summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2014-12-02 22:25:16 +0100
committerSergei Golubchik <serg@mariadb.org>2014-12-02 22:25:16 +0100
commit853077ad7e81be1ade20b4beab1b95d5766d87b1 (patch)
tree4c158691947ba7beb4577f26b160f243eabf39ef
parentbf3b4a23f75de50e0f1ab4a562e5801dabc7305b (diff)
parent2b5db1d5bcd7b46b654d59a07fc119ef6a6b8651 (diff)
downloadmariadb-git-853077ad7e81be1ade20b4beab1b95d5766d87b1.tar.gz
Merge branch '10.0' into bb-10.1-merge
Conflicts: .bzrignore VERSION cmake/plugin.cmake debian/dist/Debian/control debian/dist/Ubuntu/control mysql-test/r/join_outer.result mysql-test/r/join_outer_jcl6.result mysql-test/r/null.result mysql-test/r/old-mode.result mysql-test/r/union.result mysql-test/t/join_outer.test mysql-test/t/null.test mysql-test/t/old-mode.test mysql-test/t/union.test packaging/rpm-oel/mysql.spec.in scripts/mysql_config.sh sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/ha_ndbcluster_cond.cc sql/item_cmpfunc.h sql/lock.cc sql/sql_select.cc sql/sql_show.cc sql/sql_update.cc sql/sql_yacc.yy storage/innobase/buf/buf0flu.cc storage/innobase/fil/fil0fil.cc storage/innobase/include/srv0srv.h storage/innobase/lock/lock0lock.cc storage/tokudb/CMakeLists.txt storage/xtradb/buf/buf0flu.cc storage/xtradb/fil/fil0fil.cc storage/xtradb/include/srv0srv.h storage/xtradb/lock/lock0lock.cc support-files/mysql.spec.sh
-rw-r--r--.gitignore10
-rw-r--r--client/mysql.cc10
-rw-r--r--client/mysql_plugin.c5
-rw-r--r--client/mysql_upgrade.c15
-rw-r--r--client/mysqlimport.c13
-rw-r--r--client/mysqlslap.c2
-rw-r--r--client/mysqltest.cc8
-rw-r--r--cmake/cpack_rpm.cmake2
-rw-r--r--cmake/for_clients.cmake2
-rw-r--r--cmake/install_layout.cmake16
-rw-r--r--config.h.cmake17
-rw-r--r--debian/dist/Debian/control2
-rw-r--r--debian/dist/Debian/mariadb-server-10.1.files.in1
-rw-r--r--debian/dist/Ubuntu/control2
-rw-r--r--debian/dist/Ubuntu/mariadb-server-10.1.files.in1
-rw-r--r--debian/mariadb-test-10.1.files1
-rw-r--r--extra/comp_err.c1
-rw-r--r--extra/yassl/README22
-rw-r--r--extra/yassl/certs/ca-cert.pem100
-rw-r--r--extra/yassl/certs/client-cert.derbin782 -> 1198 bytes
-rw-r--r--extra/yassl/certs/client-cert.pem100
-rw-r--r--extra/yassl/certs/client-key.derbin319 -> 1192 bytes
-rw-r--r--extra/yassl/certs/client-keyEnc.pem34
-rw-r--r--extra/yassl/certs/dsa1024.derbin0 -> 448 bytes
-rw-r--r--extra/yassl/certs/dsa1024.pem12
-rw-r--r--extra/yassl/certs/dsa512.derbin249 -> 0 bytes
-rw-r--r--extra/yassl/certs/dsa512.pem8
-rw-r--r--extra/yassl/certs/server-cert.pem210
-rw-r--r--extra/yassl/certs/server-keyEnc.pem52
-rw-r--r--extra/yassl/include/buffer.hpp18
-rw-r--r--extra/yassl/include/openssl/ssl.h2
-rw-r--r--extra/yassl/src/buffer.cpp113
-rw-r--r--extra/yassl/src/handshake.cpp25
-rw-r--r--extra/yassl/src/yassl_imp.cpp179
-rw-r--r--extra/yassl/src/yassl_int.cpp7
-rw-r--r--extra/yassl/taocrypt/include/asn.hpp11
-rw-r--r--extra/yassl/taocrypt/include/block.hpp6
-rw-r--r--extra/yassl/taocrypt/include/integer.hpp4
-rw-r--r--extra/yassl/taocrypt/include/pwdbased.hpp3
-rw-r--r--extra/yassl/taocrypt/include/runtime.hpp17
-rw-r--r--extra/yassl/taocrypt/include/sha.hpp9
-rw-r--r--extra/yassl/taocrypt/src/aes.cpp17
-rw-r--r--extra/yassl/taocrypt/src/algebra.cpp6
-rw-r--r--extra/yassl/taocrypt/src/arc4.cpp11
-rw-r--r--extra/yassl/taocrypt/src/asn.cpp48
-rw-r--r--extra/yassl/taocrypt/src/blowfish.cpp6
-rw-r--r--extra/yassl/taocrypt/src/des.cpp11
-rw-r--r--extra/yassl/taocrypt/src/integer.cpp31
-rw-r--r--extra/yassl/taocrypt/src/md5.cpp10
-rw-r--r--extra/yassl/taocrypt/src/misc.cpp12
-rw-r--r--extra/yassl/taocrypt/src/rabbit.cpp10
-rw-r--r--extra/yassl/taocrypt/src/random.cpp3
-rw-r--r--extra/yassl/taocrypt/src/ripemd.cpp13
-rw-r--r--extra/yassl/taocrypt/src/sha.cpp11
-rw-r--r--extra/yassl/taocrypt/src/twofish.cpp11
-rw-r--r--include/m_string.h8
-rw-r--r--include/maria.h2
-rw-r--r--libmysqld/emb_qcache.cc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test13
-rw-r--r--mysql-test/extra/rpl_tests/rpl_mixing_engines.inc29
-rw-r--r--mysql-test/extra/rpl_tests/rpl_mixing_engines.test37
-rw-r--r--mysql-test/include/ctype_like_cond_propagation.inc39
-rw-r--r--mysql-test/include/ctype_like_cond_propagation_utf8_german.inc16
-rw-r--r--mysql-test/include/function_defaults.inc26
-rw-r--r--mysql-test/include/not_embedded.inc7
-rw-r--r--mysql-test/include/restart_mysqld.inc1
-rw-r--r--mysql-test/include/rpl_connect.inc2
-rw-r--r--mysql-test/include/show_events.inc1
-rw-r--r--mysql-test/include/wait_innodb_all_purged.inc59
-rw-r--r--mysql-test/lib/My/Platform.pm2
-rwxr-xr-xmysql-test/mysql-test-run.pl4
-rw-r--r--mysql-test/r/change_user_notembedded.result1
-rw-r--r--mysql-test/r/create.result47
-rw-r--r--mysql-test/r/ctype_binary.result95
-rw-r--r--mysql-test/r/ctype_cp932.result35
-rw-r--r--mysql-test/r/ctype_latin1.result192
-rw-r--r--mysql-test/r/ctype_uca.result270
-rw-r--r--mysql-test/r/ctype_ucs.result193
-rw-r--r--mysql-test/r/ctype_ucs2_def.result1
-rw-r--r--mysql-test/r/ctype_ucs2_query_cache.result1
-rw-r--r--mysql-test/r/ctype_upgrade.result18
-rw-r--r--mysql-test/r/ctype_utf16.result7
-rw-r--r--mysql-test/r/ctype_utf16_def.result1
-rw-r--r--mysql-test/r/ctype_utf8.result229
-rw-r--r--mysql-test/r/derived_opt.result154
-rw-r--r--mysql-test/r/dyncol.result22
-rw-r--r--mysql-test/r/ext_key_noPK_6794.result20
-rw-r--r--mysql-test/r/func_compress.result8
-rw-r--r--mysql-test/r/func_regexp_pcre.result6
-rw-r--r--mysql-test/r/func_test.result17
-rw-r--r--mysql-test/r/function_defaults.result88
-rw-r--r--mysql-test/r/function_defaults_innodb.result3116
-rw-r--r--mysql-test/r/gis.result6
-rw-r--r--mysql-test/r/group_by.result11
-rw-r--r--mysql-test/r/group_min_max.result45
-rw-r--r--mysql-test/r/group_min_max_innodb.result2
-rw-r--r--mysql-test/r/information_schema.result12
-rw-r--r--mysql-test/r/innodb_mrr_cpk.result48
-rw-r--r--mysql-test/r/join_cache.result12
-rw-r--r--mysql-test/r/join_outer.result23
-rw-r--r--mysql-test/r/join_outer_jcl6.result23
-rw-r--r--mysql-test/r/log_errchk.result10
-rw-r--r--mysql-test/r/log_tables_upgrade.result9
-rw-r--r--mysql-test/r/mysql_upgrade-6984.result58
-rw-r--r--mysql-test/r/mysql_upgrade.result77
-rw-r--r--mysql-test/r/mysql_upgrade_no_innodb.result5
-rw-r--r--mysql-test/r/mysql_upgrade_ssl.result9
-rw-r--r--mysql-test/r/not_embedded.require2
-rw-r--r--mysql-test/r/null.result12
-rw-r--r--mysql-test/r/openssl_1.result2
-rw-r--r--mysql-test/r/openssl_6975,tlsv10.result25
-rw-r--r--mysql-test/r/openssl_6975,tlsv12.result25
-rw-r--r--mysql-test/r/order_by_zerolength-4285.result26
-rw-r--r--mysql-test/r/partition_error.result5
-rw-r--r--mysql-test/r/processlist.result10
-rw-r--r--mysql-test/r/selectivity.result63
-rw-r--r--mysql-test/r/selectivity_innodb.result128
-rw-r--r--mysql-test/r/show_bad_definer-5553.result13
-rw-r--r--mysql-test/r/type_enum.result213
-rw-r--r--mysql-test/r/type_float.result67
-rw-r--r--mysql-test/r/type_newdecimal.result90
-rw-r--r--mysql-test/r/type_set.result159
-rw-r--r--mysql-test/r/type_time.result11
-rw-r--r--mysql-test/r/type_uint.result37
-rw-r--r--mysql-test/r/type_varchar.result41
-rw-r--r--mysql-test/r/union.result20
-rw-r--r--mysql-test/r/view.result14
-rw-r--r--mysql-test/suite.pm3
-rw-r--r--mysql-test/suite/binlog/r/load_data_stm_view.result24
-rw-r--r--mysql-test/suite/binlog/t/load_data_stm_view.test20
-rw-r--r--mysql-test/suite/heap/btree_varchar_null.result6
-rw-r--r--mysql-test/suite/heap/btree_varchar_null.test7
-rw-r--r--mysql-test/suite/innodb/disabled.def2
-rw-r--r--mysql-test/suite/innodb/r/foreign-keys.result16
-rw-r--r--mysql-test/suite/innodb/r/innodb-mdev7046.result22
-rw-r--r--mysql-test/suite/innodb/r/innodb-stats-sample.result4
-rw-r--r--mysql-test/suite/innodb/r/innodb_bug14676111.result50
-rw-r--r--mysql-test/suite/innodb/r/innodb_monitor.result605
-rw-r--r--mysql-test/suite/innodb/t/foreign-keys.test31
-rw-r--r--mysql-test/suite/innodb/t/innodb-mdev7046.test34
-rw-r--r--mysql-test/suite/innodb/t/innodb-stats-sample.test78
-rw-r--r--mysql-test/suite/innodb/t/innodb.test2
-rw-r--r--mysql-test/suite/innodb/t/innodb_bug14676111.opt1
-rw-r--r--mysql-test/suite/innodb/t/innodb_bug14676111.test53
-rw-r--r--mysql-test/suite/innodb/t/innodb_information_schema.test2
-rw-r--r--mysql-test/suite/innodb/t/innodb_monitor.test387
-rw-r--r--mysql-test/suite/multi_source/gtid.result55
-rw-r--r--mysql-test/suite/multi_source/gtid.test11
-rw-r--r--mysql-test/suite/multi_source/simple.test7
-rw-r--r--mysql-test/suite/perfschema/t/mks_timer-6258.test1
-rw-r--r--mysql-test/suite/plugins/t/server_audit.test1
-rw-r--r--mysql-test/suite/plugins/t/unix_socket.test10
-rw-r--r--mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc50
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_basic.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_gtid_crash.result70
-rw-r--r--mysql-test/suite/rpl/r/rpl_innodb_bug68220.result225
-rw-r--r--mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result28
-rw-r--r--mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result358
-rw-r--r--mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result378
-rw-r--r--mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result466
-rw-r--r--mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result344
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel.result100
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel2.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_retry.result113
-rw-r--r--mysql-test/suite/rpl/r/rpl_parallel_show_binlog_events_purge_logs.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result30
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_mixing_engines.result466
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result28
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result350
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_basic.test4
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_crash.test105
-rw-r--r--mysql-test/suite/rpl/t/rpl_innodb_bug68220.test53
-rw-r--r--mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel.test171
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel2.test7
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_retry.test168
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_parallel_temptable.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test1
-rw-r--r--mysql-test/suite/rpl/t/rpl_show_slave_hosts.test5
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test1
-rw-r--r--mysql-test/suite/storage_engine/trx/xa_recovery.test6
-rw-r--r--mysql-test/suite/sys_vars/r/character_set_connection_func.result2
-rw-r--r--mysql-test/suite/sys_vars/r/character_set_results_func.result2
-rw-r--r--mysql-test/suite/sys_vars/r/collation_connection_func.result2
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_lwm_basic.result34
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_io_capacity_max_basic.result37
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_basic.result44
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result4
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_lwm_basic.result44
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result36
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result36
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result36
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result36
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_stats_modified_counter_basic.result56
-rw-r--r--mysql-test/suite/sys_vars/r/innodb_stats_traditional_basic.result92
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff4
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_innodb.result60
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_io_capacity_max_basic.test21
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_basic.test2
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_lwm_basic.test2
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_stats_modified_counter_basic.test47
-rw-r--r--mysql-test/suite/sys_vars/t/innodb_stats_traditional_basic.test65
-rw-r--r--mysql-test/suite/vcol/r/not_supported.result67
-rw-r--r--mysql-test/suite/vcol/t/not_supported.test58
-rw-r--r--mysql-test/t/change_user_notembedded.test2
-rw-r--r--mysql-test/t/create.test33
-rw-r--r--mysql-test/t/ctype_binary.test12
-rw-r--r--mysql-test/t/ctype_cp932.test29
-rw-r--r--mysql-test/t/ctype_latin1.test7
-rw-r--r--mysql-test/t/ctype_uca.test8
-rw-r--r--mysql-test/t/ctype_ucs.test6
-rw-r--r--mysql-test/t/ctype_ucs2_def.test2
-rw-r--r--mysql-test/t/ctype_ucs2_query_cache.test2
-rw-r--r--mysql-test/t/ctype_utf16.test8
-rw-r--r--mysql-test/t/ctype_utf16_def.test1
-rw-r--r--mysql-test/t/ctype_utf8.test7
-rw-r--r--mysql-test/t/derived_opt.test93
-rw-r--r--mysql-test/t/dyncol.test26
-rw-r--r--mysql-test/t/ext_key_noPK_6794.test15
-rw-r--r--mysql-test/t/failed_auth_unixsocket.test10
-rw-r--r--mysql-test/t/func_compress.test9
-rw-r--r--mysql-test/t/func_regexp_pcre.test5
-rw-r--r--mysql-test/t/func_test.test14
-rw-r--r--mysql-test/t/function_defaults.test2
-rw-r--r--mysql-test/t/function_defaults_innodb.test24
-rw-r--r--mysql-test/t/gis.test5
-rw-r--r--mysql-test/t/group_by.test14
-rw-r--r--mysql-test/t/group_min_max.test36
-rw-r--r--mysql-test/t/information_schema.test14
-rw-r--r--mysql-test/t/information_schema_all_engines.test1
-rw-r--r--mysql-test/t/innodb_mrr_cpk.test43
-rw-r--r--mysql-test/t/join_outer.test23
-rw-r--r--mysql-test/t/log_errchk.test64
-rw-r--r--mysql-test/t/mysql_upgrade-6984.opt1
-rw-r--r--mysql-test/t/mysql_upgrade-6984.test22
-rw-r--r--mysql-test/t/null.test12
-rw-r--r--mysql-test/t/old-mode.test1
-rw-r--r--mysql-test/t/openssl_1.test15
-rw-r--r--mysql-test/t/openssl_6975.combinations6
-rw-r--r--mysql-test/t/openssl_6975.test38
-rw-r--r--mysql-test/t/order_by_zerolength-4285.test8
-rw-r--r--mysql-test/t/partition_error.test11
-rw-r--r--mysql-test/t/partition_innodb.test4
-rw-r--r--mysql-test/t/partition_innodb_plugin.test6
-rw-r--r--mysql-test/t/processlist.test19
-rw-r--r--mysql-test/t/selectivity.test54
-rw-r--r--mysql-test/t/selectivity_innodb.test76
-rw-r--r--mysql-test/t/show_bad_definer-5553.test12
-rw-r--r--mysql-test/t/ssl.test2
-rw-r--r--mysql-test/t/ssl_8k_key-master.opt4
-rw-r--r--mysql-test/t/ssl_compress.test2
-rw-r--r--mysql-test/t/type_enum.test121
-rw-r--r--mysql-test/t/type_float.test42
-rw-r--r--mysql-test/t/type_newdecimal.test52
-rw-r--r--mysql-test/t/type_set.test90
-rw-r--r--mysql-test/t/type_time.test13
-rw-r--r--mysql-test/t/type_uint.test26
-rw-r--r--mysql-test/t/type_varchar.test26
-rw-r--r--mysql-test/t/union.test20
-rw-r--r--mysql-test/t/userstat.test1
-rw-r--r--mysql-test/t/view.test15
-rw-r--r--mysql-test/valgrind.supp13
-rw-r--r--mysys/ma_dyncol.c1
-rw-r--r--pcre/ChangeLog104
-rw-r--r--pcre/NEWS7
-rw-r--r--pcre/README18
-rw-r--r--pcre/configure.ac14
-rw-r--r--pcre/doc/html/README.txt18
-rw-r--r--pcre/doc/html/pcre_config.html6
-rw-r--r--pcre/doc/html/pcre_fullinfo.html16
-rw-r--r--pcre/doc/html/pcrepattern.html25
-rw-r--r--pcre/doc/html/pcresyntax.html25
-rw-r--r--pcre/doc/pcre.txt68
-rw-r--r--pcre/doc/pcre_config.38
-rw-r--r--pcre/doc/pcre_fullinfo.318
-rw-r--r--pcre/doc/pcrepattern.325
-rw-r--r--pcre/doc/pcresyntax.325
-rw-r--r--pcre/pcre_compile.c125
-rw-r--r--pcre/pcre_dfa_exec.c2
-rw-r--r--pcre/pcre_exec.c98
-rw-r--r--pcre/pcre_internal.h2
-rw-r--r--pcre/pcre_jit_compile.c709
-rw-r--r--pcre/pcre_scanner_unittest.cc2
-rw-r--r--pcre/pcre_stringpiece.h.in3
-rw-r--r--pcre/pcre_stringpiece_unittest.cc2
-rw-r--r--pcre/pcre_study.c39
-rw-r--r--pcre/pcre_tables.c349
-rw-r--r--pcre/pcre_ucd.c5047
-rw-r--r--pcre/pcrecpp.cc4
-rw-r--r--pcre/pcregrep.c29
-rw-r--r--pcre/pcreposix.c3
-rw-r--r--pcre/testdata/testinput156
-rw-r--r--pcre/testdata/testinput112
-rw-r--r--pcre/testdata/testinput166
-rw-r--r--pcre/testdata/testinput196
-rw-r--r--pcre/testdata/testinput216
-rw-r--r--pcre/testdata/testinput65
-rw-r--r--pcre/testdata/testinput73
-rw-r--r--pcre/testdata/testinput86
-rw-r--r--pcre/testdata/testoutput1100
-rw-r--r--pcre/testdata/testoutput11-1624
-rw-r--r--pcre/testdata/testoutput11-3224
-rw-r--r--pcre/testdata/testoutput11-824
-rw-r--r--pcre/testdata/testoutput1520
-rw-r--r--pcre/testdata/testoutput1620
-rw-r--r--pcre/testdata/testoutput18-1630
-rw-r--r--pcre/testdata/testoutput18-3230
-rw-r--r--pcre/testdata/testoutput1920
-rw-r--r--pcre/testdata/testoutput263
-rw-r--r--pcre/testdata/testoutput68
-rw-r--r--pcre/testdata/testoutput78
-rw-r--r--pcre/testdata/testoutput88
-rw-r--r--pcre/ucp.h26
-rw-r--r--plugin/handler_socket/handlersocket/database.cpp2
-rw-r--r--plugin/handler_socket/handlersocket/handlersocket.cpp2
-rw-r--r--plugin/handler_socket/handlersocket/hstcpsvr.cpp2
-rw-r--r--plugin/handler_socket/libhsclient/hstcpcli.cpp2
-rw-r--r--plugin/handler_socket/libhsclient/socket.cpp2
-rw-r--r--plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs9
-rw-r--r--plugin/metadata_lock_info/metadata_lock_info.cc1
-rw-r--r--plugin/semisync/semisync.h4
-rw-r--r--plugin/server_audit/server_audit.c2
-rw-r--r--plugin/userstat/userstat.cc1
-rw-r--r--plugin/wsrep_info/plugin.cc1
-rw-r--r--scripts/CMakeLists.txt1
-rw-r--r--scripts/comp_sql.c1
-rw-r--r--scripts/fill_help_tables.sql2
-rw-r--r--scripts/mysql_secure_installation.sh5
-rw-r--r--scripts/mysql_system_tables_fix.sql24
-rw-r--r--sql-common/client.c6
-rw-r--r--sql/datadict.cc1
-rw-r--r--sql/debug_sync.cc9
-rw-r--r--sql/derror.cc1
-rw-r--r--sql/des_key_file.cc2
-rw-r--r--sql/discover.cc1
-rw-r--r--sql/event_data_objects.cc2
-rw-r--r--sql/event_db_repository.cc1
-rw-r--r--sql/event_parse_data.cc1
-rw-r--r--sql/event_queue.cc1
-rw-r--r--sql/event_scheduler.cc10
-rw-r--r--sql/events.cc1
-rw-r--r--sql/field.cc2
-rw-r--r--sql/field_conv.cc14
-rw-r--r--sql/filesort.cc2
-rw-r--r--sql/filesort_utils.cc4
-rw-r--r--sql/gstream.cc1
-rw-r--r--sql/ha_partition.cc1
-rw-r--r--sql/handler.cc9
-rw-r--r--sql/hash_filo.cc1
-rw-r--r--sql/hostname.cc1
-rw-r--r--sql/init.cc1
-rw-r--r--sql/item.cc30
-rw-r--r--sql/item.h7
-rw-r--r--sql/item_buff.cc1
-rw-r--r--sql/item_cmpfunc.cc7
-rw-r--r--sql/item_cmpfunc.h53
-rw-r--r--sql/item_create.cc1
-rw-r--r--sql/item_func.h4
-rw-r--r--sql/item_geofunc.cc1
-rw-r--r--sql/item_inetfunc.cc1
-rw-r--r--sql/item_row.cc1
-rw-r--r--sql/item_strfunc.cc21
-rw-r--r--sql/item_subselect.cc1
-rw-r--r--sql/item_sum.cc1
-rw-r--r--sql/item_timefunc.cc16
-rw-r--r--sql/item_timefunc.h9
-rw-r--r--sql/item_xmlfunc.cc1
-rw-r--r--sql/key.cc1
-rw-r--r--sql/lock.cc2
-rw-r--r--sql/log.cc271
-rw-r--r--sql/log_event.cc45
-rw-r--r--sql/log_event_old.cc2
-rw-r--r--sql/mf_iocache.cc1
-rw-r--r--sql/multi_range_read.cc25
-rw-r--r--sql/multi_range_read.h6
-rw-r--r--sql/mysql_install_db.cc1
-rw-r--r--sql/mysqld.cc28
-rw-r--r--sql/mysqld.h2
-rw-r--r--sql/net_serv.cc1
-rw-r--r--sql/opt_range.cc110
-rw-r--r--sql/opt_subselect.cc1
-rw-r--r--sql/opt_sum.cc1
-rw-r--r--sql/opt_table_elimination.cc6
-rw-r--r--sql/parse_file.cc2
-rw-r--r--sql/partition_info.cc1
-rw-r--r--sql/procedure.cc1
-rw-r--r--sql/protocol.cc1
-rw-r--r--sql/records.cc1
-rw-r--r--sql/records.h1
-rw-r--r--sql/repl_failsafe.cc1
-rw-r--r--sql/rpl_filter.cc1
-rw-r--r--sql/rpl_gtid.cc2
-rw-r--r--sql/rpl_handler.cc1
-rw-r--r--sql/rpl_injector.cc1
-rw-r--r--sql/rpl_parallel.cc276
-rw-r--r--sql/rpl_parallel.h50
-rw-r--r--sql/rpl_record.cc1
-rw-r--r--sql/rpl_record_old.cc1
-rw-r--r--sql/rpl_reporting.cc1
-rw-r--r--sql/rpl_rli.cc162
-rw-r--r--sql/rpl_rli.h1
-rw-r--r--sql/rpl_tblmap.cc2
-rw-r--r--sql/rpl_utility.cc1
-rw-r--r--sql/set_var.cc2
-rw-r--r--sql/share/errmsg-utf8.txt8
-rw-r--r--sql/slave.cc4
-rw-r--r--sql/slave.h4
-rw-r--r--sql/sp.cc1
-rw-r--r--sql/sp_cache.cc1
-rw-r--r--sql/sp_head.cc2
-rw-r--r--sql/sp_pcontext.cc1
-rw-r--r--sql/sp_rcontext.cc1
-rw-r--r--sql/spatial.cc10
-rw-r--r--sql/sql_acl.cc5
-rw-r--r--sql/sql_admin.cc2
-rw-r--r--sql/sql_analyse.cc1
-rw-r--r--sql/sql_audit.cc1
-rw-r--r--sql/sql_base.cc3
-rw-r--r--sql/sql_binlog.cc1
-rw-r--r--sql/sql_bootstrap.cc3
-rw-r--r--sql/sql_cache.cc4
-rw-r--r--sql/sql_class.cc16
-rw-r--r--sql/sql_class.h10
-rw-r--r--sql/sql_client.cc1
-rw-r--r--sql/sql_connect.cc8
-rw-r--r--sql/sql_crypt.cc1
-rw-r--r--sql/sql_cursor.cc1
-rw-r--r--sql/sql_db.cc2
-rw-r--r--sql/sql_delete.cc1
-rw-r--r--sql/sql_derived.cc4
-rw-r--r--sql/sql_do.cc1
-rw-r--r--sql/sql_error.cc1
-rw-r--r--sql/sql_explain.cc1
-rw-r--r--sql/sql_expression_cache.cc1
-rw-r--r--sql/sql_handler.cc1
-rw-r--r--sql/sql_help.cc1
-rw-r--r--sql/sql_insert.cc13
-rw-r--r--sql/sql_lex.cc1
-rw-r--r--sql/sql_lex.h9
-rw-r--r--sql/sql_load.cc26
-rw-r--r--sql/sql_locale.cc1
-rw-r--r--sql/sql_manager.cc1
-rw-r--r--sql/sql_parse.cc22
-rw-r--r--sql/sql_partition.cc2
-rw-r--r--sql/sql_plugin.cc2
-rw-r--r--sql/sql_prepare.cc2
-rw-r--r--sql/sql_priv.h66
-rw-r--r--sql/sql_profile.cc4
-rw-r--r--sql/sql_reload.cc1
-rw-r--r--sql/sql_rename.cc1
-rw-r--r--sql/sql_repl.cc1
-rw-r--r--sql/sql_select.cc94
-rw-r--r--sql/sql_servers.cc1
-rw-r--r--sql/sql_show.cc26
-rw-r--r--sql/sql_signal.cc1
-rw-r--r--sql/sql_statistics.cc30
-rw-r--r--sql/sql_statistics.h12
-rw-r--r--sql/sql_string.h4
-rw-r--r--sql/sql_table.cc19
-rw-r--r--sql/sql_tablespace.cc1
-rw-r--r--sql/sql_test.cc2
-rw-r--r--sql/sql_time.cc1
-rw-r--r--sql/sql_trigger.cc2
-rw-r--r--sql/sql_udf.cc1
-rw-r--r--sql/sql_union.cc26
-rw-r--r--sql/sql_update.cc15
-rw-r--r--sql/sql_view.cc2
-rw-r--r--sql/sql_yacc.yy32
-rw-r--r--sql/sys_vars.cc5
-rw-r--r--sql/table.cc101
-rw-r--r--sql/table.h1
-rw-r--r--sql/thr_malloc.cc1
-rw-r--r--sql/transaction.cc1
-rw-r--r--sql/uniques.cc1
-rw-r--r--sql/unireg.cc2
-rw-r--r--sql/unireg.h3
-rw-r--r--storage/archive/ha_archive.cc2
-rw-r--r--storage/blackhole/ha_blackhole.cc1
-rw-r--r--storage/cassandra/ha_cassandra.cc1
-rw-r--r--storage/connect/CMakeLists.txt6
-rw-r--r--storage/connect/array.cpp15
-rw-r--r--storage/connect/blkfil.cpp5
-rw-r--r--storage/connect/colblk.cpp2
-rw-r--r--storage/connect/connect.cc57
-rw-r--r--storage/connect/encas.h320
-rw-r--r--storage/connect/english.msg366
-rw-r--r--storage/connect/engmsg.h699
-rw-r--r--storage/connect/enids.h46
-rw-r--r--storage/connect/filamap.cpp15
-rw-r--r--storage/connect/filamap.h2
-rw-r--r--storage/connect/filamdbf.cpp7
-rw-r--r--storage/connect/filamfix.cpp54
-rw-r--r--storage/connect/filamtxt.cpp7
-rwxr-xr-xstorage/connect/filamvct.cpp35
-rw-r--r--storage/connect/filamzip.cpp1
-rw-r--r--storage/connect/filamzip.h338
-rw-r--r--storage/connect/filter.cpp35
-rw-r--r--storage/connect/frcas.h320
-rw-r--r--storage/connect/french.msg366
-rw-r--r--storage/connect/frids.h46
-rw-r--r--storage/connect/frmsg.h320
-rw-r--r--storage/connect/global.h13
-rw-r--r--storage/connect/ha_connect.cc852
-rw-r--r--storage/connect/ha_connect.h18
-rw-r--r--storage/connect/inihandl.c3
-rw-r--r--storage/connect/libdoc.cpp7
-rw-r--r--storage/connect/msgid.h1333
-rw-r--r--storage/connect/mycat.cc11
-rw-r--r--storage/connect/myconn.cpp46
-rw-r--r--storage/connect/mysql-test/connect/r/datest.result32
-rw-r--r--storage/connect/mysql-test/connect/r/mrr.result117
-rw-r--r--storage/connect/mysql-test/connect/r/updelx2.result133
-rw-r--r--storage/connect/mysql-test/connect/r/xcol.result36
-rw-r--r--storage/connect/mysql-test/connect/t/datest.test16
-rw-r--r--storage/connect/mysql-test/connect/t/mrr.test66
-rw-r--r--storage/connect/mysql-test/connect/t/updelx2.test22
-rw-r--r--storage/connect/mysql-test/connect/t/xcol.test25
-rw-r--r--storage/connect/odbconn.cpp86
-rw-r--r--storage/connect/odbconn.h4
-rw-r--r--storage/connect/os.h8
-rw-r--r--storage/connect/plgdbsem.h12
-rw-r--r--storage/connect/plgdbutl.cpp47
-rw-r--r--storage/connect/plugutil.c47
-rw-r--r--storage/connect/rcmsg.c290
-rw-r--r--storage/connect/reldef.cpp28
-rw-r--r--storage/connect/resource.h185
-rw-r--r--storage/connect/tabcol.cpp2
-rw-r--r--storage/connect/tabdos.cpp46
-rw-r--r--storage/connect/tabdos.h2
-rw-r--r--storage/connect/tabfix.cpp14
-rw-r--r--storage/connect/tabfmt.cpp20
-rw-r--r--storage/connect/tabfmt.h2
-rw-r--r--storage/connect/table.cpp14
-rw-r--r--[-rwxr-xr-x]storage/connect/tabmul.cpp4
-rw-r--r--storage/connect/tabmysql.cpp302
-rw-r--r--storage/connect/tabmysql.h3
-rw-r--r--storage/connect/taboccur.cpp2
-rw-r--r--storage/connect/tabodbc.cpp29
-rw-r--r--storage/connect/tabodbc.h2
-rw-r--r--storage/connect/tabpivot.cpp2
-rw-r--r--storage/connect/tabsys.cpp2
-rw-r--r--storage/connect/tabtbl.cpp2
-rw-r--r--storage/connect/tabutil.cpp1
-rw-r--r--storage/connect/tabutil.h2
-rw-r--r--storage/connect/tabvct.cpp10
-rw-r--r--storage/connect/tabvir.cpp305
-rw-r--r--storage/connect/tabvir.h110
-rw-r--r--storage/connect/tabwmi.cpp4
-rw-r--r--storage/connect/tabwmi.h300
-rw-r--r--storage/connect/tabxcl.cpp26
-rw-r--r--storage/connect/tabxcl.h3
-rw-r--r--storage/connect/tabxml.cpp7
-rw-r--r--storage/connect/user_connect.cc14
-rw-r--r--storage/connect/valblk.cpp1
-rw-r--r--storage/connect/value.cpp91
-rw-r--r--storage/connect/value.h4
-rwxr-xr-xstorage/connect/xindex.cpp5
-rw-r--r--storage/connect/xobject.cpp557
-rw-r--r--storage/connect/xobject.h278
-rw-r--r--storage/connect/xtable.h2
-rw-r--r--storage/csv/ha_tina.cc3
-rw-r--r--storage/csv/transparent_file.cc1
-rw-r--r--storage/example/ha_example.cc1
-rw-r--r--storage/federated/ha_federated.cc1
-rw-r--r--storage/federatedx/federatedx_io.cc2
-rw-r--r--storage/federatedx/federatedx_io_mysql.cc2
-rw-r--r--storage/federatedx/federatedx_io_null.cc2
-rw-r--r--storage/federatedx/federatedx_txn.cc2
-rw-r--r--storage/federatedx/ha_federatedx.cc1
-rw-r--r--storage/heap/ha_heap.cc1
-rw-r--r--storage/heap/hp_hash.c5
-rw-r--r--storage/innobase/api/api0api.cc34
-rw-r--r--storage/innobase/api/api0misc.cc1
-rw-r--r--storage/innobase/btr/btr0btr.cc136
-rw-r--r--storage/innobase/btr/btr0cur.cc124
-rw-r--r--storage/innobase/btr/btr0pcur.cc2
-rw-r--r--storage/innobase/buf/buf0buf.cc14
-rw-r--r--storage/innobase/buf/buf0flu.cc9
-rw-r--r--storage/innobase/buf/buf0lru.cc4
-rw-r--r--storage/innobase/dict/dict0dict.cc16
-rw-r--r--storage/innobase/dict/dict0load.cc2
-rw-r--r--storage/innobase/dict/dict0mem.cc163
-rw-r--r--storage/innobase/fil/fil0fil.cc174
-rw-r--r--storage/innobase/fts/fts0fts.cc6
-rw-r--r--storage/innobase/fts/fts0que.cc3
-rw-r--r--storage/innobase/handler/ha_innodb.cc147
-rw-r--r--storage/innobase/handler/ha_innodb.h7
-rw-r--r--storage/innobase/handler/handler0alter.cc55
-rw-r--r--storage/innobase/include/btr0cur.h12
-rw-r--r--storage/innobase/include/buf0buf.h2
-rw-r--r--storage/innobase/include/dict0mem.h92
-rw-r--r--storage/innobase/include/dict0types.h1
-rw-r--r--storage/innobase/include/fil0fil.h179
-rw-r--r--storage/innobase/include/log0log.ic10
-rw-r--r--storage/innobase/include/mtr0mtr.h16
-rw-r--r--storage/innobase/include/mtr0mtr.ic6
-rw-r--r--storage/innobase/include/os0file.h1
-rw-r--r--storage/innobase/include/os0sync.h75
-rw-r--r--storage/innobase/include/os0sync.ic32
-rw-r--r--storage/innobase/include/row0mysql.h8
-rw-r--r--storage/innobase/include/srv0mon.h4
-rw-r--r--storage/innobase/include/srv0srv.h26
-rw-r--r--storage/innobase/include/sync0arr.h6
-rw-r--r--storage/innobase/include/sync0sync.h2
-rw-r--r--storage/innobase/include/sync0sync.ic18
-rw-r--r--storage/innobase/include/trx0undo.h13
-rw-r--r--storage/innobase/include/univ.i2
-rw-r--r--storage/innobase/include/ut0counter.h4
-rw-r--r--storage/innobase/lock/lock0lock.cc5
-rw-r--r--storage/innobase/lock/lock0wait.cc4
-rw-r--r--storage/innobase/mysql-test/storage_engine/disabled.def1
-rw-r--r--storage/innobase/os/os0file.cc8
-rw-r--r--storage/innobase/os/os0sync.cc19
-rw-r--r--storage/innobase/row/row0ext.cc3
-rw-r--r--storage/innobase/row/row0ftsort.cc3
-rw-r--r--storage/innobase/row/row0ins.cc36
-rw-r--r--storage/innobase/row/row0log.cc4
-rw-r--r--storage/innobase/row/row0merge.cc3
-rw-r--r--storage/innobase/row/row0mysql.cc111
-rw-r--r--storage/innobase/row/row0purge.cc48
-rw-r--r--storage/innobase/row/row0sel.cc35
-rw-r--r--storage/innobase/row/row0umod.cc14
-rw-r--r--storage/innobase/row/row0upd.cc12
-rw-r--r--storage/innobase/srv/srv0mon.cc40
-rw-r--r--storage/innobase/srv/srv0srv.cc60
-rw-r--r--storage/innobase/sync/sync0arr.cc65
-rw-r--r--storage/innobase/sync/sync0sync.cc7
-rw-r--r--storage/innobase/trx/trx0i_s.cc2
-rw-r--r--storage/innobase/trx/trx0rec.cc8
-rw-r--r--storage/innobase/trx/trx0roll.cc19
-rw-r--r--storage/innobase/trx/trx0trx.cc8
-rw-r--r--storage/innobase/trx/trx0undo.cc10
-rw-r--r--storage/maria/ha_maria.cc2
-rw-r--r--storage/maria/unittest/ma_maria_log_cleanup.c1
-rw-r--r--storage/maria/unittest/test_file.c2
-rw-r--r--storage/mroonga/AUTHORS7
-rw-r--r--storage/mroonga/CMakeLists.txt371
-rw-r--r--storage/mroonga/ChangeLog3
-rw-r--r--storage/mroonga/Makefile.am156
-rw-r--r--storage/mroonga/NEWS1
-rw-r--r--storage/mroonga/README1
-rwxr-xr-xstorage/mroonga/autogen.sh116
-rw-r--r--storage/mroonga/build/Makefile.am2
-rw-r--r--storage/mroonga/build/cmake_modules/Makefile.am2
-rw-r--r--storage/mroonga/build/cmake_modules/ReadFileList.cmake27
-rw-r--r--storage/mroonga/build/makefiles/LC_MESSAGES.am5
-rw-r--r--storage/mroonga/build/makefiles/gettext.am73
-rw-r--r--storage/mroonga/build/makefiles/locale.am12
-rw-r--r--storage/mroonga/build/makefiles/sphinx-build.am19
-rw-r--r--storage/mroonga/build/makefiles/sphinx.am179
-rw-r--r--storage/mroonga/config.sh.in20
-rw-r--r--storage/mroonga/configure.ac493
-rw-r--r--storage/mroonga/data/Makefile.am4
-rw-r--r--storage/mroonga/data/install.sql.in19
-rw-r--r--storage/mroonga/data/uninstall.sql8
-rw-r--r--storage/mroonga/gpg_uid1
-rw-r--r--storage/mroonga/ha_mroonga.cpp15465
-rw-r--r--storage/mroonga/ha_mroonga.def15
-rw-r--r--storage/mroonga/ha_mroonga.hpp1195
-rw-r--r--storage/mroonga/lib/Makefile.am23
-rw-r--r--storage/mroonga/lib/libmrn_need_mysql_sources.am27
-rw-r--r--storage/mroonga/lib/libmrn_no_mysql_sources.am9
-rw-r--r--storage/mroonga/lib/libmysqlservices_compat_sources.am2
-rw-r--r--storage/mroonga/lib/mrn_auto_increment_value_lock.cpp42
-rw-r--r--storage/mroonga/lib/mrn_auto_increment_value_lock.hpp36
-rw-r--r--storage/mroonga/lib/mrn_condition_converter.cpp608
-rw-r--r--storage/mroonga/lib/mrn_condition_converter.hpp82
-rw-r--r--storage/mroonga/lib/mrn_database_manager.cpp341
-rw-r--r--storage/mroonga/lib/mrn_database_manager.hpp50
-rw-r--r--storage/mroonga/lib/mrn_debug_column_access.cpp36
-rw-r--r--storage/mroonga/lib/mrn_debug_column_access.hpp38
-rw-r--r--storage/mroonga/lib/mrn_encoding.cpp242
-rw-r--r--storage/mroonga/lib/mrn_encoding.hpp36
-rw-r--r--storage/mroonga/lib/mrn_external_lock.cpp43
-rw-r--r--storage/mroonga/lib/mrn_external_lock.hpp38
-rw-r--r--storage/mroonga/lib/mrn_field_normalizer.cpp142
-rw-r--r--storage/mroonga/lib/mrn_field_normalizer.hpp47
-rw-r--r--storage/mroonga/lib/mrn_grn.hpp39
-rw-r--r--storage/mroonga/lib/mrn_index_column_name.cpp96
-rw-r--r--storage/mroonga/lib/mrn_index_column_name.hpp43
-rw-r--r--storage/mroonga/lib/mrn_index_table_name.cpp89
-rw-r--r--storage/mroonga/lib/mrn_index_table_name.hpp43
-rw-r--r--storage/mroonga/lib/mrn_lock.cpp31
-rw-r--r--storage/mroonga/lib/mrn_lock.hpp36
-rw-r--r--storage/mroonga/lib/mrn_match_escalation_threshold_scope.cpp33
-rw-r--r--storage/mroonga/lib/mrn_match_escalation_threshold_scope.hpp35
-rw-r--r--storage/mroonga/lib/mrn_multiple_column_key_codec.cpp548
-rw-r--r--storage/mroonga/lib/mrn_multiple_column_key_codec.hpp70
-rw-r--r--storage/mroonga/lib/mrn_mysqlservices.cpp32
-rw-r--r--storage/mroonga/lib/mrn_parameters_parser.cpp176
-rw-r--r--storage/mroonga/lib/mrn_parameters_parser.hpp59
-rw-r--r--storage/mroonga/lib/mrn_path_mapper.cpp192
-rw-r--r--storage/mroonga/lib/mrn_path_mapper.hpp51
-rw-r--r--storage/mroonga/lib/mrn_smart_grn_obj.cpp53
-rw-r--r--storage/mroonga/lib/mrn_smart_grn_obj.hpp39
-rw-r--r--storage/mroonga/lib/mrn_time_converter.cpp260
-rw-r--r--storage/mroonga/lib/mrn_time_converter.hpp47
-rw-r--r--storage/mroonga/lib/mrn_windows.hpp31
-rw-r--r--storage/mroonga/mrn_constants.hpp47
-rw-r--r--storage/mroonga/mrn_err.h32
-rw-r--r--storage/mroonga/mrn_macro.hpp30
-rw-r--r--storage/mroonga/mrn_mysql.h83
-rw-r--r--storage/mroonga/mrn_mysql_compat.h143
-rw-r--r--storage/mroonga/mrn_table.cpp1147
-rw-r--r--storage/mroonga/mrn_table.hpp176
-rw-r--r--storage/mroonga/mrn_version.h.in40
-rw-r--r--storage/mroonga/mysql-test/Makefile.am8
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc19
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc26
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc19
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc19
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc28
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc20
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc28
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc25
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc32
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_fulltext_index_comment.inc25
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc44
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc36
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc17
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc24
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc24
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc24
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc21
-rw-r--r--storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/disabled.def9
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_flags.result10
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_type.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_unique_duplicated.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_key_multiple_column_with_data.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_comment_not_for_mroonga.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_have_index.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_create_fulltext.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_ujis.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_utf8.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_multiple_column.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_normal.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_primary.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_truncate.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_updating.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_key_multiple_column_with_data.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_ujis.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_utf8.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_multiple_column.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_normal.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_primary.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_no_primary_key.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_table.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_drop_table.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result132
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_TODO_SPLIT_ME.result53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_table_param.result70
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_text.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/binlog_TODO_SPLIT_ME.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_general_ci_french.result11
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_french.result11
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_japanese.result11
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_comment_index_not_for_mroonga.result12
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_comment_normal_not_for_mroonga.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_date_zero_date.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_enum_less_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_enum_many_with_index.result287
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id__id.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id_invalid_id.result8
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_other_table.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_reference.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_with_not_for_mroonga_comment.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_order_by_with_function.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_int_with_index_zero_value.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_set_16_with_index.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_set_24_with_index.result48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_set_32_with_index.result56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_set_64_with_index.result88
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_set_8_with_index.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_signed_bigint_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_signed_int_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_signed_mediumint_with_index.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_signed_smallint_with_index.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_signed_tinyint_with_index.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_tinyint_without_index.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_without_index.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_int_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_mediumint_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_smallint_with_index.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_tinyint_with_index.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_database_name_slash.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result172
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_comment_normal.result11
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result10
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_fulltext_index.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.result12
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_table_comment.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_reference_type.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_multiple_token_filters.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_one_token_filter.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_multiple_token_filters.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_one_token_filter.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/create_table_vector.result10
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_fulltext_column.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_index_btree_many_records.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_no_unique.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_unique.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_normal_column.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/delete_unsigned_bigint.result12
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/drop_database_TODO_SPLIT_ME.result14
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/drop_table_TODO_SPLIT_ME.result5
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/flush_logs.result1
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result147
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_empty_query.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result14
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result14
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_full_spec.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_no_weight.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_omit_section.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_three_or_more_sections.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_ascii.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_cp932.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_eucjpms.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_japanese.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_empty_query.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_groonga_varchar_vector.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_select.result66
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_not_match_against.result68
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_or.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_against.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_match.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_no_where.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_same_match_against.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_comment.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_default.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_off.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_token_filters_skip.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_two_inner_join.result41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_command_select.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_missing.result3
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result3
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_target_characters_is_not_string.result3
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_grn_id.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_reference.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_set.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_ascii.result120
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_cp932.result91
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_eucjpms.result91
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_nonexistent_charset.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_unsupported_charset.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_japanese.result95
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result170
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_datetime.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_time.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_timestamp.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_btree_normal_column_insert.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_normal.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_unique.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_hash_normal_column_insert.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_delete.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_smallint.result65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_bigint.result65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_int.result65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_smallint.result65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_varchar.result65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_delete.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_select_int.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_recreate.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_replace.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_double.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_float.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_int.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_string.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_varchar.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_32bit_equal.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_asc.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_desc.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_reinsert.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_reinsert.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_decimal.result36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_index_read.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_asc.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_desc.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_reinsert.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_varchar.resultbin0 -> 1027 bytes
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_32bit_equal.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_64bit_equal.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_index_read.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_asc.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_desc.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_asc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_desc.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_reinsert.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_int.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_string.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_exact_length.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_null_character.resultbin0 -> 387 bytes
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_short.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_varchar_null_character.resultbin0 -> 390 bytes
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_asc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_desc.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_asc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_desc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_asc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_desc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_asc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_desc.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint_unsigned.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_double.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_float.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int_unsigned.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint_unsigned.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint_unsigned.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint_unsigned.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar_collation.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_int.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_varchar.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_int.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_varchar.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_by_primary_key.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_unique_insert_after_error.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_unique_varchar.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_update_multiple_column.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/index_update_single_column.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result.in4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_none.result10
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_use.result10
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result90
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/insert_delayed.result9
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/like_unicode_ci.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/lock_tables_read.result7
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between_over.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_where_clause.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between_over.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_equal.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than_or_equal.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than_or_equal.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_TODO_SPLIT_ME.result106
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_multithread.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_single_thread.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_disabled.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_index_view.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/replace_geometry.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/replace_select_varchar.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/replace_vector.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_all.result198
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_equal.result12
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_not_equal.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_pkey.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/select_secondary_key.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/show_create_table_TODO_SPLIT_ME.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/truncate.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_fulltext.result22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_id_hash_index.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_id_unique_hash_index.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_int.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_last_insert_grn_id.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_database_path_prefix.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_new_value.result6
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_same_value.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_disable.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_invalid.result6
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_no_retry.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_valid.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_new_value.result6
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_nonexistent_path.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_same_value.result4
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_log_level_TODO_SPLIT_ME.result49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_vector_column_delimiter.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result3
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result.in3
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/suite.opt1
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/suite.pm23
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_flags.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_type.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test150
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test298
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test65
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test74
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test110
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test60
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test147
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_fulltext_index.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_table_comment.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_reference_type.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_multiple_token_filters.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_one_token_filter.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_multiple_token_filters.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_one_token_filter.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/create_table_vector.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test29
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test21
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test113
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test63
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_against.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_match.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_no_where.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_same_match_against.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_comment.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_default.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_off.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_token_filters_skip.test52
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test69
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test26
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test148
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_asc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_desc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_asc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_desc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_asc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_desc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_asc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_desc.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test105
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test32
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test60
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test57
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test57
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test57
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_TODO_SPLIT_ME.test61
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_multithread.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_single_thread.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_disabled.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_index_view.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test64
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_all.test100
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/truncate.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test33
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_int.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test28
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test27
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test25
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test22
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test61
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test22
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/disabled.def2
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_column_comment.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result49
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_create_fulltext.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_fulltext.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_multiple_column.result27
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_normal.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_primary.result23
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_updating.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_fulltext.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_lock_tables.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_multiple_column.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_normal.result26
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_primary.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result52
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result45
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result131
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/auto_increment_text.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/binlog_TODO_SPLIT_ME.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/column_comment_index_not_for_mroonga.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/column_normal_comment.result13
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result109
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result12
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_multiple_token_filters.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_one_token_filter.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/delete_TODO_SPLIT_ME.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/delete_all.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result32
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result19
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result16
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_full_spec.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_no_weight.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_omit_section.result20
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_ascii.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_cp932.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_eucjpms.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_japanese.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result41
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result66
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result25
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result4389
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result34
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result37
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result202
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_not_match_against.result68
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_parser_comment.result29
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_grn_id.result17
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_reference.result15
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_set.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result169
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result31
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result36
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/index_force_index_not_used.result8
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_TODO_SPLIT_ME.result78
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result30
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result36
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_disk_sweep.result18
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_TODO_SPLIT_ME.result67
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_no_where_clause.result24
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result21
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_query_cache.result28
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result47
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result55
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/update_fulltext.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/update_int.result36
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result53
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result39
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result33
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/version_55_performance_schema.result38
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/r/version_56_or_later_performance_schema.result73
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/suite.opt1
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/suite.pm23
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test52
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test52
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test52
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test57
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test150
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test34
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test37
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test99
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_multiple_token_filters.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_one_token_filter.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test59
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test42
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test35
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test4136
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test102
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test51
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test64
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_parser_comment.test39
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_grn_id.test52
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test36
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test38
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test145
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test50
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test32
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test91
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test44
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test49
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test45
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test68
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test46
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test69
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test63
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test40
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test53
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test59
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test57
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test43
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test55
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test47
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test48
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test56
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test54
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/version_55_performance_schema.test41
-rw-r--r--storage/mroonga/mysql-test/mroonga/wrapper/t/version_56_or_later_performance_schema.test42
-rw-r--r--storage/mroonga/plug.in6
-rw-r--r--storage/mroonga/plugin_version1
-rw-r--r--storage/mroonga/required_groonga_normalizer_mysql_version1
-rw-r--r--storage/mroonga/required_groonga_version1
-rw-r--r--storage/mroonga/sources.am11
-rw-r--r--storage/mroonga/test/Makefile.am14
-rwxr-xr-xstorage/mroonga/test/run-sql-test.sh232
-rwxr-xr-xstorage/mroonga/test/run-unit-test.sh49
-rw-r--r--storage/mroonga/test/unit/Makefile.am27
-rw-r--r--storage/mroonga/test/unit/test_mrn_path_mapper.cpp116
-rw-r--r--storage/mroonga/tools/Makefile.am6
-rwxr-xr-xstorage/mroonga/tools/prepare-sphinx-html.rb183
-rwxr-xr-xstorage/mroonga/tools/travis/before_script.sh36
-rwxr-xr-xstorage/mroonga/tools/travis/install.sh103
-rwxr-xr-xstorage/mroonga/tools/travis/script.sh120
-rwxr-xr-xstorage/mroonga/tools/upload-to-github.rb42
-rw-r--r--storage/mroonga/udf/Makefile.am10
-rw-r--r--storage/mroonga/udf/mrn_udf_command.cpp171
-rw-r--r--storage/mroonga/udf/mrn_udf_escape.cpp154
-rw-r--r--storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp54
-rw-r--r--storage/mroonga/udf/mrn_udf_snippet.cpp302
-rw-r--r--storage/mroonga/udf/sources.am5
-rw-r--r--storage/mroonga/vendor/groonga/CMakeLists.txt485
-rw-r--r--storage/mroonga/vendor/groonga/Makefile.am135
-rw-r--r--storage/mroonga/vendor/groonga/README.md49
-rwxr-xr-xstorage/mroonga/vendor/groonga/autogen.sh21
-rw-r--r--storage/mroonga/vendor/groonga/base_version1
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/Makefile.am102
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c192
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c499
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c269
-rwxr-xr-xstorage/mroonga/vendor/groonga/benchmark/bench-geo-select.sh38
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer-ddl.grn16
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c208
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-range-select.c274
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c270
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/fixtures/Makefile.am2
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/13_2010.CSV.xzbin0 -> 2355640 bytes
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/Makefile.am4
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/README.txt6
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/format_2010.html111
-rwxr-xr-xstorage/mroonga/vendor/groonga/benchmark/geo-distance-summary.rb140
-rwxr-xr-xstorage/mroonga/vendor/groonga/benchmark/geo-select-generate-grn.rb53
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am21
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.c315
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.h64
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.c83
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.h34
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/benchmark.c35
-rw-r--r--storage/mroonga/vendor/groonga/benchmark/lib/benchmark.h32
-rw-r--r--storage/mroonga/vendor/groonga/bindings/php/config.m466
-rw-r--r--storage/mroonga/vendor/groonga/bindings/php/config.w326
-rw-r--r--storage/mroonga/vendor/groonga/bindings/php/groonga.c218
-rw-r--r--storage/mroonga/vendor/groonga/bindings/php/php_groonga.h125
-rw-r--r--storage/mroonga/vendor/groonga/bindings/php/tests/001.phpt29
-rw-r--r--storage/mroonga/vendor/groonga/bindings/python/ql/groongaql.c364
-rwxr-xr-xstorage/mroonga/vendor/groonga/bindings/python/ql/setup.py22
-rw-r--r--storage/mroonga/vendor/groonga/build/Makefile.am2
-rw-r--r--storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m413
-rw-r--r--storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m423
-rw-r--r--storage/mroonga/vendor/groonga/build/cmake_modules/Makefile.am2
-rw-r--r--storage/mroonga/vendor/groonga/build/cmake_modules/ReadFileList.cmake27
-rw-r--r--storage/mroonga/vendor/groonga/build/makefiles/LC_MESSAGES.am5
-rw-r--r--storage/mroonga/vendor/groonga/build/makefiles/gettext.am73
-rw-r--r--storage/mroonga/vendor/groonga/build/makefiles/locale.am12
-rw-r--r--storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am19
-rw-r--r--storage/mroonga/vendor/groonga/build/makefiles/sphinx.am179
-rw-r--r--storage/mroonga/vendor/groonga/config.h.cmake152
-rw-r--r--storage/mroonga/vendor/groonga/config.sh.in6
-rw-r--r--storage/mroonga/vendor/groonga/configure.ac1536
-rw-r--r--storage/mroonga/vendor/groonga/gpg_uid1
-rw-r--r--storage/mroonga/vendor/groonga/groonga-httpd-conf.sh.in26
-rw-r--r--storage/mroonga/vendor/groonga/groonga.pc.in20
-rw-r--r--storage/mroonga/vendor/groonga/include/CMakeLists.txt20
-rw-r--r--storage/mroonga/vendor/groonga/include/Makefile.am6
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga.h2106
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/Makefile.am7
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/nfkc.h32
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/normalizer.h55
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/plugin.h152
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/token_filter.h71
-rw-r--r--storage/mroonga/vendor/groonga/include/groonga/tokenizer.h257
-rw-r--r--storage/mroonga/vendor/groonga/lib/CMakeLists.txt89
-rw-r--r--storage/mroonga/vendor/groonga/lib/Makefile.am46
-rw-r--r--storage/mroonga/vendor/groonga/lib/com.c1161
-rw-r--r--storage/mroonga/vendor/groonga/lib/com.h260
-rw-r--r--storage/mroonga/vendor/groonga/lib/ctx.c2992
-rw-r--r--storage/mroonga/vendor/groonga/lib/ctx.h506
-rw-r--r--storage/mroonga/vendor/groonga/lib/ctx_impl.h188
-rw-r--r--storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.c106
-rw-r--r--storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.h36
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat.cpp1104
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat.h100
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/Makefile.am12
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/array.hpp100
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/base.hpp69
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/block.hpp96
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/check.hpp151
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/cursor-factory.cpp94
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/cursor-factory.hpp46
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/cursor.hpp48
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/dat.hpp255
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/entry.hpp61
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/file-impl.cpp244
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/file-impl.hpp73
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/file.cpp67
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/file.hpp60
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/header.hpp181
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp184
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/id-cursor.hpp85
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/key-cursor.cpp349
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/key-cursor.hpp90
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/key.hpp112
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/node.hpp129
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp206
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.hpp86
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp175
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.hpp80
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/sources.am29
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/string.hpp175
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/trie.cpp1213
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/trie.hpp285
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/vector.hpp193
-rw-r--r--storage/mroonga/vendor/groonga/lib/db.c10802
-rw-r--r--storage/mroonga/vendor/groonga/lib/db.h482
-rw-r--r--storage/mroonga/vendor/groonga/lib/ecmascript.c2248
-rw-r--r--storage/mroonga/vendor/groonga/lib/ecmascript.h72
-rw-r--r--storage/mroonga/vendor/groonga/lib/ecmascript.lemon480
-rw-r--r--storage/mroonga/vendor/groonga/lib/error.c53
-rw-r--r--storage/mroonga/vendor/groonga/lib/error.h35
-rw-r--r--storage/mroonga/vendor/groonga/lib/expr.c7158
-rw-r--r--storage/mroonga/vendor/groonga/lib/expr.h73
-rw-r--r--storage/mroonga/vendor/groonga/lib/geo.c2682
-rw-r--r--storage/mroonga/vendor/groonga/lib/geo.h207
-rw-r--r--storage/mroonga/vendor/groonga/lib/groonga_in.h746
-rw-r--r--storage/mroonga/vendor/groonga/lib/hash.c3348
-rw-r--r--storage/mroonga/vendor/groonga/lib/hash.h347
-rw-r--r--storage/mroonga/vendor/groonga/lib/icudump.c294
-rw-r--r--storage/mroonga/vendor/groonga/lib/ii.c7418
-rw-r--r--storage/mroonga/vendor/groonga/lib/ii.h196
-rw-r--r--storage/mroonga/vendor/groonga/lib/io.c1801
-rw-r--r--storage/mroonga/vendor/groonga/lib/io.h495
-rw-r--r--storage/mroonga/vendor/groonga/lib/libgroonga.c8
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb.c226
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb.h43
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/Makefile.am20
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.c71
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.h35
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.c149
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.h35
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_column.c39
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_column.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.c93
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.h37
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.c697
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.h37
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_error.c185
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_error.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.c538
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.h36
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.c59
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_id.c74
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_id.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c59
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.c76
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.c135
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.c190
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.c58
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.c60
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_void.c59
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/mrb_void.h34
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/Makefile.am9
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/backtrace_entry.rb20
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/context.rb31
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/context/error_level.rb30
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/context/rc.rb99
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/eval_context.rb13
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/expression.rb13
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/index_info.rb10
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/logger.rb27
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/logger/level.rb32
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/object.rb7
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info.rb30
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_builder.rb347
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_data.rb198
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/sources.am13
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/scripts/test/empty.rb1
-rw-r--r--storage/mroonga/vendor/groonga/lib/mrb/sources.am33
-rw-r--r--storage/mroonga/vendor/groonga/lib/nfkc-custom-rules.txt1
-rw-r--r--storage/mroonga/vendor/groonga/lib/nfkc.c80249
-rwxr-xr-xstorage/mroonga/vendor/groonga/lib/nfkc.rb418
-rw-r--r--storage/mroonga/vendor/groonga/lib/normalizer.c1195
-rw-r--r--storage/mroonga/vendor/groonga/lib/normalizer_in.h52
-rw-r--r--storage/mroonga/vendor/groonga/lib/output.c1927
-rw-r--r--storage/mroonga/vendor/groonga/lib/output.h89
-rw-r--r--storage/mroonga/vendor/groonga/lib/pat.c2916
-rw-r--r--storage/mroonga/vendor/groonga/lib/pat.h114
-rw-r--r--storage/mroonga/vendor/groonga/lib/plugin.c752
-rw-r--r--storage/mroonga/vendor/groonga/lib/plugin_in.h68
-rw-r--r--storage/mroonga/vendor/groonga/lib/proc.c5482
-rw-r--r--storage/mroonga/vendor/groonga/lib/proc.h35
-rw-r--r--storage/mroonga/vendor/groonga/lib/snip.c838
-rw-r--r--storage/mroonga/vendor/groonga/lib/snip.h132
-rw-r--r--storage/mroonga/vendor/groonga/lib/sources.am52
-rw-r--r--storage/mroonga/vendor/groonga/lib/store.c1790
-rw-r--r--storage/mroonga/vendor/groonga/lib/store.h160
-rw-r--r--storage/mroonga/vendor/groonga/lib/str.c3181
-rw-r--r--storage/mroonga/vendor/groonga/lib/str.h129
-rw-r--r--storage/mroonga/vendor/groonga/lib/string.c406
-rw-r--r--storage/mroonga/vendor/groonga/lib/string_in.h65
-rw-r--r--storage/mroonga/vendor/groonga/lib/token.c897
-rw-r--r--storage/mroonga/vendor/groonga/lib/token.h95
-rw-r--r--storage/mroonga/vendor/groonga/lib/token_filter.c59
-rw-r--r--storage/mroonga/vendor/groonga/lib/tokenizer.c376
-rw-r--r--storage/mroonga/vendor/groonga/lib/util.c1151
-rw-r--r--storage/mroonga/vendor/groonga/lib/util.h48
-rw-r--r--storage/mroonga/vendor/groonga/nginx_version1
-rw-r--r--storage/mroonga/vendor/groonga/plugins/CMakeLists.txt21
-rw-r--r--storage/mroonga/vendor/groonga/plugins/Makefile.am10
-rw-r--r--storage/mroonga/vendor/groonga/plugins/query_expanders/CMakeLists.txt32
-rw-r--r--storage/mroonga/vendor/groonga/plugins/query_expanders/Makefile.am20
-rw-r--r--storage/mroonga/vendor/groonga/plugins/query_expanders/tsv.c299
-rw-r--r--storage/mroonga/vendor/groonga/plugins/query_expanders/tsv_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/CMakeLists.txt44
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/Makefile.am29
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/eval.c64
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/eval_sources.am3
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/load.c63
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/load_sources.am3
-rw-r--r--storage/mroonga/vendor/groonga/plugins/ruby/ruby_plugin.h76
-rw-r--r--storage/mroonga/vendor/groonga/plugins/suggest/CMakeLists.txt29
-rw-r--r--storage/mroonga/vendor/groonga/plugins/suggest/Makefile.am24
-rw-r--r--storage/mroonga/vendor/groonga/plugins/suggest/sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/plugins/suggest/suggest.c1023
-rw-r--r--storage/mroonga/vendor/groonga/plugins/table/CMakeLists.txt29
-rw-r--r--storage/mroonga/vendor/groonga/plugins/table/Makefile.am24
-rw-r--r--storage/mroonga/vendor/groonga/plugins/table/sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/plugins/table/table.c747
-rw-r--r--storage/mroonga/vendor/groonga/plugins/token_filters/CMakeLists.txt34
-rw-r--r--storage/mroonga/vendor/groonga/plugins/token_filters/Makefile.am20
-rw-r--r--storage/mroonga/vendor/groonga/plugins/token_filters/stop_word.c150
-rw-r--r--storage/mroonga/vendor/groonga/plugins/token_filters/stop_word_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/CMakeLists.txt53
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/Makefile.am33
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/kytea.cpp354
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/kytea_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/mecab.c338
-rw-r--r--storage/mroonga/vendor/groonga/plugins/tokenizers/mecab_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/src/.gitignore2
-rw-r--r--storage/mroonga/vendor/groonga/src/CMakeLists.txt54
-rw-r--r--storage/mroonga/vendor/groonga/src/Makefile.am48
-rw-r--r--storage/mroonga/vendor/groonga/src/grnslap.c373
-rw-r--r--storage/mroonga/vendor/groonga/src/grnslap_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/src/groonga.c2819
-rw-r--r--storage/mroonga/vendor/groonga/src/groonga_benchmark.c3172
-rw-r--r--storage/mroonga/vendor/groonga/src/groonga_benchmark_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/src/groonga_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/src/httpd/Makefile.am32
-rw-r--r--storage/mroonga/vendor/groonga/src/httpd/nginx-module/config52
-rw-r--r--storage/mroonga/vendor/groonga/src/httpd/nginx-module/ngx_http_groonga_module.c1440
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/CMakeLists.txt90
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/Makefile.am77
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/create_dataset_sources.am2
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_create_dataset.c220
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_ddl.txt62
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_httpd.c842
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_learner.c839
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/httpd_sources.am3
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/learner_sources.am3
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/util.c215
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/util.h40
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/util_sources.am3
-rw-r--r--storage/mroonga/vendor/groonga/src/suggest/zmq_compatible.h33
-rw-r--r--storage/mroonga/vendor/groonga/tools/Makefile.am6
-rwxr-xr-xstorage/mroonga/vendor/groonga/tools/groonga-memory-leak-checker.rb93
-rwxr-xr-xstorage/mroonga/vendor/groonga/tools/groonga-suggest-httpd-client.rb181
-rwxr-xr-xstorage/mroonga/vendor/groonga/tools/prepare-sphinx-html.rb183
-rwxr-xr-xstorage/mroonga/vendor/groonga/tools/travis-before-script.sh33
-rwxr-xr-xstorage/mroonga/vendor/groonga/tools/travis-script.sh15
-rw-r--r--storage/mroonga/vendor/groonga/vendor/CMakeLists.txt16
-rw-r--r--storage/mroonga/vendor/groonga/vendor/Makefile.am18
-rw-r--r--storage/mroonga/vendor/groonga/vendor/mruby/CMakeLists.txt35
-rw-r--r--storage/mroonga/vendor/groonga/vendor/mruby/Makefile.am63
-rw-r--r--storage/mroonga/vendor/groonga/vendor/mruby/build_config.rb33
-rw-r--r--storage/mroonga/vendor/groonga/vendor/mruby/sources.am56
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/mruby/update.rb88
-rw-r--r--storage/mroonga/vendor/groonga/vendor/onigmo/Makefile.am31
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/CMakeLists.txt27
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/AUTHORS1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt65
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/ChangeLog0
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/INSTALL1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/Makefile.am84
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/NEWS1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README.md201
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/autogen.sh20
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/Makefile.am18
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/Makefile.am18
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/ReadFileList.cmake27
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/configure.ac180
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/data/travis/setup.sh34
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/Makefile.am18
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/Makefile.am19
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/lgpl-2.0.txt481
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/gpg_uid1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/groonga-normalizer-mysql.pc.in5
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/CMakeLists.txt27
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/Makefile.am69
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql.c666
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_general_ci_table.h565
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_sources.am5
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h1685
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_table.h1685
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/Makefile.am6
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Makefile.am67
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Vagrantfile27
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/build-deb.sh57
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/env.sh.in8
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-packages.sh42
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-repository.sh46
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/update-repository.sh130
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/changelog41
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/compat1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/control25
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/copyright29
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/groonga-normalizer-mysql.install1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/patches/series0
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/rules15
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/source/format1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/Makefile.am1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/Makefile.am1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/groonga-normalizer-mysql.spec.in78
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/Makefile.am2
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/groonga-normalizer-mysql.spec.in77
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/source/Makefile.am25
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/ubuntu/Makefile.am28
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Makefile.am72
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Vagrantfile38
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/build-rpm.sh67
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/env.sh.in11
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/sign-rpm.sh37
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/update-repository.sh33
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/required_groonga_version1
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_uca.rb50
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_utf8.rb50
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_uca_table.rb286
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_utf8_table.rb146
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/parser.rb161
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/before_script.sh23
-rwxr-xr-xstorage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/install.sh27
-rw-r--r--storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/version1
-rwxr-xr-xstorage/mroonga/vendor/groonga/version-gen.sh35
-rw-r--r--storage/mroonga/version1
-rw-r--r--storage/mroonga/version_in_hex1
-rw-r--r--storage/mroonga/version_major1
-rw-r--r--storage/mroonga/version_micro1
-rw-r--r--storage/mroonga/version_minor1
-rw-r--r--storage/myisam/ha_myisam.cc2
-rw-r--r--storage/myisammrg/ha_myisammrg.cc2
-rw-r--r--storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff44
-rw-r--r--storage/myisammrg/mysql-test/storage_engine/disabled.def2
-rw-r--r--storage/oqgraph/ha_oqgraph.cc6
-rw-r--r--storage/oqgraph/oqgraph_thunk.cc5
-rw-r--r--storage/sequence/sequence.cc1
-rw-r--r--storage/sphinx/ha_sphinx.cc230
-rw-r--r--storage/sphinx/ha_sphinx.h8
-rw-r--r--storage/sphinx/snippets_udf.cc5
-rw-r--r--storage/spider/ha_spider.cc1
-rw-r--r--storage/spider/hs_client/config.cpp1
-rw-r--r--storage/spider/hs_client/escape.cpp1
-rw-r--r--storage/spider/hs_client/fatal.cpp1
-rw-r--r--storage/spider/hs_client/hstcpcli.cpp1
-rw-r--r--storage/spider/hs_client/socket.cpp1
-rw-r--r--storage/spider/hs_client/string_util.cpp1
-rw-r--r--storage/spider/mysql-test/spider/bg/suite.opt2
-rw-r--r--storage/spider/mysql-test/spider/suite.opt2
-rw-r--r--storage/spider/spd_conn.cc1
-rw-r--r--storage/spider/spd_copy_tables.cc1
-rw-r--r--storage/spider/spd_db_conn.cc1
-rw-r--r--storage/spider/spd_db_handlersocket.cc1
-rw-r--r--storage/spider/spd_db_mysql.cc1
-rw-r--r--storage/spider/spd_db_oracle.cc1
-rw-r--r--storage/spider/spd_direct_sql.cc1
-rw-r--r--storage/spider/spd_i_s.cc1
-rw-r--r--storage/spider/spd_malloc.cc1
-rw-r--r--storage/spider/spd_param.cc1
-rw-r--r--storage/spider/spd_ping_table.cc1
-rw-r--r--storage/spider/spd_sys_table.cc1
-rw-r--r--storage/spider/spd_table.cc1
-rw-r--r--storage/spider/spd_trx.cc1
-rw-r--r--storage/tokudb/CMakeLists.txt9
-rw-r--r--storage/tokudb/README.md8
-rw-r--r--storage/tokudb/ft-index/cmake/merge_archives_unix.cmake.in8
-rw-r--r--storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake38
-rw-r--r--storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake17
-rw-r--r--storage/tokudb/ft-index/ft/bndata.cc2
-rw-r--r--storage/tokudb/ft-index/ft/cachetable/cachetable.cc4
-rw-r--r--storage/tokudb/ft-index/ft/cachetable/checkpoint.cc2
-rw-r--r--storage/tokudb/ft-index/ft/cursor.cc2
-rw-r--r--storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc2
-rw-r--r--storage/tokudb/ft-index/ft/ft-flusher.cc10
-rw-r--r--storage/tokudb/ft-index/ft/ft-hot-flusher.cc2
-rw-r--r--storage/tokudb/ft-index/ft/ft-ops.cc29
-rw-r--r--storage/tokudb/ft-index/ft/ft-test-helpers.cc2
-rw-r--r--storage/tokudb/ft-index/ft/ft-verify.cc2
-rw-r--r--storage/tokudb/ft-index/ft/ft.cc2
-rw-r--r--storage/tokudb/ft-index/ft/le-cursor.cc2
-rw-r--r--storage/tokudb/ft-index/ft/loader/dbufio.cc2
-rw-r--r--storage/tokudb/ft-index/ft/loader/loader.cc2
-rw-r--r--storage/tokudb/ft-index/ft/loader/pqueue.cc2
-rw-r--r--storage/tokudb/ft-index/ft/logger/log_upgrade.cc2
-rw-r--r--storage/tokudb/ft-index/ft/logger/logcursor.cc2
-rw-r--r--storage/tokudb/ft-index/ft/logger/logfilemgr.cc2
-rw-r--r--storage/tokudb/ft-index/ft/logger/logformat.cc1
-rw-r--r--storage/tokudb/ft-index/ft/logger/logger.cc12
-rw-r--r--storage/tokudb/ft-index/ft/logger/recover.cc2
-rw-r--r--storage/tokudb/ft-index/ft/node.cc2
-rw-r--r--storage/tokudb/ft-index/ft/pivotkeys.cc2
-rw-r--r--storage/tokudb/ft-index/ft/serialize/block_table.cc2
-rw-r--r--storage/tokudb/ft-index/ft/serialize/compress.cc2
-rw-r--r--storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc2
-rw-r--r--storage/tokudb/ft-index/ft/serialize/ft-serialize.cc2
-rw-r--r--storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc6
-rw-r--r--storage/tokudb/ft-index/ft/serialize/sub_block.cc2
-rw-r--r--storage/tokudb/ft-index/ft/tests/CMakeLists.txt5
-rw-r--r--storage/tokudb/ft-index/ft/txn/roll.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/rollback-apply.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/rollback.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/txn.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/txn_child_manager.cc2
-rw-r--r--storage/tokudb/ft-index/ft/txn/txn_manager.cc6
-rw-r--r--storage/tokudb/ft-index/ft/ule.cc2
-rw-r--r--storage/tokudb/ft-index/ft/valgrind.suppressions6
-rw-r--r--storage/tokudb/ft-index/locktree/locktree.cc12
-rw-r--r--storage/tokudb/ft-index/locktree/manager.cc13
-rw-r--r--storage/tokudb/ft-index/locktree/tests/manager_parallel_locktree_get_release.cc145
-rw-r--r--storage/tokudb/ft-index/portability/tests/try-leak-lost.cc4
-rw-r--r--storage/tokudb/ft-index/portability/tests/try-uninit.cc8
-rw-r--r--storage/tokudb/ft-index/portability/toku_race_tools.h48
-rwxr-xr-xstorage/tokudb/ft-index/scripts/run.stress-tests.py4
-rw-r--r--storage/tokudb/ft-index/src/errors.cc2
-rw-r--r--storage/tokudb/ft-index/src/indexer-undo-do.cc2
-rw-r--r--storage/tokudb/ft-index/src/indexer.cc2
-rw-r--r--storage/tokudb/ft-index/src/loader.cc2
-rw-r--r--storage/tokudb/ft-index/src/tests/CMakeLists.txt1
-rw-r--r--storage/tokudb/ft-index/src/tests/helgrind.suppressions22
-rw-r--r--storage/tokudb/ft-index/src/tests/test_insert_unique.cc15
-rw-r--r--storage/tokudb/ft-index/src/tests/test_keylen_diff.cc26
-rw-r--r--storage/tokudb/ft-index/src/ydb.cc2
-rw-r--r--storage/tokudb/ft-index/src/ydb_cursor.cc2
-rw-r--r--storage/tokudb/ft-index/src/ydb_db.cc2
-rw-r--r--storage/tokudb/ft-index/src/ydb_env_func.cc2
-rw-r--r--storage/tokudb/ft-index/src/ydb_row_lock.cc2
-rw-r--r--storage/tokudb/ft-index/src/ydb_txn.cc1
-rw-r--r--storage/tokudb/ft-index/src/ydb_write.cc2
-rw-r--r--storage/tokudb/ft-index/tools/ftverify.cc2
-rw-r--r--storage/tokudb/ft-index/tools/tdb_logprint.cc2
-rw-r--r--storage/tokudb/ft-index/tools/tokuftdump.cc2
-rw-r--r--storage/tokudb/ha_tokudb.cc160
-rw-r--r--storage/tokudb/ha_tokudb.h7
-rw-r--r--storage/tokudb/ha_tokudb_admin.cc8
-rw-r--r--storage/tokudb/ha_tokudb_alter_56.cc2
-rw-r--r--storage/tokudb/hatoku_defines.h13
-rw-r--r--storage/tokudb/hatoku_hton.cc211
-rw-r--r--storage/tokudb/hatoku_hton.h7
-rw-r--r--storage/tokudb/mysql-test/rpl/disabled.def12
-rw-r--r--storage/tokudb/mysql-test/tokudb/disabled.def2
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_create_select.result326
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_create_select_hash_part.result514
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_create_select_range_part.result527
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_create_temp_select.result406
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_insert_select.result288
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_insert_select_dup_key.result288
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_replace_select.result450
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/bf_select_range_part.result120
-rw-r--r--storage/tokudb/mysql-test/tokudb/r/card_drop_index_2.result158
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_create_select.test129
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test169
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test169
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test135
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_delete.test15
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test134
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test132
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test202
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test10
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test19
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/card_drop_index_2.test35
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test4
-rw-r--r--storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test4
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db397_delete_trigger.result57
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db397_insert_trigger.result56
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db397_update_trigger.result58
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db739_insert.result100013
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db739_replace.result100014
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db739_upsert.result100013
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db743.result13
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash.result21
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1.result20
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1_pick.result21
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2.result20
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2_pick.result21
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/db757_part_alter_analyze.result50
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/r/tokudb718.result2
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/5585.test1
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db397_delete_trigger.test50
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db397_insert_trigger.test48
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db397_update_trigger.test52
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db739_insert.test28
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db739_replace.test29
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db739_upsert.test28
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db743.test23
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash.test15
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1.test14
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1_pick.test15
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2.test14
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2_pick.test15
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/db757_part_alter_analyze.test26
-rw-r--r--storage/tokudb/mysql-test/tokudb_bugs/t/tokudb718.test2
-rw-r--r--storage/tokudb/mysql-test/tokudb_mariadb/r/229cols.result704
-rw-r--r--storage/tokudb/mysql-test/tokudb_mariadb/r/mdev6519.result28
-rw-r--r--storage/tokudb/mysql-test/tokudb_mariadb/t/229cols.test242
-rw-r--r--storage/tokudb/mysql-test/tokudb_mariadb/t/mdev6519.test33
-rwxr-xr-xstorage/tokudb/scripts/make.mysql.bash4
-rw-r--r--storage/tokudb/tests/Makefile25
-rw-r--r--storage/tokudb/tests/card_test.cc13
-rw-r--r--storage/tokudb/tests/card_test_alter.cc686
-rw-r--r--storage/tokudb/tests/card_test_key_info.cc211
-rw-r--r--storage/tokudb/tests/fake_mysql.h3
-rw-r--r--storage/tokudb/tests/math_test_int.cc (renamed from storage/tokudb/tests/tokudb_math_test.cc)125
-rw-r--r--storage/tokudb/tests/math_test_uint.cc214
-rw-r--r--storage/tokudb/tests/vlq_test.cc100
-rw-r--r--storage/tokudb/tests/vlq_test_uint32.cc159
-rw-r--r--storage/tokudb/tests/vlq_test_uint64.cc170
-rw-r--r--storage/tokudb/tokudb_card.h11
-rw-r--r--storage/xtradb/api/api0api.cc34
-rw-r--r--storage/xtradb/api/api0misc.cc1
-rw-r--r--storage/xtradb/btr/btr0btr.cc136
-rw-r--r--storage/xtradb/btr/btr0cur.cc124
-rw-r--r--storage/xtradb/btr/btr0pcur.cc2
-rw-r--r--storage/xtradb/buf/buf0buf.cc14
-rw-r--r--storage/xtradb/buf/buf0flu.cc10
-rw-r--r--storage/xtradb/buf/buf0lru.cc4
-rw-r--r--storage/xtradb/dict/dict0dict.cc16
-rw-r--r--storage/xtradb/dict/dict0load.cc2
-rw-r--r--storage/xtradb/dict/dict0mem.cc163
-rw-r--r--storage/xtradb/fil/fil0fil.cc175
-rw-r--r--storage/xtradb/fts/fts0fts.cc6
-rw-r--r--storage/xtradb/fts/fts0que.cc3
-rw-r--r--storage/xtradb/handler/ha_innodb.cc212
-rw-r--r--storage/xtradb/handler/ha_innodb.h7
-rw-r--r--storage/xtradb/handler/handler0alter.cc59
-rw-r--r--storage/xtradb/handler/i_s.cc1
-rw-r--r--storage/xtradb/include/btr0cur.h12
-rw-r--r--storage/xtradb/include/buf0buf.h2
-rw-r--r--storage/xtradb/include/dict0mem.h92
-rw-r--r--storage/xtradb/include/dict0types.h1
-rw-r--r--storage/xtradb/include/fil0fil.h180
-rw-r--r--storage/xtradb/include/log0log.ic10
-rw-r--r--storage/xtradb/include/mtr0mtr.h16
-rw-r--r--storage/xtradb/include/mtr0mtr.ic6
-rw-r--r--storage/xtradb/include/os0file.h1
-rw-r--r--storage/xtradb/include/os0sync.h75
-rw-r--r--storage/xtradb/include/os0sync.ic31
-rw-r--r--storage/xtradb/include/os0thread.h11
-rw-r--r--storage/xtradb/include/row0mysql.h8
-rw-r--r--storage/xtradb/include/srv0mon.h4
-rw-r--r--storage/xtradb/include/srv0srv.h29
-rw-r--r--storage/xtradb/include/sync0arr.h6
-rw-r--r--storage/xtradb/include/sync0sync.h2
-rw-r--r--storage/xtradb/include/sync0sync.ic18
-rw-r--r--storage/xtradb/include/trx0undo.h13
-rw-r--r--storage/xtradb/include/univ.i4
-rw-r--r--storage/xtradb/include/ut0counter.h4
-rw-r--r--storage/xtradb/lock/lock0lock.cc5
-rw-r--r--storage/xtradb/lock/lock0wait.cc4
-rw-r--r--storage/xtradb/log/log0online.cc2
-rw-r--r--storage/xtradb/os/os0file.cc8
-rw-r--r--storage/xtradb/os/os0sync.cc19
-rw-r--r--storage/xtradb/os/os0thread.cc18
-rw-r--r--storage/xtradb/row/row0ext.cc3
-rw-r--r--storage/xtradb/row/row0ftsort.cc3
-rw-r--r--storage/xtradb/row/row0ins.cc36
-rw-r--r--storage/xtradb/row/row0log.cc4
-rw-r--r--storage/xtradb/row/row0merge.cc2
-rw-r--r--storage/xtradb/row/row0mysql.cc112
-rw-r--r--storage/xtradb/row/row0purge.cc48
-rw-r--r--storage/xtradb/row/row0sel.cc33
-rw-r--r--storage/xtradb/row/row0umod.cc14
-rw-r--r--storage/xtradb/row/row0upd.cc12
-rw-r--r--storage/xtradb/srv/srv0mon.cc40
-rw-r--r--storage/xtradb/srv/srv0srv.cc64
-rw-r--r--storage/xtradb/sync/sync0arr.cc67
-rw-r--r--storage/xtradb/sync/sync0sync.cc7
-rw-r--r--storage/xtradb/trx/trx0i_s.cc2
-rw-r--r--storage/xtradb/trx/trx0rec.cc8
-rw-r--r--storage/xtradb/trx/trx0roll.cc19
-rw-r--r--storage/xtradb/trx/trx0trx.cc8
-rw-r--r--storage/xtradb/trx/trx0undo.cc10
-rw-r--r--strings/ctype-bin.c2
-rw-r--r--strings/ctype-mb.c8
-rw-r--r--strings/ctype-simple.c15
-rw-r--r--strings/decimal.c12
-rw-r--r--tests/async_queries.c10
-rw-r--r--unittest/sql/my_apc-t.cc3
-rw-r--r--vio/viossl.c58
-rw-r--r--vio/viosslfactories.c33
2354 files changed, 594800 insertions, 12489 deletions
diff --git a/.gitignore b/.gitignore
index df25f8ae552..54444b0f94c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -211,3 +211,13 @@ tags
tests/async_queries
tests/bug25714
tests/mysql_client_test
+storage/mroonga/config.sh
+storage/mroonga/mrn_version.h
+storage/mroonga/data/install.sql
+storage/mroonga/vendor/groonga/config.h
+storage/mroonga/vendor/groonga/config.sh
+storage/mroonga/vendor/groonga/groonga.pc
+storage/mroonga/vendor/groonga/src/grnslap
+storage/mroonga/vendor/groonga/src/groonga
+storage/mroonga/vendor/groonga/src/groonga-benchmark
+storage/mroonga/vendor/groonga/src/suggest/groonga-suggest-create-dataset
diff --git a/client/mysql.cc b/client/mysql.cc
index 25e6c0255c6..b299ab96b1d 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1290,6 +1290,16 @@ int main(int argc,char *argv[])
sig_handler mysql_end(int sig)
{
+#ifndef _WIN32
+ /*
+ Ingnoring SIGQUIT and SIGINT signals when cleanup process starts.
+ This will help in resolving the double free issues, which occures in case
+ the signal handler function is started in between the clean up function.
+ */
+ signal(SIGQUIT, SIG_IGN);
+ signal(SIGINT, SIG_IGN);
+#endif
+
mysql_close(&mysql);
#ifdef HAVE_READLINE
if (!status.batch && !quick && !opt_html && !opt_xml &&
diff --git a/client/mysql_plugin.c b/client/mysql_plugin.c
index 99da157f8c6..034f021109a 100644
--- a/client/mysql_plugin.c
+++ b/client/mysql_plugin.c
@@ -15,14 +15,11 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <my_global.h>
#include <m_string.h>
#include <mysql.h>
#include <my_getopt.h>
#include <my_dir.h>
-#include <my_global.h>
-#include <stdio.h>
-#include <string.h>
-
#define SHOW_VERSION "1.0.0"
#define PRINT_VERSION do { printf("%s Ver %s Distrib %s\n", \
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index cef5e22647d..a6fbcb406b9 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -776,7 +776,7 @@ static int run_mysqlcheck_upgrade(const char *arg1, const char *arg2)
static int run_mysqlcheck_fixnames(void)
{
- verbose("Phase 3/4: Fixing table and database names");
+ verbose("Phase 3/5: Fixing table and database names");
print_conn_args("mysqlcheck");
return run_tool(mysqlcheck_path,
NULL, /* Send output from mysqlcheck directly to screen */
@@ -874,7 +874,8 @@ static int run_sql_fix_privilege_tables(void)
query_ptr++
)
{
- dynstr_append(&ds_script, *query_ptr);
+ if (strcasecmp(*query_ptr, "flush privileges;\n"))
+ dynstr_append(&ds_script, *query_ptr);
}
run_query(ds_script.str,
@@ -1035,19 +1036,23 @@ int main(int argc, char **argv)
/*
Run "mysqlcheck" and "mysql_fix_privilege_tables.sql"
*/
- verbose("Phase 1/4: Checking mysql database");
+ verbose("Phase 1/5: Checking mysql database");
if (run_mysqlcheck_upgrade("--databases", "mysql"))
die("Upgrade failed" );
- verbose("Phase 2/4: Running 'mysql_fix_privilege_tables'...");
+ verbose("Phase 2/5: Running 'mysql_fix_privilege_tables'...");
if (run_sql_fix_privilege_tables())
die("Upgrade failed" );
if (!opt_systables_only &&
(run_mysqlcheck_fixnames() ||
- verbose("Phase 4/4: Checking and upgrading tables") ||
+ verbose("Phase 4/5: Checking and upgrading tables") ||
run_mysqlcheck_upgrade("--all-databases","--skip-database=mysql")))
die("Upgrade failed" );
+ verbose("Phase 5/5: Running 'FLUSH PRIVILEGES'...");
+ if (run_query("FLUSH PRIVILEGES", NULL, TRUE))
+ die("Upgrade failed" );
+
verbose("OK");
/* Create a file indicating upgrade has been performed */
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index af0d86b1ed5..0d4ee549c4f 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -30,19 +30,15 @@
#include "client_priv.h"
#include "mysql_version.h"
-#ifdef HAVE_LIBPTHREAD
#include <my_pthread.h>
-#endif
#include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
/* Global Thread counter */
uint counter;
-#ifdef HAVE_LIBPTHREAD
pthread_mutex_t counter_mutex;
pthread_cond_t count_threshhold;
-#endif
static void db_error_with_table(MYSQL *mysql, char *table);
static void db_error(MYSQL *mysql);
@@ -502,7 +498,10 @@ static void safe_exit(int error, MYSQL *mysql)
free_defaults(argv_to_free);
mysql_library_end();
my_free(opt_password);
- my_end(my_end_arg);
+ if (error)
+ sf_leaking_memory= 1; /* dirty exit, some threads are still running */
+ else
+ my_end(my_end_arg); /* clean exit */
exit(error);
}
@@ -575,7 +574,6 @@ static char *field_escape(char *to,const char *from,uint length)
int exitcode= 0;
-#ifdef HAVE_LIBPTHREAD
pthread_handler_t worker_thread(void *arg)
{
int error;
@@ -615,7 +613,6 @@ error:
return 0;
}
-#endif
int main(int argc, char **argv)
@@ -635,7 +632,6 @@ int main(int argc, char **argv)
}
sf_leaking_memory=0; /* from now on we cleanup properly */
-#ifdef HAVE_LIBPTHREAD
if (opt_use_threads && !lock_tables)
{
pthread_t mainthread; /* Thread descriptor */
@@ -689,7 +685,6 @@ int main(int argc, char **argv)
pthread_attr_destroy(&attr);
}
else
-#endif
{
MYSQL *mysql= 0;
if (!(mysql= db_connect(current_host,current_db,current_user,opt_password)))
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index 01064f74261..b67e409ef0b 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -84,9 +84,7 @@ TODO:
#include <mysqld_error.h>
#include <my_dir.h>
#include <signal.h>
-#include <stdarg.h>
#include <sslopt-vars.h>
-#include <sys/types.h>
#ifndef __WIN__
#include <sys/wait.h>
#endif
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 6c11cd234a9..69b94bad106 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -5766,6 +5766,7 @@ void do_connect(struct st_command *command)
{
int con_port= opt_port;
char *con_options;
+ char *ssl_cipher= 0;
my_bool con_ssl= 0, con_compress= 0;
my_bool con_pipe= 0;
my_bool con_shm __attribute__ ((unused))= 0;
@@ -5854,6 +5855,11 @@ void do_connect(struct st_command *command)
length= (size_t) (end - con_options);
if (length == 3 && !strncmp(con_options, "SSL", 3))
con_ssl= 1;
+ else if (!strncmp(con_options, "SSL-CIPHER=", 11))
+ {
+ con_ssl= 1;
+ ssl_cipher=con_options + 11;
+ }
else if (length == 8 && !strncmp(con_options, "COMPRESS", 8))
con_compress= 1;
else if (length == 4 && !strncmp(con_options, "PIPE", 4))
@@ -5910,7 +5916,7 @@ void do_connect(struct st_command *command)
{
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
mysql_ssl_set(con_slot->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
- opt_ssl_capath, opt_ssl_cipher);
+ opt_ssl_capath, ssl_cipher ? ssl_cipher : opt_ssl_cipher);
mysql_options(con_slot->mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
mysql_options(con_slot->mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
#if MYSQL_VERSION_ID >= 50000
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake
index 0543a862a23..d1de42a5120 100644
--- a/cmake/cpack_rpm.cmake
+++ b/cmake/cpack_rpm.cmake
@@ -188,7 +188,7 @@ IF(RPM MATCHES "(rhel|centos)5")
ELSEIF(RPM MATCHES "(rhel|centos)6")
ALTERNATIVE_NAME("client" "mysql")
ALTERNATIVE_NAME("shared" "mysql-libs")
-ELSEIF(RPM MATCHES "fedora")
+ELSEIF(RPM MATCHES "fedora" OR RPM MATCHES "(rhel|centos)7")
SET(epoch 1) # this is fedora
ALTERNATIVE_NAME("client" "mariadb")
ALTERNATIVE_NAME("client" "mysql")
diff --git a/cmake/for_clients.cmake b/cmake/for_clients.cmake
index 7667e59e8f6..01b4c0a84f7 100644
--- a/cmake/for_clients.cmake
+++ b/cmake/for_clients.cmake
@@ -69,7 +69,7 @@ REPLACE_FOR_CLIENTS(CFLAGS "[DU]DBUG_OFF" "[DU]SAFE_MUTEX" "[DU]NDEBUG"
"[DU]UNIV_MUST_NOT_INLINE" "[DU]FORCE_INIT_OF_VARS" "[DU]EXTRA_DEBUG" "[DU]HAVE_valgrind"
"O" "O[0-9]" "xO[0-9]" "W[-A-Za-z]*" "mtune=[-A-Za-z0-9]*" "g" "fPIC"
"mcpu=[-A-Za-z0-9]*" "unroll2" "ip" "mp" "march=[-A-Za-z0-9]*" "Xa"
- "xstrconst" "xc99=none" "AC99" "restrict")
+ "xstrconst" "xc99=none" "AC99" "restrict" "W[-A-Za-z]*=[-A-Za-z0-9]*")
# Same for --libs
REPLACE_FOR_CLIENTS(LIBS lmtmalloc static-libcxa i-static static-intel)
diff --git a/cmake/install_layout.cmake b/cmake/install_layout.cmake
index d5f60832884..ebf3852182c 100644
--- a/cmake/install_layout.cmake
+++ b/cmake/install_layout.cmake
@@ -103,16 +103,6 @@ IF(UNIX)
ENDIF()
#
-# plugin_tests's value should not be used by imported plugins,
-# just use if(INSTALL_PLUGINTESTDIR).
-# The plugin must set its own install path for tests
-#
-FILE(GLOB plugin_tests
- ${CMAKE_SOURCE_DIR}/plugin/*/tests
- ${CMAKE_SOURCE_DIR}/internal/plugin/*/tests
-)
-
-#
# STANDALONE layout
#
SET(INSTALL_BINDIR_STANDALONE "bin")
@@ -136,7 +126,6 @@ SET(INSTALL_SQLBENCHDIR_STANDALONE ".")
SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files")
#
SET(INSTALL_MYSQLDATADIR_STANDALONE "data")
-SET(INSTALL_PLUGINTESTDIR_STANDALONE ${plugin_tests})
SET(INSTALL_UNIX_ADDRDIR_STANDALONE "/tmp/mysql.sock")
#
@@ -170,7 +159,6 @@ SET(INSTALL_SQLBENCHDIR_RPM "")
SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_RPM ${plugin_tests})
SET(INSTALL_UNIX_ADDRDIR_RPM "${INSTALL_MYSQLDATADIR_RPM}/mysql.sock")
@@ -199,7 +187,6 @@ SET(INSTALL_SQLBENCHDIR_DEB ".")
SET(INSTALL_SUPPORTFILESDIR_DEB "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_DEB ${plugin_tests})
SET(INSTALL_UNIX_ADDRDIR_DEB "/var/run/mysqld/mysqld.sock")
#
@@ -226,7 +213,6 @@ SET(INSTALL_SQLBENCHDIR_SVR4 ".")
SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files")
#
SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql")
-SET(INSTALL_PLUGINTESTDIR_SVR4 ${plugin_tests})
SET(INSTALL_UNIX_ADDRDIR_SVR "/tmp/mysql.sock")
@@ -242,7 +228,7 @@ SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "")
# will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE
# layout is chosen)
FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN SYSCONF SYSCONF2
- INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST UNIX_ADDR)
+ INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA UNIX_ADDR)
SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}}
CACHE STRING "${var} installation directory" ${FORCE})
MARK_AS_ADVANCED(INSTALL_${var}DIR)
diff --git a/config.h.cmake b/config.h.cmake
index c575f13a62d..adedd64cdba 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -659,4 +659,21 @@
#define __STDC_FORMAT_MACROS
#endif
+/*
+ stat structure (from <sys/stat.h>) is conditionally defined
+ to have different layout and size depending on the defined macros.
+ The correct macro is defined in my_config.h, which means it MUST be
+ included first (or at least before <features.h> - so, practically,
+ before including any system headers).
+
+ Check the include order by looking at __GLIBC__ (defined in <features.h>)
+
+ But we cannot force all third-party clients/connectors to include
+ my_config.h first. So, their crashes are their responsibility,
+ we enable this check only for MariaDB sources (SAFE_MUTEX check).
+*/
+#if defined(__GLIBC__) && defined(SAFE_MUTEX)
+#error <my_config.h> MUST be included first!
+#endif
+
#endif
diff --git a/debian/dist/Debian/control b/debian/dist/Debian/control
index e68f0277076..ffa4d02fff4 100644
--- a/debian/dist/Debian/control
+++ b/debian/dist/Debian/control
@@ -196,7 +196,7 @@ Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl,
perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd,
lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}),
galera (>=25.2), rsync, lsof, socat | netcat, grep, gawk, iproute,
- coreutils, findutils
+ coreutils, bsdutils, findutils
Provides: mariadb-server, mysql-server, virtual-mysql-server
Conflicts: mariadb-server (<< ${source:Version}), mysql-server (<< ${source:Version}),
mysql-server-4.1, mysql-server-5.0, mysql-server-5.1, mysql-server-5.5,
diff --git a/debian/dist/Debian/mariadb-server-10.1.files.in b/debian/dist/Debian/mariadb-server-10.1.files.in
index 402bbade712..5f752de5441 100644
--- a/debian/dist/Debian/mariadb-server-10.1.files.in
+++ b/debian/dist/Debian/mariadb-server-10.1.files.in
@@ -1,5 +1,6 @@
usr/lib/mysql/plugin/auth_pam.so
usr/lib/mysql/plugin/auth_socket.so
+usr/lib/mysql/plugin/ha_mroonga.so
usr/lib/mysql/plugin/ha_sequence.so
usr/lib/mysql/plugin/ha_sphinx.so
usr/lib/mysql/plugin/ha_innodb.so
diff --git a/debian/dist/Ubuntu/control b/debian/dist/Ubuntu/control
index 85a46e8a47f..f3f8dc5cb1a 100644
--- a/debian/dist/Ubuntu/control
+++ b/debian/dist/Ubuntu/control
@@ -190,7 +190,7 @@ Depends: mariadb-client-10.1 (>= ${source:Version}), libdbi-perl,
perl (>= 5.6), ${shlibs:Depends}, ${misc:Depends}, psmisc, passwd,
lsb-base (>= 3.0-10), mariadb-server-core-10.1 (>= ${binary:Version}),
galera (>=25.2), rsync, lsof, socat | netcat, grep, gawk, iproute,
- coreutils, findutils
+ coreutils, bsdutils, findutils
Provides: mariadb-server, mysql-server, virtual-mysql-server
Conflicts: mariadb-server (<< ${source:Version}), mysql-server (<< ${source:Version}),
mysql-server-4.1, mysql-server-5.0, mysql-server-5.1, mysql-server-5.5,
diff --git a/debian/dist/Ubuntu/mariadb-server-10.1.files.in b/debian/dist/Ubuntu/mariadb-server-10.1.files.in
index 36ab7d9e330..9856a3d4a5b 100644
--- a/debian/dist/Ubuntu/mariadb-server-10.1.files.in
+++ b/debian/dist/Ubuntu/mariadb-server-10.1.files.in
@@ -1,5 +1,6 @@
usr/lib/mysql/plugin/auth_pam.so
usr/lib/mysql/plugin/auth_socket.so
+usr/lib/mysql/plugin/ha_mroonga.so
usr/lib/mysql/plugin/ha_sequence.so
usr/lib/mysql/plugin/ha_sphinx.so
usr/lib/mysql/plugin/ha_innodb.so
diff --git a/debian/mariadb-test-10.1.files b/debian/mariadb-test-10.1.files
index a1c0d5af54e..767f040b45a 100644
--- a/debian/mariadb-test-10.1.files
+++ b/debian/mariadb-test-10.1.files
@@ -6,6 +6,7 @@ usr/lib/mysql/plugin/qa_auth_client.so
usr/lib/mysql/plugin/auth_0x0100.so
usr/lib/mysql/plugin/mypluglib.so
usr/lib/mysql/plugin/ha_test_sql_discovery.so
+usr/lib/mysql/plugin/ha_example.so
usr/lib/mysql/plugin/daemon_example.ini
usr/lib/mysql/plugin/libdaemon_example.so
usr/lib/mysql/plugin/adt_null.so
diff --git a/extra/comp_err.c b/extra/comp_err.c
index 59fa508a7fe..3fc4b05fa61 100644
--- a/extra/comp_err.c
+++ b/extra/comp_err.c
@@ -30,7 +30,6 @@
#include <my_sys.h>
#include <m_string.h>
#include <my_getopt.h>
-#include <assert.h>
#include <my_dir.h>
#define MAX_ROWS 2000
diff --git a/extra/yassl/README b/extra/yassl/README
index 2c144815f19..b18e2baeea8 100644
--- a/extra/yassl/README
+++ b/extra/yassl/README
@@ -12,15 +12,31 @@ before calling SSL_new();
*** end Note ***
-yaSSL Release notes, version 2.3.0 (12/5/2013)
+yaSSL Release notes, version 2.3.4 (8/15/2014)
- This release of yaSSL updates asm for newer GCC versions.
+ This release of yaSSL adds checking to the input_buffer class itself.
See normal build instructions below under 1.0.6.
See libcurl build instructions below under 1.3.0 and note in 1.5.8.
-*****************yaSSL Release notes, version 2.2.3b (4/23/2013)
+yaSSL Release notes, version 2.3.2 (7/25/2014)
+
+ This release of yaSSL updates test certs.
+
+See normal build instructions below under 1.0.6.
+See libcurl build instructions below under 1.3.0 and note in 1.5.8.
+
+
+*****************yaSSL Release notes, version 2.3.0 (12/5/2013)
+
+ This release of yaSSL updates asm for newer GCC versions.
+
+See normal build instructions below under 1.0.6.
+See libcurl build instructions below under 1.3.0 and note in 1.5.8.
+
+
+*****************yaSSL Release notes, version 2.2.3 (4/23/2013)
This release of yaSSL updates the test certificates as they were expired
diff --git a/extra/yassl/certs/ca-cert.pem b/extra/yassl/certs/ca-cert.pem
index b2dc6ae6ee3..7e64eb47961 100644
--- a/extra/yassl/certs/ca-cert.pem
+++ b/extra/yassl/certs/ca-cert.pem
@@ -1,45 +1,45 @@
-----BEGIN CERTIFICATE-----
-MIIEnjCCA4agAwIBAgIJAOnQp195JfQ8MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjERMA8G
-A1UEChMIU2F3dG9vdGgxEzARBgNVBAsTCkNvbnN1bHRpbmcxFjAUBgNVBAMTDXd3
-dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMB4XDTEx
-MTAyNDE4MTgxNVoXDTE0MDcyMDE4MTgxNVowgZAxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhTYXd0b290
-aDETMBEGA1UECxMKQ29uc3VsdGluZzEWMBQGA1UEAxMNd3d3Lnlhc3NsLmNvbTEd
-MBsGCSqGSIb3DQEJARYOaW5mb0B5YXNzbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQC/DMotFLIehEJbzTgfSvJNdRDxtjWf38p9A5jTrN4DZu4q
-8diwfW4HVAsQmCFNgMsSIOfMT95FfclydzLqypC7aVIQAy+o85XF8YtiVhvvZ2+k
-EEGVrQqb46XAsNJwdlAwW6joCCx87aeieo04KRysx+3yfJWwlYJ9SVw4zXcl772A
-dVOUPD3KY1ufFbXTHRMvGdE823Y6zLh9yeXC19pAb9gh3HMbQi1TnP4a/H2rejY/
-mN6EfAVnzmoUOIep8Yy1aMtof3EgK/WgY/VWL6Mm0rdvsVoX1ziZCP6TWG/+wxNJ
-CBYLp01nAFIxZyNOmO1RRR25BNkL7Ngos0u97TZ5AgMBAAGjgfgwgfUwHQYDVR0O
-BBYEFCeOZxF0wyYdP+0zY7Ok2B0w5ejVMIHFBgNVHSMEgb0wgbqAFCeOZxF0wyYd
-P+0zY7Ok2B0w5ejVoYGWpIGTMIGQMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9u
-dGFuYTEQMA4GA1UEBxMHQm96ZW1hbjERMA8GA1UEChMIU2F3dG9vdGgxEzARBgNV
-BAsTCkNvbnN1bHRpbmcxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkqhkiG
-9w0BCQEWDmluZm9AeWFzc2wuY29tggkA6dCnX3kl9DwwDAYDVR0TBAUwAwEB/zAN
-BgkqhkiG9w0BAQUFAAOCAQEAX4YU9FGLvKVOMNperJr4bNkmS5P54xyJb57us513
-PokgdqPm6IYVIdviM7I01dCf88Gkh5Jc+dH/MC+OA7yzPAwyo5BfGpAer53zntcH
-Aql9J2ZjL68Y16wYmIyDjzjzC6w2EHX7ynYTUFsCj3O/46Dug1IlVM4mzpy9L3mr
-G2C4kvEDwPw7CNnArdVyCCWAYS3cn6eDYgdH4AdMSwcwBKmHHFV/BxLQy0Jdy89m
-ARoX7vkPYLfbb2jlTkFibtNvYE9LJ97PGAfxE13LP6klRNpSXMgE4VYS9SqQTtHi
-rwG1I6HsMdp7Y2nEuPPnzqE9wNtt87LZRsifw7hwWh9/yg==
+MIIEqjCCA5KgAwIBAgIJAJpBR82hFGKMMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD
+VQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8G
+A1UECgwIU2F3dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3
+dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTAe
+Fw0xNDA3MTEwMzIwMDhaFw0xNzA0MDYwMzIwMDhaMIGUMQswCQYDVQQGEwJVUzEQ
+MA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8GA1UECgwIU2F3
+dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3dy53b2xmc3Ns
+LmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL8Myi0Ush6EQlvNOB9K8k11EPG2NZ/fyn0D
+mNOs3gNm7irx2LB9bgdUCxCYIU2AyxIg58xP3kV9yXJ3MurKkLtpUhADL6jzlcXx
+i2JWG+9nb6QQQZWtCpvjpcCw0nB2UDBbqOgILHztp6J6jTgpHKzH7fJ8lbCVgn1J
+XDjNdyXvvYB1U5Q8PcpjW58VtdMdEy8Z0TzbdjrMuH3J5cLX2kBv2CHccxtCLVOc
+/hr8fat6Nj+Y3oR8BWfOahQ4h6nxjLVoy2h/cSAr9aBj9VYvoybSt2+xWhfXOJkI
+/pNYb/7DE0kIFgunTWcAUjFnI06Y7VFFHbkE2Qvs2CizS73tNnkCAwEAAaOB/DCB
++TAdBgNVHQ4EFgQUJ45nEXTDJh0/7TNjs6TYHTDl6NUwgckGA1UdIwSBwTCBvoAU
+J45nEXTDJh0/7TNjs6TYHTDl6NWhgZqkgZcwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290
+aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
+MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tggkAmkFHzaEUYowwDAYD
+VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAeXgMbXmIkfw6FZz5J2IW8CEf
++n0/oqgyHvfyEal0FnRe3BjK8AAq1QMGJjDxR4P9Mm787apPfQxjYDEvfAy/mWaH
+7ScIhi3EM+iYIxz+o9uaSU78WkLvccM/rdxKqNKjHQmsMwR7hvNtAFmjyNvRPHP2
+DpDWXkngvzZjCHulsI81O1aMETVJBBzQ57pWxQ0KkY3Wt2IZNBJSTNJtfMU9DxiB
+VMv2POWE0tZxFewaNAvwoCF0Q8ijsN/ZZ9rirZNI+KCHvXkU4GIK3/cxLjF70TIq
+Cv5dFO/ZZFDkg5G8cA3XiI3ZvIQOxRqzv2QCTlGRpKKFFYOv8FubKElfsrMD2A==
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
- e9:d0:a7:5f:79:25:f4:3c
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.yassl.com/emailAddress=info@yassl.com
+ 9a:41:47:cd:a1:14:62:8c
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Validity
- Not Before: Oct 24 18:18:15 2011 GMT
- Not After : Jul 20 18:18:15 2014 GMT
- Subject: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.yassl.com/emailAddress=info@yassl.com
+ Not Before: Jul 11 03:20:08 2014 GMT
+ Not After : Apr 6 03:20:08 2017 GMT
+ Subject: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
+ Public-Key: (2048 bit)
+ Modulus:
00:bf:0c:ca:2d:14:b2:1e:84:42:5b:cd:38:1f:4a:
f2:4d:75:10:f1:b6:35:9f:df:ca:7d:03:98:d3:ac:
de:03:66:ee:2a:f1:d8:b0:7d:6e:07:54:0b:10:98:
@@ -64,24 +64,24 @@ Certificate:
27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
X509v3 Authority Key Identifier:
keyid:27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
- DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.yassl.com/emailAddress=info@yassl.com
- serial:E9:D0:A7:5F:79:25:F4:3C
+ DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
+ serial:9A:41:47:CD:A1:14:62:8C
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
- 5f:86:14:f4:51:8b:bc:a5:4e:30:da:5e:ac:9a:f8:6c:d9:26:
- 4b:93:f9:e3:1c:89:6f:9e:ee:b3:9d:77:3e:89:20:76:a3:e6:
- e8:86:15:21:db:e2:33:b2:34:d5:d0:9f:f3:c1:a4:87:92:5c:
- f9:d1:ff:30:2f:8e:03:bc:b3:3c:0c:32:a3:90:5f:1a:90:1e:
- af:9d:f3:9e:d7:07:02:a9:7d:27:66:63:2f:af:18:d7:ac:18:
- 98:8c:83:8f:38:f3:0b:ac:36:10:75:fb:ca:76:13:50:5b:02:
- 8f:73:bf:e3:a0:ee:83:52:25:54:ce:26:ce:9c:bd:2f:79:ab:
- 1b:60:b8:92:f1:03:c0:fc:3b:08:d9:c0:ad:d5:72:08:25:80:
- 61:2d:dc:9f:a7:83:62:07:47:e0:07:4c:4b:07:30:04:a9:87:
- 1c:55:7f:07:12:d0:cb:42:5d:cb:cf:66:01:1a:17:ee:f9:0f:
- 60:b7:db:6f:68:e5:4e:41:62:6e:d3:6f:60:4f:4b:27:de:cf:
- 18:07:f1:13:5d:cb:3f:a9:25:44:da:52:5c:c8:04:e1:56:12:
- f5:2a:90:4e:d1:e2:af:01:b5:23:a1:ec:31:da:7b:63:69:c4:
- b8:f3:e7:ce:a1:3d:c0:db:6d:f3:b2:d9:46:c8:9f:c3:b8:70:
- 5a:1f:7f:ca
+ 79:78:0c:6d:79:88:91:fc:3a:15:9c:f9:27:62:16:f0:21:1f:
+ fa:7d:3f:a2:a8:32:1e:f7:f2:11:a9:74:16:74:5e:dc:18:ca:
+ f0:00:2a:d5:03:06:26:30:f1:47:83:fd:32:6e:fc:ed:aa:4f:
+ 7d:0c:63:60:31:2f:7c:0c:bf:99:66:87:ed:27:08:86:2d:c4:
+ 33:e8:98:23:1c:fe:a3:db:9a:49:4e:fc:5a:42:ef:71:c3:3f:
+ ad:dc:4a:a8:d2:a3:1d:09:ac:33:04:7b:86:f3:6d:00:59:a3:
+ c8:db:d1:3c:73:f6:0e:90:d6:5e:49:e0:bf:36:63:08:7b:a5:
+ b0:8f:35:3b:56:8c:11:35:49:04:1c:d0:e7:ba:56:c5:0d:0a:
+ 91:8d:d6:b7:62:19:34:12:52:4c:d2:6d:7c:c5:3d:0f:18:81:
+ 54:cb:f6:3c:e5:84:d2:d6:71:15:ec:1a:34:0b:f0:a0:21:74:
+ 43:c8:a3:b0:df:d9:67:da:e2:ad:93:48:f8:a0:87:bd:79:14:
+ e0:62:0a:df:f7:31:2e:31:7b:d1:32:2a:0a:fe:5d:14:ef:d9:
+ 64:50:e4:83:91:bc:70:0d:d7:88:8d:d9:bc:84:0e:c5:1a:b3:
+ bf:64:02:4e:51:91:a4:a2:85:15:83:af:f0:5b:9b:28:49:5f:
+ b2:b3:03:d8
diff --git a/extra/yassl/certs/client-cert.der b/extra/yassl/certs/client-cert.der
index 9c2ef138bf6..293985adb97 100644
--- a/extra/yassl/certs/client-cert.der
+++ b/extra/yassl/certs/client-cert.der
Binary files differ
diff --git a/extra/yassl/certs/client-cert.pem b/extra/yassl/certs/client-cert.pem
index 278b43fe65c..38330d5380e 100644
--- a/extra/yassl/certs/client-cert.pem
+++ b/extra/yassl/certs/client-cert.pem
@@ -2,17 +2,17 @@ Certificate:
Data:
Version: 3 (0x2)
Serial Number:
- 87:4a:75:be:91:66:d8:3d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=Oregon, L=Portland, O=yaSSL, OU=Programming, CN=www.yassl.com/emailAddress=info@yassl.com
+ b6:63:af:8f:5d:62:57:a0
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: C=US, ST=Montana, L=Bozeman, O=wolfSSL, OU=Programming, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Validity
- Not Before: Oct 24 18:21:55 2011 GMT
- Not After : Jul 20 18:21:55 2014 GMT
- Subject: C=US, ST=Oregon, L=Portland, O=yaSSL, OU=Programming, CN=www.yassl.com/emailAddress=info@yassl.com
+ Not Before: Jul 11 17:39:44 2014 GMT
+ Not After : Apr 6 17:39:44 2017 GMT
+ Subject: C=US, ST=Montana, L=Bozeman, O=wolfSSL, OU=Programming, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
+ Public-Key: (2048 bit)
+ Modulus:
00:c3:03:d1:2b:fe:39:a4:32:45:3b:53:c8:84:2b:
2a:7c:74:9a:bd:aa:2a:52:07:47:d6:a6:36:b2:07:
32:8e:d0:ba:69:7b:c6:c3:44:9e:d4:81:48:fd:2d:
@@ -37,51 +37,51 @@ Certificate:
33:D8:45:66:D7:68:87:18:7E:54:0D:70:27:91:C7:26:D7:85:65:C0
X509v3 Authority Key Identifier:
keyid:33:D8:45:66:D7:68:87:18:7E:54:0D:70:27:91:C7:26:D7:85:65:C0
- DirName:/C=US/ST=Oregon/L=Portland/O=yaSSL/OU=Programming/CN=www.yassl.com/emailAddress=info@yassl.com
- serial:87:4A:75:BE:91:66:D8:3D
+ DirName:/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=Programming/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
+ serial:B6:63:AF:8F:5D:62:57:A0
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
- 1c:7c:42:81:29:9e:21:cf:d0:d8:c1:54:6f:cc:ae:14:09:38:
- ff:68:98:9a:95:53:76:18:7b:e6:30:76:ec:28:0d:75:a7:de:
- e0:cd:8e:d5:55:23:6a:47:2b:4e:8d:fc:7d:06:a3:d8:0f:ad:
- 5e:d6:04:c9:00:33:fb:77:27:d3:b5:03:b3:7b:21:74:31:0b:
- 4a:af:2d:1a:b3:93:8e:cc:f3:5f:3d:90:3f:cc:e3:55:19:91:
- 7b:78:24:2e:4a:09:bb:18:4e:61:2d:9c:c6:0a:a0:34:91:88:
- 70:6b:3b:48:47:bc:79:94:a2:a0:4d:32:47:54:c2:a3:dc:2e:
- d2:51:4c:29:39:11:ff:e2:15:5e:58:97:36:f6:e9:06:06:86:
- 0e:8d:9d:95:03:72:b2:8b:19:7c:e9:14:6e:a1:88:73:68:58:
- 6d:71:5e:c2:d5:d3:13:d2:5f:de:ea:03:be:e2:00:40:e5:ce:
- fd:e6:92:31:57:c3:eb:bb:66:ac:cb:2f:1a:fa:e0:62:a2:47:
- f4:93:43:2a:4b:6c:5e:0a:2f:f9:e7:e6:4a:63:86:b0:ac:2a:
- a1:eb:b4:5b:67:cd:32:e4:b6:11:4b:9a:72:66:0d:a2:4a:76:
- 8f:fe:22:bc:83:fd:db:b7:d5:a9:ee:05:c9:b1:71:7e:1b:2b:
- e1:e3:af:c0
+ 85:10:90:c5:5d:de:25:8c:f2:57:7b:2d:14:1c:05:f9:71:63:
+ 40:b0:e3:c1:c1:2e:13:2a:7a:b7:d6:24:58:87:eb:03:fb:0d:
+ af:e0:f4:d0:c8:bc:51:36:10:4f:79:cc:4f:66:7d:af:99:cb:
+ 7b:ce:68:94:c6:36:aa:42:6e:8c:78:5b:b2:85:ca:d1:e1:a8:
+ 31:d1:81:d9:f9:c1:a3:9e:34:43:ef:0a:79:7d:3e:83:61:fc:
+ 14:5c:d1:dd:bc:0e:d7:51:b7:71:6e:41:7e:8b:2c:5a:9a:cb:
+ 77:4b:6a:f5:06:ff:02:af:1e:e6:63:4f:bc:44:d9:3f:56:9e:
+ 09:9c:43:f9:55:21:32:46:82:09:86:a9:7b:74:1c:9e:5a:2a:
+ bf:03:79:91:cb:f2:29:7f:c9:15:82:89:b9:53:cd:7e:07:90:
+ a9:5d:76:e1:19:5e:0d:58:b8:59:d5:0d:df:23:ab:6b:63:76:
+ 19:9e:9c:df:b0:57:49:6c:d0:86:97:c3:6c:3c:fa:e0:56:c2:
+ 1b:e3:a1:42:1a:58:62:85:9d:74:19:83:08:af:59:90:f8:99:
+ bd:67:d3:4a:ea:0e:c9:ca:61:8a:0d:8a:42:cc:90:e9:2e:c2:
+ 54:73:7f:5e:af:8d:e2:32:cb:45:20:d6:19:4d:5b:77:31:cc:
+ 0f:2d:c0:7e
-----BEGIN CERTIFICATE-----
-MIIEmDCCA4CgAwIBAgIJAIdKdb6RZtg9MA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD
-VQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMREwDwYDVQQHEwhQb3J0bGFuZDEOMAwG
-A1UEChMFeWFTU0wxFDASBgNVBAsTC1Byb2dyYW1taW5nMRYwFAYDVQQDEw13d3cu
-eWFzc2wuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0xMTEw
-MjQxODIxNTVaFw0xNDA3MjAxODIxNTVaMIGOMQswCQYDVQQGEwJVUzEPMA0GA1UE
-CBMGT3JlZ29uMREwDwYDVQQHEwhQb3J0bGFuZDEOMAwGA1UEChMFeWFTU0wxFDAS
-BgNVBAsTC1Byb2dyYW1taW5nMRYwFAYDVQQDEw13d3cueWFzc2wuY29tMR0wGwYJ
-KoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMMD0Sv+OaQyRTtTyIQrKnx0mr2qKlIHR9amNrIHMo7Quml7xsNE
-ntSBSP0taKKLZ7uhdcg2LErSG/eLus8N+e/s8YEee5sDR5q/Zcx/ZSRppugUiVvk
-NPfFsBST9Wd7Onp44QFWVpGmE0KN0jxAnEzv0YbfN1EbDKE79fGjSjXk4c6W3xt+
-v06X0BDoqAgwga8gC0MUxXRntDKCb42GwohAmTaDuh5AciIX11JlJHOwzu8Zza7/
-eGx7wBID1E5yDVBtO6M7o5lencjZDIWz2YrZVCbbbfqsu/8lTMTRefRx04ZAGBOw
-Y7VyTjDEl4SGLVYv1xX3f8Cu9fxb5fuhutMCAwEAAaOB9jCB8zAdBgNVHQ4EFgQU
-M9hFZtdohxh+VA1wJ5HHJteFZcAwgcMGA1UdIwSBuzCBuIAUM9hFZtdohxh+VA1w
-J5HHJteFZcChgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIEwZPcmVnb24x
-ETAPBgNVBAcTCFBvcnRsYW5kMQ4wDAYDVQQKEwV5YVNTTDEUMBIGA1UECxMLUHJv
-Z3JhbW1pbmcxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEW
-DmluZm9AeWFzc2wuY29tggkAh0p1vpFm2D0wDAYDVR0TBAUwAwEB/zANBgkqhkiG
-9w0BAQUFAAOCAQEAHHxCgSmeIc/Q2MFUb8yuFAk4/2iYmpVTdhh75jB27CgNdafe
-4M2O1VUjakcrTo38fQaj2A+tXtYEyQAz+3cn07UDs3shdDELSq8tGrOTjszzXz2Q
-P8zjVRmRe3gkLkoJuxhOYS2cxgqgNJGIcGs7SEe8eZSioE0yR1TCo9wu0lFMKTkR
-/+IVXliXNvbpBgaGDo2dlQNysosZfOkUbqGIc2hYbXFewtXTE9Jf3uoDvuIAQOXO
-/eaSMVfD67tmrMsvGvrgYqJH9JNDKktsXgov+efmSmOGsKwqoeu0W2fNMuS2EUua
-cmYNokp2j/4ivIP927fVqe4FybFxfhsr4eOvwA==
+MIIEqjCCA5KgAwIBAgIJALZjr49dYlegMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD
+VQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjEQMA4G
+A1UECgwHd29sZlNTTDEUMBIGA1UECwwLUHJvZ3JhbW1pbmcxGDAWBgNVBAMMD3d3
+dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTAe
+Fw0xNDA3MTExNzM5NDRaFw0xNzA0MDYxNzM5NDRaMIGUMQswCQYDVQQGEwJVUzEQ
+MA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjEQMA4GA1UECgwHd29s
+ZlNTTDEUMBIGA1UECwwLUHJvZ3JhbW1pbmcxGDAWBgNVBAMMD3d3dy53b2xmc3Ns
+LmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAMMD0Sv+OaQyRTtTyIQrKnx0mr2qKlIHR9am
+NrIHMo7Quml7xsNEntSBSP0taKKLZ7uhdcg2LErSG/eLus8N+e/s8YEee5sDR5q/
+Zcx/ZSRppugUiVvkNPfFsBST9Wd7Onp44QFWVpGmE0KN0jxAnEzv0YbfN1EbDKE7
+9fGjSjXk4c6W3xt+v06X0BDoqAgwga8gC0MUxXRntDKCb42GwohAmTaDuh5AciIX
+11JlJHOwzu8Zza7/eGx7wBID1E5yDVBtO6M7o5lencjZDIWz2YrZVCbbbfqsu/8l
+TMTRefRx04ZAGBOwY7VyTjDEl4SGLVYv1xX3f8Cu9fxb5fuhutMCAwEAAaOB/DCB
++TAdBgNVHQ4EFgQUM9hFZtdohxh+VA1wJ5HHJteFZcAwgckGA1UdIwSBwTCBvoAU
+M9hFZtdohxh+VA1wJ5HHJteFZcChgZqkgZcwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMRAwDgYDVQQKDAd3b2xmU1NM
+MRQwEgYDVQQLDAtQcm9ncmFtbWluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
+MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tggkAtmOvj11iV6AwDAYD
+VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAhRCQxV3eJYzyV3stFBwF+XFj
+QLDjwcEuEyp6t9YkWIfrA/sNr+D00Mi8UTYQT3nMT2Z9r5nLe85olMY2qkJujHhb
+soXK0eGoMdGB2fnBo540Q+8KeX0+g2H8FFzR3bwO11G3cW5BfossWprLd0tq9Qb/
+Aq8e5mNPvETZP1aeCZxD+VUhMkaCCYape3QcnloqvwN5kcvyKX/JFYKJuVPNfgeQ
+qV124RleDVi4WdUN3yOra2N2GZ6c37BXSWzQhpfDbDz64FbCG+OhQhpYYoWddBmD
+CK9ZkPiZvWfTSuoOycphig2KQsyQ6S7CVHN/Xq+N4jLLRSDWGU1bdzHMDy3Afg==
-----END CERTIFICATE-----
diff --git a/extra/yassl/certs/client-key.der b/extra/yassl/certs/client-key.der
index 649406c4417..94dc253a2bd 100644
--- a/extra/yassl/certs/client-key.der
+++ b/extra/yassl/certs/client-key.der
Binary files differ
diff --git a/extra/yassl/certs/client-keyEnc.pem b/extra/yassl/certs/client-keyEnc.pem
index 6f29eac50c1..0097c0760a5 100644
--- a/extra/yassl/certs/client-keyEnc.pem
+++ b/extra/yassl/certs/client-keyEnc.pem
@@ -1,30 +1,12 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-CBC,B9D8FB94E38635AB
+DEK-Info: DES-EDE3-CBC,BDE979D13CCC0ABD
-3OTcffWLy2Ddlu2oUwnMWkvIb3e9wLL1jrKOpC0aeb//uiawgw50+KuU4pewB5fN
-lfEJwpX4NjfPL+Nk+B1VAVrv5gwk5/SY9SwIJluutzmGS4TfVOhqi2SVd0mc9kOD
-cSWQ9ltAohFu67jdx36j2u+eghDTOjls1lM8EpzL5cu3Bp4G+ST0nXAdnGtSZdV6
-eToLWjIHiC/JqeRSsKAlG0M5verw14sbb5MO4ZQF4Tdu0fCFgFvDSUM2V4ZLtS1N
-VysLEkHoF56YKZ5H2FYLxOVDpn5lSiLnOgRbteEzsysyJ1zLxXWFFwJPCpLVNL0e
-P7OoEoCR+oAdzGkkPF+EdMoULtQP+n6U7jGx3oFVS17NORIFvyxyP0hD4pGTGLnl
-qAEk30lhKGAE5GgvA2itxZIno/sxPKr5T5Sc2yWh9RdQuLWYNrOb8Kz8J1iXV5l6
-/5TLGu5XVWIlBnUtjMFUe5M54tqGQ6SuDUlL2ud5YeLVN0T+RU/bqV2fXGoBUqKb
-Oe8PECm62Ls0wjv27BIOXXV32WSXwsywSzBqq2YXZ5zc9Q0+Mf1Zl6jKwcr8rXhv
-rA2kcpicONryggsPZnn/us1bVuWKndsCbm7A5om6HowpamNMPuxhISigzzE59L6X
-X6Sl2F0N0zhrfUVlAAlfYTrwcQVtyBDj1xp2nzJFocurJt9EylLaT0Sw3nxWtuOg
-yQuF05UPCzxqow/7dMVqtQKng0ptpsn/E+Kr/Egk1YaTpUUxref6mD3R1S+qWML8
-uqTa3y1CWd4u+aJZH2oZU3gmEd8GvuWnmhsw8iTyq1bzYIga1rQZqh4W5Ok9V+jR
-GioT/x3mTIhtuEZ1Cmhne5qM3gWYgM3rC3D4+RnUFeThOC5lHtOYHtIEpg66cs7g
-QYAn75ghEkyfG7ZvdxAU9Ngn6hckux9tFu3GmeEtdqhVOHaOMaYi60uGSk6uBnTv
-P1sUqi70kMrIBWU7TgldKlTqVdReM87Nkb2O5v1xqtoswLWIi65hFWTqt/H65c1H
-aEBG1cBqnqBMYuFk8b4TzZbuU9o1UKj0/6N5mpm//BmW65B0htEDP7IYpGF0mt0H
-LkU+4ISmuLfPfQeviYio6/yASaFkHpxfK7N8CQvmyAG9U8FHRio2QCGSb2EO+BnT
-Bti6L9oMiQbAsCLWTbvBhCVxdncFw1ncq8gkPMXjEEVUsqAo5Kg+903pRHUyHLzS
-R6R3C6tTJnNtucJ0zqQMF3K1FHS1m8GrOm+hskJLTHgZLdz6tFTYkXfZBSCwIl7s
-plg0wq9CrNC2B8MczWn/j3/h7qSI3wBNqADHMdoiOHECffCeyGEYjW3+0iMoj1m1
-wY0DIym4DDRzk6wsEesxVi8iiCVpYwWnjJAvWYECEO+hWuwCez+eGVkhCT/5g3xW
-hPSRhivNuJT05tdR5o+yqONHn1eAQH7Ar3cj+neY5WC0iS5FK9axTqbHXotofD1e
-pJX17ZVWsmIIpRvAWGD+LOcfTMZsaB9DJbkrPSWlMW3lC2S5JOq8OgfMNWIDDUN1
-guwpK5Z/lWV1qMMnaWeDVgPH/G0FssECXlCU5+/Ol654h8tm2bRXYAYHPM+OoW67
+N7yz2JV13EmQ7MZPL5wamid5+G1V1gp8FKqMemAC5JDxonS/W9oViMLUcxbfPTDx
+FznKdYSVTIQ7vv3ofmDG4MEyV/2C568N2kdtAw+jTfrZFN+IU9CI+W+In/nacirF
+02sAcvDMofustnooKNOO7/iyb5+3vRvEt5vSSRQn5WuSQ9sUKjuzoLs/lbf7fyAt
+4NeqfI3rYBZXxiUOLITOGXzGNRuFoY+o2uDCfelLAJ8uhiVG6ME3LeJEo1dT5lZ8
+CSJOLPasKg0iG4V7olM4j9FvAfZr48RRsSfUen756Jo2HpI4bad8LKhFYIdNs2Au
+WwKLmjpo6QB9hBmRshR04rEXPdrgTqLBExCE08PyaGYnWU8ggWritCeBzDQFj/n4
+sI+NO0Mymuvg98e5RpO52lg3Xnqv9RIK3guLFOmI6aEHC0PS4WwOEQ==
-----END RSA PRIVATE KEY-----
diff --git a/extra/yassl/certs/dsa1024.der b/extra/yassl/certs/dsa1024.der
new file mode 100644
index 00000000000..db880d51480
--- /dev/null
+++ b/extra/yassl/certs/dsa1024.der
Binary files differ
diff --git a/extra/yassl/certs/dsa1024.pem b/extra/yassl/certs/dsa1024.pem
new file mode 100644
index 00000000000..5478ebfc2b2
--- /dev/null
+++ b/extra/yassl/certs/dsa1024.pem
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvAIBAAKBgQC9Ue5KMuCKx+rG4epwxFFDzyoH4ccSwlglXsRdvqswDRK/oQvT
+NNNoWiVxTn3kvQ8qDlhWy9KjGTrqr/ttgmh56FFpe6tz4yTgCNyR9D+eGclD7lNf
+dPUc4E3SA6efopG6+ymI55bS+9xUFTG402UCrYSKT59zI2HBfuI6dltsxQIVAJHJ
+7WDQ+jBn/nmMyCQzdi+0qJx1AoGBAJJacRK36s5yGY1b6qhxWqvpoAC+SfEKylZn
+YWGYf2PM+Iwo6AgPKEw6BSsX+7Nmc4Gjyr4JWhComKi6onPamO/A2CbMM0DCxb47
+BeLBWfqWAgXVj0CODT4MQos5yugnviR/YpEgbzLxvrXr469lKWsAyB19/gFmGmQW
+cCgAwGm6AoGBAJ3LY89yHyvQ/TsQ6zlYbovjbk/ogndsMqPdNUvL4RuPTgJP/caa
+DDa0XJ7ak6A7TJ+QheLNwOXoZPYJC4EGFSDAXpYniGhbWIrVTCGe6lmZDfnx40WX
+S0kk3m/DHaC03ElLAiybxVGxyqoUfbT3Zv1JwftWMuiqHH5uADhdXuXVAhQ01VXa
+Rr8IPem35lKghVKnq/kGQw==
+-----END DSA PRIVATE KEY-----
diff --git a/extra/yassl/certs/dsa512.der b/extra/yassl/certs/dsa512.der
deleted file mode 100644
index 027bedeffb1..00000000000
--- a/extra/yassl/certs/dsa512.der
+++ /dev/null
Binary files differ
diff --git a/extra/yassl/certs/dsa512.pem b/extra/yassl/certs/dsa512.pem
deleted file mode 100644
index 04a3dd94a77..00000000000
--- a/extra/yassl/certs/dsa512.pem
+++ /dev/null
@@ -1,8 +0,0 @@
------BEGIN DSA PRIVATE KEY-----
-MIH3AgEAAkEAmSlpgMk8mGhFqYL+Z+uViMW0DNYmRZUZLKAgW37faencww/zYQol
-m/IhAWrNqow358pm21b0D3160Ri5Qv0bEQIVAK0lKasKnwkcwa0DIHZ/prfdTQMJ
-AkASiJna59ALk5vm7jwhf5yztI2ljOI3gD8X0YFPvfBxtjIIVN2/AeKzdwZkdYoE
-1nk5sQIDA8YGdOWQBQoQRhkxAkAEhKAmMXIM6E9dUxdisYDKwBZfwx7qxdmYOPm+
-VlNHaM4IIlccuw13kc9bNu3zJIKQis2QfNt3+Rctc3Pvu7mCAhQjg+e+aqykxwwc
-E2V27tjDFY02uA==
------END DSA PRIVATE KEY-----
diff --git a/extra/yassl/certs/server-cert.pem b/extra/yassl/certs/server-cert.pem
index cfe4b7b8228..f56cba9de70 100644
--- a/extra/yassl/certs/server-cert.pem
+++ b/extra/yassl/certs/server-cert.pem
@@ -1,17 +1,17 @@
Certificate:
Data:
- Version: 1 (0x0)
- Serial Number: 2 (0x2)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.yassl.com/emailAddress=info@yassl.com
+ Version: 3 (0x2)
+ Serial Number: 1 (0x1)
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Validity
- Not Before: Oct 24 18:27:13 2011 GMT
- Not After : Jul 20 18:27:13 2014 GMT
- Subject: C=US, ST=Montana, L=Bozeman, O=yaSSL, OU=Support, CN=www.yassl.com/emailAddress=info@yassl.com
+ Not Before: Jul 11 17:20:14 2014 GMT
+ Not After : Apr 6 17:20:14 2017 GMT
+ Subject: C=US, ST=Montana, L=Bozeman, O=wolfSSL, OU=Support, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
+ Public-Key: (2048 bit)
+ Modulus:
00:c0:95:08:e1:57:41:f2:71:6d:b7:d2:45:41:27:
01:65:c6:45:ae:f2:bc:24:30:b8:95:ce:2f:4e:d6:
f6:1c:88:bc:7c:9f:fb:a8:67:7f:fe:5c:9c:51:75:
@@ -31,59 +31,74 @@ Certificate:
a7:aa:eb:c4:e1:e6:61:83:c5:d2:96:df:d9:d0:4f:
ad:d7
Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Key Identifier:
+ B3:11:32:C9:92:98:84:E2:C9:F8:D0:3B:6E:03:42:CA:1F:0E:8E:3C
+ X509v3 Authority Key Identifier:
+ keyid:27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
+ DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
+ serial:9A:41:47:CD:A1:14:62:8C
+
+ X509v3 Basic Constraints:
+ CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
- 71:4e:d3:62:df:cc:4c:f7:cd:b7:6e:52:0b:6c:6e:e0:bd:c2:
- 2d:07:d7:c0:b0:6e:43:1e:35:bc:30:01:50:f0:ff:99:23:6c:
- 18:1a:41:b6:11:d6:d4:19:61:fd:e4:77:97:1c:39:e1:57:ab:
- c5:15:63:77:11:36:5e:74:e2:24:0b:1f:41:78:ad:b7:81:e7:
- b4:40:66:80:f0:4b:91:a0:6d:a8:6e:3d:53:d9:8b:ce:2a:e1:
- 0b:45:65:87:a1:96:ae:ee:3e:88:d5:12:1f:78:17:ae:2c:c5:
- 73:44:d8:dc:f4:af:d8:cc:ae:4c:e1:0c:be:55:a4:99:f7:6e:
- 96:c0:c8:45:87:bf:dc:51:57:ff:9e:73:37:6a:18:9c:c3:f9:
- 22:7a:f4:b0:52:bd:fc:21:30:f8:c5:ff:1e:87:7d:ad:a2:5a:
- 35:f5:22:a8:b4:0a:76:38:e6:76:b0:98:af:1b:ec:8a:0a:43:
- 74:d2:85:34:37:84:07:e1:f6:23:b2:29:de:a6:b6:b7:4c:57:
- 7e:96:06:cb:a9:16:25:29:3a:03:2d:55:7d:a6:8c:a4:f7:9e:
- 81:c9:95:b6:7c:c1:4a:ce:94:66:0c:ca:88:eb:d2:09:f5:5b:
- 19:58:82:df:27:fd:67:95:78:b7:02:06:d5:a7:61:bd:ef:3a:
- fc:b2:61:cd
+ 3d:8c:70:05:5b:62:4b:bf:6c:b6:48:61:01:10:1d:5e:05:ba:
+ 55:94:2c:ae:59:6f:97:80:5d:6c:86:ec:9a:eb:15:45:44:e4:
+ 56:f8:75:ca:8a:45:32:f4:c7:e1:fa:f2:98:1c:91:d3:3f:e8:
+ 0e:c9:1b:fa:e1:79:99:67:0e:0d:6b:8a:ec:1a:2c:59:c4:34:
+ 04:8d:39:77:cd:b5:e9:60:5b:82:bf:34:ce:ed:c6:4f:3f:b4:
+ 5c:4d:8a:b4:f4:0a:04:12:a0:56:c1:e1:33:37:a1:54:87:48:
+ e9:81:c2:0f:8f:6f:d3:52:4c:4c:32:4c:6b:9f:3a:04:8f:77:
+ 5d:ad:dc:3d:2b:f2:c9:df:3c:60:5d:d8:fc:86:72:7c:3d:d0:
+ 84:4b:8c:df:26:43:fe:c0:cc:5b:e1:36:b3:3d:32:28:a3:ef:
+ 0c:20:d6:b1:50:39:d6:67:a9:8b:84:bc:92:34:eb:19:23:e8:
+ 10:8f:ea:bd:18:8c:93:27:3c:74:75:8e:58:04:fa:2a:74:44:
+ 7d:fc:4d:39:df:54:17:ba:78:e1:5d:6a:70:d3:7c:a2:80:81:
+ e6:19:51:91:c3:44:51:ec:bb:88:a9:53:e1:d7:a9:8c:28:f4:
+ 21:1c:42:51:09:b4:12:6d:a0:d6:25:09:85:c6:2a:0c:af:a7:
+ 58:e6:52:8b
-----BEGIN CERTIFICATE-----
-MIIDkDCCAngCAQIwDQYJKoZIhvcNAQEFBQAwgZAxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhTYXd0b290
-aDETMBEGA1UECxMKQ29uc3VsdGluZzEWMBQGA1UEAxMNd3d3Lnlhc3NsLmNvbTEd
-MBsGCSqGSIb3DQEJARYOaW5mb0B5YXNzbC5jb20wHhcNMTExMDI0MTgyNzEzWhcN
-MTQwNzIwMTgyNzEzWjCBijELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB01vbnRhbmEx
-EDAOBgNVBAcTB0JvemVtYW4xDjAMBgNVBAoTBXlhU1NMMRAwDgYDVQQLEwdTdXBw
-b3J0MRYwFAYDVQQDEw13d3cueWFzc2wuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZv
-QHlhc3NsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCVCOFX
-QfJxbbfSRUEnAWXGRa7yvCQwuJXOL07W9hyIvHyf+6hnf/5cnFF194rKB+c1L4/h
-vXvAL3yrZKgX/Mpde7rgIeVyLm8uhtiVc9qsG1O5Xz/XGQ0lT+FjY1GLC2Q/rUO4
-pRxcNLOuAKBjxfZ/C1loeHOmjBipAm2vwxkBLrgQ48bMQLRpo0YzaYduxLsXpvPo
-3a1zvHsvIbX9ZlEMvVSz4W1fHLwjc9EJA4kU0hC5ZMMq0KGWSrzh1Bpbx6DAwWN4
-D0Q3MDKWgDIjlaF3uhPSl3PiXSXJag3DOWCktLBpQkIJ6dgIvDMgs1gip6rrxOHm
-YYPF0pbf2dBPrdcCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAcU7TYt/MTPfNt25S
-C2xu4L3CLQfXwLBuQx41vDABUPD/mSNsGBpBthHW1Blh/eR3lxw54VerxRVjdxE2
-XnTiJAsfQXitt4HntEBmgPBLkaBtqG49U9mLzirhC0Vlh6GWru4+iNUSH3gXrizF
-c0TY3PSv2MyuTOEMvlWkmfdulsDIRYe/3FFX/55zN2oYnMP5Inr0sFK9/CEw+MX/
-Hod9raJaNfUiqLQKdjjmdrCYrxvsigpDdNKFNDeEB+H2I7Ip3qa2t0xXfpYGy6kW
-JSk6Ay1VfaaMpPeegcmVtnzBSs6UZgzKiOvSCfVbGViC3yf9Z5V4twIG1adhve86
-/LJhzQ==
+MIIEnjCCA4agAwIBAgIBATANBgkqhkiG9w0BAQUFADCBlDELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgMB01vbnRhbmExEDAOBgNVBAcMB0JvemVtYW4xETAPBgNVBAoMCFNh
+d3Rvb3RoMRMwEQYDVQQLDApDb25zdWx0aW5nMRgwFgYDVQQDDA93d3cud29sZnNz
+bC5jb20xHzAdBgkqhkiG9w0BCQEWEGluZm9Ad29sZnNzbC5jb20wHhcNMTQwNzEx
+MTcyMDE0WhcNMTcwNDA2MTcyMDE0WjCBkDELMAkGA1UEBhMCVVMxEDAOBgNVBAgM
+B01vbnRhbmExEDAOBgNVBAcMB0JvemVtYW4xEDAOBgNVBAoMB3dvbGZTU0wxEDAO
+BgNVBAsMB1N1cHBvcnQxGDAWBgNVBAMMD3d3dy53b2xmc3NsLmNvbTEfMB0GCSqG
+SIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMCVCOFXQfJxbbfSRUEnAWXGRa7yvCQwuJXOL07W9hyIvHyf+6hn
+f/5cnFF194rKB+c1L4/hvXvAL3yrZKgX/Mpde7rgIeVyLm8uhtiVc9qsG1O5Xz/X
+GQ0lT+FjY1GLC2Q/rUO4pRxcNLOuAKBjxfZ/C1loeHOmjBipAm2vwxkBLrgQ48bM
+QLRpo0YzaYduxLsXpvPo3a1zvHsvIbX9ZlEMvVSz4W1fHLwjc9EJA4kU0hC5ZMMq
+0KGWSrzh1Bpbx6DAwWN4D0Q3MDKWgDIjlaF3uhPSl3PiXSXJag3DOWCktLBpQkIJ
+6dgIvDMgs1gip6rrxOHmYYPF0pbf2dBPrdcCAwEAAaOB/DCB+TAdBgNVHQ4EFgQU
+sxEyyZKYhOLJ+NA7bgNCyh8OjjwwgckGA1UdIwSBwTCBvoAUJ45nEXTDJh0/7TNj
+s6TYHTDl6NWhgZqkgZcwgZQxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdNb250YW5h
+MRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290aDETMBEGA1UECwwK
+Q29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29tMR8wHQYJKoZIhvcN
+AQkBFhBpbmZvQHdvbGZzc2wuY29tggkAmkFHzaEUYowwDAYDVR0TBAUwAwEB/zAN
+BgkqhkiG9w0BAQUFAAOCAQEAPYxwBVtiS79stkhhARAdXgW6VZQsrllvl4BdbIbs
+musVRUTkVvh1yopFMvTH4frymByR0z/oDskb+uF5mWcODWuK7BosWcQ0BI05d821
+6WBbgr80zu3GTz+0XE2KtPQKBBKgVsHhMzehVIdI6YHCD49v01JMTDJMa586BI93
+Xa3cPSvyyd88YF3Y/IZyfD3QhEuM3yZD/sDMW+E2sz0yKKPvDCDWsVA51mepi4S8
+kjTrGSPoEI/qvRiMkyc8dHWOWAT6KnREffxNOd9UF7p44V1qcNN8ooCB5hlRkcNE
+Uey7iKlT4depjCj0IRxCUQm0Em2g1iUJhcYqDK+nWOZSiw==
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
- e9:d0:a7:5f:79:25:f4:3c
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.yassl.com/emailAddress=info@yassl.com
+ 9a:41:47:cd:a1:14:62:8c
+ Signature Algorithm: sha1WithRSAEncryption
+ Issuer: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Validity
- Not Before: Oct 24 18:18:15 2011 GMT
- Not After : Jul 20 18:18:15 2014 GMT
- Subject: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.yassl.com/emailAddress=info@yassl.com
+ Not Before: Jul 11 03:20:08 2014 GMT
+ Not After : Apr 6 03:20:08 2017 GMT
+ Subject: C=US, ST=Montana, L=Bozeman, O=Sawtooth, OU=Consulting, CN=www.wolfssl.com/emailAddress=info@wolfssl.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public Key: (2048 bit)
- Modulus (2048 bit):
+ Public-Key: (2048 bit)
+ Modulus:
00:bf:0c:ca:2d:14:b2:1e:84:42:5b:cd:38:1f:4a:
f2:4d:75:10:f1:b6:35:9f:df:ca:7d:03:98:d3:ac:
de:03:66:ee:2a:f1:d8:b0:7d:6e:07:54:0b:10:98:
@@ -104,54 +119,55 @@ Certificate:
36:79
Exponent: 65537 (0x10001)
X509v3 extensions:
- X509v3 Subject Key Identifier:
+ X509v3 Subject Key Identifier:
27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
- X509v3 Authority Key Identifier:
+ X509v3 Authority Key Identifier:
keyid:27:8E:67:11:74:C3:26:1D:3F:ED:33:63:B3:A4:D8:1D:30:E5:E8:D5
- DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.yassl.com/emailAddress=info@yassl.com
- serial:E9:D0:A7:5F:79:25:F4:3C
+ DirName:/C=US/ST=Montana/L=Bozeman/O=Sawtooth/OU=Consulting/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
+ serial:9A:41:47:CD:A1:14:62:8C
- X509v3 Basic Constraints:
+ X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
- 5f:86:14:f4:51:8b:bc:a5:4e:30:da:5e:ac:9a:f8:6c:d9:26:
- 4b:93:f9:e3:1c:89:6f:9e:ee:b3:9d:77:3e:89:20:76:a3:e6:
- e8:86:15:21:db:e2:33:b2:34:d5:d0:9f:f3:c1:a4:87:92:5c:
- f9:d1:ff:30:2f:8e:03:bc:b3:3c:0c:32:a3:90:5f:1a:90:1e:
- af:9d:f3:9e:d7:07:02:a9:7d:27:66:63:2f:af:18:d7:ac:18:
- 98:8c:83:8f:38:f3:0b:ac:36:10:75:fb:ca:76:13:50:5b:02:
- 8f:73:bf:e3:a0:ee:83:52:25:54:ce:26:ce:9c:bd:2f:79:ab:
- 1b:60:b8:92:f1:03:c0:fc:3b:08:d9:c0:ad:d5:72:08:25:80:
- 61:2d:dc:9f:a7:83:62:07:47:e0:07:4c:4b:07:30:04:a9:87:
- 1c:55:7f:07:12:d0:cb:42:5d:cb:cf:66:01:1a:17:ee:f9:0f:
- 60:b7:db:6f:68:e5:4e:41:62:6e:d3:6f:60:4f:4b:27:de:cf:
- 18:07:f1:13:5d:cb:3f:a9:25:44:da:52:5c:c8:04:e1:56:12:
- f5:2a:90:4e:d1:e2:af:01:b5:23:a1:ec:31:da:7b:63:69:c4:
- b8:f3:e7:ce:a1:3d:c0:db:6d:f3:b2:d9:46:c8:9f:c3:b8:70:
- 5a:1f:7f:ca
+ 79:78:0c:6d:79:88:91:fc:3a:15:9c:f9:27:62:16:f0:21:1f:
+ fa:7d:3f:a2:a8:32:1e:f7:f2:11:a9:74:16:74:5e:dc:18:ca:
+ f0:00:2a:d5:03:06:26:30:f1:47:83:fd:32:6e:fc:ed:aa:4f:
+ 7d:0c:63:60:31:2f:7c:0c:bf:99:66:87:ed:27:08:86:2d:c4:
+ 33:e8:98:23:1c:fe:a3:db:9a:49:4e:fc:5a:42:ef:71:c3:3f:
+ ad:dc:4a:a8:d2:a3:1d:09:ac:33:04:7b:86:f3:6d:00:59:a3:
+ c8:db:d1:3c:73:f6:0e:90:d6:5e:49:e0:bf:36:63:08:7b:a5:
+ b0:8f:35:3b:56:8c:11:35:49:04:1c:d0:e7:ba:56:c5:0d:0a:
+ 91:8d:d6:b7:62:19:34:12:52:4c:d2:6d:7c:c5:3d:0f:18:81:
+ 54:cb:f6:3c:e5:84:d2:d6:71:15:ec:1a:34:0b:f0:a0:21:74:
+ 43:c8:a3:b0:df:d9:67:da:e2:ad:93:48:f8:a0:87:bd:79:14:
+ e0:62:0a:df:f7:31:2e:31:7b:d1:32:2a:0a:fe:5d:14:ef:d9:
+ 64:50:e4:83:91:bc:70:0d:d7:88:8d:d9:bc:84:0e:c5:1a:b3:
+ bf:64:02:4e:51:91:a4:a2:85:15:83:af:f0:5b:9b:28:49:5f:
+ b2:b3:03:d8
-----BEGIN CERTIFICATE-----
-MIIEnjCCA4agAwIBAgIJAOnQp195JfQ8MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjERMA8G
-A1UEChMIU2F3dG9vdGgxEzARBgNVBAsTCkNvbnN1bHRpbmcxFjAUBgNVBAMTDXd3
-dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMB4XDTEx
-MTAyNDE4MTgxNVoXDTE0MDcyMDE4MTgxNVowgZAxCzAJBgNVBAYTAlVTMRAwDgYD
-VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhTYXd0b290
-aDETMBEGA1UECxMKQ29uc3VsdGluZzEWMBQGA1UEAxMNd3d3Lnlhc3NsLmNvbTEd
-MBsGCSqGSIb3DQEJARYOaW5mb0B5YXNzbC5jb20wggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQC/DMotFLIehEJbzTgfSvJNdRDxtjWf38p9A5jTrN4DZu4q
-8diwfW4HVAsQmCFNgMsSIOfMT95FfclydzLqypC7aVIQAy+o85XF8YtiVhvvZ2+k
-EEGVrQqb46XAsNJwdlAwW6joCCx87aeieo04KRysx+3yfJWwlYJ9SVw4zXcl772A
-dVOUPD3KY1ufFbXTHRMvGdE823Y6zLh9yeXC19pAb9gh3HMbQi1TnP4a/H2rejY/
-mN6EfAVnzmoUOIep8Yy1aMtof3EgK/WgY/VWL6Mm0rdvsVoX1ziZCP6TWG/+wxNJ
-CBYLp01nAFIxZyNOmO1RRR25BNkL7Ngos0u97TZ5AgMBAAGjgfgwgfUwHQYDVR0O
-BBYEFCeOZxF0wyYdP+0zY7Ok2B0w5ejVMIHFBgNVHSMEgb0wgbqAFCeOZxF0wyYd
-P+0zY7Ok2B0w5ejVoYGWpIGTMIGQMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9u
-dGFuYTEQMA4GA1UEBxMHQm96ZW1hbjERMA8GA1UEChMIU2F3dG9vdGgxEzARBgNV
-BAsTCkNvbnN1bHRpbmcxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkqhkiG
-9w0BCQEWDmluZm9AeWFzc2wuY29tggkA6dCnX3kl9DwwDAYDVR0TBAUwAwEB/zAN
-BgkqhkiG9w0BAQUFAAOCAQEAX4YU9FGLvKVOMNperJr4bNkmS5P54xyJb57us513
-PokgdqPm6IYVIdviM7I01dCf88Gkh5Jc+dH/MC+OA7yzPAwyo5BfGpAer53zntcH
-Aql9J2ZjL68Y16wYmIyDjzjzC6w2EHX7ynYTUFsCj3O/46Dug1IlVM4mzpy9L3mr
-G2C4kvEDwPw7CNnArdVyCCWAYS3cn6eDYgdH4AdMSwcwBKmHHFV/BxLQy0Jdy89m
-ARoX7vkPYLfbb2jlTkFibtNvYE9LJ97PGAfxE13LP6klRNpSXMgE4VYS9SqQTtHi
-rwG1I6HsMdp7Y2nEuPPnzqE9wNtt87LZRsifw7hwWh9/yg==
+MIIEqjCCA5KgAwIBAgIJAJpBR82hFGKMMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD
+VQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8G
+A1UECgwIU2F3dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3
+dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTAe
+Fw0xNDA3MTEwMzIwMDhaFw0xNzA0MDYwMzIwMDhaMIGUMQswCQYDVQQGEwJVUzEQ
+MA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1hbjERMA8GA1UECgwIU2F3
+dG9vdGgxEzARBgNVBAsMCkNvbnN1bHRpbmcxGDAWBgNVBAMMD3d3dy53b2xmc3Ns
+LmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL8Myi0Ush6EQlvNOB9K8k11EPG2NZ/fyn0D
+mNOs3gNm7irx2LB9bgdUCxCYIU2AyxIg58xP3kV9yXJ3MurKkLtpUhADL6jzlcXx
+i2JWG+9nb6QQQZWtCpvjpcCw0nB2UDBbqOgILHztp6J6jTgpHKzH7fJ8lbCVgn1J
+XDjNdyXvvYB1U5Q8PcpjW58VtdMdEy8Z0TzbdjrMuH3J5cLX2kBv2CHccxtCLVOc
+/hr8fat6Nj+Y3oR8BWfOahQ4h6nxjLVoy2h/cSAr9aBj9VYvoybSt2+xWhfXOJkI
+/pNYb/7DE0kIFgunTWcAUjFnI06Y7VFFHbkE2Qvs2CizS73tNnkCAwEAAaOB/DCB
++TAdBgNVHQ4EFgQUJ45nEXTDJh0/7TNjs6TYHTDl6NUwgckGA1UdIwSBwTCBvoAU
+J45nEXTDJh0/7TNjs6TYHTDl6NWhgZqkgZcwgZQxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3plbWFuMREwDwYDVQQKDAhTYXd0b290
+aDETMBEGA1UECwwKQ29uc3VsdGluZzEYMBYGA1UEAwwPd3d3LndvbGZzc2wuY29t
+MR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tggkAmkFHzaEUYowwDAYD
+VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAeXgMbXmIkfw6FZz5J2IW8CEf
++n0/oqgyHvfyEal0FnRe3BjK8AAq1QMGJjDxR4P9Mm787apPfQxjYDEvfAy/mWaH
+7ScIhi3EM+iYIxz+o9uaSU78WkLvccM/rdxKqNKjHQmsMwR7hvNtAFmjyNvRPHP2
+DpDWXkngvzZjCHulsI81O1aMETVJBBzQ57pWxQ0KkY3Wt2IZNBJSTNJtfMU9DxiB
+VMv2POWE0tZxFewaNAvwoCF0Q8ijsN/ZZ9rirZNI+KCHvXkU4GIK3/cxLjF70TIq
+Cv5dFO/ZZFDkg5G8cA3XiI3ZvIQOxRqzv2QCTlGRpKKFFYOv8FubKElfsrMD2A==
+-----END CERTIFICATE-----
diff --git a/extra/yassl/certs/server-keyEnc.pem b/extra/yassl/certs/server-keyEnc.pem
index 278a0946c68..e5ab57d4c9e 100644
--- a/extra/yassl/certs/server-keyEnc.pem
+++ b/extra/yassl/certs/server-keyEnc.pem
@@ -1,30 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-CBC,08132C1FFF5BC8CC
+DEK-Info: DES-CBC,136C7D8A69656668
-W+krChiFlNU+koE0Bep+U45OG4V4IFZv67ex6yJHgcsPd+HQ692A/h+5dYc8rdlW
-2LDgSODHHIMTt6RVJDxXxXs3qFmJQbnVXeXxV209X8EfaRarh+yiMKeUP6K8hIvj
-+IYRma6iKOs+d4KlcZZudGs2f/x8nhxXbmQtrLhGd4h91mnJk2sKmiz7UkUy6Qng
-gOHnT2dfF4Qk2ZYsjisRHjpWZiqh40GO1LuTgUjZoH+LGhMwMwOAE6+ss5xa+yE+
-Xd9Yljm0/QW68JILkCJQjLDRvPGxDJyvYq6TT/kSElsRlI/AuRrZH1YVD3hn/xjx
-tDoEB+JEbH6iu9ne2srxnGSKLzoUbb4XPaCjLIW9BJf7oANmmFQpZZQiRTyIUVWi
-IE5hJciqF7ra7IwfZAW/PeWGXpzNOVN9QAvyAMsmvUCzJdxd1ySUatjhZ+mSFYGk
-rDVtyrgt4ZQgV0EdJV0Yn1ZWMOk1qEKXT0JAnI+9S6Y+QEdwXmdz3xlVuq61Jvub
-iJUVepnD/1QeFfWy8JwlscWpWFrkr569f3SNG+FGb6fufnUP7K6sX3urj+pj1QET
-f9NmmvLBsVsbj1Egg3wnxbVHIUPky64LY04wtNJaAwhuG6mKCvaClKYMTmTCyrzP
-aRwghhMQ3yHUbo2A1ZppYsXXg8lX30eW+5O77N9Q3xfP0phODHXsnXhBH09ml1JQ
-MmiCaL5n6sIVcjtFmN/kyaEuz/1VrBSaDCPeW88n61UXUidXrGOZN/2c/2xFir8B
-2rdE82lQLl07SJxzQQ6aJVvrc5tnbV/ENDySS5dG6Yl/w89/nuu0RFHmAweKqfGC
-8m0XOkmonIk6h3YT7XrkE0b/2jkf1mMaMKrGGfRmxqNt1nGxMCJHAO/Sn9v+I9rU
-W7HCZ04RTnRp1BXcqDxdwlveDKJRVfiKOSSEOpEXXlexS5R1vikmxrCwK5YVUTkT
-3tgahVtHJkFHnBHBzXyHUDwWahxZaU9TO43z0JFxs0zINWUWppldf0oyWjP1FSrI
-a9tXBs7aoykUY9Av9K0p4UJJU005qzD/tuegZFX34wRETJO0BJnlZHTTZSqLSVX+
-KZg4nPq8Xii1VHta3tgw7up2z1tpepsBerTsRQ1+IDpxLaIxgt9am0hXVTiMLex/
-DD9UvQC/eBUmpmWraK/Mqeq/UrPl+lmeoXsG6LWIvEp9d19rJ/3OhIJf2pDh9dC8
-NzJoNP9qOrDajAwzeeF5dbQxCaG+X8am9s4wryC0p+NrQ0tzv8efey0zBodDIOgo
-F1G7+ADgHy+V565q8sdL52xx0xB9Ty5p9IOfOUbxa3K65TJf/I/QAQjl4LyTbkfr
-kzpYAG2uF55EB3Eq3aMrj47pzZy0ELXXN2qYJ9Oelgl+h6MzYbmd+Wm+A2Cofv3u
-7ANAyjAYN7/Lo3lTFAt7sXAXGKnqw62JNSSMkIqZVrG5dn7Jxj5AJCVyYxTrm6Y+
-DDcblX47XrWxVoVJN/dLJZ8FzWs4o/8w9Yn8U54Ci7F0g+j2f+OpDy9PGFYT9pKw
-xWG8chkYE6QPilEYvdi26ZnZ3u236q9PMtyRP87NmBN2sLkj/rbBTzBxWIaGS+Mt
+jvNTyPaztxPIoAzbdmZnD0Zw2+60tMxNc0GMHNmeOyG25aHP/dT+TWiKFpFVkkkY
+uoCIhYUyw7gmpw+CnRJwWd+ans4nrvAjwy5oWJvarvsyUpjqvnPoIlAqd+d4TDKN
+eESzcI76+gHdisAtCrQD+fGqgTZhli5TgDbnpasL/QnY2qDlutvakkVw7gPXe156
+2Phy8WN+efr65J6wt3K/dj7Datl9u4JeHQK81gYyWBVX+EagEjPGDzkFQCj9Z0q7
+8K3iB5GW1JAqJS0IfZPB40AnSTF/n1TL1SN3qfU3l7hTGNrx9o7580bgDEoAR7pI
+F8eZlS15KHtZmh11AnU1KTKZ6kmgnNqeMTGMN6N0ct2wMKW1dV87eTDlF0oiR2ol
+XwtFgKmrIjfpmzkdWjbJmWnGMjD56KdiFZga/ZyKMsPrVoYLgfJEpn36iQspfygx
+HCGNTf0PjIsjEWU0WyQiF86t+c45W3wNFsv/AxVyfMl+su02yrd6u2ecuQDir3Cs
+b2k8IKtQgVe/NIpEWLKuiHG5oedIPPQyDYK5uq+gHxCGeOoKnWlsWFEHZRiza4X5
+tbgTrJB8Sw0ENWrvVGGmQZN4pSImlsMwzQ2qik5CQ00N1b3+56/obn0z75I3bUSb
+tC5g8DRjl6oclAenNgh/MYMT287y5W2dD4npxHcekX4O3J2CDXNfg4vV2j5GRxtg
+LVJdYE2p7bpYePCDHrYng8b9ubBprx0CrEnkIvvtUjzNPf6VDL0+MBKl+XgR2/nz
+iRqTuZnlGGOyM+KYDwXpgwfs/HfvFGksxTAlO/40GkGh+WGPaIoNyCK0SgQKhyb4
+JIkR0vd2/yLg3lWMJrGwh7A0Gm07Z/781oURP3uWd+PaCOgGcd5ipcAjcEyuxNly
+AthipWqmQWUcbf6Z2N9j3OA22Hv2Uzk8HSfi9VOZtL9svdEEZ0NnOekJgnc6stQp
+bXiknlK/T5WdrWxSyCfgUq68Vf6DFfIRAVuFdJ3WHT2wVXHrDfft6D+Ne/XCxPoE
+8zGmkyusaph33UHQ1oNyUbLbwcDCDSmOo8gYoedD3IwxtMA3wJRugomqosItwV8X
+vkgmcy8eSE/+gZUxJEN2gnLcfKFhCkC80J6oFhmoDD6vuUnPHcFdKZgVPw2rzPk5
+Vb1kX+gpORplYmKpq1vz/ujscL4T0TmYLz02hkIS4edpW55ncTTv7JWefpRiTB1J
+RB3td3me4htqR+YIDWJ+emrOmqsCG2WvpAS+MTw2mj1jYk9LL/ZYobTjSCEWmuwT
+yVK6m303irR7HQDauxhslRFgoK21w63viOyj5NKIU1gQtaAANGDxcgORC1XLjjgt
+oNutSQA+7P42vfHSHK4cnTBXl6V32H/GyVpdHQOZqSrqIjgLmUZodSmRPROxosZF
+a46B1O7m/rJFxkiKW4vod+/WqjoE0Hhfrb8rRrkRjzGeCqqSSnQ3vrunVkvF8hlA
+b6FOv4ZBJL4piC1GKH+rscqke9NEiDqXN8C3iYz86jbck/Ha21yUS8T3X7N52sg+
+B3AmOGnLK6BebYeto9vZxQjacChJZSixSxLV+l9/nVQ0+mW42azHdzk0ru59TGAj
-----END RSA PRIVATE KEY-----
diff --git a/extra/yassl/include/buffer.hpp b/extra/yassl/include/buffer.hpp
index 27f71199093..77d2ed8193c 100644
--- a/extra/yassl/include/buffer.hpp
+++ b/extra/yassl/include/buffer.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -48,7 +48,11 @@ const uint AUTO = 0xFEEDBEEF;
struct NoCheck {
- void check(uint, uint);
+ int check(uint, uint);
+};
+
+struct Check {
+ int check(uint, uint);
};
/* input_buffer operates like a smart c style array with a checking option,
@@ -60,11 +64,13 @@ struct NoCheck {
* write to the buffer bulk wise and have the correct size
*/
-class input_buffer : public NoCheck {
+class input_buffer : public Check {
uint size_; // number of elements in buffer
uint current_; // current offset position in buffer
byte* buffer_; // storage for buffer
byte* end_; // end of storage marker
+ int error_; // error number
+ byte zero_; // for returning const reference to zero byte
public:
input_buffer();
@@ -93,6 +99,10 @@ public:
uint get_remaining() const;
+ int get_error() const;
+
+ void set_error();
+
void set_current(uint i);
// read only access through [], advance current
@@ -103,7 +113,7 @@ public:
bool eof();
// peek ahead
- byte peek() const;
+ byte peek();
// write function, should use at/near construction
void assign(const byte* t, uint s);
diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h
index 3c840027879..835a46eaea8 100644
--- a/extra/yassl/include/openssl/ssl.h
+++ b/extra/yassl/include/openssl/ssl.h
@@ -34,7 +34,7 @@
#include "rsa.h"
-#define YASSL_VERSION "2.3.0"
+#define YASSL_VERSION "2.3.4"
#if defined(__cplusplus)
diff --git a/extra/yassl/src/buffer.cpp b/extra/yassl/src/buffer.cpp
index ec35f1760e7..ee5e0cc0793 100644
--- a/extra/yassl/src/buffer.cpp
+++ b/extra/yassl/src/buffer.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -35,8 +35,19 @@ namespace yaSSL {
-void NoCheck::check(uint, uint)
+/* return 0 on check success, always true for NoCheck policy */
+int NoCheck::check(uint, uint)
{
+ return 0;
+}
+
+/* return 0 on check success */
+int Check::check(uint i, uint max)
+{
+ if (i < max)
+ return 0;
+
+ return -1;
}
@@ -51,18 +62,20 @@ void NoCheck::check(uint, uint)
input_buffer::input_buffer()
- : size_(0), current_(0), buffer_(0), end_(0)
+ : size_(0), current_(0), buffer_(0), end_(0), error_(0), zero_(0)
{}
input_buffer::input_buffer(uint s)
- : size_(0), current_(0), buffer_(NEW_YS byte[s]), end_(buffer_ + s)
+ : size_(0), current_(0), buffer_(NEW_YS byte[s]), end_(buffer_ + s),
+ error_(0), zero_(0)
{}
// with assign
input_buffer::input_buffer(uint s, const byte* t, uint len)
- : size_(0), current_(0), buffer_(NEW_YS byte[s]), end_(buffer_ + s)
+ : size_(0), current_(0), buffer_(NEW_YS byte[s]), end_(buffer_ + s),
+ error_(0), zero_(0)
{
assign(t, len);
}
@@ -77,8 +90,10 @@ input_buffer::~input_buffer()
// users can pass defualt zero length buffer and then allocate
void input_buffer::allocate(uint s)
{
- buffer_ = NEW_YS byte[s];
- end_ = buffer_ + s;
+ if (error_ == 0) {
+ buffer_ = NEW_YS byte[s];
+ end_ = buffer_ + s;
+ }
}
@@ -93,40 +108,67 @@ byte* input_buffer::get_buffer() const
// if you know the size before the write use assign()
void input_buffer::add_size(uint i)
{
- check(size_ + i-1, get_capacity());
- size_ += i;
+ if (error_ == 0 && check(size_ + i-1, get_capacity()) == 0)
+ size_ += i;
+ else
+ error_ = -1;
}
uint input_buffer::get_capacity() const
{
- return (uint) (end_ - buffer_);
+ if (error_ == 0)
+ return end_ - buffer_;
+
+ return 0;
}
uint input_buffer::get_current() const
{
- return current_;
+ if (error_ == 0)
+ return current_;
+
+ return 0;
}
uint input_buffer::get_size() const
{
- return size_;
+ if (error_ == 0)
+ return size_;
+
+ return 0;
}
uint input_buffer::get_remaining() const
{
- return size_ - current_;
+ if (error_ == 0)
+ return size_ - current_;
+
+ return 0;
+}
+
+
+int input_buffer::get_error() const
+{
+ return error_;
+}
+
+
+void input_buffer::set_error()
+{
+ error_ = -1;
}
void input_buffer::set_current(uint i)
{
- if (i)
- check(i - 1, size_);
- current_ = i;
+ if (error_ == 0 && (i == 0 || check(i - 1, size_) == 0))
+ current_ = i;
+ else
+ error_ = -1;
}
@@ -134,40 +176,59 @@ void input_buffer::set_current(uint i)
// user passes in AUTO index for ease of use
const byte& input_buffer::operator[](uint i)
{
- check(current_, size_);
- return buffer_[current_++];
+ if (error_ == 0 && check(current_, size_) == 0)
+ return buffer_[current_++];
+
+ error_ = -1;
+ return zero_;
}
// end of input test
bool input_buffer::eof()
{
+ if (error_ != 0)
+ return true;
+
return current_ >= size_;
}
// peek ahead
-byte input_buffer::peek() const
+byte input_buffer::peek()
{
- return buffer_[current_];
+ if (error_ == 0 && check(current_, size_) == 0)
+ return buffer_[current_];
+
+ error_ = -1;
+ return 0;
}
// write function, should use at/near construction
void input_buffer::assign(const byte* t, uint s)
{
- check(current_, get_capacity());
- add_size(s);
- memcpy(&buffer_[current_], t, s);
+ if (t && error_ == 0 && check(current_, get_capacity()) == 0) {
+ add_size(s);
+ if (error_ == 0) {
+ memcpy(&buffer_[current_], t, s);
+ return; // success
+ }
+ }
+
+ error_ = -1;
}
// use read to query input, adjusts current
void input_buffer::read(byte* dst, uint length)
{
- check(current_ + length - 1, size_);
- memcpy(dst, &buffer_[current_], length);
- current_ += length;
+ if (dst && error_ == 0 && check(current_ + length - 1, size_) == 0) {
+ memcpy(dst, &buffer_[current_], length);
+ current_ += length;
+ } else {
+ error_ = -1;
+ }
}
diff --git a/extra/yassl/src/handshake.cpp b/extra/yassl/src/handshake.cpp
index 90c3762a1fc..39bcd9745b4 100644
--- a/extra/yassl/src/handshake.cpp
+++ b/extra/yassl/src/handshake.cpp
@@ -522,7 +522,7 @@ void buildSHA_CertVerify(SSL& ssl, byte* digest)
// some clients still send sslv2 client hello
void ProcessOldClientHello(input_buffer& input, SSL& ssl)
{
- if (input.get_remaining() < 2) {
+ if (input.get_error() || input.get_remaining() < 2) {
ssl.SetError(bad_input);
return;
}
@@ -549,20 +549,24 @@ void ProcessOldClientHello(input_buffer& input, SSL& ssl)
byte len[2];
- input.read(len, sizeof(len));
+ len[0] = input[AUTO];
+ len[1] = input[AUTO];
ato16(len, ch.suite_len_);
- input.read(len, sizeof(len));
+ len[0] = input[AUTO];
+ len[1] = input[AUTO];
uint16 sessionLen;
ato16(len, sessionLen);
ch.id_len_ = sessionLen;
- input.read(len, sizeof(len));
+ len[0] = input[AUTO];
+ len[1] = input[AUTO];
uint16 randomLen;
ato16(len, randomLen);
- if (ch.suite_len_ > MAX_SUITE_SZ || sessionLen > ID_LEN ||
- randomLen > RAN_LEN) {
+ if (input.get_error() || ch.suite_len_ > MAX_SUITE_SZ ||
+ ch.suite_len_ > input.get_remaining() ||
+ sessionLen > ID_LEN || randomLen > RAN_LEN) {
ssl.SetError(bad_input);
return;
}
@@ -580,13 +584,12 @@ void ProcessOldClientHello(input_buffer& input, SSL& ssl)
ch.suite_len_ = j;
if (ch.id_len_)
- input.read(ch.session_id_, ch.id_len_);
+ input.read(ch.session_id_, ch.id_len_); // id_len_ from sessionLen
if (randomLen < RAN_LEN)
memset(ch.random_, 0, RAN_LEN - randomLen);
input.read(&ch.random_[RAN_LEN - randomLen], randomLen);
-
ch.Process(input, ssl);
}
@@ -788,6 +791,9 @@ int DoProcessReply(SSL& ssl)
ssl.verifyState(hdr);
}
+ if (ssl.GetError())
+ return 0;
+
// make sure we have enough input in buffer to process this record
if (needHdr || hdr.length_ > buffer.get_remaining()) {
// put header in front for next time processing
@@ -800,6 +806,9 @@ int DoProcessReply(SSL& ssl)
while (buffer.get_current() < hdr.length_ + RECORD_HEADER + offset) {
// each message in record, can be more than 1 if not encrypted
+ if (ssl.GetError())
+ return 0;
+
if (ssl.getSecurity().get_parms().pending_ == false) { // cipher on
// sanity check for malicious/corrupted/illegal input
if (buffer.get_remaining() < hdr.length_) {
diff --git a/extra/yassl/src/yassl_imp.cpp b/extra/yassl/src/yassl_imp.cpp
index 4dcf275e7f2..e2da042457f 100644
--- a/extra/yassl/src/yassl_imp.cpp
+++ b/extra/yassl/src/yassl_imp.cpp
@@ -220,16 +220,26 @@ void DH_Server::build(SSL& ssl)
// read PreMaster secret and decrypt, server side
void EncryptedPreMasterSecret::read(SSL& ssl, input_buffer& input)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
const CertManager& cert = ssl.getCrypto().get_certManager();
RSA rsa(cert.get_privateKey(), cert.get_privateKeyLength(), false);
uint16 cipherLen = rsa.get_cipherLength();
if (ssl.isTLS()) {
byte len[2];
- input.read(len, sizeof(len));
+ len[0] = input[AUTO];
+ len[1] = input[AUTO];
ato16(len, cipherLen);
}
alloc(cipherLen);
input.read(secret_, length_);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
opaque preMasterSecret[SECRET_LEN];
rsa.decrypt(preMasterSecret, secret_, length_,
@@ -277,6 +287,11 @@ void EncryptedPreMasterSecret::alloc(int sz)
// read client's public key, server side
void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input)
{
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
DiffieHellman& dh = ssl.useCrypto().use_dh();
uint16 keyLength;
@@ -287,6 +302,10 @@ void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input)
alloc(keyLength);
input.read(Yc_, keyLength);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
dh.makeAgreement(Yc_, keyLength);
// because of encoding, first byte might be 0, don't use for preMaster
@@ -331,6 +350,10 @@ void ClientDiffieHellmanPublic::alloc(int sz, bool offset)
// read server's p, g, public key and sig, client side
void DH_Server::read(SSL& ssl, input_buffer& input)
{
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
uint16 length, messageTotal = 6; // pSz + gSz + pubSz
byte tmp[2];
@@ -341,6 +364,10 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
messageTotal += length;
input.read(parms_.alloc_p(length), length);
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
// g
tmp[0] = input[AUTO];
@@ -349,6 +376,10 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
messageTotal += length;
input.read(parms_.alloc_g(length), length);
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
// pub
tmp[0] = input[AUTO];
@@ -357,12 +388,20 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
messageTotal += length;
input.read(parms_.alloc_pub(length), length);
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
// save message for hash verify
input_buffer message(messageTotal);
input.set_current(input.get_current() - messageTotal);
input.read(message.get_buffer(), messageTotal);
message.add_size(messageTotal);
+ if (input.get_error() || input.get_remaining() < (uint)LENGTH_SZ) {
+ ssl.SetError(bad_input);
+ return;
+ }
// signature
tmp[0] = input[AUTO];
@@ -371,6 +410,10 @@ void DH_Server::read(SSL& ssl, input_buffer& input)
signature_ = NEW_YS byte[length];
input.read(signature_, length);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
// verify signature
byte hash[FINISHED_SZ];
@@ -645,6 +688,10 @@ void HandShakeHeader::Process(input_buffer& input, SSL& ssl)
{
ssl.verifyState(*this);
if (ssl.GetError()) return;
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
const HandShakeFactory& hsf = ssl.getFactory().getHandShake();
mySTL::auto_ptr<HandShakeBase> hs(hsf.CreateObject(type_));
if (!hs.get()) {
@@ -810,8 +857,13 @@ uint16 ChangeCipherSpec::get_length() const
// CipherSpec processing handler
-void ChangeCipherSpec::Process(input_buffer&, SSL& ssl)
+void ChangeCipherSpec::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
ssl.useSecurity().use_parms().pending_ = false;
if (ssl.getSecurity().get_resuming()) {
if (ssl.getSecurity().get_parms().entity_ == client_end)
@@ -873,6 +925,11 @@ output_buffer& operator<<(output_buffer& output, const Alert& a)
// Alert processing handler
void Alert::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
if (ssl.getSecurity().get_parms().pending_ == false) { // encrypted alert
int aSz = get_length(); // alert size already read on input
opaque verify[SHA_LEN];
@@ -890,12 +947,19 @@ void Alert::Process(input_buffer& input, SSL& ssl)
if (ssl.getSecurity().get_parms().cipher_type_ == block) {
int ivExtra = 0;
+ opaque fill;
if (ssl.isTLSv1_1())
ivExtra = ssl.getCrypto().get_cipher().get_blockSize();
int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra -
aSz - digestSz;
- input.set_current(input.get_current() + padSz);
+ for (int i = 0; i < padSz; i++)
+ fill = input[AUTO];
+ }
+
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
}
// verify
@@ -1112,6 +1176,11 @@ static int timing_verify(SSL& ssl, const byte* input, int padLen, int t,
// Process handler for Data
void Data::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
int msgSz = ssl.getSecurity().get_parms().encrypt_size_;
int pad = 0, padSz = 0;
int ivExtra = 0;
@@ -1154,7 +1223,7 @@ void Data::Process(input_buffer& input, SSL& ssl)
int dataSz = msgSz - ivExtra - digestSz - pad - padSz;
- if (dataSz < 0) {
+ if (dataSz < 0 || dataSz > (MAX_RECORD_SIZE + COMPRESS_EXTRA)) {
ssl.SetError(bad_input);
return;
}
@@ -1180,6 +1249,10 @@ void Data::Process(input_buffer& input, SSL& ssl)
// advance past mac and fill
input.set_current(input.get_current() + digestSz + pad + padSz);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
}
@@ -1244,6 +1317,11 @@ output_buffer& operator<<(output_buffer& output, const Certificate& cert)
// certificate processing handler
void Certificate::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
CertManager& cm = ssl.useCrypto().use_certManager();
uint32 list_sz;
@@ -1412,6 +1490,10 @@ input_buffer& operator>>(input_buffer& input, ServerHello& hello)
// Session
hello.id_len_ = input[AUTO];
+ if (hello.id_len_ > ID_LEN) {
+ input.set_error();
+ return input;
+ }
if (hello.id_len_)
input.read(hello.session_id_, hello.id_len_);
@@ -1452,8 +1534,13 @@ output_buffer& operator<<(output_buffer& output, const ServerHello& hello)
// Server Hello processing handler
-void ServerHello::Process(input_buffer&, SSL& ssl)
+void ServerHello::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
if (ssl.GetMultiProtocol()) { // SSLv23 support
if (ssl.isTLS() && server_version_.minor_ < 1)
// downgrade to SSLv3
@@ -1547,8 +1634,12 @@ const opaque* ServerHello::get_random() const
// Server Hello Done processing handler
-void ServerHelloDone::Process(input_buffer&, SSL& ssl)
+void ServerHelloDone::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
ssl.useStates().useClient() = serverHelloDoneComplete;
}
@@ -1667,8 +1758,13 @@ output_buffer& operator<<(output_buffer& output, const ClientHello& hello)
// Client Hello processing handler
-void ClientHello::Process(input_buffer&, SSL& ssl)
+void ClientHello::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
// store version for pre master secret
ssl.useSecurity().use_connection().chVersion_ = client_version_;
@@ -1800,9 +1896,17 @@ output_buffer& operator<<(output_buffer& output, const ServerKeyExchange& sk)
// Server Key Exchange processing handler
void ServerKeyExchange::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
createKey(ssl);
if (ssl.GetError()) return;
server_key_->read(ssl, input);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
ssl.useStates().useClient() = serverKeyExchangeComplete;
}
@@ -1924,18 +2028,24 @@ input_buffer& operator>>(input_buffer& input, CertificateRequest& request)
{
// types
request.typeTotal_ = input[AUTO];
+ if (request.typeTotal_ > CERT_TYPES) {
+ input.set_error();
+ return input;
+ }
for (int i = 0; i < request.typeTotal_; i++)
request.certificate_types_[i] = ClientCertificateType(input[AUTO]);
- byte tmp[REQUEST_HEADER];
- input.read(tmp, sizeof(tmp));
+ byte tmp[2];
+ tmp[0] = input[AUTO];
+ tmp[1] = input[AUTO];
uint16 sz;
ato16(tmp, sz);
// authorities
while (sz) {
uint16 dnSz;
- input.read(tmp, sizeof(tmp));
+ tmp[0] = input[AUTO];
+ tmp[1] = input[AUTO];
ato16(tmp, dnSz);
DistinguishedName dn;
@@ -1945,6 +2055,9 @@ input_buffer& operator>>(input_buffer& input, CertificateRequest& request)
input.read(&dn[REQUEST_HEADER], dnSz);
sz -= dnSz + REQUEST_HEADER;
+
+ if (input.get_error())
+ break;
}
return input;
@@ -1983,8 +2096,12 @@ output_buffer& operator<<(output_buffer& output,
// CertificateRequest processing handler
-void CertificateRequest::Process(input_buffer&, SSL& ssl)
+void CertificateRequest::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
CertManager& cm = ssl.useCrypto().use_certManager();
cm.setSendVerify();
@@ -2067,7 +2184,8 @@ output_buffer& CertificateVerify::get(output_buffer& out) const
input_buffer& operator>>(input_buffer& input, CertificateVerify& request)
{
byte tmp[VERIFY_HEADER];
- input.read(tmp, sizeof(tmp));
+ tmp[0] = input[AUTO];
+ tmp[1] = input[AUTO];
uint16 sz = 0;
ato16(tmp, sz);
@@ -2091,8 +2209,13 @@ output_buffer& operator<<(output_buffer& output,
// CertificateVerify processing handler
-void CertificateVerify::Process(input_buffer&, SSL& ssl)
+void CertificateVerify::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
+
const Hashes& hashVerify = ssl.getHashes().get_certVerify();
const CertManager& cert = ssl.getCrypto().get_certManager();
@@ -2131,9 +2254,17 @@ output_buffer& operator<<(output_buffer& output, const ClientKeyExchange& ck)
// Client Key Exchange processing handler
void ClientKeyExchange::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
createKey(ssl);
if (ssl.GetError()) return;
client_key_->read(ssl, input);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
if (ssl.getCrypto().get_certManager().verifyPeer())
build_certHashes(ssl, ssl.useHashes().use_certVerify());
@@ -2220,11 +2351,19 @@ output_buffer& operator<<(output_buffer& output, const Finished& fin)
// Finished processing handler
void Finished::Process(input_buffer& input, SSL& ssl)
{
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
// verify hashes
const Finished& verify = ssl.getHashes().get_verify();
uint finishedSz = ssl.isTLS() ? TLS_FINISHED_SZ : FINISHED_SZ;
input.read(hashes_.md5_, finishedSz);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
if (memcmp(&hashes_, &verify.hashes_, finishedSz)) {
ssl.SetError(verify_error);
@@ -2246,19 +2385,23 @@ void Finished::Process(input_buffer& input, SSL& ssl)
opaque mac[SHA_LEN]; // max size
int digestSz = ssl.getCrypto().get_digest().get_digestSize();
input.read(mac, digestSz);
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
+ return;
+ }
uint ivExtra = 0;
if (ssl.getSecurity().get_parms().cipher_type_ == block)
if (ssl.isTLSv1_1())
ivExtra = ssl.getCrypto().get_cipher().get_blockSize();
+ opaque fill;
int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra -
HANDSHAKE_HEADER - finishedSz - digestSz;
- input.set_current(input.get_current() + padSz);
-
- // verify mac
- if (memcmp(mac, verifyMAC, digestSz)) {
- ssl.SetError(verify_error);
+ for (int i = 0; i < padSz; i++)
+ fill = input[AUTO];
+ if (input.get_error()) {
+ ssl.SetError(bad_input);
return;
}
diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp
index 162d457b380..cbda9f97d83 100644
--- a/extra/yassl/src/yassl_int.cpp
+++ b/extra/yassl/src/yassl_int.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates
+ Copyright (c) 2005, 2014, Oracle and/or its affiliates
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -2535,8 +2535,9 @@ ASN1_STRING* StringHolder::GetString()
int DeCompress(input_buffer& in, int sz, input_buffer& out)
{
byte tmp[LENGTH_SZ];
-
- in.read(tmp, sizeof(tmp));
+
+ tmp[0] = in[AUTO];
+ tmp[1] = in[AUTO];
uint16 len;
ato16(tmp, len);
diff --git a/extra/yassl/taocrypt/include/asn.hpp b/extra/yassl/taocrypt/include/asn.hpp
index b826bf54f8d..2854b8fe06d 100644
--- a/extra/yassl/taocrypt/include/asn.hpp
+++ b/extra/yassl/taocrypt/include/asn.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -111,7 +111,7 @@ enum Constants
MAX_LENGTH_SZ = 5,
MAX_SEQ_SZ = 5, // enum(seq|con) + length(4)
MAX_ALGO_SIZE = 9,
- MAX_DIGEST_SZ = 25, // SHA + enum(Bit or Octet) + length(4)
+ MAX_DIGEST_SZ = 69, // SHA512 + enum(Bit or Octet) + length(4)
DSA_SIG_SZ = 40,
ASN_NAME_MAX = 512 // max total of all included names
};
@@ -257,8 +257,11 @@ typedef STL::list<Signer*> SignerList;
enum ContentType { HUH = 651 };
-enum SigType { SHAwDSA = 517, MD2wRSA = 646, MD5wRSA = 648, SHAwRSA =649};
-enum HashType { MD2h = 646, MD5h = 649, SHAh = 88 };
+enum SigType { SHAwDSA = 517, MD2wRSA = 646, MD5wRSA = 648, SHAwRSA = 649,
+ SHA256wRSA = 655, SHA384wRSA = 656, SHA512wRSA = 657,
+ SHA256wDSA = 416 };
+enum HashType { MD2h = 646, MD5h = 649, SHAh = 88, SHA256h = 414, SHA384h = 415,
+ SHA512h = 416 };
enum KeyType { DSAk = 515, RSAk = 645 }; // sums of algo OID
diff --git a/extra/yassl/taocrypt/include/block.hpp b/extra/yassl/taocrypt/include/block.hpp
index 601d9dbce57..1e4bd454b06 100644
--- a/extra/yassl/taocrypt/include/block.hpp
+++ b/extra/yassl/taocrypt/include/block.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -74,7 +74,7 @@ typename A::pointer StdReallocate(A& a, T* p, typename A::size_type oldSize,
if (preserve) {
A b = A();
typename A::pointer newPointer = b.allocate(newSize, 0);
- memcpy(newPointer, p, sizeof(T) * min((word32) oldSize, (word32) newSize));
+ memcpy(newPointer, p, sizeof(T) * min(oldSize, newSize));
a.deallocate(p, oldSize);
STL::swap(a, b);
return newPointer;
@@ -187,9 +187,9 @@ public:
~Block() { allocator_.deallocate(buffer_, sz_); }
private:
+ A allocator_;
word32 sz_; // size in Ts
T* buffer_;
- A allocator_;
};
diff --git a/extra/yassl/taocrypt/include/integer.hpp b/extra/yassl/taocrypt/include/integer.hpp
index 68f3c4bbf39..75a3ee3d3df 100644
--- a/extra/yassl/taocrypt/include/integer.hpp
+++ b/extra/yassl/taocrypt/include/integer.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -47,7 +47,7 @@
#ifdef TAOCRYPT_X86ASM_AVAILABLE
#if defined(__GNUC__) && (__GNUC__ >= 4)
- // GCC 4 or greater optimizes too much inline on recursive for bigint,
+ // GCC 4 or greater optimizes too much inline on recursive for bigint,
// -O3 just as fast without asm here anyway
#undef TAOCRYPT_X86ASM_AVAILABLE
#endif
diff --git a/extra/yassl/taocrypt/include/pwdbased.hpp b/extra/yassl/taocrypt/include/pwdbased.hpp
index 9b1b62fea45..32da429f747 100644
--- a/extra/yassl/taocrypt/include/pwdbased.hpp
+++ b/extra/yassl/taocrypt/include/pwdbased.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
MA 02110-1301 USA.
*/
+
/* pwdbased.hpp defines PBKDF2 from PKCS #5
*/
diff --git a/extra/yassl/taocrypt/include/runtime.hpp b/extra/yassl/taocrypt/include/runtime.hpp
index 29c4d2db236..ef2facf32b0 100644
--- a/extra/yassl/taocrypt/include/runtime.hpp
+++ b/extra/yassl/taocrypt/include/runtime.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates
+ Copyright (c) 2005, 2014, Oracle and/or its affiliates
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -34,7 +34,10 @@
// Handler for pure virtual functions
namespace __Crun {
- void pure_error(void);
+ static void pure_error(void)
+ {
+ // "Pure virtual method called, Aborted", GCC 4.2 str cmp fix
+ }
} // namespace __Crun
#endif // __sun
@@ -48,7 +51,15 @@ extern "C" {
#if defined(DO_TAOCRYPT_KERNEL_MODE)
#include "kernelc.hpp"
#endif
- int __cxa_pure_virtual () __attribute__ ((weak));
+
+/* Disallow inline __cxa_pure_virtual() */
+static int __cxa_pure_virtual() __attribute__((noinline, used));
+static int __cxa_pure_virtual()
+{
+ // oops, pure virtual called!
+ return 0;
+}
+
} // extern "C"
#endif // __GNUC__ > 2
diff --git a/extra/yassl/taocrypt/include/sha.hpp b/extra/yassl/taocrypt/include/sha.hpp
index d1f9607f8de..cf6d0d09a1d 100644
--- a/extra/yassl/taocrypt/include/sha.hpp
+++ b/extra/yassl/taocrypt/include/sha.hpp
@@ -1,6 +1,5 @@
/*
- Copyright (C) 2000-2007 MySQL AB
- Use is subject to license terms
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -159,6 +158,12 @@ private:
void Transform();
};
+enum { MAX_SHA2_DIGEST_SIZE = 64 }; // SHA512
+
+#else
+
+enum { MAX_SHA2_DIGEST_SIZE = 32 }; // SHA256
+
#endif // WORD64_AVAILABLE
diff --git a/extra/yassl/taocrypt/src/aes.cpp b/extra/yassl/taocrypt/src/aes.cpp
index b49001f0a95..e47765b87d0 100644
--- a/extra/yassl/taocrypt/src/aes.cpp
+++ b/extra/yassl/taocrypt/src/aes.cpp
@@ -66,7 +66,7 @@ void AES::Process(byte* out, const byte* in, word32 sz)
in += BLOCK_SIZE;
}
}
- else {
+ else {
while (blocks--) {
AsmDecrypt(in, out, (void*)Td0);
@@ -79,8 +79,8 @@ void AES::Process(byte* out, const byte* in, word32 sz)
out += BLOCK_SIZE;
in += BLOCK_SIZE;
}
- }
- }
+ }
+ }
}
#endif // DO_AES_ASM
@@ -466,14 +466,13 @@ void AES::decrypt(const byte* inBlock, const byte* xorBlock,
"movd mm7, ebp;" \
"movd mm4, eax;" \
"mov ebp, edx;" \
- "sub esp, 4;"
-
+ "sub esp, 4;"
#define EPILOG() \
"add esp, 4;" \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "S" (inBlock), "d" (boxes), "a" (outBlock) \
: "%edi", "memory", "cc" \
@@ -834,9 +833,9 @@ void AES::AsmEncrypt(const byte* inBlock, byte* outBlock, void* boxes) const
#ifdef _MSC_VER
- __declspec(naked)
+ __declspec(naked)
#else
- __attribute__ ((noinline))
+ __attribute__ ((noinline))
#endif
void AES::AsmDecrypt(const byte* inBlock, byte* outBlock, void* boxes) const
{
diff --git a/extra/yassl/taocrypt/src/algebra.cpp b/extra/yassl/taocrypt/src/algebra.cpp
index a28d8915330..7dae7d6a917 100644
--- a/extra/yassl/taocrypt/src/algebra.cpp
+++ b/extra/yassl/taocrypt/src/algebra.cpp
@@ -185,10 +185,10 @@ Integer AbstractGroup::CascadeScalarMultiply(const Element &x,
struct WindowSlider
{
- WindowSlider(const Integer &expIn, bool fastNegateIn,
+ WindowSlider(const Integer &exp, bool fastNegate,
unsigned int windowSizeIn=0)
- : exp(expIn), windowModulus(Integer::One()), windowSize(windowSizeIn),
- windowBegin(0), fastNegate(fastNegateIn), firstTime(true),
+ : exp(exp), windowModulus(Integer::One()), windowSize(windowSizeIn),
+ windowBegin(0), fastNegate(fastNegate), firstTime(true),
finished(false)
{
if (windowSize == 0)
diff --git a/extra/yassl/taocrypt/src/arc4.cpp b/extra/yassl/taocrypt/src/arc4.cpp
index f5794ec2566..10a3a7d6ffc 100644
--- a/extra/yassl/taocrypt/src/arc4.cpp
+++ b/extra/yassl/taocrypt/src/arc4.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -121,12 +121,11 @@ void ARC4::AsmProcess(byte* out, const byte* in, word32 length)
"push ebx;" \
"push ebp;" \
"mov ebp, eax;"
-
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "D" (out), "S" (in), "a" (length) \
: "%edx", "memory", "cc" \
@@ -180,7 +179,7 @@ void ARC4::AsmProcess(byte* out, const byte* in, word32 length)
#ifdef _MSC_VER
AS1( loopStart: ) // loopStart
#else
- AS1( 0: ) // loopStart for some gas (need numeric for jump back
+ AS1( 0: ) // loopStart for some gas (need numeric for jump back
#endif
// y = (y+a) & 0xff;
@@ -232,7 +231,7 @@ void ARC4::AsmProcess(byte* out, const byte* in, word32 length)
AS1( nothing: )
- // inline adjust
+ // inline adjust
AS2( add esp, 4 ) // fix room on stack
EPILOG()
diff --git a/extra/yassl/taocrypt/src/asn.cpp b/extra/yassl/taocrypt/src/asn.cpp
index d2377ea6fb3..15f8d81f5cc 100644
--- a/extra/yassl/taocrypt/src/asn.cpp
+++ b/extra/yassl/taocrypt/src/asn.cpp
@@ -1,6 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
- Use is subject to license terms.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -769,7 +768,7 @@ void CertDecoder::GetName(NameType nt)
while (source_.get_index() < length) {
GetSet();
if (source_.GetError().What() == SET_E) {
- source_.SetError(NO_ERROR_E); // extensions may only have sequence
+ source_.SetError(NO_ERROR_E); // extensions may only have sequence
source_.prev();
}
GetSequence();
@@ -840,10 +839,8 @@ void CertDecoder::GetName(NameType nt)
if (source_.IsLeft(length) == false) return;
if (email) {
- if (!(ptr = AddTag(ptr, buf_end, "/emailAddress=", 14, length))) {
- source_.SetError(CONTENT_E);
- return;
- }
+ if (!(ptr = AddTag(ptr, buf_end, "/emailAddress=", 14, length)))
+ return;
}
source_.advance(length);
@@ -982,12 +979,26 @@ bool CertDecoder::ConfirmSignature(Source& pub)
hasher.reset(NEW_TC SHA);
ht = SHAh;
}
+ else if (signatureOID_ == SHA256wRSA || signatureOID_ == SHA256wDSA) {
+ hasher.reset(NEW_TC SHA256);
+ ht = SHA256h;
+ }
+#ifdef WORD64_AVAILABLE
+ else if (signatureOID_ == SHA384wRSA) {
+ hasher.reset(NEW_TC SHA384);
+ ht = SHA384h;
+ }
+ else if (signatureOID_ == SHA512wRSA) {
+ hasher.reset(NEW_TC SHA512);
+ ht = SHA512h;
+ }
+#endif
else {
source_.SetError(UNKOWN_SIG_E);
return false;
}
- byte digest[SHA::DIGEST_SIZE]; // largest size
+ byte digest[MAX_SHA2_DIGEST_SIZE]; // largest size
hasher->Update(source_.get_buffer() + certBegin_, sigIndex_ - certBegin_);
hasher->Final(digest);
@@ -1060,6 +1071,12 @@ word32 DER_Encoder::SetAlgoID(HashType aOID, byte* output)
0x02, 0x05, 0x05, 0x00 };
static const byte md2AlgoID[] = { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
0x02, 0x02, 0x05, 0x00};
+ static const byte sha256AlgoID[] = { 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
+ 0x04, 0x02, 0x01, 0x05, 0x00 };
+ static const byte sha384AlgoID[] = { 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
+ 0x04, 0x02, 0x02, 0x05, 0x00 };
+ static const byte sha512AlgoID[] = { 0x60, 0x86, 0x48, 0x01, 0x65, 0x03,
+ 0x04, 0x02, 0x03, 0x05, 0x00 };
int algoSz = 0;
const byte* algoName = 0;
@@ -1070,6 +1087,21 @@ word32 DER_Encoder::SetAlgoID(HashType aOID, byte* output)
algoName = shaAlgoID;
break;
+ case SHA256h:
+ algoSz = sizeof(sha256AlgoID);
+ algoName = sha256AlgoID;
+ break;
+
+ case SHA384h:
+ algoSz = sizeof(sha384AlgoID);
+ algoName = sha384AlgoID;
+ break;
+
+ case SHA512h:
+ algoSz = sizeof(sha512AlgoID);
+ algoName = sha512AlgoID;
+ break;
+
case MD2h:
algoSz = sizeof(md2AlgoID);
algoName = md2AlgoID;
diff --git a/extra/yassl/taocrypt/src/blowfish.cpp b/extra/yassl/taocrypt/src/blowfish.cpp
index 67bbd008527..87b0556755e 100644
--- a/extra/yassl/taocrypt/src/blowfish.cpp
+++ b/extra/yassl/taocrypt/src/blowfish.cpp
@@ -237,8 +237,8 @@ void Blowfish::ProcessAndXorBlock(const byte* in, const byte* xOr, byte* out)
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "S" (inBlock), "a" (outBlock) \
: "%edi", "%edx", "memory", "cc" \
@@ -291,7 +291,7 @@ void Blowfish::ProcessAndXorBlock(const byte* in, const byte* xOr, byte* out)
#ifdef _MSC_VER
- __declspec(naked)
+ __declspec(naked)
#else
__attribute__ ((noinline))
#endif
diff --git a/extra/yassl/taocrypt/src/des.cpp b/extra/yassl/taocrypt/src/des.cpp
index b52a83a38c6..673c21ed207 100644
--- a/extra/yassl/taocrypt/src/des.cpp
+++ b/extra/yassl/taocrypt/src/des.cpp
@@ -1,6 +1,5 @@
/*
- Copyright (C) 2000-2007 MySQL AB
- Use is subject to license terms
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -642,9 +641,9 @@ void DES_EDE3::ProcessAndXorBlock(const byte* in, const byte* xOr,
#ifdef _MSC_VER
- __declspec(naked)
+ __declspec(naked)
#else
- __attribute__ ((noinline))
+ __attribute__ ((noinline))
#endif
void DES_EDE3::AsmProcess(const byte* in, byte* out, void* box) const
{
@@ -664,8 +663,8 @@ void DES_EDE3::AsmProcess(const byte* in, byte* out, void* box) const
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "d" (this), "S" (in), "a" (box), "c" (out) \
: "%edi", "memory", "cc" \
diff --git a/extra/yassl/taocrypt/src/integer.cpp b/extra/yassl/taocrypt/src/integer.cpp
index 369df27ae1e..b7fbb7f96cf 100644
--- a/extra/yassl/taocrypt/src/integer.cpp
+++ b/extra/yassl/taocrypt/src/integer.cpp
@@ -56,9 +56,8 @@
#endif
#elif defined(_MSC_VER) && defined(_M_IX86)
/* #pragma message("You do not seem to have the Visual C++ Processor Pack ")
- #pragma message("installed, so use of SSE2 intrinsics will be disabled.")
-*/
#pragma message("installed, so use of SSE2 intrinsics will be disabled.")
+*/
#elif defined(__GNUC__) && defined(__i386__)
/* #warning You do not have GCC 3.3 or later, or did not specify the -msse2 \
compiler option. Use of SSE2 intrinsics will be disabled.
@@ -194,7 +193,7 @@ DWord() {}
"a" (a), "rm" (b) : "cc");
#elif defined(__mips64)
- __asm__("dmultu %2,%3" : "=h" (r.halfs_.high), "=l" (r.halfs_.low)
+ __asm__("dmultu %2,%3" : "=d" (r.halfs_.high), "=l" (r.halfs_.low)
: "r" (a), "r" (b));
#elif defined(_M_IX86)
@@ -282,7 +281,12 @@ DWord() {}
word GetHighHalfAsBorrow() const {return 0-halfs_.high;}
private:
- struct dword_struct
+ union
+ {
+ #ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE
+ dword whole_;
+ #endif
+ struct
{
#ifdef LITTLE_ENDIAN_ORDER
word low;
@@ -291,14 +295,7 @@ private:
word high;
word low;
#endif
- };
-
- union
- {
- #ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE
- dword whole_;
- #endif
- struct dword_struct halfs_;
+ } halfs_;
};
};
@@ -1201,24 +1198,20 @@ public:
#define AS1(x) #x ";"
#define AS2(x, y) #x ", " #y ";"
#define AddPrologue \
- word res; \
__asm__ __volatile__ \
( \
"push %%ebx;" /* save this manually, in case of -fPIC */ \
- "mov %3, %%ebx;" \
+ "mov %2, %%ebx;" \
".intel_syntax noprefix;" \
"push ebp;"
#define AddEpilogue \
"pop ebp;" \
".att_syntax prefix;" \
"pop %%ebx;" \
- "mov %%eax, %0;" \
- : "=g" (res) \
+ : \
: "c" (C), "d" (A), "m" (B), "S" (N) \
: "%edi", "memory", "cc" \
- ); \
- return res;
-
+ );
#define MulPrologue \
__asm__ __volatile__ \
( \
diff --git a/extra/yassl/taocrypt/src/md5.cpp b/extra/yassl/taocrypt/src/md5.cpp
index e9a9e8fe517..45cfa8a3322 100644
--- a/extra/yassl/taocrypt/src/md5.cpp
+++ b/extra/yassl/taocrypt/src/md5.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -223,7 +223,7 @@ void MD5::Update(const byte* data, word32 len)
#ifdef _MSC_VER
- __declspec(naked)
+ __declspec(naked)
#else
__attribute__ ((noinline))
#endif
@@ -242,8 +242,8 @@ void MD5::AsmTransform(const byte* data, word32 times)
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "D" (data), "a" (times) \
: "%esi", "%edx", "memory", "cc" \
@@ -297,7 +297,7 @@ void MD5::AsmTransform(const byte* data, word32 times)
#ifdef _MSC_VER
AS1( loopStart: ) // loopStart
#else
- AS1( 0: ) // loopStart for some gas (need numeric for jump back
+ AS1( 0: ) // loopStart for some gas (need numeric for jump back
#endif
// set up
diff --git a/extra/yassl/taocrypt/src/misc.cpp b/extra/yassl/taocrypt/src/misc.cpp
index e410cfe1946..198f1ba17be 100644
--- a/extra/yassl/taocrypt/src/misc.cpp
+++ b/extra/yassl/taocrypt/src/misc.cpp
@@ -84,17 +84,7 @@ namespace STL = STL_NAMESPACE;
}
-#ifdef __sun
-
-// Handler for pure virtual functions
-namespace __Crun {
- void pure_error() {
- }
-}
-
-#endif
-
-#if defined(__ICC) || defined(__INTEL_COMPILER) || (__GNUC__ > 2)
+#if defined(__ICC) || defined(__INTEL_COMPILER)
extern "C" {
diff --git a/extra/yassl/taocrypt/src/rabbit.cpp b/extra/yassl/taocrypt/src/rabbit.cpp
index 89e6a207a1b..5e32f383493 100644
--- a/extra/yassl/taocrypt/src/rabbit.cpp
+++ b/extra/yassl/taocrypt/src/rabbit.cpp
@@ -1,15 +1,15 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
-
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
@@ -236,7 +236,7 @@ void Rabbit::Process(byte* output, const byte* input, word32 msglen)
NextState(Work);
/* Generate 16 bytes of pseudo-random data */
- tmp[0] = LITTLE32(workCtx_.x[0] ^
+ tmp[0] = LITTLE32(workCtx_.x[0] ^
(workCtx_.x[5]>>16) ^ U32V(workCtx_.x[3]<<16));
tmp[1] = LITTLE32(workCtx_.x[2] ^
(workCtx_.x[7]>>16) ^ U32V(workCtx_.x[5]<<16));
diff --git a/extra/yassl/taocrypt/src/random.cpp b/extra/yassl/taocrypt/src/random.cpp
index 084871c5447..4b89b5b32c5 100644
--- a/extra/yassl/taocrypt/src/random.cpp
+++ b/extra/yassl/taocrypt/src/random.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -27,6 +27,7 @@
#include <time.h>
#if defined(_WIN32)
+ #define _WIN32_WINNT 0x0400
#include <windows.h>
#include <wincrypt.h>
#else
diff --git a/extra/yassl/taocrypt/src/ripemd.cpp b/extra/yassl/taocrypt/src/ripemd.cpp
index b670a9eca86..5d03dc61cd6 100644
--- a/extra/yassl/taocrypt/src/ripemd.cpp
+++ b/extra/yassl/taocrypt/src/ripemd.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -507,6 +507,8 @@ void RIPEMD160::Transform()
#ifdef _MSC_VER
__declspec(naked)
+#else
+ __attribute__ ((noinline))
#endif
void RIPEMD160::AsmTransform(const byte* data, word32 times)
{
@@ -520,12 +522,11 @@ void RIPEMD160::AsmTransform(const byte* data, word32 times)
".intel_syntax noprefix;" \
"push ebx;" \
"push ebp;"
-
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "D" (data), "d" (times) \
: "%esi", "%eax", "memory", "cc" \
@@ -571,7 +572,7 @@ void RIPEMD160::AsmTransform(const byte* data, word32 times)
#ifdef _MSC_VER
AS1( loopStart: ) // loopStart
#else
- AS1( 0: ) // loopStart for some gas (need numeric for jump back
+ AS1( 0: ) // loopStart for some gas (need numeric for jump back
#endif
AS2( movd mm2, edx ) // store times_
@@ -830,7 +831,7 @@ void RIPEMD160::AsmTransform(const byte* data, word32 times)
AS1( jnz 0b ) // loopStart
#endif
- // inline adjust
+ // inline adjust
AS2( add esp, 24 ) // fix room on stack
EPILOG()
diff --git a/extra/yassl/taocrypt/src/sha.cpp b/extra/yassl/taocrypt/src/sha.cpp
index 0d3491eb83d..4206f7f64ea 100644
--- a/extra/yassl/taocrypt/src/sha.cpp
+++ b/extra/yassl/taocrypt/src/sha.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -776,12 +776,11 @@ void SHA::AsmTransform(const byte* data, word32 times)
".intel_syntax noprefix;" \
"push ebx;" \
"push ebp;"
-
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "c" (this), "D" (data), "a" (times) \
: "%esi", "%edx", "memory", "cc" \
@@ -830,7 +829,7 @@ void SHA::AsmTransform(const byte* data, word32 times)
#ifdef _MSC_VER
AS1( loopStart: ) // loopStart
#else
- AS1( 0: ) // loopStart for some gas (need numeric for jump back
+ AS1( 0: ) // loopStart for some gas (need numeric for jump back
#endif
// byte reverse 16 words of input, 4 at a time, put on stack for W[]
@@ -1022,7 +1021,7 @@ void SHA::AsmTransform(const byte* data, word32 times)
AS1( jnz 0b ) // loopStart
#endif
- // inline adjust
+ // inline adjust
AS2( add esp, 68 ) // fix room on stack
EPILOG()
diff --git a/extra/yassl/taocrypt/src/twofish.cpp b/extra/yassl/taocrypt/src/twofish.cpp
index 69699de0713..8eb82210b0f 100644
--- a/extra/yassl/taocrypt/src/twofish.cpp
+++ b/extra/yassl/taocrypt/src/twofish.cpp
@@ -285,12 +285,11 @@ void Twofish::decrypt(const byte* inBlock, const byte* xorBlock,
"push ebp;" \
"movd mm3, eax;" \
"movd mm6, ebp;"
-
#define EPILOG() \
"pop ebp;" \
"pop ebx;" \
- "emms;" \
- ".att_syntax;" \
+ "emms;" \
+ ".att_syntax;" \
: \
: "D" (this), "S" (inBlock), "a" (outBlock) \
: "%ecx", "%edx", "memory", "cc" \
@@ -479,7 +478,7 @@ void Twofish::AsmEncrypt(const byte* inBlock, byte* outBlock) const
AS2( movd ebp, mm6 )
AS2( movd esi, mm0 ) // k_
#ifdef __GNUC__
- AS2( movd edi, mm3 ) // outBlock
+ AS2( movd edi, mm3 ) // outBlock
#else
AS2( mov edi, [ebp + 12] ) // outBlock
#endif
@@ -500,7 +499,7 @@ void Twofish::AsmEncrypt(const byte* inBlock, byte* outBlock) const
#ifdef _MSC_VER
- __declspec(naked)
+ __declspec(naked)
#else
__attribute__ ((noinline))
#endif
@@ -551,7 +550,7 @@ void Twofish::AsmDecrypt(const byte* inBlock, byte* outBlock) const
AS2( movd ebp, mm6 )
AS2( movd esi, mm0 ) // k_
#ifdef __GNUC__
- AS2( movd edi, mm3 ) // outBlock
+ AS2( movd edi, mm3 ) // outBlock
#else
AS2( mov edi, [ebp + 12] ) // outBlock
#endif
diff --git a/include/m_string.h b/include/m_string.h
index 0a46805bfae..969725e4631 100644
--- a/include/m_string.h
+++ b/include/m_string.h
@@ -34,14 +34,6 @@
#include <string.h>
#endif
-/* need by my_vsnprintf */
-#include <stdarg.h>
-
-/* This is needed for the definitions of bzero... on solaris */
-#if defined(HAVE_STRINGS_H)
-#include <strings.h>
-#endif
-
/* This is needed for the definitions of memcpy... on solaris */
#if defined(HAVE_MEMORY_H) && !defined(__cplusplus)
#include <memory.h>
diff --git a/include/maria.h b/include/maria.h
index b35dc7dd3f0..44079f3f288 100644
--- a/include/maria.h
+++ b/include/maria.h
@@ -20,12 +20,10 @@
#ifndef _maria_h
#define _maria_h
#include <my_base.h>
-#include <my_sys.h>
#include <m_ctype.h>
#include "my_compare.h"
#include "ft_global.h"
#include <myisamchk.h>
-#include <mysql/plugin.h>
#ifdef __cplusplus
extern "C" {
diff --git a/libmysqld/emb_qcache.cc b/libmysqld/emb_qcache.cc
index ccdfaf286eb..a1a66421db8 100644
--- a/libmysqld/emb_qcache.cc
+++ b/libmysqld/emb_qcache.cc
@@ -13,8 +13,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "sql_priv.h"
#include "my_global.h" // HAVE_*
+#include "sql_priv.h"
#ifdef HAVE_QUERY_CACHE
#include <mysql.h>
diff --git a/mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test b/mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test
index 4be2ea376d2..c57d5a8fc51 100644
--- a/mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test
+++ b/mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test
@@ -32,7 +32,7 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
--echo # CHECK IMPLICT COMMIT
--echo #########################################################################
SET AUTOCOMMIT= 0;
-let $ddl_cases= 41;
+let $ddl_cases= 43;
while ($ddl_cases >= 1)
{
--echo -b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
@@ -68,6 +68,15 @@ while ($ddl_cases >= 1)
let $first_binlog_position= query_get_value("SHOW MASTER STATUS", Position, 1);
--enable_query_log
eval INSERT INTO tt_1(ddl_case) VALUES ($ddl_cases);
+
+ if ($ddl_cases == 43)
+ {
+ let $cmd= CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_SO";
+ }
+ if ($ddl_cases == 42)
+ {
+ let $cmd= DROP FUNCTION myfunc_int;
+ }
if ($ddl_cases == 41)
{
let $cmd= LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
@@ -329,6 +338,7 @@ while ($ddl_cases >= 1)
{
let $cmd= DROP DATABASE IF EXISTS db;
}
+ --replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB
--eval $cmd
--disable_query_log
#
@@ -352,6 +362,7 @@ while ($ddl_cases >= 1)
exit;
}
}
+
--echo -e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
let $binlog_start= $first_binlog_position;
--echo -b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
diff --git a/mysql-test/extra/rpl_tests/rpl_mixing_engines.inc b/mysql-test/extra/rpl_tests/rpl_mixing_engines.inc
index 8941779947a..c71c45a57c5 100644
--- a/mysql-test/extra/rpl_tests/rpl_mixing_engines.inc
+++ b/mysql-test/extra/rpl_tests/rpl_mixing_engines.inc
@@ -113,6 +113,19 @@ if ($commands == 'configure')
RETURN "fc_i_nt_5_suc";
END|
+ CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+ BEGIN
+ DECLARE in_stmt_id INTEGER;
+ SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+ SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+ INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+
+ SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+ SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+ INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+ RETURN "fc_i_nt_3_tt_3_suc";
+ END|
+
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -186,6 +199,7 @@ if ($commands == 'clean')
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+ DROP FUNCTION fc_i_nt_3_tt_3_suc;
--disable_query_log
if ($database_name != 'test')
@@ -439,6 +453,21 @@ while ($commands != '')
eval INSERT INTO tt_5(trans_id, stmt_id, info) VALUES ($trans_id, $stmt_id, ''), ($old_trans_id, $old_stmt_id, fc_i_nt_5_suc ($trans_id, $stmt_id));
inc $stmt_id;
}
+ if ($command == 'set-T')
+ {
+ --eval SET @var= fc_i_tt_5_suc($trans_id, $stmt_id)
+ inc $stmt_id;
+ }
+ if ($command == 'set-N')
+ {
+ --eval SET @var= fc_i_nt_5_suc($trans_id, $stmt_id)
+ inc $stmt_id;
+ }
+ if ($command == 'set-NT')
+ {
+ --eval SET @var= fc_i_nt_3_tt_3_suc($trans_id, $stmt_id)
+ inc $stmt_id;
+ }
if ($command == 'CS-T->T')
{
--eval CREATE TABLE tt_xx_$tb_id (PRIMARY KEY(trans_id, stmt_id)) engine=$engine_type SELECT * FROM tt_1;
diff --git a/mysql-test/extra/rpl_tests/rpl_mixing_engines.test b/mysql-test/extra/rpl_tests/rpl_mixing_engines.test
index 32e035702da..e4a257371a7 100644
--- a/mysql-test/extra/rpl_tests/rpl_mixing_engines.test
+++ b/mysql-test/extra/rpl_tests/rpl_mixing_engines.test
@@ -1760,6 +1760,43 @@ connection master;
--echo ###################################################################################
+--echo # 5 - SET WITH ROW CHANGES
+--echo ###################################################################################
+--let $commands= set-T
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= set-N
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= set-NT
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-N set-T C
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-T set-N C
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-N set-T R
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-T set-N R
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-NT set-T C
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-T set-NT C
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-NT set-T R
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+--let $commands= B set-T set-NT R
+--source extra/rpl_tests/rpl_mixing_engines.inc
+
+
+--echo ###################################################################################
--echo # CHECK CONSISTENCY
--echo ###################################################################################
connection master;
diff --git a/mysql-test/include/ctype_like_cond_propagation.inc b/mysql-test/include/ctype_like_cond_propagation.inc
new file mode 100644
index 00000000000..023cf2b1b30
--- /dev/null
+++ b/mysql-test/include/ctype_like_cond_propagation.inc
@@ -0,0 +1,39 @@
+--echo #
+--echo # MDEV-7149 Constant condition propagation erroneously applied for LIKE
+--echo #
+
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+DROP TABLE t1;
+
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+DROP TABLE t1;
diff --git a/mysql-test/include/ctype_like_cond_propagation_utf8_german.inc b/mysql-test/include/ctype_like_cond_propagation_utf8_german.inc
new file mode 100644
index 00000000000..2cfa89448bc
--- /dev/null
+++ b/mysql-test/include/ctype_like_cond_propagation_utf8_german.inc
@@ -0,0 +1,16 @@
+--echo #
+--echo # MDEV-7149 Constant condition propagation erroneously applied for LIKE
+--echo #
+
+CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('ae'),('ä');
+SELECT * FROM t1 WHERE c1='ä';
+SELECT * FROM t1 WHERE c1 LIKE 'ae';
+SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+SELECT * FROM t1 WHERE CONCAT(c1)='ä';
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
+SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/include/function_defaults.inc b/mysql-test/include/function_defaults.inc
index e588c82df1b..cb8e8f86f93 100644
--- a/mysql-test/include/function_defaults.inc
+++ b/mysql-test/include/function_defaults.inc
@@ -408,15 +408,28 @@ UPDATE t1 SET c = 2;
SELECT * FROM t1;
--echo #
+--echo # Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
+--echo #
+
+--echo # 2011-04-20 09:54:13 UTC
+SET TIMESTAMP = 1303293253.794613;
+
+UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
+SELECT * FROM t1;
+
+UPDATE t1 SET c = 3;
+SELECT * FROM t1;
+
+--echo #
--echo # Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
--echo #
--echo # 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.534231;
-UPDATE t1 t11, t1 t12 SET t11.c = 2;
+UPDATE t1 t11, t1 t12 SET t11.c = 3;
SELECT * FROM t1;
-UPDATE t1 t11, t1 t12 SET t11.c = 3;
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
DROP TABLE t1;
@@ -1037,7 +1050,7 @@ SET TIME_ZONE = "+03:00";
--echo # 1970-01-01 03:16:40
SET TIMESTAMP = 1000.123456;
-eval CREATE TABLE t1 ( a INT, b $timestamp NOT NULL DEFAULT $current_timestamp ON UPDATE $current_timestamp) ENGINE = INNODB;
+eval CREATE TABLE t1 ( a INT, b $timestamp NOT NULL DEFAULT $current_timestamp ON UPDATE $current_timestamp);
SHOW CREATE TABLE t1;
@@ -1094,10 +1107,10 @@ eval CREATE TABLE t1 (
b INT,
ts $timestamp NOT NULL DEFAULT $current_timestamp ON UPDATE $current_timestamp,
PRIMARY KEY ( a, ts )
-) ENGINE = INNODB;
+);
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
-eval CREATE TABLE t2 ( a INT ) ENGINE = INNODB;
+eval CREATE TABLE t2 ( a INT );
INSERT INTO t2 VALUES ( 1 );
UPDATE t1 STRAIGHT_JOIN t2
@@ -1133,8 +1146,7 @@ eval ALTER TABLE t1 ADD COLUMN c4 $datetime ON UPDATE $now AFTER c3;
eval ALTER TABLE t1 ADD COLUMN c5 $datetime DEFAULT $now AFTER c4;
eval ALTER TABLE t1 ADD COLUMN c6 $datetime DEFAULT $now ON UPDATE $now AFTER c5;
-SELECT * FROM t1;
-
+query_vertical SELECT * FROM t1;
DROP TABLE t1;
diff --git a/mysql-test/include/not_embedded.inc b/mysql-test/include/not_embedded.inc
index c3a9c3e12c8..88185af3b15 100644
--- a/mysql-test/include/not_embedded.inc
+++ b/mysql-test/include/not_embedded.inc
@@ -4,8 +4,7 @@
#
# The test below is redundant
--- require r/not_embedded.require
-disable_query_log;
-select version() like '%embedded%' as 'have_embedded';
-enable_query_log;
+if (`select version() like '%embedded%'`) {
+ This should never happen;
+}
diff --git a/mysql-test/include/restart_mysqld.inc b/mysql-test/include/restart_mysqld.inc
index 49f6dfd5364..3d53fada870 100644
--- a/mysql-test/include/restart_mysqld.inc
+++ b/mysql-test/include/restart_mysqld.inc
@@ -1,3 +1,4 @@
+--source include/not_embedded.inc
if ($rpl_inited)
{
diff --git a/mysql-test/include/rpl_connect.inc b/mysql-test/include/rpl_connect.inc
index 95912d57469..11927833f53 100644
--- a/mysql-test/include/rpl_connect.inc
+++ b/mysql-test/include/rpl_connect.inc
@@ -42,7 +42,7 @@ if (!$rpl_connection_name)
--let $_rpl_port= \$SERVER_MYPORT_$rpl_server_number
if (!$_rpl_port)
{
- --echo Bug in test case: '\$SERVER_MYPORT_$rpl_server_number' not initialized. Check the test's .cfg file.
+ --echo Bug in test case: '\$SERVER_MYPORT_$rpl_server_number' not initialized. Check the test's .cnf file.
--die Not all SERVER_MYPORT_* environment variables are setup correctly.
}
diff --git a/mysql-test/include/show_events.inc b/mysql-test/include/show_events.inc
index 9a39ec67d0e..7917b6740cf 100644
--- a/mysql-test/include/show_events.inc
+++ b/mysql-test/include/show_events.inc
@@ -88,6 +88,7 @@ let $script=
s{SQL_LOAD-[a-z,0-9,-]*.[a-z]*}{SQL_LOAD-<SERVER UUID>-<MASTER server-id>-<file-id>.<extension>};
s{rand_seed1=[0-9]*,rand_seed2=[0-9]*}{rand_seed1=<seed 1>,rand_seed2=<seed 2>};
s{((?:master|slave|slave-relay)-bin\.[0-9]{6};pos=)[0-9]+DOLLAR}{DOLLAR1POS};
+ s{SONAME ".*"}{SONAME "LIB"};
s{DOLLARmysqltest_vardir}{MYSQLTEST_VARDIR}g;
||
--let $pre_script= my DOLLARmysqltest_vardir = DOLLARENV{'MYSQLTEST_VARDIR'};
diff --git a/mysql-test/include/wait_innodb_all_purged.inc b/mysql-test/include/wait_innodb_all_purged.inc
new file mode 100644
index 00000000000..97b038acc44
--- /dev/null
+++ b/mysql-test/include/wait_innodb_all_purged.inc
@@ -0,0 +1,59 @@
+# include/wait_innodb_all_purged.inc
+#
+# SUMMARY
+#
+# Waits until purged all undo records of innodb, or operation times out.
+#
+# USAGE
+#
+# --source include/wait_innodb_all_purged.inc
+#
+--source include/have_innodb.inc
+--source include/have_debug.inc
+
+--disable_query_log
+
+let $wait_counter_init= 300;
+if ($wait_timeout)
+{
+ let $wait_counter_init= `SELECT $wait_timeout * 10`;
+}
+# Reset $wait_timeout so that its value won't be used on subsequent
+# calls, and default will be used instead.
+let $wait_timeout= 0;
+
+let $wait_counter= $wait_counter_init;
+
+# Keep track of how many times the wait condition is tested
+let $wait_condition_reps= 0;
+let $prev_trx_age= 0;
+while ($wait_counter)
+{
+ let $trx_age = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS
+WHERE VARIABLE_NAME = 'INNODB_PURGE_TRX_ID_AGE';`;
+
+ if ($trx_age != $prev_trx_age)
+ {
+ let $wait_counter= $wait_counter_init;
+ let $prev_trx_age= $trx_age;
+ }
+
+ let $success= `SELECT $trx_age < 1`;
+ inc $wait_condition_reps;
+ if ($success)
+ {
+ let $wait_counter= 0;
+ }
+ if (!$success)
+ {
+ set global innodb_purge_run_now=ON;
+ real_sleep 0.1;
+ dec $wait_counter;
+ }
+}
+if (!$success)
+{
+ echo Timeout in wait_innodb_all_purged.inc for INNODB_PURGE_TRX_ID_AGE = $trx_age;
+}
+
+--enable_query_log
diff --git a/mysql-test/lib/My/Platform.pm b/mysql-test/lib/My/Platform.pm
index 483bf0bd4f3..1776f1008da 100644
--- a/mysql-test/lib/My/Platform.pm
+++ b/mysql-test/lib/My/Platform.pm
@@ -110,6 +110,8 @@ sub check_socket_path_length {
# This may not be true, but we can't test for it on AIX due to Perl bug
# See Bug #45771
return 0 if ($^O eq 'aix');
+ # See Debian bug #670722 - failing on kFreeBSD even after setting short path
+ return 0 if $^O eq 'gnukfreebsd' and length $path < 40;
require IO::Socket::UNIX;
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index e9709d875e6..04f5ec4be8b 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -337,7 +337,7 @@ sub testcase_timeout ($) {
return $opt_testcase_timeout * 60;
}
-sub check_timeout ($) { return testcase_timeout($_[0]) / 10; }
+sub check_timeout ($) { return testcase_timeout($_[0]); }
our $opt_warnings= 1;
@@ -4402,6 +4402,8 @@ sub extract_warning_lines ($$) {
qr|Plugin 'FEEDBACK' registration as a INFORMATION SCHEMA failed|,
qr|'log-bin-use-v1-row-events' is MySQL 5.6 compatible option|,
qr|InnoDB: Setting thread \d+ nice to \d+ failed, current nice \d+, errno 13|, # setpriority() fails under valgrind
+ qr|Failed to setup SSL|,
+ qr|SSL error: Failed to set ciphers to use|,
);
my $matched_lines= [];
diff --git a/mysql-test/r/change_user_notembedded.result b/mysql-test/r/change_user_notembedded.result
index 60579d15ec2..896a6045481 100644
--- a/mysql-test/r/change_user_notembedded.result
+++ b/mysql-test/r/change_user_notembedded.result
@@ -3,3 +3,4 @@ ERROR 28000: Access denied for user 'foo'@'localhost' (using password: NO)
ERROR 28000: Access denied for user 'foo'@'localhost' (using password: YES)
ERROR 08S01: Unknown command
ERROR 08S01: Unknown command
+that's all
diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result
index 41a2200c13f..ec70dba674f 100644
--- a/mysql-test/r/create.result
+++ b/mysql-test/r/create.result
@@ -2609,5 +2609,52 @@ a b
1 1
unlock tables;
drop table t1,t2;
+#
+# MDEV-6179: dynamic columns functions/cast()/convert() doesn't
+# play nice with CREATE/ALTER TABLE
+#
+create table t1 (
+color char(32) as (COLUMN_GET(dynamic_cols, 1 as char)) persistent,
+cl char(32) as (COLUMN_GET(COLUMN_ADD(COLUMN_CREATE(1 , 'blue' as char), 2, 'ttt'), i as char)) persistent,
+item_name varchar(32) primary key, -- A common attribute for all items
+i int,
+dynamic_cols blob -- Dynamic columns will be stored here
+);
+INSERT INTO t1(item_name, dynamic_cols, i) VALUES
+('MariaDB T-shirt', COLUMN_CREATE(1, 'blue', 2, 'XL'), 1);
+INSERT INTO t1(item_name, dynamic_cols, i) VALUES
+('Thinkpad Laptop', COLUMN_CREATE(1, 'black', 3, 500), 2);
+select item_name, color, cl from t1;
+item_name color cl
+MariaDB T-shirt blue blue
+Thinkpad Laptop black ttt
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `color` char(32) AS (COLUMN_GET(dynamic_cols, 1 as char)) PERSISTENT,
+ `cl` char(32) AS (COLUMN_GET(COLUMN_ADD(COLUMN_CREATE(1 , 'blue' as char), 2, 'ttt'), i as char)) PERSISTENT,
+ `item_name` varchar(32) NOT NULL,
+ `i` int(11) DEFAULT NULL,
+ `dynamic_cols` blob,
+ PRIMARY KEY (`item_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (
+n int,
+c char(32) as (convert(cast(n as char), char)) persistent
+);
+insert into t1(n) values (1),(2),(3);
+select * from t1;
+n c
+1 1
+2 2
+3 3
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `n` int(11) DEFAULT NULL,
+ `c` char(32) AS (convert(cast(n as char), char)) PERSISTENT
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
create table t1;
ERROR 42000: A table must have at least 1 column
diff --git a/mysql-test/r/ctype_binary.result b/mysql-test/r/ctype_binary.result
index bea35217d12..e9a1fb1bc2c 100644
--- a/mysql-test/r/ctype_binary.result
+++ b/mysql-test/r/ctype_binary.result
@@ -2915,3 +2915,98 @@ SET sql_mode=default;
#
# End of 5.5 tests
#
+#
+# Start of 10.0 tests
+#
+SET NAMES binary;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varbinary(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varbinary(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varbinary(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where 0
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varbinary(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ('%' = concat(`test`.`t1`.`c1`))
+DROP TABLE t1;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/ctype_cp932.result b/mysql-test/r/ctype_cp932.result
new file mode 100644
index 00000000000..4b170ee4c9b
--- /dev/null
+++ b/mysql-test/r/ctype_cp932.result
@@ -0,0 +1,35 @@
+#
+# Bug #11755818 LIKE DOESN'T MATCH WHEN CP932_BIN/SJIS_BIN COLLATIONS ARE
+# USED.
+#
+SET @old_character_set_client= @@character_set_client;
+SET @old_character_set_connection= @@character_set_connection;
+SET @old_character_set_results= @@character_set_results;
+SET character_set_client= 'utf8';
+SET character_set_connection= 'utf8';
+SET character_set_results= 'utf8';
+CREATE TABLE t1 (a VARCHAR(10) COLLATE cp932_bin);
+INSERT INTO t1 VALUES('カカ');
+SELECT * FROM t1 WHERE a LIKE '%カ';
+a
+カカ
+SELECT * FROM t1 WHERE a LIKE '_カ';
+a
+カカ
+SELECT * FROM t1 WHERE a LIKE '%_カ';
+a
+カカ
+ALTER TABLE t1 MODIFY a VARCHAR(100) COLLATE sjis_bin;
+SELECT * FROM t1 WHERE a LIKE '%カ';
+a
+カカ
+SELECT * FROM t1 WHERE a LIKE '_カ';
+a
+カカ
+SELECT * FROM t1 WHERE a LIKE '%_カ';
+a
+カカ
+DROP TABLE t1;
+SET @@character_set_client= @old_character_set_client;
+SET @@character_set_connection= @old_character_set_connection;
+SET @@character_set_results= @old_character_set_results;
diff --git a/mysql-test/r/ctype_latin1.result b/mysql-test/r/ctype_latin1.result
index 8949cc51139..32afceb37e0 100644
--- a/mysql-test/r/ctype_latin1.result
+++ b/mysql-test/r/ctype_latin1.result
@@ -7659,6 +7659,198 @@ DROP FUNCTION mysql_real_escape_string_generated;
DROP FUNCTION iswellformed;
DROP TABLE allbytes;
# End of ctype_backslash.inc
+SET NAMES latin1;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+SET NAMES latin1 COLLATE latin1_bin;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
#
# MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
#
diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result
index c947689ef81..94db9d8f783 100644
--- a/mysql-test/r/ctype_uca.result
+++ b/mysql-test/r/ctype_uca.result
@@ -7700,6 +7700,276 @@ DROP TABLE t1;
# Start of MariaDB-10.0 tests
#
+SET NAMES utf8 COLLATE utf8_unicode_ci;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('ae'),('ä');
+SELECT * FROM t1 WHERE c1='ä';
+c1
+ä
+SELECT * FROM t1 WHERE c1 LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
+SELECT * FROM t1 WHERE CONCAT(c1)='ä';
+c1
+ä
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
+DROP TABLE IF EXISTS t1;
+SET NAMES utf8 COLLATE utf8_german2_ci;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_german2_ci NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('ae'),('ä');
+SELECT * FROM t1 WHERE c1='ä';
+c1
+ae
+ä
+SELECT * FROM t1 WHERE c1 LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+c1
+ae
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
+SELECT * FROM t1 WHERE CONCAT(c1)='ä';
+c1
+ae
+ä
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+c1
+ae
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
+DROP TABLE IF EXISTS t1;
#
# MDEV-4929 Myanmar collation
#
diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result
index a3a6e4b40b9..3250d3cb838 100644
--- a/mysql-test/r/ctype_ucs.result
+++ b/mysql-test/r/ctype_ucs.result
@@ -5326,6 +5326,199 @@ DROP TABLE t1;
#
# Start of 10.0 tests
#
+SET NAMES latin1, collation_connection=ucs2_bin;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+SET NAMES latin1, collation_connection=ucs2_general_ci;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET ucs2 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+SET NAMES latin1;
#
# MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
#
diff --git a/mysql-test/r/ctype_ucs2_def.result b/mysql-test/r/ctype_ucs2_def.result
index af69a9e77d6..5ca7d1689d2 100644
--- a/mysql-test/r/ctype_ucs2_def.result
+++ b/mysql-test/r/ctype_ucs2_def.result
@@ -1,3 +1,4 @@
+call mtr.add_suppression("Cannot use ucs2 as character_set_client");
show variables like 'collation_server';
Variable_name Value
collation_server ucs2_unicode_ci
diff --git a/mysql-test/r/ctype_ucs2_query_cache.result b/mysql-test/r/ctype_ucs2_query_cache.result
index 6f26bed02da..9a7580324c1 100644
--- a/mysql-test/r/ctype_ucs2_query_cache.result
+++ b/mysql-test/r/ctype_ucs2_query_cache.result
@@ -1,3 +1,4 @@
+call mtr.add_suppression("Cannot use ucs2 as character_set_client");
#
# Start of 5.5 tests
#
diff --git a/mysql-test/r/ctype_upgrade.result b/mysql-test/r/ctype_upgrade.result
index 825ad8dac21..56e2ef96ead 100644
--- a/mysql-test/r/ctype_upgrade.result
+++ b/mysql-test/r/ctype_upgrade.result
@@ -227,7 +227,7 @@ DROP TABLE mysql050614_xxx_croatian_ci;
# Checking mysql_upgrade
#
# Running mysql_upgrade
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -258,9 +258,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -279,10 +279,11 @@ test.maria050313_ucs2_croatian_ci_def OK
test.maria050313_utf8_croatian_ci OK
test.maria050533_xxx_croatian_ci OK
test.maria100004_xxx_croatian_ci OK
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
# Running mysql_upgrade for the second time
# This should report OK for all tables
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -313,9 +314,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -328,6 +329,7 @@ test.maria050313_utf8_croatian_ci OK
test.maria050533_xxx_croatian_ci OK
test.maria100004_xxx_croatian_ci OK
test.mysql050614_xxx_croatian_ci OK
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def;
Table Create Table
diff --git a/mysql-test/r/ctype_utf16.result b/mysql-test/r/ctype_utf16.result
index 074fc28a6b7..2d91ce3dd6f 100644
--- a/mysql-test/r/ctype_utf16.result
+++ b/mysql-test/r/ctype_utf16.result
@@ -1573,6 +1573,13 @@ a 512
Warnings:
Warning 1260 Row 1 was cut by GROUP_CONCAT()
#
+# MDEV-6865 Merge Bug#18935421 RPAD DIES WITH CERTAIN PADSTR INTPUTS..
+#
+DO RPAD(_utf16 0x0061 COLLATE utf16_unicode_ci, 10000, 0x0061DE989999);
+ERROR HY000: Invalid utf16 character string: 'DE9899'
+DO LPAD(_utf16 0x0061 COLLATE utf16_unicode_ci, 10000, 0x0061DE989999);
+ERROR HY000: Invalid utf16 character string: 'DE9899'
+#
# End of 5.5 tests
#
#
diff --git a/mysql-test/r/ctype_utf16_def.result b/mysql-test/r/ctype_utf16_def.result
index 6514734cb38..9d3d110fc99 100644
--- a/mysql-test/r/ctype_utf16_def.result
+++ b/mysql-test/r/ctype_utf16_def.result
@@ -1,3 +1,4 @@
+call mtr.add_suppression("Cannot use utf16 as character_set_client");
SHOW VARIABLES LIKE 'collation_server';
Variable_name Value
collation_server utf16_general_ci
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 86f86c5016f..db0c45e369c 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -5936,6 +5936,235 @@ set max_sort_length=default;
#
# Start of 10.0 tests
#
+SET NAMES utf8 COLLATE utf8_bin;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+SET NAMES utf8;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE CONCAT(c1)='a';
+c1
+a
+a
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'a ';
+c1
+a
+SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='a' AND CONCAT(c1) LIKE 'a ';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'a') and (concat(`test`.`t1`.`c1`) like 'a '))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('a'),('a ');
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1);
+c1
+a
+a
+SELECT * FROM t1 WHERE 'a ' LIKE CONCAT(c1);
+c1
+a
+SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+c1
+a
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE 'a'=CONCAT(c1) AND 'a ' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('a' = concat(`test`.`t1`.`c1`)) and ('a ' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '% '=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '% '=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('% ' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+CREATE TABLE t1 AS SELECT REPEAT('a', 10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('%'),('% ');
+SELECT * FROM t1 WHERE '%'=CONCAT(c1);
+c1
+%
+%
+SELECT * FROM t1 WHERE 'a' LIKE CONCAT(c1);
+c1
+%
+SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+c1
+%
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE '%'=CONCAT(c1) AND 'a' LIKE CONCAT(c1);
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where (('%' = concat(`test`.`t1`.`c1`)) and ('a' like concat(`test`.`t1`.`c1`)))
+DROP TABLE t1;
+#
+# MDEV-7149 Constant condition propagation erroneously applied for LIKE
+#
+CREATE TABLE t1 AS SELECT REPEAT('a',10) AS c1 LIMIT 0;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` varchar(10) CHARACTER SET utf8 NOT NULL DEFAULT ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 VALUES ('ae'),('ä');
+SELECT * FROM t1 WHERE c1='ä';
+c1
+ä
+SELECT * FROM t1 WHERE c1 LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1='ä' AND c1 LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((`test`.`t1`.`c1` = 'ä') and (`test`.`t1`.`c1` like 'ae'))
+SELECT * FROM t1 WHERE CONCAT(c1)='ä';
+c1
+ä
+SELECT * FROM t1 WHERE CONCAT(c1) LIKE 'ae';
+c1
+ae
+SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+c1
+EXPLAIN EXTENDED SELECT * FROM t1 WHERE CONCAT(c1)='ä' AND CONCAT(c1) LIKE 'ae';
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select `test`.`t1`.`c1` AS `c1` from `test`.`t1` where ((concat(`test`.`t1`.`c1`) = 'ä') and (concat(`test`.`t1`.`c1`) like 'ae'))
+DROP TABLE IF EXISTS t1;
#
# MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
#
diff --git a/mysql-test/r/derived_opt.result b/mysql-test/r/derived_opt.result
index f5e7393591c..a2e08eacebc 100644
--- a/mysql-test/r/derived_opt.result
+++ b/mysql-test/r/derived_opt.result
@@ -1,4 +1,5 @@
-drop table if exists t1,t2,t3;
+drop table if exists t0,t1,t2,t3;
+drop database if exists test1;
set @exit_optimizer_switch=@@optimizer_switch;
set optimizer_switch='derived_merge=on,derived_with_keys=on';
set @save_optimizer_switch=@@optimizer_switch;
@@ -352,4 +353,155 @@ pk pk
72 72
80 80
drop table t1, t2, t3, t4;
+#
+# MDEV-6888: Query spends a long time in best_extension_by_limited_search with mrr enabled
+#
+create database test1;
+use test1;
+set @tmp_jcl= @@join_cache_level;
+set @tmp_os= @@optimizer_switch;
+set join_cache_level=8;
+set optimizer_switch='mrr=on,mrr_sort_keys=on';
+CREATE TABLE t0 (
+f1 bigint(20) DEFAULT NULL,
+f2 char(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+INSERT INTO t0 VALUES (NULL,'numeric column is NULL'),(0,NULL),(5,'five'),(1,'one'),(2,'two');
+CREATE TABLE t1 (
+f1 decimal(64,30) DEFAULT NULL,
+f2 varchar(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES
+(NULL,'numeric column is NULL'),
+(0.000000000000000000000000000000,NULL),
+(5.000000000000000000000000000000,'five'),
+(1.000000000000000000000000000000,'one'),
+(3.000000000000000000000000000000,'three');
+CREATE TABLE t2 (
+f1 double DEFAULT NULL,
+f2 varbinary(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+INSERT INTO t2 VALUES (NULL,'numeric column is NULL'),(0,NULL),(5,'five'),(2,'two'),(3,'three');
+create VIEW v0 AS select f1,f2 from t1 ;
+create VIEW v1 AS select tab1_v1.f1,tab1_v1.f2 from t1 tab1_v1 join v0 tab2 on tab1_v1.f1 = tab2.f1 and tab1_v1.f2 = tab2.f2;
+create VIEW v2 AS select tab1_v2.f1,tab1_v2.f2 from t2 tab1_v2 join v1 tab2 on tab1_v2.f1 = tab2.f1 and tab1_v2.f2 = tab2.f2;
+create VIEW v3 AS select tab1_v3.f1,tab1_v3.f2 from t0 tab1_v3 join v2 tab2 on tab1_v3.f1 = tab2.f1 and tab1_v3.f2 = tab2.f2;
+create VIEW v4 AS select tab1_v4.f1,tab1_v4.f2 from t1 tab1_v4 join v3 tab2 on tab1_v4.f1 = tab2.f1 and tab1_v4.f2 = tab2.f2;
+create VIEW v5 AS select tab1_v5.f1,tab1_v5.f2 from t2 tab1_v5 join v4 tab2 on tab1_v5.f1 = tab2.f1 and tab1_v5.f2 = tab2.f2;
+create VIEW v6 AS select tab1_v6.f1,tab1_v6.f2 from t0 tab1_v6 join v5 tab2 on tab1_v6.f1 = tab2.f1 and tab1_v6.f2 = tab2.f2;
+create VIEW v7 AS select tab1_v7.f1,tab1_v7.f2 from t1 tab1_v7 join v6 tab2 on tab1_v7.f1 = tab2.f1 and tab1_v7.f2 = tab2.f2;
+create VIEW v8 AS select tab1_v8.f1,tab1_v8.f2 from t2 tab1_v8 join v7 tab2 on tab1_v8.f1 = tab2.f1 and tab1_v8.f2 = tab2.f2;
+create VIEW v9 AS select tab1_v9.f1,tab1_v9.f2 from t0 tab1_v9 join v8 tab2 on tab1_v9.f1 = tab2.f1 and tab1_v9.f2 = tab2.f2;
+create VIEW v10 AS select tab1_v10.f1,tab1_v10.f2 from t1 tab1_v10 join v9 tab2 on tab1_v10.f1 = tab2.f1 and tab1_v10.f2 = tab2.f2;
+create VIEW v11 AS select tab1_v11.f1,tab1_v11.f2 from t2 tab1_v11 join v10 tab2 on tab1_v11.f1 = tab2.f1 and tab1_v11.f2 = tab2.f2;
+create VIEW v12 AS select tab1_v12.f1,tab1_v12.f2 from t0 tab1_v12 join v11 tab2 on tab1_v12.f1 = tab2.f1 and tab1_v12.f2 = tab2.f2;
+create VIEW v13 AS select tab1_v13.f1,tab1_v13.f2 from t1 tab1_v13 join v12 tab2 on tab1_v13.f1 = tab2.f1 and tab1_v13.f2 = tab2.f2;
+create VIEW v14 AS select tab1_v14.f1,tab1_v14.f2 from t2 tab1_v14 join v13 tab2 on tab1_v14.f1 = tab2.f1 and tab1_v14.f2 = tab2.f2;
+create VIEW v15 AS select tab1_v15.f1,tab1_v15.f2 from t0 tab1_v15 join v14 tab2 on tab1_v15.f1 = tab2.f1 and tab1_v15.f2 = tab2.f2;
+create VIEW v16 AS select tab1_v16.f1,tab1_v16.f2 from t1 tab1_v16 join v15 tab2 on tab1_v16.f1 = tab2.f1 and tab1_v16.f2 = tab2.f2;
+create VIEW v17 AS select tab1_v17.f1,tab1_v17.f2 from t2 tab1_v17 join v16 tab2 on tab1_v17.f1 = tab2.f1 and tab1_v17.f2 = tab2.f2;
+create VIEW v18 AS select tab1_v18.f1,tab1_v18.f2 from t0 tab1_v18 join v17 tab2 on tab1_v18.f1 = tab2.f1 and tab1_v18.f2 = tab2.f2;
+create VIEW v19 AS select tab1_v19.f1,tab1_v19.f2 from t1 tab1_v19 join v18 tab2 on tab1_v19.f1 = tab2.f1 and tab1_v19.f2 = tab2.f2;
+create VIEW v20 AS select tab1_v20.f1,tab1_v20.f2 from t2 tab1_v20 join v19 tab2 on tab1_v20.f1 = tab2.f1 and tab1_v20.f2 = tab2.f2;
+create VIEW v21 AS select tab1_v21.f1,tab1_v21.f2 from t0 tab1_v21 join v20 tab2 on tab1_v21.f1 = tab2.f1 and tab1_v21.f2 = tab2.f2;
+create VIEW v22 AS select tab1_v22.f1,tab1_v22.f2 from t1 tab1_v22 join v21 tab2 on tab1_v22.f1 = tab2.f1 and tab1_v22.f2 = tab2.f2;
+create VIEW v23 AS select tab1_v23.f1,tab1_v23.f2 from t2 tab1_v23 join v22 tab2 on tab1_v23.f1 = tab2.f1 and tab1_v23.f2 = tab2.f2;
+create VIEW v24 AS select tab1_v24.f1,tab1_v24.f2 from t0 tab1_v24 join v23 tab2 on tab1_v24.f1 = tab2.f1 and tab1_v24.f2 = tab2.f2;
+create VIEW v25 AS select tab1_v25.f1,tab1_v25.f2 from t1 tab1_v25 join v24 tab2 on tab1_v25.f1 = tab2.f1 and tab1_v25.f2 = tab2.f2;
+create VIEW v26 AS select tab1_v26.f1,tab1_v26.f2 from t2 tab1_v26 join v25 tab2 on tab1_v26.f1 = tab2.f1 and tab1_v26.f2 = tab2.f2;
+create VIEW v27 AS select tab1_v27.f1,tab1_v27.f2 from t0 tab1_v27 join v26 tab2 on tab1_v27.f1 = tab2.f1 and tab1_v27.f2 = tab2.f2;
+EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, CAST(f2 AS CHAR) AS f2 FROM v27;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab1_v27 ALL NULL NULL NULL NULL 5 Using where
+1 SIMPLE tab1_v26 hash_ALL NULL #hash#$hj 63 test1.tab1_v27.f1,test1.tab1_v27.f2 5 Using where; Using join buffer (flat, BNLH join)
+1 SIMPLE tab1_v25 hash_ALL NULL #hash#$hj 31 test1.tab1_v26.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v24 hash_ALL NULL #hash#$hj 60 test1.tab1_v25.f1,test1.tab1_v25.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v23 hash_ALL NULL #hash#$hj 63 test1.tab1_v24.f1,test1.tab1_v24.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v22 hash_ALL NULL #hash#$hj 31 test1.tab1_v23.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v21 hash_ALL NULL #hash#$hj 60 test1.tab1_v22.f1,test1.tab1_v22.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v20 hash_ALL NULL #hash#$hj 63 test1.tab1_v21.f1,test1.tab1_v21.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v19 hash_ALL NULL #hash#$hj 31 test1.tab1_v20.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v18 hash_ALL NULL #hash#$hj 60 test1.tab1_v19.f1,test1.tab1_v19.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v17 hash_ALL NULL #hash#$hj 63 test1.tab1_v18.f1,test1.tab1_v18.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v16 hash_ALL NULL #hash#$hj 31 test1.tab1_v17.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v15 hash_ALL NULL #hash#$hj 60 test1.tab1_v16.f1,test1.tab1_v16.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v14 hash_ALL NULL #hash#$hj 63 test1.tab1_v15.f1,test1.tab1_v15.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v13 hash_ALL NULL #hash#$hj 31 test1.tab1_v14.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v12 hash_ALL NULL #hash#$hj 60 test1.tab1_v13.f1,test1.tab1_v13.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v11 hash_ALL NULL #hash#$hj 63 test1.tab1_v12.f1,test1.tab1_v12.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v10 hash_ALL NULL #hash#$hj 31 test1.tab1_v11.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v9 hash_ALL NULL #hash#$hj 60 test1.tab1_v10.f1,test1.tab1_v10.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v8 hash_ALL NULL #hash#$hj 63 test1.tab1_v9.f1,test1.tab1_v9.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v7 hash_ALL NULL #hash#$hj 31 test1.tab1_v8.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v6 hash_ALL NULL #hash#$hj 60 test1.tab1_v7.f1,test1.tab1_v7.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v5 hash_ALL NULL #hash#$hj 63 test1.tab1_v6.f1,test1.tab1_v6.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v4 hash_ALL NULL #hash#$hj 31 test1.tab1_v5.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v3 hash_ALL NULL #hash#$hj 60 test1.tab1_v4.f1,test1.tab1_v4.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v2 hash_ALL NULL #hash#$hj 63 test1.tab1_v3.f1,test1.tab1_v3.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v1 hash_ALL NULL #hash#$hj 31 test1.tab1_v2.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE t1 hash_ALL NULL #hash#$hj 85 test1.tab1_v1.f1,test1.tab1_v1.f2 5 Using where; Using join buffer (incremental, BNLH join)
+# This used to hang forever:
+EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, CAST(f2 AS CHAR) AS f2 FROM v27;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE tab1_v27 ALL NULL NULL NULL NULL 5 Using where
+1 SIMPLE tab1_v26 hash_ALL NULL #hash#$hj 63 test1.tab1_v27.f1,test1.tab1_v27.f2 5 Using where; Using join buffer (flat, BNLH join)
+1 SIMPLE tab1_v25 hash_ALL NULL #hash#$hj 31 test1.tab1_v26.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v24 hash_ALL NULL #hash#$hj 60 test1.tab1_v25.f1,test1.tab1_v25.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v23 hash_ALL NULL #hash#$hj 63 test1.tab1_v24.f1,test1.tab1_v24.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v22 hash_ALL NULL #hash#$hj 31 test1.tab1_v23.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v21 hash_ALL NULL #hash#$hj 60 test1.tab1_v22.f1,test1.tab1_v22.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v20 hash_ALL NULL #hash#$hj 63 test1.tab1_v21.f1,test1.tab1_v21.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v19 hash_ALL NULL #hash#$hj 31 test1.tab1_v20.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v18 hash_ALL NULL #hash#$hj 60 test1.tab1_v19.f1,test1.tab1_v19.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v17 hash_ALL NULL #hash#$hj 63 test1.tab1_v18.f1,test1.tab1_v18.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v16 hash_ALL NULL #hash#$hj 31 test1.tab1_v17.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v15 hash_ALL NULL #hash#$hj 60 test1.tab1_v16.f1,test1.tab1_v16.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v14 hash_ALL NULL #hash#$hj 63 test1.tab1_v15.f1,test1.tab1_v15.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v13 hash_ALL NULL #hash#$hj 31 test1.tab1_v14.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v12 hash_ALL NULL #hash#$hj 60 test1.tab1_v13.f1,test1.tab1_v13.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v11 hash_ALL NULL #hash#$hj 63 test1.tab1_v12.f1,test1.tab1_v12.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v10 hash_ALL NULL #hash#$hj 31 test1.tab1_v11.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v9 hash_ALL NULL #hash#$hj 60 test1.tab1_v10.f1,test1.tab1_v10.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v8 hash_ALL NULL #hash#$hj 63 test1.tab1_v9.f1,test1.tab1_v9.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v7 hash_ALL NULL #hash#$hj 31 test1.tab1_v8.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v6 hash_ALL NULL #hash#$hj 60 test1.tab1_v7.f1,test1.tab1_v7.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v5 hash_ALL NULL #hash#$hj 63 test1.tab1_v6.f1,test1.tab1_v6.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v4 hash_ALL NULL #hash#$hj 31 test1.tab1_v5.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v3 hash_ALL NULL #hash#$hj 60 test1.tab1_v4.f1,test1.tab1_v4.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v2 hash_ALL NULL #hash#$hj 63 test1.tab1_v3.f1,test1.tab1_v3.f2 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE tab1_v1 hash_ALL NULL #hash#$hj 31 test1.tab1_v2.f1 5 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE t1 hash_ALL NULL #hash#$hj 85 test1.tab1_v1.f1,test1.tab1_v1.f2 5 Using where; Using join buffer (incremental, BNLH join)
+use test;
+drop database test1;
+set join_cache_level=@tmp_jcl;
+set optimizer_switch=@tmp_os;
+#
+# MDEV-6879: Dereference of NULL primary_file->table in DsMrr_impl::get_disk_sweep_mrr_cost()
+#
+create table t1(a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t2 (a int, b int, c text);
+insert into t2
+select
+A.a + B.a* 10,
+A.a + B.a* 10,
+'blob-data'
+from t1 A, t1 B;
+set @tmp_jcl= @@join_cache_level;
+set @tmp_os= @@optimizer_switch;
+set join_cache_level=6;
+set @@optimizer_switch='derived_merge=on,derived_with_keys=on,mrr=on';
+explain
+select * from
+t1 join
+(select * from t2 order by a limit 1000) as D1
+where
+D1.a= t1.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using where
+1 PRIMARY <derived2> hash_ALL key0 #hash#key0 5 test.t1.a 100 Using join buffer (flat, BNLH join)
+2 DERIVED t2 ALL NULL NULL NULL NULL 100 Using filesort
+set join_cache_level=@tmp_jcl;
+set optimizer_switch=@tmp_os;
+drop table t1, t2;
set optimizer_switch=@exit_optimizer_switch;
diff --git a/mysql-test/r/dyncol.result b/mysql-test/r/dyncol.result
index 4753728793a..cc4e8074395 100644
--- a/mysql-test/r/dyncol.result
+++ b/mysql-test/r/dyncol.result
@@ -1777,5 +1777,27 @@ group_concat(cast(column_json(dyn) as char))
{"name1":"value1","name2":"value2"}
drop table t1;
#
+# MDEV-7116: Dynamic column hangs/segfaults
+#
+create table t1 (
+impressions mediumblob
+);
+insert into t1 values ("");
+update t1
+set impressions = column_add(impressions,
+'total', 12,
+'2014-10-28 16:00:00', 3,
+'2014-10-30 15:00:00', 3,
+'2014-11-04 09:00:00', 6
+);
+update t1
+set impressions = column_add(impressions,
+'total', "a12",
+'2014-10-28 16:00:00', "a3",
+'2014-10-30 15:00:00', "a3",
+'2014-11-04 09:00:00', "a6"
+ );
+drop table t1;
+#
# end of 10.0 tests
#
diff --git a/mysql-test/r/ext_key_noPK_6794.result b/mysql-test/r/ext_key_noPK_6794.result
new file mode 100644
index 00000000000..59344522887
--- /dev/null
+++ b/mysql-test/r/ext_key_noPK_6794.result
@@ -0,0 +1,20 @@
+create table t1 (c1 int not null, c2 int, unique index(c1), index (c2)) engine=innodb;
+insert into t1 (c1, c2) select 1, round(rand()*100);
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+select count(*) from t1;
+count(*)
+8
+explain select * from t1 where c2 = 1 order by c1;
+id 1
+select_type SIMPLE
+table t1
+type ref
+possible_keys c2
+key c2
+key_len 5
+ref const
+rows 1
+Extra Using where; Using index
+drop table t1;
diff --git a/mysql-test/r/func_compress.result b/mysql-test/r/func_compress.result
index 22b75de8c60..9fde006b377 100644
--- a/mysql-test/r/func_compress.result
+++ b/mysql-test/r/func_compress.result
@@ -147,3 +147,11 @@ DROP TABLE t1;
#
# End of 5.3 tests
#
+SELECT UNCOMPRESS(CAST(0 AS BINARY(5)));
+UNCOMPRESS(CAST(0 AS BINARY(5)))
+NULL
+Warnings:
+Warning 1259 ZLIB: Input data corrupted
+#
+# End of 5.5 tests
+#
diff --git a/mysql-test/r/func_regexp_pcre.result b/mysql-test/r/func_regexp_pcre.result
index b777af767cb..641c4fddbf7 100644
--- a/mysql-test/r/func_regexp_pcre.result
+++ b/mysql-test/r/func_regexp_pcre.result
@@ -839,3 +839,9 @@ SELECT REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2');
REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2')
/abc
SET default_regex_flags=DEFAULT;
+#
+# MDEV-6965 non-captured group \2 in regexp_replace
+#
+SELECT REGEXP_REPLACE('1 foo and bar', '(\\d+) foo and (\\d+ )?bar', '\\1 this and \\2that');
+REGEXP_REPLACE('1 foo and bar', '(\\d+) foo and (\\d+ )?bar', '\\1 this and \\2that')
+1 this and that
diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result
index 2c1c416472f..97ef61047a5 100644
--- a/mysql-test/r/func_test.result
+++ b/mysql-test/r/func_test.result
@@ -320,3 +320,20 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
Warnings:
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (not((`test`.`t1`.`a` + 0)))
drop table t1;
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
+#
+SELECT NOT NOT strcmp('a','b');
+NOT NOT strcmp('a','b')
+1
+EXPLAIN EXTENDED SELECT NOT NOT strcmp('a','b');
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select (strcmp('a','b') <> 0) AS `NOT NOT strcmp('a','b')`
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/function_defaults.result b/mysql-test/r/function_defaults.result
index 27b9ee0a323..50183a1f416 100644
--- a/mysql-test/r/function_defaults.result
+++ b/mysql-test/r/function_defaults.result
@@ -435,18 +435,31 @@ SELECT * FROM t1;
a b c
2011-04-20 09:53:41 2011-04-20 09:53:41 2
#
+# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
+#
+# 2011-04-20 09:54:13 UTC
+SET TIMESTAMP = 1303293253.794613;
+UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 2011-04-20 09:53:41 2
+UPDATE t1 SET c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13 2011-04-20 09:54:13 3
+#
# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
#
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.534231;
-UPDATE t1 t11, t1 t12 SET t11.c = 2;
+UPDATE t1 t11, t1 t12 SET t11.c = 3;
SELECT * FROM t1;
a b c
-2011-04-20 09:53:41 2011-04-20 09:53:41 2
-UPDATE t1 t11, t1 t12 SET t11.c = 3;
+2011-04-20 09:54:13 2011-04-20 09:54:13 3
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
-2011-04-20 15:06:13 2011-04-20 15:06:13 3
+2011-04-20 15:06:13 2011-04-20 15:06:13 2
DROP TABLE t1;
#
# Test of a multiple-table update where only one table is updated and
@@ -1421,13 +1434,13 @@ drop table t1;
SET TIME_ZONE = "+03:00";
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.123456;
-CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE = INNODB;
+CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-) ENGINE=InnoDB DEFAULT CHARSET=latin1
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
@@ -1477,9 +1490,9 @@ a INT,
b INT,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ( a, ts )
-) ENGINE = INNODB;
+);
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
-CREATE TABLE t2 ( a INT ) ENGINE = INNODB;
+CREATE TABLE t2 ( a INT );
INSERT INTO t2 VALUES ( 1 );
UPDATE t1 STRAIGHT_JOIN t2
SET t1.b = t1.b + 1
@@ -1508,8 +1521,19 @@ ALTER TABLE t1 ADD COLUMN c4 DATETIME ON UPDATE NOW() AFTER c3;
ALTER TABLE t1 ADD COLUMN c5 DATETIME DEFAULT NOW() AFTER c4;
ALTER TABLE t1 ADD COLUMN c6 DATETIME DEFAULT NOW() ON UPDATE NOW() AFTER c5;
SELECT * FROM t1;
-a1 a2 a3 a4 a5 a6 b c1 c2 c3 c4 c5 c6
-0000-00-00 00:00:00 1970-01-01 03:16:40 1970-01-01 03:16:40 NULL 1970-01-01 03:16:40 1970-01-01 03:16:40 1 0000-00-00 00:00:00 1970-01-01 03:16:40 1970-01-01 03:16:40 NULL 1970-01-01 03:16:40 1970-01-01 03:16:40
+a1 0000-00-00 00:00:00
+a2 1970-01-01 03:16:40
+a3 1970-01-01 03:16:40
+a4 NULL
+a5 1970-01-01 03:16:40
+a6 1970-01-01 03:16:40
+b 1
+c1 0000-00-00 00:00:00
+c2 1970-01-01 03:16:40
+c3 1970-01-01 03:16:40
+c4 NULL
+c5 1970-01-01 03:16:40
+c6 1970-01-01 03:16:40
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b DATETIME DEFAULT NOW() );
INSERT INTO t1 VALUES ();
@@ -1967,18 +1991,31 @@ SELECT * FROM t1;
a b c
2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
#
+# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
+#
+# 2011-04-20 09:54:13 UTC
+SET TIMESTAMP = 1303293253.794613;
+UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
+UPDATE t1 SET c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
+#
# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
#
# 2011-04-20 15:06:13 UTC
SET TIMESTAMP = 1303311973.534231;
-UPDATE t1 t11, t1 t12 SET t11.c = 2;
+UPDATE t1 t11, t1 t12 SET t11.c = 3;
SELECT * FROM t1;
a b c
-2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
-UPDATE t1 t11, t1 t12 SET t11.c = 3;
+2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
SELECT * FROM t1;
a b c
-2011-04-20 15:06:13.534231 2011-04-20 15:06:13.534231 3
+2011-04-20 15:06:13.534231 2011-04-20 15:06:13.534231 2
DROP TABLE t1;
#
# Test of a multiple-table update where only one table is updated and
@@ -2953,13 +2990,13 @@ drop table t1;
SET TIME_ZONE = "+03:00";
# 1970-01-01 03:16:40
SET TIMESTAMP = 1000.123456;
-CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)) ENGINE = INNODB;
+CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 ( a ) VALUES ( 1 );
SELECT * FROM t1;
a b
@@ -3009,9 +3046,9 @@ a INT,
b INT,
ts TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
PRIMARY KEY ( a, ts )
-) ENGINE = INNODB;
+);
INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
-CREATE TABLE t2 ( a INT ) ENGINE = INNODB;
+CREATE TABLE t2 ( a INT );
INSERT INTO t2 VALUES ( 1 );
UPDATE t1 STRAIGHT_JOIN t2
SET t1.b = t1.b + 1
@@ -3040,8 +3077,19 @@ ALTER TABLE t1 ADD COLUMN c4 DATETIME(6) ON UPDATE NOW(6) AFTER c3;
ALTER TABLE t1 ADD COLUMN c5 DATETIME(6) DEFAULT NOW(6) AFTER c4;
ALTER TABLE t1 ADD COLUMN c6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c5;
SELECT * FROM t1;
-a1 a2 a3 a4 a5 a6 b c1 c2 c3 c4 c5 c6
-0000-00-00 00:00:00.000000 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 NULL 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 1 0000-00-00 00:00:00.000000 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000 NULL 1970-01-01 03:16:40.000000 1970-01-01 03:16:40.000000
+a1 0000-00-00 00:00:00.000000
+a2 1970-01-01 03:16:40.000000
+a3 1970-01-01 03:16:40.000000
+a4 NULL
+a5 1970-01-01 03:16:40.000000
+a6 1970-01-01 03:16:40.000000
+b 1
+c1 0000-00-00 00:00:00.000000
+c2 1970-01-01 03:16:40.000000
+c3 1970-01-01 03:16:40.000000
+c4 NULL
+c5 1970-01-01 03:16:40.000000
+c6 1970-01-01 03:16:40.000000
DROP TABLE t1;
CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b DATETIME(6) DEFAULT NOW(6) );
INSERT INTO t1 VALUES ();
diff --git a/mysql-test/r/function_defaults_innodb.result b/mysql-test/r/function_defaults_innodb.result
new file mode 100644
index 00000000000..302d4c85e05
--- /dev/null
+++ b/mysql-test/r/function_defaults_innodb.result
@@ -0,0 +1,3116 @@
+#
+# Test of function defaults for any server, including embedded.
+#
+set default_storage_engine=innodb;
+#
+# Function defaults run 1. No microsecond precision.
+#
+SET TIME_ZONE = "+00:00";
+#
+# Test of errors for column data types that dont support function
+# defaults.
+#
+CREATE TABLE t1( a BIT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a TINYINT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a SMALLINT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a MEDIUMINT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a INT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a BIGINT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a FLOAT DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a DECIMAL DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a DATE DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a TIME DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a YEAR DEFAULT CURRENT_TIMESTAMP );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a BIT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+#
+# Test that the default clause behaves like NOW() regarding time zones.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NULL,
+e DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+f DATETIME DEFAULT CURRENT_TIMESTAMP,
+g DATETIME ON UPDATE CURRENT_TIMESTAMP,
+h DATETIME
+);
+# 2011-09-27 14:11:08 UTC
+SET TIMESTAMP = 1317132668.654321;
+SET @old_time_zone = @@TIME_ZONE;
+SET TIME_ZONE = "+05:00";
+INSERT INTO t1( d, h ) VALUES ( NOW(), NOW() );
+SELECT * FROM t1;
+a b c d e f g h
+2011-09-27 19:11:08 2011-09-27 19:11:08 0000-00-00 00:00:00 2011-09-27 19:11:08 2011-09-27 19:11:08 2011-09-27 19:11:08 NULL 2011-09-27 19:11:08
+# 1989-05-13 01:02:03
+SET TIMESTAMP = 611017323.543212;
+UPDATE t1 SET d = NOW(), h = NOW();
+SELECT * FROM t1;
+a b c d e f g h
+1989-05-13 04:02:03 2011-09-27 19:11:08 1989-05-13 04:02:03 1989-05-13 04:02:03 1989-05-13 04:02:03 2011-09-27 19:11:08 1989-05-13 04:02:03 1989-05-13 04:02:03
+SET TIME_ZONE = @old_time_zone;
+DROP TABLE t1;
+#
+# Test of several TIMESTAMP columns with different function defaults.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+f INT
+);
+# 2011-04-19 07:22:02 UTC
+SET TIMESTAMP = 1303197722.534231;
+INSERT INTO t1 ( f ) VALUES (1);
+SELECT * FROM t1;
+a b c d e f
+2011-04-19 07:22:02 2011-04-19 07:22:02 2011-04-19 07:22:02 0000-00-00 00:00:00 0000-00-00 00:00:00 1
+# 2011-04-19 07:23:18 UTC
+SET TIMESTAMP = 1303197798.132435;
+UPDATE t1 SET f = 2;
+SELECT * FROM t1;
+a b c d e f
+2011-04-19 07:23:18 2011-04-19 07:23:18 2011-04-19 07:22:02 2011-04-19 07:23:18 2011-04-19 07:23:18 2
+DROP TABLE t1;
+#
+# Test of inserted values out of order.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NULL,
+f DATETIME,
+g DATETIME DEFAULT CURRENT_TIMESTAMP,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+j INT
+);
+# 2011-04-19 07:22:02 UTC
+SET TIMESTAMP = 1303197722.534231;
+INSERT INTO t1 ( j, a ) VALUES ( 1, 1 );
+SELECT * FROM t1;
+a b c d e f g h i j
+1 2011-04-19 07:22:02 2011-04-19 07:22:02 0000-00-00 00:00:00 NULL NULL 2011-04-19 07:22:02 NULL 2011-04-19 07:22:02 1
+DROP TABLE t1;
+#
+# Test of ON DUPLICATE KEY UPDATE
+#
+CREATE TABLE t1 (
+a INT PRIMARY KEY,
+b INT,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+e TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+f TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+g TIMESTAMP NULL,
+h DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME DEFAULT CURRENT_TIMESTAMP,
+j DATETIME ON UPDATE CURRENT_TIMESTAMP,
+k DATETIME NULL,
+l DATETIME DEFAULT '1986-09-27 03:00:00.098765'
+);
+# 1977-12-21 23:00:00 UTC
+SET TIMESTAMP = 251593200.192837;
+INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 NULL 1977-12-21 23:00:00 1977-12-21 23:00:00 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 1977-12-21 23:00:00 1977-12-21 23:00:00 NULL NULL 1986-09-27 03:00:00
+# 1975-05-21 23:00:00 UTC
+SET TIMESTAMP = 169945200.918273;
+INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 2 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 1986-09-27 03:00:00 NULL 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 NULL 1986-09-27 03:00:00
+# 1973-08-14 09:11:22 UTC
+SET TIMESTAMP = 114167482.534231;
+INSERT INTO t1(a) VALUES (2) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 2 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 1986-09-27 03:00:00 NULL 1975-05-21 23:00:00 1977-12-21 23:00:00 1975-05-21 23:00:00 NULL 1986-09-27 03:00:00
+2 NULL 1973-08-14 09:11:22 1973-08-14 09:11:22 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 1973-08-14 09:11:22 1973-08-14 09:11:22 NULL NULL 1986-09-27 03:00:00
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT PRIMARY KEY, b INT, c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
+# 2011-04-19 07:23:18 UTC
+SET TIMESTAMP = 1303197798.945156;
+INSERT INTO t1 VALUES
+(1, 0, '2001-01-01 01:01:01.111111'),
+(2, 0, '2002-02-02 02:02:02.222222'),
+(3, 0, '2003-03-03 03:03:03.333333');
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 0 2002-02-02 02:02:02
+3 0 2003-03-03 03:03:03
+UPDATE t1 SET b = 2, c = c WHERE a = 2;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 2 2002-02-02 02:02:02
+3 0 2003-03-03 03:03:03
+INSERT INTO t1 (a) VALUES (4);
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 2 2002-02-02 02:02:02
+3 0 2003-03-03 03:03:03
+4 NULL 2011-04-19 07:23:18
+UPDATE t1 SET c = '2004-04-04 04:04:04.444444' WHERE a = 4;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 2 2002-02-02 02:02:02
+3 0 2003-03-03 03:03:03
+4 NULL 2004-04-04 04:04:04
+INSERT INTO t1 ( a ) VALUES ( 3 ), ( 5 ) ON DUPLICATE KEY UPDATE b = 3, c = c;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 2 2002-02-02 02:02:02
+3 3 2003-03-03 03:03:03
+4 NULL 2004-04-04 04:04:04
+5 NULL 2011-04-19 07:23:18
+INSERT INTO t1 (a, c) VALUES
+(4, '2004-04-04 00:00:00.444444'),
+(6, '2006-06-06 06:06:06.666666')
+ON DUPLICATE KEY UPDATE b = 4;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01
+2 2 2002-02-02 02:02:02
+3 3 2003-03-03 03:03:03
+4 4 2011-04-19 07:23:18
+5 NULL 2011-04-19 07:23:18
+6 NULL 2006-06-06 06:06:06
+DROP TABLE t1;
+#
+# Test of REPLACE INTO executed as UPDATE.
+#
+CREATE TABLE t1 (
+a INT PRIMARY KEY,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+e DATETIME DEFAULT CURRENT_TIMESTAMP,
+f TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+g DATETIME ON UPDATE CURRENT_TIMESTAMP,
+h TIMESTAMP NULL,
+i DATETIME
+);
+# 1970-09-21 09:11:12 UTC
+SET TIMESTAMP = 22756272.163584;
+REPLACE INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1970-09-21 09:11:12 1970-09-21 09:11:12 1970-09-21 09:11:12 1970-09-21 09:11:12 0000-00-00 00:00:00 NULL NULL NULL
+# 1970-11-10 14:16:17 UTC
+SET TIMESTAMP = 27094577.852954;
+REPLACE INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1970-11-10 14:16:17 1970-11-10 14:16:17 1970-11-10 14:16:17 1970-11-10 14:16:17 0000-00-00 00:00:00 NULL NULL NULL
+DROP TABLE t1;
+#
+# Test of insertion of NULL, DEFAULT and an empty row for DEFAULT
+# CURRENT_TIMESTAMP.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME DEFAULT CURRENT_TIMESTAMP,
+c INT
+);
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.163578;
+INSERT INTO t1 VALUES (NULL, NULL, 1), (DEFAULT, DEFAULT, 2);
+INSERT INTO t1 ( a, b, c ) VALUES (NULL, NULL, 3), (DEFAULT, DEFAULT, 4);
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 NULL 1
+2011-04-20 09:53:41 2011-04-20 09:53:41 2
+2011-04-20 09:53:41 NULL 3
+2011-04-20 09:53:41 2011-04-20 09:53:41 4
+SET TIME_ZONE = "+03:00";
+SELECT * FROM t1;
+a b c
+2011-04-20 12:53:41 NULL 1
+2011-04-20 12:53:41 2011-04-20 09:53:41 2
+2011-04-20 12:53:41 NULL 3
+2011-04-20 12:53:41 2011-04-20 09:53:41 4
+SET TIME_ZONE = "+00:00";
+DROP TABLE t1;
+# 2011-04-20 07:05:39 UTC
+SET TIMESTAMP = 1303283139.195624;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT '2010-10-11 12:34:56' ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME DEFAULT '2010-10-11 12:34:56'
+);
+INSERT INTO t1 VALUES (NULL, NULL), (DEFAULT, DEFAULT);
+INSERT INTO t1 ( a, b ) VALUES (NULL, NULL), (DEFAULT, DEFAULT);
+SELECT * FROM t1;
+a b
+2011-04-20 07:05:39 NULL
+2010-10-11 12:34:56 2010-10-11 12:34:56
+2011-04-20 07:05:39 NULL
+2010-10-11 12:34:56 2010-10-11 12:34:56
+DROP TABLE t1;
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.136952;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+e TIMESTAMP NULL,
+f DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+g DATETIME DEFAULT CURRENT_TIMESTAMP,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME NULL,
+j DATETIME DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+INSERT INTO t1 SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL;
+SELECT * FROM t1;
+a b c d e f g h i j
+2011-04-20 09:53:41 2011-04-20 09:53:41 0000-00-00 00:00:00 1986-09-27 03:00:00 NULL 2011-04-20 09:53:41 2011-04-20 09:53:41 NULL NULL 1986-09-27 03:00:00
+2011-04-20 09:53:41 2011-04-20 09:53:41 2011-04-20 09:53:41 2011-04-20 09:53:41 NULL NULL NULL NULL NULL NULL
+DROP TABLE t1;
+#
+# Test of multiple-table UPDATE for DEFAULT CURRENT_TIMESTAMP
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME DEFAULT CURRENT_TIMESTAMP,
+c INT
+);
+INSERT INTO t1 ( c ) VALUES (1);
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 2011-04-20 09:53:41 1
+# 2011-04-20 17:06:13 UTC
+SET TIMESTAMP = 1303311973.163587;
+UPDATE t1 t11, t1 t12 SET t11.c = 1;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 2011-04-20 09:53:41 1
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 15:06:13 2011-04-20 09:53:41 2
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+c DATETIME DEFAULT CURRENT_TIMESTAMP,
+d DATETIME ON UPDATE CURRENT_TIMESTAMP,
+e INT
+);
+CREATE TABLE t2 (
+f INT,
+g DATETIME ON UPDATE CURRENT_TIMESTAMP,
+h DATETIME DEFAULT CURRENT_TIMESTAMP,
+i TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+j TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
+# 1995-03-11 00:02:03 UTC
+SET TIMESTAMP = 794880123.195676;
+INSERT INTO t1 ( e ) VALUES ( 1 ), ( 2 );
+INSERT INTO t2 ( f ) VALUES ( 1 ), ( 2 );
+SELECT * FROM t1;
+a b c d e
+1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03 NULL 1
+1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03 NULL 2
+SELECT * FROM t2;
+f g h i j
+1 NULL 1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03
+2 NULL 1995-03-11 00:02:03 0000-00-00 00:00:00 1995-03-11 00:02:03
+# 1980-12-13 02:02:01 UTC
+SET TIMESTAMP = 345520921.196755;
+UPDATE t1, t2 SET t1.e = 3, t2.f = 4;
+SELECT * FROM t1;
+a b c d e
+1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 3
+1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 3
+SELECT * FROM t2;
+f g h i j
+4 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03
+4 1980-12-13 02:02:01 1995-03-11 00:02:03 1980-12-13 02:02:01 1995-03-11 00:02:03
+DROP TABLE t1, t2;
+#
+# Test of multiple table update with temporary table and on the fly.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME ON UPDATE CURRENT_TIMESTAMP,
+c INT,
+d INT
+);
+CREATE TABLE t2 (
+a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME ON UPDATE CURRENT_TIMESTAMP,
+c INT KEY,
+d INT
+);
+INSERT INTO t1 ( c ) VALUES (1), (2);
+INSERT INTO t2 ( c ) VALUES (1), (2);
+# Test of multiple table update done on the fly
+# 2011-04-20 15:06:13 UTC
+SET TIMESTAMP = 1303311973.194685;
+UPDATE t1 JOIN t2 USING ( c ) SET t2.d = 1;
+SELECT * FROM t1;
+a b c d
+0000-00-00 00:00:00 NULL 1 NULL
+0000-00-00 00:00:00 NULL 2 NULL
+SELECT * FROM t2;
+a b c d
+2011-04-20 15:06:13 2011-04-20 15:06:13 1 1
+2011-04-20 15:06:13 2011-04-20 15:06:13 2 1
+# Test of multiple table update done with temporary table.
+# 1979-01-15 03:02:01
+SET TIMESTAMP = 285213721.134679;
+UPDATE t1 JOIN t2 USING ( c ) SET t1.d = 1;
+SELECT * FROM t1;
+a b c d
+1979-01-15 02:02:01 1979-01-15 02:02:01 1 1
+1979-01-15 02:02:01 1979-01-15 02:02:01 2 1
+SELECT * FROM t2;
+a b c d
+2011-04-20 15:06:13 2011-04-20 15:06:13 1 1
+2011-04-20 15:06:13 2011-04-20 15:06:13 2 1
+DROP TABLE t1, t2;
+#
+# Test of ON UPDATE CURRENT_TIMESTAMP.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME ON UPDATE CURRENT_TIMESTAMP,
+c INT
+);
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.794613;
+INSERT INTO t1 ( c ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c
+0000-00-00 00:00:00 NULL 1
+UPDATE t1 SET c = 1;
+SELECT * FROM t1;
+a b c
+0000-00-00 00:00:00 NULL 1
+UPDATE t1 SET c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 2011-04-20 09:53:41 2
+#
+# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
+#
+# 2011-04-20 09:54:13 UTC
+SET TIMESTAMP = 1303293253.794613;
+UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41 2011-04-20 09:53:41 2
+UPDATE t1 SET c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13 2011-04-20 09:54:13 3
+#
+# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
+#
+# 2011-04-20 15:06:13 UTC
+SET TIMESTAMP = 1303311973.534231;
+UPDATE t1 t11, t1 t12 SET t11.c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13 2011-04-20 09:54:13 3
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 15:06:13 2011-04-20 15:06:13 2
+DROP TABLE t1;
+#
+# Test of a multiple-table update where only one table is updated and
+# the updated table has a primary key.
+#
+CREATE TABLE t1 ( a INT, b INT, PRIMARY KEY (a) );
+INSERT INTO t1 VALUES (1, 1),(2, 2),(3, 3),(4, 4);
+CREATE TABLE t2 ( a INT, b INT );
+INSERT INTO t2 VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5);
+UPDATE t1, t2 SET t1.b = 100 WHERE t1.a = t2.a;
+SELECT * FROM t1;
+a b
+1 100
+2 100
+3 100
+4 100
+SELECT * FROM t2;
+a b
+1 1
+2 2
+3 3
+4 4
+5 5
+DROP TABLE t1, t2;
+#
+# Test of ALTER TABLE, reordering columns.
+#
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b INT );
+ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `a` int(11) DEFAULT NULL,
+ `c` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT, b TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp NULL DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp NULL DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(), b INT, c TIMESTAMP NULL );
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `b` int(11) DEFAULT NULL,
+ `c` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `c` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(), b INT, c TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY c TIMESTAMP NULL FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` timestamp NULL DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `b` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b INT, c TIMESTAMP NULL );
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `b` int(11) DEFAULT NULL,
+ `c` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+ALTER TABLE t1 MODIFY a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `c` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b INT, c TIMESTAMP NULL );
+ALTER TABLE t1 MODIFY c TIMESTAMP NULL FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` timestamp NULL DEFAULT NULL,
+ `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `b` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+#
+# Test of ALTER TABLE, adding columns.
+#
+CREATE TABLE t1 ( a INT );
+ALTER TABLE t1 ADD COLUMN b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+#
+# Test of INSERT SELECT.
+#
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+d DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+);
+CREATE TABLE t2 (
+placeholder1 INT,
+placeholder2 INT,
+placeholder3 INT,
+placeholder4 INT,
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
+c DATETIME,
+d DATETIME
+);
+# 1977-08-16 15:30:01 UTC
+SET TIMESTAMP = 240589801.654312;
+INSERT INTO t2 (a, b, c, d) VALUES (
+'1977-08-16 15:30:01.123456',
+'1977-08-16 15:30:01.234567',
+'1977-08-16 15:30:01.345678',
+'1977-08-16 15:30:01.456789'
+);
+# 1986-09-27 01:00:00 UTC
+SET TIMESTAMP = 528166800.132435;
+INSERT INTO t1 ( a, c ) SELECT a, c FROM t2;
+SELECT * FROM t1;
+a b c d
+1977-08-16 15:30:01 1986-09-27 01:00:00 1977-08-16 15:30:01 1986-09-27 01:00:00
+DROP TABLE t1, t2;
+#
+# Test of CREATE TABLE SELECT.
+#
+# We test that the columns of the source table are not used to determine
+# function defaults for the receiving table.
+#
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.657898;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+e TIMESTAMP NULL,
+f DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+g DATETIME DEFAULT CURRENT_TIMESTAMP,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME NULL,
+j DATETIME DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.164937;
+CREATE TABLE t2 SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t2;
+a
+1970-04-11 20:13:57
+CREATE TABLE t3 SELECT b FROM t1;
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t3;
+b
+1970-04-11 20:13:57
+CREATE TABLE t4 SELECT c FROM t1;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t4;
+c
+0000-00-00 00:00:00
+CREATE TABLE t5 SELECT d FROM t1;
+SHOW CREATE TABLE t5;
+Table Create Table
+t5 CREATE TABLE `t5` (
+ `d` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t5;
+d
+1986-09-27 03:00:00
+CREATE TABLE t6 SELECT e FROM t1;
+SHOW CREATE TABLE t6;
+Table Create Table
+t6 CREATE TABLE `t6` (
+ `e` timestamp NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t6;
+e
+NULL
+CREATE TABLE t7 SELECT f FROM t1;
+SHOW CREATE TABLE t7;
+Table Create Table
+t7 CREATE TABLE `t7` (
+ `f` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t7;
+f
+1970-04-11 20:13:57
+CREATE TABLE t8 SELECT g FROM t1;
+SHOW CREATE TABLE t8;
+Table Create Table
+t8 CREATE TABLE `t8` (
+ `g` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t8;
+g
+1970-04-11 20:13:57
+CREATE TABLE t9 SELECT h FROM t1;
+SHOW CREATE TABLE t9;
+Table Create Table
+t9 CREATE TABLE `t9` (
+ `h` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t9;
+h
+NULL
+CREATE TABLE t10 SELECT i FROM t1;
+SHOW CREATE TABLE t10;
+Table Create Table
+t10 CREATE TABLE `t10` (
+ `i` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t10;
+i
+NULL
+CREATE TABLE t11 SELECT j FROM t1;
+SHOW CREATE TABLE t11;
+Table Create Table
+t11 CREATE TABLE `t11` (
+ `j` datetime DEFAULT '1986-09-27 03:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t11;
+j
+1986-09-27 03:00:00
+CREATE TABLE t12 (
+k TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+l TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+m TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+n TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+o TIMESTAMP NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+p TIMESTAMP NULL,
+q DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+r DATETIME DEFAULT CURRENT_TIMESTAMP,
+s DATETIME ON UPDATE CURRENT_TIMESTAMP,
+t DATETIME NULL,
+u DATETIME DEFAULT '1986-09-27 03:00:00.098765'
+)
+SELECT * FROM t1;
+SHOW CREATE TABLE t12;
+Table Create Table
+t12 CREATE TABLE `t12` (
+ `k` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `l` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `m` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `n` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `o` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00',
+ `p` timestamp NULL DEFAULT NULL,
+ `q` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `r` datetime DEFAULT CURRENT_TIMESTAMP,
+ `s` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+ `t` datetime DEFAULT NULL,
+ `u` datetime DEFAULT '1986-09-27 03:00:00',
+ `a` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `b` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `c` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `d` timestamp NOT NULL DEFAULT '1986-09-27 03:00:00',
+ `e` timestamp NULL DEFAULT NULL,
+ `f` datetime DEFAULT NULL,
+ `g` datetime DEFAULT NULL,
+ `h` datetime DEFAULT NULL,
+ `i` datetime DEFAULT NULL,
+ `j` datetime DEFAULT '1986-09-27 03:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12;
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.164953;
+CREATE TABLE t1 (
+a DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME DEFAULT CURRENT_TIMESTAMP,
+c DATETIME ON UPDATE CURRENT_TIMESTAMP,
+d DATETIME NULL,
+e DATETIME DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+# 1971-01-31 20:13:57 UTC
+SET TIMESTAMP = 34200837.915736;
+CREATE TABLE t2 SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t2;
+a
+1970-04-11 20:13:57
+CREATE TABLE t3 SELECT b FROM t1;
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `b` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t3;
+b
+1970-04-11 20:13:57
+CREATE TABLE t4 SELECT c FROM t1;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t4;
+c
+NULL
+CREATE TABLE t5 SELECT d FROM t1;
+SHOW CREATE TABLE t5;
+Table Create Table
+t5 CREATE TABLE `t5` (
+ `d` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t5;
+d
+NULL
+CREATE TABLE t6 SELECT e FROM t1;
+SHOW CREATE TABLE t6;
+Table Create Table
+t6 CREATE TABLE `t6` (
+ `e` datetime DEFAULT '1986-09-27 03:00:00'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t6;
+e
+1986-09-27 03:00:00
+DROP TABLE t1, t2, t3, t4, t5, t6;
+#
+# Test of a CREATE TABLE SELECT that also declared columns. In this case
+# the function default should be de-activated during the execution of the
+# CREATE TABLE statement.
+#
+# 1970-01-01 03:16:40
+SET TIMESTAMP = 1000.987654;
+CREATE TABLE t1 ( a INT );
+INSERT INTO t1 VALUES ( 1 ), ( 2 );
+CREATE TABLE t2 ( b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SET TIMESTAMP = 2000.876543;
+INSERT INTO t2( a ) VALUES ( 3 );
+SELECT * FROM t2;
+b a
+0000-00-00 00:00:00 1
+0000-00-00 00:00:00 2
+1970-01-01 00:33:20 3
+DROP TABLE t1, t2;
+#
+# Test of updating a view.
+#
+CREATE TABLE t1 ( a INT, b DATETIME DEFAULT CURRENT_TIMESTAMP );
+CREATE TABLE t2 ( a INT, b DATETIME ON UPDATE CURRENT_TIMESTAMP );
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` latin1 latin1_swedish_ci
+CREATE VIEW v2 AS SELECT * FROM t2;
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` latin1 latin1_swedish_ci
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.348564;
+INSERT INTO v1 ( a ) VALUES ( 1 );
+INSERT INTO v2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b
+1 1971-01-31 20:13:57
+SELECT * FROM v1;
+a b
+1 1971-01-31 20:13:57
+SELECT * FROM t2;
+a b
+1 NULL
+SELECT * FROM v2;
+a b
+1 NULL
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.567332;
+UPDATE v1 SET a = 2;
+UPDATE v2 SET a = 2;
+SELECT * FROM t1;
+a b
+2 1971-01-31 20:13:57
+SELECT * FROM v1;
+a b
+2 1971-01-31 20:13:57
+SELECT * FROM t2;
+a b
+2 1970-04-11 20:13:57
+SELECT * FROM v2;
+a b
+2 1970-04-11 20:13:57
+DROP VIEW v1, v2;
+DROP TABLE t1, t2;
+#
+# Test with stored procedures.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NULL,
+f DATETIME DEFAULT CURRENT_TIMESTAMP,
+g DATETIME ON UPDATE CURRENT_TIMESTAMP
+);
+CREATE PROCEDURE p1() INSERT INTO test.t1( a ) VALUES ( 1 );
+CREATE PROCEDURE p2() UPDATE t1 SET a = 2 WHERE a = 1;
+# 1971-01-31 20:13:57 UTC
+SET TIMESTAMP = 34200837.876544;
+CALL p1();
+SELECT * FROM t1;
+a b c d e f g
+1 1971-01-31 20:13:57 1971-01-31 20:13:57 0000-00-00 00:00:00 NULL 1971-01-31 20:13:57 NULL
+# 1970-04-11 21:13:57 UTC
+SET TIMESTAMP = 8712837.143546;
+CALL p2();
+SELECT * FROM t1;
+a b c d e f g
+2 1970-04-11 20:13:57 1971-01-31 20:13:57 1970-04-11 20:13:57 NULL 1971-01-31 20:13:57 1970-04-11 20:13:57
+DROP PROCEDURE p1;
+DROP PROCEDURE p2;
+DROP TABLE t1;
+#
+# Test with triggers.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NULL,
+f DATETIME,
+g DATETIME DEFAULT CURRENT_TIMESTAMP,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+);
+CREATE TABLE t2 ( a INT );
+CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+INSERT INTO t1 ( a ) VALUES ( 1 );
+END|
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.978675;
+INSERT INTO t2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1971-01-31 20:13:57 1971-01-31 20:13:57 0000-00-00 00:00:00 NULL NULL 1971-01-31 20:13:57 NULL 1971-01-31 20:13:57
+DROP TRIGGER t2_trg;
+CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET a = 2;
+END|
+# 1970-04-11 21:13:57 UTC
+SET TIMESTAMP = 8712837.456789;
+INSERT INTO t2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+2 1970-04-11 20:13:57 1971-01-31 20:13:57 1970-04-11 20:13:57 NULL NULL 1971-01-31 20:13:57 1970-04-11 20:13:57 1970-04-11 20:13:57
+DROP TABLE t1, t2;
+#
+# Test where the assignment target is not a column.
+#
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
+CREATE TABLE t2 ( a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
+CREATE TABLE t3 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP );
+CREATE TABLE t4 ( a TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP );
+CREATE VIEW v1 AS SELECT a COLLATE latin1_german1_ci AS b FROM t1;
+CREATE VIEW v2 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t2;
+CREATE VIEW v3 AS SELECT a COLLATE latin1_german1_ci AS b FROM t3;
+CREATE VIEW v4 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t4;
+INSERT INTO v1 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
+SELECT a FROM t1;
+a
+2007-10-24 00:03:34
+INSERT INTO v2 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
+SELECT a FROM t2;
+a
+2007-10-24 00:03:34
+INSERT INTO t3 VALUES ();
+UPDATE v3 SET b = '2007-10-24 00:03:34.010203';
+SELECT a FROM t3;
+a
+2007-10-24 00:03:34
+INSERT INTO t4 VALUES ();
+UPDATE v4 SET b = '2007-10-24 00:03:34.010203';
+SELECT a FROM t4;
+a
+2007-10-24 00:03:34
+DROP VIEW v1, v2, v3, v4;
+DROP TABLE t1, t2, t3, t4;
+#
+# Test of LOAD DATA/XML INFILE
+# This tests behavior of function defaults for TIMESTAMP and DATETIME
+# columns. during LOAD ... INFILE.
+# As can be seen here, a TIMESTAMP column with only ON UPDATE
+# CURRENT_TIMESTAMP will still have CURRENT_TIMESTAMP inserted on LOAD
+# ... INFILE if the value is missing. For DATETIME columns a NULL value
+# is inserted instead.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+f DATETIME,
+g DATETIME DEFAULT CURRENT_TIMESTAMP,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP,
+i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+);
+CREATE TABLE t2 (
+a TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+c TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+d TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+e DATETIME NOT NULL,
+f DATETIME NOT NULL DEFAULT '1977-01-02 12:13:14',
+g DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
+h DATETIME ON UPDATE CURRENT_TIMESTAMP NOT NULL,
+i DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL
+);
+SELECT 1 INTO OUTFILE 't3.dat' FROM dual;
+SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+INTO OUTFILE 't4.dat'
+FROM dual;
+SELECT 1, 2 INTO OUTFILE 't5.dat' FROM dual;
+# Mon Aug 1 15:11:19 2011 UTC
+SET TIMESTAMP = 1312211479.918273;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT * FROM t1;
+a 1
+b 2011-08-01 15:11:19
+c 2011-08-01 15:11:19
+d 2011-08-01 15:11:19
+e 2011-08-01 15:11:19
+f NULL
+g NULL
+h NULL
+i NULL
+LOAD DATA INFILE 't4.dat' INTO TABLE t2;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'e' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'f' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'g' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'h' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT a FROM t2;
+a
+2011-08-01 15:11:19
+SELECT b FROM t2;
+b
+2011-08-01 15:11:19
+SELECT c FROM t2;
+c
+2011-08-01 15:11:19
+SELECT d FROM t2;
+d
+2011-08-01 15:11:19
+# As shown here, supplying a NULL value to a non-nullable
+# column with no default value results in the zero date.
+SELECT e FROM t2;
+e
+0000-00-00 00:00:00
+# As shown here, supplying a NULL value to a non-nullable column with a
+# default value results in the zero date.
+SELECT f FROM t2;
+f
+0000-00-00 00:00:00
+# As shown here, supplying a NULL value to a non-nullable column with a
+# default function results in the zero date.
+SELECT g FROM t2;
+g
+0000-00-00 00:00:00
+# As shown here, supplying a NULL value to a non-nullable DATETIME ON
+# UPDATE CURRENT_TIMESTAMP column with no default value results in the
+# zero date.
+SELECT h FROM t2;
+h
+0000-00-00 00:00:00
+SELECT i FROM t2;
+i
+0000-00-00 00:00:00
+DELETE FROM t1;
+DELETE FROM t2;
+# Read t3 file into t1
+# The syntax will cause a different code path to be taken
+# (read_fixed_length()) than under the LOAD ... INTO TABLE t1 command
+# above. The code in this path is copy-pasted code from the path taken
+# under the syntax used in the previous LOAD command.
+LOAD DATA INFILE 't3.dat' INTO TABLE t1
+FIELDS TERMINATED BY '' ENCLOSED BY '';
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT b FROM t1;
+b
+2011-08-01 15:11:19
+SELECT c FROM t1;
+c
+2011-08-01 15:11:19
+SELECT d FROM t1;
+d
+2011-08-01 15:11:19
+SELECT e FROM t1;
+e
+2011-08-01 15:11:19
+# Yes, a missing field cannot be NULL using this syntax, so it will
+# zero date instead. Says a comment in read_fixed_length() : "No fields
+# specified in fields_vars list can be NULL in this format."
+# It appears to be by design. This is inconsistent with LOAD DATA INFILE
+# syntax in previous test.
+SELECT f FROM t1;
+f
+0000-00-00 00:00:00
+SELECT g FROM t1;
+g
+0000-00-00 00:00:00
+# See comment above "SELECT f FROM f1".
+SELECT h FROM t1;
+h
+0000-00-00 00:00:00
+SELECT i FROM t1;
+i
+0000-00-00 00:00:00
+DELETE FROM t1;
+LOAD DATA INFILE 't5.dat' INTO TABLE t1 ( a, @dummy );
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19 2011-08-01 15:11:19 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19
+SELECT @dummy;
+@dummy
+2
+DELETE FROM t1;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET c = '2005-06-06 08:09:10';
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19 2005-06-06 08:09:10 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19 NULL 2011-08-01 15:11:19
+DELETE FROM t1;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET g = '2005-06-06 08:09:10';
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19 2011-08-01 15:11:19 0000-00-00 00:00:00 2011-08-01 15:11:19 NULL 2005-06-06 08:09:10 NULL 2011-08-01 15:11:19
+DELETE FROM t1;
+# Load a static XML file
+LOAD XML INFILE '../../std_data/onerow.xml' INTO TABLE t1
+ROWS IDENTIFIED BY '<row>';
+Missing tags are treated as NULL
+SELECT * FROM t1;
+a 1
+b 2011-08-01 15:11:19
+c 2011-08-01 15:11:19
+d 2011-08-01 15:11:19
+e 2011-08-01 15:11:19
+f NULL
+g NULL
+h NULL
+i NULL
+DROP TABLE t1, t2;
+#
+# Similar LOAD DATA tests in another form
+#
+# All of this test portion has been run on a pre-WL5874 trunk
+# (except that like_b and like_c didn't exist) and all result
+# differences are a bug.
+# Regarding like_b its definition is the same as b's except
+# that the constant default is replaced with a function
+# default. Our expectation is that like_b would behave
+# like b: if b is set to NULL, or set to 0000-00-00, or set to
+# its default, then the same should apply to like_b. Same for
+# like_c vs c.
+# Mon Aug 1 15:11:19 2011 UTC
+SET TIMESTAMP = 1312211479.089786;
+SELECT 1 INTO OUTFILE "file1.dat" FROM dual;
+SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+INTO OUTFILE "file2.dat" FROM dual;
+# Too short row
+CREATE TABLE t1 (
+dummy INT,
+a DATETIME NULL DEFAULT NULL,
+b DATETIME NULL DEFAULT "2011-11-18",
+like_b DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
+c DATETIME NOT NULL DEFAULT "2011-11-18",
+like_c DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NOT NULL DEFAULT "2011-05-03",
+f TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+g TIMESTAMP NULL DEFAULT NULL,
+h INT NULL,
+i INT NOT NULL DEFAULT 42
+);
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime DEFAULT NULL,
+ `b` datetime DEFAULT '2011-11-18 00:00:00',
+ `like_b` datetime DEFAULT CURRENT_TIMESTAMP,
+ `c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
+ `like_c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
+ `f` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file1.dat" INTO table t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+# It is strange that "like_b" gets NULL when "b" gets 0. But
+# this is consistent with how "a" gets NULL when "b" gets 0,
+# with how "g" gets NULL when "d" gets 0, and with how "h" gets
+# NULL when "i" gets 0. Looks like "DEFAULT
+# <non-NULL-constant>" is changed to 0, whereas DEFAULT NULL
+# and DEFAULT NOW are changed to NULL.
+SELECT * FROM t1;
+dummy 1
+a NULL
+b 0000-00-00 00:00:00
+like_b NULL
+c 0000-00-00 00:00:00
+like_c 0000-00-00 00:00:00
+d 0000-00-00 00:00:00
+e 2011-08-01 15:11:19
+f 2011-08-01 15:11:19
+g NULL
+h NULL
+i 0
+delete from t1;
+alter table t1
+modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime DEFAULT NULL,
+ `b` datetime DEFAULT '2011-11-18 00:00:00',
+ `like_b` datetime DEFAULT CURRENT_TIMESTAMP,
+ `c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
+ `like_c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
+ `f` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file1.dat" INTO table t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT * FROM t1;
+dummy 1
+a NULL
+b 0000-00-00 00:00:00
+like_b NULL
+c 0000-00-00 00:00:00
+like_c 0000-00-00 00:00:00
+d 0000-00-00 00:00:00
+e 2011-08-01 15:11:19
+f NULL
+g NULL
+h NULL
+i 0
+delete from t1;
+drop table t1;
+# Conclusion derived from trunk's results:
+# DATETIME DEFAULT <non-NULL-constant> (b,c) gets 0000-00-00,
+# DATETIME DEFAULT NULL (a) gets NULL,
+# TIMESTAMP NULL DEFAULT <non-NULL-constant> (d) gets 0000-00-00,
+# TIMESTAMP NULL DEFAULT NULL (g) gets NULL,
+# TIMESTAMP NULL DEFAULT NOW (f after ALTER) gets NULL,
+# TIMESTAMP NOT NULL (f before ALTER, e) gets NOW.
+### Loading NULL ###
+CREATE TABLE t1 (
+dummy INT,
+a DATETIME NULL DEFAULT NULL,
+b DATETIME NULL DEFAULT "2011-11-18",
+like_b DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
+c DATETIME NOT NULL DEFAULT "2011-11-18",
+like_c DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+d TIMESTAMP NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP,
+e TIMESTAMP NOT NULL DEFAULT "2011-05-03",
+f TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+g TIMESTAMP NULL DEFAULT NULL,
+h INT NULL,
+i INT NOT NULL DEFAULT 42
+);
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime DEFAULT NULL,
+ `b` datetime DEFAULT '2011-11-18 00:00:00',
+ `like_b` datetime DEFAULT CURRENT_TIMESTAMP,
+ `c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
+ `like_c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
+ `f` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file2.dat" INTO table t1;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT * FROM t1;
+dummy NULL
+a NULL
+b NULL
+like_b NULL
+c 0000-00-00 00:00:00
+like_c 0000-00-00 00:00:00
+d NULL
+e 2011-08-01 15:11:19
+f 2011-08-01 15:11:19
+g NULL
+h NULL
+i 0
+delete from t1;
+alter table t1
+modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime DEFAULT NULL,
+ `b` datetime DEFAULT '2011-11-18 00:00:00',
+ `like_b` datetime DEFAULT CURRENT_TIMESTAMP,
+ `c` datetime NOT NULL DEFAULT '2011-11-18 00:00:00',
+ `like_c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `d` timestamp NULL DEFAULT '2011-05-03 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+ `e` timestamp NOT NULL DEFAULT '2011-05-03 00:00:00',
+ `f` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file2.dat" INTO table t1;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT * FROM t1;
+dummy NULL
+a NULL
+b NULL
+like_b NULL
+c 0000-00-00 00:00:00
+like_c 0000-00-00 00:00:00
+d NULL
+e 2011-08-01 15:11:19
+f NULL
+g NULL
+h NULL
+i 0
+delete from t1;
+# Conclusion derived from trunk's results:
+# DATETIME NULL (a,b) gets NULL,
+# DATETIME NOT NULL (c) gets 0000-00-00,
+# TIMESTAMP NULL (d,f,g) gets NULL,
+# TIMESTAMP NOT NULL (e) gets NOW.
+drop table t1;
+#
+# Test of updatable views with check options. The option can be violated
+# using ON UPDATE updates which is very strange as this offers a loophole
+# in this integrity check.
+#
+SET TIME_ZONE = "+03:00";
+# 1970-01-01 03:16:40
+SET TIMESTAMP = 1000.123456;
+CREATE TABLE t1 ( a INT, b TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+INSERT INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b
+1 1970-01-01 03:16:40
+CREATE VIEW v1 AS SELECT * FROM t1 WHERE b <= '1970-01-01 03:16:40.123456'
+WITH CHECK OPTION;
+SELECT * FROM v1;
+a b
+1 1970-01-01 03:16:40
+# 1970-01-01 03:33:20
+SET TIMESTAMP = 2000.000234;
+UPDATE v1 SET a = 2;
+ERROR HY000: CHECK OPTION failed 'test.v1'
+SELECT * FROM t1;
+a b
+1 1970-01-01 03:16:40
+DROP VIEW v1;
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT '1973-08-14 09:11:22.089786' ON UPDATE CURRENT_TIMESTAMP,
+c INT KEY
+);
+# 1973-08-14 09:11:22 UTC
+SET TIMESTAMP = 114167482.534231;
+INSERT INTO t1 ( c ) VALUES ( 1 );
+CREATE VIEW v1 AS
+SELECT *
+FROM t1
+WHERE a >= '1973-08-14 09:11:22'
+WITH LOCAL CHECK OPTION;
+SELECT * FROM v1;
+a c
+1973-08-14 09:11:22 1
+SET TIMESTAMP = 1.126789;
+INSERT INTO v1 ( c ) VALUES ( 1 ) ON DUPLICATE KEY UPDATE c = 2;
+ERROR HY000: CHECK OPTION failed 'test.v1'
+SELECT * FROM v1;
+a c
+1973-08-14 09:11:22 1
+DROP VIEW v1;
+DROP TABLE t1;
+#
+# Bug 13095459 - MULTI-TABLE UPDATE MODIFIES A ROW TWICE
+#
+CREATE TABLE t1 (
+a INT,
+b INT,
+ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+PRIMARY KEY ( a, ts )
+);
+INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
+CREATE TABLE t2 ( a INT );
+INSERT INTO t2 VALUES ( 1 );
+UPDATE t1 STRAIGHT_JOIN t2
+SET t1.b = t1.b + 1
+WHERE t1.a = 1 AND t1.ts >= '2000-09-28 00:00:00';
+SELECT b FROM t1;
+b
+1
+DROP TABLE t1, t2;
+#
+# Bug#11745578: 17392: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT
+# CURRENT_TIMESTAMP INSERTS ZERO
+#
+SET timestamp = 1000;
+CREATE TABLE t1 ( b INT );
+INSERT INTO t1 VALUES (1);
+ALTER TABLE t1 ADD COLUMN a6 DATETIME DEFAULT NOW() ON UPDATE NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN a5 DATETIME DEFAULT NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN a4 DATETIME ON UPDATE NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN a3 TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN a2 TIMESTAMP NOT NULL DEFAULT NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN a1 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW() FIRST;
+ALTER TABLE t1 ADD COLUMN c1 TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW() AFTER b;
+ALTER TABLE t1 ADD COLUMN c2 TIMESTAMP NOT NULL DEFAULT NOW() AFTER c1;
+ALTER TABLE t1 ADD COLUMN c3 TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() AFTER c2;
+ALTER TABLE t1 ADD COLUMN c4 DATETIME ON UPDATE NOW() AFTER c3;
+ALTER TABLE t1 ADD COLUMN c5 DATETIME DEFAULT NOW() AFTER c4;
+ALTER TABLE t1 ADD COLUMN c6 DATETIME DEFAULT NOW() ON UPDATE NOW() AFTER c5;
+SELECT * FROM t1;
+a1 0000-00-00 00:00:00
+a2 1970-01-01 03:16:40
+a3 1970-01-01 03:16:40
+a4 NULL
+a5 1970-01-01 03:16:40
+a6 1970-01-01 03:16:40
+b 1
+c1 0000-00-00 00:00:00
+c2 1970-01-01 03:16:40
+c3 1970-01-01 03:16:40
+c4 NULL
+c5 1970-01-01 03:16:40
+c6 1970-01-01 03:16:40
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP, b DATETIME DEFAULT NOW() );
+INSERT INTO t1 VALUES ();
+SET timestamp = 1000000000;
+ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3);
+ALTER TABLE t1 MODIFY COLUMN b DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3);
+SELECT * FROM t1;
+a b
+1970-01-01 03:16:40.000 1970-01-01 03:16:40.000
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP NOT NULL DEFAULT '1999-12-01 11:22:33' ON UPDATE CURRENT_TIMESTAMP,
+b DATETIME DEFAULT '1999-12-01 11:22:33'
+);
+INSERT INTO t1 VALUES ();
+ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP DEFAULT NOW();
+ALTER TABLE t1 MODIFY COLUMN b DATETIME DEFAULT NOW();
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+a b
+1999-12-01 11:22:33 1999-12-01 11:22:33
+2001-09-09 04:46:40 2001-09-09 04:46:40
+DROP TABLE t1;
+#
+# Function defaults run 2. Six digits scale on seconds precision.
+#
+SET TIME_ZONE = "+00:00";
+#
+# Test of errors for column data types that dont support function
+# defaults.
+#
+CREATE TABLE t1( a BIT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a TINYINT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a SMALLINT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a MEDIUMINT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a INT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a BIGINT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a FLOAT DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a DECIMAL DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a DATE DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a TIME DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a YEAR DEFAULT CURRENT_TIMESTAMP(6) );
+ERROR 42000: Invalid default value for 'a'
+CREATE TABLE t1( a BIT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a TINYINT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a SMALLINT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a MEDIUMINT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a INT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a BIGINT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a FLOAT ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a DECIMAL ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a DATE ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a TIME ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+CREATE TABLE t1( a YEAR ON UPDATE CURRENT_TIMESTAMP(6) );
+ERROR HY000: Invalid ON UPDATE clause for 'a' column
+#
+# Test that the default clause behaves like NOW() regarding time zones.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NULL,
+e DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+h DATETIME(6)
+);
+# 2011-09-27 14:11:08 UTC
+SET TIMESTAMP = 1317132668.654321;
+SET @old_time_zone = @@TIME_ZONE;
+SET TIME_ZONE = "+05:00";
+INSERT INTO t1( d, h ) VALUES ( NOW(6), NOW(6) );
+SELECT * FROM t1;
+a b c d e f g h
+2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 0000-00-00 00:00:00.000000 2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 2011-09-27 19:11:08.654321 NULL 2011-09-27 19:11:08.654321
+# 1989-05-13 01:02:03
+SET TIMESTAMP = 611017323.543212;
+UPDATE t1 SET d = NOW(6), h = NOW(6);
+SELECT * FROM t1;
+a b c d e f g h
+1989-05-13 04:02:03.543212 2011-09-27 19:11:08.654321 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212 2011-09-27 19:11:08.654321 1989-05-13 04:02:03.543212 1989-05-13 04:02:03.543212
+SET TIME_ZONE = @old_time_zone;
+DROP TABLE t1;
+#
+# Test of several TIMESTAMP columns with different function defaults.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+f INT
+);
+# 2011-04-19 07:22:02 UTC
+SET TIMESTAMP = 1303197722.534231;
+INSERT INTO t1 ( f ) VALUES (1);
+SELECT * FROM t1;
+a b c d e f
+2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 0000-00-00 00:00:00.000000 0000-00-00 00:00:00.000000 1
+# 2011-04-19 07:23:18 UTC
+SET TIMESTAMP = 1303197798.132435;
+UPDATE t1 SET f = 2;
+SELECT * FROM t1;
+a b c d e f
+2011-04-19 07:23:18.132435 2011-04-19 07:23:18.132435 2011-04-19 07:22:02.534231 2011-04-19 07:23:18.132435 2011-04-19 07:23:18.132435 2
+DROP TABLE t1;
+#
+# Test of inserted values out of order.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NULL,
+f DATETIME(6),
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+j INT
+);
+# 2011-04-19 07:22:02 UTC
+SET TIMESTAMP = 1303197722.534231;
+INSERT INTO t1 ( j, a ) VALUES ( 1, 1 );
+SELECT * FROM t1;
+a b c d e f g h i j
+1 2011-04-19 07:22:02.534231 2011-04-19 07:22:02.534231 0000-00-00 00:00:00.000000 NULL NULL 2011-04-19 07:22:02.534231 NULL 2011-04-19 07:22:02.534231 1
+DROP TABLE t1;
+#
+# Test of ON DUPLICATE KEY UPDATE
+#
+CREATE TABLE t1 (
+a INT PRIMARY KEY,
+b INT,
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+f TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+g TIMESTAMP(6) NULL,
+h DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+j DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+k DATETIME(6) NULL,
+l DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
+);
+# 1977-12-21 23:00:00 UTC
+SET TIMESTAMP = 251593200.192837;
+INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 NULL 1977-12-21 23:00:00.192837 1977-12-21 23:00:00.192837 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 1977-12-21 23:00:00.192837 1977-12-21 23:00:00.192837 NULL NULL 1986-09-27 03:00:00.098765
+# 1975-05-21 23:00:00 UTC
+SET TIMESTAMP = 169945200.918273;
+INSERT INTO t1(a) VALUES (1) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 2 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 1986-09-27 03:00:00.098765 NULL 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 NULL 1986-09-27 03:00:00.098765
+# 1973-08-14 09:11:22 UTC
+SET TIMESTAMP = 114167482.534231;
+INSERT INTO t1(a) VALUES (2) ON DUPLICATE KEY UPDATE b = 2;
+SELECT * FROM t1;
+a b c d e f g h i j k l
+1 2 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 1986-09-27 03:00:00.098765 NULL 1975-05-21 23:00:00.918273 1977-12-21 23:00:00.192837 1975-05-21 23:00:00.918273 NULL 1986-09-27 03:00:00.098765
+2 NULL 1973-08-14 09:11:22.534231 1973-08-14 09:11:22.534231 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 1973-08-14 09:11:22.534231 1973-08-14 09:11:22.534231 NULL NULL 1986-09-27 03:00:00.098765
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT PRIMARY KEY, b INT, c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
+# 2011-04-19 07:23:18 UTC
+SET TIMESTAMP = 1303197798.945156;
+INSERT INTO t1 VALUES
+(1, 0, '2001-01-01 01:01:01.111111'),
+(2, 0, '2002-02-02 02:02:02.222222'),
+(3, 0, '2003-03-03 03:03:03.333333');
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 0 2002-02-02 02:02:02.222222
+3 0 2003-03-03 03:03:03.333333
+UPDATE t1 SET b = 2, c = c WHERE a = 2;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 2 2002-02-02 02:02:02.222222
+3 0 2003-03-03 03:03:03.333333
+INSERT INTO t1 (a) VALUES (4);
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 2 2002-02-02 02:02:02.222222
+3 0 2003-03-03 03:03:03.333333
+4 NULL 2011-04-19 07:23:18.945156
+UPDATE t1 SET c = '2004-04-04 04:04:04.444444' WHERE a = 4;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 2 2002-02-02 02:02:02.222222
+3 0 2003-03-03 03:03:03.333333
+4 NULL 2004-04-04 04:04:04.444444
+INSERT INTO t1 ( a ) VALUES ( 3 ), ( 5 ) ON DUPLICATE KEY UPDATE b = 3, c = c;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 2 2002-02-02 02:02:02.222222
+3 3 2003-03-03 03:03:03.333333
+4 NULL 2004-04-04 04:04:04.444444
+5 NULL 2011-04-19 07:23:18.945156
+INSERT INTO t1 (a, c) VALUES
+(4, '2004-04-04 00:00:00.444444'),
+(6, '2006-06-06 06:06:06.666666')
+ON DUPLICATE KEY UPDATE b = 4;
+SELECT * FROM t1;
+a b c
+1 0 2001-01-01 01:01:01.111111
+2 2 2002-02-02 02:02:02.222222
+3 3 2003-03-03 03:03:03.333333
+4 4 2011-04-19 07:23:18.945156
+5 NULL 2011-04-19 07:23:18.945156
+6 NULL 2006-06-06 06:06:06.666666
+DROP TABLE t1;
+#
+# Test of REPLACE INTO executed as UPDATE.
+#
+CREATE TABLE t1 (
+a INT PRIMARY KEY,
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+e DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+f TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+h TIMESTAMP(6) NULL,
+i DATETIME(6)
+);
+# 1970-09-21 09:11:12 UTC
+SET TIMESTAMP = 22756272.163584;
+REPLACE INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 1970-09-21 09:11:12.163584 0000-00-00 00:00:00.000000 NULL NULL NULL
+# 1970-11-10 14:16:17 UTC
+SET TIMESTAMP = 27094577.852954;
+REPLACE INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 1970-11-10 14:16:17.852954 0000-00-00 00:00:00.000000 NULL NULL NULL
+DROP TABLE t1;
+#
+# Test of insertion of NULL, DEFAULT and an empty row for DEFAULT
+# CURRENT_TIMESTAMP.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+c INT
+);
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.163578;
+INSERT INTO t1 VALUES (NULL, NULL, 1), (DEFAULT, DEFAULT, 2);
+INSERT INTO t1 ( a, b, c ) VALUES (NULL, NULL, 3), (DEFAULT, DEFAULT, 4);
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.163578 NULL 1
+2011-04-20 09:53:41.163578 2011-04-20 09:53:41.163578 2
+2011-04-20 09:53:41.163578 NULL 3
+2011-04-20 09:53:41.163578 2011-04-20 09:53:41.163578 4
+SET TIME_ZONE = "+03:00";
+SELECT * FROM t1;
+a b c
+2011-04-20 12:53:41.163578 NULL 1
+2011-04-20 12:53:41.163578 2011-04-20 09:53:41.163578 2
+2011-04-20 12:53:41.163578 NULL 3
+2011-04-20 12:53:41.163578 2011-04-20 09:53:41.163578 4
+SET TIME_ZONE = "+00:00";
+DROP TABLE t1;
+# 2011-04-20 07:05:39 UTC
+SET TIMESTAMP = 1303283139.195624;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT '2010-10-11 12:34:56' ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) DEFAULT '2010-10-11 12:34:56'
+);
+INSERT INTO t1 VALUES (NULL, NULL), (DEFAULT, DEFAULT);
+INSERT INTO t1 ( a, b ) VALUES (NULL, NULL), (DEFAULT, DEFAULT);
+SELECT * FROM t1;
+a b
+2011-04-20 07:05:39.195624 NULL
+2010-10-11 12:34:56.000000 2010-10-11 12:34:56.000000
+2011-04-20 07:05:39.195624 NULL
+2010-10-11 12:34:56.000000 2010-10-11 12:34:56.000000
+DROP TABLE t1;
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.136952;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+e TIMESTAMP(6) NULL,
+f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) NULL,
+j DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+INSERT INTO t1 SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL;
+SELECT * FROM t1;
+a b c d e f g h i j
+2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 0000-00-00 00:00:00.000000 1986-09-27 03:00:00.098765 NULL 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 NULL NULL 1986-09-27 03:00:00.098765
+2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 NULL NULL NULL NULL NULL NULL
+DROP TABLE t1;
+#
+# Test of multiple-table UPDATE for DEFAULT CURRENT_TIMESTAMP
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+c INT
+);
+INSERT INTO t1 ( c ) VALUES (1);
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 1
+# 2011-04-20 17:06:13 UTC
+SET TIMESTAMP = 1303311973.163587;
+UPDATE t1 t11, t1 t12 SET t11.c = 1;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.136952 2011-04-20 09:53:41.136952 1
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 15:06:13.163587 2011-04-20 09:53:41.136952 2
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+d DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+e INT
+);
+CREATE TABLE t2 (
+f INT,
+g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+h DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+i TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+j TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
+);
+# 1995-03-11 00:02:03 UTC
+SET TIMESTAMP = 794880123.195676;
+INSERT INTO t1 ( e ) VALUES ( 1 ), ( 2 );
+INSERT INTO t2 ( f ) VALUES ( 1 ), ( 2 );
+SELECT * FROM t1;
+a b c d e
+1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676 NULL 1
+1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676 NULL 2
+SELECT * FROM t2;
+f g h i j
+1 NULL 1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676
+2 NULL 1995-03-11 00:02:03.195676 0000-00-00 00:00:00.000000 1995-03-11 00:02:03.195676
+# 1980-12-13 02:02:01 UTC
+SET TIMESTAMP = 345520921.196755;
+UPDATE t1, t2 SET t1.e = 3, t2.f = 4;
+SELECT * FROM t1;
+a b c d e
+1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 3
+1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 3
+SELECT * FROM t2;
+f g h i j
+4 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676
+4 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676 1980-12-13 02:02:01.196755 1995-03-11 00:02:03.195676
+DROP TABLE t1, t2;
+#
+# Test of multiple table update with temporary table and on the fly.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c INT,
+d INT
+);
+CREATE TABLE t2 (
+a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c INT KEY,
+d INT
+);
+INSERT INTO t1 ( c ) VALUES (1), (2);
+INSERT INTO t2 ( c ) VALUES (1), (2);
+# Test of multiple table update done on the fly
+# 2011-04-20 15:06:13 UTC
+SET TIMESTAMP = 1303311973.194685;
+UPDATE t1 JOIN t2 USING ( c ) SET t2.d = 1;
+SELECT * FROM t1;
+a b c d
+0000-00-00 00:00:00.000000 NULL 1 NULL
+0000-00-00 00:00:00.000000 NULL 2 NULL
+SELECT * FROM t2;
+a b c d
+2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 1 1
+2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 2 1
+# Test of multiple table update done with temporary table.
+# 1979-01-15 03:02:01
+SET TIMESTAMP = 285213721.134679;
+UPDATE t1 JOIN t2 USING ( c ) SET t1.d = 1;
+SELECT * FROM t1;
+a b c d
+1979-01-15 02:02:01.134679 1979-01-15 02:02:01.134679 1 1
+1979-01-15 02:02:01.134679 1979-01-15 02:02:01.134679 2 1
+SELECT * FROM t2;
+a b c d
+2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 1 1
+2011-04-20 15:06:13.194685 2011-04-20 15:06:13.194685 2 1
+DROP TABLE t1, t2;
+#
+# Test of ON UPDATE CURRENT_TIMESTAMP.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c INT
+);
+# 2011-04-20 09:53:41 UTC
+SET TIMESTAMP = 1303293221.794613;
+INSERT INTO t1 ( c ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c
+0000-00-00 00:00:00.000000 NULL 1
+UPDATE t1 SET c = 1;
+SELECT * FROM t1;
+a b c
+0000-00-00 00:00:00.000000 NULL 1
+UPDATE t1 SET c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
+#
+# Test that ON UPDATE CURRENT_TIMESTAMP works after non-changing UPDATE.
+#
+# 2011-04-20 09:54:13 UTC
+SET TIMESTAMP = 1303293253.794613;
+UPDATE t1 SET c = 2, b = '2011-04-20 09:53:41.794613';
+SELECT * FROM t1;
+a b c
+2011-04-20 09:53:41.794613 2011-04-20 09:53:41.794613 2
+UPDATE t1 SET c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
+#
+# Test of multiple-table UPDATE for ON UPDATE CURRENT_TIMESTAMP
+#
+# 2011-04-20 15:06:13 UTC
+SET TIMESTAMP = 1303311973.534231;
+UPDATE t1 t11, t1 t12 SET t11.c = 3;
+SELECT * FROM t1;
+a b c
+2011-04-20 09:54:13.794613 2011-04-20 09:54:13.794613 3
+UPDATE t1 t11, t1 t12 SET t11.c = 2;
+SELECT * FROM t1;
+a b c
+2011-04-20 15:06:13.534231 2011-04-20 15:06:13.534231 2
+DROP TABLE t1;
+#
+# Test of a multiple-table update where only one table is updated and
+# the updated table has a primary key.
+#
+CREATE TABLE t1 ( a INT, b INT, PRIMARY KEY (a) );
+INSERT INTO t1 VALUES (1, 1),(2, 2),(3, 3),(4, 4);
+CREATE TABLE t2 ( a INT, b INT );
+INSERT INTO t2 VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5);
+UPDATE t1, t2 SET t1.b = 100 WHERE t1.a = t2.a;
+SELECT * FROM t1;
+a b
+1 100
+2 100
+3 100
+4 100
+SELECT * FROM t2;
+a b
+1 1
+2 2
+3 3
+4 4
+5 5
+DROP TABLE t1, t2;
+#
+# Test of ALTER TABLE, reordering columns.
+#
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT );
+ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), c TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `a` int(11) DEFAULT NULL,
+ `c` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp(6) NULL DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), b TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` timestamp(6) NULL DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6), b INT, c TIMESTAMP(6) NULL );
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `b` int(11) DEFAULT NULL,
+ `c` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `c` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6), b INT, c TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY c TIMESTAMP(6) NULL FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` timestamp(6) NULL DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `b` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT, c TIMESTAMP(6) NULL );
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `b` int(11) DEFAULT NULL,
+ `c` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+ALTER TABLE t1 MODIFY a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6) AFTER b;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `b` int(11) DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `c` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b INT, c TIMESTAMP(6) NULL );
+ALTER TABLE t1 MODIFY c TIMESTAMP(6) NULL FIRST;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c` timestamp(6) NULL DEFAULT NULL,
+ `a` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `b` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+#
+# Test of ALTER TABLE, adding columns.
+#
+CREATE TABLE t1 ( a INT );
+ALTER TABLE t1 ADD COLUMN b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
+#
+# Test of INSERT SELECT.
+#
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+d DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+);
+CREATE TABLE t2 (
+placeholder1 INT,
+placeholder2 INT,
+placeholder3 INT,
+placeholder4 INT,
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00',
+c DATETIME(6),
+d DATETIME(6)
+);
+# 1977-08-16 15:30:01 UTC
+SET TIMESTAMP = 240589801.654312;
+INSERT INTO t2 (a, b, c, d) VALUES (
+'1977-08-16 15:30:01.123456',
+'1977-08-16 15:30:01.234567',
+'1977-08-16 15:30:01.345678',
+'1977-08-16 15:30:01.456789'
+);
+# 1986-09-27 01:00:00 UTC
+SET TIMESTAMP = 528166800.132435;
+INSERT INTO t1 ( a, c ) SELECT a, c FROM t2;
+SELECT * FROM t1;
+a b c d
+1977-08-16 15:30:01.123456 1986-09-27 01:00:00.132435 1977-08-16 15:30:01.345678 1986-09-27 01:00:00.132435
+DROP TABLE t1, t2;
+#
+# Test of CREATE TABLE SELECT.
+#
+# We test that the columns of the source table are not used to determine
+# function defaults for the receiving table.
+#
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.657898;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+e TIMESTAMP(6) NULL,
+f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) NULL,
+j DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.164937;
+CREATE TABLE t2 SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t2;
+a
+1970-04-11 20:13:57.657897
+CREATE TABLE t3 SELECT b FROM t1;
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `b` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t3;
+b
+1970-04-11 20:13:57.657897
+CREATE TABLE t4 SELECT c FROM t1;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t4;
+c
+0000-00-00 00:00:00.000000
+CREATE TABLE t5 SELECT d FROM t1;
+SHOW CREATE TABLE t5;
+Table Create Table
+t5 CREATE TABLE `t5` (
+ `d` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t5;
+d
+1986-09-27 03:00:00.098765
+CREATE TABLE t6 SELECT e FROM t1;
+SHOW CREATE TABLE t6;
+Table Create Table
+t6 CREATE TABLE `t6` (
+ `e` timestamp(6) NULL DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t6;
+e
+NULL
+CREATE TABLE t7 SELECT f FROM t1;
+SHOW CREATE TABLE t7;
+Table Create Table
+t7 CREATE TABLE `t7` (
+ `f` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t7;
+f
+1970-04-11 20:13:57.657897
+CREATE TABLE t8 SELECT g FROM t1;
+SHOW CREATE TABLE t8;
+Table Create Table
+t8 CREATE TABLE `t8` (
+ `g` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t8;
+g
+1970-04-11 20:13:57.657897
+CREATE TABLE t9 SELECT h FROM t1;
+SHOW CREATE TABLE t9;
+Table Create Table
+t9 CREATE TABLE `t9` (
+ `h` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t9;
+h
+NULL
+CREATE TABLE t10 SELECT i FROM t1;
+SHOW CREATE TABLE t10;
+Table Create Table
+t10 CREATE TABLE `t10` (
+ `i` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t10;
+i
+NULL
+CREATE TABLE t11 SELECT j FROM t1;
+SHOW CREATE TABLE t11;
+Table Create Table
+t11 CREATE TABLE `t11` (
+ `j` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t11;
+j
+1986-09-27 03:00:00.098765
+CREATE TABLE t12 (
+k TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+l TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+m TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+n TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+o TIMESTAMP(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+p TIMESTAMP(6) NULL,
+q DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+r DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+s DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+t DATETIME(6) NULL,
+u DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
+)
+SELECT * FROM t1;
+SHOW CREATE TABLE t12;
+Table Create Table
+t12 CREATE TABLE `t12` (
+ `k` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `l` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `m` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `n` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `o` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+ `p` timestamp(6) NULL DEFAULT NULL,
+ `q` datetime(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `r` datetime(6) DEFAULT CURRENT_TIMESTAMP(6),
+ `s` datetime(6) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6),
+ `t` datetime(6) DEFAULT NULL,
+ `u` datetime(6) DEFAULT '1986-09-27 03:00:00.098765',
+ `a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `b` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `c` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ `d` timestamp(6) NOT NULL DEFAULT '1986-09-27 03:00:00.098765',
+ `e` timestamp(6) NULL DEFAULT NULL,
+ `f` datetime(6) DEFAULT NULL,
+ `g` datetime(6) DEFAULT NULL,
+ `h` datetime(6) DEFAULT NULL,
+ `i` datetime(6) DEFAULT NULL,
+ `j` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12;
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.164953;
+CREATE TABLE t1 (
+a DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+c DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+d DATETIME(6) NULL,
+e DATETIME(6) DEFAULT '1986-09-27 03:00:00.098765'
+);
+INSERT INTO t1 VALUES ();
+# 1971-01-31 20:13:57 UTC
+SET TIMESTAMP = 34200837.915736;
+CREATE TABLE t2 SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t2;
+a
+1970-04-11 20:13:57.164953
+CREATE TABLE t3 SELECT b FROM t1;
+SHOW CREATE TABLE t3;
+Table Create Table
+t3 CREATE TABLE `t3` (
+ `b` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t3;
+b
+1970-04-11 20:13:57.164953
+CREATE TABLE t4 SELECT c FROM t1;
+SHOW CREATE TABLE t4;
+Table Create Table
+t4 CREATE TABLE `t4` (
+ `c` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t4;
+c
+NULL
+CREATE TABLE t5 SELECT d FROM t1;
+SHOW CREATE TABLE t5;
+Table Create Table
+t5 CREATE TABLE `t5` (
+ `d` datetime(6) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t5;
+d
+NULL
+CREATE TABLE t6 SELECT e FROM t1;
+SHOW CREATE TABLE t6;
+Table Create Table
+t6 CREATE TABLE `t6` (
+ `e` datetime(6) DEFAULT '1986-09-27 03:00:00.098765'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SELECT * FROM t6;
+e
+1986-09-27 03:00:00.098765
+DROP TABLE t1, t2, t3, t4, t5, t6;
+#
+# Test of a CREATE TABLE SELECT that also declared columns. In this case
+# the function default should be de-activated during the execution of the
+# CREATE TABLE statement.
+#
+# 1970-01-01 03:16:40
+SET TIMESTAMP = 1000.987654;
+CREATE TABLE t1 ( a INT );
+INSERT INTO t1 VALUES ( 1 ), ( 2 );
+CREATE TABLE t2 ( b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)) SELECT a FROM t1;
+SHOW CREATE TABLE t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `a` int(11) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+SET TIMESTAMP = 2000.876543;
+INSERT INTO t2( a ) VALUES ( 3 );
+SELECT * FROM t2;
+b a
+0000-00-00 00:00:00.000000 1
+0000-00-00 00:00:00.000000 2
+1970-01-01 00:33:20.876543 3
+DROP TABLE t1, t2;
+#
+# Test of updating a view.
+#
+CREATE TABLE t1 ( a INT, b DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) );
+CREATE TABLE t2 ( a INT, b DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6) );
+CREATE VIEW v1 AS SELECT * FROM t1;
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` latin1 latin1_swedish_ci
+CREATE VIEW v2 AS SELECT * FROM t2;
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS select `t2`.`a` AS `a`,`t2`.`b` AS `b` from `t2` latin1 latin1_swedish_ci
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.348564;
+INSERT INTO v1 ( a ) VALUES ( 1 );
+INSERT INTO v2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b
+1 1971-01-31 20:13:57.348564
+SELECT * FROM v1;
+a b
+1 1971-01-31 20:13:57.348564
+SELECT * FROM t2;
+a b
+1 NULL
+SELECT * FROM v2;
+a b
+1 NULL
+# 1970-04-11 20:13:57 UTC
+SET TIMESTAMP = 8712837.567332;
+UPDATE v1 SET a = 2;
+UPDATE v2 SET a = 2;
+SELECT * FROM t1;
+a b
+2 1971-01-31 20:13:57.348564
+SELECT * FROM v1;
+a b
+2 1971-01-31 20:13:57.348564
+SELECT * FROM t2;
+a b
+2 1970-04-11 20:13:57.567332
+SELECT * FROM v2;
+a b
+2 1970-04-11 20:13:57.567332
+DROP VIEW v1, v2;
+DROP TABLE t1, t2;
+#
+# Test with stored procedures.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NULL,
+f DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+g DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6)
+);
+CREATE PROCEDURE p1() INSERT INTO test.t1( a ) VALUES ( 1 );
+CREATE PROCEDURE p2() UPDATE t1 SET a = 2 WHERE a = 1;
+# 1971-01-31 20:13:57 UTC
+SET TIMESTAMP = 34200837.876544;
+CALL p1();
+SELECT * FROM t1;
+a b c d e f g
+1 1971-01-31 20:13:57.876544 1971-01-31 20:13:57.876544 0000-00-00 00:00:00.000000 NULL 1971-01-31 20:13:57.876544 NULL
+# 1970-04-11 21:13:57 UTC
+SET TIMESTAMP = 8712837.143546;
+CALL p2();
+SELECT * FROM t1;
+a b c d e f g
+2 1970-04-11 20:13:57.143546 1971-01-31 20:13:57.876544 1970-04-11 20:13:57.143546 NULL 1971-01-31 20:13:57.876544 1970-04-11 20:13:57.143546
+DROP PROCEDURE p1;
+DROP PROCEDURE p2;
+DROP TABLE t1;
+#
+# Test with triggers.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NULL,
+f DATETIME(6),
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+);
+CREATE TABLE t2 ( a INT );
+CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+INSERT INTO t1 ( a ) VALUES ( 1 );
+END|
+# 1971-01-31 21:13:57 UTC
+SET TIMESTAMP = 34200837.978675;
+INSERT INTO t2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+1 1971-01-31 20:13:57.978675 1971-01-31 20:13:57.978675 0000-00-00 00:00:00.000000 NULL NULL 1971-01-31 20:13:57.978675 NULL 1971-01-31 20:13:57.978675
+DROP TRIGGER t2_trg;
+CREATE TRIGGER t2_trg BEFORE INSERT ON t2 FOR EACH ROW
+BEGIN
+UPDATE t1 SET a = 2;
+END|
+# 1970-04-11 21:13:57 UTC
+SET TIMESTAMP = 8712837.456789;
+INSERT INTO t2 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b c d e f g h i
+2 1970-04-11 20:13:57.456789 1971-01-31 20:13:57.978675 1970-04-11 20:13:57.456789 NULL NULL 1971-01-31 20:13:57.978675 1970-04-11 20:13:57.456789 1970-04-11 20:13:57.456789
+DROP TABLE t1, t2;
+#
+# Test where the assignment target is not a column.
+#
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
+CREATE TABLE t2 ( a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) );
+CREATE TABLE t3 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6) );
+CREATE TABLE t4 ( a TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6) );
+CREATE VIEW v1 AS SELECT a COLLATE latin1_german1_ci AS b FROM t1;
+CREATE VIEW v2 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t2;
+CREATE VIEW v3 AS SELECT a COLLATE latin1_german1_ci AS b FROM t3;
+CREATE VIEW v4 ( b ) AS SELECT a COLLATE latin1_german1_ci FROM t4;
+INSERT INTO v1 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
+SELECT a FROM t1;
+a
+2007-10-24 00:03:34.010203
+INSERT INTO v2 ( b ) VALUES ( '2007-10-24 00:03:34.010203' );
+SELECT a FROM t2;
+a
+2007-10-24 00:03:34.010203
+INSERT INTO t3 VALUES ();
+UPDATE v3 SET b = '2007-10-24 00:03:34.010203';
+SELECT a FROM t3;
+a
+2007-10-24 00:03:34.010203
+INSERT INTO t4 VALUES ();
+UPDATE v4 SET b = '2007-10-24 00:03:34.010203';
+SELECT a FROM t4;
+a
+2007-10-24 00:03:34.010203
+DROP VIEW v1, v2, v3, v4;
+DROP TABLE t1, t2, t3, t4;
+#
+# Test of LOAD DATA/XML INFILE
+# This tests behavior of function defaults for TIMESTAMP and DATETIME
+# columns. during LOAD ... INFILE.
+# As can be seen here, a TIMESTAMP column with only ON UPDATE
+# CURRENT_TIMESTAMP will still have CURRENT_TIMESTAMP inserted on LOAD
+# ... INFILE if the value is missing. For DATETIME columns a NULL value
+# is inserted instead.
+#
+CREATE TABLE t1 (
+a INT,
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+f DATETIME(6),
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6),
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6),
+i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+);
+CREATE TABLE t2 (
+a TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+c TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+e DATETIME(6) NOT NULL,
+f DATETIME(6) NOT NULL DEFAULT '1977-01-02 12:13:14',
+g DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) NOT NULL,
+h DATETIME(6) ON UPDATE CURRENT_TIMESTAMP(6) NOT NULL,
+i DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) NOT NULL
+);
+SELECT 1 INTO OUTFILE 't3.dat' FROM dual;
+SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+INTO OUTFILE 't4.dat'
+FROM dual;
+SELECT 1, 2 INTO OUTFILE 't5.dat' FROM dual;
+# Mon Aug 1 15:11:19 2011 UTC
+SET TIMESTAMP = 1312211479.918273;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT * FROM t1;
+a 1
+b 2011-08-01 15:11:19.918273
+c 2011-08-01 15:11:19.918273
+d 2011-08-01 15:11:19.918273
+e 2011-08-01 15:11:19.918273
+f NULL
+g NULL
+h NULL
+i NULL
+LOAD DATA INFILE 't4.dat' INTO TABLE t2;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'e' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'f' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'g' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'h' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT a FROM t2;
+a
+2011-08-01 15:11:19.918273
+SELECT b FROM t2;
+b
+2011-08-01 15:11:19.918273
+SELECT c FROM t2;
+c
+2011-08-01 15:11:19.918273
+SELECT d FROM t2;
+d
+2011-08-01 15:11:19.918273
+# As shown here, supplying a NULL value to a non-nullable
+# column with no default value results in the zero date.
+SELECT e FROM t2;
+e
+0000-00-00 00:00:00.000000
+# As shown here, supplying a NULL value to a non-nullable column with a
+# default value results in the zero date.
+SELECT f FROM t2;
+f
+0000-00-00 00:00:00.000000
+# As shown here, supplying a NULL value to a non-nullable column with a
+# default function results in the zero date.
+SELECT g FROM t2;
+g
+0000-00-00 00:00:00.000000
+# As shown here, supplying a NULL value to a non-nullable DATETIME ON
+# UPDATE CURRENT_TIMESTAMP column with no default value results in the
+# zero date.
+SELECT h FROM t2;
+h
+0000-00-00 00:00:00.000000
+SELECT i FROM t2;
+i
+0000-00-00 00:00:00.000000
+DELETE FROM t1;
+DELETE FROM t2;
+# Read t3 file into t1
+# The syntax will cause a different code path to be taken
+# (read_fixed_length()) than under the LOAD ... INTO TABLE t1 command
+# above. The code in this path is copy-pasted code from the path taken
+# under the syntax used in the previous LOAD command.
+LOAD DATA INFILE 't3.dat' INTO TABLE t1
+FIELDS TERMINATED BY '' ENCLOSED BY '';
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT b FROM t1;
+b
+2011-08-01 15:11:19.918273
+SELECT c FROM t1;
+c
+2011-08-01 15:11:19.918273
+SELECT d FROM t1;
+d
+2011-08-01 15:11:19.918273
+SELECT e FROM t1;
+e
+2011-08-01 15:11:19.918273
+# Yes, a missing field cannot be NULL using this syntax, so it will
+# zero date instead. Says a comment in read_fixed_length() : "No fields
+# specified in fields_vars list can be NULL in this format."
+# It appears to be by design. This is inconsistent with LOAD DATA INFILE
+# syntax in previous test.
+SELECT f FROM t1;
+f
+0000-00-00 00:00:00.000000
+SELECT g FROM t1;
+g
+0000-00-00 00:00:00.000000
+# See comment above "SELECT f FROM f1".
+SELECT h FROM t1;
+h
+0000-00-00 00:00:00.000000
+SELECT i FROM t1;
+i
+0000-00-00 00:00:00.000000
+DELETE FROM t1;
+LOAD DATA INFILE 't5.dat' INTO TABLE t1 ( a, @dummy );
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19.918273 2011-08-01 15:11:19.918273 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273
+SELECT @dummy;
+@dummy
+2
+DELETE FROM t1;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET c = '2005-06-06 08:09:10';
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19.918273 2005-06-06 08:09:10.000000 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273 NULL 2011-08-01 15:11:19.918273
+DELETE FROM t1;
+LOAD DATA INFILE 't3.dat' INTO TABLE t1 ( a ) SET g = '2005-06-06 08:09:10';
+SELECT * FROM t1;
+a b c d e f g h i
+1 2011-08-01 15:11:19.918273 2011-08-01 15:11:19.918273 0000-00-00 00:00:00.000000 2011-08-01 15:11:19.918273 NULL 2005-06-06 08:09:10.000000 NULL 2011-08-01 15:11:19.918273
+DELETE FROM t1;
+# Load a static XML file
+LOAD XML INFILE '../../std_data/onerow.xml' INTO TABLE t1
+ROWS IDENTIFIED BY '<row>';
+Missing tags are treated as NULL
+SELECT * FROM t1;
+a 1
+b 2011-08-01 15:11:19.918273
+c 2011-08-01 15:11:19.918273
+d 2011-08-01 15:11:19.918273
+e 2011-08-01 15:11:19.918273
+f NULL
+g NULL
+h NULL
+i NULL
+DROP TABLE t1, t2;
+#
+# Similar LOAD DATA tests in another form
+#
+# All of this test portion has been run on a pre-WL5874 trunk
+# (except that like_b and like_c didn't exist) and all result
+# differences are a bug.
+# Regarding like_b its definition is the same as b's except
+# that the constant default is replaced with a function
+# default. Our expectation is that like_b would behave
+# like b: if b is set to NULL, or set to 0000-00-00, or set to
+# its default, then the same should apply to like_b. Same for
+# like_c vs c.
+# Mon Aug 1 15:11:19 2011 UTC
+SET TIMESTAMP = 1312211479.089786;
+SELECT 1 INTO OUTFILE "file1.dat" FROM dual;
+SELECT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+INTO OUTFILE "file2.dat" FROM dual;
+# Too short row
+CREATE TABLE t1 (
+dummy INT,
+a DATETIME(6) NULL DEFAULT NULL,
+b DATETIME(6) NULL DEFAULT "2011-11-18",
+like_b DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
+c DATETIME(6) NOT NULL DEFAULT "2011-11-18",
+like_c DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NOT NULL DEFAULT "2011-05-03",
+f TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+g TIMESTAMP(6) NULL DEFAULT NULL,
+h INT NULL,
+i INT NOT NULL DEFAULT 42
+);
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime(6) DEFAULT NULL,
+ `b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
+ `like_b` datetime(6) DEFAULT CURRENT_TIMESTAMP(6),
+ `c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
+ `like_c` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
+ `f` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `g` timestamp(6) NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file1.dat" INTO table t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+# It is strange that "like_b" gets NULL when "b" gets 0. But
+# this is consistent with how "a" gets NULL when "b" gets 0,
+# with how "g" gets NULL when "d" gets 0, and with how "h" gets
+# NULL when "i" gets 0. Looks like "DEFAULT
+# <non-NULL-constant>" is changed to 0, whereas DEFAULT NULL
+# and DEFAULT NOW are changed to NULL.
+SELECT * FROM t1;
+dummy 1
+a NULL
+b 0000-00-00 00:00:00.000000
+like_b NULL
+c 0000-00-00 00:00:00.000000
+like_c 0000-00-00 00:00:00.000000
+d 0000-00-00 00:00:00.000000
+e 2011-08-01 15:11:19.089786
+f 2011-08-01 15:11:19.089786
+g NULL
+h NULL
+i 0
+delete from t1;
+alter table t1
+modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime(6) DEFAULT NULL,
+ `b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
+ `like_b` datetime(6) DEFAULT CURRENT_TIMESTAMP(6),
+ `c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
+ `like_c` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
+ `f` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp(6) NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file1.dat" INTO table t1;
+Warnings:
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+Warning 1261 Row 1 doesn't contain data for all columns
+SELECT * FROM t1;
+dummy 1
+a NULL
+b 0000-00-00 00:00:00.000000
+like_b NULL
+c 0000-00-00 00:00:00.000000
+like_c 0000-00-00 00:00:00.000000
+d 0000-00-00 00:00:00.000000
+e 2011-08-01 15:11:19.089786
+f NULL
+g NULL
+h NULL
+i 0
+delete from t1;
+drop table t1;
+# Conclusion derived from trunk's results:
+# DATETIME DEFAULT <non-NULL-constant> (b,c) gets 0000-00-00,
+# DATETIME DEFAULT NULL (a) gets NULL,
+# TIMESTAMP NULL DEFAULT <non-NULL-constant> (d) gets 0000-00-00,
+# TIMESTAMP NULL DEFAULT NULL (g) gets NULL,
+# TIMESTAMP NULL DEFAULT NOW (f after ALTER) gets NULL,
+# TIMESTAMP NOT NULL (f before ALTER, e) gets NOW.
+### Loading NULL ###
+CREATE TABLE t1 (
+dummy INT,
+a DATETIME(6) NULL DEFAULT NULL,
+b DATETIME(6) NULL DEFAULT "2011-11-18",
+like_b DATETIME(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
+c DATETIME(6) NOT NULL DEFAULT "2011-11-18",
+like_c DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+d TIMESTAMP(6) NULL DEFAULT "2011-05-03" ON UPDATE CURRENT_TIMESTAMP(6),
+e TIMESTAMP(6) NOT NULL DEFAULT "2011-05-03",
+f TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+g TIMESTAMP(6) NULL DEFAULT NULL,
+h INT NULL,
+i INT NOT NULL DEFAULT 42
+);
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime(6) DEFAULT NULL,
+ `b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
+ `like_b` datetime(6) DEFAULT CURRENT_TIMESTAMP(6),
+ `c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
+ `like_c` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
+ `f` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `g` timestamp(6) NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file2.dat" INTO table t1;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT * FROM t1;
+dummy NULL
+a NULL
+b NULL
+like_b NULL
+c 0000-00-00 00:00:00.000000
+like_c 0000-00-00 00:00:00.000000
+d NULL
+e 2011-08-01 15:11:19.089786
+f 2011-08-01 15:11:19.089786
+g NULL
+h NULL
+i 0
+delete from t1;
+alter table t1
+modify f TIMESTAMP NULL default CURRENT_TIMESTAMP;
+# There is no promotion
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `dummy` int(11) DEFAULT NULL,
+ `a` datetime(6) DEFAULT NULL,
+ `b` datetime(6) DEFAULT '2011-11-18 00:00:00.000000',
+ `like_b` datetime(6) DEFAULT CURRENT_TIMESTAMP(6),
+ `c` datetime(6) NOT NULL DEFAULT '2011-11-18 00:00:00.000000',
+ `like_c` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
+ `d` timestamp(6) NULL DEFAULT '2011-05-03 00:00:00.000000' ON UPDATE CURRENT_TIMESTAMP(6),
+ `e` timestamp(6) NOT NULL DEFAULT '2011-05-03 00:00:00.000000',
+ `f` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `g` timestamp(6) NULL DEFAULT NULL,
+ `h` int(11) DEFAULT NULL,
+ `i` int(11) NOT NULL DEFAULT '42'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+LOAD DATA INFILE "file2.dat" INTO table t1;
+Warnings:
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'like_c' at row 1
+Warning 1263 Column set to default value; NULL supplied to NOT NULL column 'i' at row 1
+SELECT * FROM t1;
+dummy NULL
+a NULL
+b NULL
+like_b NULL
+c 0000-00-00 00:00:00.000000
+like_c 0000-00-00 00:00:00.000000
+d NULL
+e 2011-08-01 15:11:19.089786
+f NULL
+g NULL
+h NULL
+i 0
+delete from t1;
+# Conclusion derived from trunk's results:
+# DATETIME NULL (a,b) gets NULL,
+# DATETIME NOT NULL (c) gets 0000-00-00,
+# TIMESTAMP NULL (d,f,g) gets NULL,
+# TIMESTAMP NOT NULL (e) gets NOW.
+drop table t1;
+#
+# Test of updatable views with check options. The option can be violated
+# using ON UPDATE updates which is very strange as this offers a loophole
+# in this integrity check.
+#
+SET TIME_ZONE = "+03:00";
+# 1970-01-01 03:16:40
+SET TIMESTAMP = 1000.123456;
+CREATE TABLE t1 ( a INT, b TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6));
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` int(11) DEFAULT NULL,
+ `b` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+INSERT INTO t1 ( a ) VALUES ( 1 );
+SELECT * FROM t1;
+a b
+1 1970-01-01 03:16:40.123456
+CREATE VIEW v1 AS SELECT * FROM t1 WHERE b <= '1970-01-01 03:16:40.123456'
+WITH CHECK OPTION;
+SELECT * FROM v1;
+a b
+1 1970-01-01 03:16:40.123456
+# 1970-01-01 03:33:20
+SET TIMESTAMP = 2000.000234;
+UPDATE v1 SET a = 2;
+ERROR HY000: CHECK OPTION failed 'test.v1'
+SELECT * FROM t1;
+a b
+1 1970-01-01 03:16:40.123456
+DROP VIEW v1;
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT '1973-08-14 09:11:22.089786' ON UPDATE CURRENT_TIMESTAMP(6),
+c INT KEY
+);
+# 1973-08-14 09:11:22 UTC
+SET TIMESTAMP = 114167482.534231;
+INSERT INTO t1 ( c ) VALUES ( 1 );
+CREATE VIEW v1 AS
+SELECT *
+FROM t1
+WHERE a >= '1973-08-14 09:11:22'
+WITH LOCAL CHECK OPTION;
+SELECT * FROM v1;
+a c
+1973-08-14 09:11:22.089786 1
+SET TIMESTAMP = 1.126789;
+INSERT INTO v1 ( c ) VALUES ( 1 ) ON DUPLICATE KEY UPDATE c = 2;
+ERROR HY000: CHECK OPTION failed 'test.v1'
+SELECT * FROM v1;
+a c
+1973-08-14 09:11:22.089786 1
+DROP VIEW v1;
+DROP TABLE t1;
+#
+# Bug 13095459 - MULTI-TABLE UPDATE MODIFIES A ROW TWICE
+#
+CREATE TABLE t1 (
+a INT,
+b INT,
+ts TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+PRIMARY KEY ( a, ts )
+);
+INSERT INTO t1( a, b, ts ) VALUES ( 1, 0, '2000-09-28 17:44:34' );
+CREATE TABLE t2 ( a INT );
+INSERT INTO t2 VALUES ( 1 );
+UPDATE t1 STRAIGHT_JOIN t2
+SET t1.b = t1.b + 1
+WHERE t1.a = 1 AND t1.ts >= '2000-09-28 00:00:00';
+SELECT b FROM t1;
+b
+1
+DROP TABLE t1, t2;
+#
+# Bug#11745578: 17392: ALTER TABLE ADD COLUMN TIMESTAMP DEFAULT
+# CURRENT_TIMESTAMP INSERTS ZERO
+#
+SET timestamp = 1000;
+CREATE TABLE t1 ( b INT );
+INSERT INTO t1 VALUES (1);
+ALTER TABLE t1 ADD COLUMN a6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN a5 DATETIME(6) DEFAULT NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN a4 DATETIME(6) ON UPDATE NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN a3 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN a2 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN a1 TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6) FIRST;
+ALTER TABLE t1 ADD COLUMN c1 TIMESTAMP(6) NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE NOW(6) AFTER b;
+ALTER TABLE t1 ADD COLUMN c2 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) AFTER c1;
+ALTER TABLE t1 ADD COLUMN c3 TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c2;
+ALTER TABLE t1 ADD COLUMN c4 DATETIME(6) ON UPDATE NOW(6) AFTER c3;
+ALTER TABLE t1 ADD COLUMN c5 DATETIME(6) DEFAULT NOW(6) AFTER c4;
+ALTER TABLE t1 ADD COLUMN c6 DATETIME(6) DEFAULT NOW(6) ON UPDATE NOW(6) AFTER c5;
+SELECT * FROM t1;
+a1 0000-00-00 00:00:00.000000
+a2 1970-01-01 03:16:40.000000
+a3 1970-01-01 03:16:40.000000
+a4 NULL
+a5 1970-01-01 03:16:40.000000
+a6 1970-01-01 03:16:40.000000
+b 1
+c1 0000-00-00 00:00:00.000000
+c2 1970-01-01 03:16:40.000000
+c3 1970-01-01 03:16:40.000000
+c4 NULL
+c5 1970-01-01 03:16:40.000000
+c6 1970-01-01 03:16:40.000000
+DROP TABLE t1;
+CREATE TABLE t1 ( a TIMESTAMP(6) NOT NULL DEFAULT NOW(6) ON UPDATE CURRENT_TIMESTAMP(6), b DATETIME(6) DEFAULT NOW(6) );
+INSERT INTO t1 VALUES ();
+SET timestamp = 1000000000;
+ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3);
+ALTER TABLE t1 MODIFY COLUMN b DATETIME(3) DEFAULT CURRENT_TIMESTAMP(3);
+SELECT * FROM t1;
+a b
+1970-01-01 03:16:40.000 1970-01-01 03:16:40.000
+DROP TABLE t1;
+CREATE TABLE t1 (
+a TIMESTAMP(6) NOT NULL DEFAULT '1999-12-01 11:22:33' ON UPDATE CURRENT_TIMESTAMP(6),
+b DATETIME(6) DEFAULT '1999-12-01 11:22:33'
+);
+INSERT INTO t1 VALUES ();
+ALTER TABLE t1 MODIFY COLUMN a TIMESTAMP(6) DEFAULT NOW(6);
+ALTER TABLE t1 MODIFY COLUMN b DATETIME(6) DEFAULT NOW(6);
+INSERT INTO t1 VALUES ();
+SELECT * FROM t1;
+a b
+1999-12-01 11:22:33.000000 1999-12-01 11:22:33.000000
+2001-09-09 04:46:40.000000 2001-09-09 04:46:40.000000
+DROP TABLE t1;
diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result
index baedf17152c..433a67746e3 100644
--- a/mysql-test/r/gis.result
+++ b/mysql-test/r/gis.result
@@ -1625,6 +1625,12 @@ Warnings:
Warning 1300 Invalid utf8 character string: 'E043'
Warning 1300 Invalid utf8 character string: 'E043'
drop table t1;
+#
+# MDEV-6883 ST_WITHIN crashes server if (0,0) is matched to POLYGON((0 0))
+#
+select st_within(GeomFromText('Polygon((0 0))'), Point(0,0));
+st_within(GeomFromText('Polygon((0 0))'), Point(0,0))
+1
End of 5.3 tests
#
# Bug#11908153: CRASH AND/OR VALGRIND ERRORS IN FIELD_BLOB::GET_KEY_IMAGE
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result
index 643849f36ed..0858198694b 100644
--- a/mysql-test/r/group_by.result
+++ b/mysql-test/r/group_by.result
@@ -2483,6 +2483,17 @@ test
2
SET sql_mode='';
#
+# MDEV-6484: Assertion `tab->ref.use_count' failed on query with joins, constant table, multi-part key
+#
+CREATE TABLE t1 (i1 INT, c1 VARCHAR(1)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (6,'b');
+CREATE TABLE t2 (pk2 INT, i2 INT, c2 VARCHAR(1), PRIMARY KEY(pk2), KEY(pk2,i2)) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (1,2,'s'),(2,4,'r'),(3,8,'m'),(4,4,'b'),(5,4,'x'),(6,7,'g'),(7,4,'p');
+SELECT i2 FROM t1 AS t1a STRAIGHT_JOIN ( t2 INNER JOIN t1 AS t1b ON (t1b.c1 = c2) ) ON (t1b.i1 = pk2 )
+WHERE t1a.c1 = c2 GROUP BY i2;
+i2
+DROP TABLE t1,t2;
+#
# Bug #58782
# Missing rows with SELECT .. WHERE .. IN subquery
# with full GROUP BY and no aggr
diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result
index 06a8a8a06b8..9421ea9e740 100644
--- a/mysql-test/r/group_min_max.result
+++ b/mysql-test/r/group_min_max.result
@@ -2129,10 +2129,11 @@ Warnings:
Note 1003 select sum(ord(`test`.`t1`.`a1`)) AS `sum(ord(a1))` from `test`.`t1` where (`test`.`t1`.`a1` > 'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
create table t4 as select distinct a1, a2, b, c from t1;
alter table t4 add unique index idxt4 (a1, a2, b, c);
+# This is "superceded" by MDEV-7118, and Loose Index Scan is again an option:
explain
select a1, a2, b, min(c) from t4 group by a1, a2, b;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t4 index NULL idxt4 163 NULL 64 Using index
+1 SIMPLE t4 range NULL idxt4 147 NULL 10 Using index for group-by
select a1, a2, b, min(c) from t4 group by a1, a2, b;
a1 a2 b min(c)
a a a a111
@@ -2355,7 +2356,7 @@ CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a,b,c));
INSERT INTO t2 SELECT a,b,b FROM t1;
explain SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 ref PRIMARY PRIMARY 8 const,const 1 Using where; Using index
+1 SIMPLE t2 range PRIMARY PRIMARY 12 NULL 1 Using where; Using index for group-by
SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
MIN(c)
2
@@ -3686,3 +3687,43 @@ a b
3 2
3 3
drop table t1;
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6991 GROUP_MIN_MAX optimization is erroneously applied in some cases
+#
+CREATE TABLE t1 (id INT NOT NULL, a VARCHAR(20)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,'2001-01-01');
+INSERT INTO t1 VALUES (1,'2001-01-02');
+INSERT INTO t1 VALUES (1,'2001-01-03');
+INSERT INTO t1 VALUES (1,' 2001-01-04');
+INSERT INTO t1 VALUES (2,'2001-01-01');
+INSERT INTO t1 VALUES (2,'2001-01-02');
+INSERT INTO t1 VALUES (2,'2001-01-03');
+INSERT INTO t1 VALUES (2,' 2001-01-04');
+INSERT INTO t1 VALUES (3,'2001-01-01');
+INSERT INTO t1 VALUES (3,'2001-01-02');
+INSERT INTO t1 VALUES (3,'2001-01-03');
+INSERT INTO t1 VALUES (3,' 2001-01-04');
+INSERT INTO t1 VALUES (4,'2001-01-01');
+INSERT INTO t1 VALUES (4,'2001-01-02');
+INSERT INTO t1 VALUES (4,'2001-01-03');
+INSERT INTO t1 VALUES (4,' 2001-01-04');
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=DATE'2001-01-04' GROUP BY id;
+id MIN(a) MAX(a)
+1 2001-01-04 2001-01-04
+2 2001-01-04 2001-01-04
+3 2001-01-04 2001-01-04
+4 2001-01-04 2001-01-04
+ALTER TABLE t1 ADD KEY(id,a);
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=DATE'2001-01-04' GROUP BY id;
+id MIN(a) MAX(a)
+1 2001-01-04 2001-01-04
+2 2001-01-04 2001-01-04
+3 2001-01-04 2001-01-04
+4 2001-01-04 2001-01-04
+DROP TABLE t1;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result
index f3511b0ad4a..77c74fbc041 100644
--- a/mysql-test/r/group_min_max_innodb.result
+++ b/mysql-test/r/group_min_max_innodb.result
@@ -174,7 +174,7 @@ F 17
EXPLAIN SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR c1 = 'F' ) AND ( i2 = 17 )
GROUP BY c1;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 range k1 k1 5 NULL 2 Using where; Using index
+1 SIMPLE t1 range k1 k1 5 NULL 1 Using where; Using index for group-by
SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR c1 = 'F' ) AND ( i2 = 17 )
GROUP BY c1;
c1 max(i2)
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index 8682d229f11..0384a23fc71 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -807,7 +807,7 @@ drop view a2, a1;
drop table t_crashme;
select table_schema,table_name, column_name from
information_schema.columns
-where data_type = 'longtext';
+where data_type = 'longtext' and table_schema != 'performance_schema';
table_schema table_name column_name
information_schema ALL_PLUGINS PLUGIN_DESCRIPTION
information_schema COLUMNS COLUMN_DEFAULT
@@ -826,14 +826,6 @@ information_schema SYSTEM_VARIABLES ENUM_VALUE_LIST
information_schema TRIGGERS ACTION_CONDITION
information_schema TRIGGERS ACTION_STATEMENT
information_schema VIEWS VIEW_DEFINITION
-performance_schema events_statements_current SQL_TEXT
-performance_schema events_statements_current DIGEST_TEXT
-performance_schema events_statements_history SQL_TEXT
-performance_schema events_statements_history DIGEST_TEXT
-performance_schema events_statements_history_long SQL_TEXT
-performance_schema events_statements_history_long DIGEST_TEXT
-performance_schema events_statements_summary_by_digest DIGEST_TEXT
-performance_schema threads PROCESSLIST_INFO
select table_name, column_name, data_type from information_schema.columns
where data_type = 'datetime' and table_name not like 'innodb_%';
table_name column_name data_type
@@ -1585,7 +1577,9 @@ show open tables where f1()=0;
drop table t1;
drop function f1;
select * from information_schema.tables where 1=sleep(100000);
+Got one of the listed errors
select * from information_schema.columns where 1=sleep(100000);
+Got one of the listed errors
explain select count(*) from information_schema.tables;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tables ALL NULL NULL NULL NULL NULL Skip_open_table; Scanned all databases
diff --git a/mysql-test/r/innodb_mrr_cpk.result b/mysql-test/r/innodb_mrr_cpk.result
index bcee428bc57..99ed73a3e83 100644
--- a/mysql-test/r/innodb_mrr_cpk.result
+++ b/mysql-test/r/innodb_mrr_cpk.result
@@ -145,11 +145,47 @@ select * from t1, t2 where t1.a=t2.a and t2.b + t1.b > 100;
a b c filler a b
set optimizer_switch='index_condition_pushdown=on';
drop table t1,t2;
-set @@join_cache_level= @save_join_cache_level;
-set storage_engine=@save_storage_engine;
-set optimizer_switch=@innodb_mrr_cpk_tmp;
drop table t0;
#
+# MDEV-6878: Use of uninitialized saved_primary_key in Mrr_ordered_index_reader::resume_read()
+#
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1 (
+pk varchar(32) character set utf8 primary key,
+kp1 char(32) not null,
+col1 varchar(32),
+key (kp1)
+) engine=innodb;
+insert into t1
+select
+concat('pk-', 1000 +A.a),
+concat('kp1-', 1000 +A.a),
+concat('val-', 1000 +A.a)
+from test.t0 A ;
+create table t2 as select kp1 as a from t1;
+set join_cache_level=8;
+set optimizer_switch='mrr=on,mrr_sort_keys=on';
+explain
+select * from t2 straight_join t1 force index(kp1) where t1.kp1=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ALL NULL NULL NULL NULL 10
+1 SIMPLE t1 ref kp1 kp1 32 test.t2.a 1 Using join buffer (flat, BKAH join); Key-ordered Rowid-ordered scan
+select * from t2 straight_join t1 force index(kp1) where t1.kp1=t2.a;
+a pk kp1 col1
+kp1-1000 pk-1000 kp1-1000 val-1000
+kp1-1001 pk-1001 kp1-1001 val-1001
+kp1-1002 pk-1002 kp1-1002 val-1002
+kp1-1003 pk-1003 kp1-1003 val-1003
+kp1-1004 pk-1004 kp1-1004 val-1004
+kp1-1005 pk-1005 kp1-1005 val-1005
+kp1-1006 pk-1006 kp1-1006 val-1006
+kp1-1007 pk-1007 kp1-1007 val-1007
+kp1-1008 pk-1008 kp1-1008 val-1008
+kp1-1009 pk-1009 kp1-1009 val-1009
+drop table t0,t1,t2;
+#
+#
# MDEV-3817: Wrong result with index_merge+index_merge_intersection, InnoDB table, join, AND and OR conditions
#
set @tmp_mdev3817=@@optimizer_switch;
@@ -194,3 +230,9 @@ id select_type table type possible_keys key key_len ref rows Extra
2 DERIVED t2 ALL NULL NULL NULL NULL #
set join_cache_level= @tmp_mdev5037;
drop table t0,t1,t2;
+#
+# This must be at the end:
+#
+set @@join_cache_level= @save_join_cache_level;
+set storage_engine=@save_storage_engine;
+set optimizer_switch=@innodb_mrr_cpk_tmp;
diff --git a/mysql-test/r/join_cache.result b/mysql-test/r/join_cache.result
index 253fb61dc27..456e17a91f7 100644
--- a/mysql-test/r/join_cache.result
+++ b/mysql-test/r/join_cache.result
@@ -498,8 +498,8 @@ CountryLanguage.Percentage > 50 AND
LENGTH(Language) < LENGTH(City.Name) - 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Country ALL NULL NULL NULL NULL 239 Using where
-1 SIMPLE City ALL NULL NULL NULL NULL 4079 Using where; Using join buffer (flat, BNL join)
1 SIMPLE CountryLanguage ALL NULL NULL NULL NULL 984 Using where; Using join buffer (flat, BNL join)
+1 SIMPLE City ALL NULL NULL NULL NULL 4079 Using where; Using join buffer (flat, BNL join)
SELECT City.Name, Country.Name, CountryLanguage.Language
FROM City,Country,CountryLanguage
WHERE City.Country=Country.Code AND
@@ -576,8 +576,8 @@ CountryLanguage.Percentage > 50 AND
LENGTH(Language) < LENGTH(City.Name) - 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Country ALL NULL NULL NULL NULL 239 Using where
-1 SIMPLE City ALL NULL NULL NULL NULL 4079 Using where; Using join buffer (flat, BNL join)
-1 SIMPLE CountryLanguage ALL NULL NULL NULL NULL 984 Using where; Using join buffer (incremental, BNL join)
+1 SIMPLE CountryLanguage ALL NULL NULL NULL NULL 984 Using where; Using join buffer (flat, BNL join)
+1 SIMPLE City ALL NULL NULL NULL NULL 4079 Using where; Using join buffer (incremental, BNL join)
SELECT City.Name, Country.Name, CountryLanguage.Language
FROM City,Country,CountryLanguage
WHERE City.Country=Country.Code AND
@@ -654,8 +654,8 @@ CountryLanguage.Percentage > 50 AND
LENGTH(Language) < LENGTH(City.Name) - 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Country ALL NULL NULL NULL NULL 239 Using where
-1 SIMPLE City hash_ALL NULL #hash#$hj 3 world.Country.Code 4079 Using where; Using join buffer (flat, BNLH join)
1 SIMPLE CountryLanguage hash_ALL NULL #hash#$hj 3 world.Country.Code 984 Using where; Using join buffer (flat, BNLH join)
+1 SIMPLE City hash_ALL NULL #hash#$hj 3 world.Country.Code 4079 Using where; Using join buffer (flat, BNLH join)
SELECT City.Name, Country.Name, CountryLanguage.Language
FROM City,Country,CountryLanguage
WHERE City.Country=Country.Code AND
@@ -732,8 +732,8 @@ CountryLanguage.Percentage > 50 AND
LENGTH(Language) < LENGTH(City.Name) - 2;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Country ALL NULL NULL NULL NULL 239 Using where
-1 SIMPLE City hash_ALL NULL #hash#$hj 3 world.Country.Code 4079 Using where; Using join buffer (flat, BNLH join)
-1 SIMPLE CountryLanguage hash_ALL NULL #hash#$hj 3 world.Country.Code 984 Using where; Using join buffer (incremental, BNLH join)
+1 SIMPLE CountryLanguage hash_ALL NULL #hash#$hj 3 world.Country.Code 984 Using where; Using join buffer (flat, BNLH join)
+1 SIMPLE City hash_ALL NULL #hash#$hj 3 world.Country.Code 4079 Using where; Using join buffer (incremental, BNLH join)
SELECT City.Name, Country.Name, CountryLanguage.Language
FROM City,Country,CountryLanguage
WHERE City.Country=Country.Code AND
diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result
index 36c2f1898f8..820d66b9264 100644
--- a/mysql-test/r/join_outer.result
+++ b/mysql-test/r/join_outer.result
@@ -2223,6 +2223,29 @@ Warnings:
Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t2`.`i2` AS `i2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`d3` AS `d3` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(((`test`.`t2`.`i2` = `test`.`t1`.`i1`) and (`test`.`t3`.`i3` = `test`.`t1`.`i1`))) where ((`test`.`t3`.`d3` = 0) or isnull(`test`.`t3`.`d3`))
DROP TABLE t1,t2,t3;
#
+# Bug mdev-6705: wrong on expression after constant row substitution
+# that triggers a simplification of WHERE condition
+#
+CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (10,8);
+CREATE TABLE t2 (c int) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (8),(9);
+CREATE TABLE t3 (d int) ENGINE=MyISAM;
+INSERT INTO t3 VALUES (3),(8);
+EXPLAIN EXTENDED
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+WHERE b IN (1,2,3) OR b = d;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1 100.00
+1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where
+Warnings:
+Note 1003 select 10 AS `a`,8 AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t2` left join `test`.`t3` on((`test`.`t3`.`d` = 10)) where ((`test`.`t2`.`c` = 8) and (`test`.`t3`.`d` = 8))
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+WHERE b IN (1,2,3) OR b = d;
+a b c d
+DROP TABLE t1,t2,t3;
+#
# MDEV-6634: Wrong estimates for ref(const) and key IS NULL predicate
#
create table t1(a int);
diff --git a/mysql-test/r/join_outer_jcl6.result b/mysql-test/r/join_outer_jcl6.result
index 80a52ad45a2..4412f8059dd 100644
--- a/mysql-test/r/join_outer_jcl6.result
+++ b/mysql-test/r/join_outer_jcl6.result
@@ -2234,6 +2234,29 @@ Warnings:
Note 1003 select `test`.`t1`.`i1` AS `i1`,`test`.`t2`.`i2` AS `i2`,`test`.`t3`.`i3` AS `i3`,`test`.`t3`.`d3` AS `d3` from `test`.`t1` left join (`test`.`t2` join `test`.`t3`) on(((`test`.`t2`.`i2` = `test`.`t1`.`i1`) and (`test`.`t3`.`i3` = `test`.`t1`.`i1`))) where ((`test`.`t3`.`d3` = 0) or isnull(`test`.`t3`.`d3`))
DROP TABLE t1,t2,t3;
#
+# Bug mdev-6705: wrong on expression after constant row substitution
+# that triggers a simplification of WHERE condition
+#
+CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (10,8);
+CREATE TABLE t2 (c int) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (8),(9);
+CREATE TABLE t3 (d int) ENGINE=MyISAM;
+INSERT INTO t3 VALUES (3),(8);
+EXPLAIN EXTENDED
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+WHERE b IN (1,2,3) OR b = d;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1 100.00
+1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00 Using where
+1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00 Using where; Using join buffer (flat, BNL join)
+Warnings:
+Note 1003 select 10 AS `a`,8 AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t3`.`d` AS `d` from `test`.`t2` left join `test`.`t3` on((`test`.`t3`.`d` = 10)) where ((`test`.`t2`.`c` = 8) and (`test`.`t3`.`d` = 8))
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+WHERE b IN (1,2,3) OR b = d;
+a b c d
+DROP TABLE t1,t2,t3;
+#
# MDEV-6634: Wrong estimates for ref(const) and key IS NULL predicate
#
create table t1(a int);
diff --git a/mysql-test/r/log_errchk.result b/mysql-test/r/log_errchk.result
new file mode 100644
index 00000000000..407fba2323e
--- /dev/null
+++ b/mysql-test/r/log_errchk.result
@@ -0,0 +1,10 @@
+call mtr.add_suppression("Could not use");
+# Case 1: Setting fife file to general_log_file and slow_query_log_file
+# system variable.
+SET GLOBAL general_log_file="MYSQLTEST_VARDIR/tmp/general_log.fifo";;
+ERROR 42000: Variable 'general_log_file' can't be set to the value of 'MYSQLTEST_VARDIR/tmp/general_log.fifo'
+SET GLOBAL slow_query_log_file="MYSQLTEST_VARDIR/tmp/slow_log.fifo";;
+ERROR 42000: Variable 'slow_query_log_file' can't be set to the value of 'MYSQLTEST_VARDIR/tmp/slow_log.fifo'
+# Case 2: Starting server with fifo file as general log file
+# and slow query log file.
+Setting fifo file as general log file and slow query log failed.
diff --git a/mysql-test/r/log_tables_upgrade.result b/mysql-test/r/log_tables_upgrade.result
index 9900f6d6b5a..a609b222d53 100644
--- a/mysql-test/r/log_tables_upgrade.result
+++ b/mysql-test/r/log_tables_upgrade.result
@@ -11,7 +11,7 @@ Table Op Msg_type Msg_text
test.bug49823 repair status OK
RENAME TABLE general_log TO renamed_general_log;
RENAME TABLE test.bug49823 TO general_log;
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -43,9 +43,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -53,6 +53,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
DROP TABLE general_log;
RENAME TABLE renamed_general_log TO general_log;
diff --git a/mysql-test/r/mysql_upgrade-6984.result b/mysql-test/r/mysql_upgrade-6984.result
new file mode 100644
index 00000000000..6ae995cd030
--- /dev/null
+++ b/mysql-test/r/mysql_upgrade-6984.result
@@ -0,0 +1,58 @@
+update mysql.user set password=password("foo") where user='root';
+Phase 1/5: Checking mysql database
+Processing databases
+mysql
+mysql.column_stats OK
+mysql.columns_priv OK
+mysql.db OK
+mysql.event OK
+mysql.func OK
+mysql.gtid_slave_pos OK
+mysql.help_category OK
+mysql.help_keyword OK
+mysql.help_relation OK
+mysql.help_topic OK
+mysql.host OK
+mysql.index_stats OK
+mysql.innodb_index_stats
+Error : Unknown storage engine 'InnoDB'
+error : Corrupt
+mysql.innodb_table_stats
+Error : Unknown storage engine 'InnoDB'
+error : Corrupt
+mysql.plugin OK
+mysql.proc OK
+mysql.procs_priv OK
+mysql.proxies_priv OK
+mysql.roles_mapping OK
+mysql.servers OK
+mysql.table_stats OK
+mysql.tables_priv OK
+mysql.time_zone OK
+mysql.time_zone_leap_second OK
+mysql.time_zone_name OK
+mysql.time_zone_transition OK
+mysql.time_zone_transition_type OK
+mysql.user OK
+
+Repairing tables
+mysql.innodb_index_stats
+Error : Unknown storage engine 'InnoDB'
+error : Corrupt
+mysql.innodb_table_stats
+Error : Unknown storage engine 'InnoDB'
+error : Corrupt
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
+Processing databases
+information_schema
+mtr
+mtr.global_suppressions OK
+mtr.test_suppressions OK
+performance_schema
+test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
+OK
+update mysql.user set password='' where user='root';
+flush privileges;
diff --git a/mysql-test/r/mysql_upgrade.result b/mysql-test/r/mysql_upgrade.result
index 1cc448b3ba2..64c2c0222fc 100644
--- a/mysql-test/r/mysql_upgrade.result
+++ b/mysql-test/r/mysql_upgrade.result
@@ -1,5 +1,5 @@
Run mysql_upgrade once
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -30,9 +30,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -40,11 +40,12 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
Run it again - should say already completed
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
Force should run it regardless of wether it's been run before
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -75,9 +76,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -85,11 +86,12 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
GRANT ALL ON *.* TO mysqltest1@'%';
Run mysql_upgrade with password protected account
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -120,9 +122,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -130,6 +132,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
DROP USER mysqltest1@'%';
Version check failed. Got the following error when calling the 'mysql' command line client
@@ -139,7 +142,7 @@ Run mysql_upgrade with a non existing server socket
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
FATAL ERROR: Upgrade failed
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -170,9 +173,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -180,6 +183,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
set GLOBAL sql_mode=default;
#
@@ -190,7 +194,7 @@ CREATE PROCEDURE testproc() BEGIN END;
UPDATE mysql.proc SET character_set_client = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET collation_connection = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET db_collation = NULL WHERE name LIKE 'testproc';
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -221,9 +225,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -231,6 +235,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
CALL testproc();
DROP PROCEDURE testproc;
@@ -244,7 +249,7 @@ WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been
GRANT USAGE ON *.* TO 'user3'@'%';
GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%';
Run mysql_upgrade with all privileges on a user
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -275,9 +280,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -285,6 +290,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
SHOW GRANTS FOR 'user3'@'%';
Grants for user3@%
@@ -293,7 +299,7 @@ GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%'
DROP USER 'user3'@'%';
End of 5.1 tests
The --upgrade-system-tables option was used, user tables won't be touched.
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -324,7 +330,8 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
#
# Bug#11827359 60223: MYSQL_UPGRADE PROBLEM WITH OPTION
@@ -332,7 +339,7 @@ OK
#
# Droping the previously created mysql_upgrade_info file..
# Running mysql_upgrade with --skip-write-binlog..
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -363,9 +370,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -373,6 +380,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
#
# MDEV-4332 Increase username length from 16 characters
@@ -386,7 +394,7 @@ GRANT INSERT ON mysql.user TO very_long_user_name_number_2;
GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_1;
GRANT UPDATE (User) ON mysql.db TO very_long_user_name_number_2;
CREATE PROCEDURE test.pr() BEGIN END;
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -417,9 +425,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -427,6 +435,7 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
SELECT definer FROM mysql.proc WHERE db = 'test' AND name = 'pr';
definer
diff --git a/mysql-test/r/mysql_upgrade_no_innodb.result b/mysql-test/r/mysql_upgrade_no_innodb.result
index 320dcfe5d3b..e65c6ae05f7 100644
--- a/mysql-test/r/mysql_upgrade_no_innodb.result
+++ b/mysql-test/r/mysql_upgrade_no_innodb.result
@@ -1,5 +1,5 @@
The --upgrade-system-tables option was used, user tables won't be touched.
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -42,5 +42,6 @@ error : Corrupt
mysql.innodb_table_stats
Error : Unknown storage engine 'InnoDB'
error : Corrupt
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
diff --git a/mysql-test/r/mysql_upgrade_ssl.result b/mysql-test/r/mysql_upgrade_ssl.result
index 14671aa6409..1bbee22aba2 100644
--- a/mysql-test/r/mysql_upgrade_ssl.result
+++ b/mysql-test/r/mysql_upgrade_ssl.result
@@ -1,7 +1,7 @@
#
# Bug#55672 mysql_upgrade dies with internal error
#
-Phase 1/4: Checking mysql database
+Phase 1/5: Checking mysql database
Processing databases
mysql
mysql.column_stats OK
@@ -32,9 +32,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
-Phase 2/4: Running 'mysql_fix_privilege_tables'...
-Phase 3/4: Fixing table and database names
-Phase 4/4: Checking and upgrading tables
+Phase 2/5: Running 'mysql_fix_privilege_tables'...
+Phase 3/5: Fixing table and database names
+Phase 4/5: Checking and upgrading tables
Processing databases
information_schema
mtr
@@ -42,4 +42,5 @@ mtr.global_suppressions OK
mtr.test_suppressions OK
performance_schema
test
+Phase 5/5: Running 'FLUSH PRIVILEGES'...
OK
diff --git a/mysql-test/r/not_embedded.require b/mysql-test/r/not_embedded.require
deleted file mode 100644
index b2ea98bcd0a..00000000000
--- a/mysql-test/r/not_embedded.require
+++ /dev/null
@@ -1,2 +0,0 @@
-have_embedded
-0
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index 9b42506e541..d48985822df 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -383,6 +383,18 @@ SELECT * FROM t1,t2 WHERE 1 IS NOT NULL AND t1.b IS NULL;
a b c d
DROP TABLE t1,t2;
#
+# Start of 10.0 tests
+#
+#
+# MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
+#
+SELECT NOT NOT NULLIF(2,3);
+NOT NOT NULLIF(2,3)
+1
+#
+# End of 10.0 tests
+#
+#
# Start of 10.1 tests
#
#
diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result
index 76b8e887d89..4627f03a8a3 100644
--- a/mysql-test/r/openssl_1.result
+++ b/mysql-test/r/openssl_1.result
@@ -7,6 +7,8 @@ grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA
grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB";
grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx";
flush privileges;
+connect(localhost,ssl_user2,,test,MASTER_PORT,MASTER_SOCKET);
+ERROR 28000: Access denied for user 'ssl_user2'@'localhost' (using password: NO)
connect(localhost,ssl_user5,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'ssl_user5'@'localhost' (using password: NO)
SHOW STATUS LIKE 'Ssl_cipher';
diff --git a/mysql-test/r/openssl_6975,tlsv10.result b/mysql-test/r/openssl_6975,tlsv10.result
new file mode 100644
index 00000000000..52d5978749e
--- /dev/null
+++ b/mysql-test/r/openssl_6975,tlsv10.result
@@ -0,0 +1,25 @@
+grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA";
+grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256";
+TLS1.2 ciphers: user is ok with any cipher
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+SSLv3 ciphers: user is ok with any cipher
+Variable_name Value
+Ssl_cipher RC4-SHA
+Variable_name Value
+Ssl_cipher DHE-RSA-AES256-SHA
+SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA
+Variable_name Value
+Ssl_cipher RC4-SHA
+ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO)
+SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256
+ERROR 1045 (28000): Access denied for user 'ssl_tls12'@'localhost' (using password: NO)
+ERROR 1045 (28000): Access denied for user 'ssl_tls12'@'localhost' (using password: NO)
+drop user ssl_sslv3@localhost;
+drop user ssl_tls12@localhost;
diff --git a/mysql-test/r/openssl_6975,tlsv12.result b/mysql-test/r/openssl_6975,tlsv12.result
new file mode 100644
index 00000000000..033220427be
--- /dev/null
+++ b/mysql-test/r/openssl_6975,tlsv12.result
@@ -0,0 +1,25 @@
+grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA";
+grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256";
+TLS1.2 ciphers: user is ok with any cipher
+Variable_name Value
+Ssl_cipher AES128-SHA256
+Variable_name Value
+Ssl_cipher DHE-RSA-AES256-GCM-SHA384
+TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA
+ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO)
+ERROR 1045 (28000): Access denied for user 'ssl_sslv3'@'localhost' (using password: NO)
+TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256
+Variable_name Value
+Ssl_cipher AES128-SHA256
+ERROR 1045 (28000): Access denied for user 'ssl_tls12'@'localhost' (using password: NO)
+SSLv3 ciphers: user is ok with any cipher
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+ERROR 2026 (HY000): SSL connection error: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
+drop user ssl_sslv3@localhost;
+drop user ssl_tls12@localhost;
diff --git a/mysql-test/r/order_by_zerolength-4285.result b/mysql-test/r/order_by_zerolength-4285.result
new file mode 100644
index 00000000000..f60ce7d90c7
--- /dev/null
+++ b/mysql-test/r/order_by_zerolength-4285.result
@@ -0,0 +1,26 @@
+create table t1 (pk int primary key);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+select * from t1 order by now(), cast(pk as char(0));
+pk
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+Warnings:
+Warning 1292 Truncated incorrect CHAR(0) value: '1'
+Warning 1292 Truncated incorrect CHAR(0) value: '2'
+Warning 1292 Truncated incorrect CHAR(0) value: '3'
+Warning 1292 Truncated incorrect CHAR(0) value: '4'
+Warning 1292 Truncated incorrect CHAR(0) value: '5'
+Warning 1292 Truncated incorrect CHAR(0) value: '6'
+Warning 1292 Truncated incorrect CHAR(0) value: '7'
+Warning 1292 Truncated incorrect CHAR(0) value: '8'
+Warning 1292 Truncated incorrect CHAR(0) value: '9'
+Warning 1292 Truncated incorrect CHAR(0) value: '10'
+drop table t1;
diff --git a/mysql-test/r/partition_error.result b/mysql-test/r/partition_error.result
index 41ede085623..847af86913d 100644
--- a/mysql-test/r/partition_error.result
+++ b/mysql-test/r/partition_error.result
@@ -1764,6 +1764,11 @@ PARTITION pmax VALUES LESS THAN MAXVALUE);
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
DROP TABLE t1;
End of 5.1 tests
+create table t1 (a int) partition by list (values(a) div 1) (partition p0 values in (0), partition p1 values in (1));
+ERROR HY000: This partition function is not allowed
+create table t1 (a int) partition by list (uuid_short()) (partition p0 values in (0), partition p1 values in (1));
+ERROR 42000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed near ') (partition p0 values in (0), partition p1 values in (1))' at line 1
+End of 5.5 tests
CREATE TABLE t1 (a INT)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (a) SUBPARTITIONS 2
diff --git a/mysql-test/r/processlist.result b/mysql-test/r/processlist.result
index 127fa96b84b..0182245c278 100644
--- a/mysql-test/r/processlist.result
+++ b/mysql-test/r/processlist.result
@@ -1,15 +1,19 @@
SET DEBUG_SYNC = 'dispatch_command_before_set_time WAIT_FOR do_set_time';
SELECT 1;
SET DEBUG_SYNC = 'fill_schema_processlist_after_unow SIGNAL do_set_time WAIT_FOR fill_schema_proceed';
-SELECT INFO,TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NULL;
+SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID, ":") = ":TID:";
1
1
SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed';
-INFO TIME TIME_MS
-NULL 0 0.000
+ID TIME TIME_MS
+TID 0 0.000
+SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2';
+SET DEBUG_SYNC= 'now WAIT_FOR query_done';
+SET DEBUG_SYNC= 'now SIGNAL nosignal';
select sleep(5);
sleep(5)
0
+SET DEBUG_SYNC = 'now WAIT_FOR query_done';
select command, time < 5 from information_schema.processlist where id != connection_id();
command time < 5
Sleep 1
diff --git a/mysql-test/r/selectivity.result b/mysql-test/r/selectivity.result
index 9899b894ff6..3f2343fa365 100644
--- a/mysql-test/r/selectivity.result
+++ b/mysql-test/r/selectivity.result
@@ -1346,4 +1346,67 @@ foo foo 1
foo foo 2
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
DROP TABLE t1,t2;
+#
+# Bug mdev-6325: wrong selectivity of a column with ref access
+#
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int, key(a));
+insert into t2 select A.a + 10*B.a, 12345 from t0 A, t0 B, t0 C;
+set use_stat_tables='preferably';
+set histogram_size=100;
+set optimizer_use_condition_selectivity=4;
+analyze table t1 persistent for all;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+analyze table t2 persistent for all;
+Table Op Msg_type Msg_text
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status Table is already up to date
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t1.a<10;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 1000 0.99 Using where
+1 SIMPLE t2 ref a a 5 test.t1.a 10 100.00
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` straight_join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`a` < 10))
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t2.a<10;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 1000 0.99 Using where
+1 SIMPLE t2 ref a a 5 test.t1.a 10 100.00
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` straight_join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`a` < 10))
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+drop table t0,t1,t2;
+#
+# Bug mdev-6843: col IS NULL in where condition when col is always NULL
+#
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int);
+insert into t2 select NULL, a from t1;
+set use_stat_tables='preferably';
+set histogram_size=100;
+set optimizer_use_condition_selectivity=4;
+analyze table t2 persistent for all;
+Table Op Msg_type Msg_text
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status OK
+explain extended
+select * from t2 a straight_join t2 b where a.a is null;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE a ALL NULL NULL NULL NULL 1000 100.00 Using where
+1 SIMPLE b ALL NULL NULL NULL NULL 1000 100.00 Using join buffer (flat, BNL join)
+Warnings:
+Note 1003 select `test`.`a`.`a` AS `a`,`test`.`a`.`b` AS `b`,`test`.`b`.`a` AS `a`,`test`.`b`.`b` AS `b` from `test`.`t2` `a` straight_join `test`.`t2` `b` where isnull(`test`.`a`.`a`)
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+drop table t0,t1,t2;
set use_stat_tables=@save_use_stat_tables;
diff --git a/mysql-test/r/selectivity_innodb.result b/mysql-test/r/selectivity_innodb.result
index 90f6dba83f1..0b7f1c950e5 100644
--- a/mysql-test/r/selectivity_innodb.result
+++ b/mysql-test/r/selectivity_innodb.result
@@ -1356,6 +1356,134 @@ foo foo 1
foo foo 2
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
DROP TABLE t1,t2;
+#
+# Bug mdev-6325: wrong selectivity of a column with ref access
+#
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int, key(a));
+insert into t2 select A.a + 10*B.a, 12345 from t0 A, t0 B, t0 C;
+set use_stat_tables='preferably';
+set histogram_size=100;
+set optimizer_use_condition_selectivity=4;
+analyze table t1 persistent for all;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+analyze table t2 persistent for all;
+Table Op Msg_type Msg_text
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status OK
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t1.a<10;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 1000 0.99 Using where
+1 SIMPLE t2 ref a a 5 test.t1.a 10 100.00
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` straight_join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`a` < 10))
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t2.a<10;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 1000 0.99 Using where
+1 SIMPLE t2 ref a a 5 test.t1.a 10 100.00
+Warnings:
+Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` straight_join `test`.`t2` where ((`test`.`t2`.`a` = `test`.`t1`.`a`) and (`test`.`t1`.`a` < 10))
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+drop table t0,t1,t2;
+#
+# Bug mdev-6843: col IS NULL in where condition when col is always NULL
+#
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int);
+insert into t2 select NULL, a from t1;
+set use_stat_tables='preferably';
+set histogram_size=100;
+set optimizer_use_condition_selectivity=4;
+analyze table t2 persistent for all;
+Table Op Msg_type Msg_text
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status OK
+explain extended
+select * from t2 a straight_join t2 b where a.a is null;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE a ALL NULL NULL NULL NULL 1000 100.00 Using where
+1 SIMPLE b ALL NULL NULL NULL NULL 1000 100.00 Using join buffer (flat, BNL join)
+Warnings:
+Note 1003 select `test`.`a`.`a` AS `a`,`test`.`a`.`b` AS `b`,`test`.`b`.`a` AS `a`,`test`.`b`.`b` AS `b` from `test`.`t2` `a` straight_join `test`.`t2` `b` where isnull(`test`.`a`.`a`)
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+drop table t0,t1,t2;
set use_stat_tables=@save_use_stat_tables;
set optimizer_switch=@save_optimizer_switch_for_selectivity_test;
+set @tmp_ust= @@use_stat_tables;
+set @tmp_oucs= @@optimizer_use_condition_selectivity;
+#
+# MDEV-6808: MariaDB 10.0.13 crash with optimizer_use_condition_selectivity > 1
+#
+set @tmp_mdev6808= @@optimizer_use_condition_selectivity;
+SET optimizer_use_condition_selectivity = 2;
+CREATE TABLE t1 (
+event_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+PRIMARY KEY (event_id)
+) ENGINE=InnoDB;
+CREATE TABLE t2 (
+repost_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+subject_type varchar(24) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
+subject_id int(11) unsigned NOT NULL,
+object_type varchar(24) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
+object_id int(11) unsigned NOT NULL,
+is_private int(1) NOT NULL DEFAULT '0',
+PRIMARY KEY (repost_id),
+UNIQUE KEY `BETWEEN` (subject_type,subject_id,object_type,object_id,is_private),
+KEY SUBJECT (subject_type,subject_id),
+KEY OBJECT (object_type,object_id)
+) ENGINE=InnoDB;
+SELECT
+*
+FROM
+t2, t1
+WHERE
+t2.object_type = 'event' AND
+t2.object_id = t1.event_id AND
+t2.is_private = 0 AND
+t2.subject_id = 127994 AND
+t2.subject_type in ('user')
+;
+repost_id subject_type subject_id object_type object_id is_private event_id
+DROP TABLE t1, t2;
+set optimizer_use_condition_selectivity=@tmp_mdev6808;
+#
+# MDEV-6442: Assertion `join->best_read < double(...)' failed with optimizer_use_condition_selectivity >=3, ...
+#
+SET use_stat_tables = PREFERABLY;
+SET optimizer_use_condition_selectivity = 3;
+CREATE TABLE t1 ( a VARCHAR(3), b VARCHAR(8), KEY (a,b) ) ENGINE=InnoDB;
+INSERT INTO t1 VALUES ('USA','Chinese'),('USA','English');
+CREATE TABLE t2 (i INT) ENGINE=InnoDB;
+SELECT * FROM t1, t2 WHERE ( 't', 'o' ) IN (
+SELECT t1_2.b, t1_1.a FROM t1 AS t1_1 STRAIGHT_JOIN t1 AS t1_2 ON ( t1_2.a = t1_1.b )
+);
+a b i
+DROP TABLE t1,t2;
+#
+# MDEV-6738: use_stat_table + histograms crashing optimizer
+#
+set use_stat_tables='preferably';
+set optimizer_use_condition_selectivity=4;
+# Need innodb because there is a special kind of field_bit for non-myisam tables
+create table t1(col1 int, col2 bit(1) DEFAULT NULL) engine=innodb;
+select * from t1 where col2 != true;
+col1 col2
+drop table t1;
+#
+# End of 10.0 tests
+#
+set use_stat_tables= @tmp_ust;
+set optimizer_use_condition_selectivity= @tmp_oucs;
SET SESSION STORAGE_ENGINE=DEFAULT;
diff --git a/mysql-test/r/show_bad_definer-5553.result b/mysql-test/r/show_bad_definer-5553.result
new file mode 100644
index 00000000000..a1b8c6a7410
--- /dev/null
+++ b/mysql-test/r/show_bad_definer-5553.result
@@ -0,0 +1,13 @@
+create database mysqltest1;
+use mysqltest1;
+create table t1(id int primary key);
+create definer=unknownuser@'%' sql security definer view v1 as select t1.id from t1 group by t1.id;
+Warnings:
+Note 1449 The user specified as a definer ('unknownuser'@'%') does not exist
+show table status;
+Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
+t1 MyISAM 10 Fixed 0 0 0 # 1024 0 NULL # # NULL latin1_swedish_ci NULL
+v1 NULL NULL NULL NULL NULL NULL # NULL NULL NULL # # NULL NULL NULL NULL VIEW
+Warnings:
+Note 1449 The user specified as a definer ('unknownuser'@'%') does not exist
+drop database mysqltest1;
diff --git a/mysql-test/r/type_enum.result b/mysql-test/r/type_enum.result
index d373d14c089..dd9277517d8 100644
--- a/mysql-test/r/type_enum.result
+++ b/mysql-test/r/type_enum.result
@@ -1869,3 +1869,216 @@ AVG(f1)
1.5000
drop table t1;
End of 5.3 tests
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins comparing DATE/DATETIME and INT/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 ENUM('2001-01-01','2001/01/01'));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system PRIMARY NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
+c1
+2001-01-01
+2001-01-01
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE t1, t2;
+#
+# MDEV-6978 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
+#
+CREATE TABLE t1 (c1 ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+#
+# MDEV-6991 GROUP_MIN_MAX optimization is erroneously applied in some cases
+#
+CREATE TABLE t1 (id INT NOT NULL, a ENUM('04','03','02','01')) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,'01');
+INSERT INTO t1 VALUES (1,'02');
+INSERT INTO t1 VALUES (1,'03');
+INSERT INTO t1 VALUES (1,'04');
+INSERT INTO t1 VALUES (2,'01');
+INSERT INTO t1 VALUES (2,'02');
+INSERT INTO t1 VALUES (2,'03');
+INSERT INTO t1 VALUES (2,'04');
+INSERT INTO t1 VALUES (3,'01');
+INSERT INTO t1 VALUES (3,'02');
+INSERT INTO t1 VALUES (3,'03');
+INSERT INTO t1 VALUES (3,'04');
+INSERT INTO t1 VALUES (4,'01');
+INSERT INTO t1 VALUES (4,'02');
+INSERT INTO t1 VALUES (4,'03');
+INSERT INTO t1 VALUES (4,'04');
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+id MIN(a) MAX(a)
+1 02 04
+2 02 04
+3 02 04
+4 02 04
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+id MIN(a) MAX(a)
+1 02 04
+2 02 04
+3 02 04
+4 02 04
+ALTER TABLE t1 ADD KEY(id,a);
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+id MIN(a) MAX(a)
+1 02 04
+2 02 04
+3 02 04
+4 02 04
+# Should NOT use group_min_max optimization
+EXPLAIN SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL id 6 NULL 16 Using where; Using index
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+id MIN(a) MAX(a)
+1 02 04
+2 02 04
+3 02 04
+4 02 04
+# Should NOT use group_min_max optimization
+EXPLAIN SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL id 6 NULL 16 Using where; Using index
+DROP TABLE t1;
+#
+# MDEV-6993 Bad results with join comparing DECIMAL and ENUM/SET columns
+#
+CREATE TABLE t1 (c1 DECIMAL(10,1) PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+CREATE TABLE t2 (c1 ENUM('a','b'));
+INSERT INTO t2 VALUES ('a'),('b');
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+c1
+1.0
+2.0
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+c1
+1.0
+2.0
+SELECT t1.* FROM t1 LEFT OUTER JOIN t2 USING (c1);
+c1
+1.0
+2.0
+DROP TABLE t1,t2;
+CREATE TABLE t1 (a DECIMAL(10,1), b ENUM('1','2'));
+INSERT INTO t1 (a) VALUES (1),(2);
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+a b
+1.0 1
+2.0 2
+ALTER TABLE t1 MODIFY a ENUM('1','2');
+SELECT * FROM t1;
+a b
+1 1
+2 2
+DROP TABLE t1;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/type_float.result b/mysql-test/r/type_float.result
index f498b6889a5..57e2660750b 100644
--- a/mysql-test/r/type_float.result
+++ b/mysql-test/r/type_float.result
@@ -465,3 +465,70 @@ f
1
2
DROP TABLE t1;
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins comparing DATE/DATETIME and INT/DECIMAL/DOUBLE/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (a DATETIME PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01 00:00:00');
+CREATE TABLE t2 (a DOUBLE);
+INSERT INTO t2 VALUES (19990101000000);
+INSERT INTO t2 VALUES (990101000000);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 8 NULL 2 Using where; Using index
+DROP TABLE t1,t2;
+#
+# MDEV-6971 Bad results with joins comparing TIME and DOUBLE/DECIMAL columns
+#
+CREATE TABLE t1 (a TIME(6) PRIMARY KEY);
+INSERT INTO t1 VALUES ('10:20:30');
+CREATE TABLE t2 (a DOUBLE);
+INSERT INTO t2 VALUES (102030),(102030.000000001);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+# t2 should NOT be elimitated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 8 NULL 2 Using where; Using index
+DROP TABLE t1,t2;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result
index fb10e65c0ce..ab075d29e22 100644
--- a/mysql-test/r/type_newdecimal.result
+++ b/mysql-test/r/type_newdecimal.result
@@ -1988,3 +1988,93 @@ SELECT d1 * d2 FROM t1;
d1 * d2
0
DROP TABLE t1;
+select 0.000000000000000000000000000000000000000000000000001 mod 1;
+0.000000000000000000000000000000000000000000000000001 mod 1
+0.000000000000000000000000000000
+select 0.0000000001 mod 1;
+0.0000000001 mod 1
+0.0000000001
+select 0.01 mod 1;
+0.01 mod 1
+0.01
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (a DATETIME PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01 00:00:00');
+CREATE TABLE t2 (a DECIMAL(30,1));
+INSERT INTO t2 VALUES (19990101000000);
+INSERT INTO t2 VALUES (990101000000);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01 00:00:00
+1999-01-01 00:00:00
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 14 NULL 2 Using where; Using index
+DROP TABLE t1,t2;
+#
+# MDEV-6971 Bad results with joins comparing TIME and DOUBLE/DECIMAL columns
+#
+CREATE TABLE t1 (a TIME(6) PRIMARY KEY);
+INSERT INTO t1 VALUES ('10:20:30');
+CREATE TABLE t2 (a DECIMAL(30,10));
+INSERT INTO t2 VALUES (102030),(102030.000000001);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+Warnings:
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000010'
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+Warnings:
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000010'
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+Warnings:
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000010'
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+a
+10:20:30.000000
+10:20:30.000000
+Warnings:
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000000'
+Note 1292 Truncated incorrect time value: '102030.0000000010'
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 14 NULL 2 Using where; Using index
+DROP TABLE t1,t2;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/type_set.result b/mysql-test/r/type_set.result
index 09531ec60d5..f3b7019c989 100644
--- a/mysql-test/r/type_set.result
+++ b/mysql-test/r/type_set.result
@@ -104,3 +104,162 @@ INSERT INTO t1 ( set_unique_utf8 ) VALUES ( '' );
ERROR 23000: Duplicate entry '' for key 'set_unique_utf8'
DROP TABLE t1;
End of 5.0 tests
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins compating DATE and INT/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 SET('2001-01-01','2001/01/01'));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system PRIMARY NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE t1, t2;
+#
+# MDEV-6978 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
+#
+CREATE TABLE t1 (c1 ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+c1
+a
+a
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 1 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+#
+# MDEV-6993 Bad results with join comparing DECIMAL and ENUM/SET columns
+#
+CREATE TABLE t1 (c1 DECIMAL(10,1) PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+CREATE TABLE t2 (c1 SET('a','b'));
+INSERT INTO t2 VALUES ('a'),('b');
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+c1
+1.0
+2.0
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+c1
+1.0
+2.0
+SELECT t1.* FROM t1 LEFT OUTER JOIN t2 USING (c1);
+c1
+1.0
+2.0
+DROP TABLE t1,t2;
+CREATE TABLE t1 (a DECIMAL(10,1), b SET('1','2'));
+INSERT INTO t1 (a) VALUES (1),(2);
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+a b
+1.0 1
+2.0 2
+ALTER TABLE t1 MODIFY a SET('1','2');
+SELECT * FROM t1;
+a b
+1 1
+2 2
+DROP TABLE t1;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/type_time.result b/mysql-test/r/type_time.result
index 55b3ca1a1f4..477703edebb 100644
--- a/mysql-test/r/type_time.result
+++ b/mysql-test/r/type_time.result
@@ -369,6 +369,17 @@ SELECT '-24:00:00' = (SELECT f1 FROM t1);
1
DROP TABLE t1;
#
+# MDEV-6592 Assertion `ltime->day == 0' failed with TIMESTAMP, MAKETIME
+#
+CREATE TABLE t1 (d DATE, c VARCHAR(10), KEY(d)) engine=myisam;
+INSERT INTO t1 VALUES ('2008-10-02','2008-10-02'), ('2008-10-02','2008-10-02');
+SELECT * FROM t1 WHERE TIMESTAMP(c,'02:04:42') AND d <=> MAKETIME(97,0,7);
+d c
+DROP TABLE t1;
+#
+# End of 5.5 tests
+#
+#
# Start of 10.0 tests
#
#
diff --git a/mysql-test/r/type_uint.result b/mysql-test/r/type_uint.result
index e08605fb237..10aa2f2f393 100644
--- a/mysql-test/r/type_uint.result
+++ b/mysql-test/r/type_uint.result
@@ -14,3 +14,40 @@ this
0
4294967295
drop table t1;
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (a DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01');
+CREATE TABLE t2 (a INT UNSIGNED);
+INSERT INTO t2 VALUES (19990101);
+INSERT INTO t2 VALUES (990101);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01
+1999-01-01
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01
+1999-01-01
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+a
+1999-01-01
+1999-01-01
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+a
+1999-01-01
+1999-01-01
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 4 NULL 2 Using where; Using index
+DROP TABLE t1,t2;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/type_varchar.result b/mysql-test/r/type_varchar.result
index 38ed8a47339..965d113124b 100644
--- a/mysql-test/r/type_varchar.result
+++ b/mysql-test/r/type_varchar.result
@@ -510,3 +510,44 @@ SELECT 5 = a FROM t1;
Warnings:
Warning 1292 Truncated incorrect DOUBLE value: 's '
DROP TABLE t1;
+#
+# Start of 10.0 tests
+#
+#
+# MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+#
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 VARCHAR(20));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system PRIMARY NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 22 NULL 2 Using where; Using index
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+c1
+2001-01-01
+2001-01-01
+# t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+1 SIMPLE t2 index PRIMARY PRIMARY 22 NULL 2 Using where; Using index
+DROP TABLE IF EXISTS t1,t2;
+#
+# End of 10.0 tests
+#
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 25de5ee4648..6d086163aff 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -1915,6 +1915,26 @@ id select_type table type possible_keys key key_len ref rows Extra
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
drop table t1;
#
+# MDEV-6868:MariaDB server crash ( select with union and order by
+# with subquery )
+#
+CREATE TABLE t1 ( id INTEGER, sample_name1 VARCHAR(100), sample_name2 VARCHAR(100), PRIMARY KEY(id) );
+INSERT INTO t1 ( id, sample_name1, sample_name2 ) VALUES ( 1, 'aaaa', 'bbbb' ), ( 2, 'cccc', 'dddd' );
+(
+SELECT sample_name1 AS testname FROM t1
+)
+UNION
+(
+SELECT sample_name2 AS testname FROM t1 C ORDER BY (SELECT T.sample_name1 FROM t1 T WHERE T.id = C.id)
+)
+;
+testname
+aaaa
+cccc
+bbbb
+dddd
+drop table t1;
+#
# WL#1763 Avoid creating temporary table in UNION ALL
#
EXPLAIN SELECT 1 UNION ALL SELECT 1 LIMIT 1 OFFSET 1;
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index ca08c53cabe..ff155e5fe15 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -5500,6 +5500,20 @@ a b a b a c
9 10 9 10 9 10
drop view v1;
drop table t1,t2;
+create table t1 (i int not null);
+insert into t1 values (1),(2);
+create table t2 (j int not null);
+insert into t2 values (11),(12);
+create algorithm=merge view v3 as select t1.* from t2 left join t1 on (t2.j = t1.i);
+prepare stmt from 'select count(v3.i) from t1, v3';
+execute stmt;
+count(v3.i)
+0
+execute stmt;
+count(v3.i)
+0
+drop table t1, t2;
+drop view v3;
# -----------------------------------------------------------------
# -- End of 10.0 tests.
# -----------------------------------------------------------------
diff --git a/mysql-test/suite.pm b/mysql-test/suite.pm
index 7f7f1f599a1..ffb34f5a8cf 100644
--- a/mysql-test/suite.pm
+++ b/mysql-test/suite.pm
@@ -62,6 +62,9 @@ sub skip_combinations {
}
$skip{'include/check_ipv6.inc'} = 'No IPv6' unless ipv6_ok();
+ $skip{'t/openssl_6975.test'} = 'no or too old openssl'
+ unless ! IS_WINDOWS and ! system "openssl ciphers TLSv1.2 >/dev/null 2>&1";
+
%skip;
}
diff --git a/mysql-test/suite/binlog/r/load_data_stm_view.result b/mysql-test/suite/binlog/r/load_data_stm_view.result
new file mode 100644
index 00000000000..ddbdb71983f
--- /dev/null
+++ b/mysql-test/suite/binlog/r/load_data_stm_view.result
@@ -0,0 +1,24 @@
+create table t1 (i int, j int);
+create view v1 as select i from t1;
+LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/3940.data' INTO TABLE v1 (i);
+LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/3940.data' INTO TABLE v1;
+select * from v1;
+i
+1
+1
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; create table t1 (i int, j int)
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select i from t1
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
+master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/3940.data' IGNORE INTO TABLE `v1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`i`) ;file_id=#
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
+master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA LOCAL INFILE 'MYSQLTEST_VARDIR/3940.data' IGNORE INTO TABLE `v1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`i`) ;file_id=#
+master-bin.000001 # Query # # COMMIT
+drop view v1;
+drop table t1;
diff --git a/mysql-test/suite/binlog/t/load_data_stm_view.test b/mysql-test/suite/binlog/t/load_data_stm_view.test
new file mode 100644
index 00000000000..b70651b4e2d
--- /dev/null
+++ b/mysql-test/suite/binlog/t/load_data_stm_view.test
@@ -0,0 +1,20 @@
+#
+# MDEV-3940 Server crash or assertion `item->type() == Item::STRING_ITEM' failure on LOAD DATA through a view with statement binary logging
+#
+
+--source include/have_binlog_format_statement.inc
+
+--write_file $MYSQLTEST_VARDIR/3940.data
+1
+EOF
+
+create table t1 (i int, j int);
+create view v1 as select i from t1;
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/3940.data' INTO TABLE v1 (i)
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/3940.data' INTO TABLE v1
+select * from v1;
+--source include/show_binlog_events.inc
+drop view v1;
+drop table t1;
diff --git a/mysql-test/suite/heap/btree_varchar_null.result b/mysql-test/suite/heap/btree_varchar_null.result
new file mode 100644
index 00000000000..9199cf6ef7d
--- /dev/null
+++ b/mysql-test/suite/heap/btree_varchar_null.result
@@ -0,0 +1,6 @@
+create table t1 (f1 varchar(128), f2 varchar(128), key (f2,f1) using btree) engine=memory;
+insert into t1 values (null,'not'),('one',null),('two',null),('three','');
+select * from t1 where f1 = 'one' and f2 is null;
+f1 f2
+one NULL
+drop table t1;
diff --git a/mysql-test/suite/heap/btree_varchar_null.test b/mysql-test/suite/heap/btree_varchar_null.test
new file mode 100644
index 00000000000..8e6625a2bfa
--- /dev/null
+++ b/mysql-test/suite/heap/btree_varchar_null.test
@@ -0,0 +1,7 @@
+#
+# MDEV-4813 Replication fails on updating a MEMORY table with an index using btree
+#
+create table t1 (f1 varchar(128), f2 varchar(128), key (f2,f1) using btree) engine=memory;
+insert into t1 values (null,'not'),('one',null),('two',null),('three','');
+select * from t1 where f1 = 'one' and f2 is null;
+drop table t1;
diff --git a/mysql-test/suite/innodb/disabled.def b/mysql-test/suite/innodb/disabled.def
index ad1323d4857..8cae44a3607 100644
--- a/mysql-test/suite/innodb/disabled.def
+++ b/mysql-test/suite/innodb/disabled.def
@@ -9,4 +9,4 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
-innodb_bug14676111: MDEV-4396
+
diff --git a/mysql-test/suite/innodb/r/foreign-keys.result b/mysql-test/suite/innodb/r/foreign-keys.result
new file mode 100644
index 00000000000..53ddf618244
--- /dev/null
+++ b/mysql-test/suite/innodb/r/foreign-keys.result
@@ -0,0 +1,16 @@
+#
+# Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE
+# ADD FOREIGN KEY
+#
+CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT,
+PRIMARY KEY (`department_id`)) engine=innodb;
+CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT,
+`title_reporter_fk` INT, PRIMARY KEY (`title_id`)) engine=innodb;
+CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)) engine=innodb;
+ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES
+`people` (`people_id`);
+ALTER TABLE `title` ADD FOREIGN KEY (`title_manager_fk`) REFERENCES `people`
+(`people_id`);
+ALTER TABLE `title` ADD FOREIGN KEY (`title_reporter_fk`) REFERENCES `people`
+(`people_id`);
+drop table title, department, people;
diff --git a/mysql-test/suite/innodb/r/innodb-mdev7046.result b/mysql-test/suite/innodb/r/innodb-mdev7046.result
new file mode 100644
index 00000000000..db183346df5
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb-mdev7046.result
@@ -0,0 +1,22 @@
+call mtr.add_suppression("InnoDB: File ./test/t1*");
+call mtr.add_suppression("nnoDB: Error number*");
+USE test;
+create table t1(f1 INT,f2 INT,f3 CHAR (10),primary key(f1,f2)) partition by range(f1) subpartition by hash(f2) subpartitions 2 (partition p1 values less than (0),partition p2 values less than (2),partition p3 values less than (2147483647));
+RENAME TABLE t1 TO `t2_new..............................................end`;
+ERROR HY000: Error on rename of 't2_new' (Errcode: 36 "File name too long")
+alter table t1 engine=innodb;
+RENAME TABLE t1 TO `t2_new..............................................end`;
+ERROR HY000: Error on rename of 't2_new' (errno: -1 "Internal error < 0 (Not system error)")
+show warnings;
+Level Code Message
+Error 1025 Error on rename of 't2_new' (errno: -1 "Internal error < 0 (Not system error)")
+drop table t1;
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+SET @@session.storage_engine=MYISAM;
+CREATE TABLE t1(id INT,purchased DATE)PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2 (PARTITION p0 VALUES LESS THAN MAXVALUE (SUBPARTITION sp0 DATA DIRECTORY='/tmp/not-existing' INDEX DIRECTORY='/tmp/not-existing',SUBPARTITION sp1));
+ERROR HY000: Can't create/write to file '/tmp/not-existing/t1#P#p0#SP#sp0.MYI' (Errcode: 2 "No such file or directory")
+CREATE TABLE t1(id INT,purchased DATE)PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2 (PARTITION p0 VALUES LESS THAN MAXVALUE (SUBPARTITION sp0,SUBPARTITION sp1));
+ALTER TABLE t1 ENGINE=InnoDB;
+drop table t1;
diff --git a/mysql-test/suite/innodb/r/innodb-stats-sample.result b/mysql-test/suite/innodb/r/innodb-stats-sample.result
new file mode 100644
index 00000000000..a049a1d82c1
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb-stats-sample.result
@@ -0,0 +1,4 @@
+Variable_name Value
+innodb_stats_sample_pages 1
+Variable_name Value
+innodb_stats_traditional OFF
diff --git a/mysql-test/suite/innodb/r/innodb_bug14676111.result b/mysql-test/suite/innodb/r/innodb_bug14676111.result
index ebecd1d00cb..c2fdfee5522 100644
--- a/mysql-test/suite/innodb/r/innodb_bug14676111.result
+++ b/mysql-test/suite/innodb/r/innodb_bug14676111.result
@@ -1,4 +1,6 @@
drop table if exists t1;
+call mtr.add_suppression("option 'innodb-purge-threads': unsigned value 0 adjusted to*");
+set global innodb_stats_persistent = false;
CREATE TABLE t1 (a int not null primary key) engine=InnoDB;
set global innodb_limit_optimistic_insert_debug = 2;
insert into t1 values (1);
@@ -9,45 +11,55 @@ insert into t1 values (2);
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-10.0000
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+10
delete from t1 where a=4;
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-8.0000
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+8
delete from t1 where a=5;
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-5.0000
-set global innodb_limit_optimistic_insert_debug = 10000;
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+5
+set global innodb_limit_optimistic_insert_debug = 0;
delete from t1 where a=2;
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-3.0000
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+3
insert into t1 values (2);
delete from t1 where a=2;
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-2.0000
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+2
insert into t1 values (2);
delete from t1 where a=2;
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
-DATA_LENGTH / 16384
-1.0000
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
+CLUST_INDEX_SIZE
+1
drop table t1;
diff --git a/mysql-test/suite/innodb/r/innodb_monitor.result b/mysql-test/suite/innodb/r/innodb_monitor.result
new file mode 100644
index 00000000000..84668cf49d0
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb_monitor.result
@@ -0,0 +1,605 @@
+set global innodb_monitor_disable = All;
+select name, status from information_schema.innodb_metrics;
+name status
+metadata_table_handles_opened disabled
+metadata_table_handles_closed disabled
+metadata_table_reference_count disabled
+metadata_mem_pool_size disabled
+lock_deadlocks disabled
+lock_timeouts disabled
+lock_rec_lock_waits disabled
+lock_table_lock_waits disabled
+lock_rec_lock_requests disabled
+lock_rec_lock_created disabled
+lock_rec_lock_removed disabled
+lock_rec_locks disabled
+lock_table_lock_created disabled
+lock_table_lock_removed disabled
+lock_table_locks disabled
+lock_row_lock_current_waits disabled
+lock_row_lock_time disabled
+lock_row_lock_time_max disabled
+lock_row_lock_waits disabled
+lock_row_lock_time_avg disabled
+buffer_pool_size disabled
+buffer_pool_reads disabled
+buffer_pool_read_requests disabled
+buffer_pool_write_requests disabled
+buffer_pool_wait_free disabled
+buffer_pool_read_ahead disabled
+buffer_pool_read_ahead_evicted disabled
+buffer_pool_pages_total disabled
+buffer_pool_pages_misc disabled
+buffer_pool_pages_data disabled
+buffer_pool_bytes_data disabled
+buffer_pool_pages_dirty disabled
+buffer_pool_bytes_dirty disabled
+buffer_pool_pages_free disabled
+buffer_pages_created disabled
+buffer_pages_written disabled
+buffer_index_pages_written disabled
+buffer_non_index_pages_written disabled
+buffer_pages_read disabled
+buffer_index_sec_rec_cluster_reads disabled
+buffer_index_sec_rec_cluster_reads_avoided disabled
+buffer_data_reads disabled
+buffer_data_written disabled
+buffer_flush_batch_scanned disabled
+buffer_flush_batch_num_scan disabled
+buffer_flush_batch_scanned_per_call disabled
+buffer_flush_batch_rescan disabled
+buffer_flush_batch_total_pages disabled
+buffer_flush_batches disabled
+buffer_flush_batch_pages disabled
+buffer_flush_neighbor_total_pages disabled
+buffer_flush_neighbor disabled
+buffer_flush_neighbor_pages disabled
+buffer_flush_n_to_flush_requested disabled
+buffer_flush_avg_page_rate disabled
+buffer_flush_lsn_avg_rate disabled
+buffer_flush_pct_for_dirty disabled
+buffer_flush_pct_for_lsn disabled
+buffer_flush_sync_waits disabled
+buffer_flush_adaptive_total_pages disabled
+buffer_flush_adaptive disabled
+buffer_flush_adaptive_pages disabled
+buffer_flush_sync_total_pages disabled
+buffer_flush_sync disabled
+buffer_flush_sync_pages disabled
+buffer_flush_background_total_pages disabled
+buffer_flush_background disabled
+buffer_flush_background_pages disabled
+buffer_LRU_batch_scanned disabled
+buffer_LRU_batch_num_scan disabled
+buffer_LRU_batch_scanned_per_call disabled
+buffer_LRU_batch_flush_total_pages disabled
+buffer_LRU_batches_flush disabled
+buffer_LRU_batch_flush_pages disabled
+buffer_LRU_batch_evict_total_pages disabled
+buffer_LRU_batches_evict disabled
+buffer_LRU_batch_evict_pages disabled
+buffer_LRU_single_flush_scanned disabled
+buffer_LRU_single_flush_num_scan disabled
+buffer_LRU_single_flush_scanned_per_call disabled
+buffer_LRU_single_flush_failure_count disabled
+buffer_LRU_get_free_search disabled
+buffer_LRU_search_scanned disabled
+buffer_LRU_search_num_scan disabled
+buffer_LRU_search_scanned_per_call disabled
+buffer_LRU_unzip_search_scanned disabled
+buffer_LRU_unzip_search_num_scan disabled
+buffer_LRU_unzip_search_scanned_per_call disabled
+buffer_page_read_index_leaf disabled
+buffer_page_read_index_non_leaf disabled
+buffer_page_read_index_ibuf_leaf disabled
+buffer_page_read_index_ibuf_non_leaf disabled
+buffer_page_read_undo_log disabled
+buffer_page_read_index_inode disabled
+buffer_page_read_ibuf_free_list disabled
+buffer_page_read_ibuf_bitmap disabled
+buffer_page_read_system_page disabled
+buffer_page_read_trx_system disabled
+buffer_page_read_fsp_hdr disabled
+buffer_page_read_xdes disabled
+buffer_page_read_blob disabled
+buffer_page_read_zblob disabled
+buffer_page_read_zblob2 disabled
+buffer_page_read_other disabled
+buffer_page_written_index_leaf disabled
+buffer_page_written_index_non_leaf disabled
+buffer_page_written_index_ibuf_leaf disabled
+buffer_page_written_index_ibuf_non_leaf disabled
+buffer_page_written_undo_log disabled
+buffer_page_written_index_inode disabled
+buffer_page_written_ibuf_free_list disabled
+buffer_page_written_ibuf_bitmap disabled
+buffer_page_written_system_page disabled
+buffer_page_written_trx_system disabled
+buffer_page_written_fsp_hdr disabled
+buffer_page_written_xdes disabled
+buffer_page_written_blob disabled
+buffer_page_written_zblob disabled
+buffer_page_written_zblob2 disabled
+buffer_page_written_other disabled
+os_data_reads disabled
+os_data_writes disabled
+os_data_fsyncs disabled
+os_pending_reads disabled
+os_pending_writes disabled
+os_log_bytes_written disabled
+os_log_fsyncs disabled
+os_log_pending_fsyncs disabled
+os_log_pending_writes disabled
+trx_rw_commits disabled
+trx_ro_commits disabled
+trx_nl_ro_commits disabled
+trx_commits_insert_update disabled
+trx_rollbacks disabled
+trx_rollbacks_savepoint disabled
+trx_rollback_active disabled
+trx_active_transactions disabled
+trx_rseg_history_len disabled
+trx_undo_slots_used disabled
+trx_undo_slots_cached disabled
+trx_rseg_current_size disabled
+purge_del_mark_records disabled
+purge_upd_exist_or_extern_records disabled
+purge_invoked disabled
+purge_undo_log_pages disabled
+purge_dml_delay_usec disabled
+purge_stop_count disabled
+purge_resume_count disabled
+log_checkpoints disabled
+log_lsn_last_flush disabled
+log_lsn_last_checkpoint disabled
+log_lsn_current disabled
+log_lsn_checkpoint_age disabled
+log_lsn_buf_pool_oldest disabled
+log_max_modified_age_async disabled
+log_max_modified_age_sync disabled
+log_pending_log_writes disabled
+log_pending_checkpoint_writes disabled
+log_num_log_io disabled
+log_waits disabled
+log_write_requests disabled
+log_writes disabled
+compress_pages_compressed disabled
+compress_pages_decompressed disabled
+compression_pad_increments disabled
+compression_pad_decrements disabled
+compress_saved disabled
+compress_trim_sect512 disabled
+compress_trim_sect1024 disabled
+compress_trim_sect2048 disabled
+compress_trim_sect4096 disabled
+compress_trim_sect8192 disabled
+compress_trim_sect16384 disabled
+compress_trim_sect32768 disabled
+compress_pages_page_compressed disabled
+compress_page_compressed_trim_op disabled
+compress_page_compressed_trim_op_saved disabled
+compress_pages_page_decompressed disabled
+compress_pages_page_compression_error disabled
+index_page_splits disabled
+index_page_merge_attempts disabled
+index_page_merge_successful disabled
+index_page_reorg_attempts disabled
+index_page_reorg_successful disabled
+index_page_discards disabled
+adaptive_hash_searches disabled
+adaptive_hash_searches_btree disabled
+adaptive_hash_pages_added disabled
+adaptive_hash_pages_removed disabled
+adaptive_hash_rows_added disabled
+adaptive_hash_rows_removed disabled
+adaptive_hash_rows_deleted_no_hash_entry disabled
+adaptive_hash_rows_updated disabled
+file_num_open_files disabled
+ibuf_merges_insert disabled
+ibuf_merges_delete_mark disabled
+ibuf_merges_delete disabled
+ibuf_merges_discard_insert disabled
+ibuf_merges_discard_delete_mark disabled
+ibuf_merges_discard_delete disabled
+ibuf_merges disabled
+ibuf_size disabled
+innodb_master_thread_sleeps disabled
+innodb_activity_count disabled
+innodb_master_active_loops disabled
+innodb_master_idle_loops disabled
+innodb_background_drop_table_usec disabled
+innodb_ibuf_merge_usec disabled
+innodb_log_flush_usec disabled
+innodb_mem_validate_usec disabled
+innodb_master_purge_usec disabled
+innodb_dict_lru_usec disabled
+innodb_checkpoint_usec disabled
+innodb_dblwr_writes disabled
+innodb_dblwr_pages_written disabled
+innodb_page_size disabled
+innodb_rwlock_s_spin_waits disabled
+innodb_rwlock_x_spin_waits disabled
+innodb_rwlock_s_spin_rounds disabled
+innodb_rwlock_x_spin_rounds disabled
+innodb_rwlock_s_os_waits disabled
+innodb_rwlock_x_os_waits disabled
+dml_reads disabled
+dml_inserts disabled
+dml_deletes disabled
+dml_updates disabled
+dml_system_reads disabled
+dml_system_inserts disabled
+dml_system_deletes disabled
+dml_system_updates disabled
+ddl_background_drop_indexes disabled
+ddl_background_drop_tables disabled
+ddl_online_create_index disabled
+ddl_pending_alter_table disabled
+icp_attempts disabled
+icp_no_match disabled
+icp_out_of_range disabled
+icp_match disabled
+set global innodb_monitor_enable = all;
+select name from information_schema.innodb_metrics where status!='enabled';
+name
+set global innodb_monitor_enable = aaa;
+ERROR 42000: Variable 'innodb_monitor_enable' can't be set to the value of 'aaa'
+set global innodb_monitor_disable = All;
+select name from information_schema.innodb_metrics where status!='disabled';
+name
+set global innodb_monitor_reset_all = all;
+select name from information_schema.innodb_metrics where count!=0;
+name
+set global innodb_monitor_enable = "%lock%";
+select name from information_schema.innodb_metrics
+where status != IF(name like "%lock%", 'enabled', 'disabled');
+name
+set global innodb_monitor_disable = "%lock%";
+select name, status from information_schema.innodb_metrics
+where name like "%lock%";
+name status
+lock_deadlocks disabled
+lock_timeouts disabled
+lock_rec_lock_waits disabled
+lock_table_lock_waits disabled
+lock_rec_lock_requests disabled
+lock_rec_lock_created disabled
+lock_rec_lock_removed disabled
+lock_rec_locks disabled
+lock_table_lock_created disabled
+lock_table_lock_removed disabled
+lock_table_locks disabled
+lock_row_lock_current_waits disabled
+lock_row_lock_time disabled
+lock_row_lock_time_max disabled
+lock_row_lock_waits disabled
+lock_row_lock_time_avg disabled
+innodb_rwlock_s_spin_waits disabled
+innodb_rwlock_x_spin_waits disabled
+innodb_rwlock_s_spin_rounds disabled
+innodb_rwlock_x_spin_rounds disabled
+innodb_rwlock_s_os_waits disabled
+innodb_rwlock_x_os_waits disabled
+set global innodb_monitor_enable = "%lock*";
+ERROR 42000: Variable 'innodb_monitor_enable' can't be set to the value of '%lock*'
+set global innodb_monitor_enable="%%%%%%%%%%%%%%%%%%%%%%%%%%%";
+select name from information_schema.innodb_metrics where status!='enabled';
+name
+set global innodb_monitor_disable="%%%%%";
+select name from information_schema.innodb_metrics where status!='disabled';
+name
+set global innodb_monitor_enable="%";
+select name from information_schema.innodb_metrics where status!='enabled';
+name
+set global innodb_monitor_disable="%_%";
+select name from information_schema.innodb_metrics where status!='disabled';
+name
+set global innodb_monitor_enable="log%%%%";
+select name from information_schema.innodb_metrics
+where status != IF(name like "log%", 'enabled', 'disabled');
+name
+set global innodb_monitor_enable="os_%a_fs_ncs";
+set global innodb_monitor_enable="os%pending%";
+select name, status from information_schema.innodb_metrics
+where name like "os%";
+name status
+os_data_reads disabled
+os_data_writes disabled
+os_data_fsyncs enabled
+os_pending_reads enabled
+os_pending_writes enabled
+os_log_bytes_written disabled
+os_log_fsyncs disabled
+os_log_pending_fsyncs enabled
+os_log_pending_writes enabled
+set global innodb_monitor_enable="";
+ERROR 42000: Variable 'innodb_monitor_enable' can't be set to the value of ''
+set global innodb_monitor_enable="_";
+ERROR 42000: Variable 'innodb_monitor_enable' can't be set to the value of '_'
+set global innodb_monitor_disable = module_metadata;
+set global innodb_monitor_reset_all = module_metadata;
+set global innodb_monitor_enable = metadata_table_handles_opened;
+create table monitor_test(col int) engine = innodb;
+select * from monitor_test;
+col
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 1 NULL 1 1 NULL 1 enabled
+set global innodb_monitor_reset = metadata_table_handles_opened;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 1 NULL 1 NULL NULL 0 enabled
+drop table monitor_test;
+create table monitor_test(col int) engine = innodb;
+select * from monitor_test;
+col
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 1 NULL 1 enabled
+set global innodb_monitor_reset_all = metadata_table_handles_opened;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 1 NULL 1 enabled
+set global innodb_monitor_disable = metadata_table_handles_opened;
+set global innodb_monitor_reset = metadata_table_handles_opened;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 NULL NULL 0 disabled
+drop table monitor_test;
+create table monitor_test(col int) engine = innodb;
+select * from monitor_test;
+col
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 NULL NULL 0 disabled
+set global innodb_monitor_reset_all = metadata_table_handles_opened;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_enable = metadata_table_handles_opened;
+drop table monitor_test;
+create table monitor_test(col int) engine = innodb stats_persistent=0;
+select * from monitor_test;
+col
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 1 NULL 1 1 NULL 1 enabled
+set global innodb_monitor_enable = metadata_table_handles_closed;
+create index idx on monitor_test(col);
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_closed";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_closed 1 NULL 1 1 NULL 1 enabled
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 2 NULL 2 enabled
+metadata_table_handles_closed 1 NULL 1 1 NULL 1 enabled
+metadata_table_reference_count NULL NULL 0 NULL NULL 0 disabled
+metadata_mem_pool_size NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_disable = module_metadata;
+set global innodb_monitor_reset = module_metadata;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened 2 NULL 2 NULL NULL 0 disabled
+metadata_table_handles_closed 1 NULL 1 NULL NULL 0 disabled
+metadata_table_reference_count NULL NULL 0 NULL NULL 0 disabled
+metadata_mem_pool_size NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_reset_all = module_metadata;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+metadata_table_handles_opened NULL NULL 0 NULL NULL 0 disabled
+metadata_table_handles_closed NULL NULL 0 NULL NULL 0 disabled
+metadata_table_reference_count NULL NULL 0 NULL NULL 0 disabled
+metadata_mem_pool_size NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_enable = module_trx;
+begin;
+insert into monitor_test values(9);
+commit;
+begin;
+insert into monitor_test values(9);
+rollback;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "trx_rollbacks" or name like "trx_active_transactions";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+trx_rollbacks 1 NULL 1 1 NULL 1 enabled
+trx_active_transactions 1 0 0 1 0 0 enabled
+set global innodb_monitor_disable = module_trx;
+set global innodb_monitor_enable = module_dml;
+insert into monitor_test values(9);
+update monitor_test set col = 10 where col = 9;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 4 NULL 4 4 NULL 4 enabled
+dml_inserts 1 NULL 1 1 NULL 1 enabled
+dml_deletes 0 NULL 0 0 NULL 0 enabled
+dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
+delete from monitor_test;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 6 NULL 6 6 NULL 6 enabled
+dml_inserts 1 NULL 1 1 NULL 1 enabled
+dml_deletes 2 NULL 2 2 NULL 2 enabled
+dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
+set global innodb_monitor_reset = module_dml;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 6 NULL 6 0 NULL 0 enabled
+dml_inserts 1 NULL 1 0 NULL 0 enabled
+dml_deletes 2 NULL 2 0 NULL 0 enabled
+dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
+insert into monitor_test values(9);
+insert into monitor_test values(1);
+delete from monitor_test;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 8 NULL 8 2 NULL 2 enabled
+dml_inserts 3 NULL 3 2 NULL 2 enabled
+dml_deletes 4 NULL 4 2 NULL 2 enabled
+dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
+set global innodb_monitor_reset_all = module_dml;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 8 NULL 8 2 NULL 2 enabled
+dml_inserts 3 NULL 3 2 NULL 2 enabled
+dml_deletes 4 NULL 4 2 NULL 2 enabled
+dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
+set global innodb_monitor_disable = module_dml;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads 8 NULL 8 2 NULL 2 disabled
+dml_inserts 3 NULL 3 2 NULL 2 disabled
+dml_deletes 4 NULL 4 2 NULL 2 disabled
+dml_updates 2 NULL 2 0 NULL 0 disabled
+dml_system_reads 0 NULL 0 0 NULL 0 disabled
+dml_system_inserts 0 NULL 0 0 NULL 0 disabled
+dml_system_deletes 0 NULL 0 0 NULL 0 disabled
+dml_system_updates 0 NULL 0 0 NULL 0 disabled
+set global innodb_monitor_reset_all = module_dml;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads NULL NULL 0 NULL NULL 0 disabled
+dml_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_enable = dml_inserts;
+insert into monitor_test values(9);
+insert into monitor_test values(1);
+delete from monitor_test;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+dml_reads NULL NULL 0 NULL NULL 0 disabled
+dml_inserts 2 NULL 2 2 NULL 2 enabled
+dml_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
+set global innodb_monitor_disable = module_dml;
+drop table monitor_test;
+set global innodb_monitor_enable = file_num_open_files;
+select name, max_count, min_count, count,
+max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "file_num_open_files";
+name max_count min_count count max_count_reset min_count_reset count_reset status
+file_num_open_files # # # # # # enabled
+set global innodb_monitor_disable = file_num_open_files;
+set global innodb_monitor_enable = "icp%";
+create table monitor_test(a char(3), b int, c char(2),
+primary key (a(1), c(1)), key(b)) engine = innodb;
+insert into monitor_test values("13", 2, "aa");
+select a from monitor_test where b < 1 for update;
+a
+select name, count from information_schema.innodb_metrics
+where name like "icp%";
+name count
+icp_attempts 1
+icp_no_match 0
+icp_out_of_range 1
+icp_match 0
+select a from monitor_test where b < 3 for update;
+a
+13
+select name, count from information_schema.innodb_metrics
+where name like "icp%";
+name count
+icp_attempts 2
+icp_no_match 0
+icp_out_of_range 1
+icp_match 1
+drop table monitor_test;
+set global innodb_monitor_disable = all;
+set global innodb_monitor_reset_all = all;
+select 1 from `information_schema`.`INNODB_METRICS`
+where case (1) when (1) then (AVG_COUNT_RESET) else (1) end;
+1
+set global innodb_monitor_enable = default;
+set global innodb_monitor_disable = default;
+set global innodb_monitor_reset = default;
+set global innodb_monitor_reset_all = default;
diff --git a/mysql-test/suite/innodb/t/foreign-keys.test b/mysql-test/suite/innodb/t/foreign-keys.test
new file mode 100644
index 00000000000..8ee96347208
--- /dev/null
+++ b/mysql-test/suite/innodb/t/foreign-keys.test
@@ -0,0 +1,31 @@
+--source include/have_innodb.inc
+--source include/have_debug.inc
+
+if (`select plugin_auth_version <= "5.5.39-MariaDB-36.0" from information_schema.plugins where plugin_name='innodb'`)
+{
+ --skip Not fixed in XtraDB as of 5.5.39-MariaDB-36.0 or earlier
+}
+
+--echo #
+--echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE
+--echo # ADD FOREIGN KEY
+--echo #
+
+CREATE TABLE `department` (`department_id` INT, `department_people_fk` INT,
+PRIMARY KEY (`department_id`)) engine=innodb;
+
+CREATE TABLE `title` (`title_id` INT, `title_manager_fk` INT,
+`title_reporter_fk` INT, PRIMARY KEY (`title_id`)) engine=innodb;
+
+CREATE TABLE `people` (`people_id` INT, PRIMARY KEY (`people_id`)) engine=innodb;
+
+ALTER TABLE `department` ADD FOREIGN KEY (`department_people_fk`) REFERENCES
+`people` (`people_id`);
+
+ALTER TABLE `title` ADD FOREIGN KEY (`title_manager_fk`) REFERENCES `people`
+(`people_id`);
+
+ALTER TABLE `title` ADD FOREIGN KEY (`title_reporter_fk`) REFERENCES `people`
+(`people_id`);
+
+drop table title, department, people;
diff --git a/mysql-test/suite/innodb/t/innodb-mdev7046.test b/mysql-test/suite/innodb/t/innodb-mdev7046.test
new file mode 100644
index 00000000000..388885d214d
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-mdev7046.test
@@ -0,0 +1,34 @@
+--source include/have_innodb.inc
+--source include/have_partition.inc
+
+# Ignore OS errors
+call mtr.add_suppression("InnoDB: File ./test/t1*");
+call mtr.add_suppression("nnoDB: Error number*");
+
+# MDEV-7046: MySQL#74480 - Failing assertion: os_file_status(newpath, &exists, &type)
+# after Operating system error number 36 in a file operation
+
+USE test;
+create table t1(f1 INT,f2 INT,f3 CHAR (10),primary key(f1,f2)) partition by range(f1) subpartition by hash(f2) subpartitions 2 (partition p1 values less than (0),partition p2 values less than (2),partition p3 values less than (2147483647));
+--replace_regex /'.*t2_new.*'/'t2_new'/
+--error 7
+RENAME TABLE t1 TO `t2_new..............................................end`;
+alter table t1 engine=innodb;
+--replace_regex /'.*t2_new.*'/'t2_new'/
+--error 1025
+RENAME TABLE t1 TO `t2_new..............................................end`;
+--replace_regex /'.*t2_new.*'/'t2_new'/
+show warnings;
+drop table t1;
+
+DROP DATABASE test;CREATE DATABASE test;USE test;
+SET @@session.storage_engine=MYISAM;
+--error 1
+CREATE TABLE t1(id INT,purchased DATE)PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2 (PARTITION p0 VALUES LESS THAN MAXVALUE (SUBPARTITION sp0 DATA DIRECTORY='/tmp/not-existing' INDEX DIRECTORY='/tmp/not-existing',SUBPARTITION sp1));
+CREATE TABLE t1(id INT,purchased DATE)PARTITION BY RANGE(YEAR(purchased)) SUBPARTITION BY HASH(TO_DAYS(purchased)) SUBPARTITIONS 2 (PARTITION p0 VALUES LESS THAN MAXVALUE (SUBPARTITION sp0,SUBPARTITION sp1));
+ALTER TABLE t1 ENGINE=InnoDB;
+
+drop table t1;
+
+let $datadir=`select @@datadir`;
+--remove_file $datadir/test/db.opt
diff --git a/mysql-test/suite/innodb/t/innodb-stats-sample.test b/mysql-test/suite/innodb/t/innodb-stats-sample.test
new file mode 100644
index 00000000000..35d35bfa382
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-stats-sample.test
@@ -0,0 +1,78 @@
+--source include/have_innodb.inc
+#
+# Test that mysqld does not crash when running ANALYZE TABLE with
+# different values of the parameter innodb_stats_sample_pages.
+#
+
+# we care only that the following SQL commands do not produce errors
+# and do not crash the server
+-- disable_query_log
+-- disable_result_log
+-- enable_warnings
+
+let $sample_pages=`select @@innodb_stats_sample_pages`;
+let $traditional=`select @@innodb_stats_traditional`;
+SET GLOBAL innodb_stats_sample_pages=0;
+#use new method to calculate statistics
+SET GLOBAL innodb_stats_traditional=0;
+
+# check that the value has been adjusted to 1
+-- enable_result_log
+SHOW VARIABLES LIKE 'innodb_stats_sample_pages';
+SHOW VARIABLES LIKE 'innodb_stats_traditional';
+-- disable_result_log
+
+CREATE TABLE innodb_analyze (
+ a INT,
+ b INT,
+ c char(50),
+ KEY(a),
+ KEY(b,a)
+) ENGINE=InnoDB;
+
+# test with empty table
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=2;
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=1;
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=8000;
+ANALYZE TABLE innodb_analyze;
+
+delimiter //;
+create procedure innodb_insert_proc (repeat_count int)
+begin
+ declare current_num int;
+ set current_num = 0;
+ while current_num < repeat_count do
+ insert into innodb_analyze values(current_num, current_num*100,substring(MD5(RAND()), -44));
+ set current_num = current_num + 1;
+ end while;
+end//
+delimiter ;//
+commit;
+
+set autocommit=0;
+call innodb_insert_proc(7000);
+commit;
+set autocommit=1;
+
+SET GLOBAL innodb_stats_sample_pages=1;
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=8;
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=16;
+ANALYZE TABLE innodb_analyze;
+
+SET GLOBAL innodb_stats_sample_pages=8000;
+ANALYZE TABLE innodb_analyze;
+
+DROP PROCEDURE innodb_insert_proc;
+DROP TABLE innodb_analyze;
+EVAL SET GLOBAL innodb_stats_sample_pages=$sample_pages;
+EVAL SET GLOBAL innodb_stats_traditional=$traditional; \ No newline at end of file
diff --git a/mysql-test/suite/innodb/t/innodb.test b/mysql-test/suite/innodb/t/innodb.test
index 431daf6908a..44e75988d16 100644
--- a/mysql-test/suite/innodb/t/innodb.test
+++ b/mysql-test/suite/innodb/t/innodb.test
@@ -1315,7 +1315,7 @@ drop table t1;
# Test for testable InnoDB status variables. This test
# uses previous ones(pages_created, rows_deleted, ...).
---replace_result 511 ok 512 ok 2047 ok 513 ok
+--replace_result 511 ok 512 ok 2047 ok 513 ok 515 ok
SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_buffer_pool_pages_total';
SELECT variable_value FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_page_size';
SELECT variable_value - @innodb_rows_deleted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_deleted';
diff --git a/mysql-test/suite/innodb/t/innodb_bug14676111.opt b/mysql-test/suite/innodb/t/innodb_bug14676111.opt
new file mode 100644
index 00000000000..77945d1e4bb
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb_bug14676111.opt
@@ -0,0 +1 @@
+--innodb-sys-tablestats=1 \ No newline at end of file
diff --git a/mysql-test/suite/innodb/t/innodb_bug14676111.test b/mysql-test/suite/innodb/t/innodb_bug14676111.test
index 41862b8105e..ba04d421fde 100644
--- a/mysql-test/suite/innodb/t/innodb_bug14676111.test
+++ b/mysql-test/suite/innodb/t/innodb_bug14676111.test
@@ -3,11 +3,6 @@
-- source include/have_innodb.inc
-- source include/have_debug.inc
-# Note that this test needs to be able to manipulate how/when purge is done
-# using @@innodb_limit_optimistic_insert_debug. This does not work with
-# background purge threads, so we disabled them in the -master.opt (they are
-# off by default in normal 5.5 innodb but on by default in xtradb)
-
if (`select count(*)=0 from information_schema.global_variables where variable_name = 'INNODB_LIMIT_OPTIMISTIC_INSERT_DEBUG'`)
{
--skip Test requires InnoDB built with UNIV_DEBUG definition.
@@ -15,16 +10,20 @@ if (`select count(*)=0 from information_schema.global_variables where variable_n
--disable_query_log
set @old_innodb_limit_optimistic_insert_debug = @@innodb_limit_optimistic_insert_debug;
+set @old_innodb_stats_persistent = @@innodb_stats_persistent;
+set @old_innodb_undo_logs = @@innodb_undo_logs;
+# Limit undo segments for stable progress of purge.
+set global innodb_undo_logs = 1;
--enable_query_log
--disable_warnings
drop table if exists t1;
--enable_warnings
-CREATE TABLE t1 (a int not null primary key) engine=InnoDB;
+call mtr.add_suppression("option 'innodb-purge-threads': unsigned value 0 adjusted to*");
-let $wait_condition=
- SELECT VARIABLE_VALUE < 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS
- WHERE VARIABLE_NAME = 'INNODB_PURGE_TRX_ID_AGE';
+set global innodb_stats_persistent = false;
+
+CREATE TABLE t1 (a int not null primary key) engine=InnoDB;
#
# make 4 leveled straight tree
@@ -55,10 +54,12 @@ insert into t1 values (2);
#(1, 2) (3) (4) (5)
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
delete from t1 where a=4;
---source include/wait_condition.inc
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
+--source include/wait_innodb_all_purged.inc
#deleting 1 record of 2 records don't cause merge artificially.
#current tree form
# (1, 5)
@@ -67,10 +68,12 @@ delete from t1 where a=4;
#(1, 2) (3) (5)
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
delete from t1 where a=5;
---source include/wait_condition.inc
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
+--source include/wait_innodb_all_purged.inc
#deleting 1 record of 2 records don't cause merge artificially.
#current tree form
# (1)
@@ -79,16 +82,18 @@ delete from t1 where a=5;
#(1, 2) (3) <- merged next
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
#
# cause merge at level 0
#
#disable the artificial limitation of records in a page
-set global innodb_limit_optimistic_insert_debug = 10000;
+set global innodb_limit_optimistic_insert_debug = 0;
delete from t1 where a=2;
---source include/wait_condition.inc
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
+--source include/wait_innodb_all_purged.inc
#merge page occurs. and lift up occurs.
#current tree form
# (1)
@@ -96,7 +101,7 @@ delete from t1 where a=2;
# (1, 3)
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
insert into t1 values (2);
#current tree form
@@ -105,13 +110,15 @@ insert into t1 values (2);
# (1, 2, 3)
delete from t1 where a=2;
---source include/wait_condition.inc
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
+--source include/wait_innodb_all_purged.inc
#current tree form
# (1)
# (1, 3)
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
insert into t1 values (2);
#current tree form
@@ -119,15 +126,19 @@ insert into t1 values (2);
# (1, 2, 3) <- lift up this level next, because the father is root
delete from t1 where a=2;
---source include/wait_condition.inc
+set global innodb_purge_stop_now=ON;
+set global innodb_purge_run_now=ON;
+--source include/wait_innodb_all_purged.inc
#current tree form
# (1, 3)
analyze table t1;
-select DATA_LENGTH / 16384 from information_schema.TABLES where TABLE_SCHEMA = 'test' and TABLE_NAME = 't1';
+select CLUST_INDEX_SIZE from information_schema.INNODB_SYS_TABLESTATS where NAME = 'test/t1';
drop table t1;
--disable_query_log
set global innodb_limit_optimistic_insert_debug = @old_innodb_limit_optimistic_insert_debug;
+set global innodb_stats_persistent = @old_innodb_stats_persistent;
+set global innodb_undo_logs = @old_innodb_undo_logs;
--enable_query_log
diff --git a/mysql-test/suite/innodb/t/innodb_information_schema.test b/mysql-test/suite/innodb/t/innodb_information_schema.test
index 205344a1cd7..95b436d676c 100644
--- a/mysql-test/suite/innodb/t/innodb_information_schema.test
+++ b/mysql-test/suite/innodb/t/innodb_information_schema.test
@@ -122,7 +122,7 @@ SELECT * FROM ```t'\"_str` WHERE c1 = '4' FOR UPDATE;
# then its contents will never change because the cache from which it is
# filled is updated only if it has not been read for 0.1 seconds. See
# CACHE_MIN_IDLE_TIME_US in trx/trx0i_s.c.
-let $cnt=10;
+let $cnt=200;
while ($cnt)
{
let $success=`SELECT COUNT(*) = 14 FROM INFORMATION_SCHEMA.INNODB_LOCKS`;
diff --git a/mysql-test/suite/innodb/t/innodb_monitor.test b/mysql-test/suite/innodb/t/innodb_monitor.test
new file mode 100644
index 00000000000..864e0cae862
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb_monitor.test
@@ -0,0 +1,387 @@
+# This is the test for Metrics Monitor Table feature.
+# Test the metrics monitor system's control system
+# and counter accuracy.
+
+--source include/have_innodb.inc
+
+set global innodb_monitor_disable = All;
+
+# Test turn on/off the monitor counter with "all" option
+# By default, they will be off
+select name, status from information_schema.innodb_metrics;
+
+# Turn on all monitor counters
+set global innodb_monitor_enable = all;
+
+# status should all change to "enabled"
+select name from information_schema.innodb_metrics where status!='enabled';
+
+# Test wrong argument to the global configure option
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_monitor_enable = aaa;
+
+# We require a valid monitor counter/module name. There is no default
+# counter name or module. A warning will be printed asking user to
+# specify a valid counter name.
+#--disable_warnings
+#set global innodb_monitor_enable = default;
+#--enable_warnings
+
+# Turn off all monitor counters, option name should be case
+# insensitive
+set global innodb_monitor_disable = All;
+
+# status should all change to "disabled"
+select name from information_schema.innodb_metrics where status!='disabled';
+
+# Reset all counter values
+set global innodb_monitor_reset_all = all;
+
+# count should all change to 0
+select name from information_schema.innodb_metrics where count!=0;
+
+# Test wildcard match, turn on all counters contain string "lock"
+set global innodb_monitor_enable = "%lock%";
+
+# All lock related counter should be enabled
+select name from information_schema.innodb_metrics
+where status != IF(name like "%lock%", 'enabled', 'disabled');
+
+# Disable them
+set global innodb_monitor_disable = "%lock%";
+
+# All lock related counter should be disabled
+select name, status from information_schema.innodb_metrics
+where name like "%lock%";
+
+# No match for "%lock*"
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_monitor_enable = "%lock*";
+
+# All counters will be turned on with wildcard match string with all "%"
+set global innodb_monitor_enable="%%%%%%%%%%%%%%%%%%%%%%%%%%%";
+
+select name from information_schema.innodb_metrics where status!='enabled';
+
+# Turn off all counters
+set global innodb_monitor_disable="%%%%%";
+
+select name from information_schema.innodb_metrics where status!='disabled';
+
+# One more round testing. All counters will be turned on with
+# single wildcard character "%"
+set global innodb_monitor_enable="%";
+
+select name from information_schema.innodb_metrics where status!='enabled';
+
+# Turn off all the counters with "%_%"
+set global innodb_monitor_disable="%_%";
+
+select name from information_schema.innodb_metrics where status!='disabled';
+
+# Turn on all counters start with "log"
+set global innodb_monitor_enable="log%%%%";
+
+select name from information_schema.innodb_metrics
+where status != IF(name like "log%", 'enabled', 'disabled');
+
+# Turn on counters "os_data_fsync" with wildcard match "os_%a_fs_ncs", "_"
+# is single character wildcard match word
+set global innodb_monitor_enable="os_%a_fs_ncs";
+
+# Turn on counters whose name contains "os" and "pending" with
+# wildcard match "os%pending%"
+set global innodb_monitor_enable="os%pending%";
+
+select name, status from information_schema.innodb_metrics
+where name like "os%";
+
+# Empty string is an invalid option
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_monitor_enable="";
+
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_monitor_enable="_";
+
+# Reset counters only in "module_metadata" module
+set global innodb_monitor_disable = module_metadata;
+
+set global innodb_monitor_reset_all = module_metadata;
+
+# Only turn on "table_open" counter
+set global innodb_monitor_enable = metadata_table_handles_opened;
+
+# Create a new table to test "metadata_table_handles_opened" counter
+create table monitor_test(col int) engine = innodb;
+
+# This will open the monitor_test table
+select * from monitor_test;
+
+# "metadata_table_handles_opened" should increment by 1
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Reset the counter value while counter is still on (started)
+# This will reset value "count_reset" but not
+# "count"
+set global innodb_monitor_reset = metadata_table_handles_opened;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# re-create table again to increment "metadata_table_handles_opened" again
+drop table monitor_test;
+
+# Create a new table to test "metadata_table_handles_opened" counter
+create table monitor_test(col int) engine = innodb;
+
+select * from monitor_test;
+
+# "metadata_table_handles_opened" should increment
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Cannot reset all monitor value while the counter is on
+set global innodb_monitor_reset_all = metadata_table_handles_opened;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Turn off the counter "metadata_table_handles_opened"
+set global innodb_monitor_disable = metadata_table_handles_opened;
+
+# Reset the counter value while counter is off (disabled)
+set global innodb_monitor_reset = metadata_table_handles_opened;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# re-create table again. Since monitor is off, "metadata_table_handles_opened"
+# should not be incremented
+drop table monitor_test;
+
+# Create a new table to test "metadata_table_handles_opened" counter
+create table monitor_test(col int) engine = innodb;
+
+# "metadata_table_handles_opened" should increment
+select * from monitor_test;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Reset all the counters, include those counter *_since_start
+set global innodb_monitor_reset_all = metadata_table_handles_opened;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Turn on "table_open" counter again
+set global innodb_monitor_enable = metadata_table_handles_opened;
+
+# Test metadata_table_handles_opened again to see if it is working correctly
+# after above round of turning on/off/reset
+drop table monitor_test;
+
+# Create a new table to test "metadata_table_handles_opened" counter
+create table monitor_test(col int) engine = innodb stats_persistent=0;
+
+select * from monitor_test;
+
+# "metadata_table_handles_opened" should increment
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_opened";
+
+# Test counter "metadata_table_handles_closed",
+# create index will close the old handle
+set global innodb_monitor_enable = metadata_table_handles_closed;
+
+create index idx on monitor_test(col);
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name = "metadata_table_handles_closed";
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+
+# Reset counters only in "module_metadata" module
+set global innodb_monitor_disable = module_metadata;
+
+set global innodb_monitor_reset = module_metadata;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+
+set global innodb_monitor_reset_all = module_metadata;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "metadata%";
+
+# Test Transaction Module
+set global innodb_monitor_enable = module_trx;
+
+begin;
+insert into monitor_test values(9);
+commit;
+
+begin;
+insert into monitor_test values(9);
+rollback;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "trx_rollbacks" or name like "trx_active_transactions";
+
+set global innodb_monitor_disable = module_trx;
+
+# Test DML Module
+set global innodb_monitor_enable = module_dml;
+
+insert into monitor_test values(9);
+
+update monitor_test set col = 10 where col = 9;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+delete from monitor_test;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+ from information_schema.innodb_metrics
+ where name like "dml%";
+
+# test reset counter while the counter is on
+set global innodb_monitor_reset = module_dml;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+# insert/delete some rows after the reset
+insert into monitor_test values(9);
+insert into monitor_test values(1);
+
+delete from monitor_test;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+# We do not allow reset_all while the counter is on, nothing
+# should be reset here
+set global innodb_monitor_reset_all = module_dml;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+# Turn off the counter
+set global innodb_monitor_disable = module_dml;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+# Reset all counter values
+set global innodb_monitor_reset_all = module_dml;
+
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+# Open individual counter "dml_inserts"
+set global innodb_monitor_enable = dml_inserts;
+
+insert into monitor_test values(9);
+insert into monitor_test values(1);
+
+delete from monitor_test;
+
+# Only counter "dml_inserts" should be updated
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "dml%";
+
+set global innodb_monitor_disable = module_dml;
+
+drop table monitor_test;
+
+set global innodb_monitor_enable = file_num_open_files;
+
+# Counters are unpredictable when innodb-file-per-table is on
+--replace_column 2 # 3 # 4 # 5 # 6 # 7 #
+select name, max_count, min_count, count,
+ max_count_reset, min_count_reset, count_reset, status
+from information_schema.innodb_metrics
+where name like "file_num_open_files";
+
+set global innodb_monitor_disable = file_num_open_files;
+
+# Test ICP module counters
+set global innodb_monitor_enable = "icp%";
+
+create table monitor_test(a char(3), b int, c char(2),
+primary key (a(1), c(1)), key(b)) engine = innodb;
+
+insert into monitor_test values("13", 2, "aa");
+
+select a from monitor_test where b < 1 for update;
+
+# should have icp_attempts = 1 and icp_out_of_range = 1
+select name, count from information_schema.innodb_metrics
+where name like "icp%";
+
+# should have icp_attempts = 2 and icp_match = 1
+select a from monitor_test where b < 3 for update;
+
+select name, count from information_schema.innodb_metrics
+where name like "icp%";
+
+drop table monitor_test;
+
+set global innodb_monitor_disable = all;
+set global innodb_monitor_reset_all = all;
+
+# Test for bug #13966091
+select 1 from `information_schema`.`INNODB_METRICS`
+where case (1) when (1) then (AVG_COUNT_RESET) else (1) end;
+
+-- disable_warnings
+set global innodb_monitor_enable = default;
+set global innodb_monitor_disable = default;
+set global innodb_monitor_reset = default;
+set global innodb_monitor_reset_all = default;
+-- enable_warnings
diff --git a/mysql-test/suite/multi_source/gtid.result b/mysql-test/suite/multi_source/gtid.result
index ce926ddc995..28ac1e7429e 100644
--- a/mysql-test/suite/multi_source/gtid.result
+++ b/mysql-test/suite/multi_source/gtid.result
@@ -26,59 +26,6 @@ SET SQL_LOG_BIN=0;
CREATE TABLE t3 (a INT PRIMARY KEY, b VARCHAR(10));
SET SQL_LOG_BIN=1;
INSERT INTO t3 VALUES (201, "initial 2");
-SHOW ALL SLAVES STATUS;
-Connection_name
-Slave_SQL_State Slave has read all relay log; waiting for the slave I/O thread to update it
-Slave_IO_State Waiting for master to send event
-Master_Host 127.0.0.1
-Master_User root
-Master_Port MYPORT_3
-Connect_Retry 60
-Master_Log_File server3-bin.000001
-Read_Master_Log_Pos 1501
-Relay_Log_File mysqld-relay-bin.000002
-Relay_Log_Pos 1790
-Relay_Master_Log_File server3-bin.000001
-Slave_IO_Running Yes
-Slave_SQL_Running Yes
-Replicate_Do_DB
-Replicate_Ignore_DB
-Replicate_Do_Table
-Replicate_Ignore_Table
-Replicate_Wild_Do_Table
-Replicate_Wild_Ignore_Table
-Last_Errno 0
-Last_Error
-Skip_Counter 0
-Exec_Master_Log_Pos 1501
-Relay_Log_Space 2088
-Until_Condition None
-Until_Log_File
-Until_Log_Pos 0
-Master_SSL_Allowed No
-Master_SSL_CA_File
-Master_SSL_CA_Path
-Master_SSL_Cert
-Master_SSL_Cipher
-Master_SSL_Key
-Seconds_Behind_Master 0
-Master_SSL_Verify_Server_Cert No
-Last_IO_Errno 0
-Last_IO_Error
-Last_SQL_Errno 0
-Last_SQL_Error
-Replicate_Ignore_Server_Ids
-Master_Server_Id 3
-Master_SSL_Crl
-Master_SSL_Crlpath
-Using_Gtid No
-Gtid_IO_Pos
-Retried_transactions 0
-Max_relay_log_size 1073741824
-Executed_log_entries 25
-Slave_received_heartbeats 0
-Slave_heartbeat_period 60.000
-Gtid_Slave_Pos 1-1-4,2-2-3
*** Now move slave2 to replicate from both master1 and master2 instead of just slave1 ***
STOP ALL SLAVES;
Warnings:
@@ -102,9 +49,11 @@ INSERT INTO t1 VALUES (3, "switch 2");
INSERT INTO t3 VALUES (103, "switch 2 a");
INSERT INTO t2 VALUES (3, "switch 2");
INSERT INTO t3 VALUES (203, "switch 2 b");
+include/save_master_gtid.inc
STOP SLAVE 'slave2';
INSERT INTO t2 VALUES (4, "switch 3");
INSERT INTO t3 VALUES (204, "switch 3 b");
+include/sync_with_master_gtid.inc
CHANGE MASTER TO master_port=MYPORT_4, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
START SLAVE;
SELECT * FROM t1 ORDER BY a;
diff --git a/mysql-test/suite/multi_source/gtid.test b/mysql-test/suite/multi_source/gtid.test
index 7a085823693..bebee66068f 100644
--- a/mysql-test/suite/multi_source/gtid.test
+++ b/mysql-test/suite/multi_source/gtid.test
@@ -58,8 +58,6 @@ INSERT INTO t3 VALUES (201, "initial 2");
--source include/wait_condition.inc
--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=1 AND (SELECT COUNT(*) FROM t2)=1 AND (SELECT COUNT(*) FROM t3)=2
--source include/wait_condition.inc
---replace_result $SERVER_MYPORT_3 MYPORT_3
-query_vertical SHOW ALL SLAVES STATUS;
--echo *** Now move slave2 to replicate from both master1 and master2 instead of just slave1 ***
STOP ALL SLAVES;
@@ -93,6 +91,8 @@ set default_master_connection = '';
--connection slave1
# Set up so that slave1 will have to start from two different positions
# in the slave2 binlog (one for each domain_id).
+--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=2 AND (SELECT COUNT(*) FROM t3)=4
+--source include/wait_condition.inc
STOP SLAVE 'slave1';
--connection master1
@@ -106,6 +106,7 @@ INSERT INTO t3 VALUES (103, "switch 2 a");
--connection master2
INSERT INTO t2 VALUES (3, "switch 2");
INSERT INTO t3 VALUES (203, "switch 2 b");
+--source include/save_master_gtid.inc
--connection slave1
--let $wait_condition= SELECT (SELECT COUNT(*) FROM t1)=2 AND (SELECT COUNT(*) FROM t2)=3 AND (SELECT COUNT(*) FROM t3)=5
@@ -116,6 +117,12 @@ STOP SLAVE 'slave2';
INSERT INTO t2 VALUES (4, "switch 3");
INSERT INTO t3 VALUES (204, "switch 3 b");
+--connection slave2
+# Make sure that slave2 has replicated far enough before connecting slave1 to
+# it (otherwise we get an error that slave1 requested to start from a GTID
+# which is not in slave2's binlogs).
+--source include/sync_with_master_gtid.inc
+
--connection slave1
--replace_result $SERVER_MYPORT_4 MYPORT_4
eval CHANGE MASTER TO master_port=$SERVER_MYPORT_4, master_host='127.0.0.1', master_user='root', master_use_gtid=current_pos;
diff --git a/mysql-test/suite/multi_source/simple.test b/mysql-test/suite/multi_source/simple.test
index c3b7a60448a..6108d3043d5 100644
--- a/mysql-test/suite/multi_source/simple.test
+++ b/mysql-test/suite/multi_source/simple.test
@@ -33,6 +33,13 @@ set default_master_connection = '';
--connection slave
--sync_with_master 0,'slave2'
+# MDEV-7074 (Sporadic test failure due to a race condition)
+let $show_statement = SHOW ALL SLAVES STATUS;
+let $field = Executed_log_entries;
+let $condition = = 7;
+let $wait_for_all = 1;
+--source include/wait_show_condition.inc
+
--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2
show all slaves status;
diff --git a/mysql-test/suite/perfschema/t/mks_timer-6258.test b/mysql-test/suite/perfschema/t/mks_timer-6258.test
index b4e5791298a..2bc14abf2f1 100644
--- a/mysql-test/suite/perfschema/t/mks_timer-6258.test
+++ b/mysql-test/suite/perfschema/t/mks_timer-6258.test
@@ -1,4 +1,5 @@
--source include/not_embedded.inc
+--source include/have_perfschema.inc
#
# MDEV-6258 MariaDB 10.0 performance schema timestamps relative to epoch
#
diff --git a/mysql-test/suite/plugins/t/server_audit.test b/mysql-test/suite/plugins/t/server_audit.test
index f63c8022392..869fd944d51 100644
--- a/mysql-test/suite/plugins/t/server_audit.test
+++ b/mysql-test/suite/plugins/t/server_audit.test
@@ -43,6 +43,7 @@ show variables like 'server_audit%';
set global server_audit_mode=1;
set global server_audit_events='';
create database sa_db;
+--sleep 2
connect (con1,localhost,root,,test);
connection con1;
create table t1 (id2 int);
diff --git a/mysql-test/suite/plugins/t/unix_socket.test b/mysql-test/suite/plugins/t/unix_socket.test
index 2c1af9fb1da..1522c9b7cbe 100644
--- a/mysql-test/suite/plugins/t/unix_socket.test
+++ b/mysql-test/suite/plugins/t/unix_socket.test
@@ -12,11 +12,14 @@ eval install plugin unix_socket soname '$AUTH_SOCKET_SO';
--echo # with named user
--echo #
---replace_result $USER USER
+--let $replace=create user $USER
+--replace_result $replace "create user USER"
eval create user $USER identified via unix_socket;
--write_file $MYSQLTEST_VARDIR/tmp/peercred_test.txt
---replace_result $USER USER
+--let $replace1=$USER@localhost
+--let $replace2=$USER@%
+--replace_result $replace1 "USER@localhost" $replace2 "USER@%"
select user(), current_user(), database();
EOF
@@ -31,7 +34,8 @@ EOF
--error 1
--exec $MYSQL_TEST -u foobar --plugin-dir=$plugindir < $MYSQLTEST_VARDIR/tmp/peercred_test.txt
---replace_result $USER USER
+--let $replace=drop user $USER
+--replace_result $replace "drop user USER"
eval drop user $USER;
--echo #
diff --git a/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc b/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc
new file mode 100644
index 00000000000..b624853cd37
--- /dev/null
+++ b/mysql-test/suite/rpl/include/rpl_innodb_rows_counters.inc
@@ -0,0 +1,50 @@
+#########################################
+# Author: Benjamin Renard benj@fb.com
+# Date: 11/15/2013
+# Purpose: Showing the difference between current innodb rows stats and the ones recorded at the beginning of the test
+# Requirements: Having @[master|slave]_[system_]rows_[read|inserted|deleted|updated] counters already created
+#########################################
+
+--connection master
+--echo ==========MASTER==========
+
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @master_rows_read;
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @master_rows_updated;
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @master_rows_deleted;
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @master_rows_inserted;
+
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @master_system_rows_read;
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @master_system_rows_updated;
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @master_system_rows_deleted;
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @master_system_rows_inserted;
+
+--sync_slave_with_master
+--echo ==========SLAVE===========
+
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @slave_rows_read;
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @slave_rows_updated;
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @slave_rows_deleted;
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @slave_rows_inserted;
+
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @slave_system_rows_read;
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @slave_system_rows_updated;
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @slave_system_rows_deleted;
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @slave_system_rows_inserted;
+
+--connection master
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_basic.result b/mysql-test/suite/rpl/r/rpl_gtid_basic.result
index e8e5bf36f84..465cc875af0 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_basic.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_basic.result
@@ -286,7 +286,7 @@ INSERT INTO t1 VALUES (4);
master_gtid_wait('2-1-2')
0
KILL CONNECTION KILL_ID;
-ERROR HY000: Lost connection to MySQL server during query
+Got one of the listed errors
SET gtid_domain_id=1;
SET gtid_seq_no=4;
INSERT INTO t1 VALUES (5);
@@ -386,7 +386,7 @@ SET GLOBAL slave_ddl_exec_mode=STRICT;
SET sql_slave_skip_counter=1;
START SLAVE UNTIL master_gtid_pos="3-1-100";
include/sync_with_master_gtid.inc
-include/wait_for_slave_sql_to_stop.inc
+include/wait_for_slave_to_stop.inc
SELECT * FROM t2;
ERROR 42S02: Table 'test.t2' doesn't exist
SELECT IF(LOCATE("3-1-100", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 3-1-100 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
diff --git a/mysql-test/suite/rpl/r/rpl_gtid_crash.result b/mysql-test/suite/rpl/r/rpl_gtid_crash.result
index debd107221f..75bd9d0cbb1 100644
--- a/mysql-test/suite/rpl/r/rpl_gtid_crash.result
+++ b/mysql-test/suite/rpl/r/rpl_gtid_crash.result
@@ -3,6 +3,7 @@ include/rpl_init.inc [topology=1->2]
call mtr.add_suppression("Checking table:");
call mtr.add_suppression("client is using or hasn't closed the table properly");
call mtr.add_suppression("Table .* is marked as crashed and should be repaired");
+call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed");
flush tables;
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
@@ -124,7 +125,7 @@ SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (11);
COMMIT;
-ERROR HY000: Error writing file 'master-bin' (errno: 11 "Resource temporarily unavailable")
+ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
@@ -133,15 +134,23 @@ SELECT @@GLOBAL.server_id;
3
SELECT * from t1 WHERE a > 10 ORDER BY a;
a
+gtid_check
+Binlog pos ok
# Wait 30 seconds for SQL thread to catch up with IO thread
SELECT * from t1 WHERE a > 10 ORDER BY a;
a
+gtid_check
+Binlog pos ok
+gtid_check
+Slave pos ok
+gtid_check
+Current pos ok
# Repeat this with additional transactions on the master
SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (12);
COMMIT;
-ERROR HY000: Error writing file 'master-bin' (errno: 11 "Resource temporarily unavailable")
+ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
@@ -164,7 +173,7 @@ SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (21);
COMMIT;
-ERROR HY000: Error writing file 'master-bin' (errno: 11 "Resource temporarily unavailable")
+ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
@@ -175,17 +184,27 @@ SELECT * from t1 WHERE a > 10 ORDER BY a;
a
13
14
+gtid_check
+Binlog pos ok
+gtid_check
+Current pos ok
# Wait 30 seconds for SQL thread to catch up with IO thread
SELECT * from t1 WHERE a > 10 ORDER BY a;
a
13
14
+gtid_check
+Binlog pos ok
+gtid_check
+Slave pos ok
+gtid_check
+Current pos ok
# Repeat this with additional transactions on the master
SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
BEGIN;
INSERT INTO t1 VALUES (22);
COMMIT;
-ERROR HY000: Error writing file 'master-bin' (errno: 11 "Resource temporarily unavailable")
+ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
COMMIT;
Got one of the listed errors
@@ -205,5 +224,48 @@ a
14
23
24
+# Repeat this with slave restart
+SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
+BEGIN;
+INSERT INTO t1 VALUES (25);
+COMMIT;
+ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
+SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
+COMMIT;
+Got one of the listed errors
+# Wait 30 seconds for IO thread to connect and SQL thread to catch up
+# with IO thread.
+include/stop_slave.inc
+gtid_check
+Binlog pos ok
+gtid_check
+Current pos ok
+INSERT INTO t1 VALUES (26);
+INSERT INTO t1 VALUES (27);
+SELECT * from t1 WHERE a > 10 ORDER BY a;
+a
+13
+14
+23
+24
+26
+27
+include/save_master_gtid.inc
+gtid_check
+Binlog pos ok
+gtid_check
+Slave pos ok
+gtid_check
+Current pos ok
+include/start_slave.inc
+include/sync_with_master_gtid.inc
+SELECT * from t1 WHERE a > 10 ORDER BY a;
+a
+13
+14
+23
+24
+26
+27
DROP TABLE t1;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result b/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result
new file mode 100644
index 00000000000..b8e9262c771
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_innodb_bug68220.result
@@ -0,0 +1,225 @@
+include/master-slave.inc
+[connection master]
+select variable_value into @master_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select variable_value into @master_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select variable_value into @master_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select variable_value into @master_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select variable_value into @master_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select variable_value into @master_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select variable_value into @master_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select variable_value into @master_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select variable_value into @slave_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select variable_value into @slave_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select variable_value into @slave_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select variable_value into @slave_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select variable_value into @slave_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select variable_value into @slave_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select variable_value into @slave_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select variable_value into @slave_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+CREATE DATABASE testdb;
+USE testdb;
+CREATE TABLE testdb.t1 (i int NOT NULL PRIMARY KEY) ENGINE=InnoDB;
+INSERT INTO testdb.t1 VALUES (1);
+==========MASTER==========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @master_rows_read;
+@rows_read - @master_rows_read
+0
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @master_rows_updated;
+@rows_updated - @master_rows_updated
+0
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @master_rows_deleted;
+@rows_deleted - @master_rows_deleted
+0
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @master_rows_inserted;
+@rows_inserted - @master_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @master_system_rows_read;
+@system_rows_read - @master_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @master_system_rows_updated;
+@system_rows_updated - @master_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @master_system_rows_deleted;
+@system_rows_deleted - @master_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @master_system_rows_inserted;
+@system_rows_inserted - @master_system_rows_inserted
+0
+==========SLAVE===========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @slave_rows_read;
+@rows_read - @slave_rows_read
+0
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @slave_rows_updated;
+@rows_updated - @slave_rows_updated
+0
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @slave_rows_deleted;
+@rows_deleted - @slave_rows_deleted
+0
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @slave_rows_inserted;
+@rows_inserted - @slave_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @slave_system_rows_read;
+@system_rows_read - @slave_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @slave_system_rows_updated;
+@system_rows_updated - @slave_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @slave_system_rows_deleted;
+@system_rows_deleted - @slave_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @slave_system_rows_inserted;
+@system_rows_inserted - @slave_system_rows_inserted
+0
+UPDATE t1 SET i=2 WHERE i=1;
+==========MASTER==========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @master_rows_read;
+@rows_read - @master_rows_read
+1
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @master_rows_updated;
+@rows_updated - @master_rows_updated
+1
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @master_rows_deleted;
+@rows_deleted - @master_rows_deleted
+0
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @master_rows_inserted;
+@rows_inserted - @master_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @master_system_rows_read;
+@system_rows_read - @master_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @master_system_rows_updated;
+@system_rows_updated - @master_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @master_system_rows_deleted;
+@system_rows_deleted - @master_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @master_system_rows_inserted;
+@system_rows_inserted - @master_system_rows_inserted
+0
+==========SLAVE===========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @slave_rows_read;
+@rows_read - @slave_rows_read
+1
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @slave_rows_updated;
+@rows_updated - @slave_rows_updated
+1
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @slave_rows_deleted;
+@rows_deleted - @slave_rows_deleted
+0
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @slave_rows_inserted;
+@rows_inserted - @slave_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @slave_system_rows_read;
+@system_rows_read - @slave_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @slave_system_rows_updated;
+@system_rows_updated - @slave_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @slave_system_rows_deleted;
+@system_rows_deleted - @slave_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @slave_system_rows_inserted;
+@system_rows_inserted - @slave_system_rows_inserted
+0
+DELETE FROM t1 WHERE i=2;
+==========MASTER==========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @master_rows_read;
+@rows_read - @master_rows_read
+2
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @master_rows_updated;
+@rows_updated - @master_rows_updated
+1
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @master_rows_deleted;
+@rows_deleted - @master_rows_deleted
+1
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @master_rows_inserted;
+@rows_inserted - @master_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @master_system_rows_read;
+@system_rows_read - @master_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @master_system_rows_updated;
+@system_rows_updated - @master_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @master_system_rows_deleted;
+@system_rows_deleted - @master_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @master_system_rows_inserted;
+@system_rows_inserted - @master_system_rows_inserted
+0
+==========SLAVE===========
+select variable_value into @rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select @rows_read - @slave_rows_read;
+@rows_read - @slave_rows_read
+2
+select variable_value into @rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select @rows_updated - @slave_rows_updated;
+@rows_updated - @slave_rows_updated
+1
+select variable_value into @rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select @rows_deleted - @slave_rows_deleted;
+@rows_deleted - @slave_rows_deleted
+1
+select variable_value into @rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select @rows_inserted - @slave_rows_inserted;
+@rows_inserted - @slave_rows_inserted
+1
+select variable_value into @system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select @system_rows_read - @slave_system_rows_read;
+@system_rows_read - @slave_system_rows_read
+0
+select variable_value into @system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select @system_rows_updated - @slave_system_rows_updated;
+@system_rows_updated - @slave_system_rows_updated
+0
+select variable_value into @system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select @system_rows_deleted - @slave_system_rows_deleted;
+@system_rows_deleted - @slave_system_rows_deleted
+0
+select variable_value into @system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+select @system_rows_inserted - @slave_system_rows_inserted;
+@system_rows_inserted - @slave_system_rows_inserted
+0
+DROP TABLE t1;
+DROP DATABASE testdb;
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result b/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result
index e25401d310f..328c3c3423f 100644
--- a/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result
+++ b/mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result
@@ -14,6 +14,34 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
#########################################################################
SET AUTOCOMMIT= 0;
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (43);
+CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (42);
+DROP FUNCTION myfunc_int;
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
INSERT INTO tt_1(ddl_case) VALUES (41);
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
Table Op Msg_type Msg_text
diff --git a/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result
index 296d21d8ef9..63a5493f045 100644
--- a/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -12816,6 +12827,352 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -12838,4 +13195,5 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result
index a2dcd4fd39b..5811617e71e 100644
--- a/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -13188,6 +13199,372 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -13210,4 +13587,5 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result
index 4e8e83d2187..39e1541eb0e 100644
--- a/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_non_direct_row_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -15012,6 +15023,460 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -15034,4 +15499,5 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result
index bc09916361e..8a110048d80 100644
--- a/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_non_direct_stm_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -12319,6 +12330,338 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(368,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(368,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(369,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(369,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(370,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(370,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(371,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(371,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(372,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(372,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(372,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(372,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(373,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(373,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(373,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(373,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -12341,4 +12684,5 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_parallel.result b/mysql-test/suite/rpl/r/rpl_parallel.result
index fb86d46b01e..a3b423a49c9 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel.result
@@ -923,6 +923,106 @@ a
32
33
34
+*** MDEV-6775: Wrong binlog order in parallel replication ***
+DELETE FROM t4;
+INSERT INTO t4 VALUES (1,NULL), (3,NULL), (4,4), (5, NULL), (6, 6);
+include/save_master_gtid.inc
+include/sync_with_master_gtid.inc
+include/stop_slave.inc
+SET @old_dbug= @@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,inject_binlog_commit_before_get_LOCK_log";
+SET @old_format=@@GLOBAL.binlog_format;
+SET GLOBAL binlog_format=ROW;
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
+UPDATE t4 SET b=NULL WHERE a=6;
+SET debug_sync='now WAIT_FOR master_queued1';
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
+DELETE FROM t4 WHERE b <= 3;
+SET debug_sync='now WAIT_FOR master_queued2';
+SET debug_sync='now SIGNAL master_cont1';
+SET binlog_format= @old_format;
+SET binlog_format= @old_format;
+SET debug_sync='RESET';
+SELECT * FROM t4 ORDER BY a;
+a b
+1 NULL
+3 NULL
+4 4
+5 NULL
+6 NULL
+include/start_slave.inc
+SET debug_sync= 'now WAIT_FOR waiting';
+SELECT * FROM t4 ORDER BY a;
+a b
+1 NULL
+3 NULL
+4 4
+5 NULL
+6 NULL
+SET debug_sync= 'now SIGNAL cont';
+include/stop_slave.inc
+SET GLOBAL debug_dbug=@old_dbug;
+SET GLOBAL binlog_format= @old_format;
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+include/start_slave.inc
+*** MDEV-7237: Parallel replication: incorrect relaylog position after stop/start the slave ***
+INSERT INTO t2 VALUES (40);
+include/stop_slave.inc
+CHANGE MASTER TO master_use_gtid=no;
+SET @old_dbug= @@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,rpl_parallel_scheduled_gtid_0_x_100";
+SET GLOBAL debug_dbug="+d,rpl_parallel_wait_for_done_trigger";
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+INSERT INTO t2 VALUES (41);
+INSERT INTO t2 VALUES (42);
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+DELETE FROM t2 WHERE a=40;
+SET binlog_format= @old_format;
+INSERT INTO t2 VALUES (43);
+INSERT INTO t2 VALUES (44);
+FLUSH LOGS;
+INSERT INTO t2 VALUES (45);
+SET gtid_seq_no=100;
+INSERT INTO t2 VALUES (46);
+BEGIN;
+SELECT * FROM t2 WHERE a=40 FOR UPDATE;
+a
+40
+include/start_slave.inc
+SET debug_sync= 'now WAIT_FOR scheduled_gtid_0_x_100';
+STOP SLAVE;
+SET debug_sync= 'now WAIT_FOR wait_for_done_waiting';
+ROLLBACK;
+include/wait_for_slave_sql_to_stop.inc
+SELECT * FROM t2 WHERE a >= 40 ORDER BY a;
+a
+41
+42
+include/start_slave.inc
+SELECT * FROM t2 WHERE a >= 40 ORDER BY a;
+a
+41
+42
+43
+44
+45
+46
+include/stop_slave.inc
+SET GLOBAL debug_dbug=@old_dbug;
+SET DEBUG_SYNC= 'RESET';
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+CHANGE MASTER TO master_use_gtid=slave_pos;
+include/start_slave.inc
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
include/start_slave.inc
diff --git a/mysql-test/suite/rpl/r/rpl_parallel2.result b/mysql-test/suite/rpl/r/rpl_parallel2.result
index 49be484f419..8bf8b9caf3b 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel2.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel2.result
@@ -9,6 +9,7 @@ CALL mtr.add_suppression("Unsafe statement written to the binary log using state
INSERT INTO t1 VALUES (1,sleep(2));
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
+include/wait_for_slave_param.inc [Seconds_Behind_Master]
Seconds_Behind_Master should be zero here because the slave is fully caught up and idle.
Seconds_Behind_Master = '0'
include/stop_slave.inc
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_retry.result b/mysql-test/suite/rpl/r/rpl_parallel_retry.result
index cd12d92430b..0129814e6a8 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_retry.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_retry.result
@@ -188,9 +188,120 @@ a LENGTH(b)
3 5012
4 5000
SET GLOBAL max_relay_log_size=@old_max;
+*** MDEV-7065: Incorrect relay log position in parallel replication after retry of transaction ***
+include/stop_slave.inc
+BEGIN;
+INSERT INTO t1 VALUES (100, 0);
+INSERT INTO t1 VALUES (101, 0);
+INSERT INTO t1 VALUES (102, 0);
+INSERT INTO t1 VALUES (103, 0);
+COMMIT;
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+a b
+100 0
+101 0
+102 0
+103 0
+SET @old_dbug= @@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_xid";
+include/start_slave.inc
+SET GLOBAL debug_dbug=@old_dbug;
+retries
+1
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+a b
+100 0
+101 0
+102 0
+103 0
+include/stop_slave_sql.inc
+INSERT INTO t1 VALUES (104, 1);
+INSERT INTO t1 VALUES (105, 1);
+INSERT INTO t1 VALUES (106, 1);
+INSERT INTO t1 VALUES (107, 1);
+INSERT INTO t1 VALUES (108, 1);
+INSERT INTO t1 VALUES (109, 1);
+include/start_slave.inc
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+a b
+100 0
+101 0
+102 0
+103 0
+104 1
+105 1
+106 1
+107 1
+108 1
+109 1
+*** MDEV-6917: Parallel replication: "Commit failed due to failure of an earlier commit on which this one depends", but no prior failure seen **
+CREATE TABLE t3 (a INT PRIMARY KEY, b INT, KEY b_idx(b)) ENGINE=InnoDB;
+INSERT INTO t3 VALUES (1,NULL), (2,2), (3,NULL), (4,4), (5, NULL), (6, 6);
+CREATE TABLE t4 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+include/stop_slave.inc
+CHANGE MASTER TO master_use_gtid=no;
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (10, foo(1, 'before_execute_sql_command WAIT_FOR t1_start', ''));
+UPDATE t3 SET b=NULL WHERE a=6;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
+COMMIT;
+SET debug_sync='now WAIT_FOR master_queued1';
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (20, foo(2, 'group_commit_waiting_for_prior SIGNAL t2_waiting', ''));
+DELETE FROM t3 WHERE b <= 3;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
+COMMIT;
+SET debug_sync='now WAIT_FOR master_queued2';
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (30, foo(3, 'before_execute_sql_command WAIT_FOR t3_start', 'group_commit_waiting_for_prior SIGNAL t3_waiting'));
+INSERT INTO t3 VALUES (7,7);
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
+COMMIT;
+SET debug_sync='now WAIT_FOR master_queued3';
+SET debug_sync='now SIGNAL master_cont1';
+SET binlog_format=@old_format;
+SET binlog_format=@old_format;
+SET debug_sync='RESET';
+SET binlog_format=@old_format;
+SELECT * FROM t3 ORDER BY a;
+a b
+1 NULL
+3 NULL
+4 4
+5 NULL
+6 NULL
+7 7
+SET @old_dbug=@@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,thd_need_ordering_with_force";
+include/start_slave.inc
+SET debug_sync='now WAIT_FOR t2_waiting';
+SET debug_sync='now SIGNAL t3_start';
+SET debug_sync='now WAIT_FOR t3_waiting';
+SET debug_sync='now SIGNAL t1_start';
+SET GLOBAL debug_dbug=@old_dbug;
+SET debug_sync='RESET';
+retries
+1
+SELECT * FROM t3 ORDER BY a;
+a b
+1 NULL
+3 NULL
+4 4
+5 NULL
+6 NULL
+7 7
+SET binlog_format=@old_format;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
include/start_slave.inc
-DROP TABLE t1, t2;
+DROP TABLE t1, t2, t3, t4;
DROP function foo;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_parallel_show_binlog_events_purge_logs.result b/mysql-test/suite/rpl/r/rpl_parallel_show_binlog_events_purge_logs.result
index b69deb17c4c..d454fa41111 100644
--- a/mysql-test/suite/rpl/r/rpl_parallel_show_binlog_events_purge_logs.result
+++ b/mysql-test/suite/rpl/r/rpl_parallel_show_binlog_events_purge_logs.result
@@ -7,7 +7,6 @@ SHOW BINLOG EVENTS;
SET DEBUG_SYNC= 'now WAIT_FOR on_show_binlog_events';
FLUSH LOGS;
SET DEBUG_SYNC= 'now SIGNAL end';
-SET DEBUG_SYNC= 'RESET';
[connection slave]
SET DEBUG_SYNC= 'RESET';
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result b/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result
index 289cc313e2a..cc537f83ca4 100644
--- a/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result
+++ b/mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result
@@ -14,6 +14,36 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
#########################################################################
SET AUTOCOMMIT= 0;
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (43);
+CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (42);
+DROP FUNCTION myfunc_int;
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_1)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
INSERT INTO tt_1(ddl_case) VALUES (41);
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
Table Op Msg_type Msg_text
diff --git a/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result
index 4e8e83d2187..39e1541eb0e 100644
--- a/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_row_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -15012,6 +15023,460 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_5)
+master-bin.000001 # Table_map # # table_id: # (test.nt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.tt_5)
+master-bin.000001 # Table_map # # table_id: # (test.tt_6)
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: #
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Table_map # # table_id: # (test.tt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Table_map # # table_id: # (test.nt_3)
+master-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -15034,4 +15499,5 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result b/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result
index 91adfc7965c..cb702ad64ef 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result
@@ -14,6 +14,34 @@ INSERT INTO tt_2(ddl_case) VALUES(0);
#########################################################################
SET AUTOCOMMIT= 0;
-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (43);
+CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "UDF_EXAMPLE_LIB";
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (43)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "LIB"
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+INSERT INTO tt_1(ddl_case) VALUES (42);
+DROP FUNCTION myfunc_int;
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; INSERT INTO tt_1(ddl_case) VALUES (42)
+master-bin.000001 # Xid # # COMMIT /* XID */
+master-bin.000001 # Gtid # # GTID #-#-#
+master-bin.000001 # Query # # use `test`; DROP FUNCTION myfunc_int
+-e-e-e-e-e-e-e-e-e-e-e- >> << -e-e-e-e-e-e-e-e-e-e-e-
+
+-b-b-b-b-b-b-b-b-b-b-b- >> << -b-b-b-b-b-b-b-b-b-b-b-
INSERT INTO tt_1(ddl_case) VALUES (41);
LOAD INDEX INTO CACHE nt_1 IGNORE LEAVES;
Table Op Msg_type Msg_text
diff --git a/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result b/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
index 9ca811c29c8..1cf49b30fcd 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
@@ -63,6 +63,17 @@ INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
INSERT INTO nt_5(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id + 1);
RETURN "fc_i_nt_5_suc";
END|
+CREATE FUNCTION fc_i_nt_3_tt_3_suc (p_trans_id INTEGER, p_stmt_id INTEGER) RETURNS VARCHAR(64)
+BEGIN
+DECLARE in_stmt_id INTEGER;
+SELECT max(stmt_id) INTO in_stmt_id FROM nt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO nt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+SELECT max(stmt_id) INTO in_stmt_id FROM tt_3 WHERE trans_id= p_trans_id;
+SELECT COALESCE(greatest(in_stmt_id + 1, p_stmt_id), 1) INTO in_stmt_id;
+INSERT INTO tt_3(trans_id, stmt_id) VALUES (p_trans_id, in_stmt_id);
+RETURN "fc_i_nt_3_tt_3_suc";
+END|
CREATE TRIGGER tr_i_tt_3_to_nt_3 AFTER INSERT ON tt_3 FOR EACH ROW
BEGIN
DECLARE in_stmt_id INTEGER;
@@ -12522,6 +12533,344 @@ master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt_xx_16` /
-e-e-e-e-e-e-e-e-e-e-e- >> drop-CT << -e-e-e-e-e-e-e-e-e-e-e-
###################################################################################
+# 5 - SET WITH ROW CHANGES
+###################################################################################
+rpl_mixing_engines.inc [commands=set-T]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(363, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(363,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-N]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(364, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(364,1)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=set-NT]
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(365, 1);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(365,1)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(366, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(366, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(366,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(366,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(367, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(367, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(367,4)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(367,2)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-N set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(368, 2);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(368, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(368,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-N set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(368,2)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(368,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-N set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-N R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(369, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-N << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_5_suc(369, 4);
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # COMMIT
+-e-e-e-e-e-e-e-e-e-e-e- >> set-N << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(369,2)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-N R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_5_suc`(369,4)
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(369,2)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-N R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(370, 2);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(370, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(370,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(370,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(370,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT C]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(371, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(371, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> C << -b-b-b-b-b-b-b-b-b-b-b-
+COMMIT;
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(371,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> C << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT C << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(371,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(371,4)
+master-bin.000001 # Xid # # COMMIT /* XID */
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT C << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-NT set-T R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(372, 2);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(372, 4);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(372,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(372,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-NT set-T R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(372,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(372,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-NT set-T R << -e-e-e-e-e-e-e-e-e-e-e-
+
+rpl_mixing_engines.inc [commands=B set-T set-NT R]
+-b-b-b-b-b-b-b-b-b-b-b- >> B << -b-b-b-b-b-b-b-b-b-b-b-
+BEGIN;
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> B << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-T << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_tt_5_suc(373, 2);
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-T << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> set-NT << -b-b-b-b-b-b-b-b-b-b-b-
+SET @var= fc_i_nt_3_tt_3_suc(373, 4);
+Warnings:
+Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
+include/show_binlog_events.inc
+-e-e-e-e-e-e-e-e-e-e-e- >> set-NT << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> R << -b-b-b-b-b-b-b-b-b-b-b-
+ROLLBACK;
+Warnings:
+Warning # Some non-transactional changed tables couldn't be rolled back
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(373,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(373,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> R << -e-e-e-e-e-e-e-e-e-e-e-
+-b-b-b-b-b-b-b-b-b-b-b- >> B set-T set-NT R << -b-b-b-b-b-b-b-b-b-b-b-
+include/show_binlog_events.inc
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Gtid # # BEGIN GTID #-#-#
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_tt_5_suc`(373,2)
+master-bin.000001 # Query # # use `test`; SELECT `test`.`fc_i_nt_3_tt_3_suc`(373,4)
+master-bin.000001 # Query # # ROLLBACK
+-e-e-e-e-e-e-e-e-e-e-e- >> B set-T set-NT R << -e-e-e-e-e-e-e-e-e-e-e-
+
+###################################################################################
# CHECK CONSISTENCY
###################################################################################
###################################################################################
@@ -12544,6 +12893,7 @@ DROP PROCEDURE pc_i_tt_5_suc;
DROP PROCEDURE pc_i_nt_5_suc;
DROP FUNCTION fc_i_tt_5_suc;
DROP FUNCTION fc_i_nt_5_suc;
+DROP FUNCTION fc_i_nt_3_tt_3_suc;
include/rpl_reset.inc
CREATE TABLE `t1` (
`c1` int(10) unsigned NOT NULL AUTO_INCREMENT,
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_basic.test b/mysql-test/suite/rpl/t/rpl_gtid_basic.test
index 5ecff519aef..19f90fce197 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_basic.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_basic.test
@@ -334,7 +334,7 @@ reap;
eval KILL CONNECTION $kill2_id;
--connection s6
---error 2013
+--error 2013,ER_CONNECTION_KILLED
reap;
--connection server_1
@@ -456,7 +456,7 @@ SET sql_slave_skip_counter=1;
START SLAVE UNTIL master_gtid_pos="3-1-100";
--let $master_pos=3-1-100
--source include/sync_with_master_gtid.inc
---source include/wait_for_slave_sql_to_stop.inc
+--source include/wait_for_slave_to_stop.inc
--error ER_NO_SUCH_TABLE
SELECT * FROM t2;
SELECT IF(LOCATE("3-1-100", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 3-1-100 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_crash.test b/mysql-test/suite/rpl/t/rpl_gtid_crash.test
index 0caad2a12fe..a6d07ed69f0 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_crash.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_crash.test
@@ -12,6 +12,11 @@
call mtr.add_suppression("Checking table:");
call mtr.add_suppression("client is using or hasn't closed the table properly");
call mtr.add_suppression("Table .* is marked as crashed and should be repaired");
+# We have seen this warning a couple of times in Buildbot. Since we crash the
+# server deliberately, it seems possible that we could in rare cases crash in
+# the middle of a page write. The page is recovered from the doublewrite
+# buffer ("[Note] InnoDB: Recovered the page from the doublewrite buffer.").
+call mtr.add_suppression("InnoDB: Warning: database page corruption or a failed");
flush tables;
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
@@ -269,6 +274,7 @@ SET GLOBAL debug_dbug="+d,crash_before_writing_xid";
--connection server_1
INSERT INTO t1 VALUES (9), (10);
+--let $saved_gtid=`SELECT @@last_gtid`
--save_master_pos
--connection server_2
@@ -333,6 +339,9 @@ EOF
SELECT @@GLOBAL.server_id;
SELECT * from t1 WHERE a > 10 ORDER BY a;
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
--echo # Wait 30 seconds for SQL thread to catch up with IO thread
--connection server_2
@@ -357,6 +366,11 @@ if ($read_log_pos != $exec_log_pos)
}
SELECT * from t1 WHERE a > 10 ORDER BY a;
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_slave_pos, '$saved_gtid'), "Slave pos ok", CONCAT("Unexpected slave pos: ", @@gtid_slave_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
--echo # Repeat this with additional transactions on the master
@@ -387,6 +401,7 @@ EOF
SELECT @@GLOBAL.server_id;
INSERT INTO t1 VALUES (13);
INSERT INTO t1 VALUES (14);
+--let $saved_gtid=`SELECT @@last_gtid`
SELECT * from t1 WHERE a > 10 ORDER BY a;
--source include/save_master_gtid.inc
@@ -420,6 +435,10 @@ EOF
SELECT @@GLOBAL.server_id;
SELECT * from t1 WHERE a > 10 ORDER BY a;
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
--echo # Wait 30 seconds for SQL thread to catch up with IO thread
--connection server_2
@@ -444,6 +463,11 @@ if ($read_log_pos != $exec_log_pos)
}
SELECT * from t1 WHERE a > 10 ORDER BY a;
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_slave_pos, '$saved_gtid'), "Slave pos ok", CONCAT("Unexpected slave pos: ", @@gtid_slave_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
--echo # Repeat this with additional transactions on the master
@@ -472,6 +496,7 @@ EOF
INSERT INTO t1 VALUES (23);
INSERT INTO t1 VALUES (24);
+--let $saved_gtid=`SELECT @@last_gtid`
SELECT * from t1 WHERE a > 10 ORDER BY a;
--source include/save_master_gtid.inc
@@ -479,6 +504,86 @@ SELECT * from t1 WHERE a > 10 ORDER BY a;
--source include/sync_with_master_gtid.inc
SELECT * from t1 WHERE a > 10 ORDER BY a;
+--echo # Repeat this with slave restart
+
+--connection server_1
+--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+wait
+EOF
+
+SET GLOBAL debug_dbug="+d,inject_error_writing_xid";
+BEGIN;
+INSERT INTO t1 VALUES (25);
+--error ER_ERROR_ON_WRITE
+COMMIT;
+SET GLOBAL debug_dbug="+d,crash_dispatch_command_before";
+--error 2006,2013
+COMMIT;
+
+--source include/wait_until_disconnected.inc
+
+--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+restart
+EOF
+
+--connection server_1
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+--connection server_2
+--echo # Wait 30 seconds for IO thread to connect and SQL thread to catch up
+--echo # with IO thread.
+--let $wait_timeout= 300
+while ($wait_timeout != 0)
+{
+ --let $connected=`SELECT COUNT(*) > 0 FROM information_schema.processlist WHERE State = 'Waiting for master to send event'`
+ if ($connected)
+ {
+ --let $read_log_pos= query_get_value('SHOW SLAVE STATUS', Read_Master_Log_Pos, 1)
+ --let $exec_log_pos= query_get_value('SHOW SLAVE STATUS', Exec_Master_Log_Pos, 1)
+ if ($read_log_pos == $exec_log_pos)
+ {
+ --let $wait_timeout= 0
+ }
+ if ($read_log_pos != $exec_log_pos)
+ {
+ --sleep 0.1
+ --dec $wait_timeout
+ }
+ }
+ if (!$connected)
+ {
+ --sleep 0.1
+ --dec $wait_timeout
+ }
+}
+if (`SELECT NOT $connected OR $read_log_pos != $exec_log_pos`)
+{
+ --die Timeout wait for IO thread to connect and SQL thread to catch up with IO thread
+}
+
+--source include/stop_slave.inc
+
+--connection server_1
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
+INSERT INTO t1 VALUES (26);
+INSERT INTO t1 VALUES (27);
+SELECT * from t1 WHERE a > 10 ORDER BY a;
+--source include/save_master_gtid.inc
+
+--connection server_2
+--disable_query_log
+eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_slave_pos, '$saved_gtid'), "Slave pos ok", CONCAT("Unexpected slave pos: ", @@gtid_slave_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check;
+--enable_query_log
+--source include/start_slave.inc
+--source include/sync_with_master_gtid.inc
+SELECT * from t1 WHERE a > 10 ORDER BY a;
+
--connection server_1
DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test b/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
new file mode 100644
index 00000000000..76e7c60fd59
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
@@ -0,0 +1,53 @@
+--source include/have_innodb.inc
+--source include/master-slave.inc
+--source include/have_binlog_format_row.inc
+
+#
+# Bug#68220: innodb_rows_updated is misleading on slave when *info_repository=TABLE
+#
+
+# created all the base variables at the beginning at the test
+--connection master
+select variable_value into @master_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select variable_value into @master_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select variable_value into @master_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select variable_value into @master_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select variable_value into @master_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select variable_value into @master_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select variable_value into @master_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select variable_value into @master_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+
+--connection slave
+select variable_value into @slave_rows_read from information_schema.global_status where variable_name = 'innodb_rows_read';
+select variable_value into @slave_rows_updated from information_schema.global_status where variable_name = 'innodb_rows_updated';
+select variable_value into @slave_rows_deleted from information_schema.global_status where variable_name = 'innodb_rows_deleted';
+select variable_value into @slave_rows_inserted from information_schema.global_status where variable_name = 'innodb_rows_inserted';
+select variable_value into @slave_system_rows_read from information_schema.global_status where variable_name = 'innodb_system_rows_read';
+select variable_value into @slave_system_rows_updated from information_schema.global_status where variable_name = 'innodb_system_rows_updated';
+select variable_value into @slave_system_rows_deleted from information_schema.global_status where variable_name = 'innodb_system_rows_deleted';
+select variable_value into @slave_system_rows_inserted from information_schema.global_status where variable_name = 'innodb_system_rows_inserted';
+
+--connection master
+CREATE DATABASE testdb;
+USE testdb;
+CREATE TABLE testdb.t1 (i int NOT NULL PRIMARY KEY) ENGINE=InnoDB;
+
+# insert a row and show counters on master and slave
+INSERT INTO testdb.t1 VALUES (1);
+--source suite/rpl/include/rpl_innodb_rows_counters.inc
+
+# update the row and show counters on master and slave
+UPDATE t1 SET i=2 WHERE i=1;
+--sync_slave_with_master
+--source suite/rpl/include/rpl_innodb_rows_counters.inc
+
+# delete the row and show counters on master and slave
+DELETE FROM t1 WHERE i=2;
+--source suite/rpl/include/rpl_innodb_rows_counters.inc
+
+# clean the test
+DROP TABLE t1;
+DROP DATABASE testdb;
+--sync_slave_with_master
+
+--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
index 161ab2f9dca..b2e8308b34d 100644
--- a/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
@@ -1,6 +1,7 @@
################################################################################
# Check file extra/rpl_tests/rpl_implicit_commit_binlog.test
################################################################################
+--source include/have_udf.inc
--source include/have_binlog_format_mixed.inc
--source include/master-slave.inc
--source include/have_innodb.inc
diff --git a/mysql-test/suite/rpl/t/rpl_parallel.test b/mysql-test/suite/rpl/t/rpl_parallel.test
index 4f01ef7765b..a56d45848a5 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel.test
@@ -1466,6 +1466,177 @@ SET sql_slave_skip_counter= 1;
SELECT * FROM t2 WHERE a >= 30 ORDER BY a;
+--echo *** MDEV-6775: Wrong binlog order in parallel replication ***
+--connection server_1
+# A bit tricky bug to reproduce. On the master, we binlog in statement-mode
+# two transactions, an UPDATE followed by a DELETE. On the slave, we replicate
+# with binlog-mode set to ROW, which means the DELETE, which modifies no rows,
+# is not binlogged. Then we inject a wait in the group commit code on the
+# slave, shortly before the actual commit of the UPDATE. The bug was that the
+# DELETE could wake up from wait_for_prior_commit() before the commit of the
+# UPDATE. So the test could see the slave position updated to after DELETE,
+# while the UPDATE was still not visible.
+DELETE FROM t4;
+INSERT INTO t4 VALUES (1,NULL), (3,NULL), (4,4), (5, NULL), (6, 6);
+--source include/save_master_gtid.inc
+
+--connection server_2
+--source include/sync_with_master_gtid.inc
+--source include/stop_slave.inc
+SET @old_dbug= @@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,inject_binlog_commit_before_get_LOCK_log";
+SET @old_format=@@GLOBAL.binlog_format;
+SET GLOBAL binlog_format=ROW;
+# Re-spawn the worker threads to be sure they pick up the new binlog format
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+
+--connection con1
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
+send UPDATE t4 SET b=NULL WHERE a=6;
+--connection server_1
+SET debug_sync='now WAIT_FOR master_queued1';
+
+--connection con2
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
+send DELETE FROM t4 WHERE b <= 3;
+
+--connection server_1
+SET debug_sync='now WAIT_FOR master_queued2';
+SET debug_sync='now SIGNAL master_cont1';
+
+--connection con1
+REAP;
+SET binlog_format= @old_format;
+--connection con2
+REAP;
+SET binlog_format= @old_format;
+SET debug_sync='RESET';
+--save_master_pos
+SELECT * FROM t4 ORDER BY a;
+
+--connection server_2
+--source include/start_slave.inc
+SET debug_sync= 'now WAIT_FOR waiting';
+--sync_with_master
+SELECT * FROM t4 ORDER BY a;
+SET debug_sync= 'now SIGNAL cont';
+
+# Re-spawn the worker threads to remove any DBUG injections or DEBUG_SYNC.
+--source include/stop_slave.inc
+SET GLOBAL debug_dbug=@old_dbug;
+SET GLOBAL binlog_format= @old_format;
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+--source include/start_slave.inc
+
+
+--echo *** MDEV-7237: Parallel replication: incorrect relaylog position after stop/start the slave ***
+--connection server_1
+INSERT INTO t2 VALUES (40);
+--save_master_pos
+
+--connection server_2
+--sync_with_master
+--source include/stop_slave.inc
+CHANGE MASTER TO master_use_gtid=no;
+SET @old_dbug= @@GLOBAL.debug_dbug;
+# This DBUG injection causes a DEBUG_SYNC signal "scheduled_gtid_0_x_100" when
+# GTID 0-1-100 has been scheduled for and fetched by a worker thread.
+SET GLOBAL debug_dbug="+d,rpl_parallel_scheduled_gtid_0_x_100";
+# This DBUG injection causes a DEBUG_SYNC signal "wait_for_done_waiting" when
+# STOP SLAVE has signalled all worker threads to stop.
+SET GLOBAL debug_dbug="+d,rpl_parallel_wait_for_done_trigger";
+# Reset worker threads to make DBUG setting catch on.
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+
+
+--connection server_1
+# Setup some transaction for the slave to replicate.
+INSERT INTO t2 VALUES (41);
+INSERT INTO t2 VALUES (42);
+# Need to log the DELETE in statement format, so we can see it in processlist.
+SET @old_format= @@binlog_format;
+SET binlog_format= statement;
+DELETE FROM t2 WHERE a=40;
+SET binlog_format= @old_format;
+INSERT INTO t2 VALUES (43);
+INSERT INTO t2 VALUES (44);
+# Force the slave to switch to a new relay log file.
+FLUSH LOGS;
+INSERT INTO t2 VALUES (45);
+# Inject a GTID 0-1-100, which will trigger a DEBUG_SYNC signal when this
+# transaction has been fetched by a worker thread.
+SET gtid_seq_no=100;
+INSERT INTO t2 VALUES (46);
+--save_master_pos
+
+--connection con_temp2
+# Temporarily block the DELETE on a=40 from completing.
+BEGIN;
+SELECT * FROM t2 WHERE a=40 FOR UPDATE;
+
+
+--connection server_2
+--source include/start_slave.inc
+
+# Wait for a worker thread to start on the DELETE that will be blocked
+# temporarily by the SELECT FOR UPDATE.
+--let $wait_condition= SELECT count(*) > 0 FROM information_schema.processlist WHERE state='updating' and info LIKE '%DELETE FROM t2 WHERE a=40%'
+--source include/wait_condition.inc
+
+# The DBUG injection set above will make the worker thread signal the following
+# debug_sync when the GTID 0-1-100 has been reached by a worker thread.
+# Thus, at this point, the SQL driver thread has reached the next
+# relay log file name, while a worker thread is still processing a
+# transaction in the previous relay log file, blocked on the SELECT FOR
+# UPDATE.
+SET debug_sync= 'now WAIT_FOR scheduled_gtid_0_x_100';
+# At this point, the SQL driver thread is in the new relay log file, while
+# the DELETE from the old relay log file is not yet complete. We will stop
+# the slave at this point. The bug was that the DELETE statement would
+# update the slave position to the _new_ relay log file name instead of
+# its own old file name. Thus, by stoping and restarting the slave at this
+# point, we would get an error at restart due to incorrect position. (If
+# we would let the slave catch up before stopping, the incorrect position
+# would be corrected by a later transaction).
+
+send STOP SLAVE;
+
+--connection con_temp2
+# Wait for STOP SLAVE to have proceeded sufficiently that it has signalled
+# all worker threads to stop; this ensures that we will stop after the DELETE
+# transaction (and not after a later transaction that might have been able
+# to set a fixed position).
+SET debug_sync= 'now WAIT_FOR wait_for_done_waiting';
+# Now release the row lock that was blocking the replication of DELETE.
+ROLLBACK;
+
+--connection server_2
+reap;
+--source include/wait_for_slave_sql_to_stop.inc
+SELECT * FROM t2 WHERE a >= 40 ORDER BY a;
+# Now restart the slave. With the bug present, this would start at an
+# incorrect relay log position, causing relay log read error (or if unlucky,
+# silently skip a number of events).
+--source include/start_slave.inc
+--sync_with_master
+SELECT * FROM t2 WHERE a >= 40 ORDER BY a;
+--source include/stop_slave.inc
+SET GLOBAL debug_dbug=@old_dbug;
+SET DEBUG_SYNC= 'RESET';
+SET GLOBAL slave_parallel_threads=0;
+SET GLOBAL slave_parallel_threads=10;
+CHANGE MASTER TO master_use_gtid=slave_pos;
+--source include/start_slave.inc
+
+
+# Clean up.
--connection server_2
--source include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
diff --git a/mysql-test/suite/rpl/t/rpl_parallel2.test b/mysql-test/suite/rpl/t/rpl_parallel2.test
index 39b35063c7c..51c9e39a26a 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel2.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel2.test
@@ -25,6 +25,13 @@ INSERT INTO t1 VALUES (1,sleep(2));
--connection server_2
--sync_with_master
+# The slave position (which --sync_with_master waits for) is updated just
+# before the Seconds_Behind_Master. So we have to wait for the zero status
+# to appear, otherwise there is a small window between --sync_with_master
+# and SHOW SLAVE STATUS where we can see a non-zero value.
+--let $slave_param= Seconds_Behind_Master
+--let $slave_param_value= 0
+--source include/wait_for_slave_param.inc
--echo Seconds_Behind_Master should be zero here because the slave is fully caught up and idle.
--let $status_items= Seconds_Behind_Master
--source include/show_slave_status.inc
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_retry.test b/mysql-test/suite/rpl/t/rpl_parallel_retry.test
index d3be6262cb0..b3a8ea45cf0 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_retry.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_retry.test
@@ -135,7 +135,6 @@ SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_gtid_0_x_100,rpl_parall
let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
START SLAVE;
--let $slave_sql_errno= 1213
---let $slave_timeout= 10
--source include/wait_for_slave_sql_error.inc
SET GLOBAL debug_dbug=@old_dbug;
let $new_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
@@ -208,13 +207,178 @@ SELECT a, LENGTH(b) FROM t2 ORDER BY a;
SET GLOBAL max_relay_log_size=@old_max;
+--echo *** MDEV-7065: Incorrect relay log position in parallel replication after retry of transaction ***
+
+--connection server_2
+--source include/stop_slave.inc
+
+--connection server_1
+BEGIN;
+INSERT INTO t1 VALUES (100, 0);
+INSERT INTO t1 VALUES (101, 0);
+INSERT INTO t1 VALUES (102, 0);
+INSERT INTO t1 VALUES (103, 0);
+COMMIT;
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+--save_master_pos
+
+--connection server_2
+# Inject a DBUG error insert to cause the XID event of the single transaction
+# from the master to fail with a deadlock error and be retried.
+# The bug was that the retry of the XID would leave the relay log position
+# incorrect (off by the size of XID event).
+SET @old_dbug= @@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_xid";
+let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
+--source include/start_slave.inc
+--sync_with_master
+SET GLOBAL debug_dbug=@old_dbug;
+let $new_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
+--disable_query_log
+eval SELECT $new_retry - $old_retry AS retries;
+--enable_query_log
+
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+# Stop the SQL thread. When the bug was there to give the incorrect relay log
+# position, the restart of the SQL thread would read garbage data from the
+# middle of an event and fail with relay log IO error.
+--source include/stop_slave_sql.inc
+
+--connection server_1
+INSERT INTO t1 VALUES (104, 1);
+INSERT INTO t1 VALUES (105, 1);
+INSERT INTO t1 VALUES (106, 1);
+INSERT INTO t1 VALUES (107, 1);
+INSERT INTO t1 VALUES (108, 1);
+INSERT INTO t1 VALUES (109, 1);
+--save_master_pos
+
+--connection server_2
+--source include/start_slave.inc
+--sync_with_master
+SELECT * FROM t1 WHERE a >= 100 ORDER BY a;
+
+
+--echo *** MDEV-6917: Parallel replication: "Commit failed due to failure of an earlier commit on which this one depends", but no prior failure seen **
+
+--connection server_1
+CREATE TABLE t3 (a INT PRIMARY KEY, b INT, KEY b_idx(b)) ENGINE=InnoDB;
+INSERT INTO t3 VALUES (1,NULL), (2,2), (3,NULL), (4,4), (5, NULL), (6, 6);
+CREATE TABLE t4 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
+
+# We need statement binlog format to be able to inject debug_sync statements
+# on the slave with calls to foo().
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+--save_master_pos
+
+--connection server_2
+--sync_with_master
+--source include/stop_slave.inc
+CHANGE MASTER TO master_use_gtid=no;
+
+--connection server_1
+
+# Create a group commit with three transactions T1, T2, T3.
+# T2 will block T1 on the slave where we will make it run first, so it will be
+# deadlock killed.
+# The bug was that in this case, T3 was signalled to fail due to T2 failing,
+# even though the retry of T2 was later successful.
+
+--connect (con1,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (10, foo(1, 'before_execute_sql_command WAIT_FOR t1_start', ''));
+UPDATE t3 SET b=NULL WHERE a=6;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
+send COMMIT;
+--connection server_1
+SET debug_sync='now WAIT_FOR master_queued1';
+
+--connect (con2,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (20, foo(2, 'group_commit_waiting_for_prior SIGNAL t2_waiting', ''));
+DELETE FROM t3 WHERE b <= 3;
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
+send COMMIT;
+
+--connection server_1
+SET debug_sync='now WAIT_FOR master_queued2';
+
+--connect (con3,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
+SET @old_format= @@SESSION.binlog_format;
+SET binlog_format='statement';
+BEGIN;
+INSERT INTO t4 VALUES (30, foo(3, 'before_execute_sql_command WAIT_FOR t3_start', 'group_commit_waiting_for_prior SIGNAL t3_waiting'));
+INSERT INTO t3 VALUES (7,7);
+SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
+send COMMIT;
+
+--connection server_1
+SET debug_sync='now WAIT_FOR master_queued3';
+SET debug_sync='now SIGNAL master_cont1';
+
+--connection con1
+REAP;
+SET binlog_format=@old_format;
+--connection con2
+REAP;
+SET binlog_format=@old_format;
+--connection con3
+REAP;
+SET debug_sync='RESET';
+SET binlog_format=@old_format;
+
+--connection server_1
+--save_master_pos
+SELECT * FROM t3 ORDER BY a;
+
+
+--connection server_2
+let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
+SET @old_dbug=@@GLOBAL.debug_dbug;
+SET GLOBAL debug_dbug="+d,thd_need_ordering_with_force";
+--source include/start_slave.inc
+# First, wait for T2 to complete up to where it is waiting for T1 to group
+# commit for both of them. This will set locks that will block T1, causing
+# a deadlock kill and retry of T2. T1 and T3 are still blocked at the start
+# of each their SQL statements.
+SET debug_sync='now WAIT_FOR t2_waiting';
+# Now let T3 move on until the point where it is itself ready to commit.
+SET debug_sync='now SIGNAL t3_start';
+SET debug_sync='now WAIT_FOR t3_waiting';
+# Now T2 and T3 are set up, so we can let T1 proceed.
+SET debug_sync='now SIGNAL t1_start';
+# Now we can wait for the slave to catch up.
+# We should see T2 being deadlock killed and retried.
+# The bug was that T2 deadlock kill would cause T3 to fail due to failure
+# of an earlier commit. This is wrong as T2 did not fail, it was only
+# retried.
+--sync_with_master
+SET GLOBAL debug_dbug=@old_dbug;
+SET debug_sync='RESET';
+let $new_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
+--disable_query_log
+eval SELECT $new_retry - $old_retry >= 1 AS retries;
+--enable_query_log
+SELECT * FROM t3 ORDER BY a;
+
+
+--connection server_1
+SET binlog_format=@old_format;
+
+
+# Clean up.
--connection server_2
--source include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
--source include/start_slave.inc
--connection server_1
-DROP TABLE t1, t2;
+DROP TABLE t1, t2, t3, t4;
DROP function foo;
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test b/mysql-test/suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test
index 16d986268c9..83d847318d8 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_show_binlog_events_purge_logs.test
@@ -22,7 +22,6 @@ SET DEBUG_SYNC= 'after_show_binlog_events SIGNAL on_show_binlog_events WAIT_FOR
SET DEBUG_SYNC= 'now WAIT_FOR on_show_binlog_events';
FLUSH LOGS;
SET DEBUG_SYNC= 'now SIGNAL end';
-SET DEBUG_SYNC= 'RESET';
--echo [connection slave]
--connection slave
diff --git a/mysql-test/suite/rpl/t/rpl_parallel_temptable.test b/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
index 8eb397c3460..b13fa5a01b1 100644
--- a/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
+++ b/mysql-test/suite/rpl/t/rpl_parallel_temptable.test
@@ -1,6 +1,8 @@
--source include/have_innodb.inc
--source include/have_debug.inc
--source include/have_binlog_format_statement.inc
+# Valgrind does not work well with test that crashes the server
+--source include/not_valgrind.inc
--let $rpl_topology=1->2
--source include/rpl_init.inc
diff --git a/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
index cfad4fca433..2b35f68ff63 100644
--- a/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
@@ -1,6 +1,7 @@
################################################################################
# Check file extra/rpl_tests/rpl_implicit_commit_binlog.test
################################################################################
+--source include/have_udf.inc
--source include/have_binlog_format_row.inc
--source include/master-slave.inc
--source include/have_innodb.inc
diff --git a/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test b/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test
index 7ba5e90b96d..84c5c215a08 100644
--- a/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test
+++ b/mysql-test/suite/rpl/t/rpl_show_slave_hosts.test
@@ -25,6 +25,11 @@ let $field= Server_id;
# 3 is server_id of slave2.
let $condition= ='3';
source include/wait_show_condition.inc;
+# Make sure that the other slave also had time to register. Otherwise we get
+# occasional spurious failures where server_id=2 is missing from SHOW SLAVE
+# HOSTS, when that slave is much slower to register due to thread scheduling.
+let $condition= ='2';
+source include/wait_show_condition.inc;
--replace_column 3 'SLAVE_PORT'
--replace_result $SLAVE_MYPORT SLAVE_PORT $DEFAULT_MASTER_PORT DEFAULT_PORT
SHOW SLAVE HOSTS;
diff --git a/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
index ae59008c3ee..1e66b76abc8 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
@@ -1,6 +1,7 @@
################################################################################
# Check file extra/rpl_tests/rpl_implicit_commit_binlog.test
################################################################################
+--source include/have_udf.inc
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc
--source include/have_innodb.inc
diff --git a/mysql-test/suite/storage_engine/trx/xa_recovery.test b/mysql-test/suite/storage_engine/trx/xa_recovery.test
index 995878424f4..8256d068ade 100644
--- a/mysql-test/suite/storage_engine/trx/xa_recovery.test
+++ b/mysql-test/suite/storage_engine/trx/xa_recovery.test
@@ -56,10 +56,14 @@ XA PREPARE 'xa2';
--connection default
--enable_reconnect
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-restart
+wait
EOF
--shutdown_server 0
--source include/wait_until_disconnected.inc
+
+--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+restart
+EOF
--source include/wait_until_connected_again.inc
XA RECOVER;
XA ROLLBACK 'xa1';
diff --git a/mysql-test/suite/sys_vars/r/character_set_connection_func.result b/mysql-test/suite/sys_vars/r/character_set_connection_func.result
index 6fc33a4f369..7f3c4e42ce6 100644
--- a/mysql-test/suite/sys_vars/r/character_set_connection_func.result
+++ b/mysql-test/suite/sys_vars/r/character_set_connection_func.result
@@ -11,7 +11,7 @@ SELECT @@global.character_set_connection;
utf8
SELECT @@session.character_set_connection;
@@session.character_set_connection
-utf8
+latin1
'#--------------------FN_DYNVARS_011_02-------------------------#'
'connection default'
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/sys_vars/r/character_set_results_func.result b/mysql-test/suite/sys_vars/r/character_set_results_func.result
index d92821fdfa6..14bad0f4eb4 100644
--- a/mysql-test/suite/sys_vars/r/character_set_results_func.result
+++ b/mysql-test/suite/sys_vars/r/character_set_results_func.result
@@ -9,7 +9,7 @@ SELECT @@global.character_set_results;
utf8
SELECT @@session.character_set_results;
@@session.character_set_results
-utf8
+latin1
'#--------------------FN_DYNVARS_012_02-------------------------#'
'connection default'
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/sys_vars/r/collation_connection_func.result b/mysql-test/suite/sys_vars/r/collation_connection_func.result
index 18f82dc60e1..b40efda517f 100644
--- a/mysql-test/suite/sys_vars/r/collation_connection_func.result
+++ b/mysql-test/suite/sys_vars/r/collation_connection_func.result
@@ -9,7 +9,7 @@ SELECT @@global.collation_connection;
latin1_danish_ci
SELECT @@session.collation_connection;
@@session.collation_connection
-latin1_danish_ci
+latin1_swedish_ci
'#--------------------FN_DYNVARS_015_02-------------------------#'
'connection default'
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_lwm_basic.result b/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_lwm_basic.result
index 1797845def2..bfd59cfd9cc 100644
--- a/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_lwm_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_lwm_basic.result
@@ -7,55 +7,55 @@ SET @@global.innodb_adaptive_flushing_lwm = 1;
SET @@global.innodb_adaptive_flushing_lwm = DEFAULT;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-10
+10.000000
'#---------------------FN_DYNVARS_046_02-------------------------#'
SET innodb_adaptive_flushing_lwm = 1;
ERROR HY000: Variable 'innodb_adaptive_flushing_lwm' is a GLOBAL variable and should be set with SET GLOBAL
SELECT @@innodb_adaptive_flushing_lwm;
@@innodb_adaptive_flushing_lwm
-10
+10.000000
SELECT local.innodb_adaptive_flushing_lwm;
ERROR 42S02: Unknown table 'local' in field list
SET global innodb_adaptive_flushing_lwm = 1;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-1
+1.000000
'#--------------------FN_DYNVARS_046_03------------------------#'
SET @@global.innodb_adaptive_flushing_lwm = 1;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-1
+1.000000
SET @@global.innodb_adaptive_flushing_lwm = 60;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-60
+60.000000
SET @@global.innodb_adaptive_flushing_lwm = 70;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-70
+70.000000
'#--------------------FN_DYNVARS_046_04-------------------------#'
SET @@global.innodb_adaptive_flushing_lwm = -1;
Warnings:
Warning 1292 Truncated incorrect innodb_adaptive_flushing_lwm value: '-1'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-0
+0.000000
SET @@global.innodb_adaptive_flushing_lwm = "T";
ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing_lwm'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-0
+0.000000
SET @@global.innodb_adaptive_flushing_lwm = "Y";
ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing_lwm'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-0
+0.000000
SET @@global.innodb_adaptive_flushing_lwm = 71;
Warnings:
Warning 1292 Truncated incorrect innodb_adaptive_flushing_lwm value: '71'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-70
+70.000000
'#----------------------FN_DYNVARS_046_05------------------------#'
SELECT @@global.innodb_adaptive_flushing_lwm =
VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
@@ -65,32 +65,32 @@ VARIABLE_VALUE
1
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-70
+70.000000
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='innodb_adaptive_flushing_lwm';
VARIABLE_VALUE
-70
+70.000000
'#---------------------FN_DYNVARS_046_06-------------------------#'
SET @@global.innodb_adaptive_flushing_lwm = OFF;
ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing_lwm'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-70
+70.000000
SET @@global.innodb_adaptive_flushing_lwm = ON;
ERROR 42000: Incorrect argument type to variable 'innodb_adaptive_flushing_lwm'
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-70
+70.000000
'#---------------------FN_DYNVARS_046_07----------------------#'
SET @@global.innodb_adaptive_flushing_lwm = TRUE;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-1
+1.000000
SET @@global.innodb_adaptive_flushing_lwm = FALSE;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-0
+0.000000
SET @@global.innodb_adaptive_flushing_lwm = @global_start_value;
SELECT @@global.innodb_adaptive_flushing_lwm;
@@global.innodb_adaptive_flushing_lwm
-10
+10.000000
diff --git a/mysql-test/suite/sys_vars/r/innodb_io_capacity_max_basic.result b/mysql-test/suite/sys_vars/r/innodb_io_capacity_max_basic.result
index ebc934acf6e..f22d11e1b62 100644
--- a/mysql-test/suite/sys_vars/r/innodb_io_capacity_max_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_io_capacity_max_basic.result
@@ -45,27 +45,42 @@ set global innodb_io_capacity_max=1e1;
ERROR 42000: Incorrect argument type to variable 'innodb_io_capacity_max'
set global innodb_io_capacity_max="foo";
ERROR 42000: Incorrect argument type to variable 'innodb_io_capacity_max'
-set global innodb_io_capacity_max=@start_innodb_capacity - 1;
+set global innodb_io_capacity_max=1000;
+set global innodb_io_capacity=500;
+set global innodb_io_capacity_max=400;
Warnings:
-Warning 1210 innodb_io_capacity_max cannot be set lower than innodb_io_capacity.
-Warning 1210 Setting innodb_io_capacity_max to 200
+Warning 1210 Setting innodb_io_capacity_max 400 lower than innodb_io_capacity 500.
+Warning 1210 Setting innodb_io_capacity to 400
select @@global.innodb_io_capacity_max;
@@global.innodb_io_capacity_max
-200
+400
+select @@global.innodb_io_capacity;
+@@global.innodb_io_capacity
+400
select * from information_schema.global_variables where variable_name='innodb_io_capacity_max';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_IO_CAPACITY_MAX 200
-set global innodb_io_capacity_max=-7;
+INNODB_IO_CAPACITY_MAX 400
+select * from information_schema.global_variables where variable_name='innodb_io_capacity';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_IO_CAPACITY 400
+set global innodb_io_capacity_max=1000;
+set global innodb_io_capacity=500;
+set global innodb_io_capacity=1400;
Warnings:
-Warning 1292 Truncated incorrect innodb_io_capacity_max value: '-7'
-Warning 1210 innodb_io_capacity_max cannot be set lower than innodb_io_capacity.
-Warning 1210 Setting innodb_io_capacity_max to 200
+Warning 1210 Setting innodb_io_capacity to 1400 higher than innodb_io_capacity_max 1000
+Warning 1210 Setting innodb_max_io_capacity to 2800
select @@global.innodb_io_capacity_max;
@@global.innodb_io_capacity_max
-200
+2800
+select @@global.innodb_io_capacity;
+@@global.innodb_io_capacity
+1400
select * from information_schema.global_variables where variable_name='innodb_io_capacity_max';
VARIABLE_NAME VARIABLE_VALUE
-INNODB_IO_CAPACITY_MAX 200
+INNODB_IO_CAPACITY_MAX 2800
+select * from information_schema.global_variables where variable_name='innodb_io_capacity';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_IO_CAPACITY 1400
set global innodb_io_capacity=100;
set global innodb_io_capacity_max=100;
select @@global.innodb_io_capacity_max;
diff --git a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_basic.result b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_basic.result
index eff72613102..d705624eb53 100644
--- a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_basic.result
@@ -4,58 +4,64 @@ SELECT @global_start_value;
75
'#--------------------FN_DYNVARS_046_01------------------------#'
SET @@global.innodb_max_dirty_pages_pct = 0;
-SET @@global.innodb_max_dirty_pages_pct = DEFAULT;
+Warnings:
+Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '0'
+SET @@global.innodb_max_dirty_pages_pct = @global_start_value;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-75
+75.000000
'#---------------------FN_DYNVARS_046_02-------------------------#'
SET innodb_max_dirty_pages_pct = 1;
ERROR HY000: Variable 'innodb_max_dirty_pages_pct' is a GLOBAL variable and should be set with SET GLOBAL
SELECT @@innodb_max_dirty_pages_pct;
@@innodb_max_dirty_pages_pct
-75
+75.000000
SELECT local.innodb_max_dirty_pages_pct;
ERROR 42S02: Unknown table 'local' in field list
SET global innodb_max_dirty_pages_pct = 0;
+Warnings:
+Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '0'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
'#--------------------FN_DYNVARS_046_03------------------------#'
SET @@global.innodb_max_dirty_pages_pct = 0;
+Warnings:
+Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '0'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
SET @@global.innodb_max_dirty_pages_pct = 1;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-1
+1.000000
SET @@global.innodb_max_dirty_pages_pct = 99;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-99
+99.000000
'#--------------------FN_DYNVARS_046_04-------------------------#'
SET @@global.innodb_max_dirty_pages_pct = -1;
Warnings:
Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '-1'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
SET @@global.innodb_max_dirty_pages_pct = "T";
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
SET @@global.innodb_max_dirty_pages_pct = "Y";
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
SET @@global.innodb_max_dirty_pages_pct = 1001;
Warnings:
Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '1001'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-99
+99.999000
'#----------------------FN_DYNVARS_046_05------------------------#'
SELECT @@global.innodb_max_dirty_pages_pct =
VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
@@ -65,32 +71,34 @@ VARIABLE_VALUE
1
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-99
+99.999000
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='innodb_max_dirty_pages_pct';
VARIABLE_VALUE
-99
+99.999000
'#---------------------FN_DYNVARS_046_06-------------------------#'
SET @@global.innodb_max_dirty_pages_pct = OFF;
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-99
+99.999000
SET @@global.innodb_max_dirty_pages_pct = ON;
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-99
+99.999000
'#---------------------FN_DYNVARS_046_07----------------------#'
SET @@global.innodb_max_dirty_pages_pct = TRUE;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-1
+1.000000
SET @@global.innodb_max_dirty_pages_pct = FALSE;
+Warnings:
+Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct value: '0'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-0
+0.001000
SET @@global.innodb_max_dirty_pages_pct = @global_start_value;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-75
+75.000000
diff --git a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result
index 55de5adbc33..05aa3e5fd89 100644
--- a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result
+++ b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_func.result
@@ -5,13 +5,13 @@ SET @@global.innodb_max_dirty_pages_pct = 80;
'connection con1'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-80
+80.000000
SET @@global.innodb_max_dirty_pages_pct = 70;
'connect (con2,localhost,root,,,,)'
'connection con2'
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-70
+70.000000
'connection default'
'disconnect con2'
'disconnect con1'
diff --git a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_lwm_basic.result b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_lwm_basic.result
index 82388cebc82..676ec103664 100644
--- a/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_lwm_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_max_dirty_pages_pct_lwm_basic.result
@@ -1,70 +1,70 @@
SET @pct_lwm_start_value = @@global.innodb_max_dirty_pages_pct_lwm;
SELECT @pct_lwm_start_value;
@pct_lwm_start_value
-0
+0.001
SET @pct_start_value = @@global.innodb_max_dirty_pages_pct;
SELECT @pct_start_value;
@pct_start_value
75
'#--------------------FN_DYNVARS_046_01------------------------#'
SET @@global.innodb_max_dirty_pages_pct_lwm = 0;
-SET @@global.innodb_max_dirty_pages_pct_lwm = DEFAULT;
+SET @@global.innodb_max_dirty_pages_pct_lwm = @pct_lwm_start_value;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.001000
'#---------------------FN_DYNVARS_046_02-------------------------#'
SET innodb_max_dirty_pages_pct_lwm = 1;
ERROR HY000: Variable 'innodb_max_dirty_pages_pct_lwm' is a GLOBAL variable and should be set with SET GLOBAL
SELECT @@innodb_max_dirty_pages_pct_lwm;
@@innodb_max_dirty_pages_pct_lwm
-0
+0.001000
SELECT local.innodb_max_dirty_pages_pct_lwm;
ERROR 42S02: Unknown table 'local' in field list
SET global innodb_max_dirty_pages_pct_lwm = 0;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
'#--------------------FN_DYNVARS_046_03------------------------#'
SET @@global.innodb_max_dirty_pages_pct_lwm = 0;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = @pct_start_value;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
'#--------------------FN_DYNVARS_046_04-------------------------#'
SET @@global.innodb_max_dirty_pages_pct_lwm = -1;
Warnings:
Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct_lwm value: '-1'
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = "T";
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct_lwm'
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = "Y";
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct_lwm'
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = @pct_start_value + 1;
Warnings:
Warning 1210 innodb_max_dirty_pages_pct_lwm cannot be set higher than innodb_max_dirty_pages_pct.
-Warning 1210 Setting innodb_max_dirty_page_pct_lwm to 75
+Warning 1210 Setting innodb_max_dirty_page_pct_lwm to 75.000000
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = 100;
Warnings:
Warning 1292 Truncated incorrect innodb_max_dirty_pages_pct_lwm value: '100'
Warning 1210 innodb_max_dirty_pages_pct_lwm cannot be set higher than innodb_max_dirty_pages_pct.
-Warning 1210 Setting innodb_max_dirty_page_pct_lwm to 75
+Warning 1210 Setting innodb_max_dirty_page_pct_lwm to 75.000000
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
'#----------------------FN_DYNVARS_046_05------------------------#'
SELECT @@global.innodb_max_dirty_pages_pct_lwm =
VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
@@ -74,36 +74,36 @@ VARIABLE_VALUE
1
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='innodb_max_dirty_pages_pct_lwm';
VARIABLE_VALUE
-75
+75.000000
'#---------------------FN_DYNVARS_046_06-------------------------#'
SET @@global.innodb_max_dirty_pages_pct_lwm = OFF;
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct_lwm'
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = ON;
ERROR 42000: Incorrect argument type to variable 'innodb_max_dirty_pages_pct_lwm'
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-75
+75.000000
'#---------------------FN_DYNVARS_046_07----------------------#'
SET @@global.innodb_max_dirty_pages_pct_lwm = TRUE;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-1
+1.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = FALSE;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.000000
SET @@global.innodb_max_dirty_pages_pct = @pct_start_value;
SELECT @@global.innodb_max_dirty_pages_pct;
@@global.innodb_max_dirty_pages_pct
-75
+75.000000
SET @@global.innodb_max_dirty_pages_pct_lwm = @pct_lwm_start_value;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
@@global.innodb_max_dirty_pages_pct_lwm
-0
+0.001000
diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result
index de24e7d3019..8a88b7c4d49 100644
--- a/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_monitor_disable_basic.result
@@ -227,6 +227,10 @@ dml_reads disabled
dml_inserts disabled
dml_deletes disabled
dml_updates disabled
+dml_system_reads disabled
+dml_system_inserts disabled
+dml_system_deletes disabled
+dml_system_updates disabled
ddl_background_drop_indexes disabled
ddl_background_drop_tables disabled
ddl_online_create_index disabled
@@ -449,6 +453,10 @@ dml_reads 4 NULL 4 4 NULL 4 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 0 NULL 0 0 NULL 0 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
delete from monitor_test;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -459,6 +467,10 @@ dml_reads 6 NULL 6 6 NULL 6 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 2 NULL 2 2 NULL 2 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -469,6 +481,10 @@ dml_reads 6 NULL 6 0 NULL 0 enabled
dml_inserts 1 NULL 1 0 NULL 0 enabled
dml_deletes 2 NULL 2 0 NULL 0 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
insert into monitor_test values(9);
insert into monitor_test values(1);
delete from monitor_test;
@@ -481,6 +497,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -491,6 +511,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_disable = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -501,6 +525,10 @@ dml_reads 8 NULL 8 2 NULL 2 disabled
dml_inserts 3 NULL 3 2 NULL 2 disabled
dml_deletes 4 NULL 4 2 NULL 2 disabled
dml_updates 2 NULL 2 0 NULL 0 disabled
+dml_system_reads 0 NULL 0 0 NULL 0 disabled
+dml_system_inserts 0 NULL 0 0 NULL 0 disabled
+dml_system_deletes 0 NULL 0 0 NULL 0 disabled
+dml_system_updates 0 NULL 0 0 NULL 0 disabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -511,6 +539,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts NULL NULL 0 NULL NULL 0 disabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_enable = dml_inserts;
insert into monitor_test values(9);
insert into monitor_test values(1);
@@ -524,6 +556,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts 2 NULL 2 2 NULL 2 enabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_disable = module_dml;
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result
index de24e7d3019..8a88b7c4d49 100644
--- a/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_monitor_enable_basic.result
@@ -227,6 +227,10 @@ dml_reads disabled
dml_inserts disabled
dml_deletes disabled
dml_updates disabled
+dml_system_reads disabled
+dml_system_inserts disabled
+dml_system_deletes disabled
+dml_system_updates disabled
ddl_background_drop_indexes disabled
ddl_background_drop_tables disabled
ddl_online_create_index disabled
@@ -449,6 +453,10 @@ dml_reads 4 NULL 4 4 NULL 4 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 0 NULL 0 0 NULL 0 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
delete from monitor_test;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -459,6 +467,10 @@ dml_reads 6 NULL 6 6 NULL 6 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 2 NULL 2 2 NULL 2 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -469,6 +481,10 @@ dml_reads 6 NULL 6 0 NULL 0 enabled
dml_inserts 1 NULL 1 0 NULL 0 enabled
dml_deletes 2 NULL 2 0 NULL 0 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
insert into monitor_test values(9);
insert into monitor_test values(1);
delete from monitor_test;
@@ -481,6 +497,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -491,6 +511,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_disable = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -501,6 +525,10 @@ dml_reads 8 NULL 8 2 NULL 2 disabled
dml_inserts 3 NULL 3 2 NULL 2 disabled
dml_deletes 4 NULL 4 2 NULL 2 disabled
dml_updates 2 NULL 2 0 NULL 0 disabled
+dml_system_reads 0 NULL 0 0 NULL 0 disabled
+dml_system_inserts 0 NULL 0 0 NULL 0 disabled
+dml_system_deletes 0 NULL 0 0 NULL 0 disabled
+dml_system_updates 0 NULL 0 0 NULL 0 disabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -511,6 +539,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts NULL NULL 0 NULL NULL 0 disabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_enable = dml_inserts;
insert into monitor_test values(9);
insert into monitor_test values(1);
@@ -524,6 +556,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts 2 NULL 2 2 NULL 2 enabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_disable = module_dml;
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result
index de24e7d3019..8a88b7c4d49 100644
--- a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_all_basic.result
@@ -227,6 +227,10 @@ dml_reads disabled
dml_inserts disabled
dml_deletes disabled
dml_updates disabled
+dml_system_reads disabled
+dml_system_inserts disabled
+dml_system_deletes disabled
+dml_system_updates disabled
ddl_background_drop_indexes disabled
ddl_background_drop_tables disabled
ddl_online_create_index disabled
@@ -449,6 +453,10 @@ dml_reads 4 NULL 4 4 NULL 4 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 0 NULL 0 0 NULL 0 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
delete from monitor_test;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -459,6 +467,10 @@ dml_reads 6 NULL 6 6 NULL 6 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 2 NULL 2 2 NULL 2 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -469,6 +481,10 @@ dml_reads 6 NULL 6 0 NULL 0 enabled
dml_inserts 1 NULL 1 0 NULL 0 enabled
dml_deletes 2 NULL 2 0 NULL 0 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
insert into monitor_test values(9);
insert into monitor_test values(1);
delete from monitor_test;
@@ -481,6 +497,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -491,6 +511,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_disable = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -501,6 +525,10 @@ dml_reads 8 NULL 8 2 NULL 2 disabled
dml_inserts 3 NULL 3 2 NULL 2 disabled
dml_deletes 4 NULL 4 2 NULL 2 disabled
dml_updates 2 NULL 2 0 NULL 0 disabled
+dml_system_reads 0 NULL 0 0 NULL 0 disabled
+dml_system_inserts 0 NULL 0 0 NULL 0 disabled
+dml_system_deletes 0 NULL 0 0 NULL 0 disabled
+dml_system_updates 0 NULL 0 0 NULL 0 disabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -511,6 +539,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts NULL NULL 0 NULL NULL 0 disabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_enable = dml_inserts;
insert into monitor_test values(9);
insert into monitor_test values(1);
@@ -524,6 +556,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts 2 NULL 2 2 NULL 2 enabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_disable = module_dml;
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
diff --git a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result
index de24e7d3019..8a88b7c4d49 100644
--- a/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result
+++ b/mysql-test/suite/sys_vars/r/innodb_monitor_reset_basic.result
@@ -227,6 +227,10 @@ dml_reads disabled
dml_inserts disabled
dml_deletes disabled
dml_updates disabled
+dml_system_reads disabled
+dml_system_inserts disabled
+dml_system_deletes disabled
+dml_system_updates disabled
ddl_background_drop_indexes disabled
ddl_background_drop_tables disabled
ddl_online_create_index disabled
@@ -449,6 +453,10 @@ dml_reads 4 NULL 4 4 NULL 4 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 0 NULL 0 0 NULL 0 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
delete from monitor_test;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -459,6 +467,10 @@ dml_reads 6 NULL 6 6 NULL 6 enabled
dml_inserts 1 NULL 1 1 NULL 1 enabled
dml_deletes 2 NULL 2 2 NULL 2 enabled
dml_updates 2 NULL 2 2 NULL 2 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -469,6 +481,10 @@ dml_reads 6 NULL 6 0 NULL 0 enabled
dml_inserts 1 NULL 1 0 NULL 0 enabled
dml_deletes 2 NULL 2 0 NULL 0 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
insert into monitor_test values(9);
insert into monitor_test values(1);
delete from monitor_test;
@@ -481,6 +497,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -491,6 +511,10 @@ dml_reads 8 NULL 8 2 NULL 2 enabled
dml_inserts 3 NULL 3 2 NULL 2 enabled
dml_deletes 4 NULL 4 2 NULL 2 enabled
dml_updates 2 NULL 2 0 NULL 0 enabled
+dml_system_reads 0 NULL 0 0 NULL 0 enabled
+dml_system_inserts 0 NULL 0 0 NULL 0 enabled
+dml_system_deletes 0 NULL 0 0 NULL 0 enabled
+dml_system_updates 0 NULL 0 0 NULL 0 enabled
set global innodb_monitor_disable = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -501,6 +525,10 @@ dml_reads 8 NULL 8 2 NULL 2 disabled
dml_inserts 3 NULL 3 2 NULL 2 disabled
dml_deletes 4 NULL 4 2 NULL 2 disabled
dml_updates 2 NULL 2 0 NULL 0 disabled
+dml_system_reads 0 NULL 0 0 NULL 0 disabled
+dml_system_inserts 0 NULL 0 0 NULL 0 disabled
+dml_system_deletes 0 NULL 0 0 NULL 0 disabled
+dml_system_updates 0 NULL 0 0 NULL 0 disabled
set global innodb_monitor_reset_all = module_dml;
select name, max_count, min_count, count,
max_count_reset, min_count_reset, count_reset, status
@@ -511,6 +539,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts NULL NULL 0 NULL NULL 0 disabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_enable = dml_inserts;
insert into monitor_test values(9);
insert into monitor_test values(1);
@@ -524,6 +556,10 @@ dml_reads NULL NULL 0 NULL NULL 0 disabled
dml_inserts 2 NULL 2 2 NULL 2 enabled
dml_deletes NULL NULL 0 NULL NULL 0 disabled
dml_updates NULL NULL 0 NULL NULL 0 disabled
+dml_system_reads NULL NULL 0 NULL NULL 0 disabled
+dml_system_inserts NULL NULL 0 NULL NULL 0 disabled
+dml_system_deletes NULL NULL 0 NULL NULL 0 disabled
+dml_system_updates NULL NULL 0 NULL NULL 0 disabled
set global innodb_monitor_disable = module_dml;
drop table monitor_test;
set global innodb_monitor_enable = file_num_open_files;
diff --git a/mysql-test/suite/sys_vars/r/innodb_stats_modified_counter_basic.result b/mysql-test/suite/sys_vars/r/innodb_stats_modified_counter_basic.result
new file mode 100644
index 00000000000..fa0861d7930
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_stats_modified_counter_basic.result
@@ -0,0 +1,56 @@
+SET @start_global_value = @@global.innodb_stats_modified_counter;
+SELECT @start_global_value;
+@start_global_value
+0
+Valid values are one or above
+select @@global.innodb_stats_modified_counter >=1;
+@@global.innodb_stats_modified_counter >=1
+0
+select @@global.innodb_stats_modified_counter;
+@@global.innodb_stats_modified_counter
+0
+select @@session.innodb_stats_modified_counter;
+ERROR HY000: Variable 'innodb_stats_modified_counter' is a GLOBAL variable
+show global variables like 'innodb_stats_modified_counter';
+Variable_name Value
+innodb_stats_modified_counter 0
+show session variables like 'innodb_stats_modified_counter';
+Variable_name Value
+innodb_stats_modified_counter 0
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_MODIFIED_COUNTER 0
+select * from information_schema.session_variables where variable_name='innodb_stats_modified_counter';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_MODIFIED_COUNTER 0
+set global innodb_stats_modified_counter=10;
+select @@global.innodb_stats_modified_counter;
+@@global.innodb_stats_modified_counter
+10
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_MODIFIED_COUNTER 10
+select * from information_schema.session_variables where variable_name='innodb_stats_modified_counter';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_MODIFIED_COUNTER 10
+set session innodb_stats_modified_counter=1;
+ERROR HY000: Variable 'innodb_stats_modified_counter' is a GLOBAL variable and should be set with SET GLOBAL
+set global innodb_stats_modified_counter=1.1;
+ERROR 42000: Incorrect argument type to variable 'innodb_stats_modified_counter'
+set global innodb_stats_modified_counter=1e1;
+ERROR 42000: Incorrect argument type to variable 'innodb_stats_modified_counter'
+set global innodb_stats_modified_counter="foo";
+ERROR 42000: Incorrect argument type to variable 'innodb_stats_modified_counter'
+set global innodb_stats_modified_counter=-7;
+Warnings:
+Warning 1292 Truncated incorrect innodb_stats_modified_counter value: '-7'
+select @@global.innodb_stats_modified_counter;
+@@global.innodb_stats_modified_counter
+0
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_MODIFIED_COUNTER 0
+SET @@global.innodb_stats_modified_counter = @start_global_value;
+SELECT @@global.innodb_stats_modified_counter;
+@@global.innodb_stats_modified_counter
+0
diff --git a/mysql-test/suite/sys_vars/r/innodb_stats_traditional_basic.result b/mysql-test/suite/sys_vars/r/innodb_stats_traditional_basic.result
new file mode 100644
index 00000000000..00ee2877e58
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/innodb_stats_traditional_basic.result
@@ -0,0 +1,92 @@
+SET @start_global_value = @@global.innodb_stats_traditional;
+SELECT @start_global_value;
+@start_global_value
+1
+Valid values are 'ON' and 'OFF'
+select @@global.innodb_stats_traditional in (0, 1);
+@@global.innodb_stats_traditional in (0, 1)
+1
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+1
+select @@session.innodb_stats_traditional;
+ERROR HY000: Variable 'innodb_stats_traditional' is a GLOBAL variable
+show global variables like 'innodb_stats_traditional';
+Variable_name Value
+innodb_stats_traditional ON
+show session variables like 'innodb_stats_traditional';
+Variable_name Value
+innodb_stats_traditional ON
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+set global innodb_stats_traditional='OFF';
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+0
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL OFF
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL OFF
+set @@global.innodb_stats_traditional=1;
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+1
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+set global innodb_stats_traditional=0;
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+0
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL OFF
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL OFF
+set @@global.innodb_stats_traditional='ON';
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+1
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+set session innodb_stats_traditional='OFF';
+ERROR HY000: Variable 'innodb_stats_traditional' is a GLOBAL variable and should be set with SET GLOBAL
+set @@session.innodb_stats_traditional='ON';
+ERROR HY000: Variable 'innodb_stats_traditional' is a GLOBAL variable and should be set with SET GLOBAL
+set global innodb_stats_traditional=1.1;
+ERROR 42000: Incorrect argument type to variable 'innodb_stats_traditional'
+set global innodb_stats_traditional=1e1;
+ERROR 42000: Incorrect argument type to variable 'innodb_stats_traditional'
+set global innodb_stats_traditional=2;
+ERROR 42000: Variable 'innodb_stats_traditional' can't be set to the value of '2'
+set global innodb_stats_traditional=-3;
+ERROR 42000: Variable 'innodb_stats_traditional' can't be set to the value of '-3'
+select @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+1
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+VARIABLE_NAME VARIABLE_VALUE
+INNODB_STATS_TRADITIONAL ON
+set global innodb_stats_traditional='AUTO';
+ERROR 42000: Variable 'innodb_stats_traditional' can't be set to the value of 'AUTO'
+SET @@global.innodb_stats_traditional = @start_global_value;
+SELECT @@global.innodb_stats_traditional;
+@@global.innodb_stats_traditional
+1
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
index 59e6957ba6b..ebf9440661f 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb,xtradb.rdiff
@@ -647,8 +647,8 @@
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL
--GLOBAL_VALUE 5.6.20
-+GLOBAL_VALUE 5.6.20-68.0
+-GLOBAL_VALUE 5.6.21
++GLOBAL_VALUE 5.6.21-70.0
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
index 214ec950675..849b360e861 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result
@@ -21,15 +21,15 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT NONE
VARIABLE_NAME INNODB_ADAPTIVE_FLUSHING_LWM
SESSION_VALUE NULL
-GLOBAL_VALUE 10
+GLOBAL_VALUE 10.000000
GLOBAL_VALUE_ORIGIN COMPILE-TIME
-DEFAULT_VALUE 10
+DEFAULT_VALUE 10.000000
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE DOUBLE
VARIABLE_COMMENT Percentage of log capacity below which no adaptive flushing happens.
NUMERIC_MIN_VALUE 0
NUMERIC_MAX_VALUE 70
-NUMERIC_BLOCK_SIZE 0
+NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
@@ -1239,29 +1239,29 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_MAX_DIRTY_PAGES_PCT
SESSION_VALUE NULL
-GLOBAL_VALUE 75
+GLOBAL_VALUE 75.000000
GLOBAL_VALUE_ORIGIN COMPILE-TIME
-DEFAULT_VALUE 75
+DEFAULT_VALUE 75.000000
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE DOUBLE
VARIABLE_COMMENT Percentage of dirty pages allowed in bufferpool.
-NUMERIC_MIN_VALUE 0
-NUMERIC_MAX_VALUE 99
-NUMERIC_BLOCK_SIZE 0
+NUMERIC_MIN_VALUE 0.001
+NUMERIC_MAX_VALUE 99.999
+NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_MAX_DIRTY_PAGES_PCT_LWM
SESSION_VALUE NULL
-GLOBAL_VALUE 0
+GLOBAL_VALUE 0.001000
GLOBAL_VALUE_ORIGIN COMPILE-TIME
-DEFAULT_VALUE 0
+DEFAULT_VALUE 0.001000
VARIABLE_SCOPE GLOBAL
-VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_TYPE DOUBLE
VARIABLE_COMMENT Percentage of dirty pages at which flushing kicks in.
NUMERIC_MIN_VALUE 0
-NUMERIC_MAX_VALUE 99
-NUMERIC_BLOCK_SIZE 0
+NUMERIC_MAX_VALUE 99.999
+NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
@@ -1741,6 +1741,20 @@ NUMERIC_BLOCK_SIZE NULL
ENUM_VALUE_LIST nulls_equal,nulls_unequal,nulls_ignored
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME INNODB_STATS_MODIFIED_COUNTER
+SESSION_VALUE NULL
+GLOBAL_VALUE 0
+GLOBAL_VALUE_ORIGIN COMPILE-TIME
+DEFAULT_VALUE 0
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BIGINT UNSIGNED
+VARIABLE_COMMENT The number of rows modified before we calculate new statistics (default 0 = current limits)
+NUMERIC_MIN_VALUE 0
+NUMERIC_MAX_VALUE 18446744073709551615
+NUMERIC_BLOCK_SIZE 0
+ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_STATS_ON_METADATA
SESSION_VALUE NULL
GLOBAL_VALUE OFF
@@ -1797,6 +1811,20 @@ NUMERIC_BLOCK_SIZE 0
ENUM_VALUE_LIST NULL
READ_ONLY NO
COMMAND_LINE_ARGUMENT REQUIRED
+VARIABLE_NAME INNODB_STATS_TRADITIONAL
+SESSION_VALUE NULL
+GLOBAL_VALUE ON
+GLOBAL_VALUE_ORIGIN COMPILE-TIME
+DEFAULT_VALUE ON
+VARIABLE_SCOPE GLOBAL
+VARIABLE_TYPE BOOLEAN
+VARIABLE_COMMENT Enable traditional statistic calculation based on number of configured pages (default true)
+NUMERIC_MIN_VALUE NULL
+NUMERIC_MAX_VALUE NULL
+NUMERIC_BLOCK_SIZE NULL
+ENUM_VALUE_LIST NULL
+READ_ONLY NO
+COMMAND_LINE_ARGUMENT REQUIRED
VARIABLE_NAME INNODB_STATS_TRANSIENT_SAMPLE_PAGES
SESSION_VALUE NULL
GLOBAL_VALUE 8
@@ -2079,7 +2107,7 @@ READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME INNODB_VERSION
SESSION_VALUE NULL
-GLOBAL_VALUE 5.6.20
+GLOBAL_VALUE 5.6.21
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE NULL
VARIABLE_SCOPE GLOBAL
diff --git a/mysql-test/suite/sys_vars/t/innodb_io_capacity_max_basic.test b/mysql-test/suite/sys_vars/t/innodb_io_capacity_max_basic.test
index 125ceaa1c30..cedc6c0c45e 100644
--- a/mysql-test/suite/sys_vars/t/innodb_io_capacity_max_basic.test
+++ b/mysql-test/suite/sys_vars/t/innodb_io_capacity_max_basic.test
@@ -25,7 +25,7 @@ select * from information_schema.global_variables where variable_name='innodb_io
select * from information_schema.session_variables where variable_name='innodb_io_capacity_max';
#
-# show that it's writable. Allowed value cannot be lower than innodb_io_capacity
+# show that it's writable.
#
set global innodb_io_capacity_max=@start_innodb_capacity + 1;
select @@global.innodb_io_capacity_max;
@@ -45,15 +45,26 @@ set global innodb_io_capacity_max=1e1;
set global innodb_io_capacity_max="foo";
#
-# can't set it below innodb_io_capacity
+# Setting io_capacity_max lower than io_capacity affects also io_capacity
#
-set global innodb_io_capacity_max=@start_innodb_capacity - 1;
+set global innodb_io_capacity_max=1000;
+set global innodb_io_capacity=500;
+set global innodb_io_capacity_max=400;
select @@global.innodb_io_capacity_max;
+select @@global.innodb_io_capacity;
select * from information_schema.global_variables where variable_name='innodb_io_capacity_max';
-set global innodb_io_capacity_max=-7;
+select * from information_schema.global_variables where variable_name='innodb_io_capacity';
+
+#
+# Setting io_capacity higher than io_capacity_max affects also io_capacity_max
+#
+set global innodb_io_capacity_max=1000;
+set global innodb_io_capacity=500;
+set global innodb_io_capacity=1400;
select @@global.innodb_io_capacity_max;
+select @@global.innodb_io_capacity;
select * from information_schema.global_variables where variable_name='innodb_io_capacity_max';
-
+select * from information_schema.global_variables where variable_name='innodb_io_capacity';
#
# min/max values
#
diff --git a/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_basic.test b/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_basic.test
index 7e70ed11351..5b4eaa41598 100644
--- a/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_basic.test
+++ b/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_basic.test
@@ -44,7 +44,7 @@ SELECT @global_start_value;
########################################################################
SET @@global.innodb_max_dirty_pages_pct = 0;
-SET @@global.innodb_max_dirty_pages_pct = DEFAULT;
+SET @@global.innodb_max_dirty_pages_pct = @global_start_value;
SELECT @@global.innodb_max_dirty_pages_pct;
--echo '#---------------------FN_DYNVARS_046_02-------------------------#'
diff --git a/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_lwm_basic.test b/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_lwm_basic.test
index 7a6da2e6a08..d81b6cc725b 100644
--- a/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_lwm_basic.test
+++ b/mysql-test/suite/sys_vars/t/innodb_max_dirty_pages_pct_lwm_basic.test
@@ -47,7 +47,7 @@ SELECT @pct_start_value;
########################################################################
SET @@global.innodb_max_dirty_pages_pct_lwm = 0;
-SET @@global.innodb_max_dirty_pages_pct_lwm = DEFAULT;
+SET @@global.innodb_max_dirty_pages_pct_lwm = @pct_lwm_start_value;
SELECT @@global.innodb_max_dirty_pages_pct_lwm;
--echo '#---------------------FN_DYNVARS_046_02-------------------------#'
diff --git a/mysql-test/suite/sys_vars/t/innodb_stats_modified_counter_basic.test b/mysql-test/suite/sys_vars/t/innodb_stats_modified_counter_basic.test
new file mode 100644
index 00000000000..98fc804906b
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_stats_modified_counter_basic.test
@@ -0,0 +1,47 @@
+--source include/have_innodb.inc
+
+SET @start_global_value = @@global.innodb_stats_modified_counter;
+SELECT @start_global_value;
+
+#
+# exists as global only
+#
+--echo Valid values are one or above
+select @@global.innodb_stats_modified_counter >=1;
+select @@global.innodb_stats_modified_counter;
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
+select @@session.innodb_stats_modified_counter;
+show global variables like 'innodb_stats_modified_counter';
+show session variables like 'innodb_stats_modified_counter';
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+select * from information_schema.session_variables where variable_name='innodb_stats_modified_counter';
+
+#
+# show that it's writable
+#
+set global innodb_stats_modified_counter=10;
+select @@global.innodb_stats_modified_counter;
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+select * from information_schema.session_variables where variable_name='innodb_stats_modified_counter';
+--error ER_GLOBAL_VARIABLE
+set session innodb_stats_modified_counter=1;
+
+#
+# incorrect types
+#
+--error ER_WRONG_TYPE_FOR_VAR
+set global innodb_stats_modified_counter=1.1;
+--error ER_WRONG_TYPE_FOR_VAR
+set global innodb_stats_modified_counter=1e1;
+--error ER_WRONG_TYPE_FOR_VAR
+set global innodb_stats_modified_counter="foo";
+
+set global innodb_stats_modified_counter=-7;
+select @@global.innodb_stats_modified_counter;
+select * from information_schema.global_variables where variable_name='innodb_stats_modified_counter';
+
+#
+# cleanup
+#
+SET @@global.innodb_stats_modified_counter = @start_global_value;
+SELECT @@global.innodb_stats_modified_counter;
diff --git a/mysql-test/suite/sys_vars/t/innodb_stats_traditional_basic.test b/mysql-test/suite/sys_vars/t/innodb_stats_traditional_basic.test
new file mode 100644
index 00000000000..d0872616114
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/innodb_stats_traditional_basic.test
@@ -0,0 +1,65 @@
+--source include/have_innodb.inc
+
+SET @start_global_value = @@global.innodb_stats_traditional;
+SELECT @start_global_value;
+
+#
+# exists as global only
+#
+--echo Valid values are 'ON' and 'OFF'
+select @@global.innodb_stats_traditional in (0, 1);
+select @@global.innodb_stats_traditional;
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
+select @@session.innodb_stats_traditional;
+show global variables like 'innodb_stats_traditional';
+show session variables like 'innodb_stats_traditional';
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+
+#
+# show that it's writable
+#
+set global innodb_stats_traditional='OFF';
+select @@global.innodb_stats_traditional;
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+set @@global.innodb_stats_traditional=1;
+select @@global.innodb_stats_traditional;
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+set global innodb_stats_traditional=0;
+select @@global.innodb_stats_traditional;
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+set @@global.innodb_stats_traditional='ON';
+select @@global.innodb_stats_traditional;
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+--error ER_GLOBAL_VARIABLE
+set session innodb_stats_traditional='OFF';
+--error ER_GLOBAL_VARIABLE
+set @@session.innodb_stats_traditional='ON';
+
+#
+# incorrect types
+#
+--error ER_WRONG_TYPE_FOR_VAR
+set global innodb_stats_traditional=1.1;
+--error ER_WRONG_TYPE_FOR_VAR
+set global innodb_stats_traditional=1e1;
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_stats_traditional=2;
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_stats_traditional=-3;
+select @@global.innodb_stats_traditional;
+select * from information_schema.global_variables where variable_name='innodb_stats_traditional';
+select * from information_schema.session_variables where variable_name='innodb_stats_traditional';
+--error ER_WRONG_VALUE_FOR_VAR
+set global innodb_stats_traditional='AUTO';
+
+#
+# Cleanup
+#
+
+SET @@global.innodb_stats_traditional = @start_global_value;
+SELECT @@global.innodb_stats_traditional;
diff --git a/mysql-test/suite/vcol/r/not_supported.result b/mysql-test/suite/vcol/r/not_supported.result
new file mode 100644
index 00000000000..06627fccf8b
--- /dev/null
+++ b/mysql-test/suite/vcol/r/not_supported.result
@@ -0,0 +1,67 @@
+set lc_time_names = 'es_MX';
+set time_zone='+10:00';
+set div_precision_increment=20;
+create table t1 (a int, b int, v decimal(20,19) as (a/3));
+create table t2 (a int, b int, v int as (a+@a));
+ERROR HY000: Function or expression is not allowed for column 'v'
+create table t3 (a int, b int, v int as (a+@@error_count));
+ERROR HY000: Function or expression is not allowed for column 'v'
+create table t4 (a int, b int, v int as (@a:=a));
+ERROR HY000: Function or expression is not allowed for column 'v'
+create table t5 (a int, b int, v varchar(100) as (monthname(a)));
+create table t6 (a int, b int, v varchar(100) as (dayname(a)));
+create table t7 (a int, b int, v varchar(100) as (date_format(a, '%W %a %M %b')));
+create table t8 (a int, b int, v varchar(100) as (from_unixtime(a)));
+insert t1 (a,b) values (1,2);
+insert t5 (a,b) values (20141010,2);
+insert t6 (a,b) values (20141010,2);
+insert t7 (a,b) values (20141010,2);
+insert t8 (a,b) values (1234567890,2);
+select * from t1;
+a b v
+1 2 0.3333333333333333333
+select * from t5;
+a b v
+20141010 2 octubre
+select * from t6;
+a b v
+20141010 2 viernes
+select * from t7;
+a b v
+20141010 2 viernes vie octubre oct
+select * from t8;
+a b v
+1234567890 2 2009-02-14 09:31:30
+set time_zone='+1:00';
+select * from t1;
+a b v
+1 2 0.3333333333333333333
+select * from t5;
+a b v
+20141010 2 octubre
+select * from t6;
+a b v
+20141010 2 viernes
+select * from t7;
+a b v
+20141010 2 viernes vie octubre oct
+select * from t8;
+a b v
+1234567890 2 2009-02-14 09:31:30
+flush tables;
+select * from t1;
+a b v
+1 2 0.3333333330000000000
+select * from t5;
+a b v
+20141010 2 October
+select * from t6;
+a b v
+20141010 2 Friday
+select * from t7;
+a b v
+20141010 2 Friday Fri October Oct
+select * from t8;
+a b v
+1234567890 2 2009-02-14 00:31:30
+drop table t1, t5, t6, t7, t8;
diff --git a/mysql-test/suite/vcol/t/not_supported.test b/mysql-test/suite/vcol/t/not_supported.test
new file mode 100644
index 00000000000..70b9dea69fd
--- /dev/null
+++ b/mysql-test/suite/vcol/t/not_supported.test
@@ -0,0 +1,58 @@
+#
+# MDEV-7113 difference between check_vcol_func_processor and check_partition_func_processor
+#
+
+# the following functions must not be supported in virtual columns.
+# but for compatibility reasons it won't be done in a GA version,
+# we'll only fix most critical issues (inconsistent results, crashes)
+
+connect (con1, localhost, root);
+
+set lc_time_names = 'es_MX';
+set time_zone='+10:00';
+set div_precision_increment=20;
+
+create table t1 (a int, b int, v decimal(20,19) as (a/3));
+--error ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create table t2 (a int, b int, v int as (a+@a));
+--error ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create table t3 (a int, b int, v int as (a+@@error_count));
+--error ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create table t4 (a int, b int, v int as (@a:=a));
+create table t5 (a int, b int, v varchar(100) as (monthname(a)));
+create table t6 (a int, b int, v varchar(100) as (dayname(a)));
+create table t7 (a int, b int, v varchar(100) as (date_format(a, '%W %a %M %b')));
+create table t8 (a int, b int, v varchar(100) as (from_unixtime(a)));
+
+insert t1 (a,b) values (1,2);
+insert t5 (a,b) values (20141010,2);
+insert t6 (a,b) values (20141010,2);
+insert t7 (a,b) values (20141010,2);
+insert t8 (a,b) values (1234567890,2);
+
+select * from t1;
+select * from t5;
+select * from t6;
+select * from t7;
+select * from t8;
+
+disconnect con1;
+connection default;
+set time_zone='+1:00';
+
+select * from t1;
+select * from t5;
+select * from t6;
+select * from t7;
+select * from t8;
+
+flush tables;
+
+select * from t1;
+select * from t5;
+select * from t6;
+select * from t7;
+select * from t8;
+
+drop table t1, t5, t6, t7, t8;
+
diff --git a/mysql-test/t/change_user_notembedded.test b/mysql-test/t/change_user_notembedded.test
index bf5d1956cd5..19421c6dd33 100644
--- a/mysql-test/t/change_user_notembedded.test
+++ b/mysql-test/t/change_user_notembedded.test
@@ -22,3 +22,5 @@ change_user;
disconnect test;
connection default;
+--echo that's all
+
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test
index 8bb7339ce83..4d57a5a110a 100644
--- a/mysql-test/t/create.test
+++ b/mysql-test/t/create.test
@@ -2022,9 +2022,40 @@ select * from t1;
unlock tables;
drop table t1,t2;
+--echo #
+--echo # MDEV-6179: dynamic columns functions/cast()/convert() doesn't
+--echo # play nice with CREATE/ALTER TABLE
+--echo #
+create table t1 (
+ color char(32) as (COLUMN_GET(dynamic_cols, 1 as char)) persistent,
+ cl char(32) as (COLUMN_GET(COLUMN_ADD(COLUMN_CREATE(1 , 'blue' as char), 2, 'ttt'), i as char)) persistent,
+ item_name varchar(32) primary key, -- A common attribute for all items
+ i int,
+ dynamic_cols blob -- Dynamic columns will be stored here
+);
+INSERT INTO t1(item_name, dynamic_cols, i) VALUES
+ ('MariaDB T-shirt', COLUMN_CREATE(1, 'blue', 2, 'XL'), 1);
+INSERT INTO t1(item_name, dynamic_cols, i) VALUES
+ ('Thinkpad Laptop', COLUMN_CREATE(1, 'black', 3, 500), 2);
+
+select item_name, color, cl from t1;
+show create table t1;
+
+drop table t1;
+
+create table t1 (
+ n int,
+ c char(32) as (convert(cast(n as char), char)) persistent
+);
+insert into t1(n) values (1),(2),(3);
+
+select * from t1;
+show create table t1;
+
+drop table t1;
+
#
# MDEV-4880 Attempt to create a table without columns produces ER_ILLEGAL_HA instead of ER_TABLE_MUST_HAVE_COLUMNS
#
--error ER_TABLE_MUST_HAVE_COLUMNS
create table t1;
-
diff --git a/mysql-test/t/ctype_binary.test b/mysql-test/t/ctype_binary.test
index 8b57854de83..4a2646d1db5 100644
--- a/mysql-test/t/ctype_binary.test
+++ b/mysql-test/t/ctype_binary.test
@@ -10,3 +10,15 @@ set names binary;
--echo #
--echo # End of 5.5 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+SET NAMES binary;
+--source include/ctype_like_cond_propagation.inc
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/ctype_cp932.test b/mysql-test/t/ctype_cp932.test
new file mode 100644
index 00000000000..96a2666f69b
--- /dev/null
+++ b/mysql-test/t/ctype_cp932.test
@@ -0,0 +1,29 @@
+-- source include/have_cp932.inc
+--echo #
+--echo # Bug #11755818 LIKE DOESN'T MATCH WHEN CP932_BIN/SJIS_BIN COLLATIONS ARE
+--echo # USED.
+--echo #
+
+SET @old_character_set_client= @@character_set_client;
+SET @old_character_set_connection= @@character_set_connection;
+SET @old_character_set_results= @@character_set_results;
+SET character_set_client= 'utf8';
+SET character_set_connection= 'utf8';
+SET character_set_results= 'utf8';
+
+CREATE TABLE t1 (a VARCHAR(10) COLLATE cp932_bin);
+INSERT INTO t1 VALUES('カカ');
+SELECT * FROM t1 WHERE a LIKE '%カ';
+SELECT * FROM t1 WHERE a LIKE '_カ';
+SELECT * FROM t1 WHERE a LIKE '%_カ';
+
+ALTER TABLE t1 MODIFY a VARCHAR(100) COLLATE sjis_bin;
+SELECT * FROM t1 WHERE a LIKE '%カ';
+SELECT * FROM t1 WHERE a LIKE '_カ';
+SELECT * FROM t1 WHERE a LIKE '%_カ';
+DROP TABLE t1;
+
+## Reset to initial values
+SET @@character_set_client= @old_character_set_client;
+SET @@character_set_connection= @old_character_set_connection;
+SET @@character_set_results= @old_character_set_results;
diff --git a/mysql-test/t/ctype_latin1.test b/mysql-test/t/ctype_latin1.test
index 5da1534029b..336d8ca761d 100644
--- a/mysql-test/t/ctype_latin1.test
+++ b/mysql-test/t/ctype_latin1.test
@@ -210,6 +210,13 @@ set names latin1;
let $ctype_unescape_combinations=selected;
--source include/ctype_unescape.inc
+SET NAMES latin1;
+--source include/ctype_like_cond_propagation.inc
+
+SET NAMES latin1 COLLATE latin1_bin;
+--source include/ctype_like_cond_propagation.inc
+
+
--echo #
--echo # MDEV-6752 Trailing incomplete characters are not replaced to question marks on conversion
--echo #
diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test
index 79f163d7e5d..fa33535c9b1 100644
--- a/mysql-test/t/ctype_uca.test
+++ b/mysql-test/t/ctype_uca.test
@@ -571,6 +571,14 @@ SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
--echo #
--echo
+SET NAMES utf8 COLLATE utf8_unicode_ci;
+--source include/ctype_like_cond_propagation.inc
+--source include/ctype_like_cond_propagation_utf8_german.inc
+
+SET NAMES utf8 COLLATE utf8_german2_ci;
+--source include/ctype_like_cond_propagation.inc
+--source include/ctype_like_cond_propagation_utf8_german.inc
+
--echo #
--echo # MDEV-4929 Myanmar collation
--echo #
diff --git a/mysql-test/t/ctype_ucs.test b/mysql-test/t/ctype_ucs.test
index d269fb35dfe..33d41e9bc4c 100644
--- a/mysql-test/t/ctype_ucs.test
+++ b/mysql-test/t/ctype_ucs.test
@@ -897,6 +897,12 @@ DROP TABLE t1;
--echo # Start of 10.0 tests
--echo #
+SET NAMES latin1, collation_connection=ucs2_bin;
+--source include/ctype_like_cond_propagation.inc
+SET NAMES latin1, collation_connection=ucs2_general_ci;
+--source include/ctype_like_cond_propagation.inc
+SET NAMES latin1;
+
--echo #
--echo # MDEV-6661 PI() does not work well in UCS2/UTF16/UTF32 context
--echo #
diff --git a/mysql-test/t/ctype_ucs2_def.test b/mysql-test/t/ctype_ucs2_def.test
index b146dc63626..be8e044f2e4 100644
--- a/mysql-test/t/ctype_ucs2_def.test
+++ b/mysql-test/t/ctype_ucs2_def.test
@@ -1,5 +1,7 @@
-- source include/have_ucs2.inc
+call mtr.add_suppression("Cannot use ucs2 as character_set_client");
+
#
# MySQL Bug#15276: MySQL ignores collation-server
#
diff --git a/mysql-test/t/ctype_ucs2_query_cache.test b/mysql-test/t/ctype_ucs2_query_cache.test
index 0ac09b2ba4b..acb39419751 100644
--- a/mysql-test/t/ctype_ucs2_query_cache.test
+++ b/mysql-test/t/ctype_ucs2_query_cache.test
@@ -1,6 +1,8 @@
-- source include/have_query_cache.inc
-- source include/have_ucs2.inc
+call mtr.add_suppression("Cannot use ucs2 as character_set_client");
+
--echo #
--echo # Start of 5.5 tests
--echo #
diff --git a/mysql-test/t/ctype_utf16.test b/mysql-test/t/ctype_utf16.test
index c92889da2dc..e4305ed9879 100644
--- a/mysql-test/t/ctype_utf16.test
+++ b/mysql-test/t/ctype_utf16.test
@@ -788,6 +788,14 @@ SELECT 'a' AS id, REPEAT('bla bla', 100) AS body) t1;
#
--echo #
+--echo # MDEV-6865 Merge Bug#18935421 RPAD DIES WITH CERTAIN PADSTR INTPUTS..
+--echo #
+--error ER_INVALID_CHARACTER_STRING
+DO RPAD(_utf16 0x0061 COLLATE utf16_unicode_ci, 10000, 0x0061DE989999);
+--error ER_INVALID_CHARACTER_STRING
+DO LPAD(_utf16 0x0061 COLLATE utf16_unicode_ci, 10000, 0x0061DE989999);
+
+--echo #
--echo # End of 5.5 tests
--echo #
diff --git a/mysql-test/t/ctype_utf16_def.test b/mysql-test/t/ctype_utf16_def.test
index d8ef4a4278b..fad61b057c3 100644
--- a/mysql-test/t/ctype_utf16_def.test
+++ b/mysql-test/t/ctype_utf16_def.test
@@ -1,4 +1,5 @@
--source include/have_utf16.inc
+call mtr.add_suppression("Cannot use utf16 as character_set_client");
#
# Bug #32391 Character sets: crash with --character-set-server
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index e02d5a915b7..1e9047cca8e 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -1658,6 +1658,13 @@ set max_sort_length=default;
--echo # Start of 10.0 tests
--echo #
+SET NAMES utf8 COLLATE utf8_bin;
+--source include/ctype_like_cond_propagation.inc
+SET NAMES utf8;
+--source include/ctype_like_cond_propagation.inc
+--source include/ctype_like_cond_propagation_utf8_german.inc
+
+
--echo #
--echo # MDEV-6666 Malformed result for CONCAT(utf8_column, binary_string)
--echo #
diff --git a/mysql-test/t/derived_opt.test b/mysql-test/t/derived_opt.test
index b01c479111b..7f19553e4e5 100644
--- a/mysql-test/t/derived_opt.test
+++ b/mysql-test/t/derived_opt.test
@@ -1,6 +1,7 @@
# Initialize
--disable_warnings
-drop table if exists t1,t2,t3;
+drop table if exists t0,t1,t2,t3;
+drop database if exists test1;
--enable_warnings
set @exit_optimizer_switch=@@optimizer_switch;
@@ -272,5 +273,95 @@ limit 10;
drop table t1, t2, t3, t4;
+--echo #
+--echo # MDEV-6888: Query spends a long time in best_extension_by_limited_search with mrr enabled
+--echo #
+create database test1;
+use test1;
+
+set @tmp_jcl= @@join_cache_level;
+set @tmp_os= @@optimizer_switch;
+set join_cache_level=8;
+set optimizer_switch='mrr=on,mrr_sort_keys=on';
+
+CREATE TABLE t0 (
+ f1 bigint(20) DEFAULT NULL,
+ f2 char(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+INSERT INTO t0 VALUES (NULL,'numeric column is NULL'),(0,NULL),(5,'five'),(1,'one'),(2,'two');
+
+CREATE TABLE t1 (
+ f1 decimal(64,30) DEFAULT NULL,
+ f2 varchar(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+
+INSERT INTO t1 VALUES
+(NULL,'numeric column is NULL'),
+(0.000000000000000000000000000000,NULL),
+(5.000000000000000000000000000000,'five'),
+(1.000000000000000000000000000000,'one'),
+(3.000000000000000000000000000000,'three');
+
+CREATE TABLE t2 (
+ f1 double DEFAULT NULL,
+ f2 varbinary(50) DEFAULT NULL
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+INSERT INTO t2 VALUES (NULL,'numeric column is NULL'),(0,NULL),(5,'five'),(2,'two'),(3,'three');
+
+create VIEW v0 AS select f1,f2 from t1 ;
+
+let $cnt= 27;
+while ($cnt)
+{
+# i runs from 1 to 27
+ let $i= `select 28 - $cnt`;
+ let $prev=`select $i - 1`;
+
+# rem = i mod 3
+ let $rem= `select MOD($i, 3)`;
+# view uses $i, $prev and $rem:
+ eval create VIEW v$i AS select tab1_v$i.f1,tab1_v$i.f2 from t$rem tab1_v$i join v$prev tab2 on tab1_v$i.f1 = tab2.f1 and tab1_v$i.f2 = tab2.f2;
+ dec $cnt;
+}
+
+EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, CAST(f2 AS CHAR) AS f2 FROM v27;
+--echo # This used to hang forever:
+EXPLAIN SELECT CAST(f1 AS SIGNED INTEGER) AS f1, CAST(f2 AS CHAR) AS f2 FROM v27;
+
+use test;
+drop database test1;
+set join_cache_level=@tmp_jcl;
+set optimizer_switch=@tmp_os;
+
+
+--echo #
+--echo # MDEV-6879: Dereference of NULL primary_file->table in DsMrr_impl::get_disk_sweep_mrr_cost()
+--echo #
+create table t1(a int);
+insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+create table t2 (a int, b int, c text);
+insert into t2
+select
+ A.a + B.a* 10,
+ A.a + B.a* 10,
+ 'blob-data'
+from t1 A, t1 B;
+
+set @tmp_jcl= @@join_cache_level;
+set @tmp_os= @@optimizer_switch;
+set join_cache_level=6;
+set @@optimizer_switch='derived_merge=on,derived_with_keys=on,mrr=on';
+explain
+select * from
+ t1 join
+ (select * from t2 order by a limit 1000) as D1
+where
+ D1.a= t1.a;
+
+set join_cache_level=@tmp_jcl;
+set optimizer_switch=@tmp_os;
+drop table t1, t2;
+
# The following command must be the last one the file
set optimizer_switch=@exit_optimizer_switch;
diff --git a/mysql-test/t/dyncol.test b/mysql-test/t/dyncol.test
index c5d442ebe49..65a94dcb49e 100644
--- a/mysql-test/t/dyncol.test
+++ b/mysql-test/t/dyncol.test
@@ -839,5 +839,31 @@ select group_concat(cast(column_json(dyn) as char)) from t1;
drop table t1;
--echo #
+--echo # MDEV-7116: Dynamic column hangs/segfaults
+--echo #
+create table t1 (
+ impressions mediumblob
+);
+
+insert into t1 values ("");
+
+update t1
+set impressions = column_add(impressions,
+ 'total', 12,
+ '2014-10-28 16:00:00', 3,
+ '2014-10-30 15:00:00', 3,
+ '2014-11-04 09:00:00', 6
+ );
+update t1
+set impressions = column_add(impressions,
+ 'total', "a12",
+ '2014-10-28 16:00:00', "a3",
+ '2014-10-30 15:00:00', "a3",
+ '2014-11-04 09:00:00', "a6"
+ );
+
+drop table t1;
+
+--echo #
--echo # end of 10.0 tests
--echo #
diff --git a/mysql-test/t/ext_key_noPK_6794.test b/mysql-test/t/ext_key_noPK_6794.test
new file mode 100644
index 00000000000..fc8a2724c22
--- /dev/null
+++ b/mysql-test/t/ext_key_noPK_6794.test
@@ -0,0 +1,15 @@
+#
+# MDEV-6794 XtraDB no longer using UNIQUE as clustered index when PK missing
+#
+
+--source include/have_innodb.inc
+
+create table t1 (c1 int not null, c2 int, unique index(c1), index (c2)) engine=innodb;
+insert into t1 (c1, c2) select 1, round(rand()*100);
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+insert into t1 (c1, c2) select (select max(c1) from t1) + c1, c1*93563%100 from t1;
+select count(*) from t1;
+--query_vertical explain select * from t1 where c2 = 1 order by c1
+drop table t1;
+
diff --git a/mysql-test/t/failed_auth_unixsocket.test b/mysql-test/t/failed_auth_unixsocket.test
index ba31cf6a59f..f7345f44698 100644
--- a/mysql-test/t/failed_auth_unixsocket.test
+++ b/mysql-test/t/failed_auth_unixsocket.test
@@ -16,11 +16,17 @@ change_user $USER;
eval install plugin unix_socket soname '$AUTH_SOCKET_SO';
---replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT $USER USER
+# Make sure that the replace works, even if $USER is 'user' or something else
+# that matches other parts of the error message.
+--echo connect(localhost,USER,,test,MASTER_PORT,MASTER_SOCKET);
+--let $replace=Access denied for user '$USER'
+--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT $replace "Access denied for user 'USER'"
+--disable_query_log
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
connect (fail,localhost,$USER);
+--enable_query_log
---replace_result $USER USER
+--replace_result $replace "Access denied for user 'USER'"
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
change_user $USER;
diff --git a/mysql-test/t/func_compress.test b/mysql-test/t/func_compress.test
index eaed0c88fe1..fc3d2697426 100644
--- a/mysql-test/t/func_compress.test
+++ b/mysql-test/t/func_compress.test
@@ -136,3 +136,12 @@ DROP TABLE t1;
--echo #
--echo # End of 5.3 tests
--echo #
+
+#
+# MDEV-4513 Valgrind warnings (Conditional jump or move depends on uninitialised value) in inflate on UNCOMPRESS
+#
+SELECT UNCOMPRESS(CAST(0 AS BINARY(5)));
+
+--echo #
+--echo # End of 5.5 tests
+--echo #
diff --git a/mysql-test/t/func_regexp_pcre.test b/mysql-test/t/func_regexp_pcre.test
index 7e8df840239..6710f5cf096 100644
--- a/mysql-test/t/func_regexp_pcre.test
+++ b/mysql-test/t/func_regexp_pcre.test
@@ -397,3 +397,8 @@ SET default_regex_flags='UNGREEDY';
SELECT REGEXP_SUBSTR('abc','.+');
SELECT REGEXP_REPLACE('abc','^(.*)(.*)$','\\1/\\2');
SET default_regex_flags=DEFAULT;
+
+--echo #
+--echo # MDEV-6965 non-captured group \2 in regexp_replace
+--echo #
+SELECT REGEXP_REPLACE('1 foo and bar', '(\\d+) foo and (\\d+ )?bar', '\\1 this and \\2that');
diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test
index 6a99b975e81..d3703de26c5 100644
--- a/mysql-test/t/func_test.test
+++ b/mysql-test/t/func_test.test
@@ -180,3 +180,17 @@ select * from t1 where not (a+0);
explain extended select * from t1 where not (a+0);
drop table t1;
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
+--echo #
+SELECT NOT NOT strcmp('a','b');
+EXPLAIN EXTENDED SELECT NOT NOT strcmp('a','b');
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/function_defaults.test b/mysql-test/t/function_defaults.test
index dd29b4609cb..f8b23d0eda8 100644
--- a/mysql-test/t/function_defaults.test
+++ b/mysql-test/t/function_defaults.test
@@ -2,8 +2,6 @@
--echo # Test of function defaults for any server, including embedded.
--echo #
---source include/have_innodb.inc
-
--echo #
--echo # Function defaults run 1. No microsecond precision.
--echo #
diff --git a/mysql-test/t/function_defaults_innodb.test b/mysql-test/t/function_defaults_innodb.test
new file mode 100644
index 00000000000..de5a6d34b73
--- /dev/null
+++ b/mysql-test/t/function_defaults_innodb.test
@@ -0,0 +1,24 @@
+--echo #
+--echo # Test of function defaults for any server, including embedded.
+--echo #
+
+--source include/have_innodb.inc
+set default_storage_engine=innodb;
+
+--echo #
+--echo # Function defaults run 1. No microsecond precision.
+--echo #
+let $current_timestamp=CURRENT_TIMESTAMP;
+let $now=NOW();
+let $timestamp=TIMESTAMP;
+let $datetime=DATETIME;
+source 'include/function_defaults.inc';
+
+--echo #
+--echo # Function defaults run 2. Six digits scale on seconds precision.
+--echo #
+let $current_timestamp=CURRENT_TIMESTAMP(6);
+let $now=NOW(6);
+let $timestamp=TIMESTAMP(6);
+let $datetime=DATETIME(6);
+source 'include/function_defaults.inc';
diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test
index 60642e5741c..2cc9f0c930b 100644
--- a/mysql-test/t/gis.test
+++ b/mysql-test/t/gis.test
@@ -1379,6 +1379,11 @@ insert into t1 values(geomfromtext("POINT(0 9.2233720368548e18)"));
select equals(`a`,convert(`a` using utf8)) from `t1`;
drop table t1;
+--echo #
+--echo # MDEV-6883 ST_WITHIN crashes server if (0,0) is matched to POLYGON((0 0))
+--echo #
+select st_within(GeomFromText('Polygon((0 0))'), Point(0,0));
+
--echo End of 5.3 tests
--echo #
diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test
index 5d59acf9320..35bd447e9ea 100644
--- a/mysql-test/t/group_by.test
+++ b/mysql-test/t/group_by.test
@@ -1650,6 +1650,20 @@ SET sql_mode='ONLY_FULL_GROUP_BY';
SELECT 1 AS test UNION SELECT 2 AS test ORDER BY test IS NULL ASC;
SET sql_mode='';
+--echo #
+--echo # MDEV-6484: Assertion `tab->ref.use_count' failed on query with joins, constant table, multi-part key
+--echo #
+CREATE TABLE t1 (i1 INT, c1 VARCHAR(1)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (6,'b');
+
+CREATE TABLE t2 (pk2 INT, i2 INT, c2 VARCHAR(1), PRIMARY KEY(pk2), KEY(pk2,i2)) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (1,2,'s'),(2,4,'r'),(3,8,'m'),(4,4,'b'),(5,4,'x'),(6,7,'g'),(7,4,'p');
+
+SELECT i2 FROM t1 AS t1a STRAIGHT_JOIN ( t2 INNER JOIN t1 AS t1b ON (t1b.c1 = c2) ) ON (t1b.i1 = pk2 )
+WHERE t1a.c1 = c2 GROUP BY i2;
+
+DROP TABLE t1,t2;
+
#
# End of MariaDB 5.5 tests
#
diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test
index c809401bbf8..8c9be0ca8db 100644
--- a/mysql-test/t/group_min_max.test
+++ b/mysql-test/t/group_min_max.test
@@ -704,6 +704,7 @@ explain extended select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
create table t4 as select distinct a1, a2, b, c from t1;
alter table t4 add unique index idxt4 (a1, a2, b, c);
+--echo # This is "superceded" by MDEV-7118, and Loose Index Scan is again an option:
explain
select a1, a2, b, min(c) from t4 group by a1, a2, b;
select a1, a2, b, min(c) from t4 group by a1, a2, b;
@@ -1488,3 +1489,38 @@ SELECT distinct a, b FROM t1 where a = '3' ORDER BY b;
SELECT distinct a, b FROM t1 where a = '3' ORDER BY b;
drop table t1;
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6991 GROUP_MIN_MAX optimization is erroneously applied in some cases
+--echo #
+CREATE TABLE t1 (id INT NOT NULL, a VARCHAR(20)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,'2001-01-01');
+INSERT INTO t1 VALUES (1,'2001-01-02');
+INSERT INTO t1 VALUES (1,'2001-01-03');
+INSERT INTO t1 VALUES (1,' 2001-01-04');
+INSERT INTO t1 VALUES (2,'2001-01-01');
+INSERT INTO t1 VALUES (2,'2001-01-02');
+INSERT INTO t1 VALUES (2,'2001-01-03');
+INSERT INTO t1 VALUES (2,' 2001-01-04');
+INSERT INTO t1 VALUES (3,'2001-01-01');
+INSERT INTO t1 VALUES (3,'2001-01-02');
+INSERT INTO t1 VALUES (3,'2001-01-03');
+INSERT INTO t1 VALUES (3,' 2001-01-04');
+INSERT INTO t1 VALUES (4,'2001-01-01');
+INSERT INTO t1 VALUES (4,'2001-01-02');
+INSERT INTO t1 VALUES (4,'2001-01-03');
+INSERT INTO t1 VALUES (4,' 2001-01-04');
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=DATE'2001-01-04' GROUP BY id;
+ALTER TABLE t1 ADD KEY(id,a);
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=DATE'2001-01-04' GROUP BY id;
+DROP TABLE t1;
+
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
+
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 0927b96621c..1f3d2c551e6 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -502,7 +502,7 @@ drop table t_crashme;
#
select table_schema,table_name, column_name from
information_schema.columns
-where data_type = 'longtext';
+where data_type = 'longtext' and table_schema != 'performance_schema';
select table_name, column_name, data_type from information_schema.columns
where data_type = 'datetime' and table_name not like 'innodb_%';
@@ -1304,12 +1304,16 @@ info='select * from information_schema.tables where 1=sleep(100000)';
disable_query_log;
eval kill $ID;
enable_query_log;
-disconnect conn1;
let $wait_timeout= 10;
let $wait_condition=select count(*)=0 from information_schema.processlist
where state='User sleep' and
info='select * from information_schema.tables where 1=sleep(100000)';
--source include/wait_condition.inc
+connection conn1;
+--error 2013,ER_CONNECTION_KILLED
+reap;
+connection default;
+disconnect conn1;
connect (conn1, localhost, root,,);
connection conn1;
@@ -1324,12 +1328,16 @@ info='select * from information_schema.columns where 1=sleep(100000)';
disable_query_log;
eval kill $ID;
enable_query_log;
-disconnect conn1;
let $wait_timeout= 10;
let $wait_condition=select count(*)=0 from information_schema.processlist
where state='User sleep' and
info='select * from information_schema.columns where 1=sleep(100000)';
--source include/wait_condition.inc
+connection conn1;
+--error 2013,ER_CONNECTION_KILLED
+reap;
+connection default;
+disconnect conn1;
#
diff --git a/mysql-test/t/information_schema_all_engines.test b/mysql-test/t/information_schema_all_engines.test
index 9c056d934de..8c898909c1e 100644
--- a/mysql-test/t/information_schema_all_engines.test
+++ b/mysql-test/t/information_schema_all_engines.test
@@ -4,6 +4,7 @@
--source include/not_embedded.inc
--source include/have_xtradb.inc
+--source include/have_perfschema.inc
--source include/not_staging.inc
use INFORMATION_SCHEMA;
diff --git a/mysql-test/t/innodb_mrr_cpk.test b/mysql-test/t/innodb_mrr_cpk.test
index bee8d5796ce..cb79c238f2b 100644
--- a/mysql-test/t/innodb_mrr_cpk.test
+++ b/mysql-test/t/innodb_mrr_cpk.test
@@ -134,12 +134,40 @@ set optimizer_switch='index_condition_pushdown=on';
drop table t1,t2;
-set @@join_cache_level= @save_join_cache_level;
-set storage_engine=@save_storage_engine;
-set optimizer_switch=@innodb_mrr_cpk_tmp;
drop table t0;
--echo #
+--echo # MDEV-6878: Use of uninitialized saved_primary_key in Mrr_ordered_index_reader::resume_read()
+--echo #
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+create table t1 (
+ pk varchar(32) character set utf8 primary key,
+ kp1 char(32) not null,
+ col1 varchar(32),
+ key (kp1)
+) engine=innodb;
+
+insert into t1
+select
+ concat('pk-', 1000 +A.a),
+ concat('kp1-', 1000 +A.a),
+ concat('val-', 1000 +A.a)
+from test.t0 A ;
+
+create table t2 as select kp1 as a from t1;
+
+set join_cache_level=8;
+set optimizer_switch='mrr=on,mrr_sort_keys=on';
+explain
+select * from t2 straight_join t1 force index(kp1) where t1.kp1=t2.a;
+select * from t2 straight_join t1 force index(kp1) where t1.kp1=t2.a;
+
+drop table t0,t1,t2;
+
+--echo #
+--echo #
--echo # MDEV-3817: Wrong result with index_merge+index_merge_intersection, InnoDB table, join, AND and OR conditions
--echo #
@@ -190,5 +218,12 @@ set join_cache_level=3;
explain SELECT 1 FROM (SELECT url, id FROM t2 LIMIT 1 OFFSET 20) derived RIGHT JOIN t1 ON t1.id = derived.id;
set join_cache_level= @tmp_mdev5037;
-
drop table t0,t1,t2;
+
+--echo #
+--echo # This must be at the end:
+--echo #
+
+set @@join_cache_level= @save_join_cache_level;
+set storage_engine=@save_storage_engine;
+set optimizer_switch=@innodb_mrr_cpk_tmp;
diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test
index 8f4554e69b4..9ae65780086 100644
--- a/mysql-test/t/join_outer.test
+++ b/mysql-test/t/join_outer.test
@@ -1778,6 +1778,29 @@ SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON i2 = i3 ON i1 = i3
DROP TABLE t1,t2,t3;
--echo #
+--echo # Bug mdev-6705: wrong on expression after constant row substitution
+--echo # that triggers a simplification of WHERE condition
+--echo #
+
+CREATE TABLE t1 (a int, b int) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (10,8);
+
+CREATE TABLE t2 (c int) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (8),(9);
+
+CREATE TABLE t3 (d int) ENGINE=MyISAM;
+INSERT INTO t3 VALUES (3),(8);
+
+EXPLAIN EXTENDED
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+ WHERE b IN (1,2,3) OR b = d;
+
+SELECT * FROM t1 INNER JOIN t2 ON c = b LEFT JOIN t3 ON d = a
+ WHERE b IN (1,2,3) OR b = d;
+
+DROP TABLE t1,t2,t3;
+
+--echo #
--echo # MDEV-6634: Wrong estimates for ref(const) and key IS NULL predicate
--echo #
create table t1(a int);
diff --git a/mysql-test/t/log_errchk.test b/mysql-test/t/log_errchk.test
new file mode 100644
index 00000000000..e4bc6a841dd
--- /dev/null
+++ b/mysql-test/t/log_errchk.test
@@ -0,0 +1,64 @@
+#
+--source include/not_windows.inc
+--source include/not_embedded.inc
+
+#
+# Bug#14757009 : WHEN THE GENERAL_LOG IS A SOCKET AND THE READER GOES AWAY,
+# MYSQL QUITS WORKING.
+#
+call mtr.add_suppression("Could not use");
+
+--let $gen_log_file= $MYSQLTEST_VARDIR/tmp/general_log.fifo
+--let $slow_query_log_file= $MYSQLTEST_VARDIR/tmp/slow_log.fifo
+--let GREP_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err
+
+--exec mkfifo $gen_log_file
+--exec mkfifo $slow_query_log_file
+
+--echo # Case 1: Setting fife file to general_log_file and slow_query_log_file
+--echo # system variable.
+# Only regular files can be set to general log. Setting fifo file to general log
+# reports an error.
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--error ER_WRONG_VALUE_FOR_VAR
+--eval SET GLOBAL general_log_file="$gen_log_file";
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--error ER_WRONG_VALUE_FOR_VAR
+--eval SET GLOBAL slow_query_log_file="$slow_query_log_file";
+
+--echo # Case 2: Starting server with fifo file as general log file
+--echo # and slow query log file.
+# Restart server with fifo file as general log file.
+--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+--shutdown_server 60
+--source include/wait_until_disconnected.inc
+--enable_reconnect
+# Write file to make mysql-test-run.pl start up the server again
+--exec echo "restart: --general-log-file=$gen_log_file --slow-query-log-file=$slow_query_log_file" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+--source include/wait_until_connected_again.inc
+
+# With fix error should be reported in the error log file if file is not a
+# regular file.
+--perl
+ my $file= $ENV{'GREP_FILE'};
+ my $pattern= "Turning logging off for the whole duration";
+ open(FILE, "$file") or die("Unable to open $file: $!\n");
+ my $count = 0;
+ while (<FILE>) {
+ if ($_ =~ m/$pattern/) {
+ $count++;
+ break;
+ }
+ }
+ if ($count >= 2){
+ print "Setting fifo file as general log file and slow query log failed.\n";
+ } else {
+ print "test failed.\n";
+ }
+ close(FILE);
+EOF
+
+# Cleanup
+--remove_file $gen_log_file
+--remove_file $slow_query_log_file
diff --git a/mysql-test/t/mysql_upgrade-6984.opt b/mysql-test/t/mysql_upgrade-6984.opt
new file mode 100644
index 00000000000..97669d95260
--- /dev/null
+++ b/mysql-test/t/mysql_upgrade-6984.opt
@@ -0,0 +1 @@
+--skip-grant-tables --group-concat-max-len=1023
diff --git a/mysql-test/t/mysql_upgrade-6984.test b/mysql-test/t/mysql_upgrade-6984.test
new file mode 100644
index 00000000000..6f10d3f33e9
--- /dev/null
+++ b/mysql-test/t/mysql_upgrade-6984.test
@@ -0,0 +1,22 @@
+#
+# MDEV-6984 Can't migrate from MySQL 5.6.21 to MariaDB 10
+#
+--source include/not_embedded.inc
+
+#
+# When 'root' account is password protected and MYSQL_UPGRADE doesn't
+# know the password (meaning, MYSQL_UPGRADE is run automatically
+# on upgrade), MYSQLD has to be started with --skip-grant-tables.
+#
+# In this setup MYSQL_UPGRADE cannot continue after issuing FLUSH PRIVILEGES
+#
+
+update mysql.user set password=password("foo") where user='root';
+
+--exec $MYSQL_UPGRADE
+
+connect(con1,localhost,root,foo,,,);
+
+update mysql.user set password='' where user='root';
+flush privileges;
+
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index dcb9c7a63db..4af17490488 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -296,6 +296,18 @@ SELECT * FROM t1,t2 WHERE 1 IS NOT NULL AND t1.b IS NULL;
DROP TABLE t1,t2;
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-7001 Bad result for NOT NOT STRCMP('a','b') and NOT NOT NULLIF(2,3)
+--echo #
+SELECT NOT NOT NULLIF(2,3);
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
--echo #
--echo # Start of 10.1 tests
diff --git a/mysql-test/t/old-mode.test b/mysql-test/t/old-mode.test
index d22829ceb11..0572570d122 100644
--- a/mysql-test/t/old-mode.test
+++ b/mysql-test/t/old-mode.test
@@ -74,6 +74,7 @@ CREATE TABLE t1 (a TIME,b TIME(1));
INSERT INTO t1 VALUES (TIME'830:20:30',TIME'830:20:30');
SELECT TO_DAYS(a), TO_DAYS(b) FROM t1;
DROP TABLE t1;
+
SET @@global.mysql56_temporal_format=false;
SET @@old_mode=zero_date_time_cast;
CREATE TABLE t1 (a TIME,b TIME(1));
diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test
index 0c8f81e4712..bee0e2cc720 100644
--- a/mysql-test/t/openssl_1.test
+++ b/mysql-test/t/openssl_1.test
@@ -20,13 +20,16 @@ grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA
grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx";
flush privileges;
-connect (con1,localhost,ssl_user1,,,,,SSL);
-connect (con2,localhost,ssl_user2,,,,,SSL);
-connect (con3,localhost,ssl_user3,,,,,SSL);
-connect (con4,localhost,ssl_user4,,,,,SSL);
+connect (con1,localhost,ssl_user1,,,,,SSL-CIPHER=DHE-RSA-AES256-SHA);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
-connect (con5,localhost,ssl_user5,,,,,SSL);
+connect (con2,localhost,ssl_user2,,,,,SSL-CIPHER=RC4-SHA);
+connect (con2,localhost,ssl_user2,,,,,SSL-CIPHER=DHE-RSA-AES256-SHA);
+connect (con3,localhost,ssl_user3,,,,,SSL-CIPHER=DHE-RSA-AES256-SHA);
+connect (con4,localhost,ssl_user4,,,,,SSL-CIPHER=DHE-RSA-AES256-SHA);
+--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
+--error ER_ACCESS_DENIED_ERROR
+connect (con5,localhost,ssl_user5,,,,,SSL-CIPHER=DHE-RSA-AES256-SHA);
connection con1;
# Check ssl turned on
@@ -129,6 +132,7 @@ drop table t1;
# verification of servers certificate by setting both ca certificate
# and ca path to NULL
#
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
--exec $MYSQL --ssl --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1
--echo End of 5.0 tests
@@ -255,6 +259,7 @@ select 'is still running; no cipher request crashed the server' as result from d
GRANT SELECT ON test.* TO bug42158@localhost REQUIRE X509;
FLUSH PRIVILEGES;
connect(con1,localhost,bug42158,,,,,SSL);
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
disconnect con1;
connection default;
diff --git a/mysql-test/t/openssl_6975.combinations b/mysql-test/t/openssl_6975.combinations
new file mode 100644
index 00000000000..17517b7d552
--- /dev/null
+++ b/mysql-test/t/openssl_6975.combinations
@@ -0,0 +1,6 @@
+[tlsv12]
+loose-ssl-cipher=TLSv1.2
+
+[tlsv10]
+loose-ssl-cipher=SSLv3
+
diff --git a/mysql-test/t/openssl_6975.test b/mysql-test/t/openssl_6975.test
new file mode 100644
index 00000000000..bc6397c5c28
--- /dev/null
+++ b/mysql-test/t/openssl_6975.test
@@ -0,0 +1,38 @@
+#
+# MDEV-6975 Implement TLS protocol
+#
+# test SSLv3 and TLSv1.2 ciphers when OpenSSL is restricted to SSLv3 or TLSv1.2
+#
+source include/have_ssl_communication.inc;
+
+# this is OpenSSL test.
+
+grant select on test.* to ssl_sslv3@localhost require cipher "RC4-SHA";
+grant select on test.* to ssl_tls12@localhost require cipher "AES128-SHA256";
+
+let $mysql=$MYSQL --ssl-key=$MYSQL_TEST_DIR/std_data/client-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/client-cert.pem -e "SHOW STATUS LIKE 'ssl_Cipher'" 2>&1;
+
+disable_abort_on_error;
+echo TLS1.2 ciphers: user is ok with any cipher;
+exec $mysql --ssl-cipher=AES128-SHA256;
+exec $mysql --ssl-cipher=TLSv1.2;
+echo TLS1.2 ciphers: user requires SSLv3 cipher RC4-SHA;
+exec $mysql --user ssl_sslv3 --ssl-cipher=AES128-SHA256;
+exec $mysql --user ssl_sslv3 --ssl-cipher=TLSv1.2;
+echo TLS1.2 ciphers: user requires TLSv1.2 cipher AES128-SHA256;
+exec $mysql --user ssl_tls12 --ssl-cipher=AES128-SHA256;
+exec $mysql --user ssl_tls12 --ssl-cipher=TLSv1.2;
+
+echo SSLv3 ciphers: user is ok with any cipher;
+exec $mysql --ssl-cipher=RC4-SHA;
+exec $mysql --ssl-cipher=SSLv3;
+echo SSLv3 ciphers: user requires SSLv3 cipher RC4-SHA;
+exec $mysql --user ssl_sslv3 --ssl-cipher=RC4-SHA;
+exec $mysql --user ssl_sslv3 --ssl-cipher=SSLv3;
+echo SSLv3 ciphers: user requires TLSv1.2 cipher AES128-SHA256;
+exec $mysql --user ssl_tls12 --ssl-cipher=RC4-SHA;
+exec $mysql --user ssl_tls12 --ssl-cipher=SSLv3;
+
+drop user ssl_sslv3@localhost;
+drop user ssl_tls12@localhost;
+
diff --git a/mysql-test/t/order_by_zerolength-4285.test b/mysql-test/t/order_by_zerolength-4285.test
new file mode 100644
index 00000000000..2fb58edd36d
--- /dev/null
+++ b/mysql-test/t/order_by_zerolength-4285.test
@@ -0,0 +1,8 @@
+#
+# MDEV-4285 Server crashes in ptr_compare on NOW and CAST in ORDER BY
+#
+create table t1 (pk int primary key);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+select * from t1 order by now(), cast(pk as char(0));
+drop table t1;
+
diff --git a/mysql-test/t/partition_error.test b/mysql-test/t/partition_error.test
index c5b37615a92..5396b9e3543 100644
--- a/mysql-test/t/partition_error.test
+++ b/mysql-test/t/partition_error.test
@@ -2017,6 +2017,17 @@ DROP TABLE t1;
--echo End of 5.1 tests
+#
+# MDEV-7113 difference between check_vcol_func_processor and check_partition_func_processor
+#
+--error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
+create table t1 (a int) partition by list (values(a) div 1) (partition p0 values in (0), partition p1 values in (1));
+
+--error ER_PARSE_ERROR
+create table t1 (a int) partition by list (uuid_short()) (partition p0 values in (0), partition p1 values in (1));
+
+--echo End of 5.5 tests
+
CREATE TABLE t1 (a INT)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (a) SUBPARTITIONS 2
diff --git a/mysql-test/t/partition_innodb.test b/mysql-test/t/partition_innodb.test
index 1e2aacd474a..a74e95ab65b 100644
--- a/mysql-test/t/partition_innodb.test
+++ b/mysql-test/t/partition_innodb.test
@@ -581,7 +581,7 @@ CREATE INDEX i1 ON t1 (a);
DROP TABLE t1;
# Before the fix it should show extra file like #sql-2405_2.par
---list_files $MYSQLD_DATADIR/test/ *
+--list_files $MYSQLD_DATADIR/test/ *.par
--disable_parsing
--echo #
@@ -616,7 +616,7 @@ ALTER TABLE t1 REORGANIZE PARTITION pMAX INTO
SHOW WARNINGS;
#Contents of the 'test' database directory:
---list_files $MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test/ *.par
disconnect con1;
connection default;
diff --git a/mysql-test/t/partition_innodb_plugin.test b/mysql-test/t/partition_innodb_plugin.test
index 2eb9a2fa2a0..8044ae9ec5c 100644
--- a/mysql-test/t/partition_innodb_plugin.test
+++ b/mysql-test/t/partition_innodb_plugin.test
@@ -52,7 +52,7 @@ KEY_BLOCK_SIZE=4
PARTITION BY HASH(id) PARTITIONS 1;
--replace_result #p# #P#
---list_files $MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test t1*
SHOW CREATE TABLE t1;
SET GLOBAL innodb_file_per_table = OFF;
@@ -71,14 +71,14 @@ LOCK TABLE t1 WRITE;
ALTER TABLE t1 ADD PARTITION PARTITIONS 1;
--replace_result #p# #P#
---list_files $MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test t1*
--echo # This SET is not needed to reproduce the bug,
--echo # it is here just to make the test case more realistic
SET innodb_strict_mode = OFF;
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
--replace_result #p# #P#
---list_files $MYSQLD_DATADIR/test
+--list_files $MYSQLD_DATADIR/test t1*
# really bug#56172
ALTER TABLE t1 REBUILD PARTITION p0;
diff --git a/mysql-test/t/processlist.test b/mysql-test/t/processlist.test
index 7a2b33699d5..9c555c0f9fb 100644
--- a/mysql-test/t/processlist.test
+++ b/mysql-test/t/processlist.test
@@ -4,19 +4,22 @@
source include/have_debug_sync.inc;
+let $tid= `SELECT CONNECTION_ID()`;
SET DEBUG_SYNC = 'dispatch_command_before_set_time WAIT_FOR do_set_time';
send SELECT 1;
connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'fill_schema_processlist_after_unow SIGNAL do_set_time WAIT_FOR fill_schema_proceed';
-send SELECT INFO,TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO IS NULL;
+--replace_result $tid TID
+send_eval SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID, ":") = ":$tid:";
connection default;
reap;
SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed';
connection con1;
+--replace_result $tid TID
reap;
connection default;
@@ -25,9 +28,23 @@ connection default;
#
connection con1;
+# Trigger a signal once the thread has gone from "Query" to "Sleep" command
+# state. Note we need to execute this twice: Once at the end of SET DEBUG_SYNC,
+# and once for the intended time, at the end of SELECT SLEEP().
+SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2';
+connection default;
+# Wait for and clear the first signal set during SET DEBUG_SYNC.
+SET DEBUG_SYNC= 'now WAIT_FOR query_done';
+SET DEBUG_SYNC= 'now SIGNAL nosignal';
+connection con1;
select sleep(5); #run a query that will take some time
connection default;
+# Need to ensure that the previous query has really completed. Otherwise,
+# the select could see the previous query still in "Query" stage in the
+# processlist.
+SET DEBUG_SYNC = 'now WAIT_FOR query_done';
+
# verify that the time in COM_SLEEP doesn't include the query run time
select command, time < 5 from information_schema.processlist where id != connection_id();
diff --git a/mysql-test/t/selectivity.test b/mysql-test/t/selectivity.test
index 8cb2620550e..77ee5f49bef 100644
--- a/mysql-test/t/selectivity.test
+++ b/mysql-test/t/selectivity.test
@@ -889,4 +889,58 @@ set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivit
DROP TABLE t1,t2;
+--echo #
+--echo # Bug mdev-6325: wrong selectivity of a column with ref access
+--echo #
+
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int, key(a));
+insert into t2 select A.a + 10*B.a, 12345 from t0 A, t0 B, t0 C;
+
+set use_stat_tables='preferably';
+set histogram_size=100;
+
+set optimizer_use_condition_selectivity=4;
+analyze table t1 persistent for all;
+analyze table t2 persistent for all;
+
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t1.a<10;
+explain extended
+select * from t1 straight_join t2 where t1.a=t2.a and t2.a<10;
+
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+
+drop table t0,t1,t2;
+
+--echo #
+--echo # Bug mdev-6843: col IS NULL in where condition when col is always NULL
+--echo #
+
+create table t0(a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1(a int);
+insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
+create table t2 (a int, b int);
+insert into t2 select NULL, a from t1;
+
+set use_stat_tables='preferably';
+set histogram_size=100;
+
+set optimizer_use_condition_selectivity=4;
+analyze table t2 persistent for all;
+
+explain extended
+select * from t2 a straight_join t2 b where a.a is null;
+
+set histogram_size=@save_histogram_size;
+set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
+
+drop table t0,t1,t2;
+
set use_stat_tables=@save_use_stat_tables;
+
diff --git a/mysql-test/t/selectivity_innodb.test b/mysql-test/t/selectivity_innodb.test
index 6b67e2d0529..5674cb5c006 100644
--- a/mysql-test/t/selectivity_innodb.test
+++ b/mysql-test/t/selectivity_innodb.test
@@ -8,5 +8,81 @@ set optimizer_switch='extended_keys=on';
--source selectivity.test
set optimizer_switch=@save_optimizer_switch_for_selectivity_test;
+set @tmp_ust= @@use_stat_tables;
+set @tmp_oucs= @@optimizer_use_condition_selectivity;
+
+--echo #
+--echo # MDEV-6808: MariaDB 10.0.13 crash with optimizer_use_condition_selectivity > 1
+--echo #
+set @tmp_mdev6808= @@optimizer_use_condition_selectivity;
+SET optimizer_use_condition_selectivity = 2;
+CREATE TABLE t1 (
+ event_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+ PRIMARY KEY (event_id)
+) ENGINE=InnoDB;
+
+CREATE TABLE t2 (
+ repost_id int(11) unsigned NOT NULL AUTO_INCREMENT,
+ subject_type varchar(24) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
+ subject_id int(11) unsigned NOT NULL,
+ object_type varchar(24) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
+ object_id int(11) unsigned NOT NULL,
+ is_private int(1) NOT NULL DEFAULT '0',
+ PRIMARY KEY (repost_id),
+ UNIQUE KEY `BETWEEN` (subject_type,subject_id,object_type,object_id,is_private),
+ KEY SUBJECT (subject_type,subject_id),
+ KEY OBJECT (object_type,object_id)
+) ENGINE=InnoDB;
+
+SELECT
+ *
+FROM
+ t2, t1
+WHERE
+ t2.object_type = 'event' AND
+ t2.object_id = t1.event_id AND
+ t2.is_private = 0 AND
+ t2.subject_id = 127994 AND
+ t2.subject_type in ('user')
+;
+DROP TABLE t1, t2;
+set optimizer_use_condition_selectivity=@tmp_mdev6808;
+
+--echo #
+--echo # MDEV-6442: Assertion `join->best_read < double(...)' failed with optimizer_use_condition_selectivity >=3, ...
+--echo #
+SET use_stat_tables = PREFERABLY;
+SET optimizer_use_condition_selectivity = 3;
+
+CREATE TABLE t1 ( a VARCHAR(3), b VARCHAR(8), KEY (a,b) ) ENGINE=InnoDB;
+INSERT INTO t1 VALUES ('USA','Chinese'),('USA','English');
+
+CREATE TABLE t2 (i INT) ENGINE=InnoDB;
+
+SELECT * FROM t1, t2 WHERE ( 't', 'o' ) IN (
+ SELECT t1_2.b, t1_1.a FROM t1 AS t1_1 STRAIGHT_JOIN t1 AS t1_2 ON ( t1_2.a = t1_1.b )
+);
+DROP TABLE t1,t2;
+
+--echo #
+--echo # MDEV-6738: use_stat_table + histograms crashing optimizer
+--echo #
+
+set use_stat_tables='preferably';
+set optimizer_use_condition_selectivity=4;
+
+--echo # Need innodb because there is a special kind of field_bit for non-myisam tables
+create table t1(col1 int, col2 bit(1) DEFAULT NULL) engine=innodb;
+
+select * from t1 where col2 != true;
+
+drop table t1;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
+
+set use_stat_tables= @tmp_ust;
+set optimizer_use_condition_selectivity= @tmp_oucs;
SET SESSION STORAGE_ENGINE=DEFAULT;
diff --git a/mysql-test/t/show_bad_definer-5553.test b/mysql-test/t/show_bad_definer-5553.test
new file mode 100644
index 00000000000..c5b6f1b3d10
--- /dev/null
+++ b/mysql-test/t/show_bad_definer-5553.test
@@ -0,0 +1,12 @@
+--source include/not_embedded.inc
+#
+# MDEV-5553 A view or procedure with a non existing definer can block "SHOW TABLE STATUS" with an unclear error message
+#
+
+create database mysqltest1; # all-open privileges on test db desroy the test
+use mysqltest1;
+create table t1(id int primary key);
+create definer=unknownuser@'%' sql security definer view v1 as select t1.id from t1 group by t1.id;
+--replace_column 8 # 12 # 13 #
+show table status;
+drop database mysqltest1;
diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test
index eb4da99588c..988a9d6c056 100644
--- a/mysql-test/t/ssl.test
+++ b/mysql-test/t/ssl.test
@@ -11,6 +11,7 @@
connect (ssl_con,localhost,root,,,,,SSL);
# Check ssl turned on
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
# Check ssl expiration
@@ -21,6 +22,7 @@ SHOW STATUS LIKE 'Ssl_server_not_after';
-- source include/common-tests.inc
# Check ssl turned on
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
connection default;
diff --git a/mysql-test/t/ssl_8k_key-master.opt b/mysql-test/t/ssl_8k_key-master.opt
index 8d103df3a95..531c0abc9f1 100644
--- a/mysql-test/t/ssl_8k_key-master.opt
+++ b/mysql-test/t/ssl_8k_key-master.opt
@@ -1 +1,3 @@
---ssl-key=$MYSQL_TEST_DIR/std_data/server8k-key.pem --ssl-cert=$MYSQL_TEST_DIR/std_data/server8k-cert.pem
+--loose-ssl-key=$MYSQL_TEST_DIR/std_data/server8k-key.pem
+--loose-ssl-cert=$MYSQL_TEST_DIR/std_data/server8k-cert.pem
+--loose-ssl-cipher=DHE-RSA-AES256-SHA
diff --git a/mysql-test/t/ssl_compress.test b/mysql-test/t/ssl_compress.test
index 8e0dea53fe7..5e45e3824a2 100644
--- a/mysql-test/t/ssl_compress.test
+++ b/mysql-test/t/ssl_compress.test
@@ -11,6 +11,7 @@
connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS);
# Check ssl turned on
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
# Check compression turned on
@@ -20,6 +21,7 @@ SHOW STATUS LIKE 'Compression';
-- source include/common-tests.inc
# Check ssl turned on
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
# Check compression turned on
diff --git a/mysql-test/t/type_enum.test b/mysql-test/t/type_enum.test
index 5b0b70631a5..9ce34c0b55b 100644
--- a/mysql-test/t/type_enum.test
+++ b/mysql-test/t/type_enum.test
@@ -236,3 +236,124 @@ SELECT AVG(f1) FROM t1;
drop table t1;
--echo End of 5.3 tests
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins comparing DATE/DATETIME and INT/ENUM/VARCHAR columns
+--echo #
+
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 ENUM('2001-01-01','2001/01/01'));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING (c1);
+DROP TABLE t1, t2;
+
+--echo #
+--echo # MDEV-6978 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
+--echo #
+CREATE TABLE t1 (c1 ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 ENUM('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+--echo #
+--echo # MDEV-6991 GROUP_MIN_MAX optimization is erroneously applied in some cases
+--echo #
+CREATE TABLE t1 (id INT NOT NULL, a ENUM('04','03','02','01')) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,'01');
+INSERT INTO t1 VALUES (1,'02');
+INSERT INTO t1 VALUES (1,'03');
+INSERT INTO t1 VALUES (1,'04');
+INSERT INTO t1 VALUES (2,'01');
+INSERT INTO t1 VALUES (2,'02');
+INSERT INTO t1 VALUES (2,'03');
+INSERT INTO t1 VALUES (2,'04');
+INSERT INTO t1 VALUES (3,'01');
+INSERT INTO t1 VALUES (3,'02');
+INSERT INTO t1 VALUES (3,'03');
+INSERT INTO t1 VALUES (3,'04');
+INSERT INTO t1 VALUES (4,'01');
+INSERT INTO t1 VALUES (4,'02');
+INSERT INTO t1 VALUES (4,'03');
+INSERT INTO t1 VALUES (4,'04');
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+ALTER TABLE t1 ADD KEY(id,a);
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+--echo # Should NOT use group_min_max optimization
+EXPLAIN SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>='02' GROUP BY id;
+SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+--echo # Should NOT use group_min_max optimization
+EXPLAIN SELECT id,MIN(a),MAX(a) FROM t1 WHERE a<=3 GROUP BY id;
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-6993 Bad results with join comparing DECIMAL and ENUM/SET columns
+--echo #
+CREATE TABLE t1 (c1 DECIMAL(10,1) PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+CREATE TABLE t2 (c1 ENUM('a','b'));
+INSERT INTO t2 VALUES ('a'),('b');
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+SELECT t1.* FROM t1 LEFT OUTER JOIN t2 USING (c1);
+DROP TABLE t1,t2;
+
+CREATE TABLE t1 (a DECIMAL(10,1), b ENUM('1','2'));
+INSERT INTO t1 (a) VALUES (1),(2);
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+ALTER TABLE t1 MODIFY a ENUM('1','2');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/type_float.test b/mysql-test/t/type_float.test
index 96ce1bcbd9e..bb7a784553e 100644
--- a/mysql-test/t/type_float.test
+++ b/mysql-test/t/type_float.test
@@ -343,3 +343,45 @@ INSERT INTO t1 VALUES ('2.0.');
INSERT INTO t1 VALUES ('.');
SELECT * FROM t1 ORDER BY f;
DROP TABLE t1;
+
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins comparing DATE/DATETIME and INT/DECIMAL/DOUBLE/ENUM/VARCHAR columns
+--echo #
+CREATE TABLE t1 (a DATETIME PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01 00:00:00');
+CREATE TABLE t2 (a DOUBLE);
+INSERT INTO t2 VALUES (19990101000000);
+INSERT INTO t2 VALUES (990101000000);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+DROP TABLE t1,t2;
+
+--echo #
+--echo # MDEV-6971 Bad results with joins comparing TIME and DOUBLE/DECIMAL columns
+--echo #
+CREATE TABLE t1 (a TIME(6) PRIMARY KEY);
+INSERT INTO t1 VALUES ('10:20:30');
+CREATE TABLE t2 (a DOUBLE);
+INSERT INTO t2 VALUES (102030),(102030.000000001);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+--echo # t2 should NOT be elimitated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+DROP TABLE t1,t2;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test
index bf7e3794a19..09149253c67 100644
--- a/mysql-test/t/type_newdecimal.test
+++ b/mysql-test/t/type_newdecimal.test
@@ -1570,3 +1570,55 @@ SELECT d1 * d2 FROM t1;
DROP TABLE t1;
+#
+# Test for Bug#18469276: MOD FOR SMALL DECIMALS FAILS
+#
+select 0.000000000000000000000000000000000000000000000000001 mod 1;
+
+#
+# incorrect result
+#
+select 0.0000000001 mod 1;
+select 0.01 mod 1;
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+--echo #
+CREATE TABLE t1 (a DATETIME PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01 00:00:00');
+CREATE TABLE t2 (a DECIMAL(30,1));
+INSERT INTO t2 VALUES (19990101000000);
+INSERT INTO t2 VALUES (990101000000);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+DROP TABLE t1,t2;
+
+--echo #
+--echo # MDEV-6971 Bad results with joins comparing TIME and DOUBLE/DECIMAL columns
+--echo #
+CREATE TABLE t1 (a TIME(6) PRIMARY KEY);
+INSERT INTO t1 VALUES ('10:20:30');
+CREATE TABLE t2 (a DECIMAL(30,10));
+INSERT INTO t2 VALUES (102030),(102030.000000001);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1 JOIN t2 USING(a);
+SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 USING(a);
+DROP TABLE t1,t2;
+
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/type_set.test b/mysql-test/t/type_set.test
index a851d116743..8b9da6962d5 100644
--- a/mysql-test/t/type_set.test
+++ b/mysql-test/t/type_set.test
@@ -95,3 +95,93 @@ DROP TABLE t1;
--echo End of 5.0 tests
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins compating DATE and INT/ENUM/VARCHAR columns
+--echo #
+
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 SET('2001-01-01','2001/01/01'));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+DROP TABLE t1, t2;
+
+--echo #
+--echo # MDEV-6978 Bad results with join comparing case insensitive VARCHAR/ENUM/SET expression to a _bin ENUM column
+--echo #
+CREATE TABLE t1 (c1 ENUM('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+CREATE TABLE t1 (c1 SET('a') CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+CREATE TABLE t1 (c1 VARCHAR(10) CHARACTER SET latin1 PRIMARY KEY);
+INSERT INTO t1 VALUES ('a');
+CREATE TABLE t2 (c1 SET('a','A') CHARACTER SET latin1 COLLATE latin1_bin);
+INSERT INTO t2 VALUES ('a'),('A');
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1 COLLATE latin1_swedish_ci=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+--echo #
+--echo # MDEV-6993 Bad results with join comparing DECIMAL and ENUM/SET columns
+--echo #
+CREATE TABLE t1 (c1 DECIMAL(10,1) PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2);
+CREATE TABLE t2 (c1 SET('a','b'));
+INSERT INTO t2 VALUES ('a'),('b');
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1 NATURAL JOIN t2;
+SELECT t1.* FROM t1 LEFT OUTER JOIN t2 USING (c1);
+DROP TABLE t1,t2;
+
+CREATE TABLE t1 (a DECIMAL(10,1), b SET('1','2'));
+INSERT INTO t1 (a) VALUES (1),(2);
+UPDATE t1 SET b=a;
+SELECT * FROM t1;
+ALTER TABLE t1 MODIFY a SET('1','2');
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/type_time.test b/mysql-test/t/type_time.test
index 4f23f7b1bb8..d36c6af65e8 100644
--- a/mysql-test/t/type_time.test
+++ b/mysql-test/t/type_time.test
@@ -250,9 +250,20 @@ SELECT '-24:00:00' = (SELECT f1 FROM t1);
DROP TABLE t1;
--echo #
---echo # Start of 10.0 tests
+--echo # MDEV-6592 Assertion `ltime->day == 0' failed with TIMESTAMP, MAKETIME
+--echo #
+CREATE TABLE t1 (d DATE, c VARCHAR(10), KEY(d)) engine=myisam;
+INSERT INTO t1 VALUES ('2008-10-02','2008-10-02'), ('2008-10-02','2008-10-02');
+SELECT * FROM t1 WHERE TIMESTAMP(c,'02:04:42') AND d <=> MAKETIME(97,0,7);
+DROP TABLE t1;
+
+--echo #
+--echo # End of 5.5 tests
--echo #
+--echo #
+--echo # Start of 10.0 tests
+--echo #
--echo #
--echo # MDEV-6102 Comparison between TIME and DATETIME does not use CURRENT_DATE
diff --git a/mysql-test/t/type_uint.test b/mysql-test/t/type_uint.test
index a9212183cb6..3a949c5c47a 100644
--- a/mysql-test/t/type_uint.test
+++ b/mysql-test/t/type_uint.test
@@ -15,3 +15,29 @@ select * from t1;
drop table t1;
# End of 4.1 tests
+
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+--echo #
+CREATE TABLE t1 (a DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('1999-01-01');
+CREATE TABLE t2 (a INT UNSIGNED);
+INSERT INTO t2 VALUES (19990101);
+INSERT INTO t2 VALUES (990101);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+ALTER TABLE t2 ADD PRIMARY KEY(a);
+SELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
+DROP TABLE t1,t2;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/type_varchar.test b/mysql-test/t/type_varchar.test
index 33b84266118..528d26d6f86 100644
--- a/mysql-test/t/type_varchar.test
+++ b/mysql-test/t/type_varchar.test
@@ -217,3 +217,29 @@ CREATE TABLE t1 (a CHAR(16));
INSERT INTO t1 VALUES ('5'), ('s'), ('');
SELECT 5 = a FROM t1;
DROP TABLE t1;
+
+--echo #
+--echo # Start of 10.0 tests
+--echo #
+
+--echo #
+--echo # MDEV-6950 Bad results with joins comparing DATE and INT/ENUM/VARCHAR columns
+--echo #
+CREATE TABLE t1 (c1 DATE PRIMARY KEY);
+INSERT INTO t1 VALUES ('2001-01-01');
+CREATE TABLE t2 (c1 VARCHAR(20));
+INSERT INTO t2 VALUES ('2001-01-01');
+INSERT INTO t2 VALUES ('2001/01/01');
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+ALTER TABLE t2 ADD PRIMARY KEY(c1);
+SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+EXPLAIN SELECT t1.* FROM t1,t2 WHERE t1.c1=t2.c1;
+SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+--echo # t2 should NOT be eliminated
+EXPLAIN SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.c1=t2.c1;
+DROP TABLE IF EXISTS t1,t2;
+
+--echo #
+--echo # End of 10.0 tests
+--echo #
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 8cb9d53842f..b8b040b0d0d 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -1329,6 +1329,26 @@ explain select 1 from dual where exists (select max(a) from t1 group by a union
drop table t1;
--echo #
+--echo # MDEV-6868:MariaDB server crash ( select with union and order by
+--echo # with subquery )
+--echo #
+
+CREATE TABLE t1 ( id INTEGER, sample_name1 VARCHAR(100), sample_name2 VARCHAR(100), PRIMARY KEY(id) );
+
+INSERT INTO t1 ( id, sample_name1, sample_name2 ) VALUES ( 1, 'aaaa', 'bbbb' ), ( 2, 'cccc', 'dddd' );
+
+(
+ SELECT sample_name1 AS testname FROM t1
+)
+UNION
+(
+ SELECT sample_name2 AS testname FROM t1 C ORDER BY (SELECT T.sample_name1 FROM t1 T WHERE T.id = C.id)
+)
+;
+
+drop table t1;
+
+--echo #
--echo # WL#1763 Avoid creating temporary table in UNION ALL
--echo #
diff --git a/mysql-test/t/userstat.test b/mysql-test/t/userstat.test
index 2b4a7c81312..cb1250a13ea 100644
--- a/mysql-test/t/userstat.test
+++ b/mysql-test/t/userstat.test
@@ -35,6 +35,7 @@ drop table t1;
# test SSL connections
--connect (ssl_con,localhost,root,,,,,SSL)
+--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
--connection default
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 6029ad471f6..eb905b5c4df 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -5364,6 +5364,21 @@ select * from t2, t1, v1 where t1.a=t2.a and t1.a=v1.a;
drop view v1;
drop table t1,t2;
+#
+# MDEV-6785 Wrong result on 2nd execution of PS with aggregate function, FROM SQ or MERGE view
+#
+
+create table t1 (i int not null);
+insert into t1 values (1),(2);
+create table t2 (j int not null);
+insert into t2 values (11),(12);
+create algorithm=merge view v3 as select t1.* from t2 left join t1 on (t2.j = t1.i);
+prepare stmt from 'select count(v3.i) from t1, v3';
+execute stmt;
+execute stmt;
+drop table t1, t2;
+drop view v3;
+
--echo # -----------------------------------------------------------------
--echo # -- End of 10.0 tests.
--echo # -----------------------------------------------------------------
diff --git a/mysql-test/valgrind.supp b/mysql-test/valgrind.supp
index 29080597040..e97a6a3f0b7 100644
--- a/mysql-test/valgrind.supp
+++ b/mysql-test/valgrind.supp
@@ -1254,3 +1254,16 @@
fun:__tls_get_addr
}
+{
+ Mroonga: dlopen leaves some "still reachable"
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.2.5
+}
diff --git a/mysys/ma_dyncol.c b/mysys/ma_dyncol.c
index c0508b97922..a7a048acac1 100644
--- a/mysys/ma_dyncol.c
+++ b/mysys/ma_dyncol.c
@@ -3591,7 +3591,6 @@ end:
create_new_string:
/* There is no columns from before, so let's just add the new ones */
rc= ER_DYNCOL_OK;
- my_free(alloc_plan);
if (not_null != 0)
rc= dynamic_column_create_many_internal_fmt(str, add_column_count,
(uint*)column_keys, values,
diff --git a/pcre/ChangeLog b/pcre/ChangeLog
index 7801ef84117..8abdfb5f117 100644
--- a/pcre/ChangeLog
+++ b/pcre/ChangeLog
@@ -1,6 +1,104 @@
ChangeLog for PCRE
------------------
+Version 8.36 26-September-2014
+------------------------------
+
+1. Got rid of some compiler warnings in the C++ modules that were shown up by
+ -Wmissing-field-initializers and -Wunused-parameter.
+
+2. The tests for quantifiers being too big (greater than 65535) were being
+ applied after reading the number, and stupidly assuming that integer
+ overflow would give a negative number. The tests are now applied as the
+ numbers are read.
+
+3. Tidy code in pcre_exec.c where two branches that used to be different are
+ now the same.
+
+4. The JIT compiler did not generate match limit checks for certain
+ bracketed expressions with quantifiers. This may lead to exponential
+ backtracking, instead of returning with PCRE_ERROR_MATCHLIMIT. This
+ issue should be resolved now.
+
+5. Fixed an issue, which occures when nested alternatives are optimized
+ with table jumps.
+
+6. Inserted two casts and changed some ints to size_t in the light of some
+ reported 64-bit compiler warnings (Bugzilla 1477).
+
+7. Fixed a bug concerned with zero-minimum possessive groups that could match
+ an empty string, which sometimes were behaving incorrectly in the
+ interpreter (though correctly in the JIT matcher). This pcretest input is
+ an example:
+
+ '\A(?:[^"]++|"(?:[^"]*+|"")*+")++'
+ NON QUOTED "QUOT""ED" AFTER "NOT MATCHED
+
+ the interpreter was reporting a match of 'NON QUOTED ' only, whereas the
+ JIT matcher and Perl both matched 'NON QUOTED "QUOT""ED" AFTER '. The test
+ for an empty string was breaking the inner loop and carrying on at a lower
+ level, when possessive repeated groups should always return to a higher
+ level as they have no backtrack points in them. The empty string test now
+ occurs at the outer level.
+
+8. Fixed a bug that was incorrectly auto-possessifying \w+ in the pattern
+ ^\w+(?>\s*)(?<=\w) which caused it not to match "test test".
+
+9. Give a compile-time error for \o{} (as Perl does) and for \x{} (which Perl
+ doesn't).
+
+10. Change 8.34/15 introduced a bug that caused the amount of memory needed
+ to hold a pattern to be incorrectly computed (too small) when there were
+ named back references to duplicated names. This could cause "internal
+ error: code overflow" or "double free or corruption" or other memory
+ handling errors.
+
+11. When named subpatterns had the same prefixes, back references could be
+ confused. For example, in this pattern:
+
+ /(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
+
+ the reference to 'Name' was incorrectly treated as a reference to a
+ duplicate name.
+
+12. A pattern such as /^s?c/mi8 where the optional character has more than
+ one "other case" was incorrectly compiled such that it would only try to
+ match starting at "c".
+
+13. When a pattern starting with \s was studied, VT was not included in the
+ list of possible starting characters; this should have been part of the
+ 8.34/18 patch.
+
+14. If a character class started [\Qx]... where x is any character, the class
+ was incorrectly terminated at the ].
+
+15. If a pattern that started with a caseless match for a character with more
+ than one "other case" was studied, PCRE did not set up the starting code
+ unit bit map for the list of possible characters. Now it does. This is an
+ optimization improvement, not a bug fix.
+
+16. The Unicode data tables have been updated to Unicode 7.0.0.
+
+17. Fixed a number of memory leaks in pcregrep.
+
+18. Avoid a compiler warning (from some compilers) for a function call with
+ a cast that removes "const" from an lvalue by using an intermediate
+ variable (to which the compiler does not object).
+
+19. Incorrect code was compiled if a group that contained an internal recursive
+ back reference was optional (had quantifier with a minimum of zero). This
+ example compiled incorrect code: /(((a\2)|(a*)\g<-1>))*/ and other examples
+ caused segmentation faults because of stack overflows at compile time.
+
+20. A pattern such as /((?(R)a|(?1)))+/, which contains a recursion within a
+ group that is quantified with an indefinite repeat, caused a compile-time
+ loop which used up all the system stack and provoked a segmentation fault.
+ This was not the same bug as 19 above.
+
+21. Add PCRECPP_EXP_DECL declaration to operator<< in pcre_stringpiece.h.
+ Patch by Mike Frysinger.
+
+
Version 8.35 04-April-2014
--------------------------
@@ -27,9 +125,9 @@ Version 8.35 04-April-2014
6. Improve character range checks in JIT. Characters are read by an inprecise
function now, which returns with an unknown value if the character code is
- above a certain treshold (e.g: 256). The only limitation is that the value
- must be bigger than the treshold as well. This function is useful, when
- the characters above the treshold are handled in the same way.
+ above a certain threshold (e.g: 256). The only limitation is that the value
+ must be bigger than the threshold as well. This function is useful when
+ the characters above the threshold are handled in the same way.
7. The macros whose names start with RAWUCHAR are placeholders for a future
mode in which only the bottom 21 bits of 32-bit data items are used. To
diff --git a/pcre/NEWS b/pcre/NEWS
index 6331e9908d1..5b8c60c14b8 100644
--- a/pcre/NEWS
+++ b/pcre/NEWS
@@ -1,6 +1,13 @@
News about PCRE releases
------------------------
+Release 8.36 26-September-2014
+------------------------------
+
+This is primarily a bug-fix release. However, in addition, the Unicode data
+tables have been updated to Unicode 7.0.0.
+
+
Release 8.35 04-April-2014
--------------------------
diff --git a/pcre/README b/pcre/README
index 88f2dfd4efd..e30bd0fd5b7 100644
--- a/pcre/README
+++ b/pcre/README
@@ -45,14 +45,16 @@ the 16-bit library, which processes strings of 16-bit values, and one for the
32-bit library, which processes strings of 32-bit values. The distribution also
includes a set of C++ wrapper functions (see the pcrecpp man page for details),
courtesy of Google Inc., which can be used to call the 8-bit PCRE library from
-C++.
+C++. Other C++ wrappers have been created from time to time. See, for example:
+https://github.com/YasserAsmi/regexp, which aims to be simple and similar in
+style to the C API.
-In addition, there is a set of C wrapper functions (again, just for the 8-bit
-library) that are based on the POSIX regular expression API (see the pcreposix
-man page). These end up in the library called libpcreposix. Note that this just
-provides a POSIX calling interface to PCRE; the regular expressions themselves
-still follow Perl syntax and semantics. The POSIX API is restricted, and does
-not give full access to all of PCRE's facilities.
+The distribution also contains a set of C wrapper functions (again, just for
+the 8-bit library) that are based on the POSIX regular expression API (see the
+pcreposix man page). These end up in the library called libpcreposix. Note that
+this just provides a POSIX calling interface to PCRE; the regular expressions
+themselves still follow Perl syntax and semantics. The POSIX API is restricted,
+and does not give full access to all of PCRE's facilities.
The header file for the POSIX-style functions is called pcreposix.h. The
official POSIX name is regex.h, but I did not want to risk possible problems
@@ -988,4 +990,4 @@ pcre_xxx, one with the name pcre16_xx, and a third with the name pcre32_xxx.
Philip Hazel
Email local part: ph10
Email domain: cam.ac.uk
-Last updated: 17 January 2014
+Last updated: 24 October 2014
diff --git a/pcre/configure.ac b/pcre/configure.ac
index aab2f56c218..e7dffbe003f 100644
--- a/pcre/configure.ac
+++ b/pcre/configure.ac
@@ -9,19 +9,19 @@ dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
dnl be defined as -RC2, for example. For real releases, it should be empty.
m4_define(pcre_major, [8])
-m4_define(pcre_minor, [35])
+m4_define(pcre_minor, [36])
m4_define(pcre_prerelease, [])
-m4_define(pcre_date, [2014-04-04])
+m4_define(pcre_date, [2014-09-26])
# NOTE: The CMakeLists.txt file searches for the above variables in the first
# 50 lines of this file. Please update that if the variables above are moved.
# Libtool shared library interface versions (current:revision:age)
-m4_define(libpcre_version, [3:3:2])
-m4_define(libpcre16_version, [2:3:2])
-m4_define(libpcre32_version, [0:3:0])
-m4_define(libpcreposix_version, [0:2:0])
-m4_define(libpcrecpp_version, [0:0:0])
+m4_define(libpcre_version, [3:4:2])
+m4_define(libpcre16_version, [2:4:2])
+m4_define(libpcre32_version, [0:4:0])
+m4_define(libpcreposix_version, [0:3:0])
+m4_define(libpcrecpp_version, [0:1:0])
AC_PREREQ(2.57)
AC_INIT(PCRE, pcre_major.pcre_minor[]pcre_prerelease, , pcre)
diff --git a/pcre/doc/html/README.txt b/pcre/doc/html/README.txt
index 88f2dfd4efd..e30bd0fd5b7 100644
--- a/pcre/doc/html/README.txt
+++ b/pcre/doc/html/README.txt
@@ -45,14 +45,16 @@ the 16-bit library, which processes strings of 16-bit values, and one for the
32-bit library, which processes strings of 32-bit values. The distribution also
includes a set of C++ wrapper functions (see the pcrecpp man page for details),
courtesy of Google Inc., which can be used to call the 8-bit PCRE library from
-C++.
+C++. Other C++ wrappers have been created from time to time. See, for example:
+https://github.com/YasserAsmi/regexp, which aims to be simple and similar in
+style to the C API.
-In addition, there is a set of C wrapper functions (again, just for the 8-bit
-library) that are based on the POSIX regular expression API (see the pcreposix
-man page). These end up in the library called libpcreposix. Note that this just
-provides a POSIX calling interface to PCRE; the regular expressions themselves
-still follow Perl syntax and semantics. The POSIX API is restricted, and does
-not give full access to all of PCRE's facilities.
+The distribution also contains a set of C wrapper functions (again, just for
+the 8-bit library) that are based on the POSIX regular expression API (see the
+pcreposix man page). These end up in the library called libpcreposix. Note that
+this just provides a POSIX calling interface to PCRE; the regular expressions
+themselves still follow Perl syntax and semantics. The POSIX API is restricted,
+and does not give full access to all of PCRE's facilities.
The header file for the POSIX-style functions is called pcreposix.h. The
official POSIX name is regex.h, but I did not want to risk possible problems
@@ -988,4 +990,4 @@ pcre_xxx, one with the name pcre16_xx, and a third with the name pcre32_xxx.
Philip Hazel
Email local part: ph10
Email domain: cam.ac.uk
-Last updated: 17 January 2014
+Last updated: 24 October 2014
diff --git a/pcre/doc/html/pcre_config.html b/pcre/doc/html/pcre_config.html
index bcdcdded708..72fb9caa1ff 100644
--- a/pcre/doc/html/pcre_config.html
+++ b/pcre/doc/html/pcre_config.html
@@ -39,8 +39,10 @@ arguments are as follows:
<i>where</i> Points to where to put the data
</pre>
The <i>where</i> argument must point to an integer variable, except for
-PCRE_CONFIG_MATCH_LIMIT and PCRE_CONFIG_MATCH_LIMIT_RECURSION, when it must
-point to an unsigned long integer. The available codes are:
+PCRE_CONFIG_MATCH_LIMIT, PCRE_CONFIG_MATCH_LIMIT_RECURSION, and
+PCRE_CONFIG_PARENS_LIMIT, when it must point to an unsigned long integer,
+and for PCRE_CONFIG_JITTARGET, when it must point to a const char*.
+The available codes are:
<pre>
PCRE_CONFIG_JIT Availability of just-in-time compiler
support (1=yes 0=no)
diff --git a/pcre/doc/html/pcre_fullinfo.html b/pcre/doc/html/pcre_fullinfo.html
index b88fc1155bd..2b7c72b3b98 100644
--- a/pcre/doc/html/pcre_fullinfo.html
+++ b/pcre/doc/html/pcre_fullinfo.html
@@ -57,6 +57,10 @@ The following information is available:
PCRE_INFO_JITSIZE Size of JIT compiled code
PCRE_INFO_LASTLITERAL Literal last data unit required
PCRE_INFO_MINLENGTH Lower bound length of matching strings
+ PCRE_INFO_MATCHEMPTY Return 1 if the pattern can match an empty string,
+ 0 otherwise
+ PCRE_INFO_MATCHLIMIT Match limit if set, otherwise PCRE_RROR_UNSET
+ PCRE_INFO_MAXLOOKBEHIND Length (in characters) of the longest lookbehind assertion
PCRE_INFO_NAMECOUNT Number of named subpatterns
PCRE_INFO_NAMEENTRYSIZE Size of name table entry
PCRE_INFO_NAMETABLE Pointer to name table
@@ -72,6 +76,7 @@ The following information is available:
2 if the first character is at the start of the data
string or after a newline, and
0 otherwise
+ PCRE_INFO_RECURSIONLIMIT Recursion limit if set, otherwise PCRE_ERROR_UNSET
PCRE_INFO_REQUIREDCHAR Literal last data unit required
PCRE_INFO_REQUIREDCHARFLAGS Returns 1 if the last data character is set (which can then
be retrieved using PCRE_INFO_REQUIREDCHAR); 0 otherwise
@@ -79,14 +84,18 @@ The following information is available:
The <i>where</i> argument must point to an integer variable, except for the
following <i>what</i> values:
<pre>
- PCRE_INFO_DEFAULT_TABLES const unsigned char *
- PCRE_INFO_FIRSTTABLE const unsigned char *
+ PCRE_INFO_DEFAULT_TABLES const uint8_t *
+ PCRE_INFO_FIRSTCHARACTER uint32_t
+ PCRE_INFO_FIRSTTABLE const uint8_t *
+ PCRE_INFO_JITSIZE size_t
+ PCRE_INFO_MATCHLIMIT uint32_t
PCRE_INFO_NAMETABLE PCRE_SPTR16 (16-bit library)
PCRE_INFO_NAMETABLE PCRE_SPTR32 (32-bit library)
PCRE_INFO_NAMETABLE const unsigned char * (8-bit library)
PCRE_INFO_OPTIONS unsigned long int
PCRE_INFO_SIZE size_t
- PCRE_INFO_FIRSTCHARACTER uint32_t
+ PCRE_INFO_STUDYSIZE size_t
+ PCRE_INFO_RECURSIONLIMIT uint32_t
PCRE_INFO_REQUIREDCHAR uint32_t
</pre>
The yield of the function is zero on success or:
@@ -95,6 +104,7 @@ The yield of the function is zero on success or:
the argument <i>where</i> was NULL
PCRE_ERROR_BADMAGIC the "magic number" was not found
PCRE_ERROR_BADOPTION the value of <i>what</i> was invalid
+ PCRE_ERROR_UNSET the option was not set
</PRE>
</P>
<P>
diff --git a/pcre/doc/html/pcrepattern.html b/pcre/doc/html/pcrepattern.html
index c06d1e03f11..71fd907d26f 100644
--- a/pcre/doc/html/pcrepattern.html
+++ b/pcre/doc/html/pcrepattern.html
@@ -703,6 +703,7 @@ Armenian,
Avestan,
Balinese,
Bamum,
+Bassa_Vah,
Batak,
Bengali,
Bopomofo,
@@ -712,6 +713,7 @@ Buginese,
Buhid,
Canadian_Aboriginal,
Carian,
+Caucasian_Albanian,
Chakma,
Cham,
Cherokee,
@@ -722,11 +724,14 @@ Cypriot,
Cyrillic,
Deseret,
Devanagari,
+Duployan,
Egyptian_Hieroglyphs,
+Elbasan,
Ethiopic,
Georgian,
Glagolitic,
Gothic,
+Grantha,
Greek,
Gujarati,
Gurmukhi,
@@ -746,40 +751,56 @@ Katakana,
Kayah_Li,
Kharoshthi,
Khmer,
+Khojki,
+Khudawadi,
Lao,
Latin,
Lepcha,
Limbu,
+Linear_A,
Linear_B,
Lisu,
Lycian,
Lydian,
+Mahajani,
Malayalam,
Mandaic,
+Manichaean,
Meetei_Mayek,
+Mende_Kikakui,
Meroitic_Cursive,
Meroitic_Hieroglyphs,
Miao,
+Modi,
Mongolian,
+Mro,
Myanmar,
+Nabataean,
New_Tai_Lue,
Nko,
Ogham,
+Ol_Chiki,
Old_Italic,
+Old_North_Arabian,
+Old_Permic,
Old_Persian,
Old_South_Arabian,
Old_Turkic,
-Ol_Chiki,
Oriya,
Osmanya,
+Pahawh_Hmong,
+Palmyrene,
+Pau_Cin_Hau,
Phags_Pa,
Phoenician,
+Psalter_Pahlavi,
Rejang,
Runic,
Samaritan,
Saurashtra,
Sharada,
Shavian,
+Siddham,
Sinhala,
Sora_Sompeng,
Sundanese,
@@ -797,8 +818,10 @@ Thaana,
Thai,
Tibetan,
Tifinagh,
+Tirhuta,
Ugaritic,
Vai,
+Warang_Citi,
Yi.
</P>
<P>
diff --git a/pcre/doc/html/pcresyntax.html b/pcre/doc/html/pcresyntax.html
index 89f35737b4f..5896b9e0688 100644
--- a/pcre/doc/html/pcresyntax.html
+++ b/pcre/doc/html/pcresyntax.html
@@ -171,6 +171,7 @@ Armenian,
Avestan,
Balinese,
Bamum,
+Bassa_Vah,
Batak,
Bengali,
Bopomofo,
@@ -180,6 +181,7 @@ Buginese,
Buhid,
Canadian_Aboriginal,
Carian,
+Caucasian_Albanian,
Chakma,
Cham,
Cherokee,
@@ -190,11 +192,14 @@ Cypriot,
Cyrillic,
Deseret,
Devanagari,
+Duployan,
Egyptian_Hieroglyphs,
+Elbasan,
Ethiopic,
Georgian,
Glagolitic,
Gothic,
+Grantha,
Greek,
Gujarati,
Gurmukhi,
@@ -214,40 +219,56 @@ Katakana,
Kayah_Li,
Kharoshthi,
Khmer,
+Khojki,
+Khudawadi,
Lao,
Latin,
Lepcha,
Limbu,
+Linear_A,
Linear_B,
Lisu,
Lycian,
Lydian,
+Mahajani,
Malayalam,
Mandaic,
+Manichaean,
Meetei_Mayek,
+Mende_Kikakui,
Meroitic_Cursive,
Meroitic_Hieroglyphs,
Miao,
+Modi,
Mongolian,
+Mro,
Myanmar,
+Nabataean,
New_Tai_Lue,
Nko,
Ogham,
+Ol_Chiki,
Old_Italic,
+Old_North_Arabian,
+Old_Permic,
Old_Persian,
Old_South_Arabian,
Old_Turkic,
-Ol_Chiki,
Oriya,
Osmanya,
+Pahawh_Hmong,
+Palmyrene,
+Pau_Cin_Hau,
Phags_Pa,
Phoenician,
+Psalter_Pahlavi,
Rejang,
Runic,
Samaritan,
Saurashtra,
Sharada,
Shavian,
+Siddham,
Sinhala,
Sora_Sompeng,
Sundanese,
@@ -265,8 +286,10 @@ Thaana,
Thai,
Tibetan,
Tifinagh,
+Tirhuta,
Ugaritic,
Vai,
+Warang_Citi,
Yi.
</P>
<br><a name="SEC8" href="#TOC1">CHARACTER CLASSES</a><br>
diff --git a/pcre/doc/pcre.txt b/pcre/doc/pcre.txt
index 14cbb8bf2be..ce27f4b3e0c 100644
--- a/pcre/doc/pcre.txt
+++ b/pcre/doc/pcre.txt
@@ -5326,21 +5326,25 @@ BACKSLASH
Those that are not part of an identified script are lumped together as
"Common". The current list of scripts is:
- Arabic, Armenian, Avestan, Balinese, Bamum, Batak, Bengali, Bopomofo,
- Brahmi, Braille, Buginese, Buhid, Canadian_Aboriginal, Carian, Chakma,
- Cham, Cherokee, Common, Coptic, Cuneiform, Cypriot, Cyrillic, Deseret,
- Devanagari, Egyptian_Hieroglyphs, Ethiopic, Georgian, Glagolitic,
- Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hira-
- gana, Imperial_Aramaic, Inherited, Inscriptional_Pahlavi, Inscrip-
- tional_Parthian, Javanese, Kaithi, Kannada, Katakana, Kayah_Li,
- Kharoshthi, Khmer, Lao, Latin, Lepcha, Limbu, Linear_B, Lisu, Lycian,
- Lydian, Malayalam, Mandaic, Meetei_Mayek, Meroitic_Cursive,
- Meroitic_Hieroglyphs, Miao, Mongolian, Myanmar, New_Tai_Lue, Nko,
- Ogham, Old_Italic, Old_Persian, Old_South_Arabian, Old_Turkic,
- Ol_Chiki, Oriya, Osmanya, Phags_Pa, Phoenician, Rejang, Runic, Samari-
- tan, Saurashtra, Sharada, Shavian, Sinhala, Sora_Sompeng, Sundanese,
- Syloti_Nagri, Syriac, Tagalog, Tagbanwa, Tai_Le, Tai_Tham, Tai_Viet,
- Takri, Tamil, Telugu, Thaana, Thai, Tibetan, Tifinagh, Ugaritic, Vai,
+ Arabic, Armenian, Avestan, Balinese, Bamum, Bassa_Vah, Batak, Bengali,
+ Bopomofo, Brahmi, Braille, Buginese, Buhid, Canadian_Aboriginal, Car-
+ ian, Caucasian_Albanian, Chakma, Cham, Cherokee, Common, Coptic, Cunei-
+ form, Cypriot, Cyrillic, Deseret, Devanagari, Duployan, Egyptian_Hiero-
+ glyphs, Elbasan, Ethiopic, Georgian, Glagolitic, Gothic, Grantha,
+ Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hiragana,
+ Imperial_Aramaic, Inherited, Inscriptional_Pahlavi, Inscrip-
+ tional_Parthian, Javanese, Kaithi, Kannada, Katakana, Kayah_Li,
+ Kharoshthi, Khmer, Khojki, Khudawadi, Lao, Latin, Lepcha, Limbu, Lin-
+ ear_A, Linear_B, Lisu, Lycian, Lydian, Mahajani, Malayalam, Mandaic,
+ Manichaean, Meetei_Mayek, Mende_Kikakui, Meroitic_Cursive,
+ Meroitic_Hieroglyphs, Miao, Modi, Mongolian, Mro, Myanmar, Nabataean,
+ New_Tai_Lue, Nko, Ogham, Ol_Chiki, Old_Italic, Old_North_Arabian,
+ Old_Permic, Old_Persian, Old_South_Arabian, Old_Turkic, Oriya, Osmanya,
+ Pahawh_Hmong, Palmyrene, Pau_Cin_Hau, Phags_Pa, Phoenician,
+ Psalter_Pahlavi, Rejang, Runic, Samaritan, Saurashtra, Sharada, Sha-
+ vian, Siddham, Sinhala, Sora_Sompeng, Sundanese, Syloti_Nagri, Syriac,
+ Tagalog, Tagbanwa, Tai_Le, Tai_Tham, Tai_Viet, Takri, Tamil, Telugu,
+ Thaana, Thai, Tibetan, Tifinagh, Tirhuta, Ugaritic, Vai, Warang_Citi,
Yi.
Each character has exactly one Unicode general category property, spec-
@@ -7777,21 +7781,25 @@ PCRE SPECIAL CATEGORY PROPERTIES FOR \p and \P
SCRIPT NAMES FOR \p AND \P
- Arabic, Armenian, Avestan, Balinese, Bamum, Batak, Bengali, Bopomofo,
- Brahmi, Braille, Buginese, Buhid, Canadian_Aboriginal, Carian, Chakma,
- Cham, Cherokee, Common, Coptic, Cuneiform, Cypriot, Cyrillic, Deseret,
- Devanagari, Egyptian_Hieroglyphs, Ethiopic, Georgian, Glagolitic,
- Gothic, Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hira-
- gana, Imperial_Aramaic, Inherited, Inscriptional_Pahlavi, Inscrip-
- tional_Parthian, Javanese, Kaithi, Kannada, Katakana, Kayah_Li,
- Kharoshthi, Khmer, Lao, Latin, Lepcha, Limbu, Linear_B, Lisu, Lycian,
- Lydian, Malayalam, Mandaic, Meetei_Mayek, Meroitic_Cursive,
- Meroitic_Hieroglyphs, Miao, Mongolian, Myanmar, New_Tai_Lue, Nko,
- Ogham, Old_Italic, Old_Persian, Old_South_Arabian, Old_Turkic,
- Ol_Chiki, Oriya, Osmanya, Phags_Pa, Phoenician, Rejang, Runic, Samari-
- tan, Saurashtra, Sharada, Shavian, Sinhala, Sora_Sompeng, Sundanese,
- Syloti_Nagri, Syriac, Tagalog, Tagbanwa, Tai_Le, Tai_Tham, Tai_Viet,
- Takri, Tamil, Telugu, Thaana, Thai, Tibetan, Tifinagh, Ugaritic, Vai,
+ Arabic, Armenian, Avestan, Balinese, Bamum, Bassa_Vah, Batak, Bengali,
+ Bopomofo, Brahmi, Braille, Buginese, Buhid, Canadian_Aboriginal, Car-
+ ian, Caucasian_Albanian, Chakma, Cham, Cherokee, Common, Coptic, Cunei-
+ form, Cypriot, Cyrillic, Deseret, Devanagari, Duployan, Egyptian_Hiero-
+ glyphs, Elbasan, Ethiopic, Georgian, Glagolitic, Gothic, Grantha,
+ Greek, Gujarati, Gurmukhi, Han, Hangul, Hanunoo, Hebrew, Hiragana,
+ Imperial_Aramaic, Inherited, Inscriptional_Pahlavi, Inscrip-
+ tional_Parthian, Javanese, Kaithi, Kannada, Katakana, Kayah_Li,
+ Kharoshthi, Khmer, Khojki, Khudawadi, Lao, Latin, Lepcha, Limbu, Lin-
+ ear_A, Linear_B, Lisu, Lycian, Lydian, Mahajani, Malayalam, Mandaic,
+ Manichaean, Meetei_Mayek, Mende_Kikakui, Meroitic_Cursive,
+ Meroitic_Hieroglyphs, Miao, Modi, Mongolian, Mro, Myanmar, Nabataean,
+ New_Tai_Lue, Nko, Ogham, Ol_Chiki, Old_Italic, Old_North_Arabian,
+ Old_Permic, Old_Persian, Old_South_Arabian, Old_Turkic, Oriya, Osmanya,
+ Pahawh_Hmong, Palmyrene, Pau_Cin_Hau, Phags_Pa, Phoenician,
+ Psalter_Pahlavi, Rejang, Runic, Samaritan, Saurashtra, Sharada, Sha-
+ vian, Siddham, Sinhala, Sora_Sompeng, Sundanese, Syloti_Nagri, Syriac,
+ Tagalog, Tagbanwa, Tai_Le, Tai_Tham, Tai_Viet, Takri, Tamil, Telugu,
+ Thaana, Thai, Tibetan, Tifinagh, Tirhuta, Ugaritic, Vai, Warang_Citi,
Yi.
diff --git a/pcre/doc/pcre_config.3 b/pcre/doc/pcre_config.3
index d3de14bb73c..d14ffdadeb1 100644
--- a/pcre/doc/pcre_config.3
+++ b/pcre/doc/pcre_config.3
@@ -1,4 +1,4 @@
-.TH PCRE_CONFIG 3 "05 November 2013" "PCRE 8.34"
+.TH PCRE_CONFIG 3 "20 April 2014" "PCRE 8.36"
.SH NAME
PCRE - Perl-compatible regular expressions
.SH SYNOPSIS
@@ -24,8 +24,10 @@ arguments are as follows:
\fIwhere\fP Points to where to put the data
.sp
The \fIwhere\fP argument must point to an integer variable, except for
-PCRE_CONFIG_MATCH_LIMIT and PCRE_CONFIG_MATCH_LIMIT_RECURSION, when it must
-point to an unsigned long integer. The available codes are:
+PCRE_CONFIG_MATCH_LIMIT, PCRE_CONFIG_MATCH_LIMIT_RECURSION, and
+PCRE_CONFIG_PARENS_LIMIT, when it must point to an unsigned long integer,
+and for PCRE_CONFIG_JITTARGET, when it must point to a const char*.
+The available codes are:
.sp
PCRE_CONFIG_JIT Availability of just-in-time compiler
support (1=yes 0=no)
diff --git a/pcre/doc/pcre_fullinfo.3 b/pcre/doc/pcre_fullinfo.3
index 01e2e928740..c9b2c656da5 100644
--- a/pcre/doc/pcre_fullinfo.3
+++ b/pcre/doc/pcre_fullinfo.3
@@ -1,4 +1,4 @@
-.TH PCRE_FULLINFO 3 "24 June 2012" "PCRE 8.30"
+.TH PCRE_FULLINFO 3 "21 April 2014" "PCRE 8.36"
.SH NAME
PCRE - Perl-compatible regular expressions
.SH SYNOPSIS
@@ -43,6 +43,10 @@ The following information is available:
PCRE_INFO_JITSIZE Size of JIT compiled code
PCRE_INFO_LASTLITERAL Literal last data unit required
PCRE_INFO_MINLENGTH Lower bound length of matching strings
+ PCRE_INFO_MATCHEMPTY Return 1 if the pattern can match an empty string,
+ 0 otherwise
+ PCRE_INFO_MATCHLIMIT Match limit if set, otherwise PCRE_RROR_UNSET
+ PCRE_INFO_MAXLOOKBEHIND Length (in characters) of the longest lookbehind assertion
PCRE_INFO_NAMECOUNT Number of named subpatterns
PCRE_INFO_NAMEENTRYSIZE Size of name table entry
PCRE_INFO_NAMETABLE Pointer to name table
@@ -58,6 +62,7 @@ The following information is available:
2 if the first character is at the start of the data
string or after a newline, and
0 otherwise
+ PCRE_INFO_RECURSIONLIMIT Recursion limit if set, otherwise PCRE_ERROR_UNSET
PCRE_INFO_REQUIREDCHAR Literal last data unit required
PCRE_INFO_REQUIREDCHARFLAGS Returns 1 if the last data character is set (which can then
be retrieved using PCRE_INFO_REQUIREDCHAR); 0 otherwise
@@ -65,14 +70,18 @@ The following information is available:
The \fIwhere\fP argument must point to an integer variable, except for the
following \fIwhat\fP values:
.sp
- PCRE_INFO_DEFAULT_TABLES const unsigned char *
- PCRE_INFO_FIRSTTABLE const unsigned char *
+ PCRE_INFO_DEFAULT_TABLES const uint8_t *
+ PCRE_INFO_FIRSTCHARACTER uint32_t
+ PCRE_INFO_FIRSTTABLE const uint8_t *
+ PCRE_INFO_JITSIZE size_t
+ PCRE_INFO_MATCHLIMIT uint32_t
PCRE_INFO_NAMETABLE PCRE_SPTR16 (16-bit library)
PCRE_INFO_NAMETABLE PCRE_SPTR32 (32-bit library)
PCRE_INFO_NAMETABLE const unsigned char * (8-bit library)
PCRE_INFO_OPTIONS unsigned long int
PCRE_INFO_SIZE size_t
- PCRE_INFO_FIRSTCHARACTER uint32_t
+ PCRE_INFO_STUDYSIZE size_t
+ PCRE_INFO_RECURSIONLIMIT uint32_t
PCRE_INFO_REQUIREDCHAR uint32_t
.sp
The yield of the function is zero on success or:
@@ -81,6 +90,7 @@ The yield of the function is zero on success or:
the argument \fIwhere\fP was NULL
PCRE_ERROR_BADMAGIC the "magic number" was not found
PCRE_ERROR_BADOPTION the value of \fIwhat\fP was invalid
+ PCRE_ERROR_UNSET the option was not set
.P
There is a complete description of the PCRE native API in the
.\" HREF
diff --git a/pcre/doc/pcrepattern.3 b/pcre/doc/pcrepattern.3
index f1c45cda5d2..d0c6eeb7ddf 100644
--- a/pcre/doc/pcrepattern.3
+++ b/pcre/doc/pcrepattern.3
@@ -708,6 +708,7 @@ Armenian,
Avestan,
Balinese,
Bamum,
+Bassa_Vah,
Batak,
Bengali,
Bopomofo,
@@ -717,6 +718,7 @@ Buginese,
Buhid,
Canadian_Aboriginal,
Carian,
+Caucasian_Albanian,
Chakma,
Cham,
Cherokee,
@@ -727,11 +729,14 @@ Cypriot,
Cyrillic,
Deseret,
Devanagari,
+Duployan,
Egyptian_Hieroglyphs,
+Elbasan,
Ethiopic,
Georgian,
Glagolitic,
Gothic,
+Grantha,
Greek,
Gujarati,
Gurmukhi,
@@ -751,40 +756,56 @@ Katakana,
Kayah_Li,
Kharoshthi,
Khmer,
+Khojki,
+Khudawadi,
Lao,
Latin,
Lepcha,
Limbu,
+Linear_A,
Linear_B,
Lisu,
Lycian,
Lydian,
+Mahajani,
Malayalam,
Mandaic,
+Manichaean,
Meetei_Mayek,
+Mende_Kikakui,
Meroitic_Cursive,
Meroitic_Hieroglyphs,
Miao,
+Modi,
Mongolian,
+Mro,
Myanmar,
+Nabataean,
New_Tai_Lue,
Nko,
Ogham,
+Ol_Chiki,
Old_Italic,
+Old_North_Arabian,
+Old_Permic,
Old_Persian,
Old_South_Arabian,
Old_Turkic,
-Ol_Chiki,
Oriya,
Osmanya,
+Pahawh_Hmong,
+Palmyrene,
+Pau_Cin_Hau,
Phags_Pa,
Phoenician,
+Psalter_Pahlavi,
Rejang,
Runic,
Samaritan,
Saurashtra,
Sharada,
Shavian,
+Siddham,
Sinhala,
Sora_Sompeng,
Sundanese,
@@ -802,8 +823,10 @@ Thaana,
Thai,
Tibetan,
Tifinagh,
+Tirhuta,
Ugaritic,
Vai,
+Warang_Citi,
Yi.
.P
Each character has exactly one Unicode general category property, specified by
diff --git a/pcre/doc/pcresyntax.3 b/pcre/doc/pcresyntax.3
index fd878da4f99..0850369f7aa 100644
--- a/pcre/doc/pcresyntax.3
+++ b/pcre/doc/pcresyntax.3
@@ -139,6 +139,7 @@ Armenian,
Avestan,
Balinese,
Bamum,
+Bassa_Vah,
Batak,
Bengali,
Bopomofo,
@@ -148,6 +149,7 @@ Buginese,
Buhid,
Canadian_Aboriginal,
Carian,
+Caucasian_Albanian,
Chakma,
Cham,
Cherokee,
@@ -158,11 +160,14 @@ Cypriot,
Cyrillic,
Deseret,
Devanagari,
+Duployan,
Egyptian_Hieroglyphs,
+Elbasan,
Ethiopic,
Georgian,
Glagolitic,
Gothic,
+Grantha,
Greek,
Gujarati,
Gurmukhi,
@@ -182,40 +187,56 @@ Katakana,
Kayah_Li,
Kharoshthi,
Khmer,
+Khojki,
+Khudawadi,
Lao,
Latin,
Lepcha,
Limbu,
+Linear_A,
Linear_B,
Lisu,
Lycian,
Lydian,
+Mahajani,
Malayalam,
Mandaic,
+Manichaean,
Meetei_Mayek,
+Mende_Kikakui,
Meroitic_Cursive,
Meroitic_Hieroglyphs,
Miao,
+Modi,
Mongolian,
+Mro,
Myanmar,
+Nabataean,
New_Tai_Lue,
Nko,
Ogham,
+Ol_Chiki,
Old_Italic,
+Old_North_Arabian,
+Old_Permic,
Old_Persian,
Old_South_Arabian,
Old_Turkic,
-Ol_Chiki,
Oriya,
Osmanya,
+Pahawh_Hmong,
+Palmyrene,
+Pau_Cin_Hau,
Phags_Pa,
Phoenician,
+Psalter_Pahlavi,
Rejang,
Runic,
Samaritan,
Saurashtra,
Sharada,
Shavian,
+Siddham,
Sinhala,
Sora_Sompeng,
Sundanese,
@@ -233,8 +254,10 @@ Thaana,
Thai,
Tibetan,
Tifinagh,
+Tirhuta,
Ugaritic,
Vai,
+Warang_Citi,
Yi.
.
.
diff --git a/pcre/pcre_compile.c b/pcre/pcre_compile.c
index 8a5b7233479..efc0b21fd14 100644
--- a/pcre/pcre_compile.c
+++ b/pcre/pcre_compile.c
@@ -47,8 +47,8 @@ supporting internal functions that are not used by other modules. */
#endif
#define NLBLOCK cd /* Block containing newline information */
-#define PSSTART start_pattern /* Field containing processed string start */
-#define PSEND end_pattern /* Field containing processed string end */
+#define PSSTART start_pattern /* Field containing pattern start */
+#define PSEND end_pattern /* Field containing pattern end */
#include "pcre_internal.h"
@@ -549,6 +549,7 @@ static const char error_texts[] =
"group name must start with a non-digit\0"
/* 85 */
"parentheses are too deeply nested (stack check)\0"
+ "digits missing in \\x{} or \\o{}\0"
;
/* Table to identify digits and hex digits. This is used when compiling
@@ -1259,6 +1260,7 @@ else
case CHAR_o:
if (ptr[1] != CHAR_LEFT_CURLY_BRACKET) *errorcodeptr = ERR81; else
+ if (ptr[2] == CHAR_RIGHT_CURLY_BRACKET) *errorcodeptr = ERR86; else
{
ptr += 2;
c = 0;
@@ -1328,6 +1330,11 @@ else
if (ptr[1] == CHAR_LEFT_CURLY_BRACKET)
{
ptr += 2;
+ if (*ptr == CHAR_RIGHT_CURLY_BRACKET)
+ {
+ *errorcodeptr = ERR86;
+ break;
+ }
c = 0;
overflow = FALSE;
while (MAX_255(*ptr) && (digitab[*ptr] & ctype_xdigit) != 0)
@@ -1583,29 +1590,29 @@ read_repeat_counts(const pcre_uchar *p, int *minp, int *maxp, int *errorcodeptr)
int min = 0;
int max = -1;
-/* Read the minimum value and do a paranoid check: a negative value indicates
-an integer overflow. */
-
-while (IS_DIGIT(*p)) min = min * 10 + (int)(*p++ - CHAR_0);
-if (min < 0 || min > 65535)
+while (IS_DIGIT(*p))
{
- *errorcodeptr = ERR5;
- return p;
+ min = min * 10 + (int)(*p++ - CHAR_0);
+ if (min > 65535)
+ {
+ *errorcodeptr = ERR5;
+ return p;
+ }
}
-/* Read the maximum value if there is one, and again do a paranoid on its size.
-Also, max must not be less than min. */
-
if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
{
if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
{
max = 0;
- while(IS_DIGIT(*p)) max = max * 10 + (int)(*p++ - CHAR_0);
- if (max < 0 || max > 65535)
+ while(IS_DIGIT(*p))
{
- *errorcodeptr = ERR5;
- return p;
+ max = max * 10 + (int)(*p++ - CHAR_0);
+ if (max > 65535)
+ {
+ *errorcodeptr = ERR5;
+ return p;
+ }
}
if (max < min)
{
@@ -1615,9 +1622,6 @@ if (*p == CHAR_RIGHT_CURLY_BRACKET) max = min; else
}
}
-/* Fill in the required variables, and pass back the pointer to the terminating
-'}'. */
-
*minp = min;
*maxp = max;
return p;
@@ -2370,6 +2374,7 @@ for (code = first_significant_code(code + PRIV(OP_lengths)[*code], TRUE);
if (c == OP_RECURSE)
{
const pcre_uchar *scode = cd->start_code + GET(code, 1);
+ const pcre_uchar *endgroup = scode;
BOOL empty_branch;
/* Test for forward reference or uncompleted reference. This is disabled
@@ -2384,20 +2389,16 @@ for (code = first_significant_code(code + PRIV(OP_lengths)[*code], TRUE);
if (GET(scode, 1) == 0) return TRUE; /* Unclosed */
}
- /* If we are scanning a completed pattern, there are no forward references
- and all groups are complete. We need to detect whether this is a recursive
- call, as otherwise there will be an infinite loop. If it is a recursion,
- just skip over it. Simple recursions are easily detected. For mutual
- recursions we keep a chain on the stack. */
+ /* If the reference is to a completed group, we need to detect whether this
+ is a recursive call, as otherwise there will be an infinite loop. If it is
+ a recursion, just skip over it. Simple recursions are easily detected. For
+ mutual recursions we keep a chain on the stack. */
+ do endgroup += GET(endgroup, 1); while (*endgroup == OP_ALT);
+ if (code >= scode && code <= endgroup) continue; /* Simple recursion */
else
{
recurse_check *r = recurses;
- const pcre_uchar *endgroup = scode;
-
- do endgroup += GET(endgroup, 1); while (*endgroup == OP_ALT);
- if (code >= scode && code <= endgroup) continue; /* Simple recursion */
-
for (r = recurses; r != NULL; r = r->prev)
if (r->group == scode) break;
if (r != NULL) continue; /* Mutual recursion */
@@ -3038,7 +3039,7 @@ switch(c)
end += 1 + 2 * IMM2_SIZE;
break;
}
- list[2] = end - code;
+ list[2] = (pcre_uint32)(end - code);
return end;
}
return NULL; /* Opcode not accepted */
@@ -3079,6 +3080,7 @@ const pcre_uint8 *class_bitset;
const pcre_uint8 *set1, *set2, *set_end;
pcre_uint32 chr;
BOOL accepted, invert_bits;
+BOOL entered_a_group = FALSE;
/* Note: the base_list[1] contains whether the current opcode has greedy
(represented by a non-zero value) quantifier. This is a different from
@@ -3132,8 +3134,10 @@ for(;;)
case OP_ONCE:
case OP_ONCE_NC:
/* Atomic sub-patterns and assertions can always auto-possessify their
- last iterator. */
- return TRUE;
+ last iterator. However, if the group was entered as a result of checking
+ a previous iterator, this is not possible. */
+
+ return !entered_a_group;
}
code += PRIV(OP_lengths)[c];
@@ -3152,6 +3156,8 @@ for(;;)
code = next_code + 1 + LINK_SIZE;
next_code += GET(next_code, 1);
}
+
+ entered_a_group = TRUE;
continue;
case OP_BRAZERO:
@@ -3171,6 +3177,9 @@ for(;;)
code += PRIV(OP_lengths)[c];
continue;
+
+ default:
+ break;
}
/* Check for a supported opcode, and load its properties. */
@@ -3409,8 +3418,7 @@ for(;;)
rightop >= FIRST_AUTOTAB_OP && rightop <= LAST_AUTOTAB_RIGHT_OP &&
autoposstab[leftop - FIRST_AUTOTAB_OP][rightop - FIRST_AUTOTAB_OP];
- if (!accepted)
- return FALSE;
+ if (!accepted) return FALSE;
if (list[1] == 0) return TRUE;
/* Might be an empty repeat. */
@@ -4683,7 +4691,8 @@ for (;; ptr++)
previous = NULL;
if ((options & PCRE_MULTILINE) != 0)
{
- if (firstcharflags == REQ_UNSET) firstcharflags = REQ_NONE;
+ if (firstcharflags == REQ_UNSET)
+ zerofirstcharflags = firstcharflags = REQ_NONE;
*code++ = OP_CIRCM;
}
else *code++ = OP_CIRC;
@@ -4863,7 +4872,7 @@ for (;; ptr++)
if (lengthptr != NULL && class_uchardata > class_uchardata_base)
{
xclass = TRUE;
- *lengthptr += class_uchardata - class_uchardata_base;
+ *lengthptr += (int)(class_uchardata - class_uchardata_base);
class_uchardata = class_uchardata_base;
}
#endif
@@ -5313,7 +5322,7 @@ for (;; ptr++)
whatever repeat count may follow. In the case of reqchar, save the
previous value for reinstating. */
- if (class_one_char == 1 && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)
+ if (!inescq && class_one_char == 1 && ptr[1] == CHAR_RIGHT_SQUARE_BRACKET)
{
ptr++;
zeroreqchar = reqchar;
@@ -6008,8 +6017,8 @@ for (;; ptr++)
while (cd->hwm > cd->start_workspace + cd->workspace_size -
WORK_SIZE_SAFETY_MARGIN - (this_hwm - save_hwm))
{
- int save_offset = save_hwm - cd->start_workspace;
- int this_offset = this_hwm - cd->start_workspace;
+ size_t save_offset = save_hwm - cd->start_workspace;
+ size_t this_offset = this_hwm - cd->start_workspace;
*errorcodeptr = expand_workspace(cd);
if (*errorcodeptr != 0) goto FAILED;
save_hwm = (pcre_uchar *)cd->start_workspace + save_offset;
@@ -6090,8 +6099,8 @@ for (;; ptr++)
while (cd->hwm > cd->start_workspace + cd->workspace_size -
WORK_SIZE_SAFETY_MARGIN - (this_hwm - save_hwm))
{
- int save_offset = save_hwm - cd->start_workspace;
- int this_offset = this_hwm - cd->start_workspace;
+ size_t save_offset = save_hwm - cd->start_workspace;
+ size_t this_offset = this_hwm - cd->start_workspace;
*errorcodeptr = expand_workspace(cd);
if (*errorcodeptr != 0) goto FAILED;
save_hwm = (pcre_uchar *)cd->start_workspace + save_offset;
@@ -6689,7 +6698,8 @@ for (;; ptr++)
ptr++;
}
namelen = (int)(ptr - name);
- if (lengthptr != NULL) *lengthptr += IMM2_SIZE;
+ if (lengthptr != NULL && (options & PCRE_DUPNAMES) != 0)
+ *lengthptr += IMM2_SIZE;
}
/* Check the terminator */
@@ -6750,9 +6760,11 @@ for (;; ptr++)
for (; i < cd->names_found; i++)
{
slot += cd->name_entry_size;
- if (STRNCMP_UC_UC(name, slot+IMM2_SIZE, namelen) != 0) break;
+ if (STRNCMP_UC_UC(name, slot+IMM2_SIZE, namelen) != 0 ||
+ (slot+IMM2_SIZE)[namelen] != 0) break;
count++;
}
+
if (count > 1)
{
PUT2(code, 2+LINK_SIZE, offset);
@@ -7101,6 +7113,12 @@ for (;; ptr++)
/* Count named back references. */
if (!is_recurse) cd->namedrefcount++;
+
+ /* If duplicate names are permitted, we have to allow for a named
+ reference to a duplicated name (this cannot be determined until the
+ second pass). This needs an extra 16-bit data item. */
+
+ if ((options & PCRE_DUPNAMES) != 0) *lengthptr += IMM2_SIZE;
}
/* In the real compile, search the name table. We check the name
@@ -7147,6 +7165,8 @@ for (;; ptr++)
for (i++; i < cd->names_found; i++)
{
if (STRCMP_UC_UC(slot + IMM2_SIZE, cslot + IMM2_SIZE) != 0) break;
+
+
count++;
cslot += cd->name_entry_size;
}
@@ -8244,12 +8264,16 @@ for (;;)
/* If it was a capturing subpattern, check to see if it contained any
recursive back references. If so, we must wrap it in atomic brackets.
- In any event, remove the block from the chain. */
+ Because we are moving code along, we must ensure that any pending recursive
+ references are updated. In any event, remove the block from the chain. */
if (capnumber > 0)
{
if (cd->open_caps->flag)
{
+ *code = OP_END;
+ adjust_recurse(start_bracket, 1 + LINK_SIZE,
+ (options & PCRE_UTF8) != 0, cd, cd->hwm);
memmove(start_bracket + 1 + LINK_SIZE, start_bracket,
IN_UCHARS(code - start_bracket));
*start_bracket = OP_ONCE;
@@ -9254,11 +9278,18 @@ subpattern. */
if (errorcode == 0 && re->top_backref > re->top_bracket) errorcode = ERR15;
-/* Unless disabled, check whether single character iterators can be
-auto-possessified. The function overwrites the appropriate opcode values. */
+/* Unless disabled, check whether any single character iterators can be
+auto-possessified. The function overwrites the appropriate opcode values, so
+the type of the pointer must be cast. NOTE: the intermediate variable "temp" is
+used in this code because at least one compiler gives a warning about loss of
+"const" attribute if the cast (pcre_uchar *)codestart is used directly in the
+function call. */
if ((options & PCRE_NO_AUTO_POSSESS) == 0)
- auto_possessify((pcre_uchar *)codestart, utf, cd);
+ {
+ pcre_uchar *temp = (pcre_uchar *)codestart;
+ auto_possessify(temp, utf, cd);
+ }
/* If there were any lookbehind assertions that contained OP_RECURSE
(recursions or subroutine calls), a flag is set for them to be checked here,
diff --git a/pcre/pcre_dfa_exec.c b/pcre/pcre_dfa_exec.c
index fb0c7e805dc..87f4aef9ab1 100644
--- a/pcre/pcre_dfa_exec.c
+++ b/pcre/pcre_dfa_exec.c
@@ -3242,7 +3242,7 @@ md->callout_data = NULL;
if (extra_data != NULL)
{
- unsigned int flags = extra_data->flags;
+ unsigned long int flags = extra_data->flags;
if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
study = (const pcre_study_data *)extra_data->study_data;
if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) return PCRE_ERROR_DFA_UMLIMIT;
diff --git a/pcre/pcre_exec.c b/pcre/pcre_exec.c
index 5dec99234a9..654eb9e2762 100644
--- a/pcre/pcre_exec.c
+++ b/pcre/pcre_exec.c
@@ -1167,11 +1167,16 @@ for (;;)
if (rrc == MATCH_KETRPOS)
{
offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
ecode = md->start_code + code_offset;
save_capture_last = md->capture_last;
matched_once = TRUE;
mstart = md->start_match_ptr; /* In case \K changed it */
+ if (eptr == md->end_match_ptr) /* Matched an empty string */
+ {
+ do ecode += GET(ecode, 1); while (*ecode == OP_ALT);
+ break;
+ }
+ eptr = md->end_match_ptr;
continue;
}
@@ -1241,10 +1246,15 @@ for (;;)
if (rrc == MATCH_KETRPOS)
{
offset_top = md->end_offset_top;
- eptr = md->end_match_ptr;
ecode = md->start_code + code_offset;
matched_once = TRUE;
mstart = md->start_match_ptr; /* In case \K reset it */
+ if (eptr == md->end_match_ptr) /* Matched an empty string */
+ {
+ do ecode += GET(ecode, 1); while (*ecode == OP_ALT);
+ break;
+ }
+ eptr = md->end_match_ptr;
continue;
}
@@ -1979,6 +1989,19 @@ for (;;)
}
}
+ /* OP_KETRPOS is a possessive repeating ket. Remember the current position,
+ and return the MATCH_KETRPOS. This makes it possible to do the repeats one
+ at a time from the outer level, thus saving stack. This must precede the
+ empty string test - in this case that test is done at the outer level. */
+
+ if (*ecode == OP_KETRPOS)
+ {
+ md->start_match_ptr = mstart; /* In case \K reset it */
+ md->end_match_ptr = eptr;
+ md->end_offset_top = offset_top;
+ RRETURN(MATCH_KETRPOS);
+ }
+
/* For an ordinary non-repeating ket, just continue at this level. This
also happens for a repeating ket if no characters were matched in the
group. This is the forcible breaking of infinite loops as implemented in
@@ -2001,18 +2024,6 @@ for (;;)
break;
}
- /* OP_KETRPOS is a possessive repeating ket. Remember the current position,
- and return the MATCH_KETRPOS. This makes it possible to do the repeats one
- at a time from the outer level, thus saving stack. */
-
- if (*ecode == OP_KETRPOS)
- {
- md->start_match_ptr = mstart; /* In case \K reset it */
- md->end_match_ptr = eptr;
- md->end_offset_top = offset_top;
- RRETURN(MATCH_KETRPOS);
- }
-
/* The normal repeating kets try the rest of the pattern or restart from
the preceding bracket, in the appropriate order. In the second case, we can
use tail recursion to avoid using another stack frame, unless we have an
@@ -5681,54 +5692,25 @@ for (;;)
switch(ctype)
{
case OP_ANY:
- if (max < INT_MAX)
+ for (i = min; i < max; i++)
{
- for (i = min; i < max; i++)
+ if (eptr >= md->end_subject)
{
- if (eptr >= md->end_subject)
- {
- SCHECK_PARTIAL();
- break;
- }
- if (IS_NEWLINE(eptr)) break;
- if (md->partial != 0 && /* Take care with CRLF partial */
- eptr + 1 >= md->end_subject &&
- NLBLOCK->nltype == NLTYPE_FIXED &&
- NLBLOCK->nllen == 2 &&
- UCHAR21(eptr) == NLBLOCK->nl[0])
- {
- md->hitend = TRUE;
- if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
- }
- eptr++;
- ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
+ SCHECK_PARTIAL();
+ break;
}
- }
-
- /* Handle unlimited UTF-8 repeat */
-
- else
- {
- for (i = min; i < max; i++)
+ if (IS_NEWLINE(eptr)) break;
+ if (md->partial != 0 && /* Take care with CRLF partial */
+ eptr + 1 >= md->end_subject &&
+ NLBLOCK->nltype == NLTYPE_FIXED &&
+ NLBLOCK->nllen == 2 &&
+ UCHAR21(eptr) == NLBLOCK->nl[0])
{
- if (eptr >= md->end_subject)
- {
- SCHECK_PARTIAL();
- break;
- }
- if (IS_NEWLINE(eptr)) break;
- if (md->partial != 0 && /* Take care with CRLF partial */
- eptr + 1 >= md->end_subject &&
- NLBLOCK->nltype == NLTYPE_FIXED &&
- NLBLOCK->nllen == 2 &&
- UCHAR21(eptr) == NLBLOCK->nl[0])
- {
- md->hitend = TRUE;
- if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
- }
- eptr++;
- ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
+ md->hitend = TRUE;
+ if (md->partial > 1) RRETURN(PCRE_ERROR_PARTIAL);
}
+ eptr++;
+ ACROSSCHAR(eptr < md->end_subject, *eptr, eptr++);
}
break;
@@ -6519,7 +6501,7 @@ tables = re->tables;
if (extra_data != NULL)
{
- register unsigned int flags = extra_data->flags;
+ unsigned long int flags = extra_data->flags;
if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
study = (const pcre_study_data *)extra_data->study_data;
if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0)
diff --git a/pcre/pcre_internal.h b/pcre/pcre_internal.h
index 6e915a0e453..02d3ab17c5d 100644
--- a/pcre/pcre_internal.h
+++ b/pcre/pcre_internal.h
@@ -2281,7 +2281,7 @@ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9,
ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59,
ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69,
ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79,
- ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERRCOUNT };
+ ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERRCOUNT };
/* JIT compiling modes. The function list is indexed by them. */
diff --git a/pcre/pcre_jit_compile.c b/pcre/pcre_jit_compile.c
index e67071ef791..256e3a45b13 100644
--- a/pcre/pcre_jit_compile.c
+++ b/pcre/pcre_jit_compile.c
@@ -200,7 +200,7 @@ typedef struct stub_list {
typedef struct label_addr_list {
struct sljit_label *label;
- sljit_uw *addr;
+ sljit_uw *update_addr;
struct label_addr_list *next;
} label_addr_list;
@@ -475,16 +475,16 @@ typedef struct compare_context {
/* Used for accessing the elements of the stack. */
#define STACK(i) ((-(i) - 1) * (int)sizeof(sljit_sw))
-#define TMP1 SLJIT_SCRATCH_REG1
-#define TMP2 SLJIT_SCRATCH_REG3
-#define TMP3 SLJIT_TEMPORARY_EREG2
-#define STR_PTR SLJIT_SAVED_REG1
-#define STR_END SLJIT_SAVED_REG2
-#define STACK_TOP SLJIT_SCRATCH_REG2
-#define STACK_LIMIT SLJIT_SAVED_REG3
-#define ARGUMENTS SLJIT_SAVED_EREG1
-#define COUNT_MATCH SLJIT_SAVED_EREG2
-#define RETURN_ADDR SLJIT_TEMPORARY_EREG1
+#define TMP1 SLJIT_R0
+#define TMP2 SLJIT_R2
+#define TMP3 SLJIT_R3
+#define STR_PTR SLJIT_S0
+#define STR_END SLJIT_S1
+#define STACK_TOP SLJIT_R1
+#define STACK_LIMIT SLJIT_S2
+#define COUNT_MATCH SLJIT_S3
+#define ARGUMENTS SLJIT_S4
+#define RETURN_ADDR SLJIT_R4
/* Local space layout. */
/* These two locals can be used by the current opcode. */
@@ -1441,7 +1441,7 @@ while (cc < ccend)
SLJIT_ASSERT(common->has_set_som);
if (!setsom_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0));
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1457,7 +1457,7 @@ while (cc < ccend)
SLJIT_ASSERT(common->mark_ptr != 0);
if (!setmark_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr);
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1470,7 +1470,7 @@ while (cc < ccend)
case OP_RECURSE:
if (common->has_set_som && !setsom_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -OVECTOR(0));
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1479,7 +1479,7 @@ while (cc < ccend)
}
if (common->mark_ptr != 0 && !setmark_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->mark_ptr);
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1488,7 +1488,7 @@ while (cc < ccend)
}
if (common->capture_last_ptr != 0 && !capture_last_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr);
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1504,7 +1504,7 @@ while (cc < ccend)
case OP_SCBRAPOS:
if (common->capture_last_ptr != 0 && !capture_last_found)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, -common->capture_last_ptr);
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
@@ -1514,8 +1514,8 @@ while (cc < ccend)
offset = (GET2(cc, 1 + LINK_SIZE)) << 1;
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, SLJIT_IMM, OVECTOR(offset));
stackpos += (int)sizeof(sljit_sw);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP1, 0);
stackpos += (int)sizeof(sljit_sw);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackpos, TMP2, 0);
@@ -1895,7 +1895,7 @@ do
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP1, 0);
stackptr += sizeof(sljit_sw);
}
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count]);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), srcw[count]);
tmp1empty = FALSE;
tmp1next = FALSE;
}
@@ -1906,7 +1906,7 @@ do
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), stackptr, TMP2, 0);
stackptr += sizeof(sljit_sw);
}
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count]);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), srcw[count]);
tmp2empty = FALSE;
tmp1next = TRUE;
}
@@ -1916,7 +1916,7 @@ do
if (tmp1next)
{
SLJIT_ASSERT(!tmp1empty);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count], TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), srcw[count], TMP1, 0);
tmp1empty = stackptr >= stacktop;
if (!tmp1empty)
{
@@ -1928,7 +1928,7 @@ do
else
{
SLJIT_ASSERT(!tmp2empty);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), srcw[count], TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), srcw[count], TMP2, 0);
tmp2empty = stackptr >= stacktop;
if (!tmp2empty)
{
@@ -2070,7 +2070,7 @@ while (list_item)
common->stubs = NULL;
}
-static void add_label_addr(compiler_common *common)
+static void add_label_addr(compiler_common *common, sljit_uw *update_addr)
{
DEFINE_COMPILER;
label_addr_list *label_addr;
@@ -2079,10 +2079,9 @@ label_addr = sljit_alloc_memory(compiler, sizeof(label_addr_list));
if (label_addr == NULL)
return;
label_addr->label = LABEL();
-label_addr->addr = common->read_only_data_ptr;
+label_addr->update_addr = update_addr;
label_addr->next = common->label_addrs;
common->label_addrs = label_addr;
-common->read_only_data_ptr++;
}
static SLJIT_INLINE void count_match(compiler_common *common)
@@ -2103,8 +2102,8 @@ OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, size * sizeof(sljit_sw));
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, 12345);
OP1(SLJIT_MOV, TMP3, 0, TMP1, 0);
OP1(SLJIT_MOV, RETURN_ADDR, 0, TMP1, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, TMP1, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, TMP1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, TMP1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP1, 0);
#endif
add_stub(common, CMP(SLJIT_C_GREATER, STACK_TOP, 0, STACK_LIMIT, 0));
}
@@ -2124,19 +2123,19 @@ int i;
/* At this point we can freely use all temporary registers. */
SLJIT_ASSERT(length > 1);
/* TMP1 returns with begin - 1. */
-OP2(SLJIT_SUB, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), SLJIT_OFFSETOF(jit_arguments, begin), SLJIT_IMM, IN_UCHARS(1));
+OP2(SLJIT_SUB, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_S0), SLJIT_OFFSETOF(jit_arguments, begin), SLJIT_IMM, IN_UCHARS(1));
if (length < 8)
{
for (i = 1; i < length; i++)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(i), SLJIT_SCRATCH_REG1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(i), SLJIT_R0, 0);
}
else
{
- GET_LOCAL_BASE(SLJIT_SCRATCH_REG2, 0, OVECTOR_START);
- OP1(SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, length - 1);
+ GET_LOCAL_BASE(SLJIT_R1, 0, OVECTOR_START);
+ OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_IMM, length - 1);
loop = LABEL();
- OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(sljit_sw), SLJIT_SCRATCH_REG1, 0);
- OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 1);
+ OP1(SLJIT_MOVU, SLJIT_MEM1(SLJIT_R1), sizeof(sljit_sw), SLJIT_R0, 0);
+ OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, loop);
}
}
@@ -2150,11 +2149,11 @@ int i;
SLJIT_ASSERT(length > 1);
/* OVECTOR(1) contains the "string begin - 1" constant. */
if (length > 2)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));
if (length < 8)
{
for (i = 2; i < length; i++)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(i), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(i), TMP1, 0);
}
else
{
@@ -2168,11 +2167,11 @@ else
OP1(SLJIT_MOV, STACK_TOP, 0, ARGUMENTS, 0);
if (common->mark_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, SLJIT_IMM, 0);
if (common->control_head_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(jit_arguments, stack));
-OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_ptr);
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(STACK_TOP), SLJIT_OFFSETOF(struct sljit_stack, base));
}
@@ -2206,44 +2205,44 @@ struct sljit_label *loop;
struct sljit_jump *early_quit;
/* At this point we can freely use all registers. */
-OP1(SLJIT_MOV, SLJIT_SAVED_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1), STR_PTR, 0);
+OP1(SLJIT_MOV, SLJIT_S2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(1), STR_PTR, 0);
-OP1(SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, ARGUMENTS, 0);
+OP1(SLJIT_MOV, SLJIT_R0, 0, ARGUMENTS, 0);
if (common->mark_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
-OP1(SLJIT_MOV_SI, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), SLJIT_OFFSETOF(jit_arguments, offset_count));
+ OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);
+OP1(SLJIT_MOV_SI, SLJIT_R1, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, offset_count));
if (common->mark_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG1), SLJIT_OFFSETOF(jit_arguments, mark_ptr), SLJIT_SCRATCH_REG3, 0);
-OP2(SLJIT_SUB, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), SLJIT_OFFSETOF(jit_arguments, offsets), SLJIT_IMM, sizeof(int));
-OP1(SLJIT_MOV, SLJIT_SCRATCH_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), SLJIT_OFFSETOF(jit_arguments, begin));
-GET_LOCAL_BASE(SLJIT_SAVED_REG1, 0, OVECTOR_START);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, mark_ptr), SLJIT_R2, 0);
+OP2(SLJIT_SUB, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, offsets), SLJIT_IMM, sizeof(int));
+OP1(SLJIT_MOV, SLJIT_R0, 0, SLJIT_MEM1(SLJIT_R0), SLJIT_OFFSETOF(jit_arguments, begin));
+GET_LOCAL_BASE(SLJIT_S0, 0, OVECTOR_START);
/* Unlikely, but possible */
-early_quit = CMP(SLJIT_C_EQUAL, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 0);
+early_quit = CMP(SLJIT_C_EQUAL, SLJIT_R1, 0, SLJIT_IMM, 0);
loop = LABEL();
-OP2(SLJIT_SUB, SLJIT_SAVED_REG2, 0, SLJIT_MEM1(SLJIT_SAVED_REG1), 0, SLJIT_SCRATCH_REG1, 0);
-OP2(SLJIT_ADD, SLJIT_SAVED_REG1, 0, SLJIT_SAVED_REG1, 0, SLJIT_IMM, sizeof(sljit_sw));
+OP2(SLJIT_SUB, SLJIT_S1, 0, SLJIT_MEM1(SLJIT_S0), 0, SLJIT_R0, 0);
+OP2(SLJIT_ADD, SLJIT_S0, 0, SLJIT_S0, 0, SLJIT_IMM, sizeof(sljit_sw));
/* Copy the integer value to the output buffer */
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
-OP2(SLJIT_ASHR, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, UCHAR_SHIFT);
+OP2(SLJIT_ASHR, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_IMM, UCHAR_SHIFT);
#endif
-OP1(SLJIT_MOVU_SI, SLJIT_MEM1(SLJIT_SCRATCH_REG3), sizeof(int), SLJIT_SAVED_REG2, 0);
-OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
+OP1(SLJIT_MOVU_SI, SLJIT_MEM1(SLJIT_R2), sizeof(int), SLJIT_S1, 0);
+OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, loop);
JUMPHERE(early_quit);
/* Calculate the return value, which is the maximum ovector value. */
if (topbracket > 1)
{
- GET_LOCAL_BASE(SLJIT_SCRATCH_REG1, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));
- OP1(SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, topbracket + 1);
+ GET_LOCAL_BASE(SLJIT_R0, 0, OVECTOR_START + topbracket * 2 * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_IMM, topbracket + 1);
- /* OVECTOR(0) is never equal to SLJIT_SAVED_REG3. */
+ /* OVECTOR(0) is never equal to SLJIT_S2. */
loop = LABEL();
- OP1(SLJIT_MOVU, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG1), -(2 * (sljit_sw)sizeof(sljit_sw)));
- OP2(SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, SLJIT_SCRATCH_REG2, 0, SLJIT_IMM, 1);
- CMPTO(SLJIT_C_EQUAL, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG3, 0, loop);
- OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_SCRATCH_REG2, 0);
+ OP1(SLJIT_MOVU, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R0), -(2 * (sljit_sw)sizeof(sljit_sw)));
+ OP2(SLJIT_SUB, SLJIT_R1, 0, SLJIT_R1, 0, SLJIT_IMM, 1);
+ CMPTO(SLJIT_C_EQUAL, SLJIT_R2, 0, SLJIT_S2, 0, loop);
+ OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_R1, 0);
}
else
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1);
@@ -2254,39 +2253,39 @@ static SLJIT_INLINE void return_with_partial_match(compiler_common *common, stru
DEFINE_COMPILER;
struct sljit_jump *jump;
-SLJIT_COMPILE_ASSERT(STR_END == SLJIT_SAVED_REG2, str_end_must_be_saved_reg2);
+SLJIT_COMPILE_ASSERT(STR_END == SLJIT_S1, str_end_must_be_saved_reg2);
SLJIT_ASSERT(common->start_used_ptr != 0 && common->start_ptr != 0
&& (common->mode == JIT_PARTIAL_SOFT_COMPILE ? common->hit_start != 0 : common->hit_start == 0));
-OP1(SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, ARGUMENTS, 0);
+OP1(SLJIT_MOV, SLJIT_R1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE_ERROR_PARTIAL);
-OP1(SLJIT_MOV_SI, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG2), SLJIT_OFFSETOF(jit_arguments, real_offset_count));
-CMPTO(SLJIT_C_SIG_LESS, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 2, quit);
+OP1(SLJIT_MOV_SI, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(jit_arguments, real_offset_count));
+CMPTO(SLJIT_C_SIG_LESS, SLJIT_R2, 0, SLJIT_IMM, 2, quit);
/* Store match begin and end. */
-OP1(SLJIT_MOV, SLJIT_SAVED_REG1, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG2), SLJIT_OFFSETOF(jit_arguments, begin));
-OP1(SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, SLJIT_MEM1(SLJIT_SCRATCH_REG2), SLJIT_OFFSETOF(jit_arguments, offsets));
+OP1(SLJIT_MOV, SLJIT_S0, 0, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(jit_arguments, begin));
+OP1(SLJIT_MOV, SLJIT_R1, 0, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(jit_arguments, offsets));
-jump = CMP(SLJIT_C_SIG_LESS, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, 3);
-OP2(SLJIT_SUB, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mode == JIT_PARTIAL_HARD_COMPILE ? common->start_ptr : (common->hit_start + (int)sizeof(sljit_sw)), SLJIT_SAVED_REG1, 0);
+jump = CMP(SLJIT_C_SIG_LESS, SLJIT_R2, 0, SLJIT_IMM, 3);
+OP2(SLJIT_SUB, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), common->mode == JIT_PARTIAL_HARD_COMPILE ? common->start_ptr : (common->hit_start + (int)sizeof(sljit_sw)), SLJIT_S0, 0);
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
-OP2(SLJIT_ASHR, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, UCHAR_SHIFT);
+OP2(SLJIT_ASHR, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, UCHAR_SHIFT);
#endif
-OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 2 * sizeof(int), SLJIT_SCRATCH_REG3, 0);
+OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_R1), 2 * sizeof(int), SLJIT_R2, 0);
JUMPHERE(jump);
-OP1(SLJIT_MOV, SLJIT_SCRATCH_REG3, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mode == JIT_PARTIAL_HARD_COMPILE ? common->start_used_ptr : common->hit_start);
-OP2(SLJIT_SUB, SLJIT_SAVED_REG2, 0, STR_END, 0, SLJIT_SAVED_REG1, 0);
+OP1(SLJIT_MOV, SLJIT_R2, 0, SLJIT_MEM1(SLJIT_SP), common->mode == JIT_PARTIAL_HARD_COMPILE ? common->start_used_ptr : common->hit_start);
+OP2(SLJIT_SUB, SLJIT_S1, 0, STR_END, 0, SLJIT_S0, 0);
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
-OP2(SLJIT_ASHR, SLJIT_SAVED_REG2, 0, SLJIT_SAVED_REG2, 0, SLJIT_IMM, UCHAR_SHIFT);
+OP2(SLJIT_ASHR, SLJIT_S1, 0, SLJIT_S1, 0, SLJIT_IMM, UCHAR_SHIFT);
#endif
-OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_SCRATCH_REG2), sizeof(int), SLJIT_SAVED_REG2, 0);
+OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_R1), sizeof(int), SLJIT_S1, 0);
-OP2(SLJIT_SUB, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_SAVED_REG1, 0);
+OP2(SLJIT_SUB, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_S0, 0);
#if defined COMPILE_PCRE16 || defined COMPILE_PCRE32
-OP2(SLJIT_ASHR, SLJIT_SCRATCH_REG3, 0, SLJIT_SCRATCH_REG3, 0, SLJIT_IMM, UCHAR_SHIFT);
+OP2(SLJIT_ASHR, SLJIT_R2, 0, SLJIT_R2, 0, SLJIT_IMM, UCHAR_SHIFT);
#endif
-OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_SCRATCH_REG2), 0, SLJIT_SCRATCH_REG3, 0);
+OP1(SLJIT_MOV_SI, SLJIT_MEM1(SLJIT_R1), 0, SLJIT_R2, 0);
JUMPTO(SLJIT_JUMP, quit);
}
@@ -2300,17 +2299,17 @@ struct sljit_jump *jump;
if (common->mode == JIT_PARTIAL_SOFT_COMPILE)
{
/* The value of -1 must be kept for start_used_ptr! */
- OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, SLJIT_IMM, 1);
+ OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, 1);
/* Jumps if start_used_ptr < STR_PTR, or start_used_ptr == -1. Although overwriting
is not necessary if start_used_ptr == STR_PTR, it does not hurt as well. */
jump = CMP(SLJIT_C_LESS_EQUAL, TMP1, 0, STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
JUMPHERE(jump);
}
else if (common->mode == JIT_PARTIAL_HARD_COMPILE)
{
- jump = CMP(SLJIT_C_LESS_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
+ jump = CMP(SLJIT_C_LESS_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
JUMPHERE(jump);
}
}
@@ -2446,12 +2445,12 @@ if (common->mode == JIT_COMPILE)
return;
if (!force)
- jump = CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
+ jump = CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
else if (common->mode == JIT_PARTIAL_SOFT_COMPILE)
- jump = CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, SLJIT_IMM, -1);
+ jump = CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, -1);
if (common->mode == JIT_PARTIAL_SOFT_COMPILE)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);
else
{
if (common->partialmatchlabel != NULL)
@@ -2479,13 +2478,13 @@ if (common->mode == JIT_COMPILE)
jump = CMP(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0);
if (common->mode == JIT_PARTIAL_SOFT_COMPILE)
{
- add_jump(compiler, end_reached, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, 0);
+ add_jump(compiler, end_reached, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);
add_jump(compiler, end_reached, JUMP(SLJIT_JUMP));
}
else
{
- add_jump(compiler, end_reached, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0));
+ add_jump(compiler, end_reached, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));
if (common->partialmatchlabel != NULL)
JUMPTO(SLJIT_JUMP, common->partialmatchlabel);
else
@@ -2507,10 +2506,10 @@ if (common->mode == JIT_COMPILE)
/* Partial matching mode. */
jump = CMP(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0);
-add_jump(compiler, backtracks, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0));
+add_jump(compiler, backtracks, CMP(SLJIT_C_GREATER_EQUAL, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0));
if (common->mode == JIT_PARTIAL_SOFT_COMPILE)
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);
add_jump(compiler, backtracks, JUMP(SLJIT_JUMP));
}
else
@@ -3066,19 +3065,19 @@ if (firstline)
CMPTO(SLJIT_C_NOT_EQUAL, TMP1, 0, SLJIT_IMM, (common->newline >> 8) & 0xff, mainloop);
CMPTO(SLJIT_C_NOT_EQUAL, TMP2, 0, SLJIT_IMM, common->newline & 0xff, mainloop);
JUMPHERE(end);
- OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+ OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), common->first_line_end, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
}
else
{
end = CMP(SLJIT_C_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
mainloop = LABEL();
/* Continual stores does not cause data dependency. */
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->first_line_end, STR_PTR, 0);
read_char_range(common, common->nlmin, common->nlmax, TRUE);
check_newlinechar(common, common->nltype, &newline, TRUE);
CMPTO(SLJIT_C_LESS, STR_PTR, 0, STR_END, 0, mainloop);
JUMPHERE(end);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->first_line_end, STR_PTR, 0);
set_jumps(newline, LABEL());
}
@@ -3681,7 +3680,7 @@ max -= 1;
if (firstline)
{
SLJIT_ASSERT(common->first_line_end != 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
OP2(SLJIT_SUB, STR_END, 0, STR_END, 0, SLJIT_IMM, IN_UCHARS(max));
quit = CMP(SLJIT_C_LESS_EQUAL, STR_END, 0, TMP1, 0);
@@ -3752,7 +3751,7 @@ JUMPHERE(quit);
if (firstline)
{
if (range_right >= 0)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
if (range_right >= 0)
{
@@ -3781,7 +3780,7 @@ if (firstline)
{
SLJIT_ASSERT(common->first_line_end != 0);
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
- OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
}
start = LABEL();
@@ -3841,7 +3840,7 @@ if (firstline)
{
SLJIT_ASSERT(common->first_line_end != 0);
OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
- OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
}
if (common->nltype == NLTYPE_FIXED && common->newline > 255)
@@ -3931,7 +3930,7 @@ if (firstline)
{
SLJIT_ASSERT(common->first_line_end != 0);
OP1(SLJIT_MOV, RETURN_ADDR, 0, STR_END, 0);
- OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
}
start = LABEL();
@@ -4005,7 +4004,7 @@ struct sljit_jump *notfound;
pcre_uint32 oc, bit;
SLJIT_ASSERT(common->req_char_ptr != 0);
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->req_char_ptr);
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr);
OP2(SLJIT_ADD, TMP1, 0, STR_PTR, 0, SLJIT_IMM, REQ_BYTE_MAX);
toolong = CMP(SLJIT_C_LESS, TMP1, 0, STR_END, 0);
alreadyfound = CMP(SLJIT_C_LESS, STR_PTR, 0, TMP2, 0);
@@ -4050,7 +4049,7 @@ JUMPTO(SLJIT_JUMP, loop);
JUMPHERE(found);
if (foundoc)
JUMPHERE(foundoc);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->req_char_ptr, TMP1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr, TMP1, 0);
JUMPHERE(alreadyfound);
JUMPHERE(toolong);
return notfound;
@@ -4102,11 +4101,11 @@ struct sljit_jump *jump;
SLJIT_COMPILE_ASSERT(ctype_word == 0x10, ctype_word_must_be_16);
-sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
/* Get type of the previous char, and put it to LOCALS1. */
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, begin));
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, SLJIT_IMM, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, SLJIT_IMM, 0);
skipread = CMP(SLJIT_C_LESS_EQUAL, STR_PTR, 0, TMP1, 0);
skip_char_back(common);
check_start_used_ptr(common);
@@ -4126,7 +4125,7 @@ if (common->use_ucp)
OP2(SLJIT_SUB | SLJIT_SET_U, SLJIT_UNUSED, 0, TMP1, 0, SLJIT_IMM, ucp_No - ucp_Nd);
OP_FLAGS(SLJIT_OR, TMP2, 0, TMP2, 0, SLJIT_C_LESS_EQUAL);
JUMPHERE(jump);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP2, 0);
}
else
#endif
@@ -4142,7 +4141,7 @@ else
OP1(SLJIT_MOV_UB, TMP1, 0, SLJIT_MEM1(TMP1), common->ctypes);
OP2(SLJIT_LSHR, TMP1, 0, TMP1, 0, SLJIT_IMM, 4 /* ctype_word */);
OP2(SLJIT_AND, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP1, 0);
#ifndef COMPILE_PCRE8
JUMPHERE(jump);
#elif defined SUPPORT_UTF
@@ -4196,8 +4195,8 @@ else
}
set_jumps(skipread_list, LABEL());
-OP2(SLJIT_XOR | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1);
-sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+OP2(SLJIT_XOR | SLJIT_SET_E, SLJIT_UNUSED, 0, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
+sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
}
static BOOL check_class_ranges(compiler_common *common, const pcre_uint8 *bits, BOOL nclass, BOOL invert, jump_list **backtracks)
@@ -4455,7 +4454,7 @@ struct sljit_label *label;
sljit_emit_fast_enter(compiler, RETURN_ADDR, 0);
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP1(SLJIT_MOV, TMP3, 0, CHAR1, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, CHAR2, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, CHAR2, 0);
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
@@ -4469,7 +4468,7 @@ JUMPTO(SLJIT_C_NOT_ZERO, label);
JUMPHERE(jump);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
OP1(SLJIT_MOV, CHAR1, 0, TMP3, 0);
-OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
}
@@ -4485,8 +4484,8 @@ sljit_emit_fast_enter(compiler, RETURN_ADDR, 0);
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
OP1(SLJIT_MOV, TMP3, 0, LCC_TABLE, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, CHAR1, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, CHAR2, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, CHAR1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, CHAR2, 0);
OP1(SLJIT_MOV, LCC_TABLE, 0, SLJIT_IMM, common->lcc);
OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(1));
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
@@ -4513,8 +4512,8 @@ JUMPTO(SLJIT_C_NOT_ZERO, label);
JUMPHERE(jump);
OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
OP1(SLJIT_MOV, LCC_TABLE, 0, TMP3, 0);
-OP1(SLJIT_MOV, CHAR1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
-OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1);
+OP1(SLJIT_MOV, CHAR1, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
+OP1(SLJIT_MOV, CHAR2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
sljit_emit_fast_return(compiler, RETURN_ADDR, 0);
}
@@ -5419,7 +5418,7 @@ switch(type)
add_jump(compiler, &common->getucd, JUMP(SLJIT_FAST_CALL));
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, (sljit_sw)PRIV(ucd_records) + SLJIT_OFFSETOF(ucd_record, gbprop));
/* Optimize register allocation: use a real register. */
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
OP1(SLJIT_MOV_UB, STACK_TOP, 0, SLJIT_MEM2(TMP1, TMP2), 3);
label = LABEL();
@@ -5439,7 +5438,7 @@ switch(type)
OP1(SLJIT_MOV, STR_PTR, 0, TMP3, 0);
JUMPHERE(jump[0]);
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
if (common->mode == JIT_PARTIAL_HARD_COMPILE)
{
@@ -5505,12 +5504,12 @@ switch(type)
}
else
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, STR_PTR, 0);
read_char_range(common, common->nlmin, common->nlmax, TRUE);
add_jump(compiler, backtracks, CMP(SLJIT_C_NOT_EQUAL, STR_PTR, 0, STR_END, 0));
add_jump(compiler, &common->anynewline, JUMP(SLJIT_FAST_CALL));
add_jump(compiler, backtracks, JUMP(SLJIT_C_ZERO));
- OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1);
+ OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
}
JUMPHERE(jump[2]);
JUMPHERE(jump[3]);
@@ -5914,21 +5913,21 @@ jump_list *found = NULL;
SLJIT_ASSERT(*cc == OP_DNREF || *cc == OP_DNREFI);
-OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));
count--;
while (count-- > 0)
{
offset = GET2(slot, 0) << 1;
GET_LOCAL_BASE(TMP2, 0, OVECTOR(offset));
- add_jump(compiler, &found, CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0));
+ add_jump(compiler, &found, CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0));
slot += common->name_entry_size;
}
offset = GET2(slot, 0) << 1;
GET_LOCAL_BASE(TMP2, 0, OVECTOR(offset));
if (backtracks != NULL && !common->jscript_compat)
- add_jump(compiler, backtracks, CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0));
+ add_jump(compiler, backtracks, CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0));
set_jumps(found, LABEL());
}
@@ -5945,10 +5944,10 @@ struct sljit_jump *nopartial;
if (ref)
{
offset = GET2(cc, 1) << 1;
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
/* OVECTOR(1) contains the "string begin - 1" constant. */
if (withchecks && !common->jscript_compat)
- add_jump(compiler, backtracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1)));
+ add_jump(compiler, backtracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
}
else
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);
@@ -5956,9 +5955,9 @@ else
#if defined SUPPORT_UTF && defined SUPPORT_UCP
if (common->utf && *cc == OP_REFI)
{
- SLJIT_ASSERT(TMP1 == SLJIT_SCRATCH_REG1 && STACK_TOP == SLJIT_SCRATCH_REG2 && TMP2 == SLJIT_SCRATCH_REG3);
+ SLJIT_ASSERT(TMP1 == SLJIT_R0 && STACK_TOP == SLJIT_R1 && TMP2 == SLJIT_R2);
if (ref)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
else
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
@@ -5966,11 +5965,11 @@ if (common->utf && *cc == OP_REFI)
jump = CMP(SLJIT_C_EQUAL, TMP1, 0, TMP2, 0);
/* Needed to save important temporary registers. */
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, STACK_TOP, 0);
- OP1(SLJIT_MOV, SLJIT_SCRATCH_REG2, 0, ARGUMENTS, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SCRATCH_REG2), SLJIT_OFFSETOF(jit_arguments, uchar_ptr), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_R1, 0, ARGUMENTS, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_R1), SLJIT_OFFSETOF(jit_arguments, uchar_ptr), STR_PTR, 0);
sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_utf_caselesscmp));
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
if (common->mode == JIT_COMPILE)
add_jump(compiler, backtracks, CMP(SLJIT_C_LESS_EQUAL, SLJIT_RETURN_REG, 0, SLJIT_IMM, 1));
else
@@ -5987,7 +5986,7 @@ else
#endif /* SUPPORT_UTF && SUPPORT_UCP */
{
if (ref)
- OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), TMP1, 0);
+ OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0);
else
OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw), TMP1, 0);
@@ -6090,7 +6089,7 @@ if (!minimize)
{
allocate_stack(common, 2);
if (ref)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);
/* Temporary release of STR_PTR. */
@@ -6098,12 +6097,12 @@ if (!minimize)
/* Handles both invalid and empty cases. Since the minimum repeat,
is zero the invalid case is basically the same as an empty case. */
if (ref)
- zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
else
{
compile_dnref_search(common, ccbegin, NULL);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, TMP2, 0);
zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
}
/* Restore if not zero length. */
@@ -6113,35 +6112,35 @@ if (!minimize)
{
allocate_stack(common, 1);
if (ref)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
if (ref)
{
- add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1)));
- zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
+ zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
}
else
{
compile_dnref_search(common, ccbegin, &backtrack->topbacktracks);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, TMP2, 0);
zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw));
}
}
if (min > 1 || max > 1)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, SLJIT_IMM, 0);
label = LABEL();
if (!ref)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1);
compile_ref_matchingpath(common, ccbegin, &backtrack->topbacktracks, FALSE, FALSE);
if (min > 1 || max > 1)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0);
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, TMP1, 0);
if (min > 1)
CMPTO(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, min, label);
if (max > 1)
@@ -6171,7 +6170,7 @@ if (!minimize)
allocate_stack(common, ref ? 2 : 3);
if (ref)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
if (type != OP_CRMINSTAR)
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0);
@@ -6181,7 +6180,7 @@ if (min == 0)
/* Handles both invalid and empty cases. Since the minimum repeat,
is zero the invalid case is basically the same as an empty case. */
if (ref)
- zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
else
{
compile_dnref_search(common, ccbegin, NULL);
@@ -6197,8 +6196,8 @@ else
{
if (ref)
{
- add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1)));
- zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
+ zerolength = CMP(SLJIT_C_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
}
else
{
@@ -6283,15 +6282,15 @@ if (entry == NULL)
if (common->has_set_som && common->mark_ptr != 0)
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
allocate_stack(common, 2);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0);
}
else if (common->has_set_som || common->mark_ptr != 0)
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->has_set_som ? (int)(OVECTOR(0)) : common->mark_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->has_set_som ? (int)(OVECTOR(0)) : common->mark_ptr);
allocate_stack(common, 1);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
}
@@ -6365,14 +6364,14 @@ PUSH_BACKTRACK(sizeof(backtrack_common), cc, NULL);
allocate_stack(common, CALLOUT_ARG_SIZE / sizeof(sljit_sw));
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr);
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
SLJIT_ASSERT(common->capture_last_ptr != 0);
OP1(SLJIT_MOV_SI, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(callout_number), SLJIT_IMM, cc[1]);
OP1(SLJIT_MOV_SI, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(capture_last), TMP2, 0);
/* These pointer sized fields temporarly stores internal variables. */
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(offset_vector), STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(subject), TMP2, 0);
@@ -6383,12 +6382,12 @@ OP1(SLJIT_MOV_SI, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(next_item_length), S
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), CALLOUT_ARG_OFFSET(mark), (common->mark_ptr != 0) ? TMP2 : SLJIT_IMM, 0);
/* Needed to save important temporary registers. */
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, STACK_TOP, 0);
-OP2(SLJIT_SUB, SLJIT_SCRATCH_REG2, 0, STACK_TOP, 0, SLJIT_IMM, CALLOUT_ARG_SIZE);
-GET_LOCAL_BASE(SLJIT_SCRATCH_REG3, 0, OVECTOR_START);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
+OP2(SLJIT_SUB, SLJIT_R1, 0, STACK_TOP, 0, SLJIT_IMM, CALLOUT_ARG_SIZE);
+GET_LOCAL_BASE(SLJIT_R2, 0, OVECTOR_START);
sljit_emit_ijump(compiler, SLJIT_CALL3, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_callout));
OP1(SLJIT_MOV_SI, SLJIT_RETURN_REG, 0, SLJIT_RETURN_REG, 0);
-OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
free_stack(common, CALLOUT_ARG_SIZE / sizeof(sljit_sw));
/* Check return value. */
@@ -6462,14 +6461,14 @@ if (framesize < 0)
{
extrasize = needs_control_head ? 2 : 1;
if (framesize == no_frame)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);
allocate_stack(common, extrasize);
if (needs_control_head)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
if (needs_control_head)
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0);
}
}
@@ -6477,17 +6476,17 @@ else
{
extrasize = needs_control_head ? 3 : 2;
allocate_stack(common, framesize + extrasize);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP2(SLJIT_SUB, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);
if (needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
if (needs_control_head)
{
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), TMP1, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
}
else
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP1, 0);
@@ -6542,26 +6541,26 @@ while (1)
if (framesize < 0)
{
if (framesize == no_frame)
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
else
free_stack(common, extrasize);
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0);
}
else
{
if ((opcode != OP_ASSERT_NOT && opcode != OP_ASSERTBACK_NOT) || conditional)
{
/* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), 0);
}
else
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), (framesize + 1) * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), (framesize + 1) * sizeof(sljit_sw));
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
}
}
@@ -6579,7 +6578,7 @@ while (1)
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (framesize + extrasize - 1) * sizeof(sljit_sw));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);
}
OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0);
@@ -6587,7 +6586,7 @@ while (1)
else if (framesize >= 0)
{
/* For OP_BRA and OP_BRAMINZERO. */
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
}
}
add_jump(compiler, found, JUMP(SLJIT_JUMP));
@@ -6631,10 +6630,10 @@ if (common->positive_assert_quit != NULL)
set_jumps(common->positive_assert_quit, LABEL());
SLJIT_ASSERT(framesize != no_stack);
if (framesize < 0)
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, extrasize * sizeof(sljit_sw));
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, extrasize * sizeof(sljit_sw));
else
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + extrasize) * sizeof(sljit_sw));
}
@@ -6642,7 +6641,7 @@ if (common->positive_assert_quit != NULL)
}
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(1));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(1));
if (opcode == OP_ASSERT || opcode == OP_ASSERTBACK)
{
@@ -6673,7 +6672,7 @@ if (opcode == OP_ASSERT || opcode == OP_ASSERTBACK)
}
else
free_stack(common, framesize + extrasize);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);
}
jump = JUMP(SLJIT_JUMP);
if (bra != OP_BRAZERO)
@@ -6703,13 +6702,13 @@ if (opcode == OP_ASSERT || opcode == OP_ASSERTBACK)
if (bra == OP_BRA)
{
/* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 1) * sizeof(sljit_sw));
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), (extrasize - 2) * sizeof(sljit_sw));
}
else
{
/* We don't need to keep the STR_PTR, only the previous private_data_ptr. */
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_sw));
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + 2) * sizeof(sljit_sw));
if (extrasize == 2)
{
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
@@ -6735,9 +6734,9 @@ if (opcode == OP_ASSERT || opcode == OP_ASSERTBACK)
JUMPHERE(brajump);
if (framesize >= 0)
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), framesize * sizeof(sljit_sw));
}
set_jumps(backtrack->common.topbacktracks, LABEL());
}
@@ -6769,7 +6768,7 @@ else
}
else
free_stack(common, framesize + extrasize);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);
}
if (bra == OP_BRAZERO)
@@ -6810,7 +6809,7 @@ int stacksize;
if (framesize < 0)
{
if (framesize == no_frame)
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
else
{
stacksize = needs_control_head ? 1 : 0;
@@ -6828,13 +6827,13 @@ if (framesize < 0)
else if (ket == OP_KETRMIN)
{
/* Move the STR_PTR to the private_data_ptr. */
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), 0);
}
}
else
{
stacksize = (ket != OP_KET || has_alternatives) ? 2 : 1;
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, (framesize + stacksize) * sizeof(sljit_sw));
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, (framesize + stacksize) * sizeof(sljit_sw));
if (needs_control_head)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), 0);
@@ -6845,7 +6844,7 @@ else
}
}
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP1, 0);
}
static SLJIT_INLINE int match_capture_common(compiler_common *common, int stacksize, int offset, int private_data_ptr)
@@ -6854,20 +6853,20 @@ DEFINE_COMPILER;
if (common->capture_last_ptr != 0)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);
stacksize++;
}
if (common->optimized_cbracket[offset >> 1] == 0)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize + 1), TMP2, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
stacksize += 2;
}
return stacksize;
@@ -7066,12 +7065,12 @@ if (bra == OP_BRAMINZERO)
if (opcode != OP_ONCE || BACKTRACK_AS(bracket_backtrack)->u.framesize < 0)
{
/* When we come from outside, private_data_ptr contains the previous STR_PTR. */
- braminzero = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ braminzero = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
}
else
{
/* Except when the whole stack frame must be saved. */
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
braminzero = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (BACKTRACK_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw));
}
JUMPHERE(skip);
@@ -7087,7 +7086,7 @@ if (bra == OP_BRAMINZERO)
if (repeat_type != 0)
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, repeat_count);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, repeat_count);
if (repeat_type == OP_EXACT)
rmax_label = LABEL();
}
@@ -7108,7 +7107,7 @@ if (opcode == OP_ONCE)
stacksize = 0;
if (needs_control_head)
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
stacksize++;
}
@@ -7119,12 +7118,12 @@ if (opcode == OP_ONCE)
{
stacksize += 2;
if (!needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
}
else
{
if (BACKTRACK_AS(bracket_backtrack)->u.framesize == no_frame)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);
if (ket == OP_KETRMAX || has_alternatives)
stacksize++;
}
@@ -7142,10 +7141,10 @@ if (opcode == OP_ONCE)
if (ket == OP_KETRMIN)
{
if (needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);
if (BACKTRACK_AS(bracket_backtrack)->u.framesize == no_frame)
- OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, needs_control_head ? (2 * sizeof(sljit_sw)) : sizeof(sljit_sw));
+ OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, needs_control_head ? (2 * sizeof(sljit_sw)) : sizeof(sljit_sw));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize + 1), TMP2, 0);
}
else if (ket == OP_KETRMAX || has_alternatives)
@@ -7162,20 +7161,20 @@ if (opcode == OP_ONCE)
if (needs_control_head)
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP2(SLJIT_SUB, TMP2, 0, STACK_TOP, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));
stacksize = needs_control_head ? 1 : 0;
if (ket != OP_KET || has_alternatives)
{
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);
stacksize++;
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);
}
else
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP2, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(stacksize), TMP1, 0);
}
init_frame(common, ccbegin, NULL, BACKTRACK_AS(bracket_backtrack)->u.framesize + stacksize, stacksize + 1, FALSE);
@@ -7188,26 +7187,26 @@ else if (opcode == OP_CBRA || opcode == OP_SCBRA)
{
SLJIT_ASSERT(private_data_ptr == OVECTOR(offset));
allocate_stack(common, 2);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr + sizeof(sljit_sw));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr + sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);
}
else
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
allocate_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
}
}
else if (opcode == OP_SBRA || opcode == OP_SCOND)
{
/* Saving the previous value. */
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
allocate_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
}
else if (has_alternatives)
@@ -7224,7 +7223,7 @@ if (opcode == OP_COND || opcode == OP_SCOND)
{
SLJIT_ASSERT(has_alternatives);
add_jump(compiler, &(BACKTRACK_AS(bracket_backtrack)->u.condfailed),
- CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(GET2(matchingpath, 1) << 1), SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1)));
+ CMP(SLJIT_C_EQUAL, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(matchingpath, 1) << 1), SLJIT_MEM1(SLJIT_SP), OVECTOR(1)));
matchingpath += 1 + IMM2_SIZE;
}
else if (*matchingpath == OP_DNCREF)
@@ -7234,13 +7233,13 @@ if (opcode == OP_COND || opcode == OP_SCOND)
i = GET2(matchingpath, 1 + IMM2_SIZE);
slot = common->name_table + GET2(matchingpath, 1) * common->name_entry_size;
OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(1));
- OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1));
+ OP2(SLJIT_SUB | SLJIT_SET_E, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);
slot += common->name_entry_size;
i--;
while (i-- > 0)
{
- OP2(SLJIT_SUB, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);
+ OP2(SLJIT_SUB, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(GET2(slot, 0) << 1), TMP1, 0);
OP2(SLJIT_OR | SLJIT_SET_E, TMP2, 0, TMP2, 0, STR_PTR, 0);
slot += common->name_entry_size;
}
@@ -7328,7 +7327,7 @@ stacksize = 0;
if (repeat_type == OP_MINUPTO)
{
/* We need to preserve the counter. TMP2 will be used below. */
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);
stacksize++;
}
if (ket != OP_KET || bra != OP_BRA)
@@ -7378,7 +7377,7 @@ if (has_alternatives)
if (offset != 0 && common->optimized_cbracket[offset >> 1] != 0)
{
SLJIT_ASSERT(private_data_ptr == OVECTOR(offset + 0));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
}
if (ket == OP_KETRMAX)
@@ -7387,7 +7386,7 @@ if (ket == OP_KETRMAX)
{
if (has_alternatives)
BACKTRACK_AS(bracket_backtrack)->alternative_matchingpath = LABEL();
- OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
+ OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, rmax_label);
/* Drop STR_PTR for greedy plus quantifier. */
if (opcode != OP_ONCE)
@@ -7400,7 +7399,7 @@ if (ket == OP_KETRMAX)
/* Checking zero-length iteration. */
if (opcode != OP_ONCE)
{
- CMPTO(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STR_PTR, 0, rmax_label);
+ CMPTO(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STR_PTR, 0, rmax_label);
/* Drop STR_PTR for greedy plus quantifier. */
if (bra != OP_BRAZERO)
free_stack(common, 1);
@@ -7416,13 +7415,14 @@ if (ket == OP_KETRMAX)
if (repeat_type == OP_EXACT)
{
- OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
+ count_match(common);
+ OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, rmax_label);
}
else if (repeat_type == OP_UPTO)
{
/* We need to preserve the counter. */
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);
allocate_stack(common, 1);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
}
@@ -7442,7 +7442,7 @@ if (bra == OP_BRAMINZERO)
framesize is < 0, OP_ONCE will do the release itself. */
if (opcode == OP_ONCE && BACKTRACK_AS(bracket_backtrack)->u.framesize >= 0)
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
}
else if (ket == OP_KETRMIN && opcode != OP_ONCE)
@@ -7537,20 +7537,20 @@ if (framesize < 0)
BACKTRACK_AS(bracketpos_backtrack)->stacksize = stacksize;
allocate_stack(common, stacksize);
if (framesize == no_frame)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0);
stack = 0;
if (offset != 0)
{
stack = 2;
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset));
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP1, 0);
if (common->capture_last_ptr != 0)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), TMP2, 0);
if (needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
if (common->capture_last_ptr != 0)
{
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), TMP1, 0);
@@ -7560,7 +7560,7 @@ if (framesize < 0)
else
{
if (needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), STR_PTR, 0);
stack = 1;
}
@@ -7587,10 +7587,10 @@ else
BACKTRACK_AS(bracketpos_backtrack)->stacksize = stacksize;
allocate_stack(common, stacksize);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
if (needs_control_head)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
- OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, -STACK(stacksize - 1));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
+ OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), private_data_ptr, STACK_TOP, 0, SLJIT_IMM, -STACK(stacksize - 1));
stack = 0;
if (!zero)
@@ -7614,7 +7614,7 @@ else
}
if (offset != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);
loop = LABEL();
while (*cc != OP_KETRPOS)
@@ -7630,16 +7630,16 @@ while (*cc != OP_KETRPOS)
if (framesize < 0)
{
if (framesize == no_frame)
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
if (offset != 0)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);
if (common->capture_last_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
}
else
{
@@ -7658,17 +7658,17 @@ while (*cc != OP_KETRPOS)
{
if (offset != 0)
{
- OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw));
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr, STR_PTR, 0);
+ OP2(SLJIT_ADD, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_IMM, stacksize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), cbraprivptr, STR_PTR, 0);
if (common->capture_last_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, offset >> 1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
}
else
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP2(SLJIT_ADD, STACK_TOP, 0, TMP2, 0, SLJIT_IMM, stacksize * sizeof(sljit_sw));
if (opcode == OP_SBRAPOS)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw));
@@ -7688,7 +7688,7 @@ while (*cc != OP_KETRPOS)
}
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(stack));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_MEM1(STACK_TOP), STACK(stack));
JUMPTO(SLJIT_JUMP, loop);
flush_stubs(common);
@@ -7701,7 +7701,7 @@ while (*cc != OP_KETRPOS)
if (framesize < 0)
{
if (offset != 0)
- OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr);
+ OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);
else
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
}
@@ -7711,12 +7711,12 @@ while (*cc != OP_KETRPOS)
{
/* Last alternative. */
if (*cc == OP_KETRPOS)
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
- OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), cbraprivptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
+ OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), cbraprivptr);
}
else
{
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP2), (framesize + 1) * sizeof(sljit_sw));
}
}
@@ -7853,7 +7853,7 @@ jump_list *nomatch = NULL;
struct sljit_jump *jump = NULL;
struct sljit_label *label;
int private_data_ptr = PRIVATE_DATA(cc);
-int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_LOCALS_REG);
+int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_SP);
int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;
int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_sw);
int tmp_base, tmp_offset;
@@ -7896,7 +7896,7 @@ switch(type)
case OP_XCLASS:
case OP_NOTPROP:
case OP_PROP:
- tmp_base = SLJIT_MEM1(SLJIT_LOCALS_REG);
+ tmp_base = SLJIT_MEM1(SLJIT_SP);
tmp_offset = POSSESSIVE0;
break;
}
@@ -7923,19 +7923,19 @@ switch(opcode)
}
if (opcode == OP_UPTO || opcode == OP_CRRANGE)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, SLJIT_IMM, 0);
label = LABEL();
compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks);
if (opcode == OP_UPTO || opcode == OP_CRRANGE)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0);
OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1);
if (opcode == OP_CRRANGE && min > 0)
CMPTO(SLJIT_C_LESS, TMP1, 0, SLJIT_IMM, min, label);
if (opcode == OP_UPTO || (opcode == OP_CRRANGE && max > 0))
jump = CMP(SLJIT_C_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE0, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE0, TMP1, 0);
}
/* We cannot use TMP3 because of this allocate_stack. */
@@ -8026,7 +8026,7 @@ switch(opcode)
if (opcode == OP_POSPLUS)
compile_char1_matchingpath(common, type, cc, &backtrack->topbacktracks);
if (opcode == OP_POSUPTO)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_IMM, max);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_IMM, max);
OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0);
label = LABEL();
compile_char1_matchingpath(common, type, cc, &nomatch);
@@ -8035,7 +8035,7 @@ switch(opcode)
JUMPTO(SLJIT_JUMP, label);
else
{
- OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_IMM, 1);
+ OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, label);
}
set_jumps(nomatch, LABEL());
@@ -8061,7 +8061,7 @@ switch(opcode)
if (max != 0)
{
SLJIT_ASSERT(max - min > 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_IMM, max - min);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_IMM, max - min);
}
OP1(SLJIT_MOV, tmp_base, tmp_offset, STR_PTR, 0);
label = LABEL();
@@ -8071,7 +8071,7 @@ switch(opcode)
JUMPTO(SLJIT_JUMP, label);
else
{
- OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_MEM1(SLJIT_LOCALS_REG), POSSESSIVE1, SLJIT_IMM, 1);
+ OP2(SLJIT_SUB | SLJIT_SET_E, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_MEM1(SLJIT_SP), POSSESSIVE1, SLJIT_IMM, 1);
JUMPTO(SLJIT_C_NOT_ZERO, label);
}
set_jumps(nomatch, LABEL());
@@ -8111,9 +8111,9 @@ if (*cc == OP_ASSERT_ACCEPT || common->currententry != NULL || !common->might_be
}
if (common->accept_label == NULL)
- add_jump(compiler, &common->accept, CMP(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0)));
+ add_jump(compiler, &common->accept, CMP(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0)));
else
- CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), common->accept_label);
+ CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), common->accept_label);
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV_UB, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, notempty));
add_jump(compiler, &backtrack->topbacktracks, CMP(SLJIT_C_NOT_EQUAL, TMP2, 0, SLJIT_IMM, 0));
@@ -8142,11 +8142,11 @@ if (common->currententry != NULL)
return cc + 1 + IMM2_SIZE;
if (!optimized_cbracket)
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR_PRIV(offset));
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR_PRIV(offset));
offset <<= 1;
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
if (!optimized_cbracket)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
return cc + 1 + IMM2_SIZE;
}
@@ -8173,7 +8173,7 @@ if (opcode == OP_PRUNE_ARG || opcode == OP_THEN_ARG)
{
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)(cc + 2));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP2, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, mark_ptr), TMP2, 0);
}
@@ -8198,12 +8198,12 @@ BACKTRACK_AS(then_trap_backtrack)->framesize = get_framesize(common, cc, ccend,
size = BACKTRACK_AS(then_trap_backtrack)->framesize;
size = 3 + (size < 0 ? 0 : size);
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
allocate_stack(common, size);
if (size > 3)
- OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, STACK_TOP, 0, SLJIT_IMM, (size - 3) * sizeof(sljit_sw));
+ OP2(SLJIT_SUB, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0, SLJIT_IMM, (size - 3) * sizeof(sljit_sw));
else
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 1), SLJIT_IMM, BACKTRACK_AS(then_trap_backtrack)->start);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 2), SLJIT_IMM, type_then_trap);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(size - 3), TMP2, 0);
@@ -8270,9 +8270,9 @@ while (cc < ccend)
case OP_SET_SOM:
PUSH_BACKTRACK_NOVALUE(sizeof(backtrack_common), cc);
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
allocate_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), STR_PTR, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), TMP2, 0);
cc++;
break;
@@ -8460,17 +8460,17 @@ while (cc < ccend)
case OP_MARK:
PUSH_BACKTRACK_NOVALUE(sizeof(backtrack_common), cc);
SLJIT_ASSERT(common->mark_ptr != 0);
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), common->mark_ptr);
allocate_stack(common, common->has_skip_arg ? 5 : 1);
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(common->has_skip_arg ? 4 : 0), TMP2, 0);
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, (sljit_sw)(cc + 2));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP2, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, mark_ptr), TMP2, 0);
if (common->has_skip_arg)
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, STACK_TOP, 0);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, type_mark);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(2), SLJIT_IMM, (sljit_sw)(cc + 2));
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(3), STR_PTR, 0);
@@ -8548,7 +8548,7 @@ struct sljit_label *label = NULL;
struct sljit_jump *jump = NULL;
jump_list *jumplist = NULL;
int private_data_ptr = PRIVATE_DATA(cc);
-int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_LOCALS_REG);
+int base = (private_data_ptr == 0) ? SLJIT_MEM1(STACK_TOP) : SLJIT_MEM1(SLJIT_SP);
int offset0 = (private_data_ptr == 0) ? STACK(0) : private_data_ptr;
int offset1 = (private_data_ptr == 0) ? STACK(1) : private_data_ptr + (int)sizeof(sljit_sw);
@@ -8721,14 +8721,14 @@ if (common->has_set_som && common->mark_ptr != 0)
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
free_stack(common, 2);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), TMP2, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP1, 0);
}
else if (common->has_set_som || common->mark_ptr != 0)
{
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->has_set_som ? (int)(OVECTOR(0)) : common->mark_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->has_set_som ? (int)(OVECTOR(0)) : common->mark_ptr, TMP2, 0);
}
}
@@ -8780,9 +8780,9 @@ if (bra == OP_BRAZERO)
if (*cc == OP_ASSERT || *cc == OP_ASSERTBACK)
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(assert_backtrack)->private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(assert_backtrack)->framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(assert_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(assert_backtrack)->framesize * sizeof(sljit_sw));
set_jumps(current->topbacktracks, LABEL());
}
@@ -8812,6 +8812,7 @@ pcre_uchar *ccprev;
pcre_uchar bra = OP_BRA;
pcre_uchar ket;
assert_backtrack *assert;
+sljit_uw *next_update_addr = NULL;
BOOL has_alternatives;
BOOL needs_control_head = FALSE;
struct sljit_jump *brazero = NULL;
@@ -8869,9 +8870,9 @@ if (ket != OP_KET && repeat_type != 0)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 1);
if (repeat_type == OP_UPTO)
- OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, TMP1, 0, SLJIT_IMM, 1);
+ OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0, SLJIT_IMM, 1);
else
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0);
}
if (ket == OP_KETRMAX)
@@ -8900,10 +8901,10 @@ else if (ket == OP_KETRMIN)
{
/* Checking zero-length iteration. */
if (opcode != OP_ONCE || CURRENT_AS(bracket_backtrack)->u.framesize < 0)
- CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);
+ CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr, CURRENT_AS(bracket_backtrack)->recursive_matchingpath);
else
{
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
CMPTO(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_MEM1(TMP1), (CURRENT_AS(bracket_backtrack)->u.framesize + 1) * sizeof(sljit_sw), CURRENT_AS(bracket_backtrack)->recursive_matchingpath);
}
/* Drop STR_PTR for non-greedy plus quantifier. */
@@ -8915,7 +8916,7 @@ else if (ket == OP_KETRMIN)
}
rmin_label = LABEL();
if (repeat_type != 0)
- OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
+ OP2(SLJIT_ADD, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);
}
else if (bra == OP_BRAZERO)
{
@@ -8925,7 +8926,7 @@ else if (bra == OP_BRAZERO)
}
else if (repeat_type == OP_EXACT)
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);
exact_label = LABEL();
}
@@ -8936,19 +8937,19 @@ if (offset != 0)
SLJIT_ASSERT(common->optimized_cbracket[offset >> 1] == 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, TMP1, 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(2));
free_stack(common, 3);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP2, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP1, 0);
}
else if (common->optimized_cbracket[offset >> 1] == 0)
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
free_stack(common, 2);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);
}
}
@@ -8956,7 +8957,7 @@ if (SLJIT_UNLIKELY(opcode == OP_ONCE))
{
if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0)
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
}
once = JUMP(SLJIT_JUMP);
@@ -8981,8 +8982,10 @@ else if (has_alternatives)
if (alt_max > 4)
{
/* Table jump if alt_max is greater than 4. */
- sljit_emit_ijump(compiler, SLJIT_JUMP, SLJIT_MEM1(TMP1), (sljit_sw)common->read_only_data_ptr);
- add_label_addr(common);
+ next_update_addr = common->read_only_data_ptr;
+ common->read_only_data_ptr += alt_max;
+ sljit_emit_ijump(compiler, SLJIT_JUMP, SLJIT_MEM1(TMP1), (sljit_sw)next_update_addr);
+ add_label_addr(common, next_update_addr++);
}
else
{
@@ -9005,9 +9008,9 @@ if (SLJIT_UNLIKELY(opcode == OP_COND) || SLJIT_UNLIKELY(opcode == OP_SCOND))
assert = CURRENT_AS(bracket_backtrack)->u.assert;
if (assert->framesize >= 0 && (ccbegin[1 + LINK_SIZE] == OP_ASSERT || ccbegin[1 + LINK_SIZE] == OP_ASSERTBACK))
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
}
cond = JUMP(SLJIT_JUMP);
set_jumps(CURRENT_AS(bracket_backtrack)->u.assert->condfailed, LABEL());
@@ -9040,7 +9043,7 @@ if (has_alternatives)
if (opcode != OP_ONCE)
{
if (private_data_ptr != 0)
- OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr);
+ OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr);
else
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
}
@@ -9061,7 +9064,7 @@ if (has_alternatives)
if (repeat_type == OP_MINUPTO)
{
/* We need to preserve the counter. TMP2 will be used below. */
- OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr);
+ OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr);
stacksize++;
}
if (ket != OP_KET || bra != OP_BRA)
@@ -9106,7 +9109,7 @@ if (has_alternatives)
{
/* If ket is not OP_KETRMAX, this code path is executed after the jump to alternative_matchingpath. */
SLJIT_ASSERT(private_data_ptr == OVECTOR(offset + 0));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), STR_PTR, 0);
}
JUMPTO(SLJIT_JUMP, CURRENT_AS(bracket_backtrack)->alternative_matchingpath);
@@ -9114,7 +9117,7 @@ if (has_alternatives)
if (opcode != OP_ONCE)
{
if (alt_max > 4)
- add_label_addr(common);
+ add_label_addr(common, next_update_addr++);
else
{
if (alt_count != 2 * sizeof(sljit_uw))
@@ -9146,9 +9149,9 @@ if (has_alternatives)
assert = CURRENT_AS(bracket_backtrack)->u.assert;
if ((ccbegin[1 + LINK_SIZE] == OP_ASSERT_NOT || ccbegin[1 + LINK_SIZE] == OP_ASSERTBACK_NOT) && assert->framesize >= 0)
{
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), assert->private_data_ptr, SLJIT_MEM1(STACK_TOP), assert->framesize * sizeof(sljit_sw));
}
JUMPHERE(cond);
}
@@ -9166,19 +9169,19 @@ if (offset != 0)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
free_stack(common, 2);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);
}
else
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);
}
}
else if (opcode == OP_SBRA || opcode == OP_SCOND)
{
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(0));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 1);
}
else if (opcode == OP_ONCE)
@@ -9201,20 +9204,20 @@ else if (opcode == OP_ONCE)
JUMPHERE(once);
/* Restore previous private_data_ptr */
if (CURRENT_AS(bracket_backtrack)->u.framesize >= 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracket_backtrack)->u.framesize * sizeof(sljit_sw));
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracket_backtrack)->u.framesize * sizeof(sljit_sw));
else if (ket == OP_KETRMIN)
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
/* See the comment below. */
free_stack(common, 2);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), private_data_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), private_data_ptr, TMP1, 0);
}
}
if (repeat_type == OP_EXACT)
{
- OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, SLJIT_IMM, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), repeat_ptr, TMP1, 0);
+ OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), repeat_ptr, SLJIT_IMM, 1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), repeat_ptr, TMP1, 0);
CMPTO(SLJIT_C_LESS_EQUAL, TMP1, 0, SLJIT_IMM, repeat_count, exact_label);
}
else if (ket == OP_KETRMAX)
@@ -9268,19 +9271,19 @@ if (CURRENT_AS(bracketpos_backtrack)->framesize < 0)
offset = (GET2(current->cc, 1 + LINK_SIZE)) << 1;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(1));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset), TMP1, 0);
if (common->capture_last_ptr != 0)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(2));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(offset + 1), TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1), TMP2, 0);
if (common->capture_last_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, TMP1, 0);
}
set_jumps(current->topbacktracks, LABEL());
free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize);
return;
}
-OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(bracketpos_backtrack)->private_data_ptr);
+OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr);
add_jump(compiler, &common->revertframes, JUMP(SLJIT_FAST_CALL));
if (current->topbacktracks)
@@ -9291,7 +9294,7 @@ if (current->topbacktracks)
free_stack(common, CURRENT_AS(bracketpos_backtrack)->stacksize);
JUMPHERE(jump);
}
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracketpos_backtrack)->framesize * sizeof(sljit_sw));
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), CURRENT_AS(bracketpos_backtrack)->private_data_ptr, SLJIT_MEM1(STACK_TOP), CURRENT_AS(bracketpos_backtrack)->framesize * sizeof(sljit_sw));
}
static SLJIT_INLINE void compile_braminzero_backtrackingpath(compiler_common *common, struct backtrack_common *current)
@@ -9331,7 +9334,7 @@ if (opcode == OP_THEN || opcode == OP_THEN_ARG)
{
SLJIT_ASSERT(common->control_head_ptr != 0);
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, type_then_trap);
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, common->then_trap->start);
jump = JUMP(SLJIT_JUMP);
@@ -9363,11 +9366,11 @@ if (common->local_exit)
if (opcode == OP_SKIP_ARG)
{
SLJIT_ASSERT(common->control_head_ptr != 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0, STACK_TOP, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS0, STACK_TOP, 0);
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_IMM, (sljit_sw)(current->cc + 2));
sljit_emit_ijump(compiler, SLJIT_CALL2, SLJIT_IMM, SLJIT_FUNC_OFFSET(do_search_mark));
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), LOCALS0);
OP1(SLJIT_MOV, STR_PTR, 0, TMP1, 0);
add_jump(compiler, &common->reset_match, CMP(SLJIT_C_NOT_EQUAL, STR_PTR, 0, SLJIT_IMM, -1));
@@ -9408,7 +9411,7 @@ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 3);
JUMPHERE(jump);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, TMP1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP1, 0);
}
static void compile_backtrackingpath(compiler_common *common, struct backtrack_common *current)
@@ -9425,7 +9428,7 @@ while (current)
case OP_SET_SOM:
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), TMP1, 0);
break;
case OP_STAR:
@@ -9554,9 +9557,9 @@ while (current)
if (common->has_skip_arg)
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), STACK(0));
free_stack(common, common->has_skip_arg ? 5 : 1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, TMP1, 0);
if (common->has_skip_arg)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP2, 0);
break;
case OP_THEN:
@@ -9630,8 +9633,8 @@ allocate_stack(common, private_data_size + framesize + alternativesize);
OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(private_data_size + framesize + alternativesize - 1), TMP2, 0);
copy_private_data(common, ccbegin, ccend, TRUE, private_data_size + framesize + alternativesize, framesize + alternativesize, needs_control_head);
if (needs_control_head)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_IMM, 0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head_ptr, STACK_TOP, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, STACK_TOP, 0);
if (needs_frame)
init_frame(common, cc, NULL, framesize + alternativesize - 1, alternativesize, TRUE);
@@ -9678,7 +9681,7 @@ jump = JUMP(SLJIT_JUMP);
if (common->quit != NULL)
{
set_jumps(common->quit, LABEL());
- OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head_ptr);
+ OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr);
if (needs_frame)
{
OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw));
@@ -9691,7 +9694,7 @@ if (common->quit != NULL)
}
set_jumps(common->accept, LABEL());
-OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head_ptr);
+OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr);
if (needs_frame)
{
OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, (framesize + alternativesize) * sizeof(sljit_sw));
@@ -9709,15 +9712,15 @@ if (needs_control_head)
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(STACK_TOP), 2 * sizeof(sljit_sw));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_sw));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head_ptr, TMP1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, TMP1, 0);
OP1(SLJIT_MOV, TMP1, 0, TMP3, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, TMP2, 0);
}
else
{
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(STACK_TOP), sizeof(sljit_sw));
OP1(SLJIT_MOV, TMP1, 0, TMP3, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->recursive_head_ptr, TMP2, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->recursive_head_ptr, TMP2, 0);
}
sljit_emit_fast_return(compiler, SLJIT_MEM1(STACK_TOP), 0);
}
@@ -9972,29 +9975,29 @@ if (!compiler)
common->compiler = compiler;
/* Main pcre_jit_exec entry. */
-sljit_emit_enter(compiler, 1, 5, 5, private_data_size);
+sljit_emit_enter(compiler, 0, 1, 5, 5, 0, 0, private_data_size);
/* Register init. */
reset_ovector(common, (re->top_bracket + 1) * 2);
if (common->req_char_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->req_char_ptr, SLJIT_SCRATCH_REG1, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->req_char_ptr, SLJIT_R0, 0);
-OP1(SLJIT_MOV, ARGUMENTS, 0, SLJIT_SAVED_REG1, 0);
-OP1(SLJIT_MOV, TMP1, 0, SLJIT_SAVED_REG1, 0);
+OP1(SLJIT_MOV, ARGUMENTS, 0, SLJIT_S0, 0);
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_S0, 0);
OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, str));
OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, end));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
OP1(SLJIT_MOV_UI, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, limit_match));
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, base));
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(struct sljit_stack, limit));
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LIMIT_MATCH, TMP1, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH, TMP1, 0);
if (mode == JIT_PARTIAL_SOFT_COMPILE)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, -1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1);
if (common->mark_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->mark_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->mark_ptr, SLJIT_IMM, 0);
if (common->control_head_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->control_head_ptr, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->control_head_ptr, SLJIT_IMM, 0);
/* Main part of the matching */
if ((re->options & PCRE_ANCHORED) == 0)
@@ -10036,16 +10039,16 @@ if (common->req_char_ptr != 0)
reqbyte_notfound = search_requested_char(common, (pcre_uchar)re->req_char, (re->flags & PCRE_RCH_CASELESS) != 0, (re->flags & PCRE_FIRSTSET) != 0);
/* Store the current STR_PTR in OVECTOR(0). */
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0), STR_PTR, 0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), OVECTOR(0), STR_PTR, 0);
/* Copy the limit of allowed recursions. */
-OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LIMIT_MATCH);
+OP1(SLJIT_MOV, COUNT_MATCH, 0, SLJIT_MEM1(SLJIT_SP), LIMIT_MATCH);
if (common->capture_last_ptr != 0)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->capture_last_ptr, SLJIT_IMM, -1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->capture_last_ptr, SLJIT_IMM, -1);
if (common->needs_start_ptr)
{
SLJIT_ASSERT(common->start_ptr != OVECTOR(0));
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_ptr, STR_PTR, 0);
}
else
SLJIT_ASSERT(common->start_ptr == OVECTOR(0));
@@ -10053,13 +10056,13 @@ else
/* Copy the beginning of the string. */
if (mode == JIT_PARTIAL_SOFT_COMPILE)
{
- jump = CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, -1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start + sizeof(sljit_sw), STR_PTR, 0);
+ jump = CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start + sizeof(sljit_sw), STR_PTR, 0);
JUMPHERE(jump);
}
else if (mode == JIT_PARTIAL_HARD_COMPILE)
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, STR_PTR, 0);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, STR_PTR, 0);
compile_matchingpath(common, common->start, ccend, &rootbacktrack);
if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
@@ -10074,7 +10077,7 @@ if (SLJIT_UNLIKELY(sljit_get_compiler_error(compiler)))
if (common->might_be_empty)
{
- empty_match = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), OVECTOR(0));
+ empty_match = CMP(SLJIT_C_EQUAL, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(0));
empty_match_found_label = LABEL();
}
@@ -10119,10 +10122,10 @@ reset_match_label = LABEL();
if (mode == JIT_PARTIAL_SOFT_COMPILE)
{
/* Update hit_start only in the first time. */
- jump = CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_used_ptr, SLJIT_IMM, -1);
- OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, TMP1, 0);
+ jump = CMP(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, 0);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->start_used_ptr, SLJIT_IMM, -1);
+ OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), common->hit_start, TMP1, 0);
JUMPHERE(jump);
}
@@ -10130,10 +10133,10 @@ if (mode == JIT_PARTIAL_SOFT_COMPILE)
if ((re->options & PCRE_ANCHORED) == 0 && (re->options & PCRE_FIRSTLINE) != 0)
{
SLJIT_ASSERT(common->first_line_end != 0);
- OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->first_line_end);
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->first_line_end);
}
-OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), common->start_ptr);
+OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), common->start_ptr);
if ((re->options & PCRE_ANCHORED) == 0)
{
@@ -10157,7 +10160,7 @@ if (reqbyte_notfound != NULL)
JUMPHERE(reqbyte_notfound);
if (mode == JIT_PARTIAL_SOFT_COMPILE)
- CMPTO(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_LOCALS_REG), common->hit_start, SLJIT_IMM, -1, common->partialmatchlabel);
+ CMPTO(SLJIT_C_NOT_EQUAL, SLJIT_MEM1(SLJIT_SP), common->hit_start, SLJIT_IMM, -1, common->partialmatchlabel);
OP1(SLJIT_MOV, SLJIT_RETURN_REG, 0, SLJIT_IMM, PCRE_ERROR_NOMATCH);
JUMPTO(SLJIT_JUMP, common->quit_label);
@@ -10203,8 +10206,8 @@ common->quit_label = quit_label;
/* This is a (really) rare case. */
set_jumps(common->stackalloc, LABEL());
/* RETURN_ADDR is not a saved register. */
-sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
-OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1, TMP2, 0);
+sljit_emit_fast_enter(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
+OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), LOCALS1, TMP2, 0);
OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
OP1(SLJIT_MOV, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, top), STACK_TOP, 0);
@@ -10216,8 +10219,8 @@ OP1(SLJIT_MOV, TMP1, 0, ARGUMENTS, 0);
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(jit_arguments, stack));
OP1(SLJIT_MOV, STACK_TOP, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, top));
OP1(SLJIT_MOV, STACK_LIMIT, 0, SLJIT_MEM1(TMP1), SLJIT_OFFSETOF(struct sljit_stack, limit));
-OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS1);
-sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_LOCALS_REG), LOCALS0);
+OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), LOCALS1);
+sljit_emit_fast_return(compiler, SLJIT_MEM1(SLJIT_SP), LOCALS0);
/* Allocation failed. */
JUMPHERE(jump);
@@ -10309,7 +10312,7 @@ executable_size = sljit_get_generated_code_size(compiler);
label_addr = common->label_addrs;
while (label_addr != NULL)
{
- *label_addr->addr = sljit_get_label_addr(label_addr->label);
+ *label_addr->update_addr = sljit_get_label_addr(label_addr->label);
label_addr = label_addr->next;
}
sljit_free_compiler(compiler);
diff --git a/pcre/pcre_scanner_unittest.cc b/pcre/pcre_scanner_unittest.cc
index 7de8d2e8d9a..c00312c4f63 100644
--- a/pcre/pcre_scanner_unittest.cc
+++ b/pcre/pcre_scanner_unittest.cc
@@ -149,6 +149,8 @@ static void TestBigComment() {
// small stack size
int main(int argc, char** argv) {
+ (void)argc;
+ (void)argv;
TestScanner();
TestBigComment();
diff --git a/pcre/pcre_stringpiece.h.in b/pcre/pcre_stringpiece.h.in
index 369c10f31b7..eb25826b453 100644
--- a/pcre/pcre_stringpiece.h.in
+++ b/pcre/pcre_stringpiece.h.in
@@ -174,6 +174,7 @@ template<> struct __type_traits<pcrecpp::StringPiece> {
#endif
// allow StringPiece to be logged
-std::ostream& operator<<(std::ostream& o, const pcrecpp::StringPiece& piece);
+PCRECPP_EXP_DECL std::ostream& operator<<(std::ostream& o,
+ const pcrecpp::StringPiece& piece);
#endif /* _PCRE_STRINGPIECE_H */
diff --git a/pcre/pcre_stringpiece_unittest.cc b/pcre/pcre_stringpiece_unittest.cc
index c58e028cefe..1c4759da3b0 100644
--- a/pcre/pcre_stringpiece_unittest.cc
+++ b/pcre/pcre_stringpiece_unittest.cc
@@ -142,6 +142,8 @@ static void CheckComparisonOperators() {
}
int main(int argc, char** argv) {
+ (void)argc;
+ (void)argv;
CheckComparisonOperators();
CheckSTLComparator();
diff --git a/pcre/pcre_study.c b/pcre/pcre_study.c
index ab9510e20ec..f19d9fbb902 100644
--- a/pcre/pcre_study.c
+++ b/pcre/pcre_study.c
@@ -863,7 +863,6 @@ do
case OP_NOTUPTOI:
case OP_NOT_HSPACE:
case OP_NOT_VSPACE:
- case OP_PROP:
case OP_PRUNE:
case OP_PRUNE_ARG:
case OP_RECURSE:
@@ -881,6 +880,31 @@ do
case OP_THEN_ARG:
return SSB_FAIL;
+ /* A "real" property test implies no starting bits, but the fake property
+ PT_CLIST identifies a list of characters. These lists are short, as they
+ are used for characters with more than one "other case", so there is no
+ point in recognizing them for OP_NOTPROP. */
+
+ case OP_PROP:
+ if (tcode[1] != PT_CLIST) return SSB_FAIL;
+ {
+ const pcre_uint32 *p = PRIV(ucd_caseless_sets) + tcode[2];
+ while ((c = *p++) < NOTACHAR)
+ {
+#if defined SUPPORT_UTF && defined COMPILE_PCRE8
+ if (utf)
+ {
+ pcre_uchar buff[6];
+ (void)PRIV(ord2utf)(c, buff);
+ c = buff[0];
+ }
+#endif
+ if (c > 0xff) SET_BIT(0xff); else SET_BIT(c);
+ }
+ }
+ try_next = FALSE;
+ break;
+
/* We can ignore word boundary tests. */
case OP_WORD_BOUNDARY:
@@ -1106,24 +1130,17 @@ do
try_next = FALSE;
break;
- /* The cbit_space table has vertical tab as whitespace; we have to
- ensure it is set as not whitespace. Luckily, the code value is the same
- (0x0b) in ASCII and EBCDIC, so we can just adjust the appropriate bit. */
+ /* The cbit_space table has vertical tab as whitespace; we no longer
+ have to play fancy tricks because Perl added VT to its whitespace at
+ release 5.18. PCRE added it at release 8.34. */
case OP_NOT_WHITESPACE:
set_nottype_bits(start_bits, cbit_space, table_limit, cd);
- start_bits[1] |= 0x08;
try_next = FALSE;
break;
- /* The cbit_space table has vertical tab as whitespace; we have to not
- set it from the table. Luckily, the code value is the same (0x0b) in
- ASCII and EBCDIC, so we can just adjust the appropriate bit. */
-
case OP_WHITESPACE:
- c = start_bits[1]; /* Save in case it was already set */
set_type_bits(start_bits, cbit_space, table_limit, cd);
- start_bits[1] = (start_bits[1] & ~0x08) | c;
try_next = FALSE;
break;
diff --git a/pcre/pcre_tables.c b/pcre/pcre_tables.c
index f38ab52cbb8..4960af57c4d 100644
--- a/pcre/pcre_tables.c
+++ b/pcre/pcre_tables.c
@@ -213,6 +213,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Avestan0 STR_A STR_v STR_e STR_s STR_t STR_a STR_n "\0"
#define STRING_Balinese0 STR_B STR_a STR_l STR_i STR_n STR_e STR_s STR_e "\0"
#define STRING_Bamum0 STR_B STR_a STR_m STR_u STR_m "\0"
+#define STRING_Bassa_Vah0 STR_B STR_a STR_s STR_s STR_a STR_UNDERSCORE STR_V STR_a STR_h "\0"
#define STRING_Batak0 STR_B STR_a STR_t STR_a STR_k "\0"
#define STRING_Bengali0 STR_B STR_e STR_n STR_g STR_a STR_l STR_i "\0"
#define STRING_Bopomofo0 STR_B STR_o STR_p STR_o STR_m STR_o STR_f STR_o "\0"
@@ -223,6 +224,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_C0 STR_C "\0"
#define STRING_Canadian_Aboriginal0 STR_C STR_a STR_n STR_a STR_d STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_b STR_o STR_r STR_i STR_g STR_i STR_n STR_a STR_l "\0"
#define STRING_Carian0 STR_C STR_a STR_r STR_i STR_a STR_n "\0"
+#define STRING_Caucasian_Albanian0 STR_C STR_a STR_u STR_c STR_a STR_s STR_i STR_a STR_n STR_UNDERSCORE STR_A STR_l STR_b STR_a STR_n STR_i STR_a STR_n "\0"
#define STRING_Cc0 STR_C STR_c "\0"
#define STRING_Cf0 STR_C STR_f "\0"
#define STRING_Chakma0 STR_C STR_h STR_a STR_k STR_m STR_a "\0"
@@ -238,11 +240,14 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0"
#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0"
#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"
+#define STRING_Duployan0 STR_D STR_u STR_p STR_l STR_o STR_y STR_a STR_n "\0"
#define STRING_Egyptian_Hieroglyphs0 STR_E STR_g STR_y STR_p STR_t STR_i STR_a STR_n STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0"
+#define STRING_Elbasan0 STR_E STR_l STR_b STR_a STR_s STR_a STR_n "\0"
#define STRING_Ethiopic0 STR_E STR_t STR_h STR_i STR_o STR_p STR_i STR_c "\0"
#define STRING_Georgian0 STR_G STR_e STR_o STR_r STR_g STR_i STR_a STR_n "\0"
#define STRING_Glagolitic0 STR_G STR_l STR_a STR_g STR_o STR_l STR_i STR_t STR_i STR_c "\0"
#define STRING_Gothic0 STR_G STR_o STR_t STR_h STR_i STR_c "\0"
+#define STRING_Grantha0 STR_G STR_r STR_a STR_n STR_t STR_h STR_a "\0"
#define STRING_Greek0 STR_G STR_r STR_e STR_e STR_k "\0"
#define STRING_Gujarati0 STR_G STR_u STR_j STR_a STR_r STR_a STR_t STR_i "\0"
#define STRING_Gurmukhi0 STR_G STR_u STR_r STR_m STR_u STR_k STR_h STR_i "\0"
@@ -262,12 +267,15 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Kayah_Li0 STR_K STR_a STR_y STR_a STR_h STR_UNDERSCORE STR_L STR_i "\0"
#define STRING_Kharoshthi0 STR_K STR_h STR_a STR_r STR_o STR_s STR_h STR_t STR_h STR_i "\0"
#define STRING_Khmer0 STR_K STR_h STR_m STR_e STR_r "\0"
+#define STRING_Khojki0 STR_K STR_h STR_o STR_j STR_k STR_i "\0"
+#define STRING_Khudawadi0 STR_K STR_h STR_u STR_d STR_a STR_w STR_a STR_d STR_i "\0"
#define STRING_L0 STR_L "\0"
#define STRING_L_AMPERSAND0 STR_L STR_AMPERSAND "\0"
#define STRING_Lao0 STR_L STR_a STR_o "\0"
#define STRING_Latin0 STR_L STR_a STR_t STR_i STR_n "\0"
#define STRING_Lepcha0 STR_L STR_e STR_p STR_c STR_h STR_a "\0"
#define STRING_Limbu0 STR_L STR_i STR_m STR_b STR_u "\0"
+#define STRING_Linear_A0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_A "\0"
#define STRING_Linear_B0 STR_L STR_i STR_n STR_e STR_a STR_r STR_UNDERSCORE STR_B "\0"
#define STRING_Lisu0 STR_L STR_i STR_s STR_u "\0"
#define STRING_Ll0 STR_L STR_l "\0"
@@ -278,18 +286,24 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Lycian0 STR_L STR_y STR_c STR_i STR_a STR_n "\0"
#define STRING_Lydian0 STR_L STR_y STR_d STR_i STR_a STR_n "\0"
#define STRING_M0 STR_M "\0"
+#define STRING_Mahajani0 STR_M STR_a STR_h STR_a STR_j STR_a STR_n STR_i "\0"
#define STRING_Malayalam0 STR_M STR_a STR_l STR_a STR_y STR_a STR_l STR_a STR_m "\0"
#define STRING_Mandaic0 STR_M STR_a STR_n STR_d STR_a STR_i STR_c "\0"
+#define STRING_Manichaean0 STR_M STR_a STR_n STR_i STR_c STR_h STR_a STR_e STR_a STR_n "\0"
#define STRING_Mc0 STR_M STR_c "\0"
#define STRING_Me0 STR_M STR_e "\0"
#define STRING_Meetei_Mayek0 STR_M STR_e STR_e STR_t STR_e STR_i STR_UNDERSCORE STR_M STR_a STR_y STR_e STR_k "\0"
+#define STRING_Mende_Kikakui0 STR_M STR_e STR_n STR_d STR_e STR_UNDERSCORE STR_K STR_i STR_k STR_a STR_k STR_u STR_i "\0"
#define STRING_Meroitic_Cursive0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_C STR_u STR_r STR_s STR_i STR_v STR_e "\0"
#define STRING_Meroitic_Hieroglyphs0 STR_M STR_e STR_r STR_o STR_i STR_t STR_i STR_c STR_UNDERSCORE STR_H STR_i STR_e STR_r STR_o STR_g STR_l STR_y STR_p STR_h STR_s "\0"
#define STRING_Miao0 STR_M STR_i STR_a STR_o "\0"
#define STRING_Mn0 STR_M STR_n "\0"
+#define STRING_Modi0 STR_M STR_o STR_d STR_i "\0"
#define STRING_Mongolian0 STR_M STR_o STR_n STR_g STR_o STR_l STR_i STR_a STR_n "\0"
+#define STRING_Mro0 STR_M STR_r STR_o "\0"
#define STRING_Myanmar0 STR_M STR_y STR_a STR_n STR_m STR_a STR_r "\0"
#define STRING_N0 STR_N "\0"
+#define STRING_Nabataean0 STR_N STR_a STR_b STR_a STR_t STR_a STR_e STR_a STR_n "\0"
#define STRING_Nd0 STR_N STR_d "\0"
#define STRING_New_Tai_Lue0 STR_N STR_e STR_w STR_UNDERSCORE STR_T STR_a STR_i STR_UNDERSCORE STR_L STR_u STR_e "\0"
#define STRING_Nko0 STR_N STR_k STR_o "\0"
@@ -298,12 +312,17 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Ogham0 STR_O STR_g STR_h STR_a STR_m "\0"
#define STRING_Ol_Chiki0 STR_O STR_l STR_UNDERSCORE STR_C STR_h STR_i STR_k STR_i "\0"
#define STRING_Old_Italic0 STR_O STR_l STR_d STR_UNDERSCORE STR_I STR_t STR_a STR_l STR_i STR_c "\0"
+#define STRING_Old_North_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_N STR_o STR_r STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
+#define STRING_Old_Permic0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_m STR_i STR_c "\0"
#define STRING_Old_Persian0 STR_O STR_l STR_d STR_UNDERSCORE STR_P STR_e STR_r STR_s STR_i STR_a STR_n "\0"
#define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
#define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0"
#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0"
#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"
#define STRING_P0 STR_P "\0"
+#define STRING_Pahawh_Hmong0 STR_P STR_a STR_h STR_a STR_w STR_h STR_UNDERSCORE STR_H STR_m STR_o STR_n STR_g "\0"
+#define STRING_Palmyrene0 STR_P STR_a STR_l STR_m STR_y STR_r STR_e STR_n STR_e "\0"
+#define STRING_Pau_Cin_Hau0 STR_P STR_a STR_u STR_UNDERSCORE STR_C STR_i STR_n STR_UNDERSCORE STR_H STR_a STR_u "\0"
#define STRING_Pc0 STR_P STR_c "\0"
#define STRING_Pd0 STR_P STR_d "\0"
#define STRING_Pe0 STR_P STR_e "\0"
@@ -313,6 +332,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Pi0 STR_P STR_i "\0"
#define STRING_Po0 STR_P STR_o "\0"
#define STRING_Ps0 STR_P STR_s "\0"
+#define STRING_Psalter_Pahlavi0 STR_P STR_s STR_a STR_l STR_t STR_e STR_r STR_UNDERSCORE STR_P STR_a STR_h STR_l STR_a STR_v STR_i "\0"
#define STRING_Rejang0 STR_R STR_e STR_j STR_a STR_n STR_g "\0"
#define STRING_Runic0 STR_R STR_u STR_n STR_i STR_c "\0"
#define STRING_S0 STR_S "\0"
@@ -321,6 +341,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Sc0 STR_S STR_c "\0"
#define STRING_Sharada0 STR_S STR_h STR_a STR_r STR_a STR_d STR_a "\0"
#define STRING_Shavian0 STR_S STR_h STR_a STR_v STR_i STR_a STR_n "\0"
+#define STRING_Siddham0 STR_S STR_i STR_d STR_d STR_h STR_a STR_m "\0"
#define STRING_Sinhala0 STR_S STR_i STR_n STR_h STR_a STR_l STR_a "\0"
#define STRING_Sk0 STR_S STR_k "\0"
#define STRING_Sm0 STR_S STR_m "\0"
@@ -341,8 +362,10 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Thai0 STR_T STR_h STR_a STR_i "\0"
#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0"
#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
+#define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"
#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
#define STRING_Vai0 STR_V STR_a STR_i "\0"
+#define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0"
#define STRING_Xan0 STR_X STR_a STR_n "\0"
#define STRING_Xps0 STR_X STR_p STR_s "\0"
#define STRING_Xsp0 STR_X STR_s STR_p "\0"
@@ -361,6 +384,7 @@ const char PRIV(utt_names)[] =
STRING_Avestan0
STRING_Balinese0
STRING_Bamum0
+ STRING_Bassa_Vah0
STRING_Batak0
STRING_Bengali0
STRING_Bopomofo0
@@ -371,6 +395,7 @@ const char PRIV(utt_names)[] =
STRING_C0
STRING_Canadian_Aboriginal0
STRING_Carian0
+ STRING_Caucasian_Albanian0
STRING_Cc0
STRING_Cf0
STRING_Chakma0
@@ -386,11 +411,14 @@ const char PRIV(utt_names)[] =
STRING_Cyrillic0
STRING_Deseret0
STRING_Devanagari0
+ STRING_Duployan0
STRING_Egyptian_Hieroglyphs0
+ STRING_Elbasan0
STRING_Ethiopic0
STRING_Georgian0
STRING_Glagolitic0
STRING_Gothic0
+ STRING_Grantha0
STRING_Greek0
STRING_Gujarati0
STRING_Gurmukhi0
@@ -410,12 +438,15 @@ const char PRIV(utt_names)[] =
STRING_Kayah_Li0
STRING_Kharoshthi0
STRING_Khmer0
+ STRING_Khojki0
+ STRING_Khudawadi0
STRING_L0
STRING_L_AMPERSAND0
STRING_Lao0
STRING_Latin0
STRING_Lepcha0
STRING_Limbu0
+ STRING_Linear_A0
STRING_Linear_B0
STRING_Lisu0
STRING_Ll0
@@ -426,18 +457,24 @@ const char PRIV(utt_names)[] =
STRING_Lycian0
STRING_Lydian0
STRING_M0
+ STRING_Mahajani0
STRING_Malayalam0
STRING_Mandaic0
+ STRING_Manichaean0
STRING_Mc0
STRING_Me0
STRING_Meetei_Mayek0
+ STRING_Mende_Kikakui0
STRING_Meroitic_Cursive0
STRING_Meroitic_Hieroglyphs0
STRING_Miao0
STRING_Mn0
+ STRING_Modi0
STRING_Mongolian0
+ STRING_Mro0
STRING_Myanmar0
STRING_N0
+ STRING_Nabataean0
STRING_Nd0
STRING_New_Tai_Lue0
STRING_Nko0
@@ -446,12 +483,17 @@ const char PRIV(utt_names)[] =
STRING_Ogham0
STRING_Ol_Chiki0
STRING_Old_Italic0
+ STRING_Old_North_Arabian0
+ STRING_Old_Permic0
STRING_Old_Persian0
STRING_Old_South_Arabian0
STRING_Old_Turkic0
STRING_Oriya0
STRING_Osmanya0
STRING_P0
+ STRING_Pahawh_Hmong0
+ STRING_Palmyrene0
+ STRING_Pau_Cin_Hau0
STRING_Pc0
STRING_Pd0
STRING_Pe0
@@ -461,6 +503,7 @@ const char PRIV(utt_names)[] =
STRING_Pi0
STRING_Po0
STRING_Ps0
+ STRING_Psalter_Pahlavi0
STRING_Rejang0
STRING_Runic0
STRING_S0
@@ -469,6 +512,7 @@ const char PRIV(utt_names)[] =
STRING_Sc0
STRING_Sharada0
STRING_Shavian0
+ STRING_Siddham0
STRING_Sinhala0
STRING_Sk0
STRING_Sm0
@@ -489,8 +533,10 @@ const char PRIV(utt_names)[] =
STRING_Thai0
STRING_Tibetan0
STRING_Tifinagh0
+ STRING_Tirhuta0
STRING_Ugaritic0
STRING_Vai0
+ STRING_Warang_Citi0
STRING_Xan0
STRING_Xps0
STRING_Xsp0
@@ -509,146 +555,169 @@ const ucp_type_table PRIV(utt)[] = {
{ 20, PT_SC, ucp_Avestan },
{ 28, PT_SC, ucp_Balinese },
{ 37, PT_SC, ucp_Bamum },
- { 43, PT_SC, ucp_Batak },
- { 49, PT_SC, ucp_Bengali },
- { 57, PT_SC, ucp_Bopomofo },
- { 66, PT_SC, ucp_Brahmi },
- { 73, PT_SC, ucp_Braille },
- { 81, PT_SC, ucp_Buginese },
- { 90, PT_SC, ucp_Buhid },
- { 96, PT_GC, ucp_C },
- { 98, PT_SC, ucp_Canadian_Aboriginal },
- { 118, PT_SC, ucp_Carian },
- { 125, PT_PC, ucp_Cc },
- { 128, PT_PC, ucp_Cf },
- { 131, PT_SC, ucp_Chakma },
- { 138, PT_SC, ucp_Cham },
- { 143, PT_SC, ucp_Cherokee },
- { 152, PT_PC, ucp_Cn },
- { 155, PT_PC, ucp_Co },
- { 158, PT_SC, ucp_Common },
- { 165, PT_SC, ucp_Coptic },
- { 172, PT_PC, ucp_Cs },
- { 175, PT_SC, ucp_Cuneiform },
- { 185, PT_SC, ucp_Cypriot },
- { 193, PT_SC, ucp_Cyrillic },
- { 202, PT_SC, ucp_Deseret },
- { 210, PT_SC, ucp_Devanagari },
- { 221, PT_SC, ucp_Egyptian_Hieroglyphs },
- { 242, PT_SC, ucp_Ethiopic },
- { 251, PT_SC, ucp_Georgian },
- { 260, PT_SC, ucp_Glagolitic },
- { 271, PT_SC, ucp_Gothic },
- { 278, PT_SC, ucp_Greek },
- { 284, PT_SC, ucp_Gujarati },
- { 293, PT_SC, ucp_Gurmukhi },
- { 302, PT_SC, ucp_Han },
- { 306, PT_SC, ucp_Hangul },
- { 313, PT_SC, ucp_Hanunoo },
- { 321, PT_SC, ucp_Hebrew },
- { 328, PT_SC, ucp_Hiragana },
- { 337, PT_SC, ucp_Imperial_Aramaic },
- { 354, PT_SC, ucp_Inherited },
- { 364, PT_SC, ucp_Inscriptional_Pahlavi },
- { 386, PT_SC, ucp_Inscriptional_Parthian },
- { 409, PT_SC, ucp_Javanese },
- { 418, PT_SC, ucp_Kaithi },
- { 425, PT_SC, ucp_Kannada },
- { 433, PT_SC, ucp_Katakana },
- { 442, PT_SC, ucp_Kayah_Li },
- { 451, PT_SC, ucp_Kharoshthi },
- { 462, PT_SC, ucp_Khmer },
- { 468, PT_GC, ucp_L },
- { 470, PT_LAMP, 0 },
- { 473, PT_SC, ucp_Lao },
- { 477, PT_SC, ucp_Latin },
- { 483, PT_SC, ucp_Lepcha },
- { 490, PT_SC, ucp_Limbu },
- { 496, PT_SC, ucp_Linear_B },
- { 505, PT_SC, ucp_Lisu },
- { 510, PT_PC, ucp_Ll },
- { 513, PT_PC, ucp_Lm },
- { 516, PT_PC, ucp_Lo },
- { 519, PT_PC, ucp_Lt },
- { 522, PT_PC, ucp_Lu },
- { 525, PT_SC, ucp_Lycian },
- { 532, PT_SC, ucp_Lydian },
- { 539, PT_GC, ucp_M },
- { 541, PT_SC, ucp_Malayalam },
- { 551, PT_SC, ucp_Mandaic },
- { 559, PT_PC, ucp_Mc },
- { 562, PT_PC, ucp_Me },
- { 565, PT_SC, ucp_Meetei_Mayek },
- { 578, PT_SC, ucp_Meroitic_Cursive },
- { 595, PT_SC, ucp_Meroitic_Hieroglyphs },
- { 616, PT_SC, ucp_Miao },
- { 621, PT_PC, ucp_Mn },
- { 624, PT_SC, ucp_Mongolian },
- { 634, PT_SC, ucp_Myanmar },
- { 642, PT_GC, ucp_N },
- { 644, PT_PC, ucp_Nd },
- { 647, PT_SC, ucp_New_Tai_Lue },
- { 659, PT_SC, ucp_Nko },
- { 663, PT_PC, ucp_Nl },
- { 666, PT_PC, ucp_No },
- { 669, PT_SC, ucp_Ogham },
- { 675, PT_SC, ucp_Ol_Chiki },
- { 684, PT_SC, ucp_Old_Italic },
- { 695, PT_SC, ucp_Old_Persian },
- { 707, PT_SC, ucp_Old_South_Arabian },
- { 725, PT_SC, ucp_Old_Turkic },
- { 736, PT_SC, ucp_Oriya },
- { 742, PT_SC, ucp_Osmanya },
- { 750, PT_GC, ucp_P },
- { 752, PT_PC, ucp_Pc },
- { 755, PT_PC, ucp_Pd },
- { 758, PT_PC, ucp_Pe },
- { 761, PT_PC, ucp_Pf },
- { 764, PT_SC, ucp_Phags_Pa },
- { 773, PT_SC, ucp_Phoenician },
- { 784, PT_PC, ucp_Pi },
- { 787, PT_PC, ucp_Po },
- { 790, PT_PC, ucp_Ps },
- { 793, PT_SC, ucp_Rejang },
- { 800, PT_SC, ucp_Runic },
- { 806, PT_GC, ucp_S },
- { 808, PT_SC, ucp_Samaritan },
- { 818, PT_SC, ucp_Saurashtra },
- { 829, PT_PC, ucp_Sc },
- { 832, PT_SC, ucp_Sharada },
- { 840, PT_SC, ucp_Shavian },
- { 848, PT_SC, ucp_Sinhala },
- { 856, PT_PC, ucp_Sk },
- { 859, PT_PC, ucp_Sm },
- { 862, PT_PC, ucp_So },
- { 865, PT_SC, ucp_Sora_Sompeng },
- { 878, PT_SC, ucp_Sundanese },
- { 888, PT_SC, ucp_Syloti_Nagri },
- { 901, PT_SC, ucp_Syriac },
- { 908, PT_SC, ucp_Tagalog },
- { 916, PT_SC, ucp_Tagbanwa },
- { 925, PT_SC, ucp_Tai_Le },
- { 932, PT_SC, ucp_Tai_Tham },
- { 941, PT_SC, ucp_Tai_Viet },
- { 950, PT_SC, ucp_Takri },
- { 956, PT_SC, ucp_Tamil },
- { 962, PT_SC, ucp_Telugu },
- { 969, PT_SC, ucp_Thaana },
- { 976, PT_SC, ucp_Thai },
- { 981, PT_SC, ucp_Tibetan },
- { 989, PT_SC, ucp_Tifinagh },
- { 998, PT_SC, ucp_Ugaritic },
- { 1007, PT_SC, ucp_Vai },
- { 1011, PT_ALNUM, 0 },
- { 1015, PT_PXSPACE, 0 },
- { 1019, PT_SPACE, 0 },
- { 1023, PT_UCNC, 0 },
- { 1027, PT_WORD, 0 },
- { 1031, PT_SC, ucp_Yi },
- { 1034, PT_GC, ucp_Z },
- { 1036, PT_PC, ucp_Zl },
- { 1039, PT_PC, ucp_Zp },
- { 1042, PT_PC, ucp_Zs }
+ { 43, PT_SC, ucp_Bassa_Vah },
+ { 53, PT_SC, ucp_Batak },
+ { 59, PT_SC, ucp_Bengali },
+ { 67, PT_SC, ucp_Bopomofo },
+ { 76, PT_SC, ucp_Brahmi },
+ { 83, PT_SC, ucp_Braille },
+ { 91, PT_SC, ucp_Buginese },
+ { 100, PT_SC, ucp_Buhid },
+ { 106, PT_GC, ucp_C },
+ { 108, PT_SC, ucp_Canadian_Aboriginal },
+ { 128, PT_SC, ucp_Carian },
+ { 135, PT_SC, ucp_Caucasian_Albanian },
+ { 154, PT_PC, ucp_Cc },
+ { 157, PT_PC, ucp_Cf },
+ { 160, PT_SC, ucp_Chakma },
+ { 167, PT_SC, ucp_Cham },
+ { 172, PT_SC, ucp_Cherokee },
+ { 181, PT_PC, ucp_Cn },
+ { 184, PT_PC, ucp_Co },
+ { 187, PT_SC, ucp_Common },
+ { 194, PT_SC, ucp_Coptic },
+ { 201, PT_PC, ucp_Cs },
+ { 204, PT_SC, ucp_Cuneiform },
+ { 214, PT_SC, ucp_Cypriot },
+ { 222, PT_SC, ucp_Cyrillic },
+ { 231, PT_SC, ucp_Deseret },
+ { 239, PT_SC, ucp_Devanagari },
+ { 250, PT_SC, ucp_Duployan },
+ { 259, PT_SC, ucp_Egyptian_Hieroglyphs },
+ { 280, PT_SC, ucp_Elbasan },
+ { 288, PT_SC, ucp_Ethiopic },
+ { 297, PT_SC, ucp_Georgian },
+ { 306, PT_SC, ucp_Glagolitic },
+ { 317, PT_SC, ucp_Gothic },
+ { 324, PT_SC, ucp_Grantha },
+ { 332, PT_SC, ucp_Greek },
+ { 338, PT_SC, ucp_Gujarati },
+ { 347, PT_SC, ucp_Gurmukhi },
+ { 356, PT_SC, ucp_Han },
+ { 360, PT_SC, ucp_Hangul },
+ { 367, PT_SC, ucp_Hanunoo },
+ { 375, PT_SC, ucp_Hebrew },
+ { 382, PT_SC, ucp_Hiragana },
+ { 391, PT_SC, ucp_Imperial_Aramaic },
+ { 408, PT_SC, ucp_Inherited },
+ { 418, PT_SC, ucp_Inscriptional_Pahlavi },
+ { 440, PT_SC, ucp_Inscriptional_Parthian },
+ { 463, PT_SC, ucp_Javanese },
+ { 472, PT_SC, ucp_Kaithi },
+ { 479, PT_SC, ucp_Kannada },
+ { 487, PT_SC, ucp_Katakana },
+ { 496, PT_SC, ucp_Kayah_Li },
+ { 505, PT_SC, ucp_Kharoshthi },
+ { 516, PT_SC, ucp_Khmer },
+ { 522, PT_SC, ucp_Khojki },
+ { 529, PT_SC, ucp_Khudawadi },
+ { 539, PT_GC, ucp_L },
+ { 541, PT_LAMP, 0 },
+ { 544, PT_SC, ucp_Lao },
+ { 548, PT_SC, ucp_Latin },
+ { 554, PT_SC, ucp_Lepcha },
+ { 561, PT_SC, ucp_Limbu },
+ { 567, PT_SC, ucp_Linear_A },
+ { 576, PT_SC, ucp_Linear_B },
+ { 585, PT_SC, ucp_Lisu },
+ { 590, PT_PC, ucp_Ll },
+ { 593, PT_PC, ucp_Lm },
+ { 596, PT_PC, ucp_Lo },
+ { 599, PT_PC, ucp_Lt },
+ { 602, PT_PC, ucp_Lu },
+ { 605, PT_SC, ucp_Lycian },
+ { 612, PT_SC, ucp_Lydian },
+ { 619, PT_GC, ucp_M },
+ { 621, PT_SC, ucp_Mahajani },
+ { 630, PT_SC, ucp_Malayalam },
+ { 640, PT_SC, ucp_Mandaic },
+ { 648, PT_SC, ucp_Manichaean },
+ { 659, PT_PC, ucp_Mc },
+ { 662, PT_PC, ucp_Me },
+ { 665, PT_SC, ucp_Meetei_Mayek },
+ { 678, PT_SC, ucp_Mende_Kikakui },
+ { 692, PT_SC, ucp_Meroitic_Cursive },
+ { 709, PT_SC, ucp_Meroitic_Hieroglyphs },
+ { 730, PT_SC, ucp_Miao },
+ { 735, PT_PC, ucp_Mn },
+ { 738, PT_SC, ucp_Modi },
+ { 743, PT_SC, ucp_Mongolian },
+ { 753, PT_SC, ucp_Mro },
+ { 757, PT_SC, ucp_Myanmar },
+ { 765, PT_GC, ucp_N },
+ { 767, PT_SC, ucp_Nabataean },
+ { 777, PT_PC, ucp_Nd },
+ { 780, PT_SC, ucp_New_Tai_Lue },
+ { 792, PT_SC, ucp_Nko },
+ { 796, PT_PC, ucp_Nl },
+ { 799, PT_PC, ucp_No },
+ { 802, PT_SC, ucp_Ogham },
+ { 808, PT_SC, ucp_Ol_Chiki },
+ { 817, PT_SC, ucp_Old_Italic },
+ { 828, PT_SC, ucp_Old_North_Arabian },
+ { 846, PT_SC, ucp_Old_Permic },
+ { 857, PT_SC, ucp_Old_Persian },
+ { 869, PT_SC, ucp_Old_South_Arabian },
+ { 887, PT_SC, ucp_Old_Turkic },
+ { 898, PT_SC, ucp_Oriya },
+ { 904, PT_SC, ucp_Osmanya },
+ { 912, PT_GC, ucp_P },
+ { 914, PT_SC, ucp_Pahawh_Hmong },
+ { 927, PT_SC, ucp_Palmyrene },
+ { 937, PT_SC, ucp_Pau_Cin_Hau },
+ { 949, PT_PC, ucp_Pc },
+ { 952, PT_PC, ucp_Pd },
+ { 955, PT_PC, ucp_Pe },
+ { 958, PT_PC, ucp_Pf },
+ { 961, PT_SC, ucp_Phags_Pa },
+ { 970, PT_SC, ucp_Phoenician },
+ { 981, PT_PC, ucp_Pi },
+ { 984, PT_PC, ucp_Po },
+ { 987, PT_PC, ucp_Ps },
+ { 990, PT_SC, ucp_Psalter_Pahlavi },
+ { 1006, PT_SC, ucp_Rejang },
+ { 1013, PT_SC, ucp_Runic },
+ { 1019, PT_GC, ucp_S },
+ { 1021, PT_SC, ucp_Samaritan },
+ { 1031, PT_SC, ucp_Saurashtra },
+ { 1042, PT_PC, ucp_Sc },
+ { 1045, PT_SC, ucp_Sharada },
+ { 1053, PT_SC, ucp_Shavian },
+ { 1061, PT_SC, ucp_Siddham },
+ { 1069, PT_SC, ucp_Sinhala },
+ { 1077, PT_PC, ucp_Sk },
+ { 1080, PT_PC, ucp_Sm },
+ { 1083, PT_PC, ucp_So },
+ { 1086, PT_SC, ucp_Sora_Sompeng },
+ { 1099, PT_SC, ucp_Sundanese },
+ { 1109, PT_SC, ucp_Syloti_Nagri },
+ { 1122, PT_SC, ucp_Syriac },
+ { 1129, PT_SC, ucp_Tagalog },
+ { 1137, PT_SC, ucp_Tagbanwa },
+ { 1146, PT_SC, ucp_Tai_Le },
+ { 1153, PT_SC, ucp_Tai_Tham },
+ { 1162, PT_SC, ucp_Tai_Viet },
+ { 1171, PT_SC, ucp_Takri },
+ { 1177, PT_SC, ucp_Tamil },
+ { 1183, PT_SC, ucp_Telugu },
+ { 1190, PT_SC, ucp_Thaana },
+ { 1197, PT_SC, ucp_Thai },
+ { 1202, PT_SC, ucp_Tibetan },
+ { 1210, PT_SC, ucp_Tifinagh },
+ { 1219, PT_SC, ucp_Tirhuta },
+ { 1227, PT_SC, ucp_Ugaritic },
+ { 1236, PT_SC, ucp_Vai },
+ { 1240, PT_SC, ucp_Warang_Citi },
+ { 1252, PT_ALNUM, 0 },
+ { 1256, PT_PXSPACE, 0 },
+ { 1260, PT_SPACE, 0 },
+ { 1264, PT_UCNC, 0 },
+ { 1268, PT_WORD, 0 },
+ { 1272, PT_SC, ucp_Yi },
+ { 1275, PT_GC, ucp_Z },
+ { 1277, PT_PC, ucp_Zl },
+ { 1280, PT_PC, ucp_Zp },
+ { 1283, PT_PC, ucp_Zs }
};
const int PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
diff --git a/pcre/pcre_ucd.c b/pcre/pcre_ucd.c
index 46ea70c44cc..69c4fd42c34 100644
--- a/pcre/pcre_ucd.c
+++ b/pcre/pcre_ucd.c
@@ -20,7 +20,7 @@ needed. */
/* Unicode character database. */
/* This file was autogenerated by the MultiStage2.py script. */
-/* Total size: 65688 bytes, block size: 128. */
+/* Total size: 72576 bytes, block size: 128. */
/* The tables herein are needed only when UCP support is built
into PCRE. This module should not be referenced otherwise, so
@@ -79,7 +79,7 @@ const pcre_uint32 PRIV(ucd_caseless_sets)[] = {
#ifndef PCRE_INCLUDED
-const ucd_record PRIV(ucd_records)[] = { /* 5016 bytes, record size 8 */
+const ucd_record PRIV(ucd_records)[] = { /* 5760 bytes, record size 8 */
{ 9, 0, 2, 0, 0, }, /* 0 */
{ 9, 0, 1, 0, 0, }, /* 1 */
{ 9, 0, 0, 0, 0, }, /* 2 */
@@ -166,547 +166,640 @@ const ucd_record PRIV(ucd_records)[] = { /* 5016 bytes, record size 8 */
{ 33, 5, 12, 0, -205, }, /* 83 */
{ 33, 5, 12, 0, -202, }, /* 84 */
{ 33, 5, 12, 0, -203, }, /* 85 */
- { 33, 5, 12, 0, -207, }, /* 86 */
- { 33, 5, 12, 0, 42280, }, /* 87 */
- { 33, 5, 12, 0, 42308, }, /* 88 */
- { 33, 5, 12, 0, -209, }, /* 89 */
- { 33, 5, 12, 0, -211, }, /* 90 */
- { 33, 5, 12, 0, 10743, }, /* 91 */
- { 33, 5, 12, 0, 10749, }, /* 92 */
- { 33, 5, 12, 0, -213, }, /* 93 */
- { 33, 5, 12, 0, -214, }, /* 94 */
- { 33, 5, 12, 0, 10727, }, /* 95 */
- { 33, 5, 12, 0, -218, }, /* 96 */
- { 33, 5, 12, 0, -69, }, /* 97 */
- { 33, 5, 12, 0, -217, }, /* 98 */
- { 33, 5, 12, 0, -71, }, /* 99 */
- { 33, 5, 12, 0, -219, }, /* 100 */
- { 33, 6, 12, 0, 0, }, /* 101 */
- { 9, 6, 12, 0, 0, }, /* 102 */
- { 3, 24, 12, 0, 0, }, /* 103 */
- { 27, 12, 3, 0, 0, }, /* 104 */
- { 27, 12, 3, 21, 116, }, /* 105 */
- { 19, 9, 12, 0, 1, }, /* 106 */
- { 19, 5, 12, 0, -1, }, /* 107 */
- { 19, 24, 12, 0, 0, }, /* 108 */
- { 9, 2, 12, 0, 0, }, /* 109 */
- { 19, 6, 12, 0, 0, }, /* 110 */
- { 19, 5, 12, 0, 130, }, /* 111 */
- { 19, 9, 12, 0, 38, }, /* 112 */
- { 19, 9, 12, 0, 37, }, /* 113 */
- { 19, 9, 12, 0, 64, }, /* 114 */
- { 19, 9, 12, 0, 63, }, /* 115 */
- { 19, 5, 12, 0, 0, }, /* 116 */
- { 19, 9, 12, 0, 32, }, /* 117 */
- { 19, 9, 12, 34, 32, }, /* 118 */
- { 19, 9, 12, 59, 32, }, /* 119 */
- { 19, 9, 12, 38, 32, }, /* 120 */
- { 19, 9, 12, 21, 32, }, /* 121 */
- { 19, 9, 12, 51, 32, }, /* 122 */
- { 19, 9, 12, 26, 32, }, /* 123 */
- { 19, 9, 12, 47, 32, }, /* 124 */
- { 19, 9, 12, 55, 32, }, /* 125 */
- { 19, 9, 12, 30, 32, }, /* 126 */
- { 19, 9, 12, 43, 32, }, /* 127 */
- { 19, 9, 12, 67, 32, }, /* 128 */
- { 19, 5, 12, 0, -38, }, /* 129 */
- { 19, 5, 12, 0, -37, }, /* 130 */
- { 19, 5, 12, 0, -32, }, /* 131 */
- { 19, 5, 12, 34, -32, }, /* 132 */
- { 19, 5, 12, 59, -32, }, /* 133 */
- { 19, 5, 12, 38, -32, }, /* 134 */
- { 19, 5, 12, 21, -116, }, /* 135 */
- { 19, 5, 12, 51, -32, }, /* 136 */
- { 19, 5, 12, 26, -775, }, /* 137 */
- { 19, 5, 12, 47, -32, }, /* 138 */
- { 19, 5, 12, 55, -32, }, /* 139 */
- { 19, 5, 12, 30, 1, }, /* 140 */
- { 19, 5, 12, 30, -32, }, /* 141 */
- { 19, 5, 12, 43, -32, }, /* 142 */
- { 19, 5, 12, 67, -32, }, /* 143 */
- { 19, 5, 12, 0, -64, }, /* 144 */
- { 19, 5, 12, 0, -63, }, /* 145 */
- { 19, 9, 12, 0, 8, }, /* 146 */
- { 19, 5, 12, 34, -30, }, /* 147 */
- { 19, 5, 12, 38, -25, }, /* 148 */
- { 19, 9, 12, 0, 0, }, /* 149 */
- { 19, 5, 12, 43, -15, }, /* 150 */
- { 19, 5, 12, 47, -22, }, /* 151 */
- { 19, 5, 12, 0, -8, }, /* 152 */
- { 10, 9, 12, 0, 1, }, /* 153 */
- { 10, 5, 12, 0, -1, }, /* 154 */
- { 19, 5, 12, 51, -54, }, /* 155 */
- { 19, 5, 12, 55, -48, }, /* 156 */
- { 19, 5, 12, 0, 7, }, /* 157 */
- { 19, 9, 12, 38, -60, }, /* 158 */
- { 19, 5, 12, 59, -64, }, /* 159 */
- { 19, 25, 12, 0, 0, }, /* 160 */
- { 19, 9, 12, 0, -7, }, /* 161 */
- { 19, 9, 12, 0, -130, }, /* 162 */
- { 12, 9, 12, 0, 80, }, /* 163 */
- { 12, 9, 12, 0, 32, }, /* 164 */
- { 12, 5, 12, 0, -32, }, /* 165 */
- { 12, 5, 12, 0, -80, }, /* 166 */
- { 12, 9, 12, 0, 1, }, /* 167 */
- { 12, 5, 12, 0, -1, }, /* 168 */
- { 12, 26, 12, 0, 0, }, /* 169 */
- { 12, 12, 3, 0, 0, }, /* 170 */
- { 12, 11, 3, 0, 0, }, /* 171 */
- { 12, 9, 12, 0, 15, }, /* 172 */
- { 12, 5, 12, 0, -15, }, /* 173 */
- { 1, 9, 12, 0, 48, }, /* 174 */
- { 1, 6, 12, 0, 0, }, /* 175 */
- { 1, 21, 12, 0, 0, }, /* 176 */
- { 1, 5, 12, 0, -48, }, /* 177 */
- { 1, 5, 12, 0, 0, }, /* 178 */
- { 1, 17, 12, 0, 0, }, /* 179 */
- { 1, 23, 12, 0, 0, }, /* 180 */
- { 25, 12, 3, 0, 0, }, /* 181 */
- { 25, 17, 12, 0, 0, }, /* 182 */
- { 25, 21, 12, 0, 0, }, /* 183 */
- { 25, 7, 12, 0, 0, }, /* 184 */
- { 0, 1, 2, 0, 0, }, /* 185 */
- { 0, 25, 12, 0, 0, }, /* 186 */
- { 0, 21, 12, 0, 0, }, /* 187 */
- { 0, 23, 12, 0, 0, }, /* 188 */
- { 0, 26, 12, 0, 0, }, /* 189 */
- { 0, 12, 3, 0, 0, }, /* 190 */
- { 0, 7, 12, 0, 0, }, /* 191 */
- { 0, 6, 12, 0, 0, }, /* 192 */
- { 0, 13, 12, 0, 0, }, /* 193 */
- { 49, 21, 12, 0, 0, }, /* 194 */
- { 49, 1, 2, 0, 0, }, /* 195 */
- { 49, 7, 12, 0, 0, }, /* 196 */
- { 49, 12, 3, 0, 0, }, /* 197 */
- { 55, 7, 12, 0, 0, }, /* 198 */
- { 55, 12, 3, 0, 0, }, /* 199 */
- { 63, 13, 12, 0, 0, }, /* 200 */
- { 63, 7, 12, 0, 0, }, /* 201 */
- { 63, 12, 3, 0, 0, }, /* 202 */
- { 63, 6, 12, 0, 0, }, /* 203 */
- { 63, 26, 12, 0, 0, }, /* 204 */
- { 63, 21, 12, 0, 0, }, /* 205 */
- { 89, 7, 12, 0, 0, }, /* 206 */
- { 89, 12, 3, 0, 0, }, /* 207 */
- { 89, 6, 12, 0, 0, }, /* 208 */
- { 89, 21, 12, 0, 0, }, /* 209 */
- { 94, 7, 12, 0, 0, }, /* 210 */
- { 94, 12, 3, 0, 0, }, /* 211 */
- { 94, 21, 12, 0, 0, }, /* 212 */
- { 14, 12, 3, 0, 0, }, /* 213 */
- { 14, 10, 5, 0, 0, }, /* 214 */
- { 14, 7, 12, 0, 0, }, /* 215 */
- { 14, 13, 12, 0, 0, }, /* 216 */
- { 14, 21, 12, 0, 0, }, /* 217 */
- { 14, 6, 12, 0, 0, }, /* 218 */
- { 2, 12, 3, 0, 0, }, /* 219 */
- { 2, 10, 5, 0, 0, }, /* 220 */
- { 2, 7, 12, 0, 0, }, /* 221 */
- { 2, 10, 3, 0, 0, }, /* 222 */
- { 2, 13, 12, 0, 0, }, /* 223 */
- { 2, 23, 12, 0, 0, }, /* 224 */
- { 2, 15, 12, 0, 0, }, /* 225 */
- { 2, 26, 12, 0, 0, }, /* 226 */
- { 21, 12, 3, 0, 0, }, /* 227 */
- { 21, 10, 5, 0, 0, }, /* 228 */
- { 21, 7, 12, 0, 0, }, /* 229 */
- { 21, 13, 12, 0, 0, }, /* 230 */
- { 20, 12, 3, 0, 0, }, /* 231 */
- { 20, 10, 5, 0, 0, }, /* 232 */
- { 20, 7, 12, 0, 0, }, /* 233 */
- { 20, 13, 12, 0, 0, }, /* 234 */
- { 20, 21, 12, 0, 0, }, /* 235 */
- { 20, 23, 12, 0, 0, }, /* 236 */
- { 43, 12, 3, 0, 0, }, /* 237 */
- { 43, 10, 5, 0, 0, }, /* 238 */
- { 43, 7, 12, 0, 0, }, /* 239 */
- { 43, 10, 3, 0, 0, }, /* 240 */
- { 43, 13, 12, 0, 0, }, /* 241 */
- { 43, 26, 12, 0, 0, }, /* 242 */
- { 43, 15, 12, 0, 0, }, /* 243 */
- { 53, 12, 3, 0, 0, }, /* 244 */
- { 53, 7, 12, 0, 0, }, /* 245 */
- { 53, 10, 3, 0, 0, }, /* 246 */
- { 53, 10, 5, 0, 0, }, /* 247 */
- { 53, 13, 12, 0, 0, }, /* 248 */
- { 53, 15, 12, 0, 0, }, /* 249 */
- { 53, 26, 12, 0, 0, }, /* 250 */
- { 53, 23, 12, 0, 0, }, /* 251 */
- { 54, 10, 5, 0, 0, }, /* 252 */
- { 54, 7, 12, 0, 0, }, /* 253 */
- { 54, 12, 3, 0, 0, }, /* 254 */
- { 54, 13, 12, 0, 0, }, /* 255 */
- { 54, 15, 12, 0, 0, }, /* 256 */
- { 54, 26, 12, 0, 0, }, /* 257 */
- { 28, 10, 5, 0, 0, }, /* 258 */
- { 28, 7, 12, 0, 0, }, /* 259 */
- { 28, 12, 3, 0, 0, }, /* 260 */
- { 28, 10, 3, 0, 0, }, /* 261 */
- { 28, 13, 12, 0, 0, }, /* 262 */
- { 36, 10, 5, 0, 0, }, /* 263 */
- { 36, 7, 12, 0, 0, }, /* 264 */
- { 36, 10, 3, 0, 0, }, /* 265 */
- { 36, 12, 3, 0, 0, }, /* 266 */
- { 36, 13, 12, 0, 0, }, /* 267 */
- { 36, 15, 12, 0, 0, }, /* 268 */
- { 36, 26, 12, 0, 0, }, /* 269 */
- { 47, 10, 5, 0, 0, }, /* 270 */
- { 47, 7, 12, 0, 0, }, /* 271 */
- { 47, 12, 3, 0, 0, }, /* 272 */
- { 47, 10, 3, 0, 0, }, /* 273 */
- { 47, 21, 12, 0, 0, }, /* 274 */
- { 56, 7, 12, 0, 0, }, /* 275 */
- { 56, 12, 3, 0, 0, }, /* 276 */
- { 56, 7, 5, 0, 0, }, /* 277 */
- { 56, 6, 12, 0, 0, }, /* 278 */
- { 56, 21, 12, 0, 0, }, /* 279 */
- { 56, 13, 12, 0, 0, }, /* 280 */
- { 32, 7, 12, 0, 0, }, /* 281 */
- { 32, 12, 3, 0, 0, }, /* 282 */
- { 32, 7, 5, 0, 0, }, /* 283 */
- { 32, 6, 12, 0, 0, }, /* 284 */
- { 32, 13, 12, 0, 0, }, /* 285 */
- { 57, 7, 12, 0, 0, }, /* 286 */
- { 57, 26, 12, 0, 0, }, /* 287 */
- { 57, 21, 12, 0, 0, }, /* 288 */
- { 57, 12, 3, 0, 0, }, /* 289 */
- { 57, 13, 12, 0, 0, }, /* 290 */
- { 57, 15, 12, 0, 0, }, /* 291 */
- { 57, 22, 12, 0, 0, }, /* 292 */
- { 57, 18, 12, 0, 0, }, /* 293 */
- { 57, 10, 5, 0, 0, }, /* 294 */
- { 38, 7, 12, 0, 0, }, /* 295 */
- { 38, 10, 12, 0, 0, }, /* 296 */
- { 38, 12, 3, 0, 0, }, /* 297 */
- { 38, 10, 5, 0, 0, }, /* 298 */
- { 38, 13, 12, 0, 0, }, /* 299 */
- { 38, 21, 12, 0, 0, }, /* 300 */
- { 38, 26, 12, 0, 0, }, /* 301 */
- { 16, 9, 12, 0, 7264, }, /* 302 */
- { 16, 7, 12, 0, 0, }, /* 303 */
- { 16, 6, 12, 0, 0, }, /* 304 */
- { 23, 7, 6, 0, 0, }, /* 305 */
- { 23, 7, 7, 0, 0, }, /* 306 */
- { 23, 7, 8, 0, 0, }, /* 307 */
- { 15, 7, 12, 0, 0, }, /* 308 */
- { 15, 12, 3, 0, 0, }, /* 309 */
- { 15, 21, 12, 0, 0, }, /* 310 */
- { 15, 15, 12, 0, 0, }, /* 311 */
- { 15, 26, 12, 0, 0, }, /* 312 */
- { 8, 7, 12, 0, 0, }, /* 313 */
- { 7, 17, 12, 0, 0, }, /* 314 */
- { 7, 7, 12, 0, 0, }, /* 315 */
- { 7, 21, 12, 0, 0, }, /* 316 */
- { 40, 29, 12, 0, 0, }, /* 317 */
- { 40, 7, 12, 0, 0, }, /* 318 */
- { 40, 22, 12, 0, 0, }, /* 319 */
- { 40, 18, 12, 0, 0, }, /* 320 */
- { 45, 7, 12, 0, 0, }, /* 321 */
- { 45, 14, 12, 0, 0, }, /* 322 */
- { 50, 7, 12, 0, 0, }, /* 323 */
- { 50, 12, 3, 0, 0, }, /* 324 */
- { 24, 7, 12, 0, 0, }, /* 325 */
- { 24, 12, 3, 0, 0, }, /* 326 */
- { 6, 7, 12, 0, 0, }, /* 327 */
- { 6, 12, 3, 0, 0, }, /* 328 */
- { 51, 7, 12, 0, 0, }, /* 329 */
- { 51, 12, 3, 0, 0, }, /* 330 */
- { 31, 7, 12, 0, 0, }, /* 331 */
- { 31, 12, 3, 0, 0, }, /* 332 */
- { 31, 10, 5, 0, 0, }, /* 333 */
- { 31, 21, 12, 0, 0, }, /* 334 */
- { 31, 6, 12, 0, 0, }, /* 335 */
- { 31, 23, 12, 0, 0, }, /* 336 */
- { 31, 13, 12, 0, 0, }, /* 337 */
- { 31, 15, 12, 0, 0, }, /* 338 */
- { 37, 21, 12, 0, 0, }, /* 339 */
- { 37, 17, 12, 0, 0, }, /* 340 */
- { 37, 12, 3, 0, 0, }, /* 341 */
- { 37, 1, 2, 0, 0, }, /* 342 */
- { 37, 13, 12, 0, 0, }, /* 343 */
- { 37, 7, 12, 0, 0, }, /* 344 */
- { 37, 6, 12, 0, 0, }, /* 345 */
- { 34, 7, 12, 0, 0, }, /* 346 */
- { 34, 12, 3, 0, 0, }, /* 347 */
- { 34, 10, 5, 0, 0, }, /* 348 */
- { 34, 26, 12, 0, 0, }, /* 349 */
- { 34, 21, 12, 0, 0, }, /* 350 */
- { 34, 13, 12, 0, 0, }, /* 351 */
- { 52, 7, 12, 0, 0, }, /* 352 */
- { 39, 7, 12, 0, 0, }, /* 353 */
- { 39, 10, 12, 0, 0, }, /* 354 */
- { 39, 10, 5, 0, 0, }, /* 355 */
- { 39, 13, 12, 0, 0, }, /* 356 */
- { 39, 15, 12, 0, 0, }, /* 357 */
- { 39, 26, 12, 0, 0, }, /* 358 */
- { 31, 26, 12, 0, 0, }, /* 359 */
- { 5, 7, 12, 0, 0, }, /* 360 */
- { 5, 12, 3, 0, 0, }, /* 361 */
- { 5, 10, 5, 0, 0, }, /* 362 */
- { 5, 21, 12, 0, 0, }, /* 363 */
- { 90, 7, 12, 0, 0, }, /* 364 */
- { 90, 10, 5, 0, 0, }, /* 365 */
- { 90, 12, 3, 0, 0, }, /* 366 */
- { 90, 10, 12, 0, 0, }, /* 367 */
- { 90, 13, 12, 0, 0, }, /* 368 */
- { 90, 21, 12, 0, 0, }, /* 369 */
- { 90, 6, 12, 0, 0, }, /* 370 */
- { 61, 12, 3, 0, 0, }, /* 371 */
- { 61, 10, 5, 0, 0, }, /* 372 */
- { 61, 7, 12, 0, 0, }, /* 373 */
- { 61, 13, 12, 0, 0, }, /* 374 */
- { 61, 21, 12, 0, 0, }, /* 375 */
- { 61, 26, 12, 0, 0, }, /* 376 */
- { 75, 12, 3, 0, 0, }, /* 377 */
- { 75, 10, 5, 0, 0, }, /* 378 */
- { 75, 7, 12, 0, 0, }, /* 379 */
- { 75, 13, 12, 0, 0, }, /* 380 */
- { 92, 7, 12, 0, 0, }, /* 381 */
- { 92, 12, 3, 0, 0, }, /* 382 */
- { 92, 10, 5, 0, 0, }, /* 383 */
- { 92, 21, 12, 0, 0, }, /* 384 */
- { 69, 7, 12, 0, 0, }, /* 385 */
- { 69, 10, 5, 0, 0, }, /* 386 */
- { 69, 12, 3, 0, 0, }, /* 387 */
- { 69, 21, 12, 0, 0, }, /* 388 */
- { 69, 13, 12, 0, 0, }, /* 389 */
- { 72, 13, 12, 0, 0, }, /* 390 */
- { 72, 7, 12, 0, 0, }, /* 391 */
- { 72, 6, 12, 0, 0, }, /* 392 */
- { 72, 21, 12, 0, 0, }, /* 393 */
- { 75, 21, 12, 0, 0, }, /* 394 */
- { 9, 10, 5, 0, 0, }, /* 395 */
- { 9, 7, 12, 0, 0, }, /* 396 */
- { 12, 5, 12, 0, 0, }, /* 397 */
- { 12, 6, 12, 0, 0, }, /* 398 */
- { 33, 5, 12, 0, 35332, }, /* 399 */
- { 33, 5, 12, 0, 3814, }, /* 400 */
- { 33, 9, 12, 63, 1, }, /* 401 */
- { 33, 5, 12, 63, -1, }, /* 402 */
- { 33, 5, 12, 63, -58, }, /* 403 */
- { 33, 9, 12, 0, -7615, }, /* 404 */
- { 19, 5, 12, 0, 8, }, /* 405 */
- { 19, 9, 12, 0, -8, }, /* 406 */
- { 19, 5, 12, 0, 74, }, /* 407 */
- { 19, 5, 12, 0, 86, }, /* 408 */
- { 19, 5, 12, 0, 100, }, /* 409 */
- { 19, 5, 12, 0, 128, }, /* 410 */
- { 19, 5, 12, 0, 112, }, /* 411 */
- { 19, 5, 12, 0, 126, }, /* 412 */
- { 19, 8, 12, 0, -8, }, /* 413 */
- { 19, 5, 12, 0, 9, }, /* 414 */
- { 19, 9, 12, 0, -74, }, /* 415 */
- { 19, 8, 12, 0, -9, }, /* 416 */
- { 19, 5, 12, 21, -7173, }, /* 417 */
- { 19, 9, 12, 0, -86, }, /* 418 */
- { 19, 9, 12, 0, -100, }, /* 419 */
- { 19, 9, 12, 0, -112, }, /* 420 */
- { 19, 9, 12, 0, -128, }, /* 421 */
- { 19, 9, 12, 0, -126, }, /* 422 */
- { 27, 1, 3, 0, 0, }, /* 423 */
- { 9, 27, 2, 0, 0, }, /* 424 */
- { 9, 28, 2, 0, 0, }, /* 425 */
- { 9, 2, 2, 0, 0, }, /* 426 */
- { 27, 11, 3, 0, 0, }, /* 427 */
- { 9, 9, 12, 0, 0, }, /* 428 */
- { 9, 5, 12, 0, 0, }, /* 429 */
- { 19, 9, 12, 67, -7517, }, /* 430 */
- { 33, 9, 12, 71, -8383, }, /* 431 */
- { 33, 9, 12, 75, -8262, }, /* 432 */
- { 33, 9, 12, 0, 28, }, /* 433 */
- { 33, 5, 12, 0, -28, }, /* 434 */
- { 33, 14, 12, 0, 16, }, /* 435 */
- { 33, 14, 12, 0, -16, }, /* 436 */
- { 33, 14, 12, 0, 0, }, /* 437 */
- { 9, 26, 12, 0, 26, }, /* 438 */
- { 9, 26, 12, 0, -26, }, /* 439 */
- { 4, 26, 12, 0, 0, }, /* 440 */
- { 17, 9, 12, 0, 48, }, /* 441 */
- { 17, 5, 12, 0, -48, }, /* 442 */
- { 33, 9, 12, 0, -10743, }, /* 443 */
- { 33, 9, 12, 0, -3814, }, /* 444 */
- { 33, 9, 12, 0, -10727, }, /* 445 */
- { 33, 5, 12, 0, -10795, }, /* 446 */
- { 33, 5, 12, 0, -10792, }, /* 447 */
- { 33, 9, 12, 0, -10780, }, /* 448 */
- { 33, 9, 12, 0, -10749, }, /* 449 */
- { 33, 9, 12, 0, -10783, }, /* 450 */
- { 33, 9, 12, 0, -10782, }, /* 451 */
- { 33, 9, 12, 0, -10815, }, /* 452 */
- { 10, 5, 12, 0, 0, }, /* 453 */
- { 10, 26, 12, 0, 0, }, /* 454 */
- { 10, 12, 3, 0, 0, }, /* 455 */
- { 10, 21, 12, 0, 0, }, /* 456 */
- { 10, 15, 12, 0, 0, }, /* 457 */
- { 16, 5, 12, 0, -7264, }, /* 458 */
- { 58, 7, 12, 0, 0, }, /* 459 */
- { 58, 6, 12, 0, 0, }, /* 460 */
- { 58, 21, 12, 0, 0, }, /* 461 */
- { 58, 12, 3, 0, 0, }, /* 462 */
- { 22, 26, 12, 0, 0, }, /* 463 */
- { 22, 6, 12, 0, 0, }, /* 464 */
- { 22, 14, 12, 0, 0, }, /* 465 */
- { 23, 10, 3, 0, 0, }, /* 466 */
- { 26, 7, 12, 0, 0, }, /* 467 */
- { 26, 6, 12, 0, 0, }, /* 468 */
- { 29, 7, 12, 0, 0, }, /* 469 */
- { 29, 6, 12, 0, 0, }, /* 470 */
- { 3, 7, 12, 0, 0, }, /* 471 */
- { 23, 7, 12, 0, 0, }, /* 472 */
- { 23, 26, 12, 0, 0, }, /* 473 */
- { 29, 26, 12, 0, 0, }, /* 474 */
- { 22, 7, 12, 0, 0, }, /* 475 */
- { 60, 7, 12, 0, 0, }, /* 476 */
- { 60, 6, 12, 0, 0, }, /* 477 */
- { 60, 26, 12, 0, 0, }, /* 478 */
- { 85, 7, 12, 0, 0, }, /* 479 */
- { 85, 6, 12, 0, 0, }, /* 480 */
- { 85, 21, 12, 0, 0, }, /* 481 */
- { 76, 7, 12, 0, 0, }, /* 482 */
- { 76, 6, 12, 0, 0, }, /* 483 */
- { 76, 21, 12, 0, 0, }, /* 484 */
- { 76, 13, 12, 0, 0, }, /* 485 */
- { 12, 7, 12, 0, 0, }, /* 486 */
- { 12, 21, 12, 0, 0, }, /* 487 */
- { 78, 7, 12, 0, 0, }, /* 488 */
- { 78, 14, 12, 0, 0, }, /* 489 */
- { 78, 12, 3, 0, 0, }, /* 490 */
- { 78, 21, 12, 0, 0, }, /* 491 */
- { 33, 9, 12, 0, -35332, }, /* 492 */
- { 33, 9, 12, 0, -42280, }, /* 493 */
- { 33, 9, 12, 0, -42308, }, /* 494 */
- { 48, 7, 12, 0, 0, }, /* 495 */
- { 48, 12, 3, 0, 0, }, /* 496 */
- { 48, 10, 5, 0, 0, }, /* 497 */
- { 48, 26, 12, 0, 0, }, /* 498 */
- { 64, 7, 12, 0, 0, }, /* 499 */
- { 64, 21, 12, 0, 0, }, /* 500 */
- { 74, 10, 5, 0, 0, }, /* 501 */
- { 74, 7, 12, 0, 0, }, /* 502 */
- { 74, 12, 3, 0, 0, }, /* 503 */
- { 74, 21, 12, 0, 0, }, /* 504 */
- { 74, 13, 12, 0, 0, }, /* 505 */
- { 68, 13, 12, 0, 0, }, /* 506 */
- { 68, 7, 12, 0, 0, }, /* 507 */
- { 68, 12, 3, 0, 0, }, /* 508 */
- { 68, 21, 12, 0, 0, }, /* 509 */
- { 73, 7, 12, 0, 0, }, /* 510 */
- { 73, 12, 3, 0, 0, }, /* 511 */
- { 73, 10, 5, 0, 0, }, /* 512 */
- { 73, 21, 12, 0, 0, }, /* 513 */
- { 83, 12, 3, 0, 0, }, /* 514 */
- { 83, 10, 5, 0, 0, }, /* 515 */
- { 83, 7, 12, 0, 0, }, /* 516 */
- { 83, 21, 12, 0, 0, }, /* 517 */
- { 83, 13, 12, 0, 0, }, /* 518 */
- { 67, 7, 12, 0, 0, }, /* 519 */
- { 67, 12, 3, 0, 0, }, /* 520 */
- { 67, 10, 5, 0, 0, }, /* 521 */
- { 67, 13, 12, 0, 0, }, /* 522 */
- { 67, 21, 12, 0, 0, }, /* 523 */
- { 38, 6, 12, 0, 0, }, /* 524 */
- { 91, 7, 12, 0, 0, }, /* 525 */
- { 91, 12, 3, 0, 0, }, /* 526 */
- { 91, 6, 12, 0, 0, }, /* 527 */
- { 91, 21, 12, 0, 0, }, /* 528 */
- { 86, 7, 12, 0, 0, }, /* 529 */
- { 86, 10, 5, 0, 0, }, /* 530 */
- { 86, 12, 3, 0, 0, }, /* 531 */
- { 86, 21, 12, 0, 0, }, /* 532 */
- { 86, 6, 12, 0, 0, }, /* 533 */
- { 86, 13, 12, 0, 0, }, /* 534 */
- { 23, 7, 9, 0, 0, }, /* 535 */
- { 23, 7, 10, 0, 0, }, /* 536 */
- { 9, 4, 2, 0, 0, }, /* 537 */
- { 9, 3, 12, 0, 0, }, /* 538 */
- { 25, 25, 12, 0, 0, }, /* 539 */
- { 0, 24, 12, 0, 0, }, /* 540 */
- { 9, 6, 3, 0, 0, }, /* 541 */
- { 35, 7, 12, 0, 0, }, /* 542 */
- { 19, 14, 12, 0, 0, }, /* 543 */
- { 19, 15, 12, 0, 0, }, /* 544 */
- { 19, 26, 12, 0, 0, }, /* 545 */
- { 70, 7, 12, 0, 0, }, /* 546 */
- { 66, 7, 12, 0, 0, }, /* 547 */
- { 41, 7, 12, 0, 0, }, /* 548 */
- { 41, 15, 12, 0, 0, }, /* 549 */
- { 18, 7, 12, 0, 0, }, /* 550 */
- { 18, 14, 12, 0, 0, }, /* 551 */
- { 59, 7, 12, 0, 0, }, /* 552 */
- { 59, 21, 12, 0, 0, }, /* 553 */
- { 42, 7, 12, 0, 0, }, /* 554 */
- { 42, 21, 12, 0, 0, }, /* 555 */
- { 42, 14, 12, 0, 0, }, /* 556 */
- { 13, 9, 12, 0, 40, }, /* 557 */
- { 13, 5, 12, 0, -40, }, /* 558 */
- { 46, 7, 12, 0, 0, }, /* 559 */
- { 44, 7, 12, 0, 0, }, /* 560 */
- { 44, 13, 12, 0, 0, }, /* 561 */
- { 11, 7, 12, 0, 0, }, /* 562 */
- { 80, 7, 12, 0, 0, }, /* 563 */
- { 80, 21, 12, 0, 0, }, /* 564 */
- { 80, 15, 12, 0, 0, }, /* 565 */
- { 65, 7, 12, 0, 0, }, /* 566 */
- { 65, 15, 12, 0, 0, }, /* 567 */
- { 65, 21, 12, 0, 0, }, /* 568 */
- { 71, 7, 12, 0, 0, }, /* 569 */
- { 71, 21, 12, 0, 0, }, /* 570 */
- { 97, 7, 12, 0, 0, }, /* 571 */
- { 96, 7, 12, 0, 0, }, /* 572 */
- { 30, 7, 12, 0, 0, }, /* 573 */
- { 30, 12, 3, 0, 0, }, /* 574 */
- { 30, 15, 12, 0, 0, }, /* 575 */
- { 30, 21, 12, 0, 0, }, /* 576 */
- { 87, 7, 12, 0, 0, }, /* 577 */
- { 87, 15, 12, 0, 0, }, /* 578 */
- { 87, 21, 12, 0, 0, }, /* 579 */
- { 77, 7, 12, 0, 0, }, /* 580 */
- { 77, 21, 12, 0, 0, }, /* 581 */
- { 82, 7, 12, 0, 0, }, /* 582 */
- { 82, 15, 12, 0, 0, }, /* 583 */
- { 81, 7, 12, 0, 0, }, /* 584 */
- { 81, 15, 12, 0, 0, }, /* 585 */
- { 88, 7, 12, 0, 0, }, /* 586 */
- { 0, 15, 12, 0, 0, }, /* 587 */
- { 93, 10, 5, 0, 0, }, /* 588 */
- { 93, 12, 3, 0, 0, }, /* 589 */
- { 93, 7, 12, 0, 0, }, /* 590 */
- { 93, 21, 12, 0, 0, }, /* 591 */
- { 93, 15, 12, 0, 0, }, /* 592 */
- { 93, 13, 12, 0, 0, }, /* 593 */
- { 84, 12, 3, 0, 0, }, /* 594 */
- { 84, 10, 5, 0, 0, }, /* 595 */
- { 84, 7, 12, 0, 0, }, /* 596 */
- { 84, 21, 12, 0, 0, }, /* 597 */
- { 84, 1, 2, 0, 0, }, /* 598 */
- { 100, 7, 12, 0, 0, }, /* 599 */
- { 100, 13, 12, 0, 0, }, /* 600 */
- { 95, 12, 3, 0, 0, }, /* 601 */
- { 95, 7, 12, 0, 0, }, /* 602 */
- { 95, 10, 5, 0, 0, }, /* 603 */
- { 95, 13, 12, 0, 0, }, /* 604 */
- { 95, 21, 12, 0, 0, }, /* 605 */
- { 99, 12, 3, 0, 0, }, /* 606 */
- { 99, 10, 5, 0, 0, }, /* 607 */
- { 99, 7, 12, 0, 0, }, /* 608 */
- { 99, 21, 12, 0, 0, }, /* 609 */
- { 99, 13, 12, 0, 0, }, /* 610 */
- { 101, 7, 12, 0, 0, }, /* 611 */
- { 101, 12, 3, 0, 0, }, /* 612 */
- { 101, 10, 5, 0, 0, }, /* 613 */
- { 101, 13, 12, 0, 0, }, /* 614 */
- { 62, 7, 12, 0, 0, }, /* 615 */
- { 62, 14, 12, 0, 0, }, /* 616 */
- { 62, 21, 12, 0, 0, }, /* 617 */
- { 79, 7, 12, 0, 0, }, /* 618 */
- { 98, 7, 12, 0, 0, }, /* 619 */
- { 98, 10, 5, 0, 0, }, /* 620 */
- { 98, 12, 3, 0, 0, }, /* 621 */
- { 98, 6, 12, 0, 0, }, /* 622 */
- { 9, 10, 3, 0, 0, }, /* 623 */
- { 19, 12, 3, 0, 0, }, /* 624 */
- { 9, 26, 11, 0, 0, }, /* 625 */
- { 26, 26, 12, 0, 0, }, /* 626 */
+ { 33, 5, 12, 0, 42319, }, /* 86 */
+ { 33, 5, 12, 0, 42315, }, /* 87 */
+ { 33, 5, 12, 0, -207, }, /* 88 */
+ { 33, 5, 12, 0, 42280, }, /* 89 */
+ { 33, 5, 12, 0, 42308, }, /* 90 */
+ { 33, 5, 12, 0, -209, }, /* 91 */
+ { 33, 5, 12, 0, -211, }, /* 92 */
+ { 33, 5, 12, 0, 10743, }, /* 93 */
+ { 33, 5, 12, 0, 42305, }, /* 94 */
+ { 33, 5, 12, 0, 10749, }, /* 95 */
+ { 33, 5, 12, 0, -213, }, /* 96 */
+ { 33, 5, 12, 0, -214, }, /* 97 */
+ { 33, 5, 12, 0, 10727, }, /* 98 */
+ { 33, 5, 12, 0, -218, }, /* 99 */
+ { 33, 5, 12, 0, 42282, }, /* 100 */
+ { 33, 5, 12, 0, -69, }, /* 101 */
+ { 33, 5, 12, 0, -217, }, /* 102 */
+ { 33, 5, 12, 0, -71, }, /* 103 */
+ { 33, 5, 12, 0, -219, }, /* 104 */
+ { 33, 5, 12, 0, 42258, }, /* 105 */
+ { 33, 6, 12, 0, 0, }, /* 106 */
+ { 9, 6, 12, 0, 0, }, /* 107 */
+ { 3, 24, 12, 0, 0, }, /* 108 */
+ { 27, 12, 3, 0, 0, }, /* 109 */
+ { 27, 12, 3, 21, 116, }, /* 110 */
+ { 19, 9, 12, 0, 1, }, /* 111 */
+ { 19, 5, 12, 0, -1, }, /* 112 */
+ { 19, 24, 12, 0, 0, }, /* 113 */
+ { 9, 2, 12, 0, 0, }, /* 114 */
+ { 19, 6, 12, 0, 0, }, /* 115 */
+ { 19, 5, 12, 0, 130, }, /* 116 */
+ { 19, 9, 12, 0, 116, }, /* 117 */
+ { 19, 9, 12, 0, 38, }, /* 118 */
+ { 19, 9, 12, 0, 37, }, /* 119 */
+ { 19, 9, 12, 0, 64, }, /* 120 */
+ { 19, 9, 12, 0, 63, }, /* 121 */
+ { 19, 5, 12, 0, 0, }, /* 122 */
+ { 19, 9, 12, 0, 32, }, /* 123 */
+ { 19, 9, 12, 34, 32, }, /* 124 */
+ { 19, 9, 12, 59, 32, }, /* 125 */
+ { 19, 9, 12, 38, 32, }, /* 126 */
+ { 19, 9, 12, 21, 32, }, /* 127 */
+ { 19, 9, 12, 51, 32, }, /* 128 */
+ { 19, 9, 12, 26, 32, }, /* 129 */
+ { 19, 9, 12, 47, 32, }, /* 130 */
+ { 19, 9, 12, 55, 32, }, /* 131 */
+ { 19, 9, 12, 30, 32, }, /* 132 */
+ { 19, 9, 12, 43, 32, }, /* 133 */
+ { 19, 9, 12, 67, 32, }, /* 134 */
+ { 19, 5, 12, 0, -38, }, /* 135 */
+ { 19, 5, 12, 0, -37, }, /* 136 */
+ { 19, 5, 12, 0, -32, }, /* 137 */
+ { 19, 5, 12, 34, -32, }, /* 138 */
+ { 19, 5, 12, 59, -32, }, /* 139 */
+ { 19, 5, 12, 38, -32, }, /* 140 */
+ { 19, 5, 12, 21, -116, }, /* 141 */
+ { 19, 5, 12, 51, -32, }, /* 142 */
+ { 19, 5, 12, 26, -775, }, /* 143 */
+ { 19, 5, 12, 47, -32, }, /* 144 */
+ { 19, 5, 12, 55, -32, }, /* 145 */
+ { 19, 5, 12, 30, 1, }, /* 146 */
+ { 19, 5, 12, 30, -32, }, /* 147 */
+ { 19, 5, 12, 43, -32, }, /* 148 */
+ { 19, 5, 12, 67, -32, }, /* 149 */
+ { 19, 5, 12, 0, -64, }, /* 150 */
+ { 19, 5, 12, 0, -63, }, /* 151 */
+ { 19, 9, 12, 0, 8, }, /* 152 */
+ { 19, 5, 12, 34, -30, }, /* 153 */
+ { 19, 5, 12, 38, -25, }, /* 154 */
+ { 19, 9, 12, 0, 0, }, /* 155 */
+ { 19, 5, 12, 43, -15, }, /* 156 */
+ { 19, 5, 12, 47, -22, }, /* 157 */
+ { 19, 5, 12, 0, -8, }, /* 158 */
+ { 10, 9, 12, 0, 1, }, /* 159 */
+ { 10, 5, 12, 0, -1, }, /* 160 */
+ { 19, 5, 12, 51, -54, }, /* 161 */
+ { 19, 5, 12, 55, -48, }, /* 162 */
+ { 19, 5, 12, 0, 7, }, /* 163 */
+ { 19, 5, 12, 0, -116, }, /* 164 */
+ { 19, 9, 12, 38, -60, }, /* 165 */
+ { 19, 5, 12, 59, -64, }, /* 166 */
+ { 19, 25, 12, 0, 0, }, /* 167 */
+ { 19, 9, 12, 0, -7, }, /* 168 */
+ { 19, 9, 12, 0, -130, }, /* 169 */
+ { 12, 9, 12, 0, 80, }, /* 170 */
+ { 12, 9, 12, 0, 32, }, /* 171 */
+ { 12, 5, 12, 0, -32, }, /* 172 */
+ { 12, 5, 12, 0, -80, }, /* 173 */
+ { 12, 9, 12, 0, 1, }, /* 174 */
+ { 12, 5, 12, 0, -1, }, /* 175 */
+ { 12, 26, 12, 0, 0, }, /* 176 */
+ { 12, 12, 3, 0, 0, }, /* 177 */
+ { 12, 11, 3, 0, 0, }, /* 178 */
+ { 12, 9, 12, 0, 15, }, /* 179 */
+ { 12, 5, 12, 0, -15, }, /* 180 */
+ { 1, 9, 12, 0, 48, }, /* 181 */
+ { 1, 6, 12, 0, 0, }, /* 182 */
+ { 1, 21, 12, 0, 0, }, /* 183 */
+ { 1, 5, 12, 0, -48, }, /* 184 */
+ { 1, 5, 12, 0, 0, }, /* 185 */
+ { 1, 17, 12, 0, 0, }, /* 186 */
+ { 1, 26, 12, 0, 0, }, /* 187 */
+ { 1, 23, 12, 0, 0, }, /* 188 */
+ { 25, 12, 3, 0, 0, }, /* 189 */
+ { 25, 17, 12, 0, 0, }, /* 190 */
+ { 25, 21, 12, 0, 0, }, /* 191 */
+ { 25, 7, 12, 0, 0, }, /* 192 */
+ { 0, 1, 2, 0, 0, }, /* 193 */
+ { 0, 25, 12, 0, 0, }, /* 194 */
+ { 0, 21, 12, 0, 0, }, /* 195 */
+ { 0, 23, 12, 0, 0, }, /* 196 */
+ { 0, 26, 12, 0, 0, }, /* 197 */
+ { 0, 12, 3, 0, 0, }, /* 198 */
+ { 0, 7, 12, 0, 0, }, /* 199 */
+ { 0, 6, 12, 0, 0, }, /* 200 */
+ { 0, 13, 12, 0, 0, }, /* 201 */
+ { 49, 21, 12, 0, 0, }, /* 202 */
+ { 49, 1, 2, 0, 0, }, /* 203 */
+ { 49, 7, 12, 0, 0, }, /* 204 */
+ { 49, 12, 3, 0, 0, }, /* 205 */
+ { 55, 7, 12, 0, 0, }, /* 206 */
+ { 55, 12, 3, 0, 0, }, /* 207 */
+ { 63, 13, 12, 0, 0, }, /* 208 */
+ { 63, 7, 12, 0, 0, }, /* 209 */
+ { 63, 12, 3, 0, 0, }, /* 210 */
+ { 63, 6, 12, 0, 0, }, /* 211 */
+ { 63, 26, 12, 0, 0, }, /* 212 */
+ { 63, 21, 12, 0, 0, }, /* 213 */
+ { 89, 7, 12, 0, 0, }, /* 214 */
+ { 89, 12, 3, 0, 0, }, /* 215 */
+ { 89, 6, 12, 0, 0, }, /* 216 */
+ { 89, 21, 12, 0, 0, }, /* 217 */
+ { 94, 7, 12, 0, 0, }, /* 218 */
+ { 94, 12, 3, 0, 0, }, /* 219 */
+ { 94, 21, 12, 0, 0, }, /* 220 */
+ { 14, 12, 3, 0, 0, }, /* 221 */
+ { 14, 10, 5, 0, 0, }, /* 222 */
+ { 14, 7, 12, 0, 0, }, /* 223 */
+ { 14, 13, 12, 0, 0, }, /* 224 */
+ { 14, 21, 12, 0, 0, }, /* 225 */
+ { 14, 6, 12, 0, 0, }, /* 226 */
+ { 2, 7, 12, 0, 0, }, /* 227 */
+ { 2, 12, 3, 0, 0, }, /* 228 */
+ { 2, 10, 5, 0, 0, }, /* 229 */
+ { 2, 10, 3, 0, 0, }, /* 230 */
+ { 2, 13, 12, 0, 0, }, /* 231 */
+ { 2, 23, 12, 0, 0, }, /* 232 */
+ { 2, 15, 12, 0, 0, }, /* 233 */
+ { 2, 26, 12, 0, 0, }, /* 234 */
+ { 21, 12, 3, 0, 0, }, /* 235 */
+ { 21, 10, 5, 0, 0, }, /* 236 */
+ { 21, 7, 12, 0, 0, }, /* 237 */
+ { 21, 13, 12, 0, 0, }, /* 238 */
+ { 20, 12, 3, 0, 0, }, /* 239 */
+ { 20, 10, 5, 0, 0, }, /* 240 */
+ { 20, 7, 12, 0, 0, }, /* 241 */
+ { 20, 13, 12, 0, 0, }, /* 242 */
+ { 20, 21, 12, 0, 0, }, /* 243 */
+ { 20, 23, 12, 0, 0, }, /* 244 */
+ { 43, 12, 3, 0, 0, }, /* 245 */
+ { 43, 10, 5, 0, 0, }, /* 246 */
+ { 43, 7, 12, 0, 0, }, /* 247 */
+ { 43, 10, 3, 0, 0, }, /* 248 */
+ { 43, 13, 12, 0, 0, }, /* 249 */
+ { 43, 26, 12, 0, 0, }, /* 250 */
+ { 43, 15, 12, 0, 0, }, /* 251 */
+ { 53, 12, 3, 0, 0, }, /* 252 */
+ { 53, 7, 12, 0, 0, }, /* 253 */
+ { 53, 10, 3, 0, 0, }, /* 254 */
+ { 53, 10, 5, 0, 0, }, /* 255 */
+ { 53, 13, 12, 0, 0, }, /* 256 */
+ { 53, 15, 12, 0, 0, }, /* 257 */
+ { 53, 26, 12, 0, 0, }, /* 258 */
+ { 53, 23, 12, 0, 0, }, /* 259 */
+ { 54, 12, 3, 0, 0, }, /* 260 */
+ { 54, 10, 5, 0, 0, }, /* 261 */
+ { 54, 7, 12, 0, 0, }, /* 262 */
+ { 54, 13, 12, 0, 0, }, /* 263 */
+ { 54, 15, 12, 0, 0, }, /* 264 */
+ { 54, 26, 12, 0, 0, }, /* 265 */
+ { 28, 12, 3, 0, 0, }, /* 266 */
+ { 28, 10, 5, 0, 0, }, /* 267 */
+ { 28, 7, 12, 0, 0, }, /* 268 */
+ { 28, 10, 3, 0, 0, }, /* 269 */
+ { 28, 13, 12, 0, 0, }, /* 270 */
+ { 36, 12, 3, 0, 0, }, /* 271 */
+ { 36, 10, 5, 0, 0, }, /* 272 */
+ { 36, 7, 12, 0, 0, }, /* 273 */
+ { 36, 10, 3, 0, 0, }, /* 274 */
+ { 36, 13, 12, 0, 0, }, /* 275 */
+ { 36, 15, 12, 0, 0, }, /* 276 */
+ { 36, 26, 12, 0, 0, }, /* 277 */
+ { 47, 10, 5, 0, 0, }, /* 278 */
+ { 47, 7, 12, 0, 0, }, /* 279 */
+ { 47, 12, 3, 0, 0, }, /* 280 */
+ { 47, 10, 3, 0, 0, }, /* 281 */
+ { 47, 13, 12, 0, 0, }, /* 282 */
+ { 47, 21, 12, 0, 0, }, /* 283 */
+ { 56, 7, 12, 0, 0, }, /* 284 */
+ { 56, 12, 3, 0, 0, }, /* 285 */
+ { 56, 7, 5, 0, 0, }, /* 286 */
+ { 56, 6, 12, 0, 0, }, /* 287 */
+ { 56, 21, 12, 0, 0, }, /* 288 */
+ { 56, 13, 12, 0, 0, }, /* 289 */
+ { 32, 7, 12, 0, 0, }, /* 290 */
+ { 32, 12, 3, 0, 0, }, /* 291 */
+ { 32, 7, 5, 0, 0, }, /* 292 */
+ { 32, 6, 12, 0, 0, }, /* 293 */
+ { 32, 13, 12, 0, 0, }, /* 294 */
+ { 57, 7, 12, 0, 0, }, /* 295 */
+ { 57, 26, 12, 0, 0, }, /* 296 */
+ { 57, 21, 12, 0, 0, }, /* 297 */
+ { 57, 12, 3, 0, 0, }, /* 298 */
+ { 57, 13, 12, 0, 0, }, /* 299 */
+ { 57, 15, 12, 0, 0, }, /* 300 */
+ { 57, 22, 12, 0, 0, }, /* 301 */
+ { 57, 18, 12, 0, 0, }, /* 302 */
+ { 57, 10, 5, 0, 0, }, /* 303 */
+ { 38, 7, 12, 0, 0, }, /* 304 */
+ { 38, 10, 12, 0, 0, }, /* 305 */
+ { 38, 12, 3, 0, 0, }, /* 306 */
+ { 38, 10, 5, 0, 0, }, /* 307 */
+ { 38, 13, 12, 0, 0, }, /* 308 */
+ { 38, 21, 12, 0, 0, }, /* 309 */
+ { 38, 26, 12, 0, 0, }, /* 310 */
+ { 16, 9, 12, 0, 7264, }, /* 311 */
+ { 16, 7, 12, 0, 0, }, /* 312 */
+ { 16, 6, 12, 0, 0, }, /* 313 */
+ { 23, 7, 6, 0, 0, }, /* 314 */
+ { 23, 7, 7, 0, 0, }, /* 315 */
+ { 23, 7, 8, 0, 0, }, /* 316 */
+ { 15, 7, 12, 0, 0, }, /* 317 */
+ { 15, 12, 3, 0, 0, }, /* 318 */
+ { 15, 21, 12, 0, 0, }, /* 319 */
+ { 15, 15, 12, 0, 0, }, /* 320 */
+ { 15, 26, 12, 0, 0, }, /* 321 */
+ { 8, 7, 12, 0, 0, }, /* 322 */
+ { 7, 17, 12, 0, 0, }, /* 323 */
+ { 7, 7, 12, 0, 0, }, /* 324 */
+ { 7, 21, 12, 0, 0, }, /* 325 */
+ { 40, 29, 12, 0, 0, }, /* 326 */
+ { 40, 7, 12, 0, 0, }, /* 327 */
+ { 40, 22, 12, 0, 0, }, /* 328 */
+ { 40, 18, 12, 0, 0, }, /* 329 */
+ { 45, 7, 12, 0, 0, }, /* 330 */
+ { 45, 14, 12, 0, 0, }, /* 331 */
+ { 50, 7, 12, 0, 0, }, /* 332 */
+ { 50, 12, 3, 0, 0, }, /* 333 */
+ { 24, 7, 12, 0, 0, }, /* 334 */
+ { 24, 12, 3, 0, 0, }, /* 335 */
+ { 6, 7, 12, 0, 0, }, /* 336 */
+ { 6, 12, 3, 0, 0, }, /* 337 */
+ { 51, 7, 12, 0, 0, }, /* 338 */
+ { 51, 12, 3, 0, 0, }, /* 339 */
+ { 31, 7, 12, 0, 0, }, /* 340 */
+ { 31, 12, 3, 0, 0, }, /* 341 */
+ { 31, 10, 5, 0, 0, }, /* 342 */
+ { 31, 21, 12, 0, 0, }, /* 343 */
+ { 31, 6, 12, 0, 0, }, /* 344 */
+ { 31, 23, 12, 0, 0, }, /* 345 */
+ { 31, 13, 12, 0, 0, }, /* 346 */
+ { 31, 15, 12, 0, 0, }, /* 347 */
+ { 37, 21, 12, 0, 0, }, /* 348 */
+ { 37, 17, 12, 0, 0, }, /* 349 */
+ { 37, 12, 3, 0, 0, }, /* 350 */
+ { 37, 1, 2, 0, 0, }, /* 351 */
+ { 37, 13, 12, 0, 0, }, /* 352 */
+ { 37, 7, 12, 0, 0, }, /* 353 */
+ { 37, 6, 12, 0, 0, }, /* 354 */
+ { 34, 7, 12, 0, 0, }, /* 355 */
+ { 34, 12, 3, 0, 0, }, /* 356 */
+ { 34, 10, 5, 0, 0, }, /* 357 */
+ { 34, 26, 12, 0, 0, }, /* 358 */
+ { 34, 21, 12, 0, 0, }, /* 359 */
+ { 34, 13, 12, 0, 0, }, /* 360 */
+ { 52, 7, 12, 0, 0, }, /* 361 */
+ { 39, 7, 12, 0, 0, }, /* 362 */
+ { 39, 10, 12, 0, 0, }, /* 363 */
+ { 39, 10, 5, 0, 0, }, /* 364 */
+ { 39, 13, 12, 0, 0, }, /* 365 */
+ { 39, 15, 12, 0, 0, }, /* 366 */
+ { 39, 26, 12, 0, 0, }, /* 367 */
+ { 31, 26, 12, 0, 0, }, /* 368 */
+ { 5, 7, 12, 0, 0, }, /* 369 */
+ { 5, 12, 3, 0, 0, }, /* 370 */
+ { 5, 10, 5, 0, 0, }, /* 371 */
+ { 5, 21, 12, 0, 0, }, /* 372 */
+ { 90, 7, 12, 0, 0, }, /* 373 */
+ { 90, 10, 5, 0, 0, }, /* 374 */
+ { 90, 12, 3, 0, 0, }, /* 375 */
+ { 90, 10, 12, 0, 0, }, /* 376 */
+ { 90, 13, 12, 0, 0, }, /* 377 */
+ { 90, 21, 12, 0, 0, }, /* 378 */
+ { 90, 6, 12, 0, 0, }, /* 379 */
+ { 27, 11, 3, 0, 0, }, /* 380 */
+ { 61, 12, 3, 0, 0, }, /* 381 */
+ { 61, 10, 5, 0, 0, }, /* 382 */
+ { 61, 7, 12, 0, 0, }, /* 383 */
+ { 61, 13, 12, 0, 0, }, /* 384 */
+ { 61, 21, 12, 0, 0, }, /* 385 */
+ { 61, 26, 12, 0, 0, }, /* 386 */
+ { 75, 12, 3, 0, 0, }, /* 387 */
+ { 75, 10, 5, 0, 0, }, /* 388 */
+ { 75, 7, 12, 0, 0, }, /* 389 */
+ { 75, 13, 12, 0, 0, }, /* 390 */
+ { 92, 7, 12, 0, 0, }, /* 391 */
+ { 92, 12, 3, 0, 0, }, /* 392 */
+ { 92, 10, 5, 0, 0, }, /* 393 */
+ { 92, 21, 12, 0, 0, }, /* 394 */
+ { 69, 7, 12, 0, 0, }, /* 395 */
+ { 69, 10, 5, 0, 0, }, /* 396 */
+ { 69, 12, 3, 0, 0, }, /* 397 */
+ { 69, 21, 12, 0, 0, }, /* 398 */
+ { 69, 13, 12, 0, 0, }, /* 399 */
+ { 72, 13, 12, 0, 0, }, /* 400 */
+ { 72, 7, 12, 0, 0, }, /* 401 */
+ { 72, 6, 12, 0, 0, }, /* 402 */
+ { 72, 21, 12, 0, 0, }, /* 403 */
+ { 75, 21, 12, 0, 0, }, /* 404 */
+ { 9, 10, 5, 0, 0, }, /* 405 */
+ { 9, 7, 12, 0, 0, }, /* 406 */
+ { 12, 5, 12, 0, 0, }, /* 407 */
+ { 12, 6, 12, 0, 0, }, /* 408 */
+ { 33, 5, 12, 0, 35332, }, /* 409 */
+ { 33, 5, 12, 0, 3814, }, /* 410 */
+ { 33, 9, 12, 63, 1, }, /* 411 */
+ { 33, 5, 12, 63, -1, }, /* 412 */
+ { 33, 5, 12, 63, -58, }, /* 413 */
+ { 33, 9, 12, 0, -7615, }, /* 414 */
+ { 19, 5, 12, 0, 8, }, /* 415 */
+ { 19, 9, 12, 0, -8, }, /* 416 */
+ { 19, 5, 12, 0, 74, }, /* 417 */
+ { 19, 5, 12, 0, 86, }, /* 418 */
+ { 19, 5, 12, 0, 100, }, /* 419 */
+ { 19, 5, 12, 0, 128, }, /* 420 */
+ { 19, 5, 12, 0, 112, }, /* 421 */
+ { 19, 5, 12, 0, 126, }, /* 422 */
+ { 19, 8, 12, 0, -8, }, /* 423 */
+ { 19, 5, 12, 0, 9, }, /* 424 */
+ { 19, 9, 12, 0, -74, }, /* 425 */
+ { 19, 8, 12, 0, -9, }, /* 426 */
+ { 19, 5, 12, 21, -7173, }, /* 427 */
+ { 19, 9, 12, 0, -86, }, /* 428 */
+ { 19, 9, 12, 0, -100, }, /* 429 */
+ { 19, 9, 12, 0, -112, }, /* 430 */
+ { 19, 9, 12, 0, -128, }, /* 431 */
+ { 19, 9, 12, 0, -126, }, /* 432 */
+ { 27, 1, 3, 0, 0, }, /* 433 */
+ { 9, 27, 2, 0, 0, }, /* 434 */
+ { 9, 28, 2, 0, 0, }, /* 435 */
+ { 9, 2, 2, 0, 0, }, /* 436 */
+ { 9, 9, 12, 0, 0, }, /* 437 */
+ { 9, 5, 12, 0, 0, }, /* 438 */
+ { 19, 9, 12, 67, -7517, }, /* 439 */
+ { 33, 9, 12, 71, -8383, }, /* 440 */
+ { 33, 9, 12, 75, -8262, }, /* 441 */
+ { 33, 9, 12, 0, 28, }, /* 442 */
+ { 33, 5, 12, 0, -28, }, /* 443 */
+ { 33, 14, 12, 0, 16, }, /* 444 */
+ { 33, 14, 12, 0, -16, }, /* 445 */
+ { 33, 14, 12, 0, 0, }, /* 446 */
+ { 9, 26, 12, 0, 26, }, /* 447 */
+ { 9, 26, 12, 0, -26, }, /* 448 */
+ { 4, 26, 12, 0, 0, }, /* 449 */
+ { 17, 9, 12, 0, 48, }, /* 450 */
+ { 17, 5, 12, 0, -48, }, /* 451 */
+ { 33, 9, 12, 0, -10743, }, /* 452 */
+ { 33, 9, 12, 0, -3814, }, /* 453 */
+ { 33, 9, 12, 0, -10727, }, /* 454 */
+ { 33, 5, 12, 0, -10795, }, /* 455 */
+ { 33, 5, 12, 0, -10792, }, /* 456 */
+ { 33, 9, 12, 0, -10780, }, /* 457 */
+ { 33, 9, 12, 0, -10749, }, /* 458 */
+ { 33, 9, 12, 0, -10783, }, /* 459 */
+ { 33, 9, 12, 0, -10782, }, /* 460 */
+ { 33, 9, 12, 0, -10815, }, /* 461 */
+ { 10, 5, 12, 0, 0, }, /* 462 */
+ { 10, 26, 12, 0, 0, }, /* 463 */
+ { 10, 12, 3, 0, 0, }, /* 464 */
+ { 10, 21, 12, 0, 0, }, /* 465 */
+ { 10, 15, 12, 0, 0, }, /* 466 */
+ { 16, 5, 12, 0, -7264, }, /* 467 */
+ { 58, 7, 12, 0, 0, }, /* 468 */
+ { 58, 6, 12, 0, 0, }, /* 469 */
+ { 58, 21, 12, 0, 0, }, /* 470 */
+ { 58, 12, 3, 0, 0, }, /* 471 */
+ { 22, 26, 12, 0, 0, }, /* 472 */
+ { 22, 6, 12, 0, 0, }, /* 473 */
+ { 22, 14, 12, 0, 0, }, /* 474 */
+ { 23, 10, 3, 0, 0, }, /* 475 */
+ { 26, 7, 12, 0, 0, }, /* 476 */
+ { 26, 6, 12, 0, 0, }, /* 477 */
+ { 29, 7, 12, 0, 0, }, /* 478 */
+ { 29, 6, 12, 0, 0, }, /* 479 */
+ { 3, 7, 12, 0, 0, }, /* 480 */
+ { 23, 7, 12, 0, 0, }, /* 481 */
+ { 23, 26, 12, 0, 0, }, /* 482 */
+ { 29, 26, 12, 0, 0, }, /* 483 */
+ { 22, 7, 12, 0, 0, }, /* 484 */
+ { 60, 7, 12, 0, 0, }, /* 485 */
+ { 60, 6, 12, 0, 0, }, /* 486 */
+ { 60, 26, 12, 0, 0, }, /* 487 */
+ { 85, 7, 12, 0, 0, }, /* 488 */
+ { 85, 6, 12, 0, 0, }, /* 489 */
+ { 85, 21, 12, 0, 0, }, /* 490 */
+ { 76, 7, 12, 0, 0, }, /* 491 */
+ { 76, 6, 12, 0, 0, }, /* 492 */
+ { 76, 21, 12, 0, 0, }, /* 493 */
+ { 76, 13, 12, 0, 0, }, /* 494 */
+ { 12, 7, 12, 0, 0, }, /* 495 */
+ { 12, 21, 12, 0, 0, }, /* 496 */
+ { 78, 7, 12, 0, 0, }, /* 497 */
+ { 78, 14, 12, 0, 0, }, /* 498 */
+ { 78, 12, 3, 0, 0, }, /* 499 */
+ { 78, 21, 12, 0, 0, }, /* 500 */
+ { 33, 9, 12, 0, -35332, }, /* 501 */
+ { 33, 9, 12, 0, -42280, }, /* 502 */
+ { 33, 9, 12, 0, -42308, }, /* 503 */
+ { 33, 9, 12, 0, -42319, }, /* 504 */
+ { 33, 9, 12, 0, -42315, }, /* 505 */
+ { 33, 9, 12, 0, -42305, }, /* 506 */
+ { 33, 9, 12, 0, -42258, }, /* 507 */
+ { 33, 9, 12, 0, -42282, }, /* 508 */
+ { 48, 7, 12, 0, 0, }, /* 509 */
+ { 48, 12, 3, 0, 0, }, /* 510 */
+ { 48, 10, 5, 0, 0, }, /* 511 */
+ { 48, 26, 12, 0, 0, }, /* 512 */
+ { 64, 7, 12, 0, 0, }, /* 513 */
+ { 64, 21, 12, 0, 0, }, /* 514 */
+ { 74, 10, 5, 0, 0, }, /* 515 */
+ { 74, 7, 12, 0, 0, }, /* 516 */
+ { 74, 12, 3, 0, 0, }, /* 517 */
+ { 74, 21, 12, 0, 0, }, /* 518 */
+ { 74, 13, 12, 0, 0, }, /* 519 */
+ { 68, 13, 12, 0, 0, }, /* 520 */
+ { 68, 7, 12, 0, 0, }, /* 521 */
+ { 68, 12, 3, 0, 0, }, /* 522 */
+ { 68, 21, 12, 0, 0, }, /* 523 */
+ { 73, 7, 12, 0, 0, }, /* 524 */
+ { 73, 12, 3, 0, 0, }, /* 525 */
+ { 73, 10, 5, 0, 0, }, /* 526 */
+ { 73, 21, 12, 0, 0, }, /* 527 */
+ { 83, 12, 3, 0, 0, }, /* 528 */
+ { 83, 10, 5, 0, 0, }, /* 529 */
+ { 83, 7, 12, 0, 0, }, /* 530 */
+ { 83, 21, 12, 0, 0, }, /* 531 */
+ { 83, 13, 12, 0, 0, }, /* 532 */
+ { 38, 6, 12, 0, 0, }, /* 533 */
+ { 67, 7, 12, 0, 0, }, /* 534 */
+ { 67, 12, 3, 0, 0, }, /* 535 */
+ { 67, 10, 5, 0, 0, }, /* 536 */
+ { 67, 13, 12, 0, 0, }, /* 537 */
+ { 67, 21, 12, 0, 0, }, /* 538 */
+ { 91, 7, 12, 0, 0, }, /* 539 */
+ { 91, 12, 3, 0, 0, }, /* 540 */
+ { 91, 6, 12, 0, 0, }, /* 541 */
+ { 91, 21, 12, 0, 0, }, /* 542 */
+ { 86, 7, 12, 0, 0, }, /* 543 */
+ { 86, 10, 5, 0, 0, }, /* 544 */
+ { 86, 12, 3, 0, 0, }, /* 545 */
+ { 86, 21, 12, 0, 0, }, /* 546 */
+ { 86, 6, 12, 0, 0, }, /* 547 */
+ { 86, 13, 12, 0, 0, }, /* 548 */
+ { 23, 7, 9, 0, 0, }, /* 549 */
+ { 23, 7, 10, 0, 0, }, /* 550 */
+ { 9, 4, 2, 0, 0, }, /* 551 */
+ { 9, 3, 12, 0, 0, }, /* 552 */
+ { 25, 25, 12, 0, 0, }, /* 553 */
+ { 0, 24, 12, 0, 0, }, /* 554 */
+ { 9, 6, 3, 0, 0, }, /* 555 */
+ { 35, 7, 12, 0, 0, }, /* 556 */
+ { 19, 14, 12, 0, 0, }, /* 557 */
+ { 19, 15, 12, 0, 0, }, /* 558 */
+ { 19, 26, 12, 0, 0, }, /* 559 */
+ { 70, 7, 12, 0, 0, }, /* 560 */
+ { 66, 7, 12, 0, 0, }, /* 561 */
+ { 41, 7, 12, 0, 0, }, /* 562 */
+ { 41, 15, 12, 0, 0, }, /* 563 */
+ { 18, 7, 12, 0, 0, }, /* 564 */
+ { 18, 14, 12, 0, 0, }, /* 565 */
+ { 117, 7, 12, 0, 0, }, /* 566 */
+ { 117, 12, 3, 0, 0, }, /* 567 */
+ { 59, 7, 12, 0, 0, }, /* 568 */
+ { 59, 21, 12, 0, 0, }, /* 569 */
+ { 42, 7, 12, 0, 0, }, /* 570 */
+ { 42, 21, 12, 0, 0, }, /* 571 */
+ { 42, 14, 12, 0, 0, }, /* 572 */
+ { 13, 9, 12, 0, 40, }, /* 573 */
+ { 13, 5, 12, 0, -40, }, /* 574 */
+ { 46, 7, 12, 0, 0, }, /* 575 */
+ { 44, 7, 12, 0, 0, }, /* 576 */
+ { 44, 13, 12, 0, 0, }, /* 577 */
+ { 105, 7, 12, 0, 0, }, /* 578 */
+ { 103, 7, 12, 0, 0, }, /* 579 */
+ { 103, 21, 12, 0, 0, }, /* 580 */
+ { 109, 7, 12, 0, 0, }, /* 581 */
+ { 11, 7, 12, 0, 0, }, /* 582 */
+ { 80, 7, 12, 0, 0, }, /* 583 */
+ { 80, 21, 12, 0, 0, }, /* 584 */
+ { 80, 15, 12, 0, 0, }, /* 585 */
+ { 119, 7, 12, 0, 0, }, /* 586 */
+ { 119, 26, 12, 0, 0, }, /* 587 */
+ { 119, 15, 12, 0, 0, }, /* 588 */
+ { 115, 7, 12, 0, 0, }, /* 589 */
+ { 115, 15, 12, 0, 0, }, /* 590 */
+ { 65, 7, 12, 0, 0, }, /* 591 */
+ { 65, 15, 12, 0, 0, }, /* 592 */
+ { 65, 21, 12, 0, 0, }, /* 593 */
+ { 71, 7, 12, 0, 0, }, /* 594 */
+ { 71, 21, 12, 0, 0, }, /* 595 */
+ { 97, 7, 12, 0, 0, }, /* 596 */
+ { 96, 7, 12, 0, 0, }, /* 597 */
+ { 30, 7, 12, 0, 0, }, /* 598 */
+ { 30, 12, 3, 0, 0, }, /* 599 */
+ { 30, 15, 12, 0, 0, }, /* 600 */
+ { 30, 21, 12, 0, 0, }, /* 601 */
+ { 87, 7, 12, 0, 0, }, /* 602 */
+ { 87, 15, 12, 0, 0, }, /* 603 */
+ { 87, 21, 12, 0, 0, }, /* 604 */
+ { 116, 7, 12, 0, 0, }, /* 605 */
+ { 116, 15, 12, 0, 0, }, /* 606 */
+ { 111, 7, 12, 0, 0, }, /* 607 */
+ { 111, 26, 12, 0, 0, }, /* 608 */
+ { 111, 12, 3, 0, 0, }, /* 609 */
+ { 111, 15, 12, 0, 0, }, /* 610 */
+ { 111, 21, 12, 0, 0, }, /* 611 */
+ { 77, 7, 12, 0, 0, }, /* 612 */
+ { 77, 21, 12, 0, 0, }, /* 613 */
+ { 82, 7, 12, 0, 0, }, /* 614 */
+ { 82, 15, 12, 0, 0, }, /* 615 */
+ { 81, 7, 12, 0, 0, }, /* 616 */
+ { 81, 15, 12, 0, 0, }, /* 617 */
+ { 120, 7, 12, 0, 0, }, /* 618 */
+ { 120, 21, 12, 0, 0, }, /* 619 */
+ { 120, 15, 12, 0, 0, }, /* 620 */
+ { 88, 7, 12, 0, 0, }, /* 621 */
+ { 0, 15, 12, 0, 0, }, /* 622 */
+ { 93, 10, 5, 0, 0, }, /* 623 */
+ { 93, 12, 3, 0, 0, }, /* 624 */
+ { 93, 7, 12, 0, 0, }, /* 625 */
+ { 93, 21, 12, 0, 0, }, /* 626 */
+ { 93, 15, 12, 0, 0, }, /* 627 */
+ { 93, 13, 12, 0, 0, }, /* 628 */
+ { 84, 12, 3, 0, 0, }, /* 629 */
+ { 84, 10, 5, 0, 0, }, /* 630 */
+ { 84, 7, 12, 0, 0, }, /* 631 */
+ { 84, 21, 12, 0, 0, }, /* 632 */
+ { 84, 1, 2, 0, 0, }, /* 633 */
+ { 100, 7, 12, 0, 0, }, /* 634 */
+ { 100, 13, 12, 0, 0, }, /* 635 */
+ { 95, 12, 3, 0, 0, }, /* 636 */
+ { 95, 7, 12, 0, 0, }, /* 637 */
+ { 95, 10, 5, 0, 0, }, /* 638 */
+ { 95, 13, 12, 0, 0, }, /* 639 */
+ { 95, 21, 12, 0, 0, }, /* 640 */
+ { 110, 7, 12, 0, 0, }, /* 641 */
+ { 110, 12, 3, 0, 0, }, /* 642 */
+ { 110, 21, 12, 0, 0, }, /* 643 */
+ { 99, 12, 3, 0, 0, }, /* 644 */
+ { 99, 10, 5, 0, 0, }, /* 645 */
+ { 99, 7, 12, 0, 0, }, /* 646 */
+ { 99, 21, 12, 0, 0, }, /* 647 */
+ { 99, 13, 12, 0, 0, }, /* 648 */
+ { 47, 15, 12, 0, 0, }, /* 649 */
+ { 107, 7, 12, 0, 0, }, /* 650 */
+ { 107, 10, 5, 0, 0, }, /* 651 */
+ { 107, 12, 3, 0, 0, }, /* 652 */
+ { 107, 21, 12, 0, 0, }, /* 653 */
+ { 108, 7, 12, 0, 0, }, /* 654 */
+ { 108, 12, 3, 0, 0, }, /* 655 */
+ { 108, 10, 5, 0, 0, }, /* 656 */
+ { 108, 13, 12, 0, 0, }, /* 657 */
+ { 106, 12, 3, 0, 0, }, /* 658 */
+ { 106, 10, 5, 0, 0, }, /* 659 */
+ { 106, 7, 12, 0, 0, }, /* 660 */
+ { 106, 10, 3, 0, 0, }, /* 661 */
+ { 123, 7, 12, 0, 0, }, /* 662 */
+ { 123, 10, 3, 0, 0, }, /* 663 */
+ { 123, 10, 5, 0, 0, }, /* 664 */
+ { 123, 12, 3, 0, 0, }, /* 665 */
+ { 123, 21, 12, 0, 0, }, /* 666 */
+ { 123, 13, 12, 0, 0, }, /* 667 */
+ { 122, 7, 12, 0, 0, }, /* 668 */
+ { 122, 10, 3, 0, 0, }, /* 669 */
+ { 122, 10, 5, 0, 0, }, /* 670 */
+ { 122, 12, 3, 0, 0, }, /* 671 */
+ { 122, 21, 12, 0, 0, }, /* 672 */
+ { 113, 7, 12, 0, 0, }, /* 673 */
+ { 113, 10, 5, 0, 0, }, /* 674 */
+ { 113, 12, 3, 0, 0, }, /* 675 */
+ { 113, 21, 12, 0, 0, }, /* 676 */
+ { 113, 13, 12, 0, 0, }, /* 677 */
+ { 101, 7, 12, 0, 0, }, /* 678 */
+ { 101, 12, 3, 0, 0, }, /* 679 */
+ { 101, 10, 5, 0, 0, }, /* 680 */
+ { 101, 13, 12, 0, 0, }, /* 681 */
+ { 124, 9, 12, 0, 32, }, /* 682 */
+ { 124, 5, 12, 0, -32, }, /* 683 */
+ { 124, 13, 12, 0, 0, }, /* 684 */
+ { 124, 15, 12, 0, 0, }, /* 685 */
+ { 124, 7, 12, 0, 0, }, /* 686 */
+ { 121, 7, 12, 0, 0, }, /* 687 */
+ { 62, 7, 12, 0, 0, }, /* 688 */
+ { 62, 14, 12, 0, 0, }, /* 689 */
+ { 62, 21, 12, 0, 0, }, /* 690 */
+ { 79, 7, 12, 0, 0, }, /* 691 */
+ { 114, 7, 12, 0, 0, }, /* 692 */
+ { 114, 13, 12, 0, 0, }, /* 693 */
+ { 114, 21, 12, 0, 0, }, /* 694 */
+ { 102, 7, 12, 0, 0, }, /* 695 */
+ { 102, 12, 3, 0, 0, }, /* 696 */
+ { 102, 21, 12, 0, 0, }, /* 697 */
+ { 118, 7, 12, 0, 0, }, /* 698 */
+ { 118, 12, 3, 0, 0, }, /* 699 */
+ { 118, 21, 12, 0, 0, }, /* 700 */
+ { 118, 26, 12, 0, 0, }, /* 701 */
+ { 118, 6, 12, 0, 0, }, /* 702 */
+ { 118, 13, 12, 0, 0, }, /* 703 */
+ { 118, 15, 12, 0, 0, }, /* 704 */
+ { 98, 7, 12, 0, 0, }, /* 705 */
+ { 98, 10, 5, 0, 0, }, /* 706 */
+ { 98, 12, 3, 0, 0, }, /* 707 */
+ { 98, 6, 12, 0, 0, }, /* 708 */
+ { 104, 7, 12, 0, 0, }, /* 709 */
+ { 104, 26, 12, 0, 0, }, /* 710 */
+ { 104, 12, 3, 0, 0, }, /* 711 */
+ { 104, 21, 12, 0, 0, }, /* 712 */
+ { 9, 10, 3, 0, 0, }, /* 713 */
+ { 19, 12, 3, 0, 0, }, /* 714 */
+ { 112, 7, 12, 0, 0, }, /* 715 */
+ { 112, 15, 12, 0, 0, }, /* 716 */
+ { 112, 12, 3, 0, 0, }, /* 717 */
+ { 9, 26, 11, 0, 0, }, /* 718 */
+ { 26, 26, 12, 0, 0, }, /* 719 */
};
const pcre_uint8 PRIV(ucd_stage1)[] = { /* 8704 bytes */
@@ -742,38 +835,38 @@ const pcre_uint8 PRIV(ucd_stage1)[] = { /* 8704 bytes */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+E800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+F000 */
123,123, 95, 95,124,125,126,127,128,128,129,130,131,132,133,134, /* U+F800 */
-135,136,137,138, 79,139,140,141,142,143, 79, 79, 79, 79, 79, 79, /* U+10000 */
-144, 79,145,146,147, 79,148, 79,149, 79, 79, 79,150, 79, 79, 79, /* U+10800 */
-151,152,153,154, 79, 79, 79, 79, 79, 79, 79, 79, 79,155, 79, 79, /* U+11000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+11800 */
-156,156,156,156,156,156,157, 79,158, 79, 79, 79, 79, 79, 79, 79, /* U+12000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+12800 */
-159,159,159,159,159,159,159,159,160, 79, 79, 79, 79, 79, 79, 79, /* U+13000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+13800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+14000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+14800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+15000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+15800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+16000 */
-161,161,161,161,162, 79, 79, 79, 79, 79, 79, 79, 79, 79,163,164, /* U+16800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+17000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+17800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+18000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+18800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+19000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+19800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1A800 */
-165, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1C800 */
- 71,166,167,168,169, 79,170, 79,171,172,173,174,175,176,177,178, /* U+1D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,179,180, 79, 79, /* U+1E800 */
-181,182,183,184,185, 79,186,187,188,189,190,191,192,193,194, 79, /* U+1F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+1F800 */
+135,136,137,138,139,140,141,142,143,144,145,139,146,146,147,139, /* U+10000 */
+148,149,150,151,152,153,154,155,156,139,139,139,157,139,139,139, /* U+10800 */
+158,159,160,161,162,163,164,139,139,165,139,166,167,168,139,139, /* U+11000 */
+139,169,139,139,139,170,139,139,139,139,139,139,139,139,139,139, /* U+11800 */
+171,171,171,171,171,171,171,172,173,139,139,139,139,139,139,139, /* U+12000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+12800 */
+174,174,174,174,174,174,174,174,175,139,139,139,139,139,139,139, /* U+13000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+13800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+14000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+14800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+15000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+15800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+16000 */
+176,176,176,176,177,178,179,180,139,139,139,139,139,139,181,182, /* U+16800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+17000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+17800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+18000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+18800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+19000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+19800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1A800 */
+183,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1B000 */
+139,139,139,139,139,139,139,139,184,185,139,139,139,139,139,139, /* U+1B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1C800 */
+ 71,186,187,188,189,139,190,139,191,192,193,194,195,196,197,198, /* U+1D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1E000 */
+199,200,139,139,139,139,139,139,139,139,139,139,201,202,139,139, /* U+1E800 */
+203,204,205,206,207,139,208,209, 71,210,211,212,213,214,215,216, /* U+1F000 */
+217,218,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+1F800 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+20000 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+20800 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+21000 */
@@ -794,402 +887,402 @@ const pcre_uint8 PRIV(ucd_stage1)[] = { /* 8704 bytes */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+28800 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+29000 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+29800 */
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,195, 95, 95, /* U+2A000 */
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,219, 95, 95, /* U+2A000 */
95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, /* U+2A800 */
- 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,196, 95, /* U+2B000 */
-197, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2F000 */
- 95, 95, 95, 95,197, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+2F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+30000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+30800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+31000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+31800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+32000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+32800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+33000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+33800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+34000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+34800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+35000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+35800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+36000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+36800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+37000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+37800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+38000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+38800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+39000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+39800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+3F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+40000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+40800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+41000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+41800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+42000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+42800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+43000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+43800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+44000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+44800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+45000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+45800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+46000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+46800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+47000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+47800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+48000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+48800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+49000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+49800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+4F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+50000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+50800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+51000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+51800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+52000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+52800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+53000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+53800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+54000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+54800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+55000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+55800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+56000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+56800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+57000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+57800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+58000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+58800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+59000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+59800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+5F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+60000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+60800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+61000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+61800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+62000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+62800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+63000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+63800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+64000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+64800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+65000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+65800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+66000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+66800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+67000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+67800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+68000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+68800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+69000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+69800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+6F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+70000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+70800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+71000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+71800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+72000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+72800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+73000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+73800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+74000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+74800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+75000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+75800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+76000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+76800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+77000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+77800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+78000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+78800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+79000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+79800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+7F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+80000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+80800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+81000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+81800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+82000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+82800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+83000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+83800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+84000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+84800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+85000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+85800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+86000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+86800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+87000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+87800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+88000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+88800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+89000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+89800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+8F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+90000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+90800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+91000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+91800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+92000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+92800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+93000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+93800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+94000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+94800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+95000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+95800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+96000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+96800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+97000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+97800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+98000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+98800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+99000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+99800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9A000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9A800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9B000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9B800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9C000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9C800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9D000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9D800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9E000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9E800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9F000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+9F800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A0000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A0800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A1000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A1800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A2000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A2800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A3000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A3800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A4000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A4800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A5000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A5800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A6000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A6800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A7000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A7800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A8000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A8800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A9000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+A9800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AA000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AA800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AB000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AB800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AC000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AC800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AD000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AD800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AE000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AE800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AF000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+AF800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B0000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B0800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B1000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B1800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B2000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B2800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B3000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B3800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B4000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B4800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B5000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B5800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B6000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B6800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B7000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B7800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B8000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B8800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B9000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+B9800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BA000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BA800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BB000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BB800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BC000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BC800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BD000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BD800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BE000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BE800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BF000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+BF800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C0000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C0800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C1000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C1800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C2000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C2800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C3000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C3800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C4000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C4800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C5000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C5800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C6000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C6800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C7000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C7800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C8000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C8800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C9000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+C9800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CA000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CA800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CB000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CB800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CC000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CC800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CD000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CD800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CE000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CE800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CF000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+CF800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D0000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D0800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D1000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D1800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D2000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D2800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D3000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D3800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D4000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D4800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D5000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D5800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D6000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D6800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D7000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D7800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D8000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D8800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D9000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+D9800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DA000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DA800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DB000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DB800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DC000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DC800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DD000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DD800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DE000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DE800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DF000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+DF800 */
-198,199,200,201,199,199,199,199,199,199,199,199,199,199,199,199, /* U+E0000 */
-199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, /* U+E0800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E1000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E1800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E2000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E2800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E3000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E3800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E4000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E4800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E5000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E5800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E6000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E6800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E7000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E7800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E8000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E8800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E9000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+E9800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EA000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EA800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EB000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EB800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EC000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EC800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+ED000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+ED800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EE000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EE800 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EF000 */
- 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, /* U+EF800 */
+ 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,220, 95, /* U+2B000 */
+221,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+2F000 */
+ 95, 95, 95, 95,221,139,139,139,139,139,139,139,139,139,139,139, /* U+2F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+30000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+30800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+31000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+31800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+32000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+32800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+33000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+33800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+34000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+34800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+35000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+35800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+36000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+36800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+37000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+37800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+38000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+38800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+39000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+39800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+3F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+40000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+40800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+41000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+41800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+42000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+42800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+43000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+43800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+44000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+44800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+45000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+45800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+46000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+46800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+47000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+47800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+48000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+48800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+49000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+49800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+4F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+50000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+50800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+51000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+51800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+52000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+52800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+53000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+53800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+54000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+54800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+55000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+55800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+56000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+56800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+57000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+57800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+58000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+58800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+59000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+59800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+5F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+60000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+60800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+61000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+61800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+62000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+62800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+63000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+63800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+64000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+64800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+65000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+65800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+66000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+66800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+67000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+67800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+68000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+68800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+69000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+69800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+6F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+70000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+70800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+71000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+71800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+72000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+72800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+73000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+73800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+74000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+74800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+75000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+75800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+76000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+76800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+77000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+77800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+78000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+78800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+79000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+79800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+7F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+80000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+80800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+81000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+81800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+82000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+82800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+83000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+83800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+84000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+84800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+85000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+85800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+86000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+86800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+87000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+87800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+88000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+88800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+89000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+89800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+8F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+90000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+90800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+91000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+91800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+92000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+92800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+93000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+93800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+94000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+94800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+95000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+95800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+96000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+96800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+97000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+97800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+98000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+98800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+99000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+99800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9A000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9A800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9B000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9B800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9C000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9C800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9D000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9D800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9E000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9E800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9F000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+9F800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A0000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A0800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A1000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A1800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A2000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A2800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A3000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A3800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A4000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A4800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A5000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A5800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A6000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A6800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A7000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A7800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A8000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A8800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A9000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+A9800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AA000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AA800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AB000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AB800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AC000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AC800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AD000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AD800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AE000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AE800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AF000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+AF800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B0000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B0800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B1000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B1800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B2000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B2800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B3000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B3800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B4000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B4800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B5000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B5800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B6000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B6800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B7000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B7800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B8000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B8800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B9000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+B9800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BA000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BA800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BB000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BB800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BC000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BC800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BD000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BD800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BE000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BE800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BF000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+BF800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C0000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C0800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C1000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C1800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C2000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C2800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C3000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C3800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C4000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C4800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C5000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C5800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C6000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C6800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C7000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C7800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C8000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C8800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C9000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+C9800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CA000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CA800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CB000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CB800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CC000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CC800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CD000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CD800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CE000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CE800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CF000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+CF800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D0000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D0800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D1000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D1800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D2000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D2800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D3000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D3800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D4000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D4800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D5000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D5800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D6000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D6800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D7000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D7800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D8000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D8800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D9000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+D9800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DA000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DA800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DB000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DB800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DC000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DC800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DD000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DD800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DE000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DE800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DF000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+DF800 */
+222,223,224,225,223,223,223,223,223,223,223,223,223,223,223,223, /* U+E0000 */
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+E0800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E1000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E1800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E2000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E2800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E3000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E3800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E4000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E4800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E5000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E5800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E6000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E6800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E7000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E7800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E8000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E8800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E9000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+E9800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EA000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EA800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EB000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EB800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EC000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EC800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+ED000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+ED800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EE000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EE800 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EF000 */
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, /* U+EF800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+F0000 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+F0800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+F1000 */
@@ -1221,7 +1314,7 @@ const pcre_uint8 PRIV(ucd_stage1)[] = { /* 8704 bytes */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+FE000 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+FE800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+FF000 */
-123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,202, /* U+FF800 */
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,226, /* U+FF800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+100000 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+100800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+101000 */
@@ -1253,10 +1346,10 @@ const pcre_uint8 PRIV(ucd_stage1)[] = { /* 8704 bytes */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+10E000 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+10E800 */
123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, /* U+10F000 */
-123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,202, /* U+10F800 */
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,226, /* U+10F800 */
};
-const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
+const pcre_uint16 PRIV(ucd_stage2)[] = { /* 58112 bytes, block = 128 */
/* block 0 */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1303,539 +1396,539 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
70, 33, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 33, 33, 33, 33, 33, 33, 71, 30, 31, 72, 73, 74,
74, 30, 31, 75, 76, 77, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
- 78, 79, 80, 81, 82, 33, 83, 83, 33, 84, 33, 85, 33, 33, 33, 33,
- 83, 33, 33, 86, 33, 87, 88, 33, 89, 90, 33, 91, 33, 33, 33, 90,
- 33, 92, 93, 33, 33, 94, 33, 33, 33, 33, 33, 33, 33, 95, 33, 33,
+ 78, 79, 80, 81, 82, 33, 83, 83, 33, 84, 33, 85, 86, 33, 33, 33,
+ 83, 87, 33, 88, 33, 89, 90, 33, 91, 92, 33, 93, 94, 33, 33, 92,
+ 33, 95, 96, 33, 33, 97, 33, 33, 33, 33, 33, 33, 33, 98, 33, 33,
/* block 5 */
- 96, 33, 33, 96, 33, 33, 33, 33, 96, 97, 98, 98, 99, 33, 33, 33,
- 33, 33,100, 33, 20, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 99, 33, 33, 99, 33, 33, 33,100, 99,101,102,102,103, 33, 33, 33,
+ 33, 33,104, 33, 20, 33, 33, 33, 33, 33, 33, 33, 33, 33,105, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
-101,101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,
-102,102, 14, 14, 14, 14,102,102,102,102,102,102,102,102,102,102,
-102,102, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-101,101,101,101,101, 14, 14, 14, 14, 14,103,103,102, 14,102, 14,
+106,106,106,106,106,106,106,106,106,107,107,107,107,107,107,107,
+107,107, 14, 14, 14, 14,107,107,107,107,107,107,107,107,107,107,
+107,107, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+106,106,106,106,106, 14, 14, 14, 14, 14,108,108,107, 14,107, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
/* block 6 */
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,105,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-106,107,106,107,102,108,106,107,109,109,110,111,111,111, 4,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,110,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+111,112,111,112,107,113,111,112,114,114,115,116,116,116, 4,117,
/* block 7 */
-109,109,109,109,108, 14,112, 4,113,113,113,109,114,109,115,115,
-116,117,118,117,117,119,117,117,120,121,122,117,123,117,117,117,
-124,125,109,126,117,117,127,117,117,128,117,117,129,130,130,130,
-116,131,132,131,131,133,131,131,134,135,136,131,137,131,131,131,
-138,139,140,141,131,131,142,131,131,143,131,131,144,145,145,146,
-147,148,149,149,149,150,151,152,106,107,106,107,106,107,106,107,
-106,107,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-155,156,157,116,158,159,160,106,107,161,106,107,116,162,162,162,
+114,114,114,114,113, 14,118, 4,119,119,119,114,120,114,121,121,
+122,123,124,123,123,125,123,123,126,127,128,123,129,123,123,123,
+130,131,114,132,123,123,133,123,123,134,123,123,135,136,136,136,
+122,137,138,137,137,139,137,137,140,141,142,137,143,137,137,137,
+144,145,146,147,137,137,148,137,137,149,137,137,150,151,151,152,
+153,154,155,155,155,156,157,158,111,112,111,112,111,112,111,112,
+111,112,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+161,162,163,164,165,166,167,111,112,168,111,112,122,169,169,169,
/* block 8 */
-163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
-164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
-164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
-165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
-165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
-166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
/* block 9 */
-167,168,169,170,170,104,104,170,171,171,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-172,167,168,167,168,167,168,167,168,167,168,167,168,167,168,173,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
+174,175,176,177,177,109,109,177,178,178,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+179,174,175,174,175,174,175,174,175,174,175,174,175,174,175,180,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
/* block 10 */
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,109,109,109,109,109,109,109,109,
-109,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
-174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
-174,174,174,174,174,174,174,109,109,175,176,176,176,176,176,176,
-109,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
-177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
-
-/* block 11 */
-177,177,177,177,177,177,177,178,109, 4,179,109,109,109,109,180,
-109,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+114,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
-181,181,181,181,181,181,181,181,181,181,181,181,181,181,182,181,
-183,181,181,183,181,181,183,181,109,109,109,109,109,109,109,109,
+181,181,181,181,181,181,181,114,114,182,183,183,183,183,183,183,
+114,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
-184,184,184,184,184,184,184,184,184,184,184,109,109,109,109,109,
-184,184,184,183,183,109,109,109,109,109,109,109,109,109,109,109,
+
+/* block 11 */
+184,184,184,184,184,184,184,185,114, 4,186,114,114,187,187,188,
+114,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,190,189,
+191,189,189,191,189,189,191,189,114,114,114,114,114,114,114,114,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,114,114,114,114,114,
+192,192,192,191,191,114,114,114,114,114,114,114,114,114,114,114,
/* block 12 */
-185,185,185,185,185,109,186,186,186,187,187,188, 4,187,189,189,
-190,190,190,190,190,190,190,190,190,190,190, 4,185,109,187, 4,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-102,191,191,191,191,191,191,191,191,191,191,104,104,104,104,104,
-104,104,104,104,104,104,190,190,190,190,190,190,190,190,190,190,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,187,187,187,187,191,191,
-104,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+193,193,193,193,193, 22,194,194,194,195,195,196, 4,195,197,197,
+198,198,198,198,198,198,198,198,198,198,198, 4, 22,114,195, 4,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+107,199,199,199,199,199,199,199,199,199,199,109,109,109,109,109,
+109,109,109,109,109,109,198,198,198,198,198,198,198,198,198,198,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,195,195,195,195,199,199,
+109,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 13 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,187,191,190,190,190,190,190,190,190, 22,189,190,
-190,190,190,190,190,192,192,190,190,189,190,190,190,190,191,191,
-193,193,193,193,193,193,193,193,193,193,191,191,191,189,189,191,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,195,199,198,198,198,198,198,198,198, 22,197,198,
+198,198,198,198,198,200,200,198,198,197,198,198,198,198,199,199,
+201,201,201,201,201,201,201,201,201,201,199,199,199,197,197,199,
/* block 14 */
-194,194,194,194,194,194,194,194,194,194,194,194,194,194,109,195,
-196,197,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
-197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
-197,197,197,197,197,197,197,197,197,197,197,109,109,196,196,196,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,114,203,
+204,205,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,114,114,204,204,204,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 15 */
-198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
-198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
-198,198,198,198,198,198,199,199,199,199,199,199,199,199,199,199,
-199,198,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-200,200,200,200,200,200,200,200,200,200,201,201,201,201,201,201,
-201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
-201,201,201,201,201,201,201,201,201,201,201,202,202,202,202,202,
-202,202,202,202,203,203,204,205,205,205,203,109,109,109,109,109,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,207,207,207,207,207,207,207,207,207,207,
+207,206,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+208,208,208,208,208,208,208,208,208,208,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,210,210,210,210,210,
+210,210,210,210,211,211,212,213,213,213,211,114,114,114,114,114,
/* block 16 */
-206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
-206,206,206,206,206,206,207,207,207,207,208,207,207,207,207,207,
-207,207,207,207,208,207,207,207,208,207,207,207,207,207,109,109,
-209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,109,
-210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
-210,210,210,210,210,210,210,210,210,211,211,211,109,109,212,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,215,215,215,215,216,215,215,215,215,215,
+215,215,215,215,216,215,215,215,216,215,215,215,215,215,114,114,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,114,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,219,219,219,114,114,220,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 17 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-191,109,191,191,191,191,191,191,191,191,191,191,191,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,190,190,190,190,190,190,190,190,190,190,190,190,
-190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
/* block 18 */
-213,213,213,214,215,215,215,215,215,215,215,215,215,215,215,215,
-215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
-215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
-215,215,215,215,215,215,215,215,215,215,213,214,213,215,214,214,
-214,213,213,213,213,213,213,213,213,214,214,214,214,213,214,214,
-215,104,104,213,213,213,213,213,215,215,215,215,215,215,215,215,
-215,215,213,213, 4, 4,216,216,216,216,216,216,216,216,216,216,
-217,218,215,215,215,215,215,215,109,215,215,215,215,215,215,215,
+221,221,221,222,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,221,222,221,223,222,222,
+222,221,221,221,221,221,221,221,221,222,222,222,222,221,222,222,
+223,109,109,221,221,221,221,221,223,223,223,223,223,223,223,223,
+223,223,221,221, 4, 4,224,224,224,224,224,224,224,224,224,224,
+225,226,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
/* block 19 */
-109,219,220,220,109,221,221,221,221,221,221,221,221,109,109,221,
-221,109,109,221,221,221,221,221,221,221,221,221,221,221,221,221,
-221,221,221,221,221,221,221,221,221,109,221,221,221,221,221,221,
-221,109,221,109,109,109,221,221,221,221,109,109,219,221,222,220,
-220,219,219,219,219,109,109,220,220,109,109,220,220,219,221,109,
-109,109,109,109,109,109,109,222,109,109,109,109,221,221,109,221,
-221,221,219,219,109,109,223,223,223,223,223,223,223,223,223,223,
-221,221,224,224,225,225,225,225,225,225,226,224,109,109,109,109,
+227,228,229,229,114,227,227,227,227,227,227,227,227,114,114,227,
+227,114,114,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,114,227,227,227,227,227,227,
+227,114,227,114,114,114,227,227,227,227,114,114,228,227,230,229,
+229,228,228,228,228,114,114,229,229,114,114,229,229,228,227,114,
+114,114,114,114,114,114,114,230,114,114,114,114,227,227,114,227,
+227,227,228,228,114,114,231,231,231,231,231,231,231,231,231,231,
+227,227,232,232,233,233,233,233,233,233,234,232,114,114,114,114,
/* block 20 */
-109,227,227,228,109,229,229,229,229,229,229,109,109,109,109,229,
-229,109,109,229,229,229,229,229,229,229,229,229,229,229,229,229,
-229,229,229,229,229,229,229,229,229,109,229,229,229,229,229,229,
-229,109,229,229,109,229,229,109,229,229,109,109,227,109,228,228,
-228,227,227,109,109,109,109,227,227,109,109,227,227,227,109,109,
-109,227,109,109,109,109,109,109,109,229,229,229,229,109,229,109,
-109,109,109,109,109,109,230,230,230,230,230,230,230,230,230,230,
-227,227,229,229,229,227,109,109,109,109,109,109,109,109,109,109,
+114,235,235,236,114,237,237,237,237,237,237,114,114,114,114,237,
+237,114,114,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,114,237,237,237,237,237,237,
+237,114,237,237,114,237,237,114,237,237,114,114,235,114,236,236,
+236,235,235,114,114,114,114,235,235,114,114,235,235,235,114,114,
+114,235,114,114,114,114,114,114,114,237,237,237,237,114,237,114,
+114,114,114,114,114,114,238,238,238,238,238,238,238,238,238,238,
+235,235,237,237,237,235,114,114,114,114,114,114,114,114,114,114,
/* block 21 */
-109,231,231,232,109,233,233,233,233,233,233,233,233,233,109,233,
-233,233,109,233,233,233,233,233,233,233,233,233,233,233,233,233,
-233,233,233,233,233,233,233,233,233,109,233,233,233,233,233,233,
-233,109,233,233,109,233,233,233,233,233,109,109,231,233,232,232,
-232,231,231,231,231,231,109,231,231,232,109,232,232,231,109,109,
-233,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-233,233,231,231,109,109,234,234,234,234,234,234,234,234,234,234,
-235,236,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,239,239,240,114,241,241,241,241,241,241,241,241,241,114,241,
+241,241,114,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,114,241,241,241,241,241,241,
+241,114,241,241,114,241,241,241,241,241,114,114,239,241,240,240,
+240,239,239,239,239,239,114,239,239,240,114,240,240,239,114,114,
+241,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+241,241,239,239,114,114,242,242,242,242,242,242,242,242,242,242,
+243,244,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 22 */
-109,237,238,238,109,239,239,239,239,239,239,239,239,109,109,239,
-239,109,109,239,239,239,239,239,239,239,239,239,239,239,239,239,
-239,239,239,239,239,239,239,239,239,109,239,239,239,239,239,239,
-239,109,239,239,109,239,239,239,239,239,109,109,237,239,240,237,
-238,237,237,237,237,109,109,238,238,109,109,238,238,237,109,109,
-109,109,109,109,109,109,237,240,109,109,109,109,239,239,109,239,
-239,239,237,237,109,109,241,241,241,241,241,241,241,241,241,241,
-242,239,243,243,243,243,243,243,109,109,109,109,109,109,109,109,
+114,245,246,246,114,247,247,247,247,247,247,247,247,114,114,247,
+247,114,114,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,114,247,247,247,247,247,247,
+247,114,247,247,114,247,247,247,247,247,114,114,245,247,248,245,
+246,245,245,245,245,114,114,246,246,114,114,246,246,245,114,114,
+114,114,114,114,114,114,245,248,114,114,114,114,247,247,114,247,
+247,247,245,245,114,114,249,249,249,249,249,249,249,249,249,249,
+250,247,251,251,251,251,251,251,114,114,114,114,114,114,114,114,
/* block 23 */
-109,109,244,245,109,245,245,245,245,245,245,109,109,109,245,245,
-245,109,245,245,245,245,109,109,109,245,245,109,245,109,245,245,
-109,109,109,245,245,109,109,109,245,245,245,109,109,109,245,245,
-245,245,245,245,245,245,245,245,245,245,109,109,109,109,246,247,
-244,247,247,109,109,109,247,247,247,109,247,247,247,244,109,109,
-245,109,109,109,109,109,109,246,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,248,248,248,248,248,248,248,248,248,248,
-249,249,249,250,250,250,250,250,250,251,250,109,109,109,109,109,
+114,114,252,253,114,253,253,253,253,253,253,114,114,114,253,253,
+253,114,253,253,253,253,114,114,114,253,253,114,253,114,253,253,
+114,114,114,253,253,114,114,114,253,253,253,114,114,114,253,253,
+253,253,253,253,253,253,253,253,253,253,114,114,114,114,254,255,
+252,255,255,114,114,114,255,255,255,114,255,255,255,252,114,114,
+253,114,114,114,114,114,114,254,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,256,256,256,256,256,256,256,256,256,256,
+257,257,257,258,258,258,258,258,258,259,258,114,114,114,114,114,
/* block 24 */
-109,252,252,252,109,253,253,253,253,253,253,253,253,109,253,253,
-253,109,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,109,253,253,253,253,253,253,
-253,253,253,253,109,253,253,253,253,253,109,109,109,253,254,254,
-254,252,252,252,252,109,254,254,254,109,254,254,254,254,109,109,
-109,109,109,109,109,254,254,109,253,253,109,109,109,109,109,109,
-253,253,254,254,109,109,255,255,255,255,255,255,255,255,255,255,
-109,109,109,109,109,109,109,109,256,256,256,256,256,256,256,257,
+260,261,261,261,114,262,262,262,262,262,262,262,262,114,262,262,
+262,114,262,262,262,262,262,262,262,262,262,262,262,262,262,262,
+262,262,262,262,262,262,262,262,262,114,262,262,262,262,262,262,
+262,262,262,262,262,262,262,262,262,262,114,114,114,262,260,260,
+260,261,261,261,261,114,260,260,260,114,260,260,260,260,114,114,
+114,114,114,114,114,260,260,114,262,262,114,114,114,114,114,114,
+262,262,260,260,114,114,263,263,263,263,263,263,263,263,263,263,
+114,114,114,114,114,114,114,114,264,264,264,264,264,264,264,265,
/* block 25 */
-109,109,258,258,109,259,259,259,259,259,259,259,259,109,259,259,
-259,109,259,259,259,259,259,259,259,259,259,259,259,259,259,259,
-259,259,259,259,259,259,259,259,259,109,259,259,259,259,259,259,
-259,259,259,259,109,259,259,259,259,259,109,109,260,259,258,260,
-258,258,261,258,258,109,260,258,258,109,258,258,260,260,109,109,
-109,109,109,109,109,261,261,109,109,109,109,109,109,109,259,109,
-259,259,260,260,109,109,262,262,262,262,262,262,262,262,262,262,
-109,259,259,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,266,267,267,114,268,268,268,268,268,268,268,268,114,268,268,
+268,114,268,268,268,268,268,268,268,268,268,268,268,268,268,268,
+268,268,268,268,268,268,268,268,268,114,268,268,268,268,268,268,
+268,268,268,268,114,268,268,268,268,268,114,114,266,268,267,266,
+267,267,269,267,267,114,266,267,267,114,267,267,266,266,114,114,
+114,114,114,114,114,269,269,114,114,114,114,114,114,114,268,114,
+268,268,266,266,114,114,270,270,270,270,270,270,270,270,270,270,
+114,268,268,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 26 */
-109,109,263,263,109,264,264,264,264,264,264,264,264,109,264,264,
-264,109,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
-264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
-264,264,264,264,264,264,264,264,264,264,264,109,109,264,265,263,
-263,266,266,266,266,109,263,263,263,109,263,263,263,266,264,109,
-109,109,109,109,109,109,109,265,109,109,109,109,109,109,109,109,
-264,264,266,266,109,109,267,267,267,267,267,267,267,267,267,267,
-268,268,268,268,268,268,109,109,109,269,264,264,264,264,264,264,
+114,271,272,272,114,273,273,273,273,273,273,273,273,114,273,273,
+273,114,273,273,273,273,273,273,273,273,273,273,273,273,273,273,
+273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,
+273,273,273,273,273,273,273,273,273,273,273,114,114,273,274,272,
+272,271,271,271,271,114,272,272,272,114,272,272,272,271,273,114,
+114,114,114,114,114,114,114,274,114,114,114,114,114,114,114,114,
+273,273,271,271,114,114,275,275,275,275,275,275,275,275,275,275,
+276,276,276,276,276,276,114,114,114,277,273,273,273,273,273,273,
/* block 27 */
-109,109,270,270,109,271,271,271,271,271,271,271,271,271,271,271,
-271,271,271,271,271,271,271,109,109,109,271,271,271,271,271,271,
-271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,
-271,271,109,271,271,271,271,271,271,271,271,271,109,271,109,109,
-271,271,271,271,271,271,271,109,109,109,272,109,109,109,109,273,
-270,270,272,272,272,109,272,109,270,270,270,270,270,270,270,273,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,270,270,274,109,109,109,109,109,109,109,109,109,109,109,
+114,114,278,278,114,279,279,279,279,279,279,279,279,279,279,279,
+279,279,279,279,279,279,279,114,114,114,279,279,279,279,279,279,
+279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,
+279,279,114,279,279,279,279,279,279,279,279,279,114,279,114,114,
+279,279,279,279,279,279,279,114,114,114,280,114,114,114,114,281,
+278,278,280,280,280,114,280,114,278,278,278,278,278,278,278,281,
+114,114,114,114,114,114,282,282,282,282,282,282,282,282,282,282,
+114,114,278,278,283,114,114,114,114,114,114,114,114,114,114,114,
/* block 28 */
-109,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,
-275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,
-275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,
-275,276,275,277,276,276,276,276,276,276,276,109,109,109,109, 5,
-275,275,275,275,275,275,278,276,276,276,276,276,276,276,276,279,
-280,280,280,280,280,280,280,280,280,280,279,279,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,
+284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,
+284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,
+284,285,284,286,285,285,285,285,285,285,285,114,114,114,114, 5,
+284,284,284,284,284,284,287,285,285,285,285,285,285,285,285,288,
+289,289,289,289,289,289,289,289,289,289,288,288,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 29 */
-109,281,281,109,281,109,109,281,281,109,281,109,109,281,109,109,
-109,109,109,109,281,281,281,281,109,281,281,281,281,281,281,281,
-109,281,281,281,109,281,109,281,109,109,281,281,109,281,281,281,
-281,282,281,283,282,282,282,282,282,282,109,282,282,281,109,109,
-281,281,281,281,281,109,284,109,282,282,282,282,282,282,109,109,
-285,285,285,285,285,285,285,285,285,285,109,109,281,281,281,281,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,290,290,114,290,114,114,290,290,114,290,114,114,290,114,114,
+114,114,114,114,290,290,290,290,114,290,290,290,290,290,290,290,
+114,290,290,290,114,290,114,290,114,114,290,290,114,290,290,290,
+290,291,290,292,291,291,291,291,291,291,114,291,291,290,114,114,
+290,290,290,290,290,114,293,114,291,291,291,291,291,291,114,114,
+294,294,294,294,294,294,294,294,294,294,114,114,290,290,290,290,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 30 */
-286,287,287,287,288,288,288,288,288,288,288,288,288,288,288,288,
-288,288,288,287,288,287,287,287,289,289,287,287,287,287,287,287,
-290,290,290,290,290,290,290,290,290,290,291,291,291,291,291,291,
-291,291,291,291,287,289,287,289,287,289,292,293,292,293,294,294,
-286,286,286,286,286,286,286,286,109,286,286,286,286,286,286,286,
-286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,
-286,286,286,286,286,286,286,286,286,286,286,286,286,109,109,109,
-109,289,289,289,289,289,289,289,289,289,289,289,289,289,289,294,
+295,296,296,296,297,297,297,297,297,297,297,297,297,297,297,297,
+297,297,297,296,297,296,296,296,298,298,296,296,296,296,296,296,
+299,299,299,299,299,299,299,299,299,299,300,300,300,300,300,300,
+300,300,300,300,296,298,296,298,296,298,301,302,301,302,303,303,
+295,295,295,295,295,295,295,295,114,295,295,295,295,295,295,295,
+295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
+295,295,295,295,295,295,295,295,295,295,295,295,295,114,114,114,
+114,298,298,298,298,298,298,298,298,298,298,298,298,298,298,303,
/* block 31 */
-289,289,289,289,289,288,289,289,286,286,286,286,286,289,289,289,
-289,289,289,289,289,289,289,289,109,289,289,289,289,289,289,289,
-289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,
-289,289,289,289,289,289,289,289,289,289,289,289,289,109,287,287,
-287,287,287,287,287,287,289,287,287,287,287,287,287,109,287,287,
-288,288,288,288,288, 19, 19, 19, 19,288,288,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+298,298,298,298,298,297,298,298,295,295,295,295,295,298,298,298,
+298,298,298,298,298,298,298,298,114,298,298,298,298,298,298,298,
+298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
+298,298,298,298,298,298,298,298,298,298,298,298,298,114,296,296,
+296,296,296,296,296,296,298,296,296,296,296,296,296,114,296,296,
+297,297,297,297,297, 19, 19, 19, 19,297,297,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 32 */
-295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
-295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
-295,295,295,295,295,295,295,295,295,295,295,296,296,297,297,297,
-297,298,297,297,297,297,297,297,296,297,297,298,298,297,297,295,
-299,299,299,299,299,299,299,299,299,299,300,300,300,300,300,300,
-295,295,295,295,295,295,298,298,297,297,295,295,295,295,297,297,
-297,295,296,296,296,295,295,296,296,296,296,296,296,296,295,295,
-295,297,297,297,297,295,295,295,295,295,295,295,295,295,295,295,
+304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
+304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
+304,304,304,304,304,304,304,304,304,304,304,305,305,306,306,306,
+306,307,306,306,306,306,306,306,305,306,306,307,307,306,306,304,
+308,308,308,308,308,308,308,308,308,308,309,309,309,309,309,309,
+304,304,304,304,304,304,307,307,306,306,304,304,304,304,306,306,
+306,304,305,305,305,304,304,305,305,305,305,305,305,305,304,304,
+304,306,306,306,306,304,304,304,304,304,304,304,304,304,304,304,
/* block 33 */
-295,295,297,296,298,297,297,296,296,296,296,296,296,297,295,296,
-299,299,299,299,299,299,299,299,299,299,296,296,296,297,301,301,
-302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,
-302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,
-302,302,302,302,302,302,109,302,109,109,109,109,109,302,109,109,
-303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,
-303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,
-303,303,303,303,303,303,303,303,303,303,303, 4,304,303,303,303,
+304,304,306,305,307,306,306,305,305,305,305,305,305,306,304,305,
+308,308,308,308,308,308,308,308,308,308,305,305,305,306,310,310,
+311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,
+311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,
+311,311,311,311,311,311,114,311,114,114,114,114,114,311,114,114,
+312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
+312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
+312,312,312,312,312,312,312,312,312,312,312, 4,313,312,312,312,
/* block 34 */
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
-306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
/* block 35 */
-306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
-306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
-306,306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
+315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+315,315,315,315,315,315,315,315,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
/* block 36 */
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,109,308,308,308,308,109,109,
-308,308,308,308,308,308,308,109,308,109,308,308,308,308,109,109,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,114,317,317,317,317,114,114,
+317,317,317,317,317,317,317,114,317,114,317,317,317,317,114,114,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
/* block 37 */
-308,308,308,308,308,308,308,308,308,109,308,308,308,308,109,109,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,109,308,308,308,308,109,109,308,308,308,308,308,308,308,109,
-308,109,308,308,308,308,109,109,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
+317,317,317,317,317,317,317,317,317,114,317,317,317,317,114,114,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,114,317,317,317,317,114,114,317,317,317,317,317,317,317,114,
+317,114,317,317,317,317,114,114,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
/* block 38 */
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,109,308,308,308,308,109,109,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,308,308,308,308,109,109,309,309,309,
-310,310,310,310,310,310,310,310,310,311,311,311,311,311,311,311,
-311,311,311,311,311,311,311,311,311,311,311,311,311,109,109,109,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,114,317,317,317,317,114,114,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,317,317,317,317,114,114,318,318,318,
+319,319,319,319,319,319,319,319,319,320,320,320,320,320,320,320,
+320,320,320,320,320,320,320,320,320,320,320,320,320,114,114,114,
/* block 39 */
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-312,312,312,312,312,312,312,312,312,312,109,109,109,109,109,109,
-313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
-313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
-313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
-313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
-313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
-313,313,313,313,313,109,109,109,109,109,109,109,109,109,109,109,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+321,321,321,321,321,321,321,321,321,321,114,114,114,114,114,114,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,114,114,114,114,114,114,114,114,114,114,114,
/* block 40 */
-314,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+323,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
/* block 41 */
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
/* block 42 */
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,316,316,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,325,325,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
/* block 43 */
-317,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,
-318,318,318,318,318,318,318,318,318,318,318,319,320,109,109,109,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
-321,321,321,321,321,321,321,321,321,321,321, 4, 4, 4,322,322,
-322,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+326,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,
+327,327,327,327,327,327,327,327,327,327,327,328,329,114,114,114,
+330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
+330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
+330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
+330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
+330,330,330,330,330,330,330,330,330,330,330, 4, 4, 4,331,331,
+331,330,330,330,330,330,330,330,330,114,114,114,114,114,114,114,
/* block 44 */
-323,323,323,323,323,323,323,323,323,323,323,323,323,109,323,323,
-323,323,324,324,324,109,109,109,109,109,109,109,109,109,109,109,
-325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,
-325,325,326,326,326, 4, 4,109,109,109,109,109,109,109,109,109,
-327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,
-327,327,328,328,109,109,109,109,109,109,109,109,109,109,109,109,
-329,329,329,329,329,329,329,329,329,329,329,329,329,109,329,329,
-329,109,330,330,109,109,109,109,109,109,109,109,109,109,109,109,
+332,332,332,332,332,332,332,332,332,332,332,332,332,114,332,332,
+332,332,333,333,333,114,114,114,114,114,114,114,114,114,114,114,
+334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,
+334,334,335,335,335, 4, 4,114,114,114,114,114,114,114,114,114,
+336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,
+336,336,337,337,114,114,114,114,114,114,114,114,114,114,114,114,
+338,338,338,338,338,338,338,338,338,338,338,338,338,114,338,338,
+338,114,339,339,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 45 */
-331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,
-331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,
-331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,
-331,331,331,331,332,332,333,332,332,332,332,332,332,332,333,333,
-333,333,333,333,333,333,332,333,333,332,332,332,332,332,332,332,
-332,332,332,332,334,334,334,335,334,334,334,336,331,332,109,109,
-337,337,337,337,337,337,337,337,337,337,109,109,109,109,109,109,
-338,338,338,338,338,338,338,338,338,338,109,109,109,109,109,109,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,341,341,342,341,341,341,341,341,341,341,342,342,
+342,342,342,342,342,342,341,342,342,341,341,341,341,341,341,341,
+341,341,341,341,343,343,343,344,343,343,343,345,340,341,114,114,
+346,346,346,346,346,346,346,346,346,346,114,114,114,114,114,114,
+347,347,347,347,347,347,347,347,347,347,114,114,114,114,114,114,
/* block 46 */
-339,339, 4, 4,339, 4,340,339,339,339,339,341,341,341,342,109,
-343,343,343,343,343,343,343,343,343,343,109,109,109,109,109,109,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,345,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,109,109,109,109,109,109,109,109,
+348,348, 4, 4,348, 4,349,348,348,348,348,350,350,350,351,114,
+352,352,352,352,352,352,352,352,352,352,114,114,114,114,114,114,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,354,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,114,114,114,114,114,114,114,114,
/* block 47 */
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,341,344,109,109,109,109,109,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
-315,315,315,315,315,315,109,109,109,109,109,109,109,109,109,109,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
+353,353,353,353,353,353,353,353,353,350,353,114,114,114,114,114,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
+324,324,324,324,324,324,114,114,114,114,114,114,114,114,114,114,
/* block 48 */
-346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
-346,346,346,346,346,346,346,346,346,346,346,346,346,109,109,109,
-347,347,347,348,348,348,348,347,347,348,348,348,109,109,109,109,
-348,348,347,348,348,348,348,348,348,347,347,347,109,109,109,109,
-349,109,109,109,350,350,351,351,351,351,351,351,351,351,351,351,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,109,109,
-352,352,352,352,352,109,109,109,109,109,109,109,109,109,109,109,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,114,
+356,356,356,357,357,357,357,356,356,357,357,357,114,114,114,114,
+357,357,356,357,357,357,357,357,357,356,356,356,114,114,114,114,
+358,114,114,114,359,359,360,360,360,360,360,360,360,360,360,360,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,114,114,
+361,361,361,361,361,114,114,114,114,114,114,114,114,114,114,114,
/* block 49 */
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,353,109,109,109,109,
-354,354,354,354,354,355,355,355,354,354,355,354,354,354,354,354,
-354,353,353,353,353,353,353,353,354,354,109,109,109,109,109,109,
-356,356,356,356,356,356,356,356,356,356,357,109,109,109,358,358,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,
+362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,
+362,362,362,362,362,362,362,362,362,362,362,362,114,114,114,114,
+363,363,363,363,363,364,364,364,363,363,364,363,363,363,363,363,
+363,362,362,362,362,362,362,362,363,363,114,114,114,114,114,114,
+365,365,365,365,365,365,365,365,365,365,366,114,114,114,367,367,
+368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
/* block 50 */
-360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
-360,360,360,360,360,360,360,361,361,362,362,361,109,109,363,363,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,365,366,365,366,366,366,366,366,366,366,109,
-366,367,366,367,367,366,366,366,366,366,366,366,366,365,365,365,
-365,365,365,366,366,366,366,366,366,366,366,366,366,109,109,366,
+369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,
+369,369,369,369,369,369,369,370,370,371,371,370,114,114,372,372,
+373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
+373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
+373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
+373,373,373,373,373,374,375,374,375,375,375,375,375,375,375,114,
+375,376,375,376,376,375,375,375,375,375,375,375,375,374,374,374,
+374,374,374,375,375,375,375,375,375,375,375,375,375,114,114,375,
/* block 51 */
-368,368,368,368,368,368,368,368,368,368,109,109,109,109,109,109,
-368,368,368,368,368,368,368,368,368,368,109,109,109,109,109,109,
-369,369,369,369,369,369,369,370,369,369,369,369,369,369,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+377,377,377,377,377,377,377,377,377,377,114,114,114,114,114,114,
+377,377,377,377,377,377,377,377,377,377,114,114,114,114,114,114,
+378,378,378,378,378,378,378,379,378,378,378,378,378,378,114,114,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,380,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 52 */
-371,371,371,371,372,373,373,373,373,373,373,373,373,373,373,373,
-373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
-373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
-373,373,373,373,371,372,371,371,371,371,371,372,371,372,372,372,
-372,372,371,372,372,373,373,373,373,373,373,373,109,109,109,109,
-374,374,374,374,374,374,374,374,374,374,375,375,375,375,375,375,
-375,376,376,376,376,376,376,376,376,376,376,371,371,371,371,371,
-371,371,371,371,376,376,376,376,376,376,376,376,376,109,109,109,
+381,381,381,381,382,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
+383,383,383,383,381,382,381,381,381,381,381,382,381,382,382,382,
+382,382,381,382,382,383,383,383,383,383,383,383,114,114,114,114,
+384,384,384,384,384,384,384,384,384,384,385,385,385,385,385,385,
+385,386,386,386,386,386,386,386,386,386,386,381,381,381,381,381,
+381,381,381,381,386,386,386,386,386,386,386,386,386,114,114,114,
/* block 53 */
-377,377,378,379,379,379,379,379,379,379,379,379,379,379,379,379,
-379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
-379,378,377,377,377,377,378,378,377,377,378,377,378,378,379,379,
-380,380,380,380,380,380,380,380,380,380,379,379,379,379,379,379,
-381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,
-381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,
-381,381,381,381,381,381,382,383,382,382,383,383,383,382,383,382,
-382,382,383,383,109,109,109,109,109,109,109,109,384,384,384,384,
+387,387,388,389,389,389,389,389,389,389,389,389,389,389,389,389,
+389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,
+389,388,387,387,387,387,388,388,387,387,388,387,387,387,389,389,
+390,390,390,390,390,390,390,390,390,390,389,389,389,389,389,389,
+391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,
+391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,
+391,391,391,391,391,391,392,393,392,392,393,393,393,392,393,392,
+392,392,393,393,114,114,114,114,114,114,114,114,394,394,394,394,
/* block 54 */
-385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
-385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,
-385,385,385,385,386,386,386,386,386,386,386,386,387,387,387,387,
-387,387,387,387,386,386,387,387,109,109,109,388,388,388,388,388,
-389,389,389,389,389,389,389,389,389,389,109,109,109,385,385,385,
-390,390,390,390,390,390,390,390,390,390,391,391,391,391,391,391,
-391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,
-391,391,391,391,391,391,391,391,392,392,392,392,392,392,393,393,
+395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,
+395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,
+395,395,395,395,396,396,396,396,396,396,396,396,397,397,397,397,
+397,397,397,397,396,396,397,397,114,114,114,398,398,398,398,398,
+399,399,399,399,399,399,399,399,399,399,114,114,114,395,395,395,
+400,400,400,400,400,400,400,400,400,400,401,401,401,401,401,401,
+401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,
+401,401,401,401,401,401,401,401,402,402,402,402,402,402,403,403,
/* block 55 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-394,394,394,394,394,394,394,394,109,109,109,109,109,109,109,109,
-104,104,104, 4,104,104,104,104,104,104,104,104,104,104,104,104,
-104,395,104,104,104,104,104,104,104,396,396,396,396,104,396,396,
-396,396,395,395,104,396,396,109,109,109,109,109,109,109,109,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+404,404,404,404,404,404,404,404,114,114,114,114,114,114,114,114,
+109,109,109, 4,109,109,109,109,109,109,109,109,109,109,109,109,
+109,405,109,109,109,109,109,109,109,406,406,406,406,109,406,406,
+406,406,405,405,109,406,406,114,109,109,114,114,114,114,114,114,
/* block 56 */
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33,116,116,116,116,116,397,101,101,101,101,
-101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
-101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
-101,101,101,101,101,101,101,101,101,101,101,101,101,110,110,110,
-110,110,101,101,101,101,110,110,110,110,110, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33,398,399, 33, 33, 33,400, 33, 33,
+ 33, 33, 33, 33, 33, 33,122,122,122,122,122,407,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,115,115,115,
+115,115,106,106,106,106,115,115,115,115,115, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33,408,409, 33, 33, 33,410, 33, 33,
/* block 57 */
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,101,101,101,101,101,
-101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
-101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,110,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,104,104,104,104,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,115,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,114,114,114,114,114,114,109,109,109,109,
/* block 58 */
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
@@ -1844,12 +1937,12 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-401,402, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+411,412, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
/* block 59 */
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
- 30, 31, 30, 31, 30, 31, 33, 33, 33, 33, 33,403, 33, 33,404, 33,
+ 30, 31, 30, 31, 30, 31, 33, 33, 33, 33, 33,413, 33, 33,414, 33,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
@@ -1858,57 +1951,57 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
/* block 60 */
-405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,
-405,405,405,405,405,405,109,109,406,406,406,406,406,406,109,109,
-405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,
-405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,
-405,405,405,405,405,405,109,109,406,406,406,406,406,406,109,109,
-116,405,116,405,116,405,116,405,109,406,109,406,109,406,109,406,
-405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,
-407,407,408,408,408,408,409,409,410,410,411,411,412,412,109,109,
+415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,
+415,415,415,415,415,415,114,114,416,416,416,416,416,416,114,114,
+415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,
+415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,
+415,415,415,415,415,415,114,114,416,416,416,416,416,416,114,114,
+122,415,122,415,122,415,122,415,114,416,114,416,114,416,114,416,
+415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,
+417,417,418,418,418,418,419,419,420,420,421,421,422,422,114,114,
/* block 61 */
-405,405,405,405,405,405,405,405,413,413,413,413,413,413,413,413,
-405,405,405,405,405,405,405,405,413,413,413,413,413,413,413,413,
-405,405,405,405,405,405,405,405,413,413,413,413,413,413,413,413,
-405,405,116,414,116,109,116,116,406,406,415,415,416,108,417,108,
-108,108,116,414,116,109,116,116,418,418,418,418,416,108,108,108,
-405,405,116,116,109,109,116,116,406,406,419,419,109,108,108,108,
-405,405,116,116,116,157,116,116,406,406,420,420,161,108,108,108,
-109,109,116,414,116,109,116,116,421,421,422,422,416,108,108,109,
+415,415,415,415,415,415,415,415,423,423,423,423,423,423,423,423,
+415,415,415,415,415,415,415,415,423,423,423,423,423,423,423,423,
+415,415,415,415,415,415,415,415,423,423,423,423,423,423,423,423,
+415,415,122,424,122,114,122,122,416,416,425,425,426,113,427,113,
+113,113,122,424,122,114,122,122,428,428,428,428,426,113,113,113,
+415,415,122,122,114,114,122,122,416,416,429,429,114,113,113,113,
+415,415,122,122,122,163,122,122,416,416,430,430,168,113,113,113,
+114,114,122,424,122,114,122,122,431,431,432,432,426,113,113,114,
/* block 62 */
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 22,423,423, 22, 22,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 22,433,433, 22, 22,
9, 9, 9, 9, 9, 9, 4, 4, 21, 25, 6, 21, 21, 25, 6, 21,
- 4, 4, 4, 4, 4, 4, 4, 4,424,425, 22, 22, 22, 22, 22, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4,434,435, 22, 22, 22, 22, 22, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4, 21, 25, 4, 4, 4, 4, 15,
15, 4, 4, 4, 8, 6, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 8, 4, 15, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3,
- 22, 22, 22, 22, 22,426, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
- 23,101,109,109, 23, 23, 23, 23, 23, 23, 8, 8, 8, 6, 7,101,
+ 22, 22, 22, 22, 22,436, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 23,106,114,114, 23, 23, 23, 23, 23, 23, 8, 8, 8, 6, 7,106,
/* block 63 */
- 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 8, 8, 8, 6, 7,109,
-101,101,101,101,101,101,101,101,101,101,101,101,101,109,109,109,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 8, 8, 8, 6, 7,114,
+106,106,106,106,106,106,106,106,106,106,106,106,106,114,114,114,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-104,104,104,104,104,104,104,104,104,104,104,104,104,427,427,427,
-427,104,427,427,427,104,104,104,104,104,104,104,104,104,104,104,
-104,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+109,109,109,109,109,109,109,109,109,109,109,109,109,380,380,380,
+380,109,380,380,380,109,109,109,109,109,109,109,109,109,109,109,
+109,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 64 */
- 19, 19,428, 19, 19, 19, 19,428, 19, 19,429,428,428,428,429,429,
-428,428,428,429, 19,428, 19, 19, 8,428,428,428,428,428, 19, 19,
- 19, 19, 19, 19,428, 19,430, 19,428, 19,431,432,428,428, 19,429,
-428,428,433,428,429,396,396,396,396,429, 19, 19,429,429,428,428,
- 8, 8, 8, 8, 8,428,429,429,429,429, 19, 8, 19, 19,434, 19,
+ 19, 19,437, 19, 19, 19, 19,437, 19, 19,438,437,437,437,438,438,
+437,437,437,438, 19,437, 19, 19, 8,437,437,437,437,437, 19, 19,
+ 19, 19, 19, 19,437, 19,439, 19,437, 19,440,441,437,437, 19,438,
+437,437,442,437,438,406,406,406,406,438, 19, 19,438,438,437,437,
+ 8, 8, 8, 8, 8,437,438,438,438,438, 19, 8, 19, 19,443, 19,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
-435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,
-436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,
+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
/* block 65 */
-437,437,437, 30, 31,437,437,437,437, 23,109,109,109,109,109,109,
+446,446,446, 30, 31,446,446,446,446, 23,114,114,114,114,114,114,
8, 8, 8, 8, 8, 19, 19, 19, 19, 19, 8, 8, 19, 19, 19, 19,
8, 19, 19, 8, 19, 19, 8, 19, 19, 19, 19, 19, 19, 19, 8, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
@@ -1945,15 +2038,15 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 8, 8, 8, 8,
8, 8, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,
/* block 69 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
@@ -1961,10 +2054,10 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19,438,438,438,438,438,438,438,438,438,438,
-438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
-439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
-439,439,439,439,439,439,439,439,439,439, 23, 23, 23, 23, 23, 23,
+ 19, 19, 19, 19, 19, 19,447,447,447,447,447,447,447,447,447,447,
+447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,
+448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,
+448,448,448,448,448,448,448,448,448,448, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
/* block 71 */
@@ -1998,7 +2091,7 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
/* block 74 */
-109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
@@ -2018,14 +2111,14 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
/* block 76 */
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
-440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
+449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
/* block 77 */
8, 8, 8, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6,
@@ -2042,150 +2135,150 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 19, 19, 8, 8, 8, 8, 8, 8,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 8, 8, 8, 8, 8, 19, 19, 8, 8, 8, 8, 8, 8, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19,114,114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
/* block 79 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19,114,114, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19,114, 19, 19, 19, 19, 19, 19,
+ 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 80 */
-441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
-441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
-441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,109,
-442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,
-442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,
-442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,109,
- 30, 31,443,444,445,446,447, 30, 31, 30, 31, 30, 31,448,449,450,
-451, 33, 30, 31, 33, 30, 31, 33, 33, 33, 33, 33,101,101,452,452,
+450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,
+450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,
+450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,114,
+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,114,
+ 30, 31,452,453,454,455,456, 30, 31, 30, 31, 30, 31,457,458,459,
+460, 33, 30, 31, 33, 30, 31, 33, 33, 33, 33, 33,106,106,461,461,
/* block 81 */
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,153,154,153,154,153,154,153,154,153,154,153,154,
-153,154,153,154,453,454,454,454,454,454,454,153,154,153,154,455,
-455,455,153,154,109,109,109,109,109,456,456,456,456,457,456,456,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,159,160,159,160,159,160,159,160,159,160,159,160,
+159,160,159,160,462,463,463,463,463,463,463,159,160,159,160,464,
+464,464,159,160,114,114,114,114,114,465,465,465,465,466,465,465,
/* block 82 */
-458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,
-458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,
-458,458,458,458,458,458,109,458,109,109,109,109,109,458,109,109,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,109,109,109,109,109,109,109,460,
-461,109,109,109,109,109,109,109,109,109,109,109,109,109,109,462,
+467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
+467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
+467,467,467,467,467,467,114,467,114,114,114,114,114,467,114,114,
+468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,
+468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,
+468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,
+468,468,468,468,468,468,468,468,114,114,114,114,114,114,114,469,
+470,114,114,114,114,114,114,114,114,114,114,114,114,114,114,471,
/* block 83 */
-308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
-308,308,308,308,308,308,308,109,109,109,109,109,109,109,109,109,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,109,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,109,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,109,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,109,
-170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
-170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,
+317,317,317,317,317,317,317,114,114,114,114,114,114,114,114,114,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,114,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,114,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,114,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,114,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
/* block 84 */
4, 4, 21, 25, 21, 25, 4, 4, 4, 21, 25, 4, 21, 25, 4, 4,
4, 4, 4, 4, 4, 4, 4, 9, 4, 4, 9, 4, 21, 25, 4, 4,
- 21, 25, 6, 7, 6, 7, 6, 7, 6, 7, 4, 4, 4, 4, 4,102,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 21, 25, 6, 7, 6, 7, 6, 7, 6, 7, 4, 4, 4, 4, 4,107,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9, 4, 4, 4, 4,
+ 9, 4, 6,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 85 */
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,109,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,109,109,109,109,109,109,109,109,109,109,109,109,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,114,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 86 */
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
/* block 87 */
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
-463,463,463,463,463,463,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+472,472,472,472,472,472,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,
/* block 88 */
- 3, 4, 4, 4, 19,464,396,465, 6, 7, 6, 7, 6, 7, 6, 7,
+ 3, 4, 4, 4, 19,473,406,474, 6, 7, 6, 7, 6, 7, 6, 7,
6, 7, 19, 19, 6, 7, 6, 7, 6, 7, 6, 7, 9, 6, 7, 7,
- 19,465,465,465,465,465,465,465,465,465,104,104,104,104,466,466,
- 9,102,102,102,102,102, 19, 19,465,465,465,464,396, 4, 19, 19,
-109,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
-467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
-467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
-467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
+ 19,474,474,474,474,474,474,474,474,474,109,109,109,109,475,475,
+ 9,107,107,107,107,107, 19, 19,474,474,474,473,406, 4, 19, 19,
+114,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
/* block 89 */
-467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
-467,467,467,467,467,467,467,109,109,104,104, 14, 14,468,468,467,
- 9,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469, 4,102,470,470,469,
+476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+476,476,476,476,476,476,476,114,114,109,109, 14, 14,477,477,476,
+ 9,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478, 4,107,479,479,478,
/* block 90 */
-109,109,109,109,109,471,471,471,471,471,471,471,471,471,471,471,
-471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
-471,471,471,471,471,471,471,471,471,471,471,471,471,471,109,109,
-109,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
+114,114,114,114,114,480,480,480,480,480,480,480,480,480,480,480,
+480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,
+480,480,480,480,480,480,480,480,480,480,480,480,480,480,114,114,
+114,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
/* block 91 */
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,109,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,114,
19, 19, 23, 23, 23, 23, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
-471,471,471,471,471,471,471,471,471,471,471,109,109,109,109,109,
+480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,
+480,480,480,480,480,480,480,480,480,480,480,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
+ 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
/* block 92 */
-473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
-473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,109,
+482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
+482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,114,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 23, 23, 23, 23, 23, 23, 23, 23,
19, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
-473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
-473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, 19,
+482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
+482,482,482,482,482,482,482,482,482,482,482,482,482,482,482, 19,
/* block 93 */
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 19, 19, 19, 19, 19, 19,
@@ -2193,731 +2286,931 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,109,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,114,
/* block 94 */
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
-474,474,474,474,474,474,474,474, 19, 19, 19, 19, 19, 19, 19, 19,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
+483,483,483,483,483,483,483,483, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
/* block 95 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
/* block 96 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,109,109,109,109,109,109,109,109,109,109,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,114,114,114,114,114,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
/* block 97 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 98 */
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,477,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,486,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
/* block 99 */
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
-476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
+485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
/* block 100 */
-476,476,476,476,476,476,476,476,476,476,476,476,476,109,109,109,
-478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
-478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
-478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
-478,478,478,478,478,478,478,109,109,109,109,109,109,109,109,109,
-479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,
-479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,
-479,479,479,479,479,479,479,479,480,480,480,480,480,480,481,481,
+485,485,485,485,485,485,485,485,485,485,485,485,485,114,114,114,
+487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,
+487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,
+487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,
+487,487,487,487,487,487,487,114,114,114,114,114,114,114,114,114,
+488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
+488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
+488,488,488,488,488,488,488,488,489,489,489,489,489,489,490,490,
/* block 101 */
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
/* block 102 */
-482,482,482,482,482,482,482,482,482,482,482,482,483,484,484,484,
-482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
-485,485,485,485,485,485,485,485,485,485,482,482,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,486,170,
-171,171,171,487,170,170,170,170,170,170,170,170,170,170,487,398,
+491,491,491,491,491,491,491,491,491,491,491,491,492,493,493,493,
+491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,
+494,494,494,494,494,494,494,494,494,494,491,491,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,495,177,
+178,178,178,496,177,177,177,177,177,177,177,177,177,177,496,408,
/* block 103 */
-167,168,167,168,167,168,167,168,167,168,167,168,167,168,167,168,
-167,168,167,168,167,168,167,168,109,109,109,109,109,109,109,170,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,489,489,489,489,489,489,489,489,489,489,
-490,490,491,491,491,491,491,491,109,109,109,109,109,109,109,109,
+174,175,174,175,174,175,174,175,174,175,174,175,174,175,174,175,
+174,175,174,175,174,175,174,175,174,175,174,175,408,408,114,177,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,498,498,498,498,498,498,498,498,498,498,
+499,499,500,500,500,500,500,500,114,114,114,114,114,114,114,114,
/* block 104 */
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14,102,102,102,102,102,102,102,102,102,
+ 14, 14, 14, 14, 14, 14, 14,107,107,107,107,107,107,107,107,107,
14, 14, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
33, 33, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
-101, 33, 33, 33, 33, 33, 33, 33, 33, 30, 31, 30, 31,492, 30, 31,
+106, 33, 33, 33, 33, 33, 33, 33, 33, 30, 31, 30, 31,501, 30, 31,
/* block 105 */
- 30, 31, 30, 31, 30, 31, 30, 31,102, 14, 14, 30, 31,493, 33,109,
- 30, 31, 30, 31,109,109,109,109,109,109,109,109,109,109,109,109,
- 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,494,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,101,101, 33, 20, 20, 20, 20, 20,
+ 30, 31, 30, 31, 30, 31, 30, 31,107, 14, 14, 30, 31,502, 33,114,
+ 30, 31, 30, 31, 33, 33, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,
+ 30, 31, 30, 31, 30, 31, 30, 31, 30, 31,503,504,505,506,114,114,
+507,508,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114, 20,106,106, 33, 20, 20, 20, 20, 20,
/* block 106 */
-495,495,496,495,495,495,496,495,495,495,495,496,495,495,495,495,
-495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,
-495,495,495,497,497,496,496,497,498,498,498,498,109,109,109,109,
- 23, 23, 23, 23, 23, 23, 19, 19, 5, 19,109,109,109,109,109,109,
-499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,
-499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,
-499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,
-499,499,499,499,500,500,500,500,109,109,109,109,109,109,109,109,
+509,509,510,509,509,509,510,509,509,509,509,510,509,509,509,509,
+509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,
+509,509,509,511,511,510,510,511,512,512,512,512,114,114,114,114,
+ 23, 23, 23, 23, 23, 23, 19, 19, 5, 19,114,114,114,114,114,114,
+513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+513,513,513,513,514,514,514,514,114,114,114,114,114,114,114,114,
/* block 107 */
-501,501,502,502,502,502,502,502,502,502,502,502,502,502,502,502,
-502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,
-502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,
-502,502,502,502,501,501,501,501,501,501,501,501,501,501,501,501,
-501,501,501,501,503,109,109,109,109,109,109,109,109,109,504,504,
-505,505,505,505,505,505,505,505,505,505,109,109,109,109,109,109,
-213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
-213,213,215,215,215,215,215,215,217,217,217,215,109,109,109,109,
+515,515,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,515,515,515,515,515,515,515,515,515,515,515,515,
+515,515,515,515,517,114,114,114,114,114,114,114,114,114,518,518,
+519,519,519,519,519,519,519,519,519,519,114,114,114,114,114,114,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,223,223,223,223,223,223,225,225,225,223,114,114,114,114,
/* block 108 */
-506,506,506,506,506,506,506,506,506,506,507,507,507,507,507,507,
-507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,
-507,507,507,507,507,507,508,508,508,508,508,508,508,508,509,509,
-510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
-510,510,510,510,510,510,510,511,511,511,511,511,511,511,511,511,
-511,511,512,512,109,109,109,109,109,109,109,109,109,109,109,513,
-305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
-305,305,305,305,305,305,305,305,305,305,305,305,305,109,109,109,
+520,520,520,520,520,520,520,520,520,520,521,521,521,521,521,521,
+521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,
+521,521,521,521,521,521,522,522,522,522,522,522,522,522, 4,523,
+524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,
+524,524,524,524,524,524,524,525,525,525,525,525,525,525,525,525,
+525,525,526,526,114,114,114,114,114,114,114,114,114,114,114,527,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,114,114,114,
/* block 109 */
-514,514,514,515,516,516,516,516,516,516,516,516,516,516,516,516,
-516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
-516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
-516,516,516,514,515,515,514,514,514,514,515,515,514,515,515,515,
-515,517,517,517,517,517,517,517,517,517,517,517,517,517,109,102,
-518,518,518,518,518,518,518,518,518,518,109,109,109,109,517,517,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+528,528,528,529,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
+530,530,530,528,529,529,528,528,528,528,529,529,528,529,529,529,
+529,531,531,531,531,531,531,531,531,531,531,531,531,531,114,107,
+532,532,532,532,532,532,532,532,532,532,114,114,114,114,531,531,
+304,304,304,304,304,306,533,304,304,304,304,304,304,304,304,304,
+308,308,308,308,308,308,308,308,308,308,304,304,304,304,304,114,
/* block 110 */
-519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-519,519,519,519,519,519,519,519,519,520,520,520,520,520,520,521,
-521,520,520,521,521,520,520,109,109,109,109,109,109,109,109,109,
-519,519,519,520,519,519,519,519,519,519,519,519,520,521,109,109,
-522,522,522,522,522,522,522,522,522,522,109,109,523,523,523,523,
-295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
-524,295,295,295,295,295,295,301,301,301,295,296,109,109,109,109,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,535,535,535,535,535,535,536,
+536,535,535,536,536,535,535,114,114,114,114,114,114,114,114,114,
+534,534,534,535,534,534,534,534,534,534,534,534,535,536,114,114,
+537,537,537,537,537,537,537,537,537,537,114,114,538,538,538,538,
+304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
+533,304,304,304,304,304,304,310,310,310,304,305,306,305,304,304,
/* block 111 */
-525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
-525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
-525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
-526,525,526,526,526,525,525,526,526,525,525,525,525,525,526,526,
-525,526,525,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,525,525,527,528,528,
-529,529,529,529,529,529,529,529,529,529,529,530,531,531,530,530,
-532,532,529,533,533,530,531,109,109,109,109,109,109,109,109,109,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
+540,539,540,540,540,539,539,540,540,539,539,539,539,539,540,540,
+539,540,539,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,539,539,541,542,542,
+543,543,543,543,543,543,543,543,543,543,543,544,545,545,544,544,
+546,546,543,547,547,544,545,114,114,114,114,114,114,114,114,114,
/* block 112 */
-109,308,308,308,308,308,308,109,109,308,308,308,308,308,308,109,
-109,308,308,308,308,308,308,109,109,109,109,109,109,109,109,109,
-308,308,308,308,308,308,308,109,308,308,308,308,308,308,308,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,317,317,317,317,317,317,114,114,317,317,317,317,317,317,114,
+114,317,317,317,317,317,317,114,114,114,114,114,114,114,114,114,
+317,317,317,317,317,317,317,114,317,317,317,317,317,317,317,114,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
+ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 14,106,106,106,106,
+114,114,114,114, 33,122,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 113 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,530,530,531,530,530,531,530,530,532,530,531,109,109,
-534,534,534,534,534,534,534,534,534,534,109,109,109,109,109,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
+543,543,543,544,544,545,544,544,545,544,544,546,544,545,114,114,
+548,548,548,548,548,548,548,548,548,548,114,114,114,114,114,114,
/* block 114 */
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
/* block 115 */
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
/* block 116 */
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
/* block 117 */
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
/* block 118 */
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
/* block 119 */
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
/* block 120 */
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-535,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,535,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,535,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+549,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,549,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,549,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
/* block 121 */
-536,536,536,536,536,536,536,536,535,536,536,536,536,536,536,536,
-536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
-536,536,536,536,109,109,109,109,109,109,109,109,109,109,109,109,
-306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
-306,306,306,306,306,306,306,109,109,109,109,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
-307,307,307,307,307,307,307,307,307,307,307,307,109,109,109,109,
+550,550,550,550,550,550,550,550,549,550,550,550,550,550,550,550,
+550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
+550,550,550,550,114,114,114,114,114,114,114,114,114,114,114,114,
+315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
+315,315,315,315,315,315,315,114,114,114,114,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
+316,316,316,316,316,316,316,316,316,316,316,316,114,114,114,114,
/* block 122 */
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
-537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
+551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
/* block 123 */
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
/* block 124 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,109,109,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,114,114,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
/* block 125 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 126 */
- 33, 33, 33, 33, 33, 33, 33,109,109,109,109,109,109,109,109,109,
-109,109,109,178,178,178,178,178,109,109,109,109,109,184,181,184,
-184,184,184,184,184,184,184,184,184,539,184,184,184,184,184,184,
-184,184,184,184,184,184,184,109,184,184,184,184,184,109,184,109,
-184,184,109,184,184,109,184,184,184,184,184,184,184,184,184,184,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+ 33, 33, 33, 33, 33, 33, 33,114,114,114,114,114,114,114,114,114,
+114,114,114,185,185,185,185,185,114,114,114,114,114,192,189,192,
+192,192,192,192,192,192,192,192,192,553,192,192,192,192,192,192,
+192,192,192,192,192,192,192,114,192,192,192,192,192,114,192,114,
+192,192,114,192,192,114,192,192,192,192,192,192,192,192,192,192,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 127 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,540,540,540,540,540,540,540,540,540,540,540,540,540,540,
-540,540,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
+554,554,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 128 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 129 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191, 6, 7,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199, 7, 6,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
/* block 130 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-109,109,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-191,191,191,191,191,191,191,191,191,191,191,191,188, 19,109,109,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+114,114,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+199,199,199,199,199,199,199,199,199,199,199,199,196,197,114,114,
/* block 131 */
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
- 4, 4, 4, 4, 4, 4, 4, 6, 7, 4,109,109,109,109,109,109,
-104,104,104,104,104,104,104,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 4, 4, 4, 4, 4, 4, 4, 6, 7, 4,114,114,114,114,114,114,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,114,114,
4, 9, 9, 15, 15, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6,
7, 6, 7, 6, 7, 4, 4, 6, 7, 4, 4, 4, 4, 15, 15, 15,
- 4, 4, 4,109, 4, 4, 4, 4, 9, 6, 7, 6, 7, 6, 7, 4,
- 4, 4, 8, 9, 8, 8, 8,109, 4, 5, 4, 4,109,109,109,109,
-191,191,191,191,191,109,191,191,191,191,191,191,191,191,191,191,
+ 4, 4, 4,114, 4, 4, 4, 4, 9, 6, 7, 6, 7, 6, 7, 4,
+ 4, 4, 8, 9, 8, 8, 8,114, 4, 5, 4, 4,114,114,114,114,
+199,199,199,199,199,114,199,199,199,199,199,199,199,199,199,199,
/* block 132 */
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,109,109, 22,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,114,114, 22,
/* block 133 */
-109, 4, 4, 4, 5, 4, 4, 4, 6, 7, 4, 8, 4, 9, 4, 4,
+114, 4, 4, 4, 5, 4, 4, 4, 6, 7, 4, 8, 4, 9, 4, 4,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 4, 8, 8, 8, 4,
4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 6, 4, 7, 14, 15,
14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, 8, 7, 8, 6,
- 7, 4, 6, 7, 4, 4,469,469,469,469,469,469,469,469,469,469,
-102,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
+ 7, 4, 6, 7, 4, 4,478,478,478,478,478,478,478,478,478,478,
+107,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
/* block 134 */
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
-469,469,469,469,469,469,469,469,469,469,469,469,469,469,541,541,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
-472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,109,
-109,109,472,472,472,472,472,472,109,109,472,472,472,472,472,472,
-109,109,472,472,472,472,472,472,109,109,472,472,472,109,109,109,
- 5, 5, 8, 14, 19, 5, 5,109, 19, 8, 8, 8, 8, 19, 19,109,
-426,426,426,426,426,426,426,426,426, 22, 22, 22, 19, 19,109,109,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,
+478,478,478,478,478,478,478,478,478,478,478,478,478,478,555,555,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
+481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,114,
+114,114,481,481,481,481,481,481,114,114,481,481,481,481,481,481,
+114,114,481,481,481,481,481,481,114,114,481,481,481,114,114,114,
+ 5, 5, 8, 14, 19, 5, 5,114, 19, 8, 8, 8, 8, 19, 19,114,
+436,436,436,436,436,436,436,436,436, 22, 22, 22, 19, 19,114,114,
/* block 135 */
-542,542,542,542,542,542,542,542,542,542,542,542,109,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,109,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,109,542,542,109,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,109,109,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+556,556,556,556,556,556,556,556,556,556,556,556,114,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,114,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,114,556,556,114,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,114,114,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 136 */
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
-542,542,542,542,542,542,542,542,542,542,542,109,109,109,109,109,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
+556,556,556,556,556,556,556,556,556,556,556,114,114,114,114,114,
/* block 137 */
- 4, 4, 4,109,109,109,109, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 4, 4, 4,114,114,114,114, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
- 23, 23, 23, 23,109,109,109, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
-543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
-543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
-543,543,543,543,543,544,544,544,544,545,545,545,545,545,545,545,
+ 23, 23, 23, 23,114,114,114, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,557,557,557,558,558,558,558,559,559,559,559,559,559,559,
/* block 138 */
-545,545,545,545,545,545,545,545,545,545,544,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+559,559,559,559,559,559,559,559,559,559,558,558,559,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,
+559,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,104,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,114,114,
/* block 139 */
-546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,
-546,546,546,546,546,546,546,546,546,546,546,546,546,109,109,109,
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 140 */
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,109,
-549,549,549,549,109,109,109,109,109,109,109,109,109,109,109,109,
-550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
-550,551,550,550,550,550,550,550,550,550,551,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,
+560,560,560,560,560,560,560,560,560,560,560,560,560,114,114,114,
+561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,
+561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,
+561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,
+561,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+109, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,114,114,114,114,
/* block 141 */
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
-552,552,552,552,552,552,552,552,552,552,552,552,552,552,109,553,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,109,109,109,109,554,554,554,554,554,554,554,554,
-555,556,556,556,556,556,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,
+562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,
+563,563,563,563,114,114,114,114,114,114,114,114,114,114,114,114,
+564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,
+564,565,564,564,564,564,564,564,564,564,565,114,114,114,114,114,
+566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,
+566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,
+566,566,566,566,566,566,567,567,567,567,567,114,114,114,114,114,
/* block 142 */
-557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
-557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
-557,557,557,557,557,557,557,557,558,558,558,558,558,558,558,558,
-558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,
-558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,
-559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
-559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
-559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,
+568,568,568,568,568,568,568,568,568,568,568,568,568,568,114,569,
+570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,
+570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,
+570,570,570,570,114,114,114,114,570,570,570,570,570,570,570,570,
+571,572,572,572,572,572,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 143 */
-560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,
-560,560,560,560,560,560,560,560,560,560,560,560,560,560,109,109,
-561,561,561,561,561,561,561,561,561,561,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
+573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
+573,573,573,573,573,573,573,573,574,574,574,574,574,574,574,574,
+574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,
+574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,
+575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,
+575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,
+575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,
/* block 144 */
-562,562,562,562,562,562,109,109,562,109,562,562,562,562,562,562,
-562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,
-562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,
-562,562,562,562,562,562,109,562,562,109,109,109,562,109,109,562,
-563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,
-563,563,563,563,563,563,109,564,565,565,565,565,565,565,565,565,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,
+576,576,576,576,576,576,576,576,576,576,576,576,576,576,114,114,
+577,577,577,577,577,577,577,577,577,577,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 145 */
-566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,
-566,566,566,566,566,566,567,567,567,567,567,567,109,109,109,568,
-569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,
-569,569,569,569,569,569,569,569,569,569,109,109,109,109,109,570,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,114,114,114,114,114,114,114,114,
+579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,
+579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,
+579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,
+579,579,579,579,114,114,114,114,114,114,114,114,114,114,114,580,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 146 */
-571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,
-571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,109,109,109,109,109,109,572,572,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
/* block 147 */
-573,574,574,574,109,574,574,109,109,109,109,109,574,574,574,574,
-573,573,573,573,109,573,573,573,109,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,109,109,109,109,574,574,574,109,109,109,109,574,
-575,575,575,575,575,575,575,575,109,109,109,109,109,109,109,109,
-576,576,576,576,576,576,576,576,576,109,109,109,109,109,109,109,
-577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
-577,577,577,577,577,577,577,577,577,577,577,577,577,578,578,579,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,581,114,114,114,114,114,114,114,114,114,
+581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+581,581,581,581,581,581,114,114,114,114,114,114,114,114,114,114,
+581,581,581,581,581,581,581,581,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 148 */
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,109,109,109,581,581,581,581,581,581,581,
+582,582,582,582,582,582,114,114,582,114,582,582,582,582,582,582,
+582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,
582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,
-582,582,582,582,582,582,109,109,583,583,583,583,583,583,583,583,
-584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,
-584,584,584,109,109,109,109,109,585,585,585,585,585,585,585,585,
+582,582,582,582,582,582,114,582,582,114,114,114,582,114,114,582,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,114,584,585,585,585,585,585,585,585,585,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,587,587,588,588,588,588,588,588,588,
/* block 149 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
+589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,114,
+114,114,114,114,114,114,114,590,590,590,590,590,590,590,590,590,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 150 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,109,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,592,592,592,592,592,592,114,114,114,593,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,114,114,114,114,114,595,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 151 */
-588,589,588,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,591,591,591,591,591,591,591,109,109,
-109,109,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
-592,592,592,592,592,592,593,593,593,593,593,593,593,593,593,593,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-
-/* block 152 */
-594,594,595,596,596,596,596,596,596,596,596,596,596,596,596,596,
596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,
596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,
-595,595,595,594,594,594,594,595,595,594,594,597,597,598,597,597,
-597,597,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,
-599,599,599,599,599,599,599,599,599,109,109,109,109,109,109,109,
-600,600,600,600,600,600,600,600,600,600,109,109,109,109,109,109,
+597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,
+597,597,597,597,597,597,597,597,114,114,114,114,114,114,597,597,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 153 */
-601,601,601,602,602,602,602,602,602,602,602,602,602,602,602,602,
+/* block 152 */
+598,599,599,599,114,599,599,114,114,114,114,114,599,599,599,599,
+598,598,598,598,114,598,598,598,114,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,114,114,114,114,599,599,599,114,114,114,114,599,
+600,600,600,600,600,600,600,600,114,114,114,114,114,114,114,114,
+601,601,601,601,601,601,601,601,601,114,114,114,114,114,114,114,
602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,
-602,602,602,602,602,602,602,601,601,601,601,601,603,601,601,601,
-601,601,601,601,601,109,604,604,604,604,604,604,604,604,604,604,
-605,605,605,605,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+602,602,602,602,602,602,602,602,602,602,602,602,602,603,603,604,
+
+/* block 153 */
+605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,
+605,605,605,605,605,605,605,605,605,605,605,605,605,606,606,606,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+607,607,607,607,607,607,607,607,608,607,607,607,607,607,607,607,
+607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,
+607,607,607,607,607,609,609,114,114,114,114,610,610,610,610,610,
+611,611,611,611,611,611,611,114,114,114,114,114,114,114,114,114,
/* block 154 */
-606,606,607,608,608,608,608,608,608,608,608,608,608,608,608,608,
-608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
-608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
-608,608,608,607,607,607,606,606,606,606,606,606,606,606,606,607,
-607,608,608,608,608,609,609,609,609,109,109,109,109,109,109,109,
-610,610,610,610,610,610,610,610,610,610,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
+612,612,612,612,612,612,114,114,114,613,613,613,613,613,613,613,
+614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,
+614,614,614,614,614,614,114,114,615,615,615,615,615,615,615,615,
+616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
+616,616,616,114,114,114,114,114,617,617,617,617,617,617,617,617,
/* block 155 */
-611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,
-611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,
-611,611,611,611,611,611,611,611,611,611,611,612,613,612,613,613,
-612,612,612,612,612,612,613,612,109,109,109,109,109,109,109,109,
-614,614,614,614,614,614,614,614,614,614,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
+618,618,114,114,114,114,114,114,114,619,619,619,619,114,114,114,
+114,114,114,114,114,114,114,114,114,620,620,620,620,620,620,620,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 156 */
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
+621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,
+621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,
+621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,
+621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,
+621,621,621,621,621,621,621,621,621,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 157 */
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
-615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,
+622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,114,
/* block 158 */
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
-616,616,616,109,109,109,109,109,109,109,109,109,109,109,109,109,
-617,617,617,617,109,109,109,109,109,109,109,109,109,109,109,109,
+623,624,623,625,625,625,625,625,625,625,625,625,625,625,625,625,
+625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
+625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
+625,625,625,625,625,625,625,625,624,624,624,624,624,624,624,624,
+624,624,624,624,624,624,624,626,626,626,626,626,626,626,114,114,
+114,114,627,627,627,627,627,627,627,627,627,627,627,627,627,627,
+627,627,627,627,627,627,628,628,628,628,628,628,628,628,628,628,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,624,
/* block 159 */
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
+629,629,630,631,631,631,631,631,631,631,631,631,631,631,631,631,
+631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
+631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
+630,630,630,629,629,629,629,630,630,629,629,632,632,633,632,632,
+632,632,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,
+634,634,634,634,634,634,634,634,634,114,114,114,114,114,114,114,
+635,635,635,635,635,635,635,635,635,635,114,114,114,114,114,114,
/* block 160 */
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
-618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+636,636,636,637,637,637,637,637,637,637,637,637,637,637,637,637,
+637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,
+637,637,637,637,637,637,637,636,636,636,636,636,638,636,636,636,
+636,636,636,636,636,114,639,639,639,639,639,639,639,639,639,639,
+640,640,640,640,114,114,114,114,114,114,114,114,114,114,114,114,
+641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,
+641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,
+641,641,641,642,643,643,641,114,114,114,114,114,114,114,114,114,
/* block 161 */
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
+644,644,645,646,646,646,646,646,646,646,646,646,646,646,646,646,
+646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,
+646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,
+646,646,646,645,645,645,644,644,644,644,644,644,644,644,644,645,
+645,646,646,646,646,647,647,647,647,114,114,114,114,647,114,114,
+648,648,648,648,648,648,648,648,648,648,646,114,114,114,114,114,
+114,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,
+649,649,649,649,649,114,114,114,114,114,114,114,114,114,114,114,
/* block 162 */
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
-488,488,488,488,488,488,488,488,488,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,
+650,650,114,650,650,650,650,650,650,650,650,650,650,650,650,650,
+650,650,650,650,650,650,650,650,650,650,650,650,651,651,651,652,
+652,652,651,651,652,651,652,652,653,653,653,653,653,653,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 163 */
-619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,
-619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,
-619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,
-619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,
-619,619,619,619,619,109,109,109,109,109,109,109,109,109,109,109,
-619,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,
-620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,
-620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,109,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,
+654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,
+654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,655,
+656,656,656,655,655,655,655,655,655,655,655,114,114,114,114,114,
+657,657,657,657,657,657,657,657,657,657,114,114,114,114,114,114,
/* block 164 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,621,
-621,621,621,622,622,622,622,622,622,622,622,622,622,622,622,622,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+114,658,659,659,114,660,660,660,660,660,660,660,660,114,114,660,
+660,114,114,660,660,660,660,660,660,660,660,660,660,660,660,660,
+660,660,660,660,660,660,660,660,660,114,660,660,660,660,660,660,
+660,114,660,660,114,660,660,660,660,660,114,114,658,660,661,659,
+658,659,659,659,659,114,114,659,659,114,114,659,659,659,114,114,
+114,114,114,114,114,114,114,661,114,114,114,114,114,660,660,660,
+660,660,659,659,114,114,658,658,658,658,658,658,658,114,114,114,
+658,658,658,658,658,114,114,114,114,114,114,114,114,114,114,114,
/* block 165 */
-469,467,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
+662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
+662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
+663,664,664,665,665,665,665,665,665,664,665,664,664,663,664,665,
+665,664,665,665,662,662,666,662,114,114,114,114,114,114,114,114,
+667,667,667,667,667,667,667,667,667,667,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
/* block 166 */
+668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
+668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
+668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,669,
+670,670,671,671,671,671,114,114,670,670,670,670,671,671,670,671,
+671,672,672,672,672,672,672,672,672,672,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 167 */
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+674,674,674,675,675,675,675,675,675,675,675,674,674,675,674,675,
+675,676,676,676,673,114,114,114,114,114,114,114,114,114,114,114,
+677,677,677,677,677,677,677,677,677,677,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 168 */
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,679,680,679,680,680,
+679,679,679,679,679,679,680,679,114,114,114,114,114,114,114,114,
+681,681,681,681,681,681,681,681,681,681,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 169 */
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,
+682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,
+683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
+683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
+684,684,684,684,684,684,684,684,684,684,685,685,685,685,685,685,
+685,685,685,114,114,114,114,114,114,114,114,114,114,114,114,686,
+
+/* block 170 */
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
+687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
+687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
+687,687,687,687,687,687,687,687,687,114,114,114,114,114,114,114,
+
+/* block 171 */
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+
+/* block 172 */
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 173 */
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
+689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,114,
+690,690,690,690,690,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 174 */
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+
+/* block 175 */
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
+691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 176 */
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+
+/* block 177 */
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
+497,497,497,497,497,497,497,497,497,114,114,114,114,114,114,114,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,114,
+693,693,693,693,693,693,693,693,693,693,114,114,114,114,694,694,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 178 */
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,
+695,695,695,695,695,695,695,695,695,695,695,695,695,695,114,114,
+696,696,696,696,696,697,114,114,114,114,114,114,114,114,114,114,
+
+/* block 179 */
+698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
+698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
+698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
+699,699,699,699,699,699,699,700,700,700,700,700,701,701,701,701,
+702,702,702,702,700,701,114,114,114,114,114,114,114,114,114,114,
+703,703,703,703,703,703,703,703,703,703,114,704,704,704,704,704,
+704,704,114,698,698,698,698,698,698,698,698,698,698,698,698,698,
+698,698,698,698,698,698,698,698,114,114,114,114,114,698,698,698,
+
+/* block 180 */
+698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 181 */
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,114,114,114,114,114,114,114,114,114,114,114,
+705,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
+706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
+706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,114,
+
+/* block 182 */
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,707,
+707,707,707,708,708,708,708,708,708,708,708,708,708,708,708,708,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 183 */
+478,476,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 184 */
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
+709,709,709,709,709,709,709,709,709,709,709,114,114,114,114,114,
+709,709,709,709,709,709,709,709,709,709,709,709,709,114,114,114,
+
+/* block 185 */
+709,709,709,709,709,709,709,709,709,114,114,114,114,114,114,114,
+709,709,709,709,709,709,709,709,709,709,114,114,710,711,711,712,
+ 22, 22, 22, 22,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 186 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
@@ -2925,321 +3218,361 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,
-/* block 167 */
+/* block 187 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19,109,109, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19,114,114, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19,623,395,104,104,104, 19, 19, 19,395,623,623,
-623,623,623, 22, 22, 22, 22, 22, 22, 22, 22,104,104,104,104,104,
+ 19, 19, 19, 19, 19,713,405,109,109,109, 19, 19, 19,405,713,713,
+713,713,713, 22, 22, 22, 22, 22, 22, 22, 22,109,109,109,109,109,
-/* block 168 */
-104,104,104, 19, 19,104,104,104,104,104,104,104, 19, 19, 19, 19,
+/* block 188 */
+109,109,109, 19, 19,109,109,109,109,109,109,109, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,104,104,104,104, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 169 */
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
-545,545,624,624,624,545,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+/* block 189 */
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,714,714,714,559,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 170 */
+/* block 190 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
- 23, 23,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 23, 23,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 171 */
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,429,
-429,429,429,429,429,109,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
+/* block 191 */
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,438,438,
+438,438,438,438,438,114,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-/* block 172 */
-428,428,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,428,109,428,428,
-109,109,428,109,109,428,428,109,109,428,428,428,428,109,428,428,
-428,428,428,428,428,428,429,429,429,429,109,429,109,429,429,429,
-429,429,429,429,109,429,429,429,429,429,429,429,429,429,429,429,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
+/* block 192 */
+437,437,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,437,114,437,437,
+114,114,437,114,114,437,437,114,114,437,437,437,437,114,437,437,
+437,437,437,437,437,437,438,438,438,438,114,438,114,438,438,438,
+438,438,438,438,114,438,438,438,438,438,438,438,438,438,438,438,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
-/* block 173 */
-429,429,429,429,428,428,109,428,428,428,428,109,109,428,428,428,
-428,428,428,428,428,109,428,428,428,428,428,428,428,109,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,428,428,109,428,428,428,428,109,
-428,428,428,428,428,109,428,109,109,109,428,428,428,428,428,428,
-428,109,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
+/* block 193 */
+438,438,438,438,437,437,114,437,437,437,437,114,114,437,437,437,
+437,437,437,437,437,114,437,437,437,437,437,437,437,114,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,437,437,114,437,437,437,437,114,
+437,437,437,437,437,114,437,114,114,114,437,437,437,437,437,437,
+437,114,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-/* block 174 */
-428,428,428,428,428,428,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
+/* block 194 */
+437,437,437,437,437,437,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
-/* block 175 */
-429,429,429,429,429,429,429,429,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
+/* block 195 */
+438,438,438,438,438,438,438,438,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-/* block 176 */
-428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,109,109,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428, 8,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429, 8,429,429,429,429,
-429,429,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428, 8,429,429,429,429,
+/* block 196 */
+437,437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,114,114,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437, 8,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438, 8,438,438,438,438,
+438,438,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437, 8,438,438,438,438,
-/* block 177 */
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429, 8,429,429,429,429,429,429,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428, 8,429,429,429,429,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429, 8,
-429,429,429,429,429,429,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428, 8,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
+/* block 197 */
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438, 8,438,438,438,438,438,438,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437, 8,438,438,438,438,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438, 8,
+438,438,438,438,438,438,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, 8,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
-/* block 178 */
-429,429,429,429,429,429,429,429,429, 8,429,429,429,429,429,429,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428, 8,429,429,429,429,429,429,
-429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
-429,429,429, 8,429,429,429,429,429,429,428,429,109,109, 10, 10,
+/* block 198 */
+438,438,438,438,438,438,438,438,438, 8,438,438,438,438,438,438,
+437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
+437,437,437,437,437,437,437,437,437, 8,438,438,438,438,438,438,
+438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
+438,438,438, 8,438,438,438,438,438,438,437,438,114,114, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-/* block 179 */
-191,191,191,191,109,191,191,191,191,191,191,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
-109,191,191,109,191,109,109,191,109,191,191,191,191,191,191,191,
-191,191,191,109,191,191,191,191,109,191,109,191,109,109,109,109,
-109,109,191,109,109,109,109,191,109,191,109,191,109,191,191,191,
-109,191,191,109,191,109,109,191,109,191,109,191,109,191,109,191,
-109,191,191,109,191,109,109,191,191,191,191,109,191,191,191,191,
-191,191,191,109,191,191,191,191,109,191,191,191,191,109,191,109,
+/* block 199 */
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
-/* block 180 */
-191,191,191,191,191,191,191,191,191,191,109,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,109,109,109,109,
-109,191,191,191,109,191,191,191,191,191,109,191,191,191,191,191,
-191,191,191,191,191,191,191,191,191,191,191,191,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-186,186,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+/* block 200 */
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,114,114,716,716,716,716,716,716,716,716,716,
+717,717,717,717,717,717,717,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 181 */
+/* block 201 */
+199,199,199,199,114,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+114,199,199,114,199,114,114,199,114,199,199,199,199,199,199,199,
+199,199,199,114,199,199,199,199,114,199,114,199,114,114,114,114,
+114,114,199,114,114,114,114,199,114,199,114,199,114,199,199,199,
+114,199,199,114,199,114,114,199,114,199,114,199,114,199,114,199,
+114,199,199,114,199,114,114,199,199,199,199,114,199,199,199,199,
+199,199,199,114,199,199,199,199,114,199,199,199,199,114,199,114,
+
+/* block 202 */
+199,199,199,199,199,199,199,199,199,199,114,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,114,114,114,114,
+114,199,199,199,114,199,199,199,199,199,114,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+194,194,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 203 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-/* block 182 */
+/* block 204 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,
-109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,
-109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,
+114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,
-/* block 183 */
- 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,109,109,109,109,109,
+/* block 205 */
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-/* block 184 */
+/* block 206 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,625,625,625,625,625,625,625,625,625,625,
-625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,718,718,718,718,718,718,718,718,718,718,
+718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,
-/* block 185 */
-626, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,109,
+/* block 207 */
+719, 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,
- 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,
+ 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 186 */
+/* block 208 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
- 19, 19, 19, 19, 19, 19,109, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,
-/* block 187 */
+/* block 209 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19,109, 19, 19, 19, 19, 19,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,
+114,114,114,114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,
-/* block 188 */
+/* block 210 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,
- 19,109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-
-/* block 189 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,
+
+/* block 211 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,109, 19, 19, 19, 19,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114, 19, 19, 19, 19, 19,
-/* block 190 */
+/* block 212 */
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19,114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,109,109,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-/* block 191 */
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109, 19, 19, 19, 19, 19,
+/* block 213 */
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19,114,114, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-/* block 192 */
+/* block 214 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19,109,109,109,109, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,
+ 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 193 */
+/* block 215 */
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 194 */
+/* block 216 */
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 217 */
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19,109,109,109,109,109,109,109,109,109,109,109,109,
-/* block 195 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+/* block 218 */
+ 19, 19, 19, 19, 19, 19, 19, 19,114,114,114,114,114,114,114,114,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 196 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,109,109,109,109,109,109,109,109,109,109,109,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
+/* block 219 */
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
-/* block 197 */
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
-475,475,475,475,475,475,475,475,475,475,475,475,475,475,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+/* block 220 */
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,114,114,114,114,114,114,114,114,114,114,114,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
-/* block 198 */
-426, 22,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
+/* block 221 */
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
+484,484,484,484,484,484,484,484,484,484,484,484,484,484,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+
+/* block 222 */
+436, 22,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
@@ -3247,45 +3580,45 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { /* 51968 bytes, block = 128 */
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
-/* block 199 */
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
+/* block 223 */
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
-/* block 200 */
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+/* block 224 */
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
-/* block 201 */
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
-426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
+/* block 225 */
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
-/* block 202 */
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
-538,538,538,538,538,538,538,538,538,538,538,538,538,538,109,109,
+/* block 226 */
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,552,552,552,552,552,552,552,552,114,114,
};
diff --git a/pcre/pcrecpp.cc b/pcre/pcrecpp.cc
index c0ba9ca14e1..c595cbcab5c 100644
--- a/pcre/pcrecpp.cc
+++ b/pcre/pcrecpp.cc
@@ -511,7 +511,7 @@ int RE::TryMatch(const StringPiece& text,
return 0;
}
- pcre_extra extra = { 0, 0, 0, 0, 0, 0 };
+ pcre_extra extra = { 0, 0, 0, 0, 0, 0, 0, 0 };
if (options_.match_limit() > 0) {
extra.flags |= PCRE_EXTRA_MATCH_LIMIT;
extra.match_limit = options_.match_limit();
@@ -660,6 +660,8 @@ int RE::NumberOfCapturingGroups() const {
/***** Parsers for various types *****/
bool Arg::parse_null(const char* str, int n, void* dest) {
+ (void)str;
+ (void)n;
// We fail if somebody asked us to store into a non-NULL void* pointer
return (dest == NULL);
}
diff --git a/pcre/pcregrep.c b/pcre/pcregrep.c
index 3e8d05dc8ad..4f7fa38491a 100644
--- a/pcre/pcregrep.c
+++ b/pcre/pcregrep.c
@@ -455,7 +455,7 @@ Arguments:
s pattern string to add
after if not NULL points to item to insert after
-Returns: new pattern block
+Returns: new pattern block or NULL on error
*/
static patstr *
@@ -471,6 +471,7 @@ if (strlen(s) > MAXPATLEN)
{
fprintf(stderr, "pcregrep: pattern is too long (limit is %d bytes)\n",
MAXPATLEN);
+ free(p);
return NULL;
}
p->next = NULL;
@@ -2549,7 +2550,11 @@ while (fgets(buffer, PATBUFSIZE, f) != NULL)
afterwards, as a precaution against any later code trying to use it. */
*patlastptr = add_pattern(buffer, *patlastptr);
- if (*patlastptr == NULL) return FALSE;
+ if (*patlastptr == NULL)
+ {
+ if (f != stdin) fclose(f);
+ return FALSE;
+ }
if (*patptr == NULL) *patptr = *patlastptr;
/* This loop is needed because compiling a "pattern" when -F is set may add
@@ -2561,7 +2566,10 @@ while (fgets(buffer, PATBUFSIZE, f) != NULL)
{
if (!compile_pattern(*patlastptr, pcre_options, popts, TRUE, filename,
linenumber))
+ {
+ if (f != stdin) fclose(f);
return FALSE;
+ }
(*patlastptr)->string = NULL; /* Insurance */
if ((*patlastptr)->next == NULL) break;
*patlastptr = (*patlastptr)->next;
@@ -2962,8 +2970,8 @@ if (locale == NULL)
locale_from = "LC_CTYPE";
}
-/* If a locale has been provided, set it, and generate the tables the PCRE
-needs. Otherwise, pcretables==NULL, which causes the use of default tables. */
+/* If a locale is set, use it to generate the tables the PCRE needs. Otherwise,
+pcretables==NULL, which causes the use of default tables. */
if (locale != NULL)
{
@@ -2971,7 +2979,7 @@ if (locale != NULL)
{
fprintf(stderr, "pcregrep: Failed to set locale %s (obtained from %s)\n",
locale, locale_from);
- return 2;
+ goto EXIT2;
}
pcretables = pcre_maketables();
}
@@ -2986,7 +2994,7 @@ if (colour_option != NULL && strcmp(colour_option, "never") != 0)
{
fprintf(stderr, "pcregrep: Unknown colour setting \"%s\"\n",
colour_option);
- return 2;
+ goto EXIT2;
}
if (do_colour)
{
@@ -3026,7 +3034,7 @@ else if (strcmp(newline, "anycrlf") == 0 || strcmp(newline, "ANYCRLF") == 0)
else
{
fprintf(stderr, "pcregrep: Invalid newline specifier \"%s\"\n", newline);
- return 2;
+ goto EXIT2;
}
/* Interpret the text values for -d and -D */
@@ -3039,7 +3047,7 @@ if (dee_option != NULL)
else
{
fprintf(stderr, "pcregrep: Invalid value \"%s\" for -d\n", dee_option);
- return 2;
+ goto EXIT2;
}
}
@@ -3050,7 +3058,7 @@ if (DEE_option != NULL)
else
{
fprintf(stderr, "pcregrep: Invalid value \"%s\" for -D\n", DEE_option);
- return 2;
+ goto EXIT2;
}
}
@@ -3251,7 +3259,8 @@ EXIT:
if (jit_stack != NULL) pcre_jit_stack_free(jit_stack);
#endif
-if (main_buffer != NULL) free(main_buffer);
+free(main_buffer);
+free((void *)pcretables);
free_pattern_chain(patterns);
free_pattern_chain(include_patterns);
diff --git a/pcre/pcreposix.c b/pcre/pcreposix.c
index ed506197a53..f024423b634 100644
--- a/pcre/pcreposix.c
+++ b/pcre/pcreposix.c
@@ -172,7 +172,8 @@ static const int eint[] = {
REG_BADPAT, /* invalid range in character class */
REG_BADPAT, /* group name must start with a non-digit */
/* 85 */
- REG_BADPAT /* parentheses too deeply nested (stack check) */
+ REG_BADPAT, /* parentheses too deeply nested (stack check) */
+ REG_BADPAT /* missing digits in \x{} or \o{} */
};
/* Table of texts corresponding to POSIX error codes */
diff --git a/pcre/testdata/testinput1 b/pcre/testdata/testinput1
index 7b36360d044..123e3d3cfd4 100644
--- a/pcre/testdata/testinput1
+++ b/pcre/testdata/testinput1
@@ -111,7 +111,7 @@
bababbc
babababc
-/^\ca\cA\c[\c{\c:/
+/^\ca\cA\c[;\c:/
\x01\x01\e;z
/^[ab\]cde]/
@@ -4937,6 +4937,12 @@ however, we need the complication for Perl. ---/
/((?(R1)a+|(?1)b))/
aaaabcde
+
+/((?(R)a|(?1)))*/
+ aaa
+
+/((?(R)a|(?1)))+/
+ aaa
/a(*:any
name)/K
@@ -5666,4 +5672,52 @@ AbcdCBefgBhiBqz
/(a\Kb)*/+
ababc
+/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
+ acb
+
+'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
+'\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
+/^\w+(?>\s*)(?<=\w)/
+ test test
+
+/(?P<same>a)(?P<same>b)/gJ
+ abbaba
+
+/(?P<same>a)(?P<same>b)(?P=same)/gJ
+ abbaba
+
+/(?P=same)?(?P<same>a)(?P<same>b)/gJ
+ abbaba
+
+/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/gJ
+ bbbaaabaabb
+
+/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/gJ
+ bbbaaaccccaaabbbcc
+
+/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
+ acl
+ bdl
+ adl
+ bcl
+
+/\sabc/
+ \x{0b}abc
+
+/[\Qa]\E]+/
+ aa]]
+
+/[\Q]a\E]+/
+ aa]]
+
/-- End of testinput1 --/
diff --git a/pcre/testdata/testinput11 b/pcre/testdata/testinput11
index 391ada7aa8c..7e8e54221d4 100644
--- a/pcre/testdata/testinput11
+++ b/pcre/testdata/testinput11
@@ -132,4 +132,6 @@ is required for these tests. --/
/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B
+/(((a\2)|(a*)\g<-1>))*a?/B
+
/-- End of testinput11 --/
diff --git a/pcre/testdata/testinput16 b/pcre/testdata/testinput16
index e7a05ae0d45..15419e63fa6 100644
--- a/pcre/testdata/testinput16
+++ b/pcre/testdata/testinput16
@@ -32,4 +32,10 @@
/[[:blank:]]/WBZ
+/\x{212a}+/i8SI
+ KKkk\x{212a}
+
+/s+/i8SI
+ SSss\x{17f}
+
/-- End of testinput16 --/
diff --git a/pcre/testdata/testinput19 b/pcre/testdata/testinput19
index 00d80203f00..ce45afcb595 100644
--- a/pcre/testdata/testinput19
+++ b/pcre/testdata/testinput19
@@ -19,4 +19,10 @@
/[[:blank:]]/WBZ
+/\x{212a}+/i8SI
+ KKkk\x{212a}
+
+/s+/i8SI
+ SSss\x{17f}
+
/-- End of testinput19 --/
diff --git a/pcre/testdata/testinput2 b/pcre/testdata/testinput2
index da6e61499cd..c6816bf322c 100644
--- a/pcre/testdata/testinput2
+++ b/pcre/testdata/testinput2
@@ -4035,6 +4035,8 @@ backtracking verbs. --/
/(?(R&6yh)abc)/
+/(((a\2)|(a*)\g<-1>))*a?/BZ
+
/-- Test the ugly "start or end of word" compatibility syntax --/
/[[:<:]]red[[:>:]]/BZ
@@ -4062,4 +4064,18 @@ backtracking verbs. --/
/(((((a)))))/Q
+/^\w+(?>\s*)(?<=\w)/BZ
+
+/\othing/
+
+/\o{}/
+
+/\o{whatever}/
+
+/\xthing/
+
+/\x{}/
+
+/\x{whatever}/
+
/-- End of testinput2 --/
diff --git a/pcre/testdata/testinput6 b/pcre/testdata/testinput6
index 7a6a53f1473..82c3ed5c772 100644
--- a/pcre/testdata/testinput6
+++ b/pcre/testdata/testinput6
@@ -421,8 +421,8 @@
/^[\p{Arabic}]/8
\x{06e9}
\x{060b}
- \x{061c}
** Failers
+ \x{061c}
X\x{06e9}
/^[\P{Yi}]/8
@@ -1493,4 +1493,7 @@
/[q-u]+/8iW
Ss\x{17f}
+/^s?c/mi8
+ scat
+
/-- End of testinput6 --/
diff --git a/pcre/testdata/testinput7 b/pcre/testdata/testinput7
index 6bd05864411..7a66025434b 100644
--- a/pcre/testdata/testinput7
+++ b/pcre/testdata/testinput7
@@ -835,4 +835,7 @@ of case for anything other than the ASCII letters. --/
/[Q-U]+/8iWBZ
+/^s?c/mi8I
+ scat
+
/-- End of testinput7 --/
diff --git a/pcre/testdata/testinput8 b/pcre/testdata/testinput8
index bb2747b120d..06334cd36e5 100644
--- a/pcre/testdata/testinput8
+++ b/pcre/testdata/testinput8
@@ -4831,4 +4831,10 @@
/[ab]{2,}?/
aaaa
+'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+
/-- End of testinput8 --/
diff --git a/pcre/testdata/testoutput1 b/pcre/testdata/testoutput1
index 4dafc0496ab..5e719002ed6 100644
--- a/pcre/testdata/testoutput1
+++ b/pcre/testdata/testoutput1
@@ -223,7 +223,7 @@ No match
babababc
No match
-/^\ca\cA\c[\c{\c:/
+/^\ca\cA\c[;\c:/
\x01\x01\e;z
0: \x01\x01\x1b;z
@@ -8234,6 +8234,16 @@ MK: M
aaaabcde
0: aaaab
1: aaaab
+
+/((?(R)a|(?1)))*/
+ aaa
+ 0: aaa
+ 1: a
+
+/((?(R)a|(?1)))+/
+ aaa
+ 0: aaa
+ 1: a
/a(*:any
name)/K
@@ -9313,4 +9323,92 @@ No match
0+ c
1: ab
+/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
+ acb
+No match
+
+'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+
+'\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+ 1: AFTER
+ 2:
+
+/^\w+(?>\s*)(?<=\w)/
+ test test
+ 0: tes
+
+/(?P<same>a)(?P<same>b)/gJ
+ abbaba
+ 0: ab
+ 1: a
+ 2: b
+ 0: ab
+ 1: a
+ 2: b
+
+/(?P<same>a)(?P<same>b)(?P=same)/gJ
+ abbaba
+ 0: aba
+ 1: a
+ 2: b
+
+/(?P=same)?(?P<same>a)(?P<same>b)/gJ
+ abbaba
+ 0: ab
+ 1: a
+ 2: b
+ 0: ab
+ 1: a
+ 2: b
+
+/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/gJ
+ bbbaaabaabb
+ 0: bbbaaaba
+ 1: a
+ 2: b
+ 0: bb
+ 1: <unset>
+ 2: b
+
+/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/gJ
+ bbbaaaccccaaabbbcc
+No match
+
+/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
+ acl
+ 0: acl
+ 1: a
+ bdl
+ 0: bdl
+ 1: <unset>
+ 2: b
+ adl
+ 0: dl
+ bcl
+ 0: l
+
+/\sabc/
+ \x{0b}abc
+ 0: \x0babc
+
+/[\Qa]\E]+/
+ aa]]
+ 0: aa]]
+
+/[\Q]a\E]+/
+ aa]]
+ 0: aa]]
+
/-- End of testinput1 --/
diff --git a/pcre/testdata/testoutput11-16 b/pcre/testdata/testoutput11-16
index f1ad8887b4d..a1db3f34225 100644
--- a/pcre/testdata/testoutput11-16
+++ b/pcre/testdata/testoutput11-16
@@ -709,4 +709,28 @@ Memory allocation (code space): 14
62 End
------------------------------------------------------------------
+/(((a\2)|(a*)\g<-1>))*a?/B
+------------------------------------------------------------------
+ 0 39 Bra
+ 2 Brazero
+ 3 32 SCBra 1
+ 6 27 Once
+ 8 12 CBra 2
+ 11 7 CBra 3
+ 14 a
+ 16 \2
+ 18 7 Ket
+ 20 11 Alt
+ 22 5 CBra 4
+ 25 a*
+ 27 5 Ket
+ 29 22 Recurse
+ 31 23 Ket
+ 33 27 Ket
+ 35 32 KetRmax
+ 37 a?+
+ 39 39 Ket
+ 41 End
+------------------------------------------------------------------
+
/-- End of testinput11 --/
diff --git a/pcre/testdata/testoutput11-32 b/pcre/testdata/testoutput11-32
index 266e55d0672..7b7b030fdca 100644
--- a/pcre/testdata/testoutput11-32
+++ b/pcre/testdata/testoutput11-32
@@ -709,4 +709,28 @@ Memory allocation (code space): 28
62 End
------------------------------------------------------------------
+/(((a\2)|(a*)\g<-1>))*a?/B
+------------------------------------------------------------------
+ 0 39 Bra
+ 2 Brazero
+ 3 32 SCBra 1
+ 6 27 Once
+ 8 12 CBra 2
+ 11 7 CBra 3
+ 14 a
+ 16 \2
+ 18 7 Ket
+ 20 11 Alt
+ 22 5 CBra 4
+ 25 a*
+ 27 5 Ket
+ 29 22 Recurse
+ 31 23 Ket
+ 33 27 Ket
+ 35 32 KetRmax
+ 37 a?+
+ 39 39 Ket
+ 41 End
+------------------------------------------------------------------
+
/-- End of testinput11 --/
diff --git a/pcre/testdata/testoutput11-8 b/pcre/testdata/testoutput11-8
index d4a21334e36..f5ec652af8c 100644
--- a/pcre/testdata/testoutput11-8
+++ b/pcre/testdata/testoutput11-8
@@ -709,4 +709,28 @@ Memory allocation (code space): 10
76 End
------------------------------------------------------------------
+/(((a\2)|(a*)\g<-1>))*a?/B
+------------------------------------------------------------------
+ 0 57 Bra
+ 3 Brazero
+ 4 48 SCBra 1
+ 9 40 Once
+ 12 18 CBra 2
+ 17 10 CBra 3
+ 22 a
+ 24 \2
+ 27 10 Ket
+ 30 16 Alt
+ 33 7 CBra 4
+ 38 a*
+ 40 7 Ket
+ 43 33 Recurse
+ 46 34 Ket
+ 49 40 Ket
+ 52 48 KetRmax
+ 55 a?+
+ 57 57 Ket
+ 60 End
+------------------------------------------------------------------
+
/-- End of testinput11 --/
diff --git a/pcre/testdata/testoutput15 b/pcre/testdata/testoutput15
index 5af369d06d9..bad2807c2fd 100644
--- a/pcre/testdata/testoutput15
+++ b/pcre/testdata/testoutput15
@@ -871,7 +871,7 @@ Options: utf
No first char
Need char = 'x'
Subject length lower bound = 5
-Starting chars: \x09 \x0a \x0c \x0d \x20 \xc2
+Starting chars: \x09 \x0a \x0b \x0c \x0d \x20 \xc2
AB\x{85}xxx\x{a0}XYZ
0: \x{85}xxx\x{a0}
AB\x{a0}xxx\x{85}XYZ
@@ -883,15 +883,15 @@ Options: utf
No first char
Need char = ' '
Subject length lower bound = 3
-Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0b \x0e
- \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d
- \x1e \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e
- f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \xc0 \xc1 \xc2 \xc3
- \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1 \xd2
- \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf \xe0 \xe1
- \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef \xf0
- \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe \xff
+Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0e \x0f
+ \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e
+ \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C
+ D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h
+ i j k l m n o p q r s t u v w x y z { | } ~ \x7f \xc0 \xc1 \xc2 \xc3 \xc4
+ \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1 \xd2 \xd3
+ \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf \xe0 \xe1 \xe2
+ \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef \xf0 \xf1
+ \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe \xff
\x{a2} \x{84}
0: \x{a2} \x{84}
A Z
diff --git a/pcre/testdata/testoutput16 b/pcre/testdata/testoutput16
index 63e9eb06ae6..fd184cdbeee 100644
--- a/pcre/testdata/testoutput16
+++ b/pcre/testdata/testoutput16
@@ -118,4 +118,24 @@ Starting chars: \x0a \x0b \x0c \x0d \x85
End
------------------------------------------------------------------
+/\x{212a}+/i8SI
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+Starting chars: K k \xe2
+ KKkk\x{212a}
+ 0: KKkk\x{212a}
+
+/s+/i8SI
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+Starting chars: S s \xc5
+ SSss\x{17f}
+ 0: SSss\x{17f}
+
/-- End of testinput16 --/
diff --git a/pcre/testdata/testoutput18-16 b/pcre/testdata/testoutput18-16
index a1962057050..1ef87047d64 100644
--- a/pcre/testdata/testoutput18-16
+++ b/pcre/testdata/testoutput18-16
@@ -752,7 +752,7 @@ Options: utf
No first char
Need char = 'x'
Subject length lower bound = 5
-Starting chars: \x09 \x0a \x0c \x0d \x20 \x85 \xa0
+Starting chars: \x09 \x0a \x0b \x0c \x0d \x20 \x85 \xa0
AB\x{85}xxx\x{a0}XYZ
0: \x{85}xxx\x{a0}
AB\x{a0}xxx\x{85}XYZ
@@ -764,20 +764,20 @@ Options: utf
No first char
Need char = ' '
Subject length lower bound = 3
-Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0b \x0e
- \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d
- \x1e \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e
- f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83
- \x84 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 \x93
- \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa1 \xa2 \xa3
- \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 \xb1 \xb2
- \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf \xc0 \xc1
- \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0
- \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf
- \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee
- \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd
- \xfe \xff
+Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0e \x0f
+ \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e
+ \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C
+ D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h
+ i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83 \x84
+ \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 \x93 \x94
+ \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa1 \xa2 \xa3 \xa4
+ \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 \xb1 \xb2 \xb3
+ \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf \xc0 \xc1 \xc2
+ \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1
+ \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf \xe0
+ \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef
+ \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe
+ \xff
\x{a2} \x{84}
0: \x{a2} \x{84}
A Z
diff --git a/pcre/testdata/testoutput18-32 b/pcre/testdata/testoutput18-32
index 1525994db98..622ba64aafc 100644
--- a/pcre/testdata/testoutput18-32
+++ b/pcre/testdata/testoutput18-32
@@ -749,7 +749,7 @@ Options: utf
No first char
Need char = 'x'
Subject length lower bound = 5
-Starting chars: \x09 \x0a \x0c \x0d \x20 \x85 \xa0
+Starting chars: \x09 \x0a \x0b \x0c \x0d \x20 \x85 \xa0
AB\x{85}xxx\x{a0}XYZ
0: \x{85}xxx\x{a0}
AB\x{a0}xxx\x{85}XYZ
@@ -761,20 +761,20 @@ Options: utf
No first char
Need char = ' '
Subject length lower bound = 3
-Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0b \x0e
- \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d
- \x1e \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @
- A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e
- f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83
- \x84 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 \x93
- \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa1 \xa2 \xa3
- \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 \xb1 \xb2
- \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf \xc0 \xc1
- \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0
- \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf
- \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee
- \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd
- \xfe \xff
+Starting chars: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x0e \x0f
+ \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \x1b \x1c \x1d \x1e
+ \x1f ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C
+ D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h
+ i j k l m n o p q r s t u v w x y z { | } ~ \x7f \x80 \x81 \x82 \x83 \x84
+ \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 \x93 \x94
+ \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa1 \xa2 \xa3 \xa4
+ \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 \xb1 \xb2 \xb3
+ \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf \xc0 \xc1 \xc2
+ \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1
+ \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf \xe0
+ \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef
+ \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb \xfc \xfd \xfe
+ \xff
\x{a2} \x{84}
0: \x{a2} \x{84}
A Z
diff --git a/pcre/testdata/testoutput19 b/pcre/testdata/testoutput19
index 21fe677900b..eb8a8f6cd34 100644
--- a/pcre/testdata/testoutput19
+++ b/pcre/testdata/testoutput19
@@ -85,4 +85,24 @@ No starting char list
End
------------------------------------------------------------------
+/\x{212a}+/i8SI
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+Starting chars: K k \xff
+ KKkk\x{212a}
+ 0: KKkk\x{212a}
+
+/s+/i8SI
+Capturing subpattern count = 0
+Options: caseless utf
+No first char
+No need char
+Subject length lower bound = 1
+Starting chars: S s \xff
+ SSss\x{17f}
+ 0: SSss\x{17f}
+
/-- End of testinput19 --/
diff --git a/pcre/testdata/testoutput2 b/pcre/testdata/testoutput2
index b6da7df187e..1e87026cc6d 100644
--- a/pcre/testdata/testoutput2
+++ b/pcre/testdata/testoutput2
@@ -5821,13 +5821,13 @@ No match
No match
/a{11111111111111111111}/I
-Failed: number too big in {} quantifier at offset 22
+Failed: number too big in {} quantifier at offset 8
/(){64294967295}/I
-Failed: number too big in {} quantifier at offset 14
+Failed: number too big in {} quantifier at offset 9
/(){2,4294967295}/I
-Failed: number too big in {} quantifier at offset 15
+Failed: number too big in {} quantifier at offset 11
"(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\1B"I
Capturing subpattern count = 1
@@ -14093,6 +14093,30 @@ Failed: malformed number or name after (?( at offset 4
/(?(R&6yh)abc)/
Failed: group name must start with a non-digit at offset 5
+/(((a\2)|(a*)\g<-1>))*a?/BZ
+------------------------------------------------------------------
+ Bra
+ Brazero
+ SCBra 1
+ Once
+ CBra 2
+ CBra 3
+ a
+ \2
+ Ket
+ Alt
+ CBra 4
+ a*
+ Ket
+ Recurse
+ Ket
+ Ket
+ KetRmax
+ a?+
+ Ket
+ End
+------------------------------------------------------------------
+
/-- Test the ugly "start or end of word" compatibility syntax --/
/[[:<:]]red[[:>:]]/BZ
@@ -14149,4 +14173,37 @@ Failed: parentheses are too deeply nested (stack check) at offset 0
/(((((a)))))/Q
** Missing 0 or 1 after /Q
+/^\w+(?>\s*)(?<=\w)/BZ
+------------------------------------------------------------------
+ Bra
+ ^
+ \w+
+ Once_NC
+ \s*+
+ Ket
+ AssertB
+ Reverse
+ \w
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+/\othing/
+Failed: missing opening brace after \o at offset 1
+
+/\o{}/
+Failed: digits missing in \x{} or \o{} at offset 1
+
+/\o{whatever}/
+Failed: non-octal character in \o{} (closing brace missing?) at offset 3
+
+/\xthing/
+
+/\x{}/
+Failed: digits missing in \x{} or \o{} at offset 3
+
+/\x{whatever}/
+Failed: non-hex character in \x{} (closing brace missing?) at offset 3
+
/-- End of testinput2 --/
diff --git a/pcre/testdata/testoutput6 b/pcre/testdata/testoutput6
index f355e601383..a990ba13eb8 100644
--- a/pcre/testdata/testoutput6
+++ b/pcre/testdata/testoutput6
@@ -719,10 +719,10 @@ No match
0: \x{6e9}
\x{060b}
0: \x{60b}
- \x{061c}
- 0: \x{61c}
** Failers
No match
+ \x{061c}
+No match
X\x{06e9}
No match
@@ -2457,4 +2457,8 @@ No match
Ss\x{17f}
0: Ss\x{17f}
+/^s?c/mi8
+ scat
+ 0: sc
+
/-- End of testinput6 --/
diff --git a/pcre/testdata/testoutput7 b/pcre/testdata/testoutput7
index c64e0499421..ee46bdbb5a1 100644
--- a/pcre/testdata/testoutput7
+++ b/pcre/testdata/testoutput7
@@ -2287,4 +2287,12 @@ No match
End
------------------------------------------------------------------
+/^s?c/mi8I
+Capturing subpattern count = 0
+Options: caseless multiline utf
+First char at start or follows newline
+Need char = 'c' (caseless)
+ scat
+ 0: sc
+
/-- End of testinput7 --/
diff --git a/pcre/testdata/testoutput8 b/pcre/testdata/testoutput8
index 3861ea41fdb..95c4e4db1b2 100644
--- a/pcre/testdata/testoutput8
+++ b/pcre/testdata/testoutput8
@@ -7777,4 +7777,12 @@ Matched, but offsets vector is too small to show all matches
1: aaa
2: aa
+'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+
+'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
+ NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
+ 0: NON QUOTED "QUOT""ED" AFTER
+
/-- End of testinput8 --/
diff --git a/pcre/ucp.h b/pcre/ucp.h
index d8b34bfcc5b..2fa00296e42 100644
--- a/pcre/ucp.h
+++ b/pcre/ucp.h
@@ -192,7 +192,31 @@ enum {
ucp_Miao,
ucp_Sharada,
ucp_Sora_Sompeng,
- ucp_Takri
+ ucp_Takri,
+ /* New for Unicode 7.0.0: */
+ ucp_Bassa_Vah,
+ ucp_Caucasian_Albanian,
+ ucp_Duployan,
+ ucp_Elbasan,
+ ucp_Grantha,
+ ucp_Khojki,
+ ucp_Khudawadi,
+ ucp_Linear_A,
+ ucp_Mahajani,
+ ucp_Manichaean,
+ ucp_Mende_Kikakui,
+ ucp_Modi,
+ ucp_Mro,
+ ucp_Nabataean,
+ ucp_Old_North_Arabian,
+ ucp_Old_Permic,
+ ucp_Pahawh_Hmong,
+ ucp_Palmyrene,
+ ucp_Psalter_Pahlavi,
+ ucp_Pau_Cin_Hau,
+ ucp_Siddham,
+ ucp_Tirhuta,
+ ucp_Warang_Citi
};
#endif
diff --git a/plugin/handler_socket/handlersocket/database.cpp b/plugin/handler_socket/handlersocket/database.cpp
index a15c18a4c70..2d9785df6e2 100644
--- a/plugin/handler_socket/handlersocket/database.cpp
+++ b/plugin/handler_socket/handlersocket/database.cpp
@@ -6,6 +6,8 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_config.h>
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/plugin/handler_socket/handlersocket/handlersocket.cpp b/plugin/handler_socket/handlersocket/handlersocket.cpp
index 2595d24a85c..6e4c03fcc24 100644
--- a/plugin/handler_socket/handlersocket/handlersocket.cpp
+++ b/plugin/handler_socket/handlersocket/handlersocket.cpp
@@ -6,6 +6,8 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_config.h>
+
#include <memory>
#include <string>
#include <stdio.h>
diff --git a/plugin/handler_socket/handlersocket/hstcpsvr.cpp b/plugin/handler_socket/handlersocket/hstcpsvr.cpp
index 13df7ba0838..925020023bc 100644
--- a/plugin/handler_socket/handlersocket/hstcpsvr.cpp
+++ b/plugin/handler_socket/handlersocket/hstcpsvr.cpp
@@ -6,6 +6,8 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_config.h>
+
#include <stdlib.h>
#include <vector>
#include <sys/types.h>
diff --git a/plugin/handler_socket/libhsclient/hstcpcli.cpp b/plugin/handler_socket/libhsclient/hstcpcli.cpp
index c0cb5fb1e97..21c964cb046 100644
--- a/plugin/handler_socket/libhsclient/hstcpcli.cpp
+++ b/plugin/handler_socket/libhsclient/hstcpcli.cpp
@@ -6,6 +6,8 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_config.h>
+
#include <stdexcept>
#include "hstcpcli.hpp"
diff --git a/plugin/handler_socket/libhsclient/socket.cpp b/plugin/handler_socket/libhsclient/socket.cpp
index 0c4816589fa..cf19d4bbe14 100644
--- a/plugin/handler_socket/libhsclient/socket.cpp
+++ b/plugin/handler_socket/libhsclient/socket.cpp
@@ -6,6 +6,8 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_config.h>
+
#include <stdexcept>
#include <string.h>
#include <errno.h>
diff --git a/plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs b/plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs
index 04dab6d0a68..8169b3e52a9 100644
--- a/plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs
+++ b/plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.xs
@@ -6,17 +6,14 @@
* See COPYRIGHT.txt for details.
*/
+#undef VERSION
+#include <config.h>
+
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
-
-/*
- below we'll include (indirectly) my_global.h, which defines
- VERSION too. Undefine our VERSION here.
-*/
-#undef VERSION
#include "hstcpcli.hpp"
#define DBG(x)
diff --git a/plugin/metadata_lock_info/metadata_lock_info.cc b/plugin/metadata_lock_info/metadata_lock_info.cc
index b45ea012617..fcfdb59da30 100644
--- a/plugin/metadata_lock_info/metadata_lock_info.cc
+++ b/plugin/metadata_lock_info/metadata_lock_info.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include "my_config.h"
#include "mysql_version.h"
#include "mysql/plugin.h"
#include "sql_class.h"
diff --git a/plugin/semisync/semisync.h b/plugin/semisync/semisync.h
index 0e801428a56..28577296817 100644
--- a/plugin/semisync/semisync.h
+++ b/plugin/semisync/semisync.h
@@ -21,12 +21,10 @@
#define MYSQL_SERVER
#define HAVE_REPLICATION
+#include <my_pthread.h>
#include <sql_priv.h>
#include <sql_class.h>
#include "unireg.h"
-#include <my_global.h>
-#include <my_pthread.h>
-#include <mysql/plugin.h>
#include <replication.h>
#include "log.h" /* sql_print_information */
diff --git a/plugin/server_audit/server_audit.c b/plugin/server_audit/server_audit.c
index 36d1fa3e9f7..3ab14d94b1f 100644
--- a/plugin/server_audit/server_audit.c
+++ b/plugin/server_audit/server_audit.c
@@ -17,6 +17,8 @@
#define PLUGIN_VERSION 0x101
#define PLUGIN_STR_VERSION "1.1.7"
+#include <my_config.h>
+
#include <stdio.h>
#include <time.h>
#include <string.h>
diff --git a/plugin/userstat/userstat.cc b/plugin/userstat/userstat.cc
index 3e5afe3df0c..6ffee44f43c 100644
--- a/plugin/userstat/userstat.cc
+++ b/plugin/userstat/userstat.cc
@@ -1,3 +1,4 @@
+#include <my_config.h>
#include <mysql/plugin.h>
#include <mysql_version.h>
#include "table.h"
diff --git a/plugin/wsrep_info/plugin.cc b/plugin/wsrep_info/plugin.cc
index 50c2019b8b9..15469ae39dd 100644
--- a/plugin/wsrep_info/plugin.cc
+++ b/plugin/wsrep_info/plugin.cc
@@ -17,6 +17,7 @@
#define MYSQL_SERVER
#endif
+#include <my_config.h>
#include <mysql/plugin.h>
#include <table.h> /* ST_SCHEMA_TABLE */
#include <sql_show.h>
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index c0fc67c0564..4dfe033050e 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -15,6 +15,7 @@
# Build comp_sql - used for embedding SQL in C or C++ programs
IF(NOT CMAKE_CROSSCOMPILING)
+ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
ADD_EXECUTABLE(comp_sql comp_sql.c)
TARGET_LINK_LIBRARIES(comp_sql)
ENDIF()
diff --git a/scripts/comp_sql.c b/scripts/comp_sql.c
index 20dedfdfa14..bcc653a3b7f 100644
--- a/scripts/comp_sql.c
+++ b/scripts/comp_sql.c
@@ -23,6 +23,7 @@
into other programs
*/
+#include <my_config.h>
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
diff --git a/scripts/fill_help_tables.sql b/scripts/fill_help_tables.sql
index 939f15ed45a..15f29c8adc3 100644
--- a/scripts/fill_help_tables.sql
+++ b/scripts/fill_help_tables.sql
@@ -23,6 +23,8 @@
set names 'utf8';
+set sql_log_bin = 0;
+
delete from help_topic;
delete from help_category;
delete from help_keyword;
diff --git a/scripts/mysql_secure_installation.sh b/scripts/mysql_secure_installation.sh
index 9e9bce9fa87..8eca327028e 100644
--- a/scripts/mysql_secure_installation.sh
+++ b/scripts/mysql_secure_installation.sh
@@ -182,7 +182,7 @@ else
fi
mysql_command=`find_in_basedir mysql $bindir`
-if test -z "$print_defaults"
+if test -z "$mysql_command"
then
cannot_find_file mysql $bindir
exit 1
@@ -204,7 +204,7 @@ prepare() {
do_query() {
echo "$1" >$command
#sed 's,^,> ,' < $command # Debugging
- $bindir/mysql --defaults-file=$config <$command
+ $mysql_command --defaults-file=$config <$command
return $?
}
@@ -376,7 +376,6 @@ clean_and_exit() {
# The actual script starts here
prepare
-find_mysql_client
set_echo_compat
echo
diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql
index dab38bbd48c..231c5951a2d 100644
--- a/scripts/mysql_system_tables_fix.sql
+++ b/scripts/mysql_system_tables_fix.sql
@@ -649,6 +649,23 @@ INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now(
INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
DROP TABLE tmp_proxies_priv;
+-- Checking for any duplicate hostname and username combination are exists.
+-- If exits we will throw error.
+DROP PROCEDURE IF EXISTS mysql.count_duplicate_host_names;
+DELIMITER //
+CREATE PROCEDURE mysql.count_duplicate_host_names()
+BEGIN
+ SET @duplicate_hosts=(SELECT count(*) FROM mysql.user GROUP BY user, lower(host) HAVING count(*) > 1 LIMIT 1);
+ IF @duplicate_hosts > 1 THEN
+ SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Multiple accounts exist for @user_name, @host_name that differ only in Host lettercase; remove all except one of them';
+ END IF;
+END //
+DELIMITER ;
+CALL mysql.count_duplicate_host_names();
+-- Get warnings (if any)
+SHOW WARNINGS;
+DROP PROCEDURE mysql.count_duplicate_host_names;
+
# Convering the host name to lower case for existing users
UPDATE user SET host=LOWER( host ) WHERE LOWER( host ) <> host;
@@ -694,3 +711,10 @@ alter table tables_priv modify Grantor char(141) COLLATE utf8_bin not null
flush privileges;
+--
+-- Upgrade help tables
+--
+
+ALTER TABLE help_category MODIFY url TEXT NOT NULL;
+ALTER TABLE help_topic MODIFY url TEXT NOT NULL;
+
diff --git a/sql-common/client.c b/sql-common/client.c
index d5c03f6761d..1c04044bae1 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -1964,6 +1964,12 @@ static int ssl_verify_server_cert(Vio *vio, const char* server_hostname, const c
DBUG_RETURN(1);
}
+ if (X509_V_OK != SSL_get_verify_result(ssl))
+ {
+ *errptr= "Failed to verify the server certificate";
+ X509_free(server_cert);
+ DBUG_RETURN(1);
+ }
/*
We already know that the certificate exchanged was valid; the SSL library
handled that. Now we need to verify that the contents of the certificate
diff --git a/sql/datadict.cc b/sql/datadict.cc
index 15e64c11bc2..287e8568d90 100644
--- a/sql/datadict.cc
+++ b/sql/datadict.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "datadict.h"
#include "sql_priv.h"
#include "sql_class.h"
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc
index 35b838d7c3d..5802d726aa2 100644
--- a/sql/debug_sync.cc
+++ b/sql/debug_sync.cc
@@ -15,6 +15,7 @@
/* see include/mysql/service_debug_sync.h for debug sync documentation */
+#include <my_global.h>
#include "debug_sync.h"
#if defined(ENABLED_DEBUG_SYNC)
@@ -1393,8 +1394,9 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
if (action->wait_for.length())
{
- mysql_mutex_t *old_mutex;
+ mysql_mutex_t *old_mutex= NULL;
mysql_cond_t *old_cond= NULL;
+ bool restore_current_mutex;
int error= 0;
struct timespec abstime;
@@ -1411,11 +1413,12 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
{
old_mutex= thd->mysys_var->current_mutex;
old_cond= thd->mysys_var->current_cond;
+ restore_current_mutex = true;
thd->mysys_var->current_mutex= &debug_sync_global.ds_mutex;
thd->mysys_var->current_cond= &debug_sync_global.ds_cond;
}
else
- old_mutex= NULL;
+ restore_current_mutex = false;
set_timespec(abstime, action->timeout);
DBUG_EXECUTE("debug_sync_exec", {
@@ -1475,7 +1478,7 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
is locked. (See comment in THD::exit_cond().)
*/
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
- if (old_mutex)
+ if (restore_current_mutex)
{
mysql_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= old_mutex;
diff --git a/sql/derror.cc b/sql/derror.cc
index 74e8209496b..f19f73238fb 100644
--- a/sql/derror.cc
+++ b/sql/derror.cc
@@ -21,6 +21,7 @@
Read language depeneded messagefile
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "derror.h"
diff --git a/sql/des_key_file.cc b/sql/des_key_file.cc
index b6b6f4536bc..ede2e9fa9d4 100644
--- a/sql/des_key_file.cc
+++ b/sql/des_key_file.cc
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_global.h" // HAVE_*
+#include <my_global.h> // HAVE_*
#include "sql_priv.h"
#include "des_key_file.h" // st_des_keyschedule, st_des_keyblock
#include "log.h" // sql_print_error
diff --git a/sql/discover.cc b/sql/discover.cc
index 9351cf034ab..82648e94bc5 100644
--- a/sql/discover.cc
+++ b/sql/discover.cc
@@ -21,6 +21,7 @@
Functions for discover of frm file from handler
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "discover.h"
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc
index bf824a98310..3da567ada38 100644
--- a/sql/event_data_objects.cc
+++ b/sql/event_data_objects.cc
@@ -15,7 +15,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#define MYSQL_LEX 1
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_parse.h" // parse_sql
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index b20269b8304..30dffc30edd 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_base.h" // close_thread_tables
diff --git a/sql/event_parse_data.cc b/sql/event_parse_data.cc
index 4e2d5d3f5bf..c2b460f02ab 100644
--- a/sql/event_parse_data.cc
+++ b/sql/event_parse_data.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sp_head.h"
diff --git a/sql/event_queue.cc b/sql/event_queue.cc
index 0324e05fb27..35187af23ac 100644
--- a/sql/event_queue.cc
+++ b/sql/event_queue.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "event_queue.h"
diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc
index 6091977cc8d..f2b3a77f414 100644
--- a/sql/event_scheduler.cc
+++ b/sql/event_scheduler.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "event_scheduler.h"
@@ -353,14 +354,7 @@ Event_scheduler::Event_scheduler(Event_queue *queue_arg)
mysql_mutex_init(key_event_scheduler_LOCK_scheduler_state,
&LOCK_scheduler_state, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_event_scheduler_COND_state, &COND_state, NULL);
-
-#ifdef SAFE_MUTEX
- /* Ensure right mutex order */
- mysql_mutex_lock(&LOCK_scheduler_state);
- mysql_mutex_lock(&LOCK_global_system_variables);
- mysql_mutex_unlock(&LOCK_global_system_variables);
- mysql_mutex_unlock(&LOCK_scheduler_state);
-#endif
+ mysql_mutex_record_order(&LOCK_scheduler_state, &LOCK_global_system_variables);
}
diff --git a/sql/events.cc b/sql/events.cc
index 7c6b29b7604..c4a7f63dbbc 100644
--- a/sql/events.cc
+++ b/sql/events.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_parse.h" // check_access
diff --git a/sql/field.cc b/sql/field.cc
index 3d5ba98c609..4fef2b996c5 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -27,6 +27,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_select.h"
#include "rpl_rli.h" // Pull in Relay_log_info
@@ -41,7 +42,6 @@
#include "filesort.h" // change_double_for_sort
#include "log_event.h" // class Table_map_log_event
#include <m_ctype.h>
-#include <errno.h>
// Maximum allowed exponent value for converting string to decimal
#define MAX_EXPONENT 1024
diff --git a/sql/field_conv.cc b/sql/field_conv.cc
index f13694e2a13..e31f7c5f005 100644
--- a/sql/field_conv.cc
+++ b/sql/field_conv.cc
@@ -27,6 +27,7 @@
gives much more speed.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_class.h" // THD
#include <m_ctype.h>
@@ -791,6 +792,10 @@ Copy_field::get_copy_func(Field *to,Field *from)
else if (to->real_type() != from->real_type() ||
to_length != from_length)
{
+ if ((to->real_type() == MYSQL_TYPE_ENUM ||
+ to->real_type() == MYSQL_TYPE_SET) &&
+ from->real_type() == MYSQL_TYPE_NEWDECIMAL)
+ return do_field_decimal;
if (to->real_type() == MYSQL_TYPE_DECIMAL ||
to->result_type() == STRING_RESULT)
return do_field_string;
@@ -837,7 +842,10 @@ bool memcpy_field_possible(Field *to,Field *from)
{
const enum_field_types to_real_type= to->real_type();
const enum_field_types from_real_type= from->real_type();
- const enum_field_types to_type= from->type();
+ /*
+ Warning: Calling from->type() may be unsafe in some (unclear) circumstances
+ related to SPs. See MDEV-6799.
+ */
return (to_real_type == from_real_type &&
!(to->flags & BLOB_FLAG && to->table->copy_blobs) &&
to->pack_length() == from->pack_length() &&
@@ -850,8 +858,8 @@ bool memcpy_field_possible(Field *to,Field *from)
to->field_length == from->field_length) &&
from->charset() == to->charset() &&
(!sql_mode_for_dates(to->table->in_use) ||
- (to_type != MYSQL_TYPE_DATE &&
- to_type != MYSQL_TYPE_DATETIME)) &&
+ (from->type()!= MYSQL_TYPE_DATE &&
+ from->type()!= MYSQL_TYPE_DATETIME)) &&
(from_real_type != MYSQL_TYPE_VARCHAR ||
((Field_varstring*)from)->length_bytes ==
((Field_varstring*)to)->length_bytes));
diff --git a/sql/filesort.cc b/sql/filesort.cc
index 23cfd6a1817..509a7f8e9b3 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -22,6 +22,7 @@
Sorts a database
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "filesort.h"
#include "unireg.h" // REQUIRED by other includes
@@ -39,7 +40,6 @@
#include "sql_select.h"
#include "log_slow.h"
#include "debug_sync.h"
-#include "sql_base.h"
/// How to write record_ref.
#define WRITE_REF(file,from) \
diff --git a/sql/filesort_utils.cc b/sql/filesort_utils.cc
index f8f6d5c9420..1cef30b6a56 100644
--- a/sql/filesort_utils.cc
+++ b/sql/filesort_utils.cc
@@ -125,7 +125,8 @@ void Filesort_buffer::free_sort_buffer()
void Filesort_buffer::sort_buffer(const Sort_param *param, uint count)
{
- if (count <= 1)
+ size_t size= param->sort_length;
+ if (count <= 1 || size == 0)
return;
uchar **keys= get_sort_keys();
uchar **buffer= NULL;
@@ -138,6 +139,5 @@ void Filesort_buffer::sort_buffer(const Sort_param *param, uint count)
return;
}
- size_t size= param->sort_length;
my_qsort2(keys, count, sizeof(uchar*), get_ptr_compare(size), &size);
}
diff --git a/sql/gstream.cc b/sql/gstream.cc
index 3a9e478c376..adb46083621 100644
--- a/sql/gstream.cc
+++ b/sql/gstream.cc
@@ -18,6 +18,7 @@
NOTE: These functions assumes that the string is end \0 terminated!
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "gstream.h"
#include "m_string.h" // LEX_STRING
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index a63ec65c020..2d0113bcc3f 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -46,6 +46,7 @@
if this file.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_parse.h" // append_file_to_dir
#include "create_options.h"
diff --git a/sql/handler.cc b/sql/handler.cc
index 2251b2498e2..c1363cfcaf1 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -20,6 +20,7 @@
Handler-calling-functions
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "rpl_handler.h"
@@ -1363,10 +1364,7 @@ int ha_commit_trans(THD *thd, bool all)
Free resources and perform other cleanup even for 'empty' transactions.
*/
if (is_real_trans)
- {
thd->transaction.cleanup();
- thd->wakeup_subsequent_commits(error);
- }
DBUG_RETURN(0);
}
@@ -1401,7 +1399,6 @@ int ha_commit_trans(THD *thd, bool all)
thd->variables.lock_wait_timeout))
{
ha_rollback_trans(thd, all);
- thd->wakeup_subsequent_commits(1);
DBUG_RETURN(1);
}
@@ -1489,7 +1486,6 @@ done:
err:
error= 1; /* Transaction was rolled back */
ha_rollback_trans(thd, all);
- thd->wakeup_subsequent_commits(error);
end:
if (rw_trans && mdl_request.ticket)
@@ -1583,10 +1579,7 @@ commit_one_phase_2(THD *thd, bool all, THD_TRANS *trans, bool is_real_trans)
}
/* Free resources and perform other cleanup even for 'empty' transactions. */
if (is_real_trans)
- {
- thd->wakeup_subsequent_commits(error);
thd->transaction.cleanup();
- }
DBUG_RETURN(error);
}
diff --git a/sql/hash_filo.cc b/sql/hash_filo.cc
index 7c275ffc617..fc89bb83a9d 100644
--- a/sql/hash_filo.cc
+++ b/sql/hash_filo.cc
@@ -23,6 +23,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "hash_filo.h"
diff --git a/sql/hostname.cc b/sql/hostname.cc
index c6c58a0db92..1879d056623 100644
--- a/sql/hostname.cc
+++ b/sql/hostname.cc
@@ -24,6 +24,7 @@
Hostnames are checked with reverse name lookup and checked that they
doesn't resemble an IP address.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "hostname.h"
#include "my_global.h"
diff --git a/sql/init.cc b/sql/init.cc
index 86915b7aa01..91b4b220bf3 100644
--- a/sql/init.cc
+++ b/sql/init.cc
@@ -21,6 +21,7 @@
Init and dummy functions for interface with unireg
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "init.h"
#include "my_sys.h"
diff --git a/sql/item.cc b/sql/item.cc
index 4fd1ddcb2da..099fe1e7f07 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -1,6 +1,6 @@
/*
- Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2010, 2013, Monty Program Ab
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, Monty Program Ab.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
#ifdef USE_PRAGMA_IMPLEMENTATION
#pragma implementation // gcc: Class implementation
#endif
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include <mysql.h>
@@ -5585,6 +5585,18 @@ enum_field_types Item::field_type() const
}
+/**
+ Verifies that the input string is well-formed according to its character set.
+ @param send_error If true, call my_error if string is not well-formed.
+
+ Will truncate input string if it is not well-formed.
+
+ @return
+ If well-formed: input string.
+ If not well-formed:
+ if strict mode: NULL pointer and we set this Item's value to NULL
+ if not strict mode: input string truncated up to last good character
+ */
String *Item::check_well_formed_result(String *str, bool send_error)
{
/* Check whether we got a well-formed string */
@@ -9006,17 +9018,11 @@ bool Item_cache_temporal::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
int Item_cache_temporal::save_in_field(Field *field, bool no_conversions)
{
- int error;
- if (!has_value())
+ MYSQL_TIME ltime;
+ if (get_date(&ltime, 0))
return set_field_to_null_with_conversions(field, no_conversions);
-
field->set_notnull();
-
- MYSQL_TIME ltime;
- unpack_time(value, &ltime);
- ltime.time_type= mysql_type_to_time_type(field_type());
- error= field->store_time_dec(&ltime, decimals);
-
+ int error= field->store_time_dec(&ltime, decimals);
return error ? error : field->table->in_use->is_error() ? 1 : 0;
}
diff --git a/sql/item.h b/sql/item.h
index e006622dca2..050d573f3f5 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -164,6 +164,12 @@ public:
default: return "UNKNOWN";
}
}
+ int sortcmp(const String *s, const String *t) const
+ {
+ return collation->coll->strnncollsp(collation,
+ (uchar *) s->ptr(), s->length(),
+ (uchar *) t->ptr(), t->length(), 0);
+ }
};
/*************************************************************************/
@@ -4404,6 +4410,7 @@ public:
return arg->walk(processor, walk_subquery, args) ||
(this->*processor)(args);
}
+ bool check_partition_func_processor(uchar *int_arg) {return TRUE;}
bool check_vcol_func_processor(uchar *arg)
{
return trace_unsupported_by_check_vcol_func_processor("values");
diff --git a/sql/item_buff.cc b/sql/item_buff.cc
index a08ae8d8403..d1134525f7b 100644
--- a/sql/item_buff.cc
+++ b/sql/item_buff.cc
@@ -22,6 +22,7 @@
Buffers to save and compare item values
*/
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index f01a574dcce..ce72c2baa75 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -26,6 +26,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include <m_ctype.h>
#include "sql_select.h"
@@ -1975,14 +1976,14 @@ longlong Item_func_lt::val_int()
longlong Item_func_strcmp::val_int()
{
DBUG_ASSERT(fixed == 1);
- String *a=args[0]->val_str(&cmp.value1);
- String *b=args[1]->val_str(&cmp.value2);
+ String *a= args[0]->val_str(&value1);
+ String *b= args[1]->val_str(&value2);
if (!a || !b)
{
null_value=1;
return 0;
}
- int value= sortcmp(a,b,cmp.cmp_collation.collation);
+ int value= cmp_collation.sortcmp(a, b);
null_value=0;
return !value ? 0 : (value < 0 ? (longlong) -1 : (longlong) 1);
}
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 2482f02ccf0..c789b217d5f 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -693,21 +693,18 @@ public:
};
-class Item_func_strcmp :public Item_bool_func2
+class Item_func_strcmp :public Item_int_func
{
+ String value1, value2;
+ DTCollation cmp_collation;
public:
- Item_func_strcmp(Item *a,Item *b) :Item_bool_func2(a,b) {}
+ Item_func_strcmp(Item *a,Item *b) :Item_int_func(a,b) {}
longlong val_int();
- optimize_type select_optimize() const { return OPTIMIZE_NONE; }
+ uint decimal_precision() const { return 1; }
const char *func_name() const { return "strcmp"; }
-
- virtual inline void print(String *str, enum_query_type query_type)
- {
- Item_func::print(str, query_type);
- }
void fix_length_and_dec()
{
- Item_bool_func2::fix_length_and_dec();
+ agg_arg_charsets_for_comparison(cmp_collation, args, 2);
fix_char_length(2); // returns "1" or "0" or "-1"
}
};
@@ -842,6 +839,7 @@ public:
longlong int_op();
String *str_op(String *str);
my_decimal *decimal_op(my_decimal *);
+ bool is_bool_func() { return false; }
void fix_length_and_dec();
uint decimal_precision() const { return m_args0_copy->decimal_precision(); }
const char *func_name() const { return "nullif"; }
@@ -1524,7 +1522,42 @@ public:
longlong val_int();
enum Functype functype() const { return LIKE_FUNC; }
optimize_type select_optimize() const;
- cond_result eq_cmp_result() const { return COND_TRUE; }
+ cond_result eq_cmp_result() const
+ {
+ /**
+ We cannot always rewrite conditions as follows:
+ from: WHERE expr1=const AND expr1 LIKE expr2
+ to: WHERE expr1=const AND const LIKE expr2
+ or
+ from: WHERE expr1=const AND expr2 LIKE expr1
+ to: WHERE expr1=const AND expr2 LIKE const
+
+ because LIKE works differently comparing to the regular "=" operator:
+
+ 1. LIKE performs a stricter one-character-to-one-character comparison
+ and does not recognize contractions and expansions.
+ Replacing "expr1" to "const in LIKE would make the condition
+ stricter in case of a complex collation.
+
+ 2. LIKE does not ignore trailing spaces and thus works differently
+ from the "=" operator in case of "PAD SPACE" collations
+ (which are the majority in MariaDB). So, for "PAD SPACE" collations:
+
+ - expr1=const - ignores trailing spaces
+ - const LIKE expr2 - does not ignore trailing spaces
+ - expr2 LIKE const - does not ignore trailing spaces
+
+ Allow only "binary" for now.
+ It neither ignores trailing spaces nor has contractions/expansions.
+
+ TODO:
+ We could still replace "expr1" to "const" in "expr1 LIKE expr2"
+ in case of a "PAD SPACE" collation, but only if "expr2" has '%'
+ at the end.
+ */
+ return ((Item_func_like *)this)->compare_collation() == &my_charset_bin ?
+ COND_TRUE : COND_OK;
+ }
const char *func_name() const { return "like"; }
bool fix_fields(THD *thd, Item **ref);
void cleanup();
diff --git a/sql/item_create.cc b/sql/item_create.cc
index efc1d9d3504..65678ebe1b7 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -22,6 +22,7 @@
Functions to create an item. Used by sql_yac.yy
*/
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/item_func.h b/sql/item_func.h
index bc5f15ec16d..6f3fb64ba9a 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -1741,6 +1741,7 @@ public:
bool register_field_in_bitmap(uchar *arg);
bool set_entry(THD *thd, bool create_if_not_exists);
void cleanup();
+ bool check_vcol_func_processor(uchar *int_arg) {return TRUE;}
};
@@ -1780,6 +1781,7 @@ public:
{
return this;
}
+ bool check_vcol_func_processor(uchar *int_arg) { return TRUE;}
};
@@ -1862,6 +1864,7 @@ public:
bool eq(const Item *item, bool binary_cmp) const;
void cleanup();
+ bool check_vcol_func_processor(uchar *int_arg) { return TRUE;}
};
@@ -2160,7 +2163,6 @@ public:
longlong val_int();
void fix_length_and_dec()
{ max_length= 21; unsigned_flag=1; }
- bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
bool check_vcol_func_processor(uchar *int_arg)
{
return trace_unsupported_by_check_vcol_func_processor(func_name());
diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc
index d38729771f8..3e5856f6cb0 100644
--- a/sql/item_geofunc.cc
+++ b/sql/item_geofunc.cc
@@ -27,6 +27,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/item_inetfunc.cc b/sql/item_inetfunc.cc
index 627ef728a2e..6a09747fa1a 100644
--- a/sql/item_inetfunc.cc
+++ b/sql/item_inetfunc.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "item_inetfunc.h"
#include "my_net.h"
diff --git a/sql/item_row.cc b/sql/item_row.cc
index 6345eaa864b..3548a6b9b75 100644
--- a/sql/item_row.cc
+++ b/sql/item_row.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 9a3c7589db2..ec5740cf3e2 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -31,10 +31,10 @@
#pragma implementation // gcc: Class implementation
#endif
-/* May include caustic 3rd-party defs. Use early, so it can override nothing. */
-#include "sha2.h"
-#include "my_global.h" // HAVE_*
+#include <my_global.h> // HAVE_*
+/* May include caustic 3rd-party defs. Use early, so it can override nothing */
+#include "sha2.h"
#include "sql_priv.h"
/*
@@ -1378,12 +1378,15 @@ bool Item_func_regexp_replace::append_replacement(String *str,
break; /* End of line */
beg+= cnv;
- if ((n= ((int) wc) - '0') >= 0 && n <= 9 && n < re.nsubpatterns())
+ if ((n= ((int) wc) - '0') >= 0 && n <= 9)
{
- /* A valid sub-pattern reference found */
- int pbeg= re.subpattern_start(n), plength= re.subpattern_end(n) - pbeg;
- if (str->append(source->str + pbeg, plength, cs))
- return true;
+ if (n < re.nsubpatterns())
+ {
+ /* A valid sub-pattern reference found */
+ int pbeg= re.subpattern_start(n), plength= re.subpattern_end(n) - pbeg;
+ if (str->append(source->str + pbeg, plength, cs))
+ return true;
+ }
}
else
{
@@ -4191,7 +4194,7 @@ String *Item_func_uncompress::val_str(String *str)
goto err;
if ((err= uncompress((Byte*)buffer.ptr(), &new_size,
- ((const Bytef*)res->ptr())+4,res->length())) == Z_OK)
+ ((const Bytef*)res->ptr())+4,res->length()-4)) == Z_OK)
{
buffer.length((uint32) new_size);
return &buffer;
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index a62bb175a86..65974fb6155 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -29,6 +29,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 2dadf8b8835..21f14ae8435 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -26,6 +26,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_select.h"
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 4a8bb4cc77d..389d9d5380c 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -30,6 +30,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
@@ -450,16 +451,14 @@ err:
Create a formated date/time value in a string.
*/
-bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
- timestamp_type type, String *str)
+static bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
+ timestamp_type type, MY_LOCALE *locale, String *str)
{
char intbuff[15];
uint hours_i;
uint weekday;
ulong length;
const char *ptr, *end;
- THD *thd= current_thd;
- MY_LOCALE *locale= thd->variables.lc_time_names;
str->length(0);
@@ -1801,6 +1800,8 @@ overflow:
void Item_func_date_format::fix_length_and_dec()
{
THD* thd= current_thd;
+ locale= thd->variables.lc_time_names;
+
/*
Must use this_item() in case it's a local SP variable
(for ->max_length and ->str_value)
@@ -1964,7 +1965,7 @@ String *Item_func_date_format::val_str(String *str)
if (!make_date_time(&date_time_format, &l_time,
is_time_format ? MYSQL_TIMESTAMP_TIME :
MYSQL_TIMESTAMP_DATE,
- str))
+ locale, str))
return str;
null_date:
@@ -1975,8 +1976,9 @@ null_date:
void Item_func_from_unixtime::fix_length_and_dec()
{
- thd= current_thd;
+ THD *thd= current_thd;
thd->time_zone_used= 1;
+ tz= thd->variables.time_zone;
decimals= args[0]->decimals;
Item_temporal_func::fix_length_and_dec();
}
@@ -1997,7 +1999,7 @@ bool Item_func_from_unixtime::get_date(MYSQL_TIME *ltime,
if (args[0]->null_value || sign || sec > TIMESTAMP_MAX_VALUE)
return (null_value= 1);
- thd->variables.time_zone->gmt_sec_to_TIME(ltime, (my_time_t)sec);
+ tz->gmt_sec_to_TIME(ltime, (my_time_t)sec);
ltime->second_part= sec_part;
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index cb8b59501a4..839a5a4845d 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -736,6 +736,7 @@ public:
class Item_func_date_format :public Item_str_func
{
+ MY_LOCALE *locale;
int fixed_length;
const bool is_time_format;
String value;
@@ -753,7 +754,7 @@ public:
class Item_func_from_unixtime :public Item_temporal_func
{
- THD *thd;
+ Time_zone *tz;
public:
Item_func_from_unixtime(Item *a) :Item_temporal_func(a) {}
const char *func_name() const { return "from_unixtime"; }
@@ -1088,10 +1089,4 @@ public:
bool get_date(MYSQL_TIME *res, ulonglong fuzzy_date);
};
-
-/* Function prototypes */
-
-bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
- timestamp_type type, String *str);
-
#endif /* ITEM_TIMEFUNC_INCLUDED */
diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc
index 932f4245c27..f8bf7cbf93a 100644
--- a/sql/item_xmlfunc.cc
+++ b/sql/item_xmlfunc.cc
@@ -17,6 +17,7 @@
#pragma implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
/*
It is necessary to include set_var.h instead of item.h because there
diff --git a/sql/key.cc b/sql/key.cc
index 3556ecf82d7..e3787ea7869 100644
--- a/sql/key.cc
+++ b/sql/key.cc
@@ -16,6 +16,7 @@
/* Functions to handle keys and fields in forms */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: by includes later
#include "key.h" // key_rec_cmp
diff --git a/sql/lock.cc b/sql/lock.cc
index a74a12c41c3..170795a1662 100644
--- a/sql/lock.cc
+++ b/sql/lock.cc
@@ -74,6 +74,7 @@
we are forced to use mysql_lock_merge.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "debug_sync.h"
#include "unireg.h" // REQUIRED: for other includes
@@ -82,7 +83,6 @@
#include "sql_parse.h" // is_log_table_write_query
#include "sql_acl.h" // SUPER_ACL
#include <hash.h>
-#include <assert.h>
#include "wsrep_mysqld.h"
/**
diff --git a/sql/log.cc b/sql/log.cc
index 24e52838e47..2c20ea318c8 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -25,7 +25,7 @@
Abort logging when we get an error in reading or writing log files
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "log.h"
#include "sql_base.h" // open_log_table
@@ -2515,6 +2515,7 @@ bool MYSQL_LOG::open(
const char *new_name, enum cache_type io_cache_type_arg)
{
char buff[FN_REFLEN];
+ MY_STAT f_stat;
File file= -1;
int open_flags= O_CREAT | O_BINARY;
DBUG_ENTER("MYSQL_LOG::open");
@@ -2532,6 +2533,10 @@ bool MYSQL_LOG::open(
log_type_arg, io_cache_type_arg))
goto err;
+ /* File is regular writable file */
+ if (my_stat(log_file_name, &f_stat, MYF(0)) && !MY_S_ISREG(f_stat.st_mode))
+ goto err;
+
if (io_cache_type == SEQ_READ_APPEND)
open_flags |= O_RDWR | O_APPEND;
else
@@ -5874,7 +5879,10 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
if (direct)
{
+ int res;
DBUG_PRINT("info", ("direct is set"));
+ if ((res= thd->wait_for_prior_commit()))
+ DBUG_RETURN(res);
file= &log_file;
my_org_b_tell= my_b_tell(file);
mysql_mutex_lock(&LOCK_log);
@@ -6807,6 +6815,10 @@ MYSQL_BIN_LOG::write_transaction_to_binlog(THD *thd,
to commit. If so, we add those to the queue as well, transitively for all
waiters.
+ And if a transaction is marked to wait for a prior transaction, but that
+ prior transaction is already queued for group commit, then we can queue the
+ new transaction directly to participate in the group commit.
+
@retval < 0 Error
@retval > 0 If queued as the first entry in the queue (meaning this
is the leader)
@@ -6816,8 +6828,8 @@ MYSQL_BIN_LOG::write_transaction_to_binlog(THD *thd,
int
MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
{
- group_commit_entry *entry, *orig_queue;
- wait_for_commit *cur, *last;
+ group_commit_entry *entry, *orig_queue, *last;
+ wait_for_commit *cur;
wait_for_commit *wfc;
DBUG_ENTER("MYSQL_BIN_LOG::queue_for_group_commit");
@@ -6834,8 +6846,17 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
if (wfc && wfc->waitee)
{
mysql_mutex_lock(&wfc->LOCK_wait_commit);
- /* Do an extra check here, this time safely under lock. */
- if (wfc->waitee)
+ /*
+ Do an extra check here, this time safely under lock.
+
+ If waitee->commit_started is set, it means that the transaction we need
+ to wait for has already queued up for group commit. In this case it is
+ safe for us to queue up immediately as well, increasing the opprtunities
+ for group commit. Because waitee has taken the LOCK_prepare_ordered
+ before setting the flag, so there is no risk that we can queue ahead of
+ it.
+ */
+ if (wfc->waitee && !wfc->waitee->commit_started)
{
PSI_stage_info old_stage;
wait_for_commit *loc_waitee;
@@ -6848,6 +6869,11 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
This other transaction may then take over the commit process for us to
get us included in its own group commit. If this happens, the
queued_by_other flag is set.
+
+ Setting this flag may or may not be seen by the other thread, but we
+ are safe in any case: The other thread will set queued_by_other under
+ its LOCK_wait_commit, and we will not check queued_by_other only after
+ we have been woken up.
*/
wfc->opaque_pointer= orig_entry;
DEBUG_SYNC(orig_entry->thd, "group_commit_waiting_for_prior");
@@ -6920,41 +6946,41 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
/*
Iteratively process everything added to the queue, looking for waiters,
and their waiters, and so on. If a waiter is ready to commit, we
- immediately add it to the queue; if not we just wake it up.
+ immediately add it to the queue, and mark it as queued_by_other.
This would be natural to do with recursion, but we want to avoid
potentially unbounded recursion blowing the C stack, so we use the list
approach instead.
- We keep a list of all the waiters that need to be processed in `list',
- linked through the next_subsequent_commit pointer. Initially this list
- contains only the entry passed into this function.
+ We keep a list of the group_commit_entry of all the waiters that need to
+ be processed. Initially this list contains only the entry passed into this
+ function.
We process entries in the list one by one. The element currently being
- processed is pointed to by `cur`, and the element at the end of the list
+ processed is pointed to by `entry`, and the element at the end of the list
is pointed to by `last` (we do not use NULL to terminate the list).
- As we process an element, it is first added to the group_commit_queue.
- Then any waiters for that element are added at the end of the list, to
- be processed in subsequent iterations. This continues until the list
- is exhausted, with all elements ever added eventually processed.
+ As we process an entry, any waiters for that entry are added at the end of
+ the list, to be processed in subsequent iterations. The the entry is added
+ to the group_commit_queue. This continues until the list is exhausted,
+ with all entries ever added eventually processed.
The end result is a breath-first traversal of the tree of waiters,
- re-using the next_subsequent_commit pointers in place of extra stack
- space in a recursive traversal.
+ re-using the `next' pointers of the group_commit_entry objects in place of
+ extra stack space in a recursive traversal.
- The temporary list created in next_subsequent_commit is not
- used by the caller or any other function.
+ The temporary list linked through these `next' pointers is not used by the
+ caller or any other function; it only exists while doing the iterative
+ tree traversal. After, all the processed entries are linked into the
+ group_commit_queue.
*/
cur= wfc;
- last= wfc;
+ last= orig_entry;
entry= orig_entry;
for (;;)
{
- /* Add the entry to the group commit queue. */
- entry->next= group_commit_queue;
- group_commit_queue= entry;
+ group_commit_entry *next_entry;
if (entry->cache_mngr->using_xa)
{
@@ -6963,135 +6989,95 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
DEBUG_SYNC(entry->thd, "commit_after_prepare_ordered");
}
- if (!cur)
- break; // Can happen if initial entry has no wait_for_commit
-
- /*
- Check if this transaction has other transaction waiting for it to commit.
-
- If so, process the waiting transactions, and their waiters and so on,
- transitively.
- */
- if (cur->subsequent_commits_list)
+ if (cur)
{
- wait_for_commit *waiter;
- wait_for_commit *wakeup_list= NULL;
- wait_for_commit **wakeup_next_ptr= &wakeup_list;
+ /*
+ Now that we have taken LOCK_prepare_ordered and will queue up in the
+ group commit queue, it is safe for following transactions to queue
+ themselves. We will grab here any transaction that is now ready to
+ queue up, but after that, more transactions may become ready while the
+ leader is waiting to start the group commit. So set the flag
+ `commit_started', so that later transactions can still participate in
+ the group commit..
+ */
+ cur->commit_started= true;
- mysql_mutex_lock(&cur->LOCK_wait_commit);
/*
- Grab the list, now safely under lock, and process it if still
- non-empty.
+ Check if this transaction has other transaction waiting for it to
+ commit.
+
+ If so, process the waiting transactions, and their waiters and so on,
+ transitively.
*/
- waiter= cur->subsequent_commits_list;
- cur->subsequent_commits_list= NULL;
- while (waiter)
- {
- wait_for_commit *next= waiter->next_subsequent_commit;
- group_commit_entry *entry2=
- (group_commit_entry *)waiter->opaque_pointer;
- if (entry2)
- {
- /*
- This is another transaction ready to be written to the binary
- log. We can put it into the queue directly, without needing a
- separate context switch to the other thread. We just set a flag
- so that the other thread will know when it wakes up that it was
- already processed.
-
- So put it at the end of the list to be processed in a subsequent
- iteration of the outer loop.
- */
- entry2->queued_by_other= true;
- last->next_subsequent_commit= waiter;
- last= waiter;
- /*
- As a small optimisation, we do not actually need to set
- waiter->next_subsequent_commit to NULL, as we can use the
- pointer `last' to check for end-of-list.
- */
- }
- else
- {
- /*
- Wake up the waiting transaction.
-
- For this, we need to set the "wakeup running" flag and release
- the waitee lock to avoid a deadlock, see comments on
- THD::wakeup_subsequent_commits2() for details.
-
- So we need to put these on a list and delay the wakeup until we
- have released the lock.
- */
- *wakeup_next_ptr= waiter;
- wakeup_next_ptr= &waiter->next_subsequent_commit;
- }
- waiter= next;
- }
- if (wakeup_list)
+ if (cur->subsequent_commits_list)
{
- /* Now release our lock and do the wakeups that were delayed above. */
- cur->wakeup_subsequent_commits_running= true;
- mysql_mutex_unlock(&cur->LOCK_wait_commit);
- for (;;)
+ wait_for_commit *waiter, **waiter_ptr;
+
+ mysql_mutex_lock(&cur->LOCK_wait_commit);
+ /*
+ Grab the list, now safely under lock, and process it if still
+ non-empty.
+ */
+ waiter= cur->subsequent_commits_list;
+ waiter_ptr= &cur->subsequent_commits_list;
+ while (waiter)
{
- wait_for_commit *next;
-
- /*
- ToDo: We wakeup the waiter here, so that it can have the chance to
- reach its own commit state and queue up for this same group commit,
- if it is still pending.
-
- One problem with this is that if the waiter does not reach its own
- commit state before this group commit starts, and then the group
- commit fails (binlog write failure), we do not get to propagate
- the error to the waiter.
-
- A solution for this could be to delay the wakeup until commit is
- successful. But then we need to set a flag in the waitee that it is
- already queued for group commit, so that the waiter can check this
- flag and queue itself if it _does_ reach the commit state in time.
-
- (But error handling in case of binlog write failure is currently
- broken in other ways, as well).
- */
- if (&wakeup_list->next_subsequent_commit == wakeup_next_ptr)
+ wait_for_commit *next_waiter= waiter->next_subsequent_commit;
+ group_commit_entry *entry2=
+ (group_commit_entry *)waiter->opaque_pointer;
+ if (entry2)
+ {
+ /*
+ This is another transaction ready to be written to the binary
+ log. We can put it into the queue directly, without needing a
+ separate context switch to the other thread. We just set a flag
+ so that the other thread will know when it wakes up that it was
+ already processed.
+
+ So remove it from the list of our waiters, and instead put it at
+ the end of the list to be processed in a subsequent iteration of
+ the outer loop.
+ */
+ *waiter_ptr= next_waiter;
+ entry2->queued_by_other= true;
+ last->next= entry2;
+ last= entry2;
+ /*
+ As a small optimisation, we do not actually need to set
+ entry2->next to NULL, as we can use the pointer `last' to check
+ for end-of-list.
+ */
+ }
+ else
{
- /* The last one in the list. */
- wakeup_list->wakeup(0);
- break;
+ /*
+ This transaction is not ready to participate in the group commit
+ yet, so leave it in the waiter list. It might join the group
+ commit later, if it completes soon enough to do so (it will see
+ our wfc->commit_started flag set), or it might commit later in a
+ later group commit.
+ */
+ waiter_ptr= &waiter->next_subsequent_commit;
}
- /*
- Important: don't access wakeup_list->next after the wakeup() call,
- it may be invalidated by the other thread.
- */
- next= wakeup_list->next_subsequent_commit;
- wakeup_list->wakeup(0);
- wakeup_list= next;
+ waiter= next_waiter;
}
- /*
- We need a full memory barrier between walking the list and clearing
- the flag wakeup_subsequent_commits_running. This barrier is needed
- to ensure that no other thread will start to modify the list
- pointers before we are done traversing the list.
-
- But wait_for_commit::wakeup(), which was called above, does a full
- memory barrier already (it locks a mutex).
- */
- cur->wakeup_subsequent_commits_running= false;
- }
- else
mysql_mutex_unlock(&cur->LOCK_wait_commit);
+ }
}
- if (cur == last)
+
+ /* Add the entry to the group commit queue. */
+ next_entry= entry->next;
+ entry->next= group_commit_queue;
+ group_commit_queue= entry;
+ if (entry == last)
break;
/*
Move to the next entry in the flattened list of waiting transactions
that still need to be processed transitively.
*/
- cur= cur->next_subsequent_commit;
- entry= (group_commit_entry *)cur->opaque_pointer;
+ entry= next_entry;
DBUG_ASSERT(entry != NULL);
+ cur= entry->thd->wait_for_commit_ptr;
}
if (opt_binlog_commit_wait_count > 0)
@@ -7147,6 +7133,7 @@ MYSQL_BIN_LOG::write_transaction_to_binlog_events(group_commit_entry *entry)
DEBUG_SYNC(entry->thd, "commit_after_group_run_commit_ordered");
}
mysql_mutex_unlock(&LOCK_commit_ordered);
+ entry->thd->wakeup_subsequent_commits(entry->error);
if (next)
{
@@ -7180,7 +7167,7 @@ MYSQL_BIN_LOG::write_transaction_to_binlog_events(group_commit_entry *entry)
}
if (likely(!entry->error))
- return 0;
+ return entry->thd->wait_for_prior_commit();
switch (entry->error)
{
@@ -7238,10 +7225,15 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
LINT_INIT(binlog_id);
{
+ DBUG_EXECUTE_IF("inject_binlog_commit_before_get_LOCK_log",
+ DBUG_ASSERT(!debug_sync_set_action(leader->thd, STRING_WITH_LEN
+ ("commit_before_get_LOCK_log SIGNAL waiting WAIT_FOR cont TIMEOUT 1")));
+ );
/*
Lock the LOCK_log(), and once we get it, collect any additional writes
that queued up while we were waiting.
*/
+ DEBUG_SYNC(leader->thd, "commit_before_get_LOCK_log");
mysql_mutex_lock(&LOCK_log);
DEBUG_SYNC(leader->thd, "commit_after_get_LOCK_log");
@@ -7448,6 +7440,7 @@ MYSQL_BIN_LOG::trx_group_commit_leader(group_commit_entry *leader)
if (current->cache_mngr->using_xa && !current->error &&
DBUG_EVALUATE_IF("skip_commit_ordered", 0, 1))
run_commit_ordered(current->thd, current->all);
+ current->thd->wakeup_subsequent_commits(current->error);
/*
Careful not to access current->next after waking up the other thread! As
@@ -7488,7 +7481,6 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry,
write_cache(entry->thd, mngr->get_binlog_cache_log(FALSE)))
{
entry->error_cache= &mngr->stmt_cache.cache_log;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
@@ -7509,7 +7501,6 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry,
if (write_cache(entry->thd, mngr->get_binlog_cache_log(TRUE)))
{
entry->error_cache= &mngr->trx_cache.cache_log;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
}
@@ -7517,14 +7508,13 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry,
DBUG_EXECUTE_IF("inject_error_writing_xid",
{
entry->error_cache= NULL;
- entry->commit_errno= 28;
+ errno= 28;
DBUG_RETURN(ER_ERROR_ON_WRITE);
});
if (entry->end_event->write(&log_file))
{
entry->error_cache= NULL;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
status_var_add(entry->thd->status_var.binlog_bytes_written,
@@ -7535,7 +7525,6 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry,
if (entry->incident_event->write(&log_file))
{
entry->error_cache= NULL;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
}
@@ -7543,13 +7532,11 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry,
if (mngr->get_binlog_cache_log(FALSE)->error) // Error on read
{
entry->error_cache= &mngr->stmt_cache.cache_log;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
if (mngr->get_binlog_cache_log(TRUE)->error) // Error on read
{
entry->error_cache= &mngr->trx_cache.cache_log;
- entry->commit_errno= errno;
DBUG_RETURN(ER_ERROR_ON_WRITE);
}
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 76170778bad..98b34543cb3 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -16,12 +16,11 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "mysqld_error.h"
#ifndef MYSQL_CLIENT
-#include "my_global.h" // REQUIRED by log_event.h > m_string.h > my_bitmap.h
-#include "sql_priv.h"
#include "unireg.h"
#include "log_event.h"
#include "sql_base.h" // close_thread_tables
@@ -89,23 +88,6 @@ TYPELIB binlog_checksum_typelib=
*/
#define FMT_G_BUFSIZE(PREC) (3 + (PREC) + 5 + 1)
-/*
- Explicit instantiation to unsigned int of template available_buffer
- function.
-*/
-template unsigned int available_buffer<unsigned int>(const char*,
- const char*,
- unsigned int);
-
-/*
- Explicit instantiation to unsigned int of template valid_buffer_range
- function.
-*/
-template bool valid_buffer_range<unsigned int>(unsigned int,
- const char*,
- const char*,
- unsigned int);
-
/*
replication event checksum is introduced in the following "checksum-home" version.
The checksum-aware servers extract FD's version to decide whether the FD event
@@ -3214,7 +3196,10 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
thd->in_multi_stmt_transaction_mode()) || trx_cache;
break;
case SQLCOM_SET_OPTION:
- use_cache= trx_cache= (lex->autocommit ? FALSE : TRUE);
+ if (lex->autocommit)
+ use_cache= trx_cache= FALSE;
+ else
+ use_cache= TRUE;
break;
case SQLCOM_RELEASE_SAVEPOINT:
case SQLCOM_ROLLBACK_TO_SAVEPOINT:
@@ -7524,9 +7509,9 @@ User_var_log_event(const char* buf, uint event_len,
#endif
{
bool error= false;
- const char* buf_start= buf;
+ const char* buf_start= buf, *buf_end= buf + event_len;
+
/* The Post-Header is empty. The Variable Data part begins immediately. */
- const char *start= buf;
buf+= description_event->common_header_len +
description_event->post_header_len[USER_VAR_EVENT-1];
name_len= uint4korr(buf);
@@ -7537,8 +7522,7 @@ User_var_log_event(const char* buf, uint event_len,
may have the bigger value possible, is_null= True and there is no
payload for val, or even that name_len is 0.
*/
- if (!valid_buffer_range<uint>(name_len, buf_start, name,
- event_len - UV_VAL_IS_NULL))
+ if (name + name_len + UV_VAL_IS_NULL > buf_end)
{
error= true;
goto err;
@@ -7556,9 +7540,10 @@ User_var_log_event(const char* buf, uint event_len,
}
else
{
- if (!valid_buffer_range<uint>(UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE
- + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE,
- buf_start, buf, event_len))
+ val= (char *) (buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
+ UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE);
+
+ if (val > buf_end)
{
error= true;
goto err;
@@ -7568,10 +7553,8 @@ User_var_log_event(const char* buf, uint event_len,
charset_number= uint4korr(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE);
val_len= uint4korr(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
UV_CHARSET_NUMBER_SIZE);
- val= (char *) (buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
- UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE);
- if (!valid_buffer_range<uint>(val_len, buf_start, val, event_len))
+ if (val + val_len > buf_end)
{
error= true;
goto err;
@@ -7588,7 +7571,7 @@ User_var_log_event(const char* buf, uint event_len,
Old events will not have this extra byte, thence,
we keep the flags set to UNDEF_F.
*/
- uint bytes_read= ((val + val_len) - start);
+ uint bytes_read= ((val + val_len) - buf_start);
#ifndef DBUG_OFF
bool old_pre_checksum_fd= description_event->is_version_before_checksum(
&description_event->server_version_split);
diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc
index 88617e2263f..3fbf44bba85 100644
--- a/sql/log_event_old.cc
+++ b/sql/log_event_old.cc
@@ -13,11 +13,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#ifndef MYSQL_CLIENT
#include "unireg.h"
#endif
-#include "my_global.h" // REQUIRED by log_event.h > m_string.h > my_bitmap.h
#include "log_event.h"
#ifndef MYSQL_CLIENT
#include "sql_cache.h" // QUERY_CACHE_FLAGS_SIZE
diff --git a/sql/mf_iocache.cc b/sql/mf_iocache.cc
index 3ed9261f630..6535f16445b 100644
--- a/sql/mf_iocache.cc
+++ b/sql/mf_iocache.cc
@@ -32,6 +32,7 @@
flush_io_cache().
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_class.h" // THD
#ifdef HAVE_REPLICATION
diff --git a/sql/multi_range_read.cc b/sql/multi_range_read.cc
index bb49cebb921..20b1c5d5cc1 100644
--- a/sql/multi_range_read.cc
+++ b/sql/multi_range_read.cc
@@ -420,6 +420,7 @@ bool Mrr_ordered_index_reader::set_interruption_temp_buffer(uint rowid_length,
*space_start += key_len;
have_saved_rowid= FALSE;
+ read_was_interrupted= FALSE;
return FALSE;
}
@@ -428,6 +429,7 @@ void Mrr_ordered_index_reader::set_no_interruption_temp_buffer()
support_scan_interruptions= FALSE;
saved_key_tuple= saved_rowid= saved_primary_key= NULL; /* safety */
have_saved_rowid= FALSE;
+ read_was_interrupted= FALSE;
}
void Mrr_ordered_index_reader::interrupt_read()
@@ -445,6 +447,7 @@ void Mrr_ordered_index_reader::interrupt_read()
&table->key_info[table->s->primary_key],
table->key_info[table->s->primary_key].key_length);
}
+ read_was_interrupted= TRUE;
/* Save the last rowid */
memcpy(saved_rowid, file->ref, file->ref_length);
@@ -462,6 +465,10 @@ void Mrr_ordered_index_reader::position()
void Mrr_ordered_index_reader::resume_read()
{
TABLE *table= file->get_table();
+
+ if (!read_was_interrupted)
+ return;
+
KEY *used_index= &table->key_info[file->active_index];
key_restore(table->record[0], saved_key_tuple,
used_index, used_index->key_length);
@@ -551,8 +558,7 @@ int Mrr_ordered_index_reader::init(handler *h_arg, RANGE_SEQ_IF *seq_funcs,
is_mrr_assoc= !MY_TEST(mode & HA_MRR_NO_ASSOCIATION);
mrr_funcs= *seq_funcs;
source_exhausted= FALSE;
- if (support_scan_interruptions)
- bzero(saved_key_tuple, key_info->key_length);
+ read_was_interrupted= false;
have_saved_rowid= FALSE;
return 0;
}
@@ -672,8 +678,19 @@ int Mrr_ordered_rndpos_reader::refill_from_index_reader()
rowid_buffer->write_ptr2= (uchar*)&range_info;
rowid_buffer->write();
}
-
- index_reader->interrupt_read();
+
+ /*
+ When index_reader_needs_refill=TRUE, this means we've got all of index
+ tuples for lookups keys that index_reader had. We are not in the middle
+ of an index read, so there is no need to call interrupt_read.
+
+ Actually, we must not call interrupt_read(), because it could be that we
+ haven't read a single row (because all index lookups returned
+ HA_ERR_KEY_NOT_FOUND). In this case, interrupt_read() will cause [harmless]
+ valgrind warnings when trying to save garbage from table->record[0].
+ */
+ if (!index_reader_needs_refill)
+ index_reader->interrupt_read();
/* Sort the buffer contents by rowid */
rowid_buffer->sort((qsort2_cmp)rowid_cmp_reverse, (void*)file);
diff --git a/sql/multi_range_read.h b/sql/multi_range_read.h
index 3b5375293de..ffae6d63124 100644
--- a/sql/multi_range_read.h
+++ b/sql/multi_range_read.h
@@ -339,6 +339,12 @@ private:
uchar *saved_key_tuple; /* Saved current key tuple */
uchar *saved_primary_key; /* Saved current primary key tuple */
+
+ /*
+ TRUE<=> saved_key_tuple (and saved_primary_key when applicable) have
+ valid values.
+ */
+ bool read_was_interrupted;
static int compare_keys(void* arg, uchar* key1, uchar* key2);
static int compare_keys_reverse(void* arg, uchar* key1, uchar* key2);
diff --git a/sql/mysql_install_db.cc b/sql/mysql_install_db.cc
index 6f28760c055..50454f0f66a 100644
--- a/sql/mysql_install_db.cc
+++ b/sql/mysql_install_db.cc
@@ -24,7 +24,6 @@
#include <m_string.h>
#include <windows.h>
-#include <assert.h>
#include <shellapi.h>
#include <accctrl.h>
#include <aclapi.h>
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 4aa5bf74123..6b9e5e456de 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -14,7 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "sql_plugin.h"
+#include "sql_plugin.h" // Includes my_global.h
#include "sql_priv.h"
#include "unireg.h"
#include <signal.h>
@@ -119,7 +119,6 @@
#endif
extern "C" { // Because of SCO 3.2V4.2
-#include <errno.h>
#include <sys/stat.h>
#ifndef __GNU_LIBRARY__
#define __GNU_LIBRARY__ // Skip warnings in getopt.h
@@ -3330,9 +3329,6 @@ static void init_signals(void)
sa.sa_flags = 0;
sa.sa_handler = print_signal_warning;
sigaction(SIGHUP, &sa, (struct sigaction*) 0);
-#ifdef SIGTSTP
- sigaddset(&set,SIGTSTP);
-#endif
if (thd_lib_detected != THD_LIB_LT)
sigaddset(&set,THR_SERVER_ALARM);
if (test_flags & TEST_SIGINT)
@@ -3342,7 +3338,12 @@ static void init_signals(void)
sigdelset(&set, SIGINT);
}
else
+ {
sigaddset(&set,SIGINT);
+#ifdef SIGTSTP
+ sigaddset(&set,SIGTSTP);
+#endif
+ }
sigprocmask(SIG_SETMASK,&set,NULL);
pthread_sigmask(SIG_SETMASK,&set,NULL);
@@ -4375,7 +4376,15 @@ static int init_common_variables()
global_system_variables.collation_database= default_charset_info;
global_system_variables.collation_connection= default_charset_info;
global_system_variables.character_set_results= default_charset_info;
- global_system_variables.character_set_client= default_charset_info;
+ if (default_charset_info->mbminlen > 1)
+ {
+ global_system_variables.character_set_client= &my_charset_latin1;
+ sql_print_warning("Cannot use %s as character_set_client, %s will be used instead",
+ default_charset_info->csname,
+ global_system_variables.character_set_client->csname);
+ }
+ else
+ global_system_variables.character_set_client= default_charset_info;
if (!(character_set_filesystem=
get_charset_by_csname(character_set_filesystem_name,
@@ -8668,6 +8677,9 @@ mysqld_get_one_option(int optid, const struct my_option *opt, char *argument)
test_flags= argument ? (uint) atoi(argument) : 0;
opt_endinfo=1;
break;
+ case OPT_THREAD_CONCURRENCY:
+ WARN_DEPRECATED_NO_REPLACEMENT(NULL, "THREAD_CONCURRENCY");
+ break;
case (int) OPT_ISAM_LOG:
opt_myisam_log=1;
break;
@@ -9772,7 +9784,8 @@ PSI_stage_info stage_binlog_waiting_background_tasks= { 0, "Waiting for backgrou
PSI_stage_info stage_binlog_processing_checkpoint_notify= { 0, "Processing binlog checkpoint notification", 0};
PSI_stage_info stage_binlog_stopping_background_thread= { 0, "Stopping binlog background thread", 0};
PSI_stage_info stage_waiting_for_work_from_sql_thread= { 0, "Waiting for work from SQL thread", 0};
-PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0};
+PSI_stage_info stage_waiting_for_prior_transaction_to_commit= { 0, "Waiting for prior transaction to commit", 0};
+PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit= { 0, "Waiting for prior transaction to start commit before starting next transaction", 0};
PSI_stage_info stage_waiting_for_room_in_worker_thread= { 0, "Waiting for room in worker thread event queue", 0};
PSI_stage_info stage_master_gtid_wait_primary= { 0, "Waiting in MASTER_GTID_WAIT() (primary waiter)", 0};
PSI_stage_info stage_master_gtid_wait= { 0, "Waiting in MASTER_GTID_WAIT()", 0};
@@ -9890,6 +9903,7 @@ PSI_stage_info *all_server_stages[]=
& stage_waiting_for_master_to_send_event,
& stage_waiting_for_master_update,
& stage_waiting_for_prior_transaction_to_commit,
+ & stage_waiting_for_prior_transaction_to_start_commit,
& stage_waiting_for_query_cache_lock,
& stage_waiting_for_relay_log_space,
& stage_waiting_for_room_in_worker_thread,
diff --git a/sql/mysqld.h b/sql/mysqld.h
index 96ad9be1d7f..94077ec01b8 100644
--- a/sql/mysqld.h
+++ b/sql/mysqld.h
@@ -448,6 +448,7 @@ extern PSI_stage_info stage_binlog_processing_checkpoint_notify;
extern PSI_stage_info stage_binlog_stopping_background_thread;
extern PSI_stage_info stage_waiting_for_work_from_sql_thread;
extern PSI_stage_info stage_waiting_for_prior_transaction_to_commit;
+extern PSI_stage_info stage_waiting_for_prior_transaction_to_start_commit;
extern PSI_stage_info stage_waiting_for_room_in_worker_thread;
extern PSI_stage_info stage_master_gtid_wait_primary;
extern PSI_stage_info stage_master_gtid_wait;
@@ -592,6 +593,7 @@ enum options_mysqld
OPT_SSL_CRL,
OPT_SSL_CRLPATH,
OPT_SSL_KEY,
+ OPT_THREAD_CONCURRENCY,
OPT_WANT_CORE,
OPT_MYSQL_COMPATIBILITY,
OPT_MYSQL_TO_BE_IMPLEMENTED,
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index eb34fcc2d77..29b8417c698 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -43,7 +43,6 @@
#include <my_net.h>
#include <violite.h>
#include <signal.h>
-#include <errno.h>
#include "probes_mysql.h"
#ifdef EMBEDDED_LIBRARY
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 1cea800fbbc..297a8b91f27 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -108,6 +108,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "key.h" // is_key_used, key_copy, key_cmp, key_restore
#include "sql_parse.h" // check_stack_overrun
@@ -3494,6 +3495,8 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
my_bitmap_init(&handled_columns, buf, table->s->fields, FALSE);
/*
+ Calculate the selectivity of the range conditions supported by indexes.
+
First, take into account possible range accesses.
range access estimates are the most precise, we prefer them to any other
estimate sources.
@@ -3539,6 +3542,7 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
break;
bitmap_set_bit(&handled_columns, key_part->fieldnr-1);
}
+ double selectivity_mult;
if (i)
{
/*
@@ -3554,8 +3558,34 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
*/
double f1= key_info->actual_rec_per_key(i-1);
double f2= key_info->actual_rec_per_key(i);
- table->cond_selectivity*= f1 / f2;
+ if (f1 > 0 && f2 > 0)
+ selectivity_mult= f1 / f2;
+ else
+ {
+ /*
+ No statistics available, assume the selectivity is proportional
+ to the number of key parts.
+ (i=0 means 1 keypart, i=1 means 2 keyparts, so use i+1)
+ */
+ selectivity_mult= ((double)(i+1)) / i;
+ }
+ table->cond_selectivity*= selectivity_mult;
}
+ /*
+ We need to set selectivity for fields supported by indexes.
+ For single-component indexes and for some first components
+ of other indexes we do it here. For the remaining fields
+ we do it later in this function, in the same way as for the
+ fields not used in any indexes.
+ */
+ if (i == 1)
+ {
+ uint fieldnr= key_info->key_part[0].fieldnr;
+ table->field[fieldnr-1]->cond_selectivity= quick_cond_selectivity;
+ if (i != used_key_parts)
+ table->field[fieldnr-1]->cond_selectivity*= selectivity_mult;
+ bitmap_clear_bit(used_fields, fieldnr-1);
+ }
}
}
}
@@ -3563,10 +3593,9 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
/*
Second step: calculate the selectivity of the range conditions not
- supported by any index
+ supported by any index and selectivity of the range condition
+ over the fields whose selectivity has not been set yet.
*/
- bitmap_subtract(used_fields, &handled_columns);
- /* no need to do: my_bitmap_free(&handled_columns); */
if (thd->variables.optimizer_use_condition_selectivity > 2 &&
!bitmap_is_clear_all(used_fields))
@@ -3643,9 +3672,12 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
for (Field **field_ptr= table->field; *field_ptr; field_ptr++)
{
Field *table_field= *field_ptr;
- if (bitmap_is_set(table->read_set, table_field->field_index) &&
+ if (bitmap_is_set(used_fields, table_field->field_index) &&
table_field->cond_selectivity < 1.0)
- table->cond_selectivity*= table_field->cond_selectivity;
+ {
+ if (!bitmap_is_set(&handled_columns, table_field->field_index))
+ table->cond_selectivity*= table_field->cond_selectivity;
+ }
}
free_alloc:
@@ -3654,10 +3686,7 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
}
- /* Calculate the selectivity of the range conditions supported by indexes */
-
- bitmap_clear_all(used_fields);
-
+ bitmap_union(used_fields, &handled_columns);
/* Check if we can improve selectivity estimates by using sampling */
ulong check_rows=
@@ -3745,6 +3774,11 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
field Field which key image should be stored
ptr Field value in key format
len Length of the value, in bytes
+
+ ATTENTION
+ len is the length of the value not counting the NULL-byte (at the same
+ time, ptr points to the key image, which starts with NULL-byte for
+ nullable columns)
DESCRIPTION
Copy the field value from its key image to the table record. The source
@@ -8298,6 +8332,8 @@ get_mm_leaf(RANGE_OPT_PARAM *param, COND *conf_func, Field *field,
!(conf_func->compare_collation()->state & MY_CS_BINSORT &&
(type == Item_func::EQUAL_FUNC || type == Item_func::EQ_FUNC)))
goto end;
+ if (value->cmp_type() == TIME_RESULT && field->cmp_type() != TIME_RESULT)
+ goto end;
if (key_part->image_type == Field::itMBR)
{
@@ -12838,11 +12874,11 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time)
uint cur_used_key_parts;
/*
- Check (B1) - if current index is covering. Exclude UNIQUE indexes, because
- loose scan may still be chosen for them due to imperfect cost calculations.
+ Check (B1) - if current index is covering.
+ (was also: "Exclude UNIQUE indexes ..." but this was removed because
+ there are cases Loose Scan over a multi-part index is useful).
*/
- if (!table->covering_keys.is_set(cur_index) ||
- cur_index_info->flags & HA_NOSAME)
+ if (!table->covering_keys.is_set(cur_index))
goto next_index;
/*
@@ -12981,6 +13017,16 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time)
}
/*
+ Aplly a heuristic: there is no point to use loose index scan when we're
+ using the whole unique index.
+ */
+ if (cur_index_info->flags & HA_NOSAME &&
+ cur_group_key_parts == cur_index_info->user_defined_key_parts)
+ {
+ goto next_index;
+ }
+
+ /*
Check (NGA1, NGA2) and extract a sequence of constants to be used as part
of all search keys.
*/
@@ -13357,16 +13403,31 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item,
DBUG_RETURN(FALSE);
/* Check for compatible string comparisons - similar to get_mm_leaf. */
- if (args[0] && args[1] && !args[2] && // this is a binary function
- min_max_arg_item->result_type() == STRING_RESULT &&
- /*
- Don't use an index when comparing strings of different collations.
- */
- ((args[1]->result_type() == STRING_RESULT &&
- image_type == Field::itRAW &&
- min_max_arg_item->field->charset() !=
- pred->compare_collation())
- ||
+ if (args[0] && args[1] && !args[2]) // this is a binary function
+ {
+ if (args[1]->cmp_type() == TIME_RESULT &&
+ min_max_arg_item->field->cmp_type() != TIME_RESULT)
+ DBUG_RETURN(FALSE);
+
+ /*
+ Can't use GROUP_MIN_MAX optimization for ENUM and SET,
+ because the values are stored as numbers in index,
+ while MIN() and MAX() work as strings.
+ It would return the records with min and max enum numeric indexes.
+ "Bug#45300 MAX() and ENUM type" should be fixed first.
+ */
+ if (min_max_arg_item->field->real_type() == MYSQL_TYPE_ENUM ||
+ min_max_arg_item->field->real_type() == MYSQL_TYPE_SET)
+ DBUG_RETURN(FALSE);
+
+ if (min_max_arg_item->result_type() == STRING_RESULT &&
+ /*
+ Don't use an index when comparing strings of different collations.
+ */
+ ((args[1]->result_type() == STRING_RESULT &&
+ image_type == Field::itRAW &&
+ min_max_arg_item->field->charset() !=
+ pred->compare_collation()) ||
/*
We can't always use indexes when comparing a string index to a
number.
@@ -13374,6 +13435,7 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item,
(args[1]->result_type() != STRING_RESULT &&
min_max_arg_item->field->cmp_type() != args[1]->result_type())))
DBUG_RETURN(FALSE);
+ }
}
else
has_other= true;
diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc
index 66b1ba16cbc..6503d110032 100644
--- a/sql/opt_subselect.cc
+++ b/sql/opt_subselect.cc
@@ -26,6 +26,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_base.h"
#include "sql_select.h"
#include "filesort.h"
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 4e8fcefa6d2..fc3ce09dd8e 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -48,6 +48,7 @@
(assuming a index for column d of table t2 is defined)
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "key.h" // key_cmp_if_same
#include "sql_select.h"
diff --git a/sql/opt_table_elimination.cc b/sql/opt_table_elimination.cc
index 2ef565517b5..6434c36aaf2 100644
--- a/sql/opt_table_elimination.cc
+++ b/sql/opt_table_elimination.cc
@@ -1486,6 +1486,8 @@ void check_equality(Dep_analysis_context *ctx, Dep_module_expr **eq_mod,
left->real_item()->type() == Item::FIELD_ITEM)
{
Field *field= ((Item_field*)left->real_item())->field;
+ if (right->cmp_type() == TIME_RESULT && field->cmp_type() != TIME_RESULT)
+ return;
if (field->result_type() == STRING_RESULT)
{
if (right->result_type() != STRING_RESULT)
@@ -1499,7 +1501,9 @@ void check_equality(Dep_analysis_context *ctx, Dep_module_expr **eq_mod,
We can't assume there's a functional dependency if the effective
collation of the operation differ from the field collation.
*/
- if (field->cmp_type() == STRING_RESULT &&
+ if ((field->cmp_type() == STRING_RESULT ||
+ field->real_type() == MYSQL_TYPE_ENUM ||
+ field->real_type() == MYSQL_TYPE_SET) &&
field->charset() != cond->compare_collation())
return;
}
diff --git a/sql/parse_file.cc b/sql/parse_file.cc
index a6e3aa7ed66..ee031c1bbc2 100644
--- a/sql/parse_file.cc
+++ b/sql/parse_file.cc
@@ -20,11 +20,11 @@
Text .frm files management routines
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "parse_file.h"
#include "unireg.h" // CREATE_MODE
#include "sql_table.h" // build_table_filename
-#include <errno.h>
#include <m_ctype.h>
#include <my_sys.h>
#include <my_dir.h>
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index a753c5052bd..34381b3cfb1 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -19,6 +19,7 @@
#pragma implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
// Required to get server definitions for mysql/plugin.h right
#include "sql_plugin.h"
diff --git a/sql/procedure.cc b/sql/procedure.cc
index bdaced20586..8f9d6c0a7f3 100644
--- a/sql/procedure.cc
+++ b/sql/procedure.cc
@@ -20,6 +20,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "procedure.h"
#include "sql_analyse.h" // Includes procedure
diff --git a/sql/protocol.cc b/sql/protocol.cc
index fde90102e61..5970568b66c 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -25,6 +25,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "protocol.h"
diff --git a/sql/records.cc b/sql/records.cc
index 242bf8dc3b2..b6d68a5017f 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -25,6 +25,7 @@
Functions for easy reading of records, possible through a cache
*/
+#include <my_global.h>
#include "records.h"
#include "sql_priv.h"
#include "records.h"
diff --git a/sql/records.h b/sql/records.h
index 57467d665d4..21477d4a30b 100644
--- a/sql/records.h
+++ b/sql/records.h
@@ -18,7 +18,6 @@
#ifdef USE_PRAGMA_INTERFACE
#pragma interface /* gcc class implementation */
#endif
-#include <my_global.h> /* for uint typedefs */
struct st_join_table;
class handler;
diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
index 334de1337d6..3c99becf304 100644
--- a/sql/repl_failsafe.cc
+++ b/sql/repl_failsafe.cc
@@ -24,6 +24,7 @@
functions like register_slave()) are working.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_parse.h" // check_access
#ifdef HAVE_REPLICATION
diff --git a/sql/rpl_filter.cc b/sql/rpl_filter.cc
index 2b4a3093e0f..28859c2eb85 100644
--- a/sql/rpl_filter.cc
+++ b/sql/rpl_filter.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "mysqld.h" // system_charset_info
#include "rpl_filter.h"
diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc
index c8d5e2a2db0..e5620ec41a2 100644
--- a/sql/rpl_gtid.cc
+++ b/sql/rpl_gtid.cc
@@ -16,7 +16,7 @@
/* Definitions for MariaDB global transaction ID (GTID). */
-
+#include <my_global.h>
#include "sql_priv.h"
#include "my_sys.h"
#include "unireg.h"
diff --git a/sql/rpl_handler.cc b/sql/rpl_handler.cc
index 34d3df23435..09e221e9bd5 100644
--- a/sql/rpl_handler.cc
+++ b/sql/rpl_handler.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
diff --git a/sql/rpl_injector.cc b/sql/rpl_injector.cc
index a4b04d2e047..19b193729fd 100644
--- a/sql/rpl_injector.cc
+++ b/sql/rpl_injector.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED by later includes
#include "rpl_injector.h"
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc
index 9b91206ca75..2050ccdb3d7 100644
--- a/sql/rpl_parallel.cc
+++ b/sql/rpl_parallel.cc
@@ -8,6 +8,15 @@
Code for optional parallel execution of replicated events on the slave.
*/
+
+/*
+ Maximum number of queued events to accumulate in a local free list, before
+ moving them to the global free list. There is additional a limit of how much
+ to accumulate based on opt_slave_parallel_max_queued.
+*/
+#define QEV_BATCH_FREE 200
+
+
struct rpl_parallel_thread_pool global_rpl_thread_pool;
static void signal_error_to_sql_driver_thread(THD *thd, rpl_group_info *rgi,
@@ -290,6 +299,7 @@ retry_event_group(rpl_group_info *rgi, rpl_parallel_thread *rpt,
THD *thd= rgi->thd;
rpl_parallel_entry *entry= rgi->parallel_entry;
ulong retries= 0;
+ Format_description_log_event *description_event= NULL;
do_retry:
event_count= 0;
@@ -355,6 +365,14 @@ do_retry:
goto err;
}
cur_offset= rgi->retry_start_offset;
+ delete description_event;
+ description_event=
+ read_relay_log_description_event(&rlog, cur_offset, &errmsg);
+ if (!description_event)
+ {
+ err= 1;
+ goto err;
+ }
my_b_seek(&rlog, cur_offset);
do
@@ -367,8 +385,7 @@ do_retry:
for (;;)
{
old_offset= cur_offset;
- ev= Log_event::read_log_event(&rlog, 0,
- rli->relay_log.description_event_for_exec /* ToDo: this needs fixing */,
+ ev= Log_event::read_log_event(&rlog, 0, description_event,
opt_slave_sql_verify_checksum);
cur_offset= my_b_tell(&rlog);
@@ -416,7 +433,12 @@ do_retry:
}
event_type= ev->get_type_code();
- if (!Log_event::is_group_event(event_type))
+ if (event_type == FORMAT_DESCRIPTION_EVENT)
+ {
+ delete description_event;
+ description_event= (Format_description_log_event *)ev;
+ continue;
+ } else if (!Log_event::is_group_event(event_type))
{
delete ev;
continue;
@@ -424,7 +446,7 @@ do_retry:
ev->thd= thd;
mysql_mutex_lock(&rpt->LOCK_rpl_thread);
- qev= rpt->retry_get_qev(ev, orig_qev, log_name, cur_offset,
+ qev= rpt->retry_get_qev(ev, orig_qev, log_name, old_offset,
cur_offset - old_offset);
mysql_mutex_unlock(&rpt->LOCK_rpl_thread);
if (!qev)
@@ -472,6 +494,8 @@ do_retry:
err:
+ if (description_event)
+ delete description_event;
if (fd >= 0)
{
end_io_cache(&rlog);
@@ -495,14 +519,8 @@ handle_rpl_parallel_thread(void *arg)
rpl_group_info *group_rgi= NULL;
group_commit_orderer *gco, *tmp_gco;
uint64 event_gtid_sub_id= 0;
- rpl_parallel_thread::queued_event *qevs_to_free;
- rpl_group_info *rgis_to_free;
- group_commit_orderer *gcos_to_free;
rpl_sql_thread_info sql_info(NULL);
- size_t total_event_size;
int err;
- inuse_relaylog *last_ir;
- uint64 accumulated_ir_count;
struct rpl_parallel_thread *rpt= (struct rpl_parallel_thread *)arg;
@@ -544,6 +562,8 @@ handle_rpl_parallel_thread(void *arg)
while (!rpt->stop)
{
+ rpl_parallel_thread::queued_event *qev, *next_qev;
+
thd->ENTER_COND(&rpt->COND_rpl_thread, &rpt->LOCK_rpl_thread,
&stage_waiting_for_work_from_sql_thread, &old_stage);
/*
@@ -565,28 +585,21 @@ handle_rpl_parallel_thread(void *arg)
thd->EXIT_COND(&old_stage);
more_events:
- qevs_to_free= NULL;
- rgis_to_free= NULL;
- gcos_to_free= NULL;
- total_event_size= 0;
- while (events)
+ for (qev= events; qev; qev= next_qev)
{
- struct rpl_parallel_thread::queued_event *next= events->next;
Log_event_type event_type;
- rpl_group_info *rgi= events->rgi;
+ rpl_group_info *rgi= qev->rgi;
rpl_parallel_entry *entry= rgi->parallel_entry;
bool end_of_group, group_ending;
- total_event_size+= events->event_size;
- if (events->typ == rpl_parallel_thread::queued_event::QUEUED_POS_UPDATE)
+ next_qev= qev->next;
+ if (qev->typ == rpl_parallel_thread::queued_event::QUEUED_POS_UPDATE)
{
- handle_queued_pos_update(thd, events);
- events->next= qevs_to_free;
- qevs_to_free= events;
- events= next;
+ handle_queued_pos_update(thd, qev);
+ rpt->loc_free_qev(qev);
continue;
}
- else if (events->typ ==
+ else if (qev->typ ==
rpl_parallel_thread::queued_event::QUEUED_MASTER_RESTART)
{
if (in_event_group)
@@ -598,29 +611,34 @@ handle_rpl_parallel_thread(void *arg)
group_rgi->cleanup_context(thd, 1);
in_event_group= false;
finish_event_group(thd, group_rgi->gtid_sub_id,
- events->entry_for_queued, group_rgi);
+ qev->entry_for_queued, group_rgi);
- group_rgi->next= rgis_to_free;
- rgis_to_free= group_rgi;
+ rpt->loc_free_rgi(group_rgi);
thd->rgi_slave= group_rgi= NULL;
}
- events->next= qevs_to_free;
- qevs_to_free= events;
- events= next;
+ rpt->loc_free_qev(qev);
continue;
}
- DBUG_ASSERT(events->typ==rpl_parallel_thread::queued_event::QUEUED_EVENT);
+ DBUG_ASSERT(qev->typ==rpl_parallel_thread::queued_event::QUEUED_EVENT);
thd->rgi_slave= group_rgi= rgi;
gco= rgi->gco;
/* Handle a new event group, which will be initiated by a GTID event. */
- if ((event_type= events->ev->get_type_code()) == GTID_EVENT)
+ if ((event_type= qev->ev->get_type_code()) == GTID_EVENT)
{
bool did_enter_cond= false;
PSI_stage_info old_stage;
uint64 wait_count;
+ DBUG_EXECUTE_IF("rpl_parallel_scheduled_gtid_0_x_100", {
+ if (rgi->current_gtid.domain_id == 0 &&
+ rgi->current_gtid.seq_no == 100) {
+ debug_sync_set_action(thd,
+ STRING_WITH_LEN("now SIGNAL scheduled_gtid_0_x_100"));
+ }
+ });
+
in_event_group= true;
/*
If the standalone flag is set, then this event group consists of a
@@ -628,7 +646,7 @@ handle_rpl_parallel_thread(void *arg)
similar), without any terminating COMMIT/ROLLBACK/XID.
*/
group_standalone=
- (0 != (static_cast<Gtid_log_event *>(events->ev)->flags2 &
+ (0 != (static_cast<Gtid_log_event *>(qev->ev)->flags2 &
Gtid_log_event::FL_STANDALONE));
event_gtid_sub_id= rgi->gtid_sub_id;
@@ -656,7 +674,7 @@ handle_rpl_parallel_thread(void *arg)
DEBUG_SYNC(thd, "rpl_parallel_start_waiting_for_prior");
thd->ENTER_COND(&gco->COND_group_commit_orderer,
&entry->LOCK_parallel_entry,
- &stage_waiting_for_prior_transaction_to_commit,
+ &stage_waiting_for_prior_transaction_to_start_commit,
&old_stage);
did_enter_cond= true;
do
@@ -689,8 +707,7 @@ handle_rpl_parallel_thread(void *arg)
*/
DBUG_ASSERT(!tmp_gco->prev_gco);
gco->prev_gco= NULL;
- tmp_gco->next_gco= gcos_to_free;
- gcos_to_free= tmp_gco;
+ rpt->loc_free_gco(tmp_gco);
}
if (entry->force_abort && wait_count > entry->stop_count)
@@ -751,7 +768,7 @@ handle_rpl_parallel_thread(void *arg)
}
}
- group_ending= is_group_ending(events->ev, event_type);
+ group_ending= is_group_ending(qev->ev, event_type);
if (group_ending && likely(!rgi->worker_error))
{
DEBUG_SYNC(thd, "rpl_parallel_before_mark_start_commit");
@@ -767,20 +784,32 @@ handle_rpl_parallel_thread(void *arg)
if (likely(!rgi->worker_error) && !skip_event_group)
{
++rgi->retry_event_count;
- err= rpt_handle_event(events, rpt);
- delete_or_keep_event_post_apply(rgi, event_type, events->ev);
+#ifndef DBUG_OFF
+ err= 0;
+ DBUG_EXECUTE_IF("rpl_parallel_simulate_temp_err_xid",
+ if (event_type == XID_EVENT)
+ {
+ thd->clear_error();
+ thd->get_stmt_da()->reset_diagnostics_area();
+ my_error(ER_LOCK_DEADLOCK, MYF(0));
+ err= 1;
+ });
+ if (!err)
+#endif
+ err= rpt_handle_event(qev, rpt);
+ delete_or_keep_event_post_apply(rgi, event_type, qev->ev);
DBUG_EXECUTE_IF("rpl_parallel_simulate_temp_err_gtid_0_x_100",
err= dbug_simulate_tmp_error(rgi, thd););
if (err)
{
convert_kill_to_deadlock_error(rgi);
if (has_temporary_error(thd) && slave_trans_retries > 0)
- err= retry_event_group(rgi, rpt, events);
+ err= retry_event_group(rgi, rpt, qev);
}
}
else
{
- delete events->ev;
+ delete qev->ev;
err= thd->wait_for_prior_commit();
}
@@ -789,8 +818,7 @@ handle_rpl_parallel_thread(void *arg)
((group_standalone && !Log_event::is_part_of_group(event_type)) ||
group_ending);
- events->next= qevs_to_free;
- qevs_to_free= events;
+ rpt->loc_free_qev(qev);
if (unlikely(err))
{
@@ -805,61 +833,20 @@ handle_rpl_parallel_thread(void *arg)
{
in_event_group= false;
finish_event_group(thd, event_gtid_sub_id, entry, rgi);
- rgi->next= rgis_to_free;
- rgis_to_free= rgi;
+ rpt->loc_free_rgi(rgi);
thd->rgi_slave= group_rgi= rgi= NULL;
skip_event_group= false;
DEBUG_SYNC(thd, "rpl_parallel_end_of_group");
}
-
- events= next;
}
mysql_mutex_lock(&rpt->LOCK_rpl_thread);
- /* Signal that our queue can now accept more events. */
- rpt->dequeue2(total_event_size);
- mysql_cond_signal(&rpt->COND_rpl_thread_queue);
- /* We need to delay the free here, to when we have the lock. */
- while (gcos_to_free)
- {
- group_commit_orderer *next= gcos_to_free->next_gco;
- rpt->free_gco(gcos_to_free);
- gcos_to_free= next;
- }
- while (rgis_to_free)
- {
- rpl_group_info *next= rgis_to_free->next;
- rpt->free_rgi(rgis_to_free);
- rgis_to_free= next;
- }
- last_ir= NULL;
- accumulated_ir_count= 0;
- while (qevs_to_free)
- {
- rpl_parallel_thread::queued_event *next= qevs_to_free->next;
- inuse_relaylog *ir= qevs_to_free->ir;
- /* Batch up refcount update to reduce use of synchronised operations. */
- if (last_ir != ir)
- {
- if (last_ir)
- {
- my_atomic_rwlock_wrlock(&last_ir->inuse_relaylog_atomic_lock);
- my_atomic_add64(&last_ir->dequeued_count, accumulated_ir_count);
- my_atomic_rwlock_wrunlock(&last_ir->inuse_relaylog_atomic_lock);
- accumulated_ir_count= 0;
- }
- last_ir= ir;
- }
- ++accumulated_ir_count;
- rpt->free_qev(qevs_to_free);
- qevs_to_free= next;
- }
- if (last_ir)
- {
- my_atomic_rwlock_wrlock(&last_ir->inuse_relaylog_atomic_lock);
- my_atomic_add64(&last_ir->dequeued_count, accumulated_ir_count);
- my_atomic_rwlock_wrunlock(&last_ir->inuse_relaylog_atomic_lock);
- }
+ /*
+ Now that we have the lock, we can move everything from our local free
+ lists to the real free lists that are also accessible from the SQL
+ driver thread.
+ */
+ rpt->batch_free();
if ((events= rpt->event_queue) != NULL)
{
@@ -872,6 +859,7 @@ handle_rpl_parallel_thread(void *arg)
mysql_mutex_unlock(&rpt->LOCK_rpl_thread);
goto more_events;
}
+ rpt->inuse_relaylog_refcount_update();
if (in_event_group && group_rgi->parallel_entry->force_abort)
{
@@ -1107,6 +1095,51 @@ err:
}
+void
+rpl_parallel_thread::batch_free()
+{
+ mysql_mutex_assert_owner(&LOCK_rpl_thread);
+ if (loc_qev_list)
+ {
+ *loc_qev_last_ptr_ptr= qev_free_list;
+ qev_free_list= loc_qev_list;
+ loc_qev_list= NULL;
+ dequeue2(loc_qev_size);
+ /* Signal that our queue can now accept more events. */
+ mysql_cond_signal(&COND_rpl_thread_queue);
+ loc_qev_size= 0;
+ qev_free_pending= 0;
+ }
+ if (loc_rgi_list)
+ {
+ *loc_rgi_last_ptr_ptr= rgi_free_list;
+ rgi_free_list= loc_rgi_list;
+ loc_rgi_list= NULL;
+ }
+ if (loc_gco_list)
+ {
+ *loc_gco_last_ptr_ptr= gco_free_list;
+ gco_free_list= loc_gco_list;
+ loc_gco_list= NULL;
+ }
+}
+
+
+void
+rpl_parallel_thread::inuse_relaylog_refcount_update()
+{
+ inuse_relaylog *ir= accumulated_ir_last;
+ if (ir)
+ {
+ my_atomic_rwlock_wrlock(&ir->rli->inuse_relaylog_atomic_lock);
+ my_atomic_add64(&ir->dequeued_count, accumulated_ir_count);
+ my_atomic_rwlock_wrunlock(&ir->rli->inuse_relaylog_atomic_lock);
+ accumulated_ir_count= 0;
+ accumulated_ir_last= NULL;
+ }
+}
+
+
rpl_parallel_thread::queued_event *
rpl_parallel_thread::get_qev_common(Log_event *ev, ulonglong event_size)
{
@@ -1161,6 +1194,43 @@ rpl_parallel_thread::retry_get_qev(Log_event *ev, queued_event *orig_qev,
void
+rpl_parallel_thread::loc_free_qev(rpl_parallel_thread::queued_event *qev)
+{
+ inuse_relaylog *ir= qev->ir;
+ inuse_relaylog *last_ir= accumulated_ir_last;
+ if (ir != last_ir)
+ {
+ if (last_ir)
+ inuse_relaylog_refcount_update();
+ accumulated_ir_last= ir;
+ }
+ ++accumulated_ir_count;
+ if (!loc_qev_list)
+ loc_qev_last_ptr_ptr= &qev->next;
+ else
+ qev->next= loc_qev_list;
+ loc_qev_list= qev;
+ loc_qev_size+= qev->event_size;
+ /*
+ We want to release to the global free list only occasionally, to avoid
+ having to take the LOCK_rpl_thread muted too many times.
+
+ However, we do need to release regularly. If we let the unreleased part
+ grow too large, then the SQL driver thread may go to sleep waiting for
+ the queue to drop below opt_slave_parallel_max_queued, and this in turn
+ can stall all other worker threads for more stuff to do.
+ */
+ if (++qev_free_pending >= QEV_BATCH_FREE ||
+ loc_qev_size >= opt_slave_parallel_max_queued/3)
+ {
+ mysql_mutex_lock(&LOCK_rpl_thread);
+ batch_free();
+ mysql_mutex_unlock(&LOCK_rpl_thread);
+ }
+}
+
+
+void
rpl_parallel_thread::free_qev(rpl_parallel_thread::queued_event *qev)
{
mysql_mutex_assert_owner(&LOCK_rpl_thread);
@@ -1209,6 +1279,19 @@ rpl_parallel_thread::get_rgi(Relay_log_info *rli, Gtid_log_event *gtid_ev,
void
+rpl_parallel_thread::loc_free_rgi(rpl_group_info *rgi)
+{
+ DBUG_ASSERT(rgi->commit_orderer.waitee == NULL);
+ rgi->free_annotate_event();
+ if (!loc_rgi_list)
+ loc_rgi_last_ptr_ptr= &rgi->next;
+ else
+ rgi->next= loc_rgi_list;
+ loc_rgi_list= rgi;
+}
+
+
+void
rpl_parallel_thread::free_rgi(rpl_group_info *rgi)
{
mysql_mutex_assert_owner(&LOCK_rpl_thread);
@@ -1242,12 +1325,14 @@ rpl_parallel_thread::get_gco(uint64 wait_count, group_commit_orderer *prev)
void
-rpl_parallel_thread::free_gco(group_commit_orderer *gco)
+rpl_parallel_thread::loc_free_gco(group_commit_orderer *gco)
{
- mysql_mutex_assert_owner(&LOCK_rpl_thread);
DBUG_ASSERT(!gco->prev_gco /* Must not free until wait has completed. */);
- gco->next_gco= gco_free_list;
- gco_free_list= gco;
+ if (!loc_gco_list)
+ loc_gco_last_ptr_ptr= &gco->next_gco;
+ else
+ gco->next_gco= loc_gco_list;
+ loc_gco_list= gco;
}
@@ -1683,6 +1768,7 @@ rpl_parallel_entry::queue_master_restart(rpl_group_info *rgi,
qev->ir= rli->last_inuse_relaylog;
++qev->ir->queued_count;
thr->enqueue(qev);
+ mysql_cond_signal(&thr->COND_rpl_thread);
mysql_mutex_unlock(&thr->LOCK_rpl_thread);
return 0;
}
diff --git a/sql/rpl_parallel.h b/sql/rpl_parallel.h
index b114ee4ebcb..239818855b8 100644
--- a/sql/rpl_parallel.h
+++ b/sql/rpl_parallel.h
@@ -96,9 +96,28 @@ struct rpl_parallel_thread {
size_t event_size;
} *event_queue, *last_in_queue;
uint64 queued_size;
+ /* These free lists are protected by LOCK_rpl_thread. */
queued_event *qev_free_list;
rpl_group_info *rgi_free_list;
group_commit_orderer *gco_free_list;
+ /*
+ These free lists are local to the thread, so need not be protected by any
+ lock. They are moved to the global free lists in batches in the function
+ batch_free(), to reduce LOCK_rpl_thread contention.
+
+ The lists are not NULL-terminated (as we do not need to traverse them).
+ Instead, if they are non-NULL, the loc_XXX_last_ptr_ptr points to the
+ `next' pointer of the last element, which is used to link into the front
+ of the global freelists.
+ */
+ queued_event *loc_qev_list, **loc_qev_last_ptr_ptr;
+ size_t loc_qev_size;
+ uint64 qev_free_pending;
+ rpl_group_info *loc_rgi_list, **loc_rgi_last_ptr_ptr;
+ group_commit_orderer *loc_gco_list, **loc_gco_last_ptr_ptr;
+ /* These keep track of batch update of inuse_relaylog refcounts. */
+ inuse_relaylog *accumulated_ir_last;
+ uint64 accumulated_ir_count;
void enqueue(queued_event *qev)
{
@@ -127,12 +146,41 @@ struct rpl_parallel_thread {
queued_event *retry_get_qev(Log_event *ev, queued_event *orig_qev,
const char *relay_log_name,
ulonglong event_pos, ulonglong event_size);
+ /*
+ Put a qev on the local free list, to be later released to the global free
+ list by batch_free().
+ */
+ void loc_free_qev(queued_event *qev);
+ /*
+ Release an rgi immediately to the global free list. Requires holding the
+ LOCK_rpl_thread mutex.
+ */
void free_qev(queued_event *qev);
rpl_group_info *get_rgi(Relay_log_info *rli, Gtid_log_event *gtid_ev,
rpl_parallel_entry *e, ulonglong event_size);
+ /*
+ Put an gco on the local free list, to be later released to the global free
+ list by batch_free().
+ */
+ void loc_free_rgi(rpl_group_info *rgi);
+ /*
+ Release an rgi immediately to the global free list. Requires holding the
+ LOCK_rpl_thread mutex.
+ */
void free_rgi(rpl_group_info *rgi);
group_commit_orderer *get_gco(uint64 wait_count, group_commit_orderer *prev);
- void free_gco(group_commit_orderer *gco);
+ /*
+ Put a gco on the local free list, to be later released to the global free
+ list by batch_free().
+ */
+ void loc_free_gco(group_commit_orderer *gco);
+ /*
+ Move all local free lists to the global ones. Requires holding
+ LOCK_rpl_thread.
+ */
+ void batch_free();
+ /* Update inuse_relaylog refcounts with what we have accumulated so far. */
+ void inuse_relaylog_refcount_update();
};
diff --git a/sql/rpl_record.cc b/sql/rpl_record.cc
index 5d1ef671159..8c694602c74 100644
--- a/sql/rpl_record.cc
+++ b/sql/rpl_record.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "rpl_rli.h"
diff --git a/sql/rpl_record_old.cc b/sql/rpl_record_old.cc
index 8b43b268c17..061fab78dbd 100644
--- a/sql/rpl_record_old.cc
+++ b/sql/rpl_record_old.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED by other includes
#include "rpl_rli.h"
diff --git a/sql/rpl_reporting.cc b/sql/rpl_reporting.cc
index eb362941f3e..49708df40f7 100644
--- a/sql/rpl_reporting.cc
+++ b/sql/rpl_reporting.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "rpl_reporting.h"
#include "log.h" // sql_print_error, sql_print_warning,
diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc
index 754b877f654..629e046ed0a 100644
--- a/sql/rpl_rli.cc
+++ b/sql/rpl_rli.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // HAVE_*
#include "rpl_mi.h"
@@ -518,6 +519,90 @@ void Relay_log_info::clear_until_condition()
/*
+ Read the correct format description event for starting to replicate from
+ a given position in a relay log file.
+*/
+Format_description_log_event *
+read_relay_log_description_event(IO_CACHE *cur_log, ulonglong start_pos,
+ const char **errmsg)
+{
+ Log_event *ev;
+ Format_description_log_event *fdev;
+ bool found= false;
+
+ /*
+ By default the relay log is in binlog format 3 (4.0).
+ Even if format is 4, this will work enough to read the first event
+ (Format_desc) (remember that format 4 is just lenghtened compared to format
+ 3; format 3 is a prefix of format 4).
+ */
+ fdev= new Format_description_log_event(3);
+
+ while (!found)
+ {
+ Log_event_type typ;
+
+ /*
+ Read the possible Format_description_log_event; if position
+ was 4, no need, it will be read naturally.
+ */
+ DBUG_PRINT("info",("looking for a Format_description_log_event"));
+
+ if (my_b_tell(cur_log) >= start_pos)
+ break;
+
+ if (!(ev= Log_event::read_log_event(cur_log, 0, fdev,
+ opt_slave_sql_verify_checksum)))
+ {
+ DBUG_PRINT("info",("could not read event, cur_log->error=%d",
+ cur_log->error));
+ if (cur_log->error) /* not EOF */
+ {
+ *errmsg= "I/O error reading event at position 4";
+ delete fdev;
+ return NULL;
+ }
+ break;
+ }
+ typ= ev->get_type_code();
+ if (typ == FORMAT_DESCRIPTION_EVENT)
+ {
+ DBUG_PRINT("info",("found Format_description_log_event"));
+ delete fdev;
+ fdev= (Format_description_log_event*) ev;
+ /*
+ As ev was returned by read_log_event, it has passed is_valid(), so
+ my_malloc() in ctor worked, no need to check again.
+ */
+ /*
+ Ok, we found a Format_description event. But it is not sure that this
+ describes the whole relay log; indeed, one can have this sequence
+ (starting from position 4):
+ Format_desc (of slave)
+ Rotate (of master)
+ Format_desc (of master)
+ So the Format_desc which really describes the rest of the relay log
+ is the 3rd event (it can't be further than that, because we rotate
+ the relay log when we queue a Rotate event from the master).
+ But what describes the Rotate is the first Format_desc.
+ So what we do is:
+ go on searching for Format_description events, until you exceed the
+ position (argument 'pos') or until you find another event than Rotate
+ or Format_desc.
+ */
+ }
+ else
+ {
+ DBUG_PRINT("info",("found event of another type=%d", typ));
+ found= (typ != ROTATE_EVENT);
+ delete ev;
+ }
+ }
+ return fdev;
+}
+
+
+/*
Open the given relay log
SYNOPSIS
@@ -640,68 +725,13 @@ int init_relay_log_pos(Relay_log_info* rli,const char* log,
*/
if (pos > BIN_LOG_HEADER_SIZE) /* If pos<=4, we stay at 4 */
{
- Log_event* ev;
- while (look_for_description_event)
+ if (look_for_description_event)
{
- /*
- Read the possible Format_description_log_event; if position
- was 4, no need, it will be read naturally.
- */
- DBUG_PRINT("info",("looking for a Format_description_log_event"));
-
- if (my_b_tell(rli->cur_log) >= pos)
- break;
-
- /*
- Because of we have rli->data_lock and log_lock, we can safely read an
- event
- */
- if (!(ev= Log_event::read_log_event(rli->cur_log, 0,
- rli->relay_log.description_event_for_exec,
- opt_slave_sql_verify_checksum)))
- {
- DBUG_PRINT("info",("could not read event, rli->cur_log->error=%d",
- rli->cur_log->error));
- if (rli->cur_log->error) /* not EOF */
- {
- *errmsg= "I/O error reading event at position 4";
- goto err;
- }
- break;
- }
- else if (ev->get_type_code() == FORMAT_DESCRIPTION_EVENT)
- {
- DBUG_PRINT("info",("found Format_description_log_event"));
- delete rli->relay_log.description_event_for_exec;
- rli->relay_log.description_event_for_exec= (Format_description_log_event*) ev;
- /*
- As ev was returned by read_log_event, it has passed is_valid(), so
- my_malloc() in ctor worked, no need to check again.
- */
- /*
- Ok, we found a Format_description event. But it is not sure that this
- describes the whole relay log; indeed, one can have this sequence
- (starting from position 4):
- Format_desc (of slave)
- Rotate (of master)
- Format_desc (of master)
- So the Format_desc which really describes the rest of the relay log
- is the 3rd event (it can't be further than that, because we rotate
- the relay log when we queue a Rotate event from the master).
- But what describes the Rotate is the first Format_desc.
- So what we do is:
- go on searching for Format_description events, until you exceed the
- position (argument 'pos') or until you find another event than Rotate
- or Format_desc.
- */
- }
- else
- {
- DBUG_PRINT("info",("found event of another type=%d",
- ev->get_type_code()));
- look_for_description_event= (ev->get_type_code() == ROTATE_EVENT);
- delete ev;
- }
+ Format_description_log_event *fdev;
+ if (!(fdev= read_relay_log_description_event(rli->cur_log, pos, errmsg)))
+ goto err;
+ delete rli->relay_log.description_event_for_exec;
+ rli->relay_log.description_event_for_exec= fdev;
}
my_b_seek(rli->cur_log,(off_t)pos);
#ifndef DBUG_OFF
@@ -956,11 +986,11 @@ void Relay_log_info::inc_group_relay_log_pos(ulonglong log_pos,
if (rgi->is_parallel_exec)
{
/* In case of parallel replication, do not update the position backwards. */
- int cmp= strcmp(group_relay_log_name, event_relay_log_name);
+ int cmp= strcmp(group_relay_log_name, rgi->event_relay_log_name);
if (cmp < 0)
{
group_relay_log_pos= rgi->future_event_relay_log_pos;
- strmake_buf(group_relay_log_name, event_relay_log_name);
+ strmake_buf(group_relay_log_name, rgi->event_relay_log_name);
notify_group_relay_log_name_update();
} else if (cmp == 0 && group_relay_log_pos < rgi->future_event_relay_log_pos)
group_relay_log_pos= rgi->future_event_relay_log_pos;
@@ -1360,6 +1390,7 @@ Relay_log_info::alloc_inuse_relaylog(const char *name)
my_error(ER_OUTOFMEMORY, MYF(0), (int)sizeof(*ir));
return 1;
}
+ ir->rli= this;
strmake_buf(ir->name, name);
if (!inuse_relaylog_list)
@@ -1686,6 +1717,11 @@ void rpl_group_info::cleanup_context(THD *thd, bool error)
trans_rollback_stmt(thd); // if a "statement transaction"
/* trans_rollback() also resets OPTION_GTID_BEGIN */
trans_rollback(thd); // if a "real transaction"
+ /*
+ Now that we have rolled back the transaction, make sure we do not
+ errorneously update the GTID position.
+ */
+ gtid_pending= false;
}
m_table_map.clear_tables();
slave_close_thread_tables(thd);
diff --git a/sql/rpl_rli.h b/sql/rpl_rli.h
index 3a8d87030ad..9885417aa3f 100644
--- a/sql/rpl_rli.h
+++ b/sql/rpl_rli.h
@@ -496,6 +496,7 @@ private:
*/
struct inuse_relaylog {
inuse_relaylog *next;
+ Relay_log_info *rli;
/* Number of events in this relay log queued for worker threads. */
int64 queued_count;
/* Number of events completed by worker threads. */
diff --git a/sql/rpl_tblmap.cc b/sql/rpl_tblmap.cc
index 7b55911d887..4c521cf0c16 100644
--- a/sql/rpl_tblmap.cc
+++ b/sql/rpl_tblmap.cc
@@ -13,8 +13,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
-#include "my_global.h" // HAVE_REPLICATION
#ifdef HAVE_REPLICATION
diff --git a/sql/rpl_utility.cc b/sql/rpl_utility.cc
index 25dff72090c..9067f1e4253 100644
--- a/sql/rpl_utility.cc
+++ b/sql/rpl_utility.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "rpl_utility.h"
#include "log_event.h"
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 1dad3603799..8a34d6a5af1 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -16,7 +16,7 @@
/* variable declarations are in sys_vars.cc now !!! */
-#include "sql_plugin.h"
+#include "sql_plugin.h" // Includes my_global.h
#include "sql_class.h" // set_var.h: session_var_ptr
#include "set_var.h"
#include "sql_priv.h"
diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt
index 98781a2d6b3..2bc7bb1c7a7 100644
--- a/sql/share/errmsg-utf8.txt
+++ b/sql/share/errmsg-utf8.txt
@@ -6438,11 +6438,11 @@ ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT
ER_BINLOG_UNSAFE_UPDATE_IGNORE
eng "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave."
-ER_PLUGIN_NO_UNINSTALL
- eng "Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it."
+ER_UNUSED_15
+ eng "You should never see it"
-ER_PLUGIN_NO_INSTALL
- eng "Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it."
+ER_UNUSED_16
+ eng "You should never see it"
ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT
eng "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave."
diff --git a/sql/slave.cc b/sql/slave.cc
index 6e70f090247..98ad3da90c2 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -25,8 +25,8 @@
replication slave.
*/
+#include <my_global.h>
#include "sql_priv.h"
-#include "my_global.h"
#include "slave.h"
#include "sql_parse.h" // execute_init_command
#include "sql_table.h" // mysql_rm_table
@@ -5578,7 +5578,7 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
char str_buf[128];
String str(str_buf, sizeof(str_buf), system_charset_info);
mi->rli.until_gtid_pos.to_string(&str);
- sql_print_information("Slave IO thread stops because it reached its"
+ sql_print_information("Slave I/O thread stops because it reached its"
" UNTIL master_gtid_pos %s", str.c_ptr_safe());
mi->abort_slave= true;
}
diff --git a/sql/slave.h b/sql/slave.h
index e65b4a589a1..e16f801b577 100644
--- a/sql/slave.h
+++ b/sql/slave.h
@@ -220,6 +220,10 @@ void end_relay_log_info(Relay_log_info* rli);
void lock_slave_threads(Master_info* mi);
void unlock_slave_threads(Master_info* mi);
void init_thread_mask(int* mask,Master_info* mi,bool inverse);
+Format_description_log_event *
+read_relay_log_description_event(IO_CACHE *cur_log, ulonglong start_pos,
+ const char **errmsg);
+
int init_relay_log_pos(Relay_log_info* rli,const char* log,ulonglong pos,
bool need_data_lock, const char** errmsg,
bool look_for_description_event);
diff --git a/sql/sp.cc b/sql/sp.cc
index b25117019c0..965bbbf50ed 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sp.h"
diff --git a/sql/sp_cache.cc b/sql/sp_cache.cc
index 14f49ecc077..bafd0f34ab6 100644
--- a/sql/sp_cache.cc
+++ b/sql/sp_cache.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#ifdef USE_PRAGMA_IMPLEMENTATION
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 0ef336a4436..21f8726eb34 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -15,7 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_prepare.h"
diff --git a/sql/sp_pcontext.cc b/sql/sp_pcontext.cc
index 7c44e675811..11954921e06 100644
--- a/sql/sp_pcontext.cc
+++ b/sql/sp_pcontext.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#ifdef USE_PRAGMA_IMPLEMENTATION
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index 42476f7a596..a5a6a61f73c 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#ifdef USE_PRAGMA_IMPLEMENTATION
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 9f672801c9f..9c4fe168fe3 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -15,8 +15,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
-#include "my_global.h" // REQUIRED for HAVE_* below
#include "spatial.h"
#include "gstream.h" // Gis_read_stream
#include "sql_string.h" // String
@@ -1236,11 +1236,15 @@ int Gis_polygon::store_shapes(Gcalc_shape_transporter *trn) const
trn->start_ring();
get_point(&first_x, &first_y, data);
data+= POINT_DATA_SIZE;
- n_points--;
+
prev_x= first_x;
prev_y= first_y;
if (trn->add_point(first_x, first_y))
return 1;
+
+ if (--n_points == 0)
+ goto single_point_ring;
+
while (--n_points)
{
double x, y;
@@ -1265,6 +1269,8 @@ int Gis_polygon::store_shapes(Gcalc_shape_transporter *trn) const
return 1;
}
data+= POINT_DATA_SIZE;
+
+single_point_ring:
trn->complete_ring();
}
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index c6f23b3f1a3..4e872c1960c 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -25,7 +25,7 @@
in the relevant fields. Empty strings comes last.
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "sql_acl.h" // MYSQL_DB_FIELD_COUNT, ACL_ACCESS
#include "sql_base.h" // close_mysql_tables
@@ -12229,12 +12229,13 @@ bool acl_authenticate(THD *thd, uint com_change_user_pkt_len)
mpvio.auth_info.authenticated_as);
if (!acl_proxy_user)
{
+ mysql_mutex_unlock(&acl_cache->lock);
+
Host_errors errors;
errors.m_proxy_user_acl= 1;
inc_host_errors(mpvio.thd->security_ctx->ip, &errors);
if (!thd->is_error())
login_failed_error(thd);
- mysql_mutex_unlock(&acl_cache->lock);
DBUG_RETURN(1);
}
acl_user= acl_proxy_user->copy(thd->mem_root);
diff --git a/sql/sql_admin.cc b/sql/sql_admin.cc
index aefa88feb43..fa8a195b8fc 100644
--- a/sql/sql_admin.cc
+++ b/sql/sql_admin.cc
@@ -14,7 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "sql_class.h" // THD
+#include "sql_class.h" // THD and my_global.h
#include "keycaches.h" // get_key_cache
#include "sql_base.h" // Open_table_context
#include "lock.h" // MYSQL_OPEN_*
diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc
index 9b7ea58bee6..32b447797cf 100644
--- a/sql/sql_analyse.cc
+++ b/sql/sql_analyse.cc
@@ -29,6 +29,7 @@
#define MYSQL_LEX 1
+#include <my_global.h>
#include "sql_priv.h"
#include "procedure.h"
#include "sql_analyse.h"
diff --git a/sql/sql_audit.cc b/sql/sql_audit.cc
index 84f2d95c5da..b659054a50b 100644
--- a/sql/sql_audit.cc
+++ b/sql/sql_audit.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_audit.h"
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 0bbcca5e778..480c15b6ffb 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -17,8 +17,8 @@
/* Basic functions needed by many modules */
+#include <my_global.h>
#include "sql_base.h" // setup_table_map
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "debug_sync.h"
@@ -8456,7 +8456,6 @@ bool setup_on_expr(THD *thd, TABLE_LIST *table, bool is_update)
do
{
embedded= embedding;
- DBUG_PRINT("XXX", ("check: %s", table->alias));
if (embedded->on_expr)
{
thd->where="on clause";
diff --git a/sql/sql_binlog.cc b/sql/sql_binlog.cc
index fef959c37ca..f0465cdf5bf 100644
--- a/sql/sql_binlog.cc
+++ b/sql/sql_binlog.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_binlog.h"
#include "sql_parse.h" // check_global_access
diff --git a/sql/sql_bootstrap.cc b/sql/sql_bootstrap.cc
index 8e632a02ace..30d03029ce6 100644
--- a/sql/sql_bootstrap.cc
+++ b/sql/sql_bootstrap.cc
@@ -14,8 +14,7 @@
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
-#include <stdlib.h>
-#include <errno.h>
+#include <my_global.h>
#include <ctype.h>
#include <string.h>
#include "sql_bootstrap.h"
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 6001517b0c7..e1efb1e85d6 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -328,7 +328,7 @@ TODO list:
(This could be done with almost no speed penalty)
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "sql_cache.h"
#include "sql_parse.h" // check_table_access
@@ -3339,7 +3339,7 @@ Query_cache::register_tables_from_list(THD *thd, TABLE_LIST *tables_used,
There are not callback function for for VIEWs
*/
if (!insert_table(key_length, key, (*block_table),
- tables_used->view_db.length + 1, 0,
+ tables_used->view_db.length, 0,
HA_CACHE_TBL_NONTRANSACT, 0, 0, TRUE))
DBUG_RETURN(0);
/*
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 90c550d6a30..dbdf90066d0 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -28,7 +28,7 @@
#pragma implementation // gcc: Class implementation
#endif
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_class.h"
@@ -4495,6 +4495,7 @@ thd_need_ordering_with(const MYSQL_THD thd, const MYSQL_THD other_thd)
return 1;
if (!rgi->commit_id || rgi->commit_id != other_rgi->commit_id)
return 1;
+ DBUG_EXECUTE_IF("thd_need_ordering_with_force", return 1;);
/*
Otherwise, these two threads are doing parallel replication within the same
replication domain. Their commit order is already fixed, so we do not need
@@ -6485,6 +6486,19 @@ wait_for_commit::reinit()
opaque_pointer= NULL;
wakeup_error= 0;
wakeup_subsequent_commits_running= false;
+ commit_started= false;
+#ifdef SAFE_MUTEX
+ /*
+ When using SAFE_MUTEX, the ordering between taking the LOCK_wait_commit
+ mutexes is checked. This causes a problem when we re-use a mutex, as then
+ the expected locking order may change.
+
+ So in this case, do a re-init of the mutex. In release builds, we want to
+ avoid the overhead of a re-init though.
+ */
+ mysql_mutex_destroy(&LOCK_wait_commit);
+ mysql_mutex_init(key_LOCK_wait_commit, &LOCK_wait_commit, MY_MUTEX_INIT_FAST);
+#endif
}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 7a34960e390..236975a6e94 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -1727,6 +1727,16 @@ struct wait_for_commit
on that function for details.
*/
bool wakeup_subsequent_commits_running;
+ /*
+ This flag can be set when a commit starts, but has not completed yet.
+ It is used by binlog group commit to allow a waiting transaction T2 to
+ join the group commit of an earlier transaction T1. When T1 has queued
+ itself for group commit, it will set the commit_started flag. Then when
+ T2 becomes ready to commit and needs to wait for T1 to commit first, T2
+ can queue itself before waiting, and thereby participate in the same
+ group commit as T1.
+ */
+ bool commit_started;
void register_wait_for_prior_commit(wait_for_commit *waitee);
int wait_for_prior_commit(THD *thd)
diff --git a/sql/sql_client.cc b/sql/sql_client.cc
index e7c555b5947..efac01f9894 100644
--- a/sql/sql_client.cc
+++ b/sql/sql_client.cc
@@ -18,6 +18,7 @@
This files defines some MySQL C API functions that are server specific
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_class.h" // system_variables
diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc
index 5b36b828b8a..94dcfedcf02 100644
--- a/sql/sql_connect.cc
+++ b/sql/sql_connect.cc
@@ -20,7 +20,7 @@
Functions to autenticate and handle reqests for a connection
*/
-#include "my_global.h"
+#include <my_global.h>
#include "sql_priv.h"
#ifndef __WIN__
#include <netdb.h> // getservbyname, servent
@@ -795,14 +795,10 @@ bool thd_init_client_charset(THD *thd, uint cs_number)
Use server character set and collation if
- opt_character_set_client_handshake is not set
- client has not specified a character set
- - client character set is the same as the servers
- client character set doesn't exists in server
*/
if (!opt_character_set_client_handshake ||
- !(cs= get_charset(cs_number, MYF(0))) ||
- !my_strcasecmp(&my_charset_latin1,
- global_system_variables.character_set_client->name,
- cs->name))
+ !(cs= get_charset(cs_number, MYF(0))))
{
thd->variables.character_set_client=
global_system_variables.character_set_client;
diff --git a/sql/sql_crypt.cc b/sql/sql_crypt.cc
index bcc8ad0b10f..2460a16551d 100644
--- a/sql/sql_crypt.cc
+++ b/sql/sql_crypt.cc
@@ -26,6 +26,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_crypt.h"
#include "password.h"
diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc
index a38077c40cb..99b7b1e58d0 100644
--- a/sql/sql_cursor.cc
+++ b/sql/sql_cursor.cc
@@ -17,6 +17,7 @@
#pragma implementation /* gcc class implementation */
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_cursor.h"
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index a930cb0f12d..47641512a59 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -18,7 +18,7 @@
/* create and drop of databases */
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_db.h"
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index da2f7b156fe..c85068e5d10 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -20,6 +20,7 @@
Multi-table deletes were introduced by Monty and Sinisa
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_delete.h"
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 9c3f67c651b..254a7bceefd 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -21,7 +21,7 @@
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_derived.h"
@@ -465,8 +465,6 @@ bool mysql_derived_merge(THD *thd, LEX *lex, TABLE_LIST *derived)
}
}
- if (!derived->merged_for_insert)
- dt_select->first_cond_optimization= FALSE; // consider it optimized
exit_merge:
if (arena)
thd->restore_active_arena(arena, &backup);
diff --git a/sql/sql_do.cc b/sql/sql_do.cc
index 4ba887b5ab2..468b1bc33da 100644
--- a/sql/sql_do.cc
+++ b/sql/sql_do.cc
@@ -16,6 +16,7 @@
/* Execute DO statement */
+#include <my_global.h>
#include "sql_priv.h"
#include "transaction.h"
#include "unireg.h"
diff --git a/sql/sql_error.cc b/sql/sql_error.cc
index fb1bb811c9d..3e18b701031 100644
--- a/sql/sql_error.cc
+++ b/sql/sql_error.cc
@@ -41,6 +41,7 @@ This file contains the implementation of error and warnings related
***********************************************************************/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_error.h"
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index 7bab96e8ea5..f713e74259d 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -18,6 +18,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_select.h"
diff --git a/sql/sql_expression_cache.cc b/sql/sql_expression_cache.cc
index 1e64bc10a7c..824d21eea20 100644
--- a/sql/sql_expression_cache.cc
+++ b/sql/sql_expression_cache.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+#include <my_global.h>
#include "sql_base.h"
#include "sql_select.h"
#include "sql_expression_cache.h"
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index a6c471f67d5..110bca96530 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -52,6 +52,7 @@
cursor points at the first record).
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_handler.h"
#include "unireg.h" // REQUIRED: for other includes
diff --git a/sql/sql_help.cc b/sql/sql_help.cc
index 8f458ea0b9f..afeb9395a55 100644
--- a/sql/sql_help.cc
+++ b/sql/sql_help.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_help.h"
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 92f5f5257b4..ac5605cbaf5 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -56,7 +56,7 @@
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_insert.h"
@@ -868,6 +868,8 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
table_list->prepare_check_option(thd))
error= 1;
+ table->reset_default_fields();
+
while ((values= its++))
{
if (fields.elements || !value_count)
@@ -1666,6 +1668,13 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
DBUG_ASSERT(table->insert_values != NULL);
store_record(table,insert_values);
restore_record(table,record[1]);
+
+ /*
+ in INSERT ... ON DUPLICATE KEY UPDATE the set of modified fields can
+ change per row. Thus, we have to do reset_default_fields() per row.
+ Twice (before insert and before update).
+ */
+ table->reset_default_fields();
DBUG_ASSERT(info->update_fields->elements ==
info->update_values->elements);
if (fill_record_n_invoke_before_triggers(thd, table, *info->update_fields,
@@ -1693,6 +1702,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
if (res)
goto err;
}
+ table->reset_default_fields();
/* CHECK OPTION for VIEW ... ON DUPLICATE KEY UPDATE ... */
if (info->view &&
@@ -3483,6 +3493,7 @@ select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
table->file->ha_start_bulk_insert((ha_rows) 0);
}
restore_record(table,s->default_values); // Get empty record
+ table->reset_default_fields();
table->next_number_field=table->found_next_number_field;
#ifdef HAVE_REPLICATION
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 6432e1937be..9ad9c15b3ff 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -18,6 +18,7 @@
/* A lexical scanner on a temporary buffer with a yacc interface */
#define MYSQL_LEX 1
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_class.h" // sql_lex.h: SQLCOM_END
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 6c631e20c87..dbb5940611c 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -104,6 +104,15 @@ struct sys_var_with_base
LEX_STRING base_name;
};
+struct LEX_TYPE
+{
+ enum enum_field_types type;
+ char *length, *dec;
+ CHARSET_INFO *charset;
+ void set(int t, char *l, char *d, CHARSET_INFO *cs)
+ { type= (enum_field_types)t; length= l; dec= d; charset= cs; }
+};
+
#ifdef MYSQL_SERVER
/*
The following hack is needed because mysql_yacc.cc does not define
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 534a8fa5484..6ecdddc3008 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -19,6 +19,7 @@
/* Copy data from a textfile to table */
/* 2006-12 Erik Wetterberg : LOAD XML added */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_load.h"
@@ -147,14 +148,8 @@ static int read_xml_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
bool ignore_check_option_errors);
#ifndef EMBEDDED_LIBRARY
-static bool write_execute_load_query_log_event(THD *thd, sql_exchange* ex,
- const char* db_arg, /* table's database */
- const char* table_name_arg,
- bool is_concurrent,
- enum enum_duplicates duplicates,
- bool ignore,
- bool transactional_table,
- int errocode);
+static bool write_execute_load_query_log_event(THD *, sql_exchange*, const
+ char*, const char*, bool, enum enum_duplicates, bool, bool, int);
#endif /* EMBEDDED_LIBRARY */
/*
@@ -283,9 +278,15 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
if (!fields_vars.elements)
{
- Field **field;
- for (field=table->field; *field ; field++)
- fields_vars.push_back(new Item_field(*field));
+ Field_iterator_table_ref field_iterator;
+ field_iterator.set(table_list);
+ for (; !field_iterator.end_of_fields(); field_iterator.next())
+ {
+ Item *item;
+ if (!(item= field_iterator.create_item(thd)))
+ DBUG_RETURN(TRUE);
+ fields_vars.push_back(item->real_item());
+ }
bitmap_set_all(table->write_set);
/*
Let us also prepare SET clause, altough it is probably empty
@@ -477,6 +478,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
thd_proc_info(thd, "reading file");
if (!(error= MY_TEST(read_info.error)))
{
+ table->reset_default_fields();
table->next_number_field=table->found_next_number_field;
if (ignore ||
handle_duplicates == DUP_REPLACE)
@@ -722,7 +724,7 @@ static bool write_execute_load_query_log_event(THD *thd, sql_exchange* ex,
{
if (n++)
query_str.append(", ");
- if (item->type() == Item::FIELD_ITEM)
+ if (item->real_type() == Item::FIELD_ITEM)
append_identifier(thd, &query_str, item->name, strlen(item->name));
else
{
diff --git a/sql/sql_locale.cc b/sql/sql_locale.cc
index c7d21ffd424..d918d5c9cf4 100644
--- a/sql/sql_locale.cc
+++ b/sql/sql_locale.cc
@@ -20,6 +20,7 @@
!! This file is built from my_locale.pl !!
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_locale.h"
diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc
index f13448ca46e..c6c465aa4e2 100644
--- a/sql/sql_manager.cc
+++ b/sql/sql_manager.cc
@@ -21,6 +21,7 @@
* o Berkeley DB: removing unneeded log files.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_manager.h"
#include "unireg.h" // REQUIRED: for other includes
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 5af700b6917..38cf5964c68 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -15,7 +15,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#define MYSQL_LEX 1
-#include "my_global.h"
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_parse.h" // sql_kill, *_precheck, *_prepare
@@ -377,6 +377,7 @@ void init_update_queries(void)
*/
sql_command_flags[SQLCOM_SET_OPTION]= CF_REEXECUTION_FRAGILE |
CF_AUTO_COMMIT_TRANS |
+ CF_CAN_GENERATE_ROW_EVENTS |
CF_OPTIMIZER_TRACE; // (1)
// (1) so that subquery is traced when doing "DO @var := (subquery)"
sql_command_flags[SQLCOM_DO]= CF_REEXECUTION_FRAGILE |
@@ -438,21 +439,15 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_REVOKE]= CF_CHANGES_DATA;
sql_command_flags[SQLCOM_REVOKE_ROLE]= CF_CHANGES_DATA;
sql_command_flags[SQLCOM_OPTIMIZE]= CF_CHANGES_DATA;
- /*
- @todo SQLCOM_CREATE_FUNCTION should have CF_AUTO_COMMIT_TRANS
- set. this currently is binlogged *before* the transaction if
- executed inside a transaction because it does not have an implicit
- pre-commit and is written to the statement cache. /Sven
- */
- sql_command_flags[SQLCOM_CREATE_FUNCTION]= CF_CHANGES_DATA;
+ sql_command_flags[SQLCOM_CREATE_FUNCTION]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_CREATE_PROCEDURE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_CREATE_SPFUNCTION]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_DROP_PROCEDURE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_DROP_FUNCTION]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_ALTER_PROCEDURE]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_ALTER_FUNCTION]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
- sql_command_flags[SQLCOM_INSTALL_PLUGIN]= CF_CHANGES_DATA;
- sql_command_flags[SQLCOM_UNINSTALL_PLUGIN]= CF_CHANGES_DATA;
+ sql_command_flags[SQLCOM_INSTALL_PLUGIN]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
+ sql_command_flags[SQLCOM_UNINSTALL_PLUGIN]= CF_CHANGES_DATA | CF_AUTO_COMMIT_TRANS;
/*
The following is used to preserver CF_ROW_COUNT during the
@@ -498,15 +493,12 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_RENAME_USER]|= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_CREATE_ROLE]|= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_DROP_ROLE]|= CF_AUTO_COMMIT_TRANS;
- sql_command_flags[SQLCOM_REVOKE_ALL]= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_REVOKE]|= CF_AUTO_COMMIT_TRANS;
+ sql_command_flags[SQLCOM_REVOKE_ALL]= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_REVOKE_ROLE]|= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_GRANT]|= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_GRANT_ROLE]|= CF_AUTO_COMMIT_TRANS;
- sql_command_flags[SQLCOM_ASSIGN_TO_KEYCACHE]= CF_AUTO_COMMIT_TRANS;
- sql_command_flags[SQLCOM_PRELOAD_KEYS]= CF_AUTO_COMMIT_TRANS;
-
sql_command_flags[SQLCOM_FLUSH]= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_RESET]= CF_AUTO_COMMIT_TRANS;
sql_command_flags[SQLCOM_CREATE_SERVER]= CF_AUTO_COMMIT_TRANS;
@@ -1953,6 +1945,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
}
MYSQL_COMMAND_DONE(res);
}
+ DEBUG_SYNC(thd,"dispatch_command_end");
/* Check that some variables are reset properly */
DBUG_ASSERT(thd->abort_on_warning == 0);
@@ -3392,7 +3385,6 @@ end_with_restore_list:
break;
}
case SQLCOM_CREATE_INDEX:
- /* Fall through */
case SQLCOM_DROP_INDEX:
/*
CREATE INDEX and DROP INDEX are implemented by calling ALTER
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 2b9ba2d00c4..b307c60d317 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -47,6 +47,7 @@
/* Some general useful functions */
#define MYSQL_LEX 1
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_partition.h"
@@ -55,7 +56,6 @@
#include "sql_cache.h" // query_cache_invalidate3
#include "lock.h" // mysql_lock_remove
#include "sql_show.h" // append_identifier
-#include <errno.h>
#include <m_ctype.h>
#include "my_md5.h"
#include "transaction.h"
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 4da4fcf21b0..d1bc36590b6 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -15,7 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#include "sql_plugin.h"
+#include "sql_plugin.h" // Includes my_global.h
#include "sql_priv.h" // SHOW_MY_BOOL
#include "unireg.h"
#include "sql_class.h" // set_var.h: THD
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 5c67a4c45a7..c32f3f66813 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -84,7 +84,7 @@ When one supplies long data for a placeholder:
at statement execute.
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_class.h" // set_var.h: THD
diff --git a/sql/sql_priv.h b/sql/sql_priv.h
index 9578c2fe8df..b6fb684d6fc 100644
--- a/sql/sql_priv.h
+++ b/sql/sql_priv.h
@@ -1,5 +1,5 @@
-/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
- Copyright (c) 2010, 2013, Monty Program Ab.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, Monty Program Ab.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -60,6 +60,33 @@
(Old), (New)); \
} while(0)
+
+/*
+ Generates a warning that a feature is deprecated and there is no replacement.
+
+ Using it as
+
+ WARN_DEPRECATED_NO_REPLACEMENT(thd, "BAD");
+
+ Will result in a warning
+
+ "'BAD' is deprecated and will be removed in a future release."
+
+ Note that in macro arguments BAD is not quoted.
+*/
+
+#define WARN_DEPRECATED_NO_REPLACEMENT(Thd,Old) \
+ do { \
+ if (((THD *) Thd) != NULL) \
+ push_warning_printf(((THD *) Thd), Sql_condition::WARN_LEVEL_WARN, \
+ ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT, \
+ ER(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT), \
+ (Old)); \
+ else \
+ sql_print_warning("'%s' is deprecated and will be removed " \
+ "in a future release.", (Old)); \
+ } while(0)
+
/*************************************************************************/
#endif
@@ -155,41 +182,6 @@
#define OPTION_ALLOW_BATCH (1ULL << 36) // THD, intern (slave)
#define OPTION_SKIP_REPLICATION (1ULL << 37) // THD, user
-/*
- Check how many bytes are available on buffer.
-
- @param buf_start Pointer to buffer start.
- @param buf_current Pointer to the current position on buffer.
- @param buf_len Buffer length.
-
- @return Number of bytes available on event buffer.
-*/
-template <class T> T available_buffer(const char* buf_start,
- const char* buf_current,
- T buf_len)
-{
- return buf_len - (buf_current - buf_start);
-}
-
-/*
- Check if jump value is within buffer limits.
-
- @param jump Number of positions we want to advance.
- @param buf_start Pointer to buffer start
- @param buf_current Pointer to the current position on buffer.
- @param buf_len Buffer length.
-
- @return True If jump value is within buffer limits.
- False Otherwise.
-*/
-template <class T> bool valid_buffer_range(T jump,
- const char* buf_start,
- const char* buf_current,
- T buf_len)
-{
- return (jump <= available_buffer(buf_start, buf_current, buf_len));
-}
-
/* The rest of the file is included in the server only */
#ifndef MYSQL_CLIENT
diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc
index dc7aacb3d94..26d515842ed 100644
--- a/sql/sql_profile.cc
+++ b/sql/sql_profile.cc
@@ -29,11 +29,11 @@
- "profiling_history_size", integer, session + global, "Num queries stored?"
*/
-
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_profile.h"
-#include "my_sys.h"
+#include <my_sys.h>
#include "sql_show.h" // schema_table_store_record
#include "sql_class.h" // THD
diff --git a/sql/sql_reload.cc b/sql/sql_reload.cc
index 1754ffce220..ca632f4a2fb 100644
--- a/sql/sql_reload.cc
+++ b/sql/sql_reload.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_reload.h"
#include "sql_priv.h"
#include "mysqld.h" // select_errors
diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc
index 897aa183b60..2c17898f07c 100644
--- a/sql/sql_rename.cc
+++ b/sql/sql_rename.cc
@@ -19,6 +19,7 @@
Atomic rename of table; RENAME TABLE t1 to t2, tmp to t1 [,...]
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_rename.h"
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index d9c88983797..3e3adb2c5b4 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -14,6 +14,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_base.h"
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 64d2e912815..97692463310 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -29,6 +29,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_select.h"
@@ -632,7 +633,7 @@ inline int setup_without_group(THD *thd, Item **ref_pointer_array,
res= setup_conds(thd, tables, leaves, conds);
if (thd->lex->current_select->first_cond_optimization)
{
- if (!res && *conds)
+ if (!res && *conds && ! thd->lex->current_select->merged_into)
(*reserved)= (*conds)->exists2in_reserved_items();
else
(*reserved)= 0;
@@ -3845,6 +3846,8 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
if (join->conds && const_count)
{
Item* &conds= join->conds;
+ COND_EQUAL *orig_cond_equal = join->cond_equal;
+
conds->update_used_tables();
conds= remove_eq_conds(join->thd, conds, &join->cond_value);
if (conds && conds->type() == Item::COND_ITEM &&
@@ -3871,7 +3874,21 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
join->cond_equal->current_level.empty();
join->cond_equal->current_level.push_back((Item_equal*) conds);
}
- }
+ }
+
+ if (orig_cond_equal != join->cond_equal)
+ {
+ /*
+ If join->cond_equal has changed all references to it from COND_EQUAL
+ objects associated with ON expressions must be updated.
+ */
+ for (JOIN_TAB **pos=stat_vector+const_count ; (s= *pos) ; pos++)
+ {
+ if (*s->on_expr_ref && s->cond_equal &&
+ s->cond_equal->upper_levels == orig_cond_equal)
+ s->cond_equal->upper_levels= join->cond_equal;
+ }
+ }
}
/* Calc how many (possible) matched records in each table */
@@ -4424,8 +4441,7 @@ add_key_field(JOIN *join,
if (is_const)
{
stat[0].const_keys.merge(possible_keys);
- if (possible_keys.is_clear_all())
- bitmap_set_bit(&field->table->cond_set, field->field_index);
+ bitmap_set_bit(&field->table->cond_set, field->field_index);
}
else if (!eq_func)
{
@@ -4443,6 +4459,32 @@ add_key_field(JOIN *join,
if (!eq_func) // eq_func is NEVER true when num_values > 1
return;
+ if ((*value)->cmp_type() == TIME_RESULT &&
+ field->cmp_type() != TIME_RESULT)
+ return;
+
+ /*
+ Note, for ITEM/ENUM columns:
+ - field->cmp_type() returns INT_RESULT
+ - field->result_type() returns STRING_RESULT
+ - field->type() returns MYSQL_TYPE_STRING
+
+ Using field->real_type() to detect ENUM/SET,
+ as they need a special handling:
+ - Conditions between a ENUM/SET filter and a TIME expression
+ cannot be optimized. They were filtered out in the previous if block.
+ - It's Ok to use ref access for an ENUM/SET field compared to an
+ INT/REAL/DECIMAL expression.
+ - It's Ok to use ref for an ENUM/SET field compared to a STRING
+ expression if the collation of the field and the collation of
+ the condition match.
+ */
+ if ((field->real_type() == MYSQL_TYPE_ENUM ||
+ field->real_type() == MYSQL_TYPE_SET) &&
+ (*value)->cmp_type () == STRING_RESULT &&
+ field->charset() != cond->compare_collation())
+ return;
+
/*
We can't use indexes when comparing a string index to a
number or two strings if the effective collation
@@ -7217,17 +7259,20 @@ double table_multi_eq_cond_selectivity(JOIN *join, uint idx, JOIN_TAB *s,
uint i;
KEYUSE *keyuse= pos->key;
uint key= keyuse->key;
-
for (i= 0; i < keyparts; i++)
{
+ if (i > 0)
+ keyuse+= ref_keyuse_steps[i-1];
uint fldno;
if (is_hash_join_key_no(key))
fldno= keyuse->keypart;
else
- fldno= table->key_info[key].key_part[keyparts-1].fieldnr - 1;
+ fldno= table->key_info[key].key_part[i].fieldnr - 1;
if (fld->field_index == fldno)
break;
}
+ keyuse= pos->key;
+
if (i == keyparts)
{
/*
@@ -7390,6 +7435,7 @@ double table_cond_selectivity(JOIN *join, uint idx, JOIN_TAB *s,
already taken into account in table->cond_selectivity.
*/
keyuse= pos->key;
+ keyparts=0;
while (keyuse->table == table && keyuse->key == key)
{
if (!(keyuse->used_tables & (rem_tables | table->map)))
@@ -8876,6 +8922,9 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j,
}
else
j->type=JT_EQ_REF;
+
+ j->read_record.unlock_row= (j->type == JT_EQ_REF)?
+ join_read_key_unlock_row : rr_unlock_row;
DBUG_RETURN(0);
}
@@ -10579,6 +10628,19 @@ uint check_join_cache_usage(JOIN_TAB *tab,
}
/*
+ Don't use BKA for materialized tables. We could actually have a
+ meaningful use of BKA when linked join buffers are used.
+
+ The problem is, the temp.table is not filled (actually not even opened
+ properly) yet, and this doesn't let us call
+ handler->multi_range_read_info(). It is possible to come up with
+ estimates, etc. without acessing the table, but it seems not to worth the
+ effort now.
+ */
+ if (tab->table->pos_in_table_list->is_materialized_derived())
+ no_bka_cache= true;
+
+ /*
Don't use join buffering if we're dictated not to by no_jbuf_after
(This is not meaningfully used currently)
*/
@@ -10643,8 +10705,8 @@ uint check_join_cache_usage(JOIN_TAB *tab,
goto no_join_cache;
if (tab->ref.is_access_triggered())
goto no_join_cache;
-
- if (!tab->is_ref_for_hash_join())
+
+ if (!tab->is_ref_for_hash_join() && !no_bka_cache)
{
flags= HA_MRR_NO_NULL_ENDPOINTS | HA_MRR_SINGLE_POINT;
if (tab->table->covering_keys.is_set(tab->ref.key))
@@ -13207,10 +13269,18 @@ Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
if (upper)
{
TABLE_LIST *native_sjm= embedding_sjm(item_equal->context_field);
- if (item_const && upper->get_const())
+ Item *upper_const= upper->get_const();
+ if (item_const && upper_const)
{
- /* Upper item also has "field_item=const". Don't produce equality here */
- item= 0;
+ /*
+ Upper item also has "field_item=const".
+ Don't produce equality if const is equal to item_const.
+ */
+ Item_func_eq *func= new Item_func_eq(item_const, upper_const);
+ func->set_cmp_func();
+ func->quick_fix_field();
+ if (func->val_int())
+ item= 0;
}
else
{
@@ -21251,7 +21321,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
order_item_type == Item::REF_ITEM)
{
from_field= find_field_in_tables(thd, (Item_ident*) order_item, tables,
- NULL, &view_ref, IGNORE_ERRORS, TRUE,
+ NULL, &view_ref, IGNORE_ERRORS, FALSE,
FALSE);
if (!from_field)
from_field= (Field*) not_found_field;
diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc
index 637ee78e314..2b0576ffba9 100644
--- a/sql/sql_servers.cc
+++ b/sql/sql_servers.cc
@@ -33,6 +33,7 @@
currently running transactions etc will not be disrupted.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_servers.h"
#include "unireg.h"
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 0541cbcc300..09be25c327d 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -17,7 +17,7 @@
/* Function with list databases, tables or fields */
-#include "sql_plugin.h"
+#include "sql_plugin.h" // Includes my_global.h
#include "sql_priv.h"
#include "unireg.h"
#include "sql_acl.h" // fill_schema_*_privileges
@@ -3135,12 +3135,11 @@ static bool show_status_array(THD *thd, const char *wild,
char *value=var->value;
const char *pos, *end; // We assign a lot of const's
- mysql_mutex_lock(&LOCK_global_system_variables);
-
if (show_type == SHOW_SYS)
{
sys_var *var= ((sys_var *) value);
show_type= var->show_type();
+ mysql_mutex_lock(&LOCK_global_system_variables);
value= (char*) var->value_ptr(thd, scope, &null_lex_str);
charset= var->charset(thd);
}
@@ -3233,7 +3232,8 @@ static bool show_status_array(THD *thd, const char *wild,
table->field[1]->store(pos, (uint32) (end - pos), charset);
table->field[1]->set_notnull();
- mysql_mutex_unlock(&LOCK_global_system_variables);
+ if (var->type == SHOW_SYS)
+ mysql_mutex_unlock(&LOCK_global_system_variables);
if (schema_table_store_record(thd, table))
{
@@ -5008,13 +5008,10 @@ err:
const char *error= thd->is_error() ? thd->get_stmt_da()->message() : "";
table->field[20]->store(error, strlen(error), cs);
- if (thd->is_error())
- {
- push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
- thd->get_stmt_da()->sql_errno(),
- thd->get_stmt_da()->message());
- thd->clear_error();
- }
+ push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
+ thd->get_stmt_da()->sql_errno(),
+ thd->get_stmt_da()->message());
+ thd->clear_error();
}
DBUG_RETURN(schema_table_store_record(thd, table));
@@ -5175,10 +5172,9 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
I.e. we are in SELECT FROM INFORMATION_SCHEMA.COLUMS
rather than in SHOW COLUMNS
*/
- if (thd->is_error())
- push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
- thd->get_stmt_da()->sql_errno(),
- thd->get_stmt_da()->message());
+ push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
+ thd->get_stmt_da()->sql_errno(),
+ thd->get_stmt_da()->message());
thd->clear_error();
res= 0;
}
diff --git a/sql/sql_signal.cc b/sql/sql_signal.cc
index a0a47b77591..374a24f75e5 100644
--- a/sql/sql_signal.cc
+++ b/sql/sql_signal.cc
@@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#include <my_global.h>
#include "sql_priv.h"
#include "sp_head.h"
#include "sp_pcontext.h"
diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc
index 9acd3d98322..d368145ca73 100644
--- a/sql/sql_statistics.cc
+++ b/sql/sql_statistics.cc
@@ -23,6 +23,7 @@
@{
*/
+#include <my_global.h>
#include "sql_base.h"
#include "key.h"
#include "sql_statistics.h"
@@ -2467,6 +2468,8 @@ int collect_statistics_for_table(THD *thd, TABLE *table)
table_field->collected_stats->init(thd, table_field);
}
+ restore_record(table, s->default_values);
+
/* Perform a full table scan to collect statistics on 'table's columns */
if (!(rc= file->ha_rnd_init(TRUE)))
{
@@ -3501,7 +3504,12 @@ double get_column_range_cardinality(Field *field,
!(range_flag & NEAR_MIN);
if (col_non_nulls < 1)
- res= 0;
+ {
+ if (nulls_incl)
+ res= col_nulls;
+ else
+ res= 0;
+ }
else if (min_endp && max_endp && min_endp->length == max_endp->length &&
!memcmp(min_endp->key, max_endp->key, min_endp->length))
{
@@ -3514,6 +3522,15 @@ double get_column_range_cardinality(Field *field,
{
double avg_frequency= col_stats->get_avg_frequency();
res= avg_frequency;
+ /*
+ psergey-todo: what does check for min_value, max_value mean?
+ min/max_value are set to NULL in alloc_statistics_for_table() and
+ alloc_statistics_for_table_share(). Both functions will immediately
+ call create_min_max_statistical_fields_for_table and
+ create_min_max_statistical_fields_for_table_share() respectively,
+ which will set min/max_value to be valid pointers, unless OOM
+ occurs.
+ */
if (avg_frequency > 1.0 + 0.000001 &&
col_stats->min_value && col_stats->max_value)
{
@@ -3521,7 +3538,7 @@ double get_column_range_cardinality(Field *field,
if (hist->is_available())
{
store_key_image_to_rec(field, (uchar *) min_endp->key,
- min_endp->length);
+ field->key_length());
double pos= field->pos_in_interval(col_stats->min_value,
col_stats->max_value);
res= col_non_nulls *
@@ -3529,6 +3546,11 @@ double get_column_range_cardinality(Field *field,
avg_frequency / col_non_nulls);
}
}
+ else if (avg_frequency == 0.0)
+ {
+ /* This actually means there is no statistics data */
+ res= tab_records;
+ }
}
}
else
@@ -3540,7 +3562,7 @@ double get_column_range_cardinality(Field *field,
if (min_endp && !(field->null_ptr && min_endp->key[0]))
{
store_key_image_to_rec(field, (uchar *) min_endp->key,
- min_endp->length);
+ field->key_length());
min_mp_pos= field->pos_in_interval(col_stats->min_value,
col_stats->max_value);
}
@@ -3549,7 +3571,7 @@ double get_column_range_cardinality(Field *field,
if (max_endp)
{
store_key_image_to_rec(field, (uchar *) max_endp->key,
- max_endp->length);
+ field->key_length());
max_mp_pos= field->pos_in_interval(col_stats->min_value,
col_stats->max_value);
}
diff --git a/sql/sql_statistics.h b/sql/sql_statistics.h
index c399951b828..46e5cef22d1 100644
--- a/sql/sql_statistics.h
+++ b/sql/sql_statistics.h
@@ -280,7 +280,14 @@ public:
};
-/* Statistical data on a column */
+/*
+ Statistical data on a column
+
+ Note: objects of this class may be "empty", where they have almost all fields
+ as zeros, for example, get_avg_frequency() will return 0.
+
+ objects are allocated in alloc_statistics_for_table[_share].
+*/
class Column_statistics
{
@@ -296,7 +303,8 @@ public:
are available for the column
*/
uint32 column_stat_nulls;
-
+
+ /* For the below two, see comments in get_column_range_cardinality() */
/* Minimum value for the column */
Field *min_value;
/* Maximum value for the column */
diff --git a/sql/sql_string.h b/sql/sql_string.h
index f6f0344e2f1..dff2a457044 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -255,7 +255,9 @@ public:
*/
inline void chop()
{
- Ptr[str_length--]= '\0';
+ str_length--;
+ Ptr[str_length]= '\0';
+ DBUG_ASSERT(strlen(Ptr) == str_length);
}
inline void free()
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index b991215d30a..c29394ed88d 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -18,6 +18,7 @@
/* drop and alter of tables */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "debug_sync.h"
@@ -3025,10 +3026,6 @@ int prepare_create_field(Create_field *sql_field,
(sql_field->decimals << FIELDFLAG_DEC_SHIFT));
break;
}
- if (sql_field->flags & NOT_NULL_FLAG)
- DBUG_PRINT("info", ("1"));
- if (sql_field->vcol_info)
- DBUG_PRINT("info", ("2"));
if (!(sql_field->flags & NOT_NULL_FLAG) ||
(sql_field->vcol_info)) /* Make virtual columns allow NULL values */
sql_field->pack_flag|= FIELDFLAG_MAYBE_NULL;
@@ -8713,6 +8710,9 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
*/
altered_table->column_bitmaps_set_no_signal(&altered_table->s->all_set,
&altered_table->s->all_set);
+ restore_record(altered_table, s->default_values); // Create empty record
+ if (altered_table->default_field && altered_table->update_default_fields())
+ goto err_new_table_cleanup;
// Ask storage engine whether to use copy or in-place
enum_alter_inplace_result inplace_supported=
@@ -9338,14 +9338,14 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
to->use_all_columns();
to->mark_virtual_columns_for_write(TRUE);
if (init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1, 1, FALSE))
- {
- error= 1;
goto err;
- }
+
if (ignore && !alter_ctx->fk_error_if_delete_row)
to->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
thd->get_stmt_da()->reset_current_row_for_warning();
restore_record(to, s->default_values); // Create empty record
+ if (to->default_field && to->update_default_fields())
+ goto err;
thd->progress.max_counter= from->file->records();
time_to_report_progress= MY_HOW_OFTEN_TO_WRITE/10;
@@ -9388,11 +9388,6 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
prev_insert_id= to->file->next_insert_id;
if (to->vfield)
update_virtual_fields(thd, to, VCOL_UPDATE_FOR_WRITE);
- if (to->default_field && to->update_default_fields())
- {
- error= 1;
- break;
- }
if (thd->is_error())
{
error= 1;
diff --git a/sql/sql_tablespace.cc b/sql/sql_tablespace.cc
index 48eeb94f7c9..2991b16350c 100644
--- a/sql/sql_tablespace.cc
+++ b/sql/sql_tablespace.cc
@@ -15,6 +15,7 @@
/* drop and alter of tablespaces */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_tablespace.h"
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 60e9b2cc54c..8992ff24a1e 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -16,7 +16,7 @@
/* Write some debug info */
-
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_test.h"
diff --git a/sql/sql_time.cc b/sql/sql_time.cc
index cc824298bc5..ca689d55a2b 100644
--- a/sql/sql_time.cc
+++ b/sql/sql_time.cc
@@ -17,6 +17,7 @@
/* Functions to handle date and time */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED by other includes
#include "sql_time.h"
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index 443a82a9df2..157e320d361 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -16,7 +16,7 @@
#define MYSQL_LEX 1
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sp_head.h"
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index fdc932957b2..bd5732c3696 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -31,6 +31,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_base.h" // close_mysql_tables
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 490123b644b..be2a73dabb7 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -20,7 +20,7 @@
UNION's were introduced by Monty and Sinisa <sinisa@mysql.com>
*/
-
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_union.h"
@@ -433,18 +433,6 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
can_skip_order_by= is_union_select && !(sl->braces && sl->explicit_limit);
- /*
- Remove all references from the select_lex_units to the subqueries that
- are inside the ORDER BY clause.
- */
- if (can_skip_order_by)
- {
- for (ORDER *ord= (ORDER *)sl->order_list.first; ord; ord= ord->next)
- {
- (*ord->item)->walk(&Item::eliminate_subselect_processor, FALSE, NULL);
- }
- }
-
saved_error= join->prepare(&sl->ref_pointer_array,
sl->table_list.first,
sl->with_wild,
@@ -468,6 +456,18 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
if (saved_error || (saved_error= thd_arg->is_fatal_error))
goto err;
/*
+ Remove all references from the select_lex_units to the subqueries that
+ are inside the ORDER BY clause.
+ */
+ if (can_skip_order_by)
+ {
+ for (ORDER *ord= (ORDER *)sl->order_list.first; ord; ord= ord->next)
+ {
+ (*ord->item)->walk(&Item::eliminate_subselect_processor, FALSE, NULL);
+ }
+ }
+
+ /*
Use items list of underlaid select for derived tables to preserve
information about fields lengths and exact types
*/
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index fa5b6968795..b81caea00bc 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -20,7 +20,7 @@
Multi-table updates were introduced by Sinisa & Monty
*/
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_update.h"
@@ -604,7 +604,10 @@ int mysql_update(THD *thd,
if (query_plan.index == MAX_KEY || (select && select->quick))
{
if (init_read_record(&info, thd, table, select, 0, 1, FALSE))
+ {
+ close_cached_file(&tempfile);
goto err;
+ }
}
else
init_read_record_idx(&info, thd, table, 1, query_plan.index, reverse);
@@ -719,6 +722,8 @@ int mysql_update(THD *thd,
table->prepare_for_position();
explain= thd->lex->explain->get_upd_del_plan();
+ table->reset_default_fields();
+
/*
We can use compare_record() to optimize away updates if
the table handler is returning all columns OR if
@@ -1708,6 +1713,7 @@ int multi_update::prepare(List<Item> &not_used_values,
table->covering_keys.clear_all();
table->pos_in_table_list= tl;
table->prepare_triggers_for_update_stmt_or_event();
+ table->reset_default_fields();
}
}
@@ -2062,8 +2068,7 @@ int multi_update::send_data(List<Item> &not_used_values)
store_record(table,record[1]);
if (fill_record_n_invoke_before_triggers(thd, table, *fields_for_table[offset],
*values_for_table[offset], 0,
- TRG_EVENT_UPDATE) ||
- (table->default_field && table->update_default_fields()))
+ TRG_EVENT_UPDATE))
DBUG_RETURN(1);
/*
@@ -2075,6 +2080,10 @@ int multi_update::send_data(List<Item> &not_used_values)
if (!can_compare_record || compare_record(table))
{
int error;
+
+ if (table->default_field && table->update_default_fields())
+ DBUG_RETURN(1);
+
if ((error= cur_table->view_check_option(thd, ignore)) !=
VIEW_CHECK_OK)
{
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 07169f299d7..6a81301a6d9 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -16,7 +16,7 @@
*/
#define MYSQL_LEX 1
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h"
#include "sql_view.h"
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index d11ac485c06..ce4034d62a5 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -33,6 +33,7 @@
#define Lex (thd->lex)
#define Select Lex->current_select
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "sql_parse.h" /* comp_*_creator */
@@ -871,6 +872,7 @@ static bool sp_create_assignment_instr(THD *thd, bool no_lookahead)
LEX_STRING lex_str;
LEX_STRING *lex_str_ptr;
LEX_SYMBOL symbol;
+ LEX_TYPE lex_type;
Table_ident *table;
char *simple_string;
Item *item;
@@ -1639,13 +1641,15 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%type <string>
text_string hex_or_bin_String opt_gconcat_separator
+%type <lex_type> field_def
+
%type <num>
type type_with_opt_collate int_type real_type order_dir lock_option
udf_type opt_if_exists opt_local opt_table_options table_options
table_option opt_if_not_exists create_or_replace opt_no_write_to_binlog
opt_temporary all_or_any opt_distinct
opt_ignore_leaves fulltext_options spatial_type union_option
- field_def opt_not opt_union_order_or_limit
+ opt_not opt_union_order_or_limit
union_opt select_derived_init transaction_access_mode_types
opt_natural_language_mode opt_query_expansion
opt_ev_status opt_ev_on_completion ev_on_completion opt_ev_comment
@@ -6009,11 +6013,11 @@ field_spec:
field_def
{
LEX *lex=Lex;
- if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3,
- lex->length,lex->dec,lex->type,
+ if (add_field_to_list(lex->thd, &$1, $3.type,
+ $3.length, $3.dec, lex->type,
lex->default_value, lex->on_update_value,
&lex->comment,
- lex->change,&lex->interval_list,lex->charset,
+ lex->change, &lex->interval_list, $3.charset,
lex->uint_geom_type,
lex->vcol_info, lex->option_list))
MYSQL_YYABORT;
@@ -6021,13 +6025,15 @@ field_spec:
;
field_def:
- type opt_attribute {}
- | type opt_generated_always AS '(' virtual_column_func ')'
- vcol_opt_specifier
- vcol_opt_attribute
+ type opt_attribute
+ { $$.set($1, Lex->length, Lex->dec, Lex->charset); }
+ | type opt_generated_always AS
+ { $<lex_type>$.set($1, Lex->length, Lex->dec, Lex->charset); }
+ '(' virtual_column_func ')' vcol_opt_specifier vcol_opt_attribute
{
- $$= (enum enum_field_types)MYSQL_TYPE_VIRTUAL;
- Lex->vcol_info->set_field_type((enum enum_field_types) $1);
+ $$= $<lex_type>4;
+ Lex->vcol_info->set_field_type($$.type);
+ $$.type= (enum enum_field_types)MYSQL_TYPE_VIRTUAL;
}
;
@@ -7527,11 +7533,11 @@ alter_list_item:
{
LEX *lex=Lex;
if (add_field_to_list(lex->thd,&$4,
- (enum enum_field_types) $6,
- lex->length,lex->dec,lex->type,
+ $6.type,
+ $6.length, $6.dec, lex->type,
lex->default_value, lex->on_update_value,
&lex->comment,
- $4.str, &lex->interval_list, lex->charset,
+ $4.str, &lex->interval_list, $6.charset,
lex->uint_geom_type,
lex->vcol_info, lex->option_list))
MYSQL_YYABORT;
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index a7d58431704..04e1d94d194 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -31,7 +31,7 @@
(for example in storage/myisam/ha_myisam.cc) !
*/
-#include "sql_plugin.h"
+#include "sql_plugin.h" // Includes my_global.h
#include "sql_priv.h"
#include "sql_class.h" // set_var.h: THD
#include "sys_vars.h"
@@ -2503,7 +2503,8 @@ static Sys_var_ulong Sys_thread_concurrency(
"the desired number of threads that should be run at the same time."
"This variable has no effect, and is deprecated. "
"It will be removed in a future release.",
- READ_ONLY GLOBAL_VAR(concurrency), CMD_LINE(REQUIRED_ARG),
+ READ_ONLY GLOBAL_VAR(concurrency),
+ CMD_LINE(REQUIRED_ARG, OPT_THREAD_CONCURRENCY),
VALID_RANGE(1, 512), DEFAULT(DEFAULT_CONCURRENCY), BLOCK_SIZE(1),
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
DEPRECATED(""));
diff --git a/sql/table.cc b/sql/table.cc
index 6ac45445136..0e616bea6ef 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -17,7 +17,7 @@
/* Some general useful functions */
-#include "my_global.h" /* NO_EMBEDDED_ACCESS_CHECKS */
+#include <my_global.h> /* NO_EMBEDDED_ACCESS_CHECKS */
#include "sql_priv.h"
#include "unireg.h" // REQUIRED: for other includes
#include "table.h"
@@ -946,10 +946,10 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
size_t length= *extra2++;
if (!length)
{
- if (extra2 + 258 >= e2end)
+ if (extra2 + 2 >= e2end)
goto err;
length= uint2korr(extra2);
- extra2+=2;
+ extra2+= 2;
if (length < 256)
goto err;
}
@@ -1666,10 +1666,44 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (key_parts)
{
uint add_first_key_parts= 0;
- uint primary_key=(uint) (find_type(primary_key_name, &share->keynames,
- FIND_TYPE_NO_PREFIX) - 1);
longlong ha_option= handler_file->ha_table_flags();
keyinfo= share->key_info;
+ uint primary_key= my_strcasecmp(system_charset_info, share->keynames.type_names[0],
+ primary_key_name) ? MAX_KEY : 0;
+
+ if (primary_key >= MAX_KEY && keyinfo->flags & HA_NOSAME)
+ {
+ /*
+ If the UNIQUE key doesn't have NULL columns and is not a part key
+ declare this as a primary key.
+ */
+ primary_key= 0;
+ key_part= keyinfo->key_part;
+ for (i=0 ; i < keyinfo->user_defined_key_parts ;i++)
+ {
+ DBUG_ASSERT(key_part[i].fieldnr > 0);
+ // Table field corresponding to the i'th key part.
+ Field *table_field= share->field[key_part[i].fieldnr - 1];
+
+ /*
+ If the key column is of NOT NULL BLOB type, then it
+ will definitly have key prefix. And if key part prefix size
+ is equal to the BLOB column max size, then we can promote
+ it to primary key.
+ */
+ if (!table_field->real_maybe_null() &&
+ table_field->type() == MYSQL_TYPE_BLOB &&
+ table_field->field_length == key_part[i].length)
+ continue;
+
+ if (table_field->real_maybe_null() ||
+ table_field->key_length() != key_part[i].length)
+ {
+ primary_key= MAX_KEY; // Can't be used
+ break;
+ }
+ }
+ }
if (share->use_ext_keys)
{
@@ -1764,40 +1798,6 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
if (share->key_info[key].flags & HA_FULLTEXT)
share->key_info[key].algorithm= HA_KEY_ALG_FULLTEXT;
- if (primary_key >= MAX_KEY && (keyinfo->flags & HA_NOSAME))
- {
- /*
- If the UNIQUE key doesn't have NULL columns and is not a part key
- declare this as a primary key.
- */
- primary_key=key;
- key_part= keyinfo->key_part;
- for (i=0 ; i < keyinfo->user_defined_key_parts ;i++)
- {
- DBUG_ASSERT(key_part[i].fieldnr > 0);
- // Table field corresponding to the i'th key part.
- Field *table_field= share->field[key_part[i].fieldnr - 1];
-
- /*
- If the key column is of NOT NULL BLOB type, then it
- will definitly have key prefix. And if key part prefix size
- is equal to the BLOB column max size, then we can promote
- it to primary key.
- */
- if (!table_field->real_maybe_null() &&
- table_field->type() == MYSQL_TYPE_BLOB &&
- table_field->field_length == key_part[i].length)
- continue;
-
- if (table_field->real_maybe_null() ||
- table_field->key_length() != key_part[i].length)
- {
- primary_key= MAX_KEY; // Can't be used
- break;
- }
- }
- }
-
key_part= keyinfo->key_part;
uint key_parts= share->use_ext_keys ? keyinfo->ext_key_parts :
keyinfo->user_defined_key_parts;
@@ -6067,11 +6067,19 @@ bool TABLE::alloc_keys(uint key_count)
}
+/*
+ Given a field, fill key_part_info
+ @param keyinfo Key to where key part is added (we will
+ only adjust key_length there)
+ @param field IN Table field for which key part is needed
+ @param key_part_info OUT key part structure to be filled.
+ @param fieldnr Field's number.
+*/
void TABLE::create_key_part_by_field(KEY *keyinfo,
KEY_PART_INFO *key_part_info,
Field *field, uint fieldnr)
-{
- field->flags|= PART_KEY_FLAG;
+{
+ DBUG_ASSERT(field->field_index + 1 == (int)fieldnr);
key_part_info->null_bit= field->null_bit;
key_part_info->null_offset= (uint) (field->null_ptr -
(uchar*) record[0]);
@@ -6228,6 +6236,7 @@ bool TABLE::add_tmp_key(uint key, uint key_parts,
(*reg_field)->key_start.set_bit(key);
(*reg_field)->part_of_key.set_bit(key);
create_key_part_by_field(keyinfo, key_part_info, *reg_field, fld_idx+1);
+ (*reg_field)->flags|= PART_KEY_FLAG;
key_start= FALSE;
key_part_info++;
}
@@ -6727,7 +6736,7 @@ int TABLE::update_default_fields()
DBUG_ASSERT(default_field);
- /* Iterate over virtual fields in the table */
+ /* Iterate over fields with default functions in the table */
for (dfield_ptr= default_field; *dfield_ptr; dfield_ptr++)
{
dfield= (*dfield_ptr);
@@ -6744,12 +6753,16 @@ int TABLE::update_default_fields()
if (res)
DBUG_RETURN(res);
}
- /* Unset the explicit default flag for the next record. */
- dfield->flags&= ~HAS_EXPLICIT_VALUE;
}
DBUG_RETURN(res);
}
+void TABLE::reset_default_fields()
+{
+ if (default_field)
+ for (Field **df= default_field; *df; df++)
+ (*df)->flags&= ~HAS_EXPLICIT_VALUE;
+}
/*
Prepare triggers for INSERT-like statement.
diff --git a/sql/table.h b/sql/table.h
index 69462539a20..ec50a433498 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -1378,6 +1378,7 @@ public:
uint actual_n_key_parts(KEY *keyinfo);
ulong actual_key_flags(KEY *keyinfo);
int update_default_fields();
+ void reset_default_fields();
inline ha_rows stat_records() { return used_stat_records; }
void prepare_triggers_for_insert_stmt_or_event();
diff --git a/sql/thr_malloc.cc b/sql/thr_malloc.cc
index a14ed36837b..9786f1a6942 100644
--- a/sql/thr_malloc.cc
+++ b/sql/thr_malloc.cc
@@ -17,6 +17,7 @@
/* Mallocs for used in threads */
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "thr_malloc.h"
diff --git a/sql/transaction.cc b/sql/transaction.cc
index 223d507a799..18c7aef9f96 100644
--- a/sql/transaction.cc
+++ b/sql/transaction.cc
@@ -18,6 +18,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include "transaction.h"
#include "rpl_handler.h"
diff --git a/sql/uniques.cc b/sql/uniques.cc
index 0990182dbdb..912a38f8927 100644
--- a/sql/uniques.cc
+++ b/sql/uniques.cc
@@ -30,6 +30,7 @@
deletes in disk order.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_sort.h"
diff --git a/sql/unireg.cc b/sql/unireg.cc
index e02420d9468..4087511bc49 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -25,6 +25,7 @@
str is a (long) to record position where 0 is the first position.
*/
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_partition.h" // struct partition_info
@@ -32,7 +33,6 @@
#include "create_options.h"
#include "discover.h"
#include <m_ctype.h>
-#include <assert.h>
#define FCOMP 17 /* Bytes for a packed field */
diff --git a/sql/unireg.h b/sql/unireg.h
index 5f133da674f..2d51aa39fd4 100644
--- a/sql/unireg.h
+++ b/sql/unireg.h
@@ -18,8 +18,7 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "my_global.h" /* ulonglong */
-#include "mysql_version.h" /* FRM_VER */
+#include <mysql_version.h> /* FRM_VER */
/* Extra functions used by unireg library */
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index 6a866491d7c..36471c2a069 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -21,7 +21,7 @@
#pragma implementation // gcc: Class implementation
#endif
-#include "sql_class.h" // SSV
+#include "sql_class.h" // SSV and my_global.h
#include "sql_table.h" // build_table_filename
#include <myisam.h> // T_EXTEND
diff --git a/storage/blackhole/ha_blackhole.cc b/storage/blackhole/ha_blackhole.cc
index 91a2c70cb9f..56d8000d64d 100644
--- a/storage/blackhole/ha_blackhole.cc
+++ b/storage/blackhole/ha_blackhole.cc
@@ -19,6 +19,7 @@
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "ha_blackhole.h"
diff --git a/storage/cassandra/ha_cassandra.cc b/storage/cassandra/ha_cassandra.cc
index 7e2d7efe87d..9b30445fcd2 100644
--- a/storage/cassandra/ha_cassandra.cc
+++ b/storage/cassandra/ha_cassandra.cc
@@ -18,6 +18,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_config.h>
#include <mysql/plugin.h>
#include "ha_cassandra.h"
#include "sql_class.h"
diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt
index 0252091ef80..b0a2e3607ed 100644
--- a/storage/connect/CMakeLists.txt
+++ b/storage/connect/CMakeLists.txt
@@ -23,15 +23,15 @@ array.cpp blkfil.cpp colblk.cpp csort.cpp
filamap.cpp filamdbf.cpp filamfix.cpp filamtxt.cpp filamvct.cpp filamzip.cpp
filter.cpp maputil.cpp myutil.cpp plgdbutl.cpp reldef.cpp tabcol.cpp
tabdos.cpp tabfix.cpp tabfmt.cpp table.cpp tabmul.cpp taboccur.cpp
-tabpivot.cpp tabsys.cpp tabtbl.cpp tabutil.cpp tabvct.cpp tabxcl.cpp
-valblk.cpp value.cpp xindex.cpp xobject.cpp
+tabpivot.cpp tabsys.cpp tabtbl.cpp tabutil.cpp tabvct.cpp tabvir.cpp
+tabxcl.cpp valblk.cpp value.cpp xindex.cpp xobject.cpp
array.h blkfil.h block.h catalog.h checklvl.h colblk.h connect.h csort.h
engmsg.h filamap.h filamdbf.h filamfix.h filamtxt.h filamvct.h filamzip.h
filter.h global.h ha_connect.h inihandl.h maputil.h msgid.h mycat.h myutil.h
os.h osutil.h plgcnx.h plgdbsem.h preparse.h reldef.h resource.h tabcol.h
tabdos.h tabfix.h tabfmt.h tabmul.h taboccur.h tabpivot.h tabsys.h
-tabtbl.h tabutil.h tabvct.h tabxcl.h user_connect.h valblk.h value.h
+tabtbl.h tabutil.h tabvct.h tabvir.h tabxcl.h user_connect.h valblk.h value.h
xindex.h xobject.h xtable.h)
#
diff --git a/storage/connect/array.cpp b/storage/connect/array.cpp
index 9815fbb6be6..a2f537436c9 100644
--- a/storage/connect/array.cpp
+++ b/storage/connect/array.cpp
@@ -25,6 +25,7 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <stdint.h> // for uintprt_h
#endif // !WIN32
/***********************************************************************/
@@ -51,11 +52,6 @@
#endif
/***********************************************************************/
-/* Static variables. */
-/***********************************************************************/
-extern "C" int trace;
-
-/***********************************************************************/
/* DB static external variables. */
/***********************************************************************/
extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
@@ -129,7 +125,7 @@ PARRAY MakeValueArray(PGLOBAL g, PPARM pp)
break;
case TYPE_VOID:
// Integer stored inside pp->Value
- par->AddValue(g, (int)parmp->Value);
+ par->AddValue(g, parmp->Intval);
break;
} // endswitch valtyp
@@ -585,7 +581,7 @@ bool ARRAY::CanBeShort(void)
/***********************************************************************/
int ARRAY::Convert(PGLOBAL g, int k, PVAL vp)
{
- int i;
+ int i, prec = 0;
bool b = FALSE;
PMBV ovblk = Valblk;
PVBLK ovblp = Vblp;
@@ -595,6 +591,7 @@ int ARRAY::Convert(PGLOBAL g, int k, PVAL vp)
switch (Type) {
case TYPE_DOUBLE:
+ prec = 2;
case TYPE_SHORT:
case TYPE_INT:
case TYPE_DATE:
@@ -607,13 +604,13 @@ int ARRAY::Convert(PGLOBAL g, int k, PVAL vp)
Size = Nval;
Nval = 0;
- Vblp = Valblk->Allocate(g, Type, Len, 0, Size);
+ Vblp = Valblk->Allocate(g, Type, Len, prec, Size);
if (!Valblk->GetMemp())
// The error message was built by PlgDBalloc
return TYPE_ERROR;
else
- Value = AllocateValue(g, Type, Len, 0, NULL);
+ Value = AllocateValue(g, Type, Len, prec, NULL);
/*********************************************************************/
/* Converting STRING to DATE can be done according to date format. */
diff --git a/storage/connect/blkfil.cpp b/storage/connect/blkfil.cpp
index c1099261cef..802231b24ec 100644
--- a/storage/connect/blkfil.cpp
+++ b/storage/connect/blkfil.cpp
@@ -39,11 +39,6 @@
#include "array.h" // ARRAY classes dcls
#include "blkfil.h" // Block Filter classes dcls
-/***********************************************************************/
-/* Static variables. */
-/***********************************************************************/
-extern "C" int trace;
-
/* ------------------------ Class BLOCKFILTER ------------------------ */
/***********************************************************************/
diff --git a/storage/connect/colblk.cpp b/storage/connect/colblk.cpp
index 81ab1ad7245..78aba7bc494 100644
--- a/storage/connect/colblk.cpp
+++ b/storage/connect/colblk.cpp
@@ -23,8 +23,6 @@
#include "xindex.h"
#include "xtable.h"
-extern "C" int trace;
-
/***********************************************************************/
/* COLBLK protected constructor. */
/***********************************************************************/
diff --git a/storage/connect/connect.cc b/storage/connect/connect.cc
index 381e437f9ec..87c782ba953 100644
--- a/storage/connect/connect.cc
+++ b/storage/connect/connect.cc
@@ -49,11 +49,6 @@
#define my_stricmp(a, b) my_strcasecmp(default_charset_info, (a), (b))
/***********************************************************************/
-/* DB static variables. */
-/***********************************************************************/
-extern "C" int trace;
-
-/***********************************************************************/
/* Routines called internally by semantic routines. */
/***********************************************************************/
void CntEndDB(PGLOBAL);
@@ -281,16 +276,13 @@ bool CntOpenTable(PGLOBAL g, PTDB tdbp, MODE mode, char *c1, char *c2,
if (trace)
printf("Allocating column %s\n", p);
-// if (*p == '*') {
-// // This is a special column
-// cp= new(g) COLUMN(p + 1);
-// cp->SetTo_Table(tdbp->GetTable());
-// colp= ((PTDBASE)tdbp)->InsertSpcBlk(g, cp);
-// } else
- colp= tdbp->ColDB(g, p, 0);
+ g->Message[0] = 0; // To check whether ColDB made an error message
+ colp= tdbp->ColDB(g, p, 0);
+
+ if (!colp && !(mode == MODE_INSERT && tdbp->IsSpecial(p))) {
+ if (g->Message[0] == 0)
+ sprintf(g->Message, MSG(COL_ISNOT_TABLE), p, tdbp->GetName());
- if (!colp) {
- sprintf(g->Message, "Column %s not found in %s", p, tdbp->GetName());
goto err;
} // endif colp
@@ -421,14 +413,14 @@ RCODE EvalColumns(PGLOBAL g, PTDB tdbp, bool mrr)
for (colp= tdbp->GetColumns(); rc == RC_OK && colp;
colp= colp->GetNext()) {
- colp->Reset();
+ colp->Reset();
- // Virtual columns are computed by MariaDB
- if (!colp->GetColUse(U_VIRTUAL) && (!mrr || colp->GetKcol()))
- if (colp->Eval(g))
- rc= RC_FX;
+ // Virtual columns are computed by MariaDB
+ if (!colp->GetColUse(U_VIRTUAL) && (!mrr || colp->GetKcol()))
+ if (colp->Eval(g))
+ rc= RC_FX;
- } // endfor colp
+ } // endfor colp
err:
g->jump_level--;
@@ -659,8 +651,10 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
if (!ptdb)
return -1;
else if (!((PTDBASE)ptdb)->GetDef()->Indexable()) {
- sprintf(g->Message, "CntIndexInit: Table %s is not indexable", ptdb->GetName());
+ sprintf(g->Message, MSG(TABLE_NO_INDEX), ptdb->GetName());
return 0;
+ } else if (((PTDBASE)ptdb)->GetDef()->Indexable() == 3) {
+ return 1;
} else
tdbp= (PTDBDOX)ptdb;
@@ -730,7 +724,7 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
x= ((PTDBASE)ptdb)->GetDef()->Indexable();
if (!x) {
- sprintf(g->Message, "CntIndexRead: Table %s is not indexable", ptdb->GetName());
+ sprintf(g->Message, MSG(TABLE_NO_INDEX), ptdb->GetName());
return RC_FX;
} else if (x == 2) {
// Remote index
@@ -738,6 +732,14 @@ RCODE CntIndexRead(PGLOBAL g, PTDB ptdb, OPVAL op,
return RC_FX;
goto rnd;
+ } else if (x == 3) {
+ if (key)
+ ((PTDBASE)ptdb)->SetRecpos(g, *(int*)key);
+
+ if (op == OP_SAME)
+ return RC_NF;
+
+ goto rnd;
} else
tdbp= (PTDBDOX)ptdb;
@@ -836,12 +838,21 @@ int CntIndexRange(PGLOBAL g, PTDB ptdb, const uchar* *key, uint *len,
x= ((PTDBASE)ptdb)->GetDef()->Indexable();
if (!x) {
- sprintf(g->Message, "CntIndexRange: Table %s is not indexable", ptdb->GetName());
+ sprintf(g->Message, MSG(TABLE_NO_INDEX), ptdb->GetName());
DBUG_PRINT("Range", ("%s", g->Message));
return -1;
} else if (x == 2) {
// Remote index
return 2;
+ } else if (x == 3) {
+ // Virtual index
+ for (i= 0; i < 2; i++)
+ if (key[i])
+ k[i] = *(int*)key[i] + (incl[i] ? 0 : 1 - 2 * i);
+ else
+ k[i] = (i) ? ptdb->Cardinality(g) : 1;
+
+ return k[1] - k[0] + 1;
} else
tdbp= (PTDBDOX)ptdb;
diff --git a/storage/connect/encas.h b/storage/connect/encas.h
new file mode 100644
index 00000000000..37e97f211e6
--- /dev/null
+++ b/storage/connect/encas.h
@@ -0,0 +1,320 @@
+ case MSG_ACCESS_VIOLATN: p = "Access violation"; break;
+ case MSG_ADD_BAD_TYPE: p = "Array add value type mismatch (%s -> %s)"; break;
+ case MSG_ALLOC_ERROR: p = "Error allocating %s"; break;
+ case MSG_ANSWER_TYPE: p = "Answer of type"; break;
+ case MSG_API_CONF_ERROR: p = "SQL Error: API_CONFORMANCE"; break;
+ case MSG_APPL_NOT_INIT: p = "Application not initialized"; break;
+ case MSG_ARRAY_BNDS_EXCD: p = "Array bounds exceeded"; break;
+ case MSG_BAD_ARRAY_OPER: p = "Arrays must be used with the IN operator"; break;
+ case MSG_BAD_ARRAY_TYPE: p = "Illegal array type %d"; break;
+ case MSG_BAD_ARRAY_VAL: p = "Arrays must have the same number of values"; break;
+ case MSG_BAD_BIN_FMT: p = "Invalid format %c for the %s BIN column"; break;
+ case MSG_BAD_BLK_ESTIM: p = "Number of blocks exceeds estimate"; break;
+ case MSG_BAD_BLK_SIZE: p = "No match in block %d size"; break;
+ case MSG_BAD_BYTE_NUM: p = "bad number of bytes written"; break;
+ case MSG_BAD_BYTE_READ: p = "bad number of bytes read"; break;
+ case MSG_BAD_COL_TYPE: p = "Invalid type %s for column %s"; break;
+ case MSG_BAD_COL_XPATH: p = "Invalid Xpath in column %s for HTML table %s"; break;
+ case MSG_BAD_CONST_TYPE: p = "Bad constant type=%d"; break;
+ case MSG_BAD_CONV_TYPE: p = "Invalid convert type %d"; break;
+ case MSG_BAD_DATETIME: p = "Invalid datetime value"; break;
+ case MSG_BAD_DBF_FILE: p = "DBF file %s is corrupted"; break;
+ case MSG_BAD_DBF_REC: p = "DBF file %s corrupted at record %d"; break;
+ case MSG_BAD_DBF_TYPE: p = "Unsupported DBF type %c for column %s"; break;
+ case MSG_BAD_DIRECTORY: p = "Bad directory %s: %s"; break;
+ case MSG_BAD_FIELD_RANK: p = "Invalid field rank %d for column %s"; break;
+ case MSG_BAD_FIELD_TYPE: p = "Bad type field %s"; break;
+ case MSG_BAD_FILE_HANDLE: p = "Invalid File Handle: %s"; break;
+ case MSG_BAD_FILTER: p = "Bad filter: Opc=%d B_T=%d %d Type=%d %d"; break;
+ case MSG_BAD_FILTER_CONV: p = "Bad filter conversion, B_T=%d,%d"; break;
+ case MSG_BAD_FILTER_OP: p = "Invalid filter operator %d"; break;
+ case MSG_BAD_FLD_FORMAT: p = "Bad format for field %d of %s"; break;
+ case MSG_BAD_FLD_LENGTH: p = "Field %s too long (%s --> %d) line %d of %s"; break;
+ case MSG_BAD_FREQ_SET: p = "Bad frequency setting for column %s"; break;
+ case MSG_BAD_FUNC_MODE: p = "%s: invalid mode %d"; break;
+ case MSG_BAD_HANDLE_VAL: p = "Invalid handle value"; break;
+ case MSG_BAD_HEADER: p = "File %s: Header corrupted"; break;
+ case MSG_BAD_HEAD_END: p = "Can't read end of header"; break;
+ case MSG_BAD_INDEX_FILE: p = "Wrong index file %s"; break;
+ case MSG_BAD_LINEFLD_FMT: p = "Bad format line %d field %d of %s"; break;
+ case MSG_BAD_LINE_LEN: p = "Line length not equal to Lrecl"; break;
+ case MSG_BAD_LRECL: p = "Table/File lrecl mismatch (%d,%hd)"; break;
+ case MSG_BAD_NODE_TYPE: p = "Bad type %d for table node"; break;
+ case MSG_BAD_OFFSET_VAL: p = "Invalid null offset value for a CSV table"; break;
+ case MSG_BAD_OPEN_MODE: p = "Invalid open mode %d"; break;
+ case MSG_BAD_PARAM_TYPE: p = "%.8s: Bad parameter type=%d"; break;
+ case MSG_BAD_PARM_COUNT: p = "Parameter count mismatch"; break;
+ case MSG_BAD_QUOTE_FIELD: p = "Missing ending quote in %s field %d line %d"; break;
+ case MSG_BAD_READ_NUMBER: p = "Wrong number %d of values read from %s"; break;
+ case MSG_BAD_RECFM: p = "Invalid recfm type %d for DOSCOL"; break;
+ case MSG_BAD_RECFM_VAL: p = "Bad Recfm value %d"; break;
+ case MSG_BAD_SET_CASE: p = "Cannot set sensitive an insensitive array"; break;
+ case MSG_BAD_SET_STRING: p = "Invalid SetValue from string"; break;
+ case MSG_BAD_SPECIAL_COL: p = "Bad special column %s"; break;
+ case MSG_BAD_SPEC_COLUMN: p = "Special column invalid for this table type"; break;
+ case MSG_BAD_TABLE_TYPE: p = "Bad type %s for table %s"; break;
+ case MSG_BAD_TYPE_LIKE: p = "Bad operand(%d) type=%d for LIKE"; break;
+ case MSG_BAD_VALBLK_INDX: p = "Out of range valblock index value"; break;
+ case MSG_BAD_VALBLK_TYPE: p = "Invalid value block type %d"; break;
+ case MSG_BAD_VALNODE: p = "Bad type %d for column %s value node"; break;
+ case MSG_BAD_VALUE_TYPE: p = "Invalid value type %d"; break;
+ case MSG_BAD_VAL_UPDATE: p = "Don't know which %s value to update"; break;
+ case MSG_BAS_NS_LIST: p = "Invalid namespaces list format"; break;
+ case MSG_BIN_F_TOO_LONG: p = "Value too long for field %s (%d --> %d)"; break;
+ case MSG_BIN_MODE_FAIL: p = "Set binary mode failed: %s"; break;
+ case MSG_BLKTYPLEN_MISM: p = "Non matching block types/lengths in SetValue"; break;
+ case MSG_BLK_IS_NULL: p = "Blk is NULL"; break;
+ case MSG_BREAKPOINT: p = "Breakpoint"; break;
+ case MSG_BUILD_INDEX: p = "Building index %s on %s"; break;
+ case MSG_CANNOT_OPEN: p = "Cannot open %s"; break;
+ case MSG_CHSIZE_ERROR: p = "chsize error: %s"; break;
+ case MSG_COL_ALLOC_ERR: p = "Cannot allocate column node"; break;
+ case MSG_COL_ISNOT_TABLE: p = "Column %s is not in table %s"; break;
+ case MSG_COL_NOT_SORTED: p = "Column %s of table %s is not sorted"; break;
+ case MSG_COL_NUM_MISM: p = "Number of columns mismatch"; break;
+ case MSG_COM_ERROR: p = "Com error"; break;
+ case MSG_CONCAT_SUBNODE: p = "Cannot concatenate sub-nodes"; break;
+ case MSG_CONNECT_CANCEL: p = "Connection cancelled by user"; break;
+ case MSG_CONTROL_C_EXIT: p = "Control C exit"; break;
+ case MSG_DATABASE_LOADED: p = "Database %s loaded"; break;
+ case MSG_DATA_MISALIGN: p = "Datatype misalignment"; break;
+ case MSG_DBASE_FILE: p = "dBASE dbf file: "; break;
+ case MSG_DEF_ALLOC_ERROR: p = "Error allocating %s DEF class"; break;
+ case MSG_DEL_FILE_ERR: p = "Error deleting %s"; break;
+ case MSG_DEL_READ_ERROR: p = "Delete: read error req=%d len=%d"; break;
+ case MSG_DEL_WRITE_ERROR: p = "Delete: write error: %s"; break;
+ case MSG_DEPREC_FLAG: p = "Deprecated option Flag, use Coltype"; break;
+ case MSG_DLL_LOAD_ERROR: p = "Error %d loading module %s"; break;
+ case MSG_DOM_NOT_SUPP: p = "MS-DOM not supported by this version"; break;
+ case MSG_DVAL_NOTIN_LIST: p = "Value %s not found in distinct values list of column %s"; break;
+ case MSG_EMPTY_DOC: p = "Empty document"; break;
+ case MSG_EMPTY_FILE: p = "%s empty file %s: "; break;
+ case MSG_EOF_AFTER_LINE: p = "EOF after line %d"; break;
+ case MSG_EOF_INDEX_FILE: p = "EOF while reading index file"; break;
+ case MSG_ERROR_IN_LSK: p = "Error %d in lseek64"; break;
+ case MSG_ERROR_IN_SFP: p = "Error %d in SetFilePointer"; break;
+ case MSG_ERR_READING_REC: p = "Error reading record %d of %s"; break;
+ case MSG_FAIL_ADD_NODE: p = "Failed to add %s table node"; break;
+ case MSG_FETCH_NO_RES: p = "Fetch: No Result Set"; break;
+ case MSG_FIELD_TOO_LONG: p = "Value too long for field %d line %d"; break;
+ case MSG_FILELEN_ERROR: p = "Error in %s for %s"; break;
+ case MSG_FILE_IS_EMPTY: p = "File %s is empty"; break;
+ case MSG_FILE_MAP_ERR: p = "File mapping error"; break;
+ case MSG_FILE_MAP_ERROR: p = "CreateFileMapping %s error rc=%d"; break;
+ case MSG_FILE_OPEN_YET: p = "File %s already open"; break;
+ case MSG_FILE_UNFOUND: p = "File %s not found"; break;
+ case MSG_FLD_TOO_LNG_FOR: p = "Field %d too long for %s line %d of %s"; break;
+ case MSG_FLT_BAD_RESULT: p = "Float inexact result"; break;
+ case MSG_FLT_DENORMAL_OP: p = "Float denormal operand"; break;
+ case MSG_FLT_INVALID_OP: p = "Float invalid operation"; break;
+ case MSG_FLT_OVERFLOW: p = "Float overflow"; break;
+ case MSG_FLT_STACK_CHECK: p = "Float stack check"; break;
+ case MSG_FLT_UNDERFLOW: p = "Float underflow"; break;
+ case MSG_FLT_ZERO_DIVIDE: p = "Float divide by zero"; break;
+ case MSG_FMT_WRITE_NIY: p = "Writing %s files is not implemented yet"; break;
+ case MSG_FOXPRO_FILE: p = "FoxPro file: "; break;
+ case MSG_FPUTS_ERROR: p = "fputs error: %s"; break;
+ case MSG_FSEEK_ERROR: p = "fseek error: %s"; break;
+ case MSG_FSETPOS_ERROR: p = "fseek error for i=%d"; break;
+ case MSG_FTELL_ERROR: p = "ftell error for recd=%d: %s"; break;
+ case MSG_FUNCTION_ERROR: p = "%s error: %d"; break;
+ case MSG_FUNC_ERRNO: p = "Error %d in %s"; break;
+ case MSG_FUNC_ERROR: p = "Error in %s"; break;
+ case MSG_FUNC_ERR_S: p = "%s error: %s"; break;
+ case MSG_FWRITE_ERROR: p = "fwrite error: %s"; break;
+ case MSG_GET_DIST_VALS: p = "Retrieving distinct values from "; break;
+ case MSG_GET_FUNC_ERR: p = "Error getting function %s: %s"; break;
+ case MSG_GLOBAL_ERROR: p = "Cannot allocate Global (size=%d)\n"; break;
+ case MSG_GUARD_PAGE: p = "Guard page violation"; break;
+ case MSG_GZOPEN_ERROR: p = "gzopen %s error %d on %s"; break;
+ case MSG_ILLEGAL_INSTR: p = "Illegal instruction"; break;
+ case MSG_ILL_FILTER_CONV: p = "Filtering implies an illegal conversion"; break;
+ case MSG_INDEX_NOT_UNIQ: p = "Index is not unique"; break;
+ case MSG_INDEX_YET_ON: p = "Index %s already exists on %s"; break;
+ case MSG_INDX_COL_NOTIN: p = "Index column %s is not in table %s"; break;
+ case MSG_INDX_EXIST_YET: p = "Index entry already exists"; break;
+ case MSG_INIT_FAILED: p = "Failed to initialize %s processing"; break;
+ case MSG_INT_COL_ERROR: p = "Internal error for index column %s"; break;
+ case MSG_INT_OVERFLOW: p = "Integer overflow"; break;
+ case MSG_INT_ZERO_DIVIDE: p = "Integer divide by zero"; break;
+ case MSG_INVALID_DISP: p = "Invalid disposition"; break;
+ case MSG_INVALID_FTYPE: p = "SBV: invalid Ftype %d"; break;
+ case MSG_INVALID_HANDLE: p = "Invalid handle"; break;
+ case MSG_INVALID_OPER: p = "Invalid operator %d for %s"; break;
+ case MSG_INV_COLUMN_TYPE: p = "Invalid type %d for column %s"; break;
+ case MSG_INV_COL_TYPE: p = "Invalid column type %s"; break;
+ case MSG_INV_DEF_READ: p = "Invalid deferred Read rc=%d"; break;
+ case MSG_INV_DIRCOL_OFST: p = "Invalid DIRCOL offset %d"; break;
+ case MSG_INV_MAP_POS: p = "Invalid map position"; break;
+ case MSG_INV_RAND_ACC: p = "Invalid random access to non optimized table"; break;
+ case MSG_INV_REC_POS: p = "Invalid record position"; break;
+ case MSG_INV_RESULT_TYPE: p = "Invalid result type %s"; break;
+ case MSG_INV_UPDT_TABLE: p = "Table %s invalid for update"; break;
+ case MSG_IN_WITHOUT_SUB: p = "IN or EXISTS without array or subquery"; break;
+ case MSG_KEY_ALLOC_ERR: p = "Error allocating Key offset block"; break;
+ case MSG_KEY_ALLOC_ERROR: p = "Memory allocation error, Klen=%d n=%d"; break;
+ case MSG_LINE_TOO_LONG: p = "New line is too long"; break;
+ case MSG_LIST: p = "--List--"; break;
+ case MSG_LOADING_FAILED: p = "Loading of %s failed"; break;
+ case MSG_LRECL_TOO_SMALL: p = "Lrecl too small (headlen = %d)"; break;
+ case MSG_MAKE_EMPTY_FILE: p = "Making empty file %s: %s"; break;
+ case MSG_MAKING: p = "Making"; break;
+ case MSG_MALLOC_ERROR: p = "Memory allocation failed: %s returned Null"; break;
+ case MSG_MAP_VIEW_ERROR: p = "MapViewOfFile %s error rc=%d"; break;
+ case MSG_MAXSIZE_ERROR: p = "Cannot calculate max size on open table"; break;
+ case MSG_MEM_ALLOC_ERR: p = "Memory allocation error, %s size=%d"; break;
+ case MSG_MEM_ALLOC_ERROR: p = "Memory allocation error"; break;
+ case MSG_MISPLACED_QUOTE: p = "Misplaced quote in line %d"; break;
+ case MSG_MISSING_ARG: p = "Missing argument for operator %d"; break;
+ case MSG_MISSING_FIELD: p = "Missing field %d in %s line %d"; break;
+ case MSG_MISSING_FNAME: p = "Missing file name"; break;
+ case MSG_MISSING_NODE: p = "Missing %s node in %s"; break;
+ case MSG_MISSING_ROWNODE: p = "Can't find RowNode for row %d"; break;
+ case MSG_MIS_TAG_LIST: p = "Missing column tag list"; break;
+ case MSG_MUL_MAKECOL_ERR: p = "Tabmul MakeCol logical error"; break;
+ case MSG_NAME_CONV_ERR: p = "Error converting node name"; break;
+ case MSG_NEW_DOC_FAILED: p = "Cannot create new document"; break;
+ case MSG_NEW_RETURN_NULL: p = "New returned Null in PlugEvalLike"; break;
+ case MSG_NEXT_FILE_ERROR: p = "Couldn't find next file. rc=%d"; break;
+ case MSG_NONCONT_EXCEPT: p = "Noncontinuable exception"; break;
+ case MSG_NOP_ZLIB_INDEX: p = "Cannot do indexing on non optimized zlib table"; break;
+ case MSG_NOT_A_DBF_FILE: p = "Not a dBASE dbf file "; break;
+ case MSG_NOT_FIXED_LEN: p = "File %s is not fixed length, len=%d lrecl=%d"; break;
+ case MSG_NO_0DH_HEAD: p = "No 0Dh at end of header (dbc=%d)"; break;
+ case MSG_NO_ACTIVE_DB: p = "No active database"; break;
+ case MSG_NO_CHAR_FROM: p = "Cannot return char value from type %d"; break;
+ case MSG_NO_DATE_FMT: p = "No date format for valblock of type %d"; break;
+ case MSG_NO_DEF_FNCCOL: p = "Cannot find default function column"; break;
+ case MSG_NO_DEF_PIVOTCOL: p = "Cannot find default pivot column"; break;
+ case MSG_NO_DIR_INDX_RD: p = "No direct access of %s tables"; break;
+ case MSG_NO_FEAT_SUPPORT: p = "No %s support in this version"; break;
+ case MSG_NO_FLD_FORMAT: p = "Missing format for field %d of %s"; break;
+ case MSG_NO_FORMAT_COL: p = "Cannot format the type COLUMN"; break;
+ case MSG_NO_FORMAT_TYPE: p = "Cannot set format from type %d"; break;
+ case MSG_NO_INDEX_READ: p = "No indexed read for multiple tables"; break;
+ case MSG_NO_KEY_COL: p = "No key columns found"; break;
+ case MSG_NO_KEY_UPDATE: p = "Cannot update key names"; break;
+ case MSG_NO_MAP_INSERT: p = "MAP incompatible with Insert"; break;
+ case MSG_NO_MATCHING_COL: p = "No matching column %s in %s"; break;
+ case MSG_NO_MATCH_COL: p = "Cannot find matching column"; break;
+ case MSG_NO_MEMORY: p = "No memory"; break;
+ case MSG_NO_MODE_PADDED: p = "Mode not supported for padded files"; break;
+ case MSG_NO_MUL_VCT: p = "VCT tables cannot be multiple"; break;
+ case MSG_NO_ODBC_DELETE: p = "Delete should not be called for ODBC tables"; break;
+ case MSG_NO_ODBC_DIRECT: p = "Direct access of ODBC tables not implemented yet"; break;
+ case MSG_NO_ODBC_MUL: p = "Multiple(2) not supported for ODBC tables"; break;
+ case MSG_NO_ODBC_SPECOL: p = "No ODBC special columns"; break;
+ case MSG_NO_PART_DEL: p = "No partial delete of %s files"; break;
+ case MSG_NO_PART_MAP: p = "Partial mapping not implemented for this OS"; break;
+ case MSG_NO_PAR_BLK_INS: p = "Cannot insert partial block yet"; break;
+ case MSG_NO_PIV_DIR_ACC: p = "No direct access to PIVOT tables"; break;
+ case MSG_NO_READ_32: p = "Can't read 32 bytes"; break;
+ case MSG_NO_RECOV_SPACE: p = "Cannot recover space in index file"; break;
+ case MSG_NO_ROWID_FOR_AM: p = "Can't get RowID in direct access for tables of type %s"; break;
+ case MSG_NO_ROW_NODE: p = "Row node name is not defined"; break;
+ case MSG_NO_SECTION_NAME: p = "Missing section name"; break;
+ case MSG_NO_SEC_UPDATE: p = "Cannot update section names"; break;
+ case MSG_NO_SETPOS_YET: p = "%s SetPos not implemented yet"; break;
+ case MSG_NO_SPEC_COL: p = "No MySQL special columns"; break;
+ case MSG_NO_SUB_VAL: p = "No sub value for array of type %d"; break;
+ case MSG_NO_TABCOL_DATA: p = "No data found for table %s column %s"; break;
+ case MSG_NO_TABLE_DEL: p = "Delete not enabled for %s tables "; break;
+ case MSG_NO_TAB_DATA: p = "No data found for table %s"; break;
+ case MSG_NO_VCT_DELETE: p = "Partial delete not yet implemented for VCT files"; break;
+ case MSG_NO_ZIP_DELETE: p = "Delete Zip files not implemented yet"; break;
+ case MSG_OPENING: p = "Opening"; break;
+ case MSG_OPEN_EMPTY_FILE: p = "Opening empty file %s: %s"; break;
+ case MSG_OPEN_ERROR: p = "Open error %d in mode %d on %s: "; break;
+ case MSG_OPEN_ERROR_IS: p = "Open error on %s: %s"; break;
+ case MSG_OPEN_MODE_ERROR: p = "Open(%s) error %d on %s"; break;
+ case MSG_OPEN_STRERROR: p = "open error: %s"; break;
+ case MSG_OPTBLK_RD_ERR: p = "Error reading opt block values: %s"; break;
+ case MSG_OPTBLK_WR_ERR: p = "Error writing opt block values: %s"; break;
+ case MSG_OPTIMIZING: p = "Optimizing "; break;
+ case MSG_OPT_BMAP_RD_ERR: p = "Error reading opt bitmaps: %s"; break;
+ case MSG_OPT_BMAP_WR_ERR: p = "Error writing opt bitmaps: %s"; break;
+ case MSG_OPT_CANCELLED: p = "Optimize cancelled by User"; break;
+ case MSG_OPT_DVAL_RD_ERR: p = "Error reading distinct values: %s"; break;
+ case MSG_OPT_DVAL_WR_ERR: p = "Error writing distinct values: %s"; break;
+ case MSG_OPT_HEAD_RD_ERR: p = "Error reading opt file header: %s"; break;
+ case MSG_OPT_HEAD_WR_ERR: p = "Error writing opt file header: %s"; break;
+ case MSG_OPT_LOGIC_ERR: p = "Logical error in SetBitmap, i=%d"; break;
+ case MSG_OPT_MAX_RD_ERR: p = "Error reading opt max values: %s"; break;
+ case MSG_OPT_MAX_WR_ERR: p = "Error writing opt max values: %s"; break;
+ case MSG_OPT_MIN_RD_ERR: p = "Error reading opt min values: %s"; break;
+ case MSG_OPT_MIN_WR_ERR: p = "Error writing opt min values: %s"; break;
+ case MSG_OPT_NOT_MATCH: p = "Non-matching opt file %s"; break;
+ case MSG_PAGE_ERROR: p = "In page error"; break;
+ case MSG_PARM_CNT_MISS: p = "Parameter count mismatch"; break;
+ case MSG_PREC_VBLP_NULL: p = "ARRAY SetPrecision: Vblp is NULL"; break;
+ case MSG_PRIV_INSTR: p = "Privileged instruction"; break;
+ case MSG_PROCADD_ERROR: p = "Error %d getting address of %s"; break;
+ case MSG_QUERY_CANCELLED: p = "Query Cancelled by User"; break;
+ case MSG_RANGE_NO_JOIN: p = "Range is not meant for join index"; break;
+ case MSG_RC_READING: p = "rc=%d reading table %s"; break;
+ case MSG_READY: p = "Ready"; break;
+ case MSG_READ_ERROR: p = "Error reading %s: %s"; break;
+ case MSG_READ_ONLY: p = "Cannot modify this read/only protected table"; break;
+ case MSG_READ_SEEK_ERROR: p = "Read seek error: %s"; break;
+ case MSG_REGISTER_ERR: p = "Unable to register NS with prefix='%s' and href='%s'"; break;
+ case MSG_REMOVE_ERROR: p = "Error removing %s: %s"; break;
+ case MSG_RENAME_ERROR: p = "Error renaming %s to %s: %s"; break;
+ case MSG_ROWID_NOT_IMPL: p = "RowNumber not implemented for tables of type %s"; break;
+ case MSG_SEC_KEY_FIRST: p = "Section and key names must come first on Insert"; break;
+ case MSG_SEC_NAME_FIRST: p = "Section name must come first on Insert"; break;
+ case MSG_SEP_IN_FIELD: p = "Field %d contains the separator character"; break;
+ case MSG_SEQUENCE_ERROR: p = "Sequence error on statement allocation"; break;
+ case MSG_SETEOF_ERROR: p = "Error %d in SetEndOfFile"; break;
+ case MSG_SETRECPOS_NIY: p = "SetRecpos not implemented for this table type"; break;
+ case MSG_SET_STR_TRUNC: p = "SetValue: String would be truncated"; break;
+ case MSG_SFP_ERROR: p = "SetFilePointer error: %s"; break;
+ case MSG_SHARED_LIB_ERR: p = "Error loading shared library %s: %s"; break;
+ case MSG_SINGLE_STEP: p = "Single step"; break;
+ case MSG_SORTING_VAL: p = "Sorting %d values"; break;
+ case MSG_SPCOL_READONLY: p = "Special column %s is Read Only"; break;
+ case MSG_SQL_CONF_ERROR: p = "SQL Error: SQL_CONFORMANCE"; break;
+ case MSG_SRCH_CLOSE_ERR: p = "Couldn't close search handle"; break;
+ case MSG_SRC_TABLE_UNDEF: p = "Source table is not defined"; break;
+ case MSG_STACK_OVERFLOW: p = "Stack overflow"; break;
+ case MSG_TABDIR_READONLY: p = "DIR tables are read/only"; break;
+ case MSG_TABLE_NOT_OPT: p = "Not an optimizable table"; break;
+ case MSG_TABLE_NO_INDEX: p = "Table %s is not indexable"; break;
+ case MSG_TABLE_READ_ONLY: p = "%s tables are read only "; break;
+ case MSG_TABMUL_READONLY: p = "Multiple tables are read/only"; break;
+ case MSG_TOO_MANY_FIELDS: p = "Too many fields line %d of %s"; break;
+ case MSG_TOO_MANY_JUMPS: p = "Too many jump levels"; break;
+ case MSG_TOO_MANY_KEYS: p = "Too many keys (%d)"; break;
+ case MSG_TO_BLK_IS_NULL: p = "To Blk is NULL"; break;
+ case MSG_TRUNCATE_ERROR: p = "truncate error: %s"; break;
+ case MSG_TRUNC_BY_ESTIM: p = "truncated by Estimate"; break;
+ case MSG_TYPE_MISMATCH: p = "Key and source are not of the same type"; break;
+ case MSG_TYPE_VALUE_ERR: p = "Column %s type(%s)/value(%s) mismatch"; break;
+ case MSG_UNBALANCE_QUOTE: p = "Unbalanced quote in line %d"; break;
+ case MSG_UNDEFINED_AM: p = "COLBLK %s: undefined Access Method"; break;
+ case MSG_UNKNOWN_EXCPT: p = "Unknown exception"; break;
+ case MSG_UNMATCH_FIL_ARG: p = "Unmatched filter argument"; break;
+ case MSG_UPDATE_ERROR: p = "Error updating %s"; break;
+ case MSG_UPD_ZIP_NOT_IMP: p = "Updating ZDOS tables not implemented yet"; break;
+ case MSG_VALSTR_TOO_LONG: p = "Value %s too long for string of length %d"; break;
+ case MSG_VALTYPE_NOMATCH: p = "Non matching Value types"; break;
+ case MSG_VALUE_ERROR: p = "Column %s: value is null"; break;
+ case MSG_VALUE_TOO_BIG: p = "Value %lld too big for column %s"; break;
+ case MSG_VALUE_TOO_LONG: p = "Value %s too long for column %s of length %d"; break;
+ case MSG_VAL_ALLOC_ERR: p = "Cannot allocate value node"; break;
+ case MSG_VIR_NO_DELETE: p = "Delete not allowed for %s tables"; break;
+ case MSG_VIR_READ_ONLY: p = "Virtual %s tables are read only"; break;
+ case MSG_VOID_FIRST_ARG: p = "First argument should not be void"; break;
+ case MSG_WORK_AREA: p = "Work area: %s"; break;
+ case MSG_WRITE_SEEK_ERR: p = "Write seek error: %s"; break;
+ case MSG_WRITE_STRERROR: p = "Error writing %s: %s"; break;
+ case MSG_WRITING: p = "Writing"; break;
+ case MSG_WRITING_ERROR: p = "Error writing to %s: %s"; break;
+ case MSG_WS_CONV_ERR: p = "Error converting %s to WS"; break;
+ case MSG_XCOL_MISMATCH: p = "Column %s mismatch in index"; break;
+ case MSG_XFILE_READERR: p = "Error %d reading index file"; break;
+ case MSG_XFILE_WRITERR: p = "Error writing index file: %s"; break;
+ case MSG_XMLTAB_INIT_ERR: p = "Error initializing XML table"; break;
+ case MSG_XML_INIT_ERROR: p = "Error initializing new XML file"; break;
+ case MSG_XPATH_CNTX_ERR: p = "Unable to create new XPath context"; break;
+ case MSG_XPATH_EVAL_ERR: p = "Unable to evaluate xpath location '%s'"; break;
+ case MSG_XPATH_NOT_SUPP: p = "Unsupported Xpath for column %s"; break;
diff --git a/storage/connect/english.msg b/storage/connect/english.msg
new file mode 100644
index 00000000000..9f445ca6000
--- /dev/null
+++ b/storage/connect/english.msg
@@ -0,0 +1,366 @@
+ 100 IDS_TABLES "Table Headers"
+ 101 IDS_TAB_01 "Table_Cat"
+ 102 IDS_TAB_02 "Table_Schema"
+ 103 IDS_TAB_03 "Table_Name"
+ 104 IDS_TAB_04 "Table_Type"
+ 105 IDS_TAB_05 "Remark"
+ 106 IDS_COLUMNS "Column Headers"
+ 107 IDS_COL_01 "Table_Cat"
+ 108 IDS_COL_02 "Table_Schema"
+ 109 IDS_COL_03 "Table_Name"
+ 110 IDS_COL_04 "Column_Name"
+ 111 IDS_COL_05 "Data_Type"
+ 112 IDS_COL_06 "Type_Name"
+ 113 IDS_COL_07 "Column_Size"
+ 114 IDS_COL_08 "Buffer_Length"
+ 115 IDS_COL_09 "Decimal_Digits"
+ 116 IDS_COL_10 "Radix"
+ 117 IDS_COL_11 "Nullable"
+ 118 IDS_COL_12 "Remarks"
+ 119 IDS_PKEY "Key Headers"
+ 120 IDS_PKY_01 "Table_Catalog"
+ 121 IDS_PKY_02 "Table_Schema"
+ 122 IDS_PKY_03 "Table_Name"
+ 123 IDS_PKY_04 "Column_Name"
+ 124 IDS_PKY_05 "Key_Seq"
+ 125 IDS_PKY_06 "Pk_Name"
+ 126 IDS_STAT "Stat Headers"
+ 127 IDS_STA_01 "Table_Catalog"
+ 128 IDS_STA_02 "Table_Schema"
+ 129 IDS_STA_03 "Table_Name"
+ 130 IDS_STA_04 "Non_Unique"
+ 131 IDS_STA_05 "Index_Qualifier"
+ 132 IDS_STA_06 "Index_Name"
+ 133 IDS_STA_07 "Type"
+ 134 IDS_STA_08 "Seq_in_Index"
+ 135 IDS_STA_09 "Column_Name"
+ 136 IDS_STA_10 "Collation"
+ 137 IDS_STA_11 "Cardinality"
+ 138 IDS_STA_12 "Pages"
+ 139 IDS_STA_13 "Filter_Condition"
+ 140 IDS_DRIVER "Driver Headers"
+ 141 IDS_DRV_01 "Description"
+ 142 IDS_DRV_02 "Attributes"
+ 143 IDS_DSRC "DataSrc Headers"
+ 144 IDS_DSC_01 "Name"
+ 145 IDS_DSC_02 "Description"
+ 200 ACCESS_VIOLATN "Access violation"
+ 201 ADD_BAD_TYPE "Array add value type mismatch (%s -> %s)"
+ 202 ALLOC_ERROR "Error allocating %s"
+ 203 ANSWER_TYPE "Answer of type"
+ 204 API_CONF_ERROR "SQL Error: API_CONFORMANCE"
+ 205 APPL_NOT_INIT "Application not initialized"
+ 206 ARRAY_BNDS_EXCD "Array bounds exceeded"
+ 207 BAD_ARRAY_OPER "Arrays must be used with the IN operator"
+ 208 BAD_ARRAY_TYPE "Illegal array type %d"
+ 209 BAD_ARRAY_VAL "Arrays must have the same number of values"
+ 210 BAD_BIN_FMT "Invalid format %c for the %s BIN column"
+ 211 BAD_BLK_ESTIM "Number of blocks exceeds estimate"
+ 212 BAD_BLK_SIZE "No match in block %d size"
+ 213 BAD_BYTE_NUM "bad number of bytes written"
+ 214 BAD_BYTE_READ "bad number of bytes read"
+ 215 BAD_COL_TYPE "Invalid type %s for column %s"
+ 216 BAD_COL_XPATH "Invalid Xpath in column %s for HTML table %s"
+ 217 BAD_CONST_TYPE "Bad constant type=%d"
+ 218 BAD_CONV_TYPE "Invalid convert type %d"
+ 219 BAD_DATETIME "Invalid datetime value"
+ 220 BAD_DBF_FILE "DBF file %s is corrupted"
+ 221 BAD_DBF_REC "DBF file %s corrupted at record %d"
+ 222 BAD_DBF_TYPE "Unsupported DBF type %c for column %s"
+ 223 BAD_DIRECTORY "Bad directory %s: %s"
+ 224 BAD_FIELD_RANK "Invalid field rank %d for column %s"
+ 225 BAD_FIELD_TYPE "Bad type field %s"
+ 226 BAD_FILE_HANDLE "Invalid File Handle: %s"
+ 227 BAD_FILTER "Bad filter: Opc=%d B_T=%d %d Type=%d %d"
+ 228 BAD_FILTER_CONV "Bad filter conversion, B_T=%d,%d"
+ 229 BAD_FILTER_OP "Invalid filter operator %d"
+ 230 BAD_FLD_FORMAT "Bad format for field %d of %s"
+ 231 BAD_FLD_LENGTH "Field %s too long (%s --> %d) line %d of %s"
+ 232 BAD_FREQ_SET "Bad frequency setting for column %s"
+ 233 BAD_FUNC_MODE "%s: invalid mode %d"
+ 234 BAD_HANDLE_VAL "Invalid handle value"
+ 235 BAD_HEADER "File %s: Header corrupted"
+ 236 BAD_HEAD_END "Can't read end of header"
+ 237 BAD_INDEX_FILE "Wrong index file %s"
+ 238 BAD_LINEFLD_FMT "Bad format line %d field %d of %s"
+ 239 BAD_LINE_LEN "Line length not equal to Lrecl"
+ 240 BAD_LRECL "Table/File lrecl mismatch (%d,%hd)"
+ 241 BAD_NODE_TYPE "Bad type %d for table node"
+ 242 BAD_OFFSET_VAL "Invalid null offset value for a CSV table"
+ 243 BAD_OPEN_MODE "Invalid open mode %d"
+ 244 BAD_PARAM_TYPE "%.8s: Bad parameter type=%d"
+ 245 BAD_PARM_COUNT "Parameter count mismatch"
+ 246 BAD_QUOTE_FIELD "Missing ending quote in %s field %d line %d"
+ 247 BAD_READ_NUMBER "Wrong number %d of values read from %s"
+ 248 BAD_RECFM "Invalid recfm type %d for DOSCOL"
+ 249 BAD_RECFM_VAL "Bad Recfm value %d"
+ 250 BAD_SET_CASE "Cannot set sensitive an insensitive array"
+ 251 BAD_SET_STRING "Invalid SetValue from string"
+ 252 BAD_SPECIAL_COL "Bad special column %s"
+ 253 BAD_SPEC_COLUMN "Special column invalid for this table type"
+ 254 BAD_TABLE_TYPE "Bad type %s for table %s"
+ 255 BAD_TYPE_LIKE "Bad operand(%d) type=%d for LIKE"
+ 256 BAD_VALBLK_INDX "Out of range valblock index value"
+ 257 BAD_VALBLK_TYPE "Invalid value block type %d"
+ 258 BAD_VALNODE "Bad type %d for column %s value node"
+ 259 BAD_VALUE_TYPE "Invalid value type %d"
+ 260 BAD_VAL_UPDATE "Don't know which %s value to update"
+ 261 BAS_NS_LIST "Invalid namespaces list format"
+ 262 BIN_F_TOO_LONG "Value too long for field %s (%d --> %d)"
+ 263 BIN_MODE_FAIL "Set binary mode failed: %s"
+ 264 BLKTYPLEN_MISM "Non matching block types/lengths in SetValue"
+ 265 BLK_IS_NULL "Blk is NULL"
+ 266 BREAKPOINT "Breakpoint"
+ 267 BUILD_INDEX "Building index %s on %s"
+ 268 CANNOT_OPEN "Cannot open %s"
+ 269 CHSIZE_ERROR "chsize error: %s"
+ 270 COL_ALLOC_ERR "Cannot allocate column node"
+ 271 COL_ISNOT_TABLE "Column %s is not in table %s"
+ 272 COL_NOT_SORTED "Column %s of table %s is not sorted"
+ 273 COL_NUM_MISM "Number of columns mismatch"
+ 274 COM_ERROR "Com error"
+ 275 CONCAT_SUBNODE "Cannot concatenate sub-nodes"
+ 276 CONNECT_CANCEL "Connection cancelled by user"
+ 277 CONTROL_C_EXIT "Control C exit"
+ 278 DATABASE_LOADED "Database %s loaded"
+ 279 DATA_MISALIGN "Datatype misalignment"
+ 280 DBASE_FILE "dBASE dbf file: "
+ 281 DEF_ALLOC_ERROR "Error allocating %s DEF class"
+ 282 DEL_FILE_ERR "Error deleting %s"
+ 283 DEL_READ_ERROR "Delete: read error req=%d len=%d"
+ 284 DEL_WRITE_ERROR "Delete: write error: %s"
+ 285 DEPREC_FLAG "Deprecated option Flag, use Coltype"
+ 286 DLL_LOAD_ERROR "Error %d loading module %s"
+ 287 DOM_NOT_SUPP "MS-DOM not supported by this version"
+ 288 DVAL_NOTIN_LIST "Value %s not found in distinct values list of column %s"
+ 289 EMPTY_DOC "Empty document"
+ 290 EMPTY_FILE "%s empty file %s: "
+ 291 EOF_AFTER_LINE "EOF after line %d"
+ 292 EOF_INDEX_FILE "EOF while reading index file"
+ 293 ERROR_IN_LSK "Error %d in lseek64"
+ 294 ERROR_IN_SFP "Error %d in SetFilePointer"
+ 295 ERR_READING_REC "Error reading record %d of %s"
+ 296 FAIL_ADD_NODE "Failed to add %s table node"
+ 297 FETCH_NO_RES "Fetch: No Result Set"
+ 298 FIELD_TOO_LONG "Value too long for field %d line %d"
+ 299 FILELEN_ERROR "Error in %s for %s"
+ 300 FILE_IS_EMPTY "File %s is empty"
+ 301 FILE_MAP_ERR "File mapping error"
+ 302 FILE_MAP_ERROR "CreateFileMapping %s error rc=%d"
+ 303 FILE_OPEN_YET "File %s already open"
+ 304 FILE_UNFOUND "File %s not found"
+ 305 FLD_TOO_LNG_FOR "Field %d too long for %s line %d of %s"
+ 306 FLT_BAD_RESULT "Float inexact result"
+ 307 FLT_DENORMAL_OP "Float denormal operand"
+ 308 FLT_INVALID_OP "Float invalid operation"
+ 309 FLT_OVERFLOW "Float overflow"
+ 310 FLT_STACK_CHECK "Float stack check"
+ 311 FLT_UNDERFLOW "Float underflow"
+ 312 FLT_ZERO_DIVIDE "Float divide by zero"
+ 313 FMT_WRITE_NIY "Writing %s files is not implemented yet"
+ 314 FOXPRO_FILE "FoxPro file: "
+ 315 FPUTS_ERROR "fputs error: %s"
+ 316 FSEEK_ERROR "fseek error: %s"
+ 317 FSETPOS_ERROR "fseek error for i=%d"
+ 318 FTELL_ERROR "ftell error for recd=%d: %s"
+ 319 FUNCTION_ERROR "%s error: %d"
+ 320 FUNC_ERRNO "Error %d in %s"
+ 321 FUNC_ERROR "Error in %s"
+ 322 FUNC_ERR_S "%s error: %s"
+ 323 FWRITE_ERROR "fwrite error: %s"
+ 324 GET_DIST_VALS "Retrieving distinct values from "
+ 325 GET_FUNC_ERR "Error getting function %s: %s"
+ 326 GLOBAL_ERROR "Cannot allocate Global (size=%d)\n"
+ 327 GUARD_PAGE "Guard page violation"
+ 328 GZOPEN_ERROR "gzopen %s error %d on %s"
+ 329 ILLEGAL_INSTR "Illegal instruction"
+ 330 ILL_FILTER_CONV "Filtering implies an illegal conversion"
+ 331 INDEX_NOT_UNIQ "Index is not unique"
+ 332 INDEX_YET_ON "Index %s already exists on %s"
+ 333 INDX_COL_NOTIN "Index column %s is not in table %s"
+ 334 INDX_EXIST_YET "Index entry already exists"
+ 335 INIT_FAILED "Failed to initialize %s processing"
+ 336 INT_COL_ERROR "Internal error for index column %s"
+ 337 INT_OVERFLOW "Integer overflow"
+ 338 INT_ZERO_DIVIDE "Integer divide by zero"
+ 339 INVALID_DISP "Invalid disposition"
+ 340 INVALID_FTYPE "SBV: invalid Ftype %d"
+ 341 INVALID_HANDLE "Invalid handle"
+ 342 INVALID_OPER "Invalid operator %d for %s"
+ 343 INV_COLUMN_TYPE "Invalid type %d for column %s"
+ 344 INV_COL_TYPE "Invalid column type %s"
+ 345 INV_DEF_READ "Invalid deferred Read rc=%d"
+ 346 INV_DIRCOL_OFST "Invalid DIRCOL offset %d"
+ 347 INV_MAP_POS "Invalid map position"
+ 348 INV_RAND_ACC "Invalid random access to non optimized table"
+ 349 INV_REC_POS "Invalid record position"
+ 350 INV_RESULT_TYPE "Invalid result type %s"
+ 351 INV_UPDT_TABLE "Table %s invalid for update"
+ 352 IN_WITHOUT_SUB "IN or EXISTS without array or subquery"
+ 353 KEY_ALLOC_ERR "Error allocating Key offset block"
+ 354 KEY_ALLOC_ERROR "Memory allocation error, Klen=%d n=%d"
+ 355 LINE_TOO_LONG "New line is too long"
+ 356 LIST "--List--"
+ 357 LOADING_FAILED "Loading of %s failed"
+ 358 LRECL_TOO_SMALL "Lrecl too small (headlen = %d)"
+ 359 MAKE_EMPTY_FILE "Making empty file %s: %s"
+ 360 MAKING "Making"
+ 361 MALLOC_ERROR "Memory allocation failed: %s returned Null"
+ 362 MAP_VIEW_ERROR "MapViewOfFile %s error rc=%d"
+ 363 MAXSIZE_ERROR "Cannot calculate max size on open table"
+ 364 MEM_ALLOC_ERR "Memory allocation error, %s size=%d"
+ 365 MEM_ALLOC_ERROR "Memory allocation error"
+ 366 MISPLACED_QUOTE "Misplaced quote in line %d"
+ 367 MISSING_ARG "Missing argument for operator %d"
+ 368 MISSING_FIELD "Missing field %d in %s line %d"
+ 369 MISSING_FNAME "Missing file name"
+ 370 MISSING_NODE "Missing %s node in %s"
+ 371 MISSING_ROWNODE "Can't find RowNode for row %d"
+ 372 MIS_TAG_LIST "Missing column tag list"
+ 373 MUL_MAKECOL_ERR "Tabmul MakeCol logical error"
+ 374 NAME_CONV_ERR "Error converting node name"
+ 375 NEW_DOC_FAILED "Cannot create new document"
+ 376 NEW_RETURN_NULL "New returned Null in PlugEvalLike"
+ 377 NEXT_FILE_ERROR "Couldn't find next file. rc=%d"
+ 378 NONCONT_EXCEPT "Noncontinuable exception"
+ 379 NOP_ZLIB_INDEX "Cannot do indexing on non optimized zlib table"
+ 380 NOT_A_DBF_FILE "Not a dBASE dbf file "
+ 381 NOT_FIXED_LEN "File %s is not fixed length, len=%d lrecl=%d"
+ 382 NO_0DH_HEAD "No 0Dh at end of header (dbc=%d)"
+ 383 NO_ACTIVE_DB "No active database"
+ 384 NO_CHAR_FROM "Cannot return char value from type %d"
+ 385 NO_DATE_FMT "No date format for valblock of type %d"
+ 386 NO_DEF_FNCCOL "Cannot find default function column"
+ 387 NO_DEF_PIVOTCOL "Cannot find default pivot column"
+ 388 NO_DIR_INDX_RD "No direct access of %s tables"
+ 389 NO_FEAT_SUPPORT "No %s support in this version"
+ 390 NO_FLD_FORMAT "Missing format for field %d of %s"
+ 391 NO_FORMAT_COL "Cannot format the type COLUMN"
+ 392 NO_FORMAT_TYPE "Cannot set format from type %d"
+ 393 NO_INDEX_READ "No indexed read for multiple tables"
+ 394 NO_KEY_COL "No key columns found"
+ 395 NO_KEY_UPDATE "Cannot update key names"
+ 396 NO_MAP_INSERT "MAP incompatible with Insert"
+ 397 NO_MATCHING_COL "No matching column %s in %s"
+ 398 NO_MATCH_COL "Cannot find matching column"
+ 399 NO_MEMORY "No memory"
+ 400 NO_MODE_PADDED "Mode not supported for padded files"
+ 401 NO_MUL_VCT "VCT tables cannot be multiple"
+ 402 NO_ODBC_DELETE "Delete should not be called for ODBC tables"
+ 403 NO_ODBC_DIRECT "Direct access of ODBC tables not implemented yet"
+ 404 NO_ODBC_MUL "Multiple(2) not supported for ODBC tables"
+ 405 NO_ODBC_SPECOL "No ODBC special columns"
+ 406 NO_PART_DEL "No partial delete of %s files"
+ 407 NO_PART_MAP "Partial mapping not implemented for this OS"
+ 408 NO_PAR_BLK_INS "Cannot insert partial block yet"
+ 409 NO_PIV_DIR_ACC "No direct access to PIVOT tables"
+ 410 NO_READ_32 "Can't read 32 bytes"
+ 411 NO_RECOV_SPACE "Cannot recover space in index file"
+ 412 NO_ROWID_FOR_AM "Can't get RowID in direct access for tables of type %s"
+ 413 NO_ROW_NODE "Row node name is not defined"
+ 414 NO_SECTION_NAME "Missing section name"
+ 415 NO_SEC_UPDATE "Cannot update section names"
+ 416 NO_SETPOS_YET "%s SetPos not implemented yet"
+ 417 NO_SPEC_COL "No MySQL special columns"
+ 418 NO_SUB_VAL "No sub value for array of type %d"
+ 419 NO_TABCOL_DATA "No data found for table %s column %s"
+ 420 NO_TABLE_DEL "Delete not enabled for %s tables "
+ 421 NO_TAB_DATA "No data found for table %s"
+ 422 NO_VCT_DELETE "Partial delete not yet implemented for VCT files"
+ 423 NO_ZIP_DELETE "Delete Zip files not implemented yet"
+ 424 OPENING "Opening"
+ 425 OPEN_EMPTY_FILE "Opening empty file %s: %s"
+ 426 OPEN_ERROR "Open error %d in mode %d on %s: "
+ 427 OPEN_ERROR_IS "Open error on %s: %s"
+ 428 OPEN_MODE_ERROR "Open(%s) error %d on %s"
+ 429 OPEN_STRERROR "open error: %s"
+ 430 OPTBLK_RD_ERR "Error reading opt block values: %s"
+ 431 OPTBLK_WR_ERR "Error writing opt block values: %s"
+ 432 OPTIMIZING "Optimizing "
+ 433 OPT_BMAP_RD_ERR "Error reading opt bitmaps: %s"
+ 434 OPT_BMAP_WR_ERR "Error writing opt bitmaps: %s"
+ 435 OPT_CANCELLED "Optimize cancelled by User"
+ 436 OPT_DVAL_RD_ERR "Error reading distinct values: %s"
+ 437 OPT_DVAL_WR_ERR "Error writing distinct values: %s"
+ 438 OPT_HEAD_RD_ERR "Error reading opt file header: %s"
+ 439 OPT_HEAD_WR_ERR "Error writing opt file header: %s"
+ 440 OPT_LOGIC_ERR "Logical error in SetBitmap, i=%d"
+ 441 OPT_MAX_RD_ERR "Error reading opt max values: %s"
+ 442 OPT_MAX_WR_ERR "Error writing opt max values: %s"
+ 443 OPT_MIN_RD_ERR "Error reading opt min values: %s"
+ 444 OPT_MIN_WR_ERR "Error writing opt min values: %s"
+ 445 OPT_NOT_MATCH "Non-matching opt file %s"
+ 446 PAGE_ERROR "In page error"
+ 447 PARM_CNT_MISS "Parameter count mismatch"
+ 448 PREC_VBLP_NULL "ARRAY SetPrecision: Vblp is NULL"
+ 449 PRIV_INSTR "Privileged instruction"
+ 450 PROCADD_ERROR "Error %d getting address of %s"
+ 451 QUERY_CANCELLED "Query Cancelled by User"
+ 452 RANGE_NO_JOIN "Range is not meant for join index"
+ 453 RC_READING "rc=%d reading table %s"
+ 454 READY "Ready"
+ 455 READ_ERROR "Error reading %s: %s"
+ 456 READ_ONLY "Cannot modify this read/only protected table"
+ 457 READ_SEEK_ERROR "Read seek error: %s"
+ 458 REGISTER_ERR "Unable to register NS with prefix='%s' and href='%s'"
+ 459 REMOVE_ERROR "Error removing %s: %s"
+ 460 RENAME_ERROR "Error renaming %s to %s: %s"
+ 461 ROWID_NOT_IMPL "RowNumber not implemented for tables of type %s"
+ 462 SEC_KEY_FIRST "Section and key names must come first on Insert"
+ 463 SEC_NAME_FIRST "Section name must come first on Insert"
+ 464 SEP_IN_FIELD "Field %d contains the separator character"
+ 465 SEQUENCE_ERROR "Sequence error on statement allocation"
+ 466 SETEOF_ERROR "Error %d in SetEndOfFile"
+ 467 SETRECPOS_NIY "SetRecpos not implemented for this table type"
+ 468 SET_STR_TRUNC "SetValue: String would be truncated"
+ 469 SFP_ERROR "SetFilePointer error: %s"
+ 470 SHARED_LIB_ERR "Error loading shared library %s: %s"
+ 471 SINGLE_STEP "Single step"
+ 472 SORTING_VAL "Sorting %d values"
+ 473 SPCOL_READONLY "Special column %s is Read Only"
+ 474 SQL_CONF_ERROR "SQL Error: SQL_CONFORMANCE"
+ 475 SRCH_CLOSE_ERR "Couldn't close search handle"
+ 476 SRC_TABLE_UNDEF "Source table is not defined"
+ 477 STACK_OVERFLOW "Stack overflow"
+ 478 TABDIR_READONLY "DIR tables are read/only"
+ 479 TABLE_NOT_OPT "Not an optimizable table"
+ 480 TABLE_NO_INDEX "Table %s is not indexable"
+ 481 TABLE_READ_ONLY "%s tables are read only "
+ 482 TABMUL_READONLY "Multiple tables are read/only"
+ 483 TOO_MANY_FIELDS "Too many fields line %d of %s"
+ 484 TOO_MANY_JUMPS "Too many jump levels"
+ 485 TOO_MANY_KEYS "Too many keys (%d)"
+ 486 TO_BLK_IS_NULL "To Blk is NULL"
+ 487 TRUNCATE_ERROR "truncate error: %s"
+ 488 TRUNC_BY_ESTIM "truncated by Estimate"
+ 489 TYPE_MISMATCH "Key and source are not of the same type"
+ 490 TYPE_VALUE_ERR "Column %s type(%s)/value(%s) mismatch"
+ 491 UNBALANCE_QUOTE "Unbalanced quote in line %d"
+ 492 UNDEFINED_AM "COLBLK %s: undefined Access Method"
+ 493 UNKNOWN_EXCPT "Unknown exception"
+ 494 UNMATCH_FIL_ARG "Unmatched filter argument"
+ 495 UPDATE_ERROR "Error updating %s"
+ 496 UPD_ZIP_NOT_IMP "Updating ZDOS tables not implemented yet"
+ 497 VALSTR_TOO_LONG "Value %s too long for string of length %d"
+ 498 VALTYPE_NOMATCH "Non matching Value types"
+ 499 VALUE_ERROR "Column %s: value is null"
+ 500 VALUE_TOO_BIG "Value %lld too big for column %s"
+ 501 VALUE_TOO_LONG "Value %s too long for column %s of length %d"
+ 502 VAL_ALLOC_ERR "Cannot allocate value node"
+ 503 VIR_NO_DELETE "Delete not allowed for %s tables"
+ 504 VIR_READ_ONLY "Virtual %s tables are read only"
+ 505 VOID_FIRST_ARG "First argument should not be void"
+ 506 WORK_AREA "Work area: %s"
+ 507 WRITE_SEEK_ERR "Write seek error: %s"
+ 508 WRITE_STRERROR "Error writing %s: %s"
+ 509 WRITING "Writing"
+ 510 WRITING_ERROR "Error writing to %s: %s"
+ 511 WS_CONV_ERR "Error converting %s to WS"
+ 512 XCOL_MISMATCH "Column %s mismatch in index"
+ 513 XFILE_READERR "Error %d reading index file"
+ 514 XFILE_WRITERR "Error writing index file: %s"
+ 515 XMLTAB_INIT_ERR "Error initializing XML table"
+ 516 XML_INIT_ERROR "Error initializing new XML file"
+ 517 XPATH_CNTX_ERR "Unable to create new XPath context"
+ 518 XPATH_EVAL_ERR "Unable to evaluate xpath location '%s'"
+ 519 XPATH_NOT_SUPP "Unsupported Xpath for column %s"
diff --git a/storage/connect/engmsg.h b/storage/connect/engmsg.h
index ccced92261e..ad6dc6b5689 100644
--- a/storage/connect/engmsg.h
+++ b/storage/connect/engmsg.h
@@ -1,54 +1,10 @@
#define MSG_ACCESS_VIOLATN "Access violation"
-#define MSG_ACT_ALLOC_FAIL "PlugInitLang: Activity allocation failed"
-#define MSG_ADDVAL_ERROR "Error %d in AddValue"
#define MSG_ADD_BAD_TYPE "Array add value type mismatch (%s -> %s)"
-#define MSG_ADD_NULL_DOM "Adding string %s to a null domain"
-#define MSG_ADPOS_IN_DICTP "ADPOS to work in User_Dictp"
-#define MSG_AFTER " after: "
-#define MSG_ALG_CHOICE_AUTO "Best algorithm choice is automatic"
-#define MSG_ALG_CHOICE_BAD "Bad algorithm choice value, reset to AUTO"
-#define MSG_ALG_CHOICE_QRY "Using Query algorithm"
-#define MSG_ALG_CURLY_BRK "Algorithm choice depends on outer curly brackets"
#define MSG_ALLOC_ERROR "Error allocating %s"
-#define MSG_ALL_DELETED "All lines deleted in %.2lf sec"
-#define MSG_ALTER_DB_ERR "Cannot find the DB to alter"
-#define MSG_AMBIG_COL_QUAL "Ambiguous qualifier %s for column %s"
-#define MSG_AMBIG_CORREL "Select %s.* refers more than one table"
-#define MSG_AMBIG_SPEC_COL "Ambiguous special column %s"
#define MSG_ANSWER_TYPE "Answer of type"
#define MSG_API_CONF_ERROR "SQL Error: API_CONFORMANCE"
-#define MSG_APPL_ACCESSIBLE "Application %s accessible"
-#define MSG_APPL_ACTIVE "Application %s still active"
-#define MSG_APPL_BAD_SAVE "Application %s may be incorrectly saved"
-#define MSG_APPL_CREATED "Application %s created"
-#define MSG_APPL_IS_ACTIVE "Application already active"
#define MSG_APPL_NOT_INIT "Application not initialized"
-#define MSG_APPL_NOT_LOADED "Application not loaded"
-#define MSG_APPL_QUIT "Application %s quit"
-#define MSG_APPL_SAVED "Application %s saved"
-#define MSG_APP_STILL_ACTIV "Application of language %s still active (not freed)"
-#define MSG_AREAFILE_NOTFND "Area file not found"
-#define MSG_ARGS_SYNTAX_ERR "?SetArgs syntax error: unexpected %s after %s"
-#define MSG_ARG_ALREADY_SET "Argument %d already set"
-#define MSG_ARG_NOT_AN_ATTR "Argument is not an attribute (wrong pos-type %d)"
-#define MSG_ARG_OUT_CONTEXT "@-type argument used out of context"
-#define MSG_ARG_OUT_RANGE "Phrase argument of value %d is out of range"
-#define MSG_ARG_PTR_NOSEM "Argument of value %d points to a nonterm having no Sem"
-#define MSG_ARG_PTR_NOSEMS "Argument of value %d points to a nonterm having no semantics"
-#define MSG_ARG_REF_LOOP "?Looping argument cross references"
-#define MSG_ARG_TWO_CONST "2nd argument of %s must be a constant"
-#define MSG_ARRAY_ALLOC_ERR "Memory allocation error in ARRAY"
#define MSG_ARRAY_BNDS_EXCD "Array bounds exceeded"
-#define MSG_ARRAY_ERROR "Error while making array k=%d n=%d"
-#define MSG_ATTRIBUTE_ERROR "Error rule %u attribute %s: "
-#define MSG_ATT_NOT_CASE "Attribute has wrong value %d (not a casevalue)"
-#define MSG_ATT_POSCODE_BIG "Attribute poscode %d is too big (max=%d)"
-#define MSG_AVGLEN_ERROR "avglen should be between %d and %d"
-#define MSG_BAD_AGGREG_FUNC "Unsupported aggregate function %d"
-#define MSG_BAD_ARGTYPES "Argument type invalid for %s"
-#define MSG_BAD_ARGUMENTS "Argument not attached for %s"
-#define MSG_BAD_ARG_NUM "Invalid number of arguments %d"
-#define MSG_BAD_ARG_TYPE "Bad argument type %d"
#define MSG_BAD_ARRAY_OPER "Arrays must be used with the IN operator"
#define MSG_BAD_ARRAY_TYPE "Illegal array type %d"
#define MSG_BAD_ARRAY_VAL "Arrays must have the same number of values"
@@ -57,321 +13,97 @@
#define MSG_BAD_BLK_SIZE "No match in block %d size"
#define MSG_BAD_BYTE_NUM "bad number of bytes written"
#define MSG_BAD_BYTE_READ "bad number of bytes read"
-#define MSG_BAD_CARDINALITY "Invalid Cardinality call for multiple table"
-#define MSG_BAD_CASE_SPEC "Wrong case specification %c, enter new one: "
-#define MSG_BAD_CHAR_SPEC "Invalid character specification:'%s'"
-#define MSG_BAD_CHECK_TYPE "Invalid CheckColumn subtype %d"
-#define MSG_BAD_CHECK_VAL "Bad check setting '%s'"
-#define MSG_BAD_COLCRT_ARG "Bad COLCRT argument (type=%hd, domain=%hd)"
-#define MSG_BAD_COLDEF_TYPE "Coldefs: wrong type %d"
-#define MSG_BAD_COLIST_ITEM "Incorrect colist item"
-#define MSG_BAD_COLIST_TYPE "Bad Colist type=%d"
-#define MSG_BAD_COLSIZE "Colsize %d is too small for this database"
-#define MSG_BAD_COL_ENTRY "Invalid entry for column %s"
-#define MSG_BAD_COL_FORMAT "Invalid column format type %d"
-#define MSG_BAD_COL_IN_FILT "Incorrect column in filter"
-#define MSG_BAD_COL_QUALIF "Bad qualifier %s for column %s"
#define MSG_BAD_COL_TYPE "Invalid type %s for column %s"
#define MSG_BAD_COL_XPATH "Invalid Xpath in column %s for HTML table %s"
-#define MSG_BAD_COMPARE_OP "Bad compare op %d"
#define MSG_BAD_CONST_TYPE "Bad constant type=%d"
#define MSG_BAD_CONV_TYPE "Invalid convert type %d"
-#define MSG_BAD_CORREL "Select %s.* correlation refers no tables"
#define MSG_BAD_DATETIME "Invalid datetime value"
-#define MSG_BAD_DATE_OPER "Unexpected date operator %d"
#define MSG_BAD_DBF_FILE "DBF file %s is corrupted"
#define MSG_BAD_DBF_REC "DBF file %s corrupted at record %d"
-#define MSG_BAD_DBF_TYPE "Unsupported DBF type %c"
-#define MSG_BAD_DEF_ARG "Bad INDEXDEF argument (type=%hd, domain=%hd)"
-#define MSG_BAD_DEF_READ "Unexpected EOF in deferred Read"
-#define MSG_BAD_DEF_TYPE "Invalid column definition type"
+#define MSG_BAD_DBF_TYPE "Unsupported DBF type %c for column %s"
#define MSG_BAD_DIRECTORY "Bad directory %s: %s"
-#define MSG_BAD_DIST_JN_FIL "Invalid Distinct Join filter"
-#define MSG_BAD_DIST_JOIN "Invalid Distinct Join specification"
-#define MSG_BAD_DOM_COL_DEF "Invalid column definitions for a domain"
-#define MSG_BAD_DOM_VALUE "%d is not a valid domain value"
-#define MSG_BAD_EDIT_INIT "Coparm: edition %s not properly initialized"
-#define MSG_BAD_EVAL_TYPE "Bad scalar function eval type=%d"
-#define MSG_BAD_EXEC_MODE "Bad execution mode '%s'"
-#define MSG_BAD_EXP_ARGTYPE "Invalid expression argument type=%d"
-#define MSG_BAD_EXP_OPER "Bad expression operator=%d"
-#define MSG_BAD_FETCH_RC "Unexpected Fetch return code %d"
-#define MSG_BAD_FIELD_FMT "Invalid field format %c for %s"
#define MSG_BAD_FIELD_RANK "Invalid field rank %d for column %s"
#define MSG_BAD_FIELD_TYPE "Bad type field %s"
#define MSG_BAD_FILE_HANDLE "Invalid File Handle: %s"
-#define MSG_BAD_FILE_LIST "Bad Filelist section"
#define MSG_BAD_FILTER "Bad filter: Opc=%d B_T=%d %d Type=%d %d"
#define MSG_BAD_FILTER_CONV "Bad filter conversion, B_T=%d,%d"
-#define MSG_BAD_FILTER_LINK "Bad filter link operator %d"
#define MSG_BAD_FILTER_OP "Invalid filter operator %d"
-#define MSG_BAD_FILTEST_OP "Invalid operator %d %d for FilTest"
#define MSG_BAD_FLD_FORMAT "Bad format for field %d of %s"
#define MSG_BAD_FLD_LENGTH "Field %s too long (%s --> %d) line %d of %s"
-#define MSG_BAD_FLOAT_CONV "Invalid convert of float array"
-#define MSG_BAD_FPARM_NEXT "Coparm: FPARM with non-null Next"
#define MSG_BAD_FREQ_SET "Bad frequency setting for column %s"
-#define MSG_BAD_FUNC_ARG "Funcarg of type %d not implemented"
-#define MSG_BAD_FUNC_ARGTYP "Bad Function argument type=%d"
#define MSG_BAD_FUNC_MODE "%s: invalid mode %d"
-#define MSG_BAD_GENRE "Genre is invalid"
-#define MSG_BAD_GETVIEW_RET "GetView: invalid return type %d"
#define MSG_BAD_HANDLE_VAL "Invalid handle value"
-#define MSG_BAD_HAV_FILTER "Having filter found in a Vanilla query"
-#define MSG_BAD_HAV_FILTYPE "Bad filter type for Having Clause"
#define MSG_BAD_HEADER "File %s: Header corrupted"
-#define MSG_BAD_HEADER_VAL "Invalid header value %d"
#define MSG_BAD_HEAD_END "Can't read end of header"
-#define MSG_BAD_INDEX_COL "Bad column %s for index %s"
-#define MSG_BAD_INDEX_DEF "Bad index definition for %s"
#define MSG_BAD_INDEX_FILE "Wrong index file %s"
-#define MSG_BAD_INDEX_PART "Bad index part for %s"
-#define MSG_BAD_INPUT "Incorrect input"
-#define MSG_BAD_IN_ARGTYPE "Bad argument type for IN operator"
-#define MSG_BAD_IN_ENDING "Error: wrong end of IN string"
-#define MSG_BAD_IN_STRING "IN string begins or ends with invalid char %c ... %c"
-#define MSG_BAD_JCOL_TYPE "Logical JCT error: Unmatched column types"
-#define MSG_BAD_JOIN_EXP "Invalid expression used in join"
-#define MSG_BAD_JOIN_FILTER "Improper join filter"
-#define MSG_BAD_JOIN_OP "Bad join operator %d"
-#define MSG_BAD_LANG_SIZE "Wrong Language file size %d"
#define MSG_BAD_LINEFLD_FMT "Bad format line %d field %d of %s"
#define MSG_BAD_LINE_LEN "Line length not equal to Lrecl"
-#define MSG_BAD_LIST_TYPE "Invalid list type=%d"
-#define MSG_BAD_LOCALE "Invalid locale %s"
-#define MSG_BAD_LOCDFON_ARG "Bad parameter for LOCDFON"
-#define MSG_BAD_LOCNODE_USE "Unexpected use of LOCNODE"
#define MSG_BAD_LRECL "Table/File lrecl mismatch (%d,%hd)"
-#define MSG_BAD_MAX_HAVING "MAXTMP value too small for Having"
-#define MSG_BAD_MAX_NREC "MaxRec=%d doesn't match MaxBlk=%d Nrec=%d"
-#define MSG_BAD_MAX_PARAM "Bad parameters for setting max value"
-#define MSG_BAD_MAX_SETTING "Bad max setting '%c'"
-#define MSG_BAD_MERGE_TYPE "Type %d cannot be merged"
#define MSG_BAD_NODE_TYPE "Bad type %d for table node"
#define MSG_BAD_OFFSET_VAL "Invalid null offset value for a CSV table"
#define MSG_BAD_OPEN_MODE "Invalid open mode %d"
-#define MSG_BAD_OPERATOR "Invalid operator %s"
-#define MSG_BAD_ORDER_MODE "Bad ordering mode %c"
-#define MSG_BAD_ORDER_TYPE "Type=%d invalid for order item"
-#define MSG_BAD_OUTER_JOIN "Invalid outer join on child table"
-#define MSG_BAD_PAD_ARGTYP "Bad argument type for Pad or Justify"
-#define MSG_BAD_PARAMETERS "%.8s: Bad parameters"
#define MSG_BAD_PARAM_TYPE "%.8s: Bad parameter type=%d"
#define MSG_BAD_PARM_COUNT "Parameter count mismatch"
-#define MSG_BAD_PHASE_NUM "Out of range phrase number %d"
-#define MSG_BAD_PHRASE_NB "out of range phrase number %d rc=%d\n"
-#define MSG_BAD_POS_CODE "Invalid POS code %d"
-#define MSG_BAD_POS_TYPE "Invalid POS code type %d"
-#define MSG_BAD_PROJNUM "Bad projnum %d for column %s"
-#define MSG_BAD_QUERY_OPEN "Query open invalid mode %d"
-#define MSG_BAD_QUERY_TYPE "Invalid query type %d for %s"
#define MSG_BAD_QUOTE_FIELD "Missing ending quote in %s field %d line %d"
#define MSG_BAD_READ_NUMBER "Wrong number %d of values read from %s"
#define MSG_BAD_RECFM "Invalid recfm type %d for DOSCOL"
#define MSG_BAD_RECFM_VAL "Bad Recfm value %d"
-#define MSG_BAD_RESULT_TYPE "Bad result type %d for %s"
-#define MSG_BAD_RETURN_TYPE "Bad returned type %d"
-#define MSG_BAD_ROW_VALIST "Invalid ROW list of values"
-#define MSG_BAD_ROW_VALNB "Number of values in list mismatch"
-#define MSG_BAD_SCF_ARGTYPE "Argument %d type=%s invalid for %s"
-#define MSG_BAD_SEM_DOMAIN "Invalid domain .%d"
-#define MSG_BAD_SETTINGS "Some settings do not match table type"
#define MSG_BAD_SET_CASE "Cannot set sensitive an insensitive array"
#define MSG_BAD_SET_STRING "Invalid SetValue from string"
-#define MSG_BAD_SET_TYPE "Bad set type %hd"
-#define MSG_BAD_SPECIAL_CMD "Ill formed special command"
#define MSG_BAD_SPECIAL_COL "Bad special column %s"
#define MSG_BAD_SPEC_COLUMN "Special column invalid for this table type"
-#define MSG_BAD_SQL_PARAM "Invalid SQL parameter for FindColblk"
-#define MSG_BAD_SUBLST_TYPE "Coparm: bad sub-list type %d"
-#define MSG_BAD_SUBSEL_IN_X "Bad sub-select in expression"
-#define MSG_BAD_SUBSEL_TYPE "Bad Sub-Select returned type %d"
-#define MSG_BAD_SUB_RESULT "Undefined Sub-Select function result"
-#define MSG_BAD_SUB_SELECT "Bad sub-select in function argument"
-#define MSG_BAD_TABLE_LINE "Illegal or truncated line '%s' in Tables section"
-#define MSG_BAD_TABLE_LIST "Table %s not found in table list"
#define MSG_BAD_TABLE_TYPE "Bad type %s for table %s"
-#define MSG_BAD_TEST_TYPE "Array BlockTest type mismatch %s %s"
-#define MSG_BAD_TRIM_ARGTYP "Bad argument type for Trim"
-#define MSG_BAD_TYPE_FOR_IN "Arg type mismatch for IN function"
-#define MSG_BAD_TYPE_FOR_S "Incorrect type %d for %s(%d)"
#define MSG_BAD_TYPE_LIKE "Bad operand(%d) type=%d for LIKE"
-#define MSG_BAD_UPD_COR "Qualifier %s of column %s not related to the updated table %s"
-#define MSG_BAD_USERBLK_LEN "User block write length error"
-#define MSG_BAD_USETEMP "Bad usetemp setting '%s'"
-#define MSG_BAD_USETEMP_VAL "Bad Usetemp value %d"
#define MSG_BAD_VALBLK_INDX "Out of range valblock index value"
#define MSG_BAD_VALBLK_TYPE "Invalid value block type %d"
#define MSG_BAD_VALNODE "Bad type %d for column %s value node"
#define MSG_BAD_VALUE_TYPE "Invalid value type %d"
#define MSG_BAD_VAL_UPDATE "Don't know which %s value to update"
-#define MSG_BAD_VIEW_OPEN "View open invalid mode %d"
-#define MSG_BAD_XMODE_VAL "Bad execution mode %d"
-#define MSG_BAD_XOBJ_TYPE "Bad Xobject type %d"
#define MSG_BAS_NS_LIST "Invalid namespaces list format"
#define MSG_BIN_F_TOO_LONG "Value too long for field %s (%d --> %d)"
#define MSG_BIN_MODE_FAIL "Set binary mode failed: %s"
#define MSG_BLKTYPLEN_MISM "Non matching block types/lengths in SetValue"
#define MSG_BLK_IS_NULL "Blk is NULL"
-#define MSG_BLOCK_NO_MATCH "Non matching block"
#define MSG_BREAKPOINT "Breakpoint"
-#define MSG_BUFF_TOO_SMALL "GetColData: Buffer is too small"
-#define MSG_BUFSIZE_ERROR "Error getting screen buffer size"
-#define MSG_BUILDING_GROUPS "Building groups"
-#define MSG_BUILD_DIST_GRPS "Building groups distinct"
#define MSG_BUILD_INDEX "Building index %s on %s"
-#define MSG_BXP_NULL "Bxp NULL in PUTFON"
#define MSG_CANNOT_OPEN "Cannot open %s"
-#define MSG_CD_ONE_STEP "Count Distinct must be processed in one step"
-#define MSG_CD_ORDER_ERROR "Ordering error in Count Distinct"
-#define MSG_CHECKING_ROWS "Checking rows to update"
-#define MSG_CHECK_LEVEL "Checking level reset to %u"
#define MSG_CHSIZE_ERROR "chsize error: %s"
-#define MSG_CLN_NOT_IN_JOIN "Column C%d not found in join"
-#define MSG_CNTDIS_COL_LOST "Count Distinct column lost"
-#define MSG_COLIST_BAD_TYPE "Invalid Colist element type=%d"
-#define MSG_COLNAM_TOO_LONG "Column name too long"
-#define MSG_COLSEC_TOO_BIG "Column section too big in table %s (%d)"
-#define MSG_COLS_REDUCED " (reduced by Maxcol)"
-#define MSG_COLUMN_ERROR "Column error"
-#define MSG_COLUMN_MISMATCH "Column %s mismatch"
-#define MSG_COLUMN_NOT_KEY "Join column R%d.%s is not a key"
#define MSG_COL_ALLOC_ERR "Cannot allocate column node"
-#define MSG_COL_ALLOC_ERROR "Memory allocation error for column %d"
-#define MSG_COL_HAS_NO_DEF "Column %s has no definition"
-#define MSG_COL_INVAL_TABLE "Column %s.%s not found in table %s alias %s"
#define MSG_COL_ISNOT_TABLE "Column %s is not in table %s"
-#define MSG_COL_NB_MISM "Number of columns mismatch"
-#define MSG_COL_NOTIN_GRPBY "Column %s not in Group By list"
-#define MSG_COL_NOTIN_TABLE "Column %s is not in any table"
-#define MSG_COL_NOTIN_UPDT "%s does not belong to the updated table %s"
-#define MSG_COL_NOT_CODED "Column %s is not coded"
-#define MSG_COL_NOT_EXIST "Column %s is not in table %s"
-#define MSG_COL_NOT_FOUND "Column %s does not exist in %s"
-#define MSG_COL_NOT_IN_DB "Column %s of table %s not in DB"
-#define MSG_COL_NOT_IN_JOIN "Column %s not found in join"
#define MSG_COL_NOT_SORTED "Column %s of table %s is not sorted"
#define MSG_COL_NUM_MISM "Number of columns mismatch"
-#define MSG_COL_USED_TWICE "Column %s linked twice ???"
-#define MSG_COMPUTE_ERROR "Error in Compute, op=%d"
-#define MSG_COMPUTE_NIY "Compute not implemented for token strings"
-#define MSG_COMPUTING "Computing"
-#define MSG_COMPUTING_DIST "Computing Distinct"
-#define MSG_COMPUTING_FUNC "Computing function(s)"
#define MSG_COM_ERROR "Com error"
#define MSG_CONCAT_SUBNODE "Cannot concatenate sub-nodes"
-#define MSG_CONNECTED "Connected"
#define MSG_CONNECT_CANCEL "Connection cancelled by user"
-#define MSG_CONNECT_ERROR "Error %d connecting to %s"
-#define MSG_CONN_CLOSED "%s(%d) closed"
-#define MSG_CONN_CREATED "Connection %s created"
-#define MSG_CONN_DROPPED "Connection %s dropped"
-#define MSG_CONN_OPEN "%s(%d) open (%s)"
-#define MSG_CONN_SUC_OPEN "%s(%d) successfully open"
#define MSG_CONTROL_C_EXIT "Control C exit"
-#define MSG_COPY_BAD_PHASE "List copy invalid in phase %d"
-#define MSG_COPY_INV_TYPE "Coparm: type not supported %d"
-#define MSG_CORREL_NO_QRY "Correlated subqueries cannot be of QRY type"
-#define MSG_CREATED_PLUGDB " Created by PlugDB %s "
-#define MSG_CURSOR_SET "Cursor set to %d"
-#define MSG_DATABASE_ACTIVE "Database %s activated"
#define MSG_DATABASE_LOADED "Database %s loaded"
-#define MSG_DATA_IS_NULL "ExecSpecialCmd: data is NULL"
#define MSG_DATA_MISALIGN "Datatype misalignment"
#define MSG_DBASE_FILE "dBASE dbf file: "
-#define MSG_DB_ALREADY_DEF "Database %s already defined"
-#define MSG_DB_ALTERED "Database altered"
-#define MSG_DB_CREATED "Database %s created"
-#define MSG_DB_NOT_SPEC "Database not specified"
-#define MSG_DB_REMOVED "Database %s removed from DB list"
-#define MSG_DB_SORT_ERROR "Error in DB sort"
-#define MSG_DB_STOPPED "Database %s stopped"
-#define MSG_DEBUG_NOT_ACTIV "Debug is not active"
-#define MSG_DEBUG_SET_INV "Invalid Debug set %c"
#define MSG_DEF_ALLOC_ERROR "Error allocating %s DEF class"
-#define MSG_DELETING_ROWS "Deleting rows"
#define MSG_DEL_FILE_ERR "Error deleting %s"
#define MSG_DEL_READ_ERROR "Delete: read error req=%d len=%d"
#define MSG_DEL_WRITE_ERROR "Delete: write error: %s"
#define MSG_DEPREC_FLAG "Deprecated option Flag, use Coltype"
-#define MSG_DICTIONARY "Dictionary "
-#define MSG_DIRECT_VARTOK "Direct access of variable token rules not implemented"
-#define MSG_DISCONNECTED "Disonnected"
-#define MSG_DISTINCT_ERROR "More than one DISTINCT functional item"
-#define MSG_DISTINCT_ROWS "Selecting distinct rows"
-#define MSG_DISTINCT_VALUES "Retrieving distinct values"
-#define MSG_DIS_NOHEAD_JOIN "Distinct join on not heading table"
#define MSG_DLL_LOAD_ERROR "Error %d loading module %s"
-#define MSG_DOMAIN_EMPTY "Domain %s is empty"
-#define MSG_DOMAIN_ERROR "Column %s domain(%s)/value(%s) mismatch"
-#define MSG_DOMAIN_FULL "Domain %s is full (max=%d)"
-#define MSG_DOM_FILE_ERROR "Domain file %s not found"
#define MSG_DOM_NOT_SUPP "MS-DOM not supported by this version"
-#define MSG_DOM_OPEN_ERROR "Domain open error: %s"
-#define MSG_DOM_READ_ERROR "Domain read error %d: %s"
-#define MSG_DOM_READ_ONLY "Domain table %s is read only"
-#define MSG_DOM_WRITE_ERROR "Domain write error %d: %s"
-#define MSG_DONE "Done, rc=%d"
-#define MSG_DOSALMEM_NOMEM "Memory Allocation failed, not enough memory"
-#define MSG_DROP_DB_ERR "Drop database %s failed"
-#define MSG_DSORT_LOG_ERROR "Logical error in Kindex distinct Sort"
-#define MSG_DUMMY_NO_COLS "Dummy tables must have no columns"
-#define MSG_DUPLICAT_COUNT "Count on more than one column"
-#define MSG_DUP_COL_NAME "Duplicate column name %s"
-#define MSG_DUP_PROJNUM "Duplicated projnum %d for column %s"
#define MSG_DVAL_NOTIN_LIST "Value %s not found in distinct values list of column %s"
#define MSG_EMPTY_DOC "Empty document"
#define MSG_EMPTY_FILE "%s empty file %s: "
-#define MSG_ENDSTR_MISMATCH "No match between end of string and end of node"
-#define MSG_END_OF_DELETE "%d line(s) deleted in %.2lf sec"
-#define MSG_END_OF_INSERT "%d line(s) inserted in %.2lf sec"
-#define MSG_END_OF_QUERY "%d line(s) retrieved in %.2lf sec"
-#define MSG_END_OF_UPDATE "%d line(s) updated in %.2lf sec"
#define MSG_EOF_AFTER_LINE "EOF after line %d"
#define MSG_EOF_INDEX_FILE "EOF while reading index file"
-#define MSG_ERASED " and erased"
-#define MSG_ERASE_FAILED " (erase failed)"
-#define MSG_ERROR "Error"
#define MSG_ERROR_IN_LSK "Error %d in lseek64"
#define MSG_ERROR_IN_SFP "Error %d in SetFilePointer"
-#define MSG_ERROR_NO_PARM "No parameter (valid only with %.8s.1 and %.8s.5)"
-#define MSG_ERROR_OPENING "Error opening: "
-#define MSG_ERR_NUM_GT_MAX "Error: Numval (%d) greater than Maxnum (%d)"
#define MSG_ERR_READING_REC "Error reading record %d of %s"
-#define MSG_ERR_RET_RULE "error return, rule=%u"
-#define MSG_ERR_RET_TYPE "error return, type=%d"
-#define MSG_EVAL_EXPIRED "Evaluation version expired"
-#define MSG_EVAL_ONLY "I agree to use this Dll for evaluation purpose only"
-#define MSG_EXECUTING "Executing"
-#define MSG_EXECUTION_ERROR "Execution error"
-#define MSG_EXEC_MODE_IS "Execution mode is %s"
-#define MSG_EXEC_MODE_RESET ". Mode reset to Execute"
-#define MSG_EXEC_MODE_SET "Execution mode set to %s"
-#define MSG_EXIT_EVAL_ERR "Error evaluating Exit"
-#define MSG_EXIT_FROM_LANG "Exit from language %s version %d.%d"
#define MSG_FAIL_ADD_NODE "Failed to add %s table node"
-#define MSG_FETCHING_DATA "Fetching data"
-#define MSG_FETCHING_ROWS "Fetching rows"
#define MSG_FETCH_NO_RES "Fetch: No Result Set"
#define MSG_FIELD_TOO_LONG "Value too long for field %d line %d"
#define MSG_FILELEN_ERROR "Error in %s for %s"
-#define MSG_FILE_CLOSE_ERR "Error %d occurred closing the file"
#define MSG_FILE_IS_EMPTY "File %s is empty"
#define MSG_FILE_MAP_ERR "File mapping error"
#define MSG_FILE_MAP_ERROR "CreateFileMapping %s error rc=%d"
-#define MSG_FILE_NOT_FOUND "File %s cannot be found"
#define MSG_FILE_OPEN_YET "File %s already open"
#define MSG_FILE_UNFOUND "File %s not found"
-#define MSG_FILGRP_NO_TABLE "Missing table %d for a filter group"
-#define MSG_FILTER_ATTACH "Filter passed to Attach"
-#define MSG_FILTER_NO_TABLE "Missing first table for a filter"
-#define MSG_FIND_BAD_TYPE "Array Find type mismatch %s %s"
-#define MSG_FIX_OVFLW_ADD "Fixed Overflow on add"
-#define MSG_FIX_OVFLW_TIMES "Fixed Overflow on times"
-#define MSG_FIX_UNFLW_ADD "Fixed Underflow on add"
-#define MSG_FIX_UNFLW_TIMES "Fixed Underflow on times"
#define MSG_FLD_TOO_LNG_FOR "Field %d too long for %s line %d of %s"
-#define MSG_FLTST_NO_CORREL "FilTest should be called only for correlated subqueries"
#define MSG_FLT_BAD_RESULT "Float inexact result"
#define MSG_FLT_DENORMAL_OP "Float denormal operand"
#define MSG_FLT_INVALID_OP "Float invalid operation"
@@ -380,11 +112,8 @@
#define MSG_FLT_UNDERFLOW "Float underflow"
#define MSG_FLT_ZERO_DIVIDE "Float divide by zero"
#define MSG_FMT_WRITE_NIY "Writing %s files is not implemented yet"
-#define MSG_FNC_NOTIN_SLIST "Order aggregate function not in select list"
-#define MSG_FORMAT_ERROR "Formating error"
#define MSG_FOXPRO_FILE "FoxPro file: "
#define MSG_FPUTS_ERROR "fputs error: %s"
-#define MSG_FSBPARP_NULL "PUTFON: fsbparp is NULL"
#define MSG_FSEEK_ERROR "fseek error: %s"
#define MSG_FSETPOS_ERROR "fseek error for i=%d"
#define MSG_FTELL_ERROR "ftell error for recd=%d: %s"
@@ -392,360 +121,113 @@
#define MSG_FUNC_ERRNO "Error %d in %s"
#define MSG_FUNC_ERROR "Error in %s"
#define MSG_FUNC_ERR_S "%s error: %s"
-#define MSG_FUNC_REF_DEL "Reference to a defined function (rule %d) which has been deleted"
#define MSG_FWRITE_ERROR "fwrite error: %s"
-#define MSG_GETCWD_ERR_NO "?getcwd %s errno=%d"
-#define MSG_GETFILESIZE_ERR "Error %d in GetFileSize"
#define MSG_GET_DIST_VALS "Retrieving distinct values from "
-#define MSG_GET_ERROR "Error in %s (column %d)"
#define MSG_GET_FUNC_ERR "Error getting function %s: %s"
-#define MSG_GET_NAME_ERR "Error getting SYS table names"
#define MSG_GLOBAL_ERROR "Cannot allocate Global (size=%d)\n"
-#define MSG_GRAM_ALLOC_ERR "Allocation error in Grammar Up"
-#define MSG_GRAM_MISMATCH "Warning: GRAMMAR version mismatch (saved under GRAMMAR v%u)"
-#define MSG_GRAM_SUBSET_ERR "Grammar dictionary Subset error"
-#define MSG_GRBY_TAB_NOTIMP "Group by filtered joined table not implemented"
-#define MSG_GROUPBY_NOT_ALL "Group By must include all non-functional select items"
-#define MSG_GROUP_ON_FUNC "Invalid group by on functional column"
-#define MSG_GRP_COL_MISM "Column mismatch in groups"
-#define MSG_GRP_LIST_MISMAT "Grouping does not match select list"
#define MSG_GUARD_PAGE "Guard page violation"
#define MSG_GZOPEN_ERROR "gzopen %s error %d on %s"
-#define MSG_GZPUTS_ERROR "gzputs error: %s"
-#define MSG_HANDLE_IS_NULL "%s is NULL: last error: %d"
-#define MSG_HARRY_COMP_NIY "Compute not implemented for coded strings"
-#define MSG_HAVING_FILTER "Filtering by Having"
-#define MSG_HBUF_TOO_SMALL "Buffer(%d) too small for header(%d)"
-#define MSG_HEAD_OPEN_ERROR "Error opening header file %s"
-#define MSG_HEAD_READ_ERROR "Error reading header file %s"
-#define MSG_HEAD_WRITE_ERR "Error writing header file %s"
-#define MSG_HI_OFFSET_ERR "High offet is not 0"
-#define MSG_HUGE_DEFAULT "Huge defaults to %d"
-#define MSG_HUGE_WARNING_1 "Huge memory not 16-bit compatible for %d\n"
-#define MSG_HUGE_WARNING_2 "Unpredictable results may occur\n"
-#define MSG_IDLE "Idle"
#define MSG_ILLEGAL_INSTR "Illegal instruction"
#define MSG_ILL_FILTER_CONV "Filtering implies an illegal conversion"
-#define MSG_INDEX_CREATED "Index %s created on %s"
-#define MSG_INDEX_DEF_ERR "Error storing index definition for %s"
-#define MSG_INDEX_DROPPED "Index %s dropped from %s"
-#define MSG_INDEX_INIT_ERR "Cannot initialize index %s"
-#define MSG_INDEX_NOT_DEF "Index %s has no definition"
#define MSG_INDEX_NOT_UNIQ "Index is not unique"
-#define MSG_INDEX_ONE_SAVE "Indexes are saved in one unique file"
-#define MSG_INDEX_SEP_SAVE "Indexes are saved in separate files"
#define MSG_INDEX_YET_ON "Index %s already exists on %s"
-#define MSG_INDX_ALL_DROP "All indexes dropped from %s"
#define MSG_INDX_COL_NOTIN "Index column %s is not in table %s"
#define MSG_INDX_EXIST_YET "Index entry already exists"
-#define MSG_INIT_ERROR "Error initializing %s"
#define MSG_INIT_FAILED "Failed to initialize %s processing"
-#define MSG_INPUT "Input: "
-#define MSG_INPUT_KEYBD_YET "Input already from keyboard"
-#define MSG_INSERTING "Inserting: "
-#define MSG_INSERT_ERROR "Insert error: file %s in use"
-#define MSG_INSERT_MISMATCH "Column/Value list mismatch"
-#define MSG_INTERNAL "internal"
#define MSG_INT_COL_ERROR "Internal error for index column %s"
#define MSG_INT_OVERFLOW "Integer overflow"
#define MSG_INT_ZERO_DIVIDE "Integer divide by zero"
-#define MSG_INVALID_BIP "Invalid Bip .%d"
#define MSG_INVALID_DISP "Invalid disposition"
#define MSG_INVALID_FTYPE "SBV: invalid Ftype %d"
#define MSG_INVALID_HANDLE "Invalid handle"
#define MSG_INVALID_OPER "Invalid operator %d for %s"
-#define MSG_INVALID_OPTION "Invalid option %s"
#define MSG_INV_COLUMN_TYPE "Invalid type %d for column %s"
-#define MSG_INV_COL_DATATYP "Invalid Data Type %d for column %d"
-#define MSG_INV_COL_NUM "Invalid column %d"
#define MSG_INV_COL_TYPE "Invalid column type %s"
-#define MSG_INV_CONC_BIP "Invalid bip (only valid are : %.8s.0 .1 and .5)"
-#define MSG_INV_DATA_PATH "Invalid database path %s"
#define MSG_INV_DEF_READ "Invalid deferred Read rc=%d"
#define MSG_INV_DIRCOL_OFST "Invalid DIRCOL offset %d"
-#define MSG_INV_DOMAIN_TYPE "Invalid type %d"
-#define MSG_INV_FILTER "Filter met in %s"
-#define MSG_INV_FNC_BUFTYPE "FNC: invalid argument type %d for %s"
-#define MSG_INV_INFO_TYPE "Invalid catalog info type %d"
-#define MSG_INV_INIPATH "Invalid inipath "
#define MSG_INV_MAP_POS "Invalid map position"
-#define MSG_INV_OPERATOR "invalid operator %d\n"
-#define MSG_INV_PARAMETER "Invalid parameter %s"
-#define MSG_INV_PARM_TYPE "Invalid parameter type"
-#define MSG_INV_QUALIFIER "Invalid qualifier '%s'"
-#define MSG_INV_QUERY_TYPE "Invalid query type %d"
#define MSG_INV_RAND_ACC "Invalid random access to non optimized table"
#define MSG_INV_REC_POS "Invalid record position"
#define MSG_INV_RESULT_TYPE "Invalid result type %s"
-#define MSG_INV_SET_SUBTYPE "Invalid SetFormat subtype %d"
-#define MSG_INV_SPECIAL_CMD "%s: Invalid special command"
-#define MSG_INV_SUBTYPE "Invalid subtype %s"
-#define MSG_INV_TOK_DOMAIN "Invalid token domain %s"
-#define MSG_INV_TOPSEM_CMD "Invalid TopSem command %c"
-#define MSG_INV_TRANSF_USE "Invalid use in transformation rule"
-#define MSG_INV_TYPE_SPEC "Invalid type specification (%.8s.%d)"
#define MSG_INV_UPDT_TABLE "Table %s invalid for update"
-#define MSG_INV_VALUE_LIST "Invalid Insert value list"
-#define MSG_INV_WHERE_JOIN "Invalid where clause in join query"
-#define MSG_INV_WORK_PATH "Invalid work path %s"
-#define MSG_IN_ARGTYPE_MISM "Argument type mismatch for IN expression"
-#define MSG_IN_USE " and in use"
#define MSG_IN_WITHOUT_SUB "IN or EXISTS without array or subquery"
-#define MSG_IS_NOT_CONN "%s is not a connection definition"
-#define MSG_JCT_MISS_COLS "Missing columns for a JCT table"
-#define MSG_JCT_MISS_TABLE "Missing joined table for JCT"
-#define MSG_JCT_NO_FILTER "Virtual JCT tables cannot be filtered"
-#define MSG_JCT_NO_KEY "Logical JCT error: no key"
-#define MSG_JOIN_KEY_NO_COL "Join key is not a column"
#define MSG_KEY_ALLOC_ERR "Error allocating Key offset block"
#define MSG_KEY_ALLOC_ERROR "Memory allocation error, Klen=%d n=%d"
-#define MSG_LANGUAGE_QUIT "%s quit"
-#define MSG_LANG_ACTIVE "Language %s active"
-#define MSG_LANG_ALLOC_FAIL "PlugInitLang: Lang block allocation failed"
-#define MSG_LANG_ALREADY_UP "Edited language is already there"
-#define MSG_LANG_BAD_SAVE "Language %s may be incorrectly saved"
-#define MSG_LANG_NOT_FREED "Language %s cannot be freed (not in main chain)"
-#define MSG_LANG_SAVED "Language %s saved"
-#define MSG_LANG_WR_LEN_ERR "Lang block write length error"
-#define MSG_LDF_ALLOC_ERROR "LdfBlock allocation error"
-#define MSG_LDF_RN_MISMATCH "LDF rule number mismatch"
-#define MSG_LDF_WLEN_ERROR "LdfData write length error"
-#define MSG_LDF_W_LEN_ERROR "LdfData write length error"
-#define MSG_LIC_NO_MYSQL "Your current license does not enable using the MySQL table type"
-#define MSG_LINEAR_ERROR "Linearization error"
-#define MSG_LINE_LENGTH "Output line length reset to %d"
-#define MSG_LINE_MAXLIN "Max number of work lines reset to %d"
-#define MSG_LINE_MAXRES "Max number of output lines reset to %d"
-#define MSG_LINE_MAXTMP "Max number of intermediate lines reset to %d"
#define MSG_LINE_TOO_LONG "New line is too long"
-#define MSG_LINJOINDB_ERROR "System error: incorrect call to LinJoinDB"
#define MSG_LIST "--List--"
-#define MSG_LNG_NOT_IN_LIST "Language %s not found in attached list"
-#define MSG_LOADING_DB "Loading DB Description"
#define MSG_LOADING_FAILED "Loading of %s failed"
-#define MSG_LOAD_CDLL_ERROR "Error loading ConnDll: rc=%d"
-#define MSG_LOCSTRG_TOO_BIG "LOCSTRG: n too big ? (%d)\n"
-#define MSG_LOGICAL_ERROR "%s: Logical error"
#define MSG_LRECL_TOO_SMALL "Lrecl too small (headlen = %d)"
-#define MSG_MAC_NO_DELETE "Delete not enabled for MAC tables"
-#define MSG_MAC_NO_INDEX "No direct access to MAC tables"
-#define MSG_MAC_READ_ONLY "MAC tables are read only"
-#define MSG_MAC_WIN_ONLY "MAC tables are Windows only"
#define MSG_MAKE_EMPTY_FILE "Making empty file %s: %s"
#define MSG_MAKING "Making"
-#define MSG_MAKING_DISTINCT "Making distinct groups"
#define MSG_MALLOC_ERROR "Memory allocation failed: %s returned Null"
-#define MSG_MALLOC_NULL "malloc returned Null"
-#define MSG_MAP_NO_MORE "Type %s no more supported"
-#define MSG_MAP_OBJ_ERR "Error %d occurred closing the mapping object"
-#define MSG_MAP_VEC_ONLY "MAP Insert is for VEC Estimate tables only"
#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s error rc=%d"
#define MSG_MAXSIZE_ERROR "Cannot calculate max size on open table"
-#define MSG_MAXTMP_TRUNCATE "Intermediate results truncated by maxtmp=%d"
-#define MSG_MAX_BITMAP "Max opt bitmap size reset to %d"
-#define MSG_MEMSIZE_TOO_BIG "Error: memsize (%d) too big for length (%d)"
#define MSG_MEM_ALLOC_ERR "Memory allocation error, %s size=%d"
#define MSG_MEM_ALLOC_ERROR "Memory allocation error"
-#define MSG_MEM_ALLOC_YET "Memory already allocated"
-#define MSG_METAFILE_NOTFND "Grammar Meta file not found"
#define MSG_MISPLACED_QUOTE "Misplaced quote in line %d"
-#define MSG_MISSING "Missing: Value=%p Argval=%p Builtin=%d"
#define MSG_MISSING_ARG "Missing argument for operator %d"
-#define MSG_MISSING_COL_DEF "Missing column definition"
-#define MSG_MISSING_CONNECT "Missing connect string"
-#define MSG_MISSING_EOL "Missing endline character in %s"
#define MSG_MISSING_FIELD "Missing field %d in %s line %d"
#define MSG_MISSING_FNAME "Missing file name"
#define MSG_MISSING_NODE "Missing %s node in %s"
-#define MSG_MISSING_POS "Missing POS code"
#define MSG_MISSING_ROWNODE "Can't find RowNode for row %d"
-#define MSG_MISSING_SERV_DB "Missing server and/or database string"
-#define MSG_MISS_LEAD_COL "Missing leading index column %s"
-#define MSG_MISS_NAME_LRECL "Missing file name and/or lrecl"
-#define MSG_MISS_TABLE_LIST "Missing table list"
-#define MSG_MISS_VCT_ELMT "Missing VCT block size (Elements)"
#define MSG_MIS_TAG_LIST "Missing column tag list"
-#define MSG_MKEMPTY_NIY "MakeEmptyFile: not yet implemented for Huge and Unix"
-#define MSG_MOVE_INV_TYPE "MOVPARM: Invalid parameter type %d"
-#define MSG_MULT_DISTINCT "Distinct is specified more than once"
-#define MSG_MULT_KEY_ERROR "Multiple key error k=%d n=%d"
#define MSG_MUL_MAKECOL_ERR "Tabmul MakeCol logical error"
-#define MSG_MYSQL_CNC_OFF "MySQL connection is closed"
-#define MSG_MYSQL_CNC_ON "MySQL connection is established"
-#define MSG_MYSQL_NOT_SUP "MySQL not supported by this version"
-#define MSG_MY_CNC_ALREADY "MySQL connection already active"
#define MSG_NAME_CONV_ERR "Error converting node name"
-#define MSG_NAME_IS_USED "Name %s already in use"
-#define MSG_NCOL_GT_MAXCOL "Too many columns (%d > %d max)"
-#define MSG_NEW_CHAR_NULL "new char(%d) returned Null"
#define MSG_NEW_DOC_FAILED "Cannot create new document"
#define MSG_NEW_RETURN_NULL "New returned Null in PlugEvalLike"
-#define MSG_NEW_TABLE_ERR "Unable to retrieve new table %s"
#define MSG_NEXT_FILE_ERROR "Couldn't find next file. rc=%d"
-#define MSG_NODEF_FROM_VIEW "Cannot define a table from a view"
-#define MSG_NODE_FOR_CHAR "Node %s found when looking for character"
-#define MSG_NODE_SUBSET_ERR "Node %d Subset error"
#define MSG_NONCONT_EXCEPT "Noncontinuable exception"
-#define MSG_NON_DUP_HAVING "Having clause in non/dup functional query"
-#define MSG_NON_EVAL_SEM "Sem not evaluated: p_no=%d"
#define MSG_NOP_ZLIB_INDEX "Cannot do indexing on non optimized zlib table"
#define MSG_NOT_A_DBF_FILE "Not a dBASE dbf file "
-#define MSG_NOT_ENOUGH_COLS "Not enough columns in %s"
-#define MSG_NOT_ENOUGH_MEM "Not enough memory to perform this operation"
#define MSG_NOT_FIXED_LEN "File %s is not fixed length, len=%d lrecl=%d"
-#define MSG_NOT_IMPLEMENTED "Not implemented: %.8s"
-#define MSG_NOT_IMPL_JOIN "Not implemented for Join"
-#define MSG_NOT_IMPL_SET "Not implemented for set operators"
-#define MSG_NOT_IMPL_YET "Not implemented yet"
-#define MSG_NOT_LINEARIZED "Table tree was not linearized"
-#define MSG_NOT_MODIFIABLE " (not modifiable)"
#define MSG_NO_0DH_HEAD "No 0Dh at end of header (dbc=%d)"
-#define MSG_NO_ACTIVE_APPL "No active application"
#define MSG_NO_ACTIVE_DB "No active database"
-#define MSG_NO_ACTIVE_UDIC "No active user dictionary"
-#define MSG_NO_AGGR_FUNC "Aggregated function %d not allowed here"
-#define MSG_NO_AREA_FILE "Area file not found"
-#define MSG_NO_AVAIL_RESULT "No result available"
-#define MSG_NO_BIG_DELETE "Partial delete not yet implemented for Huge files"
#define MSG_NO_CHAR_FROM "Cannot return char value from type %d"
-#define MSG_NO_CLUSTER_COL "No clustered columns"
-#define MSG_NO_COL_ADDING "Cannot add new column(s) to old definition"
-#define MSG_NO_COL_DEF_AS "Column definitions cannot be used with AS Select"
-#define MSG_NO_COL_FOUND "No column found in section %s"
-#define MSG_NO_COL_IN_TABLE "Column %d not in table %s"
-#define MSG_NO_COL_SECTION "Missing column section for table %s"
-#define MSG_NO_CONNECT_ADDR "No connexion address provided"
-#define MSG_NO_CONST_FILTER "Constant filters not implemented"
-#define MSG_NO_CURLY_BRKT "No closing curly bracket"
-#define MSG_NO_DATABASE "Database %s not found"
#define MSG_NO_DATE_FMT "No date format for valblock of type %d"
-#define MSG_NO_DBF_INSERT "Insert not supported yet for GDF files"
#define MSG_NO_DEF_FNCCOL "Cannot find default function column"
#define MSG_NO_DEF_PIVOTCOL "Cannot find default pivot column"
#define MSG_NO_DIR_INDX_RD "No direct access of %s tables"
-#define MSG_NO_DMY_DIR_ACC "No direct access of virtual DUMMY tables"
-#define MSG_NO_DOM_DELETE "Partial delete not yet implemented for domains"
-#define MSG_NO_DOM_MATCH "Unmatched string %.8s... in domain %s"
-#define MSG_NO_EDITED_LANG "Coparm: No active edited language"
-#define MSG_NO_EXP_LINK "Cannot use expression to link a JCT table"
-#define MSG_NO_EXT_FILTER "Filtering cannot refer to another table"
-#define MSG_NO_EXT_UPDATE "Cannot update with reference to another table"
#define MSG_NO_FEAT_SUPPORT "No %s support in this version"
-#define MSG_NO_FILE_LIST "Table %s has no file list"
#define MSG_NO_FLD_FORMAT "Missing format for field %d of %s"
#define MSG_NO_FORMAT_COL "Cannot format the type COLUMN"
#define MSG_NO_FORMAT_TYPE "Cannot set format from type %d"
-#define MSG_NO_FULL_JOIN "Only Equi-join on key(s) is allowed by check setting"
-#define MSG_NO_FUL_OUT_JOIN "Full outer joins are not supported"
-#define MSG_NO_FUNC_ORDER "Unsupported ordering on functional item"
-#define MSG_NO_HEAD_JOIN "Join on not heading table"
-#define MSG_NO_HQL_CONV "Conversion to HQL not available"
-#define MSG_NO_INDEX "No indexes on table %s"
-#define MSG_NO_INDEX_GBX "No or improper index for SQLGBX"
-#define MSG_NO_INDEX_IN "No indexes found in %s"
#define MSG_NO_INDEX_READ "No indexed read for multiple tables"
-#define MSG_NO_INIT_LANG "No initial language"
-#define MSG_NO_JOIN_TO_EXP "No join to expressions"
-#define MSG_NO_JOIN_UPDEL "Update/Delete on MySQL table cannot be joined"
#define MSG_NO_KEY_COL "No key columns found"
#define MSG_NO_KEY_UPDATE "Cannot update key names"
-#define MSG_NO_LANGUAGE "No language in operation\n"
-#define MSG_NO_LANG_TO_QUIT "No next language to quit"
-#define MSG_NO_LISTVAL_HERE "LSTBLK: List of values used out of context"
#define MSG_NO_MAP_INSERT "MAP incompatible with Insert"
#define MSG_NO_MATCHING_COL "No matching column %s in %s"
#define MSG_NO_MATCH_COL "Cannot find matching column"
#define MSG_NO_MEMORY "No memory"
-#define MSG_NO_MEM_CORR_SUB "In memory correlated subquery not implemented yet"
#define MSG_NO_MODE_PADDED "Mode not supported for padded files"
-#define MSG_NO_MORE_COL "Column %s no more in pivot table"
-#define MSG_NO_MORE_LANG "No more language, exit from %s\n"
-#define MSG_NO_MORE_VAR "VAR files no more supported"
-#define MSG_NO_MULCOL_JOIN "No join yet on muticolumn index"
-#define MSG_NO_MULT_HAVING "Multiple having clauses not implemented"
-#define MSG_NO_MUL_DIR_ACC "Direct access of multiple tables not implemented yet"
#define MSG_NO_MUL_VCT "VCT tables cannot be multiple"
-#define MSG_NO_MYSQL_CONN "No open MySQL connection"
-#define MSG_NO_MYSQL_DELETE "Delete should not be called for MySQL tables"
-#define MSG_NO_NBCOL "No NBcol"
-#define MSG_NO_NBLIN "No NBlin, MaxSize or Continued"
-#define MSG_NO_NBLIN_CONT "Fetch: No NBlin or Continued"
-#define MSG_NO_NULL_CONST "Cannot handle <null> constant"
-#define MSG_NO_ODBC_COL "Automatic ODBC columns not supported in this version"
#define MSG_NO_ODBC_DELETE "Delete should not be called for ODBC tables"
#define MSG_NO_ODBC_DIRECT "Direct access of ODBC tables not implemented yet"
#define MSG_NO_ODBC_MUL "Multiple(2) not supported for ODBC tables"
#define MSG_NO_ODBC_SPECOL "No ODBC special columns"
-#define MSG_NO_OPT_COLUMN "Not optimizable or no optimized columns"
-#define MSG_NO_OP_MODIF "Modificators do not apply to %s"
-#define MSG_NO_PARAMETER "No parameter"
#define MSG_NO_PART_DEL "No partial delete of %s files"
#define MSG_NO_PART_MAP "Partial mapping not implemented for this OS"
#define MSG_NO_PAR_BLK_INS "Cannot insert partial block yet"
#define MSG_NO_PIV_DIR_ACC "No direct access to PIVOT tables"
-#define MSG_NO_POS_ADDED "No Pos_code added"
-#define MSG_NO_PROMPTING "Cannot handle prompting for distributed tables"
-#define MSG_NO_QRY_DELETE "Delete cannot be used for QRY views"
-#define MSG_NO_QUERY_ARRAY "Array from QUERY not implemented yet"
-#define MSG_NO_RCUR_DSK_YET "Recursive use of DISK not implemented yet"
#define MSG_NO_READ_32 "Can't read 32 bytes"
#define MSG_NO_RECOV_SPACE "Cannot recover space in index file"
-#define MSG_NO_REF_DELETE "Cannot delete with reference to another table"
-#define MSG_NO_REF_UPDATE "Cannot update with reference to another table"
-#define MSG_NO_REMOTE_FNC "Cannot process some functions remotely"
#define MSG_NO_ROWID_FOR_AM "Can't get RowID in direct access for tables of type %s"
#define MSG_NO_ROW_NODE "Row node name is not defined"
#define MSG_NO_SECTION_NAME "Missing section name"
#define MSG_NO_SEC_UPDATE "Cannot update section names"
-#define MSG_NO_SELECTED_DB "No selected database"
-#define MSG_NO_SELF_PIVOT "Cannot pivot oneself!"
-#define MSG_NO_SERVER_FOUND "No server found"
#define MSG_NO_SETPOS_YET "%s SetPos not implemented yet"
-#define MSG_NO_SFEXIT_UNIX "Function %s not available on Unix"
-#define MSG_NO_SOURCE " (no source)"
#define MSG_NO_SPEC_COL "No MySQL special columns"
-#define MSG_NO_SQL_DELETE "Delete cannot be currently used for SQL views"
#define MSG_NO_SUB_VAL "No sub value for array of type %d"
-#define MSG_NO_SUCH_INDEX "No indexes %s on table %s"
-#define MSG_NO_SUCH_SERVER "cannot find the server %s"
-#define MSG_NO_SUCH_TABLE "Table %s not in DB"
#define MSG_NO_TABCOL_DATA "No data found for table %s column %s"
-#define MSG_NO_TABLE_COL "No columns found for %s"
#define MSG_NO_TABLE_DEL "Delete not enabled for %s tables "
-#define MSG_NO_TABLE_DESC "No Table Description Block"
-#define MSG_NO_TABLE_INDEX "Table %s has no index"
-#define MSG_NO_TABLE_LIST "No table list"
#define MSG_NO_TAB_DATA "No data found for table %s"
-#define MSG_NO_TERM_IN_TOK "Non terminal cannot be used in token rules"
-#define MSG_NO_TOKEN_DB "Cannot find DB for Token column %s"
-#define MSG_NO_UNIX_CATINFO "No catalog info under Unix"
-#define MSG_NO_UPDEL_JOIN "Update/Delete on ODBC table cannot be joined"
#define MSG_NO_VCT_DELETE "Partial delete not yet implemented for VCT files"
-#define MSG_NO_VIEW_COLDEF "No coldefs available for views"
-#define MSG_NO_VIEW_SORT "Cannot sort/join SQL functional view %s"
#define MSG_NO_ZIP_DELETE "Delete Zip files not implemented yet"
-#define MSG_NO_ZIP_DIR_ACC "Direct access of ZDOS tables not implemented yet"
-#define MSG_NULL_COL_VALUE "Column Value block is NULL"
-#define MSG_NULL_ENTRY "InitLang, null entry %d %s"
-#define MSG_NULL_QUERY "Null query"
-#define MSG_NUMVAL_NOMATCH "Numval mismatch for %s"
-#define MSG_N_FULL_PARSES "%d full parses"
-#define MSG_ODBC_READ_ONLY "ODBC is currently read only"
-#define MSG_OFFSET_NOT_SUPP "Offset not implemented for this type of sub query"
-#define MSG_ONE_LANG_YET "Already one language in edition"
-#define MSG_ONE_PARAM_ONLY "Only one parameter allowed"
-#define MSG_ONLY_LOG10_IMPL "Only Log10 is implemented"
-#define MSG_ON_LANGUAGE "Language %.8s version %d.%d loaded for editing"
#define MSG_OPENING "Opening"
-#define MSG_OPENING_QUERY "Opening query"
#define MSG_OPEN_EMPTY_FILE "Opening empty file %s: %s"
#define MSG_OPEN_ERROR "Open error %d in mode %d on %s: "
#define MSG_OPEN_ERROR_IS "Open error on %s: %s"
-#define MSG_OPEN_ERROR_ON "Open error on %s"
#define MSG_OPEN_MODE_ERROR "Open(%s) error %d on %s"
-#define MSG_OPEN_SORT_ERROR "Logical sort error in QUERY Open"
#define MSG_OPEN_STRERROR "open error: %s"
-#define MSG_OPEN_W_ERROR "Couldn't open %s for writing"
#define MSG_OPTBLK_RD_ERR "Error reading opt block values: %s"
#define MSG_OPTBLK_WR_ERR "Error writing opt block values: %s"
#define MSG_OPTIMIZING "Optimizing "
@@ -756,258 +238,83 @@
#define MSG_OPT_DVAL_WR_ERR "Error writing distinct values: %s"
#define MSG_OPT_HEAD_RD_ERR "Error reading opt file header: %s"
#define MSG_OPT_HEAD_WR_ERR "Error writing opt file header: %s"
-#define MSG_OPT_INIT "Optimization initialized"
#define MSG_OPT_LOGIC_ERR "Logical error in SetBitmap, i=%d"
#define MSG_OPT_MAX_RD_ERR "Error reading opt max values: %s"
#define MSG_OPT_MAX_WR_ERR "Error writing opt max values: %s"
#define MSG_OPT_MIN_RD_ERR "Error reading opt min values: %s"
#define MSG_OPT_MIN_WR_ERR "Error writing opt min values: %s"
#define MSG_OPT_NOT_MATCH "Non-matching opt file %s"
-#define MSG_OP_RES_TOO_LONG "Result too long for operator=%d"
-#define MSG_ORDER_OUT_RANGE "Order %d out of range"
-#define MSG_ORDER_TWICE "Ordering twice the same select item"
#define MSG_PAGE_ERROR "In page error"
#define MSG_PARM_CNT_MISS "Parameter count mismatch"
-#define MSG_PARSE_NULL_SEM "Parse with null semantics"
-#define MSG_PARSING_QUERY "Parsing query"
-#define MSG_PIX_ERROR "Pix %s error Rule_no=%u\n"
-#define MSG_PIX_TEST_ERROR "Rule=%u: pix-TEST not in first node\n"
-#define MSG_PLG_READ_ONLY "PLG is currently Read Only"
-#define MSG_PLM_NULL_SFP "TABPLM ReadDB: Sfp is NULL"
-#define MSG_PLUG_NOT_INIT "Plug was not initialized\n"
-#define MSG_PLUG_NOT_RUN "Plug is not running"
-#define MSG_PNODE_RULE "(P_node %d rule %d) "
-#define MSG_POS_TOO_LONG "%s too long (>%d)"
#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp is NULL"
#define MSG_PRIV_INSTR "Privileged instruction"
#define MSG_PROCADD_ERROR "Error %d getting address of %s"
-#define MSG_PROCESS_SUBQRY "Processing Sub-Query"
-#define MSG_PROC_WOULD_LOOP "Process would loop (maxres=%d maxlin=%d)"
-#define MSG_PROGRESS_INFO "Progress Information"
-#define MSG_PROMPT_CANCEL "Prompt was cancelled"
-#define MSG_PROMPT_NIY "Prompt not implemented for this configuration"
-#define MSG_PTR_NOT_FOUND "Pointer not found Num=%d ti1=%d"
-#define MSG_PXDEF_IS_NULL "Pxdef is NULL"
-#define MSG_QRY_READ_ONLY "QRY views are read only"
#define MSG_QUERY_CANCELLED "Query Cancelled by User"
-#define MSG_QUERY_NOT_EXEC "Query not executed"
-#define MSG_QUERY_SAVED "Query %s saved"
-#define MSG_QUOTE_IN_QUOTE "Quote char inside quoted field in line %d"
-#define MSG_RANGE_NIY "Range NIY for %s"
#define MSG_RANGE_NO_JOIN "Range is not meant for join index"
#define MSG_RC_READING "rc=%d reading table %s"
-#define MSG_READB_BAD_INIT "%s ReadDB called with Init=0"
-#define MSG_READCOL_ERROR "SQLCOL ReadColumn error"
-#define MSG_READING "Reading"
-#define MSG_READING_FROM "Reading from %s"
-#define MSG_READING_RECORD "Error reading record %d of %s"
#define MSG_READY "Ready"
#define MSG_READ_ERROR "Error reading %s: %s"
-#define MSG_READ_ERROR_RC "Read error, rc=%d"
-#define MSG_READ_MEM_ERROR "Reading memory %d: size=%d"
#define MSG_READ_ONLY "Cannot modify this read/only protected table"
#define MSG_READ_SEEK_ERROR "Read seek error: %s"
-#define MSG_READ_SEG_ERROR "Reading segment %d: size=%d"
-#define MSG_RECEIVED "Received %c\n"
-#define MSG_RECORD_ERROR "Error reading record %d of %s"
-#define MSG_RECORD_NO_SEP "Record with no separator"
-#define MSG_REC_SKIPPED " (%d bad records skipped by MaxErr setting)"
-#define MSG_REDUCE_INDEX "Reducing index"
#define MSG_REGISTER_ERR "Unable to register NS with prefix='%s' and href='%s'"
-#define MSG_REMOTE_CONN_ERR "Remote connection failed"
#define MSG_REMOVE_ERROR "Error removing %s: %s"
-#define MSG_REMOVE_NOT_IMPL "Remove not implemented for non-table TDB"
#define MSG_RENAME_ERROR "Error renaming %s to %s: %s"
-#define MSG_RENUM_RULES "Renumber rules and enter ADD again (rule saved in buffer)"
-#define MSG_REORDER_INDEX "Reordering index"
-#define MSG_REQU_ARG_NUM "Function %s requires %d arguments"
-#define MSG_RESET_TO "%s reset to %d"
-#define MSG_RES_NOT_UNIQUE "Result is not a unique value"
-#define MSG_RET_FROM_LANG "Return to language %s version %d.%d from language %s version %d.%d"
#define MSG_ROWID_NOT_IMPL "RowNumber not implemented for tables of type %s"
-#define MSG_ROWS_SELECTED "%d rows selected in %.2lf sec"
-#define MSG_ROWS_TRUNCATED " (truncated by MAXRES, LIMIT, FREQ or AreaSize setting)"
-#define MSG_ROW_ARGNB_ERR "ROW arg number mismatch (%d,%d)"
-#define MSG_RPC_SERVER_ERR "RPC error, server not responding"
-#define MSG_RSC_ALLOC_ERROR "Memory allocation error in Rescol %s"
-#define MSG_RULE_ENTERED "Rule %d entered"
-#define MSG_RULE_SUBSET_ERR "Rules Subset error"
-#define MSG_SAVING_INDEX "Saving index file"
-#define MSG_SCAN_NOT_IMP "Scan not implemented"
#define MSG_SEC_KEY_FIRST "Section and key names must come first on Insert"
#define MSG_SEC_NAME_FIRST "Section name must come first on Insert"
-#define MSG_SEC_NOT_FOUND "Section %s not found in %s"
-#define MSG_SEEK_ERROR "Seek error in CopyHeader"
-#define MSG_SEMANTIC_TREE "Semantic Tree"
-#define MSG_SEM_BAD_REF "Sem name @%d refers to an argument of type not 0 or 1"
-#define MSG_SEM_UNKNOWN "unknown, rc=%d"
#define MSG_SEP_IN_FIELD "Field %d contains the separator character"
#define MSG_SEQUENCE_ERROR "Sequence error on statement allocation"
#define MSG_SETEOF_ERROR "Error %d in SetEndOfFile"
#define MSG_SETRECPOS_NIY "SetRecpos not implemented for this table type"
-#define MSG_SET_LOCALE "Locale set to %s"
-#define MSG_SET_NULL_DOM "Setting value %d to a null domain"
-#define MSG_SET_OP_NOT_IMPL "sorry - set operators not implemented"
#define MSG_SET_STR_TRUNC "SetValue: String would be truncated"
-#define MSG_SEVERAL_TREES "Some tables are not properly joined"
#define MSG_SFP_ERROR "SetFilePointer error: %s"
-#define MSG_SFUNC_NOT_IMPL "Scalar Function %s not implemented"
#define MSG_SHARED_LIB_ERR "Error loading shared library %s: %s"
#define MSG_SINGLE_STEP "Single step"
-#define MSG_SLEEP "I slept %d milliseconds"
-#define MSG_SMART_SORTING "Retrieving sorted rows (pass %d of %d)"
-#define MSG_SMART_SORT_ERR "Logical Smart Sort Error 1"
-#define MSG_SORTING "Sorting"
-#define MSG_SORTING_INDEX "Sorting index"
#define MSG_SORTING_VAL "Sorting %d values"
-#define MSG_SORT_JOIN_INDEX "Sorting join index"
#define MSG_SPCOL_READONLY "Special column %s is Read Only"
-#define MSG_SPEC_CMD_SEP "Special commands must be executed separately"
-#define MSG_SQL_BAD_TYPE "RephraseSQL: type %d not supported"
-#define MSG_SQL_BLOCK_MISM "CheckColumn: SQL current blocks mismatch"
#define MSG_SQL_CONF_ERROR "SQL Error: SQL_CONFORMANCE"
-#define MSG_SQL_READ_ONLY "SQL views are currently read only"
#define MSG_SRCH_CLOSE_ERR "Couldn't close search handle"
#define MSG_SRC_TABLE_UNDEF "Source table is not defined"
-#define MSG_STACK_ERROR "stack error, i=%d\n"
-#define MSG_STACK_OVERFLOW "Parser: Stack overflow\n"
-#define MSG_STRG_NOT_FOUND "String not found"
-#define MSG_STRING_INV_LIST "List invalid for SemString"
-#define MSG_STRING_TOO_BIG "String too big for domain %s"
-#define MSG_SUBALLOC_ERROR "Not enough memory in area %p for request of %d (used=%d free=%d)"
-#define MSG_SUBAL_HUGE_ERR "Not enough memory in huge %p for request of %d"
-#define MSG_SUBARG_NOSEM "@ or sub-phrase arg of level %d points to a meaningless argument"
-#define MSG_SUBARG_OUTRANGE "Out of range @ or sub-phrase argument of level %d"
-#define MSG_SUBQRY_ONEITEM "Sub-Query must have exactly one select item"
-#define MSG_SUBSET_ERROR "SubSet error in LoadDB"
-#define MSG_SUB_OPEN_YET "Subquery already open"
-#define MSG_SUB_RES_TOO_LNG "Result too long for SUBSTR"
-#define MSG_SYNTAX_ERROR "Syntax error"
-#define MSG_SYSTEM_ERROR "System error %d"
-#define MSG_S_ACCESS_DENIED "%s: access denied"
-#define MSG_S_ERROR "%s error"
-#define MSG_S_ERROR_NUM "%s: error=%d"
-#define MSG_S_INTRUPT_ERROR "%s: interrupt error"
-#define MSG_S_INVALID_PARM "%s: invalid parameter"
-#define MSG_S_INV_ADDRESS "%s: invalid address"
-#define MSG_S_UNKNOWN_ERROR "%s: unknown error code %u"
+#define MSG_STACK_OVERFLOW "Stack overflow"
#define MSG_TABDIR_READONLY "DIR tables are read/only"
-#define MSG_TABLE_ALREADY "Table %s already exists"
-#define MSG_TABLE_ALTERED "%s table %s altered"
-#define MSG_TABLE_CREATED "%s table %s created"
-#define MSG_TABLE_DROPPED "Table %s dropped"
-#define MSG_TABLE_MULT_JOIN "Table %s used more than once for join"
-#define MSG_TABLE_NOT_IN_DB "Table %s does not exist in %s"
#define MSG_TABLE_NOT_OPT "Not an optimizable table"
-#define MSG_TABLE_NO_INDEX "Table %s cannot be indexed"
-#define MSG_TABLE_NO_OPT "Table %s does not exist or type is not optimizable"
+#define MSG_TABLE_NO_INDEX "Table %s is not indexable"
#define MSG_TABLE_READ_ONLY "%s tables are read only "
#define MSG_TABMUL_READONLY "Multiple tables are read/only"
-#define MSG_TAB_NOT_LOADED " (some tables could not be loaded)"
-#define MSG_TAB_NOT_SPEC "No table specified"
-#define MSG_TB_VW_NOTIN_DB "Table or view %s not in DB"
-#define MSG_TDB_NXT_NOT_NUL "Tdb.Next not NULL"
-#define MSG_TDB_USE_ERROR "Error, Tdbp->Use=%d"
-#define MSG_TOO_MANY_COLS "Too many columns"
-#define MSG_TOO_MANY_COLTAB "Too many columns in %s (%d)"
#define MSG_TOO_MANY_FIELDS "Too many fields line %d of %s"
#define MSG_TOO_MANY_JUMPS "Too many jump levels"
#define MSG_TOO_MANY_KEYS "Too many keys (%d)"
-#define MSG_TOO_MANY_POS "Too many pos_codes"
-#define MSG_TOO_MANY_TABLES "Too many tables (%d)"
-#define MSG_TOPSEM_ERROR "Unknown error in TopSem"
#define MSG_TO_BLK_IS_NULL "To Blk is NULL"
-#define MSG_TO_FTR_NOT_NULL "Set.To_Ftr is not null"
-#define MSG_TO_PIX_NOT_NULL "Set.To_Pix is not null"
-#define MSG_TO_SEM_NOT_NULL "Set.To_Sem is not null"
#define MSG_TRUNCATE_ERROR "truncate error: %s"
#define MSG_TRUNC_BY_ESTIM "truncated by Estimate"
-#define MSG_TYPES_ERROR "Error on Types(%d)"
-#define MSG_TYPE_CONV_ERROR "Type cannot be converted in expression"
-#define MSG_TYPE_DEF_MISM "type and definition do not match"
#define MSG_TYPE_MISMATCH "Key and source are not of the same type"
-#define MSG_TYPE_RECFM_MISM "Type and Recfm mismatch"
-#define MSG_TYPE_TO_VERIFY "Type to verify: %d"
#define MSG_TYPE_VALUE_ERR "Column %s type(%s)/value(%s) mismatch"
#define MSG_UNBALANCE_QUOTE "Unbalanced quote in line %d"
#define MSG_UNDEFINED_AM "COLBLK %s: undefined Access Method"
-#define MSG_UNDEFINED_PATH "Undefined Plgcnx.ini path"
-#define MSG_UNDEF_COL_COUNT "Count on undefined column"
-#define MSG_UNKNOWN_DOMAIN "Unknown domain %s"
-#define MSG_UNKNOWN_ERROR "Unknown error"
#define MSG_UNKNOWN_EXCPT "Unknown exception"
-#define MSG_UNKNOWN_NAME "Unknown name: %.8s"
-#define MSG_UNKNOWN_PATH "Unknown Plgcnx.ini path"
-#define MSG_UNKNOWN_POS "Unknown pos name: %s"
-#define MSG_UNKNOWN_SEM "Unknown Sem %.8s, rc=%d"
-#define MSG_UNKNOWN_SYNONYM "Unknown synonym"
-#define MSG_UNKNW_QRY_TYPE "ReadDB: unknown query type"
-#define MSG_UNKN_ERR_CODE "Unknown error code %d"
-#define MSG_UNLOADABLE " unloadable: "
-#define MSG_UNLOADABLE_PRM "%s unloadable: %s"
#define MSG_UNMATCH_FIL_ARG "Unmatched filter argument"
-#define MSG_UNQ_COL_SEV_TAB "Unqualified column %s is in several tables"
-#define MSG_UNRESOLVED_ARG "?Unresolved argument %s at %d line %d"
#define MSG_UPDATE_ERROR "Error updating %s"
-#define MSG_UPDATING_ROWS "Updating rows"
#define MSG_UPD_ZIP_NOT_IMP "Updating ZDOS tables not implemented yet"
-#define MSG_UP_LANGUAGE "Block language %.8s version %d level %d loaded"
-#define MSG_USED_FREE_MEM "%d used in sarea, %d free"
-#define MSG_USETEMP_IS "UseTemp is %s"
-#define MSG_USETEMP_RESET ". Usetemp reset to Auto"
-#define MSG_USETEMP_SET "UseTemp set to %s"
-#define MSG_USE_NO_MATCH "Use do not match : Use=%d, ti2=%d, ti3=%d"
-#define MSG_USING_INDEX " (Using index"
-#define MSG_VALIST_MISMATCH "List of values mismatch"
#define MSG_VALSTR_TOO_LONG "Value %s too long for string of length %d"
#define MSG_VALTYPE_NOMATCH "Non matching Value types"
#define MSG_VALUE_ERROR "Column %s: value is null"
-#define MSG_VALUE_NOT_ALLOC "Value not allocated for column R%d %s"
#define MSG_VALUE_TOO_BIG "Value %lld too big for column %s"
#define MSG_VALUE_TOO_LONG "Value %s too long for column %s of length %d"
#define MSG_VAL_ALLOC_ERR "Cannot allocate value node"
-#define MSG_VAL_TOO_LONG "Value field %s too long for %s"
-#define MSG_VIEW_ALREADY "View %s already exists"
-#define MSG_VIEW_CREATED "%s view %s created"
-#define MSG_VIEW_DROPPED "View %s dropped"
-#define MSG_VIEW_NOT_IN_DB "View %s does not exist in %s"
#define MSG_VIR_NO_DELETE "Delete not allowed for %s tables"
#define MSG_VIR_READ_ONLY "Virtual %s tables are read only"
-#define MSG_VM_LANG "Language has VM format, not supported"
#define MSG_VOID_FIRST_ARG "First argument should not be void"
-#define MSG_VOID_IN_STRING "Error: void IN string"
-#define MSG_VOID_ORDER_LIST "Null ordering list, system error ?"
-#define MSG_VOID_POS_DICT "Void Pos dictionary"
-#define MSG_VOID_QUERY "Void query %s"
#define MSG_WORK_AREA "Work area: %s"
-#define MSG_WORK_TOO_SMALL "Work area too small, increase AreaSize"
-#define MSG_WRITE_ERROR "Error writing to %s"
#define MSG_WRITE_SEEK_ERR "Write seek error: %s"
#define MSG_WRITE_STRERROR "Error writing %s: %s"
#define MSG_WRITING "Writing"
#define MSG_WRITING_ERROR "Error writing to %s: %s"
-#define MSG_WRITING_QUERY "Writing query: "
-#define MSG_WRONG_ARG_NUM "Function %s does not take %d arguments"
-#define MSG_WRONG_COL_NUM "Column number %d out of range in %s"
-#define MSG_WRONG_DB_LIST "Wrong or nul database list"
-#define MSG_WRONG_FUNCTION "Wrong function %d"
-#define MSG_WRONG_OP_PARM "Wrong operator or parameters for %s"
-#define MSG_WRONG_PARMS "Wrong parameters for %s"
-#define MSG_WRONG_PASSWORD "Illegal password for %s"
-#define MSG_WRONG_TYPE "unsupported type"
-#define MSG_WRONG_USERFILE "Wrong Userfile size=%d"
#define MSG_WS_CONV_ERR "Error converting %s to WS"
#define MSG_XCOL_MISMATCH "Column %s mismatch in index"
-#define MSG_XDB_DEL_ERROR "Error while deleting entries from XDB file"
#define MSG_XFILE_READERR "Error %d reading index file"
-#define MSG_XFILE_TOO_SMALL "Index file is smaller than index length"
#define MSG_XFILE_WRITERR "Error writing index file: %s"
#define MSG_XMLTAB_INIT_ERR "Error initializing XML table"
#define MSG_XML_INIT_ERROR "Error initializing new XML file"
#define MSG_XPATH_CNTX_ERR "Unable to create new XPath context"
#define MSG_XPATH_EVAL_ERR "Unable to evaluate xpath location '%s'"
#define MSG_XPATH_NOT_SUPP "Unsupported Xpath for column %s"
-#define MSG_X_ARG_ADDED "%d arguments have been added"
-#define MSG_X_ARG_SET "%d arguments have been set"
-#define MSG_X_ON_TAB " %s on %s("
-#define MSG_ZERO_DIVIDE "Zero divide in expression"
diff --git a/storage/connect/enids.h b/storage/connect/enids.h
new file mode 100644
index 00000000000..d171955b0bd
--- /dev/null
+++ b/storage/connect/enids.h
@@ -0,0 +1,46 @@
+ case IDS_TABLES: p = "Table Headers"; break;
+ case IDS_TAB_01: p = "Table_Cat"; break;
+ case IDS_TAB_02: p = "Table_Schema"; break;
+ case IDS_TAB_03: p = "Table_Name"; break;
+ case IDS_TAB_04: p = "Table_Type"; break;
+ case IDS_TAB_05: p = "Remark"; break;
+ case IDS_COLUMNS: p = "Column Headers"; break;
+ case IDS_COL_01: p = "Table_Cat"; break;
+ case IDS_COL_02: p = "Table_Schema"; break;
+ case IDS_COL_03: p = "Table_Name"; break;
+ case IDS_COL_04: p = "Column_Name"; break;
+ case IDS_COL_05: p = "Data_Type"; break;
+ case IDS_COL_06: p = "Type_Name"; break;
+ case IDS_COL_07: p = "Column_Size"; break;
+ case IDS_COL_08: p = "Buffer_Length"; break;
+ case IDS_COL_09: p = "Decimal_Digits"; break;
+ case IDS_COL_10: p = "Radix"; break;
+ case IDS_COL_11: p = "Nullable"; break;
+ case IDS_COL_12: p = "Remarks"; break;
+ case IDS_PKEY: p = "Key Headers"; break;
+ case IDS_PKY_01: p = "Table_Catalog"; break;
+ case IDS_PKY_02: p = "Table_Schema"; break;
+ case IDS_PKY_03: p = "Table_Name"; break;
+ case IDS_PKY_04: p = "Column_Name"; break;
+ case IDS_PKY_05: p = "Key_Seq"; break;
+ case IDS_PKY_06: p = "Pk_Name"; break;
+ case IDS_STAT: p = "Stat Headers"; break;
+ case IDS_STA_01: p = "Table_Catalog"; break;
+ case IDS_STA_02: p = "Table_Schema"; break;
+ case IDS_STA_03: p = "Table_Name"; break;
+ case IDS_STA_04: p = "Non_Unique"; break;
+ case IDS_STA_05: p = "Index_Qualifier"; break;
+ case IDS_STA_06: p = "Index_Name"; break;
+ case IDS_STA_07: p = "Type"; break;
+ case IDS_STA_08: p = "Seq_in_Index"; break;
+ case IDS_STA_09: p = "Column_Name"; break;
+ case IDS_STA_10: p = "Collation"; break;
+ case IDS_STA_11: p = "Cardinality"; break;
+ case IDS_STA_12: p = "Pages"; break;
+ case IDS_STA_13: p = "Filter_Condition"; break;
+ case IDS_DRIVER: p = "Driver Headers"; break;
+ case IDS_DRV_01: p = "Description"; break;
+ case IDS_DRV_02: p = "Attributes"; break;
+ case IDS_DSRC: p = "DataSrc Headers"; break;
+ case IDS_DSC_01: p = "Name"; break;
+ case IDS_DSC_02: p = "Description"; break;
diff --git a/storage/connect/filamap.cpp b/storage/connect/filamap.cpp
index c0ca40f4c01..08f87e2b836 100644
--- a/storage/connect/filamap.cpp
+++ b/storage/connect/filamap.cpp
@@ -46,8 +46,6 @@
#include "filamap.h"
#include "tabdos.h"
-extern "C" int trace;
-
/* --------------------------- Class MAPFAM -------------------------- */
/***********************************************************************/
@@ -290,8 +288,8 @@ bool MAPFAM::RecordPos(PGLOBAL g)
/***********************************************************************/
int MAPFAM::InitDelete(PGLOBAL g, int fpos, int spos)
{
- Fpos = Memory + fpos;
- Mempos = Memory + spos;
+ Fpos = Memory + (ptrdiff_t)fpos;
+ Mempos = Memory + (ptrdiff_t)spos;
return RC_OK;
} // end of InitDelete
@@ -360,7 +358,12 @@ int MAPFAM::ReadBuffer(PGLOBAL g)
while (*Mempos++ != '\n') ; // What about Unix ???
// Set caller line buffer
- len = (Mempos - Fpos) - Ending;
+ len = (Mempos - Fpos) - 1;
+
+ // Don't rely on ENDING setting
+ if (len > 0 && *(Mempos - 2) == '\r')
+ len--; // Line ends by CRLF
+
memcpy(Tdbp->GetLine(), Fpos, len);
Tdbp->GetLine()[len] = '\0';
return RC_OK;
@@ -685,7 +688,7 @@ bool MPXFAM::SetPos(PGLOBAL g, int pos)
/***********************************************************************/
int MPXFAM::InitDelete(PGLOBAL g, int fpos, int spos)
{
- Fpos = Memory + Headlen + fpos * Lrecl;
+ Fpos = Memory + Headlen + (ptrdiff_t)fpos * Lrecl;
Mempos = Fpos + Lrecl;
return RC_OK;
} // end of InitDelete
diff --git a/storage/connect/filamap.h b/storage/connect/filamap.h
index 1d85fa36155..1d44239e610 100644
--- a/storage/connect/filamap.h
+++ b/storage/connect/filamap.h
@@ -104,7 +104,7 @@ class DllExport MPXFAM : public MBKFAM {
virtual int MaxBlkSize(PGLOBAL g, int s)
{return TXTFAM::MaxBlkSize(g, s);}
virtual bool SetPos(PGLOBAL g, int recpos);
- virtual int GetNextPos(void) {return (int)Fpos + Nrec;}
+ virtual int GetNextPos(void) {return GetPos() + 1;}
virtual bool DeferReading(void) {return false;}
virtual int ReadBuffer(PGLOBAL g);
virtual int WriteBuffer(PGLOBAL g);
diff --git a/storage/connect/filamdbf.cpp b/storage/connect/filamdbf.cpp
index a214ab8acf2..98b8bb6fd95 100644
--- a/storage/connect/filamdbf.cpp
+++ b/storage/connect/filamdbf.cpp
@@ -63,8 +63,6 @@
#define DBFTYPE 3 /* value of bits 0 and 1 if .dbf */
#define EOH 0x0D /* end-of-header marker in .dbf file */
-extern "C" int trace; // The general trace value
-
/****************************************************************************/
/* First 32 bytes of a .dbf file. */
/* Note: some reserved fields are used here to store info (Fields) */
@@ -286,7 +284,8 @@ PQRYRES DBFColumns(PGLOBAL g, char *dp, const char *fn, bool info)
break;
default:
if (!info) {
- sprintf(g->Message, MSG(BAD_DBF_TYPE), thisfield.Type);
+ sprintf(g->Message, MSG(BAD_DBF_TYPE), thisfield.Type
+ , thisfield.Name);
goto err;
} // endif info
@@ -587,7 +586,7 @@ bool DBFFAM::AllocateBuffer(PGLOBAL g)
case 'D': // Date
break;
default: // Should never happen
- sprintf(g->Message, "Unsupported DBF type %c for column %s",
+ sprintf(g->Message, MSG(BAD_DBF_TYPE),
c, cdp->GetName());
return true;
} // endswitch c
diff --git a/storage/connect/filamfix.cpp b/storage/connect/filamfix.cpp
index 1fa72d52746..980d558eee5 100644
--- a/storage/connect/filamfix.cpp
+++ b/storage/connect/filamfix.cpp
@@ -52,7 +52,6 @@
#define INVALID_SET_FILE_POINTER 0xFFFFFFFF
#endif
-extern "C" int trace;
extern int num_read, num_there, num_eq[2]; // Statistics
/* --------------------------- Class FIXFAM -------------------------- */
@@ -131,18 +130,49 @@ bool FIXFAM::AllocateBuffer(PGLOBAL g)
/*******************************************************************/
/* For Insert the buffer must be prepared. */
/*******************************************************************/
- memset(To_Buf, ' ', Buflen);
+ if (Tdbp->GetFtype() == RECFM_BIN) {
+ // The buffer must be prepared depending on column types
+ int n = 0;
+ PDOSDEF defp = (PDOSDEF)Tdbp->GetDef();
+ PCOLDEF cdp;
- if (/*Tdbp->GetFtype() < 2 &&*/ !Padded)
- // If not binary, the file is physically a text file.
- // We do it also for binary table because the lrecl can have been
+ // Prepare the first line of the buffer
+ memset(To_Buf, 0, Buflen);
+
+ for (cdp = defp->GetCols(); cdp; cdp = cdp->GetNext()) {
+ if (IsTypeNum(cdp->GetType()))
+ memset(To_Buf + cdp->GetOffset(), ' ', cdp->GetClen());
+
+ n = MY_MAX(n, cdp->GetPoff() + cdp->GetClen());
+ } // endfor cdp
+
+ // We do this for binary table because the lrecl can have been
// specified with additional space to include line ending.
- for (int len = Lrecl; len <= Buflen; len += Lrecl) {
-#if defined(WIN32)
- To_Buf[len - 2] = '\r';
-#endif // WIN32
- To_Buf[len - 1] = '\n';
- } // endfor len
+ if (n < Lrecl && Ending) {
+ To_Buf[Lrecl - 1] = '\n';
+
+ if (n < Lrecl - 1 && Ending == 2)
+ To_Buf[Lrecl - 2] = '\r';
+
+ } // endif n
+
+ // Now repeat this for the whole buffer
+ for (int len = Lrecl; len <= Buflen - Lrecl; len += Lrecl)
+ memcpy(To_Buf + len, To_Buf, Lrecl);
+
+ } else {
+ memset(To_Buf, ' ', Buflen);
+
+ if (!Padded)
+ // The file is physically a text file.
+ for (int len = Lrecl; len <= Buflen; len += Lrecl) {
+ if (Ending == 2)
+ To_Buf[len - 2] = '\r';
+
+ To_Buf[len - 1] = '\n';
+ } // endfor len
+
+ } // endif Ftype
Rbuf = Nrec; // To be used by WriteDB
} // endif Insert
@@ -205,7 +235,7 @@ int FIXFAM::WriteModifiedBlock(PGLOBAL g)
// NOTE: Next line was added to avoid a very strange fread bug.
// When the fseek is not executed (even the file has the good
// pointer position) the next read can happen anywhere in the file.
- OldBlk = CurBlk; // This will force fseek to be executed
+ OldBlk = -2; // This will force fseek to be executed
Modif = 0;
return rc;
} // end of WriteModifiedBlock
diff --git a/storage/connect/filamtxt.cpp b/storage/connect/filamtxt.cpp
index dfd5a6638cf..675c021fe51 100644
--- a/storage/connect/filamtxt.cpp
+++ b/storage/connect/filamtxt.cpp
@@ -56,7 +56,6 @@
#endif
extern int num_read, num_there, num_eq[2]; // Statistics
-extern "C" int trace;
/***********************************************************************/
/* Routine called externally by TXTFAM SortedRows functions. */
@@ -287,7 +286,7 @@ bool TXTFAM::AddListValue(PGLOBAL g, int type, void *val, PPARM *top)
// *((int*)pp->Value) = *((int*)val);
// break;
case TYPE_VOID:
- pp->Value = (void*)(intptr)*(int*)val;
+ pp->Intval = *(int*)val;
break;
// case TYPE_STRING:
// pp->Value = PlugSubAlloc(g, NULL, strlen((char*)val) + 1);
@@ -538,7 +537,8 @@ bool DOSFAM::OpenTableFile(PGLOBAL g)
PDBUSER dbuserp = PlgGetUser(g);
// This is required when using Unix files under Windows and vice versa
- Bin = (Blocked || Ending != CRLF);
+//Bin = (Blocked || Ending != CRLF);
+ Bin = true; // To avoid ftell problems
switch (mode) {
case MODE_READ:
@@ -684,6 +684,7 @@ bool DOSFAM::RecordPos(PGLOBAL g)
{
if ((Fpos = ftell(Stream)) < 0) {
sprintf(g->Message, MSG(FTELL_ERROR), 0, strerror(errno));
+// strcat(g->Message, " (possible wrong ENDING option value)");
return true;
} // endif Fpos
diff --git a/storage/connect/filamvct.cpp b/storage/connect/filamvct.cpp
index b93adbd13dd..c449347bbcb 100755
--- a/storage/connect/filamvct.cpp
+++ b/storage/connect/filamvct.cpp
@@ -64,7 +64,6 @@
extern int num_read, num_there; // Statistics
static int num_write;
-extern "C" int trace;
#if defined(UNIX)
// Add dummy strerror (NGC)
@@ -388,15 +387,20 @@ bool VCTFAM::MakeEmptyFile(PGLOBAL g, char *fn)
n = (Header == 1 || Header == 3) ? sizeof(VECHEADER) : 0;
- if (lseek(h, n + MaxBlk * Nrec * Lrecl - 1, SEEK_SET) == -1) {
- sprintf(g->Message, MSG(MAKE_EMPTY_FILE), To_File, strerror(errno));
- close(h);
- return true;
- } // endif h
+ if (lseek(h, n + MaxBlk * Nrec * Lrecl - 1, SEEK_SET) < 0)
+ goto err;
+
+ // This actually fills the empty file
+ if (write(h, &c, 1) < 0)
+ goto err;
- write(h, &c, 1); // This actually fills the empty file
close(h);
return false;
+
+ err:
+ sprintf(g->Message, MSG(MAKE_EMPTY_FILE), To_File, strerror(errno));
+ close(h);
+ return true;
} // end of MakeEmptyFile
/***********************************************************************/
@@ -3393,15 +3397,20 @@ bool BGVFAM::MakeEmptyFile(PGLOBAL g, char *fn)
htrc("MEF: pos=%lld n=%d maxblk=%d blksize=%d\n",
pos, n, MaxBlk, Blksize);
- if (lseek64(h, pos, SEEK_SET) < 0) {
- sprintf(g->Message, MSG(MAKE_EMPTY_FILE), To_File, strerror(errno));
- close(h);
- return true;
- } // endif h
+ if (lseek64(h, pos, SEEK_SET) < 0)
+ goto err;
- write(h, &c, 1); // This actually fills the empty file
+ // This actually fills the empty file
+ if (write(h, &c, 1) < 0)
+ goto err;
+
close(h);
return false;
+
+ err:
+ sprintf(g->Message, MSG(MAKE_EMPTY_FILE), To_File, strerror(errno));
+ close(h);
+ return true;
#endif // !WIN32
} // end of MakeEmptyFile
diff --git a/storage/connect/filamzip.cpp b/storage/connect/filamzip.cpp
index 8473011ab8b..1288689325c 100644
--- a/storage/connect/filamzip.cpp
+++ b/storage/connect/filamzip.cpp
@@ -62,7 +62,6 @@
/* DB static variables. */
/***********************************************************************/
extern int num_read, num_there, num_eq[]; // Statistics
-extern "C" int trace;
/* ------------------------------------------------------------------- */
diff --git a/storage/connect/filamzip.h b/storage/connect/filamzip.h
index 6d27cb67e81..edb8b5db323 100644
--- a/storage/connect/filamzip.h
+++ b/storage/connect/filamzip.h
@@ -1,170 +1,170 @@
-/************** FilAmZip H Declares Source Code File (.H) **************/
-/* Name: FILAMZIP.H Version 1.2 */
-/* */
-/* (C) Copyright to the author Olivier BERTRAND 2005-2014 */
-/* */
-/* This file contains the GZIP access method classes declares. */
-/***********************************************************************/
-#ifndef __FILAMZIP_H
-#define __FILAMZIP_H
-
-#include "zlib.h"
-
-typedef class ZIPFAM *PZIPFAM;
-typedef class ZBKFAM *PZBKFAM;
-typedef class ZIXFAM *PZIXFAM;
-typedef class ZLBFAM *PZLBFAM;
-
-/***********************************************************************/
-/* This is the access method class declaration for not optimized */
-/* variable record length files compressed using the gzip library */
-/* functions. File is accessed record by record (row). */
-/***********************************************************************/
-class DllExport ZIPFAM : public TXTFAM {
-// friend class DOSCOL;
- public:
- // Constructor
- ZIPFAM(PDOSDEF tdp) : TXTFAM(tdp) {Zfile = NULL; Zpos = 0;}
- ZIPFAM(PZIPFAM txfp);
-
- // Implementation
- virtual AMT GetAmType(void) {return TYPE_AM_ZIP;}
- virtual int GetPos(void);
- virtual int GetNextPos(void);
- virtual PTXF Duplicate(PGLOBAL g)
- {return (PTXF)new(g) ZIPFAM(this);}
-
- // Methods
- virtual void Reset(void);
- virtual int GetFileLength(PGLOBAL g);
- virtual int Cardinality(PGLOBAL g) {return (g) ? -1 : 0;}
- virtual int MaxBlkSize(PGLOBAL g, int s) {return s;}
- virtual bool AllocateBuffer(PGLOBAL g);
- virtual int GetRowID(void);
- virtual bool RecordPos(PGLOBAL g);
- virtual bool SetPos(PGLOBAL g, int recpos);
- virtual int SkipRecord(PGLOBAL g, bool header);
- virtual bool OpenTableFile(PGLOBAL g);
- virtual int ReadBuffer(PGLOBAL g);
- virtual int WriteBuffer(PGLOBAL g);
- virtual int DeleteRecords(PGLOBAL g, int irc);
- virtual void CloseTableFile(PGLOBAL g, bool abort);
- virtual void Rewind(void);
-
- protected:
- int Zerror(PGLOBAL g); // GZ error function
-
- // Members
- gzFile Zfile; // Points to GZ file structure
- z_off_t Zpos; // Uncompressed file position
- }; // end of class ZIPFAM
-
-/***********************************************************************/
-/* This is the access method class declaration for optimized variable */
-/* record length files compressed using the gzip library functions. */
-/* The File is accessed by block (requires an opt file). */
-/***********************************************************************/
-class DllExport ZBKFAM : public ZIPFAM {
- public:
- // Constructor
- ZBKFAM(PDOSDEF tdp);
- ZBKFAM(PZBKFAM txfp);
-
- // Implementation
- virtual int GetPos(void);
- virtual int GetNextPos(void) {return 0;}
- virtual PTXF Duplicate(PGLOBAL g)
- {return (PTXF)new(g) ZBKFAM(this);}
-
- // Methods
- virtual int Cardinality(PGLOBAL g);
- virtual int MaxBlkSize(PGLOBAL g, int s);
- virtual bool AllocateBuffer(PGLOBAL g);
- virtual int GetRowID(void);
- virtual bool RecordPos(PGLOBAL g);
- virtual int SkipRecord(PGLOBAL g, bool header);
- virtual int ReadBuffer(PGLOBAL g);
- virtual int WriteBuffer(PGLOBAL g);
- virtual int DeleteRecords(PGLOBAL g, int irc);
- virtual void CloseTableFile(PGLOBAL g, bool abort);
- virtual void Rewind(void);
-
- protected:
- // Members
- char *CurLine; // Position of current line in buffer
- char *NxtLine; // Position of Next line in buffer
- bool Closing; // True when closing on Insert
- }; // end of class ZBKFAM
-
-/***********************************************************************/
-/* This is the access method class declaration for fixed record */
-/* length files compressed using the gzip library functions. */
-/* The file is always accessed by block. */
-/***********************************************************************/
-class DllExport ZIXFAM : public ZBKFAM {
- public:
- // Constructor
- ZIXFAM(PDOSDEF tdp);
- ZIXFAM(PZIXFAM txfp) : ZBKFAM(txfp) {}
-
- // Implementation
- virtual int GetNextPos(void) {return 0;}
- virtual PTXF Duplicate(PGLOBAL g)
- {return (PTXF)new(g) ZIXFAM(this);}
-
- // Methods
- virtual int Cardinality(PGLOBAL g);
- virtual bool AllocateBuffer(PGLOBAL g);
- virtual int ReadBuffer(PGLOBAL g);
- virtual int WriteBuffer(PGLOBAL g);
-
- protected:
- // No additional Members
- }; // end of class ZIXFAM
-
-/***********************************************************************/
-/* This is the DOS/UNIX Access Method class declaration for PlugDB */
-/* fixed/variable files compressed using the zlib library functions. */
-/* Physically these are written and read using the same technique */
-/* than blocked variable files, only the contain of each block is */
-/* compressed using the deflate zlib function. The purpose of this */
-/* specific format is to have a fast mechanism for direct access of */
-/* records so blocked optimization is fast and direct access (joins) */
-/* is allowed. Note that the block length is written ahead of each */
-/* block to enable reading when optimization file is not available. */
-/***********************************************************************/
-class DllExport ZLBFAM : public BLKFAM {
- public:
- // Constructor
- ZLBFAM(PDOSDEF tdp);
- ZLBFAM(PZLBFAM txfp);
-
- // Implementation
- virtual AMT GetAmType(void) {return TYPE_AM_ZLIB;}
- virtual int GetPos(void);
- virtual int GetNextPos(void);
- virtual PTXF Duplicate(PGLOBAL g)
- {return (PTXF)new(g) ZLBFAM(this);}
- inline void SetOptimized(bool b) {Optimized = b;}
-
- // Methods
- virtual int GetFileLength(PGLOBAL g);
+/************** FilAmZip H Declares Source Code File (.H) **************/
+/* Name: FILAMZIP.H Version 1.2 */
+/* */
+/* (C) Copyright to the author Olivier BERTRAND 2005-2014 */
+/* */
+/* This file contains the GZIP access method classes declares. */
+/***********************************************************************/
+#ifndef __FILAMZIP_H
+#define __FILAMZIP_H
+
+#include "zlib.h"
+
+typedef class ZIPFAM *PZIPFAM;
+typedef class ZBKFAM *PZBKFAM;
+typedef class ZIXFAM *PZIXFAM;
+typedef class ZLBFAM *PZLBFAM;
+
+/***********************************************************************/
+/* This is the access method class declaration for not optimized */
+/* variable record length files compressed using the gzip library */
+/* functions. File is accessed record by record (row). */
+/***********************************************************************/
+class DllExport ZIPFAM : public TXTFAM {
+// friend class DOSCOL;
+ public:
+ // Constructor
+ ZIPFAM(PDOSDEF tdp) : TXTFAM(tdp) {Zfile = NULL; Zpos = 0;}
+ ZIPFAM(PZIPFAM txfp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_ZIP;}
+ virtual int GetPos(void);
+ virtual int GetNextPos(void);
+ virtual PTXF Duplicate(PGLOBAL g)
+ {return (PTXF)new(g) ZIPFAM(this);}
+
+ // Methods
+ virtual void Reset(void);
+ virtual int GetFileLength(PGLOBAL g);
+ virtual int Cardinality(PGLOBAL g) {return (g) ? -1 : 0;}
+ virtual int MaxBlkSize(PGLOBAL g, int s) {return s;}
+ virtual bool AllocateBuffer(PGLOBAL g);
+ virtual int GetRowID(void);
+ virtual bool RecordPos(PGLOBAL g);
virtual bool SetPos(PGLOBAL g, int recpos);
- virtual bool AllocateBuffer(PGLOBAL g);
- virtual int ReadBuffer(PGLOBAL g);
- virtual int WriteBuffer(PGLOBAL g);
- virtual void CloseTableFile(PGLOBAL g, bool abort);
- virtual void Rewind(void);
-
- protected:
- bool WriteCompressedBuffer(PGLOBAL g);
- int ReadCompressedBuffer(PGLOBAL g, void *rdbuf);
-
- // Members
- z_streamp Zstream; // Compression/decompression stream
- Byte *Zbuffer; // Compressed block buffer
- int *Zlenp; // Pointer to block length
- bool Optimized; // true when opt file is available
- }; // end of class ZLBFAM
-
-#endif // __FILAMZIP_H
+ virtual int SkipRecord(PGLOBAL g, bool header);
+ virtual bool OpenTableFile(PGLOBAL g);
+ virtual int ReadBuffer(PGLOBAL g);
+ virtual int WriteBuffer(PGLOBAL g);
+ virtual int DeleteRecords(PGLOBAL g, int irc);
+ virtual void CloseTableFile(PGLOBAL g, bool abort);
+ virtual void Rewind(void);
+
+ protected:
+ int Zerror(PGLOBAL g); // GZ error function
+
+ // Members
+ gzFile Zfile; // Points to GZ file structure
+ z_off_t Zpos; // Uncompressed file position
+ }; // end of class ZIPFAM
+
+/***********************************************************************/
+/* This is the access method class declaration for optimized variable */
+/* record length files compressed using the gzip library functions. */
+/* The File is accessed by block (requires an opt file). */
+/***********************************************************************/
+class DllExport ZBKFAM : public ZIPFAM {
+ public:
+ // Constructor
+ ZBKFAM(PDOSDEF tdp);
+ ZBKFAM(PZBKFAM txfp);
+
+ // Implementation
+ virtual int GetPos(void);
+ virtual int GetNextPos(void) {return 0;}
+ virtual PTXF Duplicate(PGLOBAL g)
+ {return (PTXF)new(g) ZBKFAM(this);}
+
+ // Methods
+ virtual int Cardinality(PGLOBAL g);
+ virtual int MaxBlkSize(PGLOBAL g, int s);
+ virtual bool AllocateBuffer(PGLOBAL g);
+ virtual int GetRowID(void);
+ virtual bool RecordPos(PGLOBAL g);
+ virtual int SkipRecord(PGLOBAL g, bool header);
+ virtual int ReadBuffer(PGLOBAL g);
+ virtual int WriteBuffer(PGLOBAL g);
+ virtual int DeleteRecords(PGLOBAL g, int irc);
+ virtual void CloseTableFile(PGLOBAL g, bool abort);
+ virtual void Rewind(void);
+
+ protected:
+ // Members
+ char *CurLine; // Position of current line in buffer
+ char *NxtLine; // Position of Next line in buffer
+ bool Closing; // True when closing on Insert
+ }; // end of class ZBKFAM
+
+/***********************************************************************/
+/* This is the access method class declaration for fixed record */
+/* length files compressed using the gzip library functions. */
+/* The file is always accessed by block. */
+/***********************************************************************/
+class DllExport ZIXFAM : public ZBKFAM {
+ public:
+ // Constructor
+ ZIXFAM(PDOSDEF tdp);
+ ZIXFAM(PZIXFAM txfp) : ZBKFAM(txfp) {}
+
+ // Implementation
+ virtual int GetNextPos(void) {return 0;}
+ virtual PTXF Duplicate(PGLOBAL g)
+ {return (PTXF)new(g) ZIXFAM(this);}
+
+ // Methods
+ virtual int Cardinality(PGLOBAL g);
+ virtual bool AllocateBuffer(PGLOBAL g);
+ virtual int ReadBuffer(PGLOBAL g);
+ virtual int WriteBuffer(PGLOBAL g);
+
+ protected:
+ // No additional Members
+ }; // end of class ZIXFAM
+
+/***********************************************************************/
+/* This is the DOS/UNIX Access Method class declaration for PlugDB */
+/* fixed/variable files compressed using the zlib library functions. */
+/* Physically these are written and read using the same technique */
+/* than blocked variable files, only the contain of each block is */
+/* compressed using the deflate zlib function. The purpose of this */
+/* specific format is to have a fast mechanism for direct access of */
+/* records so blocked optimization is fast and direct access (joins) */
+/* is allowed. Note that the block length is written ahead of each */
+/* block to enable reading when optimization file is not available. */
+/***********************************************************************/
+class DllExport ZLBFAM : public BLKFAM {
+ public:
+ // Constructor
+ ZLBFAM(PDOSDEF tdp);
+ ZLBFAM(PZLBFAM txfp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_ZLIB;}
+ virtual int GetPos(void);
+ virtual int GetNextPos(void);
+ virtual PTXF Duplicate(PGLOBAL g)
+ {return (PTXF)new(g) ZLBFAM(this);}
+ inline void SetOptimized(bool b) {Optimized = b;}
+
+ // Methods
+ virtual int GetFileLength(PGLOBAL g);
+ virtual bool SetPos(PGLOBAL g, int recpos);
+ virtual bool AllocateBuffer(PGLOBAL g);
+ virtual int ReadBuffer(PGLOBAL g);
+ virtual int WriteBuffer(PGLOBAL g);
+ virtual void CloseTableFile(PGLOBAL g, bool abort);
+ virtual void Rewind(void);
+
+ protected:
+ bool WriteCompressedBuffer(PGLOBAL g);
+ int ReadCompressedBuffer(PGLOBAL g, void *rdbuf);
+
+ // Members
+ z_streamp Zstream; // Compression/decompression stream
+ Byte *Zbuffer; // Compressed block buffer
+ int *Zlenp; // Pointer to block length
+ bool Optimized; // true when opt file is available
+ }; // end of class ZLBFAM
+
+#endif // __FILAMZIP_H
diff --git a/storage/connect/filter.cpp b/storage/connect/filter.cpp
index 9212432cdde..949d49c2943 100644
--- a/storage/connect/filter.cpp
+++ b/storage/connect/filter.cpp
@@ -40,11 +40,6 @@
#include "xindex.h"
/***********************************************************************/
-/* Static variables. */
-/***********************************************************************/
-extern "C" int trace;
-
-/***********************************************************************/
/* Utility routines. */
/***********************************************************************/
void PlugConvertConstant(PGLOBAL, void* &, short&);
@@ -63,7 +58,7 @@ static PPARM MakeParm(PGLOBAL g, PXOB xp)
} // end of MakeParm
/***********************************************************************/
-/* Routines called externally by FILTER function. */
+/* Routines called internally/externally by FILTER functions. */
/***********************************************************************/
bool PlugEvalLike(PGLOBAL, LPCSTR, LPCSTR, bool);
//bool ReadSubQuery(PGLOBAL, PSUBQ);
@@ -73,6 +68,32 @@ BYTE OpBmp(PGLOBAL g, OPVAL opc);
PARRAY MakeValueArray(PGLOBAL g, PPARM pp);
/***********************************************************************/
+/* Returns the bitmap representing the conditions that must not be */
+/* met when returning from TestValue for a given operator. */
+/* Bit one is EQ, bit 2 is LT, and bit 3 is GT. */
+/***********************************************************************/
+BYTE OpBmp(PGLOBAL g, OPVAL opc)
+ {
+ BYTE bt;
+
+ switch (opc) {
+ case OP_IN:
+ case OP_EQ: bt = 0x06; break;
+ case OP_NE: bt = 0x01; break;
+ case OP_GT: bt = 0x03; break;
+ case OP_GE: bt = 0x02; break;
+ case OP_LT: bt = 0x05; break;
+ case OP_LE: bt = 0x04; break;
+ case OP_EXIST: bt = 0x00; break;
+ default:
+ sprintf(g->Message, MSG(BAD_FILTER_OP), opc);
+ longjmp(g->jumper[g->jump_level], TYPE_ARRAY);
+ } // endswitch opc
+
+ return bt;
+ } // end of OpBmp
+
+/***********************************************************************/
/* Routines called externally by CondFilter. */
/***********************************************************************/
PFIL MakeFilter(PGLOBAL g, PFIL fp1, OPVAL vop, PFIL fp2)
@@ -80,7 +101,7 @@ PFIL MakeFilter(PGLOBAL g, PFIL fp1, OPVAL vop, PFIL fp2)
PFIL filp = new(g) FILTER(g, vop);
filp->Arg(0) = fp1;
- filp->Arg(1) = fp2;
+ filp->Arg(1) = (fp2) ? fp2 : pXVOID;
if (filp->Convert(g, false))
return NULL;
diff --git a/storage/connect/frcas.h b/storage/connect/frcas.h
new file mode 100644
index 00000000000..e9401d475ae
--- /dev/null
+++ b/storage/connect/frcas.h
@@ -0,0 +1,320 @@
+ case MSG_ACCESS_VIOLATN: p = "Violation accès mémoire"; break;
+ case MSG_ADD_BAD_TYPE: p = "Ajout d'une valeur de type %s non conforme dans un tableau %s"; break;
+ case MSG_ALLOC_ERROR: p = "Erreur d'allocation de %s"; break;
+ case MSG_ANSWER_TYPE: p = "Réponse de type"; break;
+ case MSG_API_CONF_ERROR: p = "Erreur SQL: API_CONFORMANCE"; break;
+ case MSG_APPL_NOT_INIT: p = "Application non initialisée"; break;
+ case MSG_ARRAY_BNDS_EXCD: p = "Hors limite de tableau"; break;
+ case MSG_BAD_ARRAY_OPER: p = "Les tableaux doivent utiliser l'opérateur IN"; break;
+ case MSG_BAD_ARRAY_TYPE: p = "Type=%d invalide pour un tableau"; break;
+ case MSG_BAD_ARRAY_VAL: p = "Les tableaux doivent avoir le même nombre de valeurs"; break;
+ case MSG_BAD_BIN_FMT: p = "Format invalide %c pour la colonne BIN %s"; break;
+ case MSG_BAD_BLK_ESTIM: p = "Nombre de blocs supérieur à l'estimation"; break;
+ case MSG_BAD_BLK_SIZE: p = "Taille du bloc %d non conforme"; break;
+ case MSG_BAD_BYTE_NUM: p = "Le nombre d'octets écrits est faux"; break;
+ case MSG_BAD_BYTE_READ: p = "Le nombre d'octets lus est faux"; break;
+ case MSG_BAD_COL_TYPE: p = "Type invalide %s pour la colonne %s"; break;
+ case MSG_BAD_COL_XPATH: p = "Xpath invalide colonne %s de la table HTML %s"; break;
+ case MSG_BAD_CONST_TYPE: p = "Type=%d invalide pour une constante"; break;
+ case MSG_BAD_CONV_TYPE: p = "Convertion de type invalide %d"; break;
+ case MSG_BAD_DATETIME: p = "Valeur date/temps invalide"; break;
+ case MSG_BAD_DBF_FILE: p = "Le fichier DBF %s est altéré"; break;
+ case MSG_BAD_DBF_REC: p = "Fichier DBF %s altéré enregistrement %d"; break;
+ case MSG_BAD_DBF_TYPE: p = "Type DBF %c non supporté colonne %s"; break;
+ case MSG_BAD_DIRECTORY: p = "Répertoire invalide %s: %s"; break;
+ case MSG_BAD_FIELD_RANK: p = "Rang %d invalide pour la colonne %s"; break;
+ case MSG_BAD_FIELD_TYPE: p = "Mauvais type de champ %s"; break;
+ case MSG_BAD_FILE_HANDLE: p = "Handle de fichier invalide: %s"; break;
+ case MSG_BAD_FILTER: p = "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"; break;
+ case MSG_BAD_FILTER_CONV: p = "Conversion filtre incorrecte, B_T=%d,%d"; break;
+ case MSG_BAD_FILTER_OP: p = "Opérateur de filtre invalide %d"; break;
+ case MSG_BAD_FLD_FORMAT: p = "Format invalide pour le champs %d de %s"; break;
+ case MSG_BAD_FLD_LENGTH: p = "Champs %s trop long (%s --> %d) ligne %d de %s"; break;
+ case MSG_BAD_FREQ_SET: p = "Spécification erronnée de Freq pour la colonne %s"; break;
+ case MSG_BAD_FUNC_MODE: p = "%s: mode invalide %d"; break;
+ case MSG_BAD_HANDLE_VAL: p = "Valeur Handle invalide"; break;
+ case MSG_BAD_HEADER: p = "Fichier %s: bloc en-tête altéré"; break;
+ case MSG_BAD_HEAD_END: p = "Lecture fin d'en-tête impossible"; break;
+ case MSG_BAD_INDEX_FILE: p = "Fichier index %s corrompu"; break;
+ case MSG_BAD_LINEFLD_FMT: p = "Format invalide ligne %d champs %d de %s"; break;
+ case MSG_BAD_LINE_LEN: p = "Longueur ligne non égale à Lrecl"; break;
+ case MSG_BAD_LRECL: p = "Disparité lrecl table/fichier (%d,%hd)"; break;
+ case MSG_BAD_NODE_TYPE: p = "Type noeud erroné pour la table"; break;
+ case MSG_BAD_OFFSET_VAL: p = "Nul offset invalide pour une table CSV"; break;
+ case MSG_BAD_OPEN_MODE: p = "Mode d'ouverture invalide %d"; break;
+ case MSG_BAD_PARAM_TYPE: p = "%.8s: Paramètre de type=%d invalide"; break;
+ case MSG_BAD_PARM_COUNT: p = "Nombre de paramètres incohérent"; break;
+ case MSG_BAD_QUOTE_FIELD: p = "Quote manquante dans %s champs %d ligne %d"; break;
+ case MSG_BAD_READ_NUMBER: p = "Mauvais nombre %d de valeurs lues dans %s"; break;
+ case MSG_BAD_RECFM: p = "Recfm type %d invalide pour DOSCOL"; break;
+ case MSG_BAD_RECFM_VAL: p = "Valeur invalide %d de Recfm"; break;
+ case MSG_BAD_SET_CASE: p = "La casse d'un tableau ne peut pas passer de non respect à respecter"; break;
+ case MSG_BAD_SET_STRING: p = "SetValue: appel invalide pour STRING"; break;
+ case MSG_BAD_SPECIAL_COL: p = "Colonne spéciale invalide %s"; break;
+ case MSG_BAD_SPEC_COLUMN: p = "Colonne spéciale invalide pour ce type de table"; break;
+ case MSG_BAD_TABLE_TYPE: p = "Type invalide %s pour la table %s"; break;
+ case MSG_BAD_TYPE_LIKE: p = "Type(%d)= %d invalide pour LIKE"; break;
+ case MSG_BAD_VALBLK_INDX: p = "Valeur hors limites de l'index du bloc de valeurs"; break;
+ case MSG_BAD_VALBLK_TYPE: p = "Type=%d invalide pour un bloc de valeurs"; break;
+ case MSG_BAD_VALNODE: p = "Type %d invalide pour le noeud valeur colonne %s"; break;
+ case MSG_BAD_VALUE_TYPE: p = "Type de valeur invalide %d"; break;
+ case MSG_BAD_VAL_UPDATE: p = "Impossible de déterminer quelle valeur %s doit être mise à jour"; break;
+ case MSG_BAS_NS_LIST: p = "Format invalide de la liste des espace-noms"; break;
+ case MSG_BIN_F_TOO_LONG: p = "Valeur trop longue pour le champ %s (%d --> %d)"; break;
+ case MSG_BIN_MODE_FAIL: p = "Echec mode binaire: %s"; break;
+ case MSG_BLKTYPLEN_MISM: p = "Disparité types/longueurs de bloc dans SetValue"; break;
+ case MSG_BLK_IS_NULL: p = "Blk est nul"; break;
+ case MSG_BREAKPOINT: p = "Point de contrôle"; break;
+ case MSG_BUILD_INDEX: p = "Construction index %s sur %s"; break;
+ case MSG_CANNOT_OPEN: p = "Ouverture impossible de %s"; break;
+ case MSG_CHSIZE_ERROR: p = "Erreur dans chsize: %s"; break;
+ case MSG_COL_ALLOC_ERR: p = "Allocation impossible du noeud colonne"; break;
+ case MSG_COL_ISNOT_TABLE: p = "La colonne %s n'est pas dans la table %s"; break;
+ case MSG_COL_NOT_SORTED: p = "La colonne %s de la table %s n'est pas triée"; break;
+ case MSG_COL_NUM_MISM: p = "Disparité du nombre de colonnes"; break;
+ case MSG_COM_ERROR: p = "Erreur Com"; break;
+ case MSG_CONCAT_SUBNODE: p = "Concaténation de sous-noeuds impossible"; break;
+ case MSG_CONNECT_CANCEL: p = "Connection interrompue par l'utilisateur"; break;
+ case MSG_CONTROL_C_EXIT: p = "Exit par Ctrl-C"; break;
+ case MSG_DATABASE_LOADED: p = "Base de données %s chargée"; break;
+ case MSG_DATA_MISALIGN: p = "Mauvais alignement pour ce type de données"; break;
+ case MSG_DBASE_FILE: p = "Fichier dBASE dbf: "; break;
+ case MSG_DEF_ALLOC_ERROR: p = "Erreur d'allocation de la classe DEF %s"; break;
+ case MSG_DEL_FILE_ERR: p = "Erreur à l'effacement de %s"; break;
+ case MSG_DEL_READ_ERROR: p = "Delete: erreur en lecture req=%d len=%d"; break;
+ case MSG_DEL_WRITE_ERROR: p = "Delete: erreur en écriture: %s"; break;
+ case MSG_DEPREC_FLAG: p = "Option Flag périmée, utiliser Coltype"; break;
+ case MSG_DLL_LOAD_ERROR: p = "Erreur %d au chargement du module %s"; break;
+ case MSG_DOM_NOT_SUPP: p = "MS-DOM non supporté par cette version"; break;
+ case MSG_DVAL_NOTIN_LIST: p = "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"; break;
+ case MSG_EMPTY_DOC: p = "Document vide"; break;
+ case MSG_EMPTY_FILE: p = "%s du fichier vide %s: "; break;
+ case MSG_EOF_AFTER_LINE: p = "Fin de fichier après la ligne %d"; break;
+ case MSG_EOF_INDEX_FILE: p = "EOF lisant le fichier index"; break;
+ case MSG_ERROR_IN_LSK: p = "Erreur %d dans lseek64"; break;
+ case MSG_ERROR_IN_SFP: p = "Erreur %d dans SetFilePointer"; break;
+ case MSG_ERR_READING_REC: p = "Erreur lisant l'enregistrement %d de %s"; break;
+ case MSG_FAIL_ADD_NODE: p = "L'ajout du noeud %s dans la table a échoué"; break;
+ case MSG_FETCH_NO_RES: p = "Fetch: Pas de Résultats"; break;
+ case MSG_FIELD_TOO_LONG: p = "Valeur trop longue pour le champs %d ligne %d"; break;
+ case MSG_FILELEN_ERROR: p = "Erreur dans %s pour %s"; break;
+ case MSG_FILE_IS_EMPTY: p = "Le fichier %s est vide"; break;
+ case MSG_FILE_MAP_ERR: p = "Erreur de File mapping"; break;
+ case MSG_FILE_MAP_ERROR: p = "CreateFileMapping %s erreur rc=%d"; break;
+ case MSG_FILE_OPEN_YET: p = "Fichier %s déjà ouvert"; break;
+ case MSG_FILE_UNFOUND: p = "Fichier %s non trouvé"; break;
+ case MSG_FLD_TOO_LNG_FOR: p = "Champs %d trop long pour %s ligne %d de %s"; break;
+ case MSG_FLT_BAD_RESULT: p = "Virgule flottante: résultat inexacte"; break;
+ case MSG_FLT_DENORMAL_OP: p = "Opérande virgule flottante non normalisé"; break;
+ case MSG_FLT_INVALID_OP: p = "Opération virgule flottante invalide"; break;
+ case MSG_FLT_OVERFLOW: p = "Dépassement de capacité virgule flottante"; break;
+ case MSG_FLT_STACK_CHECK: p = "Virgule flottante: Erreur de la pile"; break;
+ case MSG_FLT_UNDERFLOW: p = "Sous-dépassement de capacité virgule flottante"; break;
+ case MSG_FLT_ZERO_DIVIDE: p = "Virgule flottante: division par zéro"; break;
+ case MSG_FMT_WRITE_NIY: p = "L'écriture des fichiers %s n'est pas encore implémentée"; break;
+ case MSG_FOXPRO_FILE: p = "Fichier FoxPro: "; break;
+ case MSG_FPUTS_ERROR: p = "Erreur dans fputs: %s"; break;
+ case MSG_FSEEK_ERROR: p = "Erreur dans fseek: %s"; break;
+ case MSG_FSETPOS_ERROR: p = "Erreur dans fseek pour i=%d"; break;
+ case MSG_FTELL_ERROR: p = "Erreur dans ftell enregistrement=%d: %s"; break;
+ case MSG_FUNCTION_ERROR: p = "Erreur dans %s: %d"; break;
+ case MSG_FUNC_ERRNO: p = "Erreur %d dans %s"; break;
+ case MSG_FUNC_ERROR: p = "Erreur dans %s"; break;
+ case MSG_FUNC_ERR_S: p = "Erreur dans %s: %s"; break;
+ case MSG_FWRITE_ERROR: p = "Erreur dans fwrite: %s"; break;
+ case MSG_GET_DIST_VALS: p = "Récupération des valeurs distinctes de "; break;
+ case MSG_GET_FUNC_ERR: p = "Erreur en recherche de la fonction %s: %s"; break;
+ case MSG_GLOBAL_ERROR: p = "Erreur d'allocation de Global (taille=%d)\n"; break;
+ case MSG_GUARD_PAGE: p = "Violation de page de garde"; break;
+ case MSG_GZOPEN_ERROR: p = "gzopen %s: erreur %d sur %s"; break;
+ case MSG_ILLEGAL_INSTR: p = "Instruction illégale"; break;
+ case MSG_ILL_FILTER_CONV: p = "Conversion implicite illégale dans un filtre"; break;
+ case MSG_INDEX_NOT_UNIQ: p = "L'index n'est pas Unique"; break;
+ case MSG_INDEX_YET_ON: p = "L'index %s existe déjà sur %s"; break;
+ case MSG_INDX_COL_NOTIN: p = "La colonne index %s n'existe pas dans la table %s"; break;
+ case MSG_INDX_EXIST_YET: p = "L'entrée index existe déjà"; break;
+ case MSG_INIT_FAILED: p = "L'initialisation de %s a échoué"; break;
+ case MSG_INT_COL_ERROR: p = "Erreur interne sur la colonne index %s"; break;
+ case MSG_INT_OVERFLOW: p = "Dépassement de capacité sur entier"; break;
+ case MSG_INT_ZERO_DIVIDE: p = "Division entière par zéro"; break;
+ case MSG_INVALID_DISP: p = "Disposition invalide"; break;
+ case MSG_INVALID_FTYPE: p = "SBV: Ftype %d invalide"; break;
+ case MSG_INVALID_HANDLE: p = "Poignée invalide"; break;
+ case MSG_INVALID_OPER: p = "Opérateur invalide %d pour %s"; break;
+ case MSG_INV_COLUMN_TYPE: p = "Type %d Invalide pour la colonne %s"; break;
+ case MSG_INV_COL_TYPE: p = "Type de colonne %s invalide"; break;
+ case MSG_INV_DEF_READ: p = "Lecture différée invalide rc=%d"; break;
+ case MSG_INV_DIRCOL_OFST: p = "Offset invalide pour une colonne DIR"; break;
+ case MSG_INV_MAP_POS: p = "Position mémoire invalide"; break;
+ case MSG_INV_RAND_ACC: p = "L'accès aléatoire d'une table non optimisée est impossible"; break;
+ case MSG_INV_REC_POS: p = "Position d'enregistrement invalide"; break;
+ case MSG_INV_RESULT_TYPE: p = "Type de résultat invalide %s"; break;
+ case MSG_INV_UPDT_TABLE: p = "Table %s invalide pour Update"; break;
+ case MSG_IN_WITHOUT_SUB: p = "IN ou EXISTS sans tableau ou subquery"; break;
+ case MSG_KEY_ALLOC_ERR: p = "Erreur d'allocation d'un bloc offset clé"; break;
+ case MSG_KEY_ALLOC_ERROR: p = "Erreur d'allocation mémoire, Klen=%d n=%d"; break;
+ case MSG_LINE_TOO_LONG: p = "La nouvelle ligne est trop longue"; break;
+ case MSG_LIST: p = "--Liste--"; break;
+ case MSG_LOADING_FAILED: p = "Le chargement de %s a échoué"; break;
+ case MSG_LRECL_TOO_SMALL: p = "Lrecl trop petit (longueur en-tête = %d)"; break;
+ case MSG_MAKE_EMPTY_FILE: p = "Génération du fichier vide %s: %s"; break;
+ case MSG_MAKING: p = "Génération"; break;
+ case MSG_MALLOC_ERROR: p = "Allocation mémoire impossible par %s"; break;
+ case MSG_MAP_VIEW_ERROR: p = "MapViewOfFile %s erreur rc=%d"; break;
+ case MSG_MAXSIZE_ERROR: p = "Maxsize incalculable sur table ouverte"; break;
+ case MSG_MEM_ALLOC_ERR: p = "Erreur d'allocation mémoire, taille %s = %d"; break;
+ case MSG_MEM_ALLOC_ERROR: p = "Erreur d'allocation mémoire"; break;
+ case MSG_MISPLACED_QUOTE: p = "Appostrophe mal placée ligne %d"; break;
+ case MSG_MISSING_ARG: p = "Argument manquant pour l'opérateur %d"; break;
+ case MSG_MISSING_FIELD: p = "Champs %d manquant dans %s ligne %d"; break;
+ case MSG_MISSING_FNAME: p = "Nom du fichier manquant"; break;
+ case MSG_MISSING_NODE: p = "Noeud %s manquant dans %s"; break;
+ case MSG_MISSING_ROWNODE: p = "Impossible de trouver le noeud de la ligne %d"; break;
+ case MSG_MIS_TAG_LIST: p = "Liste des balises colonne manquante"; break;
+ case MSG_MUL_MAKECOL_ERR: p = "Erreur logique dans TABMUL::MakeCol"; break;
+ case MSG_NAME_CONV_ERR: p = "Erreur de convertion du nom de noeud"; break;
+ case MSG_NEW_DOC_FAILED: p = "Impossible de créer le nouveau document"; break;
+ case MSG_NEW_RETURN_NULL: p = "NULL renvoyé par New dans PlugEvalLike"; break;
+ case MSG_NEXT_FILE_ERROR: p = "Erreur en recherche du fichier suivant. rc=%s"; break;
+ case MSG_NONCONT_EXCEPT: p = "Exception non-continuable"; break;
+ case MSG_NOP_ZLIB_INDEX: p = "L'indexage d'une table zlib non optimisée est impossible"; break;
+ case MSG_NOT_A_DBF_FILE: p = "Le fichier n'a pas le format dBASE dbf "; break;
+ case MSG_NOT_FIXED_LEN: p = "Fichier %s non fixe, len=%d lrecl=%d"; break;
+ case MSG_NO_0DH_HEAD: p = "0DH manquant en fin d'en-tête (dbc=%d)"; break;
+ case MSG_NO_ACTIVE_DB: p = "Pas de base de données active"; break;
+ case MSG_NO_CHAR_FROM: p = "Conversion de type %d en caractères impossible"; break;
+ case MSG_NO_DATE_FMT: p = "Pas de format date pour le valblock de type %d"; break;
+ case MSG_NO_DEF_FNCCOL: p = "Colonne fonction par défaut introuvable"; break;
+ case MSG_NO_DEF_PIVOTCOL: p = "Colonne pivot par défaut introuvable"; break;
+ case MSG_NO_DIR_INDX_RD: p = "Pas d'accès directe des tables %s"; break;
+ case MSG_NO_FEAT_SUPPORT: p = "%s non supporté dans cette version"; break;
+ case MSG_NO_FLD_FORMAT: p = "Format absent pour le champs %d de %s"; break;
+ case MSG_NO_FORMAT_COL: p = "Type COLUMN informattable"; break;
+ case MSG_NO_FORMAT_TYPE: p = "Le format ne peut pas être défini à partir du type %d"; break;
+ case MSG_NO_INDEX_READ: p = "Pas d'accès directe des tables multiples"; break;
+ case MSG_NO_KEY_COL: p = "Pas de colonne clé trouvée"; break;
+ case MSG_NO_KEY_UPDATE: p = "Le nom des clés ne peut pas être modifié"; break;
+ case MSG_NO_MAP_INSERT: p = "MAP incompatible avec Insert"; break;
+ case MSG_NO_MATCHING_COL: p = "Pas de colonne correspondant à %s dans %s"; break;
+ case MSG_NO_MATCH_COL: p = "Colonne correspondante introuvable"; break;
+ case MSG_NO_MEMORY: p = "Mémoire pleine"; break;
+ case MSG_NO_MODE_PADDED: p = "Mode non supporté pour les fichiers 'padded'"; break;
+ case MSG_NO_MUL_VCT: p = "Les tables VCT ne peuvent pas être multiples"; break;
+ case MSG_NO_ODBC_DELETE: p = "Delete ne devrait pas être appelé pour les tables ODBC"; break;
+ case MSG_NO_ODBC_DIRECT: p = "Accès directe des tables ODBC non encore implémenté"; break;
+ case MSG_NO_ODBC_MUL: p = "Multiple(2) non supporté pour les tables ODBC"; break;
+ case MSG_NO_ODBC_SPECOL: p = "Pas de colonne spéciale ODBC"; break;
+ case MSG_NO_PART_DEL: p = "Delete partiel des fichier %s impossible"; break;
+ case MSG_NO_PART_MAP: p = "Mapping partiel non implémenté pour cet OS"; break;
+ case MSG_NO_PAR_BLK_INS: p = "Insertion de bloc partiel impossible"; break;
+ case MSG_NO_PIV_DIR_ACC: p = "Pas d'accès directe aux tables PIVOT"; break;
+ case MSG_NO_READ_32: p = "Lecture de 32 octets impossible"; break;
+ case MSG_NO_RECOV_SPACE: p = "Espace non recouvrable dans le fichier index"; break;
+ case MSG_NO_ROWID_FOR_AM: p = "Accès direct impossible de ROWID pour les tables de type %s"; break;
+ case MSG_NO_ROW_NODE: p = "Le nom du Rownode n'est pas défini"; break;
+ case MSG_NO_SECTION_NAME: p = "Nom de section manquant"; break;
+ case MSG_NO_SEC_UPDATE: p = "Les noms de section ne peuvent pas être modifiés"; break;
+ case MSG_NO_SETPOS_YET: p = "SetPos pas encore implémenté pour les fichier %s"; break;
+ case MSG_NO_SPEC_COL: p = "Pas de colonne spéciales MYSQL"; break;
+ case MSG_NO_SUB_VAL: p = "Pas de sous-value d'un tableau de type %d"; break;
+ case MSG_NO_TABCOL_DATA: p = "Pas de données pour la table %s colonne %s"; break;
+ case MSG_NO_TABLE_DEL: p = "Delete non autorisé pour les tables %s "; break;
+ case MSG_NO_TAB_DATA: p = "Pas de données pour la table %s"; break;
+ case MSG_NO_VCT_DELETE: p = "Délétion Partielle non implémentée pour les fichiers VCT"; break;
+ case MSG_NO_ZIP_DELETE: p = "Delete sur fichier Zip non encore implementé"; break;
+ case MSG_OPENING: p = "Ouverture"; break;
+ case MSG_OPEN_EMPTY_FILE: p = "Ouverture du fichier vide %s: %s"; break;
+ case MSG_OPEN_ERROR: p = "Erreur d'ouverture %d en mode %d sur %s: "; break;
+ case MSG_OPEN_ERROR_IS: p = "Erreur à l'ouverture de %s: %s"; break;
+ case MSG_OPEN_MODE_ERROR: p = "Erreur d'ouverture(%s) %d sur %s"; break;
+ case MSG_OPEN_STRERROR: p = "Erreur à l'ouverture: %s"; break;
+ case MSG_OPTBLK_RD_ERR: p = "Erreur à la lecture d'un bloc optimisation: %s"; break;
+ case MSG_OPTBLK_WR_ERR: p = "Erreur à l'écriture d'un bloc optimisation: %s"; break;
+ case MSG_OPTIMIZING: p = "Optimisation de "; break;
+ case MSG_OPT_BMAP_RD_ERR: p = "Erreur en lecture des bitmaps d'optimisation: %s"; break;
+ case MSG_OPT_BMAP_WR_ERR: p = "Erreur en écriture des bitmaps d'optimisation: %s"; break;
+ case MSG_OPT_CANCELLED: p = "Optimisation interrompue par l'utilisateur"; break;
+ case MSG_OPT_DVAL_RD_ERR: p = "Erreur en lecture des valeurs distinctes: %s"; break;
+ case MSG_OPT_DVAL_WR_ERR: p = "Erreur en écriture des valeurs distinctes: %s"; break;
+ case MSG_OPT_HEAD_RD_ERR: p = "Erreur en lecture de l'entête du fichier opt: %s"; break;
+ case MSG_OPT_HEAD_WR_ERR: p = "Erreur en écriture de l'entête du fichier opt: %s"; break;
+ case MSG_OPT_LOGIC_ERR: p = "Erreur logique dans SetBitmap, i=%d"; break;
+ case MSG_OPT_MAX_RD_ERR: p = "Erreur en lecture des valeurs maxi: %s"; break;
+ case MSG_OPT_MAX_WR_ERR: p = "Erreur en écriture des valeurs maxi: %s"; break;
+ case MSG_OPT_MIN_RD_ERR: p = "Erreur en lecture des valeurs mini: %s"; break;
+ case MSG_OPT_MIN_WR_ERR: p = "Erreur en écriture des valeurs mini: %s"; break;
+ case MSG_OPT_NOT_MATCH: p = "Le fichier opt %s n'est pas à jour"; break;
+ case MSG_PAGE_ERROR: p = "Erreur de pagination"; break;
+ case MSG_PARM_CNT_MISS: p = "Disparité du nombre de Paramètres"; break;
+ case MSG_PREC_VBLP_NULL: p = "ARRAY SetPrecision: Vblp est NULL"; break;
+ case MSG_PRIV_INSTR: p = "Instruction privilégiée"; break;
+ case MSG_PROCADD_ERROR: p = "Erreur %d sur l'adresse de %s"; break;
+ case MSG_QUERY_CANCELLED: p = "Requête interrompue par l'utilisateur"; break;
+ case MSG_RANGE_NO_JOIN: p = "Range non compatible avec les index de jointure"; break;
+ case MSG_RC_READING: p = "rc=%d en lecture de la table %s"; break;
+ case MSG_READY: p = "Prêt"; break;
+ case MSG_READ_ERROR: p = "Erreur en lecture sur %s: %s"; break;
+ case MSG_READ_ONLY: p = "Cette table protégée en lecture seule ne peut être modifiée"; break;
+ case MSG_READ_SEEK_ERROR: p = "Erreur de recherche en lecture: %s"; break;
+ case MSG_REGISTER_ERR: p = "Enregistrement NS impossible, préfix='%s' et href='%s'"; break;
+ case MSG_REMOVE_ERROR: p = "Erreur en supprimant %s: %s"; break;
+ case MSG_RENAME_ERROR: p = "Erreur renommant %s en %s: %s"; break;
+ case MSG_ROWID_NOT_IMPL: p = "RowNumber non implémenté pour les tables de type %s"; break;
+ case MSG_SEC_KEY_FIRST: p = "Les sections et clés doivent être insérées en premier"; break;
+ case MSG_SEC_NAME_FIRST: p = "Le nom de section doit être en tête de liste en insertion"; break;
+ case MSG_SEP_IN_FIELD: p = "Le champ %d contient le caractère séparateur"; break;
+ case MSG_SEQUENCE_ERROR: p = "HSTMT: Allocation hors séquence"; break;
+ case MSG_SETEOF_ERROR: p = "Erreur %d dans SetEndOfFile"; break;
+ case MSG_SETRECPOS_NIY: p = "SetRecpos non implémenté pour ce type de table"; break;
+ case MSG_SET_STR_TRUNC: p = "SetValue: Chaîne de caractères tronquée"; break;
+ case MSG_SFP_ERROR: p = "Erreur sur SetFilePointer: %s"; break;
+ case MSG_SHARED_LIB_ERR: p = "Erreur au chargement de la librairie partagée %s: %s"; break;
+ case MSG_SINGLE_STEP: p = "Pas à pas"; break;
+ case MSG_SORTING_VAL: p = "Tri de %d valeurs"; break;
+ case MSG_SPCOL_READONLY: p = "La colonne spéciale %s est en lecture seulement"; break;
+ case MSG_SQL_CONF_ERROR: p = "Erreur SQL: SQL_CONFORMANCE"; break;
+ case MSG_SRCH_CLOSE_ERR: p = "Erreur à la fermeture de l'Handle de recherche"; break;
+ case MSG_SRC_TABLE_UNDEF: p = "La table source n'est pas définie"; break;
+ case MSG_STACK_OVERFLOW: p = "Dépassement de capacité de la pile"; break;
+ case MSG_TABDIR_READONLY: p = "Les tables DIR sont en lecture seulement"; break;
+ case MSG_TABLE_NOT_OPT: p = "Table non optimisable"; break;
+ case MSG_TABLE_NO_INDEX: p = "La table %s n'est pas indexable"; break;
+ case MSG_TABLE_READ_ONLY: p = "Les tables %s sont en lecture seulement "; break;
+ case MSG_TABMUL_READONLY: p = "Les tables multiples sont en lecture seulement"; break;
+ case MSG_TOO_MANY_FIELDS: p = "Trop de champs ligne %d de %s"; break;
+ case MSG_TOO_MANY_JUMPS: p = "Trop de niveaux de saut"; break;
+ case MSG_TOO_MANY_KEYS: p = "Trop de clés (%d)"; break;
+ case MSG_TO_BLK_IS_NULL: p = "To Blk est nul"; break;
+ case MSG_TRUNCATE_ERROR: p = "Erreur en troncation: %s"; break;
+ case MSG_TRUNC_BY_ESTIM: p = "Tronqué par l'option Estimate"; break;
+ case MSG_TYPE_MISMATCH: p = "Clé et source ne sont pas du même type"; break;
+ case MSG_TYPE_VALUE_ERR: p = "Colonne %s: disparité type(%s)/valeur(%s)"; break;
+ case MSG_UNBALANCE_QUOTE: p = "Appostrophe en trop ligne %d"; break;
+ case MSG_UNDEFINED_AM: p = "COLBLK %s: méthode d'accès indéfinie"; break;
+ case MSG_UNKNOWN_EXCPT: p = "Exception non répertoriée"; break;
+ case MSG_UNMATCH_FIL_ARG: p = "Argument de filtre dépareillé"; break;
+ case MSG_UPDATE_ERROR: p = "Erreur en Update sur %s"; break;
+ case MSG_UPD_ZIP_NOT_IMP: p = "Mise à jour des tables ZDOS non encore implementé"; break;
+ case MSG_VALSTR_TOO_LONG: p = "Valeur %s trop longue pour une chaîne de longueur %d"; break;
+ case MSG_VALTYPE_NOMATCH: p = "Disparité types de valeur"; break;
+ case MSG_VALUE_ERROR: p = "Colonne %s: bloc valeur nul"; break;
+ case MSG_VALUE_TOO_BIG: p = "Valeur %lld trop grande pour la colonne %s"; break;
+ case MSG_VALUE_TOO_LONG: p = "Valeur %s trop longue pour la colonne %s de longueur %d"; break;
+ case MSG_VAL_ALLOC_ERR: p = "Allocation impossible du noeud valeur"; break;
+ case MSG_VIR_NO_DELETE: p = "Delete impossible sur les tables %s"; break;
+ case MSG_VIR_READ_ONLY: p = "Les tables virtuelles %s sont en lecture seulement"; break;
+ case MSG_VOID_FIRST_ARG: p = "Le premier argument ne doit pas être vide"; break;
+ case MSG_WORK_AREA: p = "Espace de travail: %s"; break;
+ case MSG_WRITE_SEEK_ERR: p = "Erreur de recherche en écriture: %s"; break;
+ case MSG_WRITE_STRERROR: p = "Erreur en écriture sur %s: %s"; break;
+ case MSG_WRITING: p = "Ecriture"; break;
+ case MSG_WRITING_ERROR: p = "Erreur à l'écriture de %s: %s"; break;
+ case MSG_WS_CONV_ERR: p = "Erreur de convertion de %s en WS"; break;
+ case MSG_XCOL_MISMATCH: p = "La colonne %s ne correspond pas à l'index"; break;
+ case MSG_XFILE_READERR: p = "Erreur %d en lisant le fichier index"; break;
+ case MSG_XFILE_WRITERR: p = "Erreur en écrivant le fichier index: %s"; break;
+ case MSG_XMLTAB_INIT_ERR: p = "Erreur d'initialisation de la table XML"; break;
+ case MSG_XML_INIT_ERROR: p = "Erreur d'initialisation du nouveau fichier XML"; break;
+ case MSG_XPATH_CNTX_ERR: p = "Le nouveau contexte XPath ne peut être créé"; break;
+ case MSG_XPATH_EVAL_ERR: p = "Impossible d'évaluer l'emplacement xpath '%s'"; break;
+ case MSG_XPATH_NOT_SUPP: p = "Xpath non supporté colonne %s"; break;
diff --git a/storage/connect/french.msg b/storage/connect/french.msg
new file mode 100644
index 00000000000..019df607be3
--- /dev/null
+++ b/storage/connect/french.msg
@@ -0,0 +1,366 @@
+ 100 IDS_TABLES "Table Entêtes"
+ 101 IDS_TAB_01 "Catalogue"
+ 102 IDS_TAB_02 "Schéma"
+ 103 IDS_TAB_03 "Nom"
+ 104 IDS_TAB_04 "Type"
+ 105 IDS_TAB_05 "Remarque"
+ 106 IDS_COLUMNS "Colonne Entêtes"
+ 107 IDS_COL_01 "Cat_Table"
+ 108 IDS_COL_02 "Schem_Table"
+ 109 IDS_COL_03 "Nom_Table"
+ 110 IDS_COL_04 "Nom_Colonne"
+ 111 IDS_COL_05 "Type_Données"
+ 112 IDS_COL_06 "Nom_Type"
+ 113 IDS_COL_07 "Précision"
+ 114 IDS_COL_08 "Longueur"
+ 115 IDS_COL_09 "Echelle"
+ 116 IDS_COL_10 "Base"
+ 117 IDS_COL_11 "Nullifiable"
+ 118 IDS_COL_12 "Remarques"
+ 119 IDS_PKEY "Clé Entêtes"
+ 120 IDS_PKY_01 "Cat_Table"
+ 121 IDS_PKY_02 "Schem_Table"
+ 122 IDS_PKY_03 "Nom_Table"
+ 123 IDS_PKY_04 "Nom_Colonne"
+ 124 IDS_PKY_05 "Numéro_Clé"
+ 125 IDS_PKY_06 "Nom_Clé"
+ 126 IDS_STAT "Stat Entêtes"
+ 127 IDS_STA_01 "Table_Catalog"
+ 128 IDS_STA_02 "Table_Schema"
+ 129 IDS_STA_03 "Table_Name"
+ 130 IDS_STA_04 "Non_Unique"
+ 131 IDS_STA_05 "Index_Qualifier"
+ 132 IDS_STA_06 "Index_Name"
+ 133 IDS_STA_07 "Type"
+ 134 IDS_STA_08 "Seq_in_Index"
+ 135 IDS_STA_09 "Column_Name"
+ 136 IDS_STA_10 "Collation"
+ 137 IDS_STA_11 "Cardinality"
+ 138 IDS_STA_12 "Pages"
+ 139 IDS_STA_13 "Filter_Condition"
+ 140 IDS_DRIVER "Driver Entêtes"
+ 141 IDS_DRV_01 "Description"
+ 142 IDS_DRV_02 "Attributs"
+ 143 IDS_DSRC "DataSrc Entêtes"
+ 144 IDS_DSC_01 "Nom"
+ 145 IDS_DSC_02 "Description"
+ 200 ACCESS_VIOLATN "Violation accès mémoire"
+ 201 ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s"
+ 202 ALLOC_ERROR "Erreur d'allocation de %s"
+ 203 ANSWER_TYPE "Réponse de type"
+ 204 API_CONF_ERROR "Erreur SQL: API_CONFORMANCE"
+ 205 APPL_NOT_INIT "Application non initialisée"
+ 206 ARRAY_BNDS_EXCD "Hors limite de tableau"
+ 207 BAD_ARRAY_OPER "Les tableaux doivent utiliser l'opérateur IN"
+ 208 BAD_ARRAY_TYPE "Type=%d invalide pour un tableau"
+ 209 BAD_ARRAY_VAL "Les tableaux doivent avoir le même nombre de valeurs"
+ 210 BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s"
+ 211 BAD_BLK_ESTIM "Nombre de blocs supérieur à l'estimation"
+ 212 BAD_BLK_SIZE "Taille du bloc %d non conforme"
+ 213 BAD_BYTE_NUM "Le nombre d'octets écrits est faux"
+ 214 BAD_BYTE_READ "Le nombre d'octets lus est faux"
+ 215 BAD_COL_TYPE "Type invalide %s pour la colonne %s"
+ 216 BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s"
+ 217 BAD_CONST_TYPE "Type=%d invalide pour une constante"
+ 218 BAD_CONV_TYPE "Convertion de type invalide %d"
+ 219 BAD_DATETIME "Valeur date/temps invalide"
+ 220 BAD_DBF_FILE "Le fichier DBF %s est altéré"
+ 221 BAD_DBF_REC "Fichier DBF %s altéré enregistrement %d"
+ 222 BAD_DBF_TYPE "Type DBF %c non supporté colonne %s"
+ 223 BAD_DIRECTORY "Répertoire invalide %s: %s"
+ 224 BAD_FIELD_RANK "Rang %d invalide pour la colonne %s"
+ 225 BAD_FIELD_TYPE "Mauvais type de champ %s"
+ 226 BAD_FILE_HANDLE "Handle de fichier invalide: %s"
+ 227 BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"
+ 228 BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d"
+ 229 BAD_FILTER_OP "Opérateur de filtre invalide %d"
+ 230 BAD_FLD_FORMAT "Format invalide pour le champs %d de %s"
+ 231 BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s"
+ 232 BAD_FREQ_SET "Spécification erronnée de Freq pour la colonne %s"
+ 233 BAD_FUNC_MODE "%s: mode invalide %d"
+ 234 BAD_HANDLE_VAL "Valeur Handle invalide"
+ 235 BAD_HEADER "Fichier %s: bloc en-tête altéré"
+ 236 BAD_HEAD_END "Lecture fin d'en-tête impossible"
+ 237 BAD_INDEX_FILE "Fichier index %s corrompu"
+ 238 BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s"
+ 239 BAD_LINE_LEN "Longueur ligne non égale à Lrecl"
+ 240 BAD_LRECL "Disparité lrecl table/fichier (%d,%hd)"
+ 241 BAD_NODE_TYPE "Type noeud erroné pour la table"
+ 242 BAD_OFFSET_VAL "Nul offset invalide pour une table CSV"
+ 243 BAD_OPEN_MODE "Mode d'ouverture invalide %d"
+ 244 BAD_PARAM_TYPE "%.8s: Paramètre de type=%d invalide"
+ 245 BAD_PARM_COUNT "Nombre de paramètres incohérent"
+ 246 BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d"
+ 247 BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s"
+ 248 BAD_RECFM "Recfm type %d invalide pour DOSCOL"
+ 249 BAD_RECFM_VAL "Valeur invalide %d de Recfm"
+ 250 BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect à respecter"
+ 251 BAD_SET_STRING "SetValue: appel invalide pour STRING"
+ 252 BAD_SPECIAL_COL "Colonne spéciale invalide %s"
+ 253 BAD_SPEC_COLUMN "Colonne spéciale invalide pour ce type de table"
+ 254 BAD_TABLE_TYPE "Type invalide %s pour la table %s"
+ 255 BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE"
+ 256 BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs"
+ 257 BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs"
+ 258 BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s"
+ 259 BAD_VALUE_TYPE "Type de valeur invalide %d"
+ 260 BAD_VAL_UPDATE "Impossible de déterminer quelle valeur %s doit être mise à jour"
+ 261 BAS_NS_LIST "Format invalide de la liste des espace-noms"
+ 262 BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)"
+ 263 BIN_MODE_FAIL "Echec mode binaire: %s"
+ 264 BLKTYPLEN_MISM "Disparité types/longueurs de bloc dans SetValue"
+ 265 BLK_IS_NULL "Blk est nul"
+ 266 BREAKPOINT "Point de contrôle"
+ 267 BUILD_INDEX "Construction index %s sur %s"
+ 268 CANNOT_OPEN "Ouverture impossible de %s"
+ 269 CHSIZE_ERROR "Erreur dans chsize: %s"
+ 270 COL_ALLOC_ERR "Allocation impossible du noeud colonne"
+ 271 COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s"
+ 272 COL_NOT_SORTED "La colonne %s de la table %s n'est pas triée"
+ 273 COL_NUM_MISM "Disparité du nombre de colonnes"
+ 274 COM_ERROR "Erreur Com"
+ 275 CONCAT_SUBNODE "Concaténation de sous-noeuds impossible"
+ 276 CONNECT_CANCEL "Connection interrompue par l'utilisateur"
+ 277 CONTROL_C_EXIT "Exit par Ctrl-C"
+ 278 DATABASE_LOADED "Base de données %s chargée"
+ 279 DATA_MISALIGN "Mauvais alignement pour ce type de données"
+ 280 DBASE_FILE "Fichier dBASE dbf: "
+ 281 DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s"
+ 282 DEL_FILE_ERR "Erreur à l'effacement de %s"
+ 283 DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d"
+ 284 DEL_WRITE_ERROR "Delete: erreur en écriture: %s"
+ 285 DEPREC_FLAG "Option Flag périmée, utiliser Coltype"
+ 286 DLL_LOAD_ERROR "Erreur %d au chargement du module %s"
+ 287 DOM_NOT_SUPP "MS-DOM non supporté par cette version"
+ 288 DVAL_NOTIN_LIST "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"
+ 289 EMPTY_DOC "Document vide"
+ 290 EMPTY_FILE "%s du fichier vide %s: "
+ 291 EOF_AFTER_LINE "Fin de fichier après la ligne %d"
+ 292 EOF_INDEX_FILE "EOF lisant le fichier index"
+ 293 ERROR_IN_LSK "Erreur %d dans lseek64"
+ 294 ERROR_IN_SFP "Erreur %d dans SetFilePointer"
+ 295 ERR_READING_REC "Erreur lisant l'enregistrement %d de %s"
+ 296 FAIL_ADD_NODE "L'ajout du noeud %s dans la table a échoué"
+ 297 FETCH_NO_RES "Fetch: Pas de Résultats"
+ 298 FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d"
+ 299 FILELEN_ERROR "Erreur dans %s pour %s"
+ 300 FILE_IS_EMPTY "Le fichier %s est vide"
+ 301 FILE_MAP_ERR "Erreur de File mapping"
+ 302 FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d"
+ 303 FILE_OPEN_YET "Fichier %s déjà ouvert"
+ 304 FILE_UNFOUND "Fichier %s non trouvé"
+ 305 FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s"
+ 306 FLT_BAD_RESULT "Virgule flottante: résultat inexacte"
+ 307 FLT_DENORMAL_OP "Opérande virgule flottante non normalisé"
+ 308 FLT_INVALID_OP "Opération virgule flottante invalide"
+ 309 FLT_OVERFLOW "Dépassement de capacité virgule flottante"
+ 310 FLT_STACK_CHECK "Virgule flottante: Erreur de la pile"
+ 311 FLT_UNDERFLOW "Sous-dépassement de capacité virgule flottante"
+ 312 FLT_ZERO_DIVIDE "Virgule flottante: division par zéro"
+ 313 FMT_WRITE_NIY "L'écriture des fichiers %s n'est pas encore implémentée"
+ 314 FOXPRO_FILE "Fichier FoxPro: "
+ 315 FPUTS_ERROR "Erreur dans fputs: %s"
+ 316 FSEEK_ERROR "Erreur dans fseek: %s"
+ 317 FSETPOS_ERROR "Erreur dans fseek pour i=%d"
+ 318 FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s"
+ 319 FUNCTION_ERROR "Erreur dans %s: %d"
+ 320 FUNC_ERRNO "Erreur %d dans %s"
+ 321 FUNC_ERROR "Erreur dans %s"
+ 322 FUNC_ERR_S "Erreur dans %s: %s"
+ 323 FWRITE_ERROR "Erreur dans fwrite: %s"
+ 324 GET_DIST_VALS "Récupération des valeurs distinctes de "
+ 325 GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s"
+ 326 GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n"
+ 327 GUARD_PAGE "Violation de page de garde"
+ 328 GZOPEN_ERROR "gzopen %s: erreur %d sur %s"
+ 329 ILLEGAL_INSTR "Instruction illégale"
+ 330 ILL_FILTER_CONV "Conversion implicite illégale dans un filtre"
+ 331 INDEX_NOT_UNIQ "L'index n'est pas Unique"
+ 332 INDEX_YET_ON "L'index %s existe déjà sur %s"
+ 333 INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s"
+ 334 INDX_EXIST_YET "L'entrée index existe déjà"
+ 335 INIT_FAILED "L'initialisation de %s a échoué"
+ 336 INT_COL_ERROR "Erreur interne sur la colonne index %s"
+ 337 INT_OVERFLOW "Dépassement de capacité sur entier"
+ 338 INT_ZERO_DIVIDE "Division entière par zéro"
+ 339 INVALID_DISP "Disposition invalide"
+ 340 INVALID_FTYPE "SBV: Ftype %d invalide"
+ 341 INVALID_HANDLE "Poignée invalide"
+ 342 INVALID_OPER "Opérateur invalide %d pour %s"
+ 343 INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s"
+ 344 INV_COL_TYPE "Type de colonne %s invalide"
+ 345 INV_DEF_READ "Lecture différée invalide rc=%d"
+ 346 INV_DIRCOL_OFST "Offset invalide pour une colonne DIR"
+ 347 INV_MAP_POS "Position mémoire invalide"
+ 348 INV_RAND_ACC "L'accès aléatoire d'une table non optimisée est impossible"
+ 349 INV_REC_POS "Position d'enregistrement invalide"
+ 350 INV_RESULT_TYPE "Type de résultat invalide %s"
+ 351 INV_UPDT_TABLE "Table %s invalide pour Update"
+ 352 IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery"
+ 353 KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset clé"
+ 354 KEY_ALLOC_ERROR "Erreur d'allocation mémoire, Klen=%d n=%d"
+ 355 LINE_TOO_LONG "La nouvelle ligne est trop longue"
+ 356 LIST "--Liste--"
+ 357 LOADING_FAILED "Le chargement de %s a échoué"
+ 358 LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tête = %d)"
+ 359 MAKE_EMPTY_FILE "Génération du fichier vide %s: %s"
+ 360 MAKING "Génération"
+ 361 MALLOC_ERROR "Allocation mémoire impossible par %s"
+ 362 MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d"
+ 363 MAXSIZE_ERROR "Maxsize incalculable sur table ouverte"
+ 364 MEM_ALLOC_ERR "Erreur d'allocation mémoire, taille %s = %d"
+ 365 MEM_ALLOC_ERROR "Erreur d'allocation mémoire"
+ 366 MISPLACED_QUOTE "Appostrophe mal placée ligne %d"
+ 367 MISSING_ARG "Argument manquant pour l'opérateur %d"
+ 368 MISSING_FIELD "Champs %d manquant dans %s ligne %d"
+ 369 MISSING_FNAME "Nom du fichier manquant"
+ 370 MISSING_NODE "Noeud %s manquant dans %s"
+ 371 MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d"
+ 372 MIS_TAG_LIST "Liste des balises colonne manquante"
+ 373 MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol"
+ 374 NAME_CONV_ERR "Erreur de convertion du nom de noeud"
+ 375 NEW_DOC_FAILED "Impossible de créer le nouveau document"
+ 376 NEW_RETURN_NULL "NULL renvoyé par New dans PlugEvalLike"
+ 377 NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s"
+ 378 NONCONT_EXCEPT "Exception non-continuable"
+ 379 NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimisée est impossible"
+ 380 NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf "
+ 381 NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d"
+ 382 NO_0DH_HEAD "0DH manquant en fin d'en-tête (dbc=%d)"
+ 383 NO_ACTIVE_DB "Pas de base de données active"
+ 384 NO_CHAR_FROM "Conversion de type %d en caractères impossible"
+ 385 NO_DATE_FMT "Pas de format date pour le valblock de type %d"
+ 386 NO_DEF_FNCCOL "Colonne fonction par défaut introuvable"
+ 387 NO_DEF_PIVOTCOL "Colonne pivot par défaut introuvable"
+ 388 NO_DIR_INDX_RD "Pas d'accès directe des tables %s"
+ 389 NO_FEAT_SUPPORT "%s non supporté dans cette version"
+ 390 NO_FLD_FORMAT "Format absent pour le champs %d de %s"
+ 391 NO_FORMAT_COL "Type COLUMN informattable"
+ 392 NO_FORMAT_TYPE "Le format ne peut pas être défini à partir du type %d"
+ 393 NO_INDEX_READ "Pas d'accès directe des tables multiples"
+ 394 NO_KEY_COL "Pas de colonne clé trouvée"
+ 395 NO_KEY_UPDATE "Le nom des clés ne peut pas être modifié"
+ 396 NO_MAP_INSERT "MAP incompatible avec Insert"
+ 397 NO_MATCHING_COL "Pas de colonne correspondant à %s dans %s"
+ 398 NO_MATCH_COL "Colonne correspondante introuvable"
+ 399 NO_MEMORY "Mémoire pleine"
+ 400 NO_MODE_PADDED "Mode non supporté pour les fichiers 'padded'"
+ 401 NO_MUL_VCT "Les tables VCT ne peuvent pas être multiples"
+ 402 NO_ODBC_DELETE "Delete ne devrait pas être appelé pour les tables ODBC"
+ 403 NO_ODBC_DIRECT "Accès directe des tables ODBC non encore implémenté"
+ 404 NO_ODBC_MUL "Multiple(2) non supporté pour les tables ODBC"
+ 405 NO_ODBC_SPECOL "Pas de colonne spéciale ODBC"
+ 406 NO_PART_DEL "Delete partiel des fichier %s impossible"
+ 407 NO_PART_MAP "Mapping partiel non implémenté pour cet OS"
+ 408 NO_PAR_BLK_INS "Insertion de bloc partiel impossible"
+ 409 NO_PIV_DIR_ACC "Pas d'accès directe aux tables PIVOT"
+ 410 NO_READ_32 "Lecture de 32 octets impossible"
+ 411 NO_RECOV_SPACE "Espace non recouvrable dans le fichier index"
+ 412 NO_ROWID_FOR_AM "Accès direct impossible de ROWID pour les tables de type %s"
+ 413 NO_ROW_NODE "Le nom du Rownode n'est pas défini"
+ 414 NO_SECTION_NAME "Nom de section manquant"
+ 415 NO_SEC_UPDATE "Les noms de section ne peuvent pas être modifiés"
+ 416 NO_SETPOS_YET "SetPos pas encore implémenté pour les fichier %s"
+ 417 NO_SPEC_COL "Pas de colonne spéciales MYSQL"
+ 418 NO_SUB_VAL "Pas de sous-value d'un tableau de type %d"
+ 419 NO_TABCOL_DATA "Pas de données pour la table %s colonne %s"
+ 420 NO_TABLE_DEL "Delete non autorisé pour les tables %s "
+ 421 NO_TAB_DATA "Pas de données pour la table %s"
+ 422 NO_VCT_DELETE "Délétion Partielle non implémentée pour les fichiers VCT"
+ 423 NO_ZIP_DELETE "Delete sur fichier Zip non encore implementé"
+ 424 OPENING "Ouverture"
+ 425 OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s"
+ 426 OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: "
+ 427 OPEN_ERROR_IS "Erreur à l'ouverture de %s: %s"
+ 428 OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s"
+ 429 OPEN_STRERROR "Erreur à l'ouverture: %s"
+ 430 OPTBLK_RD_ERR "Erreur à la lecture d'un bloc optimisation: %s"
+ 431 OPTBLK_WR_ERR "Erreur à l'écriture d'un bloc optimisation: %s"
+ 432 OPTIMIZING "Optimisation de "
+ 433 OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s"
+ 434 OPT_BMAP_WR_ERR "Erreur en écriture des bitmaps d'optimisation: %s"
+ 435 OPT_CANCELLED "Optimisation interrompue par l'utilisateur"
+ 436 OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s"
+ 437 OPT_DVAL_WR_ERR "Erreur en écriture des valeurs distinctes: %s"
+ 438 OPT_HEAD_RD_ERR "Erreur en lecture de l'entête du fichier opt: %s"
+ 439 OPT_HEAD_WR_ERR "Erreur en écriture de l'entête du fichier opt: %s"
+ 440 OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d"
+ 441 OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s"
+ 442 OPT_MAX_WR_ERR "Erreur en écriture des valeurs maxi: %s"
+ 443 OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s"
+ 444 OPT_MIN_WR_ERR "Erreur en écriture des valeurs mini: %s"
+ 445 OPT_NOT_MATCH "Le fichier opt %s n'est pas à jour"
+ 446 PAGE_ERROR "Erreur de pagination"
+ 447 PARM_CNT_MISS "Disparité du nombre de Paramètres"
+ 448 PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL"
+ 449 PRIV_INSTR "Instruction privilégiée"
+ 450 PROCADD_ERROR "Erreur %d sur l'adresse de %s"
+ 451 QUERY_CANCELLED "Requête interrompue par l'utilisateur"
+ 452 RANGE_NO_JOIN "Range non compatible avec les index de jointure"
+ 453 RC_READING "rc=%d en lecture de la table %s"
+ 454 READY "Prêt"
+ 455 READ_ERROR "Erreur en lecture sur %s: %s"
+ 456 READ_ONLY "Cette table protégée en lecture seule ne peut être modifiée"
+ 457 READ_SEEK_ERROR "Erreur de recherche en lecture: %s"
+ 458 REGISTER_ERR "Enregistrement NS impossible, préfix='%s' et href='%s'"
+ 459 REMOVE_ERROR "Erreur en supprimant %s: %s"
+ 460 RENAME_ERROR "Erreur renommant %s en %s: %s"
+ 461 ROWID_NOT_IMPL "RowNumber non implémenté pour les tables de type %s"
+ 462 SEC_KEY_FIRST "Les sections et clés doivent être insérées en premier"
+ 463 SEC_NAME_FIRST "Le nom de section doit être en tête de liste en insertion"
+ 464 SEP_IN_FIELD "Le champ %d contient le caractère séparateur"
+ 465 SEQUENCE_ERROR "HSTMT: Allocation hors séquence"
+ 466 SETEOF_ERROR "Erreur %d dans SetEndOfFile"
+ 467 SETRECPOS_NIY "SetRecpos non implémenté pour ce type de table"
+ 468 SET_STR_TRUNC "SetValue: Chaîne de caractères tronquée"
+ 469 SFP_ERROR "Erreur sur SetFilePointer: %s"
+ 470 SHARED_LIB_ERR "Erreur au chargement de la librairie partagée %s: %s"
+ 471 SINGLE_STEP "Pas à pas"
+ 472 SORTING_VAL "Tri de %d valeurs"
+ 473 SPCOL_READONLY "La colonne spéciale %s est en lecture seulement"
+ 474 SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE"
+ 475 SRCH_CLOSE_ERR "Erreur à la fermeture de l'Handle de recherche"
+ 476 SRC_TABLE_UNDEF "La table source n'est pas définie"
+ 477 STACK_OVERFLOW "Dépassement de capacité de la pile"
+ 478 TABDIR_READONLY "Les tables DIR sont en lecture seulement"
+ 479 TABLE_NOT_OPT "Table non optimisable"
+ 480 TABLE_NO_INDEX "La table %s n'est pas indexable"
+ 481 TABLE_READ_ONLY "Les tables %s sont en lecture seulement "
+ 482 TABMUL_READONLY "Les tables multiples sont en lecture seulement"
+ 483 TOO_MANY_FIELDS "Trop de champs ligne %d de %s"
+ 484 TOO_MANY_JUMPS "Trop de niveaux de saut"
+ 485 TOO_MANY_KEYS "Trop de clés (%d)"
+ 486 TO_BLK_IS_NULL "To Blk est nul"
+ 487 TRUNCATE_ERROR "Erreur en troncation: %s"
+ 488 TRUNC_BY_ESTIM "Tronqué par l'option Estimate"
+ 489 TYPE_MISMATCH "Clé et source ne sont pas du même type"
+ 490 TYPE_VALUE_ERR "Colonne %s: disparité type(%s)/valeur(%s)"
+ 491 UNBALANCE_QUOTE "Appostrophe en trop ligne %d"
+ 492 UNDEFINED_AM "COLBLK %s: méthode d'accès indéfinie"
+ 493 UNKNOWN_EXCPT "Exception non répertoriée"
+ 494 UNMATCH_FIL_ARG "Argument de filtre dépareillé"
+ 495 UPDATE_ERROR "Erreur en Update sur %s"
+ 496 UPD_ZIP_NOT_IMP "Mise à jour des tables ZDOS non encore implementé"
+ 497 VALSTR_TOO_LONG "Valeur %s trop longue pour une chaîne de longueur %d"
+ 498 VALTYPE_NOMATCH "Disparité types de valeur"
+ 499 VALUE_ERROR "Colonne %s: bloc valeur nul"
+ 500 VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s"
+ 501 VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d"
+ 502 VAL_ALLOC_ERR "Allocation impossible du noeud valeur"
+ 503 VIR_NO_DELETE "Delete impossible sur les tables %s"
+ 504 VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement"
+ 505 VOID_FIRST_ARG "Le premier argument ne doit pas être vide"
+ 506 WORK_AREA "Espace de travail: %s"
+ 507 WRITE_SEEK_ERR "Erreur de recherche en écriture: %s"
+ 508 WRITE_STRERROR "Erreur en écriture sur %s: %s"
+ 509 WRITING "Ecriture"
+ 510 WRITING_ERROR "Erreur à l'écriture de %s: %s"
+ 511 WS_CONV_ERR "Erreur de convertion de %s en WS"
+ 512 XCOL_MISMATCH "La colonne %s ne correspond pas à l'index"
+ 513 XFILE_READERR "Erreur %d en lisant le fichier index"
+ 514 XFILE_WRITERR "Erreur en écrivant le fichier index: %s"
+ 515 XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML"
+ 516 XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML"
+ 517 XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut être créé"
+ 518 XPATH_EVAL_ERR "Impossible d'évaluer l'emplacement xpath '%s'"
+ 519 XPATH_NOT_SUPP "Xpath non supporté colonne %s"
diff --git a/storage/connect/frids.h b/storage/connect/frids.h
new file mode 100644
index 00000000000..561dbb68837
--- /dev/null
+++ b/storage/connect/frids.h
@@ -0,0 +1,46 @@
+ case IDS_TABLES: p = "Table Entêtes"; break;
+ case IDS_TAB_01: p = "Catalogue"; break;
+ case IDS_TAB_02: p = "Schéma"; break;
+ case IDS_TAB_03: p = "Nom"; break;
+ case IDS_TAB_04: p = "Type"; break;
+ case IDS_TAB_05: p = "Remarque"; break;
+ case IDS_COLUMNS: p = "Colonne Entêtes"; break;
+ case IDS_COL_01: p = "Cat_Table"; break;
+ case IDS_COL_02: p = "Schem_Table"; break;
+ case IDS_COL_03: p = "Nom_Table"; break;
+ case IDS_COL_04: p = "Nom_Colonne"; break;
+ case IDS_COL_05: p = "Type_Données"; break;
+ case IDS_COL_06: p = "Nom_Type"; break;
+ case IDS_COL_07: p = "Précision"; break;
+ case IDS_COL_08: p = "Longueur"; break;
+ case IDS_COL_09: p = "Echelle"; break;
+ case IDS_COL_10: p = "Base"; break;
+ case IDS_COL_11: p = "Nullifiable"; break;
+ case IDS_COL_12: p = "Remarques"; break;
+ case IDS_PKEY: p = "Clé Entêtes"; break;
+ case IDS_PKY_01: p = "Cat_Table"; break;
+ case IDS_PKY_02: p = "Schem_Table"; break;
+ case IDS_PKY_03: p = "Nom_Table"; break;
+ case IDS_PKY_04: p = "Nom_Colonne"; break;
+ case IDS_PKY_05: p = "Numéro_Clé"; break;
+ case IDS_PKY_06: p = "Nom_Clé"; break;
+ case IDS_STAT: p = "Stat Entêtes"; break;
+ case IDS_STA_01: p = "Table_Catalog"; break;
+ case IDS_STA_02: p = "Table_Schema"; break;
+ case IDS_STA_03: p = "Table_Name"; break;
+ case IDS_STA_04: p = "Non_Unique"; break;
+ case IDS_STA_05: p = "Index_Qualifier"; break;
+ case IDS_STA_06: p = "Index_Name"; break;
+ case IDS_STA_07: p = "Type"; break;
+ case IDS_STA_08: p = "Seq_in_Index"; break;
+ case IDS_STA_09: p = "Column_Name"; break;
+ case IDS_STA_10: p = "Collation"; break;
+ case IDS_STA_11: p = "Cardinality"; break;
+ case IDS_STA_12: p = "Pages"; break;
+ case IDS_STA_13: p = "Filter_Condition"; break;
+ case IDS_DRIVER: p = "Driver Entêtes"; break;
+ case IDS_DRV_01: p = "Description"; break;
+ case IDS_DRV_02: p = "Attributs"; break;
+ case IDS_DSRC: p = "DataSrc Entêtes"; break;
+ case IDS_DSC_01: p = "Nom"; break;
+ case IDS_DSC_02: p = "Description"; break;
diff --git a/storage/connect/frmsg.h b/storage/connect/frmsg.h
new file mode 100644
index 00000000000..d58779b948f
--- /dev/null
+++ b/storage/connect/frmsg.h
@@ -0,0 +1,320 @@
+#define MSG_ACCESS_VIOLATN "Violation accès mémoire"
+#define MSG_ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s"
+#define MSG_ALLOC_ERROR "Erreur d'allocation de %s"
+#define MSG_ANSWER_TYPE "Réponse de type"
+#define MSG_API_CONF_ERROR "Erreur SQL: API_CONFORMANCE"
+#define MSG_APPL_NOT_INIT "Application non initialisée"
+#define MSG_ARRAY_BNDS_EXCD "Hors limite de tableau"
+#define MSG_BAD_ARRAY_OPER "Les tableaux doivent utiliser l'opérateur IN"
+#define MSG_BAD_ARRAY_TYPE "Type=%d invalide pour un tableau"
+#define MSG_BAD_ARRAY_VAL "Les tableaux doivent avoir le même nombre de valeurs"
+#define MSG_BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s"
+#define MSG_BAD_BLK_ESTIM "Nombre de blocs supérieur à l'estimation"
+#define MSG_BAD_BLK_SIZE "Taille du bloc %d non conforme"
+#define MSG_BAD_BYTE_NUM "Le nombre d'octets écrits est faux"
+#define MSG_BAD_BYTE_READ "Le nombre d'octets lus est faux"
+#define MSG_BAD_COL_TYPE "Type invalide %s pour la colonne %s"
+#define MSG_BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s"
+#define MSG_BAD_CONST_TYPE "Type=%d invalide pour une constante"
+#define MSG_BAD_CONV_TYPE "Convertion de type invalide %d"
+#define MSG_BAD_DATETIME "Valeur date/temps invalide"
+#define MSG_BAD_DBF_FILE "Le fichier DBF %s est altéré"
+#define MSG_BAD_DBF_REC "Fichier DBF %s altéré enregistrement %d"
+#define MSG_BAD_DBF_TYPE "Type DBF %c non supporté colonne %s"
+#define MSG_BAD_DIRECTORY "Répertoire invalide %s: %s"
+#define MSG_BAD_FIELD_RANK "Rang %d invalide pour la colonne %s"
+#define MSG_BAD_FIELD_TYPE "Mauvais type de champ %s"
+#define MSG_BAD_FILE_HANDLE "Handle de fichier invalide: %s"
+#define MSG_BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"
+#define MSG_BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d"
+#define MSG_BAD_FILTER_OP "Opérateur de filtre invalide %d"
+#define MSG_BAD_FLD_FORMAT "Format invalide pour le champs %d de %s"
+#define MSG_BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s"
+#define MSG_BAD_FREQ_SET "Spécification erronnée de Freq pour la colonne %s"
+#define MSG_BAD_FUNC_MODE "%s: mode invalide %d"
+#define MSG_BAD_HANDLE_VAL "Valeur Handle invalide"
+#define MSG_BAD_HEADER "Fichier %s: bloc en-tête altéré"
+#define MSG_BAD_HEAD_END "Lecture fin d'en-tête impossible"
+#define MSG_BAD_INDEX_FILE "Fichier index %s corrompu"
+#define MSG_BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s"
+#define MSG_BAD_LINE_LEN "Longueur ligne non égale à Lrecl"
+#define MSG_BAD_LRECL "Disparité lrecl table/fichier (%d,%hd)"
+#define MSG_BAD_NODE_TYPE "Type noeud erroné pour la table"
+#define MSG_BAD_OFFSET_VAL "Nul offset invalide pour une table CSV"
+#define MSG_BAD_OPEN_MODE "Mode d'ouverture invalide %d"
+#define MSG_BAD_PARAM_TYPE "%.8s: Paramètre de type=%d invalide"
+#define MSG_BAD_PARM_COUNT "Nombre de paramètres incohérent"
+#define MSG_BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d"
+#define MSG_BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s"
+#define MSG_BAD_RECFM "Recfm type %d invalide pour DOSCOL"
+#define MSG_BAD_RECFM_VAL "Valeur invalide %d de Recfm"
+#define MSG_BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect à respecter"
+#define MSG_BAD_SET_STRING "SetValue: appel invalide pour STRING"
+#define MSG_BAD_SPECIAL_COL "Colonne spéciale invalide %s"
+#define MSG_BAD_SPEC_COLUMN "Colonne spéciale invalide pour ce type de table"
+#define MSG_BAD_TABLE_TYPE "Type invalide %s pour la table %s"
+#define MSG_BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE"
+#define MSG_BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs"
+#define MSG_BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs"
+#define MSG_BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s"
+#define MSG_BAD_VALUE_TYPE "Type de valeur invalide %d"
+#define MSG_BAD_VAL_UPDATE "Impossible de déterminer quelle valeur %s doit être mise à jour"
+#define MSG_BAS_NS_LIST "Format invalide de la liste des espace-noms"
+#define MSG_BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)"
+#define MSG_BIN_MODE_FAIL "Echec mode binaire: %s"
+#define MSG_BLKTYPLEN_MISM "Disparité types/longueurs de bloc dans SetValue"
+#define MSG_BLK_IS_NULL "Blk est nul"
+#define MSG_BREAKPOINT "Point de contrôle"
+#define MSG_BUILD_INDEX "Construction index %s sur %s"
+#define MSG_CANNOT_OPEN "Ouverture impossible de %s"
+#define MSG_CHSIZE_ERROR "Erreur dans chsize: %s"
+#define MSG_COL_ALLOC_ERR "Allocation impossible du noeud colonne"
+#define MSG_COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s"
+#define MSG_COL_NOT_SORTED "La colonne %s de la table %s n'est pas triée"
+#define MSG_COL_NUM_MISM "Disparité du nombre de colonnes"
+#define MSG_COM_ERROR "Erreur Com"
+#define MSG_CONCAT_SUBNODE "Concaténation de sous-noeuds impossible"
+#define MSG_CONNECT_CANCEL "Connection interrompue par l'utilisateur"
+#define MSG_CONTROL_C_EXIT "Exit par Ctrl-C"
+#define MSG_DATABASE_LOADED "Base de données %s chargée"
+#define MSG_DATA_MISALIGN "Mauvais alignement pour ce type de données"
+#define MSG_DBASE_FILE "Fichier dBASE dbf: "
+#define MSG_DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s"
+#define MSG_DEL_FILE_ERR "Erreur à l'effacement de %s"
+#define MSG_DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d"
+#define MSG_DEL_WRITE_ERROR "Delete: erreur en écriture: %s"
+#define MSG_DEPREC_FLAG "Option Flag périmée, utiliser Coltype"
+#define MSG_DLL_LOAD_ERROR "Erreur %d au chargement du module %s"
+#define MSG_DOM_NOT_SUPP "MS-DOM non supporté par cette version"
+#define MSG_DVAL_NOTIN_LIST "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"
+#define MSG_EMPTY_DOC "Document vide"
+#define MSG_EMPTY_FILE "%s du fichier vide %s: "
+#define MSG_EOF_AFTER_LINE "Fin de fichier après la ligne %d"
+#define MSG_EOF_INDEX_FILE "EOF lisant le fichier index"
+#define MSG_ERROR_IN_LSK "Erreur %d dans lseek64"
+#define MSG_ERROR_IN_SFP "Erreur %d dans SetFilePointer"
+#define MSG_ERR_READING_REC "Erreur lisant l'enregistrement %d de %s"
+#define MSG_FAIL_ADD_NODE "L'ajout du noeud %s dans la table a échoué"
+#define MSG_FETCH_NO_RES "Fetch: Pas de Résultats"
+#define MSG_FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d"
+#define MSG_FILELEN_ERROR "Erreur dans %s pour %s"
+#define MSG_FILE_IS_EMPTY "Le fichier %s est vide"
+#define MSG_FILE_MAP_ERR "Erreur de File mapping"
+#define MSG_FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d"
+#define MSG_FILE_OPEN_YET "Fichier %s déjà ouvert"
+#define MSG_FILE_UNFOUND "Fichier %s non trouvé"
+#define MSG_FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s"
+#define MSG_FLT_BAD_RESULT "Virgule flottante: résultat inexacte"
+#define MSG_FLT_DENORMAL_OP "Opérande virgule flottante non normalisé"
+#define MSG_FLT_INVALID_OP "Opération virgule flottante invalide"
+#define MSG_FLT_OVERFLOW "Dépassement de capacité virgule flottante"
+#define MSG_FLT_STACK_CHECK "Virgule flottante: Erreur de la pile"
+#define MSG_FLT_UNDERFLOW "Sous-dépassement de capacité virgule flottante"
+#define MSG_FLT_ZERO_DIVIDE "Virgule flottante: division par zéro"
+#define MSG_FMT_WRITE_NIY "L'écriture des fichiers %s n'est pas encore implémentée"
+#define MSG_FOXPRO_FILE "Fichier FoxPro: "
+#define MSG_FPUTS_ERROR "Erreur dans fputs: %s"
+#define MSG_FSEEK_ERROR "Erreur dans fseek: %s"
+#define MSG_FSETPOS_ERROR "Erreur dans fseek pour i=%d"
+#define MSG_FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s"
+#define MSG_FUNCTION_ERROR "Erreur dans %s: %d"
+#define MSG_FUNC_ERRNO "Erreur %d dans %s"
+#define MSG_FUNC_ERROR "Erreur dans %s"
+#define MSG_FUNC_ERR_S "Erreur dans %s: %s"
+#define MSG_FWRITE_ERROR "Erreur dans fwrite: %s"
+#define MSG_GET_DIST_VALS "Récupération des valeurs distinctes de "
+#define MSG_GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s"
+#define MSG_GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n"
+#define MSG_GUARD_PAGE "Violation de page de garde"
+#define MSG_GZOPEN_ERROR "gzopen %s: erreur %d sur %s"
+#define MSG_ILLEGAL_INSTR "Instruction illégale"
+#define MSG_ILL_FILTER_CONV "Conversion implicite illégale dans un filtre"
+#define MSG_INDEX_NOT_UNIQ "L'index n'est pas Unique"
+#define MSG_INDEX_YET_ON "L'index %s existe déjà sur %s"
+#define MSG_INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s"
+#define MSG_INDX_EXIST_YET "L'entrée index existe déjà"
+#define MSG_INIT_FAILED "L'initialisation de %s a échoué"
+#define MSG_INT_COL_ERROR "Erreur interne sur la colonne index %s"
+#define MSG_INT_OVERFLOW "Dépassement de capacité sur entier"
+#define MSG_INT_ZERO_DIVIDE "Division entière par zéro"
+#define MSG_INVALID_DISP "Disposition invalide"
+#define MSG_INVALID_FTYPE "SBV: Ftype %d invalide"
+#define MSG_INVALID_HANDLE "Poignée invalide"
+#define MSG_INVALID_OPER "Opérateur invalide %d pour %s"
+#define MSG_INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s"
+#define MSG_INV_COL_TYPE "Type de colonne %s invalide"
+#define MSG_INV_DEF_READ "Lecture différée invalide rc=%d"
+#define MSG_INV_DIRCOL_OFST "Offset invalide pour une colonne DIR"
+#define MSG_INV_MAP_POS "Position mémoire invalide"
+#define MSG_INV_RAND_ACC "L'accès aléatoire d'une table non optimisée est impossible"
+#define MSG_INV_REC_POS "Position d'enregistrement invalide"
+#define MSG_INV_RESULT_TYPE "Type de résultat invalide %s"
+#define MSG_INV_UPDT_TABLE "Table %s invalide pour Update"
+#define MSG_IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery"
+#define MSG_KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset clé"
+#define MSG_KEY_ALLOC_ERROR "Erreur d'allocation mémoire, Klen=%d n=%d"
+#define MSG_LINE_TOO_LONG "La nouvelle ligne est trop longue"
+#define MSG_LIST "--Liste--"
+#define MSG_LOADING_FAILED "Le chargement de %s a échoué"
+#define MSG_LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tête = %d)"
+#define MSG_MAKE_EMPTY_FILE "Génération du fichier vide %s: %s"
+#define MSG_MAKING "Génération"
+#define MSG_MALLOC_ERROR "Allocation mémoire impossible par %s"
+#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d"
+#define MSG_MAXSIZE_ERROR "Maxsize incalculable sur table ouverte"
+#define MSG_MEM_ALLOC_ERR "Erreur d'allocation mémoire, taille %s = %d"
+#define MSG_MEM_ALLOC_ERROR "Erreur d'allocation mémoire"
+#define MSG_MISPLACED_QUOTE "Appostrophe mal placée ligne %d"
+#define MSG_MISSING_ARG "Argument manquant pour l'opérateur %d"
+#define MSG_MISSING_FIELD "Champs %d manquant dans %s ligne %d"
+#define MSG_MISSING_FNAME "Nom du fichier manquant"
+#define MSG_MISSING_NODE "Noeud %s manquant dans %s"
+#define MSG_MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d"
+#define MSG_MIS_TAG_LIST "Liste des balises colonne manquante"
+#define MSG_MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol"
+#define MSG_NAME_CONV_ERR "Erreur de convertion du nom de noeud"
+#define MSG_NEW_DOC_FAILED "Impossible de créer le nouveau document"
+#define MSG_NEW_RETURN_NULL "NULL renvoyé par New dans PlugEvalLike"
+#define MSG_NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s"
+#define MSG_NONCONT_EXCEPT "Exception non-continuable"
+#define MSG_NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimisée est impossible"
+#define MSG_NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf "
+#define MSG_NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d"
+#define MSG_NO_0DH_HEAD "0DH manquant en fin d'en-tête (dbc=%d)"
+#define MSG_NO_ACTIVE_DB "Pas de base de données active"
+#define MSG_NO_CHAR_FROM "Conversion de type %d en caractères impossible"
+#define MSG_NO_DATE_FMT "Pas de format date pour le valblock de type %d"
+#define MSG_NO_DEF_FNCCOL "Colonne fonction par défaut introuvable"
+#define MSG_NO_DEF_PIVOTCOL "Colonne pivot par défaut introuvable"
+#define MSG_NO_DIR_INDX_RD "Pas d'accès directe des tables %s"
+#define MSG_NO_FEAT_SUPPORT "%s non supporté dans cette version"
+#define MSG_NO_FLD_FORMAT "Format absent pour le champs %d de %s"
+#define MSG_NO_FORMAT_COL "Type COLUMN informattable"
+#define MSG_NO_FORMAT_TYPE "Le format ne peut pas être défini à partir du type %d"
+#define MSG_NO_INDEX_READ "Pas d'accès directe des tables multiples"
+#define MSG_NO_KEY_COL "Pas de colonne clé trouvée"
+#define MSG_NO_KEY_UPDATE "Le nom des clés ne peut pas être modifié"
+#define MSG_NO_MAP_INSERT "MAP incompatible avec Insert"
+#define MSG_NO_MATCHING_COL "Pas de colonne correspondant à %s dans %s"
+#define MSG_NO_MATCH_COL "Colonne correspondante introuvable"
+#define MSG_NO_MEMORY "Mémoire pleine"
+#define MSG_NO_MODE_PADDED "Mode non supporté pour les fichiers 'padded'"
+#define MSG_NO_MUL_VCT "Les tables VCT ne peuvent pas être multiples"
+#define MSG_NO_ODBC_DELETE "Delete ne devrait pas être appelé pour les tables ODBC"
+#define MSG_NO_ODBC_DIRECT "Accès directe des tables ODBC non encore implémenté"
+#define MSG_NO_ODBC_MUL "Multiple(2) non supporté pour les tables ODBC"
+#define MSG_NO_ODBC_SPECOL "Pas de colonne spéciale ODBC"
+#define MSG_NO_PART_DEL "Delete partiel des fichier %s impossible"
+#define MSG_NO_PART_MAP "Mapping partiel non implémenté pour cet OS"
+#define MSG_NO_PAR_BLK_INS "Insertion de bloc partiel impossible"
+#define MSG_NO_PIV_DIR_ACC "Pas d'accès directe aux tables PIVOT"
+#define MSG_NO_READ_32 "Lecture de 32 octets impossible"
+#define MSG_NO_RECOV_SPACE "Espace non recouvrable dans le fichier index"
+#define MSG_NO_ROWID_FOR_AM "Accès direct impossible de ROWID pour les tables de type %s"
+#define MSG_NO_ROW_NODE "Le nom du Rownode n'est pas défini"
+#define MSG_NO_SECTION_NAME "Nom de section manquant"
+#define MSG_NO_SEC_UPDATE "Les noms de section ne peuvent pas être modifiés"
+#define MSG_NO_SETPOS_YET "SetPos pas encore implémenté pour les fichier %s"
+#define MSG_NO_SPEC_COL "Pas de colonne spéciales MYSQL"
+#define MSG_NO_SUB_VAL "Pas de sous-value d'un tableau de type %d"
+#define MSG_NO_TABCOL_DATA "Pas de données pour la table %s colonne %s"
+#define MSG_NO_TABLE_DEL "Delete non autorisé pour les tables %s "
+#define MSG_NO_TAB_DATA "Pas de données pour la table %s"
+#define MSG_NO_VCT_DELETE "Délétion Partielle non implémentée pour les fichiers VCT"
+#define MSG_NO_ZIP_DELETE "Delete sur fichier Zip non encore implementé"
+#define MSG_OPENING "Ouverture"
+#define MSG_OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s"
+#define MSG_OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: "
+#define MSG_OPEN_ERROR_IS "Erreur à l'ouverture de %s: %s"
+#define MSG_OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s"
+#define MSG_OPEN_STRERROR "Erreur à l'ouverture: %s"
+#define MSG_OPTBLK_RD_ERR "Erreur à la lecture d'un bloc optimisation: %s"
+#define MSG_OPTBLK_WR_ERR "Erreur à l'écriture d'un bloc optimisation: %s"
+#define MSG_OPTIMIZING "Optimisation de "
+#define MSG_OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s"
+#define MSG_OPT_BMAP_WR_ERR "Erreur en écriture des bitmaps d'optimisation: %s"
+#define MSG_OPT_CANCELLED "Optimisation interrompue par l'utilisateur"
+#define MSG_OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s"
+#define MSG_OPT_DVAL_WR_ERR "Erreur en écriture des valeurs distinctes: %s"
+#define MSG_OPT_HEAD_RD_ERR "Erreur en lecture de l'entête du fichier opt: %s"
+#define MSG_OPT_HEAD_WR_ERR "Erreur en écriture de l'entête du fichier opt: %s"
+#define MSG_OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d"
+#define MSG_OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s"
+#define MSG_OPT_MAX_WR_ERR "Erreur en écriture des valeurs maxi: %s"
+#define MSG_OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s"
+#define MSG_OPT_MIN_WR_ERR "Erreur en écriture des valeurs mini: %s"
+#define MSG_OPT_NOT_MATCH "Le fichier opt %s n'est pas à jour"
+#define MSG_PAGE_ERROR "Erreur de pagination"
+#define MSG_PARM_CNT_MISS "Disparité du nombre de Paramètres"
+#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL"
+#define MSG_PRIV_INSTR "Instruction privilégiée"
+#define MSG_PROCADD_ERROR "Erreur %d sur l'adresse de %s"
+#define MSG_QUERY_CANCELLED "Requête interrompue par l'utilisateur"
+#define MSG_RANGE_NO_JOIN "Range non compatible avec les index de jointure"
+#define MSG_RC_READING "rc=%d en lecture de la table %s"
+#define MSG_READY "Prêt"
+#define MSG_READ_ERROR "Erreur en lecture sur %s: %s"
+#define MSG_READ_ONLY "Cette table protégée en lecture seule ne peut être modifiée"
+#define MSG_READ_SEEK_ERROR "Erreur de recherche en lecture: %s"
+#define MSG_REGISTER_ERR "Enregistrement NS impossible, préfix='%s' et href='%s'"
+#define MSG_REMOVE_ERROR "Erreur en supprimant %s: %s"
+#define MSG_RENAME_ERROR "Erreur renommant %s en %s: %s"
+#define MSG_ROWID_NOT_IMPL "RowNumber non implémenté pour les tables de type %s"
+#define MSG_SEC_KEY_FIRST "Les sections et clés doivent être insérées en premier"
+#define MSG_SEC_NAME_FIRST "Le nom de section doit être en tête de liste en insertion"
+#define MSG_SEP_IN_FIELD "Le champ %d contient le caractère séparateur"
+#define MSG_SEQUENCE_ERROR "HSTMT: Allocation hors séquence"
+#define MSG_SETEOF_ERROR "Erreur %d dans SetEndOfFile"
+#define MSG_SETRECPOS_NIY "SetRecpos non implémenté pour ce type de table"
+#define MSG_SET_STR_TRUNC "SetValue: Chaîne de caractères tronquée"
+#define MSG_SFP_ERROR "Erreur sur SetFilePointer: %s"
+#define MSG_SHARED_LIB_ERR "Erreur au chargement de la librairie partagée %s: %s"
+#define MSG_SINGLE_STEP "Pas à pas"
+#define MSG_SORTING_VAL "Tri de %d valeurs"
+#define MSG_SPCOL_READONLY "La colonne spéciale %s est en lecture seulement"
+#define MSG_SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE"
+#define MSG_SRCH_CLOSE_ERR "Erreur à la fermeture de l'Handle de recherche"
+#define MSG_SRC_TABLE_UNDEF "La table source n'est pas définie"
+#define MSG_STACK_OVERFLOW "Dépassement de capacité de la pile"
+#define MSG_TABDIR_READONLY "Les tables DIR sont en lecture seulement"
+#define MSG_TABLE_NOT_OPT "Table non optimisable"
+#define MSG_TABLE_NO_INDEX "La table %s n'est pas indexable"
+#define MSG_TABLE_READ_ONLY "Les tables %s sont en lecture seulement "
+#define MSG_TABMUL_READONLY "Les tables multiples sont en lecture seulement"
+#define MSG_TOO_MANY_FIELDS "Trop de champs ligne %d de %s"
+#define MSG_TOO_MANY_JUMPS "Trop de niveaux de saut"
+#define MSG_TOO_MANY_KEYS "Trop de clés (%d)"
+#define MSG_TO_BLK_IS_NULL "To Blk est nul"
+#define MSG_TRUNCATE_ERROR "Erreur en troncation: %s"
+#define MSG_TRUNC_BY_ESTIM "Tronqué par l'option Estimate"
+#define MSG_TYPE_MISMATCH "Clé et source ne sont pas du même type"
+#define MSG_TYPE_VALUE_ERR "Colonne %s: disparité type(%s)/valeur(%s)"
+#define MSG_UNBALANCE_QUOTE "Appostrophe en trop ligne %d"
+#define MSG_UNDEFINED_AM "COLBLK %s: méthode d'accès indéfinie"
+#define MSG_UNKNOWN_EXCPT "Exception non répertoriée"
+#define MSG_UNMATCH_FIL_ARG "Argument de filtre dépareillé"
+#define MSG_UPDATE_ERROR "Erreur en Update sur %s"
+#define MSG_UPD_ZIP_NOT_IMP "Mise à jour des tables ZDOS non encore implementé"
+#define MSG_VALSTR_TOO_LONG "Valeur %s trop longue pour une chaîne de longueur %d"
+#define MSG_VALTYPE_NOMATCH "Disparité types de valeur"
+#define MSG_VALUE_ERROR "Colonne %s: bloc valeur nul"
+#define MSG_VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s"
+#define MSG_VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d"
+#define MSG_VAL_ALLOC_ERR "Allocation impossible du noeud valeur"
+#define MSG_VIR_NO_DELETE "Delete impossible sur les tables %s"
+#define MSG_VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement"
+#define MSG_VOID_FIRST_ARG "Le premier argument ne doit pas être vide"
+#define MSG_WORK_AREA "Espace de travail: %s"
+#define MSG_WRITE_SEEK_ERR "Erreur de recherche en écriture: %s"
+#define MSG_WRITE_STRERROR "Erreur en écriture sur %s: %s"
+#define MSG_WRITING "Ecriture"
+#define MSG_WRITING_ERROR "Erreur à l'écriture de %s: %s"
+#define MSG_WS_CONV_ERR "Erreur de convertion de %s en WS"
+#define MSG_XCOL_MISMATCH "La colonne %s ne correspond pas à l'index"
+#define MSG_XFILE_READERR "Erreur %d en lisant le fichier index"
+#define MSG_XFILE_WRITERR "Erreur en écrivant le fichier index: %s"
+#define MSG_XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML"
+#define MSG_XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML"
+#define MSG_XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut être créé"
+#define MSG_XPATH_EVAL_ERR "Impossible d'évaluer l'emplacement xpath '%s'"
+#define MSG_XPATH_NOT_SUPP "Xpath non supporté colonne %s"
diff --git a/storage/connect/global.h b/storage/connect/global.h
index d35cef2de6f..88e5094d6d2 100644
--- a/storage/connect/global.h
+++ b/storage/connect/global.h
@@ -24,11 +24,13 @@
#endif
#if defined(XMSG)
+//#error Option XMSG is not yet fully implemented
// Definition used to read messages from message file.
#include "msgid.h"
#define MSG(I) PlugReadMessage(NULL, MSG_##I, #I)
#define STEP(I) PlugReadMessage(g, MSG_##I, #I)
#elif defined(NEWMSG)
+//#error Option NEWMSG is not yet fully implemented
// Definition used to get messages from resource.
#include "msgid.h"
#define MSG(I) PlugGetMessage(NULL, MSG_##I)
@@ -47,6 +49,11 @@
#endif // !WIN32
/***********************************************************************/
+/* Define access to the thread based trace value. */
+/***********************************************************************/
+#define trace GetTraceValue()
+
+/***********************************************************************/
/* Miscellaneous Constants */
/***********************************************************************/
#define NO_IVAL -95684275 /* Used by GetIntegerOption */
@@ -205,7 +212,10 @@ typedef struct _activity { /* Describes activity and language */
/*---------------- UNIT ?????????? VERSION ? ----------------------*/
typedef struct _parm {
- void *Value;
+ union {
+ void *Value;
+ int Intval;
+ }; // end union
short Type, Domain;
PPARM Next;
} PARM;
@@ -252,6 +262,7 @@ DllExport void *PlugSubAlloc(PGLOBAL, void *, size_t);
DllExport char *PlugDup(PGLOBAL g, const char *str);
DllExport void *MakePtr(void *, OFFSET);
DllExport void htrc(char const *fmt, ...);
+DllExport int GetTraceValue(void);
#if defined(__cplusplus)
} // extern "C"
diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc
index 93327fa4530..e505907442c 100644
--- a/storage/connect/ha_connect.cc
+++ b/storage/connect/ha_connect.cc
@@ -170,8 +170,8 @@
#define SZWMIN 4194304 // Minimum work area size 4M
extern "C" {
- char version[]= "Version 1.03.0003 August 22, 2014";
- char compver[]= "Version 1.03.0003 " __DATE__ " " __TIME__;
+ char version[]= "Version 1.03.0005 November 08, 2014";
+ char compver[]= "Version 1.03.0005 " __DATE__ " " __TIME__;
#if defined(WIN32)
char slash= '\\';
@@ -179,65 +179,172 @@ extern "C" {
char slash= '/';
#endif // !WIN32
-#if defined(XMSG)
- char msglang[]; // Default message language
-#endif
- int trace= 0; // The general trace value
- int xconv= 0; // The type conversion option
- int zconv= SZCONV; // The text conversion size
- USETEMP Use_Temp= TMP_AUTO; // The temporary file use
+// int trace= 0; // The general trace value
+ ulong xconv= 0; // The type conversion option
+ int zconv= 0; // The text conversion size
} // extern "C"
#if defined(XMAP)
- bool xmap= false;
+ my_bool xmap= false;
#endif // XMAP
- bool xinfo= false;
- uint worksize= SZWORK;
+// uint worksize= 0;
ulong ha_connect::num= 0;
//int DTVAL::Shift= 0;
/* CONNECT system variables */
-static int xtrace= 0;
-static int conv_size= SZCONV;
-static uint work_size= SZWORK;
-static ulong type_conv= 0;
-static ulong use_tempfile= 1;
+//atic int conv_size= 0;
+//atic uint work_size= 0;
+//atic ulong type_conv= 0;
#if defined(XMAP)
-static my_bool indx_map= 0;
+//atic my_bool indx_map= 0;
#endif // XMAP
-static my_bool exact_info= 0;
+#if defined(XMSG)
+extern "C" {
+ char *msg_path;
+} // extern "C"
+#endif // XMSG
/***********************************************************************/
/* Utility functions. */
/***********************************************************************/
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
-void PushWarning(PGLOBAL g, THD *thd, int level);
-bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, const char *host,
- const char *db, char *tab, const char *src, int port);
-
+PQRYRES VirColumns(PGLOBAL g, char *tab, char *db, bool info);
+void PushWarning(PGLOBAL g, THD *thd, int level);
+bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, const char *host,
+ const char *db, char *tab, const char *src, int port);
+bool ExactInfo(void);
+USETEMP UseTemp(void);
+uint GetWorkSize(void);
+void SetWorkSize(uint);
+extern "C" const char *msglang(void);
static PCONNECT GetUser(THD *thd, PCONNECT xp);
static PGLOBAL GetPlug(THD *thd, PCONNECT& lxp);
static handler *connect_create_handler(handlerton *hton,
- TABLE_SHARE *table,
- MEM_ROOT *mem_root);
+ TABLE_SHARE *table,
+ MEM_ROOT *mem_root);
static int connect_assisted_discovery(handlerton *hton, THD* thd,
TABLE_SHARE *table_s,
HA_CREATE_INFO *info);
+/****************************************************************************/
+/* Return str as a zero terminated string. */
+/****************************************************************************/
+static char *strz(PGLOBAL g, LEX_STRING &ls)
+{
+ char *str= (char*)PlugSubAlloc(g, NULL, ls.length + 1);
+
+ memcpy(str, ls.str, ls.length);
+ str[ls.length]= 0;
+ return str;
+} // end of strz
+
/***********************************************************************/
-/* Global variables update functions. */
+/* CONNECT session variables definitions. */
/***********************************************************************/
-static void update_connect_xtrace(MYSQL_THD thd,
- struct st_mysql_sys_var *var,
- void *var_ptr, const void *save)
+// Tracing: 0 no, 1 yes, >1 more tracing
+static MYSQL_THDVAR_INT(xtrace,
+ PLUGIN_VAR_RQCMDARG, "Console trace value.",
+ NULL, NULL, 0, 0, INT_MAX, 1);
+
+// Getting exact info values
+static MYSQL_THDVAR_BOOL(exact_info, PLUGIN_VAR_RQCMDARG,
+ "Getting exact info values",
+ NULL, NULL, 0);
+
+/**
+ Temporary file usage:
+ no: Not using temporary file
+ auto: Using temporary file when needed
+ yes: Allways using temporary file
+ force: Force using temporary file (no MAP)
+ test: Reserved
+*/
+const char *usetemp_names[]=
{
- trace= *(int *)var_ptr= *(int *)save;
-} // end of update_connect_xtrace
+ "NO", "AUTO", "YES", "FORCE", "TEST", NullS
+};
+TYPELIB usetemp_typelib=
+{
+ array_elements(usetemp_names) - 1, "usetemp_typelib",
+ usetemp_names, NULL
+};
+
+static MYSQL_THDVAR_ENUM(
+ use_tempfile, // name
+ PLUGIN_VAR_RQCMDARG, // opt
+ "Temporary file use.", // comment
+ NULL, // check
+ NULL, // update function
+ 1, // def (AUTO)
+ &usetemp_typelib); // typelib
+
+// Size used for g->Sarea_Size
+static MYSQL_THDVAR_UINT(work_size,
+ PLUGIN_VAR_RQCMDARG,
+ "Size of the CONNECT work area.",
+ NULL, NULL, SZWORK, SZWMIN, UINT_MAX, 1);
+
+#if defined(XMSG) || defined(NEWMSG)
+const char *language_names[]=
+{
+ "default", "english", "french", NullS
+};
+
+TYPELIB language_typelib=
+{
+ array_elements(language_names) - 1, "language_typelib",
+ language_names, NULL
+};
+
+static MYSQL_THDVAR_ENUM(
+ msg_lang, // name
+ PLUGIN_VAR_RQCMDARG, // opt
+ "Message language", // comment
+ NULL, // check
+ NULL, // update
+ 1, // def (ENGLISH)
+ &language_typelib); // typelib
+#endif // XMSG || NEWMSG
+
+/***********************************************************************/
+/* Function to export session variable values to other source files. */
+/***********************************************************************/
+extern "C" int GetTraceValue(void) {return THDVAR(current_thd, xtrace);}
+bool ExactInfo(void) {return THDVAR(current_thd, exact_info);}
+USETEMP UseTemp(void) {return (USETEMP)THDVAR(current_thd, use_tempfile);}
+uint GetWorkSize(void) {return THDVAR(current_thd, work_size);}
+void SetWorkSize(uint n)
+{
+ // Changing the session variable value seems to be impossible here
+ // and should be done in a check function
+ push_warning(current_thd, Sql_condition::WARN_LEVEL_WARN, 0,
+ "Work size too big, try setting a smaller value");
+} // end of SetWorkSize
+#if defined(XMSG) || defined(NEWMSG)
+extern "C" const char *msglang(void)
+{
+ return language_names[THDVAR(current_thd, msg_lang)];
+} // end of msglang
+#else // !XMSG && !NEWMSG
+extern "C" const char *msglang(void)
+{
+#if defined(FRENCH)
+ return "french";
+#else // DEFAULT
+ return "english";
+#endif // DEFAULT
+} // end of msglang
+#endif // !XMSG && !NEWMSG
+
+#if 0
+/***********************************************************************/
+/* Global variables update functions. */
+/***********************************************************************/
static void update_connect_zconv(MYSQL_THD thd,
struct st_mysql_sys_var *var,
void *var_ptr, const void *save)
@@ -252,35 +359,57 @@ static void update_connect_xconv(MYSQL_THD thd,
xconv= (int)(*(ulong *)var_ptr= *(ulong *)save);
} // end of update_connect_xconv
-static void update_connect_worksize(MYSQL_THD thd,
- struct st_mysql_sys_var *var,
- void *var_ptr, const void *save)
-{
- worksize= (uint)(*(ulong *)var_ptr= *(ulong *)save);
-} // end of update_connect_worksize
-
-static void update_connect_usetemp(MYSQL_THD thd,
- struct st_mysql_sys_var *var,
- void *var_ptr, const void *save)
-{
- Use_Temp= (USETEMP)(*(ulong *)var_ptr= *(ulong *)save);
-} // end of update_connect_usetemp
-
#if defined(XMAP)
static void update_connect_xmap(MYSQL_THD thd,
struct st_mysql_sys_var *var,
void *var_ptr, const void *save)
{
- xmap= (bool)(*(my_bool *)var_ptr= *(my_bool *)save);
+ xmap= (my_bool)(*(my_bool *)var_ptr= *(my_bool *)save);
} // end of update_connect_xmap
#endif // XMAP
+#endif // 0
-static void update_connect_xinfo(MYSQL_THD thd,
- struct st_mysql_sys_var *var,
- void *var_ptr, const void *save)
+#if 0 // (was XMSG) Unuseful because not called for default value
+static void update_msg_path(MYSQL_THD thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ char *value= *(char**)save;
+ char *old= *(char**)var_ptr;
+
+ if (value)
+ *(char**)var_ptr= my_strdup(value, MYF(0));
+ else
+ *(char**)var_ptr= 0;
+
+ my_free(old);
+} // end of update_msg_path
+
+static int check_msg_path (MYSQL_THD thd, struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value)
{
- xinfo= (bool)(*(my_bool *)var_ptr= *(my_bool *)save);
-} // end of update_connect_xinfo
+ const char *path;
+ char buff[512];
+ int len= sizeof(buff);
+
+ path= value->val_str(value, buff, &len);
+
+ if (path && *path != '*') {
+ /* Save a pointer to the name in the
+ 'file_format_name_map' constant array. */
+ *(char**)save= my_strdup(path, MYF(0));
+ return(0);
+ } else {
+ push_warning_printf(thd,
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_WRONG_ARGUMENTS,
+ "CONNECT: invalid message path");
+ } // endif path
+
+ *(char**)save= NULL;
+ return(1);
+} // end of check_msg_path
+#endif // 0
/***********************************************************************/
/* The CONNECT handlerton object. */
@@ -451,10 +580,25 @@ static int connect_init_func(void *p)
{
DBUG_ENTER("connect_init_func");
- sql_print_information("CONNECT: %s", compver);
+// added from Sergei mail
+#if 0 // (defined(LINUX))
+ Dl_info dl_info;
+ if (dladdr(&connect_hton, &dl_info))
+ {
+ if (dlopen(dl_info.dli_fname, RTLD_NOLOAD | RTLD_NOW | RTLD_GLOBAL) == 0)
+ {
+ sql_print_information("CONNECT: dlopen() failed, OEM table type is not supported");
+ sql_print_information("CONNECT: %s", dlerror());
+ }
+ }
+ else
+ {
+ sql_print_information("CONNECT: dladdr() failed, OEM table type is not supported");
+ sql_print_information("CONNECT: %s", dlerror());
+ }
+#endif // 0 (LINUX)
- // xtrace is now a system variable
- trace= xtrace;
+ sql_print_information("CONNECT: %s", compver);
#ifdef LIBXML2_SUPPORT
XmlInitParserLib();
@@ -473,7 +617,7 @@ static int connect_init_func(void *p)
connect_hton->tablefile_extensions= ha_connect_exts;
connect_hton->discover_table_structure= connect_assisted_discovery;
- if (xtrace)
+ if (trace)
sql_print_information("connect_init: hton=%p", p);
DTVAL::SetTimeShift(); // Initialize time zone shift once for all
@@ -546,9 +690,10 @@ static handler* connect_create_handler(handlerton *hton,
{
handler *h= new (mem_root) ha_connect(hton, table);
- if (xtrace)
- htrc("New CONNECT %p, table: %s\n",
- h, table ? table->table_name.str : "<null>");
+ if (trace)
+ htrc("New CONNECT %p, table: %.*s\n", h,
+ table ? table->table_name.length : 6,
+ table ? table->table_name.str : "<null>");
return h;
} // end of connect_create_handler
@@ -601,8 +746,9 @@ ha_connect::ha_connect(handlerton *hton, TABLE_SHARE *table_arg)
/****************************************************************************/
ha_connect::~ha_connect(void)
{
- if (xtrace)
- htrc("Delete CONNECT %p, table: %s, xp=%p count=%d\n", this,
+ if (trace)
+ htrc("Delete CONNECT %p, table: %.*s, xp=%p count=%d\n", this,
+ table ? table->s->table_name.length : 6,
table ? table->s->table_name.str : "<null>",
xp, xp ? xp->count : 0);
@@ -711,6 +857,7 @@ const char *ha_connect::index_type(uint inx)
return "XINDEX";
case 2: return "REMOTE";
+ case 3: return "VIRTUAL";
} // endswitch
return "Unknown";
@@ -867,10 +1014,11 @@ char *ha_connect::GetStringOption(char *opname, char *sdef)
PTOS options= GetTableOptionStruct();
if (!stricmp(opname, "Connect")) {
- LEX_STRING cnc= (tshp) ? tshp->connect_string : table->s->connect_string;
+ LEX_STRING cnc= (tshp) ? tshp->connect_string
+ : table->s->connect_string;
if (cnc.length)
- opval= GetRealString(cnc.str);
+ opval= GetRealString(strz(xp->g, cnc));
} else if (!stricmp(opname, "Query_String"))
opval= thd_query_string(table->in_use)->str;
@@ -960,6 +1108,8 @@ bool ha_connect::GetBooleanOption(char *opname, bool bdef)
opval= options->readonly;
else if (!stricmp(opname, "SepIndex"))
opval= options->sepindex;
+ else if (!stricmp(opname, "Header"))
+ opval= (options->header != 0); // Is Boolean for some table types
else if (options->oplist)
if ((pv= GetListOption(xp->g, opname, options->oplist)))
opval= (!*pv || *pv == 'y' || *pv == 'Y' || atoi(pv) != 0);
@@ -1184,6 +1334,8 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
pcf->Length= (len) ? len : 11;
} // endelse
+ // For Value setting
+ pcf->Precision= MY_MAX(pcf->Precision, pcf->Length);
break;
default:
break;
@@ -1206,11 +1358,9 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
pcf->Key= 0; // Not used when called from MySQL
// Get the comment if any
- if (fp->comment.str && fp->comment.length) {
- pcf->Remark= (char*)PlugSubAlloc(g, NULL, fp->comment.length + 1);
- memcpy(pcf->Remark, fp->comment.str, fp->comment.length);
- pcf->Remark[fp->comment.length]= 0;
- } else
+ if (fp->comment.str && fp->comment.length)
+ pcf->Remark= strz(g, fp->comment);
+ else
pcf->Remark= NULL;
return fldp;
@@ -1238,8 +1388,8 @@ bool ha_connect::GetIndexOption(KEY *kp, char *opname)
else if (!stricmp(opname, "Mapped"))
opval= options->mapped;
- } else if (kp->comment.str != NULL) {
- char *pv, *oplist= kp->comment.str;
+ } else if (kp->comment.str && kp->comment.length) {
+ char *pv, *oplist= strz(xp->g, kp->comment);
if ((pv= GetListOption(xp->g, opname, oplist)))
opval= (!*pv || *pv == 'y' || *pv == 'Y' || atoi(pv) != 0);
@@ -1276,7 +1426,7 @@ PIXDEF ha_connect::GetIndexInfo(TABLE_SHARE *s)
s= table->s;
for (int n= 0; (unsigned)n < s->keynames.count; n++) {
- if (xtrace)
+ if (trace)
htrc("Getting created index %d info\n", n + 1);
// Find the index to describe
@@ -1336,6 +1486,42 @@ PIXDEF ha_connect::GetIndexInfo(TABLE_SHARE *s)
return toidx;
} // end of GetIndexInfo
+/****************************************************************************/
+/* Returns the index description structure used to make the index. */
+/****************************************************************************/
+bool ha_connect::CheckVirtualIndex(TABLE_SHARE *s)
+{
+
+ char *rid;
+ KEY kp;
+ Field *fp;
+ PGLOBAL& g= xp->g;
+
+ if (!s)
+ s= table->s;
+
+ for (int n= 0; (unsigned)n < s->keynames.count; n++) {
+ kp= s->key_info[n];
+
+ // Now get index information
+
+ // Get the the key parts info
+ for (int k= 0; (unsigned)k < kp.user_defined_key_parts; k++) {
+ fp= kp.key_part[k].field;
+ rid= (fp->option_struct) ? fp->option_struct->special : NULL;
+
+ if (!rid || (stricmp(rid, "ROWID") && stricmp(rid, "ROWNUM"))) {
+ strcpy(g->Message, "Invalid virtual index");
+ return true;
+ } // endif rowid
+
+ } // endfor k
+
+ } // endfor n
+
+ return false;
+} // end of CheckVirtualIndex
+
bool ha_connect::IsPartitioned(void)
{
if (tshp)
@@ -1354,7 +1540,7 @@ const char *ha_connect::GetDBName(const char* name)
const char *ha_connect::GetTableName(void)
{
- return (tshp) ? tshp->table_name.str : table_share->table_name.str;
+ return tshp ? tshp->table_name.str : table_share->table_name.str;
} // end of GetTableName
char *ha_connect::GetPartName(void)
@@ -1647,7 +1833,7 @@ int ha_connect::MakeRecord(char *buf)
PCOL colp= NULL;
DBUG_ENTER("ha_connect::MakeRecord");
- if (xtrace > 1)
+ if (trace > 1)
htrc("Maps: read=%08X write=%08X vcol=%08X defr=%08X defw=%08X\n",
*table->read_set->bitmap, *table->write_set->bitmap,
*table->vcol_set->bitmap,
@@ -1836,6 +2022,7 @@ int ha_connect::ScanRecord(PGLOBAL g, uchar *buf)
} // endswitch type
((DTVAL*)sdvalin)->SetFormat(g, fmt, strlen(fmt));
+ sdvalin->SetNullable(colp->IsNullable());
fp->val_str(&attribute);
sdvalin->SetValue_psz(attribute.c_ptr_safe());
value->SetValue_pval(sdvalin);
@@ -2076,14 +2263,14 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
if (!cond)
return NULL;
- if (xtrace)
+ if (trace)
htrc("Cond type=%d\n", cond->type());
if (cond->type() == COND::COND_ITEM) {
PFIL fp;
Item_cond *cond_item= (Item_cond *)cond;
- if (xtrace)
+ if (trace)
htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(),
cond_item->func_name());
@@ -2117,9 +2304,9 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
Item_func *condf= (Item_func *)cond;
Item* *args= condf->arguments();
- if (xtrace)
+ if (trace)
htrc("Func type=%d argnum=%d\n", condf->functype(),
- condf->argument_count());
+ condf->argument_count());
switch (condf->functype()) {
case Item_func::EQUAL_FUNC:
@@ -2146,11 +2333,11 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
return NULL;
for (i= 0; i < condf->argument_count(); i++) {
- if (xtrace)
+ if (trace)
htrc("Argtype(%d)=%d\n", i, args[i]->type());
if (i >= 2 && !ismul) {
- if (xtrace)
+ if (trace)
htrc("Unexpected arg for vop=%d\n", vop);
continue;
@@ -2167,10 +2354,10 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
!(colp[i]= tdbp->ColDB(g, (PSZ)pField->field->field_name, 0)))
return NULL; // Column does not belong to this table
- if (xtrace) {
+ if (trace) {
htrc("Field index=%d\n", pField->field->field_index);
htrc("Field name=%s\n", pField->field->field_name);
- } // endif xtrace
+ } // endif trace
} else {
char buff[256];
@@ -2187,9 +2374,8 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
switch (args[i]->real_type()) {
case COND::STRING_ITEM:
- pp->Type= TYPE_STRING;
- pp->Value= PlugSubAlloc(g, NULL, res->length() + 1);
- strncpy((char*)pp->Value, res->ptr(), res->length() + 1);
+ pp->Value= PlugSubAllocStr(g, NULL, res->ptr(), res->length());
+ pp->Type= (pp->Value) ? TYPE_STRING : TYPE_ERROR;
break;
case COND::INT_ITEM:
pp->Type= TYPE_INT;
@@ -2217,7 +2403,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
return NULL;
} // endswitch type
- if (xtrace)
+ if (trace)
htrc("Value=%.*s\n", res->length(), res->ptr());
// Append the value to the argument list
@@ -2235,7 +2421,7 @@ PFIL ha_connect::CondFilter(PGLOBAL g, Item *cond)
filp= MakeFilter(g, colp, pop, pfirst, neg);
} else {
- if (xtrace)
+ if (trace)
htrc("Unsupported condition\n");
return NULL;
@@ -2257,7 +2443,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
if (!cond)
return NULL;
- if (xtrace)
+ if (trace)
htrc("Cond type=%d\n", cond->type());
if (cond->type() == COND::COND_ITEM) {
@@ -2267,7 +2453,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
if (x)
return NULL;
- if (xtrace)
+ if (trace)
htrc("Cond: Ftype=%d name=%s\n", cond_item->functype(),
cond_item->func_name());
@@ -2314,7 +2500,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
Item_func *condf= (Item_func *)cond;
Item* *args= condf->arguments();
- if (xtrace)
+ if (trace)
htrc("Func type=%d argnum=%d\n", condf->functype(),
condf->argument_count());
@@ -2345,11 +2531,11 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
return NULL;
for (i= 0; i < condf->argument_count(); i++) {
- if (xtrace)
+ if (trace)
htrc("Argtype(%d)=%d\n", i, args[i]->type());
if (i >= 2 && !ismul) {
- if (xtrace)
+ if (trace)
htrc("Unexpected arg for vop=%d\n", vop);
continue;
@@ -2381,10 +2567,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
else
fnm= pField->field->field_name;
- if (xtrace) {
+ if (trace) {
htrc("Field index=%d\n", pField->field->field_index);
htrc("Field name=%s\n", pField->field->field_name);
- } // endif xtrace
+ } // endif trace
// IN and BETWEEN clauses should be col VOP list
if (i && ismul)
@@ -2420,7 +2606,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
if ((res= pval->val_str(&tmp)) == NULL)
return NULL; // To be clarified
- if (xtrace)
+ if (trace)
htrc("Value=%.*s\n", res->length(), res->ptr());
// IN and BETWEEN clauses should be col VOP list
@@ -2430,14 +2616,14 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
if (!x) {
// Append the value to the filter
if (args[i]->field_type() == MYSQL_TYPE_VARCHAR)
- strcat(strcat(strcat(body, "'"), res->ptr()), "'");
+ strcat(strncat(strcat(body, "'"), res->ptr(), res->length()), "'");
else
strncat(body, res->ptr(), res->length());
} else {
if (args[i]->field_type() == MYSQL_TYPE_VARCHAR) {
// Add the command to the list
- PCMD *ncp, cmdp= new(g) CMD(g, (char*)res->ptr());
+ PCMD *ncp, cmdp= new(g) CMD(g, (char*)res->c_ptr());
for (ncp= &filp->Cmds; *ncp; ncp= &(*ncp)->Next) ;
@@ -2465,7 +2651,7 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
filp->Op= vop;
} else {
- if (xtrace)
+ if (trace)
htrc("Unsupported condition\n");
return NULL;
@@ -2499,6 +2685,7 @@ const COND *ha_connect::cond_push(const COND *cond)
DBUG_ENTER("ha_connect::cond_push");
if (tdbp) {
+ int rc;
PGLOBAL& g= xp->g;
AMT tty= tdbp->GetAmType();
bool x= (tty == TYPE_AM_MYX || tty == TYPE_AM_XDBC);
@@ -2506,6 +2693,16 @@ const COND *ha_connect::cond_push(const COND *cond)
tty == TYPE_AM_TBL || tty == TYPE_AM_MYSQL ||
tty == TYPE_AM_PLG || x);
+ // Save stack and allocation environment and prepare error return
+ if (g->jump_level == MAX_JUMP) {
+ strcpy(g->Message, MSG(TOO_MANY_JUMPS));
+ DBUG_RETURN(cond);
+ } // endif jump_level
+
+ // This should never happen but is done to avoid crashing
+ if ((rc= setjmp(g->jumper[++g->jump_level])) != 0)
+ goto fin;
+
if (b) {
PCFIL filp= (PCFIL)PlugSubAlloc(g, NULL, sizeof(CONDFIL));
@@ -2515,7 +2712,7 @@ const COND *ha_connect::cond_push(const COND *cond)
filp->Cmds= NULL;
if (CheckCond(g, filp, tty, (Item *)cond)) {
- if (xtrace)
+ if (trace)
htrc("cond_push: %s\n", filp->Body);
if (!x)
@@ -2530,6 +2727,8 @@ const COND *ha_connect::cond_push(const COND *cond)
} else
tdbp->SetFilter(CondFilter(g, (Item *)cond));
+ fin:
+ g->jump_level--;
} // endif tdbp
// Let MySQL do the filtering
@@ -2628,7 +2827,7 @@ int ha_connect::open(const char *name, int mode, uint test_if_locked)
int rc= 0;
DBUG_ENTER("ha_connect::open");
- if (xtrace)
+ if (trace)
htrc("open: name=%s mode=%d test=%u\n", name, mode, test_if_locked);
if (!(share= get_share()))
@@ -2840,7 +3039,7 @@ int ha_connect::update_row(const uchar *old_data, uchar *new_data)
PGLOBAL& g= xp->g;
DBUG_ENTER("ha_connect::update_row");
- if (xtrace > 1)
+ if (trace > 1)
htrc("update_row: old=%s new=%s\n", old_data, new_data);
// Check values for possible change in indexed column
@@ -2901,7 +3100,7 @@ int ha_connect::index_init(uint idx, bool sorted)
PGLOBAL& g= xp->g;
DBUG_ENTER("index_init");
- if (xtrace)
+ if (trace)
htrc("index_init: this=%p idx=%u sorted=%d\n", this, idx, sorted);
if (GetIndexType(GetRealType()) == 2) {
@@ -2954,7 +3153,7 @@ int ha_connect::index_init(uint idx, bool sorted)
rc= 0;
} // endif indexing
- if (xtrace)
+ if (trace)
htrc("index_init: rc=%d indexing=%d active_index=%d\n",
rc, indexing, active_index);
@@ -3001,7 +3200,7 @@ int ha_connect::ReadIndexed(uchar *buf, OPVAL op, const uchar *key, uint key_len
break;
} // endswitch RC
- if (xtrace > 1)
+ if (trace > 1)
htrc("ReadIndexed: op=%d rc=%d\n", op, rc);
return rc;
@@ -3043,7 +3242,7 @@ int ha_connect::index_read(uchar * buf, const uchar * key, uint key_len,
default: DBUG_RETURN(-1); break;
} // endswitch find_flag
- if (xtrace > 1)
+ if (trace > 1)
htrc("%p index_read: op=%d\n", this, op);
if (indexing > 0) {
@@ -3200,7 +3399,7 @@ int ha_connect::rnd_init(bool scan)
alter= 1;
} // endif xmod
- if (xtrace)
+ if (trace)
htrc("rnd_init: this=%p scan=%d xmod=%d alter=%d\n",
this, scan, xmod, alter);
@@ -3306,7 +3505,7 @@ int ha_connect::rnd_next(uchar *buf)
break;
} // endswitch RC
- if (xtrace > 1 && (rc || !(xp->nrd++ % 16384))) {
+ if (trace > 1 && (rc || !(xp->nrd++ % 16384))) {
ulonglong tb2= my_interval_timer();
double elapsed= (double) (tb2 - xp->tb1) / 1000000000ULL;
DBUG_PRINT("rnd_next", ("rc=%d nrd=%u fnd=%u nfd=%u sec=%.3lf\n",
@@ -3437,7 +3636,7 @@ int ha_connect::info(uint flag)
DBUG_ENTER("ha_connect::info");
- if (xtrace)
+ if (trace)
htrc("%p In info: flag=%u valid_info=%d\n", this, flag, valid_info);
// tdbp must be available to get updated info
@@ -3452,8 +3651,6 @@ int ha_connect::info(uint flag)
} // endif xmod
// This is necessary for getting file length
-// if (cat && table)
-// cat->SetDataPath(g, table->s->db.str);
if (table)
SetDataPath(g, table->s->db.str);
else
@@ -3643,6 +3840,7 @@ bool ha_connect::check_privileges(THD *thd, PTOS options, char *dbn)
case TAB_PRX:
case TAB_OCCUR:
case TAB_PIVOT:
+ case TAB_VIR:
return false;
} // endswitch type
@@ -3678,11 +3876,11 @@ bool ha_connect::IsSameIndex(PIXDEF xp1, PIXDEF xp2)
MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
MODE newmode, bool *chk, bool *cras)
{
- if ((trace= xtrace)) {
+ if (trace) {
LEX_STRING *query_string= thd_query_string(thd);
htrc("%p check_mode: cmdtype=%d\n", this, thd_sql_command(thd));
htrc("Cmd=%.*s\n", (int) query_string->length, query_string->str);
- } // endif xtrace
+ } // endif trace
// Next code is temporarily replaced until sql_command is set
stop= false;
@@ -3714,6 +3912,8 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
case SQLCOM_OPTIMIZE:
newmode= MODE_READ;
break;
+ case SQLCOM_FLUSH:
+ locked= 0;
case SQLCOM_DROP_TABLE:
case SQLCOM_RENAME_TABLE:
newmode= MODE_ANY;
@@ -3791,7 +3991,7 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
} // endif's newmode
- if (xtrace)
+ if (trace)
htrc("New mode=%d\n", newmode);
return newmode;
@@ -3866,7 +4066,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
DBUG_ASSERT(thd == current_thd);
- if (xtrace)
+ if (trace)
htrc("external_lock: this=%p thd=%p xp=%p g=%p lock_type=%d\n",
this, thd, xp, g, lock_type);
@@ -3893,6 +4093,8 @@ int ha_connect::external_lock(THD *thd, int lock_type)
// This is unlocking, do it by closing the table
if (xp->CheckQueryID() && sqlcom != SQLCOM_UNLOCK_TABLES
&& sqlcom != SQLCOM_LOCK_TABLES
+ && sqlcom != SQLCOM_FLUSH
+ && sqlcom != SQLCOM_BEGIN
&& sqlcom != SQLCOM_DROP_TABLE) {
sprintf(g->Message, "external_lock: unexpected command %d", sqlcom);
push_warning(thd, Sql_condition::WARN_LEVEL_WARN, 0, g->Message);
@@ -3987,6 +4189,14 @@ int ha_connect::external_lock(THD *thd, int lock_type)
rc= 0;
} // endif MakeIndex
+ } else if (((PTDBASE)tdbp)->GetDef()->Indexable() == 3) {
+ if (CheckVirtualIndex(NULL)) {
+ // Make it a warning to avoid crash
+ push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
+ 0, g->Message);
+ rc= 0;
+ } // endif Check
+
} // endif indexable
} // endif Tdbp
@@ -4041,7 +4251,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
if (cras)
g->Createas= 1; // To tell created table to ignore FLAG
- if (xtrace) {
+ if (trace) {
#if 0
htrc("xcheck=%d cras=%d\n", xcheck, cras);
@@ -4050,7 +4260,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
((PCHK)g->Xchk)->oldsep, ((PCHK)g->Xchk)->oldpix);
#endif // 0
htrc("Calling CntCheckDB db=%s cras=%d\n", GetDBName(NULL), cras);
- } // endif xtrace
+ } // endif trace
// Set or reset the good database environment
if (CntCheckDB(g, this, GetDBName(NULL))) {
@@ -4074,7 +4284,7 @@ int ha_connect::external_lock(THD *thd, int lock_type)
// Delay open until used fields are known
} // endif tdbp
- if (xtrace)
+ if (trace)
htrc("external_lock: rc=%d\n", rc);
DBUG_RETURN(rc);
@@ -4210,7 +4420,7 @@ int ha_connect::delete_or_rename_table(const char *name, const char *to)
THD *thd= current_thd;
int sqlcom= thd_sql_command(thd);
- if (xtrace) {
+ if (trace) {
if (to)
htrc("rename_table: this=%p thd=%p sqlcom=%d from=%s to=%s\n",
this, thd, sqlcom, name, to);
@@ -4218,7 +4428,7 @@ int ha_connect::delete_or_rename_table(const char *name, const char *to)
htrc("delete_table: this=%p thd=%p sqlcom=%d name=%s\n",
this, thd, sqlcom, name);
- } // endif xtrace
+ } // endif trace
if (to && (filename_to_dbname_and_tablename(to, db, sizeof(db),
tabname, sizeof(tabname))
@@ -4318,7 +4528,7 @@ ha_rows ha_connect::records_in_range(uint inx, key_range *min_key,
if (index_init(inx, false))
DBUG_RETURN(HA_POS_ERROR);
- if (xtrace)
+ if (trace)
htrc("records_in_range: inx=%d indexing=%d\n", inx, indexing);
if (indexing > 0) {
@@ -4372,85 +4582,8 @@ static char *encode(PGLOBAL g, const char *cnm)
@return
Return 0 if ok
*/
-#if defined(NEW_WAY)
-static bool add_fields(PGLOBAL g,
- THD *thd,
- Alter_info *alter_info,
- char *name,
- int typ, int len, int dec,
- uint type_modifier,
- char *rem,
-// CHARSET_INFO *cs,
-// void *vcolinfo,
-// engine_option_value *create_options,
- int flg,
- bool dbf,
- char v)
-{
- register Create_field *new_field;
- char *length, *decimals= NULL;
- enum_field_types type;
-//Virtual_column_info *vcol_info= (Virtual_column_info *)vcolinfo;
- engine_option_value *crop;
- LEX_STRING *comment;
- LEX_STRING *field_name;
-
- DBUG_ENTER("ha_connect::add_fields");
-
- if (len) {
- if (!v && typ == TYPE_STRING && len > 255)
- v= 'V'; // Change CHAR to VARCHAR
-
- length= (char*)PlugSubAlloc(g, NULL, 8);
- sprintf(length, "%d", len);
-
- if (typ == TYPE_DOUBLE) {
- decimals= (char*)PlugSubAlloc(g, NULL, 8);
- sprintf(decimals, "%d", min(dec, (min(len, 31) - 1)));
- } // endif dec
-
- } else
- length= NULL;
-
- if (!rem)
- rem= "";
-
- type= PLGtoMYSQL(typ, dbf, v);
- comment= thd->make_lex_string(rem, strlen(rem));
- field_name= thd->make_lex_string(name, strlen(name));
-
- switch (v) {
- case 'Z': type_modifier|= ZEROFILL_FLAG;
- case 'U': type_modifier|= UNSIGNED_FLAG; break;
- } // endswitch v
-
- if (flg) {
- engine_option_value *start= NULL, *end= NULL;
- LEX_STRING *flag= thd->make_lex_string("flag", 4);
-
- crop= new(thd->mem_root) engine_option_value(*flag, (ulonglong)flg,
- &start, &end, thd->mem_root);
- } else
- crop= NULL;
-
- if (check_string_char_length(field_name, "", NAME_CHAR_LEN,
- system_charset_info, 1)) {
- my_error(ER_TOO_LONG_IDENT, MYF(0), field_name->str); /* purecov: inspected */
- DBUG_RETURN(1); /* purecov: inspected */
- } // endif field_name
-
- if (!(new_field= new Create_field()) ||
- new_field->init(thd, field_name->str, type, length, decimals,
- type_modifier, NULL, NULL, comment, NULL,
- NULL, NULL, 0, NULL, crop, true))
- DBUG_RETURN(1);
-
- alter_info->create_list.push_back(new_field);
- DBUG_RETURN(0);
-} // end of add_fields
-#else // !NEW_WAY
static bool add_field(String *sql, const char *field_name, int typ,
- int len, int dec, uint tm, const char *rem,
+ int len, int dec, char *key, uint tm, const char *rem,
char *dft, char *xtra, int flag, bool dbf, char v)
{
char var = (len > 255) ? 'V' : v;
@@ -4484,6 +4617,11 @@ static bool add_field(String *sql, const char *field_name, int typ,
else if (v == 'Z')
error|= sql->append(" ZEROFILL");
+ if (key && *key) {
+ error|= sql->append(" ");
+ error|= sql->append(key);
+ } // endif key
+
if (tm)
error|= sql->append(STRING_WITH_LEN(" NOT NULL"), system_charset_info);
@@ -4518,7 +4656,6 @@ static bool add_field(String *sql, const char *field_name, int typ,
error|= sql->append(',');
return error;
} // end of add_field
-#endif // !NEW_WAY
/**
Initialise the table share with the new columns.
@@ -4526,114 +4663,9 @@ static bool add_field(String *sql, const char *field_name, int typ,
@return
Return 0 if ok
*/
-#if defined(NEW_WAY)
-//static bool sql_unusable_for_discovery(THD *thd, const char *sql);
-
-static int init_table_share(THD *thd,
- TABLE_SHARE *table_s,
- HA_CREATE_INFO *create_info,
- Alter_info *alter_info)
-{
- KEY *not_used_1;
- uint not_used_2;
- int rc= 0;
- handler *file;
- LEX_CUSTRING frm= {0,0};
-
- DBUG_ENTER("init_table_share");
-
-#if 0
- ulonglong saved_mode= thd->variables.sql_mode;
- CHARSET_INFO *old_cs= thd->variables.character_set_client;
- Parser_state parser_state;
- char *sql_copy;
- LEX *old_lex;
- Query_arena *arena, backup;
- LEX tmp_lex;
-
- /*
- Ouch. Parser may *change* the string it's working on.
- Currently (2013-02-26) it is used to permanently disable
- conditional comments.
- Anyway, let's copy the caller's string...
- */
- if (!(sql_copy= thd->strmake(sql, sql_length)))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- if (parser_state.init(thd, sql_copy, sql_length))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- thd->variables.sql_mode= MODE_NO_ENGINE_SUBSTITUTION | MODE_NO_DIR_IN_CREATE;
- thd->variables.character_set_client= system_charset_info;
- old_lex= thd->lex;
- thd->lex= &tmp_lex;
-
- arena= thd->stmt_arena;
-
- if (arena->is_conventional())
- arena= 0;
- else
- thd->set_n_backup_active_arena(arena, &backup);
-
- lex_start(thd);
-
- if ((error= parse_sql(thd, & parser_state, NULL)))
- goto ret;
-
- if (table_s->sql_unusable_for_discovery(thd, NULL)) {
- my_error(ER_SQL_DISCOVER_ERROR, MYF(0), plugin_name(db_plugin)->str,
- db.str, table_name.str, sql_copy);
- goto ret;
- } // endif unusable
-
- thd->lex->create_info.db_type= plugin_data(db_plugin, handlerton *);
-
- if (tabledef_version.str)
- thd->lex->create_info.tabledef_version= tabledef_version;
-#endif // 0
-
- tmp_disable_binlog(thd);
-
- file= mysql_create_frm_image(thd, table_s->db.str, table_s->table_name.str,
- create_info, alter_info, C_ORDINARY_CREATE,
- &not_used_1, &not_used_2, &frm);
- if (file)
- delete file;
- else
- rc= OPEN_FRM_CORRUPTED;
-
- if (!rc && frm.str) {
- table_s->option_list= 0; // cleanup existing options ...
- table_s->option_struct= 0; // ... if it's an assisted discovery
- rc= table_s->init_from_binary_frm_image(thd, true, frm.str, frm.length);
- } // endif frm
-
-//ret:
- my_free(const_cast<uchar*>(frm.str));
- reenable_binlog(thd);
-#if 0
- lex_end(thd->lex);
- thd->lex= old_lex;
- if (arena)
- thd->restore_active_arena(arena, &backup);
- thd->variables.sql_mode= saved_mode;
- thd->variables.character_set_client= old_cs;
-#endif // 0
-
- if (thd->is_error() || rc) {
- thd->clear_error();
- my_error(ER_NO_SUCH_TABLE, MYF(0), table_s->db.str,
- table_s->table_name.str);
- DBUG_RETURN(HA_ERR_NOT_A_TABLE);
- } else
- DBUG_RETURN(0);
-
-} // end of init_table_share
-#else // !NEW_WAY
static int init_table_share(THD* thd,
TABLE_SHARE *table_s,
HA_CREATE_INFO *create_info,
-// char *dsn,
String *sql)
{
bool oom= false;
@@ -4692,12 +4724,10 @@ static int init_table_share(THD* thd,
} // endfor opt
if (create_info->connect_string.length) {
-//if (dsn) {
oom|= sql->append(' ');
oom|= sql->append("CONNECTION='");
oom|= sql->append_for_single_quote(create_info->connect_string.str,
create_info->connect_string.length);
-// oom|= sql->append_for_single_quote(dsn, strlen(dsn));
oom|= sql->append('\'');
if (oom)
@@ -4715,29 +4745,12 @@ static int init_table_share(THD* thd,
} // endif charset
- if (xtrace)
+ if (trace)
htrc("s_init: %.*s\n", sql->length(), sql->ptr());
return table_s->init_from_sql_statement_string(thd, true,
sql->ptr(), sql->length());
} // end of init_table_share
-#endif // !NEW_WAY
-
-// Add an option to the create_info option list
-static void add_option(THD* thd, HA_CREATE_INFO *create_info,
- const char *opname, const char *opval)
-{
-#if defined(NEW_WAY)
- LEX_STRING *opn= thd->make_lex_string(opname, strlen(opname));
- LEX_STRING *val= thd->make_lex_string(opval, strlen(opval));
- engine_option_value *pov, **start= &create_info->option_list, *end= NULL;
-
- for (pov= *start; pov; pov= pov->next)
- end= pov;
-
- pov= new(thd->mem_root) engine_option_value(*opn, *val, false, start, &end);
-#endif // NEW_WAY
-} // end of add_option
// Used to check whether a MYSQL table is created on itself
bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, const char *host,
@@ -4854,7 +4867,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
} // endif option_list
if (!(shm= (char*)db))
- db= table_s->db.str; // Default value
+ db= table_s->db.str; // Default value
// Check table type
if (ttp == TAB_UNDEF) {
@@ -4862,13 +4875,24 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
ttp= GetTypeID(topt->type);
sprintf(g->Message, "No table_type. Was set to %s", topt->type);
push_warning(thd, Sql_condition::WARN_LEVEL_WARN, 0, g->Message);
- add_option(thd, create_info, "table_type", topt->type);
} else if (ttp == TAB_NIY) {
sprintf(g->Message, "Unsupported table type %s", topt->type);
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
return HA_ERR_INTERNAL_ERROR;
} // endif ttp
+ // Save stack and allocation environment and prepare error return
+ if (g->jump_level == MAX_JUMP) {
+ strcpy(g->Message, MSG(TOO_MANY_JUMPS));
+ return HA_ERR_INTERNAL_ERROR;
+ } // endif jump_level
+
+ if ((rc= setjmp(g->jumper[++g->jump_level])) != 0) {
+ my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
+ goto err;
+ } // endif rc
+
+
if (!tab) {
if (ttp == TAB_TBL) {
// Make tab the first table of the list
@@ -4877,7 +4901,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
if (!tbl) {
strcpy(g->Message, "Missing table list");
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} // endif tbl
tab= (char*)PlugSubAlloc(g, NULL, strlen(tbl) + 1);
@@ -4893,7 +4917,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
} // endif p
} else if (ttp != TAB_ODBC || !(fnc & (FNC_TABLE | FNC_COL)))
- tab= table_s->table_name.str; // Default value
+ tab= table_s->table_name.str; // Default value
#if defined(NEW_WAY)
// add_option(thd, create_info, "tabname", tab);
@@ -4903,7 +4927,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
switch (ttp) {
#if defined(ODBC_SUPPORT)
case TAB_ODBC:
- dsn= create_info->connect_string.str;
+ dsn= strz(g, create_info->connect_string);
if (fnc & (FNC_DSN | FNC_DRIVER)) {
ok= true;
@@ -4938,13 +4962,11 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
case TAB_MYSQL:
ok= true;
- if (create_info->connect_string.str) {
- int len= create_info->connect_string.length;
+ if (create_info->connect_string.str &&
+ create_info->connect_string.length) {
PMYDEF mydef= new(g) MYSQLDEF();
- dsn= (char*)PlugSubAlloc(g, NULL, len + 1);
- strncpy(dsn, create_info->connect_string.str, len);
- dsn[len]= 0;
+ dsn= strz(g, create_info->connect_string);
mydef->SetName(create_info->alias);
if (!mydef->ParseURL(g, dsn, false)) {
@@ -5002,6 +5024,9 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
strcpy(g->Message, "Missing OEM module or subtype");
break;
+ case TAB_VIR:
+ ok= true;
+ break;
default:
sprintf(g->Message, "Cannot get column info for table type %s", topt->type);
break;
@@ -5020,7 +5045,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
} // endif src
if (ok) {
- char *cnm, *rem, *dft, *xtra;
+ char *cnm, *rem, *dft, *xtra, *key;
int i, len, prec, dec, typ, flg;
// if (cat)
@@ -5036,7 +5061,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
if (qrp && ttp == TAB_OCCUR)
if (OcrSrcCols(g, qrp, col, ocl, rnk)) {
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} // endif OcrSrcCols
} else switch (ttp) {
@@ -5098,13 +5123,16 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
if (qrp && ttp == TAB_OCCUR && fnc != FNC_COL)
if (OcrColumns(g, qrp, col, ocl, rnk)) {
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} // endif OcrColumns
break;
case TAB_PIVOT:
qrp= PivotColumns(g, tab, src, pic, fcl, skc, host, db, user, pwd, port);
break;
+ case TAB_VIR:
+ qrp= VirColumns(g, tab, (char*)db, fnc == FNC_COL);
+ break;
case TAB_OEM:
qrp= OEMColumns(g, topt, tab, (char*)db, fnc == FNC_COL);
break;
@@ -5115,7 +5143,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
if (!qrp) {
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} // endif !qrp
if (fnc != FNC_NO || src || ttp == TAB_PIVOT) {
@@ -5136,7 +5164,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
rc= add_fields(g, thd, &alter_info, cnm, typ, len, dec,
NOT_NULL_FLAG, "", flg, dbf, v);
#else // !NEW_WAY
- if (add_field(&sql, cnm, typ, len, dec, NOT_NULL_FLAG,
+ if (add_field(&sql, cnm, typ, len, dec, NULL, NOT_NULL_FLAG,
NULL, NULL, NULL, flg, dbf, v))
rc= HA_ERR_OUT_OF_MEM;
#endif // !NEW_WAY
@@ -5151,14 +5179,14 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
strcpy(g->Message, "Fail to retrieve columns");
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} // endif !nblin
for (i= 0; !rc && i < qrp->Nblin; i++) {
typ= len= prec= dec= 0;
tm= NOT_NULL_FLAG;
cnm= (char*)"noname";
- dft= xtra= NULL;
+ dft= xtra= key= NULL;
#if defined(NEW_WAY)
rem= "";
// cs= NULL;
@@ -5210,6 +5238,11 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
xtra= NULL;
break;
+ case FLD_KEY:
+ if (ttp == TAB_VIR)
+ key= crp->Kdata->GetCharValue(i);
+
+ break;
default:
break; // Ignore
} // endswitch Fld
@@ -5222,7 +5255,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
if (!(plgtyp= TranslateSQLType(typ, dec, prec, v))) {
sprintf(g->Message, "Unsupported SQL type %d", typ);
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
- return HA_ERR_INTERNAL_ERROR;
+ goto err;
} else
typ= plgtyp;
@@ -5250,7 +5283,7 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
rc= add_fields(g, thd, &alter_info, cnm, typ, prec, dec,
tm, rem, 0, dbf, v);
#else // !NEW_WAY
- if (add_field(&sql, cnm, typ, prec, dec, tm, rem, dft, xtra,
+ if (add_field(&sql, cnm, typ, prec, dec, key, tm, rem, dft, xtra,
0, dbf, v))
rc= HA_ERR_OUT_OF_MEM;
#endif // !NEW_WAY
@@ -5266,10 +5299,14 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd,
// rc= init_table_share(thd, table_s, create_info, dsn, &sql);
#endif // !NEW_WAY
+ g->jump_level--;
return rc;
} // endif ok
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
+
+ err:
+ g->jump_level--;
return HA_ERR_INTERNAL_ERROR;
} // end of connect_assisted_discovery
@@ -5342,7 +5379,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
table= table_arg; // Used by called functions
- if (xtrace)
+ if (trace)
htrc("create: this=%p thd=%p xp=%p g=%p sqlcom=%d name=%s\n",
this, thd, xp, g, sqlcom, GetTableName());
@@ -5408,7 +5445,8 @@ int ha_connect::create(const char *name, TABLE *table_arg,
push_warning(thd, Sql_condition::WARN_LEVEL_WARN, 0, g->Message);
} else if (options->tabname) {
if (!stricmp(options->tabname, create_info->alias) &&
- (!options->dbname || !stricmp(options->dbname, table_arg->s->db.str))) {
+ (!options->dbname ||
+ !stricmp(options->dbname, table_arg->s->db.str))) {
sprintf(g->Message, "A %s table cannot refer to itself",
options->type);
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
@@ -5433,14 +5471,11 @@ int ha_connect::create(const char *name, TABLE *table_arg,
db= GetStringOption("database", NULL);
port= atoi(GetListOption(g, "port", options->oplist, "0"));
- if (create_info->connect_string.str) {
- char *dsn;
- int len= create_info->connect_string.length;
+ if (create_info->connect_string.str &&
+ create_info->connect_string.length) {
+ char *dsn= strz(g, create_info->connect_string);
PMYDEF mydef= new(g) MYSQLDEF();
- dsn= (char*)PlugSubAlloc(g, NULL, len + 1);
- strncpy(dsn, create_info->connect_string.str, len);
- dsn[len]= 0;
mydef->SetName(create_info->alias);
if (!mydef->ParseURL(g, dsn, false)) {
@@ -5540,6 +5575,14 @@ int ha_connect::create(const char *name, TABLE *table_arg,
DBUG_RETURN(rc);
} // endif flags
+ if (type == TAB_VIR)
+ if (!fp->option_struct || !fp->option_struct->special) {
+ strcpy(g->Message, "Virtual tables accept only special or virtual columns");
+ my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
+ rc= HA_ERR_INTERNAL_ERROR;
+ DBUG_RETURN(rc);
+ } // endif special
+
switch (fp->type()) {
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_LONG:
@@ -5623,7 +5666,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
// the database directory named table_name.table_type.
// (temporarily not done for XML because a void file causes
// the XML parsers to report an error on the first Insert)
- char buf[256], fn[_MAX_PATH], dbpath[128], lwt[12];
+ char buf[_MAX_PATH], fn[_MAX_PATH], dbpath[_MAX_PATH], lwt[12];
int h;
// Check for incompatible options
@@ -5693,7 +5736,7 @@ int ha_connect::create(const char *name, TABLE *table_arg,
} // endif sqlcom
- if (xtrace)
+ if (trace)
htrc("xchk=%p createas=%d\n", g->Xchk, g->Createas);
// To check whether indexes have to be made or remade
@@ -5764,6 +5807,12 @@ int ha_connect::create(const char *name, TABLE *table_arg,
} // endif cat
+ } else if (GetIndexType(type) == 3) {
+ if (CheckVirtualIndex(table_arg->s)) {
+ my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
+ rc= HA_ERR_UNSUPPORTED;
+ } // endif Check
+
} else if (!GetIndexType(type)) {
sprintf(g->Message, "Table type %s is not indexable", options->type);
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
@@ -5797,7 +5846,7 @@ bool ha_connect::FileExists(const char *fn, bool bf)
return true;
if (table) {
- char *s, tfn[_MAX_PATH], filename[_MAX_PATH], path[128];
+ char *s, tfn[_MAX_PATH], filename[_MAX_PATH], path[_MAX_PATH];
bool b= false;
int n;
struct stat info;
@@ -6035,7 +6084,7 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table,
xcp->newsep= xcp->SetName(g, GetStringOption("optname"));
tshp= NULL;
- if (xtrace && g->Xchk)
+ if (trace && g->Xchk)
htrc(
"oldsep=%d newsep=%d oldopn=%s newopn=%s oldpix=%p newpix=%p\n",
xcp->oldsep, xcp->newsep,
@@ -6047,6 +6096,12 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table,
else
DBUG_RETURN(HA_ALTER_INPLACE_EXCLUSIVE_LOCK);
+ } else if (GetIndexType(type) == 3) {
+ if (CheckVirtualIndex(altered_table->s)) {
+ my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
+ DBUG_RETURN(HA_ALTER_ERROR);
+ } // endif Check
+
} else if (!GetIndexType(type)) {
sprintf(g->Message, "Table type %s is not indexable", oldopt->type);
my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0));
@@ -6240,15 +6295,18 @@ struct st_mysql_storage_engine connect_storage_engine=
/***********************************************************************/
/* CONNECT global variables definitions. */
/***********************************************************************/
-// Tracing: 0 no, 1 yes, >1 more tracing
-static MYSQL_SYSVAR_INT(xtrace, xtrace,
- PLUGIN_VAR_RQCMDARG, "Console trace value.",
- NULL, update_connect_xtrace, 0, 0, INT_MAX, 1);
-
// Size used when converting TEXT columns to VARCHAR
-static MYSQL_SYSVAR_INT(conv_size, conv_size,
- PLUGIN_VAR_RQCMDARG, "Size used when converting TEXT columns.",
- NULL, update_connect_zconv, SZCONV, 0, 65500, 1);
+#if defined(_DEBUG)
+static MYSQL_SYSVAR_INT(conv_size, zconv,
+ PLUGIN_VAR_RQCMDARG, // opt
+ "Size used when converting TEXT columns.",
+ NULL, NULL, SZCONV, 0, 65500, 1);
+#else
+static MYSQL_SYSVAR_INT(conv_size, zconv,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, // opt
+ "Size used when converting TEXT columns.",
+ NULL, NULL, SZCONV, 0, 65500, 1);
+#endif
/**
Type conversion:
@@ -6267,61 +6325,43 @@ TYPELIB xconv_typelib=
xconv_names, NULL
};
+#if defined(_DEBUG)
static MYSQL_SYSVAR_ENUM(
type_conv, // name
- type_conv, // varname
+ xconv, // varname
PLUGIN_VAR_RQCMDARG, // opt
"Unsupported types conversion.", // comment
NULL, // check
- update_connect_xconv, // update function
+ NULL, // update function
0, // def (no)
&xconv_typelib); // typelib
-
-/**
- Temporary file usage:
- no: Not using temporary file
- auto: Using temporary file when needed
- yes: Allways using temporary file
- force: Force using temporary file (no MAP)
- test: Reserved
-*/
-const char *usetemp_names[]=
-{
- "NO", "AUTO", "YES", "FORCE", "TEST", NullS
-};
-
-TYPELIB usetemp_typelib=
-{
- array_elements(usetemp_names) - 1, "usetemp_typelib",
- usetemp_names, NULL
-};
-
+#else
static MYSQL_SYSVAR_ENUM(
- use_tempfile, // name
- use_tempfile, // varname
- PLUGIN_VAR_RQCMDARG, // opt
- "Temporary file use.", // comment
+ type_conv, // name
+ xconv, // varname
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ "Unsupported types conversion.", // comment
NULL, // check
- update_connect_usetemp, // update function
- 1, // def (AUTO)
- &usetemp_typelib); // typelib
+ NULL, // update function
+ 0, // def (no)
+ &xconv_typelib); // typelib
+#endif
#if defined(XMAP)
// Using file mapping for indexes if true
-static MYSQL_SYSVAR_BOOL(indx_map, indx_map, PLUGIN_VAR_RQCMDARG,
- "Using file mapping for indexes",
- NULL, update_connect_xmap, 0);
+static MYSQL_SYSVAR_BOOL(indx_map, xmap, PLUGIN_VAR_RQCMDARG,
+ "Using file mapping for indexes", NULL, NULL, 0);
#endif // XMAP
-// Size used for g->Sarea_Size
-static MYSQL_SYSVAR_UINT(work_size, work_size,
- PLUGIN_VAR_RQCMDARG, "Size of the CONNECT work area.",
- NULL, update_connect_worksize, SZWORK, SZWMIN, UINT_MAX, 1);
-
-// Getting exact info values
-static MYSQL_SYSVAR_BOOL(exact_info, exact_info, PLUGIN_VAR_RQCMDARG,
- "Getting exact info values",
- NULL, update_connect_xinfo, 0);
+#if defined(XMSG)
+static MYSQL_SYSVAR_STR(errmsg_dir_path, msg_path,
+// PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ "Path to the directory where are the message files",
+// check_msg_path, update_msg_path,
+ NULL, NULL,
+ "../../../../storage/connect/"); // for testing
+#endif // XMSG
static struct st_mysql_sys_var* connect_system_variables[]= {
MYSQL_SYSVAR(xtrace),
@@ -6333,6 +6373,12 @@ static struct st_mysql_sys_var* connect_system_variables[]= {
MYSQL_SYSVAR(work_size),
MYSQL_SYSVAR(use_tempfile),
MYSQL_SYSVAR(exact_info),
+#if defined(XMSG) || defined(NEWMSG)
+ MYSQL_SYSVAR(msg_lang),
+#endif // XMSG || NEWMSG
+#if defined(XMSG)
+ MYSQL_SYSVAR(errmsg_dir_path),
+#endif // XMSG
NULL
};
@@ -6349,7 +6395,7 @@ maria_declare_plugin(connect)
0x0103, /* version number (1.03) */
NULL, /* status variables */
connect_system_variables, /* system variables */
- "1.03", /* string version */
+ "1.03.0005", /* string version */
MariaDB_PLUGIN_MATURITY_BETA /* maturity */
}
maria_declare_plugin_end;
diff --git a/storage/connect/ha_connect.h b/storage/connect/ha_connect.h
index 9a73c85cdc7..6c3ed87d5f6 100644
--- a/storage/connect/ha_connect.h
+++ b/storage/connect/ha_connect.h
@@ -26,6 +26,8 @@
#pragma interface /* gcc class implementation */
#endif
+static char *strz(PGLOBAL g, LEX_STRING &ls);
+
/****************************************************************************/
/* Structures used to pass info between CONNECT and ha_connect. */
/****************************************************************************/
@@ -174,6 +176,19 @@ class ha_connect: public handler
CONNECT_SHARE *share; ///< Shared lock info
CONNECT_SHARE *get_share();
+protected:
+ char *PlugSubAllocStr(PGLOBAL g, void *memp, const char *str, size_t length)
+ {
+ char *ptr= (char*)PlgDBSubAlloc(g, memp, length + 1);
+
+ if (ptr) {
+ memcpy(ptr, str, length);
+ ptr[length]= '\0';
+ } // endif ptr
+
+ return ptr;
+ } // end of PlugSubAllocStr
+
public:
ha_connect(handlerton *hton, TABLE_SHARE *table_arg);
~ha_connect();
@@ -200,6 +215,7 @@ public:
void *GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf);
PXOS GetIndexOptionStruct(KEY *kp);
PIXDEF GetIndexInfo(TABLE_SHARE *s= NULL);
+ bool CheckVirtualIndex(TABLE_SHARE *s);
const char *GetDBName(const char *name);
const char *GetTableName(void);
char *GetPartName(void);
@@ -225,6 +241,8 @@ public:
uint key_len= 0);
bool MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
const void *key, int klen);
+ inline char *Strz(LEX_STRING &ls);
+
/** @brief
The name that will be used for display purposes.
diff --git a/storage/connect/inihandl.c b/storage/connect/inihandl.c
index 9f1c06a9222..542b807f899 100644
--- a/storage/connect/inihandl.c
+++ b/storage/connect/inihandl.c
@@ -18,6 +18,8 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "my_global.h"
+
#include <ctype.h>
//#include <errno.h>
#include <fcntl.h>
@@ -28,7 +30,6 @@
#include <sys/stat.h>
//#include <sys/types.h>
//#include <memory.h>
-#include "my_global.h"
#include "osutil.h"
#include "global.h"
#include "inihandl.h"
diff --git a/storage/connect/libdoc.cpp b/storage/connect/libdoc.cpp
index e6046a07c5c..e576c1cf5fa 100644
--- a/storage/connect/libdoc.cpp
+++ b/storage/connect/libdoc.cpp
@@ -2,6 +2,7 @@
/* Implementation of XML document processing using libxml2 */
/* Author: Olivier Bertrand 2007-2013 */
/******************************************************************/
+#include "my_global.h"
#include <string.h>
#include <stdio.h>
#include <libxml/parser.h>
@@ -11,11 +12,6 @@
#include <libxml/catalog.h>
#include <libxml/xmlschemastypes.h>
#include <libxml/relaxng.h>
-//#if defined(WIN32)
-//#include <windows.h>
-//#else // !WIN32
-#include "my_global.h"
-//#endif // !WIN32
#if !defined(LIBXML_TREE_ENABLED) || !defined(LIBXML_OUTPUT_ENABLED)
#error "tree support not compiled in"
@@ -184,7 +180,6 @@ class XML2ATTR : public XMLATTRIBUTE {
extern "C" {
extern char version[];
-extern int trace;
} // "C"
#if defined(MEMORY_TRACE)
diff --git a/storage/connect/msgid.h b/storage/connect/msgid.h
index 7a9f9438472..4496994afa3 100644
--- a/storage/connect/msgid.h
+++ b/storage/connect/msgid.h
@@ -1,1013 +1,320 @@
-#define MSG_BAD_ARRAY_VAL 239
-#define MSG_BAD_SET_CASE 240
-#define MSG_MISSING_ARG 241
-#define MSG_NO_SUB_VAL 242
-#define MSG_PREC_VBLP_NULL 243
-#define MSG_X_ON_TAB 244
-#define MSG_BAD_COLCRT_ARG 245
-#define MSG_BAD_COLSIZE 246
-#define MSG_BAD_COL_ENTRY 247
-#define MSG_BAD_COL_TYPE 248
-#define MSG_BAD_FILE_LIST 249
-#define MSG_BAD_GETVIEW_RET 250
-#define MSG_BAD_OFFSET_VAL 251
-#define MSG_BAD_TABLE_LINE 252
-#define MSG_BAD_TABLE_TYPE 253
-#define MSG_COLSEC_TOO_BIG 254
-#define MSG_COL_HAS_NO_DEF 255
-#define MSG_COL_NOT_CODED 256
-#define MSG_ERASED 257
-#define MSG_ERASE_FAILED 258
-#define MSG_INDEX_DROPPED 259
-#define MSG_INDX_ALL_DROP 260
-#define MSG_INV_QUALIFIER 261
-#define MSG_LOADING_DB 262
-#define MSG_NO_COL_FOUND 263
-#define MSG_NO_COL_SECTION 264
-#define MSG_NO_FEAT_SUPPORT 265
-#define MSG_NO_FILE_LIST 266
-#define MSG_NO_INDEX 267
-#define MSG_NO_MORE_VAR 268
-#define MSG_NO_MUL_VCT 269
-#define MSG_NO_OPT_COLUMN 270
-#define MSG_NO_SUCH_INDEX 271
-#define MSG_NO_SUCH_TABLE 272
-#define MSG_NO_TABLE_INDEX 273
-#define MSG_OPEN_ERROR_ON 274
-#define MSG_RECORD_ERROR 275
-#define MSG_SUBSET_ERROR 276
-#define MSG_TABLE_ALREADY 277
-#define MSG_TABLE_NOT_IN_DB 278
-#define MSG_TABLE_NO_OPT 279
-#define MSG_TAB_NOT_LOADED 280
-#define MSG_TAB_NOT_SPEC 281
-#define MSG_TB_VW_NOTIN_DB 282
-#define MSG_TOO_MANY_COLTAB 283
-#define MSG_TOO_MANY_JUMPS 284
-#define MSG_TOO_MANY_TABLES 285
-#define MSG_VIEW_ALREADY 286
-#define MSG_VIEW_NOT_IN_DB 287
-#define MSG_WRITE_ERROR 288
-#define MSG_XDB_DEL_ERROR 289
-#define MSG_COL_NOTIN_GRPBY 290
-#define MSG_DOMAIN_ERROR 291
-#define MSG_NO_TOKEN_DB 292
-#define MSG_SPCOL_READONLY 293
-#define MSG_TYPE_VALUE_ERR 294
-#define MSG_UNDEFINED_AM 295
-#define MSG_VALUE_ERROR 296
-#define MSG_SORTING_VAL 297
-#define MSG_NAME_CONV_ERR 298
-#define MSG_WS_CONV_ERR 299
-#define MSG_BAD_COMPARE_OP 300
-#define MSG_BAD_EXP_ARGTYPE 301
-#define MSG_BAD_IN_ARGTYPE 302
-#define MSG_BAD_SUBSEL_IN_X 303
-#define MSG_IN_ARGTYPE_MISM 304
-#define MSG_ROW_ARGNB_ERR 305
-#define MSG_TYPE_CONV_ERROR 306
-#define MSG_NO_MAP_INSERT 307
-#define MSG_SEEK_ERROR 308
-#define MSG_BAD_DBF_FILE 309
-#define MSG_BAD_DBF_REC 310
-#define MSG_BAD_DBF_TYPE 311
-#define MSG_BAD_HEADER 312
-#define MSG_BAD_HEAD_END 313
-#define MSG_BAD_LRECL 314
-#define MSG_BIN_MODE_FAIL 315
-#define MSG_DBASE_FILE 316
-#define MSG_FOXPRO_FILE 317
-#define MSG_NOT_A_DBF_FILE 318
-#define MSG_NO_0DH_HEAD 319
-#define MSG_NO_DBF_INSERT 320
-#define MSG_NO_READ_32 321
-#define MSG_NO_MODE_PADDED 322
-#define MSG_SETEOF_ERROR 323
-#define MSG_REMOVE_ERROR 324
-#define MSG_RENAME_ERROR 325
-#define MSG_BAD_HEADER_VAL 326
-#define MSG_BAD_MAX_NREC 327
-#define MSG_HEAD_OPEN_ERROR 328
-#define MSG_HEAD_READ_ERROR 329
-#define MSG_HEAD_WRITE_ERR 330
-#define MSG_MAP_VEC_ONLY 331
-#define MSG_MKEMPTY_NIY 332
-#define MSG_BAD_BLK_SIZE 333
-#define MSG_BAD_LINE_LEN 334
-#define MSG_FUNC_ERR_S 335
-#define MSG_INV_RAND_ACC 336
-#define MSG_NOP_ZLIB_INDEX 337
-#define MSG_NO_PART_DEL 338
-#define MSG_NO_PAR_BLK_INS 339
-#define MSG_NO_SETPOS_YET 340
-#define MSG_BAD_ARRAY_OPER 341
-#define MSG_BAD_FILTER 342
-#define MSG_BAD_FILTER_CONV 343
-#define MSG_BAD_HAV_FILTYPE 344
-#define MSG_BAD_TYPE_LIKE 345
-#define MSG_ILL_FILTER_CONV 346
-#define MSG_IN_WITHOUT_SUB 347
-#define MSG_UNMATCH_FIL_ARG 348
-#define MSG_VALUE_NOT_ALLOC 349
-#define MSG_VOID_FIRST_ARG 350
-#define MSG_DISTINCT_ERROR 351
-#define MSG_INV_FNC_BUFTYPE 352
-#define MSG_INV_SET_SUBTYPE 353
-#define MSG_NO_AGGR_FUNC 354
-#define MSG_APP_STILL_ACTIV 355
-#define MSG_AREAFILE_NOTFND 356
-#define MSG_BAD_LANG_SIZE 357
-#define MSG_BAD_PARAMETERS 358
-#define MSG_BAD_PARAM_TYPE 359
-#define MSG_GRAM_ALLOC_ERR 360
-#define MSG_GRAM_MISMATCH 361
-#define MSG_GRAM_SUBSET_ERR 362
-#define MSG_INVALID_BIP 363
-#define MSG_LANGUAGE_QUIT 364
-#define MSG_LANG_ALREADY_UP 365
-#define MSG_LANG_BAD_SAVE 366
-#define MSG_LANG_NOT_FREED 367
-#define MSG_LANG_SAVED 368
-#define MSG_LANG_WR_LEN_ERR 369
-#define MSG_LDF_ALLOC_ERROR 370
-#define MSG_LDF_W_LEN_ERROR 371
-#define MSG_LNG_NOT_IN_LIST 372
-#define MSG_METAFILE_NOTFND 373
-#define MSG_NODE_SUBSET_ERR 374
-#define MSG_NO_LANG_TO_QUIT 375
-#define MSG_NO_MORE_LANG 376
-#define MSG_ONE_LANG_YET 377
-#define MSG_ON_LANGUAGE 378
-#define MSG_OPEN_W_ERROR 379
-#define MSG_RULE_SUBSET_ERR 380
-#define MSG_UP_LANGUAGE 381
-#define MSG_VM_LANG 382
-#define MSG_BUILD_INDEX 383
-#define MSG_CD_ORDER_ERROR 384
-#define MSG_DSORT_LOG_ERROR 385
-#define MSG_JOIN_KEY_NO_COL 386
-#define MSG_KEY_ALLOC_ERROR 387
-#define MSG_LOGICAL_ERROR 388
-#define MSG_MEM_ALLOC_ERR 389
-#define MSG_QUERY_CANCELLED 390
-#define MSG_RC_READING 391
-#define MSG_REORDER_INDEX 392
-#define MSG_SORTING_INDEX 393
-#define MSG_SORT_JOIN_INDEX 394
-#define MSG_TOO_MANY_KEYS 395
-#define MSG_TYPE_MISMATCH 396
-#define MSG_REGISTER_ERR 397
-#define MSG_XPATH_CNTX_ERR 398
-#define MSG_XPATH_EVAL_ERR 399
-#define MSG_API_CONF_ERROR 400
-#define MSG_BAD_HANDLE_VAL 401
-#define MSG_COL_NUM_MISM 402
-#define MSG_CONNECT_CANCEL 403
-#define MSG_INV_COLUMN_TYPE 404
-#define MSG_NO_CONNECT_ADDR 405
-#define MSG_NO_TABCOL_DATA 406
-#define MSG_NO_TAB_DATA 407
-#define MSG_SEQUENCE_ERROR 408
-#define MSG_SQL_CONF_ERROR 409
-#define MSG_CONNECTED 410
-#define MSG_CONN_CLOSED 411
-#define MSG_CONN_CREATED 412
-#define MSG_CONN_DROPPED 413
-#define MSG_CONN_OPEN 414
-#define MSG_CONN_SUC_OPEN 415
-#define MSG_DISCONNECTED 416
-#define MSG_IS_NOT_CONN 417
-#define MSG_NAME_IS_USED 418
-#define MSG_NO_SUCH_SERVER 419
-#define MSG_BAD_COLIST_ITEM 420
-#define MSG_BAD_COLIST_TYPE 421
-#define MSG_BAD_COL_IN_FILT 422
-#define MSG_BAD_FUNC_ARG 423
-#define MSG_BAD_FUNC_ARGTYP 424
-#define MSG_BAD_OPERATOR 425
-#define MSG_BAD_PROJNUM 426
-#define MSG_BAD_SEM_DOMAIN 427
-#define MSG_CLN_NOT_IN_JOIN 428
-#define MSG_COLIST_BAD_TYPE 429
-#define MSG_COLUMN_ERROR 430
-#define MSG_COL_NOT_EXIST 431
-#define MSG_COL_NOT_FOUND 432
-#define MSG_COL_NOT_IN_JOIN 433
-#define MSG_DUPLICAT_COUNT 434
-#define MSG_DUP_PROJNUM 435
-#define MSG_FILTER_ATTACH 436
-#define MSG_GRBY_TAB_NOTIMP 437
-#define MSG_NON_DUP_HAVING 438
-#define MSG_NOT_IMPL_JOIN 439
-#define MSG_NOT_IMPL_SET 440
-#define MSG_NO_COL_IN_TABLE 441
-#define MSG_NO_MULT_HAVING 442
-#define MSG_NO_TABLE_DESC 443
-#define MSG_REMOVE_NOT_IMPL 444
-#define MSG_TYPE_TO_VERIFY 445
-#define MSG_UNDEF_COL_COUNT 446
-#define MSG_UNKNOWN_NAME 447
-#define MSG_WRONG_COL_NUM 448
-#define MSG_ALL_DELETED 449
-#define MSG_BAD_LOCALE 450
-#define MSG_BAD_QUERY_TYPE 451
-#define MSG_BUFSIZE_ERROR 452
-#define MSG_END_OF_DELETE 453
-#define MSG_END_OF_INSERT 454
-#define MSG_END_OF_QUERY 455
-#define MSG_END_OF_UPDATE 456
-#define MSG_NCOL_GT_MAXCOL 457
-#define MSG_OPEN_ERROR_IS 458
-#define MSG_SET_LOCALE 459
-#define MSG_X_ARG_ADDED 460
-#define MSG_ALG_CHOICE_AUTO 461
-#define MSG_ALG_CHOICE_BAD 462
-#define MSG_ALG_CHOICE_QRY 463
-#define MSG_ALG_CURLY_BRK 464
-#define MSG_ALTER_DB_ERR 465
-#define MSG_APPL_IS_ACTIVE 466
-#define MSG_APPL_NOT_INIT 467
-#define MSG_AVGLEN_ERROR 468
-#define MSG_BAD_DEF_TYPE 469
-#define MSG_BAD_DIST_JN_FIL 470
-#define MSG_BAD_DIST_JOIN 471
-#define MSG_BAD_DOM_COL_DEF 472
-#define MSG_BAD_FIELD_FMT 473
-#define MSG_BAD_OUTER_JOIN 474
-#define MSG_BAD_SETTINGS 475
-#define MSG_BAD_XMODE_VAL 476
-#define MSG_DATABASE_ACTIVE 477
-#define MSG_DATABASE_LOADED 478
-#define MSG_DB_ALREADY_DEF 479
-#define MSG_DB_ALTERED 480
-#define MSG_DB_CREATED 481
-#define MSG_DB_REMOVED 482
-#define MSG_DB_STOPPED 483
-#define MSG_DIS_NOHEAD_JOIN 484
-#define MSG_DROP_DB_ERR 485
-#define MSG_DUP_COL_NAME 486
-#define MSG_EXECUTING 487
-#define MSG_EXEC_MODE_SET 488
-#define MSG_INDEX_CREATED 489
-#define MSG_INV_DATA_PATH 490
-#define MSG_INV_WORK_PATH 491
-#define MSG_IN_USE 492
-#define MSG_LIC_NO_MYSQL 493
-#define MSG_LINE_LENGTH 494
-#define MSG_LINE_MAXLIN 495
-#define MSG_LINE_MAXRES 496
-#define MSG_LINE_MAXTMP 497
-#define MSG_MAC_WIN_ONLY 498
-#define MSG_MALLOC_NULL 499
-#define MSG_MAP_NO_MORE 500
-#define MSG_MISSING_COL_DEF 501
-#define MSG_MISSING_CONNECT 502
-#define MSG_MISSING_SERV_DB 503
-#define MSG_MISS_NAME_LRECL 504
-#define MSG_MISS_TABLE_LIST 505
-#define MSG_MISS_VCT_ELMT 506
-#define MSG_NEW_CHAR_NULL 507
-#define MSG_NODEF_FROM_VIEW 508
-#define MSG_NO_COL_ADDING 509
-#define MSG_NO_COL_DEF_AS 510
-#define MSG_NO_DATABASE 511
-#define MSG_NO_FULL_JOIN 512
-#define MSG_NO_FUL_OUT_JOIN 513
-#define MSG_NO_HEAD_JOIN 514
-#define MSG_NO_ODBC_COL 515
-#define MSG_NO_SELECTED_DB 516
-#define MSG_NO_SELF_PIVOT 517
-#define MSG_NULL_QUERY 518
-#define MSG_READY 519
-#define MSG_SEC_NOT_FOUND 520
-#define MSG_SET_OP_NOT_IMPL 521
-#define MSG_TABLE_ALTERED 522
-#define MSG_TABLE_CREATED 523
-#define MSG_TABLE_DROPPED 524
-#define MSG_TDB_NXT_NOT_NUL 525
-#define MSG_TYPE_DEF_MISM 526
-#define MSG_TYPE_RECFM_MISM 527
-#define MSG_VIEW_CREATED 528
-#define MSG_VIEW_DROPPED 529
-#define MSG_ANSWER_TYPE 530
-#define MSG_COPY_BAD_PHASE 531
-#define MSG_LIST 532
-#define MSG_MEM_ALLOC_ERROR 533
-#define MSG_PTR_NOT_FOUND 534
-#define MSG_SEMANTIC_TREE 535
-#define MSG_WRONG_TYPE 536
-#define MSG_ARRAY_ERROR 537
-#define MSG_BAD_EVAL_TYPE 538
-#define MSG_BAD_FILTER_LINK 539
-#define MSG_BAD_IN_ENDING 540
-#define MSG_BAD_IN_STRING 541
-#define MSG_BAD_LIST_TYPE 542
-#define MSG_BAD_ORDER_MODE 543
-#define MSG_BAD_ORDER_TYPE 544
-#define MSG_GROUP_ON_FUNC 545
-#define MSG_GRP_LIST_MISMAT 546
-#define MSG_LINEAR_ERROR 547
-#define MSG_NO_FUNC_ORDER 548
-#define MSG_NO_OP_MODIF 549
-#define MSG_NO_TABLE_LIST 550
-#define MSG_ORDER_TWICE 551
-#define MSG_UNKNOWN_ERROR 552
-#define MSG_VOID_IN_STRING 553
-#define MSG_VOID_ORDER_LIST 554
-#define MSG_ACCESS_VIOLATN 555
-#define MSG_ARRAY_BNDS_EXCD 556
-#define MSG_BREAKPOINT 557
-#define MSG_CONTROL_C_EXIT 558
-#define MSG_DATA_MISALIGN 559
-#define MSG_FLT_BAD_RESULT 560
-#define MSG_FLT_DENORMAL_OP 561
-#define MSG_FLT_INVALID_OP 562
-#define MSG_FLT_OVERFLOW 563
-#define MSG_FLT_STACK_CHECK 564
-#define MSG_FLT_UNDERFLOW 565
-#define MSG_FLT_ZERO_DIVIDE 566
-#define MSG_GUARD_PAGE 567
-#define MSG_ILLEGAL_INSTR 568
-#define MSG_INT_OVERFLOW 569
-#define MSG_INT_ZERO_DIVIDE 570
-#define MSG_INVALID_DISP 571
-#define MSG_INVALID_HANDLE 572
-#define MSG_NEW_RETURN_NULL 573
-#define MSG_NONCONT_EXCEPT 574
-#define MSG_NO_ACTIVE_DB 575
-#define MSG_NO_MEMORY 576
-#define MSG_PAGE_ERROR 577
-#define MSG_PARSING_QUERY 578
-#define MSG_PRIV_INSTR 579
-#define MSG_SINGLE_STEP 580
-#define MSG_SQL_BAD_TYPE 581
-#define MSG_UNKNOWN_EXCPT 582
-#define MSG_WRONG_FUNCTION 583
-#define MSG_BAD_RESULT_TYPE 584
-#define MSG_BUFF_TOO_SMALL 585
-#define MSG_COL_ALLOC_ERROR 586
-#define MSG_DATA_IS_NULL 587
-#define MSG_GET_ERROR 588
-#define MSG_INV_COL_DATATYP 589
-#define MSG_INV_INIPATH 590
-#define MSG_NO_NBLIN_CONT 591
-#define MSG_NO_SERVER_FOUND 592
-#define MSG_TYPES_ERROR 593
-#define MSG_UNDEFINED_PATH 594
-#define MSG_UNKNOWN_PATH 595
-#define MSG_WRONG_DB_LIST 596
-#define MSG_BAD_SPECIAL_CMD 597
-#define MSG_CURSOR_SET 598
-#define MSG_EVAL_EXPIRED 599
-#define MSG_EVAL_ONLY 600
-#define MSG_INV_SPECIAL_CMD 601
-#define MSG_PROGRESS_INFO 602
-#define MSG_PROMPT_CANCEL 603
-#define MSG_ARG_ALREADY_SET 604
-#define MSG_BAD_ARG_NUM 605
-#define MSG_BAD_CHECK_VAL 606
-#define MSG_BAD_EXEC_MODE 607
-#define MSG_BAD_MAX_PARAM 608
-#define MSG_BAD_MAX_SETTING 609
-#define MSG_BAD_USETEMP 610
-#define MSG_BAD_USETEMP_VAL 611
-#define MSG_CHECK_LEVEL 612
-#define MSG_COLS_REDUCED 613
-#define MSG_COLUMN_MISMATCH 614
-#define MSG_COL_NOT_IN_DB 615
-#define MSG_DB_NOT_SPEC 616
-#define MSG_DONE 617
-#define MSG_EXEC_MODE_IS 618
-#define MSG_EXEC_MODE_RESET 619
-#define MSG_HUGE_DEFAULT 620
-#define MSG_INDEX_ONE_SAVE 621
-#define MSG_INDEX_SEP_SAVE 622
-#define MSG_INVALID_OPTION 623
-#define MSG_INV_COL_NUM 624
-#define MSG_INV_INFO_TYPE 625
-#define MSG_INV_RESULT_TYPE 626
-#define MSG_LANG_ACTIVE 627
-#define MSG_MAX_BITMAP 628
-#define MSG_MYSQL_CNC_OFF 629
-#define MSG_MYSQL_CNC_ON 630
-#define MSG_MYSQL_NOT_SUP 631
-#define MSG_MY_CNC_ALREADY 632
-#define MSG_NO_AVAIL_RESULT 633
-#define MSG_NO_HQL_CONV 634
-#define MSG_NO_MYSQL_CONN 635
-#define MSG_NO_UNIX_CATINFO 636
-#define MSG_OPENING 637
-#define MSG_PLUG_NOT_RUN 638
-#define MSG_PROMPT_NIY 639
-#define MSG_QUERY_SAVED 640
-#define MSG_REC_SKIPPED 641
-#define MSG_ROWS_SELECTED 642
-#define MSG_ROWS_TRUNCATED 643
-#define MSG_SLEEP 644
-#define MSG_SPEC_CMD_SEP 645
-#define MSG_SYSTEM_ERROR 646
-#define MSG_UNLOADABLE 647
-#define MSG_UNLOADABLE_PRM 648
-#define MSG_USETEMP_IS 649
-#define MSG_USETEMP_RESET 650
-#define MSG_USETEMP_SET 651
-#define MSG_USING_INDEX 652
-#define MSG_VOID_QUERY 653
-#define MSG_WORK_TOO_SMALL 654
-#define MSG_WRITING_QUERY 655
-#define MSG_X_ARG_SET 656
-#define MSG_BAS_NS_LIST 657
-#define MSG_DOM_NOT_SUPP 658
-#define MSG_AFTER 659
-#define MSG_ARG_OUT_CONTEXT 660
-#define MSG_ARG_OUT_RANGE 661
-#define MSG_ARG_PTR_NOSEM 662
-#define MSG_ARG_PTR_NOSEMS 663
-#define MSG_BAD_ARG_TYPE 664
-#define MSG_ERR_RET_RULE 665
-#define MSG_ERR_RET_TYPE 666
-#define MSG_FUNC_REF_DEL 667
-#define MSG_INV_TOPSEM_CMD 668
-#define MSG_NON_EVAL_SEM 669
-#define MSG_N_FULL_PARSES 670
-#define MSG_PARSE_NULL_SEM 671
-#define MSG_PNODE_RULE 672
-#define MSG_SCAN_NOT_IMP 673
-#define MSG_SEM_BAD_REF 674
-#define MSG_SEM_UNKNOWN 675
-#define MSG_SUBARG_NOSEM 676
-#define MSG_SUBARG_OUTRANGE 677
-#define MSG_SYNTAX_ERROR 678
-#define MSG_TOPSEM_ERROR 679
-#define MSG_UNKN_ERR_CODE 680
-#define MSG_ATTRIBUTE_ERROR 681
-#define MSG_BAD_PHRASE_NB 682
-#define MSG_INV_OPERATOR 683
-#define MSG_NO_LANGUAGE 684
-#define MSG_PIX_ERROR 685
-#define MSG_PIX_TEST_ERROR 686
-#define MSG_PLUG_NOT_INIT 687
-#define MSG_STACK_ERROR 688
-#define MSG_STACK_OVERFLOW 689
-#define MSG_APPL_ACCESSIBLE 690
-#define MSG_APPL_BAD_SAVE 691
-#define MSG_APPL_CREATED 692
-#define MSG_APPL_NOT_LOADED 693
-#define MSG_APPL_QUIT 694
-#define MSG_APPL_SAVED 695
-#define MSG_ARG_NOT_AN_ATTR 696
-#define MSG_ATT_NOT_CASE 697
-#define MSG_ATT_POSCODE_BIG 698
-#define MSG_BAD_EDIT_INIT 699
-#define MSG_BAD_FPARM_NEXT 700
-#define MSG_BAD_PHASE_NUM 701
-#define MSG_BAD_SUBLST_TYPE 702
-#define MSG_BAD_USERBLK_LEN 703
-#define MSG_COPY_INV_TYPE 704
-#define MSG_DEBUG_NOT_ACTIV 705
-#define MSG_DEBUG_SET_INV 706
-#define MSG_DICTIONARY 707
-#define MSG_ENDSTR_MISMATCH 708
-#define MSG_ERROR_NO_PARM 709
-#define MSG_EXECUTION_ERROR 710
-#define MSG_FILE_NOT_FOUND 711
-#define MSG_INPUT 712
-#define MSG_INPUT_KEYBD_YET 713
-#define MSG_INV_CONC_BIP 714
-#define MSG_INV_DOMAIN_TYPE 715
-#define MSG_INV_PARAMETER 716
-#define MSG_INV_PARM_TYPE 717
-#define MSG_INV_TRANSF_USE 718
-#define MSG_INV_TYPE_SPEC 719
-#define MSG_LDF_RN_MISMATCH 720
-#define MSG_LDF_WLEN_ERROR 721
-#define MSG_MOVE_INV_TYPE 722
-#define MSG_NODE_FOR_CHAR 723
-#define MSG_NOT_IMPLEMENTED 724
-#define MSG_NOT_IMPL_YET 725
-#define MSG_NOT_MODIFIABLE 726
-#define MSG_NO_ACTIVE_APPL 727
-#define MSG_NO_ACTIVE_UDIC 728
-#define MSG_NO_AREA_FILE 729
-#define MSG_NO_EDITED_LANG 730
-#define MSG_NO_PARAMETER 731
-#define MSG_NO_RCUR_DSK_YET 732
-#define MSG_NO_SOURCE 733
-#define MSG_ONE_PARAM_ONLY 734
-#define MSG_READING_FROM 735
-#define MSG_RESET_TO 736
-#define MSG_STRING_INV_LIST 737
-#define MSG_UNKNOWN_SEM 738
-#define MSG_USED_FREE_MEM 739
-#define MSG_WRONG_PASSWORD 740
-#define MSG_WRONG_USERFILE 741
-#define MSG_ACT_ALLOC_FAIL 742
-#define MSG_APPL_ACTIVE 743
-#define MSG_BAD_CASE_SPEC 744
-#define MSG_DOSALMEM_NOMEM 745
-#define MSG_EXIT_FROM_LANG 746
-#define MSG_GLOBAL_ERROR 747
-#define MSG_HUGE_WARNING_1 748
-#define MSG_HUGE_WARNING_2 749
-#define MSG_LANG_ALLOC_FAIL 750
-#define MSG_MALLOC_ERROR 751
-#define MSG_NO_INIT_LANG 752
-#define MSG_NULL_ENTRY 753
-#define MSG_READ_MEM_ERROR 754
-#define MSG_READ_SEG_ERROR 755
-#define MSG_RECEIVED 756
-#define MSG_RET_FROM_LANG 757
-#define MSG_STRG_NOT_FOUND 758
-#define MSG_SUBALLOC_ERROR 759
-#define MSG_SUBAL_HUGE_ERR 760
-#define MSG_S_ACCESS_DENIED 761
-#define MSG_S_ERROR 762
-#define MSG_S_ERROR_NUM 763
-#define MSG_S_INTRUPT_ERROR 764
-#define MSG_S_INVALID_PARM 765
-#define MSG_S_INV_ADDRESS 766
-#define MSG_S_UNKNOWN_ERROR 767
-#define MSG_VOID_POS_DICT 768
-#define MSG_WORK_AREA 769
-#define MSG_BAD_AGGREG_FUNC 770
-#define MSG_BAD_MAX_HAVING 771
-#define MSG_BUILDING_GROUPS 772
-#define MSG_CD_ONE_STEP 773
-#define MSG_CNTDIS_COL_LOST 774
-#define MSG_COMPUTING 775
-#define MSG_DISTINCT_ROWS 776
-#define MSG_DISTINCT_VALUES 777
-#define MSG_FETCHING_DATA 778
-#define MSG_FETCHING_ROWS 779
-#define MSG_GROUPBY_NOT_ALL 780
-#define MSG_HAVING_FILTER 781
-#define MSG_IDLE 782
-#define MSG_INTERNAL 783
-#define MSG_INV_QUERY_TYPE 784
-#define MSG_MAKING_DISTINCT 785
-#define MSG_MAXTMP_TRUNCATE 786
-#define MSG_MEM_ALLOC_YET 787
-#define MSG_NOT_ENOUGH_MEM 788
-#define MSG_NO_NULL_CONST 789
-#define MSG_OFFSET_NOT_SUPP 790
-#define MSG_OPENING_QUERY 791
-#define MSG_OPEN_SORT_ERROR 792
-#define MSG_PROC_WOULD_LOOP 793
-#define MSG_RSC_ALLOC_ERROR 794
-#define MSG_SMART_SORTING 795
-#define MSG_SMART_SORT_ERR 796
-#define MSG_SORTING 797
-#define MSG_DEF_ALLOC_ERROR 798
-#define MSG_GET_FUNC_ERR 799
-#define MSG_PROCADD_ERROR 800
-#define MSG_PXDEF_IS_NULL 801
-#define MSG_SHARED_LIB_ERR 802
-#define MSG_ADPOS_IN_DICTP 803
-#define MSG_BAD_CHAR_SPEC 804
-#define MSG_BAD_GENRE 805
-#define MSG_BAD_INPUT 806
-#define MSG_BAD_LOCDFON_ARG 807
-#define MSG_BAD_LOCNODE_USE 808
-#define MSG_BAD_POS_CODE 809
-#define MSG_BAD_POS_TYPE 810
-#define MSG_BAD_TYPE_FOR_S 811
-#define MSG_BLOCK_NO_MATCH 812
-#define MSG_BXP_NULL 813
-#define MSG_DIRECT_VARTOK 814
-#define MSG_FSBPARP_NULL 815
-#define MSG_LOCSTRG_TOO_BIG 816
-#define MSG_MISSING_POS 817
-#define MSG_NO_POS_ADDED 818
-#define MSG_NO_TERM_IN_TOK 819
-#define MSG_POS_TOO_LONG 820
-#define MSG_RENUM_RULES 821
-#define MSG_RULE_ENTERED 822
-#define MSG_TOO_MANY_POS 823
-#define MSG_TO_FTR_NOT_NULL 824
-#define MSG_TO_PIX_NOT_NULL 825
-#define MSG_TO_SEM_NOT_NULL 826
-#define MSG_UNKNOWN_POS 827
-#define MSG_UNKNOWN_SYNONYM 828
-#define MSG_USE_NO_MATCH 829
-#define MSG_ALLOC_ERROR 830
-#define MSG_ARG_TWO_CONST 831
-#define MSG_BAD_ARGTYPES 832
-#define MSG_BAD_ARGUMENTS 833
-#define MSG_BAD_ROW_VALIST 834
-#define MSG_BAD_ROW_VALNB 835
-#define MSG_BAD_SCF_ARGTYPE 836
-#define MSG_BAD_SUB_SELECT 837
-#define MSG_BAD_TYPE_FOR_IN 838
-#define MSG_CONNECT_ERROR 839
-#define MSG_EXIT_EVAL_ERR 840
-#define MSG_FORMAT_ERROR 841
-#define MSG_INIT_ERROR 842
-#define MSG_INVALID_OPER 843
-#define MSG_NO_SFEXIT_UNIX 844
-#define MSG_READING_RECORD 845
-#define MSG_REQU_ARG_NUM 846
-#define MSG_SFUNC_NOT_IMPL 847
-#define MSG_UNKNOWN_DOMAIN 848
-#define MSG_WRONG_ARG_NUM 849
-#define MSG_WRONG_OP_PARM 850
-#define MSG_WRONG_PARMS 851
-#define MSG_AMBIG_CORREL 852
-#define MSG_BAD_CHECK_TYPE 853
-#define MSG_BAD_CORREL 854
-#define MSG_BAD_XOBJ_TYPE 855
-#define MSG_HBUF_TOO_SMALL 856
-#define MSG_MISSING 857
-#define MSG_MULT_DISTINCT 858
-#define MSG_NO_TABLE_COL 859
-#define MSG_ARG_REF_LOOP 860
-#define MSG_GETCWD_ERR_NO 861
-#define MSG_UNRESOLVED_ARG 862
-#define MSG_ARGS_SYNTAX_ERR 863
-#define MSG_AMBIG_COL_QUAL 864
-#define MSG_AMBIG_SPEC_COL 865
-#define MSG_BAD_COL_QUALIF 866
-#define MSG_BAD_FETCH_RC 867
-#define MSG_BAD_FILTER_OP 868
-#define MSG_BAD_HAV_FILTER 869
-#define MSG_BAD_JOIN_FILTER 870
-#define MSG_BAD_SET_TYPE 871
-#define MSG_BAD_SPECIAL_COL 872
-#define MSG_BAD_SPEC_COLUMN 873
-#define MSG_BAD_SQL_PARAM 874
-#define MSG_BAD_TABLE_LIST 875
-#define MSG_BAD_UPD_COR 876
-#define MSG_BAD_VALUE_TYPE 877
-#define MSG_BUILD_DIST_GRPS 878
-#define MSG_CHECKING_ROWS 879
-#define MSG_COL_INVAL_TABLE 880
-#define MSG_COL_ISNOT_TABLE 881
-#define MSG_COL_NOTIN_TABLE 882
-#define MSG_COL_NOTIN_UPDT 883
-#define MSG_COMPUTING_DIST 884
-#define MSG_COMPUTING_FUNC 885
-#define MSG_DELETING_ROWS 886
-#define MSG_ERROR 887
-#define MSG_FILGRP_NO_TABLE 888
-#define MSG_FILTER_NO_TABLE 889
-#define MSG_INSERTING 890
-#define MSG_INSERT_MISMATCH 891
-#define MSG_INV_FILTER 892
-#define MSG_INV_UPDT_TABLE 893
-#define MSG_INV_VALUE_LIST 894
-#define MSG_INV_WHERE_JOIN 895
-#define MSG_NOT_LINEARIZED 896
-#define MSG_NO_CONST_FILTER 897
-#define MSG_NO_INDEX_GBX 898
-#define MSG_READB_BAD_INIT 899
-#define MSG_READING 900
-#define MSG_SEVERAL_TREES 901
-#define MSG_UNKNW_QRY_TYPE 902
-#define MSG_UNQ_COL_SEV_TAB 903
-#define MSG_UPDATING_ROWS 904
-#define MSG_VAL_TOO_LONG 905
-#define MSG_BAD_FILTEST_OP 906
-#define MSG_BAD_SUBSEL_TYPE 907
-#define MSG_BAD_SUB_RESULT 908
-#define MSG_CORREL_NO_QRY 909
-#define MSG_FLTST_NO_CORREL 910
-#define MSG_NO_MEM_CORR_SUB 911
-#define MSG_NO_QUERY_ARRAY 912
-#define MSG_PROCESS_SUBQRY 913
-#define MSG_READ_ERROR_RC 914
-#define MSG_RES_NOT_UNIQUE 915
-#define MSG_SQL_BLOCK_MISM 916
-#define MSG_SUBQRY_ONEITEM 917
-#define MSG_SUB_OPEN_YET 918
-#define MSG_FNC_NOTIN_SLIST 919
-#define MSG_NO_FORMAT_COL 920
-#define MSG_ORDER_OUT_RANGE 921
-#define MSG_SEP_IN_FIELD 922
-#define MSG_BAD_OPEN_MODE 923
-#define MSG_OPEN_MODE_ERROR 924
-#define MSG_RECORD_NO_SEP 925
-#define MSG_BAD_BLK_ESTIM 926
-#define MSG_BAD_FREQ_SET 927
-#define MSG_BAD_RECFM 928
-#define MSG_BAD_RECFM_VAL 929
-#define MSG_BIN_F_TOO_LONG 930
-#define MSG_CHSIZE_ERROR 931
-#define MSG_DEL_FILE_ERR 932
-#define MSG_DEL_READ_ERROR 933
-#define MSG_DEL_WRITE_ERROR 934
-#define MSG_DVAL_NOTIN_LIST 935
-#define MSG_FILELEN_ERROR 936
-#define MSG_FILE_IS_EMPTY 937
-#define MSG_FILE_MAP_ERROR 938
-#define MSG_FPUTS_ERROR 939
-#define MSG_FSEEK_ERROR 940
-#define MSG_FSETPOS_ERROR 941
-#define MSG_FTELL_ERROR 942
-#define MSG_FUNCTION_ERROR 943
-#define MSG_GETFILESIZE_ERR 944
-#define MSG_GET_DIST_VALS 945
-#define MSG_INDEX_NOT_DEF 946
-#define MSG_INDEX_YET_ON 947
-#define MSG_INDX_COL_NOTIN 948
-#define MSG_INDX_EXIST_YET 949
-#define MSG_INSERT_ERROR 950
-#define MSG_INV_DEF_READ 951
-#define MSG_INV_MAP_POS 952
-#define MSG_MAP_VIEW_ERROR 953
-#define MSG_NOT_FIXED_LEN 954
-#define MSG_NO_INDEX_IN 955
-#define MSG_NO_RECOV_SPACE 956
-#define MSG_NO_ROWID_FOR_AM 957
-#define MSG_OPEN_STRERROR 958
-#define MSG_OPTBLK_RD_ERR 959
-#define MSG_OPTBLK_WR_ERR 960
-#define MSG_OPT_BMAP_RD_ERR 961
-#define MSG_OPT_BMAP_WR_ERR 962
-#define MSG_OPT_DVAL_RD_ERR 963
-#define MSG_OPT_DVAL_WR_ERR 964
-#define MSG_OPT_LOGIC_ERR 965
-#define MSG_READ_ERROR 966
-#define MSG_READ_SEEK_ERROR 967
-#define MSG_TABLE_NOT_OPT 968
-#define MSG_TRUNCATE_ERROR 969
-#define MSG_VALUE_TOO_LONG 970
-#define MSG_WRITE_SEEK_ERR 971
-#define MSG_BAD_BIN_FMT 972
-#define MSG_BAD_DEF_READ 973
-#define MSG_COL_NOT_SORTED 974
-#define MSG_ERROR_IN_LSK 975
-#define MSG_ERROR_IN_SFP 976
-#define MSG_FILE_OPEN_YET 977
-#define MSG_FWRITE_ERROR 978
-#define MSG_INVALID_FTYPE 979
-#define MSG_INV_REC_POS 980
-#define MSG_NO_BIG_DELETE 981
-#define MSG_NO_CLUSTER_COL 982
-#define MSG_OPEN_ERROR 983
-#define MSG_OPTIMIZING 984
-#define MSG_OPT_CANCELLED 985
-#define MSG_OPT_HEAD_RD_ERR 986
-#define MSG_OPT_HEAD_WR_ERR 987
-#define MSG_OPT_MAX_RD_ERR 988
-#define MSG_OPT_MAX_WR_ERR 989
-#define MSG_OPT_MIN_RD_ERR 990
-#define MSG_OPT_MIN_WR_ERR 991
-#define MSG_OPT_NOT_MATCH 992
-#define MSG_VALUE_TOO_BIG 993
-#define MSG_WRITING_ERROR 994
-#define MSG_BAD_FIELD_RANK 995
-#define MSG_BAD_FLD_FORMAT 996
-#define MSG_BAD_FLD_LENGTH 997
-#define MSG_BAD_LINEFLD_FMT 998
-#define MSG_BAD_QUOTE_FIELD 999
-#define MSG_CANNOT_OPEN 1000
-#define MSG_EOF_AFTER_LINE 1001
-#define MSG_ERR_READING_REC 1002
-#define MSG_FIELD_TOO_LONG 1003
-#define MSG_FLD_TOO_LNG_FOR 1004
-#define MSG_FMT_WRITE_NIY 1005
-#define MSG_LINE_TOO_LONG 1006
-#define MSG_LRECL_TOO_SMALL 1007
-#define MSG_MISPLACED_QUOTE 1008
-#define MSG_MISSING_EOL 1009
-#define MSG_MISSING_FIELD 1010
-#define MSG_MISSING_FNAME 1011
-#define MSG_NO_FLD_FORMAT 1012
-#define MSG_QUOTE_IN_QUOTE 1013
-#define MSG_TOO_MANY_FIELDS 1014
-#define MSG_UNBALANCE_QUOTE 1015
-#define MSG_BAD_JCOL_TYPE 1016
-#define MSG_COL_USED_TWICE 1017
-#define MSG_DUMMY_NO_COLS 1018
-#define MSG_JCT_MISS_COLS 1019
-#define MSG_JCT_MISS_TABLE 1020
-#define MSG_JCT_NO_FILTER 1021
-#define MSG_JCT_NO_KEY 1022
-#define MSG_NO_DMY_DIR_ACC 1023
-#define MSG_NO_EXP_LINK 1024
-#define MSG_VIR_NO_DELETE 1025
-#define MSG_VIR_READ_ONLY 1026
-#define MSG_BAD_JOIN_EXP 1027
-#define MSG_BAD_JOIN_OP 1028
-#define MSG_COLUMN_NOT_KEY 1029
-#define MSG_DB_SORT_ERROR 1030
-#define MSG_LINJOINDB_ERROR 1031
-#define MSG_MULT_KEY_ERROR 1032
-#define MSG_NO_JOIN_TO_EXP 1033
-#define MSG_NO_MULCOL_JOIN 1034
-#define MSG_READ_ONLY 1035
-#define MSG_ROWID_NOT_IMPL 1036
-#define MSG_SETRECPOS_NIY 1037
-#define MSG_TABLE_MULT_JOIN 1038
-#define MSG_TDB_USE_ERROR 1039
-#define MSG_BAD_CARDINALITY 1040
-#define MSG_BAD_DIRECTORY 1041
-#define MSG_BAD_FILE_HANDLE 1042
-#define MSG_INV_DIRCOL_OFST 1043
-#define MSG_MAXSIZE_ERROR 1044
-#define MSG_MUL_MAKECOL_ERR 1045
-#define MSG_NEXT_FILE_ERROR 1046
-#define MSG_NO_DIR_INDX_RD 1047
-#define MSG_NO_INDEX_READ 1048
-#define MSG_NO_MUL_DIR_ACC 1049
-#define MSG_SRCH_CLOSE_ERR 1050
-#define MSG_TABDIR_READONLY 1051
-#define MSG_TABMUL_READONLY 1052
-#define MSG_NO_EXT_FILTER 1053
-#define MSG_NO_EXT_UPDATE 1054
-#define MSG_NO_ODBC_DELETE 1055
-#define MSG_NO_ODBC_DIRECT 1056
-#define MSG_NO_ODBC_MUL 1057
-#define MSG_NO_ODBC_SPECOL 1058
-#define MSG_NO_UPDEL_JOIN 1059
-#define MSG_ODBC_READ_ONLY 1060
-#define MSG_PARM_CNT_MISS 1061
-#define MSG_COLNAM_TOO_LONG 1062
-#define MSG_NOT_ENOUGH_COLS 1063
-#define MSG_NO_DEF_FNCCOL 1064
-#define MSG_NO_DEF_PIVOTCOL 1065
-#define MSG_NO_MATCH_COL 1066
-#define MSG_NO_MORE_COL 1067
-#define MSG_NO_PIV_DIR_ACC 1068
-#define MSG_NO_TABLE_DEL 1069
-#define MSG_SRC_TABLE_UNDEF 1070
-#define MSG_TABLE_READ_ONLY 1071
-#define MSG_TOO_MANY_COLS 1072
-#define MSG_BAD_COLDEF_TYPE 1073
-#define MSG_BAD_MERGE_TYPE 1074
-#define MSG_COL_NB_MISM 1075
-#define MSG_ERROR_OPENING 1076
-#define MSG_FETCH_NO_RES 1077
-#define MSG_LOAD_CDLL_ERROR 1078
-#define MSG_NO_NBCOL 1079
-#define MSG_NO_NBLIN 1080
-#define MSG_NO_PROMPTING 1081
-#define MSG_NO_REMOTE_FNC 1082
-#define MSG_NO_VIEW_COLDEF 1083
-#define MSG_PLG_READ_ONLY 1084
-#define MSG_PLM_NULL_SFP 1085
-#define MSG_QUERY_NOT_EXEC 1086
-#define MSG_REMOTE_CONN_ERR 1087
-#define MSG_RPC_SERVER_ERR 1088
-#define MSG_BAD_QUERY_OPEN 1089
-#define MSG_BAD_RETURN_TYPE 1090
-#define MSG_BAD_VIEW_OPEN 1091
-#define MSG_NO_QRY_DELETE 1092
-#define MSG_NO_SQL_DELETE 1093
-#define MSG_NO_VIEW_SORT 1094
-#define MSG_NULL_COL_VALUE 1095
-#define MSG_QRY_READ_ONLY 1096
-#define MSG_READCOL_ERROR 1097
-#define MSG_SQL_READ_ONLY 1098
-#define MSG_GET_NAME_ERR 1099
-#define MSG_INV_SUBTYPE 1100
-#define MSG_NO_CURLY_BRKT 1101
-#define MSG_NO_KEY_UPDATE 1102
-#define MSG_NO_SECTION_NAME 1103
-#define MSG_NO_SEC_UPDATE 1104
-#define MSG_SEC_KEY_FIRST 1105
-#define MSG_SEC_NAME_FIRST 1106
-#define MSG_NO_MATCHING_COL 1107
-#define MSG_BAD_BYTE_NUM 1108
-#define MSG_BAD_BYTE_READ 1109
-#define MSG_BAD_READ_NUMBER 1110
-#define MSG_BLK_IS_NULL 1111
-#define MSG_EMPTY_FILE 1112
-#define MSG_MAKE_EMPTY_FILE 1113
-#define MSG_MAKING 1114
-#define MSG_NO_VCT_DELETE 1115
-#define MSG_OPEN_EMPTY_FILE 1116
-#define MSG_OPT_INIT 1117
-#define MSG_SFP_ERROR 1118
-#define MSG_TO_BLK_IS_NULL 1119
-#define MSG_TRUNC_BY_ESTIM 1120
-#define MSG_UPDATE_ERROR 1121
-#define MSG_WRITE_STRERROR 1122
-#define MSG_WRITING 1123
-#define MSG_BAD_COL_XPATH 1124
-#define MSG_BAD_NODE_TYPE 1125
-#define MSG_BAD_VALNODE 1126
-#define MSG_BAD_VAL_UPDATE 1127
-#define MSG_COL_ALLOC_ERR 1128
-#define MSG_COM_ERROR 1129
-#define MSG_CONCAT_SUBNODE 1130
-#define MSG_CREATED_PLUGDB 1131
-#define MSG_DEPREC_FLAG 1132
-#define MSG_EMPTY_DOC 1133
-#define MSG_FAIL_ADD_NODE 1134
-#define MSG_FILE_UNFOUND 1135
-#define MSG_INIT_FAILED 1136
-#define MSG_INV_COL_TYPE 1137
-#define MSG_LOADING_FAILED 1138
-#define MSG_MISSING_NODE 1139
-#define MSG_MISSING_ROWNODE 1140
-#define MSG_MIS_TAG_LIST 1141
-#define MSG_NEW_DOC_FAILED 1142
-#define MSG_NO_ROW_NODE 1143
-#define MSG_VAL_ALLOC_ERR 1144
-#define MSG_XMLTAB_INIT_ERR 1145
-#define MSG_XML_INIT_ERROR 1146
-#define MSG_XPATH_NOT_SUPP 1147
-#define MSG_DLL_LOAD_ERROR 1148
-#define MSG_GZOPEN_ERROR 1149
-#define MSG_GZPUTS_ERROR 1150
-#define MSG_NO_ZIP_DELETE 1151
-#define MSG_NO_ZIP_DIR_ACC 1152
-#define MSG_UPD_ZIP_NOT_IMP 1153
-#define MSG_MAC_NO_DELETE 1154
-#define MSG_MAC_NO_INDEX 1155
-#define MSG_MAC_READ_ONLY 1156
-#define MSG_BAD_FIELD_TYPE 1157
-#define MSG_BAD_PARM_COUNT 1158
-#define MSG_NO_JOIN_UPDEL 1159
-#define MSG_NO_MYSQL_DELETE 1160
-#define MSG_NO_REF_DELETE 1161
-#define MSG_NO_REF_UPDATE 1162
-#define MSG_NO_SPEC_COL 1163
-#define MSG_ADD_NULL_DOM 1164
-#define MSG_BAD_DOM_VALUE 1165
-#define MSG_BAD_SET_STRING 1166
-#define MSG_BAD_VALBLK_INDX 1167
-#define MSG_BAD_VALBLK_TYPE 1168
-#define MSG_COMPUTE_NIY 1169
-#define MSG_DOMAIN_EMPTY 1170
-#define MSG_DOMAIN_FULL 1171
-#define MSG_DOM_FILE_ERROR 1172
-#define MSG_DOM_OPEN_ERROR 1173
-#define MSG_DOM_READ_ERROR 1174
-#define MSG_DOM_READ_ONLY 1175
-#define MSG_DOM_WRITE_ERROR 1176
-#define MSG_ERR_NUM_GT_MAX 1177
-#define MSG_INV_TOK_DOMAIN 1178
-#define MSG_MEMSIZE_TOO_BIG 1179
-#define MSG_NO_DOM_DELETE 1180
-#define MSG_NO_DOM_MATCH 1181
-#define MSG_SET_NULL_DOM 1182
-#define MSG_STRING_TOO_BIG 1183
-#define MSG_VALTYPE_NOMATCH 1184
-#define MSG_NO_DATE_FMT 1185
-#define MSG_NO_LISTVAL_HERE 1186
-#define MSG_BAD_COL_FORMAT 1187
-#define MSG_BAD_DATETIME 1188
-#define MSG_BAD_DATE_OPER 1189
-#define MSG_BAD_EXP_OPER 1190
-#define MSG_BAD_PAD_ARGTYP 1191
-#define MSG_BAD_TRIM_ARGTYP 1192
-#define MSG_BLKTYPLEN_MISM 1193
-#define MSG_COMPUTE_ERROR 1194
-#define MSG_FIX_OVFLW_ADD 1195
-#define MSG_FIX_OVFLW_TIMES 1196
-#define MSG_FIX_UNFLW_ADD 1197
-#define MSG_FIX_UNFLW_TIMES 1198
-#define MSG_HARRY_COMP_NIY 1199
-#define MSG_NO_CHAR_FROM 1200
-#define MSG_NO_FORMAT_TYPE 1201
-#define MSG_ONLY_LOG10_IMPL 1202
-#define MSG_OP_RES_TOO_LONG 1203
-#define MSG_SET_STR_TRUNC 1204
-#define MSG_SUB_RES_TOO_LNG 1205
-#define MSG_VALIST_MISMATCH 1206
-#define MSG_VALSTR_TOO_LONG 1207
-#define MSG_ZERO_DIVIDE 1208
-#define MSG_ADDVAL_ERROR 1209
-#define MSG_ARRAY_ALLOC_ERR 1210
-#define MSG_BAD_DEF_ARG 1211
-#define MSG_BAD_FUNC_MODE 1212
-#define MSG_BAD_INDEX_COL 1213
-#define MSG_BAD_INDEX_DEF 1214
-#define MSG_BAD_INDEX_FILE 1215
-#define MSG_BAD_INDEX_PART 1216
-#define MSG_EOF_INDEX_FILE 1217
-#define MSG_FILE_CLOSE_ERR 1218
-#define MSG_FILE_MAP_ERR 1219
-#define MSG_FUNC_ERRNO 1220
-#define MSG_FUNC_ERROR 1221
-#define MSG_GRP_COL_MISM 1222
-#define MSG_HANDLE_IS_NULL 1223
-#define MSG_HI_OFFSET_ERR 1224
-#define MSG_INDEX_DEF_ERR 1225
-#define MSG_INDEX_INIT_ERR 1226
-#define MSG_INDEX_NOT_UNIQ 1227
-#define MSG_INT_COL_ERROR 1228
-#define MSG_KEY_ALLOC_ERR 1229
-#define MSG_MAP_OBJ_ERR 1230
-#define MSG_MISS_LEAD_COL 1231
-#define MSG_NEW_TABLE_ERR 1232
-#define MSG_NO_KEY_COL 1233
-#define MSG_NO_PART_MAP 1234
-#define MSG_NUMVAL_NOMATCH 1235
-#define MSG_RANGE_NIY 1236
-#define MSG_RANGE_NO_JOIN 1237
-#define MSG_REDUCE_INDEX 1238
-#define MSG_SAVING_INDEX 1239
-#define MSG_TABLE_NO_INDEX 1240
-#define MSG_XCOL_MISMATCH 1241
-#define MSG_XFILE_READERR 1242
-#define MSG_XFILE_TOO_SMALL 1243
-#define MSG_XFILE_WRITERR 1244
-#define MSG_ADD_BAD_TYPE 1245
-#define MSG_BAD_ARRAY_TYPE 1246
-#define MSG_BAD_CONST_TYPE 1247
-#define MSG_BAD_CONV_TYPE 1248
-#define MSG_BAD_FLOAT_CONV 1249
-#define MSG_BAD_TEST_TYPE 1250
-#define MSG_FIND_BAD_TYPE 1251
+#define MSG_ACCESS_VIOLATN 200
+#define MSG_ADD_BAD_TYPE 201
+#define MSG_ALLOC_ERROR 202
+#define MSG_ANSWER_TYPE 203
+#define MSG_API_CONF_ERROR 204
+#define MSG_APPL_NOT_INIT 205
+#define MSG_ARRAY_BNDS_EXCD 206
+#define MSG_BAD_ARRAY_OPER 207
+#define MSG_BAD_ARRAY_TYPE 208
+#define MSG_BAD_ARRAY_VAL 209
+#define MSG_BAD_BIN_FMT 210
+#define MSG_BAD_BLK_ESTIM 211
+#define MSG_BAD_BLK_SIZE 212
+#define MSG_BAD_BYTE_NUM 213
+#define MSG_BAD_BYTE_READ 214
+#define MSG_BAD_COL_TYPE 215
+#define MSG_BAD_COL_XPATH 216
+#define MSG_BAD_CONST_TYPE 217
+#define MSG_BAD_CONV_TYPE 218
+#define MSG_BAD_DATETIME 219
+#define MSG_BAD_DBF_FILE 220
+#define MSG_BAD_DBF_REC 221
+#define MSG_BAD_DBF_TYPE 222
+#define MSG_BAD_DIRECTORY 223
+#define MSG_BAD_FIELD_RANK 224
+#define MSG_BAD_FIELD_TYPE 225
+#define MSG_BAD_FILE_HANDLE 226
+#define MSG_BAD_FILTER 227
+#define MSG_BAD_FILTER_CONV 228
+#define MSG_BAD_FILTER_OP 229
+#define MSG_BAD_FLD_FORMAT 230
+#define MSG_BAD_FLD_LENGTH 231
+#define MSG_BAD_FREQ_SET 232
+#define MSG_BAD_FUNC_MODE 233
+#define MSG_BAD_HANDLE_VAL 234
+#define MSG_BAD_HEADER 235
+#define MSG_BAD_HEAD_END 236
+#define MSG_BAD_INDEX_FILE 237
+#define MSG_BAD_LINEFLD_FMT 238
+#define MSG_BAD_LINE_LEN 239
+#define MSG_BAD_LRECL 240
+#define MSG_BAD_NODE_TYPE 241
+#define MSG_BAD_OFFSET_VAL 242
+#define MSG_BAD_OPEN_MODE 243
+#define MSG_BAD_PARAM_TYPE 244
+#define MSG_BAD_PARM_COUNT 245
+#define MSG_BAD_QUOTE_FIELD 246
+#define MSG_BAD_READ_NUMBER 247
+#define MSG_BAD_RECFM 248
+#define MSG_BAD_RECFM_VAL 249
+#define MSG_BAD_SET_CASE 250
+#define MSG_BAD_SET_STRING 251
+#define MSG_BAD_SPECIAL_COL 252
+#define MSG_BAD_SPEC_COLUMN 253
+#define MSG_BAD_TABLE_TYPE 254
+#define MSG_BAD_TYPE_LIKE 255
+#define MSG_BAD_VALBLK_INDX 256
+#define MSG_BAD_VALBLK_TYPE 257
+#define MSG_BAD_VALNODE 258
+#define MSG_BAD_VALUE_TYPE 259
+#define MSG_BAD_VAL_UPDATE 260
+#define MSG_BAS_NS_LIST 261
+#define MSG_BIN_F_TOO_LONG 262
+#define MSG_BIN_MODE_FAIL 263
+#define MSG_BLKTYPLEN_MISM 264
+#define MSG_BLK_IS_NULL 265
+#define MSG_BREAKPOINT 266
+#define MSG_BUILD_INDEX 267
+#define MSG_CANNOT_OPEN 268
+#define MSG_CHSIZE_ERROR 269
+#define MSG_COL_ALLOC_ERR 270
+#define MSG_COL_ISNOT_TABLE 271
+#define MSG_COL_NOT_SORTED 272
+#define MSG_COL_NUM_MISM 273
+#define MSG_COM_ERROR 274
+#define MSG_CONCAT_SUBNODE 275
+#define MSG_CONNECT_CANCEL 276
+#define MSG_CONTROL_C_EXIT 277
+#define MSG_DATABASE_LOADED 278
+#define MSG_DATA_MISALIGN 279
+#define MSG_DBASE_FILE 280
+#define MSG_DEF_ALLOC_ERROR 281
+#define MSG_DEL_FILE_ERR 282
+#define MSG_DEL_READ_ERROR 283
+#define MSG_DEL_WRITE_ERROR 284
+#define MSG_DEPREC_FLAG 285
+#define MSG_DLL_LOAD_ERROR 286
+#define MSG_DOM_NOT_SUPP 287
+#define MSG_DVAL_NOTIN_LIST 288
+#define MSG_EMPTY_DOC 289
+#define MSG_EMPTY_FILE 290
+#define MSG_EOF_AFTER_LINE 291
+#define MSG_EOF_INDEX_FILE 292
+#define MSG_ERROR_IN_LSK 293
+#define MSG_ERROR_IN_SFP 294
+#define MSG_ERR_READING_REC 295
+#define MSG_FAIL_ADD_NODE 296
+#define MSG_FETCH_NO_RES 297
+#define MSG_FIELD_TOO_LONG 298
+#define MSG_FILELEN_ERROR 299
+#define MSG_FILE_IS_EMPTY 300
+#define MSG_FILE_MAP_ERR 301
+#define MSG_FILE_MAP_ERROR 302
+#define MSG_FILE_OPEN_YET 303
+#define MSG_FILE_UNFOUND 304
+#define MSG_FLD_TOO_LNG_FOR 305
+#define MSG_FLT_BAD_RESULT 306
+#define MSG_FLT_DENORMAL_OP 307
+#define MSG_FLT_INVALID_OP 308
+#define MSG_FLT_OVERFLOW 309
+#define MSG_FLT_STACK_CHECK 310
+#define MSG_FLT_UNDERFLOW 311
+#define MSG_FLT_ZERO_DIVIDE 312
+#define MSG_FMT_WRITE_NIY 313
+#define MSG_FOXPRO_FILE 314
+#define MSG_FPUTS_ERROR 315
+#define MSG_FSEEK_ERROR 316
+#define MSG_FSETPOS_ERROR 317
+#define MSG_FTELL_ERROR 318
+#define MSG_FUNCTION_ERROR 319
+#define MSG_FUNC_ERRNO 320
+#define MSG_FUNC_ERROR 321
+#define MSG_FUNC_ERR_S 322
+#define MSG_FWRITE_ERROR 323
+#define MSG_GET_DIST_VALS 324
+#define MSG_GET_FUNC_ERR 325
+#define MSG_GLOBAL_ERROR 326
+#define MSG_GUARD_PAGE 327
+#define MSG_GZOPEN_ERROR 328
+#define MSG_ILLEGAL_INSTR 329
+#define MSG_ILL_FILTER_CONV 330
+#define MSG_INDEX_NOT_UNIQ 331
+#define MSG_INDEX_YET_ON 332
+#define MSG_INDX_COL_NOTIN 333
+#define MSG_INDX_EXIST_YET 334
+#define MSG_INIT_FAILED 335
+#define MSG_INT_COL_ERROR 336
+#define MSG_INT_OVERFLOW 337
+#define MSG_INT_ZERO_DIVIDE 338
+#define MSG_INVALID_DISP 339
+#define MSG_INVALID_FTYPE 340
+#define MSG_INVALID_HANDLE 341
+#define MSG_INVALID_OPER 342
+#define MSG_INV_COLUMN_TYPE 343
+#define MSG_INV_COL_TYPE 344
+#define MSG_INV_DEF_READ 345
+#define MSG_INV_DIRCOL_OFST 346
+#define MSG_INV_MAP_POS 347
+#define MSG_INV_RAND_ACC 348
+#define MSG_INV_REC_POS 349
+#define MSG_INV_RESULT_TYPE 350
+#define MSG_INV_UPDT_TABLE 351
+#define MSG_IN_WITHOUT_SUB 352
+#define MSG_KEY_ALLOC_ERR 353
+#define MSG_KEY_ALLOC_ERROR 354
+#define MSG_LINE_TOO_LONG 355
+#define MSG_LIST 356
+#define MSG_LOADING_FAILED 357
+#define MSG_LRECL_TOO_SMALL 358
+#define MSG_MAKE_EMPTY_FILE 359
+#define MSG_MAKING 360
+#define MSG_MALLOC_ERROR 361
+#define MSG_MAP_VIEW_ERROR 362
+#define MSG_MAXSIZE_ERROR 363
+#define MSG_MEM_ALLOC_ERR 364
+#define MSG_MEM_ALLOC_ERROR 365
+#define MSG_MISPLACED_QUOTE 366
+#define MSG_MISSING_ARG 367
+#define MSG_MISSING_FIELD 368
+#define MSG_MISSING_FNAME 369
+#define MSG_MISSING_NODE 370
+#define MSG_MISSING_ROWNODE 371
+#define MSG_MIS_TAG_LIST 372
+#define MSG_MUL_MAKECOL_ERR 373
+#define MSG_NAME_CONV_ERR 374
+#define MSG_NEW_DOC_FAILED 375
+#define MSG_NEW_RETURN_NULL 376
+#define MSG_NEXT_FILE_ERROR 377
+#define MSG_NONCONT_EXCEPT 378
+#define MSG_NOP_ZLIB_INDEX 379
+#define MSG_NOT_A_DBF_FILE 380
+#define MSG_NOT_FIXED_LEN 381
+#define MSG_NO_0DH_HEAD 382
+#define MSG_NO_ACTIVE_DB 383
+#define MSG_NO_CHAR_FROM 384
+#define MSG_NO_DATE_FMT 385
+#define MSG_NO_DEF_FNCCOL 386
+#define MSG_NO_DEF_PIVOTCOL 387
+#define MSG_NO_DIR_INDX_RD 388
+#define MSG_NO_FEAT_SUPPORT 389
+#define MSG_NO_FLD_FORMAT 390
+#define MSG_NO_FORMAT_COL 391
+#define MSG_NO_FORMAT_TYPE 392
+#define MSG_NO_INDEX_READ 393
+#define MSG_NO_KEY_COL 394
+#define MSG_NO_KEY_UPDATE 395
+#define MSG_NO_MAP_INSERT 396
+#define MSG_NO_MATCHING_COL 397
+#define MSG_NO_MATCH_COL 398
+#define MSG_NO_MEMORY 399
+#define MSG_NO_MODE_PADDED 400
+#define MSG_NO_MUL_VCT 401
+#define MSG_NO_ODBC_DELETE 402
+#define MSG_NO_ODBC_DIRECT 403
+#define MSG_NO_ODBC_MUL 404
+#define MSG_NO_ODBC_SPECOL 405
+#define MSG_NO_PART_DEL 406
+#define MSG_NO_PART_MAP 407
+#define MSG_NO_PAR_BLK_INS 408
+#define MSG_NO_PIV_DIR_ACC 409
+#define MSG_NO_READ_32 410
+#define MSG_NO_RECOV_SPACE 411
+#define MSG_NO_ROWID_FOR_AM 412
+#define MSG_NO_ROW_NODE 413
+#define MSG_NO_SECTION_NAME 414
+#define MSG_NO_SEC_UPDATE 415
+#define MSG_NO_SETPOS_YET 416
+#define MSG_NO_SPEC_COL 417
+#define MSG_NO_SUB_VAL 418
+#define MSG_NO_TABCOL_DATA 419
+#define MSG_NO_TABLE_DEL 420
+#define MSG_NO_TAB_DATA 421
+#define MSG_NO_VCT_DELETE 422
+#define MSG_NO_ZIP_DELETE 423
+#define MSG_OPENING 424
+#define MSG_OPEN_EMPTY_FILE 425
+#define MSG_OPEN_ERROR 426
+#define MSG_OPEN_ERROR_IS 427
+#define MSG_OPEN_MODE_ERROR 428
+#define MSG_OPEN_STRERROR 429
+#define MSG_OPTBLK_RD_ERR 430
+#define MSG_OPTBLK_WR_ERR 431
+#define MSG_OPTIMIZING 432
+#define MSG_OPT_BMAP_RD_ERR 433
+#define MSG_OPT_BMAP_WR_ERR 434
+#define MSG_OPT_CANCELLED 435
+#define MSG_OPT_DVAL_RD_ERR 436
+#define MSG_OPT_DVAL_WR_ERR 437
+#define MSG_OPT_HEAD_RD_ERR 438
+#define MSG_OPT_HEAD_WR_ERR 439
+#define MSG_OPT_LOGIC_ERR 440
+#define MSG_OPT_MAX_RD_ERR 441
+#define MSG_OPT_MAX_WR_ERR 442
+#define MSG_OPT_MIN_RD_ERR 443
+#define MSG_OPT_MIN_WR_ERR 444
+#define MSG_OPT_NOT_MATCH 445
+#define MSG_PAGE_ERROR 446
+#define MSG_PARM_CNT_MISS 447
+#define MSG_PREC_VBLP_NULL 448
+#define MSG_PRIV_INSTR 449
+#define MSG_PROCADD_ERROR 450
+#define MSG_QUERY_CANCELLED 451
+#define MSG_RANGE_NO_JOIN 452
+#define MSG_RC_READING 453
+#define MSG_READY 454
+#define MSG_READ_ERROR 455
+#define MSG_READ_ONLY 456
+#define MSG_READ_SEEK_ERROR 457
+#define MSG_REGISTER_ERR 458
+#define MSG_REMOVE_ERROR 459
+#define MSG_RENAME_ERROR 460
+#define MSG_ROWID_NOT_IMPL 461
+#define MSG_SEC_KEY_FIRST 462
+#define MSG_SEC_NAME_FIRST 463
+#define MSG_SEP_IN_FIELD 464
+#define MSG_SEQUENCE_ERROR 465
+#define MSG_SETEOF_ERROR 466
+#define MSG_SETRECPOS_NIY 467
+#define MSG_SET_STR_TRUNC 468
+#define MSG_SFP_ERROR 469
+#define MSG_SHARED_LIB_ERR 470
+#define MSG_SINGLE_STEP 471
+#define MSG_SORTING_VAL 472
+#define MSG_SPCOL_READONLY 473
+#define MSG_SQL_CONF_ERROR 474
+#define MSG_SRCH_CLOSE_ERR 475
+#define MSG_SRC_TABLE_UNDEF 476
+#define MSG_STACK_OVERFLOW 477
+#define MSG_TABDIR_READONLY 478
+#define MSG_TABLE_NOT_OPT 479
+#define MSG_TABLE_NO_INDEX 480
+#define MSG_TABLE_READ_ONLY 481
+#define MSG_TABMUL_READONLY 482
+#define MSG_TOO_MANY_FIELDS 483
+#define MSG_TOO_MANY_JUMPS 484
+#define MSG_TOO_MANY_KEYS 485
+#define MSG_TO_BLK_IS_NULL 486
+#define MSG_TRUNCATE_ERROR 487
+#define MSG_TRUNC_BY_ESTIM 488
+#define MSG_TYPE_MISMATCH 489
+#define MSG_TYPE_VALUE_ERR 490
+#define MSG_UNBALANCE_QUOTE 491
+#define MSG_UNDEFINED_AM 492
+#define MSG_UNKNOWN_EXCPT 493
+#define MSG_UNMATCH_FIL_ARG 494
+#define MSG_UPDATE_ERROR 495
+#define MSG_UPD_ZIP_NOT_IMP 496
+#define MSG_VALSTR_TOO_LONG 497
+#define MSG_VALTYPE_NOMATCH 498
+#define MSG_VALUE_ERROR 499
+#define MSG_VALUE_TOO_BIG 500
+#define MSG_VALUE_TOO_LONG 501
+#define MSG_VAL_ALLOC_ERR 502
+#define MSG_VIR_NO_DELETE 503
+#define MSG_VIR_READ_ONLY 504
+#define MSG_VOID_FIRST_ARG 505
+#define MSG_WORK_AREA 506
+#define MSG_WRITE_SEEK_ERR 507
+#define MSG_WRITE_STRERROR 508
+#define MSG_WRITING 509
+#define MSG_WRITING_ERROR 510
+#define MSG_WS_CONV_ERR 511
+#define MSG_XCOL_MISMATCH 512
+#define MSG_XFILE_READERR 513
+#define MSG_XFILE_WRITERR 514
+#define MSG_XMLTAB_INIT_ERR 515
+#define MSG_XML_INIT_ERROR 516
+#define MSG_XPATH_CNTX_ERR 517
+#define MSG_XPATH_EVAL_ERR 518
+#define MSG_XPATH_NOT_SUPP 519
diff --git a/storage/connect/mycat.cc b/storage/connect/mycat.cc
index 660e2adec2f..fc6c29092a1 100644
--- a/storage/connect/mycat.cc
+++ b/storage/connect/mycat.cc
@@ -28,6 +28,8 @@
/***********************************************************************/
/* Include relevant MariaDB header file. */
/***********************************************************************/
+#include <my_config.h>
+
#if defined(WIN32)
//#include <windows.h>
//#include <sqlext.h>
@@ -86,6 +88,7 @@
#if defined(PIVOT_SUPPORT)
#include "tabpivot.h"
#endif // PIVOT_SUPPORT
+#include "tabvir.h"
#include "ha_connect.h"
#include "mycat.h"
@@ -96,8 +99,6 @@
extern "C" HINSTANCE s_hModule; // Saved module handle
#endif // !WIN32
-extern "C" int trace;
-
PQRYRES OEMColumns(PGLOBAL g, PTOS topt, char *tab, char *db, bool info);
/***********************************************************************/
@@ -137,6 +138,7 @@ TABTYPE GetTypeID(const char *type)
#ifdef PIVOT_SUPPORT
: (!stricmp(type, "PIVOT")) ? TAB_PIVOT
#endif
+ : (!stricmp(type, "VIR")) ? TAB_VIR
: (!stricmp(type, "OEM")) ? TAB_OEM : TAB_NIY;
} // end of GetTypeID
@@ -180,6 +182,7 @@ bool IsExactType(TABTYPE type)
case TAB_DBF:
// case TAB_XML: depends on Multiple || Xpand || Coltype
case TAB_VEC:
+ case TAB_VIR:
exact= true;
break;
default:
@@ -278,6 +281,9 @@ int GetIndexType(TABTYPE type)
// case TAB_ODBC:
xtyp= 2;
break;
+ case TAB_VIR:
+ xtyp= 3;
+ break;
case TAB_ODBC:
default:
xtyp= 0;
@@ -531,6 +537,7 @@ PRELDEF MYCAT::MakeTableDesc(PGLOBAL g, LPCSTR name, LPCSTR am)
#if defined(PIVOT_SUPPORT)
case TAB_PIVOT: tdp= new(g) PIVOTDEF; break;
#endif // PIVOT_SUPPORT
+ case TAB_VIR: tdp= new(g) VIRDEF; break;
default:
sprintf(g->Message, MSG(BAD_TABLE_TYPE), am, name);
} // endswitch
diff --git a/storage/connect/myconn.cpp b/storage/connect/myconn.cpp
index 0c4b50f1d0b..92c2faea676 100644
--- a/storage/connect/myconn.cpp
+++ b/storage/connect/myconn.cpp
@@ -46,11 +46,11 @@
#include "plgcnx.h" // For DB types
#include "resource.h"
//#include "value.h"
-#include "valblk.h"
+//#include "valblk.h"
+#include "xobject.h"
#define DLL_EXPORT // Items are exported from this DLL
#include "myconn.h"
-extern "C" int trace;
extern "C" int zconv;
extern MYSQL_PLUGIN_IMPORT uint mysqld_port;
extern MYSQL_PLUGIN_IMPORT char *mysqld_unix_port;
@@ -135,7 +135,7 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
FLD_REM, FLD_NO, FLD_DEFAULT, FLD_EXTRA,
FLD_CHARSET};
unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0};
- char *fld, *colname, *chset, *fmt, v, cmd[128], uns[16], zero[16];
+ char *fld, *colname, *chset, *fmt, v, buf[128], uns[16], zero[16];
int i, n, nf, ncol = sizeof(buftyp) / sizeof(int);
int len, type, prec, rc, k = 0;
PQRYRES qrp;
@@ -155,16 +155,26 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
/********************************************************************/
/* Do an evaluation of the result size. */
/********************************************************************/
- sprintf(cmd, "SHOW FULL COLUMNS FROM %s", table);
- strcat(strcat(cmd, " FROM "), (db) ? db : PlgGetUser(g)->DBName);
+ STRING cmd(g, 64, "SHOW FULL COLUMNS FROM ");
+ bool b = cmd.Append((PSZ)table);
- if (colpat)
- strcat(strcat(cmd, " LIKE "), colpat);
+ b |= cmd.Append(" FROM ");
+ b |= cmd.Append((PSZ)(db ? db : PlgGetUser(g)->DBName));
+
+ if (colpat) {
+ b |= cmd.Append(" LIKE ");
+ b |= cmd.Append((PSZ)colpat);
+ } // endif colpat
+
+ if (b) {
+ strcpy(g->Message, "Out of memory");
+ return NULL;
+ } // endif b
if (trace)
- htrc("MyColumns: cmd='%s'\n", cmd);
+ htrc("MyColumns: cmd='%s'\n", cmd.GetStr());
- if ((n = myc.GetResultSize(g, cmd)) < 0) {
+ if ((n = myc.GetResultSize(g, cmd.GetStr())) < 0) {
myc.Close();
return NULL;
} // endif n
@@ -225,15 +235,15 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
*uns = 0;
*zero = 0;
- switch ((nf = sscanf(fld, "%[^(](%d,%d", cmd, &len, &prec))) {
+ switch ((nf = sscanf(fld, "%[^(](%d,%d", buf, &len, &prec))) {
case 3:
- nf = sscanf(fld, "%[^(](%d,%d) %s %s", cmd, &len, &prec, uns, zero);
+ nf = sscanf(fld, "%[^(](%d,%d) %s %s", buf, &len, &prec, uns, zero);
break;
case 2:
- nf = sscanf(fld, "%[^(](%d) %s %s", cmd, &len, uns, zero) + 1;
+ nf = sscanf(fld, "%[^(](%d) %s %s", buf, &len, uns, zero) + 1;
break;
case 1:
- nf = sscanf(fld, "%s %s %s", cmd, uns, zero) + 2;
+ nf = sscanf(fld, "%s %s %s", buf, uns, zero) + 2;
break;
default:
sprintf(g->Message, MSG(BAD_FIELD_TYPE), fld);
@@ -241,16 +251,16 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
return NULL;
} // endswitch nf
- if ((type = MYSQLtoPLG(cmd, &v)) == TYPE_ERROR) {
+ if ((type = MYSQLtoPLG(buf, &v)) == TYPE_ERROR) {
if (v == 'K') {
// Skip this column
sprintf(g->Message, "Column %s skipped (unsupported type %s)",
- colname, cmd);
+ colname, buf);
PushWarning(g, thd);
continue;
} // endif v
- sprintf(g->Message, "Column %s unsupported type %s", colname, cmd);
+ sprintf(g->Message, "Column %s unsupported type %s", colname, buf);
myc.Close();
return NULL;
} else if (type == TYPE_STRING) {
@@ -276,11 +286,11 @@ PQRYRES MyColumns(PGLOBAL g, THD *thd, const char *host, const char *db,
} // endswitch nf
crp = crp->Next; // Type_Name
- crp->Kdata->SetValue(cmd, i);
+ crp->Kdata->SetValue(buf, i);
if (type == TYPE_DATE) {
// When creating tables we do need info about date columns
- fmt = MyDateFmt(cmd);
+ fmt = MyDateFmt(buf);
len = strlen(fmt);
} else
fmt = NULL;
diff --git a/storage/connect/mysql-test/connect/r/datest.result b/storage/connect/mysql-test/connect/r/datest.result
new file mode 100644
index 00000000000..203a7419a8e
--- /dev/null
+++ b/storage/connect/mysql-test/connect/r/datest.result
@@ -0,0 +1,32 @@
+#
+# Testing out of range dates as (var)char
+#
+CREATE TABLE t1 (
+id INT NOT NULL,
+dat CHAR(10) NOT NULL,
+tim CHAR(8) DEFAULT '09:35:08',
+datim CHAR(19) DEFAULT '1789-08-10 14:20:30')
+ENGINE=CONNECT TABLE_TYPE=FIX;
+Warnings:
+Warning 1105 No file name. Table will use t1.fix
+INSERT INTO t1(id,dat) VALUES(1,'1515-04-01'),(2,'2014-07-26'),(3,'2118-11-02');
+SELECT * FROM t1;
+id dat tim datim
+1 1515-04-01 09:35:08 1789-08-10 14:20:30
+2 2014-07-26 09:35:08 1789-08-10 14:20:30
+3 2118-11-02 09:35:08 1789-08-10 14:20:30
+SELECT id, DATE(datim) FROM t1 LIMIT 1;
+id DATE(datim)
+1 1789-08-10
+SELECT id, DAYNAME(dat) FROM t1;
+id DAYNAME(dat)
+1 Thursday
+2 Saturday
+3 Wednesday
+SELECT id, DAYNAME(datim) FROM t1 LIMIT 1;
+id DAYNAME(datim)
+1 Monday
+SELECT id, TIME(tim) FROM t1 LIMIT 1;
+id TIME(tim)
+1 09:35:08.000000
+DROP TABLE t1;
diff --git a/storage/connect/mysql-test/connect/r/mrr.result b/storage/connect/mysql-test/connect/r/mrr.result
new file mode 100644
index 00000000000..0d31daa736c
--- /dev/null
+++ b/storage/connect/mysql-test/connect/r/mrr.result
@@ -0,0 +1,117 @@
+#
+# Show MRR setting. The way it is done is because the t3 table cannot be directly based on
+# the information_schema.session_variables table. Not being a CONNECT table, it would be
+# read using an intermediate MYSQL table using the MySQL API and could not reflect the
+# current session variable change (the call would create another session) This would be
+# correct only for querying GLOBAL variables but is not what we want to do here.
+#
+CREATE TABLE t2 (
+name VARCHAR(64) NOT NULL,
+value VARCHAR(1024) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DOS;
+Warnings:
+Warning 1105 No file name. Table will use t2.dos
+INSERT INTO t2 SELECT * FROM information_schema.session_variables WHERE variable_name = 'OPTIMIZER_SWITCH';
+create table t3 (
+name CHAR(32) NOT NULL,
+value CHAR(64) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=t2 OPTION_LIST='Colname=value';
+SELECT value FROM t3 WHERE value LIKE 'mrr%';
+value
+mrr=off
+mrr_cost_based=off
+mrr_sort_keys=off
+#
+# Testing indexing with MRR OFF
+#
+CREATE TABLE t1
+(
+matricule INT(4) KEY NOT NULL field_format='Z',
+nom VARCHAR(16) NOT NULL,
+prenom VARCHAR(20) NOT NULL,
+sexe SMALLINT(1) NOT NULL COMMENT 'sexe 1:M 2:F',
+aanais INT(4) NOT NULL,
+mmnais INT(2) NOT NULL,
+ddentree DATE NOT NULL date_format='YYYYMM',
+ddnom DATE NOT NULL date_format='YYYYMM',
+brut INT(5) NOT NULL,
+net DOUBLE(8,2) NOT NULL,
+service INT(2) NOT NULL,
+sitmat CHAR(1) NOT NULL,
+formation CHAR(5) NOT NULL,
+INDEX NP(nom,prenom)
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='emp.txt' ENDING=2;
+SELECT * FROM t1 LIMIT 10;
+matricule nom prenom sexe aanais mmnais ddentree ddnom brut net service sitmat formation
+5745 ESCOURCHE BENEDICTE 2 1935 7 1962-12-01 1994-05-01 18345 14275.50 0 M TECHN
+9692 VICENTE LAURENCE 2 1941 8 1967-10-01 1989-01-01 16212 13032.80 0 M ANGL
+9146 NICOLAS ROGER 1 1941 6 1964-07-01 1995-02-01 34173 25098.65 0 M SANS
+2985 TESSEREAU MARIE HELENE 2 1941 9 1967-01-01 1990-01-01 19323 14933.78 0 V SANS
+3368 MOGADOR ALAIN 1 1941 1 1961-09-01 1993-11-01 43303 31420.55 0 C SANS
+7394 CHAUSSEE ERIC DENIS 1 1944 9 1965-11-01 1983-12-01 32002 23583.86 0 M ANGL
+4655 MAILLOT GEORGES 1 1945 5 1970-09-01 1986-12-01 24700 18541.64 0 C ANGL
+2825 CAMILLE NADINE 2 1956 9 1994-01-01 1993-01-01 19494 15050.45 0 M SANS
+1460 BRUYERES JEAN MARC 1 1958 8 1984-08-01 1988-05-01 20902 15980.07 0 M SANS
+4974 LONES GERARD 1 1959 10 1979-01-01 1994-12-01 16081 12916.70 0 M SANS
+# Without MRR, the rows are retrieved sorted by name
+SELECT matricule, nom, prenom, sitmat, net FROM t1 WHERE nom IN ('ETANG','FOCH','CERF','ITALIE','ROI');
+matricule nom prenom sitmat net
+5324 CERF CLAUDE M 9503.34
+7703 CERF NICOLE M 12025.61
+3110 CERF VALERIE M 10472.37
+4454 ETANG BEATRICE M 11017.61
+1022 ETANG GERARD L 8729.58
+8222 ETANG LIONEL M 13497.90
+2492 ETANG PASCAL VINCENT M 11986.62
+1977 FOCH BERNADETTE . 8145.03
+5707 FOCH DENIS C 7679.36
+2552 FOCH FRANCK M 10745.81
+2634 FOCH JOCELYNE M 10473.09
+5765 FOCH ROBERT M 12916.32
+4080 FOCH SERGE M 9658.24
+5898 ITALIE DENIS M 9502.41
+7606 ITALIE JACQUES C 7679.45
+1067 ITALIE SVETLANA M 11713.61
+5853 ROI CHANTAL . 8147.06
+2995 ROI JEAN M 11715.50
+2531 ROI MICHEL L 10240.44
+5846 ROI PATRICIA M 15669.57
+#
+# Testing indexing with MRR ON
+#
+SET @@LOCAL.OPTIMIZER_SWITCH='mrr=on';
+# Refresh the t2 table to reflect the change
+UPDATE t2, information_schema.session_variables SET value = variable_value WHERE variable_name = 'OPTIMIZER_SWITCH';
+# Check that MRR is ON for the session
+SELECT value FROM t3 WHERE value LIKE 'mrr%';
+value
+mrr=on
+mrr_cost_based=off
+mrr_sort_keys=off
+# With MRR, the rows are retrieved sorted by their position in the table
+SELECT matricule, nom, prenom, sitmat, net FROM t1 WHERE nom IN ('ETANG','FOCH','CERF','ITALIE','ROI');
+matricule nom prenom sitmat net
+1977 FOCH BERNADETTE . 8145.03
+2995 ROI JEAN M 11715.50
+3110 CERF VALERIE M 10472.37
+5324 CERF CLAUDE M 9503.34
+4080 FOCH SERGE M 9658.24
+4454 ETANG BEATRICE M 11017.61
+5898 ITALIE DENIS M 9502.41
+2552 FOCH FRANCK M 10745.81
+2531 ROI MICHEL L 10240.44
+5853 ROI CHANTAL . 8147.06
+8222 ETANG LIONEL M 13497.90
+5707 FOCH DENIS C 7679.36
+1067 ITALIE SVETLANA M 11713.61
+7606 ITALIE JACQUES C 7679.45
+7703 CERF NICOLE M 12025.61
+2634 FOCH JOCELYNE M 10473.09
+1022 ETANG GERARD L 8729.58
+5846 ROI PATRICIA M 15669.57
+2492 ETANG PASCAL VINCENT M 11986.62
+5765 FOCH ROBERT M 12916.32
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+SET @@LOCAL.OPTIMIZER_SWITCH='mrr=off';
diff --git a/storage/connect/mysql-test/connect/r/updelx2.result b/storage/connect/mysql-test/connect/r/updelx2.result
new file mode 100644
index 00000000000..1ed3709f0ba
--- /dev/null
+++ b/storage/connect/mysql-test/connect/r/updelx2.result
@@ -0,0 +1,133 @@
+#
+# Testing multiple indexed UPDATE and DELETE
+#
+CREATE TABLE t1 (
+id INT(4) NOT NULL,
+msg VARCHAR(16) NOT NULL,
+INDEX IDM(id,msg))
+ENGINE=CONNECT TABLE_TYPE=DOS;
+Warnings:
+Warning 1105 No file name. Table will use t1.dos
+INSERT INTO t1 VALUES(1,'one'),(4, 'four'),(7,'seven'),(8,'eight'),(10,'ten'),(11,'eleven'),(40,'forty'),(35,'thirty five'),(60,'sixty'),(72,'seventy two'),(81,'eighty one');
+INSERT INTO t1 VALUES(1,'un'),(4, 'quatre'),(7,'sept'),(8,'huit'),(10,'dix'),(11,'onze'),(40,'quarante'),(35,'trente cinq'),(60,'soixante'),(72,'soixante douze'),(81,'quatrevingt un');
+SELECT * FROM t1 IGNORE INDEX (IDM);
+id msg
+1 one
+4 four
+7 seven
+8 eight
+10 ten
+11 eleven
+40 forty
+35 thirty five
+60 sixty
+72 seventy two
+81 eighty one
+1 un
+4 quatre
+7 sept
+8 huit
+10 dix
+11 onze
+40 quarante
+35 trente cinq
+60 soixante
+72 soixante douze
+81 quatrevingt un
+UPDATE t1 SET msg = 'dieci' WHERE id = 10;
+SELECT * FROM t1 IGNORE INDEX (IDM);
+id msg
+1 one
+4 four
+7 seven
+8 eight
+10 dieci
+11 eleven
+40 forty
+35 thirty five
+60 sixty
+72 seventy two
+81 eighty one
+1 un
+4 quatre
+7 sept
+8 huit
+10 dieci
+11 onze
+40 quarante
+35 trente cinq
+60 soixante
+72 soixante douze
+81 quatrevingt un
+UPDATE t1 SET msg = 'septante deux' WHERE id = 72;
+SELECT * FROM t1 IGNORE INDEX (IDM);
+id msg
+1 one
+4 four
+7 seven
+8 eight
+10 dieci
+11 eleven
+40 forty
+35 thirty five
+60 sixty
+72 septante deux
+81 eighty one
+1 un
+4 quatre
+7 sept
+8 huit
+10 dieci
+11 onze
+40 quarante
+35 trente cinq
+60 soixante
+72 septante deux
+81 quatrevingt un
+UPDATE t1 SET id=2, msg='deux' WHERE id=4 AND msg='quatre';
+SELECT * FROM t1 IGNORE INDEX (IDM);
+id msg
+1 one
+4 four
+7 seven
+8 eight
+10 dieci
+11 eleven
+40 forty
+35 thirty five
+60 sixty
+72 septante deux
+81 eighty one
+1 un
+2 deux
+7 sept
+8 huit
+10 dieci
+11 onze
+40 quarante
+35 trente cinq
+60 soixante
+72 septante deux
+81 quatrevingt un
+DELETE FROM t1 WHERE id IN (8,40);
+SELECT * FROM t1 IGNORE INDEX (IDM);
+id msg
+1 one
+4 four
+7 seven
+10 dieci
+11 eleven
+35 thirty five
+60 sixty
+72 septante deux
+81 eighty one
+1 un
+2 deux
+7 sept
+10 dieci
+11 onze
+35 trente cinq
+60 soixante
+72 septante deux
+81 quatrevingt un
+DROP TABLE t1;
diff --git a/storage/connect/mysql-test/connect/r/xcol.result b/storage/connect/mysql-test/connect/r/xcol.result
index f6899b47504..94d1e0619cb 100644
--- a/storage/connect/mysql-test/connect/r/xcol.result
+++ b/storage/connect/mysql-test/connect/r/xcol.result
@@ -1,5 +1,5 @@
#
-# Checking XCOL tables
+# Make the children list table
#
CREATE TABLE chlist (
mother char(12) NOT NULL COMMENT 'The mother of the listed children',
@@ -20,7 +20,10 @@ Lisbeth Lucy,Charles,Diana
Corinne NULL
Claude Marc
Janet Arthur,Sandra,Peter,John
-CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children,port=PORT';
+#
+# Checking XCOL tables
+#
+CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children';
SELECT * FROM child;
mother children
Sophia Vivian
@@ -81,5 +84,34 @@ Corinne 0
Janet 4
Lisbeth 3
Sophia 2
+#
+# Test using special columns
+#
+CREATE TABLE `child2` (
+`row` int NOT NULL SPECIAL=ROWID,
+`num` int NOT NULL SPECIAL=ROWNUM,
+`mother` varchar(12) NOT NULL COMMENT 'The mother of the children',
+`child` varchar(12) NOT NULL COMMENT 'The child name' FLAG=2
+) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist `OPTION_LIST`='colname=child';
+SELECT * FROM child2;
+row num mother child
+1 1 Sophia Vivian
+2 2 Sophia Antony
+3 1 Lisbeth Lucy
+4 2 Lisbeth Charles
+5 3 Lisbeth Diana
+7 1 Claude Marc
+8 1 Janet Arthur
+9 2 Janet Sandra
+10 3 Janet Peter
+11 4 Janet John
+# List only first child
+SELECT mother, child FROM child2 where num = 1;
+mother child
+Sophia Vivian
+Lisbeth Lucy
+Claude Marc
+Janet Arthur
DROP TABLE child;
DROP TABLE chlist;
+DROP TABLE child2;
diff --git a/storage/connect/mysql-test/connect/t/datest.test b/storage/connect/mysql-test/connect/t/datest.test
new file mode 100644
index 00000000000..a986ce15a80
--- /dev/null
+++ b/storage/connect/mysql-test/connect/t/datest.test
@@ -0,0 +1,16 @@
+--echo #
+--echo # Testing out of range dates as (var)char
+--echo #
+CREATE TABLE t1 (
+id INT NOT NULL,
+dat CHAR(10) NOT NULL,
+tim CHAR(8) DEFAULT '09:35:08',
+datim CHAR(19) DEFAULT '1789-08-10 14:20:30')
+ENGINE=CONNECT TABLE_TYPE=FIX;
+INSERT INTO t1(id,dat) VALUES(1,'1515-04-01'),(2,'2014-07-26'),(3,'2118-11-02');
+SELECT * FROM t1;
+SELECT id, DATE(datim) FROM t1 LIMIT 1;
+SELECT id, DAYNAME(dat) FROM t1;
+SELECT id, DAYNAME(datim) FROM t1 LIMIT 1;
+SELECT id, TIME(tim) FROM t1 LIMIT 1;
+DROP TABLE t1;
diff --git a/storage/connect/mysql-test/connect/t/mrr.test b/storage/connect/mysql-test/connect/t/mrr.test
new file mode 100644
index 00000000000..37289ad427f
--- /dev/null
+++ b/storage/connect/mysql-test/connect/t/mrr.test
@@ -0,0 +1,66 @@
+let $MYSQLD_DATADIR= `select @@datadir`;
+--copy_file $MTR_SUITE_DIR/std_data/emp.txt $MYSQLD_DATADIR/test/emp.txt
+
+--echo #
+--echo # Show MRR setting. The way it is done is because the t3 table cannot be directly based on
+--echo # the information_schema.session_variables table. Not being a CONNECT table, it would be
+--echo # read using an intermediate MYSQL table using the MySQL API and could not reflect the
+--echo # current session variable change (the call would create another session) This would be
+--echo # correct only for querying GLOBAL variables but is not what we want to do here.
+--echo #
+CREATE TABLE t2 (
+name VARCHAR(64) NOT NULL,
+value VARCHAR(1024) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DOS;
+INSERT INTO t2 SELECT * FROM information_schema.session_variables WHERE variable_name = 'OPTIMIZER_SWITCH';
+# Check that MRR is OFF by default
+create table t3 (
+name CHAR(32) NOT NULL,
+value CHAR(64) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=t2 OPTION_LIST='Colname=value';
+SELECT value FROM t3 WHERE value LIKE 'mrr%';
+
+--echo #
+--echo # Testing indexing with MRR OFF
+--echo #
+CREATE TABLE t1
+(
+ matricule INT(4) KEY NOT NULL field_format='Z',
+ nom VARCHAR(16) NOT NULL,
+ prenom VARCHAR(20) NOT NULL,
+ sexe SMALLINT(1) NOT NULL COMMENT 'sexe 1:M 2:F',
+ aanais INT(4) NOT NULL,
+ mmnais INT(2) NOT NULL,
+ ddentree DATE NOT NULL date_format='YYYYMM',
+ ddnom DATE NOT NULL date_format='YYYYMM',
+ brut INT(5) NOT NULL,
+ net DOUBLE(8,2) NOT NULL,
+ service INT(2) NOT NULL,
+ sitmat CHAR(1) NOT NULL,
+ formation CHAR(5) NOT NULL,
+ INDEX NP(nom,prenom)
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='emp.txt' ENDING=2;
+SELECT * FROM t1 LIMIT 10;
+--echo # Without MRR, the rows are retrieved sorted by name
+SELECT matricule, nom, prenom, sitmat, net FROM t1 WHERE nom IN ('ETANG','FOCH','CERF','ITALIE','ROI');
+
+--echo #
+--echo # Testing indexing with MRR ON
+--echo #
+SET @@LOCAL.OPTIMIZER_SWITCH='mrr=on';
+--echo # Refresh the t2 table to reflect the change
+UPDATE t2, information_schema.session_variables SET value = variable_value WHERE variable_name = 'OPTIMIZER_SWITCH';
+--echo # Check that MRR is ON for the session
+SELECT value FROM t3 WHERE value LIKE 'mrr%';
+--echo # With MRR, the rows are retrieved sorted by their position in the table
+SELECT matricule, nom, prenom, sitmat, net FROM t1 WHERE nom IN ('ETANG','FOCH','CERF','ITALIE','ROI');
+
+DROP TABLE t1;
+DROP TABLE t2;
+DROP TABLE t3;
+
+#
+# Clean up
+#
+SET @@LOCAL.OPTIMIZER_SWITCH='mrr=off';
+--remove_file $MYSQLD_DATADIR/test/emp.txt
diff --git a/storage/connect/mysql-test/connect/t/updelx2.test b/storage/connect/mysql-test/connect/t/updelx2.test
new file mode 100644
index 00000000000..bf5434636ee
--- /dev/null
+++ b/storage/connect/mysql-test/connect/t/updelx2.test
@@ -0,0 +1,22 @@
+-- source include/not_embedded.inc
+
+--echo #
+--echo # Testing multiple indexed UPDATE and DELETE
+--echo #
+CREATE TABLE t1 (
+id INT(4) NOT NULL,
+msg VARCHAR(16) NOT NULL,
+INDEX IDM(id,msg))
+ENGINE=CONNECT TABLE_TYPE=DOS;
+INSERT INTO t1 VALUES(1,'one'),(4, 'four'),(7,'seven'),(8,'eight'),(10,'ten'),(11,'eleven'),(40,'forty'),(35,'thirty five'),(60,'sixty'),(72,'seventy two'),(81,'eighty one');
+INSERT INTO t1 VALUES(1,'un'),(4, 'quatre'),(7,'sept'),(8,'huit'),(10,'dix'),(11,'onze'),(40,'quarante'),(35,'trente cinq'),(60,'soixante'),(72,'soixante douze'),(81,'quatrevingt un');
+SELECT * FROM t1 IGNORE INDEX (IDM);
+UPDATE t1 SET msg = 'dieci' WHERE id = 10;
+SELECT * FROM t1 IGNORE INDEX (IDM);
+UPDATE t1 SET msg = 'septante deux' WHERE id = 72;
+SELECT * FROM t1 IGNORE INDEX (IDM);
+UPDATE t1 SET id=2, msg='deux' WHERE id=4 AND msg='quatre';
+SELECT * FROM t1 IGNORE INDEX (IDM);
+DELETE FROM t1 WHERE id IN (8,40);
+SELECT * FROM t1 IGNORE INDEX (IDM);
+DROP TABLE t1;
diff --git a/storage/connect/mysql-test/connect/t/xcol.test b/storage/connect/mysql-test/connect/t/xcol.test
index b6998ee77e0..8f0edc2b268 100644
--- a/storage/connect/mysql-test/connect/t/xcol.test
+++ b/storage/connect/mysql-test/connect/t/xcol.test
@@ -1,8 +1,5 @@
-let $MYSQLD_DATADIR= `select @@datadir`;
-let $PORT= `select @@port`;
-
--echo #
---echo # Checking XCOL tables
+--echo # Make the children list table
--echo #
CREATE TABLE chlist (
mother char(12) NOT NULL COMMENT 'The mother of the listed children',
@@ -15,8 +12,10 @@ INSERT INTO chlist VALUES('Claude','Marc');
INSERT INTO chlist VALUES('Janet','Arthur,Sandra,Peter,John');
SELECT * FROM chlist;
---replace_result $PORT PORT
---eval CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children,port=$PORT'
+--echo #
+--echo # Checking XCOL tables
+--echo #
+CREATE TABLE child ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist OPTION_LIST='colname=children';
SELECT * FROM child;
SELECT * FROM child ORDER BY mother;
SELECT * FROM child ORDER BY children;
@@ -24,5 +23,19 @@ SELECT mother FROM child;
SELECT mother, COUNT(*) FROM child GROUP BY mother;
SELECT mother, COUNT(children) FROM child GROUP BY mother;
+--echo #
+--echo # Test using special columns
+--echo #
+CREATE TABLE `child2` (
+ `row` int NOT NULL SPECIAL=ROWID,
+ `num` int NOT NULL SPECIAL=ROWNUM,
+ `mother` varchar(12) NOT NULL COMMENT 'The mother of the children',
+ `child` varchar(12) NOT NULL COMMENT 'The child name' FLAG=2
+) ENGINE=CONNECT TABLE_TYPE=XCOL TABNAME=chlist `OPTION_LIST`='colname=child';
+SELECT * FROM child2;
+--echo # List only first child
+SELECT mother, child FROM child2 where num = 1;
+
DROP TABLE child;
DROP TABLE chlist;
+DROP TABLE child2;
diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp
index 679e8dc703c..bef735b4a6d 100644
--- a/storage/connect/odbconn.cpp
+++ b/storage/connect/odbconn.cpp
@@ -1,7 +1,7 @@
/************ Odbconn C++ Functions Source Code File (.CPP) ************/
-/* Name: ODBCONN.CPP Version 1.9 */
+/* Name: ODBCONN.CPP Version 2.0 */
/* */
-/* (C) Copyright to the author Olivier BERTRAND 1998-2013 */
+/* (C) Copyright to the author Olivier BERTRAND 1998-2014 */
/* */
/* This file contains the ODBC connection classes functions. */
/***********************************************************************/
@@ -64,8 +64,6 @@ extern "C" HINSTANCE s_hModule; // Saved module handle
#define DEBUG_ONLY(f) ((void)0)
#endif // !_DEBUG
-extern "C" int trace;
-
/***********************************************************************/
/* GetSQLType: returns the SQL_TYPE corresponding to a PLG type. */
/***********************************************************************/
@@ -832,7 +830,7 @@ DBX::DBX(RETCODE rc, PSZ msg)
/***********************************************************************/
/* This function is called by ThrowDBX. */
/***********************************************************************/
-void DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
+bool DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
{
if (pdb) {
SWORD len;
@@ -845,7 +843,9 @@ void DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
rc = SQLError(pdb->m_henv, pdb->m_hdbc, hstmt, state,
&native, msg, SQL_MAX_MESSAGE_LENGTH - 1, &len);
- if (rc != SQL_INVALID_HANDLE) {
+ if (rc == SQL_NO_DATA_FOUND)
+ return false;
+ else if (rc != SQL_INVALID_HANDLE) {
// Skip non-errors
for (int i = 0; i < MAX_NUM_OF_MSG
&& (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
@@ -861,7 +861,7 @@ void DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
} // endfor i
- return;
+ return true;
} else {
snprintf((char*)msg, SQL_MAX_MESSAGE_LENGTH + 1, "%s: %s", m_Msg,
MSG(BAD_HANDLE_VAL));
@@ -871,7 +871,7 @@ void DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
if (trace)
htrc("%s: rc=%hd\n", SVP(m_ErrMsg[0]), m_RC);
- return;
+ return true;
} // endif rc
} else
@@ -880,6 +880,7 @@ void DBX::BuildErrorMessage(ODBConn* pdb, HSTMT hstmt)
if (trace)
htrc("%s: rc=%hd (%s)\n", SVP(m_Msg), m_RC, SVP(m_ErrMsg[0]));
+ return true;
} // end of BuildErrorMessage
const char *DBX::GetErrorMessage(int i)
@@ -912,6 +913,7 @@ ODBConn::ODBConn(PGLOBAL g, TDBODBC *tdbp)
m_Connect = NULL;
m_Updatable = true;
m_Transact = false;
+ m_Scrollable = (tdbp) ? tdbp->Scrollable : false;
m_IDQuoteChar[0] = '"';
m_IDQuoteChar[1] = 0;
//*m_ErrMsg = '\0';
@@ -934,9 +936,10 @@ bool ODBConn::Check(RETCODE rc)
if (trace) {
DBX x(rc);
- x.BuildErrorMessage(this, m_hstmt);
- htrc("ODBC Success With Info, hstmt=%p %s\n",
- m_hstmt, x.GetErrorMessage(0));
+ if (x.BuildErrorMessage(this, m_hstmt))
+ htrc("ODBC Success With Info, hstmt=%p %s\n",
+ m_hstmt, x.GetErrorMessage(0));
+
} // endif trace
// Fall through
@@ -955,8 +958,10 @@ void ODBConn::ThrowDBX(RETCODE rc, PSZ msg, HSTMT hstmt)
{
DBX* xp = new(m_G) DBX(rc, msg);
- xp->BuildErrorMessage(this, hstmt);
- throw xp;
+ // Don't throw if no error
+ if (xp->BuildErrorMessage(this, hstmt))
+ throw xp;
+
} // end of ThrowDBX
void ODBConn::ThrowDBX(PSZ msg)
@@ -1300,25 +1305,28 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols)
b = false;
if (m_hstmt) {
-// All this did not seems to make sense and was been commented out
-// if (IsOpen())
-// Close(SQL_CLOSE);
-
+ // This is a Requery
rc = SQLFreeStmt(m_hstmt, SQL_CLOSE);
- if (trace && !Check(rc))
- htrc("Error: SQLFreeStmt rc=%d\n", rc);
+ if (!Check(rc))
+ ThrowDBX(rc, "SQLFreeStmt");
- hstmt = m_hstmt;
m_hstmt = NULL;
- ThrowDBX(MSG(SEQUENCE_ERROR));
- } else {
- rc = SQLAllocStmt(m_hdbc, &hstmt);
+ } // endif m_hstmt
+
+ rc = SQLAllocStmt(m_hdbc, &hstmt);
+
+ if (!Check(rc))
+ ThrowDBX(rc, "SQLAllocStmt");
+
+ if (m_Scrollable) {
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_SCROLLABLE,
+ (void*)SQL_SCROLLABLE, 0);
if (!Check(rc))
- ThrowDBX(SQL_INVALID_HANDLE, "SQLAllocStmt");
+ ThrowDBX(rc, "SQLSetStmtAttr");
- } // endif hstmt
+ } // endif m_Scrollable
OnSetOptions(hstmt);
b = true;
@@ -2335,6 +2343,34 @@ int ODBConn::GetCatInfo(CATPARM *cap)
} // end of GetCatInfo
/***********************************************************************/
+/* Restart from beginning of result set */
+/***********************************************************************/
+bool ODBConn::Rewind(char *sql, ODBCCOL *tocols)
+ {
+ RETCODE rc;
+
+ if (!m_hstmt)
+ return false;
+
+ if (m_Scrollable) {
+ try {
+ rc = SQLFetchScroll(m_hstmt, SQL_FETCH_ABSOLUTE, 0);
+
+ if (rc != SQL_NO_DATA_FOUND)
+ ThrowDBX(rc, "SQLFetchScroll", m_hstmt);
+
+ } catch(DBX *x) {
+ strcpy(m_G->Message, x->GetErrorMessage(0));
+ return true;
+ } // end try/catch
+
+ } else if (ExecDirectSQL(sql, tocols) < 0)
+ return true;
+
+ return false;
+ } // end of Rewind
+
+/***********************************************************************/
/* Disconnect connection */
/***********************************************************************/
void ODBConn::Close()
diff --git a/storage/connect/odbconn.h b/storage/connect/odbconn.h
index 90d116cb1ad..1dd2aa2c16e 100644
--- a/storage/connect/odbconn.h
+++ b/storage/connect/odbconn.h
@@ -95,7 +95,7 @@ class DBX : public BLOCK {
const char *GetErrorMessage(int i);
protected:
- void BuildErrorMessage(ODBConn* pdb, HSTMT hstmt = SQL_NULL_HSTMT);
+ bool BuildErrorMessage(ODBConn* pdb, HSTMT hstmt = SQL_NULL_HSTMT);
// Attributes
RETCODE m_RC;
@@ -124,6 +124,7 @@ class ODBConn : public BLOCK {
forceOdbcDialog = 0x0010}; // Always display ODBC connect dialog
int Open(PSZ ConnectString, DWORD Options = 0);
+ bool Rewind(char *sql, ODBCCOL *tocols);
void Close(void);
// Attributes
@@ -190,4 +191,5 @@ class ODBConn : public BLOCK {
PSZ m_Connect;
bool m_Updatable;
bool m_Transact;
+ bool m_Scrollable;
}; // end of ODBConn class definition
diff --git a/storage/connect/os.h b/storage/connect/os.h
index 8e94f4241bb..8f77a0ad39f 100644
--- a/storage/connect/os.h
+++ b/storage/connect/os.h
@@ -53,12 +53,12 @@ typedef int HANDLE;
#ifdef PATH_MAX
#define _MAX_PATH PATH_MAX
#else
-#define _MAX_PATH 260
+#define _MAX_PATH FN_REFLEN
#endif
#define _MAX_DRIVE 3
-#define _MAX_DIR 256
-#define _MAX_FNAME 256
-#define _MAX_EXT 256
+#define _MAX_DIR FN_REFLEN
+#define _MAX_FNAME FN_HEADLEN
+#define _MAX_EXT FN_EXTLEN
#define INVALID_HANDLE_VALUE (-1)
#define __stdcall
#endif /* !WIN32 */
diff --git a/storage/connect/plgdbsem.h b/storage/connect/plgdbsem.h
index 7d5931285ce..bbbbc1486b6 100644
--- a/storage/connect/plgdbsem.h
+++ b/storage/connect/plgdbsem.h
@@ -72,10 +72,11 @@ enum TABTYPE {TAB_UNDEF = 0, /* Table of undefined type */
TAB_OCCUR = 18, /* OCCUR table */
TAB_PRX = 19, /* Proxy (catalog) table */
TAB_PLG = 20, /* PLG NIY */
- TAB_PIVOT = 21, /* PIVOT NIY */
- TAB_JCT = 22, /* Junction tables NIY */
- TAB_DMY = 23, /* DMY Dummy tables NIY */
- TAB_NIY = 24}; /* Table not implemented yet */
+ TAB_PIVOT = 21, /* PIVOT table */
+ TAB_VIR = 22, /* Virtual tables */
+ TAB_JCT = 23, /* Junction tables NIY */
+ TAB_DMY = 24, /* DMY Dummy tables NIY */
+ TAB_NIY = 25}; /* Table not implemented yet */
enum AMT {TYPE_AM_ERROR = 0, /* Type not defined */
TYPE_AM_ROWID = 1, /* ROWID type (special column) */
@@ -127,6 +128,7 @@ enum AMT {TYPE_AM_ERROR = 0, /* Type not defined */
TYPE_AM_TFC = 155, /* TFC (Circa) (Fuzzy compare) */
TYPE_AM_DBF = 160, /* DBF Dbase files am type no */
TYPE_AM_JCT = 170, /* Junction tables am type no */
+ TYPE_AM_VIR = 171, /* Virtual tables am type no */
TYPE_AM_DMY = 172, /* DMY Dummy tables am type no */
TYPE_AM_SET = 180, /* SET Set tables am type no */
TYPE_AM_MYSQL = 192, /* MYSQL access method type no */
@@ -582,7 +584,7 @@ DllExport void *PlgDBSubAlloc(PGLOBAL g, void *memp, size_t size);
DllExport void *PlgDBalloc(PGLOBAL, void *, MBLOCK&);
DllExport void *PlgDBrealloc(PGLOBAL, void *, MBLOCK&, size_t);
DllExport void NewPointer(PTABS, void *, void *);
-DllExport char *GetIni(int n= 0);
+//lExport char *GetIni(int n= 0); // Not used anymore
DllExport void SetTrc(void);
DllExport char *GetListOption(PGLOBAL, const char *, const char *,
const char *def=NULL);
diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp
index c5b66e8f5e6..d8009bcc71f 100644
--- a/storage/connect/plgdbutl.cpp
+++ b/storage/connect/plgdbutl.cpp
@@ -87,10 +87,6 @@ bool Initdone = false;
bool plugin = false; // True when called by the XDB plugin handler
extern "C" {
-#if defined(XMSG)
- char msglang[16] = "ENGLISH"; // Default language
-#endif
-extern int trace;
extern char version[];
} // extern "C"
@@ -117,11 +113,17 @@ void CloseXMLFile(PGLOBAL, PFBLOCK, bool);
/***********************************************************************/
/* Routines for file IO with error reporting to g->Message */
+/* Note: errno and strerror must be called before the message file */
+/* is read in the case of XMSG compile. */
/***********************************************************************/
-static void
-global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
+static void global_open_error_msg(GLOBAL *g, int msgid, const char *path,
+ const char *mode)
{
- int len;
+ int len, rno= (int)errno;
+ char errmsg[256]= "";
+
+ strncat(errmsg, strerror(errno), 255);
+
switch (msgid)
{
case MSGID_CANNOT_OPEN:
@@ -133,19 +135,21 @@ global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
case MSGID_OPEN_MODE_ERROR:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_MODE_ERROR), // "Open(%s) error %d on %s"
- mode, (int) errno, path);
+ mode, rno, path);
break;
case MSGID_OPEN_MODE_STRERROR:
+ {char fmt[256];
+ strcat(strcpy(fmt, MSG(OPEN_MODE_ERROR)), ": %s");
len= snprintf(g->Message, sizeof(g->Message) - 1,
- MSG(OPEN_MODE_ERROR) ": %s", // Open(%s) error %d on %s: %s
- mode, (int) errno, path, strerror(errno));
- break;
+ fmt, // Open(%s) error %d on %s: %s
+ mode, rno, path, errmsg);
+ }break;
case MSGID_OPEN_STRERROR:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_STRERROR), // "open error: %s"
- strerror(errno));
+ errmsg);
break;
case MSGID_OPEN_ERROR_AND_STRERROR:
@@ -153,13 +157,13 @@ global_open_error_msg(GLOBAL *g, int msgid, const char *path, const char *mode)
//OPEN_ERROR does not work, as it wants mode %d (not %s)
//MSG(OPEN_ERROR) "%s",// "Open error %d in mode %d on %s: %s"
"Open error %d in mode %s on %s: %s",
- errno, mode, path, strerror(errno));
+ rno, mode, path, errmsg);
break;
case MSGID_OPEN_EMPTY_FILE:
len= snprintf(g->Message, sizeof(g->Message) - 1,
MSG(OPEN_EMPTY_FILE), // "Opening empty file %s: %s"
- path, strerror(errno));
+ path, errmsg);
break;
default:
@@ -287,12 +291,9 @@ PQRYRES PlgAllocResult(PGLOBAL g, int ncol, int maxres, int ids,
// Get header from message file
strncpy(cname, PlugReadMessage(g, ids + crp->Ncol, NULL), NAM_LEN);
cname[NAM_LEN] = 0; // for truncated long names
-//#elif defined(WIN32)
- // Get header from ressource file
-// LoadString(s_hModule, ids + crp->Ncol, cname, sizeof(cname));
-#else // !WIN32
+#else // !XMSG
GetRcString(ids + crp->Ncol, cname, sizeof(cname));
-#endif // !WIN32
+#endif // !XMSG
crp->Name = (PSZ)PlugSubAlloc(g, NULL, strlen(cname) + 1);
strcpy(crp->Name, cname);
} else
@@ -730,6 +731,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6])
char *fmt, c, d, e, W[8][12];
int i, k, m, numval;
int n, y = 30;
+ bool b = true; // true for null dates
if (pdp)
fmt = pdp->InFmt;
@@ -763,7 +765,8 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6])
m = pdp->Num;
for (i = 0; i < m; i++) {
- n = *(int*)W[i];
+ if ((n = *(int*)W[i]))
+ b = false;
switch (k = pdp->Index[i]) {
case 0:
@@ -822,7 +825,7 @@ int ExtractDate(char *dts, PDTP pdp, int defy, int val[6])
htrc("numval=%d val=(%d,%d,%d,%d,%d,%d)\n",
numval, val[0], val[1], val[2], val[3], val[4], val[5]);
- return numval;
+ return (b) ? 0 : numval;
} // end of ExtractDate
/***********************************************************************/
@@ -982,7 +985,7 @@ void PlugCleanup(PGLOBAL g, bool dofree)
/* This is the place to reset the pointer on domains. */
/*******************************************************************/
dbuserp->Subcor = false;
- dbuserp->Step = STEP(PARSING_QUERY);
+ dbuserp->Step = "New query"; // was STEP(PARSING_QUERY);
dbuserp->ProgMax = dbuserp->ProgCur = dbuserp->ProgSav = 0;
} // endif dofree
diff --git a/storage/connect/plugutil.c b/storage/connect/plugutil.c
index c3b77544983..c77975e5e30 100644
--- a/storage/connect/plugutil.c
+++ b/storage/connect/plugutil.c
@@ -2,7 +2,7 @@
/* */
/* PROGRAM NAME: PLUGUTIL */
/* ------------- */
-/* Version 2.8 */
+/* Version 2.9 */
/* */
/* COPYRIGHT: */
/* ---------- */
@@ -76,15 +76,17 @@
#include "osutil.h"
#include "global.h"
+#if defined(NEWMSG)
+#include "rcmsg.h"
+#endif // NEWMSG
#if defined(WIN32)
extern HINSTANCE s_hModule; /* Saved module handle */
#endif // WIN32
-extern int trace;
-
#if defined(XMSG)
-extern char msglang[];
+extern char *msg_path;
+char *msglang(void);
#endif // XMSG
/***********************************************************************/
@@ -157,7 +159,9 @@ PGLOBAL PlugInit(LPCSTR Language, uint worksize)
char errmsg[256];
sprintf(errmsg, MSG(WORK_AREA), g->Message);
strcpy(g->Message, errmsg);
- } /* endif Sarea */
+ g->Sarea_Size = 0;
+ } else
+ g->Sarea_Size = worksize;
} /* endif g */
@@ -232,7 +236,7 @@ BOOL PlugIsAbsolutePath(LPCSTR path)
LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
{
char newname[_MAX_PATH];
- char direc[_MAX_DIR], defdir[_MAX_DIR];
+ char direc[_MAX_DIR], defdir[_MAX_DIR], tmpdir[_MAX_DIR];
char fname[_MAX_FNAME];
char ftype[_MAX_EXT];
#if !defined(UNIX) && !defined(UNIV_LINUX)
@@ -265,7 +269,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
} // endif FileName
#endif // !WIN32
- if (strcmp(prefix, ".") && !PlugIsAbsolutePath(defpath))
+ if (prefix && strcmp(prefix, ".") && !PlugIsAbsolutePath(defpath))
{
char tmp[_MAX_PATH];
int len= snprintf(tmp, sizeof(tmp) - 1, "%s%s%s",
@@ -276,7 +280,19 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
}
_splitpath(FileName, drive, direc, fname, ftype);
- _splitpath(defpath, defdrv, defdir, NULL, NULL);
+
+ if (defpath) {
+ char c = defpath[strlen(defpath) - 1];
+
+ strcpy(tmpdir, defpath);
+
+ if (c != '/' && c != '\\')
+ strcat(tmpdir, "/");
+
+ } else
+ strcpy(tmpdir, "./");
+
+ _splitpath(tmpdir, defdrv, defdir, NULL, NULL);
if (trace > 1) {
htrc("after _splitpath: FileName=%s\n", FileName);
@@ -328,11 +344,14 @@ char *PlugReadMessage(PGLOBAL g, int mid, char *m)
char *msg;
FILE *mfile = NULL;
- GetPrivateProfileString("Message", msglang, "Message\\english.msg",
- msgfile, _MAX_PATH, plgini);
+//GetPrivateProfileString("Message", msglang, "Message\\english.msg",
+// msgfile, _MAX_PATH, plgini);
+//strcat(strcat(strcpy(msgfile, msg_path), msglang()), ".msg");
+ strcat(strcpy(buff, msglang()), ".msg");
+ PlugSetPath(msgfile, NULL, buff, msg_path);
if (!(mfile = fopen(msgfile, "rt"))) {
- sprintf(stmsg, "Fail to open message file %s for %s", msgfile, msglang);
+ sprintf(stmsg, "Fail to open message file %s", msgfile);
goto err;
} // endif mfile
@@ -382,7 +401,7 @@ char *PlugGetMessage(PGLOBAL g, int mid)
{
char *msg;
-#if !defined(UNIX) && !defined(UNIV_LINUX)
+#if 0 // was !defined(UNIX) && !defined(UNIV_LINUX)
int n = LoadString(s_hModule, (uint)mid, (LPTSTR)stmsg, 200);
if (n == 0) {
@@ -395,10 +414,10 @@ char *PlugGetMessage(PGLOBAL g, int mid)
return msg;
} // endif n
-#else // UNIX
+#else // ALL
if (!GetRcString(mid, stmsg, 200))
sprintf(stmsg, "Message %d not found", mid);
-#endif // UNIX
+#endif // ALL
if (g) {
// Called by STEP
diff --git a/storage/connect/rcmsg.c b/storage/connect/rcmsg.c
index bac420e696f..abd74d169cc 100644
--- a/storage/connect/rcmsg.c
+++ b/storage/connect/rcmsg.c
@@ -1,225 +1,65 @@
-/**************** RCMsg C Program Source Code File (.C) ****************/
-/* PROGRAM NAME: RCMSG */
-/* ------------- */
-/* Version 1.1 */
-/* */
-/* COPYRIGHT */
-/* ---------- */
-/* (C) Copyright to the author Olivier BERTRAND: 2005 - 2013 */
-/* */
-/* WHAT THIS PROGRAM DOES */
-/* ----------------------- */
-/* This program simulates LoadString for Unix and Linux. */
-/* */
-/***********************************************************************/
-#include <stdio.h>
-#include "resource.h"
-#include "rcmsg.h"
-
-char *GetMsgid(int id)
- {
- char *p = NULL;
-
- switch (id) {
- case IDS_00: p = "%s"; break;
-#if defined(FRENCH)
- case IDS_01: p = "%s: erreur d'allocation du buffer de communication de %d octets"; break;
- case IDS_02: p = "%s: erreur d'allocation mémoire tampon pour %d colonnes"; break;
- case IDS_03: p = "%s: Commande spéciale invalide"; break;
- case IDS_04: p = "%s: Wrong number of arguments %d"; break;
- case IDS_05: p = "%s"; break;
- case IDS_06: p = "%s: Commande dépassant la taille du buffer interne (%d octets)"; break;
- case IDS_07: p = "%s: Données (%d octets) tronquées à la taille du buffer"; break;
- case IDS_08: p = "%s: Résultat dépassant la taille du buffer interne (%d octets)"; break;
- case IDS_09: p = "Erreur dans %s: %s"; break;
- case IDS_10: p = "%s: erreur d'allocating mémoire de %d octets"; break;
- case IDS_11: p = "%s: mauvaise clé de connexion %d"; break;
- case IDS_12: p = "%s: Pas plus de %d connexions autorisées pour un programme"; break;
- case IDS_13: p = "%s: clé de connexion invalide %d"; break;
- case IDS_14: p = "SafeDB: %s rc=%d"; break;
- case IDS_15: p = "Mauvaise Dll de communication appelée par le moteur %s"; break;
- case IDS_TAB_01: p = "Catalogue"; break;
- case IDS_TAB_02: p = "Schéma"; break;
- case IDS_TAB_03: p = "Nom"; break;
- case IDS_TAB_04: p = "Type"; break;
- case IDS_TAB_05: p = "Remarque"; break;
- case IDS_COL_01: p = "Cat_Table"; break;
- case IDS_COL_02: p = "Schem_Table"; break;
- case IDS_COL_03: p = "Nom_Table"; break;
- case IDS_COL_04: p = "Nom_Colonne"; break;
- case IDS_COL_05: p = "Type_Données"; break;
- case IDS_COL_06: p = "Nom_Type"; break;
- case IDS_COL_07: p = "Précision"; break;
- case IDS_COL_08: p = "Longueur"; break;
- case IDS_COL_09: p = "Echelle"; break;
- case IDS_COL_10: p = "Base"; break;
- case IDS_COL_11: p = "Nullifiable"; break;
- case IDS_COL_12: p = "Remarques"; break;
- case IDS_INF_01: p = "Nom_Type"; break;
- case IDS_INF_02: p = "Type_Données"; break;
- case IDS_INF_03: p = "Précision"; break;
- case IDS_INF_04: p = "Préfixe_Litéral"; break;
- case IDS_INF_05: p = "Suffixe_Litéral"; break;
- case IDS_INF_06: p = "Création_Params"; break;
- case IDS_INF_07: p = "Nullifiable"; break;
- case IDS_INF_08: p = "Maj_Minuscule"; break;
- case IDS_INF_09: p = "Localisable"; break;
- case IDS_INF_10: p = "Valeur_Absolue"; break;
- case IDS_INF_11: p = "Monnaie"; break;
- case IDS_INF_12: p = "Auto_Incrément"; break;
- case IDS_INF_13: p = "Nom_Type_Local"; break;
- case IDS_INF_14: p = "Echelle_Minimum"; break;
- case IDS_INF_15: p = "Echelle_Maximum"; break;
- case IDS_PKY_01: p = "Cat_Table"; break;
- case IDS_PKY_02: p = "Schem_Table"; break;
- case IDS_PKY_03: p = "Nom_Table"; break;
- case IDS_PKY_04: p = "Nom_Colonne"; break;
- case IDS_PKY_05: p = "Numéro_Clé"; break;
- case IDS_PKY_06: p = "Nom_Clé"; break;
- case IDS_FKY_01: p = "PKTable_Catalog"; break;
- case IDS_FKY_02: p = "PKTable_Schema"; break;
- case IDS_FKY_03: p = "PKTable_Name"; break;
- case IDS_FKY_04: p = "PKColumn_Name"; break;
- case IDS_FKY_05: p = "FKTable_Catalog"; break;
- case IDS_FKY_06: p = "FKTable_Schema"; break;
- case IDS_FKY_07: p = "FKTable_Name"; break;
- case IDS_FKY_08: p = "FKColumn_Name"; break;
- case IDS_FKY_09: p = "Key_Seq"; break;
- case IDS_FKY_10: p = "Update_Rule"; break;
- case IDS_FKY_11: p = "Delete_Rule"; break;
- case IDS_FKY_12: p = "FK_Name"; break;
- case IDS_FKY_13: p = "PK_Name"; break;
- case IDS_STA_01: p = "Table_Catalog"; break;
- case IDS_STA_02: p = "Table_Schema"; break;
- case IDS_STA_03: p = "Table_Name"; break;
- case IDS_STA_04: p = "Non_Unique"; break;
- case IDS_STA_05: p = "Index_Qualifier"; break;
- case IDS_STA_06: p = "Index_Name"; break;
- case IDS_STA_07: p = "Type"; break;
- case IDS_STA_08: p = "Seq_in_Index"; break;
- case IDS_STA_09: p = "Column_Name"; break;
- case IDS_STA_10: p = "Collation"; break;
- case IDS_STA_11: p = "Cardinality"; break;
- case IDS_STA_12: p = "Pages"; break;
- case IDS_STA_13: p = "Filter_Condition"; break;
- case IDS_SPC_01: p = "Champ"; break;
- case IDS_SPC_02: p = "Nom_Colonne"; break;
- case IDS_SPC_03: p = "Type_Données"; break;
- case IDS_SPC_04: p = "Nom_Type"; break;
- case IDS_SPC_05: p = "Précision"; break;
- case IDS_SPC_06: p = "Longueur"; break;
- case IDS_SPC_07: p = "Echelle"; break;
- case IDS_SPC_08: p = "Pseudo_Colonne"; break;
- case IDS_DRV_01: p = "Description"; break;
- case IDS_DRV_02: p = "Attributs"; break;
- case IDS_DSC_01: p = "Nom"; break;
- case IDS_DSC_02: p = "Description"; break;
-#else // English
- case IDS_01: p = "%s: error allocating communication buffer of %d bytes"; break;
- case IDS_02: p = "%s: error allocating parser memory for %d columns"; break;
- case IDS_03: p = "%s: Invalid special command"; break;
- case IDS_04: p = "%s: Wrong number of arguments %d"; break;
- case IDS_05: p = "%s"; break;
- case IDS_06: p = "%s: Command bigger than internal buffer of size = %d"; break;
- case IDS_07: p = "%s: Data truncated to buffer size, actual length is %d bytes"; break;
- case IDS_08: p = "%s: Result bigger than internal buffer of size = %d"; break;
- case IDS_09: p = "Error in %s: %s"; break;
- case IDS_10: p = "%s: error allocating instance memory of %d bytes"; break;
- case IDS_11: p = "%s: wrong connection key value %d"; break;
- case IDS_12: p = "%s: No more than %d connections allowed from one process"; break;
- case IDS_13: p = "%s: invalid connection key value %d"; break;
- case IDS_14: p = "SafeDB: %s rc=%d"; break;
- case IDS_15: p = "Wrong communication Dll called for engine %s"; break;
- case IDS_TAB_01: p = "Table_Cat"; break;
- case IDS_TAB_02: p = "Table_Schema"; break;
- case IDS_TAB_03: p = "Table_Name"; break;
- case IDS_TAB_04: p = "Table_Type"; break;
- case IDS_TAB_05: p = "Remark"; break;
- case IDS_COL_01: p = "Table_Cat"; break;
- case IDS_COL_02: p = "Table_Schema"; break;
- case IDS_COL_03: p = "Table_Name"; break;
- case IDS_COL_04: p = "Column_Name"; break;
- case IDS_COL_05: p = "Data_Type"; break;
- case IDS_COL_06: p = "Type_Name"; break;
- case IDS_COL_07: p = "Column_Size"; break;
- case IDS_COL_08: p = "Buffer_Length"; break;
- case IDS_COL_09: p = "Decimal_Digits"; break;
- case IDS_COL_10: p = "Radix"; break;
- case IDS_COL_11: p = "Nullable"; break;
- case IDS_COL_12: p = "Remarks"; break;
- case IDS_INF_01: p = "Type_Name"; break;
- case IDS_INF_02: p = "Data_Type"; break;
- case IDS_INF_03: p = "Precision"; break;
- case IDS_INF_04: p = "Literal_Prefix"; break;
- case IDS_INF_05: p = "Literal_Suffix"; break;
- case IDS_INF_06: p = "Create_Params"; break;
- case IDS_INF_07: p = "Nullable"; break;
- case IDS_INF_08: p = "Case_Sensitive"; break;
- case IDS_INF_09: p = "Searchable"; break;
- case IDS_INF_10: p = "Unsigned_Attribute"; break;
- case IDS_INF_11: p = "Money"; break;
- case IDS_INF_12: p = "Auto_Increment"; break;
- case IDS_INF_13: p = "Local_Type_Name"; break;
- case IDS_INF_14: p = "Minimum_Scale"; break;
- case IDS_INF_15: p = "Maximum_Scale"; break;
- case IDS_PKY_01: p = "Table_Catalog"; break;
- case IDS_PKY_02: p = "Table_Schema"; break;
- case IDS_PKY_03: p = "Table_Name"; break;
- case IDS_PKY_04: p = "Column_Name"; break;
- case IDS_PKY_05: p = "Key_Seq"; break;
- case IDS_PKY_06: p = "Pk_Name"; break;
- case IDS_FKY_01: p = "PKTable_Catalog"; break;
- case IDS_FKY_02: p = "PKTable_Schema"; break;
- case IDS_FKY_03: p = "PKTable_Name"; break;
- case IDS_FKY_04: p = "PKColumn_Name"; break;
- case IDS_FKY_05: p = "FKTable_Catalog"; break;
- case IDS_FKY_06: p = "FKTable_Schema"; break;
- case IDS_FKY_07: p = "FKTable_Name"; break;
- case IDS_FKY_08: p = "FKColumn_Name"; break;
- case IDS_FKY_09: p = "Key_Seq"; break;
- case IDS_FKY_10: p = "Update_Rule"; break;
- case IDS_FKY_11: p = "Delete_Rule"; break;
- case IDS_FKY_12: p = "FK_Name"; break;
- case IDS_FKY_13: p = "PK_Name"; break;
- case IDS_STA_01: p = "Table_Catalog"; break;
- case IDS_STA_02: p = "Table_Schema"; break;
- case IDS_STA_03: p = "Table_Name"; break;
- case IDS_STA_04: p = "Non_Unique"; break;
- case IDS_STA_05: p = "Index_Qualifier"; break;
- case IDS_STA_06: p = "Index_Name"; break;
- case IDS_STA_07: p = "Type"; break;
- case IDS_STA_08: p = "Seq_in_Index"; break;
- case IDS_STA_09: p = "Column_Name"; break;
- case IDS_STA_10: p = "Collation"; break;
- case IDS_STA_11: p = "Cardinality"; break;
- case IDS_STA_12: p = "Pages"; break;
- case IDS_STA_13: p = "Filter_Condition"; break;
- case IDS_SPC_01: p = "Scope"; break;
- case IDS_SPC_02: p = "Column_Name"; break;
- case IDS_SPC_03: p = "Data_Type"; break;
- case IDS_SPC_04: p = "Type_Name"; break;
- case IDS_SPC_05: p = "Precision"; break;
- case IDS_SPC_06: p = "Length"; break;
- case IDS_SPC_07: p = "Scale"; break;
- case IDS_SPC_08: p = "Pseudo_Column"; break;
- case IDS_DRV_01: p = "Description"; break;
- case IDS_DRV_02: p = "Attributes"; break;
- case IDS_DSC_01: p = "Name"; break;
- case IDS_DSC_02: p = "Description"; break;
-#endif // English
- } // endswitch(id)
-
- return p;
- } // end of GetMsgid
-
-int GetRcString(int id, char *buf, int bufsize)
- {
- char *p = NULL, msg[32];
-
- if (!(p = GetMsgid(id))) {
- sprintf(msg, "ID=%d unknown", id);
- p = msg;
- } // endif p
-
- return sprintf(buf, "%.*s", bufsize-1, p);
- } // end of GetRcString
+/**************** RCMsg C Program Source Code File (.C) ****************/
+/* PROGRAM NAME: RCMSG */
+/* ------------- */
+/* Version 1.3 */
+/* */
+/* COPYRIGHT */
+/* ---------- */
+/* (C) Copyright to the author Olivier BERTRAND: 2005 - 2014 */
+/* */
+/* WHAT THIS PROGRAM DOES */
+/* ----------------------- */
+/* This program simulates LoadString. */
+/* */
+/***********************************************************************/
+#if !defined(XMSG)
+#include <stdio.h>
+#include <string.h>
+#include "resource.h"
+#include "rcmsg.h"
+#if defined(NEWMSG)
+#include "msgid.h"
+#endif // NEWMSG
+
+#if !defined(WIN32)
+#define stricmp strcasecmp
+#endif // !WIN32
+
+char *msglang(void);
+
+char *GetMsgid(int id)
+ {
+ char *p = NULL;
+
+ if (!stricmp(msglang(), "french"))
+ switch (id) {
+#include "frids.h"
+#if defined(NEWMSG)
+#include "frcas.h"
+#endif // NEWMSG
+ } // endswitch(id)
+
+ else // English
+ switch (id) {
+#include "enids.h"
+#if defined(NEWMSG)
+#include "encas.h"
+#endif // NEWMSG
+ } // endswitch(id)
+
+ return p;
+ } // end of GetMsgid
+
+int GetRcString(int id, char *buf, int bufsize)
+ {
+ char *p = NULL, msg[32];
+
+ if (!(p = GetMsgid(id))) {
+ sprintf(msg, "ID=%d unknown", id);
+ p = msg;
+ } // endif p
+
+ return sprintf(buf, "%.*s", bufsize-1, p);
+ } // end of GetRcString
+
+#endif // !XMSG
diff --git a/storage/connect/reldef.cpp b/storage/connect/reldef.cpp
index 22076b78086..e469ae40f1f 100644
--- a/storage/connect/reldef.cpp
+++ b/storage/connect/reldef.cpp
@@ -49,8 +49,14 @@
#include "tabmul.h"
#include "ha_connect.h"
-extern "C" int trace;
-extern "C" USETEMP Use_Temp;
+#if !defined(WIN32)
+extern handlerton *connect_hton;
+#endif // !WIN32
+
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+USETEMP UseTemp(void);
/* --------------------------- Class RELDEF -------------------------- */
@@ -455,6 +461,22 @@ PTABDEF OEMDEF::GetXdef(PGLOBAL g)
} // endif getdef
#else // !WIN32
const char *error = NULL;
+ Dl_info dl_info;
+
+ // The OEM lib must retrieve exported CONNECT variables
+ if (dladdr(&connect_hton, &dl_info)) {
+ if (dlopen(dl_info.dli_fname, RTLD_NOLOAD | RTLD_NOW | RTLD_GLOBAL) == 0) {
+ error = dlerror();
+ sprintf(g->Message, "dlopen failed: %s, OEM not supported", SVP(error));
+ return NULL;
+ } // endif dlopen
+
+ } else {
+ error = dlerror();
+ sprintf(g->Message, "dladdr failed: %s, OEM not supported", SVP(error));
+ return NULL;
+ } // endif dladdr
+
// Is the library already loaded?
// if (!Hdll && !(Hdll = ???))
// Load the desired shared library
@@ -571,7 +593,7 @@ PTDB OEMDEF::GetTable(PGLOBAL g, MODE mode)
PTXF txfp = NULL;
PDOSDEF defp = (PDOSDEF)Pxdef;
bool map = defp->Mapped && mode != MODE_INSERT &&
- !(Use_Temp == TMP_FORCE &&
+ !(UseTemp() == TMP_FORCE &&
(mode == MODE_UPDATE || mode == MODE_DELETE));
int cmpr = defp->Compressed;
diff --git a/storage/connect/resource.h b/storage/connect/resource.h
index 773942cf280..1c3e1ee3727 100644
--- a/storage/connect/resource.h
+++ b/storage/connect/resource.h
@@ -1,139 +1,46 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by PlgSock.rc
-//
-#define IDS_00 115
-#define IDS_01 116
-#define IDS_02 117
-#define IDS_03 118
-#define IDS_04 119
-#define IDS_05 120
-#define IDS_06 121
-#define IDS_07 122
-#define IDS_08 123
-#define IDS_09 124
-#define IDS_10 125
-#define IDS_11 126
-#define IDS_12 127
-#define IDS_13 128
-#define IDS_14 129
-#define IDS_15 130
-#define IDS_16 131
-#define IDS_17 132
-#define IDS_18 133
-#define IDS_19 134
-#define IDS_20 135
-#define IDS_21 136
-#define IDS_TABLES 143
-#define IDS_TAB_01 144
-#define IDS_TAB_02 145
-#define IDS_TAB_03 146
-#define IDS_TAB_04 147
-#define IDS_TAB_05 148
-#define IDS_COLUMNS 159
-#define IDS_COL_01 160
-#define IDS_COL_02 161
-#define IDS_COL_03 162
-#define IDS_COL_04 163
-#define IDS_COL_05 164
-#define IDS_COL_06 165
-#define IDS_COL_07 166
-#define IDS_COL_08 167
-#define IDS_COL_09 168
-#define IDS_COL_10 169
-#define IDS_COL_11 170
-#define IDS_COL_12 171
-#define IDS_INFO 175
-#define IDS_INF_01 176
-#define IDS_INF_02 177
-#define IDS_INF_03 178
-#define IDS_INF_04 179
-#define IDS_INF_05 180
-#define IDS_INF_06 181
-#define IDS_INF_07 182
-#define IDS_INF_08 183
-#define IDS_INF_09 184
-#define IDS_INF_10 185
-#define IDS_INF_11 186
-#define IDS_INF_12 187
-#define IDS_INF_13 188
-#define IDS_INF_14 189
-#define IDS_INF_15 190
-#define IDS_PKEY 191
-#define IDS_PKY_01 192
-#define IDS_PKY_02 193
-#define IDS_PKY_03 194
-#define IDS_PKY_04 195
-#define IDS_PKY_05 196
-#define IDS_PKY_06 197
-#define IDS_FKEY 207
-#define IDS_FKY_01 208
-#define IDS_FKY_02 209
-#define IDS_FKY_03 210
-#define IDS_FKY_04 211
-#define IDS_FKY_05 212
-#define IDS_FKY_06 213
-#define IDS_FKY_07 214
-#define IDS_FKY_08 215
-#define IDS_FKY_09 216
-#define IDS_FKY_10 217
-#define IDS_FKY_11 218
-#define IDS_FKY_12 219
-#define IDS_FKY_13 220
-#define IDS_STAT 223
-#define IDS_STA_01 224
-#define IDS_STA_02 225
-#define IDS_STA_03 226
-#define IDS_STA_04 227
-#define IDS_STA_05 228
-#define IDS_STA_06 229
-#define IDS_STA_07 230
-#define IDS_STA_08 231
-#define IDS_STA_09 232
-#define IDS_STA_10 233
-#define IDS_STA_11 234
-#define IDS_STA_12 235
-#define IDS_STA_13 236
-#define IDS_SPCOLS 1247
-#define IDS_SPC_01 1248
-#define IDS_SPC_02 1249
-#define IDS_SPC_03 1250
-#define IDS_SPC_04 1251
-#define IDS_SPC_05 1252
-#define IDS_SPC_06 1253
-#define IDS_SPC_07 1254
-#define IDS_SPC_08 1255
-#define IDS_CNX 1263
-#define IDS_CNX_01 1264
-#define IDS_CNX_02 1265
-#define IDS_CNX_03 1266
-#define IDS_CNX_04 1267
-#define IDS_PLGCOL 1279
-#define IDS_PLG_01 1280
-#define IDS_PLG_02 1281
-#define IDS_PLG_03 1282
-#define IDS_PLG_04 1283
-#define IDS_PLG_05 1284
-#define IDS_PLG_06 1285
-#define IDS_PLG_07 1286
-#define IDS_PLG_08 1287
-#define IDS_PLG_09 1288
-#define IDS_DRIVER 1290
-#define IDS_DRV_01 1291
-#define IDS_DRV_02 1292
-#define IDS_DSRC 1295
-#define IDS_DSC_01 1296
-#define IDS_DSC_02 1297
-//#define IDS_DSC_03 1298
-//#define IDS_DSC_04 1299
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 1300
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1440
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
+#define IDS_TABLES 100
+#define IDS_TAB_01 101
+#define IDS_TAB_02 102
+#define IDS_TAB_03 103
+#define IDS_TAB_04 104
+#define IDS_TAB_05 105
+#define IDS_COLUMNS 106
+#define IDS_COL_01 107
+#define IDS_COL_02 108
+#define IDS_COL_03 109
+#define IDS_COL_04 110
+#define IDS_COL_05 111
+#define IDS_COL_06 112
+#define IDS_COL_07 113
+#define IDS_COL_08 114
+#define IDS_COL_09 115
+#define IDS_COL_10 116
+#define IDS_COL_11 117
+#define IDS_COL_12 118
+#define IDS_PKEY 119
+#define IDS_PKY_01 120
+#define IDS_PKY_02 121
+#define IDS_PKY_03 122
+#define IDS_PKY_04 123
+#define IDS_PKY_05 124
+#define IDS_PKY_06 125
+#define IDS_STAT 126
+#define IDS_STA_01 127
+#define IDS_STA_02 128
+#define IDS_STA_03 129
+#define IDS_STA_04 130
+#define IDS_STA_05 131
+#define IDS_STA_06 132
+#define IDS_STA_07 133
+#define IDS_STA_08 134
+#define IDS_STA_09 135
+#define IDS_STA_10 136
+#define IDS_STA_11 137
+#define IDS_STA_12 138
+#define IDS_STA_13 139
+#define IDS_DRIVER 140
+#define IDS_DRV_01 141
+#define IDS_DRV_02 142
+#define IDS_DSRC 143
+#define IDS_DSC_01 144
+#define IDS_DSC_02 145
diff --git a/storage/connect/tabcol.cpp b/storage/connect/tabcol.cpp
index 96ec4f45861..8f350c6f074 100644
--- a/storage/connect/tabcol.cpp
+++ b/storage/connect/tabcol.cpp
@@ -22,8 +22,6 @@
#include "xtable.h"
#include "tabcol.h"
-extern "C" int trace;
-
/***********************************************************************/
/* XTAB public constructor. */
/***********************************************************************/
diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp
index c60c9b034f9..0ef9625ac9b 100644
--- a/storage/connect/tabdos.cpp
+++ b/storage/connect/tabdos.cpp
@@ -65,16 +65,18 @@
/***********************************************************************/
int num_read, num_there, num_eq[2]; // Statistics
-extern "C" int trace;
-extern "C" USETEMP Use_Temp;
-extern bool xinfo;
-
/***********************************************************************/
/* Size of optimize file header. */
/***********************************************************************/
#define NZ 4
/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+bool ExactInfo(void);
+USETEMP UseTemp(void);
+
+/***********************************************************************/
/* Min and Max blocks contains zero ended fields (blank = false). */
/* No conversion of block values (check = true). */
/***********************************************************************/
@@ -146,7 +148,7 @@ bool DOSDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
Eof = (GetIntCatInfo("EOF", 0) != 0);
} else if (Recfm == RECFM_DBF) {
Maxerr = GetIntCatInfo("Maxerr", 0);
- Accept = (GetIntCatInfo("Accept", 0) != 0);
+ Accept = GetBoolCatInfo("Accept", false);
ReadMode = GetIntCatInfo("Readmode", 0);
} else // (Recfm == RECFM_VAR)
AvgLen = GetIntCatInfo("Avglen", 0);
@@ -316,13 +318,13 @@ bool DOSDEF::InvalidateIndex(PGLOBAL g)
PTDB DOSDEF::GetTable(PGLOBAL g, MODE mode)
{
// Mapping not used for insert
- USETEMP tmp = Use_Temp;
+ USETEMP tmp = UseTemp();
bool map = Mapped && mode != MODE_INSERT &&
!(tmp != TMP_NO && Recfm == RECFM_VAR
&& mode == MODE_UPDATE) &&
!(tmp == TMP_FORCE &&
(mode == MODE_UPDATE || mode == MODE_DELETE));
- PTXF txfp;
+ PTXF txfp = NULL;
PTDBASE tdbp;
/*********************************************************************/
@@ -575,7 +577,6 @@ int TDBDOS::MakeBlockValues(PGLOBAL g)
{
int i, lg, nrec, rc, n = 0;
int curnum, curblk, block, savndv, savnbm;
- int last __attribute__((unused));
void *savmin, *savmax;
bool blocked, xdb2 = false;
//POOLHEADER save;
@@ -612,7 +613,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g)
// to Rows+1 by unblocked variable length table access methods.
curblk = -1;
curnum = nrec - 1;
- last = 0;
+//last = 0;
Txfp->Block = block; // This is useful mainly for
Txfp->CurBlk = curblk; // blocked tables (ZLBFAM), for
Txfp->CurNum = curnum; // others it is just to be clean.
@@ -743,7 +744,7 @@ int TDBDOS::MakeBlockValues(PGLOBAL g)
Txfp->BlkPos[curblk] = Txfp->GetPos();
} // endif CurNum
- last = curnum + 1; // curnum is zero based
+// last = curnum + 1; // curnum is zero based
Txfp->CurBlk = curblk; // Used in COLDOS::SetMinMax
Txfp->CurNum = curnum; // Used in COLDOS::SetMinMax
} // endif blocked
@@ -1353,7 +1354,6 @@ PBF TDBDOS::CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv)
//bool conv = false, xdb2 = false, ok = false, b[2];
//PXOB *xarg1, *xarg2 = NULL, xp[2];
int i, n = 0, type[2] = {0,0};
- int ctype __attribute__((unused));
bool conv = false, xdb2 = false, ok = false;
PXOB *xarg2 = NULL, xp[2];
PCOL colp;
@@ -1361,12 +1361,11 @@ PBF TDBDOS::CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv)
//SFROW *sfr[2];
PBF *fp = NULL, bfp = NULL;
- ctype= TYPE_ERROR;
for (i = 0; i < 2; i++) {
switch (arg[i]->GetType()) {
case TYPE_CONST:
type[i] = 1;
- ctype = arg[i]->GetResultType();
+ // ctype = arg[i]->GetResultType();
break;
case TYPE_COLBLK:
conv = cnv[i];
@@ -1391,7 +1390,7 @@ PBF TDBDOS::CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv)
// correlated subquery, it has a constant value during
// each execution of the subquery.
type[i] = 1;
- ctype = arg[i]->GetResultType();
+// ctype = arg[i]->GetResultType();
} // endif this
break;
@@ -1779,8 +1778,13 @@ bool TDBDOS::InitialyzeIndex(PGLOBAL g, PIXDEF xdp, bool sorted)
To_Link = (PXOB*)PlugSubAlloc(g, NULL, Knum * sizeof(PXOB));
for (k = 0, kdp = xdp->GetToKeyParts(); kdp; k++, kdp = kdp->GetNext()) {
- cdp = Key(k)->GetCdp();
- valp = AllocateValue(g, cdp->GetType(), cdp->GetLength());
+ if ((cdp = Key(k)->GetCdp()))
+ valp = AllocateValue(g, cdp->GetType(), cdp->GetLength());
+ else { // Special column ?
+ colp = Key(k);
+ valp = AllocateValue(g, colp->GetResultType(), colp->GetLength());
+ } // endif cdp
+
To_Link[k]= new(g) CONSTANT(valp);
} // endfor k
@@ -1908,7 +1912,7 @@ int TDBDOS::Cardinality(PGLOBAL g)
} // endif Mode
- if (Mode == MODE_ANY && xinfo) {
+ if (Mode == MODE_ANY && ExactInfo()) {
// Using index impossible or failed, do it the hard way
Mode = MODE_READ;
To_Line = (char*)PlugSubAlloc(g, NULL, Lrecl + 1);
@@ -2021,8 +2025,10 @@ int TDBDOS::EstimatedLength(PGLOBAL g)
/***********************************************************************/
bool TDBDOS::IsUsingTemp(PGLOBAL g)
{
- return (Use_Temp == TMP_YES || Use_Temp == TMP_FORCE ||
- (Use_Temp == TMP_AUTO && Mode == MODE_UPDATE));
+ USETEMP utp = UseTemp();
+
+ return (utp == TMP_YES || utp == TMP_FORCE ||
+ (utp == TMP_AUTO && Mode == MODE_UPDATE));
} // end of IsUsingTemp
/***********************************************************************/
@@ -2062,7 +2068,7 @@ bool TDBDOS::OpenDB(PGLOBAL g)
Txfp = new(g) DOSFAM((PDOSDEF)To_Def);
Txfp->SetTdbp(this);
} else if (Txfp->Blocked && (Mode == MODE_DELETE ||
- (Mode == MODE_UPDATE && Use_Temp != TMP_NO))) {
+ (Mode == MODE_UPDATE && UseTemp() != TMP_NO))) {
/*******************************************************************/
/* Delete is not currently handled in block mode neither Update */
/* when using a temporary file. */
diff --git a/storage/connect/tabdos.h b/storage/connect/tabdos.h
index 1c772e8bf23..156d46b9791 100644
--- a/storage/connect/tabdos.h
+++ b/storage/connect/tabdos.h
@@ -77,7 +77,7 @@ class DllExport DOSDEF : public TABDEF { /* Logical table description */
bool Mapped; /* 0: disk file, 1: memory mapped file */
bool Padded; /* true for padded table file */
bool Huge; /* true for files larger than 2GB */
- bool Accept; /* true if wrong lines are accepted (DBF)*/
+ bool Accept; /* true if wrong lines are accepted */
bool Eof; /* true if an EOF (0xA) character exists */
int *To_Pos; /* To array of block starting positions */
int Optimized; /* 0: No, 1:Yes, 2:Redo optimization */
diff --git a/storage/connect/tabfix.cpp b/storage/connect/tabfix.cpp
index 91f06536272..77e47e6f8dd 100644
--- a/storage/connect/tabfix.cpp
+++ b/storage/connect/tabfix.cpp
@@ -51,13 +51,15 @@
/***********************************************************************/
/* DB static variables. */
/***********************************************************************/
-extern "C" int trace;
-extern "C" USETEMP Use_Temp;
-
extern int num_read, num_there, num_eq[2]; // Statistics
static const longlong M2G = 0x80000000;
static const longlong M4G = (longlong)2 * M2G;
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+USETEMP UseTemp(void);
+
/* ------------------------------------------------------------------- */
/***********************************************************************/
@@ -273,9 +275,9 @@ bool TDBFIX::IsUsingTemp(PGLOBAL g)
{
// Not ready yet to handle using a temporary file with mapping
// or while deleting from DBF files.
- return ((Use_Temp == TMP_YES && Txfp->GetAmType() != TYPE_AM_MAP &&
+ return ((UseTemp() == TMP_YES && Txfp->GetAmType() != TYPE_AM_MAP &&
!(Mode == MODE_DELETE && Txfp->GetAmType() == TYPE_AM_DBF)) ||
- Use_Temp == TMP_FORCE || Use_Temp == TMP_TEST);
+ UseTemp() == TMP_FORCE || UseTemp() == TMP_TEST);
} // end of IsUsingTemp
/***********************************************************************/
@@ -307,7 +309,7 @@ bool TDBFIX::OpenDB(PGLOBAL g)
} // endif use
if (Mode == MODE_DELETE && Txfp->GetAmType() == TYPE_AM_MAP &&
- (!Next || Use_Temp == TMP_FORCE)) {
+ (!Next || UseTemp() == TMP_FORCE)) {
// Delete all lines or using temp. Not handled in MAP mode
Txfp = new(g) FIXFAM((PDOSDEF)To_Def);
Txfp->SetTdbp(this);
diff --git a/storage/connect/tabfmt.cpp b/storage/connect/tabfmt.cpp
index c1119c57065..d5f8dc50a89 100644
--- a/storage/connect/tabfmt.cpp
+++ b/storage/connect/tabfmt.cpp
@@ -66,8 +66,10 @@
#define MAXCOL 200 /* Default max column nb in result */
#define TYPE_UNKNOWN 10 /* Must be greater than other types */
-extern "C" int trace;
-extern "C" USETEMP Use_Temp;
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+USETEMP UseTemp(void);
/***********************************************************************/
/* CSVColumns: constructs the result blocks containing the description */
@@ -390,8 +392,8 @@ PQRYRES CSVColumns(PGLOBAL g, char *dp, const char *fn, char sep,
/***********************************************************************/
CSVDEF::CSVDEF(void)
{
- Fmtd = Accept = Header = false;
- Maxerr = 0;
+ Fmtd = Header = false;
+//Maxerr = 0;
Quoted = -1;
Sep = ',';
Qot = '\0';
@@ -428,9 +430,13 @@ bool CSVDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
Qot = '"';
Fmtd = (!Sep || (am && (*am == 'F' || *am == 'f')));
- Header = (GetIntCatInfo("Header", 0) != 0);
+ Header = GetBoolCatInfo("Header", false);
Maxerr = GetIntCatInfo("Maxerr", 0);
- Accept = (GetIntCatInfo("Accept", 0) != 0);
+ Accept = GetBoolCatInfo("Accept", false);
+
+ if (Accept && Maxerr == 0)
+ Maxerr = INT_MAX32; // Accept all bad lines
+
return false;
} // end of DefineAM
@@ -442,7 +448,7 @@ PTDB CSVDEF::GetTable(PGLOBAL g, MODE mode)
PTDBASE tdbp;
if (Catfunc != FNC_COL) {
- USETEMP tmp = Use_Temp;
+ USETEMP tmp = UseTemp();
bool map = Mapped && mode != MODE_INSERT &&
!(tmp != TMP_NO && mode == MODE_UPDATE) &&
!(tmp == TMP_FORCE &&
diff --git a/storage/connect/tabfmt.h b/storage/connect/tabfmt.h
index 1b39a47e7d9..8a1e1f17561 100644
--- a/storage/connect/tabfmt.h
+++ b/storage/connect/tabfmt.h
@@ -161,7 +161,7 @@ class TDBFMT : public TDBCSV {
protected:
virtual bool PrepareWriting(PGLOBAL g)
- {strcpy(g->Message, "FMT is read only"); return true;}
+ {sprintf(g->Message, MSG(TABLE_READ_ONLY), "FMT"); return true;}
// Members
PSZ *FldFormat; // Field read format
diff --git a/storage/connect/table.cpp b/storage/connect/table.cpp
index 5db50d44787..b093e2102c2 100644
--- a/storage/connect/table.cpp
+++ b/storage/connect/table.cpp
@@ -28,8 +28,6 @@
int TDB::Tnum = 0;
-extern "C" int trace; // The general trace value
-
/***********************************************************************/
/* Utility routines. */
/***********************************************************************/
@@ -193,6 +191,18 @@ PSZ TDBASE::GetPath(void)
} // end of GetPath
/***********************************************************************/
+/* Return true if name is a special column of this table. */
+/***********************************************************************/
+bool TDBASE::IsSpecial(PSZ name)
+ {
+ for (PCOLDEF cdp = To_Def->GetCols(); cdp; cdp = cdp->GetNext())
+ if (!stricmp(cdp->GetName(), name) && (cdp->Flags & U_SPECIAL))
+ return true; // Special column to ignore while inserting
+
+ return false; // Not found or not special or not inserting
+ } // end of IsSpecial
+
+/***********************************************************************/
/* Initialize TDBASE based column description block construction. */
/* name is used to call columns by name. */
/* num is used by TBL to construct columns by index number. */
diff --git a/storage/connect/tabmul.cpp b/storage/connect/tabmul.cpp
index 4b40e6c5509..415a1523d30 100755..100644
--- a/storage/connect/tabmul.cpp
+++ b/storage/connect/tabmul.cpp
@@ -68,8 +68,6 @@
#include "tabdos.h" // TDBDOS and DOSCOL class dcls
#include "tabmul.h" // TDBMUL and MULCOL classes dcls
-extern "C" int trace;
-
/* ------------------------- Class TDBMUL ---------------------------- */
/***********************************************************************/
@@ -199,7 +197,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
#else // !WIN32
struct stat fileinfo;
- char fn[PATH_MAX], direc[PATH_MAX], pattern[256], ftype[8];
+ char fn[FN_REFLEN], direc[FN_REFLEN], pattern[FN_HEADLEN], ftype[FN_EXTLEN];
DIR *dir;
struct dirent *entry;
diff --git a/storage/connect/tabmysql.cpp b/storage/connect/tabmysql.cpp
index 6acdcbb3a8e..3ec9a1feaee 100644
--- a/storage/connect/tabmysql.cpp
+++ b/storage/connect/tabmysql.cpp
@@ -67,13 +67,15 @@
void PrintResult(PGLOBAL, PSEM, PQRYRES);
#endif // _CONSOLE
-extern "C" int trace;
-extern bool xinfo;
-
// Used to check whether a MYSQL table is created on itself
bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, const char *host,
const char *db, char *tab, const char *src, int port);
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+bool ExactInfo(void);
+
/* -------------- Implementation of the MYSQLDEF class --------------- */
/***********************************************************************/
@@ -430,7 +432,6 @@ TDBMYSQL::TDBMYSQL(PMYDEF tdp) : TDBASE(tdp)
Bind = NULL;
Query = NULL;
- Qbuf = NULL;
Fetched = false;
m_Rc = RC_FX;
AftRows = 0;
@@ -454,7 +455,6 @@ TDBMYSQL::TDBMYSQL(PGLOBAL g, PTDBMY tdbp) : TDBASE(tdbp)
Delayed = tdbp->Delayed;
Bind = NULL;
Query = tdbp->Query;
- Qbuf = NULL;
Fetched = tdbp->Fetched;
m_Rc = tdbp->m_Rc;
AftRows = tdbp->AftRows;
@@ -495,9 +495,10 @@ PCOL TDBMYSQL::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n)
/***********************************************************************/
bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
{
- char *tk = "`";
+//char *tk = "`";
+ char tk = '`';
int len = 0, rank = 0;
- bool b = false;
+ bool b = false, oom = false;
PCOL colp;
//PDBUSER dup = PlgGetUser(g);
@@ -505,27 +506,24 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
return false; // already done
if (Srcdef) {
- Query = Srcdef;
+ Query = new(g)STRING(g, 0, Srcdef);
return false;
} // endif Srcdef
- //Find the address of the suballocated query
- Query = (char*)PlugSubAlloc(g, NULL, 0);
- strcpy(Query, "SELECT ");
+ // Allocate the string used to contain Query
+ Query = new(g) STRING(g, 1023, "SELECT ");
if (Columns) {
for (colp = Columns; colp; colp = colp->GetNext())
if (!colp->IsSpecial()) {
-// if (colp->IsSpecial()) {
-// strcpy(g->Message, MSG(NO_SPEC_COL));
-// return true;
-// } else {
if (b)
- strcat(Query, ", ");
+ oom |= Query->Append(", ");
else
b = true;
- strcat(strcat(strcat(Query, tk), colp->GetName()), tk);
+ oom |= Query->Append(tk);
+ oom |= Query->Append(colp->GetName());
+ oom |= Query->Append(tk);
((PMYCOL)colp)->Rank = rank++;
} // endif colp
@@ -534,27 +532,38 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
// Query count(*) from... for which we will count the rows from
// Query '*' from...
// (the use of a char constant minimize the result storage)
- strcat(Query, (Isview) ? "*" : "'*'");
+ if (Isview)
+ oom |= Query->Append('*');
+ else
+ oom |= Query->Append("'*'");
+
} // endif ncol
- strcat(strcat(strcat(strcat(Query, " FROM "), tk), Tabname), tk);
- len = strlen(Query);
+ oom |= Query->Append(" FROM ");
+ oom |= Query->Append(tk);
+ oom |= Query->Append(Tabname);
+ oom |= Query->Append(tk);
+ len = Query->GetLength();
if (To_CondFil) {
if (!mx) {
- strcat(strcat(Query, " WHERE "), To_CondFil->Body);
- len = strlen(Query) + 1;
+ oom |= Query->Append(" WHERE ");
+ oom |= Query->Append(To_CondFil->Body);
+ len = Query->GetLength() + 1;
} else
len += (strlen(To_CondFil->Body) + 256);
} else
len += (mx ? 256 : 1);
+ if (oom || Query->Resize(len)) {
+ strcpy(g->Message, "MakeSelect: Out of memory");
+ return true;
+ } // endif oom
+
if (trace)
- htrc("Query=%s\n", Query);
+ htrc("Query=%s\n", Query->GetStr());
- // Now we know how much to suballocate
- PlugSubAlloc(g, NULL, len);
return false;
} // end of MakeSelect
@@ -563,81 +572,82 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx)
/***********************************************************************/
bool TDBMYSQL::MakeInsert(PGLOBAL g)
{
- char *colist, *valist = NULL;
char *tk = "`";
- int len = 0, qlen = 0;
- bool b = false;
+ uint len = 0;
+ bool b = false, oom;
PCOL colp;
if (Query)
return false; // already done
- for (colp = Columns; colp; colp = colp->GetNext())
- if (!colp->IsSpecial()) {
-// if (colp->IsSpecial()) {
-// strcpy(g->Message, MSG(NO_SPEC_COL));
-// return true;
-// } else {
- len += (strlen(colp->GetName()) + 4);
- ((PMYCOL)colp)->Rank = Nparm++;
- } // endif colp
-
- colist = (char*)PlugSubAlloc(g, NULL, len);
- *colist = '\0';
-
if (Prep) {
-#if defined(MYSQL_PREPARED_STATEMENTS)
- valist = (char*)PlugSubAlloc(g, NULL, 2 * Nparm);
- *valist = '\0';
-#else // !MYSQL_PREPARED_STATEMENTS
+#if !defined(MYSQL_PREPARED_STATEMENTS)
strcpy(g->Message, "Prepared statements not used (not supported)");
PushWarning(g, this);
Prep = false;
#endif // !MYSQL_PREPARED_STATEMENTS
} // endif Prep
- for (colp = Columns; colp; colp = colp->GetNext()) {
- if (b) {
- strcat(colist, ", ");
- if (Prep) strcat(valist, ",");
- } else
- b = true;
-
- strcat(strcat(strcat(colist, tk), colp->GetName()), tk);
-
- // Parameter marker
- if (!Prep) {
- if (colp->GetResultType() == TYPE_DATE)
- qlen += 20;
- else
- qlen += colp->GetLength();
+ for (colp = Columns; colp; colp = colp->GetNext())
+ if (colp->IsSpecial()) {
+ strcpy(g->Message, MSG(NO_SPEC_COL));
+ return true;
+ } else {
+ len += (strlen(colp->GetName()) + 4);
- } else // Prep
- strcat(valist, "?");
+ // Parameter marker
+ if (!Prep) {
+ if (colp->GetResultType() == TYPE_DATE)
+ len += 20;
+ else
+ len += colp->GetLength();
+
+ } else
+ len += 2;
- } // endfor colp
+ ((PMYCOL)colp)->Rank = Nparm++;
+ } // endif colp
// Below 40 is enough to contain the fixed part of the query
- len = (strlen(Tabname) + strlen(colist)
- + ((Prep) ? strlen(valist) : 0) + 40);
- Query = (char*)PlugSubAlloc(g, NULL, len);
+ len += (strlen(Tabname) + 40);
+ Query = new(g) STRING(g, len);
if (Delayed)
- strcpy(Query, "INSERT DELAYED INTO ");
+ oom = Query->Set("INSERT DELAYED INTO ");
else
- strcpy(Query, "INSERT INTO ");
+ oom = Query->Set("INSERT INTO ");
- strcat(strcat(strcat(Query, tk), Tabname), tk);
- strcat(strcat(strcat(Query, " ("), colist), ") VALUES (");
+ oom |= Query->Append(tk);
+ oom |= Query->Append(Tabname);
+ oom |= Query->Append("` (");
- if (Prep)
- strcat(strcat(Query, valist), ")");
- else {
- qlen += (strlen(Query) + Nparm);
- Qbuf = (char *)PlugSubAlloc(g, NULL, qlen);
- } // endelse Prep
+ for (colp = Columns; colp; colp = colp->GetNext()) {
+ if (b)
+ oom |= Query->Append(", ");
+ else
+ b = true;
+
+ oom |= Query->Append(tk);
+ oom |= Query->Append(colp->GetName());
+ oom |= Query->Append(tk);
+ } // endfor colp
- return false;
+ oom |= Query->Append(") VALUES (");
+
+#if defined(MYSQL_PREPARED_STATEMENTS)
+ if (Prep) {
+ for (int i = 0; i < Nparm; i++)
+ oom |= Query->Append("?,");
+
+ Query->RepLast(')');
+ Query->Trim();
+ } // endif Prep
+#endif // MYSQL_PREPARED_STATEMENTS
+
+ if (oom)
+ strcpy(g->Message, "MakeInsert: Out of memory");
+
+ return oom;
} // end of MakeInsert
/***********************************************************************/
@@ -646,7 +656,7 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g)
/***********************************************************************/
int TDBMYSQL::MakeCommand(PGLOBAL g)
{
- Query = (char*)PlugSubAlloc(g, NULL, strlen(Qrystr) + 64);
+ Query = new(g) STRING(g, strlen(Qrystr) + 64);
if (Quoted > 0 || stricmp(Name, Tabname)) {
char *p, *qrystr, name[68];
@@ -665,16 +675,23 @@ int TDBMYSQL::MakeCommand(PGLOBAL g)
strlwr(strcpy(name, Name)); // Not a keyword
if ((p = strstr(qrystr, name))) {
- memcpy(Query, Qrystr, p - qrystr);
- Query[p - qrystr] = 0;
+ bool oom = Query->Set(Qrystr, p - qrystr);
- if (qtd && *(p-1) == ' ')
- strcat(strcat(strcat(Query, "`"), Tabname), "`");
- else
- strcat(Query, Tabname);
+ if (qtd && *(p-1) == ' ') {
+ oom |= Query->Append('`');
+ oom |= Query->Append(Tabname);
+ oom |= Query->Append('`');
+ } else
+ oom |= Query->Append(Tabname);
+
+ oom |= Query->Append(Qrystr + (p - qrystr) + strlen(name));
+
+ if (oom) {
+ strcpy(g->Message, "MakeCommand: Out of memory");
+ return RC_FX;
+ } else
+ strlwr(strcpy(qrystr, Query->GetStr()));
- strcat(Query, Qrystr + (p - qrystr) + strlen(name));
- strlwr(strcpy(qrystr, Query));
} else {
sprintf(g->Message, "Cannot use this %s command",
(Mode == MODE_UPDATE) ? "UPDATE" : "DELETE");
@@ -682,7 +699,7 @@ int TDBMYSQL::MakeCommand(PGLOBAL g)
} // endif p
} else
- strcpy(Query, Qrystr);
+ (void)Query->Set(Qrystr);
return RC_OK;
} // end of MakeCommand
@@ -755,7 +772,7 @@ int TDBMYSQL::Cardinality(PGLOBAL g)
if (!g)
return (Mode == MODE_ANY && !Srcdef) ? 1 : 0;
- if (Cardinal < 0 && Mode == MODE_ANY && !Srcdef && xinfo) {
+ if (Cardinal < 0 && Mode == MODE_ANY && !Srcdef && ExactInfo()) {
// Info command, we must return the exact table row number
char query[96];
MYSQLC myc;
@@ -802,7 +819,7 @@ int TDBMYSQL::GetMaxSize(PGLOBAL g)
/***********************************************************************/
int TDBMYSQL::RowNumber(PGLOBAL g, bool b)
{
- return N;
+ return N + 1;
} // end of RowNumber
/***********************************************************************/
@@ -842,6 +859,7 @@ bool TDBMYSQL::OpenDB(PGLOBAL g)
/* Table already open, just replace it at its beginning. */
/*******************************************************************/
Myc.Rewind();
+ N = -1;
return false;
} // endif use
@@ -871,7 +889,8 @@ bool TDBMYSQL::OpenDB(PGLOBAL g)
/*********************************************************************/
if (Mode == MODE_READ || Mode == MODE_READX) {
MakeSelect(g, Mode == MODE_READX);
- m_Rc = (Mode == MODE_READ) ? Myc.ExecSQL(g, Query) : RC_OK;
+ m_Rc = (Mode == MODE_READ)
+ ? Myc.ExecSQL(g, Query->GetStr()) : RC_OK;
#if 0
if (!Myc.m_Res || !Myc.m_Fields) {
@@ -888,12 +907,14 @@ bool TDBMYSQL::OpenDB(PGLOBAL g)
} else if (Mode == MODE_INSERT) {
if (Srcdef) {
strcpy(g->Message, "No insert into anonym views");
+ Myc.Close();
return true;
} // endif Srcdef
if (!MakeInsert(g)) {
#if defined(MYSQL_PREPARED_STATEMENTS)
- int n = (Prep) ? Myc.PrepareSQL(g, Query) : Nparm;
+ int n = (Prep)
+ ? Myc.PrepareSQL(g, Query->GetCharValue()) : Nparm;
if (Nparm != n) {
if (n >= 0) // Other errors return negative values
@@ -906,12 +927,12 @@ bool TDBMYSQL::OpenDB(PGLOBAL g)
} // endif MakeInsert
if (m_Rc != RC_FX) {
- int rc __attribute__((unused));
char cmd[64];
int w;
sprintf(cmd, "ALTER TABLE `%s` DISABLE KEYS", Tabname);
- rc = Myc.ExecSQL(g, cmd, &w); // may fail for some engines
+
+ m_Rc = Myc.ExecSQL(g, cmd, &w); // may fail for some engines
} // endif m_Rc
} else
@@ -1006,7 +1027,7 @@ int TDBMYSQL::SendCommand(PGLOBAL g)
{
int w;
- if (Myc.ExecSQLcmd(g, Query, &w) == RC_NF) {
+ if (Myc.ExecSQLcmd(g, Query->GetStr(), &w) == RC_NF) {
AftRows = Myc.m_Afrw;
sprintf(g->Message, "%s: %d affected rows", Tabname, AftRows);
PushWarning(g, this, 0); // 0 means a Note
@@ -1036,28 +1057,45 @@ int TDBMYSQL::SendCommand(PGLOBAL g)
/***********************************************************************/
bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const void *key, int len)
{
- int oldlen = strlen(Query);
+ bool oom;
+ int oldlen = Query->GetLength();
if (!key || op == OP_NEXT ||
Mode == MODE_UPDATE || Mode == MODE_DELETE)
return false;
else if (op == OP_FIRST) {
- if (To_CondFil)
- strcat(strcat(Query, " WHERE "), To_CondFil->Body);
+ if (To_CondFil) {
+ oom = Query->Append(" WHERE ");
+
+ if ((oom |= Query->Append(To_CondFil->Body))) {
+ strcpy(g->Message, "Readkey: Out of memory");
+ return true;
+ } // endif oom
+
+ } // endif To_Condfil
} else {
if (Myc.m_Res)
Myc.FreeResult();
- To_Def->GetHandler()->MakeKeyWhere(g, Query, op, "`", key, len);
+ To_Def->GetHandler()->MakeKeyWhere(g, Query->GetStr(),
+ op, "`", key, len);
+
+ if (To_CondFil) {
+ oom = Query->Append(" AND (");
+ oom |= Query->Append(To_CondFil->Body);
+
+ if ((oom |= Query->Append(')'))) {
+ strcpy(g->Message, "Readkey: Out of memory");
+ return true;
+ } // endif oom
- if (To_CondFil)
- strcat(strcat(strcat(Query, " AND ("), To_CondFil->Body), ")");
+ } // endif To_Condfil
} // endif's op
- m_Rc = Myc.ExecSQL(g, Query);
- Query[oldlen] = 0;
+ m_Rc = Myc.ExecSQL(g, Query->GetStr());
+ Query->Truncate(oldlen);
return (m_Rc == RC_FX) ? true : false;
} // end of ReadKey
@@ -1101,31 +1139,38 @@ int TDBMYSQL::WriteDB(PGLOBAL g)
// Statement was not prepared, we must construct and execute
// an insert query for each line to insert
int rc;
+ uint len = Query->GetLength();
char buf[64];
-
- strcpy(Qbuf, Query);
+ bool b, oom = false;
// Make the Insert command value list
for (PCOL colp = Columns; colp; colp = colp->GetNext()) {
if (!colp->GetValue()->IsNull()) {
- if (colp->GetResultType() == TYPE_STRING ||
- colp->GetResultType() == TYPE_DATE)
- strcat(Qbuf, "'");
-
- strcat(Qbuf, colp->GetValue()->GetCharString(buf));
-
- if (colp->GetResultType() == TYPE_STRING ||
- colp->GetResultType() == TYPE_DATE)
- strcat(Qbuf, "'");
-
+ if ((b = colp->GetResultType() == TYPE_STRING ||
+ colp->GetResultType() == TYPE_DATE))
+ oom |= Query->Append('\'');
+
+ oom |= Query->Append(colp->GetValue()->GetCharString(buf));
+
+ if (b)
+ oom |= Query->Append('\'');
+
} else
- strcat(Qbuf, "NULL");
-
- strcat(Qbuf, (colp->GetNext()) ? "," : ")");
+ oom |= Query->Append("NULL");
+
+ oom |= Query->Append(',');
} // endfor colp
- Myc.m_Rows = -1; // To execute the query
- rc = Myc.ExecSQL(g, Qbuf);
+ if (unlikely(oom)) {
+ strcpy(g->Message, "WriteDB: Out of memory");
+ rc = RC_FX;
+ } else {
+ Query->RepLast(')');
+ Myc.m_Rows = -1; // To execute the query
+ rc = Myc.ExecSQL(g, Query->GetStr());
+ Query->Truncate(len); // Restore query
+ } // endif oom
+
return (rc == RC_NF) ? RC_OK : rc; // RC_NF is Ok
} // end of WriteDB
@@ -1530,7 +1575,7 @@ bool TDBMYEXC::OpenDB(PGLOBAL g)
if (!(Cmdlist = MakeCMD(g))) {
Myc.Close();
return true;
- } // endif Query
+ } // endif Cmdlist
return false;
} // end of OpenDB
@@ -1558,9 +1603,12 @@ int TDBMYEXC::ReadDB(PGLOBAL g)
int rc;
do {
- Query = Cmdlist->Cmd;
+ if (Query)
+ Query->Set(Cmdlist->Cmd);
+ else
+ Query = new(g) STRING(g, 0, Cmdlist->Cmd);
- switch (rc = Myc.ExecSQLcmd(g, Query, &Warnings)) {
+ switch (rc = Myc.ExecSQLcmd(g, Query->GetStr(), &Warnings)) {
case RC_NF:
AftRows = Myc.m_Afrw;
strcpy(g->Message, "Affected rows");
@@ -1649,11 +1697,11 @@ void MYXCOL::ReadColumn(PGLOBAL g)
} else
switch (Flag) {
- case 0: Value->SetValue_psz(tdbp->Query); break;
- case 1: Value->SetValue(tdbp->AftRows); break;
- case 2: Value->SetValue_psz(g->Message); break;
- case 3: Value->SetValue(tdbp->Warnings); break;
- default: Value->SetValue_psz("Invalid Flag"); break;
+ case 0: Value->SetValue_psz(tdbp->Query->GetStr()); break;
+ case 1: Value->SetValue(tdbp->AftRows); break;
+ case 2: Value->SetValue_psz(g->Message); break;
+ case 3: Value->SetValue(tdbp->Warnings); break;
+ default: Value->SetValue_psz("Invalid Flag"); break;
} // endswitch Flag
} // end of ReadColumn
diff --git a/storage/connect/tabmysql.h b/storage/connect/tabmysql.h
index 68cf453a9e6..99930d43a57 100644
--- a/storage/connect/tabmysql.h
+++ b/storage/connect/tabmysql.h
@@ -119,6 +119,7 @@ class TDBMYSQL : public TDBASE {
// Members
MYSQLC Myc; // MySQL connection class
MYSQL_BIND *Bind; // To the MySQL bind structure array
+ PSTRG Query; // Constructed SQL query
char *Host; // Host machine to use
char *User; // User logon info
char *Pwd; // Password logon info
@@ -126,8 +127,6 @@ class TDBMYSQL : public TDBASE {
char *Tabname; // External table name
char *Srcdef; // The source table SQL definition
char *Server; // The server ID
- char *Query; // Points to SQL query
- char *Qbuf; // Used for not prepared insert
char *Qrystr; // The original query
bool Fetched; // True when fetch was done
bool Isview; // True if this table is a MySQL view
diff --git a/storage/connect/taboccur.cpp b/storage/connect/taboccur.cpp
index 917685faae3..86f0bd20d47 100644
--- a/storage/connect/taboccur.cpp
+++ b/storage/connect/taboccur.cpp
@@ -51,8 +51,6 @@
#include "ha_connect.h"
#include "mycat.h"
-extern "C" int trace;
-
/***********************************************************************/
/* Prepare and count columns in the column list. */
/***********************************************************************/
diff --git a/storage/connect/tabodbc.cpp b/storage/connect/tabodbc.cpp
index 023d7efa708..bbc17129aaf 100644
--- a/storage/connect/tabodbc.cpp
+++ b/storage/connect/tabodbc.cpp
@@ -75,15 +75,17 @@
#include "sql_string.h"
-extern "C" int trace;
-extern bool xinfo;
-
/***********************************************************************/
/* DB static variables. */
/***********************************************************************/
// int num_read, num_there, num_eq[2], num_nf; // Statistics
extern int num_read, num_there, num_eq[2]; // Statistics
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+bool ExactInfo(void);
+
/* -------------------------- Class ODBCDEF -------------------------- */
/***********************************************************************/
@@ -93,7 +95,7 @@ ODBCDEF::ODBCDEF(void)
{
Connect= Tabname= Tabschema= Tabcat= Srcdef= Qchar= Qrystr= Sep= NULL;
Catver = Options = Quoted = Maxerr = Maxres = 0;
- Xsrc = false;
+ Scrollable = Xsrc = false;
} // end of ODBCDEF constructor
/***********************************************************************/
@@ -127,6 +129,11 @@ bool ODBCDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff)
Maxres = GetIntCatInfo("Maxres", 0);
Quoted = GetIntCatInfo("Quoted", 0);
Options = ODBConn::noOdbcDialog;
+//Options = ODBConn::noOdbcDialog | ODBConn::useCursorLib;
+
+ if ((Scrollable = GetBoolCatInfo("Scrollable", false)))
+ Elemt = 0; // Not compatible with extended fetch
+
Pseudo = 2; // FILID is Ok but not ROWID
return false;
} // end of DefineAM
@@ -191,6 +198,7 @@ TDBODBC::TDBODBC(PODEF tdp) : TDBASE(tdp)
Quoted = MY_MAX(0, tdp->GetQuoted());
Rows = tdp->GetElemt();
Catver = tdp->Catver;
+ Scrollable = tdp->Scrollable;
} else {
Connect = NULL;
TableName = NULL;
@@ -203,6 +211,7 @@ TDBODBC::TDBODBC(PODEF tdp) : TDBASE(tdp)
Quoted = 0;
Rows = 0;
Catver = 0;
+ Scrollable = false;
} // endif tdp
Quote = NULL;
@@ -229,6 +238,7 @@ TDBODBC::TDBODBC(PTDBODBC tdbp) : TDBASE(tdbp)
Catalog = tdbp->Catalog;
Srcdef = tdbp->Srcdef;
Qrystr = tdbp->Qrystr;
+ Scrollable = tdbp->Scrollable;
Quote = tdbp->Quote;
Query = tdbp->Query;
Count = tdbp->Count;
@@ -672,7 +682,7 @@ int TDBODBC::Cardinality(PGLOBAL g)
if (!g)
return (Mode == MODE_ANY && !Srcdef) ? 1 : 0;
- if (Cardinal < 0 && Mode == MODE_ANY && !Srcdef && xinfo) {
+ if (Cardinal < 0 && Mode == MODE_ANY && !Srcdef && ExactInfo()) {
// Info command, we must return the exact table row number
char qry[96], tbn[64];
ODBConn *ocp = new(g) ODBConn(g, this);
@@ -755,6 +765,12 @@ bool TDBODBC::OpenDB(PGLOBAL g)
// To_Kindex->Reset();
// rewind(Stream); >>>>>>> Something to be done with Cursor <<<<<<<
+ if (Ocp->Rewind(Query, (PODBCCOL)Columns)) {
+ Ocp->Close();
+ return true;
+ } // endif Rewind
+
+ Fpos = 0;
return false;
} // endif use
@@ -1075,8 +1091,9 @@ void ODBCCOL::ReadColumn(PGLOBAL g)
} // endif Bufp
if (Buf_Type == TYPE_DATE) {
- struct tm dbtime = {0,0,0,0,0,0,0,0,0};
+ struct tm dbtime;
+ memset(&dbtime, 0, sizeof(tm));
dbtime.tm_sec = (int)Sqlbuf->second;
dbtime.tm_min = (int)Sqlbuf->minute;
dbtime.tm_hour = (int)Sqlbuf->hour;
diff --git a/storage/connect/tabodbc.h b/storage/connect/tabodbc.h
index 360f52c9d21..f042b0c73ca 100644
--- a/storage/connect/tabodbc.h
+++ b/storage/connect/tabodbc.h
@@ -59,6 +59,7 @@ class DllExport ODBCDEF : public TABDEF { /* Logical table description */
int Quoted; /* Identifier quoting level */
int Maxerr; /* Maxerr for an Exec table */
int Maxres; /* Maxres for a catalog table */
+ bool Scrollable; /* Use scrollable cursor */
bool Xsrc; /* Execution type */
}; // end of ODBCDEF
@@ -142,6 +143,7 @@ class TDBODBC : public TDBASE {
int Rbuf; // Number of lines read in buffer
int BufSize; // Size of connect string buffer
int Nparm; // The number of statement parameters
+ bool Scrollable; // Use scrollable cursor
}; // end of class TDBODBC
/***********************************************************************/
diff --git a/storage/connect/tabpivot.cpp b/storage/connect/tabpivot.cpp
index 7e54b62caaa..94e9d7187f0 100644
--- a/storage/connect/tabpivot.cpp
+++ b/storage/connect/tabpivot.cpp
@@ -51,8 +51,6 @@
#include "ha_connect.h"
#include "mycat.h" // For GetHandler
-extern "C" int trace;
-
/***********************************************************************/
/* Make the Pivot table column list. */
/***********************************************************************/
diff --git a/storage/connect/tabsys.cpp b/storage/connect/tabsys.cpp
index ae92c0771b6..3ed182c5e33 100644
--- a/storage/connect/tabsys.cpp
+++ b/storage/connect/tabsys.cpp
@@ -53,8 +53,6 @@
GetPrivateProfileString(NULL,NULL,"",S,L,I)
#endif // !WIN32
-extern "C" int trace;
-
/* -------------- Implementation of the INI classes ------------------ */
/***********************************************************************/
diff --git a/storage/connect/tabtbl.cpp b/storage/connect/tabtbl.cpp
index f5a516ad1d0..22ec3849b6f 100644
--- a/storage/connect/tabtbl.cpp
+++ b/storage/connect/tabtbl.cpp
@@ -86,8 +86,6 @@
#define SYSEXIT void *
#endif // !WIN32
-extern "C" int trace;
-
/* ---------------------------- Class TBLDEF ---------------------------- */
/**************************************************************************/
diff --git a/storage/connect/tabutil.cpp b/storage/connect/tabutil.cpp
index f4a8f2ee470..d469594916f 100644
--- a/storage/connect/tabutil.cpp
+++ b/storage/connect/tabutil.cpp
@@ -54,7 +54,6 @@
#include "tabutil.h"
#include "ha_connect.h"
-extern "C" int trace;
extern "C" int zconv;
/************************************************************************/
diff --git a/storage/connect/tabutil.h b/storage/connect/tabutil.h
index 11f18be074a..606e532d526 100644
--- a/storage/connect/tabutil.h
+++ b/storage/connect/tabutil.h
@@ -114,7 +114,7 @@ class DllExport PRXCOL : public COLBLK {
{return false;}
virtual void ReadColumn(PGLOBAL g);
virtual void WriteColumn(PGLOBAL g);
- bool Init(PGLOBAL g, PTDBASE tp = NULL);
+ virtual bool Init(PGLOBAL g, PTDBASE tp = NULL);
protected:
// Default constructor not to be used
diff --git a/storage/connect/tabvct.cpp b/storage/connect/tabvct.cpp
index 6d7059e2306..3ed40540395 100644
--- a/storage/connect/tabvct.cpp
+++ b/storage/connect/tabvct.cpp
@@ -76,8 +76,10 @@
char *strerror(int num);
#endif // UNIX
-extern "C" int trace;
-extern "C" USETEMP Use_Temp;
+/***********************************************************************/
+/* External function. */
+/***********************************************************************/
+USETEMP UseTemp(void);
/***********************************************************************/
/* Char VCT column blocks are right filled with blanks (blank = true) */
@@ -209,7 +211,7 @@ PTDB VCTDEF::GetTable(PGLOBAL g, MODE mode)
// Mapping not used for insert (except for true VEC not split tables)
// or when UseTemp is forced
bool map = Mapped && (Estimate || mode != MODE_INSERT) &&
- !(Use_Temp == TMP_FORCE &&
+ !(UseTemp() == TMP_FORCE &&
(mode == MODE_UPDATE || mode == MODE_DELETE));
PTXF txfp;
PTDB tdbp;
@@ -291,7 +293,7 @@ PCOL TDBVCT::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n)
bool TDBVCT::IsUsingTemp(PGLOBAL g)
{
// For developpers
- return (Use_Temp == TMP_TEST);
+ return (UseTemp() == TMP_TEST);
} // end of IsUsingTemp
/***********************************************************************/
diff --git a/storage/connect/tabvir.cpp b/storage/connect/tabvir.cpp
new file mode 100644
index 00000000000..b4c76f5ad56
--- /dev/null
+++ b/storage/connect/tabvir.cpp
@@ -0,0 +1,305 @@
+/************* tdbvir C++ Program Source Code File (.CPP) **************/
+/* PROGRAM NAME: tdbvir.cpp Version 1.1 */
+/* (C) Copyright to the author Olivier BERTRAND 2014 */
+/* This program are the VIR classes DB execution routines. */
+/***********************************************************************/
+
+/***********************************************************************/
+/* Include relevant sections of the MariaDB header file. */
+/***********************************************************************/
+#include <my_global.h>
+
+/***********************************************************************/
+/* Include application header files: */
+/* global.h is header containing all global declarations. */
+/* plgdbsem.h is header containing the DB application declarations. */
+/* xtable.h is header containing the TDBASE declarations. */
+/* tdbvir.h is header containing the VIR classes declarations. */
+/***********************************************************************/
+#include "global.h"
+#include "plgdbsem.h"
+#include "filter.h"
+#include "xtable.h"
+#include "reldef.h"
+#include "colblk.h"
+#include "mycat.h" // for FNC_COL
+#include "tabvir.h"
+#include "resource.h" // for IDS_COLUMNS
+
+/***********************************************************************/
+/* Return the unique column definition to MariaDB. */
+/***********************************************************************/
+PQRYRES VirColumns(PGLOBAL g, char *tab, char *db, bool info)
+ {
+ int buftyp[] = {TYPE_STRING, TYPE_SHORT, TYPE_STRING,
+ TYPE_INT, TYPE_STRING, TYPE_STRING};
+ XFLD fldtyp[] = {FLD_NAME, FLD_TYPE, FLD_TYPENAME,
+ FLD_PREC, FLD_KEY, FLD_EXTRA};
+ unsigned int length[] = {8, 4, 16, 4, 16, 16};
+ int i, n, ncol = sizeof(buftyp) / sizeof(int);
+ PQRYRES qrp;
+ PCOLRES crp;
+
+ n = (info) ? 0 : 1;
+
+ /**********************************************************************/
+ /* Allocate the structures used to refer to the result set. */
+ /**********************************************************************/
+ if (!(qrp = PlgAllocResult(g, ncol, n, IDS_COLUMNS + 3,
+ buftyp, fldtyp, length, false, true)))
+ return NULL;
+
+ // Some columns must be renamed before info
+ for (i = 0, crp = qrp->Colresp; crp; crp = crp->Next)
+ switch (++i) {
+ case 5: crp->Name = "Key"; break;
+ case 6: crp->Name = "Extra"; break;
+ } // endswitch i
+
+ if (info)
+ return qrp;
+
+ /**********************************************************************/
+ /* Now get the results into blocks. */
+ /**********************************************************************/
+ // Set column name
+ crp = qrp->Colresp; // Column_Name
+ crp->Kdata->SetValue("n", 0);
+
+ // Set type, type name, precision
+ crp = crp->Next; // Data_Type
+ crp->Kdata->SetValue(TYPE_INT, 0);
+
+ crp = crp->Next; // Type_Name
+ crp->Kdata->SetValue(GetTypeName(TYPE_INT), 0);
+
+ crp = crp->Next; // Precision
+ crp->Kdata->SetValue(11, 0);
+
+ crp = crp->Next; // Key
+ crp->Kdata->SetValue("KEY", 0);
+
+ crp = crp->Next; // Extra
+ crp->Kdata->SetValue("SPECIAL=ROWID", 0);
+
+ qrp->Nblin = 1;
+
+ /**********************************************************************/
+ /* Return the result pointer for use by discovery routines. */
+ /**********************************************************************/
+ return qrp;
+ } // end of VirColumns
+
+/* --------------------------- Class VIRDEF --------------------------- */
+
+/***********************************************************************/
+/* GetTable: makes a new Table Description Block. */
+/***********************************************************************/
+PTDB VIRDEF::GetTable(PGLOBAL g, MODE m)
+ {
+ // Column blocks will be allocated only when needed.
+ if (Catfunc == FNC_COL)
+ return new(g) TDBVICL(this);
+ else
+ return new(g) TDBVIR(this);
+
+ } // end of GetTable
+
+/* ------------------------ TDBVIR functions ------------------------- */
+
+/***********************************************************************/
+/* Implementation of the TDBVIR class. */
+/***********************************************************************/
+TDBVIR::TDBVIR(PVIRDEF tdp) : TDBASE(tdp)
+ {
+ Size = (tdp->GetElemt()) ? tdp->GetElemt() : 1;
+ N = -1;
+ } // end of TDBVIR constructor
+
+/***********************************************************************/
+/* Analyze the filter and reset the size limit accordingly. */
+/* This is possible when a filter contains predicates implying the */
+/* special column ROWID. Here we just test for when no more good */
+/* records can be met in the remaining of the table. */
+/***********************************************************************/
+int TDBVIR::TestFilter(PFIL filp, bool nop)
+ {
+ int i, op = filp->GetOpc(), n = 0, type[2] = {0,0};
+ int l1 = 0, l2, limit = Size;
+ PXOB arg[2] = {NULL,NULL};
+
+ if (op == OP_GT || op == OP_GE || op == OP_LT || op == OP_LE) {
+ for (i = 0; i < 2; i++) {
+ arg[i] = filp->Arg(i);
+
+ switch (filp->GetArgType(i)) {
+ case TYPE_CONST:
+ if ((l1 = arg[i]->GetIntValue()) >= 0)
+ type[i] = 1;
+
+ break;
+ case TYPE_COLBLK:
+ if (((PCOL)arg[i])->GetTo_Tdb() == this &&
+ ((PCOL)arg[i])->GetAmType() == TYPE_AM_ROWID)
+ type[i] = 2;
+
+ break;
+ default:
+ break;
+ } // endswitch ArgType
+
+ if (!type[i])
+ break;
+
+ n += type[i];
+ } // endfor i
+
+ if (n == 3) {
+ // If true it will be ok to delete the filter
+ BOOL ok = (filp == To_Filter);
+
+ if (type[0] == 1)
+ // Make it always a Column-op-Value
+ switch (op) {
+ case OP_GT: op = OP_LT; break;
+ case OP_GE: op = OP_LE; break;
+ case OP_LT: op = OP_GT; break;
+ case OP_LE: op = OP_GE; break;
+ } // endswitch op
+
+ if (!nop) switch (op) {
+ case OP_LT: l1--;
+ case OP_LE: limit = l1; break;
+ default: ok = false;
+ } // endswitch op
+
+ else switch (op) {
+ case OP_GE: l1--;
+ case OP_GT: limit = l1; break;
+ default: ok = false;
+ } // endswitch op
+
+ limit = MY_MIN(MY_MAX(0, limit), Size);
+
+ // Just one where clause such as Rowid < limit;
+ if (ok)
+ To_Filter = NULL;
+
+ } else
+ limit = Size;
+
+ } else if ((op == OP_AND && !nop) || (op == OP_OR && nop)) {
+ l1 = TestFilter((PFIL)filp->Arg(0), nop);
+ l2 = TestFilter((PFIL)filp->Arg(1), nop);
+ limit = MY_MIN(l1, l2);
+ } else if (op == OP_NOT)
+ limit = TestFilter((PFIL)filp->Arg(0), !nop);
+
+ return limit;
+ } // end of TestFilter
+
+/***********************************************************************/
+/* Allocate source column description block. */
+/***********************************************************************/
+PCOL TDBVIR::MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n)
+ {
+ PCOL colp = NULL;
+
+ if (cdp->IsVirtual()) {
+ colp = new(g) VIRCOL(cdp, this, cprec, n);
+ } else strcpy(g->Message,
+ "Virtual tables accept only special or virtual columns");
+
+ return colp;
+ } // end of MakeCol
+
+/***********************************************************************/
+/* VIR Access Method opening routine. */
+/***********************************************************************/
+bool TDBVIR::OpenDB(PGLOBAL g)
+ {
+ if (Use == USE_OPEN) {
+ // Table already open
+ N = -1;
+ return false;
+ } // endif use
+
+ if (Mode != MODE_READ) {
+ strcpy(g->Message, "Virtual tables are read only");
+ return true;
+ } // endif Mode
+
+ /*********************************************************************/
+ /* Analyze the filter and refine Size accordingly. */
+ /*********************************************************************/
+ if (To_Filter)
+ Size = TestFilter(To_Filter, false);
+
+ return false;
+ } // end of OpenDB
+
+/***********************************************************************/
+/* Data Base read routine for the VIR access method. */
+/***********************************************************************/
+int TDBVIR::ReadDB(PGLOBAL g)
+ {
+ return (++N >= Size) ? RC_EF : RC_OK;
+ } // end of ReadDB
+
+/***********************************************************************/
+/* WriteDB: Data Base write routine for the VIR access methods. */
+/***********************************************************************/
+int TDBVIR::WriteDB(PGLOBAL g)
+ {
+ sprintf(g->Message, MSG(VIR_READ_ONLY), To_Def->GetType());
+ return RC_FX;
+ } // end of WriteDB
+
+/***********************************************************************/
+/* Data Base delete line routine for the VIR access methods. */
+/***********************************************************************/
+int TDBVIR::DeleteDB(PGLOBAL g, int irc)
+ {
+ sprintf(g->Message, MSG(VIR_NO_DELETE), To_Def->GetType());
+ return RC_FX;
+ } // end of DeleteDB
+
+/* ---------------------------- VIRCOL ------------------------------- */
+
+/***********************************************************************/
+/* VIRCOL public constructor. */
+/***********************************************************************/
+VIRCOL::VIRCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am)
+ : COLBLK(cdp, tdbp, i)
+ {
+ if (cprec) {
+ Next = cprec->GetNext();
+ cprec->SetNext(this);
+ } else {
+ Next = tdbp->GetColumns();
+ tdbp->SetColumns(this);
+ } // endif cprec
+
+ } // end of VIRCOL constructor
+
+/***********************************************************************/
+/* ReadColumn: */
+/***********************************************************************/
+void VIRCOL::ReadColumn(PGLOBAL g)
+ {
+ // This should never be called
+ sprintf(g->Message, "ReadColumn: Column %s is not virtual", Name);
+ longjmp(g->jumper[g->jump_level], TYPE_COLBLK);
+ } // end of ReadColumn
+
+/* ---------------------------TDBVICL class -------------------------- */
+
+/***********************************************************************/
+/* GetResult: Get the list the VIRTUAL table columns. */
+/***********************************************************************/
+PQRYRES TDBVICL::GetResult(PGLOBAL g)
+ {
+ return VirColumns(g, NULL, NULL, false);
+ } // end of GetResult
+
+/* ------------------------- End of Virtual -------------------------- */
diff --git a/storage/connect/tabvir.h b/storage/connect/tabvir.h
new file mode 100644
index 00000000000..8d0caa257e7
--- /dev/null
+++ b/storage/connect/tabvir.h
@@ -0,0 +1,110 @@
+/**************** tdbvir H Declares Source Code File (.H) **************/
+/* Name: TDBVIR.H Version 1.1 */
+/* */
+/* (C) Copyright to the author Olivier BERTRAND 2006-2014 */
+/* */
+/* This file contains the VIR classes declare code. */
+/***********************************************************************/
+typedef class VIRDEF *PVIRDEF;
+typedef class TDBVIR *PTDBVIR;
+
+/***********************************************************************/
+/* Return the unique column definition to MariaDB. */
+/***********************************************************************/
+PQRYRES VirColumns(PGLOBAL g, char *tab, char *db, bool info);
+
+/* --------------------------- VIR classes --------------------------- */
+
+/***********************************************************************/
+/* VIR: Virtual table used to select constant values. */
+/***********************************************************************/
+class DllExport VIRDEF : public TABDEF { /* Logical table description */
+ public:
+ // Constructor
+ VIRDEF(void) {}
+
+ // Implementation
+ virtual const char *GetType(void) {return "VIRTUAL";}
+
+ // Methods
+ virtual bool DefineAM(PGLOBAL, LPCSTR, int) {Pseudo = 3; return false;}
+ virtual int Indexable(void) {return 3;}
+ virtual PTDB GetTable(PGLOBAL g, MODE m);
+
+ protected:
+ // Members
+ }; // end of VIRDEF
+
+/***********************************************************************/
+/* This is the class declaration for the Virtual table. */
+/***********************************************************************/
+class DllExport TDBVIR : public TDBASE {
+ public:
+ // Constructors
+ TDBVIR(PVIRDEF tdp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_VIR;}
+
+ // Methods
+ virtual int GetRecpos(void) {return N;}
+ virtual bool SetRecpos(PGLOBAL g, int recpos)
+ {N = recpos - 2; return false;}
+ virtual int RowNumber(PGLOBAL g, bool b = false) {return N + 1;}
+ int TestFilter(PFIL filp, bool nop);
+
+ // Database routines
+ virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
+ virtual int Cardinality(PGLOBAL g) {return (g) ? Size : 1;}
+ virtual int GetMaxSize(PGLOBAL g) {return Size;}
+ virtual bool OpenDB(PGLOBAL g);
+ virtual int ReadDB(PGLOBAL g);
+ virtual int WriteDB(PGLOBAL g);
+ virtual int DeleteDB(PGLOBAL g, int irc);
+ virtual void CloseDB(PGLOBAL g) {}
+
+ protected:
+ // Members
+ int Size; // Table size
+ int N; // The VIR table current position
+ }; // end of class TDBVIR
+
+/***********************************************************************/
+/* Class VIRCOL: VIRTUAL access method column descriptor. */
+/***********************************************************************/
+class VIRCOL : public COLBLK {
+ friend class TDBVIR;
+ public:
+ // Constructors
+ VIRCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PSZ am = "VIRTUAL");
+
+ // Implementation
+ virtual int GetAmType(void) {return TYPE_AM_VIR;}
+
+ // Methods
+ virtual void ReadColumn(PGLOBAL g);
+
+ protected:
+ // Default constructor not to be used
+ VIRCOL(void) {}
+
+ // No additional members
+ }; // end of class VIRCOL
+
+/***********************************************************************/
+/* This is the class declaration for the VIR column catalog table. */
+/***********************************************************************/
+class TDBVICL : public TDBCAT {
+ public:
+ // Constructor
+ TDBVICL(PVIRDEF tdp) : TDBCAT(tdp) {}
+
+ // Methods
+ virtual int Cardinality(PGLOBAL g) {return 2;} // Avoid DBUG_ASSERT
+
+ protected:
+ // Specific routines
+ virtual PQRYRES GetResult(PGLOBAL g);
+
+ // Members
+ }; // end of class TDBVICL
diff --git a/storage/connect/tabwmi.cpp b/storage/connect/tabwmi.cpp
index e47df028dc2..7c69426a066 100644
--- a/storage/connect/tabwmi.cpp
+++ b/storage/connect/tabwmi.cpp
@@ -21,8 +21,6 @@
#include "plgcnx.h" // For DB types
#include "resource.h"
-extern "C" int trace;
-
/* ------------------- Functions WMI Column info --------------------- */
/***********************************************************************/
@@ -200,7 +198,7 @@ PQRYRES WMIColumns(PGLOBAL g, char *nsp, char *cls, bool info)
} // endif res
len = (unsigned)SysStringLen(propname);
- length[0] = max(length[0], len);
+ length[0] = MY_MAX(length[0], len);
} // enfor i
res = SafeArrayDestroy(prnlist);
diff --git a/storage/connect/tabwmi.h b/storage/connect/tabwmi.h
index 6f25c0de258..6abb85453a1 100644
--- a/storage/connect/tabwmi.h
+++ b/storage/connect/tabwmi.h
@@ -1,151 +1,151 @@
-// TABWMI.H Olivier Bertrand 2012
-// WMI: Virtual table to Get WMI information
-#define _WIN32_DCOM
-#include <wbemidl.h>
-# pragma comment(lib, "wbemuuid.lib")
-#include <iostream>
-using namespace std;
-#include <comdef.h>
-
-/***********************************************************************/
-/* Definitions. */
-/***********************************************************************/
-typedef class WMIDEF *PWMIDEF;
-typedef class TDBWMI *PTDBWMI;
-typedef class WMICOL *PWMICOL;
-typedef class TDBWCL *PTDBWCL;
-typedef class WCLCOL *PWCLCOL;
-
-/***********************************************************************/
-/* Structure used by WMI column info functions. */
-/***********************************************************************/
-typedef struct _WMIutil {
- IWbemServices *Svc;
- IWbemClassObject *Cobj;
-} WMIUTIL, *PWMIUT;
-
-/***********************************************************************/
-/* Functions used externally. */
-/***********************************************************************/
-PQRYRES WMIColumns(PGLOBAL g, char *nsp, char *cls, bool info);
-
-/* -------------------------- WMI classes ---------------------------- */
-
-/***********************************************************************/
-/* WMI: Virtual table to get the WMI information. */
-/***********************************************************************/
-class WMIDEF : public TABDEF { /* Logical table description */
- friend class TDBWMI;
- friend class TDBWCL;
- friend class TDBWCX;
- public:
- // Constructor
- WMIDEF(void) {Pseudo = 3; Nspace = NULL; Wclass = NULL; Ems = 0;}
-
- // Implementation
- virtual const char *GetType(void) {return "WMI";}
-
- // Methods
- virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
- virtual PTDB GetTable(PGLOBAL g, MODE m);
-
- protected:
- // Members
- char *Nspace;
- char *Wclass;
- int Ems;
- }; // end of WMIDEF
-
-/***********************************************************************/
-/* This is the class declaration for the WMI table. */
-/***********************************************************************/
-class TDBWMI : public TDBASE {
- friend class WMICOL;
- public:
- // Constructor
- TDBWMI(PWMIDEF tdp);
-
- // Implementation
- virtual AMT GetAmType(void) {return TYPE_AM_WMI;}
-
- // Methods
- virtual int GetRecpos(void);
- virtual int GetProgCur(void) {return N;}
- virtual int RowNumber(PGLOBAL g, bool b = false) {return N + 1;}
-
- // Database routines
- virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
+// TABWMI.H Olivier Bertrand 2012
+// WMI: Virtual table to Get WMI information
+#define _WIN32_DCOM
+#include <wbemidl.h>
+# pragma comment(lib, "wbemuuid.lib")
+#include <iostream>
+using namespace std;
+#include <comdef.h>
+
+/***********************************************************************/
+/* Definitions. */
+/***********************************************************************/
+typedef class WMIDEF *PWMIDEF;
+typedef class TDBWMI *PTDBWMI;
+typedef class WMICOL *PWMICOL;
+typedef class TDBWCL *PTDBWCL;
+typedef class WCLCOL *PWCLCOL;
+
+/***********************************************************************/
+/* Structure used by WMI column info functions. */
+/***********************************************************************/
+typedef struct _WMIutil {
+ IWbemServices *Svc;
+ IWbemClassObject *Cobj;
+} WMIUTIL, *PWMIUT;
+
+/***********************************************************************/
+/* Functions used externally. */
+/***********************************************************************/
+PQRYRES WMIColumns(PGLOBAL g, char *nsp, char *cls, bool info);
+
+/* -------------------------- WMI classes ---------------------------- */
+
+/***********************************************************************/
+/* WMI: Virtual table to get the WMI information. */
+/***********************************************************************/
+class WMIDEF : public TABDEF { /* Logical table description */
+ friend class TDBWMI;
+ friend class TDBWCL;
+ friend class TDBWCX;
+ public:
+ // Constructor
+ WMIDEF(void) {Pseudo = 3; Nspace = NULL; Wclass = NULL; Ems = 0;}
+
+ // Implementation
+ virtual const char *GetType(void) {return "WMI";}
+
+ // Methods
+ virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
+ virtual PTDB GetTable(PGLOBAL g, MODE m);
+
+ protected:
+ // Members
+ char *Nspace;
+ char *Wclass;
+ int Ems;
+ }; // end of WMIDEF
+
+/***********************************************************************/
+/* This is the class declaration for the WMI table. */
+/***********************************************************************/
+class TDBWMI : public TDBASE {
+ friend class WMICOL;
+ public:
+ // Constructor
+ TDBWMI(PWMIDEF tdp);
+
+ // Implementation
+ virtual AMT GetAmType(void) {return TYPE_AM_WMI;}
+
+ // Methods
+ virtual int GetRecpos(void);
+ virtual int GetProgCur(void) {return N;}
+ virtual int RowNumber(PGLOBAL g, bool b = false) {return N + 1;}
+
+ // Database routines
+ virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
virtual int Cardinality(PGLOBAL g) {return GetMaxSize(g);}
- virtual int GetMaxSize(PGLOBAL g);
- virtual bool OpenDB(PGLOBAL g);
- virtual int ReadDB(PGLOBAL g);
- virtual int WriteDB(PGLOBAL g);
- virtual int DeleteDB(PGLOBAL g, int irc);
- virtual void CloseDB(PGLOBAL g);
-
- protected:
- // Specific routines
- bool Initialize(PGLOBAL g);
- char *MakeWQL(PGLOBAL g);
- void DoubleSlash(PGLOBAL g);
- bool GetWMIInfo(PGLOBAL g);
-
- // Members
- IWbemServices *Svc; // IWbemServices pointer
- IEnumWbemClassObject *Enumerator;
- IWbemClassObject *ClsObj;
- char *Nspace; // Namespace
- char *Wclass; // Class name
- char *ObjPath; // Used for direct access
- char *Kvp; // Itou
- int Ems; // Estimated max size
- PCOL Kcol; // Key column
- HRESULT Res;
- PVBLK Vbp;
- bool Init;
- bool Done;
- ULONG Rc;
- int N; // Row number
- }; // end of class TDBWMI
-
-/***********************************************************************/
-/* Class WMICOL: WMI Address column. */
-/***********************************************************************/
-class WMICOL : public COLBLK {
- friend class TDBWMI;
- public:
- // Constructors
- WMICOL(PCOLDEF cdp, PTDB tdbp, int n);
-
- // Implementation
- virtual int GetAmType(void) {return TYPE_AM_WMI;}
-
- // Methods
- virtual void ReadColumn(PGLOBAL g);
-
- protected:
- WMICOL(void) {} // Default constructor not to be used
-
- // Members
- PTDBWMI Tdbp; // Points to WMI table block
- VARIANT Prop; // Property value
- CIMTYPE Ctype; // CIM Type
- HRESULT Res;
- }; // end of class WMICOL
-
-/***********************************************************************/
-/* This is the class declaration for the WMI catalog table. */
-/***********************************************************************/
-class TDBWCL : public TDBCAT {
- public:
- // Constructor
- TDBWCL(PWMIDEF tdp);
-
- protected:
- // Specific routines
- virtual PQRYRES GetResult(PGLOBAL g);
-
- // Members
- char *Nsp; // Name space
- char *Cls; // Class
- }; // end of class TDBWCL
+ virtual int GetMaxSize(PGLOBAL g);
+ virtual bool OpenDB(PGLOBAL g);
+ virtual int ReadDB(PGLOBAL g);
+ virtual int WriteDB(PGLOBAL g);
+ virtual int DeleteDB(PGLOBAL g, int irc);
+ virtual void CloseDB(PGLOBAL g);
+
+ protected:
+ // Specific routines
+ bool Initialize(PGLOBAL g);
+ char *MakeWQL(PGLOBAL g);
+ void DoubleSlash(PGLOBAL g);
+ bool GetWMIInfo(PGLOBAL g);
+
+ // Members
+ IWbemServices *Svc; // IWbemServices pointer
+ IEnumWbemClassObject *Enumerator;
+ IWbemClassObject *ClsObj;
+ char *Nspace; // Namespace
+ char *Wclass; // Class name
+ char *ObjPath; // Used for direct access
+ char *Kvp; // Itou
+ int Ems; // Estimated max size
+ PCOL Kcol; // Key column
+ HRESULT Res;
+ PVBLK Vbp;
+ bool Init;
+ bool Done;
+ ULONG Rc;
+ int N; // Row number
+ }; // end of class TDBWMI
+
+/***********************************************************************/
+/* Class WMICOL: WMI Address column. */
+/***********************************************************************/
+class WMICOL : public COLBLK {
+ friend class TDBWMI;
+ public:
+ // Constructors
+ WMICOL(PCOLDEF cdp, PTDB tdbp, int n);
+
+ // Implementation
+ virtual int GetAmType(void) {return TYPE_AM_WMI;}
+
+ // Methods
+ virtual void ReadColumn(PGLOBAL g);
+
+ protected:
+ WMICOL(void) {} // Default constructor not to be used
+
+ // Members
+ PTDBWMI Tdbp; // Points to WMI table block
+ VARIANT Prop; // Property value
+ CIMTYPE Ctype; // CIM Type
+ HRESULT Res;
+ }; // end of class WMICOL
+
+/***********************************************************************/
+/* This is the class declaration for the WMI catalog table. */
+/***********************************************************************/
+class TDBWCL : public TDBCAT {
+ public:
+ // Constructor
+ TDBWCL(PWMIDEF tdp);
+
+ protected:
+ // Specific routines
+ virtual PQRYRES GetResult(PGLOBAL g);
+
+ // Members
+ char *Nsp; // Name space
+ char *Cls; // Class
+ }; // end of class TDBWCL
diff --git a/storage/connect/tabxcl.cpp b/storage/connect/tabxcl.cpp
index bd3d57257ff..57f0e1e03b9 100644
--- a/storage/connect/tabxcl.cpp
+++ b/storage/connect/tabxcl.cpp
@@ -57,8 +57,6 @@
#include "ha_connect.h"
#include "mycat.h"
-extern "C" int trace;
-
/* -------------- Implementation of the XCOL classes ---------------- */
/***********************************************************************/
@@ -184,8 +182,9 @@ bool TDBXCL::OpenDB(PGLOBAL g)
/* Check and initialize the subtable columns. */
/*********************************************************************/
for (PCOL cp = Columns; cp; cp = cp->GetNext())
- if (((PXCLCOL)cp)->Init(g))
- return TRUE;
+ if (!cp->IsSpecial())
+ if (((PPRXCOL)cp)->Init(g))
+ return TRUE;
/*********************************************************************/
/* Physically open the object table. */
@@ -240,13 +239,26 @@ XCLCOL::XCLCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
: PRXCOL(cdp, tdbp, cprec, i, "XCL")
{
// Set additional XXL access method information for column.
- Cbuf = (char*)PlugSubAlloc(g, NULL, Long + 1);
+ Cbuf = NULL; // Will be allocated later
Cp = NULL; // Pointer to current position in Cbuf
Sep = ((PTDBXCL)tdbp)->Sep;
AddStatus(BUF_READ); // Only evaluated from TDBXCL::ReadDB
} // end of XCLCOL constructor
/***********************************************************************/
+/* XCLCOL initialization routine. */
+/* Allocate Cbuf that will contain the Colp value. */
+/***********************************************************************/
+bool XCLCOL::Init(PGLOBAL g, PTDBASE tp)
+ {
+ if (PRXCOL::Init(g, tp))
+ return true;
+
+ Cbuf = (char*)PlugSubAlloc(g, NULL, Colp->GetLength() + 1);
+ return false;
+ } // end of Init
+
+/***********************************************************************/
/* What this routine does is to get the comma-separated string */
/* from the source table column, extract the single values and */
/* set the flag for the table ReadDB function. */
@@ -254,8 +266,10 @@ XCLCOL::XCLCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i)
void XCLCOL::ReadColumn(PGLOBAL g)
{
if (((PTDBXCL)To_Tdb)->New) {
+ Colp->Reset(); // Moved here in case of failed filtering
Colp->Eval(g);
- strcpy(Cbuf, To_Val->GetCharValue());
+ strncpy(Cbuf, To_Val->GetCharValue(), Colp->GetLength());
+ Cbuf[Colp->GetLength()] = 0;
Cp = Cbuf;
} // endif New
diff --git a/storage/connect/tabxcl.h b/storage/connect/tabxcl.h
index 24122573100..7e11600c090 100644
--- a/storage/connect/tabxcl.h
+++ b/storage/connect/tabxcl.h
@@ -88,8 +88,9 @@ class XCLCOL : public PRXCOL {
XCLCOL(PGLOBAL g, PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i);
// Methods
- virtual void Reset(void) {Colp->Reset();} // Evaluated only by TDBXCL
+ virtual void Reset(void) {} // Evaluated only by TDBXCL
virtual void ReadColumn(PGLOBAL g);
+ virtual bool Init(PGLOBAL g, PTDBASE tp = NULL);
protected:
// Default constructor not to be used
diff --git a/storage/connect/tabxml.cpp b/storage/connect/tabxml.cpp
index 88c029aefd2..8c73907c7ee 100644
--- a/storage/connect/tabxml.cpp
+++ b/storage/connect/tabxml.cpp
@@ -11,6 +11,7 @@
/***********************************************************************/
/* Include required compiler header files. */
/***********************************************************************/
+#include "my_global.h"
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
@@ -28,7 +29,6 @@
#include "osutil.h"
#define _O_RDONLY O_RDONLY
#endif // !WIN32
-#include "my_global.h"
#define INCLUDE_TDBXML
#define NODE_TYPE_LIST
@@ -49,10 +49,7 @@
#include "tabxml.h"
#include "tabmul.h"
-extern "C" {
-extern char version[];
-extern int trace;
-} // "C"
+extern "C" char version[];
#if defined(WIN32) && defined(DOMDOC_SUPPORT)
#define XMLSUP "MS-DOM"
diff --git a/storage/connect/user_connect.cc b/storage/connect/user_connect.cc
index b5f835c9cc9..4affe447b00 100644
--- a/storage/connect/user_connect.cc
+++ b/storage/connect/user_connect.cc
@@ -47,14 +47,17 @@
#include "user_connect.h"
#include "mycat.h"
-extern "C" int trace;
-extern uint worksize;
-
/****************************************************************************/
/* Initialize the user_connect static member. */
/****************************************************************************/
PCONNECT user_connect::to_users= NULL;
+/****************************************************************************/
+/* Get the work_size SESSION variable value . */
+/****************************************************************************/
+uint GetWorkSize(void);
+void SetWorkSize(uint);
+
/* -------------------------- class user_connect -------------------------- */
/****************************************************************************/
@@ -91,6 +94,7 @@ user_connect::~user_connect()
bool user_connect::user_init()
{
// Initialize Plug-like environment
+ uint worksize= GetWorkSize();
PACTIVITY ap= NULL;
PDBUSER dup= NULL;
@@ -143,6 +147,8 @@ void user_connect::SetHandler(ha_connect *hc)
bool user_connect::CheckCleanup(void)
{
if (thdp->query_id > last_query_id) {
+ uint worksize= GetWorkSize();
+
PlugCleanup(g, true);
if (g->Sarea_Size != worksize) {
@@ -152,7 +158,7 @@ bool user_connect::CheckCleanup(void)
// Check whether the work area size was changed
if (!(g->Sarea = PlugAllocMem(g, worksize))) {
g->Sarea = PlugAllocMem(g, g->Sarea_Size);
- worksize = g->Sarea_Size; // Was too big
+ SetWorkSize(g->Sarea_Size); // Was too big
} else
g->Sarea_Size = worksize; // Ok
diff --git a/storage/connect/valblk.cpp b/storage/connect/valblk.cpp
index 3827deec43d..df7011583cd 100644
--- a/storage/connect/valblk.cpp
+++ b/storage/connect/valblk.cpp
@@ -43,7 +43,6 @@
#define CheckBlanks assert(!Blanks);
#define CheckParms(V, N) ChkIndx(N); ChkTyp(V);
-extern "C" int trace;
extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
/***********************************************************************/
diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp
index 4c1c36369ef..81d00862703 100644
--- a/storage/connect/value.cpp
+++ b/storage/connect/value.cpp
@@ -48,7 +48,6 @@
#include "global.h"
#include "plgdbsem.h"
#include "preparse.h" // For DATPAR
-//#include "value.h"
#include "valblk.h"
#define NO_FUNC // Already defined in ODBConn
#include "plgcnx.h" // For DB types
@@ -69,12 +68,6 @@
#define FOURYEARS 126230400 // Four years in seconds (1 leap)
/***********************************************************************/
-/* Static variables. */
-/***********************************************************************/
-
-extern "C" int trace;
-
-/***********************************************************************/
/* Initialize the DTVAL static member. */
/***********************************************************************/
int DTVAL::Shift = 0;
@@ -92,32 +85,6 @@ PSZ strlwr(PSZ s);
#endif // !WIN32
/***********************************************************************/
-/* Returns the bitmap representing the conditions that must not be */
-/* met when returning from TestValue for a given operator. */
-/* Bit one is EQ, bit 2 is LT, and bit 3 is GT. */
-/***********************************************************************/
-BYTE OpBmp(PGLOBAL g, OPVAL opc)
- {
- BYTE bt;
-
- switch (opc) {
- case OP_IN:
- case OP_EQ: bt = 0x06; break;
- case OP_NE: bt = 0x01; break;
- case OP_GT: bt = 0x03; break;
- case OP_GE: bt = 0x02; break;
- case OP_LT: bt = 0x05; break;
- case OP_LE: bt = 0x04; break;
- case OP_EXIST: bt = 0x00; break;
- default:
- sprintf(g->Message, MSG(BAD_FILTER_OP), opc);
- longjmp(g->jumper[g->jump_level], TYPE_ARRAY);
- } // endswitch opc
-
- return bt;
- } // end of OpBmp
-
-/***********************************************************************/
/* Get a long long number from its character representation. */
/* IN p: Pointer to the numeric string */
/* IN n: The string length */
@@ -1045,8 +1012,11 @@ TYPVAL<PSZ>::TYPVAL(PGLOBAL g, PSZ s, int n, int c)
if (!s) {
if (g) {
- Strp = (char *)PlugSubAlloc(g, NULL, Len + 1);
- Strp[Len] = '\0';
+ if ((Strp = (char *)PlgDBSubAlloc(g, NULL, Len + 1)))
+ Strp[Len] = '\0';
+ else
+ Len = 0;
+
} else
assert(false);
@@ -2454,9 +2424,11 @@ bool DTVAL::SetValue_char(char *p, int n)
if (trace > 1)
htrc(" setting date: '%s' -> %d\n", Sdate, Tval);
- Null = false;
- } else
+ Null = (Nullable && ndv == 0);
+ } else {
rc = TYPVAL<int>::SetValue_char(p, n);
+ Null = (Nullable && Tval == 0);
+ } // endif Pdtp
return rc;
} // end of SetValue
@@ -2479,9 +2451,11 @@ void DTVAL::SetValue_psz(PSZ p)
if (trace > 1)
htrc(" setting date: '%s' -> %d\n", Sdate, Tval);
- Null = false;
- } else
+ Null = (Nullable && ndv == 0);
+ } else {
TYPVAL<int>::SetValue_psz(p);
+ Null = (Nullable && Tval == 0);
+ } // endif Pdtp
} // end of SetValue
@@ -2522,7 +2496,7 @@ char *DTVAL::GetCharString(char *p)
} else
sprintf(p, "%d", Tval);
- Null = false;
+//Null = false; ??????????????
return p;
} // end of GetCharString
@@ -2533,24 +2507,29 @@ char *DTVAL::ShowValue(char *buf, int len)
{
if (Pdtp) {
char *p;
- size_t m, n = 0;
- struct tm tm, *ptm = GetGmTime(&tm);
-
- if (Len < len) {
- p = buf;
- m = len;
- } else {
- p = Sdate;
- m = Len + 1;
- } // endif Len
- if (ptm)
- n = strftime(p, m, Pdtp->OutFmt, ptm);
+ if (!Null) {
+ size_t m, n = 0;
+ struct tm tm, *ptm = GetGmTime(&tm);
+
+ if (Len < len) {
+ p = buf;
+ m = len;
+ } else {
+ p = Sdate;
+ m = Len + 1;
+ } // endif Len
+
+ if (ptm)
+ n = strftime(p, m, Pdtp->OutFmt, ptm);
+
+ if (!n) {
+ *p = '\0';
+ strncat(p, "Error", m);
+ } // endif n
- if (!n) {
- *p = '\0';
- strncat(p, "Error", m);
- } // endif n
+ } else
+ p = ""; // DEFAULT VALUE ???
return p;
} else
diff --git a/storage/connect/value.h b/storage/connect/value.h
index 151ddacf509..3ce7027aeeb 100644
--- a/storage/connect/value.h
+++ b/storage/connect/value.h
@@ -256,6 +256,7 @@ class DllExport TYPVAL<PSZ>: public VALUE {
virtual bool FormatValue(PVAL vp, char *fmt);
virtual bool SetConstFormat(PGLOBAL, FORMAT&);
+ protected:
// Members
PSZ Strp;
bool Ci; // true if case insensitive
@@ -283,6 +284,7 @@ class DllExport DECVAL: public TYPVAL<PSZ> {
virtual bool IsEqual(PVAL vp, bool chktype);
virtual int CompareValue(PVAL vp);
+ protected:
// Members
}; // end of class DECVAL
@@ -337,6 +339,7 @@ class DllExport BINVAL: public VALUE {
virtual bool FormatValue(PVAL vp, char *fmt);
virtual bool SetConstFormat(PGLOBAL, FORMAT&);
+ protected:
// Members
void *Binp;
char *Chrp;
@@ -357,6 +360,7 @@ class DllExport DTVAL : public TYPVAL<int> {
DTVAL(PGLOBAL g, double f);
// Implementation
+ virtual bool IsZero(void) {return Null;}
virtual bool SetValue_pval(PVAL valp, bool chktype);
virtual bool SetValue_char(char *p, int n);
virtual void SetValue_psz(PSZ s);
diff --git a/storage/connect/xindex.cpp b/storage/connect/xindex.cpp
index 7cc52580760..024a9c081cd 100755
--- a/storage/connect/xindex.cpp
+++ b/storage/connect/xindex.cpp
@@ -58,12 +58,11 @@
#endif
/***********************************************************************/
-/* DB static external variables. */
+/* DB external variables. */
/***********************************************************************/
extern MBLOCK Nmblk; /* Used to initialize MBLOCK's */
-extern "C" int trace;
#if defined(XMAP)
-extern bool xmap;
+extern my_bool xmap;
#endif // XMAP
/***********************************************************************/
diff --git a/storage/connect/xobject.cpp b/storage/connect/xobject.cpp
index cdc2ef9bf62..4ddd4f5b30f 100644
--- a/storage/connect/xobject.cpp
+++ b/storage/connect/xobject.cpp
@@ -1,186 +1,371 @@
-/************ Xobject C++ Functions Source Code File (.CPP) ************/
-/* Name: XOBJECT.CPP Version 2.3 */
-/* */
-/* (C) Copyright to the author Olivier BERTRAND 1998-2014 */
-/* */
-/* This file contains base XOBJECT class functions. */
-/* Also here is the implementation of the CONSTANT class. */
-/***********************************************************************/
-
-/***********************************************************************/
-/* Include mariaDB header file. */
-/***********************************************************************/
-#include "my_global.h"
-
-/***********************************************************************/
-/* Include required application header files */
-/* global.h is header containing all global Plug declarations. */
-/* plgdbsem.h is header containing the DB applic. declarations. */
-/***********************************************************************/
-#include "global.h"
-#include "plgdbsem.h"
-#include "xobject.h"
-
-/***********************************************************************/
-/* Macro definitions. */
-/***********************************************************************/
-#if defined(_DEBUG) || defined(DEBTRACE)
-#define ASSERT(B) assert(B);
-#else
-#define ASSERT(B)
-#endif
-
-/***********************************************************************/
-/* The one and only needed void object. */
-/***********************************************************************/
-XVOID Xvoid;
-PXOB const pXVOID = &Xvoid; // Pointer used by other classes
-
-/* ------------------------- Class XOBJECT --------------------------- */
-
-/***********************************************************************/
-/* GetCharValue: returns the Result value as a char string. */
-/* Using GetCharValue provides no conversion from numeric types. */
-/***********************************************************************/
-PSZ XOBJECT::GetCharValue(void)
- {
- ASSERT(Value)
- return Value->GetCharValue();
- } // end of GetCharValue()
-
-/***********************************************************************/
-/* GetShortValue: returns the Result value as a short integer. */
-/***********************************************************************/
-short XOBJECT::GetShortValue(void)
- {
- ASSERT(Value)
- return Value->GetShortValue();
- } // end of GetShortValue
-
-/***********************************************************************/
-/* GetIntValue: returns the Result value as a int integer. */
-/***********************************************************************/
-int XOBJECT::GetIntValue(void)
- {
- ASSERT(Value)
- return Value->GetIntValue();
- } // end of GetIntValue
-
-/***********************************************************************/
-/* GetFloatValue: returns the Result value as a double float. */
-/***********************************************************************/
-double XOBJECT::GetFloatValue(void)
- {
- ASSERT(Value)
- return Value->GetFloatValue();
- } // end of GetFloatValue
-
-/* ------------------------- Class CONSTANT -------------------------- */
-
-/***********************************************************************/
-/* CONSTANT public constructor. */
-/***********************************************************************/
-CONSTANT::CONSTANT(PGLOBAL g, void *value, short type)
- {
- if (!(Value = AllocateValue(g, value, (int)type)))
- longjmp(g->jumper[g->jump_level], TYPE_CONST);
-
- Constant = true;
- } // end of CONSTANT constructor
-
-/***********************************************************************/
-/* CONSTANT public constructor. */
-/***********************************************************************/
-CONSTANT::CONSTANT(PGLOBAL g, int n)
- {
- if (!(Value = AllocateValue(g, &n, TYPE_INT)))
- longjmp(g->jumper[g->jump_level], TYPE_CONST);
-
- Constant = true;
- } // end of CONSTANT constructor
-
-/***********************************************************************/
-/* GetLengthEx: returns an evaluation of the constant string length. */
-/* Note: When converting from token to string, length has to be */
-/* specified but we need the domain length, not the value length. */
-/***********************************************************************/
-int CONSTANT::GetLengthEx(void)
- {
- return Value->GetValLen();
- } // end of GetLengthEx
-
-/***********************************************************************/
-/* Convert a constant to the given type. */
-/***********************************************************************/
-void CONSTANT::Convert(PGLOBAL g, int newtype)
- {
- if (Value->GetType() != newtype)
- if (!(Value = AllocateValue(g, Value, newtype)))
- longjmp(g->jumper[g->jump_level], TYPE_CONST);
-
- } // end of Convert
-
-/***********************************************************************/
-/* Compare: returns true if this object is equivalent to xp. */
-/***********************************************************************/
-bool CONSTANT::Compare(PXOB xp)
- {
- if (this == xp)
- return true;
- else if (xp->GetType() != TYPE_CONST)
- return false;
- else
- return Value->IsEqual(xp->GetValue(), true);
-
- } // end of Compare
-
-#if 0
-/***********************************************************************/
-/* Rephrase: temporary implementation used by PlugRephraseSQL. */
-/***********************************************************************/
-bool CONSTANT::Rephrase(PGLOBAL g, PSZ work)
- {
- switch (Value->GetType()) {
- case TYPE_STRING:
- sprintf(work + strlen(work), "'%s'", Value->GetCharValue());
- break;
- case TYPE_SHORT:
- sprintf(work + strlen(work), "%hd", Value->GetShortValue());
- break;
- case TYPE_INT:
- case TYPE_DATE:
- sprintf(work + strlen(work), "%d", Value->GetIntValue());
- break;
- case TYPE_DOUBLE:
- sprintf(work + strlen(work), "%lf", Value->GetFloatValue());
- break;
- case TYPE_BIGINT:
- sprintf(work + strlen(work), "%lld", Value->GetBigintValue());
- break;
- case TYPE_TINY:
- sprintf(work + strlen(work), "%d", Value->GetTinyValue());
- break;
- default:
- sprintf(g->Message, MSG(BAD_CONST_TYPE), Value->GetType());
- return false;
- } // endswitch
-
- return false;
- } // end of Rephrase
-#endif // 0
-
-/***********************************************************************/
-/* Make file output of a constant object. */
-/***********************************************************************/
-void CONSTANT::Print(PGLOBAL g, FILE *f, uint n)
- {
- Value->Print(g, f, n);
- } /* end of Print */
-
-/***********************************************************************/
-/* Make string output of a constant object. */
-/***********************************************************************/
-void CONSTANT::Print(PGLOBAL g, char *ps, uint z)
- {
- Value->Print(g, ps, z);
- } /* end of Print */
+/************ Xobject C++ Functions Source Code File (.CPP) ************/
+/* Name: XOBJECT.CPP Version 2.4 */
+/* */
+/* (C) Copyright to the author Olivier BERTRAND 1998-2014 */
+/* */
+/* This file contains base XOBJECT class functions. */
+/* Also here is the implementation of the CONSTANT class. */
+/***********************************************************************/
+
+/***********************************************************************/
+/* Include mariaDB header file. */
+/***********************************************************************/
+#include "my_global.h"
+
+/***********************************************************************/
+/* Include required application header files */
+/* global.h is header containing all global Plug declarations. */
+/* plgdbsem.h is header containing the DB applic. declarations. */
+/***********************************************************************/
+#include "global.h"
+#include "plgdbsem.h"
+#include "xobject.h"
+
+/***********************************************************************/
+/* Macro definitions. */
+/***********************************************************************/
+#if defined(_DEBUG) || defined(DEBTRACE)
+#define ASSERT(B) assert(B);
+#else
+#define ASSERT(B)
+#endif
+
+/***********************************************************************/
+/* The one and only needed void object. */
+/***********************************************************************/
+XVOID Xvoid;
+PXOB const pXVOID = &Xvoid; // Pointer used by other classes
+
+/* ------------------------- Class XOBJECT --------------------------- */
+
+/***********************************************************************/
+/* GetCharValue: returns the Result value as a char string. */
+/* Using GetCharValue provides no conversion from numeric types. */
+/***********************************************************************/
+PSZ XOBJECT::GetCharValue(void)
+ {
+ ASSERT(Value)
+ return Value->GetCharValue();
+ } // end of GetCharValue()
+
+/***********************************************************************/
+/* GetShortValue: returns the Result value as a short integer. */
+/***********************************************************************/
+short XOBJECT::GetShortValue(void)
+ {
+ ASSERT(Value)
+ return Value->GetShortValue();
+ } // end of GetShortValue
+
+/***********************************************************************/
+/* GetIntValue: returns the Result value as a int integer. */
+/***********************************************************************/
+int XOBJECT::GetIntValue(void)
+ {
+ ASSERT(Value)
+ return Value->GetIntValue();
+ } // end of GetIntValue
+
+/***********************************************************************/
+/* GetFloatValue: returns the Result value as a double float. */
+/***********************************************************************/
+double XOBJECT::GetFloatValue(void)
+ {
+ ASSERT(Value)
+ return Value->GetFloatValue();
+ } // end of GetFloatValue
+
+/* ------------------------- Class CONSTANT -------------------------- */
+
+/***********************************************************************/
+/* CONSTANT public constructor. */
+/***********************************************************************/
+CONSTANT::CONSTANT(PGLOBAL g, void *value, short type)
+ {
+ if (!(Value = AllocateValue(g, value, (int)type)))
+ longjmp(g->jumper[g->jump_level], TYPE_CONST);
+
+ Constant = true;
+ } // end of CONSTANT constructor
+
+/***********************************************************************/
+/* CONSTANT public constructor. */
+/***********************************************************************/
+CONSTANT::CONSTANT(PGLOBAL g, int n)
+ {
+ if (!(Value = AllocateValue(g, &n, TYPE_INT)))
+ longjmp(g->jumper[g->jump_level], TYPE_CONST);
+
+ Constant = true;
+ } // end of CONSTANT constructor
+
+/***********************************************************************/
+/* GetLengthEx: returns an evaluation of the constant string length. */
+/* Note: When converting from token to string, length has to be */
+/* specified but we need the domain length, not the value length. */
+/***********************************************************************/
+int CONSTANT::GetLengthEx(void)
+ {
+ return Value->GetValLen();
+ } // end of GetLengthEx
+
+/***********************************************************************/
+/* Convert a constant to the given type. */
+/***********************************************************************/
+void CONSTANT::Convert(PGLOBAL g, int newtype)
+ {
+ if (Value->GetType() != newtype)
+ if (!(Value = AllocateValue(g, Value, newtype)))
+ longjmp(g->jumper[g->jump_level], TYPE_CONST);
+
+ } // end of Convert
+
+/***********************************************************************/
+/* Compare: returns true if this object is equivalent to xp. */
+/***********************************************************************/
+bool CONSTANT::Compare(PXOB xp)
+ {
+ if (this == xp)
+ return true;
+ else if (xp->GetType() != TYPE_CONST)
+ return false;
+ else
+ return Value->IsEqual(xp->GetValue(), true);
+
+ } // end of Compare
+
+#if 0
+/***********************************************************************/
+/* Rephrase: temporary implementation used by PlugRephraseSQL. */
+/***********************************************************************/
+bool CONSTANT::Rephrase(PGLOBAL g, PSZ work)
+ {
+ switch (Value->GetType()) {
+ case TYPE_STRING:
+ sprintf(work + strlen(work), "'%s'", Value->GetCharValue());
+ break;
+ case TYPE_SHORT:
+ sprintf(work + strlen(work), "%hd", Value->GetShortValue());
+ break;
+ case TYPE_INT:
+ case TYPE_DATE:
+ sprintf(work + strlen(work), "%d", Value->GetIntValue());
+ break;
+ case TYPE_DOUBLE:
+ sprintf(work + strlen(work), "%lf", Value->GetFloatValue());
+ break;
+ case TYPE_BIGINT:
+ sprintf(work + strlen(work), "%lld", Value->GetBigintValue());
+ break;
+ case TYPE_TINY:
+ sprintf(work + strlen(work), "%d", Value->GetTinyValue());
+ break;
+ default:
+ sprintf(g->Message, MSG(BAD_CONST_TYPE), Value->GetType());
+ return false;
+ } // endswitch
+
+ return false;
+ } // end of Rephrase
+#endif // 0
+
+/***********************************************************************/
+/* Make file output of a constant object. */
+/***********************************************************************/
+void CONSTANT::Print(PGLOBAL g, FILE *f, uint n)
+ {
+ Value->Print(g, f, n);
+ } /* end of Print */
+
+/***********************************************************************/
+/* Make string output of a constant object. */
+/***********************************************************************/
+void CONSTANT::Print(PGLOBAL g, char *ps, uint z)
+ {
+ Value->Print(g, ps, z);
+ } /* end of Print */
+
+/* -------------------------- Class STRING --------------------------- */
+
+/***********************************************************************/
+/* STRING public constructor for new char values. Alloc Size must be */
+/* calculated because PlugSubAlloc rounds up size to multiple of 8. */
+/***********************************************************************/
+STRING::STRING(PGLOBAL g, uint n, char *str)
+{
+ G = g;
+ Length = (str) ? strlen(str) : 0;
+
+ if ((Strp = (PSZ)PlgDBSubAlloc(g, NULL, MY_MAX(n, Length) + 1))) {
+ if (str)
+ strcpy(Strp, str);
+ else
+ *Strp = 0;
+
+ Next = GetNext();
+ Size = Next - Strp;
+ } else {
+ // This should normally never happen
+ Next = NULL;
+ Size = 0;
+ } // endif Strp
+
+} // end of STRING constructor
+
+/***********************************************************************/
+/* Reallocate the string memory and return the (new) position. */
+/* If Next is equal to GetNext() this means that no new suballocation */
+/* has been done. Then we can just increase the size of the current */
+/* allocation and the Strp will remain pointing to the same memory. */
+/***********************************************************************/
+char *STRING::Realloc(uint len)
+{
+ char *p;
+ bool b = (Next == GetNext());
+
+ p = (char*)PlgDBSubAlloc(G, NULL, b ? len - Size : len);
+
+ if (!p) {
+ // No more room in Sarea; this is very unlikely
+ strcpy(G->Message, "No more room in work area");
+ return NULL;
+ } // endif p
+
+ if (b)
+ p = Strp;
+
+ Next = GetNext();
+ Size = Next - p;
+ return p;
+} // end of Realloc
+
+/***********************************************************************/
+/* Set a STRING new PSZ value. */
+/***********************************************************************/
+bool STRING::Set(PSZ s)
+{
+ if (!s)
+ return false;
+
+ uint len = strlen(s) + 1;
+
+ if (len > Size) {
+ char *p = Realloc(len);
+
+ if (!p)
+ return true;
+ else
+ Strp = p;
+
+ } // endif n
+
+ strcpy(Strp, s);
+ Length = len - 1;
+ return false;
+} // end of Set
+
+/***********************************************************************/
+/* Set a STRING new PSZ value. */
+/***********************************************************************/
+bool STRING::Set(char *s, uint n)
+{
+ if (!s)
+ return false;
+
+ uint len = strnlen(s, n) + 1;
+
+ if (len > Size) {
+ char *p = Realloc(len);
+
+ if (!p)
+ return true;
+ else
+ Strp = p;
+
+ } // endif n
+
+ strncpy(Strp, s, n);
+ Length = len - 1;
+ return false;
+} // end of Set
+
+/***********************************************************************/
+/* Append a PSZ to a STRING. */
+/***********************************************************************/
+bool STRING::Append(PSZ s)
+{
+ if (!s)
+ return false;
+
+ uint len = Length + strlen(s) + 1;
+
+ if (len > Size) {
+ char *p = Realloc(len);
+
+ if (!p)
+ return true;
+ else if (p != Strp) {
+ strcpy(p, Strp);
+ Strp = p;
+ } // endif p
+
+ } // endif n
+
+ strcpy(Strp + Length, s);
+ Length = len - 1;
+ return false;
+} // end of Append
+
+/***********************************************************************/
+/* Append a STRING to a STRING. */
+/***********************************************************************/
+bool STRING::Append(STRING &str)
+{
+ return Append(str.GetStr());
+} // end of Append
+
+/***********************************************************************/
+/* Append a char to a STRING. */
+/***********************************************************************/
+bool STRING::Append(char c)
+{
+ if (Length + 2 > Size) {
+ char *p = Realloc(Length + 2);
+
+ if (!p)
+ return true;
+ else if (p != Strp) {
+ strcpy(p, Strp);
+ Strp = p;
+ } // endif p
+
+ } // endif n
+
+ Strp[Length++] = c;
+ Strp[Length] = 0;
+ return false;
+} // end of Append
+
+/***********************************************************************/
+/* Resize to given length but only when last suballocated. */
+/* New size should be greater than string length. */
+/***********************************************************************/
+bool STRING::Resize(uint newsize)
+{
+ if (Next == GetNext() && newsize > Length) {
+ uint nsz = (((signed)newsize + 7) / 8) * 8;
+ int diff = (signed)Size - (signed)nsz;
+ PPOOLHEADER pp = (PPOOLHEADER)G->Sarea;
+
+ if ((signed)pp->FreeBlk + diff < 0)
+ return true; // Out of memory
+
+ pp->To_Free -= diff;
+ pp->FreeBlk += diff;
+ Size = nsz;
+ return false;
+ } else
+ return newsize > Size;
+
+} // end of Resize
+
diff --git a/storage/connect/xobject.h b/storage/connect/xobject.h
index 1621b4e82ff..bb7b0150ed8 100644
--- a/storage/connect/xobject.h
+++ b/storage/connect/xobject.h
@@ -1,119 +1,159 @@
-/*************** Xobject H Declares Source Code File (.H) **************/
-/* Name: XOBJECT.H Version 2.4 */
-/* */
-/* (C) Copyright to the author Olivier BERTRAND 1998-2014 */
-/* */
-/* This file contains the XOBJECT and derived classes declares. */
-/***********************************************************************/
-
-#ifndef __XOBJECT__H
-#define __XOBJECT__H
-
-/***********************************************************************/
-/* Include required application header files */
-/* block.h is header containing Block global declarations. */
-/***********************************************************************/
-#include "block.h"
-#include "valblk.h" // includes value.h
-
-/***********************************************************************/
-/* Types used in some class definitions. */
-/***********************************************************************/
-//typedef struct _tabdesc *PTABD; // For friend setting
-
-/***********************************************************************/
-/* The pointer to the one and only needed void object. */
-/***********************************************************************/
-extern PXOB const pXVOID;
-
-/***********************************************************************/
-/* Class XOBJECT is the base class for all classes that can be used */
-/* in evaluation operations: FILTER, EXPRESSION, SCALF, FNC, COLBLK, */
-/* SELECT, FILTER as well as all the constant object types. */
-/***********************************************************************/
-class DllExport XOBJECT : public BLOCK {
- public:
- XOBJECT(void) {Value = NULL; Constant = false;}
-
- // Implementation
- PVAL GetValue(void) {return Value;}
- bool IsConstant(void) {return Constant;}
- virtual int GetType(void) {return TYPE_XOBJECT;}
- virtual int GetResultType(void) {return TYPE_VOID;}
- virtual int GetKey(void) {return 0;}
-#if defined(_DEBUG)
- virtual void SetKey(int k) {assert(false);}
-#else // !_DEBUG
- virtual void SetKey(int k) {} // Only defined for COLBLK
-#endif // !_DEBUG
- virtual int GetLength(void) = 0;
- virtual int GetLengthEx(void) = 0;
- virtual PSZ GetCharValue(void);
- virtual short GetShortValue(void);
- virtual int GetIntValue(void);
- virtual double GetFloatValue(void);
- virtual int GetScale(void) = 0;
-
- // Methods
- virtual void Reset(void) {}
- virtual bool Compare(PXOB) = 0;
- virtual bool Init(PGLOBAL) {return false;}
- virtual bool Eval(PGLOBAL) {return false;}
- virtual bool SetFormat(PGLOBAL, FORMAT&) = 0;
-
- protected:
- PVAL Value; // The current value of the object.
- bool Constant; // true for an object having a constant value.
- }; // end of class XOBJECT
-
-/***********************************************************************/
-/* Class XVOID: represent a void (null) object. */
-/* Used to represent a void parameter for count(*) or for a filter. */
-/***********************************************************************/
-class DllExport XVOID : public XOBJECT {
- public:
- XVOID(void) {Constant = true;}
-
- // Implementation
- virtual int GetType(void) {return TYPE_VOID;}
- virtual int GetLength(void) {return 0;}
- virtual int GetLengthEx(void) {return 0;}
- virtual PSZ GetCharValue(void) {return NULL;}
- virtual int GetIntValue(void) {return 0;}
- virtual double GetFloatValue(void) {return 0.0;}
- virtual int GetScale() {return 0;}
-
- // Methods
- virtual bool Compare(PXOB xp) {return xp->GetType() == TYPE_VOID;}
- virtual bool SetFormat(PGLOBAL, FORMAT&) {return true;}
- }; // end of class XVOID
-
-
-/***********************************************************************/
-/* Class CONSTANT: represents a constant XOBJECT of any value type. */
-/* Note that the CONSTANT class is a friend of the VALUE class; */
-/***********************************************************************/
-class DllExport CONSTANT : public XOBJECT {
- public:
- CONSTANT(PGLOBAL g, void *value, short type);
- CONSTANT(PGLOBAL g, int n);
- CONSTANT(PVAL valp) {Value = valp; Constant = true;}
-
- // Implementation
- virtual int GetType(void) {return TYPE_CONST;}
- virtual int GetResultType(void) {return Value->Type;}
- virtual int GetLength(void) {return Value->GetValLen();}
- virtual int GetScale() {return Value->GetValPrec();}
- virtual int GetLengthEx(void);
-
- // Methods
- virtual bool Compare(PXOB xp);
- virtual bool SetFormat(PGLOBAL g, FORMAT& fmt)
- {return Value->SetConstFormat(g, fmt);}
- void Convert(PGLOBAL g, int newtype);
- void SetValue(PVAL vp) {Value = vp;}
- virtual void Print(PGLOBAL g, FILE *, uint);
- virtual void Print(PGLOBAL g, char *, uint);
- }; // end of class CONSTANT
-
-#endif
+/*************** Xobject H Declares Source Code File (.H) **************/
+/* Name: XOBJECT.H Version 2.4 */
+/* */
+/* (C) Copyright to the author Olivier BERTRAND 1998-2014 */
+/* */
+/* This file contains the XOBJECT and derived classes declares. */
+/***********************************************************************/
+
+#ifndef __XOBJECT__H
+#define __XOBJECT__H
+
+/***********************************************************************/
+/* Include required application header files */
+/* block.h is header containing Block global declarations. */
+/***********************************************************************/
+#include "block.h"
+#include "valblk.h" // includes value.h
+
+/***********************************************************************/
+/* Types used in some class definitions. */
+/***********************************************************************/
+typedef class STRING *PSTRG;
+
+/***********************************************************************/
+/* The pointer to the one and only needed void object. */
+/***********************************************************************/
+extern PXOB const pXVOID;
+
+/***********************************************************************/
+/* Class XOBJECT is the base class for all classes that can be used */
+/* in evaluation operations: FILTER, EXPRESSION, SCALF, FNC, COLBLK, */
+/* SELECT, FILTER as well as all the constant object types. */
+/***********************************************************************/
+class DllExport XOBJECT : public BLOCK {
+ public:
+ XOBJECT(void) {Value = NULL; Constant = false;}
+
+ // Implementation
+ PVAL GetValue(void) {return Value;}
+ bool IsConstant(void) {return Constant;}
+ virtual int GetType(void) {return TYPE_XOBJECT;}
+ virtual int GetResultType(void) {return TYPE_VOID;}
+ virtual int GetKey(void) {return 0;}
+#if defined(_DEBUG)
+ virtual void SetKey(int k) {assert(false);}
+#else // !_DEBUG
+ virtual void SetKey(int k) {} // Only defined for COLBLK
+#endif // !_DEBUG
+ virtual int GetLength(void) = 0;
+ virtual int GetLengthEx(void) = 0;
+ virtual PSZ GetCharValue(void);
+ virtual short GetShortValue(void);
+ virtual int GetIntValue(void);
+ virtual double GetFloatValue(void);
+ virtual int GetScale(void) = 0;
+
+ // Methods
+ virtual void Reset(void) {}
+ virtual bool Compare(PXOB) = 0;
+ virtual bool Init(PGLOBAL) {return false;}
+ virtual bool Eval(PGLOBAL) {return false;}
+ virtual bool SetFormat(PGLOBAL, FORMAT&) = 0;
+
+ protected:
+ PVAL Value; // The current value of the object.
+ bool Constant; // true for an object having a constant value.
+ }; // end of class XOBJECT
+
+/***********************************************************************/
+/* Class XVOID: represent a void (null) object. */
+/* Used to represent a void parameter for count(*) or for a filter. */
+/***********************************************************************/
+class DllExport XVOID : public XOBJECT {
+ public:
+ XVOID(void) {Constant = true;}
+
+ // Implementation
+ virtual int GetType(void) {return TYPE_VOID;}
+ virtual int GetLength(void) {return 0;}
+ virtual int GetLengthEx(void) {return 0;}
+ virtual PSZ GetCharValue(void) {return NULL;}
+ virtual int GetIntValue(void) {return 0;}
+ virtual double GetFloatValue(void) {return 0.0;}
+ virtual int GetScale() {return 0;}
+
+ // Methods
+ virtual bool Compare(PXOB xp) {return xp->GetType() == TYPE_VOID;}
+ virtual bool SetFormat(PGLOBAL, FORMAT&) {return true;}
+ }; // end of class XVOID
+
+
+/***********************************************************************/
+/* Class CONSTANT: represents a constant XOBJECT of any value type. */
+/* Note that the CONSTANT class is a friend of the VALUE class; */
+/***********************************************************************/
+class DllExport CONSTANT : public XOBJECT {
+ public:
+ CONSTANT(PGLOBAL g, void *value, short type);
+ CONSTANT(PGLOBAL g, int n);
+ CONSTANT(PVAL valp) {Value = valp; Constant = true;}
+
+ // Implementation
+ virtual int GetType(void) {return TYPE_CONST;}
+ virtual int GetResultType(void) {return Value->Type;}
+ virtual int GetLength(void) {return Value->GetValLen();}
+ virtual int GetScale() {return Value->GetValPrec();}
+ virtual int GetLengthEx(void);
+
+ // Methods
+ virtual bool Compare(PXOB xp);
+ virtual bool SetFormat(PGLOBAL g, FORMAT& fmt)
+ {return Value->SetConstFormat(g, fmt);}
+ void Convert(PGLOBAL g, int newtype);
+ void SetValue(PVAL vp) {Value = vp;}
+ virtual void Print(PGLOBAL g, FILE *, uint);
+ virtual void Print(PGLOBAL g, char *, uint);
+ }; // end of class CONSTANT
+
+/***********************************************************************/
+/* Class STRING handles variable length char strings. */
+/* It is mainly used to avoid buffer overrun. */
+/***********************************************************************/
+class DllExport STRING : public BLOCK {
+ public:
+ // Constructor
+ STRING(PGLOBAL g, uint n, PSZ str = NULL);
+
+ // Implementation
+ inline int GetLength(void) {return (int)Length;}
+ inline PSZ GetStr(void) {return Strp;}
+ inline uint32 GetSize(void) {return Size;}
+
+ // Methods
+ inline void Reset(void) {*Strp = 0;}
+ bool Set(PSZ s);
+ bool Set(char *s, uint n);
+ bool Append(PSZ s);
+ bool Append(STRING &str);
+ bool Append(char c);
+ bool Resize(uint n);
+ inline void Trim(void) {(void)Resize(Length + 1);}
+ inline void Chop(void) {if (Length) Strp[--Length] = 0;}
+ inline void RepLast(char c) {if (Length) Strp[Length-1] = c;}
+ inline void Truncate(uint n) {if (n < Length) {Strp[n] = 0; Length = n;}}
+
+ protected:
+ char *Realloc(uint len);
+ inline char *GetNext(void)
+ {return ((char*)G->Sarea)+((PPOOLHEADER)G->Sarea)->To_Free;}
+
+ // Members
+ PGLOBAL G; // To avoid parameter
+ PSZ Strp; // The char string
+ uint Length; // String length
+ uint Size; // Allocated size
+ char *Next; // Next alloc position
+ }; // end of class STRING
+
+#endif
diff --git a/storage/connect/xtable.h b/storage/connect/xtable.h
index 628ab96135d..49fbbb0de26 100644
--- a/storage/connect/xtable.h
+++ b/storage/connect/xtable.h
@@ -83,6 +83,7 @@ class DllExport TDB: public BLOCK { // Table Descriptor Block.
// Methods
virtual bool IsSame(PTDB tp) {return tp == this;}
+ virtual bool IsSpecial(PSZ name) = 0;
virtual bool GetBlockValues(PGLOBAL g) {return false;}
virtual int Cardinality(PGLOBAL g) {return 0;}
virtual int GetMaxSize(PGLOBAL) = 0;
@@ -158,6 +159,7 @@ class DllExport TDBASE : public TDB {
// Methods
virtual bool IsUsingTemp(PGLOBAL g) {return false;}
virtual bool IsIndexed(void) {return false;}
+ virtual bool IsSpecial(PSZ name);
virtual PCATLG GetCat(void);
virtual PSZ GetPath(void);
virtual void PrintAM(FILE *f, char *m);
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index 9db78065bb3..92ac20a8f82 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -41,10 +41,9 @@ TODO:
-Brian
*/
-#include "my_global.h"
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_class.h" // SSV
-#include <mysql/plugin.h>
#include <mysql/psi/mysql_file.h>
#include "ha_tina.h"
#include "probes_mysql.h"
diff --git a/storage/csv/transparent_file.cc b/storage/csv/transparent_file.cc
index a307f9885c0..1f1123aefc2 100644
--- a/storage/csv/transparent_file.cc
+++ b/storage/csv/transparent_file.cc
@@ -17,6 +17,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h>
#include "sql_priv.h"
#include <mysql/psi/mysql_file.h>
#include "transparent_file.h"
diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc
index a671dfb1f89..3a5b269e79f 100644
--- a/storage/example/ha_example.cc
+++ b/storage/example/ha_example.cc
@@ -98,6 +98,7 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_config.h>
#include <mysql/plugin.h>
#include "ha_example.h"
#include "sql_class.h"
diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc
index 11687c63374..7b1fa080080 100644
--- a/storage/federated/ha_federated.cc
+++ b/storage/federated/ha_federated.cc
@@ -372,6 +372,7 @@
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_servers.h" // FOREIGN_SERVER, get_server_by_name
#include "sql_class.h" // SSV
diff --git a/storage/federatedx/federatedx_io.cc b/storage/federatedx/federatedx_io.cc
index 34d3dde3ebb..1e0348e3bf8 100644
--- a/storage/federatedx/federatedx_io.cc
+++ b/storage/federatedx/federatedx_io.cc
@@ -28,8 +28,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*#define MYSQL_SERVER 1*/
+#include <my_global.h>
#include "sql_priv.h"
-#include <mysql/plugin.h>
#include "ha_federatedx.h"
diff --git a/storage/federatedx/federatedx_io_mysql.cc b/storage/federatedx/federatedx_io_mysql.cc
index 2933073a679..1ff6abc4c77 100644
--- a/storage/federatedx/federatedx_io_mysql.cc
+++ b/storage/federatedx/federatedx_io_mysql.cc
@@ -28,8 +28,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
-#include <mysql/plugin.h>
#include "ha_federatedx.h"
diff --git a/storage/federatedx/federatedx_io_null.cc b/storage/federatedx/federatedx_io_null.cc
index 4322422ef37..aa35d4bdecc 100644
--- a/storage/federatedx/federatedx_io_null.cc
+++ b/storage/federatedx/federatedx_io_null.cc
@@ -28,8 +28,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*#define MYSQL_SERVER 1*/
+#include <my_global.h>
#include "sql_priv.h"
-#include <mysql/plugin.h>
#include "ha_federatedx.h"
diff --git a/storage/federatedx/federatedx_txn.cc b/storage/federatedx/federatedx_txn.cc
index 5049b1ff79f..232ac335dfc 100644
--- a/storage/federatedx/federatedx_txn.cc
+++ b/storage/federatedx/federatedx_txn.cc
@@ -31,8 +31,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
-#include <mysql/plugin.h>
#include "ha_federatedx.h"
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc
index 86d470bdfc9..917e5a019ee 100644
--- a/storage/federatedx/ha_federatedx.cc
+++ b/storage/federatedx/ha_federatedx.cc
@@ -312,6 +312,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include <mysql/plugin.h>
#include "ha_federatedx.h"
#include "sql_servers.h"
diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc
index 28f306b3e5c..970c503497f 100644
--- a/storage/heap/ha_heap.cc
+++ b/storage/heap/ha_heap.cc
@@ -20,6 +20,7 @@
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
#include "sql_plugin.h"
#include "ha_heap.h"
diff --git a/storage/heap/hp_hash.c b/storage/heap/hp_hash.c
index 993d3377b73..aba7e8383da 100644
--- a/storage/heap/hp_hash.c
+++ b/storage/heap/hp_hash.c
@@ -878,12 +878,17 @@ uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
/* Convert NULL from MySQL representation into HEAP's. */
if (!(*key++= (char) 1 - *old++))
{
+#if 0
/*
Skip length part of a variable length field.
Length of key-part used with heap_rkey() always 2.
See also hp_hashnr().
*/
if (seg->flag & (HA_VAR_LENGTH_PART | HA_BLOB_PART))
+#else
+ /* Add key pack length (2) to key for VARCHAR segments */
+ if (seg->type == HA_KEYTYPE_VARTEXT1)
+#endif
old+= 2;
continue;
}
diff --git a/storage/innobase/api/api0api.cc b/storage/innobase/api/api0api.cc
index a060cbc7270..3859fb84b81 100644
--- a/storage/innobase/api/api0api.cc
+++ b/storage/innobase/api/api0api.cc
@@ -205,9 +205,9 @@ struct ib_tuple_t {
};
/** The following counter is used to convey information to InnoDB
-about server activity: in selects it is not sensible to call
-srv_active_wake_master_thread after each fetch or search, we only do
-it every INNOBASE_WAKE_INTERVAL'th step. */
+about server activity: in case of normal DML ops it is not
+sensible to call srv_active_wake_master_thread after each
+operation, we only do it every INNOBASE_WAKE_INTERVAL'th step. */
#define INNOBASE_WAKE_INTERVAL 32
@@ -427,7 +427,7 @@ ib_read_tuple(
data = btr_rec_copy_externally_stored_field(
copy, offsets, zip_size, i, &len,
- tuple->heap);
+ tuple->heap, NULL);
ut_a(len != UNIV_SQL_NULL);
}
@@ -707,8 +707,6 @@ ib_trx_rollback(
/* It should always succeed */
ut_a(err == DB_SUCCESS);
- ib_wake_master_thread();
-
return(err);
}
@@ -1531,7 +1529,11 @@ ib_execute_insert_query_graph(
dict_table_n_rows_inc(table);
- srv_stats.n_rows_inserted.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_inserted.inc();
+ } else {
+ srv_stats.n_rows_inserted.inc();
+ }
}
trx->op_info = "";
@@ -1654,7 +1656,7 @@ ib_cursor_insert_row(
src_tuple->index->table, q_proc->grph.ins, node->ins);
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
@@ -1885,9 +1887,17 @@ ib_execute_update_query_graph(
dict_table_n_rows_dec(table);
- srv_stats.n_rows_deleted.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.inc();
+ } else {
+ srv_stats.n_rows_deleted.inc();
+ }
} else {
- srv_stats.n_rows_updated.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.inc();
+ } else {
+ srv_stats.n_rows_updated.inc();
+ }
}
} else if (err == DB_RECORD_NOT_FOUND) {
@@ -1940,7 +1950,7 @@ ib_cursor_update_row(
err = ib_execute_update_query_graph(cursor, pcur);
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
@@ -2082,7 +2092,7 @@ ib_cursor_delete_row(
err = DB_RECORD_NOT_FOUND;
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
diff --git a/storage/innobase/api/api0misc.cc b/storage/innobase/api/api0misc.cc
index b2370105938..a980d32c33f 100644
--- a/storage/innobase/api/api0misc.cc
+++ b/storage/innobase/api/api0misc.cc
@@ -24,6 +24,7 @@ InnoDB Native API
3/20/2011 Jimmy Yang extracted from Embedded InnoDB
*******************************************************/
+#include <my_config.h>
#include <errno.h>
#ifdef HAVE_UNISTD_H
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index 4f9ccbe061a..ff27b470974 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -2826,6 +2826,134 @@ btr_page_tuple_smaller(
return(cmp_dtuple_rec(tuple, first_rec, *offsets) < 0);
}
+/** Insert the tuple into the right sibling page, if the cursor is at the end
+of a page.
+@param[in] flags undo logging and locking flags
+@param[in,out] cursor cursor at which to insert; when the function succeeds,
+ the cursor is positioned before the insert point.
+@param[out] offsets offsets on inserted record
+@param[in,out] heap memory heap for allocating offsets
+@param[in] tuple tuple to insert
+@param[in] n_ext number of externally stored columns
+@param[in,out] mtr mini-transaction
+@return inserted record (first record on the right sibling page);
+ the cursor will be positioned on the page infimum
+@retval NULL if the operation was not performed */
+static
+rec_t*
+btr_insert_into_right_sibling(
+ ulint flags,
+ btr_cur_t* cursor,
+ ulint** offsets,
+ mem_heap_t* heap,
+ const dtuple_t* tuple,
+ ulint n_ext,
+ mtr_t* mtr)
+{
+ buf_block_t* block = btr_cur_get_block(cursor);
+ page_t* page = buf_block_get_frame(block);
+ ulint next_page_no = btr_page_get_next(page, mtr);
+
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(cursor->index),
+ MTR_MEMO_X_LOCK));
+ ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
+ ut_ad(heap);
+
+ if (next_page_no == FIL_NULL || !page_rec_is_supremum(
+ page_rec_get_next(btr_cur_get_rec(cursor)))) {
+
+ return(NULL);
+ }
+
+ page_cur_t next_page_cursor;
+ buf_block_t* next_block;
+ page_t* next_page;
+ btr_cur_t next_father_cursor;
+ rec_t* rec = NULL;
+ ulint zip_size = buf_block_get_zip_size(block);
+ ulint max_size;
+
+ next_block = btr_block_get(
+ buf_block_get_space(block), zip_size,
+ next_page_no, RW_X_LATCH, cursor->index, mtr);
+ next_page = buf_block_get_frame(next_block);
+
+ bool is_leaf = page_is_leaf(next_page);
+
+ btr_page_get_father(
+ cursor->index, next_block, mtr, &next_father_cursor);
+
+ page_cur_search(
+ next_block, cursor->index, tuple, PAGE_CUR_LE,
+ &next_page_cursor);
+
+ max_size = page_get_max_insert_size_after_reorganize(next_page, 1);
+
+ /* Extends gap lock for the next page */
+ lock_update_split_left(next_block, block);
+
+ rec = page_cur_tuple_insert(
+ &next_page_cursor, tuple, cursor->index, offsets, &heap,
+ n_ext, mtr);
+
+ if (rec == NULL) {
+ if (zip_size && is_leaf
+ && !dict_index_is_clust(cursor->index)) {
+ /* Reset the IBUF_BITMAP_FREE bits, because
+ page_cur_tuple_insert() will have attempted page
+ reorganize before failing. */
+ ibuf_reset_free_bits(next_block);
+ }
+ return(NULL);
+ }
+
+ ibool compressed;
+ dberr_t err;
+ ulint level = btr_page_get_level(next_page, mtr);
+
+ /* adjust cursor position */
+ *btr_cur_get_page_cur(cursor) = next_page_cursor;
+
+ ut_ad(btr_cur_get_rec(cursor) == page_get_infimum_rec(next_page));
+ ut_ad(page_rec_get_next(page_get_infimum_rec(next_page)) == rec);
+
+ /* We have to change the parent node pointer */
+
+ compressed = btr_cur_pessimistic_delete(
+ &err, TRUE, &next_father_cursor,
+ BTR_CREATE_FLAG, RB_NONE, mtr);
+
+ ut_a(err == DB_SUCCESS);
+
+ if (!compressed) {
+ btr_cur_compress_if_useful(&next_father_cursor, FALSE, mtr);
+ }
+
+ dtuple_t* node_ptr = dict_index_build_node_ptr(
+ cursor->index, rec, buf_block_get_page_no(next_block),
+ heap, level);
+
+ btr_insert_on_non_leaf_level(
+ flags, cursor->index, level + 1, node_ptr, mtr);
+
+ ut_ad(rec_offs_validate(rec, cursor->index, *offsets));
+
+ if (is_leaf && !dict_index_is_clust(cursor->index)) {
+ /* Update the free bits of the B-tree page in the
+ insert buffer bitmap. */
+
+ if (zip_size) {
+ ibuf_update_free_bits_zip(next_block, mtr);
+ } else {
+ ibuf_update_free_bits_if_full(
+ next_block, max_size,
+ rec_offs_size(*offsets) + PAGE_DIR_SLOT_SIZE);
+ }
+ }
+
+ return(rec);
+}
+
/*************************************************************//**
Splits an index page to halves and inserts the tuple. It is assumed
that mtr holds an x-latch to the index tree. NOTE: the tree x-latch is
@@ -2896,6 +3024,14 @@ func_start:
ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
ut_ad(!page_is_empty(page));
+ /* try to insert to the next page if possible before split */
+ rec = btr_insert_into_right_sibling(
+ flags, cursor, offsets, *heap, tuple, n_ext, mtr);
+
+ if (rec != NULL) {
+ return(rec);
+ }
+
page_no = buf_block_get_page_no(block);
/* 1. Decide the split record; split_rec == NULL means that the
diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc
index 9b24244f35e..b030fd7da79 100644
--- a/storage/innobase/btr/btr0cur.cc
+++ b/storage/innobase/btr/btr0cur.cc
@@ -1247,7 +1247,7 @@ btr_cur_optimistic_insert(
rec_t* dummy;
ibool leaf;
ibool reorg;
- ibool inherit;
+ ibool inherit = TRUE;
ulint zip_size;
ulint rec_size;
dberr_t err;
@@ -1525,7 +1525,7 @@ btr_cur_pessimistic_insert(
ulint zip_size = dict_table_zip_size(index->table);
big_rec_t* big_rec_vec = NULL;
dberr_t err;
- ibool dummy_inh;
+ ibool inherit = FALSE;
ibool success;
ulint n_reserved = 0;
@@ -1547,7 +1547,7 @@ btr_cur_pessimistic_insert(
/* Check locks and write to undo log, if specified */
err = btr_cur_ins_lock_and_undo(flags, cursor, entry,
- thr, mtr, &dummy_inh);
+ thr, mtr, &inherit);
if (err != DB_SUCCESS) {
@@ -1607,10 +1607,31 @@ btr_cur_pessimistic_insert(
ut_ad(page_rec_get_next(btr_cur_get_rec(cursor)) == *rec);
+ if (!(flags & BTR_NO_LOCKING_FLAG)) {
+ /* The cursor might be moved to the other page,
+ and the max trx id field should be updated after
+ the cursor was fixed. */
+ if (!dict_index_is_clust(index)) {
+ page_update_max_trx_id(
+ btr_cur_get_block(cursor),
+ btr_cur_get_page_zip(cursor),
+ thr_get_trx(thr)->id, mtr);
+ }
+ if (!page_rec_is_infimum(btr_cur_get_rec(cursor))
+ || btr_page_get_prev(
+ buf_block_get_frame(
+ btr_cur_get_block(cursor)), mtr)
+ == FIL_NULL) {
+ /* split and inserted need to call
+ lock_update_insert() always. */
+ inherit = TRUE;
+ }
+ }
+
#ifdef BTR_CUR_ADAPT
btr_search_update_hash_on_insert(cursor);
#endif
- if (!(flags & BTR_NO_LOCKING_FLAG)) {
+ if (inherit && !(flags & BTR_NO_LOCKING_FLAG)) {
lock_update_insert(btr_cur_get_block(cursor), *rec);
}
@@ -3614,7 +3635,8 @@ btr_estimate_n_rows_in_range(
const dtuple_t* tuple1, /*!< in: range start, may also be empty tuple */
ulint mode1, /*!< in: search mode for range start */
const dtuple_t* tuple2, /*!< in: range end, may also be empty tuple */
- ulint mode2) /*!< in: search mode for range end */
+ ulint mode2, /*!< in: search mode for range end */
+ trx_t* trx) /*!< in: trx */
{
btr_path_t path1[BTR_PATH_ARRAY_N_SLOTS];
btr_path_t path2[BTR_PATH_ARRAY_N_SLOTS];
@@ -3632,7 +3654,7 @@ btr_estimate_n_rows_in_range(
table_n_rows = dict_table_get_n_rows(index->table);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
cursor.path_arr = path1;
@@ -3650,7 +3672,7 @@ btr_estimate_n_rows_in_range(
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
cursor.path_arr = path2;
@@ -3826,7 +3848,7 @@ btr_estimate_number_of_different_key_vals(
ib_uint64_t* n_diff;
ib_uint64_t* n_not_null;
ibool stats_null_not_equal;
- ullint n_sample_pages; /* number of pages to sample */
+ ullint n_sample_pages = 1; /* number of pages to sample */
ulint not_empty_flag = 0;
ulint total_external_size = 0;
ulint i;
@@ -3873,18 +3895,63 @@ btr_estimate_number_of_different_key_vals(
ut_error;
}
- /* It makes no sense to test more pages than are contained
- in the index, thus we lower the number if it is too high */
- if (srv_stats_transient_sample_pages > index->stat_index_size) {
- if (index->stat_index_size > 0) {
- n_sample_pages = index->stat_index_size;
+ if (srv_stats_sample_traditional) {
+ /* It makes no sense to test more pages than are contained
+ in the index, thus we lower the number if it is too high */
+ if (srv_stats_transient_sample_pages > index->stat_index_size) {
+ if (index->stat_index_size > 0) {
+ n_sample_pages = index->stat_index_size;
+ }
} else {
- n_sample_pages = 1;
+ n_sample_pages = srv_stats_transient_sample_pages;
}
} else {
- n_sample_pages = srv_stats_transient_sample_pages;
+ /* New logaritmic number of pages that are estimated.
+ Number of pages estimated should be between 1 and
+ index->stat_index_size.
+
+ If we have only 0 or 1 index pages then we can only take 1
+ sample. We have already initialized n_sample_pages to 1.
+
+ So taking index size as I and sample as S and log(I)*S as L
+
+ requirement 1) we want the out limit of the expression to not exceed I;
+ requirement 2) we want the ideal pages to be at least S;
+ so the current expression is min(I, max( min(S,I), L)
+
+ looking for simplifications:
+
+ case 1: assume S < I
+ min(I, max( min(S,I), L) -> min(I , max( S, L))
+
+ but since L=LOG2(I)*S and log2(I) >=1 L>S always so max(S,L) = L.
+
+ so we have: min(I , L)
+
+ case 2: assume I < S
+ min(I, max( min(S,I), L) -> min(I, max( I, L))
+
+ case 2a: L > I
+ min(I, max( I, L)) -> min(I, L) -> I
+
+ case 2b: when L < I
+ min(I, max( I, L)) -> min(I, I ) -> I
+
+ so taking all case2 paths is I, our expression is:
+ n_pages = S < I? min(I,L) : I
+ */
+ if (index->stat_index_size > 1) {
+ n_sample_pages = (srv_stats_transient_sample_pages < index->stat_index_size) ?
+ ut_min(index->stat_index_size,
+ log2(index->stat_index_size)*srv_stats_transient_sample_pages)
+ : index->stat_index_size;
+
+ }
}
+ /* Sanity check */
+ ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size <= 1 ? 1 : index->stat_index_size));
+
/* We sample some pages in the index to get an estimate */
for (i = 0; i < n_sample_pages; i++) {
@@ -5232,7 +5299,8 @@ btr_copy_blob_prefix(
ulint len, /*!< in: length of buf, in bytes */
ulint space_id,/*!< in: space id of the BLOB pages */
ulint page_no,/*!< in: page number of the first BLOB page */
- ulint offset) /*!< in: offset on the first BLOB page */
+ ulint offset, /*!< in: offset on the first BLOB page */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint copied_len = 0;
@@ -5244,7 +5312,7 @@ btr_copy_blob_prefix(
ulint part_len;
ulint copy_len;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
block = buf_page_get(space_id, 0, page_no, RW_S_LATCH, &mtr);
buf_block_dbg_add_level(block, SYNC_EXTERN_STORAGE);
@@ -5447,7 +5515,8 @@ btr_copy_externally_stored_field_prefix_low(
zero for uncompressed BLOBs */
ulint space_id,/*!< in: space id of the first BLOB page */
ulint page_no,/*!< in: page number of the first BLOB page */
- ulint offset) /*!< in: offset on the first BLOB page */
+ ulint offset, /*!< in: offset on the first BLOB page */
+ trx_t* trx) /*!< in: transaction handle */
{
if (UNIV_UNLIKELY(len == 0)) {
return(0);
@@ -5458,7 +5527,7 @@ btr_copy_externally_stored_field_prefix_low(
space_id, page_no, offset));
} else {
return(btr_copy_blob_prefix(buf, len, space_id,
- page_no, offset));
+ page_no, offset, trx));
}
}
@@ -5479,7 +5548,8 @@ btr_copy_externally_stored_field_prefix(
field containing also the reference to
the external part; must be protected by
a lock or a page latch */
- ulint local_len)/*!< in: length of data, in bytes */
+ ulint local_len,/*!< in: length of data, in bytes */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint space_id;
ulint page_no;
@@ -5518,7 +5588,7 @@ btr_copy_externally_stored_field_prefix(
len - local_len,
zip_size,
space_id, page_no,
- offset));
+ offset, trx));
}
/*******************************************************************//**
@@ -5537,7 +5607,8 @@ btr_copy_externally_stored_field(
ulint zip_size,/*!< in: nonzero=compressed BLOB page size,
zero for uncompressed BLOBs */
ulint local_len,/*!< in: length of data */
- mem_heap_t* heap) /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint space_id;
ulint page_no;
@@ -5568,7 +5639,8 @@ btr_copy_externally_stored_field(
extern_len,
zip_size,
space_id,
- page_no, offset);
+ page_no, offset,
+ trx);
return(buf);
}
@@ -5587,7 +5659,8 @@ btr_rec_copy_externally_stored_field(
zero for uncompressed BLOBs */
ulint no, /*!< in: field number */
ulint* len, /*!< out: length of the field */
- mem_heap_t* heap) /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint local_len;
const byte* data;
@@ -5618,6 +5691,7 @@ btr_rec_copy_externally_stored_field(
}
return(btr_copy_externally_stored_field(len, data,
- zip_size, local_len, heap));
+ zip_size, local_len, heap,
+ trx));
}
#endif /* !UNIV_HOTBACKUP */
diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc
index 82a2b6dbf6b..01d2e1bb8e2 100644
--- a/storage/innobase/btr/btr0pcur.cc
+++ b/storage/innobase/btr/btr0pcur.cc
@@ -486,7 +486,7 @@ btr_pcur_move_backward_from_page(
mtr_commit(mtr);
- mtr_start(mtr);
+ mtr_start_trx(mtr, mtr->trx);
btr_pcur_restore_position(latch_mode2, cursor, mtr);
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index 710d9561d4c..33c9eb7a0f2 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -4301,6 +4301,7 @@ corrupt:
" because of"
" a corrupt database page.\n",
stderr);
+
ut_error;
}
}
@@ -5064,22 +5065,22 @@ Returns the ratio in percents of modified pages in the buffer pool /
database pages in the buffer pool.
@return modified page percentage ratio */
UNIV_INTERN
-ulint
+double
buf_get_modified_ratio_pct(void)
/*============================*/
{
- ulint ratio;
+ double percentage = 0.0;
ulint lru_len = 0;
ulint free_len = 0;
ulint flush_list_len = 0;
buf_get_total_list_len(&lru_len, &free_len, &flush_list_len);
- ratio = (100 * flush_list_len) / (1 + lru_len + free_len);
+ percentage = (100.0 * flush_list_len) / (1.0 + lru_len + free_len);
/* 1 + is there to avoid division by zero */
- return(ratio);
+ return(percentage);
}
/*******************************************************************//**
@@ -5292,6 +5293,8 @@ buf_print_io_instance(
"Database pages %lu\n"
"Old database pages %lu\n"
"Modified db pages %lu\n"
+ "Percent of dirty pages(LRU & free pages): %.3f\n"
+ "Max dirty pages percent: %.3f\n"
"Pending reads %lu\n"
"Pending writes: LRU %lu, flush list %lu, single page %lu\n",
pool_info->pool_size,
@@ -5299,6 +5302,9 @@ buf_print_io_instance(
pool_info->lru_len,
pool_info->old_lru_len,
pool_info->flush_list_len,
+ (((double) pool_info->flush_list_len) /
+ (pool_info->lru_len + pool_info->free_list_len + 1.0)) * 100.0,
+ srv_max_buf_pool_modified_pct,
pool_info->n_pend_reads,
pool_info->n_pending_flush_lru,
pool_info->n_pending_flush_list,
diff --git a/storage/innobase/buf/buf0flu.cc b/storage/innobase/buf/buf0flu.cc
index d91f036b599..32c3c816a85 100644
--- a/storage/innobase/buf/buf0flu.cc
+++ b/storage/innobase/buf/buf0flu.cc
@@ -2154,7 +2154,14 @@ page_cleaner_flush_pages_if_needed(void)
ulint pct_total = 0;
int age_factor = 0;
- cur_lsn = log_get_lsn();
+ cur_lsn = log_get_lsn_nowait();
+
+ /* log_get_lsn_nowait tries to get log_sys->mutex with
+ mutex_enter_nowait, if this does not succeed function
+ returns 0, do not use that value to update stats. */
+ if (cur_lsn == 0) {
+ return(0);
+ }
if (prev_lsn == 0) {
/* First time around. */
diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc
index 7f9f9781874..952f0fc3083 100644
--- a/storage/innobase/buf/buf0lru.cc
+++ b/storage/innobase/buf/buf0lru.cc
@@ -1211,7 +1211,7 @@ buf_LRU_check_size_of_non_data_objects(
buf_lru_switched_on_innodb_mon = TRUE;
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
}
} else if (buf_lru_switched_on_innodb_mon) {
@@ -1348,7 +1348,7 @@ loop:
mon_value_was = srv_print_innodb_monitor;
started_monitor = TRUE;
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
}
/* If we have scanned the whole LRU and still are unable to
diff --git a/storage/innobase/dict/dict0dict.cc b/storage/innobase/dict/dict0dict.cc
index 8fdc64a6152..b13f68a08a7 100644
--- a/storage/innobase/dict/dict0dict.cc
+++ b/storage/innobase/dict/dict0dict.cc
@@ -1708,6 +1708,10 @@ dict_table_rename_in_cache(
foreign = *it;
+ if (foreign->referenced_table) {
+ foreign->referenced_table->referenced_set.erase(foreign);
+ }
+
if (ut_strlen(foreign->foreign_table_name)
< ut_strlen(table->name)) {
/* Allocate a longer name buffer;
@@ -1859,6 +1863,10 @@ dict_table_rename_in_cache(
table->foreign_set.erase(it);
fk_set.insert(foreign);
+
+ if (foreign->referenced_table) {
+ foreign->referenced_table->referenced_set.insert(foreign);
+ }
}
ut_a(table->foreign_set.empty());
@@ -3274,6 +3282,9 @@ dict_foreign_find(
{
ut_ad(mutex_own(&(dict_sys->mutex)));
+ ut_ad(dict_foreign_set_validate(table->foreign_set));
+ ut_ad(dict_foreign_set_validate(table->referenced_set));
+
dict_foreign_set::iterator it = table->foreign_set.find(foreign);
if (it != table->foreign_set.end()) {
@@ -5630,6 +5641,11 @@ dict_find_table_by_space(
ut_ad(space_id > 0);
+ if (dict_sys == NULL) {
+ /* This could happen when it's in redo processing. */
+ return(NULL);
+ }
+
table = UT_LIST_GET_FIRST(dict_sys->table_LRU);
num_item = UT_LIST_GET_LEN(dict_sys->table_LRU);
diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc
index f18859393ee..16e64da6619 100644
--- a/storage/innobase/dict/dict0load.cc
+++ b/storage/innobase/dict/dict0load.cc
@@ -2537,6 +2537,8 @@ func_exit:
}
}
+ ut_ad(err != DB_SUCCESS || dict_foreign_set_validate(*table));
+
return(table);
}
diff --git a/storage/innobase/dict/dict0mem.cc b/storage/innobase/dict/dict0mem.cc
index 885627a61bc..58781fce1d4 100644
--- a/storage/innobase/dict/dict0mem.cc
+++ b/storage/innobase/dict/dict0mem.cc
@@ -35,6 +35,7 @@ Created 1/8/1996 Heikki Tuuri
#include "mach0data.h"
#include "dict0dict.h"
#include "fts0priv.h"
+#include "ut0crc32.h"
#ifndef UNIV_HOTBACKUP
# include "ha_prototypes.h" /* innobase_casedn_str(),
innobase_get_lower_case_table_names */
@@ -44,6 +45,7 @@ Created 1/8/1996 Heikki Tuuri
#ifdef UNIV_BLOB_DEBUG
# include "ut0rbt.h"
#endif /* UNIV_BLOB_DEBUG */
+#include <iostream>
#define DICT_HEAP_SIZE 100 /*!< initial memory heap size when
creating a table or index object */
@@ -53,6 +55,18 @@ Created 1/8/1996 Heikki Tuuri
UNIV_INTERN mysql_pfs_key_t autoinc_mutex_key;
#endif /* UNIV_PFS_MUTEX */
+/** System databases */
+static const char* innobase_system_databases[] = {
+ "mysql/",
+ "information_schema/",
+ "performance_schema/",
+ NullS
+};
+
+/** An interger randomly initialized at startup used to make a temporary
+table name as unique as possible. */
+static ib_uint32_t dict_temp_file_num;
+
/**********************************************************************//**
Creates a table memory object.
@return own: table object */
@@ -85,6 +99,7 @@ dict_mem_table_create(
table->flags2 = (unsigned int) flags2;
table->name = static_cast<char*>(ut_malloc(strlen(name) + 1));
memcpy(table->name, name, strlen(name) + 1);
+ table->is_system_db = dict_mem_table_is_system(table->name);
table->space = (unsigned int) space;
table->n_cols = (unsigned int) (n_cols + DATA_N_SYS_COLS);
@@ -131,6 +146,36 @@ dict_mem_table_create(
}
/****************************************************************//**
+Determines if a table belongs to a system database
+@return */
+UNIV_INTERN
+bool
+dict_mem_table_is_system(
+/*================*/
+ char *name) /*!< in: table name */
+{
+ ut_ad(name);
+
+ /* table has the following format: database/table
+ and some system table are of the form SYS_* */
+ if (strchr(name, '/')) {
+ int table_len = strlen(name);
+ const char *system_db;
+ int i = 0;
+ while ((system_db = innobase_system_databases[i++])
+ && (system_db != NullS)) {
+ int len = strlen(system_db);
+ if (table_len > len && !strncmp(name, system_db, len)) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/****************************************************************//**
Free a table memory object. */
UNIV_INTERN
void
@@ -614,26 +659,120 @@ dict_mem_index_free(
mem_heap_free(index->heap);
}
-/*******************************************************************//**
-Create a temporary tablename.
-@return temporary tablename suitable for InnoDB use */
+/** Create a temporary tablename like "#sql-ibtid-inc where
+ tid = the Table ID
+ inc = a randomly initialized number that is incremented for each file
+The table ID is a 64 bit integer, can use up to 20 digits, and is
+initialized at bootstrap. The second number is 32 bits, can use up to 10
+digits, and is initialized at startup to a randomly distributed number.
+It is hoped that the combination of these two numbers will provide a
+reasonably unique temporary file name.
+@param[in] heap A memory heap
+@param[in] dbtab Table name in the form database/table name
+@param[in] id Table id
+@return A unique temporary tablename suitable for InnoDB use */
UNIV_INTERN
char*
dict_mem_create_temporary_tablename(
-/*================================*/
- mem_heap_t* heap, /*!< in: memory heap */
- const char* dbtab, /*!< in: database/table name */
- table_id_t id) /*!< in: InnoDB table id */
+ mem_heap_t* heap,
+ const char* dbtab,
+ table_id_t id)
{
- const char* dbend = strchr(dbtab, '/');
+ size_t size;
+ char* name;
+ const char* dbend = strchr(dbtab, '/');
ut_ad(dbend);
- size_t dblen = dbend - dbtab + 1;
- size_t size = tmp_file_prefix_length + 4 + 9 + 9 + dblen;
+ size_t dblen = dbend - dbtab + 1;
- char* name = static_cast<char*>(mem_heap_alloc(heap, size));
+#ifdef HAVE_ATOMIC_BUILTINS
+ /* Increment a randomly initialized number for each temp file. */
+ os_atomic_increment_uint32(&dict_temp_file_num, 1);
+#else /* HAVE_ATOMIC_BUILTINS */
+ dict_temp_file_num++;
+#endif /* HAVE_ATOMIC_BUILTINS */
+
+ size = tmp_file_prefix_length + 3 + 20 + 1 + 10 + dblen;
+ name = static_cast<char*>(mem_heap_alloc(heap, size));
memcpy(name, dbtab, dblen);
ut_snprintf(name + dblen, size - dblen,
- tmp_file_prefix "-ib" UINT64PF, id);
+ TEMP_FILE_PREFIX_INNODB UINT64PF "-" UINT32PF,
+ id, dict_temp_file_num);
+
return(name);
}
+/** Initialize dict memory variables */
+
+void
+dict_mem_init(void)
+{
+ /* Initialize a randomly distributed temporary file number */
+ ib_uint32_t now = static_cast<ib_uint32_t>(ut_time());
+
+ const byte* buf = reinterpret_cast<const byte*>(&now);
+ ut_ad(ut_crc32 != NULL);
+
+ dict_temp_file_num = ut_crc32(buf, sizeof(now));
+
+ DBUG_PRINT("dict_mem_init",
+ ("Starting Temporary file number is " UINT32PF,
+ dict_temp_file_num));
+}
+
+/** Validate the search order in the foreign key set.
+@param[in] fk_set the foreign key set to be validated
+@return true if search order is fine in the set, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_foreign_set& fk_set)
+{
+ dict_foreign_not_exists not_exists(fk_set);
+
+ dict_foreign_set::iterator it = std::find_if(
+ fk_set.begin(), fk_set.end(), not_exists);
+
+ if (it == fk_set.end()) {
+ return(true);
+ }
+
+ dict_foreign_t* foreign = *it;
+ std::cerr << "Foreign key lookup failed: " << *foreign;
+ std::cerr << fk_set;
+ ut_ad(0);
+ return(false);
+}
+
+/** Validate the search order in the foreign key sets of the table
+(foreign_set and referenced_set).
+@param[in] table table whose foreign key sets are to be validated
+@return true if foreign key sets are fine, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_table_t& table)
+{
+ return(dict_foreign_set_validate(table.foreign_set)
+ && dict_foreign_set_validate(table.referenced_set));
+}
+
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_t& foreign)
+{
+ out << "[dict_foreign_t: id='" << foreign.id << "'";
+
+ if (foreign.foreign_table_name != NULL) {
+ out << ",for: '" << foreign.foreign_table_name << "'";
+ }
+
+ out << "]";
+ return(out);
+}
+
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_set& fk_set)
+{
+ out << "[dict_foreign_set:";
+ std::for_each(fk_set.begin(), fk_set.end(), dict_foreign_print(out));
+ out << "]" << std::endl;
+ return(out);
+}
+
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index 445bf8cc232..bc12774d475 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -151,181 +151,9 @@ UNIV_INTERN mysql_pfs_key_t fil_system_mutex_key;
UNIV_INTERN mysql_pfs_key_t fil_space_latch_key;
#endif /* UNIV_PFS_RWLOCK */
-/** File node of a tablespace or the log data space */
-struct fil_node_t {
- fil_space_t* space; /*!< backpointer to the space where this node
- belongs */
- char* name; /*!< path to the file */
- ibool open; /*!< TRUE if file open */
- os_file_t handle; /*!< OS handle to the file, if file open */
- os_event_t sync_event;/*!< Condition event to group and
- serialize calls to fsync */
- ibool is_raw_disk;/*!< TRUE if the 'file' is actually a raw
- device or a raw disk partition */
- ulint size; /*!< size of the file in database pages, 0 if
- not known yet; the possible last incomplete
- megabyte may be ignored if space == 0 */
- ulint n_pending;
- /*!< count of pending i/o's on this file;
- closing of the file is not allowed if
- this is > 0 */
- ulint n_pending_flushes;
- /*!< count of pending flushes on this file;
- closing of the file is not allowed if
- this is > 0 */
- ibool being_extended;
- /*!< TRUE if the node is currently
- being extended. */
- ib_int64_t modification_counter;/*!< when we write to the file we
- increment this by one */
- ib_int64_t flush_counter;/*!< up to what
- modification_counter value we have
- flushed the modifications to disk */
- ulint file_block_size;/*!< file system block size */
- UT_LIST_NODE_T(fil_node_t) chain;
- /*!< link field for the file chain */
- UT_LIST_NODE_T(fil_node_t) LRU;
- /*!< link field for the LRU list */
- ulint magic_n;/*!< FIL_NODE_MAGIC_N */
-};
-
-/** Value of fil_node_t::magic_n */
-#define FIL_NODE_MAGIC_N 89389
-
-/** Tablespace or log data space: let us call them by a common name space */
-struct fil_space_t {
- char* name; /*!< space name = the path to the first file in
- it */
- ulint id; /*!< space id */
- ib_int64_t tablespace_version;
- /*!< in DISCARD/IMPORT this timestamp
- is used to check if we should ignore
- an insert buffer merge request for a
- page because it actually was for the
- previous incarnation of the space */
- ibool mark; /*!< this is set to TRUE at database startup if
- the space corresponds to a table in the InnoDB
- data dictionary; so we can print a warning of
- orphaned tablespaces */
- ibool stop_ios;/*!< TRUE if we want to rename the
- .ibd file of tablespace and want to
- stop temporarily posting of new i/o
- requests on the file */
- ibool stop_new_ops;
- /*!< we set this TRUE when we start
- deleting a single-table tablespace.
- When this is set following new ops
- are not allowed:
- * read IO request
- * ibuf merge
- * file flush
- Note that we can still possibly have
- new write operations because we don't
- check this flag when doing flush
- batches. */
- ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
- FIL_ARCH_LOG */
- UT_LIST_BASE_NODE_T(fil_node_t) chain;
- /*!< base node for the file chain */
- ulint size; /*!< space size in pages; 0 if a single-table
- tablespace whose size we do not know yet;
- last incomplete megabytes in data files may be
- ignored if space == 0 */
- ulint flags; /*!< tablespace flags; see
- fsp_flags_is_valid(),
- fsp_flags_get_zip_size() */
- ulint n_reserved_extents;
- /*!< number of reserved free extents for
- ongoing operations like B-tree page split */
- ulint n_pending_flushes; /*!< this is positive when flushing
- the tablespace to disk; dropping of the
- tablespace is forbidden if this is positive */
- ulint n_pending_ops;/*!< this is positive when we
- have pending operations against this
- tablespace. The pending operations can
- be ibuf merges or lock validation code
- trying to read a block.
- Dropping of the tablespace is forbidden
- if this is positive */
- hash_node_t hash; /*!< hash chain node */
- hash_node_t name_hash;/*!< hash chain the name_hash table */
-#ifndef UNIV_HOTBACKUP
- rw_lock_t latch; /*!< latch protecting the file space storage
- allocation */
-#endif /* !UNIV_HOTBACKUP */
- UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
- /*!< list of spaces with at least one unflushed
- file we have written to */
- bool is_in_unflushed_spaces;
- /*!< true if this space is currently in
- unflushed_spaces */
- UT_LIST_NODE_T(fil_space_t) space_list;
- /*!< list of all spaces */
- ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
-};
-
-/** Value of fil_space_t::magic_n */
-#define FIL_SPACE_MAGIC_N 89472
-
-/** The tablespace memory cache; also the totality of logs (the log
-data space) is stored here; below we talk about tablespaces, but also
-the ib_logfiles form a 'space' and it is handled here */
-struct fil_system_t {
-#ifndef UNIV_HOTBACKUP
- ib_mutex_t mutex; /*!< The mutex protecting the cache */
-#endif /* !UNIV_HOTBACKUP */
- hash_table_t* spaces; /*!< The hash table of spaces in the
- system; they are hashed on the space
- id */
- hash_table_t* name_hash; /*!< hash table based on the space
- name */
- UT_LIST_BASE_NODE_T(fil_node_t) LRU;
- /*!< base node for the LRU list of the
- most recently used open files with no
- pending i/o's; if we start an i/o on
- the file, we first remove it from this
- list, and return it to the start of
- the list when the i/o ends;
- log files and the system tablespace are
- not put to this list: they are opened
- after the startup, and kept open until
- shutdown */
- UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces;
- /*!< base node for the list of those
- tablespaces whose files contain
- unflushed writes; those spaces have
- at least one file node where
- modification_counter > flush_counter */
- ulint n_open; /*!< number of files currently open */
- ulint max_n_open; /*!< n_open is not allowed to exceed
- this */
- ib_int64_t modification_counter;/*!< when we write to a file we
- increment this by one */
- ulint max_assigned_id;/*!< maximum space id in the existing
- tables, or assigned during the time
- mysqld has been up; at an InnoDB
- startup we scan the data dictionary
- and set here the maximum of the
- space id's of the tables there */
- ib_int64_t tablespace_version;
- /*!< a counter which is incremented for
- every space object memory creation;
- every space mem object gets a
- 'timestamp' from this; in DISCARD/
- IMPORT this is used to check if we
- should ignore an insert buffer merge
- request */
- UT_LIST_BASE_NODE_T(fil_space_t) space_list;
- /*!< list of all file spaces */
- ibool space_id_reuse_warned;
- /* !< TRUE if fil_space_create()
- has issued a warning about
- potential space_id reuse */
-};
-
/** The tablespace memory cache. This variable is NULL before the module is
initialized. */
-static fil_system_t* fil_system = NULL;
+fil_system_t* fil_system = NULL;
/** Determine if (i) is a user tablespace id or not. */
# define fil_is_user_tablespace_id(i) ((i) > srv_undo_tablespaces_open)
diff --git a/storage/innobase/fts/fts0fts.cc b/storage/innobase/fts/fts0fts.cc
index 848d60f6e3f..ae61b77c6de 100644
--- a/storage/innobase/fts/fts0fts.cc
+++ b/storage/innobase/fts/fts0fts.cc
@@ -3393,7 +3393,8 @@ fts_fetch_doc_from_rec(
dict_table_zip_size(table),
clust_pos, &doc->text.f_len,
static_cast<mem_heap_t*>(
- doc->self_heap->arg));
+ doc->self_heap->arg),
+ NULL);
} else {
doc->text.f_str = (byte*) rec_get_nth_field(
clust_rec, offsets, clust_pos,
@@ -7077,7 +7078,8 @@ fts_init_recover_doc(
&doc.text.f_len,
static_cast<byte*>(dfield_get_data(dfield)),
zip_size, len,
- static_cast<mem_heap_t*>(doc.self_heap->arg));
+ static_cast<mem_heap_t*>(doc.self_heap->arg),
+ NULL);
} else {
doc.text.f_str = static_cast<byte*>(
dfield_get_data(dfield));
diff --git a/storage/innobase/fts/fts0que.cc b/storage/innobase/fts/fts0que.cc
index f26fd89ac76..8f4813e4b3f 100644
--- a/storage/innobase/fts/fts0que.cc
+++ b/storage/innobase/fts/fts0que.cc
@@ -1918,7 +1918,8 @@ fts_query_fetch_document(
if (dfield_is_ext(dfield)) {
data = btr_copy_externally_stored_field(
&cur_len, data, phrase->zip_size,
- dfield_get_len(dfield), phrase->heap);
+ dfield_get_len(dfield), phrase->heap,
+ NULL);
} else {
cur_len = dfield_get_len(dfield);
}
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 5b09c513e4e..2d6b9881bd3 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -275,9 +275,9 @@ static TYPELIB innodb_checksum_algorithm_typelib = {
};
/* The following counter is used to convey information to InnoDB
-about server activity: in selects it is not sensible to call
-srv_active_wake_master_thread after each fetch or search, we only do
-it every INNOBASE_WAKE_INTERVAL'th step. */
+about server activity: in case of normal DML ops it is not
+sensible to call srv_active_wake_master_thread after each
+operation, we only do it every INNOBASE_WAKE_INTERVAL'th step. */
#define INNOBASE_WAKE_INTERVAL 32
static ulong innobase_active_counter = 0;
@@ -743,6 +743,14 @@ static SHOW_VAR innodb_status_variables[]= {
(char*) &export_vars.innodb_rows_read, SHOW_LONG},
{"rows_updated",
(char*) &export_vars.innodb_rows_updated, SHOW_LONG},
+ {"system_rows_deleted",
+ (char*) &export_vars.innodb_system_rows_deleted, SHOW_LONG},
+ {"system_rows_inserted",
+ (char*) &export_vars.innodb_system_rows_inserted, SHOW_LONG},
+ {"system_rows_read",
+ (char*) &export_vars.innodb_system_rows_read, SHOW_LONG},
+ {"system_rows_updated",
+ (char*) &export_vars.innodb_system_rows_updated, SHOW_LONG},
{"num_open_files",
(char*) &export_vars.innodb_num_open_files, SHOW_LONG},
{"truncated_status_writes",
@@ -2690,11 +2698,25 @@ innobase_invalidate_query_cache(
above the InnoDB trx_sys_t->lock. The caller of this function must
not have latches of a lower rank. */
- /* Argument TRUE below means we are using transactions */
#ifdef HAVE_QUERY_CACHE
+ char qcache_key_name[2 * (NAME_LEN + 1)];
+ size_t tabname_len;
+ size_t dbname_len;
+
+ /* Construct the key("db-name\0table$name\0") for the query cache using
+ the path name("db@002dname\0table@0024name\0") of the table in its
+ canonical form. */
+ dbname_len = filename_to_tablename(full_name, qcache_key_name,
+ sizeof(qcache_key_name));
+ tabname_len = filename_to_tablename(full_name + strlen(full_name) + 1,
+ qcache_key_name + dbname_len + 1,
+ sizeof(qcache_key_name)
+ - dbname_len - 1);
+
+ /* Argument TRUE below means we are using transactions */
mysql_query_cache_invalidate4(trx->mysql_thd,
- full_name,
- (uint32) full_name_len,
+ qcache_key_name,
+ (dbname_len + tabname_len + 2),
TRUE);
#endif
}
@@ -3333,7 +3355,7 @@ innobase_change_buffering_inited_ok:
" cannot be set higher than"
" innodb_max_dirty_pages_pct.\n"
"InnoDB: Setting"
- " innodb_max_dirty_pages_pct_lwm to %lu\n",
+ " innodb_max_dirty_pages_pct_lwm to %lf\n",
srv_max_buf_pool_modified_pct);
srv_max_dirty_pages_pct_lwm = srv_max_buf_pool_modified_pct;
@@ -3988,10 +4010,6 @@ innobase_commit(
innobase_srv_conc_force_exit_innodb(trx);
- /* Tell the InnoDB server that there might be work for utility
- threads: */
- srv_active_wake_master_thread();
-
DBUG_RETURN(0);
}
@@ -8736,7 +8754,8 @@ ha_innobase::index_read(
row_sel_convert_mysql_key_to_innobase(
prebuilt->search_tuple,
- srch_key_val1, sizeof(srch_key_val1),
+ prebuilt->srch_key_val1,
+ prebuilt->srch_key_val_len,
index,
(byte*) key_ptr,
(ulint) key_len,
@@ -8782,7 +8801,13 @@ ha_innobase::index_read(
case DB_SUCCESS:
error = 0;
table->status = 0;
- srv_stats.n_rows_read.add((size_t) prebuilt->trx->id, 1);
+ if (prebuilt->table->is_system_db) {
+ srv_stats.n_system_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ } else {
+ srv_stats.n_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ }
break;
case DB_RECORD_NOT_FOUND:
error = HA_ERR_KEY_NOT_FOUND;
@@ -9058,7 +9083,13 @@ ha_innobase::general_fetch(
case DB_SUCCESS:
error = 0;
table->status = 0;
- srv_stats.n_rows_read.add((size_t) prebuilt->trx->id, 1);
+ if (prebuilt->table->is_system_db) {
+ srv_stats.n_system_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ } else {
+ srv_stats.n_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ }
break;
case DB_RECORD_NOT_FOUND:
error = HA_ERR_END_OF_FILE;
@@ -11866,11 +11897,6 @@ ha_innobase::delete_table(
log_buffer_flush_to_disk();
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
@@ -12017,11 +12043,6 @@ innobase_drop_database(
log_buffer_flush_to_disk();
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
}
@@ -12171,11 +12192,6 @@ ha_innobase::rename_table(
DEBUG_SYNC(thd, "after_innobase_rename_table");
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
@@ -12291,7 +12307,8 @@ ha_innobase::records_in_range(
row_sel_convert_mysql_key_to_innobase(
range_start,
- srch_key_val1, sizeof(srch_key_val1),
+ prebuilt->srch_key_val1,
+ prebuilt->srch_key_val_len,
index,
(byte*) (min_key ? min_key->key :
(const uchar*) 0),
@@ -12303,7 +12320,8 @@ ha_innobase::records_in_range(
row_sel_convert_mysql_key_to_innobase(
range_end,
- srch_key_val2, sizeof(srch_key_val2),
+ prebuilt->srch_key_val2,
+ prebuilt->srch_key_val_len,
index,
(byte*) (max_key ? max_key->key :
(const uchar*) 0),
@@ -12322,7 +12340,7 @@ ha_innobase::records_in_range(
n_rows = btr_estimate_n_rows_in_range(index, range_start,
mode1, range_end,
- mode2);
+ mode2, prebuilt->trx);
} else {
n_rows = HA_POS_ERROR;
@@ -15534,11 +15552,6 @@ innobase_xa_prepare(
trx_mark_sql_stat_end(trx);
}
- /* Tell the InnoDB server that there might be work for utility
- threads: */
-
- srv_active_wake_master_thread();
-
return(error);
}
@@ -15739,14 +15752,17 @@ innodb_io_capacity_max_update(
{
ulong in_val = *static_cast<const ulong*>(save);
if (in_val < srv_io_capacity) {
- in_val = srv_io_capacity;
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "innodb_io_capacity_max cannot be"
- " set lower than innodb_io_capacity.");
+ "Setting innodb_io_capacity_max %lu"
+ " lower than innodb_io_capacity %lu.",
+ in_val, srv_io_capacity);
+
+ srv_io_capacity = in_val;
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "Setting innodb_io_capacity_max to %lu",
+ "Setting innodb_io_capacity to %lu",
srv_io_capacity);
}
@@ -15769,15 +15785,19 @@ innodb_io_capacity_update(
from check function */
{
ulong in_val = *static_cast<const ulong*>(save);
+
if (in_val > srv_max_io_capacity) {
- in_val = srv_max_io_capacity;
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "innodb_io_capacity cannot be set"
- " higher than innodb_io_capacity_max.");
+ "Setting innodb_io_capacity to %lu"
+ " higher than innodb_io_capacity_max %lu",
+ in_val, srv_max_io_capacity);
+
+ srv_max_io_capacity = in_val * 2;
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "Setting innodb_io_capacity to %lu",
+ "Setting innodb_max_io_capacity to %lu",
srv_max_io_capacity);
}
@@ -15799,7 +15819,7 @@ innodb_max_dirty_pages_pct_update(
const void* save) /*!< in: immediate result
from check function */
{
- ulong in_val = *static_cast<const ulong*>(save);
+ double in_val = *static_cast<const double*>(save);
if (in_val < srv_max_dirty_pages_pct_lwm) {
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
@@ -15809,7 +15829,7 @@ innodb_max_dirty_pages_pct_update(
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Lowering"
- " innodb_max_dirty_page_pct_lwm to %lu",
+ " innodb_max_dirty_page_pct_lwm to %lf",
in_val);
srv_max_dirty_pages_pct_lwm = in_val;
@@ -15833,7 +15853,7 @@ innodb_max_dirty_pages_pct_lwm_update(
const void* save) /*!< in: immediate result
from check function */
{
- ulong in_val = *static_cast<const ulong*>(save);
+ double in_val = *static_cast<const double*>(save);
if (in_val > srv_max_buf_pool_modified_pct) {
in_val = srv_max_buf_pool_modified_pct;
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
@@ -15844,7 +15864,7 @@ innodb_max_dirty_pages_pct_lwm_update(
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Setting innodb_max_dirty_page_pct_lwm"
- " to %lu",
+ " to %lf",
in_val);
}
@@ -17567,9 +17587,8 @@ innodb_status_output_update(
const void* save __attribute__((unused)))
{
*static_cast<my_bool*>(var_ptr) = *static_cast<const my_bool*>(save);
- /* The lock timeout monitor thread also takes care of this
- output. */
- os_event_set(lock_sys->timeout_event);
+ /* Wakeup server monitor thread. */
+ os_event_set(srv_monitor_event);
}
static SHOW_VAR innodb_status_variables_export[]= {
@@ -18087,22 +18106,22 @@ static MYSQL_SYSVAR_STR(log_group_home_dir, srv_log_group_home_dir,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
"Path to InnoDB log files.", NULL, NULL, NULL);
-static MYSQL_SYSVAR_ULONG(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
+static MYSQL_SYSVAR_DOUBLE(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
PLUGIN_VAR_RQCMDARG,
"Percentage of dirty pages allowed in bufferpool.",
- NULL, innodb_max_dirty_pages_pct_update, 75, 0, 99, 0);
+ NULL, innodb_max_dirty_pages_pct_update, 75.0, 0.001, 99.999, 0);
-static MYSQL_SYSVAR_ULONG(max_dirty_pages_pct_lwm,
+static MYSQL_SYSVAR_DOUBLE(max_dirty_pages_pct_lwm,
srv_max_dirty_pages_pct_lwm,
PLUGIN_VAR_RQCMDARG,
"Percentage of dirty pages at which flushing kicks in.",
- NULL, innodb_max_dirty_pages_pct_lwm_update, 0, 0, 99, 0);
+ NULL, innodb_max_dirty_pages_pct_lwm_update, 0.001, 0.000, 99.999, 0);
-static MYSQL_SYSVAR_ULONG(adaptive_flushing_lwm,
+static MYSQL_SYSVAR_DOUBLE(adaptive_flushing_lwm,
srv_adaptive_flushing_lwm,
PLUGIN_VAR_RQCMDARG,
"Percentage of log capacity below which no adaptive flushing happens.",
- NULL, NULL, 10, 0, 70, 0);
+ NULL, NULL, 10.0, 0.0, 70.0, 0);
static MYSQL_SYSVAR_BOOL(adaptive_flushing, srv_adaptive_flushing,
PLUGIN_VAR_NOCMDARG,
@@ -18177,6 +18196,16 @@ static MYSQL_SYSVAR_ULONGLONG(stats_persistent_sample_pages,
"statistics (by ANALYZE, default 20)",
NULL, NULL, 20, 1, ~0ULL, 0);
+static MYSQL_SYSVAR_ULONGLONG(stats_modified_counter, srv_stats_modified_counter,
+ PLUGIN_VAR_RQCMDARG,
+ "The number of rows modified before we calculate new statistics (default 0 = current limits)",
+ NULL, NULL, 0, 0, ~0ULL, 0);
+
+static MYSQL_SYSVAR_BOOL(stats_traditional, srv_stats_sample_traditional,
+ PLUGIN_VAR_RQCMDARG,
+ "Enable traditional statistic calculation based on number of configured pages (default true)",
+ NULL, NULL, TRUE);
+
static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
PLUGIN_VAR_OPCMDARG,
"Enable InnoDB adaptive hash index (enabled by default). "
@@ -18952,6 +18981,8 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(stats_persistent),
MYSQL_SYSVAR(stats_persistent_sample_pages),
MYSQL_SYSVAR(stats_auto_recalc),
+ MYSQL_SYSVAR(stats_modified_counter),
+ MYSQL_SYSVAR(stats_traditional),
MYSQL_SYSVAR(adaptive_hash_index),
MYSQL_SYSVAR(stats_method),
MYSQL_SYSVAR(replication_delay),
diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h
index c1706a059e2..6da31c8ecc6 100644
--- a/storage/innobase/handler/ha_innodb.h
+++ b/storage/innobase/handler/ha_innodb.h
@@ -88,13 +88,6 @@ class ha_innobase: public handler
uchar* upd_buf; /*!< buffer used in updates */
ulint upd_buf_size; /*!< the size of upd_buf in bytes */
- uchar srch_key_val1[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
- uchar srch_key_val2[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
- /*!< buffers used in converting
- search key values from MySQL format
- to InnoDB format. For each column
- 2 bytes are used to store length,
- hence MAX_REF_PARTS*2. */
Table_flags int_table_flags;
uint primary_key;
ulong start_of_scan; /*!< this is set to 1 when we are
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index 74eb8d4a5b6..d08fe25d377 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -22,6 +22,7 @@ this program; if not, write to the Free Software Foundation, Inc.,
Smart ALTER TABLE
*******************************************************/
+#include <my_global.h>
#include <unireg.h>
#include <mysqld_error.h>
#include <log.h>
@@ -2255,7 +2256,7 @@ innobase_check_foreigns_low(
/* Check if any FOREIGN KEY constraints are defined on this
column. */
- for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
+ for (dict_foreign_set::const_iterator it = user_table->foreign_set.begin();
it != user_table->foreign_set.end();
++it) {
@@ -2292,7 +2293,7 @@ innobase_check_foreigns_low(
/* Check if any FOREIGN KEY constraints in other tables are
referring to the column that is being dropped. */
- for (dict_foreign_set::iterator it
+ for (dict_foreign_set::const_iterator it
= user_table->referenced_set.begin();
it != user_table->referenced_set.end();
++it) {
@@ -2478,7 +2479,7 @@ innobase_build_col_map(
innobase_build_col_map_add(
heap, dtuple_get_nth_field(add_cols, i),
- altered_table->s->field[sql_idx],
+ altered_table->field[sql_idx],
dict_table_is_comp(new_table));
found_col:
i++;
@@ -3262,9 +3263,6 @@ err_exit:
delete ctx;
ha_alter_info->handler_ctx = NULL;
- /* There might be work for utility threads.*/
- srv_active_wake_master_thread();
-
DBUG_RETURN(true);
}
@@ -4311,7 +4309,6 @@ func_exit:
}
trx_commit_for_mysql(prebuilt->trx);
- srv_active_wake_master_thread();
MONITOR_ATOMIC_DEC(MONITOR_PENDING_ALTER_TABLE);
DBUG_RETURN(fail);
}
@@ -4485,7 +4482,7 @@ err_exit:
rename_foreign:
trx->op_info = "renaming column in SYS_FOREIGN_COLS";
- for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
+ for (dict_foreign_set::const_iterator it = user_table->foreign_set.begin();
it != user_table->foreign_set.end();
++it) {
@@ -4520,7 +4517,7 @@ rename_foreign:
}
}
- for (dict_foreign_set::iterator it
+ for (dict_foreign_set::const_iterator it
= user_table->referenced_set.begin();
it != user_table->referenced_set.end();
++it) {
@@ -4824,14 +4821,17 @@ innobase_update_foreign_try(
/** Update the foreign key constraint definitions in the data dictionary cache
after the changes to data dictionary tables were committed.
@param ctx In-place ALTER TABLE context
+@param user_thd MySQL connection
@return InnoDB error code (should always be DB_SUCCESS) */
static __attribute__((nonnull, warn_unused_result))
dberr_t
innobase_update_foreign_cache(
/*==========================*/
- ha_innobase_inplace_ctx* ctx)
+ ha_innobase_inplace_ctx* ctx,
+ THD* user_thd)
{
dict_table_t* user_table;
+ dberr_t err = DB_SUCCESS;
DBUG_ENTER("innobase_update_foreign_cache");
@@ -4866,9 +4866,34 @@ innobase_update_foreign_cache(
/* Load the old or added foreign keys from the data dictionary
and prevent the table from being evicted from the data
dictionary cache (work around the lack of WL#6049). */
- DBUG_RETURN(dict_load_foreigns(user_table->name,
- ctx->col_names, false, true,
- DICT_ERR_IGNORE_NONE));
+ err = dict_load_foreigns(user_table->name,
+ ctx->col_names, false, true,
+ DICT_ERR_IGNORE_NONE);
+
+ if (err == DB_CANNOT_ADD_CONSTRAINT) {
+ /* It is possible there are existing foreign key are
+ loaded with "foreign_key checks" off,
+ so let's retry the loading with charset_check is off */
+ err = dict_load_foreigns(user_table->name,
+ ctx->col_names, false, false,
+ DICT_ERR_IGNORE_NONE);
+
+ /* The load with "charset_check" off is successful, warn
+ the user that the foreign key has loaded with mis-matched
+ charset */
+ if (err == DB_SUCCESS) {
+ push_warning_printf(
+ user_thd,
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_ALTER_INFO,
+ "Foreign key constraints for table '%s'"
+ " are loaded with charset check off",
+ user_table->name);
+
+ }
+ }
+
+ DBUG_RETURN(err);
}
/** Commit the changes made during prepare_inplace_alter_table()
@@ -5744,12 +5769,12 @@ ha_innobase::commit_inplace_alter_table(
/* Rename the tablespace files. */
commit_cache_rebuild(ctx);
- error = innobase_update_foreign_cache(ctx);
+ error = innobase_update_foreign_cache(ctx, user_thd);
if (error != DB_SUCCESS) {
goto foreign_fail;
}
} else {
- error = innobase_update_foreign_cache(ctx);
+ error = innobase_update_foreign_cache(ctx, user_thd);
if (error != DB_SUCCESS) {
foreign_fail:
diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h
index f1e4406fcf7..d0fd5c2158a 100644
--- a/storage/innobase/include/btr0cur.h
+++ b/storage/innobase/include/btr0cur.h
@@ -561,7 +561,8 @@ btr_estimate_n_rows_in_range(
const dtuple_t* tuple1, /*!< in: range start, may also be empty tuple */
ulint mode1, /*!< in: search mode for range start */
const dtuple_t* tuple2, /*!< in: range end, may also be empty tuple */
- ulint mode2); /*!< in: search mode for range end */
+ ulint mode2, /*!< in: search mode for range end */
+ trx_t* trx); /*!< in: trx */
/*******************************************************************//**
Estimates the number of different key values in a given index, for
each n-column prefix of the index where 1 <= n <= dict_index_get_n_unique(index).
@@ -697,7 +698,8 @@ btr_copy_externally_stored_field_prefix(
field containing also the reference to
the external part; must be protected by
a lock or a page latch */
- ulint local_len);/*!< in: length of data, in bytes */
+ ulint local_len,/*!< in: length of data, in bytes */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Copies an externally stored field of a record to mem heap. The
clustered index record must be protected by a lock or a page latch.
@@ -714,7 +716,8 @@ btr_copy_externally_stored_field(
ulint zip_size,/*!< in: nonzero=compressed BLOB page size,
zero for uncompressed BLOBs */
ulint local_len,/*!< in: length of data */
- mem_heap_t* heap); /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Copies an externally stored field of a record to mem heap.
@return the field copied to heap, or NULL if the field is incomplete */
@@ -729,7 +732,8 @@ btr_rec_copy_externally_stored_field(
zero for uncompressed BLOBs */
ulint no, /*!< in: field number */
ulint* len, /*!< out: length of the field */
- mem_heap_t* heap); /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Flags the data tuple fields that are marked as extern storage in the
update vector. We use this function to remember which fields we must
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 4917b57f325..7ea29169a48 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -795,7 +795,7 @@ Returns the ratio in percents of modified pages in the buffer pool /
database pages in the buffer pool.
@return modified page percentage ratio */
UNIV_INTERN
-ulint
+double
buf_get_modified_ratio_pct(void);
/*============================*/
/**********************************************************************//**
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index 6528ee39acc..1d59bc09f6d 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -50,6 +50,7 @@ Created 1/8/1996 Heikki Tuuri
#include "os0once.h"
#include <set>
#include <algorithm>
+#include <iterator>
/* Forward declaration. */
struct ib_rbt_t;
@@ -307,6 +308,14 @@ dict_mem_table_create(
ulint n_cols, /*!< in: number of columns */
ulint flags, /*!< in: table flags */
ulint flags2); /*!< in: table flags2 */
+/**********************************************************************//**
+Determines if a table belongs to a system database
+@return */
+UNIV_INTERN
+bool
+dict_mem_table_is_system(
+/*==================*/
+ char *name); /*!< in: table name */
/****************************************************************//**
Free a table memory object. */
UNIV_INTERN
@@ -435,16 +444,29 @@ dict_mem_referenced_table_name_lookup_set(
dict_foreign_t* foreign, /*!< in/out: foreign struct */
ibool do_alloc); /*!< in: is an alloc needed */
-/*******************************************************************//**
-Create a temporary tablename.
-@return temporary tablename suitable for InnoDB use */
-UNIV_INTERN __attribute__((nonnull, warn_unused_result))
+/** Create a temporary tablename like "#sql-ibtid-inc where
+ tid = the Table ID
+ inc = a randomly initialized number that is incremented for each file
+The table ID is a 64 bit integer, can use up to 20 digits, and is
+initialized at bootstrap. The second number is 32 bits, can use up to 10
+digits, and is initialized at startup to a randomly distributed number.
+It is hoped that the combination of these two numbers will provide a
+reasonably unique temporary file name.
+@param[in] heap A memory heap
+@param[in] dbtab Table name in the form database/table name
+@param[in] id Table id
+@return A unique temporary tablename suitable for InnoDB use */
+UNIV_INTERN
char*
dict_mem_create_temporary_tablename(
-/*================================*/
- mem_heap_t* heap, /*!< in: memory heap */
- const char* dbtab, /*!< in: database/table name */
- table_id_t id); /*!< in: InnoDB table id */
+ mem_heap_t* heap,
+ const char* dbtab,
+ table_id_t id);
+
+/** Initialize dict memory variables */
+
+void
+dict_mem_init(void);
/** Data structure for a column in a table */
struct dict_col_t{
@@ -785,6 +807,22 @@ struct dict_foreign_t{
dict_index_t* referenced_index;/*!< referenced index */
};
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_t& foreign);
+
+struct dict_foreign_print {
+
+ dict_foreign_print(std::ostream& out)
+ : m_out(out)
+ {}
+
+ void operator()(const dict_foreign_t* foreign) {
+ m_out << *foreign;
+ }
+private:
+ std::ostream& m_out;
+};
+
/** Compare two dict_foreign_t objects using their ids. Used in the ordering
of dict_table_t::foreign_set and dict_table_t::referenced_set. It returns
true if the first argument is considered to go before the second in the
@@ -854,6 +892,40 @@ struct dict_foreign_matches_id {
typedef std::set<dict_foreign_t*, dict_foreign_compare> dict_foreign_set;
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_set& fk_set);
+
+/** Function object to check if a foreign key object is there
+in the given foreign key set or not. It returns true if the
+foreign key is not found, false otherwise */
+struct dict_foreign_not_exists {
+ dict_foreign_not_exists(const dict_foreign_set& obj_)
+ : m_foreigns(obj_)
+ {}
+
+ /* Return true if the given foreign key is not found */
+ bool operator()(dict_foreign_t* const & foreign) const {
+ return(m_foreigns.find(foreign) == m_foreigns.end());
+ }
+private:
+ const dict_foreign_set& m_foreigns;
+};
+
+/** Validate the search order in the foreign key set.
+@param[in] fk_set the foreign key set to be validated
+@return true if search order is fine in the set, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_foreign_set& fk_set);
+
+/** Validate the search order in the foreign key sets of the table
+(foreign_set and referenced_set).
+@param[in] table table whose foreign key sets are to be validated
+@return true if foreign key sets are fine, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_table_t& table);
+
/*********************************************************************//**
Frees a foreign key struct. */
inline
@@ -955,6 +1027,10 @@ struct dict_table_t{
the string contains n_cols, it will be
allocated from a temporary heap. The final
string will be allocated from table->heap. */
+ bool is_system_db;
+ /*!< True if the table belongs to a system
+ database (mysql, information_schema or
+ performance_schema) */
#ifndef UNIV_HOTBACKUP
hash_node_t name_hash; /*!< hash chain node */
hash_node_t id_hash; /*!< hash chain node */
diff --git a/storage/innobase/include/dict0types.h b/storage/innobase/include/dict0types.h
index 5f471d1a45f..35430e8ea62 100644
--- a/storage/innobase/include/dict0types.h
+++ b/storage/innobase/include/dict0types.h
@@ -86,6 +86,7 @@ typedef enum {
/** Prefix for tmp tables, adopted from sql/table.h */
#define tmp_file_prefix "#sql"
#define tmp_file_prefix_length 4
+#define TEMP_FILE_PREFIX_INNODB "#sql-ib"
#define TEMP_TABLE_PREFIX "#sql"
#define TEMP_TABLE_PATH_PREFIX "/" TEMP_TABLE_PREFIX
diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h
index 5148773d95c..9c453d3f4ca 100644
--- a/storage/innobase/include/fil0fil.h
+++ b/storage/innobase/include/fil0fil.h
@@ -34,6 +34,7 @@ Created 10/25/1995 Heikki Tuuri
#include "dict0types.h"
#include "ut0byte.h"
#include "os0file.h"
+#include "hash0hash.h"
#ifndef UNIV_HOTBACKUP
#include "sync0rw.h"
#include "ibuf0types.h"
@@ -215,6 +216,184 @@ struct fsp_open_info {
#endif /* UNIV_LOG_ARCHIVE */
};
+struct fil_space_t;
+
+/** File node of a tablespace or the log data space */
+struct fil_node_t {
+ fil_space_t* space; /*!< backpointer to the space where this node
+ belongs */
+ char* name; /*!< path to the file */
+ ibool open; /*!< TRUE if file open */
+ os_file_t handle; /*!< OS handle to the file, if file open */
+ os_event_t sync_event;/*!< Condition event to group and
+ serialize calls to fsync */
+ ibool is_raw_disk;/*!< TRUE if the 'file' is actually a raw
+ device or a raw disk partition */
+ ulint size; /*!< size of the file in database pages, 0 if
+ not known yet; the possible last incomplete
+ megabyte may be ignored if space == 0 */
+ ulint n_pending;
+ /*!< count of pending i/o's on this file;
+ closing of the file is not allowed if
+ this is > 0 */
+ ulint n_pending_flushes;
+ /*!< count of pending flushes on this file;
+ closing of the file is not allowed if
+ this is > 0 */
+ ibool being_extended;
+ /*!< TRUE if the node is currently
+ being extended. */
+ ib_int64_t modification_counter;/*!< when we write to the file we
+ increment this by one */
+ ib_int64_t flush_counter;/*!< up to what
+ modification_counter value we have
+ flushed the modifications to disk */
+ ulint file_block_size;/*!< file system block size */
+ UT_LIST_NODE_T(fil_node_t) chain;
+ /*!< link field for the file chain */
+ UT_LIST_NODE_T(fil_node_t) LRU;
+ /*!< link field for the LRU list */
+ ulint magic_n;/*!< FIL_NODE_MAGIC_N */
+};
+
+/** Value of fil_node_t::magic_n */
+#define FIL_NODE_MAGIC_N 89389
+
+/** Tablespace or log data space: let us call them by a common name space */
+struct fil_space_t {
+ char* name; /*!< space name = the path to the first file in
+ it */
+ ulint id; /*!< space id */
+ ib_int64_t tablespace_version;
+ /*!< in DISCARD/IMPORT this timestamp
+ is used to check if we should ignore
+ an insert buffer merge request for a
+ page because it actually was for the
+ previous incarnation of the space */
+ ibool mark; /*!< this is set to TRUE at database startup if
+ the space corresponds to a table in the InnoDB
+ data dictionary; so we can print a warning of
+ orphaned tablespaces */
+ ibool stop_ios;/*!< TRUE if we want to rename the
+ .ibd file of tablespace and want to
+ stop temporarily posting of new i/o
+ requests on the file */
+ ibool stop_new_ops;
+ /*!< we set this TRUE when we start
+ deleting a single-table tablespace.
+ When this is set following new ops
+ are not allowed:
+ * read IO request
+ * ibuf merge
+ * file flush
+ Note that we can still possibly have
+ new write operations because we don't
+ check this flag when doing flush
+ batches. */
+ ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
+ FIL_ARCH_LOG */
+ UT_LIST_BASE_NODE_T(fil_node_t) chain;
+ /*!< base node for the file chain */
+ ulint size; /*!< space size in pages; 0 if a single-table
+ tablespace whose size we do not know yet;
+ last incomplete megabytes in data files may be
+ ignored if space == 0 */
+ ulint flags; /*!< tablespace flags; see
+ fsp_flags_is_valid(),
+ fsp_flags_get_zip_size() */
+ ulint n_reserved_extents;
+ /*!< number of reserved free extents for
+ ongoing operations like B-tree page split */
+ ulint n_pending_flushes; /*!< this is positive when flushing
+ the tablespace to disk; dropping of the
+ tablespace is forbidden if this is positive */
+ ulint n_pending_ops;/*!< this is positive when we
+ have pending operations against this
+ tablespace. The pending operations can
+ be ibuf merges or lock validation code
+ trying to read a block.
+ Dropping of the tablespace is forbidden
+ if this is positive */
+ hash_node_t hash; /*!< hash chain node */
+ hash_node_t name_hash;/*!< hash chain the name_hash table */
+#ifndef UNIV_HOTBACKUP
+ rw_lock_t latch; /*!< latch protecting the file space storage
+ allocation */
+#endif /* !UNIV_HOTBACKUP */
+ UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
+ /*!< list of spaces with at least one unflushed
+ file we have written to */
+ bool is_in_unflushed_spaces;
+ /*!< true if this space is currently in
+ unflushed_spaces */
+ UT_LIST_NODE_T(fil_space_t) space_list;
+ /*!< list of all spaces */
+ ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
+};
+
+/** Value of fil_space_t::magic_n */
+#define FIL_SPACE_MAGIC_N 89472
+
+/** The tablespace memory cache; also the totality of logs (the log
+data space) is stored here; below we talk about tablespaces, but also
+the ib_logfiles form a 'space' and it is handled here */
+struct fil_system_t {
+#ifndef UNIV_HOTBACKUP
+ ib_mutex_t mutex; /*!< The mutex protecting the cache */
+#endif /* !UNIV_HOTBACKUP */
+ hash_table_t* spaces; /*!< The hash table of spaces in the
+ system; they are hashed on the space
+ id */
+ hash_table_t* name_hash; /*!< hash table based on the space
+ name */
+ UT_LIST_BASE_NODE_T(fil_node_t) LRU;
+ /*!< base node for the LRU list of the
+ most recently used open files with no
+ pending i/o's; if we start an i/o on
+ the file, we first remove it from this
+ list, and return it to the start of
+ the list when the i/o ends;
+ log files and the system tablespace are
+ not put to this list: they are opened
+ after the startup, and kept open until
+ shutdown */
+ UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces;
+ /*!< base node for the list of those
+ tablespaces whose files contain
+ unflushed writes; those spaces have
+ at least one file node where
+ modification_counter > flush_counter */
+ ulint n_open; /*!< number of files currently open */
+ ulint max_n_open; /*!< n_open is not allowed to exceed
+ this */
+ ib_int64_t modification_counter;/*!< when we write to a file we
+ increment this by one */
+ ulint max_assigned_id;/*!< maximum space id in the existing
+ tables, or assigned during the time
+ mysqld has been up; at an InnoDB
+ startup we scan the data dictionary
+ and set here the maximum of the
+ space id's of the tables there */
+ ib_int64_t tablespace_version;
+ /*!< a counter which is incremented for
+ every space object memory creation;
+ every space mem object gets a
+ 'timestamp' from this; in DISCARD/
+ IMPORT this is used to check if we
+ should ignore an insert buffer merge
+ request */
+ UT_LIST_BASE_NODE_T(fil_space_t) space_list;
+ /*!< list of all file spaces */
+ ibool space_id_reuse_warned;
+ /* !< TRUE if fil_space_create()
+ has issued a warning about
+ potential space_id reuse */
+};
+
+/** The tablespace memory cache. This variable is NULL before the module is
+initialized. */
+extern fil_system_t* fil_system;
+
#ifndef UNIV_HOTBACKUP
/*******************************************************************//**
Returns the version number of a tablespace, -1 if not found.
diff --git a/storage/innobase/include/log0log.ic b/storage/innobase/include/log0log.ic
index 7c79eb96ca9..38ed2b51a4e 100644
--- a/storage/innobase/include/log0log.ic
+++ b/storage/innobase/include/log0log.ic
@@ -442,14 +442,14 @@ lsn_t
log_get_lsn_nowait(void)
/*=============*/
{
- lsn_t lsn;
+ lsn_t lsn=0;
- if (mutex_enter_nowait(&(log_sys->mutex)))
- return 0;
+ if (!mutex_enter_nowait(&(log_sys->mutex))) {
- lsn = log_sys->lsn;
+ lsn = log_sys->lsn;
- mutex_exit(&(log_sys->mutex));
+ mutex_exit(&(log_sys->mutex));
+ }
return(lsn);
}
diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h
index ed7fd76d425..b91dbd0353c 100644
--- a/storage/innobase/include/mtr0mtr.h
+++ b/storage/innobase/include/mtr0mtr.h
@@ -35,6 +35,7 @@ Created 11/26/1995 Heikki Tuuri
#include "ut0byte.h"
#include "mtr0types.h"
#include "page0types.h"
+#include "trx0types.h"
/* Logging modes for a mini-transaction */
#define MTR_LOG_ALL 21 /* default mode: log all operations
@@ -204,10 +205,22 @@ functions). The page number parameter was originally written as 0. @{ */
Starts a mini-transaction. */
UNIV_INLINE
void
+mtr_start_trx(
+/*======*/
+ mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx) /*!< in: transaction */
+ __attribute__((nonnull (1)));
+/***************************************************************//**
+Starts a mini-transaction. */
+UNIV_INLINE
+void
mtr_start(
/*======*/
mtr_t* mtr) /*!< out: mini-transaction */
- __attribute__((nonnull));
+{
+ mtr_start_trx(mtr, NULL);
+}
+ __attribute__((nonnull))
/***************************************************************//**
Commits a mini-transaction. */
UNIV_INTERN
@@ -403,6 +416,7 @@ struct mtr_t{
#ifdef UNIV_DEBUG
ulint magic_n;
#endif /* UNIV_DEBUG */
+ trx_t* trx; /*!< transaction */
};
#ifdef UNIV_DEBUG
diff --git a/storage/innobase/include/mtr0mtr.ic b/storage/innobase/include/mtr0mtr.ic
index a9f02430220..44d548e9b64 100644
--- a/storage/innobase/include/mtr0mtr.ic
+++ b/storage/innobase/include/mtr0mtr.ic
@@ -43,9 +43,10 @@ mtr_block_dirtied(
Starts a mini-transaction. */
UNIV_INLINE
void
-mtr_start(
+mtr_start_trx(
/*======*/
- mtr_t* mtr) /*!< out: mini-transaction */
+ mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx) /*!< in: transaction */
{
UNIV_MEM_INVALID(mtr, sizeof *mtr);
@@ -58,6 +59,7 @@ mtr_start(
mtr->made_dirty = FALSE;
mtr->n_log_recs = 0;
mtr->n_freed_pages = 0;
+ mtr->trx = trx;
ut_d(mtr->state = MTR_ACTIVE);
ut_d(mtr->magic_n = MTR_MAGIC_N);
diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h
index e82ef17f718..8f8aef4f45c 100644
--- a/storage/innobase/include/os0file.h
+++ b/storage/innobase/include/os0file.h
@@ -140,6 +140,7 @@ enum os_file_create_t {
/* @} */
/** Error codes from os_file_get_last_error @{ */
+#define OS_FILE_NAME_TOO_LONG 36
#define OS_FILE_NOT_FOUND 71
#define OS_FILE_DISK_FULL 72
#define OS_FILE_ALREADY_EXISTS 73
diff --git a/storage/innobase/include/os0sync.h b/storage/innobase/include/os0sync.h
index 8bf57677ecf..b16a99b51c0 100644
--- a/storage/innobase/include/os0sync.h
+++ b/storage/innobase/include/os0sync.h
@@ -322,12 +322,29 @@ pfs_os_fast_mutex_unlock(
#endif /* UNIV_PFS_MUTEX */
/**********************************************************//**
+Acquires ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required.
+@return 0 if success, != 0 if was reserved by another thread */
+UNIV_INLINE
+ulint
+os_fast_mutex_trylock_full_barrier(
+/*==================*/
+ os_fast_mutex_t* fast_mutex); /*!< in: mutex to acquire */
+/**********************************************************//**
Releases ownership of a fast mutex. */
UNIV_INTERN
void
os_fast_mutex_unlock_func(
/*======================*/
fast_mutex_t* fast_mutex); /*!< in: mutex to release */
+/**********************************************************//**
+Releases ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required. */
+UNIV_INTERN
+void
+os_fast_mutex_unlock_full_barrier(
+/*=================*/
+ os_fast_mutex_t* fast_mutex); /*!< in: mutex to release */
/*********************************************************//**
Initializes an operating system fast mutex semaphore. */
UNIV_INTERN
@@ -432,14 +449,31 @@ amount to decrement. */
/**********************************************************//**
Returns the old value of *ptr, atomically sets *ptr to new_val */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
- __sync_lock_test_and_set(ptr, (byte) new_val)
-
# define os_atomic_test_and_set_ulint(ptr, new_val) \
__sync_lock_test_and_set(ptr, new_val)
-# define os_atomic_lock_release_byte(ptr) \
- __sync_lock_release(ptr)
+#ifdef __powerpc__
+/*
+ os_atomic_test_and_set_byte_release() should imply a release barrier before
+ setting, and a full barrier after. But __sync_lock_test_and_set() is only
+ documented as an aquire barrier. So on PowerPC we need to add the full
+ barrier explicitly. */
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ do { __sync_lock_release(ptr); \
+ __sync_synchronize(); } while (0)
+#else
+/*
+ On x86, __sync_lock_test_and_set() happens to be full barrier, due to
+ LOCK prefix.
+*/
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ __sync_lock_test_and_set(ptr, (byte) new_val)
+#endif
+/*
+ os_atomic_test_and_set_byte_acquire() is a full memory barrier on x86. But
+ in general, just an aquire barrier should be sufficient. */
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ __sync_lock_test_and_set(ptr, (byte) new_val)
#elif defined(HAVE_IB_SOLARIS_ATOMICS)
@@ -517,14 +551,14 @@ amount to decrement. */
/**********************************************************//**
Returns the old value of *ptr, atomically sets *ptr to new_val */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
- atomic_swap_uchar(ptr, new_val)
-
# define os_atomic_test_and_set_ulint(ptr, new_val) \
atomic_swap_ulong(ptr, new_val)
-# define os_atomic_lock_release_byte(ptr) \
- (void) atomic_swap_uchar(ptr, 0)
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ atomic_swap_uchar(ptr, new_val)
+
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ atomic_swap_uchar(ptr, new_val)
#elif defined(HAVE_WINDOWS_ATOMICS)
@@ -644,7 +678,9 @@ Returns the old value of *ptr, atomically sets *ptr to new_val.
InterlockedExchange() operates on LONG, and the LONG will be
clobbered */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ ((byte) InterlockedExchange(ptr, new_val))
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
((byte) InterlockedExchange(ptr, new_val))
# define os_atomic_test_and_set_ulong(ptr, new_val) \
@@ -713,11 +749,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# define HAVE_MEMORY_BARRIER
# define os_rmb __atomic_thread_fence(__ATOMIC_ACQUIRE)
# define os_wmb __atomic_thread_fence(__ATOMIC_RELEASE)
-#ifdef __powerpc__
-# define os_isync __asm __volatile ("isync":::"memory")
-#else
-#define os_isync do { } while(0)
-#endif
+# define os_mb __atomic_thread_fence(__ATOMIC_SEQ_CST)
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"GCC builtin __atomic_thread_fence() is used for memory barrier"
@@ -726,7 +758,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# define HAVE_MEMORY_BARRIER
# define os_rmb __sync_synchronize()
# define os_wmb __sync_synchronize()
-# define os_isync __sync_synchronize()
+# define os_mb __sync_synchronize()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"GCC builtin __sync_synchronize() is used for memory barrier"
@@ -735,7 +767,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# include <mbarrier.h>
# define os_rmb __machine_r_barrier()
# define os_wmb __machine_w_barrier()
-# define os_isync os_rmb; os_wmb
+# define os_mb __machine_rw_barrier()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"Solaris memory ordering functions are used for memory barrier"
@@ -744,17 +776,14 @@ architecture. Disable memory barrier for Intel architecture for now. */
# include <intrin.h>
# define os_rmb _mm_lfence()
# define os_wmb _mm_sfence()
-# define os_isync os_rmb; os_wmb
+# define os_mb _mm_mfence()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"_mm_lfence() and _mm_sfence() are used for memory barrier"
-# define os_atomic_lock_release_byte(ptr) \
- (void) InterlockedExchange(ptr, 0)
-
#else
# define os_rmb do { } while(0)
# define os_wmb do { } while(0)
-# define os_isync do { } while(0)
+# define os_mb do { } while(0)
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"Memory barrier is not used"
#endif
diff --git a/storage/innobase/include/os0sync.ic b/storage/innobase/include/os0sync.ic
index 9a7e520ece6..4ebf84dba98 100644
--- a/storage/innobase/include/os0sync.ic
+++ b/storage/innobase/include/os0sync.ic
@@ -232,3 +232,35 @@ win_cmp_and_xchg_dword(
#endif /* HAVE_WINDOWS_ATOMICS */
+
+/**********************************************************//**
+Acquires ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required.
+@return 0 if success, != 0 if was reserved by another thread */
+UNIV_INLINE
+ulint
+os_fast_mutex_trylock_full_barrier(
+/*==================*/
+ os_fast_mutex_t* fast_mutex) /*!< in: mutex to acquire */
+{
+#ifdef __WIN__
+ if (TryEnterCriticalSection(&fast_mutex->mutex)) {
+
+ return(0);
+ } else {
+
+ return(1);
+ }
+#else
+ /* NOTE that the MySQL my_pthread.h redefines pthread_mutex_trylock
+ so that it returns 0 on success. In the operating system
+ libraries, HP-UX-10.20 follows the old Posix 1003.4a Draft 4 and
+ returns 1 on success (but MySQL remaps that to 0), while Linux,
+ FreeBSD, Solaris, AIX, Tru64 Unix, HP-UX-11.0 return 0 on success. */
+
+#ifdef __powerpc__
+ os_mb;
+#endif
+ return((ulint) pthread_mutex_trylock(&fast_mutex->mutex));
+#endif
+}
diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h
index 3cff5a41b8e..440001410f0 100644
--- a/storage/innobase/include/row0mysql.h
+++ b/storage/innobase/include/row0mysql.h
@@ -879,6 +879,14 @@ struct row_prebuilt_t {
unsigned innodb_api:1; /*!< whether this is a InnoDB API
query */
const rec_t* innodb_api_rec; /*!< InnoDB API search result */
+ byte* srch_key_val1; /*!< buffer used in converting
+ search key values from MySQL format
+ to InnoDB format.*/
+ byte* srch_key_val2; /*!< buffer used in converting
+ search key values from MySQL format
+ to InnoDB format.*/
+ uint srch_key_val_len; /*!< Size of search key */
+
};
/** Callback for row_mysql_sys_index_iterate() */
diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h
index beac1605345..0a47d514e1b 100644
--- a/storage/innobase/include/srv0mon.h
+++ b/storage/innobase/include/srv0mon.h
@@ -391,6 +391,10 @@ enum monitor_id_t {
MONITOR_OLVD_ROW_INSERTED,
MONITOR_OLVD_ROW_DELETED,
MONITOR_OLVD_ROW_UPDTATED,
+ MONITOR_OLVD_SYSTEM_ROW_READ,
+ MONITOR_OLVD_SYSTEM_ROW_INSERTED,
+ MONITOR_OLVD_SYSTEM_ROW_DELETED,
+ MONITOR_OLVD_SYSTEM_ROW_UPDATED,
/* Data DDL related counters */
MONITOR_MODULE_DDL_STATS,
diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
index e87750b7540..52f2f22b372 100644
--- a/storage/innobase/include/srv0srv.h
+++ b/storage/innobase/include/srv0srv.h
@@ -158,6 +158,18 @@ struct srv_stats_t {
/** Number of rows inserted */
ulint_ctr_64_t n_rows_inserted;
+ /** Number of system rows read. */
+ ulint_ctr_64_t n_system_rows_read;
+
+ /** Number of system rows updated */
+ ulint_ctr_64_t n_system_rows_updated;
+
+ /** Number of system rows deleted */
+ ulint_ctr_64_t n_system_rows_deleted;
+
+ /** Number of system rows inserted */
+ ulint_ctr_64_t n_system_rows_inserted;
+
/** Number of times secondary index lookup triggered cluster lookup */
ulint_ctr_64_t n_sec_rec_cluster_reads;
@@ -401,10 +413,10 @@ extern ulint srv_win_file_flush_method;
extern ulint srv_max_n_open_files;
-extern ulong srv_max_dirty_pages_pct;
-extern ulong srv_max_dirty_pages_pct_lwm;
+extern double srv_max_dirty_pages_pct;
+extern double srv_max_dirty_pages_pct_lwm;
-extern ulong srv_adaptive_flushing_lwm;
+extern double srv_adaptive_flushing_lwm;
extern ulong srv_flushing_avg_loops;
extern ulong srv_force_recovery;
@@ -425,6 +437,8 @@ extern unsigned long long srv_stats_transient_sample_pages;
extern my_bool srv_stats_persistent;
extern unsigned long long srv_stats_persistent_sample_pages;
extern my_bool srv_stats_auto_recalc;
+extern unsigned long long srv_stats_modified_counter;
+extern my_bool srv_stats_sample_traditional;
extern ibool srv_use_doublewrite_buf;
extern ulong srv_doublewrite_batch_size;
@@ -432,7 +446,7 @@ extern ulong srv_checksum_algorithm;
extern my_bool srv_force_primary_key;
-extern ulong srv_max_buf_pool_modified_pct;
+extern double srv_max_buf_pool_modified_pct;
extern ulong srv_max_purge_lag;
extern ulong srv_max_purge_lag_delay;
@@ -928,6 +942,10 @@ struct export_var_t{
ulint innodb_rows_inserted; /*!< srv_n_rows_inserted */
ulint innodb_rows_updated; /*!< srv_n_rows_updated */
ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */
+ ulint innodb_system_rows_read; /*!< srv_n_system_rows_read */
+ ulint innodb_system_rows_inserted; /*!< srv_n_system_rows_inserted */
+ ulint innodb_system_rows_updated; /*!< srv_n_system_rows_updated */
+ ulint innodb_system_rows_deleted; /*!< srv_n_system_rows_deleted*/
ulint innodb_num_open_files; /*!< fil_n_file_opened */
ulint innodb_truncated_status_writes; /*!< srv_truncated_status_writes */
ulint innodb_available_undo_logs; /*!< srv_available_undo_logs
diff --git a/storage/innobase/include/sync0arr.h b/storage/innobase/include/sync0arr.h
index 15dbdcb540d..0e735192024 100644
--- a/storage/innobase/include/sync0arr.h
+++ b/storage/innobase/include/sync0arr.h
@@ -148,6 +148,12 @@ sync_array_t*
sync_array_get(void);
/*================*/
+/**********************************************************************//**
+Prints info of the wait array without using any mutexes/semaphores. */
+UNIV_INTERN
+void
+sync_array_print_innodb(void);
+
#ifndef UNIV_NONINL
#include "sync0arr.ic"
#endif
diff --git a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h
index b1d99f7244c..f26e66f1a87 100644
--- a/storage/innobase/include/sync0sync.h
+++ b/storage/innobase/include/sync0sync.h
@@ -49,8 +49,6 @@ extern "C" my_bool timed_mutexes;
#ifdef HAVE_WINDOWS_ATOMICS
typedef LONG lock_word_t; /*!< On Windows, InterlockedExchange operates
on LONG variable */
-#elif defined(HAVE_ATOMIC_BUILTINS) && !defined(HAVE_ATOMIC_BUILTINS_BYTE)
-typedef ulint lock_word_t;
#else
typedef byte lock_word_t;
#endif
diff --git a/storage/innobase/include/sync0sync.ic b/storage/innobase/include/sync0sync.ic
index f9017230497..a5887b1fd6f 100644
--- a/storage/innobase/include/sync0sync.ic
+++ b/storage/innobase/include/sync0sync.ic
@@ -80,15 +80,11 @@ ib_mutex_test_and_set(
ib_mutex_t* mutex) /*!< in: mutex */
{
#if defined(HAVE_ATOMIC_BUILTINS)
-# if defined(HAVE_ATOMIC_BUILTINS_BYTE)
- return(os_atomic_test_and_set_byte(&mutex->lock_word, 1));
-# else
- return(os_atomic_test_and_set_ulint(&mutex->lock_word, 1));
-# endif
+ return(os_atomic_test_and_set_byte_acquire(&mutex->lock_word, 1));
#else
ibool ret;
- ret = os_fast_mutex_trylock(&(mutex->os_fast_mutex));
+ ret = os_fast_mutex_trylock_full_barrier(&(mutex->os_fast_mutex));
if (ret == 0) {
/* We check that os_fast_mutex_trylock does not leak
@@ -96,7 +92,6 @@ ib_mutex_test_and_set(
ut_a(mutex->lock_word == 0);
mutex->lock_word = 1;
- os_wmb;
}
return((byte) ret);
@@ -113,11 +108,14 @@ mutex_reset_lock_word(
ib_mutex_t* mutex) /*!< in: mutex */
{
#if defined(HAVE_ATOMIC_BUILTINS)
- os_atomic_lock_release_byte(&mutex->lock_word);
+ /* In theory __sync_lock_release should be used to release the lock.
+ Unfortunately, it does not work properly alone. The workaround is
+ that more conservative __sync_lock_test_and_set is used instead. */
+ os_atomic_test_and_set_byte_release(&mutex->lock_word, 0);
#else
mutex->lock_word = 0;
- os_fast_mutex_unlock(&(mutex->os_fast_mutex));
+ os_fast_mutex_unlock_full_barrier(&(mutex->os_fast_mutex));
#endif
}
@@ -149,7 +147,6 @@ mutex_get_waiters(
ptr = &(mutex->waiters);
- os_rmb;
return(*ptr); /* Here we assume that the read of a single
word from memory is atomic */
}
@@ -184,7 +181,6 @@ mutex_exit_func(
to wake up possible hanging threads if
they are missed in mutex_signal_object. */
- os_isync;
if (mutex_get_waiters(mutex) != 0) {
mutex_signal_object(mutex);
diff --git a/storage/innobase/include/trx0undo.h b/storage/innobase/include/trx0undo.h
index 61b0dabb1e6..660551961a6 100644
--- a/storage/innobase/include/trx0undo.h
+++ b/storage/innobase/include/trx0undo.h
@@ -243,22 +243,13 @@ Truncates an undo log from the end. This function is used during a rollback
to free space from an undo log. */
UNIV_INTERN
void
-trx_undo_truncate_end_func(
+trx_undo_truncate_end(
/*=======================*/
-#ifdef UNIV_DEBUG
- const trx_t* trx, /*!< in: transaction whose undo log it is */
-#endif /* UNIV_DEBUG */
+ trx_t* trx, /*!< in: transaction whose undo log it is */
trx_undo_t* undo, /*!< in/out: undo log */
undo_no_t limit) /*!< in: all undo records with undo number
>= this value should be truncated */
__attribute__((nonnull));
-#ifdef UNIV_DEBUG
-# define trx_undo_truncate_end(trx,undo,limit) \
- trx_undo_truncate_end_func(trx,undo,limit)
-#else /* UNIV_DEBUG */
-# define trx_undo_truncate_end(trx,undo,limit) \
- trx_undo_truncate_end_func(undo,limit)
-#endif /* UNIV_DEBUG */
/***********************************************************************//**
Truncates an undo log from the start. This function is used during a purge
diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i
index 685d89dc854..a4c401134f9 100644
--- a/storage/innobase/include/univ.i
+++ b/storage/innobase/include/univ.i
@@ -45,7 +45,7 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 5
#define INNODB_VERSION_MINOR 6
-#define INNODB_VERSION_BUGFIX 20
+#define INNODB_VERSION_BUGFIX 21
/* The following is the InnoDB version as shown in
SELECT plugin_version FROM information_schema.plugins;
diff --git a/storage/innobase/include/ut0counter.h b/storage/innobase/include/ut0counter.h
index fe0f36dfff2..63a133a175d 100644
--- a/storage/innobase/include/ut0counter.h
+++ b/storage/innobase/include/ut0counter.h
@@ -32,7 +32,11 @@ Created 2012/04/12 by Sunny Bains
#include "os0thread.h"
/** CPU cache line size */
+#ifdef __powerpc__
+#define CACHE_LINE_SIZE 128
+#else
#define CACHE_LINE_SIZE 64
+#endif
/** Default number of slots to use in ib_counter_t */
#define IB_N_SLOTS 64
diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc
index 8dbe1668e36..42719fcc3cd 100644
--- a/storage/innobase/lock/lock0lock.cc
+++ b/storage/innobase/lock/lock0lock.cc
@@ -6504,6 +6504,7 @@ lock_rec_insert_check_and_lock(
lock_t* lock;
dberr_t err;
ulint next_rec_heap_no;
+ ibool inherit_in = *inherit;
#ifdef WITH_WSREP
lock_t* c_lock=NULL;
#endif
@@ -6539,7 +6540,7 @@ lock_rec_insert_check_and_lock(
lock_mutex_exit();
- if (!dict_index_is_clust(index)) {
+ if (inherit_in && !dict_index_is_clust(index)) {
/* Update the page max trx id field */
page_update_max_trx_id(block,
buf_block_get_page_zip(block),
@@ -6600,7 +6601,7 @@ lock_rec_insert_check_and_lock(
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
- if (dict_index_is_clust(index)) {
+ if (!inherit_in || dict_index_is_clust(index)) {
break;
}
/* Update the page max trx id field */
diff --git a/storage/innobase/lock/lock0wait.cc b/storage/innobase/lock/lock0wait.cc
index a1c35e20ead..4f4a0eb223b 100644
--- a/storage/innobase/lock/lock0wait.cc
+++ b/storage/innobase/lock/lock0wait.cc
@@ -259,10 +259,6 @@ lock_wait_suspend_thread(
}
}
- /* Wake the lock timeout monitor thread, if it is suspended */
-
- os_event_set(lock_sys->timeout_event);
-
lock_wait_mutex_exit();
trx_mutex_exit(trx);
diff --git a/storage/innobase/mysql-test/storage_engine/disabled.def b/storage/innobase/mysql-test/storage_engine/disabled.def
index 2f3793047f4..bad10099bbf 100644
--- a/storage/innobase/mysql-test/storage_engine/disabled.def
+++ b/storage/innobase/mysql-test/storage_engine/disabled.def
@@ -1,4 +1,3 @@
-autoinc_vars : MySQL:65225 (InnoDB miscalculates auto-increment)
tbl_opt_ai : MySQL:65901 (AUTO_INCREMENT option on InnoDB table is ignored if added before autoinc column)
delete_low_prio : InnoDB does not use table-level locking
insert_high_prio : InnoDB does not use table-level locking
diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc
index 3ea3df0227c..89c8bf373f7 100644
--- a/storage/innobase/os/os0file.cc
+++ b/storage/innobase/os/os0file.cc
@@ -616,6 +616,8 @@ os_file_get_last_error_low(
return(OS_FILE_OPERATION_ABORTED);
} else if (err == ERROR_ACCESS_DENIED) {
return(OS_FILE_ACCESS_VIOLATION);
+ } else if (err == ERROR_BUFFER_OVERFLOW) {
+ return(OS_FILE_NAME_TOO_LONG);
} else {
return(OS_FILE_ERROR_MAX + err);
}
@@ -690,6 +692,8 @@ os_file_get_last_error_low(
return(OS_FILE_NOT_FOUND);
case EEXIST:
return(OS_FILE_ALREADY_EXISTS);
+ case ENAMETOOLONG:
+ return(OS_FILE_NAME_TOO_LONG);
case EXDEV:
case ENOTDIR:
case EISDIR:
@@ -3354,7 +3358,7 @@ os_file_status(
struct _stat64 statinfo;
ret = _stat64(path, &statinfo);
- if (ret && (errno == ENOENT || errno == ENOTDIR)) {
+ if (ret && (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG)) {
/* file does not exist */
*exists = FALSE;
return(TRUE);
@@ -3382,7 +3386,7 @@ os_file_status(
struct stat statinfo;
ret = stat(path, &statinfo);
- if (ret && (errno == ENOENT || errno == ENOTDIR)) {
+ if (ret && (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG)) {
/* file does not exist */
*exists = FALSE;
return(TRUE);
diff --git a/storage/innobase/os/os0sync.cc b/storage/innobase/os/os0sync.cc
index 779152a3a56..451ba5285e3 100644
--- a/storage/innobase/os/os0sync.cc
+++ b/storage/innobase/os/os0sync.cc
@@ -890,6 +890,25 @@ os_fast_mutex_unlock_func(
}
/**********************************************************//**
+Releases ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required. */
+UNIV_INTERN
+void
+os_fast_mutex_unlock_full_barrier(
+/*=================*/
+ os_fast_mutex_t* fast_mutex) /*!< in: mutex to release */
+{
+#ifdef __WIN__
+ LeaveCriticalSection(&fast_mutex->mutex);
+#else
+ pthread_mutex_unlock(&fast_mutex->mutex);
+#ifdef __powerpc__
+ os_mb;
+#endif
+#endif
+}
+
+/**********************************************************//**
Frees a mutex object. */
UNIV_INTERN
void
diff --git a/storage/innobase/row/row0ext.cc b/storage/innobase/row/row0ext.cc
index 32b78391d6a..ad852577ad2 100644
--- a/storage/innobase/row/row0ext.cc
+++ b/storage/innobase/row/row0ext.cc
@@ -78,7 +78,8 @@ row_ext_cache_fill(
crashed during the execution of
btr_free_externally_stored_field(). */
ext->len[i] = btr_copy_externally_stored_field_prefix(
- buf, ext->max_len, zip_size, field, f_len);
+ buf, ext->max_len, zip_size, field, f_len,
+ NULL);
}
}
}
diff --git a/storage/innobase/row/row0ftsort.cc b/storage/innobase/row/row0ftsort.cc
index c0c3452e241..eb032246416 100644
--- a/storage/innobase/row/row0ftsort.cc
+++ b/storage/innobase/row/row0ftsort.cc
@@ -660,7 +660,8 @@ loop:
doc.text.f_str =
btr_copy_externally_stored_field(
&doc.text.f_len, data,
- zip_size, data_len, blob_heap);
+ zip_size, data_len, blob_heap,
+ NULL);
} else {
doc.text.f_str = data;
doc.text.f_len = data_len;
diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc
index c45d6554627..44c9ac32d16 100644
--- a/storage/innobase/row/row0ins.cc
+++ b/storage/innobase/row/row0ins.cc
@@ -1314,7 +1314,7 @@ row_ins_foreign_check_on_constraint(
row_mysql_freeze_data_dictionary(thr_get_trx(thr));
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
/* Restore pcur position */
@@ -1342,7 +1342,7 @@ nonstandard_exit_func:
btr_pcur_store_position(pcur, mtr);
mtr_commit(mtr);
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
btr_pcur_restore_position(BTR_SEARCH_LEAF, pcur, mtr);
@@ -1550,7 +1550,7 @@ run_again:
}
}
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Store old value on n_fields_cmp */
@@ -1973,7 +1973,7 @@ row_ins_scan_sec_index_for_duplicate(
do {
const rec_t* rec = btr_pcur_get_rec(&pcur);
const buf_block_t* block = btr_pcur_get_block(&pcur);
- ulint lock_type;
+ const ulint lock_type = LOCK_ORDINARY;
if (page_rec_is_infimum(rec)) {
@@ -1983,16 +1983,6 @@ row_ins_scan_sec_index_for_duplicate(
offsets = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &offsets_heap);
- /* If the transaction isolation level is no stronger than
- READ COMMITTED, then avoid gap locks. */
- if (!page_rec_is_supremum(rec)
- && thr_get_trx(thr)->isolation_level
- <= TRX_ISO_READ_COMMITTED) {
- lock_type = LOCK_REC_NOT_GAP;
- } else {
- lock_type = LOCK_ORDINARY;
- }
-
if (flags & BTR_NO_LOCKING_FLAG) {
/* Set no locks when applying log
in online table rebuild. */
@@ -2358,7 +2348,7 @@ row_ins_clust_index_entry_low(
|| n_uniq == dict_index_get_n_unique(index));
ut_ad(!n_uniq || n_uniq == dict_index_get_n_unique(index));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (mode == BTR_MODIFY_LEAF && dict_index_is_online_ddl(index)) {
mode = BTR_MODIFY_LEAF | BTR_ALREADY_S_LATCHED;
@@ -2571,9 +2561,10 @@ Starts a mini-transaction and checks if the index will be dropped.
@return true if the index is to be dropped */
static __attribute__((nonnull, warn_unused_result))
bool
-row_ins_sec_mtr_start_and_check_if_aborted(
+row_ins_sec_mtr_start_trx_and_check_if_aborted(
/*=======================================*/
mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx, /*!< in: transaction handle */
dict_index_t* index, /*!< in/out: secondary index */
bool check, /*!< in: whether to check */
ulint search_mode)
@@ -2581,7 +2572,7 @@ row_ins_sec_mtr_start_and_check_if_aborted(
{
ut_ad(!dict_index_is_clust(index));
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
if (!check) {
return(false);
@@ -2639,13 +2630,14 @@ row_ins_sec_index_entry_low(
ulint n_unique;
mtr_t mtr;
ulint* offsets = NULL;
+ trx_t* trx = thr_get_trx(thr);
ut_ad(!dict_index_is_clust(index));
ut_ad(mode == BTR_MODIFY_LEAF || mode == BTR_MODIFY_TREE);
cursor.thr = thr;
ut_ad(thr_get_trx(thr)->id);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Ensure that we acquire index->lock when inserting into an
index with index->online_status == ONLINE_INDEX_COMPLETE, but
@@ -2706,8 +2698,8 @@ row_ins_sec_index_entry_low(
DEBUG_SYNC_C("row_ins_sec_index_unique");
- if (row_ins_sec_mtr_start_and_check_if_aborted(
- &mtr, index, check, search_mode)) {
+ if (row_ins_sec_mtr_start_trx_and_check_if_aborted(
+ &mtr, trx, index, check, search_mode)) {
goto func_exit;
}
@@ -2741,8 +2733,8 @@ row_ins_sec_index_entry_low(
return(err);
}
- if (row_ins_sec_mtr_start_and_check_if_aborted(
- &mtr, index, check, search_mode)) {
+ if (row_ins_sec_mtr_start_trx_and_check_if_aborted(
+ &mtr, trx, index, check, search_mode)) {
goto func_exit;
}
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index b01b481c501..caed087b439 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -988,7 +988,7 @@ row_log_table_get_pk_col(
mem_heap_alloc(heap, field_len));
len = btr_copy_externally_stored_field_prefix(
- blob_field, field_len, zip_size, field, len);
+ blob_field, field_len, zip_size, field, len, NULL);
if (len >= max_len + 1) {
return(DB_TOO_BIG_INDEX_COL);
}
@@ -1379,7 +1379,7 @@ row_log_table_apply_convert_mrec(
data = btr_rec_copy_externally_stored_field(
mrec, offsets,
dict_table_zip_size(index->table),
- i, &len, heap);
+ i, &len, heap, NULL);
ut_a(data);
dfield_set_data(dfield, data, len);
blob_done:
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 8cd9463fcef..c79bd6c62ec 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -23,6 +23,7 @@ New index creation routines using a merge sort
Created 12/4/2005 Jan Lindstrom
Completed by Sunny Bains and Marko Makela
*******************************************************/
+#include <my_config.h>
#include <log.h>
#include "row0merge.h"
@@ -2320,7 +2321,7 @@ row_merge_copy_blobs(
BLOB pointers are read (row_merge_read_clustered_index())
and dereferenced (below). */
data = btr_rec_copy_externally_stored_field(
- mrec, offsets, zip_size, i, &len, heap);
+ mrec, offsets, zip_size, i, &len, heap, NULL);
/* Because we have locked the table, any records
written by incomplete transactions must have been
rolled back already. There must not be any incomplete
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index c5f4680f4ff..86248b87c66 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -33,6 +33,7 @@ Created 9/17/2000 Heikki Tuuri
#include <debug_sync.h>
#include <my_dbug.h>
+#include <sql_const.h>
#include "row0ins.h"
#include "row0merge.h"
#include "row0sel.h"
@@ -712,8 +713,10 @@ row_create_prebuilt(
row_prebuilt_t* prebuilt;
mem_heap_t* heap;
dict_index_t* clust_index;
+ dict_index_t* temp_index;
dtuple_t* ref;
ulint ref_len;
+ uint srch_key_len = 0;
ulint search_tuple_n_fields;
search_tuple_n_fields = 2 * dict_table_get_n_cols(table);
@@ -725,6 +728,14 @@ row_create_prebuilt(
ref_len = dict_index_get_n_unique(clust_index);
+
+ /* Maximum size of the buffer needed for conversion of INTs from
+ little endian format to big endian format in an index. An index
+ can have maximum 16 columns (MAX_REF_PARTS) in it. Therfore
+ Max size for PK: 16 * 8 bytes (BIGINT's size) = 128 bytes
+ Max size Secondary index: 16 * 8 bytes + PK = 256 bytes. */
+#define MAX_SRCH_KEY_VAL_BUFFER 2* (8 * MAX_REF_PARTS)
+
#define PREBUILT_HEAP_INITIAL_SIZE \
( \
sizeof(*prebuilt) \
@@ -753,10 +764,38 @@ row_create_prebuilt(
+ sizeof(que_thr_t) \
)
+ /* Calculate size of key buffer used to store search key in
+ InnoDB format. MySQL stores INTs in little endian format and
+ InnoDB stores INTs in big endian format with the sign bit
+ flipped. All other field types are stored/compared the same
+ in MySQL and InnoDB, so we must create a buffer containing
+ the INT key parts in InnoDB format.We need two such buffers
+ since both start and end keys are used in records_in_range(). */
+
+ for (temp_index = dict_table_get_first_index(table); temp_index;
+ temp_index = dict_table_get_next_index(temp_index)) {
+ DBUG_EXECUTE_IF("innodb_srch_key_buffer_max_value",
+ ut_a(temp_index->n_user_defined_cols
+ == MAX_REF_PARTS););
+ uint temp_len = 0;
+ for (uint i = 0; i < temp_index->n_uniq; i++) {
+ if (temp_index->fields[i].col->mtype == DATA_INT) {
+ temp_len +=
+ temp_index->fields[i].fixed_len;
+ }
+ }
+ srch_key_len = max(srch_key_len,temp_len);
+ }
+
+ ut_a(srch_key_len <= MAX_SRCH_KEY_VAL_BUFFER);
+
+ DBUG_EXECUTE_IF("innodb_srch_key_buffer_max_value",
+ ut_a(srch_key_len == MAX_SRCH_KEY_VAL_BUFFER););
+
/* We allocate enough space for the objects that are likely to
be created later in order to minimize the number of malloc()
calls */
- heap = mem_heap_create(PREBUILT_HEAP_INITIAL_SIZE);
+ heap = mem_heap_create(PREBUILT_HEAP_INITIAL_SIZE + 2 * srch_key_len);
prebuilt = static_cast<row_prebuilt_t*>(
mem_heap_zalloc(heap, sizeof(*prebuilt)));
@@ -769,6 +808,18 @@ row_create_prebuilt(
prebuilt->sql_stat_start = TRUE;
prebuilt->heap = heap;
+ prebuilt->srch_key_val_len = srch_key_len;
+ if (prebuilt->srch_key_val_len) {
+ prebuilt->srch_key_val1 = static_cast<byte*>(
+ mem_heap_alloc(prebuilt->heap,
+ 2 * prebuilt->srch_key_val_len));
+ prebuilt->srch_key_val2 = prebuilt->srch_key_val1 +
+ prebuilt->srch_key_val_len;
+ } else {
+ prebuilt->srch_key_val1 = NULL;
+ prebuilt->srch_key_val2 = NULL;
+ }
+
btr_pcur_reset(&prebuilt->pcur);
btr_pcur_reset(&prebuilt->clust_pcur);
@@ -1056,8 +1107,11 @@ row_update_statistics_if_needed(
since the last time a statistics batch was run.
We calculate statistics at most every 16th round, since we may have
a counter table which is very small and updated very often. */
+ ib_uint64_t threshold= 16 + n_rows / 16; /* 6.25% */
+ if (srv_stats_modified_counter)
+ threshold= ut_min(srv_stats_modified_counter, threshold);
- if (counter > 16 + n_rows / 16 /* 6.25% */) {
+ if (counter > threshold) {
ut_ad(!mutex_own(&dict_sys->mutex));
/* this will reset table->stat_modified_counter to 0 */
@@ -1395,7 +1449,11 @@ error_exit:
que_thr_stop_for_mysql_no_error(thr, trx);
- srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_inserted.add((size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
+ }
/* Not protected by dict_table_stats_lock() for performance
reasons, we would rather get garbage in stat_n_rows (which is
@@ -1785,9 +1843,20 @@ run_again:
with a latch. */
dict_table_n_rows_dec(prebuilt->table);
- srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ }
+
} else {
- srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ }
}
/* We update table statistics only if it is a DELETE or UPDATE
@@ -1851,7 +1920,7 @@ row_unlock_for_mysql(
trx_id_t rec_trx_id;
mtr_t mtr;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Restore the cursor position and find the record */
@@ -2011,9 +2080,19 @@ run_again:
with a latch. */
dict_table_n_rows_dec(table);
- srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ }
} else {
- srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ }
}
row_update_statistics_if_needed(table);
@@ -2201,23 +2280,23 @@ err_exit:
/* The lock timeout monitor thread also takes care
of InnoDB monitor prints */
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_lock_monitor)) {
srv_print_innodb_monitor = TRUE;
srv_print_innodb_lock_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_tablespace_monitor)) {
srv_print_innodb_tablespace_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_table_monitor)) {
srv_print_innodb_table_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
#ifdef UNIV_MEM_DEBUG
} else if (STR_EQ(table_name, table_name_len,
S_innodb_mem_validate)) {
@@ -2840,7 +2919,7 @@ row_discard_tablespace_foreign_key_checks(
/* Check if the table is referenced by foreign key constraints from
some other table (not the table itself) */
- dict_foreign_set::iterator it
+ dict_foreign_set::const_iterator it
= std::find_if(table->referenced_set.begin(),
table->referenced_set.end(),
dict_foreign_different_tables());
@@ -3413,7 +3492,7 @@ row_truncate_table_for_mysql(
index = dict_table_get_next_index(index);
} while (index);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
fsp_header_init(space,
FIL_IBD_FILE_INITIAL_SIZE, &mtr);
mtr_commit(&mtr);
@@ -3442,7 +3521,7 @@ row_truncate_table_for_mysql(
sys_index = dict_table_get_first_index(dict_sys->sys_indexes);
dict_index_copy_types(tuple, sys_index, 1);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
btr_pcur_open_on_user_rec(sys_index, tuple, PAGE_CUR_GE,
BTR_MODIFY_LEAF, &pcur, &mtr);
for (;;) {
@@ -3489,7 +3568,7 @@ row_truncate_table_for_mysql(
a page in this mini-transaction, and the rest of
this loop could latch another index page. */
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
btr_pcur_restore_position(BTR_MODIFY_LEAF,
&pcur, &mtr);
}
diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc
index 1b836c26c25..8212a7b43e0 100644
--- a/storage/innobase/row/row0purge.cc
+++ b/storage/innobase/row/row0purge.cc
@@ -337,9 +337,24 @@ row_purge_remove_sec_if_poss_tree(
if (row_purge_poss_sec(node, index, entry)) {
/* Remove the index record, which should have been
marked for deletion. */
- ut_ad(REC_INFO_DELETED_FLAG
- & rec_get_info_bits(btr_cur_get_rec(btr_cur),
- dict_table_is_comp(index->table)));
+ if (!rec_get_deleted_flag(btr_cur_get_rec(btr_cur),
+ dict_table_is_comp(index->table))) {
+ fputs("InnoDB: tried to purge sec index entry not"
+ " marked for deletion in\n"
+ "InnoDB: ", stderr);
+ dict_index_name_print(stderr, NULL, index);
+ fputs("\n"
+ "InnoDB: tuple ", stderr);
+ dtuple_print(stderr, entry);
+ fputs("\n"
+ "InnoDB: record ", stderr);
+ rec_print(stderr, btr_cur_get_rec(btr_cur), index);
+ putc('\n', stderr);
+
+ ut_ad(0);
+
+ goto func_exit;
+ }
btr_cur_pessimistic_delete(&err, FALSE, btr_cur, 0,
RB_NONE, &mtr);
@@ -428,10 +443,29 @@ row_purge_remove_sec_if_poss_leaf(
btr_cur_t* btr_cur = btr_pcur_get_btr_cur(&pcur);
/* Only delete-marked records should be purged. */
- ut_ad(REC_INFO_DELETED_FLAG
- & rec_get_info_bits(
- btr_cur_get_rec(btr_cur),
- dict_table_is_comp(index->table)));
+ if (!rec_get_deleted_flag(
+ btr_cur_get_rec(btr_cur),
+ dict_table_is_comp(index->table))) {
+
+ fputs("InnoDB: tried to purge sec index"
+ " entry not marked for deletion in\n"
+ "InnoDB: ", stderr);
+ dict_index_name_print(stderr, NULL, index);
+ fputs("\n"
+ "InnoDB: tuple ", stderr);
+ dtuple_print(stderr, entry);
+ fputs("\n"
+ "InnoDB: record ", stderr);
+ rec_print(stderr, btr_cur_get_rec(btr_cur),
+ index);
+ putc('\n', stderr);
+
+ ut_ad(0);
+
+ btr_pcur_close(&pcur);
+
+ goto func_exit_no_pcur;
+ }
if (!btr_cur_optimistic_delete(btr_cur, 0, &mtr)) {
diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc
index d888c1ef645..b0e0c89b778 100644
--- a/storage/innobase/row/row0sel.cc
+++ b/storage/innobase/row/row0sel.cc
@@ -133,7 +133,8 @@ row_sel_sec_rec_is_for_blob(
len = btr_copy_externally_stored_field_prefix(buf, prefix_len,
zip_size,
- clust_field, clust_len);
+ clust_field, clust_len,
+ NULL);
if (UNIV_UNLIKELY(len == 0)) {
/* The BLOB was being deleted as the server crashed.
@@ -452,7 +453,7 @@ row_sel_fetch_columns(
data = btr_rec_copy_externally_stored_field(
rec, offsets,
dict_table_zip_size(index->table),
- field_no, &len, heap);
+ field_no, &len, heap, NULL);
/* data == NULL means that the
externally stored field was not
@@ -1399,7 +1400,7 @@ table_loop:
/* Open a cursor to index, or restore an open cursor position */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (consistent_read && plan->unique_search && !plan->pcur_is_open
&& !plan->must_get_clust
@@ -1439,7 +1440,7 @@ table_loop:
plan_reset_cursor(plan);
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
}
if (search_latch_locked) {
@@ -2451,13 +2452,12 @@ row_sel_convert_mysql_key_to_innobase(
/* Storing may use at most data_len bytes of buf */
if (UNIV_LIKELY(!is_null)) {
- ut_a(buf + data_len <= original_buf + buf_len);
- row_mysql_store_col_in_innobase_format(
- dfield, buf,
- FALSE, /* MySQL key value format col */
- key_ptr + data_offset, data_len,
- dict_table_is_comp(index->table));
- buf += data_len;
+ buf = row_mysql_store_col_in_innobase_format(
+ dfield, buf,
+ FALSE, /* MySQL key value format col */
+ key_ptr + data_offset, data_len,
+ dict_table_is_comp(index->table));
+ ut_a(buf <= original_buf + buf_len);
}
key_ptr += data_field_len;
@@ -2501,9 +2501,6 @@ row_sel_convert_mysql_key_to_innobase(
dfield++;
}
- DBUG_EXECUTE_IF("innodb_srch_key_buffer_full",
- ut_a(buf == (original_buf + buf_len)););
-
ut_a(buf <= original_buf + buf_len);
/* We set the length of tuple to n_fields: we assume that the memory
@@ -2810,7 +2807,7 @@ row_sel_store_mysql_field_func(
data = btr_rec_copy_externally_stored_field(
rec, offsets,
dict_table_zip_size(prebuilt->table),
- field_no, &len, heap);
+ field_no, &len, heap, NULL);
if (UNIV_UNLIKELY(!data)) {
/* The externally stored field was not written
@@ -3894,7 +3891,7 @@ row_search_for_mysql(
}
}
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/*-------------------------------------------------------------*/
/* PHASE 2: Try fast adaptive hash index search if possible */
@@ -4024,7 +4021,7 @@ release_search_latch_if_needed:
}
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
}
}
@@ -5069,7 +5066,7 @@ next_rec:
mtr_commit(&mtr);
mtr_has_extra_clust_latch = FALSE;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
if (sel_restore_position_for_mysql(&same_user_rec,
BTR_SEARCH_LEAF,
pcur, moves_up, &mtr)) {
@@ -5134,7 +5131,7 @@ lock_table_wait:
/* It was a lock wait, and it ended */
thr->lock_state = QUE_THR_LOCK_NOLOCK;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Table lock waited, go try to obtain table lock
again */
diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc
index e513d3d6d8b..8580aa45145 100644
--- a/storage/innobase/row/row0umod.cc
+++ b/storage/innobase/row/row0umod.cc
@@ -297,7 +297,7 @@ row_undo_mod_clust(
pcur = &node->pcur;
index = btr_cur_get_index(btr_pcur_get_btr_cur(pcur));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
online = dict_index_is_online_ddl(index);
if (online) {
@@ -326,7 +326,7 @@ row_undo_mod_clust(
/* We may have to modify tree structure: do a pessimistic
descent down the index tree */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
err = row_undo_mod_clust_low(
node, &offsets, &offsets_heap,
@@ -371,7 +371,7 @@ row_undo_mod_clust(
if (err == DB_SUCCESS && node->rec_type == TRX_UNDO_UPD_DEL_REC) {
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
/* It is not necessary to call row_log_table,
because the record is delete-marked and would thus
@@ -384,7 +384,7 @@ row_undo_mod_clust(
/* We may have to modify tree structure: do a
pessimistic descent down the index tree */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
err = row_undo_mod_remove_clust_low(node, thr, &mtr,
BTR_MODIFY_TREE);
@@ -431,7 +431,7 @@ row_undo_mod_del_mark_or_remove_sec_low(
enum row_search_result search_result;
log_free_check();
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
@@ -487,7 +487,7 @@ row_undo_mod_del_mark_or_remove_sec_low(
which cannot be purged yet, requires its existence. If some requires,
we should delete mark the record. */
- mtr_start(&mtr_vers);
+ mtr_start_trx(&mtr_vers, thr_get_trx(thr));
success = btr_pcur_restore_position(BTR_SEARCH_LEAF, &(node->pcur),
&mtr_vers);
@@ -603,7 +603,7 @@ row_undo_mod_del_unmark_sec_and_undo_update(
ut_ad(trx->id);
log_free_check();
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index 8a27f325218..0ea4865d15f 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -259,7 +259,7 @@ row_upd_check_references_constraints(
DEBUG_SYNC_C("foreign_constraint_check_for_update");
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
if (trx->dict_operation_lock_mode == 0) {
got_s_lock = TRUE;
@@ -1152,7 +1152,7 @@ row_upd_ext_fetch(
byte* buf = static_cast<byte*>(mem_heap_alloc(heap, *len));
*len = btr_copy_externally_stored_field_prefix(
- buf, *len, zip_size, data, local_len);
+ buf, *len, zip_size, data, local_len, NULL);
/* We should never update records containing a half-deleted BLOB. */
ut_a(*len);
@@ -1856,7 +1856,7 @@ row_upd_sec_index_entry(
}
#endif /* UNIV_DEBUG */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
@@ -2391,7 +2391,7 @@ row_upd_clust_rec(
/* We may have to modify the tree structure: do a pessimistic descent
down the index tree */
- mtr_start(mtr);
+ mtr_start_trx(mtr, thr_get_trx(thr));
/* NOTE: this transaction has an s-lock or x-lock on the record and
therefore other transactions cannot modify the record when we have no
@@ -2603,7 +2603,7 @@ row_upd_clust_step(
/* We have to restore the cursor to its position */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
/* If the restoration does not succeed, then the same
transaction has deleted the record on which the cursor was,
@@ -2657,7 +2657,7 @@ row_upd_clust_step(
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
success = btr_pcur_restore_position(BTR_MODIFY_LEAF, pcur,
&mtr);
diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc
index 14267eedcb8..24cf403c0af 100644
--- a/storage/innobase/srv/srv0mon.cc
+++ b/storage/innobase/srv/srv0mon.cc
@@ -1271,6 +1271,26 @@ static monitor_info_t innodb_counter_info[] =
MONITOR_EXISTING | MONITOR_DEFAULT_ON),
MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_UPDTATED},
+ {"dml_system_reads", "dml", "Number of system rows read",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_READ},
+
+ {"dml_system_inserts", "dml", "Number of system rows inserted",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_INSERTED},
+
+ {"dml_system_deletes", "dml", "Number of system rows deleted",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_DELETED},
+
+ {"dml_system_updates", "dml", "Number of system rows updated",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_UPDATED},
+
/* ========== Counters for DDL operations ========== */
{"module_ddl", "ddl", "Statistics for DDLs",
MONITOR_MODULE,
@@ -1809,6 +1829,26 @@ srv_mon_process_existing_counter(
value = srv_stats.n_rows_updated;
break;
+ /* innodb_system_rows_read */
+ case MONITOR_OLVD_SYSTEM_ROW_READ:
+ value = srv_stats.n_system_rows_read;
+ break;
+
+ /* innodb_system_rows_inserted */
+ case MONITOR_OLVD_SYSTEM_ROW_INSERTED:
+ value = srv_stats.n_system_rows_inserted;
+ break;
+
+ /* innodb_system_rows_deleted */
+ case MONITOR_OLVD_SYSTEM_ROW_DELETED:
+ value = srv_stats.n_system_rows_deleted;
+ break;
+
+ /* innodb_system_rows_updated */
+ case MONITOR_OLVD_SYSTEM_ROW_UPDATED:
+ value = srv_stats.n_system_rows_updated;
+ break;
+
/* innodb_row_lock_current_waits */
case MONITOR_OVLD_ROW_LOCK_CURRENT_WAIT:
value = srv_stats.n_lock_wait_current_count;
diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc
index d56f942f661..bcbce3cd53c 100644
--- a/storage/innobase/srv/srv0srv.cc
+++ b/storage/innobase/srv/srv0srv.cc
@@ -303,12 +303,12 @@ in the buffer pool to all database pages in the buffer pool smaller than
the following number. But it is not guaranteed that the value stays below
that during a time of heavy update/insert activity. */
-UNIV_INTERN ulong srv_max_buf_pool_modified_pct = 75;
-UNIV_INTERN ulong srv_max_dirty_pages_pct_lwm = 50;
+UNIV_INTERN double srv_max_buf_pool_modified_pct = 75.0;
+UNIV_INTERN double srv_max_dirty_pages_pct_lwm = 50.0;
/* This is the percentage of log capacity at which adaptive flushing,
if enabled, will kick in. */
-UNIV_INTERN ulong srv_adaptive_flushing_lwm = 10;
+UNIV_INTERN double srv_adaptive_flushing_lwm = 10.0;
/* Number of iterations over which adaptive flushing is averaged. */
UNIV_INTERN ulong srv_flushing_avg_loops = 30;
@@ -371,6 +371,14 @@ UNIV_INTERN my_bool srv_stats_persistent = TRUE;
UNIV_INTERN unsigned long long srv_stats_persistent_sample_pages = 20;
UNIV_INTERN my_bool srv_stats_auto_recalc = TRUE;
+/* The number of rows modified before we calculate new statistics (default 0
+= current limits) */
+UNIV_INTERN unsigned long long srv_stats_modified_counter = 0;
+
+/* Enable traditional statistic calculation based on number of configured
+pages default true. */
+UNIV_INTERN my_bool srv_stats_sample_traditional = TRUE;
+
UNIV_INTERN ibool srv_use_doublewrite_buf = TRUE;
/** doublewrite buffer is 1MB is size i.e.: it can hold 128 16K pages.
@@ -403,6 +411,10 @@ static ulint srv_n_rows_inserted_old = 0;
static ulint srv_n_rows_updated_old = 0;
static ulint srv_n_rows_deleted_old = 0;
static ulint srv_n_rows_read_old = 0;
+static ulint srv_n_system_rows_inserted_old = 0;
+static ulint srv_n_system_rows_updated_old = 0;
+static ulint srv_n_system_rows_deleted_old = 0;
+static ulint srv_n_system_rows_read_old = 0;
UNIV_INTERN ulint srv_truncated_status_writes = 0;
UNIV_INTERN ulint srv_available_undo_logs = 0;
@@ -1050,6 +1062,8 @@ srv_init(void)
trx_i_s_cache_init(trx_i_s_cache);
ut_crc32_init();
+
+ dict_mem_init();
}
/*********************************************************************//**
@@ -1167,6 +1181,11 @@ srv_refresh_innodb_monitor_stats(void)
srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
srv_n_rows_read_old = srv_stats.n_rows_read;
+ srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
+ srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
+ srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
+ srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
+
mutex_exit(&srv_innodb_monitor_mutex);
}
@@ -1358,11 +1377,33 @@ srv_printf_innodb_monitor(
/ time_elapsed,
((ulint) srv_stats.n_rows_read - srv_n_rows_read_old)
/ time_elapsed);
-
+ fprintf(file,
+ "Number of system rows inserted " ULINTPF
+ ", updated " ULINTPF ", deleted " ULINTPF
+ ", read " ULINTPF "\n",
+ (ulint) srv_stats.n_system_rows_inserted,
+ (ulint) srv_stats.n_system_rows_updated,
+ (ulint) srv_stats.n_system_rows_deleted,
+ (ulint) srv_stats.n_system_rows_read);
+ fprintf(file,
+ "%.2f inserts/s, %.2f updates/s,"
+ " %.2f deletes/s, %.2f reads/s\n",
+ ((ulint) srv_stats.n_system_rows_inserted
+ - srv_n_system_rows_inserted_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_updated
+ - srv_n_system_rows_updated_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_deleted
+ - srv_n_system_rows_deleted_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_read
+ - srv_n_system_rows_read_old) / time_elapsed);
srv_n_rows_inserted_old = srv_stats.n_rows_inserted;
srv_n_rows_updated_old = srv_stats.n_rows_updated;
srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
srv_n_rows_read_old = srv_stats.n_rows_read;
+ srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
+ srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
+ srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
+ srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
fputs("----------------------------\n"
"END OF INNODB MONITOR OUTPUT\n"
@@ -1517,6 +1558,17 @@ srv_export_innodb_status(void)
export_vars.innodb_rows_deleted = srv_stats.n_rows_deleted;
+ export_vars.innodb_system_rows_read = srv_stats.n_system_rows_read;
+
+ export_vars.innodb_system_rows_inserted =
+ srv_stats.n_system_rows_inserted;
+
+ export_vars.innodb_system_rows_updated =
+ srv_stats.n_system_rows_updated;
+
+ export_vars.innodb_system_rows_deleted =
+ srv_stats.n_system_rows_deleted;
+
export_vars.innodb_num_open_files = fil_n_file_opened;
export_vars.innodb_truncated_status_writes =
diff --git a/storage/innobase/sync/sync0arr.cc b/storage/innobase/sync/sync0arr.cc
index f643e5b794f..10c201e990e 100644
--- a/storage/innobase/sync/sync0arr.cc
+++ b/storage/innobase/sync/sync0arr.cc
@@ -1074,7 +1074,7 @@ sync_array_print_long_waits(
(ulong) os_file_n_pending_pwrites);
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
os_thread_sleep(30000000);
@@ -1219,3 +1219,66 @@ sync_array_get(void)
return(sync_wait_array[i % sync_array_size]);
}
+
+/**********************************************************************//**
+Prints info of the wait array without using any mutexes/semaphores. */
+UNIV_INTERN
+void
+sync_array_print_innodb(void)
+/*=========================*/
+{
+ ulint i;
+ sync_array_t* arr = sync_array_get();
+
+ fputs("InnoDB: Semaphore wait debug output started for InnoDB:\n", stderr);
+
+ for (i = 0; i < arr->n_cells; i++) {
+ void* wait_object;
+ sync_cell_t* cell;
+ os_thread_id_t reserver=(os_thread_id_t)ULINT_UNDEFINED;
+ ulint loop=0;
+
+ cell = sync_array_get_nth_cell(arr, i);
+
+ wait_object = cell->wait_object;
+
+ if (wait_object == NULL || !cell->waiting) {
+
+ continue;
+ }
+
+ fputs("InnoDB: Warning: semaphore wait:\n",
+ stderr);
+ sync_array_cell_print(stderr, cell, &reserver);
+
+ /* Try to output cell information for writer recursive way */
+ while (reserver != (os_thread_id_t)ULINT_UNDEFINED) {
+ sync_cell_t* reserver_wait;
+
+ reserver_wait = sync_array_find_thread(arr, reserver);
+
+ if (reserver_wait &&
+ reserver_wait->wait_object != NULL &&
+ reserver_wait->waiting) {
+ fputs("InnoDB: Warning: Writer thread is waiting this semaphore:\n",
+ stderr);
+ sync_array_cell_print(stderr, reserver_wait, &reserver);
+
+ if (reserver_wait->thread == reserver) {
+ reserver = (os_thread_id_t)ULINT_UNDEFINED;
+ }
+ } else {
+ reserver = (os_thread_id_t)ULINT_UNDEFINED;
+ }
+
+ /* This is protection against loop */
+ if (loop > 100) {
+ fputs("InnoDB: Warning: Too many waiting threads.\n", stderr);
+ break;
+ }
+ }
+ }
+
+ fputs("InnoDB: Semaphore wait debug output ended:\n", stderr);
+
+}
diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc
index 9fc21005d47..aa2b5fa29db 100644
--- a/storage/innobase/sync/sync0sync.cc
+++ b/storage/innobase/sync/sync0sync.cc
@@ -457,8 +457,6 @@ mutex_set_waiters(
ptr = &(mutex->waiters);
- os_wmb;
-
*ptr = n; /* Here we assume that the write of a single
word in memory is atomic */
}
@@ -553,6 +551,11 @@ spin_loop:
mutex_set_waiters(mutex, 1);
+ /* Make sure waiters store won't pass over mutex_test_and_set */
+#ifdef __powerpc__
+ os_mb;
+#endif
+
/* Try to reserve still a few times */
for (i = 0; i < 4; i++) {
if (ib_mutex_test_and_set(mutex) == 0) {
diff --git a/storage/innobase/trx/trx0i_s.cc b/storage/innobase/trx/trx0i_s.cc
index 01ccfb8a6d0..993006efc6d 100644
--- a/storage/innobase/trx/trx0i_s.cc
+++ b/storage/innobase/trx/trx0i_s.cc
@@ -1639,7 +1639,7 @@ trx_i_s_create_lock_id(
} else {
/* table lock */
res_len = ut_snprintf(lock_id, lock_id_size,
- TRX_ID_FMT":" UINT64PF,
+ TRX_ID_FMT ":" UINT64PF,
row->lock_trx_id,
row->lock_table_id);
}
diff --git a/storage/innobase/trx/trx0rec.cc b/storage/innobase/trx/trx0rec.cc
index 4d3458ff8bb..fa3fe0904b8 100644
--- a/storage/innobase/trx/trx0rec.cc
+++ b/storage/innobase/trx/trx0rec.cc
@@ -466,7 +466,7 @@ trx_undo_page_fetch_ext(
{
/* Fetch the BLOB. */
ulint ext_len = btr_copy_externally_stored_field_prefix(
- ext_buf, prefix_len, zip_size, field, *len);
+ ext_buf, prefix_len, zip_size, field, *len, NULL);
/* BLOBs should always be nonempty. */
ut_a(ext_len);
/* Append the BLOB pointer to the prefix. */
@@ -1248,7 +1248,7 @@ trx_undo_report_row_operation(
rseg = trx->rseg;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&trx->undo_mutex);
/* If the undo log is not assigned yet, assign one */
@@ -1337,7 +1337,7 @@ trx_undo_report_row_operation(
latches, such as SYNC_FSP and SYNC_FSP_PAGE. */
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&rseg->mutex);
trx_undo_free_last_page(trx, undo, &mtr);
@@ -1374,7 +1374,7 @@ trx_undo_report_row_operation(
/* We have to extend the undo log by one page */
ut_ad(++loop_count < 2);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* When we add a page to an undo log, this is analogous to
a pessimistic insert in a B-tree, and we must reserve the
diff --git a/storage/innobase/trx/trx0roll.cc b/storage/innobase/trx/trx0roll.cc
index 1089607c6d1..a64367c4ba7 100644
--- a/storage/innobase/trx/trx0roll.cc
+++ b/storage/innobase/trx/trx0roll.cc
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -126,6 +126,9 @@ trx_rollback_to_savepoint_low(
mem_heap_free(heap);
+ /* There might be work for utility threads.*/
+ srv_active_wake_master_thread();
+
MONITOR_DEC(MONITOR_TRX_ACTIVE);
}
@@ -143,20 +146,10 @@ trx_rollback_to_savepoint(
{
ut_ad(!trx_mutex_own(trx));
- /* Tell Innobase server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
trx_start_if_not_started_xa(trx);
trx_rollback_to_savepoint_low(trx, savept);
- /* Tell Innobase server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
return(trx->error_state);
}
@@ -169,8 +162,6 @@ trx_rollback_for_mysql_low(
/*=======================*/
trx_t* trx) /*!< in/out: transaction */
{
- srv_active_wake_master_thread();
-
trx->op_info = "rollback";
/* If we are doing the XA recovery of prepared transactions,
@@ -184,8 +175,6 @@ trx_rollback_for_mysql_low(
ut_a(trx->error_state == DB_SUCCESS);
- srv_active_wake_master_thread();
-
return(trx->error_state);
}
diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc
index a8f1a7424fd..5410bb98190 100644
--- a/storage/innobase/trx/trx0trx.cc
+++ b/storage/innobase/trx/trx0trx.cc
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -1308,6 +1308,12 @@ trx_commit_in_memory(
}
trx->commit_lsn = lsn;
+
+ /* Tell server some activity has happened, since the trx
+ does changes something. Background utility threads like
+ master thread, purge thread or page_cleaner thread might
+ have some work to do. */
+ srv_active_wake_master_thread();
}
/* undo_no is non-zero if we're doing the final commit. */
diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc
index 290271c6cab..edb85a89c17 100644
--- a/storage/innobase/trx/trx0undo.cc
+++ b/storage/innobase/trx/trx0undo.cc
@@ -1067,11 +1067,9 @@ Truncates an undo log from the end. This function is used during a rollback
to free space from an undo log. */
UNIV_INTERN
void
-trx_undo_truncate_end_func(
+trx_undo_truncate_end(
/*=======================*/
-#ifdef UNIV_DEBUG
- const trx_t* trx, /*!< in: transaction whose undo log it is */
-#endif /* UNIV_DEBUG */
+ trx_t* trx, /*!< in: transaction whose undo log it is */
trx_undo_t* undo, /*!< in: undo log */
undo_no_t limit) /*!< in: all undo records with undo number
>= this value should be truncated */
@@ -1086,7 +1084,7 @@ trx_undo_truncate_end_func(
ut_ad(mutex_own(&(trx->rseg->mutex)));
for (;;) {
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
trunc_here = NULL;
@@ -1773,7 +1771,7 @@ trx_undo_assign_undo(
ut_ad(mutex_own(&(trx->undo_mutex)));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&rseg->mutex);
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index 1538bd2c63b..b9c8410895d 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -21,7 +21,7 @@
#endif
#define MYSQL_SERVER 1
-#include <mysql/plugin.h>
+#include <my_global.h>
#include <m_ctype.h>
#include <my_dir.h>
#include <myisampack.h>
diff --git a/storage/maria/unittest/ma_maria_log_cleanup.c b/storage/maria/unittest/ma_maria_log_cleanup.c
index 3e4bc755832..6ecec9bbc19 100644
--- a/storage/maria/unittest/ma_maria_log_cleanup.c
+++ b/storage/maria/unittest/ma_maria_log_cleanup.c
@@ -14,7 +14,6 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "../maria_def.h"
-#include <my_dir.h>
#ifdef _WIN32
#include <direct.h> /* rmdir */
#endif
diff --git a/storage/maria/unittest/test_file.c b/storage/maria/unittest/test_file.c
index 567f4ef8b94..1a14f2e8ec5 100644
--- a/storage/maria/unittest/test_file.c
+++ b/storage/maria/unittest/test_file.c
@@ -13,7 +13,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-#include <tap.h>
+#include <tap.h> /* Includes my_global.h */
#include <my_sys.h>
#include <my_dir.h>
#include "test_file.h"
diff --git a/storage/mroonga/AUTHORS b/storage/mroonga/AUTHORS
new file mode 100644
index 00000000000..c29bd9cc5fa
--- /dev/null
+++ b/storage/mroonga/AUTHORS
@@ -0,0 +1,7 @@
+Active developers:
+* Kentoku SHIBA
+* Kouhei Sutou
+
+Inactive developers:
+* Tetsuro IKEDA: The original author: Active
+* Yoshinori Matsunobu: The original author of information schema
diff --git a/storage/mroonga/CMakeLists.txt b/storage/mroonga/CMakeLists.txt
new file mode 100644
index 00000000000..faad871fa95
--- /dev/null
+++ b/storage/mroonga/CMakeLists.txt
@@ -0,0 +1,371 @@
+# -*- indent-tabs-mode: nil -*-
+#
+# Copyright(C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+cmake_minimum_required(VERSION 2.6)
+project(mroonga)
+
+include(TestBigEndian)
+test_big_endian(BIG_ENDIAN)
+if(BIG_ENDIAN)
+ message(STATUS "Mroonga is not supported on big-endian")
+ return()
+endif()
+
+if(MSVC)
+ if(MSVC_VERSION LESS 1600)
+ message(STATUS "Mroonga supports only MSVC 2010 or later")
+ return()
+ endif()
+endif()
+
+if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ set(MRN_BUNDLED FALSE)
+else()
+ set(MRN_BUNDLED TRUE)
+endif()
+
+if(MRN_BUNDLED)
+ if(WITHOUT_MROONGA OR WITHOUT_MROONGA_STORAGE_ENGINE)
+ return()
+ endif()
+endif()
+
+set(MRN_BUNDLED_GROONGA_RELATIVE_DIR "vendor/groonga")
+set(MRN_BUNDLED_GROONGA_DIR
+ "${CMAKE_CURRENT_SOURCE_DIR}/${MRN_BUNDLED_GROONGA_RELATIVE_DIR}")
+if(EXISTS "${MRN_BUNDLED_GROONGA_DIR}")
+ set(MRN_GROONGA_BUNDLED TRUE)
+ if(MSVC)
+ message(STATUS "Bundled Mroonga does not support MSVC yet")
+ return()
+ endif()
+else()
+ set(MRN_GROONGA_BUNDLED FALSE)
+endif()
+
+set(MRN_PLUGIN_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+if(MRN_BUNDLED)
+ set(MRN_SOURCE_DIR ${CMAKE_SOURCE_DIR}/storage/mroonga)
+else()
+ set(MRN_SOURCE_DIR ${CMAKE_SOURCE_DIR})
+endif()
+
+file(READ ${MRN_SOURCE_DIR}/version MRN_VERSION)
+file(READ ${MRN_SOURCE_DIR}/version_major MRN_VERSION_MAJOR)
+file(READ ${MRN_SOURCE_DIR}/version_minor MRN_VERSION_MINOR)
+file(READ ${MRN_SOURCE_DIR}/version_micro MRN_VERSION_MICRO)
+file(READ ${MRN_SOURCE_DIR}/version_in_hex MRN_VERSION_IN_HEX)
+file(READ ${MRN_SOURCE_DIR}/plugin_version MRN_PLUGIN_VERSION)
+
+if(MRN_GROONGA_BUNDLED)
+ add_subdirectory("${MRN_BUNDLED_GROONGA_RELATIVE_DIR}")
+else()
+ file(READ ${MRN_SOURCE_DIR}/required_groonga_version REQUIRED_GROONGA_VERSION)
+ string(STRIP "${REQUIRED_GROONGA_VERSION}" REQUIRED_GROONGA_VERSION)
+
+ file(READ
+ ${MRN_SOURCE_DIR}/required_groonga_normalizer_mysql_version
+ REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION)
+ string(STRIP
+ "${REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION}"
+ REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION)
+endif()
+
+set(MRN_PACKAGE_STRING "${PROJECT_NAME} ${MRN_VERSION}")
+
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+include(${MRN_SOURCE_DIR}/build/cmake_modules/ReadFileList.cmake)
+
+set(MRN_C_COMPILE_FLAGS "")
+set(MRN_CXX_COMPILE_FLAGS "")
+
+macro(mrn_check_cflag flag)
+ check_c_compiler_flag(${flag} "HAVE_C_${flag}")
+ if(HAVE_C_${flag})
+ set(MRN_C_COMPILE_FLAGS "${MRN_C_COMPILE_FLAGS} ${flag}")
+ endif()
+endmacro()
+
+macro(mrn_check_cxxflag flag)
+ check_cxx_compiler_flag(${flag} "HAVE_CXX_${flag}")
+ if(HAVE_CXX_${flag})
+ set(MRN_CXX_COMPILE_FLAGS "${MRN_CXX_COMPILE_FLAGS} ${flag}")
+ endif()
+endmacro()
+
+macro(mrn_build_flag flag)
+ mrn_check_cflag(${flag})
+ mrn_check_cxxflag(${flag})
+endmacro()
+
+if(MRN_BUNDLED)
+ set(MRN_RELATIVE_DIR_PREFIX "${MRN_SOURCE_DIR}/")
+else()
+ set(MRN_RELATIVE_DIR_PREFIX "")
+endif()
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/sources.am MROONGA_SOURCES)
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/lib/libmrn_no_mysql_sources.am
+ LIBMRN_NO_MYSQL_SOURCES)
+string(REGEX REPLACE "([^;]+)" "${MRN_RELATIVE_DIR_PREFIX}lib/\\1"
+ LIBMRN_NO_MYSQL_SOURCES "${LIBMRN_NO_MYSQL_SOURCES}")
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/lib/libmrn_need_mysql_sources.am
+ LIBMRN_NEED_MYSQL_SOURCES)
+string(REGEX REPLACE "([^;]+)" "${MRN_RELATIVE_DIR_PREFIX}lib/\\1"
+ LIBMRN_NEED_MYSQL_SOURCES "${LIBMRN_NEED_MYSQL_SOURCES}")
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/udf/sources.am MRN_UDF_SOURCES)
+string(REGEX REPLACE "([^;]+)" "${MRN_RELATIVE_DIR_PREFIX}udf/\\1"
+ MRN_UDF_SOURCES "${MRN_UDF_SOURCES}")
+
+if(MRN_BUNDLED)
+ set(MYSQL_SOURCE_DIR ${CMAKE_SOURCE_DIR})
+ set(MYSQL_BUILD_DIR ${MYSQL_SOURCE_DIR})
+ set(MYSQL_CONFIG ${CMAKE_SOURCE_DIR}/scripts/mysql_config)
+else()
+ set(MYSQL_SOURCE_DIR "/PATH/TO/MYSQL/SOURCE/DIRECTORY/"
+ CACHE PATH "MySQL source directory")
+ if(NOT EXISTS ${MYSQL_SOURCE_DIR})
+ message(FATAL_ERROR
+ "MySQL source directory (MYSQL_SOURCE_DIR) doesn't exist: <${MYSQL_SOURCE_DIR}>")
+ endif()
+ set(MYSQL_BUILD_DIR ${MYSQL_SOURCE_DIR} CACHE PATH "MySQL build directory")
+ set(MYSQL_CONFIG "mysql_config" CACHE PATH "mysql-config command path")
+endif()
+find_path(MYSQL_CONFIG "${MYSQL_CONFIG}")
+
+if(EXISTS "${MYSQL_SOURCE_DIR}/pcre")
+ set(MYSQL_REGEX_INCLUDE_DIR "${MYSQL_SOURCE_DIR}/pcre")
+else()
+ set(MYSQL_REGEX_INCLUDE_DIR "${MYSQL_SOURCE_DIR}/regex")
+endif()
+
+set(MYSQL_INCLUDE_DIRS
+ "${MYSQL_BUILD_DIR}/include"
+ "${MYSQL_SOURCE_DIR}/sql"
+ "${MYSQL_SOURCE_DIR}/include"
+ "${MYSQL_REGEX_INCLUDE_DIR}"
+ "${MYSQL_SOURCE_DIR}")
+
+if(MRN_BUNDLED)
+ set(MYSQL_PLUGIN_DIR "${INSTALL_PLUGINDIR}")
+ set(MYSQL_SERVICES_LIB_DIR "${MYSQL_BUILD_DIR}/libservices")
+ set(MYSQL_CFLAGS "${CMAKE_C_FLAGS}")
+ set(MYSQL_VERSION "${MYSQL_BASE_VERSION}")
+else()
+ macro(SET_MYSQL_CONFIG_VALUE OPTION VARIABLE)
+ if(NOT ${VARIABLE})
+ execute_process(COMMAND "${MYSQL_CONFIG}" ${OPTION}
+ OUTPUT_VARIABLE MYSQL_CONFIG_OUTPUT)
+ string(STRIP ${MYSQL_CONFIG_OUTPUT} ${VARIABLE})
+ endif()
+ endmacro()
+
+ set_mysql_config_value("--plugindir" MYSQL_PLUGIN_DIR)
+ set_mysql_config_value("--variable=pkglibdir" MYSQL_PKG_LIB_DIR)
+ set(MYSQL_BUILD_LIBSERVICES_DIR "${MYSQL_BUILD_DIR}/libservices")
+ if(EXISTS "${MYSQL_BUILD_LIBSERVICES_DIR}/libmysqlservices.a")
+ set(MYSQL_SERVICES_LIB_DIR "${MYSQL_BUILD_LIBSERVICES_DIR}")
+ else()
+ set(MYSQL_SERVICES_LIB_DIR "${MYSQL_PKG_LIB_DIR}")
+ endif()
+ set_mysql_config_value("--cflags" MYSQL_CFLAGS)
+ set_mysql_config_value("--version" MYSQL_VERSION)
+endif()
+
+if(${MYSQL_VERSION} VERSION_GREATER "10.0.0" AND
+ ${MYSQL_VERSION} VERSION_LESS "10.0.9")
+ message(FATAL_ERROR
+ "Mroonga doesn't support MariaDB 10.0.0-10.0.8: <${MYSQL_VERSION}>")
+ return()
+endif()
+
+if(MRN_GROONGA_BUNDLED)
+ set(GROONGA_INCLUDE_DIRS "${MRN_BUNDLED_GROONGA_DIR}/include")
+ set(GROONGA_LIBRARY_DIRS "${MRN_BUNDLED_GROONGA_DIR}/lib")
+ set(GROONGA_LIBRARIES "libgroonga")
+ if(EXISTS "${MRN_BUNDLED_GROONGA_DIR}/vendor/plugins/groonga-normalizer-mysql")
+ set(GROONGA_NORMALIZER_MYSQL_FOUND TRUE)
+ else()
+ set(GROONGA_NORMALIZER_MYSQL_FOUND FALSE)
+ endif()
+else()
+ include(FindPkgConfig)
+ pkg_check_modules(GROONGA REQUIRED "groonga >= ${REQUIRED_GROONGA_VERSION}")
+ pkg_check_modules(GROONGA_NORMALIZER_MYSQL
+ "groonga-normalizer-mysql >= ${REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION}")
+endif()
+
+if(GROONGA_NORMALIZER_MYSQL_FOUND AND MRN_GROONGA_BUNDLED)
+ read_file_list(${MRN_BUNDLED_GROONGA_DIR}/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_sources.am MRN_GRN_NORMALIZER_MYSQL_SOURCES)
+ string(REGEX REPLACE "([^;]+)" "${MRN_BUNDLED_GROONGA_DIR}/vendor/plugins/groonga-normalizer-mysql/normalizers/\\1"
+ MRN_GRN_NORMALIZER_MYSQL_SOURCES "${MRN_GRN_NORMALIZER_MYSQL_SOURCES}")
+endif()
+
+include_directories(
+ "${PROJECT_BINARY_DIR}"
+ "${PROJECT_SOURCE_DIR}"
+ "${PROJECT_SOURCE_DIR}/lib"
+ ${MYSQL_INCLUDE_DIRS}
+ ${GROONGA_INCLUDE_DIRS})
+
+if(WIN32)
+ set(MYSQL_LIBRARY_DIRS
+ "${MYSQL_BUILD_DIR}/lib"
+ "${MYSQL_BUILD_DIR}/libmysqld")
+else()
+ set(MYSQL_LIBRARY_DIRS
+ "${MYSQL_SERVICES_LIB_DIR}")
+endif()
+link_directories(
+ ${GROONGA_LIBRARY_DIRS}
+ ${MYSQL_LIBRARY_DIRS})
+
+if(MRN_BUNDLED)
+ if(GROONGA_NORMALIZER_MYSQL_FOUND AND MRN_GROONGA_BUNDLED)
+ mysql_add_plugin(mroonga
+ "${MROONGA_SOURCES};${MRN_UDF_SOURCES};${MRN_GRN_NORMALIZER_MYSQL_SOURCES};${LIBMRN_NEED_MYSQL_SOURCES};${LIBMRN_NO_MYSQL_SOURCES}"
+ STORAGE_ENGINE MODULE_ONLY
+ LINK_LIBRARIES ${GROONGA_LIBRARIES})
+ else()
+ mysql_add_plugin(mroonga
+ "${MROONGA_SOURCES};${MRN_UDF_SOURCES};${LIBMRN_NEED_MYSQL_SOURCES};${LIBMRN_NO_MYSQL_SOURCES}"
+ STORAGE_ENGINE MODULE_ONLY
+ LINK_LIBRARIES ${GROONGA_LIBRARIES})
+ endif()
+ else()
+else()
+ add_library(mroonga MODULE
+ ${MROONGA_SOURCES}
+ ${MRN_UDF_SOURCES}
+ ${LIBMRN_NO_MYSQL_SOURCES}
+ ${LIBMRN_NEED_MYSQL_SOURCES})
+
+ set(MYSQL_LIBRARIES "mysqlservices")
+ target_link_libraries(mroonga ${GROONGA_LIBRARIES} ${MYSQL_LIBRARIES})
+
+ option(WITH_DEBUG "Enable debug options" OFF)
+ if(WITH_DEBUG)
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "SAFE_MUTEX")
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(MRN_C_COMPILE_FLAGS "${MRN_C_COMPILE_FLAGS} -g3 -O0")
+ set(MRN_CXX_COMPILE_FLAGS "${MRN_CXX_COMPILE_FLAGS} -g3 -O0")
+ endif()
+ else()
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "DBUG_OFF")
+ endif()
+
+ option(WITH_DEBUG_FULL "Enable full debug options" OFF)
+ if(WITH_DEBUG_FULL)
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "SAFE_MUTEX" "SAFEMALLOC")
+ endif()
+
+ option(DISABLE_FAST_MUTEXES "Force disabling fast mutex" OFF)
+ if(DISABLE_FAST_MUTEXES)
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "FORCE_FAST_MUTEX_DISABLED=1")
+ endif()
+
+ option(WITH_FAST_MUTEXES "Enable fast mutex" OFF)
+ if(WITH_FAST_MUTEXES)
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "MY_PTHREAD_FASTMUTEX")
+ endif()
+
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ mrn_build_flag("-Wall")
+ mrn_build_flag("-Wextra")
+ mrn_build_flag("-Wno-unused-parameter")
+ mrn_build_flag("-Wno-strict-aliasing")
+ mrn_build_flag("-Wno-deprecated")
+ mrn_check_cxxflag("-fno-implicit-templates")
+ mrn_check_cxxflag("-fno-exceptions")
+ mrn_check_cxxflag("-fno-rtti")
+ mrn_check_cxxflag("-felide-constructors")
+ endif()
+ set_source_files_properties(${MROONGA_SOURCES} PROPERTIES
+ COMPILE_FLAGS "${MYSQL_CFLAGS} ${MRN_CXX_COMPILE_FLAGS}")
+ set_source_files_properties(${LIBMRN_NEED_MYSQL_SOURCES} PROPERTIES
+ COMPILE_FLAGS "${MYSQL_CFLAGS} ${MRN_CXX_COMPILE_FLAGS}")
+ set_source_files_properties(${MRN_UDF_SOURCES} PROPERTIES
+ COMPILE_FLAGS "${MRN_C_COMPILE_FLAGS}")
+ set_source_files_properties(${LIBMRN_NO_MYSQL_SOURCES} PROPERTIES
+ COMPILE_FLAGS "${MRN_C_COMPILE_FLAGS}")
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN")
+ set_target_properties(mroonga PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "ha_mroonga")
+
+ install(TARGETS mroonga DESTINATION "${MYSQL_PLUGIN_DIR}")
+endif()
+
+if(GROONGA_NORMALIZER_MYSQL_FOUND)
+ set(WITH_GROONGA_NORMALIZER_MYSQL 1)
+ ADD_DEFINITIONS(-DWITH_GROONGA_NORMALIZER_MYSQL=1)
+ if(MRN_GROONGA_BUNDLED)
+ ADD_DEFINITIONS(-DGROONGA_NORMALIZER_MYSQL_PLUGIN_IS_BUNDLED_STATIC=1)
+ else()
+ set(GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME \"normalizers/mysql\")
+ set_property(TARGET mroonga APPEND PROPERTY
+ COMPILE_DEFINITIONS "GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME=\"normalizers/mysql\"")
+ endif()
+endif()
+
+set(MRN_DEFAULT_PARSER "TokenBigram" CACHE STRING "The default fulltext parser")
+ADD_DEFINITIONS(-DMRN_PARSER_DEFAULT="${MRN_DEFAULT_PARSER}")
+
+configure_file(
+ "${PROJECT_SOURCE_DIR}/mrn_version.h.in"
+ "${PROJECT_BINARY_DIR}/mrn_version.h")
+
+configure_file(
+ "${PROJECT_SOURCE_DIR}/config.sh.in"
+ "${PROJECT_BINARY_DIR}/config.sh")
+
+set(MRN_TEST_SUITE_DIR "${CMAKE_SOURCE_DIR}/mysql-test/suite/mroonga")
+if(NOT EXISTS "${MRN_TEST_SUITE_DIR}")
+ set(MRN_TEST_SUITE_DIR "${PROJECT_SOURCE_DIR}/mysql-test/mroonga")
+endif()
+configure_file(
+ "${MRN_TEST_SUITE_DIR}/storage/r/information_schema_plugins.result.in"
+ "${MRN_TEST_SUITE_DIR}/storage/r/information_schema_plugins.result"
+ NEWLINE_STYLE LF)
+configure_file(
+ "${MRN_TEST_SUITE_DIR}/storage/r/variable_version.result.in"
+ "${MRN_TEST_SUITE_DIR}/storage/r/variable_version.result"
+ NEWLINE_STYLE LF)
+
+configure_file(
+ "${PROJECT_SOURCE_DIR}/data/install.sql.in"
+ "${PROJECT_BINARY_DIR}/data/install.sql")
+
+if(MRN_BUNDLED)
+ set(MRN_DATA_DIR "${INSTALL_MYSQLSHAREDIR}/${PROJECT_NAME}")
+else()
+ set(MRN_DATA_DIR "share/${PROJECT_NAME}")
+endif()
+install(FILES
+ "${PROJECT_BINARY_DIR}/data/install.sql"
+ "${PROJECT_SOURCE_DIR}/data/uninstall.sql"
+ DESTINATION "${MRN_DATA_DIR}/")
diff --git a/storage/mroonga/ChangeLog b/storage/mroonga/ChangeLog
new file mode 100644
index 00000000000..1a63e191506
--- /dev/null
+++ b/storage/mroonga/ChangeLog
@@ -0,0 +1,3 @@
+2009-01-27 Tetsuro IKEDA <ikdttr at gmail.com>
+
+ * initial import for development
diff --git a/storage/mroonga/Makefile.am b/storage/mroonga/Makefile.am
new file mode 100644
index 00000000000..32fc88ad061
--- /dev/null
+++ b/storage/mroonga/Makefile.am
@@ -0,0 +1,156 @@
+AUTOMAKE_OPTIONS = 1.9.7
+
+LOCALES = ja
+
+AM_CPPFLAGS = $(MYSQL_INCLUDES) $(GROONGA_CFLAGS) -I$(top_srcdir)/lib
+ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS
+
+include sources.am
+
+libraries = \
+ $(top_builddir)/udf/libmrn_udf.la \
+ $(top_builddir)/lib/libmrn_no_mysql.la \
+ $(top_builddir)/lib/libmrn_need_mysql.la
+if WITH_LIBMYSQLSERVICES_COMPAT
+libraries += $(top_builddir)/lib/libmysqlservices.la
+endif
+
+dynamic_plugin_ldflags = -module $(GROONGA_LIBS) $(MYSQL_LIBS)
+dynamic_plugin_cxxflags = $(AM_CXXFLAGS) $(MYSQL_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+dynamic_plugin_cflags = $(AM_CFLAGS) $(MYSQL_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
+
+plugin_LTLIBRARIES = ha_mroonga.la
+ha_mroonga_la_LDFLAGS = $(dynamic_plugin_ldflags)
+ha_mroonga_la_CXXFLAGS = $(dynamic_plugin_cxxflags)
+ha_mroonga_la_CFLAGS = $(dynamic_plugin_cflags)
+ha_mroonga_la_SOURCES = $(sources)
+ha_mroonga_la_LIBADD = $(libraries)
+
+SUBDIRS = \
+ build \
+ lib \
+ udf \
+ test \
+ mysql-test \
+ doc \
+ tools \
+ packages \
+ data
+
+EXTRA_DIST = \
+ AUTHORS \
+ gpg_uid \
+ plug.in \
+ CMakeLists.txt
+
+installcheck-local: install
+ test/run-sql-test.sh
+
+tag:
+ cd $(top_srcdir) && \
+ git tag v$(VERSION) -a -m 'Mroonga $(VERSION)!!!'
+
+update-latest-release: misc
+ @if test -z "$(OLD_RELEASE)"; then \
+ echo "\$$(OLD_RELEASE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(OLD_RELEASE_DATE)"; then \
+ echo "\$$(OLD_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(NEW_RELEASE_DATE)"; then \
+ echo "\$$(NEW_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ cd $(top_srcdir) && \
+ misc/update-latest-release.rb \
+ $(PACKAGE) $(OLD_RELEASE) $(OLD_RELEASE_DATE) \
+ $(VERSION) $(NEW_RELEASE_DATE) \
+ packages/rpm/fedora/mysql-mroonga.spec.in \
+ packages/rpm/fedora/mariadb-mroonga.spec.in \
+ packages/rpm/centos/mariadb-mroonga.spec.in \
+ packages/rpm/centos/mysql55-mroonga.spec.in \
+ packages/rpm/centos/mysql56-community-mroonga.spec.in \
+ packages/debian/changelog \
+ doc/source/install/*.rst \
+ doc/locale/*/LC_MESSAGES/install.po \
+ $(MROONGA_GITHUB_COM_PATH)/index.html \
+ $(MROONGA_GITHUB_COM_PATH)/ja/index.html
+
+update-po:
+ @for lang in $(LOCALES); do \
+ (cd $(top_srcdir)/doc/locale/$$lang/LC_MESSAGES && make update) \
+ done
+
+update-document:
+ @if test -z "$(MROONGA_GITHUB_COM_PATH)"; then \
+ echo "\$$(MROONGA_GITHUB_COM_PATH) is missing"; \
+ echo "add --with-mroonga-github-com-path in configure"; \
+ exit 1; \
+ fi
+ rm -rf tmp-doc
+ mkdir tmp-doc
+ (cd doc && $(MAKE) clean-html)
+ (cd doc && $(MAKE) install docdir=$(abs_srcdir)/tmp-doc/install)
+ ruby $(srcdir)/tools/prepare-sphinx-html.rb tmp-doc/install tmp-doc/dist
+ rm -rf $(MROONGA_GITHUB_COM_PATH)/docs
+ mv tmp-doc/dist/en $(MROONGA_GITHUB_COM_PATH)/docs
+ for locale in `cd tmp-doc/dist; echo *`; do \
+ dest_base_dir=$(MROONGA_GITHUB_COM_PATH)/$${locale}; \
+ mkdir -p $${dest_base_dir}; \
+ dest_dir=$${dest_base_dir}/docs; \
+ rm -rf $${dest_dir}; \
+ mv tmp-doc/dist/$${locale} $${dest_dir}; \
+ done
+
+update-files:
+ cd $(srcdir)/doc && $(MAKE) update-files
+
+update-version:
+ @if test -z "$(NEW_VERSION_MAJOR)"; then \
+ echo "\$$(NEW_VERSION_MAJOR) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(NEW_VERSION_MINOR)"; then \
+ echo "\$$(NEW_VERSION_MINOR) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(NEW_VERSION_MICRO)"; then \
+ echo "\$$(NEW_VERSION_MICRO) is missing"; \
+ exit 1; \
+ fi
+ @echo -n $(NEW_VERSION_MAJOR) > $(srcdir)/version_major
+ @echo -n $(NEW_VERSION_MINOR) > $(srcdir)/version_minor
+ @echo -n $(NEW_VERSION_MICRO) > $(srcdir)/version_micro
+ @echo -n $(NEW_VERSION_MAJOR).$(NEW_VERSION_MINOR)$(NEW_VERSION_MICRO) \
+ > $(srcdir)/version
+ @if test $(NEW_VERSION_MINOR) -eq 0 ; then \
+ printf "0x%02x%02x" \
+ $(NEW_VERSION_MAJOR) $(NEW_VERSION_MICRO) \
+ > $(srcdir)/version_in_hex; \
+ printf "%d.%d" \
+ $(NEW_VERSION_MAJOR) $(NEW_VERSION_MICRO) \
+ > $(srcdir)/plugin_version; \
+ else \
+ printf "0x%02x%02x" \
+ $(NEW_VERSION_MAJOR) $(NEW_VERSION_MINOR)$(NEW_VERSION_MICRO) \
+ > $(srcdir)/version_in_hex; \
+ printf "%d.%d" \
+ $(NEW_VERSION_MAJOR) $(NEW_VERSION_MINOR)$(NEW_VERSION_MICRO) \
+ > $(srcdir)/plugin_version; \
+ fi
+
+upload-to-github:
+ ruby $(srcdir)/tools/upload-to-github.rb \
+ $$USER $(PACKAGE)-$(VERSION).tar.gz
+
+echo-cutter:
+ echo $(CUTTER)
+
+misc:
+ @if test -z "$(CUTTER_SOURCE_PATH)"; then \
+ echo "\$$(CUTTER_SOURCE_PATH) is missing"; \
+ exit 1; \
+ fi
+ ln -s "$(CUTTER_SOURCE_PATH)/misc" misc
diff --git a/storage/mroonga/NEWS b/storage/mroonga/NEWS
new file mode 100644
index 00000000000..9dfa8b8dcc5
--- /dev/null
+++ b/storage/mroonga/NEWS
@@ -0,0 +1 @@
+See doc/source/news.txt or http://mroonga.github.com/docs/news.html.
diff --git a/storage/mroonga/README b/storage/mroonga/README
new file mode 100644
index 00000000000..7c431018d86
--- /dev/null
+++ b/storage/mroonga/README
@@ -0,0 +1 @@
+See doc/locale/en/html/index.html or doc/locale/ja/html/index.html
diff --git a/storage/mroonga/autogen.sh b/storage/mroonga/autogen.sh
new file mode 100755
index 00000000000..7a1d38635d4
--- /dev/null
+++ b/storage/mroonga/autogen.sh
@@ -0,0 +1,116 @@
+#!/bin/sh
+
+warn() {
+ echo " WARNING: $@" 1>&2
+}
+
+# init
+
+LIBTOOLIZE=libtoolize
+ACLOCAL=aclocal
+AUTOCONF=autoconf
+AUTOHEADER=autoheader
+AUTOMAKE=automake
+
+case `uname -s` in
+Darwin)
+ LIBTOOLIZE=glibtoolize
+ ;;
+FreeBSD)
+ ACLOCAL_ARGS="$ACLOCAL_ARGS -I /usr/local/share/aclocal/"
+ ;;
+esac
+
+
+# libtoolize
+echo "Searching libtoolize..."
+if [ `which $LIBTOOLIZE` ] ; then
+ echo " FOUND: libtoolize -> $LIBTOOLIZE"
+else
+ warn "Cannot Found libtoolize... input libtool command"
+ read LIBTOOLIZE
+ LIBTOOLIZE=`which $LIBTOOLIZE`
+ if [ `which $LIBTOOLIZE` ] ; then
+ echo " SET: libtoolize -> $LIBTOOLIZE"
+ else
+ warn "$LIBTOOLIZE: Command not found."
+ exit 1;
+ fi
+fi
+
+# aclocal
+echo "Searching aclocal..."
+if [ `which $ACLOCAL` ] ; then
+ echo " FOUND: aclocal -> $ACLOCAL"
+else
+ warn "Cannot Found aclocal... input aclocal command"
+ read ACLOCAL
+ ACLOCAL=`which $ACLOCAL`
+ if [ `which $ACLOCAL` ] ; then
+ echo " SET: aclocal -> $ACLOCAL"
+ else
+ warn "$ACLOCAL: Command not found."
+ exit 1;
+ fi
+fi
+
+# automake
+echo "Searching automake..."
+if [ `which $AUTOMAKE` ] ; then
+ echo " FOUND: automake -> $AUTOMAKE"
+else
+ warn "Cannot Found automake... input automake command"
+ read AUTOMAKE
+ ACLOCAL=`which $AUTOMAKE`
+ if [ `which $AUTOMAKE` ] ; then
+ echo " SET: automake -> $AUTOMAKE"
+ else
+ warn "$AUTOMAKE: Command not found."
+ exit 1;
+ fi
+fi
+
+# autoheader
+echo "Searching autoheader..."
+if [ `which $AUTOHEADER` ] ; then
+ echo " FOUND: autoheader -> $AUTOHEADER"
+else
+ warn "Cannot Found autoheader... input autoheader command"
+ read AUTOHEADER
+ ACLOCAL=`which $AUTOHEADER`
+ if [ `which $AUTOHEADER` ] ; then
+ echo " SET: autoheader -> $AUTOHEADER"
+ else
+ warn "$AUTOHEADER: Command not found."
+ exit 1;
+ fi
+fi
+
+# autoconf
+echo "Searching autoconf..."
+if [ `which $AUTOCONF` ] ; then
+ echo " FOUND: autoconf -> $AUTOCONF"
+else
+ warn "Cannot Found autoconf... input autoconf command"
+ read AUTOCONF
+ ACLOCAL=`which $AUTOCONF`
+ if [ `which $AUTOCONF` ] ; then
+ echo " SET: autoconf -> $AUTOCONF"
+ else
+ warn "$AUTOCONF: Command not found."
+ exit 1;
+ fi
+fi
+
+set -e
+
+echo "Running libtoolize ..."
+$LIBTOOLIZE --force --copy
+echo "Running aclocal ..."
+$ACLOCAL ${ACLOCAL_ARGS}
+echo "Running autoheader..."
+$AUTOHEADER
+echo "Running automake ..."
+$AUTOMAKE --add-missing --copy
+echo "Running autoconf ..."
+$AUTOCONF
diff --git a/storage/mroonga/build/Makefile.am b/storage/mroonga/build/Makefile.am
new file mode 100644
index 00000000000..506a11dc3b0
--- /dev/null
+++ b/storage/mroonga/build/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = \
+ cmake_modules
diff --git a/storage/mroonga/build/cmake_modules/Makefile.am b/storage/mroonga/build/cmake_modules/Makefile.am
new file mode 100644
index 00000000000..83fb0f0c1b4
--- /dev/null
+++ b/storage/mroonga/build/cmake_modules/Makefile.am
@@ -0,0 +1,2 @@
+EXTRA_DIST = \
+ ReadFileList.cmake
diff --git a/storage/mroonga/build/cmake_modules/ReadFileList.cmake b/storage/mroonga/build/cmake_modules/ReadFileList.cmake
new file mode 100644
index 00000000000..018587991d8
--- /dev/null
+++ b/storage/mroonga/build/cmake_modules/ReadFileList.cmake
@@ -0,0 +1,27 @@
+# Copyright(C) 2012 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+macro(read_file_list file_name output_variable)
+ file(READ ${file_name} ${output_variable})
+ # Remove variable declaration at the first line:
+ # "libgroonga_la_SOURCES = \" -> ""
+ string(REGEX REPLACE "^.*=[ \t]*\\\\" ""
+ ${output_variable} "${${output_variable}}")
+ # Remove white spaces: " com.c \\\n com.h \\\n" -> "com.c\\com.h"
+ string(REGEX REPLACE "[ \t\n]" "" ${output_variable} "${${output_variable}}")
+ # Convert string to list: "com.c\\com.h" -> "com.c;com.h"
+ # NOTE: List in CMake is ";" separated string.
+ string(REGEX REPLACE "\\\\" ";" ${output_variable} "${${output_variable}}")
+endmacro()
diff --git a/storage/mroonga/build/makefiles/LC_MESSAGES.am b/storage/mroonga/build/makefiles/LC_MESSAGES.am
new file mode 100644
index 00000000000..acfc3da238e
--- /dev/null
+++ b/storage/mroonga/build/makefiles/LC_MESSAGES.am
@@ -0,0 +1,5 @@
+BUILT_SOURCES =
+EXTRA_DIST =
+SUFFIXES =
+
+include $(top_srcdir)/build/makefiles/gettext.am
diff --git a/storage/mroonga/build/makefiles/gettext.am b/storage/mroonga/build/makefiles/gettext.am
new file mode 100644
index 00000000000..9706b485dd1
--- /dev/null
+++ b/storage/mroonga/build/makefiles/gettext.am
@@ -0,0 +1,73 @@
+include $(top_srcdir)/doc/files.am
+include $(top_srcdir)/build/makefiles/sphinx-build.am
+
+EXTRA_DIST += \
+ $(po_files)
+
+if DOCUMENT_AVAILABLE
+EXTRA_DIST += \
+ $(mo_files)
+endif
+
+if DOCUMENT_BUILDABLE
+BUILT_SOURCES += \
+ pot-build-stamp \
+ edit-po-build-stamp \
+ $(mo_files)
+endif
+
+SUFFIXES += .pot .po .mo .edit
+
+.PHONY: gettext update build
+
+.pot.edit:
+ if test -f $*.po; then \
+ msgmerge \
+ --quiet \
+ --sort-by-file \
+ --output-file=$@.tmp \
+ $*.po \
+ $<; \
+ else \
+ msginit \
+ --input=$< \
+ --output-file=$@.tmp \
+ --locale=$(LOCALE) \
+ --no-translator; \
+ fi
+ (echo "# -*- po -*-"; \
+ GREP_OPTIONS= grep -v '^# -\*- po -\*-' $@.tmp | \
+ GREP_OPTIONS= grep -v '^"POT-Creation-Date:') > $@
+ rm $@.tmp
+
+.edit.po:
+ msgcat --no-location --output $@ $<
+
+.po.mo:
+ msgfmt -o $@ $<
+
+if DOCUMENT_BUILDABLE
+update: pot-build-stamp edit-po-build-stamp
+build: update $(mo_files)
+else
+update:
+build:
+endif
+
+html: build
+man: build
+pdf: build
+
+gettext:
+ rm *.pot || true
+ $(SPHINX_BUILD_COMMAND) -d doctrees -b gettext $(ALLSPHINXOPTS) .
+ xgettext --language Python --output conf.pot \
+ $(top_srcdir)/doc/source/conf.py
+
+pot-build-stamp: $(absolute_source_files)
+ $(MAKE) gettext
+ @touch $@
+
+edit-po-build-stamp: $(absolute_source_files)
+ $(MAKE) $(edit_po_files)
+ @touch $@
diff --git a/storage/mroonga/build/makefiles/locale.am b/storage/mroonga/build/makefiles/locale.am
new file mode 100644
index 00000000000..414c19a7e34
--- /dev/null
+++ b/storage/mroonga/build/makefiles/locale.am
@@ -0,0 +1,12 @@
+SUBDIRS = LC_MESSAGES
+
+BUILT_SOURCES =
+EXTRA_DIST =
+
+include $(top_srcdir)/build/makefiles/sphinx.am
+
+init:
+ cd LC_MESSAGES && $(MAKE) $@
+
+update-po:
+ cd LC_MESSAGES && $(MAKE) update
diff --git a/storage/mroonga/build/makefiles/sphinx-build.am b/storage/mroonga/build/makefiles/sphinx-build.am
new file mode 100644
index 00000000000..e237377ba80
--- /dev/null
+++ b/storage/mroonga/build/makefiles/sphinx-build.am
@@ -0,0 +1,19 @@
+# You can set these variables from the command line.
+DOCTREES_BASE = doctrees
+
+SPHINXOPTS =
+PAPER =
+
+# Internal variables.
+SOURCE_DIR = $(abs_top_srcdir)/doc/source
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) -E $(SPHINXOPTS) $(SOURCE_DIR)
+
+SPHINX_DIR = $(abs_top_builddir)/doc/sphinx
+SPHINX_BUILD_COMMAND = \
+ DOCUMENT_VERSION="$(DOCUMENT_VERSION)" \
+ DOCUMENT_VERSION_FULL="$(DOCUMENT_VERSION_FULL)" \
+ LOCALE="$(LOCALE)" \
+ PYTHONPATH="$(SPHINX_DIR):$$PYTHONPATH" \
+ $(SPHINX_BUILD)
diff --git a/storage/mroonga/build/makefiles/sphinx.am b/storage/mroonga/build/makefiles/sphinx.am
new file mode 100644
index 00000000000..f84fb23b739
--- /dev/null
+++ b/storage/mroonga/build/makefiles/sphinx.am
@@ -0,0 +1,179 @@
+include $(top_srcdir)/doc/files.am
+include $(top_srcdir)/build/makefiles/sphinx-build.am
+
+$(html_files): html-build-stamp
+$(html_files_relative_from_locale_dir): html-build-stamp
+$(man_files): man-build-stamp
+
+am__nobase_dist_doc_locale_DATA_DIST =
+if DOCUMENT_AVAILABLE
+doc_localedir = $(docdir)/$(LOCALE)
+nobase_dist_doc_locale_DATA = \
+ $(html_files_relative_from_locale_dir)
+am__nobase_dist_doc_locale_DATA_DIST += \
+ $(nobase_dist_doc_locale_DATA)
+endif
+
+document_source_files = \
+ $(absolute_source_files) \
+ $(absolute_theme_files) \
+ $(po_files_relative_from_locale_dir) \
+ $(mo_files_relative_from_locale_dir)
+
+required_build_stamps = \
+ html-build-stamp \
+ man-build-stamp \
+ mo-build-stamp
+
+if DOCUMENT_BUILDABLE
+EXTRA_DIST += $(required_build_stamps)
+endif
+
+man_files = \
+ man/$(PACKAGE_NAME).1
+
+generated_files = \
+ $(DOCTREES_BASE) \
+ man \
+ man-build-stamp \
+ html \
+ html-build-stamp \
+ pdf \
+ pdf-build-stamp \
+ dirhtml \
+ dirhtml-build-stamp \
+ pickle \
+ pikcle-build-stamp \
+ json \
+ json-build-stamp \
+ htmlhelp \
+ htmlhelp-build-stamp \
+ qthelp \
+ qthelp-build-stamp \
+ latex \
+ latex-build-stamp \
+ changes \
+ changes-build-stamp \
+ linkcheck \
+ linkcheck-build-stamp \
+ doctest
+
+$(mo_files_relative_from_locale_dir): mo-build-stamp
+
+mo-build-stamp: $(po_files_relative_from_locale_dir)
+ cd LC_MESSAGES && $(MAKE) build
+ @touch $@
+
+if DOCUMENT_BUILDABLE
+clean-local: $(clean_targets) clean-doctrees
+
+clean-doctrees:
+ rm -rf $(DOCTREES_BASE)
+
+maintainer-clean-local:
+ rm -rf -- $(generated_files)
+endif
+
+.PHONY: help
+.PHONY: man clean-man
+.PHONY: html clean-html
+.PHONY: pdf
+.PHONY: dirhtml
+.PHONY: pickle
+.PHONY: json
+.PHONY: htmlhelp
+.PHONY: qthelp
+.PHONY: latex
+.PHONY: changes
+.PHONY: linkcheck
+.PHONY: doctest
+
+if DOCUMENT_BUILDABLE
+help:
+ @echo "Please use \`make <target>' where <target> is one of"
+ @echo " man to make man files"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " rdoc to make RDoc files"
+ @echo " textile to make Textile files"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+man: man-build-stamp
+html: html-build-stamp
+dirhtml: dirhtml-build-stamp
+pickle: pickle-build-stamp
+json: json-build-stamp
+htmlhelp: htmlhelp-build-stamp
+qthelp: qthelp-build-stamp
+latex: latex-build-stamp
+rdoc: rdoc-build-stamp
+textile: textile-build-stamp
+changes: changes-build-stamp
+linkcheck: linkcheck-build-stamp
+doctest: doctest-build-stamp
+
+clean_targets = \
+ clean-man \
+ clean-html \
+ clean-dirhtml \
+ clean-pickle \
+ clean-json \
+ clean-htmlhelp \
+ clean-qthelp \
+ clean-latex \
+ clean-rdoc \
+ clean-textile \
+ clean-changes \
+ clean-linkcheck \
+ clean-doctest
+
+$(clean_targets):
+ target=`echo $@ | sed -e 's/^clean-//'`; \
+ rm -rf $${target}-build-stamp $${target}
+
+build_stamps = \
+ man-build-stamp \
+ html-build-stamp \
+ dirhtml-build-stamp \
+ pickle-build-stamp \
+ json-build-stamp \
+ htmlhelp-build-stamp \
+ qthelp-build-stamp \
+ latex-build-stamp \
+ rdoc-build-stamp \
+ textile-build-stamp \
+ changes-build-stamp \
+ linkcheck-build-stamp \
+ doctest-build-stamp
+
+$(build_stamps): $(document_source_files)
+ target=`echo $@ | sed -e 's/-build-stamp$$//'`; \
+ $(SPHINX_BUILD_COMMAND) \
+ -Dlanguage=$(LOCALE) \
+ -d $(DOCTREES_BASE)/$${target} \
+ -b $${target} \
+ $(ALLSPHINXOPTS) \
+ $${target}
+ @touch $@
+
+qthelp: qthelp-message
+qthelp-message: qthelp-build-stamp
+ @echo "Build finished; now you can run 'qcollectiongenerator' with the" \
+ ".qhcp project file in qthelp/*, like this:"
+ @echo "# qcollectiongenerator qthelp/groonga.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile qthelp/groonga.qhc"
+
+latex: latex-message
+latex-message: latex-build-stamp
+ @echo "Build finished; the LaTeX files are in latex/*."
+ @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+ "run these through (pdf)latex."
+endif
diff --git a/storage/mroonga/config.sh.in b/storage/mroonga/config.sh.in
new file mode 100644
index 00000000000..2b584c6916d
--- /dev/null
+++ b/storage/mroonga/config.sh.in
@@ -0,0 +1,20 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+MYSQL_SOURCE_DIR="@MYSQL_SOURCE_DIR@"
+MYSQL_BUILD_DIR="@MYSQL_BUILD_DIR@"
+MYSQL_VERSION="@MYSQL_VERSION@"
+MRN_BUNDLED="@MRN_BUNDLED@"
diff --git a/storage/mroonga/configure.ac b/storage/mroonga/configure.ac
new file mode 100644
index 00000000000..48312a44c8c
--- /dev/null
+++ b/storage/mroonga/configure.ac
@@ -0,0 +1,493 @@
+AC_PREREQ(2.59)
+
+m4_define([mrn_version_major], m4_include(version_major))
+m4_define([mrn_version_minor], m4_include(version_minor))
+m4_define([mrn_version_micro], m4_include(version_micro))
+m4_define([mrn_version], m4_include(version))
+m4_define([mrn_version_in_hex], m4_include(version_in_hex))
+m4_define([mrn_plugin_version], m4_include(plugin_version))
+
+AC_INIT([mroonga], [mrn_version], [groonga-talk@lists.sourceforge.net])
+AC_CONFIG_HEADERS([config.h])
+
+AM_INIT_AUTOMAKE([tar-pax foreign subdir-objects])
+
+MRN_VERSION=mrn_version
+MRN_VERSION_MAJOR=mrn_version_major
+MRN_VERSION_MINOR=mrn_version_minor
+MRN_VERSION_MICRO=mrn_version_micro
+MRN_VERSION_IN_HEX=mrn_version_in_hex
+MRN_PLUGIN_VERSION=mrn_plugin_version
+AC_SUBST([MRN_VERSION])
+AC_SUBST([MRN_VERSION_MAJOR])
+AC_SUBST([MRN_VERSION_MINOR])
+AC_SUBST([MRN_VERSION_MICRO])
+AC_SUBST([MRN_VERSION_IN_HEX])
+AC_SUBST([MRN_PLUGIN_VERSION])
+
+MRN_PACKAGE_STRING="$PACKAGE_STRING"
+AC_SUBST([MRN_PACKAGE_STRING])
+
+MRN_BUNDLED=FALSE
+AC_SUBST([MRN_BUNDLED])
+
+AC_C_BIGENDIAN
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_CPP
+AC_PROG_LIBTOOL
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+
+AC_DEFUN([CHECK_CFLAG], [
+ AC_MSG_CHECKING([if gcc supports $1])
+ old_CFLAGS=$CFLAGS
+ flag=`echo '$1' | sed -e 's,^-Wno-,-W,'`
+ CFLAGS="$CFLAGS $flag -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
+ [check_cflag=yes],
+ [check_cflag=no])
+ CFLAGS="$old_CFLAGS"
+ if test "x$check_cflag" = "xyes"; then
+ CFLAGS="$CFLAGS $1"
+ fi
+ AC_MSG_RESULT([$check_cflag])
+])
+
+AC_DEFUN([CHECK_CXXFLAG], [
+ AC_MSG_CHECKING([if g++ supports $1])
+ old_CXXFLAGS=$CXXFLAGS
+ flag=`echo '$1' | sed -e 's,^-Wno-,-W,'`
+ CXXFLAGS="$CXXFLAGS $flag -Werror"
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
+ [check_cxxflag=yes],
+ [check_cxxflag=no])
+ AC_LANG_POP([C++])
+ CXXFLAGS="$old_CXXFLAGS"
+ if test "x$check_cxxflag" = "xyes"; then
+ CXXFLAGS="$CXXFLAGS $1"
+ fi
+ AC_MSG_RESULT([$check_cxxflag])
+])
+
+AC_DEFUN([CHECK_BUILD_FLAG], [
+ CHECK_CFLAG([$1])
+ CHECK_CXXFLAG([$1])
+])
+
+if test "$GCC" = "yes"; then
+ CHECK_BUILD_FLAG([-Wall])
+ CHECK_BUILD_FLAG([-Wextra])
+ CHECK_BUILD_FLAG([-Wno-unused-parameter])
+ CHECK_BUILD_FLAG([-Wno-strict-aliasing])
+ # REMOVEME: workaround for MySQL/MariaDB 5.5.22 :<
+ # They use deprecated MYSQL::generate_name style in class definition.
+ CHECK_BUILD_FLAG([-Wno-deprecated])
+fi
+
+AC_MSG_CHECKING(for the suffix of plugin shared libraries)
+shrext_cmds=$(./libtool --config | grep '^shrext_cmds=')
+eval $shrext_cmds
+module=yes eval MRN_PLUGIN_SUFFIX="$shrext_cmds"
+AC_MSG_RESULT($MRN_PLUGIN_SUFFIX)
+if test -z "$MRN_PLUGIN_SUFFIX"; then
+ AC_MSG_ERROR([can't detect plugin suffix])
+fi
+AC_SUBST(MRN_PLUGIN_SUFFIX)
+
+AC_ARG_WITH(libmysqlservices-compat,
+ [AS_HELP_STRING([--with-libmysqlservices-compat],
+ [Use libmysqlservices compatible library for missing libmysqlservices.a])
+ ],
+ [with_libmysqlservices_compat=$withval],
+ [with_libmysqlservices_compat=no])
+AM_CONDITIONAL([WITH_LIBMYSQLSERVICES_COMPAT], [test "${with_libmysqlservices_compat}" != "no"])
+
+AC_DEFUN([CONFIG_OPTION_MYSQL],[
+ AC_MSG_CHECKING([mysql source])
+
+ ac_mysql_source_dir=
+ AC_ARG_WITH([mysql-source],
+ [AS_HELP_STRING([--with-mysql-source=PATH], [MySQL source directory PATH])],
+ [
+ ac_mysql_source_dir="$withval"
+ if test -f "$ac_mysql_source_dir/sql/handler.h"; then
+ case "$ac_mysql_source_dir" in
+ /*)
+ :
+ ;;
+ *)
+ ac_mysql_source_dir="$ac_pwd/$ac_mysql_source_dir"
+ ;;
+ esac
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_ERROR([invalid MySQL source directory])
+ fi
+ ],
+ [AC_MSG_ERROR([--with-mysql-source=PATH is required])]
+ )
+ MYSQL_SOURCE_DIR="$ac_mysql_source_dir"
+ AC_SUBST(MYSQL_SOURCE_DIR)
+
+ ac_mysql_build_dir=
+ AC_ARG_WITH([mysql-build],
+ [AS_HELP_STRING([--with-mysql-build=PATH], [MySQL build directory PATH])],
+ [ac_mysql_build_dir="$withval"],
+ [ac_mysql_build_dir="$ac_mysql_source_dir"]
+ )
+ case "$ac_mysql_build_dir" in
+ /*)
+ :
+ ;;
+ *)
+ ac_mysql_build_dir="$ac_pwd/$ac_mysql_build_dir"
+ ;;
+ esac
+ MYSQL_BUILD_DIR="$ac_mysql_build_dir"
+ AC_SUBST(MYSQL_BUILD_DIR)
+
+ AC_MSG_CHECKING([mysql_config])
+ AC_ARG_WITH([mysql-config],
+ [AS_HELP_STRING([--with-mysql-config=PATH],
+ [mysql_config PATH])],
+ [ac_mysql_config="$withval"],
+ [ac_mysql_config=])
+ if test -z "$ac_mysql_config"; then
+ AC_PATH_PROG(ac_mysql_config, mysql_config, mysql-config-not-found)
+ fi
+ if test "$ac_mysql_config" = "mysql-config-not-found"; then
+ AC_MSG_ERROR([can't detect mysql_config. Please specify mysql_config path by --with-mysql-config=PATH.])
+ fi
+ AC_MSG_RESULT([$ac_mysql_config])
+
+ plugindir="$($ac_mysql_config --plugindir)"
+ if test $? -ne 0; then
+ AC_MSG_ERROR([failed to run "$ac_mysql_config": $plugindir])
+ fi
+ AC_SUBST(plugindir)
+
+ MYSQL_CFLAGS="$MYSQL_CFLAGS $($ac_mysql_config --cflags)"
+ AC_SUBST(MYSQL_CFLAGS)
+
+ MYSQL_INCLUDES=""
+ MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_build_dir/include"
+ MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/sql"
+ MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir/include"
+ if test -d "$ac_mysql_source_dir/pcre"; then
+ mysql_regex_include_dir="$ac_mysql_source_dir/pcre"
+ else
+ mysql_regex_include_dir="$ac_mysql_source_dir/regex"
+ fi
+ MYSQL_INCLUDES="$MYSQL_INCLUDES -I$mysql_regex_include_dir"
+ MYSQL_INCLUDES="$MYSQL_INCLUDES -I$ac_mysql_source_dir"
+ MYSQL_INCLUDES="$MYSQL_INCLUDES $($ac_mysql_config --include)"
+ AC_SUBST(MYSQL_INCLUDES)
+
+ MYSQL_VERSION="$($ac_mysql_config --version)"
+ AC_SUBST(MYSQL_VERSION)
+
+ if test "${with_libmysqlservices_compat}" = "no"; then
+ MYSQL_MAJOR_MINOR_VERSION=["$(echo $MYSQL_VERSION | sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*[a-z]*\)$/\1.\2/')"]
+ case "$MYSQL_MAJOR_MINOR_VERSION" in
+ 5.1)
+ MYSQL_LIBS=""
+ ;;
+ *)
+ AC_MSG_CHECKING([for libmysqlservices.a directory])
+ pkglibdir="$($ac_mysql_config --variable=pkglibdir)"
+ mysql_build_libservices_dir="${MYSQL_BUILD_DIR}/libservices"
+ if test -f "${mysql_build_libservices_dir}/libmysqlservices.a"; then
+ mysql_services_lib_dir="${mysql_build_libservices_dir}"
+ else
+ if test -f "${pkglibdir}/libmysqlservices.a"; then
+ mysql_services_lib_dir="${pkglibdir}"
+ elif test -f "${pkglibdir}/mysql/libmysqlservices.a"; then
+ mysql_services_lib_dir="${pkglibdir}/mysql"
+ else
+ AC_MSG_ERROR([libmysqlservices.a is not found in <${pkglibdir}/> and <${pkglibdir}/mysql/>])
+ fi
+ fi
+ AC_MSG_RESULT([$mysql_services_lib_dir])
+ MYSQL_LIBS="$MYSQL_LIBS -L\"$mysql_services_lib_dir\" -lmysqlservices"
+ ;;
+ esac
+ AC_SUBST(MYSQL_LIBS)
+ fi
+])
+
+m4_define([mrn_required_groonga_version], m4_include(required_groonga_version))
+REQUIRED_GROONGA_VERSION=mrn_required_groonga_version
+AC_SUBST(REQUIRED_GROONGA_VERSION)
+AC_DEFUN([CONFIG_OPTION_GROONGA],[
+ PKG_CHECK_MODULES(GROONGA, groonga >= ${REQUIRED_GROONGA_VERSION})
+ _PKG_CONFIG(GROONGA_VERSION, variable=groonga_version, groonga)
+ GROONGA_VERSION=$pkg_cv_GROONGA_VERSION
+ AC_SUBST(GROONGA_VERSION)
+])
+
+m4_define([mrn_required_groonga_normalizer_mysql_version],
+ m4_include(required_groonga_normalizer_mysql_version))
+REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION=mrn_required_groonga_normalizer_mysql_version
+AC_DEFUN([CONFIG_OPTION_GROONGA_NORMALIZER_MYSQL], [
+ AC_MSG_CHECKING([for groonga-normalizer-mysql])
+ PKG_CHECK_EXISTS([groonga-normalizer-mysql >= ${REQUIRED_GROONGA_NORMALIZER_MYSQL_VERSION}],
+ [WITH_GROONGA_NORMALIZER_MYSQL=yes],
+ [WITH_GROONGA_NORMALIZER_MYSQL=no])
+ AC_MSG_RESULT($WITH_GROONGA_NORMALIZER_MYSQL)
+ if test "$WITH_GROONGA_NORMALIZER_MYSQL" = "yes"; then
+ AC_DEFINE([WITH_GROONGA_NORMALIZER_MYSQL],
+ [1],
+ [Use MySQL normalizer plugin for groonga])
+ _PKG_CONFIG(plugin_name, variable=plugin_name, groonga-normalizer-mysql)
+ GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME=$pkg_cv_plugin_name
+ AC_DEFINE_UNQUOTED([GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME],
+ "${GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME}",
+ [Name of MySQL normalizer plugin for groonga])
+ fi
+])
+
+AC_ARG_WITH(debug,
+ [dnl
+AS_HELP_STRING([--with-debug],
+ [Add debug code])
+AS_HELP_STRING([--with-debug=full],
+ [Add debug code (adds memory checker, very slow)])dnl
+ ],
+ [with_debug=$withval],
+ [with_debug=no])
+if test "$with_debug" = "yes"
+then
+ # Medium debug.
+ AC_DEFINE([DBUG_ON], [1], [Use libdbug])
+ CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DSAFE_MUTEX $CFLAGS -O0 -g3"
+ CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DSAFE_MUTEX $CXXFLAGS -O0 -g3"
+elif test "$with_debug" = "full"
+then
+ # Full debug. Very slow in some cases
+ AC_DEFINE([DBUG_ON], [1], [Use libdbug])
+ CFLAGS="$DEBUG_CFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS -O0 -g3"
+ CXXFLAGS="$DEBUG_CXXFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS -O0 -g3"
+else
+ # Optimized version. No debug
+ AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
+ CFLAGS="$OPTIMIZE_CFLAGS $CFLAGS"
+ CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
+fi
+
+AC_ARG_WITH(valgrind,
+ [AS_HELP_STRING([--with-valgrind], [Use valgrind. [default=no]])],
+ [with_valgrind="$withval"],
+ [with_valgrind="no"])
+if test "$with_valgrind" != "no"; then
+ CFLAGS="-DHAVE_valgrind $CFLAGS"
+ CXXFLAGS="-DHAVE_valgrind $CXXFLAGS"
+fi
+
+CONFIG_OPTION_MYSQL
+CONFIG_OPTION_GROONGA
+CONFIG_OPTION_GROONGA_NORMALIZER_MYSQL
+
+AC_ARG_WITH(default_parser,
+ [AS_HELP_STRING([--with-default-parser=PARSER],
+ [specify the default fulltext parser like
+ --with-default-parser=TokenMecab.
+ (default: TokenBigram)])],
+ [default_parser=$withval],
+ [default_parser=no])
+if test x"$default_parser" != x"no"; then
+ AC_DEFINE_UNQUOTED(MRN_PARSER_DEFAULT,
+ "$default_parser",
+ "specified default fulltext parser")
+ MRN_DEFAULT_PARSER=$default_parser
+else
+ MRN_DEFAULT_PARSER=TokenBigram
+fi
+AC_SUBST(MRN_DEFAULT_PARSER)
+
+AC_ARG_ENABLE(fast_mutexes,
+ [AS_HELP_STRING([--disable-fast-mutexes],
+ [Force disable fast mutex.
+ [default: use mysql_config output]])],
+ [enable_fast_mutexes=$enableval],
+ [enable_fast_mutexes=auto])
+if test "$enable_fast_mutexes" = "no"; then
+ AC_DEFINE(FORCE_FAST_MUTEX_DISABLED, [1],
+ [Define to 1 if force fast mutexes disabled])
+elif test "$enable_fast_mutexes" = "yes"; then
+ AC_DEFINE(MY_PTHREAD_FASTMUTEX, [1],
+ [Define to 1 if fast mutexes enabled])
+fi
+
+AC_ARG_ENABLE(dtrace,
+ [AS_HELP_STRING([--enable-dtrace],
+ [Enable DTrace. [default: no]])],
+ [enable_dtrace=$enableval],
+ [enable_dtrace=no])
+if test "$enable_dtrace" = "no"; then
+ AC_DEFINE(DISABLE_DTRACE, [1], [Define to 1 if DTrace is disabled])
+fi
+
+# check Cutter with C++ support if available
+REQUIRED_MINIMUM_CUTTER_VERSION=1.1.3
+m4_ifdef([AC_CHECK_CPPCUTTER], [
+AC_CHECK_CPPCUTTER(>= $REQUIRED_MINIMUM_CUTTER_VERSION)
+],
+[ac_cv_use_cutter="no"])
+AM_CONDITIONAL([WITH_CUTTER], [test "$ac_cv_use_cutter" != "no"])
+
+# For mroonga.github.com
+AC_ARG_WITH(mroonga-github-com-path,
+ [AS_HELP_STRING([--with-mroonga-github-com-path=PATH],
+ [specify mroonga.github.com path to update mroonga.github.com.])],
+ [MROONGA_GITHUB_COM_PATH="$withval"],
+ [MROONGA_GITHUB_COM_PATH=""])
+AC_SUBST(MROONGA_GITHUB_COM_PATH)
+
+# For package
+AC_ARG_WITH(rsync-path,
+ [AS_HELP_STRING([--with-rsync-path=PATH],
+ [specify rsync path to upload mroonga packages.])],
+ [RSYNC_PATH="$withval"],
+ [RSYNC_PATH="packages@packages.groonga.org:public"])
+AC_SUBST(RSYNC_PATH)
+
+AC_ARG_WITH(launchpad-uploader-pgp-key,
+ [AS_HELP_STRING([--with-launchpad-uploader-pgp-key=KEY],
+ [specify PGP key UID to upload Groonga packages to Launchpad.])],
+ [LAUNCHPAD_UPLOADER_PGP_KEY="$withval"],
+ [LAUNCHPAD_UPLOADER_PGP_KEY=""])
+AC_SUBST(LAUNCHPAD_UPLOADER_PGP_KEY)
+
+GPG_UID=m4_include(gpg_uid)
+AC_SUBST(GPG_UID)
+
+# For update-version
+AC_ARG_WITH(cutter-source-path,
+ [AS_HELP_STRING([--with-cutter-source-path=PATH],
+ [specify Cutter source path for mroonga's release manager.])],
+ [CUTTER_SOURCE_PATH="$withval"])
+case "$CUTTER_SOURCE_PATH" in
+ ""|/*)
+ : # do nothing
+ ;;
+ *)
+ CUTTER_SOURCE_PATH="\$(top_builddir)/${CUTTER_SOURCE_PATH}"
+ ;;
+esac
+AC_SUBST(CUTTER_SOURCE_PATH)
+
+
+# Document
+AC_MSG_CHECKING([whether enable document])
+AC_ARG_ENABLE(document,
+ [AS_HELP_STRING([--enable-document],
+ [enable document generation by Sphinx. [default=auto]])],
+ [enable_document="$enableval"],
+ [enable_document="auto"])
+AC_MSG_RESULT($enable_document)
+
+document_available=no
+document_buildable=no
+have_built_document=no
+if test x"$enable_document" != x"no"; then
+ if test -f "$srcdir/doc/build-stamp"; then
+ document_available=yes
+ have_built_document=yes
+ fi
+
+ if test x"$enable_document" = x"yes"; then
+ AC_PATH_PROG(SPHINX_BUILD, sphinx-build, [])
+ if test -n "$SPHINX_BUILD"; then
+ sphinx_build_version=`"$SPHINX_BUILD" --version`
+ if ! echo "$sphinx_build_version" | grep -q ' 1\.[[23]]'; then
+ AC_MSG_ERROR([
+sphinx-build is old: $sphinx_build_version
+Sphinx 1.2 or later is required.])
+ fi
+ document_available=yes
+ document_buildable=yes
+ else
+ AC_MSG_ERROR([
+No sphinx-build found.
+Install it and try again.
+
+How to install sphinx-build:
+
+For Debian GNU/Linux based system like Ubuntu:
+ % sudo apt-get install -y python-pip
+ % sudo pip install sphinx
+
+For Red Hat based system like CentOS:
+ % sudo yum install -y python-pip
+ % sudo pip install sphinx])
+ fi
+ AC_SUBST(SPHINX_BUILD)
+ fi
+fi
+
+AM_CONDITIONAL([DOCUMENT_AVAILABLE],
+ [test "${document_available}" = "yes"])
+AC_MSG_CHECKING([whether document available])
+AC_MSG_RESULT($document_available)
+
+AM_CONDITIONAL([DOCUMENT_BUILDABLE],
+ [test "${document_buildable}" = "yes"])
+AC_MSG_CHECKING([whether document buildable])
+AC_MSG_RESULT($document_buildable)
+
+AM_CONDITIONAL([HAVE_BUILT_DOCUMENT],
+ [test "${have_built_document}" = "yes"])
+AC_MSG_CHECKING([whether having built document])
+AC_MSG_RESULT($have_built_document)
+
+DOCUMENT_VERSION=mrn_version
+DOCUMENT_VERSION_FULL="$DOCUMENT_VERSION"
+AC_SUBST(DOCUMENT_VERSION)
+AC_SUBST(DOCUMENT_VERSION_FULL)
+
+CFLAGS="$CFLAGS"
+CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti -felide-constructors"
+
+AC_CONFIG_FILES([
+ Makefile
+ build/Makefile
+ build/cmake_modules/Makefile
+ lib/Makefile
+ udf/Makefile
+ test/Makefile
+ test/unit/Makefile
+ mysql-test/Makefile
+ packages/Makefile
+ packages/rpm/Makefile
+ packages/rpm/centos/Makefile
+ packages/rpm/fedora/Makefile
+ packages/yum/Makefile
+ packages/apt/Makefile
+ packages/source/Makefile
+ packages/ubuntu/Makefile
+ packages/windows/Makefile
+ tools/Makefile
+ doc/Makefile
+ doc/locale/Makefile
+ doc/locale/en/Makefile
+ doc/locale/en/LC_MESSAGES/Makefile
+ doc/locale/ja/Makefile
+ doc/locale/ja/LC_MESSAGES/Makefile
+ data/Makefile
+])
+AC_OUTPUT([
+ config.sh
+ mrn_version.h
+ mysql-test/mroonga/storage/information_schema/r/plugins.result
+ mysql-test/mroonga/storage/variable/r/version.result
+ packages/debian/control
+ packages/apt/env.sh
+ packages/rpm/centos/mysql55-mroonga.spec
+ packages/rpm/centos/mysql56-community-mroonga.spec
+ packages/rpm/centos/mariadb-mroonga.spec
+ packages/rpm/fedora/mysql-mroonga.spec
+ packages/rpm/fedora/mariadb-mroonga.spec
+ packages/yum/env.sh
+ data/install.sql
+])
diff --git a/storage/mroonga/data/Makefile.am b/storage/mroonga/data/Makefile.am
new file mode 100644
index 00000000000..c088c78c30f
--- /dev/null
+++ b/storage/mroonga/data/Makefile.am
@@ -0,0 +1,4 @@
+sqldir = $(pkgdatadir)
+dist_sql_DATA = \
+ install.sql \
+ uninstall.sql
diff --git a/storage/mroonga/data/install.sql.in b/storage/mroonga/data/install.sql.in
new file mode 100644
index 00000000000..b0c930c8144
--- /dev/null
+++ b/storage/mroonga/data/install.sql.in
@@ -0,0 +1,19 @@
+DELETE IGNORE FROM mysql.plugin WHERE dl = 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
+
+INSTALL PLUGIN Mroonga SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
+
+DROP FUNCTION IF EXISTS last_insert_grn_id;
+CREATE FUNCTION last_insert_grn_id RETURNS INTEGER
+ SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
+
+DROP FUNCTION IF EXISTS mroonga_snippet;
+CREATE FUNCTION mroonga_snippet RETURNS STRING
+ SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
+
+DROP FUNCTION IF EXISTS mroonga_command;
+CREATE FUNCTION mroonga_command RETURNS STRING
+ SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
+
+DROP FUNCTION IF EXISTS mroonga_escape;
+CREATE FUNCTION mroonga_escape RETURNS STRING
+ SONAME 'ha_mroonga@MRN_PLUGIN_SUFFIX@';
diff --git a/storage/mroonga/data/uninstall.sql b/storage/mroonga/data/uninstall.sql
new file mode 100644
index 00000000000..b79e6c03d18
--- /dev/null
+++ b/storage/mroonga/data/uninstall.sql
@@ -0,0 +1,8 @@
+DROP FUNCTION IF EXISTS last_insert_grn_id;
+DROP FUNCTION IF EXISTS mroonga_snippet;
+DROP FUNCTION IF EXISTS mroonga_command;
+DROP FUNCTION IF EXISTS mroonga_escape;
+
+UNINSTALL PLUGIN Mroonga;
+
+FLUSH TABLES;
diff --git a/storage/mroonga/gpg_uid b/storage/mroonga/gpg_uid
new file mode 100644
index 00000000000..7c1a800ba92
--- /dev/null
+++ b/storage/mroonga/gpg_uid
@@ -0,0 +1 @@
+45499429
diff --git a/storage/mroonga/ha_mroonga.cpp b/storage/mroonga/ha_mroonga.cpp
new file mode 100644
index 00000000000..8b9a08b59dc
--- /dev/null
+++ b/storage/mroonga/ha_mroonga.cpp
@@ -0,0 +1,15465 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+ Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_mysql.h"
+
+#ifdef USE_PRAGMA_IMPLEMENTATION
+#pragma implementation
+#endif
+
+#if MYSQL_VERSION_ID >= 50500
+# include <sql_plugin.h>
+# include <sql_show.h>
+# include <key.h>
+# include <tztime.h>
+# include <sql_base.h>
+#endif
+
+#include <sql_select.h>
+
+#ifdef MRN_HAVE_SQL_OPTIMIZER_H
+# include <sql_optimizer.h>
+#endif
+
+#include <ft_global.h>
+#include <spatial.h>
+#include <mysql.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+# include <math.h>
+# include <direct.h>
+# define MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(type, variable_name, variable_size) \
+ type *variable_name = (type *)_malloca(sizeof(type) * (variable_size))
+# define MRN_FREE_VARIABLE_LENGTH_ARRAYS(variable_name) _freea(variable_name)
+# define MRN_TABLE_SHARE_LOCK_SHARE_PROC "?key_TABLE_SHARE_LOCK_share@@3IA"
+# define MRN_TABLE_SHARE_LOCK_HA_DATA_PROC "?key_TABLE_SHARE_LOCK_ha_data@@3IA"
+# ifdef _WIN64
+# define MRN_BINLOG_FILTER_PROC "?binlog_filter@@3PEAVRpl_filter@@EA"
+# define MRN_MY_TZ_UTC_PROC "?my_tz_UTC@@3PEAVTime_zone@@EA"
+# else
+# define MRN_BINLOG_FILTER_PROC "?binlog_filter@@3PAVRpl_filter@@A"
+# define MRN_MY_TZ_UTC_PROC "?my_tz_UTC@@3PAVTime_zone@@A"
+# endif
+#else
+# include <dirent.h>
+# include <unistd.h>
+# define MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(type, variable_name, variable_size) \
+ type variable_name[variable_size]
+# define MRN_FREE_VARIABLE_LENGTH_ARRAYS(variable_name)
+#endif
+
+#include "mrn_err.h"
+#include "mrn_table.hpp"
+#include "ha_mroonga.hpp"
+#include <mrn_path_mapper.hpp>
+#include <mrn_index_table_name.hpp>
+#include <mrn_index_column_name.hpp>
+#include <mrn_debug_column_access.hpp>
+#include <mrn_auto_increment_value_lock.hpp>
+#include <mrn_external_lock.hpp>
+#include <mrn_match_escalation_threshold_scope.hpp>
+#include <mrn_multiple_column_key_codec.hpp>
+#include <mrn_field_normalizer.hpp>
+#include <mrn_encoding.hpp>
+#include <mrn_parameters_parser.hpp>
+#include <mrn_lock.hpp>
+#include <mrn_condition_converter.hpp>
+#include <mrn_time_converter.hpp>
+#include <mrn_smart_grn_obj.hpp>
+#include <mrn_database_manager.hpp>
+#include <mrn_grn.hpp>
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+# include <sql_table.h>
+#endif
+
+// for debug
+#define MRN_CLASS_NAME "ha_mroonga"
+
+#define MRN_SHORT_TEXT_SIZE (1 << 12) // 4Kbytes
+#define MRN_TEXT_SIZE (1 << 16) // 64Kbytes
+#define MRN_LONG_TEXT_SIZE (1 << 31) // 2Gbytes
+
+#ifdef MRN_HAVE_TDC_LOCK_TABLE_SHARE
+# define mrn_open_mutex(share) &((share)->tdc.LOCK_table_share)
+# define mrn_open_mutex_lock(share) do { \
+ TABLE_SHARE *share_ = share; \
+ if (share_ && share_->tmp_table == NO_TMP_TABLE) { \
+ mysql_mutex_lock(mrn_open_mutex(share_)); \
+ } \
+} while (0)
+# define mrn_open_mutex_unlock(share) do { \
+ TABLE_SHARE *share_ = share; \
+ if (share_ && share_->tmp_table == NO_TMP_TABLE) { \
+ mysql_mutex_unlock(mrn_open_mutex(share_)); \
+ } \
+} while (0)
+#else
+# if MYSQL_VERSION_ID >= 50500
+# ifdef DBUG_OFF
+# ifndef _WIN32
+extern mysql_mutex_t LOCK_open;
+# endif
+# endif
+static mysql_mutex_t *mrn_LOCK_open;
+# define mrn_open_mutex_lock(share) mysql_mutex_lock(mrn_LOCK_open)
+# define mrn_open_mutex_unlock(share) mysql_mutex_unlock(mrn_LOCK_open)
+# else
+# ifndef _WIN32
+extern pthread_mutex_t LOCK_open;
+# endif
+static pthread_mutex_t *mrn_LOCK_open;
+# define mrn_open_mutex_lock(share)
+# define mrn_open_mutex_unlock(share)
+# endif
+#endif
+
+#if MYSQL_VERSION_ID >= 50600
+# define MRN_NEED_M_LOCK_TYPE_CHECK_FOR_WRAPPER_EXTERNAL_LOCK
+#endif
+
+#if MYSQL_VERSION_ID >= 50603 && !defined(MRN_MARIADB_P)
+# define MRN_ORDER_IS_ASC(order) ((order)->direction == ORDER::ORDER_ASC)
+#else
+# define MRN_ORDER_IS_ASC(order) ((order)->asc)
+#endif
+
+#define MRN_STRINGIFY(macro_or_string) MRN_STRINGIFY_ARG(macro_or_string)
+#define MRN_STRINGIFY_ARG(contents) #contents
+
+#define MRN_PLUGIN_NAME mroonga
+#define MRN_PLUGIN_NAME_STRING "Mroonga"
+#define MRN_STATUS_VARIABLE_NAME_PREFIX_STRING "Mroonga"
+
+#ifdef MRN_MARIADB_P
+# define st_mysql_plugin st_maria_plugin
+# define mrn_declare_plugin(NAME) maria_declare_plugin(NAME)
+# define mrn_declare_plugin_end maria_declare_plugin_end
+# define MRN_PLUGIN_LAST_VALUES MRN_VERSION, MariaDB_PLUGIN_MATURITY_STABLE
+# define MRN_ABORT_ON_WARNING(thd) thd_kill_level(thd)
+#else
+# define mrn_declare_plugin(NAME) mysql_declare_plugin(NAME)
+# define mrn_declare_plugin_end mysql_declare_plugin_end
+# ifdef MRN_PLUGIN_HAVE_FLAGS
+# define MRN_PLUGIN_LAST_VALUES NULL, 0
+# else
+# define MRN_PLUGIN_LAST_VALUES NULL
+# endif
+# define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning
+#endif
+
+#ifdef WIN32
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+ PSI_mutex_key *mrn_table_share_lock_share;
+# endif
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+ PSI_mutex_key *mrn_table_share_lock_ha_data;
+# endif
+#endif
+
+#if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P)
+# define MRN_THD_GET_AUTOINC(thd, off, inc) thd_get_autoinc(thd, off, inc)
+# define MRN_GET_ERR_MSG(code) my_get_err_msg(code)
+#else
+# define MRN_THD_GET_AUTOINC(thd, off, inc) \
+ { \
+ *(off) = thd->variables.auto_increment_offset; \
+ *(inc) = thd->variables.auto_increment_increment; \
+ }
+# define MRN_GET_ERR_MSG(code) ER(code)
+#endif
+
+Rpl_filter *mrn_binlog_filter;
+Time_zone *mrn_my_tz_UTC;
+#ifdef MRN_HAVE_TABLE_DEF_CACHE
+HASH *mrn_table_def_cache;
+#endif
+
+static const char *INDEX_COLUMN_NAME = "index";
+static const char *MRN_PLUGIN_AUTHOR = "The Mroonga project";
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* groonga's internal functions */
+int grn_atoi(const char *nptr, const char *end, const char **rest);
+uint grn_atoui(const char *nptr, const char *end, const char **rest);
+
+/* global variables */
+static pthread_mutex_t mrn_log_mutex;
+handlerton *mrn_hton_ptr;
+HASH mrn_open_tables;
+pthread_mutex_t mrn_open_tables_mutex;
+HASH mrn_long_term_share;
+pthread_mutex_t mrn_long_term_share_mutex;
+
+/* internal variables */
+static grn_ctx mrn_ctx;
+static grn_obj *mrn_db;
+static grn_ctx mrn_db_manager_ctx;
+mrn::DatabaseManager *mrn_db_manager = NULL;
+
+#ifdef WIN32
+static inline double round(double x)
+{
+ return (floor(x + 0.5));
+}
+#endif
+
+static void mrn_init_encoding_map()
+{
+ mrn::encoding::init();
+}
+
+static int mrn_change_encoding(grn_ctx *ctx, const CHARSET_INFO *charset)
+{
+ return mrn::encoding::set(ctx, charset);
+}
+
+#if !defined(DBUG_OFF) && !defined(_lint)
+static const char *mrn_inspect_thr_lock_type(enum thr_lock_type lock_type)
+{
+ const char *inspected = "<unknown>";
+ switch (lock_type) {
+ case TL_IGNORE:
+ inspected = "TL_IGNORE";
+ break;
+ case TL_UNLOCK:
+ inspected = "TL_UNLOCK";
+ break;
+ case TL_READ_DEFAULT:
+ inspected = "TL_READ_DEFAULT";
+ break;
+ case TL_READ:
+ inspected = "TL_READ";
+ break;
+ case TL_READ_WITH_SHARED_LOCKS:
+ inspected = "TL_READ_WITH_SHARED_LOCKS";
+ break;
+ case TL_READ_HIGH_PRIORITY:
+ inspected = "TL_READ_HIGH_PRIORITY";
+ break;
+ case TL_READ_NO_INSERT:
+ inspected = "TL_READ_NO_INSERT";
+ break;
+ case TL_WRITE_ALLOW_WRITE:
+ inspected = "TL_WRITE_ALLOW_WRITE";
+ break;
+#ifdef MRN_HAVE_TL_WRITE_ALLOW_READ
+ case TL_WRITE_ALLOW_READ:
+ inspected = "TL_WRITE_ALLOW_READ";
+ break;
+#endif
+ case TL_WRITE_CONCURRENT_INSERT:
+ inspected = "TL_WRITE_CONCURRENT_INSERT";
+ break;
+ case TL_WRITE_DELAYED:
+ inspected = "TL_WRITE_DELAYED";
+ break;
+ case TL_WRITE_DEFAULT:
+ inspected = "TL_WRITE_DEFAULT";
+ break;
+ case TL_WRITE_LOW_PRIORITY:
+ inspected = "TL_WRITE_LOW_PRIORITY";
+ break;
+ case TL_WRITE:
+ inspected = "TL_WRITE";
+ break;
+ case TL_WRITE_ONLY:
+ inspected = "TL_WRITE_ONLY";
+ break;
+ }
+ return inspected;
+}
+
+static const char *mrn_inspect_extra_function(enum ha_extra_function operation)
+{
+ const char *inspected = "<unknown>";
+ switch (operation) {
+ case HA_EXTRA_NORMAL:
+ inspected = "HA_EXTRA_NORMAL";
+ break;
+ case HA_EXTRA_QUICK:
+ inspected = "HA_EXTRA_QUICK";
+ break;
+ case HA_EXTRA_NOT_USED:
+ inspected = "HA_EXTRA_NOT_USED";
+ break;
+ case HA_EXTRA_CACHE:
+ inspected = "HA_EXTRA_CACHE";
+ break;
+ case HA_EXTRA_NO_CACHE:
+ inspected = "HA_EXTRA_NO_CACHE";
+ break;
+ case HA_EXTRA_NO_READCHECK:
+ inspected = "HA_EXTRA_NO_READCHECK";
+ break;
+ case HA_EXTRA_READCHECK:
+ inspected = "HA_EXTRA_READCHECK";
+ break;
+ case HA_EXTRA_KEYREAD:
+ inspected = "HA_EXTRA_KEYREAD";
+ break;
+ case HA_EXTRA_NO_KEYREAD:
+ inspected = "HA_EXTRA_NO_KEYREAD";
+ break;
+ case HA_EXTRA_NO_USER_CHANGE:
+ inspected = "HA_EXTRA_NO_USER_CHANGE";
+ break;
+ case HA_EXTRA_KEY_CACHE:
+ inspected = "HA_EXTRA_KEY_CACHE";
+ break;
+ case HA_EXTRA_NO_KEY_CACHE:
+ inspected = "HA_EXTRA_NO_KEY_CACHE";
+ break;
+ case HA_EXTRA_WAIT_LOCK:
+ inspected = "HA_EXTRA_WAIT_LOCK";
+ break;
+ case HA_EXTRA_NO_WAIT_LOCK:
+ inspected = "HA_EXTRA_NO_WAIT_LOCK";
+ break;
+ case HA_EXTRA_WRITE_CACHE:
+ inspected = "HA_EXTRA_WRITE_CACHE";
+ break;
+ case HA_EXTRA_FLUSH_CACHE:
+ inspected = "HA_EXTRA_FLUSH_CACHE";
+ break;
+ case HA_EXTRA_NO_KEYS:
+ inspected = "HA_EXTRA_NO_KEYS";
+ break;
+ case HA_EXTRA_KEYREAD_CHANGE_POS:
+ inspected = "HA_EXTRA_KEYREAD_CHANGE_POS";
+ break;
+ case HA_EXTRA_REMEMBER_POS:
+ inspected = "HA_EXTRA_REMEMBER_POS";
+ break;
+ case HA_EXTRA_RESTORE_POS:
+ inspected = "HA_EXTRA_RESTORE_POS";
+ break;
+ case HA_EXTRA_REINIT_CACHE:
+ inspected = "HA_EXTRA_REINIT_CACHE";
+ break;
+ case HA_EXTRA_FORCE_REOPEN:
+ inspected = "HA_EXTRA_FORCE_REOPEN";
+ break;
+ case HA_EXTRA_FLUSH:
+ inspected = "HA_EXTRA_FLUSH";
+ break;
+ case HA_EXTRA_NO_ROWS:
+ inspected = "HA_EXTRA_NO_ROWS";
+ break;
+ case HA_EXTRA_RESET_STATE:
+ inspected = "HA_EXTRA_RESET_STATE";
+ break;
+ case HA_EXTRA_IGNORE_DUP_KEY:
+ inspected = "HA_EXTRA_IGNORE_DUP_KEY";
+ break;
+ case HA_EXTRA_NO_IGNORE_DUP_KEY:
+ inspected = "HA_EXTRA_NO_IGNORE_DUP_KEY";
+ break;
+ case HA_EXTRA_PREPARE_FOR_DROP:
+ inspected = "HA_EXTRA_PREPARE_FOR_DROP";
+ break;
+ case HA_EXTRA_PREPARE_FOR_UPDATE:
+ inspected = "HA_EXTRA_PREPARE_FOR_UPDATE";
+ break;
+ case HA_EXTRA_PRELOAD_BUFFER_SIZE:
+ inspected = "HA_EXTRA_PRELOAD_BUFFER_SIZE";
+ break;
+ case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
+ inspected = "HA_EXTRA_CHANGE_KEY_TO_UNIQUE";
+ break;
+ case HA_EXTRA_CHANGE_KEY_TO_DUP:
+ inspected = "HA_EXTRA_CHANGE_KEY_TO_DUP";
+ break;
+ case HA_EXTRA_KEYREAD_PRESERVE_FIELDS:
+ inspected = "HA_EXTRA_KEYREAD_PRESERVE_FIELDS";
+ break;
+ case HA_EXTRA_MMAP:
+ inspected = "HA_EXTRA_MMAP";
+ break;
+ case HA_EXTRA_IGNORE_NO_KEY:
+ inspected = "HA_EXTRA_IGNORE_NO_KEY";
+ break;
+ case HA_EXTRA_NO_IGNORE_NO_KEY:
+ inspected = "HA_EXTRA_NO_IGNORE_NO_KEY";
+ break;
+ case HA_EXTRA_MARK_AS_LOG_TABLE:
+ inspected = "HA_EXTRA_MARK_AS_LOG_TABLE";
+ break;
+ case HA_EXTRA_WRITE_CAN_REPLACE:
+ inspected = "HA_EXTRA_WRITE_CAN_REPLACE";
+ break;
+ case HA_EXTRA_WRITE_CANNOT_REPLACE:
+ inspected = "HA_EXTRA_WRITE_CANNOT_REPLACE";
+ break;
+ case HA_EXTRA_DELETE_CANNOT_BATCH:
+ inspected = "HA_EXTRA_DELETE_CANNOT_BATCH";
+ break;
+ case HA_EXTRA_UPDATE_CANNOT_BATCH:
+ inspected = "HA_EXTRA_UPDATE_CANNOT_BATCH";
+ break;
+ case HA_EXTRA_INSERT_WITH_UPDATE:
+ inspected = "HA_EXTRA_INSERT_WITH_UPDATE";
+ break;
+ case HA_EXTRA_PREPARE_FOR_RENAME:
+ inspected = "HA_EXTRA_PREPARE_FOR_RENAME";
+ break;
+#ifdef MRN_HAVE_HA_EXTRA_ADD_CHILDREN_LIST
+ case HA_EXTRA_ADD_CHILDREN_LIST:
+ inspected = "HA_EXTRA_ADD_CHILDREN_LIST";
+ break;
+#endif
+ case HA_EXTRA_ATTACH_CHILDREN:
+ inspected = "HA_EXTRA_ATTACH_CHILDREN";
+ break;
+#ifdef MRN_HAVE_HA_EXTRA_IS_ATTACHED_CHILDREN
+ case HA_EXTRA_IS_ATTACHED_CHILDREN:
+ inspected = "HA_EXTRA_IS_ATTACHED_CHILDREN";
+ break;
+#endif
+ case HA_EXTRA_DETACH_CHILDREN:
+ inspected = "HA_EXTRA_DETACH_CHILDREN";
+ break;
+#ifdef MRN_HAVE_HA_EXTRA_EXPORT
+ case HA_EXTRA_EXPORT:
+ inspected = "HA_EXTRA_EXPORT";
+ break;
+#endif
+#ifdef MRN_HAVE_HA_EXTRA_SECONDARY_SORT_ROWID
+ case HA_EXTRA_SECONDARY_SORT_ROWID:
+ inspected = "HA_EXTRA_SECONDARY_SORT_ROWID";
+ break;
+#endif
+#ifdef MRN_HAVE_HA_EXTRA_DETACH_CHILD
+ case HA_EXTRA_DETACH_CHILD:
+ inspected = "HA_EXTRA_DETACH_CHILD";
+ break;
+#endif
+#ifdef MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE
+ case HA_EXTRA_PREPARE_FOR_FORCED_CLOSE:
+ inspected = "HA_EXTRA_PREPARE_FOR_FORCED_CLOSE";
+ break;
+#endif
+ }
+ return inspected;
+}
+#endif
+
+static uchar *mrn_open_tables_get_key(const uchar *record,
+ size_t *length,
+ my_bool not_used __attribute__ ((unused)))
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ MRN_SHARE *share = reinterpret_cast<MRN_SHARE *>(const_cast<uchar *>(record));
+ *length = share->table_name_length;
+ DBUG_RETURN(reinterpret_cast<uchar *>(share->table_name));
+}
+
+static uchar *mrn_long_term_share_get_key(const uchar *record,
+ size_t *length,
+ my_bool not_used __attribute__ ((unused)))
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ MRN_LONG_TERM_SHARE *long_term_share =
+ reinterpret_cast<MRN_LONG_TERM_SHARE *>(const_cast<uchar *>(record));
+ *length = long_term_share->table_name_length;
+ DBUG_RETURN(reinterpret_cast<uchar *>(long_term_share->table_name));
+}
+
+/* status */
+static long mrn_count_skip = 0;
+static long mrn_fast_order_limit = 0;
+
+/* logging */
+static char *mrn_log_file_path = NULL;
+static FILE *mrn_log_file = NULL;
+static bool mrn_log_file_opened = false;
+static grn_log_level mrn_log_level_default = GRN_LOG_DEFAULT_LEVEL;
+static ulong mrn_log_level = mrn_log_level_default;
+
+char *mrn_default_parser = NULL;
+char *mrn_default_wrapper_engine = NULL;
+static int mrn_lock_timeout = grn_get_lock_timeout();
+static char *mrn_libgroonga_version = const_cast<char *>(grn_get_version());
+static char *mrn_version = const_cast<char *>(MRN_VERSION);
+static char *mrn_vector_column_delimiter = NULL;
+
+typedef enum {
+ MRN_ACTION_ON_ERROR_ERROR,
+ MRN_ACTION_ON_ERROR_ERROR_AND_LOG,
+ MRN_ACTION_ON_ERROR_IGNORE,
+ MRN_ACTION_ON_ERROR_IGNORE_AND_LOG,
+} mrn_action_on_error;
+
+static const char *mrn_action_on_error_names[] = {
+ "ERROR",
+ "ERROR_AND_LOG",
+ "IGNORE",
+ "IGNORE_AND_LOG",
+ NullS,
+};
+
+static mrn_action_on_error mrn_action_on_fulltext_query_error_default =
+ MRN_ACTION_ON_ERROR_ERROR_AND_LOG;
+
+static void mrn_logger_log(grn_ctx *ctx, grn_log_level level,
+ const char *timestamp, const char *title,
+ const char *message, const char *location,
+ void *user_data)
+{
+ const char level_marks[] = " EACewnid-";
+ if (mrn_log_file_opened) {
+ mrn::Lock lock(&mrn_log_mutex);
+ fprintf(mrn_log_file,
+ "%s|%c|%08x|%s\n",
+ timestamp,
+ level_marks[level],
+ static_cast<uint>((ulong)(pthread_self())),
+ message);
+ fflush(mrn_log_file);
+ }
+}
+
+static grn_logger mrn_logger = {
+ mrn_log_level_default,
+ GRN_LOG_TIME|GRN_LOG_MESSAGE,
+ NULL,
+ mrn_logger_log,
+ NULL,
+ NULL
+};
+
+/* global hashes and mutexes */
+HASH mrn_allocated_thds;
+pthread_mutex_t mrn_allocated_thds_mutex;
+static uchar *mrn_allocated_thds_get_key(const uchar *record,
+ size_t *length,
+ my_bool not_used __attribute__ ((unused)))
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ *length = sizeof(THD *);
+ DBUG_RETURN(const_cast<uchar *>(record));
+}
+
+/* system functions */
+
+static struct st_mysql_storage_engine storage_engine_structure =
+{ MYSQL_HANDLERTON_INTERFACE_VERSION };
+
+static struct st_mysql_show_var mrn_status_variables[] =
+{
+ {MRN_STATUS_VARIABLE_NAME_PREFIX_STRING "_count_skip",
+ (char *)&mrn_count_skip, SHOW_LONG},
+ {MRN_STATUS_VARIABLE_NAME_PREFIX_STRING "_fast_order_limit",
+ (char *)&mrn_fast_order_limit, SHOW_LONG},
+ {NullS, NullS, SHOW_LONG}
+};
+
+static const char *mrn_log_level_type_names[] = { "NONE", "EMERG", "ALERT",
+ "CRIT", "ERROR", "WARNING",
+ "NOTICE", "INFO", "DEBUG",
+ "DUMP", NullS };
+static TYPELIB mrn_log_level_typelib =
+{
+ array_elements(mrn_log_level_type_names)-1,
+ "mrn_log_level_typelib",
+ mrn_log_level_type_names,
+ NULL
+};
+
+static void mrn_log_level_update(THD *thd, struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulong new_value = *static_cast<const ulong *>(save);
+ ulong old_value = mrn_log_level;
+ mrn_log_level = new_value;
+ mrn_logger.max_level = static_cast<grn_log_level>(mrn_log_level);
+ grn_logger_set(&mrn_ctx, &mrn_logger);
+ grn_ctx *ctx = grn_ctx_open(0);
+ mrn_change_encoding(ctx, system_charset_info);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log level changed from '%s' to '%s'",
+ mrn_log_level_type_names[old_value],
+ mrn_log_level_type_names[new_value]);
+ grn_ctx_fin(ctx);
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_ENUM(log_level, mrn_log_level,
+ PLUGIN_VAR_RQCMDARG,
+ "logging level",
+ NULL,
+ mrn_log_level_update,
+ static_cast<ulong>(mrn_log_level),
+ &mrn_log_level_typelib);
+
+static void mrn_log_file_update(THD *thd, struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ const char *new_value = *((const char **)save);
+ char **old_value_ptr = (char **)var_ptr;
+
+ grn_ctx ctx;
+ grn_ctx_init(&ctx, 0);
+ mrn_change_encoding(&ctx, system_charset_info);
+
+ const char *new_log_file_name;
+ new_log_file_name = *old_value_ptr;
+
+ if (strcmp(*old_value_ptr, new_value) == 0) {
+ GRN_LOG(&ctx, GRN_LOG_NOTICE,
+ "log file isn't changed "
+ "because the requested path isn't different: <%s>",
+ new_value);
+ } else {
+ GRN_LOG(&ctx, GRN_LOG_NOTICE,
+ "log file is changed: <%s> -> <%s>",
+ *old_value_ptr, new_value);
+
+ int log_file_open_errno = 0;
+ {
+ mrn::Lock lock(&mrn_log_mutex);
+ FILE *new_log_file;
+ new_log_file = fopen(new_value, "a");
+ if (new_log_file) {
+ if (mrn_log_file_opened) {
+ fclose(mrn_log_file);
+ }
+ mrn_log_file = new_log_file;
+ mrn_log_file_opened = true;
+ } else {
+ log_file_open_errno = errno;
+ }
+ }
+
+ if (log_file_open_errno == 0) {
+ GRN_LOG(&ctx, GRN_LOG_NOTICE,
+ "log file is changed: <%s> -> <%s>",
+ *old_value_ptr, new_value);
+ new_log_file_name = new_value;
+ } else {
+ if (mrn_log_file) {
+ GRN_LOG(&ctx, GRN_LOG_ERROR,
+ "log file isn't changed "
+ "because the requested path can't be opened: <%s>: <%s>",
+ new_value, strerror(log_file_open_errno));
+ } else {
+ GRN_LOG(&ctx, GRN_LOG_ERROR,
+ "log file can't be opened: <%s>: <%s>",
+ new_value, strerror(log_file_open_errno));
+ }
+ }
+ }
+
+#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
+ char *old_log_file_name = *old_value_ptr;
+ *old_value_ptr = my_strdup(new_log_file_name, MYF(MY_WME));
+ my_free(old_log_file_name, MYF(0));
+#else
+ *old_value_ptr = my_strdup(new_log_file_name, MYF(MY_WME));
+#endif
+
+ grn_ctx_fin(&ctx);
+
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_STR(log_file, mrn_log_file_path,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "log file for " MRN_PLUGIN_NAME_STRING,
+ NULL,
+ mrn_log_file_update,
+ MRN_LOG_FILE_PATH);
+
+static void mrn_default_parser_update(THD *thd, struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ const char *new_value = *((const char **)save);
+ char **old_value_ptr = (char **)var_ptr;
+ grn_ctx ctx;
+
+ grn_ctx_init(&ctx, 0);
+ mrn_change_encoding(&ctx, system_charset_info);
+ if (strcmp(*old_value_ptr, new_value) == 0) {
+ GRN_LOG(&ctx, GRN_LOG_NOTICE,
+ "default parser isn't changed "
+ "because the requested default parser isn't different: <%s>",
+ new_value);
+ } else {
+ GRN_LOG(&ctx, GRN_LOG_NOTICE,
+ "default fulltext parser is changed: <%s> -> <%s>",
+ *old_value_ptr, new_value);
+ }
+
+#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
+ my_free(*old_value_ptr, MYF(0));
+ *old_value_ptr = my_strdup(new_value, MYF(MY_WME));
+#else
+ *old_value_ptr = (char *)new_value;
+#endif
+
+ grn_ctx_fin(&ctx);
+
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_STR(default_parser, mrn_default_parser,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "default fulltext parser",
+ NULL,
+ mrn_default_parser_update,
+ MRN_PARSER_DEFAULT);
+
+static MYSQL_THDVAR_BOOL(
+ dry_write, /* name */
+ PLUGIN_VAR_OPCMDARG, /* options */
+ "If dry_write is true, any write operations are ignored.", /* comment */
+ NULL, /* check */
+ NULL, /* update */
+ false /* default */
+);
+
+static MYSQL_THDVAR_BOOL(
+ enable_optimization, /* name */
+ PLUGIN_VAR_OPCMDARG, /* options */
+ "If enable_optimization is true, some optimizations will be applied.", /* comment */
+ NULL, /* check */
+ NULL, /* update */
+ true /* default */
+);
+
+static MYSQL_THDVAR_LONGLONG(match_escalation_threshold,
+ PLUGIN_VAR_RQCMDARG,
+ "The threshold to determin whether search method is escalated",
+ NULL,
+ NULL,
+ grn_get_default_match_escalation_threshold(),
+ -1,
+ LONGLONG_MAX,
+ 0);
+
+static void mrn_vector_column_delimiter_update(THD *thd, struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ const char *new_value = *((const char **)save);
+ char **old_value_ptr = (char **)var_ptr;
+
+#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
+ my_free(*old_value_ptr, MYF(0));
+ *old_value_ptr = my_strdup(new_value, MYF(MY_WME));
+#else
+ *old_value_ptr = (char *)new_value;
+#endif
+
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_STR(vector_column_delimiter, mrn_vector_column_delimiter,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "The vector column delimiter",
+ NULL,
+ &mrn_vector_column_delimiter_update,
+ " ");
+
+static void mrn_database_path_prefix_update(THD *thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ const char *new_value = *((const char **)save);
+ char **old_value_ptr = (char **)var_ptr;
+#ifdef MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
+ if (*old_value_ptr)
+ my_free(*old_value_ptr, MYF(0));
+ if (new_value)
+ *old_value_ptr = my_strdup(new_value, MYF(MY_WME));
+ else
+ *old_value_ptr = NULL;
+#else
+ *old_value_ptr = (char *)new_value;
+#endif
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_STR(database_path_prefix,
+ mrn::PathMapper::default_path_prefix,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
+ "The database path prefix",
+ NULL,
+ &mrn_database_path_prefix_update,
+ NULL);
+
+static MYSQL_SYSVAR_STR(default_wrapper_engine, mrn_default_wrapper_engine,
+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
+ "The default engine for wrapper mode",
+ NULL,
+ NULL,
+ NULL);
+
+static TYPELIB mrn_action_on_error_typelib =
+{
+ array_elements(mrn_action_on_error_names) - 1,
+ "mrn_action_on_error_typelib",
+ mrn_action_on_error_names,
+ NULL
+};
+
+static MYSQL_THDVAR_ENUM(action_on_fulltext_query_error,
+ PLUGIN_VAR_RQCMDARG,
+ "action on fulltext query error",
+ NULL,
+ NULL,
+ mrn_action_on_fulltext_query_error_default,
+ &mrn_action_on_error_typelib);
+
+static void mrn_lock_timeout_update(THD *thd, struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ const int new_value = *static_cast<const int *>(save);
+ int *old_value_ptr = static_cast<int *>(var_ptr);
+
+ *old_value_ptr = new_value;
+ grn_set_lock_timeout(new_value);
+
+ DBUG_VOID_RETURN;
+}
+
+static MYSQL_SYSVAR_INT(lock_timeout,
+ mrn_lock_timeout,
+ PLUGIN_VAR_RQCMDARG,
+ "lock timeout used in Groonga",
+ NULL,
+ mrn_lock_timeout_update,
+ grn_get_lock_timeout(),
+ -1,
+ INT_MAX,
+ 1);
+
+static MYSQL_SYSVAR_STR(libgroonga_version, mrn_libgroonga_version,
+ PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
+ "The version of libgroonga",
+ NULL,
+ NULL,
+ grn_get_version());
+
+static MYSQL_SYSVAR_STR(version, mrn_version,
+ PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
+ "The version of mroonga",
+ NULL,
+ NULL,
+ MRN_VERSION);
+
+static struct st_mysql_sys_var *mrn_system_variables[] =
+{
+ MYSQL_SYSVAR(log_level),
+ MYSQL_SYSVAR(log_file),
+ MYSQL_SYSVAR(default_parser),
+ MYSQL_SYSVAR(dry_write),
+ MYSQL_SYSVAR(enable_optimization),
+ MYSQL_SYSVAR(match_escalation_threshold),
+ MYSQL_SYSVAR(database_path_prefix),
+ MYSQL_SYSVAR(default_wrapper_engine),
+ MYSQL_SYSVAR(action_on_fulltext_query_error),
+ MYSQL_SYSVAR(lock_timeout),
+ MYSQL_SYSVAR(libgroonga_version),
+ MYSQL_SYSVAR(version),
+ MYSQL_SYSVAR(vector_column_delimiter),
+ NULL
+};
+
+/* mroonga information schema */
+static struct st_mysql_information_schema i_s_info =
+{
+ MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION
+};
+
+static ST_FIELD_INFO i_s_mrn_stats_fields_info[] =
+{
+ {
+ "VERSION",
+ 40,
+ MYSQL_TYPE_STRING,
+ 0,
+ 0,
+ "",
+ SKIP_OPEN_TABLE
+ },
+ {
+ "rows_written",
+ MY_INT32_NUM_DECIMAL_DIGITS,
+ MYSQL_TYPE_LONG,
+ 0,
+ 0,
+ "Rows written to groonga",
+ SKIP_OPEN_TABLE
+ },
+ {
+ "rows_read",
+ MY_INT32_NUM_DECIMAL_DIGITS,
+ MYSQL_TYPE_LONG,
+ 0,
+ 0,
+ "Rows read from groonga",
+ SKIP_OPEN_TABLE
+ }
+};
+
+static int i_s_mrn_stats_deinit(void* p)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(0);
+}
+
+static int i_s_mrn_stats_fill(
+ THD* thd, TABLE_LIST* tables, Item* cond)
+{
+ TABLE* table = (TABLE *) tables->table;
+ int status = 0;
+ MRN_DBUG_ENTER_FUNCTION();
+ table->field[0]->store(grn_get_version(), strlen(grn_get_version()),
+ system_charset_info);
+ table->field[0]->set_notnull();
+ table->field[1]->store(1); /* TODO */
+ table->field[2]->store(2); /* TODO */
+ if (schema_table_store_record(thd, table)) {
+ status = 1;
+ }
+ DBUG_RETURN(status);
+}
+
+static int i_s_mrn_stats_init(void* p)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
+ schema->fields_info = i_s_mrn_stats_fields_info;
+ schema->fill_table = i_s_mrn_stats_fill;
+ DBUG_RETURN(0);
+}
+
+struct st_mysql_plugin i_s_mrn_stats =
+{
+ MYSQL_INFORMATION_SCHEMA_PLUGIN,
+ &i_s_info,
+ MRN_STATUS_VARIABLE_NAME_PREFIX_STRING "_stats",
+ MRN_PLUGIN_AUTHOR,
+ "Statistics for " MRN_PLUGIN_NAME_STRING,
+ PLUGIN_LICENSE_GPL,
+ i_s_mrn_stats_init,
+ i_s_mrn_stats_deinit,
+ MRN_VERSION_IN_HEX,
+ NULL,
+ NULL,
+ MRN_PLUGIN_LAST_VALUES
+};
+/* End of mroonga information schema implementations */
+
+static handler *mrn_handler_create(handlerton *hton, TABLE_SHARE *share, MEM_ROOT *root)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ handler *new_handler = new (root) ha_mroonga(hton, share);
+ DBUG_RETURN(new_handler);
+}
+
+static void mrn_drop_database(handlerton *hton, char *path)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ mrn_db_manager->drop(path);
+ DBUG_VOID_RETURN;
+}
+
+static int mrn_close_connection(handlerton *hton, THD *thd)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ void *p = *thd_ha_data(thd, mrn_hton_ptr);
+ if (p) {
+ mrn_clear_alter_share(thd);
+ free(p);
+ *thd_ha_data(thd, mrn_hton_ptr) = (void *) NULL;
+ {
+ mrn::Lock lock(&mrn_allocated_thds_mutex);
+ my_hash_delete(&mrn_allocated_thds, (uchar*) thd);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+static bool mrn_flush_logs(handlerton *hton)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ bool result = 0;
+ if (mrn_log_file_opened) {
+ mrn::Lock lock(&mrn_log_mutex);
+ fclose(mrn_log_file);
+ mrn_log_file = fopen(mrn_log_file_path, "a");
+ }
+ DBUG_RETURN(result);
+}
+
+static grn_builtin_type mrn_grn_type_from_field(grn_ctx *ctx, Field *field,
+ bool for_index_key)
+{
+ grn_builtin_type type = GRN_DB_VOID;
+ enum_field_types mysql_field_type = field->real_type();
+ switch (mysql_field_type) {
+ case MYSQL_TYPE_DECIMAL: // DECIMAL; <= 65bytes
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ break;
+ case MYSQL_TYPE_TINY: // TINYINT; 1byte
+ if (static_cast<Field_num *>(field)->unsigned_flag) {
+ type = GRN_DB_UINT8; // 1byte
+ } else {
+ type = GRN_DB_INT8; // 1byte
+ }
+ break;
+ case MYSQL_TYPE_SHORT: // SMALLINT; 2bytes
+ if (static_cast<Field_num *>(field)->unsigned_flag) {
+ type = GRN_DB_UINT16; // 2bytes
+ } else {
+ type = GRN_DB_INT16; // 2bytes
+ }
+ break;
+ case MYSQL_TYPE_LONG: // INT; 4bytes
+ if (static_cast<Field_num *>(field)->unsigned_flag) {
+ type = GRN_DB_UINT32; // 4bytes
+ } else {
+ type = GRN_DB_INT32; // 4bytes
+ }
+ break;
+ case MYSQL_TYPE_FLOAT: // FLOAT; 4 or 8bytes
+ case MYSQL_TYPE_DOUBLE: // DOUBLE; 8bytes
+ type = GRN_DB_FLOAT; // 8bytes
+ break;
+ case MYSQL_TYPE_NULL: // NULL; 1byte
+ type = GRN_DB_INT8; // 1byte
+ break;
+ case MYSQL_TYPE_TIMESTAMP: // TIMESTAMP; 4bytes
+ type = GRN_DB_TIME; // 8bytes
+ break;
+ case MYSQL_TYPE_LONGLONG: // BIGINT; 8bytes
+ if (static_cast<Field_num *>(field)->unsigned_flag) {
+ type = GRN_DB_UINT64; // 8bytes
+ } else {
+ type = GRN_DB_INT64; // 8bytes
+ }
+ break;
+ case MYSQL_TYPE_INT24: // MEDIUMINT; 3bytes
+ if (static_cast<Field_num *>(field)->unsigned_flag) {
+ type = GRN_DB_UINT32; // 4bytes
+ } else {
+ type = GRN_DB_INT32; // 4bytes
+ }
+ break;
+ case MYSQL_TYPE_DATE: // DATE; 4bytes
+ case MYSQL_TYPE_TIME: // TIME; 3bytes
+ case MYSQL_TYPE_DATETIME: // DATETIME; 8bytes
+ case MYSQL_TYPE_YEAR: // YEAR; 1byte
+ case MYSQL_TYPE_NEWDATE: // DATE; 3bytes
+ type = GRN_DB_TIME; // 8bytes
+ break;
+ case MYSQL_TYPE_VARCHAR: // VARCHAR; <= 64KB * 4 + 2bytes
+ if (for_index_key) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else {
+ if (field->field_length <= MRN_SHORT_TEXT_SIZE) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else if (field->field_length <= MRN_TEXT_SIZE) {
+ type = GRN_DB_TEXT; // 64Kbytes
+ } else {
+ type = GRN_DB_LONG_TEXT; // 2Gbytes
+ }
+ }
+ break;
+ case MYSQL_TYPE_BIT: // BIT; <= 8bytes
+ type = GRN_DB_INT64; // 8bytes
+ break;
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2: // TIMESTAMP; 4bytes
+ type = GRN_DB_TIME; // 8bytes
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2: // DATETIME; 8bytes
+ type = GRN_DB_TIME; // 8bytes
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2: // TIME(FSP); 3 + (FSP + 1) / 2 bytes
+ // 0 <= FSP <= 6; 3-6bytes
+ type = GRN_DB_TIME; // 8bytes
+ break;
+#endif
+ case MYSQL_TYPE_NEWDECIMAL: // DECIMAL; <= 9bytes
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ break;
+ case MYSQL_TYPE_ENUM: // ENUM; <= 2bytes
+ if (field->pack_length() == 1) {
+ type = GRN_DB_UINT8; // 1bytes
+ } else {
+ type = GRN_DB_UINT16; // 2bytes
+ }
+ break;
+ case MYSQL_TYPE_SET: // SET; <= 8bytes
+ switch (field->pack_length()) {
+ case 1:
+ type = GRN_DB_UINT8; // 1byte
+ break;
+ case 2:
+ type = GRN_DB_UINT16; // 2bytes
+ break;
+ case 3:
+ case 4:
+ type = GRN_DB_UINT32; // 3bytes
+ break;
+ case 8:
+ default:
+ type = GRN_DB_UINT64; // 8bytes
+ break;
+ }
+ break;
+ case MYSQL_TYPE_TINY_BLOB: // TINYBLOB; <= 256bytes + 1byte
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ break;
+ case MYSQL_TYPE_MEDIUM_BLOB: // MEDIUMBLOB; <= 16Mbytes + 3bytes
+ if (for_index_key) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else {
+ type = GRN_DB_LONG_TEXT; // 2Gbytes
+ }
+ break;
+ case MYSQL_TYPE_LONG_BLOB: // LONGBLOB; <= 4Gbytes + 4bytes
+ if (for_index_key) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else {
+ type = GRN_DB_LONG_TEXT; // 2Gbytes
+ }
+ break;
+ case MYSQL_TYPE_BLOB: // BLOB; <= 64Kbytes + 2bytes
+ if (for_index_key) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else {
+ type = GRN_DB_LONG_TEXT; // 2Gbytes
+ }
+ break;
+ case MYSQL_TYPE_VAR_STRING: // VARCHAR; <= 255byte * 4 + 1bytes
+ if (for_index_key) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else {
+ if (field->field_length <= MRN_SHORT_TEXT_SIZE) {
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ } else if (field->field_length <= MRN_TEXT_SIZE) {
+ type = GRN_DB_TEXT; // 64Kbytes
+ } else {
+ type = GRN_DB_LONG_TEXT; // 2Gbytes
+ }
+ }
+ break;
+ case MYSQL_TYPE_STRING: // CHAR; < 1Kbytes =~ (255 * 4)bytes
+ // 4 is the maximum size of a character
+ type = GRN_DB_SHORT_TEXT; // 4Kbytes
+ break;
+ case MYSQL_TYPE_GEOMETRY: // case-by-case
+ type = GRN_DB_WGS84_GEO_POINT; // 8bytes
+ break;
+ }
+ return type;
+}
+
+#ifdef HAVE_SPATIAL
+static int mrn_set_geometry(grn_ctx *ctx, grn_obj *buf,
+ const char *wkb, uint wkb_size)
+{
+ int error = 0;
+ Geometry_buffer buffer;
+ Geometry *geometry;
+
+ geometry = Geometry::construct(&buffer, wkb, wkb_size);
+ if (!geometry) {
+ return ER_CANT_CREATE_GEOMETRY_OBJECT;
+ }
+ switch (geometry->get_class_info()->m_type_id) {
+ case Geometry::wkb_point:
+ {
+ Gis_point *point = (Gis_point *)geometry;
+ double latitude = 0.0, longitude = 0.0;
+#ifdef MRN_HAVE_POINT_XY
+ point_xy xy(0.0, 0.0);
+ point->get_xy(&xy);
+ longitude = xy.x;
+ latitude = xy.y;
+#else
+ point->get_xy(&longitude, &latitude);
+#endif
+ grn_obj_reinit(ctx, buf, GRN_DB_WGS84_GEO_POINT, 0);
+ GRN_GEO_POINT_SET(ctx, buf,
+ GRN_GEO_DEGREE2MSEC(latitude),
+ GRN_GEO_DEGREE2MSEC(longitude));
+ break;
+ }
+ default:
+ my_printf_error(ER_MRN_GEOMETRY_NOT_SUPPORT_NUM,
+ ER_MRN_GEOMETRY_NOT_SUPPORT_STR, MYF(0));
+ error = ER_MRN_GEOMETRY_NOT_SUPPORT_NUM;
+ break;
+ }
+ delete geometry;
+
+ return error;
+}
+#endif
+
+static uint mrn_alter_table_flags(uint flags)
+{
+ uint alter_flags = 0;
+#ifdef HA_INPLACE_ADD_INDEX_NO_READ_WRITE
+ bool is_inplace_index_change;
+# ifdef MRN_HAVE_ALTER_INFO
+ is_inplace_index_change = (((flags & Alter_info::ALTER_ADD_INDEX) &&
+ (flags & Alter_info::ALTER_DROP_INDEX)) ||
+ (flags & Alter_info::ALTER_CHANGE_COLUMN));
+# else
+ is_inplace_index_change = (((flags & ALTER_ADD_INDEX) &&
+ (flags & ALTER_DROP_INDEX)) ||
+ (flags & ALTER_CHANGE_COLUMN));
+# endif
+ if (!is_inplace_index_change) {
+ alter_flags |=
+ HA_INPLACE_ADD_INDEX_NO_READ_WRITE |
+ HA_INPLACE_DROP_INDEX_NO_READ_WRITE |
+ HA_INPLACE_ADD_UNIQUE_INDEX_NO_READ_WRITE |
+ HA_INPLACE_DROP_UNIQUE_INDEX_NO_READ_WRITE |
+ HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE |
+ HA_INPLACE_DROP_PK_INDEX_NO_READ_WRITE |
+ HA_INPLACE_ADD_INDEX_NO_WRITE |
+ HA_INPLACE_DROP_INDEX_NO_WRITE |
+ HA_INPLACE_ADD_UNIQUE_INDEX_NO_WRITE |
+ HA_INPLACE_DROP_UNIQUE_INDEX_NO_WRITE |
+ HA_INPLACE_ADD_PK_INDEX_NO_WRITE |
+ HA_INPLACE_DROP_PK_INDEX_NO_WRITE;
+ }
+#endif
+ return alter_flags;
+}
+
+static int mrn_init(void *p)
+{
+ // init handlerton
+ grn_ctx *ctx = NULL;
+ handlerton *hton;
+ hton = (handlerton *)p;
+ hton->state = SHOW_OPTION_YES;
+ hton->create = mrn_handler_create;
+ hton->flags = HTON_NO_PARTITION;
+ hton->drop_database = mrn_drop_database;
+ hton->close_connection = mrn_close_connection;
+ hton->flush_logs = mrn_flush_logs;
+ hton->alter_table_flags = mrn_alter_table_flags;
+ mrn_hton_ptr = hton;
+
+#ifdef _WIN32
+ HMODULE current_module = GetModuleHandle(NULL);
+ mrn_binlog_filter =
+ *((Rpl_filter **)GetProcAddress(current_module, MRN_BINLOG_FILTER_PROC));
+ mrn_my_tz_UTC =
+ *((Time_zone **)GetProcAddress(current_module, MRN_MY_TZ_UTC_PROC));
+# ifdef MRN_HAVE_TABLE_DEF_CACHE
+ mrn_table_def_cache = (HASH *)GetProcAddress(current_module,
+ "?table_def_cache@@3Ust_hash@@A");
+# endif
+# ifndef MRN_HAVE_TDC_LOCK_TABLE_SHARE
+ mrn_LOCK_open =
+# if MYSQL_VERSION_ID >= 50500
+ (mysql_mutex_t *)GetProcAddress(current_module,
+ "?LOCK_open@@3Ust_mysql_mutex@@A");
+# else
+ (pthread_mutex_t *)GetProcAddress(current_module,
+ "?LOCK_open@@3U_RTL_CRITICAL_SECTION@@A");
+# endif
+# endif
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+ mrn_table_share_lock_share =
+ (PSI_mutex_key *)GetProcAddress(current_module, MRN_TABLE_SHARE_LOCK_SHARE_PROC);
+# endif
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+ mrn_table_share_lock_ha_data =
+ (PSI_mutex_key *)GetProcAddress(current_module, MRN_TABLE_SHARE_LOCK_HA_DATA_PROC);
+# endif
+#else
+ mrn_binlog_filter = binlog_filter;
+ mrn_my_tz_UTC = my_tz_UTC;
+# ifdef MRN_HAVE_TABLE_DEF_CACHE
+ mrn_table_def_cache = &table_def_cache;
+# endif
+# ifndef MRN_HAVE_TDC_LOCK_TABLE_SHARE
+ mrn_LOCK_open = &LOCK_open;
+# endif
+#endif
+
+ // init groonga
+ if (grn_init() != GRN_SUCCESS) {
+ goto err_grn_init;
+ }
+
+ grn_set_lock_timeout(mrn_lock_timeout);
+
+ mrn_init_encoding_map();
+
+ grn_ctx_init(&mrn_ctx, 0);
+ ctx = &mrn_ctx;
+ if (mrn_change_encoding(ctx, system_charset_info))
+ goto err_mrn_change_encoding;
+
+ if (pthread_mutex_init(&mrn_log_mutex, NULL) != 0) {
+ goto err_log_mutex_init;
+ }
+
+ mrn_logger.max_level = static_cast<grn_log_level>(mrn_log_level);
+ grn_logger_set(ctx, &mrn_logger);
+ if (!(mrn_log_file = fopen(mrn_log_file_path, "a"))) {
+ goto err_log_file_open;
+ }
+ mrn_log_file_opened = true;
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "%s started.", MRN_PACKAGE_STRING);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log level is '%s'",
+ mrn_log_level_type_names[mrn_log_level]);
+
+ // init meta-info database
+ if (!(mrn_db = grn_db_create(ctx, NULL, NULL))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "cannot create system database, exiting");
+ goto err_db_create;
+ }
+ grn_ctx_use(ctx, mrn_db);
+
+ grn_ctx_init(&mrn_db_manager_ctx, 0);
+ grn_logger_set(&mrn_db_manager_ctx, &mrn_logger);
+ mrn_db_manager = new mrn::DatabaseManager(&mrn_db_manager_ctx);
+ if (!mrn_db_manager->init()) {
+ goto err_db_manager_init;
+ }
+ if ((pthread_mutex_init(&mrn_allocated_thds_mutex, NULL) != 0)) {
+ goto err_allocated_thds_mutex_init;
+ }
+ if (my_hash_init(&mrn_allocated_thds, system_charset_info, 32, 0, 0,
+ mrn_allocated_thds_get_key, 0, 0)) {
+ goto error_allocated_thds_hash_init;
+ }
+ if ((pthread_mutex_init(&mrn_open_tables_mutex, NULL) != 0)) {
+ goto err_allocated_open_tables_mutex_init;
+ }
+ if (my_hash_init(&mrn_open_tables, system_charset_info, 32, 0, 0,
+ mrn_open_tables_get_key, 0, 0)) {
+ goto error_allocated_open_tables_hash_init;
+ }
+ if ((pthread_mutex_init(&mrn_long_term_share_mutex, NULL) != 0)) {
+ goto error_allocated_long_term_share_mutex_init;
+ }
+ if (my_hash_init(&mrn_long_term_share, system_charset_info, 32, 0, 0,
+ mrn_long_term_share_get_key, 0, 0)) {
+ goto error_allocated_long_term_share_hash_init;
+ }
+
+#ifdef MRN_USE_MYSQL_DATA_HOME
+ mrn::PathMapper::default_mysql_data_home_path = mysql_data_home;
+#endif
+
+ return 0;
+
+error_allocated_long_term_share_hash_init:
+ pthread_mutex_destroy(&mrn_long_term_share_mutex);
+error_allocated_long_term_share_mutex_init:
+ my_hash_free(&mrn_open_tables);
+error_allocated_open_tables_hash_init:
+ pthread_mutex_destroy(&mrn_open_tables_mutex);
+err_allocated_open_tables_mutex_init:
+ my_hash_free(&mrn_allocated_thds);
+error_allocated_thds_hash_init:
+ pthread_mutex_destroy(&mrn_allocated_thds_mutex);
+err_allocated_thds_mutex_init:
+err_db_manager_init:
+ delete mrn_db_manager;
+ grn_ctx_fin(&mrn_db_manager_ctx);
+ grn_obj_unlink(ctx, mrn_db);
+err_db_create:
+ if (mrn_log_file_opened) {
+ fclose(mrn_log_file);
+ mrn_log_file_opened = false;
+ }
+err_log_file_open:
+ pthread_mutex_destroy(&mrn_log_mutex);
+err_log_mutex_init:
+err_mrn_change_encoding:
+ grn_ctx_fin(ctx);
+ grn_fin();
+err_grn_init:
+ return -1;
+}
+
+static int mrn_deinit(void *p)
+{
+ THD *thd = current_thd, *tmp_thd;
+ grn_ctx *ctx = &mrn_ctx;
+ MRN_LONG_TERM_SHARE *long_term_share;
+
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "%s deinit", MRN_PACKAGE_STRING);
+
+ if (thd && thd_sql_command(thd) == SQLCOM_UNINSTALL_PLUGIN) {
+ mrn::Lock lock(&mrn_allocated_thds_mutex);
+ while ((tmp_thd = (THD *) my_hash_element(&mrn_allocated_thds, 0)))
+ {
+ mrn_clear_alter_share(tmp_thd);
+ void *slot_ptr = mrn_get_slot_data(tmp_thd, false);
+ if (slot_ptr) free(slot_ptr);
+ *thd_ha_data(tmp_thd, mrn_hton_ptr) = (void *) NULL;
+ my_hash_delete(&mrn_allocated_thds, (uchar *) tmp_thd);
+ }
+ }
+
+ {
+ mrn::Lock lock(&mrn_open_tables_mutex);
+ while ((long_term_share = (MRN_LONG_TERM_SHARE *)
+ my_hash_element(&mrn_long_term_share, 0)))
+ {
+ mrn_free_long_term_share(long_term_share);
+ }
+ }
+
+ my_hash_free(&mrn_long_term_share);
+ pthread_mutex_destroy(&mrn_long_term_share_mutex);
+ my_hash_free(&mrn_open_tables);
+ pthread_mutex_destroy(&mrn_open_tables_mutex);
+ my_hash_free(&mrn_allocated_thds);
+ pthread_mutex_destroy(&mrn_allocated_thds_mutex);
+ delete mrn_db_manager;
+ grn_ctx_fin(&mrn_db_manager_ctx);
+
+ grn_obj_unlink(ctx, mrn_db);
+ grn_ctx_fin(ctx);
+ grn_fin();
+
+ if (mrn_log_file_opened) {
+ fclose(mrn_log_file);
+ mrn_log_file_opened = false;
+ }
+ pthread_mutex_destroy(&mrn_log_mutex);
+
+ return 0;
+}
+
+mrn_declare_plugin(MRN_PLUGIN_NAME)
+{
+ MYSQL_STORAGE_ENGINE_PLUGIN,
+ &storage_engine_structure,
+ MRN_PLUGIN_NAME_STRING,
+ MRN_PLUGIN_AUTHOR,
+ "CJK-ready fulltext search, column store",
+ PLUGIN_LICENSE_GPL,
+ mrn_init,
+ mrn_deinit,
+ MRN_VERSION_IN_HEX,
+ mrn_status_variables,
+ mrn_system_variables,
+ MRN_PLUGIN_LAST_VALUES
+},
+i_s_mrn_stats
+mrn_declare_plugin_end;
+
+static void mrn_generic_ft_clear(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ if (!info->ctx) {
+ DBUG_VOID_RETURN;
+ }
+
+ if (info->cursor) {
+ grn_obj_unlink(info->ctx, info->cursor);
+ }
+ if (info->id_accessor) {
+ grn_obj_unlink(info->ctx, info->id_accessor);
+ }
+ if (info->key_accessor) {
+ grn_obj_unlink(info->ctx, info->key_accessor);
+ }
+ grn_obj_unlink(info->ctx, info->result);
+ grn_obj_unlink(info->ctx, info->score_column);
+ grn_obj_unlink(info->ctx, &(info->key));
+ grn_obj_unlink(info->ctx, &(info->score));
+
+ info->ctx = NULL;
+
+ DBUG_VOID_RETURN;
+}
+
+static void mrn_generic_ft_close_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ mrn_generic_ft_clear(handler);
+ delete info;
+ DBUG_VOID_RETURN;
+}
+
+static int mrn_wrapper_ft_read_next(FT_INFO *handler, char *record)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+}
+
+static float mrn_wrapper_ft_find_relevance(FT_INFO *handler, uchar *record,
+ uint length)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ float score = 0.0;
+ grn_id record_id;
+
+ mrn_change_encoding(info->ctx, NULL);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&(info->key))), record,
+ info->primary_key_info, info->primary_key_info->key_length);
+ record_id = grn_table_get(info->ctx,
+ info->table,
+ GRN_TEXT_VALUE(&(info->key)),
+ GRN_TEXT_LEN(&(info->key)));
+
+ if (record_id != GRN_ID_NIL) {
+ grn_id result_record_id;
+ result_record_id = grn_table_get(info->ctx, info->result,
+ &record_id, sizeof(grn_id));
+ if (result_record_id != GRN_ID_NIL) {
+ GRN_BULK_REWIND(&(info->score));
+ grn_obj_get_value(info->ctx, info->score_column,
+ result_record_id, &(info->score));
+ score = (float)GRN_INT32_VALUE(&(info->score));
+ }
+ }
+
+ DBUG_PRINT("info",
+ ("mroonga: record_id=%d score=%g", record_id, score));
+
+ DBUG_RETURN(score);
+}
+
+static void mrn_wrapper_ft_close_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ mrn_generic_ft_close_search(handler);
+ DBUG_VOID_RETURN;
+}
+
+static float mrn_wrapper_ft_get_relevance(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ float score = 0.0;
+ grn_id record_id;
+ ha_mroonga *mroonga = info->mroonga;
+ mrn_change_encoding(info->ctx, NULL);
+ record_id = grn_table_get(info->ctx,
+ info->table,
+ GRN_TEXT_VALUE(&(mroonga->key_buffer)),
+ GRN_TEXT_LEN(&(mroonga->key_buffer)));
+
+ if (record_id != GRN_ID_NIL) {
+ grn_id result_record_id;
+ result_record_id = grn_table_get(info->ctx, info->result,
+ &record_id, sizeof(grn_id));
+ if (result_record_id != GRN_ID_NIL) {
+ GRN_BULK_REWIND(&(info->score));
+ grn_obj_get_value(info->ctx, info->score_column,
+ result_record_id, &(info->score));
+ score = (float)GRN_INT32_VALUE(&(info->score));
+ }
+ }
+
+ DBUG_PRINT("info",
+ ("mroonga: record_id=%d score=%g", record_id, score));
+
+ DBUG_RETURN(score);
+}
+
+static void mrn_wrapper_ft_reinit_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_VOID_RETURN;
+}
+
+static _ft_vft mrn_wrapper_ft_vft = {
+ mrn_wrapper_ft_read_next,
+ mrn_wrapper_ft_find_relevance,
+ mrn_wrapper_ft_close_search,
+ mrn_wrapper_ft_get_relevance,
+ mrn_wrapper_ft_reinit_search
+};
+
+static int mrn_storage_ft_read_next(FT_INFO *handler, char *record)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+}
+
+static float mrn_storage_ft_find_relevance(FT_INFO *handler, uchar *record,
+ uint length)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ ha_mroonga *mroonga = info->mroonga;
+ mrn_change_encoding(info->ctx, NULL);
+
+ float score = 0.0;
+ if (mroonga->record_id != GRN_ID_NIL) {
+ grn_id result_record_id;
+ result_record_id = grn_table_get(info->ctx, info->result,
+ &(mroonga->record_id), sizeof(grn_id));
+ if (result_record_id != GRN_ID_NIL) {
+ GRN_BULK_REWIND(&(info->score));
+ grn_obj_get_value(info->ctx, info->score_column,
+ result_record_id, &(info->score));
+ score = (float)GRN_INT32_VALUE(&(info->score));
+ }
+ }
+ DBUG_PRINT("info", ("mroonga: record_id=%d score=%g",
+ mroonga->record_id, score));
+
+ DBUG_RETURN(score);
+}
+
+static void mrn_storage_ft_close_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ mrn_generic_ft_close_search(handler);
+ DBUG_VOID_RETURN;
+}
+
+static float mrn_storage_ft_get_relevance(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ ha_mroonga *mroonga = info->mroonga;
+ mrn_change_encoding(info->ctx, NULL);
+
+ float score = 0.0;
+ if (mroonga->record_id != GRN_ID_NIL) {
+ grn_id result_record_id;
+ result_record_id = grn_table_get(info->ctx, info->result,
+ &(mroonga->record_id), sizeof(grn_id));
+ if (result_record_id != GRN_ID_NIL) {
+ GRN_BULK_REWIND(&(info->score));
+ grn_obj_get_value(info->ctx, info->score_column,
+ result_record_id, &(info->score));
+ score = (float)GRN_INT32_VALUE(&(info->score));
+ }
+ }
+ DBUG_PRINT("info",
+ ("mroonga: record_id=%d score=%g", mroonga->record_id, score));
+
+ DBUG_RETURN(score);
+}
+
+static void mrn_storage_ft_reinit_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_VOID_RETURN;
+}
+
+static _ft_vft mrn_storage_ft_vft = {
+ mrn_storage_ft_read_next,
+ mrn_storage_ft_find_relevance,
+ mrn_storage_ft_close_search,
+ mrn_storage_ft_get_relevance,
+ mrn_storage_ft_reinit_search
+};
+
+static int mrn_no_such_key_ft_read_next(FT_INFO *handler, char *record)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+}
+
+static float mrn_no_such_key_ft_find_relevance(FT_INFO *handler, uchar *record,
+ uint length)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(0.0);
+}
+
+static void mrn_no_such_key_ft_close_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = (st_mrn_ft_info *)handler;
+ delete info;
+ DBUG_VOID_RETURN;
+}
+
+static float mrn_no_such_key_ft_get_relevance(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_RETURN(0.0);
+}
+
+static void mrn_no_such_key_ft_reinit_search(FT_INFO *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_VOID_RETURN;
+}
+
+static _ft_vft mrn_no_such_key_ft_vft = {
+ mrn_no_such_key_ft_read_next,
+ mrn_no_such_key_ft_find_relevance,
+ mrn_no_such_key_ft_close_search,
+ mrn_no_such_key_ft_get_relevance,
+ mrn_no_such_key_ft_reinit_search
+};
+
+#ifdef HA_CAN_FULLTEXT_EXT
+static uint mrn_generic_ft_get_version()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ // This value is not used in MySQL 5.6.7-rc. So it is
+ // meaningless. It may be used in the future...
+ uint version = 1;
+ DBUG_RETURN(version);
+}
+
+static ulonglong mrn_generic_ft_ext_get_flags()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ // TODO: Should we support FTS_ORDERED_RESULT?
+ // TODO: Shuold we support FTS_DOCID_IN_RESULT?
+ ulonglong flags = 0;
+ DBUG_RETURN(flags);
+}
+
+// This function is used if we enable FTS_DOCID_IN_RESULT flag and the
+// table has "FTS_DOC_ID" (defined as FTS_DOC_ID_COL_NAME macro)
+// special name column. Should we support "FTS_DOC_ID" special name
+// column?
+// See also sql/sql_optimizer.cc:JOIN::optimize_fts_query().
+static ulonglong mrn_generic_ft_ext_get_docid(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong id = GRN_ID_NIL;
+ DBUG_RETURN(id);
+}
+
+static ulonglong mrn_generic_ft_ext_count_matches(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_ft_info *info = reinterpret_cast<st_mrn_ft_info *>(handler);
+ ulonglong n_records = grn_table_size(info->ctx, info->result);
+ DBUG_RETURN(n_records);
+}
+
+static uint mrn_wrapper_ft_ext_get_version()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ uint version = mrn_generic_ft_get_version();
+ DBUG_RETURN(version);
+}
+
+static ulonglong mrn_wrapper_ft_ext_get_flags()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong flags = mrn_generic_ft_ext_get_flags();
+ DBUG_RETURN(flags);
+}
+
+static ulonglong mrn_wrapper_ft_ext_get_docid(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong id = mrn_generic_ft_ext_get_docid(handler);
+ DBUG_RETURN(id);
+}
+
+static ulonglong mrn_wrapper_ft_ext_count_matches(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong n_records = mrn_generic_ft_ext_count_matches(handler);
+ DBUG_RETURN(n_records);
+}
+
+static _ft_vft_ext mrn_wrapper_ft_vft_ext = {
+ mrn_wrapper_ft_ext_get_version,
+ mrn_wrapper_ft_ext_get_flags,
+ mrn_wrapper_ft_ext_get_docid,
+ mrn_wrapper_ft_ext_count_matches
+};
+
+static uint mrn_storage_ft_ext_get_version()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ uint version = mrn_generic_ft_get_version();
+ DBUG_RETURN(version);
+}
+
+static ulonglong mrn_storage_ft_ext_get_flags()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong flags = mrn_generic_ft_ext_get_flags();
+ DBUG_RETURN(flags);
+}
+
+static ulonglong mrn_storage_ft_ext_get_docid(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong id = mrn_generic_ft_ext_get_docid(handler);
+ DBUG_RETURN(id);
+}
+
+static ulonglong mrn_storage_ft_ext_count_matches(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong n_records = mrn_generic_ft_ext_count_matches(handler);
+ DBUG_RETURN(n_records);
+}
+
+static _ft_vft_ext mrn_storage_ft_vft_ext = {
+ mrn_storage_ft_ext_get_version,
+ mrn_storage_ft_ext_get_flags,
+ mrn_storage_ft_ext_get_docid,
+ mrn_storage_ft_ext_count_matches
+};
+
+static uint mrn_no_such_key_ft_ext_get_version()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ uint version = mrn_generic_ft_get_version();
+ DBUG_RETURN(version);
+}
+
+static ulonglong mrn_no_such_key_ft_ext_get_flags()
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong flags = mrn_generic_ft_ext_get_flags();
+ DBUG_RETURN(flags);
+}
+
+static ulonglong mrn_no_such_key_ft_ext_get_docid(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong id = GRN_ID_NIL;
+ DBUG_RETURN(id);
+}
+
+static ulonglong mrn_no_such_key_ft_ext_count_matches(FT_INFO_EXT *handler)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ ulonglong n_records = 0;
+ DBUG_RETURN(n_records);
+}
+
+static _ft_vft_ext mrn_no_such_key_ft_vft_ext = {
+ mrn_no_such_key_ft_ext_get_version,
+ mrn_no_such_key_ft_ext_get_flags,
+ mrn_no_such_key_ft_ext_get_docid,
+ mrn_no_such_key_ft_ext_count_matches
+};
+#endif
+
+/* handler implementation */
+ha_mroonga::ha_mroonga(handlerton *hton, TABLE_SHARE *share_arg)
+ :handler(hton, share_arg),
+ wrap_handler(NULL),
+ is_clone(false),
+ parent_for_clone(NULL),
+ mem_root_for_clone(NULL),
+ record_id(GRN_ID_NIL),
+ key_id(NULL),
+ del_key_id(NULL),
+
+ wrap_ft_init_count(0),
+ share(NULL),
+ wrap_key_info(NULL),
+ base_key_info(NULL),
+
+ analyzed_for_create(false),
+ wrap_handler_for_create(NULL),
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ hnd_add_index(NULL),
+#endif
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ alter_key_info_buffer(NULL),
+#else
+ wrap_alter_key_info(NULL),
+#endif
+ mrn_lock_type(F_UNLCK),
+
+ ctx_entity_(),
+ ctx(&ctx_entity_),
+ grn_table(NULL),
+ grn_columns(NULL),
+ grn_column_ranges(NULL),
+ grn_index_tables(NULL),
+ grn_index_columns(NULL),
+ grn_table_is_referenced(false),
+
+ grn_source_column_geo(NULL),
+ cursor_geo(NULL),
+ cursor(NULL),
+ index_table_cursor(NULL),
+ empty_value_records(NULL),
+ empty_value_records_cursor(NULL),
+
+ sorted_result(NULL),
+ matched_record_keys(NULL),
+ blob_buffers(NULL),
+
+ dup_key(0),
+
+ count_skip(false),
+ fast_order_limit(false),
+ fast_order_limit_with_index(false),
+
+ ignoring_duplicated_key(false),
+ inserting_with_update(false),
+ fulltext_searching(false),
+ ignoring_no_key_columns(false),
+ replacing_(false),
+ written_by_row_based_binlog(0),
+ current_ft_item(NULL)
+{
+ MRN_DBUG_ENTER_METHOD();
+ grn_ctx_init(ctx, 0);
+ mrn_change_encoding(ctx, system_charset_info);
+ grn_ctx_use(ctx, mrn_db);
+ GRN_WGS84_GEO_POINT_INIT(&top_left_point, 0);
+ GRN_WGS84_GEO_POINT_INIT(&bottom_right_point, 0);
+ GRN_WGS84_GEO_POINT_INIT(&source_point, 0);
+ GRN_TEXT_INIT(&key_buffer, 0);
+ GRN_TEXT_INIT(&encoded_key_buffer, 0);
+ GRN_VOID_INIT(&old_value_buffer);
+ GRN_VOID_INIT(&new_value_buffer);
+ DBUG_VOID_RETURN;
+}
+
+ha_mroonga::~ha_mroonga()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create) {
+ if (wrap_handler_for_create) {
+ delete wrap_handler_for_create;
+ }
+ if (share_for_create.wrapper_mode) {
+ plugin_unlock(NULL, share_for_create.plugin);
+ }
+ mrn_free_share_alloc(&share_for_create);
+ free_root(&mem_root_for_create, MYF(0));
+ }
+ if (blob_buffers)
+ {
+ delete [] blob_buffers;
+ }
+ grn_obj_unlink(ctx, &top_left_point);
+ grn_obj_unlink(ctx, &bottom_right_point);
+ grn_obj_unlink(ctx, &source_point);
+ grn_obj_unlink(ctx, &key_buffer);
+ grn_obj_unlink(ctx, &encoded_key_buffer);
+ grn_obj_unlink(ctx, &old_value_buffer);
+ grn_obj_unlink(ctx, &new_value_buffer);
+ grn_ctx_fin(ctx);
+ DBUG_VOID_RETURN;
+}
+
+const char *ha_mroonga::table_type() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(MRN_PLUGIN_NAME_STRING);
+}
+
+const char *ha_mroonga::index_type(uint key_nr)
+{
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->s->key_info[key_nr];
+ if (key_info.algorithm == HA_KEY_ALG_FULLTEXT) {
+ DBUG_RETURN("FULLTEXT");
+ } else if (key_info.algorithm == HA_KEY_ALG_HASH) {
+ DBUG_RETURN("HASH");
+ } else {
+ DBUG_RETURN("BTREE");
+ }
+}
+
+static const char *ha_mroonga_exts[] = {
+ NullS
+};
+const char **ha_mroonga::bas_ext() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(ha_mroonga_exts);
+}
+
+uint ha_mroonga::wrapper_max_supported_record_length() const
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrap_handler_for_create->max_supported_record_length();
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->max_supported_record_length();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_max_supported_record_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_MAX_REC_LENGTH);
+}
+
+uint ha_mroonga::max_supported_record_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ uint res;
+ if (!share && !analyzed_for_create &&
+ (
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX ||
+ thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE
+ )
+ ) {
+ create_share_for_create();
+ }
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrapper_max_supported_record_length();
+ } else if (wrap_handler && share && share->wrapper_mode) {
+ res = wrapper_max_supported_record_length();
+ } else {
+ res = storage_max_supported_record_length();
+ }
+
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::wrapper_max_supported_keys() const
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrap_handler_for_create->max_supported_keys();
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->max_supported_keys();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_max_supported_keys() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_MAX_REC_LENGTH);
+}
+
+uint ha_mroonga::max_supported_keys() const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ uint res;
+ if (!share && !analyzed_for_create &&
+ (
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX ||
+ thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE
+ )
+ ) {
+ create_share_for_create();
+ }
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrapper_max_supported_keys();
+ } else if (wrap_handler && share && share->wrapper_mode) {
+ res = wrapper_max_supported_keys();
+ } else {
+ res = storage_max_supported_keys();
+ }
+
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::wrapper_max_supported_key_length() const
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrap_handler_for_create->max_supported_key_length();
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->max_supported_key_length();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_max_supported_key_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_MAX_REC_LENGTH);
+}
+
+uint ha_mroonga::max_supported_key_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ uint res;
+ if (!share && !analyzed_for_create &&
+ (
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX ||
+ thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE
+ )
+ ) {
+ create_share_for_create();
+ }
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrapper_max_supported_key_length();
+ } else if (wrap_handler && share && share->wrapper_mode) {
+ res = wrapper_max_supported_key_length();
+ } else {
+ res = storage_max_supported_key_length();
+ }
+
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::wrapper_max_supported_key_part_length() const
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrap_handler_for_create->max_supported_key_part_length();
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->max_supported_key_part_length();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_max_supported_key_part_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_MAX_REC_LENGTH);
+}
+
+uint ha_mroonga::max_supported_key_part_length() const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ uint res;
+ if (!share && !analyzed_for_create &&
+ (
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX ||
+ thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE
+ )
+ ) {
+ create_share_for_create();
+ }
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ res = wrapper_max_supported_key_part_length();
+ } else if (wrap_handler && share && share->wrapper_mode) {
+ res = wrapper_max_supported_key_part_length();
+ } else {
+ res = storage_max_supported_key_part_length();
+ }
+
+ DBUG_RETURN(res);
+}
+
+ulonglong ha_mroonga::wrapper_table_flags() const
+{
+ ulonglong table_flags;
+ MRN_DBUG_ENTER_METHOD();
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ table_flags = wrap_handler_for_create->ha_table_flags();
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ table_flags = wrap_handler->ha_table_flags();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ table_flags |= HA_CAN_FULLTEXT | HA_PRIMARY_KEY_REQUIRED_FOR_DELETE |
+ HA_CAN_RTREEKEYS | HA_REC_NOT_IN_SEQ;
+#ifdef HA_CAN_REPAIR
+ table_flags |= HA_CAN_REPAIR;
+#endif
+#ifdef HA_CAN_FULLTEXT_EXT
+ table_flags |= HA_CAN_FULLTEXT_EXT;
+#endif
+ DBUG_RETURN(table_flags);
+}
+
+ulonglong ha_mroonga::storage_table_flags() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ ulonglong flags =
+ HA_NO_TRANSACTIONS |
+ HA_PARTIAL_COLUMN_READ |
+ HA_REC_NOT_IN_SEQ |
+ HA_NULL_IN_KEY |
+ HA_CAN_INDEX_BLOBS |
+ HA_STATS_RECORDS_IS_EXACT |
+ HA_CAN_FULLTEXT |
+ HA_BINLOG_FLAGS |
+ HA_CAN_BIT_FIELD |
+ HA_DUPLICATE_POS |
+ HA_CAN_GEOMETRY |
+ HA_CAN_RTREEKEYS;
+ //HA_HAS_RECORDS;
+#ifdef HA_MUST_USE_TABLE_CONDITION_PUSHDOWN
+ flags |= HA_MUST_USE_TABLE_CONDITION_PUSHDOWN;
+#endif
+#ifdef HA_CAN_REPAIR
+ flags |= HA_CAN_REPAIR;
+#endif
+#ifdef HA_CAN_FULLTEXT_EXT
+ flags |= HA_CAN_FULLTEXT_EXT;
+#endif
+ DBUG_RETURN(flags);
+}
+
+ulonglong ha_mroonga::table_flags() const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ ulonglong flags;
+ if (!share && !analyzed_for_create &&
+ (
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX ||
+ thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE
+ )
+ ) {
+ create_share_for_create();
+ }
+ if (analyzed_for_create && share_for_create.wrapper_mode) {
+ flags = wrapper_table_flags();
+ } else if (wrap_handler && share && share->wrapper_mode) {
+ flags = wrapper_table_flags();
+ } else {
+ flags = storage_table_flags();
+ }
+
+ DBUG_RETURN(flags);
+}
+
+ulong ha_mroonga::wrapper_index_flags(uint idx, uint part, bool all_parts) const
+{
+ ulong index_flags;
+ KEY key = table_share->key_info[idx];
+ MRN_DBUG_ENTER_METHOD();
+ if (key.algorithm == HA_KEY_ALG_BTREE || key.algorithm == HA_KEY_ALG_UNDEF) {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ index_flags = wrap_handler->index_flags(idx, part, all_parts);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ } else {
+ index_flags = HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR;
+ }
+ DBUG_RETURN(index_flags);
+}
+
+ulong ha_mroonga::storage_index_flags(uint idx, uint part, bool all_parts) const
+{
+ MRN_DBUG_ENTER_METHOD();
+ ulong flags;
+ KEY key = table_share->key_info[idx];
+ if (key.algorithm == HA_KEY_ALG_BTREE || key.algorithm == HA_KEY_ALG_UNDEF) {
+ flags = HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE;
+ bool need_normalize_p = false;
+ Field *field = &key.key_part[part].field[0];
+ if (field && should_normalize(field)) {
+ need_normalize_p = true;
+ }
+ if (!need_normalize_p) {
+ flags |= HA_KEYREAD_ONLY;
+ }
+ if (KEY_N_KEY_PARTS(&key) > 1 || !need_normalize_p) {
+ flags |= HA_READ_ORDER;
+ }
+ } else {
+ flags = HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR;
+ }
+ DBUG_RETURN(flags);
+}
+
+ulong ha_mroonga::index_flags(uint idx, uint part, bool all_parts) const
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ KEY key = table_share->key_info[idx];
+ if (key.algorithm == HA_KEY_ALG_FULLTEXT) {
+ DBUG_RETURN(HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR);
+ }
+ if (mrn_is_geo_key(&key)) {
+ DBUG_RETURN(HA_ONLY_WHOLE_INDEX | HA_KEY_SCAN_NOT_ROR);
+ }
+
+ int error = 0;
+ if (wrap_handler && share && share->wrapper_mode)
+ {
+ error = wrapper_index_flags(idx, part, all_parts);
+ } else {
+ error = storage_index_flags(idx, part, all_parts);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::create_share_for_create() const
+{
+ int error;
+ THD *thd = ha_thd();
+ LEX *lex = thd->lex;
+ HA_CREATE_INFO *create_info = &lex->create_info;
+ TABLE_LIST *table_list = lex->select_lex.table_list.first;
+ MRN_DBUG_ENTER_METHOD();
+ wrap_handler_for_create = NULL;
+ memset(&table_for_create, 0, sizeof(TABLE));
+ memset(&share_for_create, 0, sizeof(MRN_SHARE));
+ memset(&table_share_for_create, 0, sizeof(TABLE_SHARE));
+ if (table_share) {
+ table_share_for_create.comment = table_share->comment;
+ table_share_for_create.connect_string = table_share->connect_string;
+ } else {
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ if (thd_sql_command(ha_thd()) != SQLCOM_CREATE_INDEX) {
+#endif
+ table_share_for_create.comment = create_info->comment;
+ table_share_for_create.connect_string = create_info->connect_string;
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ }
+#endif
+ if (thd_sql_command(ha_thd()) == SQLCOM_ALTER_TABLE ||
+ thd_sql_command(ha_thd()) == SQLCOM_CREATE_INDEX) {
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, false);
+ if (slot_data && slot_data->alter_create_info) {
+ create_info = slot_data->alter_create_info;
+ if (slot_data->alter_connect_string) {
+ table_share_for_create.connect_string.str =
+ slot_data->alter_connect_string;
+ table_share_for_create.connect_string.length =
+ strlen(slot_data->alter_connect_string);
+ } else {
+ table_share_for_create.connect_string.str = NULL;
+ table_share_for_create.connect_string.length = 0;
+ }
+ if (slot_data->alter_comment) {
+ table_share_for_create.comment.str =
+ slot_data->alter_comment;
+ table_share_for_create.comment.length =
+ strlen(slot_data->alter_comment);
+ } else {
+ table_share_for_create.comment.str = NULL;
+ table_share_for_create.comment.length = 0;
+ }
+ }
+ }
+ }
+ init_alloc_root(&mem_root_for_create, 1024, 0, MYF(0));
+ analyzed_for_create = true;
+ if (table_list) {
+ share_for_create.table_name = table_list->table_name;
+ share_for_create.table_name_length = table_list->table_name_length;
+ }
+ share_for_create.table_share = &table_share_for_create;
+ table_for_create.s = &table_share_for_create;
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ table_for_create.part_info = NULL;
+#endif
+ if ((error = mrn_parse_table_param(&share_for_create, &table_for_create)))
+ goto error;
+
+ if (share_for_create.wrapper_mode)
+ {
+ wrap_handler_for_create =
+ share_for_create.hton->create(share_for_create.hton, NULL,
+ &mem_root_for_create);
+ if (!wrap_handler_for_create) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ wrap_handler_for_create->init();
+ }
+ DBUG_RETURN(0);
+
+error:
+ if (share_for_create.wrapper_mode) {
+ plugin_unlock(NULL, share_for_create.plugin);
+ }
+ mrn_free_share_alloc(&share_for_create);
+ free_root(&mem_root_for_create, MYF(0));
+ analyzed_for_create = false;
+ thd->clear_error();
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_create(const char *name, TABLE *table,
+ HA_CREATE_INFO *info, MRN_SHARE *tmp_share)
+{
+ int error = 0;
+ handler *hnd;
+ MRN_DBUG_ENTER_METHOD();
+
+ if (table_share->primary_key == MAX_KEY)
+ {
+ my_message(ER_REQUIRES_PRIMARY_KEY,
+ MRN_GET_ERR_MSG(ER_REQUIRES_PRIMARY_KEY), MYF(0));
+ DBUG_RETURN(ER_REQUIRES_PRIMARY_KEY);
+ }
+
+ mrn::PathMapper mapper(name);
+ error = wrapper_create_index(name, table, info, tmp_share,
+ mapper.table_name());
+ if (error)
+ DBUG_RETURN(error);
+
+ wrap_key_info = mrn_create_key_info_for_table(tmp_share, table, &error);
+ if (error)
+ DBUG_RETURN(error);
+ base_key_info = table->key_info;
+
+ share = tmp_share;
+ MRN_SET_WRAP_SHARE_KEY(tmp_share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (!(hnd =
+ tmp_share->hton->create(tmp_share->hton, table->s,
+ current_thd->mem_root)))
+ {
+ MRN_SET_BASE_SHARE_KEY(tmp_share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ share = NULL;
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ hnd->init();
+ error = hnd->ha_create(name, table, info);
+ MRN_SET_BASE_SHARE_KEY(tmp_share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ share = NULL;
+ delete hnd;
+
+ if (error) {
+ wrapper_delete_index(name, tmp_share, mapper.table_name());
+ }
+
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_create_index_fulltext_validate(KEY *key_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ uint i;
+ for (i = 0; i < KEY_N_KEY_PARTS(key_info); i++) {
+ Field *field = key_info->key_part[i].field;
+
+ grn_builtin_type gtype = mrn_grn_type_from_field(ctx, field, true);
+ if (gtype != GRN_DB_SHORT_TEXT)
+ {
+ error = ER_CANT_CREATE_TABLE;
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "key type must be text: <%d> "
+ "(TODO: We should show type name not type ID.)",
+ field->type());
+ my_message(ER_CANT_CREATE_TABLE,
+ "key type must be text. (TODO: We should show type name.)",
+ MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_create_index_fulltext(const char *grn_table_name,
+ int i,
+ KEY *key_info,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ MRN_SHARE *tmp_share)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ error = wrapper_create_index_fulltext_validate(key_info);
+ if (error) {
+ DBUG_RETURN(error);
+ }
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_obj_flags index_table_flags =
+ GRN_OBJ_TABLE_PAT_KEY |
+ GRN_OBJ_PERSISTENT;
+ grn_obj *index_table;
+
+ grn_obj_flags index_column_flags =
+ GRN_OBJ_COLUMN_INDEX | GRN_OBJ_WITH_POSITION | GRN_OBJ_PERSISTENT;
+ if (KEY_N_KEY_PARTS(key_info) > 1) {
+ index_column_flags |= GRN_OBJ_WITH_SECTION;
+ }
+
+ mrn::SmartGrnObj lexicon_key_type(ctx, GRN_DB_SHORT_TEXT);
+ error = mrn_change_encoding(ctx, key_info->key_part->field->charset());
+ if (error) {
+ DBUG_RETURN(error);
+ }
+ mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
+ index_table = grn_table_create(ctx,
+ index_table_name.c_str(),
+ index_table_name.length(),
+ NULL,
+ index_table_flags,
+ lexicon_key_type.get(),
+ 0);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(ER_CANT_CREATE_TABLE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ mrn_change_encoding(ctx, system_charset_info);
+ index_tables[i] = index_table;
+
+ grn_obj *tokenizer = find_tokenizer(tmp_share->key_parser[i],
+ tmp_share->key_parser_length[i]);
+ if (tokenizer) {
+ grn_info_type info_type = GRN_INFO_DEFAULT_TOKENIZER;
+ grn_obj_set_info(ctx, index_table, info_type, tokenizer);
+ grn_obj_unlink(ctx, tokenizer);
+ }
+
+ {
+ grn_obj token_filters;
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, 0);
+ if (find_token_filters(key_info, &token_filters)) {
+ grn_obj_set_info(ctx, index_table,
+ GRN_INFO_TOKEN_FILTERS, &token_filters);
+ }
+ grn_obj_unlink(ctx, &token_filters);
+ }
+
+ if (should_normalize(&key_info->key_part->field[0])) {
+ grn_info_type info_type = GRN_INFO_NORMALIZER;
+ grn_obj *normalizer = find_normalizer(key_info);
+ if (normalizer) {
+ grn_obj_set_info(ctx, index_table, info_type, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+ }
+
+ grn_obj *index_column = grn_column_create(ctx, index_table,
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME),
+ NULL,
+ index_column_flags,
+ grn_table);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ if (index_columns) {
+ index_columns[i] = index_column;
+ } else {
+ grn_obj_unlink(ctx, index_column);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_create_index_geo(const char *grn_table_name,
+ int i,
+ KEY *key_info,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ MRN_SHARE *tmp_share)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
+
+ grn_obj_flags index_table_flags =
+ GRN_OBJ_TABLE_PAT_KEY |
+ GRN_OBJ_PERSISTENT;
+ grn_obj *index_table;
+
+ grn_obj_flags index_column_flags =
+ GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT;
+
+ grn_obj *lexicon_key_type = grn_ctx_at(ctx, GRN_DB_WGS84_GEO_POINT);
+ index_table = grn_table_create(ctx,
+ index_table_name.c_str(),
+ index_table_name.length(),
+ NULL,
+ index_table_flags, lexicon_key_type, 0);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(ER_CANT_CREATE_TABLE, ctx->errbuf, MYF(0));
+ grn_obj_unlink(ctx, lexicon_key_type);
+ DBUG_RETURN(error);
+ }
+ grn_obj_unlink(ctx, lexicon_key_type);
+ index_tables[i] = index_table;
+
+ grn_obj *index_column = grn_column_create(ctx, index_table,
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME),
+ NULL,
+ index_column_flags,
+ grn_table);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ if (index_columns) {
+ index_columns[i] = index_column;
+ } else {
+ grn_obj_unlink(ctx, index_column);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_create_index(const char *name, TABLE *table,
+ HA_CREATE_INFO *info,
+ MRN_SHARE *tmp_share,
+ const char *grn_table_name)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_obj *grn_index_table;
+ char *grn_table_path = NULL; // we don't specify path
+ grn_obj *pkey_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT);
+ grn_obj *pkey_value_type = NULL; // we don't use this
+ grn_obj_flags grn_table_flags = GRN_OBJ_PERSISTENT | GRN_OBJ_TABLE_HASH_KEY;
+
+ grn_index_table = grn_table_create(ctx, grn_table_name, strlen(grn_table_name),
+ grn_table_path, grn_table_flags,
+ pkey_type, pkey_value_type);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ if (grn_table) {
+ grn_obj_unlink(ctx, grn_table);
+ }
+ grn_table = grn_index_table;
+
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, n_keys);
+ if (!tmp_share->disable_keys) {
+ for (i = 0; i < n_keys; i++) {
+ index_tables[i] = NULL;
+
+ KEY key_info = table->s->key_info[i];
+ if (key_info.algorithm == HA_KEY_ALG_FULLTEXT) {
+ error = wrapper_create_index_fulltext(grn_table_name,
+ i, &key_info,
+ index_tables, NULL, tmp_share);
+ } else if (mrn_is_geo_key(&key_info)) {
+ error = wrapper_create_index_geo(grn_table_name,
+ i, &key_info,
+ index_tables, NULL, tmp_share);
+ }
+ }
+ }
+
+ if (error) {
+ for (uint j = 0; j < i; j++) {
+ if (index_tables[j]) {
+ grn_obj_remove(ctx, index_tables[j]);
+ }
+ }
+ grn_obj_remove(ctx, grn_table);
+ grn_table = NULL;
+ }
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_create(const char *name, TABLE *table,
+ HA_CREATE_INFO *info, MRN_SHARE *tmp_share)
+{
+ int error;
+ MRN_LONG_TERM_SHARE *long_term_share = tmp_share->long_term_share;
+ MRN_DBUG_ENTER_METHOD();
+
+ if (info->auto_increment_value) {
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ long_term_share->auto_inc_value = info->auto_increment_value;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ long_term_share->auto_inc_inited = true;
+ }
+
+ error = storage_create_validate_pseudo_column(table);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = storage_create_validate_index(table);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_obj_flags table_flags = GRN_OBJ_PERSISTENT;
+
+ /* primary key must be handled before creating table */
+ grn_obj *pkey_type;
+ uint pkey_nr = table->s->primary_key;
+ if (pkey_nr != MAX_INDEXES) {
+ KEY key_info = table->s->key_info[pkey_nr];
+ bool is_id;
+
+ int key_parts = KEY_N_KEY_PARTS(&key_info);
+ if (key_parts == 1) {
+ Field *pkey_field = key_info.key_part[0].field;
+ const char *column_name = pkey_field->field_name;
+ is_id = (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0);
+
+ grn_builtin_type gtype = mrn_grn_type_from_field(ctx, pkey_field, false);
+ pkey_type = grn_ctx_at(ctx, gtype);
+ } else {
+ is_id = false;
+ pkey_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT);
+ }
+
+ // default algorithm is BTREE ==> PAT
+ if (!is_id && key_info.algorithm == HA_KEY_ALG_HASH) {
+ table_flags |= GRN_OBJ_TABLE_HASH_KEY;
+ } else if (!is_id) {
+ table_flags |= GRN_OBJ_TABLE_PAT_KEY;
+ } else {
+ // for _id
+ table_flags |= GRN_OBJ_TABLE_NO_KEY;
+ pkey_type = NULL;
+ }
+
+ } else {
+ // primary key doesn't exists
+ table_flags |= GRN_OBJ_TABLE_NO_KEY;
+ pkey_type = NULL;
+ }
+
+ /* create table */
+ grn_obj *table_obj;
+ mrn::PathMapper mapper(name);
+
+ char *table_path = NULL; // we don't specify path
+ grn_obj *pkey_value_type = NULL; // we don't use this
+
+ table_obj = grn_table_create(ctx,
+ mapper.table_name(), strlen(mapper.table_name()),
+ table_path,
+ table_flags, pkey_type, pkey_value_type);
+ if (ctx->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ if (table_flags == (GRN_OBJ_PERSISTENT | GRN_OBJ_TABLE_PAT_KEY)) {
+ KEY key_info = table->s->key_info[pkey_nr];
+ int key_parts = KEY_N_KEY_PARTS(&key_info);
+ if (key_parts == 1) {
+ grn_obj *normalizer = NULL;
+ if (tmp_share->normalizer) {
+ normalizer = grn_ctx_get(ctx,
+ tmp_share->normalizer,
+ tmp_share->normalizer_length);
+ } else {
+ Field *field = &(key_info.key_part->field[0]);
+ if (should_normalize(field)) {
+ normalizer = find_normalizer(&key_info);
+ }
+ }
+ if (normalizer) {
+ grn_info_type info_type = GRN_INFO_NORMALIZER;
+ grn_obj_set_info(ctx, table_obj, info_type, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+ if (tmp_share->default_tokenizer) {
+ grn_obj *default_tokenizer =
+ grn_ctx_get(ctx,
+ tmp_share->default_tokenizer,
+ tmp_share->default_tokenizer_length);
+ if (default_tokenizer) {
+ grn_info_type info_type = GRN_INFO_DEFAULT_TOKENIZER;
+ grn_obj_set_info(ctx, table_obj, info_type, default_tokenizer);
+ grn_obj_unlink(ctx, default_tokenizer);
+ }
+ }
+ if (tmp_share->token_filters) {
+ grn_obj token_filters;
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, 0);
+ if (find_token_filters_fill(&token_filters,
+ tmp_share->token_filters,
+ tmp_share->token_filters_length)) {
+ grn_obj_set_info(ctx, table_obj,
+ GRN_INFO_TOKEN_FILTERS, &token_filters);
+ }
+ grn_obj_unlink(ctx, &token_filters);
+ }
+ }
+ }
+
+ /* create columns */
+ uint n_columns = table->s->fields;
+ for (uint i = 0; i < n_columns; i++) {
+ grn_obj *col_type;
+ Field *field = table->s->field[i];
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+ if (storage_create_foreign_key(table, mapper.table_name(), field, table_obj,
+ error)) {
+ continue;
+ }
+ if (error) {
+ grn_obj_remove(ctx, table_obj);
+ DBUG_RETURN(error);
+ }
+#endif
+
+ grn_obj_flags col_flags = GRN_OBJ_PERSISTENT;
+ if (tmp_share->col_flags[i]) {
+ // TODO: parse flags
+ if (strcmp(tmp_share->col_flags[i], "COLUMN_VECTOR") == 0) {
+ col_flags |= GRN_OBJ_COLUMN_VECTOR;
+ } else {
+ col_flags |= GRN_OBJ_COLUMN_SCALAR;
+ }
+ } else {
+ col_flags |= GRN_OBJ_COLUMN_SCALAR;
+ }
+ grn_builtin_type gtype = mrn_grn_type_from_field(ctx, field, false);
+ if (tmp_share->col_type[i]) {
+ col_type = grn_ctx_get(ctx, tmp_share->col_type[i], -1);
+ } else {
+ col_type = grn_ctx_at(ctx, gtype);
+ }
+ char *col_path = NULL; // we don't specify path
+
+ grn_column_create(ctx, table_obj, column_name, column_name_size,
+ col_path, col_flags, col_type);
+ if (ctx->rc) {
+ grn_obj_remove(ctx, table_obj);
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+
+ error = storage_create_indexes(table, mapper.table_name(), table_obj,
+ tmp_share);
+ if (error) {
+ grn_obj_remove(ctx, table_obj);
+ table_obj = NULL;
+ }
+
+ if (table_obj) {
+ grn_obj_unlink(ctx, table_obj);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_create_validate_pseudo_column(TABLE *table)
+{
+ int error = 0;
+ uint i, n_columns;
+
+ MRN_DBUG_ENTER_METHOD();
+ n_columns = table->s->fields;
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->s->field[i];
+ const char *column_name = field->field_name;
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ switch (field->type()) {
+ case MYSQL_TYPE_TINY :
+ case MYSQL_TYPE_SHORT :
+ case MYSQL_TYPE_INT24 :
+ case MYSQL_TYPE_LONG :
+ case MYSQL_TYPE_LONGLONG :
+ break;
+ default:
+ GRN_LOG(ctx, GRN_LOG_ERROR, "_id must be numeric data type");
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, "_id must be numeric data type", MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+bool ha_mroonga::storage_create_foreign_key(TABLE *table,
+ const char *grn_table_name,
+ Field *field,
+ grn_obj *table_obj, int &error)
+{
+ MRN_DBUG_ENTER_METHOD();
+ LEX *lex = ha_thd()->lex;
+ Alter_info *alter_info = &lex->alter_info;
+ List_iterator<Key> key_iterator(alter_info->key_list);
+ Key *key;
+ char ref_db_buff[NAME_LEN + 1], ref_table_buff[NAME_LEN + 1];
+ while ((key = key_iterator++))
+ {
+ if (key->type != Key::FOREIGN_KEY)
+ {
+ continue;
+ }
+ if (key->columns.elements > 1)
+ {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, "mroonga can't use FOREIGN_KEY with multiple columns",
+ MYF(0));
+ DBUG_RETURN(false);
+ }
+ List_iterator<Key_part_spec> key_part_col_iterator(key->columns);
+ Key_part_spec *key_part_col = key_part_col_iterator++;
+ LEX_STRING field_name = key_part_col->field_name;
+ DBUG_PRINT("info", ("mroonga: field_name=%s", field_name.str));
+ DBUG_PRINT("info", ("mroonga: field->field_name=%s", field->field_name));
+ if (strcmp(field->field_name, field_name.str))
+ {
+ continue;
+ }
+ Foreign_key *fk = (Foreign_key *) key;
+ List_iterator<Key_part_spec> key_part_ref_col_iterator(fk->ref_columns);
+ Key_part_spec *key_part_ref_col = key_part_ref_col_iterator++;
+ LEX_STRING ref_field_name = key_part_ref_col->field_name;
+ DBUG_PRINT("info", ("mroonga: ref_field_name=%s", ref_field_name.str));
+ LEX_STRING ref_db_name = fk->ref_db;
+ DBUG_PRINT("info", ("mroonga: ref_db_name=%s", ref_db_name.str));
+ if (ref_db_name.str && lower_case_table_names) {
+ strmake(ref_db_buff, ref_db_name.str, sizeof(ref_db_buff) - 1);
+ my_casedn_str(system_charset_info, ref_db_buff);
+ ref_db_name.str = ref_db_buff;
+ DBUG_PRINT("info", ("mroonga: casedn ref_db_name=%s", ref_db_name.str));
+ }
+ LEX_STRING ref_table_name = fk->ref_table;
+ DBUG_PRINT("info", ("mroonga: ref_table_name=%s", ref_table_name.str));
+ if (ref_table_name.str && lower_case_table_names) {
+ strmake(ref_table_buff, ref_table_name.str, sizeof(ref_table_buff) - 1);
+ my_casedn_str(system_charset_info, ref_table_buff);
+ ref_table_name.str = ref_table_buff;
+ DBUG_PRINT("info", ("mroonga: casedn ref_table_name=%s", ref_table_name.str));
+ }
+ if (ref_db_name.str && strcmp(table->s->db.str, ref_db_name.str))
+ {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error,
+ "mroonga can't use FOREIGN_KEY during different database tables",
+ MYF(0));
+ DBUG_RETURN(false);
+ }
+
+ grn_obj *column, *column_ref = NULL, *grn_table_ref = NULL;
+ char ref_path[FN_REFLEN + 1];
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_ref_table_share;
+ build_table_filename(ref_path, sizeof(ref_path) - 1,
+ table->s->db.str, ref_table_name.str, "", 0);
+
+ DBUG_PRINT("info", ("mroonga: ref_path=%s", ref_path));
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(false);
+ mrn::PathMapper mapper(ref_path);
+ grn_table_ref = grn_ctx_get(ctx, mapper.table_name(),
+ strlen(mapper.table_name()));
+ if (!grn_table_ref) {
+ error = ER_CANT_CREATE_TABLE;
+ char err_msg[MRN_BUFFER_SIZE];
+ sprintf(err_msg, "refference table [%s.%s] is not mroonga table",
+ table->s->db.str, ref_table_name.str);
+ my_message(error, err_msg, MYF(0));
+ DBUG_RETURN(false);
+ }
+
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(mapper.db_name(),
+ strlen(mapper.db_name()),
+ mapper.mysql_table_name(),
+ strlen(mapper.mysql_table_name()),
+ mapper.mysql_table_name(), TL_WRITE);
+#else
+ table_list.init_one_table(mapper.db_name(),
+ mapper.mysql_table_name(),
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(table->s);
+ tmp_ref_table_share =
+ mrn_create_tmp_table_share(&table_list, ref_path, &error);
+ mrn_open_mutex_unlock(table->s);
+ if (!tmp_ref_table_share) {
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ char err_msg[MRN_BUFFER_SIZE];
+ sprintf(err_msg, "refference table [%s.%s] is not found",
+ table->s->db.str, ref_table_name.str);
+ my_message(error, err_msg, MYF(0));
+ DBUG_RETURN(false);
+ }
+ uint ref_pkey_nr = tmp_ref_table_share->primary_key;
+ if (ref_pkey_nr == MAX_KEY) {
+ mrn_open_mutex_lock(table->s);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table->s);
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ char err_msg[MRN_BUFFER_SIZE];
+ sprintf(err_msg, "refference table [%s.%s] has no primary key",
+ table->s->db.str, ref_table_name.str);
+ my_message(error, err_msg, MYF(0));
+ DBUG_RETURN(false);
+ }
+ KEY *ref_key_info = &tmp_ref_table_share->key_info[ref_pkey_nr];
+ uint ref_key_parts = KEY_N_KEY_PARTS(ref_key_info);
+ if (ref_key_parts > 1) {
+ mrn_open_mutex_lock(table->s);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table->s);
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ char err_msg[MRN_BUFFER_SIZE];
+ sprintf(err_msg,
+ "refference table [%s.%s] primary key is multiple column",
+ table->s->db.str, ref_table_name.str);
+ my_message(error, err_msg, MYF(0));
+ DBUG_RETURN(false);
+ }
+ Field *ref_field = &ref_key_info->key_part->field[0];
+ if (strcmp(ref_field->field_name, ref_field_name.str)) {
+ mrn_open_mutex_lock(table->s);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table->s);
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ char err_msg[MRN_BUFFER_SIZE];
+ sprintf(err_msg,
+ "refference column [%s.%s.%s] is not used for primary key",
+ table->s->db.str, ref_table_name.str, ref_field_name.str);
+ my_message(error, err_msg, MYF(0));
+ DBUG_RETURN(false);
+ }
+ mrn_open_mutex_lock(table->s);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table->s);
+ grn_obj_flags col_flags = GRN_OBJ_PERSISTENT;
+ column = grn_column_create(ctx, table_obj, field->field_name,
+ strlen(field->field_name),
+ NULL, col_flags, grn_table_ref);
+ if (ctx->rc) {
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(false);
+ }
+
+ mrn::IndexColumnName index_column_name(grn_table_name, field->field_name);
+ grn_obj_flags ref_col_flags = GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT;
+ column_ref = grn_column_create(ctx, grn_table_ref,
+ index_column_name.c_str(),
+ index_column_name.length(),
+ NULL, ref_col_flags, table_obj);
+ if (ctx->rc) {
+ grn_obj_unlink(ctx, column);
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(false);
+ }
+
+ grn_obj source_ids;
+ grn_id source_id = grn_obj_id(ctx, column);
+ GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR);
+ GRN_UINT32_PUT(ctx, &source_ids, source_id);
+ if (error) {
+ grn_obj_unlink(ctx, &source_ids);
+ grn_obj_unlink(ctx, column_ref);
+ grn_obj_unlink(ctx, column);
+ grn_obj_unlink(ctx, grn_table_ref);
+ DBUG_RETURN(false);
+ }
+ grn_obj_set_info(ctx, column_ref, GRN_INFO_SOURCE, &source_ids);
+ grn_obj_unlink(ctx, &source_ids);
+ grn_obj_unlink(ctx, column_ref);
+ grn_obj_unlink(ctx, column);
+ grn_obj_unlink(ctx, grn_table_ref);
+ error = 0;
+ DBUG_RETURN(true);
+ }
+ error = 0;
+ DBUG_RETURN(false);
+}
+#endif
+
+int ha_mroonga::storage_create_validate_index(TABLE *table)
+{
+ int error = 0;
+ uint i;
+
+ MRN_DBUG_ENTER_METHOD();
+ /* checking if index is used for virtual columns */
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->s->key_info[i];
+ // must be single column key
+ int key_parts = KEY_N_KEY_PARTS(&key_info);
+ if (key_parts != 1) {
+ continue;
+ }
+ Field *field = key_info.key_part[0].field;
+ const char *column_name = field->field_name;
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ if (key_info.algorithm == HA_KEY_ALG_HASH) {
+ continue; // hash index is ok
+ }
+ GRN_LOG(ctx, GRN_LOG_ERROR, "only hash index can be defined for _id");
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, "only hash index can be defined for _id", MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_create_index_table(TABLE *table,
+ const char *grn_table_name,
+ grn_obj *grn_table,
+ MRN_SHARE *tmp_share,
+ KEY *key_info,
+ grn_obj **index_tables,
+ uint i)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ grn_obj *index_type;
+ grn_obj *index_table;
+ grn_obj_flags index_table_flags = GRN_OBJ_PERSISTENT;
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(key_info) > 1;
+
+ if (tmp_share->index_table && tmp_share->index_table[i]) {
+ index_table = grn_ctx_get(ctx,
+ tmp_share->index_table[i],
+ tmp_share->index_table_length[i]);
+ // TODO: add error check
+ index_tables[i] = index_table;
+ DBUG_RETURN(error);
+ }
+
+ if (is_multiple_column_index) {
+ index_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT);
+ } else {
+ Field *field = key_info->key_part[0].field;
+ grn_builtin_type groonga_type = mrn_grn_type_from_field(ctx, field, true);
+ index_type = grn_ctx_at(ctx, groonga_type);
+ }
+ // TODO: Add NULL check for index_type
+
+ int key_alg = key_info->algorithm;
+ if (key_info->flags & HA_FULLTEXT) {
+ index_table_flags |= GRN_OBJ_TABLE_PAT_KEY;
+ error = mrn_change_encoding(ctx, key_info->key_part->field->charset());
+ if (error) {
+ grn_obj_remove(ctx, grn_table);
+ DBUG_RETURN(error);
+ }
+ } else if (key_alg == HA_KEY_ALG_HASH) {
+ index_table_flags |= GRN_OBJ_TABLE_HASH_KEY;
+ } else {
+ index_table_flags |= GRN_OBJ_TABLE_PAT_KEY;
+ }
+
+ {
+ mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
+ index_table = grn_table_create(ctx,
+ index_table_name.c_str(),
+ index_table_name.length(),
+ NULL,
+ index_table_flags,
+ index_type,
+ NULL);
+ }
+ if (ctx->rc) {
+ grn_obj_unlink(ctx, index_type);
+ grn_obj_remove(ctx, grn_table);
+ error = ER_CANT_CREATE_TABLE;
+ my_message(ER_CANT_CREATE_TABLE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ if (key_info->flags & HA_FULLTEXT) {
+ grn_obj *tokenizer = find_tokenizer(tmp_share->key_parser[i],
+ tmp_share->key_parser_length[i]);
+ if (tokenizer) {
+ grn_info_type info_type = GRN_INFO_DEFAULT_TOKENIZER;
+ grn_obj_set_info(ctx, index_table, info_type, tokenizer);
+ grn_obj_unlink(ctx, tokenizer);
+ }
+
+ {
+ grn_obj token_filters;
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, 0);
+ if (find_token_filters(key_info, &token_filters)) {
+ grn_obj_set_info(ctx, index_table,
+ GRN_INFO_TOKEN_FILTERS, &token_filters);
+ }
+ grn_obj_unlink(ctx, &token_filters);
+ }
+ }
+
+ {
+ grn_obj *normalizer = NULL;
+ Field *field = &(key_info->key_part->field[0]);
+ if (key_info->flags & HA_FULLTEXT) {
+ if (should_normalize(field)) {
+ normalizer = find_normalizer(key_info);
+ }
+ } else if (key_alg != HA_KEY_ALG_HASH) {
+ if (!is_multiple_column_index && should_normalize(field)) {
+ normalizer = find_normalizer(key_info);
+ }
+ }
+ if (normalizer) {
+ grn_info_type info_type = GRN_INFO_NORMALIZER;
+ grn_obj_set_info(ctx, index_table, info_type, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+ }
+
+ index_tables[i] = index_table;
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_create_index(TABLE *table, const char *grn_table_name,
+ grn_obj *grn_table, MRN_SHARE *tmp_share,
+ KEY *key_info, grn_obj **index_tables,
+ grn_obj **index_columns, uint i)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ grn_obj *index_table, *index_column;
+ const char *column_name = NULL;
+ int column_name_size = 0;
+
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(key_info) > 1;
+ if (!is_multiple_column_index) {
+ Field *field = key_info->key_part[0].field;
+ column_name = field->field_name;
+ column_name_size = strlen(column_name);
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ // skipping _id virtual column
+ DBUG_RETURN(0);
+ }
+ }
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = storage_create_index_table(table, grn_table_name,
+ grn_table, tmp_share,
+ key_info, index_tables, i);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_obj_flags index_column_flags =
+ GRN_OBJ_COLUMN_INDEX | GRN_OBJ_WITH_POSITION | GRN_OBJ_PERSISTENT;
+ if (is_multiple_column_index) {
+ index_column_flags |= GRN_OBJ_WITH_SECTION;
+ }
+
+ index_table = index_tables[i];
+ const char *index_column_name;
+ if (tmp_share->index_table && tmp_share->index_table[i]) {
+ index_column_name = key_info->name;
+ } else {
+ index_column_name = INDEX_COLUMN_NAME;
+ }
+ index_column = grn_column_create(ctx,
+ index_table,
+ index_column_name,
+ strlen(index_column_name),
+ NULL,
+ index_column_flags,
+ grn_table);
+
+ if (ctx->rc) {
+ grn_obj_remove(ctx, index_table);
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ mrn_change_encoding(ctx, system_charset_info);
+ if (is_multiple_column_index) {
+ if (key_info->flags & HA_FULLTEXT) {
+ grn_obj source_ids;
+ GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR);
+
+ int j, n_key_parts = KEY_N_KEY_PARTS(key_info);
+ for (j = 0; j < n_key_parts; j++) {
+ Field *field = key_info->key_part[j].field;
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+ grn_obj *source_column = grn_obj_column(ctx, grn_table,
+ column_name, column_name_size);
+ grn_id source_id = grn_obj_id(ctx, source_column);
+ GRN_UINT32_PUT(ctx, &source_ids, source_id);
+ grn_obj_unlink(ctx, source_column);
+ }
+ mrn_change_encoding(ctx, key_info->key_part->field->charset());
+ grn_obj_set_info(ctx, index_column, GRN_INFO_SOURCE, &source_ids);
+ grn_obj_unlink(ctx, &source_ids);
+ }
+ } else {
+ grn_obj *column;
+ column = grn_obj_column(ctx, grn_table, column_name, column_name_size);
+ if (column) {
+ grn_obj source_ids;
+ grn_id source_id = grn_obj_id(ctx, column);
+ GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR);
+ GRN_UINT32_PUT(ctx, &source_ids, source_id);
+ mrn_change_encoding(ctx, key_info->key_part->field->charset());
+ grn_obj_set_info(ctx, index_column, GRN_INFO_SOURCE, &source_ids);
+ grn_obj_unlink(ctx, &source_ids);
+ grn_obj_unlink(ctx, column);
+ }
+ }
+ mrn_change_encoding(ctx, system_charset_info);
+
+ if (index_columns) {
+ index_columns[i] = index_column;
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_create_indexes(TABLE *table, const char *grn_table_name,
+ grn_obj *grn_table, MRN_SHARE *tmp_share)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ uint n_keys = table->s->keys;
+ uint i;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, n_keys);
+ for (i = 0; i < n_keys; i++) {
+ index_tables[i] = NULL;
+ if (i == table->s->primary_key) {
+ continue; // pkey is already handled
+ }
+ KEY *key_info = &table->s->key_info[i];
+ if (tmp_share->disable_keys && !(key_info->flags & HA_NOSAME)) {
+ continue; // key is disabled
+ }
+ if ((error = storage_create_index(table, grn_table_name, grn_table,
+ tmp_share, key_info,
+ index_tables, NULL, i))) {
+ break;
+ }
+ }
+ if (error) {
+ while (true) {
+ if (index_tables[i]) {
+ grn_obj_remove(ctx, index_tables[i]);
+ }
+ if (!i)
+ break;
+ i--;
+ }
+ }
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::ensure_database_open(const char *name)
+{
+ int error;
+
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_obj *db;
+ error = mrn_db_manager->open(name, &db);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_ctx_use(ctx, db);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::ensure_database_remove(const char *name)
+{
+ int error;
+
+ MRN_DBUG_ENTER_METHOD();
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ mrn_db_manager->close(name);
+
+ mrn::PathMapper mapper(name);
+ remove_related_files(mapper.db_path());
+
+ DBUG_RETURN(error);
+}
+
+
+int ha_mroonga::create(const char *name, TABLE *table, HA_CREATE_INFO *info)
+{
+ int error = 0;
+ MRN_SHARE *tmp_share;
+ MRN_DBUG_ENTER_METHOD();
+ /* checking data type of virtual columns */
+
+ if (!(tmp_share = mrn_get_share(name, table, &error)))
+ DBUG_RETURN(error);
+
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(ha_thd(), false);
+ if (slot_data && slot_data->disable_keys_create_info == info) {
+ tmp_share->disable_keys = true;
+ }
+
+ if (tmp_share->wrapper_mode)
+ {
+ error = wrapper_create(name, table, info, tmp_share);
+ } else {
+ error = storage_create(name, table, info, tmp_share);
+ }
+
+ if (error) {
+ mrn_free_long_term_share(tmp_share->long_term_share);
+ tmp_share->long_term_share = NULL;
+ }
+ mrn_free_share(tmp_share);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_open(const char *name, int mode, uint test_if_locked)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+
+ if (thd_sql_command(ha_thd()) == SQLCOM_REPAIR) {
+ error = ensure_database_remove(name);
+ if (error)
+ DBUG_RETURN(error);
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+ grn_table = NULL;
+ grn_index_tables = NULL;
+ grn_index_columns = NULL;
+ } else {
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = open_table(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = wrapper_open_indexes(name);
+ if (error) {
+ grn_obj_unlink(ctx, grn_table);
+ grn_table = NULL;
+ DBUG_RETURN(error);
+ }
+ }
+
+ init_alloc_root(&mem_root, 1024, 0, MYF(0));
+ wrap_key_info = mrn_create_key_info_for_table(share, table, &error);
+ if (error)
+ DBUG_RETURN(error);
+ base_key_info = table->key_info;
+
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (!is_clone)
+ {
+ if (!(wrap_handler =
+ share->hton->create(share->hton, table->s, &mem_root)))
+ {
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ wrap_handler->init();
+#ifdef MRN_HANDLER_HAVE_SET_HA_SHARE_REF
+ wrap_handler->set_ha_share_ref(&table->s->ha_share);
+#endif
+ error = wrap_handler->ha_open(table, name, mode, test_if_locked);
+ } else {
+#ifdef MRN_HANDLER_CLONE_NEED_NAME
+ if (!(wrap_handler = parent_for_clone->wrap_handler->clone(name,
+ mem_root_for_clone)))
+#else
+ if (!(wrap_handler = parent_for_clone->wrap_handler->clone(
+ mem_root_for_clone)))
+#endif
+ {
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ }
+ ref_length = wrap_handler->ref_length;
+ key_used_on_scan = wrap_handler->key_used_on_scan;
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ init();
+ wrapper_overwrite_index_bits();
+ wrapper_set_keys_in_use();
+
+ pk_keypart_map = make_prev_keypart_map(
+ KEY_N_KEY_PARTS(&(table->key_info[table_share->primary_key])));
+
+ if (error)
+ {
+ grn_obj_unlink(ctx, grn_table);
+ grn_table = NULL;
+ // TODO: free indexes.
+
+ delete wrap_handler;
+ wrap_handler = NULL;
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_open_indexes(const char *name)
+{
+ int error;
+
+ MRN_DBUG_ENTER_METHOD();
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ uint n_keys = table->s->keys;
+ uint n_primary_keys = table->s->primary_key;
+ if (n_keys > 0) {
+ // TODO: reduce allocate memories. We only need just
+ // for HA_KEY_ALG_FULLTEXT keys.
+ grn_index_tables = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys);
+ grn_index_columns = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys);
+ } else {
+ grn_index_tables = grn_index_columns = NULL;
+ }
+
+ mrn::PathMapper mapper(name);
+ uint i = 0;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->s->key_info[i];
+
+ grn_index_tables[i] = NULL;
+ grn_index_columns[i] = NULL;
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ if (i == n_primary_keys) {
+ continue;
+ }
+
+ mrn::IndexTableName index_table_name(mapper.table_name(), key_info.name);
+ grn_index_tables[i] = grn_ctx_get(ctx,
+ index_table_name.c_str(),
+ index_table_name.length());
+ if (ctx->rc) {
+ DBUG_PRINT("info",
+ ("mroonga: sql_command=%u", thd_sql_command(ha_thd())));
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error;
+ }
+
+ grn_index_columns[i] = grn_obj_column(ctx, grn_index_tables[i],
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME));
+ if (!grn_index_columns[i]) {
+ /* just for backward compatibility before 1.0. */
+ Field *field = key_info.key_part[0].field;
+ grn_index_columns[i] = grn_obj_column(ctx, grn_index_tables[i],
+ field->field_name,
+ strlen(field->field_name));
+ }
+
+ if (ctx->rc) {
+ DBUG_PRINT("info",
+ ("mroonga: sql_command=%u", thd_sql_command(ha_thd())));
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ grn_obj_unlink(ctx, grn_index_tables[i]);
+ goto error;
+ }
+ }
+
+ grn_bulk_space(ctx, &key_buffer, table->key_info->key_length);
+
+error:
+ if (error) {
+ while (i-- > 0) {
+ grn_obj *index_column = grn_index_columns[i];
+ if (index_column) {
+ grn_obj_unlink(ctx, index_column);
+ }
+ grn_obj *index_table = grn_index_tables[i];
+ if (index_table) {
+ grn_obj_unlink(ctx, index_table);
+ }
+ }
+ free(grn_index_columns);
+ free(grn_index_tables);
+ grn_index_columns = NULL;
+ grn_index_tables = NULL;
+ }
+
+ DBUG_RETURN(error);
+}
+
+void ha_mroonga::wrapper_overwrite_index_bits()
+{
+ uint i, j;
+ longlong table_option = table_flags();
+ MRN_DBUG_ENTER_METHOD();
+ table_share->keys_for_keyread.clear_all();
+ for (i = 0; i < table_share->fields; i++)
+ {
+ Field *field = table_share->field[i];
+ field->part_of_key.clear_all();
+ field->part_of_key_not_clustered.clear_all();
+ field->part_of_sortkey.clear_all();
+ }
+ for (i = 0; i < table_share->keys; i++) {
+ KEY *key_info = &table->s->key_info[i];
+ KEY_PART_INFO *key_part = key_info->key_part;
+ for (j = 0 ; j < KEY_N_KEY_PARTS(key_info); key_part++, j++)
+ {
+ Field *field = key_part->field;
+ if (field->key_length() == key_part->length &&
+ !(field->flags & BLOB_FLAG))
+ {
+ if (index_flags(i, j, 0) & HA_KEYREAD_ONLY)
+ {
+ table_share->keys_for_keyread.set_bit(i);
+ field->part_of_key.set_bit(i);
+ field->part_of_key_not_clustered.set_bit(i);
+ }
+ if (index_flags(i, j, 1) & HA_READ_ORDER)
+ field->part_of_sortkey.set_bit(i);
+ }
+ if (i == table_share->primary_key &&
+ (table_option & HA_PRIMARY_KEY_IN_READ_INDEX))
+ {
+ if (field->key_length() == key_part->length &&
+ !(field->flags & BLOB_FLAG))
+ field->part_of_key = table_share->keys_in_use;
+ if (field->part_of_sortkey.is_set(i))
+ field->part_of_sortkey = table_share->keys_in_use;
+ }
+ }
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::storage_open(const char *name, int mode, uint test_if_locked)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = open_table(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = storage_open_columns();
+ if (error) {
+ grn_obj_unlink(ctx, grn_table);
+ grn_table = NULL;
+ DBUG_RETURN(error);
+ }
+
+ error = storage_open_indexes(name);
+ if (error) {
+ // TODO: free grn_columns and set NULL;
+ grn_obj_unlink(ctx, grn_table);
+ grn_table = NULL;
+ DBUG_RETURN(error);
+ }
+
+ storage_set_keys_in_use();
+
+ ref_length = sizeof(grn_id);
+ DBUG_RETURN(0);
+}
+
+void ha_mroonga::update_grn_table_is_referenced()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_table_is_referenced = false;
+
+ grn_table_cursor *cursor;
+ int flags = GRN_CURSOR_BY_ID | GRN_CURSOR_ASCENDING;;
+ cursor = grn_table_cursor_open(ctx, grn_ctx_db(ctx),
+ NULL, 0,
+ NULL, 0,
+ 0, -1, flags);
+ if (cursor) {
+ grn_id id;
+ grn_id grn_table_id;
+
+ grn_table_id = grn_obj_id(ctx, grn_table);
+ while ((id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL) {
+ grn_obj *object;
+ grn_id range = GRN_ID_NIL;
+
+ object = grn_ctx_at(ctx, id);
+ if (!object) {
+ ctx->rc = GRN_SUCCESS;
+ continue;
+ }
+
+ switch (object->header.type) {
+ case GRN_COLUMN_FIX_SIZE:
+ case GRN_COLUMN_VAR_SIZE:
+ range = grn_obj_get_range(ctx, object);
+ break;
+ default:
+ break;
+ }
+ grn_obj_unlink(ctx, object);
+
+ if (range == grn_table_id) {
+ grn_table_is_referenced = true;
+ break;
+ }
+ }
+
+ grn_table_cursor_close(ctx, cursor);
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::open_table(const char *name)
+{
+ int error;
+ MRN_DBUG_ENTER_METHOD();
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ mrn::PathMapper mapper(name);
+ grn_table = grn_ctx_get(ctx, mapper.table_name(), strlen(mapper.table_name()));
+ if (ctx->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ if (!grn_table) {
+ error = ER_CANT_OPEN_FILE;
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "mroonga: failed to open table: <%s>",
+ mapper.table_name());
+ my_message(error, error_message, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ update_grn_table_is_referenced();
+
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_open_columns(void)
+{
+ int error;
+ MRN_DBUG_ENTER_METHOD();
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ int n_columns = table->s->fields;
+ grn_columns = (grn_obj **)malloc(sizeof(grn_obj *) * n_columns);
+ grn_column_ranges = (grn_obj **)malloc(sizeof(grn_obj *) * n_columns);
+ if (table_share->blob_fields)
+ {
+ if (blob_buffers)
+ {
+ delete [] blob_buffers;
+ }
+ if (!(blob_buffers = new String[n_columns]))
+ {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ }
+
+ int i;
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+ if (table_share->blob_fields)
+ {
+ blob_buffers[i].set_charset(field->charset());
+ }
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ grn_columns[i] = NULL;
+ grn_column_ranges[i] = NULL;
+ continue;
+ }
+
+ grn_columns[i] = grn_obj_column(ctx, grn_table,
+ column_name, column_name_size);
+ grn_id range_id = grn_obj_get_range(ctx, grn_columns[i]);
+ grn_column_ranges[i] = grn_ctx_at(ctx, range_id);
+ if (ctx->rc) {
+ // TODO: free grn_columns and set NULL;
+ int error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_open_indexes(const char *name)
+{
+ int error;
+
+ MRN_DBUG_ENTER_METHOD();
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ uint n_keys = table->s->keys;
+ uint pkey_nr = table->s->primary_key;
+ if (n_keys > 0) {
+ grn_index_tables = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys);
+ grn_index_columns = (grn_obj **)malloc(sizeof(grn_obj *) * n_keys);
+ key_id = (grn_id *)malloc(sizeof(grn_id) * n_keys);
+ del_key_id = (grn_id *)malloc(sizeof(grn_id) * n_keys);
+ } else {
+ grn_index_tables = grn_index_columns = NULL;
+ key_id = NULL;
+ del_key_id = NULL;
+ }
+
+ mrn::PathMapper mapper(name);
+ uint i, j;
+ for (i = 0; i < n_keys; i++) {
+ if (i == pkey_nr) {
+ grn_index_tables[i] = grn_index_columns[i] = NULL;
+ continue;
+ }
+
+ KEY key_info = table->s->key_info[i];
+ if (KEY_N_KEY_PARTS(&key_info) > 1) {
+ KEY_PART_INFO *key_part = key_info.key_part;
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ bitmap_set_bit(&multiple_column_key_bitmap,
+ key_part[j].field->field_index);
+ }
+ }
+
+ MRN_SHARE *tmp_share;
+ tmp_share = mrn_get_share(name, table, &error);
+ if (tmp_share->index_table[i]) {
+ grn_index_tables[i] = grn_ctx_get(ctx,
+ tmp_share->index_table[i],
+ tmp_share->index_table_length[i]);
+ if (ctx->rc == GRN_SUCCESS) {
+ grn_index_columns[i] = grn_obj_column(ctx,
+ grn_index_tables[i],
+ key_info.name,
+ strlen(key_info.name));
+ }
+ } else {
+ mrn::IndexTableName index_table_name(mapper.table_name(), key_info.name);
+ grn_index_tables[i] = grn_ctx_get(ctx,
+ index_table_name.c_str(),
+ index_table_name.length());
+ if (ctx->rc == GRN_SUCCESS) {
+ grn_index_columns[i] = grn_obj_column(ctx,
+ grn_index_tables[i],
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME));
+ if (!grn_index_columns[i]) {
+ /* just for backward compatibility before 1.0. */
+ Field *field = key_info.key_part[0].field;
+ grn_index_columns[i] = grn_obj_column(ctx, grn_index_tables[i],
+ field->field_name,
+ strlen(field->field_name));
+ }
+ }
+ }
+ mrn_free_share(tmp_share);
+ if (ctx->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error;
+ }
+
+ if (ctx->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error;
+ }
+ }
+
+error:
+ if (error) {
+ if (i) {
+ while (true) {
+ grn_obj *index_column = grn_index_columns[i];
+ if (index_column) {
+ grn_obj_unlink(ctx, index_column);
+ }
+ grn_obj *index_table = grn_index_tables[i];
+ if (index_table) {
+ grn_obj_unlink(ctx, index_table);
+ }
+ if (!i)
+ break;
+ i--;
+ }
+ }
+ free(key_id);
+ free(del_key_id);
+ free(grn_index_columns);
+ free(grn_index_tables);
+ key_id = NULL;
+ del_key_id = NULL;
+ grn_index_columns = NULL;
+ grn_index_tables = NULL;
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::open(const char *name, int mode, uint test_if_locked)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!(share = mrn_get_share(name, table, &error)))
+ DBUG_RETURN(error);
+ thr_lock_data_init(&share->lock,&thr_lock_data,NULL);
+
+ if (bitmap_init(&multiple_column_key_bitmap, NULL, table->s->fields, false))
+ {
+ mrn_free_share(share);
+ share = NULL;
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+
+ if (share->wrapper_mode)
+ {
+ error = wrapper_open(name, mode, test_if_locked);
+ } else {
+ error = storage_open(name, mode, test_if_locked);
+ }
+
+ if (error)
+ {
+ bitmap_free(&multiple_column_key_bitmap);
+ mrn_free_share(share);
+ share = NULL;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_close()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_HAVE_HA_CLOSE
+ error = wrap_handler->ha_close();
+#else
+ error = wrap_handler->close();
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ delete wrap_handler;
+ wrap_handler = NULL;
+ if (wrap_key_info)
+ {
+ my_free(wrap_key_info, MYF(0));
+ wrap_key_info = NULL;
+ }
+ base_key_info = NULL;
+ free_root(&mem_root, MYF(0));
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_close()
+{
+ MRN_DBUG_ENTER_METHOD();
+ grn_obj_unlink(ctx, grn_table);
+ // TODO: unlink elements
+ free(grn_columns);
+ // TODO: unlink elements
+ free(grn_column_ranges);
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::close()
+{
+ int error = 0;
+ THD *thd = ha_thd();
+ MRN_DBUG_ENTER_METHOD();
+
+ clear_indexes();
+
+ if (share->wrapper_mode)
+ {
+ error = wrapper_close();
+ } else {
+ error = storage_close();
+ }
+
+ if (is_temporary_table_name(share->table_name)) {
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_table_share;
+ int tmp_error;
+ /* no need to decode */
+ mrn::PathMapper mapper(share->table_name);
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(mapper.db_name(), strlen(mapper.db_name()),
+ mapper.mysql_table_name(),
+ strlen(mapper.mysql_table_name()),
+ mapper.mysql_table_name(),
+ TL_WRITE);
+#else
+ table_list.init_one_table(mapper.db_name(), mapper.mysql_table_name(),
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(NULL);
+ tmp_table_share =
+ mrn_create_tmp_table_share(&table_list, share->table_name, &tmp_error);
+ mrn_open_mutex_unlock(NULL);
+ if (!tmp_table_share) {
+ error = tmp_error;
+ } else if ((tmp_error = alter_share_add(share->table_name,
+ tmp_table_share))) {
+ error = tmp_error;
+ mrn_open_mutex_lock(NULL);
+ mrn_free_tmp_table_share(tmp_table_share);
+ mrn_open_mutex_unlock(NULL);
+ }
+ }
+ bitmap_free(&multiple_column_key_bitmap);
+ mrn_free_share(share);
+ share = NULL;
+ is_clone = false;
+ if (
+ thd &&
+ thd_sql_command(thd) == SQLCOM_FLUSH
+ ) {
+ /* flush tables */
+ mrn::Lock lock(&mrn_open_tables_mutex);
+ if (!mrn_open_tables.records)
+ {
+ int tmp_error = mrn_db_manager->clear();
+ if (tmp_error)
+ error = tmp_error;
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_delete_table(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name)
+{
+ int error = 0;
+ handler *hnd;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(tmp_share, tmp_share->table_share);
+ if (!(hnd =
+ tmp_share->hton->create(tmp_share->hton, tmp_share->table_share,
+ current_thd->mem_root)))
+ {
+ MRN_SET_BASE_SHARE_KEY(tmp_share, tmp_share->table_share);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ hnd->init();
+ MRN_SET_BASE_SHARE_KEY(tmp_share, tmp_share->table_share);
+
+ if ((error = hnd->ha_delete_table(name)))
+ {
+ delete hnd;
+ DBUG_RETURN(error);
+ }
+
+ error = wrapper_delete_index(name, tmp_share, table_name);
+
+ delete hnd;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_delete_index(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ TABLE_SHARE *tmp_table_share = tmp_share->table_share;
+
+ uint i;
+ for (i = 0; i < tmp_table_share->keys; i++) {
+ error = drop_index(tmp_share, i);
+ if (error) {
+ DBUG_RETURN(error);
+ }
+ }
+
+ grn_obj *table = grn_ctx_get(ctx, table_name, strlen(table_name));
+ if (!ctx->rc) {
+ grn_obj_remove(ctx, table);
+ }
+ if (ctx->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_delete_table(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name)
+{
+ int error = 0;
+ TABLE_SHARE *tmp_table_share = tmp_share->table_share;
+ MRN_DBUG_ENTER_METHOD();
+
+ error = ensure_database_open(name);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ uint i;
+ for (i = 0; i < tmp_table_share->keys; i++) {
+ error = drop_index(tmp_share, i);
+ if (error) {
+ DBUG_RETURN(error);
+ }
+ }
+
+ grn_obj *table_obj = grn_ctx_get(ctx, table_name, strlen(table_name));
+ if (!ctx->rc) {
+ grn_obj_remove(ctx, table_obj);
+ }
+ if (ctx->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::delete_table(const char *name)
+{
+ int error = 0;
+ THD *thd = ha_thd();
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_table_share = NULL;
+ TABLE tmp_table;
+ MRN_SHARE *tmp_share;
+ st_mrn_alter_share *alter_share, *tmp_alter_share;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::PathMapper mapper(name);
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, false);
+ if (slot_data && slot_data->first_alter_share)
+ {
+ tmp_alter_share = NULL;
+ alter_share = slot_data->first_alter_share;
+ while (alter_share)
+ {
+ if (!strcmp(alter_share->path, name))
+ {
+ /* found */
+ tmp_table_share = alter_share->alter_share;
+ if (tmp_alter_share)
+ tmp_alter_share->next = alter_share->next;
+ else
+ slot_data->first_alter_share = alter_share->next;
+ free(alter_share);
+ break;
+ }
+ tmp_alter_share = alter_share;
+ alter_share = alter_share->next;
+ }
+ }
+ if (!tmp_table_share)
+ {
+ mrn::PathMapper mapper(name);
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(mapper.db_name(), strlen(mapper.db_name()),
+ mapper.mysql_table_name(),
+ strlen(mapper.mysql_table_name()),
+ mapper.mysql_table_name(),
+ TL_WRITE);
+#else
+ table_list.init_one_table(mapper.db_name(), mapper.mysql_table_name(),
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(NULL);
+ tmp_table_share = mrn_create_tmp_table_share(&table_list, name, &error);
+ mrn_open_mutex_unlock(NULL);
+ if (!tmp_table_share) {
+ DBUG_RETURN(error);
+ }
+ }
+ tmp_table.s = tmp_table_share;
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ tmp_table.part_info = NULL;
+#endif
+ if (!(tmp_share = mrn_get_share(name, &tmp_table, &error)))
+ {
+ mrn_open_mutex_lock(NULL);
+ mrn_free_tmp_table_share(tmp_table_share);
+ mrn_open_mutex_unlock(NULL);
+ DBUG_RETURN(error);
+ }
+
+ if (tmp_share->wrapper_mode)
+ {
+ error = wrapper_delete_table(name, tmp_share, mapper.table_name());
+ } else {
+ error = storage_delete_table(name, tmp_share, mapper.table_name());
+ }
+
+ if (!error) {
+ mrn_free_long_term_share(tmp_share->long_term_share);
+ tmp_share->long_term_share = NULL;
+ }
+ mrn_free_share(tmp_share);
+ mrn_open_mutex_lock(NULL);
+ mrn_free_tmp_table_share(tmp_table_share);
+ mrn_open_mutex_unlock(NULL);
+ if (is_temporary_table_name(name)) {
+ mrn_db_manager->drop(name);
+ }
+ DBUG_RETURN(error);
+}
+
+void ha_mroonga::wrapper_set_keys_in_use()
+{
+ uint i, j;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::AutoIncrementValueLock lock_(table_share);
+ table_share->keys_in_use.set_prefix(table_share->keys);
+ share->disable_keys = false;
+ for (i = 0; i < table_share->keys; i++) {
+ j = share->wrap_key_nr[i];
+ if (j < MAX_KEY) {
+ if (!share->wrap_table_share->keys_in_use.is_set(j)) {
+ /* copy bitmap */
+ table_share->keys_in_use.clear_bit(i);
+ share->disable_keys = true;
+ }
+ } else {
+ if (!grn_index_tables || !grn_index_tables[i]) {
+ /* disabled */
+ table_share->keys_in_use.clear_bit(i);
+ share->disable_keys = true;
+ }
+ }
+ }
+ table_share->keys_for_keyread.set_prefix(table_share->keys);
+ table_share->keys_for_keyread.intersect(table_share->keys_in_use);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_set_keys_in_use()
+{
+ uint i;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::AutoIncrementValueLock lock_(table_share);
+ table_share->keys_in_use.set_prefix(table_share->keys);
+ share->disable_keys = false;
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table_share->primary_key) {
+ continue;
+ }
+ if (!grn_index_tables[i]) {
+ /* disabled */
+ table_share->keys_in_use.clear_bit(i);
+ DBUG_PRINT("info", ("mroonga: key %u disabled", i));
+ share->disable_keys = true;
+ }
+ }
+ table_share->keys_for_keyread.set_prefix(table_share->keys);
+ table_share->keys_for_keyread.intersect(table_share->keys_in_use);
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::wrapper_info(uint flag)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->info(flag);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (flag & HA_STATUS_ERRKEY) {
+ errkey = wrap_handler->errkey;
+ memcpy(dup_ref, wrap_handler->dup_ref, wrap_handler->ref_length);
+ }
+ if (flag & HA_STATUS_TIME) {
+ stats.update_time = wrap_handler->stats.update_time;
+ }
+ if (flag & HA_STATUS_CONST) {
+ stats.max_data_file_length = wrap_handler->stats.max_data_file_length;
+ stats.create_time = wrap_handler->stats.create_time;
+ stats.block_size = wrap_handler->stats.block_size;
+ wrapper_set_keys_in_use();
+ }
+ if (flag & HA_STATUS_VARIABLE) {
+ stats.data_file_length = wrap_handler->stats.data_file_length;
+ stats.index_file_length = wrap_handler->stats.index_file_length;
+ stats.records = wrap_handler->stats.records;
+ stats.mean_rec_length = wrap_handler->stats.mean_rec_length;
+ stats.check_time = wrap_handler->stats.check_time;
+ }
+ if (flag & HA_STATUS_AUTO) {
+ stats.auto_increment_value = wrap_handler->stats.auto_increment_value;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_info(uint flag)
+{
+ MRN_DBUG_ENTER_METHOD();
+ mrn_change_encoding(ctx, NULL);
+
+ if (flag & (HA_STATUS_ERRKEY | HA_STATUS_NO_LOCK)) {
+ errkey = dup_key;
+ }
+
+ if ((flag & HA_STATUS_AUTO) && table->found_next_number_field) {
+ THD *thd = ha_thd();
+ ulonglong nb_reserved_values;
+ bool next_number_field_is_null = !table->next_number_field;
+ mrn::ExternalLock mrn_external_lock(ha_thd(), this,
+ mrn_lock_type == F_UNLCK ?
+ F_RDLCK : F_UNLCK);
+ if (mrn_external_lock.error()) {
+ DBUG_RETURN(mrn_external_lock.error());
+ }
+ if (next_number_field_is_null) {
+ table->next_number_field = table->found_next_number_field;
+ }
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ {
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ unsigned long auto_increment_offset, auto_increment_increment;
+ MRN_THD_GET_AUTOINC(thd, &auto_increment_offset,
+ &auto_increment_increment);
+ storage_get_auto_increment(auto_increment_offset,
+ auto_increment_increment, 1,
+ &stats.auto_increment_value,
+ &nb_reserved_values);
+ }
+ if (next_number_field_is_null) {
+ table->next_number_field = NULL;
+ }
+ }
+
+ if (flag & HA_STATUS_CONST) {
+ storage_set_keys_in_use();
+ }
+
+ if (flag & HA_STATUS_VARIABLE) {
+ storage_info_variable();
+ }
+
+ DBUG_RETURN(0);
+}
+
+void ha_mroonga::storage_info_variable()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ storage_info_variable_records();
+ storage_info_variable_data_file_length();
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_info_variable_records()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ stats.records = grn_table_size(ctx, grn_table);
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_info_variable_data_file_length()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ stats.data_file_length = 0;
+ stats.data_file_length += file_size(grn_obj_path(ctx, grn_table));
+ grn_hash *columns = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY);
+ grn_table_columns(ctx, grn_table, NULL, 0, (grn_obj *)columns);
+ /* grn_id id __attribute__((unused)); */
+ grn_id *column_id;
+ GRN_HASH_EACH(ctx, columns, id, &column_id, NULL, NULL, {
+ grn_obj *column = grn_ctx_at(ctx, *column_id);
+ stats.data_file_length += file_size(grn_obj_path(ctx, column));
+ grn_obj_unlink(ctx, column);
+ });
+ grn_hash_close(ctx, columns);
+
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::info(uint flag)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_info(flag);
+ } else {
+ error = storage_info(flag);
+ }
+ DBUG_RETURN(error);
+}
+
+uint ha_mroonga::wrapper_lock_count() const
+{
+ uint lock_count;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ lock_count = wrap_handler->lock_count();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(lock_count);
+}
+
+uint ha_mroonga::storage_lock_count() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(1);
+}
+
+uint ha_mroonga::lock_count() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_lock_count();
+ } else {
+ error = storage_lock_count();
+ }
+ DBUG_RETURN(error);
+}
+
+THR_LOCK_DATA **ha_mroonga::wrapper_store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ to = wrap_handler->store_lock(thd, to, lock_type);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(to);
+}
+
+THR_LOCK_DATA **ha_mroonga::storage_store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (lock_type != TL_IGNORE && thr_lock_data.type == TL_UNLOCK) {
+ if (!thd_in_lock_tables(thd)) {
+ if (lock_type == TL_READ_NO_INSERT) {
+ lock_type = TL_READ;
+ } else if (lock_type >= TL_WRITE_CONCURRENT_INSERT &&
+ lock_type <= TL_WRITE && !thd_tablespace_op(thd)) {
+ lock_type = TL_WRITE_ALLOW_WRITE;
+ }
+ }
+
+ thr_lock_data.type = lock_type;
+ }
+ *to++ = &thr_lock_data;
+ DBUG_RETURN(to);
+}
+
+THR_LOCK_DATA **ha_mroonga::store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: lock_type=%s",
+ mrn_inspect_thr_lock_type(lock_type)));
+ if (share->wrapper_mode)
+ to = wrapper_store_lock(thd, to, lock_type);
+ else
+ to = storage_store_lock(thd, to, lock_type);
+ DBUG_RETURN(to);
+}
+
+int ha_mroonga::wrapper_external_lock(THD *thd, int lock_type)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_external_lock(thd, lock_type);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_external_lock(THD *thd, int lock_type)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::external_lock(THD *thd, int lock_type)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ mrn_lock_type = lock_type;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_external_lock(thd, lock_type);
+ } else {
+ error = storage_external_lock(thd, lock_type);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_rnd_init(bool scan)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_rnd_init(scan);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_rnd_init(bool scan)
+{
+ MRN_DBUG_ENTER_METHOD();
+ mrn_change_encoding(ctx, NULL);
+ cursor = grn_table_cursor_open(ctx, grn_table, NULL, 0, NULL, 0, 0, -1, 0);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::rnd_init(bool scan)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_rnd_init(scan);
+ } else {
+ error = storage_rnd_init(scan);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_rnd_end()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_rnd_end();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_rnd_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::rnd_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_rnd_end();
+ } else {
+ error = storage_rnd_end();
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_rnd_next(uchar *buf)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_RND_NEXT
+ error = wrap_handler->ha_rnd_next(buf);
+#else
+ error = wrap_handler->rnd_next(buf);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_rnd_next(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::rnd_next(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_rnd_next(buf);
+ } else {
+ error = storage_rnd_next(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_rnd_pos(uchar *buf, uchar *pos)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_HAVE_HA_RND_POS
+ error = wrap_handler->ha_rnd_pos(buf, pos);
+#else
+ error = wrap_handler->rnd_pos(buf, pos);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_rnd_pos(uchar *buf, uchar *pos)
+{
+ MRN_DBUG_ENTER_METHOD();
+ record_id = *((grn_id*) pos);
+ storage_store_fields(buf, record_id);
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::rnd_pos(uchar *buf, uchar *pos)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_rnd_pos(buf, pos);
+ } else {
+ error = storage_rnd_pos(buf, pos);
+ }
+ DBUG_RETURN(error);
+}
+
+void ha_mroonga::wrapper_position(const uchar *record)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->ref = ref;
+ wrap_handler->position(record);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_position(const uchar *record)
+{
+ MRN_DBUG_ENTER_METHOD();
+ memcpy(ref, &record_id, sizeof(grn_id));
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::position(const uchar *record)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ wrapper_position(record);
+ else
+ storage_position(record);
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::generic_extra(enum ha_extra_function operation)
+{
+ MRN_DBUG_ENTER_METHOD();
+ switch (operation) {
+ case HA_EXTRA_IGNORE_DUP_KEY:
+ ignoring_duplicated_key = true;
+ break;
+ case HA_EXTRA_NO_IGNORE_DUP_KEY:
+ ignoring_duplicated_key = false;
+ break;
+ case HA_EXTRA_WRITE_CAN_REPLACE:
+ replacing_ = true;
+ break;
+ case HA_EXTRA_WRITE_CANNOT_REPLACE:
+ replacing_ = false;
+ break;
+ case HA_EXTRA_INSERT_WITH_UPDATE:
+ inserting_with_update = true;
+ break;
+ case HA_EXTRA_KEYREAD:
+ ignoring_no_key_columns = true;
+ break;
+ case HA_EXTRA_NO_KEYREAD:
+ ignoring_no_key_columns = false;
+ break;
+ default:
+ break;
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::wrapper_extra(enum ha_extra_function operation)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->extra(operation);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_extra(enum ha_extra_function operation)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::extra(enum ha_extra_function operation)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info",
+ ("mroonga: this=%p; extra-operation=%s",
+ this, mrn_inspect_extra_function(operation)));
+ if (share->wrapper_mode) {
+ if ((error = wrapper_extra(operation)))
+ DBUG_RETURN(error);
+ } else {
+ if ((error = storage_extra(operation)))
+ DBUG_RETURN(error);
+ }
+ error = generic_extra(operation);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_extra_opt(enum ha_extra_function operation,
+ ulong cache_size)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->extra_opt(operation, cache_size);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_extra_opt(enum ha_extra_function operation,
+ ulong cache_size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::extra_opt(enum ha_extra_function operation, ulong cache_size)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ if ((error = wrapper_extra_opt(operation, cache_size)))
+ DBUG_RETURN(error);
+ } else {
+ if ((error = storage_extra_opt(operation, cache_size)))
+ DBUG_RETURN(error);
+ }
+ error = generic_extra(operation);
+ DBUG_RETURN(error);
+}
+
+bool ha_mroonga::wrapper_is_target_index(KEY *key_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool target_index =
+ (key_info->algorithm == HA_KEY_ALG_FULLTEXT) || mrn_is_geo_key(key_info);
+ DBUG_PRINT("info", ("mroonga: %s", target_index ? "true" : "false"));
+ DBUG_RETURN(target_index);
+}
+
+bool ha_mroonga::wrapper_have_target_index()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_target_index = false;
+
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (wrapper_is_target_index(&key_info)) {
+ have_target_index = true;
+ break;
+ }
+ }
+
+ DBUG_PRINT("info", ("mroonga: %s", have_target_index ? "true" : "false"));
+ DBUG_RETURN(have_target_index);
+}
+
+int ha_mroonga::wrapper_write_row(uchar *buf)
+{
+ int error = 0;
+ THD *thd = ha_thd();
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ tmp_disable_binlog(thd);
+ error = wrap_handler->ha_write_row(buf);
+ insert_id_for_cur_row = wrap_handler->insert_id_for_cur_row;
+ reenable_binlog(thd);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ if (!error && wrapper_have_target_index()) {
+ error = wrapper_write_row_index(buf);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_write_row_index(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ mrn_change_encoding(ctx, NULL);
+ GRN_BULK_REWIND(&key_buffer);
+ grn_bulk_space(ctx, &key_buffer, table->key_info->key_length);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key_buffer)),
+ buf,
+ &(table->key_info[table_share->primary_key]),
+ table->key_info[table_share->primary_key].key_length);
+
+ int added;
+ grn_id record_id;
+ record_id = grn_table_add(ctx, grn_table,
+ GRN_TEXT_VALUE(&key_buffer),
+ GRN_TEXT_LEN(&key_buffer),
+ &added);
+ if (record_id == GRN_ID_NIL) {
+ DBUG_PRINT("info", ("mroonga: failed to add a new record into groonga"));
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to add a new record into groonga: key=<%.*s>",
+ (int)GRN_TEXT_LEN(&key_buffer),
+ GRN_TEXT_VALUE(&key_buffer));
+ error = ER_ERROR_ON_WRITE;
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN, error,
+ error_message);
+ DBUG_RETURN(0);
+ }
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ continue;
+ }
+
+ uint j;
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+
+ if (field->is_null())
+ continue;
+
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ goto err;
+ error = generic_store_bulk(field, &new_value_buffer);
+ if (error) {
+ my_message(error,
+ "mroonga: wrapper: "
+ "failed to get new value for updating index.",
+ MYF(0));
+ goto err;
+ }
+
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, j + 1,
+ NULL, &new_value_buffer);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+ }
+err:
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_write_row(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ THD *thd = ha_thd();
+ int i;
+ uint j;
+ int n_columns = table->s->fields;
+
+ if (table->next_number_field && buf == table->record[0])
+ {
+ if ((error = update_auto_increment()))
+ DBUG_RETURN(error);
+ }
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+ const char *column_name = field->field_name;
+
+ if (field->is_null()) continue;
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, MRN_GET_ERR_MSG(WARN_DATA_TRUNCATED),
+ MRN_COLUMN_NAME_ID,
+ MRN_GET_CURRENT_ROW_FOR_WARNING(thd));
+ if (MRN_ABORT_ON_WARNING(thd)) {
+ DBUG_RETURN(ER_DATA_TOO_LONG);
+ }
+ }
+ }
+
+ char *pkey;
+ int pkey_size;
+ uint pkey_nr;
+ pkey_nr = table->s->primary_key;
+ GRN_BULK_REWIND(&key_buffer);
+ if (pkey_nr == MAX_INDEXES) {
+ pkey = NULL;
+ pkey_size = 0;
+ } else {
+ KEY key_info = table->key_info[pkey_nr];
+ if (KEY_N_KEY_PARTS(&key_info) == 1) {
+ Field *pkey_field = key_info.key_part[0].field;
+ error = mrn_change_encoding(ctx, pkey_field->charset());
+ if (error) {
+ DBUG_RETURN(error);
+ }
+ generic_store_bulk(pkey_field, &key_buffer);
+ pkey = GRN_TEXT_VALUE(&key_buffer);
+ pkey_size = GRN_TEXT_LEN(&key_buffer);
+ } else {
+ mrn_change_encoding(ctx, NULL);
+ uchar key[MRN_MAX_KEY_SIZE];
+ key_copy(key, buf, &key_info, key_info.key_length);
+ grn_bulk_space(ctx, &key_buffer, key_info.key_length);
+ pkey = GRN_TEXT_VALUE(&key_buffer);
+ storage_encode_multiple_column_key(&key_info,
+ key, key_info.key_length,
+ (uchar *)pkey, (uint *)&pkey_size);
+ }
+ }
+
+ int added;
+ record_id = grn_table_add(ctx, grn_table, pkey, pkey_size, &added);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_WRITE);
+ }
+ if (!added) {
+ // duplicated error
+ error = HA_ERR_FOUND_DUPP_KEY;
+ memcpy(dup_ref, &record_id, sizeof(grn_id));
+ dup_key = pkey_nr;
+ if (!ignoring_duplicated_key) {
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "duplicated id on insert: update primary key: <%.*s>",
+ pkey_size, pkey);
+ }
+ DBUG_RETURN(error);
+ }
+
+ if ((error = storage_write_row_unique_indexes(buf)))
+ {
+ goto err;
+ }
+
+ grn_obj colbuf;
+ GRN_VOID_INIT(&colbuf);
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+ const char *column_name = field->field_name;
+
+ if (field->is_null())
+ continue;
+
+#ifdef HAVE_SPATIAL
+ bool is_null_geometry_value =
+ field->real_type() == MYSQL_TYPE_GEOMETRY &&
+ static_cast<Field_geom *>(field)->get_length() == 0;
+ if (is_null_geometry_value) {
+ continue;
+ }
+#endif
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error) {
+ grn_obj_unlink(ctx, &colbuf);
+ goto err;
+ }
+ error = generic_store_bulk(field, &colbuf);
+ if (error) {
+ grn_obj_unlink(ctx, &colbuf);
+ goto err;
+ }
+ if (added && is_grn_zero_column_value(grn_columns[i], &colbuf)) {
+ // WORKAROUND: groonga can't index newly added '0' value for
+ // fix size column. So we add non-'0' value first then add
+ // real '0' value again. It will be removed when groonga
+ // supports 'null' value.
+ char *bytes = GRN_BULK_HEAD(&colbuf);
+ bytes[0] = '\1';
+ grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET);
+ bytes[0] = '\0';
+ }
+ grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET);
+ if (ctx->rc) {
+ grn_obj_unlink(ctx, &colbuf);
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ error = ER_ERROR_ON_WRITE;
+ goto err;
+ }
+ }
+ grn_obj_unlink(ctx, &colbuf);
+
+ error = storage_write_row_multiple_column_indexes(buf, record_id);
+ if (error) {
+ goto err;
+ }
+
+ // for UDF last_insert_grn_id()
+ st_mrn_slot_data *slot_data;
+ slot_data = mrn_get_slot_data(thd, true);
+ if (slot_data == NULL) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto err;
+ }
+ slot_data->last_insert_record_id = record_id;
+
+ grn_db_touch(ctx, grn_ctx_db(ctx));
+
+ if (table->found_next_number_field &&
+ !table->s->next_number_keypart) {
+ Field_num *field = (Field_num *) table->found_next_number_field;
+ if (field->unsigned_flag || field->val_int() > 0) {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ ulonglong nr = (ulonglong) field->val_int();
+ if (!long_term_share->auto_inc_inited) {
+ storage_info(HA_STATUS_AUTO);
+ }
+ {
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ if (long_term_share->auto_inc_value <= nr) {
+ long_term_share->auto_inc_value = nr + 1;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ }
+ }
+ }
+ }
+ DBUG_RETURN(0);
+
+err:
+ for (j = 0; j < table->s->keys; j++) {
+ if (j == pkey_nr) {
+ continue;
+ }
+ KEY *key_info = &table->key_info[j];
+ if (key_info->flags & HA_NOSAME) {
+ grn_table_delete_by_id(ctx, grn_index_tables[j], key_id[j]);
+ }
+ }
+ grn_table_delete_by_id(ctx, grn_table, record_id);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_write_row_multiple_column_index(uchar *buf,
+ grn_id record_id,
+ KEY *key_info,
+ grn_obj *index_column)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ mrn_change_encoding(ctx, NULL);
+ GRN_BULK_REWIND(&key_buffer);
+ grn_bulk_space(ctx, &key_buffer, key_info->key_length);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key_buffer)),
+ buf,
+ key_info,
+ key_info->key_length);
+ GRN_BULK_REWIND(&encoded_key_buffer);
+ grn_bulk_space(ctx, &encoded_key_buffer, key_info->key_length);
+ uint encoded_key_length;
+ storage_encode_multiple_column_key(key_info,
+ (uchar *)(GRN_TEXT_VALUE(&key_buffer)),
+ key_info->key_length,
+ (uchar *)(GRN_TEXT_VALUE(&encoded_key_buffer)),
+ &encoded_key_length);
+ DBUG_PRINT("info", ("mroonga: key_length=%u", key_info->key_length));
+ DBUG_PRINT("info", ("mroonga: encoded_key_length=%u", encoded_key_length));
+ DBUG_ASSERT(key_info->key_length >= encoded_key_length);
+
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, 1, NULL,
+ &encoded_key_buffer);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_write_row_multiple_column_indexes(uchar *buf,
+ grn_id record_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY key_info = table->key_info[i];
+
+ if (KEY_N_KEY_PARTS(&key_info) == 1 || (key_info.flags & HA_FULLTEXT)) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ continue;
+ }
+
+ if ((error = storage_write_row_multiple_column_index(buf,
+ record_id,
+ &key_info,
+ index_column)))
+ {
+ goto err;
+ }
+ }
+
+err:
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_write_row_unique_index(uchar *buf,
+ KEY *key_info,
+ grn_obj *index_table,
+ grn_id *key_id)
+{
+ char *ukey = NULL;
+ int error, ukey_size = 0;
+ MRN_DBUG_ENTER_METHOD();
+ GRN_BULK_REWIND(&key_buffer);
+ if (KEY_N_KEY_PARTS(key_info) == 1) {
+ Field *ukey_field = key_info->key_part[0].field;
+ error = mrn_change_encoding(ctx, ukey_field->charset());
+ if (error) {
+ DBUG_RETURN(error);
+ }
+ generic_store_bulk(ukey_field, &key_buffer);
+ ukey = GRN_TEXT_VALUE(&key_buffer);
+ ukey_size = GRN_TEXT_LEN(&key_buffer);
+ } else {
+ mrn_change_encoding(ctx, NULL);
+ uchar key[MRN_MAX_KEY_SIZE];
+ key_copy(key, buf, key_info, key_info->key_length);
+ grn_bulk_space(ctx, &key_buffer, key_info->key_length);
+ ukey = GRN_TEXT_VALUE(&key_buffer);
+ storage_encode_multiple_column_key(key_info,
+ key, key_info->key_length,
+ (uchar *)(ukey), (uint *)&ukey_size);
+ }
+
+ int added;
+ *key_id = grn_table_add(ctx, index_table, ukey, ukey_size, &added);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_WRITE);
+ }
+ if (!added) {
+ // duplicated error
+ error = HA_ERR_FOUND_DUPP_KEY;
+ memcpy(dup_ref, key_id, sizeof(grn_id));
+ if (!ignoring_duplicated_key) {
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "duplicated id on insert: update unique index: <%.*s>",
+ ukey_size, ukey);
+ }
+ DBUG_RETURN(error);
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_write_row_unique_indexes(uchar *buf)
+{
+ int error = 0;
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_DBUG_ENTER_METHOD();
+
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY *key_info = &table->key_info[i];
+
+ if (!(key_info->flags & HA_NOSAME)) {
+ continue;
+ }
+
+ grn_obj *index_table = grn_index_tables[i];
+ if (!index_table) {
+ continue;
+ }
+
+ if ((error = storage_write_row_unique_index(buf, key_info,
+ index_table, &key_id[i])))
+ {
+ if (error == HA_ERR_FOUND_DUPP_KEY)
+ {
+ dup_key = i;
+ }
+ goto err;
+ }
+ }
+ DBUG_RETURN(0);
+
+err:
+ if (i) {
+ mrn_change_encoding(ctx, NULL);
+ do {
+ i--;
+ KEY *key_info = &table->key_info[i];
+ if (key_info->flags & HA_NOSAME) {
+ grn_table_delete_by_id(ctx, grn_index_tables[i], key_id[i]);
+ }
+ } while (i);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::write_row(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_write_row(buf);
+ } else {
+ error = storage_write_row(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_get_record_id(uchar *data, grn_id *record_id,
+ const char *context)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ grn_obj key;
+ GRN_TEXT_INIT(&key, 0);
+
+ mrn_change_encoding(ctx, NULL);
+ grn_bulk_space(ctx, &key, table->key_info->key_length);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key)),
+ data,
+ &(table->key_info[table_share->primary_key]),
+ table->key_info[table_share->primary_key].key_length);
+
+ *record_id = grn_table_get(ctx, grn_table,
+ GRN_TEXT_VALUE(&key), GRN_TEXT_LEN(&key));
+ if (*record_id == GRN_ID_NIL) {
+ DBUG_PRINT("info", ("mroonga: %s", context));
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "%s: key=<%.*s>",
+ context, (int)GRN_TEXT_LEN(&key), GRN_TEXT_VALUE(&key));
+ error = ER_ERROR_ON_WRITE;
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN, error,
+ error_message);
+ }
+ grn_obj_unlink(ctx, &key);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_update_row(const uchar *old_data, uchar *new_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ THD *thd = ha_thd();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ tmp_disable_binlog(thd);
+ error = wrap_handler->ha_update_row(old_data, new_data);
+ reenable_binlog(thd);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ if (!error && wrapper_have_target_index()) {
+ error = wrapper_update_row_index(old_data, new_data);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_update_row_index(const uchar *old_data, uchar *new_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ mrn_change_encoding(ctx, NULL);
+ KEY key_info = table->key_info[table_share->primary_key];
+ GRN_BULK_REWIND(&key_buffer);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key_buffer)),
+ new_data,
+ &key_info, key_info.key_length);
+ int added;
+ grn_id new_record_id;
+ new_record_id = grn_table_add(ctx, grn_table,
+ GRN_TEXT_VALUE(&key_buffer),
+ table->key_info->key_length,
+ &added);
+ if (new_record_id == GRN_ID_NIL) {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to get new record ID for updating from groonga: key=<%.*s>",
+ (int)GRN_TEXT_LEN(&key_buffer), GRN_TEXT_VALUE(&key_buffer));
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, error_message, MYF(0));
+ DBUG_RETURN(error);
+ }
+
+ grn_id old_record_id;
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(old_data, table->record[0]);
+ for (uint j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+ field->move_field_offset(ptr_diff);
+ }
+ error = wrapper_get_record_id((uchar *)old_data, &old_record_id,
+ "failed to get old record ID "
+ "for updating from groonga");
+ for (uint j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+ field->move_field_offset(-ptr_diff);
+ }
+ if (error) {
+ DBUG_RETURN(0);
+ }
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ /* disable keys */
+ continue;
+ }
+
+ uint j;
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+
+ generic_store_bulk(field, &new_value_buffer);
+
+ field->move_field_offset(ptr_diff);
+ generic_store_bulk(field, &old_value_buffer);
+ field->move_field_offset(-ptr_diff);
+
+ grn_rc rc;
+ if (old_record_id == new_record_id) {
+ if (added) {
+ rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
+ &old_value_buffer, NULL);
+ if (!rc) {
+ rc = grn_column_index_update(ctx, index_column, new_record_id, j + 1,
+ NULL, &new_value_buffer);
+ }
+ } else {
+ rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
+ &old_value_buffer, &new_value_buffer);
+ }
+ } else {
+ rc = grn_column_index_update(ctx, index_column, old_record_id, j + 1,
+ &old_value_buffer, NULL);
+ if (!rc) {
+ rc = grn_column_index_update(ctx, index_column, new_record_id, j + 1,
+ NULL, &new_value_buffer);
+ }
+ if (!rc) {
+ rc = grn_table_delete_by_id(ctx, grn_table, old_record_id);
+ }
+ }
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+ }
+err:
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_update_row(const uchar *old_data, uchar *new_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ grn_obj colbuf;
+ int i;
+ uint j;
+ int n_columns = table->s->fields;
+ THD *thd = ha_thd();
+
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+ const char *column_name = field->field_name;
+
+ if (bitmap_is_set(table->write_set, field->field_index)) {
+ if (field->is_null()) continue;
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, MRN_GET_ERR_MSG(WARN_DATA_TRUNCATED),
+ MRN_COLUMN_NAME_ID,
+ MRN_GET_CURRENT_ROW_FOR_WARNING(thd));
+ if (MRN_ABORT_ON_WARNING(thd)) {
+ DBUG_RETURN(ER_DATA_TOO_LONG);
+ }
+ }
+ }
+ }
+
+ KEY *pkey_info = NULL;
+ storage_store_fields_for_prep_update(old_data, new_data, record_id);
+ {
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ if ((error = storage_prepare_delete_row_unique_indexes(old_data,
+ record_id))) {
+ DBUG_RETURN(error);
+ }
+ if ((error = storage_update_row_unique_indexes(new_data)))
+ {
+ DBUG_RETURN(error);
+ }
+ }
+
+ if (table->s->primary_key != MAX_INDEXES) {
+ pkey_info = &(table->key_info[table->s->primary_key]);
+ }
+ GRN_VOID_INIT(&colbuf);
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+ const char *column_name = field->field_name;
+ if (bitmap_is_set(table->write_set, field->field_index)) {
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ DBUG_PRINT("info", ("mroonga: update column %d(%d)",i,field->field_index));
+
+ if (field->is_null()) continue;
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ goto err;
+
+ bool on_duplicate_key_update =
+ (inserting_with_update && ignoring_duplicated_key);
+ if (!on_duplicate_key_update && pkey_info) {
+ bool have_pkey = false;
+ for (j = 0; j < KEY_N_KEY_PARTS(pkey_info); j++) {
+ Field *pkey_field = pkey_info->key_part[j].field;
+ if (strcmp(pkey_field->field_name, column_name) == 0) {
+ if (!replacing_) {
+ char message[MRN_BUFFER_SIZE];
+ snprintf(message, MRN_BUFFER_SIZE,
+ "data truncated for primary key column: <%s>",
+ column_name);
+ push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, message);
+ }
+ have_pkey = true;
+ }
+ }
+ if (have_pkey) {
+ continue;
+ }
+ }
+
+ generic_store_bulk(field, &colbuf);
+ grn_obj_set_value(ctx, grn_columns[i], record_id, &colbuf, GRN_OBJ_SET);
+ if (ctx->rc) {
+ grn_obj_unlink(ctx, &colbuf);
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ error = ER_ERROR_ON_WRITE;
+ goto err;
+ }
+ }
+ }
+ grn_obj_unlink(ctx, &colbuf);
+
+ if ((error = storage_update_row_index(old_data, new_data)))
+ {
+ goto err;
+ }
+
+ if ((error = storage_delete_row_unique_indexes()))
+ {
+ DBUG_RETURN(error);
+ }
+
+ grn_db_touch(ctx, grn_ctx_db(ctx));
+
+ if (table->found_next_number_field &&
+ !table->s->next_number_keypart &&
+ new_data == table->record[0]) {
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ Field_num *field = (Field_num *) table->found_next_number_field;
+ if (field->unsigned_flag || field->val_int() > 0) {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ ulonglong nr = (ulonglong) field->val_int();
+ if (!long_term_share->auto_inc_inited) {
+ storage_info(HA_STATUS_AUTO);
+ }
+ {
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ if (long_term_share->auto_inc_value <= nr) {
+ long_term_share->auto_inc_value = nr + 1;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ }
+ }
+ }
+ }
+ DBUG_RETURN(0);
+
+err:
+ for (j = 0; j < table->s->keys; j++) {
+ if (j == table->s->primary_key) {
+ continue;
+ }
+ KEY *key_info = &table->key_info[j];
+ if ((key_info->flags & HA_NOSAME) && key_id[j] != GRN_ID_NIL) {
+ grn_table_delete_by_id(ctx, grn_index_tables[j], key_id[j]);
+ }
+ }
+
+ if (!error && thd_sql_command(ha_thd()) == SQLCOM_TRUNCATE) {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ long_term_share->auto_inc_value = 0;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ long_term_share->auto_inc_inited = false;
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_update_row_index(const uchar *old_data, uchar *new_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ grn_obj old_key, old_encoded_key, new_key, new_encoded_key;
+ GRN_TEXT_INIT(&old_key, 0);
+ GRN_TEXT_INIT(&old_encoded_key, 0);
+ GRN_TEXT_INIT(&new_key, 0);
+ GRN_TEXT_INIT(&new_encoded_key, 0);
+
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(old_data, table->record[0]);
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ mrn_change_encoding(ctx, NULL);
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY key_info = table->key_info[i];
+
+ if (KEY_N_KEY_PARTS(&key_info) == 1 || (key_info.flags & HA_FULLTEXT)) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ /* disable keys */
+ continue;
+ }
+
+ GRN_BULK_REWIND(&old_key);
+ grn_bulk_space(ctx, &old_key, key_info.key_length);
+ for (uint j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+ field->move_field_offset(ptr_diff);
+ }
+ key_copy((uchar *)(GRN_TEXT_VALUE(&old_key)),
+ (uchar *)old_data,
+ &key_info,
+ key_info.key_length);
+ for (uint j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+ field->move_field_offset(-ptr_diff);
+ }
+ GRN_BULK_REWIND(&old_encoded_key);
+ grn_bulk_space(ctx, &old_encoded_key, key_info.key_length);
+ uint old_encoded_key_length;
+ storage_encode_multiple_column_key(&key_info,
+ (uchar *)(GRN_TEXT_VALUE(&old_key)),
+ key_info.key_length,
+ (uchar *)(GRN_TEXT_VALUE(&old_encoded_key)),
+ &old_encoded_key_length);
+
+ GRN_BULK_REWIND(&new_key);
+ grn_bulk_space(ctx, &new_key, key_info.key_length);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&new_key)),
+ (uchar *)new_data,
+ &key_info,
+ key_info.key_length);
+ GRN_BULK_REWIND(&new_encoded_key);
+ grn_bulk_space(ctx, &new_encoded_key, key_info.key_length);
+ uint new_encoded_key_length;
+ storage_encode_multiple_column_key(&key_info,
+ (uchar *)(GRN_TEXT_VALUE(&new_key)),
+ key_info.key_length,
+ (uchar *)(GRN_TEXT_VALUE(&new_encoded_key)),
+ &new_encoded_key_length);
+
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, 1,
+ &old_encoded_key, &new_encoded_key);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+err:
+ grn_obj_unlink(ctx, &old_key);
+ grn_obj_unlink(ctx, &old_encoded_key);
+ grn_obj_unlink(ctx, &new_key);
+ grn_obj_unlink(ctx, &new_encoded_key);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_update_row_unique_indexes(uchar *new_data)
+{
+ int error;
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_DBUG_ENTER_METHOD();
+
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY *key_info = &table->key_info[i];
+ if (!(key_info->flags & HA_NOSAME)) {
+ continue;
+ }
+
+ grn_obj *index_table = grn_index_tables[i];
+ if (!index_table) {
+ key_id[i] = GRN_ID_NIL;
+ del_key_id[i] = GRN_ID_NIL;
+ continue;
+ }
+
+ if (
+ KEY_N_KEY_PARTS(key_info) == 1 &&
+ !bitmap_is_set(table->write_set,
+ key_info->key_part[0].field->field_index)
+ ) {
+ /* no change */
+ key_id[i] = GRN_ID_NIL;
+ del_key_id[i] = GRN_ID_NIL;
+ continue;
+ }
+
+ if ((error = storage_write_row_unique_index(new_data, key_info,
+ index_table, &key_id[i])))
+ {
+ if (error == HA_ERR_FOUND_DUPP_KEY)
+ {
+ if (key_id[i] == del_key_id[i]) {
+ /* no change */
+ key_id[i] = GRN_ID_NIL;
+ del_key_id[i] = GRN_ID_NIL;
+ continue;
+ }
+ dup_key = i;
+ DBUG_PRINT("info", ("mroonga: different key ID: %d record ID: %d,%d",
+ i, key_id[i], del_key_id[i]));
+ }
+ goto err;
+ }
+ }
+ DBUG_RETURN(0);
+
+err:
+ if (i) {
+ mrn_change_encoding(ctx, NULL);
+ do {
+ i--;
+ KEY *key_info = &table->key_info[i];
+ if ((key_info->flags & HA_NOSAME) && key_id[i] != GRN_ID_NIL) {
+ grn_table_delete_by_id(ctx, grn_index_tables[i], key_id[i]);
+ }
+ } while (i);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::update_row(const uchar *old_data, uchar *new_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_update_row(old_data, new_data);
+ } else {
+ error = storage_update_row(old_data, new_data);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_delete_row(const uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ THD *thd= ha_thd();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ tmp_disable_binlog(thd);
+ error = wrap_handler->ha_delete_row(buf);
+ reenable_binlog(thd);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ if (!error && wrapper_have_target_index()) {
+ error = wrapper_delete_row_index(buf);
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_delete_row_index(const uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ mrn_change_encoding(ctx, NULL);
+ grn_id record_id;
+ error = wrapper_get_record_id((uchar *)buf, &record_id,
+ "failed to get record ID "
+ "for deleting from groonga");
+ if (error) {
+ DBUG_RETURN(0);
+ }
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ /* disable keys */
+ continue;
+ }
+
+ uint j;
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+
+ if (field->is_null())
+ continue;
+
+ generic_store_bulk(field, &old_value_buffer);
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, j + 1,
+ &old_value_buffer, NULL);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+ }
+err:
+ grn_table_delete_by_id(ctx, grn_table, record_id);
+ if (ctx->rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_delete_row(const uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(0);
+ }
+
+ storage_store_fields_for_prep_update(buf, NULL, record_id);
+ if ((error = storage_prepare_delete_row_unique_indexes(buf, record_id))) {
+ DBUG_RETURN(error);
+ }
+ mrn_change_encoding(ctx, NULL);
+ grn_table_delete_by_id(ctx, grn_table, record_id);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_WRITE);
+ }
+ if (
+ (error = storage_delete_row_index(buf)) ||
+ (error = storage_delete_row_unique_indexes())
+ ) {
+ DBUG_RETURN(error);
+ }
+
+ grn_db_touch(ctx, grn_ctx_db(ctx));
+
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_delete_row_index(const uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ grn_obj key, encoded_key;
+ GRN_TEXT_INIT(&key, 0);
+ GRN_TEXT_INIT(&encoded_key, 0);
+
+ mrn::DebugColumnAccess debug_column_access(table, table->read_set);
+ uint i;
+ uint n_keys = table->s->keys;
+ mrn_change_encoding(ctx, NULL);
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY key_info = table->key_info[i];
+
+ if (KEY_N_KEY_PARTS(&key_info) == 1 || (key_info.flags & HA_FULLTEXT)) {
+ continue;
+ }
+
+ grn_obj *index_column = grn_index_columns[i];
+ if (!index_column) {
+ /* disable keys */
+ continue;
+ }
+
+ GRN_BULK_REWIND(&key);
+ grn_bulk_space(ctx, &key, key_info.key_length);
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key)),
+ (uchar *)buf,
+ &key_info,
+ key_info.key_length);
+ GRN_BULK_REWIND(&encoded_key);
+ grn_bulk_space(ctx, &encoded_key, key_info.key_length);
+ uint encoded_key_length;
+ storage_encode_multiple_column_key(&key_info,
+ (uchar *)(GRN_TEXT_VALUE(&key)),
+ key_info.key_length,
+ (uchar *)(GRN_TEXT_VALUE(&encoded_key)),
+ &encoded_key_length);
+
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, 1,
+ &encoded_key, NULL);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+err:
+ grn_obj_unlink(ctx, &encoded_key);
+ grn_obj_unlink(ctx, &key);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_delete_row_unique_index(grn_obj *index_table,
+ grn_id del_key_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ grn_rc rc = grn_table_delete_by_id(ctx, index_table, del_key_id);
+ if (rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_WRITE);
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_delete_row_unique_indexes()
+{
+ int error = 0, tmp_error;
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_DBUG_ENTER_METHOD();
+
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY *key_info = &table->key_info[i];
+ if ((!(key_info->flags & HA_NOSAME)) || del_key_id[i] == GRN_ID_NIL) {
+ continue;
+ }
+
+ grn_obj *index_table = grn_index_tables[i];
+ if ((tmp_error = storage_delete_row_unique_index(index_table,
+ del_key_id[i])))
+ {
+ error = tmp_error;
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_prepare_delete_row_unique_index(const uchar *buf,
+ grn_id record_id,
+ KEY *key_info,
+ grn_obj *index_table,
+ grn_obj *index_column,
+ grn_id *del_key_id)
+{
+ const void *ukey = NULL;
+ uint32 ukey_size = 0;
+ MRN_DBUG_ENTER_METHOD();
+ if (KEY_N_KEY_PARTS(key_info) == 1) {
+ GRN_BULK_REWIND(&key_buffer);
+ grn_obj_get_value(ctx, index_column, record_id, &key_buffer);
+ ukey = GRN_TEXT_VALUE(&key_buffer);
+ ukey_size = GRN_TEXT_LEN(&key_buffer);
+ } else {
+ mrn_change_encoding(ctx, NULL);
+ uchar key[MRN_MAX_KEY_SIZE];
+ key_copy(key, (uchar *) buf, key_info, key_info->key_length);
+ grn_bulk_space(ctx, &key_buffer, key_info->key_length);
+ ukey = GRN_TEXT_VALUE(&key_buffer);
+ storage_encode_multiple_column_key(key_info,
+ key, key_info->key_length,
+ (uchar *)ukey, (uint *)&ukey_size);
+ }
+ *del_key_id = grn_table_get(ctx, index_table, ukey, ukey_size);
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_prepare_delete_row_unique_indexes(const uchar *buf,
+ grn_id record_id)
+{
+ int error = 0, tmp_error;
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_DBUG_ENTER_METHOD();
+
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY *key_info = &table->key_info[i];
+ if (!(key_info->flags & HA_NOSAME)) {
+ continue;
+ }
+
+ grn_obj *index_table = grn_index_tables[i];
+ if (!index_table) {
+ del_key_id[i] = GRN_ID_NIL;
+ continue;
+ }
+
+ grn_obj *index_column;
+ if (KEY_N_KEY_PARTS(key_info) == 1) {
+ Field *field = key_info->key_part[0].field;
+ mrn_change_encoding(ctx, field->charset());
+ index_column = grn_columns[field->field_index];
+ } else {
+ mrn_change_encoding(ctx, NULL);
+ index_column = grn_index_columns[i];
+ }
+ if ((tmp_error = storage_prepare_delete_row_unique_index(buf, record_id,
+ key_info,
+ index_table,
+ index_column,
+ &del_key_id[i])))
+ {
+ error = tmp_error;
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::delete_row(const uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_delete_row(buf);
+ } else {
+ error = storage_delete_row(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+uint ha_mroonga::wrapper_max_supported_key_parts()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(MAX_REF_PARTS);
+}
+
+uint ha_mroonga::storage_max_supported_key_parts()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(1);
+}
+
+uint ha_mroonga::max_supported_key_parts()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint parts;
+ if (share->wrapper_mode)
+ {
+ parts = wrapper_max_supported_key_parts();
+ } else {
+ parts = storage_max_supported_key_parts();
+ }
+ DBUG_RETURN(parts);
+}
+
+ha_rows ha_mroonga::wrapper_records_in_range(uint key_nr, key_range *range_min,
+ key_range *range_max)
+{
+ ha_rows row_count;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->s->key_info[key_nr];
+ if (mrn_is_geo_key(&key_info)) {
+ row_count = generic_records_in_range_geo(key_nr, range_min, range_max);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ row_count = wrap_handler->records_in_range(key_nr, range_min, range_max);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(row_count);
+}
+
+ha_rows ha_mroonga::storage_records_in_range(uint key_nr, key_range *range_min,
+ key_range *range_max)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int flags = 0;
+ uint size_min = 0, size_max = 0;
+ ha_rows row_count = 0;
+ uchar *key_min = NULL, *key_max = NULL;
+ uchar key_min_entity[MRN_MAX_KEY_SIZE];
+ uchar key_max_entity[MRN_MAX_KEY_SIZE];
+ KEY key_info = table->s->key_info[key_nr];
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(&key_info) > 1;
+
+ if (is_multiple_column_index) {
+ mrn_change_encoding(ctx, NULL);
+ if (range_min && range_max &&
+ range_min->length == range_max->length &&
+ memcmp(range_min->key, range_max->key, range_min->length) == 0) {
+ flags |= GRN_CURSOR_PREFIX;
+ key_min = key_min_entity;
+ storage_encode_multiple_column_key(&key_info,
+ range_min->key, range_min->length,
+ key_min, &size_min);
+ } else {
+ key_min = key_min_entity;
+ key_max = key_max_entity;
+ storage_encode_multiple_column_key_range(&key_info,
+ range_min, range_max,
+ key_min, &size_min,
+ key_max, &size_max);
+ }
+ } else if (mrn_is_geo_key(&key_info)) {
+ mrn_change_encoding(ctx, key_info.key_part->field->charset());
+ row_count = generic_records_in_range_geo(key_nr, range_min, range_max);
+ DBUG_RETURN(row_count);
+ } else {
+ KEY_PART_INFO key_part = key_info.key_part[0];
+ Field *field = key_part.field;
+ const char *column_name = field->field_name;
+ mrn_change_encoding(ctx, field->charset());
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ DBUG_RETURN((ha_rows)1);
+ }
+
+ if (range_min) {
+ key_min = key_min_entity;
+ storage_encode_key(field, range_min->key, key_min, &size_min);
+ if (size_min == 0) {
+ DBUG_RETURN(HA_POS_ERROR);
+ }
+ }
+ if (range_max) {
+ key_max = key_max_entity;
+ storage_encode_key(field, range_max->key, key_max, &size_max);
+ if (size_max == 0) {
+ DBUG_RETURN(HA_POS_ERROR);
+ }
+ }
+ }
+
+ if (range_min) {
+ DBUG_PRINT("info", ("mroonga: range_min->flag=%u", range_min->flag));
+ if (range_min->flag == HA_READ_AFTER_KEY) {
+ flags |= GRN_CURSOR_GT;
+ }
+ }
+ if (range_max) {
+ DBUG_PRINT("info", ("mroonga: range_min->flag=%u", range_max->flag));
+ if (range_max->flag == HA_READ_BEFORE_KEY) {
+ flags |= GRN_CURSOR_LT;
+ }
+ }
+
+ uint pkey_nr = table->s->primary_key;
+ if (key_nr == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ grn_table_cursor *cursor;
+ cursor = grn_table_cursor_open(ctx, grn_table,
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ while (grn_table_cursor_next(ctx, cursor) != GRN_ID_NIL) {
+ row_count++;
+ }
+ grn_table_cursor_close(ctx, cursor);
+ } else {
+ if (is_multiple_column_index) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", key_nr));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", key_nr));
+ }
+
+ grn_table_cursor *cursor;
+ grn_table_cursor *index_cursor;
+ cursor = grn_table_cursor_open(ctx, grn_index_tables[key_nr],
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ index_cursor = grn_index_cursor_open(ctx, cursor,
+ grn_index_columns[key_nr],
+ 0, GRN_ID_MAX, 0);
+ while (grn_table_cursor_next(ctx, index_cursor) != GRN_ID_NIL) {
+ row_count++;
+ }
+ grn_obj_unlink(ctx, index_cursor);
+ grn_table_cursor_close(ctx, cursor);
+ }
+ DBUG_RETURN(row_count);
+}
+
+ha_rows ha_mroonga::generic_records_in_range_geo(uint key_nr,
+ key_range *range_min,
+ key_range *range_max)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows row_count;
+ int error;
+
+ if (!range_min) {
+ DBUG_PRINT("info",
+ ("mroonga: range min is missing for geometry range search"));
+ DBUG_RETURN(HA_POS_ERROR);
+ }
+ if (range_max) {
+ DBUG_PRINT("info",
+ ("mroonga: range max is specified for geometry range search"));
+ DBUG_RETURN(HA_POS_ERROR);
+ }
+ error = mrn_change_encoding(ctx,
+ table->key_info[key_nr].key_part->field->charset());
+ if (error)
+ DBUG_RETURN(error);
+ if (!(range_min->flag & HA_READ_MBR_CONTAIN)) {
+ push_warning_unsupported_spatial_index_search(range_min->flag);
+ row_count = grn_table_size(ctx, grn_table);
+ DBUG_RETURN(row_count);
+ }
+
+ geo_store_rectangle(range_min->key);
+ row_count = grn_geo_estimate_in_rectangle(ctx,
+ grn_index_columns[key_nr],
+ &top_left_point,
+ &bottom_right_point);
+ DBUG_RETURN(row_count);
+}
+
+ha_rows ha_mroonga::records_in_range(uint key_nr, key_range *range_min, key_range *range_max)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows row_count = 0;
+ if (share->wrapper_mode)
+ {
+ row_count = wrapper_records_in_range(key_nr, range_min, range_max);
+ } else {
+ row_count = storage_records_in_range(key_nr, range_min, range_max);
+ }
+ DBUG_PRINT("info", ("mroonga: row_count=%" MRN_HA_ROWS_FORMAT, row_count));
+ DBUG_RETURN(row_count);
+}
+
+int ha_mroonga::wrapper_index_init(uint idx, bool sorted)
+{
+ int error = 0;
+ KEY key_info = table->s->key_info[idx];
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (!mrn_is_geo_key(&key_info) && key_info.algorithm != HA_KEY_ALG_FULLTEXT)
+ {
+ error = wrap_handler->ha_index_init(share->wrap_key_nr[idx], sorted);
+ } else {
+ error = wrap_handler->ha_index_init(share->wrap_primary_key, sorted);
+ }
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_init(uint idx, bool sorted)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::index_init(uint idx, bool sorted)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: idx=%u", idx));
+ active_index = idx;
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_init(idx, sorted);
+ } else {
+ error = storage_index_init(idx, sorted);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_end()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_index_or_rnd_end();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor();
+ clear_cursor_geo();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::index_end()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_end();
+ } else {
+ error = storage_index_end();
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ clear_cursor_geo();
+ error = generic_geo_open_cursor(key, find_flag);
+ if (!error) {
+ error = wrapper_get_next_geo_record(buf);
+ }
+ DBUG_RETURN(error);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
+ error = wrap_handler->ha_index_read_map(buf, key, keypart_map, find_flag);
+#else
+ error = wrap_handler->index_read_map(buf, key, keypart_map, find_flag);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag)
+{
+ MRN_DBUG_ENTER_METHOD();
+ check_count_skip(keypart_map, 0, false);
+
+ int error = 0;
+
+ uint key_nr = active_index;
+ KEY key_info = table->key_info[key_nr];
+ int flags = 0;
+ uint size_min = 0, size_max = 0;
+ uchar *key_min = NULL, *key_max = NULL;
+ uchar key_min_entity[MRN_MAX_KEY_SIZE];
+ uchar key_max_entity[MRN_MAX_KEY_SIZE];
+
+ clear_cursor();
+ clear_cursor_geo();
+ clear_empty_value_records();
+
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(&key_info) > 1;
+ if (is_multiple_column_index) {
+ mrn_change_encoding(ctx, NULL);
+ uint key_length = calculate_key_len(table, active_index, key, keypart_map);
+ DBUG_PRINT("info",
+ ("mroonga: multiple column index: "
+ "search key length=<%u>, "
+ "multiple column index key length=<%u>",
+ key_length, key_info.key_length));
+ if (key_length == key_info.key_length) {
+ if (find_flag == HA_READ_BEFORE_KEY ||
+ find_flag == HA_READ_PREFIX_LAST_OR_PREV) {
+ key_max = key_max_entity;
+ storage_encode_multiple_column_key(&key_info,
+ key, key_length,
+ key_max, &size_max);
+ } else {
+ key_min = key_min_entity;
+ storage_encode_multiple_column_key(&key_info,
+ key, key_length,
+ key_min, &size_min);
+ }
+ } else {
+ flags |= GRN_CURSOR_PREFIX;
+ key_min = key_min_entity;
+ storage_encode_multiple_column_key(&key_info,
+ key, key_length,
+ key_min, &size_min);
+ }
+ } else if (mrn_is_geo_key(&key_info)) {
+ error = mrn_change_encoding(ctx, key_info.key_part->field->charset());
+ if (error)
+ DBUG_RETURN(error);
+ error = generic_geo_open_cursor(key, find_flag);
+ if (!error) {
+ error = storage_get_next_record(buf);
+ }
+ DBUG_RETURN(error);
+ } else {
+ KEY_PART_INFO key_part = key_info.key_part[0];
+ Field *field = key_part.field;
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ DBUG_RETURN(error);
+
+ if (find_flag == HA_READ_KEY_EXACT) {
+ const char *column_name = field->field_name;
+
+ key_min = key_min_entity;
+ key_max = key_min_entity;
+ storage_encode_key(field, key, key_min, &size_min);
+ size_max = size_min;
+ // for _id
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ grn_id found_record_id = *((grn_id *)key_min);
+ if (grn_table_at(ctx, grn_table, found_record_id) != GRN_ID_NIL) { // found
+ storage_store_fields(buf, found_record_id);
+ table->status = 0;
+ record_id = found_record_id;
+ DBUG_RETURN(0);
+ } else {
+ table->status = STATUS_NOT_FOUND;
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+ }
+ }
+ } else if (find_flag == HA_READ_BEFORE_KEY ||
+ find_flag == HA_READ_PREFIX_LAST_OR_PREV) {
+ key_max = key_max_entity;
+ storage_encode_key(field, key, key_max_entity, &size_max);
+ } else {
+ key_min = key_min_entity;
+ storage_encode_key(field, key, key_min_entity, &size_min);
+ }
+ }
+
+ switch (find_flag) {
+ case HA_READ_BEFORE_KEY:
+ flags |= GRN_CURSOR_LT | GRN_CURSOR_DESCENDING;
+ break;
+ case HA_READ_PREFIX_LAST_OR_PREV:
+ flags |= GRN_CURSOR_LE | GRN_CURSOR_DESCENDING;
+ break;
+ case HA_READ_AFTER_KEY:
+ flags |= GRN_CURSOR_GT | GRN_CURSOR_ASCENDING;
+ break;
+ case HA_READ_KEY_OR_NEXT:
+ flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING;
+ break;
+ default:
+ break;
+ }
+
+ uint pkey_nr = table->s->primary_key;
+ if (key_nr == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ cursor = grn_table_cursor_open(ctx, grn_table,
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ } else {
+ bool is_empty_value_records_search = false;
+ if (is_multiple_column_index) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", key_nr));
+ } else if (flags == 0 && size_min == 0 && size_max == 0) {
+ is_empty_value_records_search = true;
+ DBUG_PRINT("info",
+ ("mroonga: use table scan for searching empty value records"));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", key_nr));
+ }
+ if (is_empty_value_records_search) {
+ grn_obj *expression, *expression_variable;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, grn_table,
+ expression, expression_variable);
+ grn_obj *target_column =
+ grn_columns[key_info.key_part->field->field_index];
+ grn_expr_append_const(ctx, expression, target_column, GRN_OP_GET_VALUE, 1);
+ grn_obj empty_value;
+ GRN_TEXT_INIT(&empty_value, 0);
+ grn_expr_append_obj(ctx, expression, &empty_value, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, expression, GRN_OP_EQUAL, 2);
+
+ empty_value_records =
+ grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
+ grn_table, 0);
+ grn_table_select(ctx, grn_table, expression, empty_value_records,
+ GRN_OP_OR);
+ grn_obj_unlink(ctx, expression);
+ grn_obj_unlink(ctx, &empty_value);
+
+ empty_value_records_cursor =
+ grn_table_cursor_open(ctx, empty_value_records,
+ NULL, 0, NULL, 0,
+ 0, -1, flags);
+ } else {
+ index_table_cursor = grn_table_cursor_open(ctx, grn_index_tables[key_nr],
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ cursor = grn_index_cursor_open(ctx, index_table_cursor,
+ grn_index_columns[key_nr],
+ 0, GRN_ID_MAX, 0);
+ }
+ }
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_read_map(buf, key, keypart_map, find_flag);
+ } else {
+ error = storage_index_read_map(buf, key, keypart_map, find_flag);
+ }
+ DBUG_PRINT("info", ("mroonga: error=%d", error));
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
+int ha_mroonga::wrapper_index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+# ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_LAST_MAP
+ error = wrap_handler->ha_index_read_last_map(buf, key, keypart_map);
+# else
+ error = wrap_handler->index_read_last_map(buf, key, keypart_map);
+# endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint key_nr = active_index;
+ KEY key_info = table->key_info[key_nr];
+
+ int flags = GRN_CURSOR_DESCENDING, error;
+ uint size_min = 0, size_max = 0;
+ uchar *key_min = NULL, *key_max = NULL;
+ uchar key_min_entity[MRN_MAX_KEY_SIZE];
+
+ clear_cursor();
+
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(&key_info) > 1;
+ if (is_multiple_column_index) {
+ mrn_change_encoding(ctx, NULL);
+ flags |= GRN_CURSOR_PREFIX;
+ uint key_length = calculate_key_len(table, active_index, key, keypart_map);
+ key_min = key_min_entity;
+ storage_encode_multiple_column_key(&key_info,
+ key, key_length,
+ key_min, &size_min);
+ } else {
+ KEY_PART_INFO key_part = key_info.key_part[0];
+ Field *field = key_part.field;
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ DBUG_RETURN(error);
+
+ key_min = key_min_entity;
+ key_max = key_min_entity;
+ storage_encode_key(field, key, key_min, &size_min);
+ size_max = size_min;
+ }
+
+ uint pkey_nr = table->s->primary_key;
+ if (key_nr == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ cursor = grn_table_cursor_open(ctx, grn_table,
+ key_min, size_min, key_max, size_max,
+ 0, -1, flags);
+ } else {
+ if (is_multiple_column_index) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", key_nr));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", key_nr));
+ }
+ index_table_cursor = grn_table_cursor_open(ctx, grn_index_tables[key_nr],
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ cursor = grn_index_cursor_open(ctx, index_table_cursor,
+ grn_index_columns[key_nr],
+ 0, GRN_ID_MAX, 0);
+ }
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_read_last_map(buf, key, keypart_map);
+ } else {
+ error = storage_index_read_last_map(buf, key, keypart_map);
+ }
+ DBUG_RETURN(error);
+}
+#endif
+
+int ha_mroonga::wrapper_index_next(uchar *buf)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = wrapper_get_next_geo_record(buf);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_NEXT
+ error = wrap_handler->ha_index_next(buf);
+#else
+ error = wrap_handler->index_next(buf);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_next(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_next(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_next(buf);
+ } else {
+ error = storage_index_next(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_prev(uchar *buf)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = wrapper_get_next_geo_record(buf);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_NEXT
+ error = wrap_handler->ha_index_prev(buf);
+#else
+ error = wrap_handler->index_prev(buf);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_prev(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_prev(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_prev(buf);
+ } else {
+ error = storage_index_prev(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_first(uchar *buf)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_FIRST
+ error = wrap_handler->ha_index_first(buf);
+#else
+ error = wrap_handler->index_first(buf);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_first(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor();
+ int flags = GRN_CURSOR_ASCENDING;
+ uint pkey_nr = table->s->primary_key;
+ mrn_change_encoding(ctx, NULL);
+ if (active_index == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ cursor = grn_table_cursor_open(ctx, grn_table, NULL, 0, NULL, 0,
+ 0, -1, flags);
+ } else {
+ if (KEY_N_KEY_PARTS(&(table->key_info[active_index])) > 1) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", active_index));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", active_index));
+ }
+ index_table_cursor = grn_table_cursor_open(ctx,
+ grn_index_tables[active_index],
+ NULL, 0,
+ NULL, 0,
+ 0, -1, flags);
+ cursor = grn_index_cursor_open(ctx, index_table_cursor,
+ grn_index_columns[active_index],
+ 0, GRN_ID_MAX, 0);
+ }
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_first(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_first(buf);
+ } else {
+ error = storage_index_first(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_last(uchar *buf)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_LAST
+ error = wrap_handler->ha_index_last(buf);
+#else
+ error = wrap_handler->index_last(buf);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_last(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor();
+ int flags = GRN_CURSOR_DESCENDING;
+ uint pkey_nr = table->s->primary_key;
+ mrn_change_encoding(ctx, NULL);
+ if (active_index == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ cursor = grn_table_cursor_open(ctx, grn_table, NULL, 0, NULL, 0,
+ 0, -1, flags);
+ } else {
+ if (KEY_N_KEY_PARTS(&(table->key_info[active_index])) > 1) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", active_index));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", active_index));
+ }
+ index_table_cursor = grn_table_cursor_open(ctx,
+ grn_index_tables[active_index],
+ NULL, 0,
+ NULL, 0,
+ 0, -1, flags);
+ cursor = grn_index_cursor_open(ctx, index_table_cursor,
+ grn_index_columns[active_index],
+ 0, GRN_ID_MAX, 0);
+ }
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_last(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_last(buf);
+ } else {
+ error = storage_index_last(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_index_next_same(uchar *buf, const uchar *key,
+ uint keylen)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ KEY key_info = table->s->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = wrapper_get_next_geo_record(buf);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_NEXT_SAME
+ error = wrap_handler->ha_index_next_same(buf, key, keylen);
+#else
+ error = wrap_handler->index_next_same(buf, key, keylen);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_index_next_same(uchar *buf, const uchar *key,
+ uint keylen)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = storage_get_next_record(count_skip ? NULL : buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::index_next_same(uchar *buf, const uchar *key, uint keylen)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_index_next_same(buf, key, keylen);
+ } else {
+ error = storage_index_next_same(buf, key, keylen);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ clear_cursor_geo();
+ error = generic_geo_open_cursor(start_key->key, start_key->flag);
+ if (!error) {
+ error = wrapper_get_next_geo_record(table->record[0]);
+ }
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->read_range_first(start_key, end_key, eq_range,
+ sorted);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted)
+{
+ MRN_DBUG_ENTER_METHOD();
+ check_count_skip(start_key ? start_key->keypart_map : 0,
+ end_key ? end_key->keypart_map : 0, false);
+ int flags = 0, error;
+ uint size_min = 0, size_max = 0;
+ uchar *key_min = NULL, *key_max = NULL;
+ uchar key_min_entity[MRN_MAX_KEY_SIZE];
+ uchar key_max_entity[MRN_MAX_KEY_SIZE];
+ KEY key_info = table->s->key_info[active_index];
+
+ clear_cursor();
+
+ bool is_multiple_column_index = KEY_N_KEY_PARTS(&key_info) > 1;
+ if (is_multiple_column_index) {
+ mrn_change_encoding(ctx, NULL);
+ if (start_key && end_key &&
+ start_key->length == end_key->length &&
+ memcmp(start_key->key, end_key->key, start_key->length) == 0) {
+ flags |= GRN_CURSOR_PREFIX;
+ key_min = key_min_entity;
+ storage_encode_multiple_column_key(&key_info,
+ start_key->key, start_key->length,
+ key_min, &size_min);
+ } else {
+ key_min = key_min_entity;
+ key_max = key_max_entity;
+ storage_encode_multiple_column_key_range(&key_info,
+ start_key, end_key,
+ key_min, &size_min,
+ key_max, &size_max);
+ if (size_min == 0) {
+ key_min = NULL;
+ }
+ if (size_max == 0) {
+ key_max = NULL;
+ }
+ }
+ } else {
+ KEY_PART_INFO key_part = key_info.key_part[0];
+ Field *field = key_part.field;
+ const char *column_name = field->field_name;
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ DBUG_RETURN(error);
+ if (start_key) {
+ key_min = key_min_entity;
+ storage_encode_key(field, start_key->key, key_min_entity,
+ &size_min);
+ if (start_key->flag == HA_READ_KEY_EXACT) {
+ // for _id
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ grn_id found_record_id = *((grn_id *)key_min);
+ if (grn_table_at(ctx, grn_table, found_record_id) != GRN_ID_NIL) { // found
+ storage_store_fields(table->record[0], found_record_id);
+ table->status = 0;
+ cursor = NULL;
+ record_id = found_record_id;
+ DBUG_RETURN(0);
+ } else {
+ table->status = STATUS_NOT_FOUND;
+ cursor = NULL;
+ record_id = GRN_ID_NIL;
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+ }
+ }
+ }
+ }
+ if (end_key) {
+ key_max = key_max_entity;
+ storage_encode_key(field, end_key->key, key_max, &size_max);
+ }
+ }
+
+ if (start_key) {
+ switch (start_key->flag) {
+ case HA_READ_AFTER_KEY:
+ flags |= GRN_CURSOR_GT | GRN_CURSOR_ASCENDING;
+ break;
+ case HA_READ_KEY_OR_NEXT:
+ flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING;
+ break;
+ default:
+ break;
+ }
+ }
+ if (end_key) {
+ switch (end_key->flag) {
+ case HA_READ_BEFORE_KEY:
+ flags |= GRN_CURSOR_LT | GRN_CURSOR_ASCENDING;
+ break;
+ case HA_READ_AFTER_KEY:
+ flags |= GRN_CURSOR_GE | GRN_CURSOR_ASCENDING;
+ break;
+ default:
+ break;
+ }
+ }
+
+ uint pkey_nr = table->s->primary_key;
+ if (active_index == pkey_nr) {
+ DBUG_PRINT("info", ("mroonga: use primary key"));
+ cursor = grn_table_cursor_open(ctx, grn_table,
+ key_min, size_min, key_max, size_max,
+ 0, -1, flags);
+ } else {
+ if (is_multiple_column_index) {
+ DBUG_PRINT("info", ("mroonga: use multiple column key%u", active_index));
+ } else {
+ DBUG_PRINT("info", ("mroonga: use key%u", active_index));
+ }
+ index_table_cursor = grn_table_cursor_open(ctx,
+ grn_index_tables[active_index],
+ key_min, size_min,
+ key_max, size_max,
+ 0, -1, flags);
+ cursor = grn_index_cursor_open(ctx, index_table_cursor,
+ grn_index_columns[active_index],
+ 0, GRN_ID_MAX, 0);
+ }
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+ error = storage_get_next_record(table->record[0]);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_read_range_first(start_key, end_key, eq_range,
+ sorted);
+ } else {
+ error = storage_read_range_first(start_key, end_key, eq_range, sorted);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_read_range_next()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = wrapper_get_next_geo_record(table->record[0]);
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->read_range_next();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_read_range_next()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (cursor == NULL) {
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+ }
+ int error = storage_get_next_record(count_skip ? NULL : table->record[0]);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::read_range_next()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_read_range_next();
+ } else {
+ error = storage_read_range_next();
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_ft_init()
+{
+ MRN_DBUG_ENTER_METHOD();
+ struct st_mrn_ft_info *mrn_ft_info =
+ reinterpret_cast<struct st_mrn_ft_info *>(ft_handler);
+ GRN_CTX_SET_ENCODING(ctx, mrn_ft_info->encoding);
+
+ int error = 0;
+ if (sorted_result) {
+ mrn_ft_info->cursor = grn_table_cursor_open(ctx, sorted_result,
+ NULL, 0, NULL, 0,
+ 0, -1, 0);
+ } else {
+ mrn_ft_info->cursor = grn_table_cursor_open(ctx, mrn_ft_info->result,
+ NULL, 0, NULL, 0,
+ 0, -1, 0);
+ }
+ if (ctx->rc) {
+ error = ER_ERROR_ON_READ;
+ my_message(error, ctx->errbuf, MYF(0));
+ } else {
+ if (sorted_result) {
+ if (grn_table->header.type == GRN_TABLE_NO_KEY) {
+ mrn_ft_info->id_accessor = grn_obj_column(ctx, sorted_result,
+ MRN_COLUMN_NAME_ID,
+ strlen(MRN_COLUMN_NAME_ID));
+ } else {
+ mrn_ft_info->key_accessor = grn_obj_column(ctx, sorted_result,
+ MRN_COLUMN_NAME_KEY,
+ strlen(MRN_COLUMN_NAME_KEY));
+ }
+ } else {
+ mrn_ft_info->key_accessor = grn_obj_column(ctx, mrn_ft_info->result,
+ MRN_COLUMN_NAME_KEY,
+ strlen(MRN_COLUMN_NAME_KEY));
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_ft_init()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = generic_ft_init();
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_ft_init()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = generic_ft_init();
+ record_id = GRN_ID_NIL;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::ft_init()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_ft_init();
+ } else {
+ error = storage_ft_init();
+ }
+ DBUG_RETURN(error);
+}
+
+void ha_mroonga::generic_ft_init_ext_add_conditions_fast_order_limit(
+ struct st_mrn_ft_info *info, grn_obj *expression)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ Item *where = table->pos_in_table_list->select_lex->where;
+
+ bool is_storage_mode = !(share->wrapper_mode);
+ mrn::ConditionConverter converter(info->ctx, grn_table, is_storage_mode);
+ converter.convert(where, expression);
+
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::generic_ft_init_ext_parse_pragma_d(struct st_mrn_ft_info *info,
+ const char *keyword,
+ uint keyword_length,
+ grn_operator *default_operator,
+ uint *consumed_keyword_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_bool succeeded = true;
+ if (keyword_length >= 1 && keyword[0] == '+') {
+ *default_operator = GRN_OP_AND;
+ *consumed_keyword_length = 1;
+ } else if (keyword_length >= 1 && keyword[0] == '-') {
+ *default_operator = GRN_OP_AND_NOT;
+ *consumed_keyword_length = 1;
+ } else if (keyword_length >= 2 && memcmp(keyword, "OR", 2) == 0) {
+ *default_operator = GRN_OP_OR;
+ *consumed_keyword_length = 2;
+ } else {
+ succeeded = false;
+ }
+
+ DBUG_RETURN(succeeded);
+}
+
+void ha_mroonga::generic_ft_init_ext_parse_pragma_w_append_section(
+ struct st_mrn_ft_info *info,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ uint section,
+ grn_obj *section_value_buffer,
+ int weight,
+ uint n_weights)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_expr_append_obj(info->ctx, match_columns, index_column, GRN_OP_PUSH, 1);
+ GRN_UINT32_SET(info->ctx, section_value_buffer, section);
+ grn_expr_append_const(info->ctx, match_columns, section_value_buffer,
+ GRN_OP_PUSH, 1);
+ grn_expr_append_op(info->ctx, match_columns, GRN_OP_GET_MEMBER, 2);
+
+ if (weight != 1) {
+ grn_expr_append_const_int(info->ctx, match_columns, weight,
+ GRN_OP_PUSH, 1);
+ grn_expr_append_op(info->ctx, match_columns, GRN_OP_STAR, 2);
+ }
+
+ if (n_weights >= 2) {
+ grn_expr_append_op(info->ctx, match_columns, GRN_OP_OR, 2);
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::generic_ft_init_ext_parse_pragma_w(struct st_mrn_ft_info *info,
+ const char *keyword,
+ uint keyword_length,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ uint *consumed_keyword_length,
+ grn_obj *tmp_objects)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ *consumed_keyword_length = 0;
+
+ uint n_sections = KEY_N_KEY_PARTS(info->key_info);
+
+ grn_obj section_value_buffer;
+ GRN_UINT32_INIT(&section_value_buffer, 0);
+
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(bool, specified_sections, n_sections);
+ for (uint i = 0; i < n_sections; ++i) {
+ specified_sections[i] = false;
+ }
+
+ uint n_weights = 0;
+ while (keyword_length >= 1) {
+ if (n_weights >= 1) {
+ if (keyword[0] != ',') {
+ break;
+ }
+ uint n_used_keyword_length = 1;
+ *consumed_keyword_length += n_used_keyword_length;
+ keyword_length -= n_used_keyword_length;
+ keyword += n_used_keyword_length;
+ if (keyword_length == 0) {
+ break;
+ }
+ }
+
+ uint section = 0;
+ if ('1' <= keyword[0] && keyword[0] <= '9') {
+ const char *section_start = keyword;
+ const char *keyword_end = keyword + keyword_length;
+ const char *keyword_rest;
+ section = grn_atoui(section_start, keyword_end, &keyword_rest);
+ if (section_start == keyword_rest) {
+ break;
+ }
+ if (!(0 < section && section <= n_sections)) {
+ break;
+ }
+ section -= 1;
+ specified_sections[section] = true;
+ uint n_used_keyword_length = keyword_rest - keyword;
+ *consumed_keyword_length += n_used_keyword_length;
+ keyword_length -= n_used_keyword_length;
+ keyword += n_used_keyword_length;
+ } else {
+ break;
+ }
+
+ int weight = 1;
+ if (keyword_length >= 2 && keyword[0] == ':') {
+ const char *weight_start = keyword + 1;
+ const char *keyword_end = keyword + keyword_length;
+ const char *keyword_rest;
+ weight = grn_atoi(weight_start, keyword_end, &keyword_rest);
+ if (weight_start == keyword_rest) {
+ break;
+ }
+ uint n_used_keyword_length = keyword_rest - keyword;
+ *consumed_keyword_length += n_used_keyword_length;
+ keyword_length -= n_used_keyword_length;
+ keyword += n_used_keyword_length;
+ }
+
+ n_weights++;
+
+ generic_ft_init_ext_parse_pragma_w_append_section(info,
+ index_column,
+ match_columns,
+ section,
+ &section_value_buffer,
+ weight,
+ n_weights);
+ }
+
+ for (uint section = 0; section < n_sections; ++section) {
+ if (specified_sections[section]) {
+ continue;
+ }
+
+ ++n_weights;
+
+ int default_weight = 1;
+ generic_ft_init_ext_parse_pragma_w_append_section(info,
+ index_column,
+ match_columns,
+ section,
+ &section_value_buffer,
+ default_weight,
+ n_weights);
+ }
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(specified_sections);
+
+ GRN_OBJ_FIN(info->ctx, &section_value_buffer);
+
+ DBUG_RETURN(n_weights > 0);
+}
+
+grn_rc ha_mroonga::generic_ft_init_ext_prepare_expression_in_boolean_mode(
+ struct st_mrn_ft_info *info,
+ String *key,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ grn_obj *expression,
+ grn_obj *tmp_objects)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_rc rc = GRN_SUCCESS;
+
+ const char *keyword, *keyword_original;
+ uint keyword_length, keyword_length_original;
+ grn_operator default_operator = GRN_OP_OR;
+ grn_bool weight_specified = false;
+ keyword = keyword_original = key->ptr();
+ keyword_length = keyword_length_original = key->length();
+ // WORKAROUND: support only "D" and "W" pragmas.
+ if (keyword_length >= 2 && keyword[0] == '*') {
+ bool parsed = false;
+ bool done = false;
+ keyword++;
+ keyword_length++;
+ while (!done) {
+ uint consumed_keyword_length = 0;
+ switch (keyword[0]) {
+ case 'D':
+ if (generic_ft_init_ext_parse_pragma_d(info,
+ keyword + 1,
+ keyword_length - 1,
+ &default_operator,
+ &consumed_keyword_length)) {
+ parsed = true;
+ consumed_keyword_length += 1;
+ keyword += consumed_keyword_length;
+ keyword_length -= consumed_keyword_length;
+ } else {
+ done = true;
+ }
+ break;
+ case 'W':
+ if (generic_ft_init_ext_parse_pragma_w(info,
+ keyword + 1,
+ keyword_length - 1,
+ index_column,
+ match_columns,
+ &consumed_keyword_length,
+ tmp_objects)) {
+ parsed = true;
+ weight_specified = true;
+ consumed_keyword_length += 1;
+ keyword += consumed_keyword_length;
+ keyword_length -= consumed_keyword_length;
+ } else {
+ done = true;
+ }
+ break;
+ default:
+ done = true;
+ break;
+ }
+ }
+ if (!parsed) {
+ keyword = keyword_original;
+ keyword_length = keyword_length_original;
+ }
+ }
+ // WORKAROUND: ignore the first '+' to support "+apple macintosh" pattern.
+ while (keyword_length > 0 && keyword[0] == ' ') {
+ keyword++;
+ keyword_length--;
+ }
+ if (keyword_length > 0 && keyword[0] == '+') {
+ keyword++;
+ keyword_length--;
+ }
+ if (!weight_specified) {
+ grn_expr_append_obj(info->ctx, match_columns, index_column, GRN_OP_PUSH, 1);
+ }
+ grn_expr_flags expression_flags =
+ GRN_EXPR_SYNTAX_QUERY | GRN_EXPR_ALLOW_LEADING_NOT;
+ rc = grn_expr_parse(info->ctx, expression,
+ keyword, keyword_length,
+ match_columns, GRN_OP_MATCH, default_operator,
+ expression_flags);
+ if (rc) {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to parse fulltext search keyword: <%.*s>: <%s>",
+ keyword_length_original, keyword_original,
+ info->ctx->errbuf);
+ ulong action = THDVAR(ha_thd(), action_on_fulltext_query_error);
+ switch (static_cast<mrn_action_on_error>(action)) {
+ case MRN_ACTION_ON_ERROR_ERROR:
+ my_message(ER_PARSE_ERROR, error_message, MYF(0));
+ break;
+ case MRN_ACTION_ON_ERROR_ERROR_AND_LOG:
+ my_message(ER_PARSE_ERROR, error_message, MYF(0));
+ GRN_LOG(info->ctx, GRN_LOG_ERROR, "%s", error_message);
+ break;
+ case MRN_ACTION_ON_ERROR_IGNORE:
+ break;
+ case MRN_ACTION_ON_ERROR_IGNORE_AND_LOG:
+ GRN_LOG(info->ctx, GRN_LOG_ERROR, "%s", error_message);
+ break;
+ }
+ }
+
+ DBUG_RETURN(rc);
+}
+
+grn_rc ha_mroonga::generic_ft_init_ext_prepare_expression_in_normal_mode(
+ struct st_mrn_ft_info *info,
+ String *key,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ grn_obj *expression,
+ grn_obj *tmp_objects)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_rc rc = GRN_SUCCESS;
+
+ grn_obj query;
+ GRN_TEXT_INIT(&query, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET(info->ctx, &query, key->ptr(), key->length());
+ grn_expr_append_obj(info->ctx, match_columns, index_column, GRN_OP_PUSH, 1);
+ grn_expr_append_obj(info->ctx, expression, match_columns, GRN_OP_PUSH, 1);
+ grn_expr_append_const(info->ctx, expression, &query, GRN_OP_PUSH, 1);
+ grn_expr_append_op(info->ctx, expression, GRN_OP_SIMILAR, 2);
+ grn_obj_unlink(info->ctx, &query);
+
+ DBUG_RETURN(rc);
+}
+
+struct st_mrn_ft_info *ha_mroonga::generic_ft_init_ext_select(uint flags,
+ uint key_nr,
+ String *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ struct st_mrn_ft_info *info = new st_mrn_ft_info();
+ info->mroonga = this;
+ info->ctx = ctx;
+ mrn_change_encoding(info->ctx,
+ table->key_info[key_nr].key_part->field->charset());
+ info->encoding = GRN_CTX_GET_ENCODING(info->ctx);
+ info->table = grn_table;
+ info->result = grn_table_create(info->ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
+ grn_table, 0);
+ info->score_column = grn_obj_column(info->ctx, info->result,
+ MRN_COLUMN_NAME_SCORE,
+ strlen(MRN_COLUMN_NAME_SCORE));
+ GRN_TEXT_INIT(&(info->key), 0);
+ grn_bulk_space(info->ctx, &(info->key), table->key_info->key_length);
+ GRN_INT32_INIT(&(info->score), 0);
+ info->active_index = key_nr;
+ info->key_info = &(table->key_info[key_nr]);
+ info->primary_key_info = &(table->key_info[table_share->primary_key]);
+ info->cursor = NULL;
+ info->id_accessor = NULL;
+ info->key_accessor = NULL;
+
+ if (key->length() == 0) {
+ DBUG_RETURN(info);
+ }
+
+ grn_obj *index_column = grn_index_columns[key_nr];
+ grn_obj *match_columns, *match_columns_variable;
+ GRN_EXPR_CREATE_FOR_QUERY(info->ctx, info->table, match_columns,
+ match_columns_variable);
+
+ grn_obj *expression, *expression_variable;
+ GRN_EXPR_CREATE_FOR_QUERY(info->ctx, info->table,
+ expression, expression_variable);
+ grn_obj tmp_objects;
+ GRN_PTR_INIT(&tmp_objects, GRN_OBJ_VECTOR, GRN_ID_NIL);
+
+ grn_rc rc = GRN_SUCCESS;
+ if (flags & FT_BOOL) {
+ rc = generic_ft_init_ext_prepare_expression_in_boolean_mode(info,
+ key,
+ index_column,
+ match_columns,
+ expression,
+ &tmp_objects);
+ } else {
+ rc = generic_ft_init_ext_prepare_expression_in_normal_mode(info,
+ key,
+ index_column,
+ match_columns,
+ expression,
+ &tmp_objects);
+ }
+
+ if (rc == GRN_SUCCESS) {
+ if (fast_order_limit) {
+ generic_ft_init_ext_add_conditions_fast_order_limit(info, expression);
+ }
+ longlong escalation_threshold = THDVAR(ha_thd(), match_escalation_threshold);
+ mrn::MatchEscalationThresholdScope scope(info->ctx, escalation_threshold);
+ grn_table_select(info->ctx, info->table, expression,
+ info->result, GRN_OP_OR);
+ }
+
+ grn_obj_unlink(info->ctx, expression);
+ grn_obj_unlink(info->ctx, match_columns);
+
+ uint n_tmp_objects = GRN_BULK_VSIZE(&tmp_objects) / sizeof(grn_obj *);
+ for (uint i = 0; i < n_tmp_objects; ++i) {
+ grn_obj_unlink(info->ctx, GRN_PTR_VALUE_AT(&tmp_objects, i));
+ }
+ grn_obj_unlink(info->ctx, &tmp_objects);
+
+ DBUG_RETURN(info);
+}
+
+FT_INFO *ha_mroonga::generic_ft_init_ext(uint flags, uint key_nr, String *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ check_count_skip(0, 0, true);
+
+ mrn_change_encoding(ctx, system_charset_info);
+ grn_operator operation = GRN_OP_AND;
+ if (!matched_record_keys) {
+ matched_record_keys = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
+ grn_table, 0);
+ operation = GRN_OP_OR;
+ }
+
+ grn_table_sort_key *sort_keys = NULL;
+ int n_sort_keys = 0;
+ longlong limit = -1;
+ check_fast_order_limit(&sort_keys, &n_sort_keys, &limit);
+
+ struct st_mrn_ft_info *info =
+ generic_ft_init_ext_select(flags, key_nr, key);
+
+ grn_rc rc;
+ rc = grn_table_setoperation(ctx, matched_record_keys, info->result,
+ matched_record_keys, operation);
+ if (rc) {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to merge matched record keys: <%s>",
+ ctx->errbuf);
+ my_message(ER_ERROR_ON_READ, error_message, MYF(0));
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%s", error_message);
+ }
+ if (fast_order_limit) {
+ sorted_result = grn_table_create(ctx, NULL,
+ 0, NULL,
+ GRN_OBJ_TABLE_NO_KEY, NULL,
+ matched_record_keys);
+ grn_table_sort(ctx, matched_record_keys, 0, static_cast<int>(limit),
+ sorted_result, sort_keys, n_sort_keys);
+ }
+ if (sort_keys) {
+ for (int i = 0; i < n_sort_keys; i++) {
+ grn_obj_unlink(info->ctx, sort_keys[i].key);
+ }
+ free(sort_keys);
+ }
+
+ DBUG_RETURN((FT_INFO *)info);
+}
+
+FT_INFO *ha_mroonga::wrapper_ft_init_ext(uint flags, uint key_nr, String *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+ FT_INFO *info = generic_ft_init_ext(flags, key_nr, key);
+ struct st_mrn_ft_info *mrn_ft_info = (struct st_mrn_ft_info *)info;
+ mrn_ft_info->please = &mrn_wrapper_ft_vft;
+#ifdef HA_CAN_FULLTEXT_EXT
+ mrn_ft_info->could_you = &mrn_wrapper_ft_vft_ext;
+#endif
+ ++wrap_ft_init_count;
+ DBUG_RETURN(info);
+}
+
+FT_INFO *ha_mroonga::storage_ft_init_ext(uint flags, uint key_nr, String *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+ FT_INFO *info = generic_ft_init_ext(flags, key_nr, key);
+ struct st_mrn_ft_info *mrn_ft_info = (struct st_mrn_ft_info *)info;
+ mrn_ft_info->please = &mrn_storage_ft_vft;
+#ifdef HA_CAN_FULLTEXT_EXT
+ mrn_ft_info->could_you = &mrn_storage_ft_vft_ext;
+#endif
+ DBUG_RETURN(info);
+}
+
+FT_INFO *ha_mroonga::ft_init_ext(uint flags, uint key_nr, String *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+ fulltext_searching = true;
+ FT_INFO *info;
+ if (key_nr == NO_SUCH_KEY) {
+ struct st_mrn_ft_info *mrn_ft_info = new st_mrn_ft_info();
+ mrn_ft_info->please = &mrn_no_such_key_ft_vft;
+#ifdef HA_CAN_FULLTEXT_EXT
+ mrn_ft_info->could_you = &mrn_no_such_key_ft_vft_ext;
+#endif
+ info = (FT_INFO *)mrn_ft_info;
+ } else {
+ if (share->wrapper_mode)
+ {
+ info = wrapper_ft_init_ext(flags, key_nr, key);
+ } else {
+ info = storage_ft_init_ext(flags, key_nr, key);
+ }
+ }
+ DBUG_RETURN(info);
+}
+
+int ha_mroonga::wrapper_ft_read(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (wrap_ft_init_count)
+ set_pk_bitmap();
+
+ struct st_mrn_ft_info *mrn_ft_info =
+ reinterpret_cast<struct st_mrn_ft_info *>(ft_handler);
+ GRN_CTX_SET_ENCODING(ctx, mrn_ft_info->encoding);
+
+ int error = 0;
+ do {
+ grn_id found_record_id;
+ found_record_id = grn_table_cursor_next(ctx, mrn_ft_info->cursor);
+ if (found_record_id == GRN_ID_NIL) {
+ error = HA_ERR_END_OF_FILE;
+ break;
+ }
+
+ GRN_BULK_REWIND(&key_buffer);
+ if (mrn_ft_info->key_accessor) {
+ grn_obj_get_value(ctx, mrn_ft_info->key_accessor,
+ found_record_id, &key_buffer);
+ } else {
+ void *key;
+ int key_length;
+ key_length = grn_table_cursor_get_key(ctx, mrn_ft_info->cursor, &key);
+ GRN_TEXT_SET(ctx, &key_buffer, key, key_length);
+ }
+ error = wrapper_get_record(buf, (const uchar *)GRN_TEXT_VALUE(&key_buffer));
+ } while (error == HA_ERR_END_OF_FILE || error == HA_ERR_KEY_NOT_FOUND);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_ft_read(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ struct st_mrn_ft_info *mrn_ft_info =
+ reinterpret_cast<struct st_mrn_ft_info *>(ft_handler);
+ GRN_CTX_SET_ENCODING(ctx, mrn_ft_info->encoding);
+
+ grn_id found_record_id;
+ found_record_id = grn_table_cursor_next(ctx, mrn_ft_info->cursor);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+
+ if (found_record_id == GRN_ID_NIL) {
+ table->status = STATUS_NOT_FOUND;
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+ }
+ table->status = 0;
+
+ if (count_skip && record_id != GRN_ID_NIL) {
+ DBUG_RETURN(0);
+ }
+
+ GRN_BULK_REWIND(&key_buffer);
+ if (mrn_ft_info->id_accessor) {
+ grn_obj id_buffer;
+ GRN_RECORD_INIT(&id_buffer, 0, grn_obj_id(ctx, grn_table));
+ grn_obj_get_value(ctx, mrn_ft_info->id_accessor,
+ found_record_id, &id_buffer);
+ record_id = GRN_RECORD_VALUE(&id_buffer);
+ } else if (mrn_ft_info->key_accessor) {
+ grn_obj_get_value(ctx, mrn_ft_info->key_accessor,
+ found_record_id, &key_buffer);
+ record_id = grn_table_get(ctx, grn_table,
+ GRN_TEXT_VALUE(&key_buffer),
+ GRN_TEXT_LEN(&key_buffer));
+ } else {
+ void *key;
+ grn_table_cursor_get_key(ctx, mrn_ft_info->cursor, &key);
+ if (ctx->rc) {
+ record_id = GRN_ID_NIL;
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ } else {
+ record_id = *((grn_id *)key);
+ }
+ }
+ storage_store_fields(buf, record_id);
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::ft_read(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_ft_read(buf);
+ } else {
+ error = storage_ft_read(buf);
+ }
+ DBUG_RETURN(error);
+}
+
+const Item *ha_mroonga::wrapper_cond_push(const Item *cond)
+{
+ const Item *reminder_cond;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ reminder_cond = wrap_handler->cond_push(cond);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(reminder_cond);
+}
+
+const Item *ha_mroonga::storage_cond_push(const Item *cond)
+{
+ MRN_DBUG_ENTER_METHOD();
+ const Item *reminder_cond = cond;
+ if (!pushed_cond) {
+ mrn::ConditionConverter converter(ctx, grn_table, true);
+ if (converter.find_match_against(cond) && converter.is_convertable(cond)) {
+ reminder_cond = NULL;
+ }
+ }
+ DBUG_RETURN(reminder_cond);
+}
+
+const Item *ha_mroonga::cond_push(const Item *cond)
+{
+ MRN_DBUG_ENTER_METHOD();
+ const Item *reminder_cond;
+ if (share->wrapper_mode)
+ {
+ reminder_cond = wrapper_cond_push(cond);
+ } else {
+ reminder_cond = storage_cond_push(cond);
+ }
+ DBUG_RETURN(reminder_cond);
+}
+
+void ha_mroonga::wrapper_cond_pop()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->cond_pop();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_cond_pop()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::cond_pop()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ wrapper_cond_pop();
+ else
+ storage_cond_pop();
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::wrapper_get_error_message(int error, String *buf)
+{
+ bool temporary_error;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ temporary_error = wrap_handler->get_error_message(error, buf);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(temporary_error);
+}
+
+bool ha_mroonga::storage_get_error_message(int error, String *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool temporary_error = false;
+ // latest error message
+ buf->copy(ctx->errbuf, (uint) strlen(ctx->errbuf), system_charset_info);
+ DBUG_RETURN(temporary_error);
+}
+
+bool ha_mroonga::get_error_message(int error, String *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool temporary_error;
+ if (share && share->wrapper_mode)
+ {
+ temporary_error = wrapper_get_error_message(error, buf);
+ } else {
+ temporary_error = storage_get_error_message(error, buf);
+ }
+ DBUG_RETURN(temporary_error);
+}
+
+ulonglong ha_mroonga::file_size(const char *path)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ struct stat file_status;
+ if (stat(path, &file_status) == 0) {
+ DBUG_RETURN(file_status.st_size);
+ } else {
+ DBUG_RETURN(0);
+ }
+}
+
+void ha_mroonga::push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag)
+{
+ char search_name[MRN_BUFFER_SIZE];
+ if (flag == HA_READ_MBR_INTERSECT) {
+ strcpy(search_name, "intersect");
+ } else if (flag == HA_READ_MBR_WITHIN) {
+ strcpy(search_name, "within");
+ } else if (flag & HA_READ_MBR_DISJOINT) {
+ strcpy(search_name, "disjoint");
+ } else if (flag & HA_READ_MBR_EQUAL) {
+ strcpy(search_name, "equal");
+ } else {
+ sprintf(search_name, "unknown: %d", flag);
+ }
+ push_warning_printf(ha_thd(),
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_UNSUPPORTED_EXTENSION,
+ "spatial index search "
+ "except MBRContains aren't supported: <%s>",
+ search_name);
+}
+
+void ha_mroonga::clear_cursor()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (cursor) {
+ grn_obj_unlink(ctx, cursor);
+ cursor = NULL;
+ }
+ if (index_table_cursor) {
+ grn_table_cursor_close(ctx, index_table_cursor);
+ index_table_cursor = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::clear_cursor_geo()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (cursor_geo) {
+ grn_obj_unlink(ctx, cursor_geo);
+ cursor_geo = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::clear_empty_value_records()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (empty_value_records_cursor) {
+ grn_table_cursor_close(ctx, empty_value_records_cursor);
+ empty_value_records_cursor = NULL;
+ }
+ if (empty_value_records) {
+ grn_obj_unlink(ctx, empty_value_records);
+ empty_value_records = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::clear_search_result()
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor();
+ if (sorted_result) {
+ grn_obj_unlink(ctx, sorted_result);
+ sorted_result = NULL;
+ }
+ if (matched_record_keys) {
+ grn_obj_unlink(ctx, matched_record_keys);
+ matched_record_keys = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::clear_search_result_geo()
+{
+ MRN_DBUG_ENTER_METHOD();
+ clear_cursor_geo();
+ if (grn_source_column_geo) {
+ grn_obj_unlink(ctx, grn_source_column_geo);
+ grn_source_column_geo = NULL;
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::clear_indexes()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint n_keys = table->s->keys;
+ uint pkey_nr = table->s->primary_key;
+
+ for (uint i = 0; i < n_keys; i++) {
+ if (i != pkey_nr) {
+ if (grn_index_tables) {
+ grn_obj_unlink(ctx, grn_index_tables[i]);
+ }
+ if (grn_index_columns) {
+ grn_obj_unlink(ctx, grn_index_columns[i]);
+ }
+ }
+ }
+
+ if (grn_index_tables) {
+ free(grn_index_tables);
+ grn_index_tables = NULL;
+ }
+
+ if (grn_index_columns) {
+ free(grn_index_columns);
+ grn_index_columns = NULL;
+ }
+
+ if (key_id) {
+ free(key_id);
+ key_id = NULL;
+ }
+
+ if (del_key_id) {
+ free(del_key_id);
+ del_key_id = NULL;
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::alter_share_add(const char *path, TABLE_SHARE *table_share)
+{
+ MRN_DBUG_ENTER_METHOD();
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(ha_thd(), true);
+ if (!slot_data)
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ st_mrn_alter_share *alter_share =
+ (st_mrn_alter_share *)malloc(sizeof(st_mrn_alter_share));
+ if (!alter_share)
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ alter_share->next = NULL;
+ strcpy(alter_share->path, path);
+ alter_share->alter_share = table_share;
+ if (slot_data->first_alter_share)
+ {
+ st_mrn_alter_share *tmp_alter_share = slot_data->first_alter_share;
+ while (tmp_alter_share->next)
+ tmp_alter_share = tmp_alter_share->next;
+ tmp_alter_share->next = alter_share;
+ } else {
+ slot_data->first_alter_share = alter_share;
+ }
+ DBUG_RETURN(0);
+}
+
+void ha_mroonga::remove_related_files(const char *base_path)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ const char *base_directory_name = ".";
+ size_t base_path_length = strlen(base_path);
+#ifdef WIN32
+ WIN32_FIND_DATA data;
+ HANDLE finder = FindFirstFile(base_directory_name, &data);
+ if (finder != INVALID_HANDLE_VALUE) {
+ do {
+ if (!(data.dwFileAttributes & FILE_ATTRIBUTE_NORMAL)) {
+ continue;
+ }
+ if (strncmp(data.cFileName, base_path, base_path_length) == 0) {
+ unlink(data.cFileName);
+ }
+ } while (FindNextFile(finder, &data) != 0);
+ FindClose(finder);
+ }
+#else
+ DIR *dir = opendir(base_directory_name);
+ if (dir) {
+ while (struct dirent *entry = readdir(dir)) {
+ struct stat file_status;
+ if (stat(entry->d_name, &file_status) != 0) {
+ continue;
+ }
+ if (!((file_status.st_mode & S_IFMT) && S_IFREG)) {
+ continue;
+ }
+ if (strncmp(entry->d_name, base_path, base_path_length) == 0) {
+ unlink(entry->d_name);
+ }
+ }
+ closedir(dir);
+ }
+#endif
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::remove_grn_obj_force(const char *name)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_obj *obj = grn_ctx_get(ctx, name, strlen(name));
+ if (obj) {
+ grn_obj_remove(ctx, obj);
+ } else {
+ grn_obj *db = grn_ctx_db(ctx);
+ grn_id id = grn_table_get(ctx, db, name, strlen(name));
+ if (id) {
+ char path[MRN_MAX_PATH_SIZE];
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ if (grn_obj_path_by_id(ctx, db, id, path) == GRN_SUCCESS) {
+ remove_related_files(path);
+ }
+ }
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::drop_index(MRN_SHARE *target_share, uint key_index)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ grn_rc rc = GRN_SUCCESS;
+ char target_name[GRN_TABLE_MAX_KEY_SIZE];
+ int target_name_length;
+
+ KEY *key_info = target_share->table_share->key_info;
+ if (!target_share->wrapper_mode && target_share->index_table[key_index]) {
+ const char *table_name = target_share->index_table[key_index];
+ snprintf(target_name, GRN_TABLE_MAX_KEY_SIZE,
+ "%s.%s", table_name, key_info[key_index].name);
+ grn_obj *index_column = grn_ctx_get(ctx, target_name, strlen(target_name));
+ if (index_column) {
+ rc = grn_obj_remove(ctx, index_column);
+ }
+ } else {
+ mrn::PathMapper mapper(target_share->table_name);
+ mrn::IndexTableName index_table_name(mapper.table_name(),
+ key_info[key_index].name);
+ grn_obj *index_table = grn_ctx_get(ctx,
+ index_table_name.c_str(),
+ index_table_name.length());
+ if (index_table) {
+ target_name_length = grn_obj_name(ctx, index_table,
+ target_name, GRN_TABLE_MAX_KEY_SIZE);
+ rc = grn_obj_remove(ctx, index_table);
+ }
+ }
+
+ if (rc != GRN_SUCCESS) {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to drop index: <%.*s>: <%s>",
+ target_name_length, target_name,
+ ctx->errbuf);
+ my_message(ER_ERROR_ON_WRITE, error_message, MYF(0));
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%s", error_message);
+ }
+
+ DBUG_RETURN(error);
+}
+
+grn_obj *ha_mroonga::find_tokenizer(const char *name, int name_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (strncasecmp("off", name, name_length) == 0) {
+ DBUG_RETURN(NULL);
+ }
+
+ grn_obj *tokenizer;
+ mrn_change_encoding(ctx, system_charset_info);
+ tokenizer = grn_ctx_get(ctx, name, name_length);
+ if (!tokenizer) {
+ char message[MRN_BUFFER_SIZE];
+ sprintf(message,
+ "specified fulltext parser <%.*s> doesn't exist. "
+ "default fulltext parser <%s> is used instead.",
+ name_length, name,
+ MRN_PARSER_DEFAULT);
+ push_warning(ha_thd(),
+ Sql_condition::WARN_LEVEL_WARN, ER_UNSUPPORTED_EXTENSION,
+ message);
+ tokenizer = grn_ctx_get(ctx,
+ MRN_PARSER_DEFAULT,
+ strlen(MRN_PARSER_DEFAULT));
+ }
+ if (!tokenizer) {
+ push_warning(ha_thd(),
+ Sql_condition::WARN_LEVEL_WARN, ER_UNSUPPORTED_EXTENSION,
+ "couldn't find fulltext parser. "
+ "Bigram fulltext parser is used instead.");
+ tokenizer = grn_ctx_at(ctx, GRN_DB_BIGRAM);
+ }
+ DBUG_RETURN(tokenizer);
+}
+
+grn_obj *ha_mroonga::find_normalizer(KEY *key_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ grn_obj *normalizer = NULL;
+#if MYSQL_VERSION_ID >= 50500
+ if (key_info->comment.length > 0) {
+ mrn::ParametersParser parser(key_info->comment.str,
+ key_info->comment.length);
+ parser.parse();
+ const char *normalizer_name = parser["normalizer"];
+ if (normalizer_name) {
+ normalizer = grn_ctx_get(ctx, normalizer_name, -1);
+ }
+ }
+#endif
+ if (!normalizer) {
+ Field *field = key_info->key_part[0].field;
+ mrn::FieldNormalizer field_normalizer(ctx, ha_thd(), field);
+ normalizer = field_normalizer.find_grn_normalizer();
+ }
+ DBUG_RETURN(normalizer);
+}
+
+bool ha_mroonga::find_token_filters(KEY *key_info, grn_obj *token_filters)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool found = false;
+#if MYSQL_VERSION_ID >= 50500
+ if (key_info->comment.length > 0) {
+ mrn::ParametersParser parser(key_info->comment.str,
+ key_info->comment.length);
+ parser.parse();
+ const char *names = parser["token_filters"];
+ if (names) {
+ found = find_token_filters_fill(token_filters, names, strlen(names));
+ }
+ }
+#endif
+ DBUG_RETURN(found);
+}
+
+bool ha_mroonga::find_token_filters_put(grn_obj *token_filters,
+ const char *token_filter_name,
+ int token_filter_name_length)
+{
+ grn_obj *token_filter;
+
+ token_filter = grn_ctx_get(ctx,
+ token_filter_name,
+ token_filter_name_length);
+ if (token_filter) {
+ GRN_PTR_PUT(ctx, token_filters, token_filter);
+ return true;
+ } else {
+ char message[MRN_BUFFER_SIZE];
+ sprintf(message,
+ "nonexistent token filter: <%.*s>",
+ token_filter_name_length, token_filter_name);
+ push_warning(ha_thd(),
+ Sql_condition::WARN_LEVEL_WARN, ER_UNSUPPORTED_EXTENSION,
+ message);
+ return false;
+ }
+}
+
+bool ha_mroonga::find_token_filters_fill(grn_obj *token_filters,
+ const char *token_filter_names,
+ int token_filter_names_length)
+{
+ const char *start, *current, *end;
+ const char *name_start, *name_end;
+ const char *last_name_end;
+
+ start = token_filter_names;
+ end = start + token_filter_names_length;
+ current = start;
+ name_start = NULL;
+ name_end = NULL;
+ last_name_end = start;
+ while (current < end) {
+ switch (current[0]) {
+ case ' ' :
+ if (name_start && !name_end) {
+ name_end = current;
+ }
+ break;
+ case ',' :
+ if (!name_start) {
+ goto break_loop;
+ }
+ if (!name_end) {
+ name_end = current;
+ }
+ find_token_filters_put(token_filters,
+ name_start,
+ name_end - name_start);
+ last_name_end = name_end + 1;
+ name_start = NULL;
+ name_end = NULL;
+ break;
+ default :
+ if (!name_start) {
+ name_start = current;
+ }
+ break;
+ }
+ current++;
+ }
+
+break_loop:
+ if (!name_start) {
+ char message[MRN_BUFFER_SIZE];
+ sprintf(message,
+ "empty token filter name: "
+ "<%.*s|%.*s|%.*s>",
+ (int)(last_name_end - start), start,
+ (int)(current - last_name_end), last_name_end,
+ (int)(end - current), current);
+ push_warning(ha_thd(),
+ Sql_condition::WARN_LEVEL_WARN, ER_UNSUPPORTED_EXTENSION,
+ message);
+ return false;
+ }
+
+ if (!name_end) {
+ name_end = current;
+ }
+ find_token_filters_put(token_filters,
+ name_start,
+ name_end - name_start);
+
+ return true;
+}
+
+int ha_mroonga::wrapper_get_record(uchar *buf, const uchar *key)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (wrap_handler->inited == NONE) {
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_IDX_MAP
+ error = wrap_handler->ha_index_read_idx_map(buf,
+ share->wrap_primary_key,
+ key,
+ pk_keypart_map,
+ HA_READ_KEY_EXACT);
+#else
+ error = wrap_handler->index_read_idx_map(buf,
+ share->wrap_primary_key,
+ key,
+ pk_keypart_map,
+ HA_READ_KEY_EXACT);
+#endif
+ } else {
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
+ error = wrap_handler->ha_index_read_map(buf,
+ key,
+ pk_keypart_map,
+ HA_READ_KEY_EXACT);
+#else
+ error = wrap_handler->index_read_map(buf,
+ key,
+ pk_keypart_map,
+ HA_READ_KEY_EXACT);
+#endif
+ }
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_get_next_geo_record(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ mrn_change_encoding(ctx, NULL);
+ do {
+ GRN_BULK_REWIND(&key_buffer);
+ grn_id found_record_id;
+ grn_posting *posting;
+ posting = grn_geo_cursor_next(ctx, cursor_geo);
+ if (!posting) {
+ error = HA_ERR_END_OF_FILE;
+ clear_cursor_geo();
+ break;
+ }
+ found_record_id = posting->rid;
+ grn_table_get_key(ctx, grn_table, found_record_id,
+ GRN_TEXT_VALUE(&key_buffer),
+ table->key_info->key_length);
+ error = wrapper_get_record(buf, (const uchar *)GRN_TEXT_VALUE(&key_buffer));
+ } while (error == HA_ERR_END_OF_FILE || error == HA_ERR_KEY_NOT_FOUND);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_get_next_record(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (cursor_geo) {
+ grn_posting *posting;
+ posting = grn_geo_cursor_next(ctx, cursor_geo);
+ if (posting) {
+ record_id = posting->rid;
+ } else {
+ record_id = GRN_ID_NIL;
+ }
+ } else if (cursor) {
+ record_id = grn_table_cursor_next(ctx, cursor);
+ } else if (empty_value_records_cursor) {
+ grn_id empty_value_record_id;
+ empty_value_record_id =
+ grn_table_cursor_next(ctx, empty_value_records_cursor);
+ if (empty_value_record_id == GRN_ID_NIL) {
+ record_id = GRN_ID_NIL;
+ } else {
+ grn_table_get_key(ctx, empty_value_records, empty_value_record_id,
+ &record_id, sizeof(grn_id));
+ }
+ } else {
+ record_id = GRN_ID_NIL;
+ }
+ if (ctx->rc) {
+ int error = ER_ERROR_ON_READ;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ if (record_id == GRN_ID_NIL) {
+ DBUG_PRINT("info", ("mroonga: storage_get_next_record: end-of-file"));
+ table->status = STATUS_NOT_FOUND;
+ DBUG_RETURN(HA_ERR_END_OF_FILE);
+ }
+ if (buf) {
+ if (ignoring_no_key_columns)
+ storage_store_fields_by_index(buf);
+ else
+ storage_store_fields(buf, record_id);
+ if (cursor_geo && grn_source_column_geo) {
+ int latitude, longitude;
+ GRN_GEO_POINT_VALUE(&source_point, latitude, longitude);
+ double latitude_in_degree = GRN_GEO_MSEC2DEGREE(latitude);
+ double longitude_in_degree = GRN_GEO_MSEC2DEGREE(longitude);
+ if (!((bottom_right_latitude_in_degree <= latitude_in_degree &&
+ latitude_in_degree <= top_left_latitude_in_degree) &&
+ (top_left_longitude_in_degree <= longitude_in_degree &&
+ longitude_in_degree <= bottom_right_longitude_in_degree))) {
+ DBUG_PRINT("info",
+ ("mroonga: remove not contained geo point: "
+ "<%g,%g>(<%d,%d>); key: <%g,%g>(<%d,%d>), <%g,%g>(<%d,%d>)",
+ latitude_in_degree, longitude_in_degree,
+ latitude, longitude,
+ top_left_latitude_in_degree, top_left_longitude_in_degree,
+ GRN_GEO_DEGREE2MSEC(top_left_latitude_in_degree),
+ GRN_GEO_DEGREE2MSEC(top_left_longitude_in_degree),
+ bottom_right_latitude_in_degree,
+ bottom_right_longitude_in_degree,
+ GRN_GEO_DEGREE2MSEC(bottom_right_latitude_in_degree),
+ GRN_GEO_DEGREE2MSEC(bottom_right_longitude_in_degree)));
+ int error = storage_get_next_record(buf);
+ DBUG_RETURN(error);
+ }
+ }
+ }
+ table->status = 0;
+ DBUG_RETURN(0);
+}
+
+void ha_mroonga::geo_store_rectangle(const uchar *rectangle)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ double locations[4];
+ for (int i = 0; i < 4; i++) {
+ uchar reversed_value[8];
+ for (int j = 0; j < 8; j++) {
+ reversed_value[j] = (rectangle + (8 * i))[7 - j];
+ }
+ mi_float8get(locations[i], reversed_value);
+ }
+ top_left_longitude_in_degree = locations[0];
+ bottom_right_longitude_in_degree = locations[1];
+ bottom_right_latitude_in_degree = locations[2];
+ top_left_latitude_in_degree = locations[3];
+ int top_left_latitude = GRN_GEO_DEGREE2MSEC(top_left_latitude_in_degree);
+ int top_left_longitude = GRN_GEO_DEGREE2MSEC(top_left_longitude_in_degree);
+ int bottom_right_latitude = GRN_GEO_DEGREE2MSEC(bottom_right_latitude_in_degree);
+ int bottom_right_longitude = GRN_GEO_DEGREE2MSEC(bottom_right_longitude_in_degree);
+ GRN_GEO_POINT_SET(ctx, &top_left_point,
+ top_left_latitude, top_left_longitude);
+ GRN_GEO_POINT_SET(ctx, &bottom_right_point,
+ bottom_right_latitude, bottom_right_longitude);
+
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::generic_geo_open_cursor(const uchar *key,
+ enum ha_rkey_function find_flag)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ int flags = 0;
+ if (find_flag & HA_READ_MBR_CONTAIN) {
+ grn_obj *index = grn_index_columns[active_index];
+ geo_store_rectangle(key);
+ cursor_geo = grn_geo_cursor_open_in_rectangle(ctx,
+ index,
+ &top_left_point,
+ &bottom_right_point,
+ 0, -1);
+ if (cursor_geo) {
+ if (grn_source_column_geo) {
+ grn_obj_unlink(ctx, grn_source_column_geo);
+ }
+ grn_obj sources;
+ GRN_OBJ_INIT(&sources, GRN_BULK, 0, GRN_ID_NIL);
+ grn_obj_get_info(ctx, index, GRN_INFO_SOURCE, &sources);
+ grn_source_column_geo = grn_ctx_at(ctx, GRN_RECORD_VALUE(&sources));
+ grn_obj_unlink(ctx, &sources);
+ }
+ } else {
+ push_warning_unsupported_spatial_index_search(find_flag);
+ cursor = grn_table_cursor_open(ctx, grn_table, NULL, 0, NULL, 0,
+ 0, -1, flags);
+ }
+ if (ctx->rc) {
+ error = ER_ERROR_ON_READ;
+ my_message(error, ctx->errbuf, MYF(0));
+ }
+ DBUG_RETURN(error);
+}
+
+bool ha_mroonga::is_dry_write()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool dry_write_p = THDVAR(ha_thd(), dry_write);
+ DBUG_RETURN(dry_write_p);
+}
+
+bool ha_mroonga::is_enable_optimization()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool enable_optimization_p = THDVAR(ha_thd(), enable_optimization);
+ DBUG_RETURN(enable_optimization_p);
+}
+
+bool ha_mroonga::should_normalize(Field *field) const
+{
+ MRN_DBUG_ENTER_METHOD();
+ mrn::FieldNormalizer field_normalizer(ctx, ha_thd(), field);
+ bool need_normalize_p = field_normalizer.should_normalize();
+ DBUG_RETURN(need_normalize_p);
+}
+
+bool ha_mroonga::is_temporary_table_name(const char *name) const
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: table name = %s", name));
+#ifdef MRN_USE_MYSQL_DATA_HOME
+ bool temporary_table_name_p = false;
+ if (name[0] != '.') {
+ int len = strlen(name);
+ int mysql_data_home_len = strlen(mysql_data_home);
+ if (len < mysql_data_home_len ||
+ strncmp(name, mysql_data_home, mysql_data_home_len) ||
+ !strchr(&name[mysql_data_home_len], FN_LIBCHAR)) {
+ temporary_table_name_p = true;
+ }
+ }
+#else
+ bool temporary_table_name_p = (name[0] != '.');
+#endif
+ DBUG_RETURN(temporary_table_name_p);
+}
+
+void ha_mroonga::check_count_skip(key_part_map start_key_part_map,
+ key_part_map end_key_part_map, bool fulltext)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!is_enable_optimization()) {
+ DBUG_PRINT("info", ("mroonga: count skip: optimization is disabled"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+
+ st_select_lex *select_lex = table->pos_in_table_list->select_lex;
+
+ if (
+ thd_sql_command(ha_thd()) == SQLCOM_SELECT &&
+ !select_lex->non_agg_fields.elements &&
+ !select_lex->group_list.elements &&
+ !select_lex->having &&
+ select_lex->table_list.elements == 1
+ ) {
+ Item *info = (Item *) select_lex->item_list.first_node()->info;
+ if (
+ info->type() != Item::SUM_FUNC_ITEM ||
+ ((Item_sum *) info)->sum_func() != Item_sum::COUNT_FUNC ||
+ ((Item_sum *) info)->nest_level ||
+ ((Item_sum *) info)->aggr_level ||
+ ((Item_sum *) info)->max_arg_level != -1 ||
+ ((Item_sum *) info)->max_sum_func_level != -1
+ ) {
+ DBUG_PRINT("info", ("mroonga: count skip: sum func is not match"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+
+ uint i = 0;
+ Item *where;
+ if (fulltext) {
+ DBUG_PRINT("info", ("mroonga: count skip: fulltext"));
+ where = select_lex->where;
+ if (!where ||
+ where->type() != Item::FUNC_ITEM ||
+ ((Item_func *)where)->functype() != Item_func::FT_FUNC) {
+ DBUG_PRINT("info", ("mroonga: count skip: ft func is not match"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+ where = where->next;
+ if (!where ||
+ where->type() != Item::STRING_ITEM) {
+ DBUG_PRINT("info", ("mroonga: count skip: string item is not match"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+ for (where = where->next; where; where = where->next) {
+ if (where->type() != Item::FIELD_ITEM)
+ break;
+ DBUG_PRINT("info", ("mroonga: count skip: FIELD_ITEM=%p", where));
+ }
+ if (where != info) {
+ DBUG_PRINT("info", ("mroonga: count skip: where clause is not match"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+ if (share->wrapper_mode &&
+ !(wrap_handler->ha_table_flags() & HA_NO_TRANSACTIONS)) {
+ DBUG_PRINT("info", ("mroonga: count skip: transactional wrapper mode"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ }
+ DBUG_PRINT("info", ("mroonga: count skip: skip enabled"));
+ count_skip = true;
+ mrn_count_skip++;
+ DBUG_VOID_RETURN;
+ } else if (share->wrapper_mode) {
+ DBUG_PRINT("info", ("mroonga: count skip: wrapper mode"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+ } else {
+ DBUG_PRINT("info", ("mroonga: count skip: without fulltext"));
+ uint key_nr = active_index;
+ KEY key_info = table->key_info[key_nr];
+ KEY_PART_INFO *key_part = key_info.key_part;
+ for (where = select_lex->where; where; where = where->next) {
+ if (where->type() == Item::FIELD_ITEM)
+ {
+ Field *field = ((Item_field *)where)->field;
+ if (!field)
+ break;
+ if (field->table != table)
+ break;
+ uint j;
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ if (key_part[j].field == field)
+ {
+ if (!(start_key_part_map >> j) && !(end_key_part_map >> j))
+ j = KEY_N_KEY_PARTS(&key_info);
+ else
+ i++;
+ break;
+ }
+ }
+ if (j >= KEY_N_KEY_PARTS(&key_info))
+ break;
+ }
+ if (i >= select_lex->select_n_where_fields)
+ {
+ DBUG_PRINT("info", ("mroonga: count skip: skip enabled"));
+ count_skip = true;
+ mrn_count_skip++;
+ DBUG_VOID_RETURN;
+ }
+ }
+ DBUG_PRINT("info", ("mroonga: count skip: skip disabled"));
+ }
+ }
+ DBUG_PRINT("info", ("mroonga: count skip: select type is not match"));
+ count_skip = false;
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::is_grn_zero_column_value(grn_obj *column, grn_obj *value)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (column->header.type != GRN_COLUMN_FIX_SIZE) {
+ DBUG_RETURN(false);
+ }
+
+ char *bytes = GRN_BULK_HEAD(value);
+ unsigned int size = GRN_BULK_VSIZE(value);
+ for (unsigned int i = 0; i < size; ++i) {
+ if (bytes[i] != '\0') {
+ DBUG_RETURN(false);
+ }
+ }
+
+ DBUG_RETURN(true);
+}
+
+void ha_mroonga::check_fast_order_limit(grn_table_sort_key **sort_keys,
+ int *n_sort_keys,
+ longlong *limit)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!is_enable_optimization()) {
+ DBUG_PRINT("info", ("mroonga: fast order limit: optimization is disabled"));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+ }
+
+ TABLE_LIST *table_list = table->pos_in_table_list;
+ st_select_lex *select_lex = table_list->select_lex;
+ SELECT_LEX_UNIT *unit = table_list->derived;
+ st_select_lex *first_select_lex;
+ if (unit)
+ {
+ first_select_lex = unit->first_select();
+ } else {
+ first_select_lex = select_lex;
+ }
+ DBUG_PRINT("info",
+ ("mroonga: first_select_lex->options=%llu",
+ first_select_lex ? first_select_lex->options : 0));
+
+ if (
+ thd_sql_command(ha_thd()) == SQLCOM_SELECT &&
+ !select_lex->with_sum_func &&
+ !select_lex->group_list.elements &&
+ !select_lex->having &&
+ select_lex->table_list.elements == 1 &&
+ select_lex->order_list.elements &&
+ select_lex->explicit_limit &&
+ select_lex->select_limit &&
+ select_lex->select_limit->val_int() > 0
+ ) {
+ if (select_lex->offset_limit) {
+ *limit = select_lex->offset_limit->val_int();
+ } else {
+ *limit = 0;
+ }
+ *limit += select_lex->select_limit->val_int();
+ if (*limit > (longlong)INT_MAX) {
+ DBUG_PRINT("info",
+ ("mroonga: fast_order_limit = false: "
+ "too long limit: %lld <= %d is required",
+ *limit, INT_MAX));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+ }
+ if (first_select_lex && (first_select_lex->options & OPTION_FOUND_ROWS)) {
+ DBUG_PRINT("info",
+ ("mroonga: fast_order_limit = false: "
+ "SQL_CALC_FOUND_ROWS is specified"));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+ }
+ Item *where = select_lex->where;
+ const Item_func *match_against = NULL;
+ if (where) {
+ bool is_storage_mode = !(share->wrapper_mode);
+ mrn::ConditionConverter converter(ctx, grn_table, is_storage_mode);
+ if (!converter.is_convertable(where)) {
+ DBUG_PRINT("info",
+ ("mroonga: fast_order_limit = false: "
+ "not groonga layer condition search"));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+ }
+ match_against = converter.find_match_against(where);
+ if (!match_against) {
+ DBUG_PRINT("info",
+ ("mroonga: fast_order_limit = false: "
+ "groonga layer condition but not fulltext search"));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+ }
+ }
+ *n_sort_keys = select_lex->order_list.elements;
+ *sort_keys = (grn_table_sort_key *)malloc(sizeof(grn_table_sort_key) *
+ *n_sort_keys);
+ ORDER *order;
+ int i;
+ mrn_change_encoding(ctx, system_charset_info);
+ for (order = (ORDER *) select_lex->order_list.first, i = 0; order;
+ order = order->next, i++) {
+ Item *item = *order->item;
+ if (grn_columns && item->type() == Item::FIELD_ITEM)
+ {
+ Field *field = ((Item_field *) (*order->item))->field;
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+
+ if (should_normalize(field))
+ {
+ DBUG_PRINT("info", ("mroonga: fast_order_limit = false: "
+ "sort by collated value isn't supported yet."));
+ fast_order_limit = false;
+ free(*sort_keys);
+ *sort_keys = NULL;
+ *n_sort_keys = 0;
+ DBUG_VOID_RETURN;
+ }
+
+ (*sort_keys)[i].key = grn_obj_column(ctx, matched_record_keys,
+ column_name, column_name_size);
+ } else if (!match_against || match_against->eq(item, true)) {
+ (*sort_keys)[i].key = grn_obj_column(ctx, matched_record_keys,
+ MRN_COLUMN_NAME_SCORE,
+ strlen(MRN_COLUMN_NAME_SCORE));
+ } else {
+ DBUG_PRINT("info", ("mroonga: fast_order_limit = false: "
+ "sort by computed value isn't supported."));
+ fast_order_limit = false;
+ free(*sort_keys);
+ *sort_keys = NULL;
+ *n_sort_keys = 0;
+ DBUG_VOID_RETURN;
+ }
+ (*sort_keys)[i].offset = 0;
+ if (MRN_ORDER_IS_ASC(order))
+ {
+ (*sort_keys)[i].flags = GRN_TABLE_SORT_ASC;
+ } else {
+ (*sort_keys)[i].flags = GRN_TABLE_SORT_DESC;
+ }
+ }
+ DBUG_PRINT("info", ("mroonga: fast_order_limit = true"));
+ fast_order_limit = true;
+ mrn_fast_order_limit++;
+ DBUG_VOID_RETURN;
+ }
+ DBUG_PRINT("info", ("mroonga: fast_order_limit = false"));
+ fast_order_limit = false;
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::generic_store_bulk_fixed_size_string(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ grn_obj_reinit(ctx, buf, GRN_DB_SHORT_TEXT, 0);
+ GRN_TEXT_SET(ctx, buf, field->ptr, field->field_length);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_variable_size_string(Field *field,
+ grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ String value;
+ field->val_str(NULL, &value);
+ grn_obj_reinit(ctx, buf, GRN_DB_SHORT_TEXT, 0);
+ DBUG_PRINT("info", ("mroonga: length=%u", value.length()));
+ DBUG_PRINT("info", ("mroonga: value=%s", value.c_ptr_safe()));
+ GRN_TEXT_SET(ctx, buf, value.ptr(), value.length());
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_integer(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ long long value = field->val_int();
+ DBUG_PRINT("info", ("mroonga: value=%lld", value));
+ uint32 size = field->pack_length();
+ DBUG_PRINT("info", ("mroonga: size=%u", size));
+ Field_num *field_num = static_cast<Field_num *>(field);
+ bool is_unsigned = field_num->unsigned_flag;
+ DBUG_PRINT("info", ("mroonga: is_unsigned=%s", is_unsigned ? "true" : "false"));
+ switch (size) {
+ case 1:
+ if (is_unsigned) {
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT8, 0);
+ GRN_UINT8_SET(ctx, buf, value);
+ } else {
+ grn_obj_reinit(ctx, buf, GRN_DB_INT8, 0);
+ GRN_INT8_SET(ctx, buf, value);
+ }
+ break;
+ case 2:
+ if (is_unsigned) {
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT16, 0);
+ GRN_UINT16_SET(ctx, buf, value);
+ } else {
+ grn_obj_reinit(ctx, buf, GRN_DB_INT16, 0);
+ GRN_INT16_SET(ctx, buf, value);
+ }
+ break;
+ case 3:
+ case 4:
+ if (is_unsigned) {
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT32, 0);
+ GRN_UINT32_SET(ctx, buf, value);
+ } else {
+ grn_obj_reinit(ctx, buf, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, buf, value);
+ }
+ break;
+ case 8:
+ if (is_unsigned) {
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT64, 0);
+ GRN_UINT64_SET(ctx, buf, value);
+ } else {
+ grn_obj_reinit(ctx, buf, GRN_DB_INT64, 0);
+ GRN_INT64_SET(ctx, buf, value);
+ }
+ break;
+ default:
+ // Why!?
+ error = HA_ERR_UNSUPPORTED;
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "unknown integer value size: <%u>: "
+ "available sizes: [1, 2, 3, 4, 8]",
+ size);
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN,
+ error, error_message);
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_unsigned_integer(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ long long signed_value = field->val_int();
+ unsigned long long unsigned_value = *((unsigned long long *)(&signed_value));
+ uint32 size = field->pack_length();
+ switch (size) {
+ case 1:
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT8, 0);
+ GRN_UINT8_SET(ctx, buf, unsigned_value);
+ break;
+ case 2:
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT16, 0);
+ GRN_UINT16_SET(ctx, buf, unsigned_value);
+ break;
+ case 3:
+ case 4:
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT32, 0);
+ GRN_UINT32_SET(ctx, buf, unsigned_value);
+ break;
+ case 8:
+ grn_obj_reinit(ctx, buf, GRN_DB_UINT64, 0);
+ GRN_UINT64_SET(ctx, buf, unsigned_value);
+ break;
+ default:
+ // Why!?
+ error = HA_ERR_UNSUPPORTED;
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "unknown unsigned integer value size: <%u>: "
+ "available sizes: [1, 2, 3, 4, 8]",
+ size);
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN,
+ error, error_message);
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_float(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ double value = field->val_real();
+ uint32 size = field->pack_length();
+ switch (size) {
+ case 4:
+ case 8:
+ grn_obj_reinit(ctx, buf, GRN_DB_FLOAT, 0);
+ GRN_FLOAT_SET(ctx, buf, value);
+ break;
+ default:
+ // Why!?
+ error = HA_ERR_UNSUPPORTED;
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "unknown float value size: <%u>: "
+ "available sizes: [4, 8]",
+ size);
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN,
+ error, error_message);
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+long long int ha_mroonga::get_grn_time_from_timestamp_field(Field_timestamp *field)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int grn_time = 0;
+#ifdef MRN_TIMESTAMP_USE_TIMEVAL
+ int warnings = 0;
+ struct timeval time_value;
+ if (field->get_timestamp(&time_value, &warnings)) {
+ // XXX: Should we report warnings or MySQL does?
+ } else {
+ DBUG_PRINT("info", ("mroonga: timeval tv_sec=%ld", time_value.tv_sec));
+ grn_time = GRN_TIME_PACK(time_value.tv_sec, time_value.tv_usec);
+ }
+#elif defined(MRN_TIMESTAMP_USE_MY_TIME_T)
+ unsigned long int micro_seconds;
+ my_time_t seconds = field->get_timestamp(&micro_seconds);
+ DBUG_PRINT("info", ("mroonga: my_time_t seconds=%ld", seconds));
+ grn_time = GRN_TIME_PACK(seconds, micro_seconds);
+#else
+ my_bool is_null_value;
+ long seconds = field->get_timestamp(&is_null_value);
+ DBUG_PRINT("info", ("mroonga: long seconds=%ld", seconds));
+ grn_time = GRN_TIME_PACK(seconds, 0);
+#endif
+ DBUG_RETURN(grn_time);
+}
+
+int ha_mroonga::generic_store_bulk_timestamp(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ Field_timestamp *timestamp_field = (Field_timestamp *)field;
+ long long int time = get_grn_time_from_timestamp_field(timestamp_field);
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_date(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ long long int date_value = field->val_int();
+ struct tm date;
+ memset(&date, 0, sizeof(struct tm));
+ date.tm_year = date_value / 10000 % 10000 - mrn::TimeConverter::TM_YEAR_BASE;
+ date.tm_mon = date_value / 100 % 100 - 1;
+ date.tm_mday = date_value % 100;
+ int usec = 0;
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.tm_to_grn_time(&date, usec, &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_time(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ Field_time *time_field = (Field_time *)field;
+ MYSQL_TIME mysql_time;
+ time_field->get_time(&mysql_time);
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_datetime(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ Field_datetime *datetime_field = (Field_datetime *)field;
+ MYSQL_TIME mysql_time;
+ datetime_field->get_time(&mysql_time);
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_year(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+
+ int year;
+ if (field->field_length == 2) {
+ year = static_cast<int>(field->val_int() + 2000);
+ } else {
+ year = static_cast<int>(field->val_int());
+ }
+
+ DBUG_PRINT("info", ("mroonga: year=%d", year));
+ struct tm date;
+ memset(&date, 0, sizeof(struct tm));
+ date.tm_year = year - mrn::TimeConverter::TM_YEAR_BASE;
+ date.tm_mon = 0;
+ date.tm_mday = 1;
+
+ int usec = 0;
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.tm_to_grn_time(&date, usec, &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+int ha_mroonga::generic_store_bulk_datetime2(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ Field_datetimef *datetimef_field = (Field_datetimef *)field;
+ MYSQL_TIME mysql_time;
+ datetimef_field->get_time(&mysql_time);
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+#endif
+
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+int ha_mroonga::generic_store_bulk_time2(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ MYSQL_TIME mysql_time;
+ field->get_time(&mysql_time);
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+#endif
+
+int ha_mroonga::generic_store_bulk_new_date(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ Field_newdate *newdate_field = (Field_newdate *)field;
+ MYSQL_TIME mysql_date;
+ newdate_field->get_time(&mysql_date);
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.mysql_time_to_grn_time(&mysql_date,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
+ GRN_TIME_SET(ctx, buf, time);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_new_decimal(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ String value;
+ Field_new_decimal *new_decimal_field = (Field_new_decimal *)field;
+ new_decimal_field->val_str(&value, NULL);
+ grn_obj_reinit(ctx, buf, GRN_DB_SHORT_TEXT, 0);
+ GRN_TEXT_SET(ctx, buf, value.ptr(), value.length());
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_blob(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ String buffer;
+ Field_blob *blob = (Field_blob *)field;
+ const char *value = blob->val_str(0, &buffer)->ptr();
+ grn_obj_reinit(ctx, buf, GRN_DB_TEXT, 0);
+ GRN_TEXT_SET(ctx, buf, value, blob->get_length());
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk_geometry(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+#ifdef HAVE_SPATIAL
+ String buffer;
+ Field_geom *geometry = (Field_geom *)field;
+ const char *wkb = geometry->val_str(0, &buffer)->ptr();
+ int len = geometry->get_length();
+ error = mrn_set_geometry(ctx, buf, wkb, len);
+#endif
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_store_bulk(Field *field, grn_obj *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ return error;
+ switch (field->real_type()) {
+ case MYSQL_TYPE_DECIMAL:
+ error = generic_store_bulk_variable_size_string(field, buf);
+ break;
+ case MYSQL_TYPE_TINY:
+ case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_LONG:
+ error = generic_store_bulk_integer(field, buf);
+ break;
+ case MYSQL_TYPE_FLOAT:
+ case MYSQL_TYPE_DOUBLE:
+ error = generic_store_bulk_float(field, buf);
+ break;
+ case MYSQL_TYPE_NULL:
+ error = generic_store_bulk_unsigned_integer(field, buf);
+ break;
+ case MYSQL_TYPE_TIMESTAMP:
+ error = generic_store_bulk_timestamp(field, buf);
+ break;
+ case MYSQL_TYPE_LONGLONG:
+ case MYSQL_TYPE_INT24:
+ error = generic_store_bulk_integer(field, buf);
+ break;
+ case MYSQL_TYPE_DATE:
+ error = generic_store_bulk_date(field, buf);
+ break;
+ case MYSQL_TYPE_TIME:
+ error = generic_store_bulk_time(field, buf);
+ break;
+ case MYSQL_TYPE_DATETIME:
+ error = generic_store_bulk_datetime(field, buf);
+ break;
+ case MYSQL_TYPE_YEAR:
+ error = generic_store_bulk_year(field, buf);
+ break;
+ case MYSQL_TYPE_NEWDATE:
+ error = generic_store_bulk_new_date(field, buf);
+ break;
+ case MYSQL_TYPE_VARCHAR:
+ error = generic_store_bulk_variable_size_string(field, buf);
+ break;
+ case MYSQL_TYPE_BIT:
+ error = generic_store_bulk_unsigned_integer(field, buf);
+ break;
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2:
+ error = generic_store_bulk_timestamp(field, buf);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2:
+ error = generic_store_bulk_datetime2(field, buf);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2:
+ error = generic_store_bulk_time2(field, buf);
+ break;
+#endif
+ case MYSQL_TYPE_NEWDECIMAL:
+ error = generic_store_bulk_new_decimal(field, buf);
+ break;
+ case MYSQL_TYPE_ENUM:
+ error = generic_store_bulk_unsigned_integer(field, buf);
+ break;
+ case MYSQL_TYPE_SET:
+ error = generic_store_bulk_unsigned_integer(field, buf);
+ break;
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ error = generic_store_bulk_blob(field, buf);
+ break;
+ case MYSQL_TYPE_VAR_STRING:
+ error = generic_store_bulk_variable_size_string(field, buf);
+ break;
+ case MYSQL_TYPE_STRING:
+ error = generic_store_bulk_fixed_size_string(field, buf);
+ break;
+ case MYSQL_TYPE_GEOMETRY:
+ error = generic_store_bulk_geometry(field, buf);
+ break;
+ default:
+ error = HA_ERR_UNSUPPORTED;
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+void ha_mroonga::storage_store_field_string(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ field->store(value, value_length, field->charset());
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_integer(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ Field_num *field_num = static_cast<Field_num *>(field);
+ bool is_unsigned = field_num->unsigned_flag;
+ switch (value_length) {
+ case 1:
+ {
+ if (is_unsigned) {
+ unsigned char field_value;
+ field_value = *((unsigned char *)value);
+ field->store(field_value, is_unsigned);
+ } else {
+ signed char field_value;
+ field_value = *((signed char *)value);
+ field->store(field_value, is_unsigned);
+ }
+ break;
+ }
+ case 2:
+ {
+ if (is_unsigned) {
+ unsigned short field_value;
+ field_value = *((unsigned short *)value);
+ field->store(field_value, is_unsigned);
+ } else {
+ short field_value;
+ field_value = *((short *)value);
+ field->store(field_value, is_unsigned);
+ }
+ break;
+ }
+ case 4:
+ {
+ if (is_unsigned) {
+ unsigned int field_value;
+ field_value = *((unsigned int *)value);
+ field->store(field_value, is_unsigned);
+ } else {
+ int field_value;
+ field_value = *((int *)value);
+ field->store(field_value, is_unsigned);
+ }
+ break;
+ }
+ case 8:
+ {
+ if (is_unsigned) {
+ unsigned long long int field_value;
+ field_value = *((unsigned long long int *)value);
+ DBUG_PRINT("info", ("mroonga: field_value=%llu", field_value));
+ field->store(field_value, is_unsigned);
+ } else {
+ long long int field_value;
+ field_value = *((long long int *)value);
+ field->store(field_value, is_unsigned);
+ }
+ break;
+ }
+ default:
+ {
+ // Why!?
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "unknown integer value size: <%d>: "
+ "available sizes: [1, 2, 4, 8]",
+ value_length);
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED, error_message);
+ storage_store_field_string(field, value, value_length);
+ break;
+ }
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_unsigned_integer(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ switch (value_length) {
+ case 1:
+ {
+ unsigned char field_value;
+ field_value = *((unsigned char *)value);
+ field->store(field_value, true);
+ break;
+ }
+ case 2:
+ {
+ unsigned short field_value;
+ field_value = *((unsigned short *)value);
+ field->store(field_value, true);
+ break;
+ }
+ case 4:
+ {
+ unsigned int field_value;
+ field_value = *((unsigned int *)value);
+ field->store(field_value, true);
+ break;
+ }
+ case 8:
+ {
+ unsigned long long int field_value;
+ field_value = *((unsigned long long int *)value);
+ DBUG_PRINT("info", ("mroonga: field_value=%llu", field_value));
+ field->store(field_value, true);
+ break;
+ }
+ default:
+ {
+ // Why!?
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "unknown integer value size: <%d>: "
+ "available sizes: [1, 2, 4, 8]",
+ value_length);
+ push_warning(ha_thd(), Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED, error_message);
+ storage_store_field_string(field, value, value_length);
+ break;
+ }
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_float(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ double field_value;
+ field_value = *((double *)value);
+ field->store(field_value);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_timestamp(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ Field_timestamp *timestamp_field = (Field_timestamp *)field;
+#ifdef MRN_TIMESTAMP_USE_TIMEVAL
+ struct timeval time_value;
+ GRN_TIME_UNPACK(time, time_value.tv_sec, time_value.tv_usec);
+ timestamp_field->store_timestamp(&time_value);
+#elif defined(MRN_TIMESTAMP_USE_MY_TIME_T)
+ long long int sec, usec;
+ GRN_TIME_UNPACK(time, sec, usec);
+ timestamp_field->store_TIME(static_cast<int32>(sec),
+ static_cast<int32>(usec));
+#else
+ int32 sec, usec __attribute__((unused));
+ GRN_TIME_UNPACK(time, sec, usec);
+ timestamp_field->store_timestamp(sec);
+#endif
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_date(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ long long int sec, usec __attribute__((unused));
+ GRN_TIME_UNPACK(time, sec, usec);
+ struct tm date;
+ time_t sec_t = static_cast<int32>(sec);
+ gmtime_r(&sec_t, &date);
+ long long int date_in_mysql =
+ (date.tm_year + mrn::TimeConverter::TM_YEAR_BASE) * 10000 +
+ (date.tm_mon + 1) * 100 +
+ date.tm_mday;
+ field->store(date_in_mysql, false);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_time(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ MYSQL_TIME mysql_time;
+ memset(&mysql_time, 0, sizeof(MYSQL_TIME));
+ mysql_time.time_type = MYSQL_TIMESTAMP_TIME;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_time);
+#ifdef MRN_FIELD_STORE_TIME_NEED_TYPE
+ Field_time *time_field = (Field_time *)field;
+ time_field->store_time(&mysql_time, mysql_time.time_type);
+#else
+ field->store_time(&mysql_time);
+#endif
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_datetime(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ MYSQL_TIME mysql_datetime;
+ memset(&mysql_datetime, 0, sizeof(MYSQL_TIME));
+ mysql_datetime.time_type = MYSQL_TIMESTAMP_DATETIME;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_datetime);
+#ifdef MRN_FIELD_STORE_TIME_NEED_TYPE
+ Field_datetime *datetime_field = (Field_datetime *)field;
+ datetime_field->store_time(&mysql_datetime, mysql_datetime.time_type);
+#else
+ field->store_time(&mysql_datetime);
+#endif
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_year(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ MYSQL_TIME mysql_time;
+ memset(&mysql_time, 0, sizeof(MYSQL_TIME));
+ mysql_time.time_type = MYSQL_TIMESTAMP_DATE;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_time);
+ DBUG_PRINT("info", ("mroonga: stored %d", mysql_time.year));
+ field->store(mysql_time.year, false);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_new_date(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ MYSQL_TIME mysql_date;
+ memset(&mysql_date, 0, sizeof(MYSQL_TIME));
+ mysql_date.time_type = MYSQL_TIMESTAMP_DATE;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_date);
+#ifdef MRN_FIELD_STORE_TIME_NEED_TYPE
+ Field_newdate *newdate_field = (Field_newdate *)field;
+ newdate_field->store_time(&mysql_date, MYSQL_TIMESTAMP_DATE);
+#else
+ field->store_time(&mysql_date);
+#endif
+ DBUG_VOID_RETURN;
+}
+
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+void ha_mroonga::storage_store_field_datetime2(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+ MYSQL_TIME mysql_datetime;
+ memset(&mysql_datetime, 0, sizeof(MYSQL_TIME));
+ mysql_datetime.time_type = MYSQL_TIMESTAMP_DATETIME;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_datetime);
+ field->store_time(&mysql_datetime);
+ DBUG_VOID_RETURN;
+}
+#endif
+
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+void ha_mroonga::storage_store_field_time2(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int time = *((long long int *)value);
+
+ MYSQL_TIME mysql_time;
+ memset(&mysql_time, 0, sizeof(MYSQL_TIME));
+ mysql_time.time_type = MYSQL_TIMESTAMP_TIME;
+ mrn::TimeConverter time_converter;
+ time_converter.grn_time_to_mysql_time(time, &mysql_time);
+ field->store_time(&mysql_time);
+ DBUG_VOID_RETURN;
+}
+#endif
+
+void ha_mroonga::storage_store_field_blob(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ Field_blob *blob = (Field_blob *)field;
+ String *blob_buffer = &blob_buffers[field->field_index];
+ blob_buffer->length(0);
+ blob_buffer->reserve(value_length);
+ blob_buffer->q_append(value, value_length);
+ blob->set_ptr((uint32) value_length, (uchar *) blob_buffer->ptr());
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field_geometry(Field *field,
+ const char *value,
+ uint value_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+#ifdef HAVE_SPATIAL
+ uchar wkb[SRID_SIZE + WKB_HEADER_SIZE + POINT_DATA_SIZE];
+ grn_geo_point *field_value = (grn_geo_point *)value;
+ int latitude, longitude;
+ latitude = field_value->latitude;
+ longitude = field_value->longitude;
+ if (grn_source_column_geo) {
+ GRN_GEO_POINT_SET(ctx, &source_point, latitude, longitude);
+ }
+ memset(wkb, 0, SRID_SIZE);
+ memset(wkb + SRID_SIZE, Geometry::wkb_ndr, 1); // wkb_ndr is meaningless.
+ int4store(wkb + SRID_SIZE + 1, Geometry::wkb_point);
+ double latitude_in_degree, longitude_in_degree;
+ latitude_in_degree = GRN_GEO_MSEC2DEGREE(latitude);
+ longitude_in_degree = GRN_GEO_MSEC2DEGREE(longitude);
+ float8store(wkb + SRID_SIZE + WKB_HEADER_SIZE,
+ longitude_in_degree);
+ float8store(wkb + SRID_SIZE + WKB_HEADER_SIZE + SIZEOF_STORED_DOUBLE,
+ latitude_in_degree);
+ String *geometry_buffer = &blob_buffers[field->field_index];
+ geometry_buffer->length(0);
+ uint wkb_length = sizeof(wkb) / sizeof(*wkb);
+ Field_geom *geometry = (Field_geom *)field;
+ geometry_buffer->reserve(wkb_length);
+ geometry_buffer->q_append((const char *) wkb, wkb_length);
+ geometry->set_ptr((uint32) wkb_length, (uchar *) geometry_buffer->ptr());
+#endif
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_field(Field *field,
+ const char *value, uint value_length)
+{
+ field->set_notnull();
+ switch (field->real_type()) {
+ case MYSQL_TYPE_DECIMAL:
+ storage_store_field_string(field, value, value_length);
+ break;
+ case MYSQL_TYPE_TINY:
+ case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_LONG:
+ storage_store_field_integer(field, value, value_length);
+ break;
+ case MYSQL_TYPE_FLOAT:
+ case MYSQL_TYPE_DOUBLE:
+ storage_store_field_float(field, value, value_length);
+ break;
+ case MYSQL_TYPE_NULL:
+ storage_store_field_unsigned_integer(field, value, value_length);
+ break;
+ case MYSQL_TYPE_TIMESTAMP:
+ storage_store_field_timestamp(field, value, value_length);
+ break;
+ case MYSQL_TYPE_LONGLONG:
+ case MYSQL_TYPE_INT24:
+ storage_store_field_integer(field, value, value_length);
+ break;
+ case MYSQL_TYPE_DATE:
+ storage_store_field_date(field, value, value_length);
+ break;
+ case MYSQL_TYPE_TIME:
+ storage_store_field_time(field, value, value_length);
+ break;
+ case MYSQL_TYPE_DATETIME:
+ storage_store_field_datetime(field, value, value_length);
+ break;
+ case MYSQL_TYPE_YEAR:
+ storage_store_field_year(field, value, value_length);
+ break;
+ case MYSQL_TYPE_NEWDATE:
+ storage_store_field_new_date(field, value, value_length);
+ break;
+ case MYSQL_TYPE_VARCHAR:
+ storage_store_field_string(field, value, value_length);
+ break;
+ case MYSQL_TYPE_BIT:
+ storage_store_field_unsigned_integer(field, value, value_length);
+ break;
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2:
+ storage_store_field_timestamp(field, value, value_length);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2:
+ storage_store_field_datetime2(field, value, value_length);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2:
+ storage_store_field_time2(field, value, value_length);
+ break;
+#endif
+ case MYSQL_TYPE_NEWDECIMAL:
+ storage_store_field_string(field, value, value_length);
+ break;
+ case MYSQL_TYPE_ENUM:
+ case MYSQL_TYPE_SET:
+ storage_store_field_unsigned_integer(field, value, value_length);
+ break;
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ storage_store_field_blob(field, value, value_length);
+ break;
+ case MYSQL_TYPE_VAR_STRING:
+ case MYSQL_TYPE_STRING:
+ storage_store_field_string(field, value, value_length);
+ break;
+ case MYSQL_TYPE_GEOMETRY:
+ storage_store_field_geometry(field, value, value_length);
+ break;
+ }
+}
+
+void ha_mroonga::storage_store_field_column(Field *field,
+ int nth_column, grn_id record_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_obj *column = grn_columns[nth_column];
+ grn_id range_id = grn_obj_get_range(ctx, column);
+ grn_obj *range = grn_column_ranges[nth_column];
+ grn_obj *value = &new_value_buffer;
+
+ if (mrn::grn::is_table(range)) {
+ if (mrn::grn::is_vector_column(column)) {
+ grn_obj_reinit(ctx, value, range_id, GRN_OBJ_VECTOR);
+ grn_obj_get_value(ctx, column, record_id, value);
+
+ // TODO: Check whether reference type or not
+ grn_obj unvectored_value;
+ GRN_TEXT_INIT(&unvectored_value, 0);
+ int n_ids = GRN_BULK_VSIZE(value) / sizeof(grn_id);
+ for (int i = 0; i < n_ids; i++) {
+ grn_id id = GRN_RECORD_VALUE_AT(value, i);
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, &unvectored_value, mrn_vector_column_delimiter);
+ }
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_length;
+ key_length = grn_table_get_key(ctx, range, id,
+ &key, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_TEXT_PUT(ctx, &unvectored_value, key, key_length);
+ }
+ storage_store_field(field,
+ GRN_TEXT_VALUE(&unvectored_value),
+ GRN_TEXT_LEN(&unvectored_value));
+ GRN_OBJ_FIN(ctx, &unvectored_value);
+ } else {
+ grn_obj_reinit(ctx, value, range_id, 0);
+ grn_obj_get_value(ctx, column, record_id, value);
+
+ grn_id id = GRN_RECORD_VALUE(value);
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_length;
+ key_length = grn_table_get_key(ctx, range, id,
+ &key, GRN_TABLE_MAX_KEY_SIZE);
+ storage_store_field(field, key, key_length);
+ }
+ } else {
+ grn_obj_reinit(ctx, value, range_id, 0);
+ grn_obj_get_value(ctx, column, record_id, value);
+ storage_store_field(field, GRN_BULK_HEAD(value), GRN_BULK_VSIZE(value));
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_fields(uchar *buf, grn_id record_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: stored record ID: %d", record_id));
+
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(buf, table->record[0]);
+
+ Field *primary_key_field = NULL;
+ if (grn_table_is_referenced && table->s->primary_key != MAX_INDEXES) {
+ KEY *key_info = &(table->s->key_info[table->s->primary_key]);
+ primary_key_field = key_info->key_part[0].field;
+ }
+
+ int i;
+ int n_columns = table->s->fields;
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+
+ if (bitmap_is_set(table->read_set, field->field_index) ||
+ bitmap_is_set(table->write_set, field->field_index)) {
+ const char *column_name = field->field_name;
+
+ if (ignoring_no_key_columns) {
+ KEY key_info = table->s->key_info[active_index];
+ if (strcmp(key_info.key_part[0].field->field_name, column_name)) {
+ continue;
+ }
+ }
+
+ mrn::DebugColumnAccess debug_column_access(table, table->write_set);
+ DBUG_PRINT("info", ("mroonga: store column %d(%d)",i,field->field_index));
+ field->move_field_offset(ptr_diff);
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ // for _id column
+ field->set_notnull();
+ field->store((int)record_id);
+ } else if (primary_key_field &&
+ strcmp(primary_key_field->field_name, column_name) == 0) {
+ // for primary key column
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_length;
+ key_length = grn_table_get_key(ctx, grn_table, record_id,
+ &key, GRN_TABLE_MAX_KEY_SIZE);
+ storage_store_field(field, key, key_length);
+ } else {
+ storage_store_field_column(field, i ,record_id);
+ }
+ field->move_field_offset(-ptr_diff);
+ }
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_fields_for_prep_update(const uchar *old_data,
+ uchar *new_data,
+ grn_id record_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: stored record ID: %d", record_id));
+ my_ptrdiff_t ptr_diff_old = PTR_BYTE_DIFF(old_data, table->record[0]);
+ my_ptrdiff_t ptr_diff_new = 0;
+#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS
+ if (!written_by_row_based_binlog) {
+ if (check_written_by_row_based_binlog()) {
+ written_by_row_based_binlog = 2;
+ } else {
+ written_by_row_based_binlog = 1;
+ }
+ }
+ bool need_all_columns =
+ (new_data && written_by_row_based_binlog == 2);
+#endif
+ if (new_data) {
+ ptr_diff_new = PTR_BYTE_DIFF(new_data, table->record[0]);
+ }
+ int i;
+ int n_columns = table->s->fields;
+ for (i = 0; i < n_columns; i++) {
+ Field *field = table->field[i];
+
+ if (
+ !bitmap_is_set(table->read_set, field->field_index) &&
+ !bitmap_is_set(table->write_set, field->field_index) &&
+#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS
+ (
+ need_all_columns ||
+#endif
+ bitmap_is_set(&multiple_column_key_bitmap, field->field_index)
+#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS
+ )
+#endif
+ ) {
+ mrn::DebugColumnAccess debug_column_access(table, table->write_set);
+ DBUG_PRINT("info", ("mroonga: store column %d(%d)",i,field->field_index));
+ grn_obj value;
+ GRN_OBJ_INIT(&value, GRN_BULK, 0, grn_obj_get_range(ctx, grn_columns[i]));
+ grn_obj_get_value(ctx, grn_columns[i], record_id, &value);
+ // old column
+ field->move_field_offset(ptr_diff_old);
+ storage_store_field(field, GRN_BULK_HEAD(&value), GRN_BULK_VSIZE(&value));
+ field->move_field_offset(-ptr_diff_old);
+ if (new_data) {
+ // new column
+ field->move_field_offset(ptr_diff_new);
+ storage_store_field(field, GRN_BULK_HEAD(&value), GRN_BULK_VSIZE(&value));
+ field->move_field_offset(-ptr_diff_new);
+ }
+ GRN_OBJ_FIN(ctx, &value);
+ }
+ }
+
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_store_fields_by_index(uchar *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint key_length;
+ void *key;
+ KEY *key_info = &table->key_info[active_index];
+ if (table->s->primary_key == active_index)
+ key_length = grn_table_cursor_get_key(ctx, cursor, &key);
+ else
+ key_length = grn_table_cursor_get_key(ctx, index_table_cursor, &key);
+
+ if (KEY_N_KEY_PARTS(key_info) == 1) {
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(buf, table->record[0]);
+ Field *field = key_info->key_part->field;
+ mrn::DebugColumnAccess debug_column_access(table, table->write_set);
+ field->move_field_offset(ptr_diff);
+ storage_store_field(field, (const char *)key, key_length);
+ field->move_field_offset(-ptr_diff);
+ } else {
+ uchar enc_buf[MAX_KEY_LENGTH];
+ uint enc_len;
+ mrn::MultipleColumnKeyCodec codec(ctx, ha_thd(), key_info);
+ codec.decode(static_cast<uchar *>(key), key_length, enc_buf, &enc_len);
+ key_restore(buf, enc_buf, key_info, enc_len);
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::storage_encode_key_normalize_min_sort_chars(Field *field,
+ uchar *buf,
+ uint size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ if (size == 0) {
+ DBUG_RETURN(0);
+ }
+ if (!field->has_charset()) {
+ DBUG_RETURN(0);
+ }
+
+ uint16 raw_min_sort_char =
+ static_cast<uint16>(field->sort_charset()->min_sort_char);
+ if (raw_min_sort_char <= UINT_MAX8) {
+ uchar min_sort_char = static_cast<uchar>(raw_min_sort_char);
+ for (uint i = size - 1; i > 0; --i) {
+ if (buf[i] != min_sort_char) {
+ break;
+ }
+ buf[i] = '\0';
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_fixed_size_string(Field *field,
+ const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ memcpy(buf, key, field->field_length);
+ *size = field->field_length;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_variable_size_string(Field *field,
+ const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ *size = uint2korr(key);
+ memcpy(buf, key + HA_KEY_BLOB_LENGTH, *size);
+ storage_encode_key_normalize_min_sort_chars(field, buf, *size);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_timestamp(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ long long int time;
+ MYSQL_TIME mysql_time;
+#ifdef MRN_MARIADB_P
+ if (field->decimals() == 0) {
+ my_time_t my_time = sint4korr(key);
+ mrn_my_tz_UTC->gmt_sec_to_TIME(&mysql_time, my_time);
+ mysql_time.second_part = 0;
+ } else {
+ Field_timestamp_hires *timestamp_hires_field =
+ (Field_timestamp_hires *)field;
+ uint fuzzy_date = 0;
+ uchar *ptr_backup = field->ptr;
+ uchar *null_ptr_backup = field->null_ptr;
+ TABLE *table_backup = field->table;
+ field->ptr = (uchar *)key;
+ field->null_ptr = (uchar *)(key - 1);
+ field->table = table;
+ timestamp_hires_field->get_date(&mysql_time, fuzzy_date);
+ field->ptr = ptr_backup;
+ field->null_ptr = null_ptr_backup;
+ field->table = table_backup;
+ }
+#else
+ my_time_t my_time = uint4korr(key);
+ mrn_my_tz_UTC->gmt_sec_to_TIME(&mysql_time, my_time);
+#endif
+ mrn::TimeConverter time_converter;
+ time = time_converter.mysql_time_to_grn_time(&mysql_time, &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &time, 8);
+ *size = 8;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_time(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ long long int time;
+#ifdef MRN_MARIADB_P
+ MYSQL_TIME mysql_time;
+ bool truncated = false;
+ if (field->decimals() == 0) {
+ long long int packed_time = sint3korr(key);
+ mysql_time.neg = false;
+ if (packed_time < 0) {
+ mysql_time.neg = true;
+ packed_time = -packed_time;
+ }
+ mysql_time.year = 0;
+ mysql_time.month = 0;
+ mysql_time.day = 0;
+ mysql_time.hour = (int)(packed_time / 10000);
+ long long int minute_part = packed_time - mysql_time.hour * 10000;
+ mysql_time.minute = (int)(minute_part / 100);
+ mysql_time.second = (int)(minute_part % 100);
+ mysql_time.second_part = 0;
+ mysql_time.time_type = MYSQL_TIMESTAMP_TIME;
+ } else {
+ Field_time_hires *time_hires_field = (Field_time_hires *)field;
+ uint fuzzy_date = 0;
+ uchar *ptr_backup = field->ptr;
+ uchar *null_ptr_backup = field->null_ptr;
+ field->ptr = (uchar *)key;
+ field->null_ptr = (uchar *)(key - 1);
+ time_hires_field->get_date(&mysql_time, fuzzy_date);
+ field->ptr = ptr_backup;
+ field->null_ptr = null_ptr_backup;
+ }
+ mrn::TimeConverter time_converter;
+ time = time_converter.mysql_time_to_grn_time(&mysql_time, &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+#else
+ int mysql_time = (int)sint3korr(key);
+ int sec =
+ mysql_time / 10000 * 60 * 60 +
+ mysql_time / 100 % 100 * 60 +
+ mysql_time % 60;
+ int usec = 0;
+ time = GRN_TIME_PACK(sec, usec);
+#endif
+ memcpy(buf, &time, 8);
+ *size = 8;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_year(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ int year = (int)key[0];
+
+ struct tm datetime;
+ memset(&datetime, 0, sizeof(struct tm));
+ datetime.tm_year = year;
+ datetime.tm_mon = 0;
+ datetime.tm_mday = 1;
+ int usec = 0;
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.tm_to_grn_time(&datetime, usec,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &time, 8);
+ *size = 8;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_datetime(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+ long long int time;
+#ifdef MRN_MARIADB_P
+ if (field->decimals() > 0) {
+ Field_datetime_hires *datetime_hires_field = (Field_datetime_hires *)field;
+ MYSQL_TIME mysql_time;
+ uint fuzzy_date = 0;
+ uchar *ptr_backup = field->ptr;
+ uchar *null_ptr_backup = field->null_ptr;
+ field->ptr = (uchar *)key;
+ field->null_ptr = (uchar *)(key - 1);
+ datetime_hires_field->get_date(&mysql_time, fuzzy_date);
+ field->ptr = ptr_backup;
+ field->null_ptr = null_ptr_backup;
+ mrn::TimeConverter time_converter;
+ time = time_converter.mysql_time_to_grn_time(&mysql_time, &truncated);
+ } else
+#endif
+ {
+ long long int encoded_datetime = sint8korr(key);
+ uint32 part1 = (uint32)(encoded_datetime / 1000000LL);
+ uint32 part2 = (uint32)(encoded_datetime -
+ (unsigned long long int)part1 * 1000000LL);
+ struct tm date;
+ memset(&date, 0, sizeof(struct tm));
+ date.tm_year = part1 / 10000 - mrn::TimeConverter::TM_YEAR_BASE;
+ date.tm_mon = part1 / 100 % 100 - 1;
+ date.tm_mday = part1 % 100;
+ date.tm_hour = part2 / 10000;
+ date.tm_min = part2 / 100 % 100;
+ date.tm_sec = part2 % 100;
+ int usec = 0;
+ mrn::TimeConverter time_converter;
+ time = time_converter.tm_to_grn_time(&date, usec, &truncated);
+ }
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &time, 8);
+ *size = 8;
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+int ha_mroonga::storage_encode_key_timestamp2(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+
+ Field_timestampf *timestamp2_field = (Field_timestampf *)field;
+ struct timeval tm;
+ my_timestamp_from_binary(&tm, key, timestamp2_field->decimals());
+ MYSQL_TIME mysql_time;
+ mrn_my_tz_UTC->gmt_sec_to_TIME(&mysql_time, (my_time_t)tm.tv_sec);
+ mysql_time.second_part = tm.tv_usec;
+ mrn::TimeConverter time_converter;
+ long long int grn_time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &grn_time, 8);
+ *size = 8;
+
+ DBUG_RETURN(error);
+}
+#endif
+
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+int ha_mroonga::storage_encode_key_datetime2(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+
+ Field_datetimef *datetime2_field = (Field_datetimef *)field;
+ longlong packed_time =
+ my_datetime_packed_from_binary(key, datetime2_field->decimals());
+ MYSQL_TIME mysql_time;
+ TIME_from_longlong_datetime_packed(&mysql_time, packed_time);
+ mrn::TimeConverter time_converter;
+ long long int grn_time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &grn_time, 8);
+ *size = 8;
+
+ DBUG_RETURN(error);
+}
+#endif
+
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+int ha_mroonga::storage_encode_key_time2(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ bool truncated = false;
+
+ Field_timef *time2_field = (Field_timef *)field;
+ longlong packed_time =
+ my_time_packed_from_binary(key, time2_field->decimals());
+ MYSQL_TIME mysql_time;
+ TIME_from_longlong_time_packed(&mysql_time, packed_time);
+ mrn::TimeConverter time_converter;
+ long long int grn_time = time_converter.mysql_time_to_grn_time(&mysql_time,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &grn_time, 8);
+ *size = 8;
+
+ DBUG_RETURN(error);
+}
+#endif
+
+int ha_mroonga::storage_encode_key_enum(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (field->pack_length() == 1) {
+ uchar value;
+ value = key[0];
+ *size = 1;
+ memcpy(buf, &value, *size);
+ } else {
+ uint16 value;
+ shortget(value, key);
+ *size = 2;
+ memcpy(buf, &value, *size);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key_set(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ Field_set unpacker((uchar *)key, field->field_length, (uchar *)(key - 1),
+ field->null_bit, field->unireg_check, field->field_name,
+ field->pack_length(),
+ static_cast<Field_set*>(field)->typelib,
+ static_cast<Field_set*>(field)->charset());
+ switch (field->pack_length()) {
+ case 1:
+ {
+ int8 signed_value = (int8)(unpacker.val_int());
+ uint8 unsigned_value = *((uint8 *)&signed_value);
+ *size = 1;
+ memcpy(buf, &unsigned_value, *size);
+ }
+ break;
+ case 2:
+ {
+ int16 signed_value = (int16)(unpacker.val_int());
+ uint16 unsigned_value = *((uint16 *)&signed_value);
+ *size = 2;
+ memcpy(buf, &unsigned_value, *size);
+ }
+ break;
+ case 3:
+ case 4:
+ {
+ int32 signed_value = (int32)(unpacker.val_int());
+ uint32 unsigned_value = *((uint32 *)&signed_value);
+ *size = 4;
+ memcpy(buf, &unsigned_value, *size);
+ }
+ break;
+ case 8:
+ default:
+ {
+ int64 signed_value = (int64)(unpacker.val_int());
+ uint64 unsigned_value = *((uint64 *)&signed_value);
+ *size = 8;
+ memcpy(buf, &unsigned_value, *size);
+ }
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_key(Field *field, const uchar *key,
+ uchar *buf, uint *size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ bool truncated = false;
+ const uchar *ptr = key;
+
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ DBUG_RETURN(error);
+
+ if (field->null_bit) {
+ ptr += 1;
+ }
+
+ switch (field->real_type()) {
+ case MYSQL_TYPE_BIT:
+ case MYSQL_TYPE_TINY:
+ {
+ memcpy(buf, ptr, 1);
+ *size = 1;
+ break;
+ }
+ case MYSQL_TYPE_SHORT:
+ {
+ memcpy(buf, ptr, 2);
+ *size = 2;
+ break;
+ }
+ case MYSQL_TYPE_INT24:
+ {
+ memcpy(buf, ptr, 3);
+ buf[3] = 0;
+ *size = 4;
+ break;
+ }
+ case MYSQL_TYPE_LONG:
+ {
+ memcpy(buf, ptr, 4);
+ *size = 4;
+ break;
+ }
+ case MYSQL_TYPE_TIMESTAMP:
+ error = storage_encode_key_timestamp(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_LONGLONG:
+ {
+ memcpy(buf, ptr, 8);
+ *size = 8;
+ break;
+ }
+ case MYSQL_TYPE_FLOAT:
+ {
+ float float_value;
+ double double_value;
+ float4get(float_value, ptr);
+ double_value = float_value;
+ memcpy(buf, &double_value, 8);
+ *size = 8;
+ break;
+ }
+ case MYSQL_TYPE_DOUBLE:
+ {
+ double val;
+ float8get(val, ptr);
+ memcpy(buf, &val, 8);
+ *size = 8;
+ break;
+ }
+ case MYSQL_TYPE_TIME:
+ error = storage_encode_key_time(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_YEAR:
+ error = storage_encode_key_year(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_DATETIME:
+ error = storage_encode_key_datetime(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_NEWDATE:
+ {
+ uint32 encoded_date = uint3korr(ptr);
+ struct tm date;
+ memset(&date, 0, sizeof(struct tm));
+ date.tm_year = encoded_date / (16 * 32) - mrn::TimeConverter::TM_YEAR_BASE;
+ date.tm_mon = encoded_date / 32 % 16 - 1;
+ date.tm_mday = encoded_date % 32;
+ int usec = 0;
+ mrn::TimeConverter time_converter;
+ long long int time = time_converter.tm_to_grn_time(&date, usec,
+ &truncated);
+ if (truncated) {
+ field->set_warning(Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED, 1);
+ }
+ memcpy(buf, &time, 8);
+ *size = 8;
+ break;
+ }
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2:
+ error = storage_encode_key_timestamp2(field, ptr, buf, size);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2:
+ error = storage_encode_key_datetime2(field, ptr, buf, size);
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2:
+ error = storage_encode_key_time2(field, ptr, buf, size);
+ break;
+#endif
+ case MYSQL_TYPE_STRING:
+ error = storage_encode_key_fixed_size_string(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_VARCHAR:
+ case MYSQL_TYPE_BLOB:
+ error = storage_encode_key_variable_size_string(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_ENUM:
+ error = storage_encode_key_enum(field, ptr, buf, size);
+ break;
+ case MYSQL_TYPE_SET:
+ error = storage_encode_key_set(field, ptr, buf, size);
+ break;
+ default:
+ error = HA_ERR_UNSUPPORTED;
+ break;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_multiple_column_key(KEY *key_info,
+ const uchar *key,
+ uint key_length,
+ uchar *buffer,
+ uint *encoded_length)
+{
+ MRN_DBUG_ENTER_METHOD();
+ mrn::MultipleColumnKeyCodec codec(ctx, ha_thd(), key_info);
+ int error = codec.encode(key, key_length, buffer, encoded_length);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_encode_multiple_column_key_range(KEY *key_info,
+ const key_range *start,
+ const key_range *end,
+ uchar *min_buffer,
+ uint *min_encoded_size,
+ uchar *max_buffer,
+ uint *max_encoded_size)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ mrn::MultipleColumnKeyCodec codec(ctx, ha_thd(), key_info);
+ uint encoded_key_size = codec.size();
+ if (start) {
+ memset(min_buffer, 0, encoded_key_size);
+ error = codec.encode(start->key, start->length,
+ min_buffer, min_encoded_size);
+ // TODO: handle error?
+ *min_encoded_size = encoded_key_size;
+ }
+ if (end) {
+ memset(max_buffer, 0xff, encoded_key_size);
+ error = codec.encode(end->key, end->length,
+ max_buffer, max_encoded_size);
+ // TODO: handle error?
+ *max_encoded_size = encoded_key_size;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_reset()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (thd_sql_command(ha_thd()) == SQLCOM_SELECT) {
+ st_select_lex *select_lex = table->pos_in_table_list->select_lex;
+ List_iterator<Item_func_match> iterator(*(select_lex->ftfunc_list));
+ Item_func_match *item;
+ while ((item = iterator++)) {
+ if (item->ft_handler) {
+ mrn_generic_ft_clear(item->ft_handler);
+ }
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_reset()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_reset();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ if (alter_key_info_buffer) {
+ my_free(alter_key_info_buffer, MYF(0));
+ alter_key_info_buffer = NULL;
+ }
+#else
+ if (wrap_alter_key_info) {
+ my_free(wrap_alter_key_info, MYF(0));
+ wrap_alter_key_info = NULL;
+ }
+#endif
+ wrap_ft_init_count = 0;
+ int generic_error = generic_reset();
+ if (error == 0) {
+ error = generic_error;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_reset()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ error = generic_reset();
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::reset()
+{
+ int error = 0;
+ THD *thd = ha_thd();
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: this=%p", this));
+ clear_empty_value_records();
+ clear_search_result();
+ clear_search_result_geo();
+ if (share->wrapper_mode)
+ error = wrapper_reset();
+ else
+ error = storage_reset();
+ ignoring_no_key_columns = false;
+ inserting_with_update = false;
+ ignoring_duplicated_key = false;
+ fulltext_searching = false;
+ replacing_ = false;
+ written_by_row_based_binlog = 0;
+ mrn_lock_type = F_UNLCK;
+ mrn_clear_alter_share(thd);
+ current_ft_item = NULL;
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_CLONE_NEED_NAME
+handler *ha_mroonga::wrapper_clone(const char *name, MEM_ROOT *mem_root)
+{
+ handler *cloned_handler;
+ MRN_DBUG_ENTER_METHOD();
+ if (!(cloned_handler = get_new_handler(table->s, mem_root,
+ table->s->db_type())))
+ DBUG_RETURN(NULL);
+ ((ha_mroonga *) cloned_handler)->is_clone = true;
+ ((ha_mroonga *) cloned_handler)->parent_for_clone = this;
+ ((ha_mroonga *) cloned_handler)->mem_root_for_clone = mem_root;
+ if (cloned_handler->ha_open(table, table->s->normalized_path.str,
+ table->db_stat, HA_OPEN_IGNORE_IF_LOCKED))
+ {
+ delete cloned_handler;
+ DBUG_RETURN(NULL);
+ }
+ DBUG_RETURN(cloned_handler);
+}
+
+handler *ha_mroonga::storage_clone(const char *name, MEM_ROOT *mem_root)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler *cloned_handler;
+ cloned_handler = handler::clone(name, mem_root);
+ DBUG_RETURN(cloned_handler);
+}
+
+handler *ha_mroonga::clone(const char *name, MEM_ROOT *mem_root)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler *cloned_handler;
+ if (share->wrapper_mode)
+ {
+ cloned_handler = wrapper_clone(name, mem_root);
+ } else {
+ cloned_handler = storage_clone(name, mem_root);
+ }
+ DBUG_RETURN(cloned_handler);
+}
+#else
+handler *ha_mroonga::wrapper_clone(MEM_ROOT *mem_root)
+{
+ handler *cloned_handler;
+ MRN_DBUG_ENTER_METHOD();
+ if (!(cloned_handler = get_new_handler(table->s, mem_root,
+ table->s->db_type())))
+ DBUG_RETURN(NULL);
+ ((ha_mroonga *) cloned_handler)->is_clone = true;
+ ((ha_mroonga *) cloned_handler)->parent_for_clone = this;
+ ((ha_mroonga *) cloned_handler)->mem_root_for_clone = mem_root;
+ if (cloned_handler->ha_open(table, table->s->normalized_path.str,
+ table->db_stat, HA_OPEN_IGNORE_IF_LOCKED))
+ {
+ delete cloned_handler;
+ DBUG_RETURN(NULL);
+ }
+ DBUG_RETURN(cloned_handler);
+}
+
+handler *ha_mroonga::storage_clone(MEM_ROOT *mem_root)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler *cloned_handler;
+ cloned_handler = handler::clone(mem_root);
+ DBUG_RETURN(cloned_handler);
+}
+
+handler *ha_mroonga::clone(MEM_ROOT *mem_root)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler *cloned_handler;
+ if (share->wrapper_mode)
+ {
+ cloned_handler = wrapper_clone(mem_root);
+ } else {
+ cloned_handler = storage_clone(mem_root);
+ }
+ DBUG_RETURN(cloned_handler);
+}
+#endif
+
+uint8 ha_mroonga::wrapper_table_cache_type()
+{
+ uint8 res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->table_cache_type();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+uint8 ha_mroonga::storage_table_cache_type()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint8 type = handler::table_cache_type();
+ DBUG_RETURN(type);
+}
+
+uint8 ha_mroonga::table_cache_type()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint8 type;
+ if (share->wrapper_mode)
+ {
+ type = wrapper_table_cache_type();
+ } else {
+ type = storage_table_cache_type();
+ }
+ DBUG_RETURN(type);
+}
+
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ha_rows ha_mroonga::wrapper_multi_range_read_info_const(uint keyno,
+ RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges,
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows;
+ KEY key_info = table->key_info[keyno];
+ if (mrn_is_geo_key(&key_info)) {
+ rows = handler::multi_range_read_info_const(keyno, seq, seq_init_param,
+ n_ranges, bufsz, flags, cost);
+ DBUG_RETURN(rows);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ rows = wrap_handler->multi_range_read_info_const(keyno, seq, seq_init_param,
+ n_ranges, bufsz, flags,
+ cost);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::storage_multi_range_read_info_const(uint keyno,
+ RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges,
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows = handler::multi_range_read_info_const(keyno, seq,
+ seq_init_param,
+ n_ranges, bufsz, flags,
+ cost);
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges, uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows;
+ if (share->wrapper_mode)
+ {
+ rows = wrapper_multi_range_read_info_const(keyno, seq, seq_init_param,
+ n_ranges, bufsz,
+ flags, cost);
+ } else {
+ rows = storage_multi_range_read_info_const(keyno, seq, seq_init_param,
+ n_ranges, bufsz,
+ flags, cost);
+ }
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::wrapper_multi_range_read_info(uint keyno, uint n_ranges,
+ uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows;
+ KEY key_info = table->key_info[keyno];
+ if (mrn_is_geo_key(&key_info)) {
+ rows = handler::multi_range_read_info(keyno, n_ranges, keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ key_parts,
+#endif
+ bufsz, flags, cost);
+ DBUG_RETURN(rows);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ rows = wrap_handler->multi_range_read_info(keyno, n_ranges, keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ key_parts,
+#endif
+ bufsz, flags, cost);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::storage_multi_range_read_info(uint keyno, uint n_ranges,
+ uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows = handler::multi_range_read_info(keyno, n_ranges, keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ key_parts,
+#endif
+ bufsz, flags, cost);
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::multi_range_read_info(uint keyno, uint n_ranges, uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz, uint *flags,
+ Cost_estimate *cost)
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows;
+ if (share->wrapper_mode)
+ {
+ rows = wrapper_multi_range_read_info(keyno, n_ranges, keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ key_parts,
+#endif
+ bufsz, flags, cost);
+ } else {
+ rows = storage_multi_range_read_info(keyno, n_ranges, keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ key_parts,
+#endif
+ bufsz, flags, cost);
+ }
+ DBUG_RETURN(rows);
+}
+
+int ha_mroonga::wrapper_multi_range_read_init(RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = handler::multi_range_read_init(seq, seq_init_param,
+ n_ranges, mode, buf);
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->multi_range_read_init(seq, seq_init_param,
+ n_ranges, mode, buf);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_multi_range_read_init(RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = handler::multi_range_read_init(seq, seq_init_param,
+ n_ranges, mode, buf);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_multi_range_read_init(seq, seq_init_param,
+ n_ranges, mode, buf);
+ } else {
+ error = storage_multi_range_read_init(seq, seq_init_param,
+ n_ranges, mode, buf);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_multi_range_read_next(range_id_t *range_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = handler::multi_range_read_next(range_info);
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->multi_range_read_next(range_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_multi_range_read_next(range_id_t *range_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = handler::multi_range_read_next(range_info);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::multi_range_read_next(range_id_t *range_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_multi_range_read_next(range_info);
+ } else {
+ error = storage_multi_range_read_next(range_info);
+ }
+ DBUG_RETURN(error);
+}
+#else // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+int ha_mroonga::wrapper_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = handler::read_multi_range_first(found_range_p, ranges,
+ range_count, sorted, buffer);
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->read_multi_range_first(found_range_p, ranges,
+ range_count, sorted, buffer);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = handler::read_multi_range_first(found_range_p, ranges,
+ range_count, sorted, buffer);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_read_multi_range_first(found_range_p, ranges,
+ range_count, sorted, buffer);
+ } else {
+ error = storage_read_multi_range_first(found_range_p, ranges,
+ range_count, sorted, buffer);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ KEY key_info = table->key_info[active_index];
+ if (mrn_is_geo_key(&key_info)) {
+ error = handler::read_multi_range_next(found_range_p);
+ DBUG_RETURN(error);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ if (fulltext_searching)
+ set_pk_bitmap();
+ error = wrap_handler->read_multi_range_next(found_range_p);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = handler::read_multi_range_next(found_range_p);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_read_multi_range_next(found_range_p);
+ } else {
+ error = storage_read_multi_range_next(found_range_p);
+ }
+ DBUG_RETURN(error);
+}
+#endif // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+void ha_mroonga::wrapper_start_bulk_insert(ha_rows rows, uint flags)
+#else
+void ha_mroonga::wrapper_start_bulk_insert(ha_rows rows)
+#endif
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+ wrap_handler->ha_start_bulk_insert(rows, flags);
+#else
+ wrap_handler->ha_start_bulk_insert(rows);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+void ha_mroonga::storage_start_bulk_insert(ha_rows rows, uint flags)
+#else
+void ha_mroonga::storage_start_bulk_insert(ha_rows rows)
+#endif
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+void ha_mroonga::start_bulk_insert(ha_rows rows, uint flags)
+#else
+void ha_mroonga::start_bulk_insert(ha_rows rows)
+#endif
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode) {
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+ wrapper_start_bulk_insert(rows, flags);
+#else
+ wrapper_start_bulk_insert(rows);
+#endif
+ } else {
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+ storage_start_bulk_insert(rows, flags);
+#else
+ storage_start_bulk_insert(rows);
+#endif
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::wrapper_end_bulk_insert()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_end_bulk_insert();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_end_bulk_insert()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::end_bulk_insert()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_end_bulk_insert();
+ } else {
+ error = storage_end_bulk_insert();
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::generic_delete_all_rows(grn_obj *target_grn_table,
+ const char *function_name)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info",
+ ("mroonga: dry write: %s::%s", MRN_CLASS_NAME, function_name));
+ DBUG_RETURN(error);
+ }
+
+ grn_table_cursor *cursor;
+ cursor = grn_table_cursor_open(ctx, target_grn_table,
+ NULL, 0,
+ NULL, 0,
+ 0, -1,
+ 0);
+ if (cursor) {
+ while (grn_table_cursor_next(ctx, cursor) != GRN_ID_NIL) {
+ grn_table_cursor_delete(ctx, cursor);
+ }
+ grn_table_cursor_close(ctx, cursor);
+ } else {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_delete_all_rows()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_delete_all_rows();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ if (error) {
+ DBUG_RETURN(error);
+ }
+
+ if (!wrapper_have_target_index()) {
+ DBUG_RETURN(error);
+ }
+
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ if (!grn_index_tables[i]) {
+ /* disable keys */
+ continue;
+ }
+
+ error = generic_delete_all_rows(grn_index_tables[i], __FUNCTION__);
+ if (error) {
+ break;
+ }
+ }
+
+ int grn_table_error;
+ grn_table_error = generic_delete_all_rows(grn_table, __FUNCTION__);
+ if (!error) {
+ error = grn_table_error;
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_delete_all_rows()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = generic_delete_all_rows(grn_table, __FUNCTION__);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::delete_all_rows()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_delete_all_rows();
+ } else {
+ error = storage_delete_all_rows();
+ }
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_HAVE_TRUNCATE
+int ha_mroonga::wrapper_truncate()
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_truncate();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+
+ if (!error && wrapper_have_target_index()) {
+ error = wrapper_truncate_index();
+ }
+
+ DBUG_RETURN(error);
+}
+#endif
+
+int ha_mroonga::wrapper_truncate_index()
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info",
+ ("mroonga: dry write: %s::%s", MRN_CLASS_NAME, __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ grn_rc rc;
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ KEY key_info = table->key_info[i];
+
+ if (!(wrapper_is_target_index(&key_info))) {
+ continue;
+ }
+
+ if (!grn_index_tables[i]) {
+ /* disable keys */
+ continue;
+ }
+
+ rc = grn_table_truncate(ctx, grn_index_tables[i]);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+err:
+ rc = grn_table_truncate(ctx, grn_table);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_truncate()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ if (is_dry_write()) {
+ DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+ DBUG_RETURN(error);
+ }
+
+ grn_rc rc;
+ rc = grn_table_truncate(ctx, grn_table);
+ if (rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_WRITE);
+ }
+ error = storage_truncate_index();
+
+ if (!error && thd_sql_command(ha_thd()) == SQLCOM_TRUNCATE) {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ long_term_share->auto_inc_value = 0;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ long_term_share->auto_inc_inited = false;
+ }
+
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_truncate_index()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ grn_rc rc;
+ uint i;
+ uint n_keys = table->s->keys;
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+
+ KEY key_info = table->key_info[i];
+
+ if (
+ !(key_info.flags & HA_NOSAME) &&
+ (KEY_N_KEY_PARTS(&key_info) == 1 || (key_info.flags & HA_FULLTEXT))
+ ) {
+ continue;
+ }
+
+ if (!grn_index_tables[i]) {
+ /* disable keys */
+ continue;
+ }
+
+ rc = grn_table_truncate(ctx, grn_index_tables[i]);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto err;
+ }
+ }
+err:
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_HAVE_TRUNCATE
+int ha_mroonga::truncate()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_truncate();
+ } else {
+ error = storage_truncate();
+ }
+ DBUG_RETURN(error);
+}
+#endif
+
+double ha_mroonga::wrapper_scan_time()
+{
+ double res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->scan_time();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+double ha_mroonga::storage_scan_time()
+{
+ MRN_DBUG_ENTER_METHOD();
+ double time = handler::scan_time();
+ DBUG_RETURN(time);
+}
+
+double ha_mroonga::scan_time()
+{
+ MRN_DBUG_ENTER_METHOD();
+ double time;
+ if (share->wrapper_mode)
+ {
+ time = wrapper_scan_time();
+ } else {
+ time = storage_scan_time();
+ }
+ DBUG_RETURN(time);
+}
+
+double ha_mroonga::wrapper_read_time(uint index, uint ranges, ha_rows rows)
+{
+ double res;
+ MRN_DBUG_ENTER_METHOD();
+ if (index < MAX_KEY) {
+ KEY key_info = table->key_info[index];
+ if (mrn_is_geo_key(&key_info)) {
+ res = handler::read_time(index, ranges, rows);
+ DBUG_RETURN(res);
+ }
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->read_time(share->wrap_key_nr[index], ranges, rows);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ } else {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->read_time(index, ranges, rows);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ DBUG_RETURN(res);
+}
+
+double ha_mroonga::storage_read_time(uint index, uint ranges, ha_rows rows)
+{
+ MRN_DBUG_ENTER_METHOD();
+ double time = handler::read_time(index, ranges, rows);
+ DBUG_RETURN(time);
+}
+
+double ha_mroonga::read_time(uint index, uint ranges, ha_rows rows)
+{
+ MRN_DBUG_ENTER_METHOD();
+ double time;
+ if (share->wrapper_mode)
+ {
+ time = wrapper_read_time(index, ranges, rows);
+ } else {
+ time = storage_read_time(index, ranges, rows);
+ }
+ DBUG_RETURN(time);
+}
+
+const key_map *ha_mroonga::wrapper_keys_to_use_for_scanning()
+{
+ const key_map *res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->keys_to_use_for_scanning();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+const key_map *ha_mroonga::storage_keys_to_use_for_scanning()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(&key_map_full);
+}
+
+const key_map *ha_mroonga::keys_to_use_for_scanning()
+{
+ MRN_DBUG_ENTER_METHOD();
+ const key_map *key_map;
+ if (share->wrapper_mode)
+ {
+ key_map = wrapper_keys_to_use_for_scanning();
+ } else {
+ key_map = storage_keys_to_use_for_scanning();
+ }
+ DBUG_RETURN(key_map);
+}
+
+ha_rows ha_mroonga::wrapper_estimate_rows_upper_bound()
+{
+ ha_rows res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->estimate_rows_upper_bound();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+ha_rows ha_mroonga::storage_estimate_rows_upper_bound()
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows = handler::estimate_rows_upper_bound();
+ DBUG_RETURN(rows);
+}
+
+ha_rows ha_mroonga::estimate_rows_upper_bound()
+{
+ MRN_DBUG_ENTER_METHOD();
+ ha_rows rows;
+ if (share->wrapper_mode)
+ {
+ rows = wrapper_estimate_rows_upper_bound();
+ } else {
+ rows = storage_estimate_rows_upper_bound();
+ }
+ DBUG_RETURN(rows);
+}
+
+void ha_mroonga::wrapper_update_create_info(HA_CREATE_INFO* create_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->update_create_info(create_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_update_create_info(HA_CREATE_INFO* create_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::update_create_info(create_info);
+ if (!(create_info->used_fields & HA_CREATE_USED_AUTO)) {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ if (!long_term_share->auto_inc_inited) {
+ storage_info(HA_STATUS_AUTO);
+ }
+ create_info->auto_increment_value = long_term_share->auto_inc_value;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::update_create_info(HA_CREATE_INFO* create_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (!create_info->connect_string.str)
+ {
+ create_info->connect_string.str = table->s->connect_string.str;
+ create_info->connect_string.length = table->s->connect_string.length;
+ }
+ if (share->wrapper_mode)
+ wrapper_update_create_info(create_info);
+ else
+ storage_update_create_info(create_info);
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(ha_thd(), true);
+ if (slot_data) {
+ slot_data->alter_create_info = create_info;
+ if (slot_data->alter_connect_string) {
+ my_free(slot_data->alter_connect_string, MYF(0));
+ slot_data->alter_connect_string = NULL;
+ }
+ if (create_info->connect_string.str) {
+ slot_data->alter_connect_string =
+ my_strndup(create_info->connect_string.str,
+ create_info->connect_string.length,
+ MYF(MY_WME));
+ }
+ if (slot_data->alter_comment) {
+ my_free(slot_data->alter_comment, MYF(0));
+ slot_data->alter_comment = NULL;
+ }
+ if (create_info->comment.str) {
+ slot_data->alter_comment =
+ my_strndup(create_info->comment.str,
+ create_info->comment.length,
+ MYF(MY_WME));
+ }
+ if (share && share->disable_keys) {
+ slot_data->disable_keys_create_info = create_info;
+ }
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::wrapper_rename_table(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name)
+{
+ int error = 0;
+ handler *hnd;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(tmp_share, tmp_share->table_share);
+ if (!(hnd =
+ tmp_share->hton->create(tmp_share->hton, tmp_share->table_share,
+ current_thd->mem_root)))
+ {
+ MRN_SET_BASE_SHARE_KEY(tmp_share, tmp_share->table_share);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ hnd->init();
+ MRN_SET_BASE_SHARE_KEY(tmp_share, tmp_share->table_share);
+
+ if ((error = hnd->ha_rename_table(from, to)))
+ {
+ delete hnd;
+ DBUG_RETURN(error);
+ }
+
+ error = wrapper_rename_index(from, to, tmp_share,
+ from_table_name, to_table_name);
+
+ delete hnd;
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_rename_index(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name)
+{
+ int error;
+ grn_rc rc;
+ MRN_DBUG_ENTER_METHOD();
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = ensure_database_open(from);
+ if (error)
+ DBUG_RETURN(error);
+
+ TABLE_SHARE *tmp_table_share = tmp_share->table_share;
+
+ uint i;
+ for (i = 0; i < tmp_table_share->keys; i++) {
+ const char *mysql_index_name = tmp_table_share->key_info[i].name;
+ mrn::IndexTableName from_index_table_name(from_table_name, mysql_index_name);
+ mrn::IndexTableName to_index_table_name(to_table_name, mysql_index_name);
+ grn_obj *index_table;
+ index_table = grn_ctx_get(ctx,
+ from_index_table_name.c_str(),
+ from_index_table_name.length());
+ if (index_table) {
+ rc = grn_table_rename(ctx, index_table,
+ to_index_table_name.c_str(),
+ to_index_table_name.length());
+ if (rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+ }
+
+ grn_obj *table = grn_ctx_get(ctx, from_table_name, strlen(from_table_name));
+ if (ctx->rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ rc = grn_table_rename(ctx, table, to_table_name,
+ strlen(to_table_name));
+ if (rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::storage_rename_table(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name)
+{
+ int error;
+ grn_rc rc;
+ TABLE_SHARE *tmp_table_share = tmp_share->table_share;
+ MRN_LONG_TERM_SHARE *from_long_term_share = tmp_share->long_term_share,
+ *to_long_term_share;
+ MRN_DBUG_ENTER_METHOD();
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ error = ensure_database_open(from);
+ if (error)
+ DBUG_RETURN(error);
+
+ if (!(to_long_term_share = mrn_get_long_term_share(to, strlen(to), &error)))
+ DBUG_RETURN(error);
+ to_long_term_share->auto_inc_value = from_long_term_share->auto_inc_value;
+ DBUG_PRINT("info", ("mroonga: to_auto_inc_value=%llu",
+ to_long_term_share->auto_inc_value));
+ to_long_term_share->auto_inc_inited = from_long_term_share->auto_inc_inited;
+
+ uint i;
+ for (i = 0; i < tmp_table_share->keys; i++) {
+ const char *mysql_index_name = tmp_table_share->key_info[i].name;
+ mrn::IndexTableName from_index_table_name(from_table_name,
+ mysql_index_name);
+ mrn::IndexTableName to_index_table_name(to_table_name,
+ mysql_index_name);
+ grn_obj *index_table;
+ index_table = grn_ctx_get(ctx,
+ from_index_table_name.c_str(),
+ from_index_table_name.length());
+ if (index_table) {
+ rc = grn_table_rename(ctx, index_table,
+ to_index_table_name.c_str(),
+ to_index_table_name.length());
+ if (rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error_end;
+ }
+ }
+ }
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+ error = storage_rename_foreign_key(tmp_share, from_table_name, to_table_name);
+ if (error) {
+ goto error_end;
+ }
+#endif
+ {
+ grn_obj *table_obj = grn_ctx_get(ctx, from_table_name, strlen(from_table_name));
+ if (ctx->rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error_end;
+ }
+ rc = grn_table_rename(ctx, table_obj, to_table_name,
+ strlen(to_table_name));
+ if (rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ goto error_end;
+ }
+ }
+ DBUG_RETURN(0);
+
+error_end:
+ mrn_free_long_term_share(to_long_term_share);
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+int ha_mroonga::storage_rename_foreign_key(MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name)
+{
+ int error;
+ uint i;
+ grn_obj *column, *ref_column;
+ grn_rc rc;
+ TABLE_SHARE *tmp_table_share = tmp_share->table_share;
+ uint n_columns = tmp_table_share->fields;
+ MRN_DBUG_ENTER_METHOD();
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = tmp_table_share->field[i];
+ const char *column_name = field->field_name;
+ uint column_name_size = strlen(column_name);
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+ column = grn_obj_column(ctx, grn_table,
+ column_name, column_name_size);
+ if (!column) {
+ continue;
+ }
+ grn_id ref_table_id = grn_obj_get_range(ctx, column);
+ grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id);
+ if (ref_table->header.type != GRN_TABLE_NO_KEY &&
+ ref_table->header.type != GRN_TABLE_HASH_KEY &&
+ ref_table->header.type != GRN_TABLE_PAT_KEY &&
+ ref_table->header.type != GRN_TABLE_DAT_KEY) {
+ continue;
+ }
+ mrn::IndexColumnName from_index_column_name(from_table_name, column_name);
+ ref_column = grn_obj_column(ctx, ref_table,
+ from_index_column_name.c_str(),
+ from_index_column_name.length());
+ if (!ref_column) {
+ continue;
+ }
+ mrn::IndexColumnName to_index_column_name(to_table_name, column_name);
+ rc = grn_column_rename(ctx, ref_column,
+ to_index_column_name.c_str(),
+ to_index_column_name.length());
+ if (rc != GRN_SUCCESS) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+ DBUG_RETURN(0);
+}
+#endif
+
+int ha_mroonga::rename_table(const char *from, const char *to)
+{
+ int error = 0;
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_table_share;
+ TABLE tmp_table;
+ MRN_SHARE *tmp_share;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::PathMapper to_mapper(to);
+ mrn::PathMapper from_mapper(from);
+ if (strcmp(from_mapper.db_name(), to_mapper.db_name()))
+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
+
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(from_mapper.db_name(),
+ strlen(from_mapper.db_name()),
+ from_mapper.mysql_table_name(),
+ strlen(from_mapper.mysql_table_name()),
+ from_mapper.mysql_table_name(), TL_WRITE);
+#else
+ table_list.init_one_table(from_mapper.db_name(),
+ from_mapper.mysql_table_name(),
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(NULL);
+ tmp_table_share = mrn_create_tmp_table_share(&table_list, from, &error);
+ mrn_open_mutex_unlock(NULL);
+ if (!tmp_table_share) {
+ DBUG_RETURN(error);
+ }
+ tmp_table.s = tmp_table_share;
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ tmp_table.part_info = NULL;
+#endif
+ if (!(tmp_share = mrn_get_share(from, &tmp_table, &error)))
+ {
+ mrn_open_mutex_lock(NULL);
+ mrn_free_tmp_table_share(tmp_table_share);
+ mrn_open_mutex_unlock(NULL);
+ DBUG_RETURN(error);
+ }
+
+ if (tmp_share->wrapper_mode)
+ {
+ error = wrapper_rename_table(from, to, tmp_share,
+ from_mapper.table_name(),
+ to_mapper.table_name());
+ } else {
+ error = storage_rename_table(from, to, tmp_share,
+ from_mapper.table_name(),
+ to_mapper.table_name());
+ }
+
+ if (!error) {
+ mrn_free_long_term_share(tmp_share->long_term_share);
+ tmp_share->long_term_share = NULL;
+ }
+ mrn_free_share(tmp_share);
+ if (!error && to_mapper.table_name()[0] == '#') {
+ if ((error = alter_share_add(to, tmp_table_share)))
+ DBUG_RETURN(error);
+ } else if (error && from_mapper.table_name()[0] == '#') {
+ alter_share_add(from, tmp_table_share);
+ } else {
+ mrn_open_mutex_lock(NULL);
+ mrn_free_tmp_table_share(tmp_table_share);
+ mrn_open_mutex_unlock(NULL);
+ }
+ DBUG_RETURN(error);
+}
+
+bool ha_mroonga::wrapper_is_crashed() const
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->is_crashed();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_is_crashed() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool crashed = handler::is_crashed();
+ DBUG_RETURN(crashed);
+}
+
+bool ha_mroonga::is_crashed() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ int crashed;
+ if (share->wrapper_mode)
+ {
+ crashed = wrapper_is_crashed();
+ } else {
+ crashed = storage_is_crashed();
+ }
+ DBUG_RETURN(crashed);
+}
+
+bool ha_mroonga::wrapper_auto_repair(int error) const
+{
+ bool crashed;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_AUTO_REPAIR_HAVE_ERROR
+ crashed = wrap_handler->auto_repair(error);
+#else
+ crashed = wrap_handler->auto_repair();
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(crashed);
+}
+
+bool ha_mroonga::storage_auto_repair(int error) const
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool crashed;
+#ifdef MRN_HANDLER_AUTO_REPAIR_HAVE_ERROR
+ crashed = handler::auto_repair(error);
+#else
+ crashed = handler::auto_repair();
+#endif
+ DBUG_RETURN(crashed);
+}
+
+bool ha_mroonga::auto_repair(int error) const
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool crashed;
+ // TODO: We should consider about creating share for error =
+ // ER_CANT_OPEN_FILE. The following code just ignores the error.
+ if (share && share->wrapper_mode)
+ {
+ crashed = wrapper_auto_repair(error);
+ } else {
+ crashed = storage_auto_repair(error);
+ }
+ DBUG_RETURN(crashed);
+}
+
+bool ha_mroonga::auto_repair() const
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool crashed = auto_repair(HA_ERR_CRASHED_ON_USAGE);
+ DBUG_RETURN(crashed);
+}
+
+int ha_mroonga::wrapper_disable_indexes(uint mode)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_disable_indexes(mode);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (error == HA_ERR_WRONG_COMMAND) {
+ error = 0;
+ }
+ if (!error) {
+ if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) {
+ uint i;
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (share->wrap_key_nr[i] < MAX_KEY) {
+ continue;
+ }
+ if (!grn_index_tables[i]) {
+ DBUG_PRINT("info", ("mroonga: keys are disabled already %u", i));
+ DBUG_RETURN(0);
+ }
+ }
+ KEY *key_info = table_share->key_info;
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0; i < table_share->keys; i++) {
+ if (!(key_info[i].flags & HA_FULLTEXT) &&
+ !mrn_is_geo_key(&key_info[i])) {
+ continue;
+ }
+
+ mrn::IndexTableName index_table_name(mapper.table_name(),
+ key_info[i].name);
+ grn_obj *index_table = grn_ctx_get(ctx,
+ index_table_name.c_str(),
+ index_table_name.length());
+ if (index_table) {
+ grn_obj_remove(ctx, index_table);
+ }
+ grn_index_tables[i] = NULL;
+ grn_index_columns[i] = NULL;
+ }
+ } else {
+ error = HA_ERR_WRONG_COMMAND;
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_disable_indexes(uint mode)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) {
+ uint i;
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (!grn_index_tables[i]) {
+ DBUG_PRINT("info", ("mroonga: keys are disabled already %u", i));
+ DBUG_RETURN(0);
+ }
+ }
+ KEY *key_info = table_share->key_info;
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE &&
+ (key_info[i].flags & HA_NOSAME)) {
+ continue;
+ }
+
+ mrn::IndexTableName index_table_name(mapper.table_name(),
+ key_info[i].name);
+ grn_obj *index_table = grn_ctx_get(ctx,
+ index_table_name.c_str(),
+ index_table_name.length());
+ if (index_table) {
+ grn_obj_remove(ctx, index_table);
+ }
+ grn_index_tables[i] = NULL;
+ grn_index_columns[i] = NULL;
+ }
+ } else {
+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::disable_indexes(uint mode)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ error = wrapper_disable_indexes(mode);
+ } else {
+ error = storage_disable_indexes(mode);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_enable_indexes(uint mode)
+{
+ int error = 0, tmp_error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) {
+ uint i, j;
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (share->wrap_key_nr[i] < MAX_KEY) {
+ continue;
+ }
+ if (!grn_index_tables[i]) {
+ break;
+ }
+ }
+ if (i == table_share->keys) {
+ DBUG_PRINT("info", ("mroonga: keys are enabled already"));
+ DBUG_RETURN(0);
+ }
+ KEY *p_key_info = &table->key_info[table_share->primary_key];
+ KEY *key_info = table_share->key_info;
+ uint n_keys = table_share->keys;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, n_keys);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns, n_keys);
+ bitmap_clear_all(table->read_set);
+ mrn_set_bitmap_by_key(table->read_set, p_key_info);
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0, j = 0; i < n_keys; i++) {
+ if (!(key_info[i].flags & HA_FULLTEXT) &&
+ !mrn_is_geo_key(&key_info[i])) {
+ j++;
+ continue;
+ }
+
+ if ((error = mrn_add_index_param(share, &key_info[i], i)))
+ {
+ break;
+ }
+ index_tables[i] = NULL;
+ index_columns[i] = NULL;
+ if (!grn_index_tables[i]) {
+ if (
+ (key_info[i].flags & HA_FULLTEXT) &&
+ (error = wrapper_create_index_fulltext(mapper.table_name(),
+ i, &key_info[i],
+ index_tables, index_columns,
+ share))
+ ) {
+ break;
+ } else if (
+ mrn_is_geo_key(&key_info[i]) &&
+ (error = wrapper_create_index_geo(mapper.table_name(),
+ i, &key_info[i],
+ index_tables, index_columns,
+ share))
+ ) {
+ break;
+ }
+ grn_index_columns[i] = index_columns[i];
+ }
+ mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
+ }
+ if (!error && i > j)
+ {
+ error = wrapper_fill_indexes(ha_thd(), table->key_info, index_columns,
+ n_keys);
+ }
+ bitmap_set_all(table->read_set);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ } else {
+ tmp_error = HA_ERR_WRONG_COMMAND;
+ }
+
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_enable_indexes(mode);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (error == HA_ERR_WRONG_COMMAND) {
+ error = tmp_error;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_enable_indexes(uint mode)
+{
+ int error = 0;
+ uint n_keys = table_share->keys;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, n_keys);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns, n_keys);
+ bool have_multiple_column_index = false;
+ bool skip_unique_key = (mode == HA_KEY_SWITCH_NONUNIQ_SAVE);
+ MRN_DBUG_ENTER_METHOD();
+ if (mode == HA_KEY_SWITCH_NONUNIQ_SAVE || mode == HA_KEY_SWITCH_ALL) {
+ uint i;
+ for (i = 0; i < table_share->keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (!grn_index_tables[i]) {
+ break;
+ }
+ }
+ if (i == table_share->keys) {
+ DBUG_PRINT("info", ("mroonga: keys are enabled already"));
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(0);
+ }
+ KEY *key_info = table->key_info;
+ bitmap_clear_all(table->read_set);
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0; i < n_keys; i++) {
+ if (i == table->s->primary_key) {
+ continue;
+ }
+ if (skip_unique_key && (key_info[i].flags & HA_NOSAME)) {
+ continue;
+ }
+
+ if ((error = mrn_add_index_param(share, &key_info[i], i)))
+ {
+ break;
+ }
+ index_tables[i] = NULL;
+ if (!grn_index_tables[i]) {
+ if ((error = storage_create_index(table, mapper.table_name(), grn_table,
+ share, &key_info[i], index_tables,
+ index_columns, i)))
+ {
+ break;
+ }
+ if (
+ KEY_N_KEY_PARTS(&(key_info[i])) != 1 &&
+ !(key_info[i].flags & HA_FULLTEXT)
+ ) {
+ mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
+ have_multiple_column_index = true;
+ }
+ } else {
+ index_columns[i] = NULL;
+ }
+ }
+ if (!error && have_multiple_column_index)
+ {
+ error = storage_add_index_multiple_columns(key_info, n_keys,
+ index_tables,
+ index_columns,
+ skip_unique_key);
+ }
+ bitmap_set_all(table->read_set);
+ } else {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
+ }
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::enable_indexes(uint mode)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ share->disable_keys = false;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_enable_indexes(mode);
+ } else {
+ error = storage_enable_indexes(mode);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_check(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_check(thd, check_opt);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_check(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
+}
+
+int ha_mroonga::check(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_check(thd, check_opt);
+ } else {
+ error = storage_check(thd, check_opt);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_fill_indexes(THD *thd, KEY *key_info,
+ grn_obj **index_columns, uint n_keys)
+{
+ int error = 0;
+ KEY *p_key_info = &table->key_info[table_share->primary_key];
+ KEY *tmp_key_info;
+#ifdef MRN_NEED_M_LOCK_TYPE_CHECK_FOR_WRAPPER_EXTERNAL_LOCK
+ int wrapper_lock_type_backup = wrap_handler->get_lock_type();
+#endif
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_PRINT("info", ("mroonga: n_keys=%u", n_keys));
+
+ grn_bool need_lock = true;
+ if (mrn_lock_type != F_UNLCK) {
+ need_lock = false;
+ }
+#ifdef MRN_NEED_M_LOCK_TYPE_CHECK_FOR_WRAPPER_EXTERNAL_LOCK
+ if (wrapper_lock_type_backup != F_UNLCK) {
+ need_lock = false;
+ }
+#endif
+ if (need_lock) {
+ error = wrapper_external_lock(thd, F_WRLCK);
+ }
+ if (!error) {
+ if (
+ !(error = wrapper_start_stmt(thd, thr_lock_data.type)) &&
+ !(error = wrapper_rnd_init(true))
+ ) {
+ grn_obj key;
+ GRN_TEXT_INIT(&key, 0);
+ grn_bulk_space(ctx, &key, p_key_info->key_length);
+ while (!(error = wrapper_rnd_next(table->record[0])))
+ {
+ key_copy((uchar *)(GRN_TEXT_VALUE(&key)), table->record[0],
+ p_key_info, p_key_info->key_length);
+ int added;
+ grn_id record_id;
+ mrn_change_encoding(ctx, NULL);
+ record_id = grn_table_add(ctx, grn_table,
+ GRN_TEXT_VALUE(&key), p_key_info->key_length,
+ &added);
+ if (record_id == GRN_ID_NIL)
+ {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "failed to add a new record into groonga: key=<%.*s>",
+ (int) p_key_info->key_length, GRN_TEXT_VALUE(&key));
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, error_message, MYF(0));
+ }
+ if (error)
+ break;
+
+ uint k;
+ for (k = 0; k < n_keys; k++) {
+ tmp_key_info = &key_info[k];
+ if (!(tmp_key_info->flags & HA_FULLTEXT) &&
+ !mrn_is_geo_key(tmp_key_info)) {
+ continue;
+ }
+ if (!index_columns[k]) {
+ continue;
+ }
+ DBUG_PRINT("info", ("mroonga: key_num=%u", k));
+
+ uint l;
+ for (l = 0; l < KEY_N_KEY_PARTS(tmp_key_info); l++) {
+ Field *field = tmp_key_info->key_part[l].field;
+
+ if (field->is_null())
+ continue;
+ error = mrn_change_encoding(ctx, field->charset());
+ if (error)
+ break;
+
+ error = generic_store_bulk(field, &new_value_buffer);
+ if (error) {
+ my_message(error,
+ "mroonga: wrapper: "
+ "failed to get new value for updating index.",
+ MYF(0));
+ break;
+ }
+
+ grn_obj *index_column = index_columns[k];
+ grn_rc rc;
+ rc = grn_column_index_update(ctx, index_column, record_id, l + 1,
+ NULL, &new_value_buffer);
+ grn_obj_unlink(ctx, index_column);
+ if (rc) {
+ error = ER_ERROR_ON_WRITE;
+ my_message(error, ctx->errbuf, MYF(0));
+ break;
+ }
+ }
+ if (error)
+ break;
+ }
+ if (error)
+ break;
+ }
+ grn_obj_unlink(ctx, &key);
+ if (error != HA_ERR_END_OF_FILE)
+ wrapper_rnd_end();
+ else
+ error = wrapper_rnd_end();
+ }
+ if (need_lock) {
+ wrapper_external_lock(thd, F_UNLCK);
+ }
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_recreate_indexes(THD *thd)
+{
+ int error;
+ uint i, n_keys = table_share->keys;
+ KEY *p_key_info = &table->key_info[table_share->primary_key];
+ KEY *key_info = table->key_info;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::PathMapper mapper(table_share->normalized_path.str);
+ bitmap_clear_all(table->read_set);
+ clear_indexes();
+ remove_grn_obj_force(mapper.table_name());
+ grn_table = NULL;
+ mrn_set_bitmap_by_key(table->read_set, p_key_info);
+ for (i = 0; i < n_keys; i++) {
+ if (!(key_info[i].flags & HA_FULLTEXT) && !mrn_is_geo_key(&key_info[i])) {
+ continue;
+ }
+ mrn::IndexTableName index_table_name(mapper.table_name(),
+ table_share->key_info[i].name);
+ char index_column_full_name[MRN_MAX_PATH_SIZE];
+ snprintf(index_column_full_name, MRN_MAX_PATH_SIZE,
+ "%s.%s", index_table_name.c_str(), INDEX_COLUMN_NAME);
+ remove_grn_obj_force(index_column_full_name);
+ remove_grn_obj_force(index_table_name.c_str());
+ mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
+ }
+ error = wrapper_create_index(table_share->normalized_path.str, table,
+ NULL, share, mapper.table_name());
+ if (error)
+ DBUG_RETURN(error);
+ error = wrapper_open_indexes(table_share->normalized_path.str);
+ if (error)
+ DBUG_RETURN(error);
+ error = wrapper_fill_indexes(thd, key_info, grn_index_columns, n_keys);
+ bitmap_set_all(table->read_set);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_repair(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ int error;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_repair(thd, check_opt);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (error && error != HA_ADMIN_NOT_IMPLEMENTED)
+ DBUG_RETURN(error);
+ error = wrapper_recreate_indexes(thd);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_repair(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
+}
+
+int ha_mroonga::repair(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ share->disable_keys = false;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_repair(thd, check_opt);
+ } else {
+ error = storage_repair(thd, check_opt);
+ }
+ DBUG_RETURN(error);
+}
+
+bool ha_mroonga::wrapper_check_and_repair(THD *thd)
+{
+ // XXX: success is valid variable name?
+ bool success;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ success = wrap_handler->ha_check_and_repair(thd);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(success);
+}
+
+bool ha_mroonga::storage_check_and_repair(THD *thd)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(true);
+}
+
+bool ha_mroonga::check_and_repair(THD *thd)
+{
+ MRN_DBUG_ENTER_METHOD();
+ // XXX: success is valid variable name?
+ bool success;
+ if (share->wrapper_mode)
+ {
+ success = wrapper_check_and_repair(thd);
+ } else {
+ success = storage_check_and_repair(thd);
+ }
+ DBUG_RETURN(success);
+}
+
+int ha_mroonga::wrapper_analyze(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->ha_analyze(thd, check_opt);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_analyze(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
+}
+
+int ha_mroonga::analyze(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_analyze(thd, check_opt);
+ } else {
+ error = storage_analyze(thd, check_opt);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_optimize(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_ADMIN_TRY_ALTER);
+}
+
+int ha_mroonga::storage_optimize(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
+}
+
+int ha_mroonga::optimize(THD* thd, HA_CHECK_OPT* check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_optimize(thd, check_opt);
+ } else {
+ error = storage_optimize(thd, check_opt);
+ }
+ DBUG_RETURN(error);
+}
+
+bool ha_mroonga::wrapper_is_fatal_error(int error_num, uint flags)
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->is_fatal_error(error_num, flags);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_is_fatal_error(int error_num, uint flags)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool is_fatal_error = handler::is_fatal_error(error_num, flags);
+ DBUG_RETURN(is_fatal_error);
+}
+
+bool ha_mroonga::is_fatal_error(int error_num, uint flags)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool is_fatal_error;
+ if (share->wrapper_mode)
+ {
+ is_fatal_error = wrapper_is_fatal_error(error_num, flags);
+ } else {
+ is_fatal_error = storage_is_fatal_error(error_num, flags);
+ }
+ DBUG_RETURN(is_fatal_error);
+}
+
+bool ha_mroonga::wrapper_check_if_incompatible_data(
+ HA_CREATE_INFO *create_info, uint table_changes)
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->check_if_incompatible_data(create_info, table_changes);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_check_if_incompatible_data(
+ HA_CREATE_INFO *create_info, uint table_changes)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint n = table_share->fields;
+ for (uint i = 0; i < n; i++) {
+ Field *field = table->field[i];
+ if (field->flags & FIELD_IS_RENAMED) {
+ DBUG_RETURN(COMPATIBLE_DATA_NO);
+ }
+ }
+ DBUG_RETURN(COMPATIBLE_DATA_YES);
+}
+
+bool ha_mroonga::check_if_incompatible_data(
+ HA_CREATE_INFO *create_info, uint table_changes)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res;
+ if (
+ create_info->comment.str != table_share->comment.str ||
+ create_info->connect_string.str != table_share->connect_string.str
+ ) {
+ DBUG_RETURN(COMPATIBLE_DATA_NO);
+ }
+ if (share->wrapper_mode)
+ {
+ res = wrapper_check_if_incompatible_data(create_info, table_changes);
+ } else {
+ res = storage_check_if_incompatible_data(create_info, table_changes);
+ }
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_add_index_multiple_columns(KEY *key_info,
+ uint num_of_keys,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ bool skip_unique_key)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ if (!(error = storage_rnd_init(true)))
+ {
+ while (!(error = storage_rnd_next(table->record[0])))
+ {
+ for (uint i = 0; i < num_of_keys; i++) {
+ KEY *current_key_info = key_info + i;
+ if (
+ KEY_N_KEY_PARTS(current_key_info) == 1 ||
+ (current_key_info->flags & HA_FULLTEXT)
+ ) {
+ continue;
+ }
+ if (skip_unique_key && (key_info[i].flags & HA_NOSAME)) {
+ continue;
+ }
+ if (!index_columns[i]) {
+ continue;
+ }
+
+ /* fix key_info.key_length */
+ for (uint j = 0; j < KEY_N_KEY_PARTS(current_key_info); j++) {
+ if (
+ !current_key_info->key_part[j].null_bit &&
+ current_key_info->key_part[j].field->null_bit
+ ) {
+ current_key_info->key_length++;
+ current_key_info->key_part[j].null_bit =
+ current_key_info->key_part[j].field->null_bit;
+ }
+ }
+ if (key_info[i].flags & HA_NOSAME) {
+ grn_id key_id;
+ if ((error = storage_write_row_unique_index(table->record[0],
+ current_key_info,
+ index_tables[i],
+ &key_id)))
+ {
+ if (error == HA_ERR_FOUND_DUPP_KEY)
+ {
+ error = HA_ERR_FOUND_DUPP_UNIQUE;
+ }
+ break;
+ }
+ }
+ if ((error = storage_write_row_multiple_column_index(table->record[0],
+ record_id,
+ current_key_info,
+ index_columns[i])))
+ {
+ break;
+ }
+ }
+ if (error)
+ break;
+ }
+ if (error != HA_ERR_END_OF_FILE) {
+ storage_rnd_end();
+ } else {
+ error = storage_rnd_end();
+ }
+ }
+
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+bool ha_mroonga::wrapper_is_comment_changed(TABLE *table1, TABLE *table2)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ if (table1->s->comment.length != table2->s->comment.length) {
+ DBUG_RETURN(true);
+ }
+
+ if (strncmp(table1->s->comment.str,
+ table2->s->comment.str,
+ table1->s->comment.length) == 0) {
+ DBUG_RETURN(false);
+ } else {
+ DBUG_RETURN(true);
+ }
+}
+
+enum_alter_inplace_result ha_mroonga::wrapper_check_if_supported_inplace_alter(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint n_keys;
+ uint i;
+ enum_alter_inplace_result result_mroonga = HA_ALTER_INPLACE_NO_LOCK;
+ DBUG_PRINT("info", ("mroonga: handler_flags=%lu", ha_alter_info->handler_flags));
+
+ if (wrapper_is_comment_changed(table, altered_table)) {
+ DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
+ }
+ if (
+ (ha_alter_info->handler_flags & Alter_inplace_info::ADD_INDEX) &&
+ (ha_alter_info->handler_flags &
+ (
+ Alter_inplace_info::ADD_COLUMN |
+ Alter_inplace_info::DROP_COLUMN |
+ Alter_inplace_info::ALTER_COLUMN_TYPE |
+ Alter_inplace_info::ALTER_COLUMN_ORDER |
+ Alter_inplace_info::ALTER_COLUMN_NULLABLE |
+ Alter_inplace_info::ALTER_COLUMN_NOT_NULLABLE |
+ Alter_inplace_info::ALTER_COLUMN_STORAGE_TYPE |
+ Alter_inplace_info::ALTER_COLUMN_COLUMN_FORMAT
+ )
+ )
+ ) {
+ DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
+ }
+ if (ha_alter_info->handler_flags & Alter_inplace_info::ALTER_RENAME)
+ {
+ DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
+ }
+
+ DBUG_ASSERT(ha_alter_info->key_count == altered_table->s->keys);
+ alter_key_count = 0;
+ alter_index_drop_count = 0;
+ alter_index_add_count = 0;
+ alter_handler_flags = ha_alter_info->handler_flags;
+ if (!(alter_key_info_buffer = (KEY *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &alter_key_info_buffer, sizeof(KEY) * ha_alter_info->key_count,
+ &alter_index_drop_buffer, sizeof(KEY) * ha_alter_info->index_drop_count,
+ &alter_index_add_buffer, sizeof(uint) * ha_alter_info->index_add_count,
+ &wrap_altered_table, sizeof(TABLE),
+ &wrap_altered_table_key_info, sizeof(KEY) * altered_table->s->keys,
+ &wrap_altered_table_share, sizeof(TABLE_SHARE),
+ &wrap_altered_table_share_key_info, sizeof(KEY) * altered_table->s->keys,
+ NullS))
+ ) {
+ DBUG_RETURN(HA_ALTER_ERROR);
+ }
+ memcpy(wrap_altered_table, altered_table, sizeof(TABLE));
+ memcpy(wrap_altered_table_share, altered_table->s, sizeof(TABLE_SHARE));
+
+ n_keys = ha_alter_info->index_drop_count;
+ for (i = 0; i < n_keys; ++i) {
+ const KEY *key = ha_alter_info->index_drop_buffer[i];
+ if (key->flags & HA_FULLTEXT || mrn_is_geo_key(key)) {
+ result_mroonga = HA_ALTER_INPLACE_EXCLUSIVE_LOCK;
+ } else {
+ memcpy(&alter_index_drop_buffer[alter_index_drop_count],
+ ha_alter_info->index_drop_buffer[i], sizeof(KEY));
+ ++alter_index_drop_count;
+ }
+ }
+ if (!alter_index_drop_count) {
+ alter_handler_flags &= ~Alter_inplace_info::DROP_INDEX;
+ }
+ n_keys = ha_alter_info->index_add_count;
+ for (i = 0; i < n_keys; ++i) {
+ const KEY *key =
+ &altered_table->key_info[ha_alter_info->index_add_buffer[i]];
+ if (key->flags & HA_FULLTEXT || mrn_is_geo_key(key)) {
+ result_mroonga = HA_ALTER_INPLACE_EXCLUSIVE_LOCK;
+ } else {
+ alter_index_add_buffer[alter_index_add_count] =
+ ha_alter_info->index_add_buffer[i];
+ ++alter_index_add_count;
+ }
+ }
+ if (!alter_index_add_count) {
+ alter_handler_flags &= ~Alter_inplace_info::ADD_INDEX;
+ }
+ uint add_index_pos = 0;
+ n_keys = ha_alter_info->key_count;
+ for (i = 0; i < n_keys; ++i) {
+ const KEY *key = &altered_table->key_info[i];
+ if (!(key->flags & HA_FULLTEXT || mrn_is_geo_key(key))) {
+ memcpy(&alter_key_info_buffer[alter_key_count],
+ &ha_alter_info->key_info_buffer[i], sizeof(KEY));
+ memcpy(&wrap_altered_table_key_info[alter_key_count],
+ &altered_table->key_info[i], sizeof(KEY));
+ memcpy(&wrap_altered_table_share_key_info[alter_key_count],
+ &altered_table->s->key_info[i], sizeof(KEY));
+ if (add_index_pos < alter_index_add_count &&
+ alter_index_add_buffer[add_index_pos] == i) {
+ alter_index_add_buffer[add_index_pos] = alter_key_count;
+ ++add_index_pos;
+ }
+ ++alter_key_count;
+ }
+ }
+ wrap_altered_table->key_info = wrap_altered_table_key_info;
+ wrap_altered_table_share->key_info = wrap_altered_table_share_key_info;
+ wrap_altered_table_share->keys = alter_key_count;
+ wrap_altered_table->s = wrap_altered_table_share;
+
+ if (!alter_handler_flags) {
+ DBUG_RETURN(result_mroonga);
+ }
+ enum_alter_inplace_result result;
+ MRN_SET_WRAP_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ result = wrap_handler->check_if_supported_inplace_alter(wrap_altered_table,
+ ha_alter_info);
+ MRN_SET_BASE_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ if (result_mroonga > result)
+ DBUG_RETURN(result);
+ DBUG_RETURN(result_mroonga);
+}
+
+enum_alter_inplace_result ha_mroonga::storage_check_if_supported_inplace_alter(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ Alter_inplace_info::HA_ALTER_FLAGS supported_flags =
+ Alter_inplace_info::ADD_INDEX |
+ Alter_inplace_info::DROP_INDEX |
+ Alter_inplace_info::ADD_UNIQUE_INDEX |
+ Alter_inplace_info::DROP_UNIQUE_INDEX |
+ Alter_inplace_info::ADD_PK_INDEX |
+ Alter_inplace_info::DROP_PK_INDEX |
+ Alter_inplace_info::ADD_COLUMN |
+ Alter_inplace_info::DROP_COLUMN |
+ Alter_inplace_info::ALTER_COLUMN_NAME;
+ if (ha_alter_info->handler_flags & supported_flags) {
+ DBUG_RETURN(HA_ALTER_INPLACE_EXCLUSIVE_LOCK);
+ } else {
+ DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
+ }
+}
+
+enum_alter_inplace_result ha_mroonga::check_if_supported_inplace_alter(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ enum_alter_inplace_result result;
+ if (share->wrapper_mode) {
+ result = wrapper_check_if_supported_inplace_alter(altered_table,
+ ha_alter_info);
+ } else {
+ result = storage_check_if_supported_inplace_alter(altered_table,
+ ha_alter_info);
+ }
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::wrapper_prepare_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ bool result;
+ MRN_DBUG_ENTER_METHOD();
+ if (!alter_handler_flags) {
+ DBUG_RETURN(false);
+ }
+ MRN_SET_WRAP_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ result = wrap_handler->ha_prepare_inplace_alter_table(wrap_altered_table,
+ ha_alter_info);
+ MRN_SET_BASE_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::storage_prepare_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(false);
+}
+
+bool ha_mroonga::prepare_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool result;
+ if (share->wrapper_mode) {
+ result = wrapper_prepare_inplace_alter_table(altered_table, ha_alter_info);
+ } else {
+ result = storage_prepare_inplace_alter_table(altered_table, ha_alter_info);
+ }
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::wrapper_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ int error;
+ bool result = false;
+ uint n_keys;
+ uint i, j = 0;
+ KEY *key_info = table_share->key_info;
+ MRN_DBUG_ENTER_METHOD();
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(true);
+
+ DBUG_PRINT("info", ("mroonga: table_name=%s", share->table_name));
+ mrn::PathMapper mapper(share->table_name);
+ n_keys = ha_alter_info->index_drop_count;
+ for (i = 0; i < n_keys; ++i) {
+ const KEY *key = ha_alter_info->index_drop_buffer[i];
+ if (!(key->flags & HA_FULLTEXT || mrn_is_geo_key(key))) {
+ continue;
+ }
+ while (strcmp(key_info[j].name, key->name)) {
+ ++j;
+ }
+ DBUG_PRINT("info", ("mroonga: key_name=%s", key->name));
+ error = drop_index(share, j);
+ if (error)
+ DBUG_RETURN(true);
+ grn_index_tables[j] = NULL;
+ grn_index_columns[j] = NULL;
+ }
+
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables,
+ ha_alter_info->key_count);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns,
+ ha_alter_info->key_count);
+ MRN_SHARE *tmp_share;
+ TABLE_SHARE tmp_table_share;
+ char **key_parser;
+ uint *key_parser_length;
+ KEY *p_key_info = &table->key_info[table_share->primary_key];
+ bool need_fill_index = false;
+ memset(index_tables, 0, sizeof(grn_obj *) * ha_alter_info->key_count);
+ memset(index_columns, 0, sizeof(grn_obj *) * ha_alter_info->key_count);
+ tmp_table_share.keys = ha_alter_info->key_count;
+ tmp_table_share.fields = 0;
+ if (!(tmp_share = (MRN_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &tmp_share, sizeof(*tmp_share),
+ &key_parser, sizeof(char *) * (tmp_table_share.keys),
+ &key_parser_length, sizeof(uint) * (tmp_table_share.keys),
+ NullS))
+ ) {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(true);
+ }
+ tmp_share->engine = NULL;
+ tmp_share->table_share = &tmp_table_share;
+ tmp_share->index_table = NULL;
+ tmp_share->index_table_length = NULL;
+ tmp_share->key_parser = key_parser;
+ tmp_share->key_parser_length = key_parser_length;
+ bitmap_clear_all(table->read_set);
+ mrn_set_bitmap_by_key(table->read_set, p_key_info);
+ n_keys = ha_alter_info->index_add_count;
+ for (i = 0; i < n_keys; ++i) {
+ uint key_pos = ha_alter_info->index_add_buffer[i];
+ KEY *key = &altered_table->key_info[key_pos];
+ if (!(key->flags & HA_FULLTEXT || mrn_is_geo_key(key))) {
+ continue;
+ }
+ if (share->disable_keys) {
+ continue;
+ }
+ if ((error = mrn_add_index_param(tmp_share, key, key_pos)))
+ {
+ break;
+ }
+ DBUG_PRINT("info", ("mroonga: add key pos=%u", key_pos));
+ if (
+ (key->flags & HA_FULLTEXT) &&
+ (error = wrapper_create_index_fulltext(mapper.table_name(),
+ key_pos,
+ key, index_tables, NULL,
+ tmp_share))
+ ) {
+ break;
+ } else if (
+ mrn_is_geo_key(key) &&
+ (error = wrapper_create_index_geo(mapper.table_name(),
+ key_pos, key,
+ index_tables, NULL, tmp_share))
+ ) {
+ break;
+ }
+ mrn_set_bitmap_by_key(table->read_set, key);
+ index_columns[key_pos] = grn_obj_column(ctx,
+ index_tables[key_pos],
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME));
+ need_fill_index = true;
+ }
+ if (!error && need_fill_index) {
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(table->record[0], altered_table->record[0]);
+ uint n_columns = altered_table->s->fields;
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = altered_table->field[i];
+ field->move_field_offset(ptr_diff);
+ }
+ error = wrapper_fill_indexes(ha_thd(), altered_table->key_info,
+ index_columns, ha_alter_info->key_count);
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = altered_table->field[i];
+ field->move_field_offset(-ptr_diff);
+ }
+ }
+ bitmap_set_all(table->read_set);
+
+ if (!error && alter_handler_flags) {
+ MRN_SET_WRAP_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ result = wrap_handler->ha_inplace_alter_table(wrap_altered_table,
+ ha_alter_info);
+ MRN_SET_BASE_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+
+ if (result || error)
+ {
+ n_keys = ha_alter_info->index_add_count;
+ for (i = 0; i < n_keys; ++i) {
+ uint key_pos = ha_alter_info->index_add_buffer[i];
+ KEY *key =
+ &altered_table->key_info[key_pos];
+ if (!(key->flags & HA_FULLTEXT || mrn_is_geo_key(key))) {
+ continue;
+ }
+ if (share->disable_keys) {
+ continue;
+ }
+ if (index_tables[key_pos])
+ {
+ grn_obj_remove(ctx, index_tables[key_pos]);
+ }
+ }
+ result = true;
+ }
+ mrn_free_share_alloc(tmp_share);
+ my_free(tmp_share, MYF(0));
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::storage_inplace_alter_table_index(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_error = false;
+ int error = 0;
+ uint n_keys;
+ uint i, j = 0;
+ KEY *key_info = table_share->key_info;
+ mrn::PathMapper mapper(share->table_name);
+ n_keys = ha_alter_info->index_drop_count;
+ for (i = 0; i < n_keys; ++i) {
+ KEY *key = ha_alter_info->index_drop_buffer[i];
+ while (strcmp(key_info[j].name, key->name)) {
+ ++j;
+ }
+ error = drop_index(share, j);
+ if (error)
+ DBUG_RETURN(true);
+ grn_index_tables[j] = NULL;
+ grn_index_columns[j] = NULL;
+ }
+
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables,
+ ha_alter_info->key_count);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns,
+ ha_alter_info->key_count);
+ MRN_SHARE *tmp_share;
+ TABLE_SHARE tmp_table_share;
+ char **index_table, **key_parser, **col_flags, **col_type;
+ uint *index_table_length, *key_parser_length, *col_flags_length, *col_type_length;
+ bool have_multiple_column_index = false;
+ memset(index_tables, 0, sizeof(grn_obj *) * ha_alter_info->key_count);
+ memset(index_columns, 0, sizeof(grn_obj *) * ha_alter_info->key_count);
+ tmp_table_share.keys = ha_alter_info->key_count;
+ tmp_table_share.fields = 0;
+ if (!(tmp_share = (MRN_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &tmp_share, sizeof(*tmp_share),
+ &index_table, sizeof(char *) * tmp_table_share.keys,
+ &index_table_length, sizeof(uint) * tmp_table_share.keys,
+ &key_parser, sizeof(char *) * tmp_table_share.keys,
+ &key_parser_length, sizeof(uint) * tmp_table_share.keys,
+ &col_flags, sizeof(char *) * tmp_table_share.fields,
+ &col_flags_length, sizeof(uint) * tmp_table_share.fields,
+ &col_type, sizeof(char *) * tmp_table_share.fields,
+ &col_type_length, sizeof(uint) * tmp_table_share.fields,
+ NullS))
+ ) {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(true);
+ }
+ tmp_share->engine = NULL;
+ tmp_share->table_share = &tmp_table_share;
+ tmp_share->index_table = index_table;
+ tmp_share->index_table_length = index_table_length;
+ tmp_share->key_parser = key_parser;
+ tmp_share->key_parser_length = key_parser_length;
+ tmp_share->col_flags = col_flags;
+ tmp_share->col_flags_length = col_flags_length;
+ tmp_share->col_type = col_type;
+ tmp_share->col_type_length = col_type_length;
+ bitmap_clear_all(table->read_set);
+ if (table_share->primary_key != MAX_KEY) {
+ KEY *p_key_info = &table->key_info[table_share->primary_key];
+ mrn_set_bitmap_by_key(table->read_set, p_key_info);
+ }
+ n_keys = ha_alter_info->index_add_count;
+ for (i = 0; i < n_keys; ++i) {
+ uint key_pos = ha_alter_info->index_add_buffer[i];
+ KEY *key =
+ &altered_table->key_info[key_pos];
+ if (share->disable_keys && !(key->flags & HA_NOSAME)) {
+ continue; // key is disabled
+ }
+ if ((error = mrn_add_index_param(tmp_share, key, key_pos)))
+ {
+ break;
+ }
+ DBUG_PRINT("info", ("mroonga: add key pos=%u", key_pos));
+ if ((error = storage_create_index(table, mapper.table_name(), grn_table,
+ tmp_share, key, index_tables,
+ index_columns, key_pos)))
+ {
+ break;
+ }
+ if (
+ KEY_N_KEY_PARTS(key) == 1 &&
+ (key->flags & HA_NOSAME) &&
+ grn_table_size(ctx, grn_table) !=
+ grn_table_size(ctx, index_tables[key_pos])
+ ) {
+ error = HA_ERR_FOUND_DUPP_UNIQUE;
+ my_printf_error(ER_DUP_UNIQUE, ER(ER_DUP_UNIQUE), MYF(0),
+ table_share->table_name);
+ ++i;
+ break;
+ }
+ if (
+ KEY_N_KEY_PARTS(key) != 1 &&
+ !(key->flags & HA_FULLTEXT)
+ ) {
+ mrn_set_bitmap_by_key(table->read_set, key);
+ have_multiple_column_index = true;
+ }
+ }
+ if (!error && have_multiple_column_index) {
+ my_ptrdiff_t ptr_diff = PTR_BYTE_DIFF(table->record[0], altered_table->record[0]);
+ uint n_columns = altered_table->s->fields;
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = altered_table->field[i];
+ field->move_field_offset(ptr_diff);
+ }
+ error = storage_add_index_multiple_columns(altered_table->key_info,
+ ha_alter_info->key_count,
+ index_tables,
+ index_columns, false);
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = altered_table->field[i];
+ field->move_field_offset(-ptr_diff);
+ }
+ }
+ bitmap_set_all(table->read_set);
+
+ if (error)
+ {
+ n_keys = ha_alter_info->index_add_count;
+ for (i = 0; i < n_keys; ++i) {
+ uint key_pos = ha_alter_info->index_add_buffer[i];
+ KEY *key =
+ &altered_table->key_info[key_pos];
+ if (share->disable_keys && !(key->flags & HA_NOSAME)) {
+ continue;
+ }
+ if (index_tables[key_pos])
+ {
+ grn_obj_remove(ctx, index_columns[key_pos]);
+ grn_obj_remove(ctx, index_tables[key_pos]);
+ }
+ }
+ have_error = true;
+ }
+ mrn_free_share_alloc(tmp_share);
+ my_free(tmp_share, MYF(0));
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+
+ DBUG_RETURN(have_error);
+}
+
+bool ha_mroonga::storage_inplace_alter_table_add_column(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_error = false;
+
+ MRN_SHARE *tmp_share;
+ TABLE_SHARE tmp_table_share;
+ char **index_table, **key_parser, **col_flags, **col_type;
+ uint *index_table_length, *key_parser_length, *col_flags_length, *col_type_length;
+ tmp_table_share.keys = 0;
+ tmp_table_share.fields = altered_table->s->fields;
+ tmp_share = (MRN_SHARE *)my_multi_malloc(
+ MYF(MY_WME | MY_ZEROFILL),
+ &tmp_share, sizeof(*tmp_share),
+ &index_table, sizeof(char *) * tmp_table_share.keys,
+ &index_table_length, sizeof(uint) * tmp_table_share.keys,
+ &key_parser, sizeof(char *) * tmp_table_share.keys,
+ &key_parser_length, sizeof(uint) * tmp_table_share.keys,
+ &col_flags, sizeof(char *) * tmp_table_share.fields,
+ &col_flags_length, sizeof(uint) * tmp_table_share.fields,
+ &col_type, sizeof(char *) * tmp_table_share.fields,
+ &col_type_length, sizeof(uint) * tmp_table_share.fields,
+ NullS);
+ if (!tmp_share) {
+ have_error = true;
+ DBUG_RETURN(have_error);
+ }
+ tmp_share->engine = NULL;
+ tmp_share->table_share = &tmp_table_share;
+ tmp_share->index_table = index_table;
+ tmp_share->index_table_length = index_table_length;
+ tmp_share->key_parser = key_parser;
+ tmp_share->key_parser_length = key_parser_length;
+ tmp_share->col_flags = col_flags;
+ tmp_share->col_flags_length = col_flags_length;
+ tmp_share->col_type = col_type;
+ tmp_share->col_type_length = col_type_length;
+
+ mrn::PathMapper mapper(share->table_name);
+ grn_obj *table_obj;
+ table_obj = grn_ctx_get(ctx, mapper.table_name(), strlen(mapper.table_name()));
+
+ Alter_info *alter_info = ha_alter_info->alter_info;
+ List_iterator_fast<Create_field> create_fields(alter_info->create_list);
+ for (uint i = 0; Create_field *create_field = create_fields++; i++) {
+ if (create_field->field) {
+ continue;
+ }
+
+ grn_obj *col_type;
+ Field *field = altered_table->s->field[i];
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+
+ int error = mrn_add_column_param(tmp_share, field, i);
+ if (error) {
+ have_error = true;
+ break;
+ }
+
+ grn_obj_flags col_flags = GRN_OBJ_PERSISTENT;
+ if (tmp_share->col_flags[i]) {
+ // TODO: parse flags
+ if (strcmp(tmp_share->col_flags[i], "COLUMN_VECTOR") == 0) {
+ col_flags |= GRN_OBJ_COLUMN_VECTOR;
+ } else {
+ col_flags |= GRN_OBJ_COLUMN_SCALAR;
+ }
+ } else {
+ col_flags |= GRN_OBJ_COLUMN_SCALAR;
+ }
+
+ grn_builtin_type gtype = mrn_grn_type_from_field(ctx, field, false);
+ if (tmp_share->col_type[i]) {
+ col_type = grn_ctx_get(ctx, tmp_share->col_type[i], -1);
+ } else {
+ col_type = grn_ctx_at(ctx, gtype);
+ }
+ char *col_path = NULL; // we don't specify path
+
+ grn_obj *column_obj =
+ grn_column_create(ctx, table_obj, column_name, column_name_size,
+ col_path, col_flags, col_type);
+ if (ctx->rc) {
+ error = ER_WRONG_COLUMN_NAME;
+ my_message(error, ctx->errbuf, MYF(0));
+ have_error = true;
+ }
+ if (column_obj) {
+ grn_obj_unlink(ctx, column_obj);
+ }
+
+ if (have_error) {
+ break;
+ }
+ }
+
+ grn_obj_unlink(ctx, table_obj);
+
+ mrn_free_share_alloc(tmp_share);
+ my_free(tmp_share, MYF(0));
+
+ DBUG_RETURN(have_error);
+}
+
+bool ha_mroonga::storage_inplace_alter_table_drop_column(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_error = false;
+
+ mrn::PathMapper mapper(share->table_name);
+ grn_obj *table_obj;
+ table_obj = grn_ctx_get(ctx, mapper.table_name(), strlen(mapper.table_name()));
+
+ Alter_info *alter_info = ha_alter_info->alter_info;
+
+ uint n_fields = table->s->fields;
+ for (uint i = 0; i < n_fields; i++) {
+ Field *field = table->field[i];
+
+ bool dropped = true;
+ List_iterator_fast<Create_field> create_fields(alter_info->create_list);
+ while (Create_field *create_field = create_fields++) {
+ if (create_field->field == field) {
+ dropped = false;
+ break;
+ }
+ }
+ if (!dropped) {
+ continue;
+ }
+
+ const char *column_name = field->field_name;
+ int column_name_size = strlen(column_name);
+
+ grn_obj *column_obj;
+ column_obj = grn_obj_column(ctx, table_obj, column_name, column_name_size);
+ if (column_obj) {
+ grn_obj_remove(ctx, column_obj);
+ }
+ if (ctx->rc) {
+ int error = ER_WRONG_COLUMN_NAME;
+ my_message(error, ctx->errbuf, MYF(0));
+ have_error = true;
+ break;
+ }
+ }
+ grn_obj_unlink(ctx, table_obj);
+
+ DBUG_RETURN(have_error);
+}
+
+bool ha_mroonga::storage_inplace_alter_table_rename_column(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_error = false;
+
+ mrn::PathMapper mapper(share->table_name);
+ grn_obj *table_obj;
+ table_obj = grn_ctx_get(ctx, mapper.table_name(), strlen(mapper.table_name()));
+
+ Alter_info *alter_info = ha_alter_info->alter_info;
+ uint n_fields = table->s->fields;
+ for (uint i = 0; i < n_fields; i++) {
+ Field *field = table->field[i];
+
+ if (!(field->flags & FIELD_IS_RENAMED)) {
+ continue;
+ }
+
+ const char *new_name = NULL;
+ List_iterator_fast<Create_field> create_fields(alter_info->create_list);
+ while (Create_field *create_field = create_fields++) {
+ if (create_field->field == field) {
+ new_name = create_field->field_name;
+ break;
+ }
+ }
+
+ if (!new_name) {
+ continue;
+ }
+
+ const char *old_name = field->field_name;
+ grn_obj *column_obj;
+ column_obj = grn_obj_column(ctx, table_obj, old_name, strlen(old_name));
+ if (column_obj) {
+ grn_column_rename(ctx, column_obj, new_name, strlen(new_name));
+ if (ctx->rc) {
+ int error = ER_WRONG_COLUMN_NAME;
+ my_message(error, ctx->errbuf, MYF(0));
+ have_error = true;
+ }
+ grn_obj_unlink(ctx, column_obj);
+ }
+
+ if (have_error) {
+ break;
+ }
+ }
+ grn_obj_unlink(ctx, table_obj);
+
+ DBUG_RETURN(have_error);
+}
+
+bool ha_mroonga::storage_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have_error = false;
+
+ int error = mrn_change_encoding(ctx, system_charset_info);
+ if (error) {
+ have_error = true;
+ }
+
+ Alter_inplace_info::HA_ALTER_FLAGS index_related_flags =
+ Alter_inplace_info::ADD_INDEX |
+ Alter_inplace_info::DROP_INDEX |
+ Alter_inplace_info::ADD_UNIQUE_INDEX |
+ Alter_inplace_info::DROP_UNIQUE_INDEX |
+ Alter_inplace_info::ADD_PK_INDEX |
+ Alter_inplace_info::DROP_PK_INDEX;
+ if (!have_error &&
+ (ha_alter_info->handler_flags & index_related_flags)) {
+ have_error = storage_inplace_alter_table_index(altered_table, ha_alter_info);
+ }
+
+ Alter_inplace_info::HA_ALTER_FLAGS add_column_related_flags =
+ Alter_inplace_info::ADD_COLUMN;
+ if (!have_error &&
+ (ha_alter_info->handler_flags & add_column_related_flags)) {
+ have_error = storage_inplace_alter_table_add_column(altered_table, ha_alter_info);
+ }
+
+ Alter_inplace_info::HA_ALTER_FLAGS drop_column_related_flags =
+ Alter_inplace_info::DROP_COLUMN;
+ if (!have_error &&
+ (ha_alter_info->handler_flags & drop_column_related_flags)) {
+ have_error = storage_inplace_alter_table_drop_column(altered_table, ha_alter_info);
+ }
+
+ Alter_inplace_info::HA_ALTER_FLAGS rename_column_related_flags =
+ Alter_inplace_info::ALTER_COLUMN_NAME;
+ if (!have_error &&
+ (ha_alter_info->handler_flags & rename_column_related_flags)) {
+ have_error = storage_inplace_alter_table_rename_column(altered_table, ha_alter_info);
+ }
+
+ DBUG_RETURN(have_error);
+}
+
+bool ha_mroonga::inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool result;
+ if (share->wrapper_mode) {
+ result = wrapper_inplace_alter_table(altered_table, ha_alter_info);
+ } else {
+ result = storage_inplace_alter_table(altered_table, ha_alter_info);
+ }
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::wrapper_commit_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit)
+{
+ bool result;
+ MRN_DBUG_ENTER_METHOD();
+ if (!alter_handler_flags) {
+ my_free(alter_key_info_buffer, MYF(0));
+ alter_key_info_buffer = NULL;
+ DBUG_RETURN(false);
+ }
+ MRN_SET_WRAP_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ result = wrap_handler->ha_commit_inplace_alter_table(wrap_altered_table,
+ ha_alter_info,
+ commit);
+ MRN_SET_BASE_ALTER_KEY(this, ha_alter_info);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ my_free(alter_key_info_buffer, MYF(0));
+ alter_key_info_buffer = NULL;
+ DBUG_RETURN(result);
+}
+
+bool ha_mroonga::storage_commit_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(false);
+}
+
+bool ha_mroonga::commit_inplace_alter_table(
+ TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool result;
+ if (share->wrapper_mode) {
+ result = wrapper_commit_inplace_alter_table(altered_table, ha_alter_info,
+ commit);
+ } else {
+ result = storage_commit_inplace_alter_table(altered_table, ha_alter_info,
+ commit);
+ }
+ DBUG_RETURN(result);
+}
+
+void ha_mroonga::wrapper_notify_table_changed()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->ha_notify_table_changed();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_notify_table_changed()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::notify_table_changed()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode) {
+ wrapper_notify_table_changed();
+ } else {
+ storage_notify_table_changed();
+ }
+ DBUG_VOID_RETURN;
+}
+#else
+uint ha_mroonga::wrapper_alter_table_flags(uint flags)
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->alter_table_flags(flags);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_alter_table_flags(uint flags)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res = handler::alter_table_flags(flags);
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::alter_table_flags(uint flags)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_alter_table_flags(flags);
+ } else {
+ res = storage_alter_table_flags(flags);
+ }
+ DBUG_RETURN(res);
+}
+
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+int ha_mroonga::wrapper_add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys, handler_add_index **add)
+#else
+int ha_mroonga::wrapper_add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys)
+#endif
+{
+ int error = 0;
+ uint i, j, k;
+ uint n_keys = table->s->keys;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, num_of_keys + n_keys);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns, num_of_keys + n_keys);
+ THD *thd = ha_thd();
+ MRN_SHARE *tmp_share;
+ TABLE_SHARE tmp_table_share;
+ char **key_parser;
+ uint *key_parser_length;
+ MRN_DBUG_ENTER_METHOD();
+ if (!(wrap_alter_key_info = (KEY *) my_malloc(sizeof(KEY) * num_of_keys,
+ MYF(MY_WME)))) {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ KEY *p_key_info = &table->key_info[table_share->primary_key], *tmp_key_info;
+ tmp_table_share.keys = n_keys + num_of_keys;
+ tmp_table_share.fields = 0;
+ if (!(tmp_share = (MRN_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &tmp_share, sizeof(*tmp_share),
+ &key_parser, sizeof(char *) * (n_keys + num_of_keys),
+ &key_parser_length, sizeof(uint) * (n_keys + num_of_keys),
+ NullS))
+ ) {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ tmp_share->engine = NULL;
+ tmp_share->table_share = &tmp_table_share;
+ tmp_share->index_table = NULL;
+ tmp_share->index_table_length = NULL;
+ tmp_share->key_parser = key_parser;
+ tmp_share->key_parser_length = key_parser_length;
+ tmp_share->col_flags = NULL;
+ tmp_share->col_type = NULL;
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ hnd_add_index = NULL;
+#endif
+ bitmap_clear_all(table->read_set);
+ mrn_set_bitmap_by_key(table->read_set, p_key_info);
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0, j = 0; i < num_of_keys; i++) {
+ if (!(key_info[i].flags & HA_FULLTEXT) && !mrn_is_geo_key(&key_info[i])) {
+ wrap_alter_key_info[j] = key_info[i];
+ j++;
+ continue;
+ }
+ if (share->disable_keys) {
+ continue;
+ }
+ if ((error = mrn_add_index_param(tmp_share, &key_info[i], i + n_keys)))
+ {
+ break;
+ }
+ index_tables[i + n_keys] = NULL;
+ if (
+ (key_info[i].flags & HA_FULLTEXT) &&
+ (error = wrapper_create_index_fulltext(mapper.table_name(),
+ i + n_keys,
+ &key_info[i], index_tables, NULL,
+ tmp_share))
+ ) {
+ break;
+ } else if (
+ mrn_is_geo_key(&key_info[i]) &&
+ (error = wrapper_create_index_geo(mapper.table_name(),
+ i + n_keys, &key_info[i],
+ index_tables, NULL, tmp_share))
+ ) {
+ break;
+ }
+ mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
+ }
+ if (!error && i > j && !share->disable_keys) {
+ for (k = 0; k < num_of_keys; k++) {
+ tmp_key_info = &key_info[k];
+ if (!(tmp_key_info->flags & HA_FULLTEXT) &&
+ !mrn_is_geo_key(tmp_key_info)) {
+ continue;
+ }
+ index_columns[k + n_keys] = grn_obj_column(ctx,
+ index_tables[k + n_keys],
+ INDEX_COLUMN_NAME,
+ strlen(INDEX_COLUMN_NAME));
+ }
+ error = wrapper_fill_indexes(thd, key_info, &index_columns[n_keys],
+ num_of_keys);
+ }
+ bitmap_set_all(table->read_set);
+
+ if (!error && j)
+ {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ error = wrap_handler->add_index(table_arg, wrap_alter_key_info, j,
+ &hnd_add_index);
+#else
+ error = wrap_handler->add_index(table_arg, wrap_alter_key_info, j);
+#endif
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ if (error)
+ {
+ for (k = 0; k < i; k++) {
+ if (!(key_info[k].flags & HA_FULLTEXT) && !mrn_is_geo_key(&key_info[k]))
+ {
+ continue;
+ }
+ if (index_tables[k + n_keys])
+ {
+ grn_obj_remove(ctx, index_tables[k + n_keys]);
+ }
+ }
+ }
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ else {
+ *add = new handler_add_index(table_arg, key_info, num_of_keys);
+ }
+#endif
+ mrn_free_share_alloc(tmp_share);
+ my_free(tmp_share, MYF(0));
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(error);
+}
+
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+int ha_mroonga::storage_add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys, handler_add_index **add)
+#else
+int ha_mroonga::storage_add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys)
+#endif
+{
+ int error = 0;
+ uint i;
+ uint n_keys = table->s->keys;
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_tables, num_of_keys + n_keys);
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(grn_obj *, index_columns, num_of_keys + n_keys);
+ MRN_SHARE *tmp_share;
+ TABLE_SHARE tmp_table_share;
+ char **index_table, **key_parser, **col_flags, **col_type;
+ uint *index_table_length, *key_parser_length, *col_flags_length, *col_type_length;
+ bool have_multiple_column_index = false;
+
+ MRN_DBUG_ENTER_METHOD();
+ tmp_table_share.keys = n_keys + num_of_keys;
+ tmp_table_share.fields = 0;
+ if (!(tmp_share = (MRN_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &tmp_share, sizeof(*tmp_share),
+ &index_table, sizeof(char*) * tmp_table_share.keys,
+ &index_table_length, sizeof(uint) * tmp_table_share.keys,
+ &key_parser, sizeof(char *) * tmp_table_share.keys,
+ &key_parser_length, sizeof(uint) * tmp_table_share.keys,
+ &col_flags, sizeof(char *) * tmp_table_share.fields,
+ &col_flags_length, sizeof(uint) * tmp_table_share.fields,
+ &col_type, sizeof(char *) * tmp_table_share.fields,
+ &col_type_length, sizeof(uint) * tmp_table_share.fields,
+ NullS))
+ ) {
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ tmp_share->engine = NULL;
+ tmp_share->table_share = &tmp_table_share;
+ tmp_share->index_table = index_table;
+ tmp_share->index_table_length = index_table_length;
+ tmp_share->key_parser = key_parser;
+ tmp_share->key_parser_length = key_parser_length;
+ tmp_share->col_flags = col_flags;
+ tmp_share->col_flags_length = col_flags_length;
+ tmp_share->col_type = col_type;
+ tmp_share->col_type_length = col_type_length;
+ bitmap_clear_all(table->read_set);
+ mrn::PathMapper mapper(share->table_name);
+ for (i = 0; i < num_of_keys; i++) {
+ if (share->disable_keys && !(key_info[i].flags & HA_NOSAME)) {
+ continue; // key is disabled
+ }
+ index_tables[i + n_keys] = NULL;
+ index_columns[i + n_keys] = NULL;
+ if ((error = mrn_add_index_param(tmp_share, &key_info[i], i + n_keys)))
+ {
+ break;
+ }
+ if ((error = storage_create_index(table, mapper.table_name(), grn_table,
+ tmp_share, &key_info[i], index_tables,
+ index_columns, i + n_keys)))
+ {
+ break;
+ }
+ if (
+ KEY_N_KEY_PARTS(&(key_info[i])) == 1 &&
+ (key_info[i].flags & HA_NOSAME) &&
+ grn_table_size(ctx, grn_table) !=
+ grn_table_size(ctx, index_tables[i + n_keys])
+ ) {
+ error = HA_ERR_FOUND_DUPP_UNIQUE;
+ i++;
+ break;
+ }
+ if (
+ KEY_N_KEY_PARTS(&(key_info[i])) != 1 &&
+ !(key_info[i].flags & HA_FULLTEXT)
+ ) {
+ mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
+ have_multiple_column_index = true;
+ }
+ }
+ if (!error && have_multiple_column_index)
+ {
+ error = storage_add_index_multiple_columns(key_info, num_of_keys,
+ index_tables + n_keys,
+ index_columns + n_keys, false);
+ }
+ bitmap_set_all(table->read_set);
+ if (error)
+ {
+ for (uint j = 0; j < i; j++) {
+ if (index_tables[j + n_keys])
+ {
+ grn_obj_remove(ctx, index_columns[j + n_keys]);
+ grn_obj_remove(ctx, index_tables[j + n_keys]);
+ }
+ }
+ }
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ else {
+ *add = new handler_add_index(table_arg, key_info, num_of_keys);
+ }
+#endif
+ mrn_free_share_alloc(tmp_share);
+ my_free(tmp_share, MYF(0));
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_tables);
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(index_columns);
+ DBUG_RETURN(error);
+}
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+int ha_mroonga::add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys, handler_add_index **add)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_add_index(table_arg, key_info, num_of_keys, add);
+ } else {
+ error = storage_add_index(table_arg, key_info, num_of_keys, add);
+ }
+ DBUG_RETURN(error);
+}
+#else
+int ha_mroonga::add_index(TABLE *table_arg, KEY *key_info,
+ uint num_of_keys)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_add_index(table_arg, key_info, num_of_keys);
+ } else {
+ error = storage_add_index(table_arg, key_info, num_of_keys);
+ }
+ DBUG_RETURN(error);
+}
+#endif
+
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+int ha_mroonga::wrapper_final_add_index(handler_add_index *add, bool commit)
+{
+ int error = 0;
+ MRN_DBUG_ENTER_METHOD();
+ if (hnd_add_index)
+ {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ error = wrap_handler->final_add_index(hnd_add_index, commit);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ if (add)
+ {
+ delete add;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_final_add_index(handler_add_index *add, bool commit)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (add)
+ {
+ delete add;
+ }
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::final_add_index(handler_add_index *add, bool commit)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ if (share->wrapper_mode)
+ {
+ error = wrapper_final_add_index(add, commit);
+ } else {
+ error = storage_final_add_index(add, commit);
+ }
+ DBUG_RETURN(error);
+}
+#endif
+
+int ha_mroonga::wrapper_prepare_drop_index(TABLE *table_arg, uint *key_num,
+ uint num_of_keys)
+{
+ int res = 0;
+ uint i, j;
+ KEY *key_info = table_share->key_info;
+ MRN_DBUG_ENTER_METHOD();
+ res = mrn_change_encoding(ctx, system_charset_info);
+ if (res)
+ DBUG_RETURN(res);
+
+ MRN_ALLOCATE_VARIABLE_LENGTH_ARRAYS(uint, wrap_key_num, num_of_keys);
+ for (i = 0, j = 0; i < num_of_keys; i++) {
+ uint key_index = key_num[i];
+ if (!(key_info[key_index].flags & HA_FULLTEXT) &&
+ !mrn_is_geo_key(&key_info[key_index])) {
+ wrap_key_num[j] = share->wrap_key_nr[key_index];
+ j++;
+ continue;
+ }
+
+ res = drop_index(share, key_index);
+ if (res)
+ DBUG_RETURN(res);
+ grn_index_tables[key_index] = NULL;
+ grn_index_columns[key_index] = NULL;
+ }
+ if (j)
+ {
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->prepare_drop_index(table_arg, wrap_key_num, j);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ }
+ MRN_FREE_VARIABLE_LENGTH_ARRAYS(wrap_key_num);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_prepare_drop_index(TABLE *table_arg, uint *key_num,
+ uint num_of_keys)
+{
+ int error;
+ uint i;
+ MRN_DBUG_ENTER_METHOD();
+ error = mrn_change_encoding(ctx, system_charset_info);
+ if (error)
+ DBUG_RETURN(error);
+
+ for (i = 0; i < num_of_keys; i++) {
+ uint key_index = key_num[i];
+ error = drop_index(share, key_index);
+ if (error)
+ break;
+ grn_index_tables[key_index] = NULL;
+ grn_index_columns[key_index] = NULL;
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::prepare_drop_index(TABLE *table_arg, uint *key_num,
+ uint num_of_keys)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_prepare_drop_index(table_arg, key_num, num_of_keys);
+ } else {
+ res = storage_prepare_drop_index(table_arg, key_num, num_of_keys);
+ }
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::wrapper_final_drop_index(TABLE *table_arg)
+{
+ uint res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->final_drop_index(table_arg);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_final_drop_index(TABLE *table_arg)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::final_drop_index(TABLE *table_arg)
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_final_drop_index(table_arg);
+ } else {
+ res = storage_final_drop_index(table_arg);
+ }
+ DBUG_RETURN(res);
+}
+#endif
+
+int ha_mroonga::wrapper_update_auto_increment()
+{
+ int res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->update_auto_increment();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_update_auto_increment()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res = handler::update_auto_increment();
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ table->next_number_field->val_int()));
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::update_auto_increment()
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_update_auto_increment();
+ } else {
+ res = storage_update_auto_increment();
+ }
+ DBUG_RETURN(res);
+}
+
+void ha_mroonga::wrapper_set_next_insert_id(ulonglong id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->set_next_insert_id(id);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_set_next_insert_id(ulonglong id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::set_next_insert_id(id);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::set_next_insert_id(ulonglong id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_set_next_insert_id(id);
+ } else {
+ storage_set_next_insert_id(id);
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_get_auto_increment(ulonglong offset,
+ ulonglong increment,
+ ulonglong nb_desired_values,
+ ulonglong *first_value,
+ ulonglong *nb_reserved_values)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->get_auto_increment(offset, increment, nb_desired_values,
+ first_value, nb_reserved_values);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_get_auto_increment(ulonglong offset,
+ ulonglong increment,
+ ulonglong nb_desired_values,
+ ulonglong *first_value,
+ ulonglong *nb_reserved_values)
+{
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ MRN_DBUG_ENTER_METHOD();
+ if (table->found_next_number_field &&
+ !table->s->next_number_keypart) {
+ if (long_term_share->auto_inc_inited) {
+ *first_value = long_term_share->auto_inc_value;
+ DBUG_PRINT("info", ("mroonga: *first_value(auto_inc_value)=%llu",
+ *first_value));
+ *nb_reserved_values = ULONGLONG_MAX;
+ } else {
+ handler::get_auto_increment(offset, increment, nb_desired_values,
+ first_value, nb_reserved_values);
+ long_term_share->auto_inc_value = *first_value;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ long_term_share->auto_inc_inited = true;
+ }
+ } else {
+ handler::get_auto_increment(offset, increment, nb_desired_values,
+ first_value, nb_reserved_values);
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::get_auto_increment(ulonglong offset, ulonglong increment,
+ ulonglong nb_desired_values,
+ ulonglong *first_value,
+ ulonglong *nb_reserved_values)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_get_auto_increment(offset, increment, nb_desired_values,
+ first_value, nb_reserved_values);
+ } else {
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ storage_get_auto_increment(offset, increment, nb_desired_values,
+ first_value, nb_reserved_values);
+ long_term_share->auto_inc_value += nb_desired_values * increment;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_restore_auto_increment(ulonglong prev_insert_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->restore_auto_increment(prev_insert_id);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_restore_auto_increment(ulonglong prev_insert_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::restore_auto_increment(prev_insert_id);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::restore_auto_increment(ulonglong prev_insert_id)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_restore_auto_increment(prev_insert_id);
+ } else {
+ storage_restore_auto_increment(prev_insert_id);
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_release_auto_increment()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->ha_release_auto_increment();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_release_auto_increment()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::release_auto_increment()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_release_auto_increment();
+ } else {
+ storage_release_auto_increment();
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::wrapper_check_for_upgrade(HA_CHECK_OPT *check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ int error = wrap_handler->ha_check_for_upgrade(check_opt);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::storage_check_for_upgrade(HA_CHECK_OPT *check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ for (uint i = 0; i < table->s->fields; ++i) {
+ grn_obj *column = grn_columns[i];
+ if (!column) {
+ continue;
+ }
+ Field *field = table->field[i];
+ grn_id column_range = grn_obj_get_range(ctx, column);
+ switch (field->real_type()) {
+ case MYSQL_TYPE_ENUM:
+ if (column_range != GRN_DB_UINT16) {
+ DBUG_RETURN(HA_ADMIN_NEEDS_ALTER);
+ }
+ break;
+ case MYSQL_TYPE_SET:
+ if (column_range != GRN_DB_UINT64) {
+ DBUG_RETURN(HA_ADMIN_NEEDS_ALTER);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ DBUG_RETURN(HA_ADMIN_OK);
+}
+
+int ha_mroonga::check_for_upgrade(HA_CHECK_OPT *check_opt)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int error;
+ if (share->wrapper_mode) {
+ error = wrapper_check_for_upgrade(check_opt);
+ } else {
+ error = storage_check_for_upgrade(check_opt);
+ }
+ DBUG_RETURN(error);
+}
+
+int ha_mroonga::wrapper_reset_auto_increment(ulonglong value)
+{
+ int res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->ha_reset_auto_increment(value);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_reset_auto_increment(ulonglong value)
+{
+ MRN_LONG_TERM_SHARE *long_term_share = share->long_term_share;
+ MRN_DBUG_ENTER_METHOD();
+ mrn::Lock lock(&long_term_share->auto_inc_mutex);
+ long_term_share->auto_inc_value = value;
+ DBUG_PRINT("info", ("mroonga: auto_inc_value=%llu",
+ long_term_share->auto_inc_value));
+ long_term_share->auto_inc_inited = true;
+ DBUG_RETURN(0);
+}
+
+int ha_mroonga::reset_auto_increment(ulonglong value)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_reset_auto_increment(value);
+ } else {
+ res = storage_reset_auto_increment(value);
+ }
+ DBUG_RETURN(res);
+}
+
+void ha_mroonga::set_pk_bitmap()
+{
+ KEY key_info = table->key_info[table_share->primary_key];
+ uint j;
+ MRN_DBUG_ENTER_METHOD();
+ for (j = 0; j < KEY_N_KEY_PARTS(&key_info); j++) {
+ Field *field = key_info.key_part[j].field;
+ bitmap_set_bit(table->read_set, field->field_index);
+ }
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::wrapper_was_semi_consistent_read()
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->was_semi_consistent_read();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_was_semi_consistent_read()
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ res = handler::was_semi_consistent_read();
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::was_semi_consistent_read()
+{
+ bool res;
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ res = wrapper_was_semi_consistent_read();
+ } else {
+ res = storage_was_semi_consistent_read();
+ }
+ DBUG_RETURN(res);
+}
+
+void ha_mroonga::wrapper_try_semi_consistent_read(bool yes)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->try_semi_consistent_read(yes);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_try_semi_consistent_read(bool yes)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::try_semi_consistent_read(yes);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::try_semi_consistent_read(bool yes)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_try_semi_consistent_read(yes);
+ } else {
+ storage_try_semi_consistent_read(yes);
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_unlock_row()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->unlock_row();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_unlock_row()
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::unlock_row();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::unlock_row()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_unlock_row();
+ } else {
+ storage_unlock_row();
+ }
+ DBUG_VOID_RETURN;
+}
+
+int ha_mroonga::wrapper_start_stmt(THD *thd, thr_lock_type lock_type)
+{
+ int res;
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->start_stmt(thd, lock_type);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_start_stmt(THD *thd, thr_lock_type lock_type)
+{
+ int res;
+ MRN_DBUG_ENTER_METHOD();
+ res = handler::start_stmt(thd, lock_type);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::start_stmt(THD *thd, thr_lock_type lock_type)
+{
+ int res;
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ res = wrapper_start_stmt(thd, lock_type);
+ } else {
+ res = storage_start_stmt(thd, lock_type);
+ }
+ DBUG_RETURN(res);
+}
+
+void ha_mroonga::wrapper_change_table_ptr(TABLE *table_arg,
+ TABLE_SHARE *share_arg)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->change_table_ptr(table_arg, share->wrap_table_share);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_change_table_ptr(TABLE *table_arg,
+ TABLE_SHARE *share_arg)
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::change_table_ptr(table_arg, share_arg);
+ if (share && share->wrapper_mode)
+ {
+ wrapper_change_table_ptr(table_arg, share_arg);
+ } else {
+ storage_change_table_ptr(table_arg, share_arg);
+ }
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::wrapper_primary_key_is_clustered()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool is_clustered;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ is_clustered = wrap_handler->primary_key_is_clustered();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(is_clustered);
+}
+
+bool ha_mroonga::storage_primary_key_is_clustered()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool is_clustered = handler::primary_key_is_clustered();
+ DBUG_RETURN(is_clustered);
+}
+
+bool ha_mroonga::primary_key_is_clustered()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool is_clustered;
+ if (share && share->wrapper_mode)
+ {
+ is_clustered = wrapper_primary_key_is_clustered();
+ } else {
+ is_clustered = storage_primary_key_is_clustered();
+ }
+ DBUG_RETURN(is_clustered);
+}
+
+bool ha_mroonga::wrapper_is_fk_defined_on_table_or_index(uint index)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->is_fk_defined_on_table_or_index(index);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_is_fk_defined_on_table_or_index(uint index)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res = handler::is_fk_defined_on_table_or_index(index);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::is_fk_defined_on_table_or_index(uint index)
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_is_fk_defined_on_table_or_index(index);
+ } else {
+ res = storage_is_fk_defined_on_table_or_index(index);
+ }
+ DBUG_RETURN(res);
+}
+
+char *ha_mroonga::wrapper_get_foreign_key_create_info()
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->get_foreign_key_create_info();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+char *ha_mroonga::storage_get_foreign_key_create_info()
+{
+ int error;
+ uint i;
+ grn_obj *column;
+ uint n_columns = table_share->fields;
+ char create_info_buff[2048], *create_info;
+ String create_info_str(create_info_buff, sizeof(create_info_buff),
+ system_charset_info);
+ MRN_DBUG_ENTER_METHOD();
+ create_info_str.length(0);
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = table_share->field[i];
+ const char *column_name = field->field_name;
+ uint column_name_size = strlen(column_name);
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+ column = grn_obj_column(ctx, grn_table,
+ column_name, column_name_size);
+ if (!column) {
+ continue;
+ }
+ grn_id ref_table_id = grn_obj_get_range(ctx, column);
+ grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id);
+ if (ref_table->header.type != GRN_TABLE_NO_KEY &&
+ ref_table->header.type != GRN_TABLE_HASH_KEY &&
+ ref_table->header.type != GRN_TABLE_PAT_KEY &&
+ ref_table->header.type != GRN_TABLE_DAT_KEY) {
+ continue;
+ }
+ char ref_table_buff[NAME_LEN + 1];
+ int ref_table_name_length = grn_obj_name(ctx, ref_table, ref_table_buff,
+ NAME_LEN);
+ ref_table_buff[ref_table_name_length] = '\0';
+
+ if (create_info_str.reserve(15)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(",\n CONSTRAINT ", 15);
+ append_identifier(ha_thd(), &create_info_str, column_name,
+ column_name_size);
+ if (create_info_str.reserve(14)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(" FOREIGN KEY (", 14);
+ append_identifier(ha_thd(), &create_info_str, column_name,
+ column_name_size);
+ if (create_info_str.reserve(13)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(") REFERENCES ", 13);
+ append_identifier(ha_thd(), &create_info_str, table_share->db.str,
+ table_share->db.length);
+ if (create_info_str.reserve(1)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(".", 1);
+ append_identifier(ha_thd(), &create_info_str, ref_table_buff,
+ ref_table_name_length);
+ if (create_info_str.reserve(2)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(" (", 2);
+
+ char ref_path[FN_REFLEN + 1];
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_ref_table_share;
+ build_table_filename(ref_path, sizeof(ref_path) - 1,
+ table_share->db.str, ref_table_buff, "", 0);
+ DBUG_PRINT("info", ("mroonga: ref_path=%s", ref_path));
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(table_share->db.str,
+ table_share->db.length,
+ ref_table_buff,
+ ref_table_name_length,
+ ref_table_buff, TL_WRITE);
+#else
+ table_list.init_one_table(table_share->db.str,
+ ref_table_buff,
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(table_share);
+ tmp_ref_table_share =
+ mrn_create_tmp_table_share(&table_list, ref_path, &error);
+ mrn_open_mutex_unlock(table_share);
+ if (!tmp_ref_table_share) {
+ DBUG_RETURN(NULL);
+ }
+ uint ref_pkey_nr = tmp_ref_table_share->primary_key;
+ KEY *ref_key_info = &tmp_ref_table_share->key_info[ref_pkey_nr];
+ Field *ref_field = &ref_key_info->key_part->field[0];
+ append_identifier(ha_thd(), &create_info_str, ref_field->field_name,
+ strlen(ref_field->field_name));
+ mrn_open_mutex_lock(table_share);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table_share);
+ if (create_info_str.reserve(39)) {
+ DBUG_RETURN(NULL);
+ }
+ create_info_str.q_append(") ON DELETE RESTRICT ON UPDATE RESTRICT", 39);
+ }
+ if (!(create_info = (char *) my_malloc(create_info_str.length() + 1,
+ MYF(MY_WME)))) {
+ DBUG_RETURN(NULL);
+ }
+ memcpy(create_info, create_info_str.ptr(), create_info_str.length());
+ create_info[create_info_str.length()] = '\0';
+ DBUG_RETURN(create_info);
+}
+#else
+char *ha_mroonga::storage_get_foreign_key_create_info()
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res = handler::get_foreign_key_create_info();
+ DBUG_RETURN(res);
+}
+#endif
+
+char *ha_mroonga::get_foreign_key_create_info()
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_get_foreign_key_create_info();
+ } else {
+ res = storage_get_foreign_key_create_info();
+ }
+ DBUG_RETURN(res);
+}
+
+#ifdef MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
+char *ha_mroonga::wrapper_get_tablespace_name(THD *thd, char *name,
+ uint name_len)
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->get_tablespace_name(thd, name, name_len);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+char *ha_mroonga::storage_get_tablespace_name(THD *thd, char *name,
+ uint name_len)
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res = handler::get_tablespace_name(thd, name, name_len);
+ DBUG_RETURN(res);
+}
+
+char *ha_mroonga::get_tablespace_name(THD *thd, char *name, uint name_len)
+{
+ MRN_DBUG_ENTER_METHOD();
+ char *res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_get_tablespace_name(thd, name, name_len);
+ } else {
+ res = storage_get_tablespace_name(thd, name, name_len);
+ }
+ DBUG_RETURN(res);
+}
+#endif
+
+bool ha_mroonga::wrapper_can_switch_engines()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->can_switch_engines();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::storage_can_switch_engines()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res = handler::can_switch_engines();
+ DBUG_RETURN(res);
+}
+
+bool ha_mroonga::can_switch_engines()
+{
+ MRN_DBUG_ENTER_METHOD();
+ bool res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_can_switch_engines();
+ } else {
+ res = storage_can_switch_engines();
+ }
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::wrapper_get_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->get_foreign_key_list(thd, f_key_list);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+int ha_mroonga::storage_get_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ int error;
+ uint i;
+ grn_obj *column;
+ uint n_columns = table_share->fields;
+ MRN_DBUG_ENTER_METHOD();
+ for (i = 0; i < n_columns; ++i) {
+ Field *field = table_share->field[i];
+ const char *column_name = field->field_name;
+ uint column_name_size = strlen(column_name);
+
+ if (strcmp(MRN_COLUMN_NAME_ID, column_name) == 0) {
+ continue;
+ }
+
+ column = grn_obj_column(ctx, grn_table,
+ column_name, column_name_size);
+ if (!column) {
+ continue;
+ }
+ grn_id ref_table_id = grn_obj_get_range(ctx, column);
+ grn_obj *ref_table = grn_ctx_at(ctx, ref_table_id);
+ if (ref_table->header.type != GRN_TABLE_NO_KEY &&
+ ref_table->header.type != GRN_TABLE_HASH_KEY &&
+ ref_table->header.type != GRN_TABLE_PAT_KEY &&
+ ref_table->header.type != GRN_TABLE_DAT_KEY) {
+ continue;
+ }
+ FOREIGN_KEY_INFO f_key_info;
+ f_key_info.foreign_id = thd_make_lex_string(thd, NULL, column_name,
+ column_name_size, TRUE);
+ f_key_info.foreign_db = thd_make_lex_string(thd, NULL,
+ table_share->db.str,
+ table_share->db.length,
+ TRUE);
+ f_key_info.foreign_table = thd_make_lex_string(thd, NULL,
+ table_share->table_name.str,
+ table_share->table_name.length,
+ TRUE);
+ f_key_info.referenced_db = f_key_info.foreign_db;
+
+ char ref_table_buff[NAME_LEN + 1];
+ int ref_table_name_length = grn_obj_name(ctx, ref_table, ref_table_buff,
+ NAME_LEN);
+ ref_table_buff[ref_table_name_length] = '\0';
+ DBUG_PRINT("info", ("mroonga: ref_table_buff=%s", ref_table_buff));
+ DBUG_PRINT("info", ("mroonga: ref_table_name_length=%d", ref_table_name_length));
+ f_key_info.referenced_table = thd_make_lex_string(thd, NULL,
+ ref_table_buff,
+ ref_table_name_length,
+ TRUE);
+ f_key_info.update_method = thd_make_lex_string(thd, NULL, "RESTRICT",
+ 8, TRUE);
+ f_key_info.delete_method = thd_make_lex_string(thd, NULL, "RESTRICT",
+ 8, TRUE);
+ f_key_info.referenced_key_name = thd_make_lex_string(thd, NULL, "PRIMARY",
+ 7, TRUE);
+ LEX_STRING *field_name = thd_make_lex_string(thd, NULL, column_name,
+ column_name_size, TRUE);
+ f_key_info.foreign_fields.push_back(field_name);
+
+ char ref_path[FN_REFLEN + 1];
+ TABLE_LIST table_list;
+ TABLE_SHARE *tmp_ref_table_share;
+ build_table_filename(ref_path, sizeof(ref_path) - 1,
+ table_share->db.str, ref_table_buff, "", 0);
+ DBUG_PRINT("info", ("mroonga: ref_path=%s", ref_path));
+#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+ table_list.init_one_table(table_share->db.str,
+ table_share->db.length,
+ ref_table_buff,
+ ref_table_name_length,
+ ref_table_buff, TL_WRITE);
+#else
+ table_list.init_one_table(table_share->db.str,
+ ref_table_buff,
+ TL_WRITE);
+#endif
+ mrn_open_mutex_lock(table_share);
+ tmp_ref_table_share =
+ mrn_create_tmp_table_share(&table_list, ref_path, &error);
+ mrn_open_mutex_unlock(table_share);
+ if (!tmp_ref_table_share) {
+ DBUG_RETURN(error);
+ }
+ uint ref_pkey_nr = tmp_ref_table_share->primary_key;
+ KEY *ref_key_info = &tmp_ref_table_share->key_info[ref_pkey_nr];
+ Field *ref_field = &ref_key_info->key_part->field[0];
+ LEX_STRING *ref_col_name = thd_make_lex_string(thd, NULL,
+ ref_field->field_name,
+ strlen(ref_field->field_name),
+ TRUE);
+ f_key_info.referenced_fields.push_back(ref_col_name);
+ mrn_open_mutex_lock(table_share);
+ mrn_free_tmp_table_share(tmp_ref_table_share);
+ mrn_open_mutex_unlock(table_share);
+ FOREIGN_KEY_INFO *p_f_key_info =
+ (FOREIGN_KEY_INFO *) thd_memdup(thd, &f_key_info,
+ sizeof(FOREIGN_KEY_INFO));
+ if (!p_f_key_info) {
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM);
+ }
+ f_key_list->push_back(p_f_key_info);
+ }
+ DBUG_RETURN(0);
+}
+#else
+int ha_mroonga::storage_get_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res = handler::get_foreign_key_list(thd, f_key_list);
+ DBUG_RETURN(res);
+}
+#endif
+
+int ha_mroonga::get_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_get_foreign_key_list(thd, f_key_list);
+ } else {
+ res = storage_get_foreign_key_list(thd, f_key_list);
+ }
+ DBUG_RETURN(res);
+}
+
+#ifdef MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
+int ha_mroonga::wrapper_get_parent_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->get_parent_foreign_key_list(thd, f_key_list);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::storage_get_parent_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res = handler::get_parent_foreign_key_list(thd, f_key_list);
+ DBUG_RETURN(res);
+}
+
+int ha_mroonga::get_parent_foreign_key_list(THD *thd,
+ List<FOREIGN_KEY_INFO> *f_key_list)
+{
+ MRN_DBUG_ENTER_METHOD();
+ int res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_get_parent_foreign_key_list(thd, f_key_list);
+ } else {
+ res = storage_get_parent_foreign_key_list(thd, f_key_list);
+ }
+ DBUG_RETURN(res);
+}
+#endif
+
+uint ha_mroonga::wrapper_referenced_by_foreign_key()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->referenced_by_foreign_key();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::storage_referenced_by_foreign_key()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res = handler::referenced_by_foreign_key();
+ DBUG_RETURN(res);
+}
+
+uint ha_mroonga::referenced_by_foreign_key()
+{
+ MRN_DBUG_ENTER_METHOD();
+ uint res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_referenced_by_foreign_key();
+ } else {
+ res = storage_referenced_by_foreign_key();
+ }
+ DBUG_RETURN(res);
+}
+
+void ha_mroonga::wrapper_init_table_handle_for_HANDLER()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->init_table_handle_for_HANDLER();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_init_table_handle_for_HANDLER()
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::init_table_handle_for_HANDLER();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::init_table_handle_for_HANDLER()
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_init_table_handle_for_HANDLER();
+ } else {
+ storage_init_table_handle_for_HANDLER();
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_free_foreign_key_create_info(char* str)
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->free_foreign_key_create_info(str);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+void ha_mroonga::storage_free_foreign_key_create_info(char* str)
+{
+ MRN_DBUG_ENTER_METHOD();
+ my_free(str, MYF(0));
+ DBUG_VOID_RETURN;
+}
+#else
+void ha_mroonga::storage_free_foreign_key_create_info(char* str)
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::free_foreign_key_create_info(str);
+ DBUG_VOID_RETURN;
+}
+#endif
+
+void ha_mroonga::free_foreign_key_create_info(char* str)
+{
+ MRN_DBUG_ENTER_METHOD();
+ if (share->wrapper_mode)
+ {
+ wrapper_free_foreign_key_create_info(str);
+ } else {
+ storage_free_foreign_key_create_info(str);
+ }
+ DBUG_VOID_RETURN;
+}
+
+bool ha_mroonga::check_written_by_row_based_binlog()
+{
+ MRN_DBUG_ENTER_METHOD();
+ THD *thd = ha_thd();
+
+ int current_stmt_binlog_row;
+#ifdef MRN_ROW_BASED_CHECK_IS_METHOD
+ current_stmt_binlog_row = thd->is_current_stmt_binlog_format_row();
+#else
+ current_stmt_binlog_row = thd->current_stmt_binlog_row_based;
+#endif
+ if (!current_stmt_binlog_row) {
+ DBUG_RETURN(false);
+ }
+
+ if (table->s->tmp_table != NO_TMP_TABLE) {
+ DBUG_RETURN(false);
+ }
+
+ if (!mrn_binlog_filter->db_ok(table->s->db.str)) {
+ DBUG_RETURN(false);
+ }
+
+ if (!thd_test_options(thd, OPTION_BIN_LOG)) {
+ DBUG_RETURN(false);
+ }
+
+ if (!mysql_bin_log.is_open()) {
+ DBUG_RETURN(false);
+ }
+
+ DBUG_RETURN(true);
+}
+
+#ifdef MRN_HAVE_HA_REBIND_PSI
+void ha_mroonga::wrapper_unbind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->unbind_psi();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_unbind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::unbind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::unbind_psi();
+ if (share->wrapper_mode)
+ {
+ wrapper_unbind_psi();
+ } else {
+ storage_unbind_psi();
+ }
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::wrapper_rebind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ wrap_handler->rebind_psi();
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::storage_rebind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ DBUG_VOID_RETURN;
+}
+
+void ha_mroonga::rebind_psi()
+{
+ MRN_DBUG_ENTER_METHOD();
+ handler::rebind_psi();
+ if (share->wrapper_mode)
+ {
+ wrapper_rebind_psi();
+ } else {
+ storage_rebind_psi();
+ }
+ DBUG_VOID_RETURN;
+}
+#endif
+
+my_bool ha_mroonga::wrapper_register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ my_bool res;
+ MRN_SET_WRAP_SHARE_KEY(share, table->s);
+ MRN_SET_WRAP_TABLE_KEY(this, table);
+ res = wrap_handler->register_query_cache_table(thd,
+ table_key,
+ key_length,
+ engine_callback,
+ engine_data);
+ MRN_SET_BASE_SHARE_KEY(share, table->s);
+ MRN_SET_BASE_TABLE_KEY(this, table);
+ DBUG_RETURN(res);
+}
+
+my_bool ha_mroonga::storage_register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ my_bool res = handler::register_query_cache_table(thd,
+ table_key,
+ key_length,
+ engine_callback,
+ engine_data);
+ DBUG_RETURN(res);
+}
+
+my_bool ha_mroonga::register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data)
+{
+ MRN_DBUG_ENTER_METHOD();
+ my_bool res;
+ if (share->wrapper_mode)
+ {
+ res = wrapper_register_query_cache_table(thd,
+ table_key,
+ key_length,
+ engine_callback,
+ engine_data);
+ } else {
+ res = storage_register_query_cache_table(thd,
+ table_key,
+ key_length,
+ engine_callback,
+ engine_data);
+ }
+ DBUG_RETURN(res);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/storage/mroonga/ha_mroonga.def b/storage/mroonga/ha_mroonga.def
new file mode 100644
index 00000000000..5770cde72e7
--- /dev/null
+++ b/storage/mroonga/ha_mroonga.def
@@ -0,0 +1,15 @@
+LIBRARY ha_mroonga
+VERSION 1.0
+EXPORTS
+ last_insert_grn_id
+ last_insert_grn_id_init
+ last_insert_grn_id_deinit
+ mroonga_snippet
+ mroonga_snippet_init
+ mroonga_snippet_deinit
+ mroonga_command
+ mroonga_command_init
+ mroonga_command_deinit
+ mroonga_escape
+ mroonga_escape_init
+ mroonga_escape_deinit
diff --git a/storage/mroonga/ha_mroonga.hpp b/storage/mroonga/ha_mroonga.hpp
new file mode 100644
index 00000000000..224abb09732
--- /dev/null
+++ b/storage/mroonga/ha_mroonga.hpp
@@ -0,0 +1,1195 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef HA_MROONGA_HPP_
+#define HA_MROONGA_HPP_
+
+#ifdef USE_PRAGMA_INTERFACE
+#pragma interface
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <groonga.h>
+#include "mrn_mysql_compat.h"
+
+#if (MYSQL_VERSION_ID >= 50603) || \
+ (MYSQL_VERSION_ID >= 50513 && MYSQL_VERSION_ID < 50600) || \
+ (MYSQL_VERSION_ID >= 50158 && MYSQL_VERSION_ID < 50500)
+# define MRN_HANDLER_CLONE_NEED_NAME 1
+#endif
+
+#if (MYSQL_VERSION_ID >= 50514 && MYSQL_VERSION_ID < 50600)
+# define MRN_HANDLER_HAVE_FINAL_ADD_INDEX 1
+#endif
+
+#if (MYSQL_VERSION_ID >= 50603) || \
+ (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50209)
+# define MRN_HANDLER_HAVE_HA_RND_NEXT 1
+# define MRN_HANDLER_HAVE_HA_RND_POS 1
+# define MRN_HANDLER_HAVE_HA_INDEX_READ_MAP 1
+# define MRN_HANDLER_HAVE_HA_INDEX_READ_IDX_MAP 1
+# define MRN_HANDLER_HAVE_HA_INDEX_NEXT 1
+# define MRN_HANDLER_HAVE_HA_INDEX_PREV 1
+# define MRN_HANDLER_HAVE_HA_INDEX_FIRST 1
+# define MRN_HANDLER_HAVE_HA_INDEX_LAST 1
+# define MRN_HANDLER_HAVE_HA_INDEX_NEXT_SAME 1
+#endif
+
+#if (MYSQL_VERSION_ID >= 50604) || \
+ (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50302)
+# define MRN_HANDLER_HAVE_HA_CLOSE 1
+# define MRN_HANDLER_HAVE_MULTI_RANGE_READ 1
+#endif
+
+#if (MYSQL_VERSION_ID >= 50607)
+# define MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER 1
+# define MRN_HANDLER_HAVE_HA_PREPARE_INPLACE_ALTER_TABLE 1
+# define MRN_HANDLER_HAVE_HA_INPLACE_ALTER_TABLE 1
+# define MRN_HANDLER_HAVE_HA_COMMIT_INPLACE_ALTER_TABLE 1
+# define MRN_SUPPORT_FOREIGN_KEYS 1
+#endif
+
+#ifndef MRN_MARIADB_P
+# define MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
+# if MYSQL_VERSION_ID >= 50611
+# define MRN_HANDLER_HAVE_HA_INDEX_READ_LAST_MAP
+# endif
+#endif
+
+#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50302)
+# define MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+#endif
+
+#if MYSQL_VERSION_ID >= 50500
+# define MRN_HANDLER_HAVE_TRUNCATE
+# define MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
+#endif
+
+#if MYSQL_VERSION_ID < 50600
+# define MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
+#endif
+
+#if MYSQL_VERSION_ID >= 50607
+# define MRN_HANDLER_HAVE_SET_HA_SHARE_REF
+#endif
+
+#if MYSQL_VERSION_ID >= 50500
+# define MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
+#endif
+
+#ifdef BIG_TABLES
+# define MRN_HA_ROWS_FORMAT "llu"
+#else
+# define MRN_HA_ROWS_FORMAT "lu"
+#endif
+
+#if (MYSQL_VERSION_ID < 50519) || \
+ defined(MRN_MARIADB_P) || \
+ (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID < 50604)
+# define MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
+#endif
+
+#if MYSQL_VERSION_ID >= 50500
+# define MRN_HAVE_HA_EXTRA_ADD_CHILDREN_LIST
+# define MRN_HAVE_HA_EXTRA_IS_ATTACHED_CHILDREN
+#endif
+
+#ifdef MRN_MARIADB_P
+# define MRN_HAVE_HA_EXTRA_DETACH_CHILD
+# define MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE
+#endif
+
+#if MYSQL_VERSION_ID >= 50607 && \
+ (!defined(MRN_MARIADB_P) || MYSQL_VERSION_ID < 100008)
+# define MRN_HAVE_HA_EXTRA_EXPORT
+#endif
+
+#if MYSQL_VERSION_ID >= 50617 && !defined(MRN_MARIADB_P)
+# define MRN_HAVE_HA_EXTRA_SECONDARY_SORT_ROWID
+#endif
+
+#if MYSQL_VERSION_ID >= 50604 && !defined(MRN_MARIADB_P)
+# define MRN_TIMESTAMP_USE_TIMEVAL
+#elif defined(MRN_MARIADB_P)
+# define MRN_TIMESTAMP_USE_MY_TIME_T
+#else
+# define MRN_TIMESTAMP_USE_LONG
+#endif
+
+#if MYSQL_VERSION_ID < 50600 && !defined(MRN_MARIADB_P)
+# define MRN_FIELD_STORE_TIME_NEED_TYPE
+#endif
+
+#if MYSQL_VERSION_ID < 50500
+# define MRN_HAVE_TL_WRITE_ALLOW_READ
+#endif
+
+#if (defined(MRN_MARIADB_P) && \
+ ((MYSQL_VERSION_ID >= 50306 && MYSQL_VERSION_ID < 50500) || \
+ MYSQL_VERSION_ID >= 50523))
+# define MRN_HANDLER_AUTO_REPAIR_HAVE_ERROR
+#endif
+
+#if MYSQL_VERSION_ID >= 50604
+# define MRN_JOIN_TAB_HAVE_CONDITION
+#endif
+
+#if MYSQL_VERSION_ID < 50600
+# define MRN_RBR_UPDATE_NEED_ALL_COLUMNS
+#endif
+
+#if MYSQL_VERSION_ID >= 50500
+# define MRN_ROW_BASED_CHECK_IS_METHOD
+#endif
+
+#if MYSQL_VERSION_ID >= 50600
+# define MRN_HAVE_HA_REBIND_PSI
+#endif
+
+#if MYSQL_VERSION_ID >= 50612 && !defined(MRN_MARIADB_P)
+# define MRN_HAVE_POINT_XY
+#endif
+
+#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000)
+# define MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+#endif
+
+#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100010)
+# define MRN_HAVE_TDC_LOCK_TABLE_SHARE
+#endif
+
+class ha_mroonga;
+
+/* structs */
+struct st_mrn_ft_info
+{
+ struct _ft_vft *please;
+#ifdef HA_CAN_FULLTEXT_EXT
+ struct _ft_vft_ext *could_you;
+#endif
+ grn_ctx *ctx;
+ grn_encoding encoding;
+ grn_obj *table;
+ grn_obj *result;
+ grn_obj *score_column;
+ grn_obj key;
+ grn_obj score;
+ uint active_index;
+ KEY *key_info;
+ KEY *primary_key_info;
+ grn_obj *cursor;
+ grn_obj *id_accessor;
+ grn_obj *key_accessor;
+ ha_mroonga *mroonga;
+};
+
+/* handler class */
+class ha_mroonga: public handler
+{
+public:
+ handler *wrap_handler;
+ bool is_clone;
+ ha_mroonga *parent_for_clone;
+ MEM_ROOT *mem_root_for_clone;
+ grn_obj key_buffer;
+ grn_id record_id;
+ grn_id *key_id;
+ grn_id *del_key_id;
+ MY_BITMAP multiple_column_key_bitmap;
+
+private:
+ THR_LOCK_DATA thr_lock_data;
+
+ // for wrapper mode (TODO: need to be confirmed)
+ uint wrap_ft_init_count;
+ MRN_SHARE *share;
+ KEY *wrap_key_info;
+ KEY *base_key_info;
+ key_part_map pk_keypart_map;
+ MEM_ROOT mem_root;
+ /// for create table and alter table
+ mutable bool analyzed_for_create;
+ mutable TABLE table_for_create;
+ mutable MRN_SHARE share_for_create;
+ mutable TABLE_SHARE table_share_for_create;
+ mutable MEM_ROOT mem_root_for_create;
+ mutable handler *wrap_handler_for_create;
+#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ handler_add_index *hnd_add_index;
+#endif
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ Alter_inplace_info::HA_ALTER_FLAGS alter_handler_flags;
+ KEY *alter_key_info_buffer;
+ uint alter_key_count;
+ uint alter_index_drop_count;
+ KEY *alter_index_drop_buffer;
+ uint alter_index_add_count;
+ uint *alter_index_add_buffer;
+ TABLE *wrap_altered_table;
+ KEY *wrap_altered_table_key_info;
+ TABLE_SHARE *wrap_altered_table_share;
+ KEY *wrap_altered_table_share_key_info;
+#else
+ KEY *wrap_alter_key_info;
+#endif
+ int mrn_lock_type;
+
+ // for groonga objects
+ grn_ctx ctx_entity_;
+ grn_ctx *ctx;
+ grn_obj *grn_table;
+ grn_obj **grn_columns;
+ grn_obj **grn_column_ranges;
+ grn_obj **grn_index_tables;
+ grn_obj **grn_index_columns;
+ bool grn_table_is_referenced;
+
+ // buffers
+ grn_obj encoded_key_buffer;
+ grn_obj old_value_buffer;
+ grn_obj new_value_buffer;
+ grn_obj top_left_point;
+ grn_obj bottom_right_point;
+ grn_obj source_point;
+ double top_left_longitude_in_degree;
+ double bottom_right_longitude_in_degree;
+ double bottom_right_latitude_in_degree;
+ double top_left_latitude_in_degree;
+
+ // for search
+ grn_obj *grn_source_column_geo;
+ grn_obj *cursor_geo;
+ grn_table_cursor *cursor;
+ grn_table_cursor *index_table_cursor;
+ grn_obj *empty_value_records;
+ grn_table_cursor *empty_value_records_cursor;
+ grn_obj *sorted_result;
+ grn_obj *matched_record_keys;
+ String *blob_buffers;
+
+ // for error report
+ uint dup_key;
+
+ // for optimization
+ bool count_skip;
+ bool fast_order_limit;
+ bool fast_order_limit_with_index;
+
+ // for context
+ bool ignoring_duplicated_key;
+ bool inserting_with_update;
+ bool fulltext_searching;
+ bool ignoring_no_key_columns;
+ bool replacing_;
+ uint written_by_row_based_binlog;
+
+ // for ft in where clause test
+ Item_func_match *current_ft_item;
+
+public:
+ ha_mroonga(handlerton *hton, TABLE_SHARE *share_arg);
+ ~ha_mroonga();
+ const char *table_type() const; // required
+ const char *index_type(uint inx);
+ const char **bas_ext() const; // required
+
+ ulonglong table_flags() const; // required
+ ulong index_flags(uint idx, uint part, bool all_parts) const; // required
+
+ int create(const char *name, TABLE *form, HA_CREATE_INFO *info); // required
+ int open(const char *name, int mode, uint test_if_locked); // required
+#ifndef MRN_HANDLER_HAVE_HA_CLOSE
+ int close(); // required
+#endif
+ int info(uint flag); // required
+
+ uint lock_count() const;
+ THR_LOCK_DATA **store_lock(THD *thd, // required
+ THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type);
+ int external_lock(THD *thd, int lock_type);
+
+ int rnd_init(bool scan); // required
+ int rnd_end();
+#ifndef MRN_HANDLER_HAVE_HA_RND_NEXT
+ int rnd_next(uchar *buf); // required
+#endif
+#ifndef MRN_HANDLER_HAVE_HA_RND_POS
+ int rnd_pos(uchar *buf, uchar *pos); // required
+#endif
+ void position(const uchar *record); // required
+ int extra(enum ha_extra_function operation);
+ int extra_opt(enum ha_extra_function operation, ulong cache_size);
+
+ int delete_table(const char *name);
+ int write_row(uchar *buf);
+ int update_row(const uchar *old_data, uchar *new_data);
+ int delete_row(const uchar *buf);
+
+ uint max_supported_record_length() const;
+ uint max_supported_keys() const;
+ uint max_supported_key_parts();
+ uint max_supported_key_length() const;
+ uint max_supported_key_part_length() const;
+
+ ha_rows records_in_range(uint inx, key_range *min_key, key_range *max_key);
+ int index_init(uint idx, bool sorted);
+ int index_end();
+#ifndef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
+ int index_read_map(uchar * buf, const uchar * key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag);
+#endif
+#ifdef MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
+ int index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map);
+#endif
+#ifndef MRN_HANDLER_HAVE_HA_INDEX_NEXT
+ int index_next(uchar *buf);
+#endif
+#ifndef MRN_HANDLER_HAVE_HA_INDEX_PREV
+ int index_prev(uchar *buf);
+#endif
+#ifndef MRN_HANDLER_HAVE_HA_INDEX_FIRST
+ int index_first(uchar *buf);
+#endif
+#ifndef MRN_HANDLER_HAVE_HA_INDEX_LAST
+ int index_last(uchar *buf);
+#endif
+ int index_next_same(uchar *buf, const uchar *key, uint keylen);
+
+ int read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted);
+ int read_range_next();
+
+ int ft_init();
+ FT_INFO *ft_init_ext(uint flags, uint inx, String *key);
+ int ft_read(uchar *buf);
+
+ const Item *cond_push(const Item *cond);
+ void cond_pop();
+
+ bool get_error_message(int error, String *buf);
+
+ int reset();
+
+#ifdef MRN_HANDLER_CLONE_NEED_NAME
+ handler *clone(const char *name, MEM_ROOT *mem_root);
+#else
+ handler *clone(MEM_ROOT *mem_root);
+#endif
+ uint8 table_cache_type();
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ ha_rows multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges, uint *bufsz,
+ uint *flags, Cost_estimate *cost);
+ ha_rows multi_range_read_info(uint keyno, uint n_ranges, uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz, uint *flags, Cost_estimate *cost);
+ int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf);
+ int multi_range_read_next(range_id_t *range_info);
+#else // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ int read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer);
+ int read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
+#endif // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+ void start_bulk_insert(ha_rows rows, uint flags);
+#else
+ void start_bulk_insert(ha_rows rows);
+#endif
+ int end_bulk_insert();
+ int delete_all_rows();
+#ifdef MRN_HANDLER_HAVE_TRUNCATE
+ int truncate();
+#endif // MRN_HANDLER_HAVE_TRUNCATE
+ double scan_time();
+ double read_time(uint index, uint ranges, ha_rows rows);
+ const key_map *keys_to_use_for_scanning();
+ ha_rows estimate_rows_upper_bound();
+ void update_create_info(HA_CREATE_INFO* create_info);
+ int rename_table(const char *from, const char *to);
+ bool is_crashed() const;
+ bool auto_repair(int error) const;
+ bool auto_repair() const;
+ int disable_indexes(uint mode);
+ int enable_indexes(uint mode);
+ int check(THD* thd, HA_CHECK_OPT* check_opt);
+ int repair(THD* thd, HA_CHECK_OPT* check_opt);
+ bool check_and_repair(THD *thd);
+ int analyze(THD* thd, HA_CHECK_OPT* check_opt);
+ int optimize(THD* thd, HA_CHECK_OPT* check_opt);
+ bool is_fatal_error(int error_num, uint flags);
+ bool check_if_incompatible_data(HA_CREATE_INFO *create_info,
+ uint table_changes);
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ enum_alter_inplace_result
+ check_if_supported_inplace_alter(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+#else
+ uint alter_table_flags(uint flags);
+# ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
+ handler_add_index **add);
+ int final_add_index(handler_add_index *add, bool commit);
+# else
+ int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
+# endif
+ int prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys);
+ int final_drop_index(TABLE *table_arg);
+#endif
+ int update_auto_increment();
+ void set_next_insert_id(ulonglong id);
+ void get_auto_increment(ulonglong offset, ulonglong increment, ulonglong nb_desired_values,
+ ulonglong *first_value, ulonglong *nb_reserved_values);
+ void restore_auto_increment(ulonglong prev_insert_id);
+ void release_auto_increment();
+ int check_for_upgrade(HA_CHECK_OPT *check_opt);
+ int reset_auto_increment(ulonglong value);
+ bool was_semi_consistent_read();
+ void try_semi_consistent_read(bool yes);
+ void unlock_row();
+ int start_stmt(THD *thd, thr_lock_type lock_type);
+
+protected:
+#ifdef MRN_HANDLER_HAVE_HA_RND_NEXT
+ int rnd_next(uchar *buf);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_RND_POS
+ int rnd_pos(uchar *buf, uchar *pos);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
+ int index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_NEXT
+ int index_next(uchar *buf);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_PREV
+ int index_prev(uchar *buf);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_FIRST
+ int index_first(uchar *buf);
+#endif
+#ifdef MRN_HANDLER_HAVE_HA_INDEX_LAST
+ int index_last(uchar *buf);
+#endif
+ void change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg);
+ bool primary_key_is_clustered();
+ bool is_fk_defined_on_table_or_index(uint index);
+ char *get_foreign_key_create_info();
+#ifdef MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
+ char *get_tablespace_name(THD *thd, char *name, uint name_len);
+#endif
+ bool can_switch_engines();
+ int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+#ifdef MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
+ int get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+#endif
+ uint referenced_by_foreign_key();
+ void init_table_handle_for_HANDLER();
+ void free_foreign_key_create_info(char* str);
+#ifdef MRN_HAVE_HA_REBIND_PSI
+ void unbind_psi();
+ void rebind_psi();
+#endif
+ my_bool register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback *engine_callback,
+ ulonglong *engine_data);
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ bool prepare_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool commit_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit);
+ void notify_table_changed();
+#endif
+
+private:
+ void mkdir_p(const char *directory);
+ ulonglong file_size(const char *path);
+
+ void push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag);
+ void clear_cursor();
+ void clear_cursor_geo();
+ void clear_empty_value_records();
+ void clear_search_result();
+ void clear_search_result_geo();
+ void clear_indexes();
+ int alter_share_add(const char *path, TABLE_SHARE *table_share);
+ void remove_related_files(const char *base_path);
+ void remove_grn_obj_force(const char *name);
+ int drop_index(MRN_SHARE *target_share, uint key_index);
+ grn_obj *find_tokenizer(const char *name, int name_length);
+ grn_obj *find_normalizer(KEY *key_info);
+ bool find_token_filters(KEY *key_info, grn_obj *token_filters);
+ bool find_token_filters_put(grn_obj *token_filters,
+ const char *token_filter_name,
+ int token_filter_name_length);
+ bool find_token_filters_fill(grn_obj *token_filters,
+ const char *token_filter_names,
+ int token_filter_name_length);
+ int wrapper_get_record(uchar *buf, const uchar *key);
+ int wrapper_get_next_geo_record(uchar *buf);
+ int storage_get_next_record(uchar *buf);
+ void geo_store_rectangle(const uchar *rectangle);
+ int generic_geo_open_cursor(const uchar *key, enum ha_rkey_function find_flag);
+
+#ifdef MRN_HANDLER_HAVE_HA_CLOSE
+ int close();
+#endif
+ bool is_dry_write();
+ bool is_enable_optimization();
+ bool should_normalize(Field *field) const;
+ bool is_temporary_table_name(const char *name) const;
+ void check_count_skip(key_part_map start_key_part_map,
+ key_part_map end_key_part_map, bool fulltext);
+ bool is_grn_zero_column_value(grn_obj *column, grn_obj *value);
+ void check_fast_order_limit(grn_table_sort_key **sort_keys, int *n_sort_keys,
+ longlong *limit);
+
+ long long int get_grn_time_from_timestamp_field(Field_timestamp *field);
+
+ int generic_store_bulk_fixed_size_string(Field *field, grn_obj *buf);
+ int generic_store_bulk_variable_size_string(Field *field, grn_obj *buf);
+ int generic_store_bulk_integer(Field *field, grn_obj *buf);
+ int generic_store_bulk_unsigned_integer(Field *field, grn_obj *buf);
+ int generic_store_bulk_float(Field *field, grn_obj *buf);
+ int generic_store_bulk_timestamp(Field *field, grn_obj *buf);
+ int generic_store_bulk_date(Field *field, grn_obj *buf);
+ int generic_store_bulk_time(Field *field, grn_obj *buf);
+ int generic_store_bulk_datetime(Field *field, grn_obj *buf);
+ int generic_store_bulk_year(Field *field, grn_obj *buf);
+ int generic_store_bulk_new_date(Field *field, grn_obj *buf);
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ int generic_store_bulk_datetime2(Field *field, grn_obj *buf);
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ int generic_store_bulk_time2(Field *field, grn_obj *buf);
+#endif
+ int generic_store_bulk_new_decimal(Field *field, grn_obj *buf);
+ int generic_store_bulk_blob(Field *field, grn_obj *buf);
+ int generic_store_bulk_geometry(Field *field, grn_obj *buf);
+ int generic_store_bulk(Field *field, grn_obj *buf);
+
+ void storage_store_field_string(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_integer(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_unsigned_integer(Field *field,
+ const char *value,
+ uint value_length);
+ void storage_store_field_float(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_timestamp(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_date(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_time(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_datetime(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_year(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_new_date(Field *field,
+ const char *value, uint value_length);
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ void storage_store_field_datetime2(Field *field,
+ const char *value, uint value_length);
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ void storage_store_field_time2(Field *field,
+ const char *value, uint value_length);
+#endif
+ void storage_store_field_blob(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field_geometry(Field *field,
+ const char *value, uint value_length);
+ void storage_store_field(Field *field, const char *value, uint value_length);
+ void storage_store_field_column(Field *field,
+ int nth_column, grn_id record_id);
+ void storage_store_fields(uchar *buf, grn_id record_id);
+ void storage_store_fields_for_prep_update(const uchar *old_data,
+ uchar *new_data,
+ grn_id record_id);
+ void storage_store_fields_by_index(uchar *buf);
+
+ int storage_encode_key_normalize_min_sort_chars(Field *field,
+ uchar *buf,
+ uint size);
+ int storage_encode_key_fixed_size_string(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_variable_size_string(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_timestamp(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_time(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_year(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_datetime(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ int storage_encode_key_timestamp2(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ int storage_encode_key_datetime2(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ int storage_encode_key_time2(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+#endif
+ int storage_encode_key_enum(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key_set(Field *field, const uchar *key,
+ uchar *buf, uint *size);
+ int storage_encode_key(Field *field, const uchar *key, uchar *buf, uint *size);
+ int storage_encode_multiple_column_key(KEY *key_info,
+ const uchar *key, uint key_length,
+ uchar *buffer, uint *encoded_length);
+ int storage_encode_multiple_column_key_range(KEY *key_info,
+ const key_range *start,
+ const key_range *end,
+ uchar *min_buffer,
+ uint *min_encoded_size,
+ uchar *max_buffer,
+ uint *max_encoded_size);
+
+ void set_pk_bitmap();
+ int create_share_for_create() const;
+ int wrapper_create(const char *name, TABLE *table,
+ HA_CREATE_INFO *info, MRN_SHARE *tmp_share);
+ int storage_create(const char *name, TABLE *table,
+ HA_CREATE_INFO *info, MRN_SHARE *tmp_share);
+ int wrapper_create_index_fulltext_validate(KEY *key_info);
+ int wrapper_create_index_fulltext(const char *grn_table_name,
+ int i,
+ KEY *key_info,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ MRN_SHARE *tmp_share);
+ int wrapper_create_index_geo(const char *grn_table_name,
+ int i,
+ KEY *key_info,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ MRN_SHARE *tmp_share);
+ int wrapper_create_index(const char *name, TABLE *table,
+ HA_CREATE_INFO *info, MRN_SHARE *tmp_share,
+ const char *grn_table_name);
+ int storage_create_validate_pseudo_column(TABLE *table);
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+ bool storage_create_foreign_key(TABLE *table, const char *grn_table_name,
+ Field *field, grn_obj *table_obj, int &error);
+#endif
+ int storage_create_validate_index(TABLE *table);
+ int storage_create_index_table(TABLE *table, const char *grn_table_name,
+ grn_obj *grn_table, MRN_SHARE *tmp_share,
+ KEY *key_info, grn_obj **index_tables,
+ uint i);
+ int storage_create_index(TABLE *table, const char *grn_table_name,
+ grn_obj *grn_table, MRN_SHARE *tmp_share,
+ KEY *key_info, grn_obj **index_tables,
+ grn_obj **index_columns, uint i);
+ int storage_create_indexes(TABLE *table, const char *grn_table_name,
+ grn_obj *grn_table, MRN_SHARE *tmp_share);
+ int close_databases();
+ int ensure_database_open(const char *name);
+ int ensure_database_remove(const char *name);
+ int wrapper_delete_table(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name);
+ int wrapper_delete_index(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name);
+ int storage_delete_table(const char *name, MRN_SHARE *tmp_share,
+ const char *table_name);
+ int wrapper_open(const char *name, int mode, uint test_if_locked);
+ int wrapper_open_indexes(const char *name);
+ int storage_open(const char *name, int mode, uint test_if_locked);
+ void update_grn_table_is_referenced();
+ int open_table(const char *name);
+ int storage_open_columns(void);
+ int storage_open_indexes(const char *name);
+ void wrapper_overwrite_index_bits();
+ int wrapper_close();
+ int storage_close();
+ int generic_extra(enum ha_extra_function operation);
+ int wrapper_extra(enum ha_extra_function operation);
+ int storage_extra(enum ha_extra_function operation);
+ int wrapper_extra_opt(enum ha_extra_function operation, ulong cache_size);
+ int storage_extra_opt(enum ha_extra_function operation, ulong cache_size);
+ int generic_reset();
+ int wrapper_reset();
+ int storage_reset();
+ uint wrapper_lock_count() const;
+ uint storage_lock_count() const;
+ THR_LOCK_DATA **wrapper_store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type);
+ THR_LOCK_DATA **storage_store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type);
+ int wrapper_external_lock(THD *thd, int lock_type);
+ int storage_external_lock(THD *thd, int lock_type);
+#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
+ void wrapper_start_bulk_insert(ha_rows rows, uint flags);
+ void storage_start_bulk_insert(ha_rows rows, uint flags);
+#else
+ void wrapper_start_bulk_insert(ha_rows rows);
+ void storage_start_bulk_insert(ha_rows rows);
+#endif
+ int wrapper_end_bulk_insert();
+ int storage_end_bulk_insert();
+ bool wrapper_is_target_index(KEY *key_info);
+ bool wrapper_have_target_index();
+ int wrapper_write_row(uchar *buf);
+ int wrapper_write_row_index(uchar *buf);
+ int storage_write_row(uchar *buf);
+ int storage_write_row_multiple_column_index(uchar *buf,
+ grn_id record_id,
+ KEY *key_info,
+ grn_obj *index_column);
+ int storage_write_row_multiple_column_indexes(uchar *buf, grn_id record_id);
+ int storage_write_row_unique_index(uchar *buf,
+ KEY *key_info, grn_obj *index_table,
+ grn_id *key_id);
+ int storage_write_row_unique_indexes(uchar *buf);
+ int wrapper_get_record_id(uchar *data, grn_id *record_id, const char *context);
+ int wrapper_update_row(const uchar *old_data, uchar *new_data);
+ int wrapper_update_row_index(const uchar *old_data, uchar *new_data);
+ int storage_update_row(const uchar *old_data, uchar *new_data);
+ int storage_update_row_index(const uchar *old_data, uchar *new_data);
+ int storage_update_row_unique_indexes(uchar *new_data);
+ int wrapper_delete_row(const uchar *buf);
+ int wrapper_delete_row_index(const uchar *buf);
+ int storage_delete_row(const uchar *buf);
+ int storage_delete_row_index(const uchar *buf);
+ int storage_delete_row_unique_index(grn_obj *index_table, grn_id del_key_id);
+ int storage_delete_row_unique_indexes();
+ int storage_prepare_delete_row_unique_index(const uchar *buf,
+ grn_id record_id,
+ KEY *key_info,
+ grn_obj *index_table,
+ grn_obj *index_column,
+ grn_id *del_key_id);
+ int storage_prepare_delete_row_unique_indexes(const uchar *buf,
+ grn_id record_id);
+ uint wrapper_max_supported_record_length() const;
+ uint storage_max_supported_record_length() const;
+ uint wrapper_max_supported_keys() const;
+ uint storage_max_supported_keys() const;
+ uint wrapper_max_supported_key_parts();
+ uint storage_max_supported_key_parts();
+ uint wrapper_max_supported_key_length() const;
+ uint storage_max_supported_key_length() const;
+ uint wrapper_max_supported_key_part_length() const;
+ uint storage_max_supported_key_part_length() const;
+ ulonglong wrapper_table_flags() const;
+ ulonglong storage_table_flags() const;
+ ulong wrapper_index_flags(uint idx, uint part, bool all_parts) const;
+ ulong storage_index_flags(uint idx, uint part, bool all_parts) const;
+ int wrapper_info(uint flag);
+ int storage_info(uint flag);
+ void storage_info_variable();
+ void storage_info_variable_records();
+ void storage_info_variable_data_file_length();
+ int wrapper_rnd_init(bool scan);
+ int storage_rnd_init(bool scan);
+ int wrapper_rnd_end();
+ int storage_rnd_end();
+ int wrapper_rnd_next(uchar *buf);
+ int storage_rnd_next(uchar *buf);
+ int wrapper_rnd_pos(uchar *buf, uchar *pos);
+ int storage_rnd_pos(uchar *buf, uchar *pos);
+ void wrapper_position(const uchar *record);
+ void storage_position(const uchar *record);
+ ha_rows wrapper_records_in_range(uint key_nr, key_range *range_min,
+ key_range *range_max);
+ ha_rows storage_records_in_range(uint key_nr, key_range *range_min,
+ key_range *range_max);
+ ha_rows generic_records_in_range_geo(uint key_nr, key_range *range_min,
+ key_range *range_max);
+ int wrapper_index_init(uint idx, bool sorted);
+ int storage_index_init(uint idx, bool sorted);
+ int wrapper_index_end();
+ int storage_index_end();
+ int wrapper_index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag);
+ int storage_index_read_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map,
+ enum ha_rkey_function find_flag);
+#ifdef MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
+ int wrapper_index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map);
+ int storage_index_read_last_map(uchar *buf, const uchar *key,
+ key_part_map keypart_map);
+#endif
+ int wrapper_index_next(uchar *buf);
+ int storage_index_next(uchar *buf);
+ int wrapper_index_prev(uchar *buf);
+ int storage_index_prev(uchar *buf);
+ int wrapper_index_first(uchar *buf);
+ int storage_index_first(uchar *buf);
+ int wrapper_index_last(uchar *buf);
+ int storage_index_last(uchar *buf);
+ int wrapper_index_next_same(uchar *buf, const uchar *key, uint keylen);
+ int storage_index_next_same(uchar *buf, const uchar *key, uint keylen);
+ int wrapper_read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted);
+ int storage_read_range_first(const key_range *start_key,
+ const key_range *end_key,
+ bool eq_range, bool sorted);
+ int wrapper_read_range_next();
+ int storage_read_range_next();
+ int generic_ft_init();
+ int wrapper_ft_init();
+ int storage_ft_init();
+ FT_INFO *wrapper_ft_init_ext(uint flags, uint key_nr, String *key);
+ FT_INFO *storage_ft_init_ext(uint flags, uint key_nr, String *key);
+ void generic_ft_init_ext_add_conditions_fast_order_limit(
+ struct st_mrn_ft_info *info, grn_obj *expression);
+ bool generic_ft_init_ext_parse_pragma_d(struct st_mrn_ft_info *info,
+ const char *keyword,
+ uint keyword_length,
+ grn_operator *default_operator,
+ uint *consumed_keyword_length);
+ void generic_ft_init_ext_parse_pragma_w_append_section(
+ struct st_mrn_ft_info *info,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ uint section,
+ grn_obj *section_value_buffer,
+ int weight,
+ uint n_weights);
+ bool generic_ft_init_ext_parse_pragma_w(struct st_mrn_ft_info *info,
+ const char *keyword,
+ uint keyword_length,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ uint *consumed_keyword_length,
+ grn_obj *tmp_objects);
+ grn_rc generic_ft_init_ext_prepare_expression_in_boolean_mode(
+ struct st_mrn_ft_info *info,
+ String *key,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ grn_obj *expression,
+ grn_obj *tmp_objects);
+ grn_rc generic_ft_init_ext_prepare_expression_in_normal_mode(
+ struct st_mrn_ft_info *info,
+ String *key,
+ grn_obj *index_column,
+ grn_obj *match_columns,
+ grn_obj *expression,
+ grn_obj *tmp_objects);
+ struct st_mrn_ft_info *generic_ft_init_ext_select(uint flags,
+ uint key_nr,
+ String *key);
+ FT_INFO *generic_ft_init_ext(uint flags, uint key_nr, String *key);
+ int wrapper_ft_read(uchar *buf);
+ int storage_ft_read(uchar *buf);
+ const Item *wrapper_cond_push(const Item *cond);
+ const Item *storage_cond_push(const Item *cond);
+ void wrapper_cond_pop();
+ void storage_cond_pop();
+ bool wrapper_get_error_message(int error, String *buf);
+ bool storage_get_error_message(int error, String *buf);
+#ifdef MRN_HANDLER_CLONE_NEED_NAME
+ handler *wrapper_clone(const char *name, MEM_ROOT *mem_root);
+ handler *storage_clone(const char *name, MEM_ROOT *mem_root);
+#else
+ handler *wrapper_clone(MEM_ROOT *mem_root);
+ handler *storage_clone(MEM_ROOT *mem_root);
+#endif
+ uint8 wrapper_table_cache_type();
+ uint8 storage_table_cache_type();
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ ha_rows wrapper_multi_range_read_info_const(uint keyno,
+ RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges,
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost);
+ ha_rows storage_multi_range_read_info_const(uint keyno,
+ RANGE_SEQ_IF *seq,
+ void *seq_init_param,
+ uint n_ranges,
+ uint *bufsz,
+ uint *flags,
+ Cost_estimate *cost);
+ ha_rows wrapper_multi_range_read_info(uint keyno, uint n_ranges, uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz, uint *flags,
+ Cost_estimate *cost);
+ ha_rows storage_multi_range_read_info(uint keyno, uint n_ranges, uint keys,
+#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
+ uint key_parts,
+#endif
+ uint *bufsz, uint *flags,
+ Cost_estimate *cost);
+ int wrapper_multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf);
+ int storage_multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
+ uint n_ranges, uint mode,
+ HANDLER_BUFFER *buf);
+ int wrapper_multi_range_read_next(range_id_t *range_info);
+ int storage_multi_range_read_next(range_id_t *range_info);
+#else // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ int wrapper_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer);
+ int storage_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
+ KEY_MULTI_RANGE *ranges,
+ uint range_count,
+ bool sorted,
+ HANDLER_BUFFER *buffer);
+ int wrapper_read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
+ int storage_read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
+#endif // MRN_HANDLER_HAVE_MULTI_RANGE_READ
+ int generic_delete_all_rows(grn_obj *target_grn_table,
+ const char *function_name);
+ int wrapper_delete_all_rows();
+ int storage_delete_all_rows();
+#ifdef MRN_HANDLER_HAVE_TRUNCATE
+ int wrapper_truncate();
+#endif // MRN_HANDLER_HAVE_TRUNCATE
+ int wrapper_truncate_index();
+ int storage_truncate();
+ int storage_truncate_index();
+ double wrapper_scan_time();
+ double storage_scan_time();
+ double wrapper_read_time(uint index, uint ranges, ha_rows rows);
+ double storage_read_time(uint index, uint ranges, ha_rows rows);
+ const key_map *wrapper_keys_to_use_for_scanning();
+ const key_map *storage_keys_to_use_for_scanning();
+ ha_rows wrapper_estimate_rows_upper_bound();
+ ha_rows storage_estimate_rows_upper_bound();
+ void wrapper_update_create_info(HA_CREATE_INFO* create_info);
+ void storage_update_create_info(HA_CREATE_INFO* create_info);
+ int wrapper_rename_table(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name);
+ int wrapper_rename_index(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name);
+ int storage_rename_table(const char *from, const char *to,
+ MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name);
+#ifdef MRN_SUPPORT_FOREIGN_KEYS
+ int storage_rename_foreign_key(MRN_SHARE *tmp_share,
+ const char *from_table_name,
+ const char *to_table_name);
+#endif
+ bool wrapper_is_crashed() const;
+ bool storage_is_crashed() const;
+ bool wrapper_auto_repair(int error) const;
+ bool storage_auto_repair(int error) const;
+ int wrapper_disable_indexes(uint mode);
+ int storage_disable_indexes(uint mode);
+ int wrapper_enable_indexes(uint mode);
+ int storage_enable_indexes(uint mode);
+ int wrapper_check(THD* thd, HA_CHECK_OPT* check_opt);
+ int storage_check(THD* thd, HA_CHECK_OPT* check_opt);
+ int wrapper_fill_indexes(THD *thd, KEY *key_info,
+ grn_obj **index_columns, uint n_keys);
+ int wrapper_recreate_indexes(THD *thd);
+ int wrapper_repair(THD* thd, HA_CHECK_OPT* check_opt);
+ int storage_repair(THD* thd, HA_CHECK_OPT* check_opt);
+ bool wrapper_check_and_repair(THD *thd);
+ bool storage_check_and_repair(THD *thd);
+ int wrapper_analyze(THD* thd, HA_CHECK_OPT* check_opt);
+ int storage_analyze(THD* thd, HA_CHECK_OPT* check_opt);
+ int wrapper_optimize(THD* thd, HA_CHECK_OPT* check_opt);
+ int storage_optimize(THD* thd, HA_CHECK_OPT* check_opt);
+ bool wrapper_is_fatal_error(int error_num, uint flags);
+ bool storage_is_fatal_error(int error_num, uint flags);
+ bool wrapper_is_comment_changed(TABLE *table1, TABLE *table2);
+ bool wrapper_check_if_incompatible_data(HA_CREATE_INFO *create_info,
+ uint table_changes);
+ bool storage_check_if_incompatible_data(HA_CREATE_INFO *create_info,
+ uint table_changes);
+ int storage_add_index_multiple_columns(KEY *key_info, uint num_of_keys,
+ grn_obj **index_tables,
+ grn_obj **index_columns,
+ bool skip_unique_key);
+#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
+ enum_alter_inplace_result
+ wrapper_check_if_supported_inplace_alter(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ enum_alter_inplace_result
+ storage_check_if_supported_inplace_alter(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool wrapper_prepare_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_prepare_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool wrapper_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_inplace_alter_table_index(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_inplace_alter_table_add_column(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_inplace_alter_table_drop_column(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_inplace_alter_table_rename_column(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool storage_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info);
+ bool wrapper_commit_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit);
+ bool storage_commit_inplace_alter_table(TABLE *altered_table,
+ Alter_inplace_info *ha_alter_info,
+ bool commit);
+ void wrapper_notify_table_changed();
+ void storage_notify_table_changed();
+#else
+ uint wrapper_alter_table_flags(uint flags);
+ uint storage_alter_table_flags(uint flags);
+# ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ int wrapper_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
+ handler_add_index **add);
+ int storage_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
+ handler_add_index **add);
+# else
+ int wrapper_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
+ int storage_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
+# endif
+# ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
+ int wrapper_final_add_index(handler_add_index *add, bool commit);
+ int storage_final_add_index(handler_add_index *add, bool commit);
+# endif
+ int wrapper_prepare_drop_index(TABLE *table_arg, uint *key_num,
+ uint num_of_keys);
+ int storage_prepare_drop_index(TABLE *table_arg, uint *key_num,
+ uint num_of_keys);
+ int wrapper_final_drop_index(TABLE *table_arg);
+ int storage_final_drop_index(TABLE *table_arg);
+#endif
+ int wrapper_update_auto_increment();
+ int storage_update_auto_increment();
+ void wrapper_set_next_insert_id(ulonglong id);
+ void storage_set_next_insert_id(ulonglong id);
+ void wrapper_get_auto_increment(ulonglong offset, ulonglong increment,
+ ulonglong nb_desired_values,
+ ulonglong *first_value,
+ ulonglong *nb_reserved_values);
+ void storage_get_auto_increment(ulonglong offset, ulonglong increment,
+ ulonglong nb_desired_values,
+ ulonglong *first_value,
+ ulonglong *nb_reserved_values);
+ void wrapper_restore_auto_increment(ulonglong prev_insert_id);
+ void storage_restore_auto_increment(ulonglong prev_insert_id);
+ void wrapper_release_auto_increment();
+ void storage_release_auto_increment();
+ int wrapper_check_for_upgrade(HA_CHECK_OPT *check_opt);
+ int storage_check_for_upgrade(HA_CHECK_OPT *check_opt);
+ int wrapper_reset_auto_increment(ulonglong value);
+ int storage_reset_auto_increment(ulonglong value);
+ bool wrapper_was_semi_consistent_read();
+ bool storage_was_semi_consistent_read();
+ void wrapper_try_semi_consistent_read(bool yes);
+ void storage_try_semi_consistent_read(bool yes);
+ void wrapper_unlock_row();
+ void storage_unlock_row();
+ int wrapper_start_stmt(THD *thd, thr_lock_type lock_type);
+ int storage_start_stmt(THD *thd, thr_lock_type lock_type);
+ void wrapper_change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg);
+ void storage_change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg);
+ bool wrapper_primary_key_is_clustered();
+ bool storage_primary_key_is_clustered();
+ bool wrapper_is_fk_defined_on_table_or_index(uint index);
+ bool storage_is_fk_defined_on_table_or_index(uint index);
+ char *wrapper_get_foreign_key_create_info();
+ char *storage_get_foreign_key_create_info();
+#ifdef MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
+ char *wrapper_get_tablespace_name(THD *thd, char *name, uint name_len);
+ char *storage_get_tablespace_name(THD *thd, char *name, uint name_len);
+#endif
+ bool wrapper_can_switch_engines();
+ bool storage_can_switch_engines();
+ int wrapper_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+ int storage_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+#ifdef MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
+ int wrapper_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+ int storage_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+#endif
+ uint wrapper_referenced_by_foreign_key();
+ uint storage_referenced_by_foreign_key();
+ void wrapper_init_table_handle_for_HANDLER();
+ void storage_init_table_handle_for_HANDLER();
+ void wrapper_free_foreign_key_create_info(char* str);
+ void storage_free_foreign_key_create_info(char* str);
+ void wrapper_set_keys_in_use();
+ void storage_set_keys_in_use();
+ bool check_written_by_row_based_binlog();
+#ifdef MRN_HAVE_HA_REBIND_PSI
+ void wrapper_unbind_psi();
+ void storage_unbind_psi();
+ void wrapper_rebind_psi();
+ void storage_rebind_psi();
+#endif
+ my_bool wrapper_register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data);
+ my_bool storage_register_query_cache_table(THD *thd,
+ char *table_key,
+ uint key_length,
+ qc_engine_callback
+ *engine_callback,
+ ulonglong *engine_data);
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HA_MROONGA_HPP_ */
diff --git a/storage/mroonga/lib/Makefile.am b/storage/mroonga/lib/Makefile.am
new file mode 100644
index 00000000000..300131db70a
--- /dev/null
+++ b/storage/mroonga/lib/Makefile.am
@@ -0,0 +1,23 @@
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir) \
+ $(MYSQL_INCLUDES) \
+ $(GROONGA_CFLAGS) \
+ $(MYSQL_VERSION_CFLAGS)
+
+libmrn_need_mysql_la_CXXFLAGS = $(AM_CXXFLAGS) $(MYSQL_CFLAGS)
+
+if WITH_LIBMYSQLSERVICES_COMPAT
+LIBMYSQLSERVICES_COMPAT = libmysqlservices.la
+endif
+
+noinst_LTLIBRARIES = \
+ $(LIBMYSQLSERVICES_COMPAT) \
+ libmrn_no_mysql.la \
+ libmrn_need_mysql.la
+
+include libmrn_no_mysql_sources.am
+include libmrn_need_mysql_sources.am
+if WITH_LIBMYSQLSERVICES_COMPAT
+include libmysqlservices_compat_sources.am
+endif
diff --git a/storage/mroonga/lib/libmrn_need_mysql_sources.am b/storage/mroonga/lib/libmrn_need_mysql_sources.am
new file mode 100644
index 00000000000..bd852829467
--- /dev/null
+++ b/storage/mroonga/lib/libmrn_need_mysql_sources.am
@@ -0,0 +1,27 @@
+libmrn_need_mysql_la_SOURCES = \
+ mrn_index_table_name.cpp \
+ mrn_index_table_name.hpp \
+ mrn_index_column_name.cpp \
+ mrn_index_column_name.hpp \
+ mrn_debug_column_access.cpp \
+ mrn_debug_column_access.hpp \
+ mrn_auto_increment_value_lock.cpp \
+ mrn_auto_increment_value_lock.hpp \
+ mrn_external_lock.cpp \
+ mrn_external_lock.hpp \
+ mrn_multiple_column_key_codec.cpp \
+ mrn_multiple_column_key_codec.hpp \
+ mrn_field_normalizer.cpp \
+ mrn_field_normalizer.hpp \
+ mrn_encoding.cpp \
+ mrn_encoding.hpp \
+ mrn_parameters_parser.cpp \
+ mrn_parameters_parser.hpp \
+ mrn_lock.cpp \
+ mrn_lock.hpp \
+ mrn_condition_converter.cpp \
+ mrn_condition_converter.hpp \
+ mrn_time_converter.cpp \
+ mrn_time_converter.hpp \
+ mrn_database_manager.cpp \
+ mrn_database_manager.hpp
diff --git a/storage/mroonga/lib/libmrn_no_mysql_sources.am b/storage/mroonga/lib/libmrn_no_mysql_sources.am
new file mode 100644
index 00000000000..fd2d942d345
--- /dev/null
+++ b/storage/mroonga/lib/libmrn_no_mysql_sources.am
@@ -0,0 +1,9 @@
+libmrn_no_mysql_la_SOURCES = \
+ mrn_match_escalation_threshold_scope.cpp \
+ mrn_match_escalation_threshold_scope.hpp \
+ mrn_path_mapper.cpp \
+ mrn_path_mapper.hpp \
+ mrn_windows.hpp \
+ mrn_smart_grn_obj.cpp \
+ mrn_smart_grn_obj.hpp \
+ mrn_grn.hpp
diff --git a/storage/mroonga/lib/libmysqlservices_compat_sources.am b/storage/mroonga/lib/libmysqlservices_compat_sources.am
new file mode 100644
index 00000000000..bb0712a4add
--- /dev/null
+++ b/storage/mroonga/lib/libmysqlservices_compat_sources.am
@@ -0,0 +1,2 @@
+libmysqlservices_la_SOURCES = \
+ mrn_mysqlservices.cpp
diff --git a/storage/mroonga/lib/mrn_auto_increment_value_lock.cpp b/storage/mroonga/lib/mrn_auto_increment_value_lock.cpp
new file mode 100644
index 00000000000..3bac5e31c6c
--- /dev/null
+++ b/storage/mroonga/lib/mrn_auto_increment_value_lock.cpp
@@ -0,0 +1,42 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_auto_increment_value_lock.hpp"
+
+#if MYSQL_VERSION_ID >= 50500
+# define AUTO_INCREMENT_VALUE_MUTEX(table_share) (&(table_share->LOCK_ha_data))
+#else
+# define AUTO_INCREMENT_VALUE_MUTEX(table_share) (&(table_share->mutex))
+#endif
+
+namespace mrn {
+ AutoIncrementValueLock::AutoIncrementValueLock(TABLE_SHARE *table_share)
+ : table_share_(table_share),
+ need_lock_(table_share_->tmp_table == NO_TMP_TABLE) {
+ if (need_lock_) {
+ mysql_mutex_lock(AUTO_INCREMENT_VALUE_MUTEX(table_share_));
+ }
+ }
+
+ AutoIncrementValueLock::~AutoIncrementValueLock() {
+ if (need_lock_) {
+ mysql_mutex_unlock(AUTO_INCREMENT_VALUE_MUTEX(table_share_));
+ }
+ }
+}
diff --git a/storage/mroonga/lib/mrn_auto_increment_value_lock.hpp b/storage/mroonga/lib/mrn_auto_increment_value_lock.hpp
new file mode 100644
index 00000000000..8aabe6a8a7f
--- /dev/null
+++ b/storage/mroonga/lib/mrn_auto_increment_value_lock.hpp
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_AUTO_INCREMENT_VALUE_LOCK_HPP_
+#define MRN_AUTO_INCREMENT_VALUE_LOCK_HPP_
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class AutoIncrementValueLock {
+ TABLE_SHARE *table_share_;
+ bool need_lock_;
+ public:
+ AutoIncrementValueLock(TABLE_SHARE *table_share);
+ ~AutoIncrementValueLock();
+ };
+}
+
+#endif // MRN_AUTO_INCREMENT_VALUE_LOCK_HPP_
diff --git a/storage/mroonga/lib/mrn_condition_converter.cpp b/storage/mroonga/lib/mrn_condition_converter.cpp
new file mode 100644
index 00000000000..1bfae1d4f8a
--- /dev/null
+++ b/storage/mroonga/lib/mrn_condition_converter.cpp
@@ -0,0 +1,608 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "mrn_condition_converter.hpp"
+#include "mrn_time_converter.hpp"
+#include "mrn_smart_grn_obj.hpp"
+
+// for debug
+#define MRN_CLASS_NAME "mrn::ConditionConverter"
+
+#ifdef MRN_ITEM_HAVE_ITEM_NAME
+# define MRN_ITEM_FIELD_GET_NAME(item) ((item)->item_name.ptr())
+# define MRN_ITEM_FIELD_GET_NAME_LENGTH(item) ((item)->item_name.length())
+#else
+# define MRN_ITEM_FIELD_GET_NAME(item) ((item)->name)
+# define MRN_ITEM_FIELD_GET_NAME_LENGTH(item) (strlen((item)->name))
+#endif
+
+namespace mrn {
+ ConditionConverter::ConditionConverter(grn_ctx *ctx, grn_obj *table,
+ bool is_storage_mode)
+ : ctx_(ctx),
+ table_(table),
+ is_storage_mode_(is_storage_mode) {
+ GRN_TEXT_INIT(&column_name_, 0);
+ GRN_VOID_INIT(&value_);
+ }
+
+ ConditionConverter::~ConditionConverter() {
+ grn_obj_unlink(ctx_, &column_name_);
+ grn_obj_unlink(ctx_, &value_);
+ }
+
+ bool ConditionConverter::is_convertable(const Item *item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!item) {
+ DBUG_RETURN(false);
+ }
+
+ switch (item->type()) {
+ case Item::COND_ITEM:
+ {
+ const Item_cond *cond_item = reinterpret_cast<const Item_cond *>(item);
+ bool convertable = is_convertable(cond_item);
+ DBUG_RETURN(convertable);
+ }
+ break;
+ case Item::FUNC_ITEM:
+ {
+ const Item_func *func_item = reinterpret_cast<const Item_func *>(item);
+ bool convertable = is_convertable(func_item);
+ DBUG_RETURN(convertable);
+ }
+ break;
+ default:
+ DBUG_RETURN(false);
+ break;
+ }
+
+ DBUG_RETURN(false);
+ }
+
+ bool ConditionConverter::is_convertable(const Item_cond *cond_item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!is_storage_mode_) {
+ DBUG_RETURN(false);
+ }
+
+ if (cond_item->functype() != Item_func::COND_AND_FUNC) {
+ DBUG_RETURN(false);
+ }
+
+ List<Item> *argument_list =
+ const_cast<Item_cond *>(cond_item)->argument_list();
+ List_iterator<Item> iterator(*argument_list);
+ const Item *sub_item;
+ while ((sub_item = iterator++)) {
+ if (!is_convertable(sub_item)) {
+ DBUG_RETURN(false);
+ }
+ }
+
+ DBUG_RETURN(true);
+ }
+
+ bool ConditionConverter::is_convertable(const Item_func *func_item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ switch (func_item->functype()) {
+ case Item_func::EQ_FUNC:
+ case Item_func::LT_FUNC:
+ case Item_func::LE_FUNC:
+ case Item_func::GE_FUNC:
+ case Item_func::GT_FUNC:
+ if (!is_storage_mode_) {
+ DBUG_RETURN(false);
+ }
+ {
+ Item **arguments = func_item->arguments();
+ Item *left_item = arguments[0];
+ Item *right_item = arguments[1];
+ if (left_item->type() != Item::FIELD_ITEM) {
+ DBUG_RETURN(false);
+ }
+ if (!right_item->basic_const_item()) {
+ DBUG_RETURN(false);
+ }
+
+ bool convertable =
+ is_convertable_binary_operation(static_cast<Item_field *>(left_item),
+ right_item,
+ func_item->functype());
+ DBUG_RETURN(convertable);
+ }
+ break;
+ case Item_func::FT_FUNC:
+ DBUG_RETURN(true);
+ break;
+ case Item_func::BETWEEN:
+ if (!is_storage_mode_) {
+ DBUG_RETURN(false);
+ }
+ {
+ Item **arguments = func_item->arguments();
+ Item *target_item = arguments[0];
+ Item *min_item = arguments[1];
+ Item *max_item = arguments[2];
+ if (target_item->type() != Item::FIELD_ITEM) {
+ DBUG_RETURN(false);
+ }
+ if (!min_item->basic_const_item()) {
+ DBUG_RETURN(false);
+ }
+ if (!max_item->basic_const_item()) {
+ DBUG_RETURN(false);
+ }
+
+ bool convertable =
+ is_convertable_between(static_cast<Item_field *>(target_item),
+ min_item,
+ max_item);
+ DBUG_RETURN(convertable);
+ }
+ default:
+ DBUG_RETURN(false);
+ break;
+ }
+
+ DBUG_RETURN(true);
+ }
+
+ bool ConditionConverter::is_convertable_binary_operation(
+ const Item_field *field_item,
+ Item *value_item,
+ Item_func::Functype func_type) {
+ MRN_DBUG_ENTER_METHOD();
+
+ bool convertable = false;
+
+ enum_field_types field_type = field_item->field_type();
+ NormalizedType normalized_type = normalize_field_type(field_type);
+ switch (normalized_type) {
+ case STRING_TYPE:
+ if (value_item->type() == Item::STRING_ITEM &&
+ func_type == Item_func::EQ_FUNC) {
+ convertable = have_index(field_item, GRN_OP_EQUAL);
+ }
+ break;
+ case INT_TYPE:
+ convertable = value_item->type() == Item::INT_ITEM;
+ break;
+ case TIME_TYPE:
+ if (is_valid_time_value(field_item, value_item)) {
+ convertable = have_index(field_item, func_type);
+ }
+ break;
+ case UNSUPPORTED_TYPE:
+ break;
+ }
+
+ DBUG_RETURN(convertable);
+ }
+
+ bool ConditionConverter::is_convertable_between(const Item_field *field_item,
+ Item *min_item,
+ Item *max_item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ bool convertable = false;
+
+ enum_field_types field_type = field_item->field_type();
+ NormalizedType normalized_type = normalize_field_type(field_type);
+ switch (normalized_type) {
+ case STRING_TYPE:
+ if (min_item->type() == Item::STRING_ITEM &&
+ max_item->type() == Item::STRING_ITEM) {
+ convertable = have_index(field_item, GRN_OP_LESS);
+ }
+ break;
+ case INT_TYPE:
+ if (min_item->type() == Item::INT_ITEM &&
+ max_item->type() == Item::INT_ITEM) {
+ convertable = have_index(field_item, GRN_OP_LESS);
+ }
+ break;
+ case TIME_TYPE:
+ if (is_valid_time_value(field_item, min_item) &&
+ is_valid_time_value(field_item, max_item)) {
+ convertable = have_index(field_item, GRN_OP_LESS);
+ }
+ break;
+ case UNSUPPORTED_TYPE:
+ break;
+ }
+
+ DBUG_RETURN(convertable);
+ }
+
+ bool ConditionConverter::is_valid_time_value(const Item_field *field_item,
+ Item *value_item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ MYSQL_TIME mysql_time;
+ bool error = get_time_value(field_item, value_item, &mysql_time);
+
+ DBUG_RETURN(!error);
+ }
+
+ bool ConditionConverter::get_time_value(const Item_field *field_item,
+ Item *value_item,
+ MYSQL_TIME *mysql_time) {
+ MRN_DBUG_ENTER_METHOD();
+
+ bool error;
+ Item *real_value_item = value_item->real_item();
+ switch (field_item->field_type()) {
+ case MYSQL_TYPE_TIME:
+ error = real_value_item->get_time(mysql_time);
+ break;
+ case MYSQL_TYPE_YEAR:
+ mysql_time->year = static_cast<int>(value_item->val_int());
+ mysql_time->month = 1;
+ mysql_time->day = 1;
+ mysql_time->hour = 0;
+ mysql_time->hour = 0;
+ mysql_time->minute = 0;
+ mysql_time->second_part = 0;
+ mysql_time->neg = false;
+ mysql_time->time_type = MYSQL_TIMESTAMP_DATE;
+ error = false;
+ break;
+ default:
+ error = real_value_item->get_date(mysql_time, TIME_FUZZY_DATE);
+ break;
+ }
+
+ DBUG_RETURN(error);
+ }
+
+ ConditionConverter::NormalizedType
+ ConditionConverter::normalize_field_type(enum_field_types field_type) {
+ MRN_DBUG_ENTER_METHOD();
+
+ NormalizedType type = UNSUPPORTED_TYPE;
+
+ switch (field_type) {
+ case MYSQL_TYPE_DECIMAL:
+ type = STRING_TYPE;
+ break;
+ case MYSQL_TYPE_TINY:
+ case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_LONG:
+ type = INT_TYPE;
+ break;
+ case MYSQL_TYPE_FLOAT:
+ case MYSQL_TYPE_DOUBLE:
+ type = UNSUPPORTED_TYPE;
+ break;
+ case MYSQL_TYPE_NULL:
+ type = UNSUPPORTED_TYPE;
+ break;
+ case MYSQL_TYPE_TIMESTAMP:
+ type = TIME_TYPE;
+ break;
+ case MYSQL_TYPE_LONGLONG:
+ case MYSQL_TYPE_INT24:
+ type = INT_TYPE;
+ break;
+ case MYSQL_TYPE_DATE:
+ case MYSQL_TYPE_TIME:
+ case MYSQL_TYPE_DATETIME:
+ case MYSQL_TYPE_YEAR:
+ case MYSQL_TYPE_NEWDATE:
+ type = TIME_TYPE;
+ break;
+ case MYSQL_TYPE_VARCHAR:
+ type = STRING_TYPE;
+ break;
+ case MYSQL_TYPE_BIT:
+ type = INT_TYPE;
+ break;
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2:
+ type = TIME_TYPE;
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2:
+ type = TIME_TYPE;
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2:
+ type = TIME_TYPE;
+ break;
+#endif
+ case MYSQL_TYPE_NEWDECIMAL:
+ type = STRING_TYPE;
+ break;
+ case MYSQL_TYPE_ENUM:
+ type = INT_TYPE;
+ break;
+ case MYSQL_TYPE_SET:
+ type = INT_TYPE;
+ break;
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_VAR_STRING:
+ case MYSQL_TYPE_STRING:
+ type = STRING_TYPE;
+ break;
+ case MYSQL_TYPE_GEOMETRY:
+ type = UNSUPPORTED_TYPE;
+ break;
+ }
+
+ DBUG_RETURN(type);
+ }
+
+ bool ConditionConverter::have_index(const Item_field *field_item,
+ grn_operator _operator) {
+ MRN_DBUG_ENTER_METHOD();
+
+ grn_obj *column;
+ column = grn_obj_column(ctx_, table_,
+ MRN_ITEM_FIELD_GET_NAME(field_item),
+ MRN_ITEM_FIELD_GET_NAME_LENGTH(field_item));
+ if (!column) {
+ DBUG_RETURN(false);
+ }
+ mrn::SmartGrnObj smart_column(ctx_, column);
+
+ int n_indexes = grn_column_index(ctx_, column, _operator, NULL, 0, NULL);
+ bool convertable = (n_indexes > 0);
+
+ DBUG_RETURN(convertable);
+ }
+
+ bool ConditionConverter::have_index(const Item_field *field_item,
+ Item_func::Functype func_type) {
+ MRN_DBUG_ENTER_METHOD();
+
+ bool have = false;
+ switch (func_type) {
+ case Item_func::EQ_FUNC:
+ have = have_index(field_item, GRN_OP_EQUAL);
+ break;
+ case Item_func::LT_FUNC:
+ have = have_index(field_item, GRN_OP_LESS);
+ break;
+ case Item_func::LE_FUNC:
+ have = have_index(field_item, GRN_OP_LESS_EQUAL);
+ break;
+ case Item_func::GE_FUNC:
+ have = have_index(field_item, GRN_OP_GREATER_EQUAL);
+ break;
+ case Item_func::GT_FUNC:
+ have = have_index(field_item, GRN_OP_GREATER);
+ break;
+ default:
+ break;
+ }
+
+ DBUG_RETURN(have);
+ }
+
+ const Item_func *ConditionConverter::find_match_against(const Item *item) {
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!item) {
+ DBUG_RETURN(NULL);
+ }
+
+ switch (item->type()) {
+ case Item::COND_ITEM:
+ if (is_storage_mode_) {
+ Item_cond *cond_item = (Item_cond *)item;
+ if (cond_item->functype() == Item_func::COND_AND_FUNC) {
+ List_iterator<Item> iterator(*((cond_item)->argument_list()));
+ const Item *sub_item;
+ while ((sub_item = iterator++)) {
+ const Item_func *match_against = find_match_against(sub_item);
+ if (match_against) {
+ DBUG_RETURN(match_against);
+ }
+ }
+ }
+ }
+ break;
+ case Item::FUNC_ITEM:
+ {
+ const Item_func *func_item = (const Item_func *)item;
+ switch (func_item->functype()) {
+ case Item_func::FT_FUNC:
+ DBUG_RETURN(func_item);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ DBUG_RETURN(NULL);
+ }
+
+ void ConditionConverter::convert(const Item *where, grn_obj *expression) {
+ MRN_DBUG_ENTER_METHOD();
+
+ if (!where || where->type() != Item::COND_ITEM) {
+ DBUG_VOID_RETURN;
+ }
+
+ Item_cond *cond_item = (Item_cond *)where;
+ List_iterator<Item> iterator(*((cond_item)->argument_list()));
+ const Item *sub_item;
+ while ((sub_item = iterator++)) {
+ switch (sub_item->type()) {
+ case Item::FUNC_ITEM:
+ {
+ const Item_func *func_item = (const Item_func *)sub_item;
+ switch (func_item->functype()) {
+ case Item_func::EQ_FUNC:
+ convert_binary_operation(func_item, expression, GRN_OP_EQUAL);
+ break;
+ case Item_func::LT_FUNC:
+ convert_binary_operation(func_item, expression, GRN_OP_LESS);
+ break;
+ case Item_func::LE_FUNC:
+ convert_binary_operation(func_item, expression, GRN_OP_LESS_EQUAL);
+ break;
+ case Item_func::GE_FUNC:
+ convert_binary_operation(func_item, expression,
+ GRN_OP_GREATER_EQUAL);
+ break;
+ case Item_func::GT_FUNC:
+ convert_binary_operation(func_item, expression, GRN_OP_GREATER);
+ break;
+ case Item_func::BETWEEN:
+ convert_between(func_item, expression);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ DBUG_VOID_RETURN;
+ }
+
+ void ConditionConverter::convert_binary_operation(const Item_func *func_item,
+ grn_obj *expression,
+ grn_operator _operator) {
+ Item **arguments = func_item->arguments();
+ Item *left_item = arguments[0];
+ Item *right_item = arguments[1];
+ if (left_item->type() == Item::FIELD_ITEM) {
+ const Item_field *field_item = static_cast<const Item_field *>(left_item);
+ append_field_value(field_item, expression);
+ append_const_item(field_item, right_item, expression);
+ grn_expr_append_op(ctx_, expression, _operator, 2);
+ grn_expr_append_op(ctx_, expression, GRN_OP_AND, 2);
+ }
+ }
+
+ void ConditionConverter::convert_between(const Item_func *func_item,
+ grn_obj *expression) {
+ MRN_DBUG_ENTER_METHOD();
+
+ Item **arguments = func_item->arguments();
+ Item *target_item = arguments[0];
+ Item *min_item = arguments[1];
+ Item *max_item = arguments[2];
+
+ grn_obj *between_func = grn_ctx_get(ctx_, "between", strlen("between"));
+ grn_expr_append_obj(ctx_, expression, between_func, GRN_OP_PUSH, 1);
+
+ const Item_field *field_item = static_cast<const Item_field *>(target_item);
+ append_field_value(field_item, expression);
+
+ grn_obj include;
+ mrn::SmartGrnObj smart_include(ctx_, &include);
+ GRN_TEXT_INIT(&include, 0);
+ GRN_TEXT_PUTS(ctx_, &include, "include");
+ append_const_item(field_item, min_item, expression);
+ grn_expr_append_const(ctx_, expression, &include, GRN_OP_PUSH, 1);
+ append_const_item(field_item, max_item, expression);
+ grn_expr_append_const(ctx_, expression, &include, GRN_OP_PUSH, 1);
+
+ grn_expr_append_op(ctx_, expression, GRN_OP_CALL, 5);
+
+ grn_expr_append_op(ctx_, expression, GRN_OP_AND, 2);
+
+ DBUG_VOID_RETURN;
+ }
+
+ void ConditionConverter::append_field_value(const Item_field *field_item,
+ grn_obj *expression) {
+ MRN_DBUG_ENTER_METHOD();
+
+ GRN_BULK_REWIND(&column_name_);
+ GRN_TEXT_PUT(ctx_, &column_name_,
+ MRN_ITEM_FIELD_GET_NAME(field_item),
+ MRN_ITEM_FIELD_GET_NAME_LENGTH(field_item));
+ grn_expr_append_const(ctx_, expression, &column_name_,
+ GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx_, expression, GRN_OP_GET_VALUE, 1);
+
+ DBUG_VOID_RETURN;
+ }
+
+ void ConditionConverter::append_const_item(const Item_field *field_item,
+ Item *const_item,
+ grn_obj *expression) {
+ MRN_DBUG_ENTER_METHOD();
+
+ enum_field_types field_type = field_item->field_type();
+ NormalizedType normalized_type = normalize_field_type(field_type);
+
+ switch (normalized_type) {
+ case STRING_TYPE:
+ grn_obj_reinit(ctx_, &value_, GRN_DB_TEXT, 0);
+ {
+ String *string;
+ string = const_item->val_str(NULL);
+ GRN_TEXT_SET(ctx_, &value_, string->ptr(), string->length());
+ }
+ break;
+ case INT_TYPE:
+ grn_obj_reinit(ctx_, &value_, GRN_DB_INT64, 0);
+ GRN_INT64_SET(ctx_, &value_, const_item->val_int());
+ break;
+ case TIME_TYPE:
+ grn_obj_reinit(ctx_, &value_, GRN_DB_TIME, 0);
+ {
+ MYSQL_TIME mysql_time;
+ get_time_value(field_item, const_item, &mysql_time);
+ bool truncated = false;
+ TimeConverter time_converter;
+ long long int time =
+ time_converter.mysql_time_to_grn_time(&mysql_time, &truncated);
+ GRN_TIME_SET(ctx_, &value_, time);
+ }
+ break;
+ case UNSUPPORTED_TYPE:
+ // Should not be occurred.
+ DBUG_PRINT("error",
+ ("mroonga: append_const_item: unsupported type: <%d> "
+ "This case should not be occurred.",
+ field_type));
+ grn_obj_reinit(ctx_, &value_, GRN_DB_VOID, 0);
+ break;
+ }
+ grn_expr_append_const(ctx_, expression, &value_, GRN_OP_PUSH, 1);
+
+ DBUG_VOID_RETURN;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_condition_converter.hpp b/storage/mroonga/lib/mrn_condition_converter.hpp
new file mode 100644
index 00000000000..3cf97c62bbe
--- /dev/null
+++ b/storage/mroonga/lib/mrn_condition_converter.hpp
@@ -0,0 +1,82 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_CONDITION_CONVERTER_HPP_
+#define MRN_CONDITION_CONVERTER_HPP_
+
+#include <groonga.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class ConditionConverter {
+ public:
+ ConditionConverter(grn_ctx *ctx, grn_obj *table, bool is_storage_mode);
+ ~ConditionConverter();
+
+ bool is_convertable(const Item *item);
+ const Item_func *find_match_against(const Item *item);
+ // caller must check "where" can be convertable by
+ // is_convertable(). This method doesn't validate "where".
+ void convert(const Item *where, grn_obj *expression);
+
+ private:
+ enum NormalizedType {
+ STRING_TYPE,
+ INT_TYPE,
+ TIME_TYPE,
+ UNSUPPORTED_TYPE,
+ };
+
+ grn_ctx *ctx_;
+ grn_obj *table_;
+ bool is_storage_mode_;
+ grn_obj column_name_;
+ grn_obj value_;
+
+ bool is_convertable(const Item_cond *cond_item);
+ bool is_convertable(const Item_func *func_item);
+ bool is_convertable_binary_operation(const Item_field *field_item,
+ Item *value_item,
+ Item_func::Functype func_type);
+ bool is_convertable_between(const Item_field *field_item,
+ Item *min_item,
+ Item *max_item);
+ bool is_valid_time_value(const Item_field *field_item,
+ Item *value_item);
+ bool get_time_value(const Item_field *field_item,
+ Item *value_item,
+ MYSQL_TIME *mysql_time);
+ bool have_index(const Item_field *field_item, grn_operator _operator);
+ bool have_index(const Item_field *field_item, Item_func::Functype func_type);
+
+ NormalizedType normalize_field_type(enum_field_types field_type);
+
+ void convert_binary_operation(const Item_func *func_item,
+ grn_obj *expression,
+ grn_operator _operator);
+ void convert_between(const Item_func *func_item, grn_obj *expression);
+ void append_field_value(const Item_field *field_item,
+ grn_obj *expression);
+ void append_const_item(const Item_field *field_item,
+ Item *const_item,
+ grn_obj *expression);
+ };
+}
+
+#endif /* MRN_CONDITION_CONVERTER_HPP_ */
diff --git a/storage/mroonga/lib/mrn_database_manager.cpp b/storage/mroonga/lib/mrn_database_manager.cpp
new file mode 100644
index 00000000000..52ec78fccc0
--- /dev/null
+++ b/storage/mroonga/lib/mrn_database_manager.cpp
@@ -0,0 +1,341 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+
+#include "mrn_database_manager.hpp"
+#include "mrn_encoding.hpp"
+#include "mrn_lock.hpp"
+#include "mrn_path_mapper.hpp"
+
+// for debug
+#define MRN_CLASS_NAME "mrn::DatabaseManager"
+
+#ifdef WIN32
+# include <direct.h>
+# define MRN_MKDIR(pathname, mode) _mkdir((pathname))
+#else
+# include <dirent.h>
+# include <unistd.h>
+# define MRN_MKDIR(pathname, mode) mkdir((pathname), (mode))
+#endif
+
+namespace mrn {
+ DatabaseManager::DatabaseManager(grn_ctx *ctx)
+ : ctx_(ctx),
+ cache_(NULL),
+ mutex_(),
+ mutex_initialized_(false) {
+ }
+
+ DatabaseManager::~DatabaseManager(void) {
+ if (mutex_initialized_) {
+ pthread_mutex_destroy(&mutex_);
+ }
+
+ if (cache_) {
+ void *db_address;
+ GRN_HASH_EACH(ctx_, cache_, id, NULL, 0, &db_address, {
+ grn_obj *db;
+ memcpy(&db, db_address, sizeof(grn_obj *));
+ grn_obj_unlink(ctx_, db);
+ });
+ grn_hash_close(ctx_, cache_);
+ }
+ }
+
+ bool DatabaseManager::init(void) {
+ MRN_DBUG_ENTER_METHOD();
+ cache_ = grn_hash_create(ctx_,
+ NULL,
+ GRN_TABLE_MAX_KEY_SIZE,
+ sizeof(grn_obj *),
+ GRN_OBJ_KEY_VAR_SIZE);
+ if (!cache_) {
+ GRN_LOG(ctx_, GRN_LOG_ERROR,
+ "failed to initialize hash table for caching opened databases");
+ DBUG_RETURN(false);
+ }
+
+ if (pthread_mutex_init(&mutex_, NULL) != 0) {
+ GRN_LOG(ctx_, GRN_LOG_ERROR,
+ "failed to initialize mutex for opened database cache hash table");
+ DBUG_RETURN(false);
+ }
+
+ mutex_initialized_ = true;
+ DBUG_RETURN(true);
+ }
+
+ int DatabaseManager::open(const char *path, grn_obj **db) {
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+ *db = NULL;
+
+ mrn::PathMapper mapper(path);
+ mrn::Lock lock(&mutex_);
+
+ error = mrn::encoding::set(ctx_, system_charset_info);
+ if (error) {
+ DBUG_RETURN(error);
+ }
+
+ grn_id id;
+ void *db_address;
+ id = grn_hash_get(ctx_, cache_,
+ mapper.db_name(), strlen(mapper.db_name()),
+ &db_address);
+ if (id == GRN_ID_NIL) {
+ struct stat db_stat;
+ if (stat(mapper.db_path(), &db_stat)) {
+ GRN_LOG(ctx_, GRN_LOG_INFO,
+ "database not found. creating...: <%s>", mapper.db_path());
+ if (path[0] == FN_CURLIB &&
+ (path[1] == FN_LIBCHAR || path[1] == FN_LIBCHAR2)) {
+ ensure_database_directory();
+ }
+ *db = grn_db_create(ctx_, mapper.db_path(), NULL);
+ if (ctx_->rc) {
+ error = ER_CANT_CREATE_TABLE;
+ my_message(error, ctx_->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ } else {
+ *db = grn_db_open(ctx_, mapper.db_path());
+ if (ctx_->rc) {
+ error = ER_CANT_OPEN_FILE;
+ my_message(error, ctx_->errbuf, MYF(0));
+ DBUG_RETURN(error);
+ }
+ }
+ grn_hash_add(ctx_, cache_,
+ mapper.db_name(), strlen(mapper.db_name()),
+ &db_address, NULL);
+ memcpy(db_address, db, sizeof(grn_obj *));
+ } else {
+ memcpy(db, db_address, sizeof(grn_obj *));
+ grn_ctx_use(ctx_, *db);
+ }
+
+ error = ensure_normalizers_registered(*db);
+
+ DBUG_RETURN(error);
+ }
+
+ void DatabaseManager::close(const char *path) {
+ MRN_DBUG_ENTER_METHOD();
+
+ mrn::PathMapper mapper(path);
+ mrn::Lock lock(&mutex_);
+
+ grn_id id;
+ void *db_address;
+ id = grn_hash_get(ctx_, cache_,
+ mapper.db_name(), strlen(mapper.db_name()),
+ &db_address);
+ if (id == GRN_ID_NIL) {
+ DBUG_VOID_RETURN;
+ }
+
+ grn_obj *db = NULL;
+ memcpy(&db, db_address, sizeof(grn_obj *));
+ if (db) {
+ grn_obj_close(ctx_, db);
+ }
+
+ grn_hash_delete_by_id(ctx_, cache_, id, NULL);
+
+ DBUG_VOID_RETURN;
+ }
+
+ bool DatabaseManager::drop(const char *path) {
+ MRN_DBUG_ENTER_METHOD();
+
+ mrn::PathMapper mapper(path);
+ mrn::Lock lock(&mutex_);
+
+ grn_id id;
+ void *db_address;
+ id = grn_hash_get(ctx_, cache_,
+ mapper.db_name(), strlen(mapper.db_name()),
+ &db_address);
+
+ grn_obj *db = NULL;
+ if (id == GRN_ID_NIL) {
+ struct stat dummy;
+ if (stat(mapper.db_path(), &dummy) == 0) {
+ db = grn_db_open(ctx_, mapper.db_path());
+ }
+ } else {
+ memcpy(&db, db_address, sizeof(grn_obj *));
+ }
+
+ if (!db) {
+ DBUG_RETURN(false);
+ }
+
+ if (grn_obj_remove(ctx_, db) == GRN_SUCCESS) {
+ if (id != GRN_ID_NIL) {
+ grn_hash_delete_by_id(ctx_, cache_, id, NULL);
+ }
+ DBUG_RETURN(true);
+ } else {
+ GRN_LOG(ctx_, GRN_LOG_ERROR,
+ "failed to drop database: <%s>: <%s>",
+ mapper.db_path(), ctx_->errbuf);
+ DBUG_RETURN(false);
+ }
+ }
+
+ int DatabaseManager::clear(void) {
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+
+ mrn::Lock lock(&mutex_);
+
+ grn_hash_cursor *cursor;
+ cursor = grn_hash_cursor_open(ctx_, cache_,
+ NULL, 0, NULL, 0,
+ 0, -1, 0);
+ if (ctx_->rc) {
+ my_message(ER_ERROR_ON_READ, ctx_->errbuf, MYF(0));
+ DBUG_RETURN(ER_ERROR_ON_READ);
+ }
+
+ while (grn_hash_cursor_next(ctx_, cursor) != GRN_ID_NIL) {
+ if (ctx_->rc) {
+ error = ER_ERROR_ON_READ;
+ my_message(error, ctx_->errbuf, MYF(0));
+ break;
+ }
+ void *db_address;
+ grn_obj *db;
+ grn_hash_cursor_get_value(ctx_, cursor, &db_address);
+ memcpy(&db, db_address, sizeof(grn_obj *));
+ grn_rc rc = grn_hash_cursor_delete(ctx_, cursor, NULL);
+ if (rc) {
+ error = ER_ERROR_ON_READ;
+ my_message(error, ctx_->errbuf, MYF(0));
+ break;
+ }
+ grn_obj_close(ctx_, db);
+ }
+ grn_hash_cursor_close(ctx_, cursor);
+
+ DBUG_RETURN(error);
+ }
+
+ void DatabaseManager::mkdir_p(const char *directory) {
+ MRN_DBUG_ENTER_METHOD();
+
+ int i = 0;
+ char sub_directory[MRN_MAX_PATH_SIZE];
+ sub_directory[0] = '\0';
+ while (true) {
+ if (directory[i] == FN_LIBCHAR ||
+ directory[i] == FN_LIBCHAR2 ||
+ directory[i] == '\0') {
+ sub_directory[i] = '\0';
+ struct stat directory_status;
+ if (stat(sub_directory, &directory_status) != 0) {
+ DBUG_PRINT("info", ("mroonga: creating directory: <%s>", sub_directory));
+ GRN_LOG(ctx_, GRN_LOG_INFO, "creating directory: <%s>", sub_directory);
+ if (MRN_MKDIR(sub_directory, S_IRWXU) == 0) {
+ DBUG_PRINT("info",
+ ("mroonga: created directory: <%s>", sub_directory));
+ GRN_LOG(ctx_, GRN_LOG_INFO, "created directory: <%s>", sub_directory);
+ } else {
+ DBUG_PRINT("error",
+ ("mroonga: failed to create directory: <%s>: <%s>",
+ sub_directory, strerror(errno)));
+ GRN_LOG(ctx_, GRN_LOG_ERROR,
+ "failed to create directory: <%s>: <%s>",
+ sub_directory, strerror(errno));
+ DBUG_VOID_RETURN;
+ }
+ }
+ }
+
+ if (directory[i] == '\0') {
+ break;
+ }
+
+ sub_directory[i] = directory[i];
+ ++i;
+ }
+
+ DBUG_VOID_RETURN;
+ }
+
+ void DatabaseManager::ensure_database_directory(void) {
+ MRN_DBUG_ENTER_METHOD();
+
+ const char *path_prefix = mrn::PathMapper::default_path_prefix;
+ if (!path_prefix)
+ DBUG_VOID_RETURN;
+
+ const char *last_path_separator;
+ last_path_separator = strrchr(path_prefix, FN_LIBCHAR);
+ if (!last_path_separator)
+ last_path_separator = strrchr(path_prefix, FN_LIBCHAR2);
+ if (!last_path_separator)
+ DBUG_VOID_RETURN;
+ if (path_prefix == last_path_separator)
+ DBUG_VOID_RETURN;
+
+ char database_directory[MRN_MAX_PATH_SIZE];
+ size_t database_directory_length = last_path_separator - path_prefix;
+ strncpy(database_directory, path_prefix, database_directory_length);
+ database_directory[database_directory_length] = '\0';
+ mkdir_p(database_directory);
+
+ DBUG_VOID_RETURN;
+ }
+
+ int DatabaseManager::ensure_normalizers_registered(grn_obj *db) {
+ MRN_DBUG_ENTER_METHOD();
+
+ int error = 0;
+#ifdef WITH_GROONGA_NORMALIZER_MYSQL
+ {
+ grn_obj *mysql_normalizer;
+ mysql_normalizer = grn_ctx_get(ctx_, "NormalizerMySQLGeneralCI", -1);
+ if (mysql_normalizer) {
+ grn_obj_unlink(ctx_, mysql_normalizer);
+ } else {
+#ifdef GROONGA_NORMALIZER_MYSQL_PLUGIN_IS_BUNDLED_STATIC
+ char ref_path[FN_REFLEN + 1], *tmp;
+ tmp = strmov(ref_path, opt_plugin_dir);
+ tmp = strmov(tmp, "/ha_mroonga");
+ strcpy(tmp, SO_EXT);
+ grn_plugin_register_by_path(ctx_, ref_path);
+#else
+ grn_plugin_register(ctx_, GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME);
+#endif
+ }
+ }
+#endif
+
+ DBUG_RETURN(error);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_database_manager.hpp b/storage/mroonga/lib/mrn_database_manager.hpp
new file mode 100644
index 00000000000..46bce7ab1a5
--- /dev/null
+++ b/storage/mroonga/lib/mrn_database_manager.hpp
@@ -0,0 +1,50 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_DATABASE_MANAGER_HPP_
+#define MRN_DATABASE_MANAGER_HPP_
+
+#include <groonga.h>
+
+namespace mrn {
+ class DatabaseManager {
+ public:
+ DatabaseManager(grn_ctx *ctx);
+ ~DatabaseManager(void);
+ bool init(void);
+ int open(const char *path, grn_obj **db);
+ void close(const char *path);
+ bool drop(const char *path);
+ int clear(void);
+
+ private:
+ grn_ctx *ctx_;
+ grn_hash *cache_;
+ pthread_mutex_t mutex_;
+ bool mutex_initialized_;
+
+ void mkdir_p(const char *directory);
+ void ensure_database_directory(void);
+ int ensure_normalizers_registered(grn_obj *db);
+ };
+}
+
+#endif /* MRN_DATABASE_MANAGER_HPP_ */
diff --git a/storage/mroonga/lib/mrn_debug_column_access.cpp b/storage/mroonga/lib/mrn_debug_column_access.cpp
new file mode 100644
index 00000000000..ed7cacae90f
--- /dev/null
+++ b/storage/mroonga/lib/mrn_debug_column_access.cpp
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_debug_column_access.hpp"
+
+namespace mrn {
+ DebugColumnAccess::DebugColumnAccess(TABLE *table, MY_BITMAP *bitmap)
+ : table_(table),
+ bitmap_(bitmap) {
+#ifndef DBUG_OFF
+ map_ = dbug_tmp_use_all_columns(table_, bitmap_);
+#endif
+ }
+
+ DebugColumnAccess::~DebugColumnAccess() {
+#ifndef DBUG_OFF
+ dbug_tmp_restore_column_map(bitmap_, map_);
+#endif
+ }
+}
diff --git a/storage/mroonga/lib/mrn_debug_column_access.hpp b/storage/mroonga/lib/mrn_debug_column_access.hpp
new file mode 100644
index 00000000000..1548b4d8459
--- /dev/null
+++ b/storage/mroonga/lib/mrn_debug_column_access.hpp
@@ -0,0 +1,38 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_DEBUG_COLUMN_ACCESS_HPP_
+#define MRN_DEBUG_COLUMN_ACCESS_HPP_
+
+#include <mrn_mysql.h>
+
+namespace mrn {
+ class DebugColumnAccess {
+ TABLE *table_;
+ MY_BITMAP *bitmap_;
+#ifndef DBUG_OFF
+ my_bitmap_map *map_;
+#endif
+ public:
+ DebugColumnAccess(TABLE *table, MY_BITMAP *bitmap);
+ ~DebugColumnAccess();
+ };
+}
+
+#endif // MRN_DEBUG_COLUMN_ACCESS_HPP_
diff --git a/storage/mroonga/lib/mrn_encoding.cpp b/storage/mroonga/lib/mrn_encoding.cpp
new file mode 100644
index 00000000000..f6f66758b2f
--- /dev/null
+++ b/storage/mroonga/lib/mrn_encoding.cpp
@@ -0,0 +1,242 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+ Copyright(C) 2011-2013 Kentoku SHIBA
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_err.h>
+#include "mrn_encoding.hpp"
+
+namespace mrn {
+ namespace encoding {
+ CHARSET_INFO *mrn_charset_utf8 = NULL;
+ CHARSET_INFO *mrn_charset_utf8mb4 = NULL;
+ CHARSET_INFO *mrn_charset_binary = NULL;
+ CHARSET_INFO *mrn_charset_ascii = NULL;
+ CHARSET_INFO *mrn_charset_latin1_1 = NULL;
+ CHARSET_INFO *mrn_charset_latin1_2 = NULL;
+ CHARSET_INFO *mrn_charset_cp932 = NULL;
+ CHARSET_INFO *mrn_charset_sjis = NULL;
+ CHARSET_INFO *mrn_charset_eucjpms = NULL;
+ CHARSET_INFO *mrn_charset_ujis = NULL;
+ CHARSET_INFO *mrn_charset_koi8r = NULL;
+
+ void init(void) {
+ CHARSET_INFO **cs;
+ MRN_DBUG_ENTER_FUNCTION();
+ for (cs = all_charsets; cs < all_charsets + MY_ALL_CHARSETS_SIZE; cs++)
+ {
+ if (!cs[0])
+ continue;
+ if (!strcmp(cs[0]->csname, "utf8"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_utf8)
+ mrn_charset_utf8 = cs[0];
+ else if (mrn_charset_utf8->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "utf8mb4"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_utf8mb4)
+ mrn_charset_utf8mb4 = cs[0];
+ else if (mrn_charset_utf8mb4->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "binary"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_binary)
+ mrn_charset_binary = cs[0];
+ else if (mrn_charset_binary->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "ascii"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_ascii)
+ mrn_charset_ascii = cs[0];
+ else if (mrn_charset_ascii->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "latin1"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_latin1_1)
+ mrn_charset_latin1_1 = cs[0];
+ else if (mrn_charset_latin1_1->cset != cs[0]->cset)
+ {
+ if (!mrn_charset_latin1_2)
+ mrn_charset_latin1_2 = cs[0];
+ else if (mrn_charset_latin1_2->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ }
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "cp932"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_cp932)
+ mrn_charset_cp932 = cs[0];
+ else if (mrn_charset_cp932->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "sjis"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_sjis)
+ mrn_charset_sjis = cs[0];
+ else if (mrn_charset_sjis->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "eucjpms"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_eucjpms)
+ mrn_charset_eucjpms = cs[0];
+ else if (mrn_charset_eucjpms->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "ujis"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_ujis)
+ mrn_charset_ujis = cs[0];
+ else if (mrn_charset_ujis->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ if (!strcmp(cs[0]->csname, "koi8r"))
+ {
+ DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ if (!mrn_charset_koi8r)
+ mrn_charset_koi8r = cs[0];
+ else if (mrn_charset_koi8r->cset != cs[0]->cset)
+ DBUG_ASSERT(0);
+ continue;
+ }
+ DBUG_PRINT("info", ("mroonga: %s[%s][%p] is not supported",
+ cs[0]->name, cs[0]->csname, cs[0]->cset));
+ }
+ DBUG_VOID_RETURN;
+ }
+
+ int set(grn_ctx *ctx, const CHARSET_INFO *charset) {
+ MRN_DBUG_ENTER_FUNCTION();
+ int error = 0;
+
+ if (!set_raw(ctx, charset)) {
+ const char *name = "<null>";
+ const char *csname = "<null>";
+ if (charset) {
+ name = charset->name;
+ csname = charset->csname;
+ }
+ error = ER_MRN_CHARSET_NOT_SUPPORT_NUM;
+ my_printf_error(error,
+ ER_MRN_CHARSET_NOT_SUPPORT_STR,
+ MYF(0), name, csname);
+ }
+
+ DBUG_RETURN(error);
+ }
+
+ bool set_raw(grn_ctx *ctx, const CHARSET_INFO *charset) {
+ MRN_DBUG_ENTER_FUNCTION();
+ if (!charset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_NONE);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_utf8->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_UTF8);
+ DBUG_RETURN(true);
+ }
+ if (mrn_charset_utf8mb4 && charset->cset == mrn_charset_utf8mb4->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_UTF8);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_cp932->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_SJIS);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_eucjpms->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_EUC_JP);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_latin1_1->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_LATIN1);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_latin1_2->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_LATIN1);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_koi8r->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_KOI8R);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_binary->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_NONE);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_ascii->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_UTF8);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_sjis->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_SJIS);
+ DBUG_RETURN(true);
+ }
+ if (charset->cset == mrn_charset_ujis->cset)
+ {
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_EUC_JP);
+ DBUG_RETURN(true);
+ }
+ GRN_CTX_SET_ENCODING(ctx, GRN_ENC_NONE);
+ DBUG_RETURN(false);
+ }
+ }
+}
diff --git a/storage/mroonga/lib/mrn_encoding.hpp b/storage/mroonga/lib/mrn_encoding.hpp
new file mode 100644
index 00000000000..b29b44d967e
--- /dev/null
+++ b/storage/mroonga/lib/mrn_encoding.hpp
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_ENCODING_HPP_
+#define MRN_ENCODING_HPP_
+
+#include <groonga.h>
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ namespace encoding {
+ void init(void);
+ int set(grn_ctx *ctx, const CHARSET_INFO *charset);
+ bool set_raw(grn_ctx *ctx, const CHARSET_INFO *charset);
+ }
+}
+
+#endif // MRN_ENCODING_HPP_
diff --git a/storage/mroonga/lib/mrn_external_lock.cpp b/storage/mroonga/lib/mrn_external_lock.cpp
new file mode 100644
index 00000000000..b266b6594ca
--- /dev/null
+++ b/storage/mroonga/lib/mrn_external_lock.cpp
@@ -0,0 +1,43 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kentoku SHIBA
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_external_lock.hpp"
+
+namespace mrn {
+ ExternalLock::ExternalLock(THD *thd, handler *handler, int lock_type)
+ : thd_(thd),
+ handler_(handler),
+ lock_type_(lock_type) {
+ if (lock_type_ != F_UNLCK) {
+ error_ = handler_->ha_external_lock(thd_, lock_type);
+ } else {
+ error_ = 0;
+ }
+ }
+
+ ExternalLock::~ExternalLock() {
+ if (lock_type_ != F_UNLCK) {
+ handler_->ha_external_lock(thd_, F_UNLCK);
+ }
+ }
+
+ int ExternalLock::error() {
+ return error_;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_external_lock.hpp b/storage/mroonga/lib/mrn_external_lock.hpp
new file mode 100644
index 00000000000..f78b436f6e8
--- /dev/null
+++ b/storage/mroonga/lib/mrn_external_lock.hpp
@@ -0,0 +1,38 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kentoku SHIBA
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_EXTERNAL_LOCK_HPP_
+#define MRN_EXTERNAL_LOCK_HPP_
+
+#include <mrn_mysql.h>
+
+namespace mrn {
+ class ExternalLock {
+ THD *thd_;
+ handler *handler_;
+ int lock_type_;
+ int error_;
+ public:
+ ExternalLock(THD *thd, handler *handler, int lock_type);
+ ~ExternalLock();
+ int error();
+ };
+}
+
+#endif // MRN_EXTERNAL_LOCK_HPP_
diff --git a/storage/mroonga/lib/mrn_field_normalizer.cpp b/storage/mroonga/lib/mrn_field_normalizer.cpp
new file mode 100644
index 00000000000..c34f9975e37
--- /dev/null
+++ b/storage/mroonga/lib/mrn_field_normalizer.cpp
@@ -0,0 +1,142 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_field_normalizer.hpp"
+#include "mrn_encoding.hpp"
+
+// for debug
+#define MRN_CLASS_NAME "mrn::FieldNormalizer"
+
+namespace mrn {
+ FieldNormalizer::FieldNormalizer(grn_ctx *ctx, THD *thread, Field *field)
+ : ctx_(ctx),
+ thread_(thread),
+ field_(field) {
+ }
+
+ FieldNormalizer::~FieldNormalizer() {
+ }
+
+ bool FieldNormalizer::should_normalize() {
+ MRN_DBUG_ENTER_METHOD();
+
+ DBUG_PRINT("info",
+ ("mroonga: result_type = %u", field_->result_type()));
+ DBUG_PRINT("info",
+ ("mroonga: charset->name = %s", field_->charset()->name));
+ DBUG_PRINT("info",
+ ("mroonga: charset->csname = %s", field_->charset()->csname));
+ DBUG_PRINT("info",
+ ("mroonga: charset->state = %u", field_->charset()->state));
+ bool need_normalize_p;
+ if (field_->charset()->state & (MY_CS_BINSORT | MY_CS_CSSORT)) {
+ need_normalize_p = false;
+ DBUG_PRINT("info",
+ ("mroonga: should_normalize: false: sort is required"));
+ } else {
+ if (is_text_type()) {
+ need_normalize_p = true;
+ DBUG_PRINT("info", ("mroonga: should_normalize: true: text type"));
+ } else {
+ need_normalize_p = false;
+ DBUG_PRINT("info", ("mroonga: should_normalize: false: no text type"));
+ }
+ }
+
+ DBUG_RETURN(need_normalize_p);
+ }
+
+ bool FieldNormalizer::is_text_type() {
+ MRN_DBUG_ENTER_METHOD();
+ bool text_type_p;
+ switch (field_->type()) {
+ case MYSQL_TYPE_VARCHAR:
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_VAR_STRING:
+ text_type_p = true;
+ break;
+ case MYSQL_TYPE_STRING:
+ switch (field_->real_type()) {
+ case MYSQL_TYPE_ENUM:
+ case MYSQL_TYPE_SET:
+ text_type_p = false;
+ break;
+ default:
+ text_type_p = true;
+ break;
+ }
+ break;
+ default:
+ text_type_p = false;
+ break;
+ }
+ DBUG_RETURN(text_type_p);
+ }
+
+ grn_obj *FieldNormalizer::normalize(const char *string,
+ unsigned int string_length) {
+ MRN_DBUG_ENTER_METHOD();
+ grn_obj *normalizer = find_grn_normalizer();
+ int flags = 0;
+ grn_encoding original_encoding = GRN_CTX_GET_ENCODING(ctx_);
+ encoding::set_raw(ctx_, field_->charset());
+ grn_obj *grn_string = grn_string_open(ctx_, string, string_length,
+ normalizer, flags);
+ GRN_CTX_SET_ENCODING(ctx_, original_encoding);
+ DBUG_RETURN(grn_string);
+ }
+
+ grn_obj *FieldNormalizer::find_grn_normalizer() {
+ MRN_DBUG_ENTER_METHOD();
+
+ const CHARSET_INFO *charset_info = field_->charset();
+ const char *normalizer_name = NULL;
+ const char *default_normalizer_name = "NormalizerAuto";
+ if ((strcmp(charset_info->name, "utf8_general_ci") == 0) ||
+ (strcmp(charset_info->name, "utf8mb4_general_ci") == 0)) {
+ normalizer_name = "NormalizerMySQLGeneralCI";
+ } else if ((strcmp(charset_info->name, "utf8_unicode_ci") == 0) ||
+ (strcmp(charset_info->name, "utf8mb4_unicode_ci") == 0)) {
+ normalizer_name = "NormalizerMySQLUnicodeCI";
+ }
+
+ grn_obj *normalizer = NULL;
+ if (normalizer_name) {
+ normalizer = grn_ctx_get(ctx_, normalizer_name, -1);
+ if (!normalizer) {
+ char error_message[MRN_MESSAGE_BUFFER_SIZE];
+ snprintf(error_message, MRN_MESSAGE_BUFFER_SIZE,
+ "%s normalizer isn't found for %s. "
+ "Install groonga-normalizer-mysql normalizer. "
+ "%s is used as fallback.",
+ normalizer_name,
+ charset_info->name,
+ default_normalizer_name);
+ push_warning(thread_, Sql_condition::WARN_LEVEL_WARN,
+ HA_ERR_UNSUPPORTED, error_message);
+ }
+ }
+
+ if (!normalizer) {
+ normalizer = grn_ctx_get(ctx_, default_normalizer_name, -1);
+ }
+
+ DBUG_RETURN(normalizer);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_field_normalizer.hpp b/storage/mroonga/lib/mrn_field_normalizer.hpp
new file mode 100644
index 00000000000..5fd8974ce5b
--- /dev/null
+++ b/storage/mroonga/lib/mrn_field_normalizer.hpp
@@ -0,0 +1,47 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_FIELD_NORMALIZER_HPP_
+#define MRN_FIELD_NORMALIZER_HPP_
+
+#include <groonga.h>
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class FieldNormalizer {
+ public:
+ FieldNormalizer(grn_ctx *ctx, THD *thread, Field *field);
+ ~FieldNormalizer();
+
+ bool should_normalize();
+ grn_obj *normalize(const char *string, unsigned int string_length);
+ grn_obj *find_grn_normalizer();
+
+ private:
+ grn_ctx *ctx_;
+ THD *thread_;
+ Field *field_;
+
+ bool is_text_type();
+ };
+}
+
+#endif // MRN_FIELD_NORMALIZER_HPP_
diff --git a/storage/mroonga/lib/mrn_grn.hpp b/storage/mroonga/lib/mrn_grn.hpp
new file mode 100644
index 00000000000..f60fb7b616e
--- /dev/null
+++ b/storage/mroonga/lib/mrn_grn.hpp
@@ -0,0 +1,39 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_GRN_HPP_
+#define MRN_GRN_HPP_
+
+#include <groonga.h>
+
+namespace mrn {
+ namespace grn {
+ bool is_table(grn_obj *obj) {
+ grn_id type = obj->header.type;
+ return GRN_TABLE_HASH_KEY <= type && obj->header.type <= GRN_DB;
+ }
+
+ bool is_vector_column(grn_obj *column) {
+ int column_type = (column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK);
+ return column_type == GRN_OBJ_COLUMN_VECTOR;
+ }
+ }
+}
+
+#endif // MRN_GRN_HPP_
diff --git a/storage/mroonga/lib/mrn_index_column_name.cpp b/storage/mroonga/lib/mrn_index_column_name.cpp
new file mode 100644
index 00000000000..14e83ec8e34
--- /dev/null
+++ b/storage/mroonga/lib/mrn_index_column_name.cpp
@@ -0,0 +1,96 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+
+#include "mrn_index_column_name.hpp"
+
+#define MRN_MIN_INDEX_COLUMN_NAME_LENGTH 65
+
+// for debug
+#define MRN_CLASS_NAME "mrn::IndexColumnName"
+
+namespace mrn {
+ IndexColumnName::IndexColumnName(const char *table_name,
+ const char *mysql_column_name)
+ : table_name_(table_name),
+ mysql_column_name_(mysql_column_name) {
+ uchar encoded_mysql_column_name_multibyte[MRN_MAX_KEY_SIZE];
+ const uchar *mysql_column_name_multibyte =
+ reinterpret_cast<const uchar *>(mysql_column_name_);
+ encode(encoded_mysql_column_name_multibyte,
+ encoded_mysql_column_name_multibyte + MRN_MAX_KEY_SIZE,
+ mysql_column_name_multibyte,
+ mysql_column_name_multibyte + strlen(mysql_column_name_));
+ snprintf(name_, MRN_MAX_KEY_SIZE,
+ "%s-%s", table_name_, encoded_mysql_column_name_multibyte);
+ length_ = strlen(name_);
+ if (length_ < MRN_MIN_INDEX_COLUMN_NAME_LENGTH) {
+ memset(name_ + length_, '-', MRN_MIN_INDEX_COLUMN_NAME_LENGTH - length_);
+ length_ = MRN_MIN_INDEX_COLUMN_NAME_LENGTH;
+ name_[length_] = '\0';
+ }
+ }
+
+ const char *IndexColumnName::c_str() {
+ return name_;
+ }
+
+ size_t IndexColumnName::length() {
+ return length_;
+ }
+
+ uint IndexColumnName::encode(uchar *encoded_start,
+ uchar *encoded_end,
+ const uchar *mysql_string_start,
+ const uchar *mysql_string_end) {
+ MRN_DBUG_ENTER_METHOD();
+ my_charset_conv_mb_wc mb_wc = system_charset_info->cset->mb_wc;
+ my_charset_conv_wc_mb wc_mb = my_charset_filename.cset->wc_mb;
+ DBUG_PRINT("info", ("mroonga: in=%s", mysql_string_start));
+ encoded_end--;
+ uchar *encoded = encoded_start;
+ const uchar *mysql_string = mysql_string_start;
+ while (mysql_string < mysql_string_end && encoded < encoded_end) {
+ my_wc_t wc;
+ int mb_wc_converted_length;
+ int wc_mb_converted_length;
+ mb_wc_converted_length =
+ (*mb_wc)(NULL, &wc, mysql_string, mysql_string_end);
+ if (mb_wc_converted_length > 0) {
+ wc_mb_converted_length = (*wc_mb)(NULL, wc, encoded, encoded_end);
+ if (wc_mb_converted_length <= 0) {
+ break;
+ }
+ } else if (mb_wc_converted_length == MY_CS_ILSEQ) {
+ *encoded = *mysql_string;
+ mb_wc_converted_length = 1;
+ wc_mb_converted_length = 1;
+ } else {
+ break;
+ }
+ mysql_string += mb_wc_converted_length;
+ encoded += wc_mb_converted_length;
+ }
+ *encoded = '\0';
+ DBUG_PRINT("info", ("mroonga: out=%s", encoded_start));
+ DBUG_RETURN(encoded - encoded_start);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_index_column_name.hpp b/storage/mroonga/lib/mrn_index_column_name.hpp
new file mode 100644
index 00000000000..5cd24623abd
--- /dev/null
+++ b/storage/mroonga/lib/mrn_index_column_name.hpp
@@ -0,0 +1,43 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_INDEX_COLUMN_NAME_HPP_
+#define MRN_INDEX_COLUMN_NAME_HPP_
+
+#include <mrn_constants.hpp>
+
+namespace mrn {
+ class IndexColumnName {
+ public:
+ IndexColumnName(const char *table_name, const char *mysql_column_name);
+ const char *c_str();
+ size_t length();
+ private:
+ const char *table_name_;
+ const char *mysql_column_name_;
+ char name_[MRN_MAX_KEY_SIZE];
+ size_t length_;
+
+ uint encode(uchar *encoded_start, uchar *encoded_end,
+ const uchar *mysql_string_start, const uchar *mysql_string_end);
+ };
+}
+
+#endif /* MRN_INDEX_COLUMN_NAME_HPP_ */
diff --git a/storage/mroonga/lib/mrn_index_table_name.cpp b/storage/mroonga/lib/mrn_index_table_name.cpp
new file mode 100644
index 00000000000..93f4ff8f8fd
--- /dev/null
+++ b/storage/mroonga/lib/mrn_index_table_name.cpp
@@ -0,0 +1,89 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+
+#include "mrn_index_table_name.hpp"
+
+// for debug
+#define MRN_CLASS_NAME "mrn::IndexTableName"
+
+namespace mrn {
+ IndexTableName::IndexTableName(const char *table_name,
+ const char *mysql_index_name)
+ : table_name_(table_name),
+ mysql_index_name_(mysql_index_name) {
+ uchar encoded_mysql_index_name_multibyte[MRN_MAX_KEY_SIZE];
+ const uchar *mysql_index_name_multibyte =
+ reinterpret_cast<const uchar *>(mysql_index_name_);
+ encode(encoded_mysql_index_name_multibyte,
+ encoded_mysql_index_name_multibyte + MRN_MAX_KEY_SIZE,
+ mysql_index_name_multibyte,
+ mysql_index_name_multibyte + strlen(mysql_index_name_));
+ snprintf(name_, MRN_MAX_KEY_SIZE,
+ "%s-%s", table_name_, encoded_mysql_index_name_multibyte);
+ length_ = strlen(name_);
+ }
+
+ const char *IndexTableName::c_str() {
+ return name_;
+ }
+
+ size_t IndexTableName::length() {
+ return length_;
+ }
+
+ uint IndexTableName::encode(uchar *encoded_start,
+ uchar *encoded_end,
+ const uchar *mysql_string_start,
+ const uchar *mysql_string_end) {
+ MRN_DBUG_ENTER_METHOD();
+ my_charset_conv_mb_wc mb_wc = system_charset_info->cset->mb_wc;
+ my_charset_conv_wc_mb wc_mb = my_charset_filename.cset->wc_mb;
+ DBUG_PRINT("info", ("mroonga: in=%s", mysql_string_start));
+ encoded_end--;
+ uchar *encoded = encoded_start;
+ const uchar *mysql_string = mysql_string_start;
+ while (mysql_string < mysql_string_end && encoded < encoded_end) {
+ my_wc_t wc;
+ int mb_wc_converted_length;
+ int wc_mb_converted_length;
+ mb_wc_converted_length =
+ (*mb_wc)(NULL, &wc, mysql_string, mysql_string_end);
+ if (mb_wc_converted_length > 0) {
+ wc_mb_converted_length = (*wc_mb)(NULL, wc, encoded, encoded_end);
+ if (wc_mb_converted_length <= 0) {
+ break;
+ }
+ } else if (mb_wc_converted_length == MY_CS_ILSEQ) {
+ *encoded = *mysql_string;
+ mb_wc_converted_length = 1;
+ wc_mb_converted_length = 1;
+ } else {
+ break;
+ }
+ mysql_string += mb_wc_converted_length;
+ encoded += wc_mb_converted_length;
+ }
+ *encoded = '\0';
+ DBUG_PRINT("info", ("mroonga: out=%s", encoded_start));
+ DBUG_RETURN(encoded - encoded_start);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_index_table_name.hpp b/storage/mroonga/lib/mrn_index_table_name.hpp
new file mode 100644
index 00000000000..4ac4bfe087b
--- /dev/null
+++ b/storage/mroonga/lib/mrn_index_table_name.hpp
@@ -0,0 +1,43 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_INDEX_TABLE_NAME_HPP_
+#define MRN_INDEX_TABLE_NAME_HPP_
+
+#include <mrn_constants.hpp>
+
+namespace mrn {
+ class IndexTableName {
+ public:
+ IndexTableName(const char *table_name, const char *mysql_index_name);
+ const char *c_str();
+ size_t length();
+ private:
+ const char *table_name_;
+ const char *mysql_index_name_;
+ char name_[MRN_MAX_KEY_SIZE];
+ size_t length_;
+
+ uint encode(uchar *encoded_start, uchar *encoded_end,
+ const uchar *mysql_string_start, const uchar *mysql_string_end);
+ };
+}
+
+#endif /* MRN_INDEX_TABLE_NAME_HPP_ */
diff --git a/storage/mroonga/lib/mrn_lock.cpp b/storage/mroonga/lib/mrn_lock.cpp
new file mode 100644
index 00000000000..94f8a4774af
--- /dev/null
+++ b/storage/mroonga/lib/mrn_lock.cpp
@@ -0,0 +1,31 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_lock.hpp"
+
+namespace mrn {
+ Lock::Lock(pthread_mutex_t *mutex)
+ : mutex_(mutex) {
+ pthread_mutex_lock(mutex_);
+ }
+
+ Lock::~Lock() {
+ pthread_mutex_unlock(mutex_);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_lock.hpp b/storage/mroonga/lib/mrn_lock.hpp
new file mode 100644
index 00000000000..31dd7b3e53b
--- /dev/null
+++ b/storage/mroonga/lib/mrn_lock.hpp
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_LOCK_HPP_
+#define MRN_LOCK_HPP_
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class Lock {
+ public:
+ Lock(pthread_mutex_t *mutex);
+ ~Lock();
+ private:
+ pthread_mutex_t *mutex_;
+ };
+}
+
+#endif /* MRN_LOCK_HPP_ */
diff --git a/storage/mroonga/lib/mrn_match_escalation_threshold_scope.cpp b/storage/mroonga/lib/mrn_match_escalation_threshold_scope.cpp
new file mode 100644
index 00000000000..c944b4a4bc0
--- /dev/null
+++ b/storage/mroonga/lib/mrn_match_escalation_threshold_scope.cpp
@@ -0,0 +1,33 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_match_escalation_threshold_scope.hpp"
+
+namespace mrn {
+ MatchEscalationThresholdScope::MatchEscalationThresholdScope(
+ grn_ctx *ctx, long long int threshold)
+ : ctx_(ctx),
+ original_threshold_(grn_ctx_get_match_escalation_threshold(ctx_)) {
+ grn_ctx_set_match_escalation_threshold(ctx_, threshold);
+ }
+
+ MatchEscalationThresholdScope::~MatchEscalationThresholdScope() {
+ grn_ctx_set_match_escalation_threshold(ctx_, original_threshold_);
+ }
+}
diff --git a/storage/mroonga/lib/mrn_match_escalation_threshold_scope.hpp b/storage/mroonga/lib/mrn_match_escalation_threshold_scope.hpp
new file mode 100644
index 00000000000..352e6589f0d
--- /dev/null
+++ b/storage/mroonga/lib/mrn_match_escalation_threshold_scope.hpp
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_MATCH_ESCALATION_THRESHOLD_SCOPE_HPP_
+#define MRN_MATCH_ESCALATION_THRESHOLD_SCOPE_HPP_
+
+#include <groonga.h>
+
+namespace mrn {
+ class MatchEscalationThresholdScope {
+ grn_ctx *ctx_;
+ long long int original_threshold_;
+ public:
+ MatchEscalationThresholdScope(grn_ctx *ctx, long long int threshold);
+ ~MatchEscalationThresholdScope();
+ };
+}
+
+#endif // MRN_MATCH_ESCALATION_THRESHOLD_SCOPE_HPP_
diff --git a/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp
new file mode 100644
index 00000000000..5ce736a49b8
--- /dev/null
+++ b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp
@@ -0,0 +1,548 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
+ Copyright(C) 2013 Kentoku SHIBA
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+
+#include "mrn_multiple_column_key_codec.hpp"
+#include "mrn_field_normalizer.hpp"
+#include "mrn_smart_grn_obj.hpp"
+
+// for debug
+#define MRN_CLASS_NAME "mrn::MultipleColumnKeyCodec"
+
+#ifdef WORDS_BIGENDIAN
+#define mrn_byte_order_host_to_network(buf, key, size) \
+{ \
+ uint32 size_ = (uint32)(size); \
+ uint8 *buf_ = (uint8 *)(buf); \
+ uint8 *key_ = (uint8 *)(key); \
+ while (size_--) { *buf_++ = *key_++; } \
+}
+#else /* WORDS_BIGENDIAN */
+#define mrn_byte_order_host_to_network(buf, key, size) \
+{ \
+ uint32 size_ = (uint32)(size); \
+ uint8 *buf_ = (uint8 *)(buf); \
+ uint8 *key_ = (uint8 *)(key) + size_; \
+ while (size_--) { *buf_++ = *(--key_); } \
+}
+#endif /* WORDS_BIGENDIAN */
+
+namespace mrn {
+ MultipleColumnKeyCodec::MultipleColumnKeyCodec(grn_ctx *ctx,
+ THD *thread,
+ KEY *key_info)
+ : ctx_(ctx),
+ thread_(thread),
+ key_info_(key_info) {
+ }
+
+ MultipleColumnKeyCodec::~MultipleColumnKeyCodec() {
+ }
+
+ int MultipleColumnKeyCodec::encode(const uchar *mysql_key,
+ uint mysql_key_length,
+ uchar *grn_key,
+ uint *grn_key_length) {
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ const uchar *current_mysql_key = mysql_key;
+ const uchar *mysql_key_end = mysql_key + mysql_key_length;
+ uchar *current_grn_key = grn_key;
+
+ int n_key_parts = KEY_N_KEY_PARTS(key_info_);
+ DBUG_PRINT("info", ("mroonga: n_key_parts=%d", n_key_parts));
+ *grn_key_length = 0;
+ for (int i = 0; i < n_key_parts && current_mysql_key < mysql_key_end; i++) {
+ KEY_PART_INFO *key_part = &(key_info_->key_part[i]);
+ Field *field = key_part->field;
+ DBUG_PRINT("info", ("mroonga: key_part->length=%u", key_part->length));
+
+ if (field->null_bit) {
+ DBUG_PRINT("info", ("mroonga: field has null bit"));
+ *current_grn_key = 0;
+ current_mysql_key += 1;
+ current_grn_key += 1;
+ (*grn_key_length)++;
+ }
+
+ DataType data_type = TYPE_UNKNOWN;
+ uint data_size = 0;
+ get_key_info(key_part, &data_type, &data_size);
+
+ switch (data_type) {
+ case TYPE_UNKNOWN:
+ // TODO: This will not be happen. This is just for
+ // suppressing warnings by gcc -O2. :<
+ error = HA_ERR_UNSUPPORTED;
+ break;
+ case TYPE_LONG_LONG_NUMBER:
+ {
+ long long int long_long_value = 0;
+ switch (data_size) {
+ case 3:
+ long_long_value = (long long int)sint3korr(current_mysql_key);
+ break;
+ case 8:
+ long_long_value = (long long int)sint8korr(current_mysql_key);
+ break;
+ }
+ mrn_byte_order_host_to_network(current_grn_key, &long_long_value,
+ data_size);
+ *((uint8 *)(current_grn_key)) ^= 0x80;
+ }
+ break;
+ case TYPE_NUMBER:
+ mrn_byte_order_host_to_network(current_grn_key, current_mysql_key, data_size);
+ {
+ Field_num *number_field = (Field_num *)field;
+ if (!number_field->unsigned_flag) {
+ *((uint8 *)(current_grn_key)) ^= 0x80;
+ }
+ }
+ break;
+ case TYPE_FLOAT:
+ {
+ float value;
+ float4get(value, current_mysql_key);
+ encode_float(value, data_size, current_grn_key);
+ }
+ break;
+ case TYPE_DOUBLE:
+ {
+ double value;
+ float8get(value, current_mysql_key);
+ encode_double(value, data_size, current_grn_key);
+ }
+ break;
+ case TYPE_BYTE_SEQUENCE:
+ memcpy(current_grn_key, current_mysql_key, data_size);
+ break;
+ case TYPE_BYTE_REVERSE:
+ encode_reverse(current_mysql_key, data_size, current_grn_key);
+ break;
+ case TYPE_BYTE_BLOB:
+ encode_blob(field, current_mysql_key, current_grn_key, &data_size);
+ break;
+ }
+
+ if (error) {
+ break;
+ }
+
+ current_mysql_key += data_size;
+ current_grn_key += data_size;
+ *grn_key_length += data_size;
+ }
+
+ DBUG_RETURN(error);
+ }
+
+ int MultipleColumnKeyCodec::decode(const uchar *grn_key,
+ uint grn_key_length,
+ uchar *mysql_key,
+ uint *mysql_key_length) {
+ MRN_DBUG_ENTER_METHOD();
+ int error = 0;
+ const uchar *current_grn_key = grn_key;
+ const uchar *grn_key_end = grn_key + grn_key_length;
+ uchar *current_mysql_key = mysql_key;
+
+ int n_key_parts = KEY_N_KEY_PARTS(key_info_);
+ DBUG_PRINT("info", ("mroonga: n_key_parts=%d", n_key_parts));
+ *mysql_key_length = 0;
+ for (int i = 0; i < n_key_parts && current_grn_key < grn_key_end; i++) {
+ KEY_PART_INFO *key_part = &(key_info_->key_part[i]);
+ Field *field = key_part->field;
+ DBUG_PRINT("info", ("mroonga: key_part->length=%u", key_part->length));
+
+ if (field->null_bit) {
+ DBUG_PRINT("info", ("mroonga: field has null bit"));
+ *current_mysql_key = 0;
+ current_grn_key += 1;
+ current_mysql_key += 1;
+ (*mysql_key_length)++;
+ }
+
+ DataType data_type = TYPE_UNKNOWN;
+ uint data_size = 0;
+ get_key_info(key_part, &data_type, &data_size);
+
+ switch (data_type) {
+ case TYPE_UNKNOWN:
+ // TODO: This will not be happen. This is just for
+ // suppressing warnings by gcc -O2. :<
+ error = HA_ERR_UNSUPPORTED;
+ break;
+ case TYPE_LONG_LONG_NUMBER:
+ {
+ long long int long_long_value = 0;
+ switch (data_size) {
+ case 3:
+ long_long_value = (long long int)sint3korr(current_grn_key);
+ break;
+ case 8:
+ long_long_value = (long long int)sint8korr(current_grn_key);
+ break;
+ }
+ *((uint8 *)(&long_long_value)) ^= 0x80;
+ mrn_byte_order_host_to_network(current_mysql_key, &long_long_value,
+ data_size);
+ }
+ break;
+ case TYPE_NUMBER:
+ {
+ uchar buffer[8];
+ memcpy(buffer, current_grn_key, data_size);
+ Field_num *number_field = (Field_num *)field;
+ if (!number_field->unsigned_flag) {
+ buffer[0] ^= 0x80;
+ }
+ mrn_byte_order_host_to_network(current_mysql_key, buffer,
+ data_size);
+ }
+ break;
+ case TYPE_FLOAT:
+ decode_float(current_grn_key, current_mysql_key, data_size);
+ break;
+ case TYPE_DOUBLE:
+ decode_double(current_grn_key, current_mysql_key, data_size);
+ break;
+ case TYPE_BYTE_SEQUENCE:
+ memcpy(current_mysql_key, current_grn_key, data_size);
+ break;
+ case TYPE_BYTE_REVERSE:
+ decode_reverse(current_grn_key, current_mysql_key, data_size);
+ break;
+ case TYPE_BYTE_BLOB:
+ memcpy(current_mysql_key,
+ current_grn_key + data_size,
+ HA_KEY_BLOB_LENGTH);
+ memcpy(current_mysql_key + HA_KEY_BLOB_LENGTH,
+ current_grn_key,
+ data_size);
+ data_size += HA_KEY_BLOB_LENGTH;
+ break;
+ }
+
+ if (error) {
+ break;
+ }
+
+ current_grn_key += data_size;
+ current_mysql_key += data_size;
+ *mysql_key_length += data_size;
+ }
+
+ DBUG_RETURN(error);
+ }
+
+ uint MultipleColumnKeyCodec::size() {
+ MRN_DBUG_ENTER_METHOD();
+
+ int n_key_parts = KEY_N_KEY_PARTS(key_info_);
+ DBUG_PRINT("info", ("mroonga: n_key_parts=%d", n_key_parts));
+
+ uint total_size = 0;
+ for (int i = 0; i < n_key_parts; ++i) {
+ KEY_PART_INFO *key_part = &(key_info_->key_part[i]);
+ Field *field = key_part->field;
+ DBUG_PRINT("info", ("mroonga: key_part->length=%u", key_part->length));
+
+ if (field->null_bit) {
+ DBUG_PRINT("info", ("mroonga: field has null bit"));
+ ++total_size;
+ }
+
+ DataType data_type = TYPE_UNKNOWN;
+ uint data_size = 0;
+ get_key_info(key_part, &data_type, &data_size);
+ total_size += data_size;
+ if (data_type == TYPE_BYTE_BLOB) {
+ total_size += HA_KEY_BLOB_LENGTH;
+ }
+ }
+
+ DBUG_RETURN(total_size);
+ }
+
+ void MultipleColumnKeyCodec::get_key_info(KEY_PART_INFO *key_part,
+ DataType *data_type,
+ uint *data_size) {
+ MRN_DBUG_ENTER_METHOD();
+
+ *data_type = TYPE_UNKNOWN;
+ *data_size = 0;
+
+ Field *field = key_part->field;
+ switch (field->real_type()) {
+ case MYSQL_TYPE_DECIMAL:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DECIMAL"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_TINY:
+ case MYSQL_TYPE_YEAR:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TINY"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 1;
+ break;
+ case MYSQL_TYPE_SHORT:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_SHORT"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 2;
+ break;
+ case MYSQL_TYPE_LONG:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_LONG"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 4;
+ break;
+ case MYSQL_TYPE_FLOAT:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_FLOAT"));
+ *data_type = TYPE_FLOAT;
+ *data_size = 4;
+ break;
+ case MYSQL_TYPE_DOUBLE:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DOUBLE"));
+ *data_type = TYPE_DOUBLE;
+ *data_size = 8;
+ break;
+ case MYSQL_TYPE_NULL:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_NULL"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 1;
+ break;
+ case MYSQL_TYPE_TIMESTAMP:
+ case MYSQL_TYPE_DATE:
+ case MYSQL_TYPE_DATETIME:
+ case MYSQL_TYPE_NEWDATE:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DATETIME"));
+ *data_type = TYPE_BYTE_REVERSE;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_LONGLONG:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_LONGLONG"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 8;
+ break;
+ case MYSQL_TYPE_INT24:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_INT24"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 3;
+ break;
+ case MYSQL_TYPE_TIME:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TIME"));
+ *data_type = TYPE_LONG_LONG_NUMBER;
+ *data_size = 3;
+ break;
+ case MYSQL_TYPE_VARCHAR:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_VARCHAR"));
+ *data_type = TYPE_BYTE_BLOB;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_BIT:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_BIT"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 1;
+ break;
+#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+ case MYSQL_TYPE_TIMESTAMP2:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TIMESTAMP2"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
+ case MYSQL_TYPE_DATETIME2:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DATETIME2"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+#endif
+#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
+ case MYSQL_TYPE_TIME2:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TIME2"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+#endif
+ case MYSQL_TYPE_NEWDECIMAL:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_NEWDECIMAL"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_ENUM:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_ENUM"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 1;
+ break;
+ case MYSQL_TYPE_SET:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_SET"));
+ *data_type = TYPE_NUMBER;
+ *data_size = 1;
+ break;
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ case MYSQL_TYPE_BLOB:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_BLOB"));
+ *data_type = TYPE_BYTE_BLOB;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_VAR_STRING:
+ case MYSQL_TYPE_STRING:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_STRING"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+ case MYSQL_TYPE_GEOMETRY:
+ // TODO
+ DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_GEOMETRY"));
+ *data_type = TYPE_BYTE_SEQUENCE;
+ *data_size = key_part->length;
+ break;
+ }
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::encode_float(volatile float value, uint data_size,
+ uchar *grn_key) {
+ MRN_DBUG_ENTER_METHOD();
+ int n_bits = (data_size * 8 - 1);
+ volatile int *int_value_pointer = (int *)(&value);
+ int int_value = *int_value_pointer;
+ int_value ^= ((int_value >> n_bits) | (1 << n_bits));
+ mrn_byte_order_host_to_network(grn_key, &int_value, data_size);
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::decode_float(const uchar *grn_key,
+ uchar *mysql_key,
+ uint data_size) {
+ MRN_DBUG_ENTER_METHOD();
+ int int_value;
+ mrn_byte_order_host_to_network(&int_value, grn_key, data_size);
+ int max_bit = (data_size * 8 - 1);
+ *((int *)mysql_key) =
+ int_value ^ (((int_value ^ (1 << max_bit)) >> max_bit) |
+ (1 << max_bit));
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::encode_double(volatile double value, uint data_size,
+ uchar *grn_key) {
+ MRN_DBUG_ENTER_METHOD();
+ int n_bits = (data_size * 8 - 1);
+ volatile long long int *long_long_value_pointer = (long long int *)(&value);
+ volatile long long int long_long_value = *long_long_value_pointer;
+ long_long_value ^= ((long_long_value >> n_bits) | (1LL << n_bits));
+ mrn_byte_order_host_to_network(grn_key, &long_long_value, data_size);
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::decode_double(const uchar *grn_key,
+ uchar *mysql_key,
+ uint data_size) {
+ MRN_DBUG_ENTER_METHOD();
+ long long int long_long_value;
+ mrn_byte_order_host_to_network(&long_long_value, grn_key, data_size);
+ int max_bit = (data_size * 8 - 1);
+ *((long long int *)mysql_key) =
+ long_long_value ^ (((long_long_value ^ (1LL << max_bit)) >> max_bit) |
+ (1LL << max_bit));
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::encode_reverse(const uchar *mysql_key, uint data_size,
+ uchar *grn_key) {
+ MRN_DBUG_ENTER_METHOD();
+ for (uint i = 0; i < data_size; i++) {
+ grn_key[i] = mysql_key[data_size - i - 1];
+ }
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::decode_reverse(const uchar *grn_key,
+ uchar *mysql_key,
+ uint data_size) {
+ MRN_DBUG_ENTER_METHOD();
+ for (uint i = 0; i < data_size; i++) {
+ mysql_key[i] = grn_key[data_size - i - 1];
+ }
+ DBUG_VOID_RETURN;
+ }
+
+ void MultipleColumnKeyCodec::encode_blob(Field *field,
+ const uchar *mysql_key,
+ uchar *grn_key,
+ uint *data_size) {
+ FieldNormalizer normalizer(ctx_, thread_, field);
+ if (normalizer.should_normalize()) {
+#if HA_KEY_BLOB_LENGTH != 2
+# error "TODO: support HA_KEY_BLOB_LENGTH != 2 case if it is needed"
+#endif
+ const char *blob_data =
+ reinterpret_cast<const char *>(mysql_key + HA_KEY_BLOB_LENGTH);
+ uint16 blob_data_length = *((uint16 *)(mysql_key));
+ grn_obj *grn_string = normalizer.normalize(blob_data,
+ blob_data_length);
+ mrn::SmartGrnObj smart_grn_string(ctx_, grn_string);
+ const char *normalized;
+ unsigned int normalized_length = 0;
+ grn_string_get_normalized(ctx_, grn_string,
+ &normalized, &normalized_length, NULL);
+ uint16 new_blob_data_length;
+ if (normalized_length <= UINT_MAX16) {
+ memcpy(grn_key, normalized, normalized_length);
+ if (normalized_length < *data_size) {
+ memset(grn_key + normalized_length,
+ '\0', *data_size - normalized_length);
+ }
+ new_blob_data_length = normalized_length;
+ } else {
+ push_warning_printf(thread_,
+ Sql_condition::WARN_LEVEL_WARN,
+ WARN_DATA_TRUNCATED,
+ "normalized data truncated "
+ "for multiple column index: "
+ "normalized-data-size: <%u> "
+ "max-data-size: <%u> "
+ "column-name: <%s> "
+ "data: <%.*s>",
+ normalized_length,
+ UINT_MAX16,
+ field->field_name,
+ blob_data_length, blob_data);
+ memcpy(grn_key, normalized, blob_data_length);
+ new_blob_data_length = blob_data_length;
+ }
+ memcpy(grn_key + *data_size, &new_blob_data_length, HA_KEY_BLOB_LENGTH);
+ } else {
+ memcpy(grn_key + *data_size, mysql_key, HA_KEY_BLOB_LENGTH);
+ memcpy(grn_key, mysql_key + HA_KEY_BLOB_LENGTH, *data_size);
+ }
+ *data_size += HA_KEY_BLOB_LENGTH;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp b/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp
new file mode 100644
index 00000000000..fc6ae285357
--- /dev/null
+++ b/storage/mroonga/lib/mrn_multiple_column_key_codec.hpp
@@ -0,0 +1,70 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_MULTIPLE_COLUMN_KEY_CODEC_HPP_
+#define MRN_MULTIPLE_COLUMN_KEY_CODEC_HPP_
+
+#include <groonga.h>
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class MultipleColumnKeyCodec {
+ public:
+ MultipleColumnKeyCodec(grn_ctx *ctx, THD *thread, KEY *key_info);
+ ~MultipleColumnKeyCodec();
+
+ int encode(const uchar *mysql_key, uint mysql_key_length,
+ uchar *grn_key, uint *grn_key_length);
+ int decode(const uchar *grn_key, uint grn_key_length,
+ uchar *mysql_key, uint *mysql_key_length);
+ uint size();
+
+ private:
+ enum DataType {
+ TYPE_UNKNOWN,
+ TYPE_LONG_LONG_NUMBER,
+ TYPE_NUMBER,
+ TYPE_FLOAT,
+ TYPE_DOUBLE,
+ TYPE_BYTE_SEQUENCE,
+ TYPE_BYTE_REVERSE,
+ TYPE_BYTE_BLOB
+ };
+
+ grn_ctx *ctx_;
+ THD *thread_;
+ KEY *key_info_;
+
+ void get_key_info(KEY_PART_INFO *key_part,
+ DataType *data_type, uint *data_size);
+
+ void encode_float(volatile float value, uint data_size, uchar *grn_key);
+ void decode_float(const uchar *grn_key, uchar *mysql_key, uint data_size);
+ void encode_double(volatile double value, uint data_size, uchar *grn_key);
+ void decode_double(const uchar *grn_key, uchar *mysql_key, uint data_size);
+ void encode_reverse(const uchar *mysql_key, uint data_size, uchar *grn_key);
+ void decode_reverse(const uchar *grn_key, uchar *mysql_key, uint data_size);
+ void encode_blob(Field *field,
+ const uchar *mysql_key, uchar *grn_key, uint *data_size);
+ };
+}
+
+#endif // MRN_MULTIPLE_COLUMN_KEY_CODEC_HPP_
diff --git a/storage/mroonga/lib/mrn_mysqlservices.cpp b/storage/mroonga/lib/mrn_mysqlservices.cpp
new file mode 100644
index 00000000000..9c7af9acfe0
--- /dev/null
+++ b/storage/mroonga/lib/mrn_mysqlservices.cpp
@@ -0,0 +1,32 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+
+/*
+void *thd_alloc(MYSQL_THD thd, unsigned int size)
+{
+ return thd->alloc(size);
+}
+*/
diff --git a/storage/mroonga/lib/mrn_parameters_parser.cpp b/storage/mroonga/lib/mrn_parameters_parser.cpp
new file mode 100644
index 00000000000..9a05097e548
--- /dev/null
+++ b/storage/mroonga/lib/mrn_parameters_parser.cpp
@@ -0,0 +1,176 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_parameters_parser.hpp"
+
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class Parameter {
+ public:
+ char *key_;
+ char *value_;
+
+ Parameter(const char *key, unsigned int key_length,
+ const char *value, unsigned int value_length)
+ : key_(my_strndup(key, key_length, MYF(0))),
+ value_(my_strndup(value, value_length, MYF(0))) {
+ };
+ ~Parameter() {
+ if (key_) {
+ my_free(key_, MYF(0));
+ }
+ if (value_) {
+ my_free(value_, MYF(0));
+ }
+ };
+ };
+
+ ParametersParser::ParametersParser(const char *input,
+ unsigned int input_length)
+ : input_(input),
+ input_length_(input_length),
+ parameters_(NULL) {
+ }
+
+ ParametersParser::~ParametersParser() {
+ for (LIST *next = parameters_; next; next = next->next) {
+ Parameter *parameter = static_cast<Parameter *>(next->data);
+ delete parameter;
+ }
+ list_free(parameters_, false);
+ }
+
+ void ParametersParser::parse() {
+ const char *current = input_;
+ const char *end = input_ + input_length_;
+ for (; current < end; ++current) {
+ if (is_white_space(current[0])) {
+ continue;
+ }
+
+ const char *key = current;
+ unsigned int key_length = 0;
+ while (current < end &&
+ !is_white_space(current[0]) &&
+ current[0] != '\'' && current[0] != '"' && current[0] != ',') {
+ ++current;
+ ++key_length;
+ }
+ if (current == end) {
+ break;
+ }
+
+ while (current < end && is_white_space(current[0])) {
+ ++current;
+ }
+ if (current == end) {
+ break;
+ }
+ current = parse_value(current, end, key, key_length);
+ if (!current) {
+ break;
+ }
+
+ while (current < end && is_white_space(current[0])) {
+ ++current;
+ }
+ if (current == end) {
+ break;
+ }
+ if (current[0] != ',') {
+ // TODO: report error
+ break;
+ }
+ }
+ }
+
+ const char *ParametersParser::parse_value(const char *current,
+ const char *end,
+ const char *key,
+ unsigned int key_length) {
+ char quote = current[0];
+ if (quote != '\'' && quote != '"') {
+ // TODO: report error
+ return NULL;
+ }
+ ++current;
+
+ bool found = false;
+ static const unsigned int max_value_length = 4096;
+ char value[max_value_length];
+ unsigned int value_length = 0;
+ for (; current < end && value_length < max_value_length; ++current) {
+ if (current[0] == quote) {
+ Parameter *parameter = new Parameter(key, key_length,
+ value, value_length);
+ list_push(parameters_, parameter);
+ found = true;
+ ++current;
+ break;
+ }
+
+ switch (current[0]) {
+ case '\\':
+ if (current + 1 == end) {
+ break;
+ }
+ switch (current[1]) {
+ case 'b':
+ value[value_length] = '\b';
+ break;
+ case 'n':
+ value[value_length] = '\n';
+ break;
+ case 'r':
+ value[value_length] = '\r';
+ break;
+ case 't':
+ value[value_length] = '\t';
+ break;
+ default:
+ value[value_length] = current[1];
+ break;
+ }
+ break;
+ default:
+ value[value_length] = current[0];
+ break;
+ }
+ ++value_length;
+ }
+
+ if (!found) {
+ // TODO: report error
+ }
+
+ return current;
+ }
+
+ const char *ParametersParser::operator[](const char *key) {
+ for (LIST *next = parameters_; next; next = next->next) {
+ Parameter *parameter = static_cast<Parameter *>(next->data);
+ if (strcasecmp(parameter->key_, key) == 0) {
+ return parameter->value_;
+ }
+ }
+ return NULL;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_parameters_parser.hpp b/storage/mroonga/lib/mrn_parameters_parser.hpp
new file mode 100644
index 00000000000..a15371ca72e
--- /dev/null
+++ b/storage/mroonga/lib/mrn_parameters_parser.hpp
@@ -0,0 +1,59 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_PARAMETERS_PARSER_HPP_
+#define MRN_PARAMETERS_PARSER_HPP_
+
+#include <mrn_mysql.h>
+#include <my_list.h>
+
+namespace mrn {
+ class ParametersParser {
+ public:
+ ParametersParser(const char *input, unsigned int input_length);
+ ~ParametersParser();
+ void parse();
+ const char *operator[](const char *key);
+
+ private:
+ const char *input_;
+ unsigned int input_length_;
+
+ LIST *parameters_;
+
+ bool is_white_space(char character) {
+ switch (character) {
+ case ' ':
+ case '\r':
+ case '\n':
+ case '\t':
+ return true;
+ break;
+ default:
+ return false;
+ break;
+ }
+ };
+ const char *parse_value(const char *current, const char *end,
+ const char *key, unsigned int key_length);
+ };
+}
+
+#endif /* MRN_PARAMETERS_PARSER_HPP_ */
diff --git a/storage/mroonga/lib/mrn_path_mapper.cpp b/storage/mroonga/lib/mrn_path_mapper.cpp
new file mode 100644
index 00000000000..ee5432f16bb
--- /dev/null
+++ b/storage/mroonga/lib/mrn_path_mapper.cpp
@@ -0,0 +1,192 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+
+#include "mrn_path_mapper.hpp"
+
+#include <string.h>
+
+namespace mrn {
+ char *PathMapper::default_path_prefix = NULL;
+ char *PathMapper::default_mysql_data_home_path = NULL;
+
+ PathMapper::PathMapper(const char *mysql_path,
+ const char *path_prefix,
+ const char *mysql_data_home_path)
+ : mysql_path_(mysql_path),
+ path_prefix_(path_prefix),
+ mysql_data_home_path_(mysql_data_home_path) {
+ db_path_[0] = '\0';
+ db_name_[0] = '\0';
+ table_name_[0] = '\0';
+ mysql_table_name_[0] = '\0';
+ }
+
+ /**
+ * "./${db}/${table}" ==> "${db}.mrn"
+ * "./${db}/" ==> "${db}.mrn"
+ * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0" ==>
+ * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0.mrn"
+ */
+ const char *PathMapper::db_path() {
+ if (db_path_[0] != '\0') {
+ return db_path_;
+ }
+
+ if (mysql_path_[0] == FN_CURLIB && mysql_path_[1] == FN_LIBCHAR) {
+ if (path_prefix_) {
+ strcpy(db_path_, path_prefix_);
+ }
+
+ int i = 2, j = strlen(db_path_), len;
+ len = strlen(mysql_path_);
+ while (mysql_path_[i] != FN_LIBCHAR && i < len) {
+ db_path_[j++] = mysql_path_[i++];
+ }
+ db_path_[j] = '\0';
+ } else if (mysql_data_home_path_) {
+ int len = strlen(mysql_path_);
+ int mysql_data_home_len = strlen(mysql_data_home_path_);
+ if (len > mysql_data_home_len &&
+ !strncmp(mysql_path_, mysql_data_home_path_, mysql_data_home_len)) {
+ int i = mysql_data_home_len, j;
+ if (path_prefix_ && path_prefix_[0] == FN_LIBCHAR) {
+ strcpy(db_path_, path_prefix_);
+ j = strlen(db_path_);
+ } else {
+ memcpy(db_path_, mysql_data_home_path_, mysql_data_home_len);
+ if (path_prefix_) {
+ if (path_prefix_[0] == FN_CURLIB &&
+ path_prefix_[1] == FN_LIBCHAR) {
+ strcpy(&db_path_[mysql_data_home_len], &path_prefix_[2]);
+ } else {
+ strcpy(&db_path_[mysql_data_home_len], path_prefix_);
+ }
+ j = strlen(db_path_);
+ } else {
+ j = mysql_data_home_len;
+ }
+ }
+
+ while (mysql_path_[i] != FN_LIBCHAR && i < len) {
+ db_path_[j++] = mysql_path_[i++];
+ }
+ if (i == len) {
+ memcpy(db_path_, mysql_path_, len);
+ } else {
+ db_path_[j] = '\0';
+ }
+ } else {
+ strcpy(db_path_, mysql_path_);
+ }
+ } else {
+ strcpy(db_path_, mysql_path_);
+ }
+ strcat(db_path_, MRN_DB_FILE_SUFFIX);
+ return db_path_;
+ }
+
+ /**
+ * "./${db}/${table}" ==> "${db}"
+ * "./${db}/" ==> "${db}"
+ * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0" ==>
+ * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0"
+ */
+ const char *PathMapper::db_name() {
+ if (db_name_[0] != '\0') {
+ return db_name_;
+ }
+
+ if (mysql_path_[0] == FN_CURLIB && mysql_path_[1] == FN_LIBCHAR) {
+ int i = 2, j = 0, len;
+ len = strlen(mysql_path_);
+ while (mysql_path_[i] != FN_LIBCHAR && i < len) {
+ db_name_[j++] = mysql_path_[i++];
+ }
+ db_name_[j] = '\0';
+ } else if (mysql_data_home_path_) {
+ int len = strlen(mysql_path_);
+ int mysql_data_home_len = strlen(mysql_data_home_path_);
+ if (len > mysql_data_home_len &&
+ !strncmp(mysql_path_, mysql_data_home_path_, mysql_data_home_len)) {
+ int i = mysql_data_home_len, j = 0;
+ while (mysql_path_[i] != FN_LIBCHAR && i < len) {
+ db_name_[j++] = mysql_path_[i++];
+ }
+ if (i == len) {
+ memcpy(db_name_, mysql_path_, len);
+ } else {
+ db_name_[j] = '\0';
+ }
+ } else {
+ strcpy(db_name_, mysql_path_);
+ }
+ } else {
+ strcpy(db_name_, mysql_path_);
+ }
+ return db_name_;
+ }
+
+ /**
+ * "./${db}/${table}" ==> "${table}" (with encoding first '_')
+ */
+ const char *PathMapper::table_name() {
+ if (table_name_[0] != '\0') {
+ return table_name_;
+ }
+
+ int len = strlen(mysql_path_);
+ int i = len, j = 0;
+ for (; mysql_path_[--i] != FN_LIBCHAR ;) {}
+ if (mysql_path_[i + 1] == '_') {
+ table_name_[j++] = '@';
+ table_name_[j++] = '0';
+ table_name_[j++] = '0';
+ table_name_[j++] = '5';
+ table_name_[j++] = 'f';
+ i++;
+ }
+ for (; i < len ;) {
+ table_name_[j++] = mysql_path_[++i];
+ }
+ table_name_[j] = '\0';
+ return table_name_;
+ }
+
+ /**
+ * "./${db}/${table}" ==> "${table}" (without encoding first '_')
+ */
+ const char *PathMapper::mysql_table_name() {
+ if (mysql_table_name_[0] != '\0') {
+ return mysql_table_name_;
+ }
+
+ int len = strlen(mysql_path_);
+ int i = len, j = 0;
+ for (; mysql_path_[--i] != FN_LIBCHAR ;) {}
+ for (; i < len ;) {
+ mysql_table_name_[j++] = mysql_path_[++i];
+ }
+ mysql_table_name_[j] = '\0';
+ return mysql_table_name_;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_path_mapper.hpp b/storage/mroonga/lib/mrn_path_mapper.hpp
new file mode 100644
index 00000000000..f70cd7b5587
--- /dev/null
+++ b/storage/mroonga/lib/mrn_path_mapper.hpp
@@ -0,0 +1,51 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_PATH_MAPPER_HPP_
+#define MRN_PATH_MAPPER_HPP_
+
+#include <mrn_constants.hpp>
+
+namespace mrn {
+ class PathMapper {
+ public:
+ static char *default_path_prefix;
+ static char *default_mysql_data_home_path;
+
+ PathMapper(const char *mysql_path,
+ const char *path_prefix=default_path_prefix,
+ const char *mysql_data_home_path=default_mysql_data_home_path);
+ const char *db_path();
+ const char *db_name();
+ const char *table_name();
+ const char *mysql_table_name();
+ private:
+ const char *mysql_path_;
+ const char *path_prefix_;
+ const char *mysql_data_home_path_;
+ char db_path_[MRN_MAX_PATH_SIZE];
+ char db_name_[MRN_MAX_PATH_SIZE];
+ char table_name_[MRN_MAX_PATH_SIZE];
+ char mysql_table_name_[MRN_MAX_PATH_SIZE];
+ };
+}
+
+#endif /* MRN_PATH_MAPPER_HPP_ */
diff --git a/storage/mroonga/lib/mrn_smart_grn_obj.cpp b/storage/mroonga/lib/mrn_smart_grn_obj.cpp
new file mode 100644
index 00000000000..9dbae6528f9
--- /dev/null
+++ b/storage/mroonga/lib/mrn_smart_grn_obj.cpp
@@ -0,0 +1,53 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include "mrn_smart_grn_obj.hpp"
+
+namespace mrn {
+ SmartGrnObj::SmartGrnObj(grn_ctx *ctx, grn_obj *obj)
+ : ctx_(ctx),
+ obj_(obj) {
+ }
+
+ SmartGrnObj::SmartGrnObj(grn_ctx *ctx, const char *name, int name_size)
+ : ctx_(ctx),
+ obj_(NULL) {
+ if (name_size < 0) {
+ name_size = strlen(name);
+ }
+ obj_ = grn_ctx_get(ctx_, name, name_size);
+ }
+
+ SmartGrnObj::SmartGrnObj(grn_ctx *ctx, grn_id id)
+ : ctx_(ctx),
+ obj_(grn_ctx_at(ctx_, id)) {
+ }
+
+ SmartGrnObj::~SmartGrnObj() {
+ if (obj_) {
+ grn_obj_unlink(ctx_, obj_);
+ }
+ }
+
+ grn_obj *SmartGrnObj::get() {
+ return obj_;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_smart_grn_obj.hpp b/storage/mroonga/lib/mrn_smart_grn_obj.hpp
new file mode 100644
index 00000000000..c9c86f3e46e
--- /dev/null
+++ b/storage/mroonga/lib/mrn_smart_grn_obj.hpp
@@ -0,0 +1,39 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_SMART_GRN_OBJ_HPP_
+#define MRN_SMART_GRN_OBJ_HPP_
+
+#include <groonga.h>
+
+namespace mrn {
+ class SmartGrnObj {
+ grn_ctx *ctx_;
+ grn_obj *obj_;
+ public:
+ SmartGrnObj(grn_ctx *ctx, grn_obj *obj);
+ SmartGrnObj(grn_ctx *ctx, const char *name, int name_size=-1);
+ SmartGrnObj(grn_ctx *ctx, grn_id id);
+ ~SmartGrnObj();
+
+ grn_obj *get();
+ };
+}
+
+#endif // MRN_SMART_GRN_OBJ_HPP_
diff --git a/storage/mroonga/lib/mrn_time_converter.cpp b/storage/mroonga/lib/mrn_time_converter.cpp
new file mode 100644
index 00000000000..63b2e53766d
--- /dev/null
+++ b/storage/mroonga/lib/mrn_time_converter.cpp
@@ -0,0 +1,260 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "mrn_time_converter.hpp"
+
+#ifdef min
+# undef min
+#endif
+#ifdef max
+# undef max
+#endif
+
+#include <limits>
+
+// for debug
+#define MRN_CLASS_NAME "mrn::TimeConverter"
+
+namespace mrn {
+ TimeConverter::TimeConverter() {
+ }
+
+ TimeConverter::~TimeConverter() {
+ }
+
+ time_t TimeConverter::tm_to_time_gm(struct tm *time, bool *truncated) {
+ MRN_DBUG_ENTER_METHOD();
+ *truncated = true;
+ struct tm gmdate;
+ time->tm_yday = -1;
+ time->tm_isdst = -1;
+ time_t sec_t = mktime(time);
+ if (time->tm_yday == -1) {
+ DBUG_RETURN(-1);
+ }
+ if (!gmtime_r(&sec_t, &gmdate)) {
+ DBUG_RETURN(-1);
+ }
+ int32 mrn_utc_diff_in_seconds =
+ (
+ time->tm_mday > 25 && gmdate.tm_mday == 1 ? -1 :
+ time->tm_mday == 1 && gmdate.tm_mday > 25 ? 1 :
+ time->tm_mday - gmdate.tm_mday
+ ) * 24 * 60 * 60 +
+ (time->tm_hour - gmdate.tm_hour) * 60 * 60 +
+ (time->tm_min - gmdate.tm_min) * 60 +
+ (time->tm_sec - gmdate.tm_sec);
+ DBUG_PRINT("info", ("mroonga: time->tm_year=%d", time->tm_year));
+ DBUG_PRINT("info", ("mroonga: time->tm_mon=%d", time->tm_mon));
+ DBUG_PRINT("info", ("mroonga: time->tm_mday=%d", time->tm_mday));
+ DBUG_PRINT("info", ("mroonga: time->tm_hour=%d", time->tm_hour));
+ DBUG_PRINT("info", ("mroonga: time->tm_min=%d", time->tm_min));
+ DBUG_PRINT("info", ("mroonga: time->tm_sec=%d", time->tm_sec));
+ DBUG_PRINT("info", ("mroonga: mrn_utc_diff_in_seconds=%d",
+ mrn_utc_diff_in_seconds));
+ if (mrn_utc_diff_in_seconds > 0) {
+ if (sec_t > std::numeric_limits<time_t>::max() - mrn_utc_diff_in_seconds) {
+ DBUG_RETURN(-1);
+ }
+ } else {
+ if (sec_t < std::numeric_limits<time_t>::min() - mrn_utc_diff_in_seconds) {
+ DBUG_RETURN(-1);
+ }
+ }
+ *truncated = false;
+ DBUG_RETURN(sec_t + mrn_utc_diff_in_seconds);
+ }
+
+ long long int TimeConverter::tm_to_grn_time(struct tm *time, int usec,
+ bool *truncated) {
+ MRN_DBUG_ENTER_METHOD();
+
+ long long int sec = tm_to_time_gm(time, truncated);
+
+ DBUG_PRINT("info", ("mroonga: sec=%lld", sec));
+ DBUG_PRINT("info", ("mroonga: usec=%d", usec));
+
+ long long int grn_time = *truncated ? 0 : GRN_TIME_PACK(sec, usec);
+
+ DBUG_RETURN(grn_time);
+ }
+
+ long long int TimeConverter::mysql_time_to_grn_time(MYSQL_TIME *mysql_time,
+ bool *truncated) {
+ MRN_DBUG_ENTER_METHOD();
+
+ int usec = mysql_time->second_part;
+ long long int grn_time = 0;
+
+ *truncated = false;
+ switch (mysql_time->time_type) {
+ case MYSQL_TIMESTAMP_DATE:
+ {
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_DATE"));
+ struct tm date;
+ memset(&date, 0, sizeof(struct tm));
+ date.tm_year = mysql_time->year - TM_YEAR_BASE;
+ if (mysql_time->month > 0) {
+ date.tm_mon = mysql_time->month - 1;
+ } else {
+ date.tm_mon = 0;
+ *truncated = true;
+ }
+ if (mysql_time->day > 0) {
+ date.tm_mday = mysql_time->day;
+ } else {
+ date.tm_mday = 1;
+ *truncated = true;
+ }
+ DBUG_PRINT("info", ("mroonga: tm_year=%d", date.tm_year));
+ DBUG_PRINT("info", ("mroonga: tm_mon=%d", date.tm_mon));
+ DBUG_PRINT("info", ("mroonga: tm_mday=%d", date.tm_mday));
+ bool tm_truncated = false;
+ grn_time = tm_to_grn_time(&date, usec, &tm_truncated);
+ if (tm_truncated) {
+ *truncated = true;
+ }
+ }
+ break;
+ case MYSQL_TIMESTAMP_DATETIME:
+ {
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_DATETIME"));
+ struct tm datetime;
+ memset(&datetime, 0, sizeof(struct tm));
+ datetime.tm_year = mysql_time->year - TM_YEAR_BASE;
+ if (mysql_time->month > 0) {
+ datetime.tm_mon = mysql_time->month - 1;
+ } else {
+ datetime.tm_mon = 0;
+ *truncated = true;
+ }
+ if (mysql_time->day > 0) {
+ datetime.tm_mday = mysql_time->day;
+ } else {
+ datetime.tm_mday = 1;
+ *truncated = true;
+ }
+ datetime.tm_hour = mysql_time->hour;
+ datetime.tm_min = mysql_time->minute;
+ datetime.tm_sec = mysql_time->second;
+ DBUG_PRINT("info", ("mroonga: tm_year=%d", datetime.tm_year));
+ DBUG_PRINT("info", ("mroonga: tm_mon=%d", datetime.tm_mon));
+ DBUG_PRINT("info", ("mroonga: tm_mday=%d", datetime.tm_mday));
+ DBUG_PRINT("info", ("mroonga: tm_hour=%d", datetime.tm_hour));
+ DBUG_PRINT("info", ("mroonga: tm_min=%d", datetime.tm_min));
+ DBUG_PRINT("info", ("mroonga: tm_sec=%d", datetime.tm_sec));
+ bool tm_truncated = false;
+ grn_time = tm_to_grn_time(&datetime, usec, &tm_truncated);
+ if (tm_truncated) {
+ *truncated = true;
+ }
+ }
+ break;
+ case MYSQL_TIMESTAMP_TIME:
+ {
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_TIME"));
+ int sec =
+ mysql_time->hour * 60 * 60 +
+ mysql_time->minute * 60 +
+ mysql_time->second;
+ DBUG_PRINT("info", ("mroonga: sec=%d", sec));
+ grn_time = GRN_TIME_PACK(sec, usec);
+ if (mysql_time->neg) {
+ grn_time = -grn_time;
+ }
+ }
+ break;
+ default:
+ DBUG_PRINT("info", ("mroonga: default"));
+ grn_time = 0;
+ break;
+ }
+
+ DBUG_RETURN(grn_time);
+ }
+
+ void TimeConverter::grn_time_to_mysql_time(long long int grn_time,
+ MYSQL_TIME *mysql_time) {
+ MRN_DBUG_ENTER_METHOD();
+ long long int sec;
+ int usec;
+ GRN_TIME_UNPACK(grn_time, sec, usec);
+ DBUG_PRINT("info", ("mroonga: sec=%lld", sec));
+ DBUG_PRINT("info", ("mroonga: usec=%d", usec));
+ switch (mysql_time->time_type) {
+ case MYSQL_TIMESTAMP_DATE:
+ {
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_DATE"));
+ struct tm date;
+ time_t sec_t = sec;
+ // TODO: Add error check
+ gmtime_r(&sec_t, &date);
+ DBUG_PRINT("info", ("mroonga: tm_year=%d", date.tm_year));
+ mysql_time->year = date.tm_year + TM_YEAR_BASE;
+ DBUG_PRINT("info", ("mroonga: tm_mon=%d", date.tm_mon));
+ mysql_time->month = date.tm_mon + 1;
+ DBUG_PRINT("info", ("mroonga: tm_mday=%d", date.tm_mday));
+ mysql_time->day = date.tm_mday;
+ }
+ break;
+ case MYSQL_TIMESTAMP_DATETIME:
+ {
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_DATETIME"));
+ struct tm date;
+ time_t sec_t = sec;
+ // TODO: Add error check
+ gmtime_r(&sec_t, &date);
+ DBUG_PRINT("info", ("mroonga: tm_year=%d", date.tm_year));
+ mysql_time->year = date.tm_year + TM_YEAR_BASE;
+ DBUG_PRINT("info", ("mroonga: tm_mon=%d", date.tm_mon));
+ mysql_time->month = date.tm_mon + 1;
+ DBUG_PRINT("info", ("mroonga: tm_mday=%d", date.tm_mday));
+ mysql_time->day = date.tm_mday;
+ DBUG_PRINT("info", ("mroonga: tm_hour=%d", date.tm_hour));
+ mysql_time->hour = date.tm_hour;
+ DBUG_PRINT("info", ("mroonga: tm_min=%d", date.tm_min));
+ mysql_time->minute = date.tm_min;
+ DBUG_PRINT("info", ("mroonga: tm_sec=%d", date.tm_sec));
+ mysql_time->second = date.tm_sec;
+ mysql_time->second_part = usec;
+ }
+ break;
+ case MYSQL_TIMESTAMP_TIME:
+ DBUG_PRINT("info", ("mroonga: MYSQL_TIMESTAMP_TIME"));
+ if (sec < 0) {
+ mysql_time->neg = true;
+ sec = -sec;
+ }
+ mysql_time->hour = static_cast<unsigned int>(sec / 60 / 60);
+ mysql_time->minute = sec / 60 % 60;
+ mysql_time->second = sec % 60;
+ mysql_time->second_part = usec;
+ break;
+ default:
+ DBUG_PRINT("info", ("mroonga: default"));
+ break;
+ }
+ DBUG_VOID_RETURN;
+ }
+}
diff --git a/storage/mroonga/lib/mrn_time_converter.hpp b/storage/mroonga/lib/mrn_time_converter.hpp
new file mode 100644
index 00000000000..c5c69a0a8ad
--- /dev/null
+++ b/storage/mroonga/lib/mrn_time_converter.hpp
@@ -0,0 +1,47 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_TIME_CONVERTER_HPP_
+#define MRN_TIME_CONVERTER_HPP_
+
+#include <groonga.h>
+#include <mrn_mysql_compat.h>
+
+namespace mrn {
+ class TimeConverter {
+ public:
+ static const long long int TM_YEAR_BASE = 1900;
+
+ TimeConverter();
+ ~TimeConverter();
+
+ long long int mysql_time_to_grn_time(MYSQL_TIME *mysql_time,
+ bool *truncated);
+
+ long long int tm_to_grn_time(struct tm *time, int usec, bool *truncated);
+
+ void grn_time_to_mysql_time(long long int grn_time, MYSQL_TIME *mysql_time);
+
+ private:
+ time_t tm_to_time_gm(struct tm *time, bool *truncated);
+ };
+}
+
+#endif /* MRN_TIME_CONVERTER_HPP_ */
diff --git a/storage/mroonga/lib/mrn_windows.hpp b/storage/mroonga/lib/mrn_windows.hpp
new file mode 100644
index 00000000000..f6ae4490254
--- /dev/null
+++ b/storage/mroonga/lib/mrn_windows.hpp
@@ -0,0 +1,31 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_WINDOWS_HPP_
+#define MRN_WINDOWS_HPP_
+
+#if defined(_WIN32) || defined(_WIN64)
+# define MRN_API __declspec(dllexport)
+#else
+# define MRN_API
+#endif
+
+#endif /* MRN_WINDOWS_HPP_ */
diff --git a/storage/mroonga/mrn_constants.hpp b/storage/mroonga/mrn_constants.hpp
new file mode 100644
index 00000000000..494e08721bd
--- /dev/null
+++ b/storage/mroonga/mrn_constants.hpp
@@ -0,0 +1,47 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2011 Kentoku SHIBA
+ Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_CONSTANTS_HPP_
+#define MRN_CONSTANTS_HPP_
+
+#include <groonga.h>
+
+#define MRN_BUFFER_SIZE 1024
+#define MRN_MAX_KEY_SIZE GRN_TABLE_MAX_KEY_SIZE
+#if defined(MAX_PATH)
+# define MRN_MAX_PATH_SIZE (MAX_PATH + 1)
+#elif defined(PATH_MAX)
+# define MRN_MAX_PATH_SIZE (PATH_MAX)
+#elif defined(MAXPATHLEN)
+# define MRN_MAX_PATH_SIZE (MAXPATHLEN)
+#else
+# define MRN_MAX_PATH_SIZE (256)
+#endif
+#define MRN_DB_FILE_SUFFIX ".mrn"
+#define MRN_LOG_FILE_PATH "groonga.log"
+#define MRN_COLUMN_NAME_ID "_id"
+#define MRN_COLUMN_NAME_KEY "_key"
+#define MRN_COLUMN_NAME_SCORE "_score"
+#ifndef MRN_PARSER_DEFAULT
+# define MRN_PARSER_DEFAULT "TokenBigram"
+#endif
+
+#endif /* MRN_CONSTANTS_HPP_ */
diff --git a/storage/mroonga/mrn_err.h b/storage/mroonga/mrn_err.h
new file mode 100644
index 00000000000..c2ca885407a
--- /dev/null
+++ b/storage/mroonga/mrn_err.h
@@ -0,0 +1,32 @@
+/* Copyright(C) 2011 Kentoku SHIBA
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_ERR_H_
+#define MRN_ERR_H_
+
+#define ER_MRN_INVALID_TABLE_PARAM_NUM 16501
+#define ER_MRN_INVALID_TABLE_PARAM_STR "The table parameter '%-.64s' is invalid"
+#define ER_MRN_CHARSET_NOT_SUPPORT_NUM 16502
+#define ER_MRN_CHARSET_NOT_SUPPORT_STR "The character set '%s[%s]' is not supported by groonga"
+#define ER_MRN_GEOMETRY_NOT_SUPPORT_NUM 16503
+#define ER_MRN_GEOMETRY_NOT_SUPPORT_STR "This geometry type is not supported. Groonga is supported point only"
+#define ER_MRN_ERROR_FROM_GROONGA_NUM 16504
+#define ER_MRN_ERROR_FROM_GROONGA_STR "Error from Groonga [%s]"
+#define ER_MRN_INVALID_NULL_VALUE_NUM 16505
+#define ER_MRN_INVALID_NULL_VALUE_STR "NULL value can't be used for %s"
+
+#endif /* MRN_ERR_H_ */
diff --git a/storage/mroonga/mrn_macro.hpp b/storage/mroonga/mrn_macro.hpp
new file mode 100644
index 00000000000..b20fdb4c140
--- /dev/null
+++ b/storage/mroonga/mrn_macro.hpp
@@ -0,0 +1,30 @@
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_MACRO_HPP_
+#define MRN_MACRO_HPP_
+
+#ifdef __cplusplus
+# define MRN_BEGIN_DECLS extern "C" {
+# define MRN_END_DECLS }
+#else
+# define MRN_BEGIN_DECLS
+# define MRN_END_DECLS
+#endif
+
+#endif /* MRN_MACRO_HPP_ */
diff --git a/storage/mroonga/mrn_mysql.h b/storage/mroonga/mrn_mysql.h
new file mode 100644
index 00000000000..cf2a54621bb
--- /dev/null
+++ b/storage/mroonga/mrn_mysql.h
@@ -0,0 +1,83 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_MYSQL_H_
+#define MRN_MYSQL_H_
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+/* We need to undefine them because my_config.h defines them. :< */
+# undef VERSION
+# undef PACKAGE
+# undef PACKAGE_BUGREPORT
+# undef PACKAGE_NAME
+# undef PACKAGE_STRING
+# undef PACKAGE_TARNAME
+# undef PACKAGE_VERSION
+#endif
+
+#include <mrn_version.h>
+
+#ifdef FORCE_FAST_MUTEX_DISABLED
+# ifdef MY_PTHREAD_FASTMUTEX
+# undef MY_PTHREAD_FASTMUTEX
+# endif
+#endif
+
+#define MYSQL_SERVER 1
+#include <mysql_version.h>
+
+#if MYSQL_VERSION_ID < 50500
+# include <mysql_priv.h>
+# include <mysql/plugin.h>
+#else
+# include <sql_priv.h>
+# include <sql_class.h>
+# include <probes_mysql.h>
+# include <sql_partition.h>
+#endif
+#include <rpl_filter.h>
+
+#ifdef MARIADB_BASE_VERSION
+# define MRN_MARIADB_P 1
+#endif
+
+#if MYSQL_VERSION_ID >= 50607
+# if !defined(MRN_MARIADB_P)
+# define MRN_HAVE_SQL_OPTIMIZER_H
+# endif
+#endif
+
+#define MRN_MESSAGE_BUFFER_SIZE 1024
+
+#define MRN_DBUG_ENTER_FUNCTION() DBUG_ENTER(__FUNCTION__)
+
+#if !defined(DBUG_OFF) && !defined(_lint)
+# define MRN_DBUG_ENTER_METHOD() \
+ char method_name[MRN_MESSAGE_BUFFER_SIZE]; \
+ method_name[0] = '\0'; \
+ strcat(method_name, MRN_CLASS_NAME); \
+ strcat(method_name, "::"); \
+ strcat(method_name, __FUNCTION__); \
+ DBUG_ENTER(method_name)
+#else
+# define MRN_DBUG_ENTER_METHOD() MRN_DBUG_ENTER_FUNCTION()
+#endif
+
+#endif /* MRN_MYSQL_H_ */
diff --git a/storage/mroonga/mrn_mysql_compat.h b/storage/mroonga/mrn_mysql_compat.h
new file mode 100644
index 00000000000..7312dd70827
--- /dev/null
+++ b/storage/mroonga/mrn_mysql_compat.h
@@ -0,0 +1,143 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_MYSQL_COMPAT_H_
+#define MRN_MYSQL_COMPAT_H_
+
+#include "mrn_mysql.h"
+
+#if MYSQL_VERSION_ID >= 50500
+# define my_free(PTR, FLAG) my_free(PTR)
+#endif
+
+#if MYSQL_VERSION_ID < 50500
+# define mysql_mutex_lock(mutex) pthread_mutex_lock(mutex)
+# define mysql_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
+#endif
+
+#if MYSQL_VERSION_ID >= 50604
+# define MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
+# define MRN_HAVE_MYSQL_TYPE_DATETIME2
+# define MRN_HAVE_MYSQL_TYPE_TIME2
+#endif
+
+#if MYSQL_VERSION_ID < 50603
+ typedef MYSQL_ERROR Sql_condition;
+#endif
+
+#if defined(MRN_MARIADB_P)
+# if MYSQL_VERSION_ID >= 50302 && MYSQL_VERSION_ID < 100000
+ typedef COST_VECT Cost_estimate;
+# endif
+#endif
+
+#if MYSQL_VERSION_ID >= 50516
+# define MRN_PLUGIN_HAVE_FLAGS 1
+#endif
+
+// for MySQL < 5.5
+#ifndef MY_ALL_CHARSETS_SIZE
+# define MY_ALL_CHARSETS_SIZE 256
+#endif
+
+#ifndef MRN_MARIADB_P
+ typedef char *range_id_t;
+#endif
+
+#if MYSQL_VERSION_ID >= 50609
+# define MRN_KEY_HAS_USER_DEFINED_KEYPARTS
+#endif
+
+#ifdef MRN_KEY_HAS_USER_DEFINED_KEYPARTS
+# define KEY_N_KEY_PARTS(key) (key)->user_defined_key_parts
+#else
+# define KEY_N_KEY_PARTS(key) (key)->key_parts
+#endif
+
+#if MYSQL_VERSION_ID < 100000 || !defined(MRN_MARIADB_P)
+# define init_alloc_root(PTR, SZ1, SZ2, FLAG) init_alloc_root(PTR, SZ1, SZ2)
+#endif
+
+#if MYSQL_VERSION_ID < 100002 || !defined(MRN_MARIADB_P)
+# define GTS_TABLE 0
+#endif
+
+/* For MySQL 5.1. MySQL 5.1 doesn't have FN_LIBCHAR2. */
+#ifndef FN_LIBCHAR2
+# define FN_LIBCHAR2 FN_LIBCHAR
+#endif
+
+#if MYSQL_VERSION_ID >= 50607
+# if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P)
+# define MRN_GET_ERROR_MESSAGE thd_get_error_message(current_thd)
+# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd_get_error_row(thd)
+# else
+# define MRN_GET_ERROR_MESSAGE current_thd->get_stmt_da()->message()
+# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->get_stmt_da()->current_row_for_warning()
+# endif
+#else
+# if MYSQL_VERSION_ID >= 50500
+# define MRN_GET_ERROR_MESSAGE current_thd->stmt_da->message()
+# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->warning_info->current_row_for_warning()
+# else
+# define MRN_GET_ERROR_MESSAGE current_thd->main_da.message()
+# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->row_count
+# endif
+#endif
+
+#if MYSQL_VERSION_ID >= 50607 && !defined(MRN_MARIADB_P)
+# define MRN_ITEM_HAVE_ITEM_NAME
+#endif
+
+#if MYSQL_VERSION_ID >= 50500 && MYSQL_VERSION_ID < 50700
+# define MRN_HAVE_TABLE_DEF_CACHE
+#endif
+
+#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100009
+# define MRN_HAVE_TDC_ACQUIRE_SHARE
+#endif
+
+#if MYSQL_VERSION_ID >= 50613
+# define MRN_HAVE_ALTER_INFO
+#endif
+
+#if MYSQL_VERSION_ID >= 50603
+# define MRN_HAVE_GET_TABLE_DEF_KEY
+#endif
+
+#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100004
+# define MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+#endif
+
+#if MYSQL_VERSION_ID >= 50404
+# define MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+#endif
+
+#ifndef TIME_FUZZY_DATE
+/* For MariaDB 10. */
+# ifdef TIME_FUZZY_DATES
+# define TIME_FUZZY_DATE TIME_FUZZY_DATES
+# endif
+#endif
+
+#if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P)
+# define MRN_USE_MYSQL_DATA_HOME
+#endif
+
+#endif /* MRN_MYSQL_COMPAT_H_ */
diff --git a/storage/mroonga/mrn_table.cpp b/storage/mroonga/mrn_table.cpp
new file mode 100644
index 00000000000..877cc6489ed
--- /dev/null
+++ b/storage/mroonga/mrn_table.cpp
@@ -0,0 +1,1147 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrn_mysql.h"
+
+#if MYSQL_VERSION_ID >= 50500
+# include <sql_servers.h>
+# include <sql_base.h>
+#endif
+#include "mrn_err.h"
+#include "mrn_table.hpp"
+#include "mrn_mysql_compat.h"
+#include <mrn_lock.hpp>
+
+#if MYSQL_VERSION_ID >= 50603
+# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name), TRUE)
+#else
+# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name))
+#endif
+
+#define LEX_STRING_IS_EMPTY(string) \
+ ((string).length == 0 || !(string).str || (string).str[0] == '\0')
+
+#define MRN_DEFAULT_STR "DEFAULT"
+#define MRN_DEFAULT_LEN (sizeof(MRN_DEFAULT_STR) - 1)
+#define MRN_GROONGA_STR "GROONGA"
+#define MRN_GROONGA_LEN (sizeof(MRN_GROONGA_STR) - 1)
+
+#ifdef MRN_HAVE_TABLE_DEF_CACHE
+extern HASH *mrn_table_def_cache;
+#endif
+
+#ifdef WIN32
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+extern PSI_mutex_key *mrn_table_share_lock_share;
+# endif
+# ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+extern PSI_mutex_key *mrn_table_share_lock_ha_data;
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern HASH mrn_open_tables;
+extern pthread_mutex_t mrn_open_tables_mutex;
+extern HASH mrn_long_term_share;
+extern pthread_mutex_t mrn_long_term_share_mutex;
+extern char *mrn_default_parser;
+extern char *mrn_default_wrapper_engine;
+extern handlerton *mrn_hton_ptr;
+extern HASH mrn_allocated_thds;
+extern pthread_mutex_t mrn_allocated_thds_mutex;
+
+static char *mrn_get_string_between_quote(const char *ptr)
+{
+ const char *start_ptr, *end_ptr, *tmp_ptr, *esc_ptr;
+ bool find_flg = FALSE, esc_flg = FALSE;
+ MRN_DBUG_ENTER_FUNCTION();
+
+ start_ptr = strchr(ptr, '\'');
+ end_ptr = strchr(ptr, '"');
+ if (start_ptr && (!end_ptr || start_ptr < end_ptr))
+ {
+ tmp_ptr = ++start_ptr;
+ while (!find_flg)
+ {
+ if (!(end_ptr = strchr(tmp_ptr, '\'')))
+ DBUG_RETURN(NULL);
+ esc_ptr = tmp_ptr;
+ while (!find_flg)
+ {
+ esc_ptr = strchr(esc_ptr, '\\');
+ if (!esc_ptr || esc_ptr > end_ptr)
+ find_flg = TRUE;
+ else if (esc_ptr == end_ptr - 1)
+ {
+ esc_flg = TRUE;
+ tmp_ptr = end_ptr + 1;
+ break;
+ } else {
+ esc_flg = TRUE;
+ esc_ptr += 2;
+ }
+ }
+ }
+ } else if (end_ptr)
+ {
+ start_ptr = end_ptr;
+ tmp_ptr = ++start_ptr;
+ while (!find_flg)
+ {
+ if (!(end_ptr = strchr(tmp_ptr, '"')))
+ DBUG_RETURN(NULL);
+ esc_ptr = tmp_ptr;
+ while (!find_flg)
+ {
+ esc_ptr = strchr(esc_ptr, '\\');
+ if (!esc_ptr || esc_ptr > end_ptr)
+ find_flg = TRUE;
+ else if (esc_ptr == end_ptr - 1)
+ {
+ esc_flg = TRUE;
+ tmp_ptr = end_ptr + 1;
+ break;
+ } else {
+ esc_flg = TRUE;
+ esc_ptr += 2;
+ }
+ }
+ }
+ } else
+ DBUG_RETURN(NULL);
+
+ size_t length = end_ptr - start_ptr;
+ char *extracted_string = (char *)my_malloc(length + 1, MYF(MY_WME));
+ if (esc_flg) {
+ size_t extracted_index = 0;
+ const char *current_ptr = start_ptr;
+ while (current_ptr < end_ptr) {
+ if (*current_ptr != '\\') {
+ extracted_string[extracted_index] = *current_ptr;
+ ++extracted_index;
+ current_ptr++;
+ continue;
+ }
+
+ if (current_ptr + 1 == end_ptr) {
+ break;
+ }
+
+ switch (*(current_ptr + 1))
+ {
+ case 'b':
+ extracted_string[extracted_index] = '\b';
+ break;
+ case 'n':
+ extracted_string[extracted_index] = '\n';
+ break;
+ case 'r':
+ extracted_string[extracted_index] = '\r';
+ break;
+ case 't':
+ extracted_string[extracted_index] = '\t';
+ break;
+ default:
+ extracted_string[extracted_index] = *(current_ptr + 1);
+ break;
+ }
+ ++extracted_index;
+ }
+ } else {
+ memcpy(extracted_string, start_ptr, length);
+ extracted_string[length] = '\0';
+ }
+
+ DBUG_RETURN(extracted_string);
+}
+
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+void mrn_get_partition_info(const char *table_name, uint table_name_length,
+ const TABLE *table, partition_element **part_elem,
+ partition_element **sub_elem)
+{
+ char tmp_name[FN_LEN];
+ partition_info *part_info = table->part_info;
+ partition_element *tmp_part_elem = NULL, *tmp_sub_elem = NULL;
+ bool tmp_flg = FALSE, tmp_find_flg = FALSE;
+ MRN_DBUG_ENTER_FUNCTION();
+ *part_elem = NULL;
+ *sub_elem = NULL;
+ if (!part_info)
+ DBUG_VOID_RETURN;
+
+ if (table_name && !memcmp(table_name + table_name_length - 5, "#TMP#", 5))
+ tmp_flg = TRUE;
+
+ DBUG_PRINT("info", ("mroonga table_name=%s", table_name));
+ List_iterator<partition_element> part_it(part_info->partitions);
+ while ((*part_elem = part_it++))
+ {
+ if ((*part_elem)->subpartitions.elements)
+ {
+ List_iterator<partition_element> sub_it((*part_elem)->subpartitions);
+ while ((*sub_elem = sub_it++))
+ {
+ create_subpartition_name(tmp_name, table->s->path.str,
+ (*part_elem)->partition_name, (*sub_elem)->partition_name,
+ NORMAL_PART_NAME);
+ DBUG_PRINT("info", ("mroonga tmp_name=%s", tmp_name));
+ if (table_name && !memcmp(table_name, tmp_name, table_name_length + 1))
+ DBUG_VOID_RETURN;
+ if (
+ tmp_flg &&
+ table_name &&
+ *(tmp_name + table_name_length - 5) == '\0' &&
+ !memcmp(table_name, tmp_name, table_name_length - 5)
+ ) {
+ tmp_part_elem = *part_elem;
+ tmp_sub_elem = *sub_elem;
+ tmp_flg = FALSE;
+ tmp_find_flg = TRUE;
+ }
+ }
+ } else {
+ create_partition_name(tmp_name, table->s->path.str,
+ (*part_elem)->partition_name, NORMAL_PART_NAME, TRUE);
+ DBUG_PRINT("info", ("mroonga tmp_name=%s", tmp_name));
+ if (table_name && !memcmp(table_name, tmp_name, table_name_length + 1))
+ DBUG_VOID_RETURN;
+ if (
+ tmp_flg &&
+ table_name &&
+ *(tmp_name + table_name_length - 5) == '\0' &&
+ !memcmp(table_name, tmp_name, table_name_length - 5)
+ ) {
+ tmp_part_elem = *part_elem;
+ tmp_flg = FALSE;
+ tmp_find_flg = TRUE;
+ }
+ }
+ }
+ if (tmp_find_flg)
+ {
+ *part_elem = tmp_part_elem;
+ *sub_elem = tmp_sub_elem;
+ DBUG_PRINT("info", ("mroonga tmp find"));
+ DBUG_VOID_RETURN;
+ }
+ *part_elem = NULL;
+ *sub_elem = NULL;
+ DBUG_PRINT("info", ("mroonga no hit"));
+ DBUG_VOID_RETURN;
+}
+#endif
+
+#define MRN_PARAM_STR_LEN(name) name ## _length
+#define MRN_PARAM_STR(title_name, param_name) \
+ if (!strncasecmp(tmp_ptr, title_name, title_length)) \
+ { \
+ DBUG_PRINT("info", ("mroonga "title_name" start")); \
+ if (!share->param_name) \
+ { \
+ if ((share->param_name = mrn_get_string_between_quote( \
+ start_ptr))) \
+ share->MRN_PARAM_STR_LEN(param_name) = strlen(share->param_name); \
+ else { \
+ error = ER_MRN_INVALID_TABLE_PARAM_NUM; \
+ my_printf_error(error, ER_MRN_INVALID_TABLE_PARAM_STR, \
+ MYF(0), tmp_ptr); \
+ goto error; \
+ } \
+ DBUG_PRINT("info", ("mroonga "title_name"=%s", share->param_name)); \
+ } \
+ break; \
+ }
+
+#define MRN_PARAM_STR_LIST(title_name, param_name, param_pos) \
+ if (!strncasecmp(tmp_ptr, title_name, title_length)) \
+ { \
+ DBUG_PRINT("info", ("mroonga "title_name" start")); \
+ if (share->param_name && !share->param_name[param_pos]) \
+ { \
+ if ((share->param_name[param_pos] = mrn_get_string_between_quote( \
+ start_ptr))) \
+ share->MRN_PARAM_STR_LEN(param_name)[param_pos] = \
+ strlen(share->param_name[param_pos]); \
+ else { \
+ error = ER_MRN_INVALID_TABLE_PARAM_NUM; \
+ my_printf_error(error, ER_MRN_INVALID_TABLE_PARAM_STR, \
+ MYF(0), tmp_ptr); \
+ goto error; \
+ } \
+ DBUG_PRINT("info", ("mroonga "title_name"[%d]=%s", param_pos, \
+ share->param_name[param_pos])); \
+ } \
+ break; \
+ }
+
+int mrn_parse_table_param(MRN_SHARE *share, TABLE *table)
+{
+ int i, error = 0;
+ int title_length;
+ const char *sprit_ptr[2];
+ const char *tmp_ptr, *start_ptr;
+ char *params_string = NULL;
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ partition_element *part_elem;
+ partition_element *sub_elem;
+#endif
+ MRN_DBUG_ENTER_FUNCTION();
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ mrn_get_partition_info(share->table_name, share->table_name_length, table,
+ &part_elem, &sub_elem);
+#endif
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ for (i = 4; i > 0; i--)
+#else
+ for (i = 2; i > 0; i--)
+#endif
+ {
+ const char *params_string_value;
+ uint params_string_length;
+ switch (i)
+ {
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+ case 4:
+ if (!sub_elem || !sub_elem->part_comment)
+ continue;
+ DBUG_PRINT("info", ("mroonga create sub comment string"));
+ params_string_value = sub_elem->part_comment;
+ params_string_length = strlen(params_string_value);
+ DBUG_PRINT("info",
+ ("mroonga sub comment string=%s", params_string_value));
+ break;
+ case 3:
+ if (!part_elem || !part_elem->part_comment)
+ continue;
+ DBUG_PRINT("info", ("mroonga create part comment string"));
+ params_string_value = part_elem->part_comment;
+ params_string_length = strlen(params_string_value);
+ DBUG_PRINT("info",
+ ("mroonga part comment string=%s", params_string_value));
+ break;
+#endif
+ case 2:
+ if (LEX_STRING_IS_EMPTY(table->s->comment))
+ continue;
+ DBUG_PRINT("info", ("mroonga create comment string"));
+ params_string_value = table->s->comment.str;
+ params_string_length = table->s->comment.length;
+ DBUG_PRINT("info",
+ ("mroonga comment string=%.*s",
+ params_string_length, params_string_value));
+ break;
+ default:
+ if (LEX_STRING_IS_EMPTY(table->s->connect_string))
+ continue;
+ DBUG_PRINT("info", ("mroonga create connect_string string"));
+ params_string_value = table->s->connect_string.str;
+ params_string_length = table->s->connect_string.length;
+ DBUG_PRINT("info",
+ ("mroonga connect_string=%.*s",
+ params_string_length, params_string_value));
+ break;
+ }
+
+ if (!params_string_value) {
+ continue;
+ }
+
+ {
+ params_string = my_strndup(params_string_value,
+ params_string_length,
+ MYF(MY_WME));
+ if (!params_string) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+
+ sprit_ptr[0] = params_string;
+ while (sprit_ptr[0])
+ {
+ if ((sprit_ptr[1] = strchr(sprit_ptr[0], ',')))
+ {
+ sprit_ptr[1]++;
+ }
+ tmp_ptr = sprit_ptr[0];
+ sprit_ptr[0] = sprit_ptr[1];
+ while (*tmp_ptr == ' ' || *tmp_ptr == '\r' ||
+ *tmp_ptr == '\n' || *tmp_ptr == '\t')
+ tmp_ptr++;
+
+ if (*tmp_ptr == '\0')
+ continue;
+
+ DBUG_PRINT("info", ("mroonga title_str=%s", tmp_ptr));
+ title_length = 0;
+ start_ptr = tmp_ptr;
+ while (*start_ptr != ' ' && *start_ptr != '\'' &&
+ *start_ptr != '"' && *start_ptr != '\0' &&
+ *start_ptr != '\r' && *start_ptr != '\n' &&
+ *start_ptr != '\t' && *start_ptr != ',')
+ {
+ title_length++;
+ start_ptr++;
+ }
+ DBUG_PRINT("info", ("mroonga title_length=%u", title_length));
+
+ switch (title_length)
+ {
+ case 6:
+ MRN_PARAM_STR("engine", engine);
+ break;
+ case 10:
+ MRN_PARAM_STR("normalizer", normalizer);
+ break;
+ case 13:
+ MRN_PARAM_STR("token_filters", token_filters);
+ break;
+ case 17:
+ MRN_PARAM_STR("default_tokenizer", default_tokenizer);
+ break;
+ default:
+ break;
+ }
+ }
+
+ my_free(params_string, MYF(0));
+ params_string = NULL;
+ }
+ }
+
+ if (!share->engine && mrn_default_wrapper_engine)
+ {
+ share->engine_length = strlen(mrn_default_wrapper_engine);
+ if (
+ !(share->engine = my_strndup(mrn_default_wrapper_engine,
+ share->engine_length,
+ MYF(MY_WME)))
+ ) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ }
+
+ if (share->engine)
+ {
+ LEX_STRING engine_name;
+ if (
+ (
+ share->engine_length == MRN_DEFAULT_LEN &&
+ !strncasecmp(share->engine, MRN_DEFAULT_STR, MRN_DEFAULT_LEN)
+ ) ||
+ (
+ share->engine_length == MRN_GROONGA_LEN &&
+ !strncasecmp(share->engine, MRN_GROONGA_STR, MRN_GROONGA_LEN)
+ )
+ ) {
+ my_free(share->engine, MYF(0));
+ share->engine = NULL;
+ share->engine_length = 0;
+ } else {
+ engine_name.str = share->engine;
+ engine_name.length = share->engine_length;
+ if (!(share->plugin = MRN_HA_RESOLVE_BY_NAME(&engine_name)))
+ {
+ my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), share->engine);
+ error = ER_UNKNOWN_STORAGE_ENGINE;
+ goto error;
+ }
+ share->hton = plugin_data(share->plugin, handlerton *);
+ share->wrapper_mode = TRUE;
+ }
+ }
+
+error:
+ if (params_string)
+ my_free(params_string, MYF(0));
+ DBUG_RETURN(error);
+}
+
+bool mrn_is_geo_key(const KEY *key_info)
+{
+ return key_info->algorithm == HA_KEY_ALG_UNDEF &&
+ KEY_N_KEY_PARTS(key_info) == 1 &&
+ key_info->key_part[0].field->type() == MYSQL_TYPE_GEOMETRY;
+}
+
+int mrn_add_index_param(MRN_SHARE *share, KEY *key_info, int i)
+{
+ int error;
+ char *param_string = NULL;
+#if MYSQL_VERSION_ID >= 50500
+ int title_length;
+ char *sprit_ptr[2];
+ char *tmp_ptr, *start_ptr;
+#endif
+ MRN_DBUG_ENTER_FUNCTION();
+
+#if MYSQL_VERSION_ID >= 50500
+ if (key_info->comment.length == 0)
+ {
+ if (share->key_parser[i]) {
+ my_free(share->key_parser[i], MYF(0));
+ }
+ if (
+ !(share->key_parser[i] = my_strdup(mrn_default_parser, MYF(MY_WME)))
+ ) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ share->key_parser_length[i] = strlen(share->key_parser[i]);
+ DBUG_RETURN(0);
+ }
+ DBUG_PRINT("info", ("mroonga create comment string"));
+ if (
+ !(param_string = my_strndup(key_info->comment.str,
+ key_info->comment.length,
+ MYF(MY_WME)))
+ ) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_param_string;
+ }
+ DBUG_PRINT("info", ("mroonga comment string=%s", param_string));
+
+ sprit_ptr[0] = param_string;
+ while (sprit_ptr[0])
+ {
+ if ((sprit_ptr[1] = strchr(sprit_ptr[0], ',')))
+ {
+ *sprit_ptr[1] = '\0';
+ sprit_ptr[1]++;
+ }
+ tmp_ptr = sprit_ptr[0];
+ sprit_ptr[0] = sprit_ptr[1];
+ while (*tmp_ptr == ' ' || *tmp_ptr == '\r' ||
+ *tmp_ptr == '\n' || *tmp_ptr == '\t')
+ tmp_ptr++;
+
+ if (*tmp_ptr == '\0')
+ continue;
+
+ title_length = 0;
+ start_ptr = tmp_ptr;
+ while (*start_ptr != ' ' && *start_ptr != '\'' &&
+ *start_ptr != '"' && *start_ptr != '\0' &&
+ *start_ptr != '\r' && *start_ptr != '\n' &&
+ *start_ptr != '\t')
+ {
+ title_length++;
+ start_ptr++;
+ }
+
+ switch (title_length)
+ {
+ case 5:
+ MRN_PARAM_STR_LIST("table", index_table, i);
+ break;
+ case 6:
+ MRN_PARAM_STR_LIST("parser", key_parser, i);
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ if (!share->key_parser[i]) {
+ if (
+ !(share->key_parser[i] = my_strdup(mrn_default_parser, MYF(MY_WME)))
+ ) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error;
+ }
+ share->key_parser_length[i] = strlen(share->key_parser[i]);
+ }
+
+ if (param_string)
+ my_free(param_string, MYF(0));
+ DBUG_RETURN(0);
+
+error:
+ if (param_string)
+ my_free(param_string, MYF(0));
+#if MYSQL_VERSION_ID >= 50500
+error_alloc_param_string:
+#endif
+ DBUG_RETURN(error);
+}
+
+int mrn_parse_index_param(MRN_SHARE *share, TABLE *table)
+{
+ int error;
+ MRN_DBUG_ENTER_FUNCTION();
+ for (uint i = 0; i < table->s->keys; i++)
+ {
+ KEY *key_info = &table->s->key_info[i];
+ bool is_wrapper_mode = share->engine != NULL;
+
+ if (is_wrapper_mode) {
+ if (!(key_info->flags & HA_FULLTEXT) && !mrn_is_geo_key(key_info)) {
+ continue;
+ }
+ }
+
+ if ((error = mrn_add_index_param(share, key_info, i)))
+ goto error;
+ }
+ DBUG_RETURN(0);
+
+error:
+ DBUG_RETURN(error);
+}
+
+int mrn_add_column_param(MRN_SHARE *share, Field *field, int i)
+{
+ int error;
+ char *param_string = NULL;
+ int title_length;
+ char *sprit_ptr[2];
+ char *tmp_ptr, *start_ptr;
+
+ MRN_DBUG_ENTER_FUNCTION();
+
+ if (share->wrapper_mode) {
+ DBUG_RETURN(0);
+ }
+
+ DBUG_PRINT("info", ("mroonga create comment string"));
+ if (
+ !(param_string = my_strndup(field->comment.str,
+ field->comment.length,
+ MYF(MY_WME)))
+ ) {
+ error = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_param_string;
+ }
+ DBUG_PRINT("info", ("mroonga comment string=%s", param_string));
+
+ sprit_ptr[0] = param_string;
+ while (sprit_ptr[0])
+ {
+ if ((sprit_ptr[1] = strchr(sprit_ptr[0], ',')))
+ {
+ *sprit_ptr[1] = '\0';
+ sprit_ptr[1]++;
+ }
+ tmp_ptr = sprit_ptr[0];
+ sprit_ptr[0] = sprit_ptr[1];
+ while (*tmp_ptr == ' ' || *tmp_ptr == '\r' ||
+ *tmp_ptr == '\n' || *tmp_ptr == '\t')
+ tmp_ptr++;
+
+ if (*tmp_ptr == '\0')
+ continue;
+
+ title_length = 0;
+ start_ptr = tmp_ptr;
+ while (*start_ptr != ' ' && *start_ptr != '\'' &&
+ *start_ptr != '"' && *start_ptr != '\0' &&
+ *start_ptr != '\r' && *start_ptr != '\n' &&
+ *start_ptr != '\t')
+ {
+ title_length++;
+ start_ptr++;
+ }
+
+ switch (title_length)
+ {
+ case 4:
+ MRN_PARAM_STR_LIST("type", col_type, i);
+ break;
+ case 5:
+ MRN_PARAM_STR_LIST("flags", col_flags, i);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (param_string)
+ my_free(param_string, MYF(0));
+ DBUG_RETURN(0);
+
+error:
+ if (param_string)
+ my_free(param_string, MYF(0));
+error_alloc_param_string:
+ DBUG_RETURN(error);
+}
+
+int mrn_parse_column_param(MRN_SHARE *share, TABLE *table)
+{
+ int error;
+ MRN_DBUG_ENTER_FUNCTION();
+ for (uint i = 0; i < table->s->fields; i++)
+ {
+ Field *field = table->s->field[i];
+
+ if (LEX_STRING_IS_EMPTY(field->comment)) {
+ continue;
+ }
+
+ if ((error = mrn_add_column_param(share, field, i)))
+ goto error;
+ }
+ DBUG_RETURN(0);
+
+error:
+ DBUG_RETURN(error);
+}
+
+int mrn_free_share_alloc(
+ MRN_SHARE *share
+) {
+ uint i;
+ MRN_DBUG_ENTER_FUNCTION();
+ if (share->engine)
+ my_free(share->engine, MYF(0));
+ if (share->default_tokenizer)
+ my_free(share->default_tokenizer, MYF(0));
+ if (share->normalizer)
+ my_free(share->normalizer, MYF(0));
+ if (share->token_filters)
+ my_free(share->token_filters, MYF(0));
+ for (i = 0; i < share->table_share->keys; i++)
+ {
+ if (share->index_table && share->index_table[i])
+ my_free(share->index_table[i], MYF(0));
+ if (share->key_parser[i])
+ my_free(share->key_parser[i], MYF(0));
+ }
+ for (i = 0; i < share->table_share->fields; i++)
+ {
+ if (share->col_flags && share->col_flags[i])
+ my_free(share->col_flags[i], MYF(0));
+ if (share->col_type && share->col_type[i])
+ my_free(share->col_type[i], MYF(0));
+ }
+ DBUG_RETURN(0);
+}
+
+void mrn_free_long_term_share(MRN_LONG_TERM_SHARE *long_term_share)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ {
+ mrn::Lock lock(&mrn_long_term_share_mutex);
+ my_hash_delete(&mrn_long_term_share, (uchar*) long_term_share);
+ }
+ pthread_mutex_destroy(&long_term_share->auto_inc_mutex);
+ my_free(long_term_share, MYF(0));
+ DBUG_VOID_RETURN;
+}
+
+MRN_LONG_TERM_SHARE *mrn_get_long_term_share(const char *table_name,
+ uint table_name_length,
+ int *error)
+{
+ MRN_LONG_TERM_SHARE *long_term_share;
+ char *tmp_name;
+ MRN_DBUG_ENTER_FUNCTION();
+ DBUG_PRINT("info", ("mroonga: table_name=%s", table_name));
+ mrn::Lock lock(&mrn_long_term_share_mutex);
+ if (!(long_term_share = (MRN_LONG_TERM_SHARE*)
+ my_hash_search(&mrn_long_term_share, (uchar*) table_name,
+ table_name_length)))
+ {
+ if (!(long_term_share = (MRN_LONG_TERM_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &long_term_share, sizeof(*long_term_share),
+ &tmp_name, table_name_length + 1,
+ NullS))
+ ) {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_long_term_share;
+ }
+ long_term_share->table_name = tmp_name;
+ long_term_share->table_name_length = table_name_length;
+ memcpy(long_term_share->table_name, table_name, table_name_length);
+ if (pthread_mutex_init(&long_term_share->auto_inc_mutex,
+ MY_MUTEX_INIT_FAST))
+ {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_init_auto_inc_mutex;
+ }
+ if (my_hash_insert(&mrn_long_term_share, (uchar*) long_term_share))
+ {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_hash_insert;
+ }
+ }
+ DBUG_RETURN(long_term_share);
+
+error_hash_insert:
+ pthread_mutex_destroy(&long_term_share->auto_inc_mutex);
+error_init_auto_inc_mutex:
+ my_free(long_term_share, MYF(0));
+error_alloc_long_term_share:
+ DBUG_RETURN(NULL);
+}
+
+MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
+{
+ MRN_SHARE *share;
+ char *tmp_name, **index_table, **key_parser, **col_flags, **col_type;
+ uint length, *wrap_key_nr, *index_table_length;
+ uint *key_parser_length, *col_flags_length, *col_type_length, i, j;
+ KEY *wrap_key_info;
+ TABLE_SHARE *wrap_table_share;
+ MRN_DBUG_ENTER_FUNCTION();
+ length = (uint) strlen(table_name);
+ mrn::Lock lock(&mrn_open_tables_mutex);
+ if (!(share = (MRN_SHARE*) my_hash_search(&mrn_open_tables,
+ (uchar*) table_name, length)))
+ {
+ if (!(share = (MRN_SHARE *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &share, sizeof(*share),
+ &tmp_name, length + 1,
+ &index_table, sizeof(char *) * table->s->keys,
+ &index_table_length, sizeof(uint) * table->s->keys,
+ &key_parser, sizeof(char *) * table->s->keys,
+ &key_parser_length, sizeof(uint) * table->s->keys,
+ &col_flags, sizeof(char *) * table->s->fields,
+ &col_flags_length, sizeof(uint) * table->s->fields,
+ &col_type, sizeof(char *) * table->s->fields,
+ &col_type_length, sizeof(uint) * table->s->fields,
+ &wrap_key_nr, sizeof(*wrap_key_nr) * table->s->keys,
+ &wrap_key_info, sizeof(*wrap_key_info) * table->s->keys,
+ &wrap_table_share, sizeof(*wrap_table_share),
+ NullS))
+ ) {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_alloc_share;
+ }
+ share->use_count = 0;
+ share->table_name_length = length;
+ share->table_name = tmp_name;
+ share->index_table = index_table;
+ share->index_table_length = index_table_length;
+ share->key_parser = key_parser;
+ share->key_parser_length = key_parser_length;
+ share->col_flags = col_flags;
+ share->col_flags_length = col_flags_length;
+ share->col_type = col_type;
+ share->col_type_length = col_type_length;
+ strmov(share->table_name, table_name);
+ share->table_share = table->s;
+
+ if (
+ (*error = mrn_parse_table_param(share, table)) ||
+ (*error = mrn_parse_column_param(share, table)) ||
+ (*error = mrn_parse_index_param(share, table))
+ )
+ goto error_parse_table_param;
+
+ if (share->wrapper_mode)
+ {
+ j = 0;
+ for (i = 0; i < table->s->keys; i++)
+ {
+ if (table->s->key_info[i].algorithm != HA_KEY_ALG_FULLTEXT &&
+ !mrn_is_geo_key(&table->s->key_info[i]))
+ {
+ wrap_key_nr[i] = j;
+ memcpy(&wrap_key_info[j], &table->s->key_info[i],
+ sizeof(*wrap_key_info));
+ j++;
+ } else {
+ wrap_key_nr[i] = MAX_KEY;
+ }
+ }
+ share->wrap_keys = j;
+ share->base_keys = table->s->keys;
+ share->base_key_info = table->s->key_info;
+ share->base_primary_key = table->s->primary_key;
+ if (i)
+ {
+ share->wrap_key_nr = wrap_key_nr;
+ share->wrap_key_info = wrap_key_info;
+ if (table->s->primary_key == MAX_KEY)
+ share->wrap_primary_key = MAX_KEY;
+ else
+ share->wrap_primary_key = wrap_key_nr[table->s->primary_key];
+ } else {
+ share->wrap_key_nr = NULL;
+ share->wrap_key_info = NULL;
+ share->wrap_primary_key = MAX_KEY;
+ }
+ memcpy(wrap_table_share, table->s, sizeof(*wrap_table_share));
+ wrap_table_share->keys = share->wrap_keys;
+ wrap_table_share->key_info = share->wrap_key_info;
+ wrap_table_share->primary_key = share->wrap_primary_key;
+ wrap_table_share->keys_in_use.init(share->wrap_keys);
+ wrap_table_share->keys_for_keyread.init(share->wrap_keys);
+#ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+# ifdef WIN32
+ mysql_mutex_init(*mrn_table_share_lock_share,
+ &(wrap_table_share->LOCK_share), MY_MUTEX_INIT_SLOW);
+# else
+ mysql_mutex_init(key_TABLE_SHARE_LOCK_share,
+ &(wrap_table_share->LOCK_share), MY_MUTEX_INIT_SLOW);
+# endif
+#endif
+#ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+# ifdef WIN32
+ mysql_mutex_init(*mrn_table_share_lock_ha_data,
+ &(wrap_table_share->LOCK_ha_data), MY_MUTEX_INIT_FAST);
+# else
+ mysql_mutex_init(key_TABLE_SHARE_LOCK_ha_data,
+ &(wrap_table_share->LOCK_ha_data), MY_MUTEX_INIT_FAST);
+# endif
+#endif
+ share->wrap_table_share = wrap_table_share;
+ }
+
+ if (pthread_mutex_init(&share->mutex, MY_MUTEX_INIT_FAST))
+ {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_init_mutex;
+ }
+ thr_lock_init(&share->lock);
+ if (!(share->long_term_share = mrn_get_long_term_share(table_name, length,
+ error)))
+ {
+ goto error_get_long_term_share;
+ }
+ if (my_hash_insert(&mrn_open_tables, (uchar*) share))
+ {
+ *error = HA_ERR_OUT_OF_MEM;
+ goto error_hash_insert;
+ }
+ }
+ share->use_count++;
+ DBUG_RETURN(share);
+
+error_hash_insert:
+error_get_long_term_share:
+ pthread_mutex_destroy(&share->mutex);
+error_init_mutex:
+error_parse_table_param:
+ mrn_free_share_alloc(share);
+ my_free(share, MYF(0));
+error_alloc_share:
+ DBUG_RETURN(NULL);
+}
+
+int mrn_free_share(MRN_SHARE *share)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ mrn::Lock lock(&mrn_open_tables_mutex);
+ if (!--share->use_count)
+ {
+ my_hash_delete(&mrn_open_tables, (uchar*) share);
+ if (share->wrapper_mode)
+ plugin_unlock(NULL, share->plugin);
+ mrn_free_share_alloc(share);
+ thr_lock_delete(&share->lock);
+ pthread_mutex_destroy(&share->mutex);
+ if (share->wrapper_mode) {
+#ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
+ mysql_mutex_destroy(&(share->wrap_table_share->LOCK_share));
+#endif
+#ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
+ mysql_mutex_destroy(&(share->wrap_table_share->LOCK_ha_data));
+#endif
+ }
+ my_free(share, MYF(0));
+ }
+ DBUG_RETURN(0);
+}
+
+TABLE_SHARE *mrn_get_table_share(TABLE_LIST *table_list, int *error)
+{
+ uint key_length;
+ TABLE_SHARE *share;
+ THD *thd = current_thd;
+ MRN_DBUG_ENTER_FUNCTION();
+#ifdef MRN_HAVE_GET_TABLE_DEF_KEY
+ const char *key;
+ key_length = get_table_def_key(table_list, &key);
+#else
+ char key[MAX_DBKEY_LENGTH];
+ key_length = create_table_def_key(thd, key, table_list, FALSE);
+#endif
+#ifdef MRN_HAVE_TABLE_DEF_CACHE
+ my_hash_value_type hash_value;
+ hash_value = my_calc_hash(mrn_table_def_cache, (uchar*) key, key_length);
+ share = get_table_share(thd, table_list, key, key_length, 0, error,
+ hash_value);
+#elif defined(MRN_HAVE_TDC_ACQUIRE_SHARE)
+ share = tdc_acquire_share(thd, table_list->db, table_list->table_name, key,
+ key_length,
+ table_list->mdl_request.key.tc_hash_value(),
+ GTS_TABLE, NULL);
+#else
+ share = get_table_share(thd, table_list, key, key_length, 0, error);
+#endif
+ DBUG_RETURN(share);
+}
+
+TABLE_SHARE *mrn_create_tmp_table_share(TABLE_LIST *table_list, const char *path,
+ int *error)
+{
+ uint key_length;
+ TABLE_SHARE *share;
+ THD *thd = current_thd;
+
+ MRN_DBUG_ENTER_FUNCTION();
+#ifdef MRN_HAVE_GET_TABLE_DEF_KEY
+ const char *key;
+ key_length = get_table_def_key(table_list, &key);
+#else
+ char key[MAX_DBKEY_LENGTH];
+ key_length = create_table_def_key(thd, key, table_list, FALSE);
+#endif
+#if MYSQL_VERSION_ID >= 100002 && defined(MRN_MARIADB_P)
+ share = alloc_table_share(table_list->db, table_list->table_name, key,
+ key_length);
+#else
+ share = alloc_table_share(table_list, key, key_length);
+#endif
+ if (!share)
+ {
+ *error = ER_CANT_OPEN_FILE;
+ DBUG_RETURN(NULL);
+ }
+ share->tmp_table = INTERNAL_TMP_TABLE; // TODO: is this right?
+ share->path.str = (char *) path;
+ share->path.length = strlen(path);
+ share->normalized_path.str = share->path.str;
+ share->normalized_path.length = share->path.length;
+ if (open_table_def(thd, share, GTS_TABLE))
+ {
+ *error = ER_CANT_OPEN_FILE;
+ DBUG_RETURN(NULL);
+ }
+ DBUG_RETURN(share);
+}
+
+void mrn_free_tmp_table_share(TABLE_SHARE *tmp_table_share)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ free_table_share(tmp_table_share);
+ DBUG_VOID_RETURN;
+}
+
+KEY *mrn_create_key_info_for_table(MRN_SHARE *share, TABLE *table, int *error)
+{
+ uint *wrap_key_nr = share->wrap_key_nr, i, j;
+ KEY *wrap_key_info;
+ MRN_DBUG_ENTER_FUNCTION();
+ if (share->wrap_keys)
+ {
+ if (!(wrap_key_info = (KEY *)
+ my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
+ &wrap_key_info, sizeof(*wrap_key_info) * share->wrap_keys,
+ NullS))
+ ) {
+ *error = HA_ERR_OUT_OF_MEM;
+ DBUG_RETURN(NULL);
+ }
+ for (i = 0; i < table->s->keys; i++)
+ {
+ j = wrap_key_nr[i];
+ if (j < MAX_KEY)
+ {
+ memcpy(&wrap_key_info[j], &table->key_info[i],
+ sizeof(*wrap_key_info));
+ }
+ }
+ } else
+ wrap_key_info = NULL;
+ *error = 0;
+ DBUG_RETURN(wrap_key_info);
+}
+
+void mrn_set_bitmap_by_key(MY_BITMAP *map, KEY *key_info)
+{
+ uint i;
+ MRN_DBUG_ENTER_FUNCTION();
+ for (i = 0; i < KEY_N_KEY_PARTS(key_info); i++)
+ {
+ Field *field = key_info->key_part[i].field;
+ bitmap_set_bit(map, field->field_index);
+ }
+ DBUG_VOID_RETURN;
+}
+
+st_mrn_slot_data *mrn_get_slot_data(THD *thd, bool can_create)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_slot_data *slot_data =
+ (st_mrn_slot_data*) *thd_ha_data(thd, mrn_hton_ptr);
+ if (slot_data == NULL) {
+ slot_data = (st_mrn_slot_data*) malloc(sizeof(st_mrn_slot_data));
+ slot_data->last_insert_record_id = GRN_ID_NIL;
+ slot_data->first_alter_share = NULL;
+ slot_data->alter_create_info = NULL;
+ slot_data->disable_keys_create_info = NULL;
+ slot_data->alter_connect_string = NULL;
+ slot_data->alter_comment = NULL;
+ *thd_ha_data(thd, mrn_hton_ptr) = (void *) slot_data;
+ {
+ mrn::Lock lock(&mrn_allocated_thds_mutex);
+ if (my_hash_insert(&mrn_allocated_thds, (uchar*) thd))
+ {
+ free(slot_data);
+ DBUG_RETURN(NULL);
+ }
+ }
+ }
+ DBUG_RETURN(slot_data);
+}
+
+void mrn_clear_alter_share(THD *thd)
+{
+ MRN_DBUG_ENTER_FUNCTION();
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, FALSE);
+ if (slot_data) {
+ if (slot_data->first_alter_share) {
+ st_mrn_alter_share *tmp_alter_share;
+ st_mrn_alter_share *alter_share = slot_data->first_alter_share;
+ while (alter_share)
+ {
+ tmp_alter_share = alter_share->next;
+ mrn_free_tmp_table_share(alter_share->alter_share);
+ free(alter_share);
+ alter_share = tmp_alter_share;
+ }
+ slot_data->first_alter_share = NULL;
+ }
+ slot_data->alter_create_info = NULL;
+ slot_data->disable_keys_create_info = NULL;
+ if (slot_data->alter_connect_string) {
+ my_free(slot_data->alter_connect_string, MYF(0));
+ slot_data->alter_connect_string = NULL;
+ }
+ if (slot_data->alter_comment) {
+ my_free(slot_data->alter_comment, MYF(0));
+ slot_data->alter_comment = NULL;
+ }
+ }
+ DBUG_VOID_RETURN;
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/storage/mroonga/mrn_table.hpp b/storage/mroonga/mrn_table.hpp
new file mode 100644
index 00000000000..813e69e1023
--- /dev/null
+++ b/storage/mroonga/mrn_table.hpp
@@ -0,0 +1,176 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2011-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_TABLE_HPP_
+#define MRN_TABLE_HPP_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <groonga.h>
+
+typedef struct st_mroonga_long_term_share
+{
+ char *table_name;
+ uint table_name_length;
+
+ // for auto_increment (storage mode only)
+ pthread_mutex_t auto_inc_mutex;
+ bool auto_inc_inited;
+ ulonglong auto_inc_value;
+} MRN_LONG_TERM_SHARE;
+
+typedef struct st_mroonga_share
+{
+ char *table_name;
+ uint table_name_length;
+ uint use_count;
+ pthread_mutex_t mutex;
+ THR_LOCK lock;
+ TABLE_SHARE *table_share;
+ TABLE_SHARE *wrap_table_share;
+ MRN_LONG_TERM_SHARE *long_term_share;
+
+ char *engine;
+ int engine_length;
+ char *default_tokenizer;
+ int default_tokenizer_length;
+ char *normalizer;
+ int normalizer_length;
+ char *token_filters;
+ int token_filters_length;
+ plugin_ref plugin;
+ handlerton *hton;
+ char **index_table;
+ char **key_parser;
+ char **col_flags;
+ char **col_type;
+ uint *index_table_length;
+ uint *key_parser_length;
+ uint *col_flags_length;
+ uint *col_type_length;
+ uint *wrap_key_nr;
+ uint wrap_keys;
+ uint base_keys;
+ KEY *wrap_key_info;
+ KEY *base_key_info;
+ uint wrap_primary_key;
+ uint base_primary_key;
+ bool wrapper_mode;
+ bool disable_keys;
+} MRN_SHARE;
+
+struct st_mrn_alter_share
+{
+ char path[FN_REFLEN + 1];
+ TABLE_SHARE *alter_share;
+ st_mrn_alter_share *next;
+};
+
+struct st_mrn_slot_data
+{
+ grn_id last_insert_record_id;
+ st_mrn_alter_share *first_alter_share;
+ HA_CREATE_INFO *alter_create_info;
+ HA_CREATE_INFO *disable_keys_create_info;
+ char *alter_connect_string;
+ char *alter_comment;
+};
+
+#define MRN_SET_WRAP_ALTER_KEY(file, ha_alter_info) \
+ Alter_inplace_info::HA_ALTER_FLAGS base_handler_flags = ha_alter_info->handler_flags; \
+ KEY *base_key_info_buffer = ha_alter_info->key_info_buffer; \
+ uint base_key_count = ha_alter_info->key_count; \
+ uint base_index_drop_count = ha_alter_info->index_drop_count; \
+ KEY **base_index_drop_buffer = ha_alter_info->index_drop_buffer; \
+ uint base_index_add_count = ha_alter_info->index_add_count; \
+ uint *base_index_add_buffer = ha_alter_info->index_add_buffer; \
+ ha_alter_info->handler_flags = file->alter_handler_flags; \
+ ha_alter_info->key_info_buffer = file->alter_key_info_buffer; \
+ ha_alter_info->key_count = file->alter_key_count; \
+ ha_alter_info->index_drop_count = file->alter_index_drop_count; \
+ ha_alter_info->index_drop_buffer = &file->alter_index_drop_buffer; \
+ ha_alter_info->index_add_count = file->alter_index_add_count; \
+ ha_alter_info->index_add_buffer = file->alter_index_add_buffer;
+
+#define MRN_SET_BASE_ALTER_KEY(share, table_share) \
+ ha_alter_info->handler_flags = base_handler_flags; \
+ ha_alter_info->key_info_buffer = base_key_info_buffer; \
+ ha_alter_info->key_count = base_key_count; \
+ ha_alter_info->index_drop_count = base_index_drop_count; \
+ ha_alter_info->index_drop_buffer = base_index_drop_buffer; \
+ ha_alter_info->index_add_count = base_index_add_count; \
+ ha_alter_info->index_add_buffer = base_index_add_buffer;
+
+#define MRN_SET_WRAP_SHARE_KEY(share, table_share)
+/*
+ table_share->keys = share->wrap_keys; \
+ table_share->key_info = share->wrap_key_info; \
+ table_share->primary_key = share->wrap_primary_key;
+*/
+
+#define MRN_SET_BASE_SHARE_KEY(share, table_share)
+/*
+ table_share->keys = share->base_keys; \
+ table_share->key_info = share->base_key_info; \
+ table_share->primary_key = share->base_primary_key;
+*/
+
+#define MRN_SET_WRAP_TABLE_KEY(file, table) \
+ table->key_info = file->wrap_key_info; \
+ table->s = share->wrap_table_share;
+
+#define MRN_SET_BASE_TABLE_KEY(file, table) \
+ table->key_info = file->base_key_info; \
+ table->s = share->table_share;
+
+#ifdef WITH_PARTITION_STORAGE_ENGINE
+void mrn_get_partition_info(const char *table_name, uint table_name_length,
+ const TABLE *table, partition_element **part_elem,
+ partition_element **sub_elem);
+#endif
+int mrn_parse_table_param(MRN_SHARE *share, TABLE *table);
+bool mrn_is_geo_key(const KEY *key_info);
+int mrn_add_index_param(MRN_SHARE *share, KEY *key_info, int i);
+int mrn_parse_index_param(MRN_SHARE *share, TABLE *table);
+int mrn_add_column_param(MRN_SHARE *share, Field *field, int i);
+int mrn_parse_column_param(MRN_SHARE *share, TABLE *table);
+MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error);
+int mrn_free_share_alloc(MRN_SHARE *share);
+int mrn_free_share(MRN_SHARE *share);
+MRN_LONG_TERM_SHARE *mrn_get_long_term_share(const char *table_name,
+ uint table_name_length,
+ int *error);
+void mrn_free_long_term_share(MRN_LONG_TERM_SHARE *long_term_share);
+TABLE_SHARE *mrn_get_table_share(TABLE_LIST *table_list, int *error);
+TABLE_SHARE *mrn_create_tmp_table_share(TABLE_LIST *table_list, const char *path,
+ int *error);
+void mrn_free_tmp_table_share(TABLE_SHARE *table_share);
+KEY *mrn_create_key_info_for_table(MRN_SHARE *share, TABLE *table, int *error);
+void mrn_set_bitmap_by_key(MY_BITMAP *map, KEY *key_info);
+st_mrn_slot_data *mrn_get_slot_data(THD *thd, bool can_create);
+void mrn_clear_alter_share(THD *thd);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MRN_TABLE_HPP_ */
diff --git a/storage/mroonga/mrn_version.h.in b/storage/mroonga/mrn_version.h.in
new file mode 100644
index 00000000000..dfa0e2dffd5
--- /dev/null
+++ b/storage/mroonga/mrn_version.h.in
@@ -0,0 +1,40 @@
+/*
+ Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef MRN_VERSION_H_
+#define MRN_VERSION_H_
+
+/* Define mroonga version in string */
+#define MRN_VERSION "@MRN_VERSION@"
+
+/* Define mroonga version in hex */
+#define MRN_VERSION_IN_HEX @MRN_VERSION_IN_HEX@
+
+/* Define mroonga major version */
+#define MRN_VERSION_MAJOR @MRN_VERSION_MAJOR@
+
+/* Define mroonga minor version */
+#define MRN_VERSION_MINOR @MRN_VERSION_MINOR@
+
+/* Define mroonga micro version */
+#define MRN_VERSION_MICRO @MRN_VERSION_MICRO@
+
+/* Define to the full name and version of this package. */
+#define MRN_PACKAGE_STRING "@MRN_PACKAGE_STRING@"
+
+#endif /* MRN_VERSION_H_ */
diff --git a/storage/mroonga/mysql-test/Makefile.am b/storage/mroonga/mysql-test/Makefile.am
new file mode 100644
index 00000000000..9ea677b579a
--- /dev/null
+++ b/storage/mroonga/mysql-test/Makefile.am
@@ -0,0 +1,8 @@
+dist-hook:
+ if [ -n "`find mroonga -name '*.reject'`" ]; then \
+ echo "reject files exist"; \
+ exit 1; \
+ fi
+
+EXTRA_DIST = \
+ mroonga
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc
new file mode 100644
index 00000000000..89700a87cff
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_freebsd.inc
@@ -0,0 +1,19 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+let $VERSION_COMPILE_OS_FREEBSD=`SELECT IF(@@version_compile_os like 'FREEBSD%', 1, 0);`;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc
new file mode 100644
index 00000000000..94cf42dd5ab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_ha_mroonga_so.inc
@@ -0,0 +1,26 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_windows.inc
+
+--disable_query_log
+if ($VERSION_COMPILE_OS_WIN) {
+ let ha_mroonga_so='ha_mroonga.dll';
+}
+if (!$VERSION_COMPILE_OS_WIN) {
+ let ha_mroonga_so='ha_mroonga.so';
+}
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc
new file mode 100644
index 00000000000..13b2f3439e1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_mariadb.inc
@@ -0,0 +1,19 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+let $mariadb = `SELECT LOCATE('MariaDB', @@global.version) > 0`;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc
new file mode 100644
index 00000000000..8b8387a74fb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_osx.inc
@@ -0,0 +1,19 @@
+# Copyright(C) 2014 Toshihisa Tashiro
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+let $VERSION_COMPILE_OS_OSX=`SELECT IF(@@version_compile_os like 'osx%', 1, 0);`;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc
new file mode 100644
index 00000000000..b59a981d822
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_version.inc
@@ -0,0 +1,28 @@
+# Copyright(C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+let $version_major_minor =
+ `SELECT CAST(SUBSTRING_INDEX(@@global.version, '.', 2) AS DECIMAL(4, 2))`;
+
+let $version_55 = `SELECT $version_major_minor = 5.5`;
+let $version_56 = `SELECT $version_major_minor = 5.6`;
+let $version_100 = `SELECT $version_major_minor = 10.0`;
+
+let $version_55_or_later = `SELECT $version_major_minor >= 5.5`;
+let $version_56_or_later = `SELECT $version_major_minor >= 5.6`;
+let $version_100_or_later = `SELECT $version_major_minor >= 10.0`;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc
new file mode 100644
index 00000000000..21e61000a06
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/check_windows.inc
@@ -0,0 +1,20 @@
+# Copyright(C) 2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+let $VERSION_COMPILE_OS_WIN=`SELECT IF(@@version_compile_os like 'Win%', 1, 0)`;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc
new file mode 100644
index 00000000000..41ab6bf4899
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_32bit.inc
@@ -0,0 +1,28 @@
+# Copyright(C) 2013 Kentoku SHIBA
+# Copyright(C) 2014 Toshihisa Tashiro
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_osx.inc
+
+disable_query_log;
+disable_warnings;
+let $VERSION_COMPILE_64BIT=
+ `SELECT IF(@@version_compile_machine like '%64%', 1, 0)`;
+enable_warnings;
+enable_query_log;
+if ($VERSION_COMPILE_64BIT) {
+ skip Need a 32 bit machine/binary;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc
new file mode 100644
index 00000000000..3774de2f479
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_64bit.inc
@@ -0,0 +1,25 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+disable_query_log;
+disable_warnings;
+let $VERSION_COMPILE_64BIT=
+ `SELECT IF(@@version_compile_machine like '%64%', 1, 0)`;
+enable_warnings;
+enable_query_log;
+if (!$VERSION_COMPILE_64BIT) {
+ skip Need a 64 binary;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc
new file mode 100644
index 00000000000..c4764b83c8a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fractional_seconds.inc
@@ -0,0 +1,32 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_mariadb.inc
+--source ../../include/mroonga/check_version.inc
+
+if ($mariadb) {
+ let $fractional_seconds = 1;
+}
+
+if (!$mariadb) {
+ if ($version_56) {
+ let $fractional_seconds = `SELECT @@global.version >= '5.6'`;
+ }
+}
+
+if (!$fractional_seconds) {
+ skip fractional seconds in time values are available in MySQL version 5.6 or later or MariaDB;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc
new file mode 100644
index 00000000000..dfe198ca9ba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_freebsd.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_freebsd.inc
+
+if (!$VERSION_COMPILE_OS_FREEBSD) {
+ skip Need OS FreeBSD;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fulltext_index_comment.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fulltext_index_comment.inc
new file mode 100644
index 00000000000..e8c79936cc6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_fulltext_index_comment.inc
@@ -0,0 +1,25 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if ($version_55_or_later) {
+ let $fulltext_index_comment = 1;
+}
+
+if (!$fulltext_index_comment) {
+ skip Fulltext index comment is available in version 5.5 or later;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc
new file mode 100644
index 00000000000..2ebec2df8c4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga.inc
@@ -0,0 +1,44 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2013-2014 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_ha_mroonga_so.inc
+
+disable_query_log;
+
+let have_mroonga_storage_engine=`SELECT 1 FROM information_schema.plugins WHERE plugin_name = "mroonga"`;
+if (!$have_mroonga_storage_engine) {
+ eval INSTALL PLUGIN mroonga SONAME $ha_mroonga_so;
+ eval INSTALL PLUGIN mroonga_stats SONAME $ha_mroonga_so;
+}
+
+let have_default_storage_engine_variable=`SELECT 1 FROM information_schema.global_variables WHERE variable_name = "default_storage_engine"`;
+if ($have_default_storage_engine_variable) {
+ let original_default_storage_engine=`SELECT variable_value FROM information_schema.global_variables WHERE variable_name = "default_storage_engine"`;
+ set default_storage_engine=Mroonga;
+}
+if (!$have_default_storage_engine_variable) {
+ let original_storage_engine=`SELECT variable_value FROM information_schema.global_variables WHERE variable_name = "storage_engine"`;
+ set storage_engine=Mroonga;
+}
+
+let have_default_tmp_storage_engine_variable=`SELECT 1 FROM information_schema.global_variables WHERE variable_name = "default_tmp_storage_engine"`;
+if ($have_default_tmp_storage_engine_variable) {
+ let original_default_tmp_storage_engine=`SELECT variable_value FROM information_schema.global_variables WHERE variable_name = "default_tmp_storage_engine"`;
+ set default_tmp_storage_engine=Mroonga;
+}
+
+enable_query_log;
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc
new file mode 100644
index 00000000000..0b6b7081d00
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_deinit.inc
@@ -0,0 +1,36 @@
+# Copyright(C) 2010-2014 Kentoku SHIBA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+disable_query_log;
+
+if ($have_default_storage_engine_variable) {
+ eval set default_storage_engine=$original_default_storage_engine;
+}
+if (!$have_default_storage_engine_variable) {
+ eval set storage_engine=$original_storage_engine;
+}
+
+if ($have_default_tmp_storage_engine_variable) {
+ eval set default_tmp_storage_engine=$original_default_tmp_storage_engine;
+}
+
+if (!$have_mroonga_storage_engine) {
+ UNINSTALL PLUGIN mroonga_stats;
+ UNINSTALL PLUGIN mroonga;
+}
+
+enable_query_log;
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc
new file mode 100644
index 00000000000..1a7ec750288
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mroonga_helper.inc
@@ -0,0 +1,17 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+let $MYSQLD_DATADIR= `select @@datadir`;
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc
new file mode 100644
index 00000000000..d054f0a9afd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_mysql.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_mariadb.inc
+
+if ($mariadb) {
+ skip This test is for MySQL;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc
new file mode 100644
index 00000000000..5643d8c8c2d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if (!$version_100) {
+ skip This test is for MariaDB version 10.0.x;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc
new file mode 100644
index 00000000000..9c9faa00ea2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_100_or_later.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if (!$version_100_or_later) {
+ skip This test is for MariaDB version 10.0.x or later;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc
new file mode 100644
index 00000000000..b34f7876ed8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_55.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if (!$version_55) {
+ skip This test is for MySQL version 5.5.x;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc
new file mode 100644
index 00000000000..4ecff3e4466
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if (!$version_56) {
+ skip This test is for MySQL version 5.6.x;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc
new file mode 100644
index 00000000000..ef166fcf590
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/have_version_56_or_later.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+
+if (!$version_56_or_later) {
+ skip This test is for MySQL version 5.6.x or later;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc
new file mode 100644
index 00000000000..6df4e88ffc8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/load_mroonga_functions.inc
@@ -0,0 +1,24 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_ha_mroonga_so.inc
+
+--disable_query_log
+eval CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME $ha_mroonga_so;
+eval CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME $ha_mroonga_so;
+eval CREATE FUNCTION mroonga_command RETURNS STRING SONAME $ha_mroonga_so;
+eval CREATE FUNCTION mroonga_escape RETURNS STRING SONAME $ha_mroonga_so;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc
new file mode 100644
index 00000000000..0c48adfee92
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_freebsd.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_freebsd.inc
+
+if ($VERSION_COMPILE_OS_FREEBSD) {
+ skip This test is not for FreeBSD;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc
new file mode 100644
index 00000000000..8b46d606eec
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mariadb_55.inc
@@ -0,0 +1,24 @@
+# Copyright(C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+--source ../../include/mroonga/check_mariadb.inc
+
+if ($version_55) {
+ if ($mariadb) {
+ skip This test is not for MariaDB 5.5.x;
+ }
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc
new file mode 100644
index 00000000000..86bb34ff86d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_mysql_55.inc
@@ -0,0 +1,24 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_version.inc
+--source ../../include/mroonga/check_mariadb.inc
+
+if ($version_55) {
+ if (!$mariadb) {
+ skip This test is not for MySQL 5.5.x;
+ }
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc
new file mode 100644
index 00000000000..a8f4409f7e7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/skip_osx.inc
@@ -0,0 +1,21 @@
+# Copyright(C) 2014 Toshihisa Tashiro
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/check_osx.inc
+
+if ($VERSION_COMPILE_OS_OSX) {
+ skip This test is not for OSX;
+}
diff --git a/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc b/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc
new file mode 100644
index 00000000000..881aa47c629
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/include/mroonga/unload_mroonga_functions.inc
@@ -0,0 +1,22 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--disable_query_log
+DROP FUNCTION last_insert_grn_id;
+DROP FUNCTION mroonga_snippet;
+DROP FUNCTION mroonga_command;
+DROP FUNCTION mroonga_escape;
+--enable_query_log
diff --git a/storage/mroonga/mysql-test/mroonga/storage/disabled.def b/storage/mroonga/mysql-test/mroonga/storage/disabled.def
new file mode 100644
index 00000000000..3f546dad2a4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/disabled.def
@@ -0,0 +1,9 @@
+alter_table_add_index_token_filters_one_token_filter : Bundled Mroonga does not support token filter yet.
+alter_table_change_token_filter : Bundled Mroonga does not support token filter yet.
+fulltext_token_filters_skip : Bundled Mroonga does not support token filter yet.
+create_table_token_filters_index_comment_multiple_token_filters : Bundled Mroonga does not support token filter yet.
+create_table_token_filters_index_comment_one_token_filter : Bundled Mroonga does not support token filter yet.
+create_table_token_filters_table_comment_multiple_token_filters : Bundled Mroonga does not support token filter yet.
+create_table_token_filters_table_comment_one_token_filter : Bundled Mroonga does not support token filter yet.
+foreign_key_create : Bundled Mroonga does not support this test yet.
+
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result
new file mode 100644
index 00000000000..52a72155af3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_after.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries ADD title TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id title body
+1 groonga (1) starting groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result
new file mode 100644
index 00000000000..81feeefc589
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_first.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries ADD title TEXT FIRST;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `title` text,
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+title id body
+groonga (1) 1 starting groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result
new file mode 100644
index 00000000000..bb157539ac9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_multiple.result
@@ -0,0 +1,44 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+id title
+1 survey
+ALTER TABLE diaries
+ADD COLUMN body TEXT FIRST,
+ADD COLUMN published BOOLEAN AFTER id,
+ADD COLUMN created_at DATETIME;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+body id published title created_at
+will start groonga! 1 0 survey 1970-01-01 00:00:00
+INSERT INTO diaries (title, body, published, created_at)
+VALUES ("groonga (1)", "starting groonga...", TRUE, "2014-2-9 02:09:00");
+INSERT INTO diaries (title, body, published, created_at)
+VALUES ("groonga (2)", "started groonga.", FALSE, "2014-2-9 12:19:00");
+SELECT * FROM diaries;
+body id published title created_at
+will start groonga! 1 0 survey 1970-01-01 00:00:00
+starting groonga... 2 1 groonga (1) 2014-02-09 02:09:00
+started groonga. 3 0 groonga (2) 2014-02-09 12:19:00
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `body` text,
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `published` tinyint(1) DEFAULT NULL,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result
new file mode 100644
index 00000000000..df5a15568d8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_plain.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+id title
+1 survey
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_flags.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_flags.result
new file mode 100644
index 00000000000..1bc15c6efe2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_flags.result
@@ -0,0 +1,10 @@
+CREATE TABLE tags (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+ALTER TABLE tags ADD COLUMN name VARCHAR(64) COMMENT 'flags "COLUMN_VECTOR"';
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create tags TABLE_PAT_KEY UInt32
+column_create tags id COLUMN_SCALAR UInt32
+column_create tags name COLUMN_VECTOR ShortText
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_type.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_type.result
new file mode 100644
index 00000000000..6ff92ec8e99
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_column_with_type.result
@@ -0,0 +1,16 @@
+CREATE TABLE tags (
+id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'type "tags"';
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create tags TABLE_PAT_KEY UInt32
+column_create tags id COLUMN_SCALAR UInt32
+table_create bugs TABLE_PAT_KEY UInt32
+column_create bugs id COLUMN_SCALAR UInt32
+column_create bugs name COLUMN_SCALAR tags
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result
new file mode 100644
index 00000000000..e0449e3e54b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_token_filters_one_token_filter.result
@@ -0,0 +1,19 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+SET NAMES utf8;
+CREATE TABLE memos (
+content VARCHAR(64) NOT NULL
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_NO_KEY
+column_create memos content COLUMN_SCALAR ShortText
+ALTER TABLE memos ADD FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"';
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_NO_KEY
+column_create memos content COLUMN_SCALAR ShortText
+table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord
+column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_unique_duplicated.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_unique_duplicated.result
new file mode 100644
index 00000000000..8b8b2efbc44
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_index_unique_duplicated.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT
+) DEFAULT CHARSET UTF8;
+INSERT INTO ids (id) values (1), (1);
+ALTER TABLE ids ADD UNIQUE INDEX (id);
+ERROR 23000: Can't write, because of unique constraint, to table 'ids'
+SHOW CREATE TABLE ids;
+Table Create Table
+ids CREATE TABLE `ids` (
+ `id` int(11) DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+SELECT * FROM ids;
+id
+1
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_key_multiple_column_with_data.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_key_multiple_column_with_data.result
new file mode 100644
index 00000000000..73fb6a7abe3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_add_key_multiple_column_with_data.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS scores;
+SET NAMES UTF8;
+CREATE TABLE scores (
+id BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
+name CHAR(30) NOT NULL,
+score INT NOT NULL
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores
+WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+ALTER TABLE scores ADD KEY property (name, score);
+SELECT * FROM scores
+WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_comment_not_for_mroonga.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_comment_not_for_mroonga.result
new file mode 100644
index 00000000000..a993756ad62
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_comment_not_for_mroonga.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE bugs
+CHANGE COLUMN
+tag
+tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ `tag` varchar(64) DEFAULT NULL COMMENT 'It must consist of only alphabet and number.',
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_have_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_have_index.result
new file mode 100644
index 00000000000..c51c10b6da3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_have_index.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+title VARCHAR(32),
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE bugs CHANGE COLUMN title title VARCHAR(64);
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `title` varchar(64) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result
new file mode 100644
index 00000000000..19d5d017fb2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_after.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries CHANGE body description TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `description` text,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id description title
+1 starting groonga. groonga (1)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result
new file mode 100644
index 00000000000..cf2bcc0fc2c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_first.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries CHANGE body description TEXT FIRST;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `description` text,
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+description id title
+starting groonga. 1 groonga (1)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result
new file mode 100644
index 00000000000..bc5b0132e43
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_multiple.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries
+CHANGE body description TEXT FIRST,
+CHANGE title subject TEXT AFTER internal_id,
+CHANGE id internal_id INT;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `description` text,
+ `internal_id` int(11) NOT NULL DEFAULT '0',
+ `subject` text,
+ PRIMARY KEY (`internal_id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (subject, description)
+VALUES ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+description internal_id subject
+starting groonga. 0 groonga (1)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result
new file mode 100644
index 00000000000..6d60200e5ce
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_column_rename_no_order.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+ALTER TABLE diaries CHANGE body description TEXT;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `description` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id title description
+1 groonga (1) starting groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result
new file mode 100644
index 00000000000..3a7413e389b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_engine.result
@@ -0,0 +1,49 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) ENGINE MyISAM DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries ENGINE = mroonga;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result
new file mode 100644
index 00000000000..5046dc8e142
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_change_token_filter.result
@@ -0,0 +1,32 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+CREATE TABLE terms (
+term VARCHAR(64) NOT NULL PRIMARY KEY,
+is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram"' DEFAULT CHARSET=utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content TEXT NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI
+column_create terms is_stop_word COLUMN_SCALAR Int8
+column_create terms term COLUMN_SCALAR ShortText
+table_create memos TABLE_PAT_KEY Int32
+column_create memos content COLUMN_SCALAR LongText
+column_create memos id COLUMN_SCALAR Int32
+column_create terms content COLUMN_INDEX|WITH_POSITION memos content
+ALTER TABLE terms COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"';
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_PAT_KEY Int32
+column_create memos content COLUMN_SCALAR LongText
+column_create memos id COLUMN_SCALAR Int32
+table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord
+column_create terms is_stop_word COLUMN_SCALAR Int8
+column_create terms term COLUMN_SCALAR ShortText
+DROP TABLE memos;
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_create_fulltext.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_create_fulltext.result
new file mode 100644
index 00000000000..6127df61cb4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_create_fulltext.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+CREATE FULLTEXT INDEX title_index on diaries (title);
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_ujis.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_ujis.result
new file mode 100644
index 00000000000..ff7bc5e7cea
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_ujis.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES ujis;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=ujis;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "Å·µ¤");
+INSERT INTO diaries VALUES (3, "Éٻλ³");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("Éٻλ³");
+id title
+3 Éٻλ³
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("Éٻλ³");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_utf8.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_utf8.result
new file mode 100644
index 00000000000..cbaa8d62c98
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_fulltext_utf8.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_multiple_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_multiple_column.result
new file mode 100644
index 00000000000..9d6cdcd9ba8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_multiple_column.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY title_and_created_at_index (title, created_at)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_normal.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_normal.result
new file mode 100644
index 00000000000..09399c12a3e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_normal.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY created_at_index (created_at)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_primary.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_primary.result
new file mode 100644
index 00000000000..f94c98ff9b2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_primary.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_truncate.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_truncate.result
new file mode 100644
index 00000000000..7b71832b84f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_truncate.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS users;
+SET NAMES utf8;
+CREATE TABLE users (
+first_name VARCHAR(32) NOT NULL,
+last_name VARCHAR(32) NOT NULL,
+KEY (first_name, last_name)
+);
+INSERT INTO users VALUES("Taro", "Yamada");
+INSERT INTO users VALUES("Hanako", "Tanaka");
+INSERT INTO users VALUES("Joe", "Honda");
+SELECT * FROM users;
+first_name last_name
+Taro Yamada
+Hanako Tanaka
+Joe Honda
+ALTER TABLE users DISABLE KEYS;
+TRUNCATE users;
+SELECT * FROM users;
+first_name last_name
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_updating.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_updating.result
new file mode 100644
index 00000000000..8b6f94c0cb5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_disable_keys_updating.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+c1 int NOT NULL,
+c2 text NOT NULL,
+c3 int NOT NULL,
+c4 int NOT NULL,
+PRIMARY KEY(c1),
+KEY idx1(c3,c4),
+FULLTEXT KEY ft1(c2)
+);
+INSERT INTO t1 VALUES(1, 'test1', 1, 1);
+INSERT INTO t1 VALUES(2, 'test2', 2, 2);
+INSERT INTO t1 VALUES(3, 'test3', 1, 3);
+ALTER TABLE t1 DISABLE KEYS;
+DELETE FROM t1 WHERE c1 = 2;
+UPDATE t1 SET c4 = 4 WHERE c1 = 1;
+INSERT INTO t1 VALUES(4, 'test4', 2, 4);
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result
new file mode 100644
index 00000000000..6475de51b21
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_multiple.result
@@ -0,0 +1,36 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries
+DROP COLUMN title,
+DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+SELECT * FROM diaries;
+id
+1
+INSERT INTO diaries () VALUES ();
+SELECT * FROM diaries;
+id
+1
+2
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result
new file mode 100644
index 00000000000..cbc94cebccf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_column_one.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+SELECT * FROM diaries;
+id title
+1 survey
+INSERT INTO diaries (title) values ("groonga (1)");
+INSERT INTO diaries (title) values ("groonga (2)");
+SELECT * FROM diaries;
+id title
+1 survey
+2 groonga (1)
+3 groonga (2)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_key_multiple_column_with_data.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_key_multiple_column_with_data.result
new file mode 100644
index 00000000000..b0aa59a20b5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_drop_key_multiple_column_with_data.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS scores;
+SET NAMES UTF8;
+CREATE TABLE scores (
+id BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
+name CHAR(30) NOT NULL,
+score INT NOT NULL,
+KEY property (name, score)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores
+WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+ALTER TABLE scores DROP KEY property;
+SELECT * FROM scores
+WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext.result
new file mode 100644
index 00000000000..e5c8a34901f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_ujis.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_ujis.result
new file mode 100644
index 00000000000..3853cc849fb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_ujis.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES ujis;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=ujis;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "Å·µ¤");
+INSERT INTO diaries VALUES (3, "Éٻλ³");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("Éٻλ³");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("Éٻλ³");
+id title
+3 Éٻλ³
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_utf8.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_utf8.result
new file mode 100644
index 00000000000..e5c8a34901f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_fulltext_utf8.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_multiple_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_multiple_column.result
new file mode 100644
index 00000000000..e252061d109
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_multiple_column.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY title_and_created_at_index (title, created_at)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_normal.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_normal.result
new file mode 100644
index 00000000000..0e56e78d0c6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_normal.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY created_at_index (created_at)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_primary.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_primary.result
new file mode 100644
index 00000000000..722e62f966b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_enable_keys_primary.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result
new file mode 100644
index 00000000000..6bbedd41e95
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_engine_decimal.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+temperature DECIMAL(6, 3)
+) ENGINE InnoDB DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(6,3) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21.281
+ALTER TABLE diaries ENGINE = mroonga;
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21.281
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21.281
+2 rainy day 14.213
+3 cloudy day 17.821
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(6,3) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_no_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_no_primary_key.result
new file mode 100644
index 00000000000..bf7593f78eb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_no_primary_key.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+CREATE TABLE memos (
+content varchar(32)
+) DEFAULT CHARSET="utf8";
+INSERT INTO memos (content) values ("Starting Groonga...");
+INSERT INTO memos (content) values ("Started Groonga.");
+INSERT INTO memos (content) values ("Starting Mroonga...");
+ALTER TABLE memos ADD FULLTEXT INDEX content_index (content);
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `content` varchar(32) DEFAULT NULL,
+ FULLTEXT KEY `content_index` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga");
+content
+Starting Groonga...
+Started Groonga.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result
new file mode 100644
index 00000000000..d98dc431a0b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_normal.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS memos;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT
+) DEFAULT CHARSET="utf8";
+INSERT INTO memos (content) values ("Starting Groonga...");
+INSERT INTO memos (content) values ("Started Groonga.");
+INSERT INTO memos (content) values ("Starting Mroonga...");
+ALTER TABLE memos ADD FULLTEXT INDEX content_index (content);
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content_index` (`content`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
+SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga");
+id content
+1 Starting Groonga...
+2 Started Groonga.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_table.result
new file mode 100644
index 00000000000..705d2f70126
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_add_table.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS tags;
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags VARCHAR(40) COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO tags (name) VALUES ("Groonga");
+INSERT INTO bugs (id, tags) VALUES (1, "Groonga Mroonga");
+SELECT * FROM bugs;
+id tags
+1 GROONGA MROONGA
+ALTER TABLE bugs ADD FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"';
+SELECT * FROM bugs
+WHERE MATCH(tags) AGAINST("Groonga");
+id tags
+1 GROONGA MROONGA
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_drop_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_drop_table.result
new file mode 100644
index 00000000000..2d5e3d55ca7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_fulltext_drop_table.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS tags;
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags VARCHAR(40) COMMENT 'type "tags"',
+FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO tags (name) VALUES ("Groonga");
+INSERT INTO bugs (id, tags) VALUES (1, "Groonga Mroonga");
+ALTER TABLE bugs DROP INDEX bugs_tags_index;
+ALTER TABLE bugs
+ADD FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"';
+SELECT * FROM bugs
+WHERE MATCH(tags) AGAINST("Groonga");
+id tags
+1 GROONGA MROONGA
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result
new file mode 100644
index 00000000000..d831d02d76a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_after.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id title body
+1 groonga (1) starting groonga.
+ALTER TABLE diaries MODIFY body TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+id body title
+1 starting groonga. groonga (1)
+2 started groonga. groonga (2)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result
new file mode 100644
index 00000000000..bd936507211
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_first.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id title body
+1 groonga (1) starting groonga.
+ALTER TABLE diaries MODIFY body TEXT FIRST;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `body` text,
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+body id title
+starting groonga. 1 groonga (1)
+started groonga. 2 groonga (2)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result
new file mode 100644
index 00000000000..d8d963d87b4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_modify_column_no_order.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+id title body
+1 groonga (1) starting groonga.
+ALTER TABLE diaries MODIFY title VARCHAR(100);
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` varchar(100) DEFAULT NULL,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+id title body
+1 groonga (1) starting groonga.
+2 groonga (2) started groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result
new file mode 100644
index 00000000000..64f524de06c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_recreate_anonymous_index_at_once.result
@@ -0,0 +1,47 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("survey", "will start mroonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 survey will start mroonga!
+SELECT * FROM diaries
+WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries
+DROP INDEX body,
+ADD FULLTEXT INDEX (body);
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 survey will start mroonga!
+SELECT * FROM diaries
+WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result
new file mode 100644
index 00000000000..eac322ceb26
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_rename_table.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries, memos;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("groonga") AND
+MATCH(body) AGAINST("starting");
+id title body
+ALTER TABLE diaries RENAME memos;
+SELECT * FROM memos;
+id title body
+1 survey will start groonga!
+SELECT * FROM memos
+WHERE MATCH(title) AGAINST("groonga") AND
+MATCH(body) AGAINST("starting");
+id title body
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result
new file mode 100644
index 00000000000..d8ed80a157d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/alter_table_spatial.result
@@ -0,0 +1,132 @@
+DROP TABLE IF EXISTS shops;
+CREATE TABLE shops (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name TEXT,
+location GEOMETRY NOT NULL
+);
+INSERT INTO shops (name, location)
+VALUES ('nezu-no-taiyaki',
+GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+VALUES ('taiyaki-kataoka',
+GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+VALUES ('soba-taiyaki-ku',
+GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+VALUES ('kuruma',
+GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+VALUES ('hirose-ya',
+GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+VALUES ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+VALUES ('omede-taiyaki',
+GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+VALUES ('onaga-ya',
+GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+VALUES ('shiro-ya',
+GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+VALUES ('fuji-ya',
+GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+VALUES ('miyoshi',
+GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+VALUES ('juju-ya',
+GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+VALUES ('tatsumi-ya',
+GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+VALUES ('tetsuji',
+GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+VALUES ('gazuma-ya',
+GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+VALUES ('honma-mon',
+GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+VALUES ('naniwa-ya',
+GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+VALUES ('kuro-dai',
+GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+VALUES ('daruma',
+GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+VALUES ('yanagi-ya',
+GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+VALUES ('sharaku',
+GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+VALUES ('takane',
+GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+VALUES ('chiyoda',
+GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+VALUES ('da-ka-po',
+GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+VALUES ('matsushima-ya',
+GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+VALUES ('kazuya',
+GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+VALUES ('furuya-kogane-an',
+GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+VALUES ('hachi-no-ie',
+GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+VALUES ('azuki-chan',
+GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+VALUES ('kuriko-an',
+GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+VALUES ('naze-ya',
+GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+VALUES ('sanoki-ya',
+GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+VALUES ('shigeta',
+GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+VALUES ('nishimi-ya',
+GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+VALUES ('hiiragi',
+GeomFromText('POINT(139.711517 35.647701)'));
+ALTER TABLE shops ADD SPATIAL KEY location_index (location);
+SELECT id, name, AsText(location) AS location_text FROM shops
+WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location)
+ORDER BY id;
+id name location_text
+14 tetsuji POINT(139.76857 35.680911944444446)
+19 daruma POINT(139.7705988888889 35.68146111111111)
+26 kazuya POINT(139.760895 35.67350805555556)
+SHOW CREATE TABLE shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga AUTO_INCREMENT=37 DEFAULT CHARSET=latin1
+DROP TABLE shops;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..6a5729af023
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_TODO_SPLIT_ME.result
@@ -0,0 +1,53 @@
+drop table if exists t1;
+create table t1 (c1 int auto_increment, primary key(c1));
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+c1
+1
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+c1
+2
+insert into t1 values(10);
+select c1 from t1 order by c1 desc limit 1;
+c1
+10
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+c1
+11
+insert into t1 values(6);
+select c1 from t1 order by c1 desc limit 1;
+c1
+11
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+c1
+12
+drop table t1;
+create table t1 (c1 int, c2 int auto_increment, primary key(c1), key idx1(c2));
+insert into t1 values(1, null);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+1 1
+insert into t1 values(2, null);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+2 2
+insert into t1 values(3, 10);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+3 10
+insert into t1 values(4, null);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+4 11
+insert into t1 values(5, 6);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+4 11
+insert into t1 values(6, null);
+select * from t1 order by c2 desc limit 1;
+c1 c2
+6 12
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_table_param.result b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_table_param.result
new file mode 100644
index 00000000000..f89b74e571a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_table_param.result
@@ -0,0 +1,70 @@
+drop table if exists t1;
+create table t1 (c1 int auto_increment, primary key(c1)) auto_increment=34129;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+34129
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL AUTO_INCREMENT,
+ PRIMARY KEY (`c1`)
+) ENGINE=Mroonga AUTO_INCREMENT=34130 DEFAULT CHARSET=latin1
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+34130
+34129
+insert into t1 values(10);
+select c1 from t1 order by c1 desc;
+c1
+34130
+34129
+10
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+34131
+34130
+34129
+10
+insert into t1 values(6);
+select c1 from t1 order by c1 desc;
+c1
+34131
+34130
+34129
+10
+6
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+34132
+34131
+34130
+34129
+10
+6
+truncate table t1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+1
+delete from t1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+c1
+2
+rename table t1 to t2;
+insert into t2 values(null);
+select c1 from t2 order by c1 desc;
+c1
+3
+2
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `c1` int(11) NOT NULL AUTO_INCREMENT,
+ PRIMARY KEY (`c1`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
+drop table t2;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_text.result b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_text.result
new file mode 100644
index 00000000000..fe5e6409abe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/auto_increment_text.result
@@ -0,0 +1,15 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text
+);
+insert into diaries (body) values ("started groonga (long text)");
+select * from diaries;
+id body
+1 started groonga (long text)
+insert into diaries (body) values ("sleeping... (short text)");
+select * from diaries;
+id body
+1 started groonga (long text)
+2 sleeping... (short text)
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/binlog_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/binlog_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..340509f6e53
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/binlog_TODO_SPLIT_ME.result
@@ -0,0 +1,34 @@
+drop table if exists t1;
+show variables like 'log_bin';
+Variable_name Value
+log_bin ON
+set binlog_format="STATEMENT";
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
+set binlog_format="ROW";
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
+set binlog_format="MIXED";
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_general_ci_french.result b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_general_ci_french.result
new file mode 100644
index 00000000000..880092f46fb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_general_ci_french.result
@@ -0,0 +1,11 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+content varchar(256) COLLATE utf8_general_ci,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES ("Je suis un garçon.");
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("garcon");
+content
+Je suis un garçon.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_french.result b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_french.result
new file mode 100644
index 00000000000..3f24de87035
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_french.result
@@ -0,0 +1,11 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+content varchar(256) COLLATE utf8_unicode_ci,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES ("Je suis un garçon.");
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("garcon");
+content
+Je suis un garçon.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_japanese.result b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_japanese.result
new file mode 100644
index 00000000000..94ef2608b81
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/collation_utf8_unicode_ci_japanese.result
@@ -0,0 +1,11 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+content varchar(256) COLLATE utf8_unicode_ci,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES ("ã²ã‚‰ãŒãªã¨ã‚«ã‚¿ã‚«ãƒŠã‚’覚ãˆã¾ã—ãŸã€‚");
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("ã‹ãŸã‹ãª");
+content
+ã²ã‚‰ãŒãªã¨ã‚«ã‚¿ã‚«ãƒŠã‚’覚ãˆã¾ã—ãŸã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_index_not_for_mroonga.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_index_not_for_mroonga.result
new file mode 100644
index 00000000000..94b3a603389
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_index_not_for_mroonga.result
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED,
+INDEX (id) COMMENT 'ID search is required.'
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned DEFAULT NULL,
+ KEY `id` (`id`) COMMENT 'ID search is required.'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_normal_not_for_mroonga.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_normal_not_for_mroonga.result
new file mode 100644
index 00000000000..162b515d898
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_comment_normal_not_for_mroonga.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.'
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ `tag` varchar(64) DEFAULT NULL COMMENT 'It must consist of only alphabet and number.',
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result
new file mode 100644
index 00000000000..e24a56be3a2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_with_index.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATE,
+KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` date DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `created_at` (`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29");
+INSERT INTO diaries (title, created_at) VALUES ("rainy day", "2012-01-30");
+INSERT INTO diaries (title, created_at) VALUES ("cloudy day", "2012-01-31");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29
+2 rainy day 2012-01-30
+3 cloudy day 2012-01-31
+SELECT * FROM diaries WHERE created_at BETWEEN "2012-01-29" AND "2012-01-30";
+id title created_at
+1 clear day 2012-01-29
+2 rainy day 2012-01-30
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result
new file mode 100644
index 00000000000..018ee8eb5b8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_without_index.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATE
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` date DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29");
+INSERT INTO diaries (title, created_at) VALUES ("rainy day", "2012-01-30");
+INSERT INTO diaries (title, created_at) VALUES ("cloudy day", "2012-01-31");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29
+2 rainy day 2012-01-30
+3 cloudy day 2012-01-31
+SELECT * FROM diaries WHERE created_at BETWEEN "2012-01-29" AND "2012-01-30";
+id title created_at
+1 clear day 2012-01-29
+2 rainy day 2012-01-30
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_date_zero_date.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_zero_date.result
new file mode 100644
index 00000000000..b2364e1158e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_date_zero_date.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS timestamps;
+CREATE TABLE timestamps (
+id INT PRIMARY KEY AUTO_INCREMENT,
+create_dt DATE
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE timestamps;
+Table Create Table
+timestamps CREATE TABLE `timestamps` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `create_dt` date DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO timestamps (create_dt) VALUES ("2012-00-01");
+Warnings:
+Warning 1265 Data truncated for column 'create_dt' at row 1
+INSERT INTO timestamps (create_dt) VALUES ("2012-01-00");
+Warnings:
+Warning 1265 Data truncated for column 'create_dt' at row 1
+SELECT * FROM timestamps;
+id create_dt
+1 2012-01-01
+2 2012-01-01
+SELECT * FROM timestamps WHERE create_dt = "2012-01-01";
+id create_dt
+1 2012-01-01
+2 2012-01-01
+DROP TABLE timestamps;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result
new file mode 100644
index 00000000000..453f641968b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_2038.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('2038-01-18 03:14:07', '2038-01-18 03:14:07');
+INSERT INTO diaries (title, created_at)
+VALUES ('2038-01-20 03:14:08', '2038-01-20 03:14:08');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 2038-01-18 03:14:07 2038-01-18 03:14:07
+2 2038-01-20 03:14:08 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result
new file mode 100644
index 00000000000..10824d7c28d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_before_unix_epoch.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 1000-01-01 00:00:00 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result
new file mode 100644
index 00000000000..f3a7b27f342
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_max.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 9999-12-31 23:59:59 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result
new file mode 100644
index 00000000000..d7acad79bab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_32bit_out_of_range.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('2012', '2012');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 2012 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result
new file mode 100644
index 00000000000..56e38902f28
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_2038.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('2038-01-19 03:14:07', '2038-01-19 03:14:07');
+INSERT INTO diaries (title, created_at)
+VALUES ('2038-01-19 03:14:08', '2038-01-19 03:14:08');
+SELECT * FROM diaries;
+id title created_at
+1 2038-01-19 03:14:07 2038-01-19 03:14:07
+2 2038-01-19 03:14:08 2038-01-19 03:14:08
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result
new file mode 100644
index 00000000000..c3ca2628bca
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_before_unix_epoch.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+SELECT * FROM diaries;
+id title created_at
+1 1000-01-01 00:00:00 1000-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result
new file mode 100644
index 00000000000..0373d17530e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_max.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59');
+SELECT * FROM diaries;
+id title created_at
+1 9999-12-31 23:59:59 9999-12-31 23:59:59
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result
new file mode 100644
index 00000000000..733217fda85
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_55_out_of_range.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('2012', '2012');
+Warnings:
+Warning 1264 Out of range value for column 'created_at' at row 1
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 2012 0000-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result
new file mode 100644
index 00000000000..962212c86f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_64bit_version_56_or_later_out_of_range.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('2012', '2012');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 2012 0000-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result
new file mode 100644
index 00000000000..a31042f768d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_with_index.result
@@ -0,0 +1,34 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME(6),
+KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime(6) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `created_at` (`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ("clear day", "2012-01-29 21:51:01.111111");
+INSERT INTO diaries (title, created_at)
+VALUES ("rainy day", "2012-01-30 01:23:45.333");
+INSERT INTO diaries (title, created_at)
+VALUES ("cloudy day", "2012-01-31 08:32:10.5555");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29 21:51:01.111111
+2 rainy day 2012-01-30 01:23:45.333000
+3 cloudy day 2012-01-31 08:32:10.555500
+SELECT * FROM diaries
+WHERE created_at BETWEEN "2012-01-29 00:00:00.123456" AND
+"2012-01-31 00:00:00.999999";
+id title created_at
+1 clear day 2012-01-29 21:51:01.111111
+2 rainy day 2012-01-30 01:23:45.333000
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result
new file mode 100644
index 00000000000..0b1bf0f0eb4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_fractional_seconds_without_index.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME(6)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime(6) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ("clear day", "2012-01-29 21:51:01.111111");
+INSERT INTO diaries (title, created_at)
+VALUES ("rainy day", "2012-01-30 01:23:45.333");
+INSERT INTO diaries (title, created_at)
+VALUES ("cloudy day", "2012-01-31 08:32:10.5555");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29 21:51:01.111111
+2 rainy day 2012-01-30 01:23:45.333000
+3 cloudy day 2012-01-31 08:32:10.555500
+SELECT * FROM diaries
+WHERE created_at BETWEEN "2012-01-29 00:00:00.123456" AND
+"2012-01-31 00:00:00.999999";
+id title created_at
+1 clear day 2012-01-29 21:51:01.111111
+2 rainy day 2012-01-30 01:23:45.333000
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result
new file mode 100644
index 00000000000..10824d7c28d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_freebsd_before_unix_epoch.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+Warnings:
+Warning 1265 Data truncated for column 'created_at' at row 1
+SELECT * FROM diaries;
+id title created_at
+1 1000-01-01 00:00:00 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result
new file mode 100644
index 00000000000..82f01b9f237
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_null.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ('NULL', NULL);
+SELECT * FROM diaries;
+id title created_at
+1 NULL 1970-01-01 00:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result
new file mode 100644
index 00000000000..b205031dec1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_with_index.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME,
+KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `created_at` (`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ("clear day", "2012-01-29 21:51:01");
+INSERT INTO diaries (title, created_at)
+VALUES ("rainy day", "2012-01-30 01:23:45");
+INSERT INTO diaries (title, created_at)
+VALUES ("cloudy day", "2012-01-31 08:32:10");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29 21:51:01
+2 rainy day 2012-01-30 01:23:45
+3 cloudy day 2012-01-31 08:32:10
+SELECT * FROM diaries
+WHERE created_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+id title created_at
+1 clear day 2012-01-29 21:51:01
+2 rainy day 2012-01-30 01:23:45
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result
new file mode 100644
index 00000000000..6592df35fcb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_without_index.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at)
+VALUES ("clear day", "2012-01-29 21:51:01");
+INSERT INTO diaries (title, created_at)
+VALUES ("rainy day", "2012-01-30 01:23:45");
+INSERT INTO diaries (title, created_at)
+VALUES ("cloudy day", "2012-01-31 08:32:10");
+SELECT * FROM diaries;
+id title created_at
+1 clear day 2012-01-29 21:51:01
+2 rainy day 2012-01-30 01:23:45
+3 cloudy day 2012-01-31 08:32:10
+SELECT * FROM diaries
+WHERE created_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+id title created_at
+1 clear day 2012-01-29 21:51:01
+2 rainy day 2012-01-30 01:23:45
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result
new file mode 100644
index 00000000000..c22a63f9744
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_datetime_zero_date.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS timestamps;
+CREATE TABLE timestamps (
+id INT PRIMARY KEY AUTO_INCREMENT,
+create_dt DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE timestamps;
+Table Create Table
+timestamps CREATE TABLE `timestamps` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `create_dt` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00");
+Warnings:
+Warning 1265 Data truncated for column 'create_dt' at row 1
+INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00");
+Warnings:
+Warning 1265 Data truncated for column 'create_dt' at row 1
+SELECT * FROM timestamps;
+id create_dt
+1 2012-01-01 00:00:00
+2 2012-01-01 00:00:00
+SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00";
+id create_dt
+1 2012-01-01 00:00:00
+2 2012-01-01 00:00:00
+DROP TABLE timestamps;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result
new file mode 100644
index 00000000000..4a21d62dd14
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_with_index.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+temperature DECIMAL(6, 3),
+KEY (temperature)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(6,3) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `temperature` (`temperature`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21.281
+2 rainy day 14.213
+3 cloudy day 17.821
+SELECT * FROM diaries WHERE temperature BETWEEN "14.213" AND "17.821";
+id title temperature
+2 rainy day 14.213
+3 cloudy day 17.821
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result
new file mode 100644
index 00000000000..cd939fa5483
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_fractional_seconds_without_index.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+temperature DECIMAL(6, 3)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(6,3) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21.281
+2 rainy day 14.213
+3 cloudy day 17.821
+SELECT * FROM diaries WHERE temperature BETWEEN "14.213" AND "17.821";
+id title temperature
+2 rainy day 14.213
+3 cloudy day 17.821
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result
new file mode 100644
index 00000000000..56a6a360dc9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_with_index.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+temperature DECIMAL,
+KEY (temperature)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(10,0) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `temperature` (`temperature`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21
+2 rainy day 14
+3 cloudy day 17
+SELECT * FROM diaries WHERE temperature BETWEEN "14" AND "17";
+id title temperature
+2 rainy day 14
+3 cloudy day 17
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result
new file mode 100644
index 00000000000..06162f76ddd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_decimal_without_index.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+temperature DECIMAL
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `temperature` decimal(10,0) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17);
+SELECT * FROM diaries;
+id title temperature
+1 clear day 21
+2 rainy day 14
+3 cloudy day 17
+SELECT * FROM diaries WHERE temperature BETWEEN "14" AND "17";
+id title temperature
+2 rainy day 14
+3 cloudy day 17
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_less_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_less_with_index.result
new file mode 100644
index 00000000000..28c80dcc6f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_less_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+size ENUM("small", "medium", "large"),
+INDEX (size)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `size` enum('small','medium','large') DEFAULT NULL,
+ KEY `size` (`size`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart for child", "small");
+INSERT INTO items VALUES ("leadies' coat", "medium");
+INSERT INTO items VALUES ("parka", "large");
+INSERT INTO items VALUES ("hat", "medium");
+SELECT * FROM items;
+name size
+t-shart for child small
+leadies' coat medium
+parka large
+hat medium
+SELECT * FROM items WHERE size = "medium";
+name size
+leadies' coat medium
+hat medium
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_many_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_many_with_index.result
new file mode 100644
index 00000000000..731a9690702
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_enum_many_with_index.result
@@ -0,0 +1,287 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+size ENUM("size1",
+"size2",
+"size3",
+"size4",
+"size5",
+"size6",
+"size7",
+"size8",
+"size9",
+"size10",
+"size11",
+"size12",
+"size13",
+"size14",
+"size15",
+"size16",
+"size17",
+"size18",
+"size19",
+"size20",
+"size21",
+"size22",
+"size23",
+"size24",
+"size25",
+"size26",
+"size27",
+"size28",
+"size29",
+"size30",
+"size31",
+"size32",
+"size33",
+"size34",
+"size35",
+"size36",
+"size37",
+"size38",
+"size39",
+"size40",
+"size41",
+"size42",
+"size43",
+"size44",
+"size45",
+"size46",
+"size47",
+"size48",
+"size49",
+"size50",
+"size51",
+"size52",
+"size53",
+"size54",
+"size55",
+"size56",
+"size57",
+"size58",
+"size59",
+"size60",
+"size61",
+"size62",
+"size63",
+"size64",
+"size65",
+"size66",
+"size67",
+"size68",
+"size69",
+"size70",
+"size71",
+"size72",
+"size73",
+"size74",
+"size75",
+"size76",
+"size77",
+"size78",
+"size79",
+"size80",
+"size81",
+"size82",
+"size83",
+"size84",
+"size85",
+"size86",
+"size87",
+"size88",
+"size89",
+"size90",
+"size91",
+"size92",
+"size93",
+"size94",
+"size95",
+"size96",
+"size97",
+"size98",
+"size99",
+"size100",
+"size101",
+"size102",
+"size103",
+"size104",
+"size105",
+"size106",
+"size107",
+"size108",
+"size109",
+"size110",
+"size111",
+"size112",
+"size113",
+"size114",
+"size115",
+"size116",
+"size117",
+"size118",
+"size119",
+"size120",
+"size121",
+"size122",
+"size123",
+"size124",
+"size125",
+"size126",
+"size127",
+"size128",
+"size129",
+"size130",
+"size131",
+"size132",
+"size133",
+"size134",
+"size135",
+"size136",
+"size137",
+"size138",
+"size139",
+"size140",
+"size141",
+"size142",
+"size143",
+"size144",
+"size145",
+"size146",
+"size147",
+"size148",
+"size149",
+"size150",
+"size151",
+"size152",
+"size153",
+"size154",
+"size155",
+"size156",
+"size157",
+"size158",
+"size159",
+"size160",
+"size161",
+"size162",
+"size163",
+"size164",
+"size165",
+"size166",
+"size167",
+"size168",
+"size169",
+"size170",
+"size171",
+"size172",
+"size173",
+"size174",
+"size175",
+"size176",
+"size177",
+"size178",
+"size179",
+"size180",
+"size181",
+"size182",
+"size183",
+"size184",
+"size185",
+"size186",
+"size187",
+"size188",
+"size189",
+"size190",
+"size191",
+"size192",
+"size193",
+"size194",
+"size195",
+"size196",
+"size197",
+"size198",
+"size199",
+"size200",
+"size201",
+"size202",
+"size203",
+"size204",
+"size205",
+"size206",
+"size207",
+"size208",
+"size209",
+"size210",
+"size211",
+"size212",
+"size213",
+"size214",
+"size215",
+"size216",
+"size217",
+"size218",
+"size219",
+"size220",
+"size221",
+"size222",
+"size223",
+"size224",
+"size225",
+"size226",
+"size227",
+"size228",
+"size229",
+"size230",
+"size231",
+"size232",
+"size233",
+"size234",
+"size235",
+"size236",
+"size237",
+"size238",
+"size239",
+"size240",
+"size241",
+"size242",
+"size243",
+"size244",
+"size245",
+"size246",
+"size247",
+"size248",
+"size249",
+"size250",
+"size251",
+"size252",
+"size253",
+"size254",
+"size255",
+"size256"),
+INDEX (size)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `size` enum('size1','size2','size3','size4','size5','size6','size7','size8','size9','size10','size11','size12','size13','size14','size15','size16','size17','size18','size19','size20','size21','size22','size23','size24','size25','size26','size27','size28','size29','size30','size31','size32','size33','size34','size35','size36','size37','size38','size39','size40','size41','size42','size43','size44','size45','size46','size47','size48','size49','size50','size51','size52','size53','size54','size55','size56','size57','size58','size59','size60','size61','size62','size63','size64','size65','size66','size67','size68','size69','size70','size71','size72','size73','size74','size75','size76','size77','size78','size79','size80','size81','size82','size83','size84','size85','size86','size87','size88','size89','size90','size91','size92','size93','size94','size95','size96','size97','size98','size99','size100','size101','size102','size103','size104','size105','size106','size107','size108','size109','size110','size111','size112','size113','size114','size115','size116','size117','size118','size119','size120','size121','size122','size123','size124','size125','size126','size127','size128','size129','size130','size131','size132','size133','size134','size135','size136','size137','size138','size139','size140','size141','size142','size143','size144','size145','size146','size147','size148','size149','size150','size151','size152','size153','size154','size155','size156','size157','size158','size159','size160','size161','size162','size163','size164','size165','size166','size167','size168','size169','size170','size171','size172','size173','size174','size175','size176','size177','size178','size179','size180','size181','size182','size183','size184','size185','size186','size187','size188','size189','size190','size191','size192','size193','size194','size195','size196','size197','size198','size199','size200','size201','size202','size203','size204','size205','size206','size207','size208','size209','size210','size211','size212','size213','size214','size215','size216','size217','size218','size219','size220','size221','size222','size223','size224','size225','size226','size227','size228','size229','size230','size231','size232','size233','size234','size235','size236','size237','size238','size239','size240','size241','size242','size243','size244','size245','size246','size247','size248','size249','size250','size251','size252','size253','size254','size255','size256') DEFAULT NULL,
+ KEY `size` (`size`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart for child", "size1");
+INSERT INTO items VALUES ("leadies' coat", "size1");
+INSERT INTO items VALUES ("parka", "size256");
+INSERT INTO items VALUES ("hat", "size256");
+SELECT * FROM items;
+name size
+t-shart for child size1
+leadies' coat size1
+parka size256
+hat size256
+SELECT * FROM items WHERE size = "size1";
+name size
+t-shart for child size1
+leadies' coat size1
+SELECT * FROM items WHERE size = "size256";
+name size
+parka size256
+hat size256
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id__id.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id__id.result
new file mode 100644
index 00000000000..33f31ed38df
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id__id.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS contents;
+CREATE TABLE contents (
+_id INT,
+content TEXT NOT NULL,
+FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO contents (content) VALUES ('first');
+INSERT INTO contents (content) VALUES ('second');
+SELECT _id, content FROM contents;
+_id content
+1 first
+2 second
+DROP TABLE contents;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id_invalid_id.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id_invalid_id.result
new file mode 100644
index 00000000000..903e3a85cab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga__id_invalid_id.result
@@ -0,0 +1,8 @@
+DROP TABLE IF EXISTS contents;
+CREATE TABLE contents (
+_i INT,
+content TEXT NOT NULL,
+FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8;
+ERROR HY000: [column][create] name can't start with '_' and contains only 0-9, A-Z, a-z, #, @, - or _: <_i>
+DROP TABLE IF EXISTS contents;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_other_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_other_table.result
new file mode 100644
index 00000000000..87c14a98f15
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_fulltext_other_table.result
@@ -0,0 +1,42 @@
+DROP DATABASE IF EXISTS mroonga;
+CREATE DATABASE mroonga;
+USE mroonga;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"',
+FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga");
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create tags TABLE_PAT_KEY ShortText --default_tokenizer TokenDelimit
+column_create tags name COLUMN_SCALAR ShortText
+table_create bugs TABLE_PAT_KEY UInt32
+column_create bugs id COLUMN_SCALAR UInt32
+column_create bugs tags COLUMN_VECTOR tags
+column_create tags bugs_tags_index COLUMN_INDEX|WITH_POSITION bugs tags
+load --table tags
+[
+["_key","name"],
+["Linux",""],
+["MySQL",""],
+["groonga",""]
+]
+load --table bugs
+[
+["_key","id","tags"],
+[1,1,["Linux","MySQL","groonga"]]
+]
+SELECT *, MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE) AS score
+FROM bugs
+WHERE MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE);
+id tags score
+1 Linux MySQL groonga 1
+DROP TABLE bugs;
+DROP TABLE tags;
+DROP DATABASE mroonga;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result
new file mode 100644
index 00000000000..e46ed71d0fe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_index_int_other_table.result
@@ -0,0 +1,45 @@
+DROP DATABASE IF EXISTS mroonga;
+CREATE DATABASE mroonga;
+USE mroonga;
+CREATE TABLE priorities (
+id INT PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+priority INT COMMENT 'type "priorities"',
+INDEX bugs_priority_index (priority) COMMENT 'table "priorities"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, priority) VALUES (1, 10);
+INSERT INTO bugs (id, priority) VALUES (2, 3);
+INSERT INTO bugs (id, priority) VALUES (3, -2);
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create priorities TABLE_PAT_KEY Int32
+column_create priorities id COLUMN_SCALAR Int32
+table_create bugs TABLE_PAT_KEY UInt32
+column_create bugs id COLUMN_SCALAR UInt32
+column_create bugs priority COLUMN_SCALAR priorities
+column_create priorities bugs_priority_index COLUMN_INDEX|WITH_POSITION bugs priority
+load --table priorities
+[
+["_key","id"],
+[-2,0],
+[3,0],
+[10,0]
+]
+load --table bugs
+[
+["_key","id","priority"],
+[1,1,10],
+[2,2,3],
+[3,3,-2]
+]
+SELECT *
+FROM bugs
+WHERE priority = 3;
+id priority
+2 3
+DROP TABLE bugs;
+DROP TABLE priorities;
+DROP DATABASE mroonga;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_reference.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_reference.result
new file mode 100644
index 00000000000..8acf8aab220
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_reference.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS tags, bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag TEXT COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, tag) VALUES (1, "Linux");
+INSERT INTO bugs (id, tag) VALUES (2, "MySQL");
+INSERT INTO bugs (id, tag) VALUES (3, "groonga");
+SELECT * FROM bugs;
+id tag
+1 Linux
+2 MySQL
+3 groonga
+SELECT * FROM tags;
+name
+Linux
+MySQL
+groonga
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_with_not_for_mroonga_comment.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_with_not_for_mroonga_comment.result
new file mode 100644
index 00000000000..cd910206a3d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_scalar_with_not_for_mroonga_comment.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS tags, bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag TEXT COMMENT 'It references to tags.name, type "tags"'
+) DEFAULT CHARSET=utf8;
+SHOW FULL COLUMNS FROM bugs LIKE 'tag';
+Field Type Collation Null Key Default Extra Privileges Comment
+tag text utf8_general_ci YES NULL select,insert,update,references It references to tags.name, type "tags"
+INSERT INTO bugs (id, tag) VALUES (1, "Linux");
+INSERT INTO bugs (id, tag) VALUES (2, "MySQL");
+INSERT INTO bugs (id, tag) VALUES (3, "groonga");
+SELECT * FROM bugs;
+id tag
+1 Linux
+2 MySQL
+3 groonga
+SELECT * FROM tags;
+name
+Linux
+MySQL
+groonga
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_order_by_with_function.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_order_by_with_function.result
new file mode 100644
index 00000000000..468115e8a20
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_order_by_with_function.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS tags, bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL Groonga");
+INSERT INTO bugs (id, tags) VALUES (2, "MySQL Mroonga");
+INSERT INTO bugs (id, tags) VALUES (3, "Ruby Rroonga");
+SELECT * FROM tags ORDER BY SUBSTRING(name, 1, 1) ASC;
+name
+Groonga
+Linux
+Mroonga
+MySQL
+Rroonga
+Ruby
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result
new file mode 100644
index 00000000000..515dad1da2e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_groonga_vector_reference.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS tags, bugs;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga");
+SELECT * FROM bugs;
+id tags
+1 Linux MySQL groonga
+SELECT * FROM tags;
+name
+Linux
+MySQL
+groonga
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_int_with_index_zero_value.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_int_with_index_zero_value.result
new file mode 100644
index 00000000000..1afd7da9839
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_int_with_index_zero_value.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price INT KEY
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("hamburger", 200);
+INSERT INTO items VALUES ("smile", 0);
+INSERT INTO items VALUES ("coke", 100);
+SELECT * FROM items;
+name price
+smile 0
+coke 100
+hamburger 200
+SELECT * FROM items WHERE price = 0;
+name price
+smile 0
+SELECT * FROM items WHERE price <= 100;
+name price
+smile 0
+coke 100
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_set_16_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_16_with_index.result
new file mode 100644
index 00000000000..ee818a62e75
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_16_with_index.result
@@ -0,0 +1,40 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+colors SET("black",
+"dim gray",
+"dark gray",
+"gray",
+"light gray",
+"gainsboro",
+"white smoke",
+"white",
+"red",
+"orange red",
+"dark orange",
+"orange",
+"gold",
+"yellow",
+"chartreuse",
+"lawn green"),
+INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `colors` set('black','dim gray','dark gray','gray','light gray','gainsboro','white smoke','white','red','orange red','dark orange','orange','gold','yellow','chartreuse','lawn green') DEFAULT NULL,
+ KEY `colors` (`colors`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart", "black,gray");
+INSERT INTO items VALUES ("hat", "white,dark gray");
+INSERT INTO items VALUES ("parka", "chartreuse,orange");
+SELECT * FROM items;
+name colors
+t-shart black,gray
+hat dark gray,white
+parka orange,chartreuse
+SELECT * FROM items WHERE colors = "dark gray,white";
+name colors
+hat dark gray,white
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_set_24_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_24_with_index.result
new file mode 100644
index 00000000000..10d4fd8bd1c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_24_with_index.result
@@ -0,0 +1,48 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+colors SET("black",
+"dim gray",
+"dark gray",
+"gray",
+"light gray",
+"gainsboro",
+"white smoke",
+"white",
+"red",
+"orange red",
+"dark orange",
+"orange",
+"gold",
+"yellow",
+"chartreuse",
+"lawn green",
+"green",
+"spring green",
+"medium spring green",
+"cyan",
+"deep sky blue",
+"blue",
+"medium blue",
+"dark violet"),
+INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `colors` set('black','dim gray','dark gray','gray','light gray','gainsboro','white smoke','white','red','orange red','dark orange','orange','gold','yellow','chartreuse','lawn green','green','spring green','medium spring green','cyan','deep sky blue','blue','medium blue','dark violet') DEFAULT NULL,
+ KEY `colors` (`colors`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart", "black,white");
+INSERT INTO items VALUES ("hat", "white,lawn green");
+INSERT INTO items VALUES ("parka", "gray,medium blue");
+SELECT * FROM items;
+name colors
+t-shart black,white
+hat white,lawn green
+parka gray,medium blue
+SELECT * FROM items WHERE colors = "white,lawn green";
+name colors
+hat white,lawn green
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_set_32_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_32_with_index.result
new file mode 100644
index 00000000000..0432970aa9e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_32_with_index.result
@@ -0,0 +1,56 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+colors SET("black",
+"dim gray",
+"dark gray",
+"gray",
+"light gray",
+"gainsboro",
+"white smoke",
+"white",
+"red",
+"orange red",
+"dark orange",
+"orange",
+"gold",
+"yellow",
+"chartreuse",
+"lawn green",
+"green",
+"spring green",
+"medium spring green",
+"cyan",
+"deep sky blue",
+"blue",
+"medium blue",
+"dark violet",
+"dark magenta",
+"magenta",
+"dark red",
+"brown",
+"firebrick",
+"indian red",
+"light coral",
+"salmon"),
+INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `colors` set('black','dim gray','dark gray','gray','light gray','gainsboro','white smoke','white','red','orange red','dark orange','orange','gold','yellow','chartreuse','lawn green','green','spring green','medium spring green','cyan','deep sky blue','blue','medium blue','dark violet','dark magenta','magenta','dark red','brown','firebrick','indian red','light coral','salmon') DEFAULT NULL,
+ KEY `colors` (`colors`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart", "black,white");
+INSERT INTO items VALUES ("hat", "white,dark violet");
+INSERT INTO items VALUES ("parka", "green,brown,red");
+SELECT * FROM items;
+name colors
+t-shart black,white
+hat white,dark violet
+parka red,green,brown
+SELECT * FROM items WHERE colors = "white,dark violet";
+name colors
+hat white,dark violet
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_set_64_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_64_with_index.result
new file mode 100644
index 00000000000..5b6d4511adf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_64_with_index.result
@@ -0,0 +1,88 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+colors SET("black",
+"dim gray",
+"dark gray",
+"gray",
+"light gray",
+"gainsboro",
+"white smoke",
+"white",
+"red",
+"orange red",
+"dark orange",
+"orange",
+"gold",
+"yellow",
+"chartreuse",
+"lawn green",
+"green",
+"spring green",
+"medium spring green",
+"cyan",
+"deep sky blue",
+"blue",
+"medium blue",
+"dark violet",
+"dark magenta",
+"magenta",
+"dark red",
+"brown",
+"firebrick",
+"indian red",
+"light coral",
+"salmon",
+"light salmon",
+"tomato",
+"coral",
+"dark salmon",
+"rosy brown",
+"sienna",
+"saddle brown",
+"chocolate",
+"peru",
+"sandy brown",
+"burlywood",
+"tan",
+"navajo white",
+"wheat",
+"dark goldenrod",
+"goldenrod",
+"light goldenrod",
+"pale goldenrod",
+"cornsilk",
+"dark khaki",
+"khaki",
+"lemon chiffon",
+"dark olive green",
+"olive drab",
+"yellow green",
+"green yellow",
+"light green",
+"forest green",
+"dark green",
+"lime green",
+"pale green",
+"dark sea green"),
+INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `colors` set('black','dim gray','dark gray','gray','light gray','gainsboro','white smoke','white','red','orange red','dark orange','orange','gold','yellow','chartreuse','lawn green','green','spring green','medium spring green','cyan','deep sky blue','blue','medium blue','dark violet','dark magenta','magenta','dark red','brown','firebrick','indian red','light coral','salmon','light salmon','tomato','coral','dark salmon','rosy brown','sienna','saddle brown','chocolate','peru','sandy brown','burlywood','tan','navajo white','wheat','dark goldenrod','goldenrod','light goldenrod','pale goldenrod','cornsilk','dark khaki','khaki','lemon chiffon','dark olive green','olive drab','yellow green','green yellow','light green','forest green','dark green','lime green','pale green','dark sea green') DEFAULT NULL,
+ KEY `colors` (`colors`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart", "black,white,lawn green,dark violet");
+INSERT INTO items VALUES ("hat", "white,dark violet,yellow green");
+INSERT INTO items VALUES ("parka", "green,brown,red,lime green");
+SELECT * FROM items;
+name colors
+t-shart black,white,lawn green,dark violet
+hat white,dark violet,yellow green
+parka red,green,brown,lime green
+SELECT * FROM items WHERE colors = "white,dark violet,yellow green";
+name colors
+hat white,dark violet,yellow green
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_set_8_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_8_with_index.result
new file mode 100644
index 00000000000..3e6bf4e1939
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_set_8_with_index.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+colors SET("black",
+"dim gray",
+"dark gray",
+"gray",
+"light gray",
+"gainsboro",
+"white smoke",
+"white"),
+INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `name` varchar(255) DEFAULT NULL,
+ `colors` set('black','dim gray','dark gray','gray','light gray','gainsboro','white smoke','white') DEFAULT NULL,
+ KEY `colors` (`colors`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items VALUES ("t-shart", "black,gray");
+INSERT INTO items VALUES ("hat", "dim gray,dark gray");
+INSERT INTO items VALUES ("parka", "white smoke,light gray");
+SELECT * FROM items;
+name colors
+t-shart black,gray
+hat dim gray,dark gray
+parka light gray,white smoke
+SELECT * FROM items WHERE colors = "dim gray,dark gray";
+name colors
+hat dim gray,dark gray
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_bigint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_bigint_with_index.result
new file mode 100644
index 00000000000..262f77556c6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_bigint_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price BIGINT KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("house", 9223372036854775807);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -9223372036854775808);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("super car", 2147483648);
+SELECT * FROM items;
+name price
+discount -9223372036854775808
+coke 100
+note PC 32767
+super car 2147483648
+house 9223372036854775807
+SELECT * FROM items WHERE price <= 2147483648;
+name price
+discount -9223372036854775808
+coke 100
+note PC 32767
+super car 2147483648
+SELECT * FROM items WHERE price > 2147483647;
+name price
+super car 2147483648
+house 9223372036854775807
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_int_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_int_with_index.result
new file mode 100644
index 00000000000..867b887182f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_int_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price INT KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("car", 2147483647);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -2147483647);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 16777216);
+SELECT * FROM items;
+name price
+discount -2147483647
+coke 100
+note PC 32767
+bike 16777216
+car 2147483647
+SELECT * FROM items WHERE price <= 16777216;
+name price
+discount -2147483647
+coke 100
+note PC 32767
+bike 16777216
+SELECT * FROM items WHERE price > 16777215;
+name price
+bike 16777216
+car 2147483647
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_mediumint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_mediumint_with_index.result
new file mode 100644
index 00000000000..c8b4f895a9c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_mediumint_with_index.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price MEDIUMINT KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("car", 8388607);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -8388608);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 32768);
+SELECT * FROM items;
+name price
+discount -8388608
+coke 100
+note PC 32767
+bike 32768
+car 8388607
+SELECT * FROM items WHERE price <= 127;
+name price
+discount -8388608
+coke 100
+SELECT * FROM items WHERE price >= 32768;
+name price
+bike 32768
+car 8388607
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_smallint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_smallint_with_index.result
new file mode 100644
index 00000000000..8a51ee5fd8f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_smallint_with_index.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price SMALLINT KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -32768);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("tablet PC", 20000);
+SELECT * FROM items;
+name price
+discount -32768
+coke 100
+tablet PC 20000
+note PC 32767
+SELECT * FROM items WHERE price <= 127;
+name price
+discount -32768
+coke 100
+SELECT * FROM items WHERE price >= 128;
+name price
+tablet PC 20000
+note PC 32767
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_tinyint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_tinyint_with_index.result
new file mode 100644
index 00000000000..d14efcca9a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_signed_tinyint_with_index.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price TINYINT KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("hamburger", 120);
+INSERT INTO items VALUES ("discount", -10);
+INSERT INTO items VALUES ("coke", 100);
+SELECT * FROM items;
+name price
+discount -10
+coke 100
+hamburger 120
+SELECT * FROM items WHERE price <= 100;
+name price
+discount -10
+coke 100
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result
new file mode 100644
index 00000000000..9c2a8e876e3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_time_fractional_seconds_with_index.result
@@ -0,0 +1,40 @@
+DROP TABLE IF EXISTS running_records;
+CREATE TABLE running_records (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+average TIME(6),
+max TIME(6),
+KEY (average)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+Table Create Table
+running_records CREATE TABLE `running_records` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `average` time(6) DEFAULT NULL,
+ `max` time(6) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `average` (`average`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO running_records (title, average, max)
+VALUES ("normal condition", "01:00:00.000001", "01:05:00.000001");
+INSERT INTO running_records (title, average, max)
+VALUES ("bad condition", "12:23:34.123456", "838:59:58.999999");
+INSERT INTO running_records (title, average, max)
+VALUES ("record failure", "-838:59:59.000000", "-838:59:59.000000");
+SELECT * FROM running_records;
+id title average max
+1 normal condition 01:00:00.000001 01:05:00.000001
+2 bad condition 12:23:34.123456 838:59:58.999999
+3 record failure -838:59:59.000000 -838:59:59.000000
+SELECT * FROM running_records
+WHERE average BETWEEN "00:59:59.999999" AND "100:10:10.101010";
+id title average max
+1 normal condition 01:00:00.000001 01:05:00.000001
+2 bad condition 12:23:34.123456 838:59:58.999999
+SELECT * FROM running_records
+WHERE average BETWEEN "-838:59:59.000000" AND "01:00:00.000001";
+id title average max
+3 record failure -838:59:59.000000 -838:59:59.000000
+1 normal condition 01:00:00.000001 01:05:00.000001
+DROP TABLE running_records;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result
new file mode 100644
index 00000000000..da75fd97424
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_time_with_index.result
@@ -0,0 +1,40 @@
+DROP TABLE IF EXISTS running_records;
+CREATE TABLE running_records (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+average TIME,
+max TIME,
+KEY (average)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+Table Create Table
+running_records CREATE TABLE `running_records` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `average` time DEFAULT NULL,
+ `max` time DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `average` (`average`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO running_records (title, average, max)
+VALUES ("normal condition", "01:00:00", "01:05:00");
+INSERT INTO running_records (title, average, max)
+VALUES ("bad condition", "12:23:34", "838:59:59");
+INSERT INTO running_records (title, average, max)
+VALUES ("record failure", "-838:59:59", "-838:59:59");
+SELECT * FROM running_records;
+id title average max
+1 normal condition 01:00:00 01:05:00
+2 bad condition 12:23:34 838:59:59
+3 record failure -838:59:59 -838:59:59
+SELECT * FROM running_records
+WHERE average BETWEEN "00:59:59" AND "100:10:10";
+id title average max
+1 normal condition 01:00:00 01:05:00
+2 bad condition 12:23:34 838:59:59
+SELECT * FROM running_records
+WHERE average BETWEEN "-838:59:59" AND "01:00:00";
+id title average max
+3 record failure -838:59:59 -838:59:59
+1 normal condition 01:00:00 01:05:00
+DROP TABLE running_records;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result
new file mode 100644
index 00000000000..da245535f2c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_fractional_seconds_with_index.result
@@ -0,0 +1,42 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at TIMESTAMP(6),
+updated_at TIMESTAMP(6),
+KEY (updated_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `updated_at` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
+ PRIMARY KEY (`id`),
+ KEY `updated_at` (`updated_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("clear day",
+"2012-01-29 21:51:01.111111",
+"2012-01-29 21:51:02.222222");
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("rainy day",
+"2012-01-30 01:23:45.333",
+"2012-01-30 01:23:46.444");
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("cloudy day",
+"2012-01-31 08:32:10.5555",
+"2012-01-31 08:32:11.6666");
+SELECT * FROM diaries;
+id title created_at updated_at
+1 clear day 2012-01-29 21:51:01.111111 2012-01-29 21:51:02.222222
+2 rainy day 2012-01-30 01:23:45.333000 2012-01-30 01:23:46.444000
+3 cloudy day 2012-01-31 08:32:10.555500 2012-01-31 08:32:11.666600
+SELECT * FROM diaries
+WHERE updated_at BETWEEN "2012-01-29 00:00:00.123456" AND
+"2012-01-31 00:00:00.999999";
+id title created_at updated_at
+1 clear day 2012-01-29 21:51:01.111111 2012-01-29 21:51:02.222222
+2 rainy day 2012-01-30 01:23:45.333000 2012-01-30 01:23:46.444000
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result
new file mode 100644
index 00000000000..b310de48111
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_timestamp_with_index.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+created_at TIMESTAMP,
+updated_at TIMESTAMP,
+KEY (updated_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `updated_at` (`updated_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("clear day", "2012-01-29 21:51:01", "2012-01-29 21:51:02");
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("rainy day", "2012-01-30 01:23:45", "2012-01-30 01:23:46");
+INSERT INTO diaries (title, created_at, updated_at)
+VALUES ("cloudy day", "2012-01-31 08:32:10", "2012-01-31 08:32:11");
+SELECT * FROM diaries;
+id title created_at updated_at
+1 clear day 2012-01-29 21:51:01 2012-01-29 21:51:02
+2 rainy day 2012-01-30 01:23:45 2012-01-30 01:23:46
+3 cloudy day 2012-01-31 08:32:10 2012-01-31 08:32:11
+SELECT * FROM diaries
+WHERE updated_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+id title created_at updated_at
+1 clear day 2012-01-29 21:51:01 2012-01-29 21:51:02
+2 rainy day 2012-01-30 01:23:45 2012-01-30 01:23:46
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_tinyint_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_tinyint_without_index.result
new file mode 100644
index 00000000000..8dde1bdde6d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_tinyint_without_index.result
@@ -0,0 +1,18 @@
+drop table if exists books;
+create table books(title varchar(255), published tinyint);
+insert into books values ("MySQL", 1);
+insert into books values ("groonga", 1);
+insert into books values ("mroonga", 0);
+select count(*) from books where published = 0;
+count(*)
+1
+select count(*) from books where published = 1;
+count(*)
+2
+select count(*) from books where published != 2;
+count(*)
+3
+select count(*) from books where published != 1;
+count(*)
+1
+drop table books;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_with_index.result
new file mode 100644
index 00000000000..d16004e3b82
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price BIGINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("house", 18446744073709551615);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("super car", 9223372036854775808);
+SELECT * FROM items;
+name price
+discount 0
+coke 100
+note PC 32767
+super car 9223372036854775808
+house 18446744073709551615
+SELECT * FROM items WHERE price <= 9223372036854775808;
+name price
+discount 0
+coke 100
+note PC 32767
+super car 9223372036854775808
+SELECT * FROM items WHERE price > 9223372036854775807;
+name price
+super car 9223372036854775808
+house 18446744073709551615
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_without_index.result
new file mode 100644
index 00000000000..277580c7710
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_bigint_without_index.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id BIGINT UNSIGNED
+) DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES (317173755057152000);
+INSERT INTO ids VALUES (317173755057152002);
+SELECT * FROM ids;
+id
+317173755057152000
+317173755057152002
+SELECT * FROM ids WHERE id = 317173755057152000;
+id
+317173755057152000
+SELECT * FROM ids WHERE id = 317173755057152002;
+id
+317173755057152002
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_int_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_int_with_index.result
new file mode 100644
index 00000000000..d14ef87702d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_int_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price INT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("car", 4294967295);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 2147483648);
+SELECT * FROM items;
+name price
+discount 0
+coke 100
+note PC 32767
+bike 2147483648
+car 4294967295
+SELECT * FROM items WHERE price <= 2147483648;
+name price
+discount 0
+coke 100
+note PC 32767
+bike 2147483648
+SELECT * FROM items WHERE price > 2147483647;
+name price
+bike 2147483648
+car 4294967295
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_mediumint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_mediumint_with_index.result
new file mode 100644
index 00000000000..2825aadae48
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_mediumint_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price MEDIUMINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("car", 16777215);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 8388607);
+SELECT * FROM items;
+name price
+discount 0
+coke 100
+note PC 32767
+bike 8388607
+car 16777215
+SELECT * FROM items WHERE price <= 8388608;
+name price
+discount 0
+coke 100
+note PC 32767
+bike 8388607
+SELECT * FROM items WHERE price >= 8388607;
+name price
+bike 8388607
+car 16777215
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_smallint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_smallint_with_index.result
new file mode 100644
index 00000000000..8586d091386
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_smallint_with_index.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price SMALLINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("note PC", 65535);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("tablet PC", 32767);
+SELECT * FROM items;
+name price
+discount 0
+coke 100
+tablet PC 32767
+note PC 65535
+SELECT * FROM items WHERE price <= 32768;
+name price
+discount 0
+coke 100
+tablet PC 32767
+SELECT * FROM items WHERE price >= 32767;
+name price
+tablet PC 32767
+note PC 65535
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_tinyint_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_tinyint_with_index.result
new file mode 100644
index 00000000000..90adb048361
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_unsigned_tinyint_with_index.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+name VARCHAR(255),
+price TINYINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+INSERT INTO items VALUES ("hamburger", 255);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+SELECT * FROM items;
+name price
+discount 0
+coke 100
+hamburger 255
+SELECT * FROM items WHERE price <= 100;
+name price
+discount 0
+coke 100
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result
new file mode 100644
index 00000000000..3ee91c1a408
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_year_with_index.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS aniversary_memos;
+CREATE TABLE aniversary_memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+party_year YEAR,
+KEY (party_year)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+Table Create Table
+aniversary_memos CREATE TABLE `aniversary_memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `party_year` year(4) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `party_year` (`party_year`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("We need a big cake!", "11");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Invitations are sent.", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Tommorow is the anniversary party day!", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Wow! Today is the anniversary party day!", "13");
+SELECT * FROM aniversary_memos;
+id title party_year
+1 We need a big cake! 2011
+2 Invitations are sent. 2012
+3 Tommorow is the anniversary party day! 2012
+4 Wow! Today is the anniversary party day! 2013
+SELECT * FROM aniversary_memos
+WHERE party_year BETWEEN "12" AND "2013";
+id title party_year
+2 Invitations are sent. 2012
+3 Tommorow is the anniversary party day! 2012
+4 Wow! Today is the anniversary party day! 2013
+DROP TABLE aniversary_memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result
new file mode 100644
index 00000000000..254a0c0718a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/column_year_without_index.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS aniversary_memos;
+CREATE TABLE aniversary_memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+party_year YEAR
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+Table Create Table
+aniversary_memos CREATE TABLE `aniversary_memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `party_year` year(4) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("We need a big cake!", "11");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Invitations are sent.", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Tommorow is the anniversary party day!", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+VALUES ("Wow! Today is the anniversary party day!", "13");
+SELECT * FROM aniversary_memos;
+id title party_year
+1 We need a big cake! 2011
+2 Invitations are sent. 2012
+3 Tommorow is the anniversary party day! 2012
+4 Wow! Today is the anniversary party day! 2013
+SELECT * FROM aniversary_memos
+WHERE party_year BETWEEN "12" AND "2013";
+id title party_year
+2 Invitations are sent. 2012
+3 Tommorow is the anniversary party day! 2012
+4 Wow! Today is the anniversary party day! 2013
+DROP TABLE aniversary_memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_database_name_slash.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_database_name_slash.result
new file mode 100644
index 00000000000..56c868b2aa9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_database_name_slash.result
@@ -0,0 +1,33 @@
+DROP DATABASE IF EXISTS `master/production`;
+DROP DATABASE IF EXISTS `master/development`;
+CREATE DATABASE `master/production`;
+USE `master/production`;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET=UTF8;
+INSERT INTO diaries (title) VALUES ("clear day (production)");
+INSERT INTO diaries (title) VALUES ("rainy day (production)");
+INSERT INTO diaries (title) VALUES ("cloudy day (production)");
+SELECT * FROM diaries;
+id title
+1 clear day (production)
+2 rainy day (production)
+3 cloudy day (production)
+CREATE DATABASE `master/development`;
+USE `master/development`;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET=UTF8;
+INSERT INTO diaries (title) VALUES ("clear day (development)");
+INSERT INTO diaries (title) VALUES ("rainy day (development)");
+INSERT INTO diaries (title) VALUES ("cloudy day (development)");
+SELECT * FROM diaries;
+id title
+1 clear day (development)
+2 rainy day (development)
+3 cloudy day (development)
+USE test;
+DROP DATABASE `master/production`;
+DROP DATABASE `master/development`;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..d2a00b777ec
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_TODO_SPLIT_ME.result
@@ -0,0 +1,172 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int);
+create table t2 (c1 int);
+create table t3 (c1 int);
+drop table t1,t2,t3;
+create table t1 (c1 int, c2 int, c3 int);
+create table t2 (c1 int primary key, c2 int, c3 int);
+drop table t1,t2;
+create table t1 (c1 bit);
+desc t1;
+Field Type Null Key Default Extra
+c1 bit(1) YES NULL
+drop table t1;
+create table t1 (c1 tinyint);
+desc t1;
+Field Type Null Key Default Extra
+c1 tinyint(4) YES NULL
+drop table t1;
+create table t1 (c1 smallint);
+desc t1;
+Field Type Null Key Default Extra
+c1 smallint(6) YES NULL
+drop table t1;
+create table t1 (c1 mediumint);
+desc t1;
+Field Type Null Key Default Extra
+c1 mediumint(9) YES NULL
+drop table t1;
+create table t1 (c1 int);
+desc t1;
+Field Type Null Key Default Extra
+c1 int(11) YES NULL
+drop table t1;
+create table t1 (c1 bigint);
+desc t1;
+Field Type Null Key Default Extra
+c1 bigint(20) YES NULL
+drop table t1;
+create table t1 (c1 double);
+desc t1;
+Field Type Null Key Default Extra
+c1 double YES NULL
+drop table t1;
+create table t1 (c1 float);
+desc t1;
+Field Type Null Key Default Extra
+c1 float YES NULL
+drop table t1;
+create table t1 (c1 decimal);
+desc t1;
+Field Type Null Key Default Extra
+c1 decimal(10,0) YES NULL
+drop table t1;
+create table t1 (c1 date);
+desc t1;
+Field Type Null Key Default Extra
+c1 date YES NULL
+drop table t1;
+create table t1 (c1 time);
+desc t1;
+Field Type Null Key Default Extra
+c1 time YES NULL
+drop table t1;
+create table t1 (c1 timestamp);
+desc t1;
+Field Type Null Key Default Extra
+c1 timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
+drop table t1;
+create table t1 (c1 datetime);
+desc t1;
+Field Type Null Key Default Extra
+c1 datetime YES NULL
+drop table t1;
+create table t1 (c1 year);
+desc t1;
+Field Type Null Key Default Extra
+c1 year(4) YES NULL
+drop table t1;
+create table t1 (c1 char(10));
+desc t1;
+Field Type Null Key Default Extra
+c1 char(10) YES NULL
+drop table t1;
+create table t1 (c1 varchar(10));
+desc t1;
+Field Type Null Key Default Extra
+c1 varchar(10) YES NULL
+drop table t1;
+create table t1 (c1 binary(10));
+desc t1;
+Field Type Null Key Default Extra
+c1 binary(10) YES NULL
+drop table t1;
+create table t1 (c1 varbinary(10));
+desc t1;
+Field Type Null Key Default Extra
+c1 varbinary(10) YES NULL
+drop table t1;
+create table t1 (c1 tinyblob);
+desc t1;
+Field Type Null Key Default Extra
+c1 tinyblob YES NULL
+drop table t1;
+create table t1 (c1 blob);
+desc t1;
+Field Type Null Key Default Extra
+c1 blob YES NULL
+drop table t1;
+create table t1 (c1 mediumblob);
+desc t1;
+Field Type Null Key Default Extra
+c1 mediumblob YES NULL
+drop table t1;
+create table t1 (c1 longblob);
+desc t1;
+Field Type Null Key Default Extra
+c1 longblob YES NULL
+drop table t1;
+create table t1 (c1 tinytext);
+desc t1;
+Field Type Null Key Default Extra
+c1 tinytext YES NULL
+drop table t1;
+create table t1 (c1 text);
+desc t1;
+Field Type Null Key Default Extra
+c1 text YES NULL
+drop table t1;
+create table t1 (c1 mediumtext);
+desc t1;
+Field Type Null Key Default Extra
+c1 mediumtext YES NULL
+drop table t1;
+create table t1 (c1 longtext);
+desc t1;
+Field Type Null Key Default Extra
+c1 longtext YES NULL
+drop table t1;
+create table t1 (c1 enum("yes","no"));
+desc t1;
+Field Type Null Key Default Extra
+c1 enum('yes','no') YES NULL
+drop table t1;
+create table t1 (c1 set("A","B","AB","O"));
+desc t1;
+Field Type Null Key Default Extra
+c1 set('A','B','AB','O') YES NULL
+drop table t1;
+create table t1 (c1 int, `_id` int) engine = mroonga;
+desc t1;
+Field Type Null Key Default Extra
+c1 int(11) YES NULL
+_id int(11) YES NULL
+drop table t1;
+create table t1 (c1 int, `_score` float) engine = mroonga;
+ERROR HY000: [column][create] name can't start with '_' and contains only 0-9, A-Z, a-z, #, @, - or _: <_score>
+create table t1 (c1 int, `_id` text) engine = mroonga;
+ERROR HY000: _id must be numeric data type
+create table t1 (c1 int, `_id` int, index(`_id`)) engine = mroonga;
+ERROR HY000: only hash index can be defined for _id
+create table t1 (_id int, c1 int, primary key (_id));
+ERROR HY000: only hash index can be defined for _id
+create table t1 (_id int, c1 int, primary key (_id) using hash);
+drop table t1;
+create table t1 (_id int, c1 int, unique key (_id));
+ERROR HY000: only hash index can be defined for _id
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+drop table t1;
+create table t1 (_id int, c1 int, key (_id));
+ERROR HY000: only hash index can be defined for _id
+create table t1 (_id int, c1 int, key (_id) using hash);
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_comment_normal.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_comment_normal.result
new file mode 100644
index 00000000000..edda98cd034
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_comment_normal.result
@@ -0,0 +1,11 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED
+) DEFAULT CHARSET=utf8
+COMMENT='Free style normal comment';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='Free style normal comment'
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result
new file mode 100644
index 00000000000..e14c67291cd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_default_tokenizer.result
@@ -0,0 +1,10 @@
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin
+COMMENT='default_tokenizer "TokenDelimit"';
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create tags TABLE_PAT_KEY ShortText --default_tokenizer TokenDelimit
+column_create tags name COLUMN_SCALAR ShortText
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_fulltext_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_fulltext_index.result
new file mode 100644
index 00000000000..e2d405a1e35
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_fulltext_index.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+day DATE PRIMARY KEY,
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
+) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んã ã€‚");
+SELECT * FROM diaries
+WHERE MATCH (content) AGAINST ("+ãµã‚‰ã¤ã" IN BOOLEAN MODE);
+day content
+SELECT * FROM diaries
+WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE);
+day content
+2013-04-23 ブラックコーヒーを飲んã ã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.result
new file mode 100644
index 00000000000..9d12e2d0e39
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.result
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES latin1;
+CREATE TABLE diaries (
+day DATE PRIMARY KEY,
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerMySQLGeneralCI"'
+) DEFAULT CHARSET=latin1;
+INSERT INTO diaries VALUES ("2013-04-23", "I drunk a black cookie.");
+ERROR HY000: [tokenizer] failed to open normalized string
+SELECT * FROM diaries;
+day content
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_table_comment.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_table_comment.result
new file mode 100644
index 00000000000..dbf69362ee7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_normalizer_table_comment.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+DROP TABLE IF EXISTS terms;
+SET NAMES utf8;
+CREATE TABLE terms (
+term VARCHAR(64) NOT NULL PRIMARY KEY
+) COMMENT='default_tokenizer "TokenBigram", normalizer "NormalizerAuto"' DEFAULT CHARSET=utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content TEXT NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES (1, "1æ—¥ã®æ¶ˆè²»ãŒã¯ç´„2000㌔ãŒ");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("+カロリー" IN BOOLEAN MODE);
+id content
+1 1æ—¥ã®æ¶ˆè²»ãŒã¯ç´„2000㌔ãŒ
+DROP TABLE memos;
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_reference_type.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_reference_type.result
new file mode 100644
index 00000000000..68a6bc8012f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_reference_type.result
@@ -0,0 +1,16 @@
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64) COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create tags TABLE_PAT_KEY ShortText
+column_create tags name COLUMN_SCALAR ShortText
+table_create bugs TABLE_PAT_KEY UInt32
+column_create bugs id COLUMN_SCALAR UInt32
+column_create bugs tag COLUMN_SCALAR tags
+DROP TABLE bugs;
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_multiple_token_filters.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_multiple_token_filters.result
new file mode 100644
index 00000000000..7d762258e6f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_multiple_token_filters.result
@@ -0,0 +1,15 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+SET NAMES utf8;
+CREATE TABLE memos (
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord,TokenFilterStopWord"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_NO_KEY
+column_create memos content COLUMN_SCALAR ShortText
+table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord
+column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_one_token_filter.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_one_token_filter.result
new file mode 100644
index 00000000000..6cc89a7b941
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_index_comment_one_token_filter.result
@@ -0,0 +1,15 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+SET NAMES utf8;
+CREATE TABLE memos (
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_NO_KEY
+column_create memos content COLUMN_SCALAR ShortText
+table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord
+column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_multiple_token_filters.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_multiple_token_filters.result
new file mode 100644
index 00000000000..fe7e0059250
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_multiple_token_filters.result
@@ -0,0 +1,23 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+CREATE TABLE terms (
+term VARCHAR(64) NOT NULL PRIMARY KEY,
+is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord,TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content TEXT NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord
+column_create terms is_stop_word COLUMN_SCALAR Int8
+column_create terms term COLUMN_SCALAR ShortText
+table_create memos TABLE_PAT_KEY Int32
+column_create memos content COLUMN_SCALAR LongText
+column_create memos id COLUMN_SCALAR Int32
+column_create terms content COLUMN_INDEX|WITH_POSITION memos content
+DROP TABLE memos;
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_one_token_filter.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_one_token_filter.result
new file mode 100644
index 00000000000..fe855b60f38
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_token_filters_table_comment_one_token_filter.result
@@ -0,0 +1,23 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+CREATE TABLE terms (
+term VARCHAR(64) NOT NULL PRIMARY KEY,
+is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content TEXT NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord
+column_create terms is_stop_word COLUMN_SCALAR Int8
+column_create terms term COLUMN_SCALAR ShortText
+table_create memos TABLE_PAT_KEY Int32
+column_create memos content COLUMN_SCALAR LongText
+column_create memos id COLUMN_SCALAR Int32
+column_create terms content COLUMN_INDEX|WITH_POSITION memos content
+DROP TABLE memos;
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/create_table_vector.result b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_vector.result
new file mode 100644
index 00000000000..561a266598f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/create_table_vector.result
@@ -0,0 +1,10 @@
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags TEXT COMMENT 'flags "COLUMN_VECTOR"'
+) DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create bugs TABLE_PAT_KEY UInt32
+column_create bugs id COLUMN_SCALAR UInt32
+column_create bugs tags COLUMN_VECTOR LongText
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_fulltext_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_fulltext_column.result
new file mode 100644
index 00000000000..5fb52294758
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_fulltext_column.result
@@ -0,0 +1,21 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index (c2));
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ka ki ku ke
+30 sa si su se
+select * from t1 where match(c2) against("ki");
+c1 c2
+20 ka ki ku ke
+delete from t1 where c1=20;
+select * from t1;
+c1 c2
+10 aa ii uu ee
+30 sa si su se
+select * from t1 where match(c2) against("ki");
+c1 c2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_btree_many_records.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_btree_many_records.result
new file mode 100644
index 00000000000..f318e1255fe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_btree_many_records.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT,
+KEY (id)
+) DEFAULT CHARSET UTF8;
+INSERT INTO ids VALUES(1);
+INSERT INTO ids VALUES(2);
+INSERT INTO ids VALUES(3);
+SELECT * FROM ids ORDER BY id;
+id
+1
+2
+3
+DELETE FROM ids WHERE id = 1;
+SELECT * FROM ids ORDER BY id;
+id
+2
+3
+DELETE FROM ids WHERE id = 2;
+SELECT * FROM ids ORDER BY id;
+id
+3
+DELETE FROM ids WHERE id = 3;
+SELECT * FROM ids ORDER BY id;
+id
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_no_unique.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_no_unique.result
new file mode 100644
index 00000000000..76a4ed8835b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_no_unique.result
@@ -0,0 +1,19 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, c1 int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id c1
+1 100
+2 100
+3 100
+4 100
+delete from t1 where _id = 2;
+select * from t1;
+_id c1
+1 100
+3 100
+4 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_unique.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_unique.result
new file mode 100644
index 00000000000..6307c55fcc0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_index_hash_id_unique.result
@@ -0,0 +1,19 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id c1
+1 100
+2 100
+3 100
+4 100
+delete from t1 where _id = 2;
+select * from t1;
+_id c1
+1 100
+3 100
+4 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_normal_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_normal_column.result
new file mode 100644
index 00000000000..7503c0b801e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_normal_column.result
@@ -0,0 +1,34 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int, c2 int);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) DEFAULT NULL,
+ `c2` int(11) DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+insert into t1 values (4, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+4 102
+delete from t1 where c1=3;
+select * from t1;
+c1 c2
+1 100
+2 101
+4 102
+flush tables;
+delete from t1 where c1=2;
+select * from t1;
+c1 c2
+1 100
+4 102
+delete from t1;
+select * from t1;
+c1 c2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/delete_unsigned_bigint.result b/storage/mroonga/mysql-test/mroonga/storage/r/delete_unsigned_bigint.result
new file mode 100644
index 00000000000..23cc23eeef6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/delete_unsigned_bigint.result
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS numbers;
+CREATE TABLE numbers (
+data BIGINT UNSIGNED
+);
+INSERT INTO numbers VALUES(18446744073709551615);
+SELECT * FROM numbers ORDER BY data;
+data
+18446744073709551615
+DELETE FROM numbers WHERE data = 18446744073709551615;
+SELECT * FROM numbers ORDER BY data;
+data
+DROP TABLE numbers;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..4bd97162a6b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/drop_database_TODO_SPLIT_ME.result
@@ -0,0 +1,14 @@
+drop database if exists groonga;
+create database groonga;
+drop database groonga;
+create database groonga;
+use groonga;
+create table t1 (c1 int primary key, c2 varchar(255)) default charset utf8;
+create table t2 (c1 int primary key, c2 varchar(255)) default charset utf8;
+drop database groonga;
+create database groonga;
+use groonga;
+create table t1 (c1 int primary key, c2 varchar(255)) default charset utf8;
+create table t2 (c1 int primary key, c2 varchar(255)) default charset utf8;
+drop table t1, t2;
+drop database groonga;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/drop_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/drop_table_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..99896765e28
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/drop_table_TODO_SPLIT_ME.result
@@ -0,0 +1,5 @@
+drop table if exists alphabet, `with-hyphen`;
+create table alphabet (c1 int primary key, c2 int, c3 int);
+drop table alphabet;
+create table `with-hyphen` (c1 int primary key, c2 int, c3 int);
+drop table `with-hyphen`;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/flush_logs.result b/storage/mroonga/mysql-test/mroonga/storage/r/flush_logs.result
new file mode 100644
index 00000000000..449f6437501
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/flush_logs.result
@@ -0,0 +1 @@
+flush logs;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result b/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result
new file mode 100644
index 00000000000..fc550d97f87
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/foreign_key_create.result
@@ -0,0 +1,147 @@
+drop table if exists articles2;
+drop table if exists articles;
+drop table if exists comments2;
+drop table if exists comments;
+create table comments(
+comment int unsigned,
+content text not null,
+primary key(comment)
+);
+create table articles(
+content text not null,
+comment int unsigned,
+FOREIGN KEY (comment) REFERENCES comments (comment)
+);
+insert into comments (comment, content) values
+(1, 'aaa bbb'),(2, 'ccc ddd'),(3, 'eee fff');
+insert into articles (content, comment) values
+('111aaa', 1),('222bbb', 2),('222ccc', 2);
+select comment, content from comments;
+comment content
+1 aaa bbb
+2 ccc ddd
+3 eee fff
+select content, comment from articles;
+content comment
+111aaa 1
+222bbb 2
+222ccc 2
+show create table comments;
+Table Create Table
+comments CREATE TABLE `comments` (
+ `comment` int(10) unsigned NOT NULL DEFAULT '0',
+ `content` text NOT NULL,
+ PRIMARY KEY (`comment`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+show create table articles;
+Table Create Table
+articles CREATE TABLE `articles` (
+ `content` text NOT NULL,
+ `comment` int(10) unsigned DEFAULT NULL,
+ KEY `comment` (`comment`),
+ CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+select * from information_schema.referential_constraints;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
+def test comment def test PRIMARY NONE RESTRICT RESTRICT articles comments
+rename table comments to comments2;
+rename table articles to articles2;
+create table comments(
+comment int unsigned,
+content text not null,
+primary key(comment)
+);
+create table articles(
+content text not null,
+comment int unsigned,
+FOREIGN KEY (comment) REFERENCES comments (comment)
+);
+insert into comments (comment, content) values
+(1, 'ab'),(2, 'cd'),(3, 'ef');
+insert into articles (content, comment) values
+('1a', 1),('2b', 2),('2c', 2);
+select comment, content from comments;
+comment content
+1 ab
+2 cd
+3 ef
+select content, comment from articles;
+content comment
+1a 1
+2b 2
+2c 2
+select comment, content from comments2;
+comment content
+1 aaa bbb
+2 ccc ddd
+3 eee fff
+select content, comment from articles2;
+content comment
+111aaa 1
+222bbb 2
+222ccc 2
+show create table comments;
+Table Create Table
+comments CREATE TABLE `comments` (
+ `comment` int(10) unsigned NOT NULL DEFAULT '0',
+ `content` text NOT NULL,
+ PRIMARY KEY (`comment`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+show create table articles;
+Table Create Table
+articles CREATE TABLE `articles` (
+ `content` text NOT NULL,
+ `comment` int(10) unsigned DEFAULT NULL,
+ KEY `comment` (`comment`),
+ CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+show create table comments2;
+Table Create Table
+comments2 CREATE TABLE `comments2` (
+ `comment` int(10) unsigned NOT NULL DEFAULT '0',
+ `content` text NOT NULL,
+ PRIMARY KEY (`comment`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+show create table articles2;
+Table Create Table
+articles2 CREATE TABLE `articles2` (
+ `content` text NOT NULL,
+ `comment` int(10) unsigned DEFAULT NULL,
+ KEY `comment` (`comment`),
+ CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments2` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+select * from information_schema.referential_constraints;
+CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME UNIQUE_CONSTRAINT_CATALOG UNIQUE_CONSTRAINT_SCHEMA UNIQUE_CONSTRAINT_NAME MATCH_OPTION UPDATE_RULE DELETE_RULE TABLE_NAME REFERENCED_TABLE_NAME
+def test comment def test PRIMARY NONE RESTRICT RESTRICT articles comments
+def test comment def test PRIMARY NONE RESTRICT RESTRICT articles2 comments2
+alter table articles drop foreign key comment;
+show create table articles;
+Table Create Table
+articles CREATE TABLE `articles` (
+ `content` text NOT NULL,
+ `comment` int(10) unsigned DEFAULT NULL,
+ KEY `comment` (`comment`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+select content, comment from articles;
+content comment
+1a 1
+2b 2
+2c 2
+alter table articles add FOREIGN KEY (comment) REFERENCES comments (comment);
+show create table articles;
+Table Create Table
+articles CREATE TABLE `articles` (
+ `content` text NOT NULL,
+ `comment` int(10) unsigned DEFAULT NULL,
+ KEY `comment` (`comment`),
+ CONSTRAINT `comment` FOREIGN KEY (`comment`) REFERENCES `test`.`comments` (`comment`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+select content, comment from articles;
+content comment
+1a 1
+2b 2
+2c 2
+drop table articles2;
+drop table articles;
+drop table comments2;
+drop table comments;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_empty_query.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_empty_query.result
new file mode 100644
index 00000000000..96c6ae4150c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_empty_query.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *
+FROM diaries
+WHERE MATCH(title) AGAINST("" IN BOOLEAN MODE);
+title
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result
new file mode 100644
index 00000000000..a48eb25dece
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_escape.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT PRIMARY KEY,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("\\(groonga\\)*" IN BOOLEAN MODE);
+id content
+1 (groonga) Installed!
+3 (groonga) Upgraded!
+DROP TABLE memos;
+SET GLOBAL mroonga_default_parser = TokenBigram;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result
new file mode 100644
index 00000000000..d0e1a68f76b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_leading_not.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("-明日 +天気" IN BOOLEAN MODE);
+id title content
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result
new file mode 100644
index 00000000000..d10b5dad815
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- fine is be" IN BOOLEAN MODE);
+content
+Yesterday was fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result
new file mode 100644
index 00000000000..82c7e799fd4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- is OR be fine" IN BOOLEAN MODE);
+content
+Today is good day.
+Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result
new file mode 100644
index 00000000000..c4c7b0e8546
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- good +day be" IN BOOLEAN MODE);
+content
+Today is good day.
+Yesterday was good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result
new file mode 100644
index 00000000000..f45e8fd4fb6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE);
+content
+Today is good day.
+Today is fine.
+Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result
new file mode 100644
index 00000000000..103866902c2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE);
+content
+Tomorrow will be good day.
+Today is fine.
+Tomorrow will be fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result
new file mode 100644
index 00000000000..fd52868b4bc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE);
+content
+Today is good day.
+Tomorrow will be good day.
+Tomorrow will be fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result
new file mode 100644
index 00000000000..4d1f65923c4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result
@@ -0,0 +1,14 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today good" IN BOOLEAN MODE);
+content
+Today is good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result
new file mode 100644
index 00000000000..deda6f3bb1a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result
@@ -0,0 +1,14 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today -good is" IN BOOLEAN MODE);
+content
+Today is fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result
new file mode 100644
index 00000000000..2d25388fada
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today OR tomorrow day" IN BOOLEAN MODE);
+content
+Today is good day.
+Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_full_spec.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_full_spec.result
new file mode 100644
index 00000000000..b8f15d9847e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_full_spec.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠12
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 2
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_no_weight.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_no_weight.result
new file mode 100644
index 00000000000..42aa068a547
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_no_weight.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1,2:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1,2:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠3
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 2
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_omit_section.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_omit_section.result
new file mode 100644
index 00000000000..c73d2660d54
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_omit_section.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠3
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.result
new file mode 100644
index 00000000000..b1b9d5f4f41
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.result
@@ -0,0 +1,39 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+title VARCHAR(255),
+tag1 VARCHAR(10),
+tag2 VARCHAR(10),
+tag3 VARCHAR(10),
+tag4 VARCHAR(10),
+tag5 VARCHAR(10),
+tag6 VARCHAR(10),
+tag7 VARCHAR(10),
+tag8 VARCHAR(10),
+tag9 VARCHAR(10),
+tag10 VARCHAR(10),
+FULLTEXT INDEX (tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+) DEFAULT CHARSET=utf8;
+INSERT INTO memos
+VALUES("Groonga",
+"tag 1",
+"tag 2",
+"tag 3",
+"tag 4",
+"tag 5",
+"tag 6",
+"tag 7",
+"tag 8",
+"tag 9",
+"tag 10");
+SELECT title,
+MATCH(tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+AGAINST("*W1:2,2:4,3:6,4:8,5:10,6:12,7:14,8:16,9:18,10:20 +tag"
+ in BOOLEAN MODE) AS score
+FROM memos
+WHERE MATCH(tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+AGAINST("*W1:2,2:4,3:6,4:8,5:10,6:12,7:14,8:16,9:18,10:20 +tag"
+ in BOOLEAN MODE);
+title score
+Groonga 110
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_three_or_more_sections.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_three_or_more_sections.result
new file mode 100644
index 00000000000..02db17e61da
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_pragma_weight_three_or_more_sections.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+category VARCHAR(10),
+content TEXT,
+FULLTEXT INDEX (title, category, content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES(1, "Hello", "日記", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気予報", "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "天気", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, category, content)
+AGAINST("*W1:2,2:10,3:1 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, category, content)
+AGAINST("*W1:2,2:10,3:1 +天気" in BOOLEAN MODE);
+id title category content score
+2 天気予報 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠13
+3 富士山 天気 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 11
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result
new file mode 100644
index 00000000000..5746ce89cb7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS memos;
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = ERROR;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT PRIMARY KEY,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+ERROR 42000: failed to parse fulltext search keyword: <(groonga>: <Syntax error: <(groonga||>>
+DROP TABLE memos;
+SET GLOBAL mroonga_default_parser = TokenBigram;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result
new file mode 100644
index 00000000000..1811994b67e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_error_and_log.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS memos;
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = ERROR_AND_LOG;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT PRIMARY KEY,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+ERROR 42000: failed to parse fulltext search keyword: <(groonga>: <Syntax error: <(groonga||>>
+DROP TABLE memos;
+SET GLOBAL mroonga_default_parser = TokenBigram;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result
new file mode 100644
index 00000000000..6a4759963a3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS memos;
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = "IGNORE";
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT PRIMARY KEY,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+id content
+DROP TABLE memos;
+SET GLOBAL mroonga_default_parser = TokenBigram;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result
new file mode 100644
index 00000000000..384d677c427
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_boolean_mode_syntax_error_ignore_and_log.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS memos;
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = IGNORE_AND_LOG;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT PRIMARY KEY,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+id content
+DROP TABLE memos;
+SET GLOBAL mroonga_default_parser = TokenBigram;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_ascii.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_ascii.result
new file mode 100644
index 00000000000..c542ba1adae
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_ascii.result
@@ -0,0 +1,29 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("su");
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("ii");
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("+su" in boolean mode);
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("+ii" in boolean mode);
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_cp932.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_cp932.result
new file mode 100644
index 00000000000..bd208d520c5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_cp932.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932;
+insert into t1 values(1, "–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä","‚ ‚ ‚ ‚ ‚ ‚ ‚ ");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä ‚ ‚ ‚ ‚ ‚ ‚ ‚ 
+2 ‚¢‚¢‚¢‚¢‚¢ –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ
+3 dummy dummy
+select * from t1 where match(c2) against("•xŽmŽR");
+c1 c2 c3
+1 –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä ‚ ‚ ‚ ‚ ‚ ‚ ‚ 
+select * from t1 where match(c3) against("•xŽmŽR");
+c1 c2 c3
+2 ‚¢‚¢‚¢‚¢‚¢ –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_eucjpms.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_eucjpms.result
new file mode 100644
index 00000000000..51360875cf1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_eucjpms.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms;
+insert into t1 values(1, "ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ","¤¢¤¢¤¢¤¢¤¢¤¢¤¢");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ ¤¢¤¢¤¢¤¢¤¢¤¢¤¢
+2 ¤¤¤¤¤¤¤¤¤¤ ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó
+3 dummy dummy
+select * from t1 where match(c2) against("Éٻλ³");
+c1 c2 c3
+1 ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ ¤¢¤¢¤¢¤¢¤¢¤¢¤¢
+select * from t1 where match(c3) against("Éٻλ³");
+c1 c2 c3
+2 ¤¤¤¤¤¤¤¤¤¤ ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_japanese.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_japanese.result
new file mode 100644
index 00000000000..cfff3f2e29b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_japanese.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8;
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+3 dummy dummy
+select * from t1 where match(c2) against("富士山");
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+select * from t1 where match(c3) against("富士山");
+c1 c2 c3
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result
new file mode 100644
index 00000000000..31d45181c96
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_charset_utf8mb4.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8mb4;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255) CHARSET utf8mb4 COLLATE utf8mb4_general_ci,
+content TEXT CHARSET utf8mb4 COLLATE utf8mb4_general_ci,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET utf8mb4;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4
+INSERT INTO diaries VALUES(1, "Alphabet", "ABCDE");
+INSERT INTO diaries VALUES(2, "Mathmatics", "ð€ðð‚ðƒð„ | U+1D400-U+1D405");
+INSERT INTO diaries VALUES(3, "ã²ã‚‰ãŒãª", "ã‚ã„ã†ãˆãŠ");
+SELECT *
+FROM diaries
+WHERE MATCH (content) AGAINST("ABCDE" IN BOOLEAN MODE);
+id title content
+1 Alphabet ABCDE
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_empty_query.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_empty_query.result
new file mode 100644
index 00000000000..bb7b3b63752
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_empty_query.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *
+FROM diaries
+WHERE MATCH(title) AGAINST("");
+title
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result
new file mode 100644
index 00000000000..c107991d151
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_found_rows.result
@@ -0,0 +1,42 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT SQL_CALC_FOUND_ROWS * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+id year month day title content
+5 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+6 2011 12 2 åˆé›ª 今日ã®å¤©æ°—ã¯é›ªï¼
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SELECT FOUND_ROWS();
+FOUND_ROWS()
+6
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_groonga_varchar_vector.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_groonga_varchar_vector.result
new file mode 100644
index 00000000000..a23d8e5b542
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_groonga_varchar_vector.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS bugs, tags;
+CREATE TABLE tags (
+name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COLLATE=utf8_bin
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tags VARCHAR(40) COMMENT 'type "tags", flags "COLUMN_VECTOR"',
+FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL");
+INSERT INTO bugs (id, tags) VALUES (2, "MySQL groonga");
+INSERT INTO bugs (id, tags) VALUES (3, "mroonga");
+SELECT *
+FROM bugs
+WHERE MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE);
+id tags
+1 Linux MySQL
+2 MySQL groonga
+DROP TABLE bugs, tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result
new file mode 100644
index 00000000000..04996d30f36
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_index_recreate.result
@@ -0,0 +1,41 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+drop index title on diaries;
+select * from diaries where match(title) against("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+create fulltext index new_title_index on diaries (title);
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_select.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_select.result
new file mode 100644
index 00000000000..6c268ff7641
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_select.result
@@ -0,0 +1,66 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8;
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8;
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t2;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t2 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t1 where c1>3 order by c1 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c1>3 order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c2>"s" order by c2 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c2>"s" order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+c1 c2
+3 aa ii ii ii oo
+5 ta ti ii ii to
+1 aa ii uu ee oo
+select * from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+c1 c2
+1 aa ii uu ee oo
+5 ta ti ii ii to
+3 aa ii ii ii oo
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+select c1,c2,match(c2) against("ii") from t2 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+drop table t1,t2;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result
new file mode 100644
index 00000000000..623c66daaf4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_insert_values.result
@@ -0,0 +1,25 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` text,
+ PRIMARY KEY (`c1`),
+ FULLTEXT KEY `ft` (`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+flush tables;
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result
new file mode 100644
index 00000000000..843c4b958ba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_delete.result
@@ -0,0 +1,34 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+delete from diaries where id = 2;
+select * from diaries where match(title, content) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(content) against("富士山");
+id title content
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result
new file mode 100644
index 00000000000..3856d7ecc10
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_insert.result
@@ -0,0 +1,40 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result
new file mode 100644
index 00000000000..59b26574c73
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_recreate.result
@@ -0,0 +1,42 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+drop index title on diaries;
+select * from diaries where match(title, content) against("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+create fulltext index new_title_content_index on diaries (title, content);
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result
new file mode 100644
index 00000000000..d17ff6adf83
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_column_index_update.result
@@ -0,0 +1,37 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+update diaries set title = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒž" where id = 3;
+update diaries set content = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±" where id = 1;
+select * from diaries where match(title, content) against("富士山");
+id title content
+1 Hello ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+select * from diaries where match(title) against("富士山");
+id title content
+select * from diaries where match(content) against("富士山");
+id title content
+1 Hello ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result
new file mode 100644
index 00000000000..81b40261a4c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_multiple_index.result
@@ -0,0 +1,33 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+title text,
+body text,
+fulltext index title_index (title),
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (title, body) values ("survey", "will start groonga!");
+insert into diaries (title, body) values ("groonga (1)", "starting groonga...");
+insert into diaries (title, body) values ("groonga (2)", "started groonga.");
+select * from diaries
+where match(title) against("survey") and
+match(body) against("groonga");
+id title body
+1 survey will start groonga!
+select *, match(title) against("survey"), match(body) against("groonga")
+from diaries
+where match(title) against("survey") and
+match(body) against("groonga");
+id title body match(title) against("survey") match(body) against("groonga")
+1 survey will start groonga! 1048577 149797
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result
new file mode 100644
index 00000000000..5f85632575b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_no_primary_key.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES("Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES("天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES("富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("*D+ 今日 天気" IN BOOLEAN MODE);
+title content
+富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_not_match_against.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_not_match_against.result
new file mode 100644
index 00000000000..2c1666369a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_not_match_against.result
@@ -0,0 +1,68 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select * from t1 where match(c3) against("uu");
+c1 c2 c3
+1 10 aa ii uu ee oo
+3 10 aa ii uu ee oo
+5 20 aa ii uu ee oo
+7 20 aa ii uu ee oo
+select * from t1 where not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where match(c3) against("dummy");
+c1 c2 c3
+select * from t1 where not match(c3) against("dummy");
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+c1 c2 c3
+4 10 ka ki ku ke ko
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_or.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_or.result
new file mode 100644
index 00000000000..f1f7888ceeb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_or.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *
+FROM diaries
+WHERE MATCH(title) AGAINST("Ruby" IN BOOLEAN MODE) OR
+MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+title
+Start mroonga
+Start groonga and Ruby
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_against.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_against.result
new file mode 100644
index 00000000000..d1f0d6bc0ab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_against.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title) AGAINST("groonga mroonga" IN BOOLEAN MODE)
+ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+title score
+Start mroonga 0
+Start groonga 1
+Start groonga and Ruby 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_match.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_match.result
new file mode 100644
index 00000000000..b4a07cd0b66
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_different_match.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+body TEXT,
+FULLTEXT KEY (title),
+FULLTEXT KEY (body)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga", "I read groonga's tutorial.");
+INSERT INTO diaries VALUES("Start mroonga", "I read mroonga's tutorial.");
+INSERT INTO diaries VALUES("Start groonga and Ruby", "I installed rroonga.");
+SELECT * FROM diaries;
+title body
+Start groonga I read groonga's tutorial.
+Start mroonga I read mroonga's tutorial.
+Start groonga and Ruby I installed rroonga.
+SELECT *, MATCH(body) AGAINST("groonga" IN BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE)
+ORDER BY MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+title body score
+Start groonga and Ruby I installed rroonga. 0
+Start groonga I read groonga's tutorial. 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_no_where.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_no_where.result
new file mode 100644
index 00000000000..125b35fb96e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_no_where.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+FROM diaries
+ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+title score
+Start mroonga 0
+Start groonga 1
+Start groonga and Ruby 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_same_match_against.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_same_match_against.result
new file mode 100644
index 00000000000..a3a668c4445
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_order_same_match_against.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT * FROM diaries;
+title
+Start groonga
+Start mroonga
+Start groonga and Ruby
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE)
+ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+title score
+Start groonga 1
+Start groonga and Ruby 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_comment.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_comment.result
new file mode 100644
index 00000000000..f2abfe85dd6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_comment.result
@@ -0,0 +1,29 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+comment 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+select * from diaries where match(body) against("start");
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_default.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_default.result
new file mode 100644
index 00000000000..6c04cae59f2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_default.result
@@ -0,0 +1,33 @@
+drop table if exists diaries;
+set @mroonga_default_parser_backup=@@mroonga_default_parser;
+set global mroonga_default_parser=TokenBigramSplitSymbolAlphaDigit;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+insert into diaries (body) values ("finished groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+4 finished groonga.
+select * from diaries where match(body) against("start");
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+drop table diaries;
+set global mroonga_default_parser=@mroonga_default_parser_backup;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_off.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_off.result
new file mode 100644
index 00000000000..77765f61dc3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_parser_off.result
@@ -0,0 +1,42 @@
+DROP TABLE IF EXISTS variables;
+CREATE TABLE variables (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name TEXT,
+FULLTEXT INDEX (name) COMMENT 'parser "off"'
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE variables;
+Table Create Table
+variables CREATE TABLE `variables` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `name` (`name`) COMMENT 'parser "off"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix");
+INSERT INTO variables (name) VALUES ("mroonga_default_parser");
+INSERT INTO variables (name) VALUES ("mroonga_default_wrapper_engine");
+INSERT INTO variables (name) VALUES ("mroonga_dry_write");
+INSERT INTO variables (name) VALUES ("mroonga_enable_optimization");
+INSERT INTO variables (name) VALUES ("mroonga_libgroonga_version");
+INSERT INTO variables (name) VALUES ("mroonga_log_file");
+INSERT INTO variables (name) VALUES ("mroonga_log_level");
+INSERT INTO variables (name) VALUES ("mroonga_match_escalation_threshold");
+INSERT INTO variables (name) VALUES ("mroonga_version");
+SELECT * FROM variables;
+id name
+1 mroonga_database_path_prefix
+2 mroonga_default_parser
+3 mroonga_default_wrapper_engine
+4 mroonga_dry_write
+5 mroonga_enable_optimization
+6 mroonga_libgroonga_version
+7 mroonga_log_file
+8 mroonga_log_level
+9 mroonga_match_escalation_threshold
+10 mroonga_version
+SELECT * FROM variables
+WHERE MATCH (name) AGAINST ("mroonga_default*" IN BOOLEAN MODE);
+id name
+3 mroonga_default_wrapper_engine
+2 mroonga_default_parser
+DROP TABLE variables;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_token_filters_skip.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_token_filters_skip.result
new file mode 100644
index 00000000000..290f96df35d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_token_filters_skip.result
@@ -0,0 +1,23 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+CREATE TABLE terms (
+term VARCHAR(64) NOT NULL PRIMARY KEY,
+is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content TEXT NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+INSERT INTO terms VALUES ("and", true);
+INSERT INTO memos VALUES (1, "Hello");
+INSERT INTO memos VALUES (2, "Hello and Good-bye");
+INSERT INTO memos VALUES (3, "Good-bye");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("+\"Hello and\"" IN BOOLEAN MODE);
+id content
+1 Hello
+2 Hello and Good-bye
+DROP TABLE memos;
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_two_inner_join.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_two_inner_join.result
new file mode 100644
index 00000000000..e39790ed5be
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_two_inner_join.result
@@ -0,0 +1,41 @@
+DROP TABLE IF EXISTS users, posts, comments;
+SET NAMES utf8;
+CREATE TABLE users (
+id int NOT NULL,
+name varchar(50) NOT NULL,
+PRIMARY KEY (id),
+KEY (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE posts (
+id int NOT NULL,
+content mediumtext,
+user_id int NOT NULL,
+PRIMARY KEY (id),
+FULLTEXT KEY (content)
+) DEFAULT CHARSET=utf8;
+CREATE TABLE comments (
+id int NOT NULL,
+user_id int NOT NULL,
+post_id int NOT NULL,
+PRIMARY KEY (id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+INSERT INTO users VALUES (1, "Alice"),
+(2, "Bob"),
+(3, "Calros");
+INSERT INTO posts VALUES (1, "Hello!", 1),
+(2, "World!", 2),
+(3, "Great!", 3);
+INSERT INTO comments VALUES (1, 1, 1),
+(2, 2, 1),
+(3, 3, 3);
+SELECT *
+FROM comments
+INNER JOIN posts
+ON posts.id = comments.post_id AND
+MATCH (posts.content) AGAINST ("Hello!" IN BOOLEAN MODE)
+INNER JOIN users
+ON users.id = comments.user_id AND
+users.name = "Alice";
+id user_id post_id id content user_id id name
+1 1 1 1 Hello! 1 1 Alice
+DROP TABLE users, posts, comments;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result
new file mode 100644
index 00000000000..d3ac2387586
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_100_no_such_key.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries FORCE INDEX(primary)
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result
new file mode 100644
index 00000000000..5f7bc98a3d3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_55_no_such_key.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries FORCE INDEX(primary)
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+id title body
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result
new file mode 100644
index 00000000000..d3ac2387586
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/fulltext_version_56_no_such_key.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries FORCE INDEX(primary)
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_command_select.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_command_select.result
new file mode 100644
index 00000000000..1551d32c971
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_command_select.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT mroonga_command('select diaries --match_columns "title" --query "groonga"');
+mroonga_command('select diaries --match_columns "title" --query "groonga"')
+[[[2],[["_id","UInt32"],["title","LongText"]],[1,"Start groonga"],[3,"Start groonga and Ruby"]]]
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_missing.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_missing.result
new file mode 100644
index 00000000000..98213e81eb9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_missing.result
@@ -0,0 +1,3 @@
+SET NAMES UTF8;
+SELECT mroonga_escape() AS escaped_query;
+ERROR HY000: Can't initialize function 'mroonga_escape'; mroonga_escape(): Incorrect number of arguments: 0 for 1..2
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result
new file mode 100644
index 00000000000..c1762458199
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_query_is_not_string.result
@@ -0,0 +1,3 @@
+SET NAMES UTF8;
+SELECT mroonga_escape(29) AS escaped_query;
+ERROR HY000: Can't initialize function 'mroonga_escape'; mroonga_escape(): The 1st argument must be query as string
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_target_characters_is_not_string.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_target_characters_is_not_string.result
new file mode 100644
index 00000000000..77dc420f0c5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_error_target_characters_is_not_string.result
@@ -0,0 +1,3 @@
+SET NAMES UTF8;
+SELECT mroonga_escape('+-><~*()\"\\:', 29) AS escaped_query;
+ERROR HY000: Can't initialize function 'mroonga_escape'; mroonga_escape(): The 2st argument must be escape target characters as string
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result
new file mode 100644
index 00000000000..b002262a83f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_all.result
@@ -0,0 +1,4 @@
+SET NAMES UTF8;
+SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query;
+escaped_query
+\+\-\>\<\~\*\(\)\"\\\:
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result
new file mode 100644
index 00000000000..c2e7d8f50ef
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_custom.result
@@ -0,0 +1,4 @@
+SET NAMES UTF8;
+SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query;
+escaped_query
++-\>\<\~*\(\)"\:
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result
new file mode 100644
index 00000000000..5a57c144891
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_escape_success_nested.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries(
+title TEXT,
+FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+SELECT mroonga_escape(mroonga_escape('*groonga*'));
+mroonga_escape(mroonga_escape('*groonga*'))
+\\\*groonga\\\*
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_grn_id.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_grn_id.result
new file mode 100644
index 00000000000..42064b7f189
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_grn_id.result
@@ -0,0 +1,28 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, c1 int);
+select last_insert_grn_id();
+last_insert_grn_id()
+0
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+last_insert_grn_id()
+2
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+last_insert_grn_id()
+4
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+last_insert_grn_id()
+6
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+last_insert_grn_id()
+8
+select last_insert_grn_id(1);
+ERROR HY000: Can't initialize function 'last_insert_grn_id'; last_insert_grn_id must not have arguments
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_reference.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_reference.result
new file mode 100644
index 00000000000..b0db86cb5ec
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_reference.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id int AUTO_INCREMENT PRIMARY KEY
+);
+SELECT last_insert_id();
+last_insert_id()
+0
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+last_insert_id()
+1
+SELECT * FROM ids;
+id
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_set.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_set.result
new file mode 100644
index 00000000000..ec6f2f98462
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_last_insert_id_set.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id int AUTO_INCREMENT PRIMARY KEY
+);
+SELECT last_insert_id();
+last_insert_id()
+0
+SELECT last_insert_id(10);
+last_insert_id(10)
+10
+SELECT last_insert_id();
+last_insert_id()
+10
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+last_insert_id()
+1
+SELECT * FROM ids;
+id
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_ascii.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_ascii.result
new file mode 100644
index 00000000000..5766f822ee3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_ascii.result
@@ -0,0 +1,120 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa bb cc dd ee >< ff gg hh ii jj kk ll mm nn");
+insert into t1 values(2,20,"nn mm ll kk jj >< ii hh gg ff ee dd cc bb aa");
+insert into t1 values(3,30,"cc dd ee ff gg >< hh ii jj kk ll mm nn oo pp");
+insert into t1 values(4,40,"ee ff gg hh ii >< jj kk ll mm nn oo pp qq rr");
+insert into t1 values(5,50,"AA BB CC DD EE >< FF GG HH II JJ KK LL MM NN");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>')
+1 10 ...a<span class="w1"> bb</span> cc<span class="w3"> dd</span>...<br>
+...e &gt;&lt;<span class="w2"> ff</span> gg...<br>
+
+2 20 ...g<span class="w2"> ff</span> ee<span class="w3"> dd</span>...<br>
+... cc<span class="w1"> bb</span> aa...<br>
+
+3 30 ...c<span class="w3"> dd</span> ee<span class="w2"> ff</span>...<br>
+
+4 40 ...ee<span class="w2"> ff</span> gg h...<br>
+
+5 50 ...A<span class="w1"> BB</span> CC<span class="w3"> DD</span>...<br>
+...E &gt;&lt;<span class="w2"> FF</span> GG...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>')
+1 10 ... <span class="w1">bb</span> cc <span class="w3">dd</span> ...<br>
+... &gt;&lt; <span class="w2">ff</span> gg ...<br>
+
+2 20 ... <span class="w2">ff</span> ee <span class="w3">dd</span> ...<br>
+...cc <span class="w1">bb</span> aa...<br>
+
+3 30 ... <span class="w3">dd</span> ee <span class="w2">ff</span> ...<br>
+
+4 40 ...ee <span class="w2">ff</span> gg h...<br>
+
+5 50
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>')
+1 10 ... <span class="w1">bb</span> cc <span class="w3">dd</span> ...<br>
+... &gt;&lt; <span class="w2">ff</span> gg ...<br>
+
+2 20 ... <span class="w2">ff</span> ee <span class="w3">dd</span> ...<br>
+...cc <span class="w1">bb</span> aa...<br>
+
+3 30 ... <span class="w3">dd</span> ee <span class="w2">ff</span> ...<br>
+
+4 40 ...ee <span class="w2">ff</span> gg h...<br>
+
+5 50 ... <span class="w1">BB</span> CC <span class="w3">DD</span> ...<br>
+... &gt;&lt; <span class="w2">FF</span> GG ...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>')
+1 10 ... <span class="w1">bb</span> cc <span class="w3">dd</span> ...<br>
+... &gt;&lt; <span class="w2">ff</span> gg ...<br>
+
+2 20 ... <span class="w2">ff</span> ee <span class="w3">dd</span> ...<br>
+...cc <span class="w1">bb</span> aa...<br>
+
+3 30 ... <span class="w3">dd</span> ee <span class="w2">ff</span> ...<br>
+
+4 40 ...ee <span class="w2">ff</span> gg h...<br>
+
+5 50
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']')
+1 10 ...a(w1)[ bb] cc(w3)[ dd]...
+...e ><(w2)[ ff] gg...
+
+2 20 ...g(w2)[ ff] ee(w3)[ dd]...
+... cc(w1)[ bb] aa...
+
+3 30 ...c(w3)[ dd] ee(w2)[ ff]...
+
+4 40 ...ee(w2)[ ff] gg h...
+
+5 50 ...A(w1)[ BB] CC(w3)[ DD]...
+...E ><(w2)[ FF] GG...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']')
+1 10 ... (w1)[bb] cc (w3)[dd] ...
+... >< (w2)[ff] gg ...
+
+2 20 ... (w2)[ff] ee (w3)[dd] ...
+...cc (w1)[bb] aa...
+
+3 30 ... (w3)[dd] ee (w2)[ff] ...
+
+4 40 ...ee (w2)[ff] gg h...
+
+5 50
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']')
+1 10 ... (w1)[bb] cc (w3)[dd] ...
+... >< (w2)[ff] gg ...
+
+2 20 ... (w2)[ff] ee (w3)[dd] ...
+...cc (w1)[bb] aa...
+
+3 30 ... (w3)[dd] ee (w2)[ff] ...
+
+4 40 ...ee (w2)[ff] gg h...
+
+5 50 ... (w1)[BB] CC (w3)[DD] ...
+... >< (w2)[FF] GG ...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']')
+1 10 ... (w1)[bb] cc (w3)[dd] ...
+... >< (w2)[ff] gg ...
+
+2 20 ... (w2)[ff] ee (w3)[dd] ...
+...cc (w1)[bb] aa...
+
+3 30 ... (w3)[dd] ee (w2)[ff] ...
+
+4 40 ...ee (w2)[ff] gg h...
+
+5 50
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_cp932.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_cp932.result
new file mode 100644
index 00000000000..a21157a0a18
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_cp932.result
@@ -0,0 +1,91 @@
+drop table if exists t1, t2, t3;
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932;
+insert into t1 values(1, "‚ ‚ ‚ ‚ ‚ ","‚Q‚X“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","‚Q‚X“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "‚¤‚¤‚¤‚¤‚¤","29“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>')
+1 ‚ ‚ ‚ ‚ ‚  ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚Í•ª...<br>
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...<span class="w1">29“ú</span>‚Ì•xŽm...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>')
+1 ‚ ‚ ‚ ‚ ‚  ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚Í•ª...<br>
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...‚Ì<span class="w3">•xŽmŽR</span>‚Ì...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>')
+1 ‚ ‚ ‚ ‚ ‚  ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚Í•ª...<br>
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...<span class="w1">29“ú</span>‚Ì•xŽm...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>')
+1 ‚ ‚ ‚ ‚ ‚  ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚É‚Â...<br>
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...<span class="w1">‚Q‚X“ú</span>‚Ì•x...<br>
+...‚Ì<span class="w2">“V‹C</span>‚Í•ª...<br>
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...‚Ì<span class="w3">•xŽmŽR</span>‚Ì...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']')
+1 ‚ ‚ ‚ ‚ ‚  ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚Í•ª...
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...(w1)[29“ú]‚Ì•xŽm...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']')
+1 ‚ ‚ ‚ ‚ ‚  ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚Í•ª...
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...‚Ì(w3)[•xŽmŽR]‚Ì...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']')
+1 ‚ ‚ ‚ ‚ ‚  ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚Í•ª...
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...(w1)[29“ú]‚Ì•xŽm...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']')
+1 ‚ ‚ ‚ ‚ ‚  ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚É‚Â...
+
+2 ‚¢‚¢‚¢‚¢‚¢ ...(w1)[‚Q‚X“ú]‚Ì•x...
+...‚Ì(w2)[“V‹C]‚Í•ª...
+
+3 ‚¤‚¤‚¤‚¤‚¤ ...‚Ì(w3)[•xŽmŽR]‚Ì...
+
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_eucjpms.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_eucjpms.result
new file mode 100644
index 00000000000..e4c6a41773e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_eucjpms.result
@@ -0,0 +1,91 @@
+drop table if exists t1, t2, t3;
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms;
+insert into t1 values(1, "¤¢¤¢¤¢¤¢¤¢","£²£¹Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","£²£¹Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "¤¦¤¦¤¦¤¦¤¦","29Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>')
+1 ¤¢¤¢¤¢¤¢¤¢ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ïʬ...<br>
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...<span class="w1">29Æü</span>¤ÎÉÙ»Î...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>')
+1 ¤¢¤¢¤¢¤¢¤¢ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ïʬ...<br>
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...¤Î<span class="w3">Éٻλ³</span>¤Î...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>')
+1 ¤¢¤¢¤¢¤¢¤¢ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ïʬ...<br>
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...<span class="w1">29Æü</span>¤ÎÉÙ»Î...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>')
+1 ¤¢¤¢¤¢¤¢¤¢ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ë¤Ä...<br>
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...<span class="w1">£²£¹Æü</span>¤ÎÉÙ...<br>
+...¤Î<span class="w2">Å·µ¤</span>¤Ïʬ...<br>
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...¤Î<span class="w3">Éٻλ³</span>¤Î...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']')
+1 ¤¢¤¢¤¢¤¢¤¢ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ïʬ...
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...(w1)[29Æü]¤ÎÉÙ»Î...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']')
+1 ¤¢¤¢¤¢¤¢¤¢ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ïʬ...
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...¤Î(w3)[Éٻλ³]¤Î...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']')
+1 ¤¢¤¢¤¢¤¢¤¢ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ïʬ...
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...(w1)[29Æü]¤ÎÉÙ»Î...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']')
+1 ¤¢¤¢¤¢¤¢¤¢ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ë¤Ä...
+
+2 ¤¤¤¤¤¤¤¤¤¤ ...(w1)[£²£¹Æü]¤ÎÉÙ...
+...¤Î(w2)[Å·µ¤]¤Ïʬ...
+
+3 ¤¦¤¦¤¦¤¦¤¦ ...¤Î(w3)[Éٻλ³]¤Î...
+
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_nonexistent_charset.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_nonexistent_charset.result
new file mode 100644
index 00000000000..78cee62696f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_nonexistent_charset.result
@@ -0,0 +1,4 @@
+SET NAMES UTF8;
+SELECT mroonga_snippet("Invalid charset test", 10, 2, "nonexistent_charset",
+1, 0, "...", "...", "charset", "<", ">");
+ERROR HY000: Can't initialize function 'mroonga_snippet'; Unknown charset: <nonexistent_charset>
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_unsupported_charset.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_unsupported_charset.result
new file mode 100644
index 00000000000..bf967adbf46
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_invalid_unsupported_charset.result
@@ -0,0 +1,4 @@
+SET NAMES UTF8;
+SELECT mroonga_snippet("Unsuppported charset test", 10, 2, "big5",
+1, 0, "...", "...", "charset", "<", ">");
+ERROR HY000: Can't initialize function 'mroonga_snippet'; Unknown charset: <big5>
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_japanese.result b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_japanese.result
new file mode 100644
index 00000000000..05a63a3d597
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/function_snippet_japanese.result
@@ -0,0 +1,95 @@
+drop table if exists t1, t2, t3;
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8;
+insert into t1 values(1, "ã‚ã‚ã‚ã‚ã‚","29日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","29日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "ã†ã†ã†ã†ã†","29æ—¥ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>')
+1 ã‚ã‚ã‚ã‚ã‚ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+2 ã„ã„ã„ã„ã„ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+3 ã†ã†ã†ã†ã† ...<span class="w1">29æ—¥</span>ã®...<br>
+...<span class="w2">天気</span>ã«...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>')
+1 ã‚ã‚ã‚ã‚ã‚ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+2 ã„ã„ã„ã„ã„ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+3 ã†ã†ã†ã†ã† ...<span class="w3">富士山</span>...<br>
+...<span class="w2">天気</span>ã«...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>')
+1 ã‚ã‚ã‚ã‚ã‚ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+2 ã„ã„ã„ã„ã„ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+3 ã†ã†ã†ã†ã† ...<span class="w1">29æ—¥</span>ã®...<br>
+...<span class="w2">天気</span>ã«...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>')
+1 ã‚ã‚ã‚ã‚ã‚ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+2 ã„ã„ã„ã„ã„ ...<span class="w1">29日</span>...<br>
+...<span class="w3">富士山</span>...<br>
+
+3 ã†ã†ã†ã†ã† ...<span class="w3">富士山</span>...<br>
+...<span class="w2">天気</span>ã«...<br>
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']')
+1 ã‚ã‚ã‚ã‚ã‚ ...(w1)[29日]...
+...(w3)[富士山]...
+
+2 ã„ã„ã„ã„ã„ ...(w1)[29日]...
+...(w3)[富士山]...
+
+3 ã†ã†ã†ã†ã† ...(w1)[29æ—¥]ã®...
+...(w2)[天気]ã«...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']')
+1 ã‚ã‚ã‚ã‚ã‚ ...(w1)[29日]...
+...(w3)[富士山]...
+
+2 ã„ã„ã„ã„ã„ ...(w1)[29日]...
+...(w3)[富士山]...
+
+3 ã†ã†ã†ã†ã† ...(w3)[富士山]...
+...(w2)[天気]ã«...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']')
+1 ã‚ã‚ã‚ã‚ã‚ ...(w1)[29日]...
+...(w3)[富士山]...
+
+2 ã„ã„ã„ã„ã„ ...(w1)[29日]...
+...(w3)[富士山]...
+
+3 ã†ã†ã†ã†ã† ...(w1)[29æ—¥]ã®...
+...(w2)[天気]ã«...
+
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+c1 c2 mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']')
+1 ã‚ã‚ã‚ã‚ã‚ ...(w1)[29日]...
+...(w3)[富士山]...
+
+2 ã„ã„ã„ã„ã„ ...(w1)[29日]...
+...(w3)[富士山]...
+
+3 ã†ã†ã†ã†ã† ...(w3)[富士山]...
+...(w2)[天気]ã«...
+
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null.result b/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null.result
new file mode 100644
index 00000000000..2e9314db109
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/geometry_bulk_insert_null.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS shops;
+CREATE TABLE shops (
+location GEOMETRY NOT NULL
+);
+INSERT INTO shops VALUES (NULL), (NULL);
+Warnings:
+Warning 1048 Column 'location' cannot be null
+Warning 1048 Column 'location' cannot be null
+SELECT AsText(location) FROM shops;
+AsText(location)
+POINT(0 0)
+POINT(0 0)
+DROP TABLE shops;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result b/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result
new file mode 100644
index 00000000000..e88402a10b4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/geometry_contains.result
@@ -0,0 +1,170 @@
+DROP TABLE IF EXISTS shops;
+CREATE TABLE shops (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name TEXT,
+location GEOMETRY NOT NULL,
+SPATIAL KEY location_index (location)
+);
+SHOW CREATE TABLE shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+INSERT INTO shops (name, location)
+VALUES ('nezu-no-taiyaki',
+GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+VALUES ('taiyaki-kataoka',
+GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+VALUES ('soba-taiyaki-ku',
+GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+VALUES ('kuruma',
+GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+VALUES ('hirose-ya',
+GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+VALUES ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+VALUES ('omede-taiyaki',
+GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+VALUES ('onaga-ya',
+GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+VALUES ('shiro-ya',
+GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+VALUES ('fuji-ya',
+GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+VALUES ('miyoshi',
+GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+VALUES ('juju-ya',
+GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+VALUES ('tatsumi-ya',
+GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+VALUES ('tetsuji',
+GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+VALUES ('gazuma-ya',
+GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+VALUES ('honma-mon',
+GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+VALUES ('naniwa-ya',
+GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+VALUES ('kuro-dai',
+GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+VALUES ('daruma',
+GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+VALUES ('yanagi-ya',
+GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+VALUES ('sharaku',
+GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+VALUES ('takane',
+GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+VALUES ('chiyoda',
+GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+VALUES ('da-ka-po',
+GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+VALUES ('matsushima-ya',
+GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+VALUES ('kazuya',
+GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+VALUES ('furuya-kogane-an',
+GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+VALUES ('hachi-no-ie',
+GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+VALUES ('azuki-chan',
+GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+VALUES ('kuriko-an',
+GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+VALUES ('naze-ya',
+GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+VALUES ('sanoki-ya',
+GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+VALUES ('shigeta',
+GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+VALUES ('nishimi-ya',
+GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+VALUES ('hiiragi',
+GeomFromText('POINT(139.711517 35.647701)'));
+SELECT id, name, AsText(location) AS location_text FROM shops;
+id name location_text
+1 nezu-no-taiyaki POINT(139.76257305555555 35.72025305555556)
+2 taiyaki-kataoka POINT(139.7155911111111 35.712521111111116)
+3 soba-taiyaki-ku POINT(139.65908805555557 35.68371194444445)
+4 kuruma POINT(139.70620694444446 35.72151611111111)
+5 hirose-ya POINT(139.68560805555555 35.71484388888889)
+6 sazare POINT(139.68504305555555 35.71465305555556)
+7 omede-taiyaki POINT(139.8171538888889 35.70051611111111)
+8 onaga-ya POINT(139.81105 35.69825388888889)
+9 shiro-ya POINT(139.63861111111112 35.70551694444445)
+10 fuji-ya POINT(139.637115 35.703938055555554)
+11 miyoshi POINT(139.53732305555556 35.644538888888896)
+12 juju-ya POINT(139.69575500000002 35.62892194444445)
+13 tatsumi-ya POINT(139.63865694444445 35.66550111111111)
+14 tetsuji POINT(139.76857 35.680911944444446)
+15 gazuma-ya POINT(139.64759805555553 35.70081694444444)
+16 honma-mon POINT(139.65257305555556 35.72273611111111)
+17 naniwa-ya POINT(139.79623388888888 35.73006111111111)
+18 kuro-dai POINT(139.70483388888888 35.650345)
+19 daruma POINT(139.7705988888889 35.68146111111111)
+20 yanagi-ya POINT(139.78398111111113 35.685341111111114)
+21 sharaku POINT(139.79484611111113 35.71696888888889)
+22 takane POINT(139.56091305555555 35.69860111111112)
+23 chiyoda POINT(139.65281694444442 35.64260111111111)
+24 da-ka-po POINT(139.72735611111113 35.62734611111111)
+25 matsushima-ya POINT(139.73738111111112 35.64055611111111)
+26 kazuya POINT(139.760895 35.67350805555556)
+27 furuya-kogane-an POINT(139.67607111111113 35.68060305555556)
+28 hachi-no-ie POINT(139.66810611111111 35.608021111111114)
+29 azuki-chan POINT(139.67320305555555 35.641510000000004)
+30 kuriko-an POINT(139.79682888888888 35.71201305555556)
+31 yume-no-aru-machi-no-taiyaki-ya-san POINT(139.71252388888888 35.61619888888889)
+32 naze-ya POINT(139.66583305555557 35.60903888888889)
+33 sanoki-ya POINT(139.7707211111111 35.66592)
+34 shigeta POINT(139.78027305555557 35.67262611111111)
+35 nishimi-ya POINT(139.77462805555555 35.671825)
+36 hiiragi POINT(139.71151694444444 35.64770111111111)
+SELECT id, name, AsText(location) AS location_text FROM shops
+WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location)
+ORDER BY id;
+id name location_text
+14 tetsuji POINT(139.76857 35.680911944444446)
+19 daruma POINT(139.7705988888889 35.68146111111111)
+26 kazuya POINT(139.760895 35.67350805555556)
+DROP TABLE shops;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_datetime.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_datetime.result
new file mode 100644
index 00000000000..78ed69f0ef8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_datetime.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+created_at datetime,
+title varchar(256),
+KEY created_at_key(created_at)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES ("1000-01-01 00:00:00", "The start");
+INSERT INTO diaries VALUES ("2012-10-25 16:18:29", "Today is shiny day.");
+INSERT INTO diaries VALUES ("9999-12-31 23:59:59", "The end");
+SELECT *
+FROM diaries FORCE INDEX(created_at_key)
+WHERE created_at = "2012-10-25 16:18:29";
+created_at title
+2012-10-25 16:18:29 Today is shiny day.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_time.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_time.result
new file mode 100644
index 00000000000..a55a184d17a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_time.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS timer;
+CREATE TABLE timer (
+id int PRIMARY KEY,
+elapsed time,
+KEY elapsed_key(elapsed)
+);
+INSERT INTO timer VALUES (1, "00:00:00");
+INSERT INTO timer VALUES (2, "15:11:12");
+INSERT INTO timer VALUES (3, "838:59:59");
+INSERT INTO timer VALUES (4, "-838:59:59");
+SELECT *
+FROM timer FORCE INDEX(elapsed_key)
+WHERE elapsed = "-838:59:59";
+id elapsed
+4 -838:59:59
+DROP TABLE timer;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_timestamp.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_timestamp.result
new file mode 100644
index 00000000000..57eb6ae2cee
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_equal_timestamp.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+created_at timestamp,
+title varchar(256),
+KEY created_at_key(created_at)
+) DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES ("1970-01-01 12:00:00", "The start");
+INSERT INTO diaries VALUES ("2012-10-05 16:18:29", "Today is shiny day.");
+INSERT INTO diaries VALUES ("2038-01-18 15:14:07", "The end");
+SELECT *
+FROM diaries FORCE INDEX(created_at_key)
+WHERE created_at = "2012-10-05 16:18:29";
+created_at title
+2012-10-05 16:18:29 Today is shiny day.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_normal_column_insert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_normal_column_insert.result
new file mode 100644
index 00000000000..043d1e3c1bc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_btree_normal_column_insert.result
@@ -0,0 +1,25 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, index using btree (c2));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c1`),
+ KEY `c2` (`c2`) USING BTREE
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+flush tables;
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_normal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_normal.result
new file mode 100644
index 00000000000..5f92c086ea3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_normal.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, a int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id a
+1 100
+2 100
+3 100
+4 100
+select * from t1 where _id = 2;
+_id a
+2 100
+select * from t1 where _id = 20;
+_id a
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result
new file mode 100644
index 00000000000..508ee135ef2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_primary.result
@@ -0,0 +1,28 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, a int, primary key (_id) using hash);
+insert into t1 values(null, 100);
+ERROR 23000: Column '_id' cannot be null
+insert into t1 values(1,100);
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+insert into t1 values(1,100);
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+insert into t1 values(1,100);
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+insert into t1 values(1,100);
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+select * from t1;
+_id a
+1 100
+2 100
+3 100
+4 100
+select * from t1 where _id = 2;
+_id a
+2 100
+select * from t1 where _id = 20;
+_id a
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_unique.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_unique.result
new file mode 100644
index 00000000000..1a30a1ecbf4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_id_unique.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, a int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id a
+1 100
+2 100
+3 100
+4 100
+select * from t1 where _id = 2;
+_id a
+2 100
+select * from t1 where _id = 20;
+_id a
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_normal_column_insert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_normal_column_insert.result
new file mode 100644
index 00000000000..6e642ce1272
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_hash_normal_column_insert.result
@@ -0,0 +1,25 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, index using hash (c2));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c1`),
+ KEY `c2` (`c2`) USING HASH
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+flush tables;
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_delete.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_delete.result
new file mode 100644
index 00000000000..c680a3733f3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_delete.result
@@ -0,0 +1,32 @@
+drop table if exists listing;
+set names utf8;
+create table scores (
+id int primary key auto_increment not null,
+name char(30) not null,
+score int not null,
+index property (name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+id name score
+1 Taro Yamada 29
+2 Taro Yamada -12
+3 Jiro Yamada 27
+4 Taro Yamada 10
+delete from scores where name = "Taro Yamada" and score = 10;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+id name score
+2 Taro Yamada -12
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_smallint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_smallint.result
new file mode 100644
index 00000000000..a627f432068
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_smallint.result
@@ -0,0 +1,65 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+id INT PRIMARY KEY AUTO_INCREMENT,
+c1 SMALLINT,
+c2 SMALLINT,
+KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `c1` smallint(6) DEFAULT NULL,
+ `c2` smallint(6) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx1` (`c1`,`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO t1 (c1, c2) VALUES
+(1999, 12),
+(2000, 11),
+(2001, 10),
+(2002, 9),
+(2003, 8),
+(2004, 7),
+(2005, 6),
+(2006, 5),
+(2007, 4),
+(2008, 3),
+(2009, 2),
+(2010, 1);
+SELECT * FROM t1 WHERE c1 > 2005;
+id c1 c2
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 >= 2005;
+id c1 c2
+7 2005 6
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 = 2005;
+id c1 c2
+7 2005 6
+SELECT * FROM t1 WHERE c1 <= 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+7 2005 6
+SELECT * FROM t1 WHERE c1 < 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_bigint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_bigint.result
new file mode 100644
index 00000000000..368f88a64e1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_bigint.result
@@ -0,0 +1,65 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+id INT PRIMARY KEY AUTO_INCREMENT,
+c1 BIGINT UNSIGNED,
+c2 BIGINT UNSIGNED,
+KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `c1` bigint(20) unsigned DEFAULT NULL,
+ `c2` bigint(20) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx1` (`c1`,`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO t1 (c1, c2) VALUES
+(1999, 12),
+(2000, 11),
+(2001, 10),
+(2002, 9),
+(2003, 8),
+(2004, 7),
+(2005, 6),
+(2006, 5),
+(2007, 4),
+(2008, 3),
+(2009, 2),
+(2010, 1);
+SELECT * FROM t1 WHERE c1 > 2005;
+id c1 c2
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 >= 2005;
+id c1 c2
+7 2005 6
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 = 2005;
+id c1 c2
+7 2005 6
+SELECT * FROM t1 WHERE c1 <= 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+7 2005 6
+SELECT * FROM t1 WHERE c1 < 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_int.result
new file mode 100644
index 00000000000..6d5516f7eea
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_int.result
@@ -0,0 +1,65 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+id INT PRIMARY KEY AUTO_INCREMENT,
+c1 INT UNSIGNED,
+c2 INT UNSIGNED,
+KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx1` (`c1`,`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO t1 (c1, c2) VALUES
+(1999, 12),
+(2000, 11),
+(2001, 10),
+(2002, 9),
+(2003, 8),
+(2004, 7),
+(2005, 6),
+(2006, 5),
+(2007, 4),
+(2008, 3),
+(2009, 2),
+(2010, 1);
+SELECT * FROM t1 WHERE c1 > 2005;
+id c1 c2
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 >= 2005;
+id c1 c2
+7 2005 6
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 = 2005;
+id c1 c2
+7 2005 6
+SELECT * FROM t1 WHERE c1 <= 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+7 2005 6
+SELECT * FROM t1 WHERE c1 < 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_smallint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_smallint.result
new file mode 100644
index 00000000000..b0edfb9eea1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_unsigned_smallint.result
@@ -0,0 +1,65 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+id INT PRIMARY KEY AUTO_INCREMENT,
+c1 SMALLINT UNSIGNED,
+c2 SMALLINT UNSIGNED,
+KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `c1` smallint(5) unsigned DEFAULT NULL,
+ `c2` smallint(5) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx1` (`c1`,`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO t1 (c1, c2) VALUES
+(1999, 12),
+(2000, 11),
+(2001, 10),
+(2002, 9),
+(2003, 8),
+(2004, 7),
+(2005, 6),
+(2006, 5),
+(2007, 4),
+(2008, 3),
+(2009, 2),
+(2010, 1);
+SELECT * FROM t1 WHERE c1 > 2005;
+id c1 c2
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 >= 2005;
+id c1 c2
+7 2005 6
+8 2006 5
+9 2007 4
+10 2008 3
+11 2009 2
+12 2010 1
+SELECT * FROM t1 WHERE c1 = 2005;
+id c1 c2
+7 2005 6
+SELECT * FROM t1 WHERE c1 <= 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+7 2005 6
+SELECT * FROM t1 WHERE c1 < 2005;
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 9
+5 2003 8
+6 2004 7
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_varchar.result
new file mode 100644
index 00000000000..587e3c5fd4d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_nullable_varchar.result
@@ -0,0 +1,65 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+id INT PRIMARY KEY AUTO_INCREMENT,
+c1 VARCHAR(10),
+c2 VARCHAR(10),
+KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `c1` varchar(10) DEFAULT NULL,
+ `c2` varchar(10) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx1` (`c1`,`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO t1 (c1, c2) VALUES
+('1999', '12'),
+('2000', '11'),
+('2001', '10'),
+('2002', '09'),
+('2003', '08'),
+('2004', '07'),
+('2005', '06'),
+('2006', '05'),
+('2007', '04'),
+('2008', '03'),
+('2009', '02'),
+('2010', '01');
+SELECT * FROM t1 WHERE c1 > '2005';
+id c1 c2
+8 2006 05
+9 2007 04
+10 2008 03
+11 2009 02
+12 2010 01
+SELECT * FROM t1 WHERE c1 >= '2005';
+id c1 c2
+7 2005 06
+8 2006 05
+9 2007 04
+10 2008 03
+11 2009 02
+12 2010 01
+SELECT * FROM t1 WHERE c1 = '2005';
+id c1 c2
+7 2005 06
+SELECT * FROM t1 WHERE c1 <= '2005';
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 09
+5 2003 08
+6 2004 07
+7 2005 06
+SELECT * FROM t1 WHERE c1 < '2005';
+id c1 c2
+1 1999 12
+2 2000 11
+3 2001 10
+4 2002 09
+5 2003 08
+6 2004 07
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_delete.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_delete.result
new file mode 100644
index 00000000000..ac673bac52c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_delete.result
@@ -0,0 +1,29 @@
+drop table if exists listing;
+set names utf8;
+create table scores (
+name char(30) not null,
+score int not null,
+primary key (name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+name score
+Jiro Yamada 27
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+delete from scores where name = "Taro Yamada" and score = 10;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+name score
+Taro Yamada -12
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_select_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_select_int.result
new file mode 100644
index 00000000000..20b45861e4e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_select_int.result
@@ -0,0 +1,37 @@
+drop table if exists listing;
+set names utf8;
+create table scores (
+name char(30) not null,
+score int not null,
+primary key (name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+name score
+Jiro Yamada 27
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+select * from scores where name = "Taro Yamada";
+name score
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+select * from scores where name = "Taro Yamada" and score = 29;
+name score
+Taro Yamada 29
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+name score
+Taro Yamada -12
+Taro Yamada 10
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result
new file mode 100644
index 00000000000..86b06bc94dd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_primary_update.result
@@ -0,0 +1,32 @@
+drop table if exists listing;
+set names utf8;
+create table scores (
+name char(30) not null,
+score int not null,
+primary key (name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+name score
+Jiro Yamada 27
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27;
+Warnings:
+Warning 1265 data truncated for primary key column: <name>
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+name score
+Taro Yamada -12
+Taro Yamada 10
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result
new file mode 100644
index 00000000000..870c5ba73e5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+score INT,
+created_at DATETIME,
+INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `score` int(11) DEFAULT NULL,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `score` (`score`,`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+SELECT *
+FROM items
+WHERE score = 2 AND created_at > "2014-09-11 00:00:00"
+ ORDER BY created_at DESC;
+id score created_at
+4 2 2014-09-12 00:00:00
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result
new file mode 100644
index 00000000000..06661210817
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+score INT,
+created_at DATETIME,
+INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `score` int(11) DEFAULT NULL,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `score` (`score`,`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+SELECT *
+FROM items
+WHERE score = 2 AND created_at >= "2014-09-11 00:00:00"
+ ORDER BY created_at DESC;
+id score created_at
+4 2 2014-09-12 00:00:00
+2 2 2014-09-11 00:00:00
+3 2 2014-09-11 00:00:00
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result
new file mode 100644
index 00000000000..f528f90b7dc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+score INT,
+created_at DATETIME,
+INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `score` int(11) DEFAULT NULL,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `score` (`score`,`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+SELECT *
+FROM items
+WHERE score = 2 AND created_at < "2014-09-12 00:00:00"
+ ORDER BY created_at DESC;
+id score created_at
+2 2 2014-09-11 00:00:00
+3 2 2014-09-11 00:00:00
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result
new file mode 100644
index 00000000000..9250ecb8dbc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS items;
+CREATE TABLE items (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+score INT,
+created_at DATETIME,
+INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+Table Create Table
+items CREATE TABLE `items` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `score` int(11) DEFAULT NULL,
+ `created_at` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `score` (`score`,`created_at`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+SELECT *
+FROM items
+WHERE score = 2 AND created_at <= "2014-09-12 00:00:00"
+ ORDER BY created_at DESC;
+id score created_at
+4 2 2014-09-12 00:00:00
+2 2 2014-09-11 00:00:00
+3 2 2014-09-11 00:00:00
+DROP TABLE items;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_recreate.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_recreate.result
new file mode 100644
index 00000000000..02222965755
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_recreate.result
@@ -0,0 +1,39 @@
+drop table if exists listing;
+set names utf8;
+create table listing (
+id int primary key auto_increment not null,
+last_name char(30) not null,
+first_name char(30) not null,
+index name (last_name, first_name)
+) default charset utf8;
+show create table listing;
+Table Create Table
+listing CREATE TABLE `listing` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `last_name` char(30) NOT NULL,
+ `first_name` char(30) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `name` (`last_name`,`first_name`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into listing (last_name, first_name) values("Taro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Suzuki");
+insert into listing (last_name, first_name) values("Jiro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Tanaka");
+select * from listing
+where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+id last_name first_name
+2 Taro Suzuki
+4 Taro Tanaka
+drop index name on listing;
+select * from listing
+where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+id last_name first_name
+2 Taro Suzuki
+4 Taro Tanaka
+create index new_name_index on listing (last_name, first_name);
+select * from listing
+where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+id last_name first_name
+2 Taro Suzuki
+4 Taro Tanaka
+drop table listing;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_replace.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_replace.result
new file mode 100644
index 00000000000..df67c8a397e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_replace.result
@@ -0,0 +1,39 @@
+DROP TABLE IF EXISTS listing;
+CREATE TABLE scores (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+name CHAR(30) NOT NULL,
+score INT NOT NULL,
+INDEX property (NAME, SCORE)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores;
+id name score
+1 Taro Yamada 29
+2 Taro Yamada -12
+3 Jiro Yamada 27
+4 Taro Yamada 10
+REPLACE scores (id, name, score) VALUES (3, "Taro Yamada", 28);
+SELECT * FROM scores;
+id name score
+1 Taro Yamada 29
+2 Taro Yamada -12
+3 Taro Yamada 28
+4 Taro Yamada 10
+SELECT * FROM scores WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+3 Taro Yamada 28
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_double.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_double.result
new file mode 100644
index 00000000000..c75733f49fe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_double.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS temperatures;
+CREATE TABLE temperatures (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title VARCHAR(20),
+temperature DOUBLE,
+KEY temperature_index(temperature),
+KEY multi_index(temperature, title)
+);
+INSERT INTO temperatures VALUES (NULL, "Hot!", 28.2);
+INSERT INTO temperatures VALUES (NULL, "Snow!", -2.8);
+INSERT INTO temperatures VALUES (NULL, "Rainy!", 12.7);
+SELECT temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+temperature
+12.7
+28.2
+SELECT temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+temperature
+-2.8
+12.7
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+title temperature
+Rainy! 12.7
+Hot! 28.2
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+title temperature
+Snow! -2.8
+Rainy! 12.7
+DROP TABLE temperatures;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_float.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_float.result
new file mode 100644
index 00000000000..452cae2d651
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_float.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS temperatures;
+CREATE TABLE temperatures (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title VARCHAR(20),
+temperature FLOAT,
+KEY temperature_index(temperature),
+KEY multi_index(temperature, title)
+);
+INSERT INTO temperatures VALUES (NULL, "Hot!", 28.2);
+INSERT INTO temperatures VALUES (NULL, "Snow!", -2.8);
+INSERT INTO temperatures VALUES (NULL, "Rainy!", 12.7);
+SELECT temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+temperature
+12.7
+28.2
+SELECT temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+temperature
+-2.8
+12.7
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+title temperature
+Rainy! 12.7
+Hot! 28.2
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+title temperature
+Snow! -2.8
+Rainy! 12.7
+DROP TABLE temperatures;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_int.result
new file mode 100644
index 00000000000..ecf7706bd8e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_int.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS listing;
+CREATE TABLE scores (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+name CHAR(30) NOT NULL,
+score INT NOT NULL,
+INDEX property (score, name)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`score`,`name`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores;
+id name score
+1 Taro Yamada 29
+2 Taro Yamada -12
+3 Jiro Yamada 27
+4 Taro Yamada 10
+SELECT * FROM scores WHERE score = 29;
+id name score
+1 Taro Yamada 29
+SELECT * FROM scores WHERE score = 29 AND name = "Taro Yamada";
+id name score
+1 Taro Yamada 29
+SELECT * FROM scores WHERE (score >= -12 AND score < 29) AND name = "Taro Yamada";
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_string.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_string.result
new file mode 100644
index 00000000000..ad73669e40b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_string.result
@@ -0,0 +1,40 @@
+drop table if exists listing;
+set names utf8;
+create table listing (
+id int primary key auto_increment not null,
+last_name char(30) not null,
+first_name char(30) not null,
+index name (last_name, first_name)
+) default charset utf8;
+show create table listing;
+Table Create Table
+listing CREATE TABLE `listing` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `last_name` char(30) NOT NULL,
+ `first_name` char(30) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `name` (`last_name`,`first_name`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into listing (last_name, first_name) values("Taro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Suzuki");
+insert into listing (last_name, first_name) values("Jiro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Tanaka");
+select * from listing;
+id last_name first_name
+1 Taro Yamada
+2 Taro Suzuki
+3 Jiro Yamada
+4 Taro Tanaka
+select * from listing where last_name = "Taro";
+id last_name first_name
+2 Taro Suzuki
+4 Taro Tanaka
+1 Taro Yamada
+select * from listing where last_name = "Taro" and first_name = "Suzuki";
+id last_name first_name
+2 Taro Suzuki
+select * from listing where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+id last_name first_name
+2 Taro Suzuki
+4 Taro Tanaka
+drop table listing;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_varchar.result
new file mode 100644
index 00000000000..53fbccda2b4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_select_varchar.result
@@ -0,0 +1,39 @@
+drop table if exists scores;
+set names utf8;
+create table scores (
+given_name varchar(30) not null,
+family_name varchar(30) not null,
+score int not null,
+primary key property (given_name, family_name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `given_name` varchar(30) NOT NULL,
+ `family_name` varchar(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`given_name`,`family_name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores values("Taro", "Yamada", 29);
+insert into scores values("Taro", "Yamada", -12);
+insert into scores values("Jiro", "Yamada", 27);
+insert into scores values("Taro", "Yamada", 10);
+select * from scores;
+given_name family_name score
+Jiro Yamada 27
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+select * from scores where given_name = "Taro" and family_name = "Yamada";
+given_name family_name score
+Taro Yamada -12
+Taro Yamada 10
+Taro Yamada 29
+select * from scores where given_name = "Taro" and family_name = "Yamada" and score = 29;
+given_name family_name score
+Taro Yamada 29
+select * from scores where given_name = "Taro" and family_name = "Yamada" and (score >= -12 and score < 29);
+given_name family_name score
+Taro Yamada -12
+Taro Yamada 10
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_32bit_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_32bit_equal.result
new file mode 100644
index 00000000000..2174efc1b4f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_32bit_equal.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+WHERE start = "1000-01-01" AND end = "9999-12-31";
+id start end
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result
new file mode 100644
index 00000000000..869ced05d25
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_64bit_equal.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+SELECT * FROM ranges FORCE INDEX(range_key)
+WHERE start = "1000-01-01" AND end = "9999-12-31";
+id start end
+2 1000-01-01 9999-12-31
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result
new file mode 100644
index 00000000000..8e480d4844a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_index_read.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+SELECT start, end
+FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+start end
+1000-01-01 2012-10-05
+1000-01-01 9999-12-31
+2012-10-25 9999-12-31
+9999-12-31 1000-01-01
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_asc.result
new file mode 100644
index 00000000000..0a64a822fb5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_asc.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1970-01-01 2012-10-05
+4 1970-01-01 1970-01-01
+1 2012-10-25 1970-01-01
+3 1970-01-01 1970-01-01
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_desc.result
new file mode 100644
index 00000000000..24439fdf5fa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_32bit_desc.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 1970-01-01 1970-01-01
+1 2012-10-25 1970-01-01
+4 1970-01-01 1970-01-01
+2 1970-01-01 2012-10-05
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result
new file mode 100644
index 00000000000..92e7f51ff6e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_asc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1000-01-01 2012-10-05
+4 1000-01-01 9999-12-31
+1 2012-10-25 9999-12-31
+3 9999-12-31 1000-01-01
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result
new file mode 100644
index 00000000000..ddd694c3863
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_order_64bit_desc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 9999-12-31 1000-01-01
+1 2012-10-25 9999-12-31
+4 1000-01-01 9999-12-31
+2 1000-01-01 2012-10-05
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_reinsert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_reinsert.result
new file mode 100644
index 00000000000..bd1bdc33325
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_date_reinsert.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start DATE,
+end DATE,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2010-01-01", "2012-10-05");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 2012-10-05
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01", "2012-10-05");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 2012-10-05
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result
new file mode 100644
index 00000000000..1aa710882cb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_index_read.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start datetime,
+end datetime,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+SELECT start, end
+FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+start end
+1000-01-01 00:00:00 2012-10-05 16:18:29
+1000-01-01 00:00:00 9999-12-31 23:59:59
+2012-10-25 16:18:29 9999-12-31 23:59:59
+9999-12-31 23:59:59 1000-01-01 00:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result
new file mode 100644
index 00000000000..d18f1858932
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_asc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start datetime,
+end datetime,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1000-01-01 00:00:00 2012-10-05 16:18:29
+4 1000-01-01 00:00:00 9999-12-31 23:59:59
+1 2012-10-25 16:18:29 9999-12-31 23:59:59
+3 9999-12-31 23:59:59 1000-01-01 00:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result
new file mode 100644
index 00000000000..c159aeab4ce
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_order_desc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start datetime,
+end datetime,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 9999-12-31 23:59:59 1000-01-01 00:00:00
+1 2012-10-25 16:18:29 9999-12-31 23:59:59
+4 1000-01-01 00:00:00 9999-12-31 23:59:59
+2 1000-01-01 00:00:00 2012-10-05 16:18:29
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_reinsert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_reinsert.result
new file mode 100644
index 00000000000..50d5da49955
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_datetime_reinsert.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start datetime,
+end datetime,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 00:00:00 2012-10-05 23:59:59
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 00:00:00 2012-10-05 23:59:59
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_decimal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_decimal.result
new file mode 100644
index 00000000000..015afdb5cf6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_decimal.result
@@ -0,0 +1,36 @@
+drop table if exists t1;
+create table t1 (c1 int primary key, c2 decimal(65,30), c3 decimal(65,30), unique key uk1(c2,c3));
+insert into t1 values(1,123.456,0.000000000000000000000000000001);
+insert into t1 values(2,-123.456,123.456);
+insert into t1 values(3,98765432109876543210987654321098765.432109876543210987654321098765,-123.456);
+insert into t1 values(4,-98765432109876543210987654321098765.432109876543210987654321098765,98765432109876543210987654321098765.432109876543210987654321098765);
+insert into t1 values(5,0.000000000000000000000000000001,-98765432109876543210987654321098765.432109876543210987654321098765);
+select c1, c2, c3 from t1 force index(uk1) where c2 = -98765432109876543210987654321098765.432109876543210987654321098765 and c3 = 98765432109876543210987654321098765.432109876543210987654321098765;
+c1 c2 c3
+4 -98765432109876543210987654321098765.432109876543210987654321098765 98765432109876543210987654321098765.432109876543210987654321098765
+select c1, c2, c3 from t1 force index(uk1) order by c2, c3;
+c1 c2 c3
+4 -98765432109876543210987654321098765.432109876543210987654321098765 98765432109876543210987654321098765.432109876543210987654321098765
+2 -123.456000000000000000000000000000 123.456000000000000000000000000000
+5 0.000000000000000000000000000001 -98765432109876543210987654321098765.432109876543210987654321098765
+1 123.456000000000000000000000000000 0.000000000000000000000000000001
+3 98765432109876543210987654321098765.432109876543210987654321098765 -123.456000000000000000000000000000
+select c1, c2, c3 from t1 force index(uk1) order by c2 desc, c3 desc;
+c1 c2 c3
+3 98765432109876543210987654321098765.432109876543210987654321098765 -123.456000000000000000000000000000
+1 123.456000000000000000000000000000 0.000000000000000000000000000001
+5 0.000000000000000000000000000001 -98765432109876543210987654321098765.432109876543210987654321098765
+2 -123.456000000000000000000000000000 123.456000000000000000000000000000
+4 -98765432109876543210987654321098765.432109876543210987654321098765 98765432109876543210987654321098765.432109876543210987654321098765
+select c2, c3 from t1 force index(uk1) order by c2, c3;
+c2 c3
+-98765432109876543210987654321098765.432109876543210987654321098765 98765432109876543210987654321098765.432109876543210987654321098765
+-123.456000000000000000000000000000 123.456000000000000000000000000000
+0.000000000000000000000000000001 -98765432109876543210987654321098765.432109876543210987654321098765
+123.456000000000000000000000000000 0.000000000000000000000000000001
+98765432109876543210987654321098765.432109876543210987654321098765 -123.456000000000000000000000000000
+insert into t1 values(6,123.456,0.000000000000000000000000000001);
+ERROR 23000: Duplicate entry '123.456000000000000000000000000000-0.000000000000000000000000000' for key 'uk1'
+delete from t1 where c1 = 1;
+insert into t1 values(1,123.456,0.000000000000000000000000000001);
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_index_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_index_read.result
new file mode 100644
index 00000000000..4e0dec32a28
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_index_read.result
@@ -0,0 +1,22 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start time,
+end time,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (2, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (3, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (4, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+SELECT start, end
+FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+start end
+-838:59:59 838:59:59
+00:00:00 15:11:11
+00:00:00 838:59:59
+15:11:12 838:59:59
+838:59:59 00:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_asc.result
new file mode 100644
index 00000000000..3c6520a69c9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_asc.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start time,
+end time,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (2, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (3, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (4, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+5 -838:59:59 838:59:59
+2 00:00:00 15:11:11
+4 00:00:00 838:59:59
+1 15:11:12 838:59:59
+3 838:59:59 00:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_desc.result
new file mode 100644
index 00000000000..c1be80309b8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_order_desc.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start time,
+end time,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (2, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (3, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (4, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 838:59:59 00:00:00
+1 15:11:12 838:59:59
+4 00:00:00 838:59:59
+2 00:00:00 15:11:11
+5 -838:59:59 838:59:59
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_reinsert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_reinsert.result
new file mode 100644
index 00000000000..0613de3e2f3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_time_reinsert.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start time,
+end time,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "13:21:48", "15:11:12");
+SELECT * FROM ranges;
+id start end
+1 13:21:48 15:11:12
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "13:21:48", "15:11:12");
+SELECT * FROM ranges;
+id start end
+1 13:21:48 15:11:12
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result
new file mode 100644
index 00000000000..d833fb44024
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_index_read.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start timestamp,
+end timestamp,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (4, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+SELECT start, end
+FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+start end
+1970-01-01 12:00:00 2012-10-05 16:18:29
+1970-01-01 12:00:00 2038-01-18 15:14:07
+2012-10-25 16:18:29 2038-01-18 15:14:07
+2038-01-18 15:14:07 1970-01-01 12:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result
new file mode 100644
index 00000000000..1e4ee102c9e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_asc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start timestamp,
+end timestamp,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+INSERT INTO ranges VALUES (4, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1970-01-01 12:00:00 2012-10-05 16:18:29
+4 1970-01-01 12:00:00 2038-01-18 15:14:07
+1 2012-10-25 16:18:29 2038-01-18 15:14:07
+3 2038-01-18 15:14:07 1970-01-01 12:00:00
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result
new file mode 100644
index 00000000000..23a5522320a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_order_desc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start timestamp,
+end timestamp,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+INSERT INTO ranges VALUES (4, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 2038-01-18 15:14:07 1970-01-01 12:00:00
+1 2012-10-25 16:18:29 2038-01-18 15:14:07
+4 1970-01-01 12:00:00 2038-01-18 15:14:07
+2 1970-01-01 12:00:00 2012-10-05 16:18:29
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result
new file mode 100644
index 00000000000..3f3277f5e64
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_timestamp_reinsert.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id int PRIMARY KEY,
+start timestamp,
+end timestamp,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 00:00:00 2012-10-05 23:59:59
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+id start end
+1 2010-01-01 00:00:00 2012-10-05 23:59:59
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_varchar.result
new file mode 100644
index 00000000000..5c9cd959472
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_varchar.result
Binary files differ
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_32bit_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_32bit_equal.result
new file mode 100644
index 00000000000..04b3ba38395
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_32bit_equal.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 1901, 2012);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (2, 1901, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (3, 2012, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, 2155, 1901);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+WHERE start = 1901 AND end = 2155;
+id start end
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_64bit_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_64bit_equal.result
new file mode 100644
index 00000000000..e96754e5e21
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_64bit_equal.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 1901, 2012);
+INSERT INTO ranges VALUES (2, 1901, 2155);
+INSERT INTO ranges VALUES (3, 2012, 2155);
+INSERT INTO ranges VALUES (4, 2155, 1901);
+SELECT * FROM ranges FORCE INDEX(range_key)
+WHERE start = 1901 AND end = 2155;
+id start end
+2 1901 2155
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_index_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_index_read.result
new file mode 100644
index 00000000000..997c5e7db8f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_index_read.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 1901, 2012);
+INSERT INTO ranges VALUES (2, 1901, 2155);
+INSERT INTO ranges VALUES (3, 2012, 2155);
+INSERT INTO ranges VALUES (4, 2155, 1901);
+SELECT start, end
+FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+start end
+1901 2012
+1901 2155
+2012 2155
+2155 1901
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_asc.result
new file mode 100644
index 00000000000..9a84d115a87
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_asc.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 2012, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (2, 1901, 2012);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (3, 2155, 1901);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, 1901, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1970 2012
+4 1970 1970
+1 2012 1970
+3 1970 1970
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_desc.result
new file mode 100644
index 00000000000..3deb7435030
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_32bit_desc.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 2012, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (2, 1901, 2012);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+INSERT INTO ranges VALUES (3, 2155, 1901);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+INSERT INTO ranges VALUES (4, 1901, 2155);
+Warnings:
+Warning 1265 Data truncated for column 'start' at row 1
+Warning 1265 Data truncated for column 'end' at row 1
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 1970 1970
+1 2012 1970
+4 1970 1970
+2 1970 2012
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_asc.result
new file mode 100644
index 00000000000..335b9eb9486
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_asc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start, end;
+id start end
+2 1901 2012
+4 1901 2155
+1 2012 2155
+3 2155 1901
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_desc.result
new file mode 100644
index 00000000000..524456b74bb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_order_64bit_desc.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+SELECT * FROM ranges FORCE INDEX(range_key)
+ORDER BY start DESC, end DESC;
+id start end
+3 2155 1901
+1 2012 2155
+4 1901 2155
+2 1901 2012
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_reinsert.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_reinsert.result
new file mode 100644
index 00000000000..7362411d7cf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_unique_year_reinsert.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ranges;
+CREATE TABLE ranges (
+id INT PRIMARY KEY,
+start YEAR,
+end YEAR,
+UNIQUE KEY range_key(start, end)
+);
+INSERT INTO ranges VALUES (1, 2010, 2012);
+SELECT * FROM ranges;
+id start end
+1 2010 2012
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, 2010, 2012);
+SELECT * FROM ranges;
+id start end
+1 2010 2012
+DROP TABLE ranges;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_int.result
new file mode 100644
index 00000000000..bfc30a1f871
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_int.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS scores;
+CREATE TABLE scores (
+id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+name CHAR(30) NOT NULL,
+score INT NOT NULL,
+KEY property (score, name)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`score`,`name`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores WHERE score = 29;
+id name score
+3 Jiro Yamada 29
+1 Taro Yamada 29
+UPDATE scores SET name = "Saburo YAMADA" WHERE id = 3;
+SELECT * FROM scores WHERE score = 29;
+id name score
+3 Saburo YAMADA 29
+1 Taro Yamada 29
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_string.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_string.result
new file mode 100644
index 00000000000..550551d0052
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_multiple_column_update_string.result
@@ -0,0 +1,34 @@
+drop table if exists listing;
+set names utf8;
+create table scores (
+id int primary key auto_increment not null,
+name char(30) not null,
+score int not null,
+index property (name, score)
+) default charset utf8;
+show create table scores;
+Table Create Table
+scores CREATE TABLE `scores` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` char(30) NOT NULL,
+ `score` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `property` (`name`,`score`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+id name score
+1 Taro Yamada 29
+2 Taro Yamada -12
+3 Jiro Yamada 27
+4 Taro Yamada 10
+update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+id name score
+2 Taro Yamada -12
+4 Taro Yamada 10
+3 Taro Yamada 27
+drop table scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_exact_length.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_exact_length.result
new file mode 100644
index 00000000000..95d7c78bbb6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_exact_length.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id char(10) CHARACTER SET latin1 PRIMARY KEY
+);
+INSERT INTO ids VALUES('abcdefghij');
+INSERT INTO ids VALUES('klmnopqrst');
+INSERT INTO ids VALUES('uvwxyz0123');
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+id
+abcdefghij
+klmnopqrst
+uvwxyz0123
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = 'abcdefghij';
+id
+abcdefghij
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_null_character.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_null_character.result
new file mode 100644
index 00000000000..f7a802060d5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_null_character.result
Binary files differ
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_short.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_short.result
new file mode 100644
index 00000000000..fb08c6601bb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_char_short.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id char(6) CHARACTER SET latin1 PRIMARY KEY
+);
+INSERT INTO ids VALUES("abcdef");
+INSERT INTO ids VALUES( "cdef");
+INSERT INTO ids VALUES( "ef");
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+id
+abcdef
+cdef
+ef
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = "cdef";
+id
+cdef
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result
new file mode 100644
index 00000000000..a460c7d99d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_date.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+day DATE PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `day` date NOT NULL,
+ `title` text,
+ PRIMARY KEY (`day`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (day, title) VALUES ("2012-01-29", "clear day");
+INSERT INTO diaries (day, title) VALUES ("2012-01-30", "rainy day");
+INSERT INTO diaries (day, title) VALUES ("2012-01-31", "cloudy day");
+INSERT INTO diaries (day, title) VALUES ("2012-01-31", "duplicated day");
+ERROR 23000: Duplicate entry '2012-01-31' for key 'PRIMARY'
+SELECT * FROM diaries;
+day title
+2012-01-29 clear day
+2012-01-30 rainy day
+2012-01-31 cloudy day
+SELECT * FROM diaries
+WHERE day BETWEEN "2012-01-29" AND "2012-01-30";
+day title
+2012-01-29 clear day
+2012-01-30 rainy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result
new file mode 100644
index 00000000000..ffbbfe3f460
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_with_fractional_seconds.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+day DATETIME(6) PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `day` datetime(6) NOT NULL,
+ `title` text,
+ PRIMARY KEY (`day`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-29 21:51:01.111111", "clear day");
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-30 01:23:45.333", "rainy day");
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-31 08:32:10.5555", "cloudy day");
+SELECT * FROM diaries;
+day title
+2012-01-29 21:51:01.111111 clear day
+2012-01-30 01:23:45.333000 rainy day
+2012-01-31 08:32:10.555500 cloudy day
+SELECT * FROM diaries
+WHERE day BETWEEN "2012-01-29 00:00:00.123456" AND
+"2012-01-31 00:00:00.999999";
+day title
+2012-01-29 21:51:01.111111 clear day
+2012-01-30 01:23:45.333000 rainy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result
new file mode 100644
index 00000000000..76c529f7fbb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_datetime_without_fractional_seconds.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+day DATETIME PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `day` datetime NOT NULL,
+ `title` text,
+ PRIMARY KEY (`day`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-29 21:51:01", "clear day");
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-30 01:23:45", "rainy day");
+INSERT INTO diaries (day, title)
+VALUES ("2012-01-31 08:32:10", "cloudy day");
+SELECT * FROM diaries;
+day title
+2012-01-29 21:51:01 clear day
+2012-01-30 01:23:45 rainy day
+2012-01-31 08:32:10 cloudy day
+SELECT * FROM diaries
+WHERE day BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+day title
+2012-01-29 21:51:01 clear day
+2012-01-30 01:23:45 rainy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result
new file mode 100644
index 00000000000..9b1e8e7d7e8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_with_fractional_seconds.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS releases;
+CREATE TABLE releases (
+version DECIMAL(6, 3) PRIMARY KEY,
+message TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE releases;
+Table Create Table
+releases CREATE TABLE `releases` (
+ `version` decimal(6,3) NOT NULL,
+ `message` text,
+ PRIMARY KEY (`version`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO releases (version, message) VALUES (10.000, "10th release!");
+INSERT INTO releases (version, message) VALUES (10.001, "minor fix.");
+INSERT INTO releases (version, message) VALUES (999.999, "the last release!");
+SELECT * FROM releases;
+version message
+10.000 10th release!
+10.001 minor fix.
+999.999 the last release!
+SELECT * FROM releases WHERE version BETWEEN "9.000" AND "10.001";
+version message
+10.000 10th release!
+10.001 minor fix.
+DROP TABLE releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result
new file mode 100644
index 00000000000..0624ab2f2b2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_decimal_without_fractional_seconds.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS releases;
+CREATE TABLE releases (
+version DECIMAL PRIMARY KEY,
+message TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE releases;
+Table Create Table
+releases CREATE TABLE `releases` (
+ `version` decimal(10,0) NOT NULL,
+ `message` text,
+ PRIMARY KEY (`version`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO releases (version, message) VALUES (1, "the first release!!!");
+INSERT INTO releases (version, message) VALUES (10, "10th release!");
+INSERT INTO releases (version, message) VALUES (999, "the last release!");
+SELECT * FROM releases;
+version message
+1 the first release!!!
+10 10th release!
+999 the last release!
+SELECT * FROM releases WHERE version BETWEEN "1" AND "10";
+version message
+1 the first release!!!
+10 10th release!
+DROP TABLE releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result
new file mode 100644
index 00000000000..639114875e9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_with_fractional_seconds.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS running_records;
+CREATE TABLE running_records (
+time TIME(6) PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+Table Create Table
+running_records CREATE TABLE `running_records` (
+ `time` time(6) NOT NULL,
+ `title` text,
+ PRIMARY KEY (`time`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO running_records (time, title)
+VALUES ("01:00:00.000001", "normal condition");
+INSERT INTO running_records (time, title)
+VALUES ("12:23:34.123456", "bad condition");
+INSERT INTO running_records (time, title)
+VALUES ("-838:59:59.000000", "record failure");
+SELECT * FROM running_records;
+time title
+-838:59:59.000000 record failure
+01:00:00.000001 normal condition
+12:23:34.123456 bad condition
+SELECT * FROM running_records
+WHERE time BETWEEN "00:59:59.999999" AND "12:23:34.123456";
+time title
+01:00:00.000001 normal condition
+12:23:34.123456 bad condition
+DROP TABLE running_records;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result
new file mode 100644
index 00000000000..6a89cdc33dd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_time_without_fractional_seconds.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS running_records;
+CREATE TABLE running_records (
+time TIME PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+Table Create Table
+running_records CREATE TABLE `running_records` (
+ `time` time NOT NULL,
+ `title` text,
+ PRIMARY KEY (`time`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO running_records (time, title)
+VALUES ("01:00:00", "normal condition");
+INSERT INTO running_records (time, title)
+VALUES ("12:23:34", "bad condition");
+INSERT INTO running_records (time, title)
+VALUES ("-838:59:59", "record failure");
+SELECT * FROM running_records;
+time title
+-838:59:59 record failure
+01:00:00 normal condition
+12:23:34 bad condition
+SELECT * FROM running_records
+WHERE time BETWEEN "00:59:59" AND "12:23:34";
+time title
+01:00:00 normal condition
+12:23:34 bad condition
+DROP TABLE running_records;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result
new file mode 100644
index 00000000000..7040cc22b2e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_with_fractional_seconds.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+time TIMESTAMP(6) PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
+ `title` text,
+ PRIMARY KEY (`time`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (time, title)
+VALUES ("2012-01-29 21:51:01.111111", "clear day");
+INSERT INTO diaries (time, title)
+VALUES ("2012-01-30 01:23:45.333", "rainy day");
+INSERT INTO diaries (time, title)
+VALUES ("2012-01-31 08:32:10.5555", "cloudy day");
+SELECT * FROM diaries;
+time title
+2012-01-29 21:51:01.111111 clear day
+2012-01-30 01:23:45.333000 rainy day
+2012-01-31 08:32:10.555500 cloudy day
+SELECT * FROM diaries
+WHERE time BETWEEN "2012-01-29 00:00:00.123456" AND
+"2012-01-31 00:00:00.999999";
+time title
+2012-01-29 21:51:01.111111 clear day
+2012-01-30 01:23:45.333000 rainy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result
new file mode 100644
index 00000000000..38017f6f8cc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_timestamp_without_fractional_seconds.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+time TIMESTAMP PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `title` text,
+ PRIMARY KEY (`time`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01", "clear day");
+INSERT INTO diaries (time, title) VALUES ("2012-01-30 01:23:45", "rainy day");
+INSERT INTO diaries (time, title) VALUES ("2012-01-31 08:32:10", "cloudy day");
+SELECT * FROM diaries;
+time title
+2012-01-29 21:51:01 clear day
+2012-01-30 01:23:45 rainy day
+2012-01-31 08:32:10 cloudy day
+SELECT * FROM diaries
+WHERE time BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+time title
+2012-01-29 21:51:01 clear day
+2012-01-30 01:23:45 rainy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_varchar_null_character.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_varchar_null_character.result
new file mode 100644
index 00000000000..9079d9c4064
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_varchar_null_character.result
Binary files differ
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result
new file mode 100644
index 00000000000..af9b3a2dbfb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_primary_year.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS aniversary_memos;
+CREATE TABLE aniversary_memos (
+party_year YEAR PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+Table Create Table
+aniversary_memos CREATE TABLE `aniversary_memos` (
+ `party_year` year(4) NOT NULL,
+ `title` text,
+ PRIMARY KEY (`party_year`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO aniversary_memos (party_year, title)
+VALUES ("11", "We need a big cake!");
+INSERT INTO aniversary_memos (party_year, title)
+VALUES ("2012", "Invitations are sent.");
+INSERT INTO aniversary_memos (party_year, title)
+VALUES ("13", "Wow! Today is the anniversary party day!");
+SELECT * FROM aniversary_memos;
+party_year title
+2011 We need a big cake!
+2012 Invitations are sent.
+2013 Wow! Today is the anniversary party day!
+SELECT * FROM aniversary_memos
+WHERE party_year BETWEEN "12" AND "2013";
+party_year title
+2012 Invitations are sent.
+2013 Wow! Today is the anniversary party day!
+DROP TABLE aniversary_memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_asc.result
new file mode 100644
index 00000000000..1ca4b145f54
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_asc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id > 1 ORDER BY ids.id ASC LIMIT 3;
+id
+2
+3
+4
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_desc.result
new file mode 100644
index 00000000000..80dcb25ffe6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_desc.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id > 3 ORDER BY ids.id DESC LIMIT 3;
+id
+5
+4
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_asc.result
new file mode 100644
index 00000000000..4c1ff997d79
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_asc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id >= 2 ORDER BY ids.id ASC LIMIT 3;
+id
+2
+3
+4
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_desc.result
new file mode 100644
index 00000000000..4998725aef5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_greater_than_or_equal_desc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id >= 3 ORDER BY ids.id DESC LIMIT 3;
+id
+5
+4
+3
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_asc.result
new file mode 100644
index 00000000000..8b142f30610
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_asc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id < 4 ORDER BY ids.id ASC LIMIT 3;
+id
+1
+2
+3
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_desc.result
new file mode 100644
index 00000000000..eaf5b87e62c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_desc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id < 4 ORDER BY ids.id DESC LIMIT 3;
+id
+3
+2
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_asc.result
new file mode 100644
index 00000000000..e1e96c9ca8b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_asc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id <= 4 ORDER BY ids.id ASC LIMIT 3;
+id
+1
+2
+3
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_desc.result
new file mode 100644
index 00000000000..e8124ca14c0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_range_less_than_or_equal_desc.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS ids;
+SET NAMES UTF8;
+CREATE TABLE ids (
+id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+SELECT * FROM ids WHERE ids.id <= 4 ORDER BY ids.id DESC LIMIT 3;
+id
+4
+3
+2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint.result
new file mode 100644
index 00000000000..77b321015c9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id BIGINT,
+value BIGINT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+SELECT * FROM ids;
+id value
+-16 1
+-8 2
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+16 -1
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+id value
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint_unsigned.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint_unsigned.result
new file mode 100644
index 00000000000..b0004a3c87a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_bigint_unsigned.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id BIGINT UNSIGNED,
+value BIGINT UNSIGNED,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+SELECT * FROM ids;
+id value
+1 1
+2 2
+4 3
+8 4
+16 5
+32 6
+64 7
+128 8
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+id value
+4 3
+8 4
+16 5
+32 6
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_double.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_double.result
new file mode 100644
index 00000000000..862a314c9c2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_double.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id DOUBLE,
+value DOUBLE,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1.1, 16.16);
+INSERT INTO ids VALUES ( -2.2, 8.8);
+INSERT INTO ids VALUES ( -4.4, 4.4);
+INSERT INTO ids VALUES ( -8.8, 2.2);
+INSERT INTO ids VALUES (-16.6, 1.1);
+INSERT INTO ids VALUES ( 16.6, -1.1);
+INSERT INTO ids VALUES ( 8.8, -2.2);
+INSERT INTO ids VALUES ( 4.4, -4.4);
+INSERT INTO ids VALUES ( 2.2, -8.8);
+INSERT INTO ids VALUES ( 1.1, -16.16);
+SELECT * FROM ids;
+id value
+-16.6 1.1
+-8.8 2.2
+-4.4 4.4
+-2.2 8.8
+-1.1 16.16
+1.1 -16.16
+2.2 -8.8
+4.4 -4.4
+8.8 -2.2
+16.6 -1.1
+SELECT * FROM ids WHERE id BETWEEN -4.5 AND 8.9;
+id value
+-4.4 4.4
+-2.2 8.8
+-1.1 16.16
+1.1 -16.16
+2.2 -8.8
+4.4 -4.4
+8.8 -2.2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_float.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_float.result
new file mode 100644
index 00000000000..04d44130ed4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_float.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id FLOAT,
+value FLOAT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1.1, 16.16);
+INSERT INTO ids VALUES ( -2.2, 8.8);
+INSERT INTO ids VALUES ( -4.4, 4.4);
+INSERT INTO ids VALUES ( -8.8, 2.2);
+INSERT INTO ids VALUES (-16.6, 1.1);
+INSERT INTO ids VALUES ( 16.6, -1.1);
+INSERT INTO ids VALUES ( 8.8, -2.2);
+INSERT INTO ids VALUES ( 4.4, -4.4);
+INSERT INTO ids VALUES ( 2.2, -8.8);
+INSERT INTO ids VALUES ( 1.1, -16.16);
+SELECT * FROM ids;
+id value
+-16.6 1.1
+-8.8 2.2
+-4.4 4.4
+-2.2 8.8
+-1.1 16.16
+1.1 -16.16
+2.2 -8.8
+4.4 -4.4
+8.8 -2.2
+16.6 -1.1
+SELECT * FROM ids WHERE id BETWEEN -4.5 AND 8.9;
+id value
+-4.4 4.4
+-2.2 8.8
+-1.1 16.16
+1.1 -16.16
+2.2 -8.8
+4.4 -4.4
+8.8 -2.2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int.result
new file mode 100644
index 00000000000..8d3f6f7ff9e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT,
+value INT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+SELECT * FROM ids;
+id value
+-16 1
+-8 2
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+16 -1
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+id value
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int_unsigned.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int_unsigned.result
new file mode 100644
index 00000000000..d09f97e0d06
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_int_unsigned.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT UNSIGNED,
+value INT UNSIGNED,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+SELECT * FROM ids;
+id value
+1 1
+2 2
+4 3
+8 4
+16 5
+32 6
+64 7
+128 8
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+id value
+4 3
+8 4
+16 5
+32 6
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint.result
new file mode 100644
index 00000000000..5242f10ff02
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id MEDIUMINT,
+value MEDIUMINT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+SELECT * FROM ids;
+id value
+-16 1
+-8 2
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+16 -1
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+id value
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint_unsigned.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint_unsigned.result
new file mode 100644
index 00000000000..41d9c0ebeeb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_mediumint_unsigned.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id MEDIUMINT UNSIGNED,
+value MEDIUMINT UNSIGNED,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+SELECT * FROM ids;
+id value
+1 1
+2 2
+4 3
+8 4
+16 5
+32 6
+64 7
+128 8
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+id value
+4 3
+8 4
+16 5
+32 6
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint.result
new file mode 100644
index 00000000000..e34b7b7ddab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id SMALLINT,
+value SMALLINT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+SELECT * FROM ids;
+id value
+-16 1
+-8 2
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+16 -1
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+id value
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint_unsigned.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint_unsigned.result
new file mode 100644
index 00000000000..9014f9afaec
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_smallint_unsigned.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id SMALLINT UNSIGNED,
+value SMALLINT UNSIGNED,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+SELECT * FROM ids;
+id value
+1 1
+2 2
+4 3
+8 4
+16 5
+32 6
+64 7
+128 8
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+id value
+4 3
+8 4
+16 5
+32 6
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint.result
new file mode 100644
index 00000000000..63b27fdd4ff
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id TINYINT,
+value TINYINT,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+SELECT * FROM ids;
+id value
+-16 1
+-8 2
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+16 -1
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+id value
+-4 4
+-2 8
+-1 16
+1 -16
+2 -8
+4 -4
+8 -2
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint_unsigned.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint_unsigned.result
new file mode 100644
index 00000000000..412b9b7c0c8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_tinyint_unsigned.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id TINYINT UNSIGNED,
+value TINYINT UNSIGNED,
+KEY (id, value)
+);
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+SELECT * FROM ids;
+id value
+1 1
+2 2
+4 3
+8 4
+16 5
+32 6
+64 7
+128 8
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+id value
+4 3
+8 4
+16 5
+32 6
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar.result
new file mode 100644
index 00000000000..c08522d0dab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id VARCHAR(5),
+value VARCHAR(10),
+KEY (id, value)
+) DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+INSERT INTO ids VALUES ("abc", "Abc");
+INSERT INTO ids VALUES ("acd", "aBc");
+INSERT INTO ids VALUES ("ade", "abC");
+INSERT INTO ids VALUES ("aef", "abc");
+INSERT INTO ids VALUES ("ABC", "aBC");
+INSERT INTO ids VALUES ("ACD", "AbC");
+INSERT INTO ids VALUES ("ADE", "ABc");
+INSERT INTO ids VALUES ("AEF", "ABC");
+SELECT * FROM ids;
+id value
+ABC aBC
+ACD AbC
+ADE ABc
+AEF ABC
+abc Abc
+acd aBc
+ade abC
+aef abc
+SELECT * FROM ids WHERE id BETWEEN "ab" AND "ad";
+id value
+abc Abc
+acd aBc
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar_collation.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar_collation.result
new file mode 100644
index 00000000000..9882f2b1598
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_multiple_varchar_collation.result
@@ -0,0 +1,31 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id VARCHAR(5),
+value VARCHAR(10),
+KEY (id, value)
+) DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
+INSERT INTO ids VALUES ("abc", "Abc");
+INSERT INTO ids VALUES ("acd", "aBc");
+INSERT INTO ids VALUES ("ade", "abC");
+INSERT INTO ids VALUES ("aef", "abc");
+INSERT INTO ids VALUES ("ABC", "aBC");
+INSERT INTO ids VALUES ("ACD", "AbC");
+INSERT INTO ids VALUES ("ADE", "ABc");
+INSERT INTO ids VALUES ("AEF", "ABC");
+SELECT * FROM ids;
+id value
+abc Abc
+acd aBc
+ade abC
+aef abc
+ABC aBC
+ACD AbC
+ADE ABc
+AEF ABC
+SELECT * FROM ids WHERE id BETWEEN "ab" AND "ad";
+id value
+abc Abc
+ABC aBC
+acd aBc
+ACD AbC
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_int.result
new file mode 100644
index 00000000000..67f1f4f8268
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_int.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT,
+KEY (id)
+);
+INSERT INTO ids VALUES (1);
+INSERT INTO ids SELECT id + 1 FROM ids;
+INSERT INTO ids SELECT id + 2 FROM ids;
+INSERT INTO ids SELECT id + 4 FROM ids;
+INSERT INTO ids SELECT id + 8 FROM ids;
+INSERT INTO ids SELECT id + 16 FROM ids;
+SELECT * FROM ids;
+id
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+SELECT * FROM ids WHERE id BETWEEN 10 AND 16;
+id
+10
+11
+12
+13
+14
+15
+16
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_varchar.result
new file mode 100644
index 00000000000..2cdde6c4086
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_normal_varchar.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id VARCHAR(10),
+KEY (id)
+);
+INSERT INTO ids VALUES ("1");
+INSERT INTO ids SELECT id + "1" FROM ids;
+INSERT INTO ids SELECT id + "2" FROM ids;
+INSERT INTO ids SELECT id + "4" FROM ids;
+INSERT INTO ids SELECT id + "8" FROM ids;
+INSERT INTO ids SELECT id + "16" FROM ids;
+SELECT * FROM ids;
+id
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+SELECT * FROM ids WHERE id BETWEEN "10" AND "16";
+id
+10
+11
+12
+13
+14
+15
+16
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_int.result
new file mode 100644
index 00000000000..23f63d2ffca
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_int.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT,
+PRIMARY KEY (id)
+);
+INSERT INTO ids VALUES (1);
+INSERT INTO ids SELECT id + 1 FROM ids;
+INSERT INTO ids SELECT id + 2 FROM ids;
+INSERT INTO ids SELECT id + 4 FROM ids;
+INSERT INTO ids SELECT id + 8 FROM ids;
+INSERT INTO ids SELECT id + 16 FROM ids;
+SELECT * FROM ids;
+id
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+SELECT * FROM ids WHERE id BETWEEN 10 AND 16;
+id
+10
+11
+12
+13
+14
+15
+16
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_varchar.result
new file mode 100644
index 00000000000..7fa17bd79d9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_read_primary_varchar.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id VARCHAR(10),
+PRIMARY KEY (id)
+);
+INSERT INTO ids VALUES ("1");
+INSERT INTO ids SELECT id + "1" FROM ids;
+INSERT INTO ids SELECT id + "2" FROM ids;
+INSERT INTO ids SELECT id + "4" FROM ids;
+INSERT INTO ids SELECT id + "8" FROM ids;
+INSERT INTO ids SELECT id + "16" FROM ids;
+SELECT * FROM ids;
+id
+1
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+2
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+3
+30
+31
+32
+4
+5
+6
+7
+8
+9
+SELECT * FROM ids WHERE id BETWEEN "10" AND "16";
+id
+10
+11
+12
+13
+14
+15
+16
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_by_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_by_primary_key.result
new file mode 100644
index 00000000000..4e10cf72415
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_delete_by_primary_key.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS users;
+CREATE TABLE users (
+id int PRIMARY KEY,
+name varchar(100) NOT NULL,
+UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+INSERT INTO users VALUES (1, "Alice");
+DELETE FROM users WHERE id = 1;
+INSERT INTO users VALUES (1, "Alice");
+SELECT * FROM users;
+id name
+1 Alice
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_insert_after_error.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_insert_after_error.result
new file mode 100644
index 00000000000..7b2c0b86214
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_insert_after_error.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS users;
+CREATE TABLE users (
+id int PRIMARY KEY,
+name varchar(100) NOT NULL,
+UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+INSERT INTO users VALUES (1, "Alice");
+INSERT INTO users VALUES (1, "Bob");
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+INSERT INTO users VALUES (2, "Bob");
+SELECT * FROM users;
+id name
+1 Alice
+2 Bob
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_varchar.result
new file mode 100644
index 00000000000..155cdf15959
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_unique_varchar.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS users;
+CREATE TABLE users (
+name varchar(100) NOT NULL,
+UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+INSERT INTO users VALUES ("Alice");
+INSERT INTO users VALUES ("Bob");
+SELECT * FROM users;
+name
+Alice
+Bob
+SELECT * FROM users WHERE name = "aLiCe";
+name
+Alice
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_update_multiple_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_update_multiple_column.result
new file mode 100644
index 00000000000..9165ca26fea
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_update_multiple_column.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS scores;
+SET NAMES utf8;
+CREATE TABLE scores (
+deleted BOOLEAN,
+value INT,
+INDEX (deleted, value)
+);
+INSERT INTO scores VALUES (FALSE, 1);
+INSERT INTO scores VALUES (FALSE, 1);
+INSERT INTO scores VALUES (FALSE, 2);
+SELECT count(*) FROM scores WHERE deleted = FALSE;
+count(*)
+3
+UPDATE scores SET deleted = TRUE WHERE value = 1;
+SELECT count(*) FROM scores WHERE deleted = FALSE;
+count(*)
+1
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/index_update_single_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/index_update_single_column.result
new file mode 100644
index 00000000000..b283af17f94
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/index_update_single_column.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS scores;
+SET NAMES utf8;
+CREATE TABLE scores (
+value INT,
+INDEX (value)
+);
+INSERT INTO scores VALUES (21);
+INSERT INTO scores VALUES (21);
+INSERT INTO scores VALUES (22);
+SELECT count(*) FROM scores WHERE value >= 20;
+count(*)
+3
+UPDATE scores SET value = 11 WHERE value = 21;
+SELECT count(*) FROM scores WHERE value >= 20;
+count(*)
+1
+DROP TABLE scores;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result
new file mode 100644
index 00000000000..8d3decfa32a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result
@@ -0,0 +1,4 @@
+select PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_TYPE
+from information_schema.plugins where plugin_name = "Mroonga";
+PLUGIN_NAME PLUGIN_VERSION PLUGIN_TYPE
+Mroonga 4.6 STORAGE ENGINE
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result.in b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result.in
new file mode 100644
index 00000000000..f1020453183
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_plugins.result.in
@@ -0,0 +1,4 @@
+select PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_TYPE
+from information_schema.plugins where plugin_name = "Mroonga";
+PLUGIN_NAME PLUGIN_VERSION PLUGIN_TYPE
+Mroonga @MRN_PLUGIN_VERSION@ STORAGE ENGINE
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_none.result b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_none.result
new file mode 100644
index 00000000000..c23dab5e4a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_none.result
@@ -0,0 +1,10 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT PRIMARY KEY
+);
+SELECT AUTO_INCREMENT
+FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_NAME = "ids";
+AUTO_INCREMENT
+NULL
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_use.result b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_use.result
new file mode 100644
index 00000000000..96d1b0ad32e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_auto_increment_use.result
@@ -0,0 +1,10 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT AUTO_INCREMENT PRIMARY KEY
+);
+SELECT AUTO_INCREMENT
+FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_NAME = "ids";
+AUTO_INCREMENT
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result
new file mode 100644
index 00000000000..d58afb1f6d4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/information_schema_tables_data_length.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT COUNT(*)
+FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_NAME = "diaries" AND DATA_LENGTH > 0;
+COUNT(*)
+1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..00466f19bb5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/insert_TODO_SPLIT_ME.result
@@ -0,0 +1,90 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 tinyint);
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 smallint);
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 mediumint);
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 int);
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 bigint);
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 float);
+insert into t1 values(0.5);
+select * from t1;
+c1
+0.5
+drop table t1;
+create table t1 (c1 double);
+insert into t1 values(0.5);
+select * from t1;
+c1
+0.5
+drop table t1;
+create table t1 (c1 date);
+insert into t1 values("2010/03/26");
+select * from t1;
+c1
+2010-03-26
+drop table t1;
+create table t1 (c1 time);
+insert into t1 values("11:22:33");
+select * from t1;
+c1
+11:22:33
+drop table t1;
+create table t1 (c1 year);
+insert into t1 values("2010");
+select * from t1;
+c1
+2010
+drop table t1;
+create table t1 (c1 datetime);
+insert into t1 values("2010/03/26 11:22:33");
+select * from t1;
+c1
+2010-03-26 11:22:33
+drop table t1;
+create table t1 (c1 int, _id int);
+set sql_mode="";
+insert into t1 (c1,_id) values (1,1);
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+set sql_mode="strict_all_tables";
+insert into t1 (c1,_id) values (4,1);
+ERROR 01000: Data truncated for column '_id' at row 1
+select * from t1;
+c1 _id
+1 1
+drop table t1;
+create table t1 (c1 int primary key, c2 int);
+insert into t1 values(1,100);
+select * from t1;
+c1 c2
+1 100
+insert into t1 values(1,200);
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+select * from t1;
+c1 c2
+1 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/insert_delayed.result b/storage/mroonga/mysql-test/mroonga/storage/r/insert_delayed.result
new file mode 100644
index 00000000000..eb11e26e566
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/insert_delayed.result
@@ -0,0 +1,9 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT PRIMARY KEY
+) DEFAULT CHARSET=UTF8;
+INSERT DELAYED INTO ids (id) VALUES (1);
+ERROR HY000: DELAYED option not supported for table 'ids'
+SELECT * FROM ids;
+id
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.result b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.result
new file mode 100644
index 00000000000..0d2c9dd7987
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS numbers;
+CREATE TABLE numbers (
+id INT,
+count INT,
+UNIQUE (id)
+);
+INSERT INTO numbers (id, count) VALUES (1, 1) ON DUPLICATE KEY UPDATE count = 2;
+INSERT INTO numbers (id, count) VALUES (1, 3) ON DUPLICATE KEY UPDATE count = 4;
+SELECT * FROM numbers;
+id count
+1 4
+INSERT INTO numbers (id, count) VALUES (2, 1) ON DUPLICATE KEY UPDATE count = 2;
+INSERT INTO numbers (id, count) VALUES (2, 3) ON DUPLICATE KEY UPDATE count = 4;
+SELECT * FROM numbers;
+id count
+1 4
+2 4
+DROP TABLE numbers;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result
new file mode 100644
index 00000000000..12d4b173eaa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_primary_key.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+day DATE PRIMARY KEY,
+title TEXT
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `day` date NOT NULL,
+ `title` text,
+ PRIMARY KEY (`day`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-14", "clear day")
+ON DUPLICATE KEY UPDATE title = "clear day (duplicated)";
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-14", "rainy day")
+ON DUPLICATE KEY UPDATE title = "rainy day (duplicated)";
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-15", "cloudy day")
+ON DUPLICATE KEY UPDATE title = "cloudy day (duplicated)";
+SELECT * FROM diaries;
+day title
+2012-02-14 rainy day (duplicated)
+2012-02-15 cloudy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result
new file mode 100644
index 00000000000..288e9e3a2c8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/insert_on_duplicate_key_update_unique_key.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+day DATE,
+title TEXT,
+UNIQUE KEY day (day)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `day` date DEFAULT NULL,
+ `title` text,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `day` (`day`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-14", "clear day")
+ON DUPLICATE KEY UPDATE title = "clear day (duplicated)";
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-14", "rainy day")
+ON DUPLICATE KEY UPDATE title = "rainy day (duplicated)";
+INSERT INTO diaries (day, title)
+VALUES ("2012-02-15", "cloudy day")
+ON DUPLICATE KEY UPDATE title = "cloudy day (duplicated)";
+SELECT * FROM diaries;
+id day title
+1 2012-02-14 rainy day (duplicated)
+3 2012-02-15 cloudy day
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/like_unicode_ci.result b/storage/mroonga/mysql-test/mroonga/storage/r/like_unicode_ci.result
new file mode 100644
index 00000000000..1cc1d92451d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/like_unicode_ci.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS terms;
+SET NAMES utf8;
+CREATE TABLE terms (
+content varchar(64) NOT NULL COLLATE 'utf8_unicode_ci',
+INDEX (content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO terms VALUES ('track');
+INSERT INTO terms VALUES ('trackback');
+SELECT * FROM terms WHERE content LIKE 'TRACK%';
+content
+track
+trackback
+DROP TABLE terms;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/lock_tables_read.result b/storage/mroonga/mysql-test/mroonga/storage/r/lock_tables_read.result
new file mode 100644
index 00000000000..4e1db465c63
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/lock_tables_read.result
@@ -0,0 +1,7 @@
+DROP TABLE IF EXISTS counts;
+CREATE TABLE counts (
+id INT PRIMARY KEY AUTO_INCREMENT
+);
+LOCK TABLES counts READ;
+UNLOCK TABLES;
+DROP TABLE counts;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result
new file mode 100644
index 00000000000..da15588ccd5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_disabled.result
@@ -0,0 +1,47 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SET mroonga_enable_optimization=FALSE;
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+month = 11
+ORDER BY day LIMIT 1,2;
+id year month day title content
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+4 2011 11 12 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+SET mroonga_enable_optimization=TRUE;
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result
new file mode 100644
index 00000000000..0794b104a62
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_not_optimized_no_limit.result
@@ -0,0 +1,47 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY day;
+id year month day title content
+7 2011 12 2 åˆé›ª 今日ã®å¤©æ°—ã¯é›ªï¼
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+4 2011 11 12 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+5 2011 11 13 ã¯ã‚Œ 天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result
new file mode 100644
index 00000000000..bd34b040ad7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date BETWEEN "2011-11-11 12:23:31" AND "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+id date content
+3 2011-11-11 12:23:32 I will do something today!
+4 2011-11-11 12:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result
new file mode 100644
index 00000000000..f495a3b5956
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_between_over.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date BETWEEN "2011-11-11 12:23:31" AND "2011-11-11 12:23:43"
+ ORDER BY id LIMIT 1,2;
+id date content
+3 2011-11-11 12:23:32 I will do something today!
+4 2011-11-11 12:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result
new file mode 100644
index 00000000000..b5be750690d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:34", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:34", "Tomorrow will be fine.");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:34", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:34", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date = "2011-11-11 12:23:34"
+ ORDER BY id LIMIT 1,2;
+id date content
+3 2011-11-11 12:23:34 I will do something today!
+4 2011-11-11 12:23:34 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result
new file mode 100644
index 00000000000..6f20f3b8b35
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date > "2011-11-11 12:23:31"
+ ORDER BY id LIMIT 1,2;
+id date content
+4 2011-11-11 12:23:33 I don't want to anything today...
+5 2011-11-11 12:23:34 I'm sleepy today.
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result
new file mode 100644
index 00000000000..5df3c12ccd8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_greater_than_or_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date >= "2011-11-11 12:23:31"
+ ORDER BY id LIMIT 1,2;
+id date content
+3 2011-11-11 12:23:32 I will do something today!
+4 2011-11-11 12:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result
new file mode 100644
index 00000000000..c12e69bf686
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date < "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+id date content
+2 2011-11-11 12:23:31 Today's lucky item is flower!
+3 2011-11-11 12:23:32 I will do something today!
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result
new file mode 100644
index 00000000000..6d00bac66eb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_datetime_less_than_or_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+date DATETIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `date` datetime DEFAULT NULL,
+ `content` text,
+ KEY `date` (`date`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+date <= "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+id date content
+2 2011-11-11 12:23:31 Today's lucky item is flower!
+3 2011-11-11 12:23:32 I will do something today!
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result
new file mode 100644
index 00000000000..529f0d521ee
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_have_primary_key.result
@@ -0,0 +1,43 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+id year month day title content
+5 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+6 2011 12 2 åˆé›ª 今日ã®å¤©æ°—ã¯é›ªï¼
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+4 2011 11 11 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between.result
new file mode 100644
index 00000000000..ed86c0e1e37
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(id)
+) DEFAULT CHARSET UTF8;
+INSERT INTO memos VALUES(1, "Today is fine.");
+INSERT INTO memos VALUES(2, "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "I will do something today!");
+INSERT INTO memos VALUES(4, "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+id BETWEEN 2 AND 4
+ORDER BY id LIMIT 1,2;
+id content
+3 I will do something today!
+4 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between_over.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between_over.result
new file mode 100644
index 00000000000..a18e2a15863
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_between_over.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(id)
+) DEFAULT CHARSET UTF8;
+INSERT INTO memos VALUES(1, "Today is fine.");
+INSERT INTO memos VALUES(2, "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "I will do something today!");
+INSERT INTO memos VALUES(4, "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+id BETWEEN 2 AND 6
+ORDER BY id LIMIT 1,2;
+id content
+3 I will do something today!
+4 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result
new file mode 100644
index 00000000000..2320b0ffbc4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_equal.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+month = 11
+ORDER BY day LIMIT 1,2;
+id year month day title content
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+4 2011 11 12 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result
new file mode 100644
index 00000000000..c367aef808a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+day > 10
+ORDER BY day LIMIT 1,2;
+id year month day title content
+4 2011 11 12 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+5 2011 11 13 ã¯ã‚Œ 天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result
new file mode 100644
index 00000000000..b00a4e2a2c3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_greater_than_or_equal.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+day >= 10
+ORDER BY day LIMIT 1,2;
+id year month day title content
+4 2011 11 12 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+5 2011 11 13 ã¯ã‚Œ 天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result
new file mode 100644
index 00000000000..5bf6bca4985
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+day < 12
+ORDER BY day LIMIT 1,2;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result
new file mode 100644
index 00000000000..5d6a19a936e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_int_less_than_or_equal.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+day <= 12
+ORDER BY day LIMIT 1,2;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result
new file mode 100644
index 00000000000..6ee2991e51a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_primary_key.result
@@ -0,0 +1,42 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+id year month day title content
+5 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+6 2011 12 2 åˆé›ª 今日ã®å¤©æ°—ã¯é›ªï¼
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+4 2011 11 11 å¸°ã‚Šé“ ä»Šæ—¥ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_where_clause.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_where_clause.result
new file mode 100644
index 00000000000..9730069c849
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_no_where_clause.result
@@ -0,0 +1,19 @@
+drop table if exists t1;
+flush status;
+create table t1 (c1 int primary key, c2 int, c3 text, _id int, key idx1(c2), fulltext index ft(c3)) default charset utf8;
+insert into t1 values(1,10,"aa ii uu ee oo",null);
+insert into t1 values(2,20,"ka ki ku ke ko",null);
+insert into t1 values(3,30,"ii si ii se ii",null);
+insert into t1 values(4,40,"ta ti tu te to",null);
+insert into t1 values(5,50,"aa ii uu ii oo",null);
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+select *, match(c3) against("ii") from t1 order by c1 desc limit 2;
+c1 c2 c3 _id match(c3) against("ii")
+5 50 aa ii uu ii oo 5 349526
+4 40 ta ti tu te to 4 0
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result
new file mode 100644
index 00000000000..e91e8af5391
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_asc.result
@@ -0,0 +1,43 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY day ASC LIMIT 1;
+id year month day title content
+7 2011 12 2 åˆé›ª 今日ã®å¤©æ°—ã¯é›ªï¼
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result
new file mode 100644
index 00000000000..da01145e45a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_desc.result
@@ -0,0 +1,43 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY day DESC LIMIT 1;
+id year month day title content
+5 2011 11 13 ã¯ã‚Œ 天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result
new file mode 100644
index 00000000000..bb541c014bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_id.result
@@ -0,0 +1,46 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+_id INT,
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `_id` int(11) DEFAULT NULL,
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(NULL, 1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(NULL, 2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(NULL, 3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(NULL, 4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(NULL, 5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(NULL, 6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(NULL, 7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY _id
+LIMIT 1;
+_id id year month day title content
+1 1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result
new file mode 100644
index 00000000000..fb9393687dc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_order_by_match_against.result
@@ -0,0 +1,44 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+LIMIT 1;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result
new file mode 100644
index 00000000000..75ad884a268
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_select_match_against.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT *, MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ORDER BY MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+LIMIT 1;
+id year month day title content MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚ 1
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result
new file mode 100644
index 00000000000..bb4ac9c3b33
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time BETWEEN "1:23:31" AND "1:23:33"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+3 01:23:32 I will do something today!
+4 01:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result
new file mode 100644
index 00000000000..1b4d38e0107
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_between_over.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time BETWEEN "1:23:31" AND "1:23:43"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+3 01:23:32 I will do something today!
+4 01:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result
new file mode 100644
index 00000000000..4fff9f9185f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:34", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:34", "Tomorrow will be fine.");
+INSERT INTO memos VALUES(3, "1:23:34", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:34", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time = "1:23:34"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+3 01:23:34 I will do something today!
+4 01:23:34 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result
new file mode 100644
index 00000000000..61119b2b74e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" );
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time > "1:23:31"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+4 01:23:33 I don't want to anything today...
+5 01:23:34 I'm sleepy today.
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result
new file mode 100644
index 00000000000..9bf8b91ea07
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_greater_than_or_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" );
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time >= "1:23:31"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+3 01:23:32 I will do something today!
+4 01:23:33 I don't want to anything today...
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result
new file mode 100644
index 00000000000..e4d41f5867e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time < "1:23:33"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+2 01:23:31 Today's lucky item is flower!
+3 01:23:32 I will do something today!
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result
new file mode 100644
index 00000000000..31a497ef8bb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_time_less_than_or_equal.result
@@ -0,0 +1,35 @@
+DROP TABLE IF EXISTS memos;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE memos (
+id INT UNSIGNED NOT NULL,
+writing_time TIME,
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(10) unsigned NOT NULL,
+ `writing_time` time DEFAULT NULL,
+ `content` text,
+ KEY `writing_time` (`writing_time`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+SELECT * FROM memos
+WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+writing_time <= "1:23:33"
+ ORDER BY id LIMIT 1,2;
+id writing_time content
+2 01:23:31 Today's lucky item is flower!
+3 01:23:32 I will do something today!
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result
new file mode 100644
index 00000000000..46c80ddcce7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_with_index.result
@@ -0,0 +1,46 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(title),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `title` (`title`),
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+title = "hello"
+ ORDER BY day LIMIT 1;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result
new file mode 100644
index 00000000000..38263c1083f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_varchar_equal_without_index.result
@@ -0,0 +1,44 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(month),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ KEY `month` (`month`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+SELECT * FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+title = "hello"
+ ORDER BY day LIMIT 1;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between.result
new file mode 100644
index 00000000000..5a1b1bda2ce
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year BETWEEN "11" AND "2013" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id DESC LIMIT 1,2;
+id release_title release_year
+3 Mroonga 2.0 has been released 2012
+2 Rename Groonga storage engine to Mroonga 2011
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between_over.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between_over.result
new file mode 100644
index 00000000000..b0ad41fbbba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_between_over.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year BETWEEN "11" AND "2015" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id DESC LIMIT 1,2;
+id release_title release_year
+4 Mroonga 3.0 has been released 2013
+3 Mroonga 2.0 has been released 2012
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_equal.result
new file mode 100644
index 00000000000..08db6b384e8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_equal.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine (code name Mroonga) 1.0 has been released", "11");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 1.11 has been released", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year = "11" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id DESC LIMIT 1,2;
+id release_title release_year
+2 Rename Groonga storage engine to Mroonga 2011
+1 Groonga storage engine (code name Mroonga) 1.0 has been released 2011
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than.result
new file mode 100644
index 00000000000..a33cd484865
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year > "11" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id ASC LIMIT 2;
+id release_title release_year
+3 Mroonga 2.0 has been released 2012
+4 Mroonga 3.0 has been released 2013
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than_or_equal.result
new file mode 100644
index 00000000000..7d2471b3aa0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_greater_than_or_equal.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year >= "11" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id ASC LIMIT 2;
+id release_title release_year
+2 Rename Groonga storage engine to Mroonga 2011
+3 Mroonga 2.0 has been released 2012
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than.result
new file mode 100644
index 00000000000..cac3d6f4356
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year < "13" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id DESC LIMIT 1,2;
+id release_title release_year
+2 Rename Groonga storage engine to Mroonga 2011
+1 Groonga storage engine (code name Mroonga) 0.1 has been released 2010
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than_or_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than_or_equal.result
new file mode 100644
index 00000000000..df57f51e5d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_order_limit_optimized_year_less_than_or_equal.result
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS mroonga_releases;
+FLUSH STATUS;
+CREATE TABLE mroonga_releases (
+id INT PRIMARY KEY AUTO_INCREMENT,
+release_title TEXT,
+release_year YEAR,
+KEY (release_year),
+FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+VALUES ("Mroonga 4.0 will be released", "2014");
+SELECT * FROM mroonga_releases
+WHERE release_year <= "13" AND
+MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ORDER BY id DESC LIMIT 1,2;
+id release_title release_year
+3 Mroonga 2.0 has been released 2012
+2 Rename Groonga storage engine to Mroonga 2011
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+DROP TABLE mroonga_releases;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..b66801094bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_TODO_SPLIT_ME.result
@@ -0,0 +1,106 @@
+drop table if exists t1, t2, t3;
+flush status;
+create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+select count(*) from t1;
+count(*)
+5
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+select * from t1 force index(primary) where c1 between 2 and 4;
+c1 c2 c3
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+select count(*) from t1 force index(primary) where c1 between 2 and 4;
+count(*)
+3
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+select c1 from t1 force index(primary) where c1 < 3;
+c1
+1
+2
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+select count(c1) from t1 force index(primary) where c1 < 3;
+count(c1)
+2
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+select 1 from t1 force index(primary) where c1 > 3;
+1
+1
+1
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+select count(1) from t1 force index(primary) where c1 > 3;
+count(1)
+2
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 2
+select * from t1 where match(c3) against("su");
+c1 c2 c3
+3 30 sa si su se so
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 2
+select count(*) from t1 where match(c3) against("su");
+count(*)
+1
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 3
+select * from t1 where match(c3) against("+su" in boolean mode);
+c1 c2 c3
+3 30 sa si su se so
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 3
+select count(*) from t1 where match(c3) against("+su" in boolean mode);
+count(*)
+1
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 4
+select * from t1 force index(idx1) where c2 between 20 and 40;
+c1 c2 c3
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 4
+select count(*) from t1 force index(idx1) where c2 between 20 and 40;
+count(*)
+3
+show status like 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 5
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_multithread.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_multithread.result
new file mode 100644
index 00000000000..c09ec340ccb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_multithread.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+CREATE TABLE diaries (
+title TEXT,
+FULLTEXT INDEX ft(title)
+);
+INSERT INTO diaries VALUES("Hello mroonga!");
+INSERT INTO diaries VALUES("It's funny.");
+INSERT INTO diaries VALUES("Happy birthday!");
+SHOW STATUS LIKE 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+COUNT(*)
+1
+SHOW STATUS LIKE 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_single_thread.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_single_thread.result
new file mode 100644
index 00000000000..c09ec340ccb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_after_insert_single_thread.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+CREATE TABLE diaries (
+title TEXT,
+FULLTEXT INDEX ft(title)
+);
+INSERT INTO diaries VALUES("Hello mroonga!");
+INSERT INTO diaries VALUES("It's funny.");
+INSERT INTO diaries VALUES("Happy birthday!");
+SHOW STATUS LIKE 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+COUNT(*)
+1
+SHOW STATUS LIKE 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_disabled.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_disabled.result
new file mode 100644
index 00000000000..9971d21e386
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_disabled.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS diaries;
+FLUSH STATUS;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+SET mroonga_enable_optimization=FALSE;
+SELECT COUNT(*) FROM diaries
+WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE);
+COUNT(*)
+4
+SHOW STATUS LIKE 'mroonga_count_skip';
+Variable_name Value
+Mroonga_count_skip 0
+SET mroonga_enable_optimization=TRUE;
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_index_view.result b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_index_view.result
new file mode 100644
index 00000000000..407347a4fa2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/optimization_skip_count_index_view.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries, users;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+user_id INT NOT NULL,
+title VARCHAR(45) NOT NULL,
+KEY (user_id),
+FULLTEXT INDEX title_index (title)
+) DEFAULT CHARSET=UTF8;
+CREATE TABLE users (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name VARCHAR(45) NOT NULL,
+INDEX (name)
+) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
+INSERT INTO users (id, name) VALUES (1, "Alice"), (2, "Bob");
+INSERT INTO diaries (user_id, title) VALUES (1, "survey");
+INSERT INTO diaries (user_id, title) VALUES (2, "groonga (1)");
+INSERT INTO diaries (user_id, title) VALUES (2, "groonga (2)");
+CREATE VIEW articles AS
+SELECT diaries.user_id AS user_id,
+diaries.title AS title,
+users.name AS name
+FROM diaries, users
+WHERE diaries.user_id = users.id;
+SELECT COUNT(*) FROM articles WHERE name = 'Bob';
+COUNT(*)
+2
+DROP VIEW articles;
+DROP TABLE diaries, users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/replace_geometry.result b/storage/mroonga/mysql-test/mroonga/storage/r/replace_geometry.result
new file mode 100644
index 00000000000..94bd5167dbc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/replace_geometry.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS geo_replace;
+CREATE TABLE geo_replace (
+id INT NOT NULL,
+geo GEOMETRY NOT NULL,
+PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+INSERT INTO geo_replace VALUES(1, POINT(100,100));
+SELECT id, ASTEXT(geo) FROM geo_replace;
+id ASTEXT(geo)
+1 POINT(100 100)
+REPLACE INTO geo_replace VALUES(1, POINT(100,200));
+SELECT id, ASTEXT(geo) FROM geo_replace;
+id ASTEXT(geo)
+1 POINT(100 200)
+INSERT INTO geo_replace VALUES(1, POINT(200,200)) ON DUPLICATE KEY UPDATE geo = POINT(200,200);
+SELECT id, ASTEXT(geo) FROM geo_replace;
+id ASTEXT(geo)
+1 POINT(200 200)
+UPDATE geo_replace SET geo = POINT(200,300);
+SELECT id, ASTEXT(geo) FROM geo_replace;
+id ASTEXT(geo)
+1 POINT(200 300)
+DROP TABLE geo_replace;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/replace_select_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/replace_select_varchar.result
new file mode 100644
index 00000000000..9cbe11c5574
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/replace_select_varchar.result
@@ -0,0 +1,39 @@
+DROP TABLE IF EXISTS videos_master, videos_groonga;
+CREATE TABLE `videos_master` (
+`id` bigint(1) unsigned NOT NULL,
+`video_id` varchar(64) NOT NULL,
+`description` text,
+`tags_unpack` text,
+PRIMARY KEY (`video_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+CREATE TABLE `videos_groonga` (
+`id` bigint(1) unsigned NOT NULL,
+`video_id` varchar(64) NOT NULL,
+`description` text,
+`tags_unpack` text,
+PRIMARY KEY (`video_id`),
+FULLTEXT INDEX (`description`),
+FULLTEXT INDEX (`tags_unpack`)
+) DEFAULT CHARSET=utf8;
+INSERT INTO videos_master VALUES (1, "video-1", "My Familly", "familly human");
+INSERT INTO videos_master VALUES (2, "video-2", "My Cat", "family cat");
+REPLACE INTO videos_groonga
+SELECT v.id, v.video_id, v.description, NULL
+FROM videos_master AS v
+WHERE v.video_id = (video_id);
+SELECT *, MATCH(description) AGAINST("cat") FROM videos_groonga
+WHERE MATCH(description) AGAINST("cat");
+id video_id description tags_unpack MATCH(description) AGAINST("cat")
+2 video-2 My Cat 1048577
+INSERT INTO videos_master VALUES (3, "video-3", "My Dog", "family dog");
+REPLACE INTO videos_groonga
+SELECT v.id, v.video_id, v.description, NULL
+FROM videos_master AS v
+WHERE v.video_id = (video_id);
+SELECT *, MATCH(description) AGAINST("my") FROM videos_groonga
+WHERE MATCH(description) AGAINST("my");
+id video_id description tags_unpack MATCH(description) AGAINST("my")
+1 video-1 My Familly 209716
+2 video-2 My Cat 209716
+3 video-3 My Dog 209716
+DROP TABLE videos_master, videos_groonga;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result b/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result
new file mode 100644
index 00000000000..f2cf9667ac7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/replace_text.result
@@ -0,0 +1,33 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+content text,
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+select * from diaries;
+id content
+1 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+select * from diaries where match(content) against("天気");
+id content
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+replace into diaries values(2, "明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。");
+select * from diaries where match(content) against("天気");
+id content
+2 明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result b/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result
new file mode 100644
index 00000000000..090ea9b84d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/replace_varchar.result
@@ -0,0 +1,33 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+content varchar(256),
+fulltext index (content)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `content` varchar(256) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+select * from diaries;
+id content
+1 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+select * from diaries where match(content) against("天気");
+id content
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+replace into diaries values(2, "明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。");
+select * from diaries where match(content) against("天気");
+id content
+2 明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/replace_vector.result b/storage/mroonga/mysql-test/mroonga/storage/r/replace_vector.result
new file mode 100644
index 00000000000..3e987631dba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/replace_vector.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS vector_replace;
+DROP TABLE IF EXISTS vector_replace_vec;
+CREATE TABLE vector_replace_vec (
+vec CHAR(10) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE vector_replace (
+id INT NOT NULL,
+vec TEXT COMMENT 'flags "COLUMN_VECTOR", type "vector_replace_vec"',
+PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+INSERT INTO vector_replace VALUES(1, 'first second third');
+SELECT id, vec FROM vector_replace;
+id vec
+1 FIRST SECOND THIRD
+REPLACE INTO vector_replace VALUES(1, 'fourth fifth');
+SELECT id, vec FROM vector_replace;
+id vec
+1 FOURTH FIFTH
+INSERT INTO vector_replace VALUES(1, 'sixth seventh') ON DUPLICATE KEY UPDATE vec = 'sixth seventh';
+SELECT id, vec FROM vector_replace;
+id vec
+1 SIXTH SEVENTH
+UPDATE vector_replace SET vec = 'eighth nineth tenth';
+SELECT id, vec FROM vector_replace;
+id vec
+1 EIGHTH NINETH TENTH
+DROP TABLE vector_replace;
+DROP TABLE vector_replace_vec;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_all.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_all.result
new file mode 100644
index 00000000000..18318bdbc4e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_all.result
@@ -0,0 +1,198 @@
+drop table if exists t1, t2, t3;
+create table t1(c1 int, c2 int, c3 int);
+insert into t1 values (1, 10, 100);
+insert into t1 values (2, 30, 500);
+insert into t1 values (5, 20, 200);
+insert into t1 values (3, 60, 300);
+insert into t1 values (4, 50, 600);
+insert into t1 values (6, 40, 400);
+select * from t1;
+c1 c2 c3
+1 10 100
+2 30 500
+5 20 200
+3 60 300
+4 50 600
+6 40 400
+select c1 from t1;
+c1
+1
+2
+5
+3
+4
+6
+select c2 from t1;
+c2
+10
+30
+20
+60
+50
+40
+select c3 from t1;
+c3
+100
+500
+200
+300
+600
+400
+select * from t1 where c1 <= 3;
+c1 c2 c3
+1 10 100
+2 30 500
+3 60 300
+select * from t1 where c2 > 40;
+c1 c2 c3
+3 60 300
+4 50 600
+select * from t1 where c3 = 300;
+c1 c2 c3
+3 60 300
+select * from t1 order by c1;
+c1 c2 c3
+1 10 100
+2 30 500
+3 60 300
+4 50 600
+5 20 200
+6 40 400
+select * from t1 order by c2 desc;
+c1 c2 c3
+3 60 300
+4 50 600
+6 40 400
+2 30 500
+5 20 200
+1 10 100
+select * from t1 order by c3, c1;
+c1 c2 c3
+1 10 100
+5 20 200
+3 60 300
+6 40 400
+2 30 500
+4 50 600
+drop table t1;
+create table t1 (c1 int, c2 varchar(100));
+insert into t1 values(1, "hoge");
+insert into t1 values(4, "hogefuga");
+insert into t1 values(2, "fuga");
+insert into t1 values(5, "moge");
+insert into t1 values(3, "mo");
+select * from t1;
+c1 c2
+1 hoge
+4 hogefuga
+2 fuga
+5 moge
+3 mo
+select * from t1 order by c1;
+c1 c2
+1 hoge
+2 fuga
+3 mo
+4 hogefuga
+5 moge
+select * from t1 order by c1 desc;
+c1 c2
+5 moge
+4 hogefuga
+3 mo
+2 fuga
+1 hoge
+select * from t1 order by c2;
+c1 c2
+2 fuga
+1 hoge
+4 hogefuga
+3 mo
+5 moge
+drop table t1;
+create table t1 (c1 int, c2 text);
+insert into t1 values(1, "hoge");
+insert into t1 values(4, "hogefuga");
+insert into t1 values(2, "fuga");
+insert into t1 values(5, "moge");
+insert into t1 values(3, "mo");
+select * from t1;
+c1 c2
+1 hoge
+4 hogefuga
+2 fuga
+5 moge
+3 mo
+drop table t1;
+create table t1 (c1 int, c2 int, c3 text);
+insert into t1 values(1, 20, "hoge");
+insert into t1 values(4, 60, "hogefuga");
+insert into t1 values(2, 50, "fuga");
+insert into t1 values(5, 30, "moge");
+insert into t1 values(3, 40, "mo");
+select * from t1 order by c1 asc;
+c1 c2 c3
+1 20 hoge
+2 50 fuga
+3 40 mo
+4 60 hogefuga
+5 30 moge
+select * from t1 order by c1 desc;
+c1 c2 c3
+5 30 moge
+4 60 hogefuga
+3 40 mo
+2 50 fuga
+1 20 hoge
+select * from t1 order by c2 asc;
+c1 c2 c3
+1 20 hoge
+5 30 moge
+3 40 mo
+2 50 fuga
+4 60 hogefuga
+select * from t1 order by c2 desc;
+c1 c2 c3
+4 60 hogefuga
+2 50 fuga
+3 40 mo
+5 30 moge
+1 20 hoge
+select * from t1 order by c3 asc;
+c1 c2 c3
+2 50 fuga
+1 20 hoge
+4 60 hogefuga
+3 40 mo
+5 30 moge
+select * from t1 order by c3 desc;
+c1 c2 c3
+5 30 moge
+3 40 mo
+4 60 hogefuga
+1 20 hoge
+2 50 fuga
+drop table t1;
+create table t1 (_id int, c1 int);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+select * from t1;
+_id c1
+1 100
+2 100
+3 100
+4 100
+5 100
+select * from t1 where _id < 3;
+_id c1
+1 100
+2 100
+select * from t1 where _id >= 3;
+_id c1
+3 100
+4 100
+5 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_equal.result
new file mode 100644
index 00000000000..e0e3e21c620
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_equal.result
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS tags;
+CREATE TABLE tags (
+name VARCHAR(16) NOT NULL,
+KEY index_name (name)
+);
+INSERT INTO tags VALUES ('mroonga');
+INSERT INTO tags VALUES ('mysql');
+INSERT INTO tags VALUES ('');
+SELECT * FROM tags WHERE name = "";
+name
+
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_not_equal.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_not_equal.result
new file mode 100644
index 00000000000..3732cb28184
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_empty_key_where_not_equal.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS tags;
+CREATE TABLE tags (
+name VARCHAR(16) NOT NULL,
+KEY index_name (name)
+);
+INSERT INTO tags VALUES ('mroonga');
+INSERT INTO tags VALUES ('mysql');
+INSERT INTO tags VALUES ('');
+SELECT * FROM tags WHERE name != "";
+name
+mroonga
+mysql
+DROP TABLE tags;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result
new file mode 100644
index 00000000000..400156cec7b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_with_index.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS users;
+SET NAMES utf8;
+CREATE TABLE users (
+name varchar(40),
+age int,
+KEY (age)
+);
+INSERT INTO users VALUES ("Alice", 20);
+INSERT INTO users VALUES ("Bob", 20);
+INSERT INTO users VALUES ("Charry", 29);
+SELECT *, COUNT(*) FROM users GROUP BY age;
+name age COUNT(*)
+Alice 20 2
+Charry 29 1
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result
new file mode 100644
index 00000000000..04f63d0e779
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_group_by_without_index.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS users;
+SET NAMES utf8;
+CREATE TABLE users (
+name varchar(40),
+age int
+);
+INSERT INTO users VALUES ("Alice", 20);
+INSERT INTO users VALUES ("Bob", 20);
+INSERT INTO users VALUES ("Charry", 29);
+EXPLAIN SELECT *, COUNT(*) FROM users GROUP BY age;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE users ALL NULL NULL NULL NULL 3 Using temporary; Using filesort
+SELECT *, COUNT(*) FROM users GROUP BY age;
+name age COUNT(*)
+Alice 20 2
+Charry 29 1
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_pkey.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_pkey.result
new file mode 100644
index 00000000000..99f69f49aba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_pkey.result
@@ -0,0 +1,27 @@
+drop table if exists t1, t2, t3;
+create table t1(c1 int primary key, c2 int, c3 int);
+insert into t1 values (1, 10, 100);
+insert into t1 values (2, 30, 500);
+insert into t1 values (5, 20, 200);
+insert into t1 values (3, 60, 300);
+insert into t1 values (4, 50, 600);
+insert into t1 values (6, 40, 400);
+select * from t1 where c1=1;
+c1 c2 c3
+1 10 100
+select * from t1 where c1=2;
+c1 c2 c3
+2 30 500
+select * from t1 where c1=3;
+c1 c2 c3
+3 60 300
+select * from t1 where c1=4;
+c1 c2 c3
+4 50 600
+select * from t1 where c1=5;
+c1 c2 c3
+5 20 200
+select * from t1 where c1=6;
+c1 c2 c3
+6 40 400
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/select_secondary_key.result b/storage/mroonga/mysql-test/mroonga/storage/r/select_secondary_key.result
new file mode 100644
index 00000000000..1c24089ef71
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/select_secondary_key.result
@@ -0,0 +1,55 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+select * from t1 force index(idx1) where c2 = 30;
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 force index(idx1) where c2 = 20;
+c1 c2 c3
+2 20 ka ki ku ke ko
+insert into t1 values(6,30,"aa bb cc dd ee");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+6 30 aa bb cc dd ee
+select * from t1 force index(idx1) where c2 = 30;
+c1 c2 c3
+3 30 sa si su se so
+6 30 aa bb cc dd ee
+drop table t1;
+create table t1 (c1 varchar(5) primary key, c2 varchar(5), c3 text, key idx1(c2), fulltext index ft(c3))engine=mroonga;
+insert into t1 values('ab','ijk',"aa ii uu ee oo");
+insert into t1 values('bc','ghi',"ka ki ku ke ko");
+insert into t1 values('cd','efg',"sa si su se so");
+insert into t1 values('de','cde',"ta ti tu te to");
+insert into t1 values('ef','abc',"aa ii uu ee oo");
+select * from t1 force index(idx1) where c2 < 'e' order by c1 asc;
+c1 c2 c3
+de cde ta ti tu te to
+ef abc aa ii uu ee oo
+select * from t1 force index(idx1) where c2 > 'e' order by c1 asc;
+c1 c2 c3
+ab ijk aa ii uu ee oo
+bc ghi ka ki ku ke ko
+cd efg sa si su se so
+select * from t1 force index(idx1) where c2 between 'c' and 'h' order by c1 asc;
+c1 c2 c3
+bc ghi ka ki ku ke ko
+cd efg sa si su se so
+de cde ta ti tu te to
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/show_create_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/show_create_table_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..ef87703e716
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/show_create_table_TODO_SPLIT_ME.result
@@ -0,0 +1,25 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (c1 int, c2 int);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) DEFAULT NULL,
+ `c2` int(11) DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (c1 int primary key, c2 varchar(100));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` varchar(100) DEFAULT NULL,
+ PRIMARY KEY (`c1`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result b/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result
new file mode 100644
index 00000000000..4f24d0d74b0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/sub_query_fulltext.result
@@ -0,0 +1,44 @@
+DROP TABLE IF EXISTS diaries, users;
+CREATE TABLE users (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name TEXT
+) DEFAULT CHARSET UTF8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+user_id INT UNSIGNED NOT NULL,
+title TEXT,
+FULLTEXT INDEX (title)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) unsigned NOT NULL,
+ `title` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO users (name) VALUES ("alice");
+INSERT INTO users (name) VALUES ("bob");
+INSERT INTO users (name) VALUES ("carlos");
+SELECT * FROM users;
+id name
+1 alice
+2 bob
+3 carlos
+INSERT INTO diaries (user_id, title) VALUES (1, "Hello!");
+INSERT INTO diaries (user_id, title) VALUES (2, "my name is bob");
+INSERT INTO diaries (user_id, title) VALUES (3, "my name is carlos");
+SELECT * FROM diaries;
+id user_id title
+1 1 Hello!
+2 2 my name is bob
+3 3 my name is carlos
+SELECT * FROM users
+WHERE id IN (SELECT user_id FROM diaries
+WHERE MATCH(title) AGAINST("name"))
+ORDER BY id DESC;
+id name
+3 carlos
+2 bob
+DROP TABLE diaries, users;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result b/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result
new file mode 100644
index 00000000000..f6c036bbf9f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/temporary_table.result
@@ -0,0 +1,21 @@
+DROP TEMPORARY TABLE IF EXISTS diaries;
+CREATE TEMPORARY TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TEMPORARY TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title) VALUES ("clear day");
+INSERT INTO diaries (title) VALUES ("rainy day");
+INSERT INTO diaries (title) VALUES ("cloudy day");
+SELECT * FROM diaries;
+id title
+1 clear day
+2 rainy day
+3 cloudy day
+DROP TEMPORARY TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result b/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result
new file mode 100644
index 00000000000..0e33976eb17
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/truncate.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT * FROM diaries;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+TRUNCATE TABLE diaries;
+SELECT * FROM diaries;
+id year month day title content
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+id year month day title content
+INSERT INTO diaries VALUES(1, 2011, 11, 11, "帰りé“", "ã¤ã‹ã‚ŒãŸãƒ¼");
+INSERT INTO diaries VALUES(2, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(3, 2011, 12, 2, "åˆé›ª", "今年ã¯ã˜ã‚ã¦ã®é›ªï¼");
+SELECT * FROM diaries;
+id year month day title content
+1 2011 11 11 å¸°ã‚Šé“ ã¤ã‹ã‚ŒãŸãƒ¼
+2 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+3 2011 12 2 åˆé›ª 今年ã¯ã˜ã‚ã¦ã®é›ªï¼
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("悪ã„" IN BOOLEAN MODE);
+id year month day title content
+2 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_fulltext.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_fulltext.result
new file mode 100644
index 00000000000..bf81d5e0a8d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_fulltext.result
@@ -0,0 +1,22 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index (c2));
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ka ki ku ke
+30 sa si su se
+update t1 set c2="ta ti tu te" where c1=20;
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ta ti tu te
+30 sa si su se
+select * from t1 where match(c2) against("ti");
+c1 c2
+20 ta ti tu te
+select * from t1 where match(c2) against("ki");
+c1 c2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_id_hash_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_id_hash_index.result
new file mode 100644
index 00000000000..35d8843afbe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_id_hash_index.result
@@ -0,0 +1,20 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, c1 int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id c1
+1 100
+2 100
+3 100
+4 100
+update t1 set c1 = 200 where _id = 2;
+select * from t1;
+_id c1
+1 100
+2 200
+3 100
+4 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_id_unique_hash_index.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_id_unique_hash_index.result
new file mode 100644
index 00000000000..dba9c964270
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_id_unique_hash_index.result
@@ -0,0 +1,20 @@
+drop table if exists t1, t2, t3;
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+_id c1
+1 100
+2 100
+3 100
+4 100
+update t1 set c1 = 200 where _id = 2;
+select * from t1;
+_id c1
+1 100
+2 200
+3 100
+4 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_int.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_int.result
new file mode 100644
index 00000000000..e022fa237bb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_int.result
@@ -0,0 +1,42 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int, c2 int);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) DEFAULT NULL,
+ `c2` int(11) DEFAULT NULL
+) ENGINE=Mroonga DEFAULT CHARSET=latin1
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+update t1 set c2=c2+100 where c1=1;
+select * from t1;
+c1 c2
+1 200
+2 101
+3 102
+update t1 set c2=c2+100 where c1=2;
+select * from t1;
+c1 c2
+1 200
+2 201
+3 102
+update t1 set c2=c2+100 where c1=3;
+select * from t1;
+c1 c2
+1 200
+2 201
+3 202
+flush tables;
+update t1 set c1=5, c2=50;
+select * from t1;
+c1 c2
+5 50
+5 50
+5 50
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_last_insert_grn_id.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_last_insert_grn_id.result
new file mode 100644
index 00000000000..af5926313c1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_last_insert_grn_id.result
@@ -0,0 +1,29 @@
+drop table if exists memos;
+create table memos (
+_id int,
+content varchar(255),
+unique key (_id) using hash
+);
+insert into memos values (null, "今夜ã¯ã•ã‚“ã¾ã€‚");
+insert into memos values (null, "明日ã¯groongaをアップデート。");
+insert into memos values (null, "帰りã«ãŠã ã‚“ã”。");
+insert into memos values (null, "金曜日ã¯è‚‰ã®æ—¥ã€‚");
+select * from memos;
+_id content
+1 今夜ã¯ã•ã‚“ã¾ã€‚
+2 明日ã¯groongaをアップデート。
+3 帰りã«ãŠã ã‚“ã”。
+4 金曜日ã¯è‚‰ã®æ—¥ã€‚
+insert into memos values (null, "冷蔵庫ã«ç‰›ä¹³ãŒæ®‹ã‚Š1本。");
+select last_insert_grn_id();
+last_insert_grn_id()
+5
+update memos set content = "冷蔵庫ã«ç‰›ä¹³ã¯ã¾ã ãŸãã•ã‚“ã‚る。" where _id = last_insert_grn_id();
+select * from memos;
+_id content
+1 今夜ã¯ã•ã‚“ã¾ã€‚
+2 明日ã¯groongaをアップデート。
+3 帰りã«ãŠã ã‚“ã”。
+4 金曜日ã¯è‚‰ã®æ—¥ã€‚
+5 冷蔵庫ã«ç‰›ä¹³ã¯ã¾ã ãŸãã•ã‚“ã‚る。
+drop table memos;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result b/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result
new file mode 100644
index 00000000000..11e6ee21949
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/update_virtual_column.result
@@ -0,0 +1,28 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int, _id int);
+insert into t1 values(1,null);
+insert into t1 values(2,null);
+insert into t1 values(3,null);
+select * from t1;
+c1 _id
+1 1
+2 2
+3 3
+set sql_mode="";
+update t1 set _id = 10 where c1 = 1;
+Warnings:
+Warning 1265 Data truncated for column '_id' at row 1
+select * from t1;
+c1 _id
+1 1
+2 2
+3 3
+set sql_mode="strict_all_tables";
+update t1 set _id = 11 where c1 = 1;
+ERROR 01000: Data truncated for column '_id' at row 1
+select * from t1;
+c1 _id
+1 1
+2 2
+3 3
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_database_path_prefix.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_database_path_prefix.result
new file mode 100644
index 00000000000..4536dded9d7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_database_path_prefix.result
@@ -0,0 +1,17 @@
+SET GLOBAL mroonga_database_path_prefix = "test/mroonga.data/";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_database_path_prefix';
+Variable_name Value
+mroonga_database_path_prefix test/mroonga.data/
+CREATE DATABASE clean_test;
+USE clean_test;
+CREATE TABLE counts (
+id INT PRIMARY KEY AUTO_INCREMENT
+);
+INSERT INTO counts VALUES (NULL);
+SELECT * FROM counts;
+id
+1
+DROP TABLE counts;
+DROP DATABASE clean_test;
+USE test;
+SET GLOBAL mroonga_database_path_prefix = NULL;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_new_value.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_new_value.result
new file mode 100644
index 00000000000..959383ee6d9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_new_value.result
@@ -0,0 +1,6 @@
+SET @mroonga_default_parser_backup = @@mroonga_default_parser;
+SET GLOBAL mroonga_default_parser = "TokenBigramSplitAlpha";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_default_parser';
+Variable_name Value
+mroonga_default_parser TokenBigramSplitAlpha
+SET GLOBAL mroonga_default_parser = @mroonga_default_parser_backup;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_same_value.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_same_value.result
new file mode 100644
index 00000000000..7f441b4b86d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_default_parser_same_value.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_default_parser = "TokenBigram";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_default_parser';
+Variable_name Value
+mroonga_default_parser TokenBigram
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result
new file mode 100644
index 00000000000..6e690f45e61
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_delete.result
@@ -0,0 +1,28 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+id body
+1 will start groonga!
+set mroonga_dry_write=true;
+delete from diaries where id = 1;
+select * from diaries;
+id body
+1 will start groonga!
+set mroonga_dry_write=false;
+delete from diaries where id = 1;
+select * from diaries;
+id body
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result
new file mode 100644
index 00000000000..8de55efaccc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_insert.result
@@ -0,0 +1,30 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+id body
+1 will start groonga!
+set mroonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+id body
+1 will start groonga!
+set mroonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 started groonga.
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result
new file mode 100644
index 00000000000..dd3ee5b333c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_dry_write_update.result
@@ -0,0 +1,26 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+set mroonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+id body
+1 will start groonga!
+set mroonga_dry_write=false;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+id body
+1 starting groonga...
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_disable.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_disable.result
new file mode 100644
index 00000000000..789316d83ca
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_disable.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_lock_timeout = -1;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+Variable_name Value
+mroonga_lock_timeout -1
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_invalid.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_invalid.result
new file mode 100644
index 00000000000..029b1ab17f7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_invalid.result
@@ -0,0 +1,6 @@
+SET GLOBAL mroonga_lock_timeout = -2;
+Warnings:
+Warning 1292 Truncated incorrect mroonga_lock_timeout value: '-2'
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+Variable_name Value
+mroonga_lock_timeout -1
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_no_retry.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_no_retry.result
new file mode 100644
index 00000000000..f47a2e6625b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_no_retry.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_lock_timeout = 0;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+Variable_name Value
+mroonga_lock_timeout 0
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_valid.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_valid.result
new file mode 100644
index 00000000000..6ec1004f752
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_lock_timeout_valid.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_lock_timeout = 1000;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+Variable_name Value
+mroonga_lock_timeout 1000
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_new_value.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_new_value.result
new file mode 100644
index 00000000000..db4694797b2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_new_value.result
@@ -0,0 +1,6 @@
+SET @mroonga_log_file_backup = @@mroonga_log_file;
+SET GLOBAL mroonga_log_file = "new-mroonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+Variable_name Value
+mroonga_log_file new-mroonga.log
+SET GLOBAL mroonga_log_file = @mroonga_log_file_backup;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_nonexistent_path.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_nonexistent_path.result
new file mode 100644
index 00000000000..1dbec1f850e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_nonexistent_path.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_log_file = "nonexistent/mroonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+Variable_name Value
+mroonga_log_file groonga.log
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_same_value.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_same_value.result
new file mode 100644
index 00000000000..5824f09053e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_file_same_value.result
@@ -0,0 +1,4 @@
+SET GLOBAL mroonga_log_file = "groonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+Variable_name Value
+mroonga_log_file groonga.log
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_level_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_level_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..cb646eceaf3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_log_level_TODO_SPLIT_ME.result
@@ -0,0 +1,49 @@
+set @mroonga_log_level_backup=@@mroonga_log_level;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level NOTICE
+set global mroonga_log_level=NONE;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level NONE
+set global mroonga_log_level=EMERG;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level EMERG
+set global mroonga_log_level=ALERT;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level ALERT
+set global mroonga_log_level=CRIT;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level CRIT
+set global mroonga_log_level=ERROR;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level ERROR
+set global mroonga_log_level=WARNING;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level WARNING
+set global mroonga_log_level=NOTICE;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level NOTICE
+set global mroonga_log_level=INFO;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level INFO
+set global mroonga_log_level=DEBUG;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level DEBUG
+set global mroonga_log_level=DUMP;
+show global variables like 'mroonga_log_level';
+Variable_name Value
+mroonga_log_level DUMP
+set global mroonga_log_level=dummy;
+ERROR 42000: Variable 'mroonga_log_level' can't be set to the value of 'dummy'
+set session mroonga_log_level=NOTICE;
+ERROR HY000: Variable 'mroonga_log_level' is a GLOBAL variable and should be set with SET GLOBAL
+set global mroonga_log_level=@mroonga_log_level_backup;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result
new file mode 100644
index 00000000000..04b22c22ea6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_global.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+SET GLOBAL mroonga_match_escalation_threshold = -1;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+tags TEXT,
+FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `tags` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+2 Hello mroonga! mroonga install
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET GLOBAL mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result
new file mode 100644
index 00000000000..25a1aba61e2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_match_escalation_threshold_session.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+tags TEXT,
+FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `tags` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+2 Hello mroonga! mroonga install
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+SET mroonga_match_escalation_threshold = -1;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_vector_column_delimiter.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_vector_column_delimiter.result
new file mode 100644
index 00000000000..f3c8f1e8628
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_vector_column_delimiter.result
@@ -0,0 +1,29 @@
+DROP TABLE IF EXISTS document;
+DROP TABLE IF EXISTS category;
+CREATE TABLE category (
+category CHAR(10) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COMMENT='default_tokenizer "TokenDelimit"';
+CREATE TABLE document (
+id INT NOT NULL,
+title TEXT,
+categories TEXT COMMENT 'flags "COLUMN_VECTOR", type "category"',
+PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+SHOW GLOBAL VARIABLES LIKE 'mroonga_vector_column_delimiter';
+Variable_name Value
+mroonga_vector_column_delimiter
+INSERT INTO document VALUES(1, "Mroonga is the fastest search engine", "it database fulltext");
+SELECT id, title, categories FROM document;
+id title categories
+1 Mroonga is the fastest search engine IT DATABASE FULLTEXT
+SET GLOBAL mroonga_vector_column_delimiter = ';';
+SHOW GLOBAL VARIABLES LIKE 'mroonga_vector_column_delimiter';
+Variable_name Value
+mroonga_vector_column_delimiter ;
+SELECT id, title, categories FROM document;
+id title categories
+1 Mroonga is the fastest search engine IT;DATABASE;FULLTEXT
+DROP TABLE document;
+DROP TABLE category;
+SET GLOBAL mroonga_vector_column_delimiter = ' ';
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result b/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result
new file mode 100644
index 00000000000..aae83fe2b38
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result
@@ -0,0 +1,3 @@
+show variables like 'mroonga_version';
+Variable_name Value
+mroonga_version 4.06
diff --git a/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result.in b/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result.in
new file mode 100644
index 00000000000..26ff300a759
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/r/variable_version.result.in
@@ -0,0 +1,3 @@
+show variables like 'mroonga_version';
+Variable_name Value
+mroonga_version @MRN_VERSION@
diff --git a/storage/mroonga/mysql-test/mroonga/storage/suite.opt b/storage/mroonga/mysql-test/mroonga/storage/suite.opt
new file mode 100644
index 00000000000..d5a1e5190a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/suite.opt
@@ -0,0 +1 @@
+--loose-plugin-load-add=$HA_MROONGA_SO --loose-plugin-mroonga=ON
diff --git a/storage/mroonga/mysql-test/mroonga/storage/suite.pm b/storage/mroonga/mysql-test/mroonga/storage/suite.pm
new file mode 100644
index 00000000000..528ccc5d693
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/suite.pm
@@ -0,0 +1,23 @@
+package My::Suite::Mroonga;
+
+@ISA = qw(My::Suite);
+
+return "No Mroonga engine" unless $ENV{HA_MROONGA_SO} or
+ $::mysqld_variables{'mroonga'} eq "ON";
+
+sub is_default { 1 }
+
+my $groonga_normalizer_mysql_dir=$::basedir . '/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql';
+my $groonga_normalizer_mysql_install_dir=$::basedir . '/lib/groonga/plugins';
+
+if (-d $groonga_normalizer_mysql_dir)
+{
+ $ENV{GRN_PLUGINS_DIR}=$groonga_normalizer_mysql_dir;
+}
+elsif (-d $groonga_normalizer_mysql_install_dir)
+{
+ $ENV{GRN_PLUGINS_DIR}=$groonga_normalizer_mysql_install_dir;
+}
+
+bless { };
+
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test
new file mode 100644
index 00000000000..e70dcb92e12
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_after.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries ADD title TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test
new file mode 100644
index 00000000000..dac06ff6719
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_first.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries ADD title TEXT FIRST;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test
new file mode 100644
index 00000000000..ebf8ac5d581
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_multiple.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries
+ ADD COLUMN body TEXT FIRST,
+ ADD COLUMN published BOOLEAN AFTER id,
+ ADD COLUMN created_at DATETIME;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title, body, published, created_at)
+ VALUES ("groonga (1)", "starting groonga...", TRUE, "2014-2-9 02:09:00");
+INSERT INTO diaries (title, body, published, created_at)
+ VALUES ("groonga (2)", "started groonga.", FALSE, "2014-2-9 12:19:00");
+SELECT * FROM diaries;
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test
new file mode 100644
index 00000000000..01f13799c02
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_plain.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_flags.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_flags.test
new file mode 100644
index 00000000000..c93ae13a19e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_flags.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+CREATE TABLE tags (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE tags ADD COLUMN name VARCHAR(64) COMMENT 'flags "COLUMN_VECTOR"';
+
+SELECT mroonga_command("dump");
+
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_type.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_type.test
new file mode 100644
index 00000000000..2f39d52777a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_column_with_type.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+CREATE TABLE tags (
+ id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'type "tags"';
+
+SELECT mroonga_command("dump");
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test
new file mode 100644
index 00000000000..aee355fdfc1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_token_filters_one_token_filter.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+SET NAMES utf8;
+
+CREATE TABLE memos (
+ content VARCHAR(64) NOT NULL
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+ALTER TABLE memos ADD FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"';
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test
new file mode 100644
index 00000000000..1dd6b31fb64
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_index_unique_duplicated.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO ids (id) values (1), (1);
+
+--error ER_DUP_UNIQUE
+ALTER TABLE ids ADD UNIQUE INDEX (id);
+SHOW CREATE TABLE ids;
+
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test
new file mode 100644
index 00000000000..ba06e55e1ba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_add_key_multiple_column_with_data.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS scores;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE scores (
+ id BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ name CHAR(30) NOT NULL,
+ score INT NOT NULL
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores
+ WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+
+ALTER TABLE scores ADD KEY property (name, score);
+SELECT * FROM scores
+ WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test
new file mode 100644
index 00000000000..7b9fc783244
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_comment_not_for_mroonga.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE bugs
+ CHANGE COLUMN
+ tag
+ tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test
new file mode 100644
index 00000000000..3a86d23facf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_have_index.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ title VARCHAR(32),
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE bugs CHANGE COLUMN title title VARCHAR(64);
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test
new file mode 100644
index 00000000000..16e98a9769e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_after.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries CHANGE body description TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test
new file mode 100644
index 00000000000..86c94afd281
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_first.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries CHANGE body description TEXT FIRST;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test
new file mode 100644
index 00000000000..a9bbe403da1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_multiple.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries
+ CHANGE body description TEXT FIRST,
+ CHANGE title subject TEXT AFTER internal_id,
+ CHANGE id internal_id INT;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (subject, description)
+ VALUES ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test
new file mode 100644
index 00000000000..12ba5606b25
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_column_rename_no_order.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+ALTER TABLE diaries CHANGE body description TEXT;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, description) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test
new file mode 100644
index 00000000000..867c6722d36
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_engine.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) ENGINE MyISAM DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+ALTER TABLE diaries ENGINE = mroonga;
+SHOW CREATE TABLE diaries;
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test
new file mode 100644
index 00000000000..fd47d2a60f0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_change_token_filter.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+CREATE TABLE terms (
+ term VARCHAR(64) NOT NULL PRIMARY KEY,
+ is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram"' DEFAULT CHARSET=utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+ALTER TABLE terms COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"';
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+DROP TABLE terms;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test
new file mode 100644
index 00000000000..06cdb13ba16
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_create_fulltext.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ WHERE MATCH (title) AGAINST ("富士山");
+
+CREATE FULLTEXT INDEX title_index on diaries (title);
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries DISABLE KEYS;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test
new file mode 100644
index 00000000000..d6e32e0f004
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_ujis.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES ujis;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=ujis;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "Å·µ¤");
+INSERT INTO diaries VALUES (3, "Éٻλ³");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("Éٻλ³");
+
+ALTER TABLE diaries DISABLE KEYS;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("Éٻλ³");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test
new file mode 100644
index 00000000000..fb89d678b75
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_fulltext_utf8.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries DISABLE KEYS;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test
new file mode 100644
index 00000000000..2112828684a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_multiple_column.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY title_and_created_at_index (title, created_at)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test
new file mode 100644
index 00000000000..f599767ab8f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_normal.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY created_at_index (created_at)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test
new file mode 100644
index 00000000000..4bc5fb1f643
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_primary.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test
new file mode 100644
index 00000000000..ab990a549b1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_truncate.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE users (
+ first_name VARCHAR(32) NOT NULL,
+ last_name VARCHAR(32) NOT NULL,
+ KEY (first_name, last_name)
+);
+
+INSERT INTO users VALUES("Taro", "Yamada");
+INSERT INTO users VALUES("Hanako", "Tanaka");
+INSERT INTO users VALUES("Joe", "Honda");
+
+SELECT * FROM users;
+
+ALTER TABLE users DISABLE KEYS;
+TRUNCATE users;
+
+SELECT * FROM users;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test
new file mode 100644
index 00000000000..b172ff303c1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_disable_keys_updating.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ c1 int NOT NULL,
+ c2 text NOT NULL,
+ c3 int NOT NULL,
+ c4 int NOT NULL,
+ PRIMARY KEY(c1),
+ KEY idx1(c3,c4),
+ FULLTEXT KEY ft1(c2)
+);
+INSERT INTO t1 VALUES(1, 'test1', 1, 1);
+INSERT INTO t1 VALUES(2, 'test2', 2, 2);
+INSERT INTO t1 VALUES(3, 'test3', 1, 3);
+ALTER TABLE t1 DISABLE KEYS;
+DELETE FROM t1 WHERE c1 = 2;
+UPDATE t1 SET c4 = 4 WHERE c1 = 1;
+INSERT INTO t1 VALUES(4, 'test4', 2, 4);
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test
new file mode 100644
index 00000000000..549a5540450
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_multiple.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries
+ DROP COLUMN title,
+ DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+SELECT * FROM diaries;
+
+INSERT INTO diaries () VALUES ();
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test
new file mode 100644
index 00000000000..1e7248125cf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_column_one.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title) values ("groonga (1)");
+INSERT INTO diaries (title) values ("groonga (2)");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test
new file mode 100644
index 00000000000..992606b4f62
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_drop_key_multiple_column_with_data.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS scores;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE scores (
+ id BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ name CHAR(30) NOT NULL,
+ score INT NOT NULL,
+ KEY property (name, score)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+SELECT * FROM scores
+ WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+
+ALTER TABLE scores DROP KEY property;
+SELECT * FROM scores
+ WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test
new file mode 100644
index 00000000000..136acfcebf2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test
new file mode 100644
index 00000000000..e14400808e5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_ujis.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES ujis;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=ujis;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "Å·µ¤");
+INSERT INTO diaries VALUES (3, "Éٻλ³");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("Éٻλ³");
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("Éٻλ³");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test
new file mode 100644
index 00000000000..136acfcebf2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_fulltext_utf8.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test
new file mode 100644
index 00000000000..35e6366ed62
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_multiple_column.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY title_and_created_at_index (title, created_at)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test
new file mode 100644
index 00000000000..ec45b48f61e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_normal.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY created_at_index (created_at)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test
new file mode 100644
index 00000000000..b1ebb668391
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_enable_keys_primary.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test
new file mode 100644
index 00000000000..fc07085df5b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_engine_decimal.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ temperature DECIMAL(6, 3)
+) ENGINE InnoDB DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+SELECT * FROM diaries;
+
+ALTER TABLE diaries ENGINE = mroonga;
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+SELECT * FROM diaries;
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test
new file mode 100644
index 00000000000..fb52105411d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_no_primary_key.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+CREATE TABLE memos (
+ content varchar(32)
+) DEFAULT CHARSET="utf8";
+
+INSERT INTO memos (content) values ("Starting Groonga...");
+INSERT INTO memos (content) values ("Started Groonga.");
+INSERT INTO memos (content) values ("Starting Mroonga...");
+
+ALTER TABLE memos ADD FULLTEXT INDEX content_index (content);
+SHOW CREATE TABLE memos;
+
+SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test
new file mode 100644
index 00000000000..3bcd1259236
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_normal.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT
+) DEFAULT CHARSET="utf8";
+
+INSERT INTO memos (content) values ("Starting Groonga...");
+INSERT INTO memos (content) values ("Started Groonga.");
+INSERT INTO memos (content) values ("Starting Mroonga...");
+
+ALTER TABLE memos ADD FULLTEXT INDEX content_index (content);
+SHOW CREATE TABLE memos;
+
+SELECT * FROM memos WHERE MATCH(content) AGAINST("groonga");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test
new file mode 100644
index 00000000000..efd0d9928d2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_add_table.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2014 HAYASHI Kentaro <hayashi@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags;
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags VARCHAR(40) COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO tags (name) VALUES ("Groonga");
+INSERT INTO bugs (id, tags) VALUES (1, "Groonga Mroonga");
+
+SELECT * FROM bugs;
+
+ALTER TABLE bugs ADD FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"';
+
+SELECT * FROM bugs
+ WHERE MATCH(tags) AGAINST("Groonga");
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test
new file mode 100644
index 00000000000..ebc30945062
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_fulltext_drop_table.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags;
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags VARCHAR(40) COMMENT 'type "tags"',
+ FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO tags (name) VALUES ("Groonga");
+INSERT INTO bugs (id, tags) VALUES (1, "Groonga Mroonga");
+
+ALTER TABLE bugs DROP INDEX bugs_tags_index;
+ALTER TABLE bugs
+ ADD FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"';
+
+SELECT * FROM bugs
+ WHERE MATCH(tags) AGAINST("Groonga");
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test
new file mode 100644
index 00000000000..710161397d5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_after.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries MODIFY body TEXT AFTER id;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test
new file mode 100644
index 00000000000..a810b7457a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_first.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries MODIFY body TEXT FIRST;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test
new file mode 100644
index 00000000000..7dc75e180c1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_modify_column_no_order.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga.");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries MODIFY title VARCHAR(100);
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test
new file mode 100644
index 00000000000..0c391219426
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_recreate_anonymous_index_at_once.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("survey", "will start mroonga!");
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE);
+
+ALTER TABLE diaries
+ DROP INDEX body,
+ ADD FULLTEXT INDEX (body);
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH (body) AGAINST ("+groonga" IN BOOLEAN MODE);
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test
new file mode 100644
index 00000000000..20fa7f35463
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_rename_table.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries, memos;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("groonga") AND
+ MATCH(body) AGAINST("starting");
+
+ALTER TABLE diaries RENAME memos;
+SELECT * FROM memos;
+SELECT * FROM memos
+ WHERE MATCH(title) AGAINST("groonga") AND
+ MATCH(body) AGAINST("starting");
+
+SHOW CREATE TABLE memos;
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test
new file mode 100644
index 00000000000..8a41792bdae
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/alter_table_spatial.test
@@ -0,0 +1,150 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS shops;
+--enable_warnings
+
+CREATE TABLE shops (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name TEXT,
+ location GEOMETRY NOT NULL
+);
+
+INSERT INTO shops (name, location)
+ VALUES ('nezu-no-taiyaki',
+ GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+ VALUES ('taiyaki-kataoka',
+ GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+ VALUES ('soba-taiyaki-ku',
+ GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuruma',
+ GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+ VALUES ('hirose-ya',
+ GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+ VALUES ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+ VALUES ('omede-taiyaki',
+ GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+ VALUES ('onaga-ya',
+ GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+ VALUES ('shiro-ya',
+ GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+ VALUES ('fuji-ya',
+ GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+ VALUES ('miyoshi',
+ GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+ VALUES ('juju-ya',
+ GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+ VALUES ('tatsumi-ya',
+ GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+ VALUES ('tetsuji',
+ GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+ VALUES ('gazuma-ya',
+ GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+ VALUES ('honma-mon',
+ GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+ VALUES ('naniwa-ya',
+ GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuro-dai',
+ GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+ VALUES ('daruma',
+ GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+ VALUES ('yanagi-ya',
+ GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+ VALUES ('sharaku',
+ GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+ VALUES ('takane',
+ GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+ VALUES ('chiyoda',
+ GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+ VALUES ('da-ka-po',
+ GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+ VALUES ('matsushima-ya',
+ GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+ VALUES ('kazuya',
+ GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+ VALUES ('furuya-kogane-an',
+ GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+ VALUES ('hachi-no-ie',
+ GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+ VALUES ('azuki-chan',
+ GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuriko-an',
+ GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+ VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+ GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+ VALUES ('naze-ya',
+ GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+ VALUES ('sanoki-ya',
+ GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+ VALUES ('shigeta',
+ GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+ VALUES ('nishimi-ya',
+ GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+ VALUES ('hiiragi',
+ GeomFromText('POINT(139.711517 35.647701)'));
+
+ALTER TABLE shops ADD SPATIAL KEY location_index (location);
+
+SELECT id, name, AsText(location) AS location_text FROM shops
+ WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location)
+ ORDER BY id;
+
+SHOW CREATE TABLE shops;
+
+DROP TABLE shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..8ce709b1187
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_TODO_SPLIT_ME.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (c1 int auto_increment, primary key(c1));
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+insert into t1 values(10);
+select c1 from t1 order by c1 desc limit 1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+insert into t1 values(6);
+select c1 from t1 order by c1 desc limit 1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc limit 1;
+drop table t1;
+
+create table t1 (c1 int, c2 int auto_increment, primary key(c1), key idx1(c2));
+insert into t1 values(1, null);
+select * from t1 order by c2 desc limit 1;
+insert into t1 values(2, null);
+select * from t1 order by c2 desc limit 1;
+insert into t1 values(3, 10);
+select * from t1 order by c2 desc limit 1;
+insert into t1 values(4, null);
+select * from t1 order by c2 desc limit 1;
+insert into t1 values(5, 6);
+select * from t1 order by c2 desc limit 1;
+insert into t1 values(6, null);
+select * from t1 order by c2 desc limit 1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test
new file mode 100644
index 00000000000..59727f4abaa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_table_param.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (c1 int auto_increment, primary key(c1)) auto_increment=34129;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+show create table t1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+insert into t1 values(10);
+select c1 from t1 order by c1 desc;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+insert into t1 values(6);
+select c1 from t1 order by c1 desc;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+truncate table t1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+delete from t1;
+insert into t1 values(null);
+select c1 from t1 order by c1 desc;
+rename table t1 to t2;
+insert into t2 values(null);
+select c1 from t2 order by c1 desc;
+show create table t2;
+drop table t2;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test
new file mode 100644
index 00000000000..83f9f745019
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/auto_increment_text.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text
+);
+insert into diaries (body) values ("started groonga (long text)");
+select * from diaries;
+insert into diaries (body) values ("sleeping... (short text)");
+select * from diaries;
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..57d57347205
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/binlog_TODO_SPLIT_ME.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_log_bin.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+show variables like 'log_bin';
+
+set binlog_format="STATEMENT";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+set binlog_format="ROW";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+set binlog_format="MIXED";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga;
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test
new file mode 100644
index 00000000000..8b4c7d6eaf7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_general_ci_french.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ content varchar(256) COLLATE utf8_general_ci,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES ("Je suis un garçon.");
+
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("garcon");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test
new file mode 100644
index 00000000000..6cebc9ebce9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_french.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ content varchar(256) COLLATE utf8_unicode_ci,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES ("Je suis un garçon.");
+
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("garcon");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test
new file mode 100644
index 00000000000..dacb1cba74f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/collation_utf8_unicode_ci_japanese.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ content varchar(256) COLLATE utf8_unicode_ci,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES ("ã²ã‚‰ãŒãªã¨ã‚«ã‚¿ã‚«ãƒŠã‚’覚ãˆã¾ã—ãŸã€‚");
+
+SELECT * FROM diaries WHERE MATCH (content) AGAINST ("ã‹ãŸã‹ãª");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test
new file mode 100644
index 00000000000..620d2a9fd56
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_index_not_for_mroonga.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED,
+ INDEX (id) COMMENT 'ID search is required.'
+) DEFAULT CHARSET=utf8;
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test
new file mode 100644
index 00000000000..695ac9cba61
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_comment_normal_not_for_mroonga.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.'
+) DEFAULT CHARSET=utf8;
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test
new file mode 100644
index 00000000000..fc2e58fdcd9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATE,
+ KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29");
+INSERT INTO diaries (title, created_at) VALUES ("rainy day", "2012-01-30");
+INSERT INTO diaries (title, created_at) VALUES ("cloudy day", "2012-01-31");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE created_at BETWEEN "2012-01-29" AND "2012-01-30";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test
new file mode 100644
index 00000000000..8dae21494db
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_without_index.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATE
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at) VALUES ("clear day", "2012-01-29");
+INSERT INTO diaries (title, created_at) VALUES ("rainy day", "2012-01-30");
+INSERT INTO diaries (title, created_at) VALUES ("cloudy day", "2012-01-31");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE created_at BETWEEN "2012-01-29" AND "2012-01-30";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test
new file mode 100644
index 00000000000..b6225075959
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_date_zero_date.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS timestamps;
+--enable_warnings
+
+CREATE TABLE timestamps (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ create_dt DATE
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE timestamps;
+
+INSERT INTO timestamps (create_dt) VALUES ("2012-00-01");
+INSERT INTO timestamps (create_dt) VALUES ("2012-01-00");
+
+SELECT * FROM timestamps;
+
+SELECT * FROM timestamps WHERE create_dt = "2012-01-01";
+
+DROP TABLE timestamps;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test
new file mode 100644
index 00000000000..9c3344cbe98
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_2038.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('2038-01-18 03:14:07', '2038-01-18 03:14:07');
+INSERT INTO diaries (title, created_at)
+ VALUES ('2038-01-20 03:14:08', '2038-01-20 03:14:08');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test
new file mode 100644
index 00000000000..61eecbb2ac8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_before_unix_epoch.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test
new file mode 100644
index 00000000000..7bbfcbe7a3a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_max.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test
new file mode 100644
index 00000000000..2cc99562231
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_32bit_out_of_range.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('2012', '2012');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test
new file mode 100644
index 00000000000..75c757f147a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_2038.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('2038-01-19 03:14:07', '2038-01-19 03:14:07');
+INSERT INTO diaries (title, created_at)
+ VALUES ('2038-01-19 03:14:08', '2038-01-19 03:14:08');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test
new file mode 100644
index 00000000000..b2b30462ca9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_before_unix_epoch.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test
new file mode 100644
index 00000000000..661d145087c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_max.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('9999-12-31 23:59:59', '9999-12-31 23:59:59');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test
new file mode 100644
index 00000000000..14a4483a96e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_55_out_of_range.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_version_55.inc
+--source ../../include/mroonga/have_mysql.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('2012', '2012');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test
new file mode 100644
index 00000000000..6b90c39a853
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_64bit_version_56_or_later_out_of_range.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_version_56_or_later.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('2012', '2012');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test
new file mode 100644
index 00000000000..ac10203a576
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_with_index.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fractional_seconds.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME(6),
+ KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ("clear day", "2012-01-29 21:51:01.111111");
+INSERT INTO diaries (title, created_at)
+ VALUES ("rainy day", "2012-01-30 01:23:45.333");
+INSERT INTO diaries (title, created_at)
+ VALUES ("cloudy day", "2012-01-31 08:32:10.5555");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE created_at BETWEEN "2012-01-29 00:00:00.123456" AND
+ "2012-01-31 00:00:00.999999";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test
new file mode 100644
index 00000000000..11a2b783038
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_fractional_seconds_without_index.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fractional_seconds.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME(6)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ("clear day", "2012-01-29 21:51:01.111111");
+INSERT INTO diaries (title, created_at)
+ VALUES ("rainy day", "2012-01-30 01:23:45.333");
+INSERT INTO diaries (title, created_at)
+ VALUES ("cloudy day", "2012-01-31 08:32:10.5555");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE created_at BETWEEN "2012-01-29 00:00:00.123456" AND
+ "2012-01-31 00:00:00.999999";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test
new file mode 100644
index 00000000000..07b54bebc9d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_freebsd_before_unix_epoch.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_freebsd.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('1000-01-01 00:00:00', '1000-01-01 00:00:00');
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test
new file mode 100644
index 00000000000..e1db5043319
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_null.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ('NULL', NULL);
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test
new file mode 100644
index 00000000000..992249b0fae
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_with_index.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME,
+ KEY (created_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ("clear day", "2012-01-29 21:51:01");
+INSERT INTO diaries (title, created_at)
+ VALUES ("rainy day", "2012-01-30 01:23:45");
+INSERT INTO diaries (title, created_at)
+ VALUES ("cloudy day", "2012-01-31 08:32:10");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE created_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test
new file mode 100644
index 00000000000..bc0b7b2e982
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_without_index.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at)
+ VALUES ("clear day", "2012-01-29 21:51:01");
+INSERT INTO diaries (title, created_at)
+ VALUES ("rainy day", "2012-01-30 01:23:45");
+INSERT INTO diaries (title, created_at)
+ VALUES ("cloudy day", "2012-01-31 08:32:10");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE created_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test
new file mode 100644
index 00000000000..5c39086d452
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_datetime_zero_date.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS timestamps;
+--enable_warnings
+
+CREATE TABLE timestamps (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ create_dt DATETIME
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE timestamps;
+
+INSERT INTO timestamps (create_dt) VALUES ("2012-00-01 00:00:00");
+INSERT INTO timestamps (create_dt) VALUES ("2012-01-00 00:00:00");
+
+SELECT * FROM timestamps;
+
+SELECT * FROM timestamps WHERE create_dt = "2012-01-01 00:00:00";
+
+DROP TABLE timestamps;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test
new file mode 100644
index 00000000000..92636b4d773
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ temperature DECIMAL(6, 3),
+ KEY (temperature)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE temperature BETWEEN "14.213" AND "17.821";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test
new file mode 100644
index 00000000000..b314342fdea
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_fractional_seconds_without_index.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ temperature DECIMAL(6, 3)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21.281);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14.213);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17.821);
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE temperature BETWEEN "14.213" AND "17.821";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test
new file mode 100644
index 00000000000..ffcf737fde9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ temperature DECIMAL,
+ KEY (temperature)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17);
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE temperature BETWEEN "14" AND "17";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test
new file mode 100644
index 00000000000..d7df5c3c323
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_decimal_without_index.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ temperature DECIMAL
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, temperature) VALUES ("clear day", 21);
+INSERT INTO diaries (title, temperature) VALUES ("rainy day", 14);
+INSERT INTO diaries (title, temperature) VALUES ("cloudy day", 17);
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE temperature BETWEEN "14" AND "17";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test
new file mode 100644
index 00000000000..0d96498ee04
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_less_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ size ENUM("small", "medium", "large"),
+ INDEX (size)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart for child", "small");
+INSERT INTO items VALUES ("leadies' coat", "medium");
+INSERT INTO items VALUES ("parka", "large");
+INSERT INTO items VALUES ("hat", "medium");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE size = "medium";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test
new file mode 100644
index 00000000000..3f8b728105c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_enum_many_with_index.test
@@ -0,0 +1,298 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ size ENUM("size1",
+ "size2",
+ "size3",
+ "size4",
+ "size5",
+ "size6",
+ "size7",
+ "size8",
+ "size9",
+ "size10",
+ "size11",
+ "size12",
+ "size13",
+ "size14",
+ "size15",
+ "size16",
+ "size17",
+ "size18",
+ "size19",
+ "size20",
+ "size21",
+ "size22",
+ "size23",
+ "size24",
+ "size25",
+ "size26",
+ "size27",
+ "size28",
+ "size29",
+ "size30",
+ "size31",
+ "size32",
+ "size33",
+ "size34",
+ "size35",
+ "size36",
+ "size37",
+ "size38",
+ "size39",
+ "size40",
+ "size41",
+ "size42",
+ "size43",
+ "size44",
+ "size45",
+ "size46",
+ "size47",
+ "size48",
+ "size49",
+ "size50",
+ "size51",
+ "size52",
+ "size53",
+ "size54",
+ "size55",
+ "size56",
+ "size57",
+ "size58",
+ "size59",
+ "size60",
+ "size61",
+ "size62",
+ "size63",
+ "size64",
+ "size65",
+ "size66",
+ "size67",
+ "size68",
+ "size69",
+ "size70",
+ "size71",
+ "size72",
+ "size73",
+ "size74",
+ "size75",
+ "size76",
+ "size77",
+ "size78",
+ "size79",
+ "size80",
+ "size81",
+ "size82",
+ "size83",
+ "size84",
+ "size85",
+ "size86",
+ "size87",
+ "size88",
+ "size89",
+ "size90",
+ "size91",
+ "size92",
+ "size93",
+ "size94",
+ "size95",
+ "size96",
+ "size97",
+ "size98",
+ "size99",
+ "size100",
+ "size101",
+ "size102",
+ "size103",
+ "size104",
+ "size105",
+ "size106",
+ "size107",
+ "size108",
+ "size109",
+ "size110",
+ "size111",
+ "size112",
+ "size113",
+ "size114",
+ "size115",
+ "size116",
+ "size117",
+ "size118",
+ "size119",
+ "size120",
+ "size121",
+ "size122",
+ "size123",
+ "size124",
+ "size125",
+ "size126",
+ "size127",
+ "size128",
+ "size129",
+ "size130",
+ "size131",
+ "size132",
+ "size133",
+ "size134",
+ "size135",
+ "size136",
+ "size137",
+ "size138",
+ "size139",
+ "size140",
+ "size141",
+ "size142",
+ "size143",
+ "size144",
+ "size145",
+ "size146",
+ "size147",
+ "size148",
+ "size149",
+ "size150",
+ "size151",
+ "size152",
+ "size153",
+ "size154",
+ "size155",
+ "size156",
+ "size157",
+ "size158",
+ "size159",
+ "size160",
+ "size161",
+ "size162",
+ "size163",
+ "size164",
+ "size165",
+ "size166",
+ "size167",
+ "size168",
+ "size169",
+ "size170",
+ "size171",
+ "size172",
+ "size173",
+ "size174",
+ "size175",
+ "size176",
+ "size177",
+ "size178",
+ "size179",
+ "size180",
+ "size181",
+ "size182",
+ "size183",
+ "size184",
+ "size185",
+ "size186",
+ "size187",
+ "size188",
+ "size189",
+ "size190",
+ "size191",
+ "size192",
+ "size193",
+ "size194",
+ "size195",
+ "size196",
+ "size197",
+ "size198",
+ "size199",
+ "size200",
+ "size201",
+ "size202",
+ "size203",
+ "size204",
+ "size205",
+ "size206",
+ "size207",
+ "size208",
+ "size209",
+ "size210",
+ "size211",
+ "size212",
+ "size213",
+ "size214",
+ "size215",
+ "size216",
+ "size217",
+ "size218",
+ "size219",
+ "size220",
+ "size221",
+ "size222",
+ "size223",
+ "size224",
+ "size225",
+ "size226",
+ "size227",
+ "size228",
+ "size229",
+ "size230",
+ "size231",
+ "size232",
+ "size233",
+ "size234",
+ "size235",
+ "size236",
+ "size237",
+ "size238",
+ "size239",
+ "size240",
+ "size241",
+ "size242",
+ "size243",
+ "size244",
+ "size245",
+ "size246",
+ "size247",
+ "size248",
+ "size249",
+ "size250",
+ "size251",
+ "size252",
+ "size253",
+ "size254",
+ "size255",
+ "size256"),
+ INDEX (size)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart for child", "size1");
+INSERT INTO items VALUES ("leadies' coat", "size1");
+INSERT INTO items VALUES ("parka", "size256");
+INSERT INTO items VALUES ("hat", "size256");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE size = "size1";
+
+SELECT * FROM items WHERE size = "size256";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test
new file mode 100644
index 00000000000..6efb3920695
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id__id.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS contents;
+--enable_warnings
+
+CREATE TABLE contents (
+ _id INT,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8;
+INSERT INTO contents (content) VALUES ('first');
+INSERT INTO contents (content) VALUES ('second');
+SELECT _id, content FROM contents;
+
+DROP TABLE contents;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test
new file mode 100644
index 00000000000..9b2e59615f3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga__id_invalid_id.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS contents;
+--enable_warnings
+
+--error ER_CANT_CREATE_TABLE
+CREATE TABLE contents (
+ _i INT,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8;
+
+--disable_warnings
+DROP TABLE IF EXISTS contents;
+--enable_warnings
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test
new file mode 100644
index 00000000000..805c744236f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_fulltext_other_table.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP DATABASE IF EXISTS mroonga;
+--enable_warnings
+
+CREATE DATABASE mroonga;
+USE mroonga;
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"',
+ FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga");
+
+SELECT mroonga_command("dump");
+
+SELECT *, MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE) AS score
+ FROM bugs
+ WHERE MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE);
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+DROP DATABASE mroonga;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test
new file mode 100644
index 00000000000..91f204133dd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_index_int_other_table.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP DATABASE IF EXISTS mroonga;
+--enable_warnings
+
+CREATE DATABASE mroonga;
+USE mroonga;
+
+CREATE TABLE priorities (
+ id INT PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin;
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ priority INT COMMENT 'type "priorities"',
+ INDEX bugs_priority_index (priority) COMMENT 'table "priorities"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, priority) VALUES (1, 10);
+INSERT INTO bugs (id, priority) VALUES (2, 3);
+INSERT INTO bugs (id, priority) VALUES (3, -2);
+
+SELECT mroonga_command("dump");
+
+SELECT *
+ FROM bugs
+ WHERE priority = 3;
+
+DROP TABLE bugs;
+DROP TABLE priorities;
+
+DROP DATABASE mroonga;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test
new file mode 100644
index 00000000000..6e89c70c051
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_reference.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags, bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin;
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag TEXT COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, tag) VALUES (1, "Linux");
+INSERT INTO bugs (id, tag) VALUES (2, "MySQL");
+INSERT INTO bugs (id, tag) VALUES (3, "groonga");
+
+SELECT * FROM bugs;
+SELECT * FROM tags;
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test
new file mode 100644
index 00000000000..059b8bc4bfa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_scalar_with_not_for_mroonga_comment.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags, bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin;
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag TEXT COMMENT 'It references to tags.name, type "tags"'
+) DEFAULT CHARSET=utf8;
+
+SHOW FULL COLUMNS FROM bugs LIKE 'tag';
+
+INSERT INTO bugs (id, tag) VALUES (1, "Linux");
+INSERT INTO bugs (id, tag) VALUES (2, "MySQL");
+INSERT INTO bugs (id, tag) VALUES (3, "groonga");
+
+SELECT * FROM bugs;
+SELECT * FROM tags;
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test
new file mode 100644
index 00000000000..0d3be3d663d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_order_by_with_function.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags, bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL Groonga");
+INSERT INTO bugs (id, tags) VALUES (2, "MySQL Mroonga");
+INSERT INTO bugs (id, tags) VALUES (3, "Ruby Rroonga");
+
+SELECT * FROM tags ORDER BY SUBSTRING(name, 1, 1) ASC;
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test
new file mode 100644
index 00000000000..bb66e35f2d1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_groonga_vector_reference.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags, bugs;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR", type "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL groonga");
+
+SELECT * FROM bugs;
+SELECT * FROM tags;
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test
new file mode 100644
index 00000000000..aa33af05df3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_int_with_index_zero_value.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price INT KEY
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("hamburger", 200);
+INSERT INTO items VALUES ("smile", 0);
+INSERT INTO items VALUES ("coke", 100);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price = 0;
+
+SELECT * FROM items WHERE price <= 100;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test
new file mode 100644
index 00000000000..9d7d40433d0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_16_with_index.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ colors SET("black",
+ "dim gray",
+ "dark gray",
+ "gray",
+ "light gray",
+ "gainsboro",
+ "white smoke",
+ "white",
+
+ "red",
+ "orange red",
+ "dark orange",
+ "orange",
+ "gold",
+ "yellow",
+ "chartreuse",
+ "lawn green"),
+ INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart", "black,gray");
+INSERT INTO items VALUES ("hat", "white,dark gray");
+INSERT INTO items VALUES ("parka", "chartreuse,orange");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE colors = "dark gray,white";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test
new file mode 100644
index 00000000000..c555c4ced6a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_24_with_index.test
@@ -0,0 +1,65 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ colors SET("black",
+ "dim gray",
+ "dark gray",
+ "gray",
+ "light gray",
+ "gainsboro",
+ "white smoke",
+ "white",
+
+ "red",
+ "orange red",
+ "dark orange",
+ "orange",
+ "gold",
+ "yellow",
+ "chartreuse",
+ "lawn green",
+
+ "green",
+ "spring green",
+ "medium spring green",
+ "cyan",
+ "deep sky blue",
+ "blue",
+ "medium blue",
+ "dark violet"),
+ INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart", "black,white");
+INSERT INTO items VALUES ("hat", "white,lawn green");
+INSERT INTO items VALUES ("parka", "gray,medium blue");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE colors = "white,lawn green";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test
new file mode 100644
index 00000000000..0f772522eb6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_32_with_index.test
@@ -0,0 +1,74 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ colors SET("black",
+ "dim gray",
+ "dark gray",
+ "gray",
+ "light gray",
+ "gainsboro",
+ "white smoke",
+ "white",
+
+ "red",
+ "orange red",
+ "dark orange",
+ "orange",
+ "gold",
+ "yellow",
+ "chartreuse",
+ "lawn green",
+
+ "green",
+ "spring green",
+ "medium spring green",
+ "cyan",
+ "deep sky blue",
+ "blue",
+ "medium blue",
+ "dark violet",
+
+ "dark magenta",
+ "magenta",
+ "dark red",
+ "brown",
+ "firebrick",
+ "indian red",
+ "light coral",
+ "salmon"),
+ INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart", "black,white");
+INSERT INTO items VALUES ("hat", "white,dark violet");
+INSERT INTO items VALUES ("parka", "green,brown,red");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE colors = "white,dark violet";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test
new file mode 100644
index 00000000000..6552c5da805
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_64_with_index.test
@@ -0,0 +1,110 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ colors SET("black",
+ "dim gray",
+ "dark gray",
+ "gray",
+ "light gray",
+ "gainsboro",
+ "white smoke",
+ "white",
+
+ "red",
+ "orange red",
+ "dark orange",
+ "orange",
+ "gold",
+ "yellow",
+ "chartreuse",
+ "lawn green",
+
+ "green",
+ "spring green",
+ "medium spring green",
+ "cyan",
+ "deep sky blue",
+ "blue",
+ "medium blue",
+ "dark violet",
+
+ "dark magenta",
+ "magenta",
+ "dark red",
+ "brown",
+ "firebrick",
+ "indian red",
+ "light coral",
+ "salmon",
+
+ "light salmon",
+ "tomato",
+ "coral",
+ "dark salmon",
+ "rosy brown",
+ "sienna",
+ "saddle brown",
+ "chocolate",
+
+ "peru",
+ "sandy brown",
+ "burlywood",
+ "tan",
+ "navajo white",
+ "wheat",
+ "dark goldenrod",
+ "goldenrod",
+
+ "light goldenrod",
+ "pale goldenrod",
+ "cornsilk",
+ "dark khaki",
+ "khaki",
+ "lemon chiffon",
+ "dark olive green",
+ "olive drab",
+
+ "yellow green",
+ "green yellow",
+ "light green",
+ "forest green",
+ "dark green",
+ "lime green",
+ "pale green",
+ "dark sea green"),
+ INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart", "black,white,lawn green,dark violet");
+INSERT INTO items VALUES ("hat", "white,dark violet,yellow green");
+INSERT INTO items VALUES ("parka", "green,brown,red,lime green");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE colors = "white,dark violet,yellow green";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test
new file mode 100644
index 00000000000..bd92f23deb0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_set_8_with_index.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ colors SET("black",
+ "dim gray",
+ "dark gray",
+ "gray",
+ "light gray",
+ "gainsboro",
+ "white smoke",
+ "white"),
+ INDEX (colors)
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items VALUES ("t-shart", "black,gray");
+INSERT INTO items VALUES ("hat", "dim gray,dark gray");
+INSERT INTO items VALUES ("parka", "white smoke,light gray");
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE colors = "dim gray,dark gray";
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test
new file mode 100644
index 00000000000..c8bd7df0a15
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_bigint_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price BIGINT KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("house", 9223372036854775807);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -9223372036854775808);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("super car", 2147483648);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 2147483648;
+
+SELECT * FROM items WHERE price > 2147483647;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test
new file mode 100644
index 00000000000..572f46ebbb5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_int_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price INT KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("car", 2147483647);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -2147483647);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 16777216);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 16777216;
+
+SELECT * FROM items WHERE price > 16777215;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test
new file mode 100644
index 00000000000..f43395cb0aa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_mediumint_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price MEDIUMINT KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("car", 8388607);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -8388608);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 32768);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 127;
+
+SELECT * FROM items WHERE price >= 32768;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test
new file mode 100644
index 00000000000..4ddd446dc46
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_smallint_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price SMALLINT KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", -32768);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("tablet PC", 20000);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 127;
+
+SELECT * FROM items WHERE price >= 128;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test
new file mode 100644
index 00000000000..e2bca9328a9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_signed_tinyint_with_index.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price TINYINT KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("hamburger", 120);
+INSERT INTO items VALUES ("discount", -10);
+INSERT INTO items VALUES ("coke", 100);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 100;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test
new file mode 100644
index 00000000000..2a920d7e387
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_time_fractional_seconds_with_index.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_fractional_seconds.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS running_records;
+--enable_warnings
+
+CREATE TABLE running_records (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ average TIME(6),
+ max TIME(6),
+ KEY (average)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+
+INSERT INTO running_records (title, average, max)
+ VALUES ("normal condition", "01:00:00.000001", "01:05:00.000001");
+INSERT INTO running_records (title, average, max)
+ VALUES ("bad condition", "12:23:34.123456", "838:59:58.999999");
+INSERT INTO running_records (title, average, max)
+ VALUES ("record failure", "-838:59:59.000000", "-838:59:59.000000");
+
+SELECT * FROM running_records;
+
+SELECT * FROM running_records
+ WHERE average BETWEEN "00:59:59.999999" AND "100:10:10.101010";
+
+SELECT * FROM running_records
+ WHERE average BETWEEN "-838:59:59.000000" AND "01:00:00.000001";
+
+DROP TABLE running_records;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test
new file mode 100644
index 00000000000..f5961825259
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_time_with_index.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS running_records;
+--enable_warnings
+
+CREATE TABLE running_records (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ average TIME,
+ max TIME,
+ KEY (average)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+
+INSERT INTO running_records (title, average, max)
+ VALUES ("normal condition", "01:00:00", "01:05:00");
+INSERT INTO running_records (title, average, max)
+ VALUES ("bad condition", "12:23:34", "838:59:59");
+INSERT INTO running_records (title, average, max)
+ VALUES ("record failure", "-838:59:59", "-838:59:59");
+
+SELECT * FROM running_records;
+
+SELECT * FROM running_records
+ WHERE average BETWEEN "00:59:59" AND "100:10:10";
+
+SELECT * FROM running_records
+ WHERE average BETWEEN "-838:59:59" AND "01:00:00";
+
+DROP TABLE running_records;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test
new file mode 100644
index 00000000000..6f5e0116eb7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_fractional_seconds_with_index.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_mariadb_55.inc
+--source ../../include/mroonga/have_fractional_seconds.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at TIMESTAMP(6),
+ updated_at TIMESTAMP(6),
+ KEY (updated_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("clear day",
+ "2012-01-29 21:51:01.111111",
+ "2012-01-29 21:51:02.222222");
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("rainy day",
+ "2012-01-30 01:23:45.333",
+ "2012-01-30 01:23:46.444");
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("cloudy day",
+ "2012-01-31 08:32:10.5555",
+ "2012-01-31 08:32:11.6666");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE updated_at BETWEEN "2012-01-29 00:00:00.123456" AND
+ "2012-01-31 00:00:00.999999";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test
new file mode 100644
index 00000000000..ae78befc466
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_timestamp_with_index.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ created_at TIMESTAMP,
+ updated_at TIMESTAMP,
+ KEY (updated_at)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("clear day", "2012-01-29 21:51:01", "2012-01-29 21:51:02");
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("rainy day", "2012-01-30 01:23:45", "2012-01-30 01:23:46");
+INSERT INTO diaries (title, created_at, updated_at)
+ VALUES ("cloudy day", "2012-01-31 08:32:10", "2012-01-31 08:32:11");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE updated_at BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test
new file mode 100644
index 00000000000..c658c873e02
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_tinyint_without_index.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists books;
+--enable_warnings
+
+create table books(title varchar(255), published tinyint);
+insert into books values ("MySQL", 1);
+insert into books values ("groonga", 1);
+insert into books values ("mroonga", 0);
+
+select count(*) from books where published = 0;
+select count(*) from books where published = 1;
+select count(*) from books where published != 2;
+select count(*) from books where published != 1;
+
+drop table books;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test
new file mode 100644
index 00000000000..1936842707c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price BIGINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("house", 18446744073709551615);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("super car", 9223372036854775808);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 9223372036854775808;
+
+SELECT * FROM items WHERE price > 9223372036854775807;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test
new file mode 100644
index 00000000000..8ac9715ad76
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_bigint_without_index.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id BIGINT UNSIGNED
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES (317173755057152000);
+INSERT INTO ids VALUES (317173755057152002);
+
+SELECT * FROM ids;
+
+SELECT * FROM ids WHERE id = 317173755057152000;
+
+SELECT * FROM ids WHERE id = 317173755057152002;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test
new file mode 100644
index 00000000000..a97024b48d8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_int_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price INT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("car", 4294967295);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 2147483648);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 2147483648;
+
+SELECT * FROM items WHERE price > 2147483647;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test
new file mode 100644
index 00000000000..bec5917b410
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_mediumint_with_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price MEDIUMINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("car", 16777215);
+INSERT INTO items VALUES ("note PC", 32767);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("bike", 8388607);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 8388608;
+
+SELECT * FROM items WHERE price >= 8388607;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test
new file mode 100644
index 00000000000..8e389b98881
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_smallint_with_index.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price SMALLINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("note PC", 65535);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+INSERT INTO items VALUES ("tablet PC", 32767);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 32768;
+
+SELECT * FROM items WHERE price >= 32767;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test
new file mode 100644
index 00000000000..880bc2d7cd8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_unsigned_tinyint_with_index.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ name VARCHAR(255),
+ price TINYINT UNSIGNED KEY
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO items VALUES ("hamburger", 255);
+INSERT INTO items VALUES ("discount", 0);
+INSERT INTO items VALUES ("coke", 100);
+
+SELECT * FROM items;
+
+SELECT * FROM items WHERE price <= 100;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test
new file mode 100644
index 00000000000..a61dccc6439
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_year_with_index.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS aniversary_memos;
+--enable_warnings
+
+CREATE TABLE aniversary_memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ party_year YEAR,
+ KEY (party_year)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("We need a big cake!", "11");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Invitations are sent.", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Tommorow is the anniversary party day!", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Wow! Today is the anniversary party day!", "13");
+
+SELECT * FROM aniversary_memos;
+
+SELECT * FROM aniversary_memos
+ WHERE party_year BETWEEN "12" AND "2013";
+
+DROP TABLE aniversary_memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test
new file mode 100644
index 00000000000..ce1e1c21921
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/column_year_without_index.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS aniversary_memos;
+--enable_warnings
+
+CREATE TABLE aniversary_memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ party_year YEAR
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("We need a big cake!", "11");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Invitations are sent.", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Tommorow is the anniversary party day!", "2012");
+INSERT INTO aniversary_memos (title, party_year)
+ VALUES ("Wow! Today is the anniversary party day!", "13");
+
+SELECT * FROM aniversary_memos;
+
+SELECT * FROM aniversary_memos
+ WHERE party_year BETWEEN "12" AND "2013";
+
+DROP TABLE aniversary_memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test
new file mode 100644
index 00000000000..b731acda9c9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_database_name_slash.test
@@ -0,0 +1,60 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP DATABASE IF EXISTS `master/production`;
+DROP DATABASE IF EXISTS `master/development`;
+--enable_warnings
+
+CREATE DATABASE `master/production`;
+USE `master/production`;
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO diaries (title) VALUES ("clear day (production)");
+INSERT INTO diaries (title) VALUES ("rainy day (production)");
+INSERT INTO diaries (title) VALUES ("cloudy day (production)");
+
+SELECT * FROM diaries;
+
+
+CREATE DATABASE `master/development`;
+USE `master/development`;
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO diaries (title) VALUES ("clear day (development)");
+INSERT INTO diaries (title) VALUES ("rainy day (development)");
+INSERT INTO diaries (title) VALUES ("cloudy day (development)");
+
+SELECT * FROM diaries;
+
+
+USE test;
+
+DROP DATABASE `master/production`;
+DROP DATABASE `master/development`;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..e448a66956f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_TODO_SPLIT_ME.test
@@ -0,0 +1,147 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# simple test
+create table t1 (c1 int);
+create table t2 (c1 int);
+create table t3 (c1 int);
+drop table t1,t2,t3;
+create table t1 (c1 int, c2 int, c3 int);
+create table t2 (c1 int primary key, c2 int, c3 int);
+drop table t1,t2;
+
+# data type support
+create table t1 (c1 bit);
+desc t1;
+drop table t1;
+create table t1 (c1 tinyint);
+desc t1;
+drop table t1;
+create table t1 (c1 smallint);
+desc t1;
+drop table t1;
+create table t1 (c1 mediumint);
+desc t1;
+drop table t1;
+create table t1 (c1 int);
+desc t1;
+drop table t1;
+create table t1 (c1 bigint);
+desc t1;
+drop table t1;
+create table t1 (c1 double);
+desc t1;
+drop table t1;
+create table t1 (c1 float);
+desc t1;
+drop table t1;
+create table t1 (c1 decimal);
+desc t1;
+drop table t1;
+create table t1 (c1 date);
+desc t1;
+drop table t1;
+create table t1 (c1 time);
+desc t1;
+drop table t1;
+create table t1 (c1 timestamp);
+desc t1;
+drop table t1;
+create table t1 (c1 datetime);
+desc t1;
+drop table t1;
+create table t1 (c1 year);
+desc t1;
+drop table t1;
+create table t1 (c1 char(10));
+desc t1;
+drop table t1;
+create table t1 (c1 varchar(10));
+desc t1;
+drop table t1;
+create table t1 (c1 binary(10));
+desc t1;
+drop table t1;
+create table t1 (c1 varbinary(10));
+desc t1;
+drop table t1;
+create table t1 (c1 tinyblob);
+desc t1;
+drop table t1;
+create table t1 (c1 blob);
+desc t1;
+drop table t1;
+create table t1 (c1 mediumblob);
+desc t1;
+drop table t1;
+create table t1 (c1 longblob);
+desc t1;
+drop table t1;
+create table t1 (c1 tinytext);
+desc t1;
+drop table t1;
+create table t1 (c1 text);
+desc t1;
+drop table t1;
+create table t1 (c1 mediumtext);
+desc t1;
+drop table t1;
+create table t1 (c1 longtext);
+desc t1;
+drop table t1;
+create table t1 (c1 enum("yes","no"));
+desc t1;
+drop table t1;
+create table t1 (c1 set("A","B","AB","O"));
+desc t1;
+drop table t1;
+
+# virtual columns
+create table t1 (c1 int, `_id` int) engine = mroonga;
+desc t1;
+drop table t1;
+
+# error
+--error ER_CANT_CREATE_TABLE
+create table t1 (c1 int, `_score` float) engine = mroonga;
+
+# checking for virtual columns
+--error ER_CANT_CREATE_TABLE
+create table t1 (c1 int, `_id` text) engine = mroonga;
+--error ER_CANT_CREATE_TABLE
+create table t1 (c1 int, `_id` int, index(`_id`)) engine = mroonga;
+
+# index for _id
+--error ER_CANT_CREATE_TABLE
+create table t1 (_id int, c1 int, primary key (_id));
+create table t1 (_id int, c1 int, primary key (_id) using hash);
+drop table t1;
+--error ER_CANT_CREATE_TABLE
+create table t1 (_id int, c1 int, unique key (_id));
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+drop table t1;
+--error ER_CANT_CREATE_TABLE
+create table t1 (_id int, c1 int, key (_id));
+create table t1 (_id int, c1 int, key (_id) using hash);
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test
new file mode 100644
index 00000000000..272485d3453
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_comment_normal.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED
+) DEFAULT CHARSET=utf8
+ COMMENT='Free style normal comment';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test
new file mode 100644
index 00000000000..7c8cd3f32a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_default_tokenizer.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+SELECT mroonga_command("dump");
+
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_fulltext_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_fulltext_index.test
new file mode 100644
index 00000000000..02e2cb9e81a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_fulltext_index.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE diaries (
+ day DATE PRIMARY KEY,
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
+) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んã ã€‚");
+
+SELECT * FROM diaries
+ WHERE MATCH (content) AGAINST ("+ãµã‚‰ã¤ã" IN BOOLEAN MODE);
+SELECT * FROM diaries
+ WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.test
new file mode 100644
index 00000000000..f28fb5b8695
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_no_utf8_charset_with_utf8_normalizer.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES latin1;
+
+CREATE TABLE diaries (
+ day DATE PRIMARY KEY,
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerMySQLGeneralCI"'
+) DEFAULT CHARSET=latin1;
+
+--error ER_ERROR_ON_WRITE
+INSERT INTO diaries VALUES ("2013-04-23", "I drunk a black cookie.");
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_table_comment.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_table_comment.test
new file mode 100644
index 00000000000..1da8026f56d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_normalizer_table_comment.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+DROP TABLE IF EXISTS terms;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE terms (
+ term VARCHAR(64) NOT NULL PRIMARY KEY
+) COMMENT='default_tokenizer "TokenBigram", normalizer "NormalizerAuto"' DEFAULT CHARSET=utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES (1, "1æ—¥ã®æ¶ˆè²»ãŒã¯ç´„2000㌔ãŒ");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("+カロリー" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+DROP TABLE terms;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_reference_type.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_reference_type.test
new file mode 100644
index 00000000000..eb1095e75a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_reference_type.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64) COMMENT 'type "tags"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE bugs;
+DROP TABLE tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_multiple_token_filters.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_multiple_token_filters.test
new file mode 100644
index 00000000000..66bf9cef699
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_multiple_token_filters.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+SET NAMES utf8;
+
+CREATE TABLE memos (
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord,TokenFilterStopWord"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_one_token_filter.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_one_token_filter.test
new file mode 100644
index 00000000000..49a23ec6b74
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_index_comment_one_token_filter.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+SET NAMES utf8;
+
+CREATE TABLE memos (
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_multiple_token_filters.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_multiple_token_filters.test
new file mode 100644
index 00000000000..7d890aff9d3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_multiple_token_filters.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+CREATE TABLE terms (
+ term VARCHAR(64) NOT NULL PRIMARY KEY,
+ is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord,TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+DROP TABLE terms;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_one_token_filter.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_one_token_filter.test
new file mode 100644
index 00000000000..f391647a538
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_token_filters_table_comment_one_token_filter.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+CREATE TABLE terms (
+ term VARCHAR(64) NOT NULL PRIMARY KEY,
+ is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+DROP TABLE terms;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/create_table_vector.test b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_vector.test
new file mode 100644
index 00000000000..8707ce0e34b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/create_table_vector.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags TEXT COMMENT 'flags "COLUMN_VECTOR"'
+) DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test
new file mode 100644
index 00000000000..a43f5c6511b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_fulltext_column.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index (c2));
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+
+select * from t1;
+select * from t1 where match(c2) against("ki");
+delete from t1 where c1=20;
+select * from t1;
+select * from t1 where match(c2) against("ki");
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test
new file mode 100644
index 00000000000..224929fe308
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_btree_many_records.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE ids (
+ id INT,
+ KEY (id)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO ids VALUES(1);
+INSERT INTO ids VALUES(2);
+INSERT INTO ids VALUES(3);
+
+SELECT * FROM ids ORDER BY id;
+
+DELETE FROM ids WHERE id = 1;
+SELECT * FROM ids ORDER BY id;
+
+DELETE FROM ids WHERE id = 2;
+SELECT * FROM ids ORDER BY id;
+
+DELETE FROM ids WHERE id = 3;
+SELECT * FROM ids ORDER BY id;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test
new file mode 100644
index 00000000000..a23ca3bae5c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_no_unique.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, c1 int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+delete from t1 where _id = 2;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test
new file mode 100644
index 00000000000..559b3a15be6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_index_hash_id_unique.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+delete from t1 where _id = 2;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test
new file mode 100644
index 00000000000..2f94a8242d3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_normal_column.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int, c2 int);
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+insert into t1 values (4, 102);
+select * from t1;
+
+delete from t1 where c1=3;
+select * from t1;
+
+flush tables;
+
+delete from t1 where c1=2;
+select * from t1;
+
+delete from t1;
+select * from t1;
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test b/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test
new file mode 100644
index 00000000000..e174710934b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/delete_unsigned_bigint.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS numbers;
+--enable_warnings
+
+CREATE TABLE numbers (
+ data BIGINT UNSIGNED
+);
+
+INSERT INTO numbers VALUES(18446744073709551615);
+
+SELECT * FROM numbers ORDER BY data;
+
+DELETE FROM numbers WHERE data = 18446744073709551615;
+SELECT * FROM numbers ORDER BY data;
+
+DROP TABLE numbers;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..74f840944f9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/drop_database_TODO_SPLIT_ME.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop database if exists groonga;
+--enable_warnings
+
+create database groonga;
+drop database groonga;
+
+create database groonga;
+use groonga;
+create table t1 (c1 int primary key, c2 varchar(255)) default charset utf8;
+create table t2 (c1 int primary key, c2 varchar(255)) default charset utf8;
+drop database groonga;
+
+create database groonga;
+use groonga;
+create table t1 (c1 int primary key, c2 varchar(255)) default charset utf8;
+create table t2 (c1 int primary key, c2 varchar(255)) default charset utf8;
+drop table t1, t2;
+drop database groonga;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..a057f328453
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/drop_table_TODO_SPLIT_ME.test
@@ -0,0 +1,29 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists alphabet, `with-hyphen`;
+--enable_warnings
+
+create table alphabet (c1 int primary key, c2 int, c3 int);
+drop table alphabet;
+
+create table `with-hyphen` (c1 int primary key, c2 int, c3 int);
+drop table `with-hyphen`;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test b/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test
new file mode 100644
index 00000000000..964217ae713
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/flush_logs.test
@@ -0,0 +1,21 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+flush logs;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test b/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test
new file mode 100644
index 00000000000..fe457562967
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/foreign_key_create.test
@@ -0,0 +1,113 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_mysql_55.inc
+--source ../../include/mroonga/skip_mariadb_55.inc
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists articles2;
+drop table if exists articles;
+drop table if exists comments2;
+drop table if exists comments;
+--enable_warnings
+
+create table comments(
+ comment int unsigned,
+ content text not null,
+ primary key(comment)
+);
+
+create table articles(
+ content text not null,
+ comment int unsigned,
+ FOREIGN KEY (comment) REFERENCES comments (comment)
+);
+
+insert into comments (comment, content) values
+(1, 'aaa bbb'),(2, 'ccc ddd'),(3, 'eee fff');
+
+insert into articles (content, comment) values
+('111aaa', 1),('222bbb', 2),('222ccc', 2);
+
+select comment, content from comments;
+
+select content, comment from articles;
+
+show create table comments;
+
+show create table articles;
+
+select * from information_schema.referential_constraints;
+
+rename table comments to comments2;
+rename table articles to articles2;
+
+create table comments(
+ comment int unsigned,
+ content text not null,
+ primary key(comment)
+);
+
+create table articles(
+ content text not null,
+ comment int unsigned,
+ FOREIGN KEY (comment) REFERENCES comments (comment)
+);
+
+insert into comments (comment, content) values
+(1, 'ab'),(2, 'cd'),(3, 'ef');
+
+insert into articles (content, comment) values
+('1a', 1),('2b', 2),('2c', 2);
+
+select comment, content from comments;
+
+select content, comment from articles;
+
+select comment, content from comments2;
+
+select content, comment from articles2;
+
+show create table comments;
+
+show create table articles;
+
+show create table comments2;
+
+show create table articles2;
+
+select * from information_schema.referential_constraints;
+
+alter table articles drop foreign key comment;
+
+show create table articles;
+
+select content, comment from articles;
+
+alter table articles add FOREIGN KEY (comment) REFERENCES comments (comment);
+
+show create table articles;
+
+select content, comment from articles;
+
+drop table articles2;
+drop table articles;
+drop table comments2;
+drop table comments;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test
new file mode 100644
index 00000000000..75f1c3c38ed
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_empty_query.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *
+ FROM diaries
+ WHERE MATCH(title) AGAINST("" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test
new file mode 100644
index 00000000000..1a27422aa81
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_escape.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("\\(groonga\\)*" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+SET GLOBAL mroonga_default_parser = TokenBigram;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test
new file mode 100644
index 00000000000..952749338ac
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_leading_not.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("-明日 +天気" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test
new file mode 100644
index 00000000000..89adbd4b5f7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- fine is be" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test
new file mode 100644
index 00000000000..76a72a5b865
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- is OR be fine" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test
new file mode 100644
index 00000000000..e2edfe780b3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Yesterday was good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- good +day be" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test
new file mode 100644
index 00000000000..4d0f15b203a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test
new file mode 100644
index 00000000000..ed93b543869
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test
new file mode 100644
index 00000000000..3a078c7eccb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+INSERT INTO memos VALUES ("Tomorrow will be fine.");
+INSERT INTO memos VALUES ("Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test
new file mode 100644
index 00000000000..fb2ec74a5e0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today good" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test
new file mode 100644
index 00000000000..30cf3e87491
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today -good is" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test
new file mode 100644
index 00000000000..7268cc1921c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos VALUES ("Today is good day.");
+INSERT INTO memos VALUES ("Tomorrow will be good day.");
+INSERT INTO memos VALUES ("Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today OR tomorrow day" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test
new file mode 100644
index 00000000000..bec7944a82b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_full_spec.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test
new file mode 100644
index 00000000000..fa10ae7b73b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_no_weight.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1,2:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1,2:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test
new file mode 100644
index 00000000000..d7f1bde6ca4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_omit_section.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test
new file mode 100644
index 00000000000..6df0c13f111
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_ten_or_more_sections.test
@@ -0,0 +1,63 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ title VARCHAR(255),
+ tag1 VARCHAR(10),
+ tag2 VARCHAR(10),
+ tag3 VARCHAR(10),
+ tag4 VARCHAR(10),
+ tag5 VARCHAR(10),
+ tag6 VARCHAR(10),
+ tag7 VARCHAR(10),
+ tag8 VARCHAR(10),
+ tag9 VARCHAR(10),
+ tag10 VARCHAR(10),
+ FULLTEXT INDEX (tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO memos
+ VALUES("Groonga",
+ "tag 1",
+ "tag 2",
+ "tag 3",
+ "tag 4",
+ "tag 5",
+ "tag 6",
+ "tag 7",
+ "tag 8",
+ "tag 9",
+ "tag 10");
+
+SELECT title,
+ MATCH(tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+ AGAINST("*W1:2,2:4,3:6,4:8,5:10,6:12,7:14,8:16,9:18,10:20 +tag"
+ in BOOLEAN MODE) AS score
+ FROM memos
+ WHERE MATCH(tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8, tag9, tag10)
+ AGAINST("*W1:2,2:4,3:6,4:8,5:10,6:12,7:14,8:16,9:18,10:20 +tag"
+ in BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test
new file mode 100644
index 00000000000..9161ff6ff0d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_pragma_weight_three_or_more_sections.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ category VARCHAR(10),
+ content TEXT,
+ FULLTEXT INDEX (title, category, content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES(1, "Hello", "日記", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気予報", "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "天気", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, category, content)
+ AGAINST("*W1:2,2:10,3:1 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, category, content)
+ AGAINST("*W1:2,2:10,3:1 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test
new file mode 100644
index 00000000000..f8d5e3fe6be
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = ERROR;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+
+-- error ER_PARSE_ERROR
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+SET GLOBAL mroonga_default_parser = TokenBigram;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test
new file mode 100644
index 00000000000..1c0795bca58
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_error_and_log.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = ERROR_AND_LOG;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+
+-- error ER_PARSE_ERROR
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+SET GLOBAL mroonga_default_parser = TokenBigram;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test
new file mode 100644
index 00000000000..fef386cc42d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = "IGNORE";
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+SET GLOBAL mroonga_default_parser = TokenBigram;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test
new file mode 100644
index 00000000000..ac51f81a43a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_boolean_mode_syntax_error_ignore_and_log.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET GLOBAL mroonga_default_parser = TokenDelimit;
+SET mroonga_action_on_fulltext_query_error = IGNORE_AND_LOG;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=UTF8;
+
+INSERT INTO memos VALUES(1, "(groonga) Installed!");
+INSERT INTO memos VALUES(2, "(mroonga) Installed!");
+INSERT INTO memos VALUES(3, "(groonga) Upgraded!");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("(groonga" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+SET GLOBAL mroonga_default_parser = TokenBigram;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test
new file mode 100644
index 00000000000..42ef563105d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_ascii.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+select * from t1 where match(c3) against("su");
+select * from t1 where match(c3) against("ii");
+select * from t1 where match(c3) against("+su" in boolean mode);
+select * from t1 where match(c3) against("+ii" in boolean mode);
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test
new file mode 100644
index 00000000000..7396a66ecc0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_cp932.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_cp932.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932;
+insert into t1 values(1, "–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä","‚ ‚ ‚ ‚ ‚ ‚ ‚ ");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("•xŽmŽR");
+select * from t1 where match(c3) against("•xŽmŽR");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test
new file mode 100644
index 00000000000..2d8b094c43d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_eucjpms.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_eucjpms.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms;
+insert into t1 values(1, "ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ","¤¢¤¢¤¢¤¢¤¢¤¢¤¢");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("Éٻλ³");
+select * from t1 where match(c3) against("Éٻλ³");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test
new file mode 100644
index 00000000000..4b6ca756a29
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_japanese.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8;
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("富士山");
+select * from t1 where match(c3) against("富士山");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test
new file mode 100644
index 00000000000..d870affba4f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_charset_utf8mb4.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8mb4;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255) CHARSET utf8mb4 COLLATE utf8mb4_general_ci,
+ content TEXT CHARSET utf8mb4 COLLATE utf8mb4_general_ci,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET utf8mb4;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "Alphabet", "ABCDE");
+INSERT INTO diaries VALUES(2, "Mathmatics", "ð€ðð‚ðƒð„ | U+1D400-U+1D405");
+INSERT INTO diaries VALUES(3, "ã²ã‚‰ãŒãª", "ã‚ã„ã†ãˆãŠ");
+
+SELECT *
+ FROM diaries
+ WHERE MATCH (content) AGAINST("ABCDE" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test
new file mode 100644
index 00000000000..59a274f942c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_empty_query.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *
+ FROM diaries
+ WHERE MATCH(title) AGAINST("");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test
new file mode 100644
index 00000000000..4d899201fb3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_found_rows.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT SQL_CALC_FOUND_ROWS * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+
+SELECT FOUND_ROWS();
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test
new file mode 100644
index 00000000000..19f82f644a6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_groonga_varchar_vector.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs, tags;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(64) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COLLATE=utf8_bin
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tags VARCHAR(40) COMMENT 'type "tags", flags "COLUMN_VECTOR"',
+ FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "tags"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO bugs (id, tags) VALUES (1, "Linux MySQL");
+INSERT INTO bugs (id, tags) VALUES (2, "MySQL groonga");
+INSERT INTO bugs (id, tags) VALUES (3, "mroonga");
+
+SELECT *
+ FROM bugs
+ WHERE MATCH (tags) AGAINST ("MySQL" IN BOOLEAN MODE);
+
+DROP TABLE bugs, tags;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test
new file mode 100644
index 00000000000..a8d4780fee3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_index_recreate.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title)
+) default charset utf8;
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title) against("富士山");
+drop index title on diaries;
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+select * from diaries where match(title) against("富士山");
+select * from diaries;
+create fulltext index new_title_index on diaries (title);
+select * from diaries where match(title) against("富士山");
+select * from diaries;
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test
new file mode 100644
index 00000000000..641bbc3c4bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_select.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8;
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8;
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+select * from t2;
+select * from t1 where c1=3;
+select * from t2 where c1=3;
+select * from t1 where c1>3 order by c1 desc;
+select * from t2 where c1>3 order by c1 asc;
+select * from t1 where c2>"s" order by c2 desc;
+select * from t2 where c2>"s" order by c1 asc;
+select * from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+select * from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+select c1,c2,match(c2) against("ii") from t2 where match(c2) against("ii");
+drop table t1,t2;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test
new file mode 100644
index 00000000000..0b52448bc45
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_insert_values.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2));
+show create table t1;
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+flush tables;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test
new file mode 100644
index 00000000000..9c083f57a80
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_delete.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+delete from diaries where id = 2;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test
new file mode 100644
index 00000000000..ce2c2714e31
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_insert.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test
new file mode 100644
index 00000000000..ffee108932a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_recreate.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title, content) against("富士山");
+
+drop index title on diaries;
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+select * from diaries where match(title, content) against("富士山");
+
+create fulltext index new_title_content_index on diaries (title, content);
+select * from diaries where match(title, content) against("富士山");
+
+select * from diaries;
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test
new file mode 100644
index 00000000000..e9e6aa2bb6e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_column_index_update.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+update diaries set title = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒž" where id = 3;
+update diaries set content = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±" where id = 1;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test
new file mode 100644
index 00000000000..19fd4f8d3ba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_multiple_index.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ title text,
+ body text,
+ fulltext index title_index (title),
+ fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries (title, body) values ("survey", "will start groonga!");
+insert into diaries (title, body) values ("groonga (1)", "starting groonga...");
+insert into diaries (title, body) values ("groonga (2)", "started groonga.");
+
+select * from diaries
+ where match(title) against("survey") and
+ match(body) against("groonga");
+
+select *, match(title) against("survey"), match(body) against("groonga")
+ from diaries
+ where match(title) against("survey") and
+ match(body) against("groonga");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test
new file mode 100644
index 00000000000..7ef05efa3a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_no_primary_key.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES("Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES("天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES("富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("*D+ 今日 天気" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test
new file mode 100644
index 00000000000..7b4e62ba0a9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_not_match_against.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# for "not match against"
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+select * from t1 where match(c3) against("uu");
+select * from t1 where not match(c3) against("uu");
+select * from t1 where match(c3) against("dummy");
+select * from t1 where not match(c3) against("dummy");
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test
new file mode 100644
index 00000000000..2b0f3bbb15c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_or.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *
+ FROM diaries
+ WHERE MATCH(title) AGAINST("Ruby" IN BOOLEAN MODE) OR
+ MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_against.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_against.test
new file mode 100644
index 00000000000..f2859f99dba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_against.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title) AGAINST("groonga mroonga" IN BOOLEAN MODE)
+ ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_match.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_match.test
new file mode 100644
index 00000000000..dc97db87487
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_different_match.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ body TEXT,
+ FULLTEXT KEY (title),
+ FULLTEXT KEY (body)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga", "I read groonga's tutorial.");
+INSERT INTO diaries VALUES("Start mroonga", "I read mroonga's tutorial.");
+INSERT INTO diaries VALUES("Start groonga and Ruby", "I installed rroonga.");
+
+SELECT * FROM diaries;
+
+SELECT *, MATCH(body) AGAINST("groonga" IN BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE)
+ ORDER BY MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_no_where.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_no_where.test
new file mode 100644
index 00000000000..50dd652e2d0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_no_where.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+ FROM diaries
+ ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_same_match_against.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_same_match_against.test
new file mode 100644
index 00000000000..0873849a1e7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_order_same_match_against.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT * FROM diaries;
+
+SELECT *, MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE)
+ ORDER BY MATCH(title) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_comment.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_comment.test
new file mode 100644
index 00000000000..24cc173485a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_comment.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+ comment 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+select * from diaries where match(body) against("start");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_default.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_default.test
new file mode 100644
index 00000000000..1e08cc46221
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_default.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set @mroonga_default_parser_backup=@@mroonga_default_parser;
+set global mroonga_default_parser=TokenBigramSplitSymbolAlphaDigit;
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+insert into diaries (body) values ("finished groonga.");
+select * from diaries;
+select * from diaries where match(body) against("start");
+drop table diaries;
+set global mroonga_default_parser=@mroonga_default_parser_backup;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_off.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_off.test
new file mode 100644
index 00000000000..0dcf494c684
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_parser_off.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS variables;
+--enable_warnings
+
+CREATE TABLE variables (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name TEXT,
+ FULLTEXT INDEX (name) COMMENT 'parser "off"'
+) DEFAULT CHARSET=utf8;
+SHOW CREATE TABLE variables;
+
+INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix");
+INSERT INTO variables (name) VALUES ("mroonga_default_parser");
+INSERT INTO variables (name) VALUES ("mroonga_default_wrapper_engine");
+INSERT INTO variables (name) VALUES ("mroonga_dry_write");
+INSERT INTO variables (name) VALUES ("mroonga_enable_optimization");
+INSERT INTO variables (name) VALUES ("mroonga_libgroonga_version");
+INSERT INTO variables (name) VALUES ("mroonga_log_file");
+INSERT INTO variables (name) VALUES ("mroonga_log_level");
+INSERT INTO variables (name) VALUES ("mroonga_match_escalation_threshold");
+INSERT INTO variables (name) VALUES ("mroonga_version");
+
+SELECT * FROM variables;
+SELECT * FROM variables
+ WHERE MATCH (name) AGAINST ("mroonga_default*" IN BOOLEAN MODE);
+
+DROP TABLE variables;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_token_filters_skip.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_token_filters_skip.test
new file mode 100644
index 00000000000..b27fb5b70d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_token_filters_skip.test
@@ -0,0 +1,52 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+CREATE TABLE terms (
+ term VARCHAR(64) NOT NULL PRIMARY KEY,
+ is_stop_word BOOL NOT NULL
+) COMMENT='default_tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content TEXT NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'table "terms"'
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO terms VALUES ("and", true);
+
+INSERT INTO memos VALUES (1, "Hello");
+INSERT INTO memos VALUES (2, "Hello and Good-bye");
+INSERT INTO memos VALUES (3, "Good-bye");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("+\"Hello and\"" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+DROP TABLE terms;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test
new file mode 100644
index 00000000000..745720d1fe6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_two_inner_join.test
@@ -0,0 +1,69 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users, posts, comments;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE users (
+ id int NOT NULL,
+ name varchar(50) NOT NULL,
+ PRIMARY KEY (id),
+ KEY (name)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE posts (
+ id int NOT NULL,
+ content mediumtext,
+ user_id int NOT NULL,
+ PRIMARY KEY (id),
+ FULLTEXT KEY (content)
+) DEFAULT CHARSET=utf8;
+
+CREATE TABLE comments (
+ id int NOT NULL,
+ user_id int NOT NULL,
+ post_id int NOT NULL,
+ PRIMARY KEY (id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+INSERT INTO users VALUES (1, "Alice"),
+ (2, "Bob"),
+ (3, "Calros");
+INSERT INTO posts VALUES (1, "Hello!", 1),
+ (2, "World!", 2),
+ (3, "Great!", 3);
+INSERT INTO comments VALUES (1, 1, 1),
+ (2, 2, 1),
+ (3, 3, 3);
+
+SELECT *
+ FROM comments
+ INNER JOIN posts
+ ON posts.id = comments.post_id AND
+ MATCH (posts.content) AGAINST ("Hello!" IN BOOLEAN MODE)
+ INNER JOIN users
+ ON users.id = comments.user_id AND
+ users.name = "Alice";
+
+DROP TABLE users, posts, comments;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test
new file mode 100644
index 00000000000..aab09c18b79
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_100_no_such_key.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_100.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+-- error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT * FROM diaries FORCE INDEX(primary)
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test
new file mode 100644
index 00000000000..d447b1f85dc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_55_no_such_key.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_55.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries FORCE INDEX(primary)
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test
new file mode 100644
index 00000000000..1187b189244
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/fulltext_version_56_no_such_key.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_56.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+-- error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT * FROM diaries FORCE INDEX(primary)
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test
new file mode 100644
index 00000000000..f1a1777d92b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_command_select.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT mroonga_command('select diaries --match_columns "title" --query "groonga"');
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test
new file mode 100644
index 00000000000..a37e601e92d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_missing.test
@@ -0,0 +1,27 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+-- error ER_CANT_INITIALIZE_UDF
+SELECT mroonga_escape() AS escaped_query;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test
new file mode 100644
index 00000000000..683efb7e25c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_query_is_not_string.test
@@ -0,0 +1,27 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+-- error ER_CANT_INITIALIZE_UDF
+SELECT mroonga_escape(29) AS escaped_query;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test
new file mode 100644
index 00000000000..5e04ae2a615
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_error_target_characters_is_not_string.test
@@ -0,0 +1,27 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+-- error ER_CANT_INITIALIZE_UDF
+SELECT mroonga_escape('+-><~*()\"\\:', 29) AS escaped_query;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test
new file mode 100644
index 00000000000..6d328fa8434
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_all.test
@@ -0,0 +1,26 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+SELECT mroonga_escape('+-><~*()\"\\:') AS escaped_query;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test
new file mode 100644
index 00000000000..2ad633b43f0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_custom.test
@@ -0,0 +1,26 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+SELECT mroonga_escape('+-><~*()\"\\:', '()<>~') AS escaped_query;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test
new file mode 100644
index 00000000000..82f7410d909
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_escape_success_nested.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries(
+ title TEXT,
+ FULLTEXT KEY (title)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES("Start groonga");
+INSERT INTO diaries VALUES("Start mroonga");
+INSERT INTO diaries VALUES("Start groonga and Ruby");
+
+SELECT mroonga_escape(mroonga_escape('*groonga*'));
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test
new file mode 100644
index 00000000000..ef6b0077976
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_grn_id.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, c1 int);
+select last_insert_grn_id();
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+insert into t1 values(null,100);
+insert into t1 values(null,100);
+select last_insert_grn_id();
+
+--error ER_CANT_INITIALIZE_UDF
+select last_insert_grn_id(1);
+
+drop table t1;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test
new file mode 100644
index 00000000000..a515757ab55
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_reference.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id int AUTO_INCREMENT PRIMARY KEY
+);
+
+SELECT last_insert_id();
+
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test
new file mode 100644
index 00000000000..2eb75ac3b60
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_last_insert_id_set.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id int AUTO_INCREMENT PRIMARY KEY
+);
+
+SELECT last_insert_id();
+SELECT last_insert_id(10);
+SELECT last_insert_id();
+
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test
new file mode 100644
index 00000000000..f273a38c13a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_ascii.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012-2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3));
+insert into t1 values(1,10,"aa bb cc dd ee >< ff gg hh ii jj kk ll mm nn");
+insert into t1 values(2,20,"nn mm ll kk jj >< ii hh gg ff ee dd cc bb aa");
+insert into t1 values(3,30,"cc dd ee ff gg >< hh ii jj kk ll mm nn oo pp");
+insert into t1 values(4,40,"ee ff gg hh ii >< jj kk ll mm nn oo pp qq rr");
+insert into t1 values(5,50,"AA BB CC DD EE >< FF GG HH II JJ KK LL MM NN");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 1, '...', '...<br>\n', 'bb', '<span class="w1">', '</span>', 'ff', '<span class="w2">', '</span>', 'dd', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 0, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_general_ci', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'ascii_bin', 1, 0, '...', '...\n', 'bb', '(w1)[', ']', 'ff', '(w2)[', ']', 'dd', '(w3)[', ']') from t1;
+drop table t1;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test
new file mode 100644
index 00000000000..eb67245e7c0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_cp932.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012-2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source include/have_cp932.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932;
+insert into t1 values(1, "‚ ‚ ‚ ‚ ‚ ","‚Q‚X“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","‚Q‚X“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "‚¤‚¤‚¤‚¤‚¤","29“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 1, '...', '...<br>\n', '‚Q‚X“ú', '<span class="w1">', '</span>', '“V‹C', '<span class="w2">', '</span>', '•xŽmŽR', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 0, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_japanese_ci', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'cp932_bin', 1, 0, '...', '...\n', '‚Q‚X“ú', '(w1)[', ']', '“V‹C', '(w2)[', ']', '•xŽmŽR', '(w3)[', ']') from t1;
+drop table t1;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test
new file mode 100644
index 00000000000..8864d6adffc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_eucjpms.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012-2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source include/have_eucjpms.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms;
+insert into t1 values(1, "¤¢¤¢¤¢¤¢¤¢","£²£¹Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","£²£¹Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "¤¦¤¦¤¦¤¦¤¦","29Æü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 1, '...', '...<br>\n', '£²£¹Æü', '<span class="w1">', '</span>', 'Å·µ¤', '<span class="w2">', '</span>', 'Éٻλ³', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 0, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_japanese_ci', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'eucjpms_bin', 1, 0, '...', '...\n', '£²£¹Æü', '(w1)[', ']', 'Å·µ¤', '(w2)[', ']', 'Éٻλ³', '(w3)[', ']') from t1;
+drop table t1;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test
new file mode 100644
index 00000000000..bf6b4df5871
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_nonexistent_charset.test
@@ -0,0 +1,28 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+--error ER_CANT_INITIALIZE_UDF
+SELECT mroonga_snippet("Invalid charset test", 10, 2, "nonexistent_charset",
+ 1, 0, "...", "...", "charset", "<", ">");
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test
new file mode 100644
index 00000000000..451737c900c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_invalid_unsupported_charset.test
@@ -0,0 +1,28 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+SET NAMES UTF8;
+
+--error ER_CANT_INITIALIZE_UDF
+SELECT mroonga_snippet("Unsuppported charset test", 10, 2, "big5",
+ 1, 0, "...", "...", "charset", "<", ">");
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test
new file mode 100644
index 00000000000..354d5f5a2d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/function_snippet_japanese.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012-2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8;
+insert into t1 values(1, "ã‚ã‚ã‚ã‚ã‚","29日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","29日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "ã†ã†ã†ã†ã†","29æ—¥ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 1, '...', '...<br>\n', '29日', '<span class="w1">', '</span>', '天気', '<span class="w2">', '</span>', '富士山', '<span class="w3">', '</span>') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 0, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_general_ci', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+select c1, c2, mroonga_snippet(c3, 10, 2, 'utf8_bin', 1, 0, '...', '...\n', '29日', '(w1)[', ']', '天気', '(w2)[', ']', '富士山', '(w3)[', ']') from t1;
+drop table t1;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test b/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test
new file mode 100644
index 00000000000..39462257f9d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/geometry_bulk_insert_null.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS shops;
+--enable_warnings
+
+CREATE TABLE shops (
+ location GEOMETRY NOT NULL
+);
+
+INSERT INTO shops VALUES (NULL), (NULL);
+
+SELECT AsText(location) FROM shops;
+
+DROP TABLE shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test b/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test
new file mode 100644
index 00000000000..c8ec649f181
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/geometry_contains.test
@@ -0,0 +1,148 @@
+# Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS shops;
+--enable_warnings
+
+CREATE TABLE shops (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name TEXT,
+ location GEOMETRY NOT NULL,
+ SPATIAL KEY location_index (location)
+);
+SHOW CREATE TABLE shops;
+
+INSERT INTO shops (name, location)
+ VALUES ('nezu-no-taiyaki',
+ GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+ VALUES ('taiyaki-kataoka',
+ GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+ VALUES ('soba-taiyaki-ku',
+ GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuruma',
+ GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+ VALUES ('hirose-ya',
+ GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+ VALUES ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+ VALUES ('omede-taiyaki',
+ GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+ VALUES ('onaga-ya',
+ GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+ VALUES ('shiro-ya',
+ GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+ VALUES ('fuji-ya',
+ GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+ VALUES ('miyoshi',
+ GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+ VALUES ('juju-ya',
+ GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+ VALUES ('tatsumi-ya',
+ GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+ VALUES ('tetsuji',
+ GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+ VALUES ('gazuma-ya',
+ GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+ VALUES ('honma-mon',
+ GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+ VALUES ('naniwa-ya',
+ GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuro-dai',
+ GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+ VALUES ('daruma',
+ GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+ VALUES ('yanagi-ya',
+ GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+ VALUES ('sharaku',
+ GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+ VALUES ('takane',
+ GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+ VALUES ('chiyoda',
+ GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+ VALUES ('da-ka-po',
+ GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+ VALUES ('matsushima-ya',
+ GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+ VALUES ('kazuya',
+ GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+ VALUES ('furuya-kogane-an',
+ GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+ VALUES ('hachi-no-ie',
+ GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+ VALUES ('azuki-chan',
+ GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuriko-an',
+ GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+ VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+ GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+ VALUES ('naze-ya',
+ GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+ VALUES ('sanoki-ya',
+ GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+ VALUES ('shigeta',
+ GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+ VALUES ('nishimi-ya',
+ GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+ VALUES ('hiiragi',
+ GeomFromText('POINT(139.711517 35.647701)'));
+
+SELECT id, name, AsText(location) AS location_text FROM shops;
+SELECT id, name, AsText(location) AS location_text FROM shops
+ WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location)
+ ORDER BY id;
+
+DROP TABLE shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test
new file mode 100644
index 00000000000..2fd1fa7471c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_datetime.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ created_at datetime,
+ title varchar(256),
+ KEY created_at_key(created_at)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES ("1000-01-01 00:00:00", "The start");
+INSERT INTO diaries VALUES ("2012-10-25 16:18:29", "Today is shiny day.");
+INSERT INTO diaries VALUES ("9999-12-31 23:59:59", "The end");
+
+SELECT *
+ FROM diaries FORCE INDEX(created_at_key)
+ WHERE created_at = "2012-10-25 16:18:29";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test
new file mode 100644
index 00000000000..51737fcf375
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_time.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS timer;
+--enable_warnings
+
+CREATE TABLE timer (
+ id int PRIMARY KEY,
+ elapsed time,
+ KEY elapsed_key(elapsed)
+);
+
+INSERT INTO timer VALUES (1, "00:00:00");
+INSERT INTO timer VALUES (2, "15:11:12");
+INSERT INTO timer VALUES (3, "838:59:59");
+INSERT INTO timer VALUES (4, "-838:59:59");
+
+SELECT *
+ FROM timer FORCE INDEX(elapsed_key)
+ WHERE elapsed = "-838:59:59";
+
+DROP TABLE timer;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test
new file mode 100644
index 00000000000..f8848ce196d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_equal_timestamp.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ created_at timestamp,
+ title varchar(256),
+ KEY created_at_key(created_at)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES ("1970-01-01 12:00:00", "The start");
+INSERT INTO diaries VALUES ("2012-10-05 16:18:29", "Today is shiny day.");
+INSERT INTO diaries VALUES ("2038-01-18 15:14:07", "The end");
+
+SELECT *
+ FROM diaries FORCE INDEX(created_at_key)
+ WHERE created_at = "2012-10-05 16:18:29";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test
new file mode 100644
index 00000000000..0215807b9db
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_btree_normal_column_insert.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, index using btree (c2));
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+flush tables;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test
new file mode 100644
index 00000000000..29a937054a2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_normal.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, a int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+select * from t1 where _id = 2;
+select * from t1 where _id = 20;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test
new file mode 100644
index 00000000000..60ca970aa45
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_primary.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, a int, primary key (_id) using hash);
+--error ER_BAD_NULL_ERROR
+insert into t1 values(null, 100);
+insert into t1 values(1,100);
+insert into t1 values(1,100);
+insert into t1 values(1,100);
+insert into t1 values(1,100);
+select * from t1;
+select * from t1 where _id = 2;
+select * from t1 where _id = 20;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test
new file mode 100644
index 00000000000..28922bc3644
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_id_unique.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, a int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+select * from t1 where _id = 2;
+select * from t1 where _id = 20;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test
new file mode 100644
index 00000000000..5138c6c9698
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_hash_normal_column_insert.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, index using hash (c2));
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+flush tables;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test
new file mode 100644
index 00000000000..f39ead56541
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_delete.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ id int primary key auto_increment not null,
+ name char(30) not null,
+ score int not null,
+ index property (name, score)
+) default charset utf8;
+show create table scores;
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+delete from scores where name = "Taro Yamada" and score = 10;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test
new file mode 100644
index 00000000000..055f2b20f22
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_smallint.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ c1 SMALLINT,
+ c2 SMALLINT,
+ KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+
+INSERT INTO t1 (c1, c2) VALUES
+ (1999, 12),
+ (2000, 11),
+ (2001, 10),
+ (2002, 9),
+ (2003, 8),
+ (2004, 7),
+ (2005, 6),
+ (2006, 5),
+ (2007, 4),
+ (2008, 3),
+ (2009, 2),
+ (2010, 1);
+
+SELECT * FROM t1 WHERE c1 > 2005;
+SELECT * FROM t1 WHERE c1 >= 2005;
+SELECT * FROM t1 WHERE c1 = 2005;
+SELECT * FROM t1 WHERE c1 <= 2005;
+SELECT * FROM t1 WHERE c1 < 2005;
+
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test
new file mode 100644
index 00000000000..9c9f3dfc283
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_bigint.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ c1 BIGINT UNSIGNED,
+ c2 BIGINT UNSIGNED,
+ KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+
+INSERT INTO t1 (c1, c2) VALUES
+ (1999, 12),
+ (2000, 11),
+ (2001, 10),
+ (2002, 9),
+ (2003, 8),
+ (2004, 7),
+ (2005, 6),
+ (2006, 5),
+ (2007, 4),
+ (2008, 3),
+ (2009, 2),
+ (2010, 1);
+
+SELECT * FROM t1 WHERE c1 > 2005;
+SELECT * FROM t1 WHERE c1 >= 2005;
+SELECT * FROM t1 WHERE c1 = 2005;
+SELECT * FROM t1 WHERE c1 <= 2005;
+SELECT * FROM t1 WHERE c1 < 2005;
+
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test
new file mode 100644
index 00000000000..c78aec6d6e0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_int.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ c1 INT UNSIGNED,
+ c2 INT UNSIGNED,
+ KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+
+INSERT INTO t1 (c1, c2) VALUES
+ (1999, 12),
+ (2000, 11),
+ (2001, 10),
+ (2002, 9),
+ (2003, 8),
+ (2004, 7),
+ (2005, 6),
+ (2006, 5),
+ (2007, 4),
+ (2008, 3),
+ (2009, 2),
+ (2010, 1);
+
+SELECT * FROM t1 WHERE c1 > 2005;
+SELECT * FROM t1 WHERE c1 >= 2005;
+SELECT * FROM t1 WHERE c1 = 2005;
+SELECT * FROM t1 WHERE c1 <= 2005;
+SELECT * FROM t1 WHERE c1 < 2005;
+
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test
new file mode 100644
index 00000000000..0b9b7dd3a3c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_unsigned_smallint.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ c1 SMALLINT UNSIGNED,
+ c2 SMALLINT UNSIGNED,
+ KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+
+INSERT INTO t1 (c1, c2) VALUES
+ (1999, 12),
+ (2000, 11),
+ (2001, 10),
+ (2002, 9),
+ (2003, 8),
+ (2004, 7),
+ (2005, 6),
+ (2006, 5),
+ (2007, 4),
+ (2008, 3),
+ (2009, 2),
+ (2010, 1);
+
+SELECT * FROM t1 WHERE c1 > 2005;
+SELECT * FROM t1 WHERE c1 >= 2005;
+SELECT * FROM t1 WHERE c1 = 2005;
+SELECT * FROM t1 WHERE c1 <= 2005;
+SELECT * FROM t1 WHERE c1 < 2005;
+
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test
new file mode 100644
index 00000000000..2307c490fda
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_nullable_varchar.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ c1 VARCHAR(10),
+ c2 VARCHAR(10),
+ KEY idx1(c1, c2)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE t1;
+
+INSERT INTO t1 (c1, c2) VALUES
+ ('1999', '12'),
+ ('2000', '11'),
+ ('2001', '10'),
+ ('2002', '09'),
+ ('2003', '08'),
+ ('2004', '07'),
+ ('2005', '06'),
+ ('2006', '05'),
+ ('2007', '04'),
+ ('2008', '03'),
+ ('2009', '02'),
+ ('2010', '01');
+
+SELECT * FROM t1 WHERE c1 > '2005';
+SELECT * FROM t1 WHERE c1 >= '2005';
+SELECT * FROM t1 WHERE c1 = '2005';
+SELECT * FROM t1 WHERE c1 <= '2005';
+SELECT * FROM t1 WHERE c1 < '2005';
+
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test
new file mode 100644
index 00000000000..75e77b597e0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_delete.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ name char(30) not null,
+ score int not null,
+ primary key (name, score)
+) default charset utf8;
+show create table scores;
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+delete from scores where name = "Taro Yamada" and score = 10;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test
new file mode 100644
index 00000000000..0b3a7362c0e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_select_int.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ name char(30) not null,
+ score int not null,
+ primary key (name, score)
+) default charset utf8;
+show create table scores;
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+select * from scores where name = "Taro Yamada";
+select * from scores where name = "Taro Yamada" and score = 29;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test
new file mode 100644
index 00000000000..26c76dd5207
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_primary_update.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ name char(30) not null,
+ score int not null,
+ primary key (name, score)
+) default charset utf8;
+show create table scores;
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test
new file mode 100644
index 00000000000..aff138eb45e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ score INT,
+ created_at DATETIME,
+ INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+
+SELECT *
+ FROM items
+ WHERE score = 2 AND created_at > "2014-09-11 00:00:00"
+ ORDER BY created_at DESC;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test
new file mode 100644
index 00000000000..0177c1a1479
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_greater_than_or_equal.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ score INT,
+ created_at DATETIME,
+ INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+
+SELECT *
+ FROM items
+ WHERE score = 2 AND created_at >= "2014-09-11 00:00:00"
+ ORDER BY created_at DESC;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test
new file mode 100644
index 00000000000..987db143da5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ score INT,
+ created_at DATETIME,
+ INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+
+SELECT *
+ FROM items
+ WHERE score = 2 AND created_at < "2014-09-12 00:00:00"
+ ORDER BY created_at DESC;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test
new file mode 100644
index 00000000000..0a4eded6710
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_range_not_used_in_order_by_less_than_or_equal.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS items;
+--enable_warnings
+
+CREATE TABLE items (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ score INT,
+ created_at DATETIME,
+ INDEX (score, created_at)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE items;
+
+INSERT INTO items (score, created_at) VALUES(1, "2014-09-10 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-11 00:00:00");
+INSERT INTO items (score, created_at) VALUES(2, "2014-09-12 00:00:00");
+INSERT INTO items (score, created_at) VALUES(3, "2014-09-13 00:00:00");
+
+SELECT *
+ FROM items
+ WHERE score = 2 AND created_at <= "2014-09-12 00:00:00"
+ ORDER BY created_at DESC;
+
+DROP TABLE items;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test
new file mode 100644
index 00000000000..90a1fdf6c49
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_recreate.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table listing (
+ id int primary key auto_increment not null,
+ last_name char(30) not null,
+ first_name char(30) not null,
+ index name (last_name, first_name)
+) default charset utf8;
+show create table listing;
+
+insert into listing (last_name, first_name) values("Taro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Suzuki");
+insert into listing (last_name, first_name) values("Jiro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Tanaka");
+
+select * from listing
+ where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+
+drop index name on listing;
+select * from listing
+ where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+
+create index new_name_index on listing (last_name, first_name);
+select * from listing
+ where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+
+drop table listing;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test
new file mode 100644
index 00000000000..b5e592938a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_replace.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS listing;
+--enable_warnings
+
+CREATE TABLE scores (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ name CHAR(30) NOT NULL,
+ score INT NOT NULL,
+ INDEX property (NAME, SCORE)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+
+SELECT * FROM scores;
+REPLACE scores (id, name, score) VALUES (3, "Taro Yamada", 28);
+SELECT * FROM scores;
+SELECT * FROM scores WHERE name = "Taro Yamada" AND (score >= -12 AND score < 29);
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test
new file mode 100644
index 00000000000..4f9c60d14b2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_double.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS temperatures;
+--enable_warnings
+
+CREATE TABLE temperatures (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title VARCHAR(20),
+ temperature DOUBLE,
+ KEY temperature_index(temperature),
+ KEY multi_index(temperature, title)
+);
+
+INSERT INTO temperatures VALUES (NULL, "Hot!", 28.2);
+INSERT INTO temperatures VALUES (NULL, "Snow!", -2.8);
+INSERT INTO temperatures VALUES (NULL, "Rainy!", 12.7);
+
+SELECT temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+SELECT temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+
+DROP TABLE temperatures;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test
new file mode 100644
index 00000000000..941fddbc5a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_float.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS temperatures;
+--enable_warnings
+
+CREATE TABLE temperatures (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title VARCHAR(20),
+ temperature FLOAT,
+ KEY temperature_index(temperature),
+ KEY multi_index(temperature, title)
+);
+
+INSERT INTO temperatures VALUES (NULL, "Hot!", 28.2);
+INSERT INTO temperatures VALUES (NULL, "Snow!", -2.8);
+INSERT INTO temperatures VALUES (NULL, "Rainy!", 12.7);
+
+SELECT temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+SELECT temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN 10 AND 30;
+SELECT title, temperature FROM temperatures WHERE temperature BETWEEN -10 AND 20;
+
+DROP TABLE temperatures;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test
new file mode 100644
index 00000000000..478be9a90db
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_int.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS listing;
+--enable_warnings
+
+CREATE TABLE scores (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ name CHAR(30) NOT NULL,
+ score INT NOT NULL,
+ INDEX property (score, name)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 27);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+
+SELECT * FROM scores;
+
+SELECT * FROM scores WHERE score = 29;
+
+SELECT * FROM scores WHERE score = 29 AND name = "Taro Yamada";
+
+SELECT * FROM scores WHERE (score >= -12 AND score < 29) AND name = "Taro Yamada";
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test
new file mode 100644
index 00000000000..6e0278f3910
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_string.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table listing (
+ id int primary key auto_increment not null,
+ last_name char(30) not null,
+ first_name char(30) not null,
+ index name (last_name, first_name)
+) default charset utf8;
+show create table listing;
+insert into listing (last_name, first_name) values("Taro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Suzuki");
+insert into listing (last_name, first_name) values("Jiro", "Yamada");
+insert into listing (last_name, first_name) values("Taro", "Tanaka");
+select * from listing;
+select * from listing where last_name = "Taro";
+select * from listing where last_name = "Taro" and first_name = "Suzuki";
+select * from listing where last_name = "Taro" and (first_name >= "S" and first_name <= "Y");
+drop table listing;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test
new file mode 100644
index 00000000000..9822ec18f4a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_select_varchar.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists scores;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ given_name varchar(30) not null,
+ family_name varchar(30) not null,
+ score int not null,
+ primary key property (given_name, family_name, score)
+) default charset utf8;
+show create table scores;
+
+insert into scores values("Taro", "Yamada", 29);
+insert into scores values("Taro", "Yamada", -12);
+insert into scores values("Jiro", "Yamada", 27);
+insert into scores values("Taro", "Yamada", 10);
+
+select * from scores;
+select * from scores where given_name = "Taro" and family_name = "Yamada";
+select * from scores where given_name = "Taro" and family_name = "Yamada" and score = 29;
+select * from scores where given_name = "Taro" and family_name = "Yamada" and (score >= -12 and score < 29);
+
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test
new file mode 100644
index 00000000000..b206333d28d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_32bit_equal.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ WHERE start = "1000-01-01" AND end = "9999-12-31";
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test
new file mode 100644
index 00000000000..c425b882482
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_64bit_equal.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ WHERE start = "1000-01-01" AND end = "9999-12-31";
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test
new file mode 100644
index 00000000000..ea095f1c085
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_index_read.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (2, "1000-01-01", "9999-12-31");
+INSERT INTO ranges VALUES (3, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (4, "9999-12-31", "1000-01-01");
+
+SELECT start, end
+ FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test
new file mode 100644
index 00000000000..b877ed2f01a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_asc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test
new file mode 100644
index 00000000000..c3185bb0fdc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_32bit_desc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test
new file mode 100644
index 00000000000..7fa17dbc2b3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_asc.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test
new file mode 100644
index 00000000000..ef3d9eee548
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_order_64bit_desc.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25", "9999-12-31");
+INSERT INTO ranges VALUES (2, "1000-01-01", "2012-10-05");
+INSERT INTO ranges VALUES (3, "9999-12-31", "1000-01-01");
+INSERT INTO ranges VALUES (4, "1000-01-01", "9999-12-31");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test
new file mode 100644
index 00000000000..58ec29f07e9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_date_reinsert.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start DATE,
+ end DATE,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2010-01-01", "2012-10-05");
+SELECT * FROM ranges;
+
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01", "2012-10-05");
+SELECT * FROM ranges;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test
new file mode 100644
index 00000000000..efa0c0288bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_index_read.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start datetime,
+ end datetime,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (4, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+
+SELECT start, end
+ FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test
new file mode 100644
index 00000000000..55d910cc820
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_asc.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start datetime,
+ end datetime,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test
new file mode 100644
index 00000000000..5868ade2228
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_order_desc.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_freebsd.inc
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start datetime,
+ end datetime,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "9999-12-31 23:59:59");
+INSERT INTO ranges VALUES (2, "1000-01-01 00:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "9999-12-31 23:59:59", "1000-01-01 00:00:00");
+INSERT INTO ranges VALUES (4, "1000-01-01 00:00:00", "9999-12-31 23:59:59");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test
new file mode 100644
index 00000000000..ab9ed122862
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_datetime_reinsert.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start datetime,
+ end datetime,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test
new file mode 100644
index 00000000000..85645967fbd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_decimal.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 decimal(65,30), c3 decimal(65,30), unique key uk1(c2,c3));
+insert into t1 values(1,123.456,0.000000000000000000000000000001);
+insert into t1 values(2,-123.456,123.456);
+insert into t1 values(3,98765432109876543210987654321098765.432109876543210987654321098765,-123.456);
+insert into t1 values(4,-98765432109876543210987654321098765.432109876543210987654321098765,98765432109876543210987654321098765.432109876543210987654321098765);
+insert into t1 values(5,0.000000000000000000000000000001,-98765432109876543210987654321098765.432109876543210987654321098765);
+select c1, c2, c3 from t1 force index(uk1) where c2 = -98765432109876543210987654321098765.432109876543210987654321098765 and c3 = 98765432109876543210987654321098765.432109876543210987654321098765;
+select c1, c2, c3 from t1 force index(uk1) order by c2, c3;
+select c1, c2, c3 from t1 force index(uk1) order by c2 desc, c3 desc;
+select c2, c3 from t1 force index(uk1) order by c2, c3;
+--error ER_DUP_ENTRY
+insert into t1 values(6,123.456,0.000000000000000000000000000001);
+delete from t1 where c1 = 1;
+insert into t1 values(1,123.456,0.000000000000000000000000000001);
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test
new file mode 100644
index 00000000000..f9b2d2b6f5c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_index_read.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start time,
+ end time,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (2, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (3, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (4, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+
+SELECT start, end
+ FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test
new file mode 100644
index 00000000000..94e2fa39946
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_asc.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start time,
+ end time,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (2, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (3, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (4, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test
new file mode 100644
index 00000000000..d9d31cf3386
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_order_desc.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start time,
+ end time,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "15:11:12", "838:59:59");
+INSERT INTO ranges VALUES (2, "00:00:00", "15:11:11");
+INSERT INTO ranges VALUES (3, "838:59:59", "00:00:00");
+INSERT INTO ranges VALUES (4, "00:00:00", "838:59:59");
+INSERT INTO ranges VALUES (5, "-838:59:59", "838:59:59");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test
new file mode 100644
index 00000000000..e0a18ae792b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_time_reinsert.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start time,
+ end time,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "13:21:48", "15:11:12");
+SELECT * FROM ranges;
+
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "13:21:48", "15:11:12");
+SELECT * FROM ranges;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test
new file mode 100644
index 00000000000..c660f6aef6e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_index_read.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start timestamp,
+ end timestamp,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (3, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (4, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+
+SELECT start, end
+ FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test
new file mode 100644
index 00000000000..5ec630b56df
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_asc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start timestamp,
+ end timestamp,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+INSERT INTO ranges VALUES (4, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test
new file mode 100644
index 00000000000..9ca7440da88
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_order_desc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start timestamp,
+ end timestamp,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2012-10-25 16:18:29", "2038-01-18 15:14:07");
+INSERT INTO ranges VALUES (2, "1970-01-01 12:00:00", "2012-10-05 16:18:29");
+INSERT INTO ranges VALUES (3, "2038-01-18 15:14:07", "1970-01-01 12:00:00");
+INSERT INTO ranges VALUES (4, "1970-01-01 12:00:00", "2038-01-18 15:14:07");
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test
new file mode 100644
index 00000000000..559cf958804
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_timestamp_reinsert.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id int PRIMARY KEY,
+ start timestamp,
+ end timestamp,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, "2010-01-01 00:00:00", "2012-10-05 23:59:59");
+SELECT * FROM ranges;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test
new file mode 100644
index 00000000000..900de61feac
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_varchar.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 varchar(10), c3 varchar(10), unique key uk1(c2,c3)) default charset=utf8 collate utf8_bin;
+insert into t1 values(1,'abcde','abc ');
+insert into t1 values(2,'abc\0','abcde');
+insert into t1 values(3,'abc','abc\0');
+insert into t1 values(4,'abc ','abc');
+insert into t1 values(5,'abc ','abc ');
+select c1, c2, c3 from t1 force index(uk1) where c2 = 'abc ' and c3 = 'abc';
+select c1, c2, c3 from t1 force index(uk1) order by c2, c3;
+select c1, c2, c3 from t1 force index(uk1) order by c2 desc, c3 desc;
+select c2, c3 from t1 force index(uk1) order by c2, c3;
+--error ER_DUP_ENTRY
+insert into t1 values(6,'abcde','abc ');
+delete from t1 where c1 = 1;
+insert into t1 values(1,'abcde','abc ');
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test
new file mode 100644
index 00000000000..3daf3fa4153
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_32bit_equal.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 1901, 2012);
+INSERT INTO ranges VALUES (2, 1901, 2155);
+INSERT INTO ranges VALUES (3, 2012, 2155);
+INSERT INTO ranges VALUES (4, 2155, 1901);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ WHERE start = 1901 AND end = 2155;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test
new file mode 100644
index 00000000000..57ab0534147
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_64bit_equal.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 1901, 2012);
+INSERT INTO ranges VALUES (2, 1901, 2155);
+INSERT INTO ranges VALUES (3, 2012, 2155);
+INSERT INTO ranges VALUES (4, 2155, 1901);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ WHERE start = 1901 AND end = 2155;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test
new file mode 100644
index 00000000000..efa92728a63
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_index_read.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 1901, 2012);
+INSERT INTO ranges VALUES (2, 1901, 2155);
+INSERT INTO ranges VALUES (3, 2012, 2155);
+INSERT INTO ranges VALUES (4, 2155, 1901);
+
+SELECT start, end
+ FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test
new file mode 100644
index 00000000000..774c06772a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_asc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test
new file mode 100644
index 00000000000..bd0d20fe973
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_32bit_desc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_32bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test
new file mode 100644
index 00000000000..225188e05c6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_asc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start, end;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test
new file mode 100644
index 00000000000..dcf905e9286
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_order_64bit_desc.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_64bit.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 2012, 2155);
+INSERT INTO ranges VALUES (2, 1901, 2012);
+INSERT INTO ranges VALUES (3, 2155, 1901);
+INSERT INTO ranges VALUES (4, 1901, 2155);
+
+SELECT * FROM ranges FORCE INDEX(range_key)
+ ORDER BY start DESC, end DESC;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test
new file mode 100644
index 00000000000..250ef00b5b6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_unique_year_reinsert.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ranges;
+--enable_warnings
+
+CREATE TABLE ranges (
+ id INT PRIMARY KEY,
+ start YEAR,
+ end YEAR,
+ UNIQUE KEY range_key(start, end)
+);
+
+INSERT INTO ranges VALUES (1, 2010, 2012);
+SELECT * FROM ranges;
+
+DELETE FROM ranges WHERE id = 1;
+INSERT INTO ranges VALUES (1, 2010, 2012);
+SELECT * FROM ranges;
+
+DROP TABLE ranges;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test
new file mode 100644
index 00000000000..e1efd0c992c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_int.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS scores;
+--enable_warnings
+
+CREATE TABLE scores (
+ id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
+ name CHAR(30) NOT NULL,
+ score INT NOT NULL,
+ KEY property (score, name)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE scores;
+
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", -12);
+INSERT INTO scores (name, score) VALUES("Jiro Yamada", 29);
+INSERT INTO scores (name, score) VALUES("Taro Yamada", 10);
+
+SELECT * FROM scores WHERE score = 29;
+
+UPDATE scores SET name = "Saburo YAMADA" WHERE id = 3;
+SELECT * FROM scores WHERE score = 29;
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test
new file mode 100644
index 00000000000..bcbbe82914b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_multiple_column_update_string.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists listing;
+--enable_warnings
+
+set names utf8;
+create table scores (
+ id int primary key auto_increment not null,
+ name char(30) not null,
+ score int not null,
+ index property (name, score)
+) default charset utf8;
+show create table scores;
+insert into scores (name, score) values("Taro Yamada", 29);
+insert into scores (name, score) values("Taro Yamada", -12);
+insert into scores (name, score) values("Jiro Yamada", 27);
+insert into scores (name, score) values("Taro Yamada", 10);
+select * from scores;
+update scores set name = "Taro Yamada" where name = "Jiro Yamada" and score = 27;
+select * from scores where name = "Taro Yamada" and (score >= -12 and score < 29);
+drop table scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test
new file mode 100644
index 00000000000..ba52b4b4138
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_exact_length.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id char(10) CHARACTER SET latin1 PRIMARY KEY
+);
+
+INSERT INTO ids VALUES('abcdefghij');
+INSERT INTO ids VALUES('klmnopqrst');
+INSERT INTO ids VALUES('uvwxyz0123');
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = 'abcdefghij';
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test
new file mode 100644
index 00000000000..bded856812c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_null_character.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id char(7) CHARACTER SET latin1 COLLATE latin1_bin PRIMARY KEY
+);
+
+INSERT INTO ids VALUES("\0abcdef");
+INSERT INTO ids VALUES("ab\0cdef");
+INSERT INTO ids VALUES("abcd\0ef");
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = "ab\0cdef";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test
new file mode 100644
index 00000000000..ae8c40b82c5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_char_short.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id char(6) CHARACTER SET latin1 PRIMARY KEY
+);
+
+INSERT INTO ids VALUES("abcdef");
+INSERT INTO ids VALUES( "cdef");
+INSERT INTO ids VALUES( "ef");
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = "cdef";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test
new file mode 100644
index 00000000000..e57a8491d99
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_date.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ day DATE PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (day, title) VALUES ("2012-01-29", "clear day");
+INSERT INTO diaries (day, title) VALUES ("2012-01-30", "rainy day");
+INSERT INTO diaries (day, title) VALUES ("2012-01-31", "cloudy day");
+--error ER_DUP_ENTRY
+INSERT INTO diaries (day, title) VALUES ("2012-01-31", "duplicated day");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE day BETWEEN "2012-01-29" AND "2012-01-30";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test
new file mode 100644
index 00000000000..7f140bf24c6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_with_fractional_seconds.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fractional_seconds.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ day DATETIME(6) PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-29 21:51:01.111111", "clear day");
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-30 01:23:45.333", "rainy day");
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-31 08:32:10.5555", "cloudy day");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE day BETWEEN "2012-01-29 00:00:00.123456" AND
+ "2012-01-31 00:00:00.999999";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test
new file mode 100644
index 00000000000..1986e4db3db
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_datetime_without_fractional_seconds.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ day DATETIME PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-29 21:51:01", "clear day");
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-30 01:23:45", "rainy day");
+INSERT INTO diaries (day, title)
+ VALUES ("2012-01-31 08:32:10", "cloudy day");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE day BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test
new file mode 100644
index 00000000000..d296285b391
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_with_fractional_seconds.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS releases;
+--enable_warnings
+
+CREATE TABLE releases (
+ version DECIMAL(6, 3) PRIMARY KEY,
+ message TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE releases;
+
+INSERT INTO releases (version, message) VALUES (10.000, "10th release!");
+INSERT INTO releases (version, message) VALUES (10.001, "minor fix.");
+INSERT INTO releases (version, message) VALUES (999.999, "the last release!");
+
+SELECT * FROM releases;
+
+SELECT * FROM releases WHERE version BETWEEN "9.000" AND "10.001";
+
+DROP TABLE releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test
new file mode 100644
index 00000000000..956b9800650
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_decimal_without_fractional_seconds.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS releases;
+--enable_warnings
+
+CREATE TABLE releases (
+ version DECIMAL PRIMARY KEY,
+ message TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE releases;
+
+INSERT INTO releases (version, message) VALUES (1, "the first release!!!");
+INSERT INTO releases (version, message) VALUES (10, "10th release!");
+INSERT INTO releases (version, message) VALUES (999, "the last release!");
+
+SELECT * FROM releases;
+
+SELECT * FROM releases WHERE version BETWEEN "1" AND "10";
+
+DROP TABLE releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test
new file mode 100644
index 00000000000..90e668e1e38
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_with_fractional_seconds.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_fractional_seconds.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS running_records;
+--enable_warnings
+
+CREATE TABLE running_records (
+ time TIME(6) PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+
+INSERT INTO running_records (time, title)
+ VALUES ("01:00:00.000001", "normal condition");
+INSERT INTO running_records (time, title)
+ VALUES ("12:23:34.123456", "bad condition");
+INSERT INTO running_records (time, title)
+ VALUES ("-838:59:59.000000", "record failure");
+
+SELECT * FROM running_records;
+
+SELECT * FROM running_records
+ WHERE time BETWEEN "00:59:59.999999" AND "12:23:34.123456";
+
+DROP TABLE running_records;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test
new file mode 100644
index 00000000000..f000f7390f6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_time_without_fractional_seconds.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS running_records;
+--enable_warnings
+
+CREATE TABLE running_records (
+ time TIME PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE running_records;
+
+INSERT INTO running_records (time, title)
+ VALUES ("01:00:00", "normal condition");
+INSERT INTO running_records (time, title)
+ VALUES ("12:23:34", "bad condition");
+INSERT INTO running_records (time, title)
+ VALUES ("-838:59:59", "record failure");
+
+SELECT * FROM running_records;
+
+SELECT * FROM running_records
+ WHERE time BETWEEN "00:59:59" AND "12:23:34";
+
+DROP TABLE running_records;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test
new file mode 100644
index 00000000000..aba635ad637
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_with_fractional_seconds.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_mariadb_55.inc
+--source ../../include/mroonga/have_fractional_seconds.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ time TIMESTAMP(6) PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (time, title)
+ VALUES ("2012-01-29 21:51:01.111111", "clear day");
+INSERT INTO diaries (time, title)
+ VALUES ("2012-01-30 01:23:45.333", "rainy day");
+INSERT INTO diaries (time, title)
+ VALUES ("2012-01-31 08:32:10.5555", "cloudy day");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE time BETWEEN "2012-01-29 00:00:00.123456" AND
+ "2012-01-31 00:00:00.999999";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test
new file mode 100644
index 00000000000..ae61434c795
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_timestamp_without_fractional_seconds.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ time TIMESTAMP PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (time, title) VALUES ("2012-01-29 21:51:01", "clear day");
+INSERT INTO diaries (time, title) VALUES ("2012-01-30 01:23:45", "rainy day");
+INSERT INTO diaries (time, title) VALUES ("2012-01-31 08:32:10", "cloudy day");
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries
+ WHERE time BETWEEN "2012-01-29 00:00:00" AND "2012-01-31 00:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test
new file mode 100644
index 00000000000..20ae939be8b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_varchar_null_character.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id varchar(7) CHARACTER SET latin1 COLLATE latin1_bin PRIMARY KEY
+);
+
+INSERT INTO ids VALUES("\0abcdef");
+INSERT INTO ids VALUES("ab\0cdef");
+INSERT INTO ids VALUES("abcd\0ef");
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) ORDER BY id;
+
+SELECT * FROM ids FORCE INDEX(PRIMARY) WHERE id = "ab\0cdef";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test
new file mode 100644
index 00000000000..25f02d38e94
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_primary_year.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS aniversary_memos;
+--enable_warnings
+
+CREATE TABLE aniversary_memos (
+ party_year YEAR PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE aniversary_memos;
+
+INSERT INTO aniversary_memos (party_year, title)
+ VALUES ("11", "We need a big cake!");
+INSERT INTO aniversary_memos (party_year, title)
+ VALUES ("2012", "Invitations are sent.");
+INSERT INTO aniversary_memos (party_year, title)
+ VALUES ("13", "Wow! Today is the anniversary party day!");
+
+SELECT * FROM aniversary_memos;
+
+SELECT * FROM aniversary_memos
+ WHERE party_year BETWEEN "12" AND "2013";
+
+DROP TABLE aniversary_memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_asc.test
new file mode 100644
index 00000000000..a622dfbf70d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_asc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id > 1 ORDER BY ids.id ASC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_desc.test
new file mode 100644
index 00000000000..63dc820ccfd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_desc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id > 3 ORDER BY ids.id DESC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_asc.test
new file mode 100644
index 00000000000..a51e6c5da47
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_asc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id >= 2 ORDER BY ids.id ASC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_desc.test
new file mode 100644
index 00000000000..ea5c150bf0f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_greater_than_or_equal_desc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id >= 3 ORDER BY ids.id DESC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_asc.test
new file mode 100644
index 00000000000..12761c0f4d8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_asc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id < 4 ORDER BY ids.id ASC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_desc.test
new file mode 100644
index 00000000000..a4f4a781ead
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_desc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id < 4 ORDER BY ids.id DESC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_asc.test
new file mode 100644
index 00000000000..2fba0d13f5f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_asc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id <= 4 ORDER BY ids.id ASC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_desc.test
new file mode 100644
index 00000000000..e4661fc7047
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_range_less_than_or_equal_desc.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+SET NAMES UTF8;
+
+CREATE TABLE ids (
+ id INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT
+) ENGINE=Mroonga DEFAULT CHARSET=utf8;
+
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+INSERT INTO ids VALUES();
+
+SELECT * FROM ids WHERE ids.id <= 4 ORDER BY ids.id DESC LIMIT 3;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test
new file mode 100644
index 00000000000..53111b576d7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id BIGINT,
+ value BIGINT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test
new file mode 100644
index 00000000000..5e93137afeb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_bigint_unsigned.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id BIGINT UNSIGNED,
+ value BIGINT UNSIGNED,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test
new file mode 100644
index 00000000000..0ca7d948318
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_double.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id DOUBLE,
+ value DOUBLE,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1.1, 16.16);
+INSERT INTO ids VALUES ( -2.2, 8.8);
+INSERT INTO ids VALUES ( -4.4, 4.4);
+INSERT INTO ids VALUES ( -8.8, 2.2);
+INSERT INTO ids VALUES (-16.6, 1.1);
+INSERT INTO ids VALUES ( 16.6, -1.1);
+INSERT INTO ids VALUES ( 8.8, -2.2);
+INSERT INTO ids VALUES ( 4.4, -4.4);
+INSERT INTO ids VALUES ( 2.2, -8.8);
+INSERT INTO ids VALUES ( 1.1, -16.16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4.5 AND 8.9;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test
new file mode 100644
index 00000000000..ade89f6bc56
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_float.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id FLOAT,
+ value FLOAT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1.1, 16.16);
+INSERT INTO ids VALUES ( -2.2, 8.8);
+INSERT INTO ids VALUES ( -4.4, 4.4);
+INSERT INTO ids VALUES ( -8.8, 2.2);
+INSERT INTO ids VALUES (-16.6, 1.1);
+INSERT INTO ids VALUES ( 16.6, -1.1);
+INSERT INTO ids VALUES ( 8.8, -2.2);
+INSERT INTO ids VALUES ( 4.4, -4.4);
+INSERT INTO ids VALUES ( 2.2, -8.8);
+INSERT INTO ids VALUES ( 1.1, -16.16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4.5 AND 8.9;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test
new file mode 100644
index 00000000000..9ed4979fd8f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT,
+ value INT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test
new file mode 100644
index 00000000000..f68c2f6906c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_int_unsigned.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT UNSIGNED,
+ value INT UNSIGNED,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test
new file mode 100644
index 00000000000..254345b6ec6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id MEDIUMINT,
+ value MEDIUMINT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test
new file mode 100644
index 00000000000..8975c5120cb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_mediumint_unsigned.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id MEDIUMINT UNSIGNED,
+ value MEDIUMINT UNSIGNED,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test
new file mode 100644
index 00000000000..4ed8c4b366e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id SMALLINT,
+ value SMALLINT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test
new file mode 100644
index 00000000000..ef5da3e79c9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_smallint_unsigned.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id SMALLINT UNSIGNED,
+ value SMALLINT UNSIGNED,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test
new file mode 100644
index 00000000000..5c738fa567b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id TINYINT,
+ value TINYINT,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( -1, 16);
+INSERT INTO ids VALUES ( -2, 8);
+INSERT INTO ids VALUES ( -4, 4);
+INSERT INTO ids VALUES ( -8, 2);
+INSERT INTO ids VALUES (-16, 1);
+INSERT INTO ids VALUES ( 16, -1);
+INSERT INTO ids VALUES ( 8, -2);
+INSERT INTO ids VALUES ( 4, -4);
+INSERT INTO ids VALUES ( 2, -8);
+INSERT INTO ids VALUES ( 1, -16);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN -4 AND 8;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test
new file mode 100644
index 00000000000..7f17f0031db
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_tinyint_unsigned.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id TINYINT UNSIGNED,
+ value TINYINT UNSIGNED,
+ KEY (id, value)
+);
+
+INSERT INTO ids VALUES ( 1, 1);
+INSERT INTO ids VALUES ( 2, 2);
+INSERT INTO ids VALUES ( 4, 3);
+INSERT INTO ids VALUES ( 8, 4);
+INSERT INTO ids VALUES (16, 5);
+INSERT INTO ids VALUES (32, 6);
+INSERT INTO ids VALUES (64, 7);
+INSERT INTO ids VALUES (128, 8);
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 4 AND 32;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test
new file mode 100644
index 00000000000..ccd53a95237
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id VARCHAR(5),
+ value VARCHAR(10),
+ KEY (id, value)
+) DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+INSERT INTO ids VALUES ("abc", "Abc");
+INSERT INTO ids VALUES ("acd", "aBc");
+INSERT INTO ids VALUES ("ade", "abC");
+INSERT INTO ids VALUES ("aef", "abc");
+INSERT INTO ids VALUES ("ABC", "aBC");
+INSERT INTO ids VALUES ("ACD", "AbC");
+INSERT INTO ids VALUES ("ADE", "ABc");
+INSERT INTO ids VALUES ("AEF", "ABC");
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN "ab" AND "ad";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test
new file mode 100644
index 00000000000..1d799e76696
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_multiple_varchar_collation.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id VARCHAR(5),
+ value VARCHAR(10),
+ KEY (id, value)
+) DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;
+
+INSERT INTO ids VALUES ("abc", "Abc");
+INSERT INTO ids VALUES ("acd", "aBc");
+INSERT INTO ids VALUES ("ade", "abC");
+INSERT INTO ids VALUES ("aef", "abc");
+INSERT INTO ids VALUES ("ABC", "aBC");
+INSERT INTO ids VALUES ("ACD", "AbC");
+INSERT INTO ids VALUES ("ADE", "ABc");
+INSERT INTO ids VALUES ("AEF", "ABC");
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN "ab" AND "ad";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test
new file mode 100644
index 00000000000..a7ff9f3a600
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_int.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT,
+ KEY (id)
+);
+
+INSERT INTO ids VALUES (1);
+INSERT INTO ids SELECT id + 1 FROM ids;
+INSERT INTO ids SELECT id + 2 FROM ids;
+INSERT INTO ids SELECT id + 4 FROM ids;
+INSERT INTO ids SELECT id + 8 FROM ids;
+INSERT INTO ids SELECT id + 16 FROM ids;
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 10 AND 16;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test
new file mode 100644
index 00000000000..4d094df41cd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_normal_varchar.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id VARCHAR(10),
+ KEY (id)
+);
+
+INSERT INTO ids VALUES ("1");
+INSERT INTO ids SELECT id + "1" FROM ids;
+INSERT INTO ids SELECT id + "2" FROM ids;
+INSERT INTO ids SELECT id + "4" FROM ids;
+INSERT INTO ids SELECT id + "8" FROM ids;
+INSERT INTO ids SELECT id + "16" FROM ids;
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN "10" AND "16";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test
new file mode 100644
index 00000000000..68f132367f2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_int.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT,
+ PRIMARY KEY (id)
+);
+
+INSERT INTO ids VALUES (1);
+INSERT INTO ids SELECT id + 1 FROM ids;
+INSERT INTO ids SELECT id + 2 FROM ids;
+INSERT INTO ids SELECT id + 4 FROM ids;
+INSERT INTO ids SELECT id + 8 FROM ids;
+INSERT INTO ids SELECT id + 16 FROM ids;
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN 10 AND 16;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test
new file mode 100644
index 00000000000..aa9ba644062
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_read_primary_varchar.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id VARCHAR(10),
+ PRIMARY KEY (id)
+);
+
+INSERT INTO ids VALUES ("1");
+INSERT INTO ids SELECT id + "1" FROM ids;
+INSERT INTO ids SELECT id + "2" FROM ids;
+INSERT INTO ids SELECT id + "4" FROM ids;
+INSERT INTO ids SELECT id + "8" FROM ids;
+INSERT INTO ids SELECT id + "16" FROM ids;
+
+SELECT * FROM ids;
+SELECT * FROM ids WHERE id BETWEEN "10" AND "16";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test
new file mode 100644
index 00000000000..2c1ec45c045
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_delete_by_primary_key.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+CREATE TABLE users (
+ id int PRIMARY KEY,
+ name varchar(100) NOT NULL,
+ UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO users VALUES (1, "Alice");
+DELETE FROM users WHERE id = 1;
+INSERT INTO users VALUES (1, "Alice");
+
+SELECT * FROM users;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test
new file mode 100644
index 00000000000..6c47c877771
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_insert_after_error.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+CREATE TABLE users (
+ id int PRIMARY KEY,
+ name varchar(100) NOT NULL,
+ UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO users VALUES (1, "Alice");
+-- error ER_DUP_ENTRY
+INSERT INTO users VALUES (1, "Bob");
+INSERT INTO users VALUES (2, "Bob");
+
+SELECT * FROM users;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test
new file mode 100644
index 00000000000..21446b302f2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_unique_varchar.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+CREATE TABLE users (
+ name varchar(100) NOT NULL,
+ UNIQUE KEY name (name)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO users VALUES ("Alice");
+INSERT INTO users VALUES ("Bob");
+SELECT * FROM users;
+
+SELECT * FROM users WHERE name = "aLiCe";
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test
new file mode 100644
index 00000000000..bbf368551af
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_update_multiple_column.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS scores;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE scores (
+ deleted BOOLEAN,
+ value INT,
+ INDEX (deleted, value)
+);
+
+INSERT INTO scores VALUES (FALSE, 1);
+INSERT INTO scores VALUES (FALSE, 1);
+INSERT INTO scores VALUES (FALSE, 2);
+
+SELECT count(*) FROM scores WHERE deleted = FALSE;
+UPDATE scores SET deleted = TRUE WHERE value = 1;
+SELECT count(*) FROM scores WHERE deleted = FALSE;
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test
new file mode 100644
index 00000000000..a0dc2f8a952
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/index_update_single_column.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS scores;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE scores (
+ value INT,
+ INDEX (value)
+);
+
+INSERT INTO scores VALUES (21);
+INSERT INTO scores VALUES (21);
+INSERT INTO scores VALUES (22);
+
+SELECT count(*) FROM scores WHERE value >= 20;
+UPDATE scores SET value = 11 WHERE value = 21;
+SELECT count(*) FROM scores WHERE value >= 20;
+
+DROP TABLE scores;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test
new file mode 100644
index 00000000000..d22c6560c2c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_plugins.test
@@ -0,0 +1,22 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+select PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_TYPE
+ from information_schema.plugins where plugin_name = "Mroonga";
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test
new file mode 100644
index 00000000000..2956e072302
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_none.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT PRIMARY KEY
+);
+
+SELECT AUTO_INCREMENT
+ FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_NAME = "ids";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test
new file mode 100644
index 00000000000..79e12fe67a9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_auto_increment_use.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT AUTO_INCREMENT PRIMARY KEY
+);
+
+SELECT AUTO_INCREMENT
+ FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_NAME = "ids";
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test
new file mode 100644
index 00000000000..82dd4fdf1c6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/information_schema_tables_data_length.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT COUNT(*)
+ FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_NAME = "diaries" AND DATA_LENGTH > 0;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..3fa85344dfa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/insert_TODO_SPLIT_ME.test
@@ -0,0 +1,105 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# data types
+create table t1 (c1 tinyint);
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 smallint);
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 mediumint);
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 int);
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 bigint);
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 float);
+insert into t1 values(0.5);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 double);
+insert into t1 values(0.5);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 date);
+insert into t1 values("2010/03/26");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 time);
+insert into t1 values("11:22:33");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 year);
+insert into t1 values("2010");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 datetime);
+insert into t1 values("2010/03/26 11:22:33");
+select * from t1;
+drop table t1;
+
+
+# for virtual columns
+create table t1 (c1 int, _id int);
+set sql_mode="";
+# warning WARN_DATA_TRUNCATED
+insert into t1 (c1,_id) values (1,1);
+set sql_mode="strict_all_tables";
+# We can't use WARN_DATA_TRUNCATED here because "WXXX" isn't supported
+# MySQL 5.5, 5.6 and MariaDB 5.6. MariaDB 10.0 only supports it.
+# We share this test with all MySQL servers. So we use number here.
+--error 1265
+insert into t1 (c1,_id) values (4,1);
+select * from t1;
+drop table t1;
+
+
+# duplicated key error
+create table t1 (c1 int primary key, c2 int);
+insert into t1 values(1,100);
+select * from t1;
+--error ER_DUP_ENTRY
+insert into t1 values(1,200);
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test b/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test
new file mode 100644
index 00000000000..48a85f5d72b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/insert_delayed.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT PRIMARY KEY
+) DEFAULT CHARSET=UTF8;
+
+--error ER_DELAYED_NOT_SUPPORTED
+INSERT DELAYED INTO ids (id) VALUES (1);
+
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test
new file mode 100644
index 00000000000..c3530dc34c0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_no_primary_key_and_unique_key_twice.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS numbers;
+--enable_warnings
+
+CREATE TABLE numbers (
+ id INT,
+ count INT,
+ UNIQUE (id)
+);
+
+INSERT INTO numbers (id, count) VALUES (1, 1) ON DUPLICATE KEY UPDATE count = 2;
+INSERT INTO numbers (id, count) VALUES (1, 3) ON DUPLICATE KEY UPDATE count = 4;
+
+SELECT * FROM numbers;
+
+INSERT INTO numbers (id, count) VALUES (2, 1) ON DUPLICATE KEY UPDATE count = 2;
+INSERT INTO numbers (id, count) VALUES (2, 3) ON DUPLICATE KEY UPDATE count = 4;
+
+SELECT * FROM numbers;
+
+DROP TABLE numbers;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test
new file mode 100644
index 00000000000..794605d742b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_primary_key.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ day DATE PRIMARY KEY,
+ title TEXT
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-14", "clear day")
+ ON DUPLICATE KEY UPDATE title = "clear day (duplicated)";
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-14", "rainy day")
+ ON DUPLICATE KEY UPDATE title = "rainy day (duplicated)";
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-15", "cloudy day")
+ ON DUPLICATE KEY UPDATE title = "cloudy day (duplicated)";
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test
new file mode 100644
index 00000000000..782b7bee9ca
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/insert_on_duplicate_key_update_unique_key.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ day DATE,
+ title TEXT,
+ UNIQUE KEY day (day)
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-14", "clear day")
+ ON DUPLICATE KEY UPDATE title = "clear day (duplicated)";
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-14", "rainy day")
+ ON DUPLICATE KEY UPDATE title = "rainy day (duplicated)";
+INSERT INTO diaries (day, title)
+ VALUES ("2012-02-15", "cloudy day")
+ ON DUPLICATE KEY UPDATE title = "cloudy day (duplicated)";
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test b/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test
new file mode 100644
index 00000000000..18801541b72
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/like_unicode_ci.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS terms;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE terms (
+ content varchar(64) NOT NULL COLLATE 'utf8_unicode_ci',
+ INDEX (content)
+) DEFAULT CHARSET=utf8;
+
+INSERT INTO terms VALUES ('track');
+INSERT INTO terms VALUES ('trackback');
+
+SELECT * FROM terms WHERE content LIKE 'TRACK%';
+
+DROP TABLE terms;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test b/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test
new file mode 100644
index 00000000000..b7093f82aa5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/lock_tables_read.test
@@ -0,0 +1,32 @@
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS counts;
+--enable_warnings
+
+CREATE TABLE counts (
+ id INT PRIMARY KEY AUTO_INCREMENT
+);
+
+LOCK TABLES counts READ;
+UNLOCK TABLES;
+
+DROP TABLE counts;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test
new file mode 100644
index 00000000000..8c818041a6c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_disabled.test
@@ -0,0 +1,60 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SET mroonga_enable_optimization=FALSE;
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ month = 11
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+SET mroonga_enable_optimization=TRUE;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test
new file mode 100644
index 00000000000..d75a6460218
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_not_optimized_no_limit.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY day;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test
new file mode 100644
index 00000000000..61e16a9444d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date BETWEEN "2011-11-11 12:23:31" AND "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test
new file mode 100644
index 00000000000..4b75648009b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_between_over.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date BETWEEN "2011-11-11 12:23:31" AND "2011-11-11 12:23:43"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test
new file mode 100644
index 00000000000..f3b4be95b3a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:34", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:34", "Tomorrow will be fine.");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:34", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:34", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date = "2011-11-11 12:23:34"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test
new file mode 100644
index 00000000000..ce5724b8b0b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date > "2011-11-11 12:23:31"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test
new file mode 100644
index 00000000000..4c55ba2a895
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_greater_than_or_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date >= "2011-11-11 12:23:31"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test
new file mode 100644
index 00000000000..36f0e0ab6f2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date < "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test
new file mode 100644
index 00000000000..3fc1505fcc2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_datetime_less_than_or_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ date DATETIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(date)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "2011-11-11 12:23:30", "Today is fine.");
+INSERT INTO diaries VALUES(2, "2011-11-11 12:23:31", "Today's lucky item is flower!");
+INSERT INTO diaries VALUES(3, "2011-11-11 12:23:32", "I will do something today!");
+INSERT INTO diaries VALUES(4, "2011-11-11 12:23:33", "I don't want to anything today...");
+INSERT INTO diaries VALUES(5, "2011-11-11 12:23:34", "I'm sleepy today.");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ date <= "2011-11-11 12:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test
new file mode 100644
index 00000000000..0733a48ba97
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_have_primary_key.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test
new file mode 100644
index 00000000000..f96043b4e37
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(id)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO memos VALUES(1, "Today is fine.");
+INSERT INTO memos VALUES(2, "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "I will do something today!");
+INSERT INTO memos VALUES(4, "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ id BETWEEN 2 AND 4
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test
new file mode 100644
index 00000000000..39caa96424c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_between_over.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(id)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO memos VALUES(1, "Today is fine.");
+INSERT INTO memos VALUES(2, "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "I will do something today!");
+INSERT INTO memos VALUES(4, "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ id BETWEEN 2 AND 6
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test
new file mode 100644
index 00000000000..579b7b33899
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_equal.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ month = 11
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test
new file mode 100644
index 00000000000..c7354438224
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ day > 10
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test
new file mode 100644
index 00000000000..259e2e5178d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_greater_than_or_equal.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ day >= 10
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test
new file mode 100644
index 00000000000..02c2123afef
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ day < 12
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test
new file mode 100644
index 00000000000..0511de74442
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_int_less_than_or_equal.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ day <= 12
+ ORDER BY day LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test
new file mode 100644
index 00000000000..b757b39e9ce
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_primary_key.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 11, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(6, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE) ORDER BY day LIMIT 0,5;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test
new file mode 100644
index 00000000000..b4d7aa348f0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_no_where_clause.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+flush status;
+create table t1 (c1 int primary key, c2 int, c3 text, _id int, key idx1(c2), fulltext index ft(c3)) default charset utf8;
+insert into t1 values(1,10,"aa ii uu ee oo",null);
+insert into t1 values(2,20,"ka ki ku ke ko",null);
+insert into t1 values(3,30,"ii si ii se ii",null);
+insert into t1 values(4,40,"ta ti tu te to",null);
+insert into t1 values(5,50,"aa ii uu ii oo",null);
+
+show status like 'mroonga_fast_order_limit';
+
+select *, match(c3) against("ii") from t1 order by c1 desc limit 2;
+
+show status like 'mroonga_fast_order_limit';
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test
new file mode 100644
index 00000000000..74da8581596
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_asc.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY day ASC LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test
new file mode 100644
index 00000000000..2e5d0741c51
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_desc.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY day DESC LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test
new file mode 100644
index 00000000000..d7becd3820a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_id.test
@@ -0,0 +1,57 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ _id INT,
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(NULL, 1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(NULL, 2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(NULL, 3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(NULL, 4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(NULL, 5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(NULL, 6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(NULL, 7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY _id
+ LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test
new file mode 100644
index 00000000000..827faa70fa9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_order_by_match_against.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test
new file mode 100644
index 00000000000..04a2309e98e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_select_match_against.test
@@ -0,0 +1,57 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT *, MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ ORDER BY MATCH(content) AGAINST("今日" IN BOOLEAN MODE)
+ LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test
new file mode 100644
index 00000000000..8c8fafc076c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time BETWEEN "1:23:31" AND "1:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test
new file mode 100644
index 00000000000..9f9848b7e7e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_between_over.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time BETWEEN "1:23:31" AND "1:23:43"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test
new file mode 100644
index 00000000000..04efd54eb48
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:34", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:34", "Tomorrow will be fine.");
+INSERT INTO memos VALUES(3, "1:23:34", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:34", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time = "1:23:34"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test
new file mode 100644
index 00000000000..b2ec8b78198
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" );
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time > "1:23:31"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test
new file mode 100644
index 00000000000..0b9964eb542
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_greater_than_or_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!" );
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time >= "1:23:31"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test
new file mode 100644
index 00000000000..ce772a2ee6d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time < "1:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test
new file mode 100644
index 00000000000..797bd935eaa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_time_less_than_or_equal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE memos (
+ id INT UNSIGNED NOT NULL,
+ writing_time TIME,
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(writing_time)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos VALUES(1, "1:23:30", "Today is fine.");
+INSERT INTO memos VALUES(2, "1:23:31", "Today's lucky item is flower!");
+INSERT INTO memos VALUES(3, "1:23:32", "I will do something today!");
+INSERT INTO memos VALUES(4, "1:23:33", "I don't want to anything today...");
+INSERT INTO memos VALUES(5, "1:23:34", "I'm sleepy today.");
+
+SELECT * FROM memos
+ WHERE MATCH(content) AGAINST("today" IN BOOLEAN MODE) AND
+ writing_time <= "1:23:33"
+ ORDER BY id LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test
new file mode 100644
index 00000000000..e34209b841e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_with_index.test
@@ -0,0 +1,57 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(title),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ title = "hello"
+ ORDER BY day LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test
new file mode 100644
index 00000000000..380f323d64a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_varchar_equal_without_index.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(month),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, 2011, 11, 12, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, 2011, 11, 13, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+INSERT INTO diaries VALUES(6, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(7, 2011, 12, 2, "åˆé›ª", "今日ã®å¤©æ°—ã¯é›ªï¼");
+
+SELECT * FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE) AND
+ title = "hello"
+ ORDER BY day LIMIT 1;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test
new file mode 100644
index 00000000000..988a116731c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year BETWEEN "11" AND "2013" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id DESC LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test
new file mode 100644
index 00000000000..d4c1d020fcc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_between_over.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year BETWEEN "11" AND "2015" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id DESC LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test
new file mode 100644
index 00000000000..b1daa3a0000
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_equal.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine (code name Mroonga) 1.0 has been released", "11");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 1.11 has been released", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year = "11" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id DESC LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test
new file mode 100644
index 00000000000..bf4a18793b5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year > "11" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id ASC LIMIT 2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test
new file mode 100644
index 00000000000..8863d613f06
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_greater_than_or_equal.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year >= "11" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id ASC LIMIT 2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test
new file mode 100644
index 00000000000..2fe423ac053
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year < "13" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id DESC LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test
new file mode 100644
index 00000000000..52f26e37123
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_order_limit_optimized_year_less_than_or_equal.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS mroonga_releases;
+--enable_warnings
+
+FLUSH STATUS;
+
+CREATE TABLE mroonga_releases (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ release_title TEXT,
+ release_year YEAR,
+ KEY (release_year),
+ FULLTEXT KEY (release_title)
+) DEFAULT CHARSET UTF8;
+
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Groonga storage engine (code name Mroonga) 0.1 has been released", "10");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Rename Groonga storage engine to Mroonga", "2011");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 2.0 has been released", "2012");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 3.0 has been released", "13");
+INSERT INTO mroonga_releases (release_title, release_year)
+ VALUES ("Mroonga 4.0 will be released", "2014");
+
+SELECT * FROM mroonga_releases
+ WHERE release_year <= "13" AND
+ MATCH(release_title) AGAINST("Mroonga" IN BOOLEAN MODE)
+ ORDER BY id DESC LIMIT 1,2;
+
+SHOW STATUS LIKE 'mroonga_fast_order_limit';
+
+DROP TABLE mroonga_releases;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..669868c6c7f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_TODO_SPLIT_ME.test
@@ -0,0 +1,61 @@
+# Copyright(C) 2010 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+flush status;
+create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+show status like 'mroonga_count_skip';
+select * from t1;
+show status like 'mroonga_count_skip';
+select count(*) from t1;
+show status like 'mroonga_count_skip';
+select * from t1 force index(primary) where c1 between 2 and 4;
+show status like 'mroonga_count_skip';
+select count(*) from t1 force index(primary) where c1 between 2 and 4;
+show status like 'mroonga_count_skip';
+select c1 from t1 force index(primary) where c1 < 3;
+show status like 'mroonga_count_skip';
+select count(c1) from t1 force index(primary) where c1 < 3;
+show status like 'mroonga_count_skip';
+select 1 from t1 force index(primary) where c1 > 3;
+show status like 'mroonga_count_skip';
+select count(1) from t1 force index(primary) where c1 > 3;
+show status like 'mroonga_count_skip';
+select * from t1 where match(c3) against("su");
+show status like 'mroonga_count_skip';
+select count(*) from t1 where match(c3) against("su");
+show status like 'mroonga_count_skip';
+select * from t1 where match(c3) against("+su" in boolean mode);
+show status like 'mroonga_count_skip';
+select count(*) from t1 where match(c3) against("+su" in boolean mode);
+show status like 'mroonga_count_skip';
+select * from t1 force index(idx1) where c2 between 20 and 40;
+show status like 'mroonga_count_skip';
+select count(*) from t1 force index(idx1) where c2 between 20 and 40;
+show status like 'mroonga_count_skip';
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_multithread.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_multithread.test
new file mode 100644
index 00000000000..bca2311ffbc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_multithread.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+CREATE TABLE diaries (
+ title TEXT,
+ FULLTEXT INDEX ft(title)
+);
+
+INSERT INTO diaries VALUES("Hello mroonga!");
+INSERT INTO diaries VALUES("It's funny.");
+
+CONNECT (thread2, localhost, root, ,);
+CONNECTION thread2;
+INSERT INTO diaries VALUES("Happy birthday!");
+DISCONNECT thread2;
+CONNECTION default;
+
+SHOW STATUS LIKE 'mroonga_count_skip';
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+SHOW STATUS LIKE 'mroonga_count_skip';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_single_thread.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_single_thread.test
new file mode 100644
index 00000000000..fa960be850f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_after_insert_single_thread.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kentoku SHIBA
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+CREATE TABLE diaries (
+ title TEXT,
+ FULLTEXT INDEX ft(title)
+);
+
+INSERT INTO diaries VALUES("Hello mroonga!");
+INSERT INTO diaries VALUES("It's funny.");
+INSERT INTO diaries VALUES("Happy birthday!");
+
+SHOW STATUS LIKE 'mroonga_count_skip';
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("mroonga" IN BOOLEAN MODE);
+SHOW STATUS LIKE 'mroonga_count_skip';
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_disabled.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_disabled.test
new file mode 100644
index 00000000000..e94702e8159
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_disabled.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+FLUSH STATUS;
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+INSERT INTO diaries VALUES(4, "帰りé“", "今日ã¯å¤©æ°—ãŒã‚ˆãã¦ã‚ˆã‹ã£ãŸã€‚");
+INSERT INTO diaries VALUES(5, "ã¯ã‚Œ", "天気ãŒã‚ˆã„ã®ã¯ä»Šæ—¥ã¾ã§ã¿ãŸã„。");
+
+SET mroonga_enable_optimization=FALSE;
+
+SELECT COUNT(*) FROM diaries
+ WHERE MATCH(content) AGAINST("今日" IN BOOLEAN MODE);
+
+SHOW STATUS LIKE 'mroonga_count_skip';
+
+SET mroonga_enable_optimization=TRUE;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_index_view.test b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_index_view.test
new file mode 100644
index 00000000000..11457b1e05a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/optimization_skip_count_index_view.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries, users;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ user_id INT NOT NULL,
+ title VARCHAR(45) NOT NULL,
+ KEY (user_id),
+ FULLTEXT INDEX title_index (title)
+) DEFAULT CHARSET=UTF8;
+
+CREATE TABLE users (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name VARCHAR(45) NOT NULL,
+ INDEX (name)
+) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
+
+INSERT INTO users (id, name) VALUES (1, "Alice"), (2, "Bob");
+INSERT INTO diaries (user_id, title) VALUES (1, "survey");
+INSERT INTO diaries (user_id, title) VALUES (2, "groonga (1)");
+INSERT INTO diaries (user_id, title) VALUES (2, "groonga (2)");
+
+CREATE VIEW articles AS
+ SELECT diaries.user_id AS user_id,
+ diaries.title AS title,
+ users.name AS name
+ FROM diaries, users
+ WHERE diaries.user_id = users.id;
+
+
+SELECT COUNT(*) FROM articles WHERE name = 'Bob';
+
+DROP VIEW articles;
+DROP TABLE diaries, users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test b/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test
new file mode 100644
index 00000000000..5f160af239f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/replace_geometry.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS geo_replace;
+--enable_warnings
+
+CREATE TABLE geo_replace (
+ id INT NOT NULL,
+ geo GEOMETRY NOT NULL,
+ PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+INSERT INTO geo_replace VALUES(1, POINT(100,100));
+SELECT id, ASTEXT(geo) FROM geo_replace;
+REPLACE INTO geo_replace VALUES(1, POINT(100,200));
+SELECT id, ASTEXT(geo) FROM geo_replace;
+INSERT INTO geo_replace VALUES(1, POINT(200,200)) ON DUPLICATE KEY UPDATE geo = POINT(200,200);
+SELECT id, ASTEXT(geo) FROM geo_replace;
+UPDATE geo_replace SET geo = POINT(200,300);
+SELECT id, ASTEXT(geo) FROM geo_replace;
+
+DROP TABLE geo_replace;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test
new file mode 100644
index 00000000000..192a4976cbd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/replace_select_varchar.test
@@ -0,0 +1,64 @@
+# Copyright(C) 2011 Kouhei Sutou
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Based on #910.
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS videos_master, videos_groonga;
+--enable_warnings
+
+CREATE TABLE `videos_master` (
+ `id` bigint(1) unsigned NOT NULL,
+ `video_id` varchar(64) NOT NULL,
+ `description` text,
+ `tags_unpack` text,
+ PRIMARY KEY (`video_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE `videos_groonga` (
+ `id` bigint(1) unsigned NOT NULL,
+ `video_id` varchar(64) NOT NULL,
+ `description` text,
+ `tags_unpack` text,
+ PRIMARY KEY (`video_id`),
+ FULLTEXT INDEX (`description`),
+ FULLTEXT INDEX (`tags_unpack`)
+) DEFAULT CHARSET=utf8;
+
+
+INSERT INTO videos_master VALUES (1, "video-1", "My Familly", "familly human");
+INSERT INTO videos_master VALUES (2, "video-2", "My Cat", "family cat");
+REPLACE INTO videos_groonga
+ SELECT v.id, v.video_id, v.description, NULL
+ FROM videos_master AS v
+ WHERE v.video_id = (video_id);
+SELECT *, MATCH(description) AGAINST("cat") FROM videos_groonga
+ WHERE MATCH(description) AGAINST("cat");
+
+INSERT INTO videos_master VALUES (3, "video-3", "My Dog", "family dog");
+REPLACE INTO videos_groonga
+ SELECT v.id, v.video_id, v.description, NULL
+ FROM videos_master AS v
+ WHERE v.video_id = (video_id);
+SELECT *, MATCH(description) AGAINST("my") FROM videos_groonga
+ WHERE MATCH(description) AGAINST("my");
+
+DROP TABLE videos_master, videos_groonga;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test b/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test
new file mode 100644
index 00000000000..6411896312c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/replace_text.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ content text,
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+select * from diaries;
+
+select * from diaries where match(content) against("天気");
+
+replace into diaries values(2, "明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。");
+select * from diaries where match(content) against("天気");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test b/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test
new file mode 100644
index 00000000000..0d9b82fb7d4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/replace_varchar.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ content varchar(256),
+ fulltext index (content)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+select * from diaries;
+
+select * from diaries where match(content) against("天気");
+
+replace into diaries values(2, "明日ã®å¤©æ°—ã¯é›¨ã¿ãŸã„。");
+select * from diaries where match(content) against("天気");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test b/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test
new file mode 100644
index 00000000000..a2efa7912b5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/replace_vector.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS vector_replace;
+DROP TABLE IF EXISTS vector_replace_vec;
+--enable_warnings
+
+CREATE TABLE vector_replace_vec (
+ vec CHAR(10) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE vector_replace (
+ id INT NOT NULL,
+ vec TEXT COMMENT 'flags "COLUMN_VECTOR", type "vector_replace_vec"',
+ PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+INSERT INTO vector_replace VALUES(1, 'first second third');
+SELECT id, vec FROM vector_replace;
+REPLACE INTO vector_replace VALUES(1, 'fourth fifth');
+SELECT id, vec FROM vector_replace;
+INSERT INTO vector_replace VALUES(1, 'sixth seventh') ON DUPLICATE KEY UPDATE vec = 'sixth seventh';
+SELECT id, vec FROM vector_replace;
+UPDATE vector_replace SET vec = 'eighth nineth tenth';
+SELECT id, vec FROM vector_replace;
+
+DROP TABLE vector_replace;
+DROP TABLE vector_replace_vec;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test
new file mode 100644
index 00000000000..8de78ca99af
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_all.test
@@ -0,0 +1,100 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1(c1 int, c2 int, c3 int);
+insert into t1 values (1, 10, 100);
+insert into t1 values (2, 30, 500);
+insert into t1 values (5, 20, 200);
+insert into t1 values (3, 60, 300);
+insert into t1 values (4, 50, 600);
+insert into t1 values (6, 40, 400);
+
+select * from t1;
+select c1 from t1;
+select c2 from t1;
+select c3 from t1;
+
+select * from t1 where c1 <= 3;
+select * from t1 where c2 > 40;
+select * from t1 where c3 = 300;
+
+
+select * from t1 order by c1;
+select * from t1 order by c2 desc;
+select * from t1 order by c3, c1;
+
+drop table t1;
+
+
+create table t1 (c1 int, c2 varchar(100));
+insert into t1 values(1, "hoge");
+insert into t1 values(4, "hogefuga");
+insert into t1 values(2, "fuga");
+insert into t1 values(5, "moge");
+insert into t1 values(3, "mo");
+
+select * from t1;
+select * from t1 order by c1;
+select * from t1 order by c1 desc;
+select * from t1 order by c2;
+
+drop table t1;
+
+create table t1 (c1 int, c2 text);
+insert into t1 values(1, "hoge");
+insert into t1 values(4, "hogefuga");
+insert into t1 values(2, "fuga");
+insert into t1 values(5, "moge");
+insert into t1 values(3, "mo");
+
+select * from t1;
+
+drop table t1;
+
+# ORDER BY with position
+create table t1 (c1 int, c2 int, c3 text);
+insert into t1 values(1, 20, "hoge");
+insert into t1 values(4, 60, "hogefuga");
+insert into t1 values(2, 50, "fuga");
+insert into t1 values(5, 30, "moge");
+insert into t1 values(3, 40, "mo");
+select * from t1 order by c1 asc;
+select * from t1 order by c1 desc;
+select * from t1 order by c2 asc;
+select * from t1 order by c2 desc;
+select * from t1 order by c3 asc;
+select * from t1 order by c3 desc;
+drop table t1;
+
+# _id
+create table t1 (_id int, c1 int);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+insert into t1 values (null,100);
+select * from t1;
+select * from t1 where _id < 3;
+select * from t1 where _id >= 3;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test
new file mode 100644
index 00000000000..c4ce4c0193d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_equal.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(16) NOT NULL,
+ KEY index_name (name)
+);
+
+INSERT INTO tags VALUES ('mroonga');
+INSERT INTO tags VALUES ('mysql');
+INSERT INTO tags VALUES ('');
+
+SELECT * FROM tags WHERE name = "";
+
+DROP TABLE tags;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test
new file mode 100644
index 00000000000..8537616e89e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_empty_key_where_not_equal.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS tags;
+--enable_warnings
+
+CREATE TABLE tags (
+ name VARCHAR(16) NOT NULL,
+ KEY index_name (name)
+);
+
+INSERT INTO tags VALUES ('mroonga');
+INSERT INTO tags VALUES ('mysql');
+INSERT INTO tags VALUES ('');
+
+SELECT * FROM tags WHERE name != "";
+
+DROP TABLE tags;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test
new file mode 100644
index 00000000000..569fbcfd600
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_with_index.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE users (
+ name varchar(40),
+ age int,
+ KEY (age)
+);
+
+INSERT INTO users VALUES ("Alice", 20);
+INSERT INTO users VALUES ("Bob", 20);
+INSERT INTO users VALUES ("Charry", 29);
+
+SELECT *, COUNT(*) FROM users GROUP BY age;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test
new file mode 100644
index 00000000000..ae852bfcfed
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_group_by_without_index.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE users (
+ name varchar(40),
+ age int
+);
+
+INSERT INTO users VALUES ("Alice", 20);
+INSERT INTO users VALUES ("Bob", 20);
+INSERT INTO users VALUES ("Charry", 29);
+
+EXPLAIN SELECT *, COUNT(*) FROM users GROUP BY age;
+
+SELECT *, COUNT(*) FROM users GROUP BY age;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test
new file mode 100644
index 00000000000..9ebd707392d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_pkey.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1(c1 int primary key, c2 int, c3 int);
+insert into t1 values (1, 10, 100);
+insert into t1 values (2, 30, 500);
+insert into t1 values (5, 20, 200);
+insert into t1 values (3, 60, 300);
+insert into t1 values (4, 50, 600);
+insert into t1 values (6, 40, 400);
+
+select * from t1 where c1=1;
+select * from t1 where c1=2;
+select * from t1 where c1=3;
+select * from t1 where c1=4;
+select * from t1 where c1=5;
+select * from t1 where c1=6;
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test b/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test
new file mode 100644
index 00000000000..a6159bea02b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/select_secondary_key.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2010 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, c3 text, key idx1(c2), fulltext index ft(c3));
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+
+select * from t1;
+select * from t1 force index(idx1) where c2 = 30;
+select * from t1 force index(idx1) where c2 = 20;
+
+insert into t1 values(6,30,"aa bb cc dd ee");
+select * from t1;
+select * from t1 force index(idx1) where c2 = 30;
+
+drop table t1;
+
+create table t1 (c1 varchar(5) primary key, c2 varchar(5), c3 text, key idx1(c2), fulltext index ft(c3))engine=mroonga;
+insert into t1 values('ab','ijk',"aa ii uu ee oo");
+insert into t1 values('bc','ghi',"ka ki ku ke ko");
+insert into t1 values('cd','efg',"sa si su se so");
+insert into t1 values('de','cde',"ta ti tu te to");
+insert into t1 values('ef','abc',"aa ii uu ee oo");
+select * from t1 force index(idx1) where c2 < 'e' order by c1 asc;
+select * from t1 force index(idx1) where c2 > 'e' order by c1 asc;
+select * from t1 force index(idx1) where c2 between 'c' and 'h' order by c1 asc;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..240e8c11dcf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/show_create_table_TODO_SPLIT_ME.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int);
+show create table t1;
+drop table t1;
+
+create table t1 (c1 int, c2 int);
+show create table t1;
+drop table t1;
+
+create table t1 (c1 int primary key, c2 varchar(100));
+show create table t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test b/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test
new file mode 100644
index 00000000000..34839669f25
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/sub_query_fulltext.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries, users;
+--enable_warnings
+
+CREATE TABLE users (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name TEXT
+) DEFAULT CHARSET UTF8;
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ user_id INT UNSIGNED NOT NULL,
+ title TEXT,
+ FULLTEXT INDEX (title)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO users (name) VALUES ("alice");
+INSERT INTO users (name) VALUES ("bob");
+INSERT INTO users (name) VALUES ("carlos");
+
+SELECT * FROM users;
+
+INSERT INTO diaries (user_id, title) VALUES (1, "Hello!");
+INSERT INTO diaries (user_id, title) VALUES (2, "my name is bob");
+INSERT INTO diaries (user_id, title) VALUES (3, "my name is carlos");
+
+SELECT * FROM diaries;
+
+SELECT * FROM users
+ WHERE id IN (SELECT user_id FROM diaries
+ WHERE MATCH(title) AGAINST("name"))
+ ORDER BY id DESC;
+
+DROP TABLE diaries, users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test b/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test
new file mode 100644
index 00000000000..56ebb430afc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/temporary_table.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Toshihisa Tashiro
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/skip_osx.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TEMPORARY TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TEMPORARY TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("clear day");
+INSERT INTO diaries (title) VALUES ("rainy day");
+INSERT INTO diaries (title) VALUES ("cloudy day");
+
+SELECT * FROM diaries;
+
+DROP TEMPORARY TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test b/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test
new file mode 100644
index 00000000000..5833f77722a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/truncate.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(day)
+) DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+TRUNCATE TABLE diaries;
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+
+INSERT INTO diaries VALUES(1, 2011, 11, 11, "帰りé“", "ã¤ã‹ã‚ŒãŸãƒ¼");
+INSERT INTO diaries VALUES(2, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(3, 2011, 12, 2, "åˆé›ª", "今年ã¯ã˜ã‚ã¦ã®é›ªï¼");
+
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("悪ã„" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test
new file mode 100644
index 00000000000..a6cc1ba7fb2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_fulltext.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index (c2));
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+
+select * from t1;
+update t1 set c2="ta ti tu te" where c1=20;
+select * from t1;
+select * from t1 where match(c2) against("ti");
+select * from t1 where match(c2) against("ki");
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test
new file mode 100644
index 00000000000..e362984f896
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_id_hash_index.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, c1 int, key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+update t1 set c1 = 200 where _id = 2;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test
new file mode 100644
index 00000000000..d8257e41fb5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_id_unique_hash_index.test
@@ -0,0 +1,33 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (_id int, c1 int, unique key (_id) using hash);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+insert into t1 values(null, 100);
+select * from t1;
+update t1 set c1 = 200 where _id = 2;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test
new file mode 100644
index 00000000000..043ae25aee5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_int.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int, c2 int);
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+
+update t1 set c2=c2+100 where c1=1;
+select * from t1;
+update t1 set c2=c2+100 where c1=2;
+select * from t1;
+update t1 set c2=c2+100 where c1=3;
+select * from t1;
+
+flush tables;
+
+update t1 set c1=5, c2=50;
+select * from t1;
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test
new file mode 100644
index 00000000000..3ad713cbbde
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_last_insert_grn_id.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+drop table if exists memos;
+--enable_warnings
+
+create table memos (
+ _id int,
+ content varchar(255),
+ unique key (_id) using hash
+);
+
+insert into memos values (null, "今夜ã¯ã•ã‚“ã¾ã€‚");
+insert into memos values (null, "明日ã¯groongaをアップデート。");
+insert into memos values (null, "帰りã«ãŠã ã‚“ã”。");
+insert into memos values (null, "金曜日ã¯è‚‰ã®æ—¥ã€‚");
+
+select * from memos;
+
+insert into memos values (null, "冷蔵庫ã«ç‰›ä¹³ãŒæ®‹ã‚Š1本。");
+select last_insert_grn_id();
+update memos set content = "冷蔵庫ã«ç‰›ä¹³ã¯ã¾ã ãŸãã•ã‚“ã‚る。" where _id = last_insert_grn_id();
+
+select * from memos;
+
+drop table memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test b/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test
new file mode 100644
index 00000000000..f5d85de4043
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/update_virtual_column.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# for virtual columns
+create table t1 (c1 int, _id int);
+insert into t1 values(1,null);
+insert into t1 values(2,null);
+insert into t1 values(3,null);
+select * from t1;
+set sql_mode="";
+# warning WARN_DATA_TRUNCATED
+update t1 set _id = 10 where c1 = 1;
+select * from t1;
+set sql_mode="strict_all_tables";
+# We can't use WARN_DATA_TRUNCATED here because "WXXX" isn't supported
+# MySQL 5.5, 5.6 and MariaDB 5.6. MariaDB 10.0 only supports it.
+# We share this test with all MySQL servers. So we use number here.
+--error 1265
+update t1 set _id = 11 where c1 = 1;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test
new file mode 100644
index 00000000000..c7b2094906b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_database_path_prefix.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_mroonga_helper.inc
+
+SET GLOBAL mroonga_database_path_prefix = "test/mroonga.data/";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_database_path_prefix';
+CREATE DATABASE clean_test;
+USE clean_test;
+
+CREATE TABLE counts (
+ id INT PRIMARY KEY AUTO_INCREMENT
+);
+
+--file_exists $MYSQLD_DATADIR/test/mroonga.data/clean_test.mrn
+
+INSERT INTO counts VALUES (NULL);
+
+SELECT * FROM counts;
+
+DROP TABLE counts;
+DROP DATABASE clean_test;
+USE test;
+
+SET GLOBAL mroonga_database_path_prefix = NULL;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test
new file mode 100644
index 00000000000..a61af87fb2b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_new_value.test
@@ -0,0 +1,25 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET @mroonga_default_parser_backup = @@mroonga_default_parser;
+SET GLOBAL mroonga_default_parser = "TokenBigramSplitAlpha";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_default_parser';
+SET GLOBAL mroonga_default_parser = @mroonga_default_parser_backup;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test
new file mode 100644
index 00000000000..0e8562de92c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_default_parser_same_value.test
@@ -0,0 +1,22 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_default_parser = "TokenBigram";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_default_parser';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test
new file mode 100644
index 00000000000..b80ac2e8400
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_delete.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+
+set mroonga_dry_write=true;
+delete from diaries where id = 1;
+select * from diaries;
+
+set mroonga_dry_write=false;
+delete from diaries where id = 1;
+select * from diaries;
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test
new file mode 100644
index 00000000000..72346c80a6d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_insert.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+
+set mroonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+
+set mroonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test
new file mode 100644
index 00000000000..2100f61700c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_dry_write_update.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+
+set mroonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+
+set mroonga_dry_write=false;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test
new file mode 100644
index 00000000000..2c2776e5fd8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_disable.test
@@ -0,0 +1,28 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_100_or_later.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_lock_timeout = -1;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+
+
+disable_query_log;
+SET GLOBAL mroonga_lock_timeout = 10000000;
+enable_query_log;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test
new file mode 100644
index 00000000000..e2090cf9659
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_invalid.test
@@ -0,0 +1,28 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_100_or_later.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_lock_timeout = -2;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+
+
+disable_query_log;
+SET GLOBAL mroonga_lock_timeout = 10000000;
+enable_query_log;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test
new file mode 100644
index 00000000000..9df4970cacd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_no_retry.test
@@ -0,0 +1,27 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_lock_timeout = 0;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+
+
+disable_query_log;
+SET GLOBAL mroonga_lock_timeout = 10000000;
+enable_query_log;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test
new file mode 100644
index 00000000000..49394d0a40a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_lock_timeout_valid.test
@@ -0,0 +1,27 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_lock_timeout = 1000;
+SHOW GLOBAL VARIABLES LIKE "mroonga_lock_timeout";
+
+
+disable_query_log;
+SET GLOBAL mroonga_lock_timeout = 10000000;
+enable_query_log;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test
new file mode 100644
index 00000000000..77f6adb1713
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_new_value.test
@@ -0,0 +1,25 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET @mroonga_log_file_backup = @@mroonga_log_file;
+SET GLOBAL mroonga_log_file = "new-mroonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+SET GLOBAL mroonga_log_file = @mroonga_log_file_backup;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test
new file mode 100644
index 00000000000..254beae17a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_nonexistent_path.test
@@ -0,0 +1,22 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_log_file = "nonexistent/mroonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test
new file mode 100644
index 00000000000..54116467502
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_file_same_value.test
@@ -0,0 +1,22 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+SET GLOBAL mroonga_log_file = "groonga.log";
+SHOW GLOBAL VARIABLES LIKE 'mroonga_log_file';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..f736be43e6b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_log_level_TODO_SPLIT_ME.test
@@ -0,0 +1,61 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2014 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+set @mroonga_log_level_backup=@@mroonga_log_level;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=NONE;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=EMERG;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=ALERT;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=CRIT;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=ERROR;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=WARNING;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=NOTICE;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=INFO;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=DEBUG;
+show global variables like 'mroonga_log_level';
+
+set global mroonga_log_level=DUMP;
+show global variables like 'mroonga_log_level';
+
+--error ER_WRONG_VALUE_FOR_VAR
+set global mroonga_log_level=dummy;
+
+--error ER_GLOBAL_VARIABLE
+set session mroonga_log_level=NOTICE;
+
+set global mroonga_log_level=@mroonga_log_level_backup;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test
new file mode 100644
index 00000000000..55a318b786a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_global.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+# MySQL <= 5.5 reports wrong a warning. :<
+# It has been fixed in MySQL >= 5.6 and MariaDB >= 5.3.
+--disable_warnings
+SET GLOBAL mroonga_match_escalation_threshold = -1;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ tags TEXT,
+ FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET GLOBAL mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test
new file mode 100644
index 00000000000..c459e50c0d7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_match_escalation_threshold_session.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ tags TEXT,
+ FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+# MySQL <= 5.5 reports wrong a warning. :<
+# It has been fixed in MySQL >= 5.6 and MariaDB >= 5.3.
+--disable_warnings
+SET mroonga_match_escalation_threshold = -1;
+--enable_warnings
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test
new file mode 100644
index 00000000000..8412e6a65fa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_vector_column_delimiter.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_mroonga_helper.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS document;
+DROP TABLE IF EXISTS category;
+--enable_warnings
+
+CREATE TABLE category (
+ category CHAR(10) PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COMMENT='default_tokenizer "TokenDelimit"';
+
+CREATE TABLE document (
+ id INT NOT NULL,
+ title TEXT,
+ categories TEXT COMMENT 'flags "COLUMN_VECTOR", type "category"',
+ PRIMARY KEY(id)
+) DEFAULT CHARSET=utf8;
+
+SHOW GLOBAL VARIABLES LIKE 'mroonga_vector_column_delimiter';
+
+INSERT INTO document VALUES(1, "Mroonga is the fastest search engine", "it database fulltext");
+SELECT id, title, categories FROM document;
+
+SET GLOBAL mroonga_vector_column_delimiter = ';';
+
+SHOW GLOBAL VARIABLES LIKE 'mroonga_vector_column_delimiter';
+
+SELECT id, title, categories FROM document;
+
+DROP TABLE document;
+DROP TABLE category;
+
+SET GLOBAL mroonga_vector_column_delimiter = ' ';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test b/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test
new file mode 100644
index 00000000000..ff47f2c921d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/storage/t/variable_version.test
@@ -0,0 +1,22 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+# show variables like 'groonga%';
+show variables like 'mroonga_version';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/disabled.def b/storage/mroonga/mysql-test/mroonga/wrapper/disabled.def
new file mode 100644
index 00000000000..f3f211b63ed
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/disabled.def
@@ -0,0 +1,2 @@
+create_table_token_filters_index_comment_multiple_token_filters : Bundled Mroonga does not support token filter yet.
+create_table_token_filters_index_comment_one_token_filter : Bundled Mroonga does not support token filter yet.
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result
new file mode 100644
index 00000000000..22dbbff96ac
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_add_column.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+id title
+1 survey
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_column_comment.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_column_comment.result
new file mode 100644
index 00000000000..af302b5a2a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_column_comment.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+ALTER TABLE bugs
+CHANGE COLUMN
+tag
+tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ `tag` varchar(64) DEFAULT NULL COMMENT 'It must consist of only alphabet and number.',
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result
new file mode 100644
index 00000000000..e5ce4692aa3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_change_engine.result
@@ -0,0 +1,49 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) ENGINE MyISAM DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries ENGINE = mroonga COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+1 survey will start groonga!
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND
+MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+id title body
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result
new file mode 100644
index 00000000000..1106fcffca2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_comment_change_engine.result
@@ -0,0 +1,40 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT AUTO_INCREMENT PRIMARY KEY,
+title VARCHAR(64),
+content TEXT,
+FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` varchar(64) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'
+INSERT INTO memos (title, content) VALUES ("Hello", "I start to write memos!");
+INSERT INTO memos (title, content) VALUES ("groonga", "I start to use groonga!");
+INSERT INTO memos (title, content) VALUES ("mroonga", "I use mroonga too!");
+ALTER TABLE memos COMMENT='engine "MyISAM"';
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` varchar(64) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='engine "MyISAM"'
+SELECT * FROM memos;
+id title content
+1 Hello I start to write memos!
+2 groonga I start to use groonga!
+3 mroonga I use mroonga too!
+SELECT * FROM memos WHERE MATCH(content) AGAINST("start" IN BOOLEAN MODE);
+id title content
+1 Hello I start to write memos!
+2 groonga I start to use groonga!
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_create_fulltext.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_create_fulltext.result
new file mode 100644
index 00000000000..b185bf269f7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_create_fulltext.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+CREATE FULLTEXT INDEX title_index on diaries (title);
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_fulltext.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_fulltext.result
new file mode 100644
index 00000000000..e71132be139
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_fulltext.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_multiple_column.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_multiple_column.result
new file mode 100644
index 00000000000..1fefc1d98e6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_multiple_column.result
@@ -0,0 +1,27 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY title_and_created_at_index (title, created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_normal.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_normal.result
new file mode 100644
index 00000000000..d115cefb243
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_normal.result
@@ -0,0 +1,25 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY created_at_index (created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_primary.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_primary.result
new file mode 100644
index 00000000000..47649911bb1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_primary.result
@@ -0,0 +1,23 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+ALTER TABLE diaries DISABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_updating.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_updating.result
new file mode 100644
index 00000000000..06e1a12db55
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_disable_keys_updating.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (
+c1 int NOT NULL,
+c2 text NOT NULL,
+c3 int NOT NULL,
+c4 int NOT NULL,
+PRIMARY KEY(c1),
+KEY idx1(c3,c4),
+FULLTEXT KEY ft1(c2)
+) COMMENT='ENGINE "MyISAM"' DEFAULT CHARSET=utf8;
+INSERT INTO t1 VALUES(1, 'test1', 1, 1);
+INSERT INTO t1 VALUES(2, 'test2', 2, 2);
+INSERT INTO t1 VALUES(3, 'test3', 1, 3);
+ALTER TABLE t1 DISABLE KEYS;
+DELETE FROM t1 WHERE c1 = 2;
+UPDATE t1 SET c4 = 4 WHERE c1 = 1;
+INSERT INTO t1 VALUES(4, 'test4', 2, 4);
+TRUNCATE t1;
+DROP TABLE t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result
new file mode 100644
index 00000000000..07c149a8fa8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_drop_column.result
@@ -0,0 +1,37 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+ALTER TABLE diaries DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+SELECT * FROM diaries;
+id title
+1 survey
+INSERT INTO diaries (title) values ("groonga (1)");
+INSERT INTO diaries (title) values ("groonga (2)");
+SELECT * FROM diaries;
+id title
+1 survey
+2 groonga (1)
+3 groonga (2)
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_fulltext.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_fulltext.result
new file mode 100644
index 00000000000..b9a0f545965
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_fulltext.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+FULLTEXT KEY title_index (title)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_index)
+WHERE MATCH (title) AGAINST ("富士山");
+id title
+3 富士山
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_lock_tables.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_lock_tables.result
new file mode 100644
index 00000000000..341cc4f7de7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_lock_tables.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS memos;
+CREATE TABLE IF NOT EXISTS memos (
+id VARCHAR(45) NOT NULL PRIMARY KEY,
+text TEXT NOT NULL,
+FULLTEXT KEY (text)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+LOCK TABLES memos WRITE;
+ALTER TABLE memos DISABLE KEYS;
+INSERT INTO memos
+VALUES (00000, 'text0'),
+(00001, 'text1'),
+(00002, 'text2');
+ALTER TABLE memos ENABLE KEYS;
+UNLOCK TABLES;
+SELECT * FROM memos;
+id text
+0 text0
+1 text1
+2 text2
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_multiple_column.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_multiple_column.result
new file mode 100644
index 00000000000..21f6b9089bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_multiple_column.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY title_and_created_at_index (title, created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (title_and_created_at_index)
+WHERE title = "天気" AND
+created_at = "2012-04-30 23:00:00";
+id title created_at
+2 天気 2012-04-30 23:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_normal.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_normal.result
new file mode 100644
index 00000000000..2ba4f1b6386
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_normal.result
@@ -0,0 +1,26 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+created_at datetime,
+KEY created_at_index (created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (created_at_index)
+WHERE created_at = "2012-04-30 20:00:00";
+id title created_at
+1 Hello 2012-04-30 20:00:00
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_primary.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_primary.result
new file mode 100644
index 00000000000..a1ee9013b6b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_enable_keys_primary.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+ALTER TABLE diaries DISABLE KEYS;
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+ALTER TABLE diaries ENABLE KEYS;
+SELECT *
+FROM diaries
+FORCE INDEX (PRIMARY)
+WHERE id = 2;
+id title
+2 天気
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result
new file mode 100644
index 00000000000..cc64daac30a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_fulltext.result
@@ -0,0 +1,52 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+FULLTEXT INDEX title_index (title)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+id title
+1 survey
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+ALTER TABLE diaries ADD FULLTEXT INDEX body_index (body);
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey") AND
+MATCH(body) AGAINST("groonga");
+id title body
+1 survey will start groonga!
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("groonga") AND
+MATCH(body) AGAINST("starting");
+id title body
+2 groonga (1) starting groonga...
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result
new file mode 100644
index 00000000000..08e526baa50
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_rename_table.result
@@ -0,0 +1,45 @@
+DROP TABLE IF EXISTS diaries, memos;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("groonga") AND
+MATCH(body) AGAINST("starting");
+id title body
+ALTER TABLE diaries RENAME memos;
+SELECT * FROM memos;
+id title body
+1 survey will start groonga!
+SELECT * FROM memos
+WHERE MATCH(title) AGAINST("groonga") AND
+MATCH(body) AGAINST("starting");
+id title body
+SHOW CREATE TABLE memos;
+Table Create Table
+memos CREATE TABLE `memos` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result
new file mode 100644
index 00000000000..fc38afc72d8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/alter_table_spatial.result
@@ -0,0 +1,131 @@
+DROP TABLE IF EXISTS shops;
+CREATE TABLE shops (
+id INT PRIMARY KEY AUTO_INCREMENT,
+name TEXT,
+location GEOMETRY NOT NULL
+) COMMENT = 'ENGINE "InnoDB"';
+INSERT INTO shops (name, location)
+VALUES ('nezu-no-taiyaki',
+GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+VALUES ('taiyaki-kataoka',
+GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+VALUES ('soba-taiyaki-ku',
+GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+VALUES ('kuruma',
+GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+VALUES ('hirose-ya',
+GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+VALUES ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+VALUES ('omede-taiyaki',
+GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+VALUES ('onaga-ya',
+GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+VALUES ('shiro-ya',
+GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+VALUES ('fuji-ya',
+GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+VALUES ('miyoshi',
+GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+VALUES ('juju-ya',
+GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+VALUES ('tatsumi-ya',
+GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+VALUES ('tetsuji',
+GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+VALUES ('gazuma-ya',
+GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+VALUES ('honma-mon',
+GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+VALUES ('naniwa-ya',
+GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+VALUES ('kuro-dai',
+GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+VALUES ('daruma',
+GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+VALUES ('yanagi-ya',
+GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+VALUES ('sharaku',
+GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+VALUES ('takane',
+GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+VALUES ('chiyoda',
+GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+VALUES ('da-ka-po',
+GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+VALUES ('matsushima-ya',
+GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+VALUES ('kazuya',
+GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+VALUES ('furuya-kogane-an',
+GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+VALUES ('hachi-no-ie',
+GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+VALUES ('azuki-chan',
+GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+VALUES ('kuriko-an',
+GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+VALUES ('naze-ya',
+GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+VALUES ('sanoki-ya',
+GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+VALUES ('shigeta',
+GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+VALUES ('nishimi-ya',
+GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+VALUES ('hiiragi',
+GeomFromText('POINT(139.711517 35.647701)'));
+ALTER TABLE shops ADD SPATIAL KEY location_index (location);
+SELECT id, name, AsText(location) AS location_text FROM shops
+WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location);
+id name location_text
+14 tetsuji POINT(139.76857 35.680912)
+19 daruma POINT(139.770599 35.681461)
+26 kazuya POINT(139.760895 35.673508)
+SHOW CREATE TABLE shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga AUTO_INCREMENT=37 DEFAULT CHARSET=latin1 COMMENT='ENGINE "InnoDB"'
+DROP TABLE shops;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/auto_increment_text.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/auto_increment_text.result
new file mode 100644
index 00000000000..9d45d2fe63d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/auto_increment_text.result
@@ -0,0 +1,15 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text
+) comment = 'engine "innodb"';
+insert into diaries (body) values ("started groonga (long text)");
+select * from diaries;
+id body
+1 started groonga (long text)
+insert into diaries (body) values ("sleeping... (short text)");
+select * from diaries;
+id body
+1 started groonga (long text)
+2 sleeping... (short text)
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/binlog_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/binlog_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..f0792094a34
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/binlog_TODO_SPLIT_ME.result
@@ -0,0 +1,34 @@
+drop table if exists t1;
+show variables like 'log_bin';
+Variable_name Value
+log_bin ON
+set binlog_format="STATEMENT";
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
+set binlog_format="ROW";
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
+set binlog_format="MIXED";
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+c1 c2
+1 100
+2 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/column_comment_index_not_for_mroonga.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/column_comment_index_not_for_mroonga.result
new file mode 100644
index 00000000000..b1a7c8efb89
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/column_comment_index_not_for_mroonga.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64),
+INDEX (tag) COMMENT 'Tag search is required.'
+) DEFAULT CHARSET=utf8
+COMMENT='engine "InnoDB"';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ `tag` varchar(64) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `tag` (`tag`) COMMENT 'Tag search is required.'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/column_normal_comment.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/column_normal_comment.result
new file mode 100644
index 00000000000..2679079664e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/column_normal_comment.result
@@ -0,0 +1,13 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY,
+tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.'
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ `tag` varchar(64) DEFAULT NULL COMMENT 'It must consist of only alphabet and number.',
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"'
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result
new file mode 100644
index 00000000000..6b29be5edb7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/count_star_with_index.result
@@ -0,0 +1,28 @@
+DROP TABLE IF EXISTS diaries_innodb;
+DROP TABLE IF EXISTS diaries_mroonga;
+CREATE TABLE diaries_innodb (
+id INT PRIMARY KEY AUTO_INCREMENT,
+body TEXT,
+flag TINYINT(2),
+INDEX (flag)
+) ENGINE = InnoDB DEFAULT CHARSET UTF8;
+CREATE TABLE diaries_mroonga (
+id INT PRIMARY KEY AUTO_INCREMENT,
+body TEXT,
+flag TINYINT(2),
+INDEX (flag)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+INSERT INTO diaries_innodb (body) VALUES ("will start groonga!");
+INSERT INTO diaries_innodb (body) VALUES ("starting groonga...");
+INSERT INTO diaries_innodb (body) VALUES ("started groonga.");
+INSERT INTO diaries_mroonga (body) VALUES ("will start groonga!");
+INSERT INTO diaries_mroonga (body) VALUES ("starting groonga...");
+INSERT INTO diaries_mroonga (body) VALUES ("started groonga.");
+EXPLAIN SELECT COUNT(*) FROM diaries_innodb;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE diaries_innodb index NULL flag 2 NULL 3 Using index
+EXPLAIN SELECT COUNT(*) FROM diaries_mroonga;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE diaries_mroonga index NULL flag 2 NULL 3 Using index
+DROP TABLE diaries_innodb;
+DROP TABLE diaries_mroonga;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..b3814331038
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_TODO_SPLIT_ME.result
@@ -0,0 +1,109 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+create table t2 (c1 int primary key) COMMENT = 'engine "innodb"';
+create table t3 (c1 int primary key) COMMENT = 'engine "innodb"';
+drop table t1,t2,t3;
+create table t1 (c1 int primary key, c2 int, c3 int) COMMENT = 'engine "innodb"';
+drop table t1;
+create table t1 (c1 bit primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 bit(1) NO PRI NULL
+drop table t1;
+create table t1 (c1 tinyint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 tinyint(4) NO PRI NULL
+drop table t1;
+create table t1 (c1 smallint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 smallint(6) NO PRI NULL
+drop table t1;
+create table t1 (c1 mediumint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 mediumint(9) NO PRI NULL
+drop table t1;
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 int(11) NO PRI NULL
+drop table t1;
+create table t1 (c1 bigint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 bigint(20) NO PRI NULL
+drop table t1;
+create table t1 (c1 double primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 double NO PRI NULL
+drop table t1;
+create table t1 (c1 float primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 float NO PRI NULL
+drop table t1;
+create table t1 (c1 decimal primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 decimal(10,0) NO PRI NULL
+drop table t1;
+create table t1 (c1 date primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 date NO PRI NULL
+drop table t1;
+create table t1 (c1 time primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 time NO PRI NULL
+drop table t1;
+create table t1 (c1 timestamp primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 timestamp NO PRI CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
+drop table t1;
+create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 datetime NO PRI NULL
+drop table t1;
+create table t1 (c1 year primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 year(4) NO PRI NULL
+drop table t1;
+create table t1 (c1 char(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 char(10) NO PRI NULL
+drop table t1;
+create table t1 (c1 varchar(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 varchar(10) NO PRI NULL
+drop table t1;
+create table t1 (c1 binary(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 binary(10) NO PRI NULL
+drop table t1;
+create table t1 (c1 varbinary(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 varbinary(10) NO PRI NULL
+drop table t1;
+create table t1 (c1 enum("yes","no") primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 enum('yes','no') NO PRI NULL
+drop table t1;
+create table t1 (c1 set("A","B","AB","O") primary key) COMMENT = 'engine "innodb"';
+desc t1;
+Field Type Null Key Default Extra
+c1 set('A','B','AB','O') NO PRI NULL
+drop table t1;
+create table t1 (c1 int) COMMENT = 'engine "innodb"';
+ERROR 42000: This table type requires a primary key
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result
new file mode 100644
index 00000000000..ce1b5470231
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_comment_combined.result
@@ -0,0 +1,12 @@
+DROP TABLE IF EXISTS bugs;
+CREATE TABLE bugs (
+id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8
+COMMENT='Free style normal comment, engine "InnoDB"';
+SHOW CREATE TABLE bugs;
+Table Create Table
+bugs CREATE TABLE `bugs` (
+ `id` int(10) unsigned NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='Free style normal comment, engine "InnoDB"'
+DROP TABLE bugs;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index.result
new file mode 100644
index 00000000000..ea992f827ca
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_normalizer_fulltext_index.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+day DATE PRIMARY KEY,
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んã ã€‚");
+SELECT * FROM diaries
+WHERE MATCH (content) AGAINST ("+ãµã‚‰ã¤ã" IN BOOLEAN MODE);
+day content
+SELECT * FROM diaries
+WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE);
+day content
+2013-04-23 ブラックコーヒーを飲んã ã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_multiple_token_filters.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_multiple_token_filters.result
new file mode 100644
index 00000000000..0c0af7a9db2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_multiple_token_filters.result
@@ -0,0 +1,15 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord,TokenFilterStopWord"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_HASH_KEY ShortText
+table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord
+column_create memos-content index COLUMN_INDEX|WITH_POSITION memos
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_one_token_filter.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_one_token_filter.result
new file mode 100644
index 00000000000..aef34c0bc26
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/create_table_token_filters_index_comment_one_token_filter.result
@@ -0,0 +1,15 @@
+SELECT mroonga_command("register token_filters/stop_word");
+mroonga_command("register token_filters/stop_word")
+true
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT NOT NULL PRIMARY KEY,
+content VARCHAR(64) NOT NULL,
+FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8;
+SELECT mroonga_command("dump");
+mroonga_command("dump")
+table_create memos TABLE_HASH_KEY ShortText
+table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord
+column_create memos-content index COLUMN_INDEX|WITH_POSITION memos
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..990537622f4
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_TODO_SPLIT_ME.result
@@ -0,0 +1,55 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int) COMMENT 'engine = "innodb"';
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c1`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine = "innodb"'
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+insert into t1 values (4, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+4 102
+delete from t1 where c1=3;
+select * from t1;
+c1 c2
+1 100
+2 101
+4 102
+flush tables;
+delete from t1 where c1=2;
+select * from t1;
+c1 c2
+1 100
+4 102
+delete from t1;
+select * from t1;
+c1 c2
+drop table t1;
+create table t1 (c1 int primary key, c2 text, fulltext index (c2)) COMMENT 'engine = "innodb"';
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ka ki ku ke
+30 sa si su se
+select * from t1 where match(c2) against("ki");
+c1 c2
+20 ka ki ku ke
+delete from t1 where c1=20;
+select * from t1;
+c1 c2
+10 aa ii uu ee
+30 sa si su se
+select * from t1 where match(c2) against("ki");
+c1 c2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_all.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_all.result
new file mode 100644
index 00000000000..200e978a582
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/delete_all.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS users;
+SET NAMES utf8;
+CREATE TABLE users (
+id int PRIMARY KEY,
+name varchar(100),
+FULLTEXT INDEX (name)
+) COMMENT 'engine = "InnoDB"' DEFAULT CHARSET=utf8;
+INSERT INTO users VALUES (1, 'Alice');
+INSERT INTO users VALUES (2, 'Bob');
+INSERT INTO users VALUES (3, 'Chris');
+SELECT * FROM users;
+id name
+1 Alice
+2 Bob
+3 Chris
+DELETE FROM users;
+SELECT * FROM users;
+id name
+DROP TABLE users;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result
new file mode 100644
index 00000000000..08c37695f5a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_leading_not.result
@@ -0,0 +1,24 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("-明日 +天気" IN BOOLEAN MODE);
+id title content
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result
new file mode 100644
index 00000000000..b0bff284532
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_multiple_match_against.result
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title),
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries VALUES(1, "富士山", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気 1月1日", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "天気 4月4日", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+COUNT(*)
+1
+SELECT * FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+id title content
+3 天気 4月4日 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SELECT 1 FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+1
+1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result
new file mode 100644
index 00000000000..190105a3ba1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- fine is be" IN BOOLEAN MODE);
+id content
+6 Yesterday was fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result
new file mode 100644
index 00000000000..240da5c357f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_or.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- is OR be fine" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+2 Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result
new file mode 100644
index 00000000000..6dedd2183eb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D- good +day be" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+3 Yesterday was good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result
new file mode 100644
index 00000000000..14d30fac260
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_no_operator.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+3 Today is fine.
+2 Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result
new file mode 100644
index 00000000000..d367ba1d21f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_minus.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE);
+id content
+2 Tomorrow will be good day.
+3 Today is fine.
+4 Tomorrow will be fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result
new file mode 100644
index 00000000000..6bf48ab6556
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_or_with_plus.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+2 Tomorrow will be good day.
+4 Tomorrow will be fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result
new file mode 100644
index 00000000000..29975d55137
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today good" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result
new file mode 100644
index 00000000000..2294308ae92
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today -good is" IN BOOLEAN MODE);
+id content
+3 Today is fine.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result
new file mode 100644
index 00000000000..b61f0637bb9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_default_operator_plus_with_or.result
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS memos;
+SET NAMES utf8;
+CREATE TABLE memos (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content TEXT,
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+SELECT * FROM memos
+WHERE MATCH (content) AGAINST ("*D+ today OR tomorrow day" IN BOOLEAN MODE);
+id content
+1 Today is good day.
+2 Tomorrow will be good day.
+DROP TABLE memos;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_full_spec.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_full_spec.result
new file mode 100644
index 00000000000..e603cc27401
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_full_spec.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠12
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 2
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_no_weight.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_no_weight.result
new file mode 100644
index 00000000000..6a5dbd5ca6b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_no_weight.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1,2:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1,2:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠3
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 2
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_omit_section.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_omit_section.result
new file mode 100644
index 00000000000..2fe63a68f77
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_boolean_mode_pragma_weight_omit_section.result
@@ -0,0 +1,20 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id INT PRIMARY KEY,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT *, MATCH(title, content)
+AGAINST("*W1:2 +天気" in BOOLEAN MODE) AS score
+FROM diaries
+WHERE MATCH(title, content)
+AGAINST("*W1:2 +天気" in BOOLEAN MODE);
+id title content score
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠3
+3 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚ 1
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_ascii.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_ascii.result
new file mode 100644
index 00000000000..b58f4ad3364
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_ascii.result
@@ -0,0 +1,29 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("su");
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("ii");
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("+su" in boolean mode);
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("+ii" in boolean mode);
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_cp932.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_cp932.result
new file mode 100644
index 00000000000..d7b64010ebf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_cp932.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932 COMMENT = 'engine "innodb"';
+insert into t1 values(1, "–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä","‚ ‚ ‚ ‚ ‚ ‚ ‚ ");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä ‚ ‚ ‚ ‚ ‚ ‚ ‚ 
+2 ‚¢‚¢‚¢‚¢‚¢ –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ
+3 dummy dummy
+select * from t1 where match(c2) against("•xŽmŽR");
+c1 c2 c3
+1 –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä ‚ ‚ ‚ ‚ ‚ ‚ ‚ 
+select * from t1 where match(c3) against("•xŽmŽR");
+c1 c2 c3
+2 ‚¢‚¢‚¢‚¢‚¢ –¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_eucjpms.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_eucjpms.result
new file mode 100644
index 00000000000..9aa60690513
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_eucjpms.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms COMMENT = 'engine "innodb"';
+insert into t1 values(1, "ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ","¤¢¤¢¤¢¤¢¤¢¤¢¤¢");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ ¤¢¤¢¤¢¤¢¤¢¤¢¤¢
+2 ¤¤¤¤¤¤¤¤¤¤ ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó
+3 dummy dummy
+select * from t1 where match(c2) against("Éٻλ³");
+c1 c2 c3
+1 ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ ¤¢¤¢¤¢¤¢¤¢¤¢¤¢
+select * from t1 where match(c3) against("Éٻλ³");
+c1 c2 c3
+2 ¤¤¤¤¤¤¤¤¤¤ ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_japanese.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_japanese.result
new file mode 100644
index 00000000000..6c73f4627bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_charset_japanese.result
@@ -0,0 +1,18 @@
+drop table if exists t1, t2, t3;
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8 COMMENT = 'engine "innodb"';
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+3 dummy dummy
+select * from t1 where match(c2) against("富士山");
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+select * from t1 where match(c3) against("富士山");
+c1 c2 c3
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result
new file mode 100644
index 00000000000..fd07ea67964
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_index_recreate.result
@@ -0,0 +1,41 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES utf8;
+CREATE TABLE diaries (
+id int PRIMARY KEY,
+title varchar(255),
+content text,
+FULLTEXT INDEX (title)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries VALUES (1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES (2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES (3, "富士山", "今日もãã‚Œã„。");
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+DROP INDEX title ON diaries;
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+SELECT * FROM diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+CREATE FULLTEXT INDEX new_title_index ON diaries (title);
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+SELECT * FROM diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result
new file mode 100644
index 00000000000..03300e3e9ef
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_select.result
@@ -0,0 +1,66 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8 COMMENT = 'engine "innodb"';
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8 COMMENT = 'engine "innodb"';
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t2;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t2 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t1 where c1>3 order by c1 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c1>3 order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c2>"s" order by c2 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c2>"s" order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select *,match(c2) against("ii") from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+c1 c2 match(c2) against("ii")
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+1 aa ii uu ee oo 174763
+select *,match(c2) against("ii") from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+5 ta ti ii ii to 349526
+3 aa ii ii ii oo 524289
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+drop table t1,t2;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result
new file mode 100644
index 00000000000..8e1b0845e85
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_insert_values.result
@@ -0,0 +1,25 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "innodb"';
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` text,
+ PRIMARY KEY (`c1`),
+ FULLTEXT KEY `ft` (`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"'
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+flush tables;
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result
new file mode 100644
index 00000000000..3809006038c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_many_records.result
@@ -0,0 +1,4389 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+fulltext index (title)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+set autocommit=0;
+insert into diaries values(0, "2011-07-14");
+insert into diaries values(1, "2011-07-15");
+insert into diaries values(2, "2011-07-16");
+insert into diaries values(3, "2011-07-17");
+insert into diaries values(4, "2011-07-18");
+insert into diaries values(5, "2011-07-19");
+insert into diaries values(6, "2011-07-20");
+insert into diaries values(7, "2011-07-21");
+insert into diaries values(8, "2011-07-22");
+insert into diaries values(9, "2011-07-23");
+insert into diaries values(10, "2011-07-24");
+insert into diaries values(11, "2011-07-25");
+insert into diaries values(12, "2011-07-26");
+insert into diaries values(13, "2011-07-27");
+insert into diaries values(14, "2011-07-28");
+insert into diaries values(15, "2011-07-29");
+insert into diaries values(16, "2011-07-30");
+insert into diaries values(17, "2011-07-31");
+insert into diaries values(18, "2011-08-01");
+insert into diaries values(19, "2011-08-02");
+insert into diaries values(20, "2011-08-03");
+insert into diaries values(21, "2011-08-04");
+insert into diaries values(22, "2011-08-05");
+insert into diaries values(23, "2011-08-06");
+insert into diaries values(24, "2011-08-07");
+insert into diaries values(25, "2011-08-08");
+insert into diaries values(26, "2011-08-09");
+insert into diaries values(27, "2011-08-10");
+insert into diaries values(28, "2011-08-11");
+insert into diaries values(29, "2011-08-12");
+insert into diaries values(30, "2011-08-13");
+insert into diaries values(31, "2011-08-14");
+insert into diaries values(32, "2011-08-15");
+insert into diaries values(33, "2011-08-16");
+insert into diaries values(34, "2011-08-17");
+insert into diaries values(35, "2011-08-18");
+insert into diaries values(36, "2011-08-19");
+insert into diaries values(37, "2011-08-20");
+insert into diaries values(38, "2011-08-21");
+insert into diaries values(39, "2011-08-22");
+insert into diaries values(40, "2011-08-23");
+insert into diaries values(41, "2011-08-24");
+insert into diaries values(42, "2011-08-25");
+insert into diaries values(43, "2011-08-26");
+insert into diaries values(44, "2011-08-27");
+insert into diaries values(45, "2011-08-28");
+insert into diaries values(46, "2011-08-29");
+insert into diaries values(47, "2011-08-30");
+insert into diaries values(48, "2011-08-31");
+insert into diaries values(49, "2011-09-01");
+insert into diaries values(50, "2011-09-02");
+insert into diaries values(51, "2011-09-03");
+insert into diaries values(52, "2011-09-04");
+insert into diaries values(53, "2011-09-05");
+insert into diaries values(54, "2011-09-06");
+insert into diaries values(55, "2011-09-07");
+insert into diaries values(56, "2011-09-08");
+insert into diaries values(57, "2011-09-09");
+insert into diaries values(58, "2011-09-10");
+insert into diaries values(59, "2011-09-11");
+insert into diaries values(60, "2011-09-12");
+insert into diaries values(61, "2011-09-13");
+insert into diaries values(62, "2011-09-14");
+insert into diaries values(63, "2011-09-15");
+insert into diaries values(64, "2011-09-16");
+insert into diaries values(65, "2011-09-17");
+insert into diaries values(66, "2011-09-18");
+insert into diaries values(67, "2011-09-19");
+insert into diaries values(68, "2011-09-20");
+insert into diaries values(69, "2011-09-21");
+insert into diaries values(70, "2011-09-22");
+insert into diaries values(71, "2011-09-23");
+insert into diaries values(72, "2011-09-24");
+insert into diaries values(73, "2011-09-25");
+insert into diaries values(74, "2011-09-26");
+insert into diaries values(75, "2011-09-27");
+insert into diaries values(76, "2011-09-28");
+insert into diaries values(77, "2011-09-29");
+insert into diaries values(78, "2011-09-30");
+insert into diaries values(79, "2011-10-01");
+insert into diaries values(80, "2011-10-02");
+insert into diaries values(81, "2011-10-03");
+insert into diaries values(82, "2011-10-04");
+insert into diaries values(83, "2011-10-05");
+insert into diaries values(84, "2011-10-06");
+insert into diaries values(85, "2011-10-07");
+insert into diaries values(86, "2011-10-08");
+insert into diaries values(87, "2011-10-09");
+insert into diaries values(88, "2011-10-10");
+insert into diaries values(89, "2011-10-11");
+insert into diaries values(90, "2011-10-12");
+insert into diaries values(91, "2011-10-13");
+insert into diaries values(92, "2011-10-14");
+insert into diaries values(93, "2011-10-15");
+insert into diaries values(94, "2011-10-16");
+insert into diaries values(95, "2011-10-17");
+insert into diaries values(96, "2011-10-18");
+insert into diaries values(97, "2011-10-19");
+insert into diaries values(98, "2011-10-20");
+insert into diaries values(99, "2011-10-21");
+insert into diaries values(100, "2011-10-22");
+insert into diaries values(101, "2011-10-23");
+insert into diaries values(102, "2011-10-24");
+insert into diaries values(103, "2011-10-25");
+insert into diaries values(104, "2011-10-26");
+insert into diaries values(105, "2011-10-27");
+insert into diaries values(106, "2011-10-28");
+insert into diaries values(107, "2011-10-29");
+insert into diaries values(108, "2011-10-30");
+insert into diaries values(109, "2011-10-31");
+insert into diaries values(110, "2011-11-01");
+insert into diaries values(111, "2011-11-02");
+insert into diaries values(112, "2011-11-03");
+insert into diaries values(113, "2011-11-04");
+insert into diaries values(114, "2011-11-05");
+insert into diaries values(115, "2011-11-06");
+insert into diaries values(116, "2011-11-07");
+insert into diaries values(117, "2011-11-08");
+insert into diaries values(118, "2011-11-09");
+insert into diaries values(119, "2011-11-10");
+insert into diaries values(120, "2011-11-11");
+insert into diaries values(121, "2011-11-12");
+insert into diaries values(122, "2011-11-13");
+insert into diaries values(123, "2011-11-14");
+insert into diaries values(124, "2011-11-15");
+insert into diaries values(125, "2011-11-16");
+insert into diaries values(126, "2011-11-17");
+insert into diaries values(127, "2011-11-18");
+insert into diaries values(128, "2011-11-19");
+insert into diaries values(129, "2011-11-20");
+insert into diaries values(130, "2011-11-21");
+insert into diaries values(131, "2011-11-22");
+insert into diaries values(132, "2011-11-23");
+insert into diaries values(133, "2011-11-24");
+insert into diaries values(134, "2011-11-25");
+insert into diaries values(135, "2011-11-26");
+insert into diaries values(136, "2011-11-27");
+insert into diaries values(137, "2011-11-28");
+insert into diaries values(138, "2011-11-29");
+insert into diaries values(139, "2011-11-30");
+insert into diaries values(140, "2011-12-01");
+insert into diaries values(141, "2011-12-02");
+insert into diaries values(142, "2011-12-03");
+insert into diaries values(143, "2011-12-04");
+insert into diaries values(144, "2011-12-05");
+insert into diaries values(145, "2011-12-06");
+insert into diaries values(146, "2011-12-07");
+insert into diaries values(147, "2011-12-08");
+insert into diaries values(148, "2011-12-09");
+insert into diaries values(149, "2011-12-10");
+insert into diaries values(150, "2011-12-11");
+insert into diaries values(151, "2011-12-12");
+insert into diaries values(152, "2011-12-13");
+insert into diaries values(153, "2011-12-14");
+insert into diaries values(154, "2011-12-15");
+insert into diaries values(155, "2011-12-16");
+insert into diaries values(156, "2011-12-17");
+insert into diaries values(157, "2011-12-18");
+insert into diaries values(158, "2011-12-19");
+insert into diaries values(159, "2011-12-20");
+insert into diaries values(160, "2011-12-21");
+insert into diaries values(161, "2011-12-22");
+insert into diaries values(162, "2011-12-23");
+insert into diaries values(163, "2011-12-24");
+insert into diaries values(164, "2011-12-25");
+insert into diaries values(165, "2011-12-26");
+insert into diaries values(166, "2011-12-27");
+insert into diaries values(167, "2011-12-28");
+insert into diaries values(168, "2011-12-29");
+insert into diaries values(169, "2011-12-30");
+insert into diaries values(170, "2011-12-31");
+insert into diaries values(171, "2012-01-01");
+insert into diaries values(172, "2012-01-02");
+insert into diaries values(173, "2012-01-03");
+insert into diaries values(174, "2012-01-04");
+insert into diaries values(175, "2012-01-05");
+insert into diaries values(176, "2012-01-06");
+insert into diaries values(177, "2012-01-07");
+insert into diaries values(178, "2012-01-08");
+insert into diaries values(179, "2012-01-09");
+insert into diaries values(180, "2012-01-10");
+insert into diaries values(181, "2012-01-11");
+insert into diaries values(182, "2012-01-12");
+insert into diaries values(183, "2012-01-13");
+insert into diaries values(184, "2012-01-14");
+insert into diaries values(185, "2012-01-15");
+insert into diaries values(186, "2012-01-16");
+insert into diaries values(187, "2012-01-17");
+insert into diaries values(188, "2012-01-18");
+insert into diaries values(189, "2012-01-19");
+insert into diaries values(190, "2012-01-20");
+insert into diaries values(191, "2012-01-21");
+insert into diaries values(192, "2012-01-22");
+insert into diaries values(193, "2012-01-23");
+insert into diaries values(194, "2012-01-24");
+insert into diaries values(195, "2012-01-25");
+insert into diaries values(196, "2012-01-26");
+insert into diaries values(197, "2012-01-27");
+insert into diaries values(198, "2012-01-28");
+insert into diaries values(199, "2012-01-29");
+insert into diaries values(200, "2012-01-30");
+insert into diaries values(201, "2012-01-31");
+insert into diaries values(202, "2012-02-01");
+insert into diaries values(203, "2012-02-02");
+insert into diaries values(204, "2012-02-03");
+insert into diaries values(205, "2012-02-04");
+insert into diaries values(206, "2012-02-05");
+insert into diaries values(207, "2012-02-06");
+insert into diaries values(208, "2012-02-07");
+insert into diaries values(209, "2012-02-08");
+insert into diaries values(210, "2012-02-09");
+insert into diaries values(211, "2012-02-10");
+insert into diaries values(212, "2012-02-11");
+insert into diaries values(213, "2012-02-12");
+insert into diaries values(214, "2012-02-13");
+insert into diaries values(215, "2012-02-14");
+insert into diaries values(216, "2012-02-15");
+insert into diaries values(217, "2012-02-16");
+insert into diaries values(218, "2012-02-17");
+insert into diaries values(219, "2012-02-18");
+insert into diaries values(220, "2012-02-19");
+insert into diaries values(221, "2012-02-20");
+insert into diaries values(222, "2012-02-21");
+insert into diaries values(223, "2012-02-22");
+insert into diaries values(224, "2012-02-23");
+insert into diaries values(225, "2012-02-24");
+insert into diaries values(226, "2012-02-25");
+insert into diaries values(227, "2012-02-26");
+insert into diaries values(228, "2012-02-27");
+insert into diaries values(229, "2012-02-28");
+insert into diaries values(230, "2012-02-29");
+insert into diaries values(231, "2012-03-01");
+insert into diaries values(232, "2012-03-02");
+insert into diaries values(233, "2012-03-03");
+insert into diaries values(234, "2012-03-04");
+insert into diaries values(235, "2012-03-05");
+insert into diaries values(236, "2012-03-06");
+insert into diaries values(237, "2012-03-07");
+insert into diaries values(238, "2012-03-08");
+insert into diaries values(239, "2012-03-09");
+insert into diaries values(240, "2012-03-10");
+insert into diaries values(241, "2012-03-11");
+insert into diaries values(242, "2012-03-12");
+insert into diaries values(243, "2012-03-13");
+insert into diaries values(244, "2012-03-14");
+insert into diaries values(245, "2012-03-15");
+insert into diaries values(246, "2012-03-16");
+insert into diaries values(247, "2012-03-17");
+insert into diaries values(248, "2012-03-18");
+insert into diaries values(249, "2012-03-19");
+insert into diaries values(250, "2012-03-20");
+insert into diaries values(251, "2012-03-21");
+insert into diaries values(252, "2012-03-22");
+insert into diaries values(253, "2012-03-23");
+insert into diaries values(254, "2012-03-24");
+insert into diaries values(255, "2012-03-25");
+insert into diaries values(256, "2012-03-26");
+insert into diaries values(257, "2012-03-27");
+insert into diaries values(258, "2012-03-28");
+insert into diaries values(259, "2012-03-29");
+insert into diaries values(260, "2012-03-30");
+insert into diaries values(261, "2012-03-31");
+insert into diaries values(262, "2012-04-01");
+insert into diaries values(263, "2012-04-02");
+insert into diaries values(264, "2012-04-03");
+insert into diaries values(265, "2012-04-04");
+insert into diaries values(266, "2012-04-05");
+insert into diaries values(267, "2012-04-06");
+insert into diaries values(268, "2012-04-07");
+insert into diaries values(269, "2012-04-08");
+insert into diaries values(270, "2012-04-09");
+insert into diaries values(271, "2012-04-10");
+insert into diaries values(272, "2012-04-11");
+insert into diaries values(273, "2012-04-12");
+insert into diaries values(274, "2012-04-13");
+insert into diaries values(275, "2012-04-14");
+insert into diaries values(276, "2012-04-15");
+insert into diaries values(277, "2012-04-16");
+insert into diaries values(278, "2012-04-17");
+insert into diaries values(279, "2012-04-18");
+insert into diaries values(280, "2012-04-19");
+insert into diaries values(281, "2012-04-20");
+insert into diaries values(282, "2012-04-21");
+insert into diaries values(283, "2012-04-22");
+insert into diaries values(284, "2012-04-23");
+insert into diaries values(285, "2012-04-24");
+insert into diaries values(286, "2012-04-25");
+insert into diaries values(287, "2012-04-26");
+insert into diaries values(288, "2012-04-27");
+insert into diaries values(289, "2012-04-28");
+insert into diaries values(290, "2012-04-29");
+insert into diaries values(291, "2012-04-30");
+insert into diaries values(292, "2012-05-01");
+insert into diaries values(293, "2012-05-02");
+insert into diaries values(294, "2012-05-03");
+insert into diaries values(295, "2012-05-04");
+insert into diaries values(296, "2012-05-05");
+insert into diaries values(297, "2012-05-06");
+insert into diaries values(298, "2012-05-07");
+insert into diaries values(299, "2012-05-08");
+insert into diaries values(300, "2012-05-09");
+insert into diaries values(301, "2012-05-10");
+insert into diaries values(302, "2012-05-11");
+insert into diaries values(303, "2012-05-12");
+insert into diaries values(304, "2012-05-13");
+insert into diaries values(305, "2012-05-14");
+insert into diaries values(306, "2012-05-15");
+insert into diaries values(307, "2012-05-16");
+insert into diaries values(308, "2012-05-17");
+insert into diaries values(309, "2012-05-18");
+insert into diaries values(310, "2012-05-19");
+insert into diaries values(311, "2012-05-20");
+insert into diaries values(312, "2012-05-21");
+insert into diaries values(313, "2012-05-22");
+insert into diaries values(314, "2012-05-23");
+insert into diaries values(315, "2012-05-24");
+insert into diaries values(316, "2012-05-25");
+insert into diaries values(317, "2012-05-26");
+insert into diaries values(318, "2012-05-27");
+insert into diaries values(319, "2012-05-28");
+insert into diaries values(320, "2012-05-29");
+insert into diaries values(321, "2012-05-30");
+insert into diaries values(322, "2012-05-31");
+insert into diaries values(323, "2012-06-01");
+insert into diaries values(324, "2012-06-02");
+insert into diaries values(325, "2012-06-03");
+insert into diaries values(326, "2012-06-04");
+insert into diaries values(327, "2012-06-05");
+insert into diaries values(328, "2012-06-06");
+insert into diaries values(329, "2012-06-07");
+insert into diaries values(330, "2012-06-08");
+insert into diaries values(331, "2012-06-09");
+insert into diaries values(332, "2012-06-10");
+insert into diaries values(333, "2012-06-11");
+insert into diaries values(334, "2012-06-12");
+insert into diaries values(335, "2012-06-13");
+insert into diaries values(336, "2012-06-14");
+insert into diaries values(337, "2012-06-15");
+insert into diaries values(338, "2012-06-16");
+insert into diaries values(339, "2012-06-17");
+insert into diaries values(340, "2012-06-18");
+insert into diaries values(341, "2012-06-19");
+insert into diaries values(342, "2012-06-20");
+insert into diaries values(343, "2012-06-21");
+insert into diaries values(344, "2012-06-22");
+insert into diaries values(345, "2012-06-23");
+insert into diaries values(346, "2012-06-24");
+insert into diaries values(347, "2012-06-25");
+insert into diaries values(348, "2012-06-26");
+insert into diaries values(349, "2012-06-27");
+insert into diaries values(350, "2012-06-28");
+insert into diaries values(351, "2012-06-29");
+insert into diaries values(352, "2012-06-30");
+insert into diaries values(353, "2012-07-01");
+insert into diaries values(354, "2012-07-02");
+insert into diaries values(355, "2012-07-03");
+insert into diaries values(356, "2012-07-04");
+insert into diaries values(357, "2012-07-05");
+insert into diaries values(358, "2012-07-06");
+insert into diaries values(359, "2012-07-07");
+insert into diaries values(360, "2012-07-08");
+insert into diaries values(361, "2012-07-09");
+insert into diaries values(362, "2012-07-10");
+insert into diaries values(363, "2012-07-11");
+insert into diaries values(364, "2012-07-12");
+insert into diaries values(365, "2012-07-13");
+insert into diaries values(366, "2012-07-14");
+insert into diaries values(367, "2012-07-15");
+insert into diaries values(368, "2012-07-16");
+insert into diaries values(369, "2012-07-17");
+insert into diaries values(370, "2012-07-18");
+insert into diaries values(371, "2012-07-19");
+insert into diaries values(372, "2012-07-20");
+insert into diaries values(373, "2012-07-21");
+insert into diaries values(374, "2012-07-22");
+insert into diaries values(375, "2012-07-23");
+insert into diaries values(376, "2012-07-24");
+insert into diaries values(377, "2012-07-25");
+insert into diaries values(378, "2012-07-26");
+insert into diaries values(379, "2012-07-27");
+insert into diaries values(380, "2012-07-28");
+insert into diaries values(381, "2012-07-29");
+insert into diaries values(382, "2012-07-30");
+insert into diaries values(383, "2012-07-31");
+insert into diaries values(384, "2012-08-01");
+insert into diaries values(385, "2012-08-02");
+insert into diaries values(386, "2012-08-03");
+insert into diaries values(387, "2012-08-04");
+insert into diaries values(388, "2012-08-05");
+insert into diaries values(389, "2012-08-06");
+insert into diaries values(390, "2012-08-07");
+insert into diaries values(391, "2012-08-08");
+insert into diaries values(392, "2012-08-09");
+insert into diaries values(393, "2012-08-10");
+insert into diaries values(394, "2012-08-11");
+insert into diaries values(395, "2012-08-12");
+insert into diaries values(396, "2012-08-13");
+insert into diaries values(397, "2012-08-14");
+insert into diaries values(398, "2012-08-15");
+insert into diaries values(399, "2012-08-16");
+insert into diaries values(400, "2012-08-17");
+insert into diaries values(401, "2012-08-18");
+insert into diaries values(402, "2012-08-19");
+insert into diaries values(403, "2012-08-20");
+insert into diaries values(404, "2012-08-21");
+insert into diaries values(405, "2012-08-22");
+insert into diaries values(406, "2012-08-23");
+insert into diaries values(407, "2012-08-24");
+insert into diaries values(408, "2012-08-25");
+insert into diaries values(409, "2012-08-26");
+insert into diaries values(410, "2012-08-27");
+insert into diaries values(411, "2012-08-28");
+insert into diaries values(412, "2012-08-29");
+insert into diaries values(413, "2012-08-30");
+insert into diaries values(414, "2012-08-31");
+insert into diaries values(415, "2012-09-01");
+insert into diaries values(416, "2012-09-02");
+insert into diaries values(417, "2012-09-03");
+insert into diaries values(418, "2012-09-04");
+insert into diaries values(419, "2012-09-05");
+insert into diaries values(420, "2012-09-06");
+insert into diaries values(421, "2012-09-07");
+insert into diaries values(422, "2012-09-08");
+insert into diaries values(423, "2012-09-09");
+insert into diaries values(424, "2012-09-10");
+insert into diaries values(425, "2012-09-11");
+insert into diaries values(426, "2012-09-12");
+insert into diaries values(427, "2012-09-13");
+insert into diaries values(428, "2012-09-14");
+insert into diaries values(429, "2012-09-15");
+insert into diaries values(430, "2012-09-16");
+insert into diaries values(431, "2012-09-17");
+insert into diaries values(432, "2012-09-18");
+insert into diaries values(433, "2012-09-19");
+insert into diaries values(434, "2012-09-20");
+insert into diaries values(435, "2012-09-21");
+insert into diaries values(436, "2012-09-22");
+insert into diaries values(437, "2012-09-23");
+insert into diaries values(438, "2012-09-24");
+insert into diaries values(439, "2012-09-25");
+insert into diaries values(440, "2012-09-26");
+insert into diaries values(441, "2012-09-27");
+insert into diaries values(442, "2012-09-28");
+insert into diaries values(443, "2012-09-29");
+insert into diaries values(444, "2012-09-30");
+insert into diaries values(445, "2012-10-01");
+insert into diaries values(446, "2012-10-02");
+insert into diaries values(447, "2012-10-03");
+insert into diaries values(448, "2012-10-04");
+insert into diaries values(449, "2012-10-05");
+insert into diaries values(450, "2012-10-06");
+insert into diaries values(451, "2012-10-07");
+insert into diaries values(452, "2012-10-08");
+insert into diaries values(453, "2012-10-09");
+insert into diaries values(454, "2012-10-10");
+insert into diaries values(455, "2012-10-11");
+insert into diaries values(456, "2012-10-12");
+insert into diaries values(457, "2012-10-13");
+insert into diaries values(458, "2012-10-14");
+insert into diaries values(459, "2012-10-15");
+insert into diaries values(460, "2012-10-16");
+insert into diaries values(461, "2012-10-17");
+insert into diaries values(462, "2012-10-18");
+insert into diaries values(463, "2012-10-19");
+insert into diaries values(464, "2012-10-20");
+insert into diaries values(465, "2012-10-21");
+insert into diaries values(466, "2012-10-22");
+insert into diaries values(467, "2012-10-23");
+insert into diaries values(468, "2012-10-24");
+insert into diaries values(469, "2012-10-25");
+insert into diaries values(470, "2012-10-26");
+insert into diaries values(471, "2012-10-27");
+insert into diaries values(472, "2012-10-28");
+insert into diaries values(473, "2012-10-29");
+insert into diaries values(474, "2012-10-30");
+insert into diaries values(475, "2012-10-31");
+insert into diaries values(476, "2012-11-01");
+insert into diaries values(477, "2012-11-02");
+insert into diaries values(478, "2012-11-03");
+insert into diaries values(479, "2012-11-04");
+insert into diaries values(480, "2012-11-05");
+insert into diaries values(481, "2012-11-06");
+insert into diaries values(482, "2012-11-07");
+insert into diaries values(483, "2012-11-08");
+insert into diaries values(484, "2012-11-09");
+insert into diaries values(485, "2012-11-10");
+insert into diaries values(486, "2012-11-11");
+insert into diaries values(487, "2012-11-12");
+insert into diaries values(488, "2012-11-13");
+insert into diaries values(489, "2012-11-14");
+insert into diaries values(490, "2012-11-15");
+insert into diaries values(491, "2012-11-16");
+insert into diaries values(492, "2012-11-17");
+insert into diaries values(493, "2012-11-18");
+insert into diaries values(494, "2012-11-19");
+insert into diaries values(495, "2012-11-20");
+insert into diaries values(496, "2012-11-21");
+insert into diaries values(497, "2012-11-22");
+insert into diaries values(498, "2012-11-23");
+insert into diaries values(499, "2012-11-24");
+insert into diaries values(500, "2012-11-25");
+insert into diaries values(501, "2012-11-26");
+insert into diaries values(502, "2012-11-27");
+insert into diaries values(503, "2012-11-28");
+insert into diaries values(504, "2012-11-29");
+insert into diaries values(505, "2012-11-30");
+insert into diaries values(506, "2012-12-01");
+insert into diaries values(507, "2012-12-02");
+insert into diaries values(508, "2012-12-03");
+insert into diaries values(509, "2012-12-04");
+insert into diaries values(510, "2012-12-05");
+insert into diaries values(511, "2012-12-06");
+insert into diaries values(512, "2012-12-07");
+insert into diaries values(513, "2012-12-08");
+insert into diaries values(514, "2012-12-09");
+insert into diaries values(515, "2012-12-10");
+insert into diaries values(516, "2012-12-11");
+insert into diaries values(517, "2012-12-12");
+insert into diaries values(518, "2012-12-13");
+insert into diaries values(519, "2012-12-14");
+insert into diaries values(520, "2012-12-15");
+insert into diaries values(521, "2012-12-16");
+insert into diaries values(522, "2012-12-17");
+insert into diaries values(523, "2012-12-18");
+insert into diaries values(524, "2012-12-19");
+insert into diaries values(525, "2012-12-20");
+insert into diaries values(526, "2012-12-21");
+insert into diaries values(527, "2012-12-22");
+insert into diaries values(528, "2012-12-23");
+insert into diaries values(529, "2012-12-24");
+insert into diaries values(530, "2012-12-25");
+insert into diaries values(531, "2012-12-26");
+insert into diaries values(532, "2012-12-27");
+insert into diaries values(533, "2012-12-28");
+insert into diaries values(534, "2012-12-29");
+insert into diaries values(535, "2012-12-30");
+insert into diaries values(536, "2012-12-31");
+insert into diaries values(537, "2013-01-01");
+insert into diaries values(538, "2013-01-02");
+insert into diaries values(539, "2013-01-03");
+insert into diaries values(540, "2013-01-04");
+insert into diaries values(541, "2013-01-05");
+insert into diaries values(542, "2013-01-06");
+insert into diaries values(543, "2013-01-07");
+insert into diaries values(544, "2013-01-08");
+insert into diaries values(545, "2013-01-09");
+insert into diaries values(546, "2013-01-10");
+insert into diaries values(547, "2013-01-11");
+insert into diaries values(548, "2013-01-12");
+insert into diaries values(549, "2013-01-13");
+insert into diaries values(550, "2013-01-14");
+insert into diaries values(551, "2013-01-15");
+insert into diaries values(552, "2013-01-16");
+insert into diaries values(553, "2013-01-17");
+insert into diaries values(554, "2013-01-18");
+insert into diaries values(555, "2013-01-19");
+insert into diaries values(556, "2013-01-20");
+insert into diaries values(557, "2013-01-21");
+insert into diaries values(558, "2013-01-22");
+insert into diaries values(559, "2013-01-23");
+insert into diaries values(560, "2013-01-24");
+insert into diaries values(561, "2013-01-25");
+insert into diaries values(562, "2013-01-26");
+insert into diaries values(563, "2013-01-27");
+insert into diaries values(564, "2013-01-28");
+insert into diaries values(565, "2013-01-29");
+insert into diaries values(566, "2013-01-30");
+insert into diaries values(567, "2013-01-31");
+insert into diaries values(568, "2013-02-01");
+insert into diaries values(569, "2013-02-02");
+insert into diaries values(570, "2013-02-03");
+insert into diaries values(571, "2013-02-04");
+insert into diaries values(572, "2013-02-05");
+insert into diaries values(573, "2013-02-06");
+insert into diaries values(574, "2013-02-07");
+insert into diaries values(575, "2013-02-08");
+insert into diaries values(576, "2013-02-09");
+insert into diaries values(577, "2013-02-10");
+insert into diaries values(578, "2013-02-11");
+insert into diaries values(579, "2013-02-12");
+insert into diaries values(580, "2013-02-13");
+insert into diaries values(581, "2013-02-14");
+insert into diaries values(582, "2013-02-15");
+insert into diaries values(583, "2013-02-16");
+insert into diaries values(584, "2013-02-17");
+insert into diaries values(585, "2013-02-18");
+insert into diaries values(586, "2013-02-19");
+insert into diaries values(587, "2013-02-20");
+insert into diaries values(588, "2013-02-21");
+insert into diaries values(589, "2013-02-22");
+insert into diaries values(590, "2013-02-23");
+insert into diaries values(591, "2013-02-24");
+insert into diaries values(592, "2013-02-25");
+insert into diaries values(593, "2013-02-26");
+insert into diaries values(594, "2013-02-27");
+insert into diaries values(595, "2013-02-28");
+insert into diaries values(596, "2013-03-01");
+insert into diaries values(597, "2013-03-02");
+insert into diaries values(598, "2013-03-03");
+insert into diaries values(599, "2013-03-04");
+insert into diaries values(600, "2013-03-05");
+insert into diaries values(601, "2013-03-06");
+insert into diaries values(602, "2013-03-07");
+insert into diaries values(603, "2013-03-08");
+insert into diaries values(604, "2013-03-09");
+insert into diaries values(605, "2013-03-10");
+insert into diaries values(606, "2013-03-11");
+insert into diaries values(607, "2013-03-12");
+insert into diaries values(608, "2013-03-13");
+insert into diaries values(609, "2013-03-14");
+insert into diaries values(610, "2013-03-15");
+insert into diaries values(611, "2013-03-16");
+insert into diaries values(612, "2013-03-17");
+insert into diaries values(613, "2013-03-18");
+insert into diaries values(614, "2013-03-19");
+insert into diaries values(615, "2013-03-20");
+insert into diaries values(616, "2013-03-21");
+insert into diaries values(617, "2013-03-22");
+insert into diaries values(618, "2013-03-23");
+insert into diaries values(619, "2013-03-24");
+insert into diaries values(620, "2013-03-25");
+insert into diaries values(621, "2013-03-26");
+insert into diaries values(622, "2013-03-27");
+insert into diaries values(623, "2013-03-28");
+insert into diaries values(624, "2013-03-29");
+insert into diaries values(625, "2013-03-30");
+insert into diaries values(626, "2013-03-31");
+insert into diaries values(627, "2013-04-01");
+insert into diaries values(628, "2013-04-02");
+insert into diaries values(629, "2013-04-03");
+insert into diaries values(630, "2013-04-04");
+insert into diaries values(631, "2013-04-05");
+insert into diaries values(632, "2013-04-06");
+insert into diaries values(633, "2013-04-07");
+insert into diaries values(634, "2013-04-08");
+insert into diaries values(635, "2013-04-09");
+insert into diaries values(636, "2013-04-10");
+insert into diaries values(637, "2013-04-11");
+insert into diaries values(638, "2013-04-12");
+insert into diaries values(639, "2013-04-13");
+insert into diaries values(640, "2013-04-14");
+insert into diaries values(641, "2013-04-15");
+insert into diaries values(642, "2013-04-16");
+insert into diaries values(643, "2013-04-17");
+insert into diaries values(644, "2013-04-18");
+insert into diaries values(645, "2013-04-19");
+insert into diaries values(646, "2013-04-20");
+insert into diaries values(647, "2013-04-21");
+insert into diaries values(648, "2013-04-22");
+insert into diaries values(649, "2013-04-23");
+insert into diaries values(650, "2013-04-24");
+insert into diaries values(651, "2013-04-25");
+insert into diaries values(652, "2013-04-26");
+insert into diaries values(653, "2013-04-27");
+insert into diaries values(654, "2013-04-28");
+insert into diaries values(655, "2013-04-29");
+insert into diaries values(656, "2013-04-30");
+insert into diaries values(657, "2013-05-01");
+insert into diaries values(658, "2013-05-02");
+insert into diaries values(659, "2013-05-03");
+insert into diaries values(660, "2013-05-04");
+insert into diaries values(661, "2013-05-05");
+insert into diaries values(662, "2013-05-06");
+insert into diaries values(663, "2013-05-07");
+insert into diaries values(664, "2013-05-08");
+insert into diaries values(665, "2013-05-09");
+insert into diaries values(666, "2013-05-10");
+insert into diaries values(667, "2013-05-11");
+insert into diaries values(668, "2013-05-12");
+insert into diaries values(669, "2013-05-13");
+insert into diaries values(670, "2013-05-14");
+insert into diaries values(671, "2013-05-15");
+insert into diaries values(672, "2013-05-16");
+insert into diaries values(673, "2013-05-17");
+insert into diaries values(674, "2013-05-18");
+insert into diaries values(675, "2013-05-19");
+insert into diaries values(676, "2013-05-20");
+insert into diaries values(677, "2013-05-21");
+insert into diaries values(678, "2013-05-22");
+insert into diaries values(679, "2013-05-23");
+insert into diaries values(680, "2013-05-24");
+insert into diaries values(681, "2013-05-25");
+insert into diaries values(682, "2013-05-26");
+insert into diaries values(683, "2013-05-27");
+insert into diaries values(684, "2013-05-28");
+insert into diaries values(685, "2013-05-29");
+insert into diaries values(686, "2013-05-30");
+insert into diaries values(687, "2013-05-31");
+insert into diaries values(688, "2013-06-01");
+insert into diaries values(689, "2013-06-02");
+insert into diaries values(690, "2013-06-03");
+insert into diaries values(691, "2013-06-04");
+insert into diaries values(692, "2013-06-05");
+insert into diaries values(693, "2013-06-06");
+insert into diaries values(694, "2013-06-07");
+insert into diaries values(695, "2013-06-08");
+insert into diaries values(696, "2013-06-09");
+insert into diaries values(697, "2013-06-10");
+insert into diaries values(698, "2013-06-11");
+insert into diaries values(699, "2013-06-12");
+insert into diaries values(700, "2013-06-13");
+insert into diaries values(701, "2013-06-14");
+insert into diaries values(702, "2013-06-15");
+insert into diaries values(703, "2013-06-16");
+insert into diaries values(704, "2013-06-17");
+insert into diaries values(705, "2013-06-18");
+insert into diaries values(706, "2013-06-19");
+insert into diaries values(707, "2013-06-20");
+insert into diaries values(708, "2013-06-21");
+insert into diaries values(709, "2013-06-22");
+insert into diaries values(710, "2013-06-23");
+insert into diaries values(711, "2013-06-24");
+insert into diaries values(712, "2013-06-25");
+insert into diaries values(713, "2013-06-26");
+insert into diaries values(714, "2013-06-27");
+insert into diaries values(715, "2013-06-28");
+insert into diaries values(716, "2013-06-29");
+insert into diaries values(717, "2013-06-30");
+insert into diaries values(718, "2013-07-01");
+insert into diaries values(719, "2013-07-02");
+insert into diaries values(720, "2013-07-03");
+insert into diaries values(721, "2013-07-04");
+insert into diaries values(722, "2013-07-05");
+insert into diaries values(723, "2013-07-06");
+insert into diaries values(724, "2013-07-07");
+insert into diaries values(725, "2013-07-08");
+insert into diaries values(726, "2013-07-09");
+insert into diaries values(727, "2013-07-10");
+insert into diaries values(728, "2013-07-11");
+insert into diaries values(729, "2013-07-12");
+insert into diaries values(730, "2013-07-13");
+insert into diaries values(731, "2013-07-14");
+insert into diaries values(732, "2013-07-15");
+insert into diaries values(733, "2013-07-16");
+insert into diaries values(734, "2013-07-17");
+insert into diaries values(735, "2013-07-18");
+insert into diaries values(736, "2013-07-19");
+insert into diaries values(737, "2013-07-20");
+insert into diaries values(738, "2013-07-21");
+insert into diaries values(739, "2013-07-22");
+insert into diaries values(740, "2013-07-23");
+insert into diaries values(741, "2013-07-24");
+insert into diaries values(742, "2013-07-25");
+insert into diaries values(743, "2013-07-26");
+insert into diaries values(744, "2013-07-27");
+insert into diaries values(745, "2013-07-28");
+insert into diaries values(746, "2013-07-29");
+insert into diaries values(747, "2013-07-30");
+insert into diaries values(748, "2013-07-31");
+insert into diaries values(749, "2013-08-01");
+insert into diaries values(750, "2013-08-02");
+insert into diaries values(751, "2013-08-03");
+insert into diaries values(752, "2013-08-04");
+insert into diaries values(753, "2013-08-05");
+insert into diaries values(754, "2013-08-06");
+insert into diaries values(755, "2013-08-07");
+insert into diaries values(756, "2013-08-08");
+insert into diaries values(757, "2013-08-09");
+insert into diaries values(758, "2013-08-10");
+insert into diaries values(759, "2013-08-11");
+insert into diaries values(760, "2013-08-12");
+insert into diaries values(761, "2013-08-13");
+insert into diaries values(762, "2013-08-14");
+insert into diaries values(763, "2013-08-15");
+insert into diaries values(764, "2013-08-16");
+insert into diaries values(765, "2013-08-17");
+insert into diaries values(766, "2013-08-18");
+insert into diaries values(767, "2013-08-19");
+insert into diaries values(768, "2013-08-20");
+insert into diaries values(769, "2013-08-21");
+insert into diaries values(770, "2013-08-22");
+insert into diaries values(771, "2013-08-23");
+insert into diaries values(772, "2013-08-24");
+insert into diaries values(773, "2013-08-25");
+insert into diaries values(774, "2013-08-26");
+insert into diaries values(775, "2013-08-27");
+insert into diaries values(776, "2013-08-28");
+insert into diaries values(777, "2013-08-29");
+insert into diaries values(778, "2013-08-30");
+insert into diaries values(779, "2013-08-31");
+insert into diaries values(780, "2013-09-01");
+insert into diaries values(781, "2013-09-02");
+insert into diaries values(782, "2013-09-03");
+insert into diaries values(783, "2013-09-04");
+insert into diaries values(784, "2013-09-05");
+insert into diaries values(785, "2013-09-06");
+insert into diaries values(786, "2013-09-07");
+insert into diaries values(787, "2013-09-08");
+insert into diaries values(788, "2013-09-09");
+insert into diaries values(789, "2013-09-10");
+insert into diaries values(790, "2013-09-11");
+insert into diaries values(791, "2013-09-12");
+insert into diaries values(792, "2013-09-13");
+insert into diaries values(793, "2013-09-14");
+insert into diaries values(794, "2013-09-15");
+insert into diaries values(795, "2013-09-16");
+insert into diaries values(796, "2013-09-17");
+insert into diaries values(797, "2013-09-18");
+insert into diaries values(798, "2013-09-19");
+insert into diaries values(799, "2013-09-20");
+insert into diaries values(800, "2013-09-21");
+insert into diaries values(801, "2013-09-22");
+insert into diaries values(802, "2013-09-23");
+insert into diaries values(803, "2013-09-24");
+insert into diaries values(804, "2013-09-25");
+insert into diaries values(805, "2013-09-26");
+insert into diaries values(806, "2013-09-27");
+insert into diaries values(807, "2013-09-28");
+insert into diaries values(808, "2013-09-29");
+insert into diaries values(809, "2013-09-30");
+insert into diaries values(810, "2013-10-01");
+insert into diaries values(811, "2013-10-02");
+insert into diaries values(812, "2013-10-03");
+insert into diaries values(813, "2013-10-04");
+insert into diaries values(814, "2013-10-05");
+insert into diaries values(815, "2013-10-06");
+insert into diaries values(816, "2013-10-07");
+insert into diaries values(817, "2013-10-08");
+insert into diaries values(818, "2013-10-09");
+insert into diaries values(819, "2013-10-10");
+insert into diaries values(820, "2013-10-11");
+insert into diaries values(821, "2013-10-12");
+insert into diaries values(822, "2013-10-13");
+insert into diaries values(823, "2013-10-14");
+insert into diaries values(824, "2013-10-15");
+insert into diaries values(825, "2013-10-16");
+insert into diaries values(826, "2013-10-17");
+insert into diaries values(827, "2013-10-18");
+insert into diaries values(828, "2013-10-19");
+insert into diaries values(829, "2013-10-20");
+insert into diaries values(830, "2013-10-21");
+insert into diaries values(831, "2013-10-22");
+insert into diaries values(832, "2013-10-23");
+insert into diaries values(833, "2013-10-24");
+insert into diaries values(834, "2013-10-25");
+insert into diaries values(835, "2013-10-26");
+insert into diaries values(836, "2013-10-27");
+insert into diaries values(837, "2013-10-28");
+insert into diaries values(838, "2013-10-29");
+insert into diaries values(839, "2013-10-30");
+insert into diaries values(840, "2013-10-31");
+insert into diaries values(841, "2013-11-01");
+insert into diaries values(842, "2013-11-02");
+insert into diaries values(843, "2013-11-03");
+insert into diaries values(844, "2013-11-04");
+insert into diaries values(845, "2013-11-05");
+insert into diaries values(846, "2013-11-06");
+insert into diaries values(847, "2013-11-07");
+insert into diaries values(848, "2013-11-08");
+insert into diaries values(849, "2013-11-09");
+insert into diaries values(850, "2013-11-10");
+insert into diaries values(851, "2013-11-11");
+insert into diaries values(852, "2013-11-12");
+insert into diaries values(853, "2013-11-13");
+insert into diaries values(854, "2013-11-14");
+insert into diaries values(855, "2013-11-15");
+insert into diaries values(856, "2013-11-16");
+insert into diaries values(857, "2013-11-17");
+insert into diaries values(858, "2013-11-18");
+insert into diaries values(859, "2013-11-19");
+insert into diaries values(860, "2013-11-20");
+insert into diaries values(861, "2013-11-21");
+insert into diaries values(862, "2013-11-22");
+insert into diaries values(863, "2013-11-23");
+insert into diaries values(864, "2013-11-24");
+insert into diaries values(865, "2013-11-25");
+insert into diaries values(866, "2013-11-26");
+insert into diaries values(867, "2013-11-27");
+insert into diaries values(868, "2013-11-28");
+insert into diaries values(869, "2013-11-29");
+insert into diaries values(870, "2013-11-30");
+insert into diaries values(871, "2013-12-01");
+insert into diaries values(872, "2013-12-02");
+insert into diaries values(873, "2013-12-03");
+insert into diaries values(874, "2013-12-04");
+insert into diaries values(875, "2013-12-05");
+insert into diaries values(876, "2013-12-06");
+insert into diaries values(877, "2013-12-07");
+insert into diaries values(878, "2013-12-08");
+insert into diaries values(879, "2013-12-09");
+insert into diaries values(880, "2013-12-10");
+insert into diaries values(881, "2013-12-11");
+insert into diaries values(882, "2013-12-12");
+insert into diaries values(883, "2013-12-13");
+insert into diaries values(884, "2013-12-14");
+insert into diaries values(885, "2013-12-15");
+insert into diaries values(886, "2013-12-16");
+insert into diaries values(887, "2013-12-17");
+insert into diaries values(888, "2013-12-18");
+insert into diaries values(889, "2013-12-19");
+insert into diaries values(890, "2013-12-20");
+insert into diaries values(891, "2013-12-21");
+insert into diaries values(892, "2013-12-22");
+insert into diaries values(893, "2013-12-23");
+insert into diaries values(894, "2013-12-24");
+insert into diaries values(895, "2013-12-25");
+insert into diaries values(896, "2013-12-26");
+insert into diaries values(897, "2013-12-27");
+insert into diaries values(898, "2013-12-28");
+insert into diaries values(899, "2013-12-29");
+insert into diaries values(900, "2013-12-30");
+insert into diaries values(901, "2013-12-31");
+insert into diaries values(902, "2014-01-01");
+insert into diaries values(903, "2014-01-02");
+insert into diaries values(904, "2014-01-03");
+insert into diaries values(905, "2014-01-04");
+insert into diaries values(906, "2014-01-05");
+insert into diaries values(907, "2014-01-06");
+insert into diaries values(908, "2014-01-07");
+insert into diaries values(909, "2014-01-08");
+insert into diaries values(910, "2014-01-09");
+insert into diaries values(911, "2014-01-10");
+insert into diaries values(912, "2014-01-11");
+insert into diaries values(913, "2014-01-12");
+insert into diaries values(914, "2014-01-13");
+insert into diaries values(915, "2014-01-14");
+insert into diaries values(916, "2014-01-15");
+insert into diaries values(917, "2014-01-16");
+insert into diaries values(918, "2014-01-17");
+insert into diaries values(919, "2014-01-18");
+insert into diaries values(920, "2014-01-19");
+insert into diaries values(921, "2014-01-20");
+insert into diaries values(922, "2014-01-21");
+insert into diaries values(923, "2014-01-22");
+insert into diaries values(924, "2014-01-23");
+insert into diaries values(925, "2014-01-24");
+insert into diaries values(926, "2014-01-25");
+insert into diaries values(927, "2014-01-26");
+insert into diaries values(928, "2014-01-27");
+insert into diaries values(929, "2014-01-28");
+insert into diaries values(930, "2014-01-29");
+insert into diaries values(931, "2014-01-30");
+insert into diaries values(932, "2014-01-31");
+insert into diaries values(933, "2014-02-01");
+insert into diaries values(934, "2014-02-02");
+insert into diaries values(935, "2014-02-03");
+insert into diaries values(936, "2014-02-04");
+insert into diaries values(937, "2014-02-05");
+insert into diaries values(938, "2014-02-06");
+insert into diaries values(939, "2014-02-07");
+insert into diaries values(940, "2014-02-08");
+insert into diaries values(941, "2014-02-09");
+insert into diaries values(942, "2014-02-10");
+insert into diaries values(943, "2014-02-11");
+insert into diaries values(944, "2014-02-12");
+insert into diaries values(945, "2014-02-13");
+insert into diaries values(946, "2014-02-14");
+insert into diaries values(947, "2014-02-15");
+insert into diaries values(948, "2014-02-16");
+insert into diaries values(949, "2014-02-17");
+insert into diaries values(950, "2014-02-18");
+insert into diaries values(951, "2014-02-19");
+insert into diaries values(952, "2014-02-20");
+insert into diaries values(953, "2014-02-21");
+insert into diaries values(954, "2014-02-22");
+insert into diaries values(955, "2014-02-23");
+insert into diaries values(956, "2014-02-24");
+insert into diaries values(957, "2014-02-25");
+insert into diaries values(958, "2014-02-26");
+insert into diaries values(959, "2014-02-27");
+insert into diaries values(960, "2014-02-28");
+insert into diaries values(961, "2014-03-01");
+insert into diaries values(962, "2014-03-02");
+insert into diaries values(963, "2014-03-03");
+insert into diaries values(964, "2014-03-04");
+insert into diaries values(965, "2014-03-05");
+insert into diaries values(966, "2014-03-06");
+insert into diaries values(967, "2014-03-07");
+insert into diaries values(968, "2014-03-08");
+insert into diaries values(969, "2014-03-09");
+insert into diaries values(970, "2014-03-10");
+insert into diaries values(971, "2014-03-11");
+insert into diaries values(972, "2014-03-12");
+insert into diaries values(973, "2014-03-13");
+insert into diaries values(974, "2014-03-14");
+insert into diaries values(975, "2014-03-15");
+insert into diaries values(976, "2014-03-16");
+insert into diaries values(977, "2014-03-17");
+insert into diaries values(978, "2014-03-18");
+insert into diaries values(979, "2014-03-19");
+insert into diaries values(980, "2014-03-20");
+insert into diaries values(981, "2014-03-21");
+insert into diaries values(982, "2014-03-22");
+insert into diaries values(983, "2014-03-23");
+insert into diaries values(984, "2014-03-24");
+insert into diaries values(985, "2014-03-25");
+insert into diaries values(986, "2014-03-26");
+insert into diaries values(987, "2014-03-27");
+insert into diaries values(988, "2014-03-28");
+insert into diaries values(989, "2014-03-29");
+insert into diaries values(990, "2014-03-30");
+insert into diaries values(991, "2014-03-31");
+insert into diaries values(992, "2014-04-01");
+insert into diaries values(993, "2014-04-02");
+insert into diaries values(994, "2014-04-03");
+insert into diaries values(995, "2014-04-04");
+insert into diaries values(996, "2014-04-05");
+insert into diaries values(997, "2014-04-06");
+insert into diaries values(998, "2014-04-07");
+insert into diaries values(999, "2014-04-08");
+insert into diaries values(1000, "2014-04-09");
+insert into diaries values(1001, "2014-04-10");
+insert into diaries values(1002, "2014-04-11");
+insert into diaries values(1003, "2014-04-12");
+insert into diaries values(1004, "2014-04-13");
+insert into diaries values(1005, "2014-04-14");
+insert into diaries values(1006, "2014-04-15");
+insert into diaries values(1007, "2014-04-16");
+insert into diaries values(1008, "2014-04-17");
+insert into diaries values(1009, "2014-04-18");
+insert into diaries values(1010, "2014-04-19");
+insert into diaries values(1011, "2014-04-20");
+insert into diaries values(1012, "2014-04-21");
+insert into diaries values(1013, "2014-04-22");
+insert into diaries values(1014, "2014-04-23");
+insert into diaries values(1015, "2014-04-24");
+insert into diaries values(1016, "2014-04-25");
+insert into diaries values(1017, "2014-04-26");
+insert into diaries values(1018, "2014-04-27");
+insert into diaries values(1019, "2014-04-28");
+insert into diaries values(1020, "2014-04-29");
+insert into diaries values(1021, "2014-04-30");
+insert into diaries values(1022, "2014-05-01");
+insert into diaries values(1023, "2014-05-02");
+insert into diaries values(1024, "2014-05-03");
+insert into diaries values(1025, "2014-05-04");
+insert into diaries values(1026, "2014-05-05");
+insert into diaries values(1027, "2014-05-06");
+insert into diaries values(1028, "2014-05-07");
+insert into diaries values(1029, "2014-05-08");
+insert into diaries values(1030, "2014-05-09");
+insert into diaries values(1031, "2014-05-10");
+insert into diaries values(1032, "2014-05-11");
+insert into diaries values(1033, "2014-05-12");
+insert into diaries values(1034, "2014-05-13");
+insert into diaries values(1035, "2014-05-14");
+insert into diaries values(1036, "2014-05-15");
+insert into diaries values(1037, "2014-05-16");
+insert into diaries values(1038, "2014-05-17");
+insert into diaries values(1039, "2014-05-18");
+insert into diaries values(1040, "2014-05-19");
+insert into diaries values(1041, "2014-05-20");
+insert into diaries values(1042, "2014-05-21");
+insert into diaries values(1043, "2014-05-22");
+insert into diaries values(1044, "2014-05-23");
+insert into diaries values(1045, "2014-05-24");
+insert into diaries values(1046, "2014-05-25");
+insert into diaries values(1047, "2014-05-26");
+insert into diaries values(1048, "2014-05-27");
+insert into diaries values(1049, "2014-05-28");
+insert into diaries values(1050, "2014-05-29");
+insert into diaries values(1051, "2014-05-30");
+insert into diaries values(1052, "2014-05-31");
+insert into diaries values(1053, "2014-06-01");
+insert into diaries values(1054, "2014-06-02");
+insert into diaries values(1055, "2014-06-03");
+insert into diaries values(1056, "2014-06-04");
+insert into diaries values(1057, "2014-06-05");
+insert into diaries values(1058, "2014-06-06");
+insert into diaries values(1059, "2014-06-07");
+insert into diaries values(1060, "2014-06-08");
+insert into diaries values(1061, "2014-06-09");
+insert into diaries values(1062, "2014-06-10");
+insert into diaries values(1063, "2014-06-11");
+insert into diaries values(1064, "2014-06-12");
+insert into diaries values(1065, "2014-06-13");
+insert into diaries values(1066, "2014-06-14");
+insert into diaries values(1067, "2014-06-15");
+insert into diaries values(1068, "2014-06-16");
+insert into diaries values(1069, "2014-06-17");
+insert into diaries values(1070, "2014-06-18");
+insert into diaries values(1071, "2014-06-19");
+insert into diaries values(1072, "2014-06-20");
+insert into diaries values(1073, "2014-06-21");
+insert into diaries values(1074, "2014-06-22");
+insert into diaries values(1075, "2014-06-23");
+insert into diaries values(1076, "2014-06-24");
+insert into diaries values(1077, "2014-06-25");
+insert into diaries values(1078, "2014-06-26");
+insert into diaries values(1079, "2014-06-27");
+insert into diaries values(1080, "2014-06-28");
+insert into diaries values(1081, "2014-06-29");
+insert into diaries values(1082, "2014-06-30");
+insert into diaries values(1083, "2014-07-01");
+insert into diaries values(1084, "2014-07-02");
+insert into diaries values(1085, "2014-07-03");
+insert into diaries values(1086, "2014-07-04");
+insert into diaries values(1087, "2014-07-05");
+insert into diaries values(1088, "2014-07-06");
+insert into diaries values(1089, "2014-07-07");
+insert into diaries values(1090, "2014-07-08");
+insert into diaries values(1091, "2014-07-09");
+insert into diaries values(1092, "2014-07-10");
+insert into diaries values(1093, "2014-07-11");
+insert into diaries values(1094, "2014-07-12");
+insert into diaries values(1095, "2014-07-13");
+insert into diaries values(1096, "2014-07-14");
+insert into diaries values(1097, "2014-07-15");
+insert into diaries values(1098, "2014-07-16");
+insert into diaries values(1099, "2014-07-17");
+insert into diaries values(1100, "2014-07-18");
+insert into diaries values(1101, "2014-07-19");
+insert into diaries values(1102, "2014-07-20");
+insert into diaries values(1103, "2014-07-21");
+insert into diaries values(1104, "2014-07-22");
+insert into diaries values(1105, "2014-07-23");
+insert into diaries values(1106, "2014-07-24");
+insert into diaries values(1107, "2014-07-25");
+insert into diaries values(1108, "2014-07-26");
+insert into diaries values(1109, "2014-07-27");
+insert into diaries values(1110, "2014-07-28");
+insert into diaries values(1111, "2014-07-29");
+insert into diaries values(1112, "2014-07-30");
+insert into diaries values(1113, "2014-07-31");
+insert into diaries values(1114, "2014-08-01");
+insert into diaries values(1115, "2014-08-02");
+insert into diaries values(1116, "2014-08-03");
+insert into diaries values(1117, "2014-08-04");
+insert into diaries values(1118, "2014-08-05");
+insert into diaries values(1119, "2014-08-06");
+insert into diaries values(1120, "2014-08-07");
+insert into diaries values(1121, "2014-08-08");
+insert into diaries values(1122, "2014-08-09");
+insert into diaries values(1123, "2014-08-10");
+insert into diaries values(1124, "2014-08-11");
+insert into diaries values(1125, "2014-08-12");
+insert into diaries values(1126, "2014-08-13");
+insert into diaries values(1127, "2014-08-14");
+insert into diaries values(1128, "2014-08-15");
+insert into diaries values(1129, "2014-08-16");
+insert into diaries values(1130, "2014-08-17");
+insert into diaries values(1131, "2014-08-18");
+insert into diaries values(1132, "2014-08-19");
+insert into diaries values(1133, "2014-08-20");
+insert into diaries values(1134, "2014-08-21");
+insert into diaries values(1135, "2014-08-22");
+insert into diaries values(1136, "2014-08-23");
+insert into diaries values(1137, "2014-08-24");
+insert into diaries values(1138, "2014-08-25");
+insert into diaries values(1139, "2014-08-26");
+insert into diaries values(1140, "2014-08-27");
+insert into diaries values(1141, "2014-08-28");
+insert into diaries values(1142, "2014-08-29");
+insert into diaries values(1143, "2014-08-30");
+insert into diaries values(1144, "2014-08-31");
+insert into diaries values(1145, "2014-09-01");
+insert into diaries values(1146, "2014-09-02");
+insert into diaries values(1147, "2014-09-03");
+insert into diaries values(1148, "2014-09-04");
+insert into diaries values(1149, "2014-09-05");
+insert into diaries values(1150, "2014-09-06");
+insert into diaries values(1151, "2014-09-07");
+insert into diaries values(1152, "2014-09-08");
+insert into diaries values(1153, "2014-09-09");
+insert into diaries values(1154, "2014-09-10");
+insert into diaries values(1155, "2014-09-11");
+insert into diaries values(1156, "2014-09-12");
+insert into diaries values(1157, "2014-09-13");
+insert into diaries values(1158, "2014-09-14");
+insert into diaries values(1159, "2014-09-15");
+insert into diaries values(1160, "2014-09-16");
+insert into diaries values(1161, "2014-09-17");
+insert into diaries values(1162, "2014-09-18");
+insert into diaries values(1163, "2014-09-19");
+insert into diaries values(1164, "2014-09-20");
+insert into diaries values(1165, "2014-09-21");
+insert into diaries values(1166, "2014-09-22");
+insert into diaries values(1167, "2014-09-23");
+insert into diaries values(1168, "2014-09-24");
+insert into diaries values(1169, "2014-09-25");
+insert into diaries values(1170, "2014-09-26");
+insert into diaries values(1171, "2014-09-27");
+insert into diaries values(1172, "2014-09-28");
+insert into diaries values(1173, "2014-09-29");
+insert into diaries values(1174, "2014-09-30");
+insert into diaries values(1175, "2014-10-01");
+insert into diaries values(1176, "2014-10-02");
+insert into diaries values(1177, "2014-10-03");
+insert into diaries values(1178, "2014-10-04");
+insert into diaries values(1179, "2014-10-05");
+insert into diaries values(1180, "2014-10-06");
+insert into diaries values(1181, "2014-10-07");
+insert into diaries values(1182, "2014-10-08");
+insert into diaries values(1183, "2014-10-09");
+insert into diaries values(1184, "2014-10-10");
+insert into diaries values(1185, "2014-10-11");
+insert into diaries values(1186, "2014-10-12");
+insert into diaries values(1187, "2014-10-13");
+insert into diaries values(1188, "2014-10-14");
+insert into diaries values(1189, "2014-10-15");
+insert into diaries values(1190, "2014-10-16");
+insert into diaries values(1191, "2014-10-17");
+insert into diaries values(1192, "2014-10-18");
+insert into diaries values(1193, "2014-10-19");
+insert into diaries values(1194, "2014-10-20");
+insert into diaries values(1195, "2014-10-21");
+insert into diaries values(1196, "2014-10-22");
+insert into diaries values(1197, "2014-10-23");
+insert into diaries values(1198, "2014-10-24");
+insert into diaries values(1199, "2014-10-25");
+insert into diaries values(1200, "2014-10-26");
+insert into diaries values(1201, "2014-10-27");
+insert into diaries values(1202, "2014-10-28");
+insert into diaries values(1203, "2014-10-29");
+insert into diaries values(1204, "2014-10-30");
+insert into diaries values(1205, "2014-10-31");
+insert into diaries values(1206, "2014-11-01");
+insert into diaries values(1207, "2014-11-02");
+insert into diaries values(1208, "2014-11-03");
+insert into diaries values(1209, "2014-11-04");
+insert into diaries values(1210, "2014-11-05");
+insert into diaries values(1211, "2014-11-06");
+insert into diaries values(1212, "2014-11-07");
+insert into diaries values(1213, "2014-11-08");
+insert into diaries values(1214, "2014-11-09");
+insert into diaries values(1215, "2014-11-10");
+insert into diaries values(1216, "2014-11-11");
+insert into diaries values(1217, "2014-11-12");
+insert into diaries values(1218, "2014-11-13");
+insert into diaries values(1219, "2014-11-14");
+insert into diaries values(1220, "2014-11-15");
+insert into diaries values(1221, "2014-11-16");
+insert into diaries values(1222, "2014-11-17");
+insert into diaries values(1223, "2014-11-18");
+insert into diaries values(1224, "2014-11-19");
+insert into diaries values(1225, "2014-11-20");
+insert into diaries values(1226, "2014-11-21");
+insert into diaries values(1227, "2014-11-22");
+insert into diaries values(1228, "2014-11-23");
+insert into diaries values(1229, "2014-11-24");
+insert into diaries values(1230, "2014-11-25");
+insert into diaries values(1231, "2014-11-26");
+insert into diaries values(1232, "2014-11-27");
+insert into diaries values(1233, "2014-11-28");
+insert into diaries values(1234, "2014-11-29");
+insert into diaries values(1235, "2014-11-30");
+insert into diaries values(1236, "2014-12-01");
+insert into diaries values(1237, "2014-12-02");
+insert into diaries values(1238, "2014-12-03");
+insert into diaries values(1239, "2014-12-04");
+insert into diaries values(1240, "2014-12-05");
+insert into diaries values(1241, "2014-12-06");
+insert into diaries values(1242, "2014-12-07");
+insert into diaries values(1243, "2014-12-08");
+insert into diaries values(1244, "2014-12-09");
+insert into diaries values(1245, "2014-12-10");
+insert into diaries values(1246, "2014-12-11");
+insert into diaries values(1247, "2014-12-12");
+insert into diaries values(1248, "2014-12-13");
+insert into diaries values(1249, "2014-12-14");
+insert into diaries values(1250, "2014-12-15");
+insert into diaries values(1251, "2014-12-16");
+insert into diaries values(1252, "2014-12-17");
+insert into diaries values(1253, "2014-12-18");
+insert into diaries values(1254, "2014-12-19");
+insert into diaries values(1255, "2014-12-20");
+insert into diaries values(1256, "2014-12-21");
+insert into diaries values(1257, "2014-12-22");
+insert into diaries values(1258, "2014-12-23");
+insert into diaries values(1259, "2014-12-24");
+insert into diaries values(1260, "2014-12-25");
+insert into diaries values(1261, "2014-12-26");
+insert into diaries values(1262, "2014-12-27");
+insert into diaries values(1263, "2014-12-28");
+insert into diaries values(1264, "2014-12-29");
+insert into diaries values(1265, "2014-12-30");
+insert into diaries values(1266, "2014-12-31");
+insert into diaries values(1267, "2015-01-01");
+insert into diaries values(1268, "2015-01-02");
+insert into diaries values(1269, "2015-01-03");
+insert into diaries values(1270, "2015-01-04");
+insert into diaries values(1271, "2015-01-05");
+insert into diaries values(1272, "2015-01-06");
+insert into diaries values(1273, "2015-01-07");
+insert into diaries values(1274, "2015-01-08");
+insert into diaries values(1275, "2015-01-09");
+insert into diaries values(1276, "2015-01-10");
+insert into diaries values(1277, "2015-01-11");
+insert into diaries values(1278, "2015-01-12");
+insert into diaries values(1279, "2015-01-13");
+insert into diaries values(1280, "2015-01-14");
+insert into diaries values(1281, "2015-01-15");
+insert into diaries values(1282, "2015-01-16");
+insert into diaries values(1283, "2015-01-17");
+insert into diaries values(1284, "2015-01-18");
+insert into diaries values(1285, "2015-01-19");
+insert into diaries values(1286, "2015-01-20");
+insert into diaries values(1287, "2015-01-21");
+insert into diaries values(1288, "2015-01-22");
+insert into diaries values(1289, "2015-01-23");
+insert into diaries values(1290, "2015-01-24");
+insert into diaries values(1291, "2015-01-25");
+insert into diaries values(1292, "2015-01-26");
+insert into diaries values(1293, "2015-01-27");
+insert into diaries values(1294, "2015-01-28");
+insert into diaries values(1295, "2015-01-29");
+insert into diaries values(1296, "2015-01-30");
+insert into diaries values(1297, "2015-01-31");
+insert into diaries values(1298, "2015-02-01");
+insert into diaries values(1299, "2015-02-02");
+insert into diaries values(1300, "2015-02-03");
+insert into diaries values(1301, "2015-02-04");
+insert into diaries values(1302, "2015-02-05");
+insert into diaries values(1303, "2015-02-06");
+insert into diaries values(1304, "2015-02-07");
+insert into diaries values(1305, "2015-02-08");
+insert into diaries values(1306, "2015-02-09");
+insert into diaries values(1307, "2015-02-10");
+insert into diaries values(1308, "2015-02-11");
+insert into diaries values(1309, "2015-02-12");
+insert into diaries values(1310, "2015-02-13");
+insert into diaries values(1311, "2015-02-14");
+insert into diaries values(1312, "2015-02-15");
+insert into diaries values(1313, "2015-02-16");
+insert into diaries values(1314, "2015-02-17");
+insert into diaries values(1315, "2015-02-18");
+insert into diaries values(1316, "2015-02-19");
+insert into diaries values(1317, "2015-02-20");
+insert into diaries values(1318, "2015-02-21");
+insert into diaries values(1319, "2015-02-22");
+insert into diaries values(1320, "2015-02-23");
+insert into diaries values(1321, "2015-02-24");
+insert into diaries values(1322, "2015-02-25");
+insert into diaries values(1323, "2015-02-26");
+insert into diaries values(1324, "2015-02-27");
+insert into diaries values(1325, "2015-02-28");
+insert into diaries values(1326, "2015-03-01");
+insert into diaries values(1327, "2015-03-02");
+insert into diaries values(1328, "2015-03-03");
+insert into diaries values(1329, "2015-03-04");
+insert into diaries values(1330, "2015-03-05");
+insert into diaries values(1331, "2015-03-06");
+insert into diaries values(1332, "2015-03-07");
+insert into diaries values(1333, "2015-03-08");
+insert into diaries values(1334, "2015-03-09");
+insert into diaries values(1335, "2015-03-10");
+insert into diaries values(1336, "2015-03-11");
+insert into diaries values(1337, "2015-03-12");
+insert into diaries values(1338, "2015-03-13");
+insert into diaries values(1339, "2015-03-14");
+insert into diaries values(1340, "2015-03-15");
+insert into diaries values(1341, "2015-03-16");
+insert into diaries values(1342, "2015-03-17");
+insert into diaries values(1343, "2015-03-18");
+insert into diaries values(1344, "2015-03-19");
+insert into diaries values(1345, "2015-03-20");
+insert into diaries values(1346, "2015-03-21");
+insert into diaries values(1347, "2015-03-22");
+insert into diaries values(1348, "2015-03-23");
+insert into diaries values(1349, "2015-03-24");
+insert into diaries values(1350, "2015-03-25");
+insert into diaries values(1351, "2015-03-26");
+insert into diaries values(1352, "2015-03-27");
+insert into diaries values(1353, "2015-03-28");
+insert into diaries values(1354, "2015-03-29");
+insert into diaries values(1355, "2015-03-30");
+insert into diaries values(1356, "2015-03-31");
+insert into diaries values(1357, "2015-04-01");
+insert into diaries values(1358, "2015-04-02");
+insert into diaries values(1359, "2015-04-03");
+insert into diaries values(1360, "2015-04-04");
+insert into diaries values(1361, "2015-04-05");
+insert into diaries values(1362, "2015-04-06");
+insert into diaries values(1363, "2015-04-07");
+insert into diaries values(1364, "2015-04-08");
+insert into diaries values(1365, "2015-04-09");
+insert into diaries values(1366, "2015-04-10");
+insert into diaries values(1367, "2015-04-11");
+insert into diaries values(1368, "2015-04-12");
+insert into diaries values(1369, "2015-04-13");
+insert into diaries values(1370, "2015-04-14");
+insert into diaries values(1371, "2015-04-15");
+insert into diaries values(1372, "2015-04-16");
+insert into diaries values(1373, "2015-04-17");
+insert into diaries values(1374, "2015-04-18");
+insert into diaries values(1375, "2015-04-19");
+insert into diaries values(1376, "2015-04-20");
+insert into diaries values(1377, "2015-04-21");
+insert into diaries values(1378, "2015-04-22");
+insert into diaries values(1379, "2015-04-23");
+insert into diaries values(1380, "2015-04-24");
+insert into diaries values(1381, "2015-04-25");
+insert into diaries values(1382, "2015-04-26");
+insert into diaries values(1383, "2015-04-27");
+insert into diaries values(1384, "2015-04-28");
+insert into diaries values(1385, "2015-04-29");
+insert into diaries values(1386, "2015-04-30");
+insert into diaries values(1387, "2015-05-01");
+insert into diaries values(1388, "2015-05-02");
+insert into diaries values(1389, "2015-05-03");
+insert into diaries values(1390, "2015-05-04");
+insert into diaries values(1391, "2015-05-05");
+insert into diaries values(1392, "2015-05-06");
+insert into diaries values(1393, "2015-05-07");
+insert into diaries values(1394, "2015-05-08");
+insert into diaries values(1395, "2015-05-09");
+insert into diaries values(1396, "2015-05-10");
+insert into diaries values(1397, "2015-05-11");
+insert into diaries values(1398, "2015-05-12");
+insert into diaries values(1399, "2015-05-13");
+insert into diaries values(1400, "2015-05-14");
+insert into diaries values(1401, "2015-05-15");
+insert into diaries values(1402, "2015-05-16");
+insert into diaries values(1403, "2015-05-17");
+insert into diaries values(1404, "2015-05-18");
+insert into diaries values(1405, "2015-05-19");
+insert into diaries values(1406, "2015-05-20");
+insert into diaries values(1407, "2015-05-21");
+insert into diaries values(1408, "2015-05-22");
+insert into diaries values(1409, "2015-05-23");
+insert into diaries values(1410, "2015-05-24");
+insert into diaries values(1411, "2015-05-25");
+insert into diaries values(1412, "2015-05-26");
+insert into diaries values(1413, "2015-05-27");
+insert into diaries values(1414, "2015-05-28");
+insert into diaries values(1415, "2015-05-29");
+insert into diaries values(1416, "2015-05-30");
+insert into diaries values(1417, "2015-05-31");
+insert into diaries values(1418, "2015-06-01");
+insert into diaries values(1419, "2015-06-02");
+insert into diaries values(1420, "2015-06-03");
+insert into diaries values(1421, "2015-06-04");
+insert into diaries values(1422, "2015-06-05");
+insert into diaries values(1423, "2015-06-06");
+insert into diaries values(1424, "2015-06-07");
+insert into diaries values(1425, "2015-06-08");
+insert into diaries values(1426, "2015-06-09");
+insert into diaries values(1427, "2015-06-10");
+insert into diaries values(1428, "2015-06-11");
+insert into diaries values(1429, "2015-06-12");
+insert into diaries values(1430, "2015-06-13");
+insert into diaries values(1431, "2015-06-14");
+insert into diaries values(1432, "2015-06-15");
+insert into diaries values(1433, "2015-06-16");
+insert into diaries values(1434, "2015-06-17");
+insert into diaries values(1435, "2015-06-18");
+insert into diaries values(1436, "2015-06-19");
+insert into diaries values(1437, "2015-06-20");
+insert into diaries values(1438, "2015-06-21");
+insert into diaries values(1439, "2015-06-22");
+insert into diaries values(1440, "2015-06-23");
+insert into diaries values(1441, "2015-06-24");
+insert into diaries values(1442, "2015-06-25");
+insert into diaries values(1443, "2015-06-26");
+insert into diaries values(1444, "2015-06-27");
+insert into diaries values(1445, "2015-06-28");
+insert into diaries values(1446, "2015-06-29");
+insert into diaries values(1447, "2015-06-30");
+insert into diaries values(1448, "2015-07-01");
+insert into diaries values(1449, "2015-07-02");
+insert into diaries values(1450, "2015-07-03");
+insert into diaries values(1451, "2015-07-04");
+insert into diaries values(1452, "2015-07-05");
+insert into diaries values(1453, "2015-07-06");
+insert into diaries values(1454, "2015-07-07");
+insert into diaries values(1455, "2015-07-08");
+insert into diaries values(1456, "2015-07-09");
+insert into diaries values(1457, "2015-07-10");
+insert into diaries values(1458, "2015-07-11");
+insert into diaries values(1459, "2015-07-12");
+insert into diaries values(1460, "2015-07-13");
+insert into diaries values(1461, "2015-07-14");
+insert into diaries values(1462, "2015-07-15");
+insert into diaries values(1463, "2015-07-16");
+insert into diaries values(1464, "2015-07-17");
+insert into diaries values(1465, "2015-07-18");
+insert into diaries values(1466, "2015-07-19");
+insert into diaries values(1467, "2015-07-20");
+insert into diaries values(1468, "2015-07-21");
+insert into diaries values(1469, "2015-07-22");
+insert into diaries values(1470, "2015-07-23");
+insert into diaries values(1471, "2015-07-24");
+insert into diaries values(1472, "2015-07-25");
+insert into diaries values(1473, "2015-07-26");
+insert into diaries values(1474, "2015-07-27");
+insert into diaries values(1475, "2015-07-28");
+insert into diaries values(1476, "2015-07-29");
+insert into diaries values(1477, "2015-07-30");
+insert into diaries values(1478, "2015-07-31");
+insert into diaries values(1479, "2015-08-01");
+insert into diaries values(1480, "2015-08-02");
+insert into diaries values(1481, "2015-08-03");
+insert into diaries values(1482, "2015-08-04");
+insert into diaries values(1483, "2015-08-05");
+insert into diaries values(1484, "2015-08-06");
+insert into diaries values(1485, "2015-08-07");
+insert into diaries values(1486, "2015-08-08");
+insert into diaries values(1487, "2015-08-09");
+insert into diaries values(1488, "2015-08-10");
+insert into diaries values(1489, "2015-08-11");
+insert into diaries values(1490, "2015-08-12");
+insert into diaries values(1491, "2015-08-13");
+insert into diaries values(1492, "2015-08-14");
+insert into diaries values(1493, "2015-08-15");
+insert into diaries values(1494, "2015-08-16");
+insert into diaries values(1495, "2015-08-17");
+insert into diaries values(1496, "2015-08-18");
+insert into diaries values(1497, "2015-08-19");
+insert into diaries values(1498, "2015-08-20");
+insert into diaries values(1499, "2015-08-21");
+insert into diaries values(1500, "2015-08-22");
+insert into diaries values(1501, "2015-08-23");
+insert into diaries values(1502, "2015-08-24");
+insert into diaries values(1503, "2015-08-25");
+insert into diaries values(1504, "2015-08-26");
+insert into diaries values(1505, "2015-08-27");
+insert into diaries values(1506, "2015-08-28");
+insert into diaries values(1507, "2015-08-29");
+insert into diaries values(1508, "2015-08-30");
+insert into diaries values(1509, "2015-08-31");
+insert into diaries values(1510, "2015-09-01");
+insert into diaries values(1511, "2015-09-02");
+insert into diaries values(1512, "2015-09-03");
+insert into diaries values(1513, "2015-09-04");
+insert into diaries values(1514, "2015-09-05");
+insert into diaries values(1515, "2015-09-06");
+insert into diaries values(1516, "2015-09-07");
+insert into diaries values(1517, "2015-09-08");
+insert into diaries values(1518, "2015-09-09");
+insert into diaries values(1519, "2015-09-10");
+insert into diaries values(1520, "2015-09-11");
+insert into diaries values(1521, "2015-09-12");
+insert into diaries values(1522, "2015-09-13");
+insert into diaries values(1523, "2015-09-14");
+insert into diaries values(1524, "2015-09-15");
+insert into diaries values(1525, "2015-09-16");
+insert into diaries values(1526, "2015-09-17");
+insert into diaries values(1527, "2015-09-18");
+insert into diaries values(1528, "2015-09-19");
+insert into diaries values(1529, "2015-09-20");
+insert into diaries values(1530, "2015-09-21");
+insert into diaries values(1531, "2015-09-22");
+insert into diaries values(1532, "2015-09-23");
+insert into diaries values(1533, "2015-09-24");
+insert into diaries values(1534, "2015-09-25");
+insert into diaries values(1535, "2015-09-26");
+insert into diaries values(1536, "2015-09-27");
+insert into diaries values(1537, "2015-09-28");
+insert into diaries values(1538, "2015-09-29");
+insert into diaries values(1539, "2015-09-30");
+insert into diaries values(1540, "2015-10-01");
+insert into diaries values(1541, "2015-10-02");
+insert into diaries values(1542, "2015-10-03");
+insert into diaries values(1543, "2015-10-04");
+insert into diaries values(1544, "2015-10-05");
+insert into diaries values(1545, "2015-10-06");
+insert into diaries values(1546, "2015-10-07");
+insert into diaries values(1547, "2015-10-08");
+insert into diaries values(1548, "2015-10-09");
+insert into diaries values(1549, "2015-10-10");
+insert into diaries values(1550, "2015-10-11");
+insert into diaries values(1551, "2015-10-12");
+insert into diaries values(1552, "2015-10-13");
+insert into diaries values(1553, "2015-10-14");
+insert into diaries values(1554, "2015-10-15");
+insert into diaries values(1555, "2015-10-16");
+insert into diaries values(1556, "2015-10-17");
+insert into diaries values(1557, "2015-10-18");
+insert into diaries values(1558, "2015-10-19");
+insert into diaries values(1559, "2015-10-20");
+insert into diaries values(1560, "2015-10-21");
+insert into diaries values(1561, "2015-10-22");
+insert into diaries values(1562, "2015-10-23");
+insert into diaries values(1563, "2015-10-24");
+insert into diaries values(1564, "2015-10-25");
+insert into diaries values(1565, "2015-10-26");
+insert into diaries values(1566, "2015-10-27");
+insert into diaries values(1567, "2015-10-28");
+insert into diaries values(1568, "2015-10-29");
+insert into diaries values(1569, "2015-10-30");
+insert into diaries values(1570, "2015-10-31");
+insert into diaries values(1571, "2015-11-01");
+insert into diaries values(1572, "2015-11-02");
+insert into diaries values(1573, "2015-11-03");
+insert into diaries values(1574, "2015-11-04");
+insert into diaries values(1575, "2015-11-05");
+insert into diaries values(1576, "2015-11-06");
+insert into diaries values(1577, "2015-11-07");
+insert into diaries values(1578, "2015-11-08");
+insert into diaries values(1579, "2015-11-09");
+insert into diaries values(1580, "2015-11-10");
+insert into diaries values(1581, "2015-11-11");
+insert into diaries values(1582, "2015-11-12");
+insert into diaries values(1583, "2015-11-13");
+insert into diaries values(1584, "2015-11-14");
+insert into diaries values(1585, "2015-11-15");
+insert into diaries values(1586, "2015-11-16");
+insert into diaries values(1587, "2015-11-17");
+insert into diaries values(1588, "2015-11-18");
+insert into diaries values(1589, "2015-11-19");
+insert into diaries values(1590, "2015-11-20");
+insert into diaries values(1591, "2015-11-21");
+insert into diaries values(1592, "2015-11-22");
+insert into diaries values(1593, "2015-11-23");
+insert into diaries values(1594, "2015-11-24");
+insert into diaries values(1595, "2015-11-25");
+insert into diaries values(1596, "2015-11-26");
+insert into diaries values(1597, "2015-11-27");
+insert into diaries values(1598, "2015-11-28");
+insert into diaries values(1599, "2015-11-29");
+insert into diaries values(1600, "2015-11-30");
+insert into diaries values(1601, "2015-12-01");
+insert into diaries values(1602, "2015-12-02");
+insert into diaries values(1603, "2015-12-03");
+insert into diaries values(1604, "2015-12-04");
+insert into diaries values(1605, "2015-12-05");
+insert into diaries values(1606, "2015-12-06");
+insert into diaries values(1607, "2015-12-07");
+insert into diaries values(1608, "2015-12-08");
+insert into diaries values(1609, "2015-12-09");
+insert into diaries values(1610, "2015-12-10");
+insert into diaries values(1611, "2015-12-11");
+insert into diaries values(1612, "2015-12-12");
+insert into diaries values(1613, "2015-12-13");
+insert into diaries values(1614, "2015-12-14");
+insert into diaries values(1615, "2015-12-15");
+insert into diaries values(1616, "2015-12-16");
+insert into diaries values(1617, "2015-12-17");
+insert into diaries values(1618, "2015-12-18");
+insert into diaries values(1619, "2015-12-19");
+insert into diaries values(1620, "2015-12-20");
+insert into diaries values(1621, "2015-12-21");
+insert into diaries values(1622, "2015-12-22");
+insert into diaries values(1623, "2015-12-23");
+insert into diaries values(1624, "2015-12-24");
+insert into diaries values(1625, "2015-12-25");
+insert into diaries values(1626, "2015-12-26");
+insert into diaries values(1627, "2015-12-27");
+insert into diaries values(1628, "2015-12-28");
+insert into diaries values(1629, "2015-12-29");
+insert into diaries values(1630, "2015-12-30");
+insert into diaries values(1631, "2015-12-31");
+insert into diaries values(1632, "2016-01-01");
+insert into diaries values(1633, "2016-01-02");
+insert into diaries values(1634, "2016-01-03");
+insert into diaries values(1635, "2016-01-04");
+insert into diaries values(1636, "2016-01-05");
+insert into diaries values(1637, "2016-01-06");
+insert into diaries values(1638, "2016-01-07");
+insert into diaries values(1639, "2016-01-08");
+insert into diaries values(1640, "2016-01-09");
+insert into diaries values(1641, "2016-01-10");
+insert into diaries values(1642, "2016-01-11");
+insert into diaries values(1643, "2016-01-12");
+insert into diaries values(1644, "2016-01-13");
+insert into diaries values(1645, "2016-01-14");
+insert into diaries values(1646, "2016-01-15");
+insert into diaries values(1647, "2016-01-16");
+insert into diaries values(1648, "2016-01-17");
+insert into diaries values(1649, "2016-01-18");
+insert into diaries values(1650, "2016-01-19");
+insert into diaries values(1651, "2016-01-20");
+insert into diaries values(1652, "2016-01-21");
+insert into diaries values(1653, "2016-01-22");
+insert into diaries values(1654, "2016-01-23");
+insert into diaries values(1655, "2016-01-24");
+insert into diaries values(1656, "2016-01-25");
+insert into diaries values(1657, "2016-01-26");
+insert into diaries values(1658, "2016-01-27");
+insert into diaries values(1659, "2016-01-28");
+insert into diaries values(1660, "2016-01-29");
+insert into diaries values(1661, "2016-01-30");
+insert into diaries values(1662, "2016-01-31");
+insert into diaries values(1663, "2016-02-01");
+insert into diaries values(1664, "2016-02-02");
+insert into diaries values(1665, "2016-02-03");
+insert into diaries values(1666, "2016-02-04");
+insert into diaries values(1667, "2016-02-05");
+insert into diaries values(1668, "2016-02-06");
+insert into diaries values(1669, "2016-02-07");
+insert into diaries values(1670, "2016-02-08");
+insert into diaries values(1671, "2016-02-09");
+insert into diaries values(1672, "2016-02-10");
+insert into diaries values(1673, "2016-02-11");
+insert into diaries values(1674, "2016-02-12");
+insert into diaries values(1675, "2016-02-13");
+insert into diaries values(1676, "2016-02-14");
+insert into diaries values(1677, "2016-02-15");
+insert into diaries values(1678, "2016-02-16");
+insert into diaries values(1679, "2016-02-17");
+insert into diaries values(1680, "2016-02-18");
+insert into diaries values(1681, "2016-02-19");
+insert into diaries values(1682, "2016-02-20");
+insert into diaries values(1683, "2016-02-21");
+insert into diaries values(1684, "2016-02-22");
+insert into diaries values(1685, "2016-02-23");
+insert into diaries values(1686, "2016-02-24");
+insert into diaries values(1687, "2016-02-25");
+insert into diaries values(1688, "2016-02-26");
+insert into diaries values(1689, "2016-02-27");
+insert into diaries values(1690, "2016-02-28");
+insert into diaries values(1691, "2016-02-29");
+insert into diaries values(1692, "2016-03-01");
+insert into diaries values(1693, "2016-03-02");
+insert into diaries values(1694, "2016-03-03");
+insert into diaries values(1695, "2016-03-04");
+insert into diaries values(1696, "2016-03-05");
+insert into diaries values(1697, "2016-03-06");
+insert into diaries values(1698, "2016-03-07");
+insert into diaries values(1699, "2016-03-08");
+insert into diaries values(1700, "2016-03-09");
+insert into diaries values(1701, "2016-03-10");
+insert into diaries values(1702, "2016-03-11");
+insert into diaries values(1703, "2016-03-12");
+insert into diaries values(1704, "2016-03-13");
+insert into diaries values(1705, "2016-03-14");
+insert into diaries values(1706, "2016-03-15");
+insert into diaries values(1707, "2016-03-16");
+insert into diaries values(1708, "2016-03-17");
+insert into diaries values(1709, "2016-03-18");
+insert into diaries values(1710, "2016-03-19");
+insert into diaries values(1711, "2016-03-20");
+insert into diaries values(1712, "2016-03-21");
+insert into diaries values(1713, "2016-03-22");
+insert into diaries values(1714, "2016-03-23");
+insert into diaries values(1715, "2016-03-24");
+insert into diaries values(1716, "2016-03-25");
+insert into diaries values(1717, "2016-03-26");
+insert into diaries values(1718, "2016-03-27");
+insert into diaries values(1719, "2016-03-28");
+insert into diaries values(1720, "2016-03-29");
+insert into diaries values(1721, "2016-03-30");
+insert into diaries values(1722, "2016-03-31");
+insert into diaries values(1723, "2016-04-01");
+insert into diaries values(1724, "2016-04-02");
+insert into diaries values(1725, "2016-04-03");
+insert into diaries values(1726, "2016-04-04");
+insert into diaries values(1727, "2016-04-05");
+insert into diaries values(1728, "2016-04-06");
+insert into diaries values(1729, "2016-04-07");
+insert into diaries values(1730, "2016-04-08");
+insert into diaries values(1731, "2016-04-09");
+insert into diaries values(1732, "2016-04-10");
+insert into diaries values(1733, "2016-04-11");
+insert into diaries values(1734, "2016-04-12");
+insert into diaries values(1735, "2016-04-13");
+insert into diaries values(1736, "2016-04-14");
+insert into diaries values(1737, "2016-04-15");
+insert into diaries values(1738, "2016-04-16");
+insert into diaries values(1739, "2016-04-17");
+insert into diaries values(1740, "2016-04-18");
+insert into diaries values(1741, "2016-04-19");
+insert into diaries values(1742, "2016-04-20");
+insert into diaries values(1743, "2016-04-21");
+insert into diaries values(1744, "2016-04-22");
+insert into diaries values(1745, "2016-04-23");
+insert into diaries values(1746, "2016-04-24");
+insert into diaries values(1747, "2016-04-25");
+insert into diaries values(1748, "2016-04-26");
+insert into diaries values(1749, "2016-04-27");
+insert into diaries values(1750, "2016-04-28");
+insert into diaries values(1751, "2016-04-29");
+insert into diaries values(1752, "2016-04-30");
+insert into diaries values(1753, "2016-05-01");
+insert into diaries values(1754, "2016-05-02");
+insert into diaries values(1755, "2016-05-03");
+insert into diaries values(1756, "2016-05-04");
+insert into diaries values(1757, "2016-05-05");
+insert into diaries values(1758, "2016-05-06");
+insert into diaries values(1759, "2016-05-07");
+insert into diaries values(1760, "2016-05-08");
+insert into diaries values(1761, "2016-05-09");
+insert into diaries values(1762, "2016-05-10");
+insert into diaries values(1763, "2016-05-11");
+insert into diaries values(1764, "2016-05-12");
+insert into diaries values(1765, "2016-05-13");
+insert into diaries values(1766, "2016-05-14");
+insert into diaries values(1767, "2016-05-15");
+insert into diaries values(1768, "2016-05-16");
+insert into diaries values(1769, "2016-05-17");
+insert into diaries values(1770, "2016-05-18");
+insert into diaries values(1771, "2016-05-19");
+insert into diaries values(1772, "2016-05-20");
+insert into diaries values(1773, "2016-05-21");
+insert into diaries values(1774, "2016-05-22");
+insert into diaries values(1775, "2016-05-23");
+insert into diaries values(1776, "2016-05-24");
+insert into diaries values(1777, "2016-05-25");
+insert into diaries values(1778, "2016-05-26");
+insert into diaries values(1779, "2016-05-27");
+insert into diaries values(1780, "2016-05-28");
+insert into diaries values(1781, "2016-05-29");
+insert into diaries values(1782, "2016-05-30");
+insert into diaries values(1783, "2016-05-31");
+insert into diaries values(1784, "2016-06-01");
+insert into diaries values(1785, "2016-06-02");
+insert into diaries values(1786, "2016-06-03");
+insert into diaries values(1787, "2016-06-04");
+insert into diaries values(1788, "2016-06-05");
+insert into diaries values(1789, "2016-06-06");
+insert into diaries values(1790, "2016-06-07");
+insert into diaries values(1791, "2016-06-08");
+insert into diaries values(1792, "2016-06-09");
+insert into diaries values(1793, "2016-06-10");
+insert into diaries values(1794, "2016-06-11");
+insert into diaries values(1795, "2016-06-12");
+insert into diaries values(1796, "2016-06-13");
+insert into diaries values(1797, "2016-06-14");
+insert into diaries values(1798, "2016-06-15");
+insert into diaries values(1799, "2016-06-16");
+insert into diaries values(1800, "2016-06-17");
+insert into diaries values(1801, "2016-06-18");
+insert into diaries values(1802, "2016-06-19");
+insert into diaries values(1803, "2016-06-20");
+insert into diaries values(1804, "2016-06-21");
+insert into diaries values(1805, "2016-06-22");
+insert into diaries values(1806, "2016-06-23");
+insert into diaries values(1807, "2016-06-24");
+insert into diaries values(1808, "2016-06-25");
+insert into diaries values(1809, "2016-06-26");
+insert into diaries values(1810, "2016-06-27");
+insert into diaries values(1811, "2016-06-28");
+insert into diaries values(1812, "2016-06-29");
+insert into diaries values(1813, "2016-06-30");
+insert into diaries values(1814, "2016-07-01");
+insert into diaries values(1815, "2016-07-02");
+insert into diaries values(1816, "2016-07-03");
+insert into diaries values(1817, "2016-07-04");
+insert into diaries values(1818, "2016-07-05");
+insert into diaries values(1819, "2016-07-06");
+insert into diaries values(1820, "2016-07-07");
+insert into diaries values(1821, "2016-07-08");
+insert into diaries values(1822, "2016-07-09");
+insert into diaries values(1823, "2016-07-10");
+insert into diaries values(1824, "2016-07-11");
+insert into diaries values(1825, "2016-07-12");
+insert into diaries values(1826, "2016-07-13");
+insert into diaries values(1827, "2016-07-14");
+insert into diaries values(1828, "2016-07-15");
+insert into diaries values(1829, "2016-07-16");
+insert into diaries values(1830, "2016-07-17");
+insert into diaries values(1831, "2016-07-18");
+insert into diaries values(1832, "2016-07-19");
+insert into diaries values(1833, "2016-07-20");
+insert into diaries values(1834, "2016-07-21");
+insert into diaries values(1835, "2016-07-22");
+insert into diaries values(1836, "2016-07-23");
+insert into diaries values(1837, "2016-07-24");
+insert into diaries values(1838, "2016-07-25");
+insert into diaries values(1839, "2016-07-26");
+insert into diaries values(1840, "2016-07-27");
+insert into diaries values(1841, "2016-07-28");
+insert into diaries values(1842, "2016-07-29");
+insert into diaries values(1843, "2016-07-30");
+insert into diaries values(1844, "2016-07-31");
+insert into diaries values(1845, "2016-08-01");
+insert into diaries values(1846, "2016-08-02");
+insert into diaries values(1847, "2016-08-03");
+insert into diaries values(1848, "2016-08-04");
+insert into diaries values(1849, "2016-08-05");
+insert into diaries values(1850, "2016-08-06");
+insert into diaries values(1851, "2016-08-07");
+insert into diaries values(1852, "2016-08-08");
+insert into diaries values(1853, "2016-08-09");
+insert into diaries values(1854, "2016-08-10");
+insert into diaries values(1855, "2016-08-11");
+insert into diaries values(1856, "2016-08-12");
+insert into diaries values(1857, "2016-08-13");
+insert into diaries values(1858, "2016-08-14");
+insert into diaries values(1859, "2016-08-15");
+insert into diaries values(1860, "2016-08-16");
+insert into diaries values(1861, "2016-08-17");
+insert into diaries values(1862, "2016-08-18");
+insert into diaries values(1863, "2016-08-19");
+insert into diaries values(1864, "2016-08-20");
+insert into diaries values(1865, "2016-08-21");
+insert into diaries values(1866, "2016-08-22");
+insert into diaries values(1867, "2016-08-23");
+insert into diaries values(1868, "2016-08-24");
+insert into diaries values(1869, "2016-08-25");
+insert into diaries values(1870, "2016-08-26");
+insert into diaries values(1871, "2016-08-27");
+insert into diaries values(1872, "2016-08-28");
+insert into diaries values(1873, "2016-08-29");
+insert into diaries values(1874, "2016-08-30");
+insert into diaries values(1875, "2016-08-31");
+insert into diaries values(1876, "2016-09-01");
+insert into diaries values(1877, "2016-09-02");
+insert into diaries values(1878, "2016-09-03");
+insert into diaries values(1879, "2016-09-04");
+insert into diaries values(1880, "2016-09-05");
+insert into diaries values(1881, "2016-09-06");
+insert into diaries values(1882, "2016-09-07");
+insert into diaries values(1883, "2016-09-08");
+insert into diaries values(1884, "2016-09-09");
+insert into diaries values(1885, "2016-09-10");
+insert into diaries values(1886, "2016-09-11");
+insert into diaries values(1887, "2016-09-12");
+insert into diaries values(1888, "2016-09-13");
+insert into diaries values(1889, "2016-09-14");
+insert into diaries values(1890, "2016-09-15");
+insert into diaries values(1891, "2016-09-16");
+insert into diaries values(1892, "2016-09-17");
+insert into diaries values(1893, "2016-09-18");
+insert into diaries values(1894, "2016-09-19");
+insert into diaries values(1895, "2016-09-20");
+insert into diaries values(1896, "2016-09-21");
+insert into diaries values(1897, "2016-09-22");
+insert into diaries values(1898, "2016-09-23");
+insert into diaries values(1899, "2016-09-24");
+insert into diaries values(1900, "2016-09-25");
+insert into diaries values(1901, "2016-09-26");
+insert into diaries values(1902, "2016-09-27");
+insert into diaries values(1903, "2016-09-28");
+insert into diaries values(1904, "2016-09-29");
+insert into diaries values(1905, "2016-09-30");
+insert into diaries values(1906, "2016-10-01");
+insert into diaries values(1907, "2016-10-02");
+insert into diaries values(1908, "2016-10-03");
+insert into diaries values(1909, "2016-10-04");
+insert into diaries values(1910, "2016-10-05");
+insert into diaries values(1911, "2016-10-06");
+insert into diaries values(1912, "2016-10-07");
+insert into diaries values(1913, "2016-10-08");
+insert into diaries values(1914, "2016-10-09");
+insert into diaries values(1915, "2016-10-10");
+insert into diaries values(1916, "2016-10-11");
+insert into diaries values(1917, "2016-10-12");
+insert into diaries values(1918, "2016-10-13");
+insert into diaries values(1919, "2016-10-14");
+insert into diaries values(1920, "2016-10-15");
+insert into diaries values(1921, "2016-10-16");
+insert into diaries values(1922, "2016-10-17");
+insert into diaries values(1923, "2016-10-18");
+insert into diaries values(1924, "2016-10-19");
+insert into diaries values(1925, "2016-10-20");
+insert into diaries values(1926, "2016-10-21");
+insert into diaries values(1927, "2016-10-22");
+insert into diaries values(1928, "2016-10-23");
+insert into diaries values(1929, "2016-10-24");
+insert into diaries values(1930, "2016-10-25");
+insert into diaries values(1931, "2016-10-26");
+insert into diaries values(1932, "2016-10-27");
+insert into diaries values(1933, "2016-10-28");
+insert into diaries values(1934, "2016-10-29");
+insert into diaries values(1935, "2016-10-30");
+insert into diaries values(1936, "2016-10-31");
+insert into diaries values(1937, "2016-11-01");
+insert into diaries values(1938, "2016-11-02");
+insert into diaries values(1939, "2016-11-03");
+insert into diaries values(1940, "2016-11-04");
+insert into diaries values(1941, "2016-11-05");
+insert into diaries values(1942, "2016-11-06");
+insert into diaries values(1943, "2016-11-07");
+insert into diaries values(1944, "2016-11-08");
+insert into diaries values(1945, "2016-11-09");
+insert into diaries values(1946, "2016-11-10");
+insert into diaries values(1947, "2016-11-11");
+insert into diaries values(1948, "2016-11-12");
+insert into diaries values(1949, "2016-11-13");
+insert into diaries values(1950, "2016-11-14");
+insert into diaries values(1951, "2016-11-15");
+insert into diaries values(1952, "2016-11-16");
+insert into diaries values(1953, "2016-11-17");
+insert into diaries values(1954, "2016-11-18");
+insert into diaries values(1955, "2016-11-19");
+insert into diaries values(1956, "2016-11-20");
+insert into diaries values(1957, "2016-11-21");
+insert into diaries values(1958, "2016-11-22");
+insert into diaries values(1959, "2016-11-23");
+insert into diaries values(1960, "2016-11-24");
+insert into diaries values(1961, "2016-11-25");
+insert into diaries values(1962, "2016-11-26");
+insert into diaries values(1963, "2016-11-27");
+insert into diaries values(1964, "2016-11-28");
+insert into diaries values(1965, "2016-11-29");
+insert into diaries values(1966, "2016-11-30");
+insert into diaries values(1967, "2016-12-01");
+insert into diaries values(1968, "2016-12-02");
+insert into diaries values(1969, "2016-12-03");
+insert into diaries values(1970, "2016-12-04");
+insert into diaries values(1971, "2016-12-05");
+insert into diaries values(1972, "2016-12-06");
+insert into diaries values(1973, "2016-12-07");
+insert into diaries values(1974, "2016-12-08");
+insert into diaries values(1975, "2016-12-09");
+insert into diaries values(1976, "2016-12-10");
+insert into diaries values(1977, "2016-12-11");
+insert into diaries values(1978, "2016-12-12");
+insert into diaries values(1979, "2016-12-13");
+insert into diaries values(1980, "2016-12-14");
+insert into diaries values(1981, "2016-12-15");
+insert into diaries values(1982, "2016-12-16");
+insert into diaries values(1983, "2016-12-17");
+insert into diaries values(1984, "2016-12-18");
+insert into diaries values(1985, "2016-12-19");
+insert into diaries values(1986, "2016-12-20");
+insert into diaries values(1987, "2016-12-21");
+insert into diaries values(1988, "2016-12-22");
+insert into diaries values(1989, "2016-12-23");
+insert into diaries values(1990, "2016-12-24");
+insert into diaries values(1991, "2016-12-25");
+insert into diaries values(1992, "2016-12-26");
+insert into diaries values(1993, "2016-12-27");
+insert into diaries values(1994, "2016-12-28");
+insert into diaries values(1995, "2016-12-29");
+insert into diaries values(1996, "2016-12-30");
+insert into diaries values(1997, "2016-12-31");
+insert into diaries values(1998, "2017-01-01");
+insert into diaries values(1999, "2017-01-02");
+insert into diaries values(2000, "2017-01-03");
+insert into diaries values(2001, "2017-01-04");
+insert into diaries values(2002, "2017-01-05");
+insert into diaries values(2003, "2017-01-06");
+insert into diaries values(2004, "2017-01-07");
+insert into diaries values(2005, "2017-01-08");
+insert into diaries values(2006, "2017-01-09");
+insert into diaries values(2007, "2017-01-10");
+insert into diaries values(2008, "2017-01-11");
+insert into diaries values(2009, "2017-01-12");
+insert into diaries values(2010, "2017-01-13");
+insert into diaries values(2011, "2017-01-14");
+insert into diaries values(2012, "2017-01-15");
+insert into diaries values(2013, "2017-01-16");
+insert into diaries values(2014, "2017-01-17");
+insert into diaries values(2015, "2017-01-18");
+insert into diaries values(2016, "2017-01-19");
+insert into diaries values(2017, "2017-01-20");
+insert into diaries values(2018, "2017-01-21");
+insert into diaries values(2019, "2017-01-22");
+insert into diaries values(2020, "2017-01-23");
+insert into diaries values(2021, "2017-01-24");
+insert into diaries values(2022, "2017-01-25");
+insert into diaries values(2023, "2017-01-26");
+insert into diaries values(2024, "2017-01-27");
+insert into diaries values(2025, "2017-01-28");
+insert into diaries values(2026, "2017-01-29");
+insert into diaries values(2027, "2017-01-30");
+insert into diaries values(2028, "2017-01-31");
+insert into diaries values(2029, "2017-02-01");
+insert into diaries values(2030, "2017-02-02");
+insert into diaries values(2031, "2017-02-03");
+insert into diaries values(2032, "2017-02-04");
+insert into diaries values(2033, "2017-02-05");
+insert into diaries values(2034, "2017-02-06");
+insert into diaries values(2035, "2017-02-07");
+insert into diaries values(2036, "2017-02-08");
+insert into diaries values(2037, "2017-02-09");
+insert into diaries values(2038, "2017-02-10");
+insert into diaries values(2039, "2017-02-11");
+insert into diaries values(2040, "2017-02-12");
+insert into diaries values(2041, "2017-02-13");
+insert into diaries values(2042, "2017-02-14");
+insert into diaries values(2043, "2017-02-15");
+insert into diaries values(2044, "2017-02-16");
+insert into diaries values(2045, "2017-02-17");
+insert into diaries values(2046, "2017-02-18");
+insert into diaries values(2047, "2017-02-19");
+insert into diaries values(2048, "2017-02-20");
+insert into diaries values(2049, "2017-02-21");
+insert into diaries values(2050, "2017-02-22");
+insert into diaries values(2051, "2017-02-23");
+insert into diaries values(2052, "2017-02-24");
+insert into diaries values(2053, "2017-02-25");
+insert into diaries values(2054, "2017-02-26");
+insert into diaries values(2055, "2017-02-27");
+insert into diaries values(2056, "2017-02-28");
+insert into diaries values(2057, "2017-03-01");
+insert into diaries values(2058, "2017-03-02");
+insert into diaries values(2059, "2017-03-03");
+insert into diaries values(2060, "2017-03-04");
+insert into diaries values(2061, "2017-03-05");
+insert into diaries values(2062, "2017-03-06");
+insert into diaries values(2063, "2017-03-07");
+insert into diaries values(2064, "2017-03-08");
+insert into diaries values(2065, "2017-03-09");
+insert into diaries values(2066, "2017-03-10");
+insert into diaries values(2067, "2017-03-11");
+insert into diaries values(2068, "2017-03-12");
+insert into diaries values(2069, "2017-03-13");
+insert into diaries values(2070, "2017-03-14");
+insert into diaries values(2071, "2017-03-15");
+insert into diaries values(2072, "2017-03-16");
+insert into diaries values(2073, "2017-03-17");
+insert into diaries values(2074, "2017-03-18");
+insert into diaries values(2075, "2017-03-19");
+insert into diaries values(2076, "2017-03-20");
+insert into diaries values(2077, "2017-03-21");
+insert into diaries values(2078, "2017-03-22");
+insert into diaries values(2079, "2017-03-23");
+insert into diaries values(2080, "2017-03-24");
+insert into diaries values(2081, "2017-03-25");
+insert into diaries values(2082, "2017-03-26");
+insert into diaries values(2083, "2017-03-27");
+insert into diaries values(2084, "2017-03-28");
+insert into diaries values(2085, "2017-03-29");
+insert into diaries values(2086, "2017-03-30");
+insert into diaries values(2087, "2017-03-31");
+insert into diaries values(2088, "2017-04-01");
+insert into diaries values(2089, "2017-04-02");
+insert into diaries values(2090, "2017-04-03");
+insert into diaries values(2091, "2017-04-04");
+insert into diaries values(2092, "2017-04-05");
+insert into diaries values(2093, "2017-04-06");
+insert into diaries values(2094, "2017-04-07");
+insert into diaries values(2095, "2017-04-08");
+insert into diaries values(2096, "2017-04-09");
+insert into diaries values(2097, "2017-04-10");
+insert into diaries values(2098, "2017-04-11");
+insert into diaries values(2099, "2017-04-12");
+insert into diaries values(2100, "2017-04-13");
+insert into diaries values(2101, "2017-04-14");
+insert into diaries values(2102, "2017-04-15");
+insert into diaries values(2103, "2017-04-16");
+insert into diaries values(2104, "2017-04-17");
+insert into diaries values(2105, "2017-04-18");
+insert into diaries values(2106, "2017-04-19");
+insert into diaries values(2107, "2017-04-20");
+insert into diaries values(2108, "2017-04-21");
+insert into diaries values(2109, "2017-04-22");
+insert into diaries values(2110, "2017-04-23");
+insert into diaries values(2111, "2017-04-24");
+insert into diaries values(2112, "2017-04-25");
+insert into diaries values(2113, "2017-04-26");
+insert into diaries values(2114, "2017-04-27");
+insert into diaries values(2115, "2017-04-28");
+insert into diaries values(2116, "2017-04-29");
+insert into diaries values(2117, "2017-04-30");
+insert into diaries values(2118, "2017-05-01");
+insert into diaries values(2119, "2017-05-02");
+insert into diaries values(2120, "2017-05-03");
+insert into diaries values(2121, "2017-05-04");
+insert into diaries values(2122, "2017-05-05");
+insert into diaries values(2123, "2017-05-06");
+insert into diaries values(2124, "2017-05-07");
+insert into diaries values(2125, "2017-05-08");
+insert into diaries values(2126, "2017-05-09");
+insert into diaries values(2127, "2017-05-10");
+insert into diaries values(2128, "2017-05-11");
+insert into diaries values(2129, "2017-05-12");
+insert into diaries values(2130, "2017-05-13");
+insert into diaries values(2131, "2017-05-14");
+insert into diaries values(2132, "2017-05-15");
+insert into diaries values(2133, "2017-05-16");
+insert into diaries values(2134, "2017-05-17");
+insert into diaries values(2135, "2017-05-18");
+insert into diaries values(2136, "2017-05-19");
+insert into diaries values(2137, "2017-05-20");
+insert into diaries values(2138, "2017-05-21");
+insert into diaries values(2139, "2017-05-22");
+insert into diaries values(2140, "2017-05-23");
+insert into diaries values(2141, "2017-05-24");
+insert into diaries values(2142, "2017-05-25");
+insert into diaries values(2143, "2017-05-26");
+insert into diaries values(2144, "2017-05-27");
+insert into diaries values(2145, "2017-05-28");
+insert into diaries values(2146, "2017-05-29");
+insert into diaries values(2147, "2017-05-30");
+insert into diaries values(2148, "2017-05-31");
+insert into diaries values(2149, "2017-06-01");
+insert into diaries values(2150, "2017-06-02");
+insert into diaries values(2151, "2017-06-03");
+insert into diaries values(2152, "2017-06-04");
+insert into diaries values(2153, "2017-06-05");
+insert into diaries values(2154, "2017-06-06");
+insert into diaries values(2155, "2017-06-07");
+insert into diaries values(2156, "2017-06-08");
+insert into diaries values(2157, "2017-06-09");
+insert into diaries values(2158, "2017-06-10");
+insert into diaries values(2159, "2017-06-11");
+insert into diaries values(2160, "2017-06-12");
+insert into diaries values(2161, "2017-06-13");
+insert into diaries values(2162, "2017-06-14");
+insert into diaries values(2163, "2017-06-15");
+insert into diaries values(2164, "2017-06-16");
+insert into diaries values(2165, "2017-06-17");
+insert into diaries values(2166, "2017-06-18");
+insert into diaries values(2167, "2017-06-19");
+insert into diaries values(2168, "2017-06-20");
+insert into diaries values(2169, "2017-06-21");
+insert into diaries values(2170, "2017-06-22");
+insert into diaries values(2171, "2017-06-23");
+insert into diaries values(2172, "2017-06-24");
+insert into diaries values(2173, "2017-06-25");
+insert into diaries values(2174, "2017-06-26");
+insert into diaries values(2175, "2017-06-27");
+insert into diaries values(2176, "2017-06-28");
+insert into diaries values(2177, "2017-06-29");
+insert into diaries values(2178, "2017-06-30");
+insert into diaries values(2179, "2017-07-01");
+insert into diaries values(2180, "2017-07-02");
+insert into diaries values(2181, "2017-07-03");
+insert into diaries values(2182, "2017-07-04");
+insert into diaries values(2183, "2017-07-05");
+insert into diaries values(2184, "2017-07-06");
+insert into diaries values(2185, "2017-07-07");
+insert into diaries values(2186, "2017-07-08");
+insert into diaries values(2187, "2017-07-09");
+insert into diaries values(2188, "2017-07-10");
+insert into diaries values(2189, "2017-07-11");
+insert into diaries values(2190, "2017-07-12");
+insert into diaries values(2191, "2017-07-13");
+insert into diaries values(2192, "2017-07-14");
+insert into diaries values(2193, "2017-07-15");
+insert into diaries values(2194, "2017-07-16");
+insert into diaries values(2195, "2017-07-17");
+insert into diaries values(2196, "2017-07-18");
+insert into diaries values(2197, "2017-07-19");
+insert into diaries values(2198, "2017-07-20");
+insert into diaries values(2199, "2017-07-21");
+insert into diaries values(2200, "2017-07-22");
+insert into diaries values(2201, "2017-07-23");
+insert into diaries values(2202, "2017-07-24");
+insert into diaries values(2203, "2017-07-25");
+insert into diaries values(2204, "2017-07-26");
+insert into diaries values(2205, "2017-07-27");
+insert into diaries values(2206, "2017-07-28");
+insert into diaries values(2207, "2017-07-29");
+insert into diaries values(2208, "2017-07-30");
+insert into diaries values(2209, "2017-07-31");
+insert into diaries values(2210, "2017-08-01");
+insert into diaries values(2211, "2017-08-02");
+insert into diaries values(2212, "2017-08-03");
+insert into diaries values(2213, "2017-08-04");
+insert into diaries values(2214, "2017-08-05");
+insert into diaries values(2215, "2017-08-06");
+insert into diaries values(2216, "2017-08-07");
+insert into diaries values(2217, "2017-08-08");
+insert into diaries values(2218, "2017-08-09");
+insert into diaries values(2219, "2017-08-10");
+insert into diaries values(2220, "2017-08-11");
+insert into diaries values(2221, "2017-08-12");
+insert into diaries values(2222, "2017-08-13");
+insert into diaries values(2223, "2017-08-14");
+insert into diaries values(2224, "2017-08-15");
+insert into diaries values(2225, "2017-08-16");
+insert into diaries values(2226, "2017-08-17");
+insert into diaries values(2227, "2017-08-18");
+insert into diaries values(2228, "2017-08-19");
+insert into diaries values(2229, "2017-08-20");
+insert into diaries values(2230, "2017-08-21");
+insert into diaries values(2231, "2017-08-22");
+insert into diaries values(2232, "2017-08-23");
+insert into diaries values(2233, "2017-08-24");
+insert into diaries values(2234, "2017-08-25");
+insert into diaries values(2235, "2017-08-26");
+insert into diaries values(2236, "2017-08-27");
+insert into diaries values(2237, "2017-08-28");
+insert into diaries values(2238, "2017-08-29");
+insert into diaries values(2239, "2017-08-30");
+insert into diaries values(2240, "2017-08-31");
+insert into diaries values(2241, "2017-09-01");
+insert into diaries values(2242, "2017-09-02");
+insert into diaries values(2243, "2017-09-03");
+insert into diaries values(2244, "2017-09-04");
+insert into diaries values(2245, "2017-09-05");
+insert into diaries values(2246, "2017-09-06");
+insert into diaries values(2247, "2017-09-07");
+insert into diaries values(2248, "2017-09-08");
+insert into diaries values(2249, "2017-09-09");
+insert into diaries values(2250, "2017-09-10");
+insert into diaries values(2251, "2017-09-11");
+insert into diaries values(2252, "2017-09-12");
+insert into diaries values(2253, "2017-09-13");
+insert into diaries values(2254, "2017-09-14");
+insert into diaries values(2255, "2017-09-15");
+insert into diaries values(2256, "2017-09-16");
+insert into diaries values(2257, "2017-09-17");
+insert into diaries values(2258, "2017-09-18");
+insert into diaries values(2259, "2017-09-19");
+insert into diaries values(2260, "2017-09-20");
+insert into diaries values(2261, "2017-09-21");
+insert into diaries values(2262, "2017-09-22");
+insert into diaries values(2263, "2017-09-23");
+insert into diaries values(2264, "2017-09-24");
+insert into diaries values(2265, "2017-09-25");
+insert into diaries values(2266, "2017-09-26");
+insert into diaries values(2267, "2017-09-27");
+insert into diaries values(2268, "2017-09-28");
+insert into diaries values(2269, "2017-09-29");
+insert into diaries values(2270, "2017-09-30");
+insert into diaries values(2271, "2017-10-01");
+insert into diaries values(2272, "2017-10-02");
+insert into diaries values(2273, "2017-10-03");
+insert into diaries values(2274, "2017-10-04");
+insert into diaries values(2275, "2017-10-05");
+insert into diaries values(2276, "2017-10-06");
+insert into diaries values(2277, "2017-10-07");
+insert into diaries values(2278, "2017-10-08");
+insert into diaries values(2279, "2017-10-09");
+insert into diaries values(2280, "2017-10-10");
+insert into diaries values(2281, "2017-10-11");
+insert into diaries values(2282, "2017-10-12");
+insert into diaries values(2283, "2017-10-13");
+insert into diaries values(2284, "2017-10-14");
+insert into diaries values(2285, "2017-10-15");
+insert into diaries values(2286, "2017-10-16");
+insert into diaries values(2287, "2017-10-17");
+insert into diaries values(2288, "2017-10-18");
+insert into diaries values(2289, "2017-10-19");
+insert into diaries values(2290, "2017-10-20");
+insert into diaries values(2291, "2017-10-21");
+insert into diaries values(2292, "2017-10-22");
+insert into diaries values(2293, "2017-10-23");
+insert into diaries values(2294, "2017-10-24");
+insert into diaries values(2295, "2017-10-25");
+insert into diaries values(2296, "2017-10-26");
+insert into diaries values(2297, "2017-10-27");
+insert into diaries values(2298, "2017-10-28");
+insert into diaries values(2299, "2017-10-29");
+insert into diaries values(2300, "2017-10-30");
+insert into diaries values(2301, "2017-10-31");
+insert into diaries values(2302, "2017-11-01");
+insert into diaries values(2303, "2017-11-02");
+insert into diaries values(2304, "2017-11-03");
+insert into diaries values(2305, "2017-11-04");
+insert into diaries values(2306, "2017-11-05");
+insert into diaries values(2307, "2017-11-06");
+insert into diaries values(2308, "2017-11-07");
+insert into diaries values(2309, "2017-11-08");
+insert into diaries values(2310, "2017-11-09");
+insert into diaries values(2311, "2017-11-10");
+insert into diaries values(2312, "2017-11-11");
+insert into diaries values(2313, "2017-11-12");
+insert into diaries values(2314, "2017-11-13");
+insert into diaries values(2315, "2017-11-14");
+insert into diaries values(2316, "2017-11-15");
+insert into diaries values(2317, "2017-11-16");
+insert into diaries values(2318, "2017-11-17");
+insert into diaries values(2319, "2017-11-18");
+insert into diaries values(2320, "2017-11-19");
+insert into diaries values(2321, "2017-11-20");
+insert into diaries values(2322, "2017-11-21");
+insert into diaries values(2323, "2017-11-22");
+insert into diaries values(2324, "2017-11-23");
+insert into diaries values(2325, "2017-11-24");
+insert into diaries values(2326, "2017-11-25");
+insert into diaries values(2327, "2017-11-26");
+insert into diaries values(2328, "2017-11-27");
+insert into diaries values(2329, "2017-11-28");
+insert into diaries values(2330, "2017-11-29");
+insert into diaries values(2331, "2017-11-30");
+insert into diaries values(2332, "2017-12-01");
+insert into diaries values(2333, "2017-12-02");
+insert into diaries values(2334, "2017-12-03");
+insert into diaries values(2335, "2017-12-04");
+insert into diaries values(2336, "2017-12-05");
+insert into diaries values(2337, "2017-12-06");
+insert into diaries values(2338, "2017-12-07");
+insert into diaries values(2339, "2017-12-08");
+insert into diaries values(2340, "2017-12-09");
+insert into diaries values(2341, "2017-12-10");
+insert into diaries values(2342, "2017-12-11");
+insert into diaries values(2343, "2017-12-12");
+insert into diaries values(2344, "2017-12-13");
+insert into diaries values(2345, "2017-12-14");
+insert into diaries values(2346, "2017-12-15");
+insert into diaries values(2347, "2017-12-16");
+insert into diaries values(2348, "2017-12-17");
+insert into diaries values(2349, "2017-12-18");
+insert into diaries values(2350, "2017-12-19");
+insert into diaries values(2351, "2017-12-20");
+insert into diaries values(2352, "2017-12-21");
+insert into diaries values(2353, "2017-12-22");
+insert into diaries values(2354, "2017-12-23");
+insert into diaries values(2355, "2017-12-24");
+insert into diaries values(2356, "2017-12-25");
+insert into diaries values(2357, "2017-12-26");
+insert into diaries values(2358, "2017-12-27");
+insert into diaries values(2359, "2017-12-28");
+insert into diaries values(2360, "2017-12-29");
+insert into diaries values(2361, "2017-12-30");
+insert into diaries values(2362, "2017-12-31");
+insert into diaries values(2363, "2018-01-01");
+insert into diaries values(2364, "2018-01-02");
+insert into diaries values(2365, "2018-01-03");
+insert into diaries values(2366, "2018-01-04");
+insert into diaries values(2367, "2018-01-05");
+insert into diaries values(2368, "2018-01-06");
+insert into diaries values(2369, "2018-01-07");
+insert into diaries values(2370, "2018-01-08");
+insert into diaries values(2371, "2018-01-09");
+insert into diaries values(2372, "2018-01-10");
+insert into diaries values(2373, "2018-01-11");
+insert into diaries values(2374, "2018-01-12");
+insert into diaries values(2375, "2018-01-13");
+insert into diaries values(2376, "2018-01-14");
+insert into diaries values(2377, "2018-01-15");
+insert into diaries values(2378, "2018-01-16");
+insert into diaries values(2379, "2018-01-17");
+insert into diaries values(2380, "2018-01-18");
+insert into diaries values(2381, "2018-01-19");
+insert into diaries values(2382, "2018-01-20");
+insert into diaries values(2383, "2018-01-21");
+insert into diaries values(2384, "2018-01-22");
+insert into diaries values(2385, "2018-01-23");
+insert into diaries values(2386, "2018-01-24");
+insert into diaries values(2387, "2018-01-25");
+insert into diaries values(2388, "2018-01-26");
+insert into diaries values(2389, "2018-01-27");
+insert into diaries values(2390, "2018-01-28");
+insert into diaries values(2391, "2018-01-29");
+insert into diaries values(2392, "2018-01-30");
+insert into diaries values(2393, "2018-01-31");
+insert into diaries values(2394, "2018-02-01");
+insert into diaries values(2395, "2018-02-02");
+insert into diaries values(2396, "2018-02-03");
+insert into diaries values(2397, "2018-02-04");
+insert into diaries values(2398, "2018-02-05");
+insert into diaries values(2399, "2018-02-06");
+insert into diaries values(2400, "2018-02-07");
+insert into diaries values(2401, "2018-02-08");
+insert into diaries values(2402, "2018-02-09");
+insert into diaries values(2403, "2018-02-10");
+insert into diaries values(2404, "2018-02-11");
+insert into diaries values(2405, "2018-02-12");
+insert into diaries values(2406, "2018-02-13");
+insert into diaries values(2407, "2018-02-14");
+insert into diaries values(2408, "2018-02-15");
+insert into diaries values(2409, "2018-02-16");
+insert into diaries values(2410, "2018-02-17");
+insert into diaries values(2411, "2018-02-18");
+insert into diaries values(2412, "2018-02-19");
+insert into diaries values(2413, "2018-02-20");
+insert into diaries values(2414, "2018-02-21");
+insert into diaries values(2415, "2018-02-22");
+insert into diaries values(2416, "2018-02-23");
+insert into diaries values(2417, "2018-02-24");
+insert into diaries values(2418, "2018-02-25");
+insert into diaries values(2419, "2018-02-26");
+insert into diaries values(2420, "2018-02-27");
+insert into diaries values(2421, "2018-02-28");
+insert into diaries values(2422, "2018-03-01");
+insert into diaries values(2423, "2018-03-02");
+insert into diaries values(2424, "2018-03-03");
+insert into diaries values(2425, "2018-03-04");
+insert into diaries values(2426, "2018-03-05");
+insert into diaries values(2427, "2018-03-06");
+insert into diaries values(2428, "2018-03-07");
+insert into diaries values(2429, "2018-03-08");
+insert into diaries values(2430, "2018-03-09");
+insert into diaries values(2431, "2018-03-10");
+insert into diaries values(2432, "2018-03-11");
+insert into diaries values(2433, "2018-03-12");
+insert into diaries values(2434, "2018-03-13");
+insert into diaries values(2435, "2018-03-14");
+insert into diaries values(2436, "2018-03-15");
+insert into diaries values(2437, "2018-03-16");
+insert into diaries values(2438, "2018-03-17");
+insert into diaries values(2439, "2018-03-18");
+insert into diaries values(2440, "2018-03-19");
+insert into diaries values(2441, "2018-03-20");
+insert into diaries values(2442, "2018-03-21");
+insert into diaries values(2443, "2018-03-22");
+insert into diaries values(2444, "2018-03-23");
+insert into diaries values(2445, "2018-03-24");
+insert into diaries values(2446, "2018-03-25");
+insert into diaries values(2447, "2018-03-26");
+insert into diaries values(2448, "2018-03-27");
+insert into diaries values(2449, "2018-03-28");
+insert into diaries values(2450, "2018-03-29");
+insert into diaries values(2451, "2018-03-30");
+insert into diaries values(2452, "2018-03-31");
+insert into diaries values(2453, "2018-04-01");
+insert into diaries values(2454, "2018-04-02");
+insert into diaries values(2455, "2018-04-03");
+insert into diaries values(2456, "2018-04-04");
+insert into diaries values(2457, "2018-04-05");
+insert into diaries values(2458, "2018-04-06");
+insert into diaries values(2459, "2018-04-07");
+insert into diaries values(2460, "2018-04-08");
+insert into diaries values(2461, "2018-04-09");
+insert into diaries values(2462, "2018-04-10");
+insert into diaries values(2463, "2018-04-11");
+insert into diaries values(2464, "2018-04-12");
+insert into diaries values(2465, "2018-04-13");
+insert into diaries values(2466, "2018-04-14");
+insert into diaries values(2467, "2018-04-15");
+insert into diaries values(2468, "2018-04-16");
+insert into diaries values(2469, "2018-04-17");
+insert into diaries values(2470, "2018-04-18");
+insert into diaries values(2471, "2018-04-19");
+insert into diaries values(2472, "2018-04-20");
+insert into diaries values(2473, "2018-04-21");
+insert into diaries values(2474, "2018-04-22");
+insert into diaries values(2475, "2018-04-23");
+insert into diaries values(2476, "2018-04-24");
+insert into diaries values(2477, "2018-04-25");
+insert into diaries values(2478, "2018-04-26");
+insert into diaries values(2479, "2018-04-27");
+insert into diaries values(2480, "2018-04-28");
+insert into diaries values(2481, "2018-04-29");
+insert into diaries values(2482, "2018-04-30");
+insert into diaries values(2483, "2018-05-01");
+insert into diaries values(2484, "2018-05-02");
+insert into diaries values(2485, "2018-05-03");
+insert into diaries values(2486, "2018-05-04");
+insert into diaries values(2487, "2018-05-05");
+insert into diaries values(2488, "2018-05-06");
+insert into diaries values(2489, "2018-05-07");
+insert into diaries values(2490, "2018-05-08");
+insert into diaries values(2491, "2018-05-09");
+insert into diaries values(2492, "2018-05-10");
+insert into diaries values(2493, "2018-05-11");
+insert into diaries values(2494, "2018-05-12");
+insert into diaries values(2495, "2018-05-13");
+insert into diaries values(2496, "2018-05-14");
+insert into diaries values(2497, "2018-05-15");
+insert into diaries values(2498, "2018-05-16");
+insert into diaries values(2499, "2018-05-17");
+insert into diaries values(2500, "2018-05-18");
+insert into diaries values(2501, "2018-05-19");
+insert into diaries values(2502, "2018-05-20");
+insert into diaries values(2503, "2018-05-21");
+insert into diaries values(2504, "2018-05-22");
+insert into diaries values(2505, "2018-05-23");
+insert into diaries values(2506, "2018-05-24");
+insert into diaries values(2507, "2018-05-25");
+insert into diaries values(2508, "2018-05-26");
+insert into diaries values(2509, "2018-05-27");
+insert into diaries values(2510, "2018-05-28");
+insert into diaries values(2511, "2018-05-29");
+insert into diaries values(2512, "2018-05-30");
+insert into diaries values(2513, "2018-05-31");
+insert into diaries values(2514, "2018-06-01");
+insert into diaries values(2515, "2018-06-02");
+insert into diaries values(2516, "2018-06-03");
+insert into diaries values(2517, "2018-06-04");
+insert into diaries values(2518, "2018-06-05");
+insert into diaries values(2519, "2018-06-06");
+insert into diaries values(2520, "2018-06-07");
+insert into diaries values(2521, "2018-06-08");
+insert into diaries values(2522, "2018-06-09");
+insert into diaries values(2523, "2018-06-10");
+insert into diaries values(2524, "2018-06-11");
+insert into diaries values(2525, "2018-06-12");
+insert into diaries values(2526, "2018-06-13");
+insert into diaries values(2527, "2018-06-14");
+insert into diaries values(2528, "2018-06-15");
+insert into diaries values(2529, "2018-06-16");
+insert into diaries values(2530, "2018-06-17");
+insert into diaries values(2531, "2018-06-18");
+insert into diaries values(2532, "2018-06-19");
+insert into diaries values(2533, "2018-06-20");
+insert into diaries values(2534, "2018-06-21");
+insert into diaries values(2535, "2018-06-22");
+insert into diaries values(2536, "2018-06-23");
+insert into diaries values(2537, "2018-06-24");
+insert into diaries values(2538, "2018-06-25");
+insert into diaries values(2539, "2018-06-26");
+insert into diaries values(2540, "2018-06-27");
+insert into diaries values(2541, "2018-06-28");
+insert into diaries values(2542, "2018-06-29");
+insert into diaries values(2543, "2018-06-30");
+insert into diaries values(2544, "2018-07-01");
+insert into diaries values(2545, "2018-07-02");
+insert into diaries values(2546, "2018-07-03");
+insert into diaries values(2547, "2018-07-04");
+insert into diaries values(2548, "2018-07-05");
+insert into diaries values(2549, "2018-07-06");
+insert into diaries values(2550, "2018-07-07");
+insert into diaries values(2551, "2018-07-08");
+insert into diaries values(2552, "2018-07-09");
+insert into diaries values(2553, "2018-07-10");
+insert into diaries values(2554, "2018-07-11");
+insert into diaries values(2555, "2018-07-12");
+insert into diaries values(2556, "2018-07-13");
+insert into diaries values(2557, "2018-07-14");
+insert into diaries values(2558, "2018-07-15");
+insert into diaries values(2559, "2018-07-16");
+insert into diaries values(2560, "2018-07-17");
+insert into diaries values(2561, "2018-07-18");
+insert into diaries values(2562, "2018-07-19");
+insert into diaries values(2563, "2018-07-20");
+insert into diaries values(2564, "2018-07-21");
+insert into diaries values(2565, "2018-07-22");
+insert into diaries values(2566, "2018-07-23");
+insert into diaries values(2567, "2018-07-24");
+insert into diaries values(2568, "2018-07-25");
+insert into diaries values(2569, "2018-07-26");
+insert into diaries values(2570, "2018-07-27");
+insert into diaries values(2571, "2018-07-28");
+insert into diaries values(2572, "2018-07-29");
+insert into diaries values(2573, "2018-07-30");
+insert into diaries values(2574, "2018-07-31");
+insert into diaries values(2575, "2018-08-01");
+insert into diaries values(2576, "2018-08-02");
+insert into diaries values(2577, "2018-08-03");
+insert into diaries values(2578, "2018-08-04");
+insert into diaries values(2579, "2018-08-05");
+insert into diaries values(2580, "2018-08-06");
+insert into diaries values(2581, "2018-08-07");
+insert into diaries values(2582, "2018-08-08");
+insert into diaries values(2583, "2018-08-09");
+insert into diaries values(2584, "2018-08-10");
+insert into diaries values(2585, "2018-08-11");
+insert into diaries values(2586, "2018-08-12");
+insert into diaries values(2587, "2018-08-13");
+insert into diaries values(2588, "2018-08-14");
+insert into diaries values(2589, "2018-08-15");
+insert into diaries values(2590, "2018-08-16");
+insert into diaries values(2591, "2018-08-17");
+insert into diaries values(2592, "2018-08-18");
+insert into diaries values(2593, "2018-08-19");
+insert into diaries values(2594, "2018-08-20");
+insert into diaries values(2595, "2018-08-21");
+insert into diaries values(2596, "2018-08-22");
+insert into diaries values(2597, "2018-08-23");
+insert into diaries values(2598, "2018-08-24");
+insert into diaries values(2599, "2018-08-25");
+insert into diaries values(2600, "2018-08-26");
+insert into diaries values(2601, "2018-08-27");
+insert into diaries values(2602, "2018-08-28");
+insert into diaries values(2603, "2018-08-29");
+insert into diaries values(2604, "2018-08-30");
+insert into diaries values(2605, "2018-08-31");
+insert into diaries values(2606, "2018-09-01");
+insert into diaries values(2607, "2018-09-02");
+insert into diaries values(2608, "2018-09-03");
+insert into diaries values(2609, "2018-09-04");
+insert into diaries values(2610, "2018-09-05");
+insert into diaries values(2611, "2018-09-06");
+insert into diaries values(2612, "2018-09-07");
+insert into diaries values(2613, "2018-09-08");
+insert into diaries values(2614, "2018-09-09");
+insert into diaries values(2615, "2018-09-10");
+insert into diaries values(2616, "2018-09-11");
+insert into diaries values(2617, "2018-09-12");
+insert into diaries values(2618, "2018-09-13");
+insert into diaries values(2619, "2018-09-14");
+insert into diaries values(2620, "2018-09-15");
+insert into diaries values(2621, "2018-09-16");
+insert into diaries values(2622, "2018-09-17");
+insert into diaries values(2623, "2018-09-18");
+insert into diaries values(2624, "2018-09-19");
+insert into diaries values(2625, "2018-09-20");
+insert into diaries values(2626, "2018-09-21");
+insert into diaries values(2627, "2018-09-22");
+insert into diaries values(2628, "2018-09-23");
+insert into diaries values(2629, "2018-09-24");
+insert into diaries values(2630, "2018-09-25");
+insert into diaries values(2631, "2018-09-26");
+insert into diaries values(2632, "2018-09-27");
+insert into diaries values(2633, "2018-09-28");
+insert into diaries values(2634, "2018-09-29");
+insert into diaries values(2635, "2018-09-30");
+insert into diaries values(2636, "2018-10-01");
+insert into diaries values(2637, "2018-10-02");
+insert into diaries values(2638, "2018-10-03");
+insert into diaries values(2639, "2018-10-04");
+insert into diaries values(2640, "2018-10-05");
+insert into diaries values(2641, "2018-10-06");
+insert into diaries values(2642, "2018-10-07");
+insert into diaries values(2643, "2018-10-08");
+insert into diaries values(2644, "2018-10-09");
+insert into diaries values(2645, "2018-10-10");
+insert into diaries values(2646, "2018-10-11");
+insert into diaries values(2647, "2018-10-12");
+insert into diaries values(2648, "2018-10-13");
+insert into diaries values(2649, "2018-10-14");
+insert into diaries values(2650, "2018-10-15");
+insert into diaries values(2651, "2018-10-16");
+insert into diaries values(2652, "2018-10-17");
+insert into diaries values(2653, "2018-10-18");
+insert into diaries values(2654, "2018-10-19");
+insert into diaries values(2655, "2018-10-20");
+insert into diaries values(2656, "2018-10-21");
+insert into diaries values(2657, "2018-10-22");
+insert into diaries values(2658, "2018-10-23");
+insert into diaries values(2659, "2018-10-24");
+insert into diaries values(2660, "2018-10-25");
+insert into diaries values(2661, "2018-10-26");
+insert into diaries values(2662, "2018-10-27");
+insert into diaries values(2663, "2018-10-28");
+insert into diaries values(2664, "2018-10-29");
+insert into diaries values(2665, "2018-10-30");
+insert into diaries values(2666, "2018-10-31");
+insert into diaries values(2667, "2018-11-01");
+insert into diaries values(2668, "2018-11-02");
+insert into diaries values(2669, "2018-11-03");
+insert into diaries values(2670, "2018-11-04");
+insert into diaries values(2671, "2018-11-05");
+insert into diaries values(2672, "2018-11-06");
+insert into diaries values(2673, "2018-11-07");
+insert into diaries values(2674, "2018-11-08");
+insert into diaries values(2675, "2018-11-09");
+insert into diaries values(2676, "2018-11-10");
+insert into diaries values(2677, "2018-11-11");
+insert into diaries values(2678, "2018-11-12");
+insert into diaries values(2679, "2018-11-13");
+insert into diaries values(2680, "2018-11-14");
+insert into diaries values(2681, "2018-11-15");
+insert into diaries values(2682, "2018-11-16");
+insert into diaries values(2683, "2018-11-17");
+insert into diaries values(2684, "2018-11-18");
+insert into diaries values(2685, "2018-11-19");
+insert into diaries values(2686, "2018-11-20");
+insert into diaries values(2687, "2018-11-21");
+insert into diaries values(2688, "2018-11-22");
+insert into diaries values(2689, "2018-11-23");
+insert into diaries values(2690, "2018-11-24");
+insert into diaries values(2691, "2018-11-25");
+insert into diaries values(2692, "2018-11-26");
+insert into diaries values(2693, "2018-11-27");
+insert into diaries values(2694, "2018-11-28");
+insert into diaries values(2695, "2018-11-29");
+insert into diaries values(2696, "2018-11-30");
+insert into diaries values(2697, "2018-12-01");
+insert into diaries values(2698, "2018-12-02");
+insert into diaries values(2699, "2018-12-03");
+insert into diaries values(2700, "2018-12-04");
+insert into diaries values(2701, "2018-12-05");
+insert into diaries values(2702, "2018-12-06");
+insert into diaries values(2703, "2018-12-07");
+insert into diaries values(2704, "2018-12-08");
+insert into diaries values(2705, "2018-12-09");
+insert into diaries values(2706, "2018-12-10");
+insert into diaries values(2707, "2018-12-11");
+insert into diaries values(2708, "2018-12-12");
+insert into diaries values(2709, "2018-12-13");
+insert into diaries values(2710, "2018-12-14");
+insert into diaries values(2711, "2018-12-15");
+insert into diaries values(2712, "2018-12-16");
+insert into diaries values(2713, "2018-12-17");
+insert into diaries values(2714, "2018-12-18");
+insert into diaries values(2715, "2018-12-19");
+insert into diaries values(2716, "2018-12-20");
+insert into diaries values(2717, "2018-12-21");
+insert into diaries values(2718, "2018-12-22");
+insert into diaries values(2719, "2018-12-23");
+insert into diaries values(2720, "2018-12-24");
+insert into diaries values(2721, "2018-12-25");
+insert into diaries values(2722, "2018-12-26");
+insert into diaries values(2723, "2018-12-27");
+insert into diaries values(2724, "2018-12-28");
+insert into diaries values(2725, "2018-12-29");
+insert into diaries values(2726, "2018-12-30");
+insert into diaries values(2727, "2018-12-31");
+insert into diaries values(2728, "2019-01-01");
+insert into diaries values(2729, "2019-01-02");
+insert into diaries values(2730, "2019-01-03");
+insert into diaries values(2731, "2019-01-04");
+insert into diaries values(2732, "2019-01-05");
+insert into diaries values(2733, "2019-01-06");
+insert into diaries values(2734, "2019-01-07");
+insert into diaries values(2735, "2019-01-08");
+insert into diaries values(2736, "2019-01-09");
+insert into diaries values(2737, "2019-01-10");
+insert into diaries values(2738, "2019-01-11");
+insert into diaries values(2739, "2019-01-12");
+insert into diaries values(2740, "2019-01-13");
+insert into diaries values(2741, "2019-01-14");
+insert into diaries values(2742, "2019-01-15");
+insert into diaries values(2743, "2019-01-16");
+insert into diaries values(2744, "2019-01-17");
+insert into diaries values(2745, "2019-01-18");
+insert into diaries values(2746, "2019-01-19");
+insert into diaries values(2747, "2019-01-20");
+insert into diaries values(2748, "2019-01-21");
+insert into diaries values(2749, "2019-01-22");
+insert into diaries values(2750, "2019-01-23");
+insert into diaries values(2751, "2019-01-24");
+insert into diaries values(2752, "2019-01-25");
+insert into diaries values(2753, "2019-01-26");
+insert into diaries values(2754, "2019-01-27");
+insert into diaries values(2755, "2019-01-28");
+insert into diaries values(2756, "2019-01-29");
+insert into diaries values(2757, "2019-01-30");
+insert into diaries values(2758, "2019-01-31");
+insert into diaries values(2759, "2019-02-01");
+insert into diaries values(2760, "2019-02-02");
+insert into diaries values(2761, "2019-02-03");
+insert into diaries values(2762, "2019-02-04");
+insert into diaries values(2763, "2019-02-05");
+insert into diaries values(2764, "2019-02-06");
+insert into diaries values(2765, "2019-02-07");
+insert into diaries values(2766, "2019-02-08");
+insert into diaries values(2767, "2019-02-09");
+insert into diaries values(2768, "2019-02-10");
+insert into diaries values(2769, "2019-02-11");
+insert into diaries values(2770, "2019-02-12");
+insert into diaries values(2771, "2019-02-13");
+insert into diaries values(2772, "2019-02-14");
+insert into diaries values(2773, "2019-02-15");
+insert into diaries values(2774, "2019-02-16");
+insert into diaries values(2775, "2019-02-17");
+insert into diaries values(2776, "2019-02-18");
+insert into diaries values(2777, "2019-02-19");
+insert into diaries values(2778, "2019-02-20");
+insert into diaries values(2779, "2019-02-21");
+insert into diaries values(2780, "2019-02-22");
+insert into diaries values(2781, "2019-02-23");
+insert into diaries values(2782, "2019-02-24");
+insert into diaries values(2783, "2019-02-25");
+insert into diaries values(2784, "2019-02-26");
+insert into diaries values(2785, "2019-02-27");
+insert into diaries values(2786, "2019-02-28");
+insert into diaries values(2787, "2019-03-01");
+insert into diaries values(2788, "2019-03-02");
+insert into diaries values(2789, "2019-03-03");
+insert into diaries values(2790, "2019-03-04");
+insert into diaries values(2791, "2019-03-05");
+insert into diaries values(2792, "2019-03-06");
+insert into diaries values(2793, "2019-03-07");
+insert into diaries values(2794, "2019-03-08");
+insert into diaries values(2795, "2019-03-09");
+insert into diaries values(2796, "2019-03-10");
+insert into diaries values(2797, "2019-03-11");
+insert into diaries values(2798, "2019-03-12");
+insert into diaries values(2799, "2019-03-13");
+insert into diaries values(2800, "2019-03-14");
+insert into diaries values(2801, "2019-03-15");
+insert into diaries values(2802, "2019-03-16");
+insert into diaries values(2803, "2019-03-17");
+insert into diaries values(2804, "2019-03-18");
+insert into diaries values(2805, "2019-03-19");
+insert into diaries values(2806, "2019-03-20");
+insert into diaries values(2807, "2019-03-21");
+insert into diaries values(2808, "2019-03-22");
+insert into diaries values(2809, "2019-03-23");
+insert into diaries values(2810, "2019-03-24");
+insert into diaries values(2811, "2019-03-25");
+insert into diaries values(2812, "2019-03-26");
+insert into diaries values(2813, "2019-03-27");
+insert into diaries values(2814, "2019-03-28");
+insert into diaries values(2815, "2019-03-29");
+insert into diaries values(2816, "2019-03-30");
+insert into diaries values(2817, "2019-03-31");
+insert into diaries values(2818, "2019-04-01");
+insert into diaries values(2819, "2019-04-02");
+insert into diaries values(2820, "2019-04-03");
+insert into diaries values(2821, "2019-04-04");
+insert into diaries values(2822, "2019-04-05");
+insert into diaries values(2823, "2019-04-06");
+insert into diaries values(2824, "2019-04-07");
+insert into diaries values(2825, "2019-04-08");
+insert into diaries values(2826, "2019-04-09");
+insert into diaries values(2827, "2019-04-10");
+insert into diaries values(2828, "2019-04-11");
+insert into diaries values(2829, "2019-04-12");
+insert into diaries values(2830, "2019-04-13");
+insert into diaries values(2831, "2019-04-14");
+insert into diaries values(2832, "2019-04-15");
+insert into diaries values(2833, "2019-04-16");
+insert into diaries values(2834, "2019-04-17");
+insert into diaries values(2835, "2019-04-18");
+insert into diaries values(2836, "2019-04-19");
+insert into diaries values(2837, "2019-04-20");
+insert into diaries values(2838, "2019-04-21");
+insert into diaries values(2839, "2019-04-22");
+insert into diaries values(2840, "2019-04-23");
+insert into diaries values(2841, "2019-04-24");
+insert into diaries values(2842, "2019-04-25");
+insert into diaries values(2843, "2019-04-26");
+insert into diaries values(2844, "2019-04-27");
+insert into diaries values(2845, "2019-04-28");
+insert into diaries values(2846, "2019-04-29");
+insert into diaries values(2847, "2019-04-30");
+insert into diaries values(2848, "2019-05-01");
+insert into diaries values(2849, "2019-05-02");
+insert into diaries values(2850, "2019-05-03");
+insert into diaries values(2851, "2019-05-04");
+insert into diaries values(2852, "2019-05-05");
+insert into diaries values(2853, "2019-05-06");
+insert into diaries values(2854, "2019-05-07");
+insert into diaries values(2855, "2019-05-08");
+insert into diaries values(2856, "2019-05-09");
+insert into diaries values(2857, "2019-05-10");
+insert into diaries values(2858, "2019-05-11");
+insert into diaries values(2859, "2019-05-12");
+insert into diaries values(2860, "2019-05-13");
+insert into diaries values(2861, "2019-05-14");
+insert into diaries values(2862, "2019-05-15");
+insert into diaries values(2863, "2019-05-16");
+insert into diaries values(2864, "2019-05-17");
+insert into diaries values(2865, "2019-05-18");
+insert into diaries values(2866, "2019-05-19");
+insert into diaries values(2867, "2019-05-20");
+insert into diaries values(2868, "2019-05-21");
+insert into diaries values(2869, "2019-05-22");
+insert into diaries values(2870, "2019-05-23");
+insert into diaries values(2871, "2019-05-24");
+insert into diaries values(2872, "2019-05-25");
+insert into diaries values(2873, "2019-05-26");
+insert into diaries values(2874, "2019-05-27");
+insert into diaries values(2875, "2019-05-28");
+insert into diaries values(2876, "2019-05-29");
+insert into diaries values(2877, "2019-05-30");
+insert into diaries values(2878, "2019-05-31");
+insert into diaries values(2879, "2019-06-01");
+insert into diaries values(2880, "2019-06-02");
+insert into diaries values(2881, "2019-06-03");
+insert into diaries values(2882, "2019-06-04");
+insert into diaries values(2883, "2019-06-05");
+insert into diaries values(2884, "2019-06-06");
+insert into diaries values(2885, "2019-06-07");
+insert into diaries values(2886, "2019-06-08");
+insert into diaries values(2887, "2019-06-09");
+insert into diaries values(2888, "2019-06-10");
+insert into diaries values(2889, "2019-06-11");
+insert into diaries values(2890, "2019-06-12");
+insert into diaries values(2891, "2019-06-13");
+insert into diaries values(2892, "2019-06-14");
+insert into diaries values(2893, "2019-06-15");
+insert into diaries values(2894, "2019-06-16");
+insert into diaries values(2895, "2019-06-17");
+insert into diaries values(2896, "2019-06-18");
+insert into diaries values(2897, "2019-06-19");
+insert into diaries values(2898, "2019-06-20");
+insert into diaries values(2899, "2019-06-21");
+insert into diaries values(2900, "2019-06-22");
+insert into diaries values(2901, "2019-06-23");
+insert into diaries values(2902, "2019-06-24");
+insert into diaries values(2903, "2019-06-25");
+insert into diaries values(2904, "2019-06-26");
+insert into diaries values(2905, "2019-06-27");
+insert into diaries values(2906, "2019-06-28");
+insert into diaries values(2907, "2019-06-29");
+insert into diaries values(2908, "2019-06-30");
+insert into diaries values(2909, "2019-07-01");
+insert into diaries values(2910, "2019-07-02");
+insert into diaries values(2911, "2019-07-03");
+insert into diaries values(2912, "2019-07-04");
+insert into diaries values(2913, "2019-07-05");
+insert into diaries values(2914, "2019-07-06");
+insert into diaries values(2915, "2019-07-07");
+insert into diaries values(2916, "2019-07-08");
+insert into diaries values(2917, "2019-07-09");
+insert into diaries values(2918, "2019-07-10");
+insert into diaries values(2919, "2019-07-11");
+insert into diaries values(2920, "2019-07-12");
+insert into diaries values(2921, "2019-07-13");
+insert into diaries values(2922, "2019-07-14");
+insert into diaries values(2923, "2019-07-15");
+insert into diaries values(2924, "2019-07-16");
+insert into diaries values(2925, "2019-07-17");
+insert into diaries values(2926, "2019-07-18");
+insert into diaries values(2927, "2019-07-19");
+insert into diaries values(2928, "2019-07-20");
+insert into diaries values(2929, "2019-07-21");
+insert into diaries values(2930, "2019-07-22");
+insert into diaries values(2931, "2019-07-23");
+insert into diaries values(2932, "2019-07-24");
+insert into diaries values(2933, "2019-07-25");
+insert into diaries values(2934, "2019-07-26");
+insert into diaries values(2935, "2019-07-27");
+insert into diaries values(2936, "2019-07-28");
+insert into diaries values(2937, "2019-07-29");
+insert into diaries values(2938, "2019-07-30");
+insert into diaries values(2939, "2019-07-31");
+insert into diaries values(2940, "2019-08-01");
+insert into diaries values(2941, "2019-08-02");
+insert into diaries values(2942, "2019-08-03");
+insert into diaries values(2943, "2019-08-04");
+insert into diaries values(2944, "2019-08-05");
+insert into diaries values(2945, "2019-08-06");
+insert into diaries values(2946, "2019-08-07");
+insert into diaries values(2947, "2019-08-08");
+insert into diaries values(2948, "2019-08-09");
+insert into diaries values(2949, "2019-08-10");
+insert into diaries values(2950, "2019-08-11");
+insert into diaries values(2951, "2019-08-12");
+insert into diaries values(2952, "2019-08-13");
+insert into diaries values(2953, "2019-08-14");
+insert into diaries values(2954, "2019-08-15");
+insert into diaries values(2955, "2019-08-16");
+insert into diaries values(2956, "2019-08-17");
+insert into diaries values(2957, "2019-08-18");
+insert into diaries values(2958, "2019-08-19");
+insert into diaries values(2959, "2019-08-20");
+insert into diaries values(2960, "2019-08-21");
+insert into diaries values(2961, "2019-08-22");
+insert into diaries values(2962, "2019-08-23");
+insert into diaries values(2963, "2019-08-24");
+insert into diaries values(2964, "2019-08-25");
+insert into diaries values(2965, "2019-08-26");
+insert into diaries values(2966, "2019-08-27");
+insert into diaries values(2967, "2019-08-28");
+insert into diaries values(2968, "2019-08-29");
+insert into diaries values(2969, "2019-08-30");
+insert into diaries values(2970, "2019-08-31");
+insert into diaries values(2971, "2019-09-01");
+insert into diaries values(2972, "2019-09-02");
+insert into diaries values(2973, "2019-09-03");
+insert into diaries values(2974, "2019-09-04");
+insert into diaries values(2975, "2019-09-05");
+insert into diaries values(2976, "2019-09-06");
+insert into diaries values(2977, "2019-09-07");
+insert into diaries values(2978, "2019-09-08");
+insert into diaries values(2979, "2019-09-09");
+insert into diaries values(2980, "2019-09-10");
+insert into diaries values(2981, "2019-09-11");
+insert into diaries values(2982, "2019-09-12");
+insert into diaries values(2983, "2019-09-13");
+insert into diaries values(2984, "2019-09-14");
+insert into diaries values(2985, "2019-09-15");
+insert into diaries values(2986, "2019-09-16");
+insert into diaries values(2987, "2019-09-17");
+insert into diaries values(2988, "2019-09-18");
+insert into diaries values(2989, "2019-09-19");
+insert into diaries values(2990, "2019-09-20");
+insert into diaries values(2991, "2019-09-21");
+insert into diaries values(2992, "2019-09-22");
+insert into diaries values(2993, "2019-09-23");
+insert into diaries values(2994, "2019-09-24");
+insert into diaries values(2995, "2019-09-25");
+insert into diaries values(2996, "2019-09-26");
+insert into diaries values(2997, "2019-09-27");
+insert into diaries values(2998, "2019-09-28");
+insert into diaries values(2999, "2019-09-29");
+insert into diaries values(3000, "2019-09-30");
+insert into diaries values(3001, "2019-10-01");
+insert into diaries values(3002, "2019-10-02");
+insert into diaries values(3003, "2019-10-03");
+insert into diaries values(3004, "2019-10-04");
+insert into diaries values(3005, "2019-10-05");
+insert into diaries values(3006, "2019-10-06");
+insert into diaries values(3007, "2019-10-07");
+insert into diaries values(3008, "2019-10-08");
+insert into diaries values(3009, "2019-10-09");
+insert into diaries values(3010, "2019-10-10");
+insert into diaries values(3011, "2019-10-11");
+insert into diaries values(3012, "2019-10-12");
+insert into diaries values(3013, "2019-10-13");
+insert into diaries values(3014, "2019-10-14");
+insert into diaries values(3015, "2019-10-15");
+insert into diaries values(3016, "2019-10-16");
+insert into diaries values(3017, "2019-10-17");
+insert into diaries values(3018, "2019-10-18");
+insert into diaries values(3019, "2019-10-19");
+insert into diaries values(3020, "2019-10-20");
+insert into diaries values(3021, "2019-10-21");
+insert into diaries values(3022, "2019-10-22");
+insert into diaries values(3023, "2019-10-23");
+insert into diaries values(3024, "2019-10-24");
+insert into diaries values(3025, "2019-10-25");
+insert into diaries values(3026, "2019-10-26");
+insert into diaries values(3027, "2019-10-27");
+insert into diaries values(3028, "2019-10-28");
+insert into diaries values(3029, "2019-10-29");
+insert into diaries values(3030, "2019-10-30");
+insert into diaries values(3031, "2019-10-31");
+insert into diaries values(3032, "2019-11-01");
+insert into diaries values(3033, "2019-11-02");
+insert into diaries values(3034, "2019-11-03");
+insert into diaries values(3035, "2019-11-04");
+insert into diaries values(3036, "2019-11-05");
+insert into diaries values(3037, "2019-11-06");
+insert into diaries values(3038, "2019-11-07");
+insert into diaries values(3039, "2019-11-08");
+insert into diaries values(3040, "2019-11-09");
+insert into diaries values(3041, "2019-11-10");
+insert into diaries values(3042, "2019-11-11");
+insert into diaries values(3043, "2019-11-12");
+insert into diaries values(3044, "2019-11-13");
+insert into diaries values(3045, "2019-11-14");
+insert into diaries values(3046, "2019-11-15");
+insert into diaries values(3047, "2019-11-16");
+insert into diaries values(3048, "2019-11-17");
+insert into diaries values(3049, "2019-11-18");
+insert into diaries values(3050, "2019-11-19");
+insert into diaries values(3051, "2019-11-20");
+insert into diaries values(3052, "2019-11-21");
+insert into diaries values(3053, "2019-11-22");
+insert into diaries values(3054, "2019-11-23");
+insert into diaries values(3055, "2019-11-24");
+insert into diaries values(3056, "2019-11-25");
+insert into diaries values(3057, "2019-11-26");
+insert into diaries values(3058, "2019-11-27");
+insert into diaries values(3059, "2019-11-28");
+insert into diaries values(3060, "2019-11-29");
+insert into diaries values(3061, "2019-11-30");
+insert into diaries values(3062, "2019-12-01");
+insert into diaries values(3063, "2019-12-02");
+insert into diaries values(3064, "2019-12-03");
+insert into diaries values(3065, "2019-12-04");
+insert into diaries values(3066, "2019-12-05");
+insert into diaries values(3067, "2019-12-06");
+insert into diaries values(3068, "2019-12-07");
+insert into diaries values(3069, "2019-12-08");
+insert into diaries values(3070, "2019-12-09");
+insert into diaries values(3071, "2019-12-10");
+insert into diaries values(3072, "2019-12-11");
+insert into diaries values(3073, "2019-12-12");
+insert into diaries values(3074, "2019-12-13");
+insert into diaries values(3075, "2019-12-14");
+insert into diaries values(3076, "2019-12-15");
+insert into diaries values(3077, "2019-12-16");
+insert into diaries values(3078, "2019-12-17");
+insert into diaries values(3079, "2019-12-18");
+insert into diaries values(3080, "2019-12-19");
+insert into diaries values(3081, "2019-12-20");
+insert into diaries values(3082, "2019-12-21");
+insert into diaries values(3083, "2019-12-22");
+insert into diaries values(3084, "2019-12-23");
+insert into diaries values(3085, "2019-12-24");
+insert into diaries values(3086, "2019-12-25");
+insert into diaries values(3087, "2019-12-26");
+insert into diaries values(3088, "2019-12-27");
+insert into diaries values(3089, "2019-12-28");
+insert into diaries values(3090, "2019-12-29");
+insert into diaries values(3091, "2019-12-30");
+insert into diaries values(3092, "2019-12-31");
+insert into diaries values(3093, "2020-01-01");
+insert into diaries values(3094, "2020-01-02");
+insert into diaries values(3095, "2020-01-03");
+insert into diaries values(3096, "2020-01-04");
+insert into diaries values(3097, "2020-01-05");
+insert into diaries values(3098, "2020-01-06");
+insert into diaries values(3099, "2020-01-07");
+insert into diaries values(3100, "2020-01-08");
+insert into diaries values(3101, "2020-01-09");
+insert into diaries values(3102, "2020-01-10");
+insert into diaries values(3103, "2020-01-11");
+insert into diaries values(3104, "2020-01-12");
+insert into diaries values(3105, "2020-01-13");
+insert into diaries values(3106, "2020-01-14");
+insert into diaries values(3107, "2020-01-15");
+insert into diaries values(3108, "2020-01-16");
+insert into diaries values(3109, "2020-01-17");
+insert into diaries values(3110, "2020-01-18");
+insert into diaries values(3111, "2020-01-19");
+insert into diaries values(3112, "2020-01-20");
+insert into diaries values(3113, "2020-01-21");
+insert into diaries values(3114, "2020-01-22");
+insert into diaries values(3115, "2020-01-23");
+insert into diaries values(3116, "2020-01-24");
+insert into diaries values(3117, "2020-01-25");
+insert into diaries values(3118, "2020-01-26");
+insert into diaries values(3119, "2020-01-27");
+insert into diaries values(3120, "2020-01-28");
+insert into diaries values(3121, "2020-01-29");
+insert into diaries values(3122, "2020-01-30");
+insert into diaries values(3123, "2020-01-31");
+insert into diaries values(3124, "2020-02-01");
+insert into diaries values(3125, "2020-02-02");
+insert into diaries values(3126, "2020-02-03");
+insert into diaries values(3127, "2020-02-04");
+insert into diaries values(3128, "2020-02-05");
+insert into diaries values(3129, "2020-02-06");
+insert into diaries values(3130, "2020-02-07");
+insert into diaries values(3131, "2020-02-08");
+insert into diaries values(3132, "2020-02-09");
+insert into diaries values(3133, "2020-02-10");
+insert into diaries values(3134, "2020-02-11");
+insert into diaries values(3135, "2020-02-12");
+insert into diaries values(3136, "2020-02-13");
+insert into diaries values(3137, "2020-02-14");
+insert into diaries values(3138, "2020-02-15");
+insert into diaries values(3139, "2020-02-16");
+insert into diaries values(3140, "2020-02-17");
+insert into diaries values(3141, "2020-02-18");
+insert into diaries values(3142, "2020-02-19");
+insert into diaries values(3143, "2020-02-20");
+insert into diaries values(3144, "2020-02-21");
+insert into diaries values(3145, "2020-02-22");
+insert into diaries values(3146, "2020-02-23");
+insert into diaries values(3147, "2020-02-24");
+insert into diaries values(3148, "2020-02-25");
+insert into diaries values(3149, "2020-02-26");
+insert into diaries values(3150, "2020-02-27");
+insert into diaries values(3151, "2020-02-28");
+insert into diaries values(3152, "2020-02-29");
+insert into diaries values(3153, "2020-03-01");
+insert into diaries values(3154, "2020-03-02");
+insert into diaries values(3155, "2020-03-03");
+insert into diaries values(3156, "2020-03-04");
+insert into diaries values(3157, "2020-03-05");
+insert into diaries values(3158, "2020-03-06");
+insert into diaries values(3159, "2020-03-07");
+insert into diaries values(3160, "2020-03-08");
+insert into diaries values(3161, "2020-03-09");
+insert into diaries values(3162, "2020-03-10");
+insert into diaries values(3163, "2020-03-11");
+insert into diaries values(3164, "2020-03-12");
+insert into diaries values(3165, "2020-03-13");
+insert into diaries values(3166, "2020-03-14");
+insert into diaries values(3167, "2020-03-15");
+insert into diaries values(3168, "2020-03-16");
+insert into diaries values(3169, "2020-03-17");
+insert into diaries values(3170, "2020-03-18");
+insert into diaries values(3171, "2020-03-19");
+insert into diaries values(3172, "2020-03-20");
+insert into diaries values(3173, "2020-03-21");
+insert into diaries values(3174, "2020-03-22");
+insert into diaries values(3175, "2020-03-23");
+insert into diaries values(3176, "2020-03-24");
+insert into diaries values(3177, "2020-03-25");
+insert into diaries values(3178, "2020-03-26");
+insert into diaries values(3179, "2020-03-27");
+insert into diaries values(3180, "2020-03-28");
+insert into diaries values(3181, "2020-03-29");
+insert into diaries values(3182, "2020-03-30");
+insert into diaries values(3183, "2020-03-31");
+insert into diaries values(3184, "2020-04-01");
+insert into diaries values(3185, "2020-04-02");
+insert into diaries values(3186, "2020-04-03");
+insert into diaries values(3187, "2020-04-04");
+insert into diaries values(3188, "2020-04-05");
+insert into diaries values(3189, "2020-04-06");
+insert into diaries values(3190, "2020-04-07");
+insert into diaries values(3191, "2020-04-08");
+insert into diaries values(3192, "2020-04-09");
+insert into diaries values(3193, "2020-04-10");
+insert into diaries values(3194, "2020-04-11");
+insert into diaries values(3195, "2020-04-12");
+insert into diaries values(3196, "2020-04-13");
+insert into diaries values(3197, "2020-04-14");
+insert into diaries values(3198, "2020-04-15");
+insert into diaries values(3199, "2020-04-16");
+insert into diaries values(3200, "2020-04-17");
+insert into diaries values(3201, "2020-04-18");
+insert into diaries values(3202, "2020-04-19");
+insert into diaries values(3203, "2020-04-20");
+insert into diaries values(3204, "2020-04-21");
+insert into diaries values(3205, "2020-04-22");
+insert into diaries values(3206, "2020-04-23");
+insert into diaries values(3207, "2020-04-24");
+insert into diaries values(3208, "2020-04-25");
+insert into diaries values(3209, "2020-04-26");
+insert into diaries values(3210, "2020-04-27");
+insert into diaries values(3211, "2020-04-28");
+insert into diaries values(3212, "2020-04-29");
+insert into diaries values(3213, "2020-04-30");
+insert into diaries values(3214, "2020-05-01");
+insert into diaries values(3215, "2020-05-02");
+insert into diaries values(3216, "2020-05-03");
+insert into diaries values(3217, "2020-05-04");
+insert into diaries values(3218, "2020-05-05");
+insert into diaries values(3219, "2020-05-06");
+insert into diaries values(3220, "2020-05-07");
+insert into diaries values(3221, "2020-05-08");
+insert into diaries values(3222, "2020-05-09");
+insert into diaries values(3223, "2020-05-10");
+insert into diaries values(3224, "2020-05-11");
+insert into diaries values(3225, "2020-05-12");
+insert into diaries values(3226, "2020-05-13");
+insert into diaries values(3227, "2020-05-14");
+insert into diaries values(3228, "2020-05-15");
+insert into diaries values(3229, "2020-05-16");
+insert into diaries values(3230, "2020-05-17");
+insert into diaries values(3231, "2020-05-18");
+insert into diaries values(3232, "2020-05-19");
+insert into diaries values(3233, "2020-05-20");
+insert into diaries values(3234, "2020-05-21");
+insert into diaries values(3235, "2020-05-22");
+insert into diaries values(3236, "2020-05-23");
+insert into diaries values(3237, "2020-05-24");
+insert into diaries values(3238, "2020-05-25");
+insert into diaries values(3239, "2020-05-26");
+insert into diaries values(3240, "2020-05-27");
+insert into diaries values(3241, "2020-05-28");
+insert into diaries values(3242, "2020-05-29");
+insert into diaries values(3243, "2020-05-30");
+insert into diaries values(3244, "2020-05-31");
+insert into diaries values(3245, "2020-06-01");
+insert into diaries values(3246, "2020-06-02");
+insert into diaries values(3247, "2020-06-03");
+insert into diaries values(3248, "2020-06-04");
+insert into diaries values(3249, "2020-06-05");
+insert into diaries values(3250, "2020-06-06");
+insert into diaries values(3251, "2020-06-07");
+insert into diaries values(3252, "2020-06-08");
+insert into diaries values(3253, "2020-06-09");
+insert into diaries values(3254, "2020-06-10");
+insert into diaries values(3255, "2020-06-11");
+insert into diaries values(3256, "2020-06-12");
+insert into diaries values(3257, "2020-06-13");
+insert into diaries values(3258, "2020-06-14");
+insert into diaries values(3259, "2020-06-15");
+insert into diaries values(3260, "2020-06-16");
+insert into diaries values(3261, "2020-06-17");
+insert into diaries values(3262, "2020-06-18");
+insert into diaries values(3263, "2020-06-19");
+insert into diaries values(3264, "2020-06-20");
+insert into diaries values(3265, "2020-06-21");
+insert into diaries values(3266, "2020-06-22");
+insert into diaries values(3267, "2020-06-23");
+insert into diaries values(3268, "2020-06-24");
+insert into diaries values(3269, "2020-06-25");
+insert into diaries values(3270, "2020-06-26");
+insert into diaries values(3271, "2020-06-27");
+insert into diaries values(3272, "2020-06-28");
+insert into diaries values(3273, "2020-06-29");
+insert into diaries values(3274, "2020-06-30");
+insert into diaries values(3275, "2020-07-01");
+insert into diaries values(3276, "2020-07-02");
+insert into diaries values(3277, "2020-07-03");
+insert into diaries values(3278, "2020-07-04");
+insert into diaries values(3279, "2020-07-05");
+insert into diaries values(3280, "2020-07-06");
+insert into diaries values(3281, "2020-07-07");
+insert into diaries values(3282, "2020-07-08");
+insert into diaries values(3283, "2020-07-09");
+insert into diaries values(3284, "2020-07-10");
+insert into diaries values(3285, "2020-07-11");
+insert into diaries values(3286, "2020-07-12");
+insert into diaries values(3287, "2020-07-13");
+insert into diaries values(3288, "2020-07-14");
+insert into diaries values(3289, "2020-07-15");
+insert into diaries values(3290, "2020-07-16");
+insert into diaries values(3291, "2020-07-17");
+insert into diaries values(3292, "2020-07-18");
+insert into diaries values(3293, "2020-07-19");
+insert into diaries values(3294, "2020-07-20");
+insert into diaries values(3295, "2020-07-21");
+insert into diaries values(3296, "2020-07-22");
+insert into diaries values(3297, "2020-07-23");
+insert into diaries values(3298, "2020-07-24");
+insert into diaries values(3299, "2020-07-25");
+insert into diaries values(3300, "2020-07-26");
+insert into diaries values(3301, "2020-07-27");
+insert into diaries values(3302, "2020-07-28");
+insert into diaries values(3303, "2020-07-29");
+insert into diaries values(3304, "2020-07-30");
+insert into diaries values(3305, "2020-07-31");
+insert into diaries values(3306, "2020-08-01");
+insert into diaries values(3307, "2020-08-02");
+insert into diaries values(3308, "2020-08-03");
+insert into diaries values(3309, "2020-08-04");
+insert into diaries values(3310, "2020-08-05");
+insert into diaries values(3311, "2020-08-06");
+insert into diaries values(3312, "2020-08-07");
+insert into diaries values(3313, "2020-08-08");
+insert into diaries values(3314, "2020-08-09");
+insert into diaries values(3315, "2020-08-10");
+insert into diaries values(3316, "2020-08-11");
+insert into diaries values(3317, "2020-08-12");
+insert into diaries values(3318, "2020-08-13");
+insert into diaries values(3319, "2020-08-14");
+insert into diaries values(3320, "2020-08-15");
+insert into diaries values(3321, "2020-08-16");
+insert into diaries values(3322, "2020-08-17");
+insert into diaries values(3323, "2020-08-18");
+insert into diaries values(3324, "2020-08-19");
+insert into diaries values(3325, "2020-08-20");
+insert into diaries values(3326, "2020-08-21");
+insert into diaries values(3327, "2020-08-22");
+insert into diaries values(3328, "2020-08-23");
+insert into diaries values(3329, "2020-08-24");
+insert into diaries values(3330, "2020-08-25");
+insert into diaries values(3331, "2020-08-26");
+insert into diaries values(3332, "2020-08-27");
+insert into diaries values(3333, "2020-08-28");
+insert into diaries values(3334, "2020-08-29");
+insert into diaries values(3335, "2020-08-30");
+insert into diaries values(3336, "2020-08-31");
+insert into diaries values(3337, "2020-09-01");
+insert into diaries values(3338, "2020-09-02");
+insert into diaries values(3339, "2020-09-03");
+insert into diaries values(3340, "2020-09-04");
+insert into diaries values(3341, "2020-09-05");
+insert into diaries values(3342, "2020-09-06");
+insert into diaries values(3343, "2020-09-07");
+insert into diaries values(3344, "2020-09-08");
+insert into diaries values(3345, "2020-09-09");
+insert into diaries values(3346, "2020-09-10");
+insert into diaries values(3347, "2020-09-11");
+insert into diaries values(3348, "2020-09-12");
+insert into diaries values(3349, "2020-09-13");
+insert into diaries values(3350, "2020-09-14");
+insert into diaries values(3351, "2020-09-15");
+insert into diaries values(3352, "2020-09-16");
+insert into diaries values(3353, "2020-09-17");
+insert into diaries values(3354, "2020-09-18");
+insert into diaries values(3355, "2020-09-19");
+insert into diaries values(3356, "2020-09-20");
+insert into diaries values(3357, "2020-09-21");
+insert into diaries values(3358, "2020-09-22");
+insert into diaries values(3359, "2020-09-23");
+insert into diaries values(3360, "2020-09-24");
+insert into diaries values(3361, "2020-09-25");
+insert into diaries values(3362, "2020-09-26");
+insert into diaries values(3363, "2020-09-27");
+insert into diaries values(3364, "2020-09-28");
+insert into diaries values(3365, "2020-09-29");
+insert into diaries values(3366, "2020-09-30");
+insert into diaries values(3367, "2020-10-01");
+insert into diaries values(3368, "2020-10-02");
+insert into diaries values(3369, "2020-10-03");
+insert into diaries values(3370, "2020-10-04");
+insert into diaries values(3371, "2020-10-05");
+insert into diaries values(3372, "2020-10-06");
+insert into diaries values(3373, "2020-10-07");
+insert into diaries values(3374, "2020-10-08");
+insert into diaries values(3375, "2020-10-09");
+insert into diaries values(3376, "2020-10-10");
+insert into diaries values(3377, "2020-10-11");
+insert into diaries values(3378, "2020-10-12");
+insert into diaries values(3379, "2020-10-13");
+insert into diaries values(3380, "2020-10-14");
+insert into diaries values(3381, "2020-10-15");
+insert into diaries values(3382, "2020-10-16");
+insert into diaries values(3383, "2020-10-17");
+insert into diaries values(3384, "2020-10-18");
+insert into diaries values(3385, "2020-10-19");
+insert into diaries values(3386, "2020-10-20");
+insert into diaries values(3387, "2020-10-21");
+insert into diaries values(3388, "2020-10-22");
+insert into diaries values(3389, "2020-10-23");
+insert into diaries values(3390, "2020-10-24");
+insert into diaries values(3391, "2020-10-25");
+insert into diaries values(3392, "2020-10-26");
+insert into diaries values(3393, "2020-10-27");
+insert into diaries values(3394, "2020-10-28");
+insert into diaries values(3395, "2020-10-29");
+insert into diaries values(3396, "2020-10-30");
+insert into diaries values(3397, "2020-10-31");
+insert into diaries values(3398, "2020-11-01");
+insert into diaries values(3399, "2020-11-02");
+insert into diaries values(3400, "2020-11-03");
+insert into diaries values(3401, "2020-11-04");
+insert into diaries values(3402, "2020-11-05");
+insert into diaries values(3403, "2020-11-06");
+insert into diaries values(3404, "2020-11-07");
+insert into diaries values(3405, "2020-11-08");
+insert into diaries values(3406, "2020-11-09");
+insert into diaries values(3407, "2020-11-10");
+insert into diaries values(3408, "2020-11-11");
+insert into diaries values(3409, "2020-11-12");
+insert into diaries values(3410, "2020-11-13");
+insert into diaries values(3411, "2020-11-14");
+insert into diaries values(3412, "2020-11-15");
+insert into diaries values(3413, "2020-11-16");
+insert into diaries values(3414, "2020-11-17");
+insert into diaries values(3415, "2020-11-18");
+insert into diaries values(3416, "2020-11-19");
+insert into diaries values(3417, "2020-11-20");
+insert into diaries values(3418, "2020-11-21");
+insert into diaries values(3419, "2020-11-22");
+insert into diaries values(3420, "2020-11-23");
+insert into diaries values(3421, "2020-11-24");
+insert into diaries values(3422, "2020-11-25");
+insert into diaries values(3423, "2020-11-26");
+insert into diaries values(3424, "2020-11-27");
+insert into diaries values(3425, "2020-11-28");
+insert into diaries values(3426, "2020-11-29");
+insert into diaries values(3427, "2020-11-30");
+insert into diaries values(3428, "2020-12-01");
+insert into diaries values(3429, "2020-12-02");
+insert into diaries values(3430, "2020-12-03");
+insert into diaries values(3431, "2020-12-04");
+insert into diaries values(3432, "2020-12-05");
+insert into diaries values(3433, "2020-12-06");
+insert into diaries values(3434, "2020-12-07");
+insert into diaries values(3435, "2020-12-08");
+insert into diaries values(3436, "2020-12-09");
+insert into diaries values(3437, "2020-12-10");
+insert into diaries values(3438, "2020-12-11");
+insert into diaries values(3439, "2020-12-12");
+insert into diaries values(3440, "2020-12-13");
+insert into diaries values(3441, "2020-12-14");
+insert into diaries values(3442, "2020-12-15");
+insert into diaries values(3443, "2020-12-16");
+insert into diaries values(3444, "2020-12-17");
+insert into diaries values(3445, "2020-12-18");
+insert into diaries values(3446, "2020-12-19");
+insert into diaries values(3447, "2020-12-20");
+insert into diaries values(3448, "2020-12-21");
+insert into diaries values(3449, "2020-12-22");
+insert into diaries values(3450, "2020-12-23");
+insert into diaries values(3451, "2020-12-24");
+insert into diaries values(3452, "2020-12-25");
+insert into diaries values(3453, "2020-12-26");
+insert into diaries values(3454, "2020-12-27");
+insert into diaries values(3455, "2020-12-28");
+insert into diaries values(3456, "2020-12-29");
+insert into diaries values(3457, "2020-12-30");
+insert into diaries values(3458, "2020-12-31");
+insert into diaries values(3459, "2021-01-01");
+insert into diaries values(3460, "2021-01-02");
+insert into diaries values(3461, "2021-01-03");
+insert into diaries values(3462, "2021-01-04");
+insert into diaries values(3463, "2021-01-05");
+insert into diaries values(3464, "2021-01-06");
+insert into diaries values(3465, "2021-01-07");
+insert into diaries values(3466, "2021-01-08");
+insert into diaries values(3467, "2021-01-09");
+insert into diaries values(3468, "2021-01-10");
+insert into diaries values(3469, "2021-01-11");
+insert into diaries values(3470, "2021-01-12");
+insert into diaries values(3471, "2021-01-13");
+insert into diaries values(3472, "2021-01-14");
+insert into diaries values(3473, "2021-01-15");
+insert into diaries values(3474, "2021-01-16");
+insert into diaries values(3475, "2021-01-17");
+insert into diaries values(3476, "2021-01-18");
+insert into diaries values(3477, "2021-01-19");
+insert into diaries values(3478, "2021-01-20");
+insert into diaries values(3479, "2021-01-21");
+insert into diaries values(3480, "2021-01-22");
+insert into diaries values(3481, "2021-01-23");
+insert into diaries values(3482, "2021-01-24");
+insert into diaries values(3483, "2021-01-25");
+insert into diaries values(3484, "2021-01-26");
+insert into diaries values(3485, "2021-01-27");
+insert into diaries values(3486, "2021-01-28");
+insert into diaries values(3487, "2021-01-29");
+insert into diaries values(3488, "2021-01-30");
+insert into diaries values(3489, "2021-01-31");
+insert into diaries values(3490, "2021-02-01");
+insert into diaries values(3491, "2021-02-02");
+insert into diaries values(3492, "2021-02-03");
+insert into diaries values(3493, "2021-02-04");
+insert into diaries values(3494, "2021-02-05");
+insert into diaries values(3495, "2021-02-06");
+insert into diaries values(3496, "2021-02-07");
+insert into diaries values(3497, "2021-02-08");
+insert into diaries values(3498, "2021-02-09");
+insert into diaries values(3499, "2021-02-10");
+insert into diaries values(3500, "2021-02-11");
+insert into diaries values(3501, "2021-02-12");
+insert into diaries values(3502, "2021-02-13");
+insert into diaries values(3503, "2021-02-14");
+insert into diaries values(3504, "2021-02-15");
+insert into diaries values(3505, "2021-02-16");
+insert into diaries values(3506, "2021-02-17");
+insert into diaries values(3507, "2021-02-18");
+insert into diaries values(3508, "2021-02-19");
+insert into diaries values(3509, "2021-02-20");
+insert into diaries values(3510, "2021-02-21");
+insert into diaries values(3511, "2021-02-22");
+insert into diaries values(3512, "2021-02-23");
+insert into diaries values(3513, "2021-02-24");
+insert into diaries values(3514, "2021-02-25");
+insert into diaries values(3515, "2021-02-26");
+insert into diaries values(3516, "2021-02-27");
+insert into diaries values(3517, "2021-02-28");
+insert into diaries values(3518, "2021-03-01");
+insert into diaries values(3519, "2021-03-02");
+insert into diaries values(3520, "2021-03-03");
+insert into diaries values(3521, "2021-03-04");
+insert into diaries values(3522, "2021-03-05");
+insert into diaries values(3523, "2021-03-06");
+insert into diaries values(3524, "2021-03-07");
+insert into diaries values(3525, "2021-03-08");
+insert into diaries values(3526, "2021-03-09");
+insert into diaries values(3527, "2021-03-10");
+insert into diaries values(3528, "2021-03-11");
+insert into diaries values(3529, "2021-03-12");
+insert into diaries values(3530, "2021-03-13");
+insert into diaries values(3531, "2021-03-14");
+insert into diaries values(3532, "2021-03-15");
+insert into diaries values(3533, "2021-03-16");
+insert into diaries values(3534, "2021-03-17");
+insert into diaries values(3535, "2021-03-18");
+insert into diaries values(3536, "2021-03-19");
+insert into diaries values(3537, "2021-03-20");
+insert into diaries values(3538, "2021-03-21");
+insert into diaries values(3539, "2021-03-22");
+insert into diaries values(3540, "2021-03-23");
+insert into diaries values(3541, "2021-03-24");
+insert into diaries values(3542, "2021-03-25");
+insert into diaries values(3543, "2021-03-26");
+insert into diaries values(3544, "2021-03-27");
+insert into diaries values(3545, "2021-03-28");
+insert into diaries values(3546, "2021-03-29");
+insert into diaries values(3547, "2021-03-30");
+insert into diaries values(3548, "2021-03-31");
+insert into diaries values(3549, "2021-04-01");
+insert into diaries values(3550, "2021-04-02");
+insert into diaries values(3551, "2021-04-03");
+insert into diaries values(3552, "2021-04-04");
+insert into diaries values(3553, "2021-04-05");
+insert into diaries values(3554, "2021-04-06");
+insert into diaries values(3555, "2021-04-07");
+insert into diaries values(3556, "2021-04-08");
+insert into diaries values(3557, "2021-04-09");
+insert into diaries values(3558, "2021-04-10");
+insert into diaries values(3559, "2021-04-11");
+insert into diaries values(3560, "2021-04-12");
+insert into diaries values(3561, "2021-04-13");
+insert into diaries values(3562, "2021-04-14");
+insert into diaries values(3563, "2021-04-15");
+insert into diaries values(3564, "2021-04-16");
+insert into diaries values(3565, "2021-04-17");
+insert into diaries values(3566, "2021-04-18");
+insert into diaries values(3567, "2021-04-19");
+insert into diaries values(3568, "2021-04-20");
+insert into diaries values(3569, "2021-04-21");
+insert into diaries values(3570, "2021-04-22");
+insert into diaries values(3571, "2021-04-23");
+insert into diaries values(3572, "2021-04-24");
+insert into diaries values(3573, "2021-04-25");
+insert into diaries values(3574, "2021-04-26");
+insert into diaries values(3575, "2021-04-27");
+insert into diaries values(3576, "2021-04-28");
+insert into diaries values(3577, "2021-04-29");
+insert into diaries values(3578, "2021-04-30");
+insert into diaries values(3579, "2021-05-01");
+insert into diaries values(3580, "2021-05-02");
+insert into diaries values(3581, "2021-05-03");
+insert into diaries values(3582, "2021-05-04");
+insert into diaries values(3583, "2021-05-05");
+insert into diaries values(3584, "2021-05-06");
+insert into diaries values(3585, "2021-05-07");
+insert into diaries values(3586, "2021-05-08");
+insert into diaries values(3587, "2021-05-09");
+insert into diaries values(3588, "2021-05-10");
+insert into diaries values(3589, "2021-05-11");
+insert into diaries values(3590, "2021-05-12");
+insert into diaries values(3591, "2021-05-13");
+insert into diaries values(3592, "2021-05-14");
+insert into diaries values(3593, "2021-05-15");
+insert into diaries values(3594, "2021-05-16");
+insert into diaries values(3595, "2021-05-17");
+insert into diaries values(3596, "2021-05-18");
+insert into diaries values(3597, "2021-05-19");
+insert into diaries values(3598, "2021-05-20");
+insert into diaries values(3599, "2021-05-21");
+insert into diaries values(3600, "2021-05-22");
+insert into diaries values(3601, "2021-05-23");
+insert into diaries values(3602, "2021-05-24");
+insert into diaries values(3603, "2021-05-25");
+insert into diaries values(3604, "2021-05-26");
+insert into diaries values(3605, "2021-05-27");
+insert into diaries values(3606, "2021-05-28");
+insert into diaries values(3607, "2021-05-29");
+insert into diaries values(3608, "2021-05-30");
+insert into diaries values(3609, "2021-05-31");
+insert into diaries values(3610, "2021-06-01");
+insert into diaries values(3611, "2021-06-02");
+insert into diaries values(3612, "2021-06-03");
+insert into diaries values(3613, "2021-06-04");
+insert into diaries values(3614, "2021-06-05");
+insert into diaries values(3615, "2021-06-06");
+insert into diaries values(3616, "2021-06-07");
+insert into diaries values(3617, "2021-06-08");
+insert into diaries values(3618, "2021-06-09");
+insert into diaries values(3619, "2021-06-10");
+insert into diaries values(3620, "2021-06-11");
+insert into diaries values(3621, "2021-06-12");
+insert into diaries values(3622, "2021-06-13");
+insert into diaries values(3623, "2021-06-14");
+insert into diaries values(3624, "2021-06-15");
+insert into diaries values(3625, "2021-06-16");
+insert into diaries values(3626, "2021-06-17");
+insert into diaries values(3627, "2021-06-18");
+insert into diaries values(3628, "2021-06-19");
+insert into diaries values(3629, "2021-06-20");
+insert into diaries values(3630, "2021-06-21");
+insert into diaries values(3631, "2021-06-22");
+insert into diaries values(3632, "2021-06-23");
+insert into diaries values(3633, "2021-06-24");
+insert into diaries values(3634, "2021-06-25");
+insert into diaries values(3635, "2021-06-26");
+insert into diaries values(3636, "2021-06-27");
+insert into diaries values(3637, "2021-06-28");
+insert into diaries values(3638, "2021-06-29");
+insert into diaries values(3639, "2021-06-30");
+insert into diaries values(3640, "2021-07-01");
+insert into diaries values(3641, "2021-07-02");
+insert into diaries values(3642, "2021-07-03");
+insert into diaries values(3643, "2021-07-04");
+insert into diaries values(3644, "2021-07-05");
+insert into diaries values(3645, "2021-07-06");
+insert into diaries values(3646, "2021-07-07");
+insert into diaries values(3647, "2021-07-08");
+insert into diaries values(3648, "2021-07-09");
+insert into diaries values(3649, "2021-07-10");
+insert into diaries values(3650, "2021-07-11");
+insert into diaries values(3651, "2021-07-12");
+insert into diaries values(3652, "2021-07-13");
+insert into diaries values(3653, "2021-07-14");
+insert into diaries values(3654, "2021-07-15");
+insert into diaries values(3655, "2021-07-16");
+insert into diaries values(3656, "2021-07-17");
+insert into diaries values(3657, "2021-07-18");
+insert into diaries values(3658, "2021-07-19");
+insert into diaries values(3659, "2021-07-20");
+insert into diaries values(3660, "2021-07-21");
+insert into diaries values(3661, "2021-07-22");
+insert into diaries values(3662, "2021-07-23");
+insert into diaries values(3663, "2021-07-24");
+insert into diaries values(3664, "2021-07-25");
+insert into diaries values(3665, "2021-07-26");
+insert into diaries values(3666, "2021-07-27");
+insert into diaries values(3667, "2021-07-28");
+insert into diaries values(3668, "2021-07-29");
+insert into diaries values(3669, "2021-07-30");
+insert into diaries values(3670, "2021-07-31");
+insert into diaries values(3671, "2021-08-01");
+insert into diaries values(3672, "2021-08-02");
+insert into diaries values(3673, "2021-08-03");
+insert into diaries values(3674, "2021-08-04");
+insert into diaries values(3675, "2021-08-05");
+insert into diaries values(3676, "2021-08-06");
+insert into diaries values(3677, "2021-08-07");
+insert into diaries values(3678, "2021-08-08");
+insert into diaries values(3679, "2021-08-09");
+insert into diaries values(3680, "2021-08-10");
+insert into diaries values(3681, "2021-08-11");
+insert into diaries values(3682, "2021-08-12");
+insert into diaries values(3683, "2021-08-13");
+insert into diaries values(3684, "2021-08-14");
+insert into diaries values(3685, "2021-08-15");
+insert into diaries values(3686, "2021-08-16");
+insert into diaries values(3687, "2021-08-17");
+insert into diaries values(3688, "2021-08-18");
+insert into diaries values(3689, "2021-08-19");
+insert into diaries values(3690, "2021-08-20");
+insert into diaries values(3691, "2021-08-21");
+insert into diaries values(3692, "2021-08-22");
+insert into diaries values(3693, "2021-08-23");
+insert into diaries values(3694, "2021-08-24");
+insert into diaries values(3695, "2021-08-25");
+insert into diaries values(3696, "2021-08-26");
+insert into diaries values(3697, "2021-08-27");
+insert into diaries values(3698, "2021-08-28");
+insert into diaries values(3699, "2021-08-29");
+insert into diaries values(3700, "2021-08-30");
+insert into diaries values(3701, "2021-08-31");
+insert into diaries values(3702, "2021-09-01");
+insert into diaries values(3703, "2021-09-02");
+insert into diaries values(3704, "2021-09-03");
+insert into diaries values(3705, "2021-09-04");
+insert into diaries values(3706, "2021-09-05");
+insert into diaries values(3707, "2021-09-06");
+insert into diaries values(3708, "2021-09-07");
+insert into diaries values(3709, "2021-09-08");
+insert into diaries values(3710, "2021-09-09");
+insert into diaries values(3711, "2021-09-10");
+insert into diaries values(3712, "2021-09-11");
+insert into diaries values(3713, "2021-09-12");
+insert into diaries values(3714, "2021-09-13");
+insert into diaries values(3715, "2021-09-14");
+insert into diaries values(3716, "2021-09-15");
+insert into diaries values(3717, "2021-09-16");
+insert into diaries values(3718, "2021-09-17");
+insert into diaries values(3719, "2021-09-18");
+insert into diaries values(3720, "2021-09-19");
+insert into diaries values(3721, "2021-09-20");
+insert into diaries values(3722, "2021-09-21");
+insert into diaries values(3723, "2021-09-22");
+insert into diaries values(3724, "2021-09-23");
+insert into diaries values(3725, "2021-09-24");
+insert into diaries values(3726, "2021-09-25");
+insert into diaries values(3727, "2021-09-26");
+insert into diaries values(3728, "2021-09-27");
+insert into diaries values(3729, "2021-09-28");
+insert into diaries values(3730, "2021-09-29");
+insert into diaries values(3731, "2021-09-30");
+insert into diaries values(3732, "2021-10-01");
+insert into diaries values(3733, "2021-10-02");
+insert into diaries values(3734, "2021-10-03");
+insert into diaries values(3735, "2021-10-04");
+insert into diaries values(3736, "2021-10-05");
+insert into diaries values(3737, "2021-10-06");
+insert into diaries values(3738, "2021-10-07");
+insert into diaries values(3739, "2021-10-08");
+insert into diaries values(3740, "2021-10-09");
+insert into diaries values(3741, "2021-10-10");
+insert into diaries values(3742, "2021-10-11");
+insert into diaries values(3743, "2021-10-12");
+insert into diaries values(3744, "2021-10-13");
+insert into diaries values(3745, "2021-10-14");
+insert into diaries values(3746, "2021-10-15");
+insert into diaries values(3747, "2021-10-16");
+insert into diaries values(3748, "2021-10-17");
+insert into diaries values(3749, "2021-10-18");
+insert into diaries values(3750, "2021-10-19");
+insert into diaries values(3751, "2021-10-20");
+insert into diaries values(3752, "2021-10-21");
+insert into diaries values(3753, "2021-10-22");
+insert into diaries values(3754, "2021-10-23");
+insert into diaries values(3755, "2021-10-24");
+insert into diaries values(3756, "2021-10-25");
+insert into diaries values(3757, "2021-10-26");
+insert into diaries values(3758, "2021-10-27");
+insert into diaries values(3759, "2021-10-28");
+insert into diaries values(3760, "2021-10-29");
+insert into diaries values(3761, "2021-10-30");
+insert into diaries values(3762, "2021-10-31");
+insert into diaries values(3763, "2021-11-01");
+insert into diaries values(3764, "2021-11-02");
+insert into diaries values(3765, "2021-11-03");
+insert into diaries values(3766, "2021-11-04");
+insert into diaries values(3767, "2021-11-05");
+insert into diaries values(3768, "2021-11-06");
+insert into diaries values(3769, "2021-11-07");
+insert into diaries values(3770, "2021-11-08");
+insert into diaries values(3771, "2021-11-09");
+insert into diaries values(3772, "2021-11-10");
+insert into diaries values(3773, "2021-11-11");
+insert into diaries values(3774, "2021-11-12");
+insert into diaries values(3775, "2021-11-13");
+insert into diaries values(3776, "2021-11-14");
+insert into diaries values(3777, "2021-11-15");
+insert into diaries values(3778, "2021-11-16");
+insert into diaries values(3779, "2021-11-17");
+insert into diaries values(3780, "2021-11-18");
+insert into diaries values(3781, "2021-11-19");
+insert into diaries values(3782, "2021-11-20");
+insert into diaries values(3783, "2021-11-21");
+insert into diaries values(3784, "2021-11-22");
+insert into diaries values(3785, "2021-11-23");
+insert into diaries values(3786, "2021-11-24");
+insert into diaries values(3787, "2021-11-25");
+insert into diaries values(3788, "2021-11-26");
+insert into diaries values(3789, "2021-11-27");
+insert into diaries values(3790, "2021-11-28");
+insert into diaries values(3791, "2021-11-29");
+insert into diaries values(3792, "2021-11-30");
+insert into diaries values(3793, "2021-12-01");
+insert into diaries values(3794, "2021-12-02");
+insert into diaries values(3795, "2021-12-03");
+insert into diaries values(3796, "2021-12-04");
+insert into diaries values(3797, "2021-12-05");
+insert into diaries values(3798, "2021-12-06");
+insert into diaries values(3799, "2021-12-07");
+insert into diaries values(3800, "2021-12-08");
+insert into diaries values(3801, "2021-12-09");
+insert into diaries values(3802, "2021-12-10");
+insert into diaries values(3803, "2021-12-11");
+insert into diaries values(3804, "2021-12-12");
+insert into diaries values(3805, "2021-12-13");
+insert into diaries values(3806, "2021-12-14");
+insert into diaries values(3807, "2021-12-15");
+insert into diaries values(3808, "2021-12-16");
+insert into diaries values(3809, "2021-12-17");
+insert into diaries values(3810, "2021-12-18");
+insert into diaries values(3811, "2021-12-19");
+insert into diaries values(3812, "2021-12-20");
+insert into diaries values(3813, "2021-12-21");
+insert into diaries values(3814, "2021-12-22");
+insert into diaries values(3815, "2021-12-23");
+insert into diaries values(3816, "2021-12-24");
+insert into diaries values(3817, "2021-12-25");
+insert into diaries values(3818, "2021-12-26");
+insert into diaries values(3819, "2021-12-27");
+insert into diaries values(3820, "2021-12-28");
+insert into diaries values(3821, "2021-12-29");
+insert into diaries values(3822, "2021-12-30");
+insert into diaries values(3823, "2021-12-31");
+insert into diaries values(3824, "2022-01-01");
+insert into diaries values(3825, "2022-01-02");
+insert into diaries values(3826, "2022-01-03");
+insert into diaries values(3827, "2022-01-04");
+insert into diaries values(3828, "2022-01-05");
+insert into diaries values(3829, "2022-01-06");
+insert into diaries values(3830, "2022-01-07");
+insert into diaries values(3831, "2022-01-08");
+insert into diaries values(3832, "2022-01-09");
+insert into diaries values(3833, "2022-01-10");
+insert into diaries values(3834, "2022-01-11");
+insert into diaries values(3835, "2022-01-12");
+insert into diaries values(3836, "2022-01-13");
+insert into diaries values(3837, "2022-01-14");
+insert into diaries values(3838, "2022-01-15");
+insert into diaries values(3839, "2022-01-16");
+insert into diaries values(3840, "2022-01-17");
+insert into diaries values(3841, "2022-01-18");
+insert into diaries values(3842, "2022-01-19");
+insert into diaries values(3843, "2022-01-20");
+insert into diaries values(3844, "2022-01-21");
+insert into diaries values(3845, "2022-01-22");
+insert into diaries values(3846, "2022-01-23");
+insert into diaries values(3847, "2022-01-24");
+insert into diaries values(3848, "2022-01-25");
+insert into diaries values(3849, "2022-01-26");
+insert into diaries values(3850, "2022-01-27");
+insert into diaries values(3851, "2022-01-28");
+insert into diaries values(3852, "2022-01-29");
+insert into diaries values(3853, "2022-01-30");
+insert into diaries values(3854, "2022-01-31");
+insert into diaries values(3855, "2022-02-01");
+insert into diaries values(3856, "2022-02-02");
+insert into diaries values(3857, "2022-02-03");
+insert into diaries values(3858, "2022-02-04");
+insert into diaries values(3859, "2022-02-05");
+insert into diaries values(3860, "2022-02-06");
+insert into diaries values(3861, "2022-02-07");
+insert into diaries values(3862, "2022-02-08");
+insert into diaries values(3863, "2022-02-09");
+insert into diaries values(3864, "2022-02-10");
+insert into diaries values(3865, "2022-02-11");
+insert into diaries values(3866, "2022-02-12");
+insert into diaries values(3867, "2022-02-13");
+insert into diaries values(3868, "2022-02-14");
+insert into diaries values(3869, "2022-02-15");
+insert into diaries values(3870, "2022-02-16");
+insert into diaries values(3871, "2022-02-17");
+insert into diaries values(3872, "2022-02-18");
+insert into diaries values(3873, "2022-02-19");
+insert into diaries values(3874, "2022-02-20");
+insert into diaries values(3875, "2022-02-21");
+insert into diaries values(3876, "2022-02-22");
+insert into diaries values(3877, "2022-02-23");
+insert into diaries values(3878, "2022-02-24");
+insert into diaries values(3879, "2022-02-25");
+insert into diaries values(3880, "2022-02-26");
+insert into diaries values(3881, "2022-02-27");
+insert into diaries values(3882, "2022-02-28");
+insert into diaries values(3883, "2022-03-01");
+insert into diaries values(3884, "2022-03-02");
+insert into diaries values(3885, "2022-03-03");
+insert into diaries values(3886, "2022-03-04");
+insert into diaries values(3887, "2022-03-05");
+insert into diaries values(3888, "2022-03-06");
+insert into diaries values(3889, "2022-03-07");
+insert into diaries values(3890, "2022-03-08");
+insert into diaries values(3891, "2022-03-09");
+insert into diaries values(3892, "2022-03-10");
+insert into diaries values(3893, "2022-03-11");
+insert into diaries values(3894, "2022-03-12");
+insert into diaries values(3895, "2022-03-13");
+insert into diaries values(3896, "2022-03-14");
+insert into diaries values(3897, "2022-03-15");
+insert into diaries values(3898, "2022-03-16");
+insert into diaries values(3899, "2022-03-17");
+insert into diaries values(3900, "2022-03-18");
+insert into diaries values(3901, "2022-03-19");
+insert into diaries values(3902, "2022-03-20");
+insert into diaries values(3903, "2022-03-21");
+insert into diaries values(3904, "2022-03-22");
+insert into diaries values(3905, "2022-03-23");
+insert into diaries values(3906, "2022-03-24");
+insert into diaries values(3907, "2022-03-25");
+insert into diaries values(3908, "2022-03-26");
+insert into diaries values(3909, "2022-03-27");
+insert into diaries values(3910, "2022-03-28");
+insert into diaries values(3911, "2022-03-29");
+insert into diaries values(3912, "2022-03-30");
+insert into diaries values(3913, "2022-03-31");
+insert into diaries values(3914, "2022-04-01");
+insert into diaries values(3915, "2022-04-02");
+insert into diaries values(3916, "2022-04-03");
+insert into diaries values(3917, "2022-04-04");
+insert into diaries values(3918, "2022-04-05");
+insert into diaries values(3919, "2022-04-06");
+insert into diaries values(3920, "2022-04-07");
+insert into diaries values(3921, "2022-04-08");
+insert into diaries values(3922, "2022-04-09");
+insert into diaries values(3923, "2022-04-10");
+insert into diaries values(3924, "2022-04-11");
+insert into diaries values(3925, "2022-04-12");
+insert into diaries values(3926, "2022-04-13");
+insert into diaries values(3927, "2022-04-14");
+insert into diaries values(3928, "2022-04-15");
+insert into diaries values(3929, "2022-04-16");
+insert into diaries values(3930, "2022-04-17");
+insert into diaries values(3931, "2022-04-18");
+insert into diaries values(3932, "2022-04-19");
+insert into diaries values(3933, "2022-04-20");
+insert into diaries values(3934, "2022-04-21");
+insert into diaries values(3935, "2022-04-22");
+insert into diaries values(3936, "2022-04-23");
+insert into diaries values(3937, "2022-04-24");
+insert into diaries values(3938, "2022-04-25");
+insert into diaries values(3939, "2022-04-26");
+insert into diaries values(3940, "2022-04-27");
+insert into diaries values(3941, "2022-04-28");
+insert into diaries values(3942, "2022-04-29");
+insert into diaries values(3943, "2022-04-30");
+insert into diaries values(3944, "2022-05-01");
+insert into diaries values(3945, "2022-05-02");
+insert into diaries values(3946, "2022-05-03");
+insert into diaries values(3947, "2022-05-04");
+insert into diaries values(3948, "2022-05-05");
+insert into diaries values(3949, "2022-05-06");
+insert into diaries values(3950, "2022-05-07");
+insert into diaries values(3951, "2022-05-08");
+insert into diaries values(3952, "2022-05-09");
+insert into diaries values(3953, "2022-05-10");
+insert into diaries values(3954, "2022-05-11");
+insert into diaries values(3955, "2022-05-12");
+insert into diaries values(3956, "2022-05-13");
+insert into diaries values(3957, "2022-05-14");
+insert into diaries values(3958, "2022-05-15");
+insert into diaries values(3959, "2022-05-16");
+insert into diaries values(3960, "2022-05-17");
+insert into diaries values(3961, "2022-05-18");
+insert into diaries values(3962, "2022-05-19");
+insert into diaries values(3963, "2022-05-20");
+insert into diaries values(3964, "2022-05-21");
+insert into diaries values(3965, "2022-05-22");
+insert into diaries values(3966, "2022-05-23");
+insert into diaries values(3967, "2022-05-24");
+insert into diaries values(3968, "2022-05-25");
+insert into diaries values(3969, "2022-05-26");
+insert into diaries values(3970, "2022-05-27");
+insert into diaries values(3971, "2022-05-28");
+insert into diaries values(3972, "2022-05-29");
+insert into diaries values(3973, "2022-05-30");
+insert into diaries values(3974, "2022-05-31");
+insert into diaries values(3975, "2022-06-01");
+insert into diaries values(3976, "2022-06-02");
+insert into diaries values(3977, "2022-06-03");
+insert into diaries values(3978, "2022-06-04");
+insert into diaries values(3979, "2022-06-05");
+insert into diaries values(3980, "2022-06-06");
+insert into diaries values(3981, "2022-06-07");
+insert into diaries values(3982, "2022-06-08");
+insert into diaries values(3983, "2022-06-09");
+insert into diaries values(3984, "2022-06-10");
+insert into diaries values(3985, "2022-06-11");
+insert into diaries values(3986, "2022-06-12");
+insert into diaries values(3987, "2022-06-13");
+insert into diaries values(3988, "2022-06-14");
+insert into diaries values(3989, "2022-06-15");
+insert into diaries values(3990, "2022-06-16");
+insert into diaries values(3991, "2022-06-17");
+insert into diaries values(3992, "2022-06-18");
+insert into diaries values(3993, "2022-06-19");
+insert into diaries values(3994, "2022-06-20");
+insert into diaries values(3995, "2022-06-21");
+insert into diaries values(3996, "2022-06-22");
+insert into diaries values(3997, "2022-06-23");
+insert into diaries values(3998, "2022-06-24");
+insert into diaries values(3999, "2022-06-25");
+insert into diaries values(4000, "2022-06-26");
+insert into diaries values(4001, "2022-06-27");
+insert into diaries values(4002, "2022-06-28");
+insert into diaries values(4003, "2022-06-29");
+insert into diaries values(4004, "2022-06-30");
+insert into diaries values(4005, "2022-07-01");
+insert into diaries values(4006, "2022-07-02");
+insert into diaries values(4007, "2022-07-03");
+insert into diaries values(4008, "2022-07-04");
+insert into diaries values(4009, "2022-07-05");
+insert into diaries values(4010, "2022-07-06");
+insert into diaries values(4011, "2022-07-07");
+insert into diaries values(4012, "2022-07-08");
+insert into diaries values(4013, "2022-07-09");
+insert into diaries values(4014, "2022-07-10");
+insert into diaries values(4015, "2022-07-11");
+insert into diaries values(4016, "2022-07-12");
+insert into diaries values(4017, "2022-07-13");
+insert into diaries values(4018, "2022-07-14");
+insert into diaries values(4019, "2022-07-15");
+insert into diaries values(4020, "2022-07-16");
+insert into diaries values(4021, "2022-07-17");
+insert into diaries values(4022, "2022-07-18");
+insert into diaries values(4023, "2022-07-19");
+insert into diaries values(4024, "2022-07-20");
+insert into diaries values(4025, "2022-07-21");
+insert into diaries values(4026, "2022-07-22");
+insert into diaries values(4027, "2022-07-23");
+insert into diaries values(4028, "2022-07-24");
+insert into diaries values(4029, "2022-07-25");
+insert into diaries values(4030, "2022-07-26");
+insert into diaries values(4031, "2022-07-27");
+insert into diaries values(4032, "2022-07-28");
+insert into diaries values(4033, "2022-07-29");
+insert into diaries values(4034, "2022-07-30");
+insert into diaries values(4035, "2022-07-31");
+insert into diaries values(4036, "2022-08-01");
+insert into diaries values(4037, "2022-08-02");
+insert into diaries values(4038, "2022-08-03");
+insert into diaries values(4039, "2022-08-04");
+insert into diaries values(4040, "2022-08-05");
+insert into diaries values(4041, "2022-08-06");
+insert into diaries values(4042, "2022-08-07");
+insert into diaries values(4043, "2022-08-08");
+insert into diaries values(4044, "2022-08-09");
+insert into diaries values(4045, "2022-08-10");
+insert into diaries values(4046, "2022-08-11");
+insert into diaries values(4047, "2022-08-12");
+insert into diaries values(4048, "2022-08-13");
+insert into diaries values(4049, "2022-08-14");
+insert into diaries values(4050, "2022-08-15");
+insert into diaries values(4051, "2022-08-16");
+insert into diaries values(4052, "2022-08-17");
+insert into diaries values(4053, "2022-08-18");
+insert into diaries values(4054, "2022-08-19");
+insert into diaries values(4055, "2022-08-20");
+insert into diaries values(4056, "2022-08-21");
+insert into diaries values(4057, "2022-08-22");
+insert into diaries values(4058, "2022-08-23");
+insert into diaries values(4059, "2022-08-24");
+insert into diaries values(4060, "2022-08-25");
+insert into diaries values(4061, "2022-08-26");
+insert into diaries values(4062, "2022-08-27");
+insert into diaries values(4063, "2022-08-28");
+insert into diaries values(4064, "2022-08-29");
+insert into diaries values(4065, "2022-08-30");
+insert into diaries values(4066, "2022-08-31");
+insert into diaries values(4067, "2022-09-01");
+insert into diaries values(4068, "2022-09-02");
+insert into diaries values(4069, "2022-09-03");
+insert into diaries values(4070, "2022-09-04");
+insert into diaries values(4071, "2022-09-05");
+insert into diaries values(4072, "2022-09-06");
+insert into diaries values(4073, "2022-09-07");
+insert into diaries values(4074, "2022-09-08");
+insert into diaries values(4075, "2022-09-09");
+insert into diaries values(4076, "2022-09-10");
+insert into diaries values(4077, "2022-09-11");
+insert into diaries values(4078, "2022-09-12");
+insert into diaries values(4079, "2022-09-13");
+insert into diaries values(4080, "2022-09-14");
+insert into diaries values(4081, "2022-09-15");
+insert into diaries values(4082, "2022-09-16");
+insert into diaries values(4083, "2022-09-17");
+insert into diaries values(4084, "2022-09-18");
+insert into diaries values(4085, "2022-09-19");
+insert into diaries values(4086, "2022-09-20");
+insert into diaries values(4087, "2022-09-21");
+insert into diaries values(4088, "2022-09-22");
+insert into diaries values(4089, "2022-09-23");
+insert into diaries values(4090, "2022-09-24");
+insert into diaries values(4091, "2022-09-25");
+insert into diaries values(4092, "2022-09-26");
+insert into diaries values(4093, "2022-09-27");
+insert into diaries values(4094, "2022-09-28");
+insert into diaries values(4095, "2022-09-29");
+commit;
+set autocommit=1;
+select * from diaries where match(title) against("2022-09-0");
+id title
+3824 2022-01-01
+3825 2022-01-02
+3826 2022-01-03
+3827 2022-01-04
+3828 2022-01-05
+3829 2022-01-06
+3830 2022-01-07
+3831 2022-01-08
+3832 2022-01-09
+3833 2022-01-10
+3834 2022-01-11
+3835 2022-01-12
+3836 2022-01-13
+3837 2022-01-14
+3838 2022-01-15
+3839 2022-01-16
+3840 2022-01-17
+3841 2022-01-18
+3842 2022-01-19
+3843 2022-01-20
+3844 2022-01-21
+3845 2022-01-22
+3846 2022-01-23
+3847 2022-01-24
+3848 2022-01-25
+3849 2022-01-26
+3850 2022-01-27
+3851 2022-01-28
+3852 2022-01-29
+3853 2022-01-30
+3854 2022-01-31
+3855 2022-02-01
+3856 2022-02-02
+3857 2022-02-03
+3858 2022-02-04
+3859 2022-02-05
+3860 2022-02-06
+3861 2022-02-07
+3862 2022-02-08
+3863 2022-02-09
+3864 2022-02-10
+3865 2022-02-11
+3866 2022-02-12
+3867 2022-02-13
+3868 2022-02-14
+3869 2022-02-15
+3870 2022-02-16
+3871 2022-02-17
+3872 2022-02-18
+3873 2022-02-19
+3874 2022-02-20
+3875 2022-02-21
+3876 2022-02-22
+3877 2022-02-23
+3878 2022-02-24
+3879 2022-02-25
+3880 2022-02-26
+3881 2022-02-27
+3882 2022-02-28
+3883 2022-03-01
+3884 2022-03-02
+3885 2022-03-03
+3886 2022-03-04
+3887 2022-03-05
+3888 2022-03-06
+3889 2022-03-07
+3890 2022-03-08
+3891 2022-03-09
+3892 2022-03-10
+3893 2022-03-11
+3894 2022-03-12
+3895 2022-03-13
+3896 2022-03-14
+3897 2022-03-15
+3898 2022-03-16
+3899 2022-03-17
+3900 2022-03-18
+3901 2022-03-19
+3902 2022-03-20
+3903 2022-03-21
+3904 2022-03-22
+3905 2022-03-23
+3906 2022-03-24
+3907 2022-03-25
+3908 2022-03-26
+3909 2022-03-27
+3910 2022-03-28
+3911 2022-03-29
+3912 2022-03-30
+3913 2022-03-31
+3914 2022-04-01
+3915 2022-04-02
+3916 2022-04-03
+3917 2022-04-04
+3918 2022-04-05
+3919 2022-04-06
+3920 2022-04-07
+3921 2022-04-08
+3922 2022-04-09
+3923 2022-04-10
+3924 2022-04-11
+3925 2022-04-12
+3926 2022-04-13
+3927 2022-04-14
+3928 2022-04-15
+3929 2022-04-16
+3930 2022-04-17
+3931 2022-04-18
+3932 2022-04-19
+3933 2022-04-20
+3934 2022-04-21
+3935 2022-04-22
+3936 2022-04-23
+3937 2022-04-24
+3938 2022-04-25
+3939 2022-04-26
+3940 2022-04-27
+3941 2022-04-28
+3942 2022-04-29
+3943 2022-04-30
+3944 2022-05-01
+3945 2022-05-02
+3946 2022-05-03
+3947 2022-05-04
+3948 2022-05-05
+3949 2022-05-06
+3950 2022-05-07
+3951 2022-05-08
+3952 2022-05-09
+3953 2022-05-10
+3954 2022-05-11
+3955 2022-05-12
+3956 2022-05-13
+3957 2022-05-14
+3958 2022-05-15
+3959 2022-05-16
+3960 2022-05-17
+3961 2022-05-18
+3962 2022-05-19
+3963 2022-05-20
+3964 2022-05-21
+3965 2022-05-22
+3966 2022-05-23
+3967 2022-05-24
+3968 2022-05-25
+3969 2022-05-26
+3970 2022-05-27
+3971 2022-05-28
+3972 2022-05-29
+3973 2022-05-30
+3974 2022-05-31
+3975 2022-06-01
+3976 2022-06-02
+3977 2022-06-03
+3978 2022-06-04
+3979 2022-06-05
+3980 2022-06-06
+3981 2022-06-07
+3982 2022-06-08
+3983 2022-06-09
+3984 2022-06-10
+3985 2022-06-11
+3986 2022-06-12
+3987 2022-06-13
+3988 2022-06-14
+3989 2022-06-15
+3990 2022-06-16
+3991 2022-06-17
+3992 2022-06-18
+3993 2022-06-19
+3994 2022-06-20
+3995 2022-06-21
+3996 2022-06-22
+3997 2022-06-23
+3998 2022-06-24
+3999 2022-06-25
+4000 2022-06-26
+4001 2022-06-27
+4002 2022-06-28
+4003 2022-06-29
+4004 2022-06-30
+4005 2022-07-01
+4006 2022-07-02
+4007 2022-07-03
+4008 2022-07-04
+4009 2022-07-05
+4010 2022-07-06
+4011 2022-07-07
+4012 2022-07-08
+4013 2022-07-09
+4014 2022-07-10
+4015 2022-07-11
+4016 2022-07-12
+4017 2022-07-13
+4018 2022-07-14
+4019 2022-07-15
+4020 2022-07-16
+4021 2022-07-17
+4022 2022-07-18
+4023 2022-07-19
+4024 2022-07-20
+4025 2022-07-21
+4026 2022-07-22
+4027 2022-07-23
+4028 2022-07-24
+4029 2022-07-25
+4030 2022-07-26
+4031 2022-07-27
+4032 2022-07-28
+4033 2022-07-29
+4034 2022-07-30
+4035 2022-07-31
+4036 2022-08-01
+4037 2022-08-02
+4038 2022-08-03
+4039 2022-08-04
+4040 2022-08-05
+4041 2022-08-06
+4042 2022-08-07
+4043 2022-08-08
+4044 2022-08-09
+4045 2022-08-10
+4046 2022-08-11
+4047 2022-08-12
+4048 2022-08-13
+4049 2022-08-14
+4050 2022-08-15
+4051 2022-08-16
+4052 2022-08-17
+4053 2022-08-18
+4054 2022-08-19
+4055 2022-08-20
+4056 2022-08-21
+4057 2022-08-22
+4058 2022-08-23
+4059 2022-08-24
+4060 2022-08-25
+4061 2022-08-26
+4062 2022-08-27
+4063 2022-08-28
+4064 2022-08-29
+4065 2022-08-30
+4066 2022-08-31
+4067 2022-09-01
+4068 2022-09-02
+4069 2022-09-03
+4070 2022-09-04
+4071 2022-09-05
+4072 2022-09-06
+4073 2022-09-07
+4074 2022-09-08
+4075 2022-09-09
+4076 2022-09-10
+4077 2022-09-11
+4078 2022-09-12
+4079 2022-09-13
+4080 2022-09-14
+4081 2022-09-15
+4082 2022-09-16
+4083 2022-09-17
+4084 2022-09-18
+4085 2022-09-19
+4086 2022-09-20
+4087 2022-09-21
+4088 2022-09-22
+4089 2022-09-23
+4090 2022-09-24
+4091 2022-09-25
+4092 2022-09-26
+4093 2022-09-27
+4094 2022-09-28
+4095 2022-09-29
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result
new file mode 100644
index 00000000000..64acf4aaeae
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_delete.result
@@ -0,0 +1,34 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+delete from diaries where id = 2;
+select * from diaries where match(title, content) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(content) against("富士山");
+id title content
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result
new file mode 100644
index 00000000000..c1661d7fcbf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_insert.result
@@ -0,0 +1,40 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(title) against("富士山");
+id title content
+3 富士山 今日もãã‚Œã„。
+select * from diaries where match(content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result
new file mode 100644
index 00000000000..604aca172a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_recreate.result
@@ -0,0 +1,42 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+drop index title on diaries;
+select * from diaries where match(title, content) against("富士山");
+ERROR HY000: Can't find FULLTEXT index matching the column list
+create fulltext index new_title_content_index on diaries (title, content);
+select * from diaries where match(title, content) against("富士山");
+id title content
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+select * from diaries;
+id title content
+1 Hello ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 富士山 今日もãã‚Œã„。
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result
new file mode 100644
index 00000000000..6f489bf37cc
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_column_index_update.result
@@ -0,0 +1,37 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+title varchar(255),
+content text,
+fulltext index (title, content),
+fulltext index (title),
+fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title` (`title`,`content`),
+ FULLTEXT KEY `title_2` (`title`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+update diaries set title = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒž" where id = 3;
+update diaries set content = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±" where id = 1;
+select * from diaries where match(title, content) against("富士山");
+id title content
+1 Hello ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+select * from diaries where match(title) against("富士山");
+id title content
+select * from diaries where match(content) against("富士山");
+id title content
+1 Hello ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±
+2 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result
new file mode 100644
index 00000000000..d9448ee82ba
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_multiple_index.result
@@ -0,0 +1,33 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+title text,
+body text,
+fulltext index title_index (title),
+fulltext index body_index (body)
+) comment = 'engine "innodb"' default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries (title, body) values ("survey", "will start groonga!");
+insert into diaries (title, body) values ("groonga (1)", "starting groonga...");
+insert into diaries (title, body) values ("groonga (2)", "started groonga.");
+select * from diaries
+where match(title) against("survey") and
+match(body) against("groonga");
+id title body
+1 survey will start groonga!
+select *, match(title) against("survey"), match(body) against("groonga")
+from diaries
+where match(title) against("survey") and
+match(body) against("groonga");
+id title body match(title) against("survey") match(body) against("groonga")
+1 survey will start groonga! 1048577 149797
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result
new file mode 100644
index 00000000000..de1b8d41906
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_myisam.result
@@ -0,0 +1,202 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "myisam"';
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` text,
+ PRIMARY KEY (`c1`),
+ FULLTEXT KEY `ft` (`c2`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "myisam"'
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+flush tables;
+select * from t1;
+c1 c2
+1 hoge hoge
+2 fuga fuga
+3 moge moge
+drop table t1;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "myisam"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 20 ka ki ku ke ko
+3 30 sa si su se so
+4 40 ta ti tu te to
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("su");
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("ii");
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+select * from t1 where match(c3) against("+su" in boolean mode);
+c1 c2 c3
+3 30 sa si su se so
+select * from t1 where match(c3) against("+ii" in boolean mode);
+c1 c2 c3
+1 10 aa ii uu ee oo
+5 50 aa ii uu ee oo
+drop table t1;
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8 COMMENT = 'engine "myisam"';
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+3 dummy dummy
+select * from t1 where match(c2) against("富士山");
+c1 c2 c3
+1 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„㦠ã‚ã‚ã‚ã‚ã‚ã‚ã‚
+select * from t1 where match(c3) against("富士山");
+c1 c2 c3
+2 ã„ã„ã„ã„ㄠ明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“
+drop table t1;
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8 COMMENT = 'engine "myisam"';
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8 COMMENT = 'engine "myisam"';
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t2;
+c1 c2
+1 aa ii uu ee oo
+2 ka ki ku ke ko
+3 aa ii ii ii oo
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t2 where c1=3;
+c1 c2
+3 aa ii ii ii oo
+select * from t1 where c1>3 order by c1 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c1>3 order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select * from t1 where c2>"s" order by c2 desc;
+c1 c2
+5 ta ti ii ii to
+4 sa si su se so
+select * from t2 where c2>"s" order by c1 asc;
+c1 c2
+4 sa si su se so
+5 ta ti ii ii to
+select *,match(c2) against("ii") from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+c1 c2 match(c2) against("ii")
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+1 aa ii uu ee oo 174763
+select *,match(c2) against("ii") from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+5 ta ti ii ii to 349526
+3 aa ii ii ii oo 524289
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+c1 c2 match(c2) against("ii")
+1 aa ii uu ee oo 174763
+3 aa ii ii ii oo 524289
+5 ta ti ii ii to 349526
+drop table t1,t2;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "myisam"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select *,match(c3) against("uu") from t1 where match(c3) against("uu");
+c1 c2 c3 match(c3) against("uu")
+1 10 aa ii uu ee oo 131073
+3 10 aa ii uu ee oo 131073
+5 20 aa ii uu ee oo 131073
+7 20 aa ii uu ee oo 131073
+select * from t1 where not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select *,match(c3) against("dummy") from t1 where match(c3) against("dummy");
+c1 c2 c3 match(c3) against("dummy")
+select * from t1 where not match(c3) against("dummy");
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+c1 c2 c3
+4 10 ka ki ku ke ko
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_not_match_against.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_not_match_against.result
new file mode 100644
index 00000000000..bbe23df3e0f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_not_match_against.result
@@ -0,0 +1,68 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select *,match(c3) against("uu") from t1 where match(c3) against("uu");
+c1 c2 c3 match(c3) against("uu")
+1 10 aa ii uu ee oo 131073
+3 10 aa ii uu ee oo 131073
+5 20 aa ii uu ee oo 131073
+7 20 aa ii uu ee oo 131073
+select * from t1 where not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select *,match(c3) against("dummy") from t1 where match(c3) against("dummy");
+c1 c2 c3 match(c3) against("dummy")
+select * from t1 where not match(c3) against("dummy");
+c1 c2 c3
+1 10 aa ii uu ee oo
+2 10 ka ki ku ke ko
+3 10 aa ii uu ee oo
+4 10 ka ki ku ke ko
+5 20 aa ii uu ee oo
+6 20 ka ki ku ke ko
+7 20 aa ii uu ee oo
+8 20 ka ki ku ke ko
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+c1 c2 c3
+4 10 ka ki ku ke ko
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+c1 c2 c3
+6 20 ka ki ku ke ko
+8 20 ka ki ku ke ko
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+c1 c2 c3
+2 10 ka ki ku ke ko
+4 10 ka ki ku ke ko
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..279ad8bf985
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_TODO_SPLIT_ME.result
@@ -0,0 +1,50 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE ft(
+a INT,
+b TEXT,
+c TEXT,
+PRIMARY KEY(a),
+FULLTEXT KEY ftx1(b),
+FULLTEXT KEY ftx2(c)
+)ENGINE=Mroonga DEFAULT CHARSET=UTF8 COMMENT = 'engine "innodb"';
+SHOW CREATE TABLE ft;
+Table Create Table
+ft CREATE TABLE `ft` (
+ `a` int(11) NOT NULL DEFAULT '0',
+ `b` text,
+ `c` text,
+ PRIMARY KEY (`a`),
+ FULLTEXT KEY `ftx1` (`b`),
+ FULLTEXT KEY `ftx2` (`c`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+INSERT INTO ft VALUES(1,'aaaaa','abcde');
+INSERT INTO ft VALUES(2,'bbbbb','bcdef');
+INSERT INTO ft VALUES(3,'ccccc','cdefg');
+INSERT INTO ft VALUES(4,'ddddd','defgh');
+INSERT INTO ft VALUES(5,'eeeee','efghi');
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c
+2 bbbbb bcdef
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c
+2 bbbbb bcdef
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c
+2 bbbbb bcdef
+SELECT a, b, c FROM ft WHERE MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE)
+2 bbbbb bcdef 1 0
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+a b c MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE)
+2 bbbbb bcdef 1 0
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), a;
+a b c MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE)
+1 aaaaa abcde 0 0
+3 ccccc cdefg 0 0
+4 ddddd defgh 0 0
+5 eeeee efghi 0 0
+2 bbbbb bcdef 1 0
+DROP TABLE ft;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result
new file mode 100644
index 00000000000..3da64b2de1f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_order_transaction.result
@@ -0,0 +1,50 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+START TRANSACTION;
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries
+WHERE MATCH(body) AGAINST("groonga")
+ORDER BY id;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+USE test;
+SELECT * FROM diaries
+WHERE MATCH(body) AGAINST("groonga")
+ORDER BY id;
+id title body
+COMMIT;
+SELECT * FROM diaries
+WHERE MATCH(body) AGAINST("groonga")
+ORDER BY id;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries
+WHERE MATCH(body) AGAINST("groonga")
+ORDER BY id;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_parser_comment.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_parser_comment.result
new file mode 100644
index 00000000000..d7b20a3714f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/fulltext_parser_comment.result
@@ -0,0 +1,29 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+comment 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) comment = 'engine "innodb"' default charset utf8;
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+select * from diaries where match(body) against("start");
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_grn_id.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_grn_id.result
new file mode 100644
index 00000000000..9edbd3c9b3b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_grn_id.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS ids;
+DROP FUNCTION IF EXISTS last_insert_grn_id;
+CREATE TABLE ids (
+id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+SELECT last_insert_grn_id();
+last_insert_grn_id()
+0
+INSERT INTO ids VALUES();
+SELECT last_insert_grn_id();
+last_insert_grn_id()
+0
+SELECT * FROM ids;
+id
+1
+DROP TABLE ids;
+DROP FUNCTION last_insert_grn_id;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_reference.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_reference.result
new file mode 100644
index 00000000000..d31d5454169
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_reference.result
@@ -0,0 +1,15 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+SELECT last_insert_id();
+last_insert_id()
+0
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+last_insert_id()
+1
+SELECT * FROM ids;
+id
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_set.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_set.result
new file mode 100644
index 00000000000..39791b93ba2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/function_last_insert_id_set.result
@@ -0,0 +1,21 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+SELECT last_insert_id();
+last_insert_id()
+0
+SELECT last_insert_id(10);
+last_insert_id(10)
+10
+SELECT last_insert_id();
+last_insert_id()
+10
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+last_insert_id()
+1
+SELECT * FROM ids;
+id
+1
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result
new file mode 100644
index 00000000000..29163384e6a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_contains.result
@@ -0,0 +1,169 @@
+drop table if exists shops;
+create table shops (
+id int primary key auto_increment,
+name text,
+location geometry NOT NULL,
+spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"'
+insert into shops (name, location)
+values ('nezu-no-taiyaki',
+GeomFromText('POINT(139.762573 35.720253)'));
+insert into shops (name, location)
+values ('taiyaki-kataoka',
+GeomFromText('POINT(139.715591 35.712521)'));
+insert into shops (name, location)
+values ('soba-taiyaki-ku',
+GeomFromText('POINT(139.659088 35.683712)'));
+insert into shops (name, location)
+values ('kuruma',
+GeomFromText('POINT(139.706207 35.721516)'));
+insert into shops (name, location)
+values ('hirose-ya',
+GeomFromText('POINT(139.685608 35.714844)'));
+insert into shops (name, location)
+values ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+insert into shops (name, location)
+values ('omede-taiyaki',
+GeomFromText('POINT(139.817154 35.700516)'));
+insert into shops (name, location)
+values ('onaga-ya',
+GeomFromText('POINT(139.81105 35.698254)'));
+insert into shops (name, location)
+values ('shiro-ya',
+GeomFromText('POINT(139.638611 35.705517)'));
+insert into shops (name, location)
+values ('fuji-ya',
+GeomFromText('POINT(139.637115 35.703938)'));
+insert into shops (name, location)
+values ('miyoshi',
+GeomFromText('POINT(139.537323 35.644539)'));
+insert into shops (name, location)
+values ('juju-ya',
+GeomFromText('POINT(139.695755 35.628922)'));
+insert into shops (name, location)
+values ('tatsumi-ya',
+GeomFromText('POINT(139.638657 35.665501)'));
+insert into shops (name, location)
+values ('tetsuji',
+GeomFromText('POINT(139.76857 35.680912)'));
+insert into shops (name, location)
+values ('gazuma-ya',
+GeomFromText('POINT(139.647598 35.700817)'));
+insert into shops (name, location)
+values ('honma-mon',
+GeomFromText('POINT(139.652573 35.722736)'));
+insert into shops (name, location)
+values ('naniwa-ya',
+GeomFromText('POINT(139.796234 35.730061)'));
+insert into shops (name, location)
+values ('kuro-dai',
+GeomFromText('POINT(139.704834 35.650345)'));
+insert into shops (name, location)
+values ('daruma',
+GeomFromText('POINT(139.770599 35.681461)'));
+insert into shops (name, location)
+values ('yanagi-ya',
+GeomFromText('POINT(139.783981 35.685341)'));
+insert into shops (name, location)
+values ('sharaku',
+GeomFromText('POINT(139.794846 35.716969)'));
+insert into shops (name, location)
+values ('takane',
+GeomFromText('POINT(139.560913 35.698601)'));
+insert into shops (name, location)
+values ('chiyoda',
+GeomFromText('POINT(139.652817 35.642601)'));
+insert into shops (name, location)
+values ('da-ka-po',
+GeomFromText('POINT(139.727356 35.627346)'));
+insert into shops (name, location)
+values ('matsushima-ya',
+GeomFromText('POINT(139.737381 35.640556)'));
+insert into shops (name, location)
+values ('kazuya',
+GeomFromText('POINT(139.760895 35.673508)'));
+insert into shops (name, location)
+values ('furuya-kogane-an',
+GeomFromText('POINT(139.676071 35.680603)'));
+insert into shops (name, location)
+values ('hachi-no-ie',
+GeomFromText('POINT(139.668106 35.608021)'));
+insert into shops (name, location)
+values ('azuki-chan',
+GeomFromText('POINT(139.673203 35.64151)'));
+insert into shops (name, location)
+values ('kuriko-an',
+GeomFromText('POINT(139.796829 35.712013)'));
+insert into shops (name, location)
+values ('yume-no-aru-machi-no-taiyaki-ya-san',
+GeomFromText('POINT(139.712524 35.616199)'));
+insert into shops (name, location)
+values ('naze-ya',
+GeomFromText('POINT(139.665833 35.609039)'));
+insert into shops (name, location)
+values ('sanoki-ya',
+GeomFromText('POINT(139.770721 35.66592)'));
+insert into shops (name, location)
+values ('shigeta',
+GeomFromText('POINT(139.780273 35.672626)'));
+insert into shops (name, location)
+values ('nishimi-ya',
+GeomFromText('POINT(139.774628 35.671825)'));
+insert into shops (name, location)
+values ('hiiragi',
+GeomFromText('POINT(139.711517 35.647701)'));
+select id, name, AsText(location) as location_text from shops;
+id name location_text
+1 nezu-no-taiyaki POINT(139.762573 35.720253)
+2 taiyaki-kataoka POINT(139.715591 35.712521)
+3 soba-taiyaki-ku POINT(139.659088 35.683712)
+4 kuruma POINT(139.706207 35.721516)
+5 hirose-ya POINT(139.685608 35.714844)
+6 sazare POINT(139.685043 35.714653)
+7 omede-taiyaki POINT(139.817154 35.700516)
+8 onaga-ya POINT(139.81105 35.698254)
+9 shiro-ya POINT(139.638611 35.705517)
+10 fuji-ya POINT(139.637115 35.703938)
+11 miyoshi POINT(139.537323 35.644539)
+12 juju-ya POINT(139.695755 35.628922)
+13 tatsumi-ya POINT(139.638657 35.665501)
+14 tetsuji POINT(139.76857 35.680912)
+15 gazuma-ya POINT(139.647598 35.700817)
+16 honma-mon POINT(139.652573 35.722736)
+17 naniwa-ya POINT(139.796234 35.730061)
+18 kuro-dai POINT(139.704834 35.650345)
+19 daruma POINT(139.770599 35.681461)
+20 yanagi-ya POINT(139.783981 35.685341)
+21 sharaku POINT(139.794846 35.716969)
+22 takane POINT(139.560913 35.698601)
+23 chiyoda POINT(139.652817 35.642601)
+24 da-ka-po POINT(139.727356 35.627346)
+25 matsushima-ya POINT(139.737381 35.640556)
+26 kazuya POINT(139.760895 35.673508)
+27 furuya-kogane-an POINT(139.676071 35.680603)
+28 hachi-no-ie POINT(139.668106 35.608021)
+29 azuki-chan POINT(139.673203 35.64151)
+30 kuriko-an POINT(139.796829 35.712013)
+31 yume-no-aru-machi-no-taiyaki-ya-san POINT(139.712524 35.616199)
+32 naze-ya POINT(139.665833 35.609039)
+33 sanoki-ya POINT(139.770721 35.66592)
+34 shigeta POINT(139.780273 35.672626)
+35 nishimi-ya POINT(139.774628 35.671825)
+36 hiiragi POINT(139.711517 35.647701)
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location);
+id name location_text
+14 tetsuji POINT(139.76857 35.680912)
+19 daruma POINT(139.770599 35.681461)
+26 kazuya POINT(139.760895 35.673508)
+drop table shops;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result
new file mode 100644
index 00000000000..53aa00ecbab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_delete.result
@@ -0,0 +1,31 @@
+drop table if exists shops;
+create table shops (
+id int primary key auto_increment,
+name text,
+location geometry NOT NULL,
+spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"'
+insert into shops (name, location)
+values ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+id name location_text
+1 sazare POINT(139.685043 35.714653)
+delete from shops
+where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+id name location_text
+select id, name, AsText(location) as location_text from shops;
+id name location_text
+drop table shops;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result
new file mode 100644
index 00000000000..e982e0b95ce
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/geometry_update.result
@@ -0,0 +1,36 @@
+drop table if exists shops;
+create table shops (
+id int primary key auto_increment,
+name text,
+location geometry NOT NULL,
+spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+Table Create Table
+shops CREATE TABLE `shops` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text,
+ `location` geometry NOT NULL,
+ PRIMARY KEY (`id`),
+ SPATIAL KEY `location_index` (`location`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"'
+insert into shops (name, location)
+values ('sazare',
+GeomFromText('POINT(139.685043 35.714653)'));
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+id name location_text
+1 sazare POINT(139.685043 35.714653)
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.65659 35.57903, 139.66489 35.57262)'), location);
+id name location_text
+update shops set location = GeomFromText('POINT(139.66116 35.57566)')
+where name = 'sazare';
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+id name location_text
+select id, name, AsText(location) as location_text from shops
+where MBRContains(GeomFromText('LineString(139.65659 35.57903, 139.66489 35.57262)'), location);
+id name location_text
+1 sazare POINT(139.66116 35.57566)
+drop table shops;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/index_force_index_not_used.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/index_force_index_not_used.result
new file mode 100644
index 00000000000..3fbc85ff051
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/index_force_index_not_used.result
@@ -0,0 +1,8 @@
+DROP TABLE IF EXISTS ids;
+CREATE TABLE ids (
+id INT PRIMARY KEY AUTO_INCREMENT
+) DEFAULT CHARSET UTF8 COMMENT = 'engine "InnoDB"';
+SELECT COUNT(*) FROM ids FORCE INDEX(PRIMARY);
+COUNT(*)
+0
+DROP TABLE ids;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..93c05bff080
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_TODO_SPLIT_ME.result
@@ -0,0 +1,78 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 tinyint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 smallint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 mediumint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 bigint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+c1
+1
+drop table t1;
+create table t1 (c1 float primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(0.5);
+select * from t1;
+c1
+0.5
+drop table t1;
+create table t1 (c1 double primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(0.5);
+select * from t1;
+c1
+0.5
+drop table t1;
+create table t1 (c1 date primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010/03/26");
+select * from t1;
+c1
+2010-03-26
+drop table t1;
+create table t1 (c1 time primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("11:22:33");
+select * from t1;
+c1
+11:22:33
+drop table t1;
+create table t1 (c1 year primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010");
+select * from t1;
+c1
+2010
+drop table t1;
+create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010/03/26 11:22:33");
+select * from t1;
+c1
+2010-03-26 11:22:33
+drop table t1;
+create table t1 (c1 int primary key, c2 int) COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+select * from t1;
+c1 c2
+1 100
+insert into t1 values(1,200);
+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
+select * from t1;
+c1 c2
+1 100
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result
new file mode 100644
index 00000000000..be61419477f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_bulk.result
@@ -0,0 +1,30 @@
+drop table if exists diaries;
+set names utf8;
+create table diaries (
+id int primary key,
+content text,
+fulltext index (content)
+) default charset utf8 comment = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+LOCK TABLE diaries WRITE;
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+UNLOCK TABLES;
+select * from diaries;
+id content
+1 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+select * from diaries where match(content) against("天気");
+id content
+2 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result
new file mode 100644
index 00000000000..f0ceb937a01
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.result
@@ -0,0 +1,36 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+date TIMESTAMP NOT NULL,
+title VARCHAR(100) NOT NULL,
+content TEXT NOT NULL,
+PRIMARY KEY (date, title)
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `title` varchar(100) NOT NULL,
+ `content` text NOT NULL,
+ PRIMARY KEY (`date`,`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "MyISAM"'
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "cloudy day", "Today is cloudy day...");
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "shopping", "I buy a new shirt.");
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-05", "rainy day", "Today is rainy day...");
+SELECT * FROM diaries;
+date title content
+2012-03-04 00:00:00 cloudy day Today is cloudy day...
+2012-03-04 00:00:00 shopping I buy a new shirt.
+2012-03-05 00:00:00 rainy day Today is rainy day...
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "shopping", "I buy new shoes.")
+ON DUPLICATE KEY UPDATE date = "2012-03-03",
+content = "I buy a new hat.";
+SELECT * FROM diaries;
+date title content
+2012-03-04 00:00:00 cloudy day Today is cloudy day...
+2012-03-03 00:00:00 shopping I buy a new hat.
+2012-03-05 00:00:00 rainy day Today is rainy day...
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result
new file mode 100644
index 00000000000..97428b768a6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.result
@@ -0,0 +1,39 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+date TIMESTAMP NOT NULL,
+title VARCHAR(100) NOT NULL,
+content TEXT NOT NULL,
+UNIQUE INDEX (date, title)
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ `title` varchar(100) NOT NULL,
+ `content` text NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `date` (`date`,`title`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "MyISAM"'
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "cloudy day", "Today is cloudy day...");
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "shopping", "I buy a new shirt.");
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-05", "rainy day", "Today is rainy day...");
+SELECT * FROM diaries;
+id date title content
+1 2012-03-04 00:00:00 cloudy day Today is cloudy day...
+2 2012-03-04 00:00:00 shopping I buy a new shirt.
+3 2012-03-05 00:00:00 rainy day Today is rainy day...
+INSERT INTO diaries (date, title, content)
+VALUES ("2012-03-04", "shopping", "I buy new shoes.")
+ON DUPLICATE KEY UPDATE date = "2012-03-03",
+content = "I buy a new hat.";
+SELECT * FROM diaries;
+id date title content
+1 2012-03-04 00:00:00 cloudy day Today is cloudy day...
+2 2012-03-03 00:00:00 shopping I buy a new hat.
+3 2012-03-05 00:00:00 rainy day Today is rainy day...
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_disk_sweep.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_disk_sweep.result
new file mode 100644
index 00000000000..aa7a32dbd3a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/multi_range_read_disk_sweep.result
@@ -0,0 +1,18 @@
+DROP TABLE IF EXISTS integers;
+SET optimizer_switch='mrr_cost_based=off';
+CREATE TABLE integers (
+id INT PRIMARY KEY AUTO_INCREMENT,
+value INT,
+KEY (value)
+) COMMENT='engine "InnoDB"';
+INSERT INTO integers (value) VALUES (0), (1), (2), (3);
+EXPLAIN SELECT * FROM integers
+WHERE value IN (0, 2);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE integers range value value 5 NULL 2 Using where; Using MRR
+SELECT * FROM integers
+WHERE value IN (0, 2);
+id value
+1 0
+3 2
+DROP TABLE integers;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_TODO_SPLIT_ME.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_TODO_SPLIT_ME.result
new file mode 100644
index 00000000000..5f43aee6997
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_TODO_SPLIT_ME.result
@@ -0,0 +1,67 @@
+drop table if exists t1;
+flush status;
+create table t1 (
+c1 int primary key,
+c2 int,
+c3 text,
+key idx1(c2),
+fulltext index ft(c3)
+) comment = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"ii si ii se ii");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ii oo");
+select *, match(c3) against("ii") from t1
+where match(c3) against("ii") order by c1 desc limit 1;
+c1 c2 c3 match(c3) against("ii")
+5 50 aa ii uu ii oo 349526
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+select *, match(c3) against("ii") from t1
+where match(c3) against("ii") order by c1 limit 1;
+c1 c2 c3 match(c3) against("ii")
+1 10 aa ii uu ee oo 174763
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+select c3, match(c3) against("ii") from t1
+where match(c3) against("ii") order by match(c3) against("ii") desc;
+c3 match(c3) against("ii")
+ii si ii se ii 524289
+aa ii uu ii oo 349526
+aa ii uu ee oo 174763
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+select c3, match(c3) against("ii") from t1
+where match(c3) against("ii") order by match(c3) against("ii") desc limit 1, 1;
+c3 match(c3) against("ii")
+aa ii uu ii oo 349526
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+select c3, match(c3) against("ii") from t1
+where match(c3) against("ii") order by match(c3) against("ii");
+c3 match(c3) against("ii")
+aa ii uu ee oo 174763
+aa ii uu ii oo 349526
+ii si ii se ii 524289
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+select c3, match(c3) against("ii") from t1
+where match(c3) against("ii") order by match(c3) against("ii") limit 1;
+c3 match(c3) against("ii")
+aa ii uu ee oo 174763
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 2
+select count(*) from t1 where match(c3) against("ii") limit 1;
+count(*)
+3
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_no_where_clause.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_no_where_clause.result
new file mode 100644
index 00000000000..b31d2ee5360
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/optimization_order_limit_no_where_clause.result
@@ -0,0 +1,24 @@
+drop table if exists t1;
+flush status;
+create table t1 (
+c1 int primary key,
+c2 int,
+c3 text,
+key idx1(c2),
+fulltext index ft(c3)
+) comment = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"ii si ii se ii");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ii oo");
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 0
+select *, match(c3) against("ii") from t1 order by c1 desc limit 1;
+c1 c2 c3 match(c3) against("ii")
+5 50 aa ii uu ii oo 349526
+show status like 'mroonga_fast_order_limit';
+Variable_name Value
+Mroonga_fast_order_limit 1
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result
new file mode 100644
index 00000000000..61c8e18b17d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_files.result
@@ -0,0 +1,42 @@
+DROP DATABASE IF EXISTS repair_test;
+CREATE DATABASE repair_test;
+USE repair_test;
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX body_index (body)
+) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+id title body
+2 groonga (1) starting groonga...
+FLUSH TABLES;
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+ERROR HY000: mroonga: failed to open table: <diaries>
+REPAIR TABLE diaries;
+Table Op Msg_type Msg_text
+repair_test.diaries repair status OK
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+id title body
+2 groonga (1) starting groonga...
+DROP TABLE diaries;
+DROP DATABASE repair_test;
+USE test;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result
new file mode 100644
index 00000000000..140b5a92b75
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/repair_table_no_index_file.result
@@ -0,0 +1,42 @@
+DROP DATABASE IF EXISTS repair_test;
+CREATE DATABASE repair_test;
+USE repair_test;
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX body_index (body)
+) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+id title body
+2 groonga (1) starting groonga...
+FLUSH TABLES;
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+ERROR HY000: syscall error 'repair_test.mrn.0000104' (No such file or directory)
+REPAIR TABLE diaries;
+Table Op Msg_type Msg_text
+repair_test.diaries repair status OK
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+id title body
+2 groonga (1) starting groonga...
+DROP TABLE diaries;
+DROP DATABASE repair_test;
+USE test;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result
new file mode 100644
index 00000000000..b01e85aa483
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/temporary_table.result
@@ -0,0 +1,21 @@
+DROP TEMPORARY TABLE IF EXISTS diaries;
+CREATE TEMPORARY TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT
+) DEFAULT CHARSET=UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TEMPORARY TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title) VALUES ("clear day");
+INSERT INTO diaries (title) VALUES ("rainy day");
+INSERT INTO diaries (title) VALUES ("cloudy day");
+SELECT * FROM diaries;
+id title
+1 clear day
+2 rainy day
+3 cloudy day
+DROP TEMPORARY TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_query_cache.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_query_cache.result
new file mode 100644
index 00000000000..54afac7a1a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_query_cache.result
@@ -0,0 +1,28 @@
+SET @tmp_query_cache_size = @@query_cache_size;
+SET GLOBAL query_cache_size = 1048576;
+DROP TABLE IF EXISTS simple_table;
+CREATE TABLE simple_table (
+id INT PRIMARY KEY
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE simple_table;
+Table Create Table
+simple_table CREATE TABLE `simple_table` (
+ `id` int(11) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO simple_table (id) VALUES (1),(2);
+USE test;
+START TRANSACTION;
+INSERT INTO simple_table (id) VALUES (3);
+SELECT * FROM simple_table;
+id
+1
+2
+COMMIT;
+SELECT * FROM simple_table;
+id
+1
+2
+3
+DROP TABLE simple_table;
+SET GLOBAL query_cache_size = @tmp_query_cache_size;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result
new file mode 100644
index 00000000000..11cc1874257
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_delete.result
@@ -0,0 +1,50 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey") AND
+MATCH(body) AGAINST("groonga");
+id title body
+1 survey will start groonga!
+START TRANSACTION;
+DELETE FROM diaries WHERE id = 1;
+ROLLBACK;
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey") AND
+MATCH(body) AGAINST("groonga");
+id title body
+DELETE FROM diaries WHERE id = 1;
+Warnings:
+Warning 1026 failed to get record ID for deleting from groonga: key=<>
+SELECT * FROM diaries;
+id title body
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey") AND
+MATCH(body) AGAINST("groonga");
+id title body
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result
new file mode 100644
index 00000000000..7dde8518db0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/transaction_rollback_delete_update.result
@@ -0,0 +1,47 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+body TEXT,
+FULLTEXT INDEX title_index (title),
+FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `title_index` (`title`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey");
+id title body
+1 survey will start groonga!
+START TRANSACTION;
+DELETE FROM diaries WHERE id = 1;
+ROLLBACK;
+SELECT * FROM diaries;
+id title body
+1 survey will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey");
+id title body
+UPDATE diaries SET title = "survey day!" WHERE id = 1;
+SELECT * FROM diaries;
+id title body
+1 survey day! will start groonga!
+2 groonga (1) starting groonga...
+3 groonga (2) started groonga.
+SELECT * FROM diaries
+WHERE MATCH(title) AGAINST("survey");
+id title body
+1 survey day! will start groonga!
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result
new file mode 100644
index 00000000000..35b273d348f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/truncate.result
@@ -0,0 +1,55 @@
+DROP TABLE IF EXISTS diaries;
+SET NAMES UTF8;
+CREATE TABLE diaries (
+id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+year INT UNSIGNED,
+month INT UNSIGNED,
+day INT UNSIGNED,
+title VARCHAR(255),
+content TEXT,
+FULLTEXT INDEX(content),
+KEY(day)
+) DEFAULT CHARSET UTF8 COMMENT = 'engine "innodb"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `year` int(10) unsigned DEFAULT NULL,
+ `month` int(10) unsigned DEFAULT NULL,
+ `day` int(10) unsigned DEFAULT NULL,
+ `title` varchar(255) DEFAULT NULL,
+ `content` text,
+ PRIMARY KEY (`id`),
+ KEY `day` (`day`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+SELECT * FROM diaries;
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+id year month day title content
+1 2011 11 9 Hello 今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚
+3 2011 11 11 富士山 今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚
+2 2011 11 10 天気 明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦
+TRUNCATE TABLE diaries;
+SELECT * FROM diaries;
+id year month day title content
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+id year month day title content
+INSERT INTO diaries VALUES(1, 2011, 11, 11, "帰りé“", "ã¤ã‹ã‚ŒãŸãƒ¼");
+INSERT INTO diaries VALUES(2, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(3, 2011, 12, 2, "åˆé›ª", "今年ã¯ã˜ã‚ã¦ã®é›ªï¼");
+SELECT * FROM diaries;
+id year month day title content
+1 2011 11 11 å¸°ã‚Šé“ ã¤ã‹ã‚ŒãŸãƒ¼
+2 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+3 2011 12 2 åˆé›ª 今年ã¯ã˜ã‚ã¦ã®é›ªï¼
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("悪ã„" IN BOOLEAN MODE);
+id year month day title content
+2 2011 12 1 ä¹…ã—ã¶ã‚Š 天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/update_fulltext.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/update_fulltext.result
new file mode 100644
index 00000000000..655d2424ba7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/update_fulltext.result
@@ -0,0 +1,33 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 text, fulltext index (c2)) COMMENT = 'engine "innodb"';
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ka ki ku ke
+30 sa si su se
+update t1 set c2="ta ti tu te" where c1=20;
+select * from t1;
+c1 c2
+10 aa ii uu ee
+20 ta ti tu te
+30 sa si su se
+select * from t1 where match(c2) against("ti");
+c1 c2
+20 ta ti tu te
+select * from t1 where match(c2) against("ki");
+c1 c2
+update t1 set c1=40 where c1=20;
+select * from t1;
+c1 c2
+10 aa ii uu ee
+30 sa si su se
+40 ta ti tu te
+select * from t1 where match(c2) against("ti");
+c1 c2
+40 ta ti tu te
+select * from t1 where match(c2) against("ki");
+c1 c2
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/update_int.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/update_int.result
new file mode 100644
index 00000000000..5506f6b10b0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/update_int.result
@@ -0,0 +1,36 @@
+drop table if exists t1, t2, t3;
+create table t1 (c1 int primary key, c2 int) COMMENT = 'engine "innodb"';
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(11) NOT NULL,
+ `c2` int(11) DEFAULT NULL,
+ PRIMARY KEY (`c1`)
+) ENGINE=Mroonga DEFAULT CHARSET=latin1 COMMENT='engine "innodb"'
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+c1 c2
+1 100
+2 101
+3 102
+update t1 set c2=c2+100 where c1=1;
+select * from t1;
+c1 c2
+1 200
+2 101
+3 102
+update t1 set c2=c2+100 where c1=2;
+select * from t1;
+c1 c2
+1 200
+2 201
+3 102
+update t1 set c2=c2+100 where c1=3;
+select * from t1;
+c1 c2
+1 200
+2 201
+3 202
+drop table t1;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result
new file mode 100644
index 00000000000..e451b2b99fe
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_delete.result
@@ -0,0 +1,53 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+set mroonga_dry_write=true;
+delete from diaries where id = 2;
+select * from diaries;
+id body
+1 will start groonga!
+3 started groonga.
+select * from diaries where match (body) against ("starting");
+id body
+select * from diaries where match (body) against ("started");
+id body
+3 started groonga.
+set mroonga_dry_write=false;
+delete from diaries where id = 3;
+select * from diaries;
+id body
+1 will start groonga!
+select * from diaries where match (body) against ("starting");
+id body
+select * from diaries where match (body) against ("started");
+id body
+insert into diaries (id, body) values (2, "sleeping...");
+select * from diaries;
+id body
+1 will start groonga!
+2 sleeping...
+select * from diaries where match (body) against ("starting");
+id body
+2 sleeping...
+select * from diaries where match (body) against ("started");
+id body
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result
new file mode 100644
index 00000000000..f11398f3710
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_insert.result
@@ -0,0 +1,42 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+id body
+1 will start groonga!
+select * from diaries where match (body) against ("groonga");
+id body
+1 will start groonga!
+set mroonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+select * from diaries where match (body) against ("groonga");
+id body
+1 will start groonga!
+set mroonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id body
+1 will start groonga!
+2 starting groonga...
+3 started groonga.
+select * from diaries where match (body) against ("groonga");
+id body
+1 will start groonga!
+3 started groonga.
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result
new file mode 100644
index 00000000000..47a844c8e68
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_dry_write_update.result
@@ -0,0 +1,39 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `body` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `body_index` (`body`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
+insert into diaries (body) values ("will start groonga!");
+set mroonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+id body
+1 starting groonga...
+select * from diaries where match (body) against ("will");
+id body
+1 starting groonga...
+select * from diaries where match (body) against ("starting");
+id body
+set mroonga_dry_write=false;
+update diaries set body = "started groonga." where id = 1;
+select * from diaries;
+id body
+1 started groonga.
+select * from diaries where match (body) against ("will");
+id body
+1 started groonga.
+select * from diaries where match (body) against ("starting");
+id body
+select * from diaries where match (body) against ("started");
+id body
+1 started groonga.
+drop table diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result
new file mode 100644
index 00000000000..0cf3d49c3c3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_global.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+SET GLOBAL mroonga_match_escalation_threshold = -1;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+tags TEXT,
+FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `tags` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+2 Hello mroonga! mroonga install
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET GLOBAL mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result
new file mode 100644
index 00000000000..3d94ebc93ad
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/variable_match_escalation_threshold_session.result
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS diaries;
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+title TEXT,
+tags TEXT,
+FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `title` text,
+ `tags` text,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `tags_index` (`tags`) COMMENT 'parser "TokenDelimit"'
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+2 Hello mroonga! mroonga install
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+SET mroonga_match_escalation_threshold = -1;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+id title tags
+1 Hello groonga! groonga install
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/version_55_performance_schema.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/version_55_performance_schema.result
new file mode 100644
index 00000000000..f6e3bbdca82
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/version_55_performance_schema.result
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS diaries;
+SHOW VARIABLES LIKE 'performance_schema';
+Variable_name Value
+performance_schema ON
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content VARCHAR(255),
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `content` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (content) VALUES ("Tommorow will be shiny day!");
+SHOW TABLES FROM performance_schema;
+Tables_in_performance_schema
+cond_instances
+events_waits_current
+events_waits_history
+events_waits_history_long
+events_waits_summary_by_instance
+events_waits_summary_by_thread_by_event_name
+events_waits_summary_global_by_event_name
+file_instances
+file_summary_by_event_name
+file_summary_by_instance
+mutex_instances
+performance_timers
+rwlock_instances
+setup_consumers
+setup_instruments
+setup_timers
+threads
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/r/version_56_or_later_performance_schema.result b/storage/mroonga/mysql-test/mroonga/wrapper/r/version_56_or_later_performance_schema.result
new file mode 100644
index 00000000000..548dc32707f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/r/version_56_or_later_performance_schema.result
@@ -0,0 +1,73 @@
+DROP TABLE IF EXISTS diaries;
+SHOW VARIABLES LIKE 'performance_schema';
+Variable_name Value
+performance_schema ON
+CREATE TABLE diaries (
+id INT PRIMARY KEY AUTO_INCREMENT,
+content VARCHAR(255),
+FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+Table Create Table
+diaries CREATE TABLE `diaries` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `content` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ FULLTEXT KEY `content` (`content`)
+) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"'
+INSERT INTO diaries (content) VALUES ("Tommorow will be shiny day!");
+SHOW TABLES FROM performance_schema;
+Tables_in_performance_schema
+accounts
+cond_instances
+events_stages_current
+events_stages_history
+events_stages_history_long
+events_stages_summary_by_account_by_event_name
+events_stages_summary_by_host_by_event_name
+events_stages_summary_by_thread_by_event_name
+events_stages_summary_by_user_by_event_name
+events_stages_summary_global_by_event_name
+events_statements_current
+events_statements_history
+events_statements_history_long
+events_statements_summary_by_account_by_event_name
+events_statements_summary_by_digest
+events_statements_summary_by_host_by_event_name
+events_statements_summary_by_thread_by_event_name
+events_statements_summary_by_user_by_event_name
+events_statements_summary_global_by_event_name
+events_waits_current
+events_waits_history
+events_waits_history_long
+events_waits_summary_by_account_by_event_name
+events_waits_summary_by_host_by_event_name
+events_waits_summary_by_instance
+events_waits_summary_by_thread_by_event_name
+events_waits_summary_by_user_by_event_name
+events_waits_summary_global_by_event_name
+file_instances
+file_summary_by_event_name
+file_summary_by_instance
+host_cache
+hosts
+mutex_instances
+objects_summary_global_by_type
+performance_timers
+rwlock_instances
+session_account_connect_attrs
+session_connect_attrs
+setup_actors
+setup_consumers
+setup_instruments
+setup_objects
+setup_timers
+socket_instances
+socket_summary_by_event_name
+socket_summary_by_instance
+table_io_waits_summary_by_index_usage
+table_io_waits_summary_by_table
+table_lock_waits_summary_by_table
+threads
+users
+DROP TABLE diaries;
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/suite.opt b/storage/mroonga/mysql-test/mroonga/wrapper/suite.opt
new file mode 100644
index 00000000000..d5a1e5190a7
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/suite.opt
@@ -0,0 +1 @@
+--loose-plugin-load-add=$HA_MROONGA_SO --loose-plugin-mroonga=ON
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm b/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm
new file mode 100644
index 00000000000..528ccc5d693
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/suite.pm
@@ -0,0 +1,23 @@
+package My::Suite::Mroonga;
+
+@ISA = qw(My::Suite);
+
+return "No Mroonga engine" unless $ENV{HA_MROONGA_SO} or
+ $::mysqld_variables{'mroonga'} eq "ON";
+
+sub is_default { 1 }
+
+my $groonga_normalizer_mysql_dir=$::basedir . '/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql';
+my $groonga_normalizer_mysql_install_dir=$::basedir . '/lib/groonga/plugins';
+
+if (-d $groonga_normalizer_mysql_dir)
+{
+ $ENV{GRN_PLUGINS_DIR}=$groonga_normalizer_mysql_dir;
+}
+elsif (-d $groonga_normalizer_mysql_install_dir)
+{
+ $ENV{GRN_PLUGINS_DIR}=$groonga_normalizer_mysql_install_dir;
+}
+
+bless { };
+
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test
new file mode 100644
index 00000000000..f25fdf95dab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_add_column.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test
new file mode 100644
index 00000000000..bbc5ca49818
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_column_comment.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+
+ALTER TABLE bugs
+ CHANGE COLUMN
+ tag
+ tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test
new file mode 100644
index 00000000000..38a13bf8a5e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_change_engine.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) ENGINE MyISAM DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+ALTER TABLE diaries ENGINE = mroonga COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("groonga" IN BOOLEAN MODE) AND
+ MATCH(body) AGAINST("groonga" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test
new file mode 100644
index 00000000000..2c85cc68266
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_comment_change_engine.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ title VARCHAR(64),
+ content TEXT,
+ FULLTEXT INDEX(content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+SHOW CREATE TABLE memos;
+
+INSERT INTO memos (title, content) VALUES ("Hello", "I start to write memos!");
+INSERT INTO memos (title, content) VALUES ("groonga", "I start to use groonga!");
+INSERT INTO memos (title, content) VALUES ("mroonga", "I use mroonga too!");
+
+ALTER TABLE memos COMMENT='engine "MyISAM"';
+SHOW CREATE TABLE memos;
+
+SELECT * FROM memos;
+SELECT * FROM memos WHERE MATCH(content) AGAINST("start" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test
new file mode 100644
index 00000000000..00b6ecf565e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_create_fulltext.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ WHERE MATCH (title) AGAINST ("富士山");
+
+CREATE FULLTEXT INDEX title_index on diaries (title);
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries DISABLE KEYS;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test
new file mode 100644
index 00000000000..f81b4e82b06
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_fulltext.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries DISABLE KEYS;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test
new file mode 100644
index 00000000000..760a4bc99bd
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_multiple_column.test
@@ -0,0 +1,52 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY title_and_created_at_index (title, created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test
new file mode 100644
index 00000000000..89a62e78baa
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_normal.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY created_at_index (created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test
new file mode 100644
index 00000000000..63f0b8ad404
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_primary.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test
new file mode 100644
index 00000000000..9d0f1f3dc1a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_disable_keys_updating.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (
+ c1 int NOT NULL,
+ c2 text NOT NULL,
+ c3 int NOT NULL,
+ c4 int NOT NULL,
+ PRIMARY KEY(c1),
+ KEY idx1(c3,c4),
+ FULLTEXT KEY ft1(c2)
+) COMMENT='ENGINE "MyISAM"' DEFAULT CHARSET=utf8;
+INSERT INTO t1 VALUES(1, 'test1', 1, 1);
+INSERT INTO t1 VALUES(2, 'test2', 2, 2);
+INSERT INTO t1 VALUES(3, 'test3', 1, 3);
+ALTER TABLE t1 DISABLE KEYS;
+DELETE FROM t1 WHERE c1 = 2;
+UPDATE t1 SET c4 = 4 WHERE c1 = 1;
+INSERT INTO t1 VALUES(4, 'test4', 2, 4);
+TRUNCATE t1;
+DROP TABLE t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test
new file mode 100644
index 00000000000..41a09b8721b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_drop_column.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries DROP COLUMN body;
+SHOW CREATE TABLE diaries;
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title) values ("groonga (1)");
+INSERT INTO diaries (title) values ("groonga (2)");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test
new file mode 100644
index 00000000000..293bc8b7963
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_fulltext.test
@@ -0,0 +1,52 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ FULLTEXT KEY title_index (title)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_index)
+ WHERE MATCH (title) AGAINST ("富士山");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test
new file mode 100644
index 00000000000..0756c27f9f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_lock_tables.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+CREATE TABLE IF NOT EXISTS memos (
+ id VARCHAR(45) NOT NULL PRIMARY KEY,
+ text TEXT NOT NULL,
+ FULLTEXT KEY (text)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+
+LOCK TABLES memos WRITE;
+ALTER TABLE memos DISABLE KEYS;
+
+INSERT INTO memos
+ VALUES (00000, 'text0'),
+ (00001, 'text1'),
+ (00002, 'text2');
+
+ALTER TABLE memos ENABLE KEYS;
+UNLOCK TABLES;
+
+SELECT * FROM memos;
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test
new file mode 100644
index 00000000000..f8b93e19000
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_multiple_column.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY title_and_created_at_index (title, created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (title_and_created_at_index)
+ WHERE title = "天気" AND
+ created_at = "2012-04-30 23:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test
new file mode 100644
index 00000000000..3dd0f332fe6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_normal.test
@@ -0,0 +1,52 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ created_at datetime,
+ KEY created_at_index (created_at)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello", "2012-04-30 20:00:00");
+INSERT INTO diaries VALUES (2, "天気" , "2012-04-30 23:00:00");
+INSERT INTO diaries VALUES (3, "富士山", "2012-04-30 19:00:00");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (created_at_index)
+ WHERE created_at = "2012-04-30 20:00:00";
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test
new file mode 100644
index 00000000000..bfa11c9eb8c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_enable_keys_primary.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255)
+) COMMENT='ENGINE "InnoDB"' DEFAULT CHARSET=utf8;
+
+ALTER TABLE diaries DISABLE KEYS;
+
+INSERT INTO diaries VALUES (1, "Hello");
+INSERT INTO diaries VALUES (2, "天気");
+INSERT INTO diaries VALUES (3, "富士山");
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+ALTER TABLE diaries ENABLE KEYS;
+
+SELECT *
+ FROM diaries
+ FORCE INDEX (PRIMARY)
+ WHERE id = 2;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test
new file mode 100644
index 00000000000..f4bd0b391b6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_fulltext.test
@@ -0,0 +1,57 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ FULLTEXT INDEX title_index (title)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("survey");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries ADD COLUMN body TEXT;
+UPDATE diaries SET body = "will start groonga!";
+SELECT * FROM diaries;
+
+INSERT INTO diaries (title, body) values ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) values ("groonga (2)", "started groonga.");
+SELECT * FROM diaries;
+
+ALTER TABLE diaries ADD FULLTEXT INDEX body_index (body);
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey") AND
+ MATCH(body) AGAINST("groonga");
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("groonga") AND
+ MATCH(body) AGAINST("starting");
+
+SHOW CREATE TABLE diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test
new file mode 100644
index 00000000000..595a850ae03
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_rename_table.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries, memos;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("groonga") AND
+ MATCH(body) AGAINST("starting");
+
+ALTER TABLE diaries RENAME memos;
+SELECT * FROM memos;
+SELECT * FROM memos
+ WHERE MATCH(title) AGAINST("groonga") AND
+ MATCH(body) AGAINST("starting");
+
+SHOW CREATE TABLE memos;
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test
new file mode 100644
index 00000000000..37ea8aaf149
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/alter_table_spatial.test
@@ -0,0 +1,150 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS shops;
+--enable_warnings
+
+CREATE TABLE shops (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ name TEXT,
+ location GEOMETRY NOT NULL
+) COMMENT = 'ENGINE "InnoDB"';
+
+INSERT INTO shops (name, location)
+ VALUES ('nezu-no-taiyaki',
+ GeomFromText('POINT(139.762573 35.720253)'));
+INSERT INTO shops (name, location)
+ VALUES ('taiyaki-kataoka',
+ GeomFromText('POINT(139.715591 35.712521)'));
+INSERT INTO shops (name, location)
+ VALUES ('soba-taiyaki-ku',
+ GeomFromText('POINT(139.659088 35.683712)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuruma',
+ GeomFromText('POINT(139.706207 35.721516)'));
+INSERT INTO shops (name, location)
+ VALUES ('hirose-ya',
+ GeomFromText('POINT(139.685608 35.714844)'));
+INSERT INTO shops (name, location)
+ VALUES ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+INSERT INTO shops (name, location)
+ VALUES ('omede-taiyaki',
+ GeomFromText('POINT(139.817154 35.700516)'));
+INSERT INTO shops (name, location)
+ VALUES ('onaga-ya',
+ GeomFromText('POINT(139.81105 35.698254)'));
+INSERT INTO shops (name, location)
+ VALUES ('shiro-ya',
+ GeomFromText('POINT(139.638611 35.705517)'));
+INSERT INTO shops (name, location)
+ VALUES ('fuji-ya',
+ GeomFromText('POINT(139.637115 35.703938)'));
+INSERT INTO shops (name, location)
+ VALUES ('miyoshi',
+ GeomFromText('POINT(139.537323 35.644539)'));
+INSERT INTO shops (name, location)
+ VALUES ('juju-ya',
+ GeomFromText('POINT(139.695755 35.628922)'));
+INSERT INTO shops (name, location)
+ VALUES ('tatsumi-ya',
+ GeomFromText('POINT(139.638657 35.665501)'));
+INSERT INTO shops (name, location)
+ VALUES ('tetsuji',
+ GeomFromText('POINT(139.76857 35.680912)'));
+INSERT INTO shops (name, location)
+ VALUES ('gazuma-ya',
+ GeomFromText('POINT(139.647598 35.700817)'));
+INSERT INTO shops (name, location)
+ VALUES ('honma-mon',
+ GeomFromText('POINT(139.652573 35.722736)'));
+INSERT INTO shops (name, location)
+ VALUES ('naniwa-ya',
+ GeomFromText('POINT(139.796234 35.730061)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuro-dai',
+ GeomFromText('POINT(139.704834 35.650345)'));
+INSERT INTO shops (name, location)
+ VALUES ('daruma',
+ GeomFromText('POINT(139.770599 35.681461)'));
+INSERT INTO shops (name, location)
+ VALUES ('yanagi-ya',
+ GeomFromText('POINT(139.783981 35.685341)'));
+INSERT INTO shops (name, location)
+ VALUES ('sharaku',
+ GeomFromText('POINT(139.794846 35.716969)'));
+INSERT INTO shops (name, location)
+ VALUES ('takane',
+ GeomFromText('POINT(139.560913 35.698601)'));
+INSERT INTO shops (name, location)
+ VALUES ('chiyoda',
+ GeomFromText('POINT(139.652817 35.642601)'));
+INSERT INTO shops (name, location)
+ VALUES ('da-ka-po',
+ GeomFromText('POINT(139.727356 35.627346)'));
+INSERT INTO shops (name, location)
+ VALUES ('matsushima-ya',
+ GeomFromText('POINT(139.737381 35.640556)'));
+INSERT INTO shops (name, location)
+ VALUES ('kazuya',
+ GeomFromText('POINT(139.760895 35.673508)'));
+INSERT INTO shops (name, location)
+ VALUES ('furuya-kogane-an',
+ GeomFromText('POINT(139.676071 35.680603)'));
+INSERT INTO shops (name, location)
+ VALUES ('hachi-no-ie',
+ GeomFromText('POINT(139.668106 35.608021)'));
+INSERT INTO shops (name, location)
+ VALUES ('azuki-chan',
+ GeomFromText('POINT(139.673203 35.64151)'));
+INSERT INTO shops (name, location)
+ VALUES ('kuriko-an',
+ GeomFromText('POINT(139.796829 35.712013)'));
+INSERT INTO shops (name, location)
+ VALUES ('yume-no-aru-machi-no-taiyaki-ya-san',
+ GeomFromText('POINT(139.712524 35.616199)'));
+INSERT INTO shops (name, location)
+ VALUES ('naze-ya',
+ GeomFromText('POINT(139.665833 35.609039)'));
+INSERT INTO shops (name, location)
+ VALUES ('sanoki-ya',
+ GeomFromText('POINT(139.770721 35.66592)'));
+INSERT INTO shops (name, location)
+ VALUES ('shigeta',
+ GeomFromText('POINT(139.780273 35.672626)'));
+INSERT INTO shops (name, location)
+ VALUES ('nishimi-ya',
+ GeomFromText('POINT(139.774628 35.671825)'));
+INSERT INTO shops (name, location)
+ VALUES ('hiiragi',
+ GeomFromText('POINT(139.711517 35.647701)'));
+
+ALTER TABLE shops ADD SPATIAL KEY location_index (location);
+
+SELECT id, name, AsText(location) AS location_text FROM shops
+ WHERE MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location);
+
+SHOW CREATE TABLE shops;
+
+DROP TABLE shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test
new file mode 100644
index 00000000000..e702cb5d591
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/auto_increment_text.test
@@ -0,0 +1,34 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text
+) comment = 'engine "innodb"';
+insert into diaries (body) values ("started groonga (long text)");
+select * from diaries;
+insert into diaries (body) values ("sleeping... (short text)");
+select * from diaries;
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..230ab87b391
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/binlog_TODO_SPLIT_ME.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_log_bin.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+show variables like 'log_bin';
+
+set binlog_format="STATEMENT";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+set binlog_format="ROW";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+set binlog_format="MIXED";
+
+create table t1 (c1 int primary key, c2 int) engine = mroonga COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+insert into t1 values(2,100);
+commit;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test
new file mode 100644
index 00000000000..3bc3c069705
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/column_comment_index_not_for_mroonga.test
@@ -0,0 +1,37 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64),
+ INDEX (tag) COMMENT 'Tag search is required.'
+) DEFAULT CHARSET=utf8
+ COMMENT='engine "InnoDB"';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test
new file mode 100644
index 00000000000..73065ffd7bb
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/column_normal_comment.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY,
+ tag VARCHAR(64) COMMENT 'It must consist of only alphabet and number.'
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnoDB"';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test
new file mode 100644
index 00000000000..f8b77becdde
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/count_star_with_index.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries_innodb;
+DROP TABLE IF EXISTS diaries_mroonga;
+--enable_warnings
+
+CREATE TABLE diaries_innodb (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ body TEXT,
+ flag TINYINT(2),
+ INDEX (flag)
+) ENGINE = InnoDB DEFAULT CHARSET UTF8;
+
+CREATE TABLE diaries_mroonga (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ body TEXT,
+ flag TINYINT(2),
+ INDEX (flag)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+
+INSERT INTO diaries_innodb (body) VALUES ("will start groonga!");
+INSERT INTO diaries_innodb (body) VALUES ("starting groonga...");
+INSERT INTO diaries_innodb (body) VALUES ("started groonga.");
+
+INSERT INTO diaries_mroonga (body) VALUES ("will start groonga!");
+INSERT INTO diaries_mroonga (body) VALUES ("starting groonga...");
+INSERT INTO diaries_mroonga (body) VALUES ("started groonga.");
+
+EXPLAIN SELECT COUNT(*) FROM diaries_innodb;
+EXPLAIN SELECT COUNT(*) FROM diaries_mroonga;
+
+DROP TABLE diaries_innodb;
+DROP TABLE diaries_mroonga;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..6df44e79665
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_TODO_SPLIT_ME.test
@@ -0,0 +1,99 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# simple test
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+create table t2 (c1 int primary key) COMMENT = 'engine "innodb"';
+create table t3 (c1 int primary key) COMMENT = 'engine "innodb"';
+drop table t1,t2,t3;
+create table t1 (c1 int primary key, c2 int, c3 int) COMMENT = 'engine "innodb"';
+drop table t1;
+
+# data type support
+create table t1 (c1 bit primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 tinyint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 smallint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 mediumint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 bigint primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 double primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 float primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 decimal primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 date primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 time primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 timestamp primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 year primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 char(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 varchar(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 binary(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 varbinary(10) primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 enum("yes","no") primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+create table t1 (c1 set("A","B","AB","O") primary key) COMMENT = 'engine "innodb"';
+desc t1;
+drop table t1;
+
+# error test
+--error ER_REQUIRES_PRIMARY_KEY
+create table t1 (c1 int) COMMENT = 'engine "innodb"';
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test
new file mode 100644
index 00000000000..f9a7dc3168b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_comment_combined.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS bugs;
+--enable_warnings
+
+CREATE TABLE bugs (
+ id INT UNSIGNED PRIMARY KEY
+) DEFAULT CHARSET=utf8
+ COMMENT='Free style normal comment, engine "InnoDB"';
+
+SHOW CREATE TABLE bugs;
+
+DROP TABLE bugs;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index.test
new file mode 100644
index 00000000000..c4265ffd22e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_normalizer_fulltext_index.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE diaries (
+ day DATE PRIMARY KEY,
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+INSERT INTO diaries VALUES ("2013-04-23", "ブラックコーヒーを飲んã ã€‚");
+
+SELECT * FROM diaries
+ WHERE MATCH (content) AGAINST ("+ãµã‚‰ã¤ã" IN BOOLEAN MODE);
+SELECT * FROM diaries
+ WHERE MATCH (content) AGAINST ("+ブラック" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_multiple_token_filters.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_multiple_token_filters.test
new file mode 100644
index 00000000000..9ba941f8701
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_multiple_token_filters.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+SET NAMES utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord,TokenFilterStopWord"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_one_token_filter.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_one_token_filter.test
new file mode 100644
index 00000000000..91ac84c04d5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/create_table_token_filters_index_comment_one_token_filter.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2014 Naoya Murakami <naoya@createfield.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/load_mroonga_functions.inc
+
+--disable_query_log
+DROP DATABASE test;
+CREATE DATABASE test;
+USE test;
+--enable_query_log
+
+SELECT mroonga_command("register token_filters/stop_word");
+
+SET NAMES utf8;
+
+CREATE TABLE memos (
+ id INT NOT NULL PRIMARY KEY,
+ content VARCHAR(64) NOT NULL,
+ FULLTEXT INDEX (content) COMMENT 'token_filters "TokenFilterStopWord"'
+) COMMENT='engine "InnoDB"' DEFAULT CHARSET=utf8;
+
+SELECT mroonga_command("dump");
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/unload_mroonga_functions.inc
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..1e82a2dff60
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_TODO_SPLIT_ME.test
@@ -0,0 +1,59 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int) COMMENT 'engine = "innodb"';
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+insert into t1 values (4, 102);
+select * from t1;
+
+delete from t1 where c1=3;
+select * from t1;
+
+flush tables;
+
+delete from t1 where c1=2;
+select * from t1;
+
+delete from t1;
+select * from t1;
+
+drop table t1;
+
+create table t1 (c1 int primary key, c2 text, fulltext index (c2)) COMMENT 'engine = "innodb"';
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+
+select * from t1;
+select * from t1 where match(c2) against("ki");
+delete from t1 where c1=20;
+select * from t1;
+select * from t1 where match(c2) against("ki");
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test
new file mode 100644
index 00000000000..c77a9cdeac3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/delete_all.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS users;
+--enable_warnings
+
+SET NAMES utf8;
+
+CREATE TABLE users (
+ id int PRIMARY KEY,
+ name varchar(100),
+ FULLTEXT INDEX (name)
+) COMMENT 'engine = "InnoDB"' DEFAULT CHARSET=utf8;
+
+INSERT INTO users VALUES (1, 'Alice');
+INSERT INTO users VALUES (2, 'Bob');
+INSERT INTO users VALUES (3, 'Chris');
+
+SELECT * FROM users;
+
+DELETE FROM users;
+
+SELECT * FROM users;
+
+DROP TABLE users;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test
new file mode 100644
index 00000000000..fb55d609855
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_leading_not.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("-明日 +天気" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test
new file mode 100644
index 00000000000..483cca04c8a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_multiple_match_against.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title),
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET = UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, "富士山", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気 1月1日", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "天気 4月4日", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT COUNT(*) FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+SELECT * FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+SELECT 1 FROM diaries WHERE MATCH(title) AGAINST("+天気" IN BOOLEAN MODE) AND MATCH(content) AGAINST("+今日" IN BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test
new file mode 100644
index 00000000000..2e96b8ed4f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_no_operator.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- fine is be" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test
new file mode 100644
index 00000000000..6eb46419c4d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_or.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- is OR be fine" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test
new file mode 100644
index 00000000000..301365610c5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_minus_with_plus.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Yesterday was good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D- good +day be" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test
new file mode 100644
index 00000000000..6a89d7556ab
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_no_operator.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test
new file mode 100644
index 00000000000..790d2f1c9a9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_minus.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test
new file mode 100644
index 00000000000..a45c414580d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_or_with_plus.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be fine.");
+INSERT INTO memos VALUES (NULL, "Yesterday was fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test
new file mode 100644
index 00000000000..d013578a8f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_no_operator.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today good" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test
new file mode 100644
index 00000000000..91b0a7f7891
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_minus.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today -good is" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test
new file mode 100644
index 00000000000..29c1c0d9d98
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_default_operator_plus_with_or.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS memos;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE memos (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content TEXT,
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET=utf8 COMMENT='engine "InnODB"';
+
+INSERT INTO memos VALUES (NULL, "Today is good day.");
+INSERT INTO memos VALUES (NULL, "Tomorrow will be good day.");
+INSERT INTO memos VALUES (NULL, "Today is fine.");
+
+SELECT * FROM memos
+ WHERE MATCH (content) AGAINST ("*D+ today OR tomorrow day" IN BOOLEAN MODE);
+
+DROP TABLE memos;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test
new file mode 100644
index 00000000000..027b05d5320
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_full_spec.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1:10,2:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test
new file mode 100644
index 00000000000..41b814de80f
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_no_weight.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1,2:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1,2:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test
new file mode 100644
index 00000000000..1db4134d0a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_boolean_mode_pragma_weight_omit_section.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id INT PRIMARY KEY,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX (title, content)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+
+INSERT INTO diaries VALUES(1, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT *, MATCH(title, content)
+ AGAINST("*W1:2 +天気" in BOOLEAN MODE) AS score
+ FROM diaries
+ WHERE MATCH(title, content)
+ AGAINST("*W1:2 +天気" in BOOLEAN MODE);
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test
new file mode 100644
index 00000000000..33e23e801ff
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_ascii.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+select * from t1 where match(c3) against("su");
+select * from t1 where match(c3) against("ii");
+select * from t1 where match(c3) against("+su" in boolean mode);
+select * from t1 where match(c3) against("+ii" in boolean mode);
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test
new file mode 100644
index 00000000000..75853611f69
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_cp932.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_cp932.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names cp932;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset cp932 COMMENT = 'engine "innodb"';
+insert into t1 values(1, "–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚ɂ‚¢‚Ä","‚ ‚ ‚ ‚ ‚ ‚ ‚ ");
+insert into t1 values(2, "‚¢‚¢‚¢‚¢‚¢","–¾“ú‚Ì•xŽmŽR‚Ì“V‹C‚Í•ª‚©‚è‚Ü‚¹‚ñ");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("•xŽmŽR");
+select * from t1 where match(c3) against("•xŽmŽR");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test
new file mode 100644
index 00000000000..3f1cba869f8
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_eucjpms.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_eucjpms.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names eucjpms;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset eucjpms COMMENT = 'engine "innodb"';
+insert into t1 values(1, "ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ë¤Ä¤¤¤Æ","¤¢¤¢¤¢¤¢¤¢¤¢¤¢");
+insert into t1 values(2, "¤¤¤¤¤¤¤¤¤¤","ÌÀÆü¤ÎÉٻ볤ÎÅ·µ¤¤Ïʬ¤«¤ê¤Þ¤»¤ó");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("Éٻλ³");
+select * from t1 where match(c3) against("Éٻλ³");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test
new file mode 100644
index 00000000000..27524ac2ed0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_charset_japanese.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8 COMMENT = 'engine "innodb"';
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("富士山");
+select * from t1 where match(c3) against("富士山");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test
new file mode 100644
index 00000000000..0115ed0699c
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_index_recreate.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES utf8;
+CREATE TABLE diaries (
+ id int PRIMARY KEY,
+ title varchar(255),
+ content text,
+ FULLTEXT INDEX (title)
+) DEFAULT CHARSET=utf8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES (1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES (2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES (3, "富士山", "今日もãã‚Œã„。");
+
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+
+DROP INDEX title ON diaries;
+
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+SELECT * FROM diaries;
+
+CREATE FULLTEXT INDEX new_title_index ON diaries (title);
+SELECT * FROM diaries WHERE MATCH (title) AGAINST ("富士山");
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test
new file mode 100644
index 00000000000..6037ab61da0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_select.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8 COMMENT = 'engine "innodb"';
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8 COMMENT = 'engine "innodb"';
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+select * from t2;
+select * from t1 where c1=3;
+select * from t2 where c1=3;
+select * from t1 where c1>3 order by c1 desc;
+select * from t2 where c1>3 order by c1 asc;
+select * from t1 where c2>"s" order by c2 desc;
+select * from t2 where c2>"s" order by c1 asc;
+select *,match(c2) against("ii") from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+select *,match(c2) against("ii") from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+drop table t1,t2;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test
new file mode 100644
index 00000000000..43237cdc96a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_insert_values.test
@@ -0,0 +1,35 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "innodb"';
+show create table t1;
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+flush tables;
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test
new file mode 100644
index 00000000000..c12441f3c5a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_many_records.test
@@ -0,0 +1,4136 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ fulltext index (title)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+
+set autocommit=0;
+insert into diaries values(0, "2011-07-14");
+insert into diaries values(1, "2011-07-15");
+insert into diaries values(2, "2011-07-16");
+insert into diaries values(3, "2011-07-17");
+insert into diaries values(4, "2011-07-18");
+insert into diaries values(5, "2011-07-19");
+insert into diaries values(6, "2011-07-20");
+insert into diaries values(7, "2011-07-21");
+insert into diaries values(8, "2011-07-22");
+insert into diaries values(9, "2011-07-23");
+insert into diaries values(10, "2011-07-24");
+insert into diaries values(11, "2011-07-25");
+insert into diaries values(12, "2011-07-26");
+insert into diaries values(13, "2011-07-27");
+insert into diaries values(14, "2011-07-28");
+insert into diaries values(15, "2011-07-29");
+insert into diaries values(16, "2011-07-30");
+insert into diaries values(17, "2011-07-31");
+insert into diaries values(18, "2011-08-01");
+insert into diaries values(19, "2011-08-02");
+insert into diaries values(20, "2011-08-03");
+insert into diaries values(21, "2011-08-04");
+insert into diaries values(22, "2011-08-05");
+insert into diaries values(23, "2011-08-06");
+insert into diaries values(24, "2011-08-07");
+insert into diaries values(25, "2011-08-08");
+insert into diaries values(26, "2011-08-09");
+insert into diaries values(27, "2011-08-10");
+insert into diaries values(28, "2011-08-11");
+insert into diaries values(29, "2011-08-12");
+insert into diaries values(30, "2011-08-13");
+insert into diaries values(31, "2011-08-14");
+insert into diaries values(32, "2011-08-15");
+insert into diaries values(33, "2011-08-16");
+insert into diaries values(34, "2011-08-17");
+insert into diaries values(35, "2011-08-18");
+insert into diaries values(36, "2011-08-19");
+insert into diaries values(37, "2011-08-20");
+insert into diaries values(38, "2011-08-21");
+insert into diaries values(39, "2011-08-22");
+insert into diaries values(40, "2011-08-23");
+insert into diaries values(41, "2011-08-24");
+insert into diaries values(42, "2011-08-25");
+insert into diaries values(43, "2011-08-26");
+insert into diaries values(44, "2011-08-27");
+insert into diaries values(45, "2011-08-28");
+insert into diaries values(46, "2011-08-29");
+insert into diaries values(47, "2011-08-30");
+insert into diaries values(48, "2011-08-31");
+insert into diaries values(49, "2011-09-01");
+insert into diaries values(50, "2011-09-02");
+insert into diaries values(51, "2011-09-03");
+insert into diaries values(52, "2011-09-04");
+insert into diaries values(53, "2011-09-05");
+insert into diaries values(54, "2011-09-06");
+insert into diaries values(55, "2011-09-07");
+insert into diaries values(56, "2011-09-08");
+insert into diaries values(57, "2011-09-09");
+insert into diaries values(58, "2011-09-10");
+insert into diaries values(59, "2011-09-11");
+insert into diaries values(60, "2011-09-12");
+insert into diaries values(61, "2011-09-13");
+insert into diaries values(62, "2011-09-14");
+insert into diaries values(63, "2011-09-15");
+insert into diaries values(64, "2011-09-16");
+insert into diaries values(65, "2011-09-17");
+insert into diaries values(66, "2011-09-18");
+insert into diaries values(67, "2011-09-19");
+insert into diaries values(68, "2011-09-20");
+insert into diaries values(69, "2011-09-21");
+insert into diaries values(70, "2011-09-22");
+insert into diaries values(71, "2011-09-23");
+insert into diaries values(72, "2011-09-24");
+insert into diaries values(73, "2011-09-25");
+insert into diaries values(74, "2011-09-26");
+insert into diaries values(75, "2011-09-27");
+insert into diaries values(76, "2011-09-28");
+insert into diaries values(77, "2011-09-29");
+insert into diaries values(78, "2011-09-30");
+insert into diaries values(79, "2011-10-01");
+insert into diaries values(80, "2011-10-02");
+insert into diaries values(81, "2011-10-03");
+insert into diaries values(82, "2011-10-04");
+insert into diaries values(83, "2011-10-05");
+insert into diaries values(84, "2011-10-06");
+insert into diaries values(85, "2011-10-07");
+insert into diaries values(86, "2011-10-08");
+insert into diaries values(87, "2011-10-09");
+insert into diaries values(88, "2011-10-10");
+insert into diaries values(89, "2011-10-11");
+insert into diaries values(90, "2011-10-12");
+insert into diaries values(91, "2011-10-13");
+insert into diaries values(92, "2011-10-14");
+insert into diaries values(93, "2011-10-15");
+insert into diaries values(94, "2011-10-16");
+insert into diaries values(95, "2011-10-17");
+insert into diaries values(96, "2011-10-18");
+insert into diaries values(97, "2011-10-19");
+insert into diaries values(98, "2011-10-20");
+insert into diaries values(99, "2011-10-21");
+insert into diaries values(100, "2011-10-22");
+insert into diaries values(101, "2011-10-23");
+insert into diaries values(102, "2011-10-24");
+insert into diaries values(103, "2011-10-25");
+insert into diaries values(104, "2011-10-26");
+insert into diaries values(105, "2011-10-27");
+insert into diaries values(106, "2011-10-28");
+insert into diaries values(107, "2011-10-29");
+insert into diaries values(108, "2011-10-30");
+insert into diaries values(109, "2011-10-31");
+insert into diaries values(110, "2011-11-01");
+insert into diaries values(111, "2011-11-02");
+insert into diaries values(112, "2011-11-03");
+insert into diaries values(113, "2011-11-04");
+insert into diaries values(114, "2011-11-05");
+insert into diaries values(115, "2011-11-06");
+insert into diaries values(116, "2011-11-07");
+insert into diaries values(117, "2011-11-08");
+insert into diaries values(118, "2011-11-09");
+insert into diaries values(119, "2011-11-10");
+insert into diaries values(120, "2011-11-11");
+insert into diaries values(121, "2011-11-12");
+insert into diaries values(122, "2011-11-13");
+insert into diaries values(123, "2011-11-14");
+insert into diaries values(124, "2011-11-15");
+insert into diaries values(125, "2011-11-16");
+insert into diaries values(126, "2011-11-17");
+insert into diaries values(127, "2011-11-18");
+insert into diaries values(128, "2011-11-19");
+insert into diaries values(129, "2011-11-20");
+insert into diaries values(130, "2011-11-21");
+insert into diaries values(131, "2011-11-22");
+insert into diaries values(132, "2011-11-23");
+insert into diaries values(133, "2011-11-24");
+insert into diaries values(134, "2011-11-25");
+insert into diaries values(135, "2011-11-26");
+insert into diaries values(136, "2011-11-27");
+insert into diaries values(137, "2011-11-28");
+insert into diaries values(138, "2011-11-29");
+insert into diaries values(139, "2011-11-30");
+insert into diaries values(140, "2011-12-01");
+insert into diaries values(141, "2011-12-02");
+insert into diaries values(142, "2011-12-03");
+insert into diaries values(143, "2011-12-04");
+insert into diaries values(144, "2011-12-05");
+insert into diaries values(145, "2011-12-06");
+insert into diaries values(146, "2011-12-07");
+insert into diaries values(147, "2011-12-08");
+insert into diaries values(148, "2011-12-09");
+insert into diaries values(149, "2011-12-10");
+insert into diaries values(150, "2011-12-11");
+insert into diaries values(151, "2011-12-12");
+insert into diaries values(152, "2011-12-13");
+insert into diaries values(153, "2011-12-14");
+insert into diaries values(154, "2011-12-15");
+insert into diaries values(155, "2011-12-16");
+insert into diaries values(156, "2011-12-17");
+insert into diaries values(157, "2011-12-18");
+insert into diaries values(158, "2011-12-19");
+insert into diaries values(159, "2011-12-20");
+insert into diaries values(160, "2011-12-21");
+insert into diaries values(161, "2011-12-22");
+insert into diaries values(162, "2011-12-23");
+insert into diaries values(163, "2011-12-24");
+insert into diaries values(164, "2011-12-25");
+insert into diaries values(165, "2011-12-26");
+insert into diaries values(166, "2011-12-27");
+insert into diaries values(167, "2011-12-28");
+insert into diaries values(168, "2011-12-29");
+insert into diaries values(169, "2011-12-30");
+insert into diaries values(170, "2011-12-31");
+insert into diaries values(171, "2012-01-01");
+insert into diaries values(172, "2012-01-02");
+insert into diaries values(173, "2012-01-03");
+insert into diaries values(174, "2012-01-04");
+insert into diaries values(175, "2012-01-05");
+insert into diaries values(176, "2012-01-06");
+insert into diaries values(177, "2012-01-07");
+insert into diaries values(178, "2012-01-08");
+insert into diaries values(179, "2012-01-09");
+insert into diaries values(180, "2012-01-10");
+insert into diaries values(181, "2012-01-11");
+insert into diaries values(182, "2012-01-12");
+insert into diaries values(183, "2012-01-13");
+insert into diaries values(184, "2012-01-14");
+insert into diaries values(185, "2012-01-15");
+insert into diaries values(186, "2012-01-16");
+insert into diaries values(187, "2012-01-17");
+insert into diaries values(188, "2012-01-18");
+insert into diaries values(189, "2012-01-19");
+insert into diaries values(190, "2012-01-20");
+insert into diaries values(191, "2012-01-21");
+insert into diaries values(192, "2012-01-22");
+insert into diaries values(193, "2012-01-23");
+insert into diaries values(194, "2012-01-24");
+insert into diaries values(195, "2012-01-25");
+insert into diaries values(196, "2012-01-26");
+insert into diaries values(197, "2012-01-27");
+insert into diaries values(198, "2012-01-28");
+insert into diaries values(199, "2012-01-29");
+insert into diaries values(200, "2012-01-30");
+insert into diaries values(201, "2012-01-31");
+insert into diaries values(202, "2012-02-01");
+insert into diaries values(203, "2012-02-02");
+insert into diaries values(204, "2012-02-03");
+insert into diaries values(205, "2012-02-04");
+insert into diaries values(206, "2012-02-05");
+insert into diaries values(207, "2012-02-06");
+insert into diaries values(208, "2012-02-07");
+insert into diaries values(209, "2012-02-08");
+insert into diaries values(210, "2012-02-09");
+insert into diaries values(211, "2012-02-10");
+insert into diaries values(212, "2012-02-11");
+insert into diaries values(213, "2012-02-12");
+insert into diaries values(214, "2012-02-13");
+insert into diaries values(215, "2012-02-14");
+insert into diaries values(216, "2012-02-15");
+insert into diaries values(217, "2012-02-16");
+insert into diaries values(218, "2012-02-17");
+insert into diaries values(219, "2012-02-18");
+insert into diaries values(220, "2012-02-19");
+insert into diaries values(221, "2012-02-20");
+insert into diaries values(222, "2012-02-21");
+insert into diaries values(223, "2012-02-22");
+insert into diaries values(224, "2012-02-23");
+insert into diaries values(225, "2012-02-24");
+insert into diaries values(226, "2012-02-25");
+insert into diaries values(227, "2012-02-26");
+insert into diaries values(228, "2012-02-27");
+insert into diaries values(229, "2012-02-28");
+insert into diaries values(230, "2012-02-29");
+insert into diaries values(231, "2012-03-01");
+insert into diaries values(232, "2012-03-02");
+insert into diaries values(233, "2012-03-03");
+insert into diaries values(234, "2012-03-04");
+insert into diaries values(235, "2012-03-05");
+insert into diaries values(236, "2012-03-06");
+insert into diaries values(237, "2012-03-07");
+insert into diaries values(238, "2012-03-08");
+insert into diaries values(239, "2012-03-09");
+insert into diaries values(240, "2012-03-10");
+insert into diaries values(241, "2012-03-11");
+insert into diaries values(242, "2012-03-12");
+insert into diaries values(243, "2012-03-13");
+insert into diaries values(244, "2012-03-14");
+insert into diaries values(245, "2012-03-15");
+insert into diaries values(246, "2012-03-16");
+insert into diaries values(247, "2012-03-17");
+insert into diaries values(248, "2012-03-18");
+insert into diaries values(249, "2012-03-19");
+insert into diaries values(250, "2012-03-20");
+insert into diaries values(251, "2012-03-21");
+insert into diaries values(252, "2012-03-22");
+insert into diaries values(253, "2012-03-23");
+insert into diaries values(254, "2012-03-24");
+insert into diaries values(255, "2012-03-25");
+insert into diaries values(256, "2012-03-26");
+insert into diaries values(257, "2012-03-27");
+insert into diaries values(258, "2012-03-28");
+insert into diaries values(259, "2012-03-29");
+insert into diaries values(260, "2012-03-30");
+insert into diaries values(261, "2012-03-31");
+insert into diaries values(262, "2012-04-01");
+insert into diaries values(263, "2012-04-02");
+insert into diaries values(264, "2012-04-03");
+insert into diaries values(265, "2012-04-04");
+insert into diaries values(266, "2012-04-05");
+insert into diaries values(267, "2012-04-06");
+insert into diaries values(268, "2012-04-07");
+insert into diaries values(269, "2012-04-08");
+insert into diaries values(270, "2012-04-09");
+insert into diaries values(271, "2012-04-10");
+insert into diaries values(272, "2012-04-11");
+insert into diaries values(273, "2012-04-12");
+insert into diaries values(274, "2012-04-13");
+insert into diaries values(275, "2012-04-14");
+insert into diaries values(276, "2012-04-15");
+insert into diaries values(277, "2012-04-16");
+insert into diaries values(278, "2012-04-17");
+insert into diaries values(279, "2012-04-18");
+insert into diaries values(280, "2012-04-19");
+insert into diaries values(281, "2012-04-20");
+insert into diaries values(282, "2012-04-21");
+insert into diaries values(283, "2012-04-22");
+insert into diaries values(284, "2012-04-23");
+insert into diaries values(285, "2012-04-24");
+insert into diaries values(286, "2012-04-25");
+insert into diaries values(287, "2012-04-26");
+insert into diaries values(288, "2012-04-27");
+insert into diaries values(289, "2012-04-28");
+insert into diaries values(290, "2012-04-29");
+insert into diaries values(291, "2012-04-30");
+insert into diaries values(292, "2012-05-01");
+insert into diaries values(293, "2012-05-02");
+insert into diaries values(294, "2012-05-03");
+insert into diaries values(295, "2012-05-04");
+insert into diaries values(296, "2012-05-05");
+insert into diaries values(297, "2012-05-06");
+insert into diaries values(298, "2012-05-07");
+insert into diaries values(299, "2012-05-08");
+insert into diaries values(300, "2012-05-09");
+insert into diaries values(301, "2012-05-10");
+insert into diaries values(302, "2012-05-11");
+insert into diaries values(303, "2012-05-12");
+insert into diaries values(304, "2012-05-13");
+insert into diaries values(305, "2012-05-14");
+insert into diaries values(306, "2012-05-15");
+insert into diaries values(307, "2012-05-16");
+insert into diaries values(308, "2012-05-17");
+insert into diaries values(309, "2012-05-18");
+insert into diaries values(310, "2012-05-19");
+insert into diaries values(311, "2012-05-20");
+insert into diaries values(312, "2012-05-21");
+insert into diaries values(313, "2012-05-22");
+insert into diaries values(314, "2012-05-23");
+insert into diaries values(315, "2012-05-24");
+insert into diaries values(316, "2012-05-25");
+insert into diaries values(317, "2012-05-26");
+insert into diaries values(318, "2012-05-27");
+insert into diaries values(319, "2012-05-28");
+insert into diaries values(320, "2012-05-29");
+insert into diaries values(321, "2012-05-30");
+insert into diaries values(322, "2012-05-31");
+insert into diaries values(323, "2012-06-01");
+insert into diaries values(324, "2012-06-02");
+insert into diaries values(325, "2012-06-03");
+insert into diaries values(326, "2012-06-04");
+insert into diaries values(327, "2012-06-05");
+insert into diaries values(328, "2012-06-06");
+insert into diaries values(329, "2012-06-07");
+insert into diaries values(330, "2012-06-08");
+insert into diaries values(331, "2012-06-09");
+insert into diaries values(332, "2012-06-10");
+insert into diaries values(333, "2012-06-11");
+insert into diaries values(334, "2012-06-12");
+insert into diaries values(335, "2012-06-13");
+insert into diaries values(336, "2012-06-14");
+insert into diaries values(337, "2012-06-15");
+insert into diaries values(338, "2012-06-16");
+insert into diaries values(339, "2012-06-17");
+insert into diaries values(340, "2012-06-18");
+insert into diaries values(341, "2012-06-19");
+insert into diaries values(342, "2012-06-20");
+insert into diaries values(343, "2012-06-21");
+insert into diaries values(344, "2012-06-22");
+insert into diaries values(345, "2012-06-23");
+insert into diaries values(346, "2012-06-24");
+insert into diaries values(347, "2012-06-25");
+insert into diaries values(348, "2012-06-26");
+insert into diaries values(349, "2012-06-27");
+insert into diaries values(350, "2012-06-28");
+insert into diaries values(351, "2012-06-29");
+insert into diaries values(352, "2012-06-30");
+insert into diaries values(353, "2012-07-01");
+insert into diaries values(354, "2012-07-02");
+insert into diaries values(355, "2012-07-03");
+insert into diaries values(356, "2012-07-04");
+insert into diaries values(357, "2012-07-05");
+insert into diaries values(358, "2012-07-06");
+insert into diaries values(359, "2012-07-07");
+insert into diaries values(360, "2012-07-08");
+insert into diaries values(361, "2012-07-09");
+insert into diaries values(362, "2012-07-10");
+insert into diaries values(363, "2012-07-11");
+insert into diaries values(364, "2012-07-12");
+insert into diaries values(365, "2012-07-13");
+insert into diaries values(366, "2012-07-14");
+insert into diaries values(367, "2012-07-15");
+insert into diaries values(368, "2012-07-16");
+insert into diaries values(369, "2012-07-17");
+insert into diaries values(370, "2012-07-18");
+insert into diaries values(371, "2012-07-19");
+insert into diaries values(372, "2012-07-20");
+insert into diaries values(373, "2012-07-21");
+insert into diaries values(374, "2012-07-22");
+insert into diaries values(375, "2012-07-23");
+insert into diaries values(376, "2012-07-24");
+insert into diaries values(377, "2012-07-25");
+insert into diaries values(378, "2012-07-26");
+insert into diaries values(379, "2012-07-27");
+insert into diaries values(380, "2012-07-28");
+insert into diaries values(381, "2012-07-29");
+insert into diaries values(382, "2012-07-30");
+insert into diaries values(383, "2012-07-31");
+insert into diaries values(384, "2012-08-01");
+insert into diaries values(385, "2012-08-02");
+insert into diaries values(386, "2012-08-03");
+insert into diaries values(387, "2012-08-04");
+insert into diaries values(388, "2012-08-05");
+insert into diaries values(389, "2012-08-06");
+insert into diaries values(390, "2012-08-07");
+insert into diaries values(391, "2012-08-08");
+insert into diaries values(392, "2012-08-09");
+insert into diaries values(393, "2012-08-10");
+insert into diaries values(394, "2012-08-11");
+insert into diaries values(395, "2012-08-12");
+insert into diaries values(396, "2012-08-13");
+insert into diaries values(397, "2012-08-14");
+insert into diaries values(398, "2012-08-15");
+insert into diaries values(399, "2012-08-16");
+insert into diaries values(400, "2012-08-17");
+insert into diaries values(401, "2012-08-18");
+insert into diaries values(402, "2012-08-19");
+insert into diaries values(403, "2012-08-20");
+insert into diaries values(404, "2012-08-21");
+insert into diaries values(405, "2012-08-22");
+insert into diaries values(406, "2012-08-23");
+insert into diaries values(407, "2012-08-24");
+insert into diaries values(408, "2012-08-25");
+insert into diaries values(409, "2012-08-26");
+insert into diaries values(410, "2012-08-27");
+insert into diaries values(411, "2012-08-28");
+insert into diaries values(412, "2012-08-29");
+insert into diaries values(413, "2012-08-30");
+insert into diaries values(414, "2012-08-31");
+insert into diaries values(415, "2012-09-01");
+insert into diaries values(416, "2012-09-02");
+insert into diaries values(417, "2012-09-03");
+insert into diaries values(418, "2012-09-04");
+insert into diaries values(419, "2012-09-05");
+insert into diaries values(420, "2012-09-06");
+insert into diaries values(421, "2012-09-07");
+insert into diaries values(422, "2012-09-08");
+insert into diaries values(423, "2012-09-09");
+insert into diaries values(424, "2012-09-10");
+insert into diaries values(425, "2012-09-11");
+insert into diaries values(426, "2012-09-12");
+insert into diaries values(427, "2012-09-13");
+insert into diaries values(428, "2012-09-14");
+insert into diaries values(429, "2012-09-15");
+insert into diaries values(430, "2012-09-16");
+insert into diaries values(431, "2012-09-17");
+insert into diaries values(432, "2012-09-18");
+insert into diaries values(433, "2012-09-19");
+insert into diaries values(434, "2012-09-20");
+insert into diaries values(435, "2012-09-21");
+insert into diaries values(436, "2012-09-22");
+insert into diaries values(437, "2012-09-23");
+insert into diaries values(438, "2012-09-24");
+insert into diaries values(439, "2012-09-25");
+insert into diaries values(440, "2012-09-26");
+insert into diaries values(441, "2012-09-27");
+insert into diaries values(442, "2012-09-28");
+insert into diaries values(443, "2012-09-29");
+insert into diaries values(444, "2012-09-30");
+insert into diaries values(445, "2012-10-01");
+insert into diaries values(446, "2012-10-02");
+insert into diaries values(447, "2012-10-03");
+insert into diaries values(448, "2012-10-04");
+insert into diaries values(449, "2012-10-05");
+insert into diaries values(450, "2012-10-06");
+insert into diaries values(451, "2012-10-07");
+insert into diaries values(452, "2012-10-08");
+insert into diaries values(453, "2012-10-09");
+insert into diaries values(454, "2012-10-10");
+insert into diaries values(455, "2012-10-11");
+insert into diaries values(456, "2012-10-12");
+insert into diaries values(457, "2012-10-13");
+insert into diaries values(458, "2012-10-14");
+insert into diaries values(459, "2012-10-15");
+insert into diaries values(460, "2012-10-16");
+insert into diaries values(461, "2012-10-17");
+insert into diaries values(462, "2012-10-18");
+insert into diaries values(463, "2012-10-19");
+insert into diaries values(464, "2012-10-20");
+insert into diaries values(465, "2012-10-21");
+insert into diaries values(466, "2012-10-22");
+insert into diaries values(467, "2012-10-23");
+insert into diaries values(468, "2012-10-24");
+insert into diaries values(469, "2012-10-25");
+insert into diaries values(470, "2012-10-26");
+insert into diaries values(471, "2012-10-27");
+insert into diaries values(472, "2012-10-28");
+insert into diaries values(473, "2012-10-29");
+insert into diaries values(474, "2012-10-30");
+insert into diaries values(475, "2012-10-31");
+insert into diaries values(476, "2012-11-01");
+insert into diaries values(477, "2012-11-02");
+insert into diaries values(478, "2012-11-03");
+insert into diaries values(479, "2012-11-04");
+insert into diaries values(480, "2012-11-05");
+insert into diaries values(481, "2012-11-06");
+insert into diaries values(482, "2012-11-07");
+insert into diaries values(483, "2012-11-08");
+insert into diaries values(484, "2012-11-09");
+insert into diaries values(485, "2012-11-10");
+insert into diaries values(486, "2012-11-11");
+insert into diaries values(487, "2012-11-12");
+insert into diaries values(488, "2012-11-13");
+insert into diaries values(489, "2012-11-14");
+insert into diaries values(490, "2012-11-15");
+insert into diaries values(491, "2012-11-16");
+insert into diaries values(492, "2012-11-17");
+insert into diaries values(493, "2012-11-18");
+insert into diaries values(494, "2012-11-19");
+insert into diaries values(495, "2012-11-20");
+insert into diaries values(496, "2012-11-21");
+insert into diaries values(497, "2012-11-22");
+insert into diaries values(498, "2012-11-23");
+insert into diaries values(499, "2012-11-24");
+insert into diaries values(500, "2012-11-25");
+insert into diaries values(501, "2012-11-26");
+insert into diaries values(502, "2012-11-27");
+insert into diaries values(503, "2012-11-28");
+insert into diaries values(504, "2012-11-29");
+insert into diaries values(505, "2012-11-30");
+insert into diaries values(506, "2012-12-01");
+insert into diaries values(507, "2012-12-02");
+insert into diaries values(508, "2012-12-03");
+insert into diaries values(509, "2012-12-04");
+insert into diaries values(510, "2012-12-05");
+insert into diaries values(511, "2012-12-06");
+insert into diaries values(512, "2012-12-07");
+insert into diaries values(513, "2012-12-08");
+insert into diaries values(514, "2012-12-09");
+insert into diaries values(515, "2012-12-10");
+insert into diaries values(516, "2012-12-11");
+insert into diaries values(517, "2012-12-12");
+insert into diaries values(518, "2012-12-13");
+insert into diaries values(519, "2012-12-14");
+insert into diaries values(520, "2012-12-15");
+insert into diaries values(521, "2012-12-16");
+insert into diaries values(522, "2012-12-17");
+insert into diaries values(523, "2012-12-18");
+insert into diaries values(524, "2012-12-19");
+insert into diaries values(525, "2012-12-20");
+insert into diaries values(526, "2012-12-21");
+insert into diaries values(527, "2012-12-22");
+insert into diaries values(528, "2012-12-23");
+insert into diaries values(529, "2012-12-24");
+insert into diaries values(530, "2012-12-25");
+insert into diaries values(531, "2012-12-26");
+insert into diaries values(532, "2012-12-27");
+insert into diaries values(533, "2012-12-28");
+insert into diaries values(534, "2012-12-29");
+insert into diaries values(535, "2012-12-30");
+insert into diaries values(536, "2012-12-31");
+insert into diaries values(537, "2013-01-01");
+insert into diaries values(538, "2013-01-02");
+insert into diaries values(539, "2013-01-03");
+insert into diaries values(540, "2013-01-04");
+insert into diaries values(541, "2013-01-05");
+insert into diaries values(542, "2013-01-06");
+insert into diaries values(543, "2013-01-07");
+insert into diaries values(544, "2013-01-08");
+insert into diaries values(545, "2013-01-09");
+insert into diaries values(546, "2013-01-10");
+insert into diaries values(547, "2013-01-11");
+insert into diaries values(548, "2013-01-12");
+insert into diaries values(549, "2013-01-13");
+insert into diaries values(550, "2013-01-14");
+insert into diaries values(551, "2013-01-15");
+insert into diaries values(552, "2013-01-16");
+insert into diaries values(553, "2013-01-17");
+insert into diaries values(554, "2013-01-18");
+insert into diaries values(555, "2013-01-19");
+insert into diaries values(556, "2013-01-20");
+insert into diaries values(557, "2013-01-21");
+insert into diaries values(558, "2013-01-22");
+insert into diaries values(559, "2013-01-23");
+insert into diaries values(560, "2013-01-24");
+insert into diaries values(561, "2013-01-25");
+insert into diaries values(562, "2013-01-26");
+insert into diaries values(563, "2013-01-27");
+insert into diaries values(564, "2013-01-28");
+insert into diaries values(565, "2013-01-29");
+insert into diaries values(566, "2013-01-30");
+insert into diaries values(567, "2013-01-31");
+insert into diaries values(568, "2013-02-01");
+insert into diaries values(569, "2013-02-02");
+insert into diaries values(570, "2013-02-03");
+insert into diaries values(571, "2013-02-04");
+insert into diaries values(572, "2013-02-05");
+insert into diaries values(573, "2013-02-06");
+insert into diaries values(574, "2013-02-07");
+insert into diaries values(575, "2013-02-08");
+insert into diaries values(576, "2013-02-09");
+insert into diaries values(577, "2013-02-10");
+insert into diaries values(578, "2013-02-11");
+insert into diaries values(579, "2013-02-12");
+insert into diaries values(580, "2013-02-13");
+insert into diaries values(581, "2013-02-14");
+insert into diaries values(582, "2013-02-15");
+insert into diaries values(583, "2013-02-16");
+insert into diaries values(584, "2013-02-17");
+insert into diaries values(585, "2013-02-18");
+insert into diaries values(586, "2013-02-19");
+insert into diaries values(587, "2013-02-20");
+insert into diaries values(588, "2013-02-21");
+insert into diaries values(589, "2013-02-22");
+insert into diaries values(590, "2013-02-23");
+insert into diaries values(591, "2013-02-24");
+insert into diaries values(592, "2013-02-25");
+insert into diaries values(593, "2013-02-26");
+insert into diaries values(594, "2013-02-27");
+insert into diaries values(595, "2013-02-28");
+insert into diaries values(596, "2013-03-01");
+insert into diaries values(597, "2013-03-02");
+insert into diaries values(598, "2013-03-03");
+insert into diaries values(599, "2013-03-04");
+insert into diaries values(600, "2013-03-05");
+insert into diaries values(601, "2013-03-06");
+insert into diaries values(602, "2013-03-07");
+insert into diaries values(603, "2013-03-08");
+insert into diaries values(604, "2013-03-09");
+insert into diaries values(605, "2013-03-10");
+insert into diaries values(606, "2013-03-11");
+insert into diaries values(607, "2013-03-12");
+insert into diaries values(608, "2013-03-13");
+insert into diaries values(609, "2013-03-14");
+insert into diaries values(610, "2013-03-15");
+insert into diaries values(611, "2013-03-16");
+insert into diaries values(612, "2013-03-17");
+insert into diaries values(613, "2013-03-18");
+insert into diaries values(614, "2013-03-19");
+insert into diaries values(615, "2013-03-20");
+insert into diaries values(616, "2013-03-21");
+insert into diaries values(617, "2013-03-22");
+insert into diaries values(618, "2013-03-23");
+insert into diaries values(619, "2013-03-24");
+insert into diaries values(620, "2013-03-25");
+insert into diaries values(621, "2013-03-26");
+insert into diaries values(622, "2013-03-27");
+insert into diaries values(623, "2013-03-28");
+insert into diaries values(624, "2013-03-29");
+insert into diaries values(625, "2013-03-30");
+insert into diaries values(626, "2013-03-31");
+insert into diaries values(627, "2013-04-01");
+insert into diaries values(628, "2013-04-02");
+insert into diaries values(629, "2013-04-03");
+insert into diaries values(630, "2013-04-04");
+insert into diaries values(631, "2013-04-05");
+insert into diaries values(632, "2013-04-06");
+insert into diaries values(633, "2013-04-07");
+insert into diaries values(634, "2013-04-08");
+insert into diaries values(635, "2013-04-09");
+insert into diaries values(636, "2013-04-10");
+insert into diaries values(637, "2013-04-11");
+insert into diaries values(638, "2013-04-12");
+insert into diaries values(639, "2013-04-13");
+insert into diaries values(640, "2013-04-14");
+insert into diaries values(641, "2013-04-15");
+insert into diaries values(642, "2013-04-16");
+insert into diaries values(643, "2013-04-17");
+insert into diaries values(644, "2013-04-18");
+insert into diaries values(645, "2013-04-19");
+insert into diaries values(646, "2013-04-20");
+insert into diaries values(647, "2013-04-21");
+insert into diaries values(648, "2013-04-22");
+insert into diaries values(649, "2013-04-23");
+insert into diaries values(650, "2013-04-24");
+insert into diaries values(651, "2013-04-25");
+insert into diaries values(652, "2013-04-26");
+insert into diaries values(653, "2013-04-27");
+insert into diaries values(654, "2013-04-28");
+insert into diaries values(655, "2013-04-29");
+insert into diaries values(656, "2013-04-30");
+insert into diaries values(657, "2013-05-01");
+insert into diaries values(658, "2013-05-02");
+insert into diaries values(659, "2013-05-03");
+insert into diaries values(660, "2013-05-04");
+insert into diaries values(661, "2013-05-05");
+insert into diaries values(662, "2013-05-06");
+insert into diaries values(663, "2013-05-07");
+insert into diaries values(664, "2013-05-08");
+insert into diaries values(665, "2013-05-09");
+insert into diaries values(666, "2013-05-10");
+insert into diaries values(667, "2013-05-11");
+insert into diaries values(668, "2013-05-12");
+insert into diaries values(669, "2013-05-13");
+insert into diaries values(670, "2013-05-14");
+insert into diaries values(671, "2013-05-15");
+insert into diaries values(672, "2013-05-16");
+insert into diaries values(673, "2013-05-17");
+insert into diaries values(674, "2013-05-18");
+insert into diaries values(675, "2013-05-19");
+insert into diaries values(676, "2013-05-20");
+insert into diaries values(677, "2013-05-21");
+insert into diaries values(678, "2013-05-22");
+insert into diaries values(679, "2013-05-23");
+insert into diaries values(680, "2013-05-24");
+insert into diaries values(681, "2013-05-25");
+insert into diaries values(682, "2013-05-26");
+insert into diaries values(683, "2013-05-27");
+insert into diaries values(684, "2013-05-28");
+insert into diaries values(685, "2013-05-29");
+insert into diaries values(686, "2013-05-30");
+insert into diaries values(687, "2013-05-31");
+insert into diaries values(688, "2013-06-01");
+insert into diaries values(689, "2013-06-02");
+insert into diaries values(690, "2013-06-03");
+insert into diaries values(691, "2013-06-04");
+insert into diaries values(692, "2013-06-05");
+insert into diaries values(693, "2013-06-06");
+insert into diaries values(694, "2013-06-07");
+insert into diaries values(695, "2013-06-08");
+insert into diaries values(696, "2013-06-09");
+insert into diaries values(697, "2013-06-10");
+insert into diaries values(698, "2013-06-11");
+insert into diaries values(699, "2013-06-12");
+insert into diaries values(700, "2013-06-13");
+insert into diaries values(701, "2013-06-14");
+insert into diaries values(702, "2013-06-15");
+insert into diaries values(703, "2013-06-16");
+insert into diaries values(704, "2013-06-17");
+insert into diaries values(705, "2013-06-18");
+insert into diaries values(706, "2013-06-19");
+insert into diaries values(707, "2013-06-20");
+insert into diaries values(708, "2013-06-21");
+insert into diaries values(709, "2013-06-22");
+insert into diaries values(710, "2013-06-23");
+insert into diaries values(711, "2013-06-24");
+insert into diaries values(712, "2013-06-25");
+insert into diaries values(713, "2013-06-26");
+insert into diaries values(714, "2013-06-27");
+insert into diaries values(715, "2013-06-28");
+insert into diaries values(716, "2013-06-29");
+insert into diaries values(717, "2013-06-30");
+insert into diaries values(718, "2013-07-01");
+insert into diaries values(719, "2013-07-02");
+insert into diaries values(720, "2013-07-03");
+insert into diaries values(721, "2013-07-04");
+insert into diaries values(722, "2013-07-05");
+insert into diaries values(723, "2013-07-06");
+insert into diaries values(724, "2013-07-07");
+insert into diaries values(725, "2013-07-08");
+insert into diaries values(726, "2013-07-09");
+insert into diaries values(727, "2013-07-10");
+insert into diaries values(728, "2013-07-11");
+insert into diaries values(729, "2013-07-12");
+insert into diaries values(730, "2013-07-13");
+insert into diaries values(731, "2013-07-14");
+insert into diaries values(732, "2013-07-15");
+insert into diaries values(733, "2013-07-16");
+insert into diaries values(734, "2013-07-17");
+insert into diaries values(735, "2013-07-18");
+insert into diaries values(736, "2013-07-19");
+insert into diaries values(737, "2013-07-20");
+insert into diaries values(738, "2013-07-21");
+insert into diaries values(739, "2013-07-22");
+insert into diaries values(740, "2013-07-23");
+insert into diaries values(741, "2013-07-24");
+insert into diaries values(742, "2013-07-25");
+insert into diaries values(743, "2013-07-26");
+insert into diaries values(744, "2013-07-27");
+insert into diaries values(745, "2013-07-28");
+insert into diaries values(746, "2013-07-29");
+insert into diaries values(747, "2013-07-30");
+insert into diaries values(748, "2013-07-31");
+insert into diaries values(749, "2013-08-01");
+insert into diaries values(750, "2013-08-02");
+insert into diaries values(751, "2013-08-03");
+insert into diaries values(752, "2013-08-04");
+insert into diaries values(753, "2013-08-05");
+insert into diaries values(754, "2013-08-06");
+insert into diaries values(755, "2013-08-07");
+insert into diaries values(756, "2013-08-08");
+insert into diaries values(757, "2013-08-09");
+insert into diaries values(758, "2013-08-10");
+insert into diaries values(759, "2013-08-11");
+insert into diaries values(760, "2013-08-12");
+insert into diaries values(761, "2013-08-13");
+insert into diaries values(762, "2013-08-14");
+insert into diaries values(763, "2013-08-15");
+insert into diaries values(764, "2013-08-16");
+insert into diaries values(765, "2013-08-17");
+insert into diaries values(766, "2013-08-18");
+insert into diaries values(767, "2013-08-19");
+insert into diaries values(768, "2013-08-20");
+insert into diaries values(769, "2013-08-21");
+insert into diaries values(770, "2013-08-22");
+insert into diaries values(771, "2013-08-23");
+insert into diaries values(772, "2013-08-24");
+insert into diaries values(773, "2013-08-25");
+insert into diaries values(774, "2013-08-26");
+insert into diaries values(775, "2013-08-27");
+insert into diaries values(776, "2013-08-28");
+insert into diaries values(777, "2013-08-29");
+insert into diaries values(778, "2013-08-30");
+insert into diaries values(779, "2013-08-31");
+insert into diaries values(780, "2013-09-01");
+insert into diaries values(781, "2013-09-02");
+insert into diaries values(782, "2013-09-03");
+insert into diaries values(783, "2013-09-04");
+insert into diaries values(784, "2013-09-05");
+insert into diaries values(785, "2013-09-06");
+insert into diaries values(786, "2013-09-07");
+insert into diaries values(787, "2013-09-08");
+insert into diaries values(788, "2013-09-09");
+insert into diaries values(789, "2013-09-10");
+insert into diaries values(790, "2013-09-11");
+insert into diaries values(791, "2013-09-12");
+insert into diaries values(792, "2013-09-13");
+insert into diaries values(793, "2013-09-14");
+insert into diaries values(794, "2013-09-15");
+insert into diaries values(795, "2013-09-16");
+insert into diaries values(796, "2013-09-17");
+insert into diaries values(797, "2013-09-18");
+insert into diaries values(798, "2013-09-19");
+insert into diaries values(799, "2013-09-20");
+insert into diaries values(800, "2013-09-21");
+insert into diaries values(801, "2013-09-22");
+insert into diaries values(802, "2013-09-23");
+insert into diaries values(803, "2013-09-24");
+insert into diaries values(804, "2013-09-25");
+insert into diaries values(805, "2013-09-26");
+insert into diaries values(806, "2013-09-27");
+insert into diaries values(807, "2013-09-28");
+insert into diaries values(808, "2013-09-29");
+insert into diaries values(809, "2013-09-30");
+insert into diaries values(810, "2013-10-01");
+insert into diaries values(811, "2013-10-02");
+insert into diaries values(812, "2013-10-03");
+insert into diaries values(813, "2013-10-04");
+insert into diaries values(814, "2013-10-05");
+insert into diaries values(815, "2013-10-06");
+insert into diaries values(816, "2013-10-07");
+insert into diaries values(817, "2013-10-08");
+insert into diaries values(818, "2013-10-09");
+insert into diaries values(819, "2013-10-10");
+insert into diaries values(820, "2013-10-11");
+insert into diaries values(821, "2013-10-12");
+insert into diaries values(822, "2013-10-13");
+insert into diaries values(823, "2013-10-14");
+insert into diaries values(824, "2013-10-15");
+insert into diaries values(825, "2013-10-16");
+insert into diaries values(826, "2013-10-17");
+insert into diaries values(827, "2013-10-18");
+insert into diaries values(828, "2013-10-19");
+insert into diaries values(829, "2013-10-20");
+insert into diaries values(830, "2013-10-21");
+insert into diaries values(831, "2013-10-22");
+insert into diaries values(832, "2013-10-23");
+insert into diaries values(833, "2013-10-24");
+insert into diaries values(834, "2013-10-25");
+insert into diaries values(835, "2013-10-26");
+insert into diaries values(836, "2013-10-27");
+insert into diaries values(837, "2013-10-28");
+insert into diaries values(838, "2013-10-29");
+insert into diaries values(839, "2013-10-30");
+insert into diaries values(840, "2013-10-31");
+insert into diaries values(841, "2013-11-01");
+insert into diaries values(842, "2013-11-02");
+insert into diaries values(843, "2013-11-03");
+insert into diaries values(844, "2013-11-04");
+insert into diaries values(845, "2013-11-05");
+insert into diaries values(846, "2013-11-06");
+insert into diaries values(847, "2013-11-07");
+insert into diaries values(848, "2013-11-08");
+insert into diaries values(849, "2013-11-09");
+insert into diaries values(850, "2013-11-10");
+insert into diaries values(851, "2013-11-11");
+insert into diaries values(852, "2013-11-12");
+insert into diaries values(853, "2013-11-13");
+insert into diaries values(854, "2013-11-14");
+insert into diaries values(855, "2013-11-15");
+insert into diaries values(856, "2013-11-16");
+insert into diaries values(857, "2013-11-17");
+insert into diaries values(858, "2013-11-18");
+insert into diaries values(859, "2013-11-19");
+insert into diaries values(860, "2013-11-20");
+insert into diaries values(861, "2013-11-21");
+insert into diaries values(862, "2013-11-22");
+insert into diaries values(863, "2013-11-23");
+insert into diaries values(864, "2013-11-24");
+insert into diaries values(865, "2013-11-25");
+insert into diaries values(866, "2013-11-26");
+insert into diaries values(867, "2013-11-27");
+insert into diaries values(868, "2013-11-28");
+insert into diaries values(869, "2013-11-29");
+insert into diaries values(870, "2013-11-30");
+insert into diaries values(871, "2013-12-01");
+insert into diaries values(872, "2013-12-02");
+insert into diaries values(873, "2013-12-03");
+insert into diaries values(874, "2013-12-04");
+insert into diaries values(875, "2013-12-05");
+insert into diaries values(876, "2013-12-06");
+insert into diaries values(877, "2013-12-07");
+insert into diaries values(878, "2013-12-08");
+insert into diaries values(879, "2013-12-09");
+insert into diaries values(880, "2013-12-10");
+insert into diaries values(881, "2013-12-11");
+insert into diaries values(882, "2013-12-12");
+insert into diaries values(883, "2013-12-13");
+insert into diaries values(884, "2013-12-14");
+insert into diaries values(885, "2013-12-15");
+insert into diaries values(886, "2013-12-16");
+insert into diaries values(887, "2013-12-17");
+insert into diaries values(888, "2013-12-18");
+insert into diaries values(889, "2013-12-19");
+insert into diaries values(890, "2013-12-20");
+insert into diaries values(891, "2013-12-21");
+insert into diaries values(892, "2013-12-22");
+insert into diaries values(893, "2013-12-23");
+insert into diaries values(894, "2013-12-24");
+insert into diaries values(895, "2013-12-25");
+insert into diaries values(896, "2013-12-26");
+insert into diaries values(897, "2013-12-27");
+insert into diaries values(898, "2013-12-28");
+insert into diaries values(899, "2013-12-29");
+insert into diaries values(900, "2013-12-30");
+insert into diaries values(901, "2013-12-31");
+insert into diaries values(902, "2014-01-01");
+insert into diaries values(903, "2014-01-02");
+insert into diaries values(904, "2014-01-03");
+insert into diaries values(905, "2014-01-04");
+insert into diaries values(906, "2014-01-05");
+insert into diaries values(907, "2014-01-06");
+insert into diaries values(908, "2014-01-07");
+insert into diaries values(909, "2014-01-08");
+insert into diaries values(910, "2014-01-09");
+insert into diaries values(911, "2014-01-10");
+insert into diaries values(912, "2014-01-11");
+insert into diaries values(913, "2014-01-12");
+insert into diaries values(914, "2014-01-13");
+insert into diaries values(915, "2014-01-14");
+insert into diaries values(916, "2014-01-15");
+insert into diaries values(917, "2014-01-16");
+insert into diaries values(918, "2014-01-17");
+insert into diaries values(919, "2014-01-18");
+insert into diaries values(920, "2014-01-19");
+insert into diaries values(921, "2014-01-20");
+insert into diaries values(922, "2014-01-21");
+insert into diaries values(923, "2014-01-22");
+insert into diaries values(924, "2014-01-23");
+insert into diaries values(925, "2014-01-24");
+insert into diaries values(926, "2014-01-25");
+insert into diaries values(927, "2014-01-26");
+insert into diaries values(928, "2014-01-27");
+insert into diaries values(929, "2014-01-28");
+insert into diaries values(930, "2014-01-29");
+insert into diaries values(931, "2014-01-30");
+insert into diaries values(932, "2014-01-31");
+insert into diaries values(933, "2014-02-01");
+insert into diaries values(934, "2014-02-02");
+insert into diaries values(935, "2014-02-03");
+insert into diaries values(936, "2014-02-04");
+insert into diaries values(937, "2014-02-05");
+insert into diaries values(938, "2014-02-06");
+insert into diaries values(939, "2014-02-07");
+insert into diaries values(940, "2014-02-08");
+insert into diaries values(941, "2014-02-09");
+insert into diaries values(942, "2014-02-10");
+insert into diaries values(943, "2014-02-11");
+insert into diaries values(944, "2014-02-12");
+insert into diaries values(945, "2014-02-13");
+insert into diaries values(946, "2014-02-14");
+insert into diaries values(947, "2014-02-15");
+insert into diaries values(948, "2014-02-16");
+insert into diaries values(949, "2014-02-17");
+insert into diaries values(950, "2014-02-18");
+insert into diaries values(951, "2014-02-19");
+insert into diaries values(952, "2014-02-20");
+insert into diaries values(953, "2014-02-21");
+insert into diaries values(954, "2014-02-22");
+insert into diaries values(955, "2014-02-23");
+insert into diaries values(956, "2014-02-24");
+insert into diaries values(957, "2014-02-25");
+insert into diaries values(958, "2014-02-26");
+insert into diaries values(959, "2014-02-27");
+insert into diaries values(960, "2014-02-28");
+insert into diaries values(961, "2014-03-01");
+insert into diaries values(962, "2014-03-02");
+insert into diaries values(963, "2014-03-03");
+insert into diaries values(964, "2014-03-04");
+insert into diaries values(965, "2014-03-05");
+insert into diaries values(966, "2014-03-06");
+insert into diaries values(967, "2014-03-07");
+insert into diaries values(968, "2014-03-08");
+insert into diaries values(969, "2014-03-09");
+insert into diaries values(970, "2014-03-10");
+insert into diaries values(971, "2014-03-11");
+insert into diaries values(972, "2014-03-12");
+insert into diaries values(973, "2014-03-13");
+insert into diaries values(974, "2014-03-14");
+insert into diaries values(975, "2014-03-15");
+insert into diaries values(976, "2014-03-16");
+insert into diaries values(977, "2014-03-17");
+insert into diaries values(978, "2014-03-18");
+insert into diaries values(979, "2014-03-19");
+insert into diaries values(980, "2014-03-20");
+insert into diaries values(981, "2014-03-21");
+insert into diaries values(982, "2014-03-22");
+insert into diaries values(983, "2014-03-23");
+insert into diaries values(984, "2014-03-24");
+insert into diaries values(985, "2014-03-25");
+insert into diaries values(986, "2014-03-26");
+insert into diaries values(987, "2014-03-27");
+insert into diaries values(988, "2014-03-28");
+insert into diaries values(989, "2014-03-29");
+insert into diaries values(990, "2014-03-30");
+insert into diaries values(991, "2014-03-31");
+insert into diaries values(992, "2014-04-01");
+insert into diaries values(993, "2014-04-02");
+insert into diaries values(994, "2014-04-03");
+insert into diaries values(995, "2014-04-04");
+insert into diaries values(996, "2014-04-05");
+insert into diaries values(997, "2014-04-06");
+insert into diaries values(998, "2014-04-07");
+insert into diaries values(999, "2014-04-08");
+insert into diaries values(1000, "2014-04-09");
+insert into diaries values(1001, "2014-04-10");
+insert into diaries values(1002, "2014-04-11");
+insert into diaries values(1003, "2014-04-12");
+insert into diaries values(1004, "2014-04-13");
+insert into diaries values(1005, "2014-04-14");
+insert into diaries values(1006, "2014-04-15");
+insert into diaries values(1007, "2014-04-16");
+insert into diaries values(1008, "2014-04-17");
+insert into diaries values(1009, "2014-04-18");
+insert into diaries values(1010, "2014-04-19");
+insert into diaries values(1011, "2014-04-20");
+insert into diaries values(1012, "2014-04-21");
+insert into diaries values(1013, "2014-04-22");
+insert into diaries values(1014, "2014-04-23");
+insert into diaries values(1015, "2014-04-24");
+insert into diaries values(1016, "2014-04-25");
+insert into diaries values(1017, "2014-04-26");
+insert into diaries values(1018, "2014-04-27");
+insert into diaries values(1019, "2014-04-28");
+insert into diaries values(1020, "2014-04-29");
+insert into diaries values(1021, "2014-04-30");
+insert into diaries values(1022, "2014-05-01");
+insert into diaries values(1023, "2014-05-02");
+insert into diaries values(1024, "2014-05-03");
+insert into diaries values(1025, "2014-05-04");
+insert into diaries values(1026, "2014-05-05");
+insert into diaries values(1027, "2014-05-06");
+insert into diaries values(1028, "2014-05-07");
+insert into diaries values(1029, "2014-05-08");
+insert into diaries values(1030, "2014-05-09");
+insert into diaries values(1031, "2014-05-10");
+insert into diaries values(1032, "2014-05-11");
+insert into diaries values(1033, "2014-05-12");
+insert into diaries values(1034, "2014-05-13");
+insert into diaries values(1035, "2014-05-14");
+insert into diaries values(1036, "2014-05-15");
+insert into diaries values(1037, "2014-05-16");
+insert into diaries values(1038, "2014-05-17");
+insert into diaries values(1039, "2014-05-18");
+insert into diaries values(1040, "2014-05-19");
+insert into diaries values(1041, "2014-05-20");
+insert into diaries values(1042, "2014-05-21");
+insert into diaries values(1043, "2014-05-22");
+insert into diaries values(1044, "2014-05-23");
+insert into diaries values(1045, "2014-05-24");
+insert into diaries values(1046, "2014-05-25");
+insert into diaries values(1047, "2014-05-26");
+insert into diaries values(1048, "2014-05-27");
+insert into diaries values(1049, "2014-05-28");
+insert into diaries values(1050, "2014-05-29");
+insert into diaries values(1051, "2014-05-30");
+insert into diaries values(1052, "2014-05-31");
+insert into diaries values(1053, "2014-06-01");
+insert into diaries values(1054, "2014-06-02");
+insert into diaries values(1055, "2014-06-03");
+insert into diaries values(1056, "2014-06-04");
+insert into diaries values(1057, "2014-06-05");
+insert into diaries values(1058, "2014-06-06");
+insert into diaries values(1059, "2014-06-07");
+insert into diaries values(1060, "2014-06-08");
+insert into diaries values(1061, "2014-06-09");
+insert into diaries values(1062, "2014-06-10");
+insert into diaries values(1063, "2014-06-11");
+insert into diaries values(1064, "2014-06-12");
+insert into diaries values(1065, "2014-06-13");
+insert into diaries values(1066, "2014-06-14");
+insert into diaries values(1067, "2014-06-15");
+insert into diaries values(1068, "2014-06-16");
+insert into diaries values(1069, "2014-06-17");
+insert into diaries values(1070, "2014-06-18");
+insert into diaries values(1071, "2014-06-19");
+insert into diaries values(1072, "2014-06-20");
+insert into diaries values(1073, "2014-06-21");
+insert into diaries values(1074, "2014-06-22");
+insert into diaries values(1075, "2014-06-23");
+insert into diaries values(1076, "2014-06-24");
+insert into diaries values(1077, "2014-06-25");
+insert into diaries values(1078, "2014-06-26");
+insert into diaries values(1079, "2014-06-27");
+insert into diaries values(1080, "2014-06-28");
+insert into diaries values(1081, "2014-06-29");
+insert into diaries values(1082, "2014-06-30");
+insert into diaries values(1083, "2014-07-01");
+insert into diaries values(1084, "2014-07-02");
+insert into diaries values(1085, "2014-07-03");
+insert into diaries values(1086, "2014-07-04");
+insert into diaries values(1087, "2014-07-05");
+insert into diaries values(1088, "2014-07-06");
+insert into diaries values(1089, "2014-07-07");
+insert into diaries values(1090, "2014-07-08");
+insert into diaries values(1091, "2014-07-09");
+insert into diaries values(1092, "2014-07-10");
+insert into diaries values(1093, "2014-07-11");
+insert into diaries values(1094, "2014-07-12");
+insert into diaries values(1095, "2014-07-13");
+insert into diaries values(1096, "2014-07-14");
+insert into diaries values(1097, "2014-07-15");
+insert into diaries values(1098, "2014-07-16");
+insert into diaries values(1099, "2014-07-17");
+insert into diaries values(1100, "2014-07-18");
+insert into diaries values(1101, "2014-07-19");
+insert into diaries values(1102, "2014-07-20");
+insert into diaries values(1103, "2014-07-21");
+insert into diaries values(1104, "2014-07-22");
+insert into diaries values(1105, "2014-07-23");
+insert into diaries values(1106, "2014-07-24");
+insert into diaries values(1107, "2014-07-25");
+insert into diaries values(1108, "2014-07-26");
+insert into diaries values(1109, "2014-07-27");
+insert into diaries values(1110, "2014-07-28");
+insert into diaries values(1111, "2014-07-29");
+insert into diaries values(1112, "2014-07-30");
+insert into diaries values(1113, "2014-07-31");
+insert into diaries values(1114, "2014-08-01");
+insert into diaries values(1115, "2014-08-02");
+insert into diaries values(1116, "2014-08-03");
+insert into diaries values(1117, "2014-08-04");
+insert into diaries values(1118, "2014-08-05");
+insert into diaries values(1119, "2014-08-06");
+insert into diaries values(1120, "2014-08-07");
+insert into diaries values(1121, "2014-08-08");
+insert into diaries values(1122, "2014-08-09");
+insert into diaries values(1123, "2014-08-10");
+insert into diaries values(1124, "2014-08-11");
+insert into diaries values(1125, "2014-08-12");
+insert into diaries values(1126, "2014-08-13");
+insert into diaries values(1127, "2014-08-14");
+insert into diaries values(1128, "2014-08-15");
+insert into diaries values(1129, "2014-08-16");
+insert into diaries values(1130, "2014-08-17");
+insert into diaries values(1131, "2014-08-18");
+insert into diaries values(1132, "2014-08-19");
+insert into diaries values(1133, "2014-08-20");
+insert into diaries values(1134, "2014-08-21");
+insert into diaries values(1135, "2014-08-22");
+insert into diaries values(1136, "2014-08-23");
+insert into diaries values(1137, "2014-08-24");
+insert into diaries values(1138, "2014-08-25");
+insert into diaries values(1139, "2014-08-26");
+insert into diaries values(1140, "2014-08-27");
+insert into diaries values(1141, "2014-08-28");
+insert into diaries values(1142, "2014-08-29");
+insert into diaries values(1143, "2014-08-30");
+insert into diaries values(1144, "2014-08-31");
+insert into diaries values(1145, "2014-09-01");
+insert into diaries values(1146, "2014-09-02");
+insert into diaries values(1147, "2014-09-03");
+insert into diaries values(1148, "2014-09-04");
+insert into diaries values(1149, "2014-09-05");
+insert into diaries values(1150, "2014-09-06");
+insert into diaries values(1151, "2014-09-07");
+insert into diaries values(1152, "2014-09-08");
+insert into diaries values(1153, "2014-09-09");
+insert into diaries values(1154, "2014-09-10");
+insert into diaries values(1155, "2014-09-11");
+insert into diaries values(1156, "2014-09-12");
+insert into diaries values(1157, "2014-09-13");
+insert into diaries values(1158, "2014-09-14");
+insert into diaries values(1159, "2014-09-15");
+insert into diaries values(1160, "2014-09-16");
+insert into diaries values(1161, "2014-09-17");
+insert into diaries values(1162, "2014-09-18");
+insert into diaries values(1163, "2014-09-19");
+insert into diaries values(1164, "2014-09-20");
+insert into diaries values(1165, "2014-09-21");
+insert into diaries values(1166, "2014-09-22");
+insert into diaries values(1167, "2014-09-23");
+insert into diaries values(1168, "2014-09-24");
+insert into diaries values(1169, "2014-09-25");
+insert into diaries values(1170, "2014-09-26");
+insert into diaries values(1171, "2014-09-27");
+insert into diaries values(1172, "2014-09-28");
+insert into diaries values(1173, "2014-09-29");
+insert into diaries values(1174, "2014-09-30");
+insert into diaries values(1175, "2014-10-01");
+insert into diaries values(1176, "2014-10-02");
+insert into diaries values(1177, "2014-10-03");
+insert into diaries values(1178, "2014-10-04");
+insert into diaries values(1179, "2014-10-05");
+insert into diaries values(1180, "2014-10-06");
+insert into diaries values(1181, "2014-10-07");
+insert into diaries values(1182, "2014-10-08");
+insert into diaries values(1183, "2014-10-09");
+insert into diaries values(1184, "2014-10-10");
+insert into diaries values(1185, "2014-10-11");
+insert into diaries values(1186, "2014-10-12");
+insert into diaries values(1187, "2014-10-13");
+insert into diaries values(1188, "2014-10-14");
+insert into diaries values(1189, "2014-10-15");
+insert into diaries values(1190, "2014-10-16");
+insert into diaries values(1191, "2014-10-17");
+insert into diaries values(1192, "2014-10-18");
+insert into diaries values(1193, "2014-10-19");
+insert into diaries values(1194, "2014-10-20");
+insert into diaries values(1195, "2014-10-21");
+insert into diaries values(1196, "2014-10-22");
+insert into diaries values(1197, "2014-10-23");
+insert into diaries values(1198, "2014-10-24");
+insert into diaries values(1199, "2014-10-25");
+insert into diaries values(1200, "2014-10-26");
+insert into diaries values(1201, "2014-10-27");
+insert into diaries values(1202, "2014-10-28");
+insert into diaries values(1203, "2014-10-29");
+insert into diaries values(1204, "2014-10-30");
+insert into diaries values(1205, "2014-10-31");
+insert into diaries values(1206, "2014-11-01");
+insert into diaries values(1207, "2014-11-02");
+insert into diaries values(1208, "2014-11-03");
+insert into diaries values(1209, "2014-11-04");
+insert into diaries values(1210, "2014-11-05");
+insert into diaries values(1211, "2014-11-06");
+insert into diaries values(1212, "2014-11-07");
+insert into diaries values(1213, "2014-11-08");
+insert into diaries values(1214, "2014-11-09");
+insert into diaries values(1215, "2014-11-10");
+insert into diaries values(1216, "2014-11-11");
+insert into diaries values(1217, "2014-11-12");
+insert into diaries values(1218, "2014-11-13");
+insert into diaries values(1219, "2014-11-14");
+insert into diaries values(1220, "2014-11-15");
+insert into diaries values(1221, "2014-11-16");
+insert into diaries values(1222, "2014-11-17");
+insert into diaries values(1223, "2014-11-18");
+insert into diaries values(1224, "2014-11-19");
+insert into diaries values(1225, "2014-11-20");
+insert into diaries values(1226, "2014-11-21");
+insert into diaries values(1227, "2014-11-22");
+insert into diaries values(1228, "2014-11-23");
+insert into diaries values(1229, "2014-11-24");
+insert into diaries values(1230, "2014-11-25");
+insert into diaries values(1231, "2014-11-26");
+insert into diaries values(1232, "2014-11-27");
+insert into diaries values(1233, "2014-11-28");
+insert into diaries values(1234, "2014-11-29");
+insert into diaries values(1235, "2014-11-30");
+insert into diaries values(1236, "2014-12-01");
+insert into diaries values(1237, "2014-12-02");
+insert into diaries values(1238, "2014-12-03");
+insert into diaries values(1239, "2014-12-04");
+insert into diaries values(1240, "2014-12-05");
+insert into diaries values(1241, "2014-12-06");
+insert into diaries values(1242, "2014-12-07");
+insert into diaries values(1243, "2014-12-08");
+insert into diaries values(1244, "2014-12-09");
+insert into diaries values(1245, "2014-12-10");
+insert into diaries values(1246, "2014-12-11");
+insert into diaries values(1247, "2014-12-12");
+insert into diaries values(1248, "2014-12-13");
+insert into diaries values(1249, "2014-12-14");
+insert into diaries values(1250, "2014-12-15");
+insert into diaries values(1251, "2014-12-16");
+insert into diaries values(1252, "2014-12-17");
+insert into diaries values(1253, "2014-12-18");
+insert into diaries values(1254, "2014-12-19");
+insert into diaries values(1255, "2014-12-20");
+insert into diaries values(1256, "2014-12-21");
+insert into diaries values(1257, "2014-12-22");
+insert into diaries values(1258, "2014-12-23");
+insert into diaries values(1259, "2014-12-24");
+insert into diaries values(1260, "2014-12-25");
+insert into diaries values(1261, "2014-12-26");
+insert into diaries values(1262, "2014-12-27");
+insert into diaries values(1263, "2014-12-28");
+insert into diaries values(1264, "2014-12-29");
+insert into diaries values(1265, "2014-12-30");
+insert into diaries values(1266, "2014-12-31");
+insert into diaries values(1267, "2015-01-01");
+insert into diaries values(1268, "2015-01-02");
+insert into diaries values(1269, "2015-01-03");
+insert into diaries values(1270, "2015-01-04");
+insert into diaries values(1271, "2015-01-05");
+insert into diaries values(1272, "2015-01-06");
+insert into diaries values(1273, "2015-01-07");
+insert into diaries values(1274, "2015-01-08");
+insert into diaries values(1275, "2015-01-09");
+insert into diaries values(1276, "2015-01-10");
+insert into diaries values(1277, "2015-01-11");
+insert into diaries values(1278, "2015-01-12");
+insert into diaries values(1279, "2015-01-13");
+insert into diaries values(1280, "2015-01-14");
+insert into diaries values(1281, "2015-01-15");
+insert into diaries values(1282, "2015-01-16");
+insert into diaries values(1283, "2015-01-17");
+insert into diaries values(1284, "2015-01-18");
+insert into diaries values(1285, "2015-01-19");
+insert into diaries values(1286, "2015-01-20");
+insert into diaries values(1287, "2015-01-21");
+insert into diaries values(1288, "2015-01-22");
+insert into diaries values(1289, "2015-01-23");
+insert into diaries values(1290, "2015-01-24");
+insert into diaries values(1291, "2015-01-25");
+insert into diaries values(1292, "2015-01-26");
+insert into diaries values(1293, "2015-01-27");
+insert into diaries values(1294, "2015-01-28");
+insert into diaries values(1295, "2015-01-29");
+insert into diaries values(1296, "2015-01-30");
+insert into diaries values(1297, "2015-01-31");
+insert into diaries values(1298, "2015-02-01");
+insert into diaries values(1299, "2015-02-02");
+insert into diaries values(1300, "2015-02-03");
+insert into diaries values(1301, "2015-02-04");
+insert into diaries values(1302, "2015-02-05");
+insert into diaries values(1303, "2015-02-06");
+insert into diaries values(1304, "2015-02-07");
+insert into diaries values(1305, "2015-02-08");
+insert into diaries values(1306, "2015-02-09");
+insert into diaries values(1307, "2015-02-10");
+insert into diaries values(1308, "2015-02-11");
+insert into diaries values(1309, "2015-02-12");
+insert into diaries values(1310, "2015-02-13");
+insert into diaries values(1311, "2015-02-14");
+insert into diaries values(1312, "2015-02-15");
+insert into diaries values(1313, "2015-02-16");
+insert into diaries values(1314, "2015-02-17");
+insert into diaries values(1315, "2015-02-18");
+insert into diaries values(1316, "2015-02-19");
+insert into diaries values(1317, "2015-02-20");
+insert into diaries values(1318, "2015-02-21");
+insert into diaries values(1319, "2015-02-22");
+insert into diaries values(1320, "2015-02-23");
+insert into diaries values(1321, "2015-02-24");
+insert into diaries values(1322, "2015-02-25");
+insert into diaries values(1323, "2015-02-26");
+insert into diaries values(1324, "2015-02-27");
+insert into diaries values(1325, "2015-02-28");
+insert into diaries values(1326, "2015-03-01");
+insert into diaries values(1327, "2015-03-02");
+insert into diaries values(1328, "2015-03-03");
+insert into diaries values(1329, "2015-03-04");
+insert into diaries values(1330, "2015-03-05");
+insert into diaries values(1331, "2015-03-06");
+insert into diaries values(1332, "2015-03-07");
+insert into diaries values(1333, "2015-03-08");
+insert into diaries values(1334, "2015-03-09");
+insert into diaries values(1335, "2015-03-10");
+insert into diaries values(1336, "2015-03-11");
+insert into diaries values(1337, "2015-03-12");
+insert into diaries values(1338, "2015-03-13");
+insert into diaries values(1339, "2015-03-14");
+insert into diaries values(1340, "2015-03-15");
+insert into diaries values(1341, "2015-03-16");
+insert into diaries values(1342, "2015-03-17");
+insert into diaries values(1343, "2015-03-18");
+insert into diaries values(1344, "2015-03-19");
+insert into diaries values(1345, "2015-03-20");
+insert into diaries values(1346, "2015-03-21");
+insert into diaries values(1347, "2015-03-22");
+insert into diaries values(1348, "2015-03-23");
+insert into diaries values(1349, "2015-03-24");
+insert into diaries values(1350, "2015-03-25");
+insert into diaries values(1351, "2015-03-26");
+insert into diaries values(1352, "2015-03-27");
+insert into diaries values(1353, "2015-03-28");
+insert into diaries values(1354, "2015-03-29");
+insert into diaries values(1355, "2015-03-30");
+insert into diaries values(1356, "2015-03-31");
+insert into diaries values(1357, "2015-04-01");
+insert into diaries values(1358, "2015-04-02");
+insert into diaries values(1359, "2015-04-03");
+insert into diaries values(1360, "2015-04-04");
+insert into diaries values(1361, "2015-04-05");
+insert into diaries values(1362, "2015-04-06");
+insert into diaries values(1363, "2015-04-07");
+insert into diaries values(1364, "2015-04-08");
+insert into diaries values(1365, "2015-04-09");
+insert into diaries values(1366, "2015-04-10");
+insert into diaries values(1367, "2015-04-11");
+insert into diaries values(1368, "2015-04-12");
+insert into diaries values(1369, "2015-04-13");
+insert into diaries values(1370, "2015-04-14");
+insert into diaries values(1371, "2015-04-15");
+insert into diaries values(1372, "2015-04-16");
+insert into diaries values(1373, "2015-04-17");
+insert into diaries values(1374, "2015-04-18");
+insert into diaries values(1375, "2015-04-19");
+insert into diaries values(1376, "2015-04-20");
+insert into diaries values(1377, "2015-04-21");
+insert into diaries values(1378, "2015-04-22");
+insert into diaries values(1379, "2015-04-23");
+insert into diaries values(1380, "2015-04-24");
+insert into diaries values(1381, "2015-04-25");
+insert into diaries values(1382, "2015-04-26");
+insert into diaries values(1383, "2015-04-27");
+insert into diaries values(1384, "2015-04-28");
+insert into diaries values(1385, "2015-04-29");
+insert into diaries values(1386, "2015-04-30");
+insert into diaries values(1387, "2015-05-01");
+insert into diaries values(1388, "2015-05-02");
+insert into diaries values(1389, "2015-05-03");
+insert into diaries values(1390, "2015-05-04");
+insert into diaries values(1391, "2015-05-05");
+insert into diaries values(1392, "2015-05-06");
+insert into diaries values(1393, "2015-05-07");
+insert into diaries values(1394, "2015-05-08");
+insert into diaries values(1395, "2015-05-09");
+insert into diaries values(1396, "2015-05-10");
+insert into diaries values(1397, "2015-05-11");
+insert into diaries values(1398, "2015-05-12");
+insert into diaries values(1399, "2015-05-13");
+insert into diaries values(1400, "2015-05-14");
+insert into diaries values(1401, "2015-05-15");
+insert into diaries values(1402, "2015-05-16");
+insert into diaries values(1403, "2015-05-17");
+insert into diaries values(1404, "2015-05-18");
+insert into diaries values(1405, "2015-05-19");
+insert into diaries values(1406, "2015-05-20");
+insert into diaries values(1407, "2015-05-21");
+insert into diaries values(1408, "2015-05-22");
+insert into diaries values(1409, "2015-05-23");
+insert into diaries values(1410, "2015-05-24");
+insert into diaries values(1411, "2015-05-25");
+insert into diaries values(1412, "2015-05-26");
+insert into diaries values(1413, "2015-05-27");
+insert into diaries values(1414, "2015-05-28");
+insert into diaries values(1415, "2015-05-29");
+insert into diaries values(1416, "2015-05-30");
+insert into diaries values(1417, "2015-05-31");
+insert into diaries values(1418, "2015-06-01");
+insert into diaries values(1419, "2015-06-02");
+insert into diaries values(1420, "2015-06-03");
+insert into diaries values(1421, "2015-06-04");
+insert into diaries values(1422, "2015-06-05");
+insert into diaries values(1423, "2015-06-06");
+insert into diaries values(1424, "2015-06-07");
+insert into diaries values(1425, "2015-06-08");
+insert into diaries values(1426, "2015-06-09");
+insert into diaries values(1427, "2015-06-10");
+insert into diaries values(1428, "2015-06-11");
+insert into diaries values(1429, "2015-06-12");
+insert into diaries values(1430, "2015-06-13");
+insert into diaries values(1431, "2015-06-14");
+insert into diaries values(1432, "2015-06-15");
+insert into diaries values(1433, "2015-06-16");
+insert into diaries values(1434, "2015-06-17");
+insert into diaries values(1435, "2015-06-18");
+insert into diaries values(1436, "2015-06-19");
+insert into diaries values(1437, "2015-06-20");
+insert into diaries values(1438, "2015-06-21");
+insert into diaries values(1439, "2015-06-22");
+insert into diaries values(1440, "2015-06-23");
+insert into diaries values(1441, "2015-06-24");
+insert into diaries values(1442, "2015-06-25");
+insert into diaries values(1443, "2015-06-26");
+insert into diaries values(1444, "2015-06-27");
+insert into diaries values(1445, "2015-06-28");
+insert into diaries values(1446, "2015-06-29");
+insert into diaries values(1447, "2015-06-30");
+insert into diaries values(1448, "2015-07-01");
+insert into diaries values(1449, "2015-07-02");
+insert into diaries values(1450, "2015-07-03");
+insert into diaries values(1451, "2015-07-04");
+insert into diaries values(1452, "2015-07-05");
+insert into diaries values(1453, "2015-07-06");
+insert into diaries values(1454, "2015-07-07");
+insert into diaries values(1455, "2015-07-08");
+insert into diaries values(1456, "2015-07-09");
+insert into diaries values(1457, "2015-07-10");
+insert into diaries values(1458, "2015-07-11");
+insert into diaries values(1459, "2015-07-12");
+insert into diaries values(1460, "2015-07-13");
+insert into diaries values(1461, "2015-07-14");
+insert into diaries values(1462, "2015-07-15");
+insert into diaries values(1463, "2015-07-16");
+insert into diaries values(1464, "2015-07-17");
+insert into diaries values(1465, "2015-07-18");
+insert into diaries values(1466, "2015-07-19");
+insert into diaries values(1467, "2015-07-20");
+insert into diaries values(1468, "2015-07-21");
+insert into diaries values(1469, "2015-07-22");
+insert into diaries values(1470, "2015-07-23");
+insert into diaries values(1471, "2015-07-24");
+insert into diaries values(1472, "2015-07-25");
+insert into diaries values(1473, "2015-07-26");
+insert into diaries values(1474, "2015-07-27");
+insert into diaries values(1475, "2015-07-28");
+insert into diaries values(1476, "2015-07-29");
+insert into diaries values(1477, "2015-07-30");
+insert into diaries values(1478, "2015-07-31");
+insert into diaries values(1479, "2015-08-01");
+insert into diaries values(1480, "2015-08-02");
+insert into diaries values(1481, "2015-08-03");
+insert into diaries values(1482, "2015-08-04");
+insert into diaries values(1483, "2015-08-05");
+insert into diaries values(1484, "2015-08-06");
+insert into diaries values(1485, "2015-08-07");
+insert into diaries values(1486, "2015-08-08");
+insert into diaries values(1487, "2015-08-09");
+insert into diaries values(1488, "2015-08-10");
+insert into diaries values(1489, "2015-08-11");
+insert into diaries values(1490, "2015-08-12");
+insert into diaries values(1491, "2015-08-13");
+insert into diaries values(1492, "2015-08-14");
+insert into diaries values(1493, "2015-08-15");
+insert into diaries values(1494, "2015-08-16");
+insert into diaries values(1495, "2015-08-17");
+insert into diaries values(1496, "2015-08-18");
+insert into diaries values(1497, "2015-08-19");
+insert into diaries values(1498, "2015-08-20");
+insert into diaries values(1499, "2015-08-21");
+insert into diaries values(1500, "2015-08-22");
+insert into diaries values(1501, "2015-08-23");
+insert into diaries values(1502, "2015-08-24");
+insert into diaries values(1503, "2015-08-25");
+insert into diaries values(1504, "2015-08-26");
+insert into diaries values(1505, "2015-08-27");
+insert into diaries values(1506, "2015-08-28");
+insert into diaries values(1507, "2015-08-29");
+insert into diaries values(1508, "2015-08-30");
+insert into diaries values(1509, "2015-08-31");
+insert into diaries values(1510, "2015-09-01");
+insert into diaries values(1511, "2015-09-02");
+insert into diaries values(1512, "2015-09-03");
+insert into diaries values(1513, "2015-09-04");
+insert into diaries values(1514, "2015-09-05");
+insert into diaries values(1515, "2015-09-06");
+insert into diaries values(1516, "2015-09-07");
+insert into diaries values(1517, "2015-09-08");
+insert into diaries values(1518, "2015-09-09");
+insert into diaries values(1519, "2015-09-10");
+insert into diaries values(1520, "2015-09-11");
+insert into diaries values(1521, "2015-09-12");
+insert into diaries values(1522, "2015-09-13");
+insert into diaries values(1523, "2015-09-14");
+insert into diaries values(1524, "2015-09-15");
+insert into diaries values(1525, "2015-09-16");
+insert into diaries values(1526, "2015-09-17");
+insert into diaries values(1527, "2015-09-18");
+insert into diaries values(1528, "2015-09-19");
+insert into diaries values(1529, "2015-09-20");
+insert into diaries values(1530, "2015-09-21");
+insert into diaries values(1531, "2015-09-22");
+insert into diaries values(1532, "2015-09-23");
+insert into diaries values(1533, "2015-09-24");
+insert into diaries values(1534, "2015-09-25");
+insert into diaries values(1535, "2015-09-26");
+insert into diaries values(1536, "2015-09-27");
+insert into diaries values(1537, "2015-09-28");
+insert into diaries values(1538, "2015-09-29");
+insert into diaries values(1539, "2015-09-30");
+insert into diaries values(1540, "2015-10-01");
+insert into diaries values(1541, "2015-10-02");
+insert into diaries values(1542, "2015-10-03");
+insert into diaries values(1543, "2015-10-04");
+insert into diaries values(1544, "2015-10-05");
+insert into diaries values(1545, "2015-10-06");
+insert into diaries values(1546, "2015-10-07");
+insert into diaries values(1547, "2015-10-08");
+insert into diaries values(1548, "2015-10-09");
+insert into diaries values(1549, "2015-10-10");
+insert into diaries values(1550, "2015-10-11");
+insert into diaries values(1551, "2015-10-12");
+insert into diaries values(1552, "2015-10-13");
+insert into diaries values(1553, "2015-10-14");
+insert into diaries values(1554, "2015-10-15");
+insert into diaries values(1555, "2015-10-16");
+insert into diaries values(1556, "2015-10-17");
+insert into diaries values(1557, "2015-10-18");
+insert into diaries values(1558, "2015-10-19");
+insert into diaries values(1559, "2015-10-20");
+insert into diaries values(1560, "2015-10-21");
+insert into diaries values(1561, "2015-10-22");
+insert into diaries values(1562, "2015-10-23");
+insert into diaries values(1563, "2015-10-24");
+insert into diaries values(1564, "2015-10-25");
+insert into diaries values(1565, "2015-10-26");
+insert into diaries values(1566, "2015-10-27");
+insert into diaries values(1567, "2015-10-28");
+insert into diaries values(1568, "2015-10-29");
+insert into diaries values(1569, "2015-10-30");
+insert into diaries values(1570, "2015-10-31");
+insert into diaries values(1571, "2015-11-01");
+insert into diaries values(1572, "2015-11-02");
+insert into diaries values(1573, "2015-11-03");
+insert into diaries values(1574, "2015-11-04");
+insert into diaries values(1575, "2015-11-05");
+insert into diaries values(1576, "2015-11-06");
+insert into diaries values(1577, "2015-11-07");
+insert into diaries values(1578, "2015-11-08");
+insert into diaries values(1579, "2015-11-09");
+insert into diaries values(1580, "2015-11-10");
+insert into diaries values(1581, "2015-11-11");
+insert into diaries values(1582, "2015-11-12");
+insert into diaries values(1583, "2015-11-13");
+insert into diaries values(1584, "2015-11-14");
+insert into diaries values(1585, "2015-11-15");
+insert into diaries values(1586, "2015-11-16");
+insert into diaries values(1587, "2015-11-17");
+insert into diaries values(1588, "2015-11-18");
+insert into diaries values(1589, "2015-11-19");
+insert into diaries values(1590, "2015-11-20");
+insert into diaries values(1591, "2015-11-21");
+insert into diaries values(1592, "2015-11-22");
+insert into diaries values(1593, "2015-11-23");
+insert into diaries values(1594, "2015-11-24");
+insert into diaries values(1595, "2015-11-25");
+insert into diaries values(1596, "2015-11-26");
+insert into diaries values(1597, "2015-11-27");
+insert into diaries values(1598, "2015-11-28");
+insert into diaries values(1599, "2015-11-29");
+insert into diaries values(1600, "2015-11-30");
+insert into diaries values(1601, "2015-12-01");
+insert into diaries values(1602, "2015-12-02");
+insert into diaries values(1603, "2015-12-03");
+insert into diaries values(1604, "2015-12-04");
+insert into diaries values(1605, "2015-12-05");
+insert into diaries values(1606, "2015-12-06");
+insert into diaries values(1607, "2015-12-07");
+insert into diaries values(1608, "2015-12-08");
+insert into diaries values(1609, "2015-12-09");
+insert into diaries values(1610, "2015-12-10");
+insert into diaries values(1611, "2015-12-11");
+insert into diaries values(1612, "2015-12-12");
+insert into diaries values(1613, "2015-12-13");
+insert into diaries values(1614, "2015-12-14");
+insert into diaries values(1615, "2015-12-15");
+insert into diaries values(1616, "2015-12-16");
+insert into diaries values(1617, "2015-12-17");
+insert into diaries values(1618, "2015-12-18");
+insert into diaries values(1619, "2015-12-19");
+insert into diaries values(1620, "2015-12-20");
+insert into diaries values(1621, "2015-12-21");
+insert into diaries values(1622, "2015-12-22");
+insert into diaries values(1623, "2015-12-23");
+insert into diaries values(1624, "2015-12-24");
+insert into diaries values(1625, "2015-12-25");
+insert into diaries values(1626, "2015-12-26");
+insert into diaries values(1627, "2015-12-27");
+insert into diaries values(1628, "2015-12-28");
+insert into diaries values(1629, "2015-12-29");
+insert into diaries values(1630, "2015-12-30");
+insert into diaries values(1631, "2015-12-31");
+insert into diaries values(1632, "2016-01-01");
+insert into diaries values(1633, "2016-01-02");
+insert into diaries values(1634, "2016-01-03");
+insert into diaries values(1635, "2016-01-04");
+insert into diaries values(1636, "2016-01-05");
+insert into diaries values(1637, "2016-01-06");
+insert into diaries values(1638, "2016-01-07");
+insert into diaries values(1639, "2016-01-08");
+insert into diaries values(1640, "2016-01-09");
+insert into diaries values(1641, "2016-01-10");
+insert into diaries values(1642, "2016-01-11");
+insert into diaries values(1643, "2016-01-12");
+insert into diaries values(1644, "2016-01-13");
+insert into diaries values(1645, "2016-01-14");
+insert into diaries values(1646, "2016-01-15");
+insert into diaries values(1647, "2016-01-16");
+insert into diaries values(1648, "2016-01-17");
+insert into diaries values(1649, "2016-01-18");
+insert into diaries values(1650, "2016-01-19");
+insert into diaries values(1651, "2016-01-20");
+insert into diaries values(1652, "2016-01-21");
+insert into diaries values(1653, "2016-01-22");
+insert into diaries values(1654, "2016-01-23");
+insert into diaries values(1655, "2016-01-24");
+insert into diaries values(1656, "2016-01-25");
+insert into diaries values(1657, "2016-01-26");
+insert into diaries values(1658, "2016-01-27");
+insert into diaries values(1659, "2016-01-28");
+insert into diaries values(1660, "2016-01-29");
+insert into diaries values(1661, "2016-01-30");
+insert into diaries values(1662, "2016-01-31");
+insert into diaries values(1663, "2016-02-01");
+insert into diaries values(1664, "2016-02-02");
+insert into diaries values(1665, "2016-02-03");
+insert into diaries values(1666, "2016-02-04");
+insert into diaries values(1667, "2016-02-05");
+insert into diaries values(1668, "2016-02-06");
+insert into diaries values(1669, "2016-02-07");
+insert into diaries values(1670, "2016-02-08");
+insert into diaries values(1671, "2016-02-09");
+insert into diaries values(1672, "2016-02-10");
+insert into diaries values(1673, "2016-02-11");
+insert into diaries values(1674, "2016-02-12");
+insert into diaries values(1675, "2016-02-13");
+insert into diaries values(1676, "2016-02-14");
+insert into diaries values(1677, "2016-02-15");
+insert into diaries values(1678, "2016-02-16");
+insert into diaries values(1679, "2016-02-17");
+insert into diaries values(1680, "2016-02-18");
+insert into diaries values(1681, "2016-02-19");
+insert into diaries values(1682, "2016-02-20");
+insert into diaries values(1683, "2016-02-21");
+insert into diaries values(1684, "2016-02-22");
+insert into diaries values(1685, "2016-02-23");
+insert into diaries values(1686, "2016-02-24");
+insert into diaries values(1687, "2016-02-25");
+insert into diaries values(1688, "2016-02-26");
+insert into diaries values(1689, "2016-02-27");
+insert into diaries values(1690, "2016-02-28");
+insert into diaries values(1691, "2016-02-29");
+insert into diaries values(1692, "2016-03-01");
+insert into diaries values(1693, "2016-03-02");
+insert into diaries values(1694, "2016-03-03");
+insert into diaries values(1695, "2016-03-04");
+insert into diaries values(1696, "2016-03-05");
+insert into diaries values(1697, "2016-03-06");
+insert into diaries values(1698, "2016-03-07");
+insert into diaries values(1699, "2016-03-08");
+insert into diaries values(1700, "2016-03-09");
+insert into diaries values(1701, "2016-03-10");
+insert into diaries values(1702, "2016-03-11");
+insert into diaries values(1703, "2016-03-12");
+insert into diaries values(1704, "2016-03-13");
+insert into diaries values(1705, "2016-03-14");
+insert into diaries values(1706, "2016-03-15");
+insert into diaries values(1707, "2016-03-16");
+insert into diaries values(1708, "2016-03-17");
+insert into diaries values(1709, "2016-03-18");
+insert into diaries values(1710, "2016-03-19");
+insert into diaries values(1711, "2016-03-20");
+insert into diaries values(1712, "2016-03-21");
+insert into diaries values(1713, "2016-03-22");
+insert into diaries values(1714, "2016-03-23");
+insert into diaries values(1715, "2016-03-24");
+insert into diaries values(1716, "2016-03-25");
+insert into diaries values(1717, "2016-03-26");
+insert into diaries values(1718, "2016-03-27");
+insert into diaries values(1719, "2016-03-28");
+insert into diaries values(1720, "2016-03-29");
+insert into diaries values(1721, "2016-03-30");
+insert into diaries values(1722, "2016-03-31");
+insert into diaries values(1723, "2016-04-01");
+insert into diaries values(1724, "2016-04-02");
+insert into diaries values(1725, "2016-04-03");
+insert into diaries values(1726, "2016-04-04");
+insert into diaries values(1727, "2016-04-05");
+insert into diaries values(1728, "2016-04-06");
+insert into diaries values(1729, "2016-04-07");
+insert into diaries values(1730, "2016-04-08");
+insert into diaries values(1731, "2016-04-09");
+insert into diaries values(1732, "2016-04-10");
+insert into diaries values(1733, "2016-04-11");
+insert into diaries values(1734, "2016-04-12");
+insert into diaries values(1735, "2016-04-13");
+insert into diaries values(1736, "2016-04-14");
+insert into diaries values(1737, "2016-04-15");
+insert into diaries values(1738, "2016-04-16");
+insert into diaries values(1739, "2016-04-17");
+insert into diaries values(1740, "2016-04-18");
+insert into diaries values(1741, "2016-04-19");
+insert into diaries values(1742, "2016-04-20");
+insert into diaries values(1743, "2016-04-21");
+insert into diaries values(1744, "2016-04-22");
+insert into diaries values(1745, "2016-04-23");
+insert into diaries values(1746, "2016-04-24");
+insert into diaries values(1747, "2016-04-25");
+insert into diaries values(1748, "2016-04-26");
+insert into diaries values(1749, "2016-04-27");
+insert into diaries values(1750, "2016-04-28");
+insert into diaries values(1751, "2016-04-29");
+insert into diaries values(1752, "2016-04-30");
+insert into diaries values(1753, "2016-05-01");
+insert into diaries values(1754, "2016-05-02");
+insert into diaries values(1755, "2016-05-03");
+insert into diaries values(1756, "2016-05-04");
+insert into diaries values(1757, "2016-05-05");
+insert into diaries values(1758, "2016-05-06");
+insert into diaries values(1759, "2016-05-07");
+insert into diaries values(1760, "2016-05-08");
+insert into diaries values(1761, "2016-05-09");
+insert into diaries values(1762, "2016-05-10");
+insert into diaries values(1763, "2016-05-11");
+insert into diaries values(1764, "2016-05-12");
+insert into diaries values(1765, "2016-05-13");
+insert into diaries values(1766, "2016-05-14");
+insert into diaries values(1767, "2016-05-15");
+insert into diaries values(1768, "2016-05-16");
+insert into diaries values(1769, "2016-05-17");
+insert into diaries values(1770, "2016-05-18");
+insert into diaries values(1771, "2016-05-19");
+insert into diaries values(1772, "2016-05-20");
+insert into diaries values(1773, "2016-05-21");
+insert into diaries values(1774, "2016-05-22");
+insert into diaries values(1775, "2016-05-23");
+insert into diaries values(1776, "2016-05-24");
+insert into diaries values(1777, "2016-05-25");
+insert into diaries values(1778, "2016-05-26");
+insert into diaries values(1779, "2016-05-27");
+insert into diaries values(1780, "2016-05-28");
+insert into diaries values(1781, "2016-05-29");
+insert into diaries values(1782, "2016-05-30");
+insert into diaries values(1783, "2016-05-31");
+insert into diaries values(1784, "2016-06-01");
+insert into diaries values(1785, "2016-06-02");
+insert into diaries values(1786, "2016-06-03");
+insert into diaries values(1787, "2016-06-04");
+insert into diaries values(1788, "2016-06-05");
+insert into diaries values(1789, "2016-06-06");
+insert into diaries values(1790, "2016-06-07");
+insert into diaries values(1791, "2016-06-08");
+insert into diaries values(1792, "2016-06-09");
+insert into diaries values(1793, "2016-06-10");
+insert into diaries values(1794, "2016-06-11");
+insert into diaries values(1795, "2016-06-12");
+insert into diaries values(1796, "2016-06-13");
+insert into diaries values(1797, "2016-06-14");
+insert into diaries values(1798, "2016-06-15");
+insert into diaries values(1799, "2016-06-16");
+insert into diaries values(1800, "2016-06-17");
+insert into diaries values(1801, "2016-06-18");
+insert into diaries values(1802, "2016-06-19");
+insert into diaries values(1803, "2016-06-20");
+insert into diaries values(1804, "2016-06-21");
+insert into diaries values(1805, "2016-06-22");
+insert into diaries values(1806, "2016-06-23");
+insert into diaries values(1807, "2016-06-24");
+insert into diaries values(1808, "2016-06-25");
+insert into diaries values(1809, "2016-06-26");
+insert into diaries values(1810, "2016-06-27");
+insert into diaries values(1811, "2016-06-28");
+insert into diaries values(1812, "2016-06-29");
+insert into diaries values(1813, "2016-06-30");
+insert into diaries values(1814, "2016-07-01");
+insert into diaries values(1815, "2016-07-02");
+insert into diaries values(1816, "2016-07-03");
+insert into diaries values(1817, "2016-07-04");
+insert into diaries values(1818, "2016-07-05");
+insert into diaries values(1819, "2016-07-06");
+insert into diaries values(1820, "2016-07-07");
+insert into diaries values(1821, "2016-07-08");
+insert into diaries values(1822, "2016-07-09");
+insert into diaries values(1823, "2016-07-10");
+insert into diaries values(1824, "2016-07-11");
+insert into diaries values(1825, "2016-07-12");
+insert into diaries values(1826, "2016-07-13");
+insert into diaries values(1827, "2016-07-14");
+insert into diaries values(1828, "2016-07-15");
+insert into diaries values(1829, "2016-07-16");
+insert into diaries values(1830, "2016-07-17");
+insert into diaries values(1831, "2016-07-18");
+insert into diaries values(1832, "2016-07-19");
+insert into diaries values(1833, "2016-07-20");
+insert into diaries values(1834, "2016-07-21");
+insert into diaries values(1835, "2016-07-22");
+insert into diaries values(1836, "2016-07-23");
+insert into diaries values(1837, "2016-07-24");
+insert into diaries values(1838, "2016-07-25");
+insert into diaries values(1839, "2016-07-26");
+insert into diaries values(1840, "2016-07-27");
+insert into diaries values(1841, "2016-07-28");
+insert into diaries values(1842, "2016-07-29");
+insert into diaries values(1843, "2016-07-30");
+insert into diaries values(1844, "2016-07-31");
+insert into diaries values(1845, "2016-08-01");
+insert into diaries values(1846, "2016-08-02");
+insert into diaries values(1847, "2016-08-03");
+insert into diaries values(1848, "2016-08-04");
+insert into diaries values(1849, "2016-08-05");
+insert into diaries values(1850, "2016-08-06");
+insert into diaries values(1851, "2016-08-07");
+insert into diaries values(1852, "2016-08-08");
+insert into diaries values(1853, "2016-08-09");
+insert into diaries values(1854, "2016-08-10");
+insert into diaries values(1855, "2016-08-11");
+insert into diaries values(1856, "2016-08-12");
+insert into diaries values(1857, "2016-08-13");
+insert into diaries values(1858, "2016-08-14");
+insert into diaries values(1859, "2016-08-15");
+insert into diaries values(1860, "2016-08-16");
+insert into diaries values(1861, "2016-08-17");
+insert into diaries values(1862, "2016-08-18");
+insert into diaries values(1863, "2016-08-19");
+insert into diaries values(1864, "2016-08-20");
+insert into diaries values(1865, "2016-08-21");
+insert into diaries values(1866, "2016-08-22");
+insert into diaries values(1867, "2016-08-23");
+insert into diaries values(1868, "2016-08-24");
+insert into diaries values(1869, "2016-08-25");
+insert into diaries values(1870, "2016-08-26");
+insert into diaries values(1871, "2016-08-27");
+insert into diaries values(1872, "2016-08-28");
+insert into diaries values(1873, "2016-08-29");
+insert into diaries values(1874, "2016-08-30");
+insert into diaries values(1875, "2016-08-31");
+insert into diaries values(1876, "2016-09-01");
+insert into diaries values(1877, "2016-09-02");
+insert into diaries values(1878, "2016-09-03");
+insert into diaries values(1879, "2016-09-04");
+insert into diaries values(1880, "2016-09-05");
+insert into diaries values(1881, "2016-09-06");
+insert into diaries values(1882, "2016-09-07");
+insert into diaries values(1883, "2016-09-08");
+insert into diaries values(1884, "2016-09-09");
+insert into diaries values(1885, "2016-09-10");
+insert into diaries values(1886, "2016-09-11");
+insert into diaries values(1887, "2016-09-12");
+insert into diaries values(1888, "2016-09-13");
+insert into diaries values(1889, "2016-09-14");
+insert into diaries values(1890, "2016-09-15");
+insert into diaries values(1891, "2016-09-16");
+insert into diaries values(1892, "2016-09-17");
+insert into diaries values(1893, "2016-09-18");
+insert into diaries values(1894, "2016-09-19");
+insert into diaries values(1895, "2016-09-20");
+insert into diaries values(1896, "2016-09-21");
+insert into diaries values(1897, "2016-09-22");
+insert into diaries values(1898, "2016-09-23");
+insert into diaries values(1899, "2016-09-24");
+insert into diaries values(1900, "2016-09-25");
+insert into diaries values(1901, "2016-09-26");
+insert into diaries values(1902, "2016-09-27");
+insert into diaries values(1903, "2016-09-28");
+insert into diaries values(1904, "2016-09-29");
+insert into diaries values(1905, "2016-09-30");
+insert into diaries values(1906, "2016-10-01");
+insert into diaries values(1907, "2016-10-02");
+insert into diaries values(1908, "2016-10-03");
+insert into diaries values(1909, "2016-10-04");
+insert into diaries values(1910, "2016-10-05");
+insert into diaries values(1911, "2016-10-06");
+insert into diaries values(1912, "2016-10-07");
+insert into diaries values(1913, "2016-10-08");
+insert into diaries values(1914, "2016-10-09");
+insert into diaries values(1915, "2016-10-10");
+insert into diaries values(1916, "2016-10-11");
+insert into diaries values(1917, "2016-10-12");
+insert into diaries values(1918, "2016-10-13");
+insert into diaries values(1919, "2016-10-14");
+insert into diaries values(1920, "2016-10-15");
+insert into diaries values(1921, "2016-10-16");
+insert into diaries values(1922, "2016-10-17");
+insert into diaries values(1923, "2016-10-18");
+insert into diaries values(1924, "2016-10-19");
+insert into diaries values(1925, "2016-10-20");
+insert into diaries values(1926, "2016-10-21");
+insert into diaries values(1927, "2016-10-22");
+insert into diaries values(1928, "2016-10-23");
+insert into diaries values(1929, "2016-10-24");
+insert into diaries values(1930, "2016-10-25");
+insert into diaries values(1931, "2016-10-26");
+insert into diaries values(1932, "2016-10-27");
+insert into diaries values(1933, "2016-10-28");
+insert into diaries values(1934, "2016-10-29");
+insert into diaries values(1935, "2016-10-30");
+insert into diaries values(1936, "2016-10-31");
+insert into diaries values(1937, "2016-11-01");
+insert into diaries values(1938, "2016-11-02");
+insert into diaries values(1939, "2016-11-03");
+insert into diaries values(1940, "2016-11-04");
+insert into diaries values(1941, "2016-11-05");
+insert into diaries values(1942, "2016-11-06");
+insert into diaries values(1943, "2016-11-07");
+insert into diaries values(1944, "2016-11-08");
+insert into diaries values(1945, "2016-11-09");
+insert into diaries values(1946, "2016-11-10");
+insert into diaries values(1947, "2016-11-11");
+insert into diaries values(1948, "2016-11-12");
+insert into diaries values(1949, "2016-11-13");
+insert into diaries values(1950, "2016-11-14");
+insert into diaries values(1951, "2016-11-15");
+insert into diaries values(1952, "2016-11-16");
+insert into diaries values(1953, "2016-11-17");
+insert into diaries values(1954, "2016-11-18");
+insert into diaries values(1955, "2016-11-19");
+insert into diaries values(1956, "2016-11-20");
+insert into diaries values(1957, "2016-11-21");
+insert into diaries values(1958, "2016-11-22");
+insert into diaries values(1959, "2016-11-23");
+insert into diaries values(1960, "2016-11-24");
+insert into diaries values(1961, "2016-11-25");
+insert into diaries values(1962, "2016-11-26");
+insert into diaries values(1963, "2016-11-27");
+insert into diaries values(1964, "2016-11-28");
+insert into diaries values(1965, "2016-11-29");
+insert into diaries values(1966, "2016-11-30");
+insert into diaries values(1967, "2016-12-01");
+insert into diaries values(1968, "2016-12-02");
+insert into diaries values(1969, "2016-12-03");
+insert into diaries values(1970, "2016-12-04");
+insert into diaries values(1971, "2016-12-05");
+insert into diaries values(1972, "2016-12-06");
+insert into diaries values(1973, "2016-12-07");
+insert into diaries values(1974, "2016-12-08");
+insert into diaries values(1975, "2016-12-09");
+insert into diaries values(1976, "2016-12-10");
+insert into diaries values(1977, "2016-12-11");
+insert into diaries values(1978, "2016-12-12");
+insert into diaries values(1979, "2016-12-13");
+insert into diaries values(1980, "2016-12-14");
+insert into diaries values(1981, "2016-12-15");
+insert into diaries values(1982, "2016-12-16");
+insert into diaries values(1983, "2016-12-17");
+insert into diaries values(1984, "2016-12-18");
+insert into diaries values(1985, "2016-12-19");
+insert into diaries values(1986, "2016-12-20");
+insert into diaries values(1987, "2016-12-21");
+insert into diaries values(1988, "2016-12-22");
+insert into diaries values(1989, "2016-12-23");
+insert into diaries values(1990, "2016-12-24");
+insert into diaries values(1991, "2016-12-25");
+insert into diaries values(1992, "2016-12-26");
+insert into diaries values(1993, "2016-12-27");
+insert into diaries values(1994, "2016-12-28");
+insert into diaries values(1995, "2016-12-29");
+insert into diaries values(1996, "2016-12-30");
+insert into diaries values(1997, "2016-12-31");
+insert into diaries values(1998, "2017-01-01");
+insert into diaries values(1999, "2017-01-02");
+insert into diaries values(2000, "2017-01-03");
+insert into diaries values(2001, "2017-01-04");
+insert into diaries values(2002, "2017-01-05");
+insert into diaries values(2003, "2017-01-06");
+insert into diaries values(2004, "2017-01-07");
+insert into diaries values(2005, "2017-01-08");
+insert into diaries values(2006, "2017-01-09");
+insert into diaries values(2007, "2017-01-10");
+insert into diaries values(2008, "2017-01-11");
+insert into diaries values(2009, "2017-01-12");
+insert into diaries values(2010, "2017-01-13");
+insert into diaries values(2011, "2017-01-14");
+insert into diaries values(2012, "2017-01-15");
+insert into diaries values(2013, "2017-01-16");
+insert into diaries values(2014, "2017-01-17");
+insert into diaries values(2015, "2017-01-18");
+insert into diaries values(2016, "2017-01-19");
+insert into diaries values(2017, "2017-01-20");
+insert into diaries values(2018, "2017-01-21");
+insert into diaries values(2019, "2017-01-22");
+insert into diaries values(2020, "2017-01-23");
+insert into diaries values(2021, "2017-01-24");
+insert into diaries values(2022, "2017-01-25");
+insert into diaries values(2023, "2017-01-26");
+insert into diaries values(2024, "2017-01-27");
+insert into diaries values(2025, "2017-01-28");
+insert into diaries values(2026, "2017-01-29");
+insert into diaries values(2027, "2017-01-30");
+insert into diaries values(2028, "2017-01-31");
+insert into diaries values(2029, "2017-02-01");
+insert into diaries values(2030, "2017-02-02");
+insert into diaries values(2031, "2017-02-03");
+insert into diaries values(2032, "2017-02-04");
+insert into diaries values(2033, "2017-02-05");
+insert into diaries values(2034, "2017-02-06");
+insert into diaries values(2035, "2017-02-07");
+insert into diaries values(2036, "2017-02-08");
+insert into diaries values(2037, "2017-02-09");
+insert into diaries values(2038, "2017-02-10");
+insert into diaries values(2039, "2017-02-11");
+insert into diaries values(2040, "2017-02-12");
+insert into diaries values(2041, "2017-02-13");
+insert into diaries values(2042, "2017-02-14");
+insert into diaries values(2043, "2017-02-15");
+insert into diaries values(2044, "2017-02-16");
+insert into diaries values(2045, "2017-02-17");
+insert into diaries values(2046, "2017-02-18");
+insert into diaries values(2047, "2017-02-19");
+insert into diaries values(2048, "2017-02-20");
+insert into diaries values(2049, "2017-02-21");
+insert into diaries values(2050, "2017-02-22");
+insert into diaries values(2051, "2017-02-23");
+insert into diaries values(2052, "2017-02-24");
+insert into diaries values(2053, "2017-02-25");
+insert into diaries values(2054, "2017-02-26");
+insert into diaries values(2055, "2017-02-27");
+insert into diaries values(2056, "2017-02-28");
+insert into diaries values(2057, "2017-03-01");
+insert into diaries values(2058, "2017-03-02");
+insert into diaries values(2059, "2017-03-03");
+insert into diaries values(2060, "2017-03-04");
+insert into diaries values(2061, "2017-03-05");
+insert into diaries values(2062, "2017-03-06");
+insert into diaries values(2063, "2017-03-07");
+insert into diaries values(2064, "2017-03-08");
+insert into diaries values(2065, "2017-03-09");
+insert into diaries values(2066, "2017-03-10");
+insert into diaries values(2067, "2017-03-11");
+insert into diaries values(2068, "2017-03-12");
+insert into diaries values(2069, "2017-03-13");
+insert into diaries values(2070, "2017-03-14");
+insert into diaries values(2071, "2017-03-15");
+insert into diaries values(2072, "2017-03-16");
+insert into diaries values(2073, "2017-03-17");
+insert into diaries values(2074, "2017-03-18");
+insert into diaries values(2075, "2017-03-19");
+insert into diaries values(2076, "2017-03-20");
+insert into diaries values(2077, "2017-03-21");
+insert into diaries values(2078, "2017-03-22");
+insert into diaries values(2079, "2017-03-23");
+insert into diaries values(2080, "2017-03-24");
+insert into diaries values(2081, "2017-03-25");
+insert into diaries values(2082, "2017-03-26");
+insert into diaries values(2083, "2017-03-27");
+insert into diaries values(2084, "2017-03-28");
+insert into diaries values(2085, "2017-03-29");
+insert into diaries values(2086, "2017-03-30");
+insert into diaries values(2087, "2017-03-31");
+insert into diaries values(2088, "2017-04-01");
+insert into diaries values(2089, "2017-04-02");
+insert into diaries values(2090, "2017-04-03");
+insert into diaries values(2091, "2017-04-04");
+insert into diaries values(2092, "2017-04-05");
+insert into diaries values(2093, "2017-04-06");
+insert into diaries values(2094, "2017-04-07");
+insert into diaries values(2095, "2017-04-08");
+insert into diaries values(2096, "2017-04-09");
+insert into diaries values(2097, "2017-04-10");
+insert into diaries values(2098, "2017-04-11");
+insert into diaries values(2099, "2017-04-12");
+insert into diaries values(2100, "2017-04-13");
+insert into diaries values(2101, "2017-04-14");
+insert into diaries values(2102, "2017-04-15");
+insert into diaries values(2103, "2017-04-16");
+insert into diaries values(2104, "2017-04-17");
+insert into diaries values(2105, "2017-04-18");
+insert into diaries values(2106, "2017-04-19");
+insert into diaries values(2107, "2017-04-20");
+insert into diaries values(2108, "2017-04-21");
+insert into diaries values(2109, "2017-04-22");
+insert into diaries values(2110, "2017-04-23");
+insert into diaries values(2111, "2017-04-24");
+insert into diaries values(2112, "2017-04-25");
+insert into diaries values(2113, "2017-04-26");
+insert into diaries values(2114, "2017-04-27");
+insert into diaries values(2115, "2017-04-28");
+insert into diaries values(2116, "2017-04-29");
+insert into diaries values(2117, "2017-04-30");
+insert into diaries values(2118, "2017-05-01");
+insert into diaries values(2119, "2017-05-02");
+insert into diaries values(2120, "2017-05-03");
+insert into diaries values(2121, "2017-05-04");
+insert into diaries values(2122, "2017-05-05");
+insert into diaries values(2123, "2017-05-06");
+insert into diaries values(2124, "2017-05-07");
+insert into diaries values(2125, "2017-05-08");
+insert into diaries values(2126, "2017-05-09");
+insert into diaries values(2127, "2017-05-10");
+insert into diaries values(2128, "2017-05-11");
+insert into diaries values(2129, "2017-05-12");
+insert into diaries values(2130, "2017-05-13");
+insert into diaries values(2131, "2017-05-14");
+insert into diaries values(2132, "2017-05-15");
+insert into diaries values(2133, "2017-05-16");
+insert into diaries values(2134, "2017-05-17");
+insert into diaries values(2135, "2017-05-18");
+insert into diaries values(2136, "2017-05-19");
+insert into diaries values(2137, "2017-05-20");
+insert into diaries values(2138, "2017-05-21");
+insert into diaries values(2139, "2017-05-22");
+insert into diaries values(2140, "2017-05-23");
+insert into diaries values(2141, "2017-05-24");
+insert into diaries values(2142, "2017-05-25");
+insert into diaries values(2143, "2017-05-26");
+insert into diaries values(2144, "2017-05-27");
+insert into diaries values(2145, "2017-05-28");
+insert into diaries values(2146, "2017-05-29");
+insert into diaries values(2147, "2017-05-30");
+insert into diaries values(2148, "2017-05-31");
+insert into diaries values(2149, "2017-06-01");
+insert into diaries values(2150, "2017-06-02");
+insert into diaries values(2151, "2017-06-03");
+insert into diaries values(2152, "2017-06-04");
+insert into diaries values(2153, "2017-06-05");
+insert into diaries values(2154, "2017-06-06");
+insert into diaries values(2155, "2017-06-07");
+insert into diaries values(2156, "2017-06-08");
+insert into diaries values(2157, "2017-06-09");
+insert into diaries values(2158, "2017-06-10");
+insert into diaries values(2159, "2017-06-11");
+insert into diaries values(2160, "2017-06-12");
+insert into diaries values(2161, "2017-06-13");
+insert into diaries values(2162, "2017-06-14");
+insert into diaries values(2163, "2017-06-15");
+insert into diaries values(2164, "2017-06-16");
+insert into diaries values(2165, "2017-06-17");
+insert into diaries values(2166, "2017-06-18");
+insert into diaries values(2167, "2017-06-19");
+insert into diaries values(2168, "2017-06-20");
+insert into diaries values(2169, "2017-06-21");
+insert into diaries values(2170, "2017-06-22");
+insert into diaries values(2171, "2017-06-23");
+insert into diaries values(2172, "2017-06-24");
+insert into diaries values(2173, "2017-06-25");
+insert into diaries values(2174, "2017-06-26");
+insert into diaries values(2175, "2017-06-27");
+insert into diaries values(2176, "2017-06-28");
+insert into diaries values(2177, "2017-06-29");
+insert into diaries values(2178, "2017-06-30");
+insert into diaries values(2179, "2017-07-01");
+insert into diaries values(2180, "2017-07-02");
+insert into diaries values(2181, "2017-07-03");
+insert into diaries values(2182, "2017-07-04");
+insert into diaries values(2183, "2017-07-05");
+insert into diaries values(2184, "2017-07-06");
+insert into diaries values(2185, "2017-07-07");
+insert into diaries values(2186, "2017-07-08");
+insert into diaries values(2187, "2017-07-09");
+insert into diaries values(2188, "2017-07-10");
+insert into diaries values(2189, "2017-07-11");
+insert into diaries values(2190, "2017-07-12");
+insert into diaries values(2191, "2017-07-13");
+insert into diaries values(2192, "2017-07-14");
+insert into diaries values(2193, "2017-07-15");
+insert into diaries values(2194, "2017-07-16");
+insert into diaries values(2195, "2017-07-17");
+insert into diaries values(2196, "2017-07-18");
+insert into diaries values(2197, "2017-07-19");
+insert into diaries values(2198, "2017-07-20");
+insert into diaries values(2199, "2017-07-21");
+insert into diaries values(2200, "2017-07-22");
+insert into diaries values(2201, "2017-07-23");
+insert into diaries values(2202, "2017-07-24");
+insert into diaries values(2203, "2017-07-25");
+insert into diaries values(2204, "2017-07-26");
+insert into diaries values(2205, "2017-07-27");
+insert into diaries values(2206, "2017-07-28");
+insert into diaries values(2207, "2017-07-29");
+insert into diaries values(2208, "2017-07-30");
+insert into diaries values(2209, "2017-07-31");
+insert into diaries values(2210, "2017-08-01");
+insert into diaries values(2211, "2017-08-02");
+insert into diaries values(2212, "2017-08-03");
+insert into diaries values(2213, "2017-08-04");
+insert into diaries values(2214, "2017-08-05");
+insert into diaries values(2215, "2017-08-06");
+insert into diaries values(2216, "2017-08-07");
+insert into diaries values(2217, "2017-08-08");
+insert into diaries values(2218, "2017-08-09");
+insert into diaries values(2219, "2017-08-10");
+insert into diaries values(2220, "2017-08-11");
+insert into diaries values(2221, "2017-08-12");
+insert into diaries values(2222, "2017-08-13");
+insert into diaries values(2223, "2017-08-14");
+insert into diaries values(2224, "2017-08-15");
+insert into diaries values(2225, "2017-08-16");
+insert into diaries values(2226, "2017-08-17");
+insert into diaries values(2227, "2017-08-18");
+insert into diaries values(2228, "2017-08-19");
+insert into diaries values(2229, "2017-08-20");
+insert into diaries values(2230, "2017-08-21");
+insert into diaries values(2231, "2017-08-22");
+insert into diaries values(2232, "2017-08-23");
+insert into diaries values(2233, "2017-08-24");
+insert into diaries values(2234, "2017-08-25");
+insert into diaries values(2235, "2017-08-26");
+insert into diaries values(2236, "2017-08-27");
+insert into diaries values(2237, "2017-08-28");
+insert into diaries values(2238, "2017-08-29");
+insert into diaries values(2239, "2017-08-30");
+insert into diaries values(2240, "2017-08-31");
+insert into diaries values(2241, "2017-09-01");
+insert into diaries values(2242, "2017-09-02");
+insert into diaries values(2243, "2017-09-03");
+insert into diaries values(2244, "2017-09-04");
+insert into diaries values(2245, "2017-09-05");
+insert into diaries values(2246, "2017-09-06");
+insert into diaries values(2247, "2017-09-07");
+insert into diaries values(2248, "2017-09-08");
+insert into diaries values(2249, "2017-09-09");
+insert into diaries values(2250, "2017-09-10");
+insert into diaries values(2251, "2017-09-11");
+insert into diaries values(2252, "2017-09-12");
+insert into diaries values(2253, "2017-09-13");
+insert into diaries values(2254, "2017-09-14");
+insert into diaries values(2255, "2017-09-15");
+insert into diaries values(2256, "2017-09-16");
+insert into diaries values(2257, "2017-09-17");
+insert into diaries values(2258, "2017-09-18");
+insert into diaries values(2259, "2017-09-19");
+insert into diaries values(2260, "2017-09-20");
+insert into diaries values(2261, "2017-09-21");
+insert into diaries values(2262, "2017-09-22");
+insert into diaries values(2263, "2017-09-23");
+insert into diaries values(2264, "2017-09-24");
+insert into diaries values(2265, "2017-09-25");
+insert into diaries values(2266, "2017-09-26");
+insert into diaries values(2267, "2017-09-27");
+insert into diaries values(2268, "2017-09-28");
+insert into diaries values(2269, "2017-09-29");
+insert into diaries values(2270, "2017-09-30");
+insert into diaries values(2271, "2017-10-01");
+insert into diaries values(2272, "2017-10-02");
+insert into diaries values(2273, "2017-10-03");
+insert into diaries values(2274, "2017-10-04");
+insert into diaries values(2275, "2017-10-05");
+insert into diaries values(2276, "2017-10-06");
+insert into diaries values(2277, "2017-10-07");
+insert into diaries values(2278, "2017-10-08");
+insert into diaries values(2279, "2017-10-09");
+insert into diaries values(2280, "2017-10-10");
+insert into diaries values(2281, "2017-10-11");
+insert into diaries values(2282, "2017-10-12");
+insert into diaries values(2283, "2017-10-13");
+insert into diaries values(2284, "2017-10-14");
+insert into diaries values(2285, "2017-10-15");
+insert into diaries values(2286, "2017-10-16");
+insert into diaries values(2287, "2017-10-17");
+insert into diaries values(2288, "2017-10-18");
+insert into diaries values(2289, "2017-10-19");
+insert into diaries values(2290, "2017-10-20");
+insert into diaries values(2291, "2017-10-21");
+insert into diaries values(2292, "2017-10-22");
+insert into diaries values(2293, "2017-10-23");
+insert into diaries values(2294, "2017-10-24");
+insert into diaries values(2295, "2017-10-25");
+insert into diaries values(2296, "2017-10-26");
+insert into diaries values(2297, "2017-10-27");
+insert into diaries values(2298, "2017-10-28");
+insert into diaries values(2299, "2017-10-29");
+insert into diaries values(2300, "2017-10-30");
+insert into diaries values(2301, "2017-10-31");
+insert into diaries values(2302, "2017-11-01");
+insert into diaries values(2303, "2017-11-02");
+insert into diaries values(2304, "2017-11-03");
+insert into diaries values(2305, "2017-11-04");
+insert into diaries values(2306, "2017-11-05");
+insert into diaries values(2307, "2017-11-06");
+insert into diaries values(2308, "2017-11-07");
+insert into diaries values(2309, "2017-11-08");
+insert into diaries values(2310, "2017-11-09");
+insert into diaries values(2311, "2017-11-10");
+insert into diaries values(2312, "2017-11-11");
+insert into diaries values(2313, "2017-11-12");
+insert into diaries values(2314, "2017-11-13");
+insert into diaries values(2315, "2017-11-14");
+insert into diaries values(2316, "2017-11-15");
+insert into diaries values(2317, "2017-11-16");
+insert into diaries values(2318, "2017-11-17");
+insert into diaries values(2319, "2017-11-18");
+insert into diaries values(2320, "2017-11-19");
+insert into diaries values(2321, "2017-11-20");
+insert into diaries values(2322, "2017-11-21");
+insert into diaries values(2323, "2017-11-22");
+insert into diaries values(2324, "2017-11-23");
+insert into diaries values(2325, "2017-11-24");
+insert into diaries values(2326, "2017-11-25");
+insert into diaries values(2327, "2017-11-26");
+insert into diaries values(2328, "2017-11-27");
+insert into diaries values(2329, "2017-11-28");
+insert into diaries values(2330, "2017-11-29");
+insert into diaries values(2331, "2017-11-30");
+insert into diaries values(2332, "2017-12-01");
+insert into diaries values(2333, "2017-12-02");
+insert into diaries values(2334, "2017-12-03");
+insert into diaries values(2335, "2017-12-04");
+insert into diaries values(2336, "2017-12-05");
+insert into diaries values(2337, "2017-12-06");
+insert into diaries values(2338, "2017-12-07");
+insert into diaries values(2339, "2017-12-08");
+insert into diaries values(2340, "2017-12-09");
+insert into diaries values(2341, "2017-12-10");
+insert into diaries values(2342, "2017-12-11");
+insert into diaries values(2343, "2017-12-12");
+insert into diaries values(2344, "2017-12-13");
+insert into diaries values(2345, "2017-12-14");
+insert into diaries values(2346, "2017-12-15");
+insert into diaries values(2347, "2017-12-16");
+insert into diaries values(2348, "2017-12-17");
+insert into diaries values(2349, "2017-12-18");
+insert into diaries values(2350, "2017-12-19");
+insert into diaries values(2351, "2017-12-20");
+insert into diaries values(2352, "2017-12-21");
+insert into diaries values(2353, "2017-12-22");
+insert into diaries values(2354, "2017-12-23");
+insert into diaries values(2355, "2017-12-24");
+insert into diaries values(2356, "2017-12-25");
+insert into diaries values(2357, "2017-12-26");
+insert into diaries values(2358, "2017-12-27");
+insert into diaries values(2359, "2017-12-28");
+insert into diaries values(2360, "2017-12-29");
+insert into diaries values(2361, "2017-12-30");
+insert into diaries values(2362, "2017-12-31");
+insert into diaries values(2363, "2018-01-01");
+insert into diaries values(2364, "2018-01-02");
+insert into diaries values(2365, "2018-01-03");
+insert into diaries values(2366, "2018-01-04");
+insert into diaries values(2367, "2018-01-05");
+insert into diaries values(2368, "2018-01-06");
+insert into diaries values(2369, "2018-01-07");
+insert into diaries values(2370, "2018-01-08");
+insert into diaries values(2371, "2018-01-09");
+insert into diaries values(2372, "2018-01-10");
+insert into diaries values(2373, "2018-01-11");
+insert into diaries values(2374, "2018-01-12");
+insert into diaries values(2375, "2018-01-13");
+insert into diaries values(2376, "2018-01-14");
+insert into diaries values(2377, "2018-01-15");
+insert into diaries values(2378, "2018-01-16");
+insert into diaries values(2379, "2018-01-17");
+insert into diaries values(2380, "2018-01-18");
+insert into diaries values(2381, "2018-01-19");
+insert into diaries values(2382, "2018-01-20");
+insert into diaries values(2383, "2018-01-21");
+insert into diaries values(2384, "2018-01-22");
+insert into diaries values(2385, "2018-01-23");
+insert into diaries values(2386, "2018-01-24");
+insert into diaries values(2387, "2018-01-25");
+insert into diaries values(2388, "2018-01-26");
+insert into diaries values(2389, "2018-01-27");
+insert into diaries values(2390, "2018-01-28");
+insert into diaries values(2391, "2018-01-29");
+insert into diaries values(2392, "2018-01-30");
+insert into diaries values(2393, "2018-01-31");
+insert into diaries values(2394, "2018-02-01");
+insert into diaries values(2395, "2018-02-02");
+insert into diaries values(2396, "2018-02-03");
+insert into diaries values(2397, "2018-02-04");
+insert into diaries values(2398, "2018-02-05");
+insert into diaries values(2399, "2018-02-06");
+insert into diaries values(2400, "2018-02-07");
+insert into diaries values(2401, "2018-02-08");
+insert into diaries values(2402, "2018-02-09");
+insert into diaries values(2403, "2018-02-10");
+insert into diaries values(2404, "2018-02-11");
+insert into diaries values(2405, "2018-02-12");
+insert into diaries values(2406, "2018-02-13");
+insert into diaries values(2407, "2018-02-14");
+insert into diaries values(2408, "2018-02-15");
+insert into diaries values(2409, "2018-02-16");
+insert into diaries values(2410, "2018-02-17");
+insert into diaries values(2411, "2018-02-18");
+insert into diaries values(2412, "2018-02-19");
+insert into diaries values(2413, "2018-02-20");
+insert into diaries values(2414, "2018-02-21");
+insert into diaries values(2415, "2018-02-22");
+insert into diaries values(2416, "2018-02-23");
+insert into diaries values(2417, "2018-02-24");
+insert into diaries values(2418, "2018-02-25");
+insert into diaries values(2419, "2018-02-26");
+insert into diaries values(2420, "2018-02-27");
+insert into diaries values(2421, "2018-02-28");
+insert into diaries values(2422, "2018-03-01");
+insert into diaries values(2423, "2018-03-02");
+insert into diaries values(2424, "2018-03-03");
+insert into diaries values(2425, "2018-03-04");
+insert into diaries values(2426, "2018-03-05");
+insert into diaries values(2427, "2018-03-06");
+insert into diaries values(2428, "2018-03-07");
+insert into diaries values(2429, "2018-03-08");
+insert into diaries values(2430, "2018-03-09");
+insert into diaries values(2431, "2018-03-10");
+insert into diaries values(2432, "2018-03-11");
+insert into diaries values(2433, "2018-03-12");
+insert into diaries values(2434, "2018-03-13");
+insert into diaries values(2435, "2018-03-14");
+insert into diaries values(2436, "2018-03-15");
+insert into diaries values(2437, "2018-03-16");
+insert into diaries values(2438, "2018-03-17");
+insert into diaries values(2439, "2018-03-18");
+insert into diaries values(2440, "2018-03-19");
+insert into diaries values(2441, "2018-03-20");
+insert into diaries values(2442, "2018-03-21");
+insert into diaries values(2443, "2018-03-22");
+insert into diaries values(2444, "2018-03-23");
+insert into diaries values(2445, "2018-03-24");
+insert into diaries values(2446, "2018-03-25");
+insert into diaries values(2447, "2018-03-26");
+insert into diaries values(2448, "2018-03-27");
+insert into diaries values(2449, "2018-03-28");
+insert into diaries values(2450, "2018-03-29");
+insert into diaries values(2451, "2018-03-30");
+insert into diaries values(2452, "2018-03-31");
+insert into diaries values(2453, "2018-04-01");
+insert into diaries values(2454, "2018-04-02");
+insert into diaries values(2455, "2018-04-03");
+insert into diaries values(2456, "2018-04-04");
+insert into diaries values(2457, "2018-04-05");
+insert into diaries values(2458, "2018-04-06");
+insert into diaries values(2459, "2018-04-07");
+insert into diaries values(2460, "2018-04-08");
+insert into diaries values(2461, "2018-04-09");
+insert into diaries values(2462, "2018-04-10");
+insert into diaries values(2463, "2018-04-11");
+insert into diaries values(2464, "2018-04-12");
+insert into diaries values(2465, "2018-04-13");
+insert into diaries values(2466, "2018-04-14");
+insert into diaries values(2467, "2018-04-15");
+insert into diaries values(2468, "2018-04-16");
+insert into diaries values(2469, "2018-04-17");
+insert into diaries values(2470, "2018-04-18");
+insert into diaries values(2471, "2018-04-19");
+insert into diaries values(2472, "2018-04-20");
+insert into diaries values(2473, "2018-04-21");
+insert into diaries values(2474, "2018-04-22");
+insert into diaries values(2475, "2018-04-23");
+insert into diaries values(2476, "2018-04-24");
+insert into diaries values(2477, "2018-04-25");
+insert into diaries values(2478, "2018-04-26");
+insert into diaries values(2479, "2018-04-27");
+insert into diaries values(2480, "2018-04-28");
+insert into diaries values(2481, "2018-04-29");
+insert into diaries values(2482, "2018-04-30");
+insert into diaries values(2483, "2018-05-01");
+insert into diaries values(2484, "2018-05-02");
+insert into diaries values(2485, "2018-05-03");
+insert into diaries values(2486, "2018-05-04");
+insert into diaries values(2487, "2018-05-05");
+insert into diaries values(2488, "2018-05-06");
+insert into diaries values(2489, "2018-05-07");
+insert into diaries values(2490, "2018-05-08");
+insert into diaries values(2491, "2018-05-09");
+insert into diaries values(2492, "2018-05-10");
+insert into diaries values(2493, "2018-05-11");
+insert into diaries values(2494, "2018-05-12");
+insert into diaries values(2495, "2018-05-13");
+insert into diaries values(2496, "2018-05-14");
+insert into diaries values(2497, "2018-05-15");
+insert into diaries values(2498, "2018-05-16");
+insert into diaries values(2499, "2018-05-17");
+insert into diaries values(2500, "2018-05-18");
+insert into diaries values(2501, "2018-05-19");
+insert into diaries values(2502, "2018-05-20");
+insert into diaries values(2503, "2018-05-21");
+insert into diaries values(2504, "2018-05-22");
+insert into diaries values(2505, "2018-05-23");
+insert into diaries values(2506, "2018-05-24");
+insert into diaries values(2507, "2018-05-25");
+insert into diaries values(2508, "2018-05-26");
+insert into diaries values(2509, "2018-05-27");
+insert into diaries values(2510, "2018-05-28");
+insert into diaries values(2511, "2018-05-29");
+insert into diaries values(2512, "2018-05-30");
+insert into diaries values(2513, "2018-05-31");
+insert into diaries values(2514, "2018-06-01");
+insert into diaries values(2515, "2018-06-02");
+insert into diaries values(2516, "2018-06-03");
+insert into diaries values(2517, "2018-06-04");
+insert into diaries values(2518, "2018-06-05");
+insert into diaries values(2519, "2018-06-06");
+insert into diaries values(2520, "2018-06-07");
+insert into diaries values(2521, "2018-06-08");
+insert into diaries values(2522, "2018-06-09");
+insert into diaries values(2523, "2018-06-10");
+insert into diaries values(2524, "2018-06-11");
+insert into diaries values(2525, "2018-06-12");
+insert into diaries values(2526, "2018-06-13");
+insert into diaries values(2527, "2018-06-14");
+insert into diaries values(2528, "2018-06-15");
+insert into diaries values(2529, "2018-06-16");
+insert into diaries values(2530, "2018-06-17");
+insert into diaries values(2531, "2018-06-18");
+insert into diaries values(2532, "2018-06-19");
+insert into diaries values(2533, "2018-06-20");
+insert into diaries values(2534, "2018-06-21");
+insert into diaries values(2535, "2018-06-22");
+insert into diaries values(2536, "2018-06-23");
+insert into diaries values(2537, "2018-06-24");
+insert into diaries values(2538, "2018-06-25");
+insert into diaries values(2539, "2018-06-26");
+insert into diaries values(2540, "2018-06-27");
+insert into diaries values(2541, "2018-06-28");
+insert into diaries values(2542, "2018-06-29");
+insert into diaries values(2543, "2018-06-30");
+insert into diaries values(2544, "2018-07-01");
+insert into diaries values(2545, "2018-07-02");
+insert into diaries values(2546, "2018-07-03");
+insert into diaries values(2547, "2018-07-04");
+insert into diaries values(2548, "2018-07-05");
+insert into diaries values(2549, "2018-07-06");
+insert into diaries values(2550, "2018-07-07");
+insert into diaries values(2551, "2018-07-08");
+insert into diaries values(2552, "2018-07-09");
+insert into diaries values(2553, "2018-07-10");
+insert into diaries values(2554, "2018-07-11");
+insert into diaries values(2555, "2018-07-12");
+insert into diaries values(2556, "2018-07-13");
+insert into diaries values(2557, "2018-07-14");
+insert into diaries values(2558, "2018-07-15");
+insert into diaries values(2559, "2018-07-16");
+insert into diaries values(2560, "2018-07-17");
+insert into diaries values(2561, "2018-07-18");
+insert into diaries values(2562, "2018-07-19");
+insert into diaries values(2563, "2018-07-20");
+insert into diaries values(2564, "2018-07-21");
+insert into diaries values(2565, "2018-07-22");
+insert into diaries values(2566, "2018-07-23");
+insert into diaries values(2567, "2018-07-24");
+insert into diaries values(2568, "2018-07-25");
+insert into diaries values(2569, "2018-07-26");
+insert into diaries values(2570, "2018-07-27");
+insert into diaries values(2571, "2018-07-28");
+insert into diaries values(2572, "2018-07-29");
+insert into diaries values(2573, "2018-07-30");
+insert into diaries values(2574, "2018-07-31");
+insert into diaries values(2575, "2018-08-01");
+insert into diaries values(2576, "2018-08-02");
+insert into diaries values(2577, "2018-08-03");
+insert into diaries values(2578, "2018-08-04");
+insert into diaries values(2579, "2018-08-05");
+insert into diaries values(2580, "2018-08-06");
+insert into diaries values(2581, "2018-08-07");
+insert into diaries values(2582, "2018-08-08");
+insert into diaries values(2583, "2018-08-09");
+insert into diaries values(2584, "2018-08-10");
+insert into diaries values(2585, "2018-08-11");
+insert into diaries values(2586, "2018-08-12");
+insert into diaries values(2587, "2018-08-13");
+insert into diaries values(2588, "2018-08-14");
+insert into diaries values(2589, "2018-08-15");
+insert into diaries values(2590, "2018-08-16");
+insert into diaries values(2591, "2018-08-17");
+insert into diaries values(2592, "2018-08-18");
+insert into diaries values(2593, "2018-08-19");
+insert into diaries values(2594, "2018-08-20");
+insert into diaries values(2595, "2018-08-21");
+insert into diaries values(2596, "2018-08-22");
+insert into diaries values(2597, "2018-08-23");
+insert into diaries values(2598, "2018-08-24");
+insert into diaries values(2599, "2018-08-25");
+insert into diaries values(2600, "2018-08-26");
+insert into diaries values(2601, "2018-08-27");
+insert into diaries values(2602, "2018-08-28");
+insert into diaries values(2603, "2018-08-29");
+insert into diaries values(2604, "2018-08-30");
+insert into diaries values(2605, "2018-08-31");
+insert into diaries values(2606, "2018-09-01");
+insert into diaries values(2607, "2018-09-02");
+insert into diaries values(2608, "2018-09-03");
+insert into diaries values(2609, "2018-09-04");
+insert into diaries values(2610, "2018-09-05");
+insert into diaries values(2611, "2018-09-06");
+insert into diaries values(2612, "2018-09-07");
+insert into diaries values(2613, "2018-09-08");
+insert into diaries values(2614, "2018-09-09");
+insert into diaries values(2615, "2018-09-10");
+insert into diaries values(2616, "2018-09-11");
+insert into diaries values(2617, "2018-09-12");
+insert into diaries values(2618, "2018-09-13");
+insert into diaries values(2619, "2018-09-14");
+insert into diaries values(2620, "2018-09-15");
+insert into diaries values(2621, "2018-09-16");
+insert into diaries values(2622, "2018-09-17");
+insert into diaries values(2623, "2018-09-18");
+insert into diaries values(2624, "2018-09-19");
+insert into diaries values(2625, "2018-09-20");
+insert into diaries values(2626, "2018-09-21");
+insert into diaries values(2627, "2018-09-22");
+insert into diaries values(2628, "2018-09-23");
+insert into diaries values(2629, "2018-09-24");
+insert into diaries values(2630, "2018-09-25");
+insert into diaries values(2631, "2018-09-26");
+insert into diaries values(2632, "2018-09-27");
+insert into diaries values(2633, "2018-09-28");
+insert into diaries values(2634, "2018-09-29");
+insert into diaries values(2635, "2018-09-30");
+insert into diaries values(2636, "2018-10-01");
+insert into diaries values(2637, "2018-10-02");
+insert into diaries values(2638, "2018-10-03");
+insert into diaries values(2639, "2018-10-04");
+insert into diaries values(2640, "2018-10-05");
+insert into diaries values(2641, "2018-10-06");
+insert into diaries values(2642, "2018-10-07");
+insert into diaries values(2643, "2018-10-08");
+insert into diaries values(2644, "2018-10-09");
+insert into diaries values(2645, "2018-10-10");
+insert into diaries values(2646, "2018-10-11");
+insert into diaries values(2647, "2018-10-12");
+insert into diaries values(2648, "2018-10-13");
+insert into diaries values(2649, "2018-10-14");
+insert into diaries values(2650, "2018-10-15");
+insert into diaries values(2651, "2018-10-16");
+insert into diaries values(2652, "2018-10-17");
+insert into diaries values(2653, "2018-10-18");
+insert into diaries values(2654, "2018-10-19");
+insert into diaries values(2655, "2018-10-20");
+insert into diaries values(2656, "2018-10-21");
+insert into diaries values(2657, "2018-10-22");
+insert into diaries values(2658, "2018-10-23");
+insert into diaries values(2659, "2018-10-24");
+insert into diaries values(2660, "2018-10-25");
+insert into diaries values(2661, "2018-10-26");
+insert into diaries values(2662, "2018-10-27");
+insert into diaries values(2663, "2018-10-28");
+insert into diaries values(2664, "2018-10-29");
+insert into diaries values(2665, "2018-10-30");
+insert into diaries values(2666, "2018-10-31");
+insert into diaries values(2667, "2018-11-01");
+insert into diaries values(2668, "2018-11-02");
+insert into diaries values(2669, "2018-11-03");
+insert into diaries values(2670, "2018-11-04");
+insert into diaries values(2671, "2018-11-05");
+insert into diaries values(2672, "2018-11-06");
+insert into diaries values(2673, "2018-11-07");
+insert into diaries values(2674, "2018-11-08");
+insert into diaries values(2675, "2018-11-09");
+insert into diaries values(2676, "2018-11-10");
+insert into diaries values(2677, "2018-11-11");
+insert into diaries values(2678, "2018-11-12");
+insert into diaries values(2679, "2018-11-13");
+insert into diaries values(2680, "2018-11-14");
+insert into diaries values(2681, "2018-11-15");
+insert into diaries values(2682, "2018-11-16");
+insert into diaries values(2683, "2018-11-17");
+insert into diaries values(2684, "2018-11-18");
+insert into diaries values(2685, "2018-11-19");
+insert into diaries values(2686, "2018-11-20");
+insert into diaries values(2687, "2018-11-21");
+insert into diaries values(2688, "2018-11-22");
+insert into diaries values(2689, "2018-11-23");
+insert into diaries values(2690, "2018-11-24");
+insert into diaries values(2691, "2018-11-25");
+insert into diaries values(2692, "2018-11-26");
+insert into diaries values(2693, "2018-11-27");
+insert into diaries values(2694, "2018-11-28");
+insert into diaries values(2695, "2018-11-29");
+insert into diaries values(2696, "2018-11-30");
+insert into diaries values(2697, "2018-12-01");
+insert into diaries values(2698, "2018-12-02");
+insert into diaries values(2699, "2018-12-03");
+insert into diaries values(2700, "2018-12-04");
+insert into diaries values(2701, "2018-12-05");
+insert into diaries values(2702, "2018-12-06");
+insert into diaries values(2703, "2018-12-07");
+insert into diaries values(2704, "2018-12-08");
+insert into diaries values(2705, "2018-12-09");
+insert into diaries values(2706, "2018-12-10");
+insert into diaries values(2707, "2018-12-11");
+insert into diaries values(2708, "2018-12-12");
+insert into diaries values(2709, "2018-12-13");
+insert into diaries values(2710, "2018-12-14");
+insert into diaries values(2711, "2018-12-15");
+insert into diaries values(2712, "2018-12-16");
+insert into diaries values(2713, "2018-12-17");
+insert into diaries values(2714, "2018-12-18");
+insert into diaries values(2715, "2018-12-19");
+insert into diaries values(2716, "2018-12-20");
+insert into diaries values(2717, "2018-12-21");
+insert into diaries values(2718, "2018-12-22");
+insert into diaries values(2719, "2018-12-23");
+insert into diaries values(2720, "2018-12-24");
+insert into diaries values(2721, "2018-12-25");
+insert into diaries values(2722, "2018-12-26");
+insert into diaries values(2723, "2018-12-27");
+insert into diaries values(2724, "2018-12-28");
+insert into diaries values(2725, "2018-12-29");
+insert into diaries values(2726, "2018-12-30");
+insert into diaries values(2727, "2018-12-31");
+insert into diaries values(2728, "2019-01-01");
+insert into diaries values(2729, "2019-01-02");
+insert into diaries values(2730, "2019-01-03");
+insert into diaries values(2731, "2019-01-04");
+insert into diaries values(2732, "2019-01-05");
+insert into diaries values(2733, "2019-01-06");
+insert into diaries values(2734, "2019-01-07");
+insert into diaries values(2735, "2019-01-08");
+insert into diaries values(2736, "2019-01-09");
+insert into diaries values(2737, "2019-01-10");
+insert into diaries values(2738, "2019-01-11");
+insert into diaries values(2739, "2019-01-12");
+insert into diaries values(2740, "2019-01-13");
+insert into diaries values(2741, "2019-01-14");
+insert into diaries values(2742, "2019-01-15");
+insert into diaries values(2743, "2019-01-16");
+insert into diaries values(2744, "2019-01-17");
+insert into diaries values(2745, "2019-01-18");
+insert into diaries values(2746, "2019-01-19");
+insert into diaries values(2747, "2019-01-20");
+insert into diaries values(2748, "2019-01-21");
+insert into diaries values(2749, "2019-01-22");
+insert into diaries values(2750, "2019-01-23");
+insert into diaries values(2751, "2019-01-24");
+insert into diaries values(2752, "2019-01-25");
+insert into diaries values(2753, "2019-01-26");
+insert into diaries values(2754, "2019-01-27");
+insert into diaries values(2755, "2019-01-28");
+insert into diaries values(2756, "2019-01-29");
+insert into diaries values(2757, "2019-01-30");
+insert into diaries values(2758, "2019-01-31");
+insert into diaries values(2759, "2019-02-01");
+insert into diaries values(2760, "2019-02-02");
+insert into diaries values(2761, "2019-02-03");
+insert into diaries values(2762, "2019-02-04");
+insert into diaries values(2763, "2019-02-05");
+insert into diaries values(2764, "2019-02-06");
+insert into diaries values(2765, "2019-02-07");
+insert into diaries values(2766, "2019-02-08");
+insert into diaries values(2767, "2019-02-09");
+insert into diaries values(2768, "2019-02-10");
+insert into diaries values(2769, "2019-02-11");
+insert into diaries values(2770, "2019-02-12");
+insert into diaries values(2771, "2019-02-13");
+insert into diaries values(2772, "2019-02-14");
+insert into diaries values(2773, "2019-02-15");
+insert into diaries values(2774, "2019-02-16");
+insert into diaries values(2775, "2019-02-17");
+insert into diaries values(2776, "2019-02-18");
+insert into diaries values(2777, "2019-02-19");
+insert into diaries values(2778, "2019-02-20");
+insert into diaries values(2779, "2019-02-21");
+insert into diaries values(2780, "2019-02-22");
+insert into diaries values(2781, "2019-02-23");
+insert into diaries values(2782, "2019-02-24");
+insert into diaries values(2783, "2019-02-25");
+insert into diaries values(2784, "2019-02-26");
+insert into diaries values(2785, "2019-02-27");
+insert into diaries values(2786, "2019-02-28");
+insert into diaries values(2787, "2019-03-01");
+insert into diaries values(2788, "2019-03-02");
+insert into diaries values(2789, "2019-03-03");
+insert into diaries values(2790, "2019-03-04");
+insert into diaries values(2791, "2019-03-05");
+insert into diaries values(2792, "2019-03-06");
+insert into diaries values(2793, "2019-03-07");
+insert into diaries values(2794, "2019-03-08");
+insert into diaries values(2795, "2019-03-09");
+insert into diaries values(2796, "2019-03-10");
+insert into diaries values(2797, "2019-03-11");
+insert into diaries values(2798, "2019-03-12");
+insert into diaries values(2799, "2019-03-13");
+insert into diaries values(2800, "2019-03-14");
+insert into diaries values(2801, "2019-03-15");
+insert into diaries values(2802, "2019-03-16");
+insert into diaries values(2803, "2019-03-17");
+insert into diaries values(2804, "2019-03-18");
+insert into diaries values(2805, "2019-03-19");
+insert into diaries values(2806, "2019-03-20");
+insert into diaries values(2807, "2019-03-21");
+insert into diaries values(2808, "2019-03-22");
+insert into diaries values(2809, "2019-03-23");
+insert into diaries values(2810, "2019-03-24");
+insert into diaries values(2811, "2019-03-25");
+insert into diaries values(2812, "2019-03-26");
+insert into diaries values(2813, "2019-03-27");
+insert into diaries values(2814, "2019-03-28");
+insert into diaries values(2815, "2019-03-29");
+insert into diaries values(2816, "2019-03-30");
+insert into diaries values(2817, "2019-03-31");
+insert into diaries values(2818, "2019-04-01");
+insert into diaries values(2819, "2019-04-02");
+insert into diaries values(2820, "2019-04-03");
+insert into diaries values(2821, "2019-04-04");
+insert into diaries values(2822, "2019-04-05");
+insert into diaries values(2823, "2019-04-06");
+insert into diaries values(2824, "2019-04-07");
+insert into diaries values(2825, "2019-04-08");
+insert into diaries values(2826, "2019-04-09");
+insert into diaries values(2827, "2019-04-10");
+insert into diaries values(2828, "2019-04-11");
+insert into diaries values(2829, "2019-04-12");
+insert into diaries values(2830, "2019-04-13");
+insert into diaries values(2831, "2019-04-14");
+insert into diaries values(2832, "2019-04-15");
+insert into diaries values(2833, "2019-04-16");
+insert into diaries values(2834, "2019-04-17");
+insert into diaries values(2835, "2019-04-18");
+insert into diaries values(2836, "2019-04-19");
+insert into diaries values(2837, "2019-04-20");
+insert into diaries values(2838, "2019-04-21");
+insert into diaries values(2839, "2019-04-22");
+insert into diaries values(2840, "2019-04-23");
+insert into diaries values(2841, "2019-04-24");
+insert into diaries values(2842, "2019-04-25");
+insert into diaries values(2843, "2019-04-26");
+insert into diaries values(2844, "2019-04-27");
+insert into diaries values(2845, "2019-04-28");
+insert into diaries values(2846, "2019-04-29");
+insert into diaries values(2847, "2019-04-30");
+insert into diaries values(2848, "2019-05-01");
+insert into diaries values(2849, "2019-05-02");
+insert into diaries values(2850, "2019-05-03");
+insert into diaries values(2851, "2019-05-04");
+insert into diaries values(2852, "2019-05-05");
+insert into diaries values(2853, "2019-05-06");
+insert into diaries values(2854, "2019-05-07");
+insert into diaries values(2855, "2019-05-08");
+insert into diaries values(2856, "2019-05-09");
+insert into diaries values(2857, "2019-05-10");
+insert into diaries values(2858, "2019-05-11");
+insert into diaries values(2859, "2019-05-12");
+insert into diaries values(2860, "2019-05-13");
+insert into diaries values(2861, "2019-05-14");
+insert into diaries values(2862, "2019-05-15");
+insert into diaries values(2863, "2019-05-16");
+insert into diaries values(2864, "2019-05-17");
+insert into diaries values(2865, "2019-05-18");
+insert into diaries values(2866, "2019-05-19");
+insert into diaries values(2867, "2019-05-20");
+insert into diaries values(2868, "2019-05-21");
+insert into diaries values(2869, "2019-05-22");
+insert into diaries values(2870, "2019-05-23");
+insert into diaries values(2871, "2019-05-24");
+insert into diaries values(2872, "2019-05-25");
+insert into diaries values(2873, "2019-05-26");
+insert into diaries values(2874, "2019-05-27");
+insert into diaries values(2875, "2019-05-28");
+insert into diaries values(2876, "2019-05-29");
+insert into diaries values(2877, "2019-05-30");
+insert into diaries values(2878, "2019-05-31");
+insert into diaries values(2879, "2019-06-01");
+insert into diaries values(2880, "2019-06-02");
+insert into diaries values(2881, "2019-06-03");
+insert into diaries values(2882, "2019-06-04");
+insert into diaries values(2883, "2019-06-05");
+insert into diaries values(2884, "2019-06-06");
+insert into diaries values(2885, "2019-06-07");
+insert into diaries values(2886, "2019-06-08");
+insert into diaries values(2887, "2019-06-09");
+insert into diaries values(2888, "2019-06-10");
+insert into diaries values(2889, "2019-06-11");
+insert into diaries values(2890, "2019-06-12");
+insert into diaries values(2891, "2019-06-13");
+insert into diaries values(2892, "2019-06-14");
+insert into diaries values(2893, "2019-06-15");
+insert into diaries values(2894, "2019-06-16");
+insert into diaries values(2895, "2019-06-17");
+insert into diaries values(2896, "2019-06-18");
+insert into diaries values(2897, "2019-06-19");
+insert into diaries values(2898, "2019-06-20");
+insert into diaries values(2899, "2019-06-21");
+insert into diaries values(2900, "2019-06-22");
+insert into diaries values(2901, "2019-06-23");
+insert into diaries values(2902, "2019-06-24");
+insert into diaries values(2903, "2019-06-25");
+insert into diaries values(2904, "2019-06-26");
+insert into diaries values(2905, "2019-06-27");
+insert into diaries values(2906, "2019-06-28");
+insert into diaries values(2907, "2019-06-29");
+insert into diaries values(2908, "2019-06-30");
+insert into diaries values(2909, "2019-07-01");
+insert into diaries values(2910, "2019-07-02");
+insert into diaries values(2911, "2019-07-03");
+insert into diaries values(2912, "2019-07-04");
+insert into diaries values(2913, "2019-07-05");
+insert into diaries values(2914, "2019-07-06");
+insert into diaries values(2915, "2019-07-07");
+insert into diaries values(2916, "2019-07-08");
+insert into diaries values(2917, "2019-07-09");
+insert into diaries values(2918, "2019-07-10");
+insert into diaries values(2919, "2019-07-11");
+insert into diaries values(2920, "2019-07-12");
+insert into diaries values(2921, "2019-07-13");
+insert into diaries values(2922, "2019-07-14");
+insert into diaries values(2923, "2019-07-15");
+insert into diaries values(2924, "2019-07-16");
+insert into diaries values(2925, "2019-07-17");
+insert into diaries values(2926, "2019-07-18");
+insert into diaries values(2927, "2019-07-19");
+insert into diaries values(2928, "2019-07-20");
+insert into diaries values(2929, "2019-07-21");
+insert into diaries values(2930, "2019-07-22");
+insert into diaries values(2931, "2019-07-23");
+insert into diaries values(2932, "2019-07-24");
+insert into diaries values(2933, "2019-07-25");
+insert into diaries values(2934, "2019-07-26");
+insert into diaries values(2935, "2019-07-27");
+insert into diaries values(2936, "2019-07-28");
+insert into diaries values(2937, "2019-07-29");
+insert into diaries values(2938, "2019-07-30");
+insert into diaries values(2939, "2019-07-31");
+insert into diaries values(2940, "2019-08-01");
+insert into diaries values(2941, "2019-08-02");
+insert into diaries values(2942, "2019-08-03");
+insert into diaries values(2943, "2019-08-04");
+insert into diaries values(2944, "2019-08-05");
+insert into diaries values(2945, "2019-08-06");
+insert into diaries values(2946, "2019-08-07");
+insert into diaries values(2947, "2019-08-08");
+insert into diaries values(2948, "2019-08-09");
+insert into diaries values(2949, "2019-08-10");
+insert into diaries values(2950, "2019-08-11");
+insert into diaries values(2951, "2019-08-12");
+insert into diaries values(2952, "2019-08-13");
+insert into diaries values(2953, "2019-08-14");
+insert into diaries values(2954, "2019-08-15");
+insert into diaries values(2955, "2019-08-16");
+insert into diaries values(2956, "2019-08-17");
+insert into diaries values(2957, "2019-08-18");
+insert into diaries values(2958, "2019-08-19");
+insert into diaries values(2959, "2019-08-20");
+insert into diaries values(2960, "2019-08-21");
+insert into diaries values(2961, "2019-08-22");
+insert into diaries values(2962, "2019-08-23");
+insert into diaries values(2963, "2019-08-24");
+insert into diaries values(2964, "2019-08-25");
+insert into diaries values(2965, "2019-08-26");
+insert into diaries values(2966, "2019-08-27");
+insert into diaries values(2967, "2019-08-28");
+insert into diaries values(2968, "2019-08-29");
+insert into diaries values(2969, "2019-08-30");
+insert into diaries values(2970, "2019-08-31");
+insert into diaries values(2971, "2019-09-01");
+insert into diaries values(2972, "2019-09-02");
+insert into diaries values(2973, "2019-09-03");
+insert into diaries values(2974, "2019-09-04");
+insert into diaries values(2975, "2019-09-05");
+insert into diaries values(2976, "2019-09-06");
+insert into diaries values(2977, "2019-09-07");
+insert into diaries values(2978, "2019-09-08");
+insert into diaries values(2979, "2019-09-09");
+insert into diaries values(2980, "2019-09-10");
+insert into diaries values(2981, "2019-09-11");
+insert into diaries values(2982, "2019-09-12");
+insert into diaries values(2983, "2019-09-13");
+insert into diaries values(2984, "2019-09-14");
+insert into diaries values(2985, "2019-09-15");
+insert into diaries values(2986, "2019-09-16");
+insert into diaries values(2987, "2019-09-17");
+insert into diaries values(2988, "2019-09-18");
+insert into diaries values(2989, "2019-09-19");
+insert into diaries values(2990, "2019-09-20");
+insert into diaries values(2991, "2019-09-21");
+insert into diaries values(2992, "2019-09-22");
+insert into diaries values(2993, "2019-09-23");
+insert into diaries values(2994, "2019-09-24");
+insert into diaries values(2995, "2019-09-25");
+insert into diaries values(2996, "2019-09-26");
+insert into diaries values(2997, "2019-09-27");
+insert into diaries values(2998, "2019-09-28");
+insert into diaries values(2999, "2019-09-29");
+insert into diaries values(3000, "2019-09-30");
+insert into diaries values(3001, "2019-10-01");
+insert into diaries values(3002, "2019-10-02");
+insert into diaries values(3003, "2019-10-03");
+insert into diaries values(3004, "2019-10-04");
+insert into diaries values(3005, "2019-10-05");
+insert into diaries values(3006, "2019-10-06");
+insert into diaries values(3007, "2019-10-07");
+insert into diaries values(3008, "2019-10-08");
+insert into diaries values(3009, "2019-10-09");
+insert into diaries values(3010, "2019-10-10");
+insert into diaries values(3011, "2019-10-11");
+insert into diaries values(3012, "2019-10-12");
+insert into diaries values(3013, "2019-10-13");
+insert into diaries values(3014, "2019-10-14");
+insert into diaries values(3015, "2019-10-15");
+insert into diaries values(3016, "2019-10-16");
+insert into diaries values(3017, "2019-10-17");
+insert into diaries values(3018, "2019-10-18");
+insert into diaries values(3019, "2019-10-19");
+insert into diaries values(3020, "2019-10-20");
+insert into diaries values(3021, "2019-10-21");
+insert into diaries values(3022, "2019-10-22");
+insert into diaries values(3023, "2019-10-23");
+insert into diaries values(3024, "2019-10-24");
+insert into diaries values(3025, "2019-10-25");
+insert into diaries values(3026, "2019-10-26");
+insert into diaries values(3027, "2019-10-27");
+insert into diaries values(3028, "2019-10-28");
+insert into diaries values(3029, "2019-10-29");
+insert into diaries values(3030, "2019-10-30");
+insert into diaries values(3031, "2019-10-31");
+insert into diaries values(3032, "2019-11-01");
+insert into diaries values(3033, "2019-11-02");
+insert into diaries values(3034, "2019-11-03");
+insert into diaries values(3035, "2019-11-04");
+insert into diaries values(3036, "2019-11-05");
+insert into diaries values(3037, "2019-11-06");
+insert into diaries values(3038, "2019-11-07");
+insert into diaries values(3039, "2019-11-08");
+insert into diaries values(3040, "2019-11-09");
+insert into diaries values(3041, "2019-11-10");
+insert into diaries values(3042, "2019-11-11");
+insert into diaries values(3043, "2019-11-12");
+insert into diaries values(3044, "2019-11-13");
+insert into diaries values(3045, "2019-11-14");
+insert into diaries values(3046, "2019-11-15");
+insert into diaries values(3047, "2019-11-16");
+insert into diaries values(3048, "2019-11-17");
+insert into diaries values(3049, "2019-11-18");
+insert into diaries values(3050, "2019-11-19");
+insert into diaries values(3051, "2019-11-20");
+insert into diaries values(3052, "2019-11-21");
+insert into diaries values(3053, "2019-11-22");
+insert into diaries values(3054, "2019-11-23");
+insert into diaries values(3055, "2019-11-24");
+insert into diaries values(3056, "2019-11-25");
+insert into diaries values(3057, "2019-11-26");
+insert into diaries values(3058, "2019-11-27");
+insert into diaries values(3059, "2019-11-28");
+insert into diaries values(3060, "2019-11-29");
+insert into diaries values(3061, "2019-11-30");
+insert into diaries values(3062, "2019-12-01");
+insert into diaries values(3063, "2019-12-02");
+insert into diaries values(3064, "2019-12-03");
+insert into diaries values(3065, "2019-12-04");
+insert into diaries values(3066, "2019-12-05");
+insert into diaries values(3067, "2019-12-06");
+insert into diaries values(3068, "2019-12-07");
+insert into diaries values(3069, "2019-12-08");
+insert into diaries values(3070, "2019-12-09");
+insert into diaries values(3071, "2019-12-10");
+insert into diaries values(3072, "2019-12-11");
+insert into diaries values(3073, "2019-12-12");
+insert into diaries values(3074, "2019-12-13");
+insert into diaries values(3075, "2019-12-14");
+insert into diaries values(3076, "2019-12-15");
+insert into diaries values(3077, "2019-12-16");
+insert into diaries values(3078, "2019-12-17");
+insert into diaries values(3079, "2019-12-18");
+insert into diaries values(3080, "2019-12-19");
+insert into diaries values(3081, "2019-12-20");
+insert into diaries values(3082, "2019-12-21");
+insert into diaries values(3083, "2019-12-22");
+insert into diaries values(3084, "2019-12-23");
+insert into diaries values(3085, "2019-12-24");
+insert into diaries values(3086, "2019-12-25");
+insert into diaries values(3087, "2019-12-26");
+insert into diaries values(3088, "2019-12-27");
+insert into diaries values(3089, "2019-12-28");
+insert into diaries values(3090, "2019-12-29");
+insert into diaries values(3091, "2019-12-30");
+insert into diaries values(3092, "2019-12-31");
+insert into diaries values(3093, "2020-01-01");
+insert into diaries values(3094, "2020-01-02");
+insert into diaries values(3095, "2020-01-03");
+insert into diaries values(3096, "2020-01-04");
+insert into diaries values(3097, "2020-01-05");
+insert into diaries values(3098, "2020-01-06");
+insert into diaries values(3099, "2020-01-07");
+insert into diaries values(3100, "2020-01-08");
+insert into diaries values(3101, "2020-01-09");
+insert into diaries values(3102, "2020-01-10");
+insert into diaries values(3103, "2020-01-11");
+insert into diaries values(3104, "2020-01-12");
+insert into diaries values(3105, "2020-01-13");
+insert into diaries values(3106, "2020-01-14");
+insert into diaries values(3107, "2020-01-15");
+insert into diaries values(3108, "2020-01-16");
+insert into diaries values(3109, "2020-01-17");
+insert into diaries values(3110, "2020-01-18");
+insert into diaries values(3111, "2020-01-19");
+insert into diaries values(3112, "2020-01-20");
+insert into diaries values(3113, "2020-01-21");
+insert into diaries values(3114, "2020-01-22");
+insert into diaries values(3115, "2020-01-23");
+insert into diaries values(3116, "2020-01-24");
+insert into diaries values(3117, "2020-01-25");
+insert into diaries values(3118, "2020-01-26");
+insert into diaries values(3119, "2020-01-27");
+insert into diaries values(3120, "2020-01-28");
+insert into diaries values(3121, "2020-01-29");
+insert into diaries values(3122, "2020-01-30");
+insert into diaries values(3123, "2020-01-31");
+insert into diaries values(3124, "2020-02-01");
+insert into diaries values(3125, "2020-02-02");
+insert into diaries values(3126, "2020-02-03");
+insert into diaries values(3127, "2020-02-04");
+insert into diaries values(3128, "2020-02-05");
+insert into diaries values(3129, "2020-02-06");
+insert into diaries values(3130, "2020-02-07");
+insert into diaries values(3131, "2020-02-08");
+insert into diaries values(3132, "2020-02-09");
+insert into diaries values(3133, "2020-02-10");
+insert into diaries values(3134, "2020-02-11");
+insert into diaries values(3135, "2020-02-12");
+insert into diaries values(3136, "2020-02-13");
+insert into diaries values(3137, "2020-02-14");
+insert into diaries values(3138, "2020-02-15");
+insert into diaries values(3139, "2020-02-16");
+insert into diaries values(3140, "2020-02-17");
+insert into diaries values(3141, "2020-02-18");
+insert into diaries values(3142, "2020-02-19");
+insert into diaries values(3143, "2020-02-20");
+insert into diaries values(3144, "2020-02-21");
+insert into diaries values(3145, "2020-02-22");
+insert into diaries values(3146, "2020-02-23");
+insert into diaries values(3147, "2020-02-24");
+insert into diaries values(3148, "2020-02-25");
+insert into diaries values(3149, "2020-02-26");
+insert into diaries values(3150, "2020-02-27");
+insert into diaries values(3151, "2020-02-28");
+insert into diaries values(3152, "2020-02-29");
+insert into diaries values(3153, "2020-03-01");
+insert into diaries values(3154, "2020-03-02");
+insert into diaries values(3155, "2020-03-03");
+insert into diaries values(3156, "2020-03-04");
+insert into diaries values(3157, "2020-03-05");
+insert into diaries values(3158, "2020-03-06");
+insert into diaries values(3159, "2020-03-07");
+insert into diaries values(3160, "2020-03-08");
+insert into diaries values(3161, "2020-03-09");
+insert into diaries values(3162, "2020-03-10");
+insert into diaries values(3163, "2020-03-11");
+insert into diaries values(3164, "2020-03-12");
+insert into diaries values(3165, "2020-03-13");
+insert into diaries values(3166, "2020-03-14");
+insert into diaries values(3167, "2020-03-15");
+insert into diaries values(3168, "2020-03-16");
+insert into diaries values(3169, "2020-03-17");
+insert into diaries values(3170, "2020-03-18");
+insert into diaries values(3171, "2020-03-19");
+insert into diaries values(3172, "2020-03-20");
+insert into diaries values(3173, "2020-03-21");
+insert into diaries values(3174, "2020-03-22");
+insert into diaries values(3175, "2020-03-23");
+insert into diaries values(3176, "2020-03-24");
+insert into diaries values(3177, "2020-03-25");
+insert into diaries values(3178, "2020-03-26");
+insert into diaries values(3179, "2020-03-27");
+insert into diaries values(3180, "2020-03-28");
+insert into diaries values(3181, "2020-03-29");
+insert into diaries values(3182, "2020-03-30");
+insert into diaries values(3183, "2020-03-31");
+insert into diaries values(3184, "2020-04-01");
+insert into diaries values(3185, "2020-04-02");
+insert into diaries values(3186, "2020-04-03");
+insert into diaries values(3187, "2020-04-04");
+insert into diaries values(3188, "2020-04-05");
+insert into diaries values(3189, "2020-04-06");
+insert into diaries values(3190, "2020-04-07");
+insert into diaries values(3191, "2020-04-08");
+insert into diaries values(3192, "2020-04-09");
+insert into diaries values(3193, "2020-04-10");
+insert into diaries values(3194, "2020-04-11");
+insert into diaries values(3195, "2020-04-12");
+insert into diaries values(3196, "2020-04-13");
+insert into diaries values(3197, "2020-04-14");
+insert into diaries values(3198, "2020-04-15");
+insert into diaries values(3199, "2020-04-16");
+insert into diaries values(3200, "2020-04-17");
+insert into diaries values(3201, "2020-04-18");
+insert into diaries values(3202, "2020-04-19");
+insert into diaries values(3203, "2020-04-20");
+insert into diaries values(3204, "2020-04-21");
+insert into diaries values(3205, "2020-04-22");
+insert into diaries values(3206, "2020-04-23");
+insert into diaries values(3207, "2020-04-24");
+insert into diaries values(3208, "2020-04-25");
+insert into diaries values(3209, "2020-04-26");
+insert into diaries values(3210, "2020-04-27");
+insert into diaries values(3211, "2020-04-28");
+insert into diaries values(3212, "2020-04-29");
+insert into diaries values(3213, "2020-04-30");
+insert into diaries values(3214, "2020-05-01");
+insert into diaries values(3215, "2020-05-02");
+insert into diaries values(3216, "2020-05-03");
+insert into diaries values(3217, "2020-05-04");
+insert into diaries values(3218, "2020-05-05");
+insert into diaries values(3219, "2020-05-06");
+insert into diaries values(3220, "2020-05-07");
+insert into diaries values(3221, "2020-05-08");
+insert into diaries values(3222, "2020-05-09");
+insert into diaries values(3223, "2020-05-10");
+insert into diaries values(3224, "2020-05-11");
+insert into diaries values(3225, "2020-05-12");
+insert into diaries values(3226, "2020-05-13");
+insert into diaries values(3227, "2020-05-14");
+insert into diaries values(3228, "2020-05-15");
+insert into diaries values(3229, "2020-05-16");
+insert into diaries values(3230, "2020-05-17");
+insert into diaries values(3231, "2020-05-18");
+insert into diaries values(3232, "2020-05-19");
+insert into diaries values(3233, "2020-05-20");
+insert into diaries values(3234, "2020-05-21");
+insert into diaries values(3235, "2020-05-22");
+insert into diaries values(3236, "2020-05-23");
+insert into diaries values(3237, "2020-05-24");
+insert into diaries values(3238, "2020-05-25");
+insert into diaries values(3239, "2020-05-26");
+insert into diaries values(3240, "2020-05-27");
+insert into diaries values(3241, "2020-05-28");
+insert into diaries values(3242, "2020-05-29");
+insert into diaries values(3243, "2020-05-30");
+insert into diaries values(3244, "2020-05-31");
+insert into diaries values(3245, "2020-06-01");
+insert into diaries values(3246, "2020-06-02");
+insert into diaries values(3247, "2020-06-03");
+insert into diaries values(3248, "2020-06-04");
+insert into diaries values(3249, "2020-06-05");
+insert into diaries values(3250, "2020-06-06");
+insert into diaries values(3251, "2020-06-07");
+insert into diaries values(3252, "2020-06-08");
+insert into diaries values(3253, "2020-06-09");
+insert into diaries values(3254, "2020-06-10");
+insert into diaries values(3255, "2020-06-11");
+insert into diaries values(3256, "2020-06-12");
+insert into diaries values(3257, "2020-06-13");
+insert into diaries values(3258, "2020-06-14");
+insert into diaries values(3259, "2020-06-15");
+insert into diaries values(3260, "2020-06-16");
+insert into diaries values(3261, "2020-06-17");
+insert into diaries values(3262, "2020-06-18");
+insert into diaries values(3263, "2020-06-19");
+insert into diaries values(3264, "2020-06-20");
+insert into diaries values(3265, "2020-06-21");
+insert into diaries values(3266, "2020-06-22");
+insert into diaries values(3267, "2020-06-23");
+insert into diaries values(3268, "2020-06-24");
+insert into diaries values(3269, "2020-06-25");
+insert into diaries values(3270, "2020-06-26");
+insert into diaries values(3271, "2020-06-27");
+insert into diaries values(3272, "2020-06-28");
+insert into diaries values(3273, "2020-06-29");
+insert into diaries values(3274, "2020-06-30");
+insert into diaries values(3275, "2020-07-01");
+insert into diaries values(3276, "2020-07-02");
+insert into diaries values(3277, "2020-07-03");
+insert into diaries values(3278, "2020-07-04");
+insert into diaries values(3279, "2020-07-05");
+insert into diaries values(3280, "2020-07-06");
+insert into diaries values(3281, "2020-07-07");
+insert into diaries values(3282, "2020-07-08");
+insert into diaries values(3283, "2020-07-09");
+insert into diaries values(3284, "2020-07-10");
+insert into diaries values(3285, "2020-07-11");
+insert into diaries values(3286, "2020-07-12");
+insert into diaries values(3287, "2020-07-13");
+insert into diaries values(3288, "2020-07-14");
+insert into diaries values(3289, "2020-07-15");
+insert into diaries values(3290, "2020-07-16");
+insert into diaries values(3291, "2020-07-17");
+insert into diaries values(3292, "2020-07-18");
+insert into diaries values(3293, "2020-07-19");
+insert into diaries values(3294, "2020-07-20");
+insert into diaries values(3295, "2020-07-21");
+insert into diaries values(3296, "2020-07-22");
+insert into diaries values(3297, "2020-07-23");
+insert into diaries values(3298, "2020-07-24");
+insert into diaries values(3299, "2020-07-25");
+insert into diaries values(3300, "2020-07-26");
+insert into diaries values(3301, "2020-07-27");
+insert into diaries values(3302, "2020-07-28");
+insert into diaries values(3303, "2020-07-29");
+insert into diaries values(3304, "2020-07-30");
+insert into diaries values(3305, "2020-07-31");
+insert into diaries values(3306, "2020-08-01");
+insert into diaries values(3307, "2020-08-02");
+insert into diaries values(3308, "2020-08-03");
+insert into diaries values(3309, "2020-08-04");
+insert into diaries values(3310, "2020-08-05");
+insert into diaries values(3311, "2020-08-06");
+insert into diaries values(3312, "2020-08-07");
+insert into diaries values(3313, "2020-08-08");
+insert into diaries values(3314, "2020-08-09");
+insert into diaries values(3315, "2020-08-10");
+insert into diaries values(3316, "2020-08-11");
+insert into diaries values(3317, "2020-08-12");
+insert into diaries values(3318, "2020-08-13");
+insert into diaries values(3319, "2020-08-14");
+insert into diaries values(3320, "2020-08-15");
+insert into diaries values(3321, "2020-08-16");
+insert into diaries values(3322, "2020-08-17");
+insert into diaries values(3323, "2020-08-18");
+insert into diaries values(3324, "2020-08-19");
+insert into diaries values(3325, "2020-08-20");
+insert into diaries values(3326, "2020-08-21");
+insert into diaries values(3327, "2020-08-22");
+insert into diaries values(3328, "2020-08-23");
+insert into diaries values(3329, "2020-08-24");
+insert into diaries values(3330, "2020-08-25");
+insert into diaries values(3331, "2020-08-26");
+insert into diaries values(3332, "2020-08-27");
+insert into diaries values(3333, "2020-08-28");
+insert into diaries values(3334, "2020-08-29");
+insert into diaries values(3335, "2020-08-30");
+insert into diaries values(3336, "2020-08-31");
+insert into diaries values(3337, "2020-09-01");
+insert into diaries values(3338, "2020-09-02");
+insert into diaries values(3339, "2020-09-03");
+insert into diaries values(3340, "2020-09-04");
+insert into diaries values(3341, "2020-09-05");
+insert into diaries values(3342, "2020-09-06");
+insert into diaries values(3343, "2020-09-07");
+insert into diaries values(3344, "2020-09-08");
+insert into diaries values(3345, "2020-09-09");
+insert into diaries values(3346, "2020-09-10");
+insert into diaries values(3347, "2020-09-11");
+insert into diaries values(3348, "2020-09-12");
+insert into diaries values(3349, "2020-09-13");
+insert into diaries values(3350, "2020-09-14");
+insert into diaries values(3351, "2020-09-15");
+insert into diaries values(3352, "2020-09-16");
+insert into diaries values(3353, "2020-09-17");
+insert into diaries values(3354, "2020-09-18");
+insert into diaries values(3355, "2020-09-19");
+insert into diaries values(3356, "2020-09-20");
+insert into diaries values(3357, "2020-09-21");
+insert into diaries values(3358, "2020-09-22");
+insert into diaries values(3359, "2020-09-23");
+insert into diaries values(3360, "2020-09-24");
+insert into diaries values(3361, "2020-09-25");
+insert into diaries values(3362, "2020-09-26");
+insert into diaries values(3363, "2020-09-27");
+insert into diaries values(3364, "2020-09-28");
+insert into diaries values(3365, "2020-09-29");
+insert into diaries values(3366, "2020-09-30");
+insert into diaries values(3367, "2020-10-01");
+insert into diaries values(3368, "2020-10-02");
+insert into diaries values(3369, "2020-10-03");
+insert into diaries values(3370, "2020-10-04");
+insert into diaries values(3371, "2020-10-05");
+insert into diaries values(3372, "2020-10-06");
+insert into diaries values(3373, "2020-10-07");
+insert into diaries values(3374, "2020-10-08");
+insert into diaries values(3375, "2020-10-09");
+insert into diaries values(3376, "2020-10-10");
+insert into diaries values(3377, "2020-10-11");
+insert into diaries values(3378, "2020-10-12");
+insert into diaries values(3379, "2020-10-13");
+insert into diaries values(3380, "2020-10-14");
+insert into diaries values(3381, "2020-10-15");
+insert into diaries values(3382, "2020-10-16");
+insert into diaries values(3383, "2020-10-17");
+insert into diaries values(3384, "2020-10-18");
+insert into diaries values(3385, "2020-10-19");
+insert into diaries values(3386, "2020-10-20");
+insert into diaries values(3387, "2020-10-21");
+insert into diaries values(3388, "2020-10-22");
+insert into diaries values(3389, "2020-10-23");
+insert into diaries values(3390, "2020-10-24");
+insert into diaries values(3391, "2020-10-25");
+insert into diaries values(3392, "2020-10-26");
+insert into diaries values(3393, "2020-10-27");
+insert into diaries values(3394, "2020-10-28");
+insert into diaries values(3395, "2020-10-29");
+insert into diaries values(3396, "2020-10-30");
+insert into diaries values(3397, "2020-10-31");
+insert into diaries values(3398, "2020-11-01");
+insert into diaries values(3399, "2020-11-02");
+insert into diaries values(3400, "2020-11-03");
+insert into diaries values(3401, "2020-11-04");
+insert into diaries values(3402, "2020-11-05");
+insert into diaries values(3403, "2020-11-06");
+insert into diaries values(3404, "2020-11-07");
+insert into diaries values(3405, "2020-11-08");
+insert into diaries values(3406, "2020-11-09");
+insert into diaries values(3407, "2020-11-10");
+insert into diaries values(3408, "2020-11-11");
+insert into diaries values(3409, "2020-11-12");
+insert into diaries values(3410, "2020-11-13");
+insert into diaries values(3411, "2020-11-14");
+insert into diaries values(3412, "2020-11-15");
+insert into diaries values(3413, "2020-11-16");
+insert into diaries values(3414, "2020-11-17");
+insert into diaries values(3415, "2020-11-18");
+insert into diaries values(3416, "2020-11-19");
+insert into diaries values(3417, "2020-11-20");
+insert into diaries values(3418, "2020-11-21");
+insert into diaries values(3419, "2020-11-22");
+insert into diaries values(3420, "2020-11-23");
+insert into diaries values(3421, "2020-11-24");
+insert into diaries values(3422, "2020-11-25");
+insert into diaries values(3423, "2020-11-26");
+insert into diaries values(3424, "2020-11-27");
+insert into diaries values(3425, "2020-11-28");
+insert into diaries values(3426, "2020-11-29");
+insert into diaries values(3427, "2020-11-30");
+insert into diaries values(3428, "2020-12-01");
+insert into diaries values(3429, "2020-12-02");
+insert into diaries values(3430, "2020-12-03");
+insert into diaries values(3431, "2020-12-04");
+insert into diaries values(3432, "2020-12-05");
+insert into diaries values(3433, "2020-12-06");
+insert into diaries values(3434, "2020-12-07");
+insert into diaries values(3435, "2020-12-08");
+insert into diaries values(3436, "2020-12-09");
+insert into diaries values(3437, "2020-12-10");
+insert into diaries values(3438, "2020-12-11");
+insert into diaries values(3439, "2020-12-12");
+insert into diaries values(3440, "2020-12-13");
+insert into diaries values(3441, "2020-12-14");
+insert into diaries values(3442, "2020-12-15");
+insert into diaries values(3443, "2020-12-16");
+insert into diaries values(3444, "2020-12-17");
+insert into diaries values(3445, "2020-12-18");
+insert into diaries values(3446, "2020-12-19");
+insert into diaries values(3447, "2020-12-20");
+insert into diaries values(3448, "2020-12-21");
+insert into diaries values(3449, "2020-12-22");
+insert into diaries values(3450, "2020-12-23");
+insert into diaries values(3451, "2020-12-24");
+insert into diaries values(3452, "2020-12-25");
+insert into diaries values(3453, "2020-12-26");
+insert into diaries values(3454, "2020-12-27");
+insert into diaries values(3455, "2020-12-28");
+insert into diaries values(3456, "2020-12-29");
+insert into diaries values(3457, "2020-12-30");
+insert into diaries values(3458, "2020-12-31");
+insert into diaries values(3459, "2021-01-01");
+insert into diaries values(3460, "2021-01-02");
+insert into diaries values(3461, "2021-01-03");
+insert into diaries values(3462, "2021-01-04");
+insert into diaries values(3463, "2021-01-05");
+insert into diaries values(3464, "2021-01-06");
+insert into diaries values(3465, "2021-01-07");
+insert into diaries values(3466, "2021-01-08");
+insert into diaries values(3467, "2021-01-09");
+insert into diaries values(3468, "2021-01-10");
+insert into diaries values(3469, "2021-01-11");
+insert into diaries values(3470, "2021-01-12");
+insert into diaries values(3471, "2021-01-13");
+insert into diaries values(3472, "2021-01-14");
+insert into diaries values(3473, "2021-01-15");
+insert into diaries values(3474, "2021-01-16");
+insert into diaries values(3475, "2021-01-17");
+insert into diaries values(3476, "2021-01-18");
+insert into diaries values(3477, "2021-01-19");
+insert into diaries values(3478, "2021-01-20");
+insert into diaries values(3479, "2021-01-21");
+insert into diaries values(3480, "2021-01-22");
+insert into diaries values(3481, "2021-01-23");
+insert into diaries values(3482, "2021-01-24");
+insert into diaries values(3483, "2021-01-25");
+insert into diaries values(3484, "2021-01-26");
+insert into diaries values(3485, "2021-01-27");
+insert into diaries values(3486, "2021-01-28");
+insert into diaries values(3487, "2021-01-29");
+insert into diaries values(3488, "2021-01-30");
+insert into diaries values(3489, "2021-01-31");
+insert into diaries values(3490, "2021-02-01");
+insert into diaries values(3491, "2021-02-02");
+insert into diaries values(3492, "2021-02-03");
+insert into diaries values(3493, "2021-02-04");
+insert into diaries values(3494, "2021-02-05");
+insert into diaries values(3495, "2021-02-06");
+insert into diaries values(3496, "2021-02-07");
+insert into diaries values(3497, "2021-02-08");
+insert into diaries values(3498, "2021-02-09");
+insert into diaries values(3499, "2021-02-10");
+insert into diaries values(3500, "2021-02-11");
+insert into diaries values(3501, "2021-02-12");
+insert into diaries values(3502, "2021-02-13");
+insert into diaries values(3503, "2021-02-14");
+insert into diaries values(3504, "2021-02-15");
+insert into diaries values(3505, "2021-02-16");
+insert into diaries values(3506, "2021-02-17");
+insert into diaries values(3507, "2021-02-18");
+insert into diaries values(3508, "2021-02-19");
+insert into diaries values(3509, "2021-02-20");
+insert into diaries values(3510, "2021-02-21");
+insert into diaries values(3511, "2021-02-22");
+insert into diaries values(3512, "2021-02-23");
+insert into diaries values(3513, "2021-02-24");
+insert into diaries values(3514, "2021-02-25");
+insert into diaries values(3515, "2021-02-26");
+insert into diaries values(3516, "2021-02-27");
+insert into diaries values(3517, "2021-02-28");
+insert into diaries values(3518, "2021-03-01");
+insert into diaries values(3519, "2021-03-02");
+insert into diaries values(3520, "2021-03-03");
+insert into diaries values(3521, "2021-03-04");
+insert into diaries values(3522, "2021-03-05");
+insert into diaries values(3523, "2021-03-06");
+insert into diaries values(3524, "2021-03-07");
+insert into diaries values(3525, "2021-03-08");
+insert into diaries values(3526, "2021-03-09");
+insert into diaries values(3527, "2021-03-10");
+insert into diaries values(3528, "2021-03-11");
+insert into diaries values(3529, "2021-03-12");
+insert into diaries values(3530, "2021-03-13");
+insert into diaries values(3531, "2021-03-14");
+insert into diaries values(3532, "2021-03-15");
+insert into diaries values(3533, "2021-03-16");
+insert into diaries values(3534, "2021-03-17");
+insert into diaries values(3535, "2021-03-18");
+insert into diaries values(3536, "2021-03-19");
+insert into diaries values(3537, "2021-03-20");
+insert into diaries values(3538, "2021-03-21");
+insert into diaries values(3539, "2021-03-22");
+insert into diaries values(3540, "2021-03-23");
+insert into diaries values(3541, "2021-03-24");
+insert into diaries values(3542, "2021-03-25");
+insert into diaries values(3543, "2021-03-26");
+insert into diaries values(3544, "2021-03-27");
+insert into diaries values(3545, "2021-03-28");
+insert into diaries values(3546, "2021-03-29");
+insert into diaries values(3547, "2021-03-30");
+insert into diaries values(3548, "2021-03-31");
+insert into diaries values(3549, "2021-04-01");
+insert into diaries values(3550, "2021-04-02");
+insert into diaries values(3551, "2021-04-03");
+insert into diaries values(3552, "2021-04-04");
+insert into diaries values(3553, "2021-04-05");
+insert into diaries values(3554, "2021-04-06");
+insert into diaries values(3555, "2021-04-07");
+insert into diaries values(3556, "2021-04-08");
+insert into diaries values(3557, "2021-04-09");
+insert into diaries values(3558, "2021-04-10");
+insert into diaries values(3559, "2021-04-11");
+insert into diaries values(3560, "2021-04-12");
+insert into diaries values(3561, "2021-04-13");
+insert into diaries values(3562, "2021-04-14");
+insert into diaries values(3563, "2021-04-15");
+insert into diaries values(3564, "2021-04-16");
+insert into diaries values(3565, "2021-04-17");
+insert into diaries values(3566, "2021-04-18");
+insert into diaries values(3567, "2021-04-19");
+insert into diaries values(3568, "2021-04-20");
+insert into diaries values(3569, "2021-04-21");
+insert into diaries values(3570, "2021-04-22");
+insert into diaries values(3571, "2021-04-23");
+insert into diaries values(3572, "2021-04-24");
+insert into diaries values(3573, "2021-04-25");
+insert into diaries values(3574, "2021-04-26");
+insert into diaries values(3575, "2021-04-27");
+insert into diaries values(3576, "2021-04-28");
+insert into diaries values(3577, "2021-04-29");
+insert into diaries values(3578, "2021-04-30");
+insert into diaries values(3579, "2021-05-01");
+insert into diaries values(3580, "2021-05-02");
+insert into diaries values(3581, "2021-05-03");
+insert into diaries values(3582, "2021-05-04");
+insert into diaries values(3583, "2021-05-05");
+insert into diaries values(3584, "2021-05-06");
+insert into diaries values(3585, "2021-05-07");
+insert into diaries values(3586, "2021-05-08");
+insert into diaries values(3587, "2021-05-09");
+insert into diaries values(3588, "2021-05-10");
+insert into diaries values(3589, "2021-05-11");
+insert into diaries values(3590, "2021-05-12");
+insert into diaries values(3591, "2021-05-13");
+insert into diaries values(3592, "2021-05-14");
+insert into diaries values(3593, "2021-05-15");
+insert into diaries values(3594, "2021-05-16");
+insert into diaries values(3595, "2021-05-17");
+insert into diaries values(3596, "2021-05-18");
+insert into diaries values(3597, "2021-05-19");
+insert into diaries values(3598, "2021-05-20");
+insert into diaries values(3599, "2021-05-21");
+insert into diaries values(3600, "2021-05-22");
+insert into diaries values(3601, "2021-05-23");
+insert into diaries values(3602, "2021-05-24");
+insert into diaries values(3603, "2021-05-25");
+insert into diaries values(3604, "2021-05-26");
+insert into diaries values(3605, "2021-05-27");
+insert into diaries values(3606, "2021-05-28");
+insert into diaries values(3607, "2021-05-29");
+insert into diaries values(3608, "2021-05-30");
+insert into diaries values(3609, "2021-05-31");
+insert into diaries values(3610, "2021-06-01");
+insert into diaries values(3611, "2021-06-02");
+insert into diaries values(3612, "2021-06-03");
+insert into diaries values(3613, "2021-06-04");
+insert into diaries values(3614, "2021-06-05");
+insert into diaries values(3615, "2021-06-06");
+insert into diaries values(3616, "2021-06-07");
+insert into diaries values(3617, "2021-06-08");
+insert into diaries values(3618, "2021-06-09");
+insert into diaries values(3619, "2021-06-10");
+insert into diaries values(3620, "2021-06-11");
+insert into diaries values(3621, "2021-06-12");
+insert into diaries values(3622, "2021-06-13");
+insert into diaries values(3623, "2021-06-14");
+insert into diaries values(3624, "2021-06-15");
+insert into diaries values(3625, "2021-06-16");
+insert into diaries values(3626, "2021-06-17");
+insert into diaries values(3627, "2021-06-18");
+insert into diaries values(3628, "2021-06-19");
+insert into diaries values(3629, "2021-06-20");
+insert into diaries values(3630, "2021-06-21");
+insert into diaries values(3631, "2021-06-22");
+insert into diaries values(3632, "2021-06-23");
+insert into diaries values(3633, "2021-06-24");
+insert into diaries values(3634, "2021-06-25");
+insert into diaries values(3635, "2021-06-26");
+insert into diaries values(3636, "2021-06-27");
+insert into diaries values(3637, "2021-06-28");
+insert into diaries values(3638, "2021-06-29");
+insert into diaries values(3639, "2021-06-30");
+insert into diaries values(3640, "2021-07-01");
+insert into diaries values(3641, "2021-07-02");
+insert into diaries values(3642, "2021-07-03");
+insert into diaries values(3643, "2021-07-04");
+insert into diaries values(3644, "2021-07-05");
+insert into diaries values(3645, "2021-07-06");
+insert into diaries values(3646, "2021-07-07");
+insert into diaries values(3647, "2021-07-08");
+insert into diaries values(3648, "2021-07-09");
+insert into diaries values(3649, "2021-07-10");
+insert into diaries values(3650, "2021-07-11");
+insert into diaries values(3651, "2021-07-12");
+insert into diaries values(3652, "2021-07-13");
+insert into diaries values(3653, "2021-07-14");
+insert into diaries values(3654, "2021-07-15");
+insert into diaries values(3655, "2021-07-16");
+insert into diaries values(3656, "2021-07-17");
+insert into diaries values(3657, "2021-07-18");
+insert into diaries values(3658, "2021-07-19");
+insert into diaries values(3659, "2021-07-20");
+insert into diaries values(3660, "2021-07-21");
+insert into diaries values(3661, "2021-07-22");
+insert into diaries values(3662, "2021-07-23");
+insert into diaries values(3663, "2021-07-24");
+insert into diaries values(3664, "2021-07-25");
+insert into diaries values(3665, "2021-07-26");
+insert into diaries values(3666, "2021-07-27");
+insert into diaries values(3667, "2021-07-28");
+insert into diaries values(3668, "2021-07-29");
+insert into diaries values(3669, "2021-07-30");
+insert into diaries values(3670, "2021-07-31");
+insert into diaries values(3671, "2021-08-01");
+insert into diaries values(3672, "2021-08-02");
+insert into diaries values(3673, "2021-08-03");
+insert into diaries values(3674, "2021-08-04");
+insert into diaries values(3675, "2021-08-05");
+insert into diaries values(3676, "2021-08-06");
+insert into diaries values(3677, "2021-08-07");
+insert into diaries values(3678, "2021-08-08");
+insert into diaries values(3679, "2021-08-09");
+insert into diaries values(3680, "2021-08-10");
+insert into diaries values(3681, "2021-08-11");
+insert into diaries values(3682, "2021-08-12");
+insert into diaries values(3683, "2021-08-13");
+insert into diaries values(3684, "2021-08-14");
+insert into diaries values(3685, "2021-08-15");
+insert into diaries values(3686, "2021-08-16");
+insert into diaries values(3687, "2021-08-17");
+insert into diaries values(3688, "2021-08-18");
+insert into diaries values(3689, "2021-08-19");
+insert into diaries values(3690, "2021-08-20");
+insert into diaries values(3691, "2021-08-21");
+insert into diaries values(3692, "2021-08-22");
+insert into diaries values(3693, "2021-08-23");
+insert into diaries values(3694, "2021-08-24");
+insert into diaries values(3695, "2021-08-25");
+insert into diaries values(3696, "2021-08-26");
+insert into diaries values(3697, "2021-08-27");
+insert into diaries values(3698, "2021-08-28");
+insert into diaries values(3699, "2021-08-29");
+insert into diaries values(3700, "2021-08-30");
+insert into diaries values(3701, "2021-08-31");
+insert into diaries values(3702, "2021-09-01");
+insert into diaries values(3703, "2021-09-02");
+insert into diaries values(3704, "2021-09-03");
+insert into diaries values(3705, "2021-09-04");
+insert into diaries values(3706, "2021-09-05");
+insert into diaries values(3707, "2021-09-06");
+insert into diaries values(3708, "2021-09-07");
+insert into diaries values(3709, "2021-09-08");
+insert into diaries values(3710, "2021-09-09");
+insert into diaries values(3711, "2021-09-10");
+insert into diaries values(3712, "2021-09-11");
+insert into diaries values(3713, "2021-09-12");
+insert into diaries values(3714, "2021-09-13");
+insert into diaries values(3715, "2021-09-14");
+insert into diaries values(3716, "2021-09-15");
+insert into diaries values(3717, "2021-09-16");
+insert into diaries values(3718, "2021-09-17");
+insert into diaries values(3719, "2021-09-18");
+insert into diaries values(3720, "2021-09-19");
+insert into diaries values(3721, "2021-09-20");
+insert into diaries values(3722, "2021-09-21");
+insert into diaries values(3723, "2021-09-22");
+insert into diaries values(3724, "2021-09-23");
+insert into diaries values(3725, "2021-09-24");
+insert into diaries values(3726, "2021-09-25");
+insert into diaries values(3727, "2021-09-26");
+insert into diaries values(3728, "2021-09-27");
+insert into diaries values(3729, "2021-09-28");
+insert into diaries values(3730, "2021-09-29");
+insert into diaries values(3731, "2021-09-30");
+insert into diaries values(3732, "2021-10-01");
+insert into diaries values(3733, "2021-10-02");
+insert into diaries values(3734, "2021-10-03");
+insert into diaries values(3735, "2021-10-04");
+insert into diaries values(3736, "2021-10-05");
+insert into diaries values(3737, "2021-10-06");
+insert into diaries values(3738, "2021-10-07");
+insert into diaries values(3739, "2021-10-08");
+insert into diaries values(3740, "2021-10-09");
+insert into diaries values(3741, "2021-10-10");
+insert into diaries values(3742, "2021-10-11");
+insert into diaries values(3743, "2021-10-12");
+insert into diaries values(3744, "2021-10-13");
+insert into diaries values(3745, "2021-10-14");
+insert into diaries values(3746, "2021-10-15");
+insert into diaries values(3747, "2021-10-16");
+insert into diaries values(3748, "2021-10-17");
+insert into diaries values(3749, "2021-10-18");
+insert into diaries values(3750, "2021-10-19");
+insert into diaries values(3751, "2021-10-20");
+insert into diaries values(3752, "2021-10-21");
+insert into diaries values(3753, "2021-10-22");
+insert into diaries values(3754, "2021-10-23");
+insert into diaries values(3755, "2021-10-24");
+insert into diaries values(3756, "2021-10-25");
+insert into diaries values(3757, "2021-10-26");
+insert into diaries values(3758, "2021-10-27");
+insert into diaries values(3759, "2021-10-28");
+insert into diaries values(3760, "2021-10-29");
+insert into diaries values(3761, "2021-10-30");
+insert into diaries values(3762, "2021-10-31");
+insert into diaries values(3763, "2021-11-01");
+insert into diaries values(3764, "2021-11-02");
+insert into diaries values(3765, "2021-11-03");
+insert into diaries values(3766, "2021-11-04");
+insert into diaries values(3767, "2021-11-05");
+insert into diaries values(3768, "2021-11-06");
+insert into diaries values(3769, "2021-11-07");
+insert into diaries values(3770, "2021-11-08");
+insert into diaries values(3771, "2021-11-09");
+insert into diaries values(3772, "2021-11-10");
+insert into diaries values(3773, "2021-11-11");
+insert into diaries values(3774, "2021-11-12");
+insert into diaries values(3775, "2021-11-13");
+insert into diaries values(3776, "2021-11-14");
+insert into diaries values(3777, "2021-11-15");
+insert into diaries values(3778, "2021-11-16");
+insert into diaries values(3779, "2021-11-17");
+insert into diaries values(3780, "2021-11-18");
+insert into diaries values(3781, "2021-11-19");
+insert into diaries values(3782, "2021-11-20");
+insert into diaries values(3783, "2021-11-21");
+insert into diaries values(3784, "2021-11-22");
+insert into diaries values(3785, "2021-11-23");
+insert into diaries values(3786, "2021-11-24");
+insert into diaries values(3787, "2021-11-25");
+insert into diaries values(3788, "2021-11-26");
+insert into diaries values(3789, "2021-11-27");
+insert into diaries values(3790, "2021-11-28");
+insert into diaries values(3791, "2021-11-29");
+insert into diaries values(3792, "2021-11-30");
+insert into diaries values(3793, "2021-12-01");
+insert into diaries values(3794, "2021-12-02");
+insert into diaries values(3795, "2021-12-03");
+insert into diaries values(3796, "2021-12-04");
+insert into diaries values(3797, "2021-12-05");
+insert into diaries values(3798, "2021-12-06");
+insert into diaries values(3799, "2021-12-07");
+insert into diaries values(3800, "2021-12-08");
+insert into diaries values(3801, "2021-12-09");
+insert into diaries values(3802, "2021-12-10");
+insert into diaries values(3803, "2021-12-11");
+insert into diaries values(3804, "2021-12-12");
+insert into diaries values(3805, "2021-12-13");
+insert into diaries values(3806, "2021-12-14");
+insert into diaries values(3807, "2021-12-15");
+insert into diaries values(3808, "2021-12-16");
+insert into diaries values(3809, "2021-12-17");
+insert into diaries values(3810, "2021-12-18");
+insert into diaries values(3811, "2021-12-19");
+insert into diaries values(3812, "2021-12-20");
+insert into diaries values(3813, "2021-12-21");
+insert into diaries values(3814, "2021-12-22");
+insert into diaries values(3815, "2021-12-23");
+insert into diaries values(3816, "2021-12-24");
+insert into diaries values(3817, "2021-12-25");
+insert into diaries values(3818, "2021-12-26");
+insert into diaries values(3819, "2021-12-27");
+insert into diaries values(3820, "2021-12-28");
+insert into diaries values(3821, "2021-12-29");
+insert into diaries values(3822, "2021-12-30");
+insert into diaries values(3823, "2021-12-31");
+insert into diaries values(3824, "2022-01-01");
+insert into diaries values(3825, "2022-01-02");
+insert into diaries values(3826, "2022-01-03");
+insert into diaries values(3827, "2022-01-04");
+insert into diaries values(3828, "2022-01-05");
+insert into diaries values(3829, "2022-01-06");
+insert into diaries values(3830, "2022-01-07");
+insert into diaries values(3831, "2022-01-08");
+insert into diaries values(3832, "2022-01-09");
+insert into diaries values(3833, "2022-01-10");
+insert into diaries values(3834, "2022-01-11");
+insert into diaries values(3835, "2022-01-12");
+insert into diaries values(3836, "2022-01-13");
+insert into diaries values(3837, "2022-01-14");
+insert into diaries values(3838, "2022-01-15");
+insert into diaries values(3839, "2022-01-16");
+insert into diaries values(3840, "2022-01-17");
+insert into diaries values(3841, "2022-01-18");
+insert into diaries values(3842, "2022-01-19");
+insert into diaries values(3843, "2022-01-20");
+insert into diaries values(3844, "2022-01-21");
+insert into diaries values(3845, "2022-01-22");
+insert into diaries values(3846, "2022-01-23");
+insert into diaries values(3847, "2022-01-24");
+insert into diaries values(3848, "2022-01-25");
+insert into diaries values(3849, "2022-01-26");
+insert into diaries values(3850, "2022-01-27");
+insert into diaries values(3851, "2022-01-28");
+insert into diaries values(3852, "2022-01-29");
+insert into diaries values(3853, "2022-01-30");
+insert into diaries values(3854, "2022-01-31");
+insert into diaries values(3855, "2022-02-01");
+insert into diaries values(3856, "2022-02-02");
+insert into diaries values(3857, "2022-02-03");
+insert into diaries values(3858, "2022-02-04");
+insert into diaries values(3859, "2022-02-05");
+insert into diaries values(3860, "2022-02-06");
+insert into diaries values(3861, "2022-02-07");
+insert into diaries values(3862, "2022-02-08");
+insert into diaries values(3863, "2022-02-09");
+insert into diaries values(3864, "2022-02-10");
+insert into diaries values(3865, "2022-02-11");
+insert into diaries values(3866, "2022-02-12");
+insert into diaries values(3867, "2022-02-13");
+insert into diaries values(3868, "2022-02-14");
+insert into diaries values(3869, "2022-02-15");
+insert into diaries values(3870, "2022-02-16");
+insert into diaries values(3871, "2022-02-17");
+insert into diaries values(3872, "2022-02-18");
+insert into diaries values(3873, "2022-02-19");
+insert into diaries values(3874, "2022-02-20");
+insert into diaries values(3875, "2022-02-21");
+insert into diaries values(3876, "2022-02-22");
+insert into diaries values(3877, "2022-02-23");
+insert into diaries values(3878, "2022-02-24");
+insert into diaries values(3879, "2022-02-25");
+insert into diaries values(3880, "2022-02-26");
+insert into diaries values(3881, "2022-02-27");
+insert into diaries values(3882, "2022-02-28");
+insert into diaries values(3883, "2022-03-01");
+insert into diaries values(3884, "2022-03-02");
+insert into diaries values(3885, "2022-03-03");
+insert into diaries values(3886, "2022-03-04");
+insert into diaries values(3887, "2022-03-05");
+insert into diaries values(3888, "2022-03-06");
+insert into diaries values(3889, "2022-03-07");
+insert into diaries values(3890, "2022-03-08");
+insert into diaries values(3891, "2022-03-09");
+insert into diaries values(3892, "2022-03-10");
+insert into diaries values(3893, "2022-03-11");
+insert into diaries values(3894, "2022-03-12");
+insert into diaries values(3895, "2022-03-13");
+insert into diaries values(3896, "2022-03-14");
+insert into diaries values(3897, "2022-03-15");
+insert into diaries values(3898, "2022-03-16");
+insert into diaries values(3899, "2022-03-17");
+insert into diaries values(3900, "2022-03-18");
+insert into diaries values(3901, "2022-03-19");
+insert into diaries values(3902, "2022-03-20");
+insert into diaries values(3903, "2022-03-21");
+insert into diaries values(3904, "2022-03-22");
+insert into diaries values(3905, "2022-03-23");
+insert into diaries values(3906, "2022-03-24");
+insert into diaries values(3907, "2022-03-25");
+insert into diaries values(3908, "2022-03-26");
+insert into diaries values(3909, "2022-03-27");
+insert into diaries values(3910, "2022-03-28");
+insert into diaries values(3911, "2022-03-29");
+insert into diaries values(3912, "2022-03-30");
+insert into diaries values(3913, "2022-03-31");
+insert into diaries values(3914, "2022-04-01");
+insert into diaries values(3915, "2022-04-02");
+insert into diaries values(3916, "2022-04-03");
+insert into diaries values(3917, "2022-04-04");
+insert into diaries values(3918, "2022-04-05");
+insert into diaries values(3919, "2022-04-06");
+insert into diaries values(3920, "2022-04-07");
+insert into diaries values(3921, "2022-04-08");
+insert into diaries values(3922, "2022-04-09");
+insert into diaries values(3923, "2022-04-10");
+insert into diaries values(3924, "2022-04-11");
+insert into diaries values(3925, "2022-04-12");
+insert into diaries values(3926, "2022-04-13");
+insert into diaries values(3927, "2022-04-14");
+insert into diaries values(3928, "2022-04-15");
+insert into diaries values(3929, "2022-04-16");
+insert into diaries values(3930, "2022-04-17");
+insert into diaries values(3931, "2022-04-18");
+insert into diaries values(3932, "2022-04-19");
+insert into diaries values(3933, "2022-04-20");
+insert into diaries values(3934, "2022-04-21");
+insert into diaries values(3935, "2022-04-22");
+insert into diaries values(3936, "2022-04-23");
+insert into diaries values(3937, "2022-04-24");
+insert into diaries values(3938, "2022-04-25");
+insert into diaries values(3939, "2022-04-26");
+insert into diaries values(3940, "2022-04-27");
+insert into diaries values(3941, "2022-04-28");
+insert into diaries values(3942, "2022-04-29");
+insert into diaries values(3943, "2022-04-30");
+insert into diaries values(3944, "2022-05-01");
+insert into diaries values(3945, "2022-05-02");
+insert into diaries values(3946, "2022-05-03");
+insert into diaries values(3947, "2022-05-04");
+insert into diaries values(3948, "2022-05-05");
+insert into diaries values(3949, "2022-05-06");
+insert into diaries values(3950, "2022-05-07");
+insert into diaries values(3951, "2022-05-08");
+insert into diaries values(3952, "2022-05-09");
+insert into diaries values(3953, "2022-05-10");
+insert into diaries values(3954, "2022-05-11");
+insert into diaries values(3955, "2022-05-12");
+insert into diaries values(3956, "2022-05-13");
+insert into diaries values(3957, "2022-05-14");
+insert into diaries values(3958, "2022-05-15");
+insert into diaries values(3959, "2022-05-16");
+insert into diaries values(3960, "2022-05-17");
+insert into diaries values(3961, "2022-05-18");
+insert into diaries values(3962, "2022-05-19");
+insert into diaries values(3963, "2022-05-20");
+insert into diaries values(3964, "2022-05-21");
+insert into diaries values(3965, "2022-05-22");
+insert into diaries values(3966, "2022-05-23");
+insert into diaries values(3967, "2022-05-24");
+insert into diaries values(3968, "2022-05-25");
+insert into diaries values(3969, "2022-05-26");
+insert into diaries values(3970, "2022-05-27");
+insert into diaries values(3971, "2022-05-28");
+insert into diaries values(3972, "2022-05-29");
+insert into diaries values(3973, "2022-05-30");
+insert into diaries values(3974, "2022-05-31");
+insert into diaries values(3975, "2022-06-01");
+insert into diaries values(3976, "2022-06-02");
+insert into diaries values(3977, "2022-06-03");
+insert into diaries values(3978, "2022-06-04");
+insert into diaries values(3979, "2022-06-05");
+insert into diaries values(3980, "2022-06-06");
+insert into diaries values(3981, "2022-06-07");
+insert into diaries values(3982, "2022-06-08");
+insert into diaries values(3983, "2022-06-09");
+insert into diaries values(3984, "2022-06-10");
+insert into diaries values(3985, "2022-06-11");
+insert into diaries values(3986, "2022-06-12");
+insert into diaries values(3987, "2022-06-13");
+insert into diaries values(3988, "2022-06-14");
+insert into diaries values(3989, "2022-06-15");
+insert into diaries values(3990, "2022-06-16");
+insert into diaries values(3991, "2022-06-17");
+insert into diaries values(3992, "2022-06-18");
+insert into diaries values(3993, "2022-06-19");
+insert into diaries values(3994, "2022-06-20");
+insert into diaries values(3995, "2022-06-21");
+insert into diaries values(3996, "2022-06-22");
+insert into diaries values(3997, "2022-06-23");
+insert into diaries values(3998, "2022-06-24");
+insert into diaries values(3999, "2022-06-25");
+insert into diaries values(4000, "2022-06-26");
+insert into diaries values(4001, "2022-06-27");
+insert into diaries values(4002, "2022-06-28");
+insert into diaries values(4003, "2022-06-29");
+insert into diaries values(4004, "2022-06-30");
+insert into diaries values(4005, "2022-07-01");
+insert into diaries values(4006, "2022-07-02");
+insert into diaries values(4007, "2022-07-03");
+insert into diaries values(4008, "2022-07-04");
+insert into diaries values(4009, "2022-07-05");
+insert into diaries values(4010, "2022-07-06");
+insert into diaries values(4011, "2022-07-07");
+insert into diaries values(4012, "2022-07-08");
+insert into diaries values(4013, "2022-07-09");
+insert into diaries values(4014, "2022-07-10");
+insert into diaries values(4015, "2022-07-11");
+insert into diaries values(4016, "2022-07-12");
+insert into diaries values(4017, "2022-07-13");
+insert into diaries values(4018, "2022-07-14");
+insert into diaries values(4019, "2022-07-15");
+insert into diaries values(4020, "2022-07-16");
+insert into diaries values(4021, "2022-07-17");
+insert into diaries values(4022, "2022-07-18");
+insert into diaries values(4023, "2022-07-19");
+insert into diaries values(4024, "2022-07-20");
+insert into diaries values(4025, "2022-07-21");
+insert into diaries values(4026, "2022-07-22");
+insert into diaries values(4027, "2022-07-23");
+insert into diaries values(4028, "2022-07-24");
+insert into diaries values(4029, "2022-07-25");
+insert into diaries values(4030, "2022-07-26");
+insert into diaries values(4031, "2022-07-27");
+insert into diaries values(4032, "2022-07-28");
+insert into diaries values(4033, "2022-07-29");
+insert into diaries values(4034, "2022-07-30");
+insert into diaries values(4035, "2022-07-31");
+insert into diaries values(4036, "2022-08-01");
+insert into diaries values(4037, "2022-08-02");
+insert into diaries values(4038, "2022-08-03");
+insert into diaries values(4039, "2022-08-04");
+insert into diaries values(4040, "2022-08-05");
+insert into diaries values(4041, "2022-08-06");
+insert into diaries values(4042, "2022-08-07");
+insert into diaries values(4043, "2022-08-08");
+insert into diaries values(4044, "2022-08-09");
+insert into diaries values(4045, "2022-08-10");
+insert into diaries values(4046, "2022-08-11");
+insert into diaries values(4047, "2022-08-12");
+insert into diaries values(4048, "2022-08-13");
+insert into diaries values(4049, "2022-08-14");
+insert into diaries values(4050, "2022-08-15");
+insert into diaries values(4051, "2022-08-16");
+insert into diaries values(4052, "2022-08-17");
+insert into diaries values(4053, "2022-08-18");
+insert into diaries values(4054, "2022-08-19");
+insert into diaries values(4055, "2022-08-20");
+insert into diaries values(4056, "2022-08-21");
+insert into diaries values(4057, "2022-08-22");
+insert into diaries values(4058, "2022-08-23");
+insert into diaries values(4059, "2022-08-24");
+insert into diaries values(4060, "2022-08-25");
+insert into diaries values(4061, "2022-08-26");
+insert into diaries values(4062, "2022-08-27");
+insert into diaries values(4063, "2022-08-28");
+insert into diaries values(4064, "2022-08-29");
+insert into diaries values(4065, "2022-08-30");
+insert into diaries values(4066, "2022-08-31");
+insert into diaries values(4067, "2022-09-01");
+insert into diaries values(4068, "2022-09-02");
+insert into diaries values(4069, "2022-09-03");
+insert into diaries values(4070, "2022-09-04");
+insert into diaries values(4071, "2022-09-05");
+insert into diaries values(4072, "2022-09-06");
+insert into diaries values(4073, "2022-09-07");
+insert into diaries values(4074, "2022-09-08");
+insert into diaries values(4075, "2022-09-09");
+insert into diaries values(4076, "2022-09-10");
+insert into diaries values(4077, "2022-09-11");
+insert into diaries values(4078, "2022-09-12");
+insert into diaries values(4079, "2022-09-13");
+insert into diaries values(4080, "2022-09-14");
+insert into diaries values(4081, "2022-09-15");
+insert into diaries values(4082, "2022-09-16");
+insert into diaries values(4083, "2022-09-17");
+insert into diaries values(4084, "2022-09-18");
+insert into diaries values(4085, "2022-09-19");
+insert into diaries values(4086, "2022-09-20");
+insert into diaries values(4087, "2022-09-21");
+insert into diaries values(4088, "2022-09-22");
+insert into diaries values(4089, "2022-09-23");
+insert into diaries values(4090, "2022-09-24");
+insert into diaries values(4091, "2022-09-25");
+insert into diaries values(4092, "2022-09-26");
+insert into diaries values(4093, "2022-09-27");
+insert into diaries values(4094, "2022-09-28");
+insert into diaries values(4095, "2022-09-29");
+commit;
+set autocommit=1;
+
+select * from diaries where match(title) against("2022-09-0");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test
new file mode 100644
index 00000000000..61aa07d8da2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_delete.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+delete from diaries where id = 2;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test
new file mode 100644
index 00000000000..8ddfa82e84a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_insert.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test
new file mode 100644
index 00000000000..1e2413689d6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_recreate.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+select * from diaries where match(title, content) against("富士山");
+
+drop index title on diaries;
+--error ER_FT_MATCHING_KEY_NOT_FOUND
+select * from diaries where match(title, content) against("富士山");
+
+create fulltext index new_title_content_index on diaries (title, content);
+select * from diaries where match(title, content) against("富士山");
+
+select * from diaries;
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test
new file mode 100644
index 00000000000..44690e699a0
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_column_index_update.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ title varchar(255),
+ content text,
+ fulltext index (title, content),
+ fulltext index (title),
+ fulltext index (content)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+insert into diaries values(1, "Hello", "ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "富士山", "今日もãã‚Œã„。");
+update diaries set title = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒž" where id = 3;
+update diaries set content = "ãƒãƒ§ãƒ¢ãƒ©ãƒ³ãƒžã¨å¯Œå£«å±±" where id = 1;
+select * from diaries where match(title, content) against("富士山");
+select * from diaries where match(title) against("富士山");
+select * from diaries where match(content) against("富士山");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test
new file mode 100644
index 00000000000..97a8a1f07a5
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_multiple_index.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ title text,
+ body text,
+ fulltext index title_index (title),
+ fulltext index body_index (body)
+) comment = 'engine "innodb"' default charset utf8;
+show create table diaries;
+
+insert into diaries (title, body) values ("survey", "will start groonga!");
+insert into diaries (title, body) values ("groonga (1)", "starting groonga...");
+insert into diaries (title, body) values ("groonga (2)", "started groonga.");
+
+select * from diaries
+ where match(title) against("survey") and
+ match(body) against("groonga");
+
+select *, match(title) against("survey"), match(body) against("groonga")
+ from diaries
+ where match(title) against("survey") and
+ match(body) against("groonga");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test
new file mode 100644
index 00000000000..eda8a5f15ef
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_myisam.test
@@ -0,0 +1,102 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index ft (c2)) COMMENT = 'engine "myisam"';
+show create table t1;
+insert into t1 values (1, "hoge hoge");
+insert into t1 values (2, "fuga fuga");
+insert into t1 values (3, "moge moge");
+select * from t1;
+flush tables;
+select * from t1;
+drop table t1;
+
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "myisam"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"sa si su se so");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ee oo");
+select * from t1;
+select * from t1 where match(c3) against("su");
+select * from t1 where match(c3) against("ii");
+select * from t1 where match(c3) against("+su" in boolean mode);
+select * from t1 where match(c3) against("+ii" in boolean mode);
+drop table t1;
+
+set names utf8;
+create table t1 (c1 int primary key, c2 varchar(255), c3 text, fulltext index(c2), fulltext index(c3)) default charset utf8 COMMENT = 'engine "myisam"';
+insert into t1 values(1, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦","ã‚ã‚ã‚ã‚ã‚ã‚ã‚");
+insert into t1 values(2, "ã„ã„ã„ã„ã„","明日ã®å¯Œå£«å±±ã®å¤©æ°—ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“");
+insert into t1 values(3, "dummy", "dummy");
+select * from t1;
+select * from t1 where match(c2) against("富士山");
+select * from t1 where match(c3) against("富士山");
+drop table t1;
+
+create table t1 (c1 int primary key, c2 varchar(100), fulltext index(c2)) default charset utf8 COMMENT = 'engine "myisam"';
+create table t2 (c1 int primary key, c2 text, fulltext index(c2)) default charset utf8 COMMENT = 'engine "myisam"';
+insert into t1 values (1, "aa ii uu ee oo");
+insert into t1 values (2, "ka ki ku ke ko");
+insert into t1 values (3, "aa ii ii ii oo");
+insert into t1 values (4, "sa si su se so");
+insert into t1 values (5, "ta ti ii ii to");
+insert into t2 (c1,c2) select c1,c2 from t1;
+select * from t1;
+select * from t2;
+select * from t1 where c1=3;
+select * from t2 where c1=3;
+select * from t1 where c1>3 order by c1 desc;
+select * from t2 where c1>3 order by c1 asc;
+select * from t1 where c2>"s" order by c2 desc;
+select * from t2 where c2>"s" order by c1 asc;
+select *,match(c2) against("ii") from t1 where match(c2) against("ii") order by match(c2) against("ii") desc;
+select *,match(c2) against("ii") from t2 where match(c2) against("ii") order by match(c2) against("ii") asc;
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+select c1,c2,match(c2) against("ii") from t1 where match(c2) against("ii");
+drop table t1,t2;
+
+# for "not match against"
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "myisam"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+select *,match(c3) against("uu") from t1 where match(c3) against("uu");
+select * from t1 where not match(c3) against("uu");
+select *,match(c3) against("dummy") from t1 where match(c3) against("dummy");
+select * from t1 where not match(c3) against("dummy");
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test
new file mode 100644
index 00000000000..6ce01598136
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_not_match_against.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int, c3 text, fulltext index ft(c3)) COMMENT = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,10,"ka ki ku ke ko");
+insert into t1 values(3,10,"aa ii uu ee oo");
+insert into t1 values(4,10,"ka ki ku ke ko");
+insert into t1 values(5,20,"aa ii uu ee oo");
+insert into t1 values(6,20,"ka ki ku ke ko");
+insert into t1 values(7,20,"aa ii uu ee oo");
+insert into t1 values(8,20,"ka ki ku ke ko");
+select * from t1;
+select *,match(c3) against("uu") from t1 where match(c3) against("uu");
+select * from t1 where not match(c3) against("uu");
+select *,match(c3) against("dummy") from t1 where match(c3) against("dummy");
+select * from t1 where not match(c3) against("dummy");
+select * from t1 where c1 = 4 and not match(c3) against("uu");
+select * from t1 where c1 <= 4 and not match(c3) against("uu");
+select * from t1 where c1 > 4 and not match(c3) against("uu");
+select * from t1 where c2 = 10 and not match(c3) against("uu");
+select * from t1 where c2 >= 15 and not match(c3) against("uu");
+select * from t1 where c2 < 15 and not match(c3) against("uu");
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..5361b151661
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_TODO_SPLIT_ME.test
@@ -0,0 +1,51 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE ft(
+ a INT,
+ b TEXT,
+ c TEXT,
+ PRIMARY KEY(a),
+ FULLTEXT KEY ftx1(b),
+ FULLTEXT KEY ftx2(c)
+)ENGINE=Mroonga DEFAULT CHARSET=UTF8 COMMENT = 'engine "innodb"';
+SHOW CREATE TABLE ft;
+
+INSERT INTO ft VALUES(1,'aaaaa','abcde');
+INSERT INTO ft VALUES(2,'bbbbb','bcdef');
+INSERT INTO ft VALUES(3,'ccccc','cdefg');
+INSERT INTO ft VALUES(4,'ddddd','defgh');
+INSERT INTO ft VALUES(5,'eeeee','efghi');
+
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c FROM ft WHERE MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE) ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft WHERE MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE);
+SELECT a, b, c, MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE) FROM ft ORDER BY MATCH(c) AGAINST('bbbbb' IN BOOLEAN MODE), MATCH(b) AGAINST('bbbbb' IN BOOLEAN MODE), a;
+
+DROP TABLE ft;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test
new file mode 100644
index 00000000000..91e2f73da1d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_order_transaction.test
@@ -0,0 +1,64 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE diaries;
+
+START TRANSACTION;
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries
+ WHERE MATCH(body) AGAINST("groonga")
+ ORDER BY id;
+
+CONNECT(search_connection, localhost, root);
+USE test;
+SELECT * FROM diaries
+ WHERE MATCH(body) AGAINST("groonga")
+ ORDER BY id;
+
+CONNECTION default;
+COMMIT;
+
+CONNECTION search_connection;
+SELECT * FROM diaries
+ WHERE MATCH(body) AGAINST("groonga")
+ ORDER BY id;
+DISCONNECT search_connection;
+
+CONNECTION default;
+SELECT * FROM diaries
+ WHERE MATCH(body) AGAINST("groonga")
+ ORDER BY id;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_parser_comment.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_parser_comment.test
new file mode 100644
index 00000000000..fe80aae0804
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/fulltext_parser_comment.test
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+ comment 'parser "TokenBigramSplitSymbolAlphaDigit"'
+) comment = 'engine "innodb"' default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+select * from diaries where match(body) against("start");
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_grn_id.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_grn_id.test
new file mode 100644
index 00000000000..c4961756a26
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_grn_id.test
@@ -0,0 +1,52 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+DROP FUNCTION IF EXISTS last_insert_grn_id;
+--enable_warnings
+
+--disable_query_log
+if ($VERSION_COMPILE_OS_WIN)
+{
+ CREATE FUNCTION last_insert_grn_id RETURNS integer SONAME 'ha_mroonga.dll';
+}
+if (!$VERSION_COMPILE_OS_WIN)
+{
+ CREATE FUNCTION last_insert_grn_id RETURNS integer SONAME 'ha_mroonga.so';
+}
+--enable_query_log
+
+CREATE TABLE ids (
+ id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+
+SELECT last_insert_grn_id();
+
+INSERT INTO ids VALUES();
+SELECT last_insert_grn_id();
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+DROP FUNCTION last_insert_grn_id;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test
new file mode 100644
index 00000000000..1b7c3a7f265
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_reference.test
@@ -0,0 +1,36 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+
+SELECT last_insert_id();
+
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test
new file mode 100644
index 00000000000..6dc87f740f9
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/function_last_insert_id_set.test
@@ -0,0 +1,38 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id int AUTO_INCREMENT PRIMARY KEY
+) COMMENT='ENGINE "InnoDB"';
+
+SELECT last_insert_id();
+SELECT last_insert_id(10);
+SELECT last_insert_id();
+
+INSERT INTO ids VALUES();
+SELECT last_insert_id();
+SELECT * FROM ids;
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test
new file mode 100644
index 00000000000..4676fc61331
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_contains.test
@@ -0,0 +1,145 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists shops;
+--enable_warnings
+
+create table shops (
+ id int primary key auto_increment,
+ name text,
+ location geometry NOT NULL,
+ spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+insert into shops (name, location)
+ values ('nezu-no-taiyaki',
+ GeomFromText('POINT(139.762573 35.720253)'));
+insert into shops (name, location)
+ values ('taiyaki-kataoka',
+ GeomFromText('POINT(139.715591 35.712521)'));
+insert into shops (name, location)
+ values ('soba-taiyaki-ku',
+ GeomFromText('POINT(139.659088 35.683712)'));
+insert into shops (name, location)
+ values ('kuruma',
+ GeomFromText('POINT(139.706207 35.721516)'));
+insert into shops (name, location)
+ values ('hirose-ya',
+ GeomFromText('POINT(139.685608 35.714844)'));
+insert into shops (name, location)
+ values ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+insert into shops (name, location)
+ values ('omede-taiyaki',
+ GeomFromText('POINT(139.817154 35.700516)'));
+insert into shops (name, location)
+ values ('onaga-ya',
+ GeomFromText('POINT(139.81105 35.698254)'));
+insert into shops (name, location)
+ values ('shiro-ya',
+ GeomFromText('POINT(139.638611 35.705517)'));
+insert into shops (name, location)
+ values ('fuji-ya',
+ GeomFromText('POINT(139.637115 35.703938)'));
+insert into shops (name, location)
+ values ('miyoshi',
+ GeomFromText('POINT(139.537323 35.644539)'));
+insert into shops (name, location)
+ values ('juju-ya',
+ GeomFromText('POINT(139.695755 35.628922)'));
+insert into shops (name, location)
+ values ('tatsumi-ya',
+ GeomFromText('POINT(139.638657 35.665501)'));
+insert into shops (name, location)
+ values ('tetsuji',
+ GeomFromText('POINT(139.76857 35.680912)'));
+insert into shops (name, location)
+ values ('gazuma-ya',
+ GeomFromText('POINT(139.647598 35.700817)'));
+insert into shops (name, location)
+ values ('honma-mon',
+ GeomFromText('POINT(139.652573 35.722736)'));
+insert into shops (name, location)
+ values ('naniwa-ya',
+ GeomFromText('POINT(139.796234 35.730061)'));
+insert into shops (name, location)
+ values ('kuro-dai',
+ GeomFromText('POINT(139.704834 35.650345)'));
+insert into shops (name, location)
+ values ('daruma',
+ GeomFromText('POINT(139.770599 35.681461)'));
+insert into shops (name, location)
+ values ('yanagi-ya',
+ GeomFromText('POINT(139.783981 35.685341)'));
+insert into shops (name, location)
+ values ('sharaku',
+ GeomFromText('POINT(139.794846 35.716969)'));
+insert into shops (name, location)
+ values ('takane',
+ GeomFromText('POINT(139.560913 35.698601)'));
+insert into shops (name, location)
+ values ('chiyoda',
+ GeomFromText('POINT(139.652817 35.642601)'));
+insert into shops (name, location)
+ values ('da-ka-po',
+ GeomFromText('POINT(139.727356 35.627346)'));
+insert into shops (name, location)
+ values ('matsushima-ya',
+ GeomFromText('POINT(139.737381 35.640556)'));
+insert into shops (name, location)
+ values ('kazuya',
+ GeomFromText('POINT(139.760895 35.673508)'));
+insert into shops (name, location)
+ values ('furuya-kogane-an',
+ GeomFromText('POINT(139.676071 35.680603)'));
+insert into shops (name, location)
+ values ('hachi-no-ie',
+ GeomFromText('POINT(139.668106 35.608021)'));
+insert into shops (name, location)
+ values ('azuki-chan',
+ GeomFromText('POINT(139.673203 35.64151)'));
+insert into shops (name, location)
+ values ('kuriko-an',
+ GeomFromText('POINT(139.796829 35.712013)'));
+insert into shops (name, location)
+ values ('yume-no-aru-machi-no-taiyaki-ya-san',
+ GeomFromText('POINT(139.712524 35.616199)'));
+insert into shops (name, location)
+ values ('naze-ya',
+ GeomFromText('POINT(139.665833 35.609039)'));
+insert into shops (name, location)
+ values ('sanoki-ya',
+ GeomFromText('POINT(139.770721 35.66592)'));
+insert into shops (name, location)
+ values ('shigeta',
+ GeomFromText('POINT(139.780273 35.672626)'));
+insert into shops (name, location)
+ values ('nishimi-ya',
+ GeomFromText('POINT(139.774628 35.671825)'));
+insert into shops (name, location)
+ values ('hiiragi',
+ GeomFromText('POINT(139.711517 35.647701)'));
+select id, name, AsText(location) as location_text from shops;
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.7727 35.6684, 139.7038 35.7121)'), location);
+drop table shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test
new file mode 100644
index 00000000000..25814635b22
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_delete.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists shops;
+--enable_warnings
+
+create table shops (
+ id int primary key auto_increment,
+ name text,
+ location geometry NOT NULL,
+ spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+
+insert into shops (name, location)
+ values ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+
+delete from shops
+ where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+
+select id, name, AsText(location) as location_text from shops;
+
+drop table shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test
new file mode 100644
index 00000000000..c6bb8a1d4e6
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/geometry_update.test
@@ -0,0 +1,50 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/have_geometry.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists shops;
+--enable_warnings
+
+create table shops (
+ id int primary key auto_increment,
+ name text,
+ location geometry NOT NULL,
+ spatial key location_index (location)
+) comment = 'engine "innodb"';
+show create table shops;
+
+insert into shops (name, location)
+ values ('sazare',
+ GeomFromText('POINT(139.685043 35.714653)'));
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.65659 35.57903, 139.66489 35.57262)'), location);
+
+update shops set location = GeomFromText('POINT(139.66116 35.57566)')
+ where name = 'sazare';
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.68466 35.71592, 139.68804 35.71411)'), location);
+select id, name, AsText(location) as location_text from shops
+ where MBRContains(GeomFromText('LineString(139.65659 35.57903, 139.66489 35.57262)'), location);
+
+drop table shops;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test
new file mode 100644
index 00000000000..037f8b02fbf
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/index_force_index_not_used.test
@@ -0,0 +1,32 @@
+# Copyright(C) 2013 Kentoku SHIBA
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS ids;
+--enable_warnings
+
+CREATE TABLE ids (
+ id INT PRIMARY KEY AUTO_INCREMENT
+) DEFAULT CHARSET UTF8 COMMENT = 'engine "InnoDB"';
+SELECT COUNT(*) FROM ids FORCE INDEX(PRIMARY);
+
+DROP TABLE ids;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..e619b0af930
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_TODO_SPLIT_ME.test
@@ -0,0 +1,91 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+# data types
+create table t1 (c1 tinyint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 smallint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 mediumint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 int primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 bigint primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(1);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 float primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(0.5);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 double primary key) COMMENT = 'engine "innodb"';
+insert into t1 values(0.5);
+select * from t1;
+drop table t1;
+
+create table t1 (c1 date primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010/03/26");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 time primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("11:22:33");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 year primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010");
+select * from t1;
+drop table t1;
+
+create table t1 (c1 datetime primary key) COMMENT = 'engine "innodb"';
+insert into t1 values("2010/03/26 11:22:33");
+select * from t1;
+drop table t1;
+
+
+# duplicated key error
+create table t1 (c1 int primary key, c2 int) COMMENT = 'engine "innodb"';
+insert into t1 values(1,100);
+select * from t1;
+--error ER_DUP_ENTRY
+insert into t1 values(1,200);
+select * from t1;
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test
new file mode 100644
index 00000000000..4087abf9bc3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_bulk.test
@@ -0,0 +1,44 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+set names utf8;
+create table diaries (
+ id int primary key,
+ content text,
+ fulltext index (content)
+) default charset utf8 comment = 'engine "innodb"';
+show create table diaries;
+
+LOCK TABLE diaries WRITE;
+insert into diaries values(1, "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+insert into diaries values(2, "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+insert into diaries values(3, "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+UNLOCK TABLES;
+
+select * from diaries;
+
+select * from diaries where match(content) against("天気");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test
new file mode 100644
index 00000000000..cc3bc477409
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_primary_key_myisam.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ date TIMESTAMP NOT NULL,
+ title VARCHAR(100) NOT NULL,
+ content TEXT NOT NULL,
+ PRIMARY KEY (date, title)
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "cloudy day", "Today is cloudy day...");
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "shopping", "I buy a new shirt.");
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-05", "rainy day", "Today is rainy day...");
+
+SELECT * FROM diaries;
+
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "shopping", "I buy new shoes.")
+ ON DUPLICATE KEY UPDATE date = "2012-03-03",
+ content = "I buy a new hat.";
+
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test
new file mode 100644
index 00000000000..cdcdcc796f3
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/insert_on_duplicate_key_update_multiple_column_unique_index_myisam.test
@@ -0,0 +1,49 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ date TIMESTAMP NOT NULL,
+ title VARCHAR(100) NOT NULL,
+ content TEXT NOT NULL,
+ UNIQUE INDEX (date, title)
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "MyISAM"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "cloudy day", "Today is cloudy day...");
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "shopping", "I buy a new shirt.");
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-05", "rainy day", "Today is rainy day...");
+
+SELECT * FROM diaries;
+
+INSERT INTO diaries (date, title, content)
+ VALUES ("2012-03-04", "shopping", "I buy new shoes.")
+ ON DUPLICATE KEY UPDATE date = "2012-03-03",
+ content = "I buy a new hat.";
+SELECT * FROM diaries;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test
new file mode 100644
index 00000000000..f5b429e523b
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/multi_range_read_disk_sweep.test
@@ -0,0 +1,45 @@
+# Copyright(C) 2013 Kenji Maruyama <mmmaru777@gmail.com>
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_mysql.inc
+--source ../../include/mroonga/have_version_56_or_later.inc
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS integers;
+--enable_warnings
+
+SET optimizer_switch='mrr_cost_based=off';
+
+CREATE TABLE integers (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ value INT,
+ KEY (value)
+) COMMENT='engine "InnoDB"';
+
+INSERT INTO integers (value) VALUES (0), (1), (2), (3);
+
+EXPLAIN SELECT * FROM integers
+ WHERE value IN (0, 2);
+
+SELECT * FROM integers
+ WHERE value IN (0, 2);
+
+DROP TABLE integers;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test
new file mode 100644
index 00000000000..39772e5d78d
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_TODO_SPLIT_ME.test
@@ -0,0 +1,68 @@
+# Copyright(C) 2010 Kentoku SHIBA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+flush status;
+create table t1 (
+ c1 int primary key,
+ c2 int,
+ c3 text,
+ key idx1(c2),
+ fulltext index ft(c3)
+) comment = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"ii si ii se ii");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ii oo");
+
+select *, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by c1 desc limit 1;
+show status like 'mroonga_fast_order_limit';
+
+select *, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by c1 limit 1;
+show status like 'mroonga_fast_order_limit';
+
+select c3, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by match(c3) against("ii") desc;
+show status like 'mroonga_fast_order_limit';
+
+select c3, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by match(c3) against("ii") desc limit 1, 1;
+show status like 'mroonga_fast_order_limit';
+
+select c3, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by match(c3) against("ii");
+show status like 'mroonga_fast_order_limit';
+
+select c3, match(c3) against("ii") from t1
+ where match(c3) against("ii") order by match(c3) against("ii") limit 1;
+show status like 'mroonga_fast_order_limit';
+
+select count(*) from t1 where match(c3) against("ii") limit 1;
+show status like 'mroonga_fast_order_limit';
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test
new file mode 100644
index 00000000000..da37f5d6372
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/optimization_order_limit_no_where_clause.test
@@ -0,0 +1,46 @@
+# Copyright(C) 2013 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+flush status;
+create table t1 (
+ c1 int primary key,
+ c2 int,
+ c3 text,
+ key idx1(c2),
+ fulltext index ft(c3)
+) comment = 'engine "innodb"';
+insert into t1 values(1,10,"aa ii uu ee oo");
+insert into t1 values(2,20,"ka ki ku ke ko");
+insert into t1 values(3,30,"ii si ii se ii");
+insert into t1 values(4,40,"ta ti tu te to");
+insert into t1 values(5,50,"aa ii uu ii oo");
+
+show status like 'mroonga_fast_order_limit';
+
+select *, match(c3) against("ii") from t1 order by c1 desc limit 1;
+
+show status like 'mroonga_fast_order_limit';
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test
new file mode 100644
index 00000000000..b333991d27e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_files.test
@@ -0,0 +1,69 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_mroonga_helper.inc
+
+--disable_warnings
+DROP DATABASE IF EXISTS repair_test;
+CREATE DATABASE repair_test;
+USE repair_test;
+
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX body_index (body)
+) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+--remove_file $MYSQLD_DATADIR/repair_test.mrn
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.001
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000000
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000103
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000104
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000105
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000105.c
+
+FLUSH TABLES;
+
+# Error ER_CANT_OPEN_FILE mroonga: failed to open table: <diaries>
+--error ER_CANT_OPEN_FILE
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+REPAIR TABLE diaries;
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+DROP TABLE diaries;
+
+DROP DATABASE repair_test;
+USE test;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test
new file mode 100644
index 00000000000..ce6e1d23280
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/repair_table_no_index_file.test
@@ -0,0 +1,63 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+--source ../../include/mroonga/have_mroonga_helper.inc
+
+--disable_warnings
+DROP DATABASE IF EXISTS repair_test;
+CREATE DATABASE repair_test;
+USE repair_test;
+
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX body_index (body)
+) COMMENT = 'engine "innodb"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+--remove_file $MYSQLD_DATADIR/repair_test.mrn.0000104
+
+FLUSH TABLES;
+
+# Error ER_CANT_OPEN_FILE syscall error 'repair_test.mrn.0000104' (No such file or directory)
+--error ER_CANT_OPEN_FILE
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+REPAIR TABLE diaries;
+
+SELECT * FROM diaries;
+
+SELECT * FROM diaries WHERE MATCH(body) AGAINST("starting");
+
+DROP TABLE diaries;
+
+DROP DATABASE repair_test;
+USE test;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test
new file mode 100644
index 00000000000..0eb5ef514a2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/temporary_table.test
@@ -0,0 +1,40 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2014 Toshihisa Tashiro
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/skip_osx.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TEMPORARY TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TEMPORARY TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT
+) DEFAULT CHARSET=UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title) VALUES ("clear day");
+INSERT INTO diaries (title) VALUES ("rainy day");
+INSERT INTO diaries (title) VALUES ("cloudy day");
+
+SELECT * FROM diaries;
+
+DROP TEMPORARY TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test
new file mode 100644
index 00000000000..b2522db7919
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_query_cache.test
@@ -0,0 +1,53 @@
+# Copyright(C) 2012 Kentoku SHIBA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+SET @tmp_query_cache_size = @@query_cache_size;
+SET GLOBAL query_cache_size = 1048576;
+
+--disable_warnings
+DROP TABLE IF EXISTS simple_table;
+--enable_warnings
+
+CREATE TABLE simple_table (
+ id INT PRIMARY KEY
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET=UTF8;
+SHOW CREATE TABLE simple_table;
+
+INSERT INTO simple_table (id) VALUES (1),(2);
+
+CONNECT(second_connection, localhost, root);
+USE test;
+START TRANSACTION;
+INSERT INTO simple_table (id) VALUES (3);
+
+CONNECTION default;
+SELECT * FROM simple_table;
+
+CONNECTION second_connection;
+COMMIT;
+
+CONNECTION default;
+SELECT * FROM simple_table;
+
+DROP TABLE simple_table;
+DISCONNECT second_connection;
+
+SET GLOBAL query_cache_size = @tmp_query_cache_size;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test
new file mode 100644
index 00000000000..f0da6934f8e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_delete.test
@@ -0,0 +1,59 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey") AND
+ MATCH(body) AGAINST("groonga");
+
+START TRANSACTION;
+DELETE FROM diaries WHERE id = 1;
+ROLLBACK;
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey") AND
+ MATCH(body) AGAINST("groonga");
+
+DELETE FROM diaries WHERE id = 1;
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey") AND
+ MATCH(body) AGAINST("groonga");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test
new file mode 100644
index 00000000000..425a16c204e
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/transaction_rollback_delete_update.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ body TEXT,
+ FULLTEXT INDEX title_index (title),
+ FULLTEXT INDEX body_index (body)
+) COMMENT = 'ENGINE "InnoDB"' DEFAULT CHARSET UTF8;
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, body) VALUES ("survey", "will start groonga!");
+INSERT INTO diaries (title, body) VALUES ("groonga (1)", "starting groonga...");
+INSERT INTO diaries (title, body) VALUES ("groonga (2)", "started groonga.");
+
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey");
+
+START TRANSACTION;
+DELETE FROM diaries WHERE id = 1;
+ROLLBACK;
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey");
+
+UPDATE diaries SET title = "survey day!" WHERE id = 1;
+
+SELECT * FROM diaries;
+SELECT * FROM diaries
+ WHERE MATCH(title) AGAINST("survey");
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test
new file mode 100644
index 00000000000..987fd284f74
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/truncate.test
@@ -0,0 +1,57 @@
+# Copyright(C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SET NAMES UTF8;
+CREATE TABLE diaries (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ year INT UNSIGNED,
+ month INT UNSIGNED,
+ day INT UNSIGNED,
+ title VARCHAR(255),
+ content TEXT,
+ FULLTEXT INDEX(content),
+ KEY(day)
+) DEFAULT CHARSET UTF8 COMMENT = 'engine "innodb"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries VALUES(1, 2011, 11, 9, "Hello", "今日ã‹ã‚‰ã¯ã˜ã‚ã¾ã—ãŸã€‚");
+INSERT INTO diaries VALUES(2, 2011, 11, 10, "天気", "明日ã®å¯Œå£«å±±ã®å¤©æ°—ã«ã¤ã„ã¦");
+INSERT INTO diaries VALUES(3, 2011, 11, 11, "富士山", "今日も天気ãŒã‚ˆãã¦ãã‚Œã„ã«è¦‹ãˆã‚‹ã€‚");
+
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+TRUNCATE TABLE diaries;
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
+
+INSERT INTO diaries VALUES(1, 2011, 11, 11, "帰りé“", "ã¤ã‹ã‚ŒãŸãƒ¼");
+INSERT INTO diaries VALUES(2, 2011, 12, 1, "ä¹…ã—ã¶ã‚Š", "天気ãŒæ‚ªã„ã‹ã‚‰ãšã£ã¨ç•™å®ˆç•ªã€‚");
+INSERT INTO diaries VALUES(3, 2011, 12, 2, "åˆé›ª", "今年ã¯ã˜ã‚ã¦ã®é›ªï¼");
+
+SELECT * FROM diaries;
+SELECT * FROM diaries WHERE MATCH(content) AGAINST("悪ã„" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test
new file mode 100644
index 00000000000..50c14184c98
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/update_fulltext.test
@@ -0,0 +1,43 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 text, fulltext index (c2)) COMMENT = 'engine "innodb"';
+insert into t1 values(10, "aa ii uu ee");
+insert into t1 values(20, "ka ki ku ke");
+insert into t1 values(30, "sa si su se");
+
+select * from t1;
+update t1 set c2="ta ti tu te" where c1=20;
+select * from t1;
+select * from t1 where match(c2) against("ti");
+select * from t1 where match(c2) against("ki");
+
+update t1 set c1=40 where c1=20;
+select * from t1;
+select * from t1 where match(c2) against("ti");
+select * from t1 where match(c2) against("ki");
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test
new file mode 100644
index 00000000000..5c794aacf65
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/update_int.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists t1, t2, t3;
+--enable_warnings
+
+create table t1 (c1 int primary key, c2 int) COMMENT = 'engine "innodb"';
+show create table t1;
+insert into t1 values (1, 100);
+insert into t1 values (2, 101);
+insert into t1 values (3, 102);
+select * from t1;
+
+update t1 set c2=c2+100 where c1=1;
+select * from t1;
+update t1 set c2=c2+100 where c1=2;
+select * from t1;
+update t1 set c2=c2+100 where c1=3;
+select * from t1;
+
+drop table t1;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test
new file mode 100644
index 00000000000..165c8df858a
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_delete.test
@@ -0,0 +1,55 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+insert into diaries (body) values ("starting groonga...");
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+
+set mroonga_dry_write=true;
+delete from diaries where id = 2;
+select * from diaries;
+select * from diaries where match (body) against ("starting");
+select * from diaries where match (body) against ("started");
+
+set mroonga_dry_write=false;
+delete from diaries where id = 3;
+select * from diaries;
+select * from diaries where match (body) against ("starting");
+select * from diaries where match (body) against ("started");
+
+insert into diaries (id, body) values (2, "sleeping...");
+select * from diaries;
+select * from diaries where match (body) against ("starting");
+select * from diaries where match (body) against ("started");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test
new file mode 100644
index 00000000000..b1222118833
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_insert.test
@@ -0,0 +1,47 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+select * from diaries where match (body) against ("groonga");
+
+set mroonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+select * from diaries where match (body) against ("groonga");
+
+set mroonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+select * from diaries where match (body) against ("groonga");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test
new file mode 100644
index 00000000000..6b47d18b872
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_dry_write_update.test
@@ -0,0 +1,48 @@
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+ id int primary key auto_increment,
+ body text,
+ fulltext index body_index (body)
+) default charset utf8 COMMENT = 'engine "innodb"';
+show create table diaries;
+
+insert into diaries (body) values ("will start groonga!");
+
+set mroonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+select * from diaries where match (body) against ("will");
+select * from diaries where match (body) against ("starting");
+
+set mroonga_dry_write=false;
+update diaries set body = "started groonga." where id = 1;
+select * from diaries;
+select * from diaries where match (body) against ("will");
+select * from diaries where match (body) against ("starting");
+select * from diaries where match (body) against ("started");
+
+drop table diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test
new file mode 100644
index 00000000000..b272649c732
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_global.test
@@ -0,0 +1,56 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+# MySQL <= 5.5 reports wrong a warning. :<
+# It has been fixed in MySQL >= 5.6 and MariaDB >= 5.3.
+--disable_warnings
+SET GLOBAL mroonga_match_escalation_threshold = -1;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ tags TEXT,
+ FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET GLOBAL mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test
new file mode 100644
index 00000000000..bf22001bb10
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/variable_match_escalation_threshold_session.test
@@ -0,0 +1,54 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/have_innodb.inc
+--source ../../include/mroonga/have_fulltext_index_comment.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ title TEXT,
+ tags TEXT,
+ FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
+) DEFAULT CHARSET=UTF8 COMMENT='ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
+INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");
+
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
+
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+# MySQL <= 5.5 reports wrong a warning. :<
+# It has been fixed in MySQL >= 5.6 and MariaDB >= 5.3.
+--disable_warnings
+SET mroonga_match_escalation_threshold = -1;
+--enable_warnings
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+SET mroonga_match_escalation_threshold = 0;
+SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
+
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/version_55_performance_schema.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/version_55_performance_schema.test
new file mode 100644
index 00000000000..809b6fa29b1
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/version_55_performance_schema.test
@@ -0,0 +1,41 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_55.inc
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SHOW VARIABLES LIKE 'performance_schema';
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content VARCHAR(255),
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (content) VALUES ("Tommorow will be shiny day!");
+
+SHOW TABLES FROM performance_schema;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/mysql-test/mroonga/wrapper/t/version_56_or_later_performance_schema.test b/storage/mroonga/mysql-test/mroonga/wrapper/t/version_56_or_later_performance_schema.test
new file mode 100644
index 00000000000..20cb2107ec2
--- /dev/null
+++ b/storage/mroonga/mysql-test/mroonga/wrapper/t/version_56_or_later_performance_schema.test
@@ -0,0 +1,42 @@
+# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source ../../include/mroonga/have_version_56_or_later.inc
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source ../../include/mroonga/have_mroonga.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS diaries;
+--enable_warnings
+
+SHOW VARIABLES LIKE 'performance_schema';
+
+CREATE TABLE diaries (
+ id INT PRIMARY KEY AUTO_INCREMENT,
+ content VARCHAR(255),
+ FULLTEXT INDEX (content)
+) DEFAULT CHARSET UTF8 COMMENT = 'ENGINE "InnoDB"';
+SHOW CREATE TABLE diaries;
+
+INSERT INTO diaries (content) VALUES ("Tommorow will be shiny day!");
+
+SHOW TABLES FROM performance_schema;
+
+DROP TABLE diaries;
+
+--source ../../include/mroonga/have_mroonga_deinit.inc
diff --git a/storage/mroonga/plug.in b/storage/mroonga/plug.in
new file mode 100644
index 00000000000..2c9c15f6c86
--- /dev/null
+++ b/storage/mroonga/plug.in
@@ -0,0 +1,6 @@
+MYSQL_STORAGE_ENGINE(mroonga,,[mroonga],
+[[CJK-ready fulltext search, column store]],
+[max,max-no-ndb])
+MYSQL_PLUGIN_DIRECTORY(mroonga, [storage/mroonga])
+MYSQL_PLUGIN_STATIC(mroonga, [libmroonga.a])
+MYSQL_PLUGIN_DYNAMIC(mroonga, [ha_mroonga.la])
diff --git a/storage/mroonga/plugin_version b/storage/mroonga/plugin_version
new file mode 100644
index 00000000000..be9fc83102e
--- /dev/null
+++ b/storage/mroonga/plugin_version
@@ -0,0 +1 @@
+4.6 \ No newline at end of file
diff --git a/storage/mroonga/required_groonga_normalizer_mysql_version b/storage/mroonga/required_groonga_normalizer_mysql_version
new file mode 100644
index 00000000000..af0b7ddbffd
--- /dev/null
+++ b/storage/mroonga/required_groonga_normalizer_mysql_version
@@ -0,0 +1 @@
+1.0.6
diff --git a/storage/mroonga/required_groonga_version b/storage/mroonga/required_groonga_version
new file mode 100644
index 00000000000..fcdb2e109f6
--- /dev/null
+++ b/storage/mroonga/required_groonga_version
@@ -0,0 +1 @@
+4.0.0
diff --git a/storage/mroonga/sources.am b/storage/mroonga/sources.am
new file mode 100644
index 00000000000..0cf4a64b504
--- /dev/null
+++ b/storage/mroonga/sources.am
@@ -0,0 +1,11 @@
+sources = \
+ mrn_macro.hpp \
+ mrn_constants.hpp \
+ ha_mroonga.cpp \
+ ha_mroonga.hpp \
+ mrn_table.cpp \
+ mrn_table.hpp \
+ mrn_err.h \
+ mrn_mysql.h \
+ mrn_mysql_compat.h \
+ ha_mroonga.def
diff --git a/storage/mroonga/test/Makefile.am b/storage/mroonga/test/Makefile.am
new file mode 100644
index 00000000000..ce75011bee8
--- /dev/null
+++ b/storage/mroonga/test/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS = unit
+
+TESTS = run-sql-test.sh
+TESTS_ENVIRONMENT = \
+ NO_MAKE="yes"
+
+if WITH_CUTTER
+TESTS += run-unit-test.sh
+TESTS_ENVIRONMENT += CUTTER="$(CUTTER)"
+endif
+
+EXTRA_DIST = \
+ run-unit-test.sh \
+ run-sql-test.sh
diff --git a/storage/mroonga/test/run-sql-test.sh b/storage/mroonga/test/run-sql-test.sh
new file mode 100755
index 00000000000..690f75c413b
--- /dev/null
+++ b/storage/mroonga/test/run-sql-test.sh
@@ -0,0 +1,232 @@
+#!/bin/sh
+#
+# Copyright(C) 2010 Tetsuro IKEDA
+# Copyright(C) 2010-2013 Kouhei Sutou <kou@clear-code.com>
+# Copyright(C) 2011 Kazuhiko
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+export BASE_DIR="$(cd $(dirname $0); pwd)"
+top_dir="$BASE_DIR/.."
+mroonga_test_dir="${top_dir}/mysql-test/mroonga"
+
+n_processors=1
+case `uname` in
+ Linux)
+ n_processors="$(grep '^processor' /proc/cpuinfo | wc -l)"
+ ;;
+ Darwin)
+ n_processors="$(/usr/sbin/sysctl -n hw.ncpu)"
+ ;;
+ *)
+ :
+ ;;
+esac
+
+if [ "$NO_MAKE" != "yes" ]; then
+ MAKE_ARGS=
+ if [ -n "$n_processors" ]; then
+ MAKE_ARGS="-j${n_processors}"
+ fi
+ make $MAKE_ARGS -C $top_dir > /dev/null || exit 1
+fi
+
+. "${top_dir}/config.sh"
+
+bundled_groonga_normalizer_mysql_dir="${top_dir}/vendor/groonga/vendor/plugins/groonga-normalizer-mysql"
+if [ -d "${bundled_groonga_normalizer_mysql_dir}" ]; then
+ GRN_PLUGINS_DIR="${bundled_groonga_normalizer_mysql_dir}"
+ export GRN_PLUGINS_DIR
+fi
+
+source_mysql_test_dir="${MYSQL_SOURCE_DIR}/mysql-test"
+build_mysql_test_dir="${MYSQL_BUILD_DIR}/mysql-test"
+source_test_suites_dir="${source_mysql_test_dir}/suite"
+source_test_include_dir="${source_mysql_test_dir}/include"
+build_test_suites_dir="${build_mysql_test_dir}/suite"
+build_test_include_dir="${build_mysql_test_dir}/include"
+case "${MYSQL_VERSION}" in
+ 5.1.*)
+ plugins_dir="${MYSQL_BUILD_DIR}/lib/mysql/plugin"
+ if [ ! -d "${build_test_suites_dir}" ]; then
+ mkdir -p "${build_test_suites_dir}"
+ fi
+ ;;
+ *)
+ if [ ! -d "${build_test_suites_dir}" ]; then
+ ln -s "${source_test_suites_dir}" "${build_test_suites_dir}"
+ fi
+ maria_storage_dir="${MYSQL_SOURCE_DIR}/storage/maria"
+ if [ -d "${maria_storage_dir}" ]; then
+ mariadb="yes"
+ else
+ mariadb="no"
+ fi
+ if [ "${mariadb}" = "yes" ]; then
+ if [ "${MRN_BUNDLED}" != "TRUE" ]; then
+ mariadb_mroonga_plugin_dir="${MYSQL_BUILD_DIR}/plugin/mroonga"
+ if [ ! -e "${mariadb_mroonga_plugin_dir}" ]; then
+ ln -s "${top_dir}" "${mariadb_mroonga_plugin_dir}"
+ fi
+ fi
+ plugins_dir=
+ else
+ plugins_dir="${MYSQL_SOURCE_DIR}/lib/plugin"
+ fi
+ ;;
+esac
+
+same_link_p()
+{
+ src=$1
+ dest=$2
+ if [ -L "$dest" -a "$(readlink "$dest")" = "$src" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+mroonga_mysql_test_suite_dir="${build_test_suites_dir}/mroonga"
+if ! same_link_p "${mroonga_test_dir}" "${mroonga_mysql_test_suite_dir}"; then
+ rm -rf "${mroonga_mysql_test_suite_dir}"
+ ln -s "${mroonga_test_dir}" "${mroonga_mysql_test_suite_dir}"
+fi
+
+innodb_test_suite_dir="${build_test_suites_dir}/innodb"
+mroonga_wrapper_innodb_test_suite_name="mroonga_wrapper_innodb"
+mroonga_wrapper_innodb_test_suite_dir="${build_test_suites_dir}/${mroonga_wrapper_innodb_test_suite_name}"
+mroonga_wrapper_innodb_include_dir="${mroonga_wrapper_innodb_test_suite_dir}/include/"
+if [ "$0" -nt "$(dirname "${mroonga_wrapper_innodb_test_suite_dir}")" ]; then
+ rm -rf "${mroonga_wrapper_innodb_test_suite_dir}"
+fi
+if [ ! -d "${mroonga_wrapper_innodb_test_suite_dir}" ]; then
+ cp -rp "${innodb_test_suite_dir}" "${mroonga_wrapper_innodb_test_suite_dir}"
+ mkdir -p "${mroonga_wrapper_innodb_include_dir}"
+ cp -rp "${source_test_include_dir}"/innodb[-_]*.inc \
+ "${mroonga_wrapper_innodb_include_dir}"
+ ruby -i'' \
+ -pe "\$_.gsub!(/\\bengine\\s*=\\s*innodb\\b([^;\\n]*)/i,
+ \"ENGINE=mroonga\\\1 COMMENT='ENGINE \\\"InnoDB\\\"'\")
+ \$_.gsub!(/\\b(storage_engine\\s*=\\s*)innodb\\b([^;\\n]*)/i,
+ \"\\\1mroonga\")
+ \$_.gsub!(/^(--\\s*source\\s+)(include\\/innodb)/i,
+ \"\\\1suite/mroonga_wrapper_innodb/\\\2\")
+ " \
+ ${mroonga_wrapper_innodb_test_suite_dir}/r/*.result \
+ ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test \
+ ${mroonga_wrapper_innodb_test_suite_dir}/include/*.inc
+ sed -i'' \
+ -e '1 i --source ../mroonga/include/mroonga/have_mroonga.inc' \
+ ${mroonga_wrapper_innodb_test_suite_dir}/t/*.test
+fi
+
+all_test_suite_names=""
+suite_dir="${mroonga_test_dir}/.."
+cd "${suite_dir}"
+suite_dir="$(pwd)"
+for test_suite_name in \
+ $(find mroonga -type d -name 'include' '!' -prune -o \
+ -type d '!' -name 'mroonga' \
+ '!' -name 'include' \
+ '!' -name '[tr]'); do
+ if [ -n "${all_test_suite_names}" ]; then
+ all_test_suite_names="${all_test_suite_names},"
+ fi
+ all_test_suite_names="${all_test_suite_names}${test_suite_name}"
+done
+cd -
+
+if [ -n "${plugins_dir}" ]; then
+ if [ -d "${top_dir}/.libs" ]; then
+ make -C ${top_dir} \
+ install-pluginLTLIBRARIES \
+ plugindir=${plugins_dir} > /dev/null || \
+ exit 1
+ else
+ mkdir -p "${plugins_dir}"
+ cp "${top_dir}/ha_mroonga.so" "${plugins_dir}" || exit 1
+ fi
+fi
+
+test_suite_names=""
+test_names=""
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --manual-gdb|--debug)
+ n_processors=1
+ break
+ ;;
+ --*)
+ break
+ ;;
+ *)
+ case "$1" in
+ */t/*.test)
+ test_suite_name=$(echo "$1" | sed -e 's,/t/.*\.test,,g')
+ test_suite_name=$(cd "$test_suite_name" && pwd)
+ test_name=$(echo "$1" | sed -e 's,.*/t/\(.*\)\.test,\1,g')
+ ;;
+ *)
+ if [ -d "$1" ]; then
+ test_suite_name=$(cd "$1" && pwd)
+ else
+ test_suite_name="$1"
+ fi
+ test_name=""
+ ;;
+ esac
+ shift
+
+ if [ -n "${test_name}" ]; then
+ if [ -n "${test_names}" ]; then
+ test_names="${test_names}|"
+ fi
+ test_names="${test_names}.*${test_name}"
+ fi
+
+ test_suite_name=$(echo "$test_suite_name" | sed -e "s,^${suite_dir}/,,")
+ if echo "${test_suite_names}" | grep --quiet "${test_suite_name}"; then
+ continue
+ fi
+ if [ -n "${test_suite_names}" ]; then
+ test_suite_names="${test_suite_names},"
+ fi
+ test_suite_names="${test_suite_names}${test_suite_name}"
+ ;;
+ esac
+done
+
+if [ -z "$test_suite_names" ]; then
+ test_suite_names="${all_test_suite_names}"
+fi
+
+mysql_test_run_args=""
+mysql_test_run_args="${mysql_test_run_args} --mem"
+mysql_test_run_args="${mysql_test_run_args} --no-check-testcases"
+mysql_test_run_args="${mysql_test_run_args} --parallel=${n_processors}"
+mysql_test_run_args="${mysql_test_run_args} --retry=1"
+mysql_test_run_args="${mysql_test_run_args} --suite=${test_suite_names}"
+mysql_test_run_args="${mysql_test_run_args} --force"
+mysql_test_run_args="${mysql_test_run_args} --mysqld=--loose-plugin-load-add=ha_mroonga.so"
+mysql_test_run_args="${mysql_test_run_args} --mysqld=--loose-plugin-mroonga=ON"
+if [ -n "$test_names" ]; then
+ mysql_test_run_args="${mysql_test_run_args} --do-test=${test_names}"
+fi
+
+(cd "$build_mysql_test_dir" && \
+ ./mysql-test-run.pl \
+ ${mysql_test_run_args} \
+ "$@")
diff --git a/storage/mroonga/test/run-unit-test.sh b/storage/mroonga/test/run-unit-test.sh
new file mode 100755
index 00000000000..6d99513123d
--- /dev/null
+++ b/storage/mroonga/test/run-unit-test.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+export BASE_DIR="`dirname $0`"
+top_dir="$BASE_DIR/.."
+
+if test -z "$NO_MAKE"; then
+ MAKE_ARGS=
+ case `uname` in
+ Linux)
+ MAKE_ARGS="-j$(grep '^processor' /proc/cpuinfo | wc -l)"
+ ;;
+ Darwin)
+ MAKE_ARGS="-j$(/usr/sbin/sysctl -n hw.ncpu)"
+ ;;
+ *)
+ :
+ ;;
+ esac
+ make $MAKE_ARGS -C $top_dir > /dev/null || exit 1
+fi
+
+if test -z "$CUTTER"; then
+ CUTTER="`make -s -C $top_dir echo-cutter`"
+fi
+export CUTTER
+
+CUTTER_ARGS=
+CUTTER_WRAPPER=
+if test x"$STOP" = x"yes"; then
+ CUTTER_ARGS="-v v --fatal-failures"
+else
+ CUTTER_ARGS="-v v"
+fi
+
+if test x"$CUTTER_DEBUG" = x"yes"; then
+ if test x"$TUI_DEBUG" = x"yes"; then
+ CUTTER_WRAPPER="$top_dir/libtool --mode=execute gdb --tui --args"
+ else
+ CUTTER_WRAPPER="$top_dir/libtool --mode=execute gdb --args"
+ fi
+ CUTTER_ARGS="--keep-opening-modules"
+elif test x"$CUTTER_CHECK_LEAK" = x"yes"; then
+ CUTTER_WRAPPER="$top_dir/libtool --mode=execute valgrind "
+ CUTTER_WRAPPER="$CUTTER_WRAPPER --leak-check=full --show-reachable=yes -v"
+ CUTTER_ARGS="--keep-opening-modules"
+fi
+
+CUTTER_ARGS="$CUTTER_ARGS -s $BASE_DIR"
+$CUTTER_WRAPPER $CUTTER $CUTTER_ARGS "$@" $BASE_DIR
diff --git a/storage/mroonga/test/unit/Makefile.am b/storage/mroonga/test/unit/Makefile.am
new file mode 100644
index 00000000000..3950ce0dc7f
--- /dev/null
+++ b/storage/mroonga/test/unit/Makefile.am
@@ -0,0 +1,27 @@
+if WITH_CUTTER
+noinst_LTLIBRARIES = \
+ test_mrn_path_mapper.la
+endif
+
+AM_CPPFLAGS = \
+ $(GROONGA_CFLAGS) \
+ $(CPPCUTTER_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -module \
+ -rpath $(libdir) \
+ -avoid-version \
+ -no-undefined
+
+LIBS = \
+ $(CPPCUTTER_LIBS) \
+ $(GROONGA_LIBS) \
+ $(MECAB_LIBS)
+
+test_mrn_path_mapper_la_SOURCES = \
+ test_mrn_path_mapper.cpp
+
+test_mrn_path_mapper_la_LIBADD = \
+ $(top_builddir)/lib/libmrn_no_mysql.la
diff --git a/storage/mroonga/test/unit/test_mrn_path_mapper.cpp b/storage/mroonga/test/unit/test_mrn_path_mapper.cpp
new file mode 100644
index 00000000000..70009c5b32e
--- /dev/null
+++ b/storage/mroonga/test/unit/test_mrn_path_mapper.cpp
@@ -0,0 +1,116 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+#include <string.h>
+#include <cppcutter.h>
+
+#include <mrn_path_mapper.hpp>
+
+namespace test_mrn_path_mapper {
+ namespace db_path {
+ namespace without_prefix {
+ void test_normal_db() {
+ mrn::PathMapper mapper("./db/", NULL);
+ cppcut_assert_equal("db.mrn", mapper.db_path());
+ }
+
+ void test_normal_table() {
+ mrn::PathMapper mapper("./db/table", NULL);
+ cppcut_assert_equal("db.mrn", mapper.db_path());
+ }
+
+ void test_temporary_table() {
+ mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0", NULL);
+ cppcut_assert_equal("/tmp/mysqld.1/#sql27c5_1_0.mrn",
+ mapper.db_path());
+ }
+ }
+
+ namespace with_prefix {
+ void test_normal_db() {
+ mrn::PathMapper mapper("./db/", "mroonga.data/");
+ cppcut_assert_equal("mroonga.data/db.mrn", mapper.db_path());
+ }
+
+ void test_normal_table() {
+ mrn::PathMapper mapper("./db/table", "mroonga.data/");
+ cppcut_assert_equal("mroonga.data/db.mrn", mapper.db_path());
+ }
+
+ void test_temporary_table() {
+ mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0", "mroonga.data/");
+ cppcut_assert_equal("/tmp/mysqld.1/#sql27c5_1_0.mrn",
+ mapper.db_path());
+ }
+ }
+ }
+
+ namespace db_name {
+ void test_normal_db() {
+ mrn::PathMapper mapper("./db/", NULL);
+ cppcut_assert_equal("db", mapper.db_name());
+ }
+
+ void test_normal_table() {
+ mrn::PathMapper mapper("./db/table", NULL);
+ cppcut_assert_equal("db", mapper.db_name());
+ }
+
+ void test_temporary_table() {
+ mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0", NULL);
+ cppcut_assert_equal("/tmp/mysqld.1/#sql27c5_1_0",
+ mapper.db_name());
+ }
+ }
+
+ namespace table_name {
+ void test_normal_table() {
+ mrn::PathMapper mapper("./db/table", NULL);
+ cppcut_assert_equal("table", mapper.table_name());
+ }
+
+ void test_temporary_table() {
+ mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0", NULL);
+ cppcut_assert_equal("#sql27c5_1_0", mapper.table_name());
+ }
+
+ void test_underscore_start_table() {
+ mrn::PathMapper mapper("./db/_table", NULL);
+ cppcut_assert_equal("@005ftable", mapper.table_name());
+ }
+ }
+
+ namespace mysql_table_name {
+ void test_normal_table() {
+ mrn::PathMapper mapper("./db/table", NULL);
+ cppcut_assert_equal("table", mapper.mysql_table_name());
+ }
+
+ void test_temporary_table() {
+ mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0", NULL);
+ cppcut_assert_equal("#sql27c5_1_0", mapper.mysql_table_name());
+ }
+
+ void test_underscore_start_table() {
+ mrn::PathMapper mapper("./db/_table", NULL);
+ cppcut_assert_equal("_table", mapper.mysql_table_name());
+ }
+ }
+}
+
diff --git a/storage/mroonga/tools/Makefile.am b/storage/mroonga/tools/Makefile.am
new file mode 100644
index 00000000000..b65b930029b
--- /dev/null
+++ b/storage/mroonga/tools/Makefile.am
@@ -0,0 +1,6 @@
+noinstall_ruby_scripts = \
+ prepare-sphinx-html.rb \
+ upload-to-github.rb
+
+EXTRA_DIST = \
+ $(noinstall_ruby_scripts)
diff --git a/storage/mroonga/tools/prepare-sphinx-html.rb b/storage/mroonga/tools/prepare-sphinx-html.rb
new file mode 100755
index 00000000000..76eed24a042
--- /dev/null
+++ b/storage/mroonga/tools/prepare-sphinx-html.rb
@@ -0,0 +1,183 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+if ARGV.size != 2
+ puts "Usage: #{$0} SOURCE_DIR DEST_DIR"
+ exit(false)
+end
+
+require 'pathname'
+require "fileutils"
+
+def fix_link(text, extension, language)
+ send("fix_#{extension}_link", text, language)
+end
+
+def fix_link_path(text)
+ text.gsub(/\b_(sources|static|images)\b/, '\1')
+end
+
+def fix_language_link(url, language)
+ url.gsub(/\A((?:\.\.\/){2,})([a-z]{2})\/html\//) do
+ relative_base_path = $1
+ link_language = $2
+ close_quote = $3
+ if language == "en"
+ relative_base_path = relative_base_path.gsub(/\A\.\.\//, '')
+ end
+ if link_language != "en"
+ relative_base_path += "#{link_language}/"
+ end
+ "#{relative_base_path}docs/"
+ end
+end
+
+def fix_html_link(html, language)
+ html = html.gsub(/(href|src)="(.+?)"/) do
+ attribute = $1
+ link = $2
+ link = fix_link_path(link)
+ link = fix_language_link(link, language)
+ "#{attribute}=\"#{link}\""
+ end
+ html.gsub(/(id="top-link" href=)"(.+?)"/) do
+ prefix = $1
+ top_path = $2.gsub(/\/index\.html\z/, '/')
+ top_path = "./" if ["index.html", "#"].include?(top_path)
+ "#{prefix}\"#{top_path}../\""
+ end
+end
+
+def add_language_annotation_to_source_label(html)
+ html.gsub(/>(ソースコードを表示)</) do
+ label = $1
+ ">#{label}(英語)<"
+ end
+end
+
+def fix_js_link(js, language)
+ fix_link_path(js)
+end
+
+LANGUAGE_TO_LOCALE = {
+ "ja" => "ja_JP",
+ "en" => "en_US",
+}
+
+def insert_facebook_html_header(html)
+ html.gsub(/<\/head>/) do
+ <<-HTML
+ <meta property="fb:page_id" content="238184682903165" /><!-- mroonga -->
+ <meta property="fb:admins" content="664204556" /><!-- kouhei.sutou -->
+ <meta property="og:type" content="product" />
+ <meta property="og:image" content="http://mroonga.org/images/logos/mroonga-icon-full-size.png" />
+ <meta property="og:site_name" content="mroonga" />
+
+ <link rel="stylesheet" href="/css/sphinx.css" type="text/css" />
+ </head>
+ HTML
+ end
+end
+
+def insert_facebook_html_fb_root(html)
+ html.gsub(/<body>/) do
+ <<-HTML
+ <body>
+ <div id="fb-root"></div>
+ HTML
+ end
+end
+
+def insert_facebook_html_buttons(html)
+ html.gsub(/(<div class="other-language-links">)/) do
+ <<-HTML
+ <div class="facebook-buttons">
+ <fb:like href="http://www.facebook.com/pages/mroonga/238184682903165"
+ layout="standard"
+ width="290"></fb:like>
+ </div>
+ #{$1}
+ HTML
+ end
+end
+
+def insert_facebook_html_footer(html, language)
+ locale = LANGUAGE_TO_LOCALE[language]
+ raise "unknown locale for language #{language.inspect}" if locale.nil?
+ html.gsub(/<\/body>/) do
+ <<-HTML
+ <script src="http://connect.facebook.net/#{locale}/all.js"></script>
+
+ <script>
+ FB.init({
+ appId : null,
+ status : true, // check login status
+ cookie : true, // enable cookies to allow the server to access the session
+ xfbml : true // parse XFBML
+ });
+ </script>
+ </body>
+ HTML
+ end
+end
+
+def insert_facebook_html(html, language)
+ html = insert_facebook_html_header(html)
+ html = insert_facebook_html_fb_root(html)
+ html = insert_facebook_html_buttons(html)
+ html = insert_facebook_html_footer(html, language)
+ html
+end
+
+source_dir, dest_dir = ARGV
+
+source_dir = Pathname.new(source_dir)
+dest_dir = Pathname.new(dest_dir)
+
+language_dirs = []
+source_dir.each_entry do |top_level_path|
+ language_dirs << top_level_path if /\A[a-z]{2}\z/ =~ top_level_path.to_s
+end
+
+language_dirs.each do |language_dir|
+ language = language_dir.to_s
+ language_source_dir = source_dir + language_dir + "html"
+ language_dest_dir = dest_dir + language_dir
+ language_source_dir.find do |source_path|
+ relative_path = source_path.relative_path_from(language_source_dir)
+ dest_path = language_dest_dir + relative_path
+ if source_path.directory?
+ dest_path.mkpath
+ else
+ case source_path.extname
+ when ".html", ".js"
+ content = source_path.read
+ extension = source_path.extname.gsub(/\A\./, '')
+ content = fix_link(content, extension, language)
+ if extension == "html"
+ content = insert_facebook_html(content, language)
+ content = add_language_annotation_to_source_label(content)
+ end
+ dest_path.open("wb") do |dest|
+ dest.print(content.strip)
+ end
+ FileUtils.touch(dest_path, :mtime => source_path.mtime)
+ else
+ case source_path.basename.to_s
+ when ".buildinfo"
+ # ignore
+ else
+ FileUtils.cp(source_path, dest_path, :preserve => true)
+ end
+ end
+ end
+ end
+end
+
+dest_dir.find do |dest_path|
+ if dest_path.directory? and /\A_/ =~ dest_path.basename.to_s
+ normalized_dest_path = dest_path + ".."
+ normalized_dest_path += dest_path.basename.to_s.gsub(/\A_/, '')
+ FileUtils.mv(dest_path, normalized_dest_path)
+ end
+end
diff --git a/storage/mroonga/tools/travis/before_script.sh b/storage/mroonga/tools/travis/before_script.sh
new file mode 100755
index 00000000000..8fd3f78f1db
--- /dev/null
+++ b/storage/mroonga/tools/travis/before_script.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# Copyright(C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# set -x
+set -e
+
+if [ "${MROONGA_BUNDLED}" = "yes" ]; then
+ cmake_args=(-DCMAKE_BUILD_TYPE=Debug)
+ if [ "${MROONGA_TEST_EMBEDDED}" = "yes" ]; then
+ cmake_args=("${cmake_args[@]}" "-DWITH_EMBEDDED_SERVER=TRUE")
+ fi
+ cmake . "${cmake_args[@]}"
+else
+ ./autogen.sh
+
+ if [ -d /opt/mysql/ ]; then
+ PATH=$(echo /opt/mysql/server-*/bin/):$PATH
+ fi
+ ./configure \
+ --with-mysql-source=$PWD/vendor/mysql
+fi
diff --git a/storage/mroonga/tools/travis/install.sh b/storage/mroonga/tools/travis/install.sh
new file mode 100755
index 00000000000..fd3d2187914
--- /dev/null
+++ b/storage/mroonga/tools/travis/install.sh
@@ -0,0 +1,103 @@
+#!/bin/sh
+#
+# Copyright(C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# set -x
+set -e
+
+mariadb_download_base=http://mirror.jmu.edu/pub/mariadb
+
+export GROONGA_MASTER=yes
+export GROONGA_NORMALIZER_MYSQL_MASTER=yes
+
+curl --silent --location https://github.com/groonga/groonga/raw/master/data/travis/setup.sh | sh
+curl --silent --location https://github.com/groonga/groonga-normalizer-mysql/raw/master/data/travis/setup.sh | sh
+# curl --silent --location https://github.com/clear-code/cutter/raw/master/data/travis/setup.sh | sh
+
+if [ ! -f /usr/lib/groonga/plugins/tokenizers/mecab.so ]; then
+ sudo apt-get -qq -y install groonga-tokenizer-mecab
+fi
+
+if [ "${MROONGA_BUNDLED}" = "yes" ]; then
+ mkdir -p .mroonga
+ mv * .mroonga/
+ mv .mroonga/tools ./
+ sudo apt-get -qq -y build-dep mysql-server
+ # Support MariaDB for now.
+ download_base=${mariadb_download_base}/${MYSQL_VERSION}
+ tar_gz=${MYSQL_VERSION}.tar.gz
+ curl -O ${download_base}/source/${tar_gz}
+ tar xzf $tar_gz
+ mv ${MYSQL_VERSION}/* ./
+ mv .mroonga storage/mroonga
+ rm -rf ${MYSQL_VERSION}
+else
+ mkdir -p vendor
+ cd vendor
+
+ version=$(echo "$MYSQL_VERSION" | sed -e 's/^\(mysql\|mariadb\)-//')
+ series=$(echo "$version" | sed -e 's/\.[0-9]*\(-\?[a-z]*\)\?$//g')
+ case "$MYSQL_VERSION" in
+ mysql-*)
+ sudo apt-get -qq update
+ sudo apt-get -qq -y build-dep mysql-server
+ if [ "$version" = "system" ]; then
+ sudo apt-get -qq -y install \
+ mysql-server mysql-testsuite libmysqld-dev
+ apt-get -qq source mysql-server
+ ln -s $(find . -maxdepth 1 -type d | sort | tail -1) mysql
+ else
+ download_base="http://cdn.mysql.com/Downloads/MySQL-${series}/"
+ if [ "$(uname -m)" = "x86_64" ]; then
+ architecture=x86_64
+ else
+ architecture=i686
+ fi
+ deb=mysql-${version}-debian6.0-${architecture}.deb
+ tar_gz=mysql-${version}.tar.gz
+ curl -O ${download_base}${deb} &
+ curl -O ${download_base}${tar_gz} &
+ wait
+ sudo apt-get -qq -y install libaio1
+ sudo dpkg -i $deb
+ tar xzf $tar_gz
+ ln -s mysql-${version} mysql
+ fi
+ ;;
+ mariadb-*)
+ sudo apt-get -qq -y remove --purge mysql-common
+
+ distribution=$(lsb_release --short --id | tr 'A-Z' 'a-z')
+ code_name=$(lsb_release --short --codename)
+ component=main
+ apt_url_base="${mariadb_download_base}/repo/${series}"
+ cat <<EOF | sudo tee /etc/apt/sources.list.d/mariadb.list
+deb ${apt_url_base}/${distribution}/ ${code_name} ${component}
+deb-src ${apt_url_base}/${distribution}/ ${code_name} ${component}
+EOF
+ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
+ sudo apt-get -qq update
+ sudo apt-get -qq -y build-dep mariadb-server
+ sudo apt-get -qq -y install \
+ mariadb-server libmariadbclient-dev mariadb-test
+ apt-get -qq source mariadb-server
+ ln -s $(find . -maxdepth 1 -type d | sort | tail -1) mysql
+ ;;
+ esac
+
+ cd ..
+fi
diff --git a/storage/mroonga/tools/travis/script.sh b/storage/mroonga/tools/travis/script.sh
new file mode 100755
index 00000000000..632a4db7a7e
--- /dev/null
+++ b/storage/mroonga/tools/travis/script.sh
@@ -0,0 +1,120 @@
+#!/bin/bash
+#
+# Copyright(C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# set -x
+set -e
+
+base_dir="$(cd $(dirname $0); pwd)"
+top_dir="${base_dir}/../.."
+
+bundled_mroonga_dir="${top_dir}/storage/mroonga"
+if [ -f "${bundled_mroonga_dir}/config.sh" ]; then
+ mroonga_dir="${bundled_mroonga_dir}"
+ . "${bundled_mroonga_dir}/config.sh"
+else
+ mroonga_dir="${top_dir}"
+ . "${top_dir}/config.sh"
+fi
+
+n_processors="$(grep '^processor' /proc/cpuinfo | wc -l)"
+max_n_processors=8
+if (( $n_processors > $max_n_processors )); then
+ n_processors=$max_n_processors
+fi
+
+build()
+{
+ if [ "${MROONGA_BUNDLED}" = "yes" ]; then
+ make > /dev/null
+ else
+ make -j${n_processors} > /dev/null
+ fi
+}
+
+run_unit_test()
+{
+ if [ "${MROONGA_BUNDLED}" != "yes" ]; then
+ NO_MAKE=yes ${mroonga_dir}/test/run-unit-test.sh
+ fi
+}
+
+prepare_mysql_test_dir()
+{
+ mysql_test_dir=/usr/mysql-test
+ if [ -d /usr/lib/mysql-testsuite/ ]; then
+ sudo cp -a /usr/lib/mysql-testsuite/ ${mysql_test_dir}/
+ elif [ -d /usr/share/mysql/mysql-test/ ]; then
+ sudo cp -a /usr/share/mysql/mysql-test/ ${mysql_test_dir}/
+ elif [ -d /opt/mysql/ ]; then
+ mysql_test_dir=$(echo /opt/mysql/server-*/mysql-test)
+ else
+ sudo cp -a ${MYSQL_SOURCE_DIR}/mysql-test/ ${mysql_test_dir}/
+ fi
+ sudo chown -R $(id -u):$(id -g) ${mysql_test_dir}/
+
+ cp -a ${mroonga_dir}/mysql-test/mroonga/ ${mysql_test_dir}/suite/
+}
+
+collect_test_suite_names()
+{
+ cd ${mysql_test_dir}/suite/
+ test_suite_names=""
+ for test_suite_name in $(find mroonga -type d '!' -name '[tr]'); do
+ if [ -n "${test_suite_names}" ]; then
+ test_suite_names="${test_suite_names},"
+ fi
+ test_suite_names="${test_suite_names}${test_suite_name}"
+ done
+ cd -
+}
+
+prepare_sql_test()
+{
+ sudo make install > /dev/null
+ prepare_mysql_test_dir
+ collect_test_suite_names
+}
+
+run_sql_test()
+{
+ test_args=()
+ if [ "${MROONGA_TEST_EMBEDDED}" = "yes" ]; then
+ test_args=("${test_args[@]}" "--embedded-server")
+ fi
+
+ if [ "${MROONGA_BUNDLED}" = "yes" ]; then
+ ${mroonga_dir}/test/run-sql-test.sh \
+ "${test_args[@]}" \
+ --parallel="${n_processors}"
+ else
+ prepare_sql_test
+
+ cd ${mysql_test_dir}/
+ ./mysql-test-run.pl \
+ "${test_args[@]}" \
+ --no-check-testcases \
+ --parallel="${n_processors}" \
+ --retry=1 \
+ --suite="${test_suite_names}" \
+ --force
+ fi
+}
+
+build
+# run_unit_test
+run_sql_test
diff --git a/storage/mroonga/tools/upload-to-github.rb b/storage/mroonga/tools/upload-to-github.rb
new file mode 100755
index 00000000000..572d65c3f0b
--- /dev/null
+++ b/storage/mroonga/tools/upload-to-github.rb
@@ -0,0 +1,42 @@
+#!/usr/bin/env ruby
+
+if ARGV.size < 1
+ puts "Usage: #{$0} USER FILE ..."
+ puts " e.g.: #{$0} kou mroonga-1.10.tar.gz ..."
+ exit false
+end
+
+require "rubygems"
+require "github_api"
+require "mime/types"
+
+user, *files = *ARGV
+
+print "password[#{user}]: "
+system("stty -echo")
+password = STDIN.gets.chomp
+system("stty echo")
+puts
+
+github = Github.new(:login => user, :password => password)
+files.each do |file|
+ content_type = MIME::Types.type_for(file)[0].to_s
+ resource = github.repos.downloads.create("mroonga", "mroonga",
+ :name => File.basename(file),
+ :size => File.size(file),
+ :description => File.basename(file),
+ :content_type => content_type)
+ p resource
+
+ system("curl",
+ "-F", "key=#{resource.path}",
+ "-F", "acl=#{resource.acl}",
+ "-F", "success_action_status=201",
+ "-F", "Filename=#{resource.name}",
+ "-F", "AWSAccessKeyId=#{resource.accesskeyid}",
+ "-F", "Policy=#{resource.policy}",
+ "-F", "Signature=#{resource.signature}",
+ "-F", "Content-Type=#{resource.mime_type}",
+ "-F", "file=@#{file}",
+ resource.s3_url)
+end
diff --git a/storage/mroonga/udf/Makefile.am b/storage/mroonga/udf/Makefile.am
new file mode 100644
index 00000000000..f3c2966f6df
--- /dev/null
+++ b/storage/mroonga/udf/Makefile.am
@@ -0,0 +1,10 @@
+AM_CPPFLAGS = \
+ $(MYSQL_INCLUDES) \
+ $(GROONGA_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib
+
+noinst_LTLIBRARIES = \
+ libmrn_udf.la
+
+include sources.am
diff --git a/storage/mroonga/udf/mrn_udf_command.cpp b/storage/mroonga/udf/mrn_udf_command.cpp
new file mode 100644
index 00000000000..ba92e8daa26
--- /dev/null
+++ b/storage/mroonga/udf/mrn_udf_command.cpp
@@ -0,0 +1,171 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+#include <mrn_path_mapper.hpp>
+#include <mrn_windows.hpp>
+#include <mrn_macro.hpp>
+#include <mrn_database_manager.hpp>
+
+extern mrn::DatabaseManager *mrn_db_manager;
+
+MRN_BEGIN_DECLS
+
+struct CommandInfo
+{
+ grn_ctx ctx;
+ grn_obj *db;
+ bool use_shared_db;
+ String result;
+};
+
+MRN_API my_bool mroonga_command_init(UDF_INIT *initid, UDF_ARGS *args,
+ char *message)
+{
+ CommandInfo *info = NULL;
+
+ initid->ptr = NULL;
+ if (args->arg_count != 1) {
+ sprintf(message,
+ "mroonga_command(): Incorrect number of arguments: %u for 1",
+ args->arg_count);
+ goto error;
+ }
+ if (args->arg_type[0] != STRING_RESULT) {
+ strcpy(message,
+ "mroonga_command(): The 1st argument must be command as string");
+ goto error;
+ }
+ initid->maybe_null = 1;
+ initid->const_item = 1;
+
+ info = (CommandInfo *)my_malloc(sizeof(CommandInfo),
+ MYF(MY_WME | MY_ZEROFILL));
+ if (!info) {
+ strcpy(message, "mroonga_command(): out of memory");
+ goto error;
+ }
+
+ grn_ctx_init(&(info->ctx), 0);
+ {
+ const char *current_db_path = current_thd->db;
+ const char *action;
+ if (current_db_path) {
+ action = "open database";
+ int error = mrn_db_manager->open(current_db_path, &(info->db));
+ if (error == 0) {
+ grn_ctx_use(&(info->ctx), info->db);
+ info->use_shared_db = true;
+ }
+ } else {
+ action = "create anonymous database";
+ info->db = grn_db_create(&(info->ctx), NULL, NULL);
+ info->use_shared_db = false;
+ }
+ if (!info->db) {
+ sprintf(message,
+ "mroonga_command(): failed to %s: %s",
+ action,
+ info->ctx.errbuf);
+ goto error;
+ }
+ }
+
+ initid->ptr = (char *)info;
+
+ return FALSE;
+
+error:
+ if (info) {
+ if (!info->use_shared_db) {
+ grn_obj_close(&(info->ctx), info->db);
+ }
+ grn_ctx_fin(&(info->ctx));
+ my_free(info, MYF(0));
+ }
+ return TRUE;
+}
+
+MRN_API char *mroonga_command(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *length, char *is_null, char *error)
+{
+ CommandInfo *info = (CommandInfo *)initid->ptr;
+ grn_ctx *ctx = &(info->ctx);
+ char *command;
+ unsigned int command_length;
+ int flags = 0;
+
+ if (!args->args[0]) {
+ *is_null = 1;
+ return NULL;
+ }
+
+ *is_null = 0;
+ command = args->args[0];
+ command_length = args->lengths[0];
+
+ grn_ctx_send(ctx, command, command_length, 0);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ goto error;
+ }
+
+ info->result.length(0);
+ do {
+ char *buffer;
+ unsigned int buffer_length;
+ grn_ctx_recv(ctx, &buffer, &buffer_length, &flags);
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_READ, ctx->errbuf, MYF(0));
+ goto error;
+ }
+ if (buffer_length > 0) {
+ if (info->result.reserve(buffer_length)) {
+ my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM);
+ goto error;
+ }
+ info->result.q_append(buffer, buffer_length);
+ }
+ } while (flags & GRN_CTX_MORE);
+
+ *length = info->result.length();
+ return (char *)(info->result.ptr());
+
+error:
+ *error = 1;
+ return NULL;
+}
+
+MRN_API void mroonga_command_deinit(UDF_INIT *initid)
+{
+ CommandInfo *info = (CommandInfo *)initid->ptr;
+ if (info) {
+ if (!info->use_shared_db) {
+ grn_obj_close(&(info->ctx), info->db);
+ }
+ grn_ctx_fin(&(info->ctx));
+ info->result.free();
+ my_free(info, MYF(0));
+ }
+}
+
+MRN_END_DECLS
diff --git a/storage/mroonga/udf/mrn_udf_escape.cpp b/storage/mroonga/udf/mrn_udf_escape.cpp
new file mode 100644
index 00000000000..ff997e7581f
--- /dev/null
+++ b/storage/mroonga/udf/mrn_udf_escape.cpp
@@ -0,0 +1,154 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+#include <mrn_path_mapper.hpp>
+#include <mrn_windows.hpp>
+#include <mrn_macro.hpp>
+
+MRN_BEGIN_DECLS
+
+struct EscapeInfo
+{
+ grn_ctx ctx;
+ grn_obj target_characters;
+ grn_obj escaped_query;
+ bool processed;
+};
+
+MRN_API my_bool mroonga_escape_init(UDF_INIT *initid, UDF_ARGS *args,
+ char *message)
+{
+ EscapeInfo *info = NULL;
+
+ initid->ptr = NULL;
+ if (!(1 <= args->arg_count && args->arg_count <= 2)) {
+ sprintf(message,
+ "mroonga_escape(): Incorrect number of arguments: %u for 1..2",
+ args->arg_count);
+ goto error;
+ }
+ if (args->arg_type[0] != STRING_RESULT) {
+ strcpy(message,
+ "mroonga_escape(): The 1st argument must be query as string");
+ goto error;
+ }
+ if (args->arg_count == 2) {
+ if (args->arg_type[1] != STRING_RESULT) {
+ strcpy(message,
+ "mroonga_escape(): "
+ "The 2st argument must be escape target characters as string");
+ goto error;
+ }
+ }
+
+ initid->maybe_null = 1;
+ initid->const_item = 1;
+
+ info = (EscapeInfo *)my_malloc(sizeof(EscapeInfo),
+ MYF(MY_WME | MY_ZEROFILL));
+ if (!info) {
+ strcpy(message, "mroonga_escape(): out of memory");
+ goto error;
+ }
+
+ grn_ctx_init(&(info->ctx), 0);
+ GRN_TEXT_INIT(&(info->target_characters), 0);
+ GRN_TEXT_INIT(&(info->escaped_query), 0);
+ info->processed = false;
+
+ initid->ptr = (char *)info;
+
+ return FALSE;
+
+error:
+ if (info) {
+ grn_ctx_fin(&(info->ctx));
+ my_free(info, MYF(0));
+ }
+ return TRUE;
+}
+
+static void escape(EscapeInfo *info, UDF_ARGS *args)
+{
+ grn_ctx *ctx = &(info->ctx);
+ char *query = args->args[0];
+ unsigned int query_length = args->lengths[0];
+
+ if (args->arg_count == 2) {
+ char *target_characters = args->args[1];
+ unsigned int target_characters_length = args->lengths[1];
+ GRN_TEXT_PUT(ctx, &(info->target_characters),
+ target_characters,
+ target_characters_length);
+ GRN_TEXT_PUTC(ctx, &(info->target_characters), '\0');
+ grn_expr_syntax_escape(ctx, query, query_length,
+ GRN_TEXT_VALUE(&(info->target_characters)),
+ GRN_QUERY_ESCAPE,
+ &(info->escaped_query));
+ } else {
+ grn_expr_syntax_escape_query(ctx, query, query_length,
+ &(info->escaped_query));
+ }
+}
+
+MRN_API char *mroonga_escape(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *length, char *is_null, char *error)
+{
+ EscapeInfo *info = (EscapeInfo *)initid->ptr;
+ grn_ctx *ctx = &(info->ctx);
+
+ if (!args->args[0]) {
+ *is_null = 1;
+ return NULL;
+ }
+
+ *is_null = 0;
+
+ if (!info->processed) {
+ escape(info, args);
+ info->processed = true;
+ }
+
+ if (ctx->rc) {
+ my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));
+ goto error;
+ }
+
+ *length = GRN_TEXT_LEN(&(info->escaped_query));
+ return (char *)(GRN_TEXT_VALUE(&(info->escaped_query)));
+
+error:
+ *error = 1;
+ return NULL;
+}
+
+MRN_API void mroonga_escape_deinit(UDF_INIT *initid)
+{
+ EscapeInfo *info = (EscapeInfo *)initid->ptr;
+ if (info) {
+ grn_obj_unlink(&(info->ctx), &(info->target_characters));
+ grn_obj_unlink(&(info->ctx), &(info->escaped_query));
+ grn_ctx_fin(&(info->ctx));
+ my_free(info, MYF(0));
+ }
+}
+
+MRN_END_DECLS
diff --git a/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp b/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp
new file mode 100644
index 00000000000..b54f5c53206
--- /dev/null
+++ b/storage/mroonga/udf/mrn_udf_last_insert_grn_id.cpp
@@ -0,0 +1,54 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+#include <mrn_windows.hpp>
+#include <mrn_table.hpp>
+#include <mrn_macro.hpp>
+
+MRN_BEGIN_DECLS
+
+MRN_API my_bool last_insert_grn_id_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
+{
+ if (args->arg_count != 0) {
+ strcpy(message, "last_insert_grn_id must not have arguments");
+ return 1;
+ }
+ initid->maybe_null = 0;
+ return 0;
+}
+
+MRN_API longlong last_insert_grn_id(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
+{
+ THD *thd = current_thd;
+ st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, false);
+ if (slot_data == NULL) {
+ return 0;
+ }
+ longlong last_insert_record_id = slot_data->last_insert_record_id;
+ return last_insert_record_id;
+}
+
+MRN_API void last_insert_grn_id_deinit(UDF_INIT *initid)
+{
+}
+
+MRN_END_DECLS
diff --git a/storage/mroonga/udf/mrn_udf_snippet.cpp b/storage/mroonga/udf/mrn_udf_snippet.cpp
new file mode 100644
index 00000000000..84166a36f16
--- /dev/null
+++ b/storage/mroonga/udf/mrn_udf_snippet.cpp
@@ -0,0 +1,302 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2010 Tetsuro IKEDA
+ Copyright(C) 2010-2013 Kentoku SHIBA
+ Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrn_mysql.h>
+#include <mrn_mysql_compat.h>
+#include <mrn_err.h>
+#include <mrn_encoding.hpp>
+#include <mrn_windows.hpp>
+#include <mrn_table.hpp>
+#include <mrn_macro.hpp>
+
+MRN_BEGIN_DECLS
+
+struct st_mrn_snip_info
+{
+ grn_ctx ctx;
+ grn_obj *snippet;
+ String result_str;
+};
+
+static my_bool mrn_snippet_prepare(st_mrn_snip_info *snip_info, UDF_ARGS *args,
+ char *message, grn_obj **snippet)
+{
+ unsigned int i;
+ CHARSET_INFO *cs;
+ grn_ctx *ctx = &snip_info->ctx;
+ long long snip_max_len;
+ long long snip_max_num;
+ long long skip_leading_spaces;
+ long long html_escape;
+ int flags = GRN_SNIP_COPY_TAG;
+ grn_snip_mapping *mapping = NULL;
+ grn_rc rc;
+ String *result_str = &snip_info->result_str;
+
+ *snippet = NULL;
+ snip_max_len = *((long long *) args->args[1]);
+ snip_max_num = *((long long *) args->args[2]);
+
+ if (args->arg_type[3] == STRING_RESULT) {
+ if (!(cs = get_charset_by_name(args->args[3], MYF(0)))) {
+ snprintf(message, MYSQL_ERRMSG_SIZE,
+ "Unknown charset: <%s>", args->args[3]);
+ goto error;
+ }
+ } else {
+ uint charset_id = static_cast<uint>(*((long long *) args->args[3]));
+ if (!(cs = get_charset(charset_id, MYF(0)))) {
+ snprintf(message, MYSQL_ERRMSG_SIZE,
+ "Unknown charset ID: <%u>", charset_id);
+ goto error;
+ }
+ }
+ if (!mrn::encoding::set_raw(ctx, cs)) {
+ snprintf(message, MYSQL_ERRMSG_SIZE,
+ "Unsupported charset: <%s>", cs->name);
+ goto error;
+ }
+
+ if (!(cs->state & (MY_CS_BINSORT | MY_CS_CSSORT))) {
+ flags |= GRN_SNIP_NORMALIZE;
+ }
+
+ skip_leading_spaces = *((long long *) args->args[4]);
+ if (skip_leading_spaces) {
+ flags |= GRN_SNIP_SKIP_LEADING_SPACES;
+ }
+
+ html_escape = *((long long *) args->args[5]);
+ if (html_escape) {
+ mapping = (grn_snip_mapping *) -1;
+ }
+
+ *snippet = grn_snip_open(ctx, flags, static_cast<unsigned int>(snip_max_len),
+ static_cast<unsigned int>(snip_max_num),
+ "", 0, "", 0, mapping);
+ if (ctx->rc) {
+ snprintf(message, MYSQL_ERRMSG_SIZE,
+ "Failed to open grn_snip: <%s>", ctx->errbuf);
+ goto error;
+ }
+
+ for (i = 8; i < args->arg_count; i += 3) {
+ rc = grn_snip_add_cond(ctx, *snippet,
+ args->args[i], args->lengths[i],
+ args->args[i + 1], args->lengths[i + 1],
+ args->args[i + 2], args->lengths[i + 2]);
+ if (rc) {
+ snprintf(message, MYSQL_ERRMSG_SIZE,
+ "Failed to add a condition to grn_snip: <%s>", ctx->errbuf);
+ goto error;
+ }
+ }
+
+ result_str->set_charset(cs);
+ return FALSE;
+
+error:
+ if (*snippet) {
+ grn_obj_close(ctx, *snippet);
+ }
+ return TRUE;
+}
+
+MRN_API my_bool mroonga_snippet_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
+{
+ uint i;
+ st_mrn_snip_info *snip_info = NULL;
+ bool can_open_snippet = TRUE;
+ initid->ptr = NULL;
+ if (args->arg_count < 11 || (args->arg_count - 11) % 3)
+ {
+ sprintf(message, "Incorrect number of arguments for mroonga_snippet(): %u",
+ args->arg_count);
+ goto error;
+ }
+ if (args->arg_type[0] != STRING_RESULT) {
+ strcpy(message, "mroonga_snippet() requires string for 1st argument");
+ goto error;
+ }
+ if (args->arg_type[1] != INT_RESULT) {
+ strcpy(message, "mroonga_snippet() requires int for 2nd argument");
+ goto error;
+ }
+ if (args->arg_type[2] != INT_RESULT) {
+ strcpy(message, "mroonga_snippet() requires int for 3rd argument");
+ goto error;
+ }
+ if (
+ args->arg_type[3] != STRING_RESULT &&
+ args->arg_type[3] != INT_RESULT
+ ) {
+ strcpy(message,
+ "mroonga_snippet() requires string or int for 4th argument");
+ goto error;
+ }
+ if (args->arg_type[4] != INT_RESULT) {
+ strcpy(message, "mroonga_snippet() requires int for 5th argument");
+ goto error;
+ }
+ if (args->arg_type[5] != INT_RESULT) {
+ strcpy(message, "mroonga_snippet() requires int for 6th argument");
+ goto error;
+ }
+ for (i = 6; i < args->arg_count; i++) {
+ if (args->arg_type[i] != STRING_RESULT) {
+ sprintf(message, "mroonga_snippet() requires string for %uth argument",
+ i);
+ goto error;
+ }
+ }
+ initid->maybe_null = 1;
+ initid->const_item = 1;
+
+ if (!(snip_info = (st_mrn_snip_info *) my_malloc(sizeof(st_mrn_snip_info),
+ MYF(MY_WME | MY_ZEROFILL))))
+ {
+ strcpy(message, "mroonga_snippet() out of memory");
+ goto error;
+ }
+ grn_ctx_init(&snip_info->ctx, 0);
+ grn_db_create(&snip_info->ctx, NULL, 0);
+
+ for (i = 1; i < args->arg_count; i++) {
+ if (!args->args[i]) {
+ can_open_snippet = FALSE;
+ break;
+ }
+ }
+ if (can_open_snippet) {
+ if (mrn_snippet_prepare(snip_info, args, message, &snip_info->snippet)) {
+ goto error;
+ }
+ }
+ initid->ptr = (char *) snip_info;
+
+ return FALSE;
+
+error:
+ if (snip_info) {
+ grn_obj_close(&snip_info->ctx, grn_ctx_db(&snip_info->ctx));
+ grn_ctx_fin(&snip_info->ctx);
+ my_free(snip_info, MYF(0));
+ }
+ return TRUE;
+}
+
+MRN_API char *mroonga_snippet(UDF_INIT *initid, UDF_ARGS *args, char *result,
+ unsigned long *length, char *is_null, char *error)
+{
+ st_mrn_snip_info *snip_info = (st_mrn_snip_info *) initid->ptr;
+ grn_ctx *ctx = &snip_info->ctx;
+ String *result_str = &snip_info->result_str;
+ char *target;
+ unsigned int target_length;
+ grn_obj *snippet = NULL;
+ grn_rc rc;
+ unsigned int i, n_results, max_tagged_length, result_length;
+
+ if (!args->args[0]) {
+ *is_null = 1;
+ return NULL;
+ }
+ *is_null = 0;
+ target = args->args[0];
+ target_length = args->lengths[0];
+
+ if (!snip_info->snippet) {
+ for (i = 1; i < args->arg_count; i++) {
+ if (!args->args[i]) {
+ my_printf_error(ER_MRN_INVALID_NULL_VALUE_NUM,
+ ER_MRN_INVALID_NULL_VALUE_STR, MYF(0),
+ "mroonga_snippet() arguments");
+ goto error;
+ }
+ }
+
+ if (mrn_snippet_prepare(snip_info, args, NULL, &snippet)) {
+ goto error;
+ }
+ } else {
+ snippet = snip_info->snippet;
+ }
+
+ rc = grn_snip_exec(ctx, snippet, target, target_length,
+ &n_results, &max_tagged_length);
+ if (rc) {
+ my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM,
+ ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf);
+ goto error;
+ }
+
+ result_str->length(0);
+ if (result_str->reserve((args->lengths[6] + args->lengths[7] +
+ max_tagged_length) * n_results)) {
+ my_error(ER_OUT_OF_RESOURCES, MYF(0), HA_ERR_OUT_OF_MEM);
+ goto error;
+ }
+ for (i = 0; i < n_results; i++) {
+ result_str->q_append(args->args[6], args->lengths[6]);
+ rc = grn_snip_get_result(ctx, snippet, i,
+ (char *) result_str->ptr() + result_str->length(),
+ &result_length);
+ if (rc) {
+ my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM,
+ ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf);
+ goto error;
+ }
+ result_str->length(result_str->length() + result_length);
+ result_str->q_append(args->args[7], args->lengths[7]);
+ }
+
+ if (!snip_info->snippet) {
+ rc = grn_obj_close(ctx, snippet);
+ if (rc) {
+ my_printf_error(ER_MRN_ERROR_FROM_GROONGA_NUM,
+ ER_MRN_ERROR_FROM_GROONGA_STR, MYF(0), ctx->errbuf);
+ goto error;
+ }
+ }
+
+ *length = result_str->length();
+ return (char *) result_str->ptr();
+
+error:
+ *error = 1;
+ return NULL;
+}
+
+MRN_API void mroonga_snippet_deinit(UDF_INIT *initid)
+{
+ st_mrn_snip_info *snip_info = (st_mrn_snip_info *) initid->ptr;
+ if (snip_info) {
+ if (snip_info->snippet) {
+ grn_obj_close(&snip_info->ctx, snip_info->snippet);
+ }
+ snip_info->result_str.free();
+ grn_obj_close(&snip_info->ctx, grn_ctx_db(&snip_info->ctx));
+ grn_ctx_fin(&snip_info->ctx);
+ my_free(snip_info, MYF(0));
+ }
+}
+
+MRN_END_DECLS
diff --git a/storage/mroonga/udf/sources.am b/storage/mroonga/udf/sources.am
new file mode 100644
index 00000000000..380ab4b60cf
--- /dev/null
+++ b/storage/mroonga/udf/sources.am
@@ -0,0 +1,5 @@
+libmrn_udf_la_SOURCES = \
+ mrn_udf_last_insert_grn_id.cpp \
+ mrn_udf_snippet.cpp \
+ mrn_udf_command.cpp \
+ mrn_udf_escape.cpp
diff --git a/storage/mroonga/vendor/groonga/CMakeLists.txt b/storage/mroonga/vendor/groonga/CMakeLists.txt
new file mode 100644
index 00000000000..abaa9911fd6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/CMakeLists.txt
@@ -0,0 +1,485 @@
+# Copyright(C) 2012-2014 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+# https://buildbot.askmonty.org/buildbot/builders/work-amd64-valgrind/builds/5263/steps/compile/logs/stdio
+# says CMake 2.6.2... We want to drop old software support...
+cmake_minimum_required(VERSION 2.6.2)
+# cmake_minimum_required(VERSION 2.6.4) # CentOS 5
+set(GRN_PROJECT_NAME "groonga")
+project("${GRN_PROJECT_NAME}")
+
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/base_version" VERSION)
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/version.sh")
+ file(READ "${CMAKE_CURRENT_SOURCE_DIR}/version.sh" GRN_VERSION)
+else()
+ if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/version.sh")
+ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
+ execute_process(COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/version-gen.sh")
+ file(READ "${CMAKE_CURRENT_BINARY_DIR}/version.sh" GRN_VERSION)
+ else()
+ set(GRN_VERSION "${VERSION}")
+ endif()
+ endif()
+endif()
+string(REGEX REPLACE "(^.*=|\n)" "" GRN_VERSION "${GRN_VERSION}")
+
+include(CheckIncludeFile)
+include(CheckFunctionExists)
+include(CheckLibraryExists)
+include(CheckSymbolExists)
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+include(FindPkgConfig)
+include(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake_modules/ReadFileList.cmake)
+
+set(BIN_DIR "bin")
+set(SBIN_DIR "sbin")
+set(LIB_DIR "lib")
+set(INCLUDE_DIR "include")
+set(GRN_INCLUDE_DIR "include/groonga")
+set(DATA_DIR "share")
+set(GRN_DATA_DIR "${DATA_DIR}/${GRN_PROJECT_NAME}")
+set(CONFIG_DIR "etc")
+set(GRN_CONFIG_DIR "${CONFIG_DIR}/${GRN_PROJECT_NAME}")
+
+set(GRN_LOG_PATH
+ "${CMAKE_INSTALL_PREFIX}/var/log/${GRN_PROJECT_NAME}/${GRN_PROJECT_NAME}.log"
+ CACHE FILEPATH "log file path")
+set(GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD
+ 0
+ CACHE STRING "groonga default match escalation threshold")
+set(GRN_DEFAULT_DOCUMENT_ROOT_BASE
+ "html/admin"
+ CACHE PATH "groonga default document root base path")
+set(GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT
+ "share/${GRN_PROJECT_NAME}/${GRN_DEFAULT_DOCUMENT_ROOT_BASE}"
+ CACHE PATH "groonga default relative document root")
+set(GRN_DEFAULT_DOCUMENT_ROOT
+ "${CMAKE_INSTALL_PREFIX}/${GRN_DATA_DIR}/${GRN_DEFAULT_DOCUMENT_ROOT_BASE}"
+ CACHE PATH "groonga default document root")
+set(GRN_STACK_SIZE
+ 1024
+ CACHE STRING
+ "DANGER!!! groonga stack size. Normarlly, you should not change this variable.")
+set(GRN_LOCK_TIMEOUT
+ 10000000
+ CACHE STRING
+ "timeout to acquire a lock.")
+set(GRN_LOCK_WAIT_TIME_NANOSECOND
+ 1000000
+ CACHE STRING
+ "wait time in nanosecond to acquire a lock.")
+set(GRN_RELATIVE_PLUGINS_DIR
+ "${LIB_DIR}/${GRN_PROJECT_NAME}/plugins")
+set(GRN_PLUGINS_DIR
+ "${CMAKE_INSTALL_PREFIX}/${GRN_RELATIVE_PLUGINS_DIR}")
+set(GRN_PLUGIN_SUFFIX "${CMAKE_SHARED_MODULE_SUFFIX}")
+set(GRN_DLL_FILENAME
+ "${CMAKE_SHARED_LIBRARY_PREFIX}groonga${CMAKE_SHARED_LIBRARY_SUFFIX}")
+set(GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE "synonyms.tsv")
+set(GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE
+ "${CMAKE_INSTALL_PREFIX}/${GRN_DATA_DIR}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE}")
+set(GRN_RELATIVE_RUBY_SCRIPTS_DIR
+ "${LIB_DIR}/${GRN_PROJECT_NAME}/scripts/ruby")
+set(GRN_RUBY_SCRIPTS_DIR
+ "${CMAKE_INSTALL_PREFIX}/${GRN_RELATIVE_RUBY_SCRIPTS_DIR}")
+
+macro(check_cflag flag)
+ check_c_compiler_flag(${flag} "HAVE_C_${flag}")
+ if(HAVE_C_${flag})
+ set(GRN_C_COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS} ${flag}")
+ endif()
+endmacro()
+
+macro(check_cxxflag flag)
+ check_cxx_compiler_flag(${flag} "HAVE_CXX_${flag}")
+ if(HAVE_CXX_${flag})
+ set(GRN_CXX_COMPILE_FLAGS "${GRN_CXX_COMPILE_FLAGS} ${flag}")
+ endif()
+endmacro()
+
+macro(check_build_flag flag)
+ check_cflag(${flag})
+ check_cxxflag(${flag})
+endmacro()
+
+if(CMAKE_COMPILER_IS_GNUCXX)
+ check_build_flag("-Wall")
+ check_build_flag("-Wextra")
+ check_build_flag("-Wno-unused-but-set-variable")
+ check_build_flag("-Wno-unused-parameter")
+ check_build_flag("-Wno-sign-compare")
+ check_cflag("-Wno-pointer-sign")
+ check_build_flag("-Wno-missing-field-initializers")
+ check_build_flag("-Wformat=2")
+ check_build_flag("-Wstrict-aliasing=2")
+ check_build_flag("-fno-strict-aliasing")
+ check_build_flag("-Wdisabled-optimization")
+ check_build_flag("-Wfloat-equal")
+ check_build_flag("-Wpointer-arith")
+ check_cflag("-Wdeclaration-after-statement")
+ check_cflag("-Wbad-function-cast")
+ check_build_flag("-Wcast-align")
+ check_build_flag("-Wredundant-decls")
+ check_build_flag("-Wwrite-strings")
+ check_cxxflag("-fexceptions")
+ check_cxxflag("-fimplicit-templates")
+ check_build_flag("-Wno-clobbered")
+ if(MRN_GROONGA_BUNDLED)
+ check_build_flag("-fPIC")
+ endif()
+endif()
+
+option(GRN_WITH_DEBUG "enable debug build." OFF)
+if(GRN_WITH_DEBUG)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(GRN_C_COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS} -g3 -O0")
+ set(GRN_CXX_COMPILE_FLAGS "${GRN_CXX_COMPILE_FLAGS} -g3 -O0")
+ endif()
+endif()
+
+add_definitions(
+ -DHAVE_CONFIG_H
+ )
+
+if(CMAKE_COMPILER_IS_GNUC OR
+ CMAKE_COMPILER_IS_GNUCXX OR
+ CMAKE_C_COMPILER_ID STREQUAL "Clang")
+ set(_GNU_SOURCE TRUE)
+endif()
+
+include_directories(
+ BEFORE
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/include
+ )
+
+macro(ac_check_headers header)
+ string(REGEX REPLACE "[/.]" "_" output_variable_name ${header})
+ string(TOUPPER "${output_variable_name}" output_variable_name)
+ set(output_variable_name "HAVE_${output_variable_name}")
+ check_include_file(${header} ${output_variable_name})
+endmacro()
+
+macro(ac_check_funcs function)
+ string(TOUPPER "${function}" output_variable_name)
+ set(output_variable_name "HAVE_${output_variable_name}")
+ check_function_exists(${function} ${output_variable_name})
+endmacro()
+
+macro(ac_check_symbols symbol files)
+ string(TOUPPER "${symbol}" output_variable_name)
+ set(output_variable_name "HAVE_${output_variable_name}")
+ check_symbol_exists(${symbol} ${files} ${output_variable_name})
+endmacro()
+
+macro(ac_check_lib library function)
+ string(REGEX REPLACE "[/.]" "_" output_variable_base_name ${library})
+ string(TOUPPER "${output_variable_base_name}" output_variable_base_name)
+ set(output_variable_name "HAVE_LIB${output_variable_base_name}")
+ set(location "${ARG2}")
+ check_library_exists(${library} ${function} "${location}"
+ ${output_variable_name})
+ if(${output_variable_name})
+ set(${output_variable_base_name}_LIBS "${library}")
+ endif()
+endmacro()
+
+include(build/ac_macros/check_headers.m4)
+include(build/ac_macros/check_functions.m4)
+
+ac_check_symbols(fpclassify math.h)
+
+ac_check_lib(dl dlopen)
+ac_check_lib(execinfo backtrace)
+if(HAVE_LIBEXECINFO)
+ set(HAVE_BACKTRACE TRUE)
+else()
+ ac_check_funcs(backtrace)
+endif()
+ac_check_lib(rt clock_gettime)
+if(HAVE_LIBRT)
+ set(HAVE_CLOCK_GETTIME TRUE)
+endif()
+if(MRN_GROONGA_BUNDLED)
+ ac_check_lib(m sincos)
+ check_library_exists(stdc++ __cxa_begin_catch "${ARG2}"
+ STDCPP)
+ if(STDCPP)
+ set(STDCPP_LIBS "stdc++")
+ endif()
+endif()
+
+if(UNIX)
+ ac_check_headers(pthread.h)
+ ac_check_lib(pthread pthread_mutex_init)
+ if(NOT ${HAVE_LIBPTHREAD})
+ message(FATAL_ERROR "No libpthread found")
+ endif()
+ ac_check_funcs(pthread_mutexattr_setpshared)
+ ac_check_funcs(pthread_condattr_setpshared)
+endif()
+
+option(GRN_WITH_NFKC "use NFKC based UTF8 normalization." ON)
+
+if(WIN32)
+ ac_check_headers(winsock2.h)
+ if(NOT ${HAVE_WINSOCK2_H})
+ message(FATAL_ERROR "No winsock2.h found")
+ endif()
+
+ # FIXME: CMake couldn't detect ws2_32.lib on Windows 8 64bit.
+ # It may be caused by missing library search path for ws2_32.lib.
+ # It seems that Visual Studio (devenv.exe) can find it but link.exe
+ # can't. "cmake --build" can find it because it uses Visual Studio
+ # internally. So we assume that we always have ws2_32.lib on Windows.
+ # ac_check_lib(ws2_32 select)
+ set(HAVE_LIBWS2_32 TRUE)
+ set(WS2_32_LIBS "ws2_32.lib")
+
+ set(USE_SELECT TRUE)
+else()
+ ac_check_headers(sys/epoll.h)
+ if(${HAVE_SYS_EPOLL_H})
+ ac_check_funcs(epoll_create)
+ if(${HAVE_EPOLL_CREATE})
+ set(USE_EPOLL TRUE)
+ endif()
+ endif()
+
+ if(NOT USE_EPOLL)
+ ac_check_headers(sys/event.h)
+ if(${HAVE_SYS_EVENT_H})
+ ac_check_funcs(kevent)
+ if(${HAVE_KEVENT})
+ set(USE_KQUEUE TRUE)
+ endif()
+ endif()
+
+ if(NOT USE_KQUEUE)
+ ac_check_headers(sys/poll.h)
+ if(${HAVE_SYS_POLL_H})
+ ac_check_funcs(poll)
+ if(${HAVE_POLL})
+ set(USE_POLL TRUE)
+ endif()
+ endif()
+
+ if(NOT USE_POLL)
+ ac_check_funcs(select)
+ if(${HAVE_SELECT})
+ set(USE_SELECT TRUE)
+ ac_check_headers(sys/select.h)
+ endif()
+
+ if(NOT USE_SELECT)
+ message(FATAL_ERROR "All epoll/kqueue/poll/select are missing")
+ endif()
+ endif()
+ endif()
+ endif()
+endif()
+
+option(GRN_WITH_ZLIB "use zlib for data compression." OFF)
+if(GRN_WITH_ZLIB)
+ ac_check_lib(z compress)
+ if(NOT HAVE_LIBZ)
+ message(FATAL_ERROR "No libz found")
+ endif()
+endif()
+
+option(GRN_WITH_LZO "use LZO for data compression." OFF)
+if(GRN_WITH_LZO)
+ ac_check_lib(lzo2 lzo1_compress)
+ if(NOT HAVE_LIBLZO2)
+ message(FATAL_ERROR "No liblzo2 found")
+ endif()
+endif()
+
+set(GRN_WITH_MECAB "auto"
+ CACHE STRING "use MeCab for morphological analysis")
+if(NOT ${GRN_WITH_MECAB} STREQUAL "no")
+ set(GRN_MECAB_CONFIG "mecab-config" CACHE FILEPATH "mecab-config path")
+ if(NOT CMAKE_CROSSCOMPILING)
+ find_program(GRN_MECAB_CONFIG_ABSOLUTE_PATH "${GRN_MECAB_CONFIG}")
+ endif()
+ if(EXISTS "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}")
+ execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --inc-dir
+ OUTPUT_VARIABLE MECAB_INCLUDE_DIRS
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ execute_process(COMMAND "${GRN_MECAB_CONFIG_ABSOLUTE_PATH}" --libs-only-L
+ OUTPUT_VARIABLE MECAB_LIBRARY_DIRS
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ set(MECAB_LIBRARIES "mecab")
+ ac_check_lib(${MECAB_LIBRARIES} mecab_new)
+ if(HAVE_LIBMECAB)
+ set(GRN_WITH_MECAB TRUE)
+ else()
+ if(${GRN_WITH_MECAB} STREQUAL "yes")
+ message(FATAL_ERROR
+ "No MeCab library found: "
+ "include directories: <${MECAB_INCLUDE_DIRS}>, "
+ "library directories: <${MECAB_LIBRARY_DIRS}>")
+ endif()
+ set(GRN_WITH_MECAB FALSE)
+ endif()
+ else()
+ if(${GRN_WITH_MECAB} STREQUAL "yes")
+ message(FATAL_ERROR "No mecab-config found: <${GRN_MECAB_CONFIG}>")
+ endif()
+ set(GRN_WITH_MECAB FALSE)
+ endif()
+else()
+ set(GRN_WITH_MECAB FALSE)
+endif()
+
+set(GRN_WITH_KYTEA "auto"
+ CACHE STRING "use KyTea for morphological analysis")
+if(NOT ${GRN_WITH_KYTEA} STREQUAL "no")
+ pkg_check_modules(KYTEA kytea)
+ if(KYTEA_FOUND)
+ set(GRN_WITH_KYTEA TRUE)
+ else()
+ if(${GRN_WITH_KYTEA} STREQUAL "yes")
+ message(FATAL_ERROR "No KyTea found")
+ endif()
+ set(GRN_WITH_KYTEA FALSE)
+ endif()
+else()
+ set(GRN_WITH_KYTEA FALSE)
+endif()
+
+set(GRN_WITH_ZEROMQ "auto"
+ CACHE STRING "use ZeroMQ for suggestion")
+if(NOT ${GRN_WITH_ZEROMQ} STREQUAL "no")
+ pkg_check_modules(ZEROMQ libzmq)
+ if(ZEROMQ_FOUND)
+ set(GRN_WITH_ZEROMQ TRUE)
+ else()
+ if(${GRN_WITH_ZEROMQ} STREQUAL "yes")
+ message(FATAL_ERROR "No ZeroMQ found")
+ endif()
+ set(GRN_WITH_ZEROMQ FALSE)
+ endif()
+else()
+ set(GRN_WITH_ZEROMQ FALSE)
+endif()
+
+set(GRN_WITH_LIBEVENT "auto"
+ CACHE STRING "use libevent for suggestion")
+if(NOT ${GRN_WITH_LIBEVENT} STREQUAL "no")
+ if("${GRN_WITH_LIBEVENT}" STREQUAL "yes" OR
+ "${GRN_WITH_LIBEVENT}" STREQUAL "auto")
+ set(LIBEVENT_INCLUDE_DIRS "")
+ set(LIBEVENT_LIBRARY_DIRS "")
+ else()
+ set(LIBEVENT_INCLUDE_DIRS "${GRN_WITH_LIBEVENT}/include")
+ set(LIBEVENT_LIBRARY_DIRS "${GRN_WITH_LIBEVENT}/lib")
+ endif()
+ set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
+ ac_check_lib(event event_init "${LIBEVENT_LIBRARY_DIRS}")
+ set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
+ if(HAVE_LIBEVENT)
+ set(LIBEVENT_LIBRARIES "event")
+ set(GRN_WITH_LIBEVENT TRUE)
+ else()
+ if(${GRN_WITH_LIBEVENT} STREQUAL "yes")
+ message(FATAL_ERROR "No libevent found")
+ endif()
+ set(GRN_WITH_LIBEVENT FALSE)
+ endif()
+else()
+ set(GRN_WITH_LIBEVENT FALSE)
+endif()
+
+set(GRN_WITH_MESSAGE_PACK "auto"
+ CACHE STRING "use MessagePack for suggestion")
+if(NOT ${GRN_WITH_MESSAGE_PACK} STREQUAL "no")
+ if("${GRN_WITH_MESSAGE_PACK}" STREQUAL "yes" OR
+ "${GRN_WITH_MESSAGE_PACK}" STREQUAL "auto")
+ set(MESSAGE_PACK_INCLUDE_DIRS "")
+ set(MESSAGE_PACK_LIBRARY_DIRS "")
+ else()
+ set(MESSAGE_PACK_INCLUDE_DIRS "${GRN_WITH_MESSAGE_PACK}/include")
+ set(MESSAGE_PACK_LIBRARY_DIRS "${GRN_WITH_MESSAGE_PACK}/lib")
+ endif()
+ set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES})
+ ac_check_lib(msgpack msgpack_version "${MESSAGE_PACK_LIBRARY_DIRS}")
+ set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE})
+ if(HAVE_LIBMSGPACK)
+ set(MESSAGE_PACK_LIBRARIES "msgpack")
+ set(GRN_WITH_MESSAGE_PACK TRUE)
+ else()
+ if(${GRN_WITH_MESSAGE_PACK} STREQUAL "yes")
+ message(FATAL_ERROR "No MessagePack found")
+ endif()
+ set(GRN_WITH_MESSAGE_PACK FALSE)
+ endif()
+else()
+ set(GRN_WITH_MESSAGE_PACK FALSE)
+endif()
+
+option(GRN_WITH_MRUBY "use mruby" OFF)
+if(GRN_WITH_MRUBY)
+ if(CMAKE_VERSION VERSION_LESS "2.8.8")
+ message(FATAL_ERROR
+ "Your CMake (${CMAKE_VERSION}) is old. "
+ "CMake 2.8.8 or later is required for mruby supported build")
+ endif()
+ set(MRUBY_INCLUDE_DIRS
+ "${CMAKE_CURRENT_SOURCE_DIR}/vendor/mruby-source/include")
+ set(MRUBY_LIBS "$<TARGET_OBJECTS:mruby>")
+else()
+ set(MRUBY_INCLUDE_DIRS "")
+ set(MRUBY_LIBS "")
+endif()
+
+#add_subdirectory(vendor)
+add_subdirectory(lib)
+add_subdirectory(src)
+#add_subdirectory(plugins)
+add_subdirectory(include)
+#add_subdirectory(data)
+
+configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+
+set(RUBY "ruby") # TODO: support customization
+set(GROONGA "${CMAKE_CURRENT_BINARY_DIR}/src/groonga")
+set(GROONGA_SUGGEST_CREATE_DATASET
+ "${CMAKE_CURRENT_BINARY_DIR}/src/suggest/groonga-suggest-create-dataset")
+set(GROONGA_BENCHMARK "${CMAKE_CURRENT_BINARY_DIR}/src/groonga-benchmark")
+configure_file(config.sh.in "${CMAKE_CURRENT_BINARY_DIR}/config.sh" @ONLY)
+
+set(prefix "${CMAKE_INSTALL_PREFIX}")
+set(exec_prefix "${prefix}")
+set(bindir "${CMAKE_INSTALL_PREFIX}/${BIN_DIR}")
+set(sbindir "${CMAKE_INSTALL_PREFIX}/${SBIN_DIR}")
+set(libdir "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}")
+set(includedir "${CMAKE_INSTALL_PREFIX}/${INCLUDE_DIR}")
+set(datarootdir "${CMAKE_INSTALL_PREFIX}/${DATA_DIR}")
+set(datadir "${datarootdir}")
+set(expanded_pluginsdir "${GRN_PLUGINS_DIR}")
+set(GRN_EXPANDED_DEFAULT_DOCUMENT_ROOT "${GRN_DEFAULT_DOCUMENT_ROOT}")
+set(EXEEXT "${CMAKE_EXECUTABLE_SUFFIX}")
+configure_file(groonga.pc.in "${CMAKE_CURRENT_BINARY_DIR}/groonga.pc" @ONLY)
+
+if(NOT MRN_GROONGA_BUNDLED)
+ install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/groonga.pc"
+ DESTINATION "${LIB_DIR}/pkgconfig/")
+endif()
+
+#add_subdirectory(vendor/plugins)
diff --git a/storage/mroonga/vendor/groonga/Makefile.am b/storage/mroonga/vendor/groonga/Makefile.am
new file mode 100644
index 00000000000..a5bf404d471
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/Makefile.am
@@ -0,0 +1,135 @@
+# release: update-latest-release (commit) tag
+
+LOCALES = ja
+
+ACLOCAL_AMFLAGS = ${ACLOCAL_ARGS} -I .
+AUTOMAKE_OPTIONS = 1.9.6
+SUBDIRS = \
+ build \
+ include \
+ vendor \
+ lib \
+ plugins \
+ src \
+ examples \
+ test \
+ benchmark \
+ packages \
+ data \
+ tools \
+ doc
+#dist_data_DATA =
+EXTRA_DIST = \
+ README.md \
+ bindings \
+ version-gen.sh \
+ base_version \
+ gpg_uid \
+ CMakeLists.txt \
+ config.h.cmake
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = groonga.pc
+
+.PHONY: FORCE
+
+FORCE:
+
+$(srcdir)/version.sh: FORCE
+ @$(SHELL_PATH) $(srcdir)/version-gen.sh
+
+include $(srcdir)/version.sh
+
+dist-hook:
+ echo "$(GRN_VERSION)" > $(distdir)/version
+
+benchmark:
+ cd test/benchmark && $(MAKE) benchmark
+
+tag:
+ cd $(top_srcdir) && git tag v$(VERSION) -a -m 'Groonga $(VERSION)!!!'
+
+echo-version:
+ @echo $(VERSION)
+
+update-latest-release: misc
+ @if test -z "$(OLD_RELEASE)"; then \
+ echo "\$$(OLD_RELEASE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(OLD_RELEASE_DATE)"; then \
+ echo "\$$(OLD_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(NEW_RELEASE_DATE)"; then \
+ echo "\$$(NEW_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ cd $(top_srcdir) && \
+ misc/update-latest-release.rb \
+ $(PACKAGE) $(OLD_RELEASE) $(OLD_RELEASE_DATE) \
+ $(VERSION) $(NEW_RELEASE_DATE) \
+ packages/rpm/fedora/groonga.spec.in \
+ packages/rpm/centos/groonga.spec.in \
+ packages/debian/changelog \
+ doc/source/install.rst \
+ doc/source/install/*.rst \
+ doc/locale/*/LC_MESSAGES/install.po \
+ $(GROONGA_ORG_PATH)/index.html \
+ $(GROONGA_ORG_PATH)/ja/index.html
+
+update-po:
+ @for lang in $(LOCALES); do \
+ (cd $(top_srcdir)/doc/locale/$$lang/LC_MESSAGES && $(MAKE) update) \
+ done
+
+update-document:
+ @if test -z "$(GROONGA_ORG_PATH)"; then \
+ echo "\$$(GROONGA_ORG_PATH) is missing"; \
+ echo "add --with-groonga-github-com-path in configure"; \
+ exit 1; \
+ fi
+ rm -rf tmp-doc
+ mkdir tmp-doc
+ (cd doc && $(MAKE) clean-html)
+ (cd doc && $(MAKE) install docdir=$(abs_srcdir)/tmp-doc/install)
+ ruby $(srcdir)/tools/prepare-sphinx-html.rb tmp-doc/install tmp-doc/dist
+ rm -rf $(GROONGA_ORG_PATH)/docs
+ mv tmp-doc/dist/en $(GROONGA_ORG_PATH)/docs
+ for locale in `cd tmp-doc/dist; echo *`; do \
+ dest_base_dir=$(GROONGA_ORG_PATH)/$${locale}; \
+ mkdir -p $${dest_base_dir}; \
+ dest_dir=$${dest_base_dir}/docs; \
+ rm -rf $${dest_dir}; \
+ mv tmp-doc/dist/$${locale} $${dest_dir}; \
+ done
+
+
+update-version:
+ @if test -z "$(NEW_VERSION)"; then \
+ echo "\$$(NEW_VERSION) is missing"; \
+ exit 1; \
+ fi
+ @echo -n $(NEW_VERSION) > $(srcdir)/base_version
+
+update-files:
+ cd doc && $(MAKE) update-files
+ cd data/html && $(MAKE) update-files
+
+update-mruby:
+ cd $(top_srcdir)/vendor/mruby && make update
+
+update-nginx:
+ @if test -z "$(NEW_NGINX_VERSION)"; then \
+ echo "\$$(NEW_NGINX_VERSION) is missing"; \
+ exit 1; \
+ fi
+ cd $(top_srcdir)/vendor && ./update_nginx.sh $(NEW_NGINX_VERSION)
+
+misc:
+ @if test -z "$(CUTTER_SOURCE_PATH)"; then \
+ echo "\$$(CUTTER_SOURCE_PATH) is missing"; \
+ exit 1; \
+ fi
+ ln -s "$(CUTTER_SOURCE_PATH)/misc" misc
+
diff --git a/storage/mroonga/vendor/groonga/README.md b/storage/mroonga/vendor/groonga/README.md
new file mode 100644
index 00000000000..09e5764a024
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/README.md
@@ -0,0 +1,49 @@
+# README
+
+Groonga is an open-source fulltext search engine and column store.
+
+## Reference manual
+
+See doc/source/ directory or http://groonga.org/docs/.
+
+## Bundled software
+
+### mruby
+
+ * Path: vendor/mruby-source
+ * License: The MIT license. See vendor/mruby-source/MITL for details.
+
+### Onigmo
+
+ * Path: vendor/onigmo-source
+ * License: BSD license. See vendor/onigmo-source/COPYING for details.
+
+### nginx
+
+ * Path: vendor/nginx-${VERSION}
+ * License: BSD license. See vendor/nginx-${VERSION}/LICENSE for details.
+
+## Authors
+
+### Primary authors
+
+ * Daijiro MORI <morita at razil. jp>
+ * Tasuku SUENAGA <a at razil. jp>
+ * Yutaro Shimamura <yu at razil. jp>
+ * Kouhei Sutou <kou at cozmixng. org>
+ * Kazuho Oku <kazuhooku at gmail. com>
+ * Moriyoshi Koizumi <moriyoshi at gmail. com>
+
+### Patches and modules from
+
+TODO: Update or use
+https://github.com/groonga/groonga/graphs/contributors instead.
+
+ * Daisuke Maki <dmaki at cpan. org>
+ * Kazuhiro Osawa <ko at yappo. ne. jp>
+ * Hiroyuki OYAMA <oyama at module. jp>
+ * Nguyen Anh Phu <phuna at users. sourceforge. net>
+ * Hideyuki KUROSU <hideyuki. kurosu at gmail. com>
+ * Takuo Kitame <kitame at valinux. co. jp>
+ * Yoshihiro Oyama <yos-o at smilemark. com>
+ * cZfSunOs.U <sunos at saita. ma>
diff --git a/storage/mroonga/vendor/groonga/autogen.sh b/storage/mroonga/vendor/groonga/autogen.sh
new file mode 100755
index 00000000000..9b3a98eab5d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/autogen.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+./version-gen.sh
+
+case `uname -s` in
+Darwin)
+ homebrew_aclocal=/usr/local/share/aclocal
+ if [ -d $homebrew_aclocal ]; then
+ ACLOCAL_ARGS="$ACLOCAL_ARGS -I $homebrew_aclocal"
+ fi
+ gettext_aclocal="$(echo /usr/local/Cellar/gettext/*/share/aclocal)"
+ if [ -d $gettext_aclocal ]; then
+ ACLOCAL_ARGS="$ACLOCAL_ARGS -I $gettext_aclocal"
+ fi
+ ;;
+FreeBSD)
+ ACLOCAL_ARGS="$ACLOCAL_ARGS -I /usr/local/share/aclocal/"
+ ;;
+esac
+
+${AUTORECONF:-autoreconf} --force --install
diff --git a/storage/mroonga/vendor/groonga/base_version b/storage/mroonga/vendor/groonga/base_version
new file mode 100644
index 00000000000..9eefef7bd65
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/base_version
@@ -0,0 +1 @@
+4.0.6 \ No newline at end of file
diff --git a/storage/mroonga/vendor/groonga/benchmark/Makefile.am b/storage/mroonga/vendor/groonga/benchmark/Makefile.am
new file mode 100644
index 00000000000..310fb4585a3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/Makefile.am
@@ -0,0 +1,102 @@
+SUBDIRS = \
+ fixtures \
+ lib
+
+NONEXISTENT_CXX_SOURCE = nonexistent.cpp
+
+if WITH_BENCHMARK
+noinst_PROGRAMS = \
+ bench-table-factory \
+ bench-geo-distance \
+ bench-geo-select \
+ bench-ctx-create \
+ bench-query-optimizer \
+ bench-range-select
+endif
+
+EXTRA_DIST = \
+ bench-query-optimizer-ddl.grn
+
+AM_CPPFLAGS = \
+ -I$(srcdir) \
+ -I$(srcdir)/lib \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib \
+ $(GROONGA_INCLUDEDIR)
+
+AM_CFLAGS = \
+ $(GLIB_CFLAGS)
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(top_builddir)/benchmark/lib/libbenchmark.la \
+ $(GLIB_LIBS)
+
+bench_table_factory_SOURCES = bench-table-factory.c
+nodist_EXTRA_bench_table_factory_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+bench_geo_distance_SOURCES = bench-geo-distance.c
+nodist_EXTRA_bench_geo_distance_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+bench_geo_select_SOURCES = bench-geo-select.c
+nodist_EXTRA_bench_geo_select_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+bench_ctx_create_SOURCES = bench-ctx-create.c
+nodist_EXTRA_bench_ctx_create_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+bench_query_optimizer_SOURCES = bench-query-optimizer.c
+nodist_EXTRA_bench_query_optimizer_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+bench_range_select_SOURCES = bench-range-select.c
+nodist_EXTRA_bench_range_select_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+
+benchmarks = \
+ run-bench-table-factory \
+ run-bench-geo-distance \
+ run-bench-geo-select \
+ run-bench-ctx-create \
+ run-bench-query-optimizer \
+ run-bench-range-select
+
+run-bench-table-factory: bench-table-factory
+ @echo $@:
+ ./bench-table-factory
+
+run-bench-geo-distance: bench-geo-distance
+ @echo $@:
+ ./bench-geo-distance
+
+run-bench-geo-select: bench-geo-select
+ @echo $@:
+ env \
+ RUBY="$(RUBY)" \
+ GROONGA="$(GROONGA)" \
+ srcdir="$(srcdir)" \
+ $(srcdir)/bench-geo-select.sh
+
+run-bench-ctx-create: bench-ctx-create
+ @echo $@:
+ ./bench-ctx-create
+
+run-bench-query-optimizer: bench-query-optimizer
+ @echo $@:
+ @rm -rf tmp/query-optimizer
+ @mkdir -p tmp/query-optimizer
+ @env \
+ GRN_RUBY_SCRIPTS_DIR=$(top_srcdir)/lib/mrb/scripts \
+ ../src/groonga \
+ --file $(srcdir)/bench-query-optimizer-ddl.grn \
+ -n tmp/query-optimizer/db > /dev/null
+ env \
+ GRN_RUBY_SCRIPTS_DIR=$(top_srcdir)/lib/mrb/scripts \
+ ./bench-query-optimizer
+
+run-bench-range-select: bench-range-select
+ @echo $@:
+ @[ ! -e tmp ] && ln -s /dev/shm tmp || :
+ @mkdir -p tmp/range-select
+ env \
+ GRN_RUBY_SCRIPTS_DIR=$(top_srcdir)/lib/mrb/scripts \
+ ./bench-range-select
+
+benchmark: $(benchmarks)
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c b/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c
new file mode 100644
index 00000000000..3e43519071d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-ctx-create.c
@@ -0,0 +1,192 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2013-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/*
+ Groonga: 6b128f318d682e50648f3b82c5f7956f3bcb3fe8
+ CFLAGS: -O0 -g3
+ % (cd benchmark/ && make --quiet run-bench-ctx-create)
+ run-bench-ctx-create:
+ (time)
+ with mruby1: 288KB (0.0091s)
+ without mruby1: 28KB (0.0240ms)
+ with mruby2: 0KB (0.0097s)
+ without mruby2: 0KB (0.0220ms)
+
+ Groonga: c4379140c02699e3c74b94cd9e7b88d372202aa5
+ CFLAGS: -O2 -g
+ % make --quiet -C benchmark run-bench-ctx-create
+ run-bench-ctx-create:
+ (time)
+ with mruby1: 524KB (0.0041s)
+ without mruby1: 32KB (0.0220ms)
+ with mruby2: 0KB (0.0040s)
+ without mruby2: 0KB (0.0200ms)
+*/
+
+#include <stdlib.h>
+
+#include <glib.h>
+
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+typedef struct _BenchmarkData {
+ grn_ctx context;
+ grn_obj *database;
+ guint memory_usage_before;
+} BenchmarkData;
+
+static guint
+get_memory_usage(void)
+{
+ GRegex *vm_rss_pattern;
+ gchar *status;
+ GMatchInfo *match_info;
+ gchar *vm_rss_string;
+ guint vm_rss;
+
+ g_file_get_contents("/proc/self/status", &status, NULL, NULL);
+
+ vm_rss_pattern = g_regex_new("VmRSS:\\s*(\\d*)\\s+kB", 0, 0, NULL);
+ if (!g_regex_match(vm_rss_pattern, status, 0, &match_info)) {
+ g_print("not match...: %s\n", status);
+ return 0;
+ }
+ vm_rss_string = g_match_info_fetch(match_info, 1);
+ vm_rss = atoi(vm_rss_string);
+ g_free(vm_rss_string);
+ g_match_info_free(match_info);
+ g_regex_unref(vm_rss_pattern);
+ g_free(status);
+
+ return vm_rss;
+}
+
+static void
+bench_with_mruby(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ g_setenv("GRN_MRUBY_ENABLED", "yes", TRUE);
+ grn_ctx_init(&(data->context), 0);
+ grn_ctx_use(&(data->context), data->database);
+}
+
+static void
+bench_without_mruby(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ g_setenv("GRN_MRUBY_ENABLED", "no", TRUE);
+ grn_ctx_init(&(data->context), 0);
+ grn_ctx_use(&(data->context), data->database);
+}
+
+static void
+bench_setup(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ data->memory_usage_before = get_memory_usage();
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_ctx_fin(&(data->context));
+ g_print("%3dKB ", get_memory_usage() - data->memory_usage_before);
+}
+
+static gchar *
+get_tmp_dir(void)
+{
+ gchar *current_dir;
+ gchar *tmp_dir;
+
+ current_dir = g_get_current_dir();
+ tmp_dir = g_build_filename(current_dir, "tmp", NULL);
+ g_free(current_dir);
+
+ return tmp_dir;
+}
+
+static grn_obj *
+setup_database(grn_ctx *context)
+{
+ gchar *tmp_dir;
+ gchar *database_path;
+ grn_obj *database;
+
+ tmp_dir = get_tmp_dir();
+ database_path = g_build_filename(tmp_dir, "ctx-create", "db", NULL);
+ database = grn_db_open(context, database_path);
+
+ g_free(database_path);
+
+ return database;
+}
+
+static void
+teardown_database(grn_ctx *context, grn_obj *database)
+{
+ grn_obj_close(context, database);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ grn_ctx context;
+ BenchmarkData data;
+ BenchReporter *reporter;
+ gint n = 1;
+
+ grn_init();
+ bench_init(&argc, &argv);
+
+ grn_ctx_init(&context, 0);
+
+ data.database = setup_database(&context);
+
+ reporter = bench_reporter_new();
+
+#define REGISTER(label, bench_function) \
+ bench_reporter_register(reporter, label, n, \
+ bench_setup, \
+ bench_function, \
+ bench_teardown, \
+ &data)
+ REGISTER("with mruby1", bench_with_mruby);
+ REGISTER("without mruby1", bench_without_mruby);
+ REGISTER("with mruby2", bench_with_mruby);
+ REGISTER("without mruby2", bench_without_mruby);
+#undef REGISTER
+
+ bench_reporter_run(reporter);
+ g_object_unref(reporter);
+
+ teardown_database(&context, data.database);
+
+ grn_ctx_fin(&context);
+
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c b/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c
new file mode 100644
index 00000000000..8e1d819538b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-geo-distance.c
@@ -0,0 +1,499 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/*
+ groonga: 3ad91b868909444f66a36dbcbdbe2292ed14bd72
+ CFLAGS: -O0 -g
+ CPU: AMD Athlon(tm) 64 Processor 3000+
+
+ % test/benchmark/bench-geo-distance
+ (time)
+ rectangular (WGS84): (0.0813662)
+ rectangular (TOKYO): (0.0621928)
+ spherical (WGS84): (0.0760155)
+ spherical (TOKYO): (0.0660843)
+ hubeny (WGS84): (0.110684)
+ hubeny (TOKYO): (0.0702277)
+ % test/benchmark/bench-geo-distance
+ (time)
+ rectangular (WGS84): (0.0742154)
+ rectangular (TOKYO): (0.0816863)
+ spherical (WGS84): (0.074316)
+ spherical (TOKYO): (0.0696254)
+ hubeny (WGS84): (0.0650147)
+ hubeny (TOKYO): (0.0644057)
+ % test/benchmark/bench-geo-distance
+ (time)
+ rectangular (WGS84): (0.0781161)
+ rectangular (TOKYO): (0.0706679)
+ spherical (WGS84): (0.075739)
+ spherical (TOKYO): (0.0809402)
+ hubeny (WGS84): (0.0727023)
+ hubeny (TOKYO): (0.0718146)
+ */
+
+#include <string.h>
+
+#include <db.h>
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+#define GET(context, name) (grn_ctx_get(context, name, strlen(name)))
+
+grn_obj *grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset);
+
+typedef struct _BenchmarkData
+{
+ gchar *base_dir;
+ gboolean report_result;
+
+ grn_ctx *context;
+ grn_obj *database;
+ grn_obj *geo_distance_proc;
+ grn_obj *expression;
+ grn_obj *start_point;
+ grn_obj *end_point;
+} BenchmarkData;
+
+static void
+bench_geo_distance(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_proc_call(data->context, data->geo_distance_proc,
+ 2, data->expression);
+}
+
+static void
+bench_setup_common(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_ctx_init(data->context, GRN_CTX_USE_QL);
+ data->database = grn_db_create(data->context, NULL, NULL);
+ data->expression = grn_expr_create(data->context, NULL, 0);
+}
+
+static void
+bench_setup_points(gpointer user_data,
+ const gchar *start_point_string,
+ const gchar *end_point_string,
+ grn_builtin_type wgs84_or_tgs)
+{
+ BenchmarkData *data = user_data;
+ grn_obj start_point_text, end_point_text;
+
+ GRN_TEXT_INIT(&start_point_text, 0);
+ GRN_TEXT_INIT(&end_point_text, 0);
+ GRN_TEXT_SETS(data->context, &start_point_text, start_point_string);
+ GRN_TEXT_SETS(data->context, &end_point_text, end_point_string);
+
+ data->start_point = grn_obj_open(data->context, GRN_BULK, 0, wgs84_or_tgs);
+ data->end_point = grn_obj_open(data->context, GRN_BULK, 0, wgs84_or_tgs);
+ grn_obj_cast(data->context, &start_point_text, data->start_point, GRN_FALSE);
+ grn_obj_cast(data->context, &end_point_text, data->end_point, GRN_FALSE);
+ grn_ctx_push(data->context, data->start_point);
+ grn_ctx_push(data->context, data->end_point);
+
+ grn_obj_unlink(data->context, &start_point_text);
+ grn_obj_unlink(data->context, &end_point_text);
+}
+
+static void
+bench_setup_wgs84(gpointer user_data)
+{
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "127980000x502560000",
+ "128880000x503640000",
+ GRN_DB_WGS84_GEO_POINT);
+}
+
+static void
+bench_setup_tgs(gpointer user_data)
+{
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "127980000x502560000",
+ "128880000x503640000",
+ GRN_DB_TOKYO_GEO_POINT);
+}
+
+static void
+bench_setup_rectangular_wgs84(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_wgs84(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_tgs(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_tgs(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_1st_to_2nd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "128452975x503157902",
+ "139380000x-31920000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_2nd_to_1st_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "139380000x-31920000",
+ "128452975x503157902",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_1st_to_3rd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "128452975x503157902",
+ "-56880000x-172310000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_3rd_to_1st_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-56880000x-172310000",
+ "128452975x503157902",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_1st_to_4th_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "128452975x503157902",
+ "-122100000x66300000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_4th_to_1st_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-122100000x66300000",
+ "128452975x503157902",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_2nd_to_4th_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "139380000x-31920000",
+ "-122100000x66300000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_4th_to_2nd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-122100000x66300000",
+ "139380000x-31920000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_1st_to_2nd_quadrant_long(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "128452975x503157902",
+ "135960000x-440760000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_2nd_to_1st_quadrant_long(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "135960000x-440760000",
+ "128452975x503157902",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_2nd_to_3rd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "135960000x-440760000",
+ "-56880000x-172310000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_3rd_to_2nd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-56880000x-172310000",
+ "135960000x-440760000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_3rd_to_4th_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-56880000x-172310000",
+ "-122100000x66300000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_4th_to_3rd_quadrant_short(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-122100000x66300000",
+ "-56880000x-172310000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_3rd_to_4th_quadrant_long(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-56880000x-172310000",
+ "-121926000x544351000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_rectangular_wgs84_4th_to_3rd_quadrant_long(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_common(user_data);
+ bench_setup_points(user_data,
+ "-121926000x544351000",
+ "-56880000x-172310000",
+ GRN_DB_WGS84_GEO_POINT);
+ data->geo_distance_proc = GET(data->context, "geo_distance");
+}
+
+static void
+bench_setup_spherical_wgs84(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_wgs84(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance2");
+}
+
+static void
+bench_setup_spherical_tgs(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_tgs(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance2");
+}
+
+static void
+bench_setup_hubeny_wgs84(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_wgs84(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance3");
+}
+
+static void
+bench_setup_hubeny_tgs(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ bench_setup_tgs(user_data);
+ data->geo_distance_proc = GET(data->context, "geo_distance3");
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ if (data->report_result) {
+ grn_obj *result;
+ result = grn_expr_get_value(data->context, data->expression, 0);
+ g_print("result: %g\n", GRN_FLOAT_VALUE(result));
+ /* http://vldb.gsi.go.jp/ says '38820.79' in WGS84 and
+ '38816.42' in Tokyo geodetic system for a distance
+ between '127980000x502560000' and '128880000x503640000'. */
+ }
+
+ grn_obj_unlink(data->context, data->end_point);
+ grn_obj_unlink(data->context, data->start_point);
+ grn_obj_unlink(data->context, data->expression);
+ grn_obj_unlink(data->context, data->database);
+ grn_ctx_fin(data->context);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ BenchmarkData data;
+ BenchReporter *reporter;
+ gint n = 1000;
+
+ grn_init();
+ bench_init(&argc, &argv);
+
+ data.report_result = g_getenv("GROONGA_BENCH_REPORT_RESULT") != NULL;
+ data.context = g_new(grn_ctx, 1);
+
+ {
+ const gchar *groonga_bench_n;
+ groonga_bench_n = g_getenv("GROONGA_BENCH_N");
+ if (groonga_bench_n) {
+ n = atoi(groonga_bench_n);
+ }
+ }
+
+ reporter = bench_reporter_new();
+
+#define REGISTER(label, setup) \
+ bench_reporter_register(reporter, label, n, \
+ bench_setup_ ## setup, \
+ bench_geo_distance, \
+ bench_teardown, \
+ &data)
+ REGISTER("rectangular (WGS84)", rectangular_wgs84);
+ REGISTER("rectangular (TOKYO)", rectangular_tgs);
+ REGISTER("rectangular (WGS84 Tokyo to Lisbon)",
+ rectangular_wgs84_1st_to_2nd_quadrant_short);
+ REGISTER("rectangular (WGS84 Lisbon to Tokyo)",
+ rectangular_wgs84_2nd_to_1st_quadrant_short);
+ REGISTER("rectangular (WGS84 Tokyo to San Francisco)",
+ rectangular_wgs84_1st_to_2nd_quadrant_long);
+ REGISTER("rectangular (WGS84 San Francisco to Tokyo)",
+ rectangular_wgs84_2nd_to_1st_quadrant_long);
+ REGISTER("rectangular (WGS84 Brasplia to Cape Town)",
+ rectangular_wgs84_3rd_to_4th_quadrant_short);
+ REGISTER("rectangular (WGS84 Cape Town to Brasplia)",
+ rectangular_wgs84_4th_to_3rd_quadrant_short);
+ REGISTER("rectangular (WGS84 Brasplia to Sydney)",
+ rectangular_wgs84_3rd_to_4th_quadrant_long);
+ REGISTER("rectangular (WGS84 Sydney to Brasplia)",
+ rectangular_wgs84_4th_to_3rd_quadrant_long);
+ REGISTER("rectangular (WGS84 Tokyo to Brasplia)",
+ rectangular_wgs84_1st_to_4th_quadrant_short);
+ REGISTER("rectangular (WGS84 Brasplia to Tokyo)",
+ rectangular_wgs84_4th_to_1st_quadrant_short);
+ REGISTER("rectangular (WGS84 Lisbon to Cape Town)",
+ rectangular_wgs84_2nd_to_3rd_quadrant_short);
+ REGISTER("rectangular (WGS84 Cape Town to Lisbon)",
+ rectangular_wgs84_3rd_to_2nd_quadrant_short);
+ REGISTER("rectangular (WGS84 Tokyo to Cape Town)",
+ rectangular_wgs84_1st_to_3rd_quadrant_short);
+ REGISTER("rectangular (WGS84 Cape Town to Tokyo)",
+ rectangular_wgs84_3rd_to_1st_quadrant_short);
+ REGISTER("rectangular (WGS84 Lisbon to Cape Town)",
+ rectangular_wgs84_2nd_to_4th_quadrant_short);
+ REGISTER("rectangular (WGS84 Cape Town to Lisbon)",
+ rectangular_wgs84_4th_to_2nd_quadrant_short);
+ REGISTER("spherical (WGS84)", spherical_wgs84);
+ REGISTER("spherical (TOKYO)", spherical_tgs);
+ REGISTER("hubeny (WGS84)", hubeny_wgs84);
+ REGISTER("hubeny (TOKYO)", hubeny_tgs);
+#undef REGISTER
+
+ bench_reporter_run(reporter);
+ g_object_unref(reporter);
+
+ g_free(data.context);
+
+ bench_quit();
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c b/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c
new file mode 100644
index 00000000000..b934f225330
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.c
@@ -0,0 +1,269 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2011 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/*
+ groonga: f56f466a05d756336f26ea5c2e54e9bdf5d3d681
+ CFLAGS: -O0 -ggdb3
+ CPU: Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz stepping 05
+ % (cd test/benchmark/ && make --quiet run-bench-geo-select)
+ run-bench-geo-select:
+ (time)
+ 1st: select_in_rectangle (partial): (0.819828)
+ 2nd: select_in_rectangle (partial): (0.832293)
+ 1st: select_in_rectangle (all): (8.82504)
+ 2nd: select_in_rectangle (all): (8.97628)
+
+ % (cd test/benchmark; GRN_GEO_CURSOR_STRICTLY=yes make --quiet run-bench-geo-select)
+ run-bench-geo-select:
+ (time)
+ 1st: select_in_rectangle (partial): (0.528143)
+ 2nd: select_in_rectangle (partial): (0.518647)
+ 1st: select_in_rectangle (all): (8.77378)
+ 2nd: select_in_rectangle (all): (8.76765)
+
+ groonga: f56f466a05d756336f26ea5c2e54e9bdf5d3d681
+ CFLAGS: -O3 -ggdb3
+ CPU: Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz stepping 05
+ % (cd test/benchmark/ && make --quiet run-bench-geo-select)
+ run-bench-geo-select:
+ (time)
+ 1st: select_in_rectangle (partial): (0.415439)
+ 2nd: select_in_rectangle (partial): (0.423479)
+ 1st: select_in_rectangle (all): (4.63983)
+ 2nd: select_in_rectangle (all): (4.53055)
+
+ % (cd test/benchmark; GRN_GEO_CURSOR_STRICTLY=yes make --quiet run-bench-geo-select)
+ run-bench-geo-select:
+ (time)
+ 1st: select_in_rectangle (partial): (0.26974)
+ 2nd: select_in_rectangle (partial): (0.250247)
+ 1st: select_in_rectangle (all): (4.45263)
+ 2nd: select_in_rectangle (all): (4.61558)
+*/
+
+#include <string.h>
+
+#include <db.h>
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+#define GET(context, name) (grn_ctx_get(context, name, strlen(name)))
+
+typedef struct _BenchmarkData
+{
+ gboolean report_result;
+
+ grn_ctx *context;
+ grn_obj *database;
+ grn_obj *table;
+ grn_obj *index_column;
+ grn_obj *result;
+
+ grn_obj top_left_point;
+ grn_obj bottom_right_point;
+} BenchmarkData;
+
+static void
+set_geo_point(grn_ctx *context, grn_obj *geo_point, const gchar *geo_point_text)
+{
+ grn_obj point_text;
+
+ GRN_TEXT_INIT(&point_text, 0);
+ GRN_TEXT_PUTS(context, &point_text, geo_point_text);
+ grn_obj_cast(context, &point_text, geo_point, GRN_FALSE);
+ grn_obj_unlink(context, &point_text);
+}
+
+static void
+bench_setup_common(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ const gchar *tokyo_station = "35.68136,139.76609";
+ const gchar *ikebukuro_station = "35.72890,139.71036";
+
+ data->result = grn_table_create(data->context, NULL, 0, NULL,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_WITH_SUBREC,
+ data->table, NULL);
+
+ set_geo_point(data->context, &(data->top_left_point),
+ ikebukuro_station);
+ set_geo_point(data->context, &(data->bottom_right_point),
+ tokyo_station);
+}
+
+static void
+bench_setup_query_partial(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ const gchar *tokyo_station = "35.68136,139.76609";
+ const gchar *ikebukuro_station = "35.72890,139.71036";
+
+ set_geo_point(data->context, &(data->top_left_point),
+ ikebukuro_station);
+ set_geo_point(data->context, &(data->bottom_right_point),
+ tokyo_station);
+}
+
+static void
+bench_setup_query_all(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ const gchar *tokyo_station = "35.0,140.0";
+ const gchar *ikebukuro_station = "36.0,139.0";
+
+ set_geo_point(data->context, &(data->top_left_point),
+ ikebukuro_station);
+ set_geo_point(data->context, &(data->bottom_right_point),
+ tokyo_station);
+}
+
+static void
+bench_setup_in_rectangle_partial(gpointer user_data)
+{
+ bench_setup_common(user_data);
+ bench_setup_query_partial(user_data);
+}
+
+static void
+bench_setup_in_rectangle_all(gpointer user_data)
+{
+ bench_setup_common(user_data);
+ bench_setup_query_all(user_data);
+}
+
+static void
+bench_geo_select_in_rectangle(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_geo_select_in_rectangle(data->context,
+ data->index_column,
+ &(data->top_left_point),
+ &(data->bottom_right_point),
+ data->result,
+ GRN_OP_OR);
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ if (data->report_result) {
+ g_print("result: %d\n", grn_table_size(data->context, data->result));
+ }
+
+ grn_obj_unlink(data->context, data->result);
+}
+
+static gchar *
+get_tmp_dir(void)
+{
+ gchar *current_dir;
+ gchar *tmp_dir;
+
+ current_dir = g_get_current_dir();
+ tmp_dir = g_build_filename(current_dir, "tmp", NULL);
+ g_free(current_dir);
+
+ return tmp_dir;
+}
+
+static void
+setup_database(BenchmarkData *data)
+{
+ gchar *tmp_dir;
+ gchar *database_path;
+
+ tmp_dir = get_tmp_dir();
+ database_path = g_build_filename(tmp_dir, "geo-select", "db", NULL);
+ data->database = grn_db_open(data->context, database_path);
+
+ data->table = GET(data->context, "Addresses");
+ data->index_column = GET(data->context, "Locations.address");
+
+ g_free(database_path);
+}
+
+static void
+teardown_database(BenchmarkData *data)
+{
+ grn_obj_unlink(data->context, data->index_column);
+ grn_obj_unlink(data->context, data->table);
+ grn_obj_unlink(data->context, data->database);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ BenchmarkData data;
+ BenchReporter *reporter;
+ gint n = 100;
+
+ grn_init();
+ bench_init(&argc, &argv);
+
+ data.report_result = g_getenv("GROONGA_BENCH_REPORT_RESULT") != NULL;
+
+ data.context = g_new(grn_ctx, 1);
+ grn_ctx_init(data.context, 0);
+
+ setup_database(&data);
+ GRN_WGS84_GEO_POINT_INIT(&(data.top_left_point), 0);
+ GRN_WGS84_GEO_POINT_INIT(&(data.bottom_right_point), 0);
+
+ {
+ const gchar *groonga_bench_n;
+ groonga_bench_n = g_getenv("GROONGA_BENCH_N");
+ if (groonga_bench_n) {
+ n = atoi(groonga_bench_n);
+ }
+ }
+
+ reporter = bench_reporter_new();
+
+#define REGISTER(label, type, area) \
+ bench_reporter_register(reporter, \
+ label, \
+ n, \
+ bench_setup_ ## type ## _ ## area, \
+ bench_geo_select_ ## type, \
+ bench_teardown, \
+ &data)
+ REGISTER("1st: select_in_rectangle (partial)", in_rectangle, partial);
+ REGISTER("2nd: select_in_rectangle (partial)", in_rectangle, partial);
+ REGISTER("1st: select_in_rectangle (all)", in_rectangle, all);
+ REGISTER("2nd: select_in_rectangle (all)", in_rectangle, all);
+#undef REGISTER
+
+ bench_reporter_run(reporter);
+ g_object_unref(reporter);
+
+ grn_obj_unlink(data.context, &(data.top_left_point));
+ grn_obj_unlink(data.context, &(data.bottom_right_point));
+ teardown_database(&data);
+
+ grn_ctx_fin(data.context);
+ g_free(data.context);
+
+ bench_quit();
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.sh b/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.sh
new file mode 100755
index 00000000000..7e84c8fc943
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-geo-select.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+base_dir="$(dirname $0)"
+
+fixture_dir="${srcdir}/fixtures/geo-select"
+data_dir="${base_dir}/fixtures/geo-select"
+csv_xz="${fixture_dir}/13_2010.CSV.xz"
+csv="${data_dir}/13_2010.CSV"
+grn="${data_dir}/load.grn"
+
+geo_select_generate_grn_rb="${base_dir}/geo-select-generate-grn.rb"
+
+db="${base_dir}/tmp/geo-select/db"
+
+bench_geo_select="./bench-geo-select"
+
+mkdir -p "${data_dir}"
+if [ ! -s "${csv}" ] || [ "${csv}" -ot "${csv_xz}" ]; then
+ echo "extracting ${csv_xz}..."
+ xzcat "${csv_xz}" | iconv --from-code cp932 --to-code utf-8 > "${csv}"
+fi
+
+if [ ! -s "${grn}" ] || [ "${grn}" -ot "${csv}" ]; then
+ echo "generating test data..."
+ "${RUBY}" "${geo_select_generate_grn_rb}" "${csv}" "${grn}"
+fi
+
+if [ ! -s "${db}" ] || [ "${db}" -ot "${grn}" ]; then
+ echo "creating test database..."
+ rm -rf "$(dirname ${db})"
+ mkdir -p "$(dirname ${db})"
+ "${GROONGA}" -n "${db}" < "${grn}"
+fi
+
+if [ "${GROONGA_BENCH_DEBUG}" = "yes" ]; then
+ bench_geo_select="../../libtool --mode=execute gdb --args ${bench_geo_select}"
+fi
+${bench_geo_select}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer-ddl.grn b/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer-ddl.grn
new file mode 100644
index 00000000000..68317ae9ee2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer-ddl.grn
@@ -0,0 +1,16 @@
+table_create Entries TABLE_PAT_KEY ShortText
+column_create Entries name COLUMN_SCALAR ShortText
+column_create Entries description COLUMN_SCALAR Text
+column_create Entries last_modified COLUMN_SCALAR Time
+
+table_create Bigram TABLE_PAT_KEY ShortText \
+ --default_tokenizer TokenBigram \
+ --normalizer NormalizerAuto
+column_create Bigram entries_name COLUMN_INDEX|WITH_POSITION \
+ Entries name
+column_create Bigram entries_description COLUMN_INDEX|WITH_POSITION \
+ Entries description
+
+table_create Times TABLE_PAT_KEY Time
+column_create Times entries_last_modified COLUMN_INDEX \
+ Entries last_modified
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c b/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c
new file mode 100644
index 00000000000..d7ed91d0c56
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-query-optimizer.c
@@ -0,0 +1,208 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/*
+ Groonga: c4379140c02699e3c74b94cd9e7b88d372202aa5
+
+ CFLAGS: -O0 -g3
+ % make --quiet -C benchmark run-bench-query-optimizer
+ run-bench-query-optimizer:
+ Process 100 times in each pattern
+ (time)
+ 1 condition: with mruby: (0.0362s)
+ 1 condition: without mruby: (0.0216s)
+ 4 conditions: with mruby: (0.0864s)
+ 4 conditions: without mruby: (0.0271s)
+
+ CFLAGS: -O2 -g
+ % make --quiet -C benchmark run-bench-query-optimizer
+ run-bench-query-optimizer:
+ Process 100 times in each pattern
+ (time)
+ 1 condition: with mruby: (0.0243s)
+ 1 condition: without mruby: (0.0159s)
+ 4 conditions: with mruby: (0.0452s)
+ 4 conditions: without mruby: (0.0188s)
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+typedef struct _BenchmarkData {
+ grn_ctx context;
+ grn_obj *database;
+ grn_bool use_mruby;
+ GString *command;
+} BenchmarkData;
+
+static void
+bench(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_ctx *context = &(data->context);
+ char *response;
+ unsigned int response_length;
+ int flags;
+
+ grn_ctx_send(context, data->command->str, data->command->len, 0);
+ grn_ctx_recv(context, &response, &response_length, &flags);
+}
+
+static void
+bench_setup(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ if (data->use_mruby) {
+ g_setenv("GRN_MRUBY_ENABLED", "yes", TRUE);
+ } else {
+ g_setenv("GRN_MRUBY_ENABLED", "no", TRUE);
+ }
+ grn_ctx_init(&(data->context), 0);
+ grn_ctx_use(&(data->context), data->database);
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_ctx_fin(&(data->context));
+}
+
+static gchar *
+get_tmp_dir(void)
+{
+ gchar *current_dir;
+ gchar *tmp_dir;
+
+ current_dir = g_get_current_dir();
+ tmp_dir = g_build_filename(current_dir, "tmp", NULL);
+ g_free(current_dir);
+
+ return tmp_dir;
+}
+
+static grn_obj *
+setup_database(grn_ctx *context)
+{
+ gchar *tmp_dir;
+ gchar *database_path;
+ grn_obj *database;
+ const gchar *warmup_command = "dump";
+ gchar *response;
+ unsigned int response_length;
+ int flags;
+
+ tmp_dir = get_tmp_dir();
+ database_path = g_build_filename(tmp_dir, "query-optimizer", "db", NULL);
+ database = grn_db_open(context, database_path);
+ grn_ctx_send(context, warmup_command, strlen(warmup_command), 0);
+ grn_ctx_recv(context, &response, &response_length, &flags);
+
+ g_free(database_path);
+
+ return database;
+}
+
+static void
+teardown_database(grn_ctx *context, grn_obj *database)
+{
+ grn_obj_close(context, database);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ grn_ctx context;
+ grn_obj *database;
+ BenchReporter *reporter;
+ gint n = 100;
+
+ grn_init();
+ bench_init(&argc, &argv);
+
+ grn_ctx_init(&context, 0);
+
+ database = setup_database(&context);
+
+ reporter = bench_reporter_new();
+
+ g_print("Process %d times in each pattern\n", n);
+ {
+ BenchmarkData data_one_condition_with_mruby;
+ BenchmarkData data_one_condition_without_mruby;
+ BenchmarkData data_multiple_conditions_with_mruby;
+ BenchmarkData data_multiple_conditions_without_mruby;
+
+#define REGISTER(label, data, use_mruby_, command_) \
+ data.database = database; \
+ data.use_mruby = use_mruby_; \
+ data.command = g_string_new(command_); \
+ bench_reporter_register(reporter, label, \
+ n, \
+ bench_setup, \
+ bench, \
+ bench_teardown, \
+ &data)
+
+ REGISTER("1 condition: with mruby", data_one_condition_with_mruby,
+ GRN_TRUE,
+ "select Entries --cache no --query 'name:@Groonga'");
+ REGISTER("1 condition: without mruby", data_one_condition_without_mruby,
+ GRN_FALSE,
+ "select Entries --cache no --query 'name:@Groonga'");
+ REGISTER("4 conditions: with mruby",
+ data_multiple_conditions_with_mruby,
+ GRN_TRUE,
+ "select Entries --cache no --filter '"
+ "name @ \"Groonga\" && "
+ "description @ \"search\" && "
+ "last_modified >= \"2014-2-9 00:00:00\" && "
+ "last_modified <= \"2014-11-29 00:00:00\""
+ "'");
+ REGISTER("4 conditions: without mruby",
+ data_multiple_conditions_without_mruby,
+ GRN_FALSE,
+ "select Entries --cache no --filter '"
+ "name @ \"Groonga\" && "
+ "description @ \"search\" && "
+ "last_modified >= \"2014-2-9 00:00:00\" && "
+ "last_modified <= \"2014-11-29 00:00:00\""
+ "'");
+
+#undef REGISTER
+
+ bench_reporter_run(reporter);
+ }
+ g_object_unref(reporter);
+
+ teardown_database(&context, database);
+
+ grn_ctx_fin(&context);
+
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c b/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c
new file mode 100644
index 00000000000..4c0b500aae2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-range-select.c
@@ -0,0 +1,274 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/*
+ Groonga: 09a4c4e00832fb90dee74c5b97b7cf0f5952f85b
+
+ CPU Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz (fam: 06, model: 1e, stepping: 05)
+
+ CFLAGS: -O0 -g3
+ % make --quiet -C benchmark run-bench-range-select
+ run-bench-range-select:
+ Process 10 times in each pattern
+ (total) (average) (median)
+ ( 500, 600] ( 1000): with mruby: (0.0058s) (0.5773ms) (0.5830ms)
+ ( 500, 600] ( 1000): without mruby: (0.0062s) (0.6203ms) (0.6200ms)
+ ( 5000, 5100] ( 10000): with mruby: (0.0058s) (0.5827ms) (0.5800ms)
+ ( 5000, 5100] ( 10000): without mruby: (0.0473s) (0.0047s) (0.0048s)
+ ( 50000, 50100] ( 100000): with mruby: (0.0064s) (0.6397ms) (0.6370ms)
+ ( 50000, 50100] ( 100000): without mruby: (0.4498s) (0.0450s) (0.0442s)
+ (500000, 500100] (1000000): with mruby: (0.0057s) (0.5710ms) (0.5190ms)
+ (500000, 500100] (1000000): without mruby: (4.3193s) (0.4319s) (0.4306s)
+
+ CFLAGS: -O2 -g
+ % make --quiet -C benchmark run-bench-range-select
+ run-bench-range-select:
+ Process 10 times in each pattern
+ (total) (average) (median)
+ ( 500, 600] ( 1000): with mruby: (0.0031s) (0.3058ms) (0.2890ms)
+ ( 500, 600] ( 1000): without mruby: (0.0031s) (0.3132ms) (0.3090ms)
+ ( 5000, 5100] ( 10000): with mruby: (0.0031s) (0.3063ms) (0.3100ms)
+ ( 5000, 5100] ( 10000): without mruby: (0.0239s) (0.0024s) (0.0023s)
+ ( 50000, 50100] ( 100000): with mruby: (0.0028s) (0.2825ms) (0.2660ms)
+ ( 50000, 50100] ( 100000): without mruby: (0.2117s) (0.0212s) (0.0211s)
+ (500000, 500100] (1000000): with mruby: (0.0028s) (0.2757ms) (0.2650ms)
+ (500000, 500100] (1000000): without mruby: (2.0874s) (0.2087s) (0.2092s)
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <db.h>
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+#define GET(context, name) (grn_ctx_get(context, name, strlen(name)))
+
+typedef struct _BenchmarkData
+{
+ grn_ctx context;
+ grn_obj *database;
+ guint n_records;
+ grn_bool use_mruby;
+ const gchar *command;
+} BenchmarkData;
+
+static void
+run_command(grn_ctx *context, const gchar *command)
+{
+ gchar *response;
+ unsigned int response_length;
+ int flags;
+
+ grn_ctx_send(context, command, strlen(command), 0);
+ grn_ctx_recv(context, &response, &response_length, &flags);
+}
+
+static void
+bench(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_ctx *context = &(data->context);
+
+ run_command(context, data->command);
+}
+
+static gchar *
+get_tmp_dir(void)
+{
+ gchar *current_dir;
+ gchar *tmp_dir;
+
+ current_dir = g_get_current_dir();
+ tmp_dir = g_build_filename(current_dir, "tmp", NULL);
+ g_free(current_dir);
+
+ return tmp_dir;
+}
+
+static void
+setup_database(BenchmarkData *data)
+{
+ grn_ctx *context = &(data->context);
+ gchar *tmp_dir;
+ gchar *database_last_component_name;
+ gchar *database_path;
+ guint i;
+
+ tmp_dir = get_tmp_dir();
+ database_last_component_name =
+ g_strdup_printf("db-%d-%s-mruby",
+ data->n_records,
+ data->use_mruby ? "with" : "without");
+ database_path = g_build_filename(tmp_dir,
+ "range-select",
+ database_last_component_name,
+ NULL);
+ g_free(database_last_component_name);
+
+ if (g_file_test(database_path, G_FILE_TEST_EXISTS)) {
+ data->database = grn_db_open(context, database_path);
+ run_command(context, "dump");
+ } else {
+ data->database = grn_db_create(context, database_path, NULL);
+
+ run_command(context, "table_create Entries TABLE_NO_KEY");
+ run_command(context, "column_create Entries rank COLUMN_SCALAR Int32");
+ run_command(context, "table_create Ranks TABLE_PAT_KEY Int32");
+ run_command(context,
+ "column_create Ranks entries_rank COLUMN_INDEX Entries rank");
+
+ run_command(context, "load --table Entries");
+ run_command(context, "[");
+ for (i = 0; i < data->n_records; i++) {
+#define BUFFER_SIZE 4096
+ gchar buffer[BUFFER_SIZE];
+ const gchar *separator;
+ if (i == (data->n_records - 1)) {
+ separator = "";
+ } else {
+ separator = ",";
+ }
+ snprintf(buffer, BUFFER_SIZE, "{\"rank\": %u}%s", i, separator);
+ run_command(context, buffer);
+#undef BUFFER_SIZE
+ }
+ run_command(context, "]");
+ }
+
+ g_free(database_path);
+}
+
+static void
+bench_startup(BenchmarkData *data)
+{
+ if (data->use_mruby) {
+ g_setenv("GRN_MRUBY_ENABLED", "yes", TRUE);
+ } else {
+ g_setenv("GRN_MRUBY_ENABLED", "no", TRUE);
+ }
+ grn_ctx_init(&(data->context), 0);
+ setup_database(data);
+}
+
+static void
+bench_shutdown(BenchmarkData *data)
+{
+ grn_ctx *context = &(data->context);
+
+ grn_obj_close(context, data->database);
+ grn_ctx_fin(context);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ BenchReporter *reporter;
+ gint n = 10;
+
+ grn_init();
+
+ g_print("Process %d times in each pattern\n", n);
+
+ bench_init(&argc, &argv);
+ reporter = bench_reporter_new();
+
+ {
+ BenchmarkData data_small_with_mruby;
+ BenchmarkData data_small_without_mruby;
+ BenchmarkData data_medium_with_mruby;
+ BenchmarkData data_medium_without_mruby;
+ BenchmarkData data_large_with_mruby;
+ BenchmarkData data_large_without_mruby;
+ BenchmarkData data_very_large_with_mruby;
+ BenchmarkData data_very_large_without_mruby;
+
+#define REGISTER(data, n_records_, min, max, use_mruby_) \
+ do { \
+ gchar *label; \
+ label = g_strdup_printf("(%6d, %6d] (%7d): %7s mruby", \
+ min, max, n_records_, \
+ use_mruby_ ? "with" : "without"); \
+ data.use_mruby = use_mruby_; \
+ data.n_records = n_records_; \
+ data.command = \
+ "select Entries --cache no " \
+ "--filter 'rank > " #min " && rank <= " #max "'"; \
+ bench_startup(&data); \
+ bench_reporter_register(reporter, label, \
+ n, \
+ NULL, \
+ bench, \
+ NULL, \
+ &data); \
+ g_free(label); \
+ } while(FALSE)
+
+ REGISTER(data_small_with_mruby,
+ 1000,
+ 500, 600,
+ GRN_TRUE);
+ REGISTER(data_small_without_mruby,
+ 1000,
+ 500, 600,
+ GRN_FALSE);
+ REGISTER(data_medium_with_mruby,
+ 10000,
+ 5000, 5100,
+ GRN_TRUE);
+ REGISTER(data_medium_without_mruby,
+ 10000,
+ 5000, 5100,
+ GRN_FALSE);
+ REGISTER(data_large_with_mruby,
+ 100000,
+ 50000, 50100,
+ GRN_TRUE);
+ REGISTER(data_large_without_mruby,
+ 100000,
+ 50000, 50100,
+ GRN_FALSE);
+ REGISTER(data_very_large_with_mruby,
+ 1000000,
+ 500000, 500100,
+ GRN_TRUE);
+ REGISTER(data_very_large_without_mruby,
+ 1000000,
+ 500000, 500100,
+ GRN_FALSE);
+
+#undef REGISTER
+
+ bench_reporter_run(reporter);
+
+ bench_shutdown(&data_small_with_mruby);
+ bench_shutdown(&data_small_without_mruby);
+ bench_shutdown(&data_medium_with_mruby);
+ bench_shutdown(&data_medium_without_mruby);
+ bench_shutdown(&data_large_with_mruby);
+ bench_shutdown(&data_large_without_mruby);
+ bench_shutdown(&data_very_large_with_mruby);
+ bench_shutdown(&data_very_large_without_mruby);
+ }
+ g_object_unref(reporter);
+
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c b/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c
new file mode 100644
index 00000000000..7e06874dffd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/bench-table-factory.c
@@ -0,0 +1,270 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include <groonga.h>
+
+#include "lib/benchmark.h"
+
+#define DEFAULT_FLAGS (GRN_OBJ_PERSISTENT | GRN_OBJ_TABLE_PAT_KEY)
+#define DEFAULT_VALUE_SIZE (1024)
+#define VALUE_TYPE_NAME "<value_type>"
+
+typedef struct _BenchmarkData
+{
+ gchar *base_dir;
+
+ grn_ctx *context;
+ const char *name;
+ unsigned name_size;
+ char *path;
+ grn_obj_flags flags;
+ grn_obj *key_type;
+ unsigned value_size;
+ grn_encoding encoding;
+} BenchmarkData;
+
+static void
+bench_normal(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_obj *table;
+ grn_obj *value_type = grn_ctx_get(data->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME));
+ if (!value_type) {
+ value_type = grn_type_create(data->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME),
+ 0, data->value_size);
+ }
+ table = grn_table_create(data->context,
+ data->name, data->name_size,
+ data->path, data->flags,
+ data->key_type, value_type);
+ grn_obj_close(data->context, table);
+}
+
+static void
+bench_normal_temporary(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_obj *table;
+ grn_obj *value_type = grn_ctx_get(data->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME));
+ if (!value_type) {
+ value_type = grn_type_create(data->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME),
+ 0, data->value_size);
+ }
+ GRN_CTX_SET_ENCODING(data->context, data->encoding);
+ table = grn_table_create(data->context,
+ data->name, data->name_size,
+ NULL, data->flags & ~GRN_OBJ_PERSISTENT,
+ data->key_type, value_type);
+ grn_obj_close(data->context, table);
+}
+
+typedef struct _grn_table_factory
+{
+ grn_ctx *context;
+ char *name;
+ unsigned name_size;
+ char *path;
+ grn_obj_flags flags;
+ grn_obj *key_type;
+ unsigned value_size;
+ grn_encoding encoding;
+} grn_table_factory;
+
+static grn_table_factory *
+grn_table_factory_create(void)
+{
+ grn_table_factory *factory;
+
+ factory = g_new0(grn_table_factory, 1);
+
+ factory->context = NULL;
+ factory->name = NULL;
+ factory->name_size = 0;
+ factory->path = NULL;
+ factory->flags = DEFAULT_FLAGS;
+ factory->key_type = NULL;
+ factory->value_size = DEFAULT_VALUE_SIZE;
+ factory->encoding = GRN_ENC_DEFAULT;
+
+ return factory;
+}
+
+static void
+grn_table_factory_set_context(grn_table_factory *factory, grn_ctx *context)
+{
+ factory->context = context;
+}
+
+static void
+grn_table_factory_set_name(grn_table_factory *factory, const char *name)
+{
+ factory->name = g_strdup(name);
+ factory->name_size = strlen(name);
+}
+
+static void
+grn_table_factory_set_path(grn_table_factory *factory, const char *path)
+{
+ factory->path = g_strdup(path);
+ if (path)
+ factory->flags |= GRN_OBJ_PERSISTENT;
+ else
+ factory->flags &= ~GRN_OBJ_PERSISTENT;
+}
+
+static void
+grn_table_factory_set_key_type(grn_table_factory *factory, grn_obj *key_type)
+{
+ factory->key_type = key_type;
+}
+
+static grn_obj *
+grn_table_factory_make(grn_table_factory *factory)
+{
+ grn_obj *value_type = grn_ctx_get(factory->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME));
+ if (!value_type) {
+ value_type = grn_type_create(factory->context, VALUE_TYPE_NAME, strlen(VALUE_TYPE_NAME),
+ 0, factory->value_size);
+ }
+ GRN_CTX_SET_ENCODING(factory->context, factory->encoding);
+ return grn_table_create(factory->context,
+ factory->name, factory->name_size,
+ factory->path, factory->flags,
+ factory->key_type, value_type);
+}
+
+static void
+grn_table_factory_close(grn_table_factory *factory)
+{
+ g_free(factory->name);
+ g_free(factory->path);
+ g_free(factory);
+}
+
+static void
+bench_factory(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_table_factory *factory;
+ grn_obj *table;
+
+ factory = grn_table_factory_create();
+ grn_table_factory_set_context(factory, data->context);
+ grn_table_factory_set_name(factory, data->name);
+ grn_table_factory_set_path(factory, data->path);
+ grn_table_factory_set_key_type(factory, data->key_type);
+
+ table = grn_table_factory_make(factory);
+ grn_obj_close(data->context, table);
+
+ grn_table_factory_close(factory);
+}
+
+static void
+bench_factory_temporary(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ grn_table_factory *factory;
+ grn_obj *table;
+
+ factory = grn_table_factory_create();
+ grn_table_factory_set_context(factory, data->context);
+ grn_table_factory_set_name(factory, data->name);
+ grn_table_factory_set_key_type(factory, data->key_type);
+
+ table = grn_table_factory_make(factory);
+ grn_obj_close(data->context, table);
+
+ grn_table_factory_close(factory);
+}
+
+static void
+bench_setup(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+ const gchar *type_name;
+
+ bench_utils_remove_path_recursive_force(data->base_dir);
+ g_mkdir_with_parents(data->base_dir, 0755);
+
+ grn_ctx_init(data->context, GRN_CTX_USE_QL);
+
+ type_name = "name";
+ data->key_type = grn_type_create(data->context,
+ type_name, strlen(type_name),
+ GRN_OBJ_KEY_UINT, sizeof(grn_id));
+
+}
+
+static void
+bench_teardown(gpointer user_data)
+{
+ BenchmarkData *data = user_data;
+
+ grn_obj_close(data->context, data->key_type);
+ grn_ctx_fin(data->context);
+ bench_utils_remove_path_recursive_force(data->base_dir);
+}
+
+int
+main(int argc, gchar **argv)
+{
+ BenchmarkData data;
+ BenchReporter *reporter;
+ gint n = 100;
+
+ grn_init();
+ bench_init(&argc, &argv);
+
+ data.context = g_new(grn_ctx, 1);
+ data.base_dir = g_build_filename(g_get_tmp_dir(), "groonga-bench", NULL);
+ data.name = "table";
+ data.name_size = strlen(data.name);
+ data.path = g_build_filename(data.base_dir, "table", NULL);
+ data.flags = DEFAULT_FLAGS;
+ data.key_type = NULL;
+ data.value_size = DEFAULT_VALUE_SIZE;
+ data.encoding = GRN_ENC_DEFAULT;
+
+ reporter = bench_reporter_new();
+ bench_reporter_register(reporter, "normal (persistent)", n,
+ bench_setup, bench_normal, bench_teardown, &data);
+ bench_reporter_register(reporter, "factory (persistent)", n,
+ bench_setup, bench_factory, bench_teardown, &data);
+ bench_reporter_register(reporter, "normal (temporary)", n,
+ bench_setup, bench_normal_temporary, bench_teardown,
+ &data);
+ bench_reporter_register(reporter, "factory (temporary)", n,
+ bench_setup, bench_factory_temporary, bench_teardown,
+ &data);
+ bench_reporter_run(reporter);
+ g_object_unref(reporter);
+
+ bench_utils_remove_path_recursive_force(data.base_dir);
+
+ g_free(data.path);
+ g_free(data.base_dir);
+ g_free(data.context);
+
+ bench_quit();
+ grn_fin();
+
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/fixtures/Makefile.am b/storage/mroonga/vendor/groonga/benchmark/fixtures/Makefile.am
new file mode 100644
index 00000000000..3b7136f7c73
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/fixtures/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = \
+ geo-select
diff --git a/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/13_2010.CSV.xz b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/13_2010.CSV.xz
new file mode 100644
index 00000000000..3cef52684c9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/13_2010.CSV.xz
Binary files differ
diff --git a/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/Makefile.am b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/Makefile.am
new file mode 100644
index 00000000000..3aa25594f92
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/Makefile.am
@@ -0,0 +1,4 @@
+EXTRA_DIST = \
+ README.txt \
+ 13_2010.CSV.xz \
+ format_2010.html
diff --git a/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/README.txt b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/README.txt
new file mode 100644
index 00000000000..c4a0620a3b7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/README.txt
@@ -0,0 +1,6 @@
+ä½ç½®æƒ…報検索ベンãƒãƒžãƒ¼ã‚¯ç”¨ãƒ†ã‚¹ãƒˆãƒ‡ãƒ¼ã‚¿ã«ã¤ã„ã¦
+--------------------------------------------
+
+13_2010.CSV.xzã¯å›½åœŸäº¤é€šç›¸ã® `ä½ç½®å‚照情報ダウンロードサービス <http://nlftp.mlit.go.jp/isj/>`_ ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸ2010年版ã®æ±äº¬éƒ½ã®ã€Œå¤§å­—・町ä¸ç›®ä½ç½®å‚照情報 国土交通çœã€ã§ã™ã€‚xz圧縮ã—ã¦ã„ã‚‹ã ã‘ã§ãƒ‡ãƒ¼ã‚¿ã®ç·¨é›†ãƒ»åŠ å·¥ã¯ã—ã¦ã„ã¾ã›ã‚“。CSVã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã«ã¤ã„ã¦ã¯format_2010.htmlã‚’å‚ç…§ã—ã¦ãã ã•ã„。ã“ã¡ã‚‰ã‚‚ダウンロードサービスã«å«ã¾ã‚Œã¦ã„ã‚‹ã‚‚ã®ã‚’編集・加工ã—ã¦ã„ã¾ã›ã‚“。
+
+`ä½ç½®å‚照情報ダウンロードサービス利用約款 <http://nlftp.mlit.go.jp/isj/agreement.html>`_ ã«å¾“ã„ã€ä¸Šè¨˜ã®ã‚ˆã†ã«å‡ºå…¸ã‚’明記ã—ã¦åˆ©ç”¨ã—ã¦ã„ã¾ã™ã€‚
diff --git a/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/format_2010.html b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/format_2010.html
new file mode 100644
index 00000000000..5c2396c4e81
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/fixtures/geo-select/format_2010.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>ŠX‹æƒŒƒxƒ‹ˆÊ’uŽQÆî•ñ (2010)</title>
+<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
+</head>
+
+ <body>
+ <h3 align="center">ŠX‹æƒŒƒxƒ‹ˆÊ’uŽQÆî•ñ (2010”N”Å) ƒf[ƒ^Œ`Ž®</h3>
+ <table width="90%" align="center">
+ <tr>
+ <td>
+ ƒtƒ@ƒCƒ‹Œ`Ž®‚ÍCSV(Camma Separated Values)‚Å‚·B<br/>
+ •¶ŽšƒR[ƒh‚ÍAShift-JIS‚Å‚·B<br/>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <table width="100%" align="center" border="1">
+ <tr>
+ <th>€–Ú</th>
+ <th>”õl</th>
+ <th>—á</th>
+ </tr>
+ <tr>
+ <td>“s“¹•{Œ§–¼</td>
+ <td><br/></td>
+ <td>"“Œ‹ž“s"</td>
+ </tr>
+ <tr>
+ <td>Žs‹æ’¬‘º–¼</td>
+ <td>ŒS•”‚ÍŒS–¼A­—ߎw’è“sŽs‚Ì‹æ–¼‚àŠÜ‚ÞB</td>
+ <td>"ç‘ã“c‹æ"</td>
+ </tr>
+ <tr>
+ <td>‘厚E’¬’š–Ú</td>
+ <td>’¬’š–Ú‚Ì”Žš‚ÍŠ¿”Žš</td>
+ <td>"‰à‚ªŠÖ“ñ’š–Ú"</td>
+ </tr>
+ <tr>
+ <td>ŠX‹æ•„†E’n”Ô</td>
+ <td>Œ´‘¥‚Æ‚µ‚Ä”¼Šp®”iˆê•”Š¿Žš“™‚ ‚èj</td>
+ <td>"1"</td>
+ </tr>
+ <tr>
+ <td>À•WŒn”Ô†</td>
+ <td>•½–Ê’¼ŠpÀ•WŒn‚ÌÀ•WŒn”Ô†i1`19F”¼Šp®”j</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>‚wÀ•W</td>
+ <td>
+ •½–Ê’¼ŠpÀ•WŒn‚ÌÀ•WŒnŒ´“_‚©‚ç‚Ì‚¸‚ê<br/>
+ i’PˆÊFƒ[ƒgƒ‹A–k•ûŒü‚ªƒvƒ‰ƒX’lA¬”“_ˆÈ‰º‘æ1ˆÊ‚Ü‚Åj
+ </td>
+ <td>-35925.9</td>
+ </tr>
+ <tr>
+ <td>‚xÀ•W</td>
+ <td>
+ •½–Ê’¼ŠpÀ•WŒn‚ÌÀ•WŒnŒ´“_‚©‚ç‚Ì‚¸‚ê<br/>
+ i’PˆÊFƒ[ƒgƒ‹A“Œ•ûŒü‚ªƒvƒ‰ƒX’lA¬”“_ˆÈ‰º‘æ1ˆÊ‚Ü‚Åj
+ </td>
+ <td>-7446.2</td>
+ </tr>
+ <tr>
+ <td>ˆÜ“x</td>
+ <td>\iŒoˆÜ“xi’PˆÊF“xA¬”“_ˆÈ‰º‘æ6ˆÊ‚Ü‚Åj</td>
+ <td>35.676155</td>
+ </tr>
+ <tr>
+ <td>Œo“x</td>
+ <td>\iŒoˆÜ“xi’PˆÊF“xA¬”“_ˆÈ‰º‘æ6ˆÊ‚Ü‚Åj</td>
+ <td>139.751075</td>
+ </tr>
+ <tr>
+ <td>Z‹•\Ž¦ƒtƒ‰ƒO</td>
+ <td>1FZ‹•\Ž¦ŽÀŽ{A0FZ‹•\Ž¦–¢ŽÀŽ{</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>‘ã•\ƒtƒ‰ƒO</td>
+ <td>
+ 1‚‚̊X‹æ•„†‚ª•¡”‚Ì‘ã•\“_‚ɑΉž•t‚¯‚ç‚ê‚éꇂȂǂÉA‚»‚Ì‚¤‚¿‚Ì1‚‚ɕ֋X“I‚É‘ã•\ƒtƒ‰ƒO‚𗧂ĂĂ¢‚Ü‚·B<br/>
+ 1F‘ã•\‚·‚éA0F‘ã•\‚µ‚È‚¢
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>XV‘O—š—ðƒtƒ‰ƒO</td>
+ <td>2007”N“x‚¨‚æ‚Ñ2008”N“xƒf[ƒ^‚ÉŠÜ‚Ü‚ê‚éƒtƒ‰ƒO‚𗧂ĂĂ¢‚Ü‚·B<br/>
+ 1FV‹Kì¬A2F–¼Ì•ÏXA3FíœA0F•ÏX‚È‚µ</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>XVŒã—š—ðƒtƒ‰ƒO</td>
+ <td>2009”N“xˆÈ~‚̃f[ƒ^‚ÉŠÜ‚Ü‚ê‚éƒtƒ‰ƒO‚𗧂ĂĂ¢‚Ü‚·B<br/>
+ 1FV‹Kì¬A2F–¼Ì•ÏXA3FíœA0F•ÏX‚È‚µ</td>
+ <td>0</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td align="right">
+ •½¬23”N04ŒŽ18“úì¬
+ </td>
+ </tr>
+ </table>
+</body>
+
+</html>
diff --git a/storage/mroonga/vendor/groonga/benchmark/geo-distance-summary.rb b/storage/mroonga/vendor/groonga/benchmark/geo-distance-summary.rb
new file mode 100755
index 00000000000..6559cb60f17
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/geo-distance-summary.rb
@@ -0,0 +1,140 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+require 'fileutils'
+require 'optparse'
+
+class BenchmarkSummary
+ attr_accessor :options
+
+ def initialize(options)
+ @options = options
+ @options[:count] ||= 10
+ end
+
+ def calc_total(data)
+ total = {}
+ @options[:count].times do |i|
+ data[i + 1].each do |key, value|
+ if total[key]
+ total[key] = total[key] + value
+ else
+ total[key] = value
+ end
+ end
+ end
+ total
+ end
+
+ def print_average(data)
+ total = calc_total(data)
+ text = "|é …ç›®|"
+ @options[:count].times do |i|
+ text << "#{i + 1}|"
+ text << "å¹³å‡|\n" if i == @options[:count] - 1
+ end
+ total.each do |key, value|
+ line = [key]
+ @options[:count].times do |i|
+ data[i + 1].each do |data_key, data_value|
+ if key == data_key
+ line << data_value
+ end
+ end
+ end
+ line << [value / @options[:count].to_f]
+ text << sprintf("|%s|\n", line.join("|"))
+ end
+ puts text
+ end
+
+ def print_performance(before, after)
+ before_total = calc_total(before)
+ after_total = calc_total(after)
+ ratio = {}
+ before_total.each do |key, value|
+ ratio[key] = after_total[key] / value
+ end
+ text = "|é …ç›®|変更å‰|変更後|比率|備考|\n"
+ ratio.each do |key, value|
+ text << sprintf("|%s|%f|%f|%f||\n",
+ key,
+ before_total[key] / @options[:count].to_f,
+ after_total[key] / @options[:count].to_f,
+ ratio[key])
+ end
+ puts text
+ end
+
+ def parse_log(logs)
+ parse_result = {}
+ logs.each do |index, log|
+ File.open(log, "r") do |file|
+ data = file.read
+ entry = {}
+ data.split("\n").each do |line|
+ if line =~ /\s*(.+?):\s+\((.+)\)/
+ entry[$1] = $2.to_f
+ end
+ end
+ parse_result[index] = entry
+ end
+ end
+ parse_result
+ end
+end
+
+=begin
+
+Usage: geo-distance-summary.rb \
+-b run-bench-geo-distance-orig-N1000 \
+-a run-bench-geo-distance-work-N1000
+
+NOTE: expected that there are run-bench-geo-distance-orig-N1000-1.log \
+... \
+run-bench-geo-distance-orig-N1000-[N].log.
+
+=end
+
+if __FILE__ == $0
+
+ options = {}
+ parser = OptionParser.new
+ parser.on("-b", "--before PREFIX",
+ "log file name must be PREFIX-[N].log") do |prefix|
+ options[:before] = prefix
+ end
+ parser.on("-a", "--after PREFIX",
+ "log file name must be PREFIX-[N].log") do |prefix|
+ options[:after] = prefix
+ end
+ parser.on("-n", "data count") do |count|
+ options[:count] = count
+ end
+
+ parser.parse!(ARGV)
+
+ if not options.has_key?(:before) or not options.has_key?(:after)
+ puts(parser.to_s)
+ exit
+ end
+
+ bench_before_log = {}
+ bench_after_log = {}
+ Dir.glob("#{options[:before]}*.log") do |log|
+ log =~ /(.+)-(\d+)\.log$/
+ bench_before_log[$2.to_i] = log
+ end
+ Dir.glob("#{options[:after]}*.log") do |log|
+ log =~ /(.+)-(\d+)\.log$/
+ bench_after_log[$2.to_i] = log
+ end
+
+ bench = BenchmarkSummary.new(options)
+ bench_before = bench.parse_log(bench_before_log)
+ bench_after = bench.parse_log(bench_after_log)
+
+ bench.print_average(bench_before)
+ bench.print_average(bench_after)
+ bench.print_performance(bench_before, bench_after)
+end
diff --git a/storage/mroonga/vendor/groonga/benchmark/geo-select-generate-grn.rb b/storage/mroonga/vendor/groonga/benchmark/geo-select-generate-grn.rb
new file mode 100755
index 00000000000..dc90f7e65f7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/geo-select-generate-grn.rb
@@ -0,0 +1,53 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+if ARGV.size != 2
+ puts "Usage: #{$0} SOURCE_CSV OUTPUT_GRN"
+ puts " e.g.: #{$0} fixtures/geo-select/13_2010.CSV fixtures/geo-select/load.grn"
+ exit(false)
+end
+
+csv, grn = ARGV
+
+require "fileutils"
+require "csv"
+
+FileUtils.mkdir_p(File.dirname(grn))
+File.open(grn, "w") do |output|
+ output.print(<<-EOH.strip)
+table_create Addresses TABLE_HASH_KEY ShortText
+column_create Addresses location COLUMN_SCALAR WGS84GeoPoint
+
+table_create Locations TABLE_PAT_KEY WGS84GeoPoint
+column_create Locations address COLUMN_INDEX Addresses location
+
+load --table Addresses
+[
+["_key", "location"]
+EOH
+
+ headers = nil
+ csv_foreach_args = [csv]
+ csv_foreach_args << {:encoding => "UTF-8"} if defined?(Encoding)
+ CSV.foreach(*csv_foreach_args) do |row|
+ if headers.nil?
+ headers = row
+ else
+ record = {}
+ headers.each_with_index do |header, i|
+ record[header] = row[i]
+ end
+ central_value_p = record["代表フラグ"] == "1"
+ next unless central_value_p
+ name =
+ record["都é“府県å"] + record["市区町æ‘å"] +
+ record["大字・町ä¸ç›®"] + record["街区符å·ãƒ»åœ°ç•ª"]
+ location = "%sx%s" % [record["緯度"], record["経度"]]
+ output.print(",\n[\"#{name}\", \"#{location}\"]")
+ end
+ end
+ output.print(<<-EOF)
+
+]
+EOF
+end
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am b/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am
new file mode 100644
index 00000000000..55d113f92e9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/Makefile.am
@@ -0,0 +1,21 @@
+if WITH_BENCHMARK
+noinst_LTLIBRARIES = \
+ libbenchmark.la
+endif
+
+AM_CPPFLAGS = \
+ -I$(srcdir)
+
+AM_CFLAGS = \
+ $(GLIB_CFLAGS)
+
+LIBS = \
+ $(GLIB_LIBS)
+
+libbenchmark_la_SOURCES = \
+ benchmark.c \
+ benchmark.h \
+ bench-reporter.c \
+ bench-reporter.h \
+ bench-utils.c \
+ bench-utils.h
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.c b/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.c
new file mode 100644
index 00000000000..3eb86a2645a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.c
@@ -0,0 +1,315 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include "bench-reporter.h"
+
+typedef struct _BenchItem BenchItem;
+struct _BenchItem
+{
+ gchar *label;
+ gint n;
+ BenchSetupFunc bench_setup;
+ BenchFunc bench;
+ BenchTeardownFunc bench_teardown;
+ gpointer data;
+};
+
+static BenchItem *
+bench_item_new(const gchar *label, gint n,
+ BenchSetupFunc bench_setup,
+ BenchFunc bench,
+ BenchTeardownFunc bench_teardown,
+ gpointer data)
+{
+ BenchItem *item;
+
+ item = g_slice_new(BenchItem);
+
+ item->label = g_strdup(label);
+ item->n = n;
+ item->bench_setup = bench_setup;
+ item->bench = bench;
+ item->bench_teardown = bench_teardown;
+ item->data = data;
+
+ return item;
+}
+
+static void
+bench_item_free(BenchItem *item)
+{
+ if (item->label)
+ g_free(item->label);
+
+ g_slice_free(BenchItem, item);
+}
+
+#define BENCH_REPORTER_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
+ BENCH_TYPE_REPORTER, \
+ BenchReporterPrivate))
+
+typedef struct _BenchReporterPrivate BenchReporterPrivate;
+struct _BenchReporterPrivate
+{
+ GList *items;
+};
+
+G_DEFINE_TYPE(BenchReporter, bench_reporter, G_TYPE_OBJECT)
+
+static void dispose (GObject *object);
+
+static void
+bench_reporter_class_init(BenchReporterClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->dispose = dispose;
+
+ g_type_class_add_private(gobject_class, sizeof(BenchReporterPrivate));
+}
+
+static void
+bench_reporter_init(BenchReporter *reporter)
+{
+ BenchReporterPrivate *priv;
+
+ priv = BENCH_REPORTER_GET_PRIVATE(reporter);
+
+ priv->items = NULL;
+}
+
+static void
+dispose(GObject *object)
+{
+ BenchReporterPrivate *priv;
+
+ priv = BENCH_REPORTER_GET_PRIVATE(object);
+
+ if (priv->items) {
+ g_list_foreach(priv->items, (GFunc)bench_item_free, NULL);
+ g_list_free(priv->items);
+ priv->items = NULL;
+ }
+
+ G_OBJECT_CLASS(bench_reporter_parent_class)->dispose(object);
+}
+
+BenchReporter *
+bench_reporter_new(void)
+{
+ return g_object_new(BENCH_TYPE_REPORTER, NULL);
+}
+
+void
+bench_reporter_register(BenchReporter *reporter,
+ const gchar *label, gint n,
+ BenchSetupFunc bench_setup,
+ BenchFunc bench,
+ BenchTeardownFunc bench_teardown,
+ gpointer data)
+{
+ BenchReporterPrivate *priv;
+
+ priv = BENCH_REPORTER_GET_PRIVATE(reporter);
+
+ priv->items = g_list_append(priv->items, bench_item_new(label, n,
+ bench_setup,
+ bench,
+ bench_teardown,
+ data));
+}
+
+#define INDENT " "
+
+static void
+print_header(BenchReporterPrivate *priv, gint max_label_length)
+{
+ gint n_spaces;
+
+ g_print(INDENT);
+ for (n_spaces = max_label_length + strlen(": ");
+ n_spaces > 0;
+ n_spaces--) {
+ g_print(" ");
+ }
+ g_print("(total) ");
+ g_print("(average) ");
+ g_print("(median)\n");
+}
+
+static void
+print_label(BenchReporterPrivate *priv, BenchItem *item, gint max_label_length)
+{
+ gint n_left_spaces;
+
+ g_print(INDENT);
+ if (item->label) {
+ n_left_spaces = max_label_length - strlen(item->label);
+ } else {
+ n_left_spaces = max_label_length;
+ }
+ for (; n_left_spaces > 0; n_left_spaces--) {
+ g_print(" ");
+ }
+ if (item->label)
+ g_print("%s", item->label);
+ g_print(": ");
+}
+
+static void
+report_elapsed_time(gdouble elapsed_time)
+{
+ gdouble one_second = 1.0;
+ gdouble one_millisecond = one_second / 1000.0;
+ gdouble one_microsecond = one_millisecond / 1000.0;
+
+ if (elapsed_time < one_microsecond) {
+ g_print("(%.8fms)", elapsed_time * 1000.0);
+ } else if (elapsed_time < one_millisecond) {
+ g_print("(%.4fms)", elapsed_time * 1000.0);
+ } else {
+ g_print("(%.4fs) ", elapsed_time);
+ }
+}
+
+static gdouble
+compute_total_elapsed_time(GArray *elapsed_times)
+{
+ guint i;
+ gdouble total = 0.0;
+
+ for (i = 0; i< elapsed_times->len; i++) {
+ gdouble elapsed_time = g_array_index(elapsed_times, gdouble, i);
+ total += elapsed_time;
+ }
+
+ return total;
+}
+
+static void
+report_elapsed_time_total(GArray *elapsed_times)
+{
+ report_elapsed_time(compute_total_elapsed_time(elapsed_times));
+}
+
+static void
+report_elapsed_time_average(GArray *elapsed_times)
+{
+ gdouble total;
+ gdouble average;
+
+ total = compute_total_elapsed_time(elapsed_times);
+ average = total / elapsed_times->len;
+ report_elapsed_time(average);
+}
+
+static gint
+compare_elapsed_time(gconstpointer a, gconstpointer b)
+{
+ const gdouble *elapsed_time1 = a;
+ const gdouble *elapsed_time2 = b;
+
+ if (*elapsed_time1 > *elapsed_time2) {
+ return 1;
+ } else if (*elapsed_time1 < *elapsed_time2) {
+ return -1;
+ } else {
+ return 0;
+ }
+}
+
+static void
+report_elapsed_time_median(GArray *elapsed_times)
+{
+ gdouble median;
+
+ g_array_sort(elapsed_times, compare_elapsed_time);
+ median = g_array_index(elapsed_times, gdouble, elapsed_times->len / 2);
+ report_elapsed_time(median);
+}
+
+static void
+report_elapsed_time_statistics(GArray *elapsed_times)
+{
+ report_elapsed_time_total(elapsed_times);
+ g_print(" ");
+ report_elapsed_time_average(elapsed_times);
+ g_print(" ");
+ report_elapsed_time_median(elapsed_times);
+ g_print("\n");
+}
+
+static void
+run_item(BenchReporterPrivate *priv, BenchItem *item, gint max_label_length)
+{
+ GTimer *timer;
+ GArray *elapsed_times;
+ gint i;
+
+ print_label(priv, item, max_label_length);
+
+ elapsed_times = g_array_new(FALSE, FALSE, sizeof(gdouble));
+
+ timer = g_timer_new();
+ for (i = 0; i < item->n; i++) {
+ gdouble elapsed_time;
+ if (item->bench_setup)
+ item->bench_setup(item->data);
+ g_timer_start(timer);
+ item->bench(item->data);
+ g_timer_stop(timer);
+ elapsed_time = g_timer_elapsed(timer, NULL);
+ g_array_append_val(elapsed_times, elapsed_time);
+ if (item->bench_teardown)
+ item->bench_teardown(item->data);
+ }
+ g_timer_destroy(timer);
+
+ report_elapsed_time_statistics(elapsed_times);
+
+ g_array_free(elapsed_times, TRUE);
+
+}
+
+void
+bench_reporter_run(BenchReporter *reporter)
+{
+ BenchReporterPrivate *priv;
+ GList *node;
+ gint max_label_length = 0;
+
+ priv = BENCH_REPORTER_GET_PRIVATE(reporter);
+ for (node = priv->items; node; node = g_list_next(node)) {
+ BenchItem *item = node->data;
+
+ if (item->label)
+ max_label_length = MAX(max_label_length, strlen(item->label));
+ }
+
+ print_header(priv, max_label_length);
+ for (node = priv->items; node; node = g_list_next(node)) {
+ BenchItem *item = node->data;
+
+ run_item(priv, item, max_label_length);
+ }
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.h b/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.h
new file mode 100644
index 00000000000..7ac51518d67
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/bench-reporter.h
@@ -0,0 +1,64 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef __BENCH_REPORTER_H__
+#define __BENCH_REPORTER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define BENCH_TYPE_REPORTER (bench_reporter_get_type())
+#define BENCH_REPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), BENCH_TYPE_REPORTER, BenchReporter))
+#define BENCH_REPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), BENCH_TYPE_REPORTER, BenchReporterClass))
+#define BENCH_IS_REPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), BENCH_TYPE_REPORTER))
+#define BENCH_IS_REPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), BENCH_TYPE_REPORTER))
+#define BENCH_REPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), BENCH_TYPE_REPORTER, BenchReporterClass))
+
+typedef struct _BenchReporter BenchReporter;
+typedef struct _BenchReporterClass BenchReporterClass;
+
+typedef void (*BenchSetupFunc) (gpointer user_data);
+typedef void (*BenchFunc) (gpointer user_data);
+typedef void (*BenchTeardownFunc) (gpointer user_data);
+
+struct _BenchReporter
+{
+ GObject object;
+};
+
+struct _BenchReporterClass
+{
+ GObjectClass parent_class;
+};
+
+GType bench_reporter_get_type (void) G_GNUC_CONST;
+
+BenchReporter *bench_reporter_new (void);
+void bench_reporter_register (BenchReporter *reporter,
+ const gchar *label,
+ gint n,
+ BenchSetupFunc bench_setup,
+ BenchFunc bench,
+ BenchTeardownFunc bench_teardown,
+ gpointer data);
+void bench_reporter_run (BenchReporter *reporter);
+
+#endif /* __BENCH_REPORTER_H__ */
+
+
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.c b/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.c
new file mode 100644
index 00000000000..a4279731374
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.c
@@ -0,0 +1,83 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <errno.h>
+#include <glib/gstdio.h>
+
+#include "bench-utils.h"
+
+gboolean
+bench_utils_remove_path(const gchar *path, GError **error)
+{
+ if (!g_file_test(path, G_FILE_TEST_EXISTS)) {
+ g_set_error(error, G_FILE_ERROR, G_FILE_ERROR_NOENT,
+ "path doesn't exist: %s", path);
+ return FALSE;
+ }
+
+ if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ if (g_rmdir(path) == -1) {
+ g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno),
+ "can't remove directory: %s", path);
+ return FALSE;
+ }
+ } else {
+ if (g_unlink(path) == -1) {
+ g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno),
+ "can't remove path: %s", path);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+gboolean
+bench_utils_remove_path_recursive(const gchar *path, GError **error)
+{
+ if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
+ GDir *dir;
+ const gchar *name;
+
+ dir = g_dir_open(path, 0, error);
+ if (!dir)
+ return FALSE;
+
+ while ((name = g_dir_read_name(dir))) {
+ const gchar *full_path;
+
+ full_path = g_build_filename(path, name, NULL);
+ if (!bench_utils_remove_path_recursive(full_path, error))
+ return FALSE;
+ }
+
+ g_dir_close(dir);
+
+ return bench_utils_remove_path(path, error);
+ } else {
+ return bench_utils_remove_path(path, error);
+ }
+
+ return TRUE;
+}
+
+void
+bench_utils_remove_path_recursive_force(const gchar *path)
+{
+ bench_utils_remove_path_recursive(path, NULL);
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.h b/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.h
new file mode 100644
index 00000000000..cebf5c2e6ac
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/bench-utils.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef __BENCH_UTILS_H__
+#define __BENCH_UTILS_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+gboolean bench_utils_remove_path (const gchar *path,
+ GError **error);
+gboolean bench_utils_remove_path_recursive (const gchar *path,
+ GError **error);
+void bench_utils_remove_path_recursive_force (const gchar *path);
+
+G_END_DECLS
+
+#endif /* __BENCH_UTILS_H__ */
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.c b/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.c
new file mode 100644
index 00000000000..3bcbacbb8bb
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.c
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008-2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "benchmark.h"
+
+void
+bench_init(gint *argc, gchar ***argv)
+{
+#if !GLIB_CHECK_VERSION(2, 36, 0)
+ if (!g_thread_supported())
+ g_thread_init(NULL);
+
+ g_type_init();
+#endif
+}
+
+void
+bench_quit(void)
+{
+}
diff --git a/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.h b/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.h
new file mode 100644
index 00000000000..87f4ed871ca
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/benchmark/lib/benchmark.h
@@ -0,0 +1,32 @@
+/* -*- c-basic-offset: 2; coding: utf-8 -*- */
+/*
+ Copyright (C) 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef __BENCHMARK_H__
+#define __BENCHMARK_H__
+
+#include "bench-reporter.h"
+#include "bench-utils.h"
+
+G_BEGIN_DECLS
+
+void bench_init(gint *argc, gchar ***argv);
+void bench_quit(void);
+
+G_END_DECLS
+
+#endif
diff --git a/storage/mroonga/vendor/groonga/bindings/php/config.m4 b/storage/mroonga/vendor/groonga/bindings/php/config.m4
new file mode 100644
index 00000000000..c656c9d48bf
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/php/config.m4
@@ -0,0 +1,66 @@
+
+PHP_ARG_WITH(groonga, whether groonga is available,[ --with-groonga[=DIR] With groonga support])
+
+
+if test "$PHP_GROONGA" != "no"; then
+
+
+ if test -r "$PHP_GROONGA/include/groonga.h"; then
+ PHP_GROONGA_DIR="$PHP_GROONGA"
+ PHP_ADD_INCLUDE($PHP_GROONGA_DIR/include)
+ elif test -r "$PHP_GROONGA/include/groonga/groonga.h"; then
+ PHP_GROONGA_DIR="$PHP_GROONGA"
+ PHP_ADD_INCLUDE($PHP_GROONGA_DIR/include/groonga)
+ else
+ AC_MSG_CHECKING(for groonga in default path)
+ for i in /usr /usr/local; do
+ if test -r "$i/include/groonga/groonga.h"; then
+ PHP_GROONGA_DIR=$i
+ AC_MSG_RESULT(found in $i)
+ break
+ fi
+ done
+ if test "x" = "x$PHP_GROONGA_DIR"; then
+ AC_MSG_ERROR(not found)
+ fi
+ PHP_ADD_INCLUDE($PHP_GROONGA_DIR/include)
+ fi
+
+ export OLD_CPPFLAGS="$CPPFLAGS"
+ export CPPFLAGS="$CPPFLAGS $INCLUDES -DHAVE_GROONGA"
+ AC_CHECK_HEADER([groonga.h], [], AC_MSG_ERROR('groonga.h' header not found))
+ PHP_SUBST(GROONGA_SHARED_LIBADD)
+
+
+ PHP_CHECK_LIBRARY(groonga, grn_init,
+ [
+ PHP_ADD_LIBRARY_WITH_PATH(groonga, $PHP_GROONGA_DIR/lib, GROONGA_SHARED_LIBADD)
+ ],[
+ AC_MSG_ERROR([wrong groonga lib version or lib not found])
+ ],[
+ -L$PHP_GROONGA_DIR/lib
+ ])
+ export CPPFLAGS="$OLD_CPPFLAGS"
+
+ export OLD_CPPFLAGS="$CPPFLAGS"
+ export CPPFLAGS="$CPPFLAGS $INCLUDES -DHAVE_GROONGA"
+
+ AC_MSG_CHECKING(PHP version)
+ AC_TRY_COMPILE([#include <php_version.h>], [
+#if PHP_VERSION_ID < 40000
+#error this extension requires at least PHP version 4.0.0
+#endif
+],
+[AC_MSG_RESULT(ok)],
+[AC_MSG_ERROR([need at least PHP 4.0.0])])
+
+ export CPPFLAGS="$OLD_CPPFLAGS"
+
+
+ PHP_SUBST(GROONGA_SHARED_LIBADD)
+ AC_DEFINE(HAVE_GROONGA, 1, [ ])
+
+ PHP_NEW_EXTENSION(groonga, groonga.c , $ext_shared)
+
+fi
+
diff --git a/storage/mroonga/vendor/groonga/bindings/php/config.w32 b/storage/mroonga/vendor/groonga/bindings/php/config.w32
new file mode 100644
index 00000000000..d0fab53beee
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/php/config.w32
@@ -0,0 +1,6 @@
+ARG_WITH('groonga', 'Groonga', 'no');
+
+if (PHP_GROONGA == "yes") {
+ EXTENSION("groonga", "groonga.c");
+ AC_DEFINE("HAVE_GROONGA", 1, "groonga support");
+}
diff --git a/storage/mroonga/vendor/groonga/bindings/php/groonga.c b/storage/mroonga/vendor/groonga/bindings/php/groonga.c
new file mode 100644
index 00000000000..b92cc1a2385
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/php/groonga.c
@@ -0,0 +1,218 @@
+
+#include "php_groonga.h"
+
+#if HAVE_GROONGA
+
+int le_grn_ctx;
+void grn_ctx_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+ grn_ctx *ctx = (grn_ctx *)(rsrc->ptr);
+ grn_ctx_close(ctx);
+}
+
+zend_function_entry groonga_functions[] = {
+ PHP_FE(grn_ctx_init , grn_ctx_init_arg_info)
+ PHP_FE(grn_ctx_close , grn_ctx_close_arg_info)
+ PHP_FE(grn_ctx_connect , grn_ctx_connect_arg_info)
+ PHP_FE(grn_ctx_send , grn_ctx_send_arg_info)
+ PHP_FE(grn_ctx_recv , grn_ctx_recv_arg_info)
+ { NULL, NULL, NULL }
+};
+
+
+zend_module_entry groonga_module_entry = {
+ STANDARD_MODULE_HEADER,
+ "groonga",
+ groonga_functions,
+ PHP_MINIT(groonga),
+ PHP_MSHUTDOWN(groonga),
+ PHP_RINIT(groonga),
+ PHP_RSHUTDOWN(groonga),
+ PHP_MINFO(groonga),
+ "0.1",
+ STANDARD_MODULE_PROPERTIES
+};
+
+#ifdef COMPILE_DL_GROONGA
+ZEND_GET_MODULE(groonga)
+#endif
+
+
+PHP_MINIT_FUNCTION(groonga)
+{
+ REGISTER_LONG_CONSTANT("GRN_CTX_USE_QL", GRN_CTX_USE_QL, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_BATCH_MODE", GRN_CTX_BATCH_MODE, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_DEFAULT", GRN_ENC_DEFAULT, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_NONE", GRN_ENC_NONE, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_EUC_JP", GRN_ENC_EUC_JP, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_UTF8", GRN_ENC_UTF8, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_SJIS", GRN_ENC_SJIS, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_LATIN1", GRN_ENC_LATIN1, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_ENC_KOI8R", GRN_ENC_KOI8R, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_MORE", GRN_CTX_MORE, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_TAIL", GRN_CTX_TAIL, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_HEAD", GRN_CTX_HEAD, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_QUIET", GRN_CTX_QUIET, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_QUIT", GRN_CTX_QUIT, CONST_PERSISTENT | CONST_CS);
+ REGISTER_LONG_CONSTANT("GRN_CTX_FIN", GRN_CTX_FIN, CONST_PERSISTENT | CONST_CS);
+ le_grn_ctx = zend_register_list_destructors_ex(
+ grn_ctx_dtor, NULL, "grn_ctx", module_number);
+
+ grn_init();
+
+ return SUCCESS;
+}
+
+
+PHP_MSHUTDOWN_FUNCTION(groonga)
+{
+ grn_fin();
+ return SUCCESS;
+}
+
+
+PHP_RINIT_FUNCTION(groonga)
+{
+ return SUCCESS;
+}
+
+
+PHP_RSHUTDOWN_FUNCTION(groonga)
+{
+ return SUCCESS;
+}
+
+
+PHP_MINFO_FUNCTION(groonga)
+{
+ php_info_print_box_start(0);
+ php_printf("<p>Groonga</p>\n");
+ php_printf("<p>Version 0.2 (ctx)</p>\n");
+ php_printf("<p><b>Authors:</b></p>\n");
+ php_printf("<p>yu &lt;yu@irx.jp&gt; (lead)</p>\n");
+ php_info_print_box_end();
+}
+
+
+PHP_FUNCTION(grn_ctx_init)
+{
+ grn_ctx *ctx = (grn_ctx *) malloc(sizeof(grn_ctx));
+ long res_id = -1;
+ long flags = 0;
+ grn_rc rc;
+
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags) == FAILURE) {
+ return;
+ }
+
+ if ((rc = grn_ctx_init(ctx, flags)) != GRN_SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ res_id = ZEND_REGISTER_RESOURCE(return_value, ctx, le_grn_ctx);
+ RETURN_RESOURCE(res_id);
+}
+
+
+PHP_FUNCTION(grn_ctx_close)
+{
+ zval *res = NULL;
+ int res_id = -1;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &res) == FAILURE) {
+ return;
+ }
+
+ zend_list_delete(Z_LVAL_P(res)); // call grn_ctx_dtor
+ RETURN_TRUE;
+}
+
+
+PHP_FUNCTION(grn_ctx_connect)
+{
+ zval *res = NULL;
+ int res_id = -1;
+
+ grn_rc rc;
+ grn_ctx *ctx;
+ char *host = "localhost";
+ int host_len = 0;
+ long port = 10041;
+ long flags = 0;
+
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|ll", &res, &host, &host_len, &port, &flags) == FAILURE) {
+ return;
+ }
+
+ ZEND_FETCH_RESOURCE(ctx, grn_ctx *, &res, res_id, "grn_ctx", le_grn_ctx);
+
+ if ((rc = grn_ctx_connect(ctx, host, port, flags)) != GRN_SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ RETURN_TRUE;
+}
+
+
+PHP_FUNCTION(grn_ctx_send)
+{
+ zval *res = NULL;
+ int res_id = -1;
+
+ grn_ctx *ctx;
+ char *query = NULL;
+ unsigned int query_len, qid;
+ long flags = 0;
+
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &res, &query, &query_len, &flags) == FAILURE) {
+ return;
+ }
+
+ ZEND_FETCH_RESOURCE(ctx, grn_ctx *, &res, res_id, "grn_ctx", le_grn_ctx);
+ qid = grn_ctx_send(ctx, query, query_len, flags);
+ if (ctx->rc != GRN_SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ RETURN_LONG(qid)
+
+}
+
+
+PHP_FUNCTION(grn_ctx_recv)
+{
+ zval *res,*ret = NULL;
+ int res_id = -1;
+ grn_ctx *ctx;
+
+ char *str;
+ int flags;
+ unsigned int str_len, qid;
+
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &res) == FAILURE) {
+ return;
+ }
+
+ ZEND_FETCH_RESOURCE(ctx, grn_ctx *, &res, res_id, "grn_ctx", le_grn_ctx);
+
+ qid = grn_ctx_recv(ctx, &str, &str_len, &flags);
+
+ if (ctx->rc != GRN_SUCCESS) {
+ RETURN_FALSE;
+ }
+
+ MAKE_STD_ZVAL(ret);
+ array_init(ret);
+ array_init(return_value);
+
+ add_next_index_long(ret, flags);
+ add_next_index_stringl(ret, str, str_len, 1);
+
+ add_index_zval(return_value, qid, ret);
+}
+
+#endif /* HAVE_GROONGA */
diff --git a/storage/mroonga/vendor/groonga/bindings/php/php_groonga.h b/storage/mroonga/vendor/groonga/bindings/php/php_groonga.h
new file mode 100644
index 00000000000..3af4427fbdb
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/php/php_groonga.h
@@ -0,0 +1,125 @@
+/*
+ +----------------------------------------------------------------------+
+ | unknown license: |
+ +----------------------------------------------------------------------+
+ | Authors: yu <yu@irx.jp> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef PHP_GROONGA_H
+#define PHP_GROONGA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <php.h>
+
+#ifdef HAVE_GROONGA
+
+#include <php_ini.h>
+#include <SAPI.h>
+#include <ext/standard/info.h>
+#include <Zend/zend_extensions.h>
+#ifdef __cplusplus
+} // extern "C"
+#endif
+#include <groonga.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern zend_module_entry groonga_module_entry;
+#define phpext_groonga_ptr &groonga_module_entry
+
+#ifdef PHP_WIN32
+#define PHP_GROONGA_API __declspec(dllexport)
+#else
+#define PHP_GROONGA_API
+#endif
+
+PHP_MINIT_FUNCTION(groonga);
+PHP_MSHUTDOWN_FUNCTION(groonga);
+PHP_RINIT_FUNCTION(groonga);
+PHP_RSHUTDOWN_FUNCTION(groonga);
+PHP_MINFO_FUNCTION(groonga);
+
+#ifdef ZTS
+#include "TSRM.h"
+#endif
+
+#define FREE_RESOURCE(resource) zend_list_delete(Z_LVAL_P(resource))
+
+#define PROP_GET_LONG(name) Z_LVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC))
+#define PROP_SET_LONG(name, l) zend_update_property_long(_this_ce, _this_zval, #name, strlen(#name), l TSRMLS_CC)
+
+#define PROP_GET_DOUBLE(name) Z_DVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC))
+#define PROP_SET_DOUBLE(name, d) zend_update_property_double(_this_ce, _this_zval, #name, strlen(#name), d TSRMLS_CC)
+
+#define PROP_GET_STRING(name) Z_STRVAL_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC))
+#define PROP_GET_STRLEN(name) Z_STRLEN_P(zend_read_property(_this_ce, _this_zval, #name, strlen(#name), 1 TSRMLS_CC))
+#define PROP_SET_STRING(name, s) zend_update_property_string(_this_ce, _this_zval, #name, strlen(#name), s TSRMLS_CC)
+#define PROP_SET_STRINGL(name, s, l) zend_update_property_stringl(_this_ce, _this_zval, #name, strlen(#name), s, l TSRMLS_CC)
+
+
+PHP_FUNCTION(grn_ctx_init);
+#if (PHP_MAJOR_VERSION >= 5)
+ZEND_BEGIN_ARG_INFO_EX(grn_ctx_init_arg_info, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 1)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+#else /* PHP 4.x */
+#define grn_ctx_init_arg_info NULL
+#endif
+
+PHP_FUNCTION(grn_ctx_close);
+#if (PHP_MAJOR_VERSION >= 5)
+ZEND_BEGIN_ARG_INFO_EX(grn_ctx_close_arg_info, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 1)
+ ZEND_ARG_INFO(0, res)
+ZEND_END_ARG_INFO()
+#else /* PHP 4.x */
+#define grn_ctx_close_arg_info NULL
+#endif
+
+PHP_FUNCTION(grn_ctx_connect);
+#if (PHP_MAJOR_VERSION >= 5)
+ZEND_BEGIN_ARG_INFO_EX(grn_ctx_connect_arg_info, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 4)
+ ZEND_ARG_INFO(0, res)
+ ZEND_ARG_INFO(0, host)
+ ZEND_ARG_INFO(0, port)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+#else /* PHP 4.x */
+#define grn_ctx_connect_arg_info NULL
+#endif
+
+PHP_FUNCTION(grn_ctx_send);
+#if (PHP_MAJOR_VERSION >= 5)
+ZEND_BEGIN_ARG_INFO_EX(grn_ctx_send_arg_info, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 3)
+ ZEND_ARG_INFO(0, res)
+ ZEND_ARG_INFO(0, query)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+#else /* PHP 4.x */
+#define grn_ctx_send_arg_info NULL
+#endif
+
+PHP_FUNCTION(grn_ctx_recv);
+#if (PHP_MAJOR_VERSION >= 5)
+ZEND_BEGIN_ARG_INFO_EX(grn_ctx_recv_arg_info, ZEND_SEND_BY_VAL, ZEND_RETURN_VALUE, 1)
+ ZEND_ARG_INFO(0, res)
+ZEND_END_ARG_INFO()
+#else /* PHP 4.x */
+#define grn_ctx_recv_arg_info NULL
+#endif
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* PHP_HAVE_GROONGA */
+
+#endif /* PHP_GROONGA_H */
diff --git a/storage/mroonga/vendor/groonga/bindings/php/tests/001.phpt b/storage/mroonga/vendor/groonga/bindings/php/tests/001.phpt
new file mode 100644
index 00000000000..d215b3eab79
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/php/tests/001.phpt
@@ -0,0 +1,29 @@
+--TEST--
+groonga connection
+--DESCRIPTION--
+required: variables_order includes "E"
+--SKIPIF--
+<?php
+if (!extension_loaded("groonga")) print "skip";
+if (!getenv('GROONGA_TEST_HOST')) print "skip";
+?>
+--FILE--
+<?php
+$host = getenv('GROONGA_TEST_HOST');
+$port = getenv('GROONGA_TEST_PORT') ? getenv('GROONGA_TEST_PORT') : 10041;
+
+$grn = grn_ctx_init();
+grn_ctx_connect($grn, $host, $port) or die("cannot connect groong server ({$host}:{$port})");
+grn_ctx_send($grn, 'table_list');
+var_dump(grn_ctx_recv($grn));
+grn_ctx_close($grn);
+--EXPECTF--
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ int(0)
+ [1]=>
+ string(%d) "%s"
+ }
+}
diff --git a/storage/mroonga/vendor/groonga/bindings/python/ql/groongaql.c b/storage/mroonga/vendor/groonga/bindings/python/ql/groongaql.c
new file mode 100644
index 00000000000..2eae9dacc68
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/python/ql/groongaql.c
@@ -0,0 +1,364 @@
+/* Copyright(C) 2007 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include <Python.h>
+#include <groonga.h>
+
+/* TODO: use exception */
+
+typedef struct {
+ PyObject_HEAD
+ grn_ctx ctx;
+ int closed;
+} groongaql_ContextObject;
+
+static PyTypeObject groongaql_ContextType;
+
+/* Object methods */
+
+static PyObject *
+groongaql_ContextObject_new(PyTypeObject *type, PyObject *args, PyObject *keywds)
+{
+ grn_rc rc;
+ int flags;
+ grn_encoding encoding;
+ groongaql_ContextObject *self;
+
+ static char *kwlist[] = {"flags", "encoding", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "ii", kwlist,
+ &flags, &encoding)) {
+ return NULL;
+ }
+ if (!(self = (groongaql_ContextObject *)type->tp_alloc(type, 0))) {
+ return NULL;
+ }
+ Py_BEGIN_ALLOW_THREADS
+ rc = grn_ctx_init(&self->ctx, flags);
+ GRN_CTX_SET_ENCODING(&self->ctx, encoding);
+ Py_END_ALLOW_THREADS
+ if (rc) {
+ self->ob_type->tp_free(self);
+ return NULL;
+ }
+ self->closed = 0;
+ return (PyObject *)self;
+}
+
+static void
+groongaql_ContextObject_dealloc(groongaql_ContextObject *self)
+{
+ if (!self->closed) {
+ Py_BEGIN_ALLOW_THREADS
+ grn_ctx_fin(&self->ctx);
+ Py_END_ALLOW_THREADS
+ }
+ self->ob_type->tp_free(self);
+}
+
+/* Class methods */
+
+/* instance methods */
+
+static PyObject *
+groongaql_ContextClass_ql_connect(groongaql_ContextObject *self, PyObject *args, PyObject *keywds)
+{
+ grn_rc rc;
+ int port, flags;
+ const char *host;
+ static char *kwlist[] = {"host", "port", "flags", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "sii", kwlist,
+ &host, &port, &flags)) {
+ return NULL;
+ }
+ if (self->closed) { return NULL; }
+ Py_BEGIN_ALLOW_THREADS
+ rc = grn_ctx_connect(&self->ctx, host, port, flags);
+ Py_END_ALLOW_THREADS
+ return Py_BuildValue("i", rc);
+}
+
+static PyObject *
+groongaql_Context_ql_send(groongaql_ContextObject *self, PyObject *args, PyObject *keywds)
+{
+ grn_rc rc;
+ char *str;
+ int str_len, flags;
+ static char *kwlist[] = {"str", "flags", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "s#i", kwlist,
+ &str,
+ &str_len,
+ &flags)) {
+ return NULL;
+ }
+ if (self->closed) { return NULL; }
+ Py_BEGIN_ALLOW_THREADS
+ rc = grn_ctx_send(&self->ctx, str, str_len, flags);
+ Py_END_ALLOW_THREADS
+ return Py_BuildValue("i", rc);
+}
+
+static PyObject *
+groongaql_Context_ql_recv(groongaql_ContextObject *self)
+{
+ grn_rc rc;
+ int flags;
+ char *str;
+ unsigned int str_len;
+
+ if (self->closed) { return NULL; }
+ Py_BEGIN_ALLOW_THREADS
+ rc = grn_ctx_recv(&self->ctx, &str, &str_len, &flags);
+ Py_END_ALLOW_THREADS
+ return Py_BuildValue("(is#i)", rc, str, str_len, flags);
+}
+
+static PyObject *
+groongaql_Context_fin(groongaql_ContextObject *self)
+{
+ grn_rc rc;
+
+ if (self->closed) { return NULL; }
+ Py_BEGIN_ALLOW_THREADS
+ rc = grn_ctx_fin(&self->ctx);
+ Py_END_ALLOW_THREADS
+ if (!rc) {
+ self->closed = 1;
+ }
+ return Py_BuildValue("i", rc);
+}
+
+static PyObject *
+groongaql_Context_ql_info_get(groongaql_ContextObject *self)
+{
+ grn_rc rc;
+ grn_ctx_info info;
+
+ if (self->closed) { return NULL; }
+ rc = grn_ctx_info_get(&self->ctx, &info);
+ /* TODO: handling unsigned int properlly */
+ /* TODO: get outbuf */
+ return Py_BuildValue("{s:i,s:i,s:i}",
+ "rc", rc,
+ "com_status", info.com_status,
+ /* "outbuf", info.outbuf, */
+ "stat", info.stat
+ );
+}
+
+/* methods of classes */
+
+static PyMethodDef groongaql_Context_methods[] = {
+ {"ql_connect", (PyCFunction)groongaql_ContextClass_ql_connect,
+ METH_VARARGS | METH_KEYWORDS,
+ "Create a remote groonga context."},
+ {"ql_send", (PyCFunction)groongaql_Context_ql_send,
+ METH_VARARGS | METH_KEYWORDS,
+ "Send message to context."},
+ {"ql_recv", (PyCFunction)groongaql_Context_ql_recv,
+ METH_NOARGS,
+ "Receive message from context."},
+ {"fin", (PyCFunction)groongaql_Context_fin,
+ METH_NOARGS,
+ "Release groonga context."},
+ {"ql_info_get", (PyCFunction)groongaql_Context_ql_info_get,
+ METH_NOARGS,
+ "Get QL context information."},
+ {NULL, NULL, 0, NULL}
+};
+
+static PyMethodDef module_methods[] = {
+ {NULL, NULL, 0, NULL}
+};
+
+/* type objects */
+
+static PyTypeObject groongaql_ContextType = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "groongaql.Context", /* tp_name */
+ sizeof(groongaql_ContextObject), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)groongaql_ContextObject_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ 0, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
+ "groonga Context objects", /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ groongaql_Context_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ groongaql_ContextObject_new, /* tp_new */
+};
+
+/* consts */
+
+typedef struct _ConstPair {
+ const char *name;
+ int value;
+} ConstPair;
+
+static ConstPair consts[] = {
+ /* grn_rc */
+ {"SUCCESS", GRN_SUCCESS},
+ {"END_OF_DATA", GRN_END_OF_DATA},
+ {"UNKNOWN_ERROR", GRN_UNKNOWN_ERROR},
+ {"OPERATION_NOT_PERMITTED", GRN_OPERATION_NOT_PERMITTED},
+ {"NO_SUCH_FILE_OR_DIRECTORY", GRN_NO_SUCH_FILE_OR_DIRECTORY},
+ {"NO_SUCH_PROCESS", GRN_NO_SUCH_PROCESS},
+ {"INTERRUPTED_FUNCTION_CALL", GRN_INTERRUPTED_FUNCTION_CALL},
+ {"INPUT_OUTPUT_ERROR", GRN_INPUT_OUTPUT_ERROR},
+ {"NO_SUCH_DEVICE_OR_ADDRESS", GRN_NO_SUCH_DEVICE_OR_ADDRESS},
+ {"ARG_LIST_TOO_LONG", GRN_ARG_LIST_TOO_LONG},
+ {"EXEC_FORMAT_ERROR", GRN_EXEC_FORMAT_ERROR},
+ {"BAD_FILE_DESCRIPTOR", GRN_BAD_FILE_DESCRIPTOR},
+ {"NO_CHILD_PROCESSES", GRN_NO_CHILD_PROCESSES},
+ {"RESOURCE_TEMPORARILY_UNAVAILABLE", GRN_RESOURCE_TEMPORARILY_UNAVAILABLE},
+ {"NOT_ENOUGH_SPACE", GRN_NOT_ENOUGH_SPACE},
+ {"PERMISSION_DENIED", GRN_PERMISSION_DENIED},
+ {"BAD_ADDRESS", GRN_BAD_ADDRESS},
+ {"RESOURCE_BUSY", GRN_RESOURCE_BUSY},
+ {"FILE_EXISTS", GRN_FILE_EXISTS},
+ {"IMPROPER_LINK", GRN_IMPROPER_LINK},
+ {"NO_SUCH_DEVICE", GRN_NO_SUCH_DEVICE},
+ {"NOT_A_DIRECTORY", GRN_NOT_A_DIRECTORY},
+ {"IS_A_DIRECTORY", GRN_IS_A_DIRECTORY},
+ {"INVALID_ARGUMENT", GRN_INVALID_ARGUMENT},
+ {"TOO_MANY_OPEN_FILES_IN_SYSTEM", GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM},
+ {"TOO_MANY_OPEN_FILES", GRN_TOO_MANY_OPEN_FILES},
+ {"INAPPROPRIATE_I_O_CONTROL_OPERATION", GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION},
+ {"FILE_TOO_LARGE", GRN_FILE_TOO_LARGE},
+ {"NO_SPACE_LEFT_ON_DEVICE", GRN_NO_SPACE_LEFT_ON_DEVICE},
+ {"INVALID_SEEK", GRN_INVALID_SEEK},
+ {"READ_ONLY_FILE_SYSTEM", GRN_READ_ONLY_FILE_SYSTEM},
+ {"TOO_MANY_LINKS", GRN_TOO_MANY_LINKS},
+ {"BROKEN_PIPE", GRN_BROKEN_PIPE},
+ {"DOMAIN_ERROR", GRN_DOMAIN_ERROR},
+ {"RESULT_TOO_LARGE", GRN_RESULT_TOO_LARGE},
+ {"RESOURCE_DEADLOCK_AVOIDED", GRN_RESOURCE_DEADLOCK_AVOIDED},
+ {"NO_MEMORY_AVAILABLE", GRN_NO_MEMORY_AVAILABLE},
+ {"FILENAME_TOO_LONG", GRN_FILENAME_TOO_LONG},
+ {"NO_LOCKS_AVAILABLE", GRN_NO_LOCKS_AVAILABLE},
+ {"FUNCTION_NOT_IMPLEMENTED", GRN_FUNCTION_NOT_IMPLEMENTED},
+ {"DIRECTORY_NOT_EMPTY", GRN_DIRECTORY_NOT_EMPTY},
+ {"ILLEGAL_BYTE_SEQUENCE", GRN_ILLEGAL_BYTE_SEQUENCE},
+ {"SOCKET_NOT_INITIALIZED", GRN_SOCKET_NOT_INITIALIZED},
+ {"OPERATION_WOULD_BLOCK", GRN_OPERATION_WOULD_BLOCK},
+ {"ADDRESS_IS_NOT_AVAILABLE", GRN_ADDRESS_IS_NOT_AVAILABLE},
+ {"NETWORK_IS_DOWN", GRN_NETWORK_IS_DOWN},
+ {"NO_BUFFER", GRN_NO_BUFFER},
+ {"SOCKET_IS_ALREADY_CONNECTED", GRN_SOCKET_IS_ALREADY_CONNECTED},
+ {"SOCKET_IS_NOT_CONNECTED", GRN_SOCKET_IS_NOT_CONNECTED},
+ {"SOCKET_IS_ALREADY_SHUTDOWNED", GRN_SOCKET_IS_ALREADY_SHUTDOWNED},
+ {"OPERATION_TIMEOUT", GRN_OPERATION_TIMEOUT},
+ {"CONNECTION_REFUSED", GRN_CONNECTION_REFUSED},
+ {"RANGE_ERROR", GRN_RANGE_ERROR},
+ {"TOKENIZER_ERROR", GRN_TOKENIZER_ERROR},
+ {"FILE_CORRUPT", GRN_FILE_CORRUPT},
+ {"INVALID_FORMAT", GRN_INVALID_FORMAT},
+ {"OBJECT_CORRUPT", GRN_OBJECT_CORRUPT},
+ {"TOO_MANY_SYMBOLIC_LINKS", GRN_TOO_MANY_SYMBOLIC_LINKS},
+ {"NOT_SOCKET", GRN_NOT_SOCKET},
+ {"OPERATION_NOT_SUPPORTED", GRN_OPERATION_NOT_SUPPORTED},
+ {"ADDRESS_IS_IN_USE", GRN_ADDRESS_IS_IN_USE},
+ {"ZLIB_ERROR", GRN_ZLIB_ERROR},
+ {"LZO_ERROR", GRN_LZO_ERROR},
+ /* grn_encoding */
+ {"ENC_DEFAULT", GRN_ENC_DEFAULT},
+ {"ENC_NONE", GRN_ENC_NONE},
+ {"ENC_EUC_JP", GRN_ENC_EUC_JP},
+ {"ENC_UTF8", GRN_ENC_UTF8},
+ {"ENC_SJIS", GRN_ENC_SJIS},
+ {"ENC_LATIN1", GRN_ENC_LATIN1},
+ {"ENC_KOI8R", GRN_ENC_KOI8R},
+ /* grn_ctx flags */
+ {"CTX_USE_QL", GRN_CTX_USE_QL},
+ {"CTX_BATCH_MODE", GRN_CTX_BATCH_MODE},
+ {"CTX_MORE", GRN_CTX_MORE},
+ {"CTX_TAIL", GRN_CTX_TAIL},
+ {"CTX_HEAD", GRN_CTX_HEAD},
+ {"CTX_QUIET", GRN_CTX_QUIET},
+ {"CTX_QUIT", GRN_CTX_QUIT},
+ {"CTX_FIN", GRN_CTX_FIN},
+ /* end */
+ {NULL, 0}
+};
+
+#ifndef PyMODINIT_FUNC
+#define PyMODINIT_FUNC void
+#endif
+PyMODINIT_FUNC
+initgroongaql(void)
+{
+ unsigned int i;
+ PyObject *m, *dict;
+
+ if (!(m = Py_InitModule3("groongaql", module_methods,
+ "groonga ql module."))) {
+ goto exit;
+ }
+ grn_init();
+
+ /* register classes */
+
+ if (PyType_Ready(&groongaql_ContextType) < 0) { goto exit; }
+ Py_INCREF(&groongaql_ContextType);
+ PyModule_AddObject(m, "Context", (PyObject *)&groongaql_ContextType);
+
+ /* register consts */
+
+ if (!(dict = PyModule_GetDict(m))) { goto exit; }
+
+ for (i = 0; consts[i].name; i++) {
+ PyObject *v;
+ if (!(v = PyInt_FromLong(consts[i].value))) {
+ goto exit;
+ }
+ PyDict_SetItemString(dict, consts[i].name, v);
+ Py_DECREF(v);
+ }
+ if (Py_AtExit((void (*)(void))grn_fin)) { goto exit; }
+exit:
+ if (PyErr_Occurred()) {
+ PyErr_SetString(PyExc_ImportError, "groongaql: init failed");
+ }
+}
diff --git a/storage/mroonga/vendor/groonga/bindings/python/ql/setup.py b/storage/mroonga/vendor/groonga/bindings/python/ql/setup.py
new file mode 100755
index 00000000000..3b8005540cf
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/bindings/python/ql/setup.py
@@ -0,0 +1,22 @@
+#!/usr/bin/python
+from distutils.core import setup, Extension
+
+#cflags = ['-Wall', '-fPIC', '-g', '-O0']
+cflags = ['-Wall', '-fPIC', '-O3']
+
+ext = Extension('groongaql',
+ libraries = ['groonga'],
+ sources = ['groongaql.c'],
+ extra_compile_args = cflags)
+
+setup(name = 'groongaql',
+ version = '1.0',
+ description = 'python GQTP',
+ long_description = '''
+ This is a GQTP Python API package.
+ ''',
+ license='GNU LESSER GENERAL PUBLIC LICENSE',
+ author = 'Brazil',
+ author_email = 'groonga at razil.jp',
+ ext_modules = [ext]
+ )
diff --git a/storage/mroonga/vendor/groonga/build/Makefile.am b/storage/mroonga/vendor/groonga/build/Makefile.am
new file mode 100644
index 00000000000..506a11dc3b0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = \
+ cmake_modules
diff --git a/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4 b/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4
new file mode 100644
index 00000000000..5046e8ce6ab
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/ac_macros/check_functions.m4
@@ -0,0 +1,13 @@
+# -*- autoconf -*-
+
+AC_CHECK_FUNCS(_strnicmp)
+AC_CHECK_FUNCS(_strtoui64)
+AC_CHECK_FUNCS(close)
+AC_CHECK_FUNCS(gmtime_r)
+AC_CHECK_FUNCS(localtime_r)
+AC_CHECK_FUNCS(mkostemp)
+AC_CHECK_FUNCS(open)
+AC_CHECK_FUNCS(read)
+AC_CHECK_FUNCS(strncasecmp)
+AC_CHECK_FUNCS(strtoull)
+AC_CHECK_FUNCS(write)
diff --git a/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4 b/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4
new file mode 100644
index 00000000000..513f61afac4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/ac_macros/check_headers.m4
@@ -0,0 +1,23 @@
+# -*- autoconf -*-
+
+AC_CHECK_HEADERS(dlfcn.h)
+AC_CHECK_HEADERS(errno.h)
+AC_CHECK_HEADERS(execinfo.h)
+AC_CHECK_HEADERS(inttypes.h)
+AC_CHECK_HEADERS(netdb.h)
+AC_CHECK_HEADERS(netinet/in.h)
+AC_CHECK_HEADERS(netinet/tcp.h)
+AC_CHECK_HEADERS(signal.h)
+AC_CHECK_HEADERS(stdint.h)
+AC_CHECK_HEADERS(stdlib.h)
+AC_CHECK_HEADERS(sys/mman.h)
+AC_CHECK_HEADERS(sys/param.h)
+AC_CHECK_HEADERS(sys/resource.h)
+AC_CHECK_HEADERS(sys/socket.h)
+AC_CHECK_HEADERS(sys/sysctl.h)
+AC_CHECK_HEADERS(sys/time.h)
+AC_CHECK_HEADERS(sys/types.h)
+AC_CHECK_HEADERS(sys/wait.h)
+AC_CHECK_HEADERS(time.h)
+AC_CHECK_HEADERS(ucontext.h)
+AC_CHECK_HEADERS(unistd.h)
diff --git a/storage/mroonga/vendor/groonga/build/cmake_modules/Makefile.am b/storage/mroonga/vendor/groonga/build/cmake_modules/Makefile.am
new file mode 100644
index 00000000000..83fb0f0c1b4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/cmake_modules/Makefile.am
@@ -0,0 +1,2 @@
+EXTRA_DIST = \
+ ReadFileList.cmake
diff --git a/storage/mroonga/vendor/groonga/build/cmake_modules/ReadFileList.cmake b/storage/mroonga/vendor/groonga/build/cmake_modules/ReadFileList.cmake
new file mode 100644
index 00000000000..018587991d8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/cmake_modules/ReadFileList.cmake
@@ -0,0 +1,27 @@
+# Copyright(C) 2012 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+macro(read_file_list file_name output_variable)
+ file(READ ${file_name} ${output_variable})
+ # Remove variable declaration at the first line:
+ # "libgroonga_la_SOURCES = \" -> ""
+ string(REGEX REPLACE "^.*=[ \t]*\\\\" ""
+ ${output_variable} "${${output_variable}}")
+ # Remove white spaces: " com.c \\\n com.h \\\n" -> "com.c\\com.h"
+ string(REGEX REPLACE "[ \t\n]" "" ${output_variable} "${${output_variable}}")
+ # Convert string to list: "com.c\\com.h" -> "com.c;com.h"
+ # NOTE: List in CMake is ";" separated string.
+ string(REGEX REPLACE "\\\\" ";" ${output_variable} "${${output_variable}}")
+endmacro()
diff --git a/storage/mroonga/vendor/groonga/build/makefiles/LC_MESSAGES.am b/storage/mroonga/vendor/groonga/build/makefiles/LC_MESSAGES.am
new file mode 100644
index 00000000000..acfc3da238e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/makefiles/LC_MESSAGES.am
@@ -0,0 +1,5 @@
+BUILT_SOURCES =
+EXTRA_DIST =
+SUFFIXES =
+
+include $(top_srcdir)/build/makefiles/gettext.am
diff --git a/storage/mroonga/vendor/groonga/build/makefiles/gettext.am b/storage/mroonga/vendor/groonga/build/makefiles/gettext.am
new file mode 100644
index 00000000000..9706b485dd1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/makefiles/gettext.am
@@ -0,0 +1,73 @@
+include $(top_srcdir)/doc/files.am
+include $(top_srcdir)/build/makefiles/sphinx-build.am
+
+EXTRA_DIST += \
+ $(po_files)
+
+if DOCUMENT_AVAILABLE
+EXTRA_DIST += \
+ $(mo_files)
+endif
+
+if DOCUMENT_BUILDABLE
+BUILT_SOURCES += \
+ pot-build-stamp \
+ edit-po-build-stamp \
+ $(mo_files)
+endif
+
+SUFFIXES += .pot .po .mo .edit
+
+.PHONY: gettext update build
+
+.pot.edit:
+ if test -f $*.po; then \
+ msgmerge \
+ --quiet \
+ --sort-by-file \
+ --output-file=$@.tmp \
+ $*.po \
+ $<; \
+ else \
+ msginit \
+ --input=$< \
+ --output-file=$@.tmp \
+ --locale=$(LOCALE) \
+ --no-translator; \
+ fi
+ (echo "# -*- po -*-"; \
+ GREP_OPTIONS= grep -v '^# -\*- po -\*-' $@.tmp | \
+ GREP_OPTIONS= grep -v '^"POT-Creation-Date:') > $@
+ rm $@.tmp
+
+.edit.po:
+ msgcat --no-location --output $@ $<
+
+.po.mo:
+ msgfmt -o $@ $<
+
+if DOCUMENT_BUILDABLE
+update: pot-build-stamp edit-po-build-stamp
+build: update $(mo_files)
+else
+update:
+build:
+endif
+
+html: build
+man: build
+pdf: build
+
+gettext:
+ rm *.pot || true
+ $(SPHINX_BUILD_COMMAND) -d doctrees -b gettext $(ALLSPHINXOPTS) .
+ xgettext --language Python --output conf.pot \
+ $(top_srcdir)/doc/source/conf.py
+
+pot-build-stamp: $(absolute_source_files)
+ $(MAKE) gettext
+ @touch $@
+
+edit-po-build-stamp: $(absolute_source_files)
+ $(MAKE) $(edit_po_files)
+ @touch $@
diff --git a/storage/mroonga/vendor/groonga/build/makefiles/locale.am b/storage/mroonga/vendor/groonga/build/makefiles/locale.am
new file mode 100644
index 00000000000..414c19a7e34
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/makefiles/locale.am
@@ -0,0 +1,12 @@
+SUBDIRS = LC_MESSAGES
+
+BUILT_SOURCES =
+EXTRA_DIST =
+
+include $(top_srcdir)/build/makefiles/sphinx.am
+
+init:
+ cd LC_MESSAGES && $(MAKE) $@
+
+update-po:
+ cd LC_MESSAGES && $(MAKE) update
diff --git a/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am b/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am
new file mode 100644
index 00000000000..e237377ba80
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/makefiles/sphinx-build.am
@@ -0,0 +1,19 @@
+# You can set these variables from the command line.
+DOCTREES_BASE = doctrees
+
+SPHINXOPTS =
+PAPER =
+
+# Internal variables.
+SOURCE_DIR = $(abs_top_srcdir)/doc/source
+PAPEROPT_a4 = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS = $(PAPEROPT_$(PAPER)) -E $(SPHINXOPTS) $(SOURCE_DIR)
+
+SPHINX_DIR = $(abs_top_builddir)/doc/sphinx
+SPHINX_BUILD_COMMAND = \
+ DOCUMENT_VERSION="$(DOCUMENT_VERSION)" \
+ DOCUMENT_VERSION_FULL="$(DOCUMENT_VERSION_FULL)" \
+ LOCALE="$(LOCALE)" \
+ PYTHONPATH="$(SPHINX_DIR):$$PYTHONPATH" \
+ $(SPHINX_BUILD)
diff --git a/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am b/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am
new file mode 100644
index 00000000000..f84fb23b739
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/build/makefiles/sphinx.am
@@ -0,0 +1,179 @@
+include $(top_srcdir)/doc/files.am
+include $(top_srcdir)/build/makefiles/sphinx-build.am
+
+$(html_files): html-build-stamp
+$(html_files_relative_from_locale_dir): html-build-stamp
+$(man_files): man-build-stamp
+
+am__nobase_dist_doc_locale_DATA_DIST =
+if DOCUMENT_AVAILABLE
+doc_localedir = $(docdir)/$(LOCALE)
+nobase_dist_doc_locale_DATA = \
+ $(html_files_relative_from_locale_dir)
+am__nobase_dist_doc_locale_DATA_DIST += \
+ $(nobase_dist_doc_locale_DATA)
+endif
+
+document_source_files = \
+ $(absolute_source_files) \
+ $(absolute_theme_files) \
+ $(po_files_relative_from_locale_dir) \
+ $(mo_files_relative_from_locale_dir)
+
+required_build_stamps = \
+ html-build-stamp \
+ man-build-stamp \
+ mo-build-stamp
+
+if DOCUMENT_BUILDABLE
+EXTRA_DIST += $(required_build_stamps)
+endif
+
+man_files = \
+ man/$(PACKAGE_NAME).1
+
+generated_files = \
+ $(DOCTREES_BASE) \
+ man \
+ man-build-stamp \
+ html \
+ html-build-stamp \
+ pdf \
+ pdf-build-stamp \
+ dirhtml \
+ dirhtml-build-stamp \
+ pickle \
+ pikcle-build-stamp \
+ json \
+ json-build-stamp \
+ htmlhelp \
+ htmlhelp-build-stamp \
+ qthelp \
+ qthelp-build-stamp \
+ latex \
+ latex-build-stamp \
+ changes \
+ changes-build-stamp \
+ linkcheck \
+ linkcheck-build-stamp \
+ doctest
+
+$(mo_files_relative_from_locale_dir): mo-build-stamp
+
+mo-build-stamp: $(po_files_relative_from_locale_dir)
+ cd LC_MESSAGES && $(MAKE) build
+ @touch $@
+
+if DOCUMENT_BUILDABLE
+clean-local: $(clean_targets) clean-doctrees
+
+clean-doctrees:
+ rm -rf $(DOCTREES_BASE)
+
+maintainer-clean-local:
+ rm -rf -- $(generated_files)
+endif
+
+.PHONY: help
+.PHONY: man clean-man
+.PHONY: html clean-html
+.PHONY: pdf
+.PHONY: dirhtml
+.PHONY: pickle
+.PHONY: json
+.PHONY: htmlhelp
+.PHONY: qthelp
+.PHONY: latex
+.PHONY: changes
+.PHONY: linkcheck
+.PHONY: doctest
+
+if DOCUMENT_BUILDABLE
+help:
+ @echo "Please use \`make <target>' where <target> is one of"
+ @echo " man to make man files"
+ @echo " html to make standalone HTML files"
+ @echo " dirhtml to make HTML files named index.html in directories"
+ @echo " pickle to make pickle files"
+ @echo " json to make JSON files"
+ @echo " htmlhelp to make HTML files and a HTML help project"
+ @echo " qthelp to make HTML files and a qthelp project"
+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+ @echo " rdoc to make RDoc files"
+ @echo " textile to make Textile files"
+ @echo " changes to make an overview of all changed/added/deprecated items"
+ @echo " linkcheck to check all external links for integrity"
+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
+
+man: man-build-stamp
+html: html-build-stamp
+dirhtml: dirhtml-build-stamp
+pickle: pickle-build-stamp
+json: json-build-stamp
+htmlhelp: htmlhelp-build-stamp
+qthelp: qthelp-build-stamp
+latex: latex-build-stamp
+rdoc: rdoc-build-stamp
+textile: textile-build-stamp
+changes: changes-build-stamp
+linkcheck: linkcheck-build-stamp
+doctest: doctest-build-stamp
+
+clean_targets = \
+ clean-man \
+ clean-html \
+ clean-dirhtml \
+ clean-pickle \
+ clean-json \
+ clean-htmlhelp \
+ clean-qthelp \
+ clean-latex \
+ clean-rdoc \
+ clean-textile \
+ clean-changes \
+ clean-linkcheck \
+ clean-doctest
+
+$(clean_targets):
+ target=`echo $@ | sed -e 's/^clean-//'`; \
+ rm -rf $${target}-build-stamp $${target}
+
+build_stamps = \
+ man-build-stamp \
+ html-build-stamp \
+ dirhtml-build-stamp \
+ pickle-build-stamp \
+ json-build-stamp \
+ htmlhelp-build-stamp \
+ qthelp-build-stamp \
+ latex-build-stamp \
+ rdoc-build-stamp \
+ textile-build-stamp \
+ changes-build-stamp \
+ linkcheck-build-stamp \
+ doctest-build-stamp
+
+$(build_stamps): $(document_source_files)
+ target=`echo $@ | sed -e 's/-build-stamp$$//'`; \
+ $(SPHINX_BUILD_COMMAND) \
+ -Dlanguage=$(LOCALE) \
+ -d $(DOCTREES_BASE)/$${target} \
+ -b $${target} \
+ $(ALLSPHINXOPTS) \
+ $${target}
+ @touch $@
+
+qthelp: qthelp-message
+qthelp-message: qthelp-build-stamp
+ @echo "Build finished; now you can run 'qcollectiongenerator' with the" \
+ ".qhcp project file in qthelp/*, like this:"
+ @echo "# qcollectiongenerator qthelp/groonga.qhcp"
+ @echo "To view the help file:"
+ @echo "# assistant -collectionFile qthelp/groonga.qhc"
+
+latex: latex-message
+latex-message: latex-build-stamp
+ @echo "Build finished; the LaTeX files are in latex/*."
+ @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+ "run these through (pdf)latex."
+endif
diff --git a/storage/mroonga/vendor/groonga/config.h.cmake b/storage/mroonga/vendor/groonga/config.h.cmake
new file mode 100644
index 00000000000..d172bc36dba
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/config.h.cmake
@@ -0,0 +1,152 @@
+/* config.h.cmake. Generated from CMakeLists.txt by cmake. */
+
+/* general constants */
+#define CONFIGURE_OPTIONS "${CONFIGURE_OPTIONS}"
+
+#define HOST_CPU "${CMAKE_HOST_SYSTEM_PROCESSOR}"
+#define HOST_OS "${CMAKE_HOST_SYSTEM_NAME}"
+
+#define VERSION "${VERSION}"
+#define PACKAGE "${PROJECT_NAME}"
+#define PACKAGE_NAME "${PROJECT_NAME}"
+#define PACKAGE_STRING "${PROJECT_NAME} ${VERSION}"
+#define PACKAGE_TARNAME "${PROJECT_NAME}"
+#define PACKAGE_URL "${PACKAGE_URL}"
+#define PACKAGE_VERSION "${VERSION}"
+
+/* groonga related constants */
+#define GRN_CONFIG_PATH "${GRN_CONFIG_PATH}"
+#define GRN_LOG_PATH "${GRN_LOG_PATH}"
+#define GRN_VERSION "${GRN_VERSION}"
+
+#define GRN_DEFAULT_DB_KEY "${GRN_DEFAULT_DB_KEY}"
+#define GRN_DEFAULT_ENCODING "${GRN_DEFAULT_ENCODING}"
+#define GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD \
+ ${GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD}
+#define GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT \
+ "${GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT}"
+#define GRN_DEFAULT_DOCUMENT_ROOT \
+ "${GRN_DEFAULT_DOCUMENT_ROOT}"
+
+#define GRN_STACK_SIZE ${GRN_STACK_SIZE}
+
+#define GRN_LOCK_TIMEOUT ${GRN_LOCK_TIMEOUT}
+#define GRN_LOCK_WAIT_TIME_NANOSECOND \
+ ${GRN_LOCK_WAIT_TIME_NANOSECOND}
+
+#define GRN_RELATIVE_PLUGINS_DIR \
+ "${GRN_RELATIVE_PLUGINS_DIR}"
+#define GRN_PLUGINS_DIR "${GRN_PLUGINS_DIR}"
+#define GRN_PLUGIN_SUFFIX "${GRN_PLUGIN_SUFFIX}"
+
+#define GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE "${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE}"
+#define GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE "${GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE}"
+
+#define GRN_RELATIVE_RUBY_SCRIPTS_DIR \
+ "${GRN_RELATIVE_RUBY_SCRIPTS_DIR}"
+#define GRN_RUBY_SCRIPTS_DIR "${GRN_RUBY_SCRIPTS_DIR}"
+
+#define GRN_DLL_FILENAME L"${GRN_DLL_FILENAME}"
+
+/* build switches */
+#cmakedefine USE_MEMORY_DEBUG
+#cmakedefine USE_MAP_HUGETLB
+#cmakedefine USE_AIO
+#cmakedefine USE_DYNAMIC_MALLOC_CHANGE
+#cmakedefine USE_EPOLL
+#cmakedefine USE_EXACT_ALLOC_COUNT
+#cmakedefine USE_FAIL_MALLOC
+#cmakedefine USE_FUTEX
+#cmakedefine USE_KQUEUE
+#cmakedefine USE_MSG_MORE
+#cmakedefine USE_MSG_NOSIGNAL
+#cmakedefine USE_POLL
+#cmakedefine USE_QUERY_ABORT
+#cmakedefine USE_SELECT
+
+/* compiler specific build options */
+#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
+#ifndef _GNU_SOURCE
+ #cmakedefine _GNU_SOURCE
+#endif
+#cmakedefine _ISOC99_SOURCE
+#cmakedefine _LARGE_FILES
+#cmakedefine _NETBSD_SOURCE
+#cmakedefine _XOPEN_SOURCE
+#cmakedefine _XPG4_2
+#cmakedefine __EXTENSIONS__
+
+/* build environment */
+#cmakedefine WORDS_BIGENDIAN
+
+/* packages */
+#cmakedefine GRN_WITH_BENCHMARK
+#cmakedefine GRN_WITH_CUTTER
+#cmakedefine GRN_WITH_KYTEA
+#cmakedefine GRN_WITH_LIBMEMCACHED
+#cmakedefine GRN_WITH_LZO
+#cmakedefine GRN_WITH_MECAB
+#cmakedefine GRN_WITH_MESSAGE_PACK
+#cmakedefine GRN_WITH_MRUBY
+#cmakedefine GRN_WITH_NFKC
+#cmakedefine GRN_WITH_ZEROMQ
+#cmakedefine GRN_WITH_ZLIB
+
+/* headers */
+#cmakedefine HAVE_DLFCN_H
+#cmakedefine HAVE_ERRNO_H
+#cmakedefine HAVE_EXECINFO_H
+#cmakedefine HAVE_INTTYPES_H
+#cmakedefine HAVE_LINUX_FUTEX_H
+#cmakedefine HAVE_MEMORY_H
+#cmakedefine HAVE_NETDB_H
+#cmakedefine HAVE_NETINET_IN_H
+#cmakedefine HAVE_NETINET_TCP_H
+#cmakedefine HAVE_PTHREAD_H
+#cmakedefine HAVE_SIGNAL_H
+#cmakedefine HAVE_STDINT_H
+#cmakedefine HAVE_STDLIB_H
+#cmakedefine HAVE_STRINGS_H
+#cmakedefine HAVE_STRING_H
+#cmakedefine HAVE_SYS_MMAN_H
+#cmakedefine HAVE_SYS_PARAM_H
+#cmakedefine HAVE_SYS_RESOURCE_H
+#cmakedefine HAVE_SYS_SELECT_H
+#cmakedefine HAVE_SYS_SOCKET_H
+#cmakedefine HAVE_SYS_STAT_H
+#cmakedefine HAVE_SYS_SYSCALL_H
+#cmakedefine HAVE_SYS_SYSCTL_H
+#cmakedefine HAVE_SYS_TIME_H
+#cmakedefine HAVE_SYS_TYPES_H
+#cmakedefine HAVE_SYS_WAIT_H
+#cmakedefine HAVE_TIME_H
+#cmakedefine HAVE_UCONTEXT_H
+#cmakedefine HAVE_UNISTD_H
+
+/* libraries */
+#cmakedefine HAVE_LIBEDIT
+#cmakedefine HAVE_LIBEVENT
+#cmakedefine HAVE_LIBM
+#cmakedefine HAVE_LIBRT
+
+/* structs */
+#cmakedefine HAVE_MECAB_DICTIONARY_INFO_T
+
+/* functions */
+#cmakedefine HAVE__STRNICMP
+#cmakedefine HAVE__STRTOUI64
+#cmakedefine HAVE_BACKTRACE
+#cmakedefine HAVE_CLOCK
+#cmakedefine HAVE_CLOCK_GETTIME
+#cmakedefine HAVE_CLOSE
+#cmakedefine HAVE_FPCLASSIFY
+#cmakedefine HAVE_GMTIME_R
+#cmakedefine HAVE_LOCALTIME_R
+#cmakedefine HAVE_MKOSTEMP
+#cmakedefine HAVE_OPEN
+#cmakedefine HAVE_READ
+#cmakedefine HAVE_STRNCASECMP
+#cmakedefine HAVE_STRTOULL
+#cmakedefine HAVE_WRITE
+#cmakedefine HAVE_PTHREAD_MUTEXATTR_SETPSHARED
+#cmakedefine HAVE_PTHREAD_CONDATTR_SETPSHARED
diff --git a/storage/mroonga/vendor/groonga/config.sh.in b/storage/mroonga/vendor/groonga/config.sh.in
new file mode 100644
index 00000000000..b4cec3caba1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/config.sh.in
@@ -0,0 +1,6 @@
+export CUTTER="@CUTTER@"
+export RUBY="@RUBY@"
+export GROONGA="@GROONGA@"
+export GROONGA_HTTPD="@GROONGA_HTTPD@"
+export GROONGA_SUGGEST_CREATE_DATASET="@GROONGA_SUGGEST_CREATE_DATASET@"
+export GROONGA_BENCHMARK="@GROONGA_BENCHMARK@"
diff --git a/storage/mroonga/vendor/groonga/configure.ac b/storage/mroonga/vendor/groonga/configure.ac
new file mode 100644
index 00000000000..2be82a165e2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/configure.ac
@@ -0,0 +1,1536 @@
+AC_PREREQ(2.59)
+m4_define([groonga_version], m4_include(base_version))
+AC_INIT([groonga], groonga_version, [groonga@razil.jp])
+AM_CONFIG_HEADER(config.h)
+
+AM_INIT_AUTOMAKE([foreign tar-pax subdir-objects])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+PACKAGE_TITLE=Groonga
+AC_SUBST(PACKAGE_TITLE)
+
+# for Autoconf 2.60 or earlier.
+if test -z "${datarootdir}"; then
+ datarootdir="\${prefix}/share"
+ AC_SUBST(datarootdir)
+fi
+
+# for Autoconf 2.59 or earlier.
+if test -z "${docdir}"; then
+ docdir="\${datarootdir}/doc/\${PACKAGE_TARNAME}"
+ AC_SUBST(docdir)
+fi
+
+AC_CANONICAL_HOST
+AC_DEFINE_UNQUOTED(HOST_CPU, ["$host_cpu"], [host CPU])
+AC_DEFINE_UNQUOTED(HOST_OS, ["$host_os"], [host OS])
+
+AC_MSG_CHECKING([for native Win32])
+case "$host_os" in
+ mingw*)
+ os_win32=yes
+ ;;
+ *)
+ os_win32=no
+ ;;
+esac
+AC_MSG_RESULT([$os_win32])
+
+AC_MSG_CHECKING([for some Win32 platform])
+case "$host_os" in
+ mingw*|cygwin*)
+ platform_win32=yes
+ ;;
+ *)
+ platform_win32=no
+ ;;
+esac
+AC_MSG_RESULT([$platform_win32])
+
+AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
+AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
+
+AC_MSG_CHECKING([for NetBSD.])
+case "$host_os" in
+ netbsd*)
+ netbsd=yes
+ ;;
+ *)
+ netbsd=no
+ ;;
+esac
+AC_MSG_RESULT([$netbsd])
+
+AC_MSG_CHECKING([for Solaris.])
+case "$host_os" in
+ solaris*)
+ solaris=yes
+ ;;
+ *)
+ solaris=no
+ ;;
+esac
+AC_MSG_RESULT([$solaris])
+
+AC_C_BIGENDIAN
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CC_C99
+AM_PROG_CC_C_O
+m4_ifdef([PKG_PROG_PKG_CONFIG],
+ [PKG_PROG_PKG_CONFIG([0.19])
+ m4_pattern_allow(PKG_CONFIG_LIBDIR)])
+
+AC_MSG_CHECKING([for clang])
+if test "$CC" = "clang"; then
+ CLANG=yes
+else
+ CLANG=no
+fi
+AC_MSG_RESULT([$CLANG])
+
+AC_DEFUN([CHECK_CFLAG], [
+ AC_MSG_CHECKING([if gcc supports $1])
+ old_CFLAGS=$CFLAGS
+ flag=`echo '$1' | sed -e 's,^-Wno-,-W,'`
+ CFLAGS="$CFLAGS $flag -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
+ [check_cflag=yes],
+ [check_cflag=no])
+ CFLAGS="$old_CFLAGS"
+ if test "x$check_cflag" = "xyes"; then
+ CFLAGS="$CFLAGS $1"
+ fi
+ AC_MSG_RESULT([$check_cflag])
+])
+
+AC_DEFUN([CHECK_CXXFLAG], [
+ AC_MSG_CHECKING([if g++ supports $1])
+ old_CXXFLAGS=$CXXFLAGS
+ flag=`echo '$1' | sed -e 's,^-Wno-,-W,'`
+ CXXFLAGS="$CXXFLAGS $flag -Werror"
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
+ [check_cxxflag=yes],
+ [check_cxxflag=no])
+ AC_LANG_POP([C++])
+ CXXFLAGS="$old_CXXFLAGS"
+ if test "x$check_cxxflag" = "xyes"; then
+ CXXFLAGS="$CXXFLAGS $1"
+ fi
+ AC_MSG_RESULT([$check_cxxflag])
+])
+
+AC_DEFUN([CHECK_BUILD_FLAG], [
+ CHECK_CFLAG([$1])
+ CHECK_CXXFLAG([$1])
+])
+
+AC_DEFUN([REMOVE_CXXFLAG], [
+ AC_MSG_CHECKING([whether g++ option $1 is needed to be removed])
+ if echo "$CXXFLAGS" | grep -q -- "$1"; then
+ CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's,$1,,'`
+ remove_cxxflag=yes
+ else
+ remove_cxxflag=no
+ fi
+ AC_MSG_RESULT([$remove_cxxflag])
+])
+
+TEST_CFLAGS=""
+TEST_CXXFLAGS=""
+NO_STRICT_ALIASING_CFLAGS=""
+if test "$GCC" = "yes"; then
+ CHECK_BUILD_FLAG([-Wall])
+ CHECK_BUILD_FLAG([-Wextra])
+ if test "x$check_cflag" = "xno"; then
+ CHECK_BUILD_FLAG([-W])
+ fi
+ CHECK_BUILD_FLAG([-Wno-unused-but-set-variable]) # FIXME: enable it.
+ CHECK_BUILD_FLAG([-Wno-unused-parameter])
+ CHECK_BUILD_FLAG([-Wno-sign-compare])
+ CHECK_CFLAG([-Wno-pointer-sign])
+ CHECK_BUILD_FLAG([-Wno-missing-field-initializers])
+
+ CHECK_BUILD_FLAG([-Wformat=2])
+ CHECK_BUILD_FLAG([-Wstrict-aliasing=2])
+ if test "x$check_cflag" = "xyes"; then
+ NO_STRICT_ALIASING_CFLAGS="-fno-strict-aliasing"
+ fi
+ CHECK_BUILD_FLAG([-Wdisabled-optimization])
+ CHECK_BUILD_FLAG([-Wfloat-equal])
+ CHECK_BUILD_FLAG([-Wpointer-arith])
+ CHECK_CFLAG([-Wdeclaration-after-statement])
+ CHECK_CFLAG([-Wbad-function-cast])
+ if test "$CLANG" = "no"; then
+ CHECK_BUILD_FLAG([-Wcast-align])
+ fi
+ CHECK_BUILD_FLAG([-Wredundant-decls])
+# CHECK_BUILD_FLAG([-Wunsafe-loop-optimizations])
+# CHECK_BUILD_FLAG([-Wunreachable-code])
+# CHECK_BUILD_FLAG([-Wswitch-enum])
+# CHECK_BUILD_FLAG([-Wshadow])
+# CHECK_BUILD_FLAG([-Wconversion])
+ CHECK_BUILD_FLAG([-Wwrite-strings])
+# CHECK_BUILD_FLAG([-Winline])
+
+ CHECK_CXXFLAG([-fexceptions])
+ CHECK_CXXFLAG([-fimplicit-templates])
+
+ CFLAGS_for_source="$CFLAGS"
+ CXXFLAGS_for_source="$CXXFLAGS"
+ CHECK_BUILD_FLAG([-Wno-clobbered])
+ if test "x$check_cflag" = "xyes"; then
+ TEST_CFLAGS="-Wno-clobbered"
+ fi
+ if test "x$check_cxxflag" = "xyes"; then
+ TEST_CXXFLAGS="-Wno-clobbered"
+ fi
+ CFLAGS="$CFLAGS_for_source"
+ CXXFLAGS="$CXXFLAGS_for_source"
+fi
+AC_SUBST(TEST_CFLAGS)
+AC_SUBST(TEST_CXXFLAGS)
+AC_SUBST(NO_STRICT_ALIASING_CFLAGS)
+
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+m4_ifdef([LT_OUTPUT], [LT_OUTPUT])
+
+LT_CURRENT=0
+LT_REVISION=0
+LT_AGE=0
+LT_VERSION_INFO="\$(LT_CURRENT):\$(LT_REVISION):\$(LT_AGE)"
+AC_SUBST(LT_CURRENT)
+AC_SUBST(LT_REVISION)
+AC_SUBST(LT_AGE)
+AC_SUBST(LT_VERSION_INFO)
+
+GRN_DLL_FILENAME="libgroonga-\$(LT_CURRENT).dll"
+AC_SUBST(GRN_DLL_FILENAME)
+
+if test "$srcdir/version.sh"; then
+ source "$srcdir/version.sh"
+ AC_SUBST(GRN_VERSION)
+ AC_DEFINE_UNQUOTED(GRN_VERSION, ["$GRN_VERSION"], [groonga version])
+fi
+
+AC_CONFIG_FILES([
+ Makefile
+ build/Makefile
+ build/cmake_modules/Makefile
+ src/Makefile
+ src/suggest/Makefile
+ src/httpd/Makefile
+ lib/Makefile
+ lib/dat/Makefile
+ lib/mrb/Makefile
+ lib/mrb/scripts/Makefile
+ include/Makefile
+ include/groonga/Makefile
+ plugins/Makefile
+ plugins/tokenizers/Makefile
+ plugins/suggest/Makefile
+ plugins/table/Makefile
+ plugins/query_expanders/Makefile
+ plugins/ruby/Makefile
+ plugins/token_filters/Makefile
+ examples/Makefile
+ examples/dictionary/Makefile
+ examples/dictionary/edict/Makefile
+ examples/dictionary/eijiro/Makefile
+ examples/dictionary/gene95/Makefile
+ examples/dictionary/jmdict/Makefile
+ packages/Makefile
+ packages/apt/Makefile
+ packages/ubuntu/Makefile
+ packages/rpm/Makefile
+ packages/rpm/centos/Makefile
+ packages/rpm/fedora/Makefile
+ packages/yum/Makefile
+ packages/source/Makefile
+ packages/windows/Makefile
+ packages/windows/patches/Makefile
+ packages/windows/language-files/Makefile
+ packages/windows/setup-x64.nsi
+ data/Makefile
+ data/images/Makefile
+ data/images/logo/Makefile
+ data/html/Makefile
+ data/munin/Makefile
+ data/init.d/Makefile
+ data/init.d/redhat/Makefile
+ data/init.d/redhat/sysconfig/Makefile
+ data/logrotate.d/Makefile
+ data/logrotate.d/redhat/Makefile
+ data/systemd/Makefile
+ data/systemd/fedora/Makefile
+ data/systemd/fedora/sysconfig/Makefile
+ data/scripts/Makefile
+ tools/Makefile
+ doc/Makefile
+ doc/locale/Makefile
+ doc/locale/en/Makefile
+ doc/locale/en/LC_MESSAGES/Makefile
+ doc/locale/ja/Makefile
+ doc/locale/ja/LC_MESSAGES/Makefile
+ test/Makefile
+ test/unit/Makefile
+ test/unit/lib/Makefile
+ test/unit/fixtures/Makefile
+ test/unit/fixtures/inverted-index/Makefile
+ test/unit/fixtures/stress/Makefile
+ test/unit/fixtures/plugins/Makefile
+ test/unit/fixtures/geo/Makefile
+ test/unit/fixtures/story/Makefile
+ test/unit/fixtures/story/taiyaki/Makefile
+ test/unit/util/Makefile
+ test/unit/core/Makefile
+ test/unit/core/dat/Makefile
+ test/unit/story/Makefile
+ test/command/Makefile
+ benchmark/Makefile
+ benchmark/fixtures/Makefile
+ benchmark/fixtures/geo-select/Makefile
+ benchmark/lib/Makefile
+ vendor/Makefile
+ vendor/onigmo/Makefile
+ vendor/mruby/Makefile
+])
+
+if test "$GCC" = "yes"; then
+ AC_DEFINE(_GNU_SOURCE, [1], [Define to 1 if you use GCC.])
+fi
+
+if test "$netbsd" = "yes"; then
+ AC_DEFINE(_NETBSD_SOURCE, [1], [Define to 1 if you are on NetBSD.])
+fi
+
+if test "$solaris" = "yes"; then
+ AC_DEFINE(_XPG4_2, [1],
+ [Define to 1 for msghdr.msg_control if you are on Solaris.])
+ AC_DEFINE(__EXTENSIONS__, [1],
+ [Define to 1 for singal.h with _XPG4_2 if you are on Solaris.])
+fi
+
+# For debug
+AC_ARG_ENABLE(debug,
+ [AS_HELP_STRING([--enable-debug],
+ [use debug flags (default=no)])],
+ [grn_debug="$enableval"],
+ [grn_debug="no"])
+if test "x$grn_debug" != "xno"; then
+ grn_debug="yes"
+ if test "$CLANG" = "yes"; then
+ CFLAGS="$CFLAGS -O0 -g"
+ CXXFLAGS="$CXXFLAGS -O0 -g"
+ elif test "$GCC" = "yes"; then
+ CFLAGS="$CFLAGS -O0 -g3"
+ CXXFLAGS="$CXXFLAGS -O0 -g3"
+ fi
+fi
+AC_SUBST(grn_debug)
+
+AC_SEARCH_LIBS(log, m, [], [AC_MSG_ERROR("No libm found")])
+AC_MSG_CHECKING([for fpclassify])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <math.h>],
+ [if (fpclassify(0.0)) {return 0;}]
+ )],
+ [
+ AC_DEFINE(HAVE_FPCLASSIFY, [1], [use fpclassify])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#define _ISOC99_SOURCE
+ #include <math.h>],
+ [if (fpclassify(0.0)) {return 0;}]
+ )],
+ [
+ AC_DEFINE(_ISOC99_SOURCE, [1], [Define to 1 for fpclassify])
+ AC_DEFINE(HAVE_FPCLASSIFY, [1], [use fpclassify with _ISOC99_SOURCE])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ])
+ ])
+
+m4_include(build/ac_macros/check_headers.m4)
+m4_include(build/ac_macros/check_functions.m4)
+
+AC_SEARCH_LIBS(backtrace, execinfo,
+ [AC_DEFINE(HAVE_BACKTRACE, [1],
+ [Define to 1 if you have the `backtrace' function.])])
+AC_SEARCH_LIBS(clock_gettime, rt,
+ [AC_DEFINE(HAVE_CLOCK_GETTIME, [1], [use clock_gettime])])
+AC_SYS_LARGEFILE
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_CHECK_SIZEOF(off_t)
+
+# MAP_HUGETLB
+AC_ARG_ENABLE(map-hugetlb,
+ [AS_HELP_STRING([--enable-map-hugetlb],
+ [use MAP_HUGETLB. [default=no]])],
+ ,
+ [enable_map_hugetlb="no"])
+if test "x$enable_map_hugetlb" != "xno"; then
+ AC_MSG_CHECKING([for MAP_HUGETLB])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [
+#ifdef HAVE_SYS_MMAN_H
+# include <sys/mman.h>
+#endif /* HAVE_SYS_MMAN_H */
+ ],
+ [MAP_HUGETLB;]
+ )],
+ [
+ AC_DEFINE(USE_MAP_HUGETLB, [1], [use MAP_HUGETLB])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR("MAP_HUGETLB isn't available.")
+ ]
+ )
+fi
+
+# log path
+AC_ARG_WITH(log_path,
+ [AS_HELP_STRING([--with-log-path=PATH],
+ [specify groonga log path.])],
+ grn_log_path="$withval",
+ grn_log_path="\$(localstatedir)/log/\$(PACKAGE_NAME)/\$(PACKAGE_NAME).log")
+AC_SUBST(grn_log_path)
+
+# default encoding
+AC_ARG_WITH(default_encoding,
+ [AS_HELP_STRING([--with-default-encoding=ENCODING],
+ [specify groonga default encoding(euc_jp/sjis/utf8/latin1/koi8r/none)])],
+ GRN_DEFAULT_ENCODING="$withval",
+ GRN_DEFAULT_ENCODING="utf8")
+AC_DEFINE_UNQUOTED(GRN_DEFAULT_ENCODING, "$GRN_DEFAULT_ENCODING", "specified default encoding")
+
+# default match escalation threshold
+AC_ARG_WITH(match_escalation_threshold,
+ [AS_HELP_STRING([--with-match-escalation-threshold=NUMBER],
+ [specify groonga default match escalation threshold])],
+ GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD="$withval",
+ GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD="0")
+AC_DEFINE_UNQUOTED(GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD, $GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD, "specified match escalation threshold")
+
+# default DB key management algorithm
+AC_ARG_WITH(default_db_key,
+ [AS_HELP_STRING([--with-default-db-key=ALGORITHM],
+ [specify groonga default DB key (pat/dat/auto)])],
+ GRN_DEFAULT_DB_KEY="$withval",
+ GRN_DEFAULT_DB_KEY="auto")
+AC_DEFINE_UNQUOTED(GRN_DEFAULT_DB_KEY, "$GRN_DEFAULT_DB_KEY",
+ "specified default DB key management algorithm")
+
+# DANGER!!!: stack size
+GRN_STACK_SIZE=1024
+AC_ARG_WITH(stack_size,
+ [AS_HELP_STRING([--with-stack-size=SIZE],
+ [DANGER!!!
+ This option specifies stack size. (default=$GRN_STACK_SIZE)
+ Normally, you should not use this option.])],
+ GRN_STACK_SIZE="$withval")
+AC_DEFINE_UNQUOTED(GRN_STACK_SIZE, [$GRN_STACK_SIZE], [stack size])
+
+# lock timeout
+GRN_LOCK_TIMEOUT=10000000
+AC_ARG_WITH(lock_timeout,
+ [AS_HELP_STRING([--with-lock-timeout=N],
+ [This option specifies how many times Groonga tries to acquire a lock.
+ Each try waits --with-lock-wait-time nanoseconds to acquire a lock.
+ It means that Groonga gives up after
+ (--with-lock-wait-time * --with-lock-timeout) nanoseconds.
+ (default=$GRN_LOCK_TIMEOUT)])],
+ GRN_LOCK_TIMEOUT="$withval")
+AC_DEFINE_UNQUOTED(GRN_LOCK_TIMEOUT,
+ [$GRN_LOCK_TIMEOUT],
+ [lock timeout])
+
+# lock wait time
+GRN_LOCK_WAIT_TIME_NANOSECOND=1000000
+AC_ARG_WITH(lock_wait_time,
+ [AS_HELP_STRING([--with-lock-wait-time=NANOSECONDS],
+ [This option specifies wait time in nanosecond to acquire a lock.
+ (default=$GRN_LOCK_WAIT_TIME_NANOSECOND)])],
+ GRN_LOCK_WAIT_TIME_NANOSECOND="$withval")
+AC_DEFINE_UNQUOTED(GRN_LOCK_WAIT_TIME_NANOSECOND,
+ [$GRN_LOCK_WAIT_TIME_NANOSECOND],
+ [lock wait time in nanosecond])
+
+if test "$os_win32" != "yes"; then
+ AC_CHECK_HEADERS(pthread.h)
+ AC_SEARCH_LIBS(pthread_create, pthread,
+ [],
+ [AC_MSG_ERROR("No libpthread found")])
+ AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
+ AC_CHECK_FUNCS(pthread_condattr_setpshared)
+fi
+AC_SEARCH_LIBS(gethostbyname, nsl)
+AC_SEARCH_LIBS(socket, socket)
+AC_SEARCH_LIBS(dlopen, dl)
+
+# nfkc
+AC_ARG_ENABLE(nfkc,
+ [AS_HELP_STRING([--enable-nfkc],
+ [use nfkc based utf8 normalization. [default=yes]])],,
+ [enable_nfkc="yes"])
+if test "x$enable_nfkc" = "xyes"; then
+ AC_DEFINE(GRN_WITH_NFKC, [1], [compile with nfkc.c])
+fi
+
+# coverage
+m4_ifdef([AC_CHECK_COVERAGE], [AC_CHECK_COVERAGE])
+GENHTML_OPTIONS="--title 'groonga Code Coverage'"
+
+# microyield
+AC_MSG_CHECKING([whether enable uyield])
+AC_ARG_ENABLE(uyield,
+ [AS_HELP_STRING([--enable-uyield],
+ [build for detecting race conditions. [default=no]])],
+ ,
+ [enable_uyield="no"])
+AC_MSG_RESULT($enable_uyield)
+
+## malloc
+force_enable_dynamic_malloc_change="no"
+
+# exact-alloc-count
+AC_MSG_CHECKING([whether enable exact-alloc-count])
+AC_ARG_ENABLE(exact-alloc-count,
+ [AS_HELP_STRING([--enable-exact-alloc-count],
+ [atomic counting for memory alloc count. [default=yes]])],,
+ [enable_exact_alloc_count="yes"])
+if test "x$enable_exact_alloc_count" != "xno"; then
+ AC_DEFINE(USE_EXACT_ALLOC_COUNT, [1], [alloc_count with atomic])
+fi
+AC_MSG_RESULT($enable_exact_alloc_count)
+
+# failmalloc
+AC_MSG_CHECKING([whether enable fmalloc])
+AC_ARG_ENABLE(fmalloc,
+ [AS_HELP_STRING([--enable-fmalloc],
+ [make memory allocation failed in specified condition for debug. [default=no]])],
+ ,
+ [enable_fmalloc="no"])
+if test "x$enable_fmalloc" != "xno"; then
+ force_enable_dynamic_malloc_change="yes"
+ AC_DEFINE(USE_FAIL_MALLOC, [1], [use fmalloc])
+fi
+AC_MSG_RESULT($enable_fmalloc)
+
+# abort
+AC_MSG_CHECKING([whether enable abort])
+AC_ARG_ENABLE(abort,
+ [AS_HELP_STRING([--enable-abort],
+ [enable query abortion. [default=no]])],
+ ,
+ [enable_abort="no"])
+if test "x$enable_abort" != "xno"; then
+ force_enable_dynamic_malloc_change="yes"
+ AC_DEFINE(USE_QUERY_ABORT, [1], [use abort])
+fi
+AC_MSG_RESULT($enable_abort)
+
+# dynamic malloc change
+AC_MSG_CHECKING([whether allow dynamic memory allocation change])
+AC_ARG_ENABLE(dynamic-malloc-change,
+ [AS_HELP_STRING([--enable-dynamic-malloc-change],
+ [allow dynamic memory allocation change for testing. [default=no]])],
+ ,
+ [enable_dynamic_malloc_change="no"])
+if test "x$enable_dynamic_malloc_change" != "xyes" -a \
+ "x$force_enable_dynamic_malloc_change" = "xyes"; then
+ enable_dynamic_malloc_change="yes"
+ AC_MSG_RESULT([$enable_dynamic_malloc_change (force)])
+else
+ AC_MSG_RESULT([$enable_dynamic_malloc_change])
+fi
+
+if test "x$enable_dynamic_malloc_change" = "xyes"; then
+ AC_DEFINE(USE_DYNAMIC_MALLOC_CHANGE, [1],
+ [Define to 1 if you enable dynamic malloc change])
+fi
+
+# memory debug
+AC_MSG_CHECKING([whether debug memory management])
+AC_ARG_ENABLE(memory-debug,
+ [AS_HELP_STRING([--enable-memory-debug],
+ [debug memory management. [default=no]])],
+ ,
+ [enable_memory_debug="no"])
+AC_MSG_RESULT([$enable_memory_debug])
+
+if test "x$enable_memory_debug" = "xyes"; then
+ AC_DEFINE(USE_MEMORY_DEBUG, [1],
+ [Define to 1 if you enable debuging memory management])
+fi
+
+# epoll/kqueue/poll/select check
+AC_CHECK_HEADER(sys/epoll.h, [
+ AC_CHECK_FUNC(epoll_create, [
+ AC_TRY_RUN([
+#include <sys/epoll.h>
+int main(int argc, char **argv) { return (epoll_create(16) < 0); }
+ ],
+ [
+ have_epoll="yes"
+ AC_DEFINE(USE_EPOLL, [1], [use epoll])
+ ]
+ )
+ ])
+])
+
+if test "x$have_epoll" != "xyes"; then
+ AC_CHECK_HEADER(sys/event.h, [
+ AC_CHECK_FUNC(kevent, [
+ have_kqueue="yes"
+ AC_DEFINE(USE_KQUEUE, [1], [use kqueue])
+ ])
+ ])
+ if test "x$have_kqueue" != "xyes"; then
+ AC_CHECK_HEADER(sys/poll.h, [
+ AC_CHECK_FUNC(poll, [
+ have_poll="yes"
+ AC_DEFINE(USE_POLL, [1], [use poll])
+ ])
+ ])
+ if test "x$have_poll" != "xyes"; then
+ if test "$os_win32" = "yes"; then
+ AC_CHECK_HEADER(winsock2.h, [have_select="yes"])
+ else
+ AC_CHECK_FUNC(select, [
+ have_select="yes"
+ AC_CHECK_HEADERS(sys/select.h)
+ ])
+ fi
+ if test "x$have_select" = "xyes"; then
+ AC_DEFINE(USE_SELECT, [1], [use select])
+ else
+ AC_MSG_ERROR([epoll/kqueue/poll/select is missing.])
+ fi
+ fi
+ fi
+fi
+
+# check MSG_MORE defined
+AC_MSG_CHECKING([whether MSG_MORE defined])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+#include <sys/types.h>
+#include <sys/socket.h>
+
+int main(int argc, char **argv)
+{
+ return MSG_MORE;
+}
+ ])],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_MSG_MORE, [1], [use MSG_MORE])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ])
+
+# check MSG_NOSIGNAL defined
+AC_MSG_CHECKING([whether MSG_NOSIGNAL defined])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+#include <sys/types.h>
+#include <sys/socket.h>
+
+int main(int argc, char **argv)
+{
+ return MSG_NOSIGNAL;
+}
+ ])],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_MSG_NOSIGNAL, [1], [use MSG_NOSIGNAL])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ])
+
+# MinGW
+if test "$os_win32" = "yes"; then
+ WINDOWS_LDFLAGS="-mwindows"
+ WINDOWS_LIBS="-ladvapi32 -lws2_32"
+else
+ WINDOWS_LDFLAGS=
+ WINDOWS_LIBS=
+fi
+AC_SUBST(WINDOWS_LDFLAGS)
+AC_SUBST(WINDOWS_LIBS)
+
+# groonga binary path
+GROONGA="${ac_pwd}/src/groonga"
+AC_SUBST(GROONGA)
+
+# groonga-benchmark binary path
+GROONGA_BENCHMARK="${ac_pwd}/src/groonga-benchmark"
+AC_SUBST(GROONGA_BENCHMARK)
+
+# groonga-suggest-create-dataset binary path
+GROONGA_SUGGEST_CREATE_DATASET="${ac_pwd}/src/suggest/groonga-suggest-create-dataset"
+AC_SUBST(GROONGA_SUGGEST_CREATE_DATASET)
+
+# check Cutter with GLib support if available
+REQUIRED_MINIMUM_CUTTER_VERSION=1.1.6
+REQUIRED_MINIMUM_CPPCUTTER_VERSION=1.2.0
+m4_ifdef([AC_CHECK_GCUTTER],
+ [AC_CHECK_GCUTTER(>= $REQUIRED_MINIMUM_CUTTER_VERSION)],
+ [cutter_use_cutter="no"])
+m4_ifdef([AC_CHECK_CPPCUTTER],
+ [AC_CHECK_CPPCUTTER(>= $REQUIRED_MINIMUM_CPPCUTTER_VERSION)],
+ [cutter_use_cppcutter="no"])
+
+AM_CONDITIONAL([WITH_CUTTER], [test "$cutter_use_cutter" = "yes"])
+AM_CONDITIONAL([WITH_CPPCUTTER], [test "$cutter_use_cppcutter" = "yes"])
+if test "$cutter_use_cutter" = "yes"; then
+ AC_DEFINE(GRN_WITH_CUTTER, 1, [Define to 1 if you use Cutter])
+fi
+
+# check for benchmark
+AC_ARG_ENABLE(benchmark,
+ [AS_HELP_STRING([--disable-benchmark],
+ [don't build benchmark programs.])],,
+ [enable_benchmark="yes"])
+if test "x$enable_benchmark" = "xno"; then
+ benchmark_available="no"
+else
+ REQUIRED_GLIB_VERSION=2.14.0
+ m4_ifdef([AM_PATH_GLIB_2_0],
+ [AM_PATH_GLIB_2_0($REQUIRED_GLIB_VERSION,
+ [benchmark_available="yes"],
+ [benchmark_available="no"],
+ [gobject gthread])],
+ [benchmark_available="no"])
+ AC_MSG_CHECKING(for benchmark availablity)
+ AC_MSG_RESULT($ac_benchmark_available)
+fi
+if test "$benchmark_available" = "yes"; then
+ AC_DEFINE(GRN_WITH_BENCHMARK, 1, [Define to 1 if benchamrk is available])
+fi
+AM_CONDITIONAL([WITH_BENCHMARK], [test "$benchmark_available" = "yes"])
+
+# check Ruby for HTTP test
+ac_cv_ruby_available="no"
+AC_ARG_WITH([ruby],
+ AS_HELP_STRING([--with-ruby=PATH],
+ [Ruby interpreter path (default: no)]),
+ [RUBY="$withval"],
+ [RUBY="no"])
+
+if test "x$RUBY" = "xno"; then
+ RUBY=
+else
+ if test "x$RUBY" = "xyes"; then
+ AC_PATH_PROGS(RUBY,
+ [ruby2.1 ruby21 ruby2.0 ruby20 ruby1.9 ruby19 ruby1.9.1 ruby],
+ ruby-not-found)
+ if test "$RUBY" != "ruby-not-found"; then
+ ruby_version="`$RUBY --version`"
+ if echo "$ruby_version" | grep -q -- 'ruby \(1\.9\|2\.\)'; then
+ ac_cv_ruby_available="yes"
+ else
+ AC_MSG_WARN([$RUBY isn't Ruby 1.9 or later ($ruby_version)])
+ fi
+ fi
+ else
+ ruby_not_found_warning_message="$RUBY is not found. Disable HTTP test."
+ case "$RUBY" in
+ /*)
+ AC_CHECK_FILE([$RUBY],
+ [ac_cv_ruby_available="yes"],
+ [AC_MSG_WARN([$ruby_not_found_warning_message])
+ RUBY="$RUBY-not-found"])
+ ;;
+ *)
+ ruby_not_found="$RUBY-not-found"
+ AC_PATH_PROGS(RUBY, "$RUBY", "$ruby_not_found")
+ if test "$RUBY" = "$ruby_not_found"; then
+ AC_MSG_WARN([$ruby_not_found_warning_message])
+ else
+ ac_cv_ruby_available="yes"
+ fi
+ ;;
+ esac
+ fi
+fi
+AC_SUBST(RUBY)
+AM_CONDITIONAL([WITH_RUBY], [test "$ac_cv_ruby_available" = "yes"])
+
+AM_CONDITIONAL([WITH_UNIT_TEST],
+ [test "$cutter_use_cutter" = "yes" -o \
+ "$ac_cv_ruby_available" = "yes"])
+
+AM_CONDITIONAL([WITH_COMMAND_TEST],
+ [test "$ac_cv_ruby_available" = "yes"])
+
+# check Inkscape for generating PNG images
+inkscape_available="no"
+AC_ARG_WITH([inkscape],
+ AS_HELP_STRING([--with-inkscape=PATH],
+ [Inkscape path (default: auto)]),
+ [INKSCAPE="$withval"],
+ [INKSCAPE="yes"])
+
+if test "x$INKSCAPE" = "xno"; then
+ INKSCAPE=
+else
+ if test "x$INKSCAPE" = "xyes"; then
+ AC_PATH_PROGS(INKSCAPE, [inkscape], none)
+ if test "$INKSCAPE" != "none"; then
+ inkscape_available="yes"
+ fi
+ else
+ AC_CHECK_FILE([$INKSCAPE],
+ [inkscape_available="yes"],
+ [AC_MSG_WARN([$INKSCAPE is not found.
+ Disable PNG image generation.])])
+ fi
+fi
+AC_SUBST(INKSCAPE)
+AM_CONDITIONAL([WITH_INKSCAPE], [test "$inkscape_available" = "yes"])
+
+# check Lemon for generating .c and .h files from .y file
+lemon_available="no"
+AC_ARG_WITH([lemon],
+ AS_HELP_STRING([--with-lemon=PATH],
+ [Lemon path (default: auto)]),
+ [LEMON="$withval"],
+ [: ${LEMON:=auto}])
+
+if test "$LEMON" = "no"; then
+ LEMON=
+else
+ if test "$LEMON" = "auto"; then
+ AC_PATH_PROGS(LEMON, [lemon], none)
+ if test "$LEMON" != "none"; then
+ lemon_available="yes"
+ fi
+ elif test "$LEMON" = "yes"; then
+ AC_PATH_PROGS(LEMON, [lemon], none)
+ if test "$LEMON" = "none"; then
+ AC_MSG_WARN([lemon is not found. Disable .y compilation.])
+ else
+ lemon_available="yes"
+ fi
+ else
+ AC_CHECK_FILE([$LEMON],
+ [lemon_available="yes"],
+ [AC_MSG_WARN([$LEMON is not found. Disable .y compilation.])])
+ fi
+fi
+AC_SUBST(LEMON)
+AM_CONDITIONAL([WITH_LEMON], [test "$lemon_available" = "yes"])
+
+# libedit
+AC_ARG_ENABLE(libedit,
+ [AS_HELP_STRING([--disable-libedit],
+ [use libedit for console. [default=auto-detect]])],
+ [enable_libedit="$enableval"],
+ [enable_libedit="auto"])
+if test "x$enable_libedit" != "xno"; then
+ m4_ifdef([PKG_CHECK_MODULES], [
+ PKG_CHECK_MODULES([LIBEDIT], [libedit >= 3.0],
+ [LIBS_SAVE="$LIBS"
+ LDFLAGS_SAVE="$LDFLAGS"
+ LDFLAGS="$LIBEDIT_LIBS $LDFLAGS"
+ AC_SEARCH_LIBS(el_wline, edit,
+ [libedit_available=yes],
+ [libedit_available=no])
+ LIBS="$LIBS_SAVE"
+ LDFLAGS="$LDFLAGS_SAVE"],
+ [libedit_available=no])
+ ],
+ [libedit_available=no])
+ if test "x$libedit_available" = "xyes"; then
+ AC_DEFINE(GRN_WITH_LIBEDIT, [1], [Use libedit with multibyte support.])
+ else
+ if test "x$enable_editline" = "xyes"; then
+ AC_MSG_ERROR("No libedit found")
+ fi
+ fi
+fi
+
+# zlib
+AC_ARG_WITH(zlib,
+ [AS_HELP_STRING([--with-zlib],
+ [use zlib for data compression. [default=no]])],
+ [with_zlib="$withval"],
+ [with_zlib="no"])
+GRN_WITH_ZLIB=no
+if test "x$with_zlib" = "xyes"; then
+ AC_DEFINE(GRN_WITH_ZLIB, [1], [with zlib])
+ AC_SEARCH_LIBS(compress, z, [GRN_WITH_ZLIB=yes],
+ [AC_MSG_ERROR("No libz found")])
+else
+ AC_SEARCH_LIBS(compress, z, [GRN_WITH_ZLIB=yes], [])
+fi
+AC_SUBST(GRN_WITH_ZLIB)
+
+# LZO
+AC_ARG_WITH(lzo,
+ [AS_HELP_STRING([--with-lzo],
+ [use LZO for data compression. [default=no]])],
+ [with_lzo="$withval"],
+ [with_lzo="no"])
+if test "x$with_lzo" = "xyes"; then
+ AC_DEFINE(GRN_WITH_LZO, [1], [with lzo])
+ AC_SEARCH_LIBS(lzo1_compress, lzo2, [], [AC_MSG_ERROR("No liblzo2 found")])
+fi
+
+# MeCab
+# NOTE: MUST be checked last
+AC_ARG_WITH(mecab,
+ [AS_HELP_STRING([--with-mecab],
+ [use MeCab for morphological analysis. [default=yes]])],
+ [with_mecab="$withval"],
+ [with_mecab="yes"])
+AC_MSG_CHECKING([whether enable MeCab])
+AC_MSG_RESULT($with_mecab)
+if test "x$with_mecab" = "xyes"; then
+ # mecab-config
+ AC_ARG_WITH(mecab-config,
+ [AS_HELP_STRING([--with-mecab-config=PATH],
+ [set mecab-config location. [default=auto-detect]])],
+ [if test "$cross_compiling" = "yes"; then
+ MECAB_CONFIG="$withval"
+ else
+ AC_CHECK_FILE("$withval", MECAB_CONFIG="$withval", MECAB_CONFIG=no)
+ fi],
+ [AC_PATH_PROG(MECAB_CONFIG, mecab-config, no)])
+ if test "x$MECAB_CONFIG" = "xno"; then
+ with_mecab="no"
+ else
+ MECAB_CPPFLAGS="-I`$MECAB_CONFIG --inc-dir`"
+ MECAB_LDFLAGS="-L`$MECAB_CONFIG --libs-only-L`"
+ _SAVE_LIBS="$LIBS"
+ _SAVE_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $MECAB_LDFLAGS"
+ AC_SEARCH_LIBS(mecab_new,
+ mecab,
+ [MECAB_LIBS="-lmecab $PTHREAD_LIBS"],
+ [AC_MSG_ERROR("No libmecab found")],
+ $PTHREAD_LIBS)
+ LDFLAGS="$_SAVE_LDFLAGS"
+ LIBS="$_SAVE_LIBS"
+ _SAVE_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $MECAB_CPPFLAGS"
+ AC_CHECK_HEADER(mecab.h, , [AC_MSG_ERROR("No mecab.h found")])
+ AC_CHECK_TYPE([mecab_dictionary_info_t],
+ [AC_DEFINE([HAVE_MECAB_DICTIONARY_INFO_T],
+ [1],
+ [Define to 1 if MeCab has the type `mecab_dictionary_info_t'.])],
+ [],
+ [[#include <mecab.h>]])
+ CPPFLAGS="$_SAVE_CPPFLAGS"
+ AC_SUBST(MECAB_CPPFLAGS)
+ AC_SUBST(MECAB_LDFLAGS)
+ AC_SUBST(MECAB_LIBS)
+ fi
+fi
+if test "x$with_mecab" = "xyes"; then
+ AC_DEFINE(GRN_WITH_MECAB, [1], [use MeCab])
+fi
+AM_CONDITIONAL(WITH_MECAB, test "x$with_mecab" = "xyes")
+
+# KyTea
+REQUIRED_MINIMUM_KYTEA_VERSION=0.4.2
+AC_ARG_WITH(kytea,
+ [AS_HELP_STRING([--with-kytea],
+ [use KyTea for morphological analysis. [default=auto]])],
+ [with_kytea="$withval"],
+ [with_kytea="auto"])
+AC_MSG_CHECKING([whether enable KyTea])
+AC_MSG_RESULT($with_kytea)
+if test "x$with_kytea" != "xno"; then
+ m4_ifdef([PKG_CHECK_MODULES], [
+ PKG_CHECK_MODULES([KYTEA],
+ [kytea >= $REQUIRED_MINIMUM_KYTEA_VERSION],
+ [kytea_exists=yes],
+ [kytea_exists=no])
+ ],
+ [kytea_exists=no])
+ if test "$kytea_exists" = "no" -a "x$with_kytea" = "xyes"; then
+ AC_MSG_ERROR("No KyTea found.")
+ fi
+ with_kytea="$kytea_exists"
+fi
+if test "x$with_kytea" = "xyes"; then
+ AC_DEFINE(GRN_WITH_KYTEA, [1], [use KyTea])
+fi
+AM_CONDITIONAL(WITH_KYTEA, test "x$with_kytea" = "xyes")
+
+# futex check
+AC_ARG_ENABLE(futex,
+ [AS_HELP_STRING([--enable-futex],
+ [use futex. [default=no]])],
+ ,
+ [enable_futex="no"])
+if test "x$enable_futex" != "xno"; then
+ AC_CHECK_HEADERS(linux/futex.h sys/syscall.h, [
+ AC_DEFINE(USE_FUTEX, [1], [use futex])
+ ], [
+ AC_MSG_ERROR("linux/futex.h or sys/syscall.h not found")
+ ])
+fi
+AC_MSG_CHECKING([whether enable futex])
+AC_MSG_RESULT($enable_futex)
+
+# ZeroMQ
+AC_ARG_ENABLE(zeromq,
+ [AS_HELP_STRING([--disable-zeromq],
+ [Disable ZeroMQ used for suggestion. [default=auto-detect]])],
+ [enable_zeromq="$enableval"],
+ [enable_zeromq="auto"])
+if test "x$enable_zeromq" != "xno"; then
+ m4_ifdef([PKG_CHECK_MODULES], [
+ PKG_CHECK_MODULES([LIBZMQ],
+ [libzmq],
+ [zeromq_available=yes],
+ [zeromq_available=no])
+ ],
+ [zeromq_available=no])
+ if test "x$zeromq_available" = "xyes"; then
+ AC_DEFINE(GRN_WITH_ZEROMQ, [1], [Define to 1 if ZeroMQ is available.])
+ else
+ if test "x$enable_zeromq" = "xyes"; then
+ AC_MSG_ERROR("No ZeroMQ found")
+ fi
+ fi
+fi
+
+# libevent
+AC_ARG_WITH(libevent,
+ [AS_HELP_STRING([--without-libevent],
+ [Disable libevent used for suggestion. [default=auto]])],
+ [with_libevent="$withval"],
+ [with_libevent="auto"])
+
+# workaround for bundled groonga in MariaDB.
+if test "x$with_libevent" = "xbundled"; then
+ with_libevent=no
+fi
+
+if test "x$with_libevent" != "xno"; then
+ if test "x$with_libevent" = "xyes" -o "x$with_libevent" = "xauto"; then
+ libevent_cflags=""
+ libevent_ldflags="-levent"
+ else
+ libevent_include_dir="$with_libevent/include"
+ libevent_lib_dir="$with_libevent/lib"
+ if ! test -d "$libevent_include_dir" -a -d "$libevent_lib_dir"; then
+ AC_MSG_ERROR("No libevent found in $with_libevent.")
+ fi
+ libevent_cflags="-I$libevent_include_dir"
+ libevent_ldflags="-L$libevent_lib_dir -levent"
+ fi
+
+ _SAVE_CFLAGS="$CFLAGS"
+ _SAVE_LDFLAGS="$LDFLAGS"
+ _SAVE_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $libevent_cflags"
+ LDFLAGS="$LDFLAGS $libevent_ldflags"
+ AC_SEARCH_LIBS(event_init, event,
+ [libevent_available=yes],
+ [libevent_available=no])
+ CFLAGS="$_SAVE_CFLAGS"
+ LDFLAGS="$_SAVE_LDFLAGS"
+ LIBS="$_SAVE_LIBS"
+ if test "$libevent_available" = "yes"; then
+ AC_DEFINE(GRN_WITH_LIBEVENT, [1], [Define to 1 if libevent is available.])
+ LIBEVENT_CFLAGS="$libevent_cflags"
+ LIBEVENT_LIBS="$libevent_ldflags"
+ else
+ if test "$enable_option_checking" != "no" -a "x$with_libevent" = "xyes"; then
+ AC_MSG_ERROR("No libevent found")
+ fi
+ fi
+fi
+AC_SUBST(LIBEVENT_CFLAGS)
+AC_SUBST(LIBEVENT_LIBS)
+
+# MessagePack
+AC_ARG_WITH(message-pack,
+ [AS_HELP_STRING([--without-message-pack],
+ [Disable MessagePack used for suggestion. [default=/usr]])],
+ [with_message_pack="$withval"],
+ [with_message_pack="/usr"])
+if test "x$with_message_pack" != "xno"; then
+ _SAVE_CFLAGS="$CFLAGS"
+ _SAVE_LDFLAGS="$LDFLAGS"
+ _SAVE_LIBS="$LIBS"
+ CFLAGS="$CFLAGS -I$with_message_pack/include"
+ LDFLAGS="$LDFLAGS -L$with_message_pack/lib"
+ AC_SEARCH_LIBS(msgpack_version, msgpack,
+ [message_pack_available=yes],
+ [message_pack_available=no])
+ CFLAGS="$_SAVE_CFLAGS"
+ LDFLAGS="$_SAVE_LDFLAGS"
+ LIBS="$_SAVE_LIBS"
+ if test "x$message_pack_available" = "xyes"; then
+ AC_DEFINE(GRN_WITH_MESSAGE_PACK, [1],
+ [Define to 1 if MessagePack is available.])
+ MESSAGE_PACK_CFLAGS="-I$with_message_pack/include"
+ MESSAGE_PACK_LIBS="-L$with_message_pack/lib -lmsgpack"
+ else
+ if test "x$with_message_pack" = "xyes"; then
+ AC_MSG_ERROR("No MessagePack found")
+ fi
+ fi
+fi
+AC_SUBST(MESSAGE_PACK_CFLAGS)
+AC_SUBST(MESSAGE_PACK_LIBS)
+
+AM_CONDITIONAL([ENABLE_SUGGEST_LEARNER],
+ [test "$zeromq_available" = "yes" -a \
+ "$libevent_available" = "yes" -a \
+ "$message_pack_available" = "yes"])
+
+# Document
+AC_MSG_CHECKING([whether enable document])
+AC_ARG_ENABLE(document,
+ [AS_HELP_STRING([--enable-document],
+ [enable document generation by Sphinx. [default=auto]])],
+ [enable_document="$enableval"],
+ [enable_document="auto"])
+AC_MSG_RESULT($enable_document)
+
+document_available=no
+document_buildable=no
+have_built_document=no
+if test x"$enable_document" != x"no"; then
+ if test -f "$srcdir/doc/build-stamp"; then
+ document_available=yes
+ have_built_document=yes
+ fi
+
+ if test x"$enable_document" = x"yes"; then
+ AC_PATH_PROG(SPHINX_BUILD, sphinx-build, [])
+ if test -n "$SPHINX_BUILD"; then
+ sphinx_build_version=`"$SPHINX_BUILD" --version`
+ if ! echo "$sphinx_build_version" | grep -q ' 1\.[[23]]'; then
+ AC_MSG_ERROR([
+sphinx-build is old: $sphinx_build_version
+Sphinx 1.2 or later is required.])
+ fi
+ document_available=yes
+ document_buildable=yes
+ else
+ AC_MSG_ERROR([
+No sphinx-build found.
+Install it and try again.
+
+How to install sphinx-build:
+
+For Debian GNU/Linux based system like Ubuntu:
+ % sudo apt-get install -y python-pip
+ % sudo pip install sphinx
+
+For Red Hat based system like CentOS:
+ % sudo yum install -y python-pip
+ % sudo pip install sphinx
+
+For OS X with Homebrew:
+ % brew install pip
+ % export PATH="`brew --prefix gettext`/bin:\$PATH"
+ % pip install sphinx])
+ fi
+ AC_SUBST(SPHINX_BUILD)
+ fi
+fi
+
+# Check for misc.
+AC_ARG_WITH([cutter-source-path],
+ AS_HELP_STRING([--with-cutter-source-path=PATH],
+ [Specify Cutter source path for
+ groonga's release manager.]),
+ [CUTTER_SOURCE_PATH="$withval"])
+case "$CUTTER_SOURCE_PATH" in
+ ""|/*)
+ : # do nothing
+ ;;
+ *)
+ CUTTER_SOURCE_PATH="\$(top_builddir)/${CUTTER_SOURCE_PATH}"
+ ;;
+esac
+AC_SUBST(CUTTER_SOURCE_PATH)
+
+AM_CONDITIONAL([DOCUMENT_AVAILABLE],
+ [test "${document_available}" = "yes"])
+AC_MSG_CHECKING([whether document available])
+AC_MSG_RESULT($document_available)
+
+AM_CONDITIONAL([DOCUMENT_BUILDABLE],
+ [test "${document_buildable}" = "yes"])
+AC_MSG_CHECKING([whether document buildable])
+AC_MSG_RESULT($document_buildable)
+
+AM_CONDITIONAL([HAVE_BUILT_DOCUMENT],
+ [test "${have_built_document}" = "yes"])
+AC_MSG_CHECKING([whether having built document])
+AC_MSG_RESULT($have_built_document)
+
+DOCUMENT_VERSION=groonga_version
+DOCUMENT_VERSION_FULL="$GRN_VERSION"
+AC_SUBST(DOCUMENT_VERSION)
+AC_SUBST(DOCUMENT_VERSION_FULL)
+
+# Munin plugins
+AC_MSG_CHECKING([whether install munin plugins])
+AC_ARG_WITH(munin-plugins,
+ [AS_HELP_STRING([--with-munin-plugins],
+ [install Munin plugins. [default=no]])],
+ [install_munin_plugins="$withval"],
+ [install_munin_plugins="no"])
+AC_MSG_RESULT($install_munin_plugins)
+
+AM_CONDITIONAL([INSTALL_MUNIN_PLUGINS],
+ [test "${install_munin_plugins}" = "yes"])
+
+# platform
+AC_MSG_CHECKING([whether package platform])
+AC_ARG_WITH(package-platform,
+ [AS_HELP_STRING([--with-package-platform=PLATFORM],
+ [install package platform related files. [default=no]
+ (supported package platforms: redhat, fedora)])],
+ [package_platform="$withval"],
+ [package_platform="no"])
+AC_MSG_RESULT($package_platform)
+
+AM_CONDITIONAL([REDHAT_PLATFORM],
+ [test "${package_platform}" = "redhat"])
+AM_CONDITIONAL([FEDORA_PLATFORM],
+ [test "${package_platform}" = "fedora"])
+
+# plugins check
+relative_pluginsdir_base="\$(PACKAGE)/plugins"
+AC_SUBST(relative_pluginsdir_base)
+expanded_relative_pluginsdir_base="${PACKAGE}/plugins"
+AC_SUBST(expanded_relative_pluginsdir_base)
+
+relative_pluginsdir="lib/\$(relative_pluginsdir_base)"
+AC_SUBST(relative_pluginsdir)
+
+pluginsdir="\${libdir}/\$(relative_pluginsdir_base)"
+AC_SUBST(pluginsdir)
+expanded_pluginsdir="\${libdir}/${expanded_relative_pluginsdir_base}"
+AC_SUBST(expanded_pluginsdir)
+
+tokenizers_pluginsdir="\${pluginsdir}/tokenizers"
+AC_SUBST(tokenizers_pluginsdir)
+
+query_expanders_pluginsdir="\${pluginsdir}/query_expanders"
+AC_SUBST(query_expanders_pluginsdir)
+
+suggest_pluginsdir="\${pluginsdir}/suggest"
+AC_SUBST(suggest_pluginsdir)
+
+table_pluginsdir="\${pluginsdir}/table"
+AC_SUBST(table_pluginsdir)
+
+ruby_pluginsdir="\${pluginsdir}/ruby"
+AC_SUBST(ruby_pluginsdir)
+
+token_filter_pluginsdir="\${pluginsdir}/token_filters"
+AC_SUBST(token_filter_pluginsdir)
+
+AC_MSG_CHECKING(for the suffix of plugin shared libraries)
+shrext_cmds=$(./libtool --config | grep '^shrext_cmds=')
+eval $shrext_cmds
+module=yes eval suffix="$shrext_cmds"
+AC_MSG_RESULT($suffix)
+if test -z "$suffix"; then
+ AC_MSG_ERROR([can't detect plugin suffix])
+fi
+AC_DEFINE_UNQUOTED(GRN_PLUGIN_SUFFIX, ["$suffix"], "plugin suffix")
+
+# for query expanders
+GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE="synonyms.tsv"
+AC_DEFINE_UNQUOTED(GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE,
+ ["$GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE"],
+ "The relative synonyms file for TSV query expander")
+GRN_QUERY_EXPANDER_TSV_SYNONYMS_PATH="`
+ eval echo ${sysconfdir}/${PACKAGE}/${GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE}
+`"
+AC_DEFINE_UNQUOTED(GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE,
+ ["$GRN_QUERY_EXPANDER_TSV_SYNONYMS_PATH"],
+ "The default synonyms file for TSV query expander")
+
+# for examples
+examplesdir="\$(pkgdatadir)/examples"
+AC_SUBST(examplesdir)
+
+examples_dictionarydir="\$(examplesdir)/dictionary"
+AC_SUBST(examples_dictionarydir)
+
+# for ruby scripts
+relative_ruby_scriptsdir_base="\$(PACKAGE)/scripts/ruby"
+AC_SUBST(relative_ruby_scriptsdir_base)
+relative_ruby_scriptsdir="lib/\$(relative_ruby_scriptsdir_base)"
+AC_SUBST(relative_ruby_scriptsdir)
+ruby_scriptsdir="\${libdir}/\$(relative_ruby_scriptsdir_base)"
+AC_SUBST(ruby_scriptsdir)
+
+# for document root
+GRN_DEFAULT_DOCUMENT_ROOT_BASE="html/admin"
+GRN_DEFAULT_DOCUMENT_ROOT="\${pkgdatadir}/\${GRN_DEFAULT_DOCUMENT_ROOT_BASE}"
+GRN_EXPANDED_DEFAULT_DOCUMENT_ROOT="\${datadir}/${PACKAGE}/${GRN_DEFAULT_DOCUMENT_ROOT_BASE}"
+GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT="share/\$(PACKAGE)/\$(GRN_DEFAULT_DOCUMENT_ROOT_BASE)"
+AC_SUBST(GRN_DEFAULT_DOCUMENT_ROOT_BASE)
+AC_SUBST(GRN_DEFAULT_DOCUMENT_ROOT)
+AC_SUBST(GRN_EXPANDED_DEFAULT_DOCUMENT_ROOT)
+AC_SUBST(GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT)
+
+# flags for compile groonga
+GRN_CFLAGS=""
+AC_SUBST(GRN_CFLAGS)
+GRN_DEFS=""
+GRN_DEFS="$GRN_DEFS -DGRN_DLL_FILENAME=L\\\"\"\$(GRN_DLL_FILENAME)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_PLUGINS_DIR=\\\"\"\$(pluginsdir)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_RELATIVE_PLUGINS_DIR=\\\"\"\$(relative_pluginsdir)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_RUBY_SCRIPTS_DIR=\\\"\"\$(ruby_scriptsdir)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_RELATIVE_RUBY_SCRIPTS_DIR=\\\"\"\$(relative_ruby_scriptsdir)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_LOG_PATH=\\\"\"\$(grn_log_path)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_DEFAULT_DOCUMENT_ROOT=\\\"\"\$(GRN_DEFAULT_DOCUMENT_ROOT)\"\\\""
+GRN_DEFS="$GRN_DEFS -DGRN_DEFAULT_RELATIVE_DOCUMENT_ROOT=\\\"\"\$(GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT)\"\\\""
+AC_SUBST(GRN_DEFS)
+CFLAGS="$CFLAGS $OPT_CFLAGS "
+LIBS="$LIBS $WINDOWS_LIBS"
+AC_DEFINE_UNQUOTED(CONFIGURE_OPTIONS, "$ac_configure_args", "specified configure options")
+
+# For groonga.org
+AC_ARG_WITH(groonga-org-path,
+ [AS_HELP_STRING([--with-groonga-org-path=PATH],
+ [specify a path of the groonga.org repository to update groonga.org.])],
+ [GROONGA_ORG_PATH="$withval"],
+ [GROONGA_ORG_PATH=""])
+AC_SUBST(GROONGA_ORG_PATH)
+
+# groonga-httpd
+m4_define([nginx_version], m4_include(nginx_version))
+NGINX_VERSION=nginx_version
+AC_SUBST(NGINX_VERSION)
+
+# groonga-httpd binary path
+GROONGA_HTTPD="${ac_pwd}/vendor/nginx-${NGINX_VERSION}/objs/nginx"
+AC_SUBST(GROONGA_HTTPD)
+
+AC_ARG_ENABLE(groonga_httpd,
+ [AS_HELP_STRING([--enable-groonga-httpd],
+ [enable nginx used for groonga-httpd. [default=yes]])],
+ [enable_groonga_httpd="$enableval"],
+ [enable_groonga_httpd="yes"])
+if test "x$enable_groonga_httpd" != "xno"; then
+ enable_groonga_httpd="yes"
+ AC_CONFIG_SUBDIRS([src/httpd])
+else
+ enable_groonga_httpd="no"
+fi
+AM_CONDITIONAL(WITH_GROONGA_HTTPD, test "$enable_groonga_httpd" = "yes")
+
+# mruby
+AC_ARG_ENABLE(mruby,
+ [AS_HELP_STRING([--enable-mruby],
+ [enable mruby. [default=no]])],
+ [enable_mruby="$enableval"],
+ [enable_mruby="no"])
+
+AC_MSG_CHECKING([whether enable mruby])
+if test "x$enable_mruby" != "xyes"; then
+ enable_mruby="no"
+fi
+AC_MSG_RESULT($enable_mruby)
+
+if test "$enable_mruby" = "yes"; then
+ if test ! -f "$srcdir/vendor/mruby/mruby-build.timestamp" -a \
+ "$ac_cv_ruby_available" != "yes"; then
+ AC_MSG_ERROR(--enable-ruby requires --with-ruby)
+ fi
+ AC_DEFINE(GRN_WITH_MRUBY, [1], [Define to 1 if mruby is enabled.])
+ MRUBY_CFLAGS="-I\$(top_srcdir)/vendor/mruby-source/include"
+ MRUBY_LIBS="\$(top_builddir)/vendor/mruby/libmruby.la"
+ MRUBY_LIBS="${MRUBY_LIBS} \$(top_builddir)/vendor/onigmo-source/libonig.la"
+ AC_CONFIG_SUBDIRS([vendor/onigmo])
+else
+ MRUBY_CFLAGS=
+ MRUBY_LIBS=
+fi
+AC_SUBST(MRUBY_CFLAGS)
+AC_SUBST(MRUBY_LIBS)
+AM_CONDITIONAL(WITH_MRUBY, test "$enable_mruby" = "yes")
+
+# This option is used in vendor/onigmo/configure
+AC_ARG_ENABLE(shared-onigmo,
+ [AS_HELP_STRING([--enable-shared-onigmo],
+ [use Onigmo as shared library instead of static library. [default=no]])],
+ [enable_shared_onigmo="$enableval"],
+ [enable_shared_onigmo="no"])
+AM_CONDITIONAL(WITH_SHARED_ONIGMO, test "$enable_shared_onigmo" = "yes")
+
+# PCRE
+GRN_WITH_PCRE=no
+AC_ARG_WITH(pcre,
+ [AS_HELP_STRING([--without-pcre],
+ [use PCRE for groonga-httpd. [default=auto-detect]])],
+ [with_pcre="$witheval"],
+ [with_pcre="auto"])
+if test "x$with_pcre" != "xno"; then
+ m4_ifdef([PKG_CHECK_MODULES], [
+ PKG_CHECK_MODULES([PCRE], [libpcre],
+ [_PKG_CONFIG(PCRE_LIBS_ONLY_L, [libs-only-L], [libpcre])
+ PCRE_LIBS_ONLY_L="$pkg_cv_PCRE_LIBS_ONLY_L"
+ GRN_WITH_PCRE=yes],
+ [GRN_WITH_PCRE=no])
+ ],
+ [GRN_WITH_PCRE=no])
+ if test "x$with_pcre" = "xyes" -a "$GRN_WITH_PCRE" != "yes"; then
+ AC_MSG_ERROR("No PCRE found")
+ fi
+fi
+AC_SUBST(GRN_WITH_PCRE)
+AC_SUBST(PCRE_CFLAGS)
+AC_SUBST(PCRE_LIBS_ONLY_L)
+
+# For package
+AC_ARG_WITH(rsync-path,
+ [AS_HELP_STRING([--with-rsync-path=PATH],
+ [specify rsync path to upload groonga packages.])],
+ [RSYNC_PATH="$withval"],
+ [RSYNC_PATH="packages@packages.groonga.org:public"])
+AC_SUBST(RSYNC_PATH)
+
+AC_ARG_WITH(launchpad-uploader-pgp-key,
+ [AS_HELP_STRING([--with-launchpad-uploader-pgp-key=KEY],
+ [specify PGP key UID to upload Groonga packages to Launchpad.])],
+ [LAUNCHPAD_UPLOADER_PGP_KEY="$withval"],
+ [LAUNCHPAD_UPLOADER_PGP_KEY=""])
+AC_SUBST(LAUNCHPAD_UPLOADER_PGP_KEY)
+
+GPG_UID=m4_include(gpg_uid)
+AC_SUBST(GPG_UID)
+
+pkgsysconfdir="\${sysconfdir}/$PACKAGE_NAME"
+AC_SUBST(pkgsysconfdir)
+
+GRN_CONFIG_PATH="`
+ test \"$prefix\" = NONE && prefix=/usr/local
+ eval echo ${sysconfdir}/groonga/groonga.conf
+`"
+AC_DEFINE_UNQUOTED(GRN_CONFIG_PATH, ["$GRN_CONFIG_PATH"],
+ [Default command line option configuration file.])
+
+GROONGA_HTTPD_DOCUMENT_ROOT="`
+ test \"$prefix\" = NONE && prefix=/usr/local
+ eval eval eval echo ${GRN_EXPANDED_DEFAULT_DOCUMENT_ROOT}
+`"
+AC_SUBST(GROONGA_HTTPD_DOCUMENT_ROOT)
+
+GROONGA_HTTPD_DEFAULT_DATABASE_PATH="`
+ test \"$prefix\" = NONE && prefix=/usr/local
+ eval eval eval echo ${localstatedir}/lib/${PACKAGE}/db/db
+`"
+AC_SUBST(GROONGA_HTTPD_DEFAULT_DATABASE_PATH)
+
+AC_OUTPUT([
+ packages/rpm/centos/groonga.spec
+ packages/rpm/fedora/groonga.spec
+ packages/apt/debian/groonga-keyring.postrm
+ packages/apt/env.sh
+ packages/yum/env.sh
+ groonga.pc
+ config.sh
+ groonga-httpd-conf.sh
+ data/groonga-httpd.conf
+ data/scripts/groonga-httpd-restart
+ ])
+
+echo "$PACKAGE_NAME $PACKAGE_VERSION configuration:"
+echo "-----------------------"
+echo " Compiler: ${CC}"
+echo " CFLAGS: ${CFLAGS}"
+echo " CXXFLAGS: ${CXXFLAGS}"
+echo " Libraries: ${LIBS}"
+echo " Stack size: ${GRN_STACK_SIZE}"
+echo " Document: ${document_available}"
+echo " buildable: ${document_buildable}"
+echo " built: ${have_built_document}"
+echo " Munin plugins: ${install_munin_plugins}"
+echo " Package platform: ${package_platform}"
+echo
+echo "Paths:"
+echo " Install path prefix: ${prefix}"
+echo " Configuration file: ${GRN_CONFIG_PATH}"
+echo
+
+echo "Tokenizers:"
+echo " MeCab: $with_mecab"
+if test "x$with_mecab" = "xyes"; then
+ echo " CPPFLAGS: $MECAB_CPPFLAGS"
+ echo " LDFLAGS: $MECAB_LDFLAGS"
+ echo " LIBS: $MECAB_LIBS"
+fi
+echo " KyTea: $with_kytea"
+if test "x$with_kytea" = "xyes"; then
+ echo " CFLAGS: $KYTEA_CFLAGS"
+ echo " LIBS: $KYTEA_LIBS"
+fi
+echo
+
+echo "Libraries:"
+echo " ZeroMQ: $zeromq_available"
+if test "x$zeromq_available" = "xyes"; then
+ echo " CFLAGS: ${LIBZMQ_CFLAGS}"
+ echo " LIBS: ${LIBZMQ_LIBS}"
+fi
+echo " libevent: $libevent_available"
+if test "x$libevent_available" = "xyes"; then
+ echo " CFLAGS: ${LIBEVENT_CFLAGS}"
+ echo " LIBS: ${LIBEVENT_LIBS}"
+fi
+echo " MessagePack: $message_pack_available"
+if test "x$message_pack_available" = "xyes"; then
+ echo " CFLAGS: ${MESSAGE_PACK_CFLAGS}"
+ echo " LIBS: ${MESSAGE_PACK_LIBS}"
+fi
+echo " mruby: $enable_mruby"
+echo
+
+echo "groonga-httpd:"
+echo " enable: $enable_groonga_httpd"
+if test "$enable_groonga_httpd" = "yes"; then
+ echo " default database path: $GROONGA_HTTPD_DEFAULT_DATABASE_PATH"
+ echo " PCRE: $WITH_PCRE"
+ if test "$WITH_PCRE" = "yes"; then
+ echo " CFLAGS: $PCRE_CFLAGS"
+ echo " LIBS only -L: $PCRE_LIBS_ONLY_L"
+ fi
+fi
+echo
+
+echo "Tools:"
+echo " Sphinx: ${SPHINX_BUILD}"
+echo " lemon: ${LEMON}"
+echo " Ruby: ${RUBY}"
+echo " Cutter: ${CUTTER}"
+echo
+
+echo "For packages:"
+echo " rsync path: ${RSYNC_PATH}"
+echo " Launchpad PGP key: ${LAUNCHPAD_UPLOADER_PGP_KEY}"
+echo " GPG UID: ${GPG_UID}"
+echo
+
+echo "Now type 'make' to build $PACKAGE_NAME $PACKAGE_VERSION!"
diff --git a/storage/mroonga/vendor/groonga/gpg_uid b/storage/mroonga/vendor/groonga/gpg_uid
new file mode 100644
index 00000000000..7c1a800ba92
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/gpg_uid
@@ -0,0 +1 @@
+45499429
diff --git a/storage/mroonga/vendor/groonga/groonga-httpd-conf.sh.in b/storage/mroonga/vendor/groonga/groonga-httpd-conf.sh.in
new file mode 100644
index 00000000000..22a90d82430
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/groonga-httpd-conf.sh.in
@@ -0,0 +1,26 @@
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+sbindir="@sbindir@"
+libdir="@libdir@"
+sysconfdir="@sysconfdir@"
+pkgsysconfdir="@pkgsysconfdir@"
+localstatedir="@localstatedir@"
+
+SED="@SED@"
+
+export GROONGA_HTTPD_MODULE_PATH="@abs_top_srcdir@/src/httpd/nginx-module"
+export GROONGA_HTTPD_IN_TREE_INCLUDE_PATH="@abs_top_srcdir@/include"
+export GROONGA_HTTPD_IN_TREE_LINK_PATH="@abs_top_builddir@/lib/.libs"
+export GROONGA_HTTPD_PREFIX="${pkgsysconfdir}/httpd"
+export GROONGA_HTTPD_BIN_PATH="${sbindir}/groonga-httpd"
+export GROONGA_HTTPD_CONF_PATH="${pkgsysconfdir}/httpd/groonga-httpd.conf"
+export GROONGA_HTTPD_ERROR_LOG_PATH="${localstatedir}/log/groonga/httpd/error.log"
+export GROONGA_HTTPD_HTTP_LOG_PATH="${localstatedir}/log/groonga/httpd/access.log"
+export GROONGA_HTTPD_GROONGA_LOG_PATH="${localstatedir}/log/groonga/httpd/groonga.log"
+export GROONGA_HTTPD_GROONGA_QUERY_LOG_PATH="${localstatedir}/log/groonga/httpd/groonga-query.log"
+export GROONGA_HTTPD_PID_PATH="${localstatedir}/run/groonga/groonga-httpd.pid"
+export GROONGA_HTTPD_DEBUG="@grn_debug@"
+export GROONGA_HTTPD_WITH_PCRE="@GRN_WITH_PCRE@"
+export GROONGA_HTTPD_PCRE_CFLAGS="@PCRE_CFLAGS@"
+export GROONGA_HTTPD_PCRE_LIBS_ONLY_L="@PCRE_LIBS_ONLY_L@"
+export GROONGA_HTTPD_WITH_ZLIB="@GRN_WITH_ZLIB@"
diff --git a/storage/mroonga/vendor/groonga/groonga.pc.in b/storage/mroonga/vendor/groonga/groonga.pc.in
new file mode 100644
index 00000000000..869285d48e6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/groonga.pc.in
@@ -0,0 +1,20 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+sbindir=@sbindir@
+libdir=@libdir@
+includedir=@includedir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+document_root=@GRN_EXPANDED_DEFAULT_DOCUMENT_ROOT@
+pluginsdir=@expanded_pluginsdir@
+groonga=${bindir}/groonga@EXEEXT@
+groonga_httpd=${sbindir}/groonga-httpd@EXEEXT@
+groonga_suggest_create_dataset=${bindir}/groonga-suggest-create-dataset@EXEEXT@
+groonga_version=@GRN_VERSION@
+
+Name: Groonga
+Description: An Embeddable Fulltext Search Engine
+Version: @VERSION@
+Libs: -L${libdir} -lgroonga
+Cflags: -I${includedir}/groonga
diff --git a/storage/mroonga/vendor/groonga/include/CMakeLists.txt b/storage/mroonga/vendor/groonga/include/CMakeLists.txt
new file mode 100644
index 00000000000..96e22474cbf
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright(C) 2012 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+if(NOT MRN_GROONGA_BUNDLED)
+ install(FILES groonga.h DESTINATION "${GRN_INCLUDE_DIR}")
+ install(DIRECTORY groonga DESTINATION "${GRN_INCLUDE_DIR}"
+ FILES_MATCHING PATTERN "*.h")
+endif()
diff --git a/storage/mroonga/vendor/groonga/include/Makefile.am b/storage/mroonga/vendor/groonga/include/Makefile.am
new file mode 100644
index 00000000000..19ced0d2d6c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/Makefile.am
@@ -0,0 +1,6 @@
+SUBDIRS = groonga
+
+pkginclude_HEADERS = groonga.h
+
+EXTRA_DIST = \
+ CMakeLists.txt
diff --git a/storage/mroonga/vendor/groonga/include/groonga.h b/storage/mroonga/vendor/groonga/include/groonga.h
new file mode 100644
index 00000000000..d1cf1e24a56
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga.h
@@ -0,0 +1,2106 @@
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GROONGA_H
+#define GROONGA_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdarg.h>
+
+#ifndef GRN_API
+#if defined(_WIN32) || defined(_WIN64)
+#define GRN_API __declspec(dllimport)
+#else
+#define GRN_API
+#endif /* defined(_WIN32) || defined(_WIN64) */
+#endif /* GRN_API */
+
+typedef unsigned int grn_id;
+typedef unsigned char grn_bool;
+
+#define GRN_ID_NIL (0x00)
+#define GRN_ID_MAX (0x3fffffff)
+
+#define GRN_TRUE (1)
+#define GRN_FALSE (0)
+
+typedef enum {
+ GRN_SUCCESS = 0,
+ GRN_END_OF_DATA = 1,
+ GRN_UNKNOWN_ERROR = -1,
+ GRN_OPERATION_NOT_PERMITTED = -2,
+ GRN_NO_SUCH_FILE_OR_DIRECTORY = -3,
+ GRN_NO_SUCH_PROCESS = -4,
+ GRN_INTERRUPTED_FUNCTION_CALL = -5,
+ GRN_INPUT_OUTPUT_ERROR = -6,
+ GRN_NO_SUCH_DEVICE_OR_ADDRESS = -7,
+ GRN_ARG_LIST_TOO_LONG = -8,
+ GRN_EXEC_FORMAT_ERROR = -9,
+ GRN_BAD_FILE_DESCRIPTOR = -10,
+ GRN_NO_CHILD_PROCESSES = -11,
+ GRN_RESOURCE_TEMPORARILY_UNAVAILABLE = -12,
+ GRN_NOT_ENOUGH_SPACE = -13,
+ GRN_PERMISSION_DENIED = -14,
+ GRN_BAD_ADDRESS = -15,
+ GRN_RESOURCE_BUSY = -16,
+ GRN_FILE_EXISTS = -17,
+ GRN_IMPROPER_LINK = -18,
+ GRN_NO_SUCH_DEVICE = -19,
+ GRN_NOT_A_DIRECTORY = -20,
+ GRN_IS_A_DIRECTORY = -21,
+ GRN_INVALID_ARGUMENT = -22,
+ GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM = -23,
+ GRN_TOO_MANY_OPEN_FILES = -24,
+ GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION = -25,
+ GRN_FILE_TOO_LARGE = -26,
+ GRN_NO_SPACE_LEFT_ON_DEVICE = -27,
+ GRN_INVALID_SEEK = -28,
+ GRN_READ_ONLY_FILE_SYSTEM = -29,
+ GRN_TOO_MANY_LINKS = -30,
+ GRN_BROKEN_PIPE = -31,
+ GRN_DOMAIN_ERROR = -32,
+ GRN_RESULT_TOO_LARGE = -33,
+ GRN_RESOURCE_DEADLOCK_AVOIDED = -34,
+ GRN_NO_MEMORY_AVAILABLE = -35,
+ GRN_FILENAME_TOO_LONG = -36,
+ GRN_NO_LOCKS_AVAILABLE = -37,
+ GRN_FUNCTION_NOT_IMPLEMENTED = -38,
+ GRN_DIRECTORY_NOT_EMPTY = -39,
+ GRN_ILLEGAL_BYTE_SEQUENCE = -40,
+ GRN_SOCKET_NOT_INITIALIZED = -41,
+ GRN_OPERATION_WOULD_BLOCK = -42,
+ GRN_ADDRESS_IS_NOT_AVAILABLE = -43,
+ GRN_NETWORK_IS_DOWN = -44,
+ GRN_NO_BUFFER = -45,
+ GRN_SOCKET_IS_ALREADY_CONNECTED = -46,
+ GRN_SOCKET_IS_NOT_CONNECTED = -47,
+ GRN_SOCKET_IS_ALREADY_SHUTDOWNED = -48,
+ GRN_OPERATION_TIMEOUT = -49,
+ GRN_CONNECTION_REFUSED = -50,
+ GRN_RANGE_ERROR = -51,
+ GRN_TOKENIZER_ERROR = -52,
+ GRN_FILE_CORRUPT = -53,
+ GRN_INVALID_FORMAT = -54,
+ GRN_OBJECT_CORRUPT = -55,
+ GRN_TOO_MANY_SYMBOLIC_LINKS = -56,
+ GRN_NOT_SOCKET = -57,
+ GRN_OPERATION_NOT_SUPPORTED = -58,
+ GRN_ADDRESS_IS_IN_USE = -59,
+ GRN_ZLIB_ERROR = -60,
+ GRN_LZO_ERROR = -61,
+ GRN_STACK_OVER_FLOW = -62,
+ GRN_SYNTAX_ERROR = -63,
+ GRN_RETRY_MAX = -64,
+ GRN_INCOMPATIBLE_FILE_FORMAT = -65,
+ GRN_UPDATE_NOT_ALLOWED = -66,
+ GRN_TOO_SMALL_OFFSET = -67,
+ GRN_TOO_LARGE_OFFSET = -68,
+ GRN_TOO_SMALL_LIMIT = -69,
+ GRN_CAS_ERROR = -70,
+ GRN_UNSUPPORTED_COMMAND_VERSION = -71,
+ GRN_NORMALIZER_ERROR = -72,
+ GRN_TOKEN_FILTER_ERROR = -73,
+} grn_rc;
+
+GRN_API grn_rc grn_init(void);
+GRN_API grn_rc grn_fin(void);
+
+typedef enum {
+ GRN_ENC_DEFAULT = 0,
+ GRN_ENC_NONE,
+ GRN_ENC_EUC_JP,
+ GRN_ENC_UTF8,
+ GRN_ENC_SJIS,
+ GRN_ENC_LATIN1,
+ GRN_ENC_KOI8R
+} grn_encoding;
+
+typedef enum {
+ GRN_COMMAND_VERSION_DEFAULT = 0,
+ GRN_COMMAND_VERSION_1,
+ GRN_COMMAND_VERSION_2
+} grn_command_version;
+
+#define GRN_COMMAND_VERSION_MIN GRN_COMMAND_VERSION_1
+#define GRN_COMMAND_VERSION_STABLE GRN_COMMAND_VERSION_1
+#define GRN_COMMAND_VERSION_MAX GRN_COMMAND_VERSION_2
+
+typedef enum {
+ GRN_LOG_NONE = 0,
+ GRN_LOG_EMERG,
+ GRN_LOG_ALERT,
+ GRN_LOG_CRIT,
+ GRN_LOG_ERROR,
+ GRN_LOG_WARNING,
+ GRN_LOG_NOTICE,
+ GRN_LOG_INFO,
+ GRN_LOG_DEBUG,
+ GRN_LOG_DUMP
+} grn_log_level;
+
+/* query log flags */
+#define GRN_QUERY_LOG_NONE (0x00)
+#define GRN_QUERY_LOG_COMMAND (0x01<<0)
+#define GRN_QUERY_LOG_RESULT_CODE (0x01<<1)
+#define GRN_QUERY_LOG_DESTINATION (0x01<<2)
+#define GRN_QUERY_LOG_CACHE (0x01<<3)
+#define GRN_QUERY_LOG_SIZE (0x01<<4)
+#define GRN_QUERY_LOG_SCORE (0x01<<5)
+#define GRN_QUERY_LOG_ALL\
+ (GRN_QUERY_LOG_COMMAND |\
+ GRN_QUERY_LOG_RESULT_CODE |\
+ GRN_QUERY_LOG_DESTINATION |\
+ GRN_QUERY_LOG_CACHE |\
+ GRN_QUERY_LOG_SIZE |\
+ GRN_QUERY_LOG_SCORE)
+#define GRN_QUERY_LOG_DEFAULT GRN_QUERY_LOG_ALL
+
+typedef enum {
+ GRN_CONTENT_NONE = 0,
+ GRN_CONTENT_TSV,
+ GRN_CONTENT_JSON,
+ GRN_CONTENT_XML,
+ GRN_CONTENT_MSGPACK
+} grn_content_type;
+
+typedef struct _grn_obj grn_obj;
+typedef struct _grn_ctx grn_ctx;
+
+#define GRN_CTX_MSGSIZE (0x80)
+#define GRN_CTX_FIN (0xff)
+
+typedef union {
+ int int_value;
+ grn_id id;
+ void *ptr;
+} grn_user_data;
+
+typedef grn_obj *grn_proc_func(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data);
+
+struct _grn_ctx {
+ grn_rc rc;
+ int flags;
+ grn_encoding encoding;
+ unsigned char ntrace;
+ unsigned char errlvl;
+ unsigned char stat;
+ unsigned int seqno;
+ unsigned int subno;
+ unsigned int seqno2;
+ unsigned int errline;
+ grn_user_data user_data;
+ grn_ctx *prev;
+ grn_ctx *next;
+ const char *errfile;
+ const char *errfunc;
+ struct _grn_ctx_impl *impl;
+ void *trace[16];
+ char errbuf[GRN_CTX_MSGSIZE];
+};
+
+#define GRN_CTX_USER_DATA(ctx) (&((ctx)->user_data))
+
+/* Deprecated since 4.0.3. Don't use it. */
+#define GRN_CTX_USE_QL (0x03)
+/* Deprecated since 4.0.3. Don't use it. */
+#define GRN_CTX_BATCH_MODE (0x04)
+#define GRN_CTX_PER_DB (0x08)
+
+GRN_API grn_rc grn_ctx_init(grn_ctx *ctx, int flags);
+GRN_API grn_rc grn_ctx_fin(grn_ctx *ctx);
+GRN_API grn_ctx *grn_ctx_open(int flags);
+GRN_API grn_rc grn_ctx_close(grn_ctx *ctx);
+GRN_API grn_rc grn_ctx_set_finalizer(grn_ctx *ctx, grn_proc_func *func);
+
+GRN_API grn_encoding grn_get_default_encoding(void);
+GRN_API grn_rc grn_set_default_encoding(grn_encoding encoding);
+
+#define GRN_CTX_GET_ENCODING(ctx) ((ctx)->encoding)
+#define GRN_CTX_SET_ENCODING(ctx,enc) \
+ ((ctx)->encoding = (enc == GRN_ENC_DEFAULT) ? grn_get_default_encoding() : enc)
+
+GRN_API const char *grn_get_version(void);
+GRN_API const char *grn_get_package(void);
+
+GRN_API grn_command_version grn_get_default_command_version(void);
+GRN_API grn_rc grn_set_default_command_version(grn_command_version version);
+GRN_API grn_command_version grn_ctx_get_command_version(grn_ctx *ctx);
+GRN_API grn_rc grn_ctx_set_command_version(grn_ctx *ctx, grn_command_version version);
+GRN_API long long int grn_ctx_get_match_escalation_threshold(grn_ctx *ctx);
+GRN_API grn_rc grn_ctx_set_match_escalation_threshold(grn_ctx *ctx, long long int threshold);
+GRN_API long long int grn_get_default_match_escalation_threshold(void);
+GRN_API grn_rc grn_set_default_match_escalation_threshold(long long int threshold);
+
+GRN_API int grn_get_lock_timeout(void);
+GRN_API grn_rc grn_set_lock_timeout(int timeout);
+
+/* cache */
+#define GRN_CACHE_DEFAULT_MAX_N_ENTRIES 100
+typedef struct _grn_cache grn_cache;
+
+GRN_API grn_cache *grn_cache_open(grn_ctx *ctx);
+GRN_API grn_rc grn_cache_close(grn_ctx *ctx, grn_cache *cache);
+
+GRN_API grn_rc grn_cache_current_set(grn_ctx *ctx, grn_cache *cache);
+GRN_API grn_cache *grn_cache_current_get(grn_ctx *ctx);
+
+GRN_API grn_rc grn_cache_set_max_n_entries(grn_ctx *ctx,
+ grn_cache *cache,
+ unsigned int n);
+GRN_API unsigned int grn_cache_get_max_n_entries(grn_ctx *ctx,
+ grn_cache *cache);
+
+/* grn_encoding */
+
+GRN_API const char *grn_encoding_to_string(grn_encoding encoding);
+GRN_API grn_encoding grn_encoding_parse(const char *name);
+
+/* obj */
+
+typedef unsigned short int grn_obj_flags;
+
+#define GRN_OBJ_TABLE_TYPE_MASK (0x07)
+#define GRN_OBJ_TABLE_HASH_KEY (0x00)
+#define GRN_OBJ_TABLE_PAT_KEY (0x01)
+#define GRN_OBJ_TABLE_DAT_KEY (0x02)
+#define GRN_OBJ_TABLE_NO_KEY (0x03)
+
+#define GRN_OBJ_KEY_MASK (0x07<<3)
+#define GRN_OBJ_KEY_UINT (0x00<<3)
+#define GRN_OBJ_KEY_INT (0x01<<3)
+#define GRN_OBJ_KEY_FLOAT (0x02<<3)
+#define GRN_OBJ_KEY_GEO_POINT (0x03<<3)
+
+#define GRN_OBJ_KEY_WITH_SIS (0x01<<6)
+#define GRN_OBJ_KEY_NORMALIZE (0x01<<7)
+
+#define GRN_OBJ_COLUMN_TYPE_MASK (0x07)
+#define GRN_OBJ_COLUMN_SCALAR (0x00)
+#define GRN_OBJ_COLUMN_VECTOR (0x01)
+#define GRN_OBJ_COLUMN_INDEX (0x02)
+
+#define GRN_OBJ_COMPRESS_MASK (0x07<<4)
+#define GRN_OBJ_COMPRESS_NONE (0x00<<4)
+#define GRN_OBJ_COMPRESS_ZLIB (0x01<<4)
+#define GRN_OBJ_COMPRESS_LZO (0x02<<4)
+
+#define GRN_OBJ_WITH_SECTION (0x01<<7)
+#define GRN_OBJ_WITH_WEIGHT (0x01<<8)
+#define GRN_OBJ_WITH_POSITION (0x01<<9)
+#define GRN_OBJ_RING_BUFFER (0x01<<10)
+
+#define GRN_OBJ_UNIT_MASK (0x0f<<8)
+#define GRN_OBJ_UNIT_DOCUMENT_NONE (0x00<<8)
+#define GRN_OBJ_UNIT_DOCUMENT_SECTION (0x01<<8)
+#define GRN_OBJ_UNIT_DOCUMENT_POSITION (0x02<<8)
+#define GRN_OBJ_UNIT_SECTION_NONE (0x03<<8)
+#define GRN_OBJ_UNIT_SECTION_POSITION (0x04<<8)
+#define GRN_OBJ_UNIT_POSITION_NONE (0x05<<8)
+#define GRN_OBJ_UNIT_USERDEF_DOCUMENT (0x06<<8)
+#define GRN_OBJ_UNIT_USERDEF_SECTION (0x07<<8)
+#define GRN_OBJ_UNIT_USERDEF_POSITION (0x08<<8)
+
+#define GRN_OBJ_NO_SUBREC (0x00<<13)
+#define GRN_OBJ_WITH_SUBREC (0x01<<13)
+
+#define GRN_OBJ_KEY_VAR_SIZE (0x01<<14)
+
+#define GRN_OBJ_TEMPORARY (0x00<<15)
+#define GRN_OBJ_PERSISTENT (0x01<<15)
+
+/* obj types */
+
+#define GRN_VOID (0x00)
+#define GRN_BULK (0x02)
+#define GRN_PTR (0x03)
+#define GRN_UVECTOR (0x04) /* vector of grn_id */
+#define GRN_PVECTOR (0x05) /* vector of grn_obj* */
+#define GRN_VECTOR (0x06) /* vector of arbitrary data */
+#define GRN_MSG (0x07)
+#define GRN_QUERY (0x08)
+#define GRN_ACCESSOR (0x09)
+#define GRN_SNIP (0x0b)
+#define GRN_PATSNIP (0x0c)
+#define GRN_STRING (0x0d)
+#define GRN_CURSOR_TABLE_HASH_KEY (0x10)
+#define GRN_CURSOR_TABLE_PAT_KEY (0x11)
+#define GRN_CURSOR_TABLE_DAT_KEY (0x12)
+#define GRN_CURSOR_TABLE_NO_KEY (0x13)
+#define GRN_CURSOR_COLUMN_INDEX (0x18)
+#define GRN_CURSOR_COLUMN_GEO_INDEX (0x1a)
+#define GRN_TYPE (0x20)
+#define GRN_PROC (0x21)
+#define GRN_EXPR (0x22)
+#define GRN_TABLE_HASH_KEY (0x30)
+#define GRN_TABLE_PAT_KEY (0x31)
+#define GRN_TABLE_DAT_KEY (0x32)
+#define GRN_TABLE_NO_KEY (0x33)
+#define GRN_DB (0x37)
+#define GRN_COLUMN_FIX_SIZE (0x40)
+#define GRN_COLUMN_VAR_SIZE (0x41)
+#define GRN_COLUMN_INDEX (0x48)
+
+typedef struct _grn_section grn_section;
+typedef struct _grn_obj_header grn_obj_header;
+
+struct _grn_section {
+ unsigned int offset;
+ unsigned int length;
+ unsigned int weight;
+ grn_id domain;
+};
+
+struct _grn_obj_header {
+ unsigned char type;
+ unsigned char impl_flags;
+ grn_obj_flags flags;
+ grn_id domain;
+};
+
+struct _grn_obj {
+ grn_obj_header header;
+ union {
+ struct {
+ char *head;
+ char *curr;
+ char *tail;
+ } b;
+ struct {
+ grn_obj *body;
+ grn_section *sections;
+ int n_sections;
+ } v;
+ } u;
+};
+
+#define GRN_OBJ_REFER (0x01<<0)
+#define GRN_OBJ_OUTPLACE (0x01<<1)
+
+#define GRN_OBJ_INIT(obj,obj_type,obj_flags,obj_domain) do { \
+ (obj)->header.type = (obj_type);\
+ (obj)->header.impl_flags = (obj_flags);\
+ (obj)->header.flags = 0;\
+ (obj)->header.domain = (obj_domain);\
+ (obj)->u.b.head = NULL;\
+ (obj)->u.b.curr = NULL;\
+ (obj)->u.b.tail = NULL;\
+} while (0)
+
+#define GRN_OBJ_FIN(ctx,obj) (grn_obj_close((ctx), (obj)))
+
+typedef struct _grn_db_create_optarg grn_db_create_optarg;
+
+struct _grn_db_create_optarg {
+ char **builtin_type_names;
+ int n_builtin_type_names;
+};
+
+GRN_API grn_obj *grn_db_create(grn_ctx *ctx, const char *path, grn_db_create_optarg *optarg);
+
+#define GRN_DB_OPEN_OR_CREATE(ctx,path,optarg,db) \
+ (((db) = grn_db_open((ctx), (path))) || (db = grn_db_create((ctx), (path), (optarg))))
+
+GRN_API grn_obj *grn_db_open(grn_ctx *ctx, const char *path);
+GRN_API void grn_db_touch(grn_ctx *ctx, grn_obj *db);
+
+GRN_API grn_rc grn_ctx_use(grn_ctx *ctx, grn_obj *db);
+GRN_API grn_obj *grn_ctx_db(grn_ctx *ctx);
+GRN_API grn_obj *grn_ctx_get(grn_ctx *ctx, const char *name, int name_size);
+
+typedef enum {
+ GRN_DB_VOID = 0,
+ GRN_DB_DB,
+ GRN_DB_OBJECT,
+ GRN_DB_BOOL,
+ GRN_DB_INT8,
+ GRN_DB_UINT8,
+ GRN_DB_INT16,
+ GRN_DB_UINT16,
+ GRN_DB_INT32,
+ GRN_DB_UINT32,
+ GRN_DB_INT64,
+ GRN_DB_UINT64,
+ GRN_DB_FLOAT,
+ GRN_DB_TIME,
+ GRN_DB_SHORT_TEXT,
+ GRN_DB_TEXT,
+ GRN_DB_LONG_TEXT,
+ GRN_DB_TOKYO_GEO_POINT,
+ GRN_DB_WGS84_GEO_POINT
+} grn_builtin_type;
+
+typedef enum {
+ GRN_DB_MECAB = 64,
+ GRN_DB_DELIMIT,
+ GRN_DB_UNIGRAM,
+ GRN_DB_BIGRAM,
+ GRN_DB_TRIGRAM
+} grn_builtin_tokenizer;
+
+GRN_API grn_obj *grn_ctx_at(grn_ctx *ctx, grn_id id);
+
+GRN_API grn_obj *grn_type_create(grn_ctx *ctx, const char *name, unsigned int name_size,
+ grn_obj_flags flags, unsigned int size);
+
+GRN_API grn_rc grn_plugin_register(grn_ctx *ctx, const char *name);
+GRN_API grn_rc grn_plugin_register_by_path(grn_ctx *ctx, const char *path);
+GRN_API const char *grn_plugin_get_system_plugins_dir(void);
+GRN_API const char *grn_plugin_get_suffix(void);
+
+typedef struct {
+ const char *name;
+ unsigned int name_size;
+ grn_obj value;
+} grn_expr_var;
+
+typedef grn_rc (*grn_plugin_func)(grn_ctx *ctx);
+
+typedef enum {
+ GRN_PROC_INVALID = 0,
+ GRN_PROC_TOKENIZER,
+ GRN_PROC_COMMAND,
+ GRN_PROC_FUNCTION,
+ GRN_PROC_HOOK,
+ GRN_PROC_NORMALIZER,
+ GRN_PROC_TOKEN_FILTER
+} grn_proc_type;
+
+GRN_API grn_obj *grn_proc_create(grn_ctx *ctx,
+ const char *name, int name_size, grn_proc_type type,
+ grn_proc_func *init, grn_proc_func *next, grn_proc_func *fin,
+ unsigned int nvars, grn_expr_var *vars);
+GRN_API grn_obj *grn_proc_get_info(grn_ctx *ctx, grn_user_data *user_data,
+ grn_expr_var **vars, unsigned int *nvars, grn_obj **caller);
+GRN_API grn_proc_type grn_proc_get_type(grn_ctx *ctx, grn_obj *proc);
+
+/*-------------------------------------------------------------
+ * API for table
+ */
+
+#define GRN_TABLE_MAX_KEY_SIZE (0x1000)
+
+GRN_API grn_obj *grn_table_create(grn_ctx *ctx,
+ const char *name, unsigned int name_size,
+ const char *path, grn_obj_flags flags,
+ grn_obj *key_type, grn_obj *value_type);
+
+#define GRN_TABLE_OPEN_OR_CREATE(ctx,name,name_size,path,flags,key_type,value_type,table) \
+ (((table) = grn_ctx_get((ctx), (name), (name_size))) ||\
+ ((table) = grn_table_create((ctx), (name), (name_size), (path), (flags), (key_type), (value_type))))
+
+/* TODO: int *added -> grn_bool *added */
+GRN_API grn_id grn_table_add(grn_ctx *ctx, grn_obj *table,
+ const void *key, unsigned int key_size, int *added);
+GRN_API grn_id grn_table_get(grn_ctx *ctx, grn_obj *table,
+ const void *key, unsigned int key_size);
+GRN_API grn_id grn_table_at(grn_ctx *ctx, grn_obj *table, grn_id id);
+GRN_API grn_id grn_table_lcp_search(grn_ctx *ctx, grn_obj *table,
+ const void *key, unsigned int key_size);
+GRN_API int grn_table_get_key(grn_ctx *ctx, grn_obj *table,
+ grn_id id, void *keybuf, int buf_size);
+GRN_API grn_rc grn_table_delete(grn_ctx *ctx, grn_obj *table,
+ const void *key, unsigned int key_size);
+GRN_API grn_rc grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id);
+GRN_API grn_rc grn_table_update_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
+ const void *dest_key, unsigned int dest_key_size);
+GRN_API grn_rc grn_table_update(grn_ctx *ctx, grn_obj *table,
+ const void *src_key, unsigned int src_key_size,
+ const void *dest_key, unsigned int dest_key_size);
+GRN_API grn_rc grn_table_truncate(grn_ctx *ctx, grn_obj *table);
+
+typedef grn_obj grn_table_cursor;
+
+#define GRN_CURSOR_ASCENDING (0x00<<0)
+#define GRN_CURSOR_DESCENDING (0x01<<0)
+#define GRN_CURSOR_GE (0x00<<1)
+#define GRN_CURSOR_GT (0x01<<1)
+#define GRN_CURSOR_LE (0x00<<2)
+#define GRN_CURSOR_LT (0x01<<2)
+#define GRN_CURSOR_BY_KEY (0x00<<3)
+#define GRN_CURSOR_BY_ID (0x01<<3)
+#define GRN_CURSOR_PREFIX (0x01<<4)
+#define GRN_CURSOR_SIZE_BY_BIT (0x01<<5)
+#define GRN_CURSOR_RK (0x01<<6)
+
+GRN_API grn_table_cursor *grn_table_cursor_open(grn_ctx *ctx, grn_obj *table,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags);
+GRN_API grn_rc grn_table_cursor_close(grn_ctx *ctx, grn_table_cursor *tc);
+GRN_API grn_id grn_table_cursor_next(grn_ctx *ctx, grn_table_cursor *tc);
+GRN_API int grn_table_cursor_get_key(grn_ctx *ctx, grn_table_cursor *tc, void **key);
+GRN_API int grn_table_cursor_get_value(grn_ctx *ctx, grn_table_cursor *tc, void **value);
+GRN_API grn_rc grn_table_cursor_set_value(grn_ctx *ctx, grn_table_cursor *tc,
+ const void *value, int flags);
+GRN_API grn_rc grn_table_cursor_delete(grn_ctx *ctx, grn_table_cursor *tc);
+GRN_API grn_obj *grn_table_cursor_table(grn_ctx *ctx, grn_table_cursor *tc);
+
+typedef struct {
+ grn_id rid;
+ grn_id sid;
+ unsigned int pos;
+ unsigned int tf;
+ unsigned int weight;
+ unsigned int rest;
+} grn_posting;
+
+GRN_API grn_obj *grn_index_cursor_open(grn_ctx *ctx, grn_table_cursor *tc, grn_obj *index,
+ grn_id rid_min, grn_id rid_max, int flags);
+GRN_API grn_posting *grn_index_cursor_next(grn_ctx *ctx, grn_obj *ic, grn_id *tid);
+
+#define GRN_TABLE_EACH(ctx,table,head,tail,id,key,key_size,value,block) do {\
+ (ctx)->errlvl = GRN_LOG_NOTICE;\
+ (ctx)->rc = GRN_SUCCESS;\
+ if ((ctx)->seqno & 1) {\
+ (ctx)->subno++;\
+ } else {\
+ (ctx)->seqno++;\
+ }\
+ if (table) {\
+ switch ((table)->header.type) {\
+ case GRN_TABLE_PAT_KEY :\
+ GRN_PAT_EACH((ctx), (grn_pat *)(table), (id), (key), (key_size), (value), block);\
+ break;\
+ case GRN_TABLE_DAT_KEY :\
+ GRN_DAT_EACH((ctx), (grn_dat *)(table), (id), (key), (key_size), block);\
+ break;\
+ case GRN_TABLE_HASH_KEY :\
+ GRN_HASH_EACH((ctx), (grn_hash *)(table), (id), (key), (key_size), (value), block);\
+ break;\
+ case GRN_TABLE_NO_KEY :\
+ GRN_ARRAY_EACH((ctx), (grn_array *)(table), (head), (tail), (id), (value), block);\
+ break;\
+ }\
+ }\
+ if ((ctx)->subno) {\
+ (ctx)->subno--;\
+ } else {\
+ (ctx)->seqno++;\
+ }\
+} while (0)
+
+typedef struct _grn_table_sort_key grn_table_sort_key;
+typedef unsigned char grn_table_sort_flags;
+
+#define GRN_TABLE_SORT_ASC (0x00<<0)
+#define GRN_TABLE_SORT_DESC (0x01<<0)
+
+struct _grn_table_sort_key {
+ grn_obj *key;
+ grn_table_sort_flags flags;
+ int offset;
+};
+
+GRN_API int grn_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
+ grn_obj *result, grn_table_sort_key *keys, int n_keys);
+
+typedef struct _grn_table_group_result grn_table_group_result;
+typedef unsigned int grn_table_group_flags;
+
+#define GRN_TABLE_GROUP_CALC_COUNT (0x01<<3)
+#define GRN_TABLE_GROUP_CALC_MAX (0x01<<4)
+#define GRN_TABLE_GROUP_CALC_MIN (0x01<<5)
+#define GRN_TABLE_GROUP_CALC_SUM (0x01<<6)
+#define GRN_TABLE_GROUP_CALC_AVG (0x01<<7)
+
+typedef enum {
+ GRN_OP_PUSH = 0,
+ GRN_OP_POP,
+ GRN_OP_NOP,
+ GRN_OP_CALL,
+ GRN_OP_INTERN,
+ GRN_OP_GET_REF,
+ GRN_OP_GET_VALUE,
+ GRN_OP_AND,
+ GRN_OP_AND_NOT,
+ /* Deprecated. Just for backward compatibility. */
+#define GRN_OP_BUT GRN_OP_AND_NOT
+ GRN_OP_OR,
+ GRN_OP_ASSIGN,
+ GRN_OP_STAR_ASSIGN,
+ GRN_OP_SLASH_ASSIGN,
+ GRN_OP_MOD_ASSIGN,
+ GRN_OP_PLUS_ASSIGN,
+ GRN_OP_MINUS_ASSIGN,
+ GRN_OP_SHIFTL_ASSIGN,
+ GRN_OP_SHIFTR_ASSIGN,
+ GRN_OP_SHIFTRR_ASSIGN,
+ GRN_OP_AND_ASSIGN,
+ GRN_OP_XOR_ASSIGN,
+ GRN_OP_OR_ASSIGN,
+ GRN_OP_JUMP,
+ GRN_OP_CJUMP,
+ GRN_OP_COMMA,
+ GRN_OP_BITWISE_OR,
+ GRN_OP_BITWISE_XOR,
+ GRN_OP_BITWISE_AND,
+ GRN_OP_BITWISE_NOT,
+ GRN_OP_EQUAL,
+ GRN_OP_NOT_EQUAL,
+ GRN_OP_LESS,
+ GRN_OP_GREATER,
+ GRN_OP_LESS_EQUAL,
+ GRN_OP_GREATER_EQUAL,
+ GRN_OP_IN,
+ GRN_OP_MATCH,
+ GRN_OP_NEAR,
+ GRN_OP_NEAR2,
+ GRN_OP_SIMILAR,
+ GRN_OP_TERM_EXTRACT,
+ GRN_OP_SHIFTL,
+ GRN_OP_SHIFTR,
+ GRN_OP_SHIFTRR,
+ GRN_OP_PLUS,
+ GRN_OP_MINUS,
+ GRN_OP_STAR,
+ GRN_OP_SLASH,
+ GRN_OP_MOD,
+ GRN_OP_DELETE,
+ GRN_OP_INCR,
+ GRN_OP_DECR,
+ GRN_OP_INCR_POST,
+ GRN_OP_DECR_POST,
+ GRN_OP_NOT,
+ GRN_OP_ADJUST,
+ GRN_OP_EXACT,
+ GRN_OP_LCP,
+ GRN_OP_PARTIAL,
+ GRN_OP_UNSPLIT,
+ GRN_OP_PREFIX,
+ GRN_OP_SUFFIX,
+ GRN_OP_GEO_DISTANCE1,
+ GRN_OP_GEO_DISTANCE2,
+ GRN_OP_GEO_DISTANCE3,
+ GRN_OP_GEO_DISTANCE4,
+ GRN_OP_GEO_WITHINP5,
+ GRN_OP_GEO_WITHINP6,
+ GRN_OP_GEO_WITHINP8,
+ GRN_OP_OBJ_SEARCH,
+ GRN_OP_EXPR_GET_VAR,
+ GRN_OP_TABLE_CREATE,
+ GRN_OP_TABLE_SELECT,
+ GRN_OP_TABLE_SORT,
+ GRN_OP_TABLE_GROUP,
+ GRN_OP_JSON_PUT,
+ GRN_OP_GET_MEMBER
+} grn_operator;
+
+struct _grn_table_group_result {
+ grn_obj *table;
+ unsigned char key_begin;
+ unsigned char key_end;
+ int limit;
+ grn_table_group_flags flags;
+ grn_operator op;
+};
+
+GRN_API grn_rc grn_table_group(grn_ctx *ctx, grn_obj *table,
+ grn_table_sort_key *keys, int n_keys,
+ grn_table_group_result *results, int n_results);
+GRN_API grn_rc grn_table_setoperation(grn_ctx *ctx, grn_obj *table1, grn_obj *table2,
+ grn_obj *res, grn_operator op);
+GRN_API grn_rc grn_table_difference(grn_ctx *ctx, grn_obj *table1, grn_obj *table2,
+ grn_obj *res1, grn_obj *res2);
+GRN_API int grn_table_columns(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size,
+ grn_obj *res);
+
+GRN_API grn_obj *grn_obj_column(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size);
+
+GRN_API unsigned int grn_table_size(grn_ctx *ctx, grn_obj *table);
+
+/*-------------------------------------------------------------
+ * API for column
+ */
+
+#define GRN_COLUMN_NAME_ID "_id"
+#define GRN_COLUMN_NAME_ID_LEN (sizeof(GRN_COLUMN_NAME_ID) - 1)
+#define GRN_COLUMN_NAME_KEY "_key"
+#define GRN_COLUMN_NAME_KEY_LEN (sizeof(GRN_COLUMN_NAME_KEY) - 1)
+#define GRN_COLUMN_NAME_VALUE "_value"
+#define GRN_COLUMN_NAME_VALUE_LEN (sizeof(GRN_COLUMN_NAME_VALUE) - 1)
+#define GRN_COLUMN_NAME_SCORE "_score"
+#define GRN_COLUMN_NAME_SCORE_LEN (sizeof(GRN_COLUMN_NAME_SCORE) - 1)
+#define GRN_COLUMN_NAME_NSUBRECS "_nsubrecs"
+#define GRN_COLUMN_NAME_NSUBRECS_LEN (sizeof(GRN_COLUMN_NAME_NSUBRECS) - 1)
+
+GRN_API grn_obj *grn_column_create(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size,
+ const char *path, grn_obj_flags flags, grn_obj *type);
+
+#define GRN_COLUMN_OPEN_OR_CREATE(ctx,table,name,name_size,path,flags,type,column) \
+ (((column) = grn_obj_column((ctx), (table), (name), (name_size))) ||\
+ ((column) = grn_column_create((ctx), (table), (name), (name_size), (path), (flags), (type))))
+
+GRN_API grn_rc grn_column_index_update(grn_ctx *ctx, grn_obj *column,
+ grn_id id, unsigned int section,
+ grn_obj *oldvalue, grn_obj *newvalue);
+GRN_API grn_obj *grn_column_table(grn_ctx *ctx, grn_obj *column);
+
+/*-------------------------------------------------------------
+ * API for db, table and/or column
+ */
+
+typedef enum {
+ GRN_INFO_ENCODING = 0,
+ GRN_INFO_SOURCE,
+ GRN_INFO_DEFAULT_TOKENIZER,
+ GRN_INFO_ELEMENT_SIZE,
+ GRN_INFO_CURR_MAX,
+ GRN_INFO_MAX_ELEMENT_SIZE,
+ GRN_INFO_SEG_SIZE,
+ GRN_INFO_CHUNK_SIZE,
+ GRN_INFO_MAX_SECTION,
+ GRN_INFO_HOOK_LOCAL_DATA,
+ GRN_INFO_ELEMENT_A,
+ GRN_INFO_ELEMENT_CHUNK,
+ GRN_INFO_ELEMENT_CHUNK_SIZE,
+ GRN_INFO_ELEMENT_BUFFER_FREE,
+ GRN_INFO_ELEMENT_NTERMS,
+ GRN_INFO_ELEMENT_NTERMS_VOID,
+ GRN_INFO_ELEMENT_SIZE_IN_CHUNK,
+ GRN_INFO_ELEMENT_POS_IN_CHUNK,
+ GRN_INFO_ELEMENT_SIZE_IN_BUFFER,
+ GRN_INFO_ELEMENT_POS_IN_BUFFER,
+ GRN_INFO_ELEMENT_ESTIMATE_SIZE,
+ GRN_INFO_NGRAM_UNIT_SIZE,
+ /*
+ GRN_INFO_VERSION,
+ GRN_INFO_CONFIGURE_OPTIONS,
+ GRN_INFO_CONFIG_PATH,
+ */
+ GRN_INFO_PARTIAL_MATCH_THRESHOLD,
+ GRN_INFO_II_SPLIT_THRESHOLD,
+ GRN_INFO_SUPPORT_ZLIB,
+ GRN_INFO_SUPPORT_LZO,
+ GRN_INFO_NORMALIZER,
+ GRN_INFO_TOKEN_FILTERS
+} grn_info_type;
+
+GRN_API grn_obj *grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valuebuf);
+GRN_API grn_rc grn_obj_set_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *value);
+GRN_API grn_obj *grn_obj_get_element_info(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_info_type type, grn_obj *value);
+GRN_API grn_rc grn_obj_set_element_info(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_info_type type, grn_obj *value);
+
+GRN_API grn_bool grn_obj_is_builtin(grn_ctx *ctx, grn_obj *obj);
+
+GRN_API grn_obj *grn_obj_get_value(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value);
+GRN_API int grn_obj_get_values(grn_ctx *ctx, grn_obj *obj, grn_id offset, void **values);
+
+#define GRN_COLUMN_EACH(ctx,column,id,value,block) do {\
+ int _n;\
+ grn_id id = 1;\
+ while ((_n = grn_obj_get_values(ctx, column, id, (void **)&value)) > 0) {\
+ for (; _n; _n--, id++, value++) {\
+ block\
+ }\
+ }\
+} while (0)
+
+#define GRN_OBJ_SET_MASK (0x07)
+#define GRN_OBJ_SET (0x01)
+#define GRN_OBJ_INCR (0x02)
+#define GRN_OBJ_DECR (0x03)
+#define GRN_OBJ_APPEND (0x04)
+#define GRN_OBJ_PREPEND (0x05)
+#define GRN_OBJ_GET (0x01<<4)
+#define GRN_OBJ_COMPARE (0x01<<5)
+#define GRN_OBJ_LOCK (0x01<<6)
+#define GRN_OBJ_UNLOCK (0x01<<7)
+
+GRN_API grn_rc grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int flags);
+GRN_API grn_rc grn_obj_remove(grn_ctx *ctx, grn_obj *obj);
+GRN_API grn_rc grn_obj_rename(grn_ctx *ctx, grn_obj *obj,
+ const char *name, unsigned int name_size);
+GRN_API grn_rc grn_table_rename(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size);
+
+GRN_API grn_rc grn_column_rename(grn_ctx *ctx, grn_obj *column,
+ const char *name, unsigned int name_size);
+
+GRN_API grn_rc grn_obj_close(grn_ctx *ctx, grn_obj *obj);
+GRN_API grn_rc grn_obj_reinit(grn_ctx *ctx, grn_obj *obj, grn_id domain, unsigned char flags);
+GRN_API void grn_obj_unlink(grn_ctx *ctx, grn_obj *obj);
+
+GRN_API grn_user_data *grn_obj_user_data(grn_ctx *ctx, grn_obj *obj);
+
+GRN_API grn_rc grn_obj_set_finalizer(grn_ctx *ctx, grn_obj *obj, grn_proc_func *func);
+
+GRN_API const char *grn_obj_path(grn_ctx *ctx, grn_obj *obj);
+GRN_API int grn_obj_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size);
+
+GRN_API int grn_column_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size);
+
+GRN_API grn_id grn_obj_get_range(grn_ctx *ctx, grn_obj *obj);
+
+#define GRN_OBJ_GET_DOMAIN(obj) \
+ ((obj)->header.type == GRN_TABLE_NO_KEY ? GRN_ID_NIL : (obj)->header.domain)
+
+GRN_API int grn_obj_expire(grn_ctx *ctx, grn_obj *obj, int threshold);
+GRN_API int grn_obj_check(grn_ctx *ctx, grn_obj *obj);
+GRN_API grn_rc grn_obj_lock(grn_ctx *ctx, grn_obj *obj, grn_id id, int timeout);
+GRN_API grn_rc grn_obj_unlock(grn_ctx *ctx, grn_obj *obj, grn_id id);
+GRN_API grn_rc grn_obj_clear_lock(grn_ctx *ctx, grn_obj *obj);
+GRN_API unsigned int grn_obj_is_locked(grn_ctx *ctx, grn_obj *obj);
+GRN_API int grn_obj_defrag(grn_ctx *ctx, grn_obj *obj, int threshold);
+
+GRN_API grn_obj *grn_obj_db(grn_ctx *ctx, grn_obj *obj);
+
+GRN_API grn_id grn_obj_id(grn_ctx *ctx, grn_obj *obj);
+
+typedef struct _grn_search_optarg grn_search_optarg;
+
+struct _grn_search_optarg {
+ grn_operator mode;
+ int similarity_threshold;
+ int max_interval;
+ int *weight_vector;
+ int vector_size;
+ grn_obj *proc;
+ int max_size;
+};
+
+GRN_API grn_rc grn_obj_search(grn_ctx *ctx, grn_obj *obj, grn_obj *query,
+ grn_obj *res, grn_operator op, grn_search_optarg *optarg);
+
+typedef grn_rc grn_selector_func(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op);
+
+GRN_API grn_rc grn_proc_set_selector(grn_ctx *ctx, grn_obj *proc,
+ grn_selector_func selector);
+
+/*-------------------------------------------------------------
+ * grn_vector
+*/
+
+GRN_API unsigned int grn_vector_size(grn_ctx *ctx, grn_obj *vector);
+
+GRN_API grn_rc grn_vector_add_element(grn_ctx *ctx, grn_obj *vector,
+ const char *str, unsigned int str_len,
+ unsigned int weight, grn_id domain);
+
+GRN_API unsigned int grn_vector_get_element(grn_ctx *ctx, grn_obj *vector,
+ unsigned int offset, const char **str,
+ unsigned int *weight, grn_id *domain);
+
+/*-------------------------------------------------------------
+ * grn_uvector
+*/
+
+GRN_API unsigned int grn_uvector_size(grn_ctx *ctx, grn_obj *uvector);
+
+GRN_API grn_rc grn_uvector_add_element(grn_ctx *ctx, grn_obj *vector,
+ grn_id id, unsigned int weight);
+
+GRN_API grn_id grn_uvector_get_element(grn_ctx *ctx, grn_obj *uvector,
+ unsigned int offset,
+ unsigned int *weight);
+
+/*-------------------------------------------------------------
+ * API for hook
+ */
+
+GRN_API int grn_proc_call_next(grn_ctx *ctx, grn_obj *exec_info, grn_obj *in, grn_obj *out);
+GRN_API void *grn_proc_get_ctx_local_data(grn_ctx *ctx, grn_obj *exec_info);
+GRN_API void *grn_proc_get_hook_local_data(grn_ctx *ctx, grn_obj *exec_info);
+
+typedef enum {
+ GRN_HOOK_SET = 0,
+ GRN_HOOK_GET,
+ GRN_HOOK_INSERT,
+ GRN_HOOK_DELETE,
+ GRN_HOOK_SELECT
+} grn_hook_entry;
+
+GRN_API grn_rc grn_obj_add_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry,
+ int offset, grn_obj *proc, grn_obj *data);
+GRN_API int grn_obj_get_nhooks(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry);
+GRN_API grn_obj *grn_obj_get_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry,
+ int offset, grn_obj *data);
+GRN_API grn_rc grn_obj_delete_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry, int offset);
+
+GRN_API grn_obj *grn_obj_open(grn_ctx *ctx, unsigned char type, grn_obj_flags flags, grn_id domain);
+
+GRN_API int grn_column_index(grn_ctx *ctx, grn_obj *column, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section);
+
+GRN_API grn_rc grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, grn_bool removep);
+GRN_API grn_rc grn_obj_path_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, char *buffer);
+
+/* geo */
+
+typedef struct {
+ int latitude;
+ int longitude;
+} grn_geo_point;
+
+GRN_API grn_rc grn_geo_select_in_rectangle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ grn_obj *res,
+ grn_operator op);
+GRN_API int grn_geo_estimate_in_rectangle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point);
+GRN_API grn_obj *grn_geo_cursor_open_in_rectangle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ int offset,
+ int limit);
+GRN_API grn_posting *grn_geo_cursor_next(grn_ctx *ctx, grn_obj *cursor);
+
+
+/* query & snippet */
+
+#ifndef GRN_QUERY_AND
+#define GRN_QUERY_AND '+'
+#endif /* GRN_QUERY_AND */
+#ifndef GRN_QUERY_AND_NOT
+# ifdef GRN_QUERY_BUT
+ /* Deprecated. Just for backward compatibility. */
+# define GRN_QUERY_AND_NOT GRN_QUERY_BUT
+# else
+# define GRN_QUERY_AND_NOT '-'
+# endif /* GRN_QUERY_BUT */
+#endif /* GRN_QUERY_AND_NOT */
+#ifndef GRN_QUERY_ADJ_INC
+#define GRN_QUERY_ADJ_INC '>'
+#endif /* GRN_QUERY_ADJ_POS2 */
+#ifndef GRN_QUERY_ADJ_DEC
+#define GRN_QUERY_ADJ_DEC '<'
+#endif /* GRN_QUERY_ADJ_POS1 */
+#ifndef GRN_QUERY_ADJ_NEG
+#define GRN_QUERY_ADJ_NEG '~'
+#endif /* GRN_QUERY_ADJ_NEG */
+#ifndef GRN_QUERY_PREFIX
+#define GRN_QUERY_PREFIX '*'
+#endif /* GRN_QUERY_PREFIX */
+#ifndef GRN_QUERY_PARENL
+#define GRN_QUERY_PARENL '('
+#endif /* GRN_QUERY_PARENL */
+#ifndef GRN_QUERY_PARENR
+#define GRN_QUERY_PARENR ')'
+#endif /* GRN_QUERY_PARENR */
+#ifndef GRN_QUERY_QUOTEL
+#define GRN_QUERY_QUOTEL '"'
+#endif /* GRN_QUERY_QUOTEL */
+#ifndef GRN_QUERY_QUOTER
+#define GRN_QUERY_QUOTER '"'
+#endif /* GRN_QUERY_QUOTER */
+#ifndef GRN_QUERY_ESCAPE
+#define GRN_QUERY_ESCAPE '\\'
+#endif /* GRN_QUERY_ESCAPE */
+#ifndef GRN_QUERY_COLUMN
+#define GRN_QUERY_COLUMN ':'
+#endif /* GRN_QUERY_COLUMN */
+
+typedef struct _grn_snip_mapping grn_snip_mapping;
+
+struct _grn_snip_mapping {
+ void *dummy;
+};
+
+#define GRN_SNIP_NORMALIZE (0x01<<0)
+#define GRN_SNIP_COPY_TAG (0x01<<1)
+#define GRN_SNIP_SKIP_LEADING_SPACES (0x01<<2)
+
+#define GRN_SNIP_MAPPING_HTML_ESCAPE ((grn_snip_mapping *)-1)
+
+GRN_API grn_obj *grn_snip_open(grn_ctx *ctx, int flags, unsigned int width,
+ unsigned int max_results,
+ const char *defaultopentag, unsigned int defaultopentag_len,
+ const char *defaultclosetag, unsigned int defaultclosetag_len,
+ grn_snip_mapping *mapping);
+GRN_API grn_rc grn_snip_add_cond(grn_ctx *ctx, grn_obj *snip,
+ const char *keyword, unsigned int keyword_len,
+ const char *opentag, unsigned int opentag_len,
+ const char *closetag, unsigned int closetag_len);
+GRN_API grn_rc grn_snip_set_normalizer(grn_ctx *ctx, grn_obj *snip,
+ grn_obj *normalizer);
+GRN_API grn_obj *grn_snip_get_normalizer(grn_ctx *ctx, grn_obj *snip);
+GRN_API grn_rc grn_snip_exec(grn_ctx *ctx, grn_obj *snip,
+ const char *string, unsigned int string_len,
+ unsigned int *nresults, unsigned int *max_tagged_len);
+GRN_API grn_rc grn_snip_get_result(grn_ctx *ctx, grn_obj *snip, const unsigned int index,
+ char *result, unsigned int *result_len);
+
+/* log */
+
+#define GRN_LOG_TIME (0x01<<0)
+#define GRN_LOG_TITLE (0x01<<1)
+#define GRN_LOG_MESSAGE (0x01<<2)
+#define GRN_LOG_LOCATION (0x01<<3)
+
+/* Deprecated since 2.1.2. Use grn_logger instead. */
+typedef struct _grn_logger_info grn_logger_info;
+
+/* Deprecated since 2.1.2. Use grn_logger instead. */
+struct _grn_logger_info {
+ grn_log_level max_level;
+ int flags;
+ void (*func)(int, const char *, const char *, const char *, const char *, void *);
+ void *func_arg;
+};
+
+/* Deprecated since 2.1.2. Use grn_logger_set() instead. */
+GRN_API grn_rc grn_logger_info_set(grn_ctx *ctx, const grn_logger_info *info);
+
+typedef struct _grn_logger grn_logger;
+
+struct _grn_logger {
+ grn_log_level max_level;
+ int flags;
+ void *user_data;
+ void (*log)(grn_ctx *ctx, grn_log_level level,
+ const char *timestamp, const char *title, const char *message,
+ const char *location, void *user_data);
+ void (*reopen)(grn_ctx *ctx, void *user_data);
+ void (*fin)(grn_ctx *ctx, void *user_data);
+};
+
+GRN_API grn_rc grn_logger_set(grn_ctx *ctx, const grn_logger *logger);
+
+GRN_API void grn_logger_set_max_level(grn_ctx *ctx, grn_log_level max_level);
+GRN_API grn_log_level grn_logger_get_max_level(grn_ctx *ctx);
+
+#ifdef __GNUC__
+#define GRN_ATTRIBUTE_PRINTF(fmt_pos) \
+ __attribute__ ((format(printf, fmt_pos, fmt_pos + 1)))
+#else
+#define GRN_ATTRIBUTE_PRINTF(fmt_pos)
+#endif /* __GNUC__ */
+
+GRN_API void grn_logger_put(grn_ctx *ctx, grn_log_level level,
+ const char *file, int line, const char *func, const char *fmt, ...) GRN_ATTRIBUTE_PRINTF(6);
+GRN_API void grn_logger_reopen(grn_ctx *ctx);
+
+GRN_API grn_bool grn_logger_pass(grn_ctx *ctx, grn_log_level level);
+
+#ifndef GRN_LOG_DEFAULT_LEVEL
+#define GRN_LOG_DEFAULT_LEVEL GRN_LOG_NOTICE
+#endif /* GRN_LOG_DEFAULT_LEVEL */
+
+GRN_API void grn_default_logger_set_max_level(grn_log_level level);
+GRN_API grn_log_level grn_default_logger_get_max_level(void);
+GRN_API void grn_default_logger_set_path(const char *path);
+GRN_API const char *grn_default_logger_get_path(void);
+
+#define GRN_LOG(ctx,level,...) do {\
+ if (grn_logger_pass(ctx, level)) {\
+ grn_logger_put(ctx, (level), __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); \
+ }\
+} while (0)
+
+typedef struct _grn_query_logger grn_query_logger;
+
+struct _grn_query_logger {
+ unsigned int flags;
+ void *user_data;
+ void (*log)(grn_ctx *ctx, unsigned int flag,
+ const char *timestamp, const char *info, const char *message,
+ void *user_data);
+ void (*reopen)(grn_ctx *ctx, void *user_data);
+ void (*fin)(grn_ctx *ctx, void *user_data);
+};
+
+GRN_API grn_rc grn_query_logger_set(grn_ctx *ctx, const grn_query_logger *logger);
+
+GRN_API void grn_query_logger_put(grn_ctx *ctx, unsigned int flag,
+ const char *mark,
+ const char *format, ...) GRN_ATTRIBUTE_PRINTF(4);
+GRN_API void grn_query_logger_reopen(grn_ctx *ctx);
+
+GRN_API grn_bool grn_query_logger_pass(grn_ctx *ctx, unsigned int flag);
+
+GRN_API void grn_default_query_logger_set_flags(unsigned int flags);
+GRN_API unsigned int grn_default_query_logger_get_flags(void);
+GRN_API void grn_default_query_logger_set_path(const char *path);
+GRN_API const char *grn_default_query_logger_get_path(void);
+
+#define GRN_QUERY_LOG(ctx, flag, mark, format, ...) do {\
+ if (grn_query_logger_pass(ctx, flag)) {\
+ grn_query_logger_put(ctx, (flag), (mark), format, __VA_ARGS__);\
+ }\
+} while (0)
+
+/* grn_bulk */
+
+#define GRN_BULK_BUFSIZE (sizeof(grn_obj) - sizeof(grn_obj_header))
+/* This assumes that GRN_BULK_BUFSIZE is less than 32 (= 0x20). */
+#define GRN_BULK_BUFSIZE_MAX 0x1f
+#define GRN_BULK_SIZE_IN_FLAGS(flags) ((flags) & GRN_BULK_BUFSIZE_MAX)
+#define GRN_BULK_OUTP(bulk) ((bulk)->header.impl_flags & GRN_OBJ_OUTPLACE)
+#define GRN_BULK_REWIND(bulk) do {\
+ if ((bulk)->header.type == GRN_VECTOR) {\
+ grn_obj *_body = (bulk)->u.v.body;\
+ if (_body) {\
+ if (GRN_BULK_OUTP(_body)) {\
+ (_body)->u.b.curr = (_body)->u.b.head;\
+ } else {\
+ (_body)->header.flags &= ~GRN_BULK_BUFSIZE_MAX;\
+ }\
+ }\
+ (bulk)->u.v.n_sections = 0;\
+ } else {\
+ if (GRN_BULK_OUTP(bulk)) {\
+ (bulk)->u.b.curr = (bulk)->u.b.head;\
+ } else {\
+ (bulk)->header.flags &= ~GRN_BULK_BUFSIZE_MAX;\
+ }\
+ }\
+} while (0)
+#define GRN_BULK_WSIZE(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.tail - (bulk)->u.b.head)\
+ : GRN_BULK_BUFSIZE)
+#define GRN_BULK_REST(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.tail - (bulk)->u.b.curr)\
+ : GRN_BULK_BUFSIZE - (bulk)->header.flags)
+#define GRN_BULK_VSIZE(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.curr - (bulk)->u.b.head)\
+ : GRN_BULK_SIZE_IN_FLAGS((bulk)->header.flags))
+#define GRN_BULK_EMPTYP(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.curr == (bulk)->u.b.head)\
+ : !(GRN_BULK_SIZE_IN_FLAGS((bulk)->header.flags)))
+#define GRN_BULK_HEAD(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.head)\
+ : (char *)&((bulk)->u.b.head))
+#define GRN_BULK_CURR(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.curr)\
+ : (char *)&((bulk)->u.b.head) + GRN_BULK_SIZE_IN_FLAGS((bulk)->header.flags))
+#define GRN_BULK_TAIL(bulk) \
+ (GRN_BULK_OUTP(bulk)\
+ ? ((bulk)->u.b.tail)\
+ : (char *)&((bulk)[1]))
+
+GRN_API grn_rc grn_bulk_reinit(grn_ctx *ctx, grn_obj *bulk, unsigned int size);
+GRN_API grn_rc grn_bulk_resize(grn_ctx *ctx, grn_obj *bulk, unsigned int newsize);
+GRN_API grn_rc grn_bulk_write(grn_ctx *ctx, grn_obj *bulk,
+ const char *str, unsigned int len);
+GRN_API grn_rc grn_bulk_write_from(grn_ctx *ctx, grn_obj *bulk,
+ const char *str, unsigned int from, unsigned int len);
+GRN_API grn_rc grn_bulk_reserve(grn_ctx *ctx, grn_obj *bulk, unsigned int len);
+GRN_API grn_rc grn_bulk_space(grn_ctx *ctx, grn_obj *bulk, unsigned int len);
+GRN_API grn_rc grn_bulk_truncate(grn_ctx *ctx, grn_obj *bulk, unsigned int len);
+GRN_API grn_rc grn_bulk_fin(grn_ctx *ctx, grn_obj *bulk);
+
+/* grn_text */
+
+GRN_API grn_rc grn_text_itoa(grn_ctx *ctx, grn_obj *bulk, int i);
+GRN_API grn_rc grn_text_itoa_padded(grn_ctx *ctx, grn_obj *bulk, int i, char ch, unsigned int len);
+GRN_API grn_rc grn_text_lltoa(grn_ctx *ctx, grn_obj *bulk, long long int i);
+GRN_API grn_rc grn_text_ftoa(grn_ctx *ctx, grn_obj *bulk, double d);
+GRN_API grn_rc grn_text_itoh(grn_ctx *ctx, grn_obj *bulk, int i, unsigned int len);
+GRN_API grn_rc grn_text_itob(grn_ctx *ctx, grn_obj *bulk, grn_id id);
+GRN_API grn_rc grn_text_lltob32h(grn_ctx *ctx, grn_obj *bulk, long long int i);
+GRN_API grn_rc grn_text_benc(grn_ctx *ctx, grn_obj *bulk, unsigned int v);
+GRN_API grn_rc grn_text_esc(grn_ctx *ctx, grn_obj *bulk, const char *s, unsigned int len);
+GRN_API grn_rc grn_text_urlenc(grn_ctx *ctx, grn_obj *buf,
+ const char *str, unsigned int len);
+GRN_API const char *grn_text_urldec(grn_ctx *ctx, grn_obj *buf,
+ const char *s, const char *e, char d);
+GRN_API grn_rc grn_text_escape_xml(grn_ctx *ctx, grn_obj *buf,
+ const char *s, unsigned int len);
+GRN_API grn_rc grn_text_time2rfc1123(grn_ctx *ctx, grn_obj *bulk, int sec);
+GRN_API grn_rc grn_text_printf(grn_ctx *ctx, grn_obj *bulk,
+ const char *format, ...) GRN_ATTRIBUTE_PRINTF(3);
+GRN_API grn_rc grn_text_vprintf(grn_ctx *ctx, grn_obj *bulk,
+ const char *format, va_list args);
+
+typedef struct _grn_obj_format grn_obj_format;
+
+#define GRN_OBJ_FORMAT_WITH_COLUMN_NAMES (0x01<<0)
+#define GRN_OBJ_FORMAT_AS_ARRAY (0x01<<3)
+/* Deprecated since 4.0.1. It will be removed at 5.0.0.
+ Use GRN_OBJ_FORMAT_AS_ARRAY instead.*/
+#define GRN_OBJ_FORMAT_ASARRAY GRN_OBJ_FORMAT_AS_ARRAY
+#define GRN_OBJ_FORMAT_WITH_WEIGHT (0x01<<4)
+
+struct _grn_obj_format {
+ grn_obj columns;
+ const void *min;
+ const void *max;
+ unsigned int min_size;
+ unsigned int max_size;
+ int nhits;
+ int offset;
+ int limit;
+ int hits_offset;
+ int flags;
+ grn_obj *expression;
+};
+
+#define GRN_OBJ_FORMAT_INIT(format,format_nhits,format_offset,format_limit,format_hits_offset) do { \
+ GRN_PTR_INIT(&(format)->columns, GRN_OBJ_VECTOR, GRN_ID_NIL);\
+ (format)->nhits = (format_nhits);\
+ (format)->offset = (format_offset);\
+ (format)->limit = (format_limit);\
+ (format)->hits_offset = (format_hits_offset);\
+ (format)->flags = 0;\
+ (format)->expression = NULL;\
+} while (0)
+
+#define GRN_OBJ_FORMAT_FIN(ctx,format) do {\
+ int ncolumns = GRN_BULK_VSIZE(&(format)->columns) / sizeof(grn_obj *);\
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&(format)->columns);\
+ while (ncolumns--) { grn_obj_unlink((ctx), *columns++); }\
+ GRN_OBJ_FIN((ctx), &(format)->columns);\
+ if ((format)->expression) { GRN_OBJ_FIN((ctx), (format)->expression); } \
+} while (0)
+
+GRN_API void grn_output_obj(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *obj, grn_obj_format *format);
+GRN_API void grn_output_envelope(grn_ctx *ctx, grn_rc rc,
+ grn_obj *head, grn_obj *body, grn_obj *foot,
+ const char *file, int line);
+
+GRN_API void grn_ctx_output_array_open(grn_ctx *ctx,
+ const char *name, int nelements);
+GRN_API void grn_ctx_output_array_close(grn_ctx *ctx);
+GRN_API void grn_ctx_output_map_open(grn_ctx *ctx,
+ const char *name, int nelements);
+GRN_API void grn_ctx_output_map_close(grn_ctx *ctx);
+GRN_API void grn_ctx_output_int32(grn_ctx *ctx, int value);
+GRN_API void grn_ctx_output_int64(grn_ctx *ctx, long long int value);
+GRN_API void grn_ctx_output_float(grn_ctx *ctx, double value);
+GRN_API void grn_ctx_output_cstr(grn_ctx *ctx, const char *value);
+GRN_API void grn_ctx_output_str(grn_ctx *ctx,
+ const char *value, unsigned int value_len);
+GRN_API void grn_ctx_output_bool(grn_ctx *ctx, grn_bool value);
+GRN_API void grn_ctx_output_obj(grn_ctx *ctx,
+ grn_obj *value, grn_obj_format *format);
+
+
+GRN_API const char *grn_ctx_get_mime_type(grn_ctx *ctx);
+GRN_API void grn_ctx_recv_handler_set(grn_ctx *,
+ void (*func)(grn_ctx *, int, void *),
+ void *func_arg);
+
+/* obsolete */
+GRN_API grn_rc grn_text_otoj(grn_ctx *ctx, grn_obj *bulk, grn_obj *obj,
+ grn_obj_format *format);
+
+/* various values exchanged via grn_obj */
+
+#define GRN_OBJ_DO_SHALLOW_COPY (GRN_OBJ_REFER|GRN_OBJ_OUTPLACE)
+#define GRN_OBJ_VECTOR (0x01<<7)
+
+#define GRN_OBJ_MUTABLE(obj) ((obj) && (obj)->header.type <= GRN_VECTOR)
+
+#define GRN_VALUE_FIX_SIZE_INIT(obj,flags,domain)\
+ GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_UVECTOR : GRN_BULK,\
+ ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
+#define GRN_VALUE_VAR_SIZE_INIT(obj,flags,domain)\
+ GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_VECTOR : GRN_BULK,\
+ ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
+
+#define GRN_VOID_INIT(obj) GRN_OBJ_INIT((obj), GRN_VOID, 0, GRN_DB_VOID)
+#define GRN_TEXT_INIT(obj,flags) \
+ GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_TEXT)
+#define GRN_SHORT_TEXT_INIT(obj,flags) \
+ GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_SHORT_TEXT)
+#define GRN_LONG_TEXT_INIT(obj,flags) \
+ GRN_VALUE_VAR_SIZE_INIT(obj, flags, GRN_DB_LONG_TEXT)
+#define GRN_TEXT_SET_REF(obj,str,len) do {\
+ (obj)->u.b.head = (char *)(str);\
+ (obj)->u.b.curr = (char *)(str) + (len);\
+} while (0)
+#define GRN_TEXT_SET(ctx,obj,str,len) do {\
+ if ((obj)->header.impl_flags & GRN_OBJ_REFER) {\
+ GRN_TEXT_SET_REF((obj), (str), (len));\
+ } else {\
+ grn_bulk_write_from((ctx), (obj), (const char *)(str), 0, (unsigned int)(len));\
+ }\
+} while (0)
+#define GRN_TEXT_PUT(ctx,obj,str,len) \
+ grn_bulk_write((ctx), (obj), (const char *)(str), (unsigned int)(len))
+#define GRN_TEXT_PUTC(ctx,obj,c) do {\
+ char _c = (c); grn_bulk_write((ctx), (obj), &_c, 1);\
+} while (0)
+
+#define GRN_TEXT_PUTS(ctx,obj,str) GRN_TEXT_PUT((ctx), (obj), (str), strlen(str))
+#define GRN_TEXT_SETS(ctx,obj,str) GRN_TEXT_SET((ctx), (obj), (str), strlen(str))
+#define GRN_TEXT_VALUE(obj) GRN_BULK_HEAD(obj)
+#define GRN_TEXT_LEN(obj) GRN_BULK_VSIZE(obj)
+
+#define GRN_BOOL_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_BOOL)
+#define GRN_INT8_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT8)
+#define GRN_UINT8_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT8)
+#define GRN_INT16_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT16)
+#define GRN_UINT16_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT16)
+#define GRN_INT32_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT32)
+#define GRN_UINT32_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT32)
+#define GRN_INT64_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_INT64)
+#define GRN_UINT64_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_UINT64)
+#define GRN_FLOAT_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_FLOAT)
+#define GRN_TIME_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TIME)
+#define GRN_RECORD_INIT GRN_VALUE_FIX_SIZE_INIT
+#define GRN_PTR_INIT(obj,flags,domain)\
+ GRN_OBJ_INIT((obj), ((flags) & GRN_OBJ_VECTOR) ? GRN_PVECTOR : GRN_PTR,\
+ ((flags) & GRN_OBJ_DO_SHALLOW_COPY), (domain))
+#define GRN_TOKYO_GEO_POINT_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_TOKYO_GEO_POINT)
+#define GRN_WGS84_GEO_POINT_INIT(obj,flags) \
+ GRN_VALUE_FIX_SIZE_INIT(obj, flags, GRN_DB_WGS84_GEO_POINT)
+
+#define GRN_BOOL_SET(ctx,obj,val) do {\
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned char));\
+} while (0)
+#define GRN_INT8_SET(ctx,obj,val) do {\
+ signed char _val = (signed char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(signed char));\
+} while (0)
+#define GRN_UINT8_SET(ctx,obj,val) do {\
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned char));\
+} while (0)
+#define GRN_INT16_SET(ctx,obj,val) do {\
+ signed short _val = (signed short)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(signed short));\
+} while (0)
+#define GRN_UINT16_SET(ctx,obj,val) do {\
+ unsigned short _val = (unsigned short)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned short));\
+} while (0)
+#define GRN_INT32_SET(ctx,obj,val) do {\
+ int _val = (int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(int));\
+} while (0)
+#define GRN_UINT32_SET(ctx,obj,val) do {\
+ unsigned int _val = (unsigned int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(unsigned int));\
+} while (0)
+#define GRN_INT64_SET(ctx,obj,val) do {\
+ long long int _val = (long long int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(long long int));\
+} while (0)
+#define GRN_UINT64_SET(ctx,obj,val) do {\
+ long long unsigned int _val = (long long unsigned int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(long long unsigned int));\
+} while (0)
+#define GRN_FLOAT_SET(ctx,obj,val) do {\
+ double _val = (double)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(double));\
+} while (0)
+#define GRN_TIME_SET GRN_INT64_SET
+#define GRN_RECORD_SET(ctx,obj,val) do {\
+ grn_id _val = (grn_id)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_id));\
+} while (0)
+#define GRN_PTR_SET(ctx,obj,val) do {\
+ grn_obj *_val = (grn_obj *)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_obj *));\
+} while (0)
+
+#define GRN_GEO_DEGREE2MSEC(degree)\
+ ((int)((degree) * 3600 * 1000 + ((degree) > 0 ? 0.5 : -0.5)))
+#define GRN_GEO_MSEC2DEGREE(msec)\
+ ((((int)(msec)) / 3600.0) * 0.001)
+
+#define GRN_GEO_POINT_SET(ctx,obj,_latitude,_longitude) do {\
+ grn_geo_point _val;\
+ _val.latitude = (int)(_latitude);\
+ _val.longitude = (int)(_longitude);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_geo_point));\
+} while (0)
+
+#define GRN_BOOL_SET_AT(ctx,obj,offset,val) do {\
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset), sizeof(unsigned char));\
+} while (0)
+#define GRN_INT8_SET_AT(ctx,obj,offset,val) do {\
+ signed char _val = (signed char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(signed char), sizeof(signed char));\
+} while (0)
+#define GRN_UINT8_SET_AT(ctx,obj,offset,val) do { \
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(unsigned char), sizeof(unsigned char));\
+} while (0)
+#define GRN_INT16_SET_AT(ctx,obj,offset,val) do {\
+ signed short _val = (signed short)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(signed short), sizeof(signed short));\
+} while (0)
+#define GRN_UINT16_SET_AT(ctx,obj,offset,val) do { \
+ unsigned short _val = (unsigned short)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(unsigned short), sizeof(unsigned short));\
+} while (0)
+#define GRN_INT32_SET_AT(ctx,obj,offset,val) do {\
+ int _val = (int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(int), sizeof(int));\
+} while (0)
+#define GRN_UINT32_SET_AT(ctx,obj,offset,val) do { \
+ unsigned int _val = (unsigned int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(unsigned int), sizeof(unsigned int));\
+} while (0)
+#define GRN_INT64_SET_AT(ctx,obj,offset,val) do {\
+ long long int _val = (long long int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(long long int), sizeof(long long int));\
+} while (0)
+#define GRN_UINT64_SET_AT(ctx,obj,offset,val) do {\
+ long long unsigned int _val = (long long unsigned int)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(long long unsigned int),\
+ sizeof(long long unsigned int));\
+} while (0)
+#define GRN_FLOAT_SET_AT(ctx,obj,offset,val) do {\
+ double _val = (double)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(double), sizeof(double));\
+} while (0)
+#define GRN_TIME_SET_AT GRN_INT64_SET_AT
+#define GRN_RECORD_SET_AT(ctx,obj,offset,val) do {\
+ grn_id _val = (grn_id)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(grn_id), sizeof(grn_id));\
+} while (0)
+#define GRN_PTR_SET_AT(ctx,obj,offset,val) do {\
+ grn_obj *_val = (grn_obj *)(val);\
+ grn_bulk_write_from((ctx), (obj), (char *)&_val,\
+ (offset) * sizeof(grn_obj *), sizeof(grn_obj *));\
+} while (0)
+
+#define GRN_TIME_USEC_PER_SEC 1000000
+#define GRN_TIME_PACK(sec, usec) ((long long int)(sec) * GRN_TIME_USEC_PER_SEC + (usec))
+#define GRN_TIME_UNPACK(time_value, sec, usec) do {\
+ sec = (time_value) / GRN_TIME_USEC_PER_SEC;\
+ usec = (time_value) % GRN_TIME_USEC_PER_SEC;\
+} while (0)
+
+GRN_API void grn_time_now(grn_ctx *ctx, grn_obj *obj);
+
+#define GRN_TIME_NOW(ctx,obj) (grn_time_now((ctx), (obj)))
+
+#define GRN_BOOL_VALUE(obj) (*((unsigned char *)GRN_BULK_HEAD(obj)))
+#define GRN_INT8_VALUE(obj) (*((signed char *)GRN_BULK_HEAD(obj)))
+#define GRN_UINT8_VALUE(obj) (*((unsigned char *)GRN_BULK_HEAD(obj)))
+#define GRN_INT16_VALUE(obj) (*((signed short *)GRN_BULK_HEAD(obj)))
+#define GRN_UINT16_VALUE(obj) (*((unsigned short *)GRN_BULK_HEAD(obj)))
+#define GRN_INT32_VALUE(obj) (*((int *)GRN_BULK_HEAD(obj)))
+#define GRN_UINT32_VALUE(obj) (*((unsigned int *)GRN_BULK_HEAD(obj)))
+#define GRN_INT64_VALUE(obj) (*((long long int *)GRN_BULK_HEAD(obj)))
+#define GRN_UINT64_VALUE(obj) (*((long long unsigned int *)GRN_BULK_HEAD(obj)))
+#define GRN_FLOAT_VALUE(obj) (*((double *)GRN_BULK_HEAD(obj)))
+#define GRN_TIME_VALUE GRN_INT64_VALUE
+#define GRN_RECORD_VALUE(obj) (*((grn_id *)GRN_BULK_HEAD(obj)))
+#define GRN_PTR_VALUE(obj) (*((grn_obj **)GRN_BULK_HEAD(obj)))
+#define GRN_GEO_POINT_VALUE(obj,_latitude,_longitude) do {\
+ grn_geo_point *_val = (grn_geo_point *)GRN_BULK_HEAD(obj);\
+ _latitude = _val->latitude;\
+ _longitude = _val->longitude;\
+} while (0)
+
+#define GRN_BOOL_VALUE_AT(obj,offset) (((unsigned char *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_INT8_VALUE_AT(obj,offset) (((signed char *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_UINT8_VALUE_AT(obj,offset) (((unsigned char *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_INT16_VALUE_AT(obj,offset) (((signed short *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_UINT16_VALUE_AT(obj,offset) (((unsigned short *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_INT32_VALUE_AT(obj,offset) (((int *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_UINT32_VALUE_AT(obj,offset) (((unsigned int *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_INT64_VALUE_AT(obj,offset) (((long long int *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_UINT64_VALUE_AT(obj,offset) (((long long unsigned int *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_FLOAT_VALUE_AT(obj,offset) (((double *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_TIME_VALUE_AT GRN_INT64_VALUE_AT
+#define GRN_RECORD_VALUE_AT(obj,offset) (((grn_id *)GRN_BULK_HEAD(obj))[offset])
+#define GRN_PTR_VALUE_AT(obj,offset) (((grn_obj **)GRN_BULK_HEAD(obj))[offset])
+
+#define GRN_BOOL_PUT(ctx,obj,val) do {\
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned char));\
+} while (0)
+#define GRN_INT8_PUT(ctx,obj,val) do {\
+ signed char _val = (signed char)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(signed char));\
+} while (0)
+#define GRN_UINT8_PUT(ctx,obj,val) do {\
+ unsigned char _val = (unsigned char)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned char));\
+} while (0)
+#define GRN_INT16_PUT(ctx,obj,val) do {\
+ signed short _val = (signed short)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(signed short));\
+} while (0)
+#define GRN_UINT16_PUT(ctx,obj,val) do {\
+ unsigned short _val = (unsigned short)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned short));\
+} while (0)
+#define GRN_INT32_PUT(ctx,obj,val) do {\
+ int _val = (int)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(int));\
+} while (0)
+#define GRN_UINT32_PUT(ctx,obj,val) do {\
+ unsigned int _val = (unsigned int)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(unsigned int));\
+} while (0)
+#define GRN_INT64_PUT(ctx,obj,val) do {\
+ long long int _val = (long long int)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(long long int));\
+} while (0)
+#define GRN_UINT64_PUT(ctx,obj,val) do {\
+ long long unsigned int _val = (long long unsigned int)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(long long unsigned int));\
+} while (0)
+#define GRN_FLOAT_PUT(ctx,obj,val) do {\
+ double _val = (double)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(double));\
+} while (0)
+#define GRN_TIME_PUT GRN_INT64_PUT
+#define GRN_RECORD_PUT(ctx,obj,val) do {\
+ grn_id _val = (grn_id)(val); grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_id));\
+} while (0)
+#define GRN_PTR_PUT(ctx,obj,val) do {\
+ grn_obj *_val = (grn_obj *)(val);\
+ grn_bulk_write((ctx), (obj), (char *)&_val, sizeof(grn_obj *));\
+} while (0)
+
+/* grn_str: deprecated. use grn_string instead. */
+
+typedef struct {
+ const char *orig;
+ char *norm;
+ short *checks;
+ unsigned char *ctypes;
+ int flags;
+ unsigned int orig_blen;
+ unsigned int norm_blen;
+ unsigned int length;
+ grn_encoding encoding;
+} grn_str;
+
+#define GRN_STR_REMOVEBLANK (0x01<<0)
+#define GRN_STR_WITH_CTYPES (0x01<<1)
+#define GRN_STR_WITH_CHECKS (0x01<<2)
+#define GRN_STR_NORMALIZE GRN_OBJ_KEY_NORMALIZE
+
+GRN_API grn_str *grn_str_open(grn_ctx *ctx, const char *str, unsigned int str_len,
+ int flags);
+GRN_API grn_rc grn_str_close(grn_ctx *ctx, grn_str *nstr);
+
+/* grn_string */
+
+#define GRN_STRING_REMOVE_BLANK (0x01<<0)
+#define GRN_STRING_WITH_TYPES (0x01<<1)
+#define GRN_STRING_WITH_CHECKS (0x01<<2)
+#define GRN_STRING_REMOVE_TOKENIZED_DELIMITER (0x01<<3)
+
+#define GRN_NORMALIZER_AUTO ((grn_obj *)1)
+
+#define GRN_CHAR_BLANK 0x80
+#define GRN_CHAR_IS_BLANK(c) ((c) & (GRN_CHAR_BLANK))
+#define GRN_CHAR_TYPE(c) ((c) & 0x7f)
+
+typedef enum {
+ GRN_CHAR_NULL = 0,
+ GRN_CHAR_ALPHA,
+ GRN_CHAR_DIGIT,
+ GRN_CHAR_SYMBOL,
+ GRN_CHAR_HIRAGANA,
+ GRN_CHAR_KATAKANA,
+ GRN_CHAR_KANJI,
+ GRN_CHAR_OTHERS
+} grn_char_type;
+
+GRN_API grn_obj *grn_string_open(grn_ctx *ctx,
+ const char *string,
+ unsigned int length_in_bytes,
+ grn_obj *normalizer, int flags);
+GRN_API grn_rc grn_string_get_original(grn_ctx *ctx, grn_obj *string,
+ const char **original,
+ unsigned int *length_in_bytes);
+GRN_API int grn_string_get_flags(grn_ctx *ctx, grn_obj *string);
+GRN_API grn_rc grn_string_get_normalized(grn_ctx *ctx, grn_obj *string,
+ const char **normalized,
+ unsigned int *length_in_bytes,
+ unsigned int *n_characters);
+GRN_API grn_rc grn_string_set_normalized(grn_ctx *ctx, grn_obj *string,
+ char *normalized,
+ unsigned int length_in_bytes,
+ unsigned int n_characters);
+GRN_API const short *grn_string_get_checks(grn_ctx *ctx, grn_obj *string);
+GRN_API grn_rc grn_string_set_checks(grn_ctx *ctx,
+ grn_obj *string,
+ short *checks);
+GRN_API const unsigned char *grn_string_get_types(grn_ctx *ctx, grn_obj *string);
+GRN_API grn_rc grn_string_set_types(grn_ctx *ctx,
+ grn_obj *string,
+ unsigned char *types);
+GRN_API grn_encoding grn_string_get_encoding(grn_ctx *ctx, grn_obj *string);
+
+
+GRN_API int grn_charlen(grn_ctx *ctx, const char *str, const char *end);
+
+/* expr */
+
+GRN_API grn_obj *grn_expr_create(grn_ctx *ctx, const char *name, unsigned int name_size);
+GRN_API grn_rc grn_expr_close(grn_ctx *ctx, grn_obj *expr);
+GRN_API grn_obj *grn_expr_add_var(grn_ctx *ctx, grn_obj *expr,
+ const char *name, unsigned int name_size);
+GRN_API grn_obj *grn_expr_get_var(grn_ctx *ctx, grn_obj *expr,
+ const char *name, unsigned int name_size);
+GRN_API grn_obj *grn_expr_get_var_by_offset(grn_ctx *ctx, grn_obj *expr, unsigned int offset);
+
+GRN_API grn_obj *grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj,
+ grn_operator op, int nargs);
+GRN_API grn_obj *grn_expr_append_const(grn_ctx *ctx, grn_obj *expr, grn_obj *obj,
+ grn_operator op, int nargs);
+GRN_API grn_obj *grn_expr_append_const_str(grn_ctx *ctx, grn_obj *expr,
+ const char *str, unsigned int str_size,
+ grn_operator op, int nargs);
+GRN_API grn_obj *grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i,
+ grn_operator op, int nargs);
+GRN_API grn_rc grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs);
+
+GRN_API grn_rc grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords);
+
+GRN_API grn_rc grn_expr_syntax_escape(grn_ctx *ctx,
+ const char *query, int query_size,
+ const char *target_characters,
+ char escape_character,
+ grn_obj *escaped_query);
+GRN_API grn_rc grn_expr_syntax_escape_query(grn_ctx *ctx,
+ const char *query, int query_size,
+ grn_obj *escaped_query);
+
+GRN_API grn_rc grn_expr_compile(grn_ctx *ctx, grn_obj *expr);
+GRN_API grn_obj *grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs);
+GRN_API grn_rc grn_ctx_push(grn_ctx *ctx, grn_obj *obj);
+GRN_API grn_obj *grn_ctx_pop(grn_ctx *ctx);
+
+GRN_API grn_obj *grn_expr_alloc(grn_ctx *ctx, grn_obj *expr,
+ grn_id domain, grn_obj_flags flags);
+
+GRN_API grn_obj *grn_table_select(grn_ctx *ctx, grn_obj *table, grn_obj *expr,
+ grn_obj *res, grn_operator op);
+
+GRN_API int grn_obj_columns(grn_ctx *ctx, grn_obj *table,
+ const char *str, unsigned int str_size, grn_obj *res);
+
+#define GRN_EXPR_CREATE_FOR_QUERY(ctx,table,expr,var) do {\
+ if (((expr) = grn_expr_create((ctx), NULL, 0)) &&\
+ ((var) = grn_expr_add_var((ctx), (expr), NULL, 0))) {\
+ GRN_RECORD_INIT((var), 0, grn_obj_id((ctx), (table)));\
+ } else {\
+ (var) = NULL;\
+ }\
+} while (0)
+
+typedef unsigned int grn_expr_flags;
+
+#define GRN_EXPR_SYNTAX_QUERY (0x00)
+#define GRN_EXPR_SYNTAX_SCRIPT (0x01)
+#define GRN_EXPR_SYNTAX_OUTPUT_COLUMNS (0x20)
+#define GRN_EXPR_SYNTAX_ADJUSTER (0x40)
+#define GRN_EXPR_ALLOW_PRAGMA (0x02)
+#define GRN_EXPR_ALLOW_COLUMN (0x04)
+#define GRN_EXPR_ALLOW_UPDATE (0x08)
+#define GRN_EXPR_ALLOW_LEADING_NOT (0x10)
+
+GRN_API grn_rc grn_expr_parse(grn_ctx *ctx, grn_obj *expr,
+ const char *str, unsigned int str_size,
+ grn_obj *default_column, grn_operator default_mode,
+ grn_operator default_op, grn_expr_flags flags);
+
+GRN_API grn_obj *grn_expr_snip(grn_ctx *ctx, grn_obj *expr, int flags,
+ unsigned int width, unsigned int max_results,
+ unsigned int n_tags,
+ const char **opentags, unsigned int *opentag_lens,
+ const char **closetags, unsigned int *closetag_lens,
+ grn_snip_mapping *mapping);
+GRN_API grn_rc grn_expr_snip_add_conditions(grn_ctx *ctx,
+ grn_obj *expr,
+ grn_obj *snip,
+ unsigned int n_tags,
+ const char **opentags,
+ unsigned int *opentag_lens,
+ const char **closetags,
+ unsigned int *closetag_lens);
+
+GRN_API grn_table_sort_key *grn_table_sort_key_from_str(grn_ctx *ctx,
+ const char *str, unsigned int str_size,
+ grn_obj *table, unsigned int *nkeys);
+GRN_API grn_rc grn_table_sort_key_close(grn_ctx *ctx,
+ grn_table_sort_key *keys, unsigned int nkeys);
+
+GRN_API grn_bool grn_table_is_grouped(grn_ctx *ctx, grn_obj *table);
+
+GRN_API unsigned int grn_table_max_n_subrecs(grn_ctx *ctx, grn_obj *table);
+
+GRN_API grn_obj *grn_table_create_for_group(grn_ctx *ctx,
+ const char *name,
+ unsigned int name_size,
+ const char *path,
+ grn_obj *group_key,
+ grn_obj *value_type,
+ unsigned int max_n_subrecs);
+
+GRN_API unsigned int grn_table_get_subrecs(grn_ctx *ctx, grn_obj *table,
+ grn_id id, grn_id *subrecbuf,
+ int *scorebuf, int buf_size);
+
+GRN_API grn_obj *grn_table_tokenize(grn_ctx *ctx, grn_obj *table,
+ const char *str, unsigned int str_len,
+ grn_obj *buf, grn_bool addp);
+
+GRN_API grn_rc grn_load(grn_ctx *ctx, grn_content_type input_type,
+ const char *table, unsigned int table_len,
+ const char *columns, unsigned int columns_len,
+ const char *values, unsigned int values_len,
+ const char *ifexists, unsigned int ifexists_len,
+ const char *each, unsigned int each_len);
+
+#define GRN_CTX_MORE (0x01<<0)
+#define GRN_CTX_TAIL (0x01<<1)
+#define GRN_CTX_HEAD (0x01<<2)
+#define GRN_CTX_QUIET (0x01<<3)
+#define GRN_CTX_QUIT (0x01<<4)
+
+GRN_API grn_rc grn_ctx_connect(grn_ctx *ctx, const char *host, int port, int flags);
+GRN_API unsigned int grn_ctx_send(grn_ctx *ctx, const char *str, unsigned int str_len, int flags);
+GRN_API unsigned int grn_ctx_recv(grn_ctx *ctx, char **str, unsigned int *str_len, int *flags);
+
+typedef struct _grn_ctx_info grn_ctx_info;
+
+struct _grn_ctx_info {
+ int fd;
+ unsigned int com_status;
+ grn_obj *outbuf;
+ unsigned char stat;
+};
+
+GRN_API grn_rc grn_ctx_info_get(grn_ctx *ctx, grn_ctx_info *info);
+
+GRN_API grn_rc grn_set_segv_handler(void);
+GRN_API grn_rc grn_set_int_handler(void);
+GRN_API grn_rc grn_set_term_handler(void);
+
+/* hash */
+
+typedef struct _grn_hash grn_hash;
+typedef struct _grn_hash_cursor grn_hash_cursor;
+
+GRN_API grn_hash *grn_hash_create(grn_ctx *ctx, const char *path, unsigned int key_size,
+ unsigned int value_size, unsigned int flags);
+
+GRN_API grn_hash *grn_hash_open(grn_ctx *ctx, const char *path);
+
+GRN_API grn_rc grn_hash_close(grn_ctx *ctx, grn_hash *hash);
+
+GRN_API grn_id grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
+ unsigned int key_size, void **value, int *added);
+GRN_API grn_id grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key,
+ unsigned int key_size, void **value);
+
+GRN_API int grn_hash_get_key(grn_ctx *ctx, grn_hash *hash, grn_id id, void *keybuf, int bufsize);
+GRN_API int grn_hash_get_key2(grn_ctx *ctx, grn_hash *hash, grn_id id, grn_obj *bulk);
+GRN_API int grn_hash_get_value(grn_ctx *ctx, grn_hash *hash, grn_id id, void *valuebuf);
+GRN_API grn_rc grn_hash_set_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ const void *value, int flags);
+
+typedef struct _grn_table_delete_optarg grn_table_delete_optarg;
+
+struct _grn_table_delete_optarg {
+ int flags;
+ int (*func)(grn_ctx *ctx, grn_obj *, grn_id, void *);
+ void *func_arg;
+};
+
+GRN_API grn_rc grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ grn_table_delete_optarg *optarg);
+GRN_API grn_rc grn_hash_delete(grn_ctx *ctx, grn_hash *hash,
+ const void *key, unsigned int key_size,
+ grn_table_delete_optarg *optarg);
+
+GRN_API grn_hash_cursor *grn_hash_cursor_open(grn_ctx *ctx, grn_hash *hash,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags);
+GRN_API grn_id grn_hash_cursor_next(grn_ctx *ctx, grn_hash_cursor *c);
+GRN_API void grn_hash_cursor_close(grn_ctx *ctx, grn_hash_cursor *c);
+
+GRN_API int grn_hash_cursor_get_key(grn_ctx *ctx, grn_hash_cursor *c, void **key);
+GRN_API int grn_hash_cursor_get_value(grn_ctx *ctx, grn_hash_cursor *c, void **value);
+GRN_API grn_rc grn_hash_cursor_set_value(grn_ctx *ctx, grn_hash_cursor *c,
+ const void *value, int flags);
+
+GRN_API int grn_hash_cursor_get_key_value(grn_ctx *ctx, grn_hash_cursor *c,
+ void **key, unsigned int *key_size, void **value);
+
+GRN_API grn_rc grn_hash_cursor_delete(grn_ctx *ctx, grn_hash_cursor *c,
+ grn_table_delete_optarg *optarg);
+
+#define GRN_HASH_EACH(ctx,hash,id,key,key_size,value,block) do {\
+ grn_hash_cursor *_sc = grn_hash_cursor_open(ctx, hash, NULL, 0, NULL, 0, 0, -1, 0); \
+ if (_sc) {\
+ grn_id id;\
+ while ((id = grn_hash_cursor_next(ctx, _sc))) {\
+ grn_hash_cursor_get_key_value(ctx, _sc, (void **)(key),\
+ (key_size), (void **)(value));\
+ block\
+ }\
+ grn_hash_cursor_close(ctx, _sc);\
+ }\
+} while (0)
+
+/* array */
+
+typedef struct _grn_array grn_array;
+typedef struct _grn_array_cursor grn_array_cursor;
+
+GRN_API grn_array *grn_array_create(grn_ctx *ctx, const char *path,
+ unsigned int value_size, unsigned int flags);
+GRN_API grn_array *grn_array_open(grn_ctx *ctx, const char *path);
+GRN_API grn_rc grn_array_close(grn_ctx *ctx, grn_array *array);
+GRN_API grn_id grn_array_add(grn_ctx *ctx, grn_array *array, void **value);
+GRN_API grn_id grn_array_push(grn_ctx *ctx, grn_array *array,
+ void (*func)(grn_ctx *ctx, grn_array *array,
+ grn_id id, void *func_arg),
+ void *func_arg);
+GRN_API grn_id grn_array_pull(grn_ctx *ctx, grn_array *array, grn_bool blockp,
+ void (*func)(grn_ctx *ctx, grn_array *array,
+ grn_id id, void *func_arg),
+ void *func_arg);
+GRN_API void grn_array_unblock(grn_ctx *ctx, grn_array *array);
+GRN_API int grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id, void *valuebuf);
+GRN_API grn_rc grn_array_set_value(grn_ctx *ctx, grn_array *array, grn_id id,
+ const void *value, int flags);
+GRN_API grn_array_cursor *grn_array_cursor_open(grn_ctx *ctx, grn_array *array,
+ grn_id min, grn_id max,
+ int offset, int limit, int flags);
+GRN_API grn_id grn_array_cursor_next(grn_ctx *ctx, grn_array_cursor *cursor);
+GRN_API int grn_array_cursor_get_value(grn_ctx *ctx, grn_array_cursor *cursor, void **value);
+GRN_API grn_rc grn_array_cursor_set_value(grn_ctx *ctx, grn_array_cursor *cursor,
+ const void *value, int flags);
+GRN_API grn_rc grn_array_cursor_delete(grn_ctx *ctx, grn_array_cursor *cursor,
+ grn_table_delete_optarg *optarg);
+GRN_API void grn_array_cursor_close(grn_ctx *ctx, grn_array_cursor *cursor);
+GRN_API grn_rc grn_array_delete_by_id(grn_ctx *ctx, grn_array *array, grn_id id,
+ grn_table_delete_optarg *optarg);
+
+GRN_API grn_id grn_array_next(grn_ctx *ctx, grn_array *array, grn_id id);
+
+GRN_API void *_grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id);
+
+#define GRN_ARRAY_EACH(ctx,array,head,tail,id,value,block) do {\
+ grn_array_cursor *_sc = grn_array_cursor_open(ctx, array, head, tail, 0, -1, 0); \
+ if (_sc) {\
+ grn_id id;\
+ while ((id = grn_array_cursor_next(ctx, _sc))) {\
+ grn_array_cursor_get_value(ctx, _sc, (void **)(value));\
+ block\
+ }\
+ grn_array_cursor_close(ctx, _sc); \
+ }\
+} while (0)
+
+/* pat */
+
+typedef struct _grn_pat grn_pat;
+typedef struct _grn_pat_cursor grn_pat_cursor;
+
+GRN_API grn_pat *grn_pat_create(grn_ctx *ctx, const char *path, unsigned int key_size,
+ unsigned int value_size, unsigned int flags);
+
+GRN_API grn_pat *grn_pat_open(grn_ctx *ctx, const char *path);
+
+GRN_API grn_rc grn_pat_close(grn_ctx *ctx, grn_pat *pat);
+
+GRN_API grn_rc grn_pat_remove(grn_ctx *ctx, const char *path);
+
+GRN_API grn_id grn_pat_get(grn_ctx *ctx, grn_pat *pat, const void *key,
+ unsigned int key_size, void **value);
+GRN_API grn_id grn_pat_add(grn_ctx *ctx, grn_pat *pat, const void *key,
+ unsigned int key_size, void **value, int *added);
+
+GRN_API int grn_pat_get_key(grn_ctx *ctx, grn_pat *pat, grn_id id, void *keybuf, int bufsize);
+GRN_API int grn_pat_get_key2(grn_ctx *ctx, grn_pat *pat, grn_id id, grn_obj *bulk);
+GRN_API int grn_pat_get_value(grn_ctx *ctx, grn_pat *pat, grn_id id, void *valuebuf);
+GRN_API grn_rc grn_pat_set_value(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ const void *value, int flags);
+
+GRN_API grn_rc grn_pat_delete_by_id(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ grn_table_delete_optarg *optarg);
+GRN_API grn_rc grn_pat_delete(grn_ctx *ctx, grn_pat *pat, const void *key, unsigned int key_size,
+ grn_table_delete_optarg *optarg);
+GRN_API int grn_pat_delete_with_sis(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ grn_table_delete_optarg *optarg);
+
+typedef struct _grn_pat_scan_hit grn_pat_scan_hit;
+
+struct _grn_pat_scan_hit {
+ grn_id id;
+ unsigned int offset;
+ unsigned int length;
+};
+
+GRN_API int grn_pat_scan(grn_ctx *ctx, grn_pat *pat, const char *str, unsigned int str_len,
+ grn_pat_scan_hit *sh, unsigned int sh_size, const char **rest);
+
+GRN_API grn_rc grn_pat_prefix_search(grn_ctx *ctx, grn_pat *pat,
+ const void *key, unsigned int key_size, grn_hash *h);
+GRN_API grn_rc grn_pat_suffix_search(grn_ctx *ctx, grn_pat *pat,
+ const void *key, unsigned int key_size, grn_hash *h);
+GRN_API grn_id grn_pat_lcp_search(grn_ctx *ctx, grn_pat *pat,
+ const void *key, unsigned int key_size);
+
+GRN_API unsigned int grn_pat_size(grn_ctx *ctx, grn_pat *pat);
+
+GRN_API grn_pat_cursor *grn_pat_cursor_open(grn_ctx *ctx, grn_pat *pat,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags);
+GRN_API grn_id grn_pat_cursor_next(grn_ctx *ctx, grn_pat_cursor *c);
+GRN_API void grn_pat_cursor_close(grn_ctx *ctx, grn_pat_cursor *c);
+
+GRN_API int grn_pat_cursor_get_key(grn_ctx *ctx, grn_pat_cursor *c, void **key);
+GRN_API int grn_pat_cursor_get_value(grn_ctx *ctx, grn_pat_cursor *c, void **value);
+
+GRN_API int grn_pat_cursor_get_key_value(grn_ctx *ctx, grn_pat_cursor *c,
+ void **key, unsigned int *key_size, void **value);
+GRN_API grn_rc grn_pat_cursor_set_value(grn_ctx *ctx, grn_pat_cursor *c,
+ const void *value, int flags);
+GRN_API grn_rc grn_pat_cursor_delete(grn_ctx *ctx, grn_pat_cursor *c,
+ grn_table_delete_optarg *optarg);
+
+#define GRN_PAT_EACH(ctx,pat,id,key,key_size,value,block) do { \
+ grn_pat_cursor *_sc = grn_pat_cursor_open(ctx, pat, NULL, 0, NULL, 0, 0, -1, 0); \
+ if (_sc) {\
+ grn_id id;\
+ while ((id = grn_pat_cursor_next(ctx, _sc))) {\
+ grn_pat_cursor_get_key_value(ctx, _sc, (void **)(key),\
+ (key_size), (void **)(value));\
+ block\
+ }\
+ grn_pat_cursor_close(ctx, _sc);\
+ }\
+} while (0)
+
+/* dat */
+
+typedef struct _grn_dat grn_dat;
+typedef struct _grn_dat_cursor grn_dat_cursor;
+
+GRN_API grn_dat *grn_dat_create(grn_ctx *ctx, const char *path, unsigned int key_size,
+ unsigned int value_size, unsigned int flags);
+
+GRN_API grn_dat *grn_dat_open(grn_ctx *ctx, const char *path);
+
+GRN_API grn_rc grn_dat_close(grn_ctx *ctx, grn_dat *dat);
+
+GRN_API grn_rc grn_dat_remove(grn_ctx *ctx, const char *path);
+
+GRN_API grn_id grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key,
+ unsigned int key_size, void **value);
+GRN_API grn_id grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
+ unsigned int key_size, void **value, int *added);
+
+GRN_API int grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize);
+GRN_API int grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk);
+
+GRN_API grn_rc grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id,
+ grn_table_delete_optarg *optarg);
+GRN_API grn_rc grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_size,
+ grn_table_delete_optarg *optarg);
+
+GRN_API grn_rc grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id,
+ const void *dest_key, unsigned int dest_key_size);
+GRN_API grn_rc grn_dat_update(grn_ctx *ctx, grn_dat *dat,
+ const void *src_key, unsigned int src_key_size,
+ const void *dest_key, unsigned int dest_key_size);
+
+GRN_API unsigned int grn_dat_size(grn_ctx *ctx, grn_dat *dat);
+
+GRN_API grn_dat_cursor *grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags);
+GRN_API grn_id grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c);
+GRN_API void grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c);
+
+GRN_API int grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key);
+GRN_API grn_rc grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c,
+ grn_table_delete_optarg *optarg);
+
+#define GRN_DAT_EACH(ctx,dat,id,key,key_size,block) do {\
+ grn_dat_cursor *_sc = grn_dat_cursor_open(ctx, dat, NULL, 0, NULL, 0, 0, -1, 0);\
+ if (_sc) {\
+ grn_id id;\
+ unsigned int *_ks = (key_size);\
+ if (_ks) {\
+ while ((id = grn_dat_cursor_next(ctx, _sc))) {\
+ int _ks_raw = grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\
+ *(_ks) = (unsigned int)_ks_raw;\
+ block\
+ }\
+ } else {\
+ while ((id = grn_dat_cursor_next(ctx, _sc))) {\
+ grn_dat_cursor_get_key(ctx, _sc, (const void **)(key));\
+ block\
+ }\
+ }\
+ grn_dat_cursor_close(ctx, _sc);\
+ }\
+} while (0)
+
+/* buffered index builder */
+
+typedef struct _grn_ii grn_ii;
+typedef struct _grn_ii_buffer grn_ii_buffer;
+
+grn_ii_buffer *grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
+ long long unsigned int update_buffer_size);
+grn_rc grn_ii_buffer_append(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_id rid, unsigned int section, grn_obj *value);
+grn_rc grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer);
+grn_rc grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GROONGA_H */
diff --git a/storage/mroonga/vendor/groonga/include/groonga/Makefile.am b/storage/mroonga/vendor/groonga/include/groonga/Makefile.am
new file mode 100644
index 00000000000..5cfb61937fb
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/Makefile.am
@@ -0,0 +1,7 @@
+groonga_includedir = $(pkgincludedir)/groonga
+groonga_include_HEADERS = \
+ plugin.h \
+ tokenizer.h \
+ token_filter.h \
+ nfkc.h \
+ normalizer.h
diff --git a/storage/mroonga/vendor/groonga/include/groonga/nfkc.h b/storage/mroonga/vendor/groonga/include/groonga/nfkc.h
new file mode 100644
index 00000000000..3b7e294fb97
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/nfkc.h
@@ -0,0 +1,32 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_NFKC_H
+#define GRN_NFKC_H
+
+#include <groonga.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GRN_API grn_char_type grn_nfkc_char_type(const unsigned char *str);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_NFKC_H */
diff --git a/storage/mroonga/vendor/groonga/include/groonga/normalizer.h b/storage/mroonga/vendor/groonga/include/groonga/normalizer.h
new file mode 100644
index 00000000000..3ec843c6e07
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/normalizer.h
@@ -0,0 +1,55 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GROONGA_NORMALIER_H
+#define GROONGA_NORMALIER_H
+
+#include <stddef.h>
+
+#include <groonga/plugin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ grn_normalizer_register() registers a normalizer to the database
+ which is associated with `ctx'. `name_ptr' and `name_length' specify
+ the normalizer name. `name_length' can be `-1'. `-1' means that
+ `name_ptr` is NULL-terminated. Alphabetic letters ('A'-'Z' and
+ 'a'-'z'), digits ('0'-'9') and an underscore ('_') are capable
+ characters. `init', `next' and `fin' specify the normalizer
+ functions. `init' is called for initializing a tokenizer for a
+ document or query. `next' is called for extracting tokens one by
+ one. `fin' is called for finalizing a
+ tokenizer. grn_tokenizer_register() returns GRN_SUCCESS on success,
+ an error code on failure. See "groonga.h" for more details of
+ grn_proc_func and grn_user_data, that is used as an argument of
+ grn_proc_func.
+ */
+GRN_PLUGIN_EXPORT grn_rc grn_normalizer_register(grn_ctx *ctx,
+ const char *name_ptr,
+ int name_length,
+ grn_proc_func *init,
+ grn_proc_func *next,
+ grn_proc_func *fin);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* GROONGA_NORMALIER_H */
diff --git a/storage/mroonga/vendor/groonga/include/groonga/plugin.h b/storage/mroonga/vendor/groonga/include/groonga/plugin.h
new file mode 100644
index 00000000000..98676acf6be
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/plugin.h
@@ -0,0 +1,152 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PLUGIN_H
+#define GRN_PLUGIN_H
+
+#include <stddef.h>
+
+#include <groonga.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GRN_PLUGIN_INIT grn_plugin_impl_init
+#define GRN_PLUGIN_REGISTER grn_plugin_impl_register
+#define GRN_PLUGIN_FIN grn_plugin_impl_fin
+
+#if defined(_WIN32) || defined(_WIN64)
+# define GRN_PLUGIN_EXPORT __declspec(dllexport)
+#else /* defined(_WIN32) || defined(_WIN64) */
+# define GRN_PLUGIN_EXPORT
+#endif /* defined(_WIN32) || defined(_WIN64) */
+
+GRN_PLUGIN_EXPORT grn_rc GRN_PLUGIN_INIT(grn_ctx *ctx);
+GRN_PLUGIN_EXPORT grn_rc GRN_PLUGIN_REGISTER(grn_ctx *ctx);
+GRN_PLUGIN_EXPORT grn_rc GRN_PLUGIN_FIN(grn_ctx *ctx);
+
+/*
+ Don't call these functions directly. Use GRN_PLUGIN_MALLOC(),
+ GRN_PLUGIN_REALLOC() and GRN_PLUGIN_FREE() instead.
+ */
+GRN_API void *grn_plugin_malloc(grn_ctx *ctx, size_t size, const char *file,
+ int line, const char *func);
+GRN_API void *grn_plugin_realloc(grn_ctx *ctx, void *ptr, size_t size,
+ const char *file, int line, const char *func);
+GRN_API void grn_plugin_free(grn_ctx *ctx, void *ptr, const char *file,
+ int line, const char *func);
+
+#define GRN_PLUGIN_MALLOC(ctx, size) \
+ grn_plugin_malloc((ctx), (size), __FILE__, __LINE__, __FUNCTION__)
+#define GRN_PLUGIN_REALLOC(ctx, ptr, size) \
+ grn_plugin_realloc((ctx), (ptr), (size), __FILE__, __LINE__, __FUNCTION__)
+#define GRN_PLUGIN_FREE(ctx, ptr) \
+ grn_plugin_free((ctx), (ptr), __FILE__, __LINE__, __FUNCTION__)
+
+#define GRN_PLUGIN_LOG(ctx, level, ...) \
+ GRN_LOG((ctx), (level), __VA_ARGS__)
+
+/*
+ Don't call grn_plugin_set_error() directly. This function is used in
+ GRN_PLUGIN_SET_ERROR().
+ */
+GRN_API void grn_plugin_set_error(grn_ctx *ctx, grn_log_level level,
+ grn_rc error_code,
+ const char *file, int line, const char *func,
+ const char *format, ...) GRN_ATTRIBUTE_PRINTF(7);
+
+/*
+ Don't call these functions directly. grn_plugin_backtrace() and
+ grn_plugin_logtrace() are used in GRN_PLUGIN_SET_ERROR().
+ */
+GRN_API void grn_plugin_backtrace(grn_ctx *ctx);
+GRN_API void grn_plugin_logtrace(grn_ctx *ctx, grn_log_level level);
+
+/*
+ Don't use GRN_PLUGIN_SET_ERROR() directly. This macro is used in
+ GRN_PLUGIN_ERROR().
+ */
+#define GRN_PLUGIN_SET_ERROR(ctx, level, error_code, ...) do { \
+ grn_plugin_set_error(ctx, level, error_code, \
+ __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__); \
+ GRN_LOG(ctx, level, __VA_ARGS__); \
+ grn_plugin_backtrace(ctx); \
+ grn_plugin_logtrace(ctx, level); \
+} while (0)
+
+#define GRN_PLUGIN_ERROR(ctx, error_code, ...) \
+ GRN_PLUGIN_SET_ERROR(ctx, GRN_LOG_ERROR, error_code, __VA_ARGS__)
+
+typedef struct _grn_plugin_mutex grn_plugin_mutex;
+
+GRN_API grn_plugin_mutex *grn_plugin_mutex_open(grn_ctx *ctx);
+
+/*
+ grn_plugin_mutex_create() is deprecated. Use grn_plugin_mutex_open()
+ instead.
+*/
+GRN_API grn_plugin_mutex *grn_plugin_mutex_create(grn_ctx *ctx);
+
+GRN_API void grn_plugin_mutex_close(grn_ctx *ctx, grn_plugin_mutex *mutex);
+
+/*
+ grn_plugin_mutex_destroy() is deprecated. Use grn_plugin_mutex_close()
+ instead.
+*/
+GRN_API void grn_plugin_mutex_destroy(grn_ctx *ctx, grn_plugin_mutex *mutex);
+
+GRN_API void grn_plugin_mutex_lock(grn_ctx *ctx, grn_plugin_mutex *mutex);
+
+GRN_API void grn_plugin_mutex_unlock(grn_ctx *ctx, grn_plugin_mutex *mutex);
+
+GRN_API grn_obj *grn_plugin_proc_alloc(grn_ctx *ctx, grn_user_data *user_data,
+ grn_id domain, grn_obj_flags flags);
+
+GRN_API grn_obj *grn_plugin_proc_get_var(grn_ctx *ctx, grn_user_data *user_data,
+ const char *name, int name_size);
+
+GRN_API grn_obj *grn_plugin_proc_get_var_by_offset(grn_ctx *ctx,
+ grn_user_data *user_data,
+ unsigned int offset);
+
+GRN_API const char *grn_plugin_win32_base_dir(void);
+
+GRN_API int grn_plugin_charlen(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding);
+
+GRN_API int grn_plugin_isspace(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding);
+
+GRN_API grn_rc grn_plugin_expr_var_init(grn_ctx *ctx,
+ grn_expr_var *var,
+ const char *name,
+ int name_size);
+
+GRN_API grn_obj * grn_plugin_command_create(grn_ctx *ctx,
+ const char *name,
+ int name_size,
+ grn_proc_func func,
+ unsigned int n_vars,
+ grn_expr_var *vars);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_PLUGIN_H */
diff --git a/storage/mroonga/vendor/groonga/include/groonga/token_filter.h b/storage/mroonga/vendor/groonga/include/groonga/token_filter.h
new file mode 100644
index 00000000000..2ae553b8630
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/token_filter.h
@@ -0,0 +1,71 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PLUGIN_TOKEN_FILTER_H
+#define GRN_PLUGIN_TOKEN_FILTER_H
+
+#include <stddef.h>
+
+#include <groonga/tokenizer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef void *grn_token_filter_init_func(grn_ctx *ctx,
+ grn_obj *table,
+ grn_token_mode mode);
+
+typedef void grn_token_filter_filter_func(grn_ctx *ctx,
+ grn_token *current_token,
+ grn_token *next_token,
+ void *user_data);
+
+typedef void grn_token_filter_fin_func(grn_ctx *ctx,
+ void *user_data);
+
+
+/*
+ grn_token_filter_register() registers a plugin to the database which is
+ associated with `ctx'. `plugin_name_ptr' and `plugin_name_length' specify the
+ plugin name. Alphabetic letters ('A'-'Z' and 'a'-'z'), digits ('0'-'9') and
+ an underscore ('_') are capable characters.
+
+ `init', `filter' and `fin' specify the plugin functions.
+
+ `init' is called for initializing a token_filter for a document or
+ query.
+
+ `filter' is called for filtering tokens one by one.
+
+ `fin' is called for finalizing a token_filter.
+
+ grn_token_filter_register() returns GRN_SUCCESS on success, an error
+ code on failure.
+ */
+GRN_PLUGIN_EXPORT grn_rc grn_token_filter_register(grn_ctx *ctx,
+ const char *plugin_name_ptr,
+ int plugin_name_length,
+ grn_token_filter_init_func *init,
+ grn_token_filter_filter_func *filter,
+ grn_token_filter_fin_func *fin);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* GRN_PLUGIN_TOKEN_FILTER_H */
diff --git a/storage/mroonga/vendor/groonga/include/groonga/tokenizer.h b/storage/mroonga/vendor/groonga/include/groonga/tokenizer.h
new file mode 100644
index 00000000000..9792e018b31
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/include/groonga/tokenizer.h
@@ -0,0 +1,257 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PLUGIN_TOKENIZER_H
+#define GRN_PLUGIN_TOKENIZER_H
+
+#include <stddef.h>
+
+#include <groonga/plugin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define GRN_TOKENIZER_TOKENIZED_DELIMITER_UTF8 "\xEF\xBF\xBE"
+#define GRN_TOKENIZER_TOKENIZED_DELIMITER_UTF8_LEN 3
+
+/*
+ grn_token_mode describes propose for tokenization.
+
+ `GRN_TOKEN_GET`: Tokenization for search.
+
+ `GRN_TOKEN_ADD`: Tokenization for adding token to index.
+
+ `GRN_TOKEN_DEL`: Tokenization for deleting token from index.
+
+ @since 4.0.7
+ */
+typedef enum {
+ GRN_TOKEN_GET = 0,
+ GRN_TOKEN_ADD,
+ GRN_TOKEN_DEL
+} grn_token_mode;
+
+/*
+ grn_tokenizer_charlen() returns the length (#bytes) of the first character
+ in the string specified by `str_ptr' and `str_length'. If the starting bytes
+ are invalid as a character, grn_tokenizer_charlen() returns 0. See
+ grn_encoding in "groonga.h" for more details of `encoding'
+
+ Deprecated. Use grn_plugin_charlen() instead.
+ */
+int grn_tokenizer_charlen(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding);
+
+/*
+ grn_tokenizer_isspace() returns the length (#bytes) of the first character
+ in the string specified by `str_ptr' and `str_length' if it is a space
+ character. Otherwise, grn_tokenizer_isspace() returns 0.
+
+ Deprecated. Use grn_plugin_isspace() instead.
+ */
+int grn_tokenizer_isspace(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding);
+
+/*
+ grn_tokenizer_is_tokenized_delimiter() returns whether is the first
+ character in the string specified by `str_ptr' and `str_length' the
+ special tokenized delimiter character or not.
+ */
+grn_bool grn_tokenizer_is_tokenized_delimiter(grn_ctx *ctx,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding);
+
+/*
+ grn_tokenizer_have_tokenized_delimiter() returns whether is there
+ the special delimiter character in the string specified by `str_ptr'
+ and `str_length' the special tokenized delimiter character or not.
+ */
+GRN_PLUGIN_EXPORT grn_bool grn_tokenizer_have_tokenized_delimiter(grn_ctx *ctx,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding);
+
+/*
+ grn_tokenizer_query is a structure for storing a query. See the following
+ functions.
+ */
+typedef struct _grn_tokenizer_query grn_tokenizer_query;
+
+struct _grn_tokenizer_query {
+ grn_obj *normalized_query;
+ char *query_buf;
+ const char *ptr;
+ unsigned int length;
+ grn_encoding encoding;
+ unsigned int flags;
+ grn_bool have_tokenized_delimiter;
+ grn_token_mode token_mode;
+};
+
+/*
+ grn_tokenizer_query_open() parses `args' and returns a new object of
+ grn_tokenizer_query. The new object stores information of the query.
+ grn_tokenizer_query_open() normalizes the query if the target table
+ requires normalization. grn_tokenizer_query_open() returns NULL if
+ something goes wrong. Note that grn_tokenizer_query_open() must be called
+ just once in the function that initializes a tokenizer.
+
+ See `GRN_STRING_*' flags for `normalize_flags'.
+ */
+GRN_PLUGIN_EXPORT grn_tokenizer_query *grn_tokenizer_query_open(grn_ctx *ctx,
+ int num_args, grn_obj **args,
+ unsigned int normalize_flags);
+
+/*
+ grn_tokenizer_query_create() is deprecated. Use grn_tokenizer_query_open()
+ instead.
+*/
+
+grn_tokenizer_query *grn_tokenizer_query_create(grn_ctx *ctx,
+ int num_args, grn_obj **args);
+
+/*
+ grn_tokenizer_query_close() finalizes an object of grn_tokenizer_query
+ and then frees memory allocated for that object.
+ */
+GRN_PLUGIN_EXPORT void grn_tokenizer_query_close(grn_ctx *ctx, grn_tokenizer_query *query);
+
+/*
+ grn_tokenizer_query_destroy() is deprecated. Use grn_tokenizer_query_close()
+ instead.
+ */
+void grn_tokenizer_query_destroy(grn_ctx *ctx, grn_tokenizer_query *query);
+
+/*
+ grn_tokenizer_token is needed to return tokens. A grn_tokenizer_token object
+ stores a token to be returned and it must be maintained until a request for
+ next token or finalization comes.
+ */
+typedef struct _grn_tokenizer_token grn_tokenizer_token;
+
+struct _grn_tokenizer_token {
+ grn_obj str;
+ grn_obj status;
+};
+
+/*
+ grn_tokenizer_token_init() initializes `token'. Note that an initialized
+ object must be finalized by grn_tokenizer_token_fin().
+ */
+GRN_PLUGIN_EXPORT void grn_tokenizer_token_init(grn_ctx *ctx, grn_tokenizer_token *token);
+
+/*
+ grn_tokenizer_token_fin() finalizes `token' that has been initialized by
+ grn_tokenizer_token_init().
+ */
+GRN_PLUGIN_EXPORT void grn_tokenizer_token_fin(grn_ctx *ctx, grn_tokenizer_token *token);
+
+/*
+ * grn_tokenizer_status is a flag set for tokenizer status codes.
+ * If a document or query contains no tokens, push an empty string with
+ * GRN_TOKENIZER_TOKEN_LAST as a token.
+ */
+typedef unsigned int grn_tokenizer_status;
+
+/* GRN_TOKENIZER_TOKEN_CONTINUE means that the next token is not the last one. */
+#define GRN_TOKENIZER_TOKEN_CONTINUE (0)
+/* GRN_TOKENIZER_TOKEN_LAST means that the next token is the last one. */
+#define GRN_TOKENIZER_TOKEN_LAST (0x01L<<0)
+/* GRN_TOKENIZER_TOKEN_OVERLAP means that ... */
+#define GRN_TOKENIZER_TOKEN_OVERLAP (0x01L<<1)
+/* GRN_TOKENIZER_TOKEN_UNMATURED means that ... */
+#define GRN_TOKENIZER_TOKEN_UNMATURED (0x01L<<2)
+/* GRN_TOKENIZER_TOKEN_REACH_END means that ... */
+#define GRN_TOKENIZER_TOKEN_REACH_END (0x01L<<3)
+/* GRN_TOKENIZER_TOKEN_SKIP means that the token is skipped */
+#define GRN_TOKENIZER_TOKEN_SKIP (0x01L<<4)
+/* GRN_TOKENIZER_TOKEN_SKIP_WITH_POSITION means that the token and postion is skipped */
+#define GRN_TOKENIZER_TOKEN_SKIP_WITH_POSITION (0x01L<<5)
+
+/*
+ * GRN_TOKENIZER_CONTINUE and GRN_TOKENIZER_LAST are deprecated. They
+ * are just for backward compatibility. Use
+ * GRN_TOKENIZER_TOKEN_CONTINUE and GRN_TOKENIZER_TOKEN_LAST
+ * instead.
+ */
+#define GRN_TOKENIZER_CONTINUE GRN_TOKENIZER_TOKEN_CONTINUE
+#define GRN_TOKENIZER_LAST GRN_TOKENIZER_TOKEN_LAST
+
+typedef struct _grn_token grn_token;
+
+GRN_PLUGIN_EXPORT grn_obj *grn_token_get_data(grn_ctx *ctx,
+ grn_token *token);
+GRN_PLUGIN_EXPORT grn_rc grn_token_set_data(grn_ctx *ctx,
+ grn_token *token,
+ const char *str_ptr,
+ int str_length);
+GRN_PLUGIN_EXPORT grn_tokenizer_status grn_token_get_status(grn_ctx *ctx,
+ grn_token *token);
+GRN_PLUGIN_EXPORT grn_rc grn_token_set_status(grn_ctx *ctx,
+ grn_token *token,
+ grn_tokenizer_status status);
+
+
+/*
+ grn_tokenizer_token_push() pushes the next token into `token'. Note that
+ grn_tokenizer_token_push() does not make a copy of the given string. This
+ means that you have to maintain a memory space allocated to the string.
+ Also note that the grn_tokenizer_token object must be maintained until the
+ request for the next token or finalization comes. See grn_tokenizer_status in
+ this header for more details of `status'.
+ */
+GRN_PLUGIN_EXPORT void grn_tokenizer_token_push(grn_ctx *ctx, grn_tokenizer_token *token,
+ const char *str_ptr, unsigned int str_length,
+ grn_tokenizer_status status);
+
+/*
+ grn_tokenizer_tokenized_delimiter_next() extracts the next token
+ from the string specified by `str_ptr' and `str_length' and pushes
+ the next token into `token'. It returns the string after the next
+ token. The returned string may be `NULL' when all tokens are
+ extracted.
+ */
+GRN_PLUGIN_EXPORT const char *grn_tokenizer_tokenized_delimiter_next(grn_ctx *ctx,
+ grn_tokenizer_token *token,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding);
+
+/*
+ grn_tokenizer_register() registers a plugin to the database which is
+ associated with `ctx'. `plugin_name_ptr' and `plugin_name_length' specify the
+ plugin name. Alphabetic letters ('A'-'Z' and 'a'-'z'), digits ('0'-'9') and
+ an underscore ('_') are capable characters. `init', `next' and `fin' specify
+ the plugin functions. `init' is called for initializing a tokenizer for a
+ document or query. `next' is called for extracting tokens one by one. `fin'
+ is called for finalizing a tokenizer. grn_tokenizer_register() returns
+ GRN_SUCCESS on success, an error code on failure. See "groonga.h" for more
+ details of grn_proc_func and grn_user_data, that is used as an argument of
+ grn_proc_func.
+ */
+GRN_PLUGIN_EXPORT grn_rc grn_tokenizer_register(grn_ctx *ctx, const char *plugin_name_ptr,
+ unsigned int plugin_name_length,
+ grn_proc_func *init, grn_proc_func *next,
+ grn_proc_func *fin);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* GRN_PLUGIN_TOKENIZER_H */
diff --git a/storage/mroonga/vendor/groonga/lib/CMakeLists.txt b/storage/mroonga/vendor/groonga/lib/CMakeLists.txt
new file mode 100644
index 00000000000..d19c88e4311
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/CMakeLists.txt
@@ -0,0 +1,89 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+add_definitions(
+ -DGRN_DAT_EXPORT
+ )
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/dat
+ ${MRUBY_INCLUDE_DIRS})
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/sources.am LIBGROONGA_SOURCES)
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/dat/sources.am LIBGRNDAT_SOURCES)
+string(REGEX REPLACE "([^;]+)" "dat/\\1"
+ LIBGRNDAT_SOURCES "${LIBGRNDAT_SOURCES}")
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/mrb/sources.am LIBGRNMRB_SOURCES)
+string(REGEX REPLACE "([^;]+)" "mrb/\\1"
+ LIBGRNMRB_SOURCES "${LIBGRNMRB_SOURCES}")
+
+set_source_files_properties(${LIBGROONGA_SOURCES} ${LIBGRNMRB_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+set_source_files_properties(dat.cpp ${LIBGRNDAT_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_CXX_COMPILE_FLAGS}")
+
+if(MRN_GROONGA_BUNDLED)
+ add_library(libgroonga STATIC
+ ${LIBGROONGA_SOURCES}
+ ${LIBGRNDAT_SOURCES}
+ ${LIBGRNMRB_SOURCES}
+ ${MRUBY_LIBS})
+else()
+ add_library(libgroonga SHARED
+ ${LIBGROONGA_SOURCES}
+ ${LIBGRNDAT_SOURCES}
+ ${LIBGRNMRB_SOURCES}
+ ${MRUBY_LIBS})
+endif()
+set_target_properties(libgroonga PROPERTIES OUTPUT_NAME "groonga")
+if(NOT MRN_GROONGA_BUNDLED)
+ target_link_libraries(libgroonga
+ ${EXECINFO_LIBS}
+ ${RT_LIBS}
+ ${PTHREAD_LIBS}
+ ${Z_LIBS}
+ ${LZO2_LIBS}
+ ${DL_LIBS}
+ ${WS2_32_LIBS})
+ install(TARGETS libgroonga
+ ARCHIVE DESTINATION "${LIB_DIR}"
+ LIBRARY DESTINATION "${LIB_DIR}"
+ RUNTIME DESTINATION "${BIN_DIR}")
+else()
+ target_link_libraries(libgroonga
+ ${EXECINFO_LIBS}
+ ${RT_LIBS}
+ ${PTHREAD_LIBS}
+ ${Z_LIBS}
+ ${LZO2_LIBS}
+ ${DL_LIBS}
+ ${M_LIBS}
+ ${STDCPP_LIBS}
+ ${WS2_32_LIBS})
+endif()
+
+if(GRN_WITH_MRUBY)
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/mrb/scripts/sources.am
+ RUBY_SCRIPTS)
+ string(REGEX REPLACE "([^;]+)" "mrb/scripts/\\1"
+ RUBY_SCRIPTS "${RUBY_SCRIPTS}")
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(
+ FILES ${RUBY_SCRIPTS}
+ DESTINATION "${GRN_RELATIVE_RUBY_SCRIPTS_DIR}")
+ endif()
+endif()
diff --git a/storage/mroonga/vendor/groonga/lib/Makefile.am b/storage/mroonga/vendor/groonga/lib/Makefile.am
new file mode 100644
index 00000000000..047c41a25da
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/Makefile.am
@@ -0,0 +1,46 @@
+SUBDIRS = \
+ dat \
+ mrb
+
+lib_LTLIBRARIES = libgroonga.la
+
+include $(top_srcdir)/version.sh
+AM_CFLAGS = \
+ $(NO_STRICT_ALIASING_CFLAGS) \
+ $(COVERAGE_CFLAGS) \
+ $(GRN_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+DEFAULT_INCLUDES = -I$(top_builddir) -I$(top_srcdir)/include
+DEFS += -D_REENTRANT $(GRN_DEFS) -DGRN_DAT_EXPORT
+
+include sources.am
+
+libgroonga_la_LDFLAGS = \
+ -version-info $(LT_VERSION_INFO) \
+ -no-undefined \
+ $(WINDOWS_LDFLAGS)
+
+libgroonga_la_LIBADD = \
+ dat/libgrndat.la \
+ mrb/libgrnmrb.la \
+ $(MESSAGE_PACK_LIBS) \
+ $(MRUBY_LIBS)
+
+if WITH_LEMON
+BUILT_SOURCES = \
+ ecmascript.c
+
+SUFFIXES = .lemon .c
+
+.lemon.c:
+ $(LEMON) $<
+endif
+
+EXTRA_DIST = \
+ ecmascript.c \
+ ecmascript.h \
+ ecmascript.lemon \
+ CMakeLists.txt
+
+CLEANFILES = *.gcno *.gcda
diff --git a/storage/mroonga/vendor/groonga/lib/com.c b/storage/mroonga/vendor/groonga/lib/com.c
new file mode 100644
index 00000000000..172ad91ed1e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/com.c
@@ -0,0 +1,1161 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "groonga_in.h"
+
+#include <stdio.h>
+#include <string.h>
+#include "ctx_impl.h"
+
+#ifdef WIN32
+# include <ws2tcpip.h>
+#else
+# ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+# endif /* HAVE_SYS_SOCKET_H */
+# ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+# endif /* HAVE_NETINET_IN_H */
+# ifdef HAVE_NETINET_TCP_H
+# include <netinet/tcp.h>
+# endif /* HAVE_NETINET_TCP_H */
+# ifdef HAVE_SIGNAL_H
+# include <signal.h>
+# endif /* HAVE_SIGNAL_H */
+#endif /* WIN32 */
+
+#include "ctx.h"
+#include "com.h"
+
+#ifndef PF_INET
+#define PF_INET AF_INET
+#endif /* PF_INET */
+
+#ifndef SOL_TCP
+# ifdef IPPROTO_TCP
+# define SOL_TCP IPPROTO_TCP
+# else
+# define SOL_TCP 6
+# endif /* IPPROTO_TCP */
+#endif /* SOL_TCP */
+
+#ifndef USE_MSG_MORE
+# ifdef MSG_MORE
+# undef MSG_MORE
+# endif
+# define MSG_MORE 0
+#endif /* USE_MSG_MORE */
+
+
+#ifndef USE_MSG_NOSIGNAL
+# ifdef MSG_NOSIGNAL
+# undef MSG_NOSIGNAL
+# endif
+# define MSG_NOSIGNAL 0
+#endif /* USE_MSG_NOSIGNAL */
+/******* grn_com_queue ********/
+
+grn_rc
+grn_com_queue_enque(grn_ctx *ctx, grn_com_queue *q, grn_com_queue_entry *e)
+{
+ CRITICAL_SECTION_ENTER(q->cs);
+ e->next = NULL;
+ *q->tail = e;
+ q->tail = &e->next;
+ CRITICAL_SECTION_LEAVE(q->cs);
+ /*
+ uint8_t i = q->last + 1;
+ e->next = NULL;
+ if (q->first == i || q->next) {
+ CRITICAL_SECTION_ENTER(q->cs);
+ if (q->first == i || q->next) {
+ *q->tail = e;
+ q->tail = &e->next;
+ } else {
+ q->bins[q->last] = e;
+ q->last = i;
+ }
+ CRITICAL_SECTION_LEAVE(q->cs);
+ } else {
+ q->bins[q->last] = e;
+ q->last = i;
+ }
+ */
+ return GRN_SUCCESS;
+}
+
+grn_com_queue_entry *
+grn_com_queue_deque(grn_ctx *ctx, grn_com_queue *q)
+{
+ grn_com_queue_entry *e = NULL;
+
+ CRITICAL_SECTION_ENTER(q->cs);
+ if (q->next) {
+ e = q->next;
+ if (!(q->next = e->next)) { q->tail = &q->next; }
+ }
+ CRITICAL_SECTION_LEAVE(q->cs);
+
+ /*
+ if (q->first == q->last) {
+ if (q->next) {
+ CRITICAL_SECTION_ENTER(q->cs);
+ e = q->next;
+ if (!(q->next = e->next)) { q->tail = &q->next; }
+ CRITICAL_SECTION_LEAVE(q->cs);
+ }
+ } else {
+ e = q->bins[q->first++];
+ }
+ */
+ return e;
+}
+
+/******* grn_msg ********/
+
+grn_obj *
+grn_msg_open(grn_ctx *ctx, grn_com *com, grn_com_queue *old)
+{
+ grn_msg *msg = NULL;
+ if (old && (msg = (grn_msg *)grn_com_queue_deque(ctx, old))) {
+ if (msg->ctx != ctx) {
+ ERR(GRN_INVALID_ARGUMENT, "ctx unmatch");
+ return NULL;
+ }
+ GRN_BULK_REWIND(&msg->qe.obj);
+ } else if ((msg = GRN_MALLOCN(grn_msg, 1))) {
+ GRN_OBJ_INIT(&msg->qe.obj, GRN_MSG, 0, GRN_DB_TEXT);
+ msg->qe.obj.header.impl_flags |= GRN_OBJ_ALLOCATED;
+ msg->ctx = ctx;
+ }
+ msg->qe.next = NULL;
+ msg->u.peer = com;
+ msg->old = old;
+ memset(&msg->header, 0, sizeof(grn_com_header));
+ return (grn_obj *)msg;
+}
+
+grn_obj *
+grn_msg_open_for_reply(grn_ctx *ctx, grn_obj *query, grn_com_queue *old)
+{
+ grn_msg *req = (grn_msg *)query, *msg = NULL;
+ if (req && (msg = (grn_msg *)grn_msg_open(ctx, req->u.peer, old))) {
+ msg->edge_id = req->edge_id;
+ msg->header.proto = req->header.proto == GRN_COM_PROTO_MBREQ
+ ? GRN_COM_PROTO_MBRES : req->header.proto;
+ }
+ return (grn_obj *)msg;
+}
+
+grn_rc
+grn_msg_close(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_msg *msg = (grn_msg *)obj;
+ if (ctx == msg->ctx) { return grn_obj_close(ctx, obj); }
+ return grn_com_queue_enque(ctx, msg->old, (grn_com_queue_entry *)msg);
+}
+
+grn_rc
+grn_msg_set_property(grn_ctx *ctx, grn_obj *obj,
+ uint16_t status, uint32_t key_size, uint8_t extra_size)
+{
+ grn_com_header *header = &((grn_msg *)obj)->header;
+ header->status = htons(status);
+ header->keylen = htons(key_size);
+ header->level = extra_size;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_msg_send(grn_ctx *ctx, grn_obj *msg, int flags)
+{
+ grn_rc rc;
+ grn_msg *m = (grn_msg *)msg;
+ grn_com *peer = m->u.peer;
+ grn_com_header *header = &m->header;
+ if (GRN_COM_QUEUE_EMPTYP(&peer->new_)) {
+ switch (header->proto) {
+ case GRN_COM_PROTO_HTTP :
+ {
+ ssize_t ret;
+ ret = send(peer->fd, GRN_BULK_HEAD(msg), GRN_BULK_VSIZE(msg), MSG_NOSIGNAL);
+ if (ret == -1) { SERR("send"); }
+ if (ctx->rc != GRN_OPERATION_WOULD_BLOCK) {
+ grn_com_queue_enque(ctx, m->old, (grn_com_queue_entry *)msg);
+ return ctx->rc;
+ }
+ }
+ break;
+ case GRN_COM_PROTO_GQTP :
+ {
+ if ((flags & GRN_CTX_MORE)) { flags |= GRN_CTX_QUIET; }
+ if (ctx->stat == GRN_CTX_QUIT) { flags |= GRN_CTX_QUIT; }
+ header->qtype = (uint8_t) ctx->impl->output_type;
+ header->keylen = 0;
+ header->level = 0;
+ header->flags = flags;
+ header->status = htons((uint16_t)ctx->rc);
+ header->opaque = 0;
+ header->cas = 0;
+ //todo : MSG_DONTWAIT
+ rc = grn_com_send(ctx, peer, header,
+ GRN_BULK_HEAD(msg), GRN_BULK_VSIZE(msg), 0);
+ if (rc != GRN_OPERATION_WOULD_BLOCK) {
+ grn_com_queue_enque(ctx, m->old, (grn_com_queue_entry *)msg);
+ return rc;
+ }
+ }
+ break;
+ case GRN_COM_PROTO_MBREQ :
+ return GRN_FUNCTION_NOT_IMPLEMENTED;
+ case GRN_COM_PROTO_MBRES :
+ rc = grn_com_send(ctx, peer, header,
+ GRN_BULK_HEAD(msg), GRN_BULK_VSIZE(msg),
+ (flags & GRN_CTX_MORE) ? MSG_MORE :0);
+ if (rc != GRN_OPERATION_WOULD_BLOCK) {
+ grn_com_queue_enque(ctx, m->old, (grn_com_queue_entry *)msg);
+ return rc;
+ }
+ break;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ MUTEX_LOCK(peer->ev->mutex);
+ rc = grn_com_queue_enque(ctx, &peer->new_, (grn_com_queue_entry *)msg);
+ COND_SIGNAL(peer->ev->cond);
+ MUTEX_UNLOCK(peer->ev->mutex);
+ return rc;
+}
+
+/******* grn_com ********/
+
+grn_rc
+grn_com_init(void)
+{
+#ifdef WIN32
+ WSADATA wd;
+ if (WSAStartup(MAKEWORD(2, 0), &wd) != 0) {
+ grn_ctx *ctx = &grn_gctx;
+ SERR("WSAStartup");
+ }
+#else /* WIN32 */
+#ifndef USE_MSG_NOSIGNAL
+ if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
+ grn_ctx *ctx = &grn_gctx;
+ SERR("signal");
+ }
+#endif /* USE_MSG_NOSIGNAL */
+#endif /* WIN32 */
+ return grn_gctx.rc;
+}
+
+void
+grn_com_fin(void)
+{
+#ifdef WIN32
+ WSACleanup();
+#endif /* WIN32 */
+}
+
+grn_rc
+grn_com_event_init(grn_ctx *ctx, grn_com_event *ev, int max_nevents, int data_size)
+{
+ ev->max_nevents = max_nevents;
+ if ((ev->hash = grn_hash_create(ctx, NULL, sizeof(grn_sock), data_size, 0))) {
+ MUTEX_INIT(ev->mutex);
+ COND_INIT(ev->cond);
+ GRN_COM_QUEUE_INIT(&ev->recv_old);
+#ifndef USE_SELECT
+#ifdef USE_EPOLL
+ if ((ev->events = GRN_MALLOC(sizeof(struct epoll_event) * max_nevents))) {
+ if ((ev->epfd = epoll_create(max_nevents)) != -1) {
+ goto exit;
+ } else {
+ SERR("epoll_create");
+ }
+ GRN_FREE(ev->events);
+ }
+#else /* USE_EPOLL */
+#ifdef USE_KQUEUE
+ if ((ev->events = GRN_MALLOC(sizeof(struct kevent) * max_nevents))) {
+ if ((ev->kqfd = kqueue()) != -1) {
+ goto exit;
+ } else {
+ SERR("kqueue");
+ }
+ GRN_FREE(ev->events);
+ }
+#else /* USE_KQUEUE */
+ if ((ev->events = GRN_MALLOC(sizeof(struct pollfd) * max_nevents))) {
+ goto exit;
+ }
+#endif /* USE_KQUEUE*/
+#endif /* USE_EPOLL */
+ grn_hash_close(ctx, ev->hash);
+ ev->hash = NULL;
+ ev->events = NULL;
+#else /* USE_SELECT */
+
+#endif /* USE_SELECT */
+ }
+exit :
+ return ctx->rc;
+}
+
+grn_rc
+grn_com_event_fin(grn_ctx *ctx, grn_com_event *ev)
+{
+ grn_obj *msg;
+ while ((msg = (grn_obj *)grn_com_queue_deque(ctx, &ev->recv_old))) {
+ grn_msg_close(ctx, msg);
+ }
+ if (ev->hash) { grn_hash_close(ctx, ev->hash); }
+#ifndef USE_SELECT
+ if (ev->events) { GRN_FREE(ev->events); }
+#ifdef USE_EPOLL
+ GRN_CLOSE(ev->epfd);
+#endif /* USE_EPOLL */
+#ifdef USE_KQUEUE
+ GRN_CLOSE(ev->kqfd);
+#endif /* USE_KQUEUE*/
+#endif /* USE_SELECT */
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_com_event_add(grn_ctx *ctx, grn_com_event *ev, grn_sock fd, int events, grn_com **com)
+{
+ grn_com *c;
+ /* todo : expand events */
+ if (!ev || *ev->hash->n_entries == ev->max_nevents) {
+ if (ev) { GRN_LOG(ctx, GRN_LOG_ERROR, "too many connections (%d)", ev->max_nevents); }
+ return GRN_INVALID_ARGUMENT;
+ }
+#ifdef USE_EPOLL
+ {
+ struct epoll_event e;
+ memset(&e, 0, sizeof(struct epoll_event));
+ e.data.fd = (fd);
+ e.events = (__uint32_t) events;
+ if (epoll_ctl(ev->epfd, EPOLL_CTL_ADD, (fd), &e) == -1) {
+ SERR("epoll_ctl");
+ return ctx->rc;
+ }
+ }
+#endif /* USE_EPOLL*/
+#ifdef USE_KQUEUE
+ {
+ struct kevent e;
+ /* todo: udata should have fd */
+ EV_SET(&e, (fd), events, EV_ADD, 0, 0, NULL);
+ if (kevent(ev->kqfd, &e, 1, NULL, 0, NULL) == -1) {
+ SERR("kevent");
+ return ctx->rc;
+ }
+ }
+#endif /* USE_KQUEUE */
+ {
+ if (grn_hash_add(ctx, ev->hash, &fd, sizeof(grn_sock), (void **)&c, NULL)) {
+ c->ev = ev;
+ c->fd = fd;
+ c->events = events;
+ if (com) { *com = c; }
+ }
+ }
+ return ctx->rc;
+}
+
+grn_rc
+grn_com_event_mod(grn_ctx *ctx, grn_com_event *ev, grn_sock fd, int events, grn_com **com)
+{
+ grn_com *c;
+ if (!ev) { return GRN_INVALID_ARGUMENT; }
+ if (grn_hash_get(ctx, ev->hash, &fd, sizeof(grn_sock), (void **)&c)) {
+ if (c->fd != fd) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_com_event_mod fd unmatch %d != %d", c->fd, fd);
+ return GRN_OBJECT_CORRUPT;
+ }
+ if (com) { *com = c; }
+ if (c->events != events) {
+#ifdef USE_EPOLL
+ struct epoll_event e;
+ memset(&e, 0, sizeof(struct epoll_event));
+ e.data.fd = (fd);
+ e.events = (__uint32_t) events;
+ if (epoll_ctl(ev->epfd, EPOLL_CTL_MOD, (fd), &e) == -1) {
+ SERR("epoll_ctl");
+ return ctx->rc;
+ }
+#endif /* USE_EPOLL*/
+#ifdef USE_KQUEUE
+ // experimental
+ struct kevent e[2];
+ EV_SET(&e[0], (fd), GRN_COM_POLLIN|GRN_COM_POLLOUT, EV_DELETE, 0, 0, NULL);
+ EV_SET(&e[1], (fd), events, EV_ADD, 0, 0, NULL);
+ if (kevent(ev->kqfd, e, 2, NULL, 0, NULL) == -1) {
+ SERR("kevent");
+ return ctx->rc;
+ }
+#endif /* USE_KQUEUE */
+ c->events = events;
+ }
+ return GRN_SUCCESS;
+ }
+ return GRN_INVALID_ARGUMENT;
+}
+
+grn_rc
+grn_com_event_del(grn_ctx *ctx, grn_com_event *ev, grn_sock fd)
+{
+ if (!ev) { return GRN_INVALID_ARGUMENT; }
+ {
+ grn_com *c;
+ grn_id id = grn_hash_get(ctx, ev->hash, &fd, sizeof(grn_sock), (void **)&c);
+ if (id) {
+#ifdef USE_EPOLL
+ if (!c->closed) {
+ struct epoll_event e;
+ memset(&e, 0, sizeof(struct epoll_event));
+ e.data.fd = fd;
+ e.events = c->events;
+ if (epoll_ctl(ev->epfd, EPOLL_CTL_DEL, fd, &e) == -1) {
+ SERR("epoll_ctl");
+ return ctx->rc;
+ }
+ }
+#endif /* USE_EPOLL*/
+#ifdef USE_KQUEUE
+ struct kevent e;
+ EV_SET(&e, (fd), c->events, EV_DELETE, 0, 0, NULL);
+ if (kevent(ev->kqfd, &e, 1, NULL, 0, NULL) == -1) {
+ SERR("kevent");
+ return ctx->rc;
+ }
+#endif /* USE_KQUEUE */
+ return grn_hash_delete_by_id(ctx, ev->hash, id, NULL);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%04x| fd(%d) not found in ev(%p)", getpid(), fd, ev);
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+}
+
+#define LISTEN_BACKLOG 0x1000
+
+grn_rc
+grn_com_event_start_accept(grn_ctx *ctx, grn_com_event *ev)
+{
+ grn_com *com = ev->acceptor;
+
+ if (com->accepting) {return ctx->rc;}
+
+ GRN_API_ENTER;
+ if (!grn_com_event_mod(ctx, ev, com->fd, GRN_COM_POLLIN, NULL)) {
+ if (listen(com->fd, LISTEN_BACKLOG) == 0) {
+ com->accepting = GRN_TRUE;
+ } else {
+ SERR("listen - start accept");
+ }
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_com_event_stop_accept(grn_ctx *ctx, grn_com_event *ev)
+{
+ grn_com *com = ev->acceptor;
+
+ if (!com->accepting) {return ctx->rc;}
+
+ GRN_API_ENTER;
+ if (!grn_com_event_mod(ctx, ev, com->fd, 0, NULL)) {
+ if (listen(com->fd, 0) == 0) {
+ com->accepting = GRN_FALSE;
+ } else {
+ SERR("listen - disable accept");
+ }
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+static void
+grn_com_receiver(grn_ctx *ctx, grn_com *com)
+{
+ grn_com_event *ev = com->ev;
+ ERRCLR(ctx);
+ if (ev->acceptor == com) {
+ grn_com *ncs;
+ grn_sock fd = accept(com->fd, NULL, NULL);
+ if (fd == -1) {
+ if (errno == EMFILE) {
+ grn_com_event_stop_accept(ctx, ev);
+ } else {
+ SERR("accept");
+ }
+ return;
+ }
+ if (grn_com_event_add(ctx, ev, fd, GRN_COM_POLLIN, (grn_com **)&ncs)) {
+ grn_sock_close(fd);
+ return;
+ }
+ ncs->has_sid = 0;
+ ncs->closed = 0;
+ ncs->opaque = NULL;
+ GRN_COM_QUEUE_INIT(&ncs->new_);
+ // GRN_LOG(ctx, GRN_LOG_NOTICE, "accepted (%d)", fd);
+ return;
+ } else {
+ grn_msg *msg = (grn_msg *)grn_msg_open(ctx, com, &ev->recv_old);
+ grn_com_recv(ctx, msg->u.peer, &msg->header, (grn_obj *)msg);
+ if (msg->u.peer /* is_edge_request(msg)*/) {
+ memcpy(&msg->edge_id, &ev->curr_edge_id, sizeof(grn_com_addr));
+ if (!com->has_sid) {
+ com->has_sid = 1;
+ com->sid = ev->curr_edge_id.sid++;
+ }
+ msg->edge_id.sid = com->sid;
+ }
+ msg->acceptor = ev->acceptor;
+ ev->msg_handler(ctx, (grn_obj *)msg);
+ }
+}
+
+grn_rc
+grn_com_event_poll(grn_ctx *ctx, grn_com_event *ev, int timeout)
+{
+ int nevents;
+ grn_com *com;
+#ifdef USE_SELECT
+ uint32_t dummy;
+ grn_sock *pfd;
+ int nfds = 0;
+ fd_set rfds;
+ fd_set wfds;
+ struct timeval tv;
+ if (timeout >= 0) {
+ tv.tv_sec = timeout / 1000;
+ tv.tv_usec = (timeout % 1000) * 1000;
+ }
+ FD_ZERO(&rfds);
+ FD_ZERO(&wfds);
+ ctx->errlvl = GRN_OK;
+ ctx->rc = GRN_SUCCESS;
+ GRN_HASH_EACH(ctx, ev->hash, eh, &pfd, &dummy, &com, {
+ if ((com->events & GRN_COM_POLLIN)) { FD_SET(*pfd, &rfds); }
+ if ((com->events & GRN_COM_POLLOUT)) { FD_SET(*pfd, &wfds); }
+ if (*pfd > nfds) { nfds = *pfd; }
+ });
+ nevents = select(nfds + 1, &rfds, &wfds, NULL, (timeout >= 0) ? &tv : NULL);
+ if (nevents < 0) {
+ SERR("select");
+ if (ctx->rc == GRN_INTERRUPTED_FUNCTION_CALL) { ERRCLR(ctx); }
+ return ctx->rc;
+ }
+ if (timeout < 0 && !nevents) { GRN_LOG(ctx, GRN_LOG_NOTICE, "select returns 0 events"); }
+ GRN_HASH_EACH(ctx, ev->hash, eh, &pfd, &dummy, &com, {
+ if (FD_ISSET(*pfd, &rfds)) { grn_com_receiver(ctx, com); }
+ });
+#else /* USE_SELECT */
+#ifdef USE_EPOLL
+ struct epoll_event *ep;
+ ctx->errlvl = GRN_OK;
+ ctx->rc = GRN_SUCCESS;
+ nevents = epoll_wait(ev->epfd, ev->events, ev->max_nevents, timeout);
+ if (nevents < 0) {
+ SERR("epoll_wait");
+ }
+#else /* USE_EPOLL */
+#ifdef USE_KQUEUE
+ struct kevent *ep;
+ struct timespec tv;
+ if (timeout >= 0) {
+ tv.tv_sec = timeout / 1000;
+ tv.tv_nsec = (timeout % 1000) * 1000;
+ }
+ nevents = kevent(ev->kqfd, NULL, 0, ev->events, ev->max_nevents, &tv);
+ if (nevents < 0) {
+ SERR("kevent");
+ }
+#else /* USE_KQUEUE */
+ uint32_t dummy;
+ int nfd = 0, *pfd;
+ struct pollfd *ep = ev->events;
+ ctx->errlvl = GRN_OK;
+ ctx->rc = GRN_SUCCESS;
+ GRN_HASH_EACH(ctx, ev->hash, eh, &pfd, &dummy, &com, {
+ ep->fd = *pfd;
+ // ep->events =(short) com->events;
+ ep->events = POLLIN;
+ ep->revents = 0;
+ ep++;
+ nfd++;
+ });
+ nevents = poll(ev->events, nfd, timeout);
+ if (nevents < 0) {
+ SERR("poll");
+ }
+#endif /* USE_KQUEUE */
+#endif /* USE_EPOLL */
+ if (ctx->rc != GRN_SUCCESS) {
+ if (ctx->rc == GRN_INTERRUPTED_FUNCTION_CALL) {
+ ERRCLR(ctx);
+ }
+ return ctx->rc;
+ }
+ if (timeout < 0 && !nevents) { GRN_LOG(ctx, GRN_LOG_NOTICE, "poll returns 0 events"); }
+ for (ep = ev->events; nevents; ep++) {
+ int efd;
+#ifdef USE_EPOLL
+ efd = ep->data.fd;
+ nevents--;
+ // todo : com = ep->data.ptr;
+ if (!grn_hash_get(ctx, ev->hash, &efd, sizeof(grn_sock), (void *)&com)) {
+ struct epoll_event e;
+ GRN_LOG(ctx, GRN_LOG_ERROR, "fd(%d) not found in ev->hash", efd);
+ memset(&e, 0, sizeof(struct epoll_event));
+ e.data.fd = efd;
+ e.events = ep->events;
+ if (epoll_ctl(ev->epfd, EPOLL_CTL_DEL, efd, &e) == -1) { SERR("epoll_ctl"); }
+ if (grn_sock_close(efd) == -1) { SERR("close"); }
+ continue;
+ }
+ if ((ep->events & GRN_COM_POLLIN)) { grn_com_receiver(ctx, com); }
+#else /* USE_EPOLL */
+#ifdef USE_KQUEUE
+ efd = ep->ident;
+ nevents--;
+ // todo : com = ep->udata;
+ if (!grn_hash_get(ctx, ev->hash, &efd, sizeof(grn_sock), (void *)&com)) {
+ struct kevent e;
+ GRN_LOG(ctx, GRN_LOG_ERROR, "fd(%d) not found in ev->set", efd);
+ EV_SET(&e, efd, ep->filter, EV_DELETE, 0, 0, NULL);
+ if (kevent(ev->kqfd, &e, 1, NULL, 0, NULL) == -1) { SERR("kevent"); }
+ if (grn_sock_close(efd) == -1) { SERR("close"); }
+ continue;
+ }
+ if ((ep->filter == GRN_COM_POLLIN)) { grn_com_receiver(ctx, com); }
+#else
+ efd = ep->fd;
+ if (!(ep->events & ep->revents)) { continue; }
+ nevents--;
+ if (!grn_hash_get(ctx, ev->hash, &efd, sizeof(grn_sock), (void *)&com)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "fd(%d) not found in ev->hash", efd);
+ if (grn_sock_close(efd) == -1) { SERR("close"); }
+ continue;
+ }
+ if ((ep->revents & GRN_COM_POLLIN)) { grn_com_receiver(ctx, com); }
+#endif /* USE_KQUEUE */
+#endif /* USE_EPOLL */
+ }
+#endif /* USE_SELECT */
+ /* todo :
+ while (!(msg = (grn_com_msg *)grn_com_queue_deque(&recv_old))) {
+ grn_msg_close(ctx, msg);
+ }
+ */
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_com_send_http(grn_ctx *ctx, grn_com *cs, const char *path, uint32_t path_len, int flags)
+{
+ ssize_t ret;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUTS(ctx, &buf, "GET ");
+ grn_bulk_write(ctx, &buf, path, path_len);
+ GRN_TEXT_PUTS(ctx, &buf, " HTTP/1.0\r\n\r\n");
+ // todo : refine
+ if ((ret = send(cs->fd, GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf), MSG_NOSIGNAL|flags)) == -1) {
+ SERR("send");
+ }
+ if (ret != GRN_BULK_VSIZE(&buf)) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "send %d != %d", (int)ret, (int)GRN_BULK_VSIZE(&buf));
+ }
+ grn_obj_close(ctx, &buf);
+ return ctx->rc;
+}
+
+grn_rc
+grn_com_send(grn_ctx *ctx, grn_com *cs,
+ grn_com_header *header, const char *body, uint32_t size, int flags)
+{
+ grn_rc rc = GRN_SUCCESS;
+ size_t whole_size = sizeof(grn_com_header) + size;
+ ssize_t ret;
+ header->size = htonl(size);
+ GRN_LOG(ctx, GRN_LOG_INFO, "send (%d,%x,%d,%02x,%02x,%04x)", size, header->flags, header->proto, header->qtype, header->level, header->status);
+
+ if (size) {
+#ifdef WIN32
+ WSABUF wsabufs[2];
+ DWORD n_sent;
+ wsabufs[0].buf = (char *)header;
+ wsabufs[0].len = sizeof(grn_com_header);
+ wsabufs[1].buf = (char *)body;
+ wsabufs[1].len = size;
+ if (WSASend(cs->fd, wsabufs, 2, &n_sent, 0, NULL, NULL) == SOCKET_ERROR) {
+ SERR("WSASend");
+ }
+ ret = n_sent;
+#else /* WIN32 */
+ struct iovec msg_iov[2];
+ struct msghdr msg;
+ msg.msg_name = NULL;
+ msg.msg_namelen = 0;
+ msg.msg_iov = msg_iov;
+ msg.msg_iovlen = 2;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+ msg_iov[0].iov_base = header;
+ msg_iov[0].iov_len = sizeof(grn_com_header);
+ msg_iov[1].iov_base = (char *)body;
+ msg_iov[1].iov_len = size;
+ if ((ret = sendmsg(cs->fd, &msg, MSG_NOSIGNAL|flags)) == -1) {
+ SERR("sendmsg");
+ rc = ctx->rc;
+ }
+#endif /* WIN32 */
+ } else {
+ if ((ret = send(cs->fd, (const void *)header, whole_size, MSG_NOSIGNAL|flags)) == -1) {
+ SERR("send");
+ rc = ctx->rc;
+ }
+ }
+ if (ret != whole_size) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "sendmsg(%d): %" GRN_FMT_LLD " < %" GRN_FMT_LLU,
+ cs->fd, (long long int)ret, (unsigned long long int)whole_size);
+ rc = ctx->rc;
+ }
+ return rc;
+}
+
+#define RETRY_MAX 10
+
+static const char *
+scan_delimiter(const char *p, const char *e)
+{
+ while (p + 4 <= e) {
+ if (p[3] == '\n') {
+ if (p[2] == '\r') {
+ if (p[1] == '\n') {
+ if (p[0] == '\r') { return p + 4; } else { p += 2; }
+ } else { p += 2; }
+ } else { p += 4; }
+ } else { p += p[3] == '\r' ? 1 : 4; }
+ }
+ return NULL;
+}
+
+#define BUFSIZE 4096
+
+static grn_rc
+grn_com_recv_text(grn_ctx *ctx, grn_com *com,
+ grn_com_header *header, grn_obj *buf, ssize_t ret)
+{
+ const char *p;
+ int retry = 0;
+ grn_bulk_write(ctx, buf, (char *)header, ret);
+ if ((p = scan_delimiter(GRN_BULK_HEAD(buf), GRN_BULK_CURR(buf)))) {
+ header->qtype = *GRN_BULK_HEAD(buf);
+ header->proto = GRN_COM_PROTO_HTTP;
+ header->size = GRN_BULK_VSIZE(buf);
+ goto exit;
+ }
+ for (;;) {
+ if (grn_bulk_reserve(ctx, buf, BUFSIZE)) { return ctx->rc; }
+ if ((ret = recv(com->fd, GRN_BULK_CURR(buf), BUFSIZE, 0)) < 0) {
+ SERR("recv text");
+ if (ctx->rc == GRN_OPERATION_WOULD_BLOCK ||
+ ctx->rc == GRN_INTERRUPTED_FUNCTION_CALL) {
+ ERRCLR(ctx);
+ continue;
+ }
+ goto exit;
+ }
+ if (ret) {
+ off_t o = GRN_BULK_VSIZE(buf);
+ p = GRN_BULK_CURR(buf);
+ GRN_BULK_INCR_LEN(buf, ret);
+ if (scan_delimiter(p - (o > 3 ? 3 : o), p + ret)) {
+ break;
+ }
+ } else {
+ if (++retry > RETRY_MAX) {
+ // ERR(GRN_RETRY_MAX, "retry max in recv text");
+ goto exit;
+ }
+ }
+ }
+ header->qtype = *GRN_BULK_HEAD(buf);
+ header->proto = GRN_COM_PROTO_HTTP;
+ header->size = GRN_BULK_VSIZE(buf);
+exit :
+ if (header->qtype == 'H') {
+ //todo : refine
+ /*
+ GRN_BULK_REWIND(buf);
+ grn_bulk_reserve(ctx, buf, BUFSIZE);
+ if ((ret = recv(com->fd, GRN_BULK_CURR(buf), BUFSIZE, 0)) < 0) {
+ SERR("recv text body");
+ } else {
+ GRN_BULK_CURR(buf) += ret;
+ }
+ */
+ }
+ return ctx->rc;
+}
+
+grn_rc
+grn_com_recv(grn_ctx *ctx, grn_com *com, grn_com_header *header, grn_obj *buf)
+{
+ ssize_t ret;
+ int retry = 0;
+ byte *p = (byte *)header;
+ size_t rest = sizeof(grn_com_header);
+ do {
+ if ((ret = recv(com->fd, p, rest, 0)) < 0) {
+ SERR("recv size");
+ GRN_LOG(ctx, GRN_LOG_ERROR, "recv error (%d)", com->fd);
+ if (ctx->rc == GRN_OPERATION_WOULD_BLOCK ||
+ ctx->rc == GRN_INTERRUPTED_FUNCTION_CALL) {
+ ERRCLR(ctx);
+ continue;
+ }
+ goto exit;
+ }
+ if (ret) {
+ if (header->proto < 0x80) {
+ return grn_com_recv_text(ctx, com, header, buf, ret);
+ }
+ rest -= ret, p += ret;
+ } else {
+ if (++retry > RETRY_MAX) {
+ // ERR(GRN_RETRY_MAX, "retry max in recv header (%d)", com->fd);
+ goto exit;
+ }
+ }
+ } while (rest);
+ GRN_LOG(ctx, GRN_LOG_INFO, "recv (%d,%x,%d,%02x,%02x,%04x)", ntohl(header->size), header->flags, header->proto, header->qtype, header->level, header->status);
+ {
+ uint8_t proto = header->proto;
+ size_t value_size = ntohl(header->size);
+ GRN_BULK_REWIND(buf);
+ switch (proto) {
+ case GRN_COM_PROTO_GQTP :
+ case GRN_COM_PROTO_MBREQ :
+ if (GRN_BULK_WSIZE(buf) < value_size) {
+ if ((grn_bulk_resize(ctx, buf, value_size))) {
+ goto exit;
+ }
+ }
+ retry = 0;
+ for (rest = value_size; rest;) {
+ if ((ret = recv(com->fd, GRN_BULK_CURR(buf), rest, MSG_WAITALL)) < 0) {
+ SERR("recv body");
+ if (ctx->rc == GRN_OPERATION_WOULD_BLOCK ||
+ ctx->rc == GRN_INTERRUPTED_FUNCTION_CALL) {
+ ERRCLR(ctx);
+ continue;
+ }
+ goto exit;
+ }
+ if (ret) {
+ rest -= ret;
+ GRN_BULK_INCR_LEN(buf, ret);
+ } else {
+ if (++retry > RETRY_MAX) {
+ // ERR(GRN_RETRY_MAX, "retry max in recv body");
+ goto exit;
+ }
+ }
+ }
+ break;
+ default :
+ GRN_LOG(ctx, GRN_LOG_ERROR, "illegal header: %d", proto);
+ ctx->rc = GRN_INVALID_FORMAT;
+ goto exit;
+ }
+ }
+exit :
+ return ctx->rc;
+}
+
+grn_com *
+grn_com_copen(grn_ctx *ctx, grn_com_event *ev, const char *dest, int port)
+{
+ grn_sock fd = -1;
+ grn_com *cs = NULL;
+
+ struct addrinfo hints, *addrinfo_list, *addrinfo_ptr;
+ char port_string[16];
+ int getaddrinfo_result;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+#ifdef AI_NUMERICSERV
+ hints.ai_flags = AI_NUMERICSERV;
+#endif
+ snprintf(port_string, sizeof(port_string), "%d", port);
+
+ getaddrinfo_result = getaddrinfo(dest, port_string, &hints, &addrinfo_list);
+ if (getaddrinfo_result != 0) {
+ switch (getaddrinfo_result) {
+#ifdef EAI_MEMORY
+ case EAI_MEMORY:
+ ERR(GRN_NO_MEMORY_AVAILABLE, "getaddrinfo: <%s:%s>: %s",
+ dest, port_string, gai_strerror(getaddrinfo_result));
+ break;
+#endif
+#ifdef EAI_SYSTEM
+ case EAI_SYSTEM:
+ SERR("getaddrinfo");
+ break;
+#endif
+ default:
+ ERR(GRN_INVALID_ARGUMENT, "getaddrinfo: <%s:%s>: %s",
+ dest, port_string, gai_strerror(getaddrinfo_result));
+ break;
+ }
+ return NULL;
+ }
+
+ for (addrinfo_ptr = addrinfo_list; addrinfo_ptr;
+ addrinfo_ptr = addrinfo_ptr->ai_next) {
+ static const int value = 1;
+ fd = socket(addrinfo_ptr->ai_family, addrinfo_ptr->ai_socktype,
+ addrinfo_ptr->ai_protocol);
+ if (fd == -1) {
+ SERR("socket");
+ } else if (setsockopt(fd, 6, TCP_NODELAY, &value, sizeof(value))) {
+ SERR("setsockopt");
+ grn_sock_close(fd);
+ } else if (connect(fd, addrinfo_ptr->ai_addr, addrinfo_ptr->ai_addrlen)) {
+ SERR("connect");
+ grn_sock_close(fd);
+ } else {
+ break;
+ }
+ }
+
+ freeaddrinfo(addrinfo_list);
+
+ if (!addrinfo_ptr) {
+ return NULL;
+ }
+ ctx->errlvl = GRN_OK;
+ ctx->rc = GRN_SUCCESS;
+
+ if (ev) {
+ grn_com_event_add(ctx, ev, fd, GRN_COM_POLLIN, &cs);
+ } else {
+ cs = GRN_CALLOC(sizeof(grn_com));
+ if (cs) {
+ cs->fd = fd;
+ }
+ }
+ if (!cs) {
+ grn_sock_close(fd);
+ }
+ return cs;
+}
+
+void
+grn_com_close_(grn_ctx *ctx, grn_com *com)
+{
+ grn_sock fd = com->fd;
+ if (shutdown(fd, SHUT_RDWR) == -1) { /* SERR("shutdown"); */ }
+ if (grn_sock_close(fd) == -1) {
+ SERR("close");
+ } else {
+ com->closed = 1;
+ }
+}
+
+grn_rc
+grn_com_close(grn_ctx *ctx, grn_com *com)
+{
+ grn_sock fd = com->fd;
+ grn_com_event *ev = com->ev;
+ if (ev) {
+ grn_com *acceptor = ev->acceptor;
+ grn_com_event_del(ctx, ev, fd);
+ if (acceptor) { grn_com_event_start_accept(ctx, ev); }
+ }
+ if (!com->closed) { grn_com_close_(ctx, com); }
+ if (!ev) { GRN_FREE(com); }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_com_sopen(grn_ctx *ctx, grn_com_event *ev,
+ const char *bind_address, int port, grn_msg_handler *func,
+ struct hostent *he)
+{
+ grn_sock lfd = -1;
+ grn_com *cs = NULL;
+ int getaddrinfo_result;
+ struct addrinfo *bind_address_info = NULL;
+ struct addrinfo hints;
+ char port_string[6]; /* ceil(log10(65535)) + 1 ('\0')*/
+
+ GRN_API_ENTER;
+ if (!bind_address) {
+ bind_address = "0.0.0.0";
+ }
+ snprintf(port_string, sizeof(port_string), "%d", port);
+ memset(&hints, 0, sizeof(struct addrinfo));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+#ifdef AI_NUMERICSERV
+ hints.ai_flags = AI_NUMERICSERV;
+#endif
+ getaddrinfo_result = getaddrinfo(bind_address, port_string,
+ &hints, &bind_address_info);
+ if (getaddrinfo_result != 0) {
+ switch (getaddrinfo_result) {
+#ifdef EAI_MEMORY
+ case EAI_MEMORY:
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "getaddrinfo: <%s:%s>: %s",
+ bind_address, port_string, gai_strerror(getaddrinfo_result));
+ break;
+#endif
+#ifdef EAI_SYSTEM
+ case EAI_SYSTEM:
+ SERR("getaddrinfo");
+ break;
+#endif
+ default:
+ ERR(GRN_INVALID_ARGUMENT,
+ "getaddrinfo: <%s:%s>: %s",
+ bind_address, port_string, gai_strerror(getaddrinfo_result));
+ break;
+ }
+ goto exit;
+ }
+ if ((lfd = socket(bind_address_info->ai_family, SOCK_STREAM, 0)) == -1) {
+ SERR("socket");
+ goto exit;
+ }
+ memcpy(&ev->curr_edge_id.addr, he->h_addr, he->h_length);
+ ev->curr_edge_id.port = htons(port);
+ ev->curr_edge_id.sid = 0;
+ {
+ int v = 1;
+ if (setsockopt(lfd, SOL_TCP, TCP_NODELAY, (void *) &v, sizeof(int)) == -1) {
+ SERR("setsockopt");
+ goto exit;
+ }
+ if (setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, (void *) &v, sizeof(int)) == -1) {
+ SERR("setsockopt");
+ goto exit;
+ }
+ }
+ if (bind(lfd, bind_address_info->ai_addr, bind_address_info->ai_addrlen) < 0) {
+ SERR("bind");
+ goto exit;
+ }
+ if (listen(lfd, LISTEN_BACKLOG) < 0) {
+ SERR("listen");
+ goto exit;
+ }
+ if (ev) {
+ if (grn_com_event_add(ctx, ev, lfd, GRN_COM_POLLIN, &cs)) { goto exit; }
+ ev->acceptor = cs;
+ ev->msg_handler = func;
+ cs->has_sid = 0;
+ cs->closed = 0;
+ cs->opaque = NULL;
+ GRN_COM_QUEUE_INIT(&cs->new_);
+ } else {
+ if (!(cs = GRN_MALLOC(sizeof(grn_com)))) { goto exit; }
+ cs->fd = lfd;
+ }
+ cs->accepting = GRN_TRUE;
+exit :
+ if (!cs && lfd != 1) { grn_sock_close(lfd); }
+ if (bind_address_info) { freeaddrinfo(bind_address_info); }
+ GRN_API_RETURN(ctx->rc);
+}
+
+
+grn_hash *grn_edges = NULL;
+void (*grn_dispatcher)(grn_ctx *ctx, grn_edge *edge);
+
+void
+grn_edges_init(grn_ctx *ctx, void (*dispatcher)(grn_ctx *ctx, grn_edge *edge))
+{
+ grn_edges = grn_hash_create(ctx, NULL, sizeof(grn_com_addr), sizeof(grn_edge), 0);
+ grn_dispatcher = dispatcher;
+}
+
+void
+grn_edges_fin(grn_ctx *ctx)
+{
+ grn_hash_close(ctx, grn_edges);
+}
+
+grn_edge *
+grn_edges_add(grn_ctx *ctx, grn_com_addr *addr, int *added)
+{
+ if (grn_io_lock(ctx, grn_edges->io, grn_lock_timeout)) {
+ return NULL;
+ } else {
+ grn_edge *edge;
+ grn_id id = grn_hash_add(ctx, grn_edges, addr, sizeof(grn_com_addr),
+ (void **)&edge, added);
+ grn_io_unlock(grn_edges->io);
+ if (id) { edge->id = id; }
+ return edge;
+ }
+}
+
+void
+grn_edges_delete(grn_ctx *ctx, grn_edge *edge)
+{
+ if (!grn_io_lock(ctx, grn_edges->io, grn_lock_timeout)) {
+ grn_hash_delete_by_id(ctx, grn_edges, edge->id, NULL);
+ grn_io_unlock(grn_edges->io);
+ }
+}
+
+grn_edge *
+grn_edges_add_communicator(grn_ctx *ctx, grn_com_addr *addr)
+{
+ int added;
+ grn_edge *edge = grn_edges_add(ctx, addr, &added);
+ if (added) {
+ grn_ctx_init(&edge->ctx, 0);
+ GRN_COM_QUEUE_INIT(&edge->recv_new);
+ GRN_COM_QUEUE_INIT(&edge->send_old);
+ edge->com = NULL;
+ edge->stat = 0 /*EDGE_IDLE*/;
+ edge->flags = GRN_EDGE_COMMUNICATOR;
+ }
+ return edge;
+}
+
+void
+grn_edge_dispatch(grn_ctx *ctx, grn_edge *edge, grn_obj *msg)
+{
+ grn_com_queue_enque(ctx, &edge->recv_new, (grn_com_queue_entry *)msg);
+ grn_dispatcher(ctx, edge);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/com.h b/storage/mroonga/vendor/groonga/lib/com.h
new file mode 100644
index 00000000000..c0690ccfe76
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/com.h
@@ -0,0 +1,260 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_COM_H
+#define GRN_COM_H
+
+#ifndef GROONGA_H
+#include "groonga_in.h"
+#endif /* GROONGA_H */
+
+#ifndef GRN_STR_H
+#include "str.h"
+#endif /* GRN_STR_H */
+
+#ifndef GRN_HASH_H
+#include "hash.h"
+#endif /* GRN_HASH_H */
+
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif /* HAVE_NETDB_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******* grn_com_queue ********/
+
+typedef struct _grn_com_queue grn_com_queue;
+typedef struct _grn_com_queue_entry grn_com_queue_entry;
+
+#define GRN_COM_QUEUE_BINSIZE (0x100)
+
+struct _grn_com_queue_entry {
+ grn_obj obj;
+ struct _grn_com_queue_entry *next;
+};
+
+struct _grn_com_queue {
+ grn_com_queue_entry *bins[GRN_COM_QUEUE_BINSIZE];
+ grn_com_queue_entry *next;
+ grn_com_queue_entry **tail;
+ uint8_t first;
+ uint8_t last;
+ grn_critical_section cs;
+};
+
+#define GRN_COM_QUEUE_INIT(q) do {\
+ (q)->next = NULL;\
+ (q)->tail = &(q)->next;\
+ (q)->first = 0;\
+ (q)->last = 0;\
+ CRITICAL_SECTION_INIT((q)->cs);\
+} while (0)
+
+#define GRN_COM_QUEUE_EMPTYP(q) (((q)->first == (q)->last) && !(q)->next)
+
+GRN_API grn_rc grn_com_queue_enque(grn_ctx *ctx, grn_com_queue *q, grn_com_queue_entry *e);
+GRN_API grn_com_queue_entry *grn_com_queue_deque(grn_ctx *ctx, grn_com_queue *q);
+
+/******* grn_com ********/
+
+#ifdef USE_SELECT
+# ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+# endif /* HAVE_SYS_SELECT_H */
+# define GRN_COM_POLLIN 1
+# define GRN_COM_POLLOUT 2
+#else /* USE_SELECT */
+# ifdef USE_EPOLL
+# include <sys/epoll.h>
+# define GRN_COM_POLLIN EPOLLIN
+# define GRN_COM_POLLOUT EPOLLOUT
+# else /* USE_EPOLL */
+# ifdef USE_KQUEUE
+# include <sys/event.h>
+# define GRN_COM_POLLIN EVFILT_READ
+# define GRN_COM_POLLOUT EVFILT_WRITE
+# else /* USE_KQUEUE */
+# include <sys/poll.h>
+# define GRN_COM_POLLIN POLLIN
+# define GRN_COM_POLLOUT POLLOUT
+# endif /* USE_KQUEUE */
+# endif /* USE_EPOLL */
+#endif /* USE_SELECT */
+
+typedef struct _grn_com grn_com;
+typedef struct _grn_com_event grn_com_event;
+typedef struct _grn_com_addr grn_com_addr;
+typedef void grn_com_callback(grn_ctx *ctx, grn_com_event *, grn_com *);
+typedef void grn_msg_handler(grn_ctx *ctx, grn_obj *msg);
+
+enum {
+ grn_com_ok = 0,
+ grn_com_emem,
+ grn_com_erecv_head,
+ grn_com_erecv_body,
+ grn_com_eproto,
+};
+
+struct _grn_com_addr {
+ uint32_t addr;
+ uint16_t port;
+ uint16_t sid;
+};
+
+struct _grn_com {
+ grn_sock fd;
+ int events;
+ uint16_t sid;
+ uint8_t has_sid;
+ uint8_t closed;
+ grn_com_queue new_;
+ grn_com_event *ev;
+ void *opaque;
+ grn_bool accepting;
+};
+
+struct _grn_com_event {
+ struct _grn_hash *hash;
+ int max_nevents;
+ grn_ctx *ctx;
+ grn_mutex mutex;
+ grn_cond cond;
+ grn_com_queue recv_old;
+ grn_msg_handler *msg_handler;
+ grn_com_addr curr_edge_id;
+ grn_com *acceptor;
+ void *opaque;
+#ifndef USE_SELECT
+#ifdef USE_EPOLL
+ int epfd;
+ struct epoll_event *events;
+#else /* USE_EPOLL */
+#ifdef USE_KQUEUE
+ int kqfd;
+ struct kevent *events;
+#else /* USE_KQUEUE */
+ int dummy; /* dummy */
+ struct pollfd *events;
+#endif /* USE_KQUEUE */
+#endif /* USE_EPOLL */
+#endif /* USE_SELECT */
+};
+
+grn_rc grn_com_init(void);
+void grn_com_fin(void);
+GRN_API grn_rc grn_com_event_init(grn_ctx *ctx, grn_com_event *ev, int max_nevents, int data_size);
+GRN_API grn_rc grn_com_event_fin(grn_ctx *ctx, grn_com_event *ev);
+GRN_API grn_rc grn_com_event_start_accept(grn_ctx *ctx, grn_com_event *ev);
+grn_rc grn_com_event_stop_accept(grn_ctx *ctx, grn_com_event *ev);
+grn_rc grn_com_event_add(grn_ctx *ctx, grn_com_event *ev, grn_sock fd, int events, grn_com **com);
+grn_rc grn_com_event_mod(grn_ctx *ctx, grn_com_event *ev, grn_sock fd, int events, grn_com **com);
+GRN_API grn_rc grn_com_event_del(grn_ctx *ctx, grn_com_event *ev, grn_sock fd);
+GRN_API grn_rc grn_com_event_poll(grn_ctx *ctx, grn_com_event *ev, int timeout);
+grn_rc grn_com_event_each(grn_ctx *ctx, grn_com_event *ev, grn_com_callback *func);
+
+/******* grn_com_gqtp ********/
+
+#define GRN_COM_PROTO_HTTP 0x47
+#define GRN_COM_PROTO_GQTP 0xc7
+#define GRN_COM_PROTO_MBREQ 0x80
+#define GRN_COM_PROTO_MBRES 0x81
+
+typedef struct _grn_com_header grn_com_header;
+
+struct _grn_com_header {
+ uint8_t proto;
+ uint8_t qtype;
+ uint16_t keylen;
+ uint8_t level;
+ uint8_t flags;
+ uint16_t status;
+ uint32_t size;
+ uint32_t opaque;
+ uint64_t cas;
+};
+
+GRN_API grn_com *grn_com_copen(grn_ctx *ctx, grn_com_event *ev, const char *dest, int port);
+GRN_API grn_rc grn_com_sopen(grn_ctx *ctx, grn_com_event *ev,
+ const char *bind_address, int port,
+ grn_msg_handler *func, struct hostent *he);
+
+GRN_API void grn_com_close_(grn_ctx *ctx, grn_com *com);
+GRN_API grn_rc grn_com_close(grn_ctx *ctx, grn_com *com);
+
+GRN_API grn_rc grn_com_send(grn_ctx *ctx, grn_com *cs,
+ grn_com_header *header, const char *body, uint32_t size, int flags);
+grn_rc grn_com_recv(grn_ctx *ctx, grn_com *cs, grn_com_header *header, grn_obj *buf);
+GRN_API grn_rc grn_com_send_http(grn_ctx *ctx, grn_com *cs, const char *path, uint32_t path_len, int flags);
+
+/******* grn_msg ********/
+
+typedef struct _grn_msg grn_msg;
+
+struct _grn_msg {
+ grn_com_queue_entry qe;
+ union {
+ grn_com *peer;
+ grn_sock fd;
+ } u;
+ grn_ctx *ctx;
+ grn_com_queue *old;
+ grn_com_header header;
+ grn_com_addr edge_id;
+ grn_com *acceptor;
+};
+
+GRN_API grn_rc grn_msg_send(grn_ctx *ctx, grn_obj *msg, int flags);
+GRN_API grn_obj *grn_msg_open_for_reply(grn_ctx *ctx, grn_obj *query, grn_com_queue *old);
+GRN_API grn_obj *grn_msg_open(grn_ctx *ctx, grn_com *com, grn_com_queue *old);
+GRN_API grn_rc grn_msg_set_property(grn_ctx *ctx, grn_obj *obj,
+ uint16_t status, uint32_t key_size, uint8_t extra_size);
+GRN_API grn_rc grn_msg_close(grn_ctx *ctx, grn_obj *msg);
+
+/******* grn_edge ********/
+
+#define GRN_EDGE_WORKER 0
+#define GRN_EDGE_COMMUNICATOR 1
+
+typedef struct {
+ grn_com_queue_entry eq;
+ grn_ctx ctx;
+ grn_com_queue recv_new;
+ grn_com_queue send_old;
+ grn_com *com;
+ grn_com_addr *addr;
+ grn_msg *msg;
+ uint8_t stat;
+ uint8_t flags;
+ grn_id id;
+} grn_edge;
+
+GRN_VAR grn_hash *grn_edges;
+GRN_API void grn_edges_init(grn_ctx *ctx, void (*dispatcher)(grn_ctx *ctx, grn_edge *edge));
+GRN_API void grn_edges_fin(grn_ctx *ctx);
+GRN_API grn_edge *grn_edges_add(grn_ctx *ctx, grn_com_addr *addr, int *added);
+grn_edge *grn_edges_add_communicator(grn_ctx *ctx, grn_com_addr *addr);
+GRN_API void grn_edges_delete(grn_ctx *ctx, grn_edge *edge);
+void grn_edge_dispatch(grn_ctx *ctx, grn_edge *edge, grn_obj *msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_COM_H */
diff --git a/storage/mroonga/vendor/groonga/lib/ctx.c b/storage/mroonga/vendor/groonga/lib/ctx.c
new file mode 100644
index 00000000000..a419081635f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ctx.c
@@ -0,0 +1,2992 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "groonga_in.h"
+#include <string.h>
+#include "token.h"
+#include "ctx_impl.h"
+#include "pat.h"
+#include "plugin_in.h"
+#include "snip.h"
+#include "output.h"
+#include "normalizer_in.h"
+#include "ctx_impl_mrb.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif /* HAVE_NETINET_IN_H */
+
+#define GRN_CTX_INITIALIZER(enc) \
+ { GRN_SUCCESS, 0, enc, 0, GRN_LOG_NOTICE,\
+ GRN_CTX_FIN, 0, 0, 0, 0, {0}, NULL, NULL, NULL, NULL, NULL }
+
+#define GRN_CTX_CLOSED(ctx) ((ctx)->stat == GRN_CTX_FIN)
+
+#ifdef USE_EXACT_ALLOC_COUNT
+#define GRN_ADD_ALLOC_COUNT(count) do { \
+ uint32_t alloced; \
+ GRN_ATOMIC_ADD_EX(&alloc_count, count, alloced); \
+} while (0)
+#else /* USE_EXACT_ALLOC_COUNT */
+#define GRN_ADD_ALLOC_COUNT(count) do { \
+ alloc_count += count; \
+} while (0)
+#endif
+
+grn_ctx grn_gctx = GRN_CTX_INITIALIZER(GRN_ENC_DEFAULT);
+int grn_pagesize;
+grn_critical_section grn_glock;
+uint32_t grn_gtick;
+int grn_lock_timeout = GRN_LOCK_TIMEOUT;
+
+#ifdef USE_UYIELD
+int grn_uyield_count = 0;
+#endif
+
+void
+grn_sleep(uint32_t seconds)
+{
+#ifdef WIN32
+ Sleep(seconds * 1000);
+#else // WIN32
+ sleep(seconds);
+#endif // WIN32
+}
+
+void
+grn_nanosleep(uint64_t nanoseconds)
+{
+#ifdef WIN32
+ Sleep((DWORD)(nanoseconds / 1000000));
+#else // WIN32
+ struct timespec interval;
+ interval.tv_sec = (time_t)(nanoseconds / 1000000000);
+ interval.tv_nsec = (long)(nanoseconds % 1000000000);
+ nanosleep(&interval, NULL);
+#endif // WIN32
+}
+
+/* fixme by 2038 */
+
+grn_rc
+grn_timeval_now(grn_ctx *ctx, grn_timeval *tv)
+{
+#ifdef HAVE_CLOCK_GETTIME
+ struct timespec t;
+ if (clock_gettime(CLOCK_REALTIME, &t)) {
+ SERR("clock_gettime");
+ } else {
+ tv->tv_sec = t.tv_sec;
+ tv->tv_nsec = t.tv_nsec;
+ }
+ return ctx->rc;
+#else /* HAVE_CLOCK_GETTIME */
+#ifdef WIN32
+ time_t t;
+ struct _timeb tb;
+ time(&t);
+ _ftime(&tb);
+ tv->tv_sec = t;
+ tv->tv_nsec = tb.millitm * (GRN_TIME_NSEC_PER_SEC / 1000);
+ return GRN_SUCCESS;
+#else /* WIN32 */
+ struct timeval t;
+ if (gettimeofday(&t, NULL)) {
+ SERR("gettimeofday");
+ } else {
+ tv->tv_sec = t.tv_sec;
+ tv->tv_nsec = GRN_TIME_USEC_TO_NSEC(t.tv_usec);
+ }
+ return ctx->rc;
+#endif /* WIN32 */
+#endif /* HAVE_CLOCK_GETTIME */
+}
+
+void
+grn_time_now(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ GRN_TIME_SET(ctx, obj, GRN_TIME_PACK(tv.tv_sec,
+ GRN_TIME_NSEC_TO_USEC(tv.tv_nsec)));
+}
+
+grn_rc
+grn_timeval2str(grn_ctx *ctx, grn_timeval *tv, char *buf)
+{
+ struct tm *ltm;
+#ifdef HAVE_LOCALTIME_R
+ struct tm tm;
+ time_t t = tv->tv_sec;
+ ltm = localtime_r(&t, &tm);
+#else /* HAVE_LOCALTIME_R */
+ time_t tvsec = (time_t) tv->tv_sec;
+ ltm = localtime(&tvsec);
+#endif /* HAVE_LOCALTIME_R */
+ if (!ltm) { SERR("localtime"); }
+ snprintf(buf, GRN_TIMEVAL_STR_SIZE - 1, GRN_TIMEVAL_STR_FORMAT,
+ ltm->tm_year + 1900, ltm->tm_mon + 1, ltm->tm_mday,
+ ltm->tm_hour, ltm->tm_min, ltm->tm_sec,
+ (int)(GRN_TIME_NSEC_TO_USEC(tv->tv_nsec)));
+ buf[GRN_TIMEVAL_STR_SIZE - 1] = '\0';
+ return ctx->rc;
+}
+
+grn_rc
+grn_str2timeval(const char *str, uint32_t str_len, grn_timeval *tv)
+{
+ struct tm tm;
+ const char *r1, *r2, *rend = str + str_len;
+ uint32_t uv;
+ memset(&tm, 0, sizeof(struct tm));
+
+ tm.tm_year = (int)grn_atoui(str, rend, &r1) - 1900;
+ if ((r1 + 1) >= rend || (*r1 != '/' && *r1 != '-') ||
+ tm.tm_year < 0) { return GRN_INVALID_ARGUMENT; }
+ r1++;
+ tm.tm_mon = (int)grn_atoui(r1, rend, &r1) - 1;
+ if ((r1 + 1) >= rend || (*r1 != '/' && *r1 != '-') ||
+ tm.tm_mon < 0 || tm.tm_mon >= 12) { return GRN_INVALID_ARGUMENT; }
+ r1++;
+ tm.tm_mday = (int)grn_atoui(r1, rend, &r1);
+ if ((r1 + 1) >= rend || *r1 != ' ' ||
+ tm.tm_mday < 1 || tm.tm_mday > 31) { return GRN_INVALID_ARGUMENT; }
+
+ tm.tm_hour = (int)grn_atoui(++r1, rend, &r2);
+ if ((r2 + 1) >= rend || r1 == r2 || *r2 != ':' ||
+ tm.tm_hour < 0 || tm.tm_hour >= 24) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ r1 = r2 + 1;
+ tm.tm_min = (int)grn_atoui(r1, rend, &r2);
+ if ((r2 + 1) >= rend || r1 == r2 || *r2 != ':' ||
+ tm.tm_min < 0 || tm.tm_min >= 60) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ r1 = r2 + 1;
+ tm.tm_sec = (int)grn_atoui(r1, rend, &r2);
+ if (r1 == r2 ||
+ tm.tm_sec < 0 || tm.tm_sec > 61 /* leap 2sec */) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ r1 = r2;
+ tm.tm_yday = -1;
+ tm.tm_isdst = -1;
+
+ /* tm_yday is set appropriately (0-365) on successful completion. */
+ tv->tv_sec = mktime(&tm);
+ if (tm.tm_yday == -1) { return GRN_INVALID_ARGUMENT; }
+ if ((r1 + 1) < rend && *r1 == '.') { r1++; }
+ uv = grn_atoi(r1, rend, &r2);
+ while (r2 < r1 + 6) {
+ uv *= 10;
+ r2++;
+ }
+ if (uv >= GRN_TIME_USEC_PER_SEC) { return GRN_INVALID_ARGUMENT; }
+ tv->tv_nsec = GRN_TIME_USEC_TO_NSEC(uv);
+ return GRN_SUCCESS;
+}
+
+#ifdef USE_MEMORY_DEBUG
+inline static void
+grn_alloc_info_set_backtrace(char *buffer, size_t size)
+{
+# define N_TRACE_LEVEL 100
+ static void *trace[N_TRACE_LEVEL];
+ char **symbols;
+ int i, n, rest;
+
+ rest = size;
+ n = backtrace(trace, N_TRACE_LEVEL);
+ symbols = backtrace_symbols(trace, n);
+ if (symbols) {
+ for (i = 0; i < n; i++) {
+ int symbol_length;
+
+ symbol_length = strlen(symbols[i]);
+ if (symbol_length + 2 > rest) {
+ break;
+ }
+ memcpy(buffer, symbols[i], symbol_length);
+ buffer += symbol_length;
+ rest -= symbol_length;
+ buffer[0] = '\n';
+ buffer++;
+ rest--;
+ buffer[0] = '\0';
+ rest--;
+ }
+ free(symbols);
+ } else {
+ buffer[0] = '\0';
+ }
+# undef N_TRACE_LEVEL
+}
+
+inline static void
+grn_alloc_info_add(void *address)
+{
+ grn_ctx *ctx;
+ grn_alloc_info *new_alloc_info;
+
+ ctx = &grn_gctx;
+ if (!ctx->impl) { return; }
+
+ new_alloc_info = malloc(sizeof(grn_alloc_info));
+ new_alloc_info->address = address;
+ new_alloc_info->freed = GRN_FALSE;
+ grn_alloc_info_set_backtrace(new_alloc_info->alloc_backtrace,
+ sizeof(new_alloc_info->alloc_backtrace));
+ new_alloc_info->next = ctx->impl->alloc_info;
+ ctx->impl->alloc_info = new_alloc_info;
+}
+
+inline static void
+grn_alloc_info_change(void *old_address, void *new_address)
+{
+ grn_ctx *ctx;
+ grn_alloc_info *alloc_info;
+
+ ctx = &grn_gctx;
+ if (!ctx->impl) { return; }
+
+ alloc_info = ctx->impl->alloc_info;
+ for (; alloc_info; alloc_info = alloc_info->next) {
+ if (alloc_info->address == old_address) {
+ alloc_info->address = new_address;
+ grn_alloc_info_set_backtrace(alloc_info->alloc_backtrace,
+ sizeof(alloc_info->alloc_backtrace));
+ }
+ }
+}
+
+inline static void
+grn_alloc_info_dump(grn_ctx *ctx)
+{
+ int i = 0;
+ grn_alloc_info *alloc_info;
+
+ if (!ctx) { return; }
+ if (!ctx->impl) { return; }
+
+ alloc_info = ctx->impl->alloc_info;
+ for (; alloc_info; alloc_info = alloc_info->next) {
+ if (alloc_info->freed) {
+ printf("address[%d][freed]: %p\n", i, alloc_info->address);
+ } else {
+ printf("address[%d][not-freed]: %p:\n%s",
+ i, alloc_info->address, alloc_info->alloc_backtrace);
+ }
+ i++;
+ }
+}
+
+inline static void
+grn_alloc_info_check(void *address)
+{
+ grn_ctx *ctx;
+ grn_alloc_info *alloc_info;
+
+ ctx = &grn_gctx;
+ if (!ctx->impl) { return; }
+ /* grn_alloc_info_dump(ctx); */
+
+ alloc_info = ctx->impl->alloc_info;
+ for (; alloc_info; alloc_info = alloc_info->next) {
+ if (alloc_info->address == address) {
+ if (alloc_info->freed) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "double free: (%p):\nalloc backtrace:\n%sfree backtrace:\n%s",
+ alloc_info->address,
+ alloc_info->alloc_backtrace,
+ alloc_info->free_backtrace);
+ } else {
+ alloc_info->freed = GRN_TRUE;
+ grn_alloc_info_set_backtrace(alloc_info->free_backtrace,
+ sizeof(alloc_info->free_backtrace));
+ }
+ return;
+ }
+ }
+}
+
+inline static void
+grn_alloc_info_free(grn_ctx *ctx)
+{
+ grn_alloc_info *alloc_info;
+
+ if (!ctx) { return; }
+ if (!ctx->impl) { return; }
+
+ alloc_info = ctx->impl->alloc_info;
+ while (alloc_info) {
+ grn_alloc_info *current_alloc_info = alloc_info;
+ alloc_info = alloc_info->next;
+ current_alloc_info->next = NULL;
+ free(current_alloc_info);
+ }
+ ctx->impl->alloc_info = NULL;
+}
+
+#else /* USE_MEMORY_DEBUG */
+# define grn_alloc_info_add(address)
+# define grn_alloc_info_change(old_address, new_address)
+# define grn_alloc_info_check(address)
+# define grn_alloc_info_dump(ctx)
+# define grn_alloc_info_free(ctx)
+#endif /* USE_MEMORY_DEBUG */
+
+#ifdef USE_FAIL_MALLOC
+int grn_fmalloc_prob = 0;
+char *grn_fmalloc_func = NULL;
+char *grn_fmalloc_file = NULL;
+int grn_fmalloc_line = 0;
+#endif /* USE_FAIL_MALLOC */
+
+#define GRN_CTX_SEGMENT_SIZE (1<<22)
+#define GRN_CTX_SEGMENT_MASK (GRN_CTX_SEGMENT_SIZE - 1)
+
+#define GRN_CTX_SEGMENT_WORD (1<<31)
+#define GRN_CTX_SEGMENT_VLEN (1<<30)
+#define GRN_CTX_SEGMENT_LIFO (1<<29)
+#define GRN_CTX_SEGMENT_DIRTY (1<<28)
+
+#ifdef USE_DYNAMIC_MALLOC_CHANGE
+static void
+grn_ctx_impl_init_malloc(grn_ctx *ctx)
+{
+# ifdef USE_FAIL_MALLOC
+ ctx->impl->malloc_func = grn_malloc_fail;
+ ctx->impl->calloc_func = grn_calloc_fail;
+ ctx->impl->realloc_func = grn_realloc_fail;
+ ctx->impl->strdup_func = grn_strdup_fail;
+# else
+ ctx->impl->malloc_func = grn_malloc_default;
+ ctx->impl->calloc_func = grn_calloc_default;
+ ctx->impl->realloc_func = grn_realloc_default;
+ ctx->impl->strdup_func = grn_strdup_default;
+# endif
+}
+#endif
+
+static void
+grn_loader_init(grn_loader *loader)
+{
+ GRN_TEXT_INIT(&loader->values, 0);
+ GRN_UINT32_INIT(&loader->level, GRN_OBJ_VECTOR);
+ GRN_PTR_INIT(&loader->columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ loader->key_offset = -1;
+ loader->table = NULL;
+ loader->last = NULL;
+ loader->ifexists = NULL;
+ loader->each = NULL;
+ loader->values_size = 0;
+ loader->nrecords = 0;
+ loader->stat = GRN_LOADER_BEGIN;
+}
+
+void
+grn_ctx_loader_clear(grn_ctx *ctx)
+{
+ grn_loader *loader = &ctx->impl->loader;
+ grn_obj *v = (grn_obj *)(GRN_BULK_HEAD(&loader->values));
+ grn_obj *ve = (grn_obj *)(GRN_BULK_CURR(&loader->values));
+ grn_obj **p = (grn_obj **)GRN_BULK_HEAD(&loader->columns);
+ uint32_t i = GRN_BULK_VSIZE(&loader->columns) / sizeof(grn_obj *);
+ if (ctx->impl->db) { while (i--) { grn_obj_unlink(ctx, *p++); } }
+ if (loader->ifexists) { grn_obj_unlink(ctx, loader->ifexists); }
+ if (loader->each) { grn_obj_unlink(ctx, loader->each); }
+ while (v < ve) { GRN_OBJ_FIN(ctx, v++); }
+ GRN_OBJ_FIN(ctx, &loader->values);
+ GRN_OBJ_FIN(ctx, &loader->level);
+ GRN_OBJ_FIN(ctx, &loader->columns);
+ grn_loader_init(loader);
+}
+
+#define IMPL_SIZE ((sizeof(struct _grn_ctx_impl) + (grn_pagesize - 1)) & ~(grn_pagesize - 1))
+
+#ifdef GRN_WITH_MESSAGE_PACK
+static inline int
+grn_msgpack_buffer_write(void *data, const char *buf, unsigned int len)
+{
+ grn_ctx *ctx = (grn_ctx *)data;
+ return grn_bulk_write(ctx, ctx->impl->outbuf, buf, len);
+}
+#endif
+
+static void
+grn_ctx_impl_init(grn_ctx *ctx)
+{
+
+ grn_io_mapinfo mi;
+ if (!(ctx->impl = grn_io_anon_map(ctx, &mi, IMPL_SIZE))) {
+ ctx->impl = NULL;
+ return;
+ }
+#ifdef USE_DYNAMIC_MALLOC_CHANGE
+ grn_ctx_impl_init_malloc(ctx);
+#endif
+#ifdef USE_MEMORY_DEBUG
+ ctx->impl->alloc_info = NULL;
+#endif
+ ctx->impl->encoding = ctx->encoding;
+ ctx->impl->lifoseg = -1;
+ ctx->impl->currseg = -1;
+ CRITICAL_SECTION_INIT(ctx->impl->lock);
+ if (!(ctx->impl->values = grn_array_create(ctx, NULL, sizeof(grn_db_obj *),
+ GRN_ARRAY_TINY))) {
+ CRITICAL_SECTION_FIN(ctx->impl->lock);
+ grn_io_anon_unmap(ctx, &mi, IMPL_SIZE);
+ ctx->impl = NULL;
+ return;
+ }
+ if (!(ctx->impl->ios = grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE,
+ sizeof(grn_io *),
+ GRN_OBJ_KEY_VAR_SIZE|GRN_HASH_TINY))) {
+ grn_array_close(ctx, ctx->impl->values);
+ CRITICAL_SECTION_FIN(ctx->impl->lock);
+ grn_io_anon_unmap(ctx, &mi, IMPL_SIZE);
+ ctx->impl = NULL;
+ return;
+ }
+ ctx->impl->db = NULL;
+
+ ctx->impl->expr_vars = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_obj *), 0);
+ ctx->impl->stack_curr = 0;
+ ctx->impl->curr_expr = NULL;
+ ctx->impl->qe_next = NULL;
+ ctx->impl->parser = NULL;
+
+ GRN_TEXT_INIT(&ctx->impl->names, GRN_OBJ_VECTOR);
+ GRN_UINT32_INIT(&ctx->impl->levels, GRN_OBJ_VECTOR);
+
+ if (ctx == &grn_gctx) {
+ ctx->impl->command_version = GRN_COMMAND_VERSION_STABLE;
+ } else {
+ ctx->impl->command_version = grn_get_default_command_version();
+ }
+
+ if (ctx == &grn_gctx) {
+ ctx->impl->match_escalation_threshold =
+ GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD;
+ } else {
+ ctx->impl->match_escalation_threshold =
+ grn_get_default_match_escalation_threshold();
+ }
+
+ ctx->impl->finalizer = NULL;
+
+ ctx->impl->com = NULL;
+ ctx->impl->outbuf = grn_obj_open(ctx, GRN_BULK, 0, 0);
+ ctx->impl->output = NULL;
+ ctx->impl->data.ptr = NULL;
+ ctx->impl->tv.tv_sec = 0;
+ ctx->impl->tv.tv_nsec = 0;
+ ctx->impl->edge = NULL;
+ grn_loader_init(&ctx->impl->loader);
+ ctx->impl->plugin_path = NULL;
+
+ GRN_TEXT_INIT(&ctx->impl->query_log_buf, 0);
+
+ ctx->impl->previous_errbuf[0] = '\0';
+ ctx->impl->n_same_error_messages = 0;
+
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_packer_init(&ctx->impl->msgpacker, ctx, grn_msgpack_buffer_write);
+#endif
+
+ grn_ctx_impl_mrb_init(ctx);
+}
+
+void
+grn_ctx_set_next_expr(grn_ctx *ctx, grn_obj *expr)
+{
+ ctx->impl->qe_next = expr;
+}
+
+static void
+grn_ctx_impl_clear_n_same_error_mssagges(grn_ctx *ctx)
+{
+ if (ctx->impl->n_same_error_messages == 0) {
+ return;
+ }
+
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "(%u same messages are truncated)",
+ ctx->impl->n_same_error_messages);
+ ctx->impl->n_same_error_messages = 0;
+}
+
+grn_bool
+grn_ctx_impl_should_log(grn_ctx *ctx)
+{
+ if (!ctx->impl) {
+ return GRN_TRUE;
+ }
+
+ if (strcmp(ctx->errbuf, ctx->impl->previous_errbuf) == 0) {
+ ctx->impl->n_same_error_messages++;
+ return GRN_FALSE;
+ }
+
+ return GRN_TRUE;
+}
+
+void
+grn_ctx_impl_set_current_error_message(grn_ctx *ctx)
+{
+ if (!ctx->impl) {
+ return;
+ }
+
+ grn_ctx_impl_clear_n_same_error_mssagges(ctx);
+ strcpy(ctx->impl->previous_errbuf, ctx->errbuf);
+}
+
+grn_rc
+grn_ctx_init(grn_ctx *ctx, int flags)
+{
+ if (!ctx) { return GRN_INVALID_ARGUMENT; }
+ // if (ctx->stat != GRN_CTX_FIN) { return GRN_INVALID_ARGUMENT; }
+ ERRCLR(ctx);
+ ctx->flags = flags;
+ if (getenv("GRN_CTX_PER_DB") && strcmp(getenv("GRN_CTX_PER_DB"), "yes") == 0) {
+ ctx->flags |= GRN_CTX_PER_DB;
+ }
+ if (ERRP(ctx, GRN_ERROR)) { return ctx->rc; }
+ ctx->stat = GRN_CTX_INITED;
+ ctx->encoding = grn_gctx.encoding;
+ ctx->seqno = 0;
+ ctx->seqno2 = 0;
+ ctx->subno = 0;
+ ctx->impl = NULL;
+ ctx->user_data.ptr = NULL;
+ CRITICAL_SECTION_ENTER(grn_glock);
+ ctx->next = grn_gctx.next;
+ ctx->prev = &grn_gctx;
+ grn_gctx.next->prev = ctx;
+ grn_gctx.next = ctx;
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ ctx->errline = 0;
+ ctx->errfile = "";
+ ctx->errfunc = "";
+ ctx->trace[0] = NULL;
+ ctx->errbuf[0] = '\0';
+ return ctx->rc;
+}
+
+grn_ctx *
+grn_ctx_open(int flags)
+{
+ grn_ctx *ctx = GRN_GMALLOCN(grn_ctx, 1);
+ if (ctx) {
+ grn_ctx_init(ctx, flags|GRN_CTX_ALLOCATED);
+ if (ERRP(ctx, GRN_ERROR)) {
+ grn_ctx_fin(ctx);
+ GRN_GFREE(ctx);
+ ctx = NULL;
+ }
+ }
+ return ctx;
+}
+
+grn_rc
+grn_ctx_fin(grn_ctx *ctx)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (!ctx) { return GRN_INVALID_ARGUMENT; }
+ if (ctx->stat == GRN_CTX_FIN) { return GRN_INVALID_ARGUMENT; }
+ if (!(ctx->flags & GRN_CTX_ALLOCATED)) {
+ CRITICAL_SECTION_ENTER(grn_glock);
+ ctx->next->prev = ctx->prev;
+ ctx->prev->next = ctx->next;
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ }
+ if (ctx->impl) {
+ grn_ctx_impl_clear_n_same_error_mssagges(ctx);
+ if (ctx->impl->finalizer) {
+ ctx->impl->finalizer(ctx, 0, NULL, &(ctx->user_data));
+ }
+ grn_ctx_impl_mrb_fin(ctx);
+ grn_ctx_loader_clear(ctx);
+ if (ctx->impl->parser) {
+ grn_expr_parser_close(ctx);
+ }
+ if (ctx->impl->values) {
+#ifndef USE_MEMORY_DEBUG
+ grn_db_obj *o;
+ GRN_ARRAY_EACH(ctx, ctx->impl->values, 0, 0, id, &o, {
+ grn_obj_close(ctx, *((grn_obj **)o));
+ });
+#endif
+ grn_array_close(ctx, ctx->impl->values);
+ }
+ if (ctx->impl->ios) {
+ grn_hash_close(ctx, ctx->impl->ios);
+ }
+ if (ctx->impl->com) {
+ if (ctx->stat != GRN_CTX_QUIT) {
+ int flags;
+ char *str;
+ unsigned int str_len;
+ grn_ctx_send(ctx, "quit", 4, GRN_CTX_HEAD);
+ grn_ctx_recv(ctx, &str, &str_len, &flags);
+ }
+ grn_ctx_send(ctx, "ACK", 3, GRN_CTX_HEAD);
+ rc = grn_com_close(ctx, ctx->impl->com);
+ }
+ GRN_OBJ_FIN(ctx, &ctx->impl->names);
+ GRN_OBJ_FIN(ctx, &ctx->impl->levels);
+ GRN_OBJ_FIN(ctx, &ctx->impl->query_log_buf);
+ rc = grn_obj_close(ctx, ctx->impl->outbuf);
+ {
+ grn_hash **vp;
+ grn_obj *value;
+ GRN_HASH_EACH(ctx, ctx->impl->expr_vars, eid, NULL, NULL, &vp, {
+ if (*vp) {
+ GRN_HASH_EACH(ctx, *vp, id, NULL, NULL, &value, {
+ GRN_OBJ_FIN(ctx, value);
+ });
+ }
+ grn_hash_close(ctx, *vp);
+ });
+ }
+ grn_hash_close(ctx, ctx->impl->expr_vars);
+ if (ctx->impl->db && ctx->flags & GRN_CTX_PER_DB) {
+ grn_obj *db = ctx->impl->db;
+ ctx->impl->db = NULL;
+ grn_obj_close(ctx, db);
+ }
+ {
+ int i;
+ grn_io_mapinfo *mi;
+ for (i = 0, mi = ctx->impl->segs; i < GRN_CTX_N_SEGMENTS; i++, mi++) {
+ if (mi->map) {
+ //GRN_LOG(ctx, GRN_LOG_NOTICE, "unmap in ctx_fin(%d,%d,%d)", i, (mi->count & GRN_CTX_SEGMENT_MASK), mi->nref);
+ if (mi->count & GRN_CTX_SEGMENT_VLEN) {
+ grn_io_anon_unmap(ctx, mi, mi->nref * grn_pagesize);
+ } else {
+ grn_io_anon_unmap(ctx, mi, GRN_CTX_SEGMENT_SIZE);
+ }
+ }
+ }
+ }
+ grn_alloc_info_dump(ctx);
+ grn_alloc_info_free(ctx);
+ CRITICAL_SECTION_FIN(ctx->impl->lock);
+ {
+ grn_io_mapinfo mi;
+ mi.map = (void *)ctx->impl;
+ grn_io_anon_unmap(ctx, &mi, IMPL_SIZE);
+ }
+ ctx->impl = NULL;
+ }
+ ctx->stat = GRN_CTX_FIN;
+ return rc;
+}
+
+grn_rc
+grn_ctx_set_finalizer(grn_ctx *ctx, grn_proc_func *finalizer)
+{
+ if (!ctx) { return GRN_INVALID_ARGUMENT; }
+ if (!ctx->impl) {
+ grn_ctx_impl_init(ctx);
+ if (ERRP(ctx, GRN_ERROR)) { return ctx->rc; }
+ }
+ ctx->impl->finalizer = finalizer;
+ return GRN_SUCCESS;
+}
+
+grn_timeval grn_starttime;
+
+static char *default_logger_path = NULL;
+static FILE *default_logger_file = NULL;
+static grn_critical_section default_logger_lock;
+
+static void
+default_logger_log(grn_ctx *ctx, grn_log_level level,
+ const char *timestamp, const char *title,
+ const char *message, const char *location, void *user_data)
+{
+ const char slev[] = " EACewnid-";
+ if (default_logger_path) {
+ CRITICAL_SECTION_ENTER(default_logger_lock);
+ if (!default_logger_file) {
+ default_logger_file = fopen(default_logger_path, "a");
+ }
+ if (default_logger_file) {
+ if (location && *location) {
+ fprintf(default_logger_file, "%s|%c|%s %s %s\n",
+ timestamp, *(slev + level), title, message, location);
+ } else {
+ fprintf(default_logger_file, "%s|%c|%s %s\n", timestamp,
+ *(slev + level), title, message);
+ }
+ fflush(default_logger_file);
+ }
+ CRITICAL_SECTION_LEAVE(default_logger_lock);
+ }
+}
+
+static void
+default_logger_reopen(grn_ctx *ctx, void *user_data)
+{
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log will be closed.");
+ CRITICAL_SECTION_ENTER(default_logger_lock);
+ if (default_logger_file) {
+ fclose(default_logger_file);
+ default_logger_file = NULL;
+ }
+ CRITICAL_SECTION_LEAVE(default_logger_lock);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log opened.");
+}
+
+static void
+default_logger_fin(grn_ctx *ctx, void *user_data)
+{
+ CRITICAL_SECTION_ENTER(default_logger_lock);
+ if (default_logger_file) {
+ fclose(default_logger_file);
+ default_logger_file = NULL;
+ }
+ CRITICAL_SECTION_LEAVE(default_logger_lock);
+}
+
+static grn_logger default_logger = {
+ GRN_LOG_DEFAULT_LEVEL,
+ GRN_LOG_TIME|GRN_LOG_MESSAGE,
+ NULL,
+ default_logger_log,
+ default_logger_reopen,
+ default_logger_fin
+};
+
+static grn_logger current_logger = {
+ GRN_LOG_DEFAULT_LEVEL,
+ GRN_LOG_TIME|GRN_LOG_MESSAGE,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+void
+grn_default_logger_set_max_level(grn_log_level max_level)
+{
+ default_logger.max_level = max_level;
+ if (current_logger.log == default_logger_log) {
+ current_logger.max_level = max_level;
+ }
+}
+
+grn_log_level
+grn_default_logger_get_max_level(void)
+{
+ return default_logger.max_level;
+}
+
+void
+grn_default_logger_set_path(const char *path)
+{
+ if (default_logger_path) {
+ free(default_logger_path);
+ }
+
+ if (path) {
+ default_logger_path = strdup(path);
+ } else {
+ default_logger_path = NULL;
+ }
+}
+
+const char *
+grn_default_logger_get_path(void)
+{
+ return default_logger_path;
+}
+
+void
+grn_logger_reopen(grn_ctx *ctx)
+{
+ if (current_logger.reopen) {
+ current_logger.reopen(ctx, current_logger.user_data);
+ }
+}
+
+static void
+grn_logger_fin(grn_ctx *ctx)
+{
+ if (current_logger.fin) {
+ current_logger.fin(ctx, current_logger.user_data);
+ }
+}
+
+static void
+logger_info_func_wrapper(grn_ctx *ctx, grn_log_level level,
+ const char *timestamp, const char *title,
+ const char *message, const char *location,
+ void *user_data)
+{
+ grn_logger_info *info = user_data;
+ info->func(level, timestamp, title, message, location, info->func_arg);
+}
+
+/* Deprecated since 2.1.2. */
+grn_rc
+grn_logger_info_set(grn_ctx *ctx, const grn_logger_info *info)
+{
+ if (info) {
+ grn_logger logger;
+
+ memset(&logger, 0, sizeof(grn_logger));
+ logger.max_level = info->max_level;
+ logger.flags = info->flags;
+ if (info->func) {
+ logger.log = logger_info_func_wrapper;
+ logger.user_data = (grn_logger_info *)info;
+ } else {
+ logger.log = default_logger_log;
+ logger.reopen = default_logger_reopen;
+ logger.fin = default_logger_fin;
+ }
+ return grn_logger_set(ctx, &logger);
+ } else {
+ return grn_logger_set(ctx, NULL);
+ }
+}
+
+grn_rc
+grn_logger_set(grn_ctx *ctx, const grn_logger *logger)
+{
+ grn_logger_fin(ctx);
+ if (logger) {
+ current_logger = *logger;
+ } else {
+ current_logger = default_logger;
+ }
+ return GRN_SUCCESS;
+}
+
+void
+grn_logger_set_max_level(grn_ctx *ctx, grn_log_level max_level)
+{
+ current_logger.max_level = max_level;
+}
+
+grn_log_level
+grn_logger_get_max_level(grn_ctx *ctx)
+{
+ return current_logger.max_level;
+}
+
+grn_bool
+grn_logger_pass(grn_ctx *ctx, grn_log_level level)
+{
+ return level <= current_logger.max_level;
+}
+
+#define TBUFSIZE GRN_TIMEVAL_STR_SIZE
+#define MBUFSIZE 0x1000
+#define LBUFSIZE 0x400
+
+void
+grn_logger_put(grn_ctx *ctx, grn_log_level level,
+ const char *file, int line, const char *func, const char *fmt, ...)
+{
+ if (level <= current_logger.max_level && current_logger.log) {
+ char tbuf[TBUFSIZE];
+ char mbuf[MBUFSIZE];
+ char lbuf[LBUFSIZE];
+ tbuf[0] = '\0';
+ if (current_logger.flags & GRN_LOG_TIME) {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ grn_timeval2str(ctx, &tv, tbuf);
+ }
+ if (current_logger.flags & GRN_LOG_MESSAGE) {
+ va_list argp;
+ va_start(argp, fmt);
+ vsnprintf(mbuf, MBUFSIZE - 1, fmt, argp);
+ va_end(argp);
+ mbuf[MBUFSIZE - 1] = '\0';
+ } else {
+ mbuf[0] = '\0';
+ }
+ if (current_logger.flags & GRN_LOG_LOCATION) {
+ snprintf(lbuf, LBUFSIZE - 1, "%d %s:%d %s()", getpid(), file, line, func);
+ lbuf[LBUFSIZE - 1] = '\0';
+ } else {
+ lbuf[0] = '\0';
+ }
+ current_logger.log(ctx, level, tbuf, "", mbuf, lbuf,
+ current_logger.user_data);
+ }
+}
+
+static void
+logger_init(void)
+{
+ if (!default_logger_path) {
+ default_logger_path = strdup(GRN_LOG_PATH);
+ }
+ memcpy(&current_logger, &default_logger, sizeof(grn_logger));
+ CRITICAL_SECTION_INIT(default_logger_lock);
+}
+
+static void
+logger_fin(grn_ctx *ctx)
+{
+ grn_logger_fin(ctx);
+ if (default_logger_path) {
+ free(default_logger_path);
+ default_logger_path = NULL;
+ }
+ CRITICAL_SECTION_FIN(default_logger_lock);
+}
+
+
+static char *default_query_logger_path = NULL;
+static FILE *default_query_logger_file = NULL;
+static grn_critical_section default_query_logger_lock;
+
+static void
+default_query_logger_log(grn_ctx *ctx, unsigned int flag,
+ const char *timestamp, const char *info,
+ const char *message, void *user_data)
+{
+ if (default_query_logger_path) {
+ CRITICAL_SECTION_ENTER(default_query_logger_lock);
+ if (!default_query_logger_file) {
+ default_query_logger_file = fopen(default_query_logger_path, "a");
+ }
+ if (default_query_logger_file) {
+ fprintf(default_query_logger_file, "%s|%s%s\n", timestamp, info, message);
+ fflush(default_query_logger_file);
+ }
+ CRITICAL_SECTION_LEAVE(default_query_logger_lock);
+ }
+}
+
+static void
+default_query_logger_close(grn_ctx *ctx, void *user_data)
+{
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_DESTINATION, " ",
+ "query log will be closed: <%s>", default_query_logger_path);
+ CRITICAL_SECTION_ENTER(default_query_logger_lock);
+ if (default_query_logger_file) {
+ fclose(default_query_logger_file);
+ default_query_logger_file = NULL;
+ }
+ CRITICAL_SECTION_LEAVE(default_query_logger_lock);
+}
+
+static void
+default_query_logger_reopen(grn_ctx *ctx, void *user_data)
+{
+ default_query_logger_close(ctx, user_data);
+ if (default_query_logger_path) {
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_DESTINATION, " ",
+ "query log is opened: <%s>", default_query_logger_path);
+ }
+}
+
+static void
+default_query_logger_fin(grn_ctx *ctx, void *user_data)
+{
+ if (default_query_logger_file) {
+ default_query_logger_close(ctx, user_data);
+ }
+}
+
+static grn_query_logger default_query_logger = {
+ GRN_QUERY_LOG_DEFAULT,
+ NULL,
+ default_query_logger_log,
+ default_query_logger_reopen,
+ default_query_logger_fin
+};
+
+static grn_query_logger current_query_logger = {
+ GRN_QUERY_LOG_DEFAULT,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+void
+grn_default_query_logger_set_flags(unsigned int flags)
+{
+ default_query_logger.flags = flags;
+ if (current_query_logger.log == default_query_logger_log) {
+ current_query_logger.flags = flags;
+ }
+}
+
+unsigned int
+grn_default_query_logger_get_flags(void)
+{
+ return default_query_logger.flags;
+}
+
+void
+grn_default_query_logger_set_path(const char *path)
+{
+ if (default_query_logger_path) {
+ free(default_query_logger_path);
+ }
+
+ if (path) {
+ default_query_logger_path = strdup(path);
+ } else {
+ default_query_logger_path = NULL;
+ }
+}
+
+const char *
+grn_default_query_logger_get_path(void)
+{
+ return default_query_logger_path;
+}
+
+void
+grn_query_logger_reopen(grn_ctx *ctx)
+{
+ if (current_query_logger.reopen) {
+ current_query_logger.reopen(ctx, current_query_logger.user_data);
+ }
+}
+
+static void
+grn_query_logger_fin(grn_ctx *ctx)
+{
+ if (current_query_logger.fin) {
+ current_query_logger.fin(ctx, current_query_logger.user_data);
+ }
+}
+
+grn_rc
+grn_query_logger_set(grn_ctx *ctx, const grn_query_logger *logger)
+{
+ grn_query_logger_fin(ctx);
+ if (logger) {
+ current_query_logger = *logger;
+ } else {
+ current_query_logger = default_query_logger;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_bool
+grn_query_logger_pass(grn_ctx *ctx, unsigned int flag)
+{
+ return current_query_logger.flags & flag;
+}
+
+#define TIMESTAMP_BUFFER_SIZE TBUFSIZE
+/* 8+a(%p) + 1(|) + 1(mark) + 15(elapsed time) = 25+a */
+#define INFO_BUFFER_SIZE 40
+
+void
+grn_query_logger_put(grn_ctx *ctx, unsigned int flag, const char *mark,
+ const char *format, ...)
+{
+ char timestamp[TIMESTAMP_BUFFER_SIZE];
+ char info[INFO_BUFFER_SIZE];
+ grn_obj *message = &ctx->impl->query_log_buf;
+
+ if (!current_query_logger.log) {
+ return;
+ }
+
+ {
+ grn_timeval tv;
+ timestamp[0] = '\0';
+ grn_timeval_now(ctx, &tv);
+ grn_timeval2str(ctx, &tv, timestamp);
+ }
+
+ if (flag & (GRN_QUERY_LOG_COMMAND | GRN_QUERY_LOG_DESTINATION)) {
+ snprintf(info, INFO_BUFFER_SIZE - 1, "%p|%s", ctx, mark);
+ info[INFO_BUFFER_SIZE - 1] = '\0';
+ } else {
+ grn_timeval tv;
+ uint64_t elapsed_time;
+ grn_timeval_now(ctx, &tv);
+ elapsed_time =
+ (uint64_t)(tv.tv_sec - ctx->impl->tv.tv_sec) * GRN_TIME_NSEC_PER_SEC +
+ (tv.tv_nsec - ctx->impl->tv.tv_nsec);
+
+ snprintf(info, INFO_BUFFER_SIZE - 1,
+ "%p|%s%015" GRN_FMT_INT64U " ", ctx, mark, elapsed_time);
+ info[INFO_BUFFER_SIZE - 1] = '\0';
+ }
+
+ {
+ va_list args;
+
+ va_start(args, format);
+ GRN_BULK_REWIND(message);
+ grn_text_vprintf(ctx, message, format, args);
+ va_end(args);
+ GRN_TEXT_PUTC(ctx, message, '\0');
+ }
+
+ current_query_logger.log(ctx, flag, timestamp, info, GRN_TEXT_VALUE(message),
+ current_query_logger.user_data);
+}
+
+static void
+query_logger_init(void)
+{
+ memcpy(&current_query_logger, &default_query_logger, sizeof(grn_query_logger));
+ CRITICAL_SECTION_INIT(default_query_logger_lock);
+}
+
+static void
+query_logger_fin(grn_ctx *ctx)
+{
+ grn_query_logger_fin(ctx);
+ if (default_query_logger_path) {
+ free(default_query_logger_path);
+ }
+ CRITICAL_SECTION_FIN(default_query_logger_lock);
+}
+
+void
+grn_log_reopen(grn_ctx *ctx)
+{
+ grn_logger_reopen(ctx);
+ grn_query_logger_reopen(ctx);
+}
+
+
+static void
+check_overcommit_memory(grn_ctx *ctx)
+{
+ FILE *file;
+ int value;
+ file = fopen("/proc/sys/vm/overcommit_memory", "r");
+ if (!file) { return; }
+ value = fgetc(file);
+ if (value != '1') {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "vm.overcommit_memory kernel parameter should be 1: <%c>: "
+ "See INFO level log to resolve this",
+ value);
+ GRN_LOG(ctx, GRN_LOG_INFO,
+ "Some processings with vm.overcommit_memory != 1 "
+ "may break DB under low memory condition.");
+ GRN_LOG(ctx, GRN_LOG_INFO,
+ "To set vm.overcommit_memory to 1");
+ GRN_LOG(ctx, GRN_LOG_INFO,
+ "add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and "
+ "restart your system or");
+ GRN_LOG(ctx, GRN_LOG_INFO,
+ "run 'sudo /sbin/sysctl vm.overcommit_memory=1' command.");
+ }
+ fclose(file);
+}
+
+static void
+check_grn_ja_skip_same_value_put(grn_ctx *ctx)
+{
+ const char *grn_ja_skip_same_value_put_env;
+
+ grn_ja_skip_same_value_put_env = getenv("GRN_JA_SKIP_SAME_VALUE_PUT");
+ if (grn_ja_skip_same_value_put_env &&
+ strcmp(grn_ja_skip_same_value_put_env, "no") == 0) {
+ grn_ja_skip_same_value_put = GRN_FALSE;
+ }
+}
+
+grn_rc
+grn_init(void)
+{
+ grn_rc rc;
+ grn_ctx *ctx = &grn_gctx;
+ logger_init();
+ query_logger_init();
+ CRITICAL_SECTION_INIT(grn_glock);
+ grn_gtick = 0;
+ ctx->next = ctx;
+ ctx->prev = ctx;
+ grn_ctx_init(ctx, 0);
+ ctx->encoding = grn_encoding_parse(GRN_DEFAULT_ENCODING);
+ grn_timeval_now(ctx, &grn_starttime);
+#ifdef WIN32
+ {
+ SYSTEM_INFO si;
+ GetSystemInfo(&si);
+ grn_pagesize = si.dwAllocationGranularity;
+ }
+#else /* WIN32 */
+ if ((grn_pagesize = sysconf(_SC_PAGESIZE)) == -1) {
+ SERR("_SC_PAGESIZE");
+ return ctx->rc;
+ }
+#endif /* WIN32 */
+ if (grn_pagesize & (grn_pagesize - 1)) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "pagesize=%x", grn_pagesize);
+ }
+ // expand_stack();
+#ifdef USE_FAIL_MALLOC
+ if (getenv("GRN_FMALLOC_PROB")) {
+ grn_fmalloc_prob = strtod(getenv("GRN_FMALLOC_PROB"), 0) * RAND_MAX;
+ if (getenv("GRN_FMALLOC_SEED")) {
+ srand((unsigned int)atoi(getenv("GRN_FMALLOC_SEED")));
+ } else {
+ srand((unsigned int)time(NULL));
+ }
+ }
+ if (getenv("GRN_FMALLOC_FUNC")) {
+ grn_fmalloc_func = getenv("GRN_FMALLOC_FUNC");
+ }
+ if (getenv("GRN_FMALLOC_FILE")) {
+ grn_fmalloc_file = getenv("GRN_FMALLOC_FILE");
+ }
+ if (getenv("GRN_FMALLOC_LINE")) {
+ grn_fmalloc_line = atoi(getenv("GRN_FMALLOC_LINE"));
+ }
+#endif /* USE_FAIL_MALLOC */
+ if ((rc = grn_com_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_com_init failed (%d)", rc);
+ return rc;
+ }
+ grn_ctx_impl_init(ctx);
+ if ((rc = grn_io_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "io initialize failed (%d)", rc);
+ return rc;
+ }
+ if ((rc = grn_plugins_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "plugins initialize failed (%d)", rc);
+ return rc;
+ }
+ if ((rc = grn_normalizer_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_normalizer_init failed (%d)", rc);
+ return rc;
+ }
+ if ((rc = grn_token_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_token_init failed (%d)", rc);
+ return rc;
+ }
+ /*
+ if ((rc = grn_index_init())) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "index initialize failed (%d)", rc);
+ return rc;
+ }
+ */
+ grn_cache_init();
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "grn_init");
+ check_overcommit_memory(ctx);
+ check_grn_ja_skip_same_value_put(ctx);
+ return rc;
+}
+
+grn_encoding
+grn_get_default_encoding(void)
+{
+ return grn_gctx.encoding;
+}
+
+grn_rc
+grn_set_default_encoding(grn_encoding encoding)
+{
+ switch (encoding) {
+ case GRN_ENC_DEFAULT :
+ grn_gctx.encoding = grn_encoding_parse(GRN_DEFAULT_ENCODING);
+ return GRN_SUCCESS;
+ case GRN_ENC_NONE :
+ case GRN_ENC_EUC_JP :
+ case GRN_ENC_UTF8 :
+ case GRN_ENC_SJIS :
+ case GRN_ENC_LATIN1 :
+ case GRN_ENC_KOI8R :
+ grn_gctx.encoding = encoding;
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+}
+
+grn_command_version
+grn_get_default_command_version(void)
+{
+ return grn_ctx_get_command_version(&grn_gctx);
+}
+
+grn_rc
+grn_set_default_command_version(grn_command_version version)
+{
+ return grn_ctx_set_command_version(&grn_gctx, version);
+}
+
+long long int
+grn_get_default_match_escalation_threshold(void)
+{
+ return grn_ctx_get_match_escalation_threshold(&grn_gctx);
+}
+
+grn_rc
+grn_set_default_match_escalation_threshold(long long int threshold)
+{
+ return grn_ctx_set_match_escalation_threshold(&grn_gctx, threshold);
+}
+
+int
+grn_get_lock_timeout(void)
+{
+ return grn_lock_timeout;
+}
+
+grn_rc
+grn_set_lock_timeout(int timeout)
+{
+ grn_lock_timeout = timeout;
+ return GRN_SUCCESS;
+}
+
+static int alloc_count = 0;
+
+grn_rc
+grn_fin(void)
+{
+ grn_ctx *ctx, *ctx_;
+ if (grn_gctx.stat == GRN_CTX_FIN) { return GRN_INVALID_ARGUMENT; }
+ for (ctx = grn_gctx.next; ctx != &grn_gctx; ctx = ctx_) {
+ ctx_ = ctx->next;
+ if (ctx->stat != GRN_CTX_FIN) { grn_ctx_fin(ctx); }
+ if (ctx->flags & GRN_CTX_ALLOCATED) {
+ ctx->next->prev = ctx->prev;
+ ctx->prev->next = ctx->next;
+ GRN_GFREE(ctx);
+ }
+ }
+ query_logger_fin(ctx);
+ grn_cache_fin();
+ grn_token_fin();
+ grn_normalizer_fin();
+ grn_plugins_fin();
+ grn_io_fin();
+ grn_ctx_fin(ctx);
+ grn_com_fin();
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "grn_fin (%d)", alloc_count);
+ logger_fin(ctx);
+ CRITICAL_SECTION_FIN(grn_glock);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ctx_connect(grn_ctx *ctx, const char *host, int port, int flags)
+{
+ GRN_API_ENTER;
+ if (!ctx->impl) { grn_ctx_impl_init(ctx); }
+ if (!ctx->impl) { goto exit; }
+ {
+ grn_com *com = grn_com_copen(ctx, NULL, host, port);
+ if (com) {
+ ctx->impl->com = com;
+ }
+ }
+exit :
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_ctx_close(grn_ctx *ctx)
+{
+ grn_rc rc = grn_ctx_fin(ctx);
+ ctx->next->prev = ctx->prev;
+ ctx->prev->next = ctx->next;
+ GRN_GFREE(ctx);
+ return rc;
+}
+
+grn_command_version
+grn_ctx_get_command_version(grn_ctx *ctx)
+{
+ if (ctx->impl) {
+ return ctx->impl->command_version;
+ } else {
+ return GRN_COMMAND_VERSION_STABLE;
+ }
+}
+
+const char *
+grn_ctx_get_mime_type(grn_ctx *ctx)
+{
+ if (ctx->impl) {
+ return ctx->impl->mime_type;
+ } else {
+ return NULL;
+ }
+}
+
+grn_rc
+grn_ctx_set_command_version(grn_ctx *ctx, grn_command_version version)
+{
+ switch (version) {
+ case GRN_COMMAND_VERSION_DEFAULT :
+ ctx->impl->command_version = GRN_COMMAND_VERSION_STABLE;
+ return GRN_SUCCESS;
+ default :
+ if (GRN_COMMAND_VERSION_MIN <= version &&
+ version <= GRN_COMMAND_VERSION_MAX) {
+ ctx->impl->command_version = version;
+ return GRN_SUCCESS;
+ } else {
+ return GRN_UNSUPPORTED_COMMAND_VERSION;
+ }
+ }
+}
+
+long long int
+grn_ctx_get_match_escalation_threshold(grn_ctx *ctx)
+{
+ if (ctx->impl) {
+ return ctx->impl->match_escalation_threshold;
+ } else {
+ return GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD;
+ }
+}
+
+grn_rc
+grn_ctx_set_match_escalation_threshold(grn_ctx *ctx, long long int threshold)
+{
+ ctx->impl->match_escalation_threshold = threshold;
+ return GRN_SUCCESS;
+}
+
+grn_content_type
+grn_get_ctype(grn_obj *var)
+{
+ grn_content_type ct = GRN_CONTENT_JSON;
+ if (var->header.domain == GRN_DB_INT32) {
+ ct = GRN_INT32_VALUE(var);
+ } else if (GRN_TEXT_LEN(var)) {
+ switch (*(GRN_TEXT_VALUE(var))) {
+ case 't' :
+ case 'T' :
+ ct = GRN_CONTENT_TSV;
+ break;
+ case 'j' :
+ case 'J' :
+ ct = GRN_CONTENT_JSON;
+ break;
+ case 'x' :
+ case 'X' :
+ ct = GRN_CONTENT_XML;
+ break;
+ }
+ }
+ return ct;
+}
+
+static void
+get_content_mime_type(grn_ctx *ctx, const char *p, const char *pe)
+{
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "application/octet-stream";
+
+ if (p + 2 <= pe) {
+ switch (*p) {
+ case 'c' :
+ if (p + 3 == pe && !memcmp(p, "css", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "text/css";
+ }
+ break;
+ case 'g' :
+ if (p + 3 == pe && !memcmp(p, "gif", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "image/gif";
+ }
+ break;
+ case 'h' :
+ if (p + 4 == pe && !memcmp(p, "html", 4)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "text/html";
+ }
+ break;
+ case 'j' :
+ if (!memcmp(p, "js", 2)) {
+ if (p + 2 == pe) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "text/javascript";
+ } else if (p + 4 == pe && !memcmp(p + 2, "on", 2)) {
+ ctx->impl->output_type = GRN_CONTENT_JSON;
+ ctx->impl->mime_type = "application/json";
+ }
+ } else if (p + 3 == pe && !memcmp(p, "jpg", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "image/jpeg";
+ }
+ break;
+#ifdef GRN_WITH_MESSAGE_PACK
+ case 'm' :
+ if (p + 7 == pe && !memcmp(p, "msgpack", 7)) {
+ ctx->impl->output_type = GRN_CONTENT_MSGPACK;
+ ctx->impl->mime_type = "application/x-msgpack";
+ }
+ break;
+#endif
+ case 'p' :
+ if (p + 3 == pe && !memcmp(p, "png", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "image/png";
+ }
+ break;
+ case 't' :
+ if (p + 3 == pe && !memcmp(p, "txt", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "text/plain";
+ } else if (p + 3 == pe && !memcmp(p, "tsv", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_TSV;
+ ctx->impl->mime_type = "text/plain";
+ }
+ break;
+ case 'x':
+ if (p + 3 == pe && !memcmp(p, "xml", 3)) {
+ ctx->impl->output_type = GRN_CONTENT_XML;
+ ctx->impl->mime_type = "text/xml";
+ }
+ break;
+ }
+ }
+}
+
+static void
+grn_str_get_mime_type(grn_ctx *ctx, const char *p, const char *pe,
+ const char **key_end, const char **filename_end)
+{
+ const char *pd = NULL;
+ for (; p < pe && *p != '?' && *p != '#'; p++) {
+ if (*p == '.') { pd = p; }
+ }
+ *filename_end = p;
+ if (pd && pd < p) {
+ get_content_mime_type(ctx, pd + 1, p);
+ *key_end = pd;
+ } else {
+ *key_end = pe;
+ }
+}
+
+static void
+get_command_version(grn_ctx *ctx, const char *p, const char *pe)
+{
+ grn_command_version version;
+ const char *rest;
+
+ version = grn_atoui(p, pe, &rest);
+ if (pe == rest) {
+ grn_rc rc;
+ rc = grn_ctx_set_command_version(ctx, version);
+ if (rc == GRN_UNSUPPORTED_COMMAND_VERSION) {
+ ERR(rc,
+ "unsupported command version is specified: %d: "
+ "stable command version: %d: "
+ "available command versions: %d-%d",
+ version,
+ GRN_COMMAND_VERSION_STABLE,
+ GRN_COMMAND_VERSION_MIN, GRN_COMMAND_VERSION_MAX);
+ }
+ }
+}
+
+#define INDEX_HTML "index.html"
+#define OUTPUT_TYPE "output_type"
+#define COMMAND_VERSION "command_version"
+#define EXPR_MISSING "expr_missing"
+#define OUTPUT_TYPE_LEN (sizeof(OUTPUT_TYPE) - 1)
+#define COMMAND_VERSION_LEN (sizeof(COMMAND_VERSION) - 1)
+
+#define HTTP_QUERY_PAIR_DELIMITER "="
+#define HTTP_QUERY_PAIRS_DELIMITERS "&;"
+
+static inline int
+command_proc_p(grn_obj *expr)
+{
+ return (expr->header.type == GRN_PROC &&
+ ((grn_proc *)expr)->type == GRN_PROC_COMMAND);
+}
+
+grn_obj *
+grn_ctx_qe_exec_uri(grn_ctx *ctx, const char *path, uint32_t path_len)
+{
+ grn_obj buf, *expr, *val;
+ const char *p = path, *e = path + path_len, *v, *key_end, *filename_end;
+ GRN_TEXT_INIT(&buf, 0);
+ p = grn_text_urldec(ctx, &buf, p, e, '?');
+ if (!GRN_TEXT_LEN(&buf)) { GRN_TEXT_SETS(ctx, &buf, INDEX_HTML); }
+ v = GRN_TEXT_VALUE(&buf);
+ grn_str_get_mime_type(ctx, v, GRN_BULK_CURR(&buf), &key_end, &filename_end);
+ if ((GRN_TEXT_LEN(&buf) >= 2 && v[0] == 'd' && v[1] == '/')) {
+ const char *command_name = v + 2;
+ int command_name_size = key_end - command_name;
+ expr = grn_ctx_get(ctx, command_name, command_name_size);
+ if (expr && command_proc_p(expr)) {
+ while (p < e) {
+ int l;
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_cgidec(ctx, &buf, p, e, HTTP_QUERY_PAIR_DELIMITER);
+ v = GRN_TEXT_VALUE(&buf);
+ l = GRN_TEXT_LEN(&buf);
+ if (l == OUTPUT_TYPE_LEN && !memcmp(v, OUTPUT_TYPE, OUTPUT_TYPE_LEN)) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_cgidec(ctx, &buf, p, e, HTTP_QUERY_PAIRS_DELIMITERS);
+ v = GRN_TEXT_VALUE(&buf);
+ get_content_mime_type(ctx, v, GRN_BULK_CURR(&buf));
+ } else if (l == COMMAND_VERSION_LEN &&
+ !memcmp(v, COMMAND_VERSION, COMMAND_VERSION_LEN)) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_cgidec(ctx, &buf, p, e, HTTP_QUERY_PAIRS_DELIMITERS);
+ get_command_version(ctx, GRN_TEXT_VALUE(&buf), GRN_BULK_CURR(&buf));
+ if (ctx->rc) { goto exit; }
+ } else {
+ if (!(val = grn_expr_get_or_add_var(ctx, expr, v, l))) {
+ val = &buf;
+ }
+ grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
+ p = grn_text_cgidec(ctx, val, p, e, HTTP_QUERY_PAIRS_DELIMITERS);
+ }
+ }
+ ctx->impl->curr_expr = expr;
+ grn_expr_exec(ctx, expr, 0);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid command name: %.*s",
+ command_name_size, command_name);
+ }
+ } else if ((expr = grn_ctx_get(ctx, GRN_EXPR_MISSING_NAME,
+ strlen(GRN_EXPR_MISSING_NAME)))) {
+ if ((val = grn_expr_get_var_by_offset(ctx, expr, 0))) {
+ grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
+ GRN_TEXT_SET(ctx, val, v, filename_end - v);
+ }
+ ctx->impl->curr_expr = expr;
+ grn_expr_exec(ctx, expr, 0);
+ }
+exit :
+ GRN_OBJ_FIN(ctx, &buf);
+ return expr;
+}
+
+grn_obj *
+grn_ctx_qe_exec(grn_ctx *ctx, const char *str, uint32_t str_len)
+{
+ char tok_type;
+ int offset = 0;
+ grn_obj buf, *expr = NULL, *val = NULL;
+ const char *p = str, *e = str + str_len, *v;
+ GRN_TEXT_INIT(&buf, 0);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ expr = grn_ctx_get(ctx, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ while (p < e) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ v = GRN_TEXT_VALUE(&buf);
+ switch (tok_type) {
+ case GRN_TOK_VOID :
+ p = e;
+ break;
+ case GRN_TOK_SYMBOL :
+ if (GRN_TEXT_LEN(&buf) > 2 && v[0] == '-' && v[1] == '-') {
+ int l = GRN_TEXT_LEN(&buf) - 2;
+ v += 2;
+ if (l == OUTPUT_TYPE_LEN && !memcmp(v, OUTPUT_TYPE, OUTPUT_TYPE_LEN)) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ v = GRN_TEXT_VALUE(&buf);
+ get_content_mime_type(ctx, v, GRN_BULK_CURR(&buf));
+ } else if (l == COMMAND_VERSION_LEN &&
+ !memcmp(v, COMMAND_VERSION, COMMAND_VERSION_LEN)) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ get_command_version(ctx, GRN_TEXT_VALUE(&buf), GRN_BULK_CURR(&buf));
+ if (ctx->rc) { goto exit; }
+ } else if (expr && (val = grn_expr_get_or_add_var(ctx, expr, v, l))) {
+ grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
+ p = grn_text_unesc_tok(ctx, val, p, e, &tok_type);
+ } else {
+ p = e;
+ }
+ break;
+ }
+ // fallthru
+ case GRN_TOK_STRING :
+ case GRN_TOK_QUOTE :
+ if (expr && (val = grn_expr_get_var_by_offset(ctx, expr, offset++))) {
+ grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
+ GRN_TEXT_PUT(ctx, val, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ } else {
+ p = e;
+ }
+ break;
+ }
+ }
+ ctx->impl->curr_expr = expr;
+ if (expr && command_proc_p(expr)) {
+ grn_expr_exec(ctx, expr, 0);
+ } else {
+ GRN_BULK_REWIND(&buf);
+ grn_text_unesc_tok(ctx, &buf, str, str + str_len, &tok_type);
+ if (GRN_TEXT_LEN(&buf)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid command name: %.*s",
+ (int)GRN_TEXT_LEN(&buf), GRN_TEXT_VALUE(&buf));
+ }
+ }
+exit :
+ GRN_OBJ_FIN(ctx, &buf);
+ return expr;
+}
+
+grn_rc
+grn_ctx_sendv(grn_ctx *ctx, int argc, char **argv, int flags)
+{
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ while (argc--) {
+ // todo : encode into json like syntax
+ GRN_TEXT_PUTS(ctx, &buf, *argv);
+ argv++;
+ if (argc) { GRN_TEXT_PUTC(ctx, &buf, ' '); }
+ }
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf), flags);
+ GRN_OBJ_FIN(ctx, &buf);
+ return ctx->rc;
+}
+
+static int
+comment_command_p(const char *command, unsigned int length)
+{
+ const char *p, *e;
+
+ e = command + length;
+ for (p = command; p < e; p++) {
+ switch (*p) {
+ case '#' :
+ return GRN_TRUE;
+ case ' ' :
+ case '\t' :
+ break;
+ default :
+ return GRN_FALSE;
+ }
+ }
+ return GRN_FALSE;
+}
+
+unsigned int
+grn_ctx_send(grn_ctx *ctx, const char *str, unsigned int str_len, int flags)
+{
+ if (!ctx) { return 0; }
+ GRN_API_ENTER;
+ if (ctx->impl) {
+ if (ctx->impl->com) {
+ grn_rc rc;
+ grn_com_header sheader;
+ grn_timeval_now(ctx, &ctx->impl->tv);
+ if ((flags & GRN_CTX_MORE)) { flags |= GRN_CTX_QUIET; }
+ if (ctx->stat == GRN_CTX_QUIT) { flags |= GRN_CTX_QUIT; }
+ sheader.proto = GRN_COM_PROTO_GQTP;
+ sheader.qtype = 0;
+ sheader.keylen = 0;
+ sheader.level = 0;
+ sheader.flags = flags;
+ sheader.status = 0;
+ sheader.opaque = 0;
+ sheader.cas = 0;
+ if ((rc = grn_com_send(ctx, ctx->impl->com, &sheader, (char *)str, str_len, 0))) {
+ ERR(rc, "grn_com_send failed");
+ }
+ goto exit;
+ } else {
+ grn_obj *expr = NULL;
+ if (comment_command_p(str, str_len)) { goto output; };
+ if (ctx->impl->qe_next) {
+ grn_obj *val;
+ expr = ctx->impl->qe_next;
+ ctx->impl->qe_next = NULL;
+ if ((val = grn_expr_get_var_by_offset(ctx, expr, 0))) {
+ grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
+ GRN_TEXT_PUT(ctx, val, str, str_len);
+ }
+ grn_expr_exec(ctx, expr, 0);
+ } else {
+ ctx->impl->mime_type = "application/json";
+ ctx->impl->output_type = GRN_CONTENT_JSON;
+ grn_timeval_now(ctx, &ctx->impl->tv);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_COMMAND,
+ ">", "%.*s", str_len, str);
+ if (str_len && *str == '/') {
+ expr = grn_ctx_qe_exec_uri(ctx, str + 1, str_len - 1);
+ } else {
+ expr = grn_ctx_qe_exec(ctx, str, str_len);
+ }
+ }
+ if (ctx->stat == GRN_CTX_QUITTING) { ctx->stat = GRN_CTX_QUIT; }
+ if (ctx->impl->qe_next) {
+ ERRCLR(ctx);
+ } else {
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_RESULT_CODE,
+ "<", "rc=%d", ctx->rc);
+ }
+ output :
+ if (!ERRP(ctx, GRN_CRIT)) {
+ if (!(flags & GRN_CTX_QUIET) && ctx->impl->output) {
+ ctx->impl->output(ctx, GRN_CTX_TAIL, ctx->impl->data.ptr);
+ }
+ }
+ if (expr) { grn_expr_clear_vars(ctx, expr); }
+ goto exit;
+ }
+ }
+ ERR(GRN_INVALID_ARGUMENT, "invalid ctx assigned");
+exit :
+ GRN_API_RETURN(0);
+}
+
+unsigned int
+grn_ctx_recv(grn_ctx *ctx, char **str, unsigned int *str_len, int *flags)
+{
+ if (!ctx) { return GRN_INVALID_ARGUMENT; }
+ if (ctx->stat == GRN_CTX_QUIT) {
+ *str = NULL;
+ *str_len = 0;
+ *flags = GRN_CTX_QUIT;
+ return 0;
+ }
+ GRN_API_ENTER;
+ if (ctx->impl) {
+ if (ctx->impl->com) {
+ grn_com_header header;
+ if (grn_com_recv(ctx, ctx->impl->com, &header, ctx->impl->outbuf)) {
+ *str = NULL;
+ *str_len = 0;
+ *flags = 0;
+ } else {
+ *str = GRN_BULK_HEAD(ctx->impl->outbuf);
+ *str_len = GRN_BULK_VSIZE(ctx->impl->outbuf);
+ if (header.flags & GRN_CTX_QUIT) {
+ ctx->stat = GRN_CTX_QUIT;
+ *flags = GRN_CTX_QUIT;
+ } else {
+ *flags = (header.flags & GRN_CTX_TAIL) ? 0 : GRN_CTX_MORE;
+ }
+ ctx->impl->output_type = header.qtype;
+ ctx->rc = (int16_t)ntohs(header.status);
+ ctx->errbuf[0] = '\0';
+ ctx->errline = 0;
+ ctx->errfile = NULL;
+ ctx->errfunc = NULL;
+ }
+ goto exit;
+ } else {
+ grn_obj *buf = ctx->impl->outbuf;
+ unsigned int head = 0, tail = GRN_BULK_VSIZE(buf);
+ *str = GRN_BULK_HEAD(buf) + head;
+ *str_len = tail - head;
+ GRN_BULK_REWIND(ctx->impl->outbuf);
+ goto exit;
+ }
+ }
+ ERR(GRN_INVALID_ARGUMENT, "invalid ctx assigned");
+exit :
+ GRN_API_RETURN(0);
+}
+
+void
+grn_ctx_stream_out_func(grn_ctx *ctx, int flags, void *stream)
+{
+ if (ctx && ctx->impl) {
+ grn_obj *buf = ctx->impl->outbuf;
+ uint32_t size = GRN_BULK_VSIZE(buf);
+ if (size) {
+ if (fwrite(GRN_BULK_HEAD(buf), 1, size, (FILE *)stream)) {
+ fputc('\n', (FILE *)stream);
+ fflush((FILE *)stream);
+ }
+ GRN_BULK_REWIND(buf);
+ }
+ }
+}
+
+void
+grn_ctx_recv_handler_set(grn_ctx *ctx, void (*func)(grn_ctx *, int, void *), void *func_arg)
+{
+ if (ctx && ctx->impl) {
+ ctx->impl->output = func;
+ ctx->impl->data.ptr = func_arg;
+ }
+}
+
+grn_rc
+grn_ctx_info_get(grn_ctx *ctx, grn_ctx_info *info)
+{
+ if (!ctx || !ctx->impl) { return GRN_INVALID_ARGUMENT; }
+ if (ctx->impl->com) {
+ info->fd = ctx->impl->com->fd;
+ info->com_status = ctx->impl->com_status;
+ info->outbuf = ctx->impl->outbuf;
+ info->stat = ctx->stat;
+ } else {
+ info->fd = -1;
+ info->com_status = 0;
+ info->outbuf = ctx->impl->outbuf;
+ info->stat = ctx->stat;
+ }
+ return GRN_SUCCESS;
+}
+
+
+typedef struct _grn_cache_entry grn_cache_entry;
+
+struct _grn_cache {
+ grn_cache_entry *next;
+ grn_cache_entry *prev;
+ grn_hash *hash;
+ grn_mutex mutex;
+ uint32_t max_nentries;
+ uint32_t nfetches;
+ uint32_t nhits;
+};
+
+struct _grn_cache_entry {
+ grn_cache_entry *next;
+ grn_cache_entry *prev;
+ grn_obj *value;
+ grn_timeval tv;
+ grn_id id;
+ uint32_t nref;
+};
+
+static grn_cache *grn_cache_current = NULL;
+static grn_cache *grn_cache_default = NULL;
+
+grn_cache *
+grn_cache_open(grn_ctx *ctx)
+{
+ grn_cache *cache = NULL;
+
+ GRN_API_ENTER;
+ cache = GRN_MALLOC(sizeof(grn_cache));
+ if (!cache) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "[cache] failed to allocate grn_cache");
+ goto exit;
+ }
+
+ cache->next = (grn_cache_entry*)cache;
+ cache->prev = (grn_cache_entry *)cache;
+ cache->hash = grn_hash_create(&grn_gctx, NULL, GRN_TABLE_MAX_KEY_SIZE,
+ sizeof(grn_cache_entry), GRN_OBJ_KEY_VAR_SIZE);
+ MUTEX_INIT(cache->mutex);
+ cache->max_nentries = GRN_CACHE_DEFAULT_MAX_N_ENTRIES;
+ cache->nfetches = 0;
+ cache->nhits = 0;
+
+exit :
+ GRN_API_RETURN(cache);
+}
+
+grn_rc
+grn_cache_close(grn_ctx *ctx, grn_cache *cache)
+{
+ grn_ctx *ctx_original = ctx;
+ grn_cache_entry *vp;
+
+ GRN_API_ENTER;
+
+ ctx = &grn_gctx;
+ GRN_HASH_EACH(ctx, cache->hash, id, NULL, NULL, &vp, {
+ grn_obj_close(ctx, vp->value);
+ });
+ grn_hash_close(ctx, cache->hash);
+ MUTEX_FIN(cache->mutex);
+ ctx = ctx_original;
+ GRN_FREE(cache);
+
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_cache_current_set(grn_ctx *ctx, grn_cache *cache)
+{
+ grn_cache_current = cache;
+ return GRN_SUCCESS;
+}
+
+grn_cache *
+grn_cache_current_get(grn_ctx *ctx)
+{
+ return grn_cache_current;
+}
+
+void
+grn_cache_init(void)
+{
+ grn_cache_default = grn_cache_open(&grn_gctx);
+ grn_cache_current_set(&grn_gctx, grn_cache_default);
+}
+
+grn_rc
+grn_cache_set_max_n_entries(grn_ctx *ctx, grn_cache *cache, unsigned int n)
+{
+ if (!cache) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ cache->max_nentries = n;
+ return GRN_SUCCESS;
+}
+
+uint32_t
+grn_cache_get_max_n_entries(grn_ctx *ctx, grn_cache *cache)
+{
+ if (!cache) {
+ return 0;
+ }
+ return cache->max_nentries;
+}
+
+void
+grn_cache_get_statistics(grn_ctx *ctx, grn_cache *cache,
+ grn_cache_statistics *statistics)
+{
+ MUTEX_LOCK(cache->mutex);
+ statistics->nentries = GRN_HASH_SIZE(cache->hash);
+ statistics->max_nentries = cache->max_nentries;
+ statistics->nfetches = cache->nfetches;
+ statistics->nhits = cache->nhits;
+ MUTEX_UNLOCK(cache->mutex);
+}
+
+static void
+grn_cache_expire_entry(grn_cache *cache, grn_cache_entry *ce)
+{
+ if (!ce->nref) {
+ ce->prev->next = ce->next;
+ ce->next->prev = ce->prev;
+ grn_obj_close(&grn_gctx, ce->value);
+ grn_hash_delete_by_id(&grn_gctx, cache->hash, ce->id, NULL);
+ }
+}
+
+grn_obj *
+grn_cache_fetch(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_len)
+{
+ grn_cache_entry *ce;
+ grn_obj *obj = NULL;
+ if (!ctx->impl || !ctx->impl->db) { return obj; }
+ MUTEX_LOCK(cache->mutex);
+ cache->nfetches++;
+ if (grn_hash_get(&grn_gctx, cache->hash, str, str_len, (void **)&ce)) {
+ if (ce->tv.tv_sec <= grn_db_lastmod(ctx->impl->db)) {
+ grn_cache_expire_entry(cache, ce);
+ goto exit;
+ }
+ ce->nref++;
+ obj = ce->value;
+ ce->prev->next = ce->next;
+ ce->next->prev = ce->prev;
+ {
+ grn_cache_entry *ce0 = (grn_cache_entry *)cache;
+ ce->next = ce0->next;
+ ce->prev = ce0;
+ ce0->next->prev = ce;
+ ce0->next = ce;
+ }
+ cache->nhits++;
+ }
+exit :
+ MUTEX_UNLOCK(cache->mutex);
+ return obj;
+}
+
+void
+grn_cache_unref(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_len)
+{
+ grn_cache_entry *ce;
+ ctx = &grn_gctx;
+ MUTEX_LOCK(cache->mutex);
+ if (grn_hash_get(ctx, cache->hash, str, str_len, (void **)&ce)) {
+ if (ce->nref) { ce->nref--; }
+ }
+ MUTEX_UNLOCK(cache->mutex);
+}
+
+void
+grn_cache_update(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_len, grn_obj *value)
+{
+ grn_id id;
+ int added = 0;
+ grn_cache_entry *ce;
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *old = NULL, *obj;
+ if (!ctx->impl || !cache->max_nentries) { return; }
+ if (!(obj = grn_obj_open(&grn_gctx, GRN_BULK, 0, GRN_DB_TEXT))) { return; }
+ GRN_TEXT_PUT(&grn_gctx, obj, GRN_TEXT_VALUE(value), GRN_TEXT_LEN(value));
+ MUTEX_LOCK(cache->mutex);
+ if ((id = grn_hash_add(&grn_gctx, cache->hash, str, str_len, (void **)&ce, &added))) {
+ if (!added) {
+ if (ce->nref) {
+ rc = GRN_RESOURCE_BUSY;
+ goto exit;
+ }
+ old = ce->value;
+ ce->prev->next = ce->next;
+ ce->next->prev = ce->prev;
+ }
+ ce->id = id;
+ ce->value = obj;
+ ce->tv = ctx->impl->tv;
+ ce->nref = 0;
+ {
+ grn_cache_entry *ce0 = (grn_cache_entry *)cache;
+ ce->next = ce0->next;
+ ce->prev = ce0;
+ ce0->next->prev = ce;
+ ce0->next = ce;
+ }
+ if (GRN_HASH_SIZE(cache->hash) > cache->max_nentries) {
+ grn_cache_expire_entry(cache, cache->prev);
+ }
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+exit :
+ MUTEX_UNLOCK(cache->mutex);
+ if (rc) { grn_obj_close(&grn_gctx, obj); }
+ if (old) { grn_obj_close(&grn_gctx, old); }
+}
+
+void
+grn_cache_expire(grn_cache *cache, int32_t size)
+{
+ grn_cache_entry *ce0 = (grn_cache_entry *)cache;
+ MUTEX_LOCK(cache->mutex);
+ while (ce0 != ce0->prev && size--) {
+ grn_cache_expire_entry(cache, ce0->prev);
+ }
+ MUTEX_UNLOCK(cache->mutex);
+}
+
+void
+grn_cache_fin(void)
+{
+ grn_cache_current_set(&grn_gctx, NULL);
+ grn_cache_close(&grn_gctx, grn_cache_default);
+}
+
+/**** memory allocation ****/
+
+#define ALIGN_SIZE (1<<3)
+#define ALIGN_MASK (ALIGN_SIZE-1)
+#define GRN_CTX_ALLOC_CLEAR 1
+
+void *
+grn_ctx_alloc(grn_ctx *ctx, size_t size, int flags,
+ const char* file, int line, const char *func)
+{
+ void *res = NULL;
+ if (!ctx) { return res; }
+ if (!ctx->impl) {
+ grn_ctx_impl_init(ctx);
+ if (ERRP(ctx, GRN_ERROR)) { return res; }
+ }
+ CRITICAL_SECTION_ENTER(ctx->impl->lock);
+ {
+ int32_t i;
+ int32_t *header;
+ grn_io_mapinfo *mi;
+ size = ((size + ALIGN_MASK) & ~ALIGN_MASK) + ALIGN_SIZE;
+ if (size > GRN_CTX_SEGMENT_SIZE) {
+ uint64_t npages = (size + (grn_pagesize - 1)) / grn_pagesize;
+ if (npages >= (1LL<<32)) {
+ MERR("too long request size=%zu", size);
+ goto exit;
+ }
+ for (i = 0, mi = ctx->impl->segs;; i++, mi++) {
+ if (i >= GRN_CTX_N_SEGMENTS) {
+ MERR("all segments are full");
+ goto exit;
+ }
+ if (!mi->map) { break; }
+ }
+ if (!grn_io_anon_map(ctx, mi, npages * grn_pagesize)) { goto exit; }
+ //GRN_LOG(ctx, GRN_LOG_NOTICE, "map i=%d (%d)", i, npages * grn_pagesize);
+ mi->nref = (uint32_t) npages;
+ mi->count = GRN_CTX_SEGMENT_VLEN;
+ ctx->impl->currseg = -1;
+ header = mi->map;
+ header[0] = i;
+ header[1] = (int32_t) size;
+ } else {
+ i = ctx->impl->currseg;
+ mi = &ctx->impl->segs[i];
+ if (i < 0 || size + mi->nref > GRN_CTX_SEGMENT_SIZE) {
+ for (i = 0, mi = ctx->impl->segs;; i++, mi++) {
+ if (i >= GRN_CTX_N_SEGMENTS) {
+ MERR("all segments are full");
+ goto exit;
+ }
+ if (!mi->map) { break; }
+ }
+ if (!grn_io_anon_map(ctx, mi, GRN_CTX_SEGMENT_SIZE)) { goto exit; }
+ //GRN_LOG(ctx, GRN_LOG_NOTICE, "map i=%d", i);
+ mi->nref = 0;
+ mi->count = GRN_CTX_SEGMENT_WORD;
+ ctx->impl->currseg = i;
+ }
+ header = (int32_t *)((byte *)mi->map + mi->nref);
+ mi->nref += size;
+ mi->count++;
+ header[0] = i;
+ header[1] = (int32_t) size;
+ if ((flags & GRN_CTX_ALLOC_CLEAR) &&
+ (mi->count & GRN_CTX_SEGMENT_DIRTY) && (size > ALIGN_SIZE)) {
+ memset(&header[2], 0, size - ALIGN_SIZE);
+ }
+ }
+ /*
+ {
+ char g = (ctx == &grn_gctx) ? 'g' : ' ';
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "+%c(%p) %s:%d(%s) (%d:%d)%p mi(%d:%d)", g, ctx, file, line, func, header[0], header[1], &header[2], mi->nref, (mi->count & GRN_CTX_SEGMENT_MASK));
+ }
+ */
+ res = &header[2];
+ }
+exit :
+ CRITICAL_SECTION_LEAVE(ctx->impl->lock);
+ return res;
+}
+
+void *
+grn_ctx_malloc(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func)
+{
+ return grn_ctx_alloc(ctx, size, 0, file, line, func);
+}
+
+void *
+grn_ctx_calloc(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func)
+{
+ return grn_ctx_alloc(ctx, size, GRN_CTX_ALLOC_CLEAR, file, line, func);
+}
+
+void *
+grn_ctx_realloc(grn_ctx *ctx, void *ptr, size_t size,
+ const char* file, int line, const char *func)
+{
+ void *res = NULL;
+ if (size) {
+ /* todo : expand if possible */
+ res = grn_ctx_alloc(ctx, size, 0, file, line, func);
+ if (res && ptr) {
+ int32_t *header = &((int32_t *)ptr)[-2];
+ size_t size_ = header[1];
+ memcpy(res, ptr, size_ > size ? size : size_);
+ grn_ctx_free(ctx, ptr, file, line, func);
+ }
+ } else {
+ grn_ctx_free(ctx, ptr, file, line, func);
+ }
+ return res;
+}
+
+char *
+grn_ctx_strdup(grn_ctx *ctx, const char *s, const char* file, int line, const char *func)
+{
+ void *res = NULL;
+ if (s) {
+ size_t size = strlen(s) + 1;
+ if ((res = grn_ctx_alloc(ctx, size, 0, file, line, func))) {
+ memcpy(res, s, size);
+ }
+ }
+ return res;
+}
+
+void
+grn_ctx_free(grn_ctx *ctx, void *ptr,
+ const char* file, int line, const char *func)
+{
+ if (!ctx) { return; }
+ if (!ctx->impl) {
+ ERR(GRN_INVALID_ARGUMENT,"ctx without impl passed.");
+ return;
+ }
+ CRITICAL_SECTION_ENTER(ctx->impl->lock);
+ if (ptr) {
+ int32_t *header = &((int32_t *)ptr)[-2];
+
+ if (header[0] >= GRN_CTX_N_SEGMENTS) {
+ ERR(GRN_INVALID_ARGUMENT,"invalid ptr passed. ptr=%p seg=%d", ptr, *header);
+ goto exit;
+ }
+ /*
+ {
+ int32_t i = header[0];
+ char c = 'X', g = (ctx == &grn_gctx) ? 'g' : ' ';
+ grn_io_mapinfo *mi = &ctx->impl->segs[i];
+ if (!(mi->count & GRN_CTX_SEGMENT_VLEN) &&
+ mi->map <= (void *)header && (char *)header < ((char *)mi->map + GRN_CTX_SEGMENT_SIZE)) { c = '-'; }
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "%c%c(%p) %s:%d(%s) (%d:%d)%p mi(%d:%d)", c, g, ctx, file, line, func, header[0], header[1], &header[2], mi->nref, (mi->count & GRN_CTX_SEGMENT_MASK));
+ }
+ */
+ {
+ int32_t i = header[0];
+ grn_io_mapinfo *mi = &ctx->impl->segs[i];
+ if (mi->count & GRN_CTX_SEGMENT_VLEN) {
+ if (mi->map != header) {
+ ERR(GRN_INVALID_ARGUMENT,"invalid ptr passed.. ptr=%p seg=%d", ptr, i);
+ goto exit;
+ }
+ //GRN_LOG(ctx, GRN_LOG_NOTICE, "umap i=%d (%d)", i, mi->nref * grn_pagesize);
+ grn_io_anon_unmap(ctx, mi, mi->nref * grn_pagesize);
+ mi->map = NULL;
+ } else {
+ if (!mi->map) {
+ ERR(GRN_INVALID_ARGUMENT,"invalid ptr passed... ptr=%p seg=%d", ptr, i);
+ goto exit;
+ }
+ mi->count--;
+ if (!(mi->count & GRN_CTX_SEGMENT_MASK)) {
+ //GRN_LOG(ctx, GRN_LOG_NOTICE, "umap i=%d", i);
+ if (i == ctx->impl->currseg) {
+ mi->count |= GRN_CTX_SEGMENT_DIRTY;
+ mi->nref = 0;
+ } else {
+ grn_io_anon_unmap(ctx, mi, GRN_CTX_SEGMENT_SIZE);
+ mi->map = NULL;
+ }
+ }
+ }
+ }
+ }
+exit :
+ CRITICAL_SECTION_LEAVE(ctx->impl->lock);
+}
+
+#define DB_P(s) ((s) && (s)->header.type == GRN_DB)
+
+grn_rc
+grn_ctx_use(grn_ctx *ctx, grn_obj *db)
+{
+ GRN_API_ENTER;
+ if (db && !DB_P(db)) {
+ ctx->rc = GRN_INVALID_ARGUMENT;
+ } else {
+ if (!ctx->impl) { grn_ctx_impl_init(ctx); }
+ if (!ctx->rc) {
+ ctx->impl->db = db;
+ if (db) {
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ grn_obj_get_info(ctx, db, GRN_INFO_ENCODING, &buf);
+ ctx->encoding = *(grn_encoding *)GRN_BULK_HEAD(&buf);
+ grn_obj_close(ctx, &buf);
+ }
+ }
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+void *
+grn_ctx_alloc_lifo(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func)
+{
+ if (!ctx) { return NULL; }
+ if (!ctx->impl) {
+ grn_ctx_impl_init(ctx);
+ if (ERRP(ctx, GRN_ERROR)) { return NULL; }
+ }
+ {
+ int32_t i = ctx->impl->lifoseg;
+ grn_io_mapinfo *mi = &ctx->impl->segs[i];
+ if (size > GRN_CTX_SEGMENT_SIZE) {
+ uint64_t npages = (size + (grn_pagesize - 1)) / grn_pagesize;
+ if (npages >= (1LL<<32)) {
+ MERR("too long request size=%zu", size);
+ return NULL;
+ }
+ for (;;) {
+ if (++i >= GRN_CTX_N_SEGMENTS) {
+ MERR("all segments are full");
+ return NULL;
+ }
+ mi++;
+ if (!mi->map) { break; }
+ }
+ if (!grn_io_anon_map(ctx, mi, npages * grn_pagesize)) { return NULL; }
+ mi->nref = (uint32_t) npages;
+ mi->count = GRN_CTX_SEGMENT_VLEN|GRN_CTX_SEGMENT_LIFO;
+ ctx->impl->lifoseg = i;
+ return mi->map;
+ } else {
+ size = (size + ALIGN_MASK) & ~ALIGN_MASK;
+ if (i < 0 || (mi->count & GRN_CTX_SEGMENT_VLEN) || size + mi->nref > GRN_CTX_SEGMENT_SIZE) {
+ for (;;) {
+ if (++i >= GRN_CTX_N_SEGMENTS) {
+ MERR("all segments are full");
+ return NULL;
+ }
+ if (!(++mi)->map) { break; }
+ }
+ if (!grn_io_anon_map(ctx, mi, GRN_CTX_SEGMENT_SIZE)) { return NULL; }
+ mi->nref = 0;
+ mi->count = GRN_CTX_SEGMENT_WORD|GRN_CTX_SEGMENT_LIFO;
+ ctx->impl->lifoseg = i;
+ }
+ {
+ uint32_t u = mi->nref;
+ mi->nref += size;
+ return (byte *)mi->map + u;
+ }
+ }
+ }
+}
+
+void
+grn_ctx_free_lifo(grn_ctx *ctx, void *ptr,
+ const char* file, int line, const char *func)
+{
+ if (!ctx) { return; }
+ if (!ctx->impl) {
+ ERR(GRN_INVALID_ARGUMENT,"ctx without impl passed.");
+ return;
+ }
+ {
+ int32_t i = ctx->impl->lifoseg, done = 0;
+ grn_io_mapinfo *mi = &ctx->impl->segs[i];
+ if (i < 0) {
+ ERR(GRN_INVALID_ARGUMENT, "lifo buffer is void");
+ return;
+ }
+ for (; i >= 0; i--, mi--) {
+ if (!(mi->count & GRN_CTX_SEGMENT_LIFO)) { continue; }
+ if (done) { break; }
+ if (mi->count & GRN_CTX_SEGMENT_VLEN) {
+ if (mi->map == ptr) { done = 1; }
+ grn_io_anon_unmap(ctx, mi, mi->nref * grn_pagesize);
+ mi->map = NULL;
+ } else {
+ if (mi->map == ptr) {
+ done = 1;
+ } else {
+ if (mi->map < ptr && ptr < (void *)((byte*)mi->map + mi->nref)) {
+ mi->nref = (uint32_t) ((uintptr_t)ptr - (uintptr_t)mi->map);
+ break;
+ }
+ }
+ grn_io_anon_unmap(ctx, mi, GRN_CTX_SEGMENT_SIZE);
+ mi->map = NULL;
+ }
+ }
+ ctx->impl->lifoseg = i;
+ }
+}
+
+#if USE_DYNAMIC_MALLOC_CHANGE
+grn_malloc_func
+grn_ctx_get_malloc(grn_ctx *ctx)
+{
+ if (!ctx || !ctx->impl) { return NULL; }
+ return ctx->impl->malloc_func;
+}
+
+void
+grn_ctx_set_malloc(grn_ctx *ctx, grn_malloc_func malloc_func)
+{
+ if (!ctx || !ctx->impl) { return; }
+ ctx->impl->malloc_func = malloc_func;
+}
+
+grn_calloc_func
+grn_ctx_get_calloc(grn_ctx *ctx)
+{
+ if (!ctx || !ctx->impl) { return NULL; }
+ return ctx->impl->calloc_func;
+}
+
+void
+grn_ctx_set_calloc(grn_ctx *ctx, grn_calloc_func calloc_func)
+{
+ if (!ctx || !ctx->impl) { return; }
+ ctx->impl->calloc_func = calloc_func;
+}
+
+grn_realloc_func
+grn_ctx_get_realloc(grn_ctx *ctx)
+{
+ if (!ctx || !ctx->impl) { return NULL; }
+ return ctx->impl->realloc_func;
+}
+
+void
+grn_ctx_set_realloc(grn_ctx *ctx, grn_realloc_func realloc_func)
+{
+ if (!ctx || !ctx->impl) { return; }
+ ctx->impl->realloc_func = realloc_func;
+}
+
+grn_strdup_func
+grn_ctx_get_strdup(grn_ctx *ctx)
+{
+ if (!ctx || !ctx->impl) { return NULL; }
+ return ctx->impl->strdup_func;
+}
+
+void
+grn_ctx_set_strdup(grn_ctx *ctx, grn_strdup_func strdup_func)
+{
+ if (!ctx || !ctx->impl) { return; }
+ ctx->impl->strdup_func = strdup_func;
+}
+
+void *
+grn_malloc(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (ctx && ctx->impl && ctx->impl->malloc_func) {
+ return ctx->impl->malloc_func(ctx, size, file, line, func);
+ } else {
+ return grn_malloc_default(ctx, size, file, line, func);
+ }
+}
+
+void *
+grn_calloc(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (ctx && ctx->impl && ctx->impl->calloc_func) {
+ return ctx->impl->calloc_func(ctx, size, file, line, func);
+ } else {
+ return grn_calloc_default(ctx, size, file, line, func);
+ }
+}
+
+void *
+grn_realloc(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line, const char *func)
+{
+ if (ctx && ctx->impl && ctx->impl->realloc_func) {
+ return ctx->impl->realloc_func(ctx, ptr, size, file, line, func);
+ } else {
+ return grn_realloc_default(ctx, ptr, size, file, line, func);
+ }
+}
+
+char *
+grn_strdup(grn_ctx *ctx, const char *string, const char* file, int line, const char *func)
+{
+ if (ctx && ctx->impl && ctx->impl->strdup_func) {
+ return ctx->impl->strdup_func(ctx, string, file, line, func);
+ } else {
+ return grn_strdup_default(ctx, string, file, line, func);
+ }
+}
+#endif
+
+void *
+grn_malloc_default(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (!ctx) { return NULL; }
+ {
+ void *res = malloc(size);
+ if (res) {
+ GRN_ADD_ALLOC_COUNT(1);
+ grn_alloc_info_add(res);
+ } else {
+ if (!(res = malloc(size))) {
+ MERR("malloc fail (%zu)=%p (%s:%d) <%d>",
+ size, res, file, line, alloc_count);
+ } else {
+ GRN_ADD_ALLOC_COUNT(1);
+ grn_alloc_info_add(res);
+ }
+ }
+ return res;
+ }
+}
+
+void *
+grn_calloc_default(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (!ctx) { return NULL; }
+ {
+ void *res = calloc(size, 1);
+ if (res) {
+ GRN_ADD_ALLOC_COUNT(1);
+ grn_alloc_info_add(res);
+ } else {
+ if (!(res = calloc(size, 1))) {
+ MERR("calloc fail (%" GRN_FMT_LLU ")=%p (%s:%d) <%" GRN_FMT_LLU ">",
+ (unsigned long long int)size, res, file, line,
+ (unsigned long long int)alloc_count);
+ } else {
+ GRN_ADD_ALLOC_COUNT(1);
+ grn_alloc_info_add(res);
+ }
+ }
+ return res;
+ }
+}
+
+void
+grn_free_default(grn_ctx *ctx, void *ptr, const char* file, int line, const char *func)
+{
+ if (!ctx) { return; }
+ grn_alloc_info_check(ptr);
+ {
+ free(ptr);
+ if (ptr) {
+ GRN_ADD_ALLOC_COUNT(-1);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "free fail (%p) (%s:%d) <%d>", ptr, file, line, alloc_count);
+ }
+ }
+}
+
+void *
+grn_realloc_default(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line, const char *func)
+{
+ void *res;
+ if (!ctx) { return NULL; }
+ if (size) {
+ if (!(res = realloc(ptr, size))) {
+ if (!(res = realloc(ptr, size))) {
+ MERR("realloc fail (%p,%zu)=%p (%s:%d) <%d>", ptr, size, res, file, line, alloc_count);
+ return NULL;
+ }
+ }
+ if (ptr) {
+ grn_alloc_info_change(ptr, res);
+ } else {
+ GRN_ADD_ALLOC_COUNT(1);
+ grn_alloc_info_add(res);
+ }
+ } else {
+ if (!ptr) { return NULL; }
+ grn_alloc_info_check(ptr);
+ GRN_ADD_ALLOC_COUNT(-1);
+ free(ptr);
+ res = NULL;
+ }
+ return res;
+}
+
+int
+grn_alloc_count(void)
+{
+ return alloc_count;
+}
+
+char *
+grn_strdup_default(grn_ctx *ctx, const char *s, const char* file, int line, const char *func)
+{
+ if (!ctx) { return NULL; }
+ {
+ char *res = strdup(s);
+ if (res) {
+ GRN_ADD_ALLOC_COUNT(1);
+ } else {
+ if (!(res = strdup(s))) {
+ MERR("strdup(%p)=%p (%s:%d) <%d>", s, res, file, line, alloc_count);
+ }
+ }
+ return res;
+ }
+}
+
+#ifdef USE_FAIL_MALLOC
+int
+grn_fail_malloc_check(size_t size, const char *file, int line, const char *func)
+{
+ if ((grn_fmalloc_file && strcmp(file, grn_fmalloc_file)) ||
+ (grn_fmalloc_line && line != grn_fmalloc_line) ||
+ (grn_fmalloc_func && strcmp(func, grn_fmalloc_func))) {
+ return 1;
+ }
+ if (grn_fmalloc_prob && grn_fmalloc_prob >= rand()) {
+ return 0;
+ }
+ return 1;
+}
+
+void *
+grn_malloc_fail(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (grn_fail_malloc_check(size, file, line, func)) {
+ return grn_malloc_default(ctx, size, file, line, func);
+ } else {
+ MERR("fail_malloc (%d) (%s:%d@%s) <%d>", size, file, line, func, alloc_count);
+ return NULL;
+ }
+}
+
+void *
+grn_calloc_fail(grn_ctx *ctx, size_t size, const char* file, int line, const char *func)
+{
+ if (grn_fail_malloc_check(size, file, line, func)) {
+ return grn_calloc_default(ctx, size, file, line, func);
+ } else {
+ MERR("fail_calloc (%d) (%s:%d@%s) <%d>", size, file, line, func, alloc_count);
+ return NULL;
+ }
+}
+
+void *
+grn_realloc_fail(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line,
+ const char *func)
+{
+ if (grn_fail_malloc_check(size, file, line, func)) {
+ return grn_realloc_default(ctx, ptr, size, file, line, func);
+ } else {
+ MERR("fail_realloc (%p,%zu) (%s:%d@%s) <%d>", ptr, size, file, line, func, alloc_count);
+ return NULL;
+ }
+}
+
+char *
+grn_strdup_fail(grn_ctx *ctx, const char *s, const char* file, int line, const char *func)
+{
+ if (grn_fail_malloc_check(strlen(s), file, line, func)) {
+ return grn_strdup_default(ctx, s, file, line, func);
+ } else {
+ MERR("fail_strdup(%p) (%s:%d@%s) <%d>", s, file, line, func, alloc_count);
+ return NULL;
+ }
+}
+#endif /* USE_FAIL_MALLOC */
+
+/* don't handle error inside logger functions */
+
+void
+grn_ctx_log(grn_ctx *ctx, const char *fmt, ...)
+{
+ va_list argp;
+ va_start(argp, fmt);
+ vsnprintf(ctx->errbuf, GRN_CTX_MSGSIZE, fmt, argp);
+ va_end(argp);
+}
+
+void
+grn_assert(grn_ctx *ctx, int cond, const char* file, int line, const char* func)
+{
+ if (!cond) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "ASSERT fail on %s %s:%d", func, file, line);
+ }
+}
+
+const char *
+grn_get_version(void)
+{
+ return GRN_VERSION;
+}
+
+const char *
+grn_get_package(void)
+{
+ return PACKAGE;
+}
+
+#if defined(HAVE_SIGNAL_H) && !defined(WIN32)
+static int segv_received = 0;
+static void
+segv_handler(int signal_number, siginfo_t *info, void *context)
+{
+ grn_ctx *ctx = &grn_gctx;
+
+ if (segv_received) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "SEGV received in SEGV handler.");
+ exit(EXIT_FAILURE);
+ }
+ segv_received = 1;
+
+ GRN_LOG(ctx, GRN_LOG_CRIT, "-- CRASHED!!! --");
+#ifdef HAVE_BACKTRACE
+# define N_TRACE_LEVEL 1024
+ {
+ static void *trace[N_TRACE_LEVEL];
+ int n = backtrace(trace, N_TRACE_LEVEL);
+ char **symbols = backtrace_symbols(trace, n);
+ int i;
+
+ if (symbols) {
+ for (i = 0; i < n; i++) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "%s", symbols[i]);
+ }
+ free(symbols);
+ }
+ }
+#else /* HAVE_BACKTRACE */
+ GRN_LOG(ctx, GRN_LOG_CRIT, "backtrace() isn't available.");
+#endif /* HAVE_BACKTRACE */
+ GRN_LOG(ctx, GRN_LOG_CRIT, "----------------");
+ abort();
+}
+#endif /* defined(HAVE_SIGNAL_H) && !defined(WIN32) */
+
+grn_rc
+grn_set_segv_handler(void)
+{
+ grn_rc rc = GRN_SUCCESS;
+#if defined(HAVE_SIGNAL_H) && !defined(WIN32)
+ grn_ctx *ctx = &grn_gctx;
+ struct sigaction action;
+
+ sigemptyset(&action.sa_mask);
+ action.sa_sigaction = segv_handler;
+ action.sa_flags = SA_SIGINFO | SA_ONSTACK;
+
+ if (sigaction(SIGSEGV, &action, NULL)) {
+ SERR("failed to set SIGSEGV action");
+ rc = ctx->rc;
+ };
+#endif
+ return rc;
+}
+
+#if defined(HAVE_SIGNAL_H) && !defined(WIN32)
+static struct sigaction old_int_handler;
+static void
+int_handler(int signal_number, siginfo_t *info, void *context)
+{
+ grn_gctx.stat = GRN_CTX_QUIT;
+ sigaction(signal_number, &old_int_handler, NULL);
+}
+
+static struct sigaction old_term_handler;
+static void
+term_handler(int signal_number, siginfo_t *info, void *context)
+{
+ grn_gctx.stat = GRN_CTX_QUIT;
+ sigaction(signal_number, &old_term_handler, NULL);
+}
+#endif /* defined(HAVE_SIGNAL_H) && !defined(WIN32) */
+
+grn_rc
+grn_set_int_handler(void)
+{
+ grn_rc rc = GRN_SUCCESS;
+#if defined(HAVE_SIGNAL_H) && !defined(WIN32)
+ grn_ctx *ctx = &grn_gctx;
+ struct sigaction action;
+
+ sigemptyset(&action.sa_mask);
+ action.sa_sigaction = int_handler;
+ action.sa_flags = SA_SIGINFO;
+
+ if (sigaction(SIGINT, &action, &old_int_handler)) {
+ SERR("failed to set SIGINT action");
+ rc = ctx->rc;
+ }
+#endif
+ return rc;
+}
+
+grn_rc
+grn_set_term_handler(void)
+{
+ grn_rc rc = GRN_SUCCESS;
+#if defined(HAVE_SIGNAL_H) && !defined(WIN32)
+ grn_ctx *ctx = &grn_gctx;
+ struct sigaction action;
+
+ sigemptyset(&action.sa_mask);
+ action.sa_sigaction = term_handler;
+ action.sa_flags = SA_SIGINFO;
+
+ if (sigaction(SIGTERM, &action, &old_term_handler)) {
+ SERR("failed to set SIGTERM action");
+ rc = ctx->rc;
+ }
+#endif
+ return rc;
+}
+
+void
+grn_ctx_output_array_open(grn_ctx *ctx, const char *name, int nelements)
+{
+ grn_output_array_open(ctx, ctx->impl->outbuf, ctx->impl->output_type,
+ name, nelements);
+}
+
+void
+grn_ctx_output_array_close(grn_ctx *ctx)
+{
+ grn_output_array_close(ctx, ctx->impl->outbuf, ctx->impl->output_type);
+}
+
+void
+grn_ctx_output_map_open(grn_ctx *ctx, const char *name, int nelements)
+{
+ grn_output_map_open(ctx, ctx->impl->outbuf, ctx->impl->output_type,
+ name, nelements);
+}
+
+void
+grn_ctx_output_map_close(grn_ctx *ctx)
+{
+ grn_output_map_close(ctx, ctx->impl->outbuf, ctx->impl->output_type);
+}
+
+void
+grn_ctx_output_int32(grn_ctx *ctx, int value)
+{
+ grn_output_int32(ctx, ctx->impl->outbuf, ctx->impl->output_type, value);
+}
+
+void
+grn_ctx_output_int64(grn_ctx *ctx, long long int value)
+{
+ grn_output_int64(ctx, ctx->impl->outbuf, ctx->impl->output_type, value);
+}
+
+void
+grn_ctx_output_float(grn_ctx *ctx, double value)
+{
+ grn_output_float(ctx, ctx->impl->outbuf, ctx->impl->output_type, value);
+}
+
+void
+grn_ctx_output_cstr(grn_ctx *ctx, const char *value)
+{
+ grn_output_cstr(ctx, ctx->impl->outbuf, ctx->impl->output_type, value);
+}
+
+void
+grn_ctx_output_str(grn_ctx *ctx, const char *value, unsigned int value_len)
+{
+ grn_output_str(ctx, ctx->impl->outbuf, ctx->impl->output_type,
+ value, value_len);
+}
+
+void
+grn_ctx_output_bool(grn_ctx *ctx, grn_bool value)
+{
+ grn_output_bool(ctx, ctx->impl->outbuf, ctx->impl->output_type, value);
+}
+
+void
+grn_ctx_output_obj(grn_ctx *ctx, grn_obj *value, grn_obj_format *format)
+{
+ grn_output_obj(ctx, ctx->impl->outbuf, ctx->impl->output_type,
+ value, format);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/ctx.h b/storage/mroonga/vendor/groonga/lib/ctx.h
new file mode 100644
index 00000000000..656abfa94b9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ctx.h
@@ -0,0 +1,506 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_CTX_H
+#define GRN_CTX_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif /* HAVE_ERRNO_H */
+
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#define GRN_BREAK_POINT raise(SIGTRAP)
+#endif /* HAVE_SIGNAL_H */
+
+#ifdef HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif /* HAVE_EXECINFO_H */
+
+#ifndef GRN_IO_H
+#include "io.h"
+#endif /* GRN_IO_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**** api in/out ****/
+
+#define GRN_API_ENTER do {\
+ if ((ctx)->seqno & 1) {\
+ (ctx)->subno++;\
+ } else {\
+ (ctx)->errlvl = GRN_OK;\
+ (ctx)->rc = GRN_SUCCESS;\
+ (ctx)->seqno++;\
+ }\
+ GRN_TEST_YIELD();\
+} while (0)
+
+/* CAUTION!! : pass only variables or constants as r */
+#define GRN_API_RETURN(r) do {\
+ if (ctx->subno) {\
+ ctx->subno--;\
+ } else {\
+ ctx->seqno++;\
+ }\
+ GRN_TEST_YIELD();\
+ return r;\
+} while (0)
+
+/**** error handling ****/
+
+#define GRN_EMERG GRN_LOG_EMERG
+#define GRN_ALERT GRN_LOG_ALERT
+#define GRN_CRIT GRN_LOG_CRIT
+#define GRN_ERROR GRN_LOG_ERROR
+#define GRN_WARN GRN_LOG_WARNING
+#define GRN_OK GRN_LOG_NOTICE
+
+#define ERRCLR(ctx) do {\
+ if (ctx) {\
+ ((grn_ctx *)ctx)->errlvl = GRN_OK;\
+ ((grn_ctx *)ctx)->rc = GRN_SUCCESS;\
+ }\
+ errno = 0;\
+ grn_gctx.errlvl = GRN_OK;\
+ grn_gctx.rc = GRN_SUCCESS;\
+} while (0)
+
+#ifdef HAVE_BACKTRACE
+#define BACKTRACE(ctx) ((ctx)->ntrace = (unsigned char)backtrace((ctx)->trace, 16))
+#else /* HAVE_BACKTRACE */
+#define BACKTRACE(ctx)
+#endif /* HAVE_BACKTRACE */
+
+GRN_API grn_bool grn_ctx_impl_should_log(grn_ctx *ctx);
+GRN_API void grn_ctx_impl_set_current_error_message(grn_ctx *ctx);
+
+#ifdef HAVE_BACKTRACE
+#define LOGTRACE(ctx,lvl) do {\
+ int i;\
+ char **p;\
+ BACKTRACE(ctx);\
+ p = backtrace_symbols((ctx)->trace, (ctx)->ntrace);\
+ for (i = 0; i < (ctx)->ntrace; i++) {\
+ GRN_LOG((ctx), lvl, "%s", p[i]);\
+ }\
+ free(p);\
+} while (0)
+#else /* HAVE_BACKTRACE */
+#define LOGTRACE(ctx,msg)
+#endif /* HAVE_BACKTRACE */
+
+#define ERRSET(ctx,lvl,r,...) do {\
+ grn_ctx *ctx_ = (grn_ctx *)ctx;\
+ ctx_->errlvl = (lvl);\
+ ctx_->rc = (r);\
+ ctx_->errfile = __FILE__;\
+ ctx_->errline = __LINE__;\
+ ctx_->errfunc = __FUNCTION__;\
+ grn_ctx_log(ctx, __VA_ARGS__);\
+ if (grn_ctx_impl_should_log(ctx)) {\
+ grn_ctx_impl_set_current_error_message(ctx);\
+ GRN_LOG(ctx, lvl, __VA_ARGS__);\
+ BACKTRACE(ctx);\
+ if (lvl <= GRN_LOG_ERROR) { LOGTRACE(ctx, lvl); }\
+ }\
+} while (0)
+
+#define ERRP(ctx,lvl) \
+ (((ctx) && ((grn_ctx *)(ctx))->errlvl <= (lvl)) || (grn_gctx.errlvl <= (lvl)))
+
+#ifdef ERR
+# undef ERR
+#endif /* ERR */
+#define ERR(rc,...) ERRSET(ctx, GRN_ERROR, (rc), __VA_ARGS__)
+#define WARN(rc,...) ERRSET(ctx, GRN_WARN, (rc), __VA_ARGS__)
+#define MERR(...) ERRSET(ctx, GRN_ALERT, GRN_NO_MEMORY_AVAILABLE, __VA_ARGS__)
+#define ALERT(...) ERRSET(ctx, GRN_ALERT, GRN_SUCCESS, __VA_ARGS__)
+
+#define ERR_CAST(column, range, element) do {\
+ grn_obj inspected;\
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];\
+ int column_name_size;\
+ char range_name[GRN_TABLE_MAX_KEY_SIZE];\
+ int range_name_size;\
+ GRN_TEXT_INIT(&inspected, 0);\
+ grn_inspect(ctx, &inspected, element);\
+ column_name_size = grn_obj_name(ctx, column, column_name,\
+ GRN_TABLE_MAX_KEY_SIZE);\
+ range_name_size = grn_obj_name(ctx, range, range_name,\
+ GRN_TABLE_MAX_KEY_SIZE);\
+ ERR(GRN_INVALID_ARGUMENT, "<%.*s>: failed to cast to <%.*s>: <%.*s>",\
+ column_name_size, column_name,\
+ range_name_size, range_name,\
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));\
+ GRN_OBJ_FIN(ctx, &inspected);\
+} while (0)
+
+#ifdef WIN32
+#define SERR(str) do {\
+ grn_rc rc;\
+ const char *m;\
+ int e = WSAGetLastError();\
+ switch (e) {\
+ case WSANOTINITIALISED :\
+ rc = GRN_SOCKET_NOT_INITIALIZED;\
+ m = "please call grn_com_init first";\
+ break;\
+ case WSAEFAULT :\
+ rc = GRN_BAD_ADDRESS;\
+ m = "bad address";\
+ break;\
+ case WSAEINVAL :\
+ rc = GRN_INVALID_ARGUMENT;\
+ m = "invalid argument";\
+ break;\
+ case WSAEMFILE :\
+ rc = GRN_TOO_MANY_OPEN_FILES;\
+ m = "too many sockets";\
+ break;\
+ case WSAEWOULDBLOCK :\
+ rc = GRN_OPERATION_WOULD_BLOCK;\
+ m = "operation would block";\
+ break;\
+ case WSAENOTSOCK :\
+ rc = GRN_NOT_SOCKET;\
+ m = "given fd is not socket fd";\
+ break;\
+ case WSAEOPNOTSUPP :\
+ rc = GRN_OPERATION_NOT_SUPPORTED;\
+ m = "operation is not supported";\
+ break;\
+ case WSAEADDRINUSE :\
+ rc = GRN_ADDRESS_IS_IN_USE;\
+ m = "address is already in use";\
+ break;\
+ case WSAEADDRNOTAVAIL :\
+ rc = GRN_ADDRESS_IS_NOT_AVAILABLE;\
+ m = "address is not available";\
+ break;\
+ case WSAENETDOWN :\
+ rc = GRN_NETWORK_IS_DOWN;\
+ m = "network is down";\
+ break;\
+ case WSAENOBUFS :\
+ rc = GRN_NO_BUFFER;\
+ m = "no buffer";\
+ break;\
+ case WSAEISCONN :\
+ rc = GRN_SOCKET_IS_ALREADY_CONNECTED;\
+ m = "socket is already connected";\
+ break;\
+ case WSAENOTCONN :\
+ rc = GRN_SOCKET_IS_NOT_CONNECTED;\
+ m = "socket is not connected";\
+ break;\
+ case WSAESHUTDOWN :\
+ rc = GRN_SOCKET_IS_ALREADY_SHUTDOWNED;\
+ m = "socket is already shutdowned";\
+ break;\
+ case WSAETIMEDOUT :\
+ rc = GRN_OPERATION_TIMEOUT;\
+ m = "connection time out";\
+ break;\
+ case WSAECONNREFUSED :\
+ rc = GRN_CONNECTION_REFUSED;\
+ m = "connection refused";\
+ break;\
+ case WSAEINTR :\
+ rc = GRN_INTERRUPTED_FUNCTION_CALL;\
+ m = "interrupted function call";\
+ break;\
+ default:\
+ rc = GRN_UNKNOWN_ERROR;\
+ m = "unknown error";\
+ break;\
+ }\
+ ERR(rc, "syscall error '%s' (%s)", str, m);\
+} while (0)
+#else /* WIN32 */
+#define SERR(str) do {\
+ grn_rc rc;\
+ switch (errno) {\
+ case ELOOP : rc = GRN_TOO_MANY_SYMBOLIC_LINKS; break;\
+ case ENAMETOOLONG : rc = GRN_FILENAME_TOO_LONG; break;\
+ case ENOENT : rc = GRN_NO_SUCH_FILE_OR_DIRECTORY; break;\
+ case ENOMEM : rc = GRN_NO_MEMORY_AVAILABLE; break;\
+ case ENOTDIR : rc = GRN_NOT_A_DIRECTORY; break;\
+ case EPERM : rc = GRN_OPERATION_NOT_PERMITTED; break;\
+ case ESRCH : rc = GRN_NO_SUCH_PROCESS; break;\
+ case EINTR : rc = GRN_INTERRUPTED_FUNCTION_CALL; break;\
+ case EIO : rc = GRN_INPUT_OUTPUT_ERROR; break;\
+ case ENXIO : rc = GRN_NO_SUCH_DEVICE_OR_ADDRESS; break;\
+ case E2BIG : rc = GRN_ARG_LIST_TOO_LONG; break;\
+ case ENOEXEC : rc = GRN_EXEC_FORMAT_ERROR; break;\
+ case EBADF : rc = GRN_BAD_FILE_DESCRIPTOR; break;\
+ case ECHILD : rc = GRN_NO_CHILD_PROCESSES; break;\
+ case EACCES : rc = GRN_PERMISSION_DENIED; break;\
+ case EFAULT : rc = GRN_BAD_ADDRESS; break;\
+ case EBUSY : rc = GRN_RESOURCE_BUSY; break;\
+ case EEXIST : rc = GRN_FILE_EXISTS; break;\
+ case ENODEV : rc = GRN_NO_SUCH_DEVICE; break;\
+ case EISDIR : rc = GRN_IS_A_DIRECTORY; break;\
+ case EINVAL : rc = GRN_INVALID_ARGUMENT; break;\
+ case EMFILE : rc = GRN_TOO_MANY_OPEN_FILES; break;\
+ case EFBIG : rc = GRN_FILE_TOO_LARGE; break;\
+ case ENOSPC : rc = GRN_NO_SPACE_LEFT_ON_DEVICE; break;\
+ case EROFS : rc = GRN_READ_ONLY_FILE_SYSTEM; break;\
+ case EMLINK : rc = GRN_TOO_MANY_LINKS; break;\
+ case EPIPE : rc = GRN_BROKEN_PIPE; break;\
+ case EDOM : rc = GRN_DOMAIN_ERROR; break;\
+ case ERANGE : rc = GRN_RANGE_ERROR; break;\
+ case ENOTSOCK : rc = GRN_NOT_SOCKET; break;\
+ case EADDRINUSE : rc = GRN_ADDRESS_IS_IN_USE; break;\
+ case ENETDOWN : rc = GRN_NETWORK_IS_DOWN; break;\
+ case ENOBUFS : rc = GRN_NO_BUFFER; break;\
+ case EISCONN : rc = GRN_SOCKET_IS_ALREADY_CONNECTED; break;\
+ case ENOTCONN : rc = GRN_SOCKET_IS_NOT_CONNECTED; break;\
+ /*\
+ case ESOCKTNOSUPPORT :\
+ case EOPNOTSUPP :\
+ case EPFNOSUPPORT :\
+ */\
+ case EPROTONOSUPPORT : rc = GRN_OPERATION_NOT_SUPPORTED; break;\
+ case ESHUTDOWN : rc = GRN_SOCKET_IS_ALREADY_SHUTDOWNED; break;\
+ case ETIMEDOUT : rc = GRN_OPERATION_TIMEOUT; break;\
+ case ECONNREFUSED: rc = GRN_CONNECTION_REFUSED; break;\
+ case EAGAIN: rc = GRN_OPERATION_WOULD_BLOCK; break;\
+ default : rc = GRN_UNKNOWN_ERROR; break;\
+ }\
+ ERR(rc, "syscall error '%s' (%s)", str, strerror(errno));\
+} while (0)
+#endif /* WIN32 */
+
+#define GERR(rc,...) ERRSET(&grn_gctx, GRN_ERROR, (rc), __VA_ARGS__)
+#define GMERR(...) ERRSET(&grn_gctx, GRN_ALERT, GRN_NO_MEMORY_AVAILABLE, __VA_ARGS__)
+
+#define GRN_MALLOC(s) grn_malloc(ctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_CALLOC(s) grn_calloc(ctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_REALLOC(p,s) grn_realloc(ctx,p,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_STRDUP(s) grn_strdup(ctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_GMALLOC(s) grn_malloc(&grn_gctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_GCALLOC(s) grn_calloc(&grn_gctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_GREALLOC(p,s) grn_realloc(&grn_gctx,p,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_GSTRDUP(s) grn_strdup(&grn_gctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_FREE(p) grn_free(ctx,p,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_MALLOCN(t,n) ((t *)(GRN_MALLOC(sizeof(t) * (n))))
+#define GRN_GFREE(p) grn_free(&grn_gctx,p,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_GMALLOCN(t,n) ((t *)(GRN_GMALLOC(sizeof(t) * (n))))
+
+#ifdef DEBUG
+#define GRN_ASSERT(s) grn_assert(ctx,(s),__FILE__,__LINE__,__FUNCTION__)
+#else
+#define GRN_ASSERT(s)
+#endif
+
+#define GRN_CTX_ALLOC(ctx,s) grn_ctx_calloc(ctx,s,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_CTX_FREE(ctx,p) grn_ctx_free(ctx,p,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_CTX_ALLOC_L(ctx,s) grn_ctx_alloc_lifo(ctx,s,f,__FILE__,__LINE__,__FUNCTION__)
+#define GRN_CTX_FREE_L(ctx,p) grn_ctx_free_lifo(ctx,p,__FILE__,__LINE__,__FUNCTION__)
+
+void *grn_ctx_alloc(grn_ctx *ctx, size_t size, int flags,
+ const char* file, int line, const char *func);
+void *grn_ctx_malloc(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func);
+void *grn_ctx_calloc(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func);
+void *grn_ctx_realloc(grn_ctx *ctx, void *ptr, size_t size,
+ const char* file, int line, const char *func);
+char *grn_ctx_strdup(grn_ctx *ctx, const char *s,
+ const char* file, int line, const char *func);
+void grn_ctx_free(grn_ctx *ctx, void *ptr,
+ const char* file, int line, const char *func);
+void *grn_ctx_alloc_lifo(grn_ctx *ctx, size_t size,
+ const char* file, int line, const char *func);
+void grn_ctx_free_lifo(grn_ctx *ctx, void *ptr,
+ const char* file, int line, const char *func);
+
+#ifdef USE_DYNAMIC_MALLOC_CHANGE
+typedef void *(*grn_malloc_func) (grn_ctx *ctx, size_t size,
+ const char *file, int line, const char *func);
+typedef void *(*grn_calloc_func) (grn_ctx *ctx, size_t size,
+ const char *file, int line, const char *func);
+typedef void *(*grn_realloc_func) (grn_ctx *ctx, void *ptr, size_t size,
+ const char *file, int line, const char *func);
+typedef char *(*grn_strdup_func) (grn_ctx *ctx, const char *string,
+ const char *file, int line, const char *func);
+grn_malloc_func grn_ctx_get_malloc(grn_ctx *ctx);
+void grn_ctx_set_malloc(grn_ctx *ctx, grn_malloc_func malloc_func);
+grn_calloc_func grn_ctx_get_calloc(grn_ctx *ctx);
+void grn_ctx_set_calloc(grn_ctx *ctx, grn_calloc_func calloc_func);
+grn_realloc_func grn_ctx_get_realloc(grn_ctx *ctx);
+void grn_ctx_set_realloc(grn_ctx *ctx, grn_realloc_func realloc_func);
+grn_strdup_func grn_ctx_get_strdup(grn_ctx *ctx);
+void grn_ctx_set_strdup(grn_ctx *ctx, grn_strdup_func strdup_func);
+
+void *grn_malloc(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_calloc(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_realloc(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line, const char *func);
+char *grn_strdup(grn_ctx *ctx, const char *s, const char* file, int line, const char *func);
+#else
+# define grn_malloc grn_malloc_default
+# define grn_calloc grn_calloc_default
+# define grn_realloc grn_realloc_default
+# define grn_strdup grn_strdup_default
+# define grn_free grn_free_default
+#endif
+
+GRN_API void *grn_malloc_default(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_calloc_default(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_realloc_default(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line, const char *func);
+GRN_API char *grn_strdup_default(grn_ctx *ctx, const char *s, const char* file, int line, const char *func);
+GRN_API void grn_free_default(grn_ctx *ctx, void *ptr, const char* file, int line, const char *func);
+
+#ifdef USE_FAIL_MALLOC
+int grn_fail_malloc_check(size_t size, const char *file, int line, const char *func);
+void *grn_malloc_fail(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_calloc_fail(grn_ctx *ctx, size_t size, const char* file, int line, const char *func);
+void *grn_realloc_fail(grn_ctx *ctx, void *ptr, size_t size, const char* file, int line, const char *func);
+char *grn_strdup_fail(grn_ctx *ctx, const char *s, const char* file, int line, const char *func);
+#endif
+
+void grn_assert(grn_ctx *ctx, int cond, const char* file, int line, const char* func);
+
+/**** grn_ctx ****/
+
+GRN_VAR grn_ctx grn_gctx;
+extern int grn_pagesize;
+extern grn_critical_section grn_glock;
+extern uint32_t grn_gtick;
+extern int grn_lock_timeout;
+
+#define GRN_CTX_ALLOCATED (0x80)
+#define GRN_CTX_TEMPORARY_DISABLE_II_RESOLVE_SEL_AND (0x40)
+
+typedef struct {
+ int64_t tv_sec;
+ int32_t tv_nsec;
+} grn_timeval;
+
+extern grn_timeval grn_starttime;
+
+#ifndef GRN_TIMEVAL_STR_SIZE
+#define GRN_TIMEVAL_STR_SIZE 0x100
+#endif /* GRN_TIMEVAL_STR_SIZE */
+#ifndef GRN_TIMEVAL_STR_FORMAT
+#define GRN_TIMEVAL_STR_FORMAT "%04d-%02d-%02d %02d:%02d:%02d.%06d"
+#endif /* GRN_TIMEVAL_STR_FORMAT */
+#define GRN_TIME_NSEC_PER_SEC 1000000000
+#define GRN_TIME_NSEC_PER_SEC_F 1000000000.0
+#define GRN_TIME_NSEC_PER_USEC (GRN_TIME_NSEC_PER_SEC / GRN_TIME_USEC_PER_SEC)
+#define GRN_TIME_NSEC_TO_USEC(nsec) ((nsec) / GRN_TIME_NSEC_PER_USEC)
+#define GRN_TIME_USEC_TO_NSEC(usec) ((usec) * GRN_TIME_NSEC_PER_USEC)
+
+GRN_API grn_rc grn_timeval_now(grn_ctx *ctx, grn_timeval *tv);
+GRN_API grn_rc grn_timeval2str(grn_ctx *ctx, grn_timeval *tv, char *buf);
+grn_rc grn_str2timeval(const char *str, uint32_t str_len, grn_timeval *tv);
+
+GRN_API void grn_ctx_log(grn_ctx *ctx, const char *fmt, ...) GRN_ATTRIBUTE_PRINTF(2);
+void grn_ctx_loader_clear(grn_ctx *ctx);
+void grn_log_reopen(grn_ctx *ctx);
+
+GRN_API grn_rc grn_ctx_sendv(grn_ctx *ctx, int argc, char **argv, int flags);
+GRN_API void grn_ctx_set_next_expr(grn_ctx *ctx, grn_obj *expr);
+
+int grn_alloc_count(void);
+
+grn_content_type grn_get_ctype(grn_obj *var);
+
+/**** db_obj ****/
+
+/* flag values used for grn_obj.header.impl_flags */
+
+#define GRN_OBJ_ALLOCATED (0x01<<2) /* allocated by ctx */
+#define GRN_OBJ_EXPRVALUE (0x01<<3) /* value allocated by grn_expr */
+#define GRN_OBJ_EXPRCONST (0x01<<4) /* constant allocated by grn_expr */
+
+typedef struct _grn_hook grn_hook;
+
+typedef struct {
+ grn_obj_header header;
+ grn_id range; /* table: type of subrecords, column: type of values */
+ /* -- compatible with grn_accessor -- */
+ grn_id id;
+ grn_obj *db;
+ grn_user_data user_data;
+ grn_proc_func *finalizer;
+ grn_hook *hooks[5];
+ void *source;
+ uint32_t source_size;
+ uint32_t max_n_subrecs;
+ uint8_t subrec_size;
+ uint8_t subrec_offset;
+ uint8_t record_unit;
+ uint8_t subrec_unit;
+ // grn_obj_flags flags;
+} grn_db_obj;
+
+#define GRN_DB_OBJ_SET_TYPE(db_obj,obj_type) do {\
+ (db_obj)->obj.header.type = (obj_type);\
+ (db_obj)->obj.header.impl_flags = 0;\
+ (db_obj)->obj.header.flags = 0;\
+ (db_obj)->obj.id = GRN_ID_NIL;\
+ (db_obj)->obj.user_data.ptr = NULL;\
+ (db_obj)->obj.finalizer = NULL;\
+ (db_obj)->obj.hooks[0] = NULL;\
+ (db_obj)->obj.hooks[1] = NULL;\
+ (db_obj)->obj.hooks[2] = NULL;\
+ (db_obj)->obj.hooks[3] = NULL;\
+ (db_obj)->obj.hooks[4] = NULL;\
+ (db_obj)->obj.source = NULL;\
+ (db_obj)->obj.source_size = 0;\
+} while (0)
+
+/**** cache ****/
+
+typedef struct {
+ uint32_t nentries;
+ uint32_t max_nentries;
+ uint32_t nfetches;
+ uint32_t nhits;
+} grn_cache_statistics;
+
+void grn_cache_init(void);
+grn_obj *grn_cache_fetch(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_size);
+void grn_cache_unref(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_size);
+void grn_cache_update(grn_ctx *ctx, grn_cache *cache,
+ const char *str, uint32_t str_size, grn_obj *value);
+void grn_cache_expire(grn_cache *cache, int32_t size);
+void grn_cache_fin(void);
+void grn_cache_get_statistics(grn_ctx *ctx, grn_cache *cache,
+ grn_cache_statistics *statistics);
+
+/**** receive handler ****/
+
+GRN_API void grn_ctx_stream_out_func(grn_ctx *c, int flags, void *stream);
+
+grn_rc grn_db_init_builtin_procs(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_CTX_H */
diff --git a/storage/mroonga/vendor/groonga/lib/ctx_impl.h b/storage/mroonga/vendor/groonga/lib/ctx_impl.h
new file mode 100644
index 00000000000..33f1402e6e1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ctx_impl.h
@@ -0,0 +1,188 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_CTX_IMPL_H
+#define GRN_CTX_IMPL_H
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_COM_H
+#include "com.h"
+#endif /* GRN_COM_H */
+
+#ifdef GRN_WITH_MESSAGE_PACK
+#include <msgpack.h>
+#endif
+
+#ifdef GRN_WITH_MRUBY
+# include <mruby.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**** grn_expr ****/
+
+#define GRN_EXPR_MISSING_NAME "expr_missing"
+
+/**** grn_ctx_impl ****/
+
+#define GRN_CTX_INITED 0x00
+#define GRN_CTX_QUITTING 0x0f
+
+typedef enum {
+ GRN_LOADER_BEGIN = 0,
+ GRN_LOADER_TOKEN,
+ GRN_LOADER_STRING,
+ GRN_LOADER_SYMBOL,
+ GRN_LOADER_NUMBER,
+ GRN_LOADER_STRING_ESC,
+ GRN_LOADER_UNICODE0,
+ GRN_LOADER_UNICODE1,
+ GRN_LOADER_UNICODE2,
+ GRN_LOADER_UNICODE3,
+ GRN_LOADER_END
+} grn_loader_stat;
+
+typedef struct {
+ grn_obj values;
+ grn_obj level;
+ grn_obj columns;
+ uint32_t emit_level;
+ int32_t key_offset;
+ grn_obj *table;
+ grn_obj *last;
+ grn_obj *ifexists;
+ grn_obj *each;
+ uint32_t unichar;
+ uint32_t values_size;
+ uint32_t nrecords;
+ grn_loader_stat stat;
+ grn_content_type input_type;
+} grn_loader;
+
+#define GRN_CTX_N_SEGMENTS 512
+
+#ifdef USE_MEMORY_DEBUG
+typedef struct _grn_alloc_info grn_alloc_info;
+struct _grn_alloc_info
+{
+ void *address;
+ int freed;
+ char alloc_backtrace[4096];
+ char free_backtrace[4096];
+ grn_alloc_info *next;
+};
+#endif
+
+#ifdef GRN_WITH_MRUBY
+typedef struct _grn_mrb_data grn_mrb_data;
+struct _grn_mrb_data {
+ mrb_state *state;
+ struct RClass *module;
+ struct RClass *object_class;
+};
+#endif
+
+struct _grn_ctx_impl {
+ grn_encoding encoding;
+
+ /* memory pool portion */
+ int32_t lifoseg;
+ int32_t currseg;
+ grn_critical_section lock;
+ grn_io_mapinfo segs[GRN_CTX_N_SEGMENTS];
+
+#ifdef USE_DYNAMIC_MALLOC_CHANGE
+ /* memory allocation portion */
+ grn_malloc_func malloc_func;
+ grn_calloc_func calloc_func;
+ grn_realloc_func realloc_func;
+ grn_strdup_func strdup_func;
+#endif
+
+#ifdef USE_MEMORY_DEBUG
+ /* memory debug portion */
+ grn_alloc_info *alloc_info;
+#endif
+
+ /* expression portion */
+ grn_obj *stack[GRN_STACK_SIZE];
+ uint32_t stack_curr;
+ grn_hash *expr_vars;
+ grn_obj *curr_expr;
+ grn_obj *qe_next;
+ void *parser;
+ grn_timeval tv;
+
+ /* loader portion */
+ grn_edge *edge;
+ grn_loader loader;
+
+ /* plugin portion */
+ const char *plugin_path;
+
+ /* output portion */
+ grn_content_type output_type;
+ const char *mime_type;
+ grn_obj names;
+ grn_obj levels;
+
+ /* command portion */
+ grn_command_version command_version;
+
+ /* match escalation portion */
+ int64_t match_escalation_threshold;
+
+ /* lifetime portion */
+ grn_proc_func *finalizer;
+
+ grn_obj *db;
+ grn_array *values; /* temporary objects */
+ grn_hash *ios; /* IOs */
+ grn_obj *outbuf;
+ void (*output)(grn_ctx *, int, void *);
+ grn_com *com;
+ unsigned int com_status;
+ union {
+ void *ptr;
+ int fd;
+ uint32_t u32;
+ uint64_t u64;
+ } data;
+
+ grn_obj query_log_buf;
+
+ char previous_errbuf[GRN_CTX_MSGSIZE];
+ unsigned int n_same_error_messages;
+
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_packer msgpacker;
+#endif
+#ifdef GRN_WITH_MRUBY
+ grn_mrb_data mrb;
+#endif
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_CTX_IMPL_H */
diff --git a/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.c b/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.c
new file mode 100644
index 00000000000..21531e4a837
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.c
@@ -0,0 +1,106 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "ctx_impl_mrb.h"
+#include "ctx_impl.h"
+
+#include "mrb.h"
+#include "mrb/mrb_error.h"
+#include "mrb/mrb_id.h"
+#include "mrb/mrb_operator.h"
+#include "mrb/mrb_ctx.h"
+#include "mrb/mrb_logger.h"
+#include "mrb/mrb_void.h"
+#include "mrb/mrb_bulk.h"
+#include "mrb/mrb_obj.h"
+#include "mrb/mrb_column.h"
+#include "mrb/mrb_fixed_size_column.h"
+#include "mrb/mrb_variable_size_column.h"
+#include "mrb/mrb_index_column.h"
+#include "mrb/mrb_expr.h"
+#include "mrb/mrb_accessor.h"
+#include "mrb/mrb_procedure.h"
+
+#ifdef GRN_WITH_MRUBY
+static void
+grn_ctx_impl_mrb_init_bindings(grn_ctx *ctx)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+
+ mrb->ud = ctx;
+ ctx->impl->mrb.module = mrb_define_module(mrb, "Groonga");
+
+ grn_mrb_load(ctx, "backtrace_entry.rb");
+
+ grn_mrb_error_init(ctx);
+ grn_mrb_id_init(ctx);
+ grn_mrb_operator_init(ctx);
+ grn_mrb_ctx_init(ctx);
+ grn_mrb_logger_init(ctx);
+ grn_mrb_void_init(ctx);
+ grn_mrb_bulk_init(ctx);
+ grn_mrb_obj_init(ctx);
+ grn_mrb_column_init(ctx);
+ grn_mrb_fixed_size_column_init(ctx);
+ grn_mrb_variable_size_column_init(ctx);
+ grn_mrb_index_column_init(ctx);
+ grn_mrb_expr_init(ctx);
+ grn_mrb_accessor_init(ctx);
+ grn_mrb_procedure_init(ctx);
+}
+
+static void
+grn_ctx_impl_mrb_init_eval(grn_ctx *ctx)
+{
+ grn_mrb_load(ctx, "eval_context.rb");
+}
+
+void
+grn_ctx_impl_mrb_init(grn_ctx *ctx)
+{
+ const char *grn_mruby_enabled;
+ grn_mruby_enabled = getenv("GRN_MRUBY_ENABLED");
+ if (grn_mruby_enabled && strcmp(grn_mruby_enabled, "no") == 0) {
+ ctx->impl->mrb.state = NULL;
+ ctx->impl->mrb.module = NULL;
+ } else {
+ ctx->impl->mrb.state = mrb_open();
+ grn_ctx_impl_mrb_init_bindings(ctx);
+ grn_ctx_impl_mrb_init_eval(ctx);
+ }
+}
+
+void
+grn_ctx_impl_mrb_fin(grn_ctx *ctx)
+{
+ if (ctx->impl->mrb.state) {
+ mrb_close(ctx->impl->mrb.state);
+ ctx->impl->mrb.state = NULL;
+ }
+}
+#else
+void
+grn_ctx_impl_mrb_init(grn_ctx *ctx)
+{
+}
+
+void
+grn_ctx_impl_mrb_fin(grn_ctx *ctx)
+{
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.h b/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.h
new file mode 100644
index 00000000000..6810d1fc097
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ctx_impl_mrb.h
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_CTX_IMPL_MRB_H
+#define GRN_CTX_IMPL_MRB_H
+
+#include "groonga_in.h"
+#include "ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_ctx_impl_mrb_init(grn_ctx *ctx);
+void grn_ctx_impl_mrb_fin(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_CTX_IMPL_MRB_H */
diff --git a/storage/mroonga/vendor/groonga/lib/dat.cpp b/storage/mroonga/vendor/groonga/lib/dat.cpp
new file mode 100644
index 00000000000..8588857cd5d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat.cpp
@@ -0,0 +1,1104 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <cstring>
+#include <new>
+#include "str.h"
+#include "io.h"
+#include "dat.h"
+#include "util.h"
+#include "normalizer_in.h"
+
+#include "dat/trie.hpp"
+#include "dat/cursor-factory.hpp"
+
+namespace {
+
+const uint32_t FILE_ID_LENGTH = 3;
+
+class CriticalSection {
+ public:
+ CriticalSection() : lock_(NULL) {}
+ explicit CriticalSection(grn_critical_section *lock) : lock_(lock) {
+ CRITICAL_SECTION_ENTER(*lock_);
+ }
+ ~CriticalSection() {
+ leave();
+ }
+
+ void enter(grn_critical_section *lock) {
+ leave();
+ lock_ = lock;
+ }
+ void leave() {
+ if (lock_ != NULL) {
+ CRITICAL_SECTION_LEAVE(*lock_);
+ lock_ = NULL;
+ }
+ }
+
+ private:
+ grn_critical_section *lock_;
+
+ // Disallows copy and assignment.
+ CriticalSection(const CriticalSection &);
+ CriticalSection &operator=(const CriticalSection &);
+};
+
+/*
+ grn_dat_remove_file() removes a file specified by `path' and then returns
+ true on success, false on failure. Note that grn_dat_remove_file() does not
+ change `ctx->rc'.
+ */
+bool
+grn_dat_remove_file(grn_ctx *ctx, const char *path)
+{
+ struct stat stat;
+ return !::stat(path, &stat) && !unlink(path);
+}
+
+grn_rc
+grn_dat_translate_error_code(grn::dat::ErrorCode error_code) {
+ switch (error_code) {
+ case grn::dat::PARAM_ERROR: {
+ return GRN_INVALID_ARGUMENT;
+ }
+ case grn::dat::IO_ERROR: {
+ return GRN_INPUT_OUTPUT_ERROR;
+ }
+ case grn::dat::FORMAT_ERROR: {
+ return GRN_INVALID_FORMAT;
+ }
+ case grn::dat::MEMORY_ERROR: {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ case grn::dat::SIZE_ERROR:
+ case grn::dat::UNEXPECTED_ERROR: {
+ return GRN_UNKNOWN_ERROR;
+ }
+ case grn::dat::STATUS_ERROR: {
+ return GRN_FILE_CORRUPT;
+ }
+ default: {
+ return GRN_UNKNOWN_ERROR;
+ }
+ }
+}
+
+void
+grn_dat_init(grn_ctx *, grn_dat *dat)
+{
+ GRN_DB_OBJ_SET_TYPE(dat, GRN_TABLE_DAT_KEY);
+ dat->io = NULL;
+ dat->header = NULL;
+ dat->file_id = 0;
+ dat->encoding = GRN_ENC_DEFAULT;
+ dat->trie = NULL;
+ dat->old_trie = NULL;
+ dat->tokenizer = NULL;
+ dat->normalizer = NULL;
+ GRN_PTR_INIT(&(dat->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ CRITICAL_SECTION_INIT(dat->lock);
+}
+
+void
+grn_dat_fin(grn_ctx *ctx, grn_dat *dat)
+{
+ CRITICAL_SECTION_FIN(dat->lock);
+ delete static_cast<grn::dat::Trie *>(dat->old_trie);
+ delete static_cast<grn::dat::Trie *>(dat->trie);
+ dat->old_trie = NULL;
+ dat->trie = NULL;
+ if (dat->io) {
+ grn_io_close(ctx, dat->io);
+ dat->io = NULL;
+ }
+ GRN_OBJ_FIN(ctx, &(dat->token_filters));
+}
+
+/*
+ grn_dat_generate_trie_path() generates the path from `base_path' and
+ `file_id'. The generated path is stored in `trie_path'.
+ */
+void
+grn_dat_generate_trie_path(const char *base_path, char *trie_path, uint32_t file_id)
+{
+ if (!base_path || !base_path[0]) {
+ trie_path[0] = '\0';
+ return;
+ }
+ const size_t len = std::strlen(base_path);
+ std::memcpy(trie_path, base_path, len);
+ trie_path[len] = '.';
+ grn_itoh(file_id % (1U << (4 * FILE_ID_LENGTH)),
+ trie_path + len + 1, FILE_ID_LENGTH);
+ trie_path[len + 1 + FILE_ID_LENGTH] = '\0';
+}
+
+bool
+grn_dat_open_trie_if_needed(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!dat) {
+ ERR(GRN_INVALID_ARGUMENT, "dat is null");
+ return false;
+ }
+
+ const uint32_t file_id = dat->header->file_id;
+ if (!file_id || (dat->trie && (file_id <= dat->file_id))) {
+ /*
+ There is no need to open file when no trie file is available or the
+ current trie file is the latest one.
+ */
+ return true;
+ }
+
+ CriticalSection critical_section(&dat->lock);
+
+ if (dat->trie && (file_id <= dat->file_id)) {
+ /*
+ There is no need to open file if the latest file has been opened by
+ another thread.
+ */
+ return true;
+ }
+
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, file_id);
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ grn::dat::Trie * const old_trie = static_cast<grn::dat::Trie *>(dat->old_trie);
+ grn::dat::Trie * const new_trie = new (std::nothrow) grn::dat::Trie;
+ if (!new_trie) {
+ MERR("new grn::dat::Trie failed");
+ return false;
+ }
+
+ try {
+ new_trie->open(trie_path);
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::open failed");
+ delete new_trie;
+ return false;
+ }
+
+ dat->old_trie = trie;
+ dat->trie = new_trie;
+ dat->file_id = file_id;
+
+ critical_section.leave();
+
+ delete old_trie;
+ if (file_id >= 3) {
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, file_id - 2);
+ grn_dat_remove_file(ctx, trie_path);
+ }
+ return true;
+}
+
+bool grn_dat_rebuild_trie(grn_ctx *ctx, grn_dat *dat) {
+ grn::dat::Trie * const new_trie = new (std::nothrow) grn::dat::Trie;
+ if (!new_trie) {
+ MERR("new grn::dat::Trie failed");
+ return false;
+ }
+
+ const uint32_t file_id = dat->header->file_id;
+ try {
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, file_id + 1);
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ new_trie->create(*trie, trie_path, trie->file_size() * 2);
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::open failed");
+ delete new_trie;
+ return false;
+ }
+
+ grn::dat::Trie * const old_trie = static_cast<grn::dat::Trie *>(dat->old_trie);
+ dat->old_trie = dat->trie;
+ dat->trie = new_trie;
+ dat->header->file_id = dat->file_id = file_id + 1;
+
+ delete old_trie;
+ if (file_id >= 2) {
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, file_id - 1);
+ grn_dat_remove_file(ctx, trie_path);
+ }
+ return true;
+}
+
+void grn_dat_cursor_init(grn_ctx *, grn_dat_cursor *cursor) {
+ GRN_DB_OBJ_SET_TYPE(cursor, GRN_CURSOR_TABLE_DAT_KEY);
+ cursor->dat = NULL;
+ cursor->cursor = NULL;
+ cursor->key = &grn::dat::Key::invalid_key();
+ cursor->curr_rec = GRN_ID_NIL;
+}
+
+void grn_dat_cursor_fin(grn_ctx *, grn_dat_cursor *cursor) {
+ delete static_cast<grn::dat::Cursor *>(cursor->cursor);
+ cursor->dat = NULL;
+ cursor->cursor = NULL;
+ cursor->key = &grn::dat::Key::invalid_key();
+ cursor->curr_rec = GRN_ID_NIL;
+}
+
+} // namespace
+
+extern "C" {
+
+grn_dat *
+grn_dat_create(grn_ctx *ctx, const char *path, uint32_t,
+ uint32_t, uint32_t flags)
+{
+ if (path) {
+ if (path[0] == '\0') {
+ path = NULL;
+ } else if (std::strlen(path) >= (PATH_MAX - (FILE_ID_LENGTH + 1))) {
+ ERR(GRN_FILENAME_TOO_LONG, "too long path");
+ return NULL;
+ }
+ }
+
+ grn_dat * const dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
+ if (!dat) {
+ return NULL;
+ }
+ grn_dat_init(ctx, dat);
+
+ dat->io = grn_io_create(ctx, path, sizeof(struct grn_dat_header),
+ 4096, 0, grn_io_auto, GRN_IO_EXPIRE_SEGMENT);
+ if (!dat->io) {
+ GRN_FREE(dat);
+ return NULL;
+ }
+ grn_io_set_type(dat->io, GRN_TABLE_DAT_KEY);
+
+ dat->header = static_cast<struct grn_dat_header *>(grn_io_header(dat->io));
+ if (!dat->header) {
+ grn_io_close(ctx, dat->io);
+ grn_dat_remove_file(ctx, path);
+ GRN_FREE(dat);
+ return NULL;
+ }
+ const grn_encoding encoding = (ctx->encoding != GRN_ENC_DEFAULT) ?
+ ctx->encoding : grn_gctx.encoding;
+ dat->header->flags = flags;
+ dat->header->encoding = encoding;
+ dat->header->tokenizer = GRN_ID_NIL;
+ dat->header->file_id = 0;
+ if (dat->header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ dat->header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ dat->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ dat->header->normalizer = grn_obj_id(ctx, dat->normalizer);
+ } else {
+ dat->normalizer = NULL;
+ dat->header->normalizer = GRN_ID_NIL;
+ }
+ dat->encoding = encoding;
+ dat->tokenizer = NULL;
+ GRN_PTR_INIT(&(dat->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+
+ dat->obj.header.flags = dat->header->flags;
+
+ return dat;
+}
+
+grn_dat *
+grn_dat_open(grn_ctx *ctx, const char *path)
+{
+ if (path && (std::strlen(path) >= (PATH_MAX - (FILE_ID_LENGTH + 1)))) {
+ ERR(GRN_FILENAME_TOO_LONG, "too long path");
+ return NULL;
+ }
+
+ grn_dat * const dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat)));
+ if (!dat) {
+ return NULL;
+ }
+
+ grn_dat_init(ctx, dat);
+ dat->io = grn_io_open(ctx, path, grn_io_auto);
+ if (!dat->io) {
+ GRN_FREE(dat);
+ return NULL;
+ }
+
+ dat->header = (struct grn_dat_header *)grn_io_header(dat->io);
+ if (!dat->header) {
+ grn_io_close(ctx, dat->io);
+ GRN_FREE(dat);
+ return NULL;
+ }
+ dat->file_id = dat->header->file_id;
+ dat->encoding = dat->header->encoding;
+ dat->tokenizer = grn_ctx_at(ctx, dat->header->tokenizer);
+ if (dat->header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ dat->header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ dat->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ dat->header->normalizer = grn_obj_id(ctx, dat->normalizer);
+ } else {
+ dat->normalizer = grn_ctx_at(ctx, dat->header->normalizer);
+ }
+ GRN_PTR_INIT(&(dat->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ dat->obj.header.flags = dat->header->flags;
+ return dat;
+}
+
+grn_rc
+grn_dat_close(grn_ctx *ctx, grn_dat *dat)
+{
+ if (dat) {
+ grn_dat_fin(ctx, dat);
+ GRN_FREE(dat);
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_dat_remove(grn_ctx *ctx, const char *path)
+{
+ if (!path) {
+ ERR(GRN_INVALID_ARGUMENT, "path is null");
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ grn_dat * const dat = grn_dat_open(ctx, path);
+ if (!dat) {
+ return ctx->rc;
+ }
+ const uint32_t file_id = dat->header->file_id;
+ grn_dat_close(ctx, dat);
+
+ /*
+ grn_dat_remove() tries to remove (file_id + 1)th trie file because
+ grn::dat::Trie::create() might leave an incomplete file on failure.
+ */
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(path, trie_path, file_id + 1);
+ grn_dat_remove_file(ctx, trie_path);
+ for (uint32_t i = file_id; i > 0; --i) {
+ grn_dat_generate_trie_path(path, trie_path, i);
+ if (!grn_dat_remove_file(ctx, trie_path)) {
+ break;
+ }
+ }
+
+ /*
+ grn_io_remove() reports an error when it fails to remove `path'.
+ */
+ return grn_io_remove(ctx, path);
+}
+
+grn_id
+grn_dat_get(grn_ctx *ctx, grn_dat *dat, const void *key,
+ unsigned int key_size, void **)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+ const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_ID_NIL;
+ }
+ grn::dat::UInt32 key_pos;
+ try {
+ if (trie->search(key, key_size, &key_pos)) {
+ return trie->get_key(key_pos).id();
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::search failed");
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_dat_add(grn_ctx *ctx, grn_dat *dat, const void *key,
+ unsigned int key_size, void **, int *added)
+{
+ if (!key_size) {
+ return GRN_ID_NIL;
+ } else if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+
+ if (!dat->trie) {
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, 1);
+ grn::dat::Trie * const new_trie = new (std::nothrow) grn::dat::Trie;
+ if (!new_trie) {
+ MERR("new grn::dat::Trie failed");
+ return GRN_ID_NIL;
+ }
+ try {
+ new_trie->create(trie_path);
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::create failed");
+ delete new_trie;
+ return GRN_ID_NIL;
+ }
+ dat->trie = new_trie;
+ dat->file_id = dat->header->file_id = 1;
+ }
+
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ try {
+ grn::dat::UInt32 key_pos;
+ const bool res = trie->insert(key, key_size, &key_pos);
+ if (added) {
+ *added = res ? 1 : 0;
+ }
+ return trie->get_key(key_pos).id();
+ } catch (const grn::dat::SizeError &) {
+ if (!grn_dat_rebuild_trie(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+ grn::dat::Trie * const new_trie = static_cast<grn::dat::Trie *>(dat->trie);
+ grn::dat::UInt32 key_pos;
+ const bool res = new_trie->insert(key, key_size, &key_pos);
+ if (added) {
+ *added = res ? 1 : 0;
+ }
+ return new_trie->get_key(key_pos).id();
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::insert failed");
+ return GRN_ID_NIL;
+ }
+}
+
+int
+grn_dat_get_key(grn_ctx *ctx, grn_dat *dat, grn_id id, void *keybuf, int bufsize)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return 0;
+ }
+ const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return 0;
+ }
+ const grn::dat::Key &key = trie->ith_key(id);
+ if (!key.is_valid()) {
+ return 0;
+ }
+ if (keybuf && (bufsize >= (int)key.length())) {
+ std::memcpy(keybuf, key.ptr(), key.length());
+ }
+ return (int)key.length();
+}
+
+int
+grn_dat_get_key2(grn_ctx *ctx, grn_dat *dat, grn_id id, grn_obj *bulk)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return 0;
+ }
+ const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return 0;
+ }
+ const grn::dat::Key &key = trie->ith_key(id);
+ if (!key.is_valid()) {
+ return 0;
+ }
+ if (bulk->header.impl_flags & GRN_OBJ_REFER) {
+ bulk->u.b.head = static_cast<char *>(const_cast<void *>(key.ptr()));
+ bulk->u.b.curr = bulk->u.b.head + key.length();
+ } else {
+ grn_bulk_write(ctx, bulk, static_cast<const char *>(key.ptr()), key.length());
+ }
+ return (int)key.length();
+}
+
+grn_rc
+grn_dat_delete_by_id(grn_ctx *ctx, grn_dat *dat, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ } else if (!dat->trie || (id == GRN_ID_NIL)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ if (optarg && optarg->func) {
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->ith_entry(id).is_valid()) {
+ return GRN_INVALID_ARGUMENT;
+ } else if (!optarg->func(ctx, reinterpret_cast<grn_obj *>(dat), id, optarg->func_arg)) {
+ return GRN_SUCCESS;
+ }
+ }
+
+ try {
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->remove(id)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::remove failed");
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_dat_delete(grn_ctx *ctx, grn_dat *dat, const void *key, unsigned int key_size,
+ grn_table_delete_optarg *optarg)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ } else if (!dat->trie || !key || !key_size) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ if (optarg && optarg->func) {
+ try {
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ grn::dat::UInt32 key_pos;
+ if (!trie->search(key, key_size, &key_pos)) {
+ return GRN_INVALID_ARGUMENT;
+ } else if (!optarg->func(ctx, reinterpret_cast<grn_obj *>(dat),
+ trie->get_key(key_pos).id(), optarg->func_arg)) {
+ return GRN_SUCCESS;
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::search failed");
+ return ctx->rc;
+ }
+ }
+
+ try {
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->remove(key, key_size)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::remove failed");
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_dat_update_by_id(grn_ctx *ctx, grn_dat *dat, grn_id src_key_id,
+ const void *dest_key, unsigned int dest_key_size)
+{
+ if (!dest_key_size) {
+ return GRN_INVALID_ARGUMENT;
+ } else if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ } else if (!dat->trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ try {
+ try {
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->update(src_key_id, dest_key, dest_key_size)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ } catch (const grn::dat::SizeError &) {
+ if (!grn_dat_rebuild_trie(ctx, dat)) {
+ return ctx->rc;
+ }
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->update(src_key_id, dest_key, dest_key_size)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::update failed");
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_dat_update(grn_ctx *ctx, grn_dat *dat,
+ const void *src_key, unsigned int src_key_size,
+ const void *dest_key, unsigned int dest_key_size)
+{
+ if (!dest_key_size) {
+ return GRN_INVALID_ARGUMENT;
+ } else if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ } else if (!dat->trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ try {
+ try {
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->update(src_key, src_key_size, dest_key, dest_key_size)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ } catch (const grn::dat::SizeError &) {
+ if (!grn_dat_rebuild_trie(ctx, dat)) {
+ return ctx->rc;
+ }
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie->update(src_key, src_key_size, dest_key, dest_key_size)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::update failed");
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+int
+grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str,
+ unsigned int str_size, grn_dat_scan_hit *scan_hits,
+ unsigned int max_num_scan_hits, const char **str_rest)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat) || !str ||
+ !(dat->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) || !scan_hits) {
+ return -1;
+ }
+
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return -1;
+ }
+
+ if (!max_num_scan_hits || !str_size) {
+ if (str_rest) {
+ *str_rest = str;
+ }
+ return 0;
+ }
+
+ unsigned int num_scan_hits = 0;
+ try {
+ if (dat->normalizer) {
+ int flags = GRN_STRING_WITH_CHECKS;
+ grn_obj * const normalized_string = grn_string_open(ctx, str, str_size,
+ dat->normalizer,
+ flags);
+ if (!normalized_string) {
+ *str_rest = str;
+ return -1;
+ }
+ grn_string_get_normalized(ctx, normalized_string, &str, &str_size, NULL);
+ const short *checks = grn_string_get_checks(ctx, normalized_string);
+ unsigned int offset = 0;
+ while (str_size) {
+ if (*checks) {
+ grn::dat::UInt32 key_pos;
+ if (trie->lcp_search(str, str_size, &key_pos)) {
+ const grn::dat::Key &key = trie->get_key(key_pos);
+ const grn::dat::UInt32 key_length = key.length();
+ if ((key_length == str_size) || (checks[key_length])) {
+ unsigned int length = 0;
+ for (grn::dat::UInt32 i = 0; i < key_length; ++i) {
+ if (checks[i] > 0) {
+ length += checks[i];
+ }
+ }
+ scan_hits[num_scan_hits].id = key.id();
+ scan_hits[num_scan_hits].offset = offset;
+ scan_hits[num_scan_hits].length = length;
+ offset += length;
+ str += key_length;
+ str_size -= key_length;
+ checks += key_length;
+ if (++num_scan_hits >= max_num_scan_hits) {
+ break;
+ }
+ continue;
+ }
+ }
+ if (*checks > 0) {
+ offset += *checks;
+ }
+ }
+ ++str;
+ --str_size;
+ ++checks;
+ }
+ if (str_rest) {
+ grn_string_get_original(ctx, normalized_string, str_rest, NULL);
+ *str_rest += offset;
+ }
+ grn_obj_close(ctx, normalized_string);
+ } else {
+ const char * const begin = str;
+ while (str_size) {
+ grn::dat::UInt32 key_pos;
+ if (trie->lcp_search(str, str_size, &key_pos)) {
+ const grn::dat::Key &key = trie->get_key(key_pos);
+ scan_hits[num_scan_hits].id = key.id();
+ scan_hits[num_scan_hits].offset = str - begin;
+ scan_hits[num_scan_hits].length = key.length();
+ str += key.length();
+ str_size -= key.length();
+ if (++num_scan_hits >= max_num_scan_hits) {
+ break;
+ }
+ } else {
+ const int char_length = grn_charlen(ctx, str, str + str_size);
+ if (char_length) {
+ str += char_length;
+ str_size -= char_length;
+ } else {
+ ++str;
+ --str_size;
+ }
+ }
+ }
+ if (str_rest) {
+ *str_rest = str;
+ }
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::lcp_search failed");
+ return -1;
+ }
+ return static_cast<int>(num_scan_hits);
+}
+
+grn_id
+grn_dat_lcp_search(grn_ctx *ctx, grn_dat *dat,
+ const void *key, unsigned int key_size)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat) || !key ||
+ !(dat->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE)) {
+ return GRN_ID_NIL;
+ }
+
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_ID_NIL;
+ }
+
+ try {
+ grn::dat::UInt32 key_pos;
+ if (!trie->lcp_search(key, key_size, &key_pos)) {
+ return GRN_ID_NIL;
+ }
+ return trie->get_key(key_pos).id();
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::PrefixCursor::open failed");
+ return GRN_ID_NIL;
+ }
+}
+
+unsigned int
+grn_dat_size(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return 0;
+ }
+ const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie);
+ if (trie) {
+ return trie->num_keys();
+ }
+ return 0;
+}
+
+grn_dat_cursor *
+grn_dat_cursor_open(grn_ctx *ctx, grn_dat *dat,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return NULL;
+ }
+
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ grn_dat_cursor * const dc =
+ static_cast<grn_dat_cursor *>(GRN_MALLOC(sizeof(grn_dat_cursor)));
+ if (dc) {
+ grn_dat_cursor_init(ctx, dc);
+ }
+ return dc;
+ }
+
+ grn_dat_cursor * const dc =
+ static_cast<grn_dat_cursor *>(GRN_MALLOC(sizeof(grn_dat_cursor)));
+ if (!dc) {
+ return NULL;
+ }
+ grn_dat_cursor_init(ctx, dc);
+
+ try {
+ if ((flags & GRN_CURSOR_BY_ID) != 0) {
+ dc->cursor = grn::dat::CursorFactory::open(*trie,
+ min, min_size, max, max_size, offset, limit,
+ grn::dat::ID_RANGE_CURSOR |
+ ((flags & GRN_CURSOR_DESCENDING) ? grn::dat::DESCENDING_CURSOR : 0) |
+ ((flags & GRN_CURSOR_GT) ? grn::dat::EXCEPT_LOWER_BOUND : 0) |
+ ((flags & GRN_CURSOR_LT) ? grn::dat::EXCEPT_UPPER_BOUND : 0));
+ } else if ((flags & GRN_CURSOR_PREFIX) != 0) {
+ if (max && max_size) {
+ if ((dat->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) != 0) {
+ dc->cursor = grn::dat::CursorFactory::open(*trie,
+ NULL, min_size, max, max_size, offset, limit,
+ grn::dat::PREFIX_CURSOR | grn::dat::DESCENDING_CURSOR);
+ } else {
+ // TODO: near
+ }
+ } else if (min && min_size) {
+ if ((flags & GRN_CURSOR_RK) != 0) {
+ // TODO: rk search
+ } else {
+ dc->cursor = grn::dat::CursorFactory::open(*trie,
+ min, min_size, NULL, 0, offset, limit,
+ grn::dat::PREDICTIVE_CURSOR |
+ ((flags & GRN_CURSOR_DESCENDING) ? grn::dat::DESCENDING_CURSOR : 0) |
+ ((flags & GRN_CURSOR_GT) ? grn::dat::EXCEPT_EXACT_MATCH : 0));
+ }
+ }
+ } else {
+ dc->cursor = grn::dat::CursorFactory::open(*trie,
+ min, min_size, max, max_size, offset, limit,
+ grn::dat::KEY_RANGE_CURSOR |
+ ((flags & GRN_CURSOR_DESCENDING) ? grn::dat::DESCENDING_CURSOR : 0) |
+ ((flags & GRN_CURSOR_GT) ? grn::dat::EXCEPT_LOWER_BOUND : 0) |
+ ((flags & GRN_CURSOR_LT) ? grn::dat::EXCEPT_UPPER_BOUND : 0));
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::CursorFactory::open failed");
+ GRN_FREE(dc);
+ return NULL;
+ }
+ if (!dc->cursor) {
+ ERR(GRN_INVALID_ARGUMENT, "unsupported query");
+ GRN_FREE(dc);
+ return NULL;
+ }
+ dc->dat = dat;
+ return dc;
+}
+
+grn_id
+grn_dat_cursor_next(grn_ctx *ctx, grn_dat_cursor *c)
+{
+ if (!c || !c->cursor) {
+ return GRN_ID_NIL;
+ }
+ try {
+ grn::dat::Cursor * const cursor = static_cast<grn::dat::Cursor *>(c->cursor);
+ const grn::dat::Key &key = cursor->next();
+ c->key = &key;
+ c->curr_rec = key.is_valid() ? key.id() : GRN_ID_NIL;
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Cursor::next failed");
+ return GRN_ID_NIL;
+ }
+ return c->curr_rec;
+}
+
+void
+grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c)
+{
+ if (c) {
+ grn_dat_cursor_fin(ctx, c);
+ GRN_FREE(c);
+ }
+}
+
+int
+grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key)
+{
+ if (c) {
+ const grn::dat::Key &key_ref = *static_cast<const grn::dat::Key *>(c->key);
+ if (key_ref.is_valid()) {
+ *key = key_ref.ptr();
+ return (int)key_ref.length();
+ }
+ }
+ return 0;
+}
+
+grn_rc
+grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c,
+ grn_table_delete_optarg *optarg)
+{
+ if (!c || !c->cursor) {
+ return GRN_INVALID_ARGUMENT;
+ } else if (!grn_dat_open_trie_if_needed(ctx, c->dat)) {
+ return ctx->rc;
+ }
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(c->dat->trie);
+ if (!trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ try {
+ if (trie->remove(c->curr_rec)) {
+ return GRN_SUCCESS;
+ }
+ } catch (const grn::dat::Exception &ex) {
+ ERR(grn_dat_translate_error_code(ex.code()),
+ "grn::dat::Trie::remove failed");
+ return GRN_INVALID_ARGUMENT;
+ }
+ return GRN_INVALID_ARGUMENT;
+}
+
+grn_id
+grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (trie) {
+ return trie->max_key_id();
+ }
+ return GRN_ID_NIL;
+}
+
+grn_rc
+grn_dat_truncate(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ }
+ const grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(dat->trie);
+ if (!trie || !trie->max_key_id()) {
+ return GRN_SUCCESS;
+ }
+
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, dat->header->file_id + 1);
+ try {
+ grn::dat::Trie().create(trie_path);
+ } catch (const grn::dat::Exception &ex) {
+ const grn_rc error_code = grn_dat_translate_error_code(ex.code());
+ ERR(error_code, "grn::dat::Trie::create failed");
+ return error_code;
+ }
+ ++dat->header->file_id;
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+const char *
+_grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id, uint32_t *key_size)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return NULL;
+ }
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return NULL;
+ }
+ const grn::dat::Key &key = trie->ith_key(id);
+ if (!key.is_valid()) {
+ return NULL;
+ }
+ *key_size = key.length();
+ return static_cast<const char *>(key.ptr());
+}
+
+grn_id
+grn_dat_next(grn_ctx *ctx, grn_dat *dat, grn_id id)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_ID_NIL;
+ }
+ while (id < trie->max_key_id()) {
+ if (trie->ith_key(++id).is_valid()) {
+ return id;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_dat_at(grn_ctx *ctx, grn_dat *dat, grn_id id)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return GRN_ID_NIL;
+ }
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_ID_NIL;
+ }
+ const grn::dat::Key &key = trie->ith_key(id);
+ if (!key.is_valid()) {
+ return GRN_ID_NIL;
+ }
+ return id;
+}
+
+grn_rc
+grn_dat_clear_status_flags(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ }
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ trie->clear_status_flags();
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_dat_repair(grn_ctx *ctx, grn_dat *dat)
+{
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ }
+ const grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(dat->trie);
+ if (!trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ char trie_path[PATH_MAX];
+ grn_dat_generate_trie_path(grn_io_path(dat->io), trie_path, dat->header->file_id + 1);
+ try {
+ grn::dat::Trie().repair(*trie, trie_path);
+ } catch (const grn::dat::Exception &ex) {
+ const grn_rc error_code = grn_dat_translate_error_code(ex.code());
+ ERR(error_code, "grn::dat::Trie::create failed");
+ return error_code;
+ }
+ ++dat->header->file_id;
+ if (!grn_dat_open_trie_if_needed(ctx, dat)) {
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+} // extern "C"
diff --git a/storage/mroonga/vendor/groonga/lib/dat.h b/storage/mroonga/vendor/groonga/lib/dat.h
new file mode 100644
index 00000000000..d0c44b7035d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat.h
@@ -0,0 +1,100 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_DAT_H
+#define GRN_DAT_H
+
+#ifndef GROONGA_IN_H
+# include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#include "db.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _grn_dat {
+ grn_db_obj obj;
+ grn_io *io;
+ struct grn_dat_header *header;
+ uint32_t file_id;
+ grn_encoding encoding;
+ void *trie;
+ void *old_trie;
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj token_filters;
+ grn_critical_section lock;
+};
+
+struct grn_dat_header {
+ uint32_t flags;
+ grn_encoding encoding;
+ grn_id tokenizer;
+ uint32_t file_id;
+ grn_id normalizer;
+ uint32_t reserved[235];
+};
+
+struct _grn_dat_cursor {
+ grn_db_obj obj;
+ grn_dat *dat;
+ void *cursor;
+ const void *key;
+ grn_id curr_rec;
+};
+
+typedef struct _grn_dat_scan_hit grn_dat_scan_hit;
+
+struct _grn_dat_scan_hit {
+ grn_id id;
+ unsigned int offset;
+ unsigned int length;
+};
+
+GRN_API int grn_dat_scan(grn_ctx *ctx, grn_dat *dat, const char *str,
+ unsigned int str_size, grn_dat_scan_hit *scan_hits,
+ unsigned int max_num_scan_hits, const char **str_rest);
+GRN_API grn_id grn_dat_lcp_search(grn_ctx *ctx, grn_dat *dat,
+ const void *key, unsigned int key_size);
+
+GRN_API grn_id grn_dat_curr_id(grn_ctx *ctx, grn_dat *dat);
+
+/*
+ Currently, grn_dat_truncate() is available if the grn_dat object is
+ associated with a file.
+ */
+GRN_API grn_rc grn_dat_truncate(grn_ctx *ctx, grn_dat *dat);
+
+GRN_API const char *_grn_dat_key(grn_ctx *ctx, grn_dat *dat, grn_id id,
+ uint32_t *key_size);
+GRN_API grn_id grn_dat_next(grn_ctx *ctx, grn_dat *dat, grn_id id);
+GRN_API grn_id grn_dat_at(grn_ctx *ctx, grn_dat *dat, grn_id id);
+
+GRN_API grn_rc grn_dat_clear_status_flags(grn_ctx *ctx, grn_dat *dat);
+
+/*
+ Currently, grn_dat_repair() is available if the grn_dat object is associated
+ with a file.
+ */
+GRN_API grn_rc grn_dat_repair(grn_ctx *ctx, grn_dat *dat);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_DAT_H */
diff --git a/storage/mroonga/vendor/groonga/lib/dat/Makefile.am b/storage/mroonga/vendor/groonga/lib/dat/Makefile.am
new file mode 100644
index 00000000000..6bad7730de4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/Makefile.am
@@ -0,0 +1,12 @@
+DEFS += -D_REENTRANT $(GRN_DEFS) -DGRN_DAT_EXPORT
+
+DEFAULT_INCLUDES = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+noinst_LTLIBRARIES = libgrndat.la
+
+include sources.am
+
+CLEANFILES = *.gcno *.gcda
diff --git a/storage/mroonga/vendor/groonga/lib/dat/array.hpp b/storage/mroonga/vendor/groonga/lib/dat/array.hpp
new file mode 100644
index 00000000000..5536552b36d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/array.hpp
@@ -0,0 +1,100 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_ARRAY_HPP_
+#define GRN_DAT_ARRAY_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+// This class is used to detect an out-of-range access in debug mode.
+template <typename T>
+class GRN_DAT_API Array {
+ public:
+ Array() : ptr_(NULL), size_(0) {}
+ Array(void *ptr, UInt32 size) : ptr_(static_cast<T *>(ptr)), size_(size) {
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (size != 0));
+ }
+ template <UInt32 U>
+ explicit Array(T (&array)[U]) : ptr_(array), size_(U) {}
+ ~Array() {}
+
+ const T &operator[](UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= size_);
+ return ptr_[i];
+ }
+ T &operator[](UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(i >= size_);
+ return ptr_[i];
+ }
+
+ const T *begin() const {
+ return ptr();
+ }
+ T *begin() {
+ return ptr();
+ }
+
+ const T *end() const {
+ return ptr() + size();
+ }
+ T *end() {
+ return ptr() + size();
+ }
+
+ void assign(void *ptr, UInt32 size) {
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (size != 0));
+ ptr_ = static_cast<T *>(ptr);
+ size_ = size;
+ }
+ template <UInt32 U>
+ void assign(T (&array)[U]) {
+ assign(array, U);
+ }
+
+ void swap(Array *rhs) {
+ T * const temp_ptr = ptr_;
+ ptr_ = rhs->ptr_;
+ rhs->ptr_ = temp_ptr;
+
+ const UInt32 temp_size = size_;
+ size_ = rhs->size_;
+ rhs->size_ = temp_size;
+ }
+
+ T *ptr() const {
+ return ptr_;
+ }
+ UInt32 size() const {
+ return size_;
+ }
+
+ private:
+ T *ptr_;
+ UInt32 size_;
+
+ // Disallows copy and assignment.
+ Array(const Array &);
+ Array &operator=(const Array &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_ARRAY_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/base.hpp b/storage/mroonga/vendor/groonga/lib/dat/base.hpp
new file mode 100644
index 00000000000..577e69ed62d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/base.hpp
@@ -0,0 +1,69 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_BASE_HPP_
+#define GRN_DAT_BASE_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+// The most significant bit represents whether or not the node is a linker.
+// BASE of a linker represents the position of its associated key and BASE of
+// a non-linker represents the offset to its child nodes.
+class GRN_DAT_API Base {
+ public:
+ Base() : value_(0) {}
+
+ bool operator==(const Base &rhs) const {
+ return value_ == rhs.value_;
+ }
+
+ bool is_linker() const {
+ return (value_ & IS_LINKER_FLAG) == IS_LINKER_FLAG;
+ }
+ UInt32 offset() const {
+ GRN_DAT_DEBUG_THROW_IF(is_linker());
+ return value_;
+ }
+ UInt32 key_pos() const {
+ GRN_DAT_DEBUG_THROW_IF(!is_linker());
+ return value_ & ~IS_LINKER_FLAG;
+ }
+
+ void set_offset(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF((x & IS_LINKER_FLAG) != 0);
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_OFFSET);
+ value_ = x;
+ }
+ void set_key_pos(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF((x & IS_LINKER_FLAG) != 0);
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_OFFSET);
+ value_ = IS_LINKER_FLAG | x;
+ }
+
+ private:
+ UInt32 value_;
+
+ static const UInt32 IS_LINKER_FLAG = 0x80000000U;
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_BASE_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/block.hpp b/storage/mroonga/vendor/groonga/lib/dat/block.hpp
new file mode 100644
index 00000000000..4675083ecea
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/block.hpp
@@ -0,0 +1,96 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_BLOCK_HPP_
+#define GRN_DAT_BLOCK_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Block {
+ public:
+ Block() : next_(0), prev_(0), first_phantom_(0), num_phantoms_(0) {}
+
+ // Blocks in the same level are stored in a doubly-linked list which is
+ // represented by the following next() and prev().
+ UInt32 next() const {
+ return next_ / BLOCK_SIZE;
+ }
+ UInt32 prev() const {
+ return prev_ / BLOCK_SIZE;
+ }
+
+ // A level indicates how easyily find_offset() can find a good offset in that
+ // block. It is easier in lower level blocks.
+ UInt32 level() const {
+ return next_ & BLOCK_MASK;
+ }
+ // A block level rises when find_offset() fails to find a good offset
+ // MAX_FAILURE_COUNT times in that block.
+ UInt32 failure_count() const {
+ return prev_ & BLOCK_MASK;
+ }
+
+ UInt32 first_phantom() const {
+ return first_phantom_;
+ }
+ UInt32 num_phantoms() const {
+ return num_phantoms_;
+ }
+
+ void set_next(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_BLOCK_ID);
+ next_ = (next_ & BLOCK_MASK) | (x * BLOCK_SIZE);
+ }
+ void set_prev(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_BLOCK_ID);
+ prev_ = (prev_ & BLOCK_MASK) | (x * BLOCK_SIZE);
+ }
+
+ void set_level(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_BLOCK_LEVEL);
+ GRN_DAT_DEBUG_THROW_IF(x > BLOCK_MASK);
+ next_ = (next_ & ~BLOCK_MASK) | x;
+ }
+ void set_failure_count(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_FAILURE_COUNT);
+ GRN_DAT_DEBUG_THROW_IF(x > BLOCK_MASK);
+ prev_ = (prev_ & ~BLOCK_MASK) | x;
+ }
+
+ void set_first_phantom(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x >= BLOCK_SIZE);
+ first_phantom_ = (UInt16)x;
+ }
+ void set_num_phantoms(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > BLOCK_SIZE);
+ num_phantoms_ = (UInt16)x;
+ }
+
+ private:
+ UInt32 next_;
+ UInt32 prev_;
+ UInt16 first_phantom_;
+ UInt16 num_phantoms_;
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_BLOCK_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/check.hpp b/storage/mroonga/vendor/groonga/lib/dat/check.hpp
new file mode 100644
index 00000000000..f7e57874ca2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/check.hpp
@@ -0,0 +1,151 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_CHECK_HPP_
+#define GRN_DAT_CHECK_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Check {
+ public:
+ Check() : value_(0) {}
+
+ bool operator==(const Check &rhs) const {
+ return value_ == rhs.value_;
+ }
+
+ // The most significant bit represents whether or not the node ID is used as
+ // an offset. Note that the MSB is independent of the other bits.
+ bool is_offset() const {
+ return (value_ & IS_OFFSET_FLAG) == IS_OFFSET_FLAG;
+ }
+
+ UInt32 except_is_offset() const {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ return value_ & ~IS_OFFSET_FLAG;
+ }
+
+ // A phantom node is a node that has never been used, and such a node is also
+ // called an empty element. Phantom nodes form a doubly linked list in each
+ // block, and the linked list is represented by next() and prev().
+ bool is_phantom() const {
+ return (value_ & IS_PHANTOM_FLAG) == IS_PHANTOM_FLAG;
+ }
+
+ UInt32 next() const {
+ GRN_DAT_DEBUG_THROW_IF(!is_phantom());
+ return (value_ >> NEXT_SHIFT) & BLOCK_MASK;
+ }
+ UInt32 prev() const {
+ GRN_DAT_DEBUG_THROW_IF(!is_phantom());
+ return (value_ >> PREV_SHIFT) & BLOCK_MASK;
+ }
+
+ // A label is attached to each non-phantom node. A label is represented by
+ // a byte except for a terminal label '\256'. Note that a phantom node always
+ // returns an invalid label with its phantom bit flag so as to reject invalid
+ // transitions.
+ UInt32 label() const {
+ return value_ & (IS_PHANTOM_FLAG | LABEL_MASK);
+ }
+
+ // A non-phantom node has the labels of the first child and the next sibling.
+ // Note that INVALID_LABEL is stored if the node has no child nodes or has
+ // no more siblings.
+ UInt32 child() const {
+ return (value_ >> CHILD_SHIFT) & LABEL_MASK;
+ }
+ UInt32 sibling() const {
+ return (value_ >> SIBLING_SHIFT) & LABEL_MASK;
+ }
+
+ void set_is_offset(bool x) {
+ if (x) {
+ GRN_DAT_DEBUG_THROW_IF(is_offset());
+ value_ |= IS_OFFSET_FLAG;
+ } else {
+ GRN_DAT_DEBUG_THROW_IF(!is_offset());
+ value_ &= ~IS_OFFSET_FLAG;
+ }
+ }
+
+ void set_except_is_offset(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ GRN_DAT_DEBUG_THROW_IF((x & IS_OFFSET_FLAG) == IS_OFFSET_FLAG);
+ value_ = (value_ & IS_OFFSET_FLAG) | x;
+ }
+
+ // To reject a transition to an incomplete node, set_is_phantom() invalidates
+ // its label and links when it becomes non-phantom.
+ void set_is_phantom(bool x) {
+ if (x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ value_ |= IS_PHANTOM_FLAG;
+ } else {
+ GRN_DAT_DEBUG_THROW_IF(!is_phantom());
+ value_ = (value_ & IS_OFFSET_FLAG) | (INVALID_LABEL << CHILD_SHIFT) |
+ (INVALID_LABEL << SIBLING_SHIFT) | INVALID_LABEL;
+ }
+ }
+
+ void set_next(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(!is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(x > BLOCK_MASK);
+ value_ = (value_ & ~(BLOCK_MASK << NEXT_SHIFT)) | (x << NEXT_SHIFT);
+ }
+ void set_prev(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(!is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(x > BLOCK_MASK);
+ value_ = (value_ & ~(BLOCK_MASK << PREV_SHIFT)) | (x << PREV_SHIFT);
+ }
+
+ void set_label(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_LABEL);
+ value_ = (value_ & ~LABEL_MASK) | x;
+ }
+
+ void set_child(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_LABEL);
+ value_ = (value_ & ~(LABEL_MASK << CHILD_SHIFT)) | (x << CHILD_SHIFT);
+ }
+ void set_sibling(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(label() > MAX_LABEL);
+ GRN_DAT_DEBUG_THROW_IF((sibling() != INVALID_LABEL) && (x == INVALID_LABEL));
+ value_ = (value_ & ~(LABEL_MASK << SIBLING_SHIFT)) | (x << SIBLING_SHIFT);
+ }
+
+ private:
+ UInt32 value_;
+
+ static const UInt32 IS_OFFSET_FLAG = 1U << 31;
+ static const UInt32 IS_PHANTOM_FLAG = 1U << 30;
+ static const UInt32 NEXT_SHIFT = 9;
+ static const UInt32 PREV_SHIFT = 18;
+ static const UInt32 CHILD_SHIFT = 9;
+ static const UInt32 SIBLING_SHIFT = 18;
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_CHECK_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.cpp b/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.cpp
new file mode 100644
index 00000000000..6dab51a2978
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.cpp
@@ -0,0 +1,94 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "cursor-factory.hpp"
+#include "id-cursor.hpp"
+#include "key-cursor.hpp"
+#include "prefix-cursor.hpp"
+#include "predictive-cursor.hpp"
+
+#include <new>
+
+namespace grn {
+namespace dat {
+
+Cursor *CursorFactory::open(const Trie &trie,
+ const void *min_ptr, UInt32 min_length,
+ const void *max_ptr, UInt32 max_length,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, &trie == NULL);
+
+ const UInt32 cursor_type = flags & CURSOR_TYPE_MASK;
+ switch (cursor_type) {
+ case ID_RANGE_CURSOR: {
+ IdCursor *cursor = new (std::nothrow) IdCursor;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, cursor == NULL);
+ try {
+ cursor->open(trie, String(min_ptr, min_length),
+ String(max_ptr, max_length), offset, limit, flags);
+ } catch (...) {
+ delete cursor;
+ throw;
+ }
+ return cursor;
+ }
+ case KEY_RANGE_CURSOR: {
+ KeyCursor *cursor = new (std::nothrow) KeyCursor;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, cursor == NULL);
+ try {
+ cursor->open(trie, String(min_ptr, min_length),
+ String(max_ptr, max_length), offset, limit, flags);
+ } catch (...) {
+ delete cursor;
+ throw;
+ }
+ return cursor;
+ }
+ case PREFIX_CURSOR: {
+ PrefixCursor *cursor = new (std::nothrow) PrefixCursor;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, cursor == NULL);
+ try {
+ cursor->open(trie, String(max_ptr, max_length), min_length,
+ offset, limit, flags);
+ } catch (...) {
+ delete cursor;
+ throw;
+ }
+ return cursor;
+ }
+ case PREDICTIVE_CURSOR: {
+ PredictiveCursor *cursor = new (std::nothrow) PredictiveCursor;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, cursor == NULL);
+ try {
+ cursor->open(trie, String(min_ptr, min_length),
+ offset, limit, flags);
+ } catch (...) {
+ delete cursor;
+ throw;
+ }
+ return cursor;
+ }
+ default: {
+ GRN_DAT_THROW(PARAM_ERROR, "unknown cursor type");
+ }
+ }
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.hpp b/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.hpp
new file mode 100644
index 00000000000..c79ac4e89c7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/cursor-factory.hpp
@@ -0,0 +1,46 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_CURSOR_FACTORY_HPP_
+#define GRN_DAT_CURSOR_FACTORY_HPP_
+
+#include "cursor.hpp"
+
+namespace grn {
+namespace dat {
+
+class Trie;
+
+class GRN_DAT_API CursorFactory {
+ public:
+ static Cursor *open(const Trie &trie,
+ const void *min_ptr, UInt32 min_length,
+ const void *max_ptr, UInt32 max_length,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ private:
+ // Disallows copy and assignment.
+ CursorFactory(const CursorFactory &);
+ CursorFactory &operator=(const CursorFactory &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_CURSOR_FACTORY_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp
new file mode 100644
index 00000000000..0a4887e1a74
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp
@@ -0,0 +1,48 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_CURSOR_HPP_
+#define GRN_DAT_CURSOR_HPP_
+
+#include "key.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Cursor {
+ public:
+ Cursor() {}
+ virtual ~Cursor() {}
+
+ virtual void close() = 0;
+
+ virtual const Key &next() = 0;
+
+ virtual UInt32 offset() const = 0;
+ virtual UInt32 limit() const = 0;
+ virtual UInt32 flags() const = 0;
+
+ private:
+ // Disallows copy and assignment.
+ Cursor(const Cursor &);
+ Cursor &operator=(const Cursor &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_CURSOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/dat.hpp b/storage/mroonga/vendor/groonga/lib/dat/dat.hpp
new file mode 100644
index 00000000000..a2b225a9cf4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/dat.hpp
@@ -0,0 +1,255 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_COMMON_HPP_
+#define GRN_DAT_COMMON_HPP_
+
+#ifndef _MSC_VER
+# include <stddef.h>
+# include <stdint.h>
+#endif // _MSC_VER
+
+#include <cstddef>
+#include <exception>
+
+#ifdef _DEBUG
+# include <iostream>
+#endif // _DEBUG
+
+#ifndef GRN_DAT_API
+# ifdef WIN32
+# ifdef GRN_DAT_EXPORT
+# define GRN_DAT_API __declspec(dllexport)
+# else // GRN_DAT_EXPORT
+# define GRN_DAT_API __declspec(dllimport)
+# endif // GRN_DAT_EXPORT
+# else // WIN32
+# define GRN_DAT_API
+# endif // WIN32
+#endif // GRN_DAT_API
+
+namespace grn {
+namespace dat {
+
+#ifdef _MSC_VER
+typedef unsigned __int8 UInt8;
+typedef unsigned __int16 UInt16;
+typedef unsigned __int32 UInt32;
+typedef unsigned __int64 UInt64;
+#else // _MSC_VER
+typedef ::uint8_t UInt8;
+typedef ::uint16_t UInt16;
+typedef ::uint32_t UInt32;
+typedef ::uint64_t UInt64;
+#endif // _MSC_VER
+
+const UInt8 MAX_UINT8 = static_cast<UInt8>(0xFFU);
+const UInt16 MAX_UINT16 = static_cast<UInt16>(0xFFFFU);
+const UInt32 MAX_UINT32 = static_cast<UInt32>(0xFFFFFFFFU);
+const UInt64 MAX_UINT64 = static_cast<UInt64>(0xFFFFFFFFFFFFFFFFULL);
+
+// If a key is a prefix of another key, such a key is associated with a special
+// terminal node which has TERMINAL_LABEL.
+const UInt16 TERMINAL_LABEL = 0x100;
+const UInt16 MIN_LABEL = '\0';
+const UInt16 MAX_LABEL = TERMINAL_LABEL;
+const UInt32 INVALID_LABEL = 0x1FF;
+const UInt32 LABEL_MASK = 0x1FF;
+
+// The MSB of BASE is used to represent whether the node is a linker node or
+// not and the other 31 bits represent the offset to its child nodes. So, the
+// number of nodes is limited to 2^31.
+const UInt32 ROOT_NODE_ID = 0;
+const UInt32 MAX_NODE_ID = 0x7FFFFFFF;
+const UInt32 MAX_NUM_NODES = MAX_NODE_ID + 1;
+const UInt32 INVALID_NODE_ID = MAX_NODE_ID + 1;
+
+// 0 is reserved for non-linker leaf nodes. For example, the root node of an
+// initial double-array is a non-linker leaf node.
+const UInt32 MAX_OFFSET = MAX_NODE_ID;
+const UInt32 INVALID_OFFSET = 0;
+
+// Phantom nodes are managed in each block because siblings are always put in
+// the same block.
+const UInt32 BLOCK_SIZE = 0x200;
+const UInt32 BLOCK_MASK = 0x1FF;
+const UInt32 MAX_BLOCK_ID = MAX_NODE_ID / BLOCK_SIZE;
+const UInt32 MAX_NUM_BLOCKS = MAX_BLOCK_ID + 1;
+
+// Blocks are divided by their levels, which indicate how easily update
+// operations can find a good offset in them. The level of a block rises when
+// find_offset() fails in that block many times. MAX_FAILURE_COUNT is the
+// threshold. Also, in order to limit the time cost, find_offset() scans at
+// most MAX_BLOCK_COUNT blocks.
+// Larger parameters bring more chances of finding good offsets but it leads to
+// more node renumberings, which are costly operations, and thus results in
+// a degradation of space/time efficiencies.
+const UInt32 MAX_FAILURE_COUNT = 4;
+const UInt32 MAX_BLOCK_COUNT = 16;
+const UInt32 MAX_BLOCK_LEVEL = 5;
+
+// Blocks in the same level compose a doubly linked list. The entry block of
+// a linked list is called a leader. INVALID_LEADER means that a linked list is
+// empty and there exists no leader.
+const UInt32 INVALID_LEADER = 0x7FFFFFFF;
+
+const UInt32 MIN_KEY_ID = 1;
+const UInt32 MAX_KEY_ID = MAX_NODE_ID;
+const UInt32 INVALID_KEY_ID = 0;
+
+// A key length is represented as a 12-bit unsigned integer in Key.
+// A key ID is represented as a 28-bit unsigned integer in Key.
+const UInt32 MAX_KEY_LENGTH = (1U << 12) - 1;
+const UInt32 MAX_NUM_KEYS = (1U << 28) - 1;
+
+const UInt64 MIN_FILE_SIZE = 1 << 16;
+const UInt64 DEFAULT_FILE_SIZE = 1 << 20;
+const UInt64 MAX_FILE_SIZE = (UInt64)1 << 40;
+const double DEFAULT_NUM_NODES_PER_KEY = 4.0;
+const double DEFAULT_AVERAGE_KEY_LENGTH = 16.0;
+const UInt32 MAX_KEY_BUF_SIZE = 0x80000000U;
+const UInt32 MAX_TOTAL_KEY_LENGTH = 0xFFFFFFFFU;
+
+const UInt32 ID_RANGE_CURSOR = 0x00001;
+const UInt32 KEY_RANGE_CURSOR = 0x00002;
+const UInt32 PREFIX_CURSOR = 0x00004;
+const UInt32 PREDICTIVE_CURSOR = 0x00008;
+const UInt32 CURSOR_TYPE_MASK = 0x000FF;
+
+const UInt32 ASCENDING_CURSOR = 0x00100;
+const UInt32 DESCENDING_CURSOR = 0x00200;
+const UInt32 CURSOR_ORDER_MASK = 0x00F00;
+
+const UInt32 EXCEPT_LOWER_BOUND = 0x01000;
+const UInt32 EXCEPT_UPPER_BOUND = 0x02000;
+const UInt32 EXCEPT_EXACT_MATCH = 0x04000;
+const UInt32 CURSOR_OPTIONS_MASK = 0xFF000;
+
+const UInt32 REMOVING_FLAG = 1U << 0;
+const UInt32 INSERTING_FLAG = 1U << 1;
+const UInt32 UPDATING_FLAG = 1U << 2;
+const UInt32 CHANGING_MASK = REMOVING_FLAG | INSERTING_FLAG | UPDATING_FLAG;
+
+const UInt32 MKQ_SORT_THRESHOLD = 10;
+
+enum ErrorCode {
+ PARAM_ERROR = -1,
+ IO_ERROR = -2,
+ FORMAT_ERROR = -3,
+ MEMORY_ERROR = -4,
+ SIZE_ERROR = -5,
+ UNEXPECTED_ERROR = -6,
+ STATUS_ERROR = -7
+};
+
+class Exception : public std::exception {
+ public:
+ Exception() throw()
+ : std::exception(),
+ file_(""),
+ line_(-1),
+ what_("") {}
+ Exception(const char *file, int line, const char *what) throw()
+ : std::exception(),
+ file_(file),
+ line_(line),
+ what_((what != NULL) ? what : "") {}
+ Exception(const Exception &ex) throw()
+ : std::exception(ex),
+ file_(ex.file_),
+ line_(ex.line_),
+ what_(ex.what_) {}
+ virtual ~Exception() throw() {}
+
+ virtual Exception &operator=(const Exception &ex) throw() {
+ file_ = ex.file_;
+ line_ = ex.line_;
+ what_ = ex.what_;
+ return *this;
+ }
+
+ virtual ErrorCode code() const throw() = 0;
+ virtual const char *file() const throw() {
+ return file_;
+ }
+ virtual int line() const throw() {
+ return line_;
+ }
+ virtual const char *what() const throw() {
+ return what_;
+ }
+
+ private:
+ const char *file_;
+ int line_;
+ const char *what_;
+};
+
+template <ErrorCode T>
+class Error : public Exception {
+ public:
+ Error() throw()
+ : Exception() {}
+ Error(const char *file, int line, const char *what) throw()
+ : Exception(file, line, what) {}
+ Error(const Error &ex) throw()
+ : Exception(ex) {}
+ virtual ~Error() throw() {}
+
+ virtual Error &operator=(const Error &ex) throw() {
+ *static_cast<Exception *>(this) = ex;
+ return *this;
+ }
+
+ virtual ErrorCode code() const throw() {
+ return T;
+ }
+};
+
+typedef Error<PARAM_ERROR> ParamError;
+typedef Error<IO_ERROR> IOError;
+typedef Error<FORMAT_ERROR> FormatError;
+typedef Error<MEMORY_ERROR> MemoryError;
+typedef Error<SIZE_ERROR> SizeError;
+typedef Error<UNEXPECTED_ERROR> UnexpectedError;
+typedef Error<STATUS_ERROR> StatusError;
+
+#define GRN_DAT_INT_TO_STR(value) #value
+#define GRN_DAT_LINE_TO_STR(line) GRN_DAT_INT_TO_STR(line)
+#define GRN_DAT_LINE_STR GRN_DAT_LINE_TO_STR(__LINE__)
+
+#define GRN_DAT_THROW(code, msg)\
+ (throw grn::dat::Error<code>(__FILE__, __LINE__,\
+ __FILE__ ":" GRN_DAT_LINE_STR ": " #code ": " msg))
+#define GRN_DAT_THROW_IF(code, cond)\
+ (void)((!(cond)) || (GRN_DAT_THROW(code, #cond), 0))
+
+#ifdef _DEBUG
+ #define GRN_DAT_DEBUG_THROW_IF(cond)\
+ GRN_DAT_THROW_IF(grn::dat::UNEXPECTED_ERROR, cond)
+ #define GRN_DAT_DEBUG_LOG(var)\
+ (std::clog << __FILE__ ":" GRN_DAT_LINE_STR ": " #var ": "\
+ << (var) << std::endl)
+#else // _DEBUG
+ #define GRN_DAT_DEBUG_THROW_IF(cond)
+ #define GRN_DAT_DEBUG_LOG(var)
+#endif // _DEBUG
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_COMMON_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/entry.hpp b/storage/mroonga/vendor/groonga/lib/dat/entry.hpp
new file mode 100644
index 00000000000..0c0b3ad41ad
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/entry.hpp
@@ -0,0 +1,61 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_ENTRY_HPP_
+#define GRN_DAT_ENTRY_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+// The most significant bit represents whether or not the entry is valid.
+// A valid entry stores the position of its associated key and an invalid entry
+// stores the index of the next invalid entry.
+class GRN_DAT_API Entry {
+ public:
+ Entry() : value_(0) {}
+
+ bool is_valid() const {
+ return (value_ & IS_VALID_FLAG) == IS_VALID_FLAG;
+ }
+ UInt32 key_pos() const {
+ GRN_DAT_DEBUG_THROW_IF(!is_valid());
+ return value_ & ~IS_VALID_FLAG;
+ }
+ UInt32 next() const {
+ GRN_DAT_DEBUG_THROW_IF(is_valid());
+ return value_;
+ }
+
+ void set_key_pos(UInt32 x) {
+ value_ = IS_VALID_FLAG | x;
+ }
+ void set_next(UInt32 x) {
+ value_ = x;
+ }
+
+ private:
+ UInt32 value_;
+
+ static const UInt32 IS_VALID_FLAG = 0x80000000U;
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_ENTRY_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/file-impl.cpp b/storage/mroonga/vendor/groonga/lib/dat/file-impl.cpp
new file mode 100644
index 00000000000..6382ae965a9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/file-impl.cpp
@@ -0,0 +1,244 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "file-impl.hpp"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+# ifdef min
+# undef min
+# endif // min
+# ifdef max
+# undef max
+# endif // max
+#else // WIN32
+# include <fcntl.h>
+# include <sys/mman.h>
+# include <unistd.h>
+#endif // WIN32
+
+#include <algorithm>
+#include <limits>
+
+namespace grn {
+namespace dat {
+
+#ifdef WIN32
+
+FileImpl::FileImpl()
+ : ptr_(NULL),
+ size_(0),
+ file_(INVALID_HANDLE_VALUE),
+ map_(INVALID_HANDLE_VALUE),
+ addr_(NULL) {}
+
+FileImpl::~FileImpl() {
+ if (addr_ != NULL) {
+ ::UnmapViewOfFile(addr_);
+ }
+
+ if (map_ != INVALID_HANDLE_VALUE) {
+ ::CloseHandle(map_);
+ }
+
+ if (file_ != INVALID_HANDLE_VALUE) {
+ ::CloseHandle(file_);
+ }
+}
+
+#else // WIN32
+
+FileImpl::FileImpl()
+ : ptr_(NULL),
+ size_(0),
+ fd_(-1),
+ addr_(MAP_FAILED),
+ length_(0) {}
+
+FileImpl::~FileImpl() {
+ if (addr_ != MAP_FAILED) {
+ ::munmap(addr_, length_);
+ }
+
+ if (fd_ != -1) {
+ ::close(fd_);
+ }
+}
+
+#endif // WIN32
+
+void FileImpl::create(const char *path, UInt64 size) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, size == 0);
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ size > static_cast<UInt64>(std::numeric_limits< ::size_t>::max()));
+
+ FileImpl new_impl;
+ new_impl.create_(path, size);
+ new_impl.swap(this);
+}
+
+void FileImpl::open(const char *path) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, path == NULL);
+ GRN_DAT_THROW_IF(PARAM_ERROR, path[0] == '\0');
+
+ FileImpl new_impl;
+ new_impl.open_(path);
+ new_impl.swap(this);
+}
+
+void FileImpl::close() {
+ FileImpl new_impl;
+ new_impl.swap(this);
+}
+
+#ifdef WIN32
+
+void FileImpl::swap(FileImpl *rhs) {
+ std::swap(ptr_, rhs->ptr_);
+ std::swap(size_, rhs->size_);
+ std::swap(file_, rhs->file_);
+ std::swap(map_, rhs->map_);
+ std::swap(addr_, rhs->addr_);
+}
+
+void FileImpl::create_(const char *path, UInt64 size) {
+ if ((path != NULL) && (path[0] != '\0')) {
+ file_ = ::CreateFileA(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ GRN_DAT_THROW_IF(IO_ERROR, file_ == INVALID_HANDLE_VALUE);
+
+ const LONG size_low = static_cast<LONG>(size & 0xFFFFFFFFU);
+ LONG size_high = static_cast<LONG>(size >> 32);
+ const DWORD file_pos = ::SetFilePointer(file_, size_low, &size_high,
+ FILE_BEGIN);
+ GRN_DAT_THROW_IF(IO_ERROR, (file_pos == INVALID_SET_FILE_POINTER) &&
+ (::GetLastError() != 0));
+ GRN_DAT_THROW_IF(IO_ERROR, ::SetEndOfFile(file_) == 0);
+
+ map_ = ::CreateFileMapping(file_, NULL, PAGE_READWRITE, 0, 0, NULL);
+ GRN_DAT_THROW_IF(IO_ERROR, map_ == INVALID_HANDLE_VALUE);
+ } else {
+ const DWORD size_low = static_cast<DWORD>(size & 0xFFFFFFFFU);
+ const DWORD size_high = static_cast<DWORD>(size >> 32);
+
+ map_ = ::CreateFileMapping(file_, NULL, PAGE_READWRITE,
+ size_high, size_low, NULL);
+ GRN_DAT_THROW_IF(IO_ERROR, map_ == INVALID_HANDLE_VALUE);
+ }
+
+ addr_ = ::MapViewOfFile(map_, FILE_MAP_WRITE, 0, 0, 0);
+ GRN_DAT_THROW_IF(IO_ERROR, addr_ == NULL);
+
+ ptr_ = addr_;
+ size_ = static_cast< ::size_t>(size);
+}
+
+void FileImpl::open_(const char *path) {
+#ifdef _MSC_VER
+ struct __stat64 st;
+ GRN_DAT_THROW_IF(IO_ERROR, ::_stat64(path, &st) == -1);
+#else // _MSC_VER
+ struct _stat st;
+ GRN_DAT_THROW_IF(IO_ERROR, ::_stat(path, &st) == -1);
+#endif // _MSC_VER
+ GRN_DAT_THROW_IF(IO_ERROR, st.st_size == 0);
+ GRN_DAT_THROW_IF(IO_ERROR,
+ static_cast<UInt64>(st.st_size) > std::numeric_limits< ::size_t>::max());
+
+ file_ = ::CreateFileA(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ GRN_DAT_THROW_IF(IO_ERROR, file_ == NULL);
+
+ map_ = ::CreateFileMapping(file_, NULL, PAGE_READWRITE, 0, 0, NULL);
+ GRN_DAT_THROW_IF(IO_ERROR, map_ == NULL);
+
+ addr_ = ::MapViewOfFile(map_, FILE_MAP_WRITE, 0, 0, 0);
+ GRN_DAT_THROW_IF(IO_ERROR, addr_ == NULL);
+
+ ptr_ = addr_;
+ size_ = static_cast< ::size_t>(st.st_size);
+}
+
+#else // WIN32
+
+void FileImpl::swap(FileImpl *rhs) {
+ std::swap(ptr_, rhs->ptr_);
+ std::swap(size_, rhs->size_);
+ std::swap(fd_, rhs->fd_);
+ std::swap(addr_, rhs->addr_);
+ std::swap(length_, rhs->length_);
+}
+
+void FileImpl::create_(const char *path, UInt64 size) {
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ size > static_cast<UInt64>(std::numeric_limits< ::off_t>::max()));
+
+ if ((path != NULL) && (path[0] != '\0')) {
+ fd_ = ::open(path, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ GRN_DAT_THROW_IF(IO_ERROR, fd_ == -1);
+
+ const ::off_t file_size = static_cast< ::off_t>(size);
+ GRN_DAT_THROW_IF(IO_ERROR, ::ftruncate(fd_, file_size) == -1);
+ }
+
+#ifdef MAP_ANONYMOUS
+ const int flags = (fd_ == -1) ? (MAP_PRIVATE | MAP_ANONYMOUS) : MAP_SHARED;
+#else // MAP_ANONYMOUS
+ const int flags = (fd_ == -1) ? (MAP_PRIVATE | MAP_ANON) : MAP_SHARED;
+#endif // MAP_ANONYMOUS
+
+ length_ = static_cast< ::size_t>(size);
+#ifdef USE_MAP_HUGETLB
+ addr_ = ::mmap(NULL, length_, PROT_READ | PROT_WRITE,
+ flags | MAP_HUGETLB, fd_, 0);
+#endif // USE_MAP_HUGETLB
+ if (addr_ == MAP_FAILED) {
+ addr_ = ::mmap(NULL, length_, PROT_READ | PROT_WRITE, flags, fd_, 0);
+ GRN_DAT_THROW_IF(IO_ERROR, addr_ == MAP_FAILED);
+ }
+
+ ptr_ = addr_;
+ size_ = length_;
+}
+
+void FileImpl::open_(const char *path) {
+ struct stat st;
+ GRN_DAT_THROW_IF(IO_ERROR, ::stat(path, &st) == -1);
+ GRN_DAT_THROW_IF(IO_ERROR, (st.st_mode & S_IFMT) != S_IFREG);
+ GRN_DAT_THROW_IF(IO_ERROR, st.st_size == 0);
+ GRN_DAT_THROW_IF(IO_ERROR,
+ static_cast<UInt64>(st.st_size) > std::numeric_limits< ::size_t>::max());
+
+ fd_ = ::open(path, O_RDWR);
+ GRN_DAT_THROW_IF(IO_ERROR, fd_ == -1);
+
+ length_ = static_cast<std::size_t>(st.st_size);
+ addr_ = ::mmap(NULL, length_, PROT_READ | PROT_WRITE, MAP_SHARED, fd_, 0);
+ GRN_DAT_THROW_IF(IO_ERROR, addr_ == MAP_FAILED);
+
+ ptr_ = addr_;
+ size_ = length_;
+}
+
+#endif // WIN32
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/file-impl.hpp b/storage/mroonga/vendor/groonga/lib/dat/file-impl.hpp
new file mode 100644
index 00000000000..f4e0543635a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/file-impl.hpp
@@ -0,0 +1,73 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_FILE_IMPL_HPP_
+#define GRN_DAT_FILE_IMPL_HPP_
+
+#ifdef WIN32
+# include <windows.h>
+#endif // WIN32
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+class FileImpl {
+ public:
+ FileImpl();
+ ~FileImpl();
+
+ void create(const char *path, UInt64 size);
+ void open(const char *path);
+ void close();
+
+ void *ptr() const {
+ return ptr_;
+ }
+ UInt64 size() const {
+ return size_;
+ }
+
+ void swap(FileImpl *rhs);
+
+ private:
+ void *ptr_;
+ UInt64 size_;
+
+#ifdef WIN32
+ HANDLE file_;
+ HANDLE map_;
+ LPVOID addr_;
+#else // WIN32
+ int fd_;
+ void *addr_;
+ ::size_t length_;
+#endif // WIN32
+
+ void create_(const char *path, UInt64 size);
+ void open_(const char *path);
+
+ // Disallows copy and assignment.
+ FileImpl(const FileImpl &);
+ FileImpl &operator=(const FileImpl &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_FILE_IMPL_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/file.cpp b/storage/mroonga/vendor/groonga/lib/dat/file.cpp
new file mode 100644
index 00000000000..57bfcb9ece6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/file.cpp
@@ -0,0 +1,67 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "file.hpp"
+#include "file-impl.hpp"
+
+#include <new>
+
+namespace grn {
+namespace dat {
+
+File::File() : impl_(NULL) {}
+
+File::~File() {
+ delete impl_;
+}
+
+void File::create(const char *path, UInt64 size) {
+ File new_file;
+ new_file.impl_ = new (std::nothrow) FileImpl;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, new_file.impl_ == NULL);
+ new_file.impl_->create(path, size);
+ new_file.swap(this);
+}
+
+void File::open(const char *path) {
+ File new_file;
+ new_file.impl_ = new (std::nothrow) FileImpl;
+ GRN_DAT_THROW_IF(MEMORY_ERROR, new_file.impl_ == NULL);
+ new_file.impl_->open(path);
+ new_file.swap(this);
+}
+
+void File::close() {
+ File().swap(this);
+}
+
+void *File::ptr() const {
+ return (impl_ != NULL) ? impl_->ptr() : NULL;
+}
+
+UInt64 File::size() const {
+ return (impl_ != NULL) ? impl_->size() : 0;
+}
+
+void File::swap(File *rhs) {
+ FileImpl * const temp = impl_;
+ impl_ = rhs->impl_;
+ rhs->impl_ = temp;
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/file.hpp b/storage/mroonga/vendor/groonga/lib/dat/file.hpp
new file mode 100644
index 00000000000..c2be8d86da3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/file.hpp
@@ -0,0 +1,60 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_FILE_HPP_
+#define GRN_DAT_FILE_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+// This implementation class hides environment dependent codes required for
+// memory-mapped I/O.
+class FileImpl;
+
+class GRN_DAT_API File {
+ public:
+ File();
+ ~File();
+
+ // This function creates a file and maps the entire file to a certain range
+ // of the address space. Note that a file is truncated if exists.
+ void create(const char *path, UInt64 size);
+
+ // This function opens a file and maps the entire file to a certain range of
+ // the address space.
+ void open(const char *path);
+ void close();
+
+ void *ptr() const;
+ UInt64 size() const;
+
+ void swap(File *rhs);
+
+ private:
+ FileImpl *impl_;
+
+ // Disallows copy and assignment.
+ File(const File &);
+ File &operator=(const File &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_FILE_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/header.hpp b/storage/mroonga/vendor/groonga/lib/dat/header.hpp
new file mode 100644
index 00000000000..4f383ac8bf9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/header.hpp
@@ -0,0 +1,181 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_HPP_HEADER_HPP_
+#define GRN_DAT_HPP_HEADER_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Header {
+ public:
+ Header()
+ : file_size_(0),
+ total_key_length_(0),
+ next_key_id_(grn::dat::MIN_KEY_ID),
+ max_key_id_(0),
+ num_keys_(0),
+ max_num_keys_(0),
+ num_phantoms_(0),
+ num_zombies_(0),
+ num_blocks_(0),
+ max_num_blocks_(0),
+ next_key_pos_(0),
+ key_buf_size_(0),
+ status_flags_(0) {
+ for (UInt32 i = 0; i <= MAX_BLOCK_LEVEL; ++i) {
+ leaders_[i] = INVALID_LEADER;
+ }
+ for (UInt32 i = 0; i < (sizeof(reserved_) / sizeof(*reserved_)); ++i) {
+ reserved_[i] = 0;
+ }
+ }
+
+ UInt64 file_size() const {
+ return file_size_;
+ }
+ UInt32 total_key_length() const {
+ return total_key_length_;
+ }
+ UInt32 min_key_id() const {
+ return MIN_KEY_ID;
+ }
+ UInt32 next_key_id() const {
+ return next_key_id_;
+ }
+ UInt32 max_key_id() const {
+ return max_key_id_;
+ }
+ UInt32 num_keys() const {
+ return num_keys_;
+ }
+ UInt32 max_num_keys() const {
+ return max_num_keys_;
+ }
+ UInt32 num_nodes() const {
+ return num_blocks() * BLOCK_SIZE;
+ }
+ UInt32 num_phantoms() const {
+ return num_phantoms_;
+ }
+ UInt32 num_zombies() const {
+ return num_zombies_;
+ }
+ UInt32 max_num_nodes() const {
+ return max_num_blocks() * BLOCK_SIZE;
+ }
+ UInt32 num_blocks() const {
+ return num_blocks_;
+ }
+ UInt32 max_num_blocks() const {
+ return max_num_blocks_;
+ }
+ UInt32 next_key_pos() const {
+ return next_key_pos_;
+ }
+ UInt32 key_buf_size() const {
+ return key_buf_size_;
+ }
+ UInt32 status_flags() const {
+ return status_flags_;
+ }
+ UInt32 ith_leader(UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i > MAX_BLOCK_LEVEL);
+ return leaders_[i];
+ }
+
+ void set_file_size(UInt64 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_FILE_SIZE);
+ file_size_ = x;
+ }
+ void set_total_key_length(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_TOTAL_KEY_LENGTH);
+ total_key_length_ = x;
+ }
+ void set_next_key_id(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF((x - 1) > MAX_KEY_ID);
+ next_key_id_ = x;
+ }
+ void set_max_key_id(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_KEY_ID);
+ max_key_id_ = x;
+ }
+ void set_num_keys(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_NUM_KEYS);
+ num_keys_ = x;
+ }
+ void set_max_num_keys(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_NUM_KEYS);
+ max_num_keys_ = x;
+ }
+ void set_num_phantoms(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > max_num_nodes());
+ num_phantoms_ = x;
+ }
+ void set_num_zombies(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > max_num_nodes());
+ num_zombies_ = x;
+ }
+ void set_num_blocks(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > max_num_blocks());
+ num_blocks_ = x;
+ }
+ void set_max_num_blocks(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_NUM_BLOCKS);
+ max_num_blocks_ = x;
+ }
+ void set_next_key_pos(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > key_buf_size());
+ next_key_pos_ = x;
+ }
+ void set_key_buf_size(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(x > MAX_KEY_BUF_SIZE);
+ key_buf_size_ = x;
+ }
+ void set_status_flags(UInt32 x) {
+ status_flags_ = x;
+ }
+ void set_ith_leader(UInt32 i, UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(i > MAX_BLOCK_LEVEL);
+ GRN_DAT_DEBUG_THROW_IF((x != INVALID_LEADER) && (x >= num_blocks()));
+ leaders_[i] = x;
+ }
+
+ private:
+ UInt64 file_size_;
+ UInt32 total_key_length_;
+ UInt32 next_key_id_;
+ UInt32 max_key_id_;
+ UInt32 num_keys_;
+ UInt32 max_num_keys_;
+ UInt32 num_phantoms_;
+ UInt32 num_zombies_;
+ UInt32 num_blocks_;
+ UInt32 max_num_blocks_;
+ UInt32 next_key_pos_;
+ UInt32 key_buf_size_;
+ UInt32 leaders_[MAX_BLOCK_LEVEL + 1];
+ UInt32 status_flags_;
+ UInt32 reserved_[12];
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_HPP_HEADER_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp
new file mode 100644
index 00000000000..784175f37ab
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp
@@ -0,0 +1,184 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "id-cursor.hpp"
+
+#include <algorithm>
+
+#include "trie.hpp"
+
+namespace grn {
+namespace dat {
+
+IdCursor::IdCursor()
+ : trie_(NULL),
+ offset_(0),
+ limit_(MAX_UINT32),
+ flags_(ID_RANGE_CURSOR),
+ cur_(INVALID_KEY_ID),
+ end_(INVALID_KEY_ID),
+ count_(0) {}
+
+IdCursor::~IdCursor() {}
+
+void IdCursor::open(const Trie &trie,
+ const String &min_str,
+ const String &max_str,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ UInt32 min_id = INVALID_KEY_ID;
+ if (min_str.ptr() != NULL) {
+ UInt32 key_pos;
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ !trie.search(min_str.ptr(), min_str.length(), &key_pos));
+ min_id = trie.get_key(key_pos).id();
+ }
+
+ UInt32 max_id = INVALID_KEY_ID;
+ if (max_str.ptr() != NULL) {
+ UInt32 key_pos;
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ !trie.search(max_str.ptr(), max_str.length(), &key_pos));
+ max_id = trie.get_key(key_pos).id();
+ }
+
+ open(trie, min_id, max_id, offset, limit, flags);
+}
+
+void IdCursor::open(const Trie &trie,
+ UInt32 min_id,
+ UInt32 max_id,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ flags = fix_flags(flags);
+
+ IdCursor new_cursor(trie, offset, limit, flags);
+ new_cursor.init(min_id, max_id);
+ new_cursor.swap(this);
+}
+
+void IdCursor::close() {
+ IdCursor new_cursor;
+ new_cursor.swap(this);
+}
+
+const Key &IdCursor::next() {
+ if (count_ >= limit_) {
+ return Key::invalid_key();
+ }
+ while (cur_ != end_) {
+ const Key &key = trie_->ith_key(cur_);
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ ++cur_;
+ } else {
+ --cur_;
+ }
+ if (key.is_valid()) {
+ ++count_;
+ return key;
+ }
+ }
+ return Key::invalid_key();
+}
+
+IdCursor::IdCursor(const Trie &trie,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags)
+ : trie_(&trie),
+ offset_(offset),
+ limit_(limit),
+ flags_(flags),
+ cur_(INVALID_KEY_ID),
+ end_(INVALID_KEY_ID),
+ count_(0) {}
+
+UInt32 IdCursor::fix_flags(UInt32 flags) const {
+ const UInt32 cursor_type = flags & CURSOR_TYPE_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_type != 0) &&
+ (cursor_type != ID_RANGE_CURSOR));
+ flags |= ID_RANGE_CURSOR;
+
+ const UInt32 cursor_order = flags & CURSOR_ORDER_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_order != 0) &&
+ (cursor_order != ASCENDING_CURSOR) &&
+ (cursor_order != DESCENDING_CURSOR));
+ if (cursor_order == 0) {
+ flags |= ASCENDING_CURSOR;
+ }
+
+ const UInt32 cursor_options = flags & CURSOR_OPTIONS_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ cursor_options & ~(EXCEPT_LOWER_BOUND | EXCEPT_UPPER_BOUND));
+
+ return flags;
+}
+
+void IdCursor::init(UInt32 min_id, UInt32 max_id) {
+ if (min_id == INVALID_KEY_ID) {
+ min_id = trie_->min_key_id();
+ } else if ((flags_ & EXCEPT_LOWER_BOUND) == EXCEPT_LOWER_BOUND) {
+ ++min_id;
+ }
+
+ if (max_id == INVALID_KEY_ID) {
+ max_id = trie_->max_key_id();
+ } else if ((flags_ & EXCEPT_UPPER_BOUND) == EXCEPT_UPPER_BOUND) {
+ --max_id;
+ }
+
+ if ((max_id < min_id) || ((max_id - min_id) < offset_)) {
+ return;
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ cur_ = min_id;
+ end_ = max_id + 1;
+ for (UInt32 i = 0; (i < offset_) && (cur_ != end_); ++i) {
+ while (cur_ != end_) {
+ if (trie_->ith_key(cur_++).is_valid()) {
+ break;
+ }
+ }
+ }
+ } else {
+ cur_ = max_id;
+ end_ = min_id - 1;
+ for (UInt32 i = 0; (i < offset_) && (cur_ != end_); ++i) {
+ while (cur_ != end_) {
+ if (trie_->ith_key(cur_--).is_valid()) {
+ break;
+ }
+ }
+ }
+ }
+}
+
+void IdCursor::swap(IdCursor *cursor) {
+ std::swap(trie_, cursor->trie_);
+ std::swap(offset_, cursor->offset_);
+ std::swap(limit_, cursor->limit_);
+ std::swap(flags_, cursor->flags_);
+ std::swap(cur_, cursor->cur_);
+ std::swap(end_, cursor->end_);
+ std::swap(count_, cursor->count_);
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/id-cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.hpp
new file mode 100644
index 00000000000..aabd734e92e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.hpp
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_ID_CURSOR_HPP_
+#define GRN_DAT_ID_CURSOR_HPP_
+
+#include "cursor.hpp"
+
+namespace grn {
+namespace dat {
+
+class Trie;
+
+class GRN_DAT_API IdCursor : public Cursor {
+ public:
+ IdCursor();
+ ~IdCursor();
+
+ void open(const Trie &trie,
+ const String &min_str,
+ const String &max_str,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ void open(const Trie &trie,
+ UInt32 min_id,
+ UInt32 max_id,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ void close();
+
+ const Key &next();
+
+ UInt32 offset() const {
+ return offset_;
+ }
+ UInt32 limit() const {
+ return limit_;
+ }
+ UInt32 flags() const {
+ return flags_;
+ }
+
+ private:
+ const Trie *trie_;
+ UInt32 offset_;
+ UInt32 limit_;
+ UInt32 flags_;
+
+ UInt32 cur_;
+ UInt32 end_;
+ UInt32 count_;
+
+ IdCursor(const Trie &trie, UInt32 offset, UInt32 limit, UInt32 flags);
+
+ UInt32 fix_flags(UInt32 flags) const;
+ void init(UInt32 min_id, UInt32 max_id);
+ void swap(IdCursor *cursor);
+
+ // Disallows copy and assignment.
+ IdCursor(const IdCursor &);
+ IdCursor &operator=(const IdCursor &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_ID_CURSOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/key-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/key-cursor.cpp
new file mode 100644
index 00000000000..90ba25eca53
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/key-cursor.cpp
@@ -0,0 +1,349 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "key-cursor.hpp"
+
+#include <algorithm>
+#include <cstring>
+
+#include "trie.hpp"
+
+namespace grn {
+namespace dat {
+
+KeyCursor::KeyCursor()
+ : trie_(NULL),
+ offset_(0),
+ limit_(MAX_UINT32),
+ flags_(KEY_RANGE_CURSOR),
+ buf_(),
+ count_(0),
+ max_count_(0),
+ finished_(false),
+ end_buf_(NULL),
+ end_str_() {}
+
+KeyCursor::~KeyCursor() {
+ if (end_buf_ != NULL) {
+ delete [] end_buf_;
+ }
+}
+
+void KeyCursor::open(const Trie &trie,
+ const String &min_str,
+ const String &max_str,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ (min_str.ptr() == NULL) && (min_str.length() != 0));
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ (max_str.ptr() == NULL) && (max_str.length() != 0));
+
+ flags = fix_flags(flags);
+ KeyCursor new_cursor(trie, offset, limit, flags);
+ new_cursor.init(min_str, max_str);
+ new_cursor.swap(this);
+}
+
+void KeyCursor::close() {
+ KeyCursor new_cursor;
+ new_cursor.swap(this);
+}
+
+const Key &KeyCursor::next() {
+ if (finished_ || (count_ >= max_count_)) {
+ return Key::invalid_key();
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ return ascending_next();
+ } else {
+ return descending_next();
+ }
+}
+
+KeyCursor::KeyCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags)
+ : trie_(&trie),
+ offset_(offset),
+ limit_(limit),
+ flags_(flags),
+ buf_(),
+ count_(0),
+ max_count_(0),
+ finished_(false),
+ end_buf_(NULL),
+ end_str_() {}
+
+UInt32 KeyCursor::fix_flags(UInt32 flags) const {
+ const UInt32 cursor_type = flags & CURSOR_TYPE_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_type != 0) &&
+ (cursor_type != KEY_RANGE_CURSOR));
+ flags |= KEY_RANGE_CURSOR;
+
+ const UInt32 cursor_order = flags & CURSOR_ORDER_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_order != 0) &&
+ (cursor_order != ASCENDING_CURSOR) &&
+ (cursor_order != DESCENDING_CURSOR));
+ if (cursor_order == 0) {
+ flags |= ASCENDING_CURSOR;
+ }
+
+ const UInt32 cursor_options = flags & CURSOR_OPTIONS_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ cursor_options & ~(EXCEPT_LOWER_BOUND | EXCEPT_UPPER_BOUND));
+
+ return flags;
+}
+
+void KeyCursor::init(const String &min_str, const String &max_str) {
+ if (offset_ > (MAX_UINT32 - limit_)) {
+ max_count_ = MAX_UINT32;
+ } else {
+ max_count_ = offset_ + limit_;
+ }
+
+ if (limit_ == 0) {
+ return;
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ ascending_init(min_str, max_str);
+ } else {
+ descending_init(min_str, max_str);
+ }
+}
+
+void KeyCursor::ascending_init(const String &min_str, const String &max_str) {
+ if (max_str.ptr() != NULL) {
+ if (max_str.length() != 0) {
+ end_buf_ = new UInt8[max_str.length()];
+ std::memcpy(end_buf_, max_str.ptr(), max_str.length());
+ end_str_.assign(end_buf_, max_str.length());
+ }
+ }
+
+ if ((min_str.ptr() == NULL) || (min_str.length() == 0)) {
+ buf_.push_back(ROOT_NODE_ID);
+ return;
+ }
+
+ UInt32 node_id = ROOT_NODE_ID;
+ Node node;
+ for (UInt32 i = 0; i < min_str.length(); ++i) {
+ node = trie_->ith_node(node_id);
+ if (node.is_linker()) {
+ const Key &key = trie_->get_key(node.key_pos());
+ const int result = key.str().compare(min_str, i);
+ if ((result > 0) || ((result == 0) &&
+ ((flags_ & EXCEPT_LOWER_BOUND) != EXCEPT_LOWER_BOUND))) {
+ buf_.push_back(node_id);
+ } else if (node.sibling() != INVALID_LABEL) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+ return;
+ } else if (node.sibling() != INVALID_LABEL) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+
+ node_id = node.offset() ^ min_str[i];
+ if (trie_->ith_node(node_id).label() != min_str[i]) {
+ UInt16 label = node.child();
+ if (label == TERMINAL_LABEL) {
+ label = trie_->ith_node(node.offset() ^ label).sibling();
+ }
+ while (label != INVALID_LABEL) {
+ if (label > min_str[i]) {
+ buf_.push_back(node.offset() ^ label);
+ break;
+ }
+ label = trie_->ith_node(node.offset() ^ label).sibling();
+ }
+ return;
+ }
+ }
+
+ node = trie_->ith_node(node_id);
+ if (node.is_linker()) {
+ const Key &key = trie_->get_key(node.key_pos());
+ if ((key.length() != min_str.length()) ||
+ ((flags_ & EXCEPT_LOWER_BOUND) != EXCEPT_LOWER_BOUND)) {
+ buf_.push_back(node_id);
+ } else if (node.sibling() != INVALID_LABEL) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+ return;
+ } else if (node.sibling() != INVALID_LABEL) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+
+ UInt16 label = node.child();
+ if ((label == TERMINAL_LABEL) &&
+ ((flags_ & EXCEPT_LOWER_BOUND) == EXCEPT_LOWER_BOUND)) {
+ label = trie_->ith_node(node.offset() ^ label).sibling();
+ }
+ if (label != INVALID_LABEL) {
+ buf_.push_back(node.offset() ^ label);
+ }
+}
+
+void KeyCursor::descending_init(const String &min_str, const String &max_str) {
+ if (min_str.ptr() != NULL) {
+ if (min_str.length() != 0) {
+ end_buf_ = new UInt8[min_str.length()];
+ std::memcpy(end_buf_, min_str.ptr(), min_str.length());
+ end_str_.assign(end_buf_, min_str.length());
+ }
+ }
+
+ if ((max_str.ptr() == NULL) || (max_str.length() == 0)) {
+ buf_.push_back(ROOT_NODE_ID);
+ return;
+ }
+
+ UInt32 node_id = ROOT_NODE_ID;
+ for (UInt32 i = 0; i < max_str.length(); ++i) {
+ const Base base = trie_->ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ const int result = key.str().compare(max_str, i);
+ if ((result < 0) || ((result == 0) &&
+ ((flags_ & EXCEPT_UPPER_BOUND) != EXCEPT_UPPER_BOUND))) {
+ buf_.push_back(node_id | POST_ORDER_FLAG);
+ }
+ return;
+ }
+
+ UInt32 label = trie_->ith_node(node_id).child();
+ if (label == TERMINAL_LABEL) {
+ node_id = base.offset() ^ label;
+ buf_.push_back(node_id | POST_ORDER_FLAG);
+ label = trie_->ith_node(node_id).sibling();
+ }
+ while (label != INVALID_LABEL) {
+ node_id = base.offset() ^ label;
+ if (label < max_str[i]) {
+ buf_.push_back(node_id);
+ } else if (label > max_str[i]) {
+ return;
+ } else {
+ break;
+ }
+ label = trie_->ith_node(node_id).sibling();
+ }
+ if (label == INVALID_LABEL) {
+ return;
+ }
+ }
+
+ const Base base = trie_->ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if ((key.length() == max_str.length()) &&
+ ((flags_ & EXCEPT_UPPER_BOUND) != EXCEPT_UPPER_BOUND)) {
+ buf_.push_back(node_id | POST_ORDER_FLAG);
+ }
+ return;
+ }
+
+ UInt16 label = trie_->ith_node(node_id).child();
+ if ((label == TERMINAL_LABEL) &&
+ ((flags_ & EXCEPT_UPPER_BOUND) != EXCEPT_UPPER_BOUND)) {
+ buf_.push_back((base.offset() ^ label) | POST_ORDER_FLAG);
+ }
+}
+
+void KeyCursor::swap(KeyCursor *cursor) {
+ std::swap(trie_, cursor->trie_);
+ std::swap(offset_, cursor->offset_);
+ std::swap(limit_, cursor->limit_);
+ std::swap(flags_, cursor->flags_);
+ buf_.swap(&cursor->buf_);
+ std::swap(count_, cursor->count_);
+ std::swap(max_count_, cursor->max_count_);
+ std::swap(finished_, cursor->finished_);
+ std::swap(end_buf_, cursor->end_buf_);
+ end_str_.swap(&cursor->end_str_);
+}
+
+const Key &KeyCursor::ascending_next() {
+ while (!buf_.empty()) {
+ const UInt32 node_id = buf_.back();
+ buf_.pop_back();
+
+ const Node node = trie_->ith_node(node_id);
+ if (node.sibling() != INVALID_LABEL) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+
+ if (node.is_linker()) {
+ const Key &key = trie_->get_key(node.key_pos());
+ if (end_buf_ != NULL) {
+ const int result = key.str().compare(end_str_);
+ if ((result > 0) || ((result == 0) &&
+ ((flags_ & EXCEPT_UPPER_BOUND) == EXCEPT_UPPER_BOUND))) {
+ finished_ = true;
+ return Key::invalid_key();
+ }
+ }
+ if (count_++ >= offset_) {
+ return key;
+ }
+ } else if (node.child() != INVALID_LABEL) {
+ buf_.push_back(node.offset() ^ node.child());
+ }
+ }
+ return Key::invalid_key();
+}
+
+const Key &KeyCursor::descending_next() {
+ while (!buf_.empty()) {
+ const bool post_order = (buf_.back() & POST_ORDER_FLAG) == POST_ORDER_FLAG;
+ const UInt32 node_id = buf_.back() & ~POST_ORDER_FLAG;
+
+ const Base base = trie_->ith_node(node_id).base();
+ if (post_order) {
+ buf_.pop_back();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if (end_buf_ != NULL) {
+ const int result = key.str().compare(end_str_);
+ if ((result < 0) || ((result == 0) &&
+ ((flags_ & EXCEPT_LOWER_BOUND) == EXCEPT_LOWER_BOUND))) {
+ finished_ = true;
+ return Key::invalid_key();
+ }
+ }
+ if (count_++ >= offset_) {
+ return key;
+ }
+ }
+ } else {
+ buf_.back() |= POST_ORDER_FLAG;
+ UInt16 label = trie_->ith_node(node_id).child();
+ while (label != INVALID_LABEL) {
+ buf_.push_back(base.offset() ^ label);
+ label = trie_->ith_node(base.offset() ^ label).sibling();
+ }
+ }
+ }
+ return Key::invalid_key();
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/key-cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/key-cursor.hpp
new file mode 100644
index 00000000000..adce41c3123
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/key-cursor.hpp
@@ -0,0 +1,90 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_KEY_CURSOR_HPP_
+#define GRN_DAT_KEY_CURSOR_HPP_
+
+#include "cursor.hpp"
+#include "vector.hpp"
+
+namespace grn {
+namespace dat {
+
+class Trie;
+
+class GRN_DAT_API KeyCursor : public Cursor {
+ public:
+ KeyCursor();
+ ~KeyCursor();
+
+ void open(const Trie &trie,
+ const String &min_str,
+ const String &max_str,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ void close();
+
+ const Key &next();
+
+ UInt32 offset() const {
+ return offset_;
+ }
+ UInt32 limit() const {
+ return limit_;
+ }
+ UInt32 flags() const {
+ return flags_;
+ }
+
+ private:
+ const Trie *trie_;
+ UInt32 offset_;
+ UInt32 limit_;
+ UInt32 flags_;
+
+ Vector<UInt32> buf_;
+ UInt32 count_;
+ UInt32 max_count_;
+ bool finished_;
+ UInt8 *end_buf_;
+ String end_str_;
+
+ KeyCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags);
+
+ UInt32 fix_flags(UInt32 flags) const;
+ void init(const String &min_str, const String &max_str);
+ void ascending_init(const String &min_str, const String &max_str);
+ void descending_init(const String &min_str, const String &max_str);
+ void swap(KeyCursor *cursor);
+
+ const Key &ascending_next();
+ const Key &descending_next();
+
+ static const UInt32 POST_ORDER_FLAG = 0x80000000U;
+
+ // Disallows copy and assignment.
+ KeyCursor(const KeyCursor &);
+ KeyCursor &operator=(const KeyCursor &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_KEY_CURSOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/key.hpp b/storage/mroonga/vendor/groonga/lib/dat/key.hpp
new file mode 100644
index 00000000000..21ae474cf44
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/key.hpp
@@ -0,0 +1,112 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_KEY_HPP_
+#define GRN_DAT_KEY_HPP_
+
+#include "string.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Key {
+ public:
+ const UInt8 &operator[](UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= length());
+ return buf_[i];
+ }
+
+ bool is_valid() const {
+ return id() != INVALID_KEY_ID;
+ }
+
+ String str() const {
+ return String(ptr(), length());
+ }
+
+ const void *ptr() const {
+ return buf_;
+ }
+ UInt32 length() const {
+ return (length_high_ << 4) | (id_and_length_low_ & 0x0F);
+ }
+ UInt32 id() const {
+ return id_and_length_low_ >> 4;
+ }
+
+ bool equals_to(const void *ptr, UInt32 length, UInt32 offset = 0) const {
+ if (length != this->length()) {
+ return false;
+ }
+ for ( ; offset < length; ++offset) {
+ if ((*this)[offset] != static_cast<const UInt8 *>(ptr)[offset]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ // Creates an object of Key from given parameters. Then, the created object
+ // is embedded into a specified buffer.
+ static const Key &create(UInt32 *buf, UInt32 key_id,
+ const void *key_ptr, UInt32 key_length) {
+ GRN_DAT_DEBUG_THROW_IF(buf == NULL);
+ GRN_DAT_DEBUG_THROW_IF(key_id > MAX_KEY_ID);
+ GRN_DAT_DEBUG_THROW_IF((key_ptr == NULL) && (key_length != 0));
+ GRN_DAT_DEBUG_THROW_IF(key_length > MAX_KEY_LENGTH);
+
+ *buf = (key_id << 4) | (key_length & 0x0F);
+ UInt8 *ptr = reinterpret_cast<UInt8 *>(buf + 1);
+ *ptr++ = key_length >> 4;
+ for (UInt32 i = 0; i < key_length; ++i) {
+ ptr[i] = static_cast<const UInt8 *>(key_ptr)[i];
+ }
+ return *reinterpret_cast<const Key *>(buf);
+ }
+
+ // Calculates how many UInt32s are required for a string. It is guaranteed
+ // that the estimated size is not less than the actual size.
+ static UInt32 estimate_size(UInt32 length) {
+ return 2 + (length / sizeof(UInt32));
+ }
+
+ // Returns a reference to an invalid key.
+ static const Key &invalid_key() {
+ static const Key invalid_key;
+ return invalid_key;
+// static const UInt32 invalid_key_buf[2] = { INVALID_KEY_ID << 4, 0 };
+// return *reinterpret_cast<const Key *>(invalid_key_buf);
+ }
+
+ private:
+ UInt32 id_and_length_low_;
+ UInt8 length_high_;
+ UInt8 buf_[3];
+
+ // Disallows instantiation.
+ Key() : id_and_length_low_(INVALID_KEY_ID << 4), length_high_(0) {}
+ ~Key() {}
+
+ // Disallows copy and assignment.
+ Key(const Key &);
+ Key &operator=(const Key &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_KEY_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/node.hpp b/storage/mroonga/vendor/groonga/lib/dat/node.hpp
new file mode 100644
index 00000000000..45ae5089b3f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/node.hpp
@@ -0,0 +1,129 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_NODE_HPP_
+#define GRN_DAT_NODE_HPP_
+
+// See base.hpp and check.hpp for details.
+#include "base.hpp"
+#include "check.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Node {
+ public:
+ Node() : base_(), check_() {}
+
+ Base base() const {
+ return base_;
+ }
+ bool is_linker() const {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ return base_.is_linker();
+ }
+ UInt32 offset() const {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ return base_.offset();
+ }
+ UInt32 key_pos() const {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ return base_.key_pos();
+ }
+
+ Check check() const {
+ return check_;
+ }
+ bool is_offset() const {
+ return check_.is_offset();
+ }
+ UInt32 except_is_offset() const {
+ return check_.except_is_offset();
+ }
+ bool is_phantom() const {
+ return check_.is_phantom();
+ }
+ UInt32 next() const {
+ return check_.next();
+ }
+ UInt32 prev() const {
+ return check_.prev();
+ }
+ UInt32 label() const {
+ return check_.label();
+ }
+ UInt32 child() const {
+ return check_.child();
+ }
+ UInt32 sibling() const {
+ return check_.sibling();
+ }
+
+ void set_base(Base x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ base_ = x;
+ }
+ void set_offset(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ base_.set_offset(x);
+ }
+ void set_key_pos(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(is_phantom());
+ base_.set_key_pos(x);
+ }
+
+ void set_check(Check x) {
+ check_ = x;
+ }
+ void set_is_offset(bool x) {
+ check_.set_is_offset(x);
+ }
+ void set_except_is_offset(UInt32 x) {
+ check_.set_except_is_offset(x);
+ }
+ void set_is_phantom(bool x) {
+ GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
+ check_.set_is_phantom(x);
+ }
+ void set_next(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
+ check_.set_next(x);
+ }
+ void set_prev(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(base_.offset() != INVALID_OFFSET);
+ check_.set_prev(x);
+ }
+ void set_label(UInt32 x) {
+ GRN_DAT_DEBUG_THROW_IF(offset() != INVALID_OFFSET);
+ check_.set_label(x);
+ }
+ void set_child(UInt32 x) {
+ check_.set_child(x);
+ }
+ void set_sibling(UInt32 x) {
+ check_.set_sibling(x);
+ }
+
+ private:
+ Base base_;
+ Check check_;
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_NODE_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp
new file mode 100644
index 00000000000..4737d841269
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp
@@ -0,0 +1,206 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "predictive-cursor.hpp"
+
+#include <algorithm>
+#include <cstring>
+
+#include "trie.hpp"
+
+namespace grn {
+namespace dat {
+
+PredictiveCursor::PredictiveCursor()
+ : trie_(NULL),
+ offset_(0),
+ limit_(MAX_UINT32),
+ flags_(PREDICTIVE_CURSOR),
+ buf_(),
+ cur_(0),
+ end_(0),
+ min_length_(0) {}
+
+PredictiveCursor::~PredictiveCursor() {}
+
+void PredictiveCursor::open(const Trie &trie,
+ const String &str,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, (str.ptr() == NULL) && (str.length() != 0));
+
+ flags = fix_flags(flags);
+ PredictiveCursor new_cursor(trie, offset, limit, flags);
+ new_cursor.init(str);
+ new_cursor.swap(this);
+}
+
+void PredictiveCursor::close() {
+ PredictiveCursor new_cursor;
+ new_cursor.swap(this);
+}
+
+const Key &PredictiveCursor::next() {
+ if (cur_ == end_) {
+ return Key::invalid_key();
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ return ascending_next();
+ } else {
+ return descending_next();
+ }
+}
+
+PredictiveCursor::PredictiveCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags)
+ : trie_(&trie),
+ offset_(offset),
+ limit_(limit),
+ flags_(flags),
+ buf_(),
+ cur_(0),
+ end_(0),
+ min_length_(0) {}
+
+UInt32 PredictiveCursor::fix_flags(UInt32 flags) const {
+ const UInt32 cursor_type = flags & CURSOR_TYPE_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_type != 0) &&
+ (cursor_type != PREDICTIVE_CURSOR));
+ flags |= PREDICTIVE_CURSOR;
+
+ const UInt32 cursor_order = flags & CURSOR_ORDER_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_order != 0) &&
+ (cursor_order != ASCENDING_CURSOR) &&
+ (cursor_order != DESCENDING_CURSOR));
+ if (cursor_order == 0) {
+ flags |= ASCENDING_CURSOR;
+ }
+
+ const UInt32 cursor_options = flags & CURSOR_OPTIONS_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, cursor_options & ~(EXCEPT_EXACT_MATCH));
+
+ return flags;
+}
+
+void PredictiveCursor::init(const String &str) {
+ if (limit_ == 0) {
+ return;
+ }
+
+ min_length_ = str.length();
+ if ((flags_ & EXCEPT_EXACT_MATCH) == EXCEPT_EXACT_MATCH) {
+ ++min_length_;
+ }
+ end_ = (offset_ > (MAX_UINT32 - limit_)) ? MAX_UINT32 : (offset_ + limit_);
+
+ UInt32 node_id = ROOT_NODE_ID;
+ for (UInt32 i = 0; i < str.length(); ++i) {
+ const Base base = trie_->ith_node(node_id).base();
+ if (base.is_linker()) {
+ if (offset_ == 0) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if ((key.length() >= str.length()) &&
+ (key.str().substr(0, str.length()).compare(str, i) == 0)) {
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ node_id |= IS_ROOT_FLAG;
+ }
+ buf_.push_back(node_id);
+ }
+ }
+ return;
+ }
+
+ node_id = base.offset() ^ str[i];
+ if (trie_->ith_node(node_id).label() != str[i]) {
+ return;
+ }
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ node_id |= IS_ROOT_FLAG;
+ }
+ buf_.push_back(node_id);
+}
+
+void PredictiveCursor::swap(PredictiveCursor *cursor) {
+ std::swap(trie_, cursor->trie_);
+ std::swap(offset_, cursor->offset_);
+ std::swap(limit_, cursor->limit_);
+ std::swap(flags_, cursor->flags_);
+ buf_.swap(&cursor->buf_);
+ std::swap(cur_, cursor->cur_);
+ std::swap(end_, cursor->end_);
+ std::swap(min_length_, cursor->min_length_);
+}
+
+const Key &PredictiveCursor::ascending_next() {
+ while (!buf_.empty()) {
+ const bool is_root = (buf_.back() & IS_ROOT_FLAG) == IS_ROOT_FLAG;
+ const UInt32 node_id = buf_.back() & ~IS_ROOT_FLAG;
+ buf_.pop_back();
+
+ const Node node = trie_->ith_node(node_id);
+ if (!is_root && (node.sibling() != INVALID_LABEL)) {
+ buf_.push_back(node_id ^ node.label() ^ node.sibling());
+ }
+
+ if (node.is_linker()) {
+ const Key &key = trie_->get_key(node.key_pos());
+ if (key.length() >= min_length_) {
+ if (cur_++ >= offset_) {
+ return key;
+ }
+ }
+ } else if (node.child() != INVALID_LABEL) {
+ buf_.push_back(node.offset() ^ node.child());
+ }
+ }
+ return Key::invalid_key();
+}
+
+const Key &PredictiveCursor::descending_next() {
+ while (!buf_.empty()) {
+ const bool post_order = (buf_.back() & POST_ORDER_FLAG) == POST_ORDER_FLAG;
+ const UInt32 node_id = buf_.back() & ~POST_ORDER_FLAG;
+
+ const Base base = trie_->ith_node(node_id).base();
+ if (post_order) {
+ buf_.pop_back();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if (key.length() >= min_length_) {
+ if (cur_++ >= offset_) {
+ return key;
+ }
+ }
+ }
+ } else {
+ buf_.back() |= POST_ORDER_FLAG;
+ UInt16 label = trie_->ith_node(node_id).child();
+ while (label != INVALID_LABEL) {
+ buf_.push_back(base.offset() ^ label);
+ label = trie_->ith_node(base.offset() ^ label).sibling();
+ }
+ }
+ }
+ return Key::invalid_key();
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.hpp
new file mode 100644
index 00000000000..e4041ff22f8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.hpp
@@ -0,0 +1,86 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_PREDICTIVE_CURSOR_HPP_
+#define GRN_DAT_PREDICTIVE_CURSOR_HPP_
+
+#include "cursor.hpp"
+#include "vector.hpp"
+
+namespace grn {
+namespace dat {
+
+class Trie;
+
+class GRN_DAT_API PredictiveCursor : public Cursor {
+ public:
+ PredictiveCursor();
+ ~PredictiveCursor();
+
+ void open(const Trie &trie,
+ const String &str,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ void close();
+
+ const Key &next();
+
+ UInt32 offset() const {
+ return offset_;
+ }
+ UInt32 limit() const {
+ return limit_;
+ }
+ UInt32 flags() const {
+ return flags_;
+ }
+
+ private:
+ const Trie *trie_;
+ UInt32 offset_;
+ UInt32 limit_;
+ UInt32 flags_;
+
+ Vector<UInt32> buf_;
+ UInt32 cur_;
+ UInt32 end_;
+ UInt32 min_length_;
+
+ PredictiveCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags);
+
+ UInt32 fix_flags(UInt32 flags) const;
+ void init(const String &str);
+ void swap(PredictiveCursor *cursor);
+
+ const Key &ascending_next();
+ const Key &descending_next();
+
+ static const UInt32 IS_ROOT_FLAG = 0x80000000U;
+ static const UInt32 POST_ORDER_FLAG = 0x80000000U;
+
+ // Disallows copy and assignment.
+ PredictiveCursor(const PredictiveCursor &);
+ PredictiveCursor &operator=(const PredictiveCursor &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_PREDICTIVE_CURSOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp
new file mode 100644
index 00000000000..7f994b5dc57
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp
@@ -0,0 +1,175 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "prefix-cursor.hpp"
+
+#include <algorithm>
+
+#include "trie.hpp"
+
+namespace grn {
+namespace dat {
+
+PrefixCursor::PrefixCursor()
+ : trie_(NULL),
+ offset_(0),
+ limit_(MAX_UINT32),
+ flags_(PREFIX_CURSOR),
+ buf_(),
+ cur_(0),
+ end_(0) {}
+
+PrefixCursor::~PrefixCursor() {}
+
+void PrefixCursor::open(const Trie &trie,
+ const String &str,
+ UInt32 min_length,
+ UInt32 offset,
+ UInt32 limit,
+ UInt32 flags) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, (str.ptr() == NULL) && (str.length() != 0));
+ GRN_DAT_THROW_IF(PARAM_ERROR, min_length > str.length());
+
+ flags = fix_flags(flags);
+ PrefixCursor new_cursor(trie, offset, limit, flags);
+ new_cursor.init(str, min_length);
+ new_cursor.swap(this);
+}
+
+void PrefixCursor::close() {
+ PrefixCursor new_cursor;
+ new_cursor.swap(this);
+}
+
+const Key &PrefixCursor::next() {
+ if (cur_ == end_) {
+ return Key::invalid_key();
+ }
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ return trie_->get_key(buf_[cur_++]);
+ } else {
+ return trie_->get_key(buf_[--cur_]);
+ }
+}
+
+PrefixCursor::PrefixCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags)
+ : trie_(&trie),
+ offset_(offset),
+ limit_(limit),
+ flags_(flags),
+ buf_(),
+ cur_(0),
+ end_(0) {}
+
+UInt32 PrefixCursor::fix_flags(UInt32 flags) const {
+ const UInt32 cursor_type = flags & CURSOR_TYPE_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_type != 0) &&
+ (cursor_type != PREFIX_CURSOR));
+ flags |= PREFIX_CURSOR;
+
+ const UInt32 cursor_order = flags & CURSOR_ORDER_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (cursor_order != 0) &&
+ (cursor_order != ASCENDING_CURSOR) &&
+ (cursor_order != DESCENDING_CURSOR));
+ if (cursor_order == 0) {
+ flags |= ASCENDING_CURSOR;
+ }
+
+ const UInt32 cursor_options = flags & CURSOR_OPTIONS_MASK;
+ GRN_DAT_THROW_IF(PARAM_ERROR, cursor_options & ~EXCEPT_EXACT_MATCH);
+
+ return flags;
+}
+
+void PrefixCursor::init(const String &str, UInt32 min_length) {
+ if ((limit_ == 0) || (offset_ > (str.length() - min_length))) {
+ return;
+ }
+
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 i;
+ for (i = 0; i < str.length(); ++i) {
+ const Base base = trie_->ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if ((key.length() >= min_length) && (key.length() <= str.length()) &&
+ (str.substr(0, key.length()).compare(key.str(), i) == 0) &&
+ ((key.length() < str.length()) ||
+ ((flags_ & EXCEPT_EXACT_MATCH) != EXCEPT_EXACT_MATCH))) {
+ buf_.push_back(base.key_pos());
+ }
+ break;
+ }
+
+ if ((i >= min_length) &&
+ (trie_->ith_node(node_id).child() == TERMINAL_LABEL)) {
+ const Base linker_base =
+ trie_->ith_node(base.offset() ^ TERMINAL_LABEL).base();
+ if (linker_base.is_linker()) {
+ buf_.push_back(linker_base.key_pos());
+ }
+ }
+
+ node_id = base.offset() ^ str[i];
+ if (trie_->ith_node(node_id).label() != str[i]) {
+ break;
+ }
+ }
+
+ if ((i == str.length()) &&
+ ((flags_ & EXCEPT_EXACT_MATCH) != EXCEPT_EXACT_MATCH)) {
+ const Base base = trie_->ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = trie_->get_key(base.key_pos());
+ if ((key.length() >= min_length) && (key.length() <= str.length())) {
+ buf_.push_back(base.key_pos());
+ }
+ } else if (trie_->ith_node(node_id).child() == TERMINAL_LABEL) {
+ const Base linker_base =
+ trie_->ith_node(base.offset() ^ TERMINAL_LABEL).base();
+ if (linker_base.is_linker()) {
+ buf_.push_back(linker_base.key_pos());
+ }
+ }
+ }
+
+ if (buf_.size() <= offset_) {
+ return;
+ }
+
+ if ((flags_ & ASCENDING_CURSOR) == ASCENDING_CURSOR) {
+ cur_ = offset_;
+ end_ = (limit_ < (buf_.size() - cur_)) ? (cur_ + limit_) : buf_.size();
+ } else {
+ cur_ = buf_.size() - offset_;
+ end_ = (limit_ < cur_) ? (cur_ - limit_) : 0;
+ }
+}
+
+void PrefixCursor::swap(PrefixCursor *cursor) {
+ std::swap(trie_, cursor->trie_);
+ std::swap(offset_, cursor->offset_);
+ std::swap(limit_, cursor->limit_);
+ std::swap(flags_, cursor->flags_);
+ buf_.swap(&cursor->buf_);
+ std::swap(cur_, cursor->cur_);
+ std::swap(end_, cursor->end_);
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.hpp
new file mode 100644
index 00000000000..7a84228cefa
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.hpp
@@ -0,0 +1,80 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_PREFIX_CURSOR_HPP_
+#define GRN_DAT_PREFIX_CURSOR_HPP_
+
+#include "cursor.hpp"
+#include "vector.hpp"
+
+namespace grn {
+namespace dat {
+
+class Trie;
+
+class GRN_DAT_API PrefixCursor : public Cursor {
+ public:
+ PrefixCursor();
+ ~PrefixCursor();
+
+ void open(const Trie &trie,
+ const String &str,
+ UInt32 min_length = 0,
+ UInt32 offset = 0,
+ UInt32 limit = MAX_UINT32,
+ UInt32 flags = 0);
+
+ void close();
+
+ const Key &next();
+
+ UInt32 offset() const {
+ return offset_;
+ }
+ UInt32 limit() const {
+ return limit_;
+ }
+ UInt32 flags() const {
+ return flags_;
+ }
+
+ private:
+ const Trie *trie_;
+ UInt32 offset_;
+ UInt32 limit_;
+ UInt32 flags_;
+
+ Vector<UInt32> buf_;
+ UInt32 cur_;
+ UInt32 end_;
+
+ PrefixCursor(const Trie &trie,
+ UInt32 offset, UInt32 limit, UInt32 flags);
+
+ UInt32 fix_flags(UInt32 flags) const;
+ void init(const String &str, UInt32 min_length);
+ void swap(PrefixCursor *cursor);
+
+ // Disallows copy and assignment.
+ PrefixCursor(const PrefixCursor &);
+ PrefixCursor &operator=(const PrefixCursor &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_PREFIX_CURSOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/sources.am b/storage/mroonga/vendor/groonga/lib/dat/sources.am
new file mode 100644
index 00000000000..26c9f09fde1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/sources.am
@@ -0,0 +1,29 @@
+libgrndat_la_SOURCES = \
+ cursor-factory.cpp \
+ file-impl.cpp \
+ file.cpp \
+ id-cursor.cpp \
+ key-cursor.cpp \
+ predictive-cursor.cpp \
+ prefix-cursor.cpp \
+ trie.cpp \
+ array.hpp \
+ base.hpp \
+ block.hpp \
+ check.hpp \
+ cursor-factory.hpp \
+ cursor.hpp \
+ dat.hpp \
+ entry.hpp \
+ file-impl.hpp \
+ file.hpp \
+ header.hpp \
+ id-cursor.hpp \
+ key-cursor.hpp \
+ key.hpp \
+ node.hpp \
+ predictive-cursor.hpp \
+ prefix-cursor.hpp \
+ string.hpp \
+ trie.hpp \
+ vector.hpp
diff --git a/storage/mroonga/vendor/groonga/lib/dat/string.hpp b/storage/mroonga/vendor/groonga/lib/dat/string.hpp
new file mode 100644
index 00000000000..ecbb1e79d04
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/string.hpp
@@ -0,0 +1,175 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_STRING_HPP_
+#define GRN_DAT_STRING_HPP_
+
+#include "dat.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API String {
+ public:
+ String()
+ : ptr_(NULL),
+ length_(0) {}
+ String(const void *ptr, UInt32 length)
+ : ptr_(static_cast<const UInt8 *>(ptr)),
+ length_(length) {}
+ template <UInt32 T>
+ explicit String(const char (&str)[T])
+ : ptr_(reinterpret_cast<const UInt8 *>(str)),
+ length_(T - 1) {}
+ String(const String &rhs)
+ : ptr_(rhs.ptr_),
+ length_(rhs.length_) {}
+
+ String &operator=(const String &rhs) {
+ set_ptr(rhs.ptr());
+ set_length(rhs.length());
+ return *this;
+ }
+
+ const UInt8 &operator[](UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= length_);
+ return ptr_[i];
+ }
+
+ const void *ptr() const {
+ return ptr_;
+ }
+ UInt32 length() const {
+ return length_;
+ }
+
+ void set_ptr(const void *x) {
+ ptr_ = static_cast<const UInt8 *>(x);
+ }
+ void set_length(UInt32 x) {
+ length_ = x;
+ }
+
+ void assign(const void *ptr, UInt32 length) {
+ set_ptr(ptr);
+ set_length(length);
+ }
+
+ String substr(UInt32 offset = 0) const {
+ return String(ptr_ + offset, length_ - offset);
+ }
+ String substr(UInt32 offset, UInt32 length) const {
+ return String(ptr_ + offset, length);
+ }
+
+ // This function returns an integer as follows:
+ // - a negative value if *this < rhs,
+ // - zero if *this == rhs,
+ // - a positive value if *this > rhs,
+ // but if the offset is too large, the result is undefined.
+ int compare(const String &rhs, UInt32 offset = 0) const {
+ GRN_DAT_DEBUG_THROW_IF(offset > length());
+ GRN_DAT_DEBUG_THROW_IF(offset > rhs.length());
+
+ for (UInt32 i = offset; i < length(); ++i) {
+ if (i >= rhs.length()) {
+ return 1;
+ } else if ((*this)[i] != rhs[i]) {
+ return (*this)[i] - rhs[i];
+ }
+ }
+ return (length() == rhs.length()) ? 0 : -1;
+ }
+
+ bool starts_with(const String &str) const {
+ if (length() < str.length()) {
+ return false;
+ }
+ for (UInt32 i = 0; i < str.length(); ++i) {
+ if ((*this)[i] != str[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ bool ends_with(const String &str) const {
+ if (length() < str.length()) {
+ return false;
+ }
+ UInt32 offset = length() - str.length();
+ for (UInt32 i = 0; i < str.length(); ++i) {
+ if ((*this)[offset + i] != str[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ void swap(String *rhs) {
+ const UInt8 * const ptr_temp = ptr_;
+ ptr_ = rhs->ptr_;
+ rhs->ptr_ = ptr_temp;
+
+ const UInt32 length_temp = length_;
+ length_ = rhs->length_;
+ rhs->length_ = length_temp;
+ }
+
+ private:
+ const UInt8 *ptr_;
+ UInt32 length_;
+};
+
+inline bool operator==(const String &lhs, const String &rhs) {
+ if (lhs.length() != rhs.length()) {
+ return false;
+ } else if (lhs.ptr() == rhs.ptr()) {
+ return true;
+ }
+ for (UInt32 i = 0; i < lhs.length(); ++i) {
+ if (lhs[i] != rhs[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+inline bool operator!=(const String &lhs, const String &rhs) {
+ return !(lhs == rhs);
+}
+
+inline bool operator<(const String &lhs, const String &rhs) {
+ return lhs.compare(rhs) < 0;
+}
+
+inline bool operator>(const String &lhs, const String &rhs) {
+ return rhs < lhs;
+}
+
+inline bool operator<=(const String &lhs, const String &rhs) {
+ return !(lhs > rhs);
+}
+
+inline bool operator>=(const String &lhs, const String &rhs) {
+ return !(lhs < rhs);
+}
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_STRING_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/trie.cpp b/storage/mroonga/vendor/groonga/lib/dat/trie.cpp
new file mode 100644
index 00000000000..82c8c273286
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/trie.cpp
@@ -0,0 +1,1213 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "trie.hpp"
+
+#include <algorithm>
+#include <cstring>
+
+#include "vector.hpp"
+
+namespace grn {
+namespace dat {
+namespace {
+
+class StatusFlagManager {
+ public:
+ StatusFlagManager(Header *header, UInt32 status_flag)
+ : header_(header), status_flag_(status_flag) {
+ header_->set_status_flags(header_->status_flags() | status_flag_);
+ }
+ ~StatusFlagManager() {
+ header_->set_status_flags(header_->status_flags() & ~status_flag_);
+ }
+
+ private:
+ Header *header_;
+ UInt32 status_flag_;
+
+ // Disallows copy and assignment.
+ StatusFlagManager(const StatusFlagManager &);
+ StatusFlagManager &operator=(const StatusFlagManager &);
+};
+
+} // namespace
+
+Trie::Trie()
+ : file_(),
+ header_(NULL),
+ nodes_(),
+ blocks_(),
+ entries_(),
+ key_buf_() {}
+
+Trie::~Trie() {}
+
+void Trie::create(const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ double num_nodes_per_key,
+ double average_key_length) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, (file_size != 0) && (max_num_keys != 0));
+
+ if (num_nodes_per_key < 1.0) {
+ num_nodes_per_key = DEFAULT_NUM_NODES_PER_KEY;
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, num_nodes_per_key < 1.0);
+
+ if (average_key_length < 1.0) {
+ average_key_length = DEFAULT_AVERAGE_KEY_LENGTH;
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, average_key_length < 1.0);
+ GRN_DAT_THROW_IF(PARAM_ERROR, average_key_length > MAX_KEY_LENGTH);
+
+ if (max_num_keys == 0) {
+ if (file_size == 0) {
+ file_size = DEFAULT_FILE_SIZE;
+ } else {
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size < MIN_FILE_SIZE);
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size > MAX_FILE_SIZE);
+ }
+ } else {
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_keys > MAX_NUM_KEYS);
+ }
+
+ Trie new_trie;
+ new_trie.create_file(file_name, file_size, max_num_keys,
+ num_nodes_per_key, average_key_length);
+ new_trie.swap(this);
+}
+
+void Trie::create(const Trie &trie,
+ const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ double num_nodes_per_key,
+ double average_key_length) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, (file_size != 0) && (max_num_keys != 0));
+
+ if (num_nodes_per_key < 1.0) {
+ if (trie.num_keys() == 0) {
+ num_nodes_per_key = DEFAULT_NUM_NODES_PER_KEY;
+ } else {
+ num_nodes_per_key = 1.0 * trie.num_nodes() / trie.num_keys();
+ }
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, num_nodes_per_key < 1.0);
+
+ if (average_key_length < 1.0) {
+ if (trie.num_keys() == 0) {
+ average_key_length = DEFAULT_AVERAGE_KEY_LENGTH;
+ } else {
+ average_key_length = 1.0 * trie.total_key_length() / trie.num_keys();
+ }
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, average_key_length < 1.0);
+ GRN_DAT_THROW_IF(PARAM_ERROR, average_key_length > MAX_KEY_LENGTH);
+
+ if (max_num_keys == 0) {
+ if (file_size == 0) {
+ file_size = trie.file_size();
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size < MIN_FILE_SIZE);
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size > MAX_FILE_SIZE);
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size < trie.virtual_size());
+ } else {
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_keys < trie.num_keys());
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_keys < trie.max_key_id());
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_keys > MAX_NUM_KEYS);
+ }
+
+ Trie new_trie;
+ new_trie.create_file(file_name, file_size, max_num_keys,
+ num_nodes_per_key, average_key_length);
+ new_trie.build_from_trie(trie);
+ new_trie.swap(this);
+}
+
+void Trie::repair(const Trie &trie, const char *file_name) {
+ Trie new_trie;
+ new_trie.create_file(file_name, trie.file_size(), trie.max_num_keys(),
+ trie.max_num_blocks(), trie.key_buf_size());
+ new_trie.repair_trie(trie);
+ new_trie.swap(this);
+}
+
+void Trie::open(const char *file_name) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_name == NULL);
+
+ Trie new_trie;
+ new_trie.open_file(file_name);
+ new_trie.swap(this);
+}
+
+void Trie::close() {
+ Trie().swap(this);
+}
+
+void Trie::swap(Trie *trie) {
+ file_.swap(&trie->file_);
+ std::swap(header_, trie->header_);
+ nodes_.swap(&trie->nodes_);
+ blocks_.swap(&trie->blocks_);
+ entries_.swap(&trie->entries_);
+ key_buf_.swap(&trie->key_buf_);
+}
+
+void Trie::create_file(const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ double num_nodes_per_key,
+ double average_key_length) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, (file_size == 0) && (max_num_keys == 0));
+ GRN_DAT_THROW_IF(PARAM_ERROR, (file_size != 0) && (max_num_keys != 0));
+ if (max_num_keys == 0) {
+ const UInt64 avail = file_size - sizeof(Header);
+ const double num_bytes_per_key = (sizeof(Node) * num_nodes_per_key)
+ + (1.0 * sizeof(Block) / BLOCK_SIZE * num_nodes_per_key)
+ + sizeof(Entry)
+ + sizeof(UInt32) + sizeof(UInt8) + average_key_length + 1.5;
+ if ((avail / num_bytes_per_key) > MAX_NUM_KEYS) {
+ max_num_keys = MAX_NUM_KEYS;
+ } else {
+ max_num_keys = (UInt32)(avail / num_bytes_per_key);
+ }
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_keys == 0);
+ }
+
+ UInt32 max_num_blocks;
+ {
+ const double max_num_nodes = num_nodes_per_key * max_num_keys;
+ GRN_DAT_THROW_IF(PARAM_ERROR, (max_num_nodes - 1.0) >= MAX_NUM_NODES);
+ max_num_blocks = ((UInt32)max_num_nodes + BLOCK_SIZE - 1) / BLOCK_SIZE;
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_blocks == 0);
+ GRN_DAT_THROW_IF(PARAM_ERROR, max_num_blocks > MAX_NUM_BLOCKS);
+ }
+
+ UInt32 key_buf_size;
+ if (file_size == 0) {
+ const double total_key_length = average_key_length * max_num_keys;
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ (total_key_length - 1.0) >= MAX_TOTAL_KEY_LENGTH);
+
+ // The last term is the estimated number of bytes that will be used for
+ // 32-bit alignment.
+ const UInt64 total_num_bytes = (UInt64)(total_key_length)
+ + (UInt64)(sizeof(UInt32) + sizeof(UInt8)) * max_num_keys
+ + (UInt32)(max_num_keys * 1.5);
+ GRN_DAT_THROW_IF(PARAM_ERROR,
+ (total_num_bytes / sizeof(UInt32)) >= MAX_KEY_BUF_SIZE);
+ key_buf_size = (UInt32)(total_num_bytes / sizeof(UInt32));
+
+ file_size = sizeof(Header)
+ + (sizeof(Block) * max_num_blocks)
+ + (sizeof(Node) * BLOCK_SIZE * max_num_blocks)
+ + (sizeof(Entry) * max_num_keys)
+ + (sizeof(UInt32) * key_buf_size);
+ } else {
+ const UInt64 avail = file_size - sizeof(Header)
+ - (sizeof(Block) * max_num_blocks)
+ - (sizeof(Node) * BLOCK_SIZE * max_num_blocks)
+ - (sizeof(Entry) * max_num_keys);
+ GRN_DAT_THROW_IF(PARAM_ERROR, (avail / sizeof(UInt32)) > MAX_KEY_BUF_SIZE);
+ key_buf_size = (UInt32)(avail / sizeof(UInt32));
+ }
+
+ create_file(file_name, file_size, max_num_keys,
+ max_num_blocks, key_buf_size);
+}
+
+void Trie::create_file(const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ UInt32 max_num_blocks,
+ UInt32 key_buf_size) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_size < (sizeof(Header)
+ + (sizeof(Block) * max_num_blocks)
+ + (sizeof(Node) * BLOCK_SIZE * max_num_blocks)
+ + (sizeof(Entry) * max_num_keys)
+ + (sizeof(UInt32) * key_buf_size)));
+
+ file_.create(file_name, file_size);
+
+ Header * const header = static_cast<Header *>(file_.ptr());
+ *header = Header();
+ header->set_file_size(file_size);
+ header->set_max_num_keys(max_num_keys);
+ header->set_max_num_blocks(max_num_blocks);
+ header->set_key_buf_size(key_buf_size);
+
+ map_address(file_.ptr());
+
+ reserve_node(ROOT_NODE_ID);
+ ith_node(INVALID_OFFSET).set_is_offset(true);
+}
+
+void Trie::open_file(const char *file_name) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, file_name == NULL);
+
+ file_.open(file_name);
+ map_address(file_.ptr());
+ GRN_DAT_THROW_IF(FORMAT_ERROR, file_size() != file_.size());
+}
+
+void Trie::map_address(void *address) {
+ GRN_DAT_THROW_IF(PARAM_ERROR, address == NULL);
+
+ header_ = static_cast<Header *>(address);
+ nodes_.assign(header_ + 1, max_num_nodes());
+ blocks_.assign(nodes_.end(), max_num_blocks());
+ entries_.assign(reinterpret_cast<Entry *>(blocks_.end()) - 1,
+ max_num_keys() + 1);
+ key_buf_.assign(entries_.end(), key_buf_size());
+
+ GRN_DAT_THROW_IF(UNEXPECTED_ERROR, static_cast<void *>(key_buf_.end())
+ > static_cast<void *>(static_cast<char *>(address) + file_size()));
+}
+
+void Trie::build_from_trie(const Trie &trie) {
+ GRN_DAT_THROW_IF(SIZE_ERROR, max_num_keys() < trie.num_keys());
+ GRN_DAT_THROW_IF(SIZE_ERROR, max_num_keys() < trie.max_key_id());
+
+ header_->set_total_key_length(trie.total_key_length());
+ header_->set_num_keys(trie.num_keys());
+ header_->set_max_key_id(trie.max_key_id());
+ header_->set_next_key_id(trie.next_key_id());
+ for (UInt32 i = min_key_id(); i <= max_key_id(); ++i) {
+ ith_entry(i) = trie.ith_entry(i);
+ }
+ build_from_trie(trie, ROOT_NODE_ID, ROOT_NODE_ID);
+}
+
+void Trie::build_from_trie(const Trie &trie, UInt32 src, UInt32 dest) {
+ // Keys are sorted in lexicographic order.
+ if (trie.ith_node(src).is_linker()) {
+ const Key &key = trie.get_key(trie.ith_node(src).key_pos());
+ Key::create(key_buf_.ptr() + next_key_pos(),
+ key.id(), key.ptr(), key.length());
+ ith_node(dest).set_key_pos(next_key_pos());
+ ith_entry(key.id()).set_key_pos(next_key_pos());
+ header_->set_next_key_pos(
+ next_key_pos() + Key::estimate_size(key.length()));
+ return;
+ }
+
+ const UInt32 src_offset = trie.ith_node(src).offset();
+ UInt32 dest_offset;
+ {
+ UInt16 labels[MAX_LABEL + 1];
+ UInt32 num_labels = 0;
+
+ UInt32 label = trie.ith_node(src).child();
+ while (label != INVALID_LABEL) {
+ GRN_DAT_DEBUG_THROW_IF(label > MAX_LABEL);
+ const UInt32 child = src_offset ^ label;
+ if (trie.ith_node(child).is_linker() ||
+ (trie.ith_node(child).child() != INVALID_LABEL)) {
+ labels[num_labels++] = label;
+ }
+ label = trie.ith_node(child).sibling();
+ }
+ if (num_labels == 0) {
+ return;
+ }
+
+ dest_offset = find_offset(labels, num_labels);
+ for (UInt32 i = 0; i < num_labels; ++i) {
+ const UInt32 child = dest_offset ^ labels[i];
+ reserve_node(child);
+ ith_node(child).set_label(labels[i]);
+ if ((i + 1) < num_labels) {
+ ith_node(child).set_sibling(labels[i + 1]);
+ }
+ }
+
+ GRN_DAT_DEBUG_THROW_IF(ith_node(dest_offset).is_offset());
+ ith_node(dest_offset).set_is_offset(true);
+ ith_node(dest).set_offset(dest_offset);
+ ith_node(dest).set_child(labels[0]);
+ }
+
+ UInt32 label = ith_node(dest).child();
+ while (label != INVALID_LABEL) {
+ build_from_trie(trie, src_offset ^ label, dest_offset ^ label);
+ label = ith_node(dest_offset ^ label).sibling();
+ }
+}
+
+void Trie::repair_trie(const Trie &trie) {
+ Vector<UInt32> valid_ids;
+ header_->set_max_key_id(trie.max_key_id());
+ header_->set_next_key_id(trie.max_key_id() + 1);
+ UInt32 prev_invalid_key_id = INVALID_KEY_ID;
+ for (UInt32 i = min_key_id(); i <= max_key_id(); ++i) {
+ const Entry &entry = trie.ith_entry(i);
+ if (entry.is_valid()) {
+ valid_ids.push_back(i);
+ ith_entry(i) = entry;
+ const Key &key = trie.get_key(entry.key_pos());
+ Key::create(key_buf_.ptr() + next_key_pos(),
+ key.id(), key.ptr(), key.length());
+ ith_entry(i).set_key_pos(next_key_pos());
+ header_->set_next_key_pos(
+ next_key_pos() + Key::estimate_size(key.length()));
+ header_->set_total_key_length(
+ total_key_length() + key.length());
+ header_->set_num_keys(num_keys() + 1);
+ } else {
+ if (prev_invalid_key_id == INVALID_KEY_ID) {
+ header_->set_next_key_id(i);
+ } else {
+ ith_entry(prev_invalid_key_id).set_next(i);
+ }
+ prev_invalid_key_id = i;
+ }
+ }
+ if (prev_invalid_key_id != INVALID_KEY_ID) {
+ ith_entry(prev_invalid_key_id).set_next(max_key_id() + 1);
+ }
+ mkq_sort(valid_ids.begin(), valid_ids.end(), 0);
+ build_from_keys(valid_ids.begin(), valid_ids.end(), 0, ROOT_NODE_ID);
+}
+
+void Trie::build_from_keys(const UInt32 *begin, const UInt32 *end,
+ UInt32 depth, UInt32 node_id) {
+ if ((end - begin) == 1) {
+ ith_node(node_id).set_key_pos(ith_entry(*begin).key_pos());
+ return;
+ }
+
+ UInt32 offset;
+ {
+ UInt16 labels[MAX_LABEL + 2];
+ UInt32 num_labels = 0;
+
+ const UInt32 *it = begin;
+ if (ith_key(*it).length() == depth) {
+ labels[num_labels++] = TERMINAL_LABEL;
+ ++it;
+ }
+
+ labels[num_labels++] = (UInt8)ith_key(*it)[depth];
+ for (++it; it < end; ++it) {
+ const Key &key = ith_key(*it);
+ if ((UInt8)key[depth] != labels[num_labels - 1]) {
+ labels[num_labels++] = (UInt8)key[depth];
+ }
+ }
+ labels[num_labels] = INVALID_LABEL;
+
+ offset = find_offset(labels, num_labels);
+ ith_node(node_id).set_child(labels[0]);
+ for (UInt32 i = 0; i < num_labels; ++i) {
+ const UInt32 next = offset ^ labels[i];
+ reserve_node(next);
+ ith_node(next).set_label(labels[i]);
+ ith_node(next).set_sibling(labels[i + 1]);
+ }
+
+ if (offset >= num_nodes()) {
+ reserve_block(num_blocks());
+ }
+ ith_node(offset).set_is_offset(true);
+ ith_node(node_id).set_offset(offset);
+ }
+
+ if (ith_key(*begin).length() == depth) {
+ build_from_keys(begin, begin + 1, depth + 1, offset ^ TERMINAL_LABEL);
+ ++begin;
+ }
+
+ UInt16 label = ith_key(*begin)[depth];
+ for (const UInt32 *it = begin + 1; it < end; ++it) {
+ const Key &key = ith_key(*it);
+ if ((UInt8)key[depth] != label) {
+ build_from_keys(begin, it, depth + 1, offset ^ label);
+ label = (UInt8)key[depth];
+ begin = it;
+ }
+ }
+ build_from_keys(begin, end, depth + 1, offset ^ label);
+}
+
+void Trie::mkq_sort(UInt32 *l, UInt32 *r, UInt32 depth) {
+ while ((r - l) >= MKQ_SORT_THRESHOLD) {
+ UInt32 *pl = l;
+ UInt32 *pr = r;
+ UInt32 *pivot_l = l;
+ UInt32 *pivot_r = r;
+
+ const int pivot = get_median(*l, *(l + (r - l) / 2), *(r - 1), depth);
+ for ( ; ; ) {
+ while (pl < pr) {
+ const int label = get_label(*pl, depth);
+ if (label > pivot) {
+ break;
+ } else if (label == pivot) {
+ swap_ids(pl, pivot_l);
+ ++pivot_l;
+ }
+ ++pl;
+ }
+ while (pl < pr) {
+ const int label = get_label(*--pr, depth);
+ if (label < pivot) {
+ break;
+ } else if (label == pivot) {
+ swap_ids(pr, --pivot_r);
+ }
+ }
+ if (pl >= pr) {
+ break;
+ }
+ swap_ids(pl, pr);
+ ++pl;
+ }
+ while (pivot_l > l) {
+ swap_ids(--pivot_l, --pl);
+ }
+ while (pivot_r < r) {
+ swap_ids(pivot_r, pr);
+ ++pivot_r;
+ ++pr;
+ }
+
+ if (((pl - l) > (pr - pl)) || ((r - pr) > (pr - pl))) {
+ if ((pr - pl) > 1) {
+ mkq_sort(pl, pr, depth + 1);
+ }
+
+ if ((pl - l) < (r - pr)) {
+ if ((pl - l) > 1) {
+ mkq_sort(l, pl, depth);
+ }
+ l = pr;
+ } else {
+ if ((r - pr) > 1) {
+ mkq_sort(pr, r, depth);
+ }
+ r = pl;
+ }
+ } else {
+ if ((pl - l) > 1) {
+ mkq_sort(l, pl, depth);
+ }
+
+ if ((r - pr) > 1) {
+ mkq_sort(pr, r, depth);
+ }
+
+ l = pl, r = pr;
+ if ((pr - pl) > 1) {
+ ++depth;
+ }
+ }
+ }
+
+ if ((r - l) > 1) {
+ insertion_sort(l, r, depth);
+ }
+}
+
+void Trie::insertion_sort(UInt32 *l, UInt32 *r, UInt32 depth) {
+ for (UInt32 *i = l + 1; i < r; ++i) {
+ for (UInt32 *j = i; j > l; --j) {
+ if (less_than(*(j - 1), *j, depth)) {
+ break;
+ }
+ swap_ids(j - 1, j);
+ }
+ }
+}
+
+int Trie::get_median(UInt32 a, UInt32 b, UInt32 c, UInt32 depth) const {
+ const int x = get_label(a, depth);
+ const int y = get_label(b, depth);
+ const int z = get_label(c, depth);
+ if (x < y) {
+ if (y < z) {
+ return y;
+ } else if (x < z) {
+ return z;
+ }
+ return x;
+ } else if (x < z) {
+ return x;
+ } else if (y < z) {
+ return z;
+ }
+ return y;
+}
+
+int Trie::get_label(UInt32 key_id, UInt32 depth) const {
+ const Key &key = ith_key(key_id);
+ if (depth == key.length()) {
+ return -1;
+ } else {
+ return (UInt8)key[depth];
+ }
+}
+
+bool Trie::less_than(UInt32 lhs, UInt32 rhs, UInt32 depth) const {
+ const Key &lhs_key = ith_key(lhs);
+ const Key &rhs_key = ith_key(rhs);
+ const UInt32 length = (lhs_key.length() < rhs_key.length()) ?
+ lhs_key.length() : rhs_key.length();
+ for (UInt32 i = depth; i < length; ++i) {
+ if (lhs_key[i] != rhs_key[i]) {
+ return (UInt8)lhs_key[i] < (UInt8)rhs_key[i];
+ }
+ }
+ return lhs_key.length() < rhs_key.length();
+}
+
+void Trie::swap_ids(UInt32 *lhs, UInt32 *rhs) {
+ UInt32 temp = *lhs;
+ *lhs = *rhs;
+ *rhs = temp;
+}
+
+bool Trie::search_key(const UInt8 *ptr, UInt32 length, UInt32 *key_pos) const {
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 query_pos = 0;
+ if (!search_linker(ptr, length, node_id, query_pos)) {
+ return false;
+ }
+
+ const Base base = ith_node(node_id).base();
+ if (!base.is_linker()) {
+ return false;
+ }
+
+ if (get_key(base.key_pos()).equals_to(ptr, length, query_pos)) {
+ if (key_pos != NULL) {
+ *key_pos = base.key_pos();
+ }
+ return true;
+ }
+ return false;
+}
+
+bool Trie::search_linker(const UInt8 *ptr, UInt32 length,
+ UInt32 &node_id, UInt32 &query_pos) const {
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ for ( ; query_pos < length; ++query_pos) {
+ const Base base = ith_node(node_id).base();
+ if (base.is_linker()) {
+ return true;
+ }
+
+ const UInt32 next = base.offset() ^ ptr[query_pos];
+ if (ith_node(next).label() != ptr[query_pos]) {
+ return false;
+ }
+ node_id = next;
+ }
+
+ const Base base = ith_node(node_id).base();
+ if (base.is_linker()) {
+ return true;
+ }
+
+ const UInt32 next = base.offset() ^ TERMINAL_LABEL;
+ if (ith_node(next).label() != TERMINAL_LABEL) {
+ return false;
+ }
+ node_id = next;
+ return ith_node(next).is_linker();
+}
+
+bool Trie::lcp_search_key(const UInt8 *ptr, UInt32 length,
+ UInt32 *key_pos) const {
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ bool found = false;
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 query_pos = 0;
+
+ for ( ; query_pos < length; ++query_pos) {
+ const Base base = ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = get_key(base.key_pos());
+ if ((key.length() <= length) &&
+ key.equals_to(ptr, key.length(), query_pos)) {
+ if (key_pos != NULL) {
+ *key_pos = base.key_pos();
+ }
+ found = true;
+ }
+ return found;
+ }
+
+ if (ith_node(node_id).child() == TERMINAL_LABEL) {
+ const Base linker_base =
+ ith_node(base.offset() ^ TERMINAL_LABEL).base();
+ if (linker_base.is_linker()) {
+ if (key_pos != NULL) {
+ *key_pos = linker_base.key_pos();
+ }
+ found = true;
+ }
+ }
+
+ node_id = base.offset() ^ ptr[query_pos];
+ if (ith_node(node_id).label() != ptr[query_pos]) {
+ return found;
+ }
+ }
+
+ const Base base = ith_node(node_id).base();
+ if (base.is_linker()) {
+ const Key &key = get_key(base.key_pos());
+ if (key.length() <= length) {
+ if (key_pos != NULL) {
+ *key_pos = base.key_pos();
+ }
+ found = true;
+ }
+ } else if (ith_node(node_id).child() == TERMINAL_LABEL) {
+ const Base linker_base = ith_node(base.offset() ^ TERMINAL_LABEL).base();
+ if (linker_base.is_linker()) {
+ if (key_pos != NULL) {
+ *key_pos = linker_base.key_pos();
+ }
+ found = true;
+ }
+ }
+ return found;
+}
+
+bool Trie::remove_key(const UInt8 *ptr, UInt32 length) {
+ GRN_DAT_THROW_IF(STATUS_ERROR, (status_flags() & CHANGING_MASK) != 0);
+ StatusFlagManager status_flag_manager(header_, REMOVING_FLAG);
+
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 query_pos = 0;
+ if (!search_linker(ptr, length, node_id, query_pos)) {
+ return false;
+ }
+
+ const UInt32 key_pos = ith_node(node_id).key_pos();
+ if (!get_key(key_pos).equals_to(ptr, length, query_pos)) {
+ return false;
+ }
+
+ const UInt32 key_id = get_key(key_pos).id();
+ ith_node(node_id).set_offset(INVALID_OFFSET);
+ ith_entry(key_id).set_next(next_key_id());
+
+ header_->set_next_key_id(key_id);
+ header_->set_total_key_length(total_key_length() - length);
+ header_->set_num_keys(num_keys() - 1);
+ return true;
+}
+
+bool Trie::insert_key(const UInt8 *ptr, UInt32 length, UInt32 *key_pos) {
+ GRN_DAT_THROW_IF(STATUS_ERROR, (status_flags() & CHANGING_MASK) != 0);
+ StatusFlagManager status_flag_manager(header_, INSERTING_FLAG);
+
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 query_pos = 0;
+
+ search_linker(ptr, length, node_id, query_pos);
+ if (!insert_linker(ptr, length, node_id, query_pos)) {
+ if (key_pos != NULL) {
+ *key_pos = ith_node(node_id).key_pos();
+ }
+ return false;
+ }
+
+ const UInt32 new_key_id = next_key_id();
+ const UInt32 new_key_pos = append_key(ptr, length, new_key_id);
+
+ header_->set_total_key_length(total_key_length() + length);
+ header_->set_num_keys(num_keys() + 1);
+ if (new_key_id > max_key_id()) {
+ header_->set_max_key_id(new_key_id);
+ header_->set_next_key_id(new_key_id + 1);
+ } else {
+ header_->set_next_key_id(ith_entry(new_key_id).next());
+ }
+
+ ith_entry(new_key_id).set_key_pos(new_key_pos);
+ ith_node(node_id).set_key_pos(new_key_pos);
+ if (key_pos != NULL) {
+ *key_pos = new_key_pos;
+ }
+ return true;
+}
+
+bool Trie::insert_linker(const UInt8 *ptr, UInt32 length,
+ UInt32 &node_id, UInt32 query_pos) {
+ if (ith_node(node_id).is_linker()) {
+ const Key &key = get_key(ith_node(node_id).key_pos());
+ UInt32 i = query_pos;
+ while ((i < length) && (i < key.length())) {
+ if (ptr[i] != key[i]) {
+ break;
+ }
+ ++i;
+ }
+ if ((i == length) && (i == key.length())) {
+ return false;
+ }
+ GRN_DAT_THROW_IF(SIZE_ERROR, num_keys() >= max_num_keys());
+ GRN_DAT_DEBUG_THROW_IF(next_key_id() > max_num_keys());
+
+ for (UInt32 j = query_pos; j < i; ++j) {
+ node_id = insert_node(node_id, ptr[j]);
+ }
+ node_id = separate(ptr, length, node_id, i);
+ return true;
+ } else if (ith_node(node_id).label() == TERMINAL_LABEL) {
+ return true;
+ } else {
+ GRN_DAT_THROW_IF(SIZE_ERROR, num_keys() >= max_num_keys());
+ const UInt16 label = (query_pos < length) ?
+ (UInt16)ptr[query_pos] : (UInt16)TERMINAL_LABEL;
+ const Base base = ith_node(node_id).base();
+ if ((base.offset() == INVALID_OFFSET) ||
+ !ith_node(base.offset() ^ label).is_phantom()) {
+ resolve(node_id, label);
+ }
+ node_id = insert_node(node_id, label);
+ return true;
+ }
+}
+
+bool Trie::update_key(const Key &key, const UInt8 *ptr, UInt32 length,
+ UInt32 *key_pos) {
+ GRN_DAT_THROW_IF(STATUS_ERROR, (status_flags() & CHANGING_MASK) != 0);
+ StatusFlagManager status_flag_manager(header_, UPDATING_FLAG);
+
+ GRN_DAT_DEBUG_THROW_IF((ptr == NULL) && (length != 0));
+
+ if (!key.is_valid()) {
+ return false;
+ }
+
+ UInt32 node_id = ROOT_NODE_ID;
+ UInt32 query_pos = 0;
+
+ search_linker(ptr, length, node_id, query_pos);
+ if (!insert_linker(ptr, length, node_id, query_pos)) {
+ if (key_pos != NULL) {
+ *key_pos = ith_node(node_id).key_pos();
+ }
+ return false;
+ }
+
+ const UInt32 new_key_pos = append_key(ptr, length, key.id());
+ header_->set_total_key_length(total_key_length() + length - key.length());
+ ith_entry(key.id()).set_key_pos(new_key_pos);
+ ith_node(node_id).set_key_pos(new_key_pos);
+ if (key_pos != NULL) {
+ *key_pos = new_key_pos;
+ }
+
+ node_id = ROOT_NODE_ID;
+ query_pos = 0;
+ GRN_DAT_THROW_IF(UNEXPECTED_ERROR,
+ !search_linker(static_cast<const UInt8 *>(key.ptr()), key.length(),
+ node_id, query_pos));
+ ith_node(node_id).set_offset(INVALID_OFFSET);
+ return true;
+}
+
+UInt32 Trie::insert_node(UInt32 node_id, UInt16 label) {
+ GRN_DAT_DEBUG_THROW_IF(node_id >= num_nodes());
+ GRN_DAT_DEBUG_THROW_IF(label > MAX_LABEL);
+
+ const Base base = ith_node(node_id).base();
+ UInt32 offset;
+ if (base.is_linker() || (base.offset() == INVALID_OFFSET)) {
+ offset = find_offset(&label, 1);
+ } else {
+ offset = base.offset();
+ }
+
+ const UInt32 next = offset ^ label;
+ reserve_node(next);
+
+ ith_node(next).set_label(label);
+ if (base.is_linker()) {
+ GRN_DAT_DEBUG_THROW_IF(ith_node(offset).is_offset());
+ ith_node(offset).set_is_offset(true);
+ ith_node(next).set_key_pos(base.key_pos());
+ } else if (base.offset() == INVALID_OFFSET) {
+ GRN_DAT_DEBUG_THROW_IF(ith_node(offset).is_offset());
+ ith_node(offset).set_is_offset(true);
+ } else {
+ GRN_DAT_DEBUG_THROW_IF(!ith_node(offset).is_offset());
+ }
+ ith_node(node_id).set_offset(offset);
+
+ const UInt32 child_label = ith_node(node_id).child();
+ GRN_DAT_DEBUG_THROW_IF(child_label == label);
+ if (child_label == INVALID_LABEL) {
+ ith_node(node_id).set_child(label);
+ } else if ((label == TERMINAL_LABEL) ||
+ ((child_label != TERMINAL_LABEL) && (label < child_label))) {
+ GRN_DAT_DEBUG_THROW_IF(ith_node(offset ^ child_label).is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(ith_node(offset ^ child_label).label() != child_label);
+ ith_node(next).set_sibling(child_label);
+ ith_node(node_id).set_child(label);
+ } else {
+ UInt32 prev = offset ^ child_label;
+ GRN_DAT_DEBUG_THROW_IF(ith_node(prev).label() != child_label);
+ UInt32 sibling_label = ith_node(prev).sibling();
+ while (label > sibling_label) {
+ prev = offset ^ sibling_label;
+ GRN_DAT_DEBUG_THROW_IF(ith_node(prev).label() != sibling_label);
+ sibling_label = ith_node(prev).sibling();
+ }
+ GRN_DAT_DEBUG_THROW_IF(label == sibling_label);
+ ith_node(next).set_sibling(ith_node(prev).sibling());
+ ith_node(prev).set_sibling(label);
+ }
+ return next;
+}
+
+UInt32 Trie::append_key(const UInt8 *ptr, UInt32 length, UInt32 key_id) {
+ GRN_DAT_THROW_IF(SIZE_ERROR, key_id > max_num_keys());
+
+ const UInt32 key_pos = next_key_pos();
+ const UInt32 key_size = Key::estimate_size(length);
+
+ GRN_DAT_THROW_IF(SIZE_ERROR, key_size > (key_buf_size() - key_pos));
+ Key::create(key_buf_.ptr() + key_pos, key_id, ptr, length);
+
+ header_->set_next_key_pos(key_pos + key_size);
+ return key_pos;
+}
+
+UInt32 Trie::separate(const UInt8 *ptr, UInt32 length,
+ UInt32 node_id, UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(node_id >= num_nodes());
+ GRN_DAT_DEBUG_THROW_IF(!ith_node(node_id).is_linker());
+ GRN_DAT_DEBUG_THROW_IF(i > length);
+
+ const UInt32 key_pos = ith_node(node_id).key_pos();
+ const Key &key = get_key(key_pos);
+
+ UInt16 labels[2];
+ labels[0] = (i < key.length()) ? (UInt16)key[i] : (UInt16)TERMINAL_LABEL;
+ labels[1] = (i < length) ? (UInt16)ptr[i] : (UInt16)TERMINAL_LABEL;
+ GRN_DAT_DEBUG_THROW_IF(labels[0] == labels[1]);
+
+ const UInt32 offset = find_offset(labels, 2);
+
+ UInt32 next = offset ^ labels[0];
+ reserve_node(next);
+ GRN_DAT_DEBUG_THROW_IF(ith_node(offset).is_offset());
+
+ ith_node(next).set_label(labels[0]);
+ ith_node(next).set_key_pos(key_pos);
+
+ next = offset ^ labels[1];
+ reserve_node(next);
+
+ ith_node(next).set_label(labels[1]);
+
+ ith_node(offset).set_is_offset(true);
+ ith_node(node_id).set_offset(offset);
+
+ if ((labels[0] == TERMINAL_LABEL) ||
+ ((labels[1] != TERMINAL_LABEL) && (labels[0] < labels[1]))) {
+ ith_node(node_id).set_child(labels[0]);
+ ith_node(offset ^ labels[0]).set_sibling(labels[1]);
+ } else {
+ ith_node(node_id).set_child(labels[1]);
+ ith_node(offset ^ labels[1]).set_sibling(labels[0]);
+ }
+ return next;
+}
+
+void Trie::resolve(UInt32 node_id, UInt16 label) {
+ GRN_DAT_DEBUG_THROW_IF(node_id >= num_nodes());
+ GRN_DAT_DEBUG_THROW_IF(ith_node(node_id).is_linker());
+ GRN_DAT_DEBUG_THROW_IF(label > MAX_LABEL);
+
+ UInt32 offset = ith_node(node_id).offset();
+ if (offset != INVALID_OFFSET) {
+ UInt16 labels[MAX_LABEL + 1];
+ UInt32 num_labels = 0;
+
+ UInt32 next_label = ith_node(node_id).child();
+ GRN_DAT_DEBUG_THROW_IF(next_label == INVALID_LABEL);
+ while (next_label != INVALID_LABEL) {
+ GRN_DAT_DEBUG_THROW_IF(next_label > MAX_LABEL);
+ labels[num_labels++] = next_label;
+ next_label = ith_node(offset ^ next_label).sibling();
+ }
+ GRN_DAT_DEBUG_THROW_IF(num_labels == 0);
+
+ labels[num_labels] = label;
+ offset = find_offset(labels, num_labels + 1);
+ migrate_nodes(node_id, offset, labels, num_labels);
+ } else {
+ offset = find_offset(&label, 1);
+ if (offset >= num_nodes()) {
+ GRN_DAT_DEBUG_THROW_IF((offset / BLOCK_SIZE) != num_blocks());
+ reserve_block(num_blocks());
+ }
+ ith_node(offset).set_is_offset(true);
+ ith_node(node_id).set_offset(offset);
+ }
+}
+
+void Trie::migrate_nodes(UInt32 node_id, UInt32 dest_offset,
+ const UInt16 *labels, UInt32 num_labels) {
+ GRN_DAT_DEBUG_THROW_IF(node_id >= num_nodes());
+ GRN_DAT_DEBUG_THROW_IF(ith_node(node_id).is_linker());
+ GRN_DAT_DEBUG_THROW_IF(labels == NULL);
+ GRN_DAT_DEBUG_THROW_IF(num_labels == 0);
+ GRN_DAT_DEBUG_THROW_IF(num_labels > (MAX_LABEL + 1));
+
+ const UInt32 src_offset = ith_node(node_id).offset();
+ GRN_DAT_DEBUG_THROW_IF(src_offset == INVALID_OFFSET);
+ GRN_DAT_DEBUG_THROW_IF(!ith_node(src_offset).is_offset());
+
+ for (UInt32 i = 0; i < num_labels; ++i) {
+ const UInt32 src_node_id = src_offset ^ labels[i];
+ const UInt32 dest_node_id = dest_offset ^ labels[i];
+ GRN_DAT_DEBUG_THROW_IF(ith_node(src_node_id).is_phantom());
+ GRN_DAT_DEBUG_THROW_IF(ith_node(src_node_id).label() != labels[i]);
+
+ reserve_node(dest_node_id);
+ ith_node(dest_node_id).set_except_is_offset(
+ ith_node(src_node_id).except_is_offset());
+ ith_node(dest_node_id).set_base(ith_node(src_node_id).base());
+ }
+ header_->set_num_zombies(num_zombies() + num_labels);
+
+ GRN_DAT_DEBUG_THROW_IF(ith_node(dest_offset).is_offset());
+ ith_node(dest_offset).set_is_offset(true);
+ ith_node(node_id).set_offset(dest_offset);
+}
+
+UInt32 Trie::find_offset(const UInt16 *labels, UInt32 num_labels) {
+ GRN_DAT_DEBUG_THROW_IF(labels == NULL);
+ GRN_DAT_DEBUG_THROW_IF(num_labels == 0);
+ GRN_DAT_DEBUG_THROW_IF(num_labels > (MAX_LABEL + 1));
+
+ // Blocks are tested in descending order of level. Basically, a lower level
+ // block contains more phantom nodes.
+ UInt32 level = 1;
+ while (num_labels >= (1U << level)) {
+ ++level;
+ }
+ level = (level < MAX_BLOCK_LEVEL) ? (MAX_BLOCK_LEVEL - level) : 0;
+
+ UInt32 block_count = 0;
+ do {
+ UInt32 leader = header_->ith_leader(level);
+ if (leader == INVALID_LEADER) {
+ // This level has no blocks and it is thus skipped.
+ continue;
+ }
+
+ UInt32 block_id = leader;
+ do {
+ const Block &block = ith_block(block_id);
+ GRN_DAT_DEBUG_THROW_IF(block.level() != level);
+
+ const UInt32 first = (block_id * BLOCK_SIZE) | block.first_phantom();
+ UInt32 node_id = first;
+ do {
+ GRN_DAT_DEBUG_THROW_IF(!ith_node(node_id).is_phantom());
+ const UInt32 offset = node_id ^ labels[0];
+ if (!ith_node(offset).is_offset()) {
+ UInt32 i = 1;
+ for ( ; i < num_labels; ++i) {
+ if (!ith_node(offset ^ labels[i]).is_phantom()) {
+ break;
+ }
+ }
+ if (i >= num_labels) {
+ return offset;
+ }
+ }
+ node_id = (block_id * BLOCK_SIZE) | ith_node(node_id).next();
+ } while (node_id != first);
+
+ const UInt32 prev = block_id;
+ const UInt32 next = block.next();
+ block_id = next;
+ ith_block(prev).set_failure_count(ith_block(prev).failure_count() + 1);
+
+ // The level of a block is updated when this function fails many times,
+ // actually MAX_FAILURE_COUNT times, in that block.
+ if (ith_block(prev).failure_count() == MAX_FAILURE_COUNT) {
+ update_block_level(prev, level + 1);
+ if (next == leader) {
+ break;
+ } else {
+ // Note that the leader might be updated in the level update.
+ leader = header_->ith_leader(level);
+ continue;
+ }
+ }
+ } while ((++block_count < MAX_BLOCK_COUNT) && (block_id != leader));
+ } while ((block_count < MAX_BLOCK_COUNT) && (level-- != 0));
+
+ return num_nodes() ^ labels[0];
+}
+
+void Trie::reserve_node(UInt32 node_id) {
+ GRN_DAT_DEBUG_THROW_IF(node_id > num_nodes());
+ if (node_id >= num_nodes()) {
+ reserve_block(node_id / BLOCK_SIZE);
+ }
+
+ Node &node = ith_node(node_id);
+ GRN_DAT_DEBUG_THROW_IF(!node.is_phantom());
+
+ const UInt32 block_id = node_id / BLOCK_SIZE;
+ Block &block = ith_block(block_id);
+ GRN_DAT_DEBUG_THROW_IF(block.num_phantoms() == 0);
+
+ const UInt32 next = (block_id * BLOCK_SIZE) | node.next();
+ const UInt32 prev = (block_id * BLOCK_SIZE) | node.prev();
+ GRN_DAT_DEBUG_THROW_IF(next >= num_nodes());
+ GRN_DAT_DEBUG_THROW_IF(prev >= num_nodes());
+
+ if ((node_id & BLOCK_MASK) == block.first_phantom()) {
+ // The first phantom node is removed from the block and the second phantom
+ // node comes first.
+ block.set_first_phantom(next & BLOCK_MASK);
+ }
+
+ ith_node(next).set_prev(prev & BLOCK_MASK);
+ ith_node(prev).set_next(next & BLOCK_MASK);
+
+ if (block.level() != MAX_BLOCK_LEVEL) {
+ const UInt32 threshold = 1U << ((MAX_BLOCK_LEVEL - block.level() - 1) * 2);
+ if (block.num_phantoms() == threshold) {
+ update_block_level(block_id, block.level() + 1);
+ }
+ }
+ block.set_num_phantoms(block.num_phantoms() - 1);
+
+ node.set_is_phantom(false);
+
+ GRN_DAT_DEBUG_THROW_IF(node.offset() != INVALID_OFFSET);
+ GRN_DAT_DEBUG_THROW_IF(node.label() != INVALID_LABEL);
+
+ header_->set_num_phantoms(num_phantoms() - 1);
+}
+
+void Trie::reserve_block(UInt32 block_id) {
+ GRN_DAT_DEBUG_THROW_IF(block_id != num_blocks());
+ GRN_DAT_THROW_IF(SIZE_ERROR, block_id >= max_num_blocks());
+
+ header_->set_num_blocks(block_id + 1);
+ ith_block(block_id).set_failure_count(0);
+ ith_block(block_id).set_first_phantom(0);
+ ith_block(block_id).set_num_phantoms(BLOCK_SIZE);
+
+ const UInt32 begin = block_id * BLOCK_SIZE;
+ const UInt32 end = begin + BLOCK_SIZE;
+ GRN_DAT_DEBUG_THROW_IF(end != num_nodes());
+
+ Base base;
+ base.set_offset(INVALID_OFFSET);
+
+ Check check;
+ check.set_is_phantom(true);
+
+ for (UInt32 i = begin; i < end; ++i) {
+ check.set_prev((i - 1) & BLOCK_MASK);
+ check.set_next((i + 1) & BLOCK_MASK);
+ ith_node(i).set_base(base);
+ ith_node(i).set_check(check);
+ }
+
+ // The level of the new block is 0.
+ set_block_level(block_id, 0);
+ header_->set_num_phantoms(num_phantoms() + BLOCK_SIZE);
+}
+
+void Trie::update_block_level(UInt32 block_id, UInt32 level) {
+ GRN_DAT_DEBUG_THROW_IF(block_id >= num_blocks());
+ GRN_DAT_DEBUG_THROW_IF(level > MAX_BLOCK_LEVEL);
+
+ unset_block_level(block_id);
+ set_block_level(block_id, level);
+}
+
+void Trie::set_block_level(UInt32 block_id, UInt32 level) {
+ GRN_DAT_DEBUG_THROW_IF(block_id >= num_blocks());
+ GRN_DAT_DEBUG_THROW_IF(level > MAX_BLOCK_LEVEL);
+
+ const UInt32 leader = header_->ith_leader(level);
+ if (leader == INVALID_LEADER) {
+ // The new block becomes the only one block of the linked list.
+ ith_block(block_id).set_next(block_id);
+ ith_block(block_id).set_prev(block_id);
+ header_->set_ith_leader(level, block_id);
+ } else {
+ // The new block is added to the end of the list.
+ const UInt32 next = leader;
+ const UInt32 prev = ith_block(leader).prev();
+ GRN_DAT_DEBUG_THROW_IF(next >= num_blocks());
+ GRN_DAT_DEBUG_THROW_IF(prev >= num_blocks());
+ ith_block(block_id).set_next(next);
+ ith_block(block_id).set_prev(prev);
+ ith_block(next).set_prev(block_id);
+ ith_block(prev).set_next(block_id);
+ }
+ ith_block(block_id).set_level(level);
+ ith_block(block_id).set_failure_count(0);
+}
+
+void Trie::unset_block_level(UInt32 block_id) {
+ GRN_DAT_DEBUG_THROW_IF(block_id >= num_blocks());
+
+ const UInt32 level = ith_block(block_id).level();
+ GRN_DAT_DEBUG_THROW_IF(level > MAX_BLOCK_LEVEL);
+
+ const UInt32 leader = header_->ith_leader(level);
+ GRN_DAT_DEBUG_THROW_IF(leader == INVALID_LEADER);
+
+ const UInt32 next = ith_block(block_id).next();
+ const UInt32 prev = ith_block(block_id).prev();
+ GRN_DAT_DEBUG_THROW_IF(next >= num_blocks());
+ GRN_DAT_DEBUG_THROW_IF(prev >= num_blocks());
+
+ if (next == block_id) {
+ // The linked list becomes empty.
+ header_->set_ith_leader(level, INVALID_LEADER);
+ } else {
+ ith_block(next).set_prev(prev);
+ ith_block(prev).set_next(next);
+ if (block_id == leader) {
+ // The second block becomes the leader of the linked list.
+ header_->set_ith_leader(level, next);
+ }
+ }
+}
+
+} // namespace dat
+} // namespace grn
diff --git a/storage/mroonga/vendor/groonga/lib/dat/trie.hpp b/storage/mroonga/vendor/groonga/lib/dat/trie.hpp
new file mode 100644
index 00000000000..6bd307bb70e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/trie.hpp
@@ -0,0 +1,285 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_TRIE_HPP_
+#define GRN_DAT_TRIE_HPP_
+
+#include "array.hpp"
+#include "header.hpp"
+#include "node.hpp"
+#include "block.hpp"
+#include "entry.hpp"
+#include "key.hpp"
+#include "file.hpp"
+
+namespace grn {
+namespace dat {
+
+class GRN_DAT_API Trie {
+ public:
+ Trie();
+ ~Trie();
+
+ void create(const char *file_name = NULL,
+ UInt64 file_size = 0,
+ UInt32 max_num_keys = 0,
+ double num_nodes_per_key = 0.0,
+ double average_key_length = 0.0);
+
+ void create(const Trie &trie,
+ const char *file_name = NULL,
+ UInt64 file_size = 0,
+ UInt32 max_num_keys = 0,
+ double num_nodes_per_key = 0.0,
+ double average_key_length = 0.0);
+
+ void repair(const Trie &trie, const char *file_name = NULL);
+
+ void open(const char *file_name);
+ void close();
+
+ void swap(Trie *trie);
+
+ // Users can access a key by its position or ID.
+ const Key &get_key(UInt32 key_pos) const {
+ GRN_DAT_DEBUG_THROW_IF(key_pos >= next_key_pos());
+ return *reinterpret_cast<const Key *>(key_buf_.ptr() + key_pos);
+ }
+ // If a specified ID is invalid, e.g. the key is already deleted, this
+ // function returns a reference to an invalid key object whose id() returns
+ // INVALID_KEY_ID.
+ const Key &ith_key(UInt32 key_id) const {
+ if ((key_id >= min_key_id()) && (key_id <= max_key_id()) &&
+ ith_entry(key_id).is_valid()) {
+ return get_key(ith_entry(key_id).key_pos());
+ }
+ return Key::invalid_key();
+ }
+
+ bool search(const void *ptr, UInt32 length, UInt32 *key_pos = NULL) const {
+ return search_key(static_cast<const UInt8 *>(ptr), length, key_pos);
+ }
+ // Longest prefix match search.
+ bool lcp_search(const void *ptr, UInt32 length,
+ UInt32 *key_pos = NULL) const {
+ return lcp_search_key(static_cast<const UInt8 *>(ptr), length, key_pos);
+ }
+
+ bool remove(UInt32 key_id) {
+ const Key &key = ith_key(key_id);
+ if (key.is_valid()) {
+ return remove(key.ptr(), key.length());
+ }
+ return false;
+ }
+ bool remove(const void *ptr, UInt32 length) {
+ return remove_key(static_cast<const UInt8 *>(ptr), length);
+ }
+
+ bool insert(const void *ptr, UInt32 length, UInt32 *key_pos = NULL) {
+ return insert_key(static_cast<const UInt8 *>(ptr), length, key_pos);
+ }
+
+ bool update(UInt32 key_id, const void *ptr, UInt32 length,
+ UInt32 *key_pos = NULL) {
+ return update_key(ith_key(key_id), static_cast<const UInt8 *>(ptr),
+ length, key_pos);
+ }
+ bool update(const void *src_ptr, UInt32 src_length,
+ const void *dest_ptr, UInt32 dest_length,
+ UInt32 *key_pos = NULL) {
+ UInt32 src_key_pos;
+ if (!search(src_ptr, src_length, &src_key_pos)) {
+ return false;
+ }
+ const Key &src_key = get_key(src_key_pos);
+ return update_key(src_key, static_cast<const UInt8 *>(dest_ptr),
+ dest_length, key_pos);
+ }
+
+ const Node &ith_node(UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= num_nodes());
+ return nodes_[i];
+ }
+ const Block &ith_block(UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= num_blocks());
+ return blocks_[i];
+ }
+ const Entry &ith_entry(UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i < min_key_id());
+ GRN_DAT_DEBUG_THROW_IF(i > max_key_id());
+ return entries_[i];
+ }
+
+ const Header &header() const {
+ return *header_;
+ }
+
+ UInt64 file_size() const {
+ return header_->file_size();
+ }
+ UInt64 virtual_size() const {
+ return sizeof(Header)
+ + (sizeof(Entry) * num_keys())
+ + (sizeof(Block) * num_blocks())
+ + (sizeof(Node) * num_nodes())
+ + total_key_length();
+ }
+ UInt32 total_key_length() const {
+ return header_->total_key_length();
+ }
+ UInt32 num_keys() const {
+ return header_->num_keys();
+ }
+ UInt32 min_key_id() const {
+ return header_->min_key_id();
+ }
+ UInt32 next_key_id() const {
+ return header_->next_key_id();
+ }
+ UInt32 max_key_id() const {
+ return header_->max_key_id();
+ }
+ UInt32 max_num_keys() const {
+ return header_->max_num_keys();
+ }
+ UInt32 num_nodes() const {
+ return header_->num_nodes();
+ }
+ UInt32 num_phantoms() const {
+ return header_->num_phantoms();
+ }
+ UInt32 num_zombies() const {
+ return header_->num_zombies();
+ }
+ UInt32 max_num_nodes() const {
+ return header_->max_num_nodes();
+ }
+ UInt32 num_blocks() const {
+ return header_->num_blocks();
+ }
+ UInt32 max_num_blocks() const {
+ return header_->max_num_blocks();
+ }
+ UInt32 next_key_pos() const {
+ return header_->next_key_pos();
+ }
+ UInt32 key_buf_size() const {
+ return header_->key_buf_size();
+ }
+ UInt32 status_flags() const {
+ return header_->status_flags();
+ }
+
+ void clear_status_flags() {
+ header_->set_status_flags(status_flags() & ~CHANGING_MASK);
+ }
+
+ private:
+ File file_;
+ Header *header_;
+ Array<Node> nodes_;
+ Array<Block> blocks_;
+ Array<Entry> entries_;
+ Array<UInt32> key_buf_;
+
+ void create_file(const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ double num_nodes_per_key,
+ double average_key_length);
+ void create_file(const char *file_name,
+ UInt64 file_size,
+ UInt32 max_num_keys,
+ UInt32 max_num_blocks,
+ UInt32 key_buf_size);
+
+ void open_file(const char *file_name);
+
+ void map_address(void *address);
+
+ void build_from_trie(const Trie &trie);
+ void build_from_trie(const Trie &trie, UInt32 src, UInt32 dest);
+
+ void repair_trie(const Trie &trie);
+ void build_from_keys(const UInt32 *begin, const UInt32 *end,
+ UInt32 depth, UInt32 node_id);
+
+ void mkq_sort(UInt32 *l, UInt32 *r, UInt32 depth);
+ void insertion_sort(UInt32 *l, UInt32 *r, UInt32 depth);
+
+ inline int get_label(UInt32 key_id, UInt32 depth) const;
+ inline int get_median(UInt32 a, UInt32 b, UInt32 c, UInt32 depth) const;
+ inline bool less_than(UInt32 lhs, UInt32 rhs, UInt32 depth) const;
+ inline static void swap_ids(UInt32 *lhs, UInt32 *rhs);
+
+ bool search_key(const UInt8 *ptr, UInt32 length, UInt32 *key_pos) const;
+ bool search_linker(const UInt8 *ptr, UInt32 length,
+ UInt32 &node_id, UInt32 &query_pos) const;
+
+ bool lcp_search_key(const UInt8 *ptr, UInt32 length, UInt32 *key_pos) const;
+
+ bool remove_key(const UInt8 *ptr, UInt32 length);
+
+ bool insert_key(const UInt8 *ptr, UInt32 length, UInt32 *key_pos);
+ bool insert_linker(const UInt8 *ptr, UInt32 length,
+ UInt32 &node_id, UInt32 query_pos);
+
+ bool update_key(const Key &key, const UInt8 *ptr, UInt32 length,
+ UInt32 *key_pos);
+
+ UInt32 insert_node(UInt32 node_id, UInt16 label);
+ UInt32 append_key(const UInt8 *ptr, UInt32 length, UInt32 key_id);
+
+ UInt32 separate(const UInt8 *ptr, UInt32 length,
+ UInt32 node_id, UInt32 i);
+ void resolve(UInt32 node_id, UInt16 label);
+ void migrate_nodes(UInt32 node_id, UInt32 dest_offset,
+ const UInt16 *labels, UInt32 num_labels);
+
+ UInt32 find_offset(const UInt16 *labels, UInt32 num_labels);
+
+ void reserve_node(UInt32 node_id);
+ void reserve_block(UInt32 block_id);
+
+ void update_block_level(UInt32 block_id, UInt32 level);
+ void set_block_level(UInt32 block_id, UInt32 level);
+ void unset_block_level(UInt32 block_id);
+
+ Node &ith_node(UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(i >= num_nodes());
+ return nodes_[i];
+ }
+ Block &ith_block(UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(i >= num_blocks());
+ return blocks_[i];
+ }
+ Entry &ith_entry(UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(i < min_key_id());
+ GRN_DAT_DEBUG_THROW_IF(i > (max_key_id() + 1));
+ return entries_[i];
+ }
+
+ // Disallows copy and assignment.
+ Trie(const Trie &);
+ Trie &operator=(const Trie &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_TRIE_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/dat/vector.hpp b/storage/mroonga/vendor/groonga/lib/dat/vector.hpp
new file mode 100644
index 00000000000..4f32c590e0b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/dat/vector.hpp
@@ -0,0 +1,193 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_DAT_VECTOR_HPP_
+#define GRN_DAT_VECTOR_HPP_
+
+#include "dat.hpp"
+
+#include <new>
+
+namespace grn {
+namespace dat {
+
+template <typename T>
+class GRN_DAT_API Vector {
+ public:
+ Vector() : buf_(NULL), size_(0), capacity_(0) {}
+ ~Vector() {
+ for (UInt32 i = 0; i < size(); ++i) {
+ buf_[i].~T();
+ }
+ delete [] reinterpret_cast<char *>(buf_);
+ }
+
+ const T &operator[](UInt32 i) const {
+ GRN_DAT_DEBUG_THROW_IF(i >= size());
+ return buf_[i];
+ }
+ T &operator[](UInt32 i) {
+ GRN_DAT_DEBUG_THROW_IF(i >= size());
+ return buf_[i];
+ }
+
+ const T &front() const {
+ GRN_DAT_DEBUG_THROW_IF(empty());
+ return buf_[0];
+ }
+ T &front() {
+ GRN_DAT_DEBUG_THROW_IF(empty());
+ return buf_[0];
+ }
+
+ const T &back() const {
+ GRN_DAT_DEBUG_THROW_IF(empty());
+ return buf_[size() - 1];
+ }
+ T &back() {
+ GRN_DAT_DEBUG_THROW_IF(empty());
+ return buf_[size() - 1];
+ }
+
+ const T *begin() const {
+ return buf_;
+ }
+ T *begin() {
+ return buf_;
+ }
+
+ const T *end() const {
+ return buf_ + size_;
+ }
+ T *end() {
+ return buf_ + size_;
+ }
+
+ void push_back() {
+ reserve(size() + 1);
+ new (&buf_[size()]) T;
+ ++size_;
+ }
+ void push_back(const T &x) {
+ reserve(size() + 1);
+ new (&buf_[size()]) T(x);
+ ++size_;
+ }
+
+ void pop_back() {
+ GRN_DAT_DEBUG_THROW_IF(empty());
+ back().~T();
+ --size_;
+ }
+
+ void clear() {
+ resize(0);
+ }
+
+ void resize(UInt32 new_size) {
+ if (new_size > capacity()) {
+ reserve(new_size);
+ }
+ for (UInt32 i = size(); i < new_size; ++i) {
+ new (&buf_[i]) T;
+ }
+ for (UInt32 i = new_size; i < size(); ++i) {
+ buf_[i].~T();
+ }
+ size_ = new_size;
+ }
+ template <typename U>
+ void resize(UInt32 new_size, const U &value) {
+ if (new_size > capacity()) {
+ reserve(new_size);
+ }
+ for (UInt32 i = size(); i < new_size; ++i) {
+ new (&buf_[i]) T(value);
+ }
+ for (UInt32 i = new_size; i < size(); ++i) {
+ buf_[i].~T();
+ }
+ size_ = new_size;
+ }
+
+ void reserve(UInt32 new_capacity) {
+ if (new_capacity <= capacity()) {
+ return;
+ } else if ((new_capacity / 2) < capacity()) {
+ if (capacity() < (MAX_UINT32 / 2)) {
+ new_capacity = capacity() * 2;
+ } else {
+ new_capacity = MAX_UINT32;
+ }
+ }
+
+ T *new_buf = reinterpret_cast<T *>(
+ new (std::nothrow) char[sizeof(new_capacity) * new_capacity]);
+ GRN_DAT_THROW_IF(MEMORY_ERROR, new_buf == NULL);
+
+ for (UInt32 i = 0; i < size(); ++i) {
+ new (&new_buf[i]) T(buf_[i]);
+ }
+ for (UInt32 i = 0; i < size(); ++i) {
+ buf_[i].~T();
+ }
+
+ T *old_buf = buf_;
+ buf_ = new_buf;
+ delete [] reinterpret_cast<char *>(old_buf);
+
+ capacity_ = new_capacity;
+ }
+
+ void swap(Vector *rhs) {
+ T * const temp_buf = buf_;
+ buf_ = rhs->buf_;
+ rhs->buf_ = temp_buf;
+
+ const UInt32 temp_size = size_;
+ size_ = rhs->size_;
+ rhs->size_ = temp_size;
+
+ const UInt32 temp_capacity = capacity_;
+ capacity_ = rhs->capacity_;
+ rhs->capacity_ = temp_capacity;
+ }
+
+ bool empty() const {
+ return size_ == 0;
+ }
+ UInt32 size() const {
+ return size_;
+ }
+ UInt32 capacity() const {
+ return capacity_;
+ }
+
+ private:
+ T *buf_;
+ UInt32 size_;
+ UInt32 capacity_;
+
+ // Disallows copy and assignment.
+ Vector(const Vector &);
+ Vector &operator=(const Vector &);
+};
+
+} // namespace dat
+} // namespace grn
+
+#endif // GRN_DAT_VECTOR_HPP_
diff --git a/storage/mroonga/vendor/groonga/lib/db.c b/storage/mroonga/vendor/groonga/lib/db.c
new file mode 100644
index 00000000000..f948dc7353a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/db.c
@@ -0,0 +1,10802 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include "db.h"
+#include "hash.h"
+#include "pat.h"
+#include "dat.h"
+#include "ii.h"
+#include "ctx_impl.h"
+#include "token.h"
+#include "proc.h"
+#include "plugin_in.h"
+#include "geo.h"
+#include "snip.h"
+#include "string_in.h"
+#include "normalizer_in.h"
+#include "util.h"
+#include <string.h>
+#include <float.h>
+
+typedef struct {
+ grn_id id;
+ unsigned int weight;
+} weight_uvector_entry;
+
+#define IS_WEIGHT_UVECTOR(obj) ((obj)->header.flags & GRN_OBJ_WITH_WEIGHT)
+
+#define NEXT_ADDR(p) (((byte *)(p)) + sizeof(*(p)))
+
+#define GRN_TABLE_GROUPED (0x01<<0)
+#define GRN_TABLE_IS_GROUPED(table)\
+ ((table)->header.impl_flags & GRN_TABLE_GROUPED)
+#define GRN_TABLE_GROUPED_ON(table)\
+ ((table)->header.impl_flags |= GRN_TABLE_GROUPED)
+
+#define WITH_NORMALIZE(table,key,key_size,block) do {\
+ if ((table)->normalizer && key && key_size > 0) {\
+ grn_obj *nstr;\
+ if ((nstr = grn_string_open(ctx, key, key_size,\
+ (table)->normalizer, 0))) {\
+ const char *key;\
+ unsigned int key_size;\
+ grn_string_get_normalized(ctx, nstr, &key, &key_size, NULL);\
+ block\
+ grn_obj_close(ctx, nstr);\
+ }\
+ } else {\
+ block\
+ }\
+} while (0)
+
+inline static grn_id
+grn_table_add_v_inline(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value, int *added);
+inline static void
+grn_table_add_subrec_inline(grn_obj *table, grn_rset_recinfo *ri, int score,
+ grn_rset_posinfo *pi, int dir);
+inline static grn_id
+grn_table_cursor_next_inline(grn_ctx *ctx, grn_table_cursor *tc);
+inline static int
+grn_table_cursor_get_value_inline(grn_ctx *ctx, grn_table_cursor *tc, void **value);
+
+static void grn_obj_ensure_bulk(grn_ctx *ctx, grn_obj *obj);
+static void grn_obj_ensure_vector(grn_ctx *ctx, grn_obj *obj);
+
+inline static void
+gen_pathname(const char *path, char *buffer, int fno)
+{
+ size_t len = strlen(path);
+ memcpy(buffer, path, len);
+ if (fno >= 0) {
+ buffer[len] = '.';
+ grn_itoh(fno, buffer + len + 1, 7);
+ buffer[len + 8] = '\0';
+ } else {
+ buffer[len] = '\0';
+ }
+}
+
+static grn_bool
+is_text_object(grn_obj *object)
+{
+ if (!object) {
+ return GRN_FALSE;
+ }
+
+ if (object->header.type != GRN_BULK) {
+ return GRN_FALSE;
+ }
+
+ switch (object->header.domain) {
+ case GRN_DB_SHORT_TEXT:
+ case GRN_DB_TEXT:
+ case GRN_DB_LONG_TEXT:
+ return GRN_TRUE;
+ default:
+ return GRN_FALSE;
+ }
+}
+
+static void
+limited_size_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *object)
+{
+ unsigned int original_size = 0;
+ unsigned int max_size = GRN_CTX_MSGSIZE / 2;
+
+ if (object) {
+ original_size = GRN_BULK_VSIZE(object);
+ }
+
+ if (original_size > max_size && is_text_object(object)) {
+ grn_text_esc(ctx, buffer, GRN_TEXT_VALUE(object), max_size);
+ GRN_TEXT_PUTS(ctx, buffer, "...(");
+ grn_text_lltoa(ctx, buffer, original_size);
+ GRN_TEXT_PUTS(ctx, buffer, ")");
+ } else {
+ grn_inspect(ctx, buffer, object);
+ }
+}
+
+typedef struct {
+ grn_obj *ptr;
+ uint32_t lock;
+ uint32_t done;
+} db_value;
+
+grn_obj *
+grn_db_create(grn_ctx *ctx, const char *path, grn_db_create_optarg *optarg)
+{
+ grn_db *s;
+ GRN_API_ENTER;
+ if (!path || strlen(path) <= PATH_MAX - 14) {
+ if ((s = GRN_MALLOC(sizeof(grn_db)))) {
+ grn_bool use_default_db_key = GRN_TRUE;
+ grn_bool use_pat_as_db_keys = GRN_FALSE;
+ if (getenv("GRN_DB_KEY")) {
+ if (!strcmp(getenv("GRN_DB_KEY"), "pat")) {
+ use_default_db_key = GRN_FALSE;
+ use_pat_as_db_keys = GRN_TRUE;
+ } else if (!strcmp(getenv("GRN_DB_KEY"), "dat")) {
+ use_default_db_key = GRN_FALSE;
+ }
+ }
+ if (use_default_db_key && !strcmp(GRN_DEFAULT_DB_KEY, "pat")) {
+ use_pat_as_db_keys = GRN_TRUE;
+ }
+ grn_tiny_array_init(ctx, &s->values, sizeof(db_value),
+ GRN_TINY_ARRAY_CLEAR|
+ GRN_TINY_ARRAY_THREADSAFE|
+ GRN_TINY_ARRAY_USE_MALLOC);
+ if (use_pat_as_db_keys) {
+ s->keys = (grn_obj *)grn_pat_create(ctx, path, GRN_TABLE_MAX_KEY_SIZE,
+ 0, GRN_OBJ_KEY_VAR_SIZE);
+ } else {
+ s->keys = (grn_obj *)grn_dat_create(ctx, path, GRN_TABLE_MAX_KEY_SIZE,
+ 0, GRN_OBJ_KEY_VAR_SIZE);
+ }
+ if (s->keys) {
+ CRITICAL_SECTION_INIT(s->lock);
+ GRN_DB_OBJ_SET_TYPE(s, GRN_DB);
+ s->obj.db = (grn_obj *)s;
+ s->obj.header.domain = GRN_ID_NIL;
+ DB_OBJ(&s->obj)->range = GRN_ID_NIL;
+ // prepare builtin classes and load builtin plugins.
+ if (path) {
+ char specs_path[PATH_MAX];
+ gen_pathname(path, specs_path, 0);
+ if ((s->specs = grn_ja_create(ctx, specs_path, 65536, 0))) {
+ grn_ctx_use(ctx, (grn_obj *)s);
+ grn_db_init_builtin_types(ctx);
+ GRN_API_RETURN((grn_obj *)s);
+ } else {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "failed to create specs: <%s>", specs_path);
+ }
+ } else {
+ s->specs = NULL;
+ grn_ctx_use(ctx, (grn_obj *)s);
+ grn_db_init_builtin_types(ctx);
+ GRN_API_RETURN((grn_obj *)s);
+ }
+ if (use_pat_as_db_keys) {
+ grn_pat_close(ctx, (grn_pat *)s->keys);
+ grn_pat_remove(ctx, path);
+ } else {
+ grn_dat_close(ctx, (grn_dat *)s->keys);
+ grn_dat_remove(ctx, path);
+ }
+ }
+ grn_tiny_array_fin(&s->values);
+ GRN_FREE(s);
+ } else {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "grn_db alloc failed");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "too long path");
+ }
+ GRN_API_RETURN(NULL);
+}
+
+grn_obj *
+grn_db_open(grn_ctx *ctx, const char *path)
+{
+ grn_db *s;
+ GRN_API_ENTER;
+ if (path && strlen(path) <= PATH_MAX - 14) {
+ if ((s = GRN_MALLOC(sizeof(grn_db)))) {
+ uint32_t type = grn_io_detect_type(ctx, path);
+ grn_tiny_array_init(ctx, &s->values, sizeof(db_value),
+ GRN_TINY_ARRAY_CLEAR|
+ GRN_TINY_ARRAY_THREADSAFE|
+ GRN_TINY_ARRAY_USE_MALLOC);
+ switch (type) {
+ case GRN_TABLE_PAT_KEY :
+ s->keys = (grn_obj *)grn_pat_open(ctx, path);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ s->keys = (grn_obj *)grn_dat_open(ctx, path);
+ break;
+ default :
+ s->keys = NULL;
+ break;
+ }
+ if (s->keys) {
+ char specs_path[PATH_MAX];
+ gen_pathname(path, specs_path, 0);
+ if ((s->specs = grn_ja_open(ctx, specs_path))) {
+ CRITICAL_SECTION_INIT(s->lock);
+ GRN_DB_OBJ_SET_TYPE(s, GRN_DB);
+ s->obj.db = (grn_obj *)s;
+ s->obj.header.domain = GRN_ID_NIL;
+ DB_OBJ(&s->obj)->range = GRN_ID_NIL;
+ grn_ctx_use(ctx, (grn_obj *)s);
+#ifdef GRN_WITH_MECAB
+ if (grn_db_init_mecab_tokenizer(ctx)) {
+ ERRCLR(ctx);
+ }
+#endif
+ grn_db_init_builtin_tokenizers(ctx);
+ grn_db_init_builtin_normalizers(ctx);
+ grn_db_init_builtin_query(ctx);
+ GRN_API_RETURN((grn_obj *)s);
+ }
+ switch (type) {
+ case GRN_TABLE_PAT_KEY :
+ grn_pat_close(ctx, (grn_pat *)s->keys);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ grn_dat_close(ctx, (grn_dat *)s->keys);
+ break;
+ }
+ }
+ grn_tiny_array_fin(&s->values);
+ GRN_FREE(s);
+ } else {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "grn_db alloc failed");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "inappropriate path");
+ }
+ GRN_API_RETURN(NULL);
+}
+
+static grn_id
+grn_db_curr_id(grn_ctx *ctx, grn_obj *db)
+{
+ grn_id curr_id = GRN_ID_NIL;
+ grn_db *s = (grn_db *)db;
+ switch (s->keys->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ curr_id = grn_pat_curr_id(ctx, (grn_pat *)s->keys);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ curr_id = grn_dat_curr_id(ctx, (grn_dat *)s->keys);
+ break;
+ }
+ return curr_id;
+}
+
+/* s must be validated by caller */
+grn_rc
+grn_db_close(grn_ctx *ctx, grn_obj *db)
+{
+ grn_id id;
+ db_value *vp;
+ grn_db *s = (grn_db *)db;
+ grn_bool ctx_used_db;
+ if (!s) { return GRN_INVALID_ARGUMENT; }
+ GRN_API_ENTER;
+
+ ctx_used_db = ctx->impl && ctx->impl->db == db;
+ if (ctx_used_db) {
+ grn_ctx_loader_clear(ctx);
+ if (ctx->impl->parser) {
+ grn_expr_parser_close(ctx);
+ }
+ }
+
+ GRN_TINY_ARRAY_EACH(&s->values, 1, grn_db_curr_id(ctx, db), id, vp, {
+ if (vp->ptr) { grn_obj_close(ctx, vp->ptr); }
+ });
+
+ if (ctx_used_db) {
+ if (ctx->impl->values) {
+ grn_db_obj *o;
+ GRN_ARRAY_EACH(ctx, ctx->impl->values, 0, 0, id, &o, {
+ grn_obj_close(ctx, *((grn_obj **)o));
+ });
+ grn_array_truncate(ctx, ctx->impl->values);
+ }
+ }
+
+/* grn_tiny_array_fin should be refined.. */
+#ifdef WIN32
+ {
+ grn_tiny_array *a = &s->values;
+ CRITICAL_SECTION_FIN(a->lock);
+ }
+#endif
+ grn_tiny_array_fin(&s->values);
+
+ switch (s->keys->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ grn_pat_close(ctx, (grn_pat *)s->keys);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ grn_dat_close(ctx, (grn_dat *)s->keys);
+ break;
+ }
+ CRITICAL_SECTION_FIN(s->lock);
+ if (s->specs) { grn_ja_close(ctx, s->specs); }
+ GRN_FREE(s);
+
+ if (ctx_used_db) {
+ grn_cache *cache;
+ cache = grn_cache_current_get(ctx);
+ if (cache) {
+ grn_cache_expire(cache, -1);
+ }
+ ctx->impl->db = NULL;
+ }
+
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_obj *
+grn_ctx_get(grn_ctx *ctx, const char *name, int name_size)
+{
+ grn_id id;
+ grn_obj *obj = NULL;
+ grn_obj *db;
+ if (!ctx || !ctx->impl || !(db = ctx->impl->db)) {
+ return NULL;
+ }
+ GRN_API_ENTER;
+ if (GRN_DB_P(db)) {
+ grn_db *s = (grn_db *)db;
+ if (name_size < 0) {
+ name_size = strlen(name);
+ }
+ if ((id = grn_table_get(ctx, s->keys, name, name_size))) {
+ obj = grn_ctx_at(ctx, id);
+ }
+ }
+ GRN_API_RETURN(obj);
+}
+
+grn_obj *
+grn_ctx_db(grn_ctx *ctx)
+{
+ return (ctx && ctx->impl) ? ctx->impl->db : NULL;
+}
+
+grn_obj *
+grn_db_keys(grn_obj *s)
+{
+ return (grn_obj *)(((grn_db *)s)->keys);
+}
+
+static grn_io*
+grn_obj_io(grn_obj *obj)
+{
+ grn_io *io = NULL;
+ if (obj) {
+ if (obj->header.type == GRN_DB) { obj = ((grn_db *)obj)->keys; }
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ io = ((grn_pat *)obj)->io;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ io = ((grn_dat *)obj)->io;
+ break;
+ case GRN_TABLE_HASH_KEY :
+ io = ((grn_hash *)obj)->io;
+ break;
+ case GRN_TABLE_NO_KEY :
+ io = ((grn_array *)obj)->io;
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ io = ((grn_ja *)obj)->io;
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ io = ((grn_ra *)obj)->io;
+ break;
+ case GRN_COLUMN_INDEX :
+ io = ((grn_ii *)obj)->seg;
+ break;
+ }
+ }
+ return io;
+}
+
+uint32_t
+grn_db_lastmod(grn_obj *s)
+{
+ return grn_obj_io(((grn_db *)s)->keys)->header->lastmod;
+}
+
+void
+grn_db_touch(grn_ctx *ctx, grn_obj *s)
+{
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ grn_obj_io(s)->header->lastmod = tv.tv_sec;
+}
+
+#define IS_TEMP(obj) (DB_OBJ(obj)->id & GRN_OBJ_TMP_OBJECT)
+
+void
+grn_obj_touch(grn_ctx *ctx, grn_obj *obj, grn_timeval *tv)
+{
+ grn_timeval tv_;
+ if (!tv) {
+ grn_timeval_now(ctx, &tv_);
+ tv = &tv_;
+ }
+ if (obj) {
+ switch (obj->header.type) {
+ case GRN_DB :
+ grn_obj_io(obj)->header->lastmod = tv->tv_sec;
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ case GRN_COLUMN_VAR_SIZE :
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_INDEX :
+ if (!IS_TEMP(obj)) {
+ grn_obj_io(DB_OBJ(obj)->db)->header->lastmod = tv->tv_sec;
+ }
+ break;
+ }
+ }
+}
+
+grn_rc
+grn_db_check_name(grn_ctx *ctx, const char *name, unsigned int name_size)
+{
+ int len;
+ const char *name_end = name + name_size;
+ if (name_size > 0 &&
+ *name == GRN_DB_PSEUDO_COLUMN_PREFIX) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ while (name < name_end) {
+ char c = *name;
+ if ((unsigned int)((c | 0x20) - 'a') >= 26u &&
+ (unsigned int)(c - '0') >= 10u &&
+ c != '_' &&
+ c != '-' &&
+ c != '#' &&
+ c != '@') {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (!(len = grn_charlen(ctx, name, name_end))) { break; }
+ name += len;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_type_create(grn_ctx *ctx, const char *name, unsigned int name_size,
+ grn_obj_flags flags, unsigned int size)
+{
+ grn_id id;
+ struct _grn_type *res = NULL;
+ grn_obj *db;
+ if (!ctx || !ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return NULL;
+ }
+ GRN_API_ENTER;
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[type][create]", name, name_size);
+ GRN_API_RETURN(NULL);
+ }
+ if (!GRN_DB_P(db)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid db assigned");
+ GRN_API_RETURN(NULL);
+ }
+ id = grn_obj_register(ctx, db, name, name_size);
+ if (id && (res = GRN_MALLOC(sizeof(grn_db_obj)))) {
+ GRN_DB_OBJ_SET_TYPE(res, GRN_TYPE);
+ res->obj.header.flags = flags;
+ res->obj.header.domain = GRN_ID_NIL;
+ GRN_TYPE_SIZE(&res->obj) = size;
+ if (grn_db_obj_init(ctx, db, id, DB_OBJ(res))) {
+ // grn_obj_delete(ctx, db, id);
+ GRN_FREE(res);
+ GRN_API_RETURN(NULL);
+ }
+ }
+ GRN_API_RETURN((grn_obj *)res);
+}
+
+static grn_obj *
+grn_type_open(grn_ctx *ctx, grn_obj_spec *spec)
+{
+ struct _grn_type *res;
+ res = GRN_MALLOC(sizeof(struct _grn_type));
+ if (res) {
+ GRN_DB_OBJ_SET_TYPE(res, GRN_TYPE);
+ res->obj.header = spec->header;
+ GRN_TYPE_SIZE(&res->obj) = GRN_TYPE_SIZE(spec);
+ }
+ return (grn_obj *)res;
+}
+
+grn_obj *
+grn_proc_create(grn_ctx *ctx, const char *name, int name_size, grn_proc_type type,
+ grn_proc_func *init, grn_proc_func *next, grn_proc_func *fin,
+ unsigned int nvars, grn_expr_var *vars)
+{
+ grn_proc *res = NULL;
+ grn_id id = GRN_ID_NIL;
+ grn_id range = GRN_ID_NIL;
+ int added = 0;
+ grn_obj *db;
+ const char *path = ctx->impl->plugin_path;
+ if (!ctx || !ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return NULL;
+ }
+ GRN_API_ENTER;
+ if (path) {
+ range = grn_plugin_reference(ctx, path);
+ }
+ if (name_size < 0) {
+ name_size = strlen(name);
+ }
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[proc][create]", name, name_size);
+ GRN_API_RETURN(NULL);
+ }
+ if (!GRN_DB_P(db)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid db assigned");
+ GRN_API_RETURN(NULL);
+ }
+ if (name && name_size) {
+ grn_db *s = (grn_db *)db;
+ if (!(id = grn_table_get(ctx, s->keys, name, name_size))) {
+ if (!(id = grn_table_add(ctx, s->keys, name, name_size, &added))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "grn_table_add failed");
+ GRN_API_RETURN(NULL);
+ }
+ }
+ if (!added) {
+ db_value *vp;
+ if ((vp = grn_tiny_array_at(&s->values, id)) && (res = (grn_proc *)vp->ptr)) {
+ if (res->funcs[PROC_INIT] ||
+ res->funcs[PROC_NEXT] ||
+ res->funcs[PROC_FIN]) {
+ ERR(GRN_INVALID_ARGUMENT, "already used name");
+ GRN_API_RETURN(NULL);
+ }
+ } else {
+ added = 1;
+ }
+ }
+ } else if (ctx->impl && ctx->impl->values) {
+ id = grn_array_add(ctx, ctx->impl->values, NULL) | GRN_OBJ_TMP_OBJECT;
+ added = 1;
+ }
+ if (!res) { res = GRN_MALLOCN(grn_proc, 1); }
+ if (res) {
+ GRN_DB_OBJ_SET_TYPE(res, GRN_PROC);
+ res->obj.db = db;
+ res->obj.id = id;
+ res->obj.header.domain = GRN_ID_NIL;
+ res->obj.header.flags = path ? GRN_OBJ_CUSTOM_NAME : 0;
+ res->obj.range = range;
+ res->type = type;
+ res->funcs[PROC_INIT] = init;
+ res->funcs[PROC_NEXT] = next;
+ res->funcs[PROC_FIN] = fin;
+ res->selector = NULL;
+ GRN_TEXT_INIT(&res->name_buf, 0);
+ res->vars = NULL;
+ res->nvars = 0;
+ if (added) {
+ if (grn_db_obj_init(ctx, db, id, DB_OBJ(res))) {
+ // grn_obj_delete(ctx, db, id);
+ GRN_FREE(res);
+ GRN_API_RETURN(NULL);
+ }
+ }
+ while (nvars--) {
+ grn_obj *v = grn_expr_add_var(ctx, (grn_obj *)res, vars->name, vars->name_size);
+ GRN_OBJ_INIT(v, vars->value.header.type, 0, vars->value.header.domain);
+ GRN_TEXT_PUT(ctx, v, GRN_TEXT_VALUE(&vars->value), GRN_TEXT_LEN(&vars->value));
+ vars++;
+ }
+ }
+ GRN_API_RETURN((grn_obj *)res);
+}
+
+/* grn_table */
+
+static void
+calc_rec_size(grn_obj_flags flags, uint32_t max_n_subrecs, uint32_t range_size,
+ uint8_t *subrec_size, uint8_t *subrec_offset,
+ uint32_t *key_size, uint32_t *value_size)
+{
+ *subrec_size = 0;
+ *subrec_offset = 0;
+ if (flags & GRN_OBJ_WITH_SUBREC) {
+ switch (flags & GRN_OBJ_UNIT_MASK) {
+ case GRN_OBJ_UNIT_DOCUMENT_NONE :
+ break;
+ case GRN_OBJ_UNIT_DOCUMENT_SECTION :
+ *subrec_offset = sizeof(grn_id);
+ *subrec_size = sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_DOCUMENT_POSITION :
+ *subrec_offset = sizeof(grn_id);
+ *subrec_size = sizeof(uint32_t) + sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_SECTION_NONE :
+ *key_size += sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_SECTION_POSITION :
+ *key_size += sizeof(uint32_t);
+ *subrec_offset = sizeof(grn_id) + sizeof(uint32_t);
+ *subrec_size = sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_POSITION_NONE :
+ *key_size += sizeof(uint32_t) + sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_USERDEF_DOCUMENT :
+ *subrec_size = range_size;
+ break;
+ case GRN_OBJ_UNIT_USERDEF_SECTION :
+ *subrec_size = range_size + sizeof(uint32_t);
+ break;
+ case GRN_OBJ_UNIT_USERDEF_POSITION :
+ *subrec_size = range_size + sizeof(uint32_t) + sizeof(uint32_t);
+ break;
+ }
+ *value_size = (uintptr_t)GRN_RSET_SUBRECS_NTH((((grn_rset_recinfo *)0)->subrecs),
+ *subrec_size, max_n_subrecs);
+ } else {
+ *value_size = range_size;
+ }
+}
+
+static void _grn_obj_remove(grn_ctx *ctx, grn_obj *obj);
+
+static grn_rc
+grn_table_create_validate(grn_ctx *ctx, const char *name, unsigned int name_size,
+ const char *path, grn_obj_flags flags,
+ grn_obj *key_type, grn_obj *value_type)
+{
+ switch (flags & GRN_OBJ_TABLE_TYPE_MASK) {
+ case GRN_OBJ_TABLE_HASH_KEY :
+ if (flags & GRN_OBJ_KEY_WITH_SIS) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] "
+ "key with SIS isn't available for hash table: <%.*s>",
+ name_size, name);
+ }
+ break;
+ case GRN_OBJ_TABLE_PAT_KEY :
+ break;
+ case GRN_OBJ_TABLE_DAT_KEY :
+ break;
+ case GRN_OBJ_TABLE_NO_KEY :
+ if (key_type) {
+ int key_name_size;
+ char key_name[GRN_TABLE_MAX_KEY_SIZE];
+ key_name_size = grn_obj_name(ctx, key_type, key_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] "
+ "key isn't available for no key table: <%.*s> (%.*s)",
+ name_size, name, key_name_size, key_name);
+ } else if (flags & GRN_OBJ_KEY_WITH_SIS) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] "
+ "key with SIS isn't available for no key table: <%.*s>",
+ name_size, name);
+ } else if (flags & GRN_OBJ_KEY_NORMALIZE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] "
+ "key normalization isn't available for no key table: <%.*s>",
+ name_size, name);
+ }
+ break;
+ }
+ return ctx->rc;
+}
+
+static grn_obj *
+grn_table_create_with_max_n_subrecs(grn_ctx *ctx, const char *name,
+ unsigned int name_size, const char *path,
+ grn_obj_flags flags, grn_obj *key_type,
+ grn_obj *value_type, uint32_t max_n_subrecs)
+{
+ grn_id id;
+ grn_id domain = GRN_ID_NIL, range = GRN_ID_NIL;
+ uint32_t key_size, value_size = 0, range_size = 0;
+ uint8_t subrec_size, subrec_offset;
+ grn_obj *res = NULL;
+ grn_obj *db;
+ char buffer[PATH_MAX];
+ if (!ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "[table][create] db not initialized");
+ return NULL;
+ }
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[table][create]", name, name_size);
+ return NULL;
+ }
+ if (!GRN_DB_P(db)) {
+ ERR(GRN_INVALID_ARGUMENT, "[table][create] invalid db assigned");
+ return NULL;
+ }
+ if (grn_table_create_validate(ctx, name, name_size, path, flags,
+ key_type, value_type)) {
+ return NULL;
+ }
+ if (key_type) {
+ domain = DB_OBJ(key_type)->id;
+ switch (key_type->header.type) {
+ case GRN_TYPE :
+ {
+ grn_db_obj *t = (grn_db_obj *)key_type;
+ flags |= t->header.flags;
+ key_size = GRN_TYPE_SIZE(t);
+ if (key_size > GRN_TABLE_MAX_KEY_SIZE) {
+ int type_name_size;
+ char type_name[GRN_TABLE_MAX_KEY_SIZE];
+ type_name_size = grn_obj_name(ctx, key_type, type_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] key size too big: <%.*s> <%.*s>(%u) (max:%u)",
+ name_size, name,
+ type_name_size, type_name,
+ key_size, GRN_TABLE_MAX_KEY_SIZE);
+ return NULL;
+ }
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ key_size = sizeof(grn_id);
+ break;
+ default :
+ {
+ int key_name_size;
+ char key_name[GRN_TABLE_MAX_KEY_SIZE];
+ key_name_size = grn_obj_name(ctx, key_type, key_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] key type must be type or table: <%.*s> (%.*s)",
+ name_size, name, key_name_size, key_name);
+ return NULL;
+ }
+ break;
+ }
+ } else {
+ key_size = (flags & GRN_OBJ_KEY_VAR_SIZE) ? GRN_TABLE_MAX_KEY_SIZE : sizeof(grn_id);
+ }
+ if (value_type) {
+ range = DB_OBJ(value_type)->id;
+ switch (value_type->header.type) {
+ case GRN_TYPE :
+ {
+ grn_db_obj *t = (grn_db_obj *)value_type;
+ if (t->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ int type_name_size;
+ char type_name[GRN_TABLE_MAX_KEY_SIZE];
+ type_name_size = grn_obj_name(ctx, value_type, type_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] value type must be fixed size: <%.*s> (%.*s)",
+ name_size, name, type_name_size, type_name);
+ return NULL;
+ }
+ range_size = GRN_TYPE_SIZE(t);
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ range_size = sizeof(grn_id);
+ break;
+ default :
+ {
+ int value_name_size;
+ char value_name[GRN_TABLE_MAX_KEY_SIZE];
+ value_name_size = grn_obj_name(ctx, value_type, value_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] value type must be type or table: <%.*s> (%.*s)",
+ name_size, name, value_name_size, value_name);
+ return NULL;
+ }
+ break;
+ }
+ }
+
+ id = grn_obj_register(ctx, db, name, name_size);
+ if (ERRP(ctx, GRN_ERROR)) { return NULL; }
+ if (GRN_OBJ_PERSISTENT & flags) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "DDL:table_create %.*s", name_size, name);
+ if (!path) {
+ if (GRN_DB_PERSISTENT_P(db)) {
+ gen_pathname(grn_obj_io(db)->path, buffer, id);
+ path = buffer;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "path not assigned for persistent table");
+ return NULL;
+ }
+ } else {
+ flags |= GRN_OBJ_CUSTOM_NAME;
+ }
+ } else {
+ if (path) {
+ ERR(GRN_INVALID_ARGUMENT, "path assigned for temporary table");
+ return NULL;
+ }
+ if (GRN_DB_PERSISTENT_P(db) && name && name_size) {
+ ERR(GRN_INVALID_ARGUMENT, "name assigned for temporary table");
+ return NULL;
+ }
+ }
+ calc_rec_size(flags, max_n_subrecs, range_size, &subrec_size,
+ &subrec_offset, &key_size, &value_size);
+ switch (flags & GRN_OBJ_TABLE_TYPE_MASK) {
+ case GRN_OBJ_TABLE_HASH_KEY :
+ res = (grn_obj *)grn_hash_create(ctx, path, key_size, value_size, flags);
+ break;
+ case GRN_OBJ_TABLE_PAT_KEY :
+ res = (grn_obj *)grn_pat_create(ctx, path, key_size, value_size, flags);
+ break;
+ case GRN_OBJ_TABLE_DAT_KEY :
+ res = (grn_obj *)grn_dat_create(ctx, path, key_size, value_size, flags);
+ break;
+ case GRN_OBJ_TABLE_NO_KEY :
+ domain = range;
+ res = (grn_obj *)grn_array_create(ctx, path, value_size, flags);
+ break;
+ }
+ if (res) {
+ DB_OBJ(res)->header.impl_flags = 0;
+ DB_OBJ(res)->header.domain = domain;
+ DB_OBJ(res)->range = range;
+ DB_OBJ(res)->max_n_subrecs = max_n_subrecs;
+ DB_OBJ(res)->subrec_size = subrec_size;
+ DB_OBJ(res)->subrec_offset = subrec_offset;
+ if (grn_db_obj_init(ctx, db, id, DB_OBJ(res))) {
+ _grn_obj_remove(ctx, res);
+ res = NULL;
+ }
+ } else {
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ }
+ return res;
+}
+
+grn_obj *
+grn_table_create(grn_ctx *ctx, const char *name, unsigned int name_size,
+ const char *path, grn_obj_flags flags,
+ grn_obj *key_type, grn_obj *value_type)
+{
+ grn_obj *res;
+ GRN_API_ENTER;
+ res = grn_table_create_with_max_n_subrecs(ctx, name, name_size, path,
+ flags, key_type, value_type, 0);
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_table_create_for_group(grn_ctx *ctx, const char *name,
+ unsigned int name_size, const char *path,
+ grn_obj *group_key, grn_obj *value_type,
+ unsigned int max_n_subrecs)
+{
+ grn_obj *res = NULL;
+ grn_obj *key_type;
+ GRN_API_ENTER;
+ key_type = grn_ctx_at(ctx, grn_obj_get_range(ctx, group_key));
+ if (key_type) {
+ res = grn_table_create_with_max_n_subrecs(ctx, name, name_size, path,
+ GRN_TABLE_HASH_KEY|
+ GRN_OBJ_WITH_SUBREC|
+ GRN_OBJ_UNIT_USERDEF_DOCUMENT,
+ key_type, value_type, max_n_subrecs);
+ }
+ GRN_API_RETURN(res);
+}
+
+unsigned int
+grn_table_get_subrecs(grn_ctx *ctx, grn_obj *table, grn_id id,
+ grn_id *subrecbuf, int *scorebuf, int buf_size)
+{
+ unsigned int count = 0;
+ GRN_API_ENTER;
+ if (GRN_OBJ_TABLEP(table)) {
+ uint32_t value_size;
+ grn_rset_recinfo *ri;
+ uint32_t subrec_size = DB_OBJ(table)->subrec_size;
+ uint32_t max_n_subrecs = DB_OBJ(table)->max_n_subrecs;
+ if (subrec_size < sizeof(grn_id)) { goto exit; }
+ if (!max_n_subrecs) { goto exit; }
+ ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, table, id, &value_size);
+ if (ri) {
+ byte *psubrec = (byte *)ri->subrecs;
+ uint32_t n_subrecs = (uint32_t)GRN_RSET_N_SUBRECS(ri);
+ uint32_t limit = value_size / (GRN_RSET_SCORE_SIZE + subrec_size);
+ if (limit > buf_size) {
+ limit = buf_size;
+ }
+ if (limit > n_subrecs) {
+ limit = n_subrecs;
+ }
+ if (limit > max_n_subrecs) {
+ limit = max_n_subrecs;
+ }
+ for (; count < limit; count++) {
+ if (scorebuf) {
+ scorebuf[count] = *((int *)psubrec);
+ }
+ psubrec += GRN_RSET_SCORE_SIZE;
+ if (subrecbuf) {
+ subrecbuf[count] = *((grn_id *)psubrec);
+ }
+ psubrec += subrec_size;
+ }
+ }
+ }
+exit :
+ GRN_API_RETURN(count);
+}
+
+grn_obj *
+grn_table_open(grn_ctx *ctx, const char *name, unsigned int name_size, const char *path)
+{
+ grn_obj *db;
+ if (!ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return NULL;
+ }
+ GRN_API_ENTER;
+ if (!GRN_DB_P(db)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid db assigned");
+ GRN_API_RETURN(NULL);
+ } else {
+ grn_obj *res = grn_ctx_get(ctx, name, name_size);
+ if (res) {
+ const char *path2 = grn_obj_path(ctx, res);
+ if (path && (!path2 || strcmp(path, path2))) {
+ ERR(GRN_INVALID_ARGUMENT, "path unmatch");
+ GRN_API_RETURN(NULL);
+ }
+ } else if (path) {
+ uint32_t type = grn_io_detect_type(ctx, path);
+ if (!type) { GRN_API_RETURN(NULL); }
+ switch (type) {
+ case GRN_TABLE_HASH_KEY :
+ res = (grn_obj *)grn_hash_open(ctx, path);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ res = (grn_obj *)grn_pat_open(ctx, path);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ res = (grn_obj *)grn_dat_open(ctx, path);
+ break;
+ case GRN_TABLE_NO_KEY :
+ res = (grn_obj *)grn_array_open(ctx, path);
+ break;
+ }
+ if (res) {
+ grn_id id = grn_obj_register(ctx, db, name, name_size);
+ res->header.flags |= GRN_OBJ_CUSTOM_NAME;
+ res->header.domain = GRN_ID_NIL; /* unknown */
+ DB_OBJ(res)->range = GRN_ID_NIL; /* unknown */
+ grn_db_obj_init(ctx, db, id, DB_OBJ(res));
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "path is missing");
+ }
+ GRN_API_RETURN(res);
+ }
+}
+
+grn_id
+grn_table_lcp_search(grn_ctx *ctx, grn_obj *table, const void *key, unsigned int key_size)
+{
+ grn_id id = GRN_ID_NIL;
+ GRN_API_ENTER;
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ {
+ grn_pat *pat = (grn_pat *)table;
+ WITH_NORMALIZE(pat, key, key_size, {
+ id = grn_pat_lcp_search(ctx, pat, key, key_size);
+ });
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, key, key_size, {
+ id = grn_dat_lcp_search(ctx, dat, key, key_size);
+ });
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ {
+ grn_hash *hash = (grn_hash *)table;
+ WITH_NORMALIZE(hash, key, key_size, {
+ id = grn_hash_get(ctx, hash, key, key_size, NULL);
+ });
+ }
+ break;
+ }
+ GRN_API_RETURN(id);
+}
+
+typedef struct {
+ grn_id target;
+ unsigned int section;
+} default_set_value_hook_data;
+
+struct _grn_hook {
+ grn_hook *next;
+ grn_proc *proc;
+ uint32_t hld_size;
+};
+
+static grn_obj *
+default_set_value_hook(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ if (!pctx) {
+ ERR(GRN_INVALID_ARGUMENT, "default_set_value_hook failed");
+ } else {
+ grn_obj *flags = grn_ctx_pop(ctx);
+ grn_obj *newvalue = grn_ctx_pop(ctx);
+ grn_obj *oldvalue = grn_ctx_pop(ctx);
+ grn_obj *id = grn_ctx_pop(ctx);
+ grn_hook *h = pctx->currh;
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(h);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ int section = data->section;
+ if (flags) { /* todo */ }
+ if (target) {
+ switch (target->header.type) {
+ case GRN_COLUMN_INDEX :
+ grn_ii_column_update(ctx, (grn_ii *)target,
+ GRN_UINT32_VALUE(id),
+ section, oldvalue, newvalue, NULL);
+ }
+ }
+ }
+ return NULL;
+}
+
+grn_id
+grn_table_add(grn_ctx *ctx, grn_obj *table, const void *key, unsigned int key_size, int *added)
+{
+ grn_id id = GRN_ID_NIL;
+ GRN_API_ENTER;
+ if (table) {
+ int added_ = 0;
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ {
+ grn_pat *pat = (grn_pat *)table;
+ WITH_NORMALIZE(pat, key, key_size, {
+ if (pat->io && !(pat->io->flags & GRN_IO_TEMPORARY)) {
+ if (grn_io_lock(ctx, pat->io, grn_lock_timeout)) {
+ id = GRN_ID_NIL;
+ } else {
+ id = grn_pat_add(ctx, pat, key, key_size, NULL, &added_);
+ grn_io_unlock(pat->io);
+ }
+ } else {
+ id = grn_pat_add(ctx, pat, key, key_size, NULL, &added_);
+ }
+ });
+ if (added) { *added = added_; }
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, key, key_size, {
+ if (dat->io && !(dat->io->flags & GRN_IO_TEMPORARY)) {
+ if (grn_io_lock(ctx, dat->io, grn_lock_timeout)) {
+ id = GRN_ID_NIL;
+ } else {
+ id = grn_dat_add(ctx, dat, key, key_size, NULL, &added_);
+ grn_io_unlock(dat->io);
+ }
+ } else {
+ id = grn_dat_add(ctx, dat, key, key_size, NULL, &added_);
+ }
+ });
+ if (added) { *added = added_; }
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ {
+ grn_hash *hash = (grn_hash *)table;
+ WITH_NORMALIZE(hash, key, key_size, {
+ if (hash->io && !(hash->io->flags & GRN_IO_TEMPORARY)) {
+ if (grn_io_lock(ctx, hash->io, grn_lock_timeout)) {
+ id = GRN_ID_NIL;
+ } else {
+ id = grn_hash_add(ctx, hash, key, key_size, NULL, &added_);
+ grn_io_unlock(hash->io);
+ }
+ } else {
+ id = grn_hash_add(ctx, hash, key, key_size, NULL, &added_);
+ }
+ });
+ if (added) { *added = added_; }
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_array *array = (grn_array *)table;
+ if (array->io && !(array->io->flags & GRN_IO_TEMPORARY)) {
+ if (grn_io_lock(ctx, array->io, grn_lock_timeout)) {
+ id = GRN_ID_NIL;
+ } else {
+ id = grn_array_add(ctx, array, NULL);
+ grn_io_unlock(array->io);
+ }
+ } else {
+ id = grn_array_add(ctx, array, NULL);
+ }
+ added_ = id ? 1 : 0;
+ if (added) { *added = added_; }
+ }
+ break;
+ }
+ if (added_) {
+ grn_hook *hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT];
+ if (hooks) {
+ // todo : grn_proc_ctx_open()
+ grn_obj id_, flags_, oldvalue_, value_;
+ grn_proc_ctx pctx = {{0}, hooks->proc, NULL, hooks, hooks, PROC_INIT, 4, 4};
+ GRN_UINT32_INIT(&id_, 0);
+ GRN_UINT32_INIT(&flags_, 0);
+ GRN_TEXT_INIT(&oldvalue_, 0);
+ GRN_TEXT_INIT(&value_, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&value_, key, key_size);
+ GRN_UINT32_SET(ctx, &id_, id);
+ GRN_UINT32_SET(ctx, &flags_, GRN_OBJ_SET);
+ while (hooks) {
+ grn_ctx_push(ctx, &id_);
+ grn_ctx_push(ctx, &oldvalue_);
+ grn_ctx_push(ctx, &value_);
+ grn_ctx_push(ctx, &flags_);
+ pctx.caller = NULL;
+ pctx.currh = hooks;
+ if (hooks->proc) {
+ hooks->proc->funcs[PROC_INIT](ctx, 1, &table, &pctx.user_data);
+ } else {
+ default_set_value_hook(ctx, 1, &table, &pctx.user_data);
+ }
+ if (ctx->rc) { break; }
+ hooks = hooks->next;
+ pctx.offset++;
+ }
+ }
+ }
+ }
+ GRN_API_RETURN(id);
+}
+
+grn_id
+grn_table_get_by_key(grn_ctx *ctx, grn_obj *table, grn_obj *key)
+{
+ grn_id id = GRN_ID_NIL;
+ if (table->header.domain == key->header.domain) {
+ id = grn_table_get(ctx, table, GRN_TEXT_VALUE(key), GRN_TEXT_LEN(key));
+ } else {
+ grn_rc rc;
+ grn_obj buf;
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, table->header.domain);
+ if ((rc = grn_obj_cast(ctx, key, &buf, GRN_TRUE))) {
+ ERR(rc, "cast failed");
+ } else {
+ id = grn_table_get(ctx, table, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ return id;
+}
+
+grn_id
+grn_table_add_by_key(grn_ctx *ctx, grn_obj *table, grn_obj *key, int *added)
+{
+ grn_id id = GRN_ID_NIL;
+ if (table->header.domain == key->header.domain) {
+ id = grn_table_add(ctx, table, GRN_TEXT_VALUE(key), GRN_TEXT_LEN(key), added);
+ } else {
+ grn_rc rc;
+ grn_obj buf;
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, table->header.domain);
+ if ((rc = grn_obj_cast(ctx, key, &buf, GRN_TRUE))) {
+ ERR(rc, "cast failed");
+ } else {
+ id = grn_table_add(ctx, table, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf), added);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ return id;
+}
+
+grn_id
+grn_table_get(grn_ctx *ctx, grn_obj *table, const void *key, unsigned int key_size)
+{
+ grn_id id = GRN_ID_NIL;
+ GRN_API_ENTER;
+ if (table) {
+ if (table->header.type == GRN_DB) {
+ grn_db *db = (grn_db *)table;
+ table = db->keys;
+ }
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ WITH_NORMALIZE((grn_pat *)table, key, key_size, {
+ id = grn_pat_get(ctx, (grn_pat *)table, key, key_size, NULL);
+ });
+ break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_get(ctx, (grn_dat *)table, key, key_size, NULL);
+ });
+ break;
+ case GRN_TABLE_HASH_KEY :
+ WITH_NORMALIZE((grn_hash *)table, key, key_size, {
+ id = grn_hash_get(ctx, (grn_hash *)table, key, key_size, NULL);
+ });
+ break;
+ }
+ }
+ GRN_API_RETURN(id);
+}
+
+grn_id
+grn_table_at(grn_ctx *ctx, grn_obj *table, grn_id id)
+{
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_DB :
+ {
+ grn_db *db = (grn_db *)table;
+ id = grn_table_at(ctx, db->keys, id);
+ }
+ break;
+ case GRN_TABLE_PAT_KEY :
+ id = grn_pat_at(ctx, (grn_pat *)table, id);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ id = grn_dat_at(ctx, (grn_dat *)table, id);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ id = grn_hash_at(ctx, (grn_hash *)table, id);
+ break;
+ case GRN_TABLE_NO_KEY :
+ id = grn_array_at(ctx, (grn_array *)table, id);
+ break;
+ default :
+ id = GRN_ID_NIL;
+ }
+ }
+ GRN_API_RETURN(id);
+}
+
+inline static grn_id
+grn_table_add_v_inline(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value, int *added)
+{
+ grn_id id = GRN_ID_NIL;
+ if (!key || !key_size) { return GRN_ID_NIL; }
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ WITH_NORMALIZE((grn_pat *)table, key, key_size, {
+ id = grn_pat_add(ctx, (grn_pat *)table, key, key_size, value, added);
+ });
+ break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_add(ctx, (grn_dat *)table, key, key_size, value, added);
+ });
+ break;
+ case GRN_TABLE_HASH_KEY :
+ WITH_NORMALIZE((grn_hash *)table, key, key_size, {
+ id = grn_hash_add(ctx, (grn_hash *)table, key, key_size, value, added);
+ });
+ break;
+ case GRN_TABLE_NO_KEY :
+ id = grn_array_add(ctx, (grn_array *)table, value);
+ if (added) { *added = id ? 1 : 0; }
+ break;
+ }
+ }
+ return id;
+}
+
+grn_id
+grn_table_add_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value, int *added) {
+ grn_id id;
+ GRN_API_ENTER;
+ id = grn_table_add_v_inline(ctx, table, key, key_size, value, added);
+ GRN_API_RETURN(id);
+}
+
+grn_id
+grn_table_get_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value)
+{
+ grn_id id = GRN_ID_NIL;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ WITH_NORMALIZE((grn_pat *)table, key, key_size, {
+ id = grn_pat_get(ctx, (grn_pat *)table, key, key_size, value);
+ });
+ break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ id = grn_dat_get(ctx, (grn_dat *)table, key, key_size, value);
+ });
+ break;
+ case GRN_TABLE_HASH_KEY :
+ WITH_NORMALIZE((grn_hash *)table, key, key_size, {
+ id = grn_hash_get(ctx, (grn_hash *)table, key, key_size, value);
+ });
+ break;
+ }
+ }
+ GRN_API_RETURN(id);
+}
+
+int
+grn_table_get_key(grn_ctx *ctx, grn_obj *table, grn_id id, void *keybuf, int buf_size)
+{
+ int r = 0;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ r = grn_hash_get_key(ctx, (grn_hash *)table, id, keybuf, buf_size);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ r = grn_pat_get_key(ctx, (grn_pat *)table, id, keybuf, buf_size);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ r = grn_dat_get_key(ctx, (grn_dat *)table, id, keybuf, buf_size);
+ break;
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_array *a = (grn_array *)table;
+ if (a->obj.header.domain) {
+ if (buf_size >= a->value_size) {
+ r = grn_array_get_value(ctx, a, id, keybuf);
+ } else {
+ r = a->value_size;
+ }
+ }
+ }
+ break;
+ }
+ }
+ GRN_API_RETURN(r);
+}
+
+int
+grn_table_get_key2(grn_ctx *ctx, grn_obj *table, grn_id id, grn_obj *bulk)
+{
+ int r = 0;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ r = grn_hash_get_key2(ctx, (grn_hash *)table, id, bulk);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ r = grn_pat_get_key2(ctx, (grn_pat *)table, id, bulk);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ r = grn_dat_get_key2(ctx, (grn_dat *)table, id, bulk);
+ break;
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_array *a = (grn_array *)table;
+ if (a->obj.header.domain) {
+ if (!grn_bulk_space(ctx, bulk, a->value_size)) {
+ char *curr = GRN_BULK_CURR(bulk);
+ r = grn_array_get_value(ctx, a, id, curr - a->value_size);
+ }
+ }
+ }
+ break;
+ }
+ }
+ GRN_API_RETURN(r);
+}
+
+static grn_rc
+grn_obj_clear_value(grn_ctx *ctx, grn_obj *obj, grn_id id)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_DB_OBJP(obj)) {
+ grn_obj buf;
+ grn_id range = DB_OBJ(obj)->range;
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ switch (obj->header.type) {
+ case GRN_COLUMN_VAR_SIZE :
+ case GRN_COLUMN_FIX_SIZE :
+ rc = grn_obj_set_value(ctx, obj, id, &buf, GRN_OBJ_SET);
+ break;
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ return rc;
+}
+
+static void
+call_delete_hook(grn_ctx *ctx, grn_obj *table, grn_id rid, const void *key, unsigned int key_size)
+{
+ if (rid) {
+ grn_hook *hooks = DB_OBJ(table)->hooks[GRN_HOOK_DELETE];
+ if (hooks) {
+ // todo : grn_proc_ctx_open()
+ grn_obj id_, flags_, oldvalue_, value_;
+ grn_proc_ctx pctx = {{0}, hooks->proc, NULL, hooks, hooks, PROC_INIT, 4, 4};
+ GRN_UINT32_INIT(&id_, 0);
+ GRN_UINT32_INIT(&flags_, 0);
+ GRN_TEXT_INIT(&oldvalue_, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_INIT(&value_, 0);
+ GRN_TEXT_SET_REF(&oldvalue_, key, key_size);
+ GRN_UINT32_SET(ctx, &id_, rid);
+ GRN_UINT32_SET(ctx, &flags_, GRN_OBJ_SET);
+ while (hooks) {
+ grn_ctx_push(ctx, &id_);
+ grn_ctx_push(ctx, &oldvalue_);
+ grn_ctx_push(ctx, &value_);
+ grn_ctx_push(ctx, &flags_);
+ pctx.caller = NULL;
+ pctx.currh = hooks;
+ if (hooks->proc) {
+ hooks->proc->funcs[PROC_INIT](ctx, 1, &table, &pctx.user_data);
+ } else {
+ default_set_value_hook(ctx, 1, &table, &pctx.user_data);
+ }
+ if (ctx->rc) { break; }
+ hooks = hooks->next;
+ pctx.offset++;
+ }
+ }
+ }
+}
+
+static void
+clear_column_values(grn_ctx *ctx, grn_obj *table, grn_id rid)
+{
+ if (rid) {
+ grn_hash *cols;
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) { grn_obj_clear_value(ctx, col, rid); }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ }
+}
+
+static void
+delete_reference_records_in_index(grn_ctx *ctx, grn_obj *table, grn_id id,
+ grn_obj *index)
+{
+ grn_ii *ii = (grn_ii *)index;
+ grn_ii_cursor *ii_cursor = NULL;
+ grn_ii_posting *posting;
+ grn_obj source_ids;
+ unsigned int i, n_ids;
+ grn_obj sources;
+ grn_bool have_reference_source = GRN_FALSE;
+
+ GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR);
+ GRN_PTR_INIT(&sources, GRN_OBJ_VECTOR, 0);
+
+ grn_obj_get_info(ctx, index, GRN_INFO_SOURCE, &source_ids);
+ n_ids = GRN_BULK_VSIZE(&source_ids) / sizeof(grn_id);
+ if (n_ids == 0) {
+ goto exit;
+ }
+
+ for (i = 0; i < n_ids; i++) {
+ grn_id source_id;
+ grn_obj *source;
+
+ source_id = GRN_UINT32_VALUE_AT(&source_ids, i);
+ source = grn_ctx_at(ctx, source_id);
+ if (grn_obj_get_range(ctx, source) == index->header.domain) {
+ GRN_PTR_PUT(ctx, &sources, source);
+ have_reference_source = GRN_TRUE;
+ } else {
+ grn_obj_unlink(ctx, source);
+ GRN_PTR_PUT(ctx, &sources, NULL);
+ }
+ }
+
+ if (!have_reference_source) {
+ goto exit;
+ }
+
+ ii_cursor = grn_ii_cursor_open(ctx, ii, id, GRN_ID_NIL, GRN_ID_MAX,
+ ii->n_elements, 0);
+ if (!ii_cursor) {
+ goto exit;
+ }
+
+ while ((posting = grn_ii_cursor_next(ctx, ii_cursor))) {
+ grn_obj *source = GRN_PTR_VALUE_AT(&sources, posting->sid - 1);
+ if (!source) {
+ continue;
+ }
+ switch (source->header.type) {
+ case GRN_COLUMN_VAR_SIZE :
+ switch (source->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_SCALAR :
+ grn_obj_clear_value(ctx, source, posting->rid);
+ break;
+ case GRN_OBJ_COLUMN_VECTOR :
+ {
+ grn_obj value;
+ grn_obj new_value;
+ GRN_TEXT_INIT(&value, 0);
+ grn_obj_get_value(ctx, source, posting->rid, &value);
+ if (value.header.type == GRN_UVECTOR) {
+ int i, n_ids;
+ GRN_RECORD_INIT(&new_value, GRN_OBJ_VECTOR, value.header.domain);
+ n_ids = GRN_BULK_VSIZE(&value) / sizeof(grn_id);
+ for (i = 0; i < n_ids; i++) {
+ grn_id reference_id = GRN_RECORD_VALUE_AT(&value, i);
+ if (reference_id == id) {
+ continue;
+ }
+ GRN_RECORD_PUT(ctx, &new_value, reference_id);
+ }
+ } else {
+ unsigned int i, n_elements;
+ GRN_TEXT_INIT(&new_value, GRN_OBJ_VECTOR);
+ n_elements = grn_vector_size(ctx, &value);
+ for (i = 0; i < n_elements; i++) {
+ const char *content;
+ unsigned int content_length;
+ unsigned int weight;
+ grn_id domain;
+ content_length =
+ grn_vector_get_element(ctx, &value, i,
+ &content, &weight, &domain);
+ if (grn_table_get(ctx, table, content, content_length) == id) {
+ continue;
+ }
+ grn_vector_add_element(ctx, &new_value, content, content_length,
+ weight, domain);
+ }
+ }
+ grn_obj_set_value(ctx, source, posting->rid, &new_value,
+ GRN_OBJ_SET);
+ GRN_OBJ_FIN(ctx, &new_value);
+ GRN_OBJ_FIN(ctx, &value);
+ }
+ break;
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ grn_obj_clear_value(ctx, source, posting->rid);
+ break;
+ }
+ }
+
+exit:
+ if (ii_cursor) {
+ grn_ii_cursor_close(ctx, ii_cursor);
+ }
+ grn_obj_unlink(ctx, &source_ids);
+ {
+ int i, n_sources;
+ n_sources = GRN_BULK_VSIZE(&sources) / sizeof(grn_obj *);
+ for (i = 0; i < n_sources; i++) {
+ grn_obj *source = GRN_PTR_VALUE_AT(&sources, i);
+ grn_obj_unlink(ctx, source);
+ }
+ grn_obj_unlink(ctx, &sources);
+ }
+}
+
+static grn_rc
+delete_reference_records(grn_ctx *ctx, grn_obj *table, grn_id id)
+{
+ grn_hash *cols;
+ grn_id *key;
+
+ cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ if (!cols) {
+ return ctx->rc;
+ }
+
+ if (!grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) {
+ grn_hash_close(ctx, cols);
+ return ctx->rc;
+ }
+
+ GRN_HASH_EACH(ctx, cols, tid, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (!col) {
+ continue;
+ }
+ if (col->header.type != GRN_COLUMN_INDEX) {
+ grn_obj_unlink(ctx, col);
+ continue;
+ }
+ delete_reference_records_in_index(ctx, table, id, col);
+ grn_obj_unlink(ctx, col);
+ if (ctx->rc != GRN_SUCCESS) {
+ break;
+ }
+ });
+
+ grn_hash_close(ctx, cols);
+
+ return ctx->rc;
+}
+
+grn_rc
+grn_table_delete(grn_ctx *ctx, grn_obj *table, const void *key, unsigned int key_size)
+{
+ grn_id rid = GRN_ID_NIL;
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (table) {
+ if (key && key_size) { rid = grn_table_get(ctx, table, key, key_size); }
+ if (rid) {
+ rc = delete_reference_records(ctx, table, rid);
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ call_delete_hook(ctx, table, rid, key, key_size);
+ clear_column_values(ctx, table, rid);
+ switch (table->header.type) {
+ case GRN_DB :
+ /* todo : delete tables and columns from db */
+ break;
+ case GRN_TABLE_PAT_KEY :
+ WITH_NORMALIZE((grn_pat *)table, key, key_size, {
+ grn_pat *pat = (grn_pat *)table;
+ if (pat->io && !(pat->io->flags & GRN_IO_TEMPORARY)) {
+ if (!(rc = grn_io_lock(ctx, pat->io, grn_lock_timeout))) {
+ rc = grn_pat_delete(ctx, pat, key, key_size, NULL);
+ grn_io_unlock(pat->io);
+ }
+ } else {
+ rc = grn_pat_delete(ctx, pat, key, key_size, NULL);
+ }
+ });
+ break;
+ case GRN_TABLE_DAT_KEY :
+ WITH_NORMALIZE((grn_dat *)table, key, key_size, {
+ grn_dat *dat = (grn_dat *)table;
+ if (dat->io && !(dat->io->flags & GRN_IO_TEMPORARY)) {
+ if (!(rc = grn_io_lock(ctx, dat->io, grn_lock_timeout))) {
+ rc = grn_dat_delete(ctx, dat, key, key_size, NULL);
+ grn_io_unlock(dat->io);
+ }
+ } else {
+ rc = grn_dat_delete(ctx, dat, key, key_size, NULL);
+ }
+ });
+ break;
+ case GRN_TABLE_HASH_KEY :
+ WITH_NORMALIZE((grn_hash *)table, key, key_size, {
+ grn_hash *hash = (grn_hash *)table;
+ if (hash->io && !(hash->io->flags & GRN_IO_TEMPORARY)) {
+ if (!(rc = grn_io_lock(ctx, hash->io, grn_lock_timeout))) {
+ rc = grn_hash_delete(ctx, hash, key, key_size, NULL);
+ grn_io_unlock(hash->io);
+ }
+ } else {
+ rc = grn_hash_delete(ctx, hash, key, key_size, NULL);
+ }
+ });
+ break;
+ }
+ grn_obj_touch(ctx, table, NULL);
+ }
+ }
+exit:
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+_grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ if (table) {
+ const void *key;
+ unsigned int key_size;
+ if (id) {
+ rc = delete_reference_records(ctx, table, id);
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ if ((key = _grn_table_key(ctx, table, id, &key_size))) {
+ call_delete_hook(ctx, table, id, key, key_size);
+ }
+ // todo : support optarg
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ rc = grn_pat_delete_by_id(ctx, (grn_pat *)table, id, optarg);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ rc = grn_dat_delete_by_id(ctx, (grn_dat *)table, id, optarg);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ rc = grn_hash_delete_by_id(ctx, (grn_hash *)table, id, optarg);
+ break;
+ case GRN_TABLE_NO_KEY :
+ rc = grn_array_delete_by_id(ctx, (grn_array *)table, id, optarg);
+ break;
+ }
+ if (rc == GRN_SUCCESS) {
+ clear_column_values(ctx, table, id);
+ }
+ }
+ }
+exit:
+ return rc;
+}
+
+grn_rc
+grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id)
+{
+ grn_rc rc;
+ grn_io *io;
+ GRN_API_ENTER;
+ if ((io = grn_obj_io(table)) && !(io->flags & GRN_IO_TEMPORARY)) {
+ if (!(rc = grn_io_lock(ctx, io, grn_lock_timeout))) {
+ rc = _grn_table_delete_by_id(ctx, table, id, NULL);
+ grn_io_unlock(io);
+ }
+ } else {
+ rc = _grn_table_delete_by_id(ctx, table, id, NULL);
+ }
+ grn_obj_touch(ctx, table, NULL);
+ GRN_API_RETURN(rc);
+}
+
+grn_rc grn_ii_truncate(grn_ctx *ctx, grn_ii *ii);
+grn_rc grn_ja_truncate(grn_ctx *ctx, grn_ja *ja);
+grn_rc grn_ra_truncate(grn_ctx *ctx, grn_ra *ra);
+
+grn_rc
+grn_column_truncate(grn_ctx *ctx, grn_obj *column)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (column) {
+ grn_hook *hooks;
+ switch (column->header.type) {
+ case GRN_COLUMN_INDEX :
+ rc = grn_ii_truncate(ctx, (grn_ii *)column);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ for (hooks = DB_OBJ(column)->hooks[GRN_HOOK_SET]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if ((rc = grn_ii_truncate(ctx, (grn_ii *)target))) { goto exit; }
+ }
+ rc = grn_ja_truncate(ctx, (grn_ja *)column);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ for (hooks = DB_OBJ(column)->hooks[GRN_HOOK_SET]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if ((rc = grn_ii_truncate(ctx, (grn_ii *)target))) { goto exit; }
+ }
+ rc = grn_ra_truncate(ctx, (grn_ra *)column);
+ break;
+ }
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_truncate(grn_ctx *ctx, grn_obj *table)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (table) {
+ grn_hook *hooks;
+ grn_hash *cols;
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj token_filters;
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) { grn_column_truncate(ctx, col); }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ grn_table_get_info(ctx, table, NULL, NULL, &tokenizer, &normalizer, NULL);
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_obj_get_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters);
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if ((rc = grn_ii_truncate(ctx, (grn_ii *)target))) { goto exit; }
+ }
+ rc = grn_pat_truncate(ctx, (grn_pat *)table);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if ((rc = grn_ii_truncate(ctx, (grn_ii *)target))) { goto exit; }
+ }
+ rc = grn_dat_truncate(ctx, (grn_dat *)table);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ for (hooks = DB_OBJ(table)->hooks[GRN_HOOK_INSERT]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if ((rc = grn_ii_truncate(ctx, (grn_ii *)target))) { goto exit; }
+ }
+ rc = grn_hash_truncate(ctx, (grn_hash *)table);
+ break;
+ case GRN_TABLE_NO_KEY :
+ rc = grn_array_truncate(ctx, (grn_array *)table);
+ break;
+ }
+ grn_obj_set_info(ctx, table, GRN_INFO_DEFAULT_TOKENIZER, tokenizer);
+ grn_obj_set_info(ctx, table, GRN_INFO_NORMALIZER, normalizer);
+ grn_obj_set_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters);
+ GRN_OBJ_FIN(ctx, &token_filters);
+ grn_obj_touch(ctx, table, NULL);
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags,
+ grn_encoding *encoding, grn_obj **tokenizer,
+ grn_obj **normalizer,
+ grn_obj **token_filters)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ if (flags) { *flags = ((grn_pat *)table)->obj.header.flags; }
+ if (encoding) { *encoding = ((grn_pat *)table)->encoding; }
+ if (tokenizer) { *tokenizer = ((grn_pat *)table)->tokenizer; }
+ if (normalizer) { *normalizer = ((grn_pat *)table)->normalizer; }
+ if (token_filters) { *token_filters = &(((grn_pat *)table)->token_filters); }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ if (flags) { *flags = ((grn_dat *)table)->obj.header.flags; }
+ if (encoding) { *encoding = ((grn_dat *)table)->encoding; }
+ if (tokenizer) { *tokenizer = ((grn_dat *)table)->tokenizer; }
+ if (normalizer) { *normalizer = ((grn_dat *)table)->normalizer; }
+ if (token_filters) { *token_filters = &(((grn_dat *)table)->token_filters); }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_HASH_KEY :
+ if (flags) { *flags = ((grn_hash *)table)->obj.header.flags; }
+ if (encoding) { *encoding = ((grn_hash *)table)->encoding; }
+ if (tokenizer) { *tokenizer = ((grn_hash *)table)->tokenizer; }
+ if (normalizer) { *normalizer = ((grn_hash *)table)->normalizer; }
+ if (token_filters) { *token_filters = &(((grn_hash *)table)->token_filters); }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (flags) { *flags = 0; }
+ if (encoding) { *encoding = GRN_ENC_NONE; }
+ if (tokenizer) { *tokenizer = grn_token_uvector; }
+ if (normalizer) { *normalizer = NULL; }
+ if (token_filters) { *token_filters = NULL; }
+ rc = GRN_SUCCESS;
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+unsigned int
+grn_table_size(grn_ctx *ctx, grn_obj *table)
+{
+ unsigned int n = 0;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_DB :
+ n = grn_table_size(ctx, ((grn_db *)table)->keys);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ n = grn_pat_size(ctx, (grn_pat *)table);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ n = grn_dat_size(ctx, (grn_dat *)table);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ n = GRN_HASH_SIZE((grn_hash *)table);
+ break;
+ case GRN_TABLE_NO_KEY :
+ n = GRN_ARRAY_SIZE((grn_array *)table);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "not supported");
+ break;
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid table assigned");
+ }
+ GRN_API_RETURN(n);
+}
+
+inline static void
+subrecs_push(byte *subrecs, int size, int n_subrecs, int score, void *body, int dir)
+{
+ byte *v;
+ int *c2;
+ int n = n_subrecs - 1, n2;
+ while (n) {
+ n2 = (n - 1) >> 1;
+ c2 = GRN_RSET_SUBRECS_NTH(subrecs,size,n2);
+ if (GRN_RSET_SUBRECS_CMP(score, *c2, dir) >= 0) { break; }
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ }
+ v = subrecs + n * (GRN_RSET_SCORE_SIZE + size);
+ *((int *)v) = score;
+ memcpy(v + GRN_RSET_SCORE_SIZE, body, size);
+}
+
+inline static void
+subrecs_replace_min(byte *subrecs, int size, int n_subrecs, int score, void *body, int dir)
+{
+ byte *v;
+ int n = 0, n1, n2, *c1, *c2;
+ for (;;) {
+ n1 = n * 2 + 1;
+ n2 = n1 + 1;
+ c1 = n1 < n_subrecs ? GRN_RSET_SUBRECS_NTH(subrecs,size,n1) : NULL;
+ c2 = n2 < n_subrecs ? GRN_RSET_SUBRECS_NTH(subrecs,size,n2) : NULL;
+ if (c1 && GRN_RSET_SUBRECS_CMP(score, *c1, dir) > 0) {
+ if (c2 &&
+ GRN_RSET_SUBRECS_CMP(score, *c2, dir) > 0 &&
+ GRN_RSET_SUBRECS_CMP(*c1, *c2, dir) > 0) {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ } else {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c1);
+ n = n1;
+ }
+ } else {
+ if (c2 && GRN_RSET_SUBRECS_CMP(score, *c2, dir) > 0) {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ } else {
+ break;
+ }
+ }
+ }
+ v = subrecs + n * (GRN_RSET_SCORE_SIZE + size);
+ memcpy(v, &score, GRN_RSET_SCORE_SIZE);
+ memcpy(v + GRN_RSET_SCORE_SIZE, body, size);
+}
+
+inline static void
+grn_table_add_subrec_inline(grn_obj *table, grn_rset_recinfo *ri, int score,
+ grn_rset_posinfo *pi, int dir)
+{
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ int limit = DB_OBJ(table)->max_n_subrecs;
+ ri->score += score;
+ ri->n_subrecs += 1;
+ if (limit) {
+ int subrec_size = DB_OBJ(table)->subrec_size;
+ int n_subrecs = GRN_RSET_N_SUBRECS(ri);
+ if (pi) {
+ byte *body = (byte *)pi + DB_OBJ(table)->subrec_offset;
+ if (limit < n_subrecs) {
+ if (GRN_RSET_SUBRECS_CMP(score, *ri->subrecs, dir) > 0) {
+ subrecs_replace_min((byte *)ri->subrecs, subrec_size, limit, score, body, dir);
+ }
+ } else {
+ subrecs_push((byte *)ri->subrecs, subrec_size, n_subrecs, score, body, dir);
+ }
+ }
+ }
+ }
+}
+
+void
+grn_table_add_subrec(grn_obj *table, grn_rset_recinfo *ri, int score,
+ grn_rset_posinfo *pi, int dir)
+{
+ grn_table_add_subrec_inline(table, ri, score, pi, dir);
+}
+
+grn_table_cursor *
+grn_table_cursor_open(grn_ctx *ctx, grn_obj *table,
+ const void *min, unsigned int min_size,
+ const void *max, unsigned int max_size,
+ int offset, int limit, int flags)
+{
+ grn_rc rc;
+ grn_table_cursor *tc = NULL;
+ unsigned int table_size;
+ if (!table) { return tc; }
+ GRN_API_ENTER;
+ table_size = grn_table_size(ctx, table);
+ if (flags & GRN_CURSOR_PREFIX) {
+ if (offset < 0) {
+ ERR(GRN_TOO_SMALL_OFFSET,
+ "can't use negative offset with GRN_CURSOR_PREFIX: %d", offset);
+ } else if (offset != 0 && offset >= table_size) {
+ ERR(GRN_TOO_LARGE_OFFSET,
+ "offset is rather than table size: offset:%d, table_size:%d",
+ offset, table_size);
+ } else {
+ if (limit < -1) {
+ ERR(GRN_TOO_SMALL_LIMIT,
+ "can't use small limit rather than -1 with GRN_CURSOR_PREFIX: %d",
+ limit);
+ } else if (limit == -1) {
+ limit = table_size;
+ }
+ }
+ } else {
+ rc = grn_normalize_offset_and_limit(ctx, table_size, &offset, &limit);
+ if (rc) {
+ ERR(rc, "grn_normalize_offset_and_limit failed");
+ }
+ }
+ if (!ctx->rc) {
+ if (table->header.type == GRN_DB) { table = ((grn_db *)table)->keys; }
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ {
+ grn_pat *pat = (grn_pat *)table;
+ WITH_NORMALIZE(pat, min, min_size, {
+ WITH_NORMALIZE(pat, max, max_size, {
+ grn_pat_cursor *pat_cursor;
+ pat_cursor = grn_pat_cursor_open(ctx, pat,
+ min, min_size,
+ max, max_size,
+ offset, limit, flags);
+ tc = (grn_table_cursor *)pat_cursor;
+ });
+ });
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, min, min_size, {
+ WITH_NORMALIZE(dat, max, max_size, {
+ grn_dat_cursor *dat_cursor;
+ dat_cursor = grn_dat_cursor_open(ctx, dat,
+ min, min_size,
+ max, max_size,
+ offset, limit, flags);
+ tc = (grn_table_cursor *)dat_cursor;
+ });
+ });
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ {
+ grn_hash *hash = (grn_hash *)table;
+ WITH_NORMALIZE(hash, min, min_size, {
+ WITH_NORMALIZE(hash, max, max_size, {
+ grn_hash_cursor *hash_cursor;
+ hash_cursor = grn_hash_cursor_open(ctx, hash,
+ min, min_size,
+ max, max_size,
+ offset, limit, flags);
+ tc = (grn_table_cursor *)hash_cursor;
+ });
+ });
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ tc = (grn_table_cursor *)grn_array_cursor_open(ctx, (grn_array *)table,
+ GRN_ID_NIL, GRN_ID_NIL,
+ offset, limit, flags);
+ break;
+ }
+ }
+ if (tc) {
+ grn_id id = grn_obj_register(ctx, ctx->impl->db, NULL, 0);
+ DB_OBJ(tc)->header.domain = GRN_ID_NIL;
+ DB_OBJ(tc)->range = GRN_ID_NIL;
+ grn_db_obj_init(ctx, ctx->impl->db, id, DB_OBJ(tc));
+ }
+ GRN_API_RETURN(tc);
+}
+
+grn_table_cursor *
+grn_table_cursor_open_by_id(grn_ctx *ctx, grn_obj *table,
+ grn_id min, grn_id max, int flags)
+{
+ grn_table_cursor *tc = NULL;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ tc = (grn_table_cursor *)grn_pat_cursor_open(ctx, (grn_pat *)table,
+ NULL, 0, NULL, 0, 0, -1, flags);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ tc = (grn_table_cursor *)grn_dat_cursor_open(ctx, (grn_dat *)table,
+ NULL, 0, NULL, 0, 0, -1, flags);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ tc = (grn_table_cursor *)grn_hash_cursor_open(ctx, (grn_hash *)table,
+ NULL, 0, NULL, 0, 0, -1, flags);
+ break;
+ case GRN_TABLE_NO_KEY :
+ tc = (grn_table_cursor *)grn_array_cursor_open(ctx, (grn_array *)table,
+ min, max, 0, -1, flags);
+ break;
+ }
+ }
+ GRN_API_RETURN(tc);
+}
+
+grn_rc
+grn_table_cursor_close(grn_ctx *ctx, grn_table_cursor *tc)
+{
+ grn_rc rc = GRN_SUCCESS;
+ GRN_API_ENTER;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ {
+ if (DB_OBJ(tc)->finalizer) {
+ DB_OBJ(tc)->finalizer(ctx, 1, (grn_obj **)&tc, &DB_OBJ(tc)->user_data);
+ }
+ if (DB_OBJ(tc)->source) {
+ GRN_FREE(DB_OBJ(tc)->source);
+ }
+ /*
+ grn_hook_entry entry;
+ for (entry = 0; entry < N_HOOK_ENTRIES; entry++) {
+ grn_hook_free(ctx, DB_OBJ(tc)->hooks[entry]);
+ }
+ */
+ grn_obj_delete_by_id(ctx, DB_OBJ(tc)->db, DB_OBJ(tc)->id, GRN_FALSE);
+ }
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ grn_pat_cursor_close(ctx, (grn_pat_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ grn_dat_cursor_close(ctx, (grn_dat_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ grn_hash_cursor_close(ctx, (grn_hash_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ grn_array_cursor_close(ctx, (grn_array_cursor *)tc);
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+inline static grn_id
+grn_table_cursor_next_inline(grn_ctx *ctx, grn_table_cursor *tc)
+{
+ grn_id id = GRN_ID_NIL;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ id = grn_pat_cursor_next(ctx, (grn_pat_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ id = grn_dat_cursor_next(ctx, (grn_dat_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ id = grn_hash_cursor_next(ctx, (grn_hash_cursor *)tc);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ id = grn_array_cursor_next(ctx, (grn_array_cursor *)tc);
+ break;
+ case GRN_CURSOR_COLUMN_INDEX :
+ {
+ grn_posting *ip = grn_index_cursor_next(ctx, (grn_obj *)tc, NULL);
+ if (ip) { id = ip->rid; }
+ }
+ break;
+ }
+ }
+ return id;
+}
+
+grn_id
+grn_table_cursor_next(grn_ctx *ctx, grn_table_cursor *tc)
+{
+ grn_id id;
+ GRN_API_ENTER;
+ id = grn_table_cursor_next_inline(ctx, tc);
+ GRN_API_RETURN(id);
+}
+
+int
+grn_table_cursor_get_key(grn_ctx *ctx, grn_table_cursor *tc, void **key)
+{
+ int len = 0;
+ GRN_API_ENTER;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ len = grn_pat_cursor_get_key(ctx, (grn_pat_cursor *)tc, key);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ len = grn_dat_cursor_get_key(ctx, (grn_dat_cursor *)tc, (const void **)key);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ len = grn_hash_cursor_get_key(ctx, (grn_hash_cursor *)tc, key);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type %d", tc->header.type);
+ break;
+ }
+ }
+ GRN_API_RETURN(len);
+}
+
+inline static int
+grn_table_cursor_get_value_inline(grn_ctx *ctx, grn_table_cursor *tc, void **value)
+{
+ int len = 0;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ len = grn_pat_cursor_get_value(ctx, (grn_pat_cursor *)tc, value);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ *value = NULL;
+ len = 0;
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ len = grn_hash_cursor_get_value(ctx, (grn_hash_cursor *)tc, value);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ len = grn_array_cursor_get_value(ctx, (grn_array_cursor *)tc, value);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type %d", tc->header.type);
+ break;
+ }
+ }
+ return len;
+}
+
+int
+grn_table_cursor_get_value(grn_ctx *ctx, grn_table_cursor *tc, void **value)
+{
+ int len;
+ GRN_API_ENTER;
+ len = grn_table_cursor_get_value_inline(ctx, tc, value);
+ GRN_API_RETURN(len);
+}
+
+grn_rc
+grn_table_cursor_set_value(grn_ctx *ctx, grn_table_cursor *tc,
+ const void *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ rc = grn_pat_cursor_set_value(ctx, (grn_pat_cursor *)tc, value, flags);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ rc = grn_hash_cursor_set_value(ctx, (grn_hash_cursor *)tc, value, flags);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ rc = grn_array_cursor_set_value(ctx, (grn_array_cursor *)tc, value, flags);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type %d", tc->header.type);
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_cursor_delete(grn_ctx *ctx, grn_table_cursor *tc)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ rc = grn_pat_cursor_delete(ctx, (grn_pat_cursor *)tc, NULL);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ rc = grn_hash_cursor_delete(ctx, (grn_hash_cursor *)tc, NULL);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ rc = grn_array_cursor_delete(ctx, (grn_array_cursor *)tc, NULL);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type %d", tc->header.type);
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_obj *
+grn_table_cursor_table(grn_ctx *ctx, grn_table_cursor *tc)
+{
+ grn_obj *obj = NULL;
+ GRN_API_ENTER;
+ if (!tc) {
+ ERR(GRN_INVALID_ARGUMENT, "tc is null");
+ } else {
+ switch (tc->header.type) {
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ obj = (grn_obj *)(((grn_pat_cursor *)tc)->pat);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ obj = (grn_obj *)(((grn_dat_cursor *)tc)->dat);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ obj = (grn_obj *)(((grn_hash_cursor *)tc)->hash);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ obj = (grn_obj *)(((grn_array_cursor *)tc)->array);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type %d", tc->header.type);
+ break;
+ }
+ }
+ GRN_API_RETURN(obj);
+}
+
+typedef struct {
+ grn_db_obj obj;
+ grn_obj *index;
+ grn_table_cursor *tc;
+ grn_ii_cursor *iic;
+ grn_id tid;
+ grn_id rid_min;
+ grn_id rid_max;
+ int flags;
+} grn_index_cursor;
+
+grn_obj *
+grn_index_cursor_open(grn_ctx *ctx, grn_table_cursor *tc,
+ grn_obj *index, grn_id rid_min, grn_id rid_max, int flags)
+{
+ grn_index_cursor *ic = NULL;
+ GRN_API_ENTER;
+ if (tc && (ic = GRN_MALLOCN(grn_index_cursor, 1))) {
+ ic->tc = tc;
+ ic->index = index;
+ ic->iic = NULL;
+ ic->tid = GRN_ID_NIL;
+ ic->rid_min = rid_min;
+ ic->rid_max = rid_max;
+ ic->flags = flags;
+ GRN_DB_OBJ_SET_TYPE(ic, GRN_CURSOR_COLUMN_INDEX);
+ {
+ grn_id id = grn_obj_register(ctx, ctx->impl->db, NULL, 0);
+ DB_OBJ(ic)->header.domain = GRN_ID_NIL;
+ DB_OBJ(ic)->range = GRN_ID_NIL;
+ grn_db_obj_init(ctx, ctx->impl->db, id, DB_OBJ(ic));
+ }
+ }
+ GRN_API_RETURN((grn_obj *)ic);
+}
+
+grn_posting *
+grn_index_cursor_next(grn_ctx *ctx, grn_obj *c, grn_id *tid)
+{
+ grn_ii_posting *ip = NULL;
+ grn_index_cursor *ic = (grn_index_cursor *)c;
+ GRN_API_ENTER;
+ if (ic->iic) {
+ if (ic->flags & GRN_OBJ_WITH_POSITION) {
+ ip = grn_ii_cursor_next_pos(ctx, ic->iic);
+ while (!ip && grn_ii_cursor_next(ctx, ic->iic)) {
+ ip = grn_ii_cursor_next_pos(ctx, ic->iic);
+ break;
+ }
+ } else {
+ ip = grn_ii_cursor_next(ctx, ic->iic);
+ }
+ }
+ if (!ip) {
+ while ((ic->tid = grn_table_cursor_next_inline(ctx, ic->tc))) {
+ grn_ii *ii = (grn_ii *)ic->index;
+ if (ic->iic) { grn_ii_cursor_close(ctx, ic->iic); }
+ if ((ic->iic = grn_ii_cursor_open(ctx, ii, ic->tid,
+ ic->rid_min, ic->rid_max,
+ ii->n_elements, ic->flags))) {
+ ip = grn_ii_cursor_next(ctx, ic->iic);
+ if (ip && ic->flags & GRN_OBJ_WITH_POSITION) {
+ ip = grn_ii_cursor_next_pos(ctx, ic->iic);
+ }
+ if (ip) {
+ break;
+ }
+ }
+ }
+ }
+ if (tid) { *tid = ic->tid; }
+ GRN_API_RETURN((grn_posting *)ip);
+}
+
+grn_rc
+grn_table_search(grn_ctx *ctx, grn_obj *table, const void *key, uint32_t key_size,
+ grn_operator mode, grn_obj *res, grn_operator op)
+{
+ grn_rc rc = GRN_SUCCESS;
+ GRN_API_ENTER;
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ {
+ grn_pat *pat = (grn_pat *)table;
+ WITH_NORMALIZE(pat, key, key_size, {
+ switch (mode) {
+ case GRN_OP_EXACT :
+ {
+ grn_id id = grn_pat_get(ctx, pat, key, key_size, NULL);
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ }
+ // todo : support op;
+ break;
+ case GRN_OP_LCP :
+ {
+ grn_id id = grn_pat_lcp_search(ctx, pat, key, key_size);
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ }
+ // todo : support op;
+ break;
+ case GRN_OP_SUFFIX :
+ rc = grn_pat_suffix_search(ctx, pat, key, key_size, (grn_hash *)res);
+ // todo : support op;
+ break;
+ case GRN_OP_PREFIX :
+ rc = grn_pat_prefix_search(ctx, pat, key, key_size, (grn_hash *)res);
+ // todo : support op;
+ break;
+ case GRN_OP_TERM_EXTRACT :
+ {
+ int len;
+ grn_id tid;
+ const char *sp = key;
+ const char *se = sp + key_size;
+ for (; sp < se; sp += len) {
+ if ((tid = grn_pat_lcp_search(ctx, pat, sp, se - sp))) {
+ grn_table_add(ctx, res, &tid, sizeof(grn_id), NULL);
+ /* todo : nsubrec++ if GRN_OBJ_TABLE_SUBSET assigned */
+ }
+ if (!(len = grn_charlen(ctx, sp, se))) { break; }
+ }
+ }
+ // todo : support op;
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "invalid mode %d", mode);
+ }
+ });
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_dat *dat = (grn_dat *)table;
+ WITH_NORMALIZE(dat, key, key_size, {
+ switch (mode) {
+ case GRN_OP_EXACT :
+ {
+ grn_id id = grn_dat_get(ctx, dat, key, key_size, NULL);
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ }
+ break;
+ case GRN_OP_PREFIX :
+ {
+ grn_dat_cursor *dc = grn_dat_cursor_open(ctx, dat, key, key_size, NULL, 0,
+ 0, -1, GRN_CURSOR_PREFIX);
+ if (dc) {
+ grn_id id;
+ while ((id = grn_dat_cursor_next(ctx, dc))) {
+ grn_table_add(ctx, res, &id, sizeof(grn_id), NULL);
+ }
+ grn_dat_cursor_close(ctx, dc);
+ }
+ }
+ break;
+ case GRN_OP_LCP :
+ {
+ grn_id id = grn_dat_lcp_search(ctx, dat, key, key_size);
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ }
+ break;
+ case GRN_OP_TERM_EXTRACT :
+ {
+ int len;
+ grn_id tid;
+ const char *sp = key;
+ const char *se = sp + key_size;
+ for (; sp < se; sp += len) {
+ if ((tid = grn_dat_lcp_search(ctx, dat, sp, se - sp))) {
+ grn_table_add(ctx, res, &tid, sizeof(grn_id), NULL);
+ /* todo : nsubrec++ if GRN_OBJ_TABLE_SUBSET assigned */
+ }
+ if (!(len = grn_charlen(ctx, sp, se))) { break; }
+ }
+ }
+ // todo : support op;
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "invalid mode %d", mode);
+ }
+ });
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ {
+ grn_hash *hash = (grn_hash *)table;
+ grn_id id = GRN_ID_NIL;
+ WITH_NORMALIZE(hash, key, key_size, {
+ id = grn_hash_get(ctx, hash, key, key_size, NULL);
+ });
+ if (id) { grn_table_add(ctx, res, &id, sizeof(grn_id), NULL); }
+ }
+ break;
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_id
+grn_table_next(grn_ctx *ctx, grn_obj *table, grn_id id)
+{
+ grn_id r = GRN_ID_NIL;
+ GRN_API_ENTER;
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ r = grn_pat_next(ctx, (grn_pat *)table, id);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ r = grn_dat_next(ctx, (grn_dat *)table, id);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ r = grn_hash_next(ctx, (grn_hash *)table, id);
+ break;
+ case GRN_TABLE_NO_KEY :
+ r = grn_array_next(ctx, (grn_array *)table, id);
+ break;
+ }
+ }
+ GRN_API_RETURN(r);
+}
+
+grn_rc
+grn_accessor_resolve(grn_ctx *ctx, grn_obj *accessor, int deep,
+ grn_obj *base_res, grn_obj **res,
+ grn_search_optarg *optarg)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_accessor *a;
+ grn_obj accessor_stack;
+ int i, n_accessors;
+ grn_obj *current_res = base_res;
+
+ GRN_PTR_INIT(&accessor_stack, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ n_accessors = 0;
+ for (a = (grn_accessor *)accessor; a; a = a->next) {
+ if (deep == n_accessors) {
+ break;
+ }
+ GRN_PTR_PUT(ctx, &accessor_stack, a);
+ n_accessors++;
+ }
+
+ for (i = n_accessors; i > 0; i--) {
+ grn_obj *index;
+ grn_operator index_op = GRN_OP_MATCH;
+
+ a = (grn_accessor *)GRN_PTR_VALUE_AT(&accessor_stack, i - 1);
+ if (grn_column_index(ctx, a->obj, index_op, &index, 1, NULL) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ break;
+ }
+
+ {
+ grn_id *tid;
+ grn_obj *domain;
+ grn_obj *next_res;
+ grn_search_optarg next_optarg;
+ grn_rset_recinfo *recinfo;
+ if (optarg) {
+ next_optarg = *optarg;
+ next_optarg.mode = GRN_OP_EXACT;
+ } else {
+ memset(&next_optarg, 0, sizeof(grn_search_optarg));
+ }
+ {
+ grn_obj *range = grn_ctx_at(ctx, DB_OBJ(index)->range);
+ next_res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ range, NULL);
+ rc = ctx->rc;
+ grn_obj_unlink(ctx, range);
+ if (!next_res) {
+ if (current_res != base_res) {
+ grn_obj_unlink(ctx, current_res);
+ }
+ break;
+ }
+ }
+ domain = grn_ctx_at(ctx, index->header.domain);
+ GRN_HASH_EACH(ctx, (grn_hash *)current_res, id, &tid, NULL, &recinfo, {
+ next_optarg.weight_vector = NULL;
+ next_optarg.vector_size = recinfo->score;
+ if (domain->header.type == GRN_TABLE_NO_KEY) {
+ rc = grn_ii_sel(ctx, (grn_ii *)index,
+ (const char *)tid, sizeof(grn_id),
+ (grn_hash *)next_res, GRN_OP_OR,
+ &next_optarg);
+ } else {
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_len;
+ key_len = grn_table_get_key(ctx, domain, *tid,
+ key, GRN_TABLE_MAX_KEY_SIZE);
+ rc = grn_ii_sel(ctx, (grn_ii *)index, key, key_len,
+ (grn_hash *)next_res, GRN_OP_OR,
+ &next_optarg);
+ }
+ if (rc != GRN_SUCCESS) {
+ break;
+ }
+ });
+ grn_obj_unlink(ctx, domain);
+ if (current_res != base_res) {
+ grn_obj_unlink(ctx, current_res);
+ }
+ if (rc != GRN_SUCCESS) {
+ grn_obj_unlink(ctx, next_res);
+ break;
+ }
+ current_res = next_res;
+ }
+ }
+
+ if (rc == GRN_SUCCESS && current_res != base_res) {
+ *res = current_res;
+ } else {
+ *res = NULL;
+ if (rc == GRN_SUCCESS) {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ }
+
+ GRN_OBJ_FIN(ctx, &accessor_stack);
+ return rc;
+}
+
+static inline grn_rc
+grn_obj_search_accessor(grn_ctx *ctx, grn_obj *obj, grn_obj *query,
+ grn_obj *res, grn_operator op, grn_search_optarg *optarg)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_accessor *a;
+ grn_obj *last_obj = NULL;
+ int n_accessors;
+
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ if (!a->next) {
+ last_obj = a->obj;
+ }
+ }
+ n_accessors = 0;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ n_accessors++;
+ if (GRN_OBJ_INDEX_COLUMNP(a->obj)) {
+ break;
+ }
+ }
+
+ {
+ grn_obj *index;
+ grn_operator index_op = GRN_OP_MATCH;
+ if (optarg && optarg->mode != GRN_OP_EXACT) {
+ index_op = optarg->mode;
+ }
+ if (grn_column_index(ctx, last_obj, index_op, &index, 1, NULL) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ goto exit;
+ }
+
+ if (n_accessors == 1) {
+ rc = grn_obj_search(ctx, index, query, res, op, optarg);
+ } else {
+ grn_obj *base_res;
+ grn_obj *resolve_res = NULL;
+ grn_obj *range = grn_ctx_at(ctx, DB_OBJ(index)->range);
+ base_res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ range,
+ NULL);
+ rc = ctx->rc;
+ grn_obj_unlink(ctx, range);
+ if (!base_res) {
+ goto exit;
+ }
+ rc = grn_obj_search(ctx, index, query, base_res, GRN_OP_OR, optarg);
+ if (rc != GRN_SUCCESS) {
+ grn_obj_unlink(ctx, base_res);
+ goto exit;
+ }
+ rc = grn_accessor_resolve(ctx, obj, n_accessors - 1, base_res,
+ &resolve_res, optarg);
+ if (resolve_res) {
+ grn_id *record_id;
+ grn_rset_recinfo *recinfo;
+ GRN_HASH_EACH(ctx, (grn_hash *)resolve_res, id, &record_id, NULL,
+ &recinfo, {
+ grn_ii_posting posting;
+ posting.rid = *record_id;
+ posting.sid = 1;
+ posting.pos = 0;
+ posting.weight = recinfo->score - 1;
+ grn_ii_posting_add(ctx, &posting, (grn_hash *)res, op);
+ });
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, op);
+ grn_obj_unlink(ctx, resolve_res);
+ }
+ grn_obj_unlink(ctx, base_res);
+ }
+ }
+
+exit :
+ return rc;
+}
+
+static grn_rc
+grn_obj_search_column_index_by_id(grn_ctx *ctx, grn_obj *obj,
+ grn_id tid,
+ grn_obj *res, grn_operator op,
+ grn_search_optarg *optarg)
+{
+ grn_ii_cursor *c = grn_ii_cursor_open(ctx, (grn_ii *)obj, tid,
+ GRN_ID_NIL, GRN_ID_MAX, 1, 0);
+ if (c) {
+ grn_ii_posting *pos;
+ grn_hash *s = (grn_hash *)res;
+ while ((pos = grn_ii_cursor_next(ctx, c))) {
+ /* todo: support orgarg(op)
+ res_add(ctx, s, (grn_rset_posinfo *) pos,
+ get_weight(ctx, s, pos->rid, pos->sid, wvm, optarg), op);
+ */
+ grn_hash_add(ctx, s, pos, s->key_size, NULL, NULL);
+ }
+ grn_ii_cursor_close(ctx, c);
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_obj_search_column_index_by_key(grn_ctx *ctx, grn_obj *obj,
+ grn_obj *query,
+ grn_obj *res, grn_operator op,
+ grn_search_optarg *optarg)
+{
+ grn_rc rc;
+ unsigned int key_type = GRN_ID_NIL;
+ const char *key;
+ unsigned int key_len;
+ grn_obj *table;
+ grn_obj casted_query;
+ grn_bool need_cast = GRN_FALSE;
+
+ table = grn_ctx_at(ctx, obj->header.domain);
+ if (table) {
+ key_type = table->header.domain;
+ need_cast = (query->header.domain != key_type);
+ grn_obj_unlink(ctx, table);
+ }
+ if (need_cast) {
+ GRN_OBJ_INIT(&casted_query, GRN_BULK, 0, key_type);
+ rc = grn_obj_cast(ctx, query, &casted_query, GRN_FALSE);
+ if (rc == GRN_SUCCESS) {
+ key = GRN_BULK_HEAD(&casted_query);
+ key_len = GRN_BULK_VSIZE(&casted_query);
+ }
+ } else {
+ rc = GRN_SUCCESS;
+ key = GRN_BULK_HEAD(query);
+ key_len = GRN_BULK_VSIZE(query);
+ }
+ if (rc == GRN_SUCCESS) {
+ rc = grn_ii_sel(ctx, (grn_ii *)obj, key, key_len,
+ (grn_hash *)res, op, optarg);
+ }
+ if (need_cast) {
+ GRN_OBJ_FIN(ctx, &casted_query);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_search_column_index(grn_ctx *ctx, grn_obj *obj, grn_obj *query,
+ grn_obj *res, grn_operator op,
+ grn_search_optarg *optarg)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+
+ if (DB_OBJ(obj)->range == res->header.domain) {
+ switch (query->header.type) {
+ case GRN_BULK :
+ if (query->header.domain == obj->header.domain &&
+ GRN_BULK_VSIZE(query) == sizeof(grn_id)) {
+ grn_id tid = GRN_RECORD_VALUE(query);
+ rc = grn_obj_search_column_index_by_id(ctx, obj, tid, res, op, optarg);
+ } else {
+ rc = grn_obj_search_column_index_by_key(ctx, obj, query,
+ res, op, optarg);
+ }
+ break;
+ case GRN_QUERY :
+ rc = GRN_FUNCTION_NOT_IMPLEMENTED;
+ break;
+ }
+ }
+
+ return rc;
+}
+
+grn_rc
+grn_obj_search(grn_ctx *ctx, grn_obj *obj, grn_obj *query,
+ grn_obj *res, grn_operator op, grn_search_optarg *optarg)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (GRN_ACCESSORP(obj)) {
+ rc = grn_obj_search_accessor(ctx, obj, query, res, op, optarg);
+ } else if (GRN_DB_OBJP(obj)) {
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ {
+ const void *key = GRN_BULK_HEAD(query);
+ uint32_t key_size = GRN_BULK_VSIZE(query);
+ grn_operator mode = optarg ? optarg->mode : GRN_OP_EXACT;
+ if (key && key_size) {
+ rc = grn_table_search(ctx, obj, key, key_size, mode, res, op);
+ }
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ rc = grn_obj_search_column_index(ctx, obj, query, res, op, optarg);
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+#define GRN_TABLE_GROUP_BY_KEY 0
+#define GRN_TABLE_GROUP_BY_VALUE 1
+#define GRN_TABLE_GROUP_BY_COLUMN_VALUE 2
+
+#define GRN_TABLE_GROUP_FILTER_PREFIX 0
+#define GRN_TABLE_GROUP_FILTER_SUFFIX (1L<<2)
+
+static int
+accelerated_table_group(grn_ctx *ctx, grn_obj *table, grn_obj *key, grn_obj *res)
+{
+ if (key->header.type == GRN_ACCESSOR) {
+ grn_accessor *a = (grn_accessor *)key;
+ if (a->action == GRN_ACCESSOR_GET_KEY &&
+ a->next && a->next->action == GRN_ACCESSOR_GET_COLUMN_VALUE &&
+ a->next->obj && !a->next->next) {
+ grn_obj *range = grn_ctx_at(ctx, grn_obj_get_range(ctx, key));
+ int idp = GRN_OBJ_TABLEP(range);
+ grn_table_cursor *tc;
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1, 0))) {
+ switch (a->next->obj->header.type) {
+ case GRN_COLUMN_FIX_SIZE :
+ {
+ grn_id id;
+ grn_ra *ra = (grn_ra *)a->next->obj;
+ unsigned int element_size = (ra)->header->element_size;
+ grn_ra_cache cache;
+ GRN_RA_CACHE_INIT(ra, &cache);
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ void *v, *value;
+ grn_id *id_;
+ uint32_t key_size;
+ grn_rset_recinfo *ri = NULL;
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ id_ = (grn_id *)_grn_table_key(ctx, table, id, &key_size);
+ v = grn_ra_ref_cache(ctx, ra, *id_, &cache);
+ if (idp && *((grn_id *)v) &&
+ grn_table_at(ctx, range, *((grn_id *)v)) == GRN_ID_NIL) {
+ continue;
+ }
+ if ((!idp || *((grn_id *)v)) &&
+ grn_table_add_v_inline(ctx, res, v, element_size, &value, NULL)) {
+ grn_table_add_subrec_inline(res, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ }
+ GRN_RA_CACHE_FIN(ra, &cache);
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ if (idp) { /* todo : support other type */
+ grn_id id;
+ grn_ja *ja = (grn_ja *)a->next->obj;
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ grn_io_win jw;
+ unsigned int len = 0;
+ void *value;
+ grn_id *v, *id_;
+ uint32_t key_size;
+ grn_rset_recinfo *ri = NULL;
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ id_ = (grn_id *)_grn_table_key(ctx, table, id, &key_size);
+ if ((v = grn_ja_ref(ctx, ja, *id_, &jw, &len))) {
+ while (len) {
+ if ((*v != GRN_ID_NIL) &&
+ grn_table_add_v_inline(ctx, res, v, sizeof(grn_id), &value, NULL)) {
+ grn_table_add_subrec_inline(res, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ v++;
+ len -= sizeof(grn_id);
+ }
+ grn_ja_unref(ctx, &jw);
+ }
+ }
+ } else {
+ return 0;
+ }
+ break;
+ default :
+ return 0;
+ }
+ grn_table_cursor_close(ctx, tc);
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+grn_rc
+grn_table_group_with_range_gap(grn_ctx *ctx, grn_obj *table,
+ grn_table_sort_key *group_key,
+ grn_obj *res, uint32_t range_gap)
+{
+ grn_obj *key = group_key->key;
+ if (key->header.type == GRN_ACCESSOR) {
+ grn_accessor *a = (grn_accessor *)key;
+ if (a->action == GRN_ACCESSOR_GET_KEY &&
+ a->next && a->next->action == GRN_ACCESSOR_GET_COLUMN_VALUE &&
+ a->next->obj && !a->next->next) {
+ grn_obj *range = grn_ctx_at(ctx, grn_obj_get_range(ctx, key));
+ int idp = GRN_OBJ_TABLEP(range);
+ grn_table_cursor *tc;
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL,
+ 0, 0, -1, 0))) {
+ switch (a->next->obj->header.type) {
+ case GRN_COLUMN_FIX_SIZE :
+ {
+ grn_id id;
+ grn_ra *ra = (grn_ra *)a->next->obj;
+ unsigned int element_size = (ra)->header->element_size;
+ grn_ra_cache cache;
+ GRN_RA_CACHE_INIT(ra, &cache);
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ void *v, *value;
+ grn_id *id_;
+ uint32_t key_size;
+ grn_rset_recinfo *ri = NULL;
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ id_ = (grn_id *)_grn_table_key(ctx, table, id, &key_size);
+ v = grn_ra_ref_cache(ctx, ra, *id_, &cache);
+ if (idp && *((grn_id *)v) &&
+ grn_table_at(ctx, range, *((grn_id *)v)) == GRN_ID_NIL) {
+ continue;
+ }
+ if ((!idp || *((grn_id *)v))) {
+ grn_id id;
+ if (element_size == sizeof(uint32_t)) {
+ uint32_t quantized = (*(uint32_t *)v);
+ quantized -= quantized % range_gap;
+ id = grn_table_add_v_inline(ctx, res, &quantized,
+ element_size, &value, NULL);
+ } else {
+ id = grn_table_add_v_inline(ctx, res, v,
+ element_size, &value, NULL);
+ }
+ if (id) {
+ grn_table_add_subrec_inline(res, value,
+ ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ }
+ }
+ GRN_RA_CACHE_FIN(ra, &cache);
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ if (idp) { /* todo : support other type */
+ grn_id id;
+ grn_ja *ja = (grn_ja *)a->next->obj;
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ grn_io_win jw;
+ unsigned int len = 0;
+ void *value;
+ grn_id *v, *id_;
+ uint32_t key_size;
+ grn_rset_recinfo *ri = NULL;
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ id_ = (grn_id *)_grn_table_key(ctx, table, id, &key_size);
+ if ((v = grn_ja_ref(ctx, ja, *id_, &jw, &len))) {
+ while (len) {
+ if ((*v != GRN_ID_NIL) &&
+ grn_table_add_v_inline(ctx, res, v, sizeof(grn_id), &value, NULL)) {
+ grn_table_add_subrec_inline(res, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ v++;
+ len -= sizeof(grn_id);
+ }
+ grn_ja_unref(ctx, &jw);
+ }
+ }
+ } else {
+ return 0;
+ }
+ break;
+ default :
+ return 0;
+ }
+ grn_table_cursor_close(ctx, tc);
+ GRN_TABLE_GROUPED_ON(res);
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+grn_rc
+grn_table_group(grn_ctx *ctx, grn_obj *table,
+ grn_table_sort_key *keys, int n_keys,
+ grn_table_group_result *results, int n_results)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (!table || !n_keys || !n_results) {
+ ERR(GRN_INVALID_ARGUMENT, "table or n_keys or n_results is void");
+ return GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_ENTER;
+ {
+ int k, r;
+ void *key;
+ grn_obj bulk;
+ grn_table_cursor *tc;
+ grn_table_sort_key *kp;
+ grn_table_group_result *rp;
+ for (k = 0, kp = keys; k < n_keys; k++, kp++) {
+ if ((kp->flags & GRN_TABLE_GROUP_BY_COLUMN_VALUE) && !kp->key) {
+ ERR(GRN_INVALID_ARGUMENT, "column missing in (%d)", k);
+ goto exit;
+ }
+ }
+ for (r = 0, rp = results; r < n_results; r++, rp++) {
+ if (!rp->table) {
+ ERR(GRN_INVALID_ARGUMENT, "table missing in (%d)", r);
+ goto exit;
+ }
+ }
+ GRN_TEXT_INIT(&bulk, 0);
+ if (n_keys == 1 && n_results == 1) {
+ if (!accelerated_table_group(ctx, table, keys->key, results->table)) {
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ grn_obj *range = grn_ctx_at(ctx, grn_obj_get_range(ctx, keys->key));
+ int idp = GRN_OBJ_TABLEP(range);
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ void *value;
+ grn_rset_recinfo *ri = NULL;
+ GRN_BULK_REWIND(&bulk);
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ grn_obj_get_value(ctx, keys->key, id, &bulk);
+ switch (bulk.header.type) {
+ case GRN_UVECTOR :
+ {
+ // todo : support objects except grn_id
+ grn_id *v = (grn_id *)GRN_BULK_HEAD(&bulk);
+ grn_id *ve = (grn_id *)GRN_BULK_CURR(&bulk);
+ while (v < ve) {
+ if ((*v != GRN_ID_NIL) &&
+ grn_table_add_v_inline(ctx, results->table, v, sizeof(grn_id), &value, NULL)) {
+ grn_table_add_subrec_inline(results->table, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ v++;
+ }
+ }
+ break;
+ case GRN_VECTOR :
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "sorry.. not implemented yet");
+ /* todo */
+ break;
+ case GRN_BULK :
+ {
+ if ((!idp || *((grn_id *)GRN_BULK_HEAD(&bulk))) &&
+ grn_table_add_v_inline(ctx, results->table,
+ GRN_BULK_HEAD(&bulk), GRN_BULK_VSIZE(&bulk), &value, NULL)) {
+ grn_table_add_subrec_inline(results->table, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ }
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid column");
+ break;
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ }
+ } else {
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, tc))) {
+ grn_rset_recinfo *ri = NULL;
+ GRN_BULK_REWIND(&bulk);
+ if (DB_OBJ(table)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_cursor_get_value_inline(ctx, tc, (void **)&ri);
+ }
+ for (k = 0, kp = keys; k < n_keys; k++, kp++) {
+ kp->offset = GRN_BULK_VSIZE(&bulk);
+ grn_obj_get_value(ctx, kp->key, id, &bulk);
+ }
+ for (r = 0, rp = results; r < n_results; r++, rp++) {
+ void *value;
+ int begin = keys[rp->key_begin].offset;
+ int end = rp->key_end >= n_keys
+ ? GRN_BULK_VSIZE(&bulk)
+ : keys[rp->key_end].offset;
+ key = GRN_BULK_HEAD(&bulk) + begin;
+ // todo : cut off GRN_ID_NIL
+ if (grn_table_add_v_inline(ctx, rp->table, key, end - begin, &value, NULL)) {
+ grn_table_add_subrec_inline(rp->table, value, ri ? ri->score : 0,
+ (grn_rset_posinfo *)&id, 0);
+ }
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ }
+ grn_obj_close(ctx, &bulk);
+ for (r = 0, rp = results; r < n_results; r++, rp++) {
+ GRN_TABLE_GROUPED_ON(rp->table);
+ }
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_setoperation(grn_ctx *ctx, grn_obj *table1, grn_obj *table2, grn_obj *res,
+ grn_operator op)
+{
+ grn_rc rc = GRN_SUCCESS;
+ void *key = NULL, *value1 = NULL, *value2 = NULL;
+ uint32_t value_size = 0;
+ uint32_t key_size = 0;
+ grn_bool have_subrec;
+ if (table1 != res) {
+ if (table2 == res) {
+ grn_obj *t = table1;
+ table1 = table2;
+ table2 = t;
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ have_subrec = ((DB_OBJ(table1)->header.flags & GRN_OBJ_WITH_SUBREC) &&
+ (DB_OBJ(table2)->header.flags & GRN_OBJ_WITH_SUBREC));
+ switch (table1->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ value_size = ((grn_hash *)table1)->value_size;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ value_size = ((grn_pat *)table1)->value_size;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ value_size = 0;
+ break;
+ case GRN_TABLE_NO_KEY :
+ value_size = ((grn_array *)table1)->value_size;
+ break;
+ }
+ switch (table2->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ if (value_size < ((grn_hash *)table2)->value_size) {
+ value_size = ((grn_hash *)table2)->value_size;
+ }
+ break;
+ case GRN_TABLE_PAT_KEY :
+ if (value_size < ((grn_pat *)table2)->value_size) {
+ value_size = ((grn_pat *)table2)->value_size;
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ value_size = 0;
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (value_size < ((grn_array *)table2)->value_size) {
+ value_size = ((grn_array *)table2)->value_size;
+ }
+ break;
+ }
+ switch (op) {
+ case GRN_OP_OR :
+ if (have_subrec) {
+ int added;
+ GRN_TABLE_EACH(ctx, table2, 0, 0, id, &key, &key_size, &value2, {
+ if (grn_table_add_v_inline(ctx, table1, key, key_size, &value1, &added)) {
+ if (added) {
+ memcpy(value1, value2, value_size);
+ } else {
+ grn_rset_recinfo *ri1 = value1;
+ grn_rset_recinfo *ri2 = value2;
+ grn_table_add_subrec_inline(table1, ri1, ri2->score, NULL, 0);
+ }
+ }
+ });
+ } else {
+ GRN_TABLE_EACH(ctx, table2, 0, 0, id, &key, &key_size, &value2, {
+ if (grn_table_add_v_inline(ctx, table1, key, key_size, &value1, NULL)) {
+ memcpy(value1, value2, value_size);
+ }
+ });
+ }
+ break;
+ case GRN_OP_AND :
+ if (have_subrec) {
+ GRN_TABLE_EACH(ctx, table1, 0, 0, id, &key, &key_size, &value1, {
+ if (grn_table_get_v(ctx, table2, key, key_size, &value2)) {
+ grn_rset_recinfo *ri1 = value1;
+ grn_rset_recinfo *ri2 = value2;
+ ri1->score += ri2->score;
+ } else {
+ _grn_table_delete_by_id(ctx, table1, id, NULL);
+ }
+ });
+ } else {
+ GRN_TABLE_EACH(ctx, table1, 0, 0, id, &key, &key_size, &value1, {
+ if (!grn_table_get_v(ctx, table2, key, key_size, &value2)) {
+ _grn_table_delete_by_id(ctx, table1, id, NULL);
+ }
+ });
+ }
+ break;
+ case GRN_OP_AND_NOT :
+ GRN_TABLE_EACH(ctx, table2, 0, 0, id, &key, &key_size, &value2, {
+ grn_table_delete(ctx, table1, key, key_size);
+ });
+ break;
+ case GRN_OP_ADJUST :
+ GRN_TABLE_EACH(ctx, table2, 0, 0, id, &key, &key_size, &value2, {
+ if (grn_table_get_v(ctx, table1, key, key_size, &value1)) {
+ memcpy(value1, value2, value_size);
+ }
+ });
+ break;
+ default :
+ break;
+ }
+ return rc;
+}
+
+grn_rc
+grn_table_difference(grn_ctx *ctx, grn_obj *table1, grn_obj *table2,
+ grn_obj *res1, grn_obj *res2)
+{
+ void *key = NULL;
+ uint32_t key_size = 0;
+ if (table1 != res1 || table2 != res2) { return GRN_INVALID_ARGUMENT; }
+ if (grn_table_size(ctx, table1) > grn_table_size(ctx, table2)) {
+ GRN_TABLE_EACH(ctx, table2, 0, 0, id, &key, &key_size, NULL, {
+ grn_id id1;
+ if ((id1 = grn_table_get(ctx, table1, key, key_size))) {
+ _grn_table_delete_by_id(ctx, table1, id1, NULL);
+ _grn_table_delete_by_id(ctx, table2, id, NULL);
+ }
+ });
+ } else {
+ GRN_TABLE_EACH(ctx, table1, 0, 0, id, &key, &key_size, NULL, {
+ grn_id id2;
+ if ((id2 = grn_table_get(ctx, table2, key, key_size))) {
+ _grn_table_delete_by_id(ctx, table1, id, NULL);
+ _grn_table_delete_by_id(ctx, table2, id2, NULL);
+ }
+ });
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_obj *grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj,
+ const char *name, unsigned int name_size);
+
+static grn_obj *
+grn_obj_column_(grn_ctx *ctx, grn_obj *table, const char *name, unsigned int name_size)
+{
+ grn_obj *column = NULL;
+ char buf[GRN_TABLE_MAX_KEY_SIZE];
+ int len = grn_obj_name(ctx, table, buf, GRN_TABLE_MAX_KEY_SIZE);
+ if (len) {
+ buf[len++] = GRN_DB_DELIMITER;
+ if (len + name_size <= GRN_TABLE_MAX_KEY_SIZE) {
+ memcpy(buf + len, name, name_size);
+ column = grn_ctx_get(ctx, buf, len + name_size);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "name is too long");
+ }
+ } else {
+ /* todo : support temporary table */
+ }
+ return column;
+}
+
+grn_obj *
+grn_obj_column(grn_ctx *ctx, grn_obj *table, const char *name, unsigned int name_size)
+{
+ grn_obj *column = NULL;
+ GRN_API_ENTER;
+ if (GRN_OBJ_TABLEP(table)) {
+ if (grn_db_check_name(ctx, name, name_size) ||
+ !(column = grn_obj_column_(ctx, table, name, name_size))) {
+ column = grn_obj_get_accessor(ctx, table, name, name_size);
+ }
+ } else if (GRN_ACCESSORP(table)) {
+ column = grn_obj_get_accessor(ctx, table, name, name_size);
+ }
+ GRN_API_RETURN(column);
+}
+
+int
+grn_table_columns(grn_ctx *ctx, grn_obj *table, const char *name, unsigned int name_size,
+ grn_obj *res)
+{
+ int n = 0;
+ GRN_API_ENTER;
+ if (GRN_OBJ_TABLEP(table) && DB_OBJ(table)->id &&
+ !(DB_OBJ(table)->id & GRN_OBJ_TMP_OBJECT)) {
+ grn_db *s = (grn_db *)DB_OBJ(table)->db;
+ if (s->keys) {
+ grn_obj bulk;
+ GRN_TEXT_INIT(&bulk, 0);
+ grn_table_get_key2(ctx, s->keys, DB_OBJ(table)->id, &bulk);
+ GRN_TEXT_PUTC(ctx, &bulk, GRN_DB_DELIMITER);
+ grn_bulk_write(ctx, &bulk, name, name_size);
+ grn_table_search(ctx, s->keys, GRN_BULK_HEAD(&bulk), GRN_BULK_VSIZE(&bulk),
+ GRN_OP_PREFIX, res, GRN_OP_OR);
+ grn_obj_close(ctx, &bulk);
+ n = grn_table_size(ctx, res);
+ }
+ }
+ GRN_API_RETURN(n);
+}
+
+const char *
+_grn_table_key(grn_ctx *ctx, grn_obj *table, grn_id id, uint32_t *key_size)
+{
+ GRN_ASSERT(table);
+ if (table->header.type == GRN_DB) { table = ((grn_db *)table)->keys; }
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ return _grn_hash_key(ctx, (grn_hash *)table, id, key_size);
+ case GRN_TABLE_PAT_KEY :
+ return _grn_pat_key(ctx, (grn_pat *)table, id, key_size);
+ case GRN_TABLE_DAT_KEY :
+ return _grn_dat_key(ctx, (grn_dat *)table, id, key_size);
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_array *a = (grn_array *)table;
+ const char *v;
+ if (a->obj.header.domain && a->value_size &&
+ (v = _grn_array_get_value(ctx, a, id))) {
+ *key_size = a->value_size;
+ return v;
+ } else {
+ *key_size = 0;
+ }
+ }
+ break;
+ }
+ return NULL;
+}
+
+/* column */
+
+grn_obj *
+grn_column_create(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size,
+ const char *path, grn_obj_flags flags, grn_obj *type)
+{
+ grn_db *s;
+ uint32_t value_size;
+ grn_obj *db, *res = NULL;
+ grn_id id = GRN_ID_NIL;
+ grn_id range = GRN_ID_NIL;
+ grn_id domain = GRN_ID_NIL;
+ char fullname[GRN_TABLE_MAX_KEY_SIZE];
+ char buffer[PATH_MAX];
+ GRN_API_ENTER;
+ if (!table) {
+ ERR(GRN_INVALID_ARGUMENT, "[column][create] table is missing");
+ goto exit;
+ }
+ if (!type) {
+ ERR(GRN_INVALID_ARGUMENT, "[column][create] type is missing");
+ goto exit;
+ }
+ if (!name || !name_size) {
+ ERR(GRN_INVALID_ARGUMENT, "[column][create] name is missing");
+ goto exit;
+ }
+ db = DB_OBJ(table)->db;
+ s = (grn_db *)db;
+ if (!GRN_DB_P(s)) {
+ int table_name_len;
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ table_name_len = grn_obj_name(ctx, table, table_name, GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] invalid db assigned: <%.*s>.<%.*s>",
+ table_name_len, table_name, name_size, name);
+ goto exit;
+ }
+ if (DB_OBJ(table)->id & GRN_OBJ_TMP_OBJECT) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] temporary table doesn't support column: <%.*s>",
+ name_size, name);
+ goto exit;
+ }
+ {
+ uint32_t s = 0;
+ const char *n = _grn_table_key(ctx, ctx->impl->db, DB_OBJ(table)->id, &s);
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "DDL:column_create %.*s %.*s", s, n, name_size, name);
+ }
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[column][create]", name, name_size);
+ goto exit;
+ }
+ if ((domain = DB_OBJ(table)->id)) {
+ int len = grn_table_get_key(ctx, s->keys, domain, fullname, GRN_TABLE_MAX_KEY_SIZE);
+ if (name_size + 1 + len > GRN_TABLE_MAX_KEY_SIZE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] too long column name: required name_size(%d) < %d"
+ ": <%.*s>.<%.*s>",
+ name_size, GRN_TABLE_MAX_KEY_SIZE - 1 - len,
+ len, fullname, name_size, name);
+ goto exit;
+ }
+ fullname[len] = GRN_DB_DELIMITER;
+ memcpy(fullname + len + 1, name, name_size);
+ name_size += len + 1;
+ } else {
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+ "[column][create] [todo] table-less column isn't supported yet");
+ goto exit;
+ }
+ range = DB_OBJ(type)->id;
+ switch (type->header.type) {
+ case GRN_TYPE :
+ {
+ grn_db_obj *t = (grn_db_obj *)type;
+ flags |= t->header.flags;
+ value_size = GRN_TYPE_SIZE(t);
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ value_size = sizeof(grn_id);
+ break;
+ default :
+ /*
+ if (type == grn_type_any) {
+ value_size = sizeof(grn_id) + sizeof(grn_id);
+ }
+ */
+ value_size = sizeof(grn_id);
+ }
+ id = grn_obj_register(ctx, db, fullname, name_size);
+ if (ERRP(ctx, GRN_ERROR)) { goto exit; }
+ if (GRN_OBJ_PERSISTENT & flags) {
+ if (!path) {
+ if (GRN_DB_PERSISTENT_P(db)) {
+ gen_pathname(grn_obj_io(db)->path, buffer, id);
+ path = buffer;
+ } else {
+ int table_name_len;
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ table_name_len = grn_obj_name(ctx, table, table_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] path not assigned for persistent column"
+ ": <%.*s>.<%.*s>",
+ table_name_len, table_name, name_size, name);
+ goto exit;
+ }
+ } else {
+ flags |= GRN_OBJ_CUSTOM_NAME;
+ }
+ } else {
+ if (path) {
+ int table_name_len;
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ table_name_len = grn_obj_name(ctx, table, table_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] path assigned for temporary column"
+ ": <%.*s>.<%.*s>",
+ table_name_len, table_name, name_size, name);
+ goto exit;
+ }
+ }
+ switch (flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_SCALAR :
+ if ((flags & GRN_OBJ_KEY_VAR_SIZE) || value_size > sizeof(int64_t)) {
+ res = (grn_obj *)grn_ja_create(ctx, path, value_size, flags);
+ } else {
+ res = (grn_obj *)grn_ra_create(ctx, path, value_size);
+ }
+ break;
+ case GRN_OBJ_COLUMN_VECTOR :
+ res = (grn_obj *)grn_ja_create(ctx, path, value_size * 30/*todo*/, flags);
+ //todo : zlib support
+ break;
+ case GRN_OBJ_COLUMN_INDEX :
+ res = (grn_obj *)grn_ii_create(ctx, path, table, flags); //todo : ii layout support
+ break;
+ }
+ if (res) {
+ DB_OBJ(res)->header.domain = domain;
+ DB_OBJ(res)->header.impl_flags = 0;
+ DB_OBJ(res)->range = range;
+ DB_OBJ(res)->header.flags = flags;
+ res->header.flags = flags;
+ if (grn_db_obj_init(ctx, db, id, DB_OBJ(res))) {
+ _grn_obj_remove(ctx, res);
+ res = NULL;
+ }
+ grn_obj_touch(ctx, res, NULL);
+ }
+exit :
+ if (!res && id) { grn_obj_delete_by_id(ctx, db, id, GRN_TRUE); }
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_column_open(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size,
+ const char *path, grn_obj *type)
+{
+ grn_id domain;
+ grn_obj *res = NULL;
+ grn_db *s;
+ char fullname[GRN_TABLE_MAX_KEY_SIZE];
+ GRN_API_ENTER;
+ if (!table || !type || !name || !name_size) {
+ ERR(GRN_INVALID_ARGUMENT, "missing type or name");
+ goto exit;
+ }
+ s = (grn_db *)DB_OBJ(table)->db;
+ if (!GRN_DB_P(s)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid db assigned");
+ goto exit;
+ }
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[column][open]", name, name_size);
+ goto exit;
+ }
+ if ((domain = DB_OBJ(table)->id)) {
+ int len = grn_table_get_key(ctx, s->keys, domain, fullname, GRN_TABLE_MAX_KEY_SIZE);
+ if (name_size + 1 + len > GRN_TABLE_MAX_KEY_SIZE) {
+ ERR(GRN_INVALID_ARGUMENT, "too long column name");
+ goto exit;
+ }
+ fullname[len] = GRN_DB_DELIMITER;
+ memcpy(fullname + len + 1, name, name_size);
+ name_size += len + 1;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "todo : not supported yet");
+ goto exit;
+ }
+ res = grn_ctx_get(ctx, fullname, name_size);
+ if (res) {
+ const char *path2 = grn_obj_path(ctx, res);
+ if (path && (!path2 || strcmp(path, path2))) { goto exit; }
+ } else if (path) {
+ uint32_t dbtype = grn_io_detect_type(ctx, path);
+ if (!dbtype) { goto exit; }
+ switch (dbtype) {
+ case GRN_COLUMN_VAR_SIZE :
+ res = (grn_obj *)grn_ja_open(ctx, path);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ res = (grn_obj *)grn_ra_open(ctx, path);
+ break;
+ case GRN_COLUMN_INDEX :
+ res = (grn_obj *)grn_ii_open(ctx, path, table);
+ break;
+ }
+ if (res) {
+ grn_id id = grn_obj_register(ctx, (grn_obj *)s, fullname, name_size);
+ DB_OBJ(res)->header.domain = domain;
+ DB_OBJ(res)->range = DB_OBJ(type)->id;
+ res->header.flags |= GRN_OBJ_CUSTOM_NAME;
+ grn_db_obj_init(ctx, (grn_obj *)s, id, DB_OBJ(res));
+ }
+ }
+exit :
+ GRN_API_RETURN(res);
+}
+
+/*
+typedef struct {
+ grn_id id;
+ int flags;
+} grn_column_set_value_arg;
+
+static grn_rc
+default_column_set_value(grn_ctx *ctx, grn_proc_ctx *pctx, grn_obj *in, grn_obj *out)
+{
+ grn_user_data *data = grn_proc_ctx_get_local_data(pctx);
+ if (data) {
+ grn_column_set_value_arg *arg = data->ptr;
+ unsigned int value_size = in->u.p.size; //todo
+ if (!pctx->obj) { return GRN_ID_NIL; }
+ switch (pctx->obj->header.type) {
+ case GRN_COLUMN_VAR_SIZE :
+ return grn_ja_put(ctx, (grn_ja *)pctx->obj, arg->id,
+ in->u.p.ptr, value_size, 0, NULL); // todo type->flag
+ case GRN_COLUMN_FIX_SIZE :
+ if (((grn_ra *)pctx->obj)->header->element_size < value_size) {
+ ERR(GRN_INVALID_ARGUMENT, "too long value (%d)", value_size);
+ return GRN_INVALID_ARGUMENT;
+ } else {
+ void *v = grn_ra_ref(ctx, (grn_ra *)pctx->obj, arg->id);
+ if (!v) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "ra get failed");
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ memcpy(v, in->u.p.ptr, value_size);
+ grn_ra_unref(ctx, (grn_ra *)pctx->obj, arg->id);
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ // todo : how??
+ break;
+ }
+ return GRN_SUCCESS;
+ } else {
+ ERR(GRN_OBJECT_CORRUPT, "grn_proc_ctx_get_local_data failed");
+ return ctx->rc;
+ }
+}
+*/
+
+/**** grn_vector ****/
+
+//#define VECTOR(obj) ((grn_vector *)obj)
+
+/*
+#define INITIAL_VECTOR_SIZE 256
+
+int
+grn_vector_delimit(grn_ctx *ctx, grn_obj *vector)
+{
+ grn_vector *v = VECTOR(vector);
+ uint32_t *offsets;
+ if (!(v->n_entries & (INITIAL_VECTOR_SIZE - 1))) {
+ offsets = GRN_REALLOC(v->offsets, sizeof(uint32_t) *
+ (v->n_entries + INITIAL_VECTOR_SIZE));
+ if (!offsets) { return -1; }
+ v->offsets = offsets;
+ }
+ v->offsets[v->n_entries] = GRN_BULK_VSIZE(vector);
+ return ++(v->n_entries);
+}
+*/
+
+static unsigned int
+grn_uvector_size_internal(grn_ctx *ctx, grn_obj *uvector)
+{
+ unsigned int size;
+
+ if (IS_WEIGHT_UVECTOR(uvector)) {
+ size = GRN_BULK_VSIZE(uvector) / sizeof(weight_uvector_entry);
+ } else {
+ size = GRN_BULK_VSIZE(uvector) / sizeof(grn_id);
+ }
+
+ return size;
+}
+
+unsigned int
+grn_vector_size(grn_ctx *ctx, grn_obj *vector)
+{
+ unsigned int size;
+ if (!vector) {
+ ERR(GRN_INVALID_ARGUMENT, "vector is null");
+ return 0;
+ }
+ GRN_API_ENTER;
+ switch (vector->header.type) {
+ case GRN_BULK :
+ size = GRN_BULK_VSIZE(vector);
+ break;
+ case GRN_UVECTOR :
+ size = grn_uvector_size_internal(ctx, vector);
+ break;
+ case GRN_VECTOR :
+ size = vector->u.v.n_sections;
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "not vector");
+ size = 0;
+ break;
+ }
+ GRN_API_RETURN(size);
+}
+
+static grn_obj *
+grn_vector_body(grn_ctx *ctx, grn_obj *v)
+{
+ if (!v) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid argument");
+ return NULL;
+ }
+ switch (v->header.type) {
+ case GRN_VECTOR :
+ if (!v->u.v.body) {
+ v->u.v.body = grn_obj_open(ctx, GRN_BULK, 0, v->header.domain);
+ }
+ return v->u.v.body;
+ case GRN_BULK :
+ case GRN_UVECTOR :
+ return v;
+ default :
+ return NULL;
+ }
+}
+
+unsigned int
+grn_vector_get_element(grn_ctx *ctx, grn_obj *vector,
+ unsigned int offset, const char **str,
+ unsigned int *weight, grn_id *domain)
+{
+ unsigned int length = 0;
+ GRN_API_ENTER;
+ if (!vector || vector->header.type != GRN_VECTOR) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid vector");
+ goto exit;
+ }
+ if (vector->u.v.n_sections <= offset) {
+ ERR(GRN_RANGE_ERROR, "offset out of range");
+ goto exit;
+ }
+ {
+ grn_section *vp = &vector->u.v.sections[offset];
+ grn_obj *body = grn_vector_body(ctx, vector);
+ *str = GRN_BULK_HEAD(body) + vp->offset;
+ if (weight) { *weight = vp->weight; }
+ if (domain) { *domain = vp->domain; }
+ length = vp->length;
+ }
+exit :
+ GRN_API_RETURN(length);
+}
+
+unsigned int
+grn_vector_pop_element(grn_ctx *ctx, grn_obj *vector,
+ const char **str, unsigned int *weight, grn_id *domain)
+{
+ unsigned int offset, length = 0;
+ GRN_API_ENTER;
+ if (!vector || vector->header.type != GRN_VECTOR) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid vector");
+ goto exit;
+ }
+ if (!vector->u.v.n_sections) {
+ ERR(GRN_RANGE_ERROR, "offset out of range");
+ goto exit;
+ }
+ offset = --vector->u.v.n_sections;
+ {
+ grn_section *vp = &vector->u.v.sections[offset];
+ grn_obj *body = grn_vector_body(ctx, vector);
+ *str = GRN_BULK_HEAD(body) + vp->offset;
+ if (weight) { *weight = vp->weight; }
+ if (domain) { *domain = vp->domain; }
+ length = vp->length;
+ grn_bulk_truncate(ctx, body, vp->offset);
+ }
+exit :
+ GRN_API_RETURN(length);
+}
+
+#define W_SECTIONS_UNIT 8
+#define S_SECTIONS_UNIT (1 << W_SECTIONS_UNIT)
+#define M_SECTIONS_UNIT (S_SECTIONS_UNIT - 1)
+
+grn_rc
+grn_vector_delimit(grn_ctx *ctx, grn_obj *v, unsigned int weight, grn_id domain)
+{
+ if (v->header.type != GRN_VECTOR) { return GRN_INVALID_ARGUMENT; }
+ if (!(v->u.v.n_sections & M_SECTIONS_UNIT)) {
+ grn_section *vp = GRN_REALLOC(v->u.v.sections, sizeof(grn_section) *
+ (v->u.v.n_sections + S_SECTIONS_UNIT));
+ if (!vp) { return GRN_NO_MEMORY_AVAILABLE; }
+ v->u.v.sections = vp;
+ }
+ {
+ grn_obj *body = grn_vector_body(ctx, v);
+ grn_section *vp = &v->u.v.sections[v->u.v.n_sections];
+ vp->offset = v->u.v.n_sections ? vp[-1].offset + vp[-1].length : 0;
+ vp->length = GRN_BULK_VSIZE(body) - vp->offset;
+ vp->weight = weight;
+ vp->domain = domain;
+ }
+ v->u.v.n_sections++;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_vector_decode(grn_ctx *ctx, grn_obj *v, const char *data, uint32_t data_size)
+{
+ uint8_t *p = (uint8_t *)data;
+ uint8_t *pe = p + data_size;
+ uint32_t n, n0 = v->u.v.n_sections;
+ GRN_B_DEC(n, p);
+ if (((n0 + M_SECTIONS_UNIT) >> W_SECTIONS_UNIT) !=
+ ((n0 + n + M_SECTIONS_UNIT) >> W_SECTIONS_UNIT)) {
+ grn_section *vp = GRN_REALLOC(v->u.v.sections, sizeof(grn_section) *
+ ((n0 + n + M_SECTIONS_UNIT) & ~M_SECTIONS_UNIT));
+ if (!vp) { return GRN_NO_MEMORY_AVAILABLE; }
+ v->u.v.sections = vp;
+ }
+ {
+ grn_section *vp;
+ uint32_t o = 0, l, i;
+ for (i = n, vp = v->u.v.sections + n0; i; i--, vp++) {
+ if (pe <= p) { return GRN_INVALID_ARGUMENT; }
+ GRN_B_DEC(l, p);
+ vp->length = l;
+ vp->offset = o;
+ vp->weight = 0;
+ vp->domain = 0;
+ o += l;
+ }
+ if (pe < p + o) { return GRN_INVALID_ARGUMENT; }
+ {
+ grn_obj *body = grn_vector_body(ctx, v);
+ grn_bulk_write(ctx, body, (char *)p, o);
+ }
+ p += o;
+ if (p < pe) {
+ for (i = n, vp = v->u.v.sections + n0; i; i--, vp++) {
+ if (pe <= p) { return GRN_INVALID_ARGUMENT; }
+ GRN_B_DEC(vp->weight, p);
+ GRN_B_DEC(vp->domain, p);
+ }
+ }
+ }
+ v->u.v.n_sections += n;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_vector_add_element(grn_ctx *ctx, grn_obj *vector,
+ const char *str, unsigned int str_len,
+ unsigned int weight, grn_id domain)
+{
+ grn_obj *body;
+ GRN_API_ENTER;
+ if (!vector) {
+ ERR(GRN_INVALID_ARGUMENT, "vector is null");
+ goto exit;
+ }
+ if ((body = grn_vector_body(ctx, vector))) {
+ grn_bulk_write(ctx, body, str, str_len);
+ grn_vector_delimit(ctx, vector, weight, domain);
+ }
+exit :
+ GRN_API_RETURN(ctx->rc);
+}
+
+/*
+grn_obj *
+grn_sections_to_vector(grn_ctx *ctx, grn_obj *sections)
+{
+ grn_obj *vector = grn_vector_open(ctx, 0);
+ if (vector) {
+ grn_section *vp;
+ int i;
+ for (i = sections->u.v.n_sections, vp = sections->u.v.sections; i; i--, vp++) {
+ grn_text_benc(ctx, vector, vp->weight);
+ grn_text_benc(ctx, vector, vp->domain);
+ grn_bulk_write(ctx, vector, vp->str, vp->str_len);
+ grn_vector_delimit(ctx, vector);
+ }
+ }
+ return vector;
+}
+
+grn_obj *
+grn_vector_to_sections(grn_ctx *ctx, grn_obj *vector, grn_obj *sections)
+{
+ if (!sections) {
+ sections = grn_obj_open(ctx, GRN_VECTOR, GRN_OBJ_DO_SHALLOW_COPY, 0);
+ }
+ if (sections) {
+ int i, n = grn_vector_size(ctx, vector);
+ sections->u.v.src = vector;
+ for (i = 0; i < n; i++) {
+ unsigned int size;
+ const uint8_t *pe, *p = (uint8_t *)grn_vector_fetch(ctx, vector, i, &size);
+ if (p) {
+ grn_id domain;
+ unsigned int weight;
+ pe = p + size;
+ if (p < pe) {
+ GRN_B_DEC(weight, p);
+ if (p < pe) {
+ GRN_B_DEC(domain, p);
+ if (p <= pe) {
+ grn_vector_add(ctx, sections, (char *)p, pe - p, weight, domain);
+ }
+ }
+ }
+ }
+ }
+ }
+ return sections;
+}
+*/
+
+/**** uvector ****/
+
+unsigned int
+grn_uvector_size(grn_ctx *ctx, grn_obj *uvector)
+{
+ unsigned int size;
+
+ if (!uvector) {
+ ERR(GRN_INVALID_ARGUMENT, "uvector must not be NULL");
+ return 0;
+ }
+
+ if (uvector->header.type != GRN_UVECTOR) {
+ grn_obj type_name;
+ GRN_TEXT_INIT(&type_name, 0);
+ grn_inspect_type(ctx, &type_name, uvector->header.type);
+ ERR(GRN_INVALID_ARGUMENT, "must be GRN_UVECTOR: %.*s",
+ (int)GRN_TEXT_LEN(&type_name), GRN_TEXT_VALUE(&type_name));
+ GRN_OBJ_FIN(ctx, &type_name);
+ return 0;
+ }
+
+ GRN_API_ENTER;
+ size = grn_uvector_size_internal(ctx, uvector);
+ GRN_API_RETURN(size);
+}
+
+
+grn_rc
+grn_uvector_add_element(grn_ctx *ctx, grn_obj *uvector,
+ grn_id id, unsigned int weight)
+{
+ GRN_API_ENTER;
+ if (!uvector) {
+ ERR(GRN_INVALID_ARGUMENT, "uvector is null");
+ goto exit;
+ }
+ if (IS_WEIGHT_UVECTOR(uvector)) {
+ weight_uvector_entry entry;
+ entry.id = id;
+ entry.weight = weight;
+ grn_bulk_write(ctx, uvector,
+ (const char *)&entry, sizeof(weight_uvector_entry));
+ } else {
+ grn_bulk_write(ctx, uvector,
+ (const char *)&id, sizeof(grn_id));
+ }
+exit :
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_id
+grn_uvector_get_element(grn_ctx *ctx, grn_obj *uvector,
+ unsigned int offset, unsigned int *weight)
+{
+ grn_id id = GRN_ID_NIL;
+
+ GRN_API_ENTER;
+ if (!uvector || uvector->header.type != GRN_UVECTOR) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid uvector");
+ goto exit;
+ }
+
+ if (IS_WEIGHT_UVECTOR(uvector)) {
+ const weight_uvector_entry *entry;
+ const weight_uvector_entry *entries_start;
+ const weight_uvector_entry *entries_end;
+
+ entries_start = (const weight_uvector_entry *)GRN_BULK_HEAD(uvector);
+ entries_end = (const weight_uvector_entry *)GRN_BULK_CURR(uvector);
+ if (offset > entries_end - entries_start) {
+ ERR(GRN_RANGE_ERROR, "offset out of range");
+ goto exit;
+ }
+
+ entry = entries_start + offset;
+ id = entry->id;
+ if (weight) { *weight = entry->weight; }
+ } else {
+ const grn_id *ids_start;
+ const grn_id *ids_end;
+
+ ids_start = (const grn_id *)GRN_BULK_HEAD(uvector);
+ ids_end = (const grn_id *)GRN_BULK_CURR(uvector);
+ if (offset > ids_end - ids_start) {
+ ERR(GRN_RANGE_ERROR, "offset out of range");
+ goto exit;
+ }
+ id = ids_start[offset];
+ if (weight) { *weight = 0; }
+ }
+exit :
+ GRN_API_RETURN(id);
+}
+
+/**** accessor ****/
+
+static grn_accessor *
+accessor_new(grn_ctx *ctx)
+{
+ grn_accessor *res = GRN_MALLOCN(grn_accessor, 1);
+ if (res) {
+ res->header.type = GRN_ACCESSOR;
+ res->header.impl_flags = GRN_OBJ_ALLOCATED;
+ res->header.flags = 0;
+ res->header.domain = GRN_ID_NIL;
+ res->action = GRN_ACCESSOR_VOID;
+ res->offset = 0;
+ res->next = NULL;
+ }
+ return res;
+}
+
+static grn_obj *
+grn_obj_get_accessor(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned int name_size)
+{
+ grn_accessor *res = NULL, **rp = NULL, **rp0 = NULL;
+ grn_bool is_chained = GRN_FALSE;
+ if (!obj) { return NULL; }
+ GRN_API_ENTER;
+ if (obj->header.type == GRN_ACCESSOR) {
+ is_chained = GRN_TRUE;
+ for (rp0 = (grn_accessor **)&obj; *rp0; rp0 = &(*rp0)->next) {
+ res = *rp0;
+ }
+ switch (res->action) {
+ case GRN_ACCESSOR_GET_KEY :
+ obj = grn_ctx_at(ctx, res->obj->header.domain);
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ case GRN_ACCESSOR_GET_SCORE :
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ obj = grn_ctx_at(ctx, DB_OBJ(res->obj)->range);
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ obj = grn_ctx_at(ctx, DB_OBJ(res->obj)->range);
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ }
+ if (!obj) {
+ res = NULL;
+ goto exit;
+ }
+ {
+ size_t len;
+ const char *sp, *se = name + name_size;
+ if (*name == GRN_DB_DELIMITER) { name++; }
+ for (sp = name; (len = grn_charlen(ctx, sp, se)); sp += len) {
+ if (*sp == GRN_DB_DELIMITER) { break; }
+ }
+ if (!(len = sp - name)) { goto exit; }
+ if (*name == GRN_DB_PSEUDO_COLUMN_PREFIX) { /* pseudo column */
+ int done = 0;
+ if (len < 2) { goto exit; }
+ switch (name[1]) {
+ case 'k' : /* key */
+ if (len != GRN_COLUMN_NAME_KEY_LEN ||
+ memcmp(name, GRN_COLUMN_NAME_KEY, GRN_COLUMN_NAME_KEY_LEN)) {
+ goto exit;
+ }
+ for (rp = &res; !done; rp = &(*rp)->next) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ switch (obj->header.type) {
+ case GRN_DB :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ rp = &(*rp)->next;
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ (*rp)->action = GRN_ACCESSOR_GET_DB_OBJ;
+ done++;
+ break;
+ case GRN_TYPE :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ done++;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (obj->header.domain) {
+ (*rp)->action = GRN_ACCESSOR_GET_VALUE;
+ break;
+ }
+ /* fallthru */
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ break;
+ case 'i' : /* id */
+ if (len != GRN_COLUMN_NAME_ID_LEN ||
+ memcmp(name, GRN_COLUMN_NAME_ID, GRN_COLUMN_NAME_ID_LEN)) {
+ goto exit;
+ }
+ for (rp = &res; !done; rp = &(*rp)->next) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (!obj->header.domain) {
+ (*rp)->action = GRN_ACCESSOR_GET_ID;
+ done++;
+ } else {
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ switch (obj->header.type) {
+ case GRN_DB :
+ case GRN_TYPE :
+ (*rp)->action = GRN_ACCESSOR_GET_ID;
+ done++;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_NO_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ break;
+ case 'v' : /* value */
+ if (len != GRN_COLUMN_NAME_VALUE_LEN ||
+ memcmp(name, GRN_COLUMN_NAME_VALUE, GRN_COLUMN_NAME_VALUE_LEN)) {
+ goto exit;
+ }
+ for (rp = &res; !done; rp = &(*rp)->next) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (!obj->header.domain) {
+ if (DB_OBJ((*rp)->obj)->range) {
+ (*rp)->action = GRN_ACCESSOR_GET_VALUE;
+ done++;
+ } else {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ done++;
+ } else {
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ switch (obj->header.type) {
+ case GRN_DB :
+ case GRN_TYPE :
+ if (DB_OBJ((*rp)->obj)->range) {
+ (*rp)->action = GRN_ACCESSOR_GET_VALUE;
+ done++;
+ } else {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ break;
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_NO_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ break;
+ case 's' : /* score */
+ if (len != GRN_COLUMN_NAME_SCORE_LEN ||
+ memcmp(name, GRN_COLUMN_NAME_SCORE, GRN_COLUMN_NAME_SCORE_LEN)) {
+ goto exit;
+ }
+ for (rp = &res; !done; rp = &(*rp)->next) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (DB_OBJ(obj)->header.flags & GRN_OBJ_WITH_SUBREC) {
+ (*rp)->action = GRN_ACCESSOR_GET_SCORE;
+ done++;
+ } else {
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (obj->header.domain) {
+ (*rp)->action = GRN_ACCESSOR_GET_VALUE;
+ break;
+ }
+ /* fallthru */
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ break;
+ case 'n' : /* nsubrecs */
+ if (len != GRN_COLUMN_NAME_NSUBRECS_LEN ||
+ memcmp(name,
+ GRN_COLUMN_NAME_NSUBRECS,
+ GRN_COLUMN_NAME_NSUBRECS_LEN)) {
+ goto exit;
+ }
+ for (rp = &res; !done; rp = &(*rp)->next) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (GRN_TABLE_IS_GROUPED(obj)) {
+ (*rp)->action = GRN_ACCESSOR_GET_NSUBRECS;
+ done++;
+ } else {
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (obj->header.domain) {
+ (*rp)->action = GRN_ACCESSOR_GET_VALUE;
+ break;
+ }
+ /* fallthru */
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ break;
+ default :
+ res = NULL;
+ goto exit;
+ }
+ } else {
+ /* if obj->header.type == GRN_TYPE ... lookup table */
+ for (rp = &res; ; rp = &(*rp)->next) {
+ grn_obj *column = grn_obj_column_(ctx, obj, name, len);
+ if (column) {
+ *rp = accessor_new(ctx);
+ (*rp)->obj = column;
+ /*
+ switch (column->header.type) {
+ case GRN_COLUMN_VAR_SIZE :
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ break;
+ case GRN_COLUMN_INDEX :
+ break;
+ }
+ */
+ (*rp)->action = GRN_ACCESSOR_GET_COLUMN_VALUE;
+ break;
+ } else {
+ if (!obj->header.domain) {
+ // ERR(GRN_INVALID_ARGUMENT, "no such column: <%s>", name);
+ if (!is_chained) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ }
+ res = NULL;
+ goto exit;
+ }
+ *rp = accessor_new(ctx);
+ (*rp)->obj = obj;
+ if (!(obj = grn_ctx_at(ctx, obj->header.domain))) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_NO_KEY :
+ (*rp)->action = GRN_ACCESSOR_GET_KEY;
+ break;
+ default :
+ /* lookup failed */
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ }
+ if (sp != se) {
+ if (!grn_obj_get_accessor(ctx, (grn_obj *)res, sp, se - sp)) {
+ if (!is_chained) {
+ grn_obj_close(ctx, (grn_obj *)res);
+ res = NULL;
+ goto exit;
+ }
+ }
+ }
+ }
+ if (rp0) { *rp0 = res; }
+ exit :
+ GRN_API_RETURN((grn_obj *)res);
+}
+
+inline static grn_bool
+grn_column_is_vector(grn_ctx *ctx, grn_obj *column)
+{
+ grn_obj_flags type;
+
+ if (column->header.type != GRN_COLUMN_VAR_SIZE) {
+ return GRN_FALSE;
+ }
+
+ type = column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK;
+ return type == GRN_OBJ_COLUMN_VECTOR;
+}
+
+inline static void
+grn_obj_get_range_info(grn_ctx *ctx, grn_obj *obj,
+ grn_id *range_id, grn_obj_flags *range_flags)
+{
+ if (GRN_DB_OBJP(obj)) {
+ *range_id = DB_OBJ(obj)->range;
+ if (grn_column_is_vector(ctx, obj)) {
+ *range_flags = GRN_OBJ_VECTOR;
+ }
+ } else if (obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ *range_id = GRN_DB_UINT32;
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ if (GRN_DB_OBJP(a->obj)) {
+ *range_id = DB_OBJ(a->obj)->range;
+ }
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ *range_id = GRN_DB_INT32;
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ if (GRN_DB_OBJP(a->obj)) {
+ *range_id = DB_OBJ(a->obj)->range;
+ if (grn_column_is_vector(ctx, a->obj)) {
+ *range_flags = GRN_OBJ_VECTOR;
+ }
+ }
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ if (GRN_DB_OBJP(a->obj)) { *range_id = DB_OBJ(a->obj)->header.domain; }
+ break;
+ default :
+ if (GRN_DB_OBJP(a->obj)) { *range_id = DB_OBJ(a->obj)->range; }
+ break;
+ }
+ }
+ }
+}
+
+grn_id
+grn_obj_get_range(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id range_id = GRN_ID_NIL;
+ grn_obj_flags range_flags = 0;
+
+ grn_obj_get_range_info(ctx, obj, &range_id, &range_flags);
+
+ return range_id;
+}
+
+int
+grn_obj_is_persistent(grn_ctx *ctx, grn_obj *obj)
+{
+ int res = 0;
+ if (GRN_DB_OBJP(obj)) {
+ res = IS_TEMP(obj) ? 0 : 1;
+ } else if (obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_SCORE :
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ res = 0;
+ break;
+ case GRN_ACCESSOR_GET_ID :
+ case GRN_ACCESSOR_GET_VALUE :
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ case GRN_ACCESSOR_GET_KEY :
+ if (GRN_DB_OBJP(a->obj)) { res = IS_TEMP(obj) ? 0 : 1; }
+ break;
+ default :
+ if (GRN_DB_OBJP(a->obj)) { res = IS_TEMP(obj) ? 0 : 1; }
+ break;
+ }
+ }
+ }
+ return res;
+}
+
+#define SRC2RECORD() do {\
+ grn_obj *table = grn_ctx_at(ctx, dest->header.domain);\
+ if (GRN_OBJ_TABLEP(table)) {\
+ grn_obj *p_key = src;\
+ grn_id id;\
+ if (table->header.type != GRN_TABLE_NO_KEY) {\
+ grn_obj key;\
+ GRN_OBJ_INIT(&key, GRN_BULK, 0, table->header.domain);\
+ if (src->header.domain != table->header.domain) {\
+ grn_obj_cast(ctx, src, &key, GRN_TRUE);\
+ p_key = &key;\
+ }\
+ if (GRN_BULK_VSIZE(p_key)) {\
+ id = addp ? grn_table_add_by_key(ctx, table, p_key, NULL)\
+ : grn_table_get_by_key(ctx, table, p_key);\
+ if (id) { GRN_RECORD_SET(ctx, dest, id); }\
+ } else {\
+ GRN_RECORD_SET(ctx, dest, GRN_ID_NIL);\
+ }\
+ GRN_OBJ_FIN(ctx, &key);\
+ } else {\
+ grn_obj record_id;\
+ GRN_UINT32_INIT(&record_id, 0);\
+ grn_obj_cast(ctx, src, &record_id, GRN_TRUE);\
+ id = GRN_UINT32_VALUE(&record_id);\
+ if (id) { GRN_RECORD_SET(ctx, dest, id); }\
+ }\
+ } else {\
+ rc = GRN_FUNCTION_NOT_IMPLEMENTED;\
+ }\
+} while (0)
+
+inline static grn_rc
+grn_obj_cast_bool(grn_ctx *ctx, grn_obj *src, grn_obj *dest, grn_bool addp)
+{
+ grn_rc rc = GRN_SUCCESS;
+
+ switch (dest->header.domain) {
+ case GRN_DB_BOOL :
+ GRN_BOOL_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_INT8 :
+ GRN_INT8_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_UINT8 :
+ GRN_UINT8_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_INT16 :
+ GRN_INT16_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_UINT16 :
+ GRN_UINT16_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_INT32 :
+ GRN_INT32_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_UINT32 :
+ GRN_UINT32_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_INT64 :
+ GRN_INT64_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_UINT64 :
+ GRN_UINT64_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_FLOAT :
+ GRN_FLOAT_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_TIME :
+ GRN_TIME_SET(ctx, dest, GRN_BOOL_VALUE(src));
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ {
+ const char *bool_text;
+ bool_text = GRN_BOOL_VALUE(src) ? "true" : "false";
+ GRN_TEXT_PUTS(ctx, dest, bool_text);
+ }
+ break;
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ rc = GRN_INVALID_ARGUMENT;
+ break;
+ default :
+ SRC2RECORD();
+ break;
+ }
+ return rc;
+}
+
+#define NUM2DEST(getvalue,totext,tobool,totime,tofloat)\
+ switch (dest->header.domain) {\
+ case GRN_DB_BOOL :\
+ tobool(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_INT8 :\
+ GRN_INT8_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_UINT8 :\
+ GRN_UINT8_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_INT16 :\
+ GRN_INT16_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_UINT16 :\
+ GRN_UINT16_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_INT32 :\
+ GRN_INT32_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_UINT32 :\
+ GRN_UINT32_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_TIME :\
+ totime(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_INT64 :\
+ GRN_INT64_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_UINT64 :\
+ GRN_UINT64_SET(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_FLOAT :\
+ tofloat(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ totext(ctx, dest, getvalue(src));\
+ break;\
+ case GRN_DB_TOKYO_GEO_POINT :\
+ case GRN_DB_WGS84_GEO_POINT :\
+ rc = GRN_INVALID_ARGUMENT;\
+ break;\
+ default :\
+ SRC2RECORD();\
+ break;\
+ }
+
+#define TEXT2DEST(type,tonum,setvalue) do {\
+ const char *cur, *str = GRN_TEXT_VALUE(src);\
+ const char *str_end = GRN_BULK_CURR(src);\
+ type i = tonum(str, str_end, &cur);\
+ if (cur == str_end) {\
+ setvalue(ctx, dest, i);\
+ } else if (cur != str) {\
+ const char *rest;\
+ grn_obj buf;\
+ GRN_VOID_INIT(&buf);\
+ rc = grn_aton(ctx, str, str_end, &rest, &buf);\
+ if (!rc) {\
+ rc = grn_obj_cast(ctx, &buf, dest, addp);\
+ }\
+ GRN_OBJ_FIN(ctx, &buf);\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+} while (0)
+
+#define NUM2BOOL(ctx, dest, value) GRN_BOOL_SET(ctx, dest, value != 0)
+#define FLOAT2BOOL(ctx, dest, value) do {\
+ double value_ = value;\
+ GRN_BOOL_SET(ctx, dest, value_ < -DBL_EPSILON || DBL_EPSILON < value_);\
+} while (0)
+
+#define NUM2TIME(ctx, dest, value)\
+ GRN_TIME_SET(ctx, dest, (long long int)(value) * GRN_TIME_USEC_PER_SEC);
+#define TIME2TIME(ctx, dest, value)\
+ GRN_TIME_SET(ctx, dest, value);
+#define FLOAT2TIME(ctx, dest, value)\
+ GRN_TIME_SET(ctx, dest, (long long int)(value * GRN_TIME_USEC_PER_SEC));
+
+#define NUM2FLOAT(ctx, dest, value)\
+ GRN_FLOAT_SET(ctx, dest, value);
+#define TIME2FLOAT(ctx, dest, value)\
+ GRN_FLOAT_SET(ctx, dest, (double)(value) / GRN_TIME_USEC_PER_SEC);
+#define FLOAT2FLOAT(ctx, dest, value)\
+ GRN_FLOAT_SET(ctx, dest, value);
+
+grn_rc
+grn_obj_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, grn_bool addp)
+{
+ grn_rc rc = GRN_SUCCESS;
+ switch (src->header.domain) {
+ case GRN_DB_BOOL :
+ rc = grn_obj_cast_bool(ctx, src, dest, addp);
+ break;
+ case GRN_DB_INT8 :
+ NUM2DEST(GRN_INT8_VALUE, grn_text_itoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_UINT8 :
+ NUM2DEST(GRN_UINT8_VALUE, grn_text_lltoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_INT16 :
+ NUM2DEST(GRN_INT16_VALUE, grn_text_itoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_UINT16 :
+ NUM2DEST(GRN_UINT16_VALUE, grn_text_lltoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_INT32 :
+ NUM2DEST(GRN_INT32_VALUE, grn_text_itoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_UINT32 :
+ NUM2DEST(GRN_UINT32_VALUE, grn_text_lltoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_INT64 :
+ NUM2DEST(GRN_INT64_VALUE, grn_text_lltoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_TIME :
+ NUM2DEST(GRN_TIME_VALUE, grn_text_lltoa, NUM2BOOL, TIME2TIME, TIME2FLOAT);
+ break;
+ case GRN_DB_UINT64 :
+ NUM2DEST(GRN_UINT64_VALUE, grn_text_lltoa, NUM2BOOL, NUM2TIME, NUM2FLOAT);
+ break;
+ case GRN_DB_FLOAT :
+ NUM2DEST(GRN_FLOAT_VALUE, grn_text_ftoa, FLOAT2BOOL, FLOAT2TIME,
+ FLOAT2FLOAT);
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ switch (dest->header.domain) {
+ case GRN_DB_BOOL :
+ GRN_BOOL_SET(ctx, dest, GRN_TEXT_LEN(src) > 0);
+ break;
+ case GRN_DB_INT8 :
+ TEXT2DEST(int8_t, grn_atoi8, GRN_INT8_SET);
+ break;
+ case GRN_DB_UINT8 :
+ TEXT2DEST(uint8_t, grn_atoui8, GRN_UINT8_SET);
+ break;
+ case GRN_DB_INT16 :
+ TEXT2DEST(int16_t, grn_atoi16, GRN_INT16_SET);
+ break;
+ case GRN_DB_UINT16 :
+ TEXT2DEST(uint16_t, grn_atoui16, GRN_UINT16_SET);
+ break;
+ case GRN_DB_INT32 :
+ TEXT2DEST(int32_t, grn_atoi, GRN_INT32_SET);
+ break;
+ case GRN_DB_UINT32 :
+ TEXT2DEST(uint32_t, grn_atoui, GRN_UINT32_SET);
+ break;
+ case GRN_DB_TIME :
+ {
+ grn_timeval v;
+ int len = GRN_TEXT_LEN(src);
+ char *str = GRN_TEXT_VALUE(src);
+ if (grn_str2timeval(str, len, &v)) {
+ double d;
+ char *end;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, str, len);
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ errno = 0;
+ d = strtod(GRN_TEXT_VALUE(&buf), &end);
+ if (!errno && end + 1 == GRN_BULK_CURR(&buf)) {
+ v.tv_sec = d;
+ v.tv_nsec = ((d - v.tv_sec) * GRN_TIME_NSEC_PER_SEC);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ GRN_TIME_SET(ctx, dest,
+ GRN_TIME_PACK((int64_t)v.tv_sec,
+ GRN_TIME_NSEC_TO_USEC(v.tv_nsec)));
+ }
+ break;
+ case GRN_DB_INT64 :
+ TEXT2DEST(int64_t, grn_atoll, GRN_INT64_SET);
+ break;
+ case GRN_DB_UINT64 :
+ TEXT2DEST(int64_t, grn_atoll, GRN_UINT64_SET);
+ break;
+ case GRN_DB_FLOAT :
+ {
+ double d;
+ char *end;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, GRN_TEXT_VALUE(src), GRN_TEXT_LEN(src));
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ errno = 0;
+ d = strtod(GRN_TEXT_VALUE(&buf), &end);
+ if (!errno && end + 1 == GRN_BULK_CURR(&buf)) {
+ GRN_FLOAT_SET(ctx, dest, d);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ GRN_TEXT_PUT(ctx, dest, GRN_TEXT_VALUE(src), GRN_TEXT_LEN(src));
+ break;
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ {
+ int latitude, longitude;
+ double degree;
+ const char *cur, *str = GRN_TEXT_VALUE(src);
+ const char *str_end = GRN_BULK_CURR(src);
+ if (str == str_end) {
+ GRN_GEO_POINT_SET(ctx, dest, 0, 0);
+ } else {
+ char *end;
+ grn_obj buf, *buf_p = NULL;
+ latitude = grn_atoi(str, str_end, &cur);
+ if (cur < str_end && cur[0] == '.') {
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, str, GRN_TEXT_LEN(src));
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ buf_p = &buf;
+ errno = 0;
+ degree = strtod(GRN_TEXT_VALUE(buf_p), &end);
+ if (errno) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ latitude = GRN_GEO_DEGREE2MSEC(degree);
+ cur = str + (end - GRN_TEXT_VALUE(buf_p));
+ }
+ }
+ if (!rc && (cur[0] == 'x' || cur[0] == ',') && cur + 1 < str_end) {
+ const char *c = cur + 1;
+ longitude = grn_atoi(c, str_end, &cur);
+ if (cur < str_end && cur[0] == '.') {
+ if (!buf_p) {
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, str, GRN_TEXT_LEN(src));
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ buf_p = &buf;
+ }
+ errno = 0;
+ degree = strtod(GRN_TEXT_VALUE(buf_p) + (c - str), &end);
+ if (errno) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ longitude = GRN_GEO_DEGREE2MSEC(degree);
+ cur = str + (end - GRN_TEXT_VALUE(buf_p));
+ }
+ }
+ if (!rc && cur == str_end) {
+ if ((GRN_GEO_MIN_LATITUDE <= latitude &&
+ latitude <= GRN_GEO_MAX_LATITUDE) &&
+ (GRN_GEO_MIN_LONGITUDE <= longitude &&
+ longitude <= GRN_GEO_MAX_LONGITUDE)) {
+ GRN_GEO_POINT_SET(ctx, dest, latitude, longitude);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ if (buf_p) { GRN_OBJ_FIN(ctx, buf_p); }
+ }
+ }
+ break;
+ default :
+ SRC2RECORD();
+ break;
+ }
+ break;
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ if (src->header.domain == dest->header.domain) {
+ GRN_TEXT_PUT(ctx, dest, GRN_TEXT_VALUE(src), GRN_TEXT_LEN(src));
+ } else {
+ int latitude, longitude;
+ double latitude_in_degree, longitude_in_degree;
+ GRN_GEO_POINT_VALUE(src, latitude, longitude);
+ latitude_in_degree = GRN_GEO_MSEC2DEGREE(latitude);
+ longitude_in_degree = GRN_GEO_MSEC2DEGREE(longitude);
+ /* TokyoGeoPoint <-> WGS84GeoPoint is based on
+ http://www.jalan.net/jw/jwp0200/jww0203.do
+
+ jx: longitude in degree in Tokyo Geodetic System.
+ jy: latitude in degree in Tokyo Geodetic System.
+ wx: longitude in degree in WGS 84.
+ wy: latitude in degree in WGS 84.
+
+ jy = wy * 1.000106961 - wx * 0.000017467 - 0.004602017
+ jx = wx * 1.000083049 + wy * 0.000046047 - 0.010041046
+
+ wy = jy - jy * 0.00010695 + jx * 0.000017464 + 0.0046017
+ wx = jx - jy * 0.000046038 - jx * 0.000083043 + 0.010040
+ */
+ if (dest->header.domain == GRN_DB_TOKYO_GEO_POINT) {
+ double wgs84_latitude_in_degree = latitude_in_degree;
+ double wgs84_longitude_in_degree = longitude_in_degree;
+ int tokyo_latitude, tokyo_longitude;
+ double tokyo_latitude_in_degree, tokyo_longitude_in_degree;
+ tokyo_latitude_in_degree =
+ wgs84_latitude_in_degree * 1.000106961 -
+ wgs84_longitude_in_degree * 0.000017467 -
+ 0.004602017;
+ tokyo_longitude_in_degree =
+ wgs84_longitude_in_degree * 1.000083049 +
+ wgs84_latitude_in_degree * 0.000046047 -
+ 0.010041046;
+ tokyo_latitude = GRN_GEO_DEGREE2MSEC(tokyo_latitude_in_degree);
+ tokyo_longitude = GRN_GEO_DEGREE2MSEC(tokyo_longitude_in_degree);
+ GRN_GEO_POINT_SET(ctx, dest, tokyo_latitude, tokyo_longitude);
+ } else {
+ double tokyo_latitude_in_degree = latitude_in_degree;
+ double tokyo_longitude_in_degree = longitude_in_degree;
+ int wgs84_latitude, wgs84_longitude;
+ double wgs84_latitude_in_degree, wgs84_longitude_in_degree;
+ wgs84_latitude_in_degree =
+ tokyo_latitude_in_degree -
+ tokyo_latitude_in_degree * 0.00010695 +
+ tokyo_longitude_in_degree * 0.000017464 +
+ 0.0046017;
+ wgs84_longitude_in_degree =
+ tokyo_longitude_in_degree -
+ tokyo_latitude_in_degree * 0.000046038 -
+ tokyo_longitude_in_degree * 0.000083043 +
+ 0.010040;
+ wgs84_latitude = GRN_GEO_DEGREE2MSEC(wgs84_latitude_in_degree);
+ wgs84_longitude = GRN_GEO_DEGREE2MSEC(wgs84_longitude_in_degree);
+ GRN_GEO_POINT_SET(ctx, dest, wgs84_latitude, wgs84_longitude);
+ }
+ }
+ break;
+ case GRN_VOID :
+ rc = grn_obj_reinit(ctx, dest, dest->header.domain, dest->header.flags);
+ break;
+ default :
+ rc = GRN_FUNCTION_NOT_IMPLEMENTED;
+ break;
+ }
+ return rc;
+}
+
+const char *
+grn_accessor_get_value_(grn_ctx *ctx, grn_accessor *a, grn_id id, uint32_t *size)
+{
+ const char *value = NULL;
+ for (;;) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ value = (const char *)(uintptr_t)id;
+ *size = GRN_OBJ_GET_VALUE_IMD;
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ value = _grn_table_key(ctx, a->obj, id, size);
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ value = grn_obj_get_value_(ctx, a->obj, id, size);
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ if ((value = grn_obj_get_value_(ctx, a->obj, id, size))) {
+ value = (const char *)&((grn_rset_recinfo *)value)->score;
+ *size = sizeof(int);
+ }
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ if ((value = grn_obj_get_value_(ctx, a->obj, id, size))) {
+ value = (const char *)&((grn_rset_recinfo *)value)->n_subrecs;
+ *size = sizeof(int);
+ }
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ /* todo : support vector */
+ value = grn_obj_get_value_(ctx, a->obj, id, size);
+ break;
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ value = _grn_table_key(ctx, ((grn_db *)ctx->impl->db)->keys, id, size);
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ if (value && (a = a->next)) {
+ id = *((grn_id *)value);
+ } else {
+ break;
+ }
+ }
+ return value;
+}
+
+static grn_obj *
+grn_accessor_get_value(grn_ctx *ctx, grn_accessor *a, grn_id id, grn_obj *value)
+{
+ uint32_t vs = 0;
+ uint32_t size0;
+ void *vp = NULL;
+ if (!value) {
+ if (!(value = grn_obj_open(ctx, GRN_BULK, 0, 0))) { return NULL; }
+ } else {
+ value->header.type = GRN_BULK;
+ }
+ size0 = GRN_BULK_VSIZE(value);
+ for (;;) {
+ grn_bulk_truncate(ctx, value, size0);
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ GRN_UINT32_PUT(ctx, value, id);
+ vp = GRN_BULK_HEAD(value) + size0;
+ vs = GRN_BULK_VSIZE(value) - size0;
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ grn_table_get_key2(ctx, a->obj, id, value);
+ vp = GRN_BULK_HEAD(value) + size0;
+ vs = GRN_BULK_VSIZE(value) - size0;
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ grn_obj_get_value(ctx, a->obj, id, value);
+ vp = GRN_BULK_HEAD(value) + size0;
+ vs = GRN_BULK_VSIZE(value) - size0;
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ grn_obj_get_value(ctx, a->obj, id, value);
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, value, ri->score);
+ }
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, value, ri->n_subrecs);
+ }
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ /* todo : support vector */
+ grn_obj_get_value(ctx, a->obj, id, value);
+ vp = GRN_BULK_HEAD(value) + size0;
+ vs = GRN_BULK_VSIZE(value) - size0;
+ break;
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ value = grn_ctx_at(ctx, id);
+ grn_obj_close(ctx, value);
+ return value;
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ if ((a = a->next)) {
+ id = *((grn_id *)vp);
+ } else {
+ break;
+ }
+ }
+ return value;
+}
+
+static grn_rc
+grn_accessor_set_value(grn_ctx *ctx, grn_accessor *a, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (!value) { value = grn_obj_open(ctx, GRN_BULK, 0, 0); }
+ if (value) {
+ grn_obj buf;
+ void *vp = NULL;
+ GRN_TEXT_INIT(&buf, 0);
+ for (;;) {
+ GRN_BULK_REWIND(&buf);
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_KEY :
+ grn_table_get_key2(ctx, a->obj, id, &buf);
+ vp = GRN_BULK_HEAD(&buf);
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ if (a->next) {
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ vp = GRN_BULK_HEAD(&buf);
+ } else {
+ rc = grn_obj_set_value(ctx, a->obj, id, value, flags);
+ }
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ {
+ grn_rset_recinfo *ri;
+ if (a->next) {
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ ri = (grn_rset_recinfo *)GRN_BULK_HEAD(&buf);
+ vp = &ri->score;
+ } else {
+ uint32_t size;
+ if ((ri = (grn_rset_recinfo *) grn_obj_get_value_(ctx, a->obj, id, &size))) {
+ vp = &ri->score;
+ // todo : flags support
+ if (value->header.domain == GRN_DB_INT32) {
+ memcpy(vp, GRN_BULK_HEAD(value), sizeof(int));
+ } else {
+ grn_obj buf;
+ GRN_INT32_INIT(&buf, 0);
+ grn_obj_cast(ctx, value, &buf, GRN_FALSE);
+ memcpy(vp, GRN_BULK_HEAD(&buf), sizeof(int));
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ }
+ }
+ }
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)GRN_BULK_HEAD(&buf);
+ vp = &ri->n_subrecs;
+ }
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ /* todo : support vector */
+ if (a->next) {
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ vp = GRN_BULK_HEAD(&buf);
+ } else {
+ rc = grn_obj_set_value(ctx, a->obj, id, value, flags);
+ }
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ if ((a = a->next)) {
+ id = *((grn_id *)vp);
+ } else {
+ break;
+ }
+ }
+ grn_obj_close(ctx, &buf);
+ }
+ return rc;
+}
+
+#define INCRDECR(op) \
+ switch (DB_OBJ(obj)->range) {\
+ case GRN_DB_INT8 :\
+ if (s == sizeof(int8_t)) {\
+ int8_t *vp = (int8_t *)p;\
+ *vp op *(int8_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_UINT8 :\
+ if (s == sizeof(uint8_t)) {\
+ uint8_t *vp = (uint8_t *)p;\
+ *vp op *(int8_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_INT16 :\
+ if (s == sizeof(int16_t)) {\
+ int16_t *vp = (int16_t *)p;\
+ *vp op *(int16_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_UINT16 :\
+ if (s == sizeof(uint16_t)) {\
+ uint16_t *vp = (uint16_t *)p;\
+ *vp op *(int16_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_INT32 :\
+ if (s == sizeof(int32_t)) {\
+ int32_t *vp = (int32_t *)p;\
+ *vp op *(int32_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_UINT32 :\
+ if (s == sizeof(uint32_t)) {\
+ uint32_t *vp = (uint32_t *)p;\
+ *vp op *(int32_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_INT64 :\
+ case GRN_DB_TIME :\
+ if (s == sizeof(int64_t)) {\
+ int64_t *vp = (int64_t *)p;\
+ *vp op *(int64_t *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ case GRN_DB_FLOAT :\
+ if (s == sizeof(double)) {\
+ double *vp = (double *)p;\
+ *vp op *(double *)v;\
+ rc = GRN_SUCCESS;\
+ } else {\
+ rc = GRN_INVALID_ARGUMENT;\
+ }\
+ break;\
+ default :\
+ rc = GRN_OPERATION_NOT_SUPPORTED;\
+ break;\
+ }
+
+uint32_t
+grn_obj_size(grn_ctx *ctx, grn_obj *obj)
+{
+ if (!obj) { return 0; }
+ switch (obj->header.type) {
+ case GRN_VOID :
+ case GRN_BULK :
+ case GRN_PTR :
+ case GRN_UVECTOR :
+ case GRN_PVECTOR :
+ case GRN_MSG :
+ return GRN_BULK_VSIZE(obj);
+ case GRN_VECTOR :
+ return obj->u.v.body ? GRN_BULK_VSIZE(obj->u.v.body) : 0;
+ default :
+ return 0;
+ }
+}
+
+inline static int
+call_hook(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int flags)
+{
+ grn_hook *hooks = DB_OBJ(obj)->hooks[GRN_HOOK_SET];
+ void *v = GRN_BULK_HEAD(value);
+ unsigned int s = grn_obj_size(ctx, value);
+ if (hooks || obj->header.type == GRN_COLUMN_VAR_SIZE) {
+ grn_obj oldbuf, *oldvalue;
+ GRN_TEXT_INIT(&oldbuf, 0);
+ oldvalue = grn_obj_get_value(ctx, obj, id, &oldbuf);
+ if (flags & GRN_OBJ_SET) {
+ void *ov;
+ unsigned int os;
+ ov = GRN_BULK_HEAD(oldvalue);
+ os = grn_obj_size(ctx, oldvalue);
+ if ((ov && v && os == s && !memcmp(ov, v, s)) &&
+ !(obj->header.type == GRN_COLUMN_FIX_SIZE &&
+ grn_bulk_is_zero(ctx, value))) {
+ grn_obj_close(ctx, oldvalue);
+ return 0;
+ }
+ }
+ if (hooks) {
+ // todo : grn_proc_ctx_open()
+ grn_obj id_, flags_;
+ grn_proc_ctx pctx = {{0}, hooks->proc, NULL, hooks, hooks, PROC_INIT, 4, 4};
+ GRN_UINT32_INIT(&id_, 0);
+ GRN_UINT32_INIT(&flags_, 0);
+ GRN_UINT32_SET(ctx, &id_, id);
+ GRN_UINT32_SET(ctx, &flags_, flags);
+ while (hooks) {
+ grn_ctx_push(ctx, &id_);
+ grn_ctx_push(ctx, oldvalue);
+ grn_ctx_push(ctx, value);
+ grn_ctx_push(ctx, &flags_);
+ pctx.caller = NULL;
+ pctx.currh = hooks;
+ if (hooks->proc) {
+ hooks->proc->funcs[PROC_INIT](ctx, 1, &obj, &pctx.user_data);
+ } else {
+ default_set_value_hook(ctx, 1, &obj, &pctx.user_data);
+ }
+ if (ctx->rc) {
+ grn_obj_close(ctx, oldvalue);
+ return 1;
+ }
+ hooks = hooks->next;
+ pctx.offset++;
+ }
+ }
+ grn_obj_close(ctx, oldvalue);
+ }
+ return 0;
+}
+
+inline static int
+call_hook_for_build(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value, int flags)
+{
+ grn_hook *hooks = DB_OBJ(obj)->hooks[GRN_HOOK_SET];
+
+ if (hooks || obj->header.type == GRN_COLUMN_VAR_SIZE) {
+ grn_obj oldvalue;
+ GRN_TEXT_INIT(&oldvalue, 0);
+
+ if (hooks) {
+ // todo : grn_proc_ctx_open()
+ grn_obj id_, flags_;
+ grn_proc_ctx pctx = {{0}, hooks->proc, NULL, hooks, hooks, PROC_INIT, 4, 4};
+ GRN_UINT32_INIT(&id_, 0);
+ GRN_UINT32_INIT(&flags_, 0);
+ GRN_UINT32_SET(ctx, &id_, id);
+ GRN_UINT32_SET(ctx, &flags_, flags);
+ while (hooks) {
+ grn_ctx_push(ctx, &id_);
+ grn_ctx_push(ctx, &oldvalue);
+ grn_ctx_push(ctx, value);
+ grn_ctx_push(ctx, &flags_);
+ pctx.caller = NULL;
+ pctx.currh = hooks;
+ if (hooks->proc) {
+ hooks->proc->funcs[PROC_INIT](ctx, 1, &obj, &pctx.user_data);
+ } else {
+ default_set_value_hook(ctx, 1, &obj, &pctx.user_data);
+ }
+ if (ctx->rc) {
+ grn_obj_close(ctx, &oldvalue);
+ return 1;
+ }
+ hooks = hooks->next;
+ pctx.offset++;
+ }
+ }
+ grn_obj_close(ctx, &oldvalue);
+ }
+ return 0;
+}
+
+static grn_rc
+grn_obj_set_value_table_pat_key(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ grn_obj buf;
+
+ if (call_hook(ctx, obj, id, value, flags)) {
+ return rc;
+ }
+
+ if (range != value->header.domain) {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) {
+ v = GRN_BULK_HEAD(&buf);
+ }
+ }
+ rc = grn_pat_set_value(ctx, (grn_pat *)obj, id, v, flags);
+ if (range != value->header.domain) {
+ grn_obj_close(ctx, &buf);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_table_hash_key(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ grn_obj buf;
+
+ if (call_hook(ctx, obj, id, value, flags)) {
+ return rc;
+ }
+
+ if (range != value->header.domain) {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) {
+ v = GRN_BULK_HEAD(&buf);
+ }
+ }
+ rc = grn_hash_set_value(ctx, (grn_hash *)obj, id, v, flags);
+ if (range != value->header.domain) {
+ grn_obj_close(ctx, &buf);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_table_no_key(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ grn_obj buf;
+
+ if (call_hook(ctx, obj, id, value, flags)) {
+ return rc;
+ }
+
+ if (range != value->header.domain) {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) {
+ v = GRN_BULK_HEAD(&buf);
+ }
+ }
+ rc = grn_array_set_value(ctx, (grn_array *)obj, id, v, flags);
+ if (range != value->header.domain) {
+ grn_obj_close(ctx, &buf);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_column_var_size_scalar(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ unsigned int s = grn_obj_size(ctx, value);
+ grn_obj buf;
+ grn_id buf_domain = GRN_DB_VOID;
+
+ if (call_hook(ctx, obj, id, value, flags)) {
+ return rc;
+ }
+
+ switch (flags & GRN_OBJ_SET_MASK) {
+ case GRN_OBJ_INCR :
+ case GRN_OBJ_DECR :
+ if (value->header.domain == GRN_DB_INT32 ||
+ value->header.domain == GRN_DB_INT64) {
+ /* do nothing */
+ } else if (GRN_DB_INT8 <= value->header.domain &&
+ value->header.domain < GRN_DB_INT32) {
+ buf_domain = GRN_DB_INT32;
+ } else {
+ buf_domain = GRN_DB_INT64;
+ }
+ break;
+ default :
+ if (range != value->header.domain) {
+ buf_domain = range;
+ }
+ break;
+ }
+
+ if (buf_domain != GRN_DB_VOID) {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, buf_domain);
+ if (grn_obj_cast(ctx, value, &buf, GRN_TRUE) == GRN_SUCCESS) {
+ v = GRN_BULK_HEAD(&buf);
+ s = GRN_BULK_VSIZE(&buf);
+ }
+ }
+
+ rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags, NULL);
+
+ if (buf_domain != GRN_DB_VOID) {
+ grn_obj_close(ctx, &buf);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_column_var_size_vector_uvector(grn_ctx *ctx, grn_obj *column,
+ grn_id id, grn_obj *value,
+ int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_obj uvector;
+ grn_obj_flags uvector_flags = 0;
+ grn_bool need_convert = GRN_FALSE;
+ void *raw_value;
+ unsigned int size;
+
+ if (column->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ if (!IS_WEIGHT_UVECTOR(value)) {
+ need_convert = GRN_TRUE;
+ }
+ } else {
+ if (IS_WEIGHT_UVECTOR(value)) {
+ need_convert = GRN_TRUE;
+ uvector_flags = GRN_OBJ_WITH_WEIGHT;
+ }
+ }
+
+ if (need_convert) {
+ unsigned int i, n;
+ GRN_VALUE_FIX_SIZE_INIT(&uvector, GRN_OBJ_VECTOR, value->header.domain);
+ uvector.header.flags |= uvector_flags;
+ n = grn_uvector_size(ctx, value);
+ for (i = 0; i < n; i++) {
+ grn_id id;
+ unsigned int weight = 0;
+ id = grn_uvector_get_element(ctx, value, i, NULL);
+ grn_uvector_add_element(ctx, &uvector, id, weight);
+ }
+ raw_value = GRN_BULK_HEAD(&uvector);
+ size = GRN_BULK_VSIZE(&uvector);
+ } else {
+ raw_value = GRN_BULK_HEAD(value);
+ size = GRN_BULK_VSIZE(value);
+ }
+
+ rc = grn_ja_put(ctx, (grn_ja *)column, id, raw_value, size, flags, NULL);
+
+ if (need_convert) {
+ GRN_OBJ_FIN(ctx, &uvector);
+ }
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_column_var_size_vector(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ unsigned int s = grn_obj_size(ctx, value);
+ grn_obj *lexicon = grn_ctx_at(ctx, range);
+
+ if (call_hook(ctx, obj, id, value, flags)) {
+ return rc;
+ }
+
+ if (value->header.type == GRN_UVECTOR) {
+ rc = grn_obj_set_value_column_var_size_vector_uvector(ctx, obj,
+ id, value,
+ flags);
+ return rc;
+ }
+
+ if (GRN_OBJ_TABLEP(lexicon)) {
+ grn_obj uvector;
+ GRN_RECORD_INIT(&uvector, GRN_OBJ_VECTOR, range);
+ if (obj->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ uvector.header.flags |= GRN_OBJ_WITH_WEIGHT;
+ }
+ switch (value->header.type) {
+ case GRN_BULK :
+ {
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor;
+ if (v && s &&
+ (token_cursor = grn_token_cursor_open(ctx, lexicon, v, s,
+ GRN_TOKEN_ADD, token_flags))) {
+ while (token_cursor->status == GRN_TOKEN_DOING) {
+ grn_id tid = grn_token_cursor_next(ctx, token_cursor);
+ grn_uvector_add_element(ctx, &uvector, tid, 0);
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ rc = grn_ja_put(ctx, (grn_ja *)obj, id,
+ GRN_BULK_HEAD(&uvector), GRN_BULK_VSIZE(&uvector),
+ flags, NULL);
+ }
+ break;
+ case GRN_VECTOR :
+ {
+ unsigned int n;
+ n = grn_vector_size(ctx, value);
+ if (n > 0) {
+ unsigned int i;
+ grn_obj value_buf, cast_buf;
+ GRN_OBJ_INIT(&value_buf, GRN_BULK, 0, GRN_DB_VOID);
+ GRN_OBJ_INIT(&cast_buf, GRN_BULK, 0, lexicon->header.domain);
+ for (i = 0; i < n; i++) {
+ grn_id tid;
+ const char *element;
+ unsigned int element_length;
+ unsigned int weight;
+ grn_id element_domain;
+
+ element_length = grn_vector_get_element(ctx, value, i,
+ &element, &weight,
+ &element_domain);
+ if (element_domain != lexicon->header.domain) {
+ GRN_BULK_REWIND(&cast_buf);
+ GRN_BULK_REWIND(&value_buf);
+ grn_bulk_write(ctx, &value_buf, element, element_length);
+ value_buf.header.domain = element_domain;
+ rc = grn_obj_cast(ctx, &value_buf, &cast_buf, GRN_TRUE);
+ if (rc) {
+ grn_obj *range_obj;
+ range_obj = grn_ctx_at(ctx, range);
+ ERR_CAST(obj, range_obj, &value_buf);
+ grn_obj_unlink(ctx, range_obj);
+ } else {
+ element = GRN_BULK_HEAD(&cast_buf);
+ element_length = GRN_BULK_VSIZE(&cast_buf);
+ }
+ } else {
+ rc = GRN_SUCCESS;
+ }
+ if (rc) {
+ continue;
+ }
+ tid = grn_table_add(ctx, lexicon, element, element_length, NULL);
+ grn_uvector_add_element(ctx, &uvector, tid, weight);
+ }
+ GRN_OBJ_FIN(ctx, &value_buf);
+ GRN_OBJ_FIN(ctx, &cast_buf);
+ }
+ }
+ rc = grn_ja_put(ctx, (grn_ja *)obj, id,
+ GRN_BULK_HEAD(&uvector), GRN_BULK_VSIZE(&uvector),
+ flags, NULL);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "vector, uvector or bulk required");
+ break;
+ }
+ grn_obj_close(ctx, &uvector);
+ } else {
+ switch (value->header.type) {
+ case GRN_BULK :
+ if (!GRN_BULK_VSIZE(value)) {
+ rc = grn_ja_put(ctx, (grn_ja *)obj, id, NULL, 0, flags, NULL);
+ } else {
+ grn_obj v;
+ GRN_OBJ_INIT(&v, GRN_VECTOR, GRN_OBJ_DO_SHALLOW_COPY, GRN_DB_TEXT);
+ v.u.v.body = value;
+ grn_vector_delimit(ctx, &v, 0, GRN_ID_NIL);
+ rc = grn_ja_putv(ctx, (grn_ja *)obj, id, &v, 0);
+ grn_obj_close(ctx, &v);
+ }
+ break;
+ case GRN_VECTOR :
+ rc = grn_ja_putv(ctx, (grn_ja *)obj, id, value, 0);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "vector or bulk required");
+ break;
+ }
+ }
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_column_fix_size(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_id range = DB_OBJ(obj)->range;
+ void *v = GRN_BULK_HEAD(value);
+ unsigned int s = grn_obj_size(ctx, value);
+ grn_obj buf, *value_ = value;
+ uint32_t element_size = ((grn_ra *)obj)->header->element_size;
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ if (range != value->header.domain) {
+ rc = grn_obj_cast(ctx, value, &buf, GRN_TRUE);
+ if (rc) {
+ grn_obj *range_obj;
+ range_obj = grn_ctx_at(ctx, range);
+ ERR_CAST(obj, range_obj, value);
+ grn_obj_unlink(ctx, range_obj);
+ } else {
+ value_ = &buf;
+ v = GRN_BULK_HEAD(&buf);
+ s = GRN_BULK_VSIZE(&buf);
+ }
+ } else {
+ rc = GRN_SUCCESS;
+ }
+ if (rc) {
+ /* do nothing because it already has error. */
+ } else if (element_size < s) {
+ ERR(GRN_INVALID_ARGUMENT, "too long value (%d)", s);
+ } else {
+ void *p = grn_ra_ref(ctx, (grn_ra *)obj, id);
+ if (!p) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "ra get failed");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ return rc;
+ }
+ switch (flags & GRN_OBJ_SET_MASK) {
+ case GRN_OBJ_SET :
+ if (call_hook(ctx, obj, id, value_, flags)) {
+ GRN_OBJ_FIN(ctx, &buf);
+ grn_ra_unref(ctx, (grn_ra *)obj, id);
+ return rc;
+ }
+ if (element_size != s) {
+ if (!s) {
+ memset(p, 0, element_size);
+ } else {
+ void *b;
+ if ((b = GRN_CALLOC(element_size))) {
+ memcpy(b, v, s);
+ memcpy(p, b, element_size);
+ GRN_FREE(b);
+ }
+ }
+ } else {
+ memcpy(p, v, s);
+ }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_OBJ_INCR :
+ /* todo : support hook */
+ INCRDECR(+=);
+ break;
+ case GRN_OBJ_DECR :
+ /* todo : support hook */
+ INCRDECR(-=);
+ break;
+ default :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ }
+ grn_ra_unref(ctx, (grn_ra *)obj, id);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_value_column_index(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ column_name_size = grn_obj_name(ctx, obj, column_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "can't set value to index column directly: <%.*s>",
+ column_name_size, column_name);
+ return ctx->rc;
+}
+
+grn_rc
+grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_obj *value, int flags)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (!GRN_DB_OBJP(obj)) {
+ if (obj->header.type == GRN_ACCESSOR) {
+ rc = grn_accessor_set_value(ctx, (grn_accessor *)obj, id, value, flags);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "not db_obj");
+ }
+ } else {
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ rc = grn_obj_set_value_table_pat_key(ctx, obj, id, value, flags);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ rc = GRN_OPERATION_NOT_SUPPORTED;
+ break;
+ case GRN_TABLE_HASH_KEY :
+ rc = grn_obj_set_value_table_hash_key(ctx, obj, id, value, flags);
+ break;
+ case GRN_TABLE_NO_KEY :
+ rc = grn_obj_set_value_table_no_key(ctx, obj, id, value, flags);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ switch (obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_SCALAR :
+ rc = grn_obj_set_value_column_var_size_scalar(ctx, obj, id, value,
+ flags);
+ break;
+ case GRN_OBJ_COLUMN_VECTOR :
+ rc = grn_obj_set_value_column_var_size_vector(ctx, obj, id, value,
+ flags);
+ break;
+ default :
+ ERR(GRN_FILE_CORRUPT, "invalid GRN_OBJ_COLUMN_TYPE");
+ break;
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ rc = grn_obj_set_value_column_fix_size(ctx, obj, id, value, flags);
+ break;
+ case GRN_COLUMN_INDEX :
+ rc = grn_obj_set_value_column_index(ctx, obj, id, value, flags);
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+const char *
+grn_obj_get_value_(grn_ctx *ctx, grn_obj *obj, grn_id id, uint32_t *size)
+{
+ const char *value = NULL;
+ *size = 0;
+ switch (obj->header.type) {
+ case GRN_ACCESSOR :
+ value = grn_accessor_get_value_(ctx, (grn_accessor *)obj, id, size);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ value = grn_pat_get_value_(ctx, (grn_pat *)obj, id, size);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "GRN_TABLE_DAT_KEY not supported");
+ break;
+ case GRN_TABLE_HASH_KEY :
+ value = grn_hash_get_value_(ctx, (grn_hash *)obj, id, size);
+ break;
+ case GRN_TABLE_NO_KEY :
+ if ((value = _grn_array_get_value(ctx, (grn_array *)obj, id))) {
+ *size = ((grn_array *)obj)->value_size;
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ {
+ grn_io_win jw;
+ if ((value = grn_ja_ref(ctx, (grn_ja *)obj, id, &jw, size))) {
+ grn_ja_unref(ctx, &jw);
+ }
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ if ((value = grn_ra_ref(ctx, (grn_ra *)obj, id))) {
+ grn_ra_unref(ctx, (grn_ra *)obj, id);
+ *size = ((grn_ra *)obj)->header->element_size;
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "todo: GRN_COLUMN_INDEX");
+ break;
+ }
+ return value;
+}
+
+static void
+grn_obj_get_value_column_index(grn_ctx *ctx, grn_obj *index_column,
+ grn_id id, grn_obj *value)
+{
+ grn_ii *ii = (grn_ii *)index_column;
+ grn_obj_ensure_bulk(ctx, value);
+ GRN_UINT32_SET(ctx, value, grn_ii_estimate_size(ctx, ii, id));
+ value->header.domain = GRN_DB_UINT32;
+}
+
+static grn_obj *
+grn_obj_get_value_column_vector(grn_ctx *ctx, grn_obj *obj,
+ grn_id id, grn_obj *value)
+{
+ grn_obj *lexicon;
+
+ lexicon = grn_ctx_at(ctx, DB_OBJ(obj)->range);
+ if (lexicon && !GRN_OBJ_TABLEP(lexicon) &&
+ (lexicon->header.flags & GRN_OBJ_KEY_VAR_SIZE)) {
+ grn_obj v_;
+ grn_obj_ensure_vector(ctx, value);
+ GRN_TEXT_INIT(&v_, 0);
+ grn_ja_get_value(ctx, (grn_ja *)obj, id, &v_);
+ grn_vector_decode(ctx, value, GRN_TEXT_VALUE(&v_), GRN_TEXT_LEN(&v_));
+ GRN_OBJ_FIN(ctx, &v_);
+ } else {
+ grn_obj_ensure_bulk(ctx, value);
+ grn_ja_get_value(ctx, (grn_ja *)obj, id, value);
+ value->header.type = GRN_UVECTOR;
+ if (obj->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ value->header.flags |= GRN_OBJ_WITH_WEIGHT;
+ } else {
+ value->header.flags &= ~GRN_OBJ_WITH_WEIGHT;
+ }
+ }
+
+ return value;
+}
+
+grn_obj *
+grn_obj_get_value(grn_ctx *ctx, grn_obj *obj, grn_id id, grn_obj *value)
+{
+ GRN_API_ENTER;
+ if (!id) { goto exit; }
+ if (!obj) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_value failed");
+ goto exit;
+ }
+ if (!value) {
+ if (!(value = grn_obj_open(ctx, GRN_BULK, 0, 0))) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_value failed");
+ goto exit;
+ }
+ }
+ switch (value->header.type) {
+ case GRN_VOID :
+ GRN_TEXT_INIT(value, 0);
+ break;
+ case GRN_BULK :
+ case GRN_VECTOR :
+ case GRN_UVECTOR :
+ case GRN_MSG :
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_value failed");
+ goto exit;
+ }
+ switch (obj->header.type) {
+ case GRN_ACCESSOR :
+ grn_obj_ensure_bulk(ctx, value);
+ value = grn_accessor_get_value(ctx, (grn_accessor *)obj, id, value);
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ {
+ grn_pat *pat = (grn_pat *)obj;
+ uint32_t size = pat->value_size;
+ grn_obj_ensure_bulk(ctx, value);
+ if (grn_bulk_space(ctx, value, size)) {
+ MERR("grn_bulk_space failed");
+ goto exit;
+ }
+ {
+ char *curr = GRN_BULK_CURR(value);
+ grn_pat_get_value(ctx, pat, id, curr - size);
+ }
+ value->header.type = GRN_BULK;
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "GRN_TABLE_DAT_KEY not supported");
+ break;
+ case GRN_TABLE_HASH_KEY :
+ {
+ grn_hash *hash = (grn_hash *)obj;
+ uint32_t size = hash->value_size;
+ grn_obj_ensure_bulk(ctx, value);
+ if (grn_bulk_space(ctx, value, size)) {
+ MERR("grn_bulk_space failed");
+ goto exit;
+ }
+ {
+ char *curr = GRN_BULK_CURR(value);
+ grn_hash_get_value(ctx, hash, id, curr - size);
+ }
+ value->header.type = GRN_BULK;
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_array *array = (grn_array *)obj;
+ uint32_t size = array->value_size;
+ grn_obj_ensure_bulk(ctx, value);
+ if (grn_bulk_space(ctx, value, size)) {
+ MERR("grn_bulk_space failed");
+ goto exit;
+ }
+ {
+ char *curr = GRN_BULK_CURR(value);
+ grn_array_get_value(ctx, array, id, curr - size);
+ }
+ value->header.type = GRN_BULK;
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ switch (obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_VECTOR :
+ grn_obj_get_value_column_vector(ctx, obj, id, value);
+ break;
+ case GRN_OBJ_COLUMN_SCALAR :
+ grn_obj_ensure_bulk(ctx, value);
+ grn_ja_get_value(ctx, (grn_ja *)obj, id, value);
+ value->header.type = GRN_BULK;
+ break;
+ default :
+ ERR(GRN_FILE_CORRUPT, "invalid GRN_OBJ_COLUMN_TYPE");
+ break;
+ }
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ {
+ unsigned int element_size;
+ void *v = grn_ra_ref(ctx, (grn_ra *)obj, id);
+ grn_obj_ensure_bulk(ctx, value);
+ value->header.type = GRN_BULK;
+ value->header.domain = grn_obj_get_range(ctx, obj);
+ if (v) {
+ element_size = ((grn_ra *)obj)->header->element_size;
+ grn_bulk_write(ctx, value, v, element_size);
+ grn_ra_unref(ctx, (grn_ra *)obj, id);
+ }
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ grn_obj_get_value_column_index(ctx, obj, id, value);
+ break;
+ }
+exit :
+ GRN_API_RETURN(value);
+}
+
+int
+grn_obj_get_values(grn_ctx *ctx, grn_obj *obj, grn_id offset, void **values)
+{
+ int nrecords = -1;
+ GRN_API_ENTER;
+ if (obj->header.type == GRN_COLUMN_FIX_SIZE) {
+ grn_obj *domain = grn_column_table(ctx, obj);
+ if (domain) {
+ int table_size = (int)grn_table_size(ctx, domain);
+ if (0 < offset && offset <= table_size) {
+ grn_ra *ra = (grn_ra *)obj;
+ void *p = grn_ra_ref(ctx, ra, offset);
+ if (p) {
+ if ((offset >> ra->element_width) == (table_size >> ra->element_width)) {
+ nrecords = (table_size & ra->element_mask) + 1 - (offset & ra->element_mask);
+ } else {
+ nrecords = ra->element_mask + 1 - (offset & ra->element_mask);
+ }
+ if (values) { *values = p; }
+ grn_ra_unref(ctx, ra, offset);
+ } else {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "ra get failed");
+ }
+ } else {
+ nrecords = 0;
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "no domain found");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "obj is not a fix sized column");
+ }
+ GRN_API_RETURN(nrecords);
+}
+
+grn_rc
+grn_column_index_update(grn_ctx *ctx, grn_obj *column,
+ grn_id id, unsigned int section,
+ grn_obj *oldvalue, grn_obj *newvalue)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (column->header.type != GRN_COLUMN_INDEX) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid column assigned");
+ } else {
+ rc = grn_ii_column_update(ctx, (grn_ii *)column, id, section, oldvalue, newvalue, NULL);
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_obj *
+grn_column_table(grn_ctx *ctx, grn_obj *column)
+{
+ grn_obj *obj = NULL;
+ grn_db_obj *col = DB_OBJ(column);
+ GRN_API_ENTER;
+ if (col) {
+ obj = grn_ctx_at(ctx, col->header.domain);
+ }
+ GRN_API_RETURN(obj);
+}
+
+grn_obj *
+grn_obj_get_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *valuebuf)
+{
+ GRN_API_ENTER;
+ switch (type) {
+ case GRN_INFO_SUPPORT_ZLIB :
+ if (!valuebuf && !(valuebuf = grn_obj_open(ctx, GRN_BULK, 0, GRN_DB_BOOL))) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "failed to open value buffer for GRN_INFO_ZLIB_SUPPORT");
+ goto exit;
+ }
+#ifdef GRN_WITH_ZLIB
+ GRN_BOOL_PUT(ctx, valuebuf, GRN_TRUE);
+#else
+ GRN_BOOL_PUT(ctx, valuebuf, GRN_FALSE);
+#endif
+ break;
+ case GRN_INFO_SUPPORT_LZO :
+ if (!valuebuf && !(valuebuf = grn_obj_open(ctx, GRN_BULK, 0, GRN_DB_BOOL))) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "failed to open value buffer for GRN_INFO_LZO_SUPPORT");
+ goto exit;
+ }
+#ifdef GRN_WITH_LZO
+ GRN_BOOL_PUT(ctx, valuebuf, GRN_TRUE);
+#else /* GRN_WITH_LZO */
+ GRN_BOOL_PUT(ctx, valuebuf, GRN_FALSE);
+#endif /* GRN_WITH_LZO */
+ break;
+ default :
+ if (!obj) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_info failed");
+ goto exit;
+ }
+ switch (type) {
+ case GRN_INFO_ENCODING :
+ if (!valuebuf) {
+ if (!(valuebuf = grn_obj_open(ctx, GRN_BULK, 0, 0))) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_info failed");
+ goto exit;
+ }
+ }
+ {
+ grn_encoding enc;
+ if (obj->header.type == GRN_DB) { obj = ((grn_db *)obj)->keys; }
+ switch (obj->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ enc = ((grn_pat *)obj)->encoding;
+ grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
+ break;
+ case GRN_TABLE_DAT_KEY :
+ enc = ((grn_dat *)obj)->encoding;
+ grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
+ break;
+ case GRN_TABLE_HASH_KEY :
+ enc = ((grn_hash *)obj)->encoding;
+ grn_bulk_write(ctx, valuebuf, (const char *)&enc, sizeof(grn_encoding));
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_info failed");
+ }
+ }
+ break;
+ case GRN_INFO_SOURCE :
+ if (!valuebuf) {
+ if (!(valuebuf = grn_obj_open(ctx, GRN_BULK, 0, 0))) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_info failed");
+ goto exit;
+ }
+ }
+ if (!GRN_DB_OBJP(obj)) {
+ ERR(GRN_INVALID_ARGUMENT, "only db_obj can accept GRN_INFO_SOURCE");
+ goto exit;
+ }
+ grn_bulk_write(ctx, valuebuf, DB_OBJ(obj)->source, DB_OBJ(obj)->source_size);
+ break;
+ case GRN_INFO_DEFAULT_TOKENIZER :
+ switch (DB_OBJ(obj)->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ valuebuf = ((grn_hash *)obj)->tokenizer;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ valuebuf = ((grn_pat *)obj)->tokenizer;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ valuebuf = ((grn_dat *)obj)->tokenizer;
+ break;
+ }
+ break;
+ case GRN_INFO_NORMALIZER :
+ switch (DB_OBJ(obj)->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ valuebuf = ((grn_hash *)obj)->normalizer;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ valuebuf = ((grn_pat *)obj)->normalizer;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ valuebuf = ((grn_dat *)obj)->normalizer;
+ break;
+ }
+ break;
+ case GRN_INFO_TOKEN_FILTERS :
+ if (!valuebuf) {
+ if (!(valuebuf = grn_obj_open(ctx, GRN_PVECTOR, 0, 0))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "grn_obj_get_info: failed to allocate value buffer");
+ goto exit;
+ }
+ }
+ {
+ grn_obj *token_filters = NULL;
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ token_filters = &(((grn_hash *)obj)->token_filters);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ token_filters = &(((grn_pat *)obj)->token_filters);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ token_filters = &(((grn_dat *)obj)->token_filters);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT,
+ /* TODO: Show type name instead of type ID */
+ "[info][get][token-filters] target object must be one of "
+ "GRN_TABLE_HASH_KEY, GRN_TABLE_PAT_KEY and GRN_TABLE_DAT_KEY: %d",
+ obj->header.type);
+ break;
+ }
+ if (token_filters) {
+ grn_bulk_write(ctx,
+ valuebuf,
+ GRN_BULK_HEAD(token_filters),
+ GRN_BULK_VSIZE(token_filters));
+ }
+ }
+ break;
+ default :
+ /* todo */
+ break;
+ }
+ }
+exit :
+ GRN_API_RETURN(valuebuf);
+}
+
+static void
+build_index(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_obj *src, **cp, **col, *target;
+ grn_id *s = DB_OBJ(obj)->source;
+ if (!(DB_OBJ(obj)->source_size) || !s) { return; }
+ if ((src = grn_ctx_at(ctx, *s))) {
+ target = GRN_OBJ_TABLEP(src) ? src : grn_ctx_at(ctx, src->header.domain);
+ if (target) {
+ int i, ncol = DB_OBJ(obj)->source_size / sizeof(grn_id);
+ grn_obj_flags flags;
+ grn_ii *ii = (grn_ii *)obj;
+ grn_bool use_grn_ii_build;
+ grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL, NULL);
+ switch (flags & GRN_OBJ_TABLE_TYPE_MASK) {
+ case GRN_OBJ_TABLE_PAT_KEY :
+ case GRN_OBJ_TABLE_DAT_KEY :
+ use_grn_ii_build = GRN_TRUE;
+ break;
+ default :
+ use_grn_ii_build = GRN_FALSE;
+ }
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ use_grn_ii_build = GRN_FALSE;
+ }
+ if ((col = GRN_MALLOC(ncol * sizeof(grn_obj *)))) {
+ for (cp = col, i = ncol; i; s++, cp++, i--) {
+ if (!(*cp = grn_ctx_at(ctx, *s))) {
+ ERR(GRN_INVALID_ARGUMENT, "source invalid, n=%d",i);
+ GRN_FREE(col);
+ return;
+ }
+ if (GRN_OBJ_TABLEP(grn_ctx_at(ctx, DB_OBJ(*cp)->range))) {
+ use_grn_ii_build = GRN_FALSE;
+ }
+ }
+ if (use_grn_ii_build) {
+ uint64_t sparsity = 10;
+ if (getenv("GRN_INDEX_SPARSITY")) {
+ uint64_t v;
+ errno = 0;
+ v = strtoull(getenv("GRN_INDEX_SPARSITY"), NULL, 0);
+ if (!errno) { sparsity = v; }
+ }
+ grn_ii_build(ctx, ii, sparsity);
+ } else {
+ grn_table_cursor *tc;
+ if ((tc = grn_table_cursor_open(ctx, target, NULL, 0, NULL, 0,
+ 0, -1, GRN_CURSOR_BY_ID))) {
+ grn_id id;
+ grn_obj rv;
+ GRN_TEXT_INIT(&rv, 0);
+ while ((id = grn_table_cursor_next_inline(ctx, tc)) != GRN_ID_NIL) {
+ for (cp = col, i = ncol; i; i--, cp++) {
+ GRN_BULK_REWIND(&rv);
+ if (GRN_OBJ_TABLEP(*cp)) {
+ grn_table_get_key2(ctx, *cp, id, &rv);
+ } else {
+ grn_obj_get_value(ctx, *cp, id, &rv);
+ }
+ call_hook_for_build(ctx, *cp, id, &rv, 0);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &rv);
+ grn_table_cursor_close(ctx, tc);
+ }
+ }
+ GRN_FREE(col);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid target");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid source");
+ }
+}
+
+static void
+update_source_hook(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id *s = DB_OBJ(obj)->source;
+ int i, n = DB_OBJ(obj)->source_size / sizeof(grn_id);
+ default_set_value_hook_data hook_data = { DB_OBJ(obj)->id, 0 };
+ grn_obj *source, data;
+ GRN_TEXT_INIT(&data, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&data, &hook_data, sizeof(hook_data));
+ for (i = 1; i <= n; i++, s++) {
+ hook_data.section = i;
+ if ((source = grn_ctx_at(ctx, *s))) {
+ switch (source->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ grn_obj_add_hook(ctx, source, GRN_HOOK_INSERT, 0, NULL, &data);
+ grn_obj_add_hook(ctx, source, GRN_HOOK_DELETE, 0, NULL, &data);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ case GRN_COLUMN_INDEX :
+ grn_obj_add_hook(ctx, source, GRN_HOOK_SET, 0, NULL, &data);
+ break;
+ default :
+ /* invalid target */
+ break;
+ }
+ }
+ }
+ grn_obj_close(ctx, &data);
+}
+
+static void
+del_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry, grn_obj *hld)
+{
+ int i;
+ void *hld_value = NULL;
+ uint32_t hld_size = 0;
+ grn_hook **last;
+ hld_value = GRN_BULK_HEAD(hld);
+ hld_size = GRN_BULK_VSIZE(hld);
+ if (!hld_size) { return; }
+ for (i = 0, last = &DB_OBJ(obj)->hooks[entry]; *last; i++, last = &(*last)->next) {
+ if (!memcmp(NEXT_ADDR(*last), hld_value, hld_size)) {
+ grn_obj_delete_hook(ctx, obj, entry, i);
+ return;
+ }
+ }
+}
+
+static void
+delete_source_hook(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id *s = DB_OBJ(obj)->source;
+ int i, n = DB_OBJ(obj)->source_size / sizeof(grn_id);
+ default_set_value_hook_data hook_data = { DB_OBJ(obj)->id, 0 };
+ grn_obj *source, data;
+ GRN_TEXT_INIT(&data, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&data, &hook_data, sizeof(hook_data));
+ for (i = 1; i <= n; i++, s++) {
+ hook_data.section = i;
+ if ((source = grn_ctx_at(ctx, *s))) {
+ switch (source->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ del_hook(ctx, source, GRN_HOOK_INSERT, &data);
+ del_hook(ctx, source, GRN_HOOK_DELETE, &data);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ del_hook(ctx, source, GRN_HOOK_SET, &data);
+ break;
+ default :
+ /* invalid target */
+ break;
+ }
+ }
+ }
+ grn_obj_close(ctx, &data);
+}
+
+#define N_HOOK_ENTRIES 5
+
+grn_rc
+grn_hook_pack(grn_ctx *ctx, grn_db_obj *obj, grn_obj *buf)
+{
+ grn_rc rc;
+ grn_hook_entry e;
+ for (e = 0; e < N_HOOK_ENTRIES; e++) {
+ grn_hook *hooks;
+ for (hooks = obj->hooks[e]; hooks; hooks = hooks->next) {
+ grn_id id = hooks->proc ? hooks->proc->obj.id : 0;
+ if ((rc = grn_text_benc(ctx, buf, id + 1))) { goto exit; }
+ if ((rc = grn_text_benc(ctx, buf, hooks->hld_size))) { goto exit; }
+ if ((rc = grn_bulk_write(ctx, buf, (char *)NEXT_ADDR(hooks), hooks->hld_size))) { goto exit; }
+ }
+ if ((rc = grn_text_benc(ctx, buf, 0))) { goto exit; }
+ }
+exit :
+ return rc;
+}
+
+static grn_rc
+grn_hook_unpack(grn_ctx *ctx, grn_db_obj *obj, const char *buf, uint32_t buf_size)
+{
+ grn_hook_entry e;
+ const uint8_t *p = (uint8_t *)buf, *pe = p + buf_size;
+ for (e = 0; e < N_HOOK_ENTRIES; e++) {
+ grn_hook *new, **last = &obj->hooks[e];
+ for (;;) {
+ grn_id id;
+ uint32_t hld_size;
+ GRN_B_DEC(id, p);
+ if (!id--) { break; }
+ if (p >= pe) { return GRN_FILE_CORRUPT; }
+ GRN_B_DEC(hld_size, p);
+ if (p >= pe) { return GRN_FILE_CORRUPT; }
+ if (!(new = GRN_MALLOC(sizeof(grn_hook) + hld_size))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (id) {
+ new->proc = (grn_proc *)grn_ctx_at(ctx, id);
+ if (!new->proc) {
+ GRN_FREE(new);
+ return ctx->rc;
+ }
+ } else {
+ new->proc = NULL;
+ }
+ if ((new->hld_size = hld_size)) {
+ memcpy(NEXT_ADDR(new), p, hld_size);
+ p += hld_size;
+ }
+ *last = new;
+ last = &new->next;
+ if (p >= pe) { return GRN_FILE_CORRUPT; }
+ }
+ *last = NULL;
+ }
+ return GRN_SUCCESS;
+}
+
+static void
+grn_token_filters_pack(grn_ctx *ctx,
+ grn_obj *token_filters,
+ grn_obj *buffer)
+{
+ unsigned int i, n_token_filters;
+
+ n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter = GRN_PTR_VALUE_AT(token_filters, i);
+ grn_id token_filter_id;
+
+ token_filter_id = grn_obj_id(ctx, token_filter);
+ GRN_RECORD_PUT(ctx, buffer, token_filter_id);
+ }
+}
+
+void
+grn_obj_spec_save(grn_ctx *ctx, grn_db_obj *obj)
+{
+ grn_db *s;
+ grn_obj v, *b;
+ grn_obj_spec spec;
+ if (obj->id & GRN_OBJ_TMP_OBJECT) { return; }
+ if (!ctx->impl || !GRN_DB_OBJP(obj)) { return; }
+ if (!(s = (grn_db *)ctx->impl->db) || !s->specs) { return; }
+ GRN_OBJ_INIT(&v, GRN_VECTOR, 0, GRN_DB_TEXT);
+ if (!(b = grn_vector_body(ctx, &v))) { return; }
+ spec.header = obj->header;
+ spec.range = obj->range;
+ grn_bulk_write(ctx, b, (void *)&spec, sizeof(grn_obj_spec));
+ grn_vector_delimit(ctx, &v, 0, 0);
+ if (obj->header.flags & GRN_OBJ_CUSTOM_NAME) {
+ GRN_TEXT_PUTS(ctx, b, grn_obj_path(ctx, (grn_obj *)obj));
+ }
+ grn_vector_delimit(ctx, &v, 0, 0);
+ grn_bulk_write(ctx, b, obj->source, obj->source_size);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ grn_hook_pack(ctx, obj, b);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ grn_token_filters_pack(ctx, &(((grn_hash *)obj)->token_filters), b);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ grn_token_filters_pack(ctx, &(((grn_pat *)obj)->token_filters), b);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ grn_token_filters_pack(ctx, &(((grn_dat *)obj)->token_filters), b);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ break;
+ case GRN_EXPR :
+ grn_expr_pack(ctx, b, (grn_obj *)obj);
+ grn_vector_delimit(ctx, &v, 0, 0);
+ break;
+ }
+ grn_ja_putv(ctx, s->specs, obj->id, &v, 0);
+ grn_obj_close(ctx, &v);
+}
+
+inline static grn_rc
+grn_obj_set_info_source_validate_report_error(grn_ctx *ctx,
+ grn_obj *column,
+ grn_obj *table_domain,
+ grn_obj *source,
+ grn_id source_type_id)
+{
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ char table_domain_name[GRN_TABLE_MAX_KEY_SIZE];
+ char source_name[GRN_TABLE_MAX_KEY_SIZE];
+ char source_type_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ int table_domain_name_size;
+ int source_name_size;
+ int source_type_name_size;
+ grn_obj *source_type;
+
+ column_name_size = grn_obj_name(ctx, column,
+ column_name, GRN_TABLE_MAX_KEY_SIZE);
+ source_name_size = grn_obj_name(ctx, source,
+ source_name, GRN_TABLE_MAX_KEY_SIZE);
+ if (GRN_OBJ_TABLEP(source)) {
+ source_name[source_name_size] = '\0';
+ strncat(source_name, "._key",
+ GRN_TABLE_MAX_KEY_SIZE - source_name_size - 1);
+ source_name_size = strlen(source_name);
+ }
+ table_domain_name_size = grn_obj_name(ctx, table_domain,
+ table_domain_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ source_type = grn_ctx_at(ctx, source_type_id);
+ if (source_type) {
+ source_type_name_size = grn_obj_name(ctx, source_type,
+ source_type_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ grn_obj_unlink(ctx, source_type);
+ } else {
+ strncpy(source_type_name, "(nil)", GRN_TABLE_MAX_KEY_SIZE);
+ source_type_name_size = strlen(source_type_name);
+ }
+ ERR(GRN_INVALID_ARGUMENT,
+ "grn_obj_set_info(): GRN_INFO_SOURCE: "
+ "source type must equal to index table's key type: "
+ "source:<%.*s(%.*s)> index:<%.*s(%.*s)>",
+ source_name_size, source_name,
+ source_type_name_size, source_type_name,
+ column_name_size, column_name,
+ table_domain_name_size, table_domain_name);
+ return ctx->rc;
+}
+
+inline static grn_rc
+grn_obj_set_info_source_validate(grn_ctx *ctx, grn_obj *obj, grn_obj *value)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_id table_id;
+ grn_obj *table = NULL;
+ grn_id table_domain_id;
+ grn_obj *table_domain = NULL;
+ grn_id *source_ids;
+ int i, n_source_ids;
+
+ table_id = obj->header.domain;
+ table = grn_ctx_at(ctx, table_id);
+ if (!table) {
+ goto exit;
+ }
+
+ table_domain_id = table->header.domain;
+ table_domain = grn_ctx_at(ctx, table_domain_id);
+ if (!table_domain) {
+ goto exit;
+ }
+
+ source_ids = (grn_id *)GRN_BULK_HEAD(value);
+ n_source_ids = GRN_BULK_VSIZE(value) / sizeof(grn_id);
+ if (n_source_ids > 1 && !(obj->header.flags & GRN_OBJ_WITH_SECTION)) {
+ char index_name[GRN_TABLE_MAX_KEY_SIZE];
+ int index_name_size;
+ index_name_size = grn_obj_name(ctx, obj,
+ index_name, GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "grn_obj_set_info(): GRN_INFO_SOURCE: "
+ "multi column index must be created with WITH_SECTION flag: <%.*s>",
+ index_name_size, index_name);
+ goto exit;
+ }
+
+ if (!GRN_OBJ_TABLEP(table_domain)) {
+ goto exit;
+ }
+
+ for (i = 0; i < n_source_ids; i++) {
+ grn_id source_id = source_ids[i];
+ grn_obj *source;
+ grn_id source_type_id;
+
+ source = grn_ctx_at(ctx, source_id);
+ if (!source) {
+ continue;
+ }
+ if (GRN_OBJ_TABLEP(source)) {
+ source_type_id = source->header.domain;
+ } else {
+ source_type_id = DB_OBJ(source)->range;
+ }
+ if (table_domain_id != source_type_id) {
+ rc = grn_obj_set_info_source_validate_report_error(ctx,
+ obj,
+ table_domain,
+ source,
+ source_type_id);
+ }
+ grn_obj_unlink(ctx, source);
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ }
+
+exit:
+ if (table) {
+ grn_obj_unlink(ctx, table);
+ }
+ if (table_domain) {
+ grn_obj_unlink(ctx, table_domain);
+ }
+ return ctx->rc;
+}
+
+inline static void
+grn_obj_set_info_source_log(grn_ctx *ctx, grn_obj *obj, grn_obj *value)
+{
+ grn_obj buf;
+ grn_id *vp = (grn_id *)GRN_BULK_HEAD(value);
+ uint32_t vs = GRN_BULK_VSIZE(value), s = 0;
+ const char *n = _grn_table_key(ctx, ctx->impl->db, DB_OBJ(obj)->id, &s);
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, n, s);
+ GRN_TEXT_PUTC(ctx, &buf, ' ');
+ while (vs) {
+ n = _grn_table_key(ctx, ctx->impl->db, *vp++, &s);
+ GRN_TEXT_PUT(ctx, &buf, n, s);
+ vs -= sizeof(grn_id);
+ if (vs) { GRN_TEXT_PUTC(ctx, &buf, ','); }
+ }
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "DDL:set_source %.*s",
+ (int)GRN_BULK_VSIZE(&buf), GRN_BULK_HEAD(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+inline static grn_rc
+grn_obj_set_info_source_update(grn_ctx *ctx, grn_obj *obj, grn_obj *value)
+{
+ void *v = GRN_BULK_HEAD(value);
+ uint32_t s = GRN_BULK_VSIZE(value);
+ if (s) {
+ void *v2 = GRN_MALLOC(s);
+ if (!v2) {
+ return ctx->rc;
+ }
+ memcpy(v2, v, s);
+ if (DB_OBJ(obj)->source) { GRN_FREE(DB_OBJ(obj)->source); }
+ DB_OBJ(obj)->source = v2;
+ DB_OBJ(obj)->source_size = s;
+
+ if (obj->header.type == GRN_COLUMN_INDEX) {
+ update_source_hook(ctx, obj);
+ build_index(ctx, obj);
+ }
+ } else {
+ DB_OBJ(obj)->source = NULL;
+ DB_OBJ(obj)->source_size = 0;
+ }
+
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+grn_obj_set_info_source(grn_ctx *ctx, grn_obj *obj, grn_obj *value)
+{
+ grn_rc rc;
+
+ rc = grn_obj_set_info_source_validate(ctx, obj, value);
+ if (rc != GRN_SUCCESS) {
+ return rc;
+ }
+ grn_obj_set_info_source_log(ctx, obj, value);
+ rc = grn_obj_set_info_source_update(ctx, obj, value);
+ if (rc != GRN_SUCCESS) {
+ return rc;
+ }
+ grn_obj_spec_save(ctx, DB_OBJ(obj));
+
+ return rc;
+}
+
+static grn_rc
+grn_obj_set_info_token_filters(grn_ctx *ctx,
+ grn_obj *table,
+ grn_obj *token_filters)
+{
+ grn_obj *current_token_filters;
+ unsigned int i, n_token_filters;
+ grn_obj token_filter_names;
+
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ current_token_filters = &(((grn_hash *)table)->token_filters);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ current_token_filters = &(((grn_pat *)table)->token_filters);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ current_token_filters = &(((grn_dat *)table)->token_filters);
+ break;
+ default :
+ /* TODO: Show type name instead of type ID */
+ ERR(GRN_INVALID_ARGUMENT,
+ "[info][set][token-filters] target object must be one of "
+ "GRN_TABLE_HASH_KEY, GRN_TABLE_PAT_KEY and GRN_TABLE_DAT_KEY: %d",
+ table->header.type);
+ return ctx->rc;
+ }
+
+ GRN_TEXT_INIT(&token_filter_names, 0);
+ GRN_BULK_REWIND(current_token_filters);
+ n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter = GRN_PTR_VALUE_AT(token_filters, i);
+ char token_filter_name[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int token_filter_name_size;
+
+ GRN_PTR_PUT(ctx, current_token_filters, token_filter);
+
+ token_filter_name_size = grn_obj_name(ctx,
+ token_filter,
+ token_filter_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_TEXT_PUT(ctx,
+ &token_filter_names,
+ token_filter_name,
+ token_filter_name_size);
+ }
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "DDL:set_token_filters %.*s",
+ (int)GRN_BULK_VSIZE(&token_filter_names),
+ GRN_BULK_HEAD(&token_filter_names));
+ GRN_OBJ_FIN(ctx, &token_filter_names);
+ grn_obj_spec_save(ctx, DB_OBJ(table));
+
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_obj_set_info(grn_ctx *ctx, grn_obj *obj, grn_info_type type, grn_obj *value)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (!obj) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_set_info failed");
+ goto exit;
+ }
+ switch (type) {
+ case GRN_INFO_SOURCE :
+ if (!GRN_DB_OBJP(obj)) {
+ ERR(GRN_INVALID_ARGUMENT, "only db_obj can accept GRN_INFO_SOURCE");
+ goto exit;
+ }
+ rc = grn_obj_set_info_source(ctx, obj, value);
+ break;
+ case GRN_INFO_DEFAULT_TOKENIZER :
+ if (!value || DB_OBJ(value)->header.type == GRN_PROC) {
+ switch (DB_OBJ(obj)->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ ((grn_hash *)obj)->tokenizer = value;
+ ((grn_hash *)obj)->header->tokenizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ ((grn_pat *)obj)->tokenizer = value;
+ ((grn_pat *)obj)->header->tokenizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ ((grn_dat *)obj)->tokenizer = value;
+ ((grn_dat *)obj)->header->tokenizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ }
+ }
+ break;
+ case GRN_INFO_NORMALIZER :
+ if (!value || DB_OBJ(value)->header.type == GRN_PROC) {
+ switch (DB_OBJ(obj)->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ ((grn_hash *)obj)->normalizer = value;
+ ((grn_hash *)obj)->header->normalizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_PAT_KEY :
+ ((grn_pat *)obj)->normalizer = value;
+ ((grn_pat *)obj)->header->normalizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_TABLE_DAT_KEY :
+ ((grn_dat *)obj)->normalizer = value;
+ ((grn_dat *)obj)->header->normalizer = grn_obj_id(ctx, value);
+ rc = GRN_SUCCESS;
+ break;
+ }
+ }
+ break;
+ case GRN_INFO_TOKEN_FILTERS :
+ rc = grn_obj_set_info_token_filters(ctx, obj, value);
+ break;
+ default :
+ /* todo */
+ break;
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+grn_obj *
+grn_obj_get_element_info(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_info_type type, grn_obj *valuebuf)
+{
+ GRN_API_ENTER;
+ GRN_API_RETURN(valuebuf);
+}
+
+grn_rc
+grn_obj_set_element_info(grn_ctx *ctx, grn_obj *obj, grn_id id,
+ grn_info_type type, grn_obj *value)
+{
+ GRN_API_ENTER;
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_bool
+grn_obj_is_builtin(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id id;
+
+ if (!obj) { return GRN_FALSE; }
+
+ id = grn_obj_id(ctx, obj);
+ if (id == GRN_ID_NIL) {
+ return GRN_FALSE;
+ } else {
+ return id < GRN_N_RESERVED_TYPES;
+ }
+}
+
+static void
+grn_hook_free(grn_ctx *ctx, grn_hook *h)
+{
+ grn_hook *curr, *next;
+ for (curr = h; curr; curr = next) {
+ next = curr->next;
+ GRN_FREE(curr);
+ }
+}
+
+grn_rc
+grn_obj_add_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry,
+ int offset, grn_obj *proc, grn_obj *hld)
+{
+ grn_rc rc = GRN_SUCCESS;
+ GRN_API_ENTER;
+ if (!GRN_DB_OBJP(obj)) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ int i;
+ void *hld_value = NULL;
+ uint32_t hld_size = 0;
+ grn_hook *new, **last = &DB_OBJ(obj)->hooks[entry];
+ if (hld) {
+ hld_value = GRN_BULK_HEAD(hld);
+ hld_size = GRN_BULK_VSIZE(hld);
+ }
+ if (!(new = GRN_MALLOC(sizeof(grn_hook) + hld_size))) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ new->proc = (grn_proc *)proc;
+ new->hld_size = hld_size;
+ if (hld_size) {
+ memcpy(NEXT_ADDR(new), hld_value, hld_size);
+ }
+ for (i = 0; i != offset && *last; i++) { last = &(*last)->next; }
+ new->next = *last;
+ *last = new;
+ grn_obj_spec_save(ctx, DB_OBJ(obj));
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+int
+grn_obj_get_nhooks(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry)
+{
+ int res = 0;
+ GRN_API_ENTER;
+ {
+ grn_hook *hook = DB_OBJ(obj)->hooks[entry];
+ while (hook) {
+ res++;
+ hook = hook->next;
+ }
+ }
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_obj_get_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry,
+ int offset, grn_obj *hldbuf)
+{
+ grn_obj *res = NULL;
+ GRN_API_ENTER;
+ {
+ int i;
+ grn_hook *hook = DB_OBJ(obj)->hooks[entry];
+ for (i = 0; i < offset; i++) {
+ hook = hook->next;
+ if (!hook) { return NULL; }
+ }
+ res = (grn_obj *)hook->proc;
+ grn_bulk_write(ctx, hldbuf, (char *)NEXT_ADDR(hook), hook->hld_size);
+ }
+ GRN_API_RETURN(res);
+}
+
+grn_rc
+grn_obj_delete_hook(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry, int offset)
+{
+ GRN_API_ENTER;
+ {
+ int i = 0;
+ grn_hook *h, **last = &DB_OBJ(obj)->hooks[entry];
+ for (;;) {
+ if (!(h = *last)) { return GRN_INVALID_ARGUMENT; }
+ if (++i > offset) { break; }
+ last = &h->next;
+ }
+ *last = h->next;
+ GRN_FREE(h);
+ }
+ grn_obj_spec_save(ctx, DB_OBJ(obj));
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+static void
+remove_index(grn_ctx *ctx, grn_obj *obj, grn_hook_entry entry)
+{
+ grn_hook *h0, *hooks = DB_OBJ(obj)->hooks[entry];
+ DB_OBJ(obj)->hooks[entry] = NULL; /* avoid mutual recursive call */
+ while (hooks) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (!target) {
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int length;
+ length = grn_obj_name(ctx, obj, name, GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_UNKNOWN_ERROR,
+ "[column][remove][index] "
+ "hook has a dangling reference: %.*s", length, name);
+ } else if (target->header.type == GRN_COLUMN_INDEX) {
+ //TODO: multicolumn MULTI_COLUMN_INDEXP
+ _grn_obj_remove(ctx, target);
+ } else {
+ //TODO: err
+ char fn[GRN_TABLE_MAX_KEY_SIZE];
+ int flen;
+ flen = grn_obj_name(ctx, target, fn, GRN_TABLE_MAX_KEY_SIZE);
+ fn[flen] = '\0';
+ ERR(GRN_UNKNOWN_ERROR, "column has unsupported hooks, col=%s",fn);
+ }
+ h0 = hooks;
+ hooks = hooks->next;
+ GRN_FREE(h0);
+ }
+}
+
+static void
+remove_columns(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_hash *cols;
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, obj, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) { _grn_obj_remove(ctx, col); }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+}
+
+static void
+_grn_obj_remove_db_index_columns(grn_ctx *ctx, grn_obj *db)
+{
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *obj = grn_ctx_at(ctx, id);
+ if (obj && obj->header.type == GRN_COLUMN_INDEX) {
+ _grn_obj_remove(ctx, obj);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static void
+_grn_obj_remove_db_reference_columns(grn_ctx *ctx, grn_obj *db)
+{
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *obj = grn_ctx_at(ctx, id);
+ grn_obj *range = NULL;
+
+ if (!obj) {
+ continue;
+ }
+
+ switch (obj->header.type) {
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ if (!DB_OBJ(obj)->range) {
+ break;
+ }
+
+ range = grn_ctx_at(ctx, DB_OBJ(obj)->range);
+ if (!range) {
+ break;
+ }
+
+ switch (range->header.type) {
+ case GRN_TABLE_NO_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ _grn_obj_remove(ctx, obj);
+ break;
+ }
+ break;
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static void
+_grn_obj_remove_db_reference_tables(grn_ctx *ctx, grn_obj *db)
+{
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *obj = grn_ctx_at(ctx, id);
+ grn_obj *domain = NULL;
+
+ if (!obj) {
+ continue;
+ }
+
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ if (!obj->header.domain) {
+ break;
+ }
+
+ domain = grn_ctx_at(ctx, obj->header.domain);
+ if (!domain) {
+ break;
+ }
+
+ switch (domain->header.type) {
+ case GRN_TABLE_NO_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ _grn_obj_remove(ctx, obj);
+ break;
+ }
+ break;
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static void
+_grn_obj_remove_db_all_tables(grn_ctx *ctx, grn_obj *db)
+{
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *obj = grn_ctx_at(ctx, id);
+
+ if (!obj) {
+ continue;
+ }
+
+ switch (obj->header.type) {
+ case GRN_TABLE_NO_KEY :
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ _grn_obj_remove(ctx, obj);
+ break;
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static void
+_grn_obj_remove_db(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ const char *io_spath;
+ char *spath;
+ grn_db *s = (grn_db *)db;
+ unsigned char key_type;
+
+ if (s->specs &&
+ (io_spath = grn_obj_path(ctx, (grn_obj *)s->specs)) && *io_spath != '\0') {
+ if (!(spath = GRN_STRDUP(io_spath))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_spath);
+ return;
+ }
+ } else {
+ spath = NULL;
+ }
+
+ key_type = s->keys->header.type;
+
+ _grn_obj_remove_db_index_columns(ctx, db);
+ _grn_obj_remove_db_reference_columns(ctx, db);
+ _grn_obj_remove_db_reference_tables(ctx, db);
+ _grn_obj_remove_db_all_tables(ctx, db);
+
+ grn_obj_close(ctx, obj);
+
+ if (spath) {
+ grn_ja_remove(ctx, spath);
+ GRN_FREE(spath);
+ }
+
+ if (path) {
+ switch (key_type) {
+ case GRN_TABLE_PAT_KEY :
+ grn_pat_remove(ctx, path);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ grn_dat_remove(ctx, path);
+ break;
+ }
+ }
+}
+
+static grn_bool
+is_removable_table(grn_ctx *ctx, grn_obj *table, grn_obj *db)
+{
+ grn_bool removable = GRN_TRUE;
+ grn_id table_id;
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ int table_name_size;
+ grn_table_cursor *cursor;
+
+ table_id = DB_OBJ(table)->id;
+ table_name_size = grn_obj_name(ctx, table, table_name, GRN_TABLE_MAX_KEY_SIZE);
+ if ((cursor = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_ID))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL) {
+ grn_obj *object;
+
+ object = grn_ctx_at(ctx, id);
+ if (!object) {
+ ERRCLR(ctx);
+ continue;
+ }
+
+ switch (object->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ if (DB_OBJ(object)->id == table_id) {
+ break;
+ }
+
+ if (object->header.domain == table_id) {
+ char reference_table_name[GRN_TABLE_MAX_KEY_SIZE];
+ int reference_table_name_size;
+ reference_table_name_size =
+ grn_obj_name(ctx, object, reference_table_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_OPERATION_NOT_PERMITTED,
+ "[table][remove] a table that references the table exists: "
+ "<%.*s._key> -> <%.*s>",
+ reference_table_name_size, reference_table_name,
+ table_name_size, table_name);
+ removable = GRN_FALSE;
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ case GRN_COLUMN_FIX_SIZE :
+ if (object->header.domain == table_id) {
+ break;
+ }
+ if (DB_OBJ(object)->range == table_id) {
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ column_name_size = grn_obj_name(ctx, object, column_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_OPERATION_NOT_PERMITTED,
+ "[table][remove] a column that references the table exists: "
+ "<%.*s> -> <%.*s>",
+ column_name_size, column_name,
+ table_name_size, table_name);
+ removable = GRN_FALSE;
+ }
+ break;
+ default:
+ break;
+ }
+ grn_obj_unlink(ctx, object);
+
+ if (!removable) {
+ break;
+ }
+ }
+ grn_table_cursor_close(ctx, cursor);
+ }
+
+ return removable;
+}
+
+static void
+_grn_obj_remove_pat(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ if (!is_removable_table(ctx, obj, db)) {
+ return;
+ }
+ remove_index(ctx, obj, GRN_HOOK_INSERT);
+ remove_columns(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_pat_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_dat(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ if (!is_removable_table(ctx, obj, db)) {
+ return;
+ }
+ remove_index(ctx, obj, GRN_HOOK_INSERT);
+ remove_columns(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_dat_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_hash(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ if (!is_removable_table(ctx, obj, db)) {
+ return;
+ }
+ remove_index(ctx, obj, GRN_HOOK_INSERT);
+ remove_columns(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_hash_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_array(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ if (!is_removable_table(ctx, obj, db)) {
+ return;
+ }
+ remove_columns(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_array_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_ja(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ remove_index(ctx, obj, GRN_HOOK_SET);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_ja_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_ra(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ remove_index(ctx, obj, GRN_HOOK_SET);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_ra_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_index(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ delete_source_hook(ctx, obj);
+ grn_obj_close(ctx, obj);
+ if (path) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ grn_ii_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_db_obj(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ grn_obj_close(ctx, obj);
+ if (!(id & GRN_OBJ_TMP_OBJECT)) {
+ grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
+ grn_obj_delete_by_id(ctx, db, id, GRN_TRUE);
+ }
+ if (path) {
+ grn_io_remove(ctx, path);
+ }
+ grn_obj_touch(ctx, db, NULL);
+}
+
+static void
+_grn_obj_remove_other(grn_ctx *ctx, grn_obj *obj, grn_obj *db, grn_id id,
+ const char *path)
+{
+ grn_obj_close(ctx, obj);
+}
+
+static void
+_grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id id = GRN_ID_NIL;
+ grn_obj *db = NULL;
+ const char *io_path;
+ char *path;
+ if (ctx->impl && ctx->impl->db) {
+ uint32_t s = 0;
+ const char *n = _grn_table_key(ctx, ctx->impl->db, DB_OBJ(obj)->id, &s);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "DDL:obj_remove %.*s", s, n);
+ }
+ if ((io_path = grn_obj_path(ctx, obj)) && *io_path != '\0') {
+ if (!(path = GRN_STRDUP(io_path))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return;
+ }
+ } else {
+ path = NULL;
+ }
+ if (GRN_DB_OBJP(obj)) {
+ id = DB_OBJ(obj)->id;
+ db = DB_OBJ(obj)->db;
+ }
+ switch (obj->header.type) {
+ case GRN_DB :
+ _grn_obj_remove_db(ctx, obj, db, id, path);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ _grn_obj_remove_pat(ctx, obj, db, id, path);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ _grn_obj_remove_dat(ctx, obj, db, id, path);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ _grn_obj_remove_hash(ctx, obj, db, id, path);
+ break;
+ case GRN_TABLE_NO_KEY :
+ _grn_obj_remove_array(ctx, obj, db, id, path);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ _grn_obj_remove_ja(ctx, obj, db, id, path);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ _grn_obj_remove_ra(ctx, obj, db, id, path);
+ break;
+ case GRN_COLUMN_INDEX :
+ _grn_obj_remove_index(ctx, obj, db, id, path);
+ break;
+ default :
+ if (GRN_DB_OBJP(obj)) {
+ _grn_obj_remove_db_obj(ctx, obj, db, id, path);
+ } else {
+ _grn_obj_remove_other(ctx, obj, db, id, path);
+ }
+ }
+ if (path) { GRN_FREE(path); }
+}
+
+grn_rc
+grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
+{
+ GRN_API_ENTER;
+ if (ctx->impl && ctx->impl->db && ctx->impl->db != obj) {
+ grn_io *io = grn_obj_io(ctx->impl->db);
+ if (!grn_io_lock(ctx, io, grn_lock_timeout)) {
+ _grn_obj_remove(ctx, obj);
+ grn_io_unlock(io);
+ }
+ } else {
+ _grn_obj_remove(ctx, obj);
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_table_update_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
+ const void *dest_key, unsigned int dest_key_size)
+{
+ grn_rc rc = GRN_OPERATION_NOT_SUPPORTED;
+ GRN_API_ENTER;
+ if (table->header.type == GRN_TABLE_DAT_KEY) {
+ grn_dat *dat = (grn_dat *)table;
+ if (dat->io && !(dat->io->flags & GRN_IO_TEMPORARY)) {
+ if (grn_io_lock(ctx, dat->io, grn_lock_timeout)) {
+ rc = ctx->rc;
+ } else {
+ rc = grn_dat_update_by_id(ctx, dat, id, dest_key, dest_key_size);
+ grn_io_unlock(dat->io);
+ }
+ } else {
+ rc = grn_dat_update_by_id(ctx, dat, id, dest_key, dest_key_size);
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_update(grn_ctx *ctx, grn_obj *table,
+ const void *src_key, unsigned int src_key_size,
+ const void *dest_key, unsigned int dest_key_size)
+{
+ grn_rc rc = GRN_OPERATION_NOT_SUPPORTED;
+ GRN_API_ENTER;
+ if (table->header.type == GRN_TABLE_DAT_KEY) {
+ rc = grn_dat_update(ctx, (grn_dat *)table,
+ src_key, src_key_size,
+ dest_key, dest_key_size);
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_obj_rename(grn_ctx *ctx, grn_obj *obj, const char *name, unsigned int name_size)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (ctx && ctx->impl && GRN_DB_P(ctx->impl->db) && GRN_DB_OBJP(obj) && !IS_TEMP(obj)) {
+ grn_db *s = (grn_db *)ctx->impl->db;
+ grn_obj *keys = (grn_obj *)s->keys;
+ rc = grn_table_update_by_id(ctx, keys, DB_OBJ(obj)->id, name, name_size);
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_table_rename(grn_ctx *ctx, grn_obj *table, const char *name, unsigned int name_size)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_hash *cols;
+
+ GRN_API_ENTER;
+
+ if (!GRN_OBJ_TABLEP(table)) {
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ int table_name_size;
+ table_name_size = grn_obj_name(ctx, table, table_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][rename] isn't table: <%.*s> -> <%.*s>",
+ table_name_size, table_name,
+ name_size, name);
+ goto exit;
+ }
+ if (IS_TEMP(table)) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][rename] temporary table doesn't have name: "
+ "(anonymous) -> <%.*s>",
+ name_size, name);
+ goto exit;
+ }
+
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ grn_table_columns(ctx, table, "", 0, (grn_obj *)cols);
+ if (!(rc = grn_obj_rename(ctx, table, name, name_size))) {
+ grn_id *key;
+ char fullname[GRN_TABLE_MAX_KEY_SIZE];
+ memcpy(fullname, name, name_size);
+ fullname[name_size] = GRN_DB_DELIMITER;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) {
+ int colname_len = grn_column_name(ctx, col, fullname + name_size + 1,
+ GRN_TABLE_MAX_KEY_SIZE - name_size - 1);
+ if (colname_len) {
+ if ((rc = grn_obj_rename(ctx, col, fullname,
+ name_size + 1 + colname_len))) {
+ break;
+ }
+ }
+ }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+exit:
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_column_rename(grn_ctx *ctx, grn_obj *column, const char *name, unsigned int name_size)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(column)) {
+ char fullname[GRN_TABLE_MAX_KEY_SIZE];
+ grn_db *s = (grn_db *)DB_OBJ(column)->db;
+ int len = grn_table_get_key(ctx, s->keys, DB_OBJ(column)->header.domain,
+ fullname, GRN_TABLE_MAX_KEY_SIZE);
+ if (name_size + 1 + len > GRN_TABLE_MAX_KEY_SIZE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][rename] too long column name: required name_size(%d) < %d"
+ ": <%.*s>.<%.*s>",
+ name_size, GRN_TABLE_MAX_KEY_SIZE - 1 - len,
+ len, fullname, name_size, name);
+ goto exit;
+ }
+ fullname[len] = GRN_DB_DELIMITER;
+ memcpy(fullname + len + 1, name, name_size);
+ name_size += len + 1;
+ rc = grn_obj_rename(ctx, column, fullname, name_size);
+ }
+exit :
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_obj_path_rename(grn_ctx *ctx, const char *old_path, const char *new_path)
+{
+ GRN_API_ENTER;
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+/* db must be validated by caller */
+grn_id
+grn_obj_register(grn_ctx *ctx, grn_obj *db, const char *name, unsigned int name_size)
+{
+ grn_id id = GRN_ID_NIL;
+ if (name && name_size) {
+ grn_db *s = (grn_db *)db;
+ int added;
+ if (!(id = grn_table_add(ctx, s->keys, name, name_size, &added))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "grn_table_add failed: <%.*s>", name_size, name);
+ } else if (!added) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "already used name was assigned: <%.*s>", name_size, name);
+ id = GRN_ID_NIL;
+ }
+ } else if (ctx->impl && ctx->impl->values) {
+ id = grn_array_add(ctx, ctx->impl->values, NULL) | GRN_OBJ_TMP_OBJECT;
+ }
+ return id;
+}
+
+grn_rc
+grn_obj_delete_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, grn_bool removep)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (id) {
+ if (id & GRN_OBJ_TMP_OBJECT) {
+ if (ctx->impl && ctx->impl->values) {
+ rc = grn_array_delete_by_id(ctx, ctx->impl->values,
+ id & ~GRN_OBJ_TMP_OBJECT, NULL);
+ }
+ } else {
+ db_value *vp;
+ grn_db *s = (grn_db *)db;
+ if ((vp = grn_tiny_array_at(&s->values, id))) {
+ GRN_ASSERT(!vp->lock);
+ vp->lock = 0;
+ vp->ptr = NULL;
+ vp->done = 0;
+ }
+ if (removep) {
+ switch (s->keys->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ rc = grn_pat_delete_by_id(ctx, (grn_pat *)s->keys, id, NULL);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ rc = grn_dat_delete_by_id(ctx, (grn_dat *)s->keys, id, NULL);
+ break;
+ }
+ } else {
+ rc = GRN_SUCCESS;
+ }
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+
+grn_rc
+grn_obj_path_by_id(grn_ctx *ctx, grn_obj *db, grn_id id, char *buffer)
+{
+ grn_rc rc = GRN_SUCCESS;
+ GRN_API_ENTER;
+ if (!GRN_DB_P(db) || !buffer) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ gen_pathname(grn_obj_io(db)->path, buffer, id);
+ }
+ GRN_API_RETURN(rc);
+}
+
+/* db must be validated by caller */
+grn_rc
+grn_db_obj_init(grn_ctx *ctx, grn_obj *db, grn_id id, grn_db_obj *obj)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (id) {
+ if (id & GRN_OBJ_TMP_OBJECT) {
+ if (ctx->impl && ctx->impl->values) {
+ rc = grn_array_set_value(ctx, ctx->impl->values,
+ id & ~GRN_OBJ_TMP_OBJECT, &obj, GRN_OBJ_SET);
+ }
+ } else {
+ db_value *vp;
+ vp = grn_tiny_array_at(&((grn_db *)db)->values, id);
+ if (!vp) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ ERR(rc, "grn_tiny_array_at failed (%d)", id);
+ return rc;
+ }
+ vp->lock = 1;
+ vp->ptr = (grn_obj *)obj;
+ }
+ }
+ obj->id = id;
+ obj->db = db;
+ obj->source = NULL;
+ obj->source_size = 0;
+ {
+ grn_hook_entry entry;
+ for (entry = 0; entry < N_HOOK_ENTRIES; entry++) {
+ obj->hooks[entry] = NULL;
+ }
+ }
+ grn_obj_spec_save(ctx, obj);
+ return rc;
+}
+
+#define SERIALIZED_SPEC_INDEX_SPEC 0
+#define SERIALIZED_SPEC_INDEX_PATH 1
+#define SERIALIZED_SPEC_INDEX_SOURCE 2
+#define SERIALIZED_SPEC_INDEX_HOOK 3
+#define SERIALIZED_SPEC_INDEX_TOKEN_FILTERS 4
+#define SERIALIZED_SPEC_INDEX_EXPR 4
+
+#define GET_PATH(spec,buffer,s,id) do {\
+ if (spec->header.flags & GRN_OBJ_CUSTOM_NAME) {\
+ const char *path;\
+ unsigned int size = grn_vector_get_element(ctx,\
+ &v,\
+ SERIALIZED_SPEC_INDEX_PATH,\
+ &path,\
+ NULL,\
+ NULL);\
+ if (size > PATH_MAX) { ERR(GRN_FILENAME_TOO_LONG, "too long path"); }\
+ memcpy(buffer, path, size);\
+ buffer[size] = '\0';\
+ } else {\
+ gen_pathname(grn_obj_io(s->keys)->path, buffer, id); \
+ }\
+} while (0)
+
+#define UNPACK_INFO() do {\
+ if (vp->ptr) {\
+ grn_db_obj *r = DB_OBJ(vp->ptr);\
+ r->header = spec->header;\
+ r->id = id;\
+ r->range = spec->range;\
+ r->db = (grn_obj *)s;\
+ size = grn_vector_get_element(ctx,\
+ &v,\
+ SERIALIZED_SPEC_INDEX_SOURCE,\
+ &p,\
+ NULL,\
+ NULL);\
+ if (size) {\
+ if ((r->source = GRN_MALLOC(size))) {\
+ memcpy(r->source, p, size);\
+ r->source_size = size;\
+ }\
+ }\
+ size = grn_vector_get_element(ctx,\
+ &v,\
+ SERIALIZED_SPEC_INDEX_HOOK,\
+ &p,\
+ NULL,\
+ NULL);\
+ grn_hook_unpack(ctx, r, p, size);\
+ }\
+} while (0)
+
+static void
+grn_token_filters_unpack(grn_ctx *ctx,
+ grn_obj *token_filters,
+ grn_obj *spec_vector)
+{
+ grn_id *token_filter_ids;
+ unsigned int element_size;
+ unsigned int i, n_token_filter_ids;
+
+ if (grn_vector_size(ctx, spec_vector) < SERIALIZED_SPEC_INDEX_TOKEN_FILTERS) {
+ return;
+ }
+
+ element_size = grn_vector_get_element(ctx,
+ spec_vector,
+ SERIALIZED_SPEC_INDEX_TOKEN_FILTERS,
+ (const char **)(&token_filter_ids),
+ NULL,
+ NULL);
+ n_token_filter_ids = element_size / sizeof(grn_id);
+ for (i = 0; i < n_token_filter_ids; i++) {
+ grn_id token_filter_id = token_filter_ids[i];
+ grn_obj *token_filter;
+
+ token_filter = grn_ctx_at(ctx, token_filter_id);
+ if (!token_filter) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "nonexistent token filter ID: %d", token_filter_id);
+ return;
+ }
+ GRN_PTR_PUT(ctx, token_filters, token_filter);
+ }
+}
+
+grn_obj *
+grn_ctx_at(grn_ctx *ctx, grn_id id)
+{
+ grn_obj *res = NULL;
+ if (!ctx || !ctx->impl || !id) { return res; }
+ GRN_API_ENTER;
+ if (id & GRN_OBJ_TMP_OBJECT) {
+ if (ctx->impl->values) {
+ grn_obj **tmp_obj;
+ tmp_obj = _grn_array_get_value(ctx, ctx->impl->values, id & ~GRN_OBJ_TMP_OBJECT);
+ if (tmp_obj) {
+ res = *tmp_obj;
+ }
+ }
+ } else {
+ grn_db *s = (grn_db *)ctx->impl->db;
+ if (s) {
+ db_value *vp;
+ uint32_t l, *pl, ntrial;
+ if (!(vp = grn_tiny_array_at(&s->values, id))) { goto exit; }
+#ifdef USE_NREF
+ pl = &vp->lock;
+ for (ntrial = 0;; ntrial++) {
+ GRN_ATOMIC_ADD_EX(pl, 1, l);
+ if (l < GRN_IO_MAX_REF) { break; }
+ if (ntrial >= 10) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "max trial in ctx_at(%p,%d)", vp->ptr, vp->lock);
+ break;
+ }
+ GRN_ATOMIC_ADD_EX(pl, -1, l);
+ GRN_FUTEX_WAIT(pl);
+ }
+#endif /* USE_NREF */
+ if (s->specs && !vp->ptr /* && !vp->done */) {
+#ifndef USE_NREF
+ pl = &vp->lock;
+ for (ntrial = 0;; ntrial++) {
+ GRN_ATOMIC_ADD_EX(pl, 1, l);
+ if (l < GRN_IO_MAX_REF) { break; }
+ if (ntrial >= 10) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "max trial in ctx_at(%p,%d)", vp->ptr, vp->lock);
+ break;
+ }
+ GRN_ATOMIC_ADD_EX(pl, -1, l);
+ GRN_FUTEX_WAIT(pl);
+ }
+#endif /* USE_NREF */
+ if (!l) {
+ grn_io_win jw;
+ uint32_t value_len;
+ char *value = grn_ja_ref(ctx, s->specs, id, &jw, &value_len);
+ if (value) {
+ grn_obj v;
+ GRN_OBJ_INIT(&v, GRN_VECTOR, 0, GRN_DB_TEXT);
+ if (!grn_vector_decode(ctx, &v, value, value_len)) {
+ const char *p;
+ uint32_t size;
+ grn_obj_spec *spec;
+ char buffer[PATH_MAX];
+ size = grn_vector_get_element(ctx,
+ &v,
+ SERIALIZED_SPEC_INDEX_SPEC,
+ (const char **)&spec,
+ NULL,
+ NULL);
+ if (size) {
+ switch (spec->header.type) {
+ case GRN_TYPE :
+ vp->ptr = (grn_obj *)grn_type_open(ctx, spec);
+ UNPACK_INFO();
+ break;
+ case GRN_TABLE_HASH_KEY :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_hash_open(ctx, buffer);
+ if (vp->ptr) {
+ grn_hash *hash = (grn_hash *)(vp->ptr);
+ grn_obj_flags flags = vp->ptr->header.flags;
+ UNPACK_INFO();
+ vp->ptr->header.flags = flags;
+ grn_token_filters_unpack(ctx, &(hash->token_filters), &v);
+ }
+ break;
+ case GRN_TABLE_PAT_KEY :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_pat_open(ctx, buffer);
+ if (vp->ptr) {
+ grn_pat *pat = (grn_pat *)(vp->ptr);
+ grn_obj_flags flags = vp->ptr->header.flags;
+ UNPACK_INFO();
+ vp->ptr->header.flags = flags;
+ grn_token_filters_unpack(ctx, &(pat->token_filters), &v);
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_dat_open(ctx, buffer);
+ if (vp->ptr) {
+ grn_dat *dat = (grn_dat *)(vp->ptr);
+ grn_obj_flags flags = vp->ptr->header.flags;
+ UNPACK_INFO();
+ vp->ptr->header.flags = flags;
+ grn_token_filters_unpack(ctx, &(dat->token_filters), &v);
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_array_open(ctx, buffer);
+ UNPACK_INFO();
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_ja_open(ctx, buffer);
+ UNPACK_INFO();
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ GET_PATH(spec, buffer, s, id);
+ vp->ptr = (grn_obj *)grn_ra_open(ctx, buffer);
+ UNPACK_INFO();
+ break;
+ case GRN_COLUMN_INDEX :
+ GET_PATH(spec, buffer, s, id);
+ {
+ grn_obj *table = grn_ctx_at(ctx, spec->header.domain);
+ vp->ptr = (grn_obj *)grn_ii_open(ctx, buffer, table);
+ }
+ UNPACK_INFO();
+ break;
+ case GRN_PROC :
+ GET_PATH(spec, buffer, s, id);
+ grn_plugin_register(ctx, buffer);
+ break;
+ case GRN_EXPR :
+ {
+ uint8_t *u;
+ size = grn_vector_get_element(ctx,
+ &v,
+ SERIALIZED_SPEC_INDEX_EXPR,
+ &p,
+ NULL,
+ NULL);
+ u = (uint8_t *)p;
+ vp->ptr = grn_expr_open(ctx, spec, u, u + size);
+ }
+ break;
+ }
+ }
+ grn_obj_close(ctx, &v);
+ }
+ grn_ja_unref(ctx, &jw);
+ }
+#ifndef USE_NREF
+ GRN_ATOMIC_ADD_EX(pl, -1, l);
+#endif /* USE_NREF */
+ vp->done = 1;
+ GRN_FUTEX_WAKE(&vp->ptr);
+ } else {
+ for (ntrial = 0; !vp->ptr; ntrial++) {
+ if (ntrial >= 1000) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "max trial in ctx_at(%d,%p,%d)!", id, vp->ptr, vp->lock);
+ break;
+ }
+ GRN_FUTEX_WAIT(&vp->ptr);
+ }
+ }
+ }
+ res = vp->ptr;
+ }
+ }
+exit :
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_obj_open(grn_ctx *ctx, unsigned char type, grn_obj_flags flags, grn_id domain)
+{
+ grn_obj *obj = GRN_MALLOCN(grn_obj, 1);
+ if (obj) {
+ GRN_OBJ_INIT(obj, type, flags, domain);
+ obj->header.impl_flags |= GRN_OBJ_ALLOCATED;
+ }
+ return obj;
+}
+
+grn_obj *
+grn_obj_graft(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_obj *new = grn_obj_open(ctx, obj->header.type, obj->header.impl_flags, obj->header.domain);
+ if (new) {
+ /* todo : deep copy if (obj->header.impl_flags & GRN_OBJ_DO_SHALLOW_COPY) */
+ new->u.b.head = obj->u.b.head;
+ new->u.b.curr = obj->u.b.curr;
+ new->u.b.tail = obj->u.b.tail;
+ obj->u.b.head = NULL;
+ obj->u.b.curr = NULL;
+ obj->u.b.tail = NULL;
+ }
+ return new;
+}
+
+grn_rc
+grn_obj_close(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ GRN_API_ENTER;
+ if (obj) {
+ if (GRN_DB_OBJP(obj)) {
+ grn_hook_entry entry;
+ if (DB_OBJ(obj)->finalizer) {
+ DB_OBJ(obj)->finalizer(ctx, 1, &obj, &DB_OBJ(obj)->user_data);
+ }
+ if (DB_OBJ(obj)->source) {
+ GRN_FREE(DB_OBJ(obj)->source);
+ }
+ for (entry = 0; entry < N_HOOK_ENTRIES; entry++) {
+ grn_hook_free(ctx, DB_OBJ(obj)->hooks[entry]);
+ }
+ grn_obj_delete_by_id(ctx, DB_OBJ(obj)->db, DB_OBJ(obj)->id, GRN_FALSE);
+ }
+ switch (obj->header.type) {
+ case GRN_VECTOR :
+ if (obj->u.v.body && !(obj->header.impl_flags & GRN_OBJ_REFER)) {
+ grn_obj_close(ctx, obj->u.v.body);
+ }
+ if (obj->u.v.sections) { GRN_FREE(obj->u.v.sections); }
+ if (obj->header.impl_flags & GRN_OBJ_ALLOCATED) { GRN_FREE(obj); }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_VOID :
+ case GRN_BULK :
+ case GRN_PTR :
+ case GRN_UVECTOR :
+ case GRN_PVECTOR :
+ case GRN_MSG :
+ obj->header.type = GRN_VOID;
+ rc = grn_bulk_fin(ctx, obj);
+ if (obj->header.impl_flags & GRN_OBJ_ALLOCATED) { GRN_FREE(obj); }
+ break;
+ case GRN_ACCESSOR :
+ {
+ grn_accessor *p, *n;
+ for (p = (grn_accessor *)obj; p; p = n) {
+ n = p->next;
+ GRN_FREE(p);
+ }
+ }
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_SNIP :
+ rc = grn_snip_close(ctx, (grn_snip *)obj);
+ break;
+ case GRN_STRING :
+ rc = grn_string_close(ctx, obj);
+ break;
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ grn_pat_cursor_close(ctx, (grn_pat_cursor *)obj);
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ grn_dat_cursor_close(ctx, (grn_dat_cursor *)obj);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ grn_hash_cursor_close(ctx, (grn_hash_cursor *)obj);
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ grn_array_cursor_close(ctx, (grn_array_cursor *)obj);
+ break;
+ case GRN_CURSOR_COLUMN_INDEX :
+ {
+ grn_index_cursor *ic = (grn_index_cursor *)obj;
+ if (ic->iic) { grn_ii_cursor_close(ctx, ic->iic); }
+ GRN_FREE(ic);
+ }
+ break;
+ case GRN_CURSOR_COLUMN_GEO_INDEX :
+ grn_geo_cursor_close(ctx, obj);
+ break;
+ case GRN_TYPE :
+ GRN_FREE(obj);
+ rc = GRN_SUCCESS;
+ break;
+ case GRN_DB :
+ rc = grn_db_close(ctx, obj);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ rc = grn_pat_close(ctx, (grn_pat *)obj);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ rc = grn_dat_close(ctx, (grn_dat *)obj);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ rc = grn_hash_close(ctx, (grn_hash *)obj);
+ break;
+ case GRN_TABLE_NO_KEY :
+ rc = grn_array_close(ctx, (grn_array *)obj);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ rc = grn_ja_close(ctx, (grn_ja *)obj);
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ rc = grn_ra_close(ctx, (grn_ra *)obj);
+ break;
+ case GRN_COLUMN_INDEX :
+ rc = grn_ii_close(ctx, (grn_ii *)obj);
+ break;
+ case GRN_PROC :
+ {
+ uint32_t i;
+ grn_proc *p = (grn_proc *)obj;
+ /*
+ if (obj->header.domain) {
+ grn_hash_delete(ctx, ctx->impl->qe, &obj->header.domain, sizeof(grn_id), NULL);
+ }
+ */
+ for (i = 0; i < p->nvars; i++) {
+ grn_obj_close(ctx, &p->vars[i].value);
+ }
+ GRN_REALLOC(p->vars, 0);
+ grn_obj_close(ctx, &p->name_buf);
+ if (p->obj.range != GRN_ID_NIL) {
+ grn_plugin_close(ctx, p->obj.range);
+ }
+ GRN_FREE(obj);
+ rc = GRN_SUCCESS;
+ }
+ break;
+ case GRN_EXPR :
+ rc = grn_expr_close(ctx, obj);
+ break;
+ }
+ }
+ GRN_API_RETURN(rc);
+}
+
+void
+grn_obj_unlink(grn_ctx *ctx, grn_obj *obj)
+{
+ if (obj &&
+ (!GRN_DB_OBJP(obj) ||
+ (((grn_db_obj *)obj)->id & GRN_OBJ_TMP_OBJECT) ||
+ (((grn_db_obj *)obj)->id == GRN_ID_NIL) ||
+ obj->header.type == GRN_DB)) {
+ grn_obj_close(ctx, obj);
+ } else if (GRN_DB_OBJP(obj)) {
+#ifdef USE_NREF
+ grn_db_obj *dob = DB_OBJ(obj);
+ grn_db *s = (grn_db *)dob->db;
+ db_value *vp = grn_tiny_array_at(&s->values, dob->id);
+ if (vp) {
+ uint32_t l, *pl = &vp->lock;
+ if (!vp->lock) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "invalid unlink(%p,%d)", obj, vp->lock);
+ return;
+ }
+ GRN_ATOMIC_ADD_EX(pl, -1, l);
+ if (l == 1) {
+ GRN_ATOMIC_ADD_EX(pl, GRN_IO_MAX_REF, l);
+ if (l == GRN_IO_MAX_REF) {
+#ifdef CALL_FINALIZER
+ grn_obj_close(ctx, obj);
+ vp->done = 0;
+ if (dob->finalizer) {
+ dob->finalizer(ctx, 1, &obj, &dob->user_data);
+ dob->finalizer = NULL;
+ dob->user_data.ptr = NULL;
+ }
+#endif /* CALL_FINALIZER */
+ }
+ GRN_ATOMIC_ADD_EX(pl, -GRN_IO_MAX_REF, l);
+ GRN_FUTEX_WAKE(pl);
+ }
+ }
+#endif /* USE_NREF */
+ }
+}
+
+#define VECTOR_CLEAR(ctx,obj) do {\
+ if ((obj)->u.v.body && !((obj)->header.impl_flags & GRN_OBJ_REFER)) {\
+ grn_obj_close((ctx), (obj)->u.v.body);\
+ }\
+ if ((obj)->u.v.sections) { GRN_FREE((obj)->u.v.sections); }\
+ (obj)->header.impl_flags &= ~GRN_OBJ_DO_SHALLOW_COPY;\
+ (obj)->u.b.head = NULL;\
+ (obj)->u.b.curr = NULL;\
+ (obj)->u.b.tail = NULL;\
+} while (0)
+
+static void
+grn_obj_ensure_vector(grn_ctx *ctx, grn_obj *obj)
+{
+ if (obj->header.type != GRN_VECTOR) { grn_bulk_fin(ctx, obj); }
+ obj->header.type = GRN_VECTOR;
+ obj->header.flags &= ~GRN_OBJ_WITH_WEIGHT;
+}
+
+static void
+grn_obj_ensure_bulk(grn_ctx *ctx, grn_obj *obj)
+{
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = GRN_BULK;
+ obj->header.flags &= ~GRN_OBJ_WITH_WEIGHT;
+}
+
+grn_rc
+grn_obj_reinit(grn_ctx *ctx, grn_obj *obj, grn_id domain, unsigned char flags)
+{
+ if (!GRN_OBJ_MUTABLE(obj)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid obj assigned");
+ } else {
+ switch (domain) {
+ case GRN_DB_VOID :
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = GRN_VOID;
+ obj->header.domain = domain;
+ GRN_BULK_REWIND(obj);
+ break;
+ case GRN_DB_OBJECT :
+ case GRN_DB_BOOL :
+ case GRN_DB_INT8 :
+ case GRN_DB_UINT8 :
+ case GRN_DB_INT16 :
+ case GRN_DB_UINT16 :
+ case GRN_DB_INT32 :
+ case GRN_DB_UINT32 :
+ case GRN_DB_INT64 :
+ case GRN_DB_UINT64 :
+ case GRN_DB_FLOAT :
+ case GRN_DB_TIME :
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = (flags & GRN_OBJ_VECTOR) ? GRN_UVECTOR : GRN_BULK;
+ obj->header.domain = domain;
+ GRN_BULK_REWIND(obj);
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ if (flags & GRN_OBJ_VECTOR) {
+ if (obj->header.type != GRN_VECTOR) { grn_bulk_fin(ctx, obj); }
+ obj->header.type = GRN_VECTOR;
+ if (obj->u.v.body) {
+ grn_obj_reinit(ctx, obj->u.v.body, domain, 0);
+ }
+ obj->u.v.n_sections = 0;
+ } else {
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = GRN_BULK;
+ }
+ obj->header.domain = domain;
+ GRN_BULK_REWIND(obj);
+ break;
+ default :
+ {
+ grn_obj *d = grn_ctx_at(ctx, domain);
+ if (!d) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid domain assigned");
+ } else {
+ if (d->header.type == GRN_TYPE && (d->header.flags & GRN_OBJ_KEY_VAR_SIZE)) {
+ if (flags & GRN_OBJ_VECTOR) {
+ if (obj->header.type != GRN_VECTOR) { grn_bulk_fin(ctx, obj); }
+ obj->header.type = GRN_VECTOR;
+ } else {
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = GRN_BULK;
+ }
+ } else {
+ if (obj->header.type == GRN_VECTOR) { VECTOR_CLEAR(ctx, obj); }
+ obj->header.type = (flags & GRN_OBJ_VECTOR) ? GRN_UVECTOR : GRN_BULK;
+ }
+ obj->header.domain = domain;
+ GRN_BULK_REWIND(obj);
+ }
+ }
+ break;
+ }
+ }
+ return ctx->rc;
+}
+
+grn_rc
+grn_obj_reinit_for(grn_ctx *ctx, grn_obj *obj, grn_obj *domain_obj)
+{
+ grn_id domain = GRN_ID_NIL;
+ grn_obj_flags flags = 0;
+
+ if (!GRN_DB_OBJP(domain_obj) && domain_obj->header.type != GRN_ACCESSOR) {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ limited_size_inspect(ctx, &inspected, domain_obj);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[reinit] invalid domain object: <%.*s>",
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ return ctx->rc;
+ }
+
+ grn_obj_get_range_info(ctx, domain_obj, &domain, &flags);
+ if (GRN_OBJ_TABLEP(domain_obj) &&
+ domain_obj->header.type != GRN_TABLE_NO_KEY) {
+ domain = domain_obj->header.domain;
+ }
+ return grn_obj_reinit(ctx, obj, domain, flags);
+}
+
+const char *
+grn_obj_path(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_io *io;
+ const char *path = NULL;
+ GRN_API_ENTER;
+ if (obj->header.type == GRN_PROC) {
+ path = grn_plugin_path(ctx, DB_OBJ(obj)->range);
+ GRN_API_RETURN(path);
+ }
+ io = grn_obj_io(obj);
+ if (io && !(io->flags & GRN_IO_TEMPORARY)) { path = io->path; }
+ GRN_API_RETURN(path);
+}
+
+int
+grn_obj_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
+{
+ int len = 0;
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(obj)) {
+ if (DB_OBJ(obj)->id) {
+ grn_db *s = (grn_db *)DB_OBJ(obj)->db;
+ if (!(DB_OBJ(obj)->id & GRN_OBJ_TMP_OBJECT)) {
+ len = grn_table_get_key(ctx, s->keys, DB_OBJ(obj)->id, namebuf, buf_size);
+ }
+ }
+ }
+ GRN_API_RETURN(len);
+}
+
+int
+grn_column_name(grn_ctx *ctx, grn_obj *obj, char *namebuf, int buf_size)
+{
+ int len = 0;
+ char buf[GRN_TABLE_MAX_KEY_SIZE];
+ if (!obj) { return len; }
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(obj)) {
+ if (DB_OBJ(obj)->id && DB_OBJ(obj)->id < GRN_ID_MAX) {
+ grn_db *s = (grn_db *)DB_OBJ(obj)->db;
+ len = grn_table_get_key(ctx, s->keys, DB_OBJ(obj)->id, buf, GRN_TABLE_MAX_KEY_SIZE);
+ if (len) {
+ int cl;
+ char *p = buf, *p0 = p, *pe = p + len;
+ for (; p < pe && (cl = grn_charlen(ctx, p, pe)); p += cl) {
+ if (*p == GRN_DB_DELIMITER && cl == 1) { p0 = p + cl; }
+ }
+ len = pe - p0;
+ if (len && len <= buf_size) {
+ memcpy(namebuf, p0, len);
+ }
+ }
+ }
+ } else if (obj->header.type == GRN_ACCESSOR) {
+ const char *name = NULL;
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ name = GRN_COLUMN_NAME_ID;
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ name = GRN_COLUMN_NAME_KEY;
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ name = GRN_COLUMN_NAME_VALUE;
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ name = GRN_COLUMN_NAME_SCORE;
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ name = GRN_COLUMN_NAME_NSUBRECS;
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ case GRN_ACCESSOR_LOOKUP :
+ case GRN_ACCESSOR_FUNCALL :
+ break;
+ }
+ }
+ if (name) {
+ len = strlen(name);
+ if (len <= buf_size) {
+ memcpy(namebuf, name, len);
+ }
+ }
+ }
+ GRN_API_RETURN(len);
+}
+
+grn_rc
+grn_column_name_(grn_ctx *ctx, grn_obj *obj, grn_obj *buf)
+{
+ if (GRN_DB_OBJP(obj)) {
+ if (DB_OBJ(obj)->id && DB_OBJ(obj)->id < GRN_ID_MAX) {
+ uint32_t len;
+ grn_db *s = (grn_db *)DB_OBJ(obj)->db;
+ const char *p = _grn_table_key(ctx, s->keys, DB_OBJ(obj)->id, &len);
+ if (len) {
+ int cl;
+ const char *p0 = p, *pe = p + len;
+ for (; p < pe && (cl = grn_charlen(ctx, p, pe)); p += cl) {
+ if (*p == GRN_DB_DELIMITER && cl == 1) { p0 = p + cl; }
+ }
+ GRN_TEXT_PUT(ctx, buf, p0, pe - p0);
+ }
+ }
+ } else if (obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ GRN_TEXT_PUT(ctx, buf, GRN_COLUMN_NAME_ID, GRN_COLUMN_NAME_ID_LEN);
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ if (!a->next) {
+ GRN_TEXT_PUT(ctx, buf, GRN_COLUMN_NAME_KEY, GRN_COLUMN_NAME_KEY_LEN);
+ }
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ if (!a->next) {
+ GRN_TEXT_PUT(ctx, buf,
+ GRN_COLUMN_NAME_VALUE,
+ GRN_COLUMN_NAME_VALUE_LEN);
+ }
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ GRN_TEXT_PUT(ctx, buf,
+ GRN_COLUMN_NAME_SCORE,
+ GRN_COLUMN_NAME_SCORE_LEN);
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ GRN_TEXT_PUT(ctx, buf,
+ GRN_COLUMN_NAME_NSUBRECS,
+ GRN_COLUMN_NAME_NSUBRECS_LEN);
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ grn_column_name_(ctx, a->obj, buf);
+ if (a->next) { GRN_TEXT_PUTC(ctx, buf, '.'); }
+ break;
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ case GRN_ACCESSOR_LOOKUP :
+ case GRN_ACCESSOR_FUNCALL :
+ break;
+ }
+ }
+ }
+ return ctx->rc;
+}
+
+int
+grn_obj_expire(grn_ctx *ctx, grn_obj *obj, int threshold)
+{
+ GRN_API_ENTER;
+ GRN_API_RETURN(0);
+}
+
+int
+grn_obj_check(grn_ctx *ctx, grn_obj *obj)
+{
+ GRN_API_ENTER;
+ GRN_API_RETURN(0);
+}
+
+grn_rc
+grn_obj_lock(grn_ctx *ctx, grn_obj *obj, grn_id id, int timeout)
+{
+ grn_rc rc = GRN_SUCCESS;
+ GRN_API_ENTER;
+ rc = grn_io_lock(ctx, grn_obj_io(obj), timeout);
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_obj_unlock(grn_ctx *ctx, grn_obj *obj, grn_id id)
+{
+ GRN_API_ENTER;
+ grn_io_unlock(grn_obj_io(obj));
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_user_data *
+grn_obj_user_data(grn_ctx *ctx, grn_obj *obj)
+{
+ if (!GRN_DB_OBJP(obj)) { return NULL; }
+ return &DB_OBJ(obj)->user_data;
+}
+
+grn_rc
+grn_obj_set_finalizer(grn_ctx *ctx, grn_obj *obj, grn_proc_func *func)
+{
+ if (!GRN_DB_OBJP(obj)) { return GRN_INVALID_ARGUMENT; }
+ DB_OBJ(obj)->finalizer = func;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_obj_clear_lock(grn_ctx *ctx, grn_obj *obj)
+{
+ GRN_API_ENTER;
+ switch (obj->header.type) {
+ case GRN_DB:
+ {
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *tbl = grn_ctx_at(ctx, id);
+ if (tbl) {
+ switch (tbl->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ grn_obj_clear_lock(ctx, tbl);
+ }
+ } else {
+ if (ctx->rc != GRN_SUCCESS) {
+ ERRCLR(ctx);
+ }
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+ }
+ grn_io_clear_lock(grn_obj_io(obj));
+ break;
+ case GRN_TABLE_NO_KEY :
+ grn_array_queue_lock_clear(ctx, (grn_array *)obj);
+ /* fallthru */
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_hash *cols;
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, obj, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) { grn_obj_clear_lock(ctx, col); }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ grn_io_clear_lock(grn_obj_io(obj));
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE:
+ case GRN_COLUMN_VAR_SIZE:
+ case GRN_COLUMN_INDEX:
+ grn_io_clear_lock(grn_obj_io(obj));
+ break;
+ }
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+unsigned int
+grn_obj_is_locked(grn_ctx *ctx, grn_obj *obj)
+{
+ unsigned int res = 0;
+ GRN_API_ENTER;
+ res = grn_io_is_locked(grn_obj_io(obj));
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_obj_db(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_obj *db = NULL;
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(obj)) { db = DB_OBJ(obj)->db; }
+ GRN_API_RETURN(db);
+}
+
+grn_id
+grn_obj_id(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_id id = GRN_ID_NIL;
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(obj)) {
+ id = DB_OBJ(obj)->id;
+ }
+ GRN_API_RETURN(id);
+}
+
+int
+grn_obj_defrag(grn_ctx *ctx, grn_obj *obj, int threshold)
+{
+ int r = 0;
+ GRN_API_ENTER;
+ switch (obj->header.type) {
+ case GRN_DB:
+ {
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next_inline(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *ja = grn_ctx_at(ctx, id);
+ if (ja && ja->header.type == GRN_COLUMN_VAR_SIZE) {
+ r += grn_ja_defrag(ctx, (grn_ja *)ja, threshold);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ {
+ grn_hash *cols;
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, obj, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) {
+ r += grn_obj_defrag(ctx, col, threshold);
+ grn_obj_unlink(ctx, col);
+ }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ }
+ break;
+ case GRN_COLUMN_VAR_SIZE:
+ r = grn_ja_defrag(ctx, (grn_ja *)obj, threshold);
+ break;
+ }
+ GRN_API_RETURN(r);
+}
+
+/**** sort ****/
+
+typedef struct {
+ grn_id id;
+ uint32_t size;
+ const void *value;
+} sort_entry;
+
+enum {
+ KEY_ID = 0,
+ KEY_BULK,
+ KEY_INT8,
+ KEY_INT16,
+ KEY_INT32,
+ KEY_INT64,
+ KEY_UINT8,
+ KEY_UINT16,
+ KEY_UINT32,
+ KEY_UINT64,
+ KEY_FLOAT32,
+ KEY_FLOAT64,
+};
+
+#define CMPNUM(type) do {\
+ if (as) {\
+ if (bs) {\
+ type va = *((type *)(ap));\
+ type vb = *((type *)(bp));\
+ if (va != vb) { return va > vb; }\
+ } else {\
+ return 1;\
+ }\
+ } else {\
+ if (bs) { return 0; }\
+ }\
+} while (0)
+
+inline static int
+compare_value(grn_ctx *ctx, sort_entry *a, sort_entry *b,
+ grn_table_sort_key *keys, int n_keys)
+{
+ int i;
+ uint8_t type;
+ uint32_t as, bs;
+ const unsigned char *ap, *bp;
+ for (i = 0; i < n_keys; i++, keys++) {
+ if (i) {
+ const char *ap_raw, *bp_raw;
+ if (keys->flags & GRN_TABLE_SORT_DESC) {
+ ap_raw = grn_obj_get_value_(ctx, keys->key, b->id, &as);
+ bp_raw = grn_obj_get_value_(ctx, keys->key, a->id, &bs);
+ } else {
+ ap_raw = grn_obj_get_value_(ctx, keys->key, a->id, &as);
+ bp_raw = grn_obj_get_value_(ctx, keys->key, b->id, &bs);
+ }
+ ap = (const unsigned char *)ap_raw;
+ bp = (const unsigned char *)bp_raw;
+ } else {
+ if (keys->flags & GRN_TABLE_SORT_DESC) {
+ ap = b->value; as = b->size;
+ bp = a->value; bs = a->size;
+ } else {
+ ap = a->value; as = a->size;
+ bp = b->value; bs = b->size;
+ }
+ }
+ type = keys->offset;
+ switch (type) {
+ case KEY_ID :
+ if (ap != bp) { return ap > bp; }
+ break;
+ case KEY_BULK :
+ for (;; ap++, bp++, as--, bs--) {
+ if (!as) { if (bs) { return 0; } else { break; } }
+ if (!bs) { return 1; }
+ if (*ap < *bp) { return 0; }
+ if (*ap > *bp) { return 1; }
+ }
+ break;
+ case KEY_INT8 :
+ CMPNUM(int8_t);
+ break;
+ case KEY_INT16 :
+ CMPNUM(int16_t);
+ break;
+ case KEY_INT32 :
+ CMPNUM(int32_t);
+ break;
+ case KEY_INT64 :
+ CMPNUM(int64_t);
+ break;
+ case KEY_UINT8 :
+ CMPNUM(uint8_t);
+ break;
+ case KEY_UINT16 :
+ CMPNUM(uint16_t);
+ break;
+ case KEY_UINT32 :
+ CMPNUM(uint32_t);
+ break;
+ case KEY_UINT64 :
+ CMPNUM(uint64_t);
+ break;
+ case KEY_FLOAT32 :
+ if (as) {
+ if (bs) {
+ float va = *((float *)(ap));
+ float vb = *((float *)(bp));
+ if (va < vb || va > vb) { return va > vb; }
+ } else {
+ return 1;
+ }
+ } else {
+ if (bs) { return 0; }
+ }
+ break;
+ case KEY_FLOAT64 :
+ if (as) {
+ if (bs) {
+ double va = *((double *)(ap));
+ double vb = *((double *)(bp));
+ if (va < vb || va > vb) { return va > vb; }
+ } else {
+ return 1;
+ }
+ } else {
+ if (bs) { return 0; }
+ }
+ break;
+ }
+ }
+ return 0;
+}
+
+inline static void
+swap(sort_entry *a, sort_entry *b)
+{
+ sort_entry c_ = *a;
+ *a = *b;
+ *b = c_;
+}
+
+inline static sort_entry *
+part(grn_ctx *ctx, sort_entry *b, sort_entry *e, grn_table_sort_key *keys, int n_keys)
+{
+ sort_entry *c;
+ intptr_t d = e - b;
+ if (compare_value(ctx, b, e, keys, n_keys)) {
+ swap(b, e);
+ }
+ if (d < 2) { return NULL; }
+ c = b + (d >> 1);
+ if (compare_value(ctx, b, c, keys, n_keys)) {
+ swap(b, c);
+ } else {
+ if (compare_value(ctx, c, e, keys, n_keys)) {
+ swap(c, e);
+ }
+ }
+ if (d < 3) { return NULL; }
+ b++;
+ swap(b, c);
+ c = b;
+ for (;;) {
+ do {
+ b++;
+ } while (compare_value(ctx, c, b, keys, n_keys));
+ do {
+ e--;
+ } while (compare_value(ctx, e, c, keys, n_keys));
+ if (b >= e) { break; }
+ swap(b, e);
+ }
+ swap(c, e);
+ return e;
+}
+
+static void
+_sort(grn_ctx *ctx, sort_entry *head, sort_entry *tail, int from, int to,
+ grn_table_sort_key *keys, int n_keys)
+{
+ sort_entry *c;
+ if (head < tail && (c = part(ctx, head, tail, keys, n_keys))) {
+ intptr_t m = c - head + 1;
+ if (from < m - 1) { _sort(ctx, head, c - 1, from, to, keys, n_keys); }
+ if (m < to) { _sort(ctx, c + 1, tail, from - m, to - m, keys, n_keys); }
+ }
+}
+
+static sort_entry *
+pack(grn_ctx *ctx, grn_obj *table, sort_entry *head, sort_entry *tail,
+ grn_table_sort_key *keys, int n_keys)
+{
+ int i = 0;
+ sort_entry e, c;
+ grn_table_cursor *tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1, 0);
+ if (!tc) { return NULL; }
+ if ((c.id = grn_table_cursor_next_inline(ctx, tc))) {
+ c.value = grn_obj_get_value_(ctx, keys->key, c.id, &c.size);
+ while ((e.id = grn_table_cursor_next_inline(ctx, tc))) {
+ e.value = grn_obj_get_value_(ctx, keys->key, e.id, &e.size);
+ if (compare_value(ctx, &c, &e, keys, n_keys)) {
+ *head++ = e;
+ } else {
+ *tail-- = e;
+ }
+ i++;
+ }
+ *head = c;
+ i++;
+ }
+ grn_table_cursor_close(ctx, tc);
+ return i > 2 ? head : NULL;
+}
+
+static int
+range_is_idp(grn_obj *obj)
+{
+ if (obj && obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a;
+ for (a = (grn_accessor *)obj; a; a = a->next) {
+ if (a->action == GRN_ACCESSOR_GET_ID) { return 1; }
+ }
+ }
+ return 0;
+}
+
+int
+grn_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
+ grn_obj *result, grn_table_sort_key *keys, int n_keys)
+{
+ grn_rc rc;
+ grn_obj *index;
+ int n, e, i = 0;
+ sort_entry *array, *ep;
+ GRN_API_ENTER;
+ if (!n_keys || !keys) {
+ WARN(GRN_INVALID_ARGUMENT, "keys is null");
+ goto exit;
+ }
+ if (!table) {
+ WARN(GRN_INVALID_ARGUMENT, "table is null");
+ goto exit;
+ }
+ if (!(result && result->header.type == GRN_TABLE_NO_KEY)) {
+ WARN(GRN_INVALID_ARGUMENT, "result is not a array");
+ goto exit;
+ }
+ n = grn_table_size(ctx, table);
+ if ((rc = grn_normalize_offset_and_limit(ctx, n, &offset, &limit))) {
+ ERR(rc, "grn_normalize_offset_and_limit failed");
+ goto exit;
+ } else {
+ e = offset + limit;
+ }
+ if (keys->flags & GRN_TABLE_SORT_GEO) {
+ i = grn_geo_table_sort(ctx, table, offset, limit, result, keys, n_keys);
+ goto exit;
+ }
+ if (n_keys == 1 && !GRN_ACCESSORP(keys->key) &&
+ grn_column_index(ctx, keys->key, GRN_OP_LESS, &index, 1, NULL)) {
+ grn_id tid;
+ grn_pat *lexicon = (grn_pat *)grn_ctx_at(ctx, index->header.domain);
+ grn_pat_cursor *pc = grn_pat_cursor_open(ctx, lexicon, NULL, 0, NULL, 0,
+ 0 /* offset : can be used in unique index */,
+ -1 /* limit : can be used in unique index */,
+ (keys->flags & GRN_TABLE_SORT_DESC)
+ ? GRN_CURSOR_DESCENDING
+ : GRN_CURSOR_ASCENDING);
+ if (pc) {
+ while (i < e && (tid = grn_pat_cursor_next(ctx, pc))) {
+ grn_ii_cursor *ic = grn_ii_cursor_open(ctx, (grn_ii *)index, tid, 0, 0, 1, 0);
+ if (ic) {
+ grn_ii_posting *posting;
+ while (i < e && (posting = grn_ii_cursor_next(ctx, ic))) {
+ if (offset <= i) {
+ grn_id *v;
+ if (!grn_array_add(ctx, (grn_array *)result, (void **)&v)) { break; }
+ *v = posting->rid;
+ }
+ i++;
+ }
+ grn_ii_cursor_close(ctx, ic);
+ }
+ }
+ grn_pat_cursor_close(ctx, pc);
+ }
+ } else {
+ int j;
+ grn_table_sort_key *kp;
+ for (kp = keys, j = n_keys; j; kp++, j--) {
+ if (range_is_idp(kp->key)) {
+ kp->offset = KEY_ID;
+ } else {
+ grn_obj *range = grn_ctx_at(ctx, grn_obj_get_range(ctx, kp->key));
+ if (range->header.type == GRN_TYPE) {
+ if (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ kp->offset = KEY_BULK;
+ } else {
+ uint8_t key_type = range->header.flags & GRN_OBJ_KEY_MASK;
+ switch (key_type) {
+ case GRN_OBJ_KEY_UINT :
+ case GRN_OBJ_KEY_GEO_POINT :
+ switch (GRN_TYPE_SIZE(DB_OBJ(range))) {
+ case 1 :
+ kp->offset = KEY_UINT8;
+ break;
+ case 2 :
+ kp->offset = KEY_UINT16;
+ break;
+ case 4 :
+ kp->offset = KEY_UINT32;
+ break;
+ case 8 :
+ kp->offset = KEY_UINT64;
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "unsupported uint value");
+ goto exit;
+ }
+ break;
+ case GRN_OBJ_KEY_INT :
+ switch (GRN_TYPE_SIZE(DB_OBJ(range))) {
+ case 1 :
+ kp->offset = KEY_INT8;
+ break;
+ case 2 :
+ kp->offset = KEY_INT16;
+ break;
+ case 4 :
+ kp->offset = KEY_INT32;
+ break;
+ case 8 :
+ kp->offset = KEY_INT64;
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "unsupported int value");
+ goto exit;
+ }
+ break;
+ case GRN_OBJ_KEY_FLOAT :
+ switch (GRN_TYPE_SIZE(DB_OBJ(range))) {
+ case 4 :
+ kp->offset = KEY_FLOAT32;
+ break;
+ case 8 :
+ kp->offset = KEY_FLOAT64;
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "unsupported float value");
+ goto exit;
+ }
+ break;
+ }
+ }
+ } else {
+ kp->offset = KEY_UINT32;
+ }
+ }
+ }
+ if (!(array = GRN_MALLOC(sizeof(sort_entry) * n))) {
+ goto exit;
+ }
+ if ((ep = pack(ctx, table, array, array + n - 1, keys, n_keys))) {
+ intptr_t m = ep - array + 1;
+ if (offset < m - 1) { _sort(ctx, array, ep - 1, offset, e, keys, n_keys); }
+ if (m < e) { _sort(ctx, ep + 1, array + n - 1, offset - m, e - m, keys, n_keys); }
+ }
+ {
+ grn_id *v;
+ for (i = 0, ep = array + offset; i < limit && ep < array + n; i++, ep++) {
+ if (!grn_array_add(ctx, (grn_array *)result, (void **)&v)) { break; }
+ *v = ep->id;
+ }
+ GRN_FREE(array);
+ }
+ }
+exit :
+ GRN_API_RETURN(i);
+}
+
+static grn_obj *
+deftype(grn_ctx *ctx, const char *name,
+ grn_obj_flags flags, unsigned int size)
+{
+ grn_obj *o = grn_ctx_get(ctx, name, strlen(name));
+ if (!o) { o = grn_type_create(ctx, name, strlen(name), flags, size); }
+ return o;
+}
+
+grn_rc
+grn_db_init_builtin_types(grn_ctx *ctx)
+{
+ grn_id id;
+ grn_obj *obj, *db = ctx->impl->db;
+ char buf[] = "Sys00";
+ grn_obj_register(ctx, db, buf, 5);
+ obj = deftype(ctx, "Object",
+ GRN_OBJ_KEY_UINT, sizeof(uint64_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_OBJECT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Bool",
+ GRN_OBJ_KEY_UINT, sizeof(uint8_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_BOOL) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Int8",
+ GRN_OBJ_KEY_INT, sizeof(int8_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_INT8) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "UInt8",
+ GRN_OBJ_KEY_UINT, sizeof(uint8_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_UINT8) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Int16",
+ GRN_OBJ_KEY_INT, sizeof(int16_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_INT16) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "UInt16",
+ GRN_OBJ_KEY_UINT, sizeof(uint16_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_UINT16) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Int32",
+ GRN_OBJ_KEY_INT, sizeof(int32_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_INT32) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "UInt32",
+ GRN_OBJ_KEY_UINT, sizeof(uint32_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_UINT32) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Int64",
+ GRN_OBJ_KEY_INT, sizeof(int64_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_INT64) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "UInt64",
+ GRN_OBJ_KEY_UINT, sizeof(uint64_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_UINT64) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Float",
+ GRN_OBJ_KEY_FLOAT, sizeof(double));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_FLOAT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Time",
+ GRN_OBJ_KEY_INT, sizeof(int64_t));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_TIME) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "ShortText",
+ GRN_OBJ_KEY_VAR_SIZE, GRN_TABLE_MAX_KEY_SIZE);
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_SHORT_TEXT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "Text",
+ GRN_OBJ_KEY_VAR_SIZE, 1 << 16);
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_TEXT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "LongText",
+ GRN_OBJ_KEY_VAR_SIZE, 1 << 31);
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_LONG_TEXT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "TokyoGeoPoint",
+ GRN_OBJ_KEY_GEO_POINT, sizeof(grn_geo_point));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_TOKYO_GEO_POINT) { return GRN_FILE_CORRUPT; }
+ obj = deftype(ctx, "WGS84GeoPoint",
+ GRN_OBJ_KEY_GEO_POINT, sizeof(grn_geo_point));
+ if (!obj || DB_OBJ(obj)->id != GRN_DB_WGS84_GEO_POINT) { return GRN_FILE_CORRUPT; }
+ for (id = grn_db_curr_id(ctx, db) + 1; id < GRN_DB_MECAB; id++) {
+ grn_itoh(id, buf + 3, 2);
+ grn_obj_register(ctx, db, buf, 5);
+ }
+#ifdef GRN_WITH_MECAB
+ if (grn_db_init_mecab_tokenizer(ctx)) {
+ ERRCLR(ctx);
+#endif
+ grn_obj_register(ctx, db, "TokenMecab", 10);
+#ifdef GRN_WITH_MECAB
+ }
+#endif
+ grn_db_init_builtin_tokenizers(ctx);
+ grn_db_init_builtin_normalizers(ctx);
+ for (id = grn_db_curr_id(ctx, db) + 1; id < 128; id++) {
+ grn_itoh(id, buf + 3, 2);
+ grn_obj_register(ctx, db, buf, 5);
+ }
+ grn_db_init_builtin_query(ctx);
+ for (id = grn_db_curr_id(ctx, db) + 1; id < GRN_N_RESERVED_TYPES; id++) {
+ grn_itoh(id, buf + 3, 2);
+ grn_obj_register(ctx, db, buf, 5);
+ }
+ return ctx->rc;
+}
+
+#define MULTI_COLUMN_INDEXP(i) (DB_OBJ(i)->source_size > sizeof(grn_id))
+
+static inline int
+grn_column_index_column_equal(grn_ctx *ctx, grn_obj *obj, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section)
+{
+ int n = 0;
+ grn_obj **ip = indexbuf;
+ grn_hook *hooks;
+
+ for (hooks = DB_OBJ(obj)->hooks[GRN_HOOK_SET]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if (section) { *section = (MULTI_COLUMN_INDEXP(target)) ? data->section : 0; }
+ if (obj->header.type != GRN_COLUMN_FIX_SIZE) {
+ grn_obj *tokenizer, *lexicon = grn_ctx_at(ctx, target->header.domain);
+ if (!lexicon) { continue; }
+ grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL);
+ if (tokenizer) { continue; }
+ }
+ if (n < buf_size) {
+ *ip++ = target;
+ }
+ n++;
+ }
+
+ return n;
+}
+
+static inline int
+grn_column_index_column_match(grn_ctx *ctx, grn_obj *obj, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section)
+{
+ int n = 0;
+ grn_obj **ip = indexbuf;
+ grn_hook *hooks;
+
+ for (hooks = DB_OBJ(obj)->hooks[GRN_HOOK_SET]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if (section) { *section = (MULTI_COLUMN_INDEXP(target)) ? data->section : 0; }
+ if (n < buf_size) {
+ *ip++ = target;
+ }
+ n++;
+ }
+
+ return n;
+}
+
+static inline int
+grn_column_index_column_range(grn_ctx *ctx, grn_obj *obj, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section)
+{
+ int n = 0;
+ grn_obj **ip = indexbuf;
+ grn_hook_entry hook_entry;
+ grn_hook *hooks;
+
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ hook_entry = GRN_HOOK_INSERT;
+ break;
+ default :
+ hook_entry = GRN_HOOK_SET;
+ break;
+ }
+
+ for (hooks = DB_OBJ(obj)->hooks[hook_entry]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+ if (section) { *section = (MULTI_COLUMN_INDEXP(target)) ? data->section : 0; }
+ {
+ grn_obj *tokenizer, *lexicon = grn_ctx_at(ctx, target->header.domain);
+ if (!lexicon) { continue; }
+ if (lexicon->header.type != GRN_TABLE_PAT_KEY) { continue; }
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
+ grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL);
+ if (tokenizer) { continue; }
+ }
+ if (n < buf_size) {
+ *ip++ = target;
+ }
+ n++;
+ }
+
+ return n;
+}
+
+static inline grn_bool
+is_valid_match_index(grn_ctx *ctx, grn_obj *index_column)
+{
+ return GRN_TRUE;
+}
+
+static inline grn_bool
+is_valid_range_index(grn_ctx *ctx, grn_obj *index_column)
+{
+ grn_obj *tokenizer;
+ grn_obj *lexicon;
+
+ lexicon = grn_ctx_at(ctx, index_column->header.domain);
+ if (!lexicon) { return GRN_FALSE; }
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
+ if (lexicon->header.type != GRN_TABLE_PAT_KEY) {
+ grn_obj_unlink(ctx, lexicon);
+ return GRN_FALSE;
+ }
+
+ grn_table_get_info(ctx, lexicon, NULL, NULL, &tokenizer, NULL, NULL);
+ grn_obj_unlink(ctx, lexicon);
+ if (tokenizer) { return GRN_FALSE; }
+
+ return GRN_TRUE;
+}
+
+static grn_bool
+is_valid_index(grn_ctx *ctx, grn_obj *index_column, grn_operator op)
+{
+ switch (op) {
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ return is_valid_match_index(ctx, index_column);
+ break;
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_CALL :
+ return is_valid_range_index(ctx, index_column);
+ break;
+ default :
+ return GRN_FALSE;
+ break;
+ }
+}
+
+static int
+find_section(grn_ctx *ctx, grn_obj *index_column, grn_obj *indexed_column)
+{
+ int section = 0;
+ grn_id indexed_column_id;
+ grn_id *source_ids;
+ int i, n_source_ids;
+
+ indexed_column_id = DB_OBJ(indexed_column)->id;
+
+ source_ids = DB_OBJ(index_column)->source;
+ n_source_ids = DB_OBJ(index_column)->source_size / sizeof(grn_id);
+ for (i = 0; i < n_source_ids; i++) {
+ grn_id source_id = source_ids[i];
+ if (source_id == indexed_column_id) {
+ section = i + 1;
+ break;
+ }
+ }
+
+ return section;
+}
+
+static int
+grn_column_index_accessor_index_column(grn_ctx *ctx, grn_accessor *a,
+ grn_operator op,
+ grn_obj **indexbuf, int buf_size,
+ int *section)
+{
+ grn_obj *index_column = a->obj;
+
+ if (!is_valid_index(ctx, index_column, op)) {
+ return 0;
+ }
+
+ if (a->next) {
+ int specified_section;
+ grn_bool is_invalid_section;
+ if (a->next->next) {
+ return 0;
+ }
+ specified_section = find_section(ctx, index_column, a->next->obj);
+ is_invalid_section = (specified_section == 0);
+ if (is_invalid_section) {
+ return 0;
+ }
+ if (section) {
+ *section = specified_section;
+ }
+ }
+ if (buf_size > 0) {
+ *indexbuf = index_column;
+ }
+
+ return 1;
+}
+
+static inline int
+grn_column_index_accessor(grn_ctx *ctx, grn_obj *obj, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section)
+{
+ int n = 0;
+ grn_obj **ip = indexbuf;
+ grn_accessor *a = (grn_accessor *)obj;
+
+ while (a) {
+ grn_hook *hooks;
+ grn_bool found = GRN_FALSE;
+ grn_hook_entry entry = -1;
+
+ if (a->action == GRN_ACCESSOR_GET_COLUMN_VALUE &&
+ GRN_OBJ_INDEX_COLUMNP(a->obj)) {
+ return grn_column_index_accessor_index_column(ctx, a, op, indexbuf,
+ buf_size, section);
+ }
+
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_KEY :
+ entry = GRN_HOOK_INSERT;
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ entry = GRN_HOOK_SET;
+ break;
+ default :
+ break;
+ }
+
+ if (entry == -1) {
+ break;
+ }
+
+ for (hooks = DB_OBJ(a->obj)->hooks[entry]; hooks; hooks = hooks->next) {
+ default_set_value_hook_data *data = (void *)NEXT_ADDR(hooks);
+ grn_obj *target = grn_ctx_at(ctx, data->target);
+
+ if (target->header.type != GRN_COLUMN_INDEX) { continue; }
+
+ found = GRN_TRUE;
+ if (!a->next) {
+ if (!is_valid_index(ctx, target, op)) {
+ continue;
+ }
+
+ if (section) {
+ *section = (MULTI_COLUMN_INDEXP(target)) ? data->section : 0;
+ }
+ if (n < buf_size) {
+ *ip++ = target;
+ }
+ n++;
+ }
+ }
+
+ if (!found) {
+ break;
+ }
+ a = a->next;
+ }
+
+ return n;
+}
+
+int
+grn_column_index(grn_ctx *ctx, grn_obj *obj, grn_operator op,
+ grn_obj **indexbuf, int buf_size, int *section)
+{
+ int n = 0;
+ GRN_API_ENTER;
+ if (GRN_DB_OBJP(obj)) {
+ switch (op) {
+ case GRN_OP_EQUAL :
+ n = grn_column_index_column_equal(ctx, obj, op,
+ indexbuf, buf_size, section);
+ break;
+ case GRN_OP_PREFIX :
+ case GRN_OP_SUFFIX :
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ n = grn_column_index_column_match(ctx, obj, op,
+ indexbuf, buf_size, section);
+ break;
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_CALL :
+ n = grn_column_index_column_range(ctx, obj, op,
+ indexbuf, buf_size, section);
+ break;
+ default :
+ break;
+ }
+ } else if (GRN_ACCESSORP(obj)) {
+ if (section) {
+ *section = 0;
+ }
+ switch (op) {
+ case GRN_OP_EQUAL :
+ case GRN_OP_TERM_EXTRACT :
+ if (buf_size) { indexbuf[n] = obj; }
+ n++;
+ break;
+ case GRN_OP_PREFIX :
+ {
+ grn_accessor *a = (grn_accessor *)obj;
+ if (a->action == GRN_ACCESSOR_GET_KEY) {
+ if (a->obj->header.type == GRN_TABLE_PAT_KEY) {
+ if (buf_size) { indexbuf[n] = obj; }
+ n++;
+ }
+ /* FIXME: GRN_TABLE_DAT_KEY should be supported */
+ }
+ }
+ break;
+ case GRN_OP_SUFFIX :
+ {
+ grn_accessor *a = (grn_accessor *)obj;
+ if (a->action == GRN_ACCESSOR_GET_KEY) {
+ if (a->obj->header.type == GRN_TABLE_PAT_KEY &&
+ a->obj->header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ if (buf_size) { indexbuf[n] = obj; }
+ n++;
+ }
+ }
+ }
+ break;
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_CALL :
+ n = grn_column_index_accessor(ctx, obj, op, indexbuf, buf_size, section);
+ break;
+ default :
+ break;
+ }
+ }
+ GRN_API_RETURN(n);
+}
+
+/* todo : refine */
+static int
+tokenize(const char *str, size_t str_len, const char **tokbuf, int buf_size, const char **rest)
+{
+ const char **tok = tokbuf, **tok_end = tokbuf + buf_size;
+ if (buf_size > 0) {
+ const char *str_end = str + str_len;
+ while (str < str_end && (' ' == *str || ',' == *str)) { str++; }
+ for (;;) {
+ if (str == str_end) {
+ *tok++ = str;
+ break;
+ }
+ if (' ' == *str || ',' == *str) {
+ // *str = '\0';
+ *tok++ = str;
+ if (tok == tok_end) { break; }
+ do { str++; } while (str < str_end && (' ' == *str || ',' == *str));
+ } else {
+ str++;
+ }
+ }
+ }
+ if (rest) { *rest = str; }
+ return tok - tokbuf;
+}
+
+grn_rc
+grn_obj_columns(grn_ctx *ctx, grn_obj *table,
+ const char *str, unsigned int str_size, grn_obj *res)
+{
+ grn_obj *col;
+ const char *p = (char *)str, *q, *r, *pe = p + str_size, *tokbuf[256];
+ while (p < pe) {
+ int i, n = tokenize(p, pe - p, tokbuf, 256, &q);
+ for (i = 0; i < n; i++) {
+ r = tokbuf[i];
+ while (p < r && (' ' == *p || ',' == *p)) { p++; }
+ if (p < r) {
+ if (r[-1] == '*') {
+ grn_hash *cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ if (cols) {
+ grn_id *key;
+ grn_table_columns(ctx, table, p, r - p - 1, (grn_obj *)cols);
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ if ((col = grn_ctx_at(ctx, *key))) { GRN_PTR_PUT(ctx, res, col); }
+ });
+ grn_hash_close(ctx, cols);
+ }
+ {
+ grn_obj *type = grn_ctx_at(ctx, table->header.domain);
+ if (GRN_OBJ_TABLEP(type)) {
+ grn_obj *ai = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_ID,
+ GRN_COLUMN_NAME_ID_LEN);
+ if (ai) {
+ if (ai->header.type == GRN_ACCESSOR) {
+ cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ if (cols) {
+ grn_id *key;
+ grn_accessor *a, *ac;
+ grn_obj *target_table = table;
+ for (a = (grn_accessor *)ai; a; a = a->next) {
+ target_table = a->obj;
+ }
+ grn_table_columns(ctx, target_table,
+ p, r - p - 1, (grn_obj *)cols);
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ if ((col = grn_ctx_at(ctx, *key))) {
+ ac = accessor_new(ctx);
+ GRN_PTR_PUT(ctx, res, (grn_obj *)ac);
+ for (a = (grn_accessor *)ai; a; a = a->next) {
+ if (a->action != GRN_ACCESSOR_GET_ID) {
+ ac->action = a->action;
+ ac->obj = a->obj;
+ ac->next = accessor_new(ctx);
+ if (!(ac = ac->next)) { break; }
+ } else {
+ ac->action = GRN_ACCESSOR_GET_COLUMN_VALUE;
+ ac->obj = col;
+ ac->next = NULL;
+ break;
+ }
+ }
+ }
+ });
+ grn_hash_close(ctx, cols);
+ }
+ }
+ grn_obj_unlink(ctx, ai);
+ }
+ }
+ }
+ } else if ((col = grn_obj_column(ctx, table, p, r - p))) {
+ GRN_PTR_PUT(ctx, res, col);
+ }
+ }
+ p = r;
+ }
+ p = q;
+ }
+ return ctx->rc;
+}
+
+static grn_table_sort_key *
+grn_table_sort_key_from_str_geo(grn_ctx *ctx, const char *str, unsigned int str_size,
+ grn_obj *table, unsigned int *nkeys)
+{
+ const char **tokbuf;
+ const char *p = str, *pe = str + str_size;
+ grn_table_sort_key *keys = NULL, *k = NULL;
+ while ((*p++ != '(')) { if (p == pe) { return NULL; } }
+ str = p;
+ while ((*p != ')')) { if (++p == pe) { return NULL; } }
+ str_size = p - str;
+ p = str;
+ if ((tokbuf = GRN_MALLOCN(const char *, str_size))) {
+ grn_id domain = GRN_ID_NIL;
+ int i, n = tokenize(str, str_size, tokbuf, str_size, NULL);
+ if ((keys = GRN_MALLOCN(grn_table_sort_key, n))) {
+ k = keys;
+ for (i = 0; i < n; i++) {
+ const char *r = tokbuf[i];
+ while (p < r && (' ' == *p || ',' == *p)) { p++; }
+ if (p < r) {
+ k->flags = GRN_TABLE_SORT_ASC;
+ k->offset = 0;
+ if (*p == '+') {
+ p++;
+ } else if (*p == '-') {
+ k->flags = GRN_TABLE_SORT_DESC;
+ p++;
+ }
+ if (k == keys) {
+ if (!(k->key = grn_obj_column(ctx, table, p, r - p))) {
+ WARN(GRN_INVALID_ARGUMENT, "invalid sort key: <%.*s>(<%.*s>)",
+ (int)(tokbuf[i] - p), p, str_size, str);
+ break;
+ }
+ domain = grn_obj_get_range(ctx, k->key);
+ } else {
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET(ctx, &buf, p + 1, r - p - 2); /* should be quoted */
+ k->key = grn_obj_open(ctx, GRN_BULK, 0, domain);
+ grn_obj_cast(ctx, &buf, k->key, GRN_FALSE);
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ k->flags |= GRN_TABLE_SORT_GEO;
+ k++;
+ }
+ p = r;
+ }
+ }
+ GRN_FREE(tokbuf);
+ }
+ if (!ctx->rc && k - keys > 0) {
+ *nkeys = k - keys;
+ } else {
+ grn_table_sort_key_close(ctx, keys, k - keys);
+ *nkeys = 0;
+ keys = NULL;
+ }
+ return keys;
+}
+
+grn_table_sort_key *
+grn_table_sort_key_from_str(grn_ctx *ctx, const char *str, unsigned int str_size,
+ grn_obj *table, unsigned int *nkeys)
+{
+ const char *p = str;
+ const char **tokbuf;
+ grn_table_sort_key *keys = NULL, *k = NULL;
+ if ((keys = grn_table_sort_key_from_str_geo(ctx, str, str_size, table, nkeys))) {
+ return keys;
+ }
+ if ((tokbuf = GRN_MALLOCN(const char *, str_size))) {
+ int i, n = tokenize(str, str_size, tokbuf, str_size, NULL);
+ if ((keys = GRN_MALLOCN(grn_table_sort_key, n))) {
+ k = keys;
+ for (i = 0; i < n; i++) {
+ const char *r = tokbuf[i];
+ while (p < r && (' ' == *p || ',' == *p)) { p++; }
+ if (p < r) {
+ k->flags = GRN_TABLE_SORT_ASC;
+ k->offset = 0;
+ if (*p == '+') {
+ p++;
+ } else if (*p == '-') {
+ k->flags = GRN_TABLE_SORT_DESC;
+ p++;
+ }
+ if ((k->key = grn_obj_column(ctx, table, p, r - p))) {
+ k++;
+ } else {
+ if (r - p == GRN_COLUMN_NAME_SCORE_LEN &&
+ memcmp(p, GRN_COLUMN_NAME_SCORE, GRN_COLUMN_NAME_SCORE_LEN) == 0) {
+ GRN_LOG(ctx, GRN_WARN,
+ "ignore invalid sort key: <%.*s>(<%.*s>)",
+ (int)(r - p), p, str_size, str);
+ } else {
+ WARN(GRN_INVALID_ARGUMENT,
+ "invalid sort key: <%.*s>(<%.*s>)",
+ (int)(r - p), p, str_size, str);
+ break;
+ }
+ }
+ }
+ p = r;
+ }
+ }
+ GRN_FREE(tokbuf);
+ }
+ if (!ctx->rc && k - keys > 0) {
+ *nkeys = k - keys;
+ } else {
+ grn_table_sort_key_close(ctx, keys, k - keys);
+ *nkeys = 0;
+ keys = NULL;
+ }
+ return keys;
+}
+
+grn_rc
+grn_table_sort_key_close(grn_ctx *ctx, grn_table_sort_key *keys, unsigned int nkeys)
+{
+ int i;
+ if (keys) {
+ for (i = 0; i < nkeys; i++) {
+ grn_obj_unlink(ctx, keys[i].key);
+ }
+ GRN_FREE(keys);
+ }
+ return ctx->rc;
+}
+
+grn_bool
+grn_table_is_grouped(grn_ctx *ctx, grn_obj *table)
+{
+ if (GRN_OBJ_TABLEP(table) && GRN_TABLE_IS_GROUPED(table)) {
+ return GRN_TRUE;
+ }
+ return GRN_FALSE;
+}
+
+unsigned int
+grn_table_max_n_subrecs(grn_ctx *ctx, grn_obj *table)
+{
+ if (GRN_OBJ_TABLEP(table)) {
+ return DB_OBJ(table)->max_n_subrecs;
+ }
+ return 0;
+}
+
+grn_obj *
+grn_table_tokenize(grn_ctx *ctx, grn_obj *table,
+ const char *str, unsigned int str_len,
+ grn_obj *buf, grn_bool addp)
+{
+ grn_token_cursor *token_cursor = NULL;
+ grn_token_mode mode = addp ? GRN_TOKEN_ADD : GRN_TOKEN_GET;
+ GRN_API_ENTER;
+ if (!(token_cursor = grn_token_cursor_open(ctx, table, str, str_len, mode, 0))) {
+ goto exit;
+ }
+ if (buf) {
+ GRN_BULK_REWIND(buf);
+ } else {
+ if (!(buf = grn_obj_open(ctx, GRN_UVECTOR, 0, DB_OBJ(table)->id))) {
+ goto exit;
+ }
+ }
+ while (token_cursor->status != GRN_TOKEN_DONE && token_cursor->status != GRN_TOKEN_DONE_SKIP) {
+ grn_id tid;
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ GRN_RECORD_PUT(ctx, buf, tid);
+ }
+ }
+exit :
+ if (token_cursor) {
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ GRN_API_RETURN(buf);
+}
+
+/* grn_load */
+
+static grn_obj *
+values_add(grn_ctx *ctx, grn_loader *loader)
+{
+ grn_obj *res;
+ uint32_t curr_size = loader->values_size * sizeof(grn_obj);
+ if (curr_size < GRN_TEXT_LEN(&loader->values)) {
+ res = (grn_obj *)(GRN_TEXT_VALUE(&loader->values) + curr_size);
+ res->header.domain = GRN_DB_TEXT;
+ GRN_BULK_REWIND(res);
+ } else {
+ if (grn_bulk_space(ctx, &loader->values, sizeof(grn_obj))) { return NULL; }
+ res = (grn_obj *)(GRN_TEXT_VALUE(&loader->values) + curr_size);
+ GRN_TEXT_INIT(res, 0);
+ }
+ loader->values_size++;
+ loader->last = res;
+ return res;
+}
+
+static grn_obj *
+values_next(grn_ctx *ctx, grn_obj *value)
+{
+ if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET ||
+ value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
+ value += GRN_UINT32_VALUE(value);
+ }
+ return value + 1;
+}
+
+static int
+values_len(grn_ctx *ctx, grn_obj *head, grn_obj *tail)
+{
+ int len;
+ for (len = 0; head < tail; head = values_next(ctx, head), len++) ;
+ return len;
+}
+
+static grn_id
+loader_add(grn_ctx *ctx, grn_obj *key)
+{
+ int added = 0;
+ grn_loader *loader = &ctx->impl->loader;
+ grn_id id = grn_table_add_by_key(ctx, loader->table, key, &added);
+ if (!added && loader->ifexists) {
+ grn_obj *v = grn_expr_get_var_by_offset(ctx, loader->ifexists, 0);
+ grn_obj *result;
+ unsigned int result_boolean;
+ GRN_RECORD_SET(ctx, v, id);
+ result = grn_expr_exec(ctx, loader->ifexists, 0);
+ GRN_TRUEP(ctx, result, result_boolean);
+ if (!result_boolean) { id = 0; }
+ }
+ return id;
+}
+
+static void
+set_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grn_obj *vector)
+{
+ int n = GRN_UINT32_VALUE(vector);
+ grn_obj buf, *v = vector + 1;
+ grn_id range_id;
+ grn_obj *range;
+
+ range_id = DB_OBJ(column)->range;
+ range = grn_ctx_at(ctx, range_id);
+ if (GRN_OBJ_TABLEP(range)) {
+ GRN_RECORD_INIT(&buf, GRN_OBJ_VECTOR, range_id);
+ while (n--) {
+ grn_bool cast_failed = GRN_FALSE;
+ grn_obj record, *element = v;
+ if (range_id != element->header.domain) {
+ GRN_RECORD_INIT(&record, 0, range_id);
+ if (grn_obj_cast(ctx, element, &record, GRN_TRUE)) {
+ cast_failed = GRN_TRUE;
+ ERR_CAST(column, range, element);
+ }
+ element = &record;
+ }
+ if (!cast_failed) {
+ GRN_UINT32_PUT(ctx, &buf, GRN_RECORD_VALUE(element));
+ }
+ if (element == &record) { GRN_OBJ_FIN(ctx, element); }
+ v = values_next(ctx, v);
+ }
+ } else {
+ if (((struct _grn_type *)range)->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ GRN_TEXT_INIT(&buf, GRN_OBJ_VECTOR);
+ while (n--) {
+ if (v->header.domain == GRN_DB_TEXT) {
+ grn_bool cast_failed = GRN_FALSE;
+ grn_obj casted_element, *element = v;
+ if (range_id != element->header.domain) {
+ GRN_OBJ_INIT(&casted_element, GRN_BULK, 0, range_id);
+ if (grn_obj_cast(ctx, element, &casted_element, GRN_TRUE)) {
+ cast_failed = GRN_TRUE;
+ ERR_CAST(column, range, element);
+ }
+ element = &casted_element;
+ }
+ if (!cast_failed) {
+ grn_vector_add_element(ctx, &buf,
+ GRN_TEXT_VALUE(element),
+ GRN_TEXT_LEN(element), 0,
+ element->header.domain);
+ }
+ if (element == &casted_element) { GRN_OBJ_FIN(ctx, element); }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "bad syntax.");
+ }
+ v = values_next(ctx, v);
+ }
+ } else {
+ grn_id value_size = ((grn_db_obj *)range)->range;
+ GRN_VALUE_FIX_SIZE_INIT(&buf, GRN_OBJ_VECTOR, range_id);
+ while (n--) {
+ grn_bool cast_failed = GRN_FALSE;
+ grn_obj casted_element, *element = v;
+ if (range_id != element->header.domain) {
+ GRN_OBJ_INIT(&casted_element, GRN_BULK, 0, range_id);
+ if (grn_obj_cast(ctx, element, &casted_element, GRN_TRUE)) {
+ cast_failed = GRN_TRUE;
+ ERR_CAST(column, range, element);
+ }
+ element = &casted_element;
+ }
+ if (!cast_failed) {
+ grn_bulk_write(ctx, &buf, GRN_TEXT_VALUE(element), value_size);
+ }
+ if (element == &casted_element) { GRN_OBJ_FIN(ctx, element); }
+ v = values_next(ctx, v);
+ }
+ }
+ }
+ grn_obj_set_value(ctx, column, id, &buf, GRN_OBJ_SET);
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static void
+set_weight_vector(grn_ctx *ctx, grn_obj *column, grn_id id, grn_obj *index_value)
+{
+ if (!GRN_OBJ_WEIGHT_VECTOR_COLUMNP(column)) {
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ column_name_size = grn_obj_name(ctx, column, column_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "<%.*s>: columns except weight vector column don't support object value",
+ column_name_size, column_name);
+ return;
+ }
+
+ {
+ unsigned int i, n;
+ grn_obj vector;
+ grn_obj weight_buffer;
+
+ n = GRN_UINT32_VALUE(index_value);
+ GRN_TEXT_INIT(&vector, GRN_OBJ_VECTOR);
+ GRN_UINT32_INIT(&weight_buffer, 0);
+ for (i = 0; i < n; i += 2) {
+ grn_rc rc;
+ grn_obj *key, *weight;
+
+ key = index_value + 1 + i;
+ weight = key + 1;
+
+ GRN_BULK_REWIND(&weight_buffer);
+ rc = grn_obj_cast(ctx, weight, &weight_buffer, GRN_TRUE);
+ if (rc != GRN_SUCCESS) {
+ grn_obj *range;
+ range = grn_ctx_at(ctx, weight_buffer.header.domain);
+ ERR_CAST(column, range, weight);
+ grn_obj_unlink(ctx, range);
+ break;
+ }
+ grn_vector_add_element(ctx, &vector,
+ GRN_BULK_HEAD(key), GRN_BULK_VSIZE(key),
+ GRN_UINT32_VALUE(&weight_buffer),
+ key->header.domain);
+ }
+ grn_obj_set_value(ctx, column, id, &vector, GRN_OBJ_SET);
+ GRN_OBJ_FIN(ctx, &vector);
+ }
+}
+
+static inline int
+name_equal(const char *p, unsigned int size, const char *name)
+{
+ if (strlen(name) != size) { return 0; }
+ if (*p != GRN_DB_PSEUDO_COLUMN_PREFIX) { return 0; }
+ return !memcmp(p + 1, name + 1, size - 1);
+}
+
+static void
+report_set_column_value_failure(grn_ctx *ctx,
+ grn_obj *key,
+ const char *column_name,
+ unsigned int column_name_size,
+ grn_obj *column_value)
+{
+ grn_obj key_inspected, column_value_inspected;
+
+ GRN_TEXT_INIT(&key_inspected, 0);
+ GRN_TEXT_INIT(&column_value_inspected, 0);
+ limited_size_inspect(ctx, &key_inspected, key);
+ limited_size_inspect(ctx, &column_value_inspected, column_value);
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "[table][load] failed to set column value: %s: "
+ "key: <%.*s>, column: <%.*s>, value: <%.*s>",
+ ctx->errbuf,
+ (int)GRN_TEXT_LEN(&key_inspected),
+ GRN_TEXT_VALUE(&key_inspected),
+ column_name_size,
+ column_name,
+ (int)GRN_TEXT_LEN(&column_value_inspected),
+ GRN_TEXT_VALUE(&column_value_inspected));
+ GRN_OBJ_FIN(ctx, &key_inspected);
+ GRN_OBJ_FIN(ctx, &column_value_inspected);
+}
+
+static void
+bracket_close(grn_ctx *ctx, grn_loader *loader)
+{
+ grn_obj *value, *col, *ve;
+ grn_id id = GRN_ID_NIL;
+ grn_obj *key_value = NULL;
+ grn_obj **cols = (grn_obj **)GRN_BULK_HEAD(&loader->columns);
+ uint32_t begin, ndata, ncols = GRN_BULK_VSIZE(&loader->columns) / sizeof(grn_obj *);
+ GRN_UINT32_POP(&loader->level, begin);
+ value = ((grn_obj *)(GRN_TEXT_VALUE(&loader->values))) + begin;
+ ve = ((grn_obj *)(GRN_TEXT_VALUE(&loader->values))) + loader->values_size;
+ GRN_ASSERT(value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET);
+ GRN_UINT32_SET(ctx, value, loader->values_size - begin - 1);
+ value++;
+ if (GRN_BULK_VSIZE(&loader->level) <= sizeof(uint32_t) * loader->emit_level) {
+ ndata = values_len(ctx, value, ve);
+ if (loader->table) {
+ switch (loader->table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ if (loader->key_offset != -1 && ndata == ncols + 1) {
+ key_value = value + loader->key_offset;
+ id = loader_add(ctx, key_value);
+ } else if (loader->key_offset == -1) {
+ int i = 0;
+ grn_obj *key_column_name = NULL;
+ while (ndata--) {
+ char *column_name = GRN_TEXT_VALUE(value);
+ unsigned int column_name_size = GRN_TEXT_LEN(value);
+ if (value->header.domain == GRN_DB_TEXT &&
+ (name_equal(column_name, column_name_size,
+ GRN_COLUMN_NAME_KEY) ||
+ name_equal(column_name, column_name_size,
+ GRN_COLUMN_NAME_ID))) {
+ if (loader->key_offset != -1) {
+ GRN_LOG(ctx, GRN_LOG_ERROR,
+ "duplicated key columns: <%.*s> at %d and <%.*s> at %i",
+ (int)GRN_TEXT_LEN(key_column_name),
+ GRN_TEXT_VALUE(key_column_name),
+ loader->key_offset,
+ column_name_size, column_name, i);
+ return;
+ }
+ key_column_name = value;
+ loader->key_offset = i;
+ } else {
+ col = grn_obj_column(ctx, loader->table,
+ column_name, column_name_size);
+ if (!col) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "nonexistent column: <%.*s>",
+ column_name_size, column_name);
+ return;
+ }
+ GRN_PTR_PUT(ctx, &loader->columns, col);
+ }
+ value++;
+ i++;
+ }
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ if ((GRN_BULK_VSIZE(&loader->level)) > 0 &&
+ (ndata == 0 || ndata == ncols)) {
+ id = grn_table_add(ctx, loader->table, NULL, 0, NULL);
+ } else if (!ncols) {
+ while (ndata--) {
+ if (value->header.domain == GRN_DB_TEXT) {
+ char *column_name = GRN_TEXT_VALUE(value);
+ unsigned int column_name_size = GRN_TEXT_LEN(value);
+ col = grn_obj_column(ctx, loader->table,
+ column_name, column_name_size);
+ if (!col) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "nonexistent column: <%.*s>",
+ column_name_size, column_name);
+ return;
+ }
+ GRN_PTR_PUT(ctx, &loader->columns, col);
+ value++;
+ } else {
+ grn_obj buffer;
+ GRN_TEXT_INIT(&buffer, 0);
+ grn_inspect(ctx, &buffer, value);
+ ERR(GRN_INVALID_ARGUMENT,
+ "column name must be string: <%.*s>",
+ (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));
+ GRN_OBJ_FIN(ctx, &buffer);
+ return;
+ }
+ }
+ }
+ break;
+ default :
+ break;
+ }
+ if (id) {
+ int i = 0;
+ while (ndata--) {
+ grn_obj *column;
+ if ((loader->table->header.type == GRN_TABLE_HASH_KEY ||
+ loader->table->header.type == GRN_TABLE_PAT_KEY ||
+ loader->table->header.type == GRN_TABLE_DAT_KEY) &&
+ i == loader->key_offset) {
+ /* skip this value, because it's already used as key value */
+ value = values_next(ctx, value);
+ i++;
+ continue;
+ }
+
+ column = *cols;
+ if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
+ set_vector(ctx, column, id, value);
+ } else if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
+ set_weight_vector(ctx, column, id, value);
+ } else {
+ grn_obj_set_value(ctx, column, id, value, GRN_OBJ_SET);
+ }
+ if (ctx->rc != GRN_SUCCESS) {
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int column_name_size;
+ column_name_size = grn_obj_name(ctx, column, column_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ report_set_column_value_failure(ctx, key_value,
+ column_name, column_name_size,
+ value);
+ ERRCLR(ctx);
+ }
+ value = values_next(ctx, value);
+ cols++;
+ i++;
+ }
+ if (loader->each) {
+ grn_obj *v = grn_expr_get_var_by_offset(ctx, loader->each, 0);
+ GRN_RECORD_SET(ctx, v, id);
+ grn_expr_exec(ctx, loader->each, 0);
+ }
+ loader->nrecords++;
+ }
+ }
+ loader->values_size = begin;
+ }
+}
+
+static void
+brace_close(grn_ctx *ctx, grn_loader *loader)
+{
+ uint32_t begin;
+ grn_obj *key_value = NULL;
+ grn_obj *value, *ve;
+ grn_id id = GRN_ID_NIL;
+ GRN_UINT32_POP(&loader->level, begin);
+ value = ((grn_obj *)(GRN_TEXT_VALUE(&loader->values))) + begin;
+ ve = ((grn_obj *)(GRN_TEXT_VALUE(&loader->values))) + loader->values_size;
+ GRN_ASSERT(value->header.domain == GRN_JSON_LOAD_OPEN_BRACE);
+ GRN_UINT32_SET(ctx, value, loader->values_size - begin - 1);
+ value++;
+ if (GRN_BULK_VSIZE(&loader->level) <= sizeof(uint32_t) * loader->emit_level) {
+ if (loader->table) {
+ switch (loader->table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ {
+ grn_obj *v, *key_column_name = NULL;
+ for (v = value; v + 1 < ve; v = values_next(ctx, v)) {
+ char *column_name = GRN_TEXT_VALUE(v);
+ unsigned int column_name_size = GRN_TEXT_LEN(v);
+ if (v->header.domain == GRN_DB_TEXT &&
+ (name_equal(column_name, column_name_size,
+ GRN_COLUMN_NAME_KEY) ||
+ name_equal(column_name, column_name_size,
+ GRN_COLUMN_NAME_ID))) {
+ if (key_column_name) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "duplicated key columns: %.*s and %.*s",
+ (int)GRN_TEXT_LEN(key_column_name),
+ GRN_TEXT_VALUE(key_column_name),
+ column_name_size, column_name);
+ return;
+ }
+ key_column_name = value;
+ v++;
+ key_value = v;
+ id = loader_add(ctx, key_value);
+ } else {
+ v = values_next(ctx, v);
+ }
+ }
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ id = grn_table_add(ctx, loader->table, NULL, 0, NULL);
+ break;
+ default :
+ break;
+ }
+ if (id) {
+ grn_obj *col;
+ const char *name;
+ unsigned int name_size;
+ while (value + 1 < ve) {
+ if (value->header.domain != GRN_DB_TEXT) { break; /* error */ }
+ name = GRN_TEXT_VALUE(value);
+ name_size = GRN_TEXT_LEN(value);
+ col = grn_obj_column(ctx, loader->table, name, name_size);
+ value++;
+ /* auto column create
+ if (!col) {
+ if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
+ grn_obj *v = value + 1;
+ col = grn_column_create(ctx, loader->table, name, name_size,
+ NULL, GRN_OBJ_PERSISTENT|GRN_OBJ_COLUMN_VECTOR,
+ grn_ctx_at(ctx, v->header.domain));
+ } else {
+ col = grn_column_create(ctx, loader->table, name, name_size,
+ NULL, GRN_OBJ_PERSISTENT,
+ grn_ctx_at(ctx, value->header.domain));
+ }
+ }
+ */
+ if (col) {
+ if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACKET) {
+ set_vector(ctx, col, id, value);
+ } else if (value->header.domain == GRN_JSON_LOAD_OPEN_BRACE) {
+ set_weight_vector(ctx, col, id, value);
+ } else {
+ grn_obj_set_value(ctx, col, id, value, GRN_OBJ_SET);
+ }
+ if (ctx->rc != GRN_SUCCESS) {
+ report_set_column_value_failure(ctx, key_value,
+ name, name_size, value);
+ ERRCLR(ctx);
+ }
+ grn_obj_unlink(ctx, col);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "invalid column('%.*s')", (int)name_size, name);
+ }
+ value = values_next(ctx, value);
+ }
+ if (loader->each) {
+ grn_obj *v = grn_expr_get_var_by_offset(ctx, loader->each, 0);
+ GRN_RECORD_SET(ctx, v, id);
+ grn_expr_exec(ctx, loader->each, 0);
+ }
+ loader->nrecords++;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "neither _key nor _id is assigned");
+ }
+ }
+ loader->values_size = begin;
+ }
+}
+
+#define JSON_READ_OPEN_BRACKET() do {\
+ GRN_UINT32_PUT(ctx, &loader->level, loader->values_size);\
+ values_add(ctx, loader);\
+ loader->last->header.domain = GRN_JSON_LOAD_OPEN_BRACKET;\
+ loader->stat = GRN_LOADER_TOKEN;\
+ str++;\
+} while (0)
+
+#define JSON_READ_OPEN_BRACE() do {\
+ GRN_UINT32_PUT(ctx, &loader->level, loader->values_size);\
+ values_add(ctx, loader);\
+ loader->last->header.domain = GRN_JSON_LOAD_OPEN_BRACE;\
+ loader->stat = GRN_LOADER_TOKEN;\
+ str++;\
+} while (0)
+
+static void
+json_read(grn_ctx *ctx, grn_loader *loader, const char *str, unsigned int str_len)
+{
+ const char *const beg = str;
+ char c;
+ int len;
+ const char *se = str + str_len;
+ while (str < se) {
+ c = *str;
+ switch (loader->stat) {
+ case GRN_LOADER_BEGIN :
+ if ((len = grn_isspace(str, ctx->encoding))) {
+ str += len;
+ c = *str;
+ continue;
+ }
+ switch (c) {
+ case '[' :
+ JSON_READ_OPEN_BRACKET();
+ break;
+ case '{' :
+ JSON_READ_OPEN_BRACE();
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT,
+ "JSON must start with '[' or '{': <%.*s>", str_len, beg);
+ loader->stat = GRN_LOADER_END;
+ break;
+ }
+ break;
+ case GRN_LOADER_TOKEN :
+ if ((len = grn_isspace(str, ctx->encoding))) {
+ str += len;
+ c = *str;
+ continue;
+ }
+ switch (c) {
+ case '"' :
+ loader->stat = GRN_LOADER_STRING;
+ values_add(ctx, loader);
+ str++;
+ break;
+ case '[' :
+ JSON_READ_OPEN_BRACKET();
+ break;
+ case '{' :
+ JSON_READ_OPEN_BRACE();
+ break;
+ case ':' :
+ str++;
+ break;
+ case ',' :
+ str++;
+ break;
+ case ']' :
+ bracket_close(ctx, loader);
+ loader->stat = GRN_BULK_VSIZE(&loader->level) ? GRN_LOADER_TOKEN : GRN_LOADER_END;
+ str++;
+ break;
+ case '}' :
+ brace_close(ctx, loader);
+ loader->stat = GRN_BULK_VSIZE(&loader->level) ? GRN_LOADER_TOKEN : GRN_LOADER_END;
+ str++;
+ break;
+ case '+' : case '-' : case '0' : case '1' : case '2' : case '3' :
+ case '4' : case '5' : case '6' : case '7' : case '8' : case '9' :
+ loader->stat = GRN_LOADER_NUMBER;
+ values_add(ctx, loader);
+ break;
+ default :
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('_' == c)) {
+ loader->stat = GRN_LOADER_SYMBOL;
+ values_add(ctx, loader);
+ } else {
+ if ((len = grn_charlen(ctx, str, se))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ignored invalid char('%c') at", c);
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%.*s", (int)(str - beg) + len, beg);
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%*s", (int)(str - beg) + 1, "^");
+ str += len;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ignored invalid char(\\x%.2x) after", c);
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%.*s", (int)(str - beg), beg);
+ str = se;
+ }
+ }
+ break;
+ }
+ break;
+ case GRN_LOADER_SYMBOL :
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') ||
+ ('0' <= c && c <= '9') || ('_' == c)) {
+ GRN_TEXT_PUTC(ctx, loader->last, c);
+ str++;
+ } else {
+ char *v = GRN_TEXT_VALUE(loader->last);
+ switch (*v) {
+ case 'n' :
+ if (GRN_TEXT_LEN(loader->last) == 4 && !memcmp(v, "null", 4)) {
+ loader->last->header.domain = GRN_DB_VOID;
+ GRN_BULK_REWIND(loader->last);
+ }
+ break;
+ case 't' :
+ if (GRN_TEXT_LEN(loader->last) == 4 && !memcmp(v, "true", 4)) {
+ loader->last->header.domain = GRN_DB_BOOL;
+ GRN_BOOL_SET(ctx, loader->last, GRN_TRUE);
+ }
+ break;
+ case 'f' :
+ if (GRN_TEXT_LEN(loader->last) == 5 && !memcmp(v, "false", 5)) {
+ loader->last->header.domain = GRN_DB_BOOL;
+ GRN_BOOL_SET(ctx, loader->last, GRN_FALSE);
+ }
+ break;
+ default :
+ break;
+ }
+ loader->stat = GRN_BULK_VSIZE(&loader->level) ? GRN_LOADER_TOKEN : GRN_LOADER_END;
+ }
+ break;
+ case GRN_LOADER_NUMBER :
+ switch (c) {
+ case '+' : case '-' : case '.' : case 'e' : case 'E' :
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ GRN_TEXT_PUTC(ctx, loader->last, c);
+ str++;
+ break;
+ default :
+ {
+ const char *cur, *str = GRN_BULK_HEAD(loader->last);
+ const char *str_end = GRN_BULK_CURR(loader->last);
+ int64_t i = grn_atoll(str, str_end, &cur);
+ if (cur == str_end) {
+ loader->last->header.domain = GRN_DB_INT64;
+ GRN_INT64_SET(ctx, loader->last, i);
+ } else if (cur != str) {
+ double d;
+ char *end;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUT(ctx, &buf, str, GRN_BULK_VSIZE(loader->last));
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ errno = 0;
+ d = strtod(GRN_TEXT_VALUE(&buf), &end);
+ if (!errno && end + 1 == GRN_BULK_CURR(&buf)) {
+ loader->last->header.domain = GRN_DB_FLOAT;
+ GRN_FLOAT_SET(ctx, loader->last, d);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ }
+ loader->stat = GRN_BULK_VSIZE(&loader->level) ? GRN_LOADER_TOKEN : GRN_LOADER_END;
+ break;
+ }
+ break;
+ case GRN_LOADER_STRING :
+ switch (c) {
+ case '\\' :
+ loader->stat = GRN_LOADER_STRING_ESC;
+ str++;
+ break;
+ case '"' :
+ str++;
+ loader->stat = GRN_BULK_VSIZE(&loader->level) ? GRN_LOADER_TOKEN : GRN_LOADER_END;
+ /*
+ *(GRN_BULK_CURR(loader->last)) = '\0';
+ GRN_LOG(ctx, GRN_LOG_ALERT, "read str(%s)", GRN_TEXT_VALUE(loader->last));
+ */
+ break;
+ default :
+ if ((len = grn_charlen(ctx, str, se))) {
+ GRN_TEXT_PUT(ctx, loader->last, str, len);
+ str += len;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ignored invalid char(\\x%.2x) after", c);
+ GRN_LOG(ctx, GRN_LOG_ERROR, "%.*s", (int)(str - beg), beg);
+ str = se;
+ }
+ break;
+ }
+ break;
+ case GRN_LOADER_STRING_ESC :
+ switch (c) {
+ case 'b' :
+ GRN_TEXT_PUTC(ctx, loader->last, '\b');
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ case 'f' :
+ GRN_TEXT_PUTC(ctx, loader->last, '\f');
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ case 'n' :
+ GRN_TEXT_PUTC(ctx, loader->last, '\n');
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ case 'r' :
+ GRN_TEXT_PUTC(ctx, loader->last, '\r');
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ case 't' :
+ GRN_TEXT_PUTC(ctx, loader->last, '\t');
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ case 'u' :
+ loader->stat = GRN_LOADER_UNICODE0;
+ break;
+ default :
+ GRN_TEXT_PUTC(ctx, loader->last, c);
+ loader->stat = GRN_LOADER_STRING;
+ break;
+ }
+ str++;
+ break;
+ case GRN_LOADER_UNICODE0 :
+ switch (c) {
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ loader->unichar = (c - '0') * 0x1000;
+ break;
+ case 'a' : case 'b' : case 'c' : case 'd' : case 'e' : case 'f' :
+ loader->unichar = (c - 'a' + 10) * 0x1000;
+ break;
+ case 'A' : case 'B' : case 'C' : case 'D' : case 'E' : case 'F' :
+ loader->unichar = (c - 'A' + 10) * 0x1000;
+ break;
+ default :
+ ;// todo : error
+ }
+ loader->stat = GRN_LOADER_UNICODE1;
+ str++;
+ break;
+ case GRN_LOADER_UNICODE1 :
+ switch (c) {
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ loader->unichar += (c - '0') * 0x100;
+ break;
+ case 'a' : case 'b' : case 'c' : case 'd' : case 'e' : case 'f' :
+ loader->unichar += (c - 'a' + 10) * 0x100;
+ break;
+ case 'A' : case 'B' : case 'C' : case 'D' : case 'E' : case 'F' :
+ loader->unichar += (c - 'A' + 10) * 0x100;
+ break;
+ default :
+ ;// todo : error
+ }
+ loader->stat = GRN_LOADER_UNICODE2;
+ str++;
+ break;
+ case GRN_LOADER_UNICODE2 :
+ switch (c) {
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ loader->unichar += (c - '0') * 0x10;
+ break;
+ case 'a' : case 'b' : case 'c' : case 'd' : case 'e' : case 'f' :
+ loader->unichar += (c - 'a' + 10) * 0x10;
+ break;
+ case 'A' : case 'B' : case 'C' : case 'D' : case 'E' : case 'F' :
+ loader->unichar += (c - 'A' + 10) * 0x10;
+ break;
+ default :
+ ;// todo : error
+ }
+ loader->stat = GRN_LOADER_UNICODE3;
+ str++;
+ break;
+ case GRN_LOADER_UNICODE3 :
+ switch (c) {
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ loader->unichar += (c - '0');
+ break;
+ case 'a' : case 'b' : case 'c' : case 'd' : case 'e' : case 'f' :
+ loader->unichar += (c - 'a' + 10);
+ break;
+ case 'A' : case 'B' : case 'C' : case 'D' : case 'E' : case 'F' :
+ loader->unichar += (c - 'A' + 10);
+ break;
+ default :
+ ;// todo : error
+ }
+ {
+ uint32_t u = loader->unichar;
+ if (u < 0x80) {
+ GRN_TEXT_PUTC(ctx, loader->last, u);
+ } else {
+ if (u < 0x800) {
+ GRN_TEXT_PUTC(ctx, loader->last, ((u >> 6) & 0x1f) | 0xc0);
+ } else {
+ GRN_TEXT_PUTC(ctx, loader->last, (u >> 12) | 0xe0);
+ GRN_TEXT_PUTC(ctx, loader->last, ((u >> 6) & 0x3f) | 0x80);
+ }
+ GRN_TEXT_PUTC(ctx, loader->last, (u & 0x3f) | 0x80);
+ }
+ }
+ loader->stat = GRN_LOADER_STRING;
+ str++;
+ break;
+ case GRN_LOADER_END :
+ str = se;
+ break;
+ }
+ }
+}
+
+#undef JSON_READ_OPEN_BRACKET
+#undef JSON_READ_OPEN_BRACE
+
+static grn_rc
+parse_load_columns(grn_ctx *ctx, grn_obj *table,
+ const char *str, unsigned int str_size, grn_obj *res)
+{
+ const char *p = (char *)str, *q, *r, *pe = p + str_size, *tokbuf[256];
+ while (p < pe) {
+ int i, n = tokenize(p, pe - p, tokbuf, 256, &q);
+ for (i = 0; i < n; i++) {
+ grn_obj *col;
+ r = tokbuf[i];
+ while (p < r && (' ' == *p || ',' == *p)) { p++; }
+ col = grn_obj_column(ctx, table, p, r - p);
+ if (!col) {
+ ERR(GRN_INVALID_ARGUMENT, "nonexistent column: <%.*s>", (int)(r - p), p);
+ goto exit;
+ }
+ GRN_PTR_PUT(ctx, res, col);
+ p = r;
+ }
+ p = q;
+ }
+exit:
+ return ctx->rc;
+}
+
+static grn_com_addr *addr;
+
+void
+grn_load_(grn_ctx *ctx, grn_content_type input_type,
+ const char *table, unsigned int table_len,
+ const char *columns, unsigned int columns_len,
+ const char *values, unsigned int values_len,
+ const char *ifexists, unsigned int ifexists_len,
+ const char *each, unsigned int each_len,
+ uint32_t emit_level)
+{
+ grn_loader *loader;
+ loader = &ctx->impl->loader;
+ loader->emit_level = emit_level;
+ if (ctx->impl->edge) {
+ grn_edge *edge = grn_edges_add_communicator(ctx, addr);
+ grn_obj *msg = grn_msg_open(ctx, edge->com, &ctx->impl->edge->send_old);
+ /* build msg */
+ grn_edge_dispatch(ctx, edge, msg);
+ }
+ if (table && table_len) {
+ grn_ctx_loader_clear(ctx);
+ loader->input_type = input_type;
+ if (grn_db_check_name(ctx, table, table_len)) {
+ GRN_DB_CHECK_NAME_ERR("[table][load]", table, table_len);
+ loader->stat = GRN_LOADER_END;
+ return;
+ }
+ loader->table = grn_ctx_get(ctx, table, table_len);
+ if (!loader->table) {
+ ERR(GRN_INVALID_ARGUMENT, "nonexistent table: <%.*s>", table_len, table);
+ loader->stat = GRN_LOADER_END;
+ return;
+ }
+ if (loader->table && columns && columns_len) {
+ int i, n_columns;
+ grn_obj parsed_columns;
+
+ GRN_PTR_INIT(&parsed_columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ if (parse_load_columns(ctx, loader->table, columns, columns_len,
+ &parsed_columns)) {
+ loader->stat = GRN_LOADER_END;
+ return;
+ }
+ n_columns = GRN_BULK_VSIZE(&parsed_columns) / sizeof(grn_obj *);
+ for (i = 0; i < n_columns; i++) {
+ grn_obj *column;
+ column = GRN_PTR_VALUE_AT(&parsed_columns, i);
+ if (column->header.type == GRN_ACCESSOR &&
+ ((grn_accessor *)column)->action == GRN_ACCESSOR_GET_KEY) {
+ loader->key_offset = i;
+ grn_obj_unlink(ctx, column);
+ } else {
+ GRN_PTR_PUT(ctx, &loader->columns, column);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &parsed_columns);
+ }
+ if (ifexists && ifexists_len) {
+ grn_obj *v;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, loader->table, loader->ifexists, v);
+ if (loader->ifexists && v) {
+ grn_expr_parse(ctx, loader->ifexists, ifexists, ifexists_len,
+ NULL, GRN_OP_EQUAL, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE);
+ }
+ }
+ if (each && each_len) {
+ grn_obj *v;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, loader->table, loader->each, v);
+ if (loader->each && v) {
+ grn_expr_parse(ctx, loader->each, each, each_len,
+ NULL, GRN_OP_EQUAL, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE);
+ }
+ }
+ } else {
+ if (!loader->table) {
+ ERR(GRN_INVALID_ARGUMENT, "mandatory \"table\" parameter is absent");
+ loader->stat = GRN_LOADER_END;
+ return;
+ }
+ input_type = loader->input_type;
+ }
+ switch (input_type) {
+ case GRN_CONTENT_JSON :
+ json_read(ctx, loader, values, values_len);
+ break;
+ case GRN_CONTENT_NONE :
+ case GRN_CONTENT_TSV :
+ case GRN_CONTENT_XML :
+ case GRN_CONTENT_MSGPACK :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "unsupported input_type");
+ // todo
+ break;
+ }
+}
+
+grn_rc
+grn_load(grn_ctx *ctx, grn_content_type input_type,
+ const char *table, unsigned int table_len,
+ const char *columns, unsigned int columns_len,
+ const char *values, unsigned int values_len,
+ const char *ifexists, unsigned int ifexists_len,
+ const char *each, unsigned int each_len)
+{
+ if (!ctx || !ctx->impl) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return ctx->rc;
+ }
+ GRN_API_ENTER;
+ grn_load_(ctx, input_type, table, table_len,
+ columns, columns_len, values, values_len,
+ ifexists, ifexists_len, each, each_len, 1);
+ GRN_API_RETURN(ctx->rc);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/db.h b/storage/mroonga/vendor/groonga/lib/db.h
new file mode 100644
index 00000000000..f2f95560b08
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/db.h
@@ -0,0 +1,482 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_DB_H
+#define GRN_DB_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_STORE_H
+#include "store.h"
+#endif /* GRN_STORE_H */
+
+#include <groonga/token_filter.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GRN_DB_DELIMITER '.'
+#define GRN_DB_PSEUDO_COLUMN_PREFIX '_'
+
+#define GRN_N_RESERVED_TYPES 256
+
+typedef struct {
+ int score;
+ int n_subrecs;
+ int subrecs[1];
+} grn_rset_recinfo;
+
+typedef struct {
+ grn_id rid;
+ uint32_t sid;
+ uint32_t pos;
+} grn_rset_posinfo;
+
+#define GRN_RSET_UTIL_BIT (0x80000000)
+
+#define GRN_RSET_SCORE_SIZE (sizeof(int))
+
+#define GRN_RSET_N_SUBRECS(ri) ((ri)->n_subrecs & ~GRN_RSET_UTIL_BIT)
+
+#define GRN_RSET_SUBRECS_CMP(a,b,dir) (((a) - (b))*(dir))
+#define GRN_RSET_SUBRECS_NTH(subrecs,size,n) \
+ ((int *)((byte *)subrecs + n * (GRN_RSET_SCORE_SIZE + size)))
+#define GRN_RSET_SUBRECS_COPY(subrecs,size,n,src) \
+ (memcpy(GRN_RSET_SUBRECS_NTH(subrecs, size, n), src, GRN_RSET_SCORE_SIZE + size))
+
+#define GRN_JSON_LOAD_OPEN_BRACKET 0x40000000
+#define GRN_JSON_LOAD_OPEN_BRACE 0x40000001
+
+typedef struct _grn_db grn_db;
+typedef struct _grn_proc grn_proc;
+
+struct _grn_db {
+ grn_db_obj obj;
+ grn_obj *keys;
+ grn_ja *specs;
+ grn_tiny_array values;
+ grn_critical_section lock;
+};
+
+typedef struct {
+ grn_obj_header header;
+ grn_id range;
+} grn_obj_spec;
+
+GRN_API grn_rc grn_db_close(grn_ctx *ctx, grn_obj *db);
+
+grn_obj *grn_db_keys(grn_obj *s);
+
+uint32_t grn_db_lastmod(grn_obj *s);
+
+grn_rc _grn_table_delete_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
+ grn_table_delete_optarg *optarg);
+
+grn_id grn_table_get_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value);
+grn_id grn_table_add_v(grn_ctx *ctx, grn_obj *table, const void *key, int key_size,
+ void **value, int *added);
+GRN_API grn_rc grn_table_get_info(grn_ctx *ctx, grn_obj *table, grn_obj_flags *flags,
+ grn_encoding *encoding, grn_obj **tokenizer,
+ grn_obj **normalizer,
+ grn_obj **token_filters);
+const char *_grn_table_key(grn_ctx *ctx, grn_obj *table, grn_id id, uint32_t *key_size);
+
+grn_rc grn_table_search(grn_ctx *ctx, grn_obj *table,
+ const void *key, uint32_t key_size,
+ grn_operator mode, grn_obj *res, grn_operator op);
+
+grn_id grn_table_next(grn_ctx *ctx, grn_obj *table, grn_id id);
+
+int grn_table_get_key2(grn_ctx *ctx, grn_obj *table, grn_id id, grn_obj *bulk);
+
+grn_table_cursor *grn_table_cursor_open_by_id(grn_ctx *ctx, grn_obj *table,
+ grn_id min, grn_id max, int flags);
+
+void grn_table_add_subrec(grn_obj *table, grn_rset_recinfo *ri, int score,
+ grn_rset_posinfo *pi, int dir);
+
+grn_obj *grn_obj_graft(grn_ctx *ctx, grn_obj *obj);
+
+grn_rc grn_column_name_(grn_ctx *ctx, grn_obj *obj, grn_obj *buf);
+
+
+typedef enum {
+ PROC_INIT = 0,
+ PROC_NEXT,
+ PROC_FIN
+} grn_proc_phase;
+
+struct _grn_type {
+ grn_db_obj obj;
+};
+
+#define GRN_TYPE_SIZE(type) ((type)->range)
+
+#define GRN_TABLE_SORT_GEO (0x02<<0)
+
+#define GRN_OBJ_TMP_OBJECT 0x80000000
+
+#define GRN_DB_OBJP(obj) \
+ (obj &&\
+ ((GRN_SNIP == ((grn_db_obj *)obj)->header.type) ||\
+ ((GRN_CURSOR_TABLE_HASH_KEY <= ((grn_db_obj *)obj)->header.type) &&\
+ (((grn_db_obj *)obj)->header.type <= GRN_COLUMN_INDEX))))
+
+#define GRN_OBJ_TABLEP(obj) \
+ (obj &&\
+ (GRN_TABLE_HASH_KEY <= ((grn_db_obj *)obj)->header.type) &&\
+ (((grn_db_obj *)obj)->header.type <= GRN_DB))
+
+#define GRN_OBJ_INDEX_COLUMNP(obj) \
+ (obj &&\
+ DB_OBJ(obj)->header.type == GRN_COLUMN_INDEX)
+
+#define GRN_OBJ_VECTOR_COLUMNP(obj) \
+ (obj &&\
+ DB_OBJ(obj)->header.type == GRN_COLUMN_VAR_SIZE &&\
+ (DB_OBJ(obj)->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR)
+
+#define GRN_OBJ_WEIGHT_VECTOR_COLUMNP(obj) \
+ (GRN_OBJ_VECTOR_COLUMNP(obj) &&\
+ (DB_OBJ(obj)->header.flags & GRN_OBJ_WITH_WEIGHT))
+
+typedef struct _grn_proc_ctx grn_proc_ctx;
+
+struct _grn_proc_ctx {
+ grn_user_data user_data;
+ grn_proc *proc;
+ grn_obj *caller;
+ // grn_obj *obj;
+ grn_hook *hooks;
+ grn_hook *currh;
+ grn_proc_phase phase;
+ unsigned short nargs;
+ unsigned short offset;
+ grn_user_data data[16];
+};
+
+struct _grn_proc {
+ grn_db_obj obj;
+ grn_obj name_buf;
+ grn_expr_var *vars;
+ uint32_t nvars;
+ /* -- compatible with grn_expr -- */
+ grn_proc_type type;
+ grn_proc_func *funcs[3];
+
+ grn_selector_func *selector;
+
+ union {
+ struct {
+ grn_token_filter_init_func *init;
+ grn_token_filter_filter_func *filter;
+ grn_token_filter_fin_func *fin;
+ } token_filter;
+ } callbacks;
+
+ void *user_data;
+
+ grn_id module;
+ // uint32_t nargs;
+ // uint32_t nresults;
+ // grn_obj results[16];
+};
+
+#define GRN_PROC_GET_VAR(name) (grn_proc_get_var(ctx, user_data, name, strlen(name)))
+#define GRN_PROC_GET_VAR_BY_OFFSET(offset) (grn_proc_get_var_by_offset(ctx, user_data, offset))
+#define GRN_PROC_GET_OR_ADD_VAR(name) (grn_proc_get_or_add_var(ctx, user_data, name, strlen(name)))
+#define GRN_PROC_ALLOC(domain, flags) (grn_proc_alloc(ctx, user_data, domain, flags))
+
+grn_obj *grn_proc_get_var(grn_ctx *ctx, grn_user_data *user_data,
+ const char *name, unsigned int name_size);
+
+GRN_API grn_obj *grn_proc_get_var_by_offset(grn_ctx *ctx, grn_user_data *user_data,
+ unsigned int offset);
+GRN_API grn_obj *grn_proc_get_or_add_var(grn_ctx *ctx, grn_user_data *user_data,
+ const char *name, unsigned int name_size);
+
+GRN_API grn_obj *grn_proc_alloc(grn_ctx *ctx, grn_user_data *user_data,
+ grn_id domain, grn_obj_flags flags);
+
+GRN_API grn_rc grn_proc_call(grn_ctx *ctx, grn_obj *proc,
+ int nargs, grn_obj *caller);
+
+grn_obj *grn_expr_get_or_add_var(grn_ctx *ctx, grn_obj *expr,
+ const char *name, unsigned int name_size);
+
+
+typedef struct _grn_accessor grn_accessor;
+
+struct _grn_accessor {
+ grn_obj_header header;
+ grn_id range;
+ /* -- compatible with grn_db_obj -- */
+ uint8_t action;
+ int offset;
+ grn_obj *obj;
+ grn_accessor *next;
+};
+
+enum {
+ GRN_ACCESSOR_VOID = 0,
+ GRN_ACCESSOR_GET_ID,
+ GRN_ACCESSOR_GET_KEY,
+ GRN_ACCESSOR_GET_VALUE,
+ GRN_ACCESSOR_GET_SCORE,
+ GRN_ACCESSOR_GET_NSUBRECS,
+ GRN_ACCESSOR_GET_COLUMN_VALUE,
+ GRN_ACCESSOR_GET_DB_OBJ,
+ GRN_ACCESSOR_LOOKUP,
+ GRN_ACCESSOR_FUNCALL
+};
+
+#define DB_OBJ(obj) ((grn_db_obj *)obj)
+
+GRN_API const char *grn_obj_get_value_(grn_ctx *ctx, grn_obj *obj, grn_id id, uint32_t *size);
+
+/* vector */
+
+/*
+typedef struct _grn_vector grn_vector;
+
+struct _grn_vector {
+ grn_obj str;
+ uint32_t *offsets;
+ int n_entries;
+};
+
+const char *grn_vector_fetch(grn_ctx *ctx, grn_obj *vector, int i, unsigned int *size);
+int grn_vector_delimit(grn_ctx *ctx, grn_obj *vector);
+int grn_vector_size(grn_ctx *ctx, grn_obj *vector);
+*/
+
+unsigned int grn_vector_pop_element(grn_ctx *ctx, grn_obj *vector,
+ const char **str, unsigned int *weight, grn_id *domain);
+
+grn_rc grn_vector_delimit(grn_ctx *ctx, grn_obj *v, unsigned int weight, grn_id domain);
+grn_rc grn_vector_decode(grn_ctx *ctx, grn_obj *v, const char *data, uint32_t data_size);
+
+
+grn_rc grn_db_init_builtin_types(grn_ctx *ctx);
+
+/* flag value used for grn_obj.header.flags */
+
+#define GRN_OBJ_CUSTOM_NAME (0x01<<12) /* db_obj which has custom name */
+
+#define GRN_OBJ_RESOLVE(ctx,obj) \
+ (((obj)->header.type != GRN_PTR)\
+ ? (obj)\
+ : GRN_PTR_VALUE(obj)\
+ ? GRN_PTR_VALUE(obj)\
+ : grn_ctx_at((ctx), (obj)->header.domain))
+
+/* expr */
+
+typedef struct _grn_expr grn_expr;
+
+#define GRN_EXPR_CODE_RELATIONAL_EXPRESSION (0x01)
+
+typedef struct {
+ grn_obj *value;
+ int32_t nargs;
+ grn_operator op;
+ uint8_t flags;
+ int32_t modify;
+} grn_expr_code;
+
+struct _grn_expr {
+ grn_db_obj obj;
+ grn_obj name_buf;
+ grn_expr_var *vars;
+ uint32_t nvars;
+ /* -- compatible with grn_proc -- */
+
+ uint16_t cacheable;
+ uint16_t taintable;
+ grn_obj *consts;
+ grn_obj *values;
+ grn_expr_code *codes;
+ uint32_t nconsts;
+ uint32_t values_curr;
+ uint32_t values_tail;
+ uint32_t values_size;
+ uint32_t codes_curr;
+ uint32_t codes_size;
+
+ grn_obj objs;
+ grn_obj dfi;
+ grn_expr_code *code0;
+};
+
+GRN_API grn_rc grn_expr_clear_vars(grn_ctx *ctx, grn_obj *expr);
+
+grn_rc grn_expr_parser_close(grn_ctx *ctx);
+GRN_API grn_rc grn_obj_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, grn_bool addp);
+
+/**
+ * grn_table_open:
+ * @name: é–‹ã“ã†ã¨ã™ã‚‹tableã®åå‰ã€‚NULLãªã‚‰ç„¡åtableã¨ãªã‚‹ã€‚
+ * @path: é–‹ã“ã†ã¨ã™ã‚‹tableã®ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ス。
+ *
+ * ctxãŒä½¿ç”¨ã™ã‚‹dbã®ä¸­ã§nameã«å¯¾å¿œä»˜ã‘ã¦æ—¢å­˜ã®tableã‚’é–‹ã。
+ * dbã«ç™»éŒ²ã•ã‚Œã¦ã„ã‚‹åå‰ä»˜ãã®æ°¸ç¶šãƒ†ãƒ¼ãƒ–ルを開ãå ´åˆã¯grn_ctx_get()を使用ã™ã‚‹ã®ãŒæœ›ã¾ã—ã„。
+ **/
+GRN_API grn_obj *grn_table_open(grn_ctx *ctx,
+ const char *name, unsigned int name_size,
+ const char *path);
+
+/**
+ * grn_column_open:
+ * @table: 対象table
+ * @name: カラムå
+ * @path: カラムを格ç´ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ス。
+ * @type: カラム値ã®åž‹ã€‚
+ *
+ * 既存ã®æ°¸ç¶šçš„ãªcolumnã‚’ã€tableã®nameã«å¯¾å¿œã™ã‚‹columnã¨ã—ã¦é–‹ã
+ * 永続dbã«ç™»éŒ²ã•ã‚Œã¦ã„る永続テーブルã®ã‚«ãƒ©ãƒ ã‚’é–‹ãå ´åˆã¯grn_ctx_get()を使用ã™ã‚‹ã®ãŒæœ›ã¾ã—ã„。
+ **/
+grn_obj *grn_column_open(grn_ctx *ctx, grn_obj *table,
+ const char *name, unsigned int name_size,
+ const char *path, grn_obj *type);
+
+/**
+ * grn_obj_path_rename:
+ * @old_path: 旧ファイルパス
+ * @new_path: 新ファイルパス
+ *
+ * old_pathã«è©²å½“ã™ã‚‹ã‚ªãƒ–ジェクトã®ãƒ•ã‚¡ã‚¤ãƒ«åã‚’new_pathã«å¤‰æ›´ã™ã‚‹ã€‚
+ **/
+grn_rc grn_obj_path_rename(grn_ctx *ctx, const char *old_path, const char *new_path);
+
+grn_rc grn_db_check_name(grn_ctx *ctx, const char *name, unsigned int name_size);
+#define GRN_DB_CHECK_NAME_ERR(error_context, name, name_size) \
+ ERR(GRN_INVALID_ARGUMENT,\
+ "%s name can't start with '%c' and contains only 0-9, A-Z, a-z, #, @, - or _: <%.*s>",\
+ error_context, GRN_DB_PSEUDO_COLUMN_PREFIX, name_size, name)
+
+#define GRN_DB_P(s) ((s) && ((grn_db *)s)->obj.header.type == GRN_DB)
+#define GRN_DB_PERSISTENT_P(s) (((grn_db *)s)->specs)
+
+#define GRN_OBJ_GET_VALUE_IMD (0xffffffffU)
+
+grn_rc grn_db_obj_init(grn_ctx *ctx, grn_obj *db, grn_id id, grn_db_obj *obj);
+
+#define GRN_ACCESSORP(obj) \
+ ((obj) && (((grn_obj *)(obj))->header.type == GRN_ACCESSOR))
+
+#define GRN_TRUEP(ctx, v, result) do {\
+ switch (v->header.type) { \
+ case GRN_BULK : \
+ switch (v->header.domain) { \
+ case GRN_DB_BOOL : \
+ result = GRN_BOOL_VALUE(v); \
+ break; \
+ case GRN_DB_INT32 : \
+ result = GRN_INT32_VALUE(v) != 0; \
+ break; \
+ case GRN_DB_UINT32 : \
+ result = GRN_UINT32_VALUE(v) != 0; \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double float_value; \
+ float_value = GRN_FLOAT_VALUE(v); \
+ result = (float_value < -DBL_EPSILON || \
+ DBL_EPSILON < float_value); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ result = GRN_TEXT_LEN(v) != 0; \
+ break; \
+ default : \
+ result = GRN_FALSE; \
+ break; \
+ } \
+ break; \
+ case GRN_VECTOR : \
+ result = GRN_TRUE; \
+ break; \
+ default : \
+ result = GRN_FALSE; \
+ break; \
+ } \
+} while (0)
+
+grn_id grn_obj_register(grn_ctx *ctx, grn_obj *db, const char *name, unsigned int name_size);
+int grn_obj_is_persistent(grn_ctx *ctx, grn_obj *obj);
+void grn_obj_spec_save(grn_ctx *ctx, grn_db_obj *obj);
+
+grn_rc grn_obj_reinit_for(grn_ctx *ctx, grn_obj *obj, grn_obj *domain_obj);
+
+#define GRN_INT32_POP(obj,value) do {\
+ if (GRN_BULK_VSIZE(obj) >= sizeof(int32_t)) {\
+ GRN_BULK_INCR_LEN((obj), -(sizeof(int32_t)));\
+ value = *(int32_t *)(GRN_BULK_CURR(obj));\
+ } else {\
+ value = 0;\
+ }\
+} while (0)
+
+#define GRN_UINT32_POP(obj,value) do {\
+ if (GRN_BULK_VSIZE(obj) >= sizeof(uint32_t)) {\
+ GRN_BULK_INCR_LEN((obj), -(sizeof(uint32_t)));\
+ value = *(uint32_t *)(GRN_BULK_CURR(obj));\
+ } else {\
+ value = 0;\
+ }\
+} while (0)
+
+void grn_expr_pack(grn_ctx *ctx, grn_obj *buf, grn_obj *expr);
+GRN_API grn_rc grn_expr_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *expr);
+grn_obj *grn_expr_open(grn_ctx *ctx, grn_obj_spec *spec, const uint8_t *p, const uint8_t *pe);
+
+GRN_API void grn_load_(grn_ctx *ctx, grn_content_type input_type,
+ const char *table, unsigned int table_len,
+ const char *columns, unsigned int columns_len,
+ const char *values, unsigned int values_len,
+ const char *ifexists, unsigned int ifexists_len,
+ const char *each, unsigned int each_len,
+ uint32_t emit_level);
+
+GRN_API grn_rc grn_table_group_with_range_gap(grn_ctx *ctx, grn_obj *table,
+ grn_table_sort_key *group_key,
+ grn_obj *result_set,
+ uint32_t range_gap);
+
+GRN_API grn_rc grn_column_filter(grn_ctx *ctx, grn_obj *column,
+ grn_operator op,
+ grn_obj *value, grn_obj *result_set,
+ grn_operator set_op);
+
+grn_rc grn_accessor_resolve(grn_ctx *ctx, grn_obj *accessor, int deep,
+ grn_obj *base_res, grn_obj **res,
+ grn_search_optarg *optarg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_DB_H */
diff --git a/storage/mroonga/vendor/groonga/lib/ecmascript.c b/storage/mroonga/vendor/groonga/lib/ecmascript.c
new file mode 100644
index 00000000000..e973f1281a4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ecmascript.c
@@ -0,0 +1,2248 @@
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is included that follows the "include" declaration
+** in the input grammar file. */
+#include <stdio.h>
+#line 4 "ecmascript.lemon"
+
+#define assert GRN_ASSERT
+#line 11 "ecmascript.c"
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/*
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands.
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+** YYCODETYPE is the data type used for storing terminal
+** and nonterminal numbers. "unsigned char" is
+** used if there are fewer than 250 terminals
+** and nonterminals. "int" is used otherwise.
+** YYNOCODE is a number of type YYCODETYPE which corresponds
+** to no legal terminal or nonterminal number. This
+** number is used to fill in empty slots of the hash
+** table.
+** YYFALLBACK If defined, this indicates that one or more tokens
+** have fall-back values which should be used if the
+** original value of the token will not parse.
+** YYACTIONTYPE is the data type used for storing terminal
+** and nonterminal numbers. "unsigned char" is
+** used if there are fewer than 250 rules and
+** states combined. "int" is used otherwise.
+** grn_expr_parserTOKENTYPE is the data type used for minor tokens given
+** directly to the parser from the tokenizer.
+** YYMINORTYPE is the data type used for all minor tokens.
+** This is typically a union of many types, one of
+** which is grn_expr_parserTOKENTYPE. The entry in the union
+** for base tokens is called "yy0".
+** YYSTACKDEPTH is the maximum depth of the parser's stack. If
+** zero the stack is dynamically sized using realloc()
+** grn_expr_parserARG_SDECL A static variable declaration for the %extra_argument
+** grn_expr_parserARG_PDECL A parameter declaration for the %extra_argument
+** grn_expr_parserARG_STORE Code to store %extra_argument into yypParser
+** grn_expr_parserARG_FETCH Code to extract %extra_argument from yypParser
+** YYNSTATE the combined number of states.
+** YYNRULE the number of rules in the grammar
+** YYERRORSYMBOL is the code number of the error symbol. If not
+** defined, then do no error processing.
+*/
+#define YYCODETYPE unsigned char
+#define YYNOCODE 113
+#define YYACTIONTYPE unsigned short int
+#define grn_expr_parserTOKENTYPE int
+typedef union {
+ int yyinit;
+ grn_expr_parserTOKENTYPE yy0;
+ void * yy81;
+} YYMINORTYPE;
+#ifndef YYSTACKDEPTH
+#define YYSTACKDEPTH 100
+#endif
+#define grn_expr_parserARG_SDECL efs_info *efsi ;
+#define grn_expr_parserARG_PDECL , efs_info *efsi
+#define grn_expr_parserARG_FETCH efs_info *efsi = yypParser->efsi
+#define grn_expr_parserARG_STORE yypParser->efsi = efsi
+#define YYNSTATE 223
+#define YYNRULE 131
+#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION (YYNSTATE+YYNRULE)
+
+/* The yyzerominor constant is used to initialize instances of
+** YYMINORTYPE objects to zero. */
+static const YYMINORTYPE yyzerominor = { 0 };
+
+/* Define the yytestcase() macro to be a no-op if is not already defined
+** otherwise.
+**
+** Applications can choose to define yytestcase() in the %include section
+** to a macro that can assist in verifying code coverage. For production
+** code the yytestcase() macro should be turned off. But it is useful
+** for testing.
+*/
+#ifndef yytestcase
+# define yytestcase(X)
+#endif
+
+
+/* Next are the tables used to determine what action to take based on the
+** current state and lookahead token. These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.
+**
+** Suppose the action integer is N. Then the action is determined as
+** follows
+**
+** 0 <= N < YYNSTATE Shift N. That is, push the lookahead
+** token onto the stack and goto state N.
+**
+** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE.
+**
+** N == YYNSTATE+YYNRULE A syntax error has occurred.
+**
+** N == YYNSTATE+YYNRULE+1 The parser accepts its input.
+**
+** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused
+** slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+** yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol. If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+** yy_action[] A single table containing all actions.
+** yy_lookahead[] A table containing the lookahead for each entry in
+** yy_action. Used to detect hash collisions.
+** yy_shift_ofst[] For each state, the offset into yy_action for
+** shifting terminals.
+** yy_reduce_ofst[] For each state, the offset into yy_action for
+** shifting non-terminals after a reduce.
+** yy_default[] Default action for each state.
+*/
+#define YY_ACTTAB_COUNT (1610)
+static const YYACTIONTYPE yy_action[] = {
+ /* 0 */ 2, 70, 52, 51, 50, 220, 1, 75, 79, 123,
+ /* 10 */ 4, 219, 69, 355, 76, 107, 78, 150, 219, 189,
+ /* 20 */ 192, 213, 84, 121, 120, 133, 132, 131, 115, 85,
+ /* 30 */ 98, 111, 99, 178, 209, 195, 73, 188, 184, 188,
+ /* 40 */ 184, 220, 71, 25, 79, 138, 9, 32, 69, 64,
+ /* 50 */ 63, 215, 33, 28, 67, 66, 65, 62, 61, 60,
+ /* 60 */ 59, 58, 57, 183, 182, 181, 180, 179, 3, 75,
+ /* 70 */ 113, 34, 6, 219, 189, 192, 213, 84, 121, 120,
+ /* 80 */ 133, 132, 131, 115, 85, 98, 111, 99, 178, 209,
+ /* 90 */ 195, 73, 187, 105, 188, 184, 220, 1, 28, 79,
+ /* 100 */ 123, 4, 122, 69, 31, 30, 189, 192, 213, 84,
+ /* 110 */ 121, 120, 133, 132, 131, 115, 85, 98, 111, 99,
+ /* 120 */ 178, 209, 195, 73, 139, 127, 188, 184, 36, 35,
+ /* 130 */ 110, 68, 56, 55, 8, 24, 129, 197, 196, 29,
+ /* 140 */ 64, 63, 54, 53, 124, 67, 66, 65, 62, 61,
+ /* 150 */ 60, 59, 58, 57, 183, 182, 181, 180, 179, 3,
+ /* 160 */ 7, 26, 165, 185, 83, 142, 127, 176, 189, 166,
+ /* 170 */ 213, 84, 121, 120, 133, 132, 131, 115, 85, 98,
+ /* 180 */ 111, 99, 178, 209, 195, 73, 173, 130, 188, 184,
+ /* 190 */ 11, 82, 81, 80, 77, 220, 71, 148, 79, 138,
+ /* 200 */ 9, 171, 69, 64, 63, 174, 28, 72, 67, 66,
+ /* 210 */ 65, 62, 61, 60, 59, 58, 57, 183, 182, 181,
+ /* 220 */ 180, 179, 3, 177, 7, 194, 193, 185, 83, 106,
+ /* 230 */ 126, 176, 189, 144, 213, 84, 121, 120, 133, 132,
+ /* 240 */ 131, 115, 85, 98, 111, 99, 178, 209, 195, 73,
+ /* 250 */ 164, 224, 188, 184, 141, 171, 23, 171, 10, 110,
+ /* 260 */ 143, 226, 191, 140, 221, 28, 218, 64, 63, 125,
+ /* 270 */ 356, 356, 67, 66, 65, 62, 61, 60, 59, 58,
+ /* 280 */ 57, 183, 182, 181, 180, 179, 3, 170, 7, 122,
+ /* 290 */ 217, 185, 83, 189, 192, 213, 84, 121, 120, 133,
+ /* 300 */ 132, 131, 115, 85, 98, 111, 99, 178, 209, 195,
+ /* 310 */ 73, 74, 216, 188, 184, 225, 49, 48, 47, 46,
+ /* 320 */ 45, 44, 43, 42, 41, 40, 39, 38, 37, 5,
+ /* 330 */ 149, 64, 63, 146, 222, 356, 67, 66, 65, 62,
+ /* 340 */ 61, 60, 59, 58, 57, 183, 182, 181, 180, 179,
+ /* 350 */ 3, 116, 356, 145, 356, 189, 192, 213, 84, 121,
+ /* 360 */ 120, 133, 132, 131, 115, 85, 98, 111, 99, 178,
+ /* 370 */ 209, 195, 73, 113, 356, 188, 184, 189, 192, 213,
+ /* 380 */ 84, 121, 120, 133, 132, 131, 115, 85, 98, 111,
+ /* 390 */ 99, 178, 209, 195, 73, 356, 356, 188, 184, 223,
+ /* 400 */ 356, 356, 81, 80, 77, 220, 71, 356, 79, 138,
+ /* 410 */ 9, 356, 69, 189, 162, 213, 84, 121, 120, 133,
+ /* 420 */ 132, 131, 115, 85, 98, 111, 99, 178, 209, 195,
+ /* 430 */ 73, 356, 7, 188, 184, 185, 83, 356, 356, 167,
+ /* 440 */ 109, 189, 144, 213, 84, 121, 120, 133, 132, 131,
+ /* 450 */ 115, 85, 98, 111, 99, 178, 209, 195, 73, 356,
+ /* 460 */ 7, 188, 184, 185, 83, 356, 356, 356, 356, 147,
+ /* 470 */ 356, 356, 356, 356, 356, 64, 63, 356, 356, 356,
+ /* 480 */ 67, 66, 65, 62, 61, 60, 59, 58, 57, 183,
+ /* 490 */ 182, 181, 180, 179, 3, 356, 356, 356, 356, 356,
+ /* 500 */ 356, 356, 356, 64, 63, 356, 356, 167, 67, 66,
+ /* 510 */ 65, 62, 61, 60, 59, 58, 57, 183, 182, 181,
+ /* 520 */ 180, 179, 3, 189, 214, 213, 84, 121, 120, 133,
+ /* 530 */ 132, 131, 115, 85, 98, 111, 99, 178, 209, 195,
+ /* 540 */ 73, 356, 356, 188, 184, 189, 212, 213, 84, 121,
+ /* 550 */ 120, 133, 132, 131, 115, 85, 98, 111, 99, 178,
+ /* 560 */ 209, 195, 73, 168, 356, 188, 184, 189, 137, 213,
+ /* 570 */ 84, 121, 120, 133, 132, 131, 115, 85, 98, 111,
+ /* 580 */ 99, 178, 209, 195, 73, 356, 356, 188, 184, 356,
+ /* 590 */ 189, 211, 213, 84, 121, 120, 133, 132, 131, 115,
+ /* 600 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 356,
+ /* 610 */ 188, 184, 189, 172, 213, 84, 121, 120, 133, 132,
+ /* 620 */ 131, 115, 85, 98, 111, 99, 178, 209, 195, 73,
+ /* 630 */ 356, 356, 188, 184, 189, 163, 213, 84, 121, 120,
+ /* 640 */ 133, 132, 131, 115, 85, 98, 111, 99, 178, 209,
+ /* 650 */ 195, 73, 356, 356, 188, 184, 189, 161, 213, 84,
+ /* 660 */ 121, 120, 133, 132, 131, 115, 85, 98, 111, 99,
+ /* 670 */ 178, 209, 195, 73, 356, 356, 188, 184, 189, 160,
+ /* 680 */ 213, 84, 121, 120, 133, 132, 131, 115, 85, 98,
+ /* 690 */ 111, 99, 178, 209, 195, 73, 356, 356, 188, 184,
+ /* 700 */ 189, 159, 213, 84, 121, 120, 133, 132, 131, 115,
+ /* 710 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 356,
+ /* 720 */ 188, 184, 189, 158, 213, 84, 121, 120, 133, 132,
+ /* 730 */ 131, 115, 85, 98, 111, 99, 178, 209, 195, 73,
+ /* 740 */ 356, 356, 188, 184, 189, 157, 213, 84, 121, 120,
+ /* 750 */ 133, 132, 131, 115, 85, 98, 111, 99, 178, 209,
+ /* 760 */ 195, 73, 356, 356, 188, 184, 189, 156, 213, 84,
+ /* 770 */ 121, 120, 133, 132, 131, 115, 85, 98, 111, 99,
+ /* 780 */ 178, 209, 195, 73, 356, 356, 188, 184, 189, 155,
+ /* 790 */ 213, 84, 121, 120, 133, 132, 131, 115, 85, 98,
+ /* 800 */ 111, 99, 178, 209, 195, 73, 356, 356, 188, 184,
+ /* 810 */ 189, 154, 213, 84, 121, 120, 133, 132, 131, 115,
+ /* 820 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 356,
+ /* 830 */ 188, 184, 189, 153, 213, 84, 121, 120, 133, 132,
+ /* 840 */ 131, 115, 85, 98, 111, 99, 178, 209, 195, 73,
+ /* 850 */ 356, 356, 188, 184, 189, 152, 213, 84, 121, 120,
+ /* 860 */ 133, 132, 131, 115, 85, 98, 111, 99, 178, 209,
+ /* 870 */ 195, 73, 356, 356, 188, 184, 189, 151, 213, 84,
+ /* 880 */ 121, 120, 133, 132, 131, 115, 85, 98, 111, 99,
+ /* 890 */ 178, 209, 195, 73, 356, 356, 188, 184, 189, 175,
+ /* 900 */ 213, 84, 121, 120, 133, 132, 131, 115, 85, 98,
+ /* 910 */ 111, 99, 178, 209, 195, 73, 356, 356, 188, 184,
+ /* 920 */ 189, 169, 213, 84, 121, 120, 133, 132, 131, 115,
+ /* 930 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 189,
+ /* 940 */ 188, 184, 117, 356, 108, 133, 132, 131, 115, 85,
+ /* 950 */ 98, 111, 99, 178, 209, 195, 73, 356, 189, 188,
+ /* 960 */ 184, 117, 356, 356, 136, 132, 131, 115, 85, 98,
+ /* 970 */ 111, 99, 178, 209, 195, 73, 356, 356, 188, 184,
+ /* 980 */ 189, 356, 356, 117, 356, 356, 128, 132, 131, 115,
+ /* 990 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 356,
+ /* 1000 */ 188, 184, 189, 356, 356, 117, 356, 356, 356, 135,
+ /* 1010 */ 131, 115, 85, 98, 111, 99, 178, 209, 195, 73,
+ /* 1020 */ 356, 356, 188, 184, 356, 27, 22, 21, 20, 19,
+ /* 1030 */ 18, 17, 16, 15, 14, 13, 12, 189, 356, 356,
+ /* 1040 */ 117, 356, 356, 356, 356, 134, 115, 85, 98, 111,
+ /* 1050 */ 99, 178, 209, 195, 73, 356, 356, 188, 184, 356,
+ /* 1060 */ 189, 356, 356, 117, 356, 356, 197, 196, 356, 119,
+ /* 1070 */ 85, 98, 111, 99, 178, 209, 195, 73, 356, 189,
+ /* 1080 */ 188, 184, 117, 7, 356, 356, 185, 83, 356, 87,
+ /* 1090 */ 98, 111, 99, 178, 209, 195, 73, 356, 189, 188,
+ /* 1100 */ 184, 117, 356, 356, 356, 356, 356, 356, 86, 98,
+ /* 1110 */ 111, 99, 178, 209, 195, 73, 356, 189, 188, 184,
+ /* 1120 */ 117, 356, 356, 356, 356, 356, 356, 356, 104, 111,
+ /* 1130 */ 99, 178, 209, 195, 73, 356, 189, 188, 184, 117,
+ /* 1140 */ 183, 182, 181, 180, 179, 3, 356, 102, 111, 99,
+ /* 1150 */ 178, 209, 195, 73, 356, 189, 188, 184, 117, 356,
+ /* 1160 */ 356, 356, 356, 356, 356, 356, 100, 111, 99, 178,
+ /* 1170 */ 209, 195, 73, 356, 189, 188, 184, 117, 356, 356,
+ /* 1180 */ 356, 356, 356, 356, 356, 97, 111, 99, 178, 209,
+ /* 1190 */ 195, 73, 356, 189, 188, 184, 117, 356, 356, 356,
+ /* 1200 */ 356, 356, 356, 356, 96, 111, 99, 178, 209, 195,
+ /* 1210 */ 73, 356, 189, 188, 184, 117, 356, 356, 356, 356,
+ /* 1220 */ 356, 356, 356, 95, 111, 99, 178, 209, 195, 73,
+ /* 1230 */ 356, 189, 188, 184, 117, 356, 356, 356, 356, 356,
+ /* 1240 */ 356, 356, 94, 111, 99, 178, 209, 195, 73, 356,
+ /* 1250 */ 189, 188, 184, 117, 356, 356, 356, 356, 356, 356,
+ /* 1260 */ 356, 93, 111, 99, 178, 209, 195, 73, 356, 189,
+ /* 1270 */ 188, 184, 117, 356, 356, 356, 356, 356, 356, 356,
+ /* 1280 */ 92, 111, 99, 178, 209, 195, 73, 356, 189, 188,
+ /* 1290 */ 184, 117, 356, 356, 356, 356, 356, 356, 356, 91,
+ /* 1300 */ 111, 99, 178, 209, 195, 73, 356, 189, 188, 184,
+ /* 1310 */ 117, 356, 356, 356, 356, 356, 356, 356, 90, 111,
+ /* 1320 */ 99, 178, 209, 195, 73, 356, 189, 188, 184, 117,
+ /* 1330 */ 356, 356, 356, 356, 356, 356, 356, 89, 111, 99,
+ /* 1340 */ 178, 209, 195, 73, 356, 189, 188, 184, 117, 356,
+ /* 1350 */ 356, 356, 356, 356, 356, 356, 88, 111, 99, 178,
+ /* 1360 */ 209, 195, 73, 356, 189, 188, 184, 117, 356, 356,
+ /* 1370 */ 356, 356, 356, 356, 356, 356, 118, 99, 178, 209,
+ /* 1380 */ 195, 73, 356, 189, 188, 184, 117, 356, 356, 356,
+ /* 1390 */ 356, 356, 356, 356, 356, 114, 99, 178, 209, 195,
+ /* 1400 */ 73, 356, 189, 188, 184, 117, 356, 356, 356, 356,
+ /* 1410 */ 356, 356, 356, 356, 112, 99, 178, 209, 195, 73,
+ /* 1420 */ 356, 189, 188, 184, 117, 356, 356, 356, 356, 356,
+ /* 1430 */ 189, 356, 356, 117, 103, 178, 209, 195, 73, 356,
+ /* 1440 */ 356, 188, 184, 101, 178, 209, 195, 73, 356, 189,
+ /* 1450 */ 188, 184, 117, 356, 356, 356, 356, 356, 189, 356,
+ /* 1460 */ 356, 117, 356, 210, 209, 195, 73, 356, 189, 188,
+ /* 1470 */ 184, 117, 208, 209, 195, 73, 356, 189, 188, 184,
+ /* 1480 */ 117, 356, 207, 209, 195, 73, 356, 189, 188, 184,
+ /* 1490 */ 117, 206, 209, 195, 73, 356, 189, 188, 184, 117,
+ /* 1500 */ 356, 205, 209, 195, 73, 356, 189, 188, 184, 117,
+ /* 1510 */ 204, 209, 195, 73, 356, 189, 188, 184, 117, 356,
+ /* 1520 */ 203, 209, 195, 73, 356, 189, 188, 184, 117, 202,
+ /* 1530 */ 209, 195, 73, 356, 189, 188, 184, 117, 356, 201,
+ /* 1540 */ 209, 195, 73, 356, 356, 188, 184, 356, 200, 209,
+ /* 1550 */ 195, 73, 356, 189, 188, 184, 117, 356, 356, 356,
+ /* 1560 */ 356, 189, 356, 356, 117, 356, 356, 199, 209, 195,
+ /* 1570 */ 73, 356, 356, 188, 184, 198, 209, 195, 73, 356,
+ /* 1580 */ 189, 188, 184, 117, 356, 356, 356, 356, 189, 356,
+ /* 1590 */ 356, 117, 356, 356, 190, 209, 195, 73, 356, 356,
+ /* 1600 */ 188, 184, 186, 209, 195, 73, 356, 356, 188, 184,
+};
+static const YYCODETYPE yy_lookahead[] = {
+ /* 0 */ 1, 2, 47, 48, 49, 6, 7, 76, 9, 10,
+ /* 10 */ 11, 80, 13, 75, 76, 77, 9, 81, 80, 81,
+ /* 20 */ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ /* 30 */ 92, 93, 94, 95, 96, 97, 98, 101, 102, 101,
+ /* 40 */ 102, 6, 7, 28, 9, 10, 11, 29, 13, 50,
+ /* 50 */ 51, 12, 30, 14, 55, 56, 57, 58, 59, 60,
+ /* 60 */ 61, 62, 63, 64, 65, 66, 67, 68, 69, 76,
+ /* 70 */ 77, 31, 7, 80, 81, 82, 83, 84, 85, 86,
+ /* 80 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ /* 90 */ 97, 98, 8, 79, 101, 102, 6, 7, 14, 9,
+ /* 100 */ 10, 11, 77, 13, 3, 4, 81, 82, 83, 84,
+ /* 110 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ /* 120 */ 95, 96, 97, 98, 110, 111, 101, 102, 32, 33,
+ /* 130 */ 105, 52, 53, 54, 69, 28, 71, 56, 57, 5,
+ /* 140 */ 50, 51, 50, 51, 39, 55, 56, 57, 58, 59,
+ /* 150 */ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ /* 160 */ 7, 27, 10, 10, 11, 110, 111, 14, 81, 82,
+ /* 170 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ /* 180 */ 93, 94, 95, 96, 97, 98, 106, 107, 101, 102,
+ /* 190 */ 103, 104, 3, 4, 5, 6, 7, 8, 9, 10,
+ /* 200 */ 11, 10, 13, 50, 51, 12, 14, 14, 55, 56,
+ /* 210 */ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ /* 220 */ 67, 68, 69, 70, 7, 99, 100, 10, 11, 78,
+ /* 230 */ 52, 14, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 240 */ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ /* 250 */ 8, 0, 101, 102, 64, 64, 14, 66, 103, 105,
+ /* 260 */ 109, 0, 70, 66, 80, 14, 80, 50, 51, 10,
+ /* 270 */ 112, 112, 55, 56, 57, 58, 59, 60, 61, 62,
+ /* 280 */ 63, 64, 65, 66, 67, 68, 69, 70, 7, 77,
+ /* 290 */ 80, 10, 11, 81, 82, 83, 84, 85, 86, 87,
+ /* 300 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ /* 310 */ 98, 50, 80, 101, 102, 0, 34, 35, 36, 37,
+ /* 320 */ 38, 39, 40, 41, 42, 43, 44, 45, 46, 14,
+ /* 330 */ 80, 50, 51, 52, 80, 112, 55, 56, 57, 58,
+ /* 340 */ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ /* 350 */ 69, 77, 112, 72, 112, 81, 82, 83, 84, 85,
+ /* 360 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ /* 370 */ 96, 97, 98, 77, 112, 101, 102, 81, 82, 83,
+ /* 380 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ /* 390 */ 94, 95, 96, 97, 98, 112, 112, 101, 102, 0,
+ /* 400 */ 112, 112, 3, 4, 5, 6, 7, 112, 9, 10,
+ /* 410 */ 11, 112, 13, 81, 82, 83, 84, 85, 86, 87,
+ /* 420 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ /* 430 */ 98, 112, 7, 101, 102, 10, 11, 112, 112, 14,
+ /* 440 */ 108, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ /* 450 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 112,
+ /* 460 */ 7, 101, 102, 10, 11, 112, 112, 112, 112, 109,
+ /* 470 */ 112, 112, 112, 112, 112, 50, 51, 112, 112, 112,
+ /* 480 */ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ /* 490 */ 65, 66, 67, 68, 69, 112, 112, 112, 112, 112,
+ /* 500 */ 112, 112, 112, 50, 51, 112, 112, 14, 55, 56,
+ /* 510 */ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ /* 520 */ 67, 68, 69, 81, 82, 83, 84, 85, 86, 87,
+ /* 530 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ /* 540 */ 98, 112, 112, 101, 102, 81, 82, 83, 84, 85,
+ /* 550 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ /* 560 */ 96, 97, 98, 70, 112, 101, 102, 81, 82, 83,
+ /* 570 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ /* 580 */ 94, 95, 96, 97, 98, 112, 112, 101, 102, 112,
+ /* 590 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ /* 600 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 112,
+ /* 610 */ 101, 102, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 620 */ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ /* 630 */ 112, 112, 101, 102, 81, 82, 83, 84, 85, 86,
+ /* 640 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ /* 650 */ 97, 98, 112, 112, 101, 102, 81, 82, 83, 84,
+ /* 660 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ /* 670 */ 95, 96, 97, 98, 112, 112, 101, 102, 81, 82,
+ /* 680 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ /* 690 */ 93, 94, 95, 96, 97, 98, 112, 112, 101, 102,
+ /* 700 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ /* 710 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 112,
+ /* 720 */ 101, 102, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 730 */ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ /* 740 */ 112, 112, 101, 102, 81, 82, 83, 84, 85, 86,
+ /* 750 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ /* 760 */ 97, 98, 112, 112, 101, 102, 81, 82, 83, 84,
+ /* 770 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ /* 780 */ 95, 96, 97, 98, 112, 112, 101, 102, 81, 82,
+ /* 790 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ /* 800 */ 93, 94, 95, 96, 97, 98, 112, 112, 101, 102,
+ /* 810 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ /* 820 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 112,
+ /* 830 */ 101, 102, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 840 */ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ /* 850 */ 112, 112, 101, 102, 81, 82, 83, 84, 85, 86,
+ /* 860 */ 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
+ /* 870 */ 97, 98, 112, 112, 101, 102, 81, 82, 83, 84,
+ /* 880 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ /* 890 */ 95, 96, 97, 98, 112, 112, 101, 102, 81, 82,
+ /* 900 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ /* 910 */ 93, 94, 95, 96, 97, 98, 112, 112, 101, 102,
+ /* 920 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ /* 930 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 81,
+ /* 940 */ 101, 102, 84, 112, 86, 87, 88, 89, 90, 91,
+ /* 950 */ 92, 93, 94, 95, 96, 97, 98, 112, 81, 101,
+ /* 960 */ 102, 84, 112, 112, 87, 88, 89, 90, 91, 92,
+ /* 970 */ 93, 94, 95, 96, 97, 98, 112, 112, 101, 102,
+ /* 980 */ 81, 112, 112, 84, 112, 112, 87, 88, 89, 90,
+ /* 990 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 112,
+ /* 1000 */ 101, 102, 81, 112, 112, 84, 112, 112, 112, 88,
+ /* 1010 */ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ /* 1020 */ 112, 112, 101, 102, 112, 15, 16, 17, 18, 19,
+ /* 1030 */ 20, 21, 22, 23, 24, 25, 26, 81, 112, 112,
+ /* 1040 */ 84, 112, 112, 112, 112, 89, 90, 91, 92, 93,
+ /* 1050 */ 94, 95, 96, 97, 98, 112, 112, 101, 102, 112,
+ /* 1060 */ 81, 112, 112, 84, 112, 112, 56, 57, 112, 90,
+ /* 1070 */ 91, 92, 93, 94, 95, 96, 97, 98, 112, 81,
+ /* 1080 */ 101, 102, 84, 7, 112, 112, 10, 11, 112, 91,
+ /* 1090 */ 92, 93, 94, 95, 96, 97, 98, 112, 81, 101,
+ /* 1100 */ 102, 84, 112, 112, 112, 112, 112, 112, 91, 92,
+ /* 1110 */ 93, 94, 95, 96, 97, 98, 112, 81, 101, 102,
+ /* 1120 */ 84, 112, 112, 112, 112, 112, 112, 112, 92, 93,
+ /* 1130 */ 94, 95, 96, 97, 98, 112, 81, 101, 102, 84,
+ /* 1140 */ 64, 65, 66, 67, 68, 69, 112, 92, 93, 94,
+ /* 1150 */ 95, 96, 97, 98, 112, 81, 101, 102, 84, 112,
+ /* 1160 */ 112, 112, 112, 112, 112, 112, 92, 93, 94, 95,
+ /* 1170 */ 96, 97, 98, 112, 81, 101, 102, 84, 112, 112,
+ /* 1180 */ 112, 112, 112, 112, 112, 92, 93, 94, 95, 96,
+ /* 1190 */ 97, 98, 112, 81, 101, 102, 84, 112, 112, 112,
+ /* 1200 */ 112, 112, 112, 112, 92, 93, 94, 95, 96, 97,
+ /* 1210 */ 98, 112, 81, 101, 102, 84, 112, 112, 112, 112,
+ /* 1220 */ 112, 112, 112, 92, 93, 94, 95, 96, 97, 98,
+ /* 1230 */ 112, 81, 101, 102, 84, 112, 112, 112, 112, 112,
+ /* 1240 */ 112, 112, 92, 93, 94, 95, 96, 97, 98, 112,
+ /* 1250 */ 81, 101, 102, 84, 112, 112, 112, 112, 112, 112,
+ /* 1260 */ 112, 92, 93, 94, 95, 96, 97, 98, 112, 81,
+ /* 1270 */ 101, 102, 84, 112, 112, 112, 112, 112, 112, 112,
+ /* 1280 */ 92, 93, 94, 95, 96, 97, 98, 112, 81, 101,
+ /* 1290 */ 102, 84, 112, 112, 112, 112, 112, 112, 112, 92,
+ /* 1300 */ 93, 94, 95, 96, 97, 98, 112, 81, 101, 102,
+ /* 1310 */ 84, 112, 112, 112, 112, 112, 112, 112, 92, 93,
+ /* 1320 */ 94, 95, 96, 97, 98, 112, 81, 101, 102, 84,
+ /* 1330 */ 112, 112, 112, 112, 112, 112, 112, 92, 93, 94,
+ /* 1340 */ 95, 96, 97, 98, 112, 81, 101, 102, 84, 112,
+ /* 1350 */ 112, 112, 112, 112, 112, 112, 92, 93, 94, 95,
+ /* 1360 */ 96, 97, 98, 112, 81, 101, 102, 84, 112, 112,
+ /* 1370 */ 112, 112, 112, 112, 112, 112, 93, 94, 95, 96,
+ /* 1380 */ 97, 98, 112, 81, 101, 102, 84, 112, 112, 112,
+ /* 1390 */ 112, 112, 112, 112, 112, 93, 94, 95, 96, 97,
+ /* 1400 */ 98, 112, 81, 101, 102, 84, 112, 112, 112, 112,
+ /* 1410 */ 112, 112, 112, 112, 93, 94, 95, 96, 97, 98,
+ /* 1420 */ 112, 81, 101, 102, 84, 112, 112, 112, 112, 112,
+ /* 1430 */ 81, 112, 112, 84, 94, 95, 96, 97, 98, 112,
+ /* 1440 */ 112, 101, 102, 94, 95, 96, 97, 98, 112, 81,
+ /* 1450 */ 101, 102, 84, 112, 112, 112, 112, 112, 81, 112,
+ /* 1460 */ 112, 84, 112, 95, 96, 97, 98, 112, 81, 101,
+ /* 1470 */ 102, 84, 95, 96, 97, 98, 112, 81, 101, 102,
+ /* 1480 */ 84, 112, 95, 96, 97, 98, 112, 81, 101, 102,
+ /* 1490 */ 84, 95, 96, 97, 98, 112, 81, 101, 102, 84,
+ /* 1500 */ 112, 95, 96, 97, 98, 112, 81, 101, 102, 84,
+ /* 1510 */ 95, 96, 97, 98, 112, 81, 101, 102, 84, 112,
+ /* 1520 */ 95, 96, 97, 98, 112, 81, 101, 102, 84, 95,
+ /* 1530 */ 96, 97, 98, 112, 81, 101, 102, 84, 112, 95,
+ /* 1540 */ 96, 97, 98, 112, 112, 101, 102, 112, 95, 96,
+ /* 1550 */ 97, 98, 112, 81, 101, 102, 84, 112, 112, 112,
+ /* 1560 */ 112, 81, 112, 112, 84, 112, 112, 95, 96, 97,
+ /* 1570 */ 98, 112, 112, 101, 102, 95, 96, 97, 98, 112,
+ /* 1580 */ 81, 101, 102, 84, 112, 112, 112, 112, 81, 112,
+ /* 1590 */ 112, 84, 112, 112, 95, 96, 97, 98, 112, 112,
+ /* 1600 */ 101, 102, 95, 96, 97, 98, 112, 112, 101, 102,
+};
+#define YY_SHIFT_USE_DFLT (-46)
+#define YY_SHIFT_COUNT (138)
+#define YY_SHIFT_MIN (-45)
+#define YY_SHIFT_MAX (1076)
+static const short yy_shift_ofst[] = {
+ /* 0 */ -1, 90, 281, 425, 453, 281, 453, 453, 453, 453,
+ /* 10 */ 217, 153, 453, 453, 453, 453, 453, 453, 453, 453,
+ /* 20 */ 453, 453, 453, 453, 453, 453, 453, 453, 453, 453,
+ /* 30 */ 453, 453, 453, 453, 453, 453, 453, 453, 453, 453,
+ /* 40 */ 453, 453, 453, 453, 453, 453, 453, 453, 453, 453,
+ /* 50 */ 453, 453, 453, 453, 453, 453, 453, 453, 453, 453,
+ /* 60 */ 453, 453, 453, 453, 453, 453, 453, 453, 453, 1076,
+ /* 70 */ 259, 35, 191, 65, 259, 189, 399, 35, 35, 35,
+ /* 80 */ 35, 35, 493, -46, 1010, 282, 282, 282, -45, -45,
+ /* 90 */ -45, -45, -45, -45, -45, -45, -45, -45, -45, 79,
+ /* 100 */ -45, 79, -45, 79, -45, 261, 315, 251, 101, 242,
+ /* 110 */ 193, 92, 92, 84, 92, 96, 192, 81, 92, 96,
+ /* 120 */ 101, 134, 39, 7, 197, 105, 190, 178, 18, 152,
+ /* 130 */ 107, 40, 22, 18, 40, 22, 18, 15, 7,
+};
+#define YY_REDUCE_USE_DFLT (-70)
+#define YY_REDUCE_COUNT (83)
+#define YY_REDUCE_MIN (-69)
+#define YY_REDUCE_MAX (1507)
+static const short yy_reduce_ofst[] = {
+ /* 0 */ -62, -7, 151, 87, 25, 360, 332, 296, 274, 212,
+ /* 10 */ 839, 817, 795, 773, 751, 729, 707, 685, 663, 641,
+ /* 20 */ 619, 597, 575, 553, 531, 509, 486, 464, 442, 858,
+ /* 30 */ 899, 877, 921, 956, 979, 1017, 998, 1264, 1245, 1226,
+ /* 40 */ 1207, 1188, 1169, 1150, 1131, 1112, 1093, 1074, 1055, 1036,
+ /* 50 */ 1321, 1302, 1283, 1349, 1340, 1507, 1499, 1480, 1472, 1453,
+ /* 60 */ 1444, 1434, 1425, 1415, 1406, 1396, 1387, 1377, 1368, -64,
+ /* 70 */ 14, -69, 80, 126, 55, 254, 254, 250, 232, 210,
+ /* 80 */ 186, 184, 155, 154,
+};
+static const YYACTIONTYPE yy_default[] = {
+ /* 0 */ 354, 354, 342, 354, 332, 354, 339, 354, 354, 354,
+ /* 10 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 20 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 30 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 40 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 50 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 60 */ 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
+ /* 70 */ 348, 354, 354, 310, 354, 354, 354, 354, 354, 354,
+ /* 80 */ 354, 354, 354, 332, 306, 266, 268, 267, 282, 281,
+ /* 90 */ 280, 279, 278, 277, 276, 275, 274, 273, 269, 287,
+ /* 100 */ 272, 289, 271, 288, 270, 354, 354, 354, 256, 354,
+ /* 110 */ 354, 283, 286, 354, 285, 264, 354, 306, 284, 265,
+ /* 120 */ 255, 253, 354, 316, 354, 354, 354, 351, 259, 354,
+ /* 130 */ 354, 262, 260, 257, 263, 261, 258, 354, 354, 349,
+ /* 140 */ 353, 352, 350, 343, 347, 346, 345, 344, 233, 231,
+ /* 150 */ 237, 252, 251, 250, 249, 248, 247, 246, 245, 244,
+ /* 160 */ 243, 242, 340, 341, 338, 337, 328, 326, 325, 330,
+ /* 170 */ 324, 335, 334, 333, 331, 329, 327, 323, 290, 322,
+ /* 180 */ 321, 320, 319, 318, 317, 316, 293, 315, 314, 312,
+ /* 190 */ 292, 336, 238, 313, 311, 309, 308, 307, 305, 304,
+ /* 200 */ 303, 302, 301, 300, 299, 298, 297, 296, 295, 294,
+ /* 210 */ 291, 254, 241, 240, 239, 236, 235, 234, 230, 227,
+ /* 220 */ 232, 229, 228,
+};
+
+/* The next table maps tokens into fallback tokens. If a construct
+** like the following:
+**
+** %fallback ID X Y Z.
+**
+** appears in the grammar, then ID becomes a fallback token for X, Y,
+** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack. Information stored includes:
+**
+** + The state number for the parser at this level of the stack.
+**
+** + The value of the token stored at this level of the stack.
+** (In other words, the "major" token.)
+**
+** + The semantic value stored at this level of the stack. This is
+** the information used by the action routines in the grammar.
+** It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+ YYACTIONTYPE stateno; /* The state-number */
+ YYCODETYPE major; /* The major token value. This is the code
+ ** number for the token at this stack level */
+ YYMINORTYPE minor; /* The user-supplied minor token value. This
+ ** is the value of the token */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+ int yyidx; /* Index of top element in stack */
+#ifdef YYTRACKMAXSTACKDEPTH
+ int yyidxMax; /* Maximum value of yyidx */
+#endif
+ int yyerrcnt; /* Shifts left before out of the error */
+ grn_expr_parserARG_SDECL /* A place to hold %extra_argument */
+#if YYSTACKDEPTH<=0
+ int yystksz; /* Current side of the stack */
+ yyStackEntry *yystack; /* The parser's stack */
+#else
+ yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
+#endif
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/*
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message. Tracing is turned off
+** by making either argument NULL
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+** If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+** line of trace output. If NULL, then tracing is
+** turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void grn_expr_parserTrace(FILE *TraceFILE, char *zTracePrompt){
+ yyTraceFILE = TraceFILE;
+ yyTracePrompt = zTracePrompt;
+ if( yyTraceFILE==0 ) yyTracePrompt = 0;
+ else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required. The following table supplies these names */
+static const char *const yyTokenName[] = {
+ "$", "START_OUTPUT_COLUMNS", "START_ADJUSTER", "LOGICAL_AND",
+ "LOGICAL_AND_NOT", "LOGICAL_OR", "QSTRING", "PARENL",
+ "PARENR", "RELATIVE_OP", "IDENTIFIER", "BRACEL",
+ "BRACER", "EVAL", "COMMA", "ASSIGN",
+ "STAR_ASSIGN", "SLASH_ASSIGN", "MOD_ASSIGN", "PLUS_ASSIGN",
+ "MINUS_ASSIGN", "SHIFTL_ASSIGN", "SHIFTR_ASSIGN", "SHIFTRR_ASSIGN",
+ "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "QUESTION",
+ "COLON", "BITWISE_OR", "BITWISE_XOR", "BITWISE_AND",
+ "EQUAL", "NOT_EQUAL", "LESS", "GREATER",
+ "LESS_EQUAL", "GREATER_EQUAL", "IN", "MATCH",
+ "NEAR", "NEAR2", "SIMILAR", "TERM_EXTRACT",
+ "LCP", "PREFIX", "SUFFIX", "SHIFTL",
+ "SHIFTR", "SHIFTRR", "PLUS", "MINUS",
+ "STAR", "SLASH", "MOD", "DELETE",
+ "INCR", "DECR", "NOT", "BITWISE_NOT",
+ "ADJUST", "EXACT", "PARTIAL", "UNSPLIT",
+ "DECIMAL", "HEX_INTEGER", "STRING", "BOOLEAN",
+ "NULL", "BRACKETL", "BRACKETR", "DOT",
+ "NONEXISTENT_COLUMN", "error", "suppress_unused_variable_warning", "input",
+ "query", "expression", "output_columns", "adjuster",
+ "query_element", "primary_expression", "assignment_expression", "conditional_expression",
+ "lefthand_side_expression", "logical_or_expression", "logical_and_expression", "bitwise_or_expression",
+ "bitwise_xor_expression", "bitwise_and_expression", "equality_expression", "relational_expression",
+ "shift_expression", "additive_expression", "multiplicative_expression", "unary_expression",
+ "postfix_expression", "call_expression", "member_expression", "arguments",
+ "member_expression_part", "object_literal", "array_literal", "elision",
+ "element_list", "property_name_and_value_list", "property_name_and_value", "property_name",
+ "argument_list", "output_column", "adjust_expression", "adjust_match_expression",
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *const yyRuleName[] = {
+ /* 0 */ "input ::= query",
+ /* 1 */ "input ::= expression",
+ /* 2 */ "input ::= START_OUTPUT_COLUMNS output_columns",
+ /* 3 */ "input ::= START_ADJUSTER adjuster",
+ /* 4 */ "query ::= query_element",
+ /* 5 */ "query ::= query query_element",
+ /* 6 */ "query ::= query LOGICAL_AND query_element",
+ /* 7 */ "query ::= query LOGICAL_AND_NOT query_element",
+ /* 8 */ "query ::= query LOGICAL_OR query_element",
+ /* 9 */ "query_element ::= QSTRING",
+ /* 10 */ "query_element ::= PARENL query PARENR",
+ /* 11 */ "query_element ::= RELATIVE_OP query_element",
+ /* 12 */ "query_element ::= IDENTIFIER RELATIVE_OP query_element",
+ /* 13 */ "query_element ::= BRACEL expression BRACER",
+ /* 14 */ "query_element ::= EVAL primary_expression",
+ /* 15 */ "expression ::= assignment_expression",
+ /* 16 */ "expression ::= expression COMMA assignment_expression",
+ /* 17 */ "assignment_expression ::= conditional_expression",
+ /* 18 */ "assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression",
+ /* 19 */ "assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression",
+ /* 20 */ "assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression",
+ /* 21 */ "assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression",
+ /* 22 */ "assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression",
+ /* 23 */ "assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression",
+ /* 24 */ "assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression",
+ /* 25 */ "assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression",
+ /* 26 */ "assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression",
+ /* 27 */ "assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression",
+ /* 28 */ "assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression",
+ /* 29 */ "assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression",
+ /* 30 */ "conditional_expression ::= logical_or_expression",
+ /* 31 */ "conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression",
+ /* 32 */ "logical_or_expression ::= logical_and_expression",
+ /* 33 */ "logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression",
+ /* 34 */ "logical_and_expression ::= bitwise_or_expression",
+ /* 35 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression",
+ /* 36 */ "logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression",
+ /* 37 */ "bitwise_or_expression ::= bitwise_xor_expression",
+ /* 38 */ "bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression",
+ /* 39 */ "bitwise_xor_expression ::= bitwise_and_expression",
+ /* 40 */ "bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression",
+ /* 41 */ "bitwise_and_expression ::= equality_expression",
+ /* 42 */ "bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression",
+ /* 43 */ "equality_expression ::= relational_expression",
+ /* 44 */ "equality_expression ::= equality_expression EQUAL relational_expression",
+ /* 45 */ "equality_expression ::= equality_expression NOT_EQUAL relational_expression",
+ /* 46 */ "relational_expression ::= shift_expression",
+ /* 47 */ "relational_expression ::= relational_expression LESS shift_expression",
+ /* 48 */ "relational_expression ::= relational_expression GREATER shift_expression",
+ /* 49 */ "relational_expression ::= relational_expression LESS_EQUAL shift_expression",
+ /* 50 */ "relational_expression ::= relational_expression GREATER_EQUAL shift_expression",
+ /* 51 */ "relational_expression ::= relational_expression IN shift_expression",
+ /* 52 */ "relational_expression ::= relational_expression MATCH shift_expression",
+ /* 53 */ "relational_expression ::= relational_expression NEAR shift_expression",
+ /* 54 */ "relational_expression ::= relational_expression NEAR2 shift_expression",
+ /* 55 */ "relational_expression ::= relational_expression SIMILAR shift_expression",
+ /* 56 */ "relational_expression ::= relational_expression TERM_EXTRACT shift_expression",
+ /* 57 */ "relational_expression ::= relational_expression LCP shift_expression",
+ /* 58 */ "relational_expression ::= relational_expression PREFIX shift_expression",
+ /* 59 */ "relational_expression ::= relational_expression SUFFIX shift_expression",
+ /* 60 */ "shift_expression ::= additive_expression",
+ /* 61 */ "shift_expression ::= shift_expression SHIFTL additive_expression",
+ /* 62 */ "shift_expression ::= shift_expression SHIFTR additive_expression",
+ /* 63 */ "shift_expression ::= shift_expression SHIFTRR additive_expression",
+ /* 64 */ "additive_expression ::= multiplicative_expression",
+ /* 65 */ "additive_expression ::= additive_expression PLUS multiplicative_expression",
+ /* 66 */ "additive_expression ::= additive_expression MINUS multiplicative_expression",
+ /* 67 */ "multiplicative_expression ::= unary_expression",
+ /* 68 */ "multiplicative_expression ::= multiplicative_expression STAR unary_expression",
+ /* 69 */ "multiplicative_expression ::= multiplicative_expression SLASH unary_expression",
+ /* 70 */ "multiplicative_expression ::= multiplicative_expression MOD unary_expression",
+ /* 71 */ "unary_expression ::= postfix_expression",
+ /* 72 */ "unary_expression ::= DELETE unary_expression",
+ /* 73 */ "unary_expression ::= INCR unary_expression",
+ /* 74 */ "unary_expression ::= DECR unary_expression",
+ /* 75 */ "unary_expression ::= PLUS unary_expression",
+ /* 76 */ "unary_expression ::= MINUS unary_expression",
+ /* 77 */ "unary_expression ::= NOT unary_expression",
+ /* 78 */ "unary_expression ::= BITWISE_NOT unary_expression",
+ /* 79 */ "unary_expression ::= ADJUST unary_expression",
+ /* 80 */ "unary_expression ::= EXACT unary_expression",
+ /* 81 */ "unary_expression ::= PARTIAL unary_expression",
+ /* 82 */ "unary_expression ::= UNSPLIT unary_expression",
+ /* 83 */ "postfix_expression ::= lefthand_side_expression",
+ /* 84 */ "postfix_expression ::= lefthand_side_expression INCR",
+ /* 85 */ "postfix_expression ::= lefthand_side_expression DECR",
+ /* 86 */ "lefthand_side_expression ::= call_expression",
+ /* 87 */ "lefthand_side_expression ::= member_expression",
+ /* 88 */ "call_expression ::= member_expression arguments",
+ /* 89 */ "member_expression ::= primary_expression",
+ /* 90 */ "member_expression ::= member_expression member_expression_part",
+ /* 91 */ "primary_expression ::= object_literal",
+ /* 92 */ "primary_expression ::= PARENL expression PARENR",
+ /* 93 */ "primary_expression ::= IDENTIFIER",
+ /* 94 */ "primary_expression ::= array_literal",
+ /* 95 */ "primary_expression ::= DECIMAL",
+ /* 96 */ "primary_expression ::= HEX_INTEGER",
+ /* 97 */ "primary_expression ::= STRING",
+ /* 98 */ "primary_expression ::= BOOLEAN",
+ /* 99 */ "primary_expression ::= NULL",
+ /* 100 */ "array_literal ::= BRACKETL elision BRACKETR",
+ /* 101 */ "array_literal ::= BRACKETL element_list elision BRACKETR",
+ /* 102 */ "array_literal ::= BRACKETL element_list BRACKETR",
+ /* 103 */ "elision ::= COMMA",
+ /* 104 */ "elision ::= elision COMMA",
+ /* 105 */ "element_list ::= assignment_expression",
+ /* 106 */ "element_list ::= elision assignment_expression",
+ /* 107 */ "element_list ::= element_list elision assignment_expression",
+ /* 108 */ "object_literal ::= BRACEL property_name_and_value_list BRACER",
+ /* 109 */ "property_name_and_value_list ::=",
+ /* 110 */ "property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value",
+ /* 111 */ "property_name_and_value ::= property_name COLON assignment_expression",
+ /* 112 */ "property_name ::= IDENTIFIER|STRING|DECIMAL",
+ /* 113 */ "member_expression_part ::= BRACKETL expression BRACKETR",
+ /* 114 */ "member_expression_part ::= DOT IDENTIFIER",
+ /* 115 */ "arguments ::= PARENL argument_list PARENR",
+ /* 116 */ "argument_list ::=",
+ /* 117 */ "argument_list ::= assignment_expression",
+ /* 118 */ "argument_list ::= argument_list COMMA assignment_expression",
+ /* 119 */ "output_columns ::=",
+ /* 120 */ "output_columns ::= output_column",
+ /* 121 */ "output_columns ::= output_columns COMMA output_column",
+ /* 122 */ "output_column ::= STAR",
+ /* 123 */ "output_column ::= NONEXISTENT_COLUMN",
+ /* 124 */ "output_column ::= assignment_expression",
+ /* 125 */ "adjuster ::=",
+ /* 126 */ "adjuster ::= adjust_expression",
+ /* 127 */ "adjuster ::= adjuster PLUS adjust_expression",
+ /* 128 */ "adjust_expression ::= adjust_match_expression",
+ /* 129 */ "adjust_expression ::= adjust_match_expression STAR DECIMAL",
+ /* 130 */ "adjust_match_expression ::= IDENTIFIER MATCH STRING",
+};
+#endif /* NDEBUG */
+
+
+#if YYSTACKDEPTH<=0
+/*
+** Try to increase the size of the parser stack.
+*/
+static void yyGrowStack(yyParser *p){
+ int newSize;
+ yyStackEntry *pNew;
+
+ newSize = p->yystksz*2 + 100;
+ pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
+ if( pNew ){
+ p->yystack = pNew;
+ p->yystksz = newSize;
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
+ yyTracePrompt, p->yystksz);
+ }
+#endif
+ }
+}
+#endif
+
+/*
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser. This pointer is used in subsequent calls
+** to grn_expr_parser and grn_expr_parserFree.
+*/
+void *grn_expr_parserAlloc(void *(*mallocProc)(size_t)){
+ yyParser *pParser;
+ pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+ if( pParser ){
+ pParser->yyidx = -1;
+#ifdef YYTRACKMAXSTACKDEPTH
+ pParser->yyidxMax = 0;
+#endif
+#if YYSTACKDEPTH<=0
+ pParser->yystack = NULL;
+ pParser->yystksz = 0;
+ yyGrowStack(pParser);
+#endif
+ }
+ return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol. The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(
+ yyParser *yypParser, /* The parser */
+ YYCODETYPE yymajor, /* Type code for object to destroy */
+ YYMINORTYPE *yypminor /* The object to be destroyed */
+){
+ grn_expr_parserARG_FETCH;
+ switch( yymajor ){
+ /* Here is inserted the actions which take place when a
+ ** terminal or non-terminal is destroyed. This can happen
+ ** when the symbol is popped from the stack during a
+ ** reduce or during error processing or when a parser is
+ ** being destroyed before it is finished parsing.
+ **
+ ** Note: during a reduce, the only symbols destroyed are those
+ ** which appear on the RHS of the rule, but which are not used
+ ** inside the C code.
+ */
+ case 74: /* suppress_unused_variable_warning */
+{
+#line 11 "ecmascript.lemon"
+
+ (void)efsi;
+
+#line 875 "ecmascript.c"
+}
+ break;
+ default: break; /* If no destructor action specified: do nothing */
+ }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+ YYCODETYPE yymajor;
+ yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+ if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+ if( yyTraceFILE && pParser->yyidx>=0 ){
+ fprintf(yyTraceFILE,"%sPopping %s\n",
+ yyTracePrompt,
+ yyTokenName[yytos->major]);
+ }
+#endif
+ yymajor = yytos->major;
+ yy_destructor(pParser, yymajor, &yytos->minor);
+ pParser->yyidx--;
+ return yymajor;
+}
+
+/*
+** Deallocate and destroy a parser. Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser. This should be a pointer
+** obtained from grn_expr_parserAlloc.
+** <li> A pointer to a function used to reclaim memory obtained
+** from malloc.
+** </ul>
+*/
+void grn_expr_parserFree(
+ void *p, /* The parser to be deleted */
+ void (*freeProc)(void*) /* Function used to reclaim memory */
+){
+ yyParser *pParser = (yyParser*)p;
+ if( pParser==0 ) return;
+ while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+ free(pParser->yystack);
+#endif
+ (*freeProc)((void*)pParser);
+}
+
+/*
+** Return the peak depth of the stack for a parser.
+*/
+#ifdef YYTRACKMAXSTACKDEPTH
+int grn_expr_parserStackPeak(void *p){
+ yyParser *pParser = (yyParser*)p;
+ return pParser->yyidxMax;
+}
+#endif
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead. If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+ yyParser *pParser, /* The parser */
+ YYCODETYPE iLookAhead /* The look-ahead token */
+){
+ int i;
+ int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+ if( stateno>YY_SHIFT_COUNT
+ || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
+ return yy_default[stateno];
+ }
+ assert( iLookAhead!=YYNOCODE );
+ i += iLookAhead;
+ if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
+ if( iLookAhead>0 ){
+#ifdef YYFALLBACK
+ YYCODETYPE iFallback; /* Fallback token */
+ if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+ && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+ yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+ }
+#endif
+ return yy_find_shift_action(pParser, iFallback);
+ }
+#endif
+#ifdef YYWILDCARD
+ {
+ int j = i - iLookAhead + YYWILDCARD;
+ if(
+#if YY_SHIFT_MIN+YYWILDCARD<0
+ j>=0 &&
+#endif
+#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
+ j<YY_ACTTAB_COUNT &&
+#endif
+ yy_lookahead[j]==YYWILDCARD
+ ){
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
+ yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
+ }
+#endif /* NDEBUG */
+ return yy_action[j];
+ }
+ }
+#endif /* YYWILDCARD */
+ }
+ return yy_default[stateno];
+ }else{
+ return yy_action[i];
+ }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead. If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+ int stateno, /* Current state number */
+ YYCODETYPE iLookAhead /* The look-ahead token */
+){
+ int i;
+#ifdef YYERRORSYMBOL
+ if( stateno>YY_REDUCE_COUNT ){
+ return yy_default[stateno];
+ }
+#else
+ assert( stateno<=YY_REDUCE_COUNT );
+#endif
+ i = yy_reduce_ofst[stateno];
+ assert( i!=YY_REDUCE_USE_DFLT );
+ assert( iLookAhead!=YYNOCODE );
+ i += iLookAhead;
+#ifdef YYERRORSYMBOL
+ if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
+ return yy_default[stateno];
+ }
+#else
+ assert( i>=0 && i<YY_ACTTAB_COUNT );
+ assert( yy_lookahead[i]==iLookAhead );
+#endif
+ return yy_action[i];
+}
+
+/*
+** The following routine is called if the stack overflows.
+*/
+static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
+ grn_expr_parserARG_FETCH;
+ yypParser->yyidx--;
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+ }
+#endif
+ while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+ /* Here code is inserted which will execute if the parser
+ ** stack every overflows */
+ grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument var */
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+ yyParser *yypParser, /* The parser to be shifted */
+ int yyNewState, /* The new state to shift in */
+ int yyMajor, /* The major token to shift in */
+ YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */
+){
+ yyStackEntry *yytos;
+ yypParser->yyidx++;
+#ifdef YYTRACKMAXSTACKDEPTH
+ if( yypParser->yyidx>yypParser->yyidxMax ){
+ yypParser->yyidxMax = yypParser->yyidx;
+ }
+#endif
+#if YYSTACKDEPTH>0
+ if( yypParser->yyidx>=YYSTACKDEPTH ){
+ yyStackOverflow(yypParser, yypMinor);
+ return;
+ }
+#else
+ if( yypParser->yyidx>=yypParser->yystksz ){
+ yyGrowStack(yypParser);
+ if( yypParser->yyidx>=yypParser->yystksz ){
+ yyStackOverflow(yypParser, yypMinor);
+ return;
+ }
+ }
+#endif
+ yytos = &yypParser->yystack[yypParser->yyidx];
+ yytos->stateno = (YYACTIONTYPE)yyNewState;
+ yytos->major = (YYCODETYPE)yyMajor;
+ yytos->minor = *yypMinor;
+#ifndef NDEBUG
+ if( yyTraceFILE && yypParser->yyidx>0 ){
+ int i;
+ fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+ fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+ for(i=1; i<=yypParser->yyidx; i++)
+ fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+ fprintf(yyTraceFILE,"\n");
+ }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static const struct {
+ YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
+ unsigned char nrhs; /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+ { 75, 1 },
+ { 75, 1 },
+ { 75, 2 },
+ { 75, 2 },
+ { 76, 1 },
+ { 76, 2 },
+ { 76, 3 },
+ { 76, 3 },
+ { 76, 3 },
+ { 80, 1 },
+ { 80, 3 },
+ { 80, 2 },
+ { 80, 3 },
+ { 80, 3 },
+ { 80, 2 },
+ { 77, 1 },
+ { 77, 3 },
+ { 82, 1 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 82, 3 },
+ { 83, 1 },
+ { 83, 5 },
+ { 85, 1 },
+ { 85, 3 },
+ { 86, 1 },
+ { 86, 3 },
+ { 86, 3 },
+ { 87, 1 },
+ { 87, 3 },
+ { 88, 1 },
+ { 88, 3 },
+ { 89, 1 },
+ { 89, 3 },
+ { 90, 1 },
+ { 90, 3 },
+ { 90, 3 },
+ { 91, 1 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 91, 3 },
+ { 92, 1 },
+ { 92, 3 },
+ { 92, 3 },
+ { 92, 3 },
+ { 93, 1 },
+ { 93, 3 },
+ { 93, 3 },
+ { 94, 1 },
+ { 94, 3 },
+ { 94, 3 },
+ { 94, 3 },
+ { 95, 1 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 95, 2 },
+ { 96, 1 },
+ { 96, 2 },
+ { 96, 2 },
+ { 84, 1 },
+ { 84, 1 },
+ { 97, 2 },
+ { 98, 1 },
+ { 98, 2 },
+ { 81, 1 },
+ { 81, 3 },
+ { 81, 1 },
+ { 81, 1 },
+ { 81, 1 },
+ { 81, 1 },
+ { 81, 1 },
+ { 81, 1 },
+ { 81, 1 },
+ { 102, 3 },
+ { 102, 4 },
+ { 102, 3 },
+ { 103, 1 },
+ { 103, 2 },
+ { 104, 1 },
+ { 104, 2 },
+ { 104, 3 },
+ { 101, 3 },
+ { 105, 0 },
+ { 105, 3 },
+ { 106, 3 },
+ { 107, 1 },
+ { 100, 3 },
+ { 100, 2 },
+ { 99, 3 },
+ { 108, 0 },
+ { 108, 1 },
+ { 108, 3 },
+ { 78, 0 },
+ { 78, 1 },
+ { 78, 3 },
+ { 109, 1 },
+ { 109, 1 },
+ { 109, 1 },
+ { 79, 0 },
+ { 79, 1 },
+ { 79, 3 },
+ { 110, 1 },
+ { 110, 3 },
+ { 111, 3 },
+};
+
+static void yy_accept(yyParser*); /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+ yyParser *yypParser, /* The parser */
+ int yyruleno /* Number of the rule by which to reduce */
+){
+ int yygoto; /* The next state */
+ int yyact; /* The next action */
+ YYMINORTYPE yygotominor; /* The LHS of the rule reduced */
+ yyStackEntry *yymsp; /* The top of the parser's stack */
+ int yysize; /* Amount to pop the stack */
+ grn_expr_parserARG_FETCH;
+ yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+ if( yyTraceFILE && yyruleno>=0
+ && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
+ fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+ yyRuleName[yyruleno]);
+ }
+#endif /* NDEBUG */
+
+ /* Silence complaints from purify about yygotominor being uninitialized
+ ** in some cases when it is copied into the stack after the following
+ ** switch. yygotominor is uninitialized when a rule reduces that does
+ ** not set the value of its left-hand side nonterminal. Leaving the
+ ** value of the nonterminal uninitialized is utterly harmless as long
+ ** as the value is never used. So really the only thing this code
+ ** accomplishes is to quieten purify.
+ **
+ ** 2007-01-16: The wireshark project (www.wireshark.org) reports that
+ ** without this code, their parser segfaults. I'm not sure what there
+ ** parser is doing to make this happen. This is the second bug report
+ ** from wireshark this week. Clearly they are stressing Lemon in ways
+ ** that it has not been previously stressed... (SQLite ticket #2172)
+ */
+ /*memset(&yygotominor, 0, sizeof(yygotominor));*/
+ yygotominor = yyzerominor;
+
+
+ switch( yyruleno ){
+ /* Beginning here are the reduction cases. A typical example
+ ** follows:
+ ** case 0:
+ ** #line <lineno> <grammarfile>
+ ** { ... } // User supplied code
+ ** #line <lineno> <thisfile>
+ ** break;
+ */
+ case 5: /* query ::= query query_element */
+#line 46 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2);
+}
+#line 1303 "ecmascript.c"
+ break;
+ case 6: /* query ::= query LOGICAL_AND query_element */
+ case 35: /* logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */ yytestcase(yyruleno==35);
+#line 49 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
+}
+#line 1311 "ecmascript.c"
+ break;
+ case 7: /* query ::= query LOGICAL_AND_NOT query_element */
+ case 36: /* logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */ yytestcase(yyruleno==36);
+#line 52 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
+}
+#line 1319 "ecmascript.c"
+ break;
+ case 8: /* query ::= query LOGICAL_OR query_element */
+ case 33: /* logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */ yytestcase(yyruleno==33);
+#line 55 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
+}
+#line 1327 "ecmascript.c"
+ break;
+ case 11: /* query_element ::= RELATIVE_OP query_element */
+#line 62 "ecmascript.lemon"
+{
+ int mode;
+ GRN_INT32_POP(&efsi->mode_stack, mode);
+}
+#line 1335 "ecmascript.c"
+ break;
+ case 12: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */
+#line 66 "ecmascript.lemon"
+{
+ int mode;
+ grn_obj *c;
+ GRN_PTR_POP(&efsi->column_stack, c);
+ GRN_INT32_POP(&efsi->mode_stack, mode);
+ switch (mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ {
+ int max_interval;
+ GRN_INT32_POP(&efsi->max_interval_stack, max_interval);
+ }
+ break;
+ case GRN_OP_SIMILAR :
+ {
+ int similarity_threshold;
+ GRN_INT32_POP(&efsi->similarity_threshold_stack, similarity_threshold);
+ }
+ break;
+ default :
+ break;
+ }
+}
+#line 1362 "ecmascript.c"
+ break;
+ case 13: /* query_element ::= BRACEL expression BRACER */
+ case 14: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==14);
+#line 89 "ecmascript.lemon"
+{
+ efsi->flags = efsi->default_flags;
+}
+#line 1370 "ecmascript.c"
+ break;
+ case 16: /* expression ::= expression COMMA assignment_expression */
+#line 97 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
+}
+#line 1377 "ecmascript.c"
+ break;
+ case 18: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
+#line 102 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2);
+}
+#line 1384 "ecmascript.c"
+ break;
+ case 19: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
+#line 105 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2);
+}
+#line 1391 "ecmascript.c"
+ break;
+ case 20: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
+#line 108 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2);
+}
+#line 1398 "ecmascript.c"
+ break;
+ case 21: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
+#line 111 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2);
+}
+#line 1405 "ecmascript.c"
+ break;
+ case 22: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
+#line 114 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2);
+}
+#line 1412 "ecmascript.c"
+ break;
+ case 23: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
+#line 117 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2);
+}
+#line 1419 "ecmascript.c"
+ break;
+ case 24: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
+#line 120 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2);
+}
+#line 1426 "ecmascript.c"
+ break;
+ case 25: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
+#line 123 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2);
+}
+#line 1433 "ecmascript.c"
+ break;
+ case 26: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
+#line 126 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2);
+}
+#line 1440 "ecmascript.c"
+ break;
+ case 27: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
+#line 129 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2);
+}
+#line 1447 "ecmascript.c"
+ break;
+ case 28: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
+#line 132 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2);
+}
+#line 1454 "ecmascript.c"
+ break;
+ case 29: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
+#line 135 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2);
+}
+#line 1461 "ecmascript.c"
+ break;
+ case 31: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
+#line 140 "ecmascript.lemon"
+{
+ grn_expr *e = (grn_expr *)efsi->e;
+ e->codes[yymsp[-3].minor.yy0].nargs = yymsp[-1].minor.yy0 - yymsp[-3].minor.yy0;
+ e->codes[yymsp[-1].minor.yy0].nargs = e->codes_curr - yymsp[-1].minor.yy0 - 1;
+}
+#line 1470 "ecmascript.c"
+ break;
+ case 38: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
+#line 160 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2);
+}
+#line 1477 "ecmascript.c"
+ break;
+ case 40: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
+#line 165 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2);
+}
+#line 1484 "ecmascript.c"
+ break;
+ case 42: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
+#line 170 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2);
+}
+#line 1491 "ecmascript.c"
+ break;
+ case 44: /* equality_expression ::= equality_expression EQUAL relational_expression */
+#line 175 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2);
+}
+#line 1498 "ecmascript.c"
+ break;
+ case 45: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */
+#line 178 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2);
+}
+#line 1505 "ecmascript.c"
+ break;
+ case 47: /* relational_expression ::= relational_expression LESS shift_expression */
+#line 183 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2);
+}
+#line 1512 "ecmascript.c"
+ break;
+ case 48: /* relational_expression ::= relational_expression GREATER shift_expression */
+#line 186 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2);
+}
+#line 1519 "ecmascript.c"
+ break;
+ case 49: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */
+#line 189 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2);
+}
+#line 1526 "ecmascript.c"
+ break;
+ case 50: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
+#line 192 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2);
+}
+#line 1533 "ecmascript.c"
+ break;
+ case 51: /* relational_expression ::= relational_expression IN shift_expression */
+#line 195 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2);
+}
+#line 1540 "ecmascript.c"
+ break;
+ case 52: /* relational_expression ::= relational_expression MATCH shift_expression */
+ case 130: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==130);
+#line 198 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
+}
+#line 1548 "ecmascript.c"
+ break;
+ case 53: /* relational_expression ::= relational_expression NEAR shift_expression */
+#line 201 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR, 2);
+}
+#line 1555 "ecmascript.c"
+ break;
+ case 54: /* relational_expression ::= relational_expression NEAR2 shift_expression */
+#line 204 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2);
+}
+#line 1562 "ecmascript.c"
+ break;
+ case 55: /* relational_expression ::= relational_expression SIMILAR shift_expression */
+#line 207 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 2);
+}
+#line 1569 "ecmascript.c"
+ break;
+ case 56: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
+#line 210 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2);
+}
+#line 1576 "ecmascript.c"
+ break;
+ case 57: /* relational_expression ::= relational_expression LCP shift_expression */
+#line 213 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2);
+}
+#line 1583 "ecmascript.c"
+ break;
+ case 58: /* relational_expression ::= relational_expression PREFIX shift_expression */
+#line 216 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2);
+}
+#line 1590 "ecmascript.c"
+ break;
+ case 59: /* relational_expression ::= relational_expression SUFFIX shift_expression */
+#line 219 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2);
+}
+#line 1597 "ecmascript.c"
+ break;
+ case 61: /* shift_expression ::= shift_expression SHIFTL additive_expression */
+#line 224 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2);
+}
+#line 1604 "ecmascript.c"
+ break;
+ case 62: /* shift_expression ::= shift_expression SHIFTR additive_expression */
+#line 227 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2);
+}
+#line 1611 "ecmascript.c"
+ break;
+ case 63: /* shift_expression ::= shift_expression SHIFTRR additive_expression */
+#line 230 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2);
+}
+#line 1618 "ecmascript.c"
+ break;
+ case 65: /* additive_expression ::= additive_expression PLUS multiplicative_expression */
+ case 127: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==127);
+#line 235 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
+}
+#line 1626 "ecmascript.c"
+ break;
+ case 66: /* additive_expression ::= additive_expression MINUS multiplicative_expression */
+#line 238 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2);
+}
+#line 1633 "ecmascript.c"
+ break;
+ case 68: /* multiplicative_expression ::= multiplicative_expression STAR unary_expression */
+ case 129: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==129);
+#line 243 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
+}
+#line 1641 "ecmascript.c"
+ break;
+ case 69: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
+#line 246 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2);
+}
+#line 1648 "ecmascript.c"
+ break;
+ case 70: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */
+#line 249 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2);
+}
+#line 1655 "ecmascript.c"
+ break;
+ case 72: /* unary_expression ::= DELETE unary_expression */
+#line 254 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1);
+}
+#line 1662 "ecmascript.c"
+ break;
+ case 73: /* unary_expression ::= INCR unary_expression */
+#line 257 "ecmascript.lemon"
+{
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be incremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR, 1);
+ }
+}
+#line 1683 "ecmascript.c"
+ break;
+ case 74: /* unary_expression ::= DECR unary_expression */
+#line 274 "ecmascript.lemon"
+{
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be decremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR, 1);
+ }
+}
+#line 1704 "ecmascript.c"
+ break;
+ case 75: /* unary_expression ::= PLUS unary_expression */
+#line 291 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1);
+}
+#line 1711 "ecmascript.c"
+ break;
+ case 76: /* unary_expression ::= MINUS unary_expression */
+#line 294 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1);
+}
+#line 1718 "ecmascript.c"
+ break;
+ case 77: /* unary_expression ::= NOT unary_expression */
+#line 297 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1);
+}
+#line 1725 "ecmascript.c"
+ break;
+ case 78: /* unary_expression ::= BITWISE_NOT unary_expression */
+#line 300 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1);
+}
+#line 1732 "ecmascript.c"
+ break;
+ case 79: /* unary_expression ::= ADJUST unary_expression */
+#line 303 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1);
+}
+#line 1739 "ecmascript.c"
+ break;
+ case 80: /* unary_expression ::= EXACT unary_expression */
+#line 306 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1);
+}
+#line 1746 "ecmascript.c"
+ break;
+ case 81: /* unary_expression ::= PARTIAL unary_expression */
+#line 309 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1);
+}
+#line 1753 "ecmascript.c"
+ break;
+ case 82: /* unary_expression ::= UNSPLIT unary_expression */
+#line 312 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1);
+}
+#line 1760 "ecmascript.c"
+ break;
+ case 84: /* postfix_expression ::= lefthand_side_expression INCR */
+#line 317 "ecmascript.lemon"
+{
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be incremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR_POST, 1);
+ }
+}
+#line 1781 "ecmascript.c"
+ break;
+ case 85: /* postfix_expression ::= lefthand_side_expression DECR */
+#line 334 "ecmascript.lemon"
+{
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be decremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR_POST, 1);
+ }
+}
+#line 1802 "ecmascript.c"
+ break;
+ case 88: /* call_expression ::= member_expression arguments */
+#line 355 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0);
+}
+#line 1809 "ecmascript.c"
+ break;
+ case 113: /* member_expression_part ::= BRACKETL expression BRACKETR */
+#line 391 "ecmascript.lemon"
+{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
+}
+#line 1816 "ecmascript.c"
+ break;
+ case 115: /* arguments ::= PARENL argument_list PARENR */
+#line 396 "ecmascript.lemon"
+{ yygotominor.yy0 = yymsp[-1].minor.yy0; }
+#line 1821 "ecmascript.c"
+ break;
+ case 116: /* argument_list ::= */
+#line 397 "ecmascript.lemon"
+{ yygotominor.yy0 = 0; }
+#line 1826 "ecmascript.c"
+ break;
+ case 117: /* argument_list ::= assignment_expression */
+#line 398 "ecmascript.lemon"
+{ yygotominor.yy0 = 1; }
+#line 1831 "ecmascript.c"
+ break;
+ case 118: /* argument_list ::= argument_list COMMA assignment_expression */
+#line 399 "ecmascript.lemon"
+{ yygotominor.yy0 = yymsp[-2].minor.yy0 + 1; }
+#line 1836 "ecmascript.c"
+ break;
+ case 119: /* output_columns ::= */
+#line 401 "ecmascript.lemon"
+{
+ yygotominor.yy0 = 0;
+}
+#line 1843 "ecmascript.c"
+ break;
+ case 120: /* output_columns ::= output_column */
+#line 404 "ecmascript.lemon"
+{
+ if (yymsp[0].minor.yy0) {
+ yygotominor.yy0 = 0;
+ } else {
+ yygotominor.yy0 = 1;
+ }
+}
+#line 1854 "ecmascript.c"
+ break;
+ case 121: /* output_columns ::= output_columns COMMA output_column */
+#line 412 "ecmascript.lemon"
+{
+ if (yymsp[0].minor.yy0) {
+ yygotominor.yy0 = yymsp[-2].minor.yy0;
+ } else {
+ if (yymsp[-2].minor.yy0 == 1) {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
+ }
+ yygotominor.yy0 = 1;
+ }
+}
+#line 1868 "ecmascript.c"
+ break;
+ case 122: /* output_column ::= STAR */
+#line 423 "ecmascript.lemon"
+{
+ grn_ctx *ctx = efsi->ctx;
+ grn_obj *expr = efsi->e;
+ grn_expr *e = (grn_expr *)expr;
+ grn_obj *variable = grn_expr_get_var_by_offset(ctx, expr, 0);
+ if (variable) {
+ grn_id table_id = GRN_OBJ_GET_DOMAIN(variable);
+ grn_obj *table = grn_ctx_at(ctx, table_id);
+ grn_obj columns_buffer;
+ grn_obj **columns;
+ int i, n_columns;
+
+ GRN_PTR_INIT(&columns_buffer, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_obj_columns(ctx, table, "*", strlen("*"), &columns_buffer);
+ n_columns = GRN_BULK_VSIZE(&columns_buffer) / sizeof(grn_obj *);
+ columns = (grn_obj **)GRN_BULK_HEAD(&columns_buffer);
+
+ for (i = 0; i < n_columns; i++) {
+ if (i > 0) {
+ grn_expr_append_op(ctx, expr, GRN_OP_COMMA, 2);
+ }
+ grn_expr_append_const(ctx, expr, columns[i], GRN_OP_GET_VALUE, 1);
+ GRN_PTR_PUT(ctx, &e->objs, columns[i]);
+ }
+
+ GRN_OBJ_FIN(ctx, &columns_buffer);
+
+ if (n_columns > 0) {
+ yygotominor.yy0 = GRN_FALSE;
+ } else {
+ yygotominor.yy0 = GRN_TRUE;
+ }
+ } else {
+ /* TODO: report error */
+ yygotominor.yy0 = GRN_TRUE;
+ }
+}
+#line 1909 "ecmascript.c"
+ break;
+ case 123: /* output_column ::= NONEXISTENT_COLUMN */
+#line 460 "ecmascript.lemon"
+{
+ yygotominor.yy0 = GRN_TRUE;
+}
+#line 1916 "ecmascript.c"
+ break;
+ case 124: /* output_column ::= assignment_expression */
+#line 463 "ecmascript.lemon"
+{
+ yygotominor.yy0 = GRN_FALSE;
+}
+#line 1923 "ecmascript.c"
+ break;
+ default:
+ /* (0) input ::= query */ yytestcase(yyruleno==0);
+ /* (1) input ::= expression */ yytestcase(yyruleno==1);
+ /* (2) input ::= START_OUTPUT_COLUMNS output_columns */ yytestcase(yyruleno==2);
+ /* (3) input ::= START_ADJUSTER adjuster */ yytestcase(yyruleno==3);
+ /* (4) query ::= query_element */ yytestcase(yyruleno==4);
+ /* (9) query_element ::= QSTRING */ yytestcase(yyruleno==9);
+ /* (10) query_element ::= PARENL query PARENR */ yytestcase(yyruleno==10);
+ /* (15) expression ::= assignment_expression */ yytestcase(yyruleno==15);
+ /* (17) assignment_expression ::= conditional_expression */ yytestcase(yyruleno==17);
+ /* (30) conditional_expression ::= logical_or_expression */ yytestcase(yyruleno==30);
+ /* (32) logical_or_expression ::= logical_and_expression */ yytestcase(yyruleno==32);
+ /* (34) logical_and_expression ::= bitwise_or_expression */ yytestcase(yyruleno==34);
+ /* (37) bitwise_or_expression ::= bitwise_xor_expression */ yytestcase(yyruleno==37);
+ /* (39) bitwise_xor_expression ::= bitwise_and_expression */ yytestcase(yyruleno==39);
+ /* (41) bitwise_and_expression ::= equality_expression */ yytestcase(yyruleno==41);
+ /* (43) equality_expression ::= relational_expression */ yytestcase(yyruleno==43);
+ /* (46) relational_expression ::= shift_expression */ yytestcase(yyruleno==46);
+ /* (60) shift_expression ::= additive_expression */ yytestcase(yyruleno==60);
+ /* (64) additive_expression ::= multiplicative_expression */ yytestcase(yyruleno==64);
+ /* (67) multiplicative_expression ::= unary_expression */ yytestcase(yyruleno==67);
+ /* (71) unary_expression ::= postfix_expression */ yytestcase(yyruleno==71);
+ /* (83) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==83);
+ /* (86) lefthand_side_expression ::= call_expression */ yytestcase(yyruleno==86);
+ /* (87) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==87);
+ /* (89) member_expression ::= primary_expression */ yytestcase(yyruleno==89);
+ /* (90) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==90);
+ /* (91) primary_expression ::= object_literal */ yytestcase(yyruleno==91);
+ /* (92) primary_expression ::= PARENL expression PARENR */ yytestcase(yyruleno==92);
+ /* (93) primary_expression ::= IDENTIFIER */ yytestcase(yyruleno==93);
+ /* (94) primary_expression ::= array_literal */ yytestcase(yyruleno==94);
+ /* (95) primary_expression ::= DECIMAL */ yytestcase(yyruleno==95);
+ /* (96) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==96);
+ /* (97) primary_expression ::= STRING */ yytestcase(yyruleno==97);
+ /* (98) primary_expression ::= BOOLEAN */ yytestcase(yyruleno==98);
+ /* (99) primary_expression ::= NULL */ yytestcase(yyruleno==99);
+ /* (100) array_literal ::= BRACKETL elision BRACKETR */ yytestcase(yyruleno==100);
+ /* (101) array_literal ::= BRACKETL element_list elision BRACKETR */ yytestcase(yyruleno==101);
+ /* (102) array_literal ::= BRACKETL element_list BRACKETR */ yytestcase(yyruleno==102);
+ /* (103) elision ::= COMMA */ yytestcase(yyruleno==103);
+ /* (104) elision ::= elision COMMA */ yytestcase(yyruleno==104);
+ /* (105) element_list ::= assignment_expression */ yytestcase(yyruleno==105);
+ /* (106) element_list ::= elision assignment_expression */ yytestcase(yyruleno==106);
+ /* (107) element_list ::= element_list elision assignment_expression */ yytestcase(yyruleno==107);
+ /* (108) object_literal ::= BRACEL property_name_and_value_list BRACER */ yytestcase(yyruleno==108);
+ /* (109) property_name_and_value_list ::= */ yytestcase(yyruleno==109);
+ /* (110) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==110);
+ /* (111) property_name_and_value ::= property_name COLON assignment_expression */ yytestcase(yyruleno==111);
+ /* (112) property_name ::= IDENTIFIER|STRING|DECIMAL */ yytestcase(yyruleno==112);
+ /* (114) member_expression_part ::= DOT IDENTIFIER */ yytestcase(yyruleno==114);
+ /* (125) adjuster ::= */ yytestcase(yyruleno==125);
+ /* (126) adjuster ::= adjust_expression */ yytestcase(yyruleno==126);
+ /* (128) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==128);
+ break;
+ };
+ yygoto = yyRuleInfo[yyruleno].lhs;
+ yysize = yyRuleInfo[yyruleno].nrhs;
+ yypParser->yyidx -= yysize;
+ yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
+ if( yyact < YYNSTATE ){
+#ifdef NDEBUG
+ /* If we are not debugging and the reduce action popped at least
+ ** one element off the stack, then we can push the new element back
+ ** onto the stack here, and skip the stack overflow test in yy_shift().
+ ** That gives a significant speed improvement. */
+ if( yysize ){
+ yypParser->yyidx++;
+ yymsp -= yysize-1;
+ yymsp->stateno = (YYACTIONTYPE)yyact;
+ yymsp->major = (YYCODETYPE)yygoto;
+ yymsp->minor = yygotominor;
+ }else
+#endif
+ {
+ yy_shift(yypParser,yyact,yygoto,&yygotominor);
+ }
+ }else{
+ assert( yyact == YYNSTATE + YYNRULE + 1 );
+ yy_accept(yypParser);
+ }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+#ifndef YYNOERRORRECOVERY
+static void yy_parse_failed(
+ yyParser *yypParser /* The parser */
+){
+ grn_expr_parserARG_FETCH;
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+ }
+#endif
+ while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+ /* Here code is inserted which will be executed whenever the
+ ** parser fails */
+ grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+#endif /* YYNOERRORRECOVERY */
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+ yyParser *yypParser, /* The parser */
+ int yymajor, /* The major type of the error token */
+ YYMINORTYPE yyminor /* The minor type of the error token */
+){
+ grn_expr_parserARG_FETCH;
+#define TOKEN (yyminor.yy0)
+#line 17 "ecmascript.lemon"
+
+ {
+ grn_ctx *ctx = efsi->ctx;
+ if (ctx->rc == GRN_SUCCESS) {
+ grn_obj message;
+ GRN_TEXT_INIT(&message, 0);
+ GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ if (efsi->cur < efsi->str_end) {
+ GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ GRN_TEXT_PUT(ctx, &message,
+ efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
+ } else {
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ }
+ ERR(GRN_SYNTAX_ERROR, "Syntax error: <%.*s>",
+ (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message));
+ GRN_OBJ_FIN(ctx, &message);
+ }
+ }
+#line 2059 "ecmascript.c"
+ grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+ yyParser *yypParser /* The parser */
+){
+ grn_expr_parserARG_FETCH;
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+ }
+#endif
+ while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+ /* Here code is inserted which will be executed whenever the
+ ** parser accepts */
+ grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "grn_expr_parserAlloc" which describes the current state of the parser.
+** The second argument is the major token number. The third is
+** the minor token. The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void grn_expr_parser(
+ void *yyp, /* The parser */
+ int yymajor, /* The major token code number */
+ grn_expr_parserTOKENTYPE yyminor /* The value for the token */
+ grn_expr_parserARG_PDECL /* Optional %extra_argument parameter */
+){
+ YYMINORTYPE yyminorunion;
+ int yyact; /* The parser action. */
+ int yyendofinput; /* True if we are at the end of input */
+#ifdef YYERRORSYMBOL
+ int yyerrorhit = 0; /* True if yymajor has invoked an error */
+#endif
+ yyParser *yypParser; /* The parser */
+
+ /* (re)initialize the parser, if necessary */
+ yypParser = (yyParser*)yyp;
+ if( yypParser->yyidx<0 ){
+#if YYSTACKDEPTH<=0
+ if( yypParser->yystksz <=0 ){
+ /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
+ yyminorunion = yyzerominor;
+ yyStackOverflow(yypParser, &yyminorunion);
+ return;
+ }
+#endif
+ yypParser->yyidx = 0;
+ yypParser->yyerrcnt = -1;
+ yypParser->yystack[0].stateno = 0;
+ yypParser->yystack[0].major = 0;
+ }
+ yyminorunion.yy0 = yyminor;
+ yyendofinput = (yymajor==0);
+ grn_expr_parserARG_STORE;
+
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+ }
+#endif
+
+ do{
+ yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
+ if( yyact<YYNSTATE ){
+ assert( !yyendofinput ); /* Impossible to shift the $ token */
+ yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+ yypParser->yyerrcnt--;
+ yymajor = YYNOCODE;
+ }else if( yyact < YYNSTATE + YYNRULE ){
+ yy_reduce(yypParser,yyact-YYNSTATE);
+ }else{
+ assert( yyact == YY_ERROR_ACTION );
+#ifdef YYERRORSYMBOL
+ int yymx;
+#endif
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+ }
+#endif
+#ifdef YYERRORSYMBOL
+ /* A syntax error has occurred.
+ ** The response to an error depends upon whether or not the
+ ** grammar defines an error token "ERROR".
+ **
+ ** This is what we do if the grammar does define ERROR:
+ **
+ ** * Call the %syntax_error function.
+ **
+ ** * Begin popping the stack until we enter a state where
+ ** it is legal to shift the error symbol, then shift
+ ** the error symbol.
+ **
+ ** * Set the error count to three.
+ **
+ ** * Begin accepting and shifting new tokens. No new error
+ ** processing will occur until three tokens have been
+ ** shifted successfully.
+ **
+ */
+ if( yypParser->yyerrcnt<0 ){
+ yy_syntax_error(yypParser,yymajor,yyminorunion);
+ }
+ yymx = yypParser->yystack[yypParser->yyidx].major;
+ if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+ if( yyTraceFILE ){
+ fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+ yyTracePrompt,yyTokenName[yymajor]);
+ }
+#endif
+ yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
+ yymajor = YYNOCODE;
+ }else{
+ while(
+ yypParser->yyidx >= 0 &&
+ yymx != YYERRORSYMBOL &&
+ (yyact = yy_find_reduce_action(
+ yypParser->yystack[yypParser->yyidx].stateno,
+ YYERRORSYMBOL)) >= YYNSTATE
+ ){
+ yy_pop_parser_stack(yypParser);
+ }
+ if( yypParser->yyidx < 0 || yymajor==0 ){
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+ yy_parse_failed(yypParser);
+ yymajor = YYNOCODE;
+ }else if( yymx!=YYERRORSYMBOL ){
+ YYMINORTYPE u2;
+ u2.YYERRSYMDT = 0;
+ yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+ }
+ }
+ yypParser->yyerrcnt = 3;
+ yyerrorhit = 1;
+#elif defined(YYNOERRORRECOVERY)
+ /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
+ ** do any kind of error recovery. Instead, simply invoke the syntax
+ ** error routine and continue going as if nothing had happened.
+ **
+ ** Applications can set this macro (for example inside %include) if
+ ** they intend to abandon the parse upon the first syntax error seen.
+ */
+ yy_syntax_error(yypParser,yymajor,yyminorunion);
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+ yymajor = YYNOCODE;
+
+#else /* YYERRORSYMBOL is not defined */
+ /* This is what we do if the grammar does not define ERROR:
+ **
+ ** * Report an error message, and throw away the input token.
+ **
+ ** * If the input token is $, then fail the parse.
+ **
+ ** As before, subsequent error messages are suppressed until
+ ** three input tokens have been successfully shifted.
+ */
+ if( yypParser->yyerrcnt<=0 ){
+ yy_syntax_error(yypParser,yymajor,yyminorunion);
+ }
+ yypParser->yyerrcnt = 3;
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
+ if( yyendofinput ){
+ yy_parse_failed(yypParser);
+ }
+ yymajor = YYNOCODE;
+#endif
+ }
+ }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+ return;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/ecmascript.h b/storage/mroonga/vendor/groonga/lib/ecmascript.h
new file mode 100644
index 00000000000..c8e74b2fb8f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ecmascript.h
@@ -0,0 +1,72 @@
+#define GRN_EXPR_TOKEN_START_OUTPUT_COLUMNS 1
+#define GRN_EXPR_TOKEN_START_ADJUSTER 2
+#define GRN_EXPR_TOKEN_LOGICAL_AND 3
+#define GRN_EXPR_TOKEN_LOGICAL_AND_NOT 4
+#define GRN_EXPR_TOKEN_LOGICAL_OR 5
+#define GRN_EXPR_TOKEN_QSTRING 6
+#define GRN_EXPR_TOKEN_PARENL 7
+#define GRN_EXPR_TOKEN_PARENR 8
+#define GRN_EXPR_TOKEN_RELATIVE_OP 9
+#define GRN_EXPR_TOKEN_IDENTIFIER 10
+#define GRN_EXPR_TOKEN_BRACEL 11
+#define GRN_EXPR_TOKEN_BRACER 12
+#define GRN_EXPR_TOKEN_EVAL 13
+#define GRN_EXPR_TOKEN_COMMA 14
+#define GRN_EXPR_TOKEN_ASSIGN 15
+#define GRN_EXPR_TOKEN_STAR_ASSIGN 16
+#define GRN_EXPR_TOKEN_SLASH_ASSIGN 17
+#define GRN_EXPR_TOKEN_MOD_ASSIGN 18
+#define GRN_EXPR_TOKEN_PLUS_ASSIGN 19
+#define GRN_EXPR_TOKEN_MINUS_ASSIGN 20
+#define GRN_EXPR_TOKEN_SHIFTL_ASSIGN 21
+#define GRN_EXPR_TOKEN_SHIFTR_ASSIGN 22
+#define GRN_EXPR_TOKEN_SHIFTRR_ASSIGN 23
+#define GRN_EXPR_TOKEN_AND_ASSIGN 24
+#define GRN_EXPR_TOKEN_XOR_ASSIGN 25
+#define GRN_EXPR_TOKEN_OR_ASSIGN 26
+#define GRN_EXPR_TOKEN_QUESTION 27
+#define GRN_EXPR_TOKEN_COLON 28
+#define GRN_EXPR_TOKEN_BITWISE_OR 29
+#define GRN_EXPR_TOKEN_BITWISE_XOR 30
+#define GRN_EXPR_TOKEN_BITWISE_AND 31
+#define GRN_EXPR_TOKEN_EQUAL 32
+#define GRN_EXPR_TOKEN_NOT_EQUAL 33
+#define GRN_EXPR_TOKEN_LESS 34
+#define GRN_EXPR_TOKEN_GREATER 35
+#define GRN_EXPR_TOKEN_LESS_EQUAL 36
+#define GRN_EXPR_TOKEN_GREATER_EQUAL 37
+#define GRN_EXPR_TOKEN_IN 38
+#define GRN_EXPR_TOKEN_MATCH 39
+#define GRN_EXPR_TOKEN_NEAR 40
+#define GRN_EXPR_TOKEN_NEAR2 41
+#define GRN_EXPR_TOKEN_SIMILAR 42
+#define GRN_EXPR_TOKEN_TERM_EXTRACT 43
+#define GRN_EXPR_TOKEN_LCP 44
+#define GRN_EXPR_TOKEN_PREFIX 45
+#define GRN_EXPR_TOKEN_SUFFIX 46
+#define GRN_EXPR_TOKEN_SHIFTL 47
+#define GRN_EXPR_TOKEN_SHIFTR 48
+#define GRN_EXPR_TOKEN_SHIFTRR 49
+#define GRN_EXPR_TOKEN_PLUS 50
+#define GRN_EXPR_TOKEN_MINUS 51
+#define GRN_EXPR_TOKEN_STAR 52
+#define GRN_EXPR_TOKEN_SLASH 53
+#define GRN_EXPR_TOKEN_MOD 54
+#define GRN_EXPR_TOKEN_DELETE 55
+#define GRN_EXPR_TOKEN_INCR 56
+#define GRN_EXPR_TOKEN_DECR 57
+#define GRN_EXPR_TOKEN_NOT 58
+#define GRN_EXPR_TOKEN_BITWISE_NOT 59
+#define GRN_EXPR_TOKEN_ADJUST 60
+#define GRN_EXPR_TOKEN_EXACT 61
+#define GRN_EXPR_TOKEN_PARTIAL 62
+#define GRN_EXPR_TOKEN_UNSPLIT 63
+#define GRN_EXPR_TOKEN_DECIMAL 64
+#define GRN_EXPR_TOKEN_HEX_INTEGER 65
+#define GRN_EXPR_TOKEN_STRING 66
+#define GRN_EXPR_TOKEN_BOOLEAN 67
+#define GRN_EXPR_TOKEN_NULL 68
+#define GRN_EXPR_TOKEN_BRACKETL 69
+#define GRN_EXPR_TOKEN_BRACKETR 70
+#define GRN_EXPR_TOKEN_DOT 71
+#define GRN_EXPR_TOKEN_NONEXISTENT_COLUMN 72
diff --git a/storage/mroonga/vendor/groonga/lib/ecmascript.lemon b/storage/mroonga/vendor/groonga/lib/ecmascript.lemon
new file mode 100644
index 00000000000..322d7ac8264
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ecmascript.lemon
@@ -0,0 +1,480 @@
+/* -*- mode: c; c-basic-offset: 2 -*- */
+%name grn_expr_parser
+%token_prefix GRN_EXPR_TOKEN_
+%include {
+#define assert GRN_ASSERT
+}
+
+%token_type { int }
+
+%type suppress_unused_variable_warning { void * }
+%destructor suppress_unused_variable_warning {
+ (void)efsi;
+}
+
+%extra_argument { efs_info *efsi }
+
+%syntax_error {
+ {
+ grn_ctx *ctx = efsi->ctx;
+ if (ctx->rc == GRN_SUCCESS) {
+ grn_obj message;
+ GRN_TEXT_INIT(&message, 0);
+ GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ if (efsi->cur < efsi->str_end) {
+ GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ GRN_TEXT_PUT(ctx, &message,
+ efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
+ } else {
+ GRN_TEXT_PUTC(ctx, &message, '|');
+ }
+ ERR(GRN_SYNTAX_ERROR, "Syntax error: <%.*s>",
+ (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message));
+ GRN_OBJ_FIN(ctx, &message);
+ }
+ }
+}
+
+input ::= query.
+input ::= expression.
+input ::= START_OUTPUT_COLUMNS output_columns.
+input ::= START_ADJUSTER adjuster.
+
+query ::= query_element.
+query ::= query query_element. {
+ grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2);
+}
+query ::= query LOGICAL_AND query_element. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
+}
+query ::= query LOGICAL_AND_NOT query_element.{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
+}
+query ::= query LOGICAL_OR query_element.{
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
+}
+
+query_element ::= QSTRING.
+query_element ::= PARENL query PARENR.
+
+query_element ::= RELATIVE_OP query_element.{
+ int mode;
+ GRN_INT32_POP(&efsi->mode_stack, mode);
+}
+query_element ::= IDENTIFIER RELATIVE_OP query_element. {
+ int mode;
+ grn_obj *c;
+ GRN_PTR_POP(&efsi->column_stack, c);
+ GRN_INT32_POP(&efsi->mode_stack, mode);
+ switch (mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ {
+ int max_interval;
+ GRN_INT32_POP(&efsi->max_interval_stack, max_interval);
+ }
+ break;
+ case GRN_OP_SIMILAR :
+ {
+ int similarity_threshold;
+ GRN_INT32_POP(&efsi->similarity_threshold_stack, similarity_threshold);
+ }
+ break;
+ default :
+ break;
+ }
+}
+query_element ::= BRACEL expression BRACER. {
+ efsi->flags = efsi->default_flags;
+}
+query_element ::= EVAL primary_expression. {
+ efsi->flags = efsi->default_flags;
+}
+
+expression ::= assignment_expression.
+expression ::= expression COMMA assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
+}
+
+assignment_expression ::= conditional_expression.
+assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2);
+}
+assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2);
+}
+
+conditional_expression ::= logical_or_expression.
+conditional_expression ::= logical_or_expression QUESTION(A) assignment_expression COLON(B) assignment_expression. {
+ grn_expr *e = (grn_expr *)efsi->e;
+ e->codes[A].nargs = B - A;
+ e->codes[B].nargs = e->codes_curr - B - 1;
+}
+
+logical_or_expression ::= logical_and_expression.
+logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
+}
+
+logical_and_expression ::= bitwise_or_expression.
+logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
+}
+logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
+}
+
+bitwise_or_expression ::= bitwise_xor_expression.
+bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2);
+}
+
+bitwise_xor_expression ::= bitwise_and_expression.
+bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2);
+}
+
+bitwise_and_expression ::= equality_expression.
+bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2);
+}
+
+equality_expression ::= relational_expression.
+equality_expression ::= equality_expression EQUAL relational_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2);
+}
+equality_expression ::= equality_expression NOT_EQUAL relational_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2);
+}
+
+relational_expression ::= shift_expression.
+relational_expression ::= relational_expression LESS shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2);
+}
+relational_expression ::= relational_expression GREATER shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2);
+}
+relational_expression ::= relational_expression LESS_EQUAL shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2);
+}
+relational_expression ::= relational_expression GREATER_EQUAL shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2);
+}
+relational_expression ::= relational_expression IN shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2);
+}
+relational_expression ::= relational_expression MATCH shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
+}
+relational_expression ::= relational_expression NEAR shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR, 2);
+}
+relational_expression ::= relational_expression NEAR2 shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2);
+}
+relational_expression ::= relational_expression SIMILAR shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 2);
+}
+relational_expression ::= relational_expression TERM_EXTRACT shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2);
+}
+relational_expression ::= relational_expression LCP shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2);
+}
+relational_expression ::= relational_expression PREFIX shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2);
+}
+relational_expression ::= relational_expression SUFFIX shift_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2);
+}
+
+shift_expression ::= additive_expression.
+shift_expression ::= shift_expression SHIFTL additive_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2);
+}
+shift_expression ::= shift_expression SHIFTR additive_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2);
+}
+shift_expression ::= shift_expression SHIFTRR additive_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2);
+}
+
+additive_expression ::= multiplicative_expression.
+additive_expression ::= additive_expression PLUS multiplicative_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
+}
+additive_expression ::= additive_expression MINUS multiplicative_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2);
+}
+
+multiplicative_expression ::= unary_expression.
+multiplicative_expression ::= multiplicative_expression STAR unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
+}
+multiplicative_expression ::= multiplicative_expression SLASH unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2);
+}
+multiplicative_expression ::= multiplicative_expression MOD unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2);
+}
+
+unary_expression ::= postfix_expression.
+unary_expression ::= DELETE unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1);
+}
+unary_expression ::= INCR unary_expression. {
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be incremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR, 1);
+ }
+}
+unary_expression ::= DECR unary_expression. {
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be decremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR, 1);
+ }
+}
+unary_expression ::= PLUS unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1);
+}
+unary_expression ::= MINUS unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1);
+}
+unary_expression ::= NOT unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1);
+}
+unary_expression ::= BITWISE_NOT unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1);
+}
+unary_expression ::= ADJUST unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1);
+}
+unary_expression ::= EXACT unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1);
+}
+unary_expression ::= PARTIAL unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1);
+}
+unary_expression ::= UNSPLIT unary_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1);
+}
+
+postfix_expression ::= lefthand_side_expression.
+postfix_expression ::= lefthand_side_expression INCR. {
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be incremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR_POST, 1);
+ }
+}
+postfix_expression ::= lefthand_side_expression DECR. {
+ grn_ctx *ctx = efsi->ctx;
+ grn_expr *e = (grn_expr *)(efsi->e);
+ grn_expr_dfi *dfi_;
+ unsigned int const_p;
+
+ DFI_POP(e, dfi_);
+ const_p = CONSTP(dfi_->code->value);
+ DFI_PUT(e, dfi_->type, dfi_->domain, dfi_->code);
+ if (const_p) {
+ ERR(GRN_SYNTAX_ERROR,
+ "constant can't be decremented (%.*s)",
+ (int)(efsi->str_end - efsi->str), efsi->str);
+ } else {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR_POST, 1);
+ }
+}
+
+lefthand_side_expression ::= call_expression.
+lefthand_side_expression ::= member_expression.
+
+call_expression ::= member_expression arguments(A). {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, A);
+}
+
+member_expression ::= primary_expression.
+member_expression ::= member_expression member_expression_part.
+
+primary_expression ::= object_literal.
+primary_expression ::= PARENL expression PARENR.
+primary_expression ::= IDENTIFIER.
+primary_expression ::= array_literal.
+primary_expression ::= DECIMAL.
+primary_expression ::= HEX_INTEGER.
+primary_expression ::= STRING.
+primary_expression ::= BOOLEAN.
+primary_expression ::= NULL.
+
+array_literal ::= BRACKETL elision BRACKETR.
+array_literal ::= BRACKETL element_list elision BRACKETR.
+array_literal ::= BRACKETL element_list BRACKETR.
+
+elision ::= COMMA.
+elision ::= elision COMMA.
+
+element_list ::= assignment_expression.
+element_list ::= elision assignment_expression.
+element_list ::= element_list elision assignment_expression.
+
+object_literal ::= BRACEL property_name_and_value_list BRACER.
+
+property_name_and_value_list ::= .
+property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value.
+
+property_name_and_value ::= property_name COLON assignment_expression.
+property_name ::= IDENTIFIER|STRING|DECIMAL.
+
+member_expression_part ::= BRACKETL expression BRACKETR. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
+}
+member_expression_part ::= DOT IDENTIFIER.
+
+arguments(A) ::= PARENL argument_list(B) PARENR. { A = B; }
+argument_list(A) ::= . { A = 0; }
+argument_list(A) ::= assignment_expression. { A = 1; }
+argument_list(A) ::= argument_list(B) COMMA assignment_expression. { A = B + 1; }
+
+output_columns(N_STACKED_COLUMNS) ::= . {
+ N_STACKED_COLUMNS = 0;
+}
+output_columns(N_STACKED_COLUMNS) ::= output_column(IGNORED). {
+ if (IGNORED) {
+ N_STACKED_COLUMNS = 0;
+ } else {
+ N_STACKED_COLUMNS = 1;
+ }
+}
+output_columns(N_STACKED_COLUMNS) ::=
+ output_columns(SUB_N_STACKED_COLUMNS) COMMA output_column(IGNORED). {
+ if (IGNORED) {
+ N_STACKED_COLUMNS = SUB_N_STACKED_COLUMNS;
+ } else {
+ if (SUB_N_STACKED_COLUMNS == 1) {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
+ }
+ N_STACKED_COLUMNS = 1;
+ }
+}
+
+output_column(IGNORED) ::= STAR. {
+ grn_ctx *ctx = efsi->ctx;
+ grn_obj *expr = efsi->e;
+ grn_expr *e = (grn_expr *)expr;
+ grn_obj *variable = grn_expr_get_var_by_offset(ctx, expr, 0);
+ if (variable) {
+ grn_id table_id = GRN_OBJ_GET_DOMAIN(variable);
+ grn_obj *table = grn_ctx_at(ctx, table_id);
+ grn_obj columns_buffer;
+ grn_obj **columns;
+ int i, n_columns;
+
+ GRN_PTR_INIT(&columns_buffer, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_obj_columns(ctx, table, "*", strlen("*"), &columns_buffer);
+ n_columns = GRN_BULK_VSIZE(&columns_buffer) / sizeof(grn_obj *);
+ columns = (grn_obj **)GRN_BULK_HEAD(&columns_buffer);
+
+ for (i = 0; i < n_columns; i++) {
+ if (i > 0) {
+ grn_expr_append_op(ctx, expr, GRN_OP_COMMA, 2);
+ }
+ grn_expr_append_const(ctx, expr, columns[i], GRN_OP_GET_VALUE, 1);
+ GRN_PTR_PUT(ctx, &e->objs, columns[i]);
+ }
+
+ GRN_OBJ_FIN(ctx, &columns_buffer);
+
+ if (n_columns > 0) {
+ IGNORED = GRN_FALSE;
+ } else {
+ IGNORED = GRN_TRUE;
+ }
+ } else {
+ /* TODO: report error */
+ IGNORED = GRN_TRUE;
+ }
+}
+output_column(IGNORED) ::= NONEXISTENT_COLUMN. {
+ IGNORED = GRN_TRUE;
+}
+output_column(IGNORED) ::= assignment_expression. {
+ IGNORED = GRN_FALSE;
+}
+
+adjuster ::= .
+adjuster ::= adjust_expression.
+adjuster ::= adjuster PLUS adjust_expression. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
+}
+
+adjust_expression ::= adjust_match_expression.
+adjust_expression ::= adjust_match_expression STAR DECIMAL. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
+}
+
+adjust_match_expression ::= IDENTIFIER MATCH STRING. {
+ grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/error.c b/storage/mroonga/vendor/groonga/lib/error.c
new file mode 100644
index 00000000000..322b29bff7a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/error.c
@@ -0,0 +1,53 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "error.h"
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif /* HAVE_ERRNO_H */
+
+#include <string.h>
+
+#ifdef WIN32
+const char *
+grn_current_error_message(void)
+{
+# define ERROR_MESSAGE_BUFFER_SIZE 4096
+ int error_code = WSAGetLastError();
+ static char message[ERROR_MESSAGE_BUFFER_SIZE];
+
+ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ error_code,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ message,
+ ERROR_MESSAGE_BUFFER_SIZE,
+ NULL);
+
+ return message;
+
+# undef ERROR_MESSAGE_BUFFER_SIZE
+}
+#else
+const char *
+grn_current_error_message(void)
+{
+ return strerror(errno);
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/error.h b/storage/mroonga/vendor/groonga/lib/error.h
new file mode 100644
index 00000000000..f425e4644f1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/error.h
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_ERROR_H
+#define GRN_ERROR_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char *grn_current_error_message(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_ERROR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/expr.c b/storage/mroonga/vendor/groonga/lib/expr.c
new file mode 100644
index 00000000000..dd70ebecb40
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/expr.c
@@ -0,0 +1,7158 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include "db.h"
+#include "ctx_impl.h"
+#include <string.h>
+#include <float.h>
+#include "ii.h"
+#include "geo.h"
+#include "expr.h"
+#include "util.h"
+#include "normalizer_in.h"
+#include "mrb.h"
+#include "mrb/mrb_expr.h"
+
+static inline int
+function_proc_p(grn_obj *obj)
+{
+ return (obj &&
+ obj->header.type == GRN_PROC &&
+ ((grn_proc *)obj)->type == GRN_PROC_FUNCTION);
+}
+
+static inline int
+selector_proc_p(grn_obj *obj)
+{
+ return (function_proc_p(obj) && ((grn_proc *)obj)->selector);
+}
+
+grn_obj *
+grn_expr_alloc(grn_ctx *ctx, grn_obj *expr, grn_id domain, grn_obj_flags flags)
+{
+ grn_obj *res = NULL;
+ grn_expr *e = (grn_expr *)expr;
+ if (e) {
+ if (e->values_curr >= e->values_size) {
+ // todo : expand values.
+ ERR(GRN_NO_MEMORY_AVAILABLE, "no more e->values");
+ return NULL;
+ }
+ res = &e->values[e->values_curr++];
+ if (e->values_curr > e->values_tail) { e->values_tail = e->values_curr; }
+ grn_obj_reinit(ctx, res, domain, flags);
+ }
+ return res;
+}
+
+static grn_hash *
+grn_expr_get_vars(grn_ctx *ctx, grn_obj *expr, unsigned int *nvars)
+{
+ grn_hash *vars = NULL;
+ if (expr->header.type == GRN_PROC || expr->header.type == GRN_EXPR) {
+ grn_id id = DB_OBJ(expr)->id;
+ grn_expr *e = (grn_expr *)expr;
+ int added = 0;
+ grn_hash **vp;
+ if (grn_hash_add(ctx, ctx->impl->expr_vars, &id, sizeof(grn_id), (void **)&vp, &added)) {
+ if (!*vp) {
+ *vp = grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE, sizeof(grn_obj),
+ GRN_OBJ_KEY_VAR_SIZE|GRN_OBJ_TEMPORARY|GRN_HASH_TINY);
+ if (*vp) {
+ uint32_t i;
+ grn_obj *value;
+ grn_expr_var *v;
+ for (v = e->vars, i = e->nvars; i; v++, i--) {
+ grn_hash_add(ctx, *vp, v->name, v->name_size, (void **)&value, &added);
+ GRN_OBJ_INIT(value, v->value.header.type, 0, v->value.header.domain);
+ GRN_TEXT_PUT(ctx, value, GRN_TEXT_VALUE(&v->value), GRN_TEXT_LEN(&v->value));
+ }
+ }
+ }
+ vars = *vp;
+ }
+ }
+ *nvars = vars ? GRN_HASH_SIZE(vars) : 0;
+ return vars;
+}
+
+grn_rc
+grn_expr_clear_vars(grn_ctx *ctx, grn_obj *expr)
+{
+ if (expr->header.type == GRN_PROC || expr->header.type == GRN_EXPR) {
+ grn_hash **vp;
+ grn_id eid, id = DB_OBJ(expr)->id;
+ if ((eid = grn_hash_get(ctx, ctx->impl->expr_vars, &id, sizeof(grn_id), (void **)&vp))) {
+ if (*vp) {
+ grn_obj *value;
+ GRN_HASH_EACH(ctx, *vp, i, NULL, NULL, (void **)&value, {
+ GRN_OBJ_FIN(ctx, value);
+ });
+ grn_hash_close(ctx, *vp);
+ }
+ grn_hash_delete_by_id(ctx, ctx->impl->expr_vars, eid, NULL);
+ }
+ }
+ return ctx->rc;
+}
+
+grn_obj *
+grn_proc_get_info(grn_ctx *ctx, grn_user_data *user_data,
+ grn_expr_var **vars, unsigned int *nvars, grn_obj **caller)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ if (caller) { *caller = pctx->caller; }
+ if (pctx->proc) {
+ if (vars) {
+ *vars = pctx->proc->vars;
+ // *vars = grn_expr_get_vars(ctx, (grn_obj *)pctx->proc, nvars);
+ }
+ if (nvars) { *nvars = pctx->proc->nvars; }
+ } else {
+ if (vars) { *vars = NULL; }
+ if (nvars) { *nvars = 0; }
+ }
+ return (grn_obj *)pctx->proc;
+}
+
+grn_obj *
+grn_proc_get_var(grn_ctx *ctx, grn_user_data *user_data, const char *name, unsigned int name_size)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ return pctx->proc ? grn_expr_get_var(ctx, (grn_obj *)pctx->proc, name, name_size) : NULL;
+}
+
+grn_obj *
+grn_proc_get_var_by_offset(grn_ctx *ctx, grn_user_data *user_data, unsigned int offset)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ return pctx->proc ? grn_expr_get_var_by_offset(ctx, (grn_obj *)pctx->proc, offset) : NULL;
+}
+
+grn_obj *
+grn_proc_get_or_add_var(grn_ctx *ctx, grn_user_data *user_data,
+ const char *name, unsigned int name_size)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ return pctx->proc ? grn_expr_get_or_add_var(ctx, (grn_obj *)pctx->proc, name, name_size) : NULL;
+}
+
+grn_obj *
+grn_proc_alloc(grn_ctx *ctx, grn_user_data *user_data, grn_id domain, grn_obj_flags flags)
+{
+ grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
+ return pctx->caller ? grn_expr_alloc(ctx, (grn_obj *)pctx->caller, domain, flags) : NULL;
+}
+
+grn_proc_type
+grn_proc_get_type(grn_ctx *ctx, grn_obj *proc)
+{
+ grn_proc *proc_ = (grn_proc *)proc;
+ return proc_ ? proc_->type : GRN_PROC_INVALID;
+}
+
+grn_rc
+grn_proc_set_selector(grn_ctx *ctx, grn_obj *proc, grn_selector_func selector)
+{
+ grn_proc *proc_ = (grn_proc *)proc;
+ if (!function_proc_p(proc)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ proc_->selector = selector;
+ return GRN_SUCCESS;
+}
+
+/* grn_expr */
+
+static const char *opstrs[] = {
+ "PUSH",
+ "POP",
+ "NOP",
+ "CALL",
+ "INTERN",
+ "GET_REF",
+ "GET_VALUE",
+ "AND",
+ "AND_NOT",
+ "OR",
+ "ASSIGN",
+ "STAR_ASSIGN",
+ "SLASH_ASSIGN",
+ "MOD_ASSIGN",
+ "PLUS_ASSIGN",
+ "MINUS_ASSIGN",
+ "SHIFTL_ASSIGN",
+ "SHIFTR_ASSIGN",
+ "SHIFTRR_ASSIGN",
+ "AND_ASSIGN",
+ "XOR_ASSIGN",
+ "OR_ASSIGN",
+ "JUMP",
+ "CJUMP",
+ "COMMA",
+ "BITWISE_OR",
+ "BITWISE_XOR",
+ "BITWISE_AND",
+ "BITWISE_NOT",
+ "EQUAL",
+ "NOT_EQUAL",
+ "LESS",
+ "GREATER",
+ "LESS_EQUAL",
+ "GREATER_EQUAL",
+ "IN",
+ "MATCH",
+ "NEAR",
+ "NEAR2",
+ "SIMILAR",
+ "TERM_EXTRACT",
+ "SHIFTL",
+ "SHIFTR",
+ "SHIFTRR",
+ "PLUS",
+ "MINUS",
+ "STAR",
+ "SLASH",
+ "MOD",
+ "DELETE",
+ "INCR",
+ "DECR",
+ "INCR_POST",
+ "DECR_POST",
+ "NOT",
+ "ADJUST",
+ "EXACT",
+ "LCP",
+ "PARTIAL",
+ "UNSPLIT",
+ "PREFIX",
+ "SUFFIX",
+ "GEO_DISTANCE1",
+ "GEO_DISTANCE2",
+ "GEO_DISTANCE3",
+ "GEO_DISTANCE4",
+ "GEO_WITHINP5",
+ "GEO_WITHINP6",
+ "GEO_WITHINP8",
+ "OBJ_SEARCH",
+ "EXPR_GET_VAR",
+ "TABLE_CREATE",
+ "TABLE_SELECT",
+ "TABLE_SORT",
+ "TABLE_GROUP",
+ "JSON_PUT"
+};
+
+static void
+put_value(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ int len;
+ char namebuf[GRN_TABLE_MAX_KEY_SIZE];
+ if ((len = grn_column_name(ctx, obj, namebuf, GRN_TABLE_MAX_KEY_SIZE))) {
+ GRN_TEXT_PUT(ctx, buf, namebuf, len);
+ } else {
+ grn_text_otoj(ctx, buf, obj, NULL);
+ }
+}
+
+grn_rc
+grn_expr_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *expr)
+{
+ uint32_t i, j;
+ grn_expr_var *var;
+ grn_expr_code *code;
+ grn_expr *e = (grn_expr *)expr;
+ grn_hash *vars = grn_expr_get_vars(ctx, expr, &i);
+ GRN_TEXT_PUTS(ctx, buf, "noname");
+ GRN_TEXT_PUTC(ctx, buf, '(');
+ {
+ int i = 0;
+ grn_obj *value;
+ const char *name;
+ uint32_t name_len;
+ GRN_HASH_EACH(ctx, vars, id, &name, &name_len, &value, {
+ if (i++) { GRN_TEXT_PUTC(ctx, buf, ','); }
+ GRN_TEXT_PUT(ctx, buf, name, name_len);
+ GRN_TEXT_PUTC(ctx, buf, ':');
+ put_value(ctx, buf, value);
+ });
+ }
+ GRN_TEXT_PUTC(ctx, buf, ')');
+ GRN_TEXT_PUTC(ctx, buf, '{');
+ for (j = 0, code = e->codes; j < e->codes_curr; j++, code++) {
+ if (j) { GRN_TEXT_PUTC(ctx, buf, ','); }
+ grn_text_itoa(ctx, buf, code->modify);
+ if (code->op == GRN_OP_PUSH) {
+ for (i = 0, var = e->vars; i < e->nvars; i++, var++) {
+ if (&var->value == code->value) {
+ GRN_TEXT_PUTC(ctx, buf, '?');
+ if (var->name_size) {
+ GRN_TEXT_PUT(ctx, buf, var->name, var->name_size);
+ } else {
+ grn_text_itoa(ctx, buf, (int)i);
+ }
+ break;
+ }
+ }
+ if (i == e->nvars) {
+ put_value(ctx, buf, code->value);
+ }
+ } else {
+ if (code->value) {
+ put_value(ctx, buf, code->value);
+ GRN_TEXT_PUTC(ctx, buf, ' ');
+ }
+ GRN_TEXT_PUTS(ctx, buf, opstrs[code->op]);
+ }
+ }
+ GRN_TEXT_PUTC(ctx, buf, '}');
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_ctx_pop(grn_ctx *ctx)
+{
+ if (ctx && ctx->impl && ctx->impl->stack_curr) {
+ return ctx->impl->stack[--ctx->impl->stack_curr];
+ }
+ return NULL;
+}
+
+grn_rc
+grn_ctx_push(grn_ctx *ctx, grn_obj *obj)
+{
+ if (ctx && ctx->impl && ctx->impl->stack_curr < GRN_STACK_SIZE) {
+ ctx->impl->stack[ctx->impl->stack_curr++] = obj;
+ return GRN_SUCCESS;
+ }
+ return GRN_STACK_OVER_FLOW;
+}
+
+grn_obj *
+grn_expr_alloc_const(grn_ctx *ctx, grn_obj *expr)
+{
+ grn_expr *e = (grn_expr *)expr;
+
+ if (!e->consts) {
+ if (!(e->consts = GRN_MALLOCN(grn_obj, GRN_STACK_SIZE))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "malloc failed");
+ return NULL;
+ }
+ }
+ if (e->nconsts < GRN_STACK_SIZE) {
+ return e->consts + e->nconsts++;
+ } else {
+ ERR(GRN_STACK_OVER_FLOW, "too many constants.");
+ return NULL;
+ }
+}
+
+void
+grn_obj_pack(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_text_benc(ctx, buf, obj->header.type);
+ if (GRN_DB_OBJP(obj)) {
+ grn_text_benc(ctx, buf, DB_OBJ(obj)->id);
+ } else {
+ // todo : support vector, query, accessor, snip..
+ uint32_t vs = GRN_BULK_VSIZE(obj);
+ grn_text_benc(ctx, buf, obj->header.domain);
+ grn_text_benc(ctx, buf, vs);
+ if (vs) { GRN_TEXT_PUT(ctx, buf, GRN_BULK_HEAD(obj), vs); }
+ }
+}
+
+const uint8_t *
+grn_obj_unpack(grn_ctx *ctx, const uint8_t *p, const uint8_t *pe, uint8_t type, uint8_t flags, grn_obj *obj)
+{
+ grn_id domain;
+ uint32_t vs;
+ GRN_B_DEC(domain, p);
+ GRN_OBJ_INIT(obj, type, flags, domain);
+ GRN_B_DEC(vs, p);
+ if (pe < p + vs) {
+ ERR(GRN_INVALID_FORMAT, "benced image is corrupt");
+ return p;
+ }
+ grn_bulk_write(ctx, obj, (const char *)p, vs);
+ return p + vs;
+}
+
+typedef enum {
+ GRN_EXPR_PACK_TYPE_NULL = 0,
+ GRN_EXPR_PACK_TYPE_VARIABLE = 1,
+ GRN_EXPR_PACK_TYPE_OTHERS = 2
+} grn_expr_pack_type;
+
+void
+grn_expr_pack(grn_ctx *ctx, grn_obj *buf, grn_obj *expr)
+{
+ grn_expr_code *c;
+ grn_expr_var *v;
+ grn_expr *e = (grn_expr *)expr;
+ uint32_t i, j;
+ grn_text_benc(ctx, buf, e->nvars);
+ for (i = e->nvars, v = e->vars; i; i--, v++) {
+ grn_text_benc(ctx, buf, v->name_size);
+ if (v->name_size) { GRN_TEXT_PUT(ctx, buf, v->name, v->name_size); }
+ grn_obj_pack(ctx, buf, &v->value);
+ }
+ i = e->codes_curr;
+ grn_text_benc(ctx, buf, i);
+ for (c = e->codes; i; i--, c++) {
+ grn_text_benc(ctx, buf, c->op);
+ grn_text_benc(ctx, buf, c->nargs);
+ if (!c->value) {
+ grn_text_benc(ctx, buf, GRN_EXPR_PACK_TYPE_NULL);
+ } else {
+ for (j = 0, v = e->vars; j < e->nvars; j++, v++) {
+ if (&v->value == c->value) {
+ grn_text_benc(ctx, buf, GRN_EXPR_PACK_TYPE_VARIABLE);
+ grn_text_benc(ctx, buf, j);
+ break;
+ }
+ }
+ if (j == e->nvars) {
+ grn_text_benc(ctx, buf, GRN_EXPR_PACK_TYPE_OTHERS);
+ grn_obj_pack(ctx, buf, c->value);
+ }
+ }
+ }
+}
+
+const uint8_t *
+grn_expr_unpack(grn_ctx *ctx, const uint8_t *p, const uint8_t *pe, grn_obj *expr)
+{
+ grn_obj *v;
+ grn_expr_pack_type type;
+ uint32_t i, n, ns;
+ grn_expr_code *code;
+ grn_expr *e = (grn_expr *)expr;
+ GRN_B_DEC(n, p);
+ for (i = 0; i < n; i++) {
+ uint32_t object_type;
+ GRN_B_DEC(ns, p);
+ v = grn_expr_add_var(ctx, expr, ns ? (const char *)p : NULL, ns);
+ p += ns;
+ GRN_B_DEC(object_type, p);
+ if (GRN_TYPE <= object_type && object_type <= GRN_COLUMN_INDEX) { /* error */ }
+ p = grn_obj_unpack(ctx, p, pe, object_type, 0, v);
+ if (pe < p) {
+ ERR(GRN_INVALID_FORMAT, "benced image is corrupt");
+ return p;
+ }
+ }
+ GRN_B_DEC(n, p);
+ /* confirm e->codes_size >= n */
+ e->codes_curr = n;
+ for (i = 0, code = e->codes; i < n; i++, code++) {
+ GRN_B_DEC(code->op, p);
+ GRN_B_DEC(code->nargs, p);
+ GRN_B_DEC(type, p);
+ switch (type) {
+ case GRN_EXPR_PACK_TYPE_NULL :
+ code->value = NULL;
+ break;
+ case GRN_EXPR_PACK_TYPE_VARIABLE :
+ {
+ uint32_t offset;
+ GRN_B_DEC(offset, p);
+ code->value = &e->vars[i].value;
+ }
+ break;
+ case GRN_EXPR_PACK_TYPE_OTHERS :
+ {
+ uint32_t object_type;
+ GRN_B_DEC(object_type, p);
+ if (GRN_TYPE <= object_type && object_type <= GRN_COLUMN_INDEX) {
+ grn_id id;
+ GRN_B_DEC(id, p);
+ code->value = grn_ctx_at(ctx, id);
+ } else {
+ if (!(v = grn_expr_alloc_const(ctx, expr))) { return NULL; }
+ p = grn_obj_unpack(ctx, p, pe, object_type, GRN_OBJ_EXPRCONST, v);
+ code->value = v;
+ }
+ }
+ break;
+ }
+ if (pe < p) {
+ ERR(GRN_INVALID_FORMAT, "benced image is corrupt");
+ return p;
+ }
+ }
+ return p;
+}
+
+grn_obj *
+grn_expr_open(grn_ctx *ctx, grn_obj_spec *spec, const uint8_t *p, const uint8_t *pe)
+{
+ grn_expr *expr = NULL;
+ if ((expr = GRN_MALLOCN(grn_expr, 1))) {
+ int size = 256;
+ expr->consts = NULL;
+ expr->nconsts = 0;
+ GRN_TEXT_INIT(&expr->name_buf, 0);
+ GRN_TEXT_INIT(&expr->dfi, 0);
+ GRN_PTR_INIT(&expr->objs, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ expr->vars = NULL;
+ expr->nvars = 0;
+ GRN_DB_OBJ_SET_TYPE(expr, GRN_EXPR);
+ if ((expr->values = GRN_MALLOCN(grn_obj, size))) {
+ int i;
+ for (i = 0; i < size; i++) {
+ GRN_OBJ_INIT(&expr->values[i], GRN_BULK, GRN_OBJ_EXPRVALUE, GRN_ID_NIL);
+ }
+ expr->values_curr = 0;
+ expr->values_tail = 0;
+ expr->values_size = size;
+ if ((expr->codes = GRN_MALLOCN(grn_expr_code, size))) {
+ expr->codes_curr = 0;
+ expr->codes_size = size;
+ expr->obj.header = spec->header;
+ if (grn_expr_unpack(ctx, p, pe, (grn_obj *)expr) == pe) {
+ goto exit;
+ } else {
+ ERR(GRN_INVALID_FORMAT, "benced image is corrupt");
+ }
+ GRN_FREE(expr->codes);
+ }
+ GRN_FREE(expr->values);
+ }
+ GRN_FREE(expr);
+ expr = NULL;
+ }
+exit :
+ return (grn_obj *)expr;
+}
+
+/* Pass ownership of `obj` to `expr`. */
+void
+grn_expr_take_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj)
+{
+ grn_expr *e = (grn_expr *)expr;
+ GRN_PTR_PUT(ctx, &(e->objs), obj);
+}
+
+/* data flow info */
+typedef struct {
+ grn_expr_code *code;
+ grn_id domain;
+ unsigned char type;
+} grn_expr_dfi;
+
+#define DFI_POP(e,d) do {\
+ if (GRN_BULK_VSIZE(&(e)->dfi) >= sizeof(grn_expr_dfi)) {\
+ GRN_BULK_INCR_LEN((&(e)->dfi), -(sizeof(grn_expr_dfi)));\
+ (d) = (grn_expr_dfi *)(GRN_BULK_CURR(&(e)->dfi));\
+ (e)->code0 = (d)->code;\
+ } else {\
+ (d) = NULL;\
+ (e)->code0 = NULL;\
+ }\
+} while (0)
+
+#define DFI_PUT(e,t,d,c) do {\
+ grn_expr_dfi dfi;\
+ dfi.type = (t);\
+ dfi.domain = (d);\
+ dfi.code = (c);\
+ if ((e)->code0) { (e)->code0->modify = (c) ? ((c) - (e)->code0) : 0; }\
+ grn_bulk_write(ctx, &(e)->dfi, (char *)&dfi, sizeof(grn_expr_dfi));\
+ (e)->code0 = NULL;\
+} while (0)
+
+grn_expr_dfi *
+dfi_value_at(grn_expr *expr, int offset)
+{
+ grn_obj *obj = &expr->dfi;
+ int size = GRN_BULK_VSIZE(obj) / sizeof(grn_expr_dfi);
+ if (offset < 0) { offset = size + offset; }
+ return (0 <= offset && offset < size)
+ ? &(((grn_expr_dfi *)GRN_BULK_HEAD(obj))[offset])
+ : NULL;
+}
+
+grn_obj *
+grn_expr_create(grn_ctx *ctx, const char *name, unsigned int name_size)
+{
+ grn_id id;
+ grn_obj *db;
+ grn_expr *expr = NULL;
+ if (!ctx || !ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return NULL;
+ }
+ if (name_size) {
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+ "[expr][create] anonymous expression isn't implemented yet");
+ return NULL;
+ }
+ GRN_API_ENTER;
+ if (grn_db_check_name(ctx, name, name_size)) {
+ GRN_DB_CHECK_NAME_ERR("[expr][create]", name, name_size);
+ GRN_API_RETURN(NULL);
+ }
+ if (!GRN_DB_P(db)) {
+ ERR(GRN_INVALID_ARGUMENT, "named expr is not supported");
+ GRN_API_RETURN(NULL);
+ }
+ id = grn_obj_register(ctx, db, name, name_size);
+ if (id && (expr = GRN_MALLOCN(grn_expr, 1))) {
+ int size = GRN_STACK_SIZE;
+ expr->consts = NULL;
+ expr->nconsts = 0;
+ GRN_TEXT_INIT(&expr->name_buf, 0);
+ GRN_TEXT_INIT(&expr->dfi, 0);
+ GRN_PTR_INIT(&expr->objs, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ expr->code0 = NULL;
+ expr->vars = NULL;
+ expr->nvars = 0;
+ expr->cacheable = 1;
+ expr->taintable = 0;
+ expr->values_curr = 0;
+ expr->values_tail = 0;
+ expr->values_size = size;
+ expr->codes_curr = 0;
+ expr->codes_size = size;
+ GRN_DB_OBJ_SET_TYPE(expr, GRN_EXPR);
+ expr->obj.header.domain = GRN_ID_NIL;
+ expr->obj.range = GRN_ID_NIL;
+ if (!grn_db_obj_init(ctx, db, id, DB_OBJ(expr))) {
+ if ((expr->values = GRN_MALLOCN(grn_obj, size))) {
+ int i;
+ for (i = 0; i < size; i++) {
+ GRN_OBJ_INIT(&expr->values[i], GRN_BULK, GRN_OBJ_EXPRVALUE, GRN_ID_NIL);
+ }
+ if ((expr->codes = GRN_MALLOCN(grn_expr_code, size))) {
+ goto exit;
+ }
+ GRN_FREE(expr->values);
+ }
+ }
+ GRN_FREE(expr);
+ expr = NULL;
+ }
+exit :
+ GRN_API_RETURN((grn_obj *)expr);
+}
+
+#define GRN_PTR_POP(obj,value) do {\
+ if (GRN_BULK_VSIZE(obj) >= sizeof(grn_obj *)) {\
+ GRN_BULK_INCR_LEN((obj), -(sizeof(grn_obj *)));\
+ value = *(grn_obj **)(GRN_BULK_CURR(obj));\
+ } else {\
+ value = NULL;\
+ }\
+} while (0)
+
+grn_rc
+grn_expr_close(grn_ctx *ctx, grn_obj *expr)
+{
+ uint32_t i;
+ grn_expr *e = (grn_expr *)expr;
+ GRN_API_ENTER;
+ /*
+ if (e->obj.header.domain) {
+ grn_hash_delete(ctx, ctx->impl->qe, &e->obj.header.domain, sizeof(grn_id), NULL);
+ }
+ */
+ grn_expr_clear_vars(ctx, expr);
+ for (i = 0; i < e->nconsts; i++) {
+ grn_obj_close(ctx, &e->consts[i]);
+ }
+ if (e->consts) { GRN_FREE(e->consts); }
+ grn_obj_close(ctx, &e->name_buf);
+ grn_obj_close(ctx, &e->dfi);
+ for (;;) {
+ grn_obj *obj;
+ GRN_PTR_POP(&e->objs, obj);
+ if (obj) {
+#ifdef USE_MEMORY_DEBUG
+ grn_obj_unlink(ctx, obj);
+#else
+ if (obj->header.type) {
+ grn_obj_unlink(ctx, obj);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "GRN_VOID object is tried to be unlinked");
+ }
+#endif
+ } else { break; }
+ }
+ grn_obj_close(ctx, &e->objs);
+ for (i = 0; i < e->nvars; i++) {
+ grn_obj_close(ctx, &e->vars[i].value);
+ }
+ if (e->vars) { GRN_FREE(e->vars); }
+ for (i = 0; i < e->values_tail; i++) {
+ grn_obj_close(ctx, &e->values[i]);
+ }
+ GRN_FREE(e->values);
+ GRN_FREE(e->codes);
+ GRN_FREE(e);
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_obj *
+grn_expr_add_var(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned int name_size)
+{
+ uint32_t i;
+ char *p;
+ grn_expr_var *v;
+ grn_obj *res = NULL;
+ grn_expr *e = (grn_expr *)expr;
+ GRN_API_ENTER;
+ if (DB_OBJ(expr)->id & GRN_OBJ_TMP_OBJECT) {
+ res = grn_expr_get_or_add_var(ctx, expr, name, name_size);
+ } else {
+ if (!e->vars) {
+ if (!(e->vars = GRN_MALLOCN(grn_expr_var, GRN_STACK_SIZE))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "malloc failed");
+ }
+ }
+ if (e->vars && e->nvars < GRN_STACK_SIZE) {
+ v = e->vars + e->nvars++;
+ if (name_size) {
+ GRN_TEXT_PUT(ctx, &e->name_buf, name, name_size);
+ } else {
+ uint32_t ol = GRN_TEXT_LEN(&e->name_buf);
+ GRN_TEXT_PUTC(ctx, &e->name_buf, '$');
+ grn_text_itoa(ctx, &e->name_buf, e->nvars);
+ name_size = GRN_TEXT_LEN(&e->name_buf) - ol;
+ }
+ v->name_size = name_size;
+ res = &v->value;
+ GRN_VOID_INIT(res);
+ for (i = e->nvars, p = GRN_TEXT_VALUE(&e->name_buf), v = e->vars; i; i--, v++) {
+ v->name = p;
+ p += v->name_size;
+ }
+ }
+ }
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_expr_get_var(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned int name_size)
+{
+ uint32_t n;
+ grn_obj *res = NULL;
+ grn_hash *vars = grn_expr_get_vars(ctx, expr, &n);
+ if (vars) { grn_hash_get(ctx, vars, name, name_size, (void **)&res); }
+ return res;
+}
+
+grn_obj *
+grn_expr_get_or_add_var(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned int name_size)
+{
+ uint32_t n;
+ grn_obj *res = NULL;
+ grn_hash *vars = grn_expr_get_vars(ctx, expr, &n);
+ if (vars) {
+ int added = 0;
+ char name_buf[16];
+ if (!name_size) {
+ char *rest;
+ name_buf[0] = '$';
+ grn_itoa((int)GRN_HASH_SIZE(vars) + 1, name_buf + 1, name_buf + 16, &rest);
+ name_size = rest - name_buf;
+ name = name_buf;
+ }
+ grn_hash_add(ctx, vars, name, name_size, (void **)&res, &added);
+ if (added) { GRN_TEXT_INIT(res, 0); }
+ }
+ return res;
+}
+
+grn_obj *
+grn_expr_get_var_by_offset(grn_ctx *ctx, grn_obj *expr, unsigned int offset)
+{
+ uint32_t n;
+ grn_obj *res = NULL;
+ grn_hash *vars = grn_expr_get_vars(ctx, expr, &n);
+ if (vars) { res = (grn_obj *)grn_hash_get_value_(ctx, vars, offset + 1, &n); }
+ return res;
+}
+
+#define EXPRVP(x) ((x)->header.impl_flags & GRN_OBJ_EXPRVALUE)
+
+#define CONSTP(obj) ((obj) && ((obj)->header.impl_flags & GRN_OBJ_EXPRCONST))
+
+#define PUSH_CODE(e,o,v,n,c) do {\
+ (c) = &(e)->codes[e->codes_curr++];\
+ (c)->value = (v);\
+ (c)->nargs = (n);\
+ (c)->op = (o);\
+ (c)->flags = 0;\
+ (c)->modify = 0;\
+} while (0)
+
+#define APPEND_UNARY_MINUS_OP(e) do { \
+ grn_expr_code *code_; \
+ grn_id domain; \
+ unsigned char type; \
+ grn_obj *x; \
+ DFI_POP(e, dfi); \
+ code_ = dfi->code; \
+ domain = dfi->domain; \
+ type = dfi->type; \
+ x = code_->value; \
+ if (CONSTP(x)) { \
+ switch (domain) { \
+ case GRN_DB_INT32: \
+ { \
+ int value; \
+ value = GRN_INT32_VALUE(x); \
+ if (value == (int)0x80000000) { \
+ domain = GRN_DB_INT64; \
+ x->header.domain = domain; \
+ GRN_INT64_SET(ctx, x, -((long long int)value)); \
+ } else { \
+ GRN_INT32_SET(ctx, x, -value); \
+ } \
+ } \
+ break; \
+ case GRN_DB_UINT32: \
+ { \
+ unsigned int value; \
+ value = GRN_UINT32_VALUE(x); \
+ if (value > (unsigned int)0x80000000) { \
+ domain = GRN_DB_INT64; \
+ x->header.domain = domain; \
+ GRN_INT64_SET(ctx, x, -((long long int)value)); \
+ } else { \
+ domain = GRN_DB_INT32; \
+ x->header.domain = domain; \
+ GRN_INT32_SET(ctx, x, -((int)value)); \
+ } \
+ } \
+ break; \
+ case GRN_DB_INT64: \
+ GRN_INT64_SET(ctx, x, -GRN_INT64_VALUE(x)); \
+ break; \
+ case GRN_DB_FLOAT: \
+ GRN_FLOAT_SET(ctx, x, -GRN_FLOAT_VALUE(x)); \
+ break; \
+ default: \
+ PUSH_CODE(e, op, obj, nargs, code); \
+ break; \
+ } \
+ } else { \
+ PUSH_CODE(e, op, obj, nargs, code); \
+ } \
+ DFI_PUT(e, type, domain, code_); \
+} while (0)
+
+#define PUSH_N_ARGS_ARITHMETIC_OP(e, op, obj, nargs, code) do { \
+ PUSH_CODE(e, op, obj, nargs, code); \
+ { \
+ int i = nargs; \
+ while (i--) { \
+ DFI_POP(e, dfi); \
+ } \
+ } \
+ DFI_PUT(e, type, domain, code); \
+} while (0)
+
+grn_obj *
+grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, int nargs)
+{
+ uint8_t type = GRN_VOID;
+ grn_id domain = GRN_ID_NIL;
+ grn_expr_dfi *dfi;
+ grn_expr_code *code;
+ grn_obj *res = NULL;
+ grn_expr *e = (grn_expr *)expr;
+ GRN_API_ENTER;
+ if (e->codes_curr >= e->codes_size) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "stack is full");
+ goto exit;
+ }
+ {
+ switch (op) {
+ case GRN_OP_PUSH :
+ if (obj) {
+ PUSH_CODE(e, op, obj, nargs, code);
+ DFI_PUT(e, obj->header.type, GRN_OBJ_GET_DOMAIN(obj), code);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "obj not assigned for GRN_OP_PUSH");
+ goto exit;
+ }
+ break;
+ case GRN_OP_NOP :
+ /* nop */
+ break;
+ case GRN_OP_POP :
+ if (obj) {
+ ERR(GRN_INVALID_ARGUMENT, "obj assigned for GRN_OP_POP");
+ goto exit;
+ } else {
+ PUSH_CODE(e, op, obj, nargs, code);
+ DFI_POP(e, dfi);
+ }
+ break;
+ case GRN_OP_CALL :
+ {
+ grn_obj *proc = NULL;
+ if (e->codes_curr - nargs > 0) {
+ int i;
+ grn_expr_code *code;
+ code = &(e->codes[e->codes_curr - 1]);
+ for (i = 0; i < nargs; i++) {
+ int rest_n_codes = 1;
+ while (rest_n_codes > 0) {
+ if (!code->value) {
+ rest_n_codes += code->nargs;
+ }
+ rest_n_codes--;
+ code--;
+ }
+ }
+ proc = code->value;
+ }
+ if (!proc) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid function call expression");
+ goto exit;
+ }
+ if (!function_proc_p(proc)) {
+ grn_obj buffer;
+
+ GRN_TEXT_INIT(&buffer, 0);
+ switch (proc->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ case GRN_COLUMN_FIX_SIZE:
+ case GRN_COLUMN_VAR_SIZE:
+ case GRN_COLUMN_INDEX:
+ grn_inspect_name(ctx, &buffer, proc);
+ break;
+ default:
+ grn_inspect(ctx, &buffer, proc);
+ break;
+ }
+ ERR(GRN_INVALID_ARGUMENT, "invalid function: <%.*s>",
+ (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));
+ GRN_OBJ_FIN(ctx, &buffer);
+ goto exit;
+ }
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ {
+ int i = nargs;
+ while (i--) { DFI_POP(e, dfi); }
+ }
+ if (!obj) { DFI_POP(e, dfi); }
+ // todo : increment e->values_tail.
+ DFI_PUT(e, type, domain, code); /* cannot identify type of return value */
+ e->cacheable = 0;
+ break;
+ case GRN_OP_INTERN :
+ if (obj && CONSTP(obj)) {
+ grn_obj *value;
+ value = grn_expr_get_var(ctx, expr, GRN_TEXT_VALUE(obj), GRN_TEXT_LEN(obj));
+ if (!value) { value = grn_ctx_get(ctx, GRN_TEXT_VALUE(obj), GRN_TEXT_LEN(obj)); }
+ if (value) {
+ obj = value;
+ op = GRN_OP_PUSH;
+ type = obj->header.type;
+ domain = GRN_OBJ_GET_DOMAIN(obj);
+ }
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_EQUAL :
+ PUSH_CODE(e, op, obj, nargs, code);
+ if (nargs) {
+ grn_id xd, yd = GRN_ID_NIL;
+ grn_obj *x, *y = NULL;
+ int i = nargs - 1;
+ if (obj) {
+ xd = GRN_OBJ_GET_DOMAIN(obj);
+ x = obj;
+ } else {
+ DFI_POP(e, dfi);
+ x = dfi->code->value;
+ xd = dfi->domain;
+ }
+ while (i--) {
+ DFI_POP(e, dfi);
+ y = dfi->code->value;
+ yd = dfi->domain;
+ }
+ if (CONSTP(x)) {
+ if (CONSTP(y)) {
+ /* todo */
+ } else {
+ grn_obj dest;
+ if (xd != yd) {
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, yd);
+ if (!grn_obj_cast(ctx, x, &dest, GRN_FALSE)) {
+ grn_obj_reinit(ctx, x, yd, 0);
+ grn_bulk_write(ctx, x, GRN_BULK_HEAD(&dest), GRN_BULK_VSIZE(&dest));
+ }
+ GRN_OBJ_FIN(ctx, &dest);
+ }
+ }
+ } else {
+ if (CONSTP(y)) {
+ grn_obj dest;
+ if (xd != yd) {
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, xd);
+ if (!grn_obj_cast(ctx, y, &dest, GRN_FALSE)) {
+ grn_obj_reinit(ctx, y, xd, 0);
+ grn_bulk_write(ctx, y, GRN_BULK_HEAD(&dest), GRN_BULK_VSIZE(&dest));
+ }
+ GRN_OBJ_FIN(ctx, &dest);
+ }
+ }
+ }
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_TABLE_CREATE :
+ case GRN_OP_EXPR_GET_VAR :
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ case GRN_OP_PREFIX :
+ case GRN_OP_SUFFIX :
+ case GRN_OP_NOT_EQUAL :
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_GEO_DISTANCE1 :
+ case GRN_OP_GEO_DISTANCE2 :
+ case GRN_OP_GEO_DISTANCE3 :
+ case GRN_OP_GEO_DISTANCE4 :
+ case GRN_OP_GEO_WITHINP5 :
+ case GRN_OP_GEO_WITHINP6 :
+ case GRN_OP_GEO_WITHINP8 :
+ case GRN_OP_OBJ_SEARCH :
+ case GRN_OP_TABLE_SELECT :
+ case GRN_OP_TABLE_SORT :
+ case GRN_OP_TABLE_GROUP :
+ case GRN_OP_JSON_PUT :
+ case GRN_OP_GET_REF :
+ case GRN_OP_ADJUST :
+ case GRN_OP_TERM_EXTRACT :
+ PUSH_CODE(e, op, obj, nargs, code);
+ if (nargs) {
+ int i = nargs - 1;
+ if (!obj) { DFI_POP(e, dfi); }
+ while (i--) { DFI_POP(e, dfi); }
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_AND :
+ case GRN_OP_OR :
+ case GRN_OP_AND_NOT :
+ PUSH_CODE(e, op, obj, nargs, code);
+ if (nargs != 2) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "nargs(%d) != 2 in relative op", nargs);
+ }
+ if (obj) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "obj assigned to relative op");
+ }
+ {
+ int i = nargs;
+ while (i--) {
+ DFI_POP(e, dfi);
+ if (dfi) {
+ dfi->code->flags |= GRN_EXPR_CODE_RELATIONAL_EXPRESSION;
+ } else {
+ ERR(GRN_SYNTAX_ERROR, "stack under flow in relative op");
+ }
+ }
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_NOT :
+ if (nargs == 1) {
+ PUSH_CODE(e, op, obj, nargs, code);
+ }
+ break;
+ case GRN_OP_PLUS :
+ if (nargs > 1) {
+ PUSH_N_ARGS_ARITHMETIC_OP(e, op, obj, nargs, code);
+ }
+ break;
+ case GRN_OP_MINUS :
+ if (nargs == 1) {
+ APPEND_UNARY_MINUS_OP(e);
+ } else {
+ PUSH_N_ARGS_ARITHMETIC_OP(e, op, obj, nargs, code);
+ }
+ break;
+ case GRN_OP_BITWISE_NOT :
+ PUSH_CODE(e, op, obj, nargs, code);
+ break;
+ case GRN_OP_STAR :
+ case GRN_OP_SLASH :
+ case GRN_OP_MOD :
+ case GRN_OP_SHIFTL :
+ case GRN_OP_SHIFTR :
+ case GRN_OP_SHIFTRR :
+ case GRN_OP_BITWISE_OR :
+ case GRN_OP_BITWISE_XOR :
+ case GRN_OP_BITWISE_AND :
+ PUSH_N_ARGS_ARITHMETIC_OP(e, op, obj, nargs, code);
+ break;
+ case GRN_OP_INCR :
+ case GRN_OP_DECR :
+ case GRN_OP_INCR_POST :
+ case GRN_OP_DECR_POST :
+ {
+ DFI_POP(e, dfi);
+ if (dfi) {
+ type = dfi->type;
+ domain = dfi->domain;
+ if (dfi->code) {
+ if (dfi->code->op == GRN_OP_GET_VALUE) {
+ dfi->code->op = GRN_OP_GET_REF;
+ }
+ if (dfi->code->value && grn_obj_is_persistent(ctx, dfi->code->value)) {
+ e->cacheable = 0;
+ e->taintable = 1;
+ }
+ }
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_GET_VALUE :
+ {
+ grn_id vdomain = GRN_ID_NIL;
+ if (obj) {
+ if (nargs == 1) {
+ grn_obj *v = grn_expr_get_var_by_offset(ctx, expr, 0);
+ if (v) { vdomain = GRN_OBJ_GET_DOMAIN(v); }
+ } else {
+ DFI_POP(e, dfi);
+ vdomain = dfi->domain;
+ }
+ if (vdomain && CONSTP(obj) && obj->header.type == GRN_BULK) {
+ grn_obj *table = grn_ctx_at(ctx, vdomain);
+ grn_obj *col = grn_obj_column(ctx, table, GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
+ if (col) {
+ obj = col;
+ type = col->header.type;
+ domain = grn_obj_get_range(ctx, col);
+ grn_expr_take_obj(ctx, (grn_obj *)e, col);
+ }
+ } else {
+ domain = grn_obj_get_range(ctx, obj);
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ } else {
+ grn_expr_dfi *dfi0;
+ DFI_POP(e, dfi0);
+ if (nargs == 1) {
+ grn_obj *v = grn_expr_get_var_by_offset(ctx, expr, 0);
+ if (v) { vdomain = GRN_OBJ_GET_DOMAIN(v); }
+ } else {
+ DFI_POP(e, dfi);
+ vdomain = dfi->domain;
+ }
+ if (dfi0->code->op == GRN_OP_PUSH) {
+ dfi0->code->op = op;
+ dfi0->code->nargs = nargs;
+ obj = dfi0->code->value;
+ if (vdomain && obj && CONSTP(obj) && obj->header.type == GRN_BULK) {
+ grn_obj *table = grn_ctx_at(ctx, vdomain);
+ grn_obj *col = grn_obj_column(ctx, table, GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
+ if (col) {
+ dfi0->code->value = col;
+ type = col->header.type;
+ domain = grn_obj_get_range(ctx, col);
+ grn_obj_unlink(ctx, col);
+ }
+ } else {
+ domain = grn_obj_get_range(ctx, obj);
+ }
+ code = dfi0->code;
+ } else {
+ PUSH_CODE(e, op, obj, nargs, code);
+ }
+ }
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_ASSIGN :
+ case GRN_OP_STAR_ASSIGN :
+ case GRN_OP_SLASH_ASSIGN :
+ case GRN_OP_MOD_ASSIGN :
+ case GRN_OP_PLUS_ASSIGN :
+ case GRN_OP_MINUS_ASSIGN :
+ case GRN_OP_SHIFTL_ASSIGN :
+ case GRN_OP_SHIFTR_ASSIGN :
+ case GRN_OP_SHIFTRR_ASSIGN :
+ case GRN_OP_AND_ASSIGN :
+ case GRN_OP_OR_ASSIGN :
+ case GRN_OP_XOR_ASSIGN :
+ {
+ if (obj) {
+ type = obj->header.type;
+ domain = GRN_OBJ_GET_DOMAIN(obj);
+ } else {
+ DFI_POP(e, dfi);
+ if (dfi) {
+ type = dfi->type;
+ domain = dfi->domain;
+ }
+ }
+ DFI_POP(e, dfi);
+ if (dfi && (dfi->code)) {
+ if (dfi->code->op == GRN_OP_GET_VALUE) {
+ dfi->code->op = GRN_OP_GET_REF;
+ }
+ if (dfi->code->value && grn_obj_is_persistent(ctx, dfi->code->value)) {
+ e->cacheable = 0;
+ e->taintable = 1;
+ }
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ }
+ DFI_PUT(e, type, domain, code);
+ break;
+ case GRN_OP_JUMP :
+ DFI_POP(e, dfi);
+ PUSH_CODE(e, op, obj, nargs, code);
+ break;
+ case GRN_OP_CJUMP :
+ DFI_POP(e, dfi);
+ PUSH_CODE(e, op, obj, nargs, code);
+ break;
+ case GRN_OP_COMMA :
+ PUSH_CODE(e, op, obj, nargs, code);
+ break;
+ case GRN_OP_GET_MEMBER :
+ DFI_POP(e, dfi);
+ DFI_POP(e, dfi);
+ if (dfi) {
+ type = dfi->type;
+ domain = dfi->domain;
+ if (dfi->code) {
+ if (dfi->code->op == GRN_OP_GET_VALUE) {
+ dfi->code->op = GRN_OP_GET_REF;
+ }
+ }
+ }
+ PUSH_CODE(e, op, obj, nargs, code);
+ DFI_PUT(e, type, domain, code);
+ break;
+ default :
+ break;
+ }
+ }
+exit :
+ if (!ctx->rc) { res = obj; }
+ GRN_API_RETURN(res);
+}
+#undef PUSH_N_ARGS_ARITHMETIC_OP
+#undef APPEND_UNARY_MINUS_OP
+
+grn_obj *
+grn_expr_append_const(grn_ctx *ctx, grn_obj *expr, grn_obj *obj,
+ grn_operator op, int nargs)
+{
+ grn_obj *res = NULL;
+ GRN_API_ENTER;
+ if (!obj) {
+ ERR(GRN_SYNTAX_ERROR, "constant is null");
+ goto exit;
+ }
+ if (GRN_DB_OBJP(obj) || GRN_ACCESSORP(obj)) {
+ res = obj;
+ } else {
+ if ((res = grn_expr_alloc_const(ctx, expr))) {
+ switch (obj->header.type) {
+ case GRN_VOID :
+ case GRN_BULK :
+ case GRN_UVECTOR :
+ GRN_OBJ_INIT(res, obj->header.type, 0, obj->header.domain);
+ grn_bulk_write(ctx, res, GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
+ break;
+ default :
+ res = NULL;
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "unsupported type");
+ goto exit;
+ }
+ res->header.impl_flags |= GRN_OBJ_EXPRCONST;
+ }
+ }
+ grn_expr_append_obj(ctx, expr, res, op, nargs); /* constant */
+exit :
+ GRN_API_RETURN(res);
+}
+
+static grn_obj *
+grn_expr_add_str(grn_ctx *ctx, grn_obj *expr, const char *str, unsigned int str_size)
+{
+ grn_obj *res = NULL;
+ if ((res = grn_expr_alloc_const(ctx, expr))) {
+ GRN_TEXT_INIT(res, 0);
+ grn_bulk_write(ctx, res, str, str_size);
+ res->header.impl_flags |= GRN_OBJ_EXPRCONST;
+ }
+ return res;
+}
+
+grn_obj *
+grn_expr_append_const_str(grn_ctx *ctx, grn_obj *expr, const char *str, unsigned int str_size,
+ grn_operator op, int nargs)
+{
+ grn_obj *res;
+ GRN_API_ENTER;
+ res = grn_expr_add_str(ctx, expr, str, str_size);
+ grn_expr_append_obj(ctx, expr, res, op, nargs); /* constant */
+ GRN_API_RETURN(res);
+}
+
+grn_obj *
+grn_expr_append_const_int(grn_ctx *ctx, grn_obj *expr, int i,
+ grn_operator op, int nargs)
+{
+ grn_obj *res = NULL;
+ GRN_API_ENTER;
+ if ((res = grn_expr_alloc_const(ctx, expr))) {
+ GRN_INT32_INIT(res, 0);
+ GRN_INT32_SET(ctx, res, i);
+ res->header.impl_flags |= GRN_OBJ_EXPRCONST;
+ }
+ grn_expr_append_obj(ctx, expr, res, op, nargs); /* constant */
+ GRN_API_RETURN(res);
+}
+
+grn_rc
+grn_expr_append_op(grn_ctx *ctx, grn_obj *expr, grn_operator op, int nargs)
+{
+ grn_expr_append_obj(ctx, expr, NULL, op, nargs);
+ return ctx->rc;
+}
+
+grn_rc
+grn_expr_compile(grn_ctx *ctx, grn_obj *expr)
+{
+ grn_obj_spec_save(ctx, DB_OBJ(expr));
+ return ctx->rc;
+}
+
+#define WITH_SPSAVE(block) do {\
+ ctx->impl->stack_curr = sp - ctx->impl->stack;\
+ e->values_curr = vp - e->values;\
+ block\
+ vp = e->values + e->values_curr;\
+ sp = ctx->impl->stack + ctx->impl->stack_curr;\
+ s0 = sp[-1];\
+ s1 = sp[-2];\
+} while (0)
+
+#define DO_COMPARE_SUB_NUMERIC(y,op) do {\
+ switch ((y)->header.domain) {\
+ case GRN_DB_INT8 :\
+ r = (x_ op GRN_INT8_VALUE(y));\
+ break;\
+ case GRN_DB_UINT8 :\
+ r = (x_ op GRN_UINT8_VALUE(y));\
+ break;\
+ case GRN_DB_INT16 :\
+ r = (x_ op GRN_INT16_VALUE(y));\
+ break;\
+ case GRN_DB_UINT16 :\
+ r = (x_ op GRN_UINT16_VALUE(y));\
+ break;\
+ case GRN_DB_INT32 :\
+ r = (x_ op GRN_INT32_VALUE(y));\
+ break;\
+ case GRN_DB_UINT32 :\
+ r = (x_ op GRN_UINT32_VALUE(y));\
+ break;\
+ case GRN_DB_INT64 :\
+ r = (x_ op GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_TIME :\
+ r = (GRN_TIME_PACK(x_,0) op GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_UINT64 :\
+ r = (x_ op GRN_UINT64_VALUE(y));\
+ break;\
+ case GRN_DB_FLOAT :\
+ r = (x_ op GRN_FLOAT_VALUE(y));\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+} while (0)
+
+#define DO_COMPARE_SUB(op) do {\
+ switch (y->header.domain) {\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ {\
+ grn_obj y_;\
+ GRN_OBJ_INIT(&y_, GRN_BULK, 0, x->header.domain);\
+ if (grn_obj_cast(ctx, y, &y_, GRN_FALSE)) {\
+ r = 0;\
+ } else {\
+ DO_COMPARE_SUB_NUMERIC(&y_, op);\
+ }\
+ GRN_OBJ_FIN(ctx, &y_);\
+ }\
+ break;\
+ default :\
+ DO_COMPARE_SUB_NUMERIC(y,op);\
+ break;\
+ }\
+} while (0)
+
+#define DO_COMPARE_BUILTIN(x,y,r,op) do {\
+ switch (x->header.domain) {\
+ case GRN_DB_INT8 :\
+ {\
+ int8_t x_ = GRN_INT8_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_UINT8 :\
+ {\
+ uint8_t x_ = GRN_UINT8_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_INT16 :\
+ {\
+ int16_t x_ = GRN_INT16_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_UINT16 :\
+ {\
+ uint16_t x_ = GRN_UINT16_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_INT32 :\
+ {\
+ int32_t x_ = GRN_INT32_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_UINT32 :\
+ {\
+ uint32_t x_ = GRN_UINT32_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_TIME :\
+ {\
+ int64_t x_ = GRN_INT64_VALUE(x);\
+ switch (y->header.domain) {\
+ case GRN_DB_INT32 :\
+ r = (x_ op GRN_TIME_PACK(GRN_INT32_VALUE(y), 0));\
+ break;\
+ case GRN_DB_UINT32 :\
+ r = (x_ op GRN_TIME_PACK(GRN_UINT32_VALUE(y), 0));\
+ break;\
+ case GRN_DB_INT64 :\
+ case GRN_DB_TIME :\
+ r = (x_ op GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_UINT64 :\
+ r = (x_ op GRN_UINT64_VALUE(y));\
+ break;\
+ case GRN_DB_FLOAT :\
+ r = (x_ op GRN_TIME_PACK(GRN_FLOAT_VALUE(y), 0));\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ {\
+ const char *p_ = GRN_TEXT_VALUE(y);\
+ int i_ = grn_atoi(p_, p_ + GRN_TEXT_LEN(y), NULL);\
+ r = (x_ op GRN_TIME_PACK(i_, 0));\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+ }\
+ break;\
+ case GRN_DB_INT64 :\
+ {\
+ int64_t x_ = GRN_INT64_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_UINT64 :\
+ {\
+ uint64_t x_ = GRN_UINT64_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_FLOAT :\
+ {\
+ double x_ = GRN_FLOAT_VALUE(x);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ if (GRN_DB_SHORT_TEXT <= y->header.domain && y->header.domain <= GRN_DB_LONG_TEXT) {\
+ int r_;\
+ uint32_t la = GRN_TEXT_LEN(x), lb = GRN_TEXT_LEN(y);\
+ if (la > lb) {\
+ if (!(r_ = memcmp(GRN_TEXT_VALUE(x), GRN_TEXT_VALUE(y), lb))) {\
+ r_ = 1;\
+ }\
+ } else {\
+ if (!(r_ = memcmp(GRN_TEXT_VALUE(x), GRN_TEXT_VALUE(y), la))) {\
+ r_ = la == lb ? 0 : -1;\
+ }\
+ }\
+ r = (r_ op 0);\
+ } else {\
+ const char *q_ = GRN_TEXT_VALUE(x);\
+ int x_ = grn_atoi(q_, q_ + GRN_TEXT_LEN(x), NULL);\
+ DO_COMPARE_SUB(op);\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+} while (0)
+
+#define DO_COMPARE(x, y, r, op) do {\
+ if (x->header.domain >= GRN_N_RESERVED_TYPES) {\
+ grn_obj *table;\
+ table = grn_ctx_at(ctx, x->header.domain);\
+ switch (table->header.type) {\
+ case GRN_TABLE_HASH_KEY :\
+ case GRN_TABLE_PAT_KEY :\
+ {\
+ grn_obj key;\
+ int length;\
+ GRN_OBJ_INIT(&key, GRN_BULK, 0, table->header.domain);\
+ length = grn_table_get_key2(ctx, table, GRN_RECORD_VALUE(x), &key);\
+ if (length > 0) {\
+ grn_obj *x_original = x;\
+ x = &key;\
+ DO_COMPARE_BUILTIN((&key), y, r, op);\
+ x = x_original;\
+ } else {\
+ r = 0;\
+ }\
+ GRN_OBJ_FIN(ctx, &key);\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+ grn_obj_unlink(ctx, table);\
+ } else {\
+ DO_COMPARE_BUILTIN(x, y, r, op);\
+ }\
+} while (0)
+
+#define DO_EQ_SUB do {\
+ switch (y->header.domain) {\
+ case GRN_DB_INT8 :\
+ r = (x_ == GRN_INT8_VALUE(y));\
+ break;\
+ case GRN_DB_UINT8 :\
+ r = (x_ == GRN_UINT8_VALUE(y));\
+ break;\
+ case GRN_DB_INT16 :\
+ r = (x_ == GRN_INT16_VALUE(y));\
+ break;\
+ case GRN_DB_UINT16 :\
+ r = (x_ == GRN_UINT16_VALUE(y));\
+ break;\
+ case GRN_DB_INT32 :\
+ r = (x_ == GRN_INT32_VALUE(y));\
+ break;\
+ case GRN_DB_UINT32 :\
+ r = (x_ == GRN_UINT32_VALUE(y));\
+ break;\
+ case GRN_DB_INT64 :\
+ r = (x_ == GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_TIME :\
+ r = (GRN_TIME_PACK(x_,0) == GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_UINT64 :\
+ r = (x_ == GRN_UINT64_VALUE(y));\
+ break;\
+ case GRN_DB_FLOAT :\
+ r = ((x_ <= GRN_FLOAT_VALUE(y)) && (x_ >= GRN_FLOAT_VALUE(y)));\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ {\
+ const char *p_ = GRN_TEXT_VALUE(y);\
+ int i_ = grn_atoi(p_, p_ + GRN_TEXT_LEN(y), NULL);\
+ r = (x_ == i_);\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+} while (0)
+
+#define DO_EQ(x,y,r) do {\
+ switch (x->header.domain) {\
+ case GRN_DB_VOID :\
+ r = 0;\
+ break;\
+ case GRN_DB_INT8 :\
+ {\
+ int8_t x_ = GRN_INT8_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_UINT8 :\
+ {\
+ uint8_t x_ = GRN_UINT8_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_INT16 :\
+ {\
+ int16_t x_ = GRN_INT16_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_UINT16 :\
+ {\
+ uint16_t x_ = GRN_UINT16_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_INT32 :\
+ {\
+ int32_t x_ = GRN_INT32_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_UINT32 :\
+ {\
+ uint32_t x_ = GRN_UINT32_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_INT64 :\
+ {\
+ int64_t x_ = GRN_INT64_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_TIME :\
+ {\
+ int64_t x_ = GRN_INT64_VALUE(x);\
+ switch (y->header.domain) {\
+ case GRN_DB_INT32 :\
+ r = (x_ == GRN_TIME_PACK(GRN_INT32_VALUE(y), 0));\
+ break;\
+ case GRN_DB_UINT32 :\
+ r = (x_ == GRN_TIME_PACK(GRN_UINT32_VALUE(y), 0));\
+ break;\
+ case GRN_DB_INT64 :\
+ case GRN_DB_TIME :\
+ r = (x_ == GRN_INT64_VALUE(y));\
+ break;\
+ case GRN_DB_UINT64 :\
+ r = (x_ == GRN_UINT64_VALUE(y));\
+ break;\
+ case GRN_DB_FLOAT :\
+ r = (x_ == GRN_TIME_PACK(GRN_FLOAT_VALUE(y), 0));\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ {\
+ const char *p_ = GRN_TEXT_VALUE(y);\
+ int i_ = grn_atoi(p_, p_ + GRN_TEXT_LEN(y), NULL);\
+ r = (x_ == GRN_TIME_PACK(i_, 0));\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+ }\
+ break;\
+ case GRN_DB_UINT64 :\
+ {\
+ uint64_t x_ = GRN_UINT64_VALUE(x);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ case GRN_DB_FLOAT :\
+ {\
+ double x_ = GRN_FLOAT_VALUE(x);\
+ switch (y->header.domain) {\
+ case GRN_DB_INT32 :\
+ r = ((x_ <= GRN_INT32_VALUE(y)) && (x_ >= GRN_INT32_VALUE(y)));\
+ break;\
+ case GRN_DB_UINT32 :\
+ r = ((x_ <= GRN_UINT32_VALUE(y)) && (x_ >= GRN_UINT32_VALUE(y)));\
+ break;\
+ case GRN_DB_INT64 :\
+ case GRN_DB_TIME :\
+ r = ((x_ <= GRN_INT64_VALUE(y)) && (x_ >= GRN_INT64_VALUE(y)));\
+ break;\
+ case GRN_DB_UINT64 :\
+ r = ((x_ <= GRN_UINT64_VALUE(y)) && (x_ >= GRN_UINT64_VALUE(y)));\
+ break;\
+ case GRN_DB_FLOAT :\
+ r = ((x_ <= GRN_FLOAT_VALUE(y)) && (x_ >= GRN_FLOAT_VALUE(y)));\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ {\
+ const char *p_ = GRN_TEXT_VALUE(y);\
+ int i_ = grn_atoi(p_, p_ + GRN_TEXT_LEN(y), NULL);\
+ r = (x_ <= i_ && x_ >= i_);\
+ }\
+ break;\
+ default :\
+ r = 0;\
+ break;\
+ }\
+ }\
+ break;\
+ case GRN_DB_SHORT_TEXT :\
+ case GRN_DB_TEXT :\
+ case GRN_DB_LONG_TEXT :\
+ if (GRN_DB_SHORT_TEXT <= y->header.domain && y->header.domain <= GRN_DB_LONG_TEXT) {\
+ uint32_t la = GRN_TEXT_LEN(x), lb = GRN_TEXT_LEN(y);\
+ r = (la == lb && !memcmp(GRN_TEXT_VALUE(x), GRN_TEXT_VALUE(y), lb));\
+ } else {\
+ const char *q_ = GRN_TEXT_VALUE(x);\
+ int x_ = grn_atoi(q_, q_ + GRN_TEXT_LEN(x), NULL);\
+ DO_EQ_SUB;\
+ }\
+ break;\
+ default :\
+ if ((x->header.domain == y->header.domain)) {\
+ r = (GRN_BULK_VSIZE(x) == GRN_BULK_VSIZE(y) &&\
+ !(memcmp(GRN_BULK_HEAD(x), GRN_BULK_HEAD(y), GRN_BULK_VSIZE(x))));\
+ } else {\
+ grn_obj dest;\
+ if (x->header.domain < y->header.domain) {\
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, y->header.domain);\
+ if (!grn_obj_cast(ctx, x, &dest, GRN_FALSE)) {\
+ r = (GRN_BULK_VSIZE(&dest) == GRN_BULK_VSIZE(y) &&\
+ !memcmp(GRN_BULK_HEAD(&dest), GRN_BULK_HEAD(y), GRN_BULK_VSIZE(y))); \
+ }\
+ } else {\
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, x->header.domain);\
+ if (!grn_obj_cast(ctx, y, &dest, GRN_FALSE)) {\
+ r = (GRN_BULK_VSIZE(&dest) == GRN_BULK_VSIZE(x) &&\
+ !memcmp(GRN_BULK_HEAD(&dest), GRN_BULK_HEAD(x), GRN_BULK_VSIZE(x))); \
+ }\
+ }\
+ GRN_OBJ_FIN(ctx, &dest);\
+ }\
+ break;\
+ }\
+} while (0)
+
+#define GEO_RESOLUTION 3600000
+#define GEO_RADIOUS 6357303
+#define GEO_BES_C1 6334834
+#define GEO_BES_C2 6377397
+#define GEO_BES_C3 0.006674
+#define GEO_GRS_C1 6335439
+#define GEO_GRS_C2 6378137
+#define GEO_GRS_C3 0.006694
+#define GEO_INT2RAD(x) ((M_PI * x) / (GEO_RESOLUTION * 180))
+
+#define VAR_SET_VALUE(ctx,var,value) do {\
+ if (GRN_DB_OBJP(value)) {\
+ (var)->header.type = GRN_PTR;\
+ (var)->header.domain = DB_OBJ(value)->id;\
+ GRN_PTR_SET(ctx, (var), (value));\
+ } else {\
+ (var)->header.type = (value)->header.type;\
+ (var)->header.domain = (value)->header.domain;\
+ GRN_TEXT_SET(ctx, (var), GRN_TEXT_VALUE(value), GRN_TEXT_LEN(value));\
+ }\
+} while (0)
+
+grn_rc
+grn_proc_call(grn_ctx *ctx, grn_obj *proc, int nargs, grn_obj *caller)
+{
+ grn_proc_ctx pctx;
+ grn_obj *obj = NULL, **args;
+ grn_proc *p = (grn_proc *)proc;
+ if (nargs > ctx->impl->stack_curr) { return GRN_INVALID_ARGUMENT; }
+ GRN_API_ENTER;
+ args = ctx->impl->stack + ctx->impl->stack_curr - nargs;
+ pctx.proc = p;
+ pctx.caller = caller;
+ pctx.user_data.ptr = NULL;
+ if (p->funcs[PROC_INIT]) {
+ obj = p->funcs[PROC_INIT](ctx, nargs, args, &pctx.user_data);
+ }
+ pctx.phase = PROC_NEXT;
+ if (p->funcs[PROC_NEXT]) {
+ obj = p->funcs[PROC_NEXT](ctx, nargs, args, &pctx.user_data);
+ }
+ pctx.phase = PROC_FIN;
+ if (p->funcs[PROC_FIN]) {
+ obj = p->funcs[PROC_FIN](ctx, nargs, args, &pctx.user_data);
+ }
+ ctx->impl->stack_curr -= nargs;
+ grn_ctx_push(ctx, obj);
+ GRN_API_RETURN(ctx->rc);
+}
+
+#define PUSH1(v) do {\
+ if (EXPRVP(v)) { vp++; }\
+ s1 = s0;\
+ *sp++ = s0 = v;\
+} while (0)
+
+#define POP1(v) do {\
+ if (EXPRVP(s0)) { vp--; }\
+ v = s0;\
+ s0 = s1;\
+ sp--;\
+ if (sp < s_) { ERR(GRN_INVALID_ARGUMENT, "stack underflow"); goto exit; }\
+ s1 = sp[-2];\
+} while (0)
+
+#define ALLOC1(value) do {\
+ s1 = s0;\
+ *sp++ = s0 = value = vp++;\
+ if (vp - e->values > e->values_tail) { e->values_tail = vp - e->values; }\
+} while (0)
+
+#define POP1ALLOC1(arg,value) do {\
+ arg = s0;\
+ if (EXPRVP(s0)) {\
+ value = s0;\
+ } else {\
+ if (sp < s_ + 1) { ERR(GRN_INVALID_ARGUMENT, "stack underflow"); goto exit; }\
+ sp[-1] = s0 = value = vp++;\
+ s0->header.impl_flags |= GRN_OBJ_EXPRVALUE;\
+ }\
+} while (0)
+
+#define POP2ALLOC1(arg1,arg2,value) do {\
+ if (EXPRVP(s0)) { vp--; }\
+ if (EXPRVP(s1)) { vp--; }\
+ arg2 = s0;\
+ arg1 = s1;\
+ sp--;\
+ if (sp < s_ + 1) { ERR(GRN_INVALID_ARGUMENT, "stack underflow"); goto exit; }\
+ s1 = sp[-2];\
+ sp[-1] = s0 = value = vp++;\
+ s0->header.impl_flags |= GRN_OBJ_EXPRVALUE;\
+} while (0)
+
+#define INTEGER_ARITHMETIC_OPERATION_PLUS(x, y) ((x) + (y))
+#define FLOAT_ARITHMETIC_OPERATION_PLUS(x, y) ((double)(x) + (double)(y))
+#define INTEGER_ARITHMETIC_OPERATION_MINUS(x, y) ((x) - (y))
+#define FLOAT_ARITHMETIC_OPERATION_MINUS(x, y) ((double)(x) - (double)(y))
+#define INTEGER_ARITHMETIC_OPERATION_STAR(x, y) ((x) * (y))
+#define FLOAT_ARITHMETIC_OPERATION_STAR(x, y) ((double)(x) * (double)(y))
+#define INTEGER_ARITHMETIC_OPERATION_SLASH(x, y) ((x) / (y))
+#define FLOAT_ARITHMETIC_OPERATION_SLASH(x, y) ((double)(x) / (double)(y))
+#define INTEGER_ARITHMETIC_OPERATION_MOD(x, y) ((x) % (y))
+#define FLOAT_ARITHMETIC_OPERATION_MOD(x, y) (fmod((x), (y)))
+#define INTEGER_ARITHMETIC_OPERATION_SHIFTL(x, y) ((x) << (y))
+#define FLOAT_ARITHMETIC_OPERATION_SHIFTL(x, y) \
+ ((long long int)(x) << (long long int)(y))
+#define INTEGER_ARITHMETIC_OPERATION_SHIFTR(x, y) ((x) >> (y))
+#define FLOAT_ARITHMETIC_OPERATION_SHIFTR(x, y) \
+ ((long long int)(x) >> (long long int)(y))
+#define INTEGER8_ARITHMETIC_OPERATION_SHIFTRR(x, y) \
+ ((uint8_t)(x) >> (y))
+#define INTEGER16_ARITHMETIC_OPERATION_SHIFTRR(x, y) \
+ ((uint16_t)(x) >> (y))
+#define INTEGER32_ARITHMETIC_OPERATION_SHIFTRR(x, y) \
+ ((unsigned int)(x) >> (y))
+#define INTEGER64_ARITHMETIC_OPERATION_SHIFTRR(x, y) \
+ ((long long unsigned int)(x) >> (y))
+#define FLOAT_ARITHMETIC_OPERATION_SHIFTRR(x, y) \
+ ((long long unsigned int)(x) >> (long long unsigned int)(y))
+
+#define INTEGER_ARITHMETIC_OPERATION_BITWISE_OR(x, y) ((x) | (y))
+#define FLOAT_ARITHMETIC_OPERATION_BITWISE_OR(x, y) \
+ ((long long int)(x) | (long long int)(y))
+#define INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR(x, y) ((x) ^ (y))
+#define FLOAT_ARITHMETIC_OPERATION_BITWISE_XOR(x, y) \
+ ((long long int)(x) ^ (long long int)(y))
+#define INTEGER_ARITHMETIC_OPERATION_BITWISE_AND(x, y) ((x) & (y))
+#define FLOAT_ARITHMETIC_OPERATION_BITWISE_AND(x, y) \
+ ((long long int)(x) & (long long int)(y))
+
+#define INTEGER_UNARY_ARITHMETIC_OPERATION_MINUS(x) (-(x))
+#define FLOAT_UNARY_ARITHMETIC_OPERATION_MINUS(x) (-(x))
+#define INTEGER_UNARY_ARITHMETIC_OPERATION_BITWISE_NOT(x) (~(x))
+#define FLOAT_UNARY_ARITHMETIC_OPERATION_BITWISE_NOT(x) \
+ (~((long long int)(x)))
+
+#define TEXT_ARITHMETIC_OPERATION(operator) do { \
+ long long int x_; \
+ long long int y_; \
+ \
+ res->header.domain = GRN_DB_INT64; \
+ \
+ GRN_INT64_SET(ctx, res, 0); \
+ grn_obj_cast(ctx, x, res, GRN_FALSE); \
+ x_ = GRN_INT64_VALUE(res); \
+ \
+ GRN_INT64_SET(ctx, res, 0); \
+ grn_obj_cast(ctx, y, res, GRN_FALSE); \
+ y_ = GRN_INT64_VALUE(res); \
+ \
+ GRN_INT64_SET(ctx, res, x_ operator y_); \
+} while (0)
+
+#define TEXT_UNARY_ARITHMETIC_OPERATION(unary_operator) do { \
+ long long int x_; \
+ \
+ res->header.domain = GRN_DB_INT64; \
+ \
+ GRN_INT64_SET(ctx, res, 0); \
+ grn_obj_cast(ctx, x, res, GRN_FALSE); \
+ x_ = GRN_INT64_VALUE(res); \
+ \
+ GRN_INT64_SET(ctx, res, unary_operator x_); \
+} while (0)
+
+#define ARITHMETIC_OPERATION_NO_CHECK(y) do {} while (0)
+#define ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y) do { \
+ if ((long long int)y == 0) { \
+ ERR(GRN_INVALID_ARGUMENT, "divisor should not be 0"); \
+ goto exit; \
+ } \
+} while (0)
+
+
+#define NUMERIC_ARITHMETIC_OPERATION_DISPATCH(set, get, x_, y, res, \
+ integer_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error) do { \
+ switch (y->header.domain) { \
+ case GRN_DB_INT8 : \
+ { \
+ int8_t y_; \
+ y_ = GRN_INT8_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT8 : \
+ { \
+ uint8_t y_; \
+ y_ = GRN_UINT8_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT16 : \
+ { \
+ int16_t y_; \
+ y_ = GRN_INT16_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT16 : \
+ { \
+ uint16_t y_; \
+ y_ = GRN_UINT16_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT32 : \
+ { \
+ int y_; \
+ y_ = GRN_INT32_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT32 : \
+ { \
+ unsigned int y_; \
+ y_ = GRN_UINT32_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_TIME : \
+ { \
+ long long int y_; \
+ y_ = GRN_TIME_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT64 : \
+ { \
+ long long int y_; \
+ y_ = GRN_INT64_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT64 : \
+ { \
+ long long unsigned int y_; \
+ y_ = GRN_UINT64_VALUE(y); \
+ right_expression_check(y_); \
+ set(ctx, res, integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double y_; \
+ y_ = GRN_FLOAT_VALUE(y); \
+ right_expression_check(y_); \
+ res->header.domain = GRN_DB_FLOAT; \
+ GRN_FLOAT_SET(ctx, res, float_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ set(ctx, res, 0); \
+ if (grn_obj_cast(ctx, y, res, GRN_FALSE)) { \
+ ERR(GRN_INVALID_ARGUMENT, \
+ "not a numerical format: <%.*s>", \
+ (int)GRN_TEXT_LEN(y), GRN_TEXT_VALUE(y)); \
+ goto exit; \
+ } \
+ set(ctx, res, integer_operation(x_, get(res))); \
+ break; \
+ default : \
+ invalid_type_error; \
+ break; \
+ } \
+} while (0)
+
+
+#define ARITHMETIC_OPERATION_DISPATCH(x, y, res, \
+ integer8_operation, \
+ integer16_operation, \
+ integer32_operation, \
+ integer64_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check, \
+ text_operation, \
+ invalid_type_error) do { \
+ switch (x->header.domain) { \
+ case GRN_DB_INT8 : \
+ { \
+ int8_t x_; \
+ x_ = GRN_INT8_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_INT8_SET, \
+ GRN_INT8_VALUE, \
+ x_, y, res, \
+ integer8_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_UINT8 : \
+ { \
+ uint8_t x_; \
+ x_ = GRN_UINT8_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_UINT8_SET, \
+ GRN_UINT8_VALUE, \
+ x_, y, res, \
+ integer8_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_INT16 : \
+ { \
+ int16_t x_; \
+ x_ = GRN_INT16_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_INT16_SET, \
+ GRN_INT16_VALUE, \
+ x_, y, res, \
+ integer16_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_UINT16 : \
+ { \
+ uint16_t x_; \
+ x_ = GRN_UINT16_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_UINT16_SET, \
+ GRN_UINT16_VALUE, \
+ x_, y, res, \
+ integer16_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_INT32 : \
+ { \
+ int x_; \
+ x_ = GRN_INT32_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_INT32_SET, \
+ GRN_INT32_VALUE, \
+ x_, y, res, \
+ integer32_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_UINT32 : \
+ { \
+ unsigned int x_; \
+ x_ = GRN_UINT32_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_UINT32_SET, \
+ GRN_UINT32_VALUE, \
+ x_, y, res, \
+ integer32_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_INT64 : \
+ { \
+ long long int x_; \
+ x_ = GRN_INT64_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_UINT64_SET, \
+ GRN_UINT64_VALUE, \
+ x_, y, res, \
+ integer64_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_TIME : \
+ { \
+ long long int x_; \
+ x_ = GRN_TIME_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_TIME_SET, \
+ GRN_TIME_VALUE, \
+ x_, y, res, \
+ integer64_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_UINT64 : \
+ { \
+ long long unsigned int x_; \
+ x_ = GRN_UINT64_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_UINT64_SET, \
+ GRN_UINT64_VALUE, \
+ x_, y, res, \
+ integer64_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double x_; \
+ x_ = GRN_FLOAT_VALUE(x); \
+ left_expression_check(x_); \
+ NUMERIC_ARITHMETIC_OPERATION_DISPATCH(GRN_FLOAT_SET, \
+ GRN_FLOAT_VALUE, \
+ x_, y, res, \
+ float_operation, \
+ float_operation, \
+ right_expression_check, \
+ invalid_type_error); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ text_operation; \
+ break; \
+ default: \
+ invalid_type_error; \
+ break; \
+ } \
+ code++; \
+} while (0)
+
+#define ARITHMETIC_BINARY_OPERATION_DISPATCH(integer8_operation, \
+ integer16_operation, \
+ integer32_operation, \
+ integer64_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check, \
+ text_operation, \
+ invalid_type_error) do { \
+ grn_obj *x, *y; \
+ \
+ POP2ALLOC1(x, y, res); \
+ if (y != res) { \
+ res->header.domain = x->header.domain; \
+ } \
+ ARITHMETIC_OPERATION_DISPATCH(x, y, res, \
+ integer8_operation, \
+ integer16_operation, \
+ integer32_operation, \
+ integer64_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check, \
+ text_operation, \
+ invalid_type_error); \
+ if (y == res) { \
+ res->header.domain = x->header.domain; \
+ } \
+} while (0)
+
+#define SIGNED_INTEGER_DIVISION_OPERATION_SLASH(x, y) \
+ ((y == -1) ? -(x) : (x) / (y))
+#define UNSIGNED_INTEGER_DIVISION_OPERATION_SLASH(x, y) ((x) / (y))
+#define FLOAT_DIVISION_OPERATION_SLASH(x, y) ((double)(x) / (double)(y))
+#define SIGNED_INTEGER_DIVISION_OPERATION_MOD(x, y) ((y == -1) ? 0 : (x) % (y))
+#define UNSIGNED_INTEGER_DIVISION_OPERATION_MOD(x, y) ((x) % (y))
+#define FLOAT_DIVISION_OPERATION_MOD(x, y) (fmod((x), (y)))
+
+#define DIVISION_OPERATION_DISPATCH_RIGHT(set, get, x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation) do { \
+ switch (y->header.domain) { \
+ case GRN_DB_INT8 : \
+ { \
+ int y_; \
+ y_ = GRN_INT8_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT8 : \
+ { \
+ int y_; \
+ y_ = GRN_UINT8_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT16 : \
+ { \
+ int y_; \
+ y_ = GRN_INT16_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT16 : \
+ { \
+ int y_; \
+ y_ = GRN_UINT16_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT32 : \
+ { \
+ int y_; \
+ y_ = GRN_INT32_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT32 : \
+ { \
+ unsigned int y_; \
+ y_ = GRN_UINT32_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, unsigned_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_TIME : \
+ { \
+ long long int y_; \
+ y_ = GRN_TIME_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_INT64 : \
+ { \
+ long long int y_; \
+ y_ = GRN_INT64_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, signed_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_UINT64 : \
+ { \
+ long long unsigned int y_; \
+ y_ = GRN_UINT64_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ set(ctx, res, unsigned_integer_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double y_; \
+ y_ = GRN_FLOAT_VALUE(y); \
+ ARITHMETIC_OPERATION_ZERO_DIVISION_CHECK(y_); \
+ res->header.domain = GRN_DB_FLOAT; \
+ GRN_FLOAT_SET(ctx, res, float_operation(x_, y_)); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ set(ctx, res, 0); \
+ if (grn_obj_cast(ctx, y, res, GRN_FALSE)) { \
+ ERR(GRN_INVALID_ARGUMENT, \
+ "not a numerical format: <%.*s>", \
+ (int)GRN_TEXT_LEN(y), GRN_TEXT_VALUE(y)); \
+ goto exit; \
+ } \
+ /* The following "+ 0" is needed to suppress warnings that say */ \
+ /* comparison is always false due to limited range of data type */ \
+ set(ctx, res, signed_integer_operation(x_, (get(res) + 0))); \
+ break; \
+ default : \
+ break; \
+ } \
+} while (0)
+
+#define DIVISION_OPERATION_DISPATCH_LEFT(x, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation, \
+ invalid_type_error) do { \
+ switch (x->header.domain) { \
+ case GRN_DB_INT8 : \
+ { \
+ int x_; \
+ x_ = GRN_INT8_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_INT8_SET, \
+ GRN_INT8_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_UINT8 : \
+ { \
+ int x_; \
+ x_ = GRN_UINT8_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_UINT8_SET, \
+ (int)GRN_UINT8_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_INT16 : \
+ { \
+ int x_; \
+ x_ = GRN_INT16_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_INT16_SET, \
+ GRN_INT16_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_UINT16 : \
+ { \
+ int x_; \
+ x_ = GRN_UINT16_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_UINT16_SET, \
+ (int)GRN_UINT16_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_INT32 : \
+ { \
+ int x_; \
+ x_ = GRN_INT32_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_INT32_SET, \
+ GRN_INT32_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_UINT32 : \
+ { \
+ unsigned int x_; \
+ x_ = GRN_UINT32_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_UINT32_SET, \
+ GRN_UINT32_VALUE, \
+ x_, y, res, \
+ unsigned_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_INT64 : \
+ { \
+ long long int x_; \
+ x_ = GRN_INT64_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_INT64_SET, \
+ GRN_INT64_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_TIME : \
+ { \
+ long long int x_; \
+ x_ = GRN_TIME_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_TIME_SET, \
+ GRN_TIME_VALUE, \
+ x_, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_UINT64 : \
+ { \
+ long long unsigned int x_; \
+ x_ = GRN_UINT64_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_UINT64_SET, \
+ GRN_UINT64_VALUE, \
+ x_, y, res, \
+ unsigned_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double x_; \
+ x_ = GRN_FLOAT_VALUE(x); \
+ DIVISION_OPERATION_DISPATCH_RIGHT(GRN_FLOAT_SET, \
+ GRN_FLOAT_VALUE, \
+ x_, y, res, \
+ float_operation, \
+ float_operation, \
+ float_operation); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ invalid_type_error; \
+ break; \
+ default: \
+ break; \
+ } \
+ code++; \
+} while (0)
+
+#define DIVISION_OPERATION_DISPATCH(signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation, \
+ invalid_type_error) do { \
+ grn_obj *x, *y; \
+ \
+ POP2ALLOC1(x, y, res); \
+ if (y != res) { \
+ res->header.domain = x->header.domain; \
+ } \
+ DIVISION_OPERATION_DISPATCH_LEFT(x, y, res, \
+ signed_integer_operation, \
+ unsigned_integer_operation, \
+ float_operation, \
+ invalid_type_error); \
+ if (y == res) { \
+ res->header.domain = x->header.domain; \
+ } \
+} while (0)
+
+#define ARITHMETIC_UNARY_OPERATION_DISPATCH(integer_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check, \
+ text_operation, \
+ invalid_type_error) do { \
+ grn_obj *x; \
+ POP1ALLOC1(x, res); \
+ res->header.domain = x->header.domain; \
+ switch (x->header.domain) { \
+ case GRN_DB_INT8 : \
+ { \
+ int8_t x_; \
+ x_ = GRN_INT8_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT8_SET(ctx, res, integer_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_UINT8 : \
+ { \
+ int16_t x_; \
+ x_ = GRN_UINT8_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT16_SET(ctx, res, integer_operation(x_)); \
+ res->header.domain = GRN_DB_INT16; \
+ } \
+ break; \
+ case GRN_DB_INT16 : \
+ { \
+ int16_t x_; \
+ x_ = GRN_INT16_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT16_SET(ctx, res, integer_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_UINT16 : \
+ { \
+ int x_; \
+ x_ = GRN_UINT16_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT32_SET(ctx, res, integer_operation(x_)); \
+ res->header.domain = GRN_DB_INT32; \
+ } \
+ break; \
+ case GRN_DB_INT32 : \
+ { \
+ int x_; \
+ x_ = GRN_INT32_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT32_SET(ctx, res, integer_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_UINT32 : \
+ { \
+ long long int x_; \
+ x_ = GRN_UINT32_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT64_SET(ctx, res, integer_operation(x_)); \
+ res->header.domain = GRN_DB_INT64; \
+ } \
+ break; \
+ case GRN_DB_INT64 : \
+ { \
+ long long int x_; \
+ x_ = GRN_INT64_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_INT64_SET(ctx, res, integer_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_TIME : \
+ { \
+ long long int x_; \
+ x_ = GRN_TIME_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_TIME_SET(ctx, res, integer_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_UINT64 : \
+ { \
+ long long unsigned int x_; \
+ x_ = GRN_UINT64_VALUE(x); \
+ left_expression_check(x_); \
+ if (x_ > (long long unsigned int)INT64_MAX) { \
+ ERR(GRN_INVALID_ARGUMENT, \
+ "too large UInt64 value to inverse sign: " \
+ "<%" GRN_FMT_LLU ">", \
+ x_); \
+ goto exit; \
+ } else { \
+ long long int signed_x_; \
+ signed_x_ = x_; \
+ GRN_INT64_SET(ctx, res, integer_operation(signed_x_)); \
+ res->header.domain = GRN_DB_INT64; \
+ } \
+ } \
+ break; \
+ case GRN_DB_FLOAT : \
+ { \
+ double x_; \
+ x_ = GRN_FLOAT_VALUE(x); \
+ left_expression_check(x_); \
+ GRN_FLOAT_SET(ctx, res, float_operation(x_)); \
+ } \
+ break; \
+ case GRN_DB_SHORT_TEXT : \
+ case GRN_DB_TEXT : \
+ case GRN_DB_LONG_TEXT : \
+ text_operation; \
+ break; \
+ default: \
+ invalid_type_error; \
+ break; \
+ } \
+ code++; \
+} while (0)
+
+#define EXEC_OPERATE(operate_sentence, assign_sentence) \
+ operate_sentence \
+ assign_sentence
+
+#define EXEC_OPERATE_POST(operate_sentence, assign_sentence) \
+ assign_sentence \
+ operate_sentence
+
+#define UNARY_OPERATE_AND_ASSIGN_DISPATCH(exec_operate, delta, \
+ set_flags) do { \
+ grn_obj *var, *col, value; \
+ grn_id rid; \
+ \
+ POP1ALLOC1(var, res); \
+ if (var->header.type != GRN_PTR) { \
+ ERR(GRN_INVALID_ARGUMENT, "invalid variable type: 0x%0x", \
+ var->header.type); \
+ goto exit; \
+ } \
+ if (GRN_BULK_VSIZE(var) != (sizeof(grn_obj *) + sizeof(grn_id))) { \
+ ERR(GRN_INVALID_ARGUMENT, \
+ "invalid variable size: expected: %zu, actual: %zu", \
+ (sizeof(grn_obj *) + sizeof(grn_id)), GRN_BULK_VSIZE(var)); \
+ goto exit; \
+ } \
+ col = GRN_PTR_VALUE(var); \
+ rid = *(grn_id *)(GRN_BULK_HEAD(var) + sizeof(grn_obj *)); \
+ res->header.type = GRN_VOID; \
+ res->header.domain = DB_OBJ(col)->range; \
+ switch (DB_OBJ(col)->range) { \
+ case GRN_DB_INT32 : \
+ GRN_INT32_INIT(&value, 0); \
+ GRN_INT32_SET(ctx, &value, delta); \
+ break; \
+ case GRN_DB_UINT32 : \
+ GRN_UINT32_INIT(&value, 0); \
+ GRN_UINT32_SET(ctx, &value, delta); \
+ break; \
+ case GRN_DB_INT64 : \
+ GRN_INT64_INIT(&value, 0); \
+ GRN_INT64_SET(ctx, &value, delta); \
+ break; \
+ case GRN_DB_UINT64 : \
+ GRN_UINT64_INIT(&value, 0); \
+ GRN_UINT64_SET(ctx, &value, delta); \
+ break; \
+ case GRN_DB_FLOAT : \
+ GRN_FLOAT_INIT(&value, 0); \
+ GRN_FLOAT_SET(ctx, &value, delta); \
+ break; \
+ case GRN_DB_TIME : \
+ GRN_TIME_INIT(&value, 0); \
+ GRN_TIME_SET(ctx, &value, GRN_TIME_PACK(delta, 0)); \
+ break; \
+ default: \
+ ERR(GRN_INVALID_ARGUMENT, \
+ "invalid increment target type: %d " \
+ "(FIXME: type name is needed)", DB_OBJ(col)->range); \
+ goto exit; \
+ break; \
+ } \
+ exec_operate(grn_obj_set_value(ctx, col, rid, &value, set_flags);, \
+ grn_obj_get_value(ctx, col, rid, res);); \
+ code++; \
+} while (0)
+
+#define ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(integer8_operation, \
+ integer16_operation, \
+ integer32_operation, \
+ integer64_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check,\
+ text_operation) do { \
+ grn_obj *value, *var, *res; \
+ if (code->value) { \
+ value = code->value; \
+ POP1ALLOC1(var, res); \
+ } else { \
+ POP2ALLOC1(var, value, res); \
+ } \
+ if (var->header.type == GRN_PTR && \
+ GRN_BULK_VSIZE(var) == (sizeof(grn_obj *) + sizeof(grn_id))) { \
+ grn_obj *col = GRN_PTR_VALUE(var); \
+ grn_id rid = *(grn_id *)(GRN_BULK_HEAD(var) + sizeof(grn_obj *)); \
+ grn_obj variable_value, casted_value; \
+ grn_id domain; \
+ \
+ value = GRN_OBJ_RESOLVE(ctx, value); \
+ \
+ domain = grn_obj_get_range(ctx, col); \
+ GRN_OBJ_INIT(&variable_value, GRN_BULK, 0, domain); \
+ grn_obj_get_value(ctx, col, rid, &variable_value); \
+ \
+ GRN_OBJ_INIT(&casted_value, GRN_BULK, 0, domain); \
+ if (grn_obj_cast(ctx, value, &casted_value, GRN_FALSE)) { \
+ ERR(GRN_INVALID_ARGUMENT, "invalid value: string"); \
+ GRN_OBJ_FIN(ctx, &variable_value); \
+ GRN_OBJ_FIN(ctx, &casted_value); \
+ POP1(res); \
+ goto exit; \
+ } \
+ grn_obj_reinit(ctx, res, domain, 0); \
+ ARITHMETIC_OPERATION_DISPATCH((&variable_value), (&casted_value), \
+ res, \
+ integer8_operation, \
+ integer16_operation, \
+ integer32_operation, \
+ integer64_operation, \
+ float_operation, \
+ left_expression_check, \
+ right_expression_check, \
+ text_operation,); \
+ grn_obj_set_value(ctx, col, rid, res, GRN_OBJ_SET); \
+ GRN_OBJ_FIN(ctx, (&variable_value)); \
+ GRN_OBJ_FIN(ctx, (&casted_value)); \
+ } else { \
+ ERR(GRN_INVALID_ARGUMENT, "left hand expression isn't column."); \
+ POP1(res); \
+ } \
+} while (0)
+
+static grn_bool
+pseudo_query_scan(grn_ctx *ctx, grn_obj *x, grn_obj *y)
+{
+ grn_obj *normalizer;
+ grn_obj *a = NULL, *b = NULL;
+ grn_bool matched = GRN_FALSE;
+
+ normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ switch (x->header.domain) {
+ case GRN_DB_SHORT_TEXT:
+ case GRN_DB_TEXT:
+ case GRN_DB_LONG_TEXT:
+ a = grn_string_open(ctx, GRN_TEXT_VALUE(x), GRN_TEXT_LEN(x),
+ normalizer, 0);
+ break;
+ default:
+ break;
+ }
+
+ switch (y->header.domain) {
+ case GRN_DB_SHORT_TEXT:
+ case GRN_DB_TEXT:
+ case GRN_DB_LONG_TEXT:
+ b = grn_string_open(ctx, GRN_TEXT_VALUE(y), GRN_TEXT_LEN(y),
+ normalizer, 0);
+ break;
+ default:
+ break;
+ }
+
+ /* normalized str doesn't contain '\0'. */
+ if (a && b) {
+ const char *a_norm, *b_norm;
+ grn_string_get_normalized(ctx, a, &a_norm, NULL, NULL);
+ grn_string_get_normalized(ctx, b, &b_norm, NULL, NULL);
+ matched = (strstr(a_norm, b_norm) != NULL);
+ }
+
+ if (a) { grn_obj_close(ctx, a); }
+ if (b) { grn_obj_close(ctx, b); }
+
+ if (normalizer) { grn_obj_unlink(ctx, normalizer); }
+
+ return matched;
+}
+
+inline static void
+grn_expr_exec_get_member(grn_ctx *ctx,
+ grn_obj *expr,
+ grn_obj *column_and_record_id,
+ grn_obj *index,
+ grn_obj *result)
+{
+ grn_obj *column;
+ grn_id record_id;
+ grn_obj values;
+ int i;
+
+ column = GRN_PTR_VALUE(column_and_record_id);
+ record_id = *((grn_id *)(&(GRN_PTR_VALUE_AT(column_and_record_id, 1))));
+ GRN_TEXT_INIT(&values, 0);
+ grn_obj_get_value(ctx, column, record_id, &values);
+
+ grn_obj_reinit(ctx, result, DB_OBJ(column)->range, 0);
+ i = GRN_UINT32_VALUE(index);
+ if (values.header.type == GRN_UVECTOR) {
+ int n_elements;
+ n_elements = GRN_BULK_VSIZE(&values) / sizeof(grn_id);
+ if (n_elements > i) {
+ grn_id value;
+ value = GRN_RECORD_VALUE_AT(&values, i);
+ GRN_RECORD_SET(ctx, result, value);
+ }
+ } else {
+ if (values.u.v.n_sections > i) {
+ grn_section *section = &(values.u.v.sections[i]);
+ grn_obj *body = values.u.v.body;
+ const char *value;
+ value = GRN_BULK_HEAD(body) + section->offset;
+ grn_bulk_write(ctx, result, value, section->length);
+ }
+ }
+
+ GRN_OBJ_FIN(ctx, &values);
+}
+
+grn_obj *
+grn_expr_exec(grn_ctx *ctx, grn_obj *expr, int nargs)
+{
+ grn_obj *val = NULL;
+ uint32_t stack_curr = ctx->impl->stack_curr;
+ GRN_API_ENTER;
+ if (expr->header.type == GRN_PROC) {
+ grn_proc_call(ctx, expr, nargs, expr);
+ } else {
+ grn_expr *e = (grn_expr *)expr;
+ register grn_obj **s_ = ctx->impl->stack, *s0 = NULL, *s1 = NULL, **sp, *vp = e->values;
+ grn_obj *res = NULL, *v0 = grn_expr_get_var_by_offset(ctx, expr, 0);
+ grn_expr_code *code = e->codes, *ce = &e->codes[e->codes_curr];
+ sp = s_ + stack_curr;
+ while (code < ce) {
+ switch (code->op) {
+ case GRN_OP_NOP :
+ code++;
+ break;
+ case GRN_OP_PUSH :
+ PUSH1(code->value);
+ code++;
+ break;
+ case GRN_OP_POP :
+ {
+ grn_obj *obj;
+ POP1(obj);
+ code++;
+ }
+ break;
+ case GRN_OP_GET_REF :
+ {
+ grn_obj *col, *rec;
+ if (code->nargs == 1) {
+ rec = v0;
+ if (code->value) {
+ col = code->value;
+ ALLOC1(res);
+ } else {
+ POP1ALLOC1(col, res);
+ }
+ } else {
+ if (code->value) {
+ col = code->value;
+ POP1ALLOC1(rec, res);
+ } else {
+ POP2ALLOC1(rec, col, res);
+ }
+ }
+ if (col->header.type == GRN_BULK) {
+ grn_obj *table = grn_ctx_at(ctx, GRN_OBJ_GET_DOMAIN(rec));
+ col = grn_obj_column(ctx, table, GRN_BULK_HEAD(col), GRN_BULK_VSIZE(col));
+ if (col) { grn_expr_take_obj(ctx, (grn_obj *)e, col); }
+ }
+ if (col) {
+ res->header.type = GRN_PTR;
+ res->header.domain = GRN_ID_NIL;
+ GRN_PTR_SET(ctx, res, col);
+ GRN_UINT32_PUT(ctx, res, GRN_RECORD_VALUE(rec));
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "col resolve failed");
+ goto exit;
+ }
+ code++;
+ }
+ break;
+ case GRN_OP_CALL :
+ {
+ grn_obj *proc;
+ if (code->value) {
+ if (sp < s_ + code->nargs) {
+ ERR(GRN_INVALID_ARGUMENT, "stack error");
+ goto exit;
+ }
+ proc = code->value;
+ WITH_SPSAVE({
+ grn_proc_call(ctx, proc, code->nargs, expr);
+ });
+ } else {
+ int offset = code->nargs + 1;
+ if (sp < s_ + offset) {
+ ERR(GRN_INVALID_ARGUMENT, "stack error");
+ goto exit;
+ }
+ proc = sp[-offset];
+ WITH_SPSAVE({
+ grn_proc_call(ctx, proc, code->nargs, expr);
+ });
+ if (ctx->rc) {
+ goto exit;
+ }
+ POP1(res);
+ {
+ grn_obj *proc_;
+ POP1(proc_);
+ if (proc != proc_) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "stack may be corrupt");
+ }
+ }
+ PUSH1(res);
+ }
+ }
+ code++;
+ break;
+ case GRN_OP_INTERN :
+ {
+ grn_obj *obj;
+ POP1(obj);
+ obj = GRN_OBJ_RESOLVE(ctx, obj);
+ res = grn_expr_get_var(ctx, expr, GRN_TEXT_VALUE(obj), GRN_TEXT_LEN(obj));
+ if (!res) { res = grn_ctx_get(ctx, GRN_TEXT_VALUE(obj), GRN_TEXT_LEN(obj)); }
+ if (!res) {
+ ERR(GRN_INVALID_ARGUMENT, "intern failed");
+ goto exit;
+ }
+ PUSH1(res);
+ }
+ code++;
+ break;
+ case GRN_OP_TABLE_CREATE :
+ {
+ grn_obj *value_type, *key_type, *flags, *name;
+ POP1(value_type);
+ value_type = GRN_OBJ_RESOLVE(ctx, value_type);
+ POP1(key_type);
+ key_type = GRN_OBJ_RESOLVE(ctx, key_type);
+ POP1(flags);
+ flags = GRN_OBJ_RESOLVE(ctx, flags);
+ POP1(name);
+ name = GRN_OBJ_RESOLVE(ctx, name);
+ res = grn_table_create(ctx, GRN_TEXT_VALUE(name), GRN_TEXT_LEN(name),
+ NULL, GRN_UINT32_VALUE(flags),
+ key_type, value_type);
+ PUSH1(res);
+ }
+ code++;
+ break;
+ case GRN_OP_EXPR_GET_VAR :
+ {
+ grn_obj *name, *expr;
+ POP1(name);
+ name = GRN_OBJ_RESOLVE(ctx, name);
+ POP1(expr);
+ expr = GRN_OBJ_RESOLVE(ctx, expr);
+ switch (name->header.domain) {
+ case GRN_DB_INT32 :
+ res = grn_expr_get_var_by_offset(ctx, expr, (unsigned int) GRN_INT32_VALUE(name));
+ break;
+ case GRN_DB_UINT32 :
+ res = grn_expr_get_var_by_offset(ctx, expr, (unsigned int) GRN_UINT32_VALUE(name));
+ break;
+ case GRN_DB_INT64 :
+ res = grn_expr_get_var_by_offset(ctx, expr, (unsigned int) GRN_INT64_VALUE(name));
+ break;
+ case GRN_DB_UINT64 :
+ res = grn_expr_get_var_by_offset(ctx, expr, (unsigned int) GRN_UINT64_VALUE(name));
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ res = grn_expr_get_var(ctx, expr, GRN_TEXT_VALUE(name), GRN_TEXT_LEN(name));
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid type");
+ goto exit;
+ }
+ PUSH1(res);
+ }
+ code++;
+ break;
+ case GRN_OP_ASSIGN :
+ {
+ grn_obj *value, *var;
+ if (code->value) {
+ value = code->value;
+ } else {
+ POP1(value);
+ }
+ value = GRN_OBJ_RESOLVE(ctx, value);
+ POP1(var);
+ // var = GRN_OBJ_RESOLVE(ctx, var);
+ if (var->header.type == GRN_PTR &&
+ GRN_BULK_VSIZE(var) == (sizeof(grn_obj *) + sizeof(grn_id))) {
+ grn_obj *col = GRN_PTR_VALUE(var);
+ grn_id rid = *(grn_id *)(GRN_BULK_HEAD(var) + sizeof(grn_obj *));
+ grn_obj_set_value(ctx, col, rid, value, GRN_OBJ_SET);
+ } else {
+ VAR_SET_VALUE(ctx, var, value);
+ }
+ PUSH1(value);
+ }
+ code++;
+ break;
+ case GRN_OP_STAR_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ FLOAT_ARITHMETIC_OPERATION_STAR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable *= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_SLASH_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_SLASH,
+ INTEGER_ARITHMETIC_OPERATION_SLASH,
+ INTEGER_ARITHMETIC_OPERATION_SLASH,
+ INTEGER_ARITHMETIC_OPERATION_SLASH,
+ FLOAT_ARITHMETIC_OPERATION_SLASH,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable /= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_MOD_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_MOD,
+ INTEGER_ARITHMETIC_OPERATION_MOD,
+ INTEGER_ARITHMETIC_OPERATION_MOD,
+ INTEGER_ARITHMETIC_OPERATION_MOD,
+ FLOAT_ARITHMETIC_OPERATION_MOD,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable %%= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_PLUS_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ FLOAT_ARITHMETIC_OPERATION_PLUS,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable += \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_MINUS_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ FLOAT_ARITHMETIC_OPERATION_MINUS,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable -= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_SHIFTL_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTL,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable <<= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_SHIFTR_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable >>= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_SHIFTRR_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER8_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER16_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER32_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER64_ARITHMETIC_OPERATION_SHIFTRR,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTRR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT,
+ "variable >>>= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_AND_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_AND,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable &= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_OR_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_OR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable |= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_XOR_ASSIGN :
+ ARITHMETIC_OPERATION_AND_ASSIGN_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_XOR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT, "variable ^= \"string\" isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_JUMP :
+ code += code->nargs + 1;
+ break;
+ case GRN_OP_CJUMP :
+ {
+ grn_obj *v;
+ unsigned int v_boolean;
+ POP1(v);
+ GRN_TRUEP(ctx, v, v_boolean);
+ if (!v_boolean) { code += code->nargs; }
+ }
+ code++;
+ break;
+ case GRN_OP_GET_VALUE :
+ {
+ grn_obj *col, *rec;
+ grn_obj pat_value;
+ GRN_TEXT_INIT(&pat_value, 0);
+ do {
+ uint32_t size;
+ const char *value;
+ grn_bool is_pat_key_accessor = GRN_FALSE;
+ if (code->nargs == 1) {
+ rec = v0;
+ if (code->value) {
+ col = code->value;
+ ALLOC1(res);
+ } else {
+ POP1ALLOC1(col, res);
+ }
+ } else {
+ if (code->value) {
+ col = code->value;
+ POP1ALLOC1(rec, res);
+ } else {
+ POP2ALLOC1(rec, col, res);
+ }
+ }
+ if (col->header.type == GRN_BULK) {
+ grn_obj *table = grn_ctx_at(ctx, GRN_OBJ_GET_DOMAIN(rec));
+ col = grn_obj_column(ctx, table, GRN_BULK_HEAD(col), GRN_BULK_VSIZE(col));
+ if (col) { grn_expr_take_obj(ctx, (grn_obj *)expr, col); }
+ }
+ if (col) {
+ grn_obj_reinit_for(ctx, res, col);
+ if (col->header.type == GRN_ACCESSOR &&
+ ((grn_accessor *)col)->action == GRN_ACCESSOR_GET_KEY &&
+ ((grn_accessor *)col)->obj->header.type == GRN_TABLE_PAT_KEY) {
+ is_pat_key_accessor = GRN_TRUE;
+ GRN_BULK_REWIND(&pat_value);
+ grn_obj_get_value(ctx, col, GRN_RECORD_VALUE(rec), &pat_value);
+ value = GRN_BULK_HEAD(&pat_value);
+ size = GRN_BULK_VSIZE(&pat_value);
+ } else {
+ value = grn_obj_get_value_(ctx, col, GRN_RECORD_VALUE(rec),
+ &size);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "col resolve failed");
+ GRN_OBJ_FIN(ctx, &pat_value);
+ goto exit;
+ }
+ if (!is_pat_key_accessor && size == GRN_OBJ_GET_VALUE_IMD) {
+ GRN_RECORD_SET(ctx, res, (uintptr_t)value);
+ } else {
+ if (value) {
+ if (res->header.type == GRN_VECTOR) {
+ grn_vector_decode(ctx, res, value, size);
+ } else {
+ grn_bulk_write_from(ctx, res, value, 0, size);
+ }
+ }
+ }
+ code++;
+ } while (code < ce && code->op == GRN_OP_GET_VALUE);
+ GRN_OBJ_FIN(ctx, &pat_value);
+ }
+ break;
+ case GRN_OP_OBJ_SEARCH :
+ {
+ grn_obj *op, *query, *index;
+ // todo : grn_search_optarg optarg;
+ POP1(op);
+ op = GRN_OBJ_RESOLVE(ctx, op);
+ POP1(res);
+ res = GRN_OBJ_RESOLVE(ctx, res);
+ POP1(query);
+ query = GRN_OBJ_RESOLVE(ctx, query);
+ POP1(index);
+ index = GRN_OBJ_RESOLVE(ctx, index);
+ grn_obj_search(ctx, index, query, res,
+ (grn_operator)GRN_UINT32_VALUE(op), NULL);
+ }
+ code++;
+ break;
+ case GRN_OP_TABLE_SELECT :
+ {
+ grn_obj *op, *res, *expr, *table;
+ POP1(op);
+ op = GRN_OBJ_RESOLVE(ctx, op);
+ POP1(res);
+ res = GRN_OBJ_RESOLVE(ctx, res);
+ POP1(expr);
+ expr = GRN_OBJ_RESOLVE(ctx, expr);
+ POP1(table);
+ table = GRN_OBJ_RESOLVE(ctx, table);
+ WITH_SPSAVE({
+ grn_table_select(ctx, table, expr, res, (grn_operator)GRN_UINT32_VALUE(op));
+ });
+ PUSH1(res);
+ }
+ code++;
+ break;
+ case GRN_OP_TABLE_SORT :
+ {
+ grn_obj *keys_, *res, *limit, *table;
+ POP1(keys_);
+ keys_ = GRN_OBJ_RESOLVE(ctx, keys_);
+ POP1(res);
+ res = GRN_OBJ_RESOLVE(ctx, res);
+ POP1(limit);
+ limit = GRN_OBJ_RESOLVE(ctx, limit);
+ POP1(table);
+ table = GRN_OBJ_RESOLVE(ctx, table);
+ {
+ grn_table_sort_key *keys;
+ const char *p = GRN_BULK_HEAD(keys_), *tokbuf[256];
+ int n = grn_str_tok(p, GRN_BULK_VSIZE(keys_), ' ', tokbuf, 256, NULL);
+ if ((keys = GRN_MALLOCN(grn_table_sort_key, n))) {
+ int i, n_keys = 0;
+ for (i = 0; i < n; i++) {
+ uint32_t len = (uint32_t) (tokbuf[i] - p);
+ grn_obj *col = grn_obj_column(ctx, table, p, len);
+ if (col) {
+ keys[n_keys].key = col;
+ keys[n_keys].flags = GRN_TABLE_SORT_ASC;
+ keys[n_keys].offset = 0;
+ n_keys++;
+ } else {
+ if (p[0] == ':' && p[1] == 'd' && len == 2 && n_keys) {
+ keys[n_keys - 1].flags |= GRN_TABLE_SORT_DESC;
+ }
+ }
+ p = tokbuf[i] + 1;
+ }
+ WITH_SPSAVE({
+ grn_table_sort(ctx, table, 0, GRN_INT32_VALUE(limit), res, keys, n_keys);
+ });
+ for (i = 0; i < n_keys; i++) {
+ grn_obj_unlink(ctx, keys[i].key);
+ }
+ GRN_FREE(keys);
+ }
+ }
+ }
+ code++;
+ break;
+ case GRN_OP_TABLE_GROUP :
+ {
+ grn_obj *res, *keys_, *table;
+ POP1(res);
+ res = GRN_OBJ_RESOLVE(ctx, res);
+ POP1(keys_);
+ keys_ = GRN_OBJ_RESOLVE(ctx, keys_);
+ POP1(table);
+ table = GRN_OBJ_RESOLVE(ctx, table);
+ {
+ grn_table_sort_key *keys;
+ grn_table_group_result results;
+ const char *p = GRN_BULK_HEAD(keys_), *tokbuf[256];
+ int n = grn_str_tok(p, GRN_BULK_VSIZE(keys_), ' ', tokbuf, 256, NULL);
+ if ((keys = GRN_MALLOCN(grn_table_sort_key, n))) {
+ int i, n_keys = 0;
+ for (i = 0; i < n; i++) {
+ uint32_t len = (uint32_t) (tokbuf[i] - p);
+ grn_obj *col = grn_obj_column(ctx, table, p, len);
+ if (col) {
+ keys[n_keys].key = col;
+ keys[n_keys].flags = GRN_TABLE_SORT_ASC;
+ keys[n_keys].offset = 0;
+ n_keys++;
+ } else if (n_keys) {
+ if (p[0] == ':' && p[1] == 'd' && len == 2) {
+ keys[n_keys - 1].flags |= GRN_TABLE_SORT_DESC;
+ } else {
+ keys[n_keys - 1].offset = grn_atoi(p, p + len, NULL);
+ }
+ }
+ p = tokbuf[i] + 1;
+ }
+ /* todo : support multi-results */
+ results.table = res;
+ results.key_begin = 0;
+ results.key_end = 0;
+ results.limit = 0;
+ results.flags = 0;
+ results.op = GRN_OP_OR;
+ WITH_SPSAVE({
+ grn_table_group(ctx, table, keys, n_keys, &results, 1);
+ });
+ for (i = 0; i < n_keys; i++) {
+ grn_obj_unlink(ctx, keys[i].key);
+ }
+ GRN_FREE(keys);
+ }
+ }
+ }
+ code++;
+ break;
+ case GRN_OP_JSON_PUT :
+ {
+ grn_obj_format format;
+ grn_obj *str, *table, *res;
+ POP1(res);
+ res = GRN_OBJ_RESOLVE(ctx, res);
+ POP1(str);
+ str = GRN_OBJ_RESOLVE(ctx, str);
+ POP1(table);
+ table = GRN_OBJ_RESOLVE(ctx, table);
+ GRN_OBJ_FORMAT_INIT(&format, grn_table_size(ctx, table), 0, -1, 0);
+ format.flags = 0;
+ grn_obj_columns(ctx, table,
+ GRN_TEXT_VALUE(str), GRN_TEXT_LEN(str), &format.columns);
+ grn_text_otoj(ctx, res, table, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ code++;
+ break;
+ case GRN_OP_AND :
+ {
+ grn_obj *x, *y;
+ unsigned int x_boolean, y_boolean;
+ grn_obj *result = NULL;
+ POP2ALLOC1(x, y, res);
+ GRN_TRUEP(ctx, x, x_boolean);
+ if (x_boolean) {
+ GRN_TRUEP(ctx, y, y_boolean);
+ if (y_boolean) {
+ result = y;
+ }
+ }
+ if (result) {
+ if (res != result) {
+ grn_obj_reinit(ctx, res, result->header.domain, 0);
+ grn_obj_cast(ctx, result, res, GRN_FALSE);
+ }
+ } else {
+ grn_obj_reinit(ctx, res, GRN_DB_BOOL, 0);
+ GRN_BOOL_SET(ctx, res, GRN_FALSE);
+ }
+ }
+ code++;
+ break;
+ case GRN_OP_OR :
+ {
+ grn_obj *x, *y;
+ unsigned int x_boolean, y_boolean;
+ grn_obj *result;
+ POP2ALLOC1(x, y, res);
+ GRN_TRUEP(ctx, x, x_boolean);
+ if (x_boolean) {
+ result = x;
+ } else {
+ GRN_TRUEP(ctx, y, y_boolean);
+ if (y_boolean) {
+ result = y;
+ } else {
+ result = NULL;
+ }
+ }
+ if (result) {
+ if (res != result) {
+ grn_obj_reinit(ctx, res, result->header.domain, 0);
+ grn_obj_cast(ctx, result, res, GRN_FALSE);
+ }
+ } else {
+ grn_obj_reinit(ctx, res, GRN_DB_BOOL, 0);
+ GRN_BOOL_SET(ctx, res, GRN_FALSE);
+ }
+ }
+ code++;
+ break;
+ case GRN_OP_AND_NOT :
+ {
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ if (GRN_INT32_VALUE(x) == 0 || GRN_INT32_VALUE(y) == 1) {
+ GRN_INT32_SET(ctx, res, 0);
+ } else {
+ GRN_INT32_SET(ctx, res, 1);
+ }
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_ADJUST :
+ {
+ /* todo */
+ }
+ code++;
+ break;
+ case GRN_OP_MATCH :
+ {
+ grn_obj *x, *y;
+ grn_bool matched;
+ POP1(y);
+ POP1(x);
+ WITH_SPSAVE({
+ matched = pseudo_query_scan(ctx, x, y);
+ });
+ ALLOC1(res);
+ grn_obj_reinit(ctx, res, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, res, matched ? 1 : 0);
+ }
+ code++;
+ break;
+ case GRN_OP_EQUAL :
+ {
+ int r = GRN_FALSE;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_EQ(x, y, r);
+ grn_obj_reinit(ctx, res, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, res, r);
+ }
+ code++;
+ break;
+ case GRN_OP_NOT_EQUAL :
+ {
+ int r = GRN_FALSE;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_EQ(x, y, r);
+ grn_obj_reinit(ctx, res, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, res, 1 - r);
+ }
+ code++;
+ break;
+ case GRN_OP_PREFIX :
+ {
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ GRN_INT32_SET(ctx, res,
+ (GRN_TEXT_LEN(x) >= GRN_TEXT_LEN(y) &&
+ !memcmp(GRN_TEXT_VALUE(x), GRN_TEXT_VALUE(y), GRN_TEXT_LEN(y))));
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_SUFFIX :
+ {
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ GRN_INT32_SET(ctx, res,
+ (GRN_TEXT_LEN(x) >= GRN_TEXT_LEN(y) &&
+ !memcmp(GRN_TEXT_VALUE(x) + GRN_TEXT_LEN(x) - GRN_TEXT_LEN(y),
+ GRN_TEXT_VALUE(y), GRN_TEXT_LEN(y))));
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_LESS :
+ {
+ int r;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_COMPARE(x, y, r, <);
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_GREATER :
+ {
+ int r;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_COMPARE(x, y, r, >);
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_LESS_EQUAL :
+ {
+ int r;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_COMPARE(x, y, r, <=);
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_GREATER_EQUAL :
+ {
+ int r;
+ grn_obj *x, *y;
+ POP2ALLOC1(x, y, res);
+ DO_COMPARE(x, y, r, >=);
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_DISTANCE1 :
+ {
+ grn_obj *e;
+ double lng1, lat1, lng2, lat2, x, y, d;
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ lat2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ x = (lng2 - lng1) * cos((lat1 + lat2) * 0.5);
+ y = (lat2 - lat1);
+ d = sqrt((x * x) + (y * y)) * GEO_RADIOUS;
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_FLOAT;
+ GRN_FLOAT_SET(ctx, res, d);
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_DISTANCE2 :
+ {
+ grn_obj *e;
+ double lng1, lat1, lng2, lat2, x, y, d;
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ lat2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ x = sin(fabs(lng2 - lng1) * 0.5);
+ y = sin(fabs(lat2 - lat1) * 0.5);
+ d = asin(sqrt((y * y) + cos(lat1) * cos(lat2) * x * x)) * 2 * GEO_RADIOUS;
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_FLOAT;
+ GRN_FLOAT_SET(ctx, res, d);
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_DISTANCE3 :
+ {
+ grn_obj *e;
+ double lng1, lat1, lng2, lat2, p, q, m, n, x, y, d;
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ lat2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ p = (lat1 + lat2) * 0.5;
+ q = (1 - GEO_BES_C3 * sin(p) * sin(p));
+ m = GEO_BES_C1 / sqrt(q * q * q);
+ n = GEO_BES_C2 / sqrt(q);
+ x = n * cos(p) * fabs(lng1 - lng2);
+ y = m * fabs(lat1 - lat2);
+ d = sqrt((x * x) + (y * y));
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_FLOAT;
+ GRN_FLOAT_SET(ctx, res, d);
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_DISTANCE4 :
+ {
+ grn_obj *e;
+ double lng1, lat1, lng2, lat2, p, q, m, n, x, y, d;
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ lat2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ p = (lat1 + lat2) * 0.5;
+ q = (1 - GEO_GRS_C3 * sin(p) * sin(p));
+ m = GEO_GRS_C1 / sqrt(q * q * q);
+ n = GEO_GRS_C2 / sqrt(q);
+ x = n * cos(p) * fabs(lng1 - lng2);
+ y = m * fabs(lat1 - lat2);
+ d = sqrt((x * x) + (y * y));
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_FLOAT;
+ GRN_FLOAT_SET(ctx, res, d);
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_WITHINP5 :
+ {
+ int r;
+ grn_obj *e;
+ double lng0, lat0, lng1, lat1, x, y, d;
+ POP1(e);
+ lng0 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat0 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ x = (lng1 - lng0) * cos((lat0 + lat1) * 0.5);
+ y = (lat1 - lat0);
+ d = sqrt((x * x) + (y * y)) * GEO_RADIOUS;
+ switch (e->header.domain) {
+ case GRN_DB_INT32 :
+ r = d <= GRN_INT32_VALUE(e);
+ break;
+ case GRN_DB_FLOAT :
+ r = d <= GRN_FLOAT_VALUE(e);
+ break;
+ default :
+ r = 0;
+ break;
+ }
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_WITHINP6 :
+ {
+ int r;
+ grn_obj *e;
+ double lng0, lat0, lng1, lat1, lng2, lat2, x, y, d;
+ POP1(e);
+ lng0 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat0 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lat1 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1(e);
+ lng2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ POP1ALLOC1(e, res);
+ lat2 = GEO_INT2RAD(GRN_INT32_VALUE(e));
+ x = (lng1 - lng0) * cos((lat0 + lat1) * 0.5);
+ y = (lat1 - lat0);
+ d = (x * x) + (y * y);
+ x = (lng2 - lng1) * cos((lat1 + lat2) * 0.5);
+ y = (lat2 - lat1);
+ r = d <= (x * x) + (y * y);
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_GEO_WITHINP8 :
+ {
+ int r;
+ grn_obj *e;
+ int64_t ln0, la0, ln1, la1, ln2, la2, ln3, la3;
+ POP1(e);
+ ln0 = GRN_INT32_VALUE(e);
+ POP1(e);
+ la0 = GRN_INT32_VALUE(e);
+ POP1(e);
+ ln1 = GRN_INT32_VALUE(e);
+ POP1(e);
+ la1 = GRN_INT32_VALUE(e);
+ POP1(e);
+ ln2 = GRN_INT32_VALUE(e);
+ POP1(e);
+ la2 = GRN_INT32_VALUE(e);
+ POP1(e);
+ ln3 = GRN_INT32_VALUE(e);
+ POP1ALLOC1(e, res);
+ la3 = GRN_INT32_VALUE(e);
+ r = ((ln2 <= ln0) && (ln0 <= ln3) && (la2 <= la0) && (la0 <= la3));
+ GRN_INT32_SET(ctx, res, r);
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT32;
+ }
+ code++;
+ break;
+ case GRN_OP_PLUS :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ INTEGER_ARITHMETIC_OPERATION_PLUS,
+ FLOAT_ARITHMETIC_OPERATION_PLUS,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ if (x == res) {
+ grn_obj_cast(ctx, y, res, GRN_FALSE);
+ } else if (y == res) {
+ grn_obj buffer;
+ GRN_TEXT_INIT(&buffer, 0);
+ grn_obj_cast(ctx, x, &buffer, GRN_FALSE);
+ grn_obj_cast(ctx, y, &buffer, GRN_FALSE);
+ GRN_BULK_REWIND(res);
+ grn_obj_cast(ctx, &buffer, res, GRN_FALSE);
+ GRN_OBJ_FIN(ctx, &buffer);
+ } else {
+ GRN_BULK_REWIND(res);
+ grn_obj_cast(ctx, x, res, GRN_FALSE);
+ grn_obj_cast(ctx, y, res, GRN_FALSE);
+ }
+ }
+ ,);
+ break;
+ case GRN_OP_MINUS :
+ if (code->nargs == 1) {
+ ARITHMETIC_UNARY_OPERATION_DISPATCH(
+ INTEGER_UNARY_ARITHMETIC_OPERATION_MINUS,
+ FLOAT_UNARY_ARITHMETIC_OPERATION_MINUS,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ long long int x_;
+
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT64;
+
+ GRN_INT64_SET(ctx, res, 0);
+ grn_obj_cast(ctx, x, res, GRN_FALSE);
+ x_ = GRN_INT64_VALUE(res);
+
+ GRN_INT64_SET(ctx, res, -x_);
+ }
+ ,);
+ } else {
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ INTEGER_ARITHMETIC_OPERATION_MINUS,
+ FLOAT_ARITHMETIC_OPERATION_MINUS,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT,
+ "\"string\" - \"string\" "
+ "isn't supported");
+ goto exit;
+ }
+ ,);
+ }
+ break;
+ case GRN_OP_STAR :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ INTEGER_ARITHMETIC_OPERATION_STAR,
+ FLOAT_ARITHMETIC_OPERATION_STAR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ ERR(GRN_INVALID_ARGUMENT,
+ "\"string\" * \"string\" "
+ "isn't supported");
+ goto exit;
+ }
+ ,);
+ break;
+ case GRN_OP_SLASH :
+ DIVISION_OPERATION_DISPATCH(
+ SIGNED_INTEGER_DIVISION_OPERATION_SLASH,
+ UNSIGNED_INTEGER_DIVISION_OPERATION_SLASH,
+ FLOAT_DIVISION_OPERATION_SLASH,
+ {
+ ERR(GRN_INVALID_ARGUMENT,
+ "\"string\" / \"string\" "
+ "isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_MOD :
+ DIVISION_OPERATION_DISPATCH(
+ SIGNED_INTEGER_DIVISION_OPERATION_MOD,
+ UNSIGNED_INTEGER_DIVISION_OPERATION_MOD,
+ FLOAT_DIVISION_OPERATION_MOD,
+ {
+ ERR(GRN_INVALID_ARGUMENT,
+ "\"string\" %% \"string\" "
+ "isn't supported");
+ goto exit;
+ });
+ break;
+ case GRN_OP_BITWISE_NOT :
+ ARITHMETIC_UNARY_OPERATION_DISPATCH(
+ INTEGER_UNARY_ARITHMETIC_OPERATION_BITWISE_NOT,
+ FLOAT_UNARY_ARITHMETIC_OPERATION_BITWISE_NOT,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_UNARY_ARITHMETIC_OPERATION(~),);
+ break;
+ case GRN_OP_BITWISE_OR :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_OR,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_OR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_ARITHMETIC_OPERATION(|),);
+ break;
+ case GRN_OP_BITWISE_XOR :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_XOR,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_XOR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_ARITHMETIC_OPERATION(^),);
+ break;
+ case GRN_OP_BITWISE_AND :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ INTEGER_ARITHMETIC_OPERATION_BITWISE_AND,
+ FLOAT_ARITHMETIC_OPERATION_BITWISE_AND,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_ARITHMETIC_OPERATION(&),);
+ break;
+ case GRN_OP_SHIFTL :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTL,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTL,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_ARITHMETIC_OPERATION(<<),);
+ break;
+ case GRN_OP_SHIFTR :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ INTEGER_ARITHMETIC_OPERATION_SHIFTR,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ TEXT_ARITHMETIC_OPERATION(>>),);
+ break;
+ case GRN_OP_SHIFTRR :
+ ARITHMETIC_BINARY_OPERATION_DISPATCH(
+ INTEGER8_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER16_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER32_ARITHMETIC_OPERATION_SHIFTRR,
+ INTEGER64_ARITHMETIC_OPERATION_SHIFTRR,
+ FLOAT_ARITHMETIC_OPERATION_SHIFTRR,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ ARITHMETIC_OPERATION_NO_CHECK,
+ {
+ long long unsigned int x_;
+ long long unsigned int y_;
+
+ res->header.type = GRN_BULK;
+ res->header.domain = GRN_DB_INT64;
+
+ GRN_INT64_SET(ctx, res, 0);
+ grn_obj_cast(ctx, x, res, GRN_FALSE);
+ x_ = GRN_INT64_VALUE(res);
+
+ GRN_INT64_SET(ctx, res, 0);
+ grn_obj_cast(ctx, y, res, GRN_FALSE);
+ y_ = GRN_INT64_VALUE(res);
+
+ GRN_INT64_SET(ctx, res, x_ >> y_);
+ }
+ ,);
+ break;
+ case GRN_OP_INCR :
+ UNARY_OPERATE_AND_ASSIGN_DISPATCH(EXEC_OPERATE, 1, GRN_OBJ_INCR);
+ break;
+ case GRN_OP_DECR :
+ UNARY_OPERATE_AND_ASSIGN_DISPATCH(EXEC_OPERATE, 1, GRN_OBJ_DECR);
+ break;
+ case GRN_OP_INCR_POST :
+ UNARY_OPERATE_AND_ASSIGN_DISPATCH(EXEC_OPERATE_POST, 1, GRN_OBJ_INCR);
+ break;
+ case GRN_OP_DECR_POST :
+ UNARY_OPERATE_AND_ASSIGN_DISPATCH(EXEC_OPERATE_POST, 1, GRN_OBJ_DECR);
+ break;
+ case GRN_OP_NOT :
+ {
+ grn_obj *value;
+ POP1ALLOC1(value, res);
+ grn_obj_reinit(ctx, res, GRN_DB_BOOL, 0);
+ grn_obj_cast(ctx, value, res, GRN_FALSE);
+ GRN_BOOL_SET(ctx, res, !GRN_BOOL_VALUE(res));
+ }
+ code++;
+ break;
+ case GRN_OP_GET_MEMBER :
+ {
+ grn_obj *column_and_record_id, *index;
+ POP2ALLOC1(column_and_record_id, index, res);
+ grn_expr_exec_get_member(ctx, expr, column_and_record_id, index, res);
+ code++;
+ }
+ break;
+ default :
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED, "not implemented operator assigned");
+ goto exit;
+ break;
+ }
+ }
+ ctx->impl->stack_curr = sp - s_;
+ }
+ if (ctx->impl->stack_curr + nargs > stack_curr) {
+ val = grn_ctx_pop(ctx);
+ }
+exit :
+ if (ctx->impl->stack_curr + nargs > stack_curr) {
+ /*
+ GRN_LOG(ctx, GRN_LOG_WARNING, "nargs=%d stack balance=%d",
+ nargs, stack_curr - ctx->impl->stack_curr);
+ */
+ ctx->impl->stack_curr = stack_curr - nargs;
+ }
+ GRN_API_RETURN(val);
+}
+
+grn_obj *
+grn_expr_get_value(grn_ctx *ctx, grn_obj *expr, int offset)
+{
+ grn_obj *res = NULL;
+ grn_expr *e = (grn_expr *)expr;
+ GRN_API_ENTER;
+ if (0 <= offset && offset < e->values_size) {
+ res = &e->values[offset];
+ }
+ GRN_API_RETURN(res);
+}
+
+#define DEFAULT_WEIGHT 5
+#define DEFAULT_DECAYSTEP 2
+#define DEFAULT_MAX_INTERVAL 10
+#define DEFAULT_SIMILARITY_THRESHOLD 0
+#define DEFAULT_TERM_EXTRACT_POLICY 0
+#define DEFAULT_WEIGHT_VECTOR_SIZE 4096
+
+struct _grn_scan_info {
+ uint32_t start;
+ uint32_t end;
+ int32_t nargs;
+ int flags;
+ grn_operator op;
+ grn_operator logical_op;
+ grn_obj wv;
+ grn_obj index;
+ grn_obj *query;
+ grn_obj *args[8];
+ int max_interval;
+ int similarity_threshold;
+};
+
+#define SI_FREE(si) do {\
+ GRN_OBJ_FIN(ctx, &(si)->wv);\
+ GRN_OBJ_FIN(ctx, &(si)->index);\
+ GRN_FREE(si);\
+} while (0)
+
+#define SI_ALLOC(si, i, st) do {\
+ if (!((si) = GRN_MALLOCN(scan_info, 1))) {\
+ int j;\
+ for (j = 0; j < i; j++) { SI_FREE(sis[j]); }\
+ GRN_FREE(sis);\
+ return NULL;\
+ }\
+ GRN_INT32_INIT(&(si)->wv, GRN_OBJ_VECTOR);\
+ GRN_PTR_INIT(&(si)->index, GRN_OBJ_VECTOR, GRN_ID_NIL);\
+ (si)->logical_op = GRN_OP_OR;\
+ (si)->flags = SCAN_PUSH;\
+ (si)->nargs = 0;\
+ (si)->max_interval = DEFAULT_MAX_INTERVAL;\
+ (si)->similarity_threshold = DEFAULT_SIMILARITY_THRESHOLD;\
+ (si)->start = (st);\
+} while (0)
+
+static scan_info **
+put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip, grn_operator op, int start)
+{
+ int nparens = 1, ndifops = 0, i = *ip, j = i, r = 0;
+ while (j--) {
+ scan_info *s_ = sis[j];
+ if (s_->flags & SCAN_POP) {
+ ndifops++;
+ nparens++;
+ } else {
+ if (s_->flags & SCAN_PUSH) {
+ if (!(--nparens)) {
+ if (!r) {
+ if (ndifops) {
+ if (j && op != GRN_OP_AND_NOT) {
+ nparens = 1;
+ ndifops = 0;
+ r = j;
+ } else {
+ SI_ALLOC(s_, i, start);
+ s_->flags = SCAN_POP;
+ s_->logical_op = op;
+ sis[i++] = s_;
+ *ip = i;
+ break;
+ }
+ } else {
+ s_->flags &= ~SCAN_PUSH;
+ s_->logical_op = op;
+ break;
+ }
+ } else {
+ if (ndifops) {
+ SI_ALLOC(s_, i, start);
+ s_->flags = SCAN_POP;
+ s_->logical_op = op;
+ sis[i++] = s_;
+ *ip = i;
+ } else {
+ s_->flags &= ~SCAN_PUSH;
+ s_->logical_op = op;
+ memcpy(&sis[i], &sis[j], sizeof(scan_info *) * (r - j));
+ memmove(&sis[j], &sis[r], sizeof(scan_info *) * (i - r));
+ memcpy(&sis[i + j - r], &sis[i], sizeof(scan_info *) * (r - j));
+ }
+ break;
+ }
+ }
+ } else {
+ if ((op == GRN_OP_AND_NOT) || (op != s_->logical_op)) {
+ ndifops++;
+ }
+ }
+ }
+ }
+ if (j < 0) {
+ ERR(GRN_INVALID_ARGUMENT, "unmatched nesting level");
+ for (j = 0; j < i; j++) { SI_FREE(sis[j]); }
+ GRN_FREE(sis);
+ return NULL;
+ }
+ return sis;
+}
+
+
+#define EXPRLOG(name,expr) do {\
+ grn_obj strbuf;\
+ GRN_TEXT_INIT(&strbuf, 0);\
+ grn_expr_inspect(ctx, &strbuf, (expr));\
+ GRN_TEXT_PUTC(ctx, &strbuf, '\0');\
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "%s=(%s)", (name), GRN_TEXT_VALUE(&strbuf));\
+ GRN_OBJ_FIN(ctx, &strbuf);\
+} while (0)
+
+static void
+scan_info_put_index(grn_ctx *ctx, scan_info *si, grn_obj *index, uint32_t sid, int32_t weight)
+{
+ GRN_PTR_PUT(ctx, &si->index, index);
+ GRN_UINT32_PUT(ctx, &si->wv, sid);
+ GRN_INT32_PUT(ctx, &si->wv, weight);
+ {
+ int i, ni = (GRN_BULK_VSIZE(&si->index) / sizeof(grn_obj *)) - 1;
+ grn_obj **pi = &GRN_PTR_VALUE_AT(&si->index, ni);
+ for (i = 0; i < ni; i++, pi--) {
+ if (index == pi[-1]) {
+ if (i) {
+ int32_t *pw = &GRN_INT32_VALUE_AT(&si->wv, (ni - i) * 2);
+ memmove(pw + 2, pw, sizeof(int32_t) * 2 * i);
+ pw[0] = (int32_t) sid;
+ pw[1] = weight;
+ memmove(pi + 1, pi, sizeof(grn_obj *) * i);
+ pi[0] = index;
+ }
+ return;
+ }
+ }
+ }
+}
+
+static int32_t
+get_weight(grn_ctx *ctx, grn_expr_code *ec)
+{
+ if (ec->modify == 2 && ec[2].op == GRN_OP_STAR &&
+ ec[1].value && ec[1].value->header.type == GRN_BULK) {
+ if (ec[1].value->header.domain == GRN_DB_INT32 ||
+ ec[1].value->header.domain == GRN_DB_UINT32) {
+ return GRN_INT32_VALUE(ec[1].value);
+ } else {
+ int32_t weight = 1;
+ grn_obj weight_buffer;
+ GRN_INT32_INIT(&weight_buffer, 0);
+ if (!grn_obj_cast(ctx, ec[1].value, &weight_buffer, GRN_FALSE)) {
+ weight = GRN_INT32_VALUE(&weight_buffer);
+ }
+ grn_obj_unlink(ctx, &weight_buffer);
+ return weight;
+ }
+ } else {
+ return 1;
+ }
+}
+
+scan_info *
+grn_scan_info_open(grn_ctx *ctx, int start)
+{
+ scan_info *si = GRN_MALLOCN(scan_info, 1);
+
+ if (!si) {
+ return NULL;
+ }
+
+ GRN_INT32_INIT(&si->wv, GRN_OBJ_VECTOR);
+ GRN_PTR_INIT(&si->index, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ si->logical_op = GRN_OP_OR;
+ si->flags = SCAN_PUSH;
+ si->nargs = 0;
+ si->max_interval = DEFAULT_MAX_INTERVAL;
+ si->similarity_threshold = DEFAULT_SIMILARITY_THRESHOLD;
+ si->start = start;
+
+ return si;
+}
+
+void
+grn_scan_info_close(grn_ctx *ctx, scan_info *si)
+{
+ SI_FREE(si);
+}
+
+void
+grn_scan_info_put_index(grn_ctx *ctx, scan_info *si, grn_obj *index, uint32_t sid, int32_t weight)
+{
+ scan_info_put_index(ctx, si, index, sid, weight);
+}
+
+scan_info **
+grn_scan_info_put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip,
+ grn_operator op, int start)
+{
+ return put_logical_op(ctx, sis, ip, op, start);
+}
+
+int32_t
+grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec)
+{
+ return get_weight(ctx, ec);
+}
+
+int
+grn_scan_info_get_flags(scan_info *si)
+{
+ return si->flags;
+}
+
+void
+grn_scan_info_set_flags(scan_info *si, int flags)
+{
+ si->flags = flags;
+}
+
+grn_operator
+grn_scan_info_get_logical_op(scan_info *si)
+{
+ return si->logical_op;
+}
+
+void
+grn_scan_info_set_logical_op(scan_info *si, grn_operator logical_op)
+{
+ si->logical_op = logical_op;
+}
+
+grn_operator
+grn_scan_info_get_op(scan_info *si)
+{
+ return si->op;
+}
+
+void
+grn_scan_info_set_op(scan_info *si, grn_operator op)
+{
+ si->op = op;
+}
+
+void
+grn_scan_info_set_end(scan_info *si, uint32_t end)
+{
+ si->end = end;
+}
+
+void
+grn_scan_info_set_query(scan_info *si, grn_obj *query)
+{
+ si->query = query;
+}
+
+int
+grn_scan_info_get_max_interval(scan_info *si)
+{
+ return si->max_interval;
+}
+
+void
+grn_scan_info_set_max_interval(scan_info *si, int max_interval)
+{
+ si->max_interval = max_interval;
+}
+
+int
+grn_scan_info_get_similarity_threshold(scan_info *si)
+{
+ return si->similarity_threshold;
+}
+
+void
+grn_scan_info_set_similarity_threshold(scan_info *si, int similarity_threshold)
+{
+ si->similarity_threshold = similarity_threshold;
+}
+
+grn_bool
+grn_scan_info_push_arg(scan_info *si, grn_obj *arg)
+{
+ if (si->nargs >= 8) {
+ return GRN_FALSE;
+ }
+
+ si->args[si->nargs++] = arg;
+ return GRN_TRUE;
+}
+
+grn_obj *
+grn_scan_info_get_arg(grn_ctx *ctx, scan_info *si, int i)
+{
+ if (i >= si->nargs) {
+ return NULL;
+ }
+ return si->args[i];
+}
+
+static uint32_t
+scan_info_build_find_index_column_index(grn_ctx *ctx,
+ scan_info *si,
+ grn_expr_code *ec,
+ uint32_t n_rest_codes,
+ grn_operator op)
+{
+ uint32_t offset = 0;
+ grn_obj *index;
+ int sid = 0;
+ int32_t weight = 0;
+
+ index = ec->value;
+ if (n_rest_codes > 2 &&
+ ec[1].value &&
+ (ec[1].value->header.domain == GRN_DB_INT32 ||
+ ec[1].value->header.domain == GRN_DB_UINT32) &&
+ ec[2].op == GRN_OP_GET_MEMBER) {
+ if (ec[1].value->header.domain == GRN_DB_INT32) {
+ sid = GRN_INT32_VALUE(ec[1].value) + 1;
+ } else {
+ sid = GRN_UINT32_VALUE(ec[1].value) + 1;
+ }
+ offset = 2;
+ weight = get_weight(ctx, ec + offset);
+ } else {
+ weight = get_weight(ctx, ec);
+ }
+ scan_info_put_index(ctx, si, index, sid, weight);
+
+ return offset;
+}
+
+static scan_info **
+scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
+ grn_operator op, uint32_t size)
+{
+ grn_obj *var;
+ scan_stat stat;
+ int i, m = 0, o = 0;
+ scan_info **sis, *si = NULL;
+ grn_expr_code *c, *ce;
+ grn_expr *e = (grn_expr *)expr;
+#ifdef GRN_WITH_MRUBY
+ if (ctx->impl->mrb.state) {
+ return grn_mrb_scan_info_build(ctx, expr, n, op, size);
+ }
+#endif
+ if (!(var = grn_expr_get_var_by_offset(ctx, expr, 0))) { return NULL; }
+ for (stat = SCAN_START, c = e->codes, ce = &e->codes[e->codes_curr]; c < ce; c++) {
+ switch (c->op) {
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ case GRN_OP_PREFIX :
+ case GRN_OP_SUFFIX :
+ case GRN_OP_EQUAL :
+ case GRN_OP_NOT_EQUAL :
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_GEO_WITHINP5 :
+ case GRN_OP_GEO_WITHINP6 :
+ case GRN_OP_GEO_WITHINP8 :
+ case GRN_OP_TERM_EXTRACT :
+ if (stat < SCAN_COL1 || SCAN_CONST < stat) { return NULL; }
+ stat = SCAN_START;
+ m++;
+ break;
+ case GRN_OP_AND :
+ case GRN_OP_OR :
+ case GRN_OP_AND_NOT :
+ case GRN_OP_ADJUST :
+ if (stat != SCAN_START) { return NULL; }
+ o++;
+ if (o >= m) { return NULL; }
+ break;
+ case GRN_OP_PUSH :
+ stat = (c->value == var) ? SCAN_VAR : SCAN_CONST;
+ break;
+ case GRN_OP_GET_VALUE :
+ switch (stat) {
+ case SCAN_START :
+ case SCAN_CONST :
+ case SCAN_VAR :
+ stat = SCAN_COL1;
+ break;
+ case SCAN_COL1 :
+ stat = SCAN_COL2;
+ break;
+ case SCAN_COL2 :
+ break;
+ default :
+ return NULL;
+ break;
+ }
+ break;
+ case GRN_OP_CALL :
+ if ((c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION) || c + 1 == ce) {
+ stat = SCAN_START;
+ m++;
+ } else {
+ stat = SCAN_COL2;
+ }
+ break;
+ default :
+ return NULL;
+ break;
+ }
+ }
+ if (stat || m != o + 1) { return NULL; }
+ if (!(sis = GRN_MALLOCN(scan_info *, m + m + o))) { return NULL; }
+ for (i = 0, stat = SCAN_START, c = e->codes, ce = &e->codes[e->codes_curr]; c < ce; c++) {
+ switch (c->op) {
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ case GRN_OP_PREFIX :
+ case GRN_OP_SUFFIX :
+ case GRN_OP_EQUAL :
+ case GRN_OP_NOT_EQUAL :
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ case GRN_OP_GEO_WITHINP5 :
+ case GRN_OP_GEO_WITHINP6 :
+ case GRN_OP_GEO_WITHINP8 :
+ case GRN_OP_TERM_EXTRACT :
+ stat = SCAN_START;
+ si->op = c->op;
+ si->end = c - e->codes;
+ sis[i++] = si;
+ {
+ int sid;
+ grn_obj *index, **p = si->args, **pe = si->args + si->nargs;
+ for (; p < pe; p++) {
+ if ((*p)->header.type == GRN_EXPR) {
+ uint32_t j;
+ grn_expr_code *ec;
+ grn_expr *e = (grn_expr *)(*p);
+ for (j = e->codes_curr, ec = e->codes; j--; ec++) {
+ if (ec->value) {
+ switch (ec->value->header.type) {
+ case GRN_ACCESSOR :
+ if (grn_column_index(ctx, ec->value, c->op, &index, 1, &sid)) {
+ int32_t weight = get_weight(ctx, ec);
+ si->flags |= SCAN_ACCESSOR;
+ if (((grn_accessor *)ec->value)->next) {
+ scan_info_put_index(ctx, si, ec->value, sid, weight);
+ } else {
+ scan_info_put_index(ctx, si, index, sid, weight);
+ }
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ if (grn_column_index(ctx, ec->value, c->op, &index, 1, &sid)) {
+ scan_info_put_index(ctx, si, index, sid, get_weight(ctx, ec));
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ {
+ uint32_t offset;
+ offset = scan_info_build_find_index_column_index(ctx, si, ec,
+ j, c->op);
+ j -= offset;
+ ec += offset;
+ }
+ break;
+ }
+ }
+ }
+ } else if (GRN_DB_OBJP(*p)) {
+ if (grn_column_index(ctx, *p, c->op, &index, 1, &sid)) {
+ scan_info_put_index(ctx, si, index, sid, 1);
+ }
+ } else if (GRN_ACCESSORP(*p)) {
+ si->flags |= SCAN_ACCESSOR;
+ if (grn_column_index(ctx, *p, c->op, &index, 1, &sid)) {
+ if (((grn_accessor *)(*p))->next) {
+ scan_info_put_index(ctx, si, *p, sid, 1);
+ } else {
+ scan_info_put_index(ctx, si, index, sid, 1);
+ }
+ }
+ } else {
+ switch (c->op) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ if (si->nargs == 3 &&
+ *p == si->args[2] &&
+ (*p)->header.domain == GRN_DB_INT32) {
+ si->max_interval = GRN_INT32_VALUE(*p);
+ } else {
+ si->query = *p;
+ }
+ break;
+ case GRN_OP_SIMILAR :
+ if (si->nargs == 3 &&
+ *p == si->args[2] &&
+ (*p)->header.domain == GRN_DB_INT32) {
+ si->similarity_threshold = GRN_INT32_VALUE(*p);
+ } else {
+ si->query = *p;
+ }
+ break;
+ default :
+ si->query = *p;
+ break;
+ }
+ }
+ }
+ }
+ si = NULL;
+ break;
+ case GRN_OP_AND :
+ case GRN_OP_OR :
+ case GRN_OP_AND_NOT :
+ case GRN_OP_ADJUST :
+ if (!put_logical_op(ctx, sis, &i, c->op, c - e->codes)) { return NULL; }
+ stat = SCAN_START;
+ break;
+ case GRN_OP_PUSH :
+ if (!si) { SI_ALLOC(si, i, c - e->codes); }
+ if (c->value == var) {
+ stat = SCAN_VAR;
+ } else {
+ if (si->nargs < 8) {
+ si->args[si->nargs++] = c->value;
+ }
+ if (stat == SCAN_START) { si->flags |= SCAN_PRE_CONST; }
+ stat = SCAN_CONST;
+ }
+ break;
+ case GRN_OP_GET_VALUE :
+ switch (stat) {
+ case SCAN_START :
+ if (!si) { SI_ALLOC(si, i, c - e->codes); }
+ // fallthru
+ case SCAN_CONST :
+ case SCAN_VAR :
+ stat = SCAN_COL1;
+ if (si->nargs < 8) {
+ si->args[si->nargs++] = c->value;
+ }
+ break;
+ case SCAN_COL1 :
+ {
+ int j;
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ GRN_TEXT_PUTS(ctx, &inspected, "<");
+ grn_inspect_name(ctx, &inspected, c->value);
+ GRN_TEXT_PUTS(ctx, &inspected, ">: <");
+ grn_inspect(ctx, &inspected, expr);
+ GRN_TEXT_PUTS(ctx, &inspected, ">");
+ ERR(GRN_INVALID_ARGUMENT,
+ "invalid expression: can't use column as a value: %.*s",
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ for (j = 0; j < i; j++) { SI_FREE(sis[j]); }
+ GRN_FREE(sis);
+ return NULL;
+ }
+ stat = SCAN_COL2;
+ break;
+ case SCAN_COL2 :
+ break;
+ default :
+ break;
+ }
+ break;
+ case GRN_OP_CALL :
+ if (!si) { SI_ALLOC(si, i, c - e->codes); }
+ if ((c->flags & GRN_EXPR_CODE_RELATIONAL_EXPRESSION) || c + 1 == ce) {
+ stat = SCAN_START;
+ si->op = c->op;
+ si->end = c - e->codes;
+ sis[i++] = si;
+ /* better index resolving framework for functions should be implemented */
+ {
+ int sid;
+ grn_obj *index, **p = si->args, **pe = si->args + si->nargs;
+ for (; p < pe; p++) {
+ if (GRN_DB_OBJP(*p)) {
+ if (grn_column_index(ctx, *p, c->op, &index, 1, &sid)) {
+ scan_info_put_index(ctx, si, index, sid, 1);
+ }
+ } else if (GRN_ACCESSORP(*p)) {
+ si->flags |= SCAN_ACCESSOR;
+ if (grn_column_index(ctx, *p, c->op, &index, 1, &sid)) {
+ scan_info_put_index(ctx, si, index, sid, 1);
+ }
+ } else {
+ si->query = *p;
+ }
+ }
+ }
+ si = NULL;
+ } else {
+ stat = SCAN_COL2;
+ }
+ break;
+ default :
+ break;
+ }
+ }
+ if (op == GRN_OP_OR && !size) {
+ // for debug
+ if (!(sis[0]->flags & SCAN_PUSH) || (sis[0]->logical_op != op)) {
+ int j;
+ ERR(GRN_INVALID_ARGUMENT, "invalid expr");
+ for (j = 0; j < i; j++) { SI_FREE(sis[j]); }
+ GRN_FREE(sis);
+ return NULL;
+ } else {
+ sis[0]->flags &= ~SCAN_PUSH;
+ sis[0]->logical_op = op;
+ }
+ } else {
+ if (!put_logical_op(ctx, sis, &i, op, c - e->codes)) { return NULL; }
+ }
+ *n = i;
+ return sis;
+}
+
+inline static int32_t
+exec_result_to_score(grn_ctx *ctx, grn_obj *result, grn_obj *score_buffer)
+{
+ if (!result) {
+ return 0;
+ }
+
+ switch (result->header.type) {
+ case GRN_VOID :
+ return 0;
+ case GRN_BULK :
+ if (grn_obj_cast(ctx, result, score_buffer, GRN_FALSE) != GRN_SUCCESS) {
+ return 1;
+ }
+ return GRN_INT32_VALUE(score_buffer);
+ case GRN_UVECTOR :
+ case GRN_PVECTOR :
+ case GRN_VECTOR :
+ return 1;
+ default :
+ return 1; /* TODO: 1 is reasonable? */
+ }
+}
+
+static void
+grn_table_select_(grn_ctx *ctx, grn_obj *table, grn_obj *expr, grn_obj *v,
+ grn_obj *res, grn_operator op)
+{
+ int32_t score;
+ grn_id id, *idp;
+ grn_table_cursor *tc;
+ grn_hash_cursor *hc;
+ grn_hash *s = (grn_hash *)res;
+ grn_obj *r;
+ grn_obj score_buffer;
+ GRN_RECORD_INIT(v, 0, grn_obj_id(ctx, table));
+ GRN_INT32_INIT(&score_buffer, 0);
+ switch (op) {
+ case GRN_OP_OR :
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1, 0))) {
+ while ((id = grn_table_cursor_next(ctx, tc))) {
+ GRN_RECORD_SET(ctx, v, id);
+ r = grn_expr_exec(ctx, expr, 0);
+ score = exec_result_to_score(ctx, r, &score_buffer);
+ if (score > 0) {
+ grn_rset_recinfo *ri;
+ if (grn_hash_add(ctx, s, &id, s->key_size, (void **)&ri, NULL)) {
+ grn_table_add_subrec(res, ri, score, (grn_rset_posinfo *)&id, 1);
+ }
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ break;
+ case GRN_OP_AND :
+ if ((hc = grn_hash_cursor_open(ctx, s, NULL, 0, NULL, 0, 0, -1, 0))) {
+ while (grn_hash_cursor_next(ctx, hc)) {
+ grn_hash_cursor_get_key(ctx, hc, (void **) &idp);
+ GRN_RECORD_SET(ctx, v, *idp);
+ r = grn_expr_exec(ctx, expr, 0);
+ score = exec_result_to_score(ctx, r, &score_buffer);
+ if (score > 0) {
+ grn_rset_recinfo *ri;
+ grn_hash_cursor_get_value(ctx, hc, (void **) &ri);
+ grn_table_add_subrec(res, ri, score, (grn_rset_posinfo *)idp, 1);
+ } else {
+ grn_hash_cursor_delete(ctx, hc, NULL);
+ }
+ }
+ grn_hash_cursor_close(ctx, hc);
+ }
+ break;
+ case GRN_OP_AND_NOT :
+ if ((hc = grn_hash_cursor_open(ctx, s, NULL, 0, NULL, 0, 0, -1, 0))) {
+ while (grn_hash_cursor_next(ctx, hc)) {
+ grn_hash_cursor_get_key(ctx, hc, (void **) &idp);
+ GRN_RECORD_SET(ctx, v, *idp);
+ r = grn_expr_exec(ctx, expr, 0);
+ score = exec_result_to_score(ctx, r, &score_buffer);
+ if (score > 0) {
+ grn_hash_cursor_delete(ctx, hc, NULL);
+ }
+ }
+ grn_hash_cursor_close(ctx, hc);
+ }
+ break;
+ case GRN_OP_ADJUST :
+ if ((hc = grn_hash_cursor_open(ctx, s, NULL, 0, NULL, 0, 0, -1, 0))) {
+ while (grn_hash_cursor_next(ctx, hc)) {
+ grn_hash_cursor_get_key(ctx, hc, (void **) &idp);
+ GRN_RECORD_SET(ctx, v, *idp);
+ r = grn_expr_exec(ctx, expr, 0);
+ score = exec_result_to_score(ctx, r, &score_buffer);
+ if (score > 0) {
+ grn_rset_recinfo *ri;
+ grn_hash_cursor_get_value(ctx, hc, (void **) &ri);
+ grn_table_add_subrec(res, ri, score, (grn_rset_posinfo *)idp, 1);
+ }
+ }
+ grn_hash_cursor_close(ctx, hc);
+ }
+ break;
+ default :
+ break;
+ }
+ GRN_OBJ_FIN(ctx, &score_buffer);
+}
+
+static inline grn_bool
+grn_table_select_index_range_column(grn_ctx *ctx, grn_obj *table,
+ grn_obj *index,
+ scan_info *si, grn_operator logical_op,
+ grn_obj *res)
+{
+ grn_bool processed = GRN_FALSE;
+ grn_obj *index_table;
+ grn_obj range;
+
+ index_table = grn_ctx_at(ctx, index->header.domain);
+ if (!index_table) {
+ return GRN_FALSE;
+ }
+
+ GRN_OBJ_INIT(&range, GRN_BULK, 0, index_table->header.domain);
+ if (grn_obj_cast(ctx, si->query, &range, GRN_FALSE) == GRN_SUCCESS) {
+ grn_table_cursor *cursor;
+ const void *min = NULL, *max = NULL;
+ unsigned int min_size = 0, max_size = 0;
+ int offset = 0;
+ int limit = -1;
+ int flags = GRN_CURSOR_ASCENDING;
+
+ switch (si->op) {
+ case GRN_OP_LESS :
+ flags |= GRN_CURSOR_LT;
+ max = GRN_BULK_HEAD(&range);
+ max_size = GRN_BULK_VSIZE(&range);
+ break;
+ case GRN_OP_GREATER :
+ flags |= GRN_CURSOR_GT;
+ min = GRN_BULK_HEAD(&range);
+ min_size = GRN_BULK_VSIZE(&range);
+ break;
+ case GRN_OP_LESS_EQUAL :
+ flags |= GRN_CURSOR_LE;
+ max = GRN_BULK_HEAD(&range);
+ max_size = GRN_BULK_VSIZE(&range);
+ break;
+ case GRN_OP_GREATER_EQUAL :
+ flags |= GRN_CURSOR_GE;
+ min = GRN_BULK_HEAD(&range);
+ min_size = GRN_BULK_VSIZE(&range);
+ break;
+ default :
+ break;
+ }
+ cursor = grn_table_cursor_open(ctx, index_table,
+ min, min_size, max, max_size,
+ offset, limit, flags);
+ if (cursor) {
+ grn_id index_id;
+ while ((index_id = grn_table_cursor_next(ctx, cursor))) {
+ grn_ii_at(ctx, (grn_ii *)index, index_id,
+ (grn_hash *)res, logical_op);
+ }
+ grn_table_cursor_close(ctx, cursor);
+ processed = GRN_TRUE;
+ }
+
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, logical_op);
+ }
+ GRN_OBJ_FIN(ctx, &range);
+
+ grn_obj_unlink(ctx, index_table);
+
+ return processed;
+}
+
+static inline grn_bool
+grn_table_select_index_range_accessor(grn_ctx *ctx, grn_obj *table,
+ grn_obj *accessor_stack,
+ scan_info *si, grn_obj *res)
+{
+ int n_accessors;
+ grn_obj *current_res = NULL;
+
+ n_accessors = GRN_BULK_VSIZE(accessor_stack) / sizeof(grn_obj *);
+
+ {
+ grn_accessor *last_accessor;
+ grn_obj *target;
+ grn_obj *index;
+ grn_obj *range;
+
+ last_accessor = (grn_accessor *)GRN_PTR_VALUE_AT(accessor_stack,
+ n_accessors - 1);
+ target = last_accessor->obj;
+ if (grn_column_index(ctx, target, si->op, &index, 1, NULL) == 0) {
+ return GRN_FALSE;
+ }
+
+ range = grn_ctx_at(ctx, DB_OBJ(index)->range);
+ current_res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ range,
+ NULL);
+ grn_obj_unlink(ctx, range);
+ if (!current_res) {
+ return GRN_FALSE;
+ }
+ if (!grn_table_select_index_range_column(ctx, table, index, si, GRN_OP_OR,
+ current_res)) {
+ grn_obj_unlink(ctx, current_res);
+ return GRN_FALSE;
+ }
+ }
+
+ {
+ int i;
+
+ for (i = n_accessors - 1; i > 0; i--) {
+ grn_rc rc = GRN_SUCCESS;
+ grn_accessor *accessor;
+ grn_obj *index;
+ grn_obj *domain;
+ grn_obj *target;
+ grn_obj *next_res;
+ grn_operator next_op;
+ grn_id *next_record_id = NULL;
+
+ accessor = (grn_accessor *)GRN_PTR_VALUE_AT(accessor_stack, i - 1);
+ target = accessor->obj;
+ if (grn_column_index(ctx, target, GRN_OP_EQUAL, &index, 1, NULL) == 0) {
+ grn_obj_unlink(ctx, current_res);
+ current_res = NULL;
+ break;
+ }
+
+ {
+ grn_obj *range;
+ range = grn_ctx_at(ctx, DB_OBJ(index)->range);
+ next_res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ range,
+ NULL);
+ grn_obj_unlink(ctx, range);
+ if (!next_res) {
+ grn_obj_unlink(ctx, current_res);
+ current_res = NULL;
+ break;
+ }
+ next_op = GRN_OP_OR;
+ }
+
+ domain = grn_ctx_at(ctx, index->header.domain);
+ GRN_HASH_EACH(ctx, (grn_hash *)current_res, id, &next_record_id,
+ NULL, NULL, {
+ if (domain->header.type == GRN_TABLE_NO_KEY) {
+ rc = grn_ii_sel(ctx, (grn_ii *)index,
+ (const char *)next_record_id, sizeof(grn_id),
+ (grn_hash *)next_res, next_op, NULL);
+ } else {
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_len;
+ key_len = grn_table_get_key(ctx, domain, *next_record_id,
+ key, GRN_TABLE_MAX_KEY_SIZE);
+ rc = grn_ii_sel(ctx, (grn_ii *)index, key, key_len,
+ (grn_hash *)next_res, next_op, NULL);
+ }
+ if (rc != GRN_SUCCESS) {
+ break;
+ }
+ });
+ grn_obj_unlink(ctx, domain);
+ grn_obj_unlink(ctx, current_res);
+
+ if (rc == GRN_SUCCESS) {
+ if (i == 1) {
+ grn_table_setoperation(ctx, res, next_res, res, si->logical_op);
+ grn_obj_unlink(ctx, next_res);
+ current_res = res;
+ } else {
+ current_res = next_res;
+ }
+ } else {
+ if (res != next_res) {
+ grn_obj_unlink(ctx, next_res);
+ }
+ current_res = NULL;
+ break;
+ }
+ }
+ }
+
+ return current_res == res;
+}
+
+static inline grn_bool
+grn_table_select_index_range(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ scan_info *si, grn_obj *res)
+{
+ if (si->flags & SCAN_ACCESSOR) {
+ grn_bool processed;
+ grn_accessor *accessor = (grn_accessor *)index;
+ grn_accessor *a;
+ grn_obj accessor_stack;
+
+ if (index->header.type != GRN_ACCESSOR) {
+ return GRN_FALSE;
+ }
+
+ GRN_PTR_INIT(&accessor_stack, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ for (a = accessor; a; a = a->next) {
+ GRN_PTR_PUT(ctx, &accessor_stack, a);
+ }
+ processed = grn_table_select_index_range_accessor(ctx, table,
+ &accessor_stack,
+ si, res);
+ GRN_OBJ_FIN(ctx, &accessor_stack);
+ return processed;
+ } else {
+ return grn_table_select_index_range_column(ctx, table, index, si,
+ si->logical_op, res);
+ }
+}
+
+static inline grn_bool
+grn_table_select_index(grn_ctx *ctx, grn_obj *table, scan_info *si,
+ grn_obj *res)
+{
+ grn_bool processed = GRN_FALSE;
+ if (GRN_BULK_VSIZE(&si->index)) {
+ grn_obj *index = GRN_PTR_VALUE(&si->index);
+ switch (si->op) {
+ case GRN_OP_EQUAL :
+ if (GRN_BULK_VSIZE(si->query) == 0) {
+ /* We can't use index for empty value. */
+ return GRN_FALSE;
+ }
+ if (si->flags & SCAN_ACCESSOR) {
+ if (index->header.type == GRN_ACCESSOR &&
+ !((grn_accessor *)index)->next) {
+ grn_obj dest;
+ grn_accessor *a = (grn_accessor *)index;
+ grn_ii_posting posting;
+ posting.sid = 1;
+ posting.pos = 0;
+ posting.weight = 0;
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ GRN_UINT32_INIT(&dest, 0);
+ if (!grn_obj_cast(ctx, si->query, &dest, GRN_FALSE)) {
+ posting.rid = GRN_UINT32_VALUE(&dest);
+ if (posting.rid) {
+ if (posting.rid == grn_table_at(ctx, table, posting.rid)) {
+ grn_ii_posting_add(ctx, &posting, (grn_hash *)res,
+ si->logical_op);
+ }
+ }
+ processed = GRN_TRUE;
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
+ GRN_OBJ_FIN(ctx, &dest);
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, table->header.domain);
+ if (!grn_obj_cast(ctx, si->query, &dest, GRN_FALSE)) {
+ if ((posting.rid = grn_table_get(ctx, table,
+ GRN_BULK_HEAD(&dest),
+ GRN_BULK_VSIZE(&dest)))) {
+ grn_ii_posting_add(ctx, &posting, (grn_hash *)res,
+ si->logical_op);
+ }
+ processed = GRN_TRUE;
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
+ GRN_OBJ_FIN(ctx, &dest);
+ break;
+ }
+ }
+ } else {
+ grn_obj *domain = grn_ctx_at(ctx, index->header.domain);
+ if (domain) {
+ grn_id tid;
+ if (GRN_OBJ_GET_DOMAIN(si->query) == DB_OBJ(domain)->id) {
+ tid = GRN_RECORD_VALUE(si->query);
+ } else {
+ tid = grn_table_get(ctx, domain,
+ GRN_BULK_HEAD(si->query),
+ GRN_BULK_VSIZE(si->query));
+ }
+ grn_ii_at(ctx, (grn_ii *)index, tid, (grn_hash *)res, si->logical_op);
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
+ processed = GRN_TRUE;
+ }
+ break;
+ case GRN_OP_SUFFIX :
+ {
+ grn_obj *domain;
+ if (si->flags & SCAN_ACCESSOR) {
+ domain = table;
+ } else {
+ domain = grn_ctx_at(ctx, index->header.domain);
+ }
+ if (domain->header.type != GRN_TABLE_PAT_KEY) {
+ break;
+ }
+ if (!(domain->header.flags & GRN_OBJ_KEY_WITH_SIS)) {
+ break;
+ }
+ }
+ /* fallthru */
+ case GRN_OP_PREFIX :
+ if (si->flags & SCAN_ACCESSOR) {
+ if (index->header.type == GRN_ACCESSOR &&
+ !((grn_accessor *)index)->next) {
+ grn_obj dest;
+ grn_accessor *a = (grn_accessor *)index;
+ grn_ii_posting posting;
+ posting.sid = 1;
+ posting.pos = 0;
+ posting.weight = 0;
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ GRN_OBJ_INIT(&dest, GRN_BULK, 0, table->header.domain);
+ if (!grn_obj_cast(ctx, si->query, &dest, GRN_FALSE)) {
+ grn_hash *pres;
+ if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY))) {
+ grn_id *key;
+ grn_table_search(ctx, table,
+ GRN_BULK_HEAD(&dest), GRN_BULK_VSIZE(&dest),
+ si->op, (grn_obj *)pres, GRN_OP_OR);
+ GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, {
+ posting.rid = *key;
+ grn_ii_posting_add(ctx, &posting, (grn_hash *)res,
+ si->logical_op);
+ });
+ grn_hash_close(ctx, pres);
+ }
+ processed = GRN_TRUE;
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
+ GRN_OBJ_FIN(ctx, &dest);
+ break;
+ }
+ }
+ } else {
+ grn_obj *i = GRN_PTR_VALUE(&si->index);
+ grn_obj *domain = grn_ctx_at(ctx, i->header.domain);
+ if (domain) {
+ grn_hash *pres;
+ if ((pres = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY))) {
+ grn_id *key;
+ grn_table_search(ctx, domain,
+ GRN_BULK_HEAD(si->query),
+ GRN_BULK_VSIZE(si->query),
+ si->op, (grn_obj *)pres, GRN_OP_OR);
+ grn_obj_unlink(ctx, domain);
+ GRN_HASH_EACH(ctx, pres, id, &key, NULL, NULL, {
+ grn_ii_at(ctx, (grn_ii *)index, *key, (grn_hash *)res, si->logical_op);
+ });
+ grn_hash_close(ctx, pres);
+ }
+ grn_obj_unlink(ctx, domain);
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, si->logical_op);
+ processed = GRN_TRUE;
+ }
+ break;
+ case GRN_OP_MATCH :
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ {
+ grn_obj wv, **ip = &GRN_PTR_VALUE(&si->index);
+ int j = GRN_BULK_VSIZE(&si->index)/sizeof(grn_obj *);
+ int32_t *wp = &GRN_INT32_VALUE(&si->wv);
+ grn_search_optarg optarg;
+ GRN_INT32_INIT(&wv, GRN_OBJ_VECTOR);
+ if (si->op == GRN_OP_MATCH) {
+ optarg.mode = GRN_OP_EXACT;
+ } else {
+ optarg.mode = si->op;
+ }
+ optarg.max_interval = 0;
+ optarg.similarity_threshold = 0;
+ switch (si->op) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ optarg.max_interval = si->max_interval;
+ break;
+ case GRN_OP_SIMILAR :
+ optarg.similarity_threshold = si->similarity_threshold;
+ break;
+ default :
+ break;
+ }
+ optarg.weight_vector = (int *)GRN_BULK_HEAD(&wv);
+ /* optarg.vector_size = GRN_BULK_VSIZE(&si->wv); */
+ optarg.vector_size = 1;
+ optarg.proc = NULL;
+ optarg.max_size = 0;
+ ctx->flags |= GRN_CTX_TEMPORARY_DISABLE_II_RESOLVE_SEL_AND;
+ for (; j--; ip++, wp += 2) {
+ uint32_t sid = (uint32_t) wp[0];
+ int32_t weight = wp[1];
+ if (sid) {
+ int weight_index = sid - 1;
+ GRN_INT32_SET_AT(ctx, &wv, weight_index, weight);
+ optarg.weight_vector = &GRN_INT32_VALUE(&wv);
+ optarg.vector_size = GRN_BULK_VSIZE(&wv)/sizeof(int32_t);
+ } else {
+ optarg.weight_vector = NULL;
+ optarg.vector_size = weight;
+ }
+ if (j) {
+ if (sid && ip[0] == ip[1]) { continue; }
+ } else {
+ ctx->flags &= ~GRN_CTX_TEMPORARY_DISABLE_II_RESOLVE_SEL_AND;
+ }
+ grn_obj_search(ctx, ip[0], si->query, res, si->logical_op, &optarg);
+ if (optarg.weight_vector) {
+ int i;
+ for (i = 0; i < optarg.vector_size; i++) {
+ optarg.weight_vector[i] = 0;
+ }
+ }
+ GRN_BULK_REWIND(&wv);
+ }
+ GRN_OBJ_FIN(ctx, &wv);
+ }
+ processed = GRN_TRUE;
+ break;
+ case GRN_OP_TERM_EXTRACT :
+ if (si->flags & SCAN_ACCESSOR) {
+ if (index->header.type == GRN_ACCESSOR &&
+ !((grn_accessor *)index)->next) {
+ grn_accessor *a = (grn_accessor *)index;
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_KEY :
+ grn_table_search(ctx, table,
+ GRN_TEXT_VALUE(si->query), GRN_TEXT_LEN(si->query),
+ GRN_OP_TERM_EXTRACT, res, si->logical_op);
+ processed = GRN_TRUE;
+ break;
+ }
+ }
+ }
+ break;
+ case GRN_OP_CALL :
+ if (selector_proc_p(si->args[0])) {
+ grn_rc rc;
+ grn_proc *proc = (grn_proc *)(si->args[0]);
+ rc = proc->selector(ctx, table, index, si->nargs, si->args,
+ res, si->logical_op);
+ if (rc) {
+ /* TODO: report error */
+ } else {
+ processed = GRN_TRUE;
+ }
+ }
+ break;
+ case GRN_OP_LESS :
+ case GRN_OP_GREATER :
+ case GRN_OP_LESS_EQUAL :
+ case GRN_OP_GREATER_EQUAL :
+ processed = grn_table_select_index_range(ctx, table, index, si, res);
+ break;
+ default :
+ /* todo : implement */
+ /* todo : handle SCAN_PRE_CONST */
+ break;
+ }
+ } else {
+ switch (si->op) {
+ case GRN_OP_CALL :
+ if (selector_proc_p(si->args[0])) {
+ grn_rc rc;
+ grn_proc *proc = (grn_proc *)(si->args[0]);
+ rc = proc->selector(ctx, table, NULL, si->nargs, si->args,
+ res, si->logical_op);
+ if (rc) {
+ /* TODO: report error */
+ } else {
+ processed = GRN_TRUE;
+ }
+ }
+ default :
+ break;
+ }
+ }
+ return processed;
+}
+
+grn_obj *
+grn_table_select(grn_ctx *ctx, grn_obj *table, grn_obj *expr,
+ grn_obj *res, grn_operator op)
+{
+ grn_obj *v;
+ unsigned int res_size;
+ grn_bool res_created = GRN_FALSE;
+ if (res) {
+ if (res->header.type != GRN_TABLE_HASH_KEY ||
+ (res->header.domain != DB_OBJ(table)->id)) {
+ ERR(GRN_INVALID_ARGUMENT, "hash table required");
+ return NULL;
+ }
+ } else {
+ if (!(res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, table, NULL))) {
+ return NULL;
+ }
+ res_created = GRN_TRUE;
+ }
+ if (!(v = grn_expr_get_var_by_offset(ctx, expr, 0))) {
+ ERR(GRN_INVALID_ARGUMENT, "at least one variable must be defined");
+ return NULL;
+ }
+ GRN_API_ENTER;
+ res_size = GRN_HASH_SIZE((grn_hash *)res);
+ if (op == GRN_OP_OR || res_size) {
+ int i, n;
+ scan_info **sis;
+ if ((sis = scan_info_build(ctx, expr, &n, op, res_size))) {
+ grn_obj res_stack;
+ grn_expr *e = (grn_expr *)expr;
+ grn_expr_code *codes = e->codes;
+ uint32_t codes_curr = e->codes_curr;
+ GRN_PTR_INIT(&res_stack, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ for (i = 0; i < n; i++) {
+ scan_info *si = sis[i];
+ if (si->flags & SCAN_POP) {
+ grn_obj *res_;
+ GRN_PTR_POP(&res_stack, res_);
+ grn_table_setoperation(ctx, res_, res, res_, si->logical_op);
+ grn_obj_close(ctx, res);
+ res = res_;
+ } else {
+ grn_bool processed = GRN_FALSE;
+ if (si->flags & SCAN_PUSH) {
+ grn_obj *res_ = NULL;
+ res_ = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, table, NULL);
+ if (!res_) {
+ int i = 0;
+ if (!res_created) { i++; }
+ for (; i < GRN_BULK_VSIZE(&res_stack) / sizeof(grn_obj *); i++) {
+ grn_obj *stacked_res;
+ stacked_res = *((grn_obj **)GRN_BULK_HEAD(&res_stack) + i);
+ grn_obj_close(ctx, stacked_res);
+ }
+ break;
+ }
+ GRN_PTR_PUT(ctx, &res_stack, res);
+ res = res_;
+ }
+ processed = grn_table_select_index(ctx, table, si, res);
+ if (!processed) {
+ if (ctx->rc) { break; }
+ e->codes = codes + si->start;
+ e->codes_curr = si->end - si->start + 1;
+ grn_table_select_(ctx, table, expr, v, res, si->logical_op);
+ }
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "filter(%d)", grn_table_size(ctx, res));
+ }
+ for (i = 0; i < n; i++) {
+ scan_info *si = sis[i];
+ SI_FREE(si);
+ }
+ GRN_OBJ_FIN(ctx, &res_stack);
+ GRN_FREE(sis);
+ e->codes = codes;
+ e->codes_curr = codes_curr;
+ } else {
+ if (!ctx->rc) {
+ grn_table_select_(ctx, table, expr, v, res, op);
+ }
+ }
+ }
+ GRN_API_RETURN(res);
+}
+
+/* grn_expr_parse */
+
+grn_obj *
+grn_ptr_value_at(grn_obj *obj, int offset)
+{
+ int size = GRN_BULK_VSIZE(obj) / sizeof(grn_obj *);
+ if (offset < 0) { offset = size + offset; }
+ return (0 <= offset && offset < size)
+ ? (((grn_obj **)GRN_BULK_HEAD(obj))[offset])
+ : NULL;
+}
+
+int32_t
+grn_int32_value_at(grn_obj *obj, int offset)
+{
+ int size = GRN_BULK_VSIZE(obj) / sizeof(int32_t);
+ if (offset < 0) { offset = size + offset; }
+ return (0 <= offset && offset < size)
+ ? (((int32_t *)GRN_BULK_HEAD(obj))[offset])
+ : 0;
+}
+
+/* grn_expr_create_from_str */
+
+#include "snip.h"
+
+typedef struct {
+ grn_ctx *ctx;
+ grn_obj *e;
+ grn_obj *v;
+ const char *str;
+ const char *cur;
+ const char *str_end;
+ grn_obj *table;
+ grn_obj *default_column;
+ grn_obj buf;
+ grn_obj token_stack;
+ grn_obj column_stack;
+ grn_obj op_stack;
+ grn_obj mode_stack;
+ grn_obj max_interval_stack;
+ grn_obj similarity_threshold_stack;
+ grn_operator default_op;
+ grn_select_optarg opt;
+ grn_operator default_mode;
+ grn_expr_flags flags;
+ grn_expr_flags default_flags;
+ int escalation_threshold;
+ int escalation_decaystep;
+ int weight_offset;
+ grn_hash *weight_set;
+ snip_cond *snip_conds;
+} efs_info;
+
+typedef struct {
+ grn_operator op;
+ int weight;
+} efs_op;
+
+inline static void
+skip_space(grn_ctx *ctx, efs_info *q)
+{
+ unsigned int len;
+ while (q->cur < q->str_end && grn_isspace(q->cur, ctx->encoding)) {
+ /* null check and length check */
+ if (!(len = grn_charlen(ctx, q->cur, q->str_end))) {
+ q->cur = q->str_end;
+ break;
+ }
+ q->cur += len;
+ }
+}
+
+static grn_rc get_expr(grn_ctx *ctx, efs_info *q, grn_obj *column, grn_operator mode);
+static grn_rc get_token(grn_ctx *ctx, efs_info *q, efs_op *op, grn_obj *column, grn_operator mode);
+
+static grn_rc
+get_phrase(grn_ctx *ctx, efs_info *q, grn_obj *column, int mode, int option)
+{
+ const char *start, *s;
+ start = s = q->cur;
+ GRN_BULK_REWIND(&q->buf);
+ while (1) {
+ unsigned int len;
+ if (s >= q->str_end) {
+ q->cur = s;
+ break;
+ }
+ len = grn_charlen(ctx, s, q->str_end);
+ if (len == 0) {
+ /* invalid string containing malformed multibyte char */
+ return GRN_END_OF_DATA;
+ } else if (len == 1) {
+ if (*s == GRN_QUERY_QUOTER) {
+ q->cur = s + 1;
+ break;
+ } else if (*s == GRN_QUERY_ESCAPE && s + 1 < q->str_end) {
+ s++;
+ len = grn_charlen(ctx, s, q->str_end);
+ }
+ }
+ GRN_TEXT_PUT(ctx, &q->buf, s, len);
+ s += len;
+ }
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, column, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_const(ctx, q->e, &q->buf, GRN_OP_PUSH, 1);
+ if (mode == GRN_OP_MATCH || mode == GRN_OP_EXACT) {
+ grn_expr_append_op(ctx, q->e, mode, 2);
+ } else {
+ grn_expr_append_const_int(ctx, q->e, option, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, mode, 3);
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+get_geocond(grn_ctx *ctx, efs_info *q, grn_obj *longitude, grn_obj *latitude)
+{
+ unsigned int len;
+ const char *start = q->cur, *end;
+ for (end = q->cur;; ) {
+ /* null check and length check */
+ if (!(len = grn_charlen(ctx, end, q->str_end))) {
+ q->cur = q->str_end;
+ break;
+ }
+ if (grn_isspace(end, ctx->encoding) ||
+ *end == GRN_QUERY_PARENR) {
+ q->cur = end;
+ break;
+ }
+ }
+ {
+ const char *tokbuf[8];
+ int32_t lng0, lat0, lng1, lat1, lng2, lat2, r;
+ int32_t n = grn_str_tok((char *)start, end - start, ',', tokbuf, 8, NULL);
+ switch (n) {
+ case 3 :
+ lng0 = grn_atoi(start, tokbuf[0], NULL);
+ lat0 = grn_atoi(tokbuf[0] + 1, tokbuf[1], NULL);
+ r = grn_atoi(tokbuf[1] + 1, tokbuf[2], NULL);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, longitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, latitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_const_int(ctx, q->e, lng0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, r, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GEO_WITHINP5, 5);
+ break;
+ case 4 :
+ lng0 = grn_atoi(start, tokbuf[0], NULL);
+ lat0 = grn_atoi(tokbuf[0] + 1, tokbuf[1], NULL);
+ lng1 = grn_atoi(tokbuf[1] + 1, tokbuf[2], NULL);
+ lat1 = grn_atoi(tokbuf[2] + 1, tokbuf[3], NULL);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, longitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, latitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_const_int(ctx, q->e, lng0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lng1, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat1, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GEO_WITHINP6, 6);
+ break;
+ case 6 :
+ lng0 = grn_atoi(start, tokbuf[0], NULL);
+ lat0 = grn_atoi(tokbuf[0] + 1, tokbuf[1], NULL);
+ lng1 = grn_atoi(tokbuf[1] + 1, tokbuf[2], NULL);
+ lat1 = grn_atoi(tokbuf[2] + 1, tokbuf[3], NULL);
+ lng2 = grn_atoi(tokbuf[3] + 1, tokbuf[4], NULL);
+ lat2 = grn_atoi(tokbuf[4] + 1, tokbuf[5], NULL);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, longitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, latitude, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_const_int(ctx, q->e, lng0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat0, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lng1, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat1, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lng2, GRN_OP_PUSH, 1);
+ grn_expr_append_const_int(ctx, q->e, lat2, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GEO_WITHINP8, 8);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid geocond");
+ break;
+ }
+ }
+ return ctx->rc;
+}
+
+static grn_rc
+get_word(grn_ctx *ctx, efs_info *q, grn_obj *column, int mode, int option)
+{
+ const char *start = q->cur, *end;
+ unsigned int len;
+ for (end = q->cur;; ) {
+ /* null check and length check */
+ if (!(len = grn_charlen(ctx, end, q->str_end))) {
+ q->cur = q->str_end;
+ break;
+ }
+ if (grn_isspace(end, ctx->encoding) ||
+ *end == GRN_QUERY_PARENR) {
+ q->cur = end;
+ break;
+ }
+ if (*end == GRN_QUERY_COLUMN) {
+ grn_obj *c = grn_obj_column(ctx, q->table, start, end - start);
+ if (c && end + 1 < q->str_end) {
+ efs_op op;
+ switch (end[1]) {
+ case '!' :
+ mode = GRN_OP_NOT_EQUAL;
+ q->cur = end + 2;
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ mode = GRN_OP_ASSIGN;
+ q->cur = end + 2;
+ } else {
+ get_token(ctx, q, &op, c, mode);
+ }
+ break;
+ case '<' :
+ if (end + 2 < q->str_end && end[2] == '=') {
+ mode = GRN_OP_LESS_EQUAL;
+ q->cur = end + 3;
+ } else {
+ mode = GRN_OP_LESS;
+ q->cur = end + 2;
+ }
+ break;
+ case '>' :
+ if (end + 2 < q->str_end && end[2] == '=') {
+ mode = GRN_OP_GREATER_EQUAL;
+ q->cur = end + 3;
+ } else {
+ mode = GRN_OP_GREATER;
+ q->cur = end + 2;
+ }
+ break;
+ case '%' :
+ mode = GRN_OP_MATCH;
+ q->cur = end + 2;
+ break;
+ case '@' :
+ q->cur = end + 2;
+ return get_geocond(ctx, q, column, c);
+ break;
+ default :
+ mode = GRN_OP_EQUAL;
+ q->cur = end + 1;
+ break;
+ }
+ return get_token(ctx, q, &op, c, mode);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "column lookup failed");
+ return ctx->rc;
+ }
+ } else if (*end == GRN_QUERY_PREFIX) {
+ mode = GRN_OP_PREFIX;
+ q->cur = end + 1;
+ break;
+ }
+ end += len;
+ }
+ if (!column) {
+ ERR(GRN_INVALID_ARGUMENT, "column missing");
+ return ctx->rc;
+ }
+ if (mode == GRN_OP_ASSIGN) {
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, column, GRN_OP_PUSH, 1);
+ grn_expr_append_const_str(ctx, q->e, start, end - start, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_ASSIGN, 2);
+ } else {
+ grn_expr_append_obj(ctx, q->e, q->v, GRN_OP_PUSH, 1);
+ grn_expr_append_const(ctx, q->e, column, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_GET_VALUE, 2);
+ grn_expr_append_const_str(ctx, q->e, start, end - start, GRN_OP_PUSH, 1);
+ switch (mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ case GRN_OP_SIMILAR :
+ case GRN_OP_TERM_EXTRACT :
+ grn_expr_append_const_int(ctx, q->e, option, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, mode, 3);
+ break;
+ default :
+ grn_expr_append_op(ctx, q->e, mode, 2);
+ break;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_bool
+get_op(efs_info *q, efs_op *op, grn_operator *mode, int *option)
+{
+ grn_bool found = GRN_TRUE;
+ const char *start, *end = q->cur;
+ switch (*end) {
+ case 'S' :
+ *mode = GRN_OP_SIMILAR;
+ start = ++end;
+ *option = grn_atoi(start, q->str_end, (const char **)&end);
+ if (start == end) { *option = DEFAULT_SIMILARITY_THRESHOLD; }
+ q->cur = end;
+ break;
+ case 'N' :
+ *mode = GRN_OP_NEAR;
+ start = ++end;
+ *option = grn_atoi(start, q->str_end, (const char **)&end);
+ if (start == end) { *option = DEFAULT_MAX_INTERVAL; }
+ q->cur = end;
+ break;
+ case 'n' :
+ *mode = GRN_OP_NEAR2;
+ start = ++end;
+ *option = grn_atoi(start, q->str_end, (const char **)&end);
+ if (start == end) { *option = DEFAULT_MAX_INTERVAL; }
+ q->cur = end;
+ break;
+ case 'T' :
+ *mode = GRN_OP_TERM_EXTRACT;
+ start = ++end;
+ *option = grn_atoi(start, q->str_end, (const char **)&end);
+ if (start == end) { *option = DEFAULT_TERM_EXTRACT_POLICY; }
+ q->cur = end;
+ break;
+ case 'X' : /* force exact mode */
+ op->op = GRN_OP_AND;
+ *mode = GRN_OP_EXACT;
+ *option = 0;
+ start = ++end;
+ q->cur = end;
+ break;
+ default :
+ found = GRN_FALSE;
+ break;
+ }
+ return found;
+}
+
+static grn_rc
+get_token(grn_ctx *ctx, efs_info *q, efs_op *op, grn_obj *column, grn_operator mode)
+{
+ int option = 0;
+ op->op = q->default_op;
+ op->weight = DEFAULT_WEIGHT;
+ for (;;) {
+ skip_space(ctx, q);
+ if (q->cur >= q->str_end) { return GRN_END_OF_DATA; }
+ switch (*q->cur) {
+ case '\0' :
+ return GRN_END_OF_DATA;
+ break;
+ case GRN_QUERY_PARENR :
+ q->cur++;
+ return GRN_END_OF_DATA;
+ break;
+ case GRN_QUERY_QUOTEL :
+ q->cur++;
+ return get_phrase(ctx, q, column, mode, option);
+ break;
+ case GRN_QUERY_PREFIX :
+ q->cur++;
+ get_op(q, op, &mode, &option);
+ break;
+ case GRN_QUERY_AND :
+ q->cur++;
+ op->op = GRN_OP_AND;
+ break;
+ case GRN_QUERY_AND_NOT :
+ q->cur++;
+ op->op = GRN_OP_AND_NOT;
+ break;
+ case GRN_QUERY_ADJ_INC :
+ q->cur++;
+ if (op->weight < 127) { op->weight++; }
+ op->op = GRN_OP_ADJUST;
+ break;
+ case GRN_QUERY_ADJ_DEC :
+ q->cur++;
+ if (op->weight > -128) { op->weight--; }
+ op->op = GRN_OP_ADJUST;
+ break;
+ case GRN_QUERY_ADJ_NEG :
+ q->cur++;
+ op->op = GRN_OP_ADJUST;
+ op->weight = -1;
+ break;
+ case GRN_QUERY_PARENL :
+ q->cur++;
+ return get_expr(ctx, q, column, mode);
+ break;
+ case 'O' :
+ if (q->cur[1] == 'R' && q->cur[2] == ' ') {
+ q->cur += 2;
+ op->op = GRN_OP_OR;
+ break;
+ }
+ /* fallthru */
+ default :
+ return get_word(ctx, q, column, mode, option);
+ break;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+get_expr(grn_ctx *ctx, efs_info *q, grn_obj *column, grn_operator mode)
+{
+ efs_op op;
+ grn_rc rc = get_token(ctx, q, &op, column, mode);
+ if (rc) { return rc; }
+ while (!(rc = get_token(ctx, q, &op, column, mode))) {
+ if (op.op == GRN_OP_ADJUST) {
+ grn_expr_append_const_int(ctx, q->e, op.weight, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, op.op, 3);
+ } else {
+ grn_expr_append_op(ctx, q->e, op.op, 2);
+ }
+ }
+ return rc;
+}
+
+#define DISABLE_UNUSED_CODE 1
+#ifndef DISABLE_UNUSED_CODE
+static const char *
+get_weight_vector(grn_ctx *ctx, efs_info *query, const char *source)
+{
+ const char *p;
+
+ if (!query->opt.weight_vector &&
+ !query->weight_set &&
+ !(query->opt.weight_vector = GRN_CALLOC(sizeof(int) * DEFAULT_WEIGHT_VECTOR_SIZE))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "get_weight_vector malloc fail");
+ return source;
+ }
+ for (p = source; p < query->str_end; ) {
+ unsigned int key;
+ int value;
+
+ /* key, key is not zero */
+ key = grn_atoui(p, query->str_end, &p);
+ if (!key || key > GRN_ID_MAX) { break; }
+
+ /* value */
+ if (*p == ':') {
+ p++;
+ value = grn_atoi(p, query->str_end, &p);
+ } else {
+ value = 1;
+ }
+
+ if (query->weight_set) {
+ int *pval;
+ if (grn_hash_add(ctx, query->weight_set, &key, sizeof(unsigned int), (void **)&pval, NULL)) {
+ *pval = value;
+ }
+ } else if (key < DEFAULT_WEIGHT_VECTOR_SIZE) {
+ query->opt.weight_vector[key - 1] = value;
+ } else {
+ GRN_FREE(query->opt.weight_vector);
+ query->opt.weight_vector = NULL;
+ if (!(query->weight_set = grn_hash_create(ctx, NULL, sizeof(unsigned int), sizeof(int),
+ 0))) {
+ return source;
+ }
+ p = source; /* reparse */
+ continue;
+ }
+ if (*p != ',') { break; }
+ p++;
+ }
+ return p;
+}
+
+static void
+get_pragma(grn_ctx *ctx, efs_info *q)
+{
+ const char *start, *end = q->cur;
+ while (end < q->str_end && *end == GRN_QUERY_PREFIX) {
+ if (++end >= q->str_end) { break; }
+ switch (*end) {
+ case 'E' :
+ start = ++end;
+ q->escalation_threshold = grn_atoi(start, q->str_end, (const char **)&end);
+ while (end < q->str_end && (('0' <= *end && *end <= '9') || *end == '-')) { end++; }
+ if (*end == ',') {
+ start = ++end;
+ q->escalation_decaystep = grn_atoi(start, q->str_end, (const char **)&end);
+ }
+ q->cur = end;
+ break;
+ case 'D' :
+ start = ++end;
+ while (end < q->str_end && *end != GRN_QUERY_PREFIX && !grn_isspace(end, ctx->encoding)) {
+ end++;
+ }
+ if (end > start) {
+ switch (*start) {
+ case 'O' :
+ q->default_op = GRN_OP_OR;
+ break;
+ case GRN_QUERY_AND :
+ q->default_op = GRN_OP_AND;
+ break;
+ case GRN_QUERY_AND_NOT :
+ q->default_op = GRN_OP_AND_NOT;
+ break;
+ case GRN_QUERY_ADJ_INC :
+ q->default_op = GRN_OP_ADJUST;
+ break;
+ }
+ }
+ q->cur = end;
+ break;
+ case 'W' :
+ start = ++end;
+ end = (char *)get_weight_vector(ctx, q, start);
+ q->cur = end;
+ break;
+ }
+ }
+}
+
+static int
+section_weight_cb(grn_ctx *ctx, grn_hash *r, const void *rid, int sid, void *arg)
+{
+ int *w;
+ grn_hash *s = (grn_hash *)arg;
+ if (s && grn_hash_get(ctx, s, &sid, sizeof(grn_id), (void **)&w)) {
+ return *w;
+ } else {
+ return 0;
+ }
+}
+#endif
+
+#include "ecmascript.h"
+#include "ecmascript.c"
+
+static grn_rc
+grn_expr_parser_open(grn_ctx *ctx)
+{
+ if (!ctx->impl->parser) {
+ yyParser *pParser = GRN_MALLOCN(yyParser, 1);
+ if (pParser) {
+ pParser->yyidx = -1;
+#if YYSTACKDEPTH<=0
+ yyGrowStack(pParser);
+#endif
+ ctx->impl->parser = pParser;
+ }
+ }
+ return ctx->rc;
+}
+
+#define PARSE(token) grn_expr_parser(ctx->impl->parser, (token), 0, q)
+
+static void
+accept_query_string(grn_ctx *ctx, efs_info *efsi,
+ const char *str, unsigned int str_size)
+{
+ grn_obj *column, *token;
+ grn_operator mode;
+
+ GRN_PTR_PUT(ctx, &efsi->token_stack,
+ grn_expr_add_str(ctx, efsi->e, str, str_size));
+ {
+ efs_info *q = efsi;
+ PARSE(GRN_EXPR_TOKEN_QSTRING);
+ }
+
+ GRN_PTR_POP(&efsi->token_stack, token);
+ column = grn_ptr_value_at(&efsi->column_stack, -1);
+ grn_expr_append_const(efsi->ctx, efsi->e, column, GRN_OP_GET_VALUE, 1);
+ grn_expr_append_obj(efsi->ctx, efsi->e, token, GRN_OP_PUSH, 1);
+
+ mode = grn_int32_value_at(&efsi->mode_stack, -1);
+ switch (mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ {
+ int max_interval;
+ max_interval = grn_int32_value_at(&efsi->max_interval_stack, -1);
+ grn_expr_append_const_int(efsi->ctx, efsi->e, max_interval,
+ GRN_OP_PUSH, 1);
+ grn_expr_append_op(efsi->ctx, efsi->e, mode, 3);
+ }
+ break;
+ case GRN_OP_SIMILAR :
+ {
+ int similarity_threshold;
+ similarity_threshold =
+ grn_int32_value_at(&efsi->similarity_threshold_stack, -1);
+ grn_expr_append_const_int(efsi->ctx, efsi->e, similarity_threshold,
+ GRN_OP_PUSH, 1);
+ grn_expr_append_op(efsi->ctx, efsi->e, mode, 3);
+ }
+ break;
+ default :
+ grn_expr_append_op(efsi->ctx, efsi->e, mode, 2);
+ break;
+ }
+}
+
+static grn_rc
+get_word_(grn_ctx *ctx, efs_info *q)
+{
+ const char *end;
+ unsigned int len;
+ GRN_BULK_REWIND(&q->buf);
+ for (end = q->cur;; ) {
+ /* null check and length check */
+ if (!(len = grn_charlen(ctx, end, q->str_end))) {
+ q->cur = q->str_end;
+ break;
+ }
+ if (grn_isspace(end, ctx->encoding) ||
+ *end == GRN_QUERY_PARENL || *end == GRN_QUERY_PARENR) {
+ q->cur = end;
+ break;
+ }
+ if (q->flags & GRN_EXPR_ALLOW_COLUMN && *end == GRN_QUERY_COLUMN) {
+ grn_operator mode;
+ grn_obj *c = grn_obj_column(ctx, q->table,
+ GRN_TEXT_VALUE(&q->buf),
+ GRN_TEXT_LEN(&q->buf));
+ if (c && end + 1 < q->str_end) {
+ // efs_op op;
+ switch (end[1]) {
+ case '!' :
+ mode = GRN_OP_NOT_EQUAL;
+ q->cur = end + 2;
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ mode = GRN_OP_ASSIGN;
+ q->cur = end + 2;
+ } else {
+ mode = GRN_OP_EQUAL;
+ q->cur = end + 1;
+ }
+ break;
+ case '<' :
+ if (end + 2 < q->str_end && end[2] == '=') {
+ mode = GRN_OP_LESS_EQUAL;
+ q->cur = end + 3;
+ } else {
+ mode = GRN_OP_LESS;
+ q->cur = end + 2;
+ }
+ break;
+ case '>' :
+ if (end + 2 < q->str_end && end[2] == '=') {
+ mode = GRN_OP_GREATER_EQUAL;
+ q->cur = end + 3;
+ } else {
+ mode = GRN_OP_GREATER;
+ q->cur = end + 2;
+ }
+ break;
+ case '@' :
+ mode = GRN_OP_MATCH;
+ q->cur = end + 2;
+ break;
+ case '^' :
+ mode = GRN_OP_PREFIX;
+ q->cur = end + 2;
+ break;
+ case '$' :
+ mode = GRN_OP_SUFFIX;
+ q->cur = end + 2;
+ break;
+ default :
+ mode = GRN_OP_EQUAL;
+ q->cur = end + 1;
+ break;
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "column lookup failed");
+ q->cur = q->str_end;
+ return ctx->rc;
+ }
+ PARSE(GRN_EXPR_TOKEN_IDENTIFIER);
+ PARSE(GRN_EXPR_TOKEN_RELATIVE_OP);
+
+ grn_expr_take_obj(ctx, q->e, c);
+ GRN_PTR_PUT(ctx, &q->column_stack, c);
+ GRN_INT32_PUT(ctx, &q->mode_stack, mode);
+
+ return GRN_SUCCESS;
+ } else if (GRN_TEXT_LEN(&q->buf) > 1 && *end == GRN_QUERY_PREFIX) {
+ q->cur = end + 1;
+ GRN_INT32_PUT(ctx, &q->mode_stack, GRN_OP_PREFIX);
+ break;
+ } else if (*end == GRN_QUERY_ESCAPE) {
+ end += len;
+ if (!(len = grn_charlen(ctx, end, q->str_end))) {
+ q->cur = q->str_end;
+ break;
+ }
+ }
+ GRN_TEXT_PUT(ctx, &q->buf, end, len);
+ end += len;
+ }
+ accept_query_string(ctx, q, GRN_TEXT_VALUE(&q->buf), GRN_TEXT_LEN(&q->buf));
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+parse_query(grn_ctx *ctx, efs_info *q)
+{
+ int option = 0;
+ grn_operator mode;
+ efs_op op_, *op = &op_;
+ grn_bool first_token = GRN_TRUE;
+ grn_bool block_started = GRN_FALSE;
+
+ op->op = q->default_op;
+ op->weight = DEFAULT_WEIGHT;
+ while (!ctx->rc) {
+ skip_space(ctx, q);
+ if (q->cur >= q->str_end) { goto exit; }
+ switch (*q->cur) {
+ case '\0' :
+ goto exit;
+ break;
+ case GRN_QUERY_PARENR :
+ PARSE(GRN_EXPR_TOKEN_PARENR);
+ q->cur++;
+ break;
+ case GRN_QUERY_QUOTEL :
+ q->cur++;
+
+ {
+ const char *start, *s;
+ start = s = q->cur;
+ GRN_BULK_REWIND(&q->buf);
+ while (1) {
+ unsigned int len;
+ if (s >= q->str_end) {
+ q->cur = s;
+ break;
+ }
+ len = grn_charlen(ctx, s, q->str_end);
+ if (len == 0) {
+ /* invalid string containing malformed multibyte char */
+ goto exit;
+ } else if (len == 1) {
+ if (*s == GRN_QUERY_QUOTER) {
+ q->cur = s + 1;
+ break;
+ } else if (*s == GRN_QUERY_ESCAPE && s + 1 < q->str_end) {
+ s++;
+ len = grn_charlen(ctx, s, q->str_end);
+ }
+ }
+ GRN_TEXT_PUT(ctx, &q->buf, s, len);
+ s += len;
+
+ }
+ accept_query_string(ctx, q,
+ GRN_TEXT_VALUE(&q->buf), GRN_TEXT_LEN(&q->buf));
+ }
+
+ break;
+ case GRN_QUERY_PREFIX :
+ q->cur++;
+ if (get_op(q, op, &mode, &option)) {
+ switch (mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ GRN_INT32_PUT(ctx, &q->max_interval_stack, option);
+ break;
+ case GRN_OP_SIMILAR :
+ GRN_INT32_PUT(ctx, &q->similarity_threshold_stack, option);
+ break;
+ default :
+ break;
+ }
+ GRN_INT32_PUT(ctx, &q->mode_stack, mode);
+ PARSE(GRN_EXPR_TOKEN_RELATIVE_OP);
+ } else {
+ q->cur--;
+ get_word_(ctx, q);
+ }
+ break;
+ case GRN_QUERY_AND :
+ if (!first_token) {
+ op->op = GRN_OP_AND;
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_AND);
+ }
+ q->cur++;
+ break;
+ case GRN_QUERY_AND_NOT :
+ if (first_token && (q->flags & GRN_EXPR_ALLOW_LEADING_NOT)) {
+ grn_obj *all_records = grn_ctx_get(ctx, "all_records", 11);
+ if (all_records) {
+ /* dummy token */
+ PARSE(GRN_EXPR_TOKEN_QSTRING);
+ grn_expr_append_obj(ctx, q->e, all_records, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, q->e, GRN_OP_CALL, 0);
+ }
+ }
+ op->op = GRN_OP_AND_NOT;
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_AND_NOT);
+ q->cur++;
+ break;
+ case GRN_QUERY_ADJ_INC :
+ if (op->weight < 127) { op->weight++; }
+ op->op = GRN_OP_ADJUST;
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur++;
+ break;
+ case GRN_QUERY_ADJ_DEC :
+ if (op->weight > -128) { op->weight--; }
+ op->op = GRN_OP_ADJUST;
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur++;
+ break;
+ case GRN_QUERY_ADJ_NEG :
+ op->op = GRN_OP_ADJUST;
+ op->weight = -1;
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur++;
+ break;
+ case GRN_QUERY_PARENL :
+ PARSE(GRN_EXPR_TOKEN_PARENL);
+ q->cur++;
+ block_started = GRN_TRUE;
+ break;
+ case 'O' :
+ if (q->cur[1] == 'R' && q->cur[2] == ' ') {
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_OR);
+ q->cur += 2;
+ break;
+ }
+ /* fallthru */
+ default :
+ get_word_(ctx, q);
+ break;
+ }
+ first_token = block_started;
+ block_started = GRN_FALSE;
+ }
+exit :
+ PARSE(0);
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+get_string(grn_ctx *ctx, efs_info *q, char quote)
+{
+ const char *s;
+ unsigned int len;
+ grn_rc rc = GRN_END_OF_DATA;
+ GRN_BULK_REWIND(&q->buf);
+ for (s = q->cur + 1; s < q->str_end; s += len) {
+ if (!(len = grn_charlen(ctx, s, q->str_end))) { break; }
+ if (len == 1) {
+ if (*s == quote) {
+ s++;
+ rc = GRN_SUCCESS;
+ break;
+ }
+ if (*s == GRN_QUERY_ESCAPE && s + 1 < q->str_end) {
+ s++;
+ if (!(len = grn_charlen(ctx, s, q->str_end))) { break; }
+ }
+ }
+ GRN_TEXT_PUT(ctx, &q->buf, s, len);
+ }
+ q->cur = s;
+ return rc;
+}
+
+static grn_obj *
+resolve_top_level_name(grn_ctx *ctx, const char *name, unsigned int name_size)
+{
+ unsigned int i;
+ unsigned int first_delimiter_position = 0;
+ unsigned int n_delimiters = 0;
+ grn_obj *top_level_object;
+ grn_obj *object;
+
+ for (i = 0; i < name_size; i++) {
+ if (name[i] != GRN_DB_DELIMITER) {
+ continue;
+ }
+
+ if (n_delimiters == 0) {
+ first_delimiter_position = i;
+ }
+ n_delimiters++;
+ }
+
+ if (n_delimiters < 2) {
+ return grn_ctx_get(ctx, name, name_size);
+ }
+
+ top_level_object = grn_ctx_get(ctx, name, first_delimiter_position);
+ if (!top_level_object) {
+ return NULL;
+ }
+ object = grn_obj_column(ctx, top_level_object,
+ name + first_delimiter_position + 1,
+ name_size - first_delimiter_position - 1);
+ grn_obj_unlink(ctx, top_level_object);
+ return object;
+}
+
+static grn_rc
+get_identifier(grn_ctx *ctx, efs_info *q)
+{
+ const char *s;
+ unsigned int len;
+ grn_rc rc = GRN_SUCCESS;
+ for (s = q->cur; s < q->str_end; s += len) {
+ if (!(len = grn_charlen(ctx, s, q->str_end))) {
+ rc = GRN_END_OF_DATA;
+ goto exit;
+ }
+ if (grn_isspace(s, ctx->encoding)) { goto done; }
+ if (len == 1) {
+ switch (*s) {
+ case '\0' : case '(' : case ')' : case '{' : case '}' :
+ case '[' : case ']' : case ',' : case ':' : case '@' :
+ case '?' : case '"' : case '*' : case '+' : case '-' :
+ case '|' : case '/' : case '%' : case '!' : case '^' :
+ case '&' : case '>' : case '<' : case '=' : case '~' :
+ /* case '.' : */
+ goto done;
+ break;
+ }
+ }
+ }
+done :
+ len = s - q->cur;
+ switch (*q->cur) {
+ case 'd' :
+ if (len == 6 && !memcmp(q->cur, "delete", 6)) {
+ PARSE(GRN_EXPR_TOKEN_DELETE);
+ goto exit;
+ }
+ break;
+ case 'f' :
+ if (len == 5 && !memcmp(q->cur, "false", 5)) {
+ grn_obj buf;
+ PARSE(GRN_EXPR_TOKEN_BOOLEAN);
+ GRN_BOOL_INIT(&buf, 0);
+ GRN_BOOL_SET(ctx, &buf, 0);
+ grn_expr_append_const(ctx, q->e, &buf, GRN_OP_PUSH, 1);
+ GRN_OBJ_FIN(ctx, &buf);
+ goto exit;
+ }
+ break;
+ case 'i' :
+ if (len == 2 && !memcmp(q->cur, "in", 2)) {
+ PARSE(GRN_EXPR_TOKEN_IN);
+ goto exit;
+ }
+ break;
+ case 'n' :
+ if (len == 4 && !memcmp(q->cur, "null", 4)) {
+ grn_obj buf;
+ PARSE(GRN_EXPR_TOKEN_NULL);
+ GRN_VOID_INIT(&buf);
+ grn_expr_append_const(ctx, q->e, &buf, GRN_OP_PUSH, 1);
+ GRN_OBJ_FIN(ctx, &buf);
+ goto exit;
+ }
+ break;
+ case 't' :
+ if (len == 4 && !memcmp(q->cur, "true", 4)) {
+ grn_obj buf;
+ PARSE(GRN_EXPR_TOKEN_BOOLEAN);
+ GRN_BOOL_INIT(&buf, 0);
+ GRN_BOOL_SET(ctx, &buf, 1);
+ grn_expr_append_const(ctx, q->e, &buf, GRN_OP_PUSH, 1);
+ GRN_OBJ_FIN(ctx, &buf);
+ goto exit;
+ }
+ break;
+ }
+ {
+ grn_obj *obj;
+ const char *name = q->cur;
+ unsigned int name_size = s - q->cur;
+ if ((obj = grn_expr_get_var(ctx, q->e, name, name_size))) {
+ PARSE(GRN_EXPR_TOKEN_IDENTIFIER);
+ grn_expr_append_obj(ctx, q->e, obj, GRN_OP_PUSH, 1);
+ goto exit;
+ }
+ if ((obj = grn_obj_column(ctx, q->table, name, name_size))) {
+ grn_expr_take_obj(ctx, q->e, obj);
+ PARSE(GRN_EXPR_TOKEN_IDENTIFIER);
+ grn_expr_append_obj(ctx, q->e, obj, GRN_OP_GET_VALUE, 1);
+ goto exit;
+ }
+ if ((obj = resolve_top_level_name(ctx, name, name_size))) {
+ grn_expr_take_obj(ctx, q->e, obj);
+ PARSE(GRN_EXPR_TOKEN_IDENTIFIER);
+ grn_expr_append_obj(ctx, q->e, obj, GRN_OP_PUSH, 1);
+ goto exit;
+ }
+ if (q->flags & GRN_EXPR_SYNTAX_OUTPUT_COLUMNS) {
+ PARSE(GRN_EXPR_TOKEN_NONEXISTENT_COLUMN);
+ } else {
+ rc = GRN_SYNTAX_ERROR;
+ }
+ }
+exit :
+ q->cur = s;
+ return rc;
+}
+
+static void
+set_tos_minor_to_curr(grn_ctx *ctx, efs_info *q)
+{
+ yyParser *pParser = ctx->impl->parser;
+ yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+ yytos->minor.yy0 = ((grn_expr *)(q->e))->codes_curr;
+}
+
+static grn_rc
+parse_script(grn_ctx *ctx, efs_info *q)
+{
+ grn_rc rc = GRN_SUCCESS;
+ for (;;) {
+ skip_space(ctx, q);
+ if (q->cur >= q->str_end) { rc = GRN_END_OF_DATA; goto exit; }
+ switch (*q->cur) {
+ case '\0' :
+ rc = GRN_END_OF_DATA;
+ goto exit;
+ break;
+ case '(' :
+ PARSE(GRN_EXPR_TOKEN_PARENL);
+ q->cur++;
+ break;
+ case ')' :
+ PARSE(GRN_EXPR_TOKEN_PARENR);
+ q->cur++;
+ break;
+ case '{' :
+ PARSE(GRN_EXPR_TOKEN_BRACEL);
+ q->cur++;
+ break;
+ case '}' :
+ PARSE(GRN_EXPR_TOKEN_BRACER);
+ q->cur++;
+ break;
+ case '[' :
+ PARSE(GRN_EXPR_TOKEN_BRACKETL);
+ q->cur++;
+ break;
+ case ']' :
+ PARSE(GRN_EXPR_TOKEN_BRACKETR);
+ q->cur++;
+ break;
+ case ',' :
+ PARSE(GRN_EXPR_TOKEN_COMMA);
+ q->cur++;
+ break;
+ case '.' :
+ PARSE(GRN_EXPR_TOKEN_DOT);
+ q->cur++;
+ break;
+ case ':' :
+ PARSE(GRN_EXPR_TOKEN_COLON);
+ q->cur++;
+ set_tos_minor_to_curr(ctx, q);
+ grn_expr_append_op(ctx, q->e, GRN_OP_JUMP, 0);
+ break;
+ case '@' :
+ switch (q->cur[1]) {
+ case '^' :
+ PARSE(GRN_EXPR_TOKEN_PREFIX);
+ q->cur += 2;
+ break;
+ case '$' :
+ PARSE(GRN_EXPR_TOKEN_SUFFIX);
+ q->cur += 2;
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_MATCH);
+ q->cur++;
+ break;
+ }
+ break;
+ case '~' :
+ PARSE(GRN_EXPR_TOKEN_BITWISE_NOT);
+ q->cur++;
+ break;
+ case '?' :
+ PARSE(GRN_EXPR_TOKEN_QUESTION);
+ q->cur++;
+ set_tos_minor_to_curr(ctx, q);
+ grn_expr_append_op(ctx, q->e, GRN_OP_CJUMP, 0);
+ break;
+ case '"' :
+ if ((rc = get_string(ctx, q, '"'))) { goto exit; }
+ PARSE(GRN_EXPR_TOKEN_STRING);
+ grn_expr_append_const(ctx, q->e, &q->buf, GRN_OP_PUSH, 1);
+ break;
+ case '\'' :
+ if ((rc = get_string(ctx, q, '\''))) { goto exit; }
+ PARSE(GRN_EXPR_TOKEN_STRING);
+ grn_expr_append_const(ctx, q->e, &q->buf, GRN_OP_PUSH, 1);
+ break;
+ case '*' :
+ switch (q->cur[1]) {
+ case 'N' :
+ PARSE(GRN_EXPR_TOKEN_NEAR);
+ q->cur += 2;
+ break;
+ case 'S' :
+ PARSE(GRN_EXPR_TOKEN_SIMILAR);
+ q->cur += 2;
+ break;
+ case 'T' :
+ PARSE(GRN_EXPR_TOKEN_TERM_EXTRACT);
+ q->cur += 2;
+ break;
+ case '>' :
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur += 2;
+ break;
+ case '<' :
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur += 2;
+ break;
+ case '~' :
+ PARSE(GRN_EXPR_TOKEN_ADJUST);
+ q->cur += 2;
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_STAR_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'*=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_STAR);
+ q->cur++;
+ break;
+ }
+ break;
+ case '+' :
+ switch (q->cur[1]) {
+ case '+' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_INCR);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'++' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_PLUS_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'+=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_PLUS);
+ q->cur++;
+ break;
+ }
+ break;
+ case '-' :
+ switch (q->cur[1]) {
+ case '-' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_DECR);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'--' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_MINUS_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'-=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_MINUS);
+ q->cur++;
+ break;
+ }
+ break;
+ case '|' :
+ switch (q->cur[1]) {
+ case '|' :
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_OR);
+ q->cur += 2;
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_OR_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'|=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_BITWISE_OR);
+ q->cur++;
+ break;
+ }
+ break;
+ case '/' :
+ switch (q->cur[1]) {
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_SLASH_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'/=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_SLASH);
+ q->cur++;
+ break;
+ }
+ break;
+ case '%' :
+ switch (q->cur[1]) {
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_MOD_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'%%=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_MOD);
+ q->cur++;
+ break;
+ }
+ break;
+ case '!' :
+ switch (q->cur[1]) {
+ case '=' :
+ PARSE(GRN_EXPR_TOKEN_NOT_EQUAL);
+ q->cur += 2;
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_NOT);
+ q->cur++;
+ break;
+ }
+ break;
+ case '^' :
+ switch (q->cur[1]) {
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ q->cur += 2;
+ PARSE(GRN_EXPR_TOKEN_XOR_ASSIGN);
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'^=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_BITWISE_XOR);
+ q->cur++;
+ break;
+ }
+ break;
+ case '&' :
+ switch (q->cur[1]) {
+ case '&' :
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_AND);
+ q->cur += 2;
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_AND_ASSIGN);
+ q->cur += 2;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'&=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ case '!' :
+ PARSE(GRN_EXPR_TOKEN_LOGICAL_AND_NOT);
+ q->cur += 2;
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_BITWISE_AND);
+ q->cur++;
+ break;
+ }
+ break;
+ case '>' :
+ switch (q->cur[1]) {
+ case '>' :
+ switch (q->cur[2]) {
+ case '>' :
+ switch (q->cur[3]) {
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_SHIFTRR_ASSIGN);
+ q->cur += 4;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'>>>=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_SHIFTRR);
+ q->cur += 3;
+ break;
+ }
+ break;
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_SHIFTR_ASSIGN);
+ q->cur += 3;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'>>=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_SHIFTR);
+ q->cur += 2;
+ break;
+ }
+ break;
+ case '=' :
+ PARSE(GRN_EXPR_TOKEN_GREATER_EQUAL);
+ q->cur += 2;
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_GREATER);
+ q->cur++;
+ break;
+ }
+ break;
+ case '<' :
+ switch (q->cur[1]) {
+ case '<' :
+ switch (q->cur[2]) {
+ case '=' :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_SHIFTL_ASSIGN);
+ q->cur += 3;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'<<=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_SHIFTL);
+ q->cur += 2;
+ break;
+ }
+ break;
+ case '=' :
+ PARSE(GRN_EXPR_TOKEN_LESS_EQUAL);
+ q->cur += 2;
+ break;
+ default :
+ PARSE(GRN_EXPR_TOKEN_LESS);
+ q->cur++;
+ break;
+ }
+ break;
+ case '=' :
+ switch (q->cur[1]) {
+ case '=' :
+ PARSE(GRN_EXPR_TOKEN_EQUAL);
+ q->cur += 2;
+ break;
+ default :
+ if (q->flags & GRN_EXPR_ALLOW_UPDATE) {
+ PARSE(GRN_EXPR_TOKEN_ASSIGN);
+ q->cur++;
+ } else {
+ ERR(GRN_UPDATE_NOT_ALLOWED,
+ "'=' is not allowed (%.*s)", (int)(q->str_end - q->str), q->str);
+ }
+ break;
+ }
+ break;
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ {
+ const char *rest;
+ int64_t int64 = grn_atoll(q->cur, q->str_end, &rest);
+ // checks to see grn_atoll was appropriate
+ // (NOTE: *q->cur begins with a digit. Thus, grn_atoll parses at leaset
+ // one char.)
+ if (q->str_end != rest &&
+ (*rest == '.' || *rest == 'e' || *rest == 'E' ||
+ (*rest >= '0' && *rest <= '9'))) {
+ char *rest_float;
+ double d = strtod(q->cur, &rest_float);
+ grn_obj floatbuf;
+ GRN_FLOAT_INIT(&floatbuf, 0);
+ GRN_FLOAT_SET(ctx, &floatbuf, d);
+ grn_expr_append_const(ctx, q->e, &floatbuf, GRN_OP_PUSH, 1);
+ rest = rest_float;
+ } else {
+ const char *rest64 = rest;
+ grn_atoui(q->cur, q->str_end, &rest);
+ // checks to see grn_atoi failed (see above NOTE)
+ if ((int64 > UINT32_MAX) ||
+ (q->str_end != rest && *rest >= '0' && *rest <= '9')) {
+ grn_obj int64buf;
+ GRN_INT64_INIT(&int64buf, 0);
+ GRN_INT64_SET(ctx, &int64buf, int64);
+ grn_expr_append_const(ctx, q->e, &int64buf, GRN_OP_PUSH, 1);
+ rest = rest64;
+ } else if (int64 > INT32_MAX || int64 < INT32_MIN) {
+ grn_obj int64buf;
+ GRN_INT64_INIT(&int64buf, 0);
+ GRN_INT64_SET(ctx, &int64buf, int64);
+ grn_expr_append_const(ctx, q->e, &int64buf, GRN_OP_PUSH, 1);
+ } else {
+ grn_obj int32buf;
+ GRN_INT32_INIT(&int32buf, 0);
+ GRN_INT32_SET(ctx, &int32buf, (int32_t)int64);
+ grn_expr_append_const(ctx, q->e, &int32buf, GRN_OP_PUSH, 1);
+ }
+ }
+ PARSE(GRN_EXPR_TOKEN_DECIMAL);
+ q->cur = rest;
+ }
+ break;
+ default :
+ if ((rc = get_identifier(ctx, q))) { goto exit; }
+ break;
+ }
+ if (ctx->rc) { rc = ctx->rc; break; }
+ }
+exit :
+ PARSE(0);
+ return rc;
+}
+
+grn_rc
+grn_expr_parse(grn_ctx *ctx, grn_obj *expr,
+ const char *str, unsigned int str_size,
+ grn_obj *default_column, grn_operator default_mode,
+ grn_operator default_op, grn_expr_flags flags)
+{
+ efs_info efsi;
+ if (grn_expr_parser_open(ctx)) { return ctx->rc; }
+ GRN_API_ENTER;
+ efsi.ctx = ctx;
+ efsi.str = str;
+ if ((efsi.v = grn_expr_get_var_by_offset(ctx, expr, 0)) &&
+ (efsi.table = grn_ctx_at(ctx, efsi.v->header.domain))) {
+ GRN_TEXT_INIT(&efsi.buf, 0);
+ GRN_INT32_INIT(&efsi.op_stack, GRN_OBJ_VECTOR);
+ GRN_INT32_INIT(&efsi.mode_stack, GRN_OBJ_VECTOR);
+ GRN_INT32_INIT(&efsi.max_interval_stack, GRN_OBJ_VECTOR);
+ GRN_INT32_INIT(&efsi.similarity_threshold_stack, GRN_OBJ_VECTOR);
+ GRN_PTR_INIT(&efsi.column_stack, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ GRN_PTR_INIT(&efsi.token_stack, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ efsi.e = expr;
+ efsi.str = str;
+ efsi.cur = str;
+ efsi.str_end = str + str_size;
+ efsi.default_column = default_column;
+ GRN_PTR_PUT(ctx, &efsi.column_stack, default_column);
+ GRN_INT32_PUT(ctx, &efsi.op_stack, default_op);
+ GRN_INT32_PUT(ctx, &efsi.mode_stack, default_mode);
+ efsi.default_flags = efsi.flags = flags;
+ efsi.escalation_threshold = GRN_DEFAULT_MATCH_ESCALATION_THRESHOLD;
+ efsi.escalation_decaystep = DEFAULT_DECAYSTEP;
+ efsi.weight_offset = 0;
+ efsi.opt.weight_vector = NULL;
+ efsi.weight_set = NULL;
+
+ if (flags & (GRN_EXPR_SYNTAX_SCRIPT |
+ GRN_EXPR_SYNTAX_OUTPUT_COLUMNS |
+ GRN_EXPR_SYNTAX_ADJUSTER)) {
+ efs_info *q = &efsi;
+ if (flags & GRN_EXPR_SYNTAX_OUTPUT_COLUMNS) {
+ PARSE(GRN_EXPR_TOKEN_START_OUTPUT_COLUMNS);
+ } else if (flags & GRN_EXPR_SYNTAX_ADJUSTER) {
+ PARSE(GRN_EXPR_TOKEN_START_ADJUSTER);
+ }
+ parse_script(ctx, &efsi);
+ } else {
+ parse_query(ctx, &efsi);
+ }
+
+ /*
+ grn_obj strbuf;
+ GRN_TEXT_INIT(&strbuf, 0);
+ grn_expr_inspect(ctx, &strbuf, expr);
+ GRN_TEXT_PUTC(ctx, &strbuf, '\0');
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "query=(%s)", GRN_TEXT_VALUE(&strbuf));
+ GRN_OBJ_FIN(ctx, &strbuf);
+ */
+
+ /*
+ efsi.opt.vector_size = DEFAULT_WEIGHT_VECTOR_SIZE;
+ efsi.opt.func = efsi.weight_set ? section_weight_cb : NULL;
+ efsi.opt.func_arg = efsi.weight_set;
+ efsi.snip_conds = NULL;
+ */
+ GRN_OBJ_FIN(ctx, &efsi.op_stack);
+ GRN_OBJ_FIN(ctx, &efsi.mode_stack);
+ GRN_OBJ_FIN(ctx, &efsi.max_interval_stack);
+ GRN_OBJ_FIN(ctx, &efsi.similarity_threshold_stack);
+ GRN_OBJ_FIN(ctx, &efsi.column_stack);
+ GRN_OBJ_FIN(ctx, &efsi.token_stack);
+ GRN_OBJ_FIN(ctx, &efsi.buf);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "variable is not defined correctly");
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_expr_parser_close(grn_ctx *ctx)
+{
+ if (ctx->impl->parser) {
+ yyParser *pParser = (yyParser*)ctx->impl->parser;
+ while (pParser->yyidx >= 0) yy_pop_parser_stack(pParser);
+#if YYSTACKDEPTH<=0
+ free(pParser->yystack);
+#endif
+ GRN_FREE(pParser);
+ ctx->impl->parser = NULL;
+ }
+ return ctx->rc;
+}
+
+grn_rc
+grn_expr_get_keywords(grn_ctx *ctx, grn_obj *expr, grn_obj *keywords)
+{
+ int i, n;
+ scan_info **sis, *si;
+ GRN_API_ENTER;
+ if ((sis = scan_info_build(ctx, expr, &n, GRN_OP_OR, 0))) {
+ int butp = 0, nparens = 0, npbut = 0;
+ grn_obj but_stack;
+ GRN_UINT32_INIT(&but_stack, GRN_OBJ_VECTOR);
+ for (i = n; i--;) {
+ si = sis[i];
+ if (si->flags & SCAN_POP) {
+ nparens++;
+ if (si->logical_op == GRN_OP_AND_NOT) {
+ GRN_UINT32_PUT(ctx, &but_stack, npbut);
+ npbut = nparens;
+ butp = 1 - butp;
+ }
+ } else {
+ if (si->op == GRN_OP_MATCH && si->query) {
+ if (butp == (si->logical_op == GRN_OP_AND_NOT)) {
+ GRN_PTR_PUT(ctx, keywords, si->query);
+ }
+ }
+ if (si->flags & SCAN_PUSH) {
+ if (nparens == npbut) {
+ butp = 1 - butp;
+ GRN_UINT32_POP(&but_stack, npbut);
+ }
+ nparens--;
+ }
+ }
+ }
+ GRN_OBJ_FIN(ctx, &but_stack);
+ for (i = n; i--;) { SI_FREE(sis[i]); }
+ GRN_FREE(sis);
+ }
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_rc
+grn_expr_snip_add_conditions(grn_ctx *ctx, grn_obj *expr, grn_obj *snip,
+ unsigned int n_tags,
+ const char **opentags, unsigned int *opentag_lens,
+ const char **closetags, unsigned int *closetag_lens)
+{
+ grn_rc rc;
+ grn_obj keywords;
+
+ GRN_API_ENTER;
+
+ GRN_PTR_INIT(&keywords, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ rc = grn_expr_get_keywords(ctx, expr, &keywords);
+ if (rc != GRN_SUCCESS) {
+ GRN_OBJ_FIN(ctx, &keywords);
+ GRN_API_RETURN(rc);
+ }
+
+ if (n_tags) {
+ int i;
+ for (i = 0;; i = (i + 1) % n_tags) {
+ grn_obj *keyword;
+ GRN_PTR_POP(&keywords, keyword);
+ if (!keyword) { break; }
+ grn_snip_add_cond(ctx, snip,
+ GRN_TEXT_VALUE(keyword), GRN_TEXT_LEN(keyword),
+ opentags[i], opentag_lens[i],
+ closetags[i], closetag_lens[i]);
+ }
+ } else {
+ for (;;) {
+ grn_obj *keyword;
+ GRN_PTR_POP(&keywords, keyword);
+ if (!keyword) { break; }
+ grn_snip_add_cond(ctx, snip,
+ GRN_TEXT_VALUE(keyword), GRN_TEXT_LEN(keyword),
+ NULL, 0, NULL, 0);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &keywords);
+
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_obj *
+grn_expr_snip(grn_ctx *ctx, grn_obj *expr, int flags,
+ unsigned int width, unsigned int max_results,
+ unsigned int n_tags,
+ const char **opentags, unsigned int *opentag_lens,
+ const char **closetags, unsigned int *closetag_lens,
+ grn_snip_mapping *mapping)
+{
+ grn_obj *res = NULL;
+ GRN_API_ENTER;
+ if ((res = grn_snip_open(ctx, flags, width, max_results,
+ NULL, 0, NULL, 0, mapping))) {
+ grn_expr_snip_add_conditions(ctx, expr, res,
+ n_tags,
+ opentags, opentag_lens,
+ closetags, closetag_lens);
+ }
+ GRN_API_RETURN(res);
+}
+
+/*
+ So far, grn_column_filter() is nothing but a very rough prototype.
+ Although GRN_COLUMN_EACH() can accelerate many range queries,
+ the following stuff must be resolved one by one.
+
+ * support accessors as column
+ * support tables which have deleted records
+ * support various operators
+ * support various column types
+*/
+grn_rc
+grn_column_filter(grn_ctx *ctx, grn_obj *column,
+ grn_operator operator,
+ grn_obj *value, grn_obj *result_set,
+ grn_operator set_operation)
+{
+ uint32_t *vp;
+ grn_ii_posting posting;
+ uint32_t value_ = grn_atoui(GRN_TEXT_VALUE(value), GRN_BULK_CURR(value), NULL);
+ posting.sid = 1;
+ posting.pos = 0;
+ posting.weight = 0;
+ GRN_COLUMN_EACH(ctx, column, id, vp, {
+ if (*vp < value_) {
+ posting.rid = id;
+ grn_ii_posting_add(ctx, &posting, (grn_hash *)result_set, set_operation);
+ }
+ });
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)result_set, set_operation);
+ return ctx->rc;
+}
+
+grn_rc
+grn_expr_syntax_escape(grn_ctx *ctx, const char *string, int string_size,
+ const char *target_characters,
+ char escape_character,
+ grn_obj *escaped_string)
+{
+ grn_rc rc = GRN_SUCCESS;
+ const char *current, *string_end;
+
+ if (!string) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ GRN_API_ENTER;
+ if (string_size < 0) {
+ string_size = strlen(string);
+ }
+ string_end = string + string_size;
+
+ current = string;
+ while (current < string_end) {
+ unsigned int char_size;
+ char_size = grn_charlen(ctx, current, string_end);
+ switch (char_size) {
+ case 0 :
+ /* string includes malformed multibyte character. */
+ return GRN_INVALID_ARGUMENT;
+ break;
+ case 1 :
+ if (strchr(target_characters, *current)) {
+ GRN_TEXT_PUTC(ctx, escaped_string, escape_character);
+ }
+ GRN_TEXT_PUT(ctx, escaped_string, current, char_size);
+ current += char_size;
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, escaped_string, current, char_size);
+ current += char_size;
+ break;
+ }
+ }
+
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_expr_syntax_escape_query(grn_ctx *ctx, const char *query, int query_size,
+ grn_obj *escaped_query)
+{
+ const char target_characters[] = {
+ GRN_QUERY_AND,
+ GRN_QUERY_AND_NOT,
+ GRN_QUERY_ADJ_INC,
+ GRN_QUERY_ADJ_DEC,
+ GRN_QUERY_ADJ_NEG,
+ GRN_QUERY_PREFIX,
+ GRN_QUERY_PARENL,
+ GRN_QUERY_PARENR,
+ GRN_QUERY_QUOTEL,
+ GRN_QUERY_ESCAPE,
+ GRN_QUERY_COLUMN,
+ '\0',
+ };
+ return grn_expr_syntax_escape(ctx, query, query_size,
+ target_characters, GRN_QUERY_ESCAPE,
+ escaped_query);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/expr.h b/storage/mroonga/vendor/groonga/lib/expr.h
new file mode 100644
index 00000000000..67e134e47b9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/expr.h
@@ -0,0 +1,73 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_EXPR_H
+#define GRN_EXPR_H
+
+#include "db.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SCAN_ACCESSOR (0x01)
+#define SCAN_PUSH (0x02)
+#define SCAN_POP (0x04)
+#define SCAN_PRE_CONST (0x08)
+
+typedef enum {
+ SCAN_START = 0,
+ SCAN_VAR,
+ SCAN_COL1,
+ SCAN_COL2,
+ SCAN_CONST
+} scan_stat;
+
+typedef struct _grn_scan_info scan_info;
+typedef grn_bool (*grn_scan_info_each_arg_callback)(grn_ctx *ctx, grn_obj *obj, void *user_data);
+
+scan_info *grn_scan_info_open(grn_ctx *ctx, int start);
+void grn_scan_info_close(grn_ctx *ctx, scan_info *si);
+void grn_scan_info_put_index(grn_ctx *ctx, scan_info *si, grn_obj *index,
+ uint32_t sid, int32_t weight);
+scan_info **grn_scan_info_put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip,
+ grn_operator op, int start);
+int grn_scan_info_get_flags(scan_info *si);
+void grn_scan_info_set_flags(scan_info *si, int flags);
+grn_operator grn_scan_info_get_logical_op(scan_info *si);
+void grn_scan_info_set_logical_op(scan_info *si, grn_operator logical_op);
+grn_operator grn_scan_info_get_op(scan_info *si);
+void grn_scan_info_set_op(scan_info *si, grn_operator op);
+void grn_scan_info_set_end(scan_info *si, uint32_t end);
+void grn_scan_info_set_query(scan_info *si, grn_obj *query);
+int grn_scan_info_get_max_interval(scan_info *si);
+void grn_scan_info_set_max_interval(scan_info *si, int max_interval);
+int grn_scan_info_get_similarity_threshold(scan_info *si);
+void grn_scan_info_set_similarity_threshold(scan_info *si, int similarity_threshold);
+grn_bool grn_scan_info_push_arg(scan_info *si, grn_obj *arg);
+grn_obj *grn_scan_info_get_arg(grn_ctx *ctx, scan_info *si, int i);
+
+int32_t grn_expr_code_get_weight(grn_ctx *ctx, grn_expr_code *ec);
+void grn_expr_take_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj);
+grn_obj *grn_expr_alloc_const(grn_ctx *ctx, grn_obj *expr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_EXPR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/geo.c b/storage/mroonga/vendor/groonga/lib/geo.c
new file mode 100644
index 00000000000..1bb621487a8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/geo.c
@@ -0,0 +1,2682 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "geo.h"
+#include "pat.h"
+#include "util.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#define GRN_GEO_POINT_IN_NORTH_EAST(point) \
+ ((point)->latitude >= 0 && (point)->longitude >= 0)
+#define GRN_GEO_POINT_IN_NORTH_WEST(point) \
+ ((point)->latitude >= 0 && (point)->longitude < 0)
+#define GRN_GEO_POINT_IN_SOUTH_WEST(point) \
+ ((point)->latitude < 0 && (point)->longitude < 0)
+#define GRN_GEO_POINT_IN_SOUTH_EAST(point) \
+ ((point)->latitude < 0 && (point)->longitude >= 0)
+
+#define GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right) \
+ ((top_left)->longitude > 0 && (bottom_right)->longitude < 0)
+
+typedef struct {
+ grn_id id;
+ double d;
+} geo_entry;
+
+typedef struct
+{
+ grn_geo_point key;
+ int key_size;
+} mesh_entry;
+
+typedef struct {
+ grn_obj *pat;
+ grn_obj top_left_point_buffer;
+ grn_obj bottom_right_point_buffer;
+ grn_geo_point *top_left;
+ grn_geo_point *bottom_right;
+} in_rectangle_data;
+
+typedef struct {
+ grn_geo_point min;
+ grn_geo_point max;
+ int rectangle_common_bit;
+ uint8_t rectangle_common_key[sizeof(grn_geo_point)];
+} in_rectangle_area_data;
+
+static int
+compute_diff_bit(uint8_t *geo_key1, uint8_t *geo_key2)
+{
+ int i, j, diff_bit = 0;
+
+ for (i = 0; i < sizeof(grn_geo_point); i++) {
+ if (geo_key1[i] != geo_key2[i]) {
+ diff_bit = 8;
+ for (j = 0; j < 8; j++) {
+ if ((geo_key1[i] & (1 << (7 - j))) != (geo_key2[i] & (1 << (7 - j)))) {
+ diff_bit = j;
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ return i * 8 + diff_bit;
+}
+
+static void
+compute_min_and_max_key(uint8_t *key_base, int diff_bit,
+ uint8_t *key_min, uint8_t *key_max)
+{
+ int diff_byte, diff_bit_mask;
+
+ diff_byte = diff_bit / 8;
+ diff_bit_mask = 0xff >> (diff_bit % 8);
+
+ if (diff_byte == sizeof(grn_geo_point)) {
+ if (key_min) { memcpy(key_min, key_base, diff_byte); }
+ if (key_max) { memcpy(key_max, key_base, diff_byte); }
+ } else {
+ if (key_min) {
+ memcpy(key_min, key_base, diff_byte + 1);
+ key_min[diff_byte] &= ~diff_bit_mask;
+ memset(key_min + diff_byte + 1, 0,
+ sizeof(grn_geo_point) - diff_byte - 1);
+ }
+
+ if (key_max) {
+ memcpy(key_max, key_base, diff_byte + 1);
+ key_max[diff_byte] |= diff_bit_mask;
+ memset(key_max + diff_byte + 1, 0xff,
+ sizeof(grn_geo_point) - diff_byte - 1);
+ }
+ }
+}
+
+static void
+compute_min_and_max(grn_geo_point *base_point, int diff_bit,
+ grn_geo_point *geo_min, grn_geo_point *geo_max)
+{
+ uint8_t geo_key_base[sizeof(grn_geo_point)];
+ uint8_t geo_key_min[sizeof(grn_geo_point)];
+ uint8_t geo_key_max[sizeof(grn_geo_point)];
+
+ grn_gton(geo_key_base, base_point, sizeof(grn_geo_point));
+ compute_min_and_max_key(geo_key_base, diff_bit,
+ geo_min ? geo_key_min : NULL,
+ geo_max ? geo_key_max : NULL);
+ if (geo_min) {
+ grn_ntog((uint8_t *)geo_min, geo_key_min, sizeof(grn_geo_point));
+ }
+ if (geo_max) {
+ grn_ntog((uint8_t *)geo_max, geo_key_max, sizeof(grn_geo_point));
+ }
+}
+
+/* #define GEO_DEBUG */
+
+#ifdef GEO_DEBUG
+#include <stdio.h>
+
+static void
+inspect_mesh(grn_ctx *ctx, grn_geo_point *key, int key_size, int n)
+{
+ grn_geo_point min, max;
+
+ printf("mesh: %d:%d\n", n, key_size);
+
+ printf("key: ");
+ grn_p_geo_point(ctx, key);
+
+ compute_min_and_max(key, key_size, &min, &max);
+ printf("min: ");
+ grn_p_geo_point(ctx, &min);
+ printf("max: ");
+ grn_p_geo_point(ctx, &max);
+}
+
+static void
+inspect_mesh_entry(grn_ctx *ctx, mesh_entry *entries, int n)
+{
+ mesh_entry *entry;
+
+ entry = entries + n;
+ inspect_mesh(ctx, &(entry->key), entry->key_size, n);
+}
+
+static void
+inspect_tid(grn_ctx *ctx, grn_id tid, grn_geo_point *point, double d)
+{
+ printf("tid: %d:%g", tid, d);
+ grn_p_geo_point(ctx, point);
+}
+
+static void
+inspect_key(grn_ctx *ctx, uint8_t *key)
+{
+ int i;
+ for (i = 0; i < 8; i++) {
+ int j;
+ for (j = 0; j < 8; j++) {
+ printf("%d", (key[i] & (1 << (7 - j))) >> (7 - j));
+ }
+ printf(" ");
+ }
+ printf("\n");
+}
+
+static void
+print_key_mark(grn_ctx *ctx, int target_bit)
+{
+ int i;
+
+ for (i = 0; i < target_bit; i++) {
+ printf(" ");
+ if (i > 0 && i % 8 == 0) {
+ printf(" ");
+ }
+ }
+ if (i > 0 && i % 8 == 0) {
+ printf(" ");
+ }
+ printf("^\n");
+}
+
+static void
+inspect_cursor_entry(grn_ctx *ctx, grn_geo_cursor_entry *entry)
+{
+ grn_geo_point point;
+
+ printf("entry: ");
+ grn_ntog((uint8_t *)&point, entry->key, sizeof(grn_geo_point));
+ grn_p_geo_point(ctx, &point);
+ inspect_key(ctx, entry->key);
+ print_key_mark(ctx, entry->target_bit);
+
+ printf(" target bit: %d\n", entry->target_bit);
+
+#define INSPECT_STATUS_FLAG(name) \
+ ((entry->status_flags & GRN_GEO_CURSOR_ENTRY_STATUS_ ## name) ? "true" : "false")
+
+ printf(" top included: %s\n", INSPECT_STATUS_FLAG(TOP_INCLUDED));
+ printf("bottom included: %s\n", INSPECT_STATUS_FLAG(BOTTOM_INCLUDED));
+ printf(" left included: %s\n", INSPECT_STATUS_FLAG(LEFT_INCLUDED));
+ printf(" right included: %s\n", INSPECT_STATUS_FLAG(RIGHT_INCLUDED));
+ printf(" latitude inner: %s\n", INSPECT_STATUS_FLAG(LATITUDE_INNER));
+ printf("longitude inner: %s\n", INSPECT_STATUS_FLAG(LONGITUDE_INNER));
+
+#undef INSPECT_STATUS_FLAG
+}
+
+static void
+inspect_cursor_entry_targets(grn_ctx *ctx, grn_geo_cursor_entry *entry,
+ uint8_t *top_left_key, uint8_t *bottom_right_key,
+ grn_geo_cursor_entry *next_entry0,
+ grn_geo_cursor_entry *next_entry1)
+{
+ printf("entry: ");
+ inspect_key(ctx, entry->key);
+ printf("top-left: ");
+ inspect_key(ctx, top_left_key);
+ printf("bottom-right: ");
+ inspect_key(ctx, bottom_right_key);
+ printf("next-entry-0: ");
+ inspect_key(ctx, next_entry0->key);
+ printf("next-entry-1: ");
+ inspect_key(ctx, next_entry1->key);
+ printf(" ");
+ print_key_mark(ctx, entry->target_bit + 1);
+}
+#else
+# define inspect_mesh(...)
+# define inspect_mesh_entry(...)
+# define inspect_tid(...)
+# define inspect_key(...)
+# define print_key_mark(...)
+# define inspect_cursor_entry(...)
+# define inspect_cursor_entry_targets(...)
+#endif
+
+static int
+grn_geo_table_sort_detect_far_point(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ grn_pat *pat, geo_entry *entries,
+ grn_pat_cursor *pc, int n,
+ grn_bool accessorp,
+ grn_geo_point *base_point,
+ double *d_far, int *diff_bit)
+{
+ int i = 0, diff_bit_prev, diff_bit_current;
+ grn_id tid;
+ geo_entry *ep, *p;
+ double d;
+ uint8_t geo_key_prev[sizeof(grn_geo_point)];
+ uint8_t geo_key_curr[sizeof(grn_geo_point)];
+ grn_geo_point point;
+
+ *d_far = 0.0;
+ grn_gton(geo_key_curr, base_point, sizeof(grn_geo_point));
+ *diff_bit = sizeof(grn_geo_point) * 8;
+ diff_bit_current = sizeof(grn_geo_point) * 8;
+ memcpy(&point, base_point, sizeof(grn_geo_point));
+ ep = entries;
+ inspect_mesh(ctx, &point, *diff_bit, -1);
+ while ((tid = grn_pat_cursor_next(ctx, pc))) {
+ grn_ii_cursor *ic = grn_ii_cursor_open(ctx, (grn_ii *)index, tid, 0, 0, 1, 0);
+ if (ic) {
+ grn_ii_posting *posting;
+ grn_gton(geo_key_prev, &point, sizeof(grn_geo_point));
+ grn_pat_get_key(ctx, pat, tid, &point, sizeof(grn_geo_point));
+ grn_gton(geo_key_curr, &point, sizeof(grn_geo_point));
+ d = grn_geo_distance_rectangle_raw(ctx, base_point, &point);
+ inspect_tid(ctx, tid, &point, d);
+
+ diff_bit_prev = diff_bit_current;
+ diff_bit_current = compute_diff_bit(geo_key_curr, geo_key_prev);
+#ifdef GEO_DEBUG
+ printf("diff: %d:%d:%d\n", *diff_bit, diff_bit_prev, diff_bit_current);
+#endif
+ if ((diff_bit_current % 2) == 1) {
+ diff_bit_current--;
+ }
+ if (diff_bit_current < diff_bit_prev && *diff_bit > diff_bit_current) {
+ if (i == n) {
+ grn_ii_cursor_close(ctx, ic);
+ break;
+ }
+ *diff_bit = diff_bit_current;
+ }
+
+ if (d > *d_far) {
+ *d_far = d;
+ }
+ while ((posting = grn_ii_cursor_next(ctx, ic))) {
+ grn_id rid = accessorp
+ ? grn_table_get(ctx, table, &posting->rid, sizeof(grn_id))
+ : posting->rid;
+ if (rid) {
+ for (p = ep; entries < p && p[-1].d > d; p--) {
+ p->id = p[-1].id;
+ p->d = p[-1].d;
+ }
+ p->id = rid;
+ p->d = d;
+ if (i < n) {
+ ep++;
+ i++;
+ }
+ }
+ }
+ grn_ii_cursor_close(ctx, ic);
+ }
+ }
+
+ return i;
+}
+
+typedef enum {
+ MESH_LEFT_TOP,
+ MESH_RIGHT_TOP,
+ MESH_RIGHT_BOTTOM,
+ MESH_LEFT_BOTTOM
+} mesh_position;
+
+/*
+ meshes should have
+ 86 >= spaces when include_base_point_hash == GRN_FALSE,
+ 87 >= spaces when include_base_point_hash == GRN_TRUE.
+*/
+static int
+grn_geo_get_meshes_for_circle(grn_ctx *ctx, grn_geo_point *base_point,
+ double d_far, int diff_bit,
+ int include_base_point_mesh,
+ mesh_entry *meshes)
+{
+ double d;
+ int n_meshes;
+ int lat_diff, lng_diff;
+ mesh_position position;
+ grn_geo_point geo_base, geo_min, geo_max;
+
+ compute_min_and_max(base_point, diff_bit - 2, &geo_min, &geo_max);
+
+ lat_diff = (geo_max.latitude - geo_min.latitude + 1) / 2;
+ lng_diff = (geo_max.longitude - geo_min.longitude + 1) / 2;
+ geo_base.latitude = geo_min.latitude + lat_diff;
+ geo_base.longitude = geo_min.longitude + lng_diff;
+ if (base_point->latitude >= geo_base.latitude) {
+ if (base_point->longitude >= geo_base.longitude) {
+ position = MESH_RIGHT_TOP;
+ } else {
+ position = MESH_LEFT_TOP;
+ }
+ } else {
+ if (base_point->longitude >= geo_base.longitude) {
+ position = MESH_RIGHT_BOTTOM;
+ } else {
+ position = MESH_LEFT_BOTTOM;
+ }
+ }
+ /*
+ base_point: b
+ geo_min: i
+ geo_max: a
+ geo_base: x: must be at the left bottom in the top right mesh.
+
+ e.g.: base_point is at the left bottom mesh case:
+ +------+------+
+ | | a|
+ | |x |
+ ^+------+------+
+ || | |
+ lng_diff || b | |
+ \/i------+------+
+ <------>
+ lat_diff
+
+ grn_min + lat_diff -> the right mesh.
+ grn_min + lng_diff -> the top mesh.
+ */
+#ifdef GEO_DEBUG
+ grn_p_geo_point(ctx, base_point);
+ printf("base: ");
+ grn_p_geo_point(ctx, &geo_base);
+ printf("min: ");
+ grn_p_geo_point(ctx, &geo_min);
+ printf("max: ");
+ grn_p_geo_point(ctx, &geo_max);
+ printf("diff: %d (%d, %d)\n", diff_bit, lat_diff, lng_diff);
+ switch (position) {
+ case MESH_LEFT_TOP :
+ printf("position: left-top\n");
+ break;
+ case MESH_RIGHT_TOP :
+ printf("position: right-top\n");
+ break;
+ case MESH_RIGHT_BOTTOM :
+ printf("position: right-bottom\n");
+ break;
+ case MESH_LEFT_BOTTOM :
+ printf("position: left-bottom\n");
+ break;
+ }
+#endif
+
+ n_meshes = 0;
+
+#define add_mesh(lat_diff_,lng_diff_,key_size_) do {\
+ meshes[n_meshes].key.latitude = geo_base.latitude + (lat_diff_);\
+ meshes[n_meshes].key.longitude = geo_base.longitude + (lng_diff_);\
+ meshes[n_meshes].key_size = key_size_;\
+ n_meshes++;\
+} while (0)
+
+ if (include_base_point_mesh || position != MESH_LEFT_TOP) {
+ add_mesh(0, -lng_diff, diff_bit);
+ }
+ if (include_base_point_mesh || position != MESH_RIGHT_TOP) {
+ add_mesh(0, 0, diff_bit);
+ }
+ if (include_base_point_mesh || position != MESH_RIGHT_BOTTOM) {
+ add_mesh(-lat_diff, 0, diff_bit);
+ }
+ if (include_base_point_mesh || position != MESH_LEFT_BOTTOM) {
+ add_mesh(-lat_diff, -lng_diff, diff_bit);
+ }
+
+ /*
+ b: base_point
+ x: geo_base
+ 0-83: sub meshes. 0-83 are added order.
+
+ j: -5 -4 -3 -2 -1 0 1 2 3 4
+ +---+---+---+---+---+---+---+---+---+---+
+ |74 |75 |76 |77 |78 |79 |80 |81 |82 |83 | 4
+ +---+---+---+---+---+---+---+---+---+---+
+ |64 |65 |66 |67 |68 |69 |70 |71 |72 |73 | 3
+ +---+---+---+---+---+---+---+---+---+---+
+ |54 |55 |56 |57 |58 |59 |60 |61 |62 |63 | 2
+ +---+---+---+---+---+---+---+---+---+---+
+ |48 |49 |50 | b | |51 |52 |53 | 1
+ +---+---+---+ | +---+---+---+
+ |42 |43 |44 | |x |45 |46 |47 | 0
+ +---+---+---+-------+-------+---+---+---+
+ |36 |37 |38 | | |39 |40 |41 | -1
+ +---+---+---+ base meshes +---+---+---+
+ |30 |31 |32 | | |33 |34 |35 | -2
+ +---+---+---+---+---+---+---+---+---+---+
+ |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 | -3
+ +---+---+---+---+---+---+---+---+---+---+
+ |10 |11 |12 |13 |14 |15 |16 |17 |18 |19 | -4
+ +---+---+---+---+---+---+---+---+---+---+
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -5
+ +---+---+---+---+---+---+---+---+---+---+
+ i
+ */
+ {
+ int i, j, n_sub_meshes, lat, lat_min, lat_max, lng, lng_min, lng_max;
+ n_sub_meshes = 0;
+ for (i = -5; i < 5; i++) {
+ lat_min = ((lat_diff + 1) / 2) * i;
+ lat_max = ((lat_diff + 1) / 2) * (i + 1) - 1;
+ for (j = -5; j < 5; j++) {
+ if (-3 < i && i < 2 && -3 < j && j < 2) {
+ continue;
+ }
+ lng_min = ((lng_diff + 1) / 2) * j;
+ lng_max = ((lng_diff + 1) / 2) * (j + 1) - 1;
+ if (base_point->latitude <= geo_base.latitude + lat_min) {
+ lat = geo_base.latitude + lat_min;
+ } else if (geo_base.latitude + lat_max < base_point->latitude) {
+ lat = geo_base.latitude + lat_max;
+ } else {
+ lat = base_point->latitude;
+ }
+ if (base_point->longitude <= geo_base.longitude + lng_min) {
+ lng = geo_base.longitude + lng_min;
+ } else if (geo_base.longitude + lng_max < base_point->longitude) {
+ lng = geo_base.longitude + lng_max;
+ } else {
+ lng = base_point->longitude;
+ }
+ meshes[n_meshes].key.latitude = lat;
+ meshes[n_meshes].key.longitude = lng;
+ d = grn_geo_distance_rectangle_raw(ctx, base_point,
+ &(meshes[n_meshes].key));
+ if (d < d_far) {
+#ifdef GEO_DEBUG
+ printf("sub-mesh: %d: (%d,%d): (%d,%d;%d,%d)\n",
+ n_sub_meshes, base_point->latitude, base_point->longitude,
+ geo_base.latitude + lat_min,
+ geo_base.latitude + lat_max,
+ geo_base.longitude + lng_min,
+ geo_base.longitude + lng_max);
+ grn_p_geo_point(ctx, &(meshes[n_meshes].key));
+#endif
+ meshes[n_meshes].key_size = diff_bit + 2;
+ n_meshes++;
+ }
+ n_sub_meshes++;
+ }
+ }
+ }
+
+#undef add_mesh
+
+ return n_meshes;
+}
+
+static int
+grn_geo_table_sort_collect_points(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ grn_pat *pat,
+ geo_entry *entries, int n_entries,
+ int n, grn_bool accessorp,
+ grn_geo_point *base_point,
+ double d_far, int diff_bit)
+{
+ int n_meshes;
+ mesh_entry meshes[86];
+ geo_entry *ep, *p;
+
+ n_meshes = grn_geo_get_meshes_for_circle(ctx, base_point, d_far, diff_bit,
+ GRN_FALSE, meshes);
+
+ ep = entries + n_entries;
+ while (n_meshes--) {
+ grn_id tid;
+ grn_pat_cursor *pc = grn_pat_cursor_open(ctx, pat,
+ &(meshes[n_meshes].key),
+ meshes[n_meshes].key_size,
+ NULL, 0,
+ 0, -1,
+ GRN_CURSOR_PREFIX|GRN_CURSOR_SIZE_BY_BIT);
+ inspect_mesh_entry(ctx, meshes, n_meshes);
+ if (pc) {
+ while ((tid = grn_pat_cursor_next(ctx, pc))) {
+ grn_ii_cursor *ic = grn_ii_cursor_open(ctx, (grn_ii *)index, tid, 0, 0, 1, 0);
+ if (ic) {
+ double d;
+ grn_geo_point pos;
+ grn_ii_posting *posting;
+ grn_pat_get_key(ctx, pat, tid, &pos, sizeof(grn_geo_point));
+ d = grn_geo_distance_rectangle_raw(ctx, base_point, &pos);
+ inspect_tid(ctx, tid, &pos, d);
+ while ((posting = grn_ii_cursor_next(ctx, ic))) {
+ grn_id rid = accessorp
+ ? grn_table_get(ctx, table, &posting->rid, sizeof(grn_id))
+ : posting->rid;
+ if (rid) {
+ for (p = ep; entries < p && p[-1].d > d; p--) {
+ p->id = p[-1].id;
+ p->d = p[-1].d;
+ }
+ p->id = rid;
+ p->d = d;
+ if (n_entries < n) {
+ ep++;
+ n_entries++;
+ }
+ }
+ }
+ grn_ii_cursor_close(ctx, ic);
+ }
+ }
+ grn_pat_cursor_close(ctx, pc);
+ }
+ }
+ return n_entries;
+}
+
+static inline grn_obj *
+find_geo_sort_index(grn_ctx *ctx, grn_obj *key)
+{
+ grn_obj *index = NULL;
+
+ if (GRN_ACCESSORP(key)) {
+ grn_accessor *accessor = (grn_accessor *)key;
+ if (accessor->action != GRN_ACCESSOR_GET_KEY) {
+ return NULL;
+ }
+ if (!(DB_OBJ(accessor->obj)->id & GRN_OBJ_TMP_OBJECT)) {
+ return NULL;
+ }
+ if (accessor->obj->header.type != GRN_TABLE_HASH_KEY) {
+ return NULL;
+ }
+ if (!accessor->next) {
+ return NULL;
+ }
+ grn_column_index(ctx, accessor->next->obj, GRN_OP_LESS, &index, 1, NULL);
+ } else {
+ grn_column_index(ctx, key, GRN_OP_LESS, &index, 1, NULL);
+ }
+
+ return index;
+}
+
+static inline int
+grn_geo_table_sort_by_distance(grn_ctx *ctx,
+ grn_obj *table,
+ grn_obj *index,
+ grn_pat *pat,
+ grn_pat_cursor *pc,
+ grn_bool accessorp,
+ grn_geo_point *base_point,
+ int offset,
+ int limit,
+ grn_obj *result)
+{
+ int n_entries = 0, e = offset + limit;
+ geo_entry *entries;
+
+ if ((entries = GRN_MALLOC(sizeof(geo_entry) * (e + 1)))) {
+ int n, diff_bit;
+ double d_far;
+ geo_entry *ep;
+ grn_bool need_not_indexed_records;
+ grn_hash *indexed_records = NULL;
+
+ n = grn_geo_table_sort_detect_far_point(ctx, table, index, pat,
+ entries, pc, e, accessorp,
+ base_point,
+ &d_far, &diff_bit);
+ if (diff_bit > 0) {
+ n = grn_geo_table_sort_collect_points(ctx, table, index, pat,
+ entries, n, e, accessorp,
+ base_point, d_far, diff_bit);
+ }
+ need_not_indexed_records = offset + limit > n;
+ if (need_not_indexed_records) {
+ indexed_records = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ }
+ for (ep = entries + offset;
+ n_entries < limit && ep < entries + n;
+ n_entries++, ep++) {
+ grn_id *sorted_id;
+ if (!grn_array_add(ctx, (grn_array *)result, (void **)&sorted_id)) {
+ if (indexed_records) {
+ grn_hash_close(ctx, indexed_records);
+ indexed_records = NULL;
+ }
+ break;
+ }
+ *sorted_id = ep->id;
+ if (indexed_records) {
+ grn_hash_add(ctx, indexed_records, &(ep->id), sizeof(grn_id),
+ NULL, NULL);
+ }
+ }
+ GRN_FREE(entries);
+ if (indexed_records) {
+ GRN_TABLE_EACH(ctx, table, GRN_ID_NIL, GRN_ID_MAX, id, NULL, NULL, NULL, {
+ if (!grn_hash_get(ctx, indexed_records, &id, sizeof(grn_id), NULL)) {
+ grn_id *sorted_id;
+ if (grn_array_add(ctx, (grn_array *)result, (void **)&sorted_id)) {
+ *sorted_id = id;
+ }
+ n_entries++;
+ if (n_entries == limit) {
+ break;
+ }
+ };
+ });
+ grn_hash_close(ctx, indexed_records);
+ }
+ }
+
+ return n_entries;
+}
+
+int
+grn_geo_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
+ grn_obj *result, grn_table_sort_key *keys, int n_keys)
+{
+ grn_obj *index;
+ int i = 0, e = offset + limit;
+ grn_bool accessorp = GRN_ACCESSORP(keys->key);
+ if (n_keys == 2 && (index = find_geo_sort_index(ctx, keys->key))) {
+ grn_id tid;
+ grn_obj *arg = keys[1].key;
+ grn_pat *pat = (grn_pat *)grn_ctx_at(ctx, index->header.domain);
+ grn_id domain = pat->obj.header.domain;
+ grn_pat_cursor *pc = grn_pat_cursor_open(ctx, pat, NULL, 0,
+ GRN_BULK_HEAD(arg), GRN_BULK_VSIZE(arg),
+ 0, -1, GRN_CURSOR_PREFIX);
+ if (pc) {
+ if (domain != GRN_DB_TOKYO_GEO_POINT && domain != GRN_DB_WGS84_GEO_POINT) {
+ while (i < e && (tid = grn_pat_cursor_next(ctx, pc))) {
+ grn_ii_cursor *ic = grn_ii_cursor_open(ctx, (grn_ii *)index, tid, 0, 0, 1, 0);
+ if (ic) {
+ grn_ii_posting *posting;
+ while (i < e && (posting = grn_ii_cursor_next(ctx, ic))) {
+ if (offset <= i) {
+ grn_id *v;
+ if (!grn_array_add(ctx, (grn_array *)result, (void **)&v)) { break; }
+ *v = posting->rid;
+ }
+ i++;
+ }
+ grn_ii_cursor_close(ctx, ic);
+ }
+ }
+ } else {
+ grn_geo_point *base_point = (grn_geo_point *)GRN_BULK_HEAD(arg);
+ i = grn_geo_table_sort_by_distance(ctx, table, index, pat,
+ pc, accessorp, base_point,
+ offset, limit, result);
+ }
+ grn_pat_cursor_close(ctx, pc);
+ }
+ }
+ return i;
+}
+
+grn_rc
+grn_geo_resolve_approximate_type(grn_ctx *ctx, grn_obj *type_name,
+ grn_geo_approximate_type *type)
+{
+ grn_rc rc;
+ grn_obj approximate_type;
+
+ GRN_TEXT_INIT(&approximate_type, 0);
+ rc = grn_obj_cast(ctx, type_name, &approximate_type, GRN_FALSE);
+ if (rc == GRN_SUCCESS) {
+ const char *name;
+ unsigned int size;
+ name = GRN_TEXT_VALUE(&approximate_type);
+ size = GRN_TEXT_LEN(&approximate_type);
+ if ((strncmp("rectangle", name, size) == 0) ||
+ (strncmp("rect", name, size) == 0)) {
+ *type = GRN_GEO_APPROXIMATE_RECTANGLE;
+ } else if ((strncmp("sphere", name, size) == 0) ||
+ (strncmp("sphr", name, size) == 0)) {
+ *type = GRN_GEO_APPROXIMATE_SPHERE;
+ } else if ((strncmp("ellipsoid", name, size) == 0) ||
+ (strncmp("ellip", name, size) == 0)) {
+ *type = GRN_GEO_APPROXIMATE_ELLIPSOID;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo distance approximate type must be one of "
+ "[rectangle, rect, sphere, sphr, ellipsoid, ellip]"
+ ": <%.*s>",
+ size, name);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &approximate_type);
+
+ return rc;
+}
+
+typedef double (*grn_geo_distance_raw_func)(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2);
+
+grn_rc
+grn_selector_geo_in_circle(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ grn_geo_approximate_type type = GRN_GEO_APPROXIMATE_RECTANGLE;
+
+ if (!(nargs == 4 || nargs == 5)) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo_in_circle(): requires 3 or 4 arguments but was <%d> arguments",
+ nargs - 1);
+ return ctx->rc;
+ }
+
+ if (!index) {
+ grn_obj *point_column;
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ point_column = args[1];
+ column_name_size = grn_obj_name(ctx, point_column,
+ column_name, GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo_in_circle(): index for <%.*s> is missing",
+ column_name_size, column_name);
+ return ctx->rc;
+ }
+
+ if (nargs == 5) {
+ if (grn_geo_resolve_approximate_type(ctx, args[4], &type) != GRN_SUCCESS) {
+ return ctx->rc;
+ }
+ }
+
+ {
+ grn_obj *center_point, *distance;
+ center_point = args[2];
+ distance = args[3];
+ grn_geo_select_in_circle(ctx, index, center_point, distance, type, res, op);
+ }
+
+ return ctx->rc;
+}
+
+static grn_geo_distance_raw_func
+grn_geo_resolve_distance_raw_func (grn_ctx *ctx,
+ grn_geo_approximate_type approximate_type,
+ grn_id domain)
+{
+ grn_geo_distance_raw_func distance_raw_func = NULL;
+
+ switch (approximate_type) {
+ case GRN_GEO_APPROXIMATE_RECTANGLE :
+ distance_raw_func = grn_geo_distance_rectangle_raw;
+ break;
+ case GRN_GEO_APPROXIMATE_SPHERE :
+ distance_raw_func = grn_geo_distance_sphere_raw;
+ break;
+ case GRN_GEO_APPROXIMATE_ELLIPSOID :
+ if (domain == GRN_DB_WGS84_GEO_POINT) {
+ distance_raw_func = grn_geo_distance_ellipsoid_raw_wgs84;
+ } else {
+ distance_raw_func = grn_geo_distance_ellipsoid_raw_tokyo;
+ }
+ break;
+ default :
+ break;
+ }
+
+ return distance_raw_func;
+}
+
+grn_rc
+grn_geo_select_in_circle(grn_ctx *ctx, grn_obj *index,
+ grn_obj *center_point, grn_obj *distance,
+ grn_geo_approximate_type approximate_type,
+ grn_obj *res, grn_operator op)
+{
+ grn_id domain;
+ double center_longitude, center_latitude;
+ double d;
+ grn_obj *pat, *point_on_circle = NULL, center_point_, point_on_circle_;
+ grn_geo_point *center, on_circle;
+ grn_geo_distance_raw_func distance_raw_func;
+ pat = grn_ctx_at(ctx, index->header.domain);
+ domain = pat->header.domain;
+ if (domain != GRN_DB_TOKYO_GEO_POINT && domain != GRN_DB_WGS84_GEO_POINT) {
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_size = 0;
+ grn_obj *domain_object;
+ domain_object = grn_ctx_at(ctx, domain);
+ if (domain_object) {
+ name_size = grn_obj_name(ctx, domain_object, name, GRN_TABLE_MAX_KEY_SIZE);
+ grn_obj_unlink(ctx, domain_object);
+ } else {
+ strcpy(name, "(null)");
+ name_size = strlen(name);
+ }
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo_in_circle(): index table must be "
+ "TokyoGeoPoint or WGS84GeoPoint key type table: <%.*s>",
+ name_size, name);
+ goto exit;
+ }
+
+ if (center_point->header.domain != domain) {
+ GRN_OBJ_INIT(&center_point_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, center_point, &center_point_, GRN_FALSE)) { goto exit; }
+ center_point = &center_point_;
+ }
+ center = GRN_GEO_POINT_VALUE_RAW(center_point);
+ center_longitude = GRN_GEO_INT2RAD(center->longitude);
+ center_latitude = GRN_GEO_INT2RAD(center->latitude);
+
+ distance_raw_func = grn_geo_resolve_distance_raw_func(ctx,
+ approximate_type,
+ domain);
+ if (!distance_raw_func) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "unknown approximate type: <%d>", approximate_type);
+ goto exit;
+ }
+
+ switch (distance->header.domain) {
+ case GRN_DB_INT32 :
+ d = GRN_INT32_VALUE(distance);
+ on_circle.latitude = center->latitude + GRN_GEO_RAD2INT(d / (double)GRN_GEO_RADIUS);
+ on_circle.longitude = center->longitude;
+ break;
+ case GRN_DB_UINT32 :
+ d = GRN_UINT32_VALUE(distance);
+ on_circle.latitude = center->latitude + GRN_GEO_RAD2INT(d / (double)GRN_GEO_RADIUS);
+ on_circle.longitude = center->longitude;
+ break;
+ case GRN_DB_INT64 :
+ d = GRN_INT64_VALUE(distance);
+ on_circle.latitude = center->latitude + GRN_GEO_RAD2INT(d / (double)GRN_GEO_RADIUS);
+ on_circle.longitude = center->longitude;
+ break;
+ case GRN_DB_UINT64 :
+ d = GRN_UINT64_VALUE(distance);
+ on_circle.latitude = center->latitude + GRN_GEO_RAD2INT(d / (double)GRN_GEO_RADIUS);
+ on_circle.longitude = center->longitude;
+ break;
+ case GRN_DB_FLOAT :
+ d = GRN_FLOAT_VALUE(distance);
+ on_circle.latitude = center->latitude + GRN_GEO_RAD2INT(d / (double)GRN_GEO_RADIUS);
+ on_circle.longitude = center->longitude;
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ GRN_OBJ_INIT(&point_on_circle_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, distance, &point_on_circle_, GRN_FALSE)) { goto exit; }
+ point_on_circle = &point_on_circle_;
+ /* fallthru */
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ if (!point_on_circle) {
+ if (domain != distance->header.domain) { /* todo */ goto exit; }
+ point_on_circle = distance;
+ }
+ GRN_GEO_POINT_VALUE(point_on_circle,
+ on_circle.latitude, on_circle.longitude);
+ d = distance_raw_func(ctx, center, &on_circle);
+ if (point_on_circle == &point_on_circle_) {
+ grn_obj_unlink(ctx, point_on_circle);
+ }
+ break;
+ default :
+ goto exit;
+ }
+ {
+ int n_meshes, diff_bit;
+ double d_far;
+ mesh_entry meshes[87];
+ uint8_t geo_key1[sizeof(grn_geo_point)];
+ uint8_t geo_key2[sizeof(grn_geo_point)];
+
+ d_far = grn_geo_distance_rectangle_raw(ctx, center, &on_circle);
+ grn_gton(geo_key1, center, sizeof(grn_geo_point));
+ grn_gton(geo_key2, &on_circle, sizeof(grn_geo_point));
+ diff_bit = compute_diff_bit(geo_key1, geo_key2);
+#ifdef GEO_DEBUG
+ printf("center point: ");
+ grn_p_geo_point(ctx, center);
+ printf("point on circle: ");
+ grn_p_geo_point(ctx, &on_circle);
+ printf("diff: %d\n", diff_bit);
+#endif
+ if ((diff_bit % 2) == 1) {
+ diff_bit--;
+ }
+ n_meshes = grn_geo_get_meshes_for_circle(ctx, center,
+ d_far, diff_bit, GRN_TRUE,
+ meshes);
+ while (n_meshes--) {
+ grn_table_cursor *tc;
+ tc = grn_table_cursor_open(ctx, pat,
+ &(meshes[n_meshes].key),
+ meshes[n_meshes].key_size,
+ NULL, 0,
+ 0, -1,
+ GRN_CURSOR_PREFIX|GRN_CURSOR_SIZE_BY_BIT);
+ inspect_mesh_entry(ctx, meshes, n_meshes);
+ if (tc) {
+ grn_id tid;
+ grn_geo_point point;
+ while ((tid = grn_table_cursor_next(ctx, tc))) {
+ double point_distance;
+ grn_table_get_key(ctx, pat, tid, &point, sizeof(grn_geo_point));
+ point_distance = distance_raw_func(ctx, &point, center);
+ if (point_distance <= d) {
+ inspect_tid(ctx, tid, &point, point_distance);
+ grn_ii_at(ctx, (grn_ii *)index, tid, (grn_hash *)res, op);
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ }
+ }
+exit :
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, op);
+ return ctx->rc;
+}
+
+grn_rc
+grn_selector_geo_in_rectangle(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ if (nargs == 4) {
+ grn_obj *top_left_point, *bottom_right_point;
+ top_left_point = args[2];
+ bottom_right_point = args[3];
+ grn_geo_select_in_rectangle(ctx, index,
+ top_left_point, bottom_right_point,
+ res, op);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "geo_in_rectangle(): requires 3 arguments but was <%d> arguments",
+ nargs - 1);
+ }
+ return ctx->rc;
+}
+
+static void
+in_rectangle_data_fill(grn_ctx *ctx, grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ const char *process_name,
+ in_rectangle_data *data)
+{
+ grn_id domain;
+ const char *domain_name;
+
+ data->pat = grn_ctx_at(ctx, index->header.domain);
+ domain = data->pat->header.domain;
+ if (domain != GRN_DB_TOKYO_GEO_POINT && domain != GRN_DB_WGS84_GEO_POINT) {
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_size = 0;
+ grn_obj *domain_object;
+ domain_object = grn_ctx_at(ctx, domain);
+ if (domain_object) {
+ name_size = grn_obj_name(ctx, domain_object, name, GRN_TABLE_MAX_KEY_SIZE);
+ grn_obj_unlink(ctx, domain_object);
+ } else {
+ strcpy(name, "(null)");
+ name_size = strlen(name);
+ }
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: index table must be "
+ "TokyoGeoPoint or WGS84GeoPoint key type table: <%.*s>",
+ process_name, name_size, name);
+ return;
+ }
+
+ if (domain == GRN_DB_TOKYO_GEO_POINT) {
+ domain_name = "TokyoGeoPoint";
+ } else {
+ domain_name = "WGS84GeoPoint";
+ }
+
+ if (top_left_point->header.domain != domain) {
+ grn_obj_reinit(ctx, &(data->top_left_point_buffer), domain, GRN_BULK);
+ if (grn_obj_cast(ctx, top_left_point, &(data->top_left_point_buffer),
+ GRN_FALSE)) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: failed to cast to %s: <%.*s>",
+ process_name, domain_name,
+ (int)GRN_TEXT_LEN(top_left_point),
+ GRN_TEXT_VALUE(top_left_point));
+ return;
+ }
+ top_left_point = &(data->top_left_point_buffer);
+ }
+ data->top_left = GRN_GEO_POINT_VALUE_RAW(top_left_point);
+
+ if (bottom_right_point->header.domain != domain) {
+ grn_obj_reinit(ctx, &(data->bottom_right_point_buffer), domain, GRN_BULK);
+ if (grn_obj_cast(ctx, bottom_right_point, &(data->bottom_right_point_buffer),
+ GRN_FALSE)) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: failed to cast to %s: <%.*s>",
+ process_name, domain_name,
+ (int)GRN_TEXT_LEN(bottom_right_point),
+ GRN_TEXT_VALUE(bottom_right_point));
+ return;
+ }
+ bottom_right_point = &(data->bottom_right_point_buffer);
+ }
+ data->bottom_right = GRN_GEO_POINT_VALUE_RAW(bottom_right_point);
+}
+
+static void
+in_rectangle_data_validate(grn_ctx *ctx,
+ const char *process_name,
+ in_rectangle_data *data)
+{
+ grn_geo_point *top_left, *bottom_right;
+
+ top_left = data->top_left;
+ bottom_right = data->bottom_right;
+
+ if (top_left->latitude >= GRN_GEO_MAX_LATITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: top left point's latitude is too big: "
+ "<%d>(max:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MAX_LATITUDE, top_left->latitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (top_left->latitude <= GRN_GEO_MIN_LATITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: top left point's latitude is too small: "
+ "<%d>(min:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MIN_LATITUDE, top_left->latitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (top_left->longitude >= GRN_GEO_MAX_LONGITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: top left point's longitude is too big: "
+ "<%d>(max:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MAX_LONGITUDE, top_left->longitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (top_left->longitude <= GRN_GEO_MIN_LONGITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: top left point's longitude is too small: "
+ "<%d>(min:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MIN_LONGITUDE, top_left->longitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (bottom_right->latitude >= GRN_GEO_MAX_LATITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: bottom right point's latitude is too big: "
+ "<%d>(max:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MAX_LATITUDE, bottom_right->latitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (bottom_right->latitude <= GRN_GEO_MIN_LATITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: bottom right point's latitude is too small: "
+ "<%d>(min:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MIN_LATITUDE, bottom_right->latitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (bottom_right->longitude >= GRN_GEO_MAX_LONGITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: bottom right point's longitude is too big: "
+ "<%d>(max:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MAX_LONGITUDE, bottom_right->longitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+
+ if (bottom_right->longitude <= GRN_GEO_MIN_LONGITUDE) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "%s: bottom right point's longitude is too small: "
+ "<%d>(min:%d): (%d,%d) (%d,%d)",
+ process_name,
+ GRN_GEO_MIN_LONGITUDE, bottom_right->longitude,
+ top_left->latitude, top_left->longitude,
+ bottom_right->latitude, bottom_right->longitude);
+ return;
+ }
+}
+
+static void
+in_rectangle_area_data_compute(grn_ctx *ctx,
+ grn_geo_point *top_left,
+ grn_geo_point *bottom_right,
+ in_rectangle_area_data *data)
+{
+ int latitude_distance, longitude_distance;
+ int diff_bit;
+ grn_geo_point base;
+ grn_geo_point *geo_point_input;
+ uint8_t geo_key_input[sizeof(grn_geo_point)];
+ uint8_t geo_key_base[sizeof(grn_geo_point)];
+ uint8_t geo_key_top_left[sizeof(grn_geo_point)];
+ uint8_t geo_key_bottom_right[sizeof(grn_geo_point)];
+
+ latitude_distance = top_left->latitude - bottom_right->latitude;
+ longitude_distance = bottom_right->longitude - top_left->longitude;
+ if (latitude_distance > longitude_distance) {
+ geo_point_input = bottom_right;
+ base.latitude = bottom_right->latitude;
+ base.longitude = bottom_right->longitude - longitude_distance;
+ } else {
+ geo_point_input = top_left;
+ base.latitude = top_left->latitude - latitude_distance;
+ base.longitude = top_left->longitude;
+ }
+ grn_gton(geo_key_input, geo_point_input, sizeof(grn_geo_point));
+ grn_gton(geo_key_base, &base, sizeof(grn_geo_point));
+ diff_bit = compute_diff_bit(geo_key_input, geo_key_base);
+ compute_min_and_max(&base, diff_bit, &(data->min), &(data->max));
+
+ grn_gton(geo_key_top_left, top_left, sizeof(grn_geo_point));
+ grn_gton(geo_key_bottom_right, bottom_right, sizeof(grn_geo_point));
+ data->rectangle_common_bit =
+ compute_diff_bit(geo_key_top_left, geo_key_bottom_right) - 1;
+ compute_min_and_max_key(geo_key_top_left, data->rectangle_common_bit + 1,
+ data->rectangle_common_key, NULL);
+
+#ifdef GEO_DEBUG
+ printf("base: ");
+ grn_p_geo_point(ctx, &base);
+ printf("min: ");
+ grn_p_geo_point(ctx, &(data->min));
+ printf("max: ");
+ grn_p_geo_point(ctx, &(data->max));
+ printf("top-left: ");
+ grn_p_geo_point(ctx, top_left);
+ printf("bottom-right: ");
+ grn_p_geo_point(ctx, bottom_right);
+ printf("rectangle-common-bit:%10d\n", data->rectangle_common_bit);
+ printf("distance(latitude): %10d\n", latitude_distance);
+ printf("distance(longitude): %10d\n", longitude_distance);
+#endif
+}
+
+static grn_rc
+in_rectangle_data_prepare(grn_ctx *ctx, grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ const char *process_name,
+ in_rectangle_data *data)
+{
+ if (!index) {
+ ERR(GRN_INVALID_ARGUMENT, "%s: index column is missing", process_name);
+ goto exit;
+ }
+
+ in_rectangle_data_fill(ctx, index, top_left_point, bottom_right_point,
+ process_name, data);
+ if (ctx->rc != GRN_SUCCESS) {
+ goto exit;
+ }
+
+ in_rectangle_data_validate(ctx, process_name, data);
+ if (ctx->rc != GRN_SUCCESS) {
+ goto exit;
+ }
+
+exit :
+ return ctx->rc;
+}
+
+#define SAME_BIT_P(a, b, n_bit)\
+ ((((uint8_t *)(a))[(n_bit) / 8] & (1 << (7 - ((n_bit) % 8)))) ==\
+ (((uint8_t *)(b))[(n_bit) / 8] & (1 << (7 - ((n_bit) % 8)))))
+
+#define CURSOR_ENTRY_UPDATE_STATUS(entry, name, other_key) do {\
+ if (SAME_BIT_P((entry)->key, (other_key), (entry)->target_bit)) {\
+ (entry)->status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_ ## name;\
+ } else {\
+ (entry)->status_flags &= ~GRN_GEO_CURSOR_ENTRY_STATUS_ ## name;\
+ }\
+} while (0)
+
+#define CURSOR_ENTRY_CHECK_STATUS(entry, name)\
+ ((entry)->status_flags & GRN_GEO_CURSOR_ENTRY_STATUS_ ## name)
+#define CURSOR_ENTRY_IS_INNER(entry)\
+ (((entry)->status_flags &\
+ (GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER)) ==\
+ (GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER))
+#define CURSOR_ENTRY_INCLUDED_IN_LATITUDE_DIRECTION(entry)\
+ ((entry)->status_flags &\
+ (GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_TOP_INCLUDED |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_BOTTOM_INCLUDED))
+#define CURSOR_ENTRY_INCLUDED_IN_LONGITUDE_DIRECTION(entry)\
+ ((entry)->status_flags &\
+ (GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_LEFT_INCLUDED |\
+ GRN_GEO_CURSOR_ENTRY_STATUS_RIGHT_INCLUDED))
+
+#define SET_N_BIT(a, n_bit)\
+ (((uint8_t *)(a))[((n_bit) / 8)] ^= (1 << (7 - ((n_bit) % 8))))
+
+#define N_BIT(a, n_bit)\
+ ((((uint8_t *)(a))[((n_bit) / 8)] &\
+ (1 << (7 - ((n_bit) % 8)))) >> (1 << (7 - ((n_bit) % 8))))
+
+static grn_bool
+extract_rectangle_in_area(grn_ctx *ctx,
+ grn_geo_area_type area_type,
+ const grn_geo_point *top_left,
+ const grn_geo_point *bottom_right,
+ grn_geo_point *area_top_left,
+ grn_geo_point *area_bottom_right)
+{
+ grn_bool out_of_area = GRN_FALSE;
+ grn_bool cover_all_areas = GRN_FALSE;
+
+ if ((GRN_GEO_POINT_IN_NORTH_WEST(top_left) &&
+ GRN_GEO_POINT_IN_SOUTH_EAST(bottom_right)) ||
+ (GRN_GEO_POINT_IN_NORTH_EAST(top_left) &&
+ GRN_GEO_POINT_IN_SOUTH_WEST(bottom_right))) {
+ cover_all_areas = GRN_TRUE;
+ }
+
+ switch (area_type) {
+ case GRN_GEO_AREA_NORTH_EAST :
+ if (cover_all_areas ||
+ GRN_GEO_POINT_IN_NORTH_EAST(top_left) ||
+ GRN_GEO_POINT_IN_NORTH_EAST(bottom_right)) {
+ area_top_left->latitude = MAX(top_left->latitude, 0);
+ area_bottom_right->latitude = MAX(bottom_right->latitude, 0);
+ if (GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right)) {
+ area_top_left->longitude = top_left->longitude;
+ area_bottom_right->longitude = GRN_GEO_MAX_LONGITUDE;
+ } else {
+ area_top_left->longitude = MAX(top_left->longitude, 0);
+ area_bottom_right->longitude = MAX(bottom_right->longitude, 0);
+ }
+ } else {
+ out_of_area = GRN_TRUE;
+ }
+ break;
+ case GRN_GEO_AREA_NORTH_WEST :
+ if (cover_all_areas ||
+ GRN_GEO_POINT_IN_NORTH_WEST(top_left) ||
+ GRN_GEO_POINT_IN_NORTH_WEST(bottom_right)) {
+ area_top_left->latitude = MAX(top_left->latitude, 0);
+ area_bottom_right->latitude = MAX(bottom_right->latitude, 0);
+ if (GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right)) {
+ area_top_left->longitude = GRN_GEO_MIN_LONGITUDE;
+ area_bottom_right->longitude = bottom_right->longitude;
+ } else {
+ area_top_left->longitude = MIN(top_left->longitude, -1);
+ area_bottom_right->longitude = MIN(bottom_right->longitude, -1);
+ }
+ } else {
+ out_of_area = GRN_TRUE;
+ }
+ break;
+ case GRN_GEO_AREA_SOUTH_WEST :
+ if (cover_all_areas ||
+ GRN_GEO_POINT_IN_SOUTH_WEST(top_left) ||
+ GRN_GEO_POINT_IN_SOUTH_WEST(bottom_right)) {
+ area_top_left->latitude = MIN(top_left->latitude, -1);
+ area_bottom_right->latitude = MIN(bottom_right->latitude, -1);
+ if (GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right)) {
+ area_top_left->longitude = GRN_GEO_MIN_LONGITUDE;
+ area_bottom_right->longitude = bottom_right->longitude;
+ } else {
+ area_top_left->longitude = MIN(top_left->longitude, -1);
+ area_bottom_right->longitude = MIN(bottom_right->longitude, -1);
+ }
+ } else {
+ out_of_area = GRN_TRUE;
+ }
+ break;
+ case GRN_GEO_AREA_SOUTH_EAST :
+ if (cover_all_areas ||
+ GRN_GEO_POINT_IN_SOUTH_EAST(top_left) ||
+ GRN_GEO_POINT_IN_SOUTH_EAST(bottom_right)) {
+ area_top_left->latitude = MIN(top_left->latitude, -1);
+ area_bottom_right->latitude = MIN(bottom_right->latitude, -1);
+ if (GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right)) {
+ area_top_left->longitude = top_left->longitude;
+ area_bottom_right->longitude = GRN_GEO_MAX_LONGITUDE;
+ } else {
+ area_top_left->longitude = MAX(top_left->longitude, 0);
+ area_bottom_right->longitude = MAX(bottom_right->longitude, 0);
+ }
+ } else {
+ out_of_area = GRN_TRUE;
+ }
+ break;
+ default :
+ out_of_area = GRN_TRUE;
+ break;
+ }
+
+ return out_of_area;
+}
+
+static void
+grn_geo_cursor_area_init(grn_ctx *ctx,
+ grn_geo_cursor_area *area,
+ grn_geo_area_type area_type,
+ const grn_geo_point *top_left,
+ const grn_geo_point *bottom_right)
+{
+ grn_geo_point area_top_left, area_bottom_right;
+ in_rectangle_area_data data;
+ grn_geo_cursor_entry *entry;
+ grn_bool out_of_area;
+
+ out_of_area = extract_rectangle_in_area(ctx,
+ area_type,
+ top_left,
+ bottom_right,
+ &area_top_left,
+ &area_bottom_right);
+ if (out_of_area) {
+ area->current_entry = -1;
+ return;
+ }
+
+ area->current_entry = 0;
+ memcpy(&(area->top_left), &area_top_left, sizeof(grn_geo_point));
+ memcpy(&(area->bottom_right), &area_bottom_right, sizeof(grn_geo_point));
+ grn_gton(area->top_left_key, &area_top_left, sizeof(grn_geo_point));
+ grn_gton(area->bottom_right_key, &area_bottom_right, sizeof(grn_geo_point));
+
+ entry = &(area->entries[area->current_entry]);
+ in_rectangle_area_data_compute(ctx,
+ &area_top_left,
+ &area_bottom_right,
+ &data);
+ entry->target_bit = data.rectangle_common_bit;
+ memcpy(entry->key, data.rectangle_common_key, sizeof(grn_geo_point));
+ entry->status_flags =
+ GRN_GEO_CURSOR_ENTRY_STATUS_TOP_INCLUDED |
+ GRN_GEO_CURSOR_ENTRY_STATUS_BOTTOM_INCLUDED |
+ GRN_GEO_CURSOR_ENTRY_STATUS_LEFT_INCLUDED |
+ GRN_GEO_CURSOR_ENTRY_STATUS_RIGHT_INCLUDED;
+ if (data.min.latitude == area_bottom_right.latitude &&
+ data.max.latitude == area_top_left.latitude) {
+ entry->status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER;
+ }
+ if (data.min.longitude == area_top_left.longitude &&
+ data.max.longitude == area_bottom_right.longitude) {
+ entry->status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER;
+ }
+}
+
+grn_obj *
+grn_geo_cursor_open_in_rectangle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ int offset,
+ int limit)
+{
+ grn_geo_cursor_in_rectangle *cursor = NULL;
+ in_rectangle_data data;
+
+ GRN_API_ENTER;
+ GRN_VOID_INIT(&(data.top_left_point_buffer));
+ GRN_VOID_INIT(&(data.bottom_right_point_buffer));
+ if (in_rectangle_data_prepare(ctx, index, top_left_point, bottom_right_point,
+ "geo_in_rectangle()", &data)) {
+ goto exit;
+ }
+
+ cursor = GRN_MALLOCN(grn_geo_cursor_in_rectangle, 1);
+ if (!cursor) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[geo][cursor][in-rectangle] failed to allocate memory for geo cursor");
+ goto exit;
+ }
+
+ cursor->pat = data.pat;
+ cursor->index = index;
+ memcpy(&(cursor->top_left), data.top_left, sizeof(grn_geo_point));
+ memcpy(&(cursor->bottom_right), data.bottom_right, sizeof(grn_geo_point));
+ cursor->pat_cursor = NULL;
+ cursor->ii_cursor = NULL;
+ cursor->offset = offset;
+ cursor->rest = limit;
+
+ cursor->current_area = GRN_GEO_AREA_NORTH_EAST;
+ {
+ grn_geo_area_type area_type;
+ const grn_geo_point *top_left = &(cursor->top_left);
+ const grn_geo_point *bottom_right = &(cursor->bottom_right);
+ for (area_type = GRN_GEO_AREA_NORTH_EAST;
+ area_type < GRN_GEO_AREA_LAST;
+ area_type++) {
+ grn_geo_cursor_area_init(ctx, &(cursor->areas[area_type]),
+ area_type, top_left, bottom_right);
+ }
+ }
+ {
+ const char *minimum_reduce_bit_env;
+ cursor->minimum_reduce_bit = 0;
+ minimum_reduce_bit_env = getenv("GRN_GEO_IN_RECTANGLE_MINIMUM_REDUCE_BIT");
+ if (minimum_reduce_bit_env) {
+ cursor->minimum_reduce_bit = atoi(minimum_reduce_bit_env);
+ }
+ if (cursor->minimum_reduce_bit < 1) {
+ cursor->minimum_reduce_bit = 1;
+ }
+ }
+ GRN_DB_OBJ_SET_TYPE(cursor, GRN_CURSOR_COLUMN_GEO_INDEX);
+ {
+ grn_obj *db;
+ grn_id id;
+ db = grn_ctx_db(ctx);
+ id = grn_obj_register(ctx, db, NULL, 0);
+ DB_OBJ(cursor)->header.domain = GRN_ID_NIL;
+ DB_OBJ(cursor)->range = GRN_ID_NIL;
+ grn_db_obj_init(ctx, db, id, DB_OBJ(cursor));
+ }
+
+exit :
+ grn_obj_unlink(ctx, &(data.top_left_point_buffer));
+ grn_obj_unlink(ctx, &(data.bottom_right_point_buffer));
+ GRN_API_RETURN((grn_obj *)cursor);
+}
+
+static inline grn_bool
+grn_geo_cursor_entry_next_push(grn_ctx *ctx,
+ grn_geo_cursor_in_rectangle *cursor,
+ grn_geo_cursor_entry *entry)
+{
+ grn_geo_cursor_entry *next_entry;
+ grn_geo_point entry_base;
+ grn_table_cursor *pat_cursor;
+ grn_bool pushed = GRN_FALSE;
+
+ grn_ntog((uint8_t*)(&entry_base), entry->key, sizeof(grn_geo_point));
+ pat_cursor = grn_table_cursor_open(ctx,
+ cursor->pat,
+ &entry_base,
+ entry->target_bit + 1,
+ NULL, 0,
+ 0, -1,
+ GRN_CURSOR_PREFIX|GRN_CURSOR_SIZE_BY_BIT);
+ if (pat_cursor) {
+ if (grn_table_cursor_next(ctx, pat_cursor)) {
+ grn_geo_cursor_area *area;
+ area = &(cursor->areas[cursor->current_area]);
+ next_entry = &(area->entries[++area->current_entry]);
+ memcpy(next_entry, entry, sizeof(grn_geo_cursor_entry));
+ pushed = GRN_TRUE;
+ }
+ grn_table_cursor_close(ctx, pat_cursor);
+ }
+
+ return pushed;
+}
+
+static inline grn_bool
+grn_geo_cursor_entry_next(grn_ctx *ctx,
+ grn_geo_cursor_in_rectangle *cursor,
+ grn_geo_cursor_entry *entry)
+{
+ uint8_t *top_left_key;
+ uint8_t *bottom_right_key;
+ int max_target_bit = GRN_GEO_KEY_MAX_BITS - cursor->minimum_reduce_bit;
+ grn_geo_cursor_area *area = NULL;
+
+ while (cursor->current_area < GRN_GEO_AREA_LAST) {
+ area = &(cursor->areas[cursor->current_area]);
+ if (area->current_entry >= 0) {
+ break;
+ }
+ cursor->current_area++;
+ area = NULL;
+ }
+
+ if (!area) {
+ return GRN_FALSE;
+ }
+
+ top_left_key = area->top_left_key;
+ bottom_right_key = area->bottom_right_key;
+ memcpy(entry,
+ &(area->entries[area->current_entry--]),
+ sizeof(grn_geo_cursor_entry));
+ while (GRN_TRUE) {
+ grn_geo_cursor_entry next_entry0, next_entry1;
+ grn_bool pushed = GRN_FALSE;
+
+ /*
+ top_left_key: tl
+ bottom_right_key: br
+
+ e.g.: top_left_key is at the top left sub mesh and
+ bottom_right_key is at the bottom right sub mesh.
+ top_left_key is also at the top left - bottom right
+ sub-sub mesh and
+ bottom_right_key is at the bottom right - bottom left
+ sub-sub mesh.
+
+ ^latitude +----+----+----+----+
+ | 1 |1010|1011|1110|1111|
+ | | | | | |
+ | 1 +----+----+----+----+
+ \/ 0 |1000|1001|1100|1101|
+ | | tl | | |
+ +----+----+----+----+
+ 1 |0010|0011|0110|0111|
+ | | | | |
+ 0 +----+----+----+----+
+ 0 |0000|0001|0100|0101|
+ | | | br | |
+ +----+----+----+----+
+ 0 1 0 1
+ |-------| |-------|
+ 0 1
+ <------>
+ longitude
+
+ entry.target_bit + 1 -> next_entry0
+ entry.target_bit + 1 and entry.key ^ (entry.target_bit + 1) in bit
+ -> next_entry1
+
+ entry: represents the biggest mesh.
+ (1010, 1011, 1110, 1111,
+ 1000, 1001, 1100, 1101,
+ 0010, 0011, 0110, 0111,
+ 0000, 0001, 0100, 0101)
+ next_entry0: represents bottom sub-mesh.
+ (0010, 0011, 0110, 0111,
+ 0000, 0001, 0100, 0101)
+ next_entry1: represents top sub-mesh.
+ (1010, 1011, 1110, 1111,
+ 1000, 1001, 1100, 1101)
+
+ entry->status_flags = TOP_INCLUDED |
+ BOTTOM_INCLUDED |
+ LEFT_INCLUDED |
+ RIGHT_INCLUDED
+ next_entry0->status_flags = BOTTOM_INCLUDED |
+ LEFT_INCLUDED |
+ RIGHT_INCLUDED
+ next_entry1->status_flags = TOP_INCLUDED |
+ LEFT_INCLUDED |
+ RIGHT_INCLUDED
+
+ Both next_entry1 and next_entry0 are pushed to the stack in cursor.
+ */
+
+#ifdef GEO_DEBUG
+ inspect_cursor_entry(ctx, entry);
+#endif
+
+ if (entry->target_bit >= max_target_bit) {
+#ifdef GEO_DEBUG
+ printf("%d: force stopping to reduce a mesh\n", entry->target_bit);
+#endif
+ break;
+ }
+
+ if (CURSOR_ENTRY_IS_INNER(entry)) {
+#ifdef GEO_DEBUG
+ printf("%d: inner entries\n", entry->target_bit);
+#endif
+ break;
+ }
+
+ memcpy(&next_entry0, entry, sizeof(grn_geo_cursor_entry));
+ next_entry0.target_bit++;
+ memcpy(&next_entry1, entry, sizeof(grn_geo_cursor_entry));
+ next_entry1.target_bit++;
+ SET_N_BIT(next_entry1.key, next_entry1.target_bit);
+
+#ifdef GEO_DEBUG
+ inspect_cursor_entry_targets(ctx, entry, top_left_key, bottom_right_key,
+ &next_entry0, &next_entry1);
+#endif
+
+ if ((entry->target_bit + 1) % 2 == 0) {
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, TOP_INCLUDED)) {
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry0, TOP_INCLUDED, top_left_key);
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry1, TOP_INCLUDED, top_left_key);
+ }
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, BOTTOM_INCLUDED)) {
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry0, BOTTOM_INCLUDED,
+ bottom_right_key);
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry1, BOTTOM_INCLUDED,
+ bottom_right_key);
+ }
+
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, TOP_INCLUDED) &&
+ !CURSOR_ENTRY_CHECK_STATUS(entry, BOTTOM_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(&next_entry1, TOP_INCLUDED)) {
+ next_entry0.status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER;
+ } else if (!CURSOR_ENTRY_CHECK_STATUS(entry, TOP_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(entry, BOTTOM_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(&next_entry0, BOTTOM_INCLUDED)) {
+ next_entry1.status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER;
+ }
+
+ if (CURSOR_ENTRY_INCLUDED_IN_LATITUDE_DIRECTION(&next_entry1)) {
+ if (grn_geo_cursor_entry_next_push(ctx, cursor, &next_entry1)) {
+ pushed = GRN_TRUE;
+#ifdef GEO_DEBUG
+ printf("%d: latitude: push 1\n", next_entry1.target_bit);
+#endif
+ }
+ }
+ if (CURSOR_ENTRY_INCLUDED_IN_LATITUDE_DIRECTION(&next_entry0)) {
+ if (grn_geo_cursor_entry_next_push(ctx, cursor, &next_entry0)) {
+ pushed = GRN_TRUE;
+#ifdef GEO_DEBUG
+ printf("%d: latitude: push 0\n", next_entry0.target_bit);
+#endif
+ }
+ }
+ } else {
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, RIGHT_INCLUDED)) {
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry0, RIGHT_INCLUDED,
+ bottom_right_key);
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry1, RIGHT_INCLUDED,
+ bottom_right_key);
+ }
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, LEFT_INCLUDED)) {
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry0, LEFT_INCLUDED, top_left_key);
+ CURSOR_ENTRY_UPDATE_STATUS(&next_entry1, LEFT_INCLUDED, top_left_key);
+ }
+
+ if (CURSOR_ENTRY_CHECK_STATUS(entry, LEFT_INCLUDED) &&
+ !CURSOR_ENTRY_CHECK_STATUS(entry, RIGHT_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(&next_entry0, LEFT_INCLUDED)) {
+ next_entry1.status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER;
+ } else if (!CURSOR_ENTRY_CHECK_STATUS(entry, LEFT_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(entry, RIGHT_INCLUDED) &&
+ CURSOR_ENTRY_CHECK_STATUS(&next_entry1, RIGHT_INCLUDED)) {
+ next_entry0.status_flags |= GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER;
+ }
+
+ if (CURSOR_ENTRY_INCLUDED_IN_LONGITUDE_DIRECTION(&next_entry1)) {
+ if (grn_geo_cursor_entry_next_push(ctx, cursor, &next_entry1)) {
+ pushed = GRN_TRUE;
+#ifdef GEO_DEBUG
+ printf("%d: longitude: push 1\n", next_entry1.target_bit);
+#endif
+ }
+ }
+ if (CURSOR_ENTRY_INCLUDED_IN_LONGITUDE_DIRECTION(&next_entry0)) {
+ if (grn_geo_cursor_entry_next_push(ctx, cursor, &next_entry0)) {
+ pushed = GRN_TRUE;
+#ifdef GEO_DEBUG
+ printf("%d: longitude: push 0\n", next_entry0.target_bit);
+#endif
+ }
+ }
+ }
+
+ if (pushed) {
+#ifdef GEO_DEBUG
+ int i;
+
+ printf("%d: pushed\n", entry->target_bit);
+ printf("stack:\n");
+ for (i = area->current_entry; i >= 0; i--) {
+ grn_geo_cursor_entry *stack_entry;
+ stack_entry = &(area->entries[i]);
+ printf("%2d: ", i);
+ inspect_key(ctx, stack_entry->key);
+ printf(" ");
+ print_key_mark(ctx, stack_entry->target_bit);
+ }
+#endif
+ memcpy(entry,
+ &(area->entries[area->current_entry--]),
+ sizeof(grn_geo_cursor_entry));
+#ifdef GEO_DEBUG
+ printf("%d: pop entry\n", entry->target_bit);
+#endif
+ } else {
+ break;
+ }
+ }
+
+#ifdef GEO_DEBUG
+ printf("found:\n");
+ inspect_cursor_entry(ctx, entry);
+#endif
+
+ return GRN_TRUE;
+}
+
+typedef grn_bool (*grn_geo_cursor_callback)(grn_ctx *ctx, grn_ii_posting *posting, void *user_data);
+
+static void
+grn_geo_cursor_each(grn_ctx *ctx, grn_obj *geo_cursor,
+ grn_geo_cursor_callback callback, void *user_data)
+{
+ grn_geo_cursor_in_rectangle *cursor;
+ grn_obj *pat;
+ grn_table_cursor *pat_cursor;
+ grn_ii *ii;
+ grn_ii_cursor *ii_cursor;
+ grn_ii_posting *posting = NULL;
+ grn_geo_point *current, *top_left, *bottom_right;
+ grn_id index_id;
+
+ cursor = (grn_geo_cursor_in_rectangle *)geo_cursor;
+ if (cursor->rest == 0) {
+ return;
+ }
+
+ pat = cursor->pat;
+ pat_cursor = cursor->pat_cursor;
+ ii = (grn_ii *)(cursor->index);
+ ii_cursor = cursor->ii_cursor;
+ current = &(cursor->current);
+ top_left = &(cursor->top_left);
+ bottom_right = &(cursor->bottom_right);
+
+ while (GRN_TRUE) {
+ if (!pat_cursor) {
+ grn_geo_cursor_entry entry;
+ grn_geo_point entry_base;
+ if (!grn_geo_cursor_entry_next(ctx, cursor, &entry)) {
+ cursor->rest = 0;
+ return;
+ }
+ grn_ntog((uint8_t*)(&entry_base), entry.key, sizeof(grn_geo_point));
+ if (!(cursor->pat_cursor = pat_cursor =
+ grn_table_cursor_open(ctx,
+ pat,
+ &entry_base,
+ entry.target_bit + 1,
+ NULL, 0,
+ 0, -1,
+ GRN_CURSOR_PREFIX|GRN_CURSOR_SIZE_BY_BIT))) {
+ cursor->rest = 0;
+ return;
+ }
+#ifdef GEO_DEBUG
+ inspect_mesh(ctx, &entry_base, entry.target_bit, 0);
+#endif
+ }
+
+ while (ii_cursor || (index_id = grn_table_cursor_next(ctx, pat_cursor))) {
+ if (!ii_cursor) {
+ grn_table_get_key(ctx, pat, index_id, current, sizeof(grn_geo_point));
+ if (grn_geo_in_rectangle_raw(ctx, current, top_left, bottom_right)) {
+ inspect_tid(ctx, index_id, current, 0);
+ if (!(cursor->ii_cursor = ii_cursor =
+ grn_ii_cursor_open(ctx,
+ ii,
+ index_id,
+ GRN_ID_NIL,
+ GRN_ID_MAX,
+ ii->n_elements,
+ 0))) {
+ continue;
+ }
+ } else {
+ continue;
+ }
+ }
+
+ while ((posting = grn_ii_cursor_next(ctx, ii_cursor))) {
+ if (cursor->offset == 0) {
+ grn_bool keep_each;
+ keep_each = callback(ctx, posting, user_data);
+ if (cursor->rest > 0) {
+ if (--(cursor->rest) == 0) {
+ keep_each = GRN_FALSE;
+ }
+ }
+ if (!keep_each) {
+ return;
+ }
+ } else {
+ cursor->offset--;
+ }
+ }
+ grn_ii_cursor_close(ctx, ii_cursor);
+ cursor->ii_cursor = ii_cursor = NULL;
+ }
+ grn_table_cursor_close(ctx, pat_cursor);
+ cursor->pat_cursor = pat_cursor = NULL;
+ }
+}
+
+static grn_bool
+grn_geo_cursor_next_callback(grn_ctx *ctx, grn_ii_posting *posting,
+ void *user_data)
+{
+ grn_ii_posting **return_posting = user_data;
+ *return_posting = posting;
+ return GRN_FALSE;
+}
+
+grn_posting *
+grn_geo_cursor_next(grn_ctx *ctx, grn_obj *geo_cursor)
+{
+ grn_ii_posting *posting = NULL;
+ grn_geo_cursor_each(ctx, geo_cursor, grn_geo_cursor_next_callback, &posting);
+ return (grn_posting *)posting;
+}
+
+grn_rc
+grn_geo_cursor_close(grn_ctx *ctx, grn_obj *geo_cursor)
+{
+ grn_geo_cursor_in_rectangle *cursor;
+
+ if (!geo_cursor) { return GRN_INVALID_ARGUMENT; }
+
+ cursor = (grn_geo_cursor_in_rectangle *)geo_cursor;
+ if (cursor->pat) { grn_obj_unlink(ctx, cursor->pat); }
+ if (cursor->index) { grn_obj_unlink(ctx, cursor->index); }
+ if (cursor->pat_cursor) { grn_table_cursor_close(ctx, cursor->pat_cursor); }
+ if (cursor->ii_cursor) { grn_ii_cursor_close(ctx, cursor->ii_cursor); }
+ GRN_FREE(cursor);
+
+ return GRN_SUCCESS;
+}
+
+typedef struct {
+ grn_hash *res;
+ grn_operator op;
+} grn_geo_select_in_rectangle_data;
+
+static grn_bool
+grn_geo_select_in_rectangle_callback(grn_ctx *ctx, grn_ii_posting *posting,
+ void *user_data)
+{
+ grn_geo_select_in_rectangle_data *data = user_data;
+ grn_ii_posting_add(ctx, posting, data->res, data->op);
+ return GRN_TRUE;
+}
+
+grn_rc
+grn_geo_select_in_rectangle(grn_ctx *ctx, grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point,
+ grn_obj *res, grn_operator op)
+{
+ grn_obj *cursor;
+
+ cursor = grn_geo_cursor_open_in_rectangle(ctx, index,
+ top_left_point, bottom_right_point,
+ 0, -1);
+ if (cursor) {
+ grn_geo_select_in_rectangle_data data;
+ data.res = (grn_hash *)res;
+ data.op = op;
+ grn_geo_cursor_each(ctx, cursor, grn_geo_select_in_rectangle_callback,
+ &data);
+ grn_obj_unlink(ctx, cursor);
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, op);
+ }
+
+ return ctx->rc;
+}
+
+static grn_rc
+geo_point_get(grn_ctx *ctx, grn_obj *pat, int flags, grn_geo_point *geo_point)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_id id;
+ grn_table_cursor *cursor = NULL;
+
+ cursor = grn_table_cursor_open(ctx, pat,
+ NULL, 0,
+ NULL, 0,
+ 0, 1,
+ GRN_CURSOR_BY_KEY | flags);
+ if (!cursor) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ id = grn_table_cursor_next(ctx, cursor);
+ if (id == GRN_ID_NIL) {
+ rc = GRN_END_OF_DATA;
+ } else {
+ void *key;
+ int key_size;
+ key_size = grn_table_cursor_get_key(ctx, cursor, &key);
+ memcpy(geo_point, key, key_size);
+ }
+
+exit:
+ if (cursor) {
+ grn_table_cursor_close(ctx, cursor);
+ }
+ return rc;
+}
+
+int
+grn_geo_estimate_in_rectangle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *top_left_point,
+ grn_obj *bottom_right_point)
+{
+ int n = 0;
+ int total_records;
+ grn_rc rc;
+ in_rectangle_data data;
+
+ GRN_VOID_INIT(&(data.top_left_point_buffer));
+ GRN_VOID_INIT(&(data.bottom_right_point_buffer));
+ if (in_rectangle_data_prepare(ctx, index, top_left_point, bottom_right_point,
+ "grn_geo_estimate_in_rectangle()", &data)) {
+ n = -1;
+ goto exit;
+ }
+
+ total_records = grn_table_size(ctx, data.pat);
+ if (total_records > 0) {
+ grn_geo_point min, max;
+ int select_latitude_distance, select_longitude_distance;
+ int total_latitude_distance, total_longitude_distance;
+ double select_ratio;
+ double estimated_n_records;
+ in_rectangle_area_data area_data;
+
+ rc = geo_point_get(ctx, data.pat, GRN_CURSOR_ASCENDING, &min);
+ if (!rc) {
+ rc = geo_point_get(ctx, data.pat, GRN_CURSOR_DESCENDING, &max);
+ }
+ if (rc) {
+ if (rc == GRN_END_OF_DATA) {
+ n = total_records;
+ rc = GRN_SUCCESS;
+ } else {
+ n = -1;
+ }
+ goto exit;
+ }
+
+ in_rectangle_area_data_compute(ctx,
+ data.top_left,
+ data.bottom_right,
+ &area_data);
+ select_latitude_distance =
+ abs(area_data.max.latitude - area_data.min.latitude);
+ select_longitude_distance =
+ abs(area_data.max.longitude - area_data.min.longitude);
+ total_latitude_distance = abs(max.latitude - min.latitude);
+ total_longitude_distance = abs(max.longitude - min.longitude);
+
+ select_ratio = 1.0;
+ if (select_latitude_distance < total_latitude_distance) {
+ select_ratio *= ((double)select_latitude_distance /
+ (double)total_latitude_distance);
+ }
+ if (select_longitude_distance < total_longitude_distance) {
+ select_ratio *= ((double)select_longitude_distance /
+ (double)total_longitude_distance);
+ }
+ estimated_n_records = ceil(total_records * select_ratio);
+ n = (int)estimated_n_records;
+ }
+
+exit :
+ grn_obj_unlink(ctx, &(data.top_left_point_buffer));
+ grn_obj_unlink(ctx, &(data.bottom_right_point_buffer));
+ return n;
+}
+
+grn_bool
+grn_geo_in_circle(grn_ctx *ctx, grn_obj *point, grn_obj *center,
+ grn_obj *radius_or_point,
+ grn_geo_approximate_type approximate_type)
+{
+ grn_bool r = GRN_FALSE;
+ grn_obj center_, radius_or_point_;
+ grn_id domain = point->header.domain;
+ if (domain == GRN_DB_TOKYO_GEO_POINT || domain == GRN_DB_WGS84_GEO_POINT) {
+ grn_geo_distance_raw_func distance_raw_func;
+ double d;
+ if (center->header.domain != domain) {
+ GRN_OBJ_INIT(&center_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, center, &center_, GRN_FALSE)) { goto exit; }
+ center = &center_;
+ }
+
+ distance_raw_func = grn_geo_resolve_distance_raw_func(ctx,
+ approximate_type,
+ domain);
+ if (!distance_raw_func) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "unknown approximate type: <%d>", approximate_type);
+ goto exit;
+ }
+ d = distance_raw_func(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point),
+ GRN_GEO_POINT_VALUE_RAW(center));
+ switch (radius_or_point->header.domain) {
+ case GRN_DB_INT32 :
+ r = d <= GRN_INT32_VALUE(radius_or_point);
+ break;
+ case GRN_DB_UINT32 :
+ r = d <= GRN_UINT32_VALUE(radius_or_point);
+ break;
+ case GRN_DB_INT64 :
+ r = d <= GRN_INT64_VALUE(radius_or_point);
+ break;
+ case GRN_DB_UINT64 :
+ r = d <= GRN_UINT64_VALUE(radius_or_point);
+ break;
+ case GRN_DB_FLOAT :
+ r = d <= GRN_FLOAT_VALUE(radius_or_point);
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ GRN_OBJ_INIT(&radius_or_point_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, radius_or_point, &radius_or_point_, GRN_FALSE)) { goto exit; }
+ radius_or_point = &radius_or_point_;
+ /* fallthru */
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ if (domain != radius_or_point->header.domain) { /* todo */ goto exit; }
+ r = d <= distance_raw_func(ctx,
+ GRN_GEO_POINT_VALUE_RAW(radius_or_point),
+ GRN_GEO_POINT_VALUE_RAW(center));
+ break;
+ default :
+ goto exit;
+ }
+ } else {
+ /* todo */
+ }
+exit :
+ return r;
+}
+
+grn_bool
+grn_geo_in_rectangle_raw(grn_ctx *ctx, grn_geo_point *point,
+ grn_geo_point *top_left, grn_geo_point *bottom_right)
+{
+ if (point->latitude > top_left->latitude) {
+ return GRN_FALSE;
+ }
+ if (point->latitude < bottom_right->latitude) {
+ return GRN_FALSE;
+ }
+
+ if (GRN_GEO_LONGITUDE_IS_WRAPPED(top_left, bottom_right)) {
+ if (point->longitude >= top_left->longitude) {
+ return GRN_TRUE;
+ }
+ if (point->longitude <= bottom_right->longitude) {
+ return GRN_TRUE;
+ }
+ return GRN_FALSE;
+ } else {
+ if (point->longitude < top_left->longitude) {
+ return GRN_FALSE;
+ }
+ if (point->longitude > bottom_right->longitude) {
+ return GRN_FALSE;
+ }
+ return GRN_TRUE;
+ }
+}
+
+grn_bool
+grn_geo_in_rectangle(grn_ctx *ctx, grn_obj *point,
+ grn_obj *top_left, grn_obj *bottom_right)
+{
+ grn_bool r = GRN_FALSE;
+ grn_obj top_left_, bottom_right_;
+ grn_id domain = point->header.domain;
+ if (domain == GRN_DB_TOKYO_GEO_POINT || domain == GRN_DB_WGS84_GEO_POINT) {
+ if (top_left->header.domain != domain) {
+ GRN_OBJ_INIT(&top_left_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, top_left, &top_left_, GRN_FALSE)) { goto exit; }
+ top_left = &top_left_;
+ }
+ if (bottom_right->header.domain != domain) {
+ GRN_OBJ_INIT(&bottom_right_, GRN_BULK, 0, domain);
+ if (grn_obj_cast(ctx, bottom_right, &bottom_right_, GRN_FALSE)) { goto exit; }
+ bottom_right = &bottom_right_;
+ }
+ r = grn_geo_in_rectangle_raw(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point),
+ GRN_GEO_POINT_VALUE_RAW(top_left),
+ GRN_GEO_POINT_VALUE_RAW(bottom_right));
+ } else {
+ /* todo */
+ }
+exit :
+ return r;
+}
+
+typedef enum {
+ LONGITUDE_SHORT,
+ LONGITUDE_LONG,
+} distance_type;
+
+typedef enum {
+ QUADRANT_1ST,
+ QUADRANT_2ND,
+ QUADRANT_3RD,
+ QUADRANT_4TH,
+ QUADRANT_1ST_TO_2ND,
+ QUADRANT_1ST_TO_3RD,
+ QUADRANT_1ST_TO_4TH,
+ QUADRANT_2ND_TO_1ST,
+ QUADRANT_2ND_TO_3RD,
+ QUADRANT_2ND_TO_4TH,
+ QUADRANT_3RD_TO_1ST,
+ QUADRANT_3RD_TO_2ND,
+ QUADRANT_3RD_TO_4TH,
+ QUADRANT_4TH_TO_1ST,
+ QUADRANT_4TH_TO_2ND,
+ QUADRANT_4TH_TO_3RD,
+} quadrant_type;
+
+static distance_type
+geo_longitude_distance_type(int start_longitude, int end_longitude)
+{
+ int diff_longitude;
+ int east_to_west;
+ int west_to_east;
+ if (start_longitude >= 0) {
+ diff_longitude = abs(start_longitude - end_longitude);
+ } else {
+ diff_longitude = abs(end_longitude - start_longitude);
+ }
+ east_to_west = start_longitude > 0 && end_longitude < 0;
+ west_to_east = start_longitude < 0 && end_longitude > 0;
+ if (start_longitude != end_longitude &&
+ (east_to_west || west_to_east) &&
+ diff_longitude > 180 * GRN_GEO_RESOLUTION) {
+ return LONGITUDE_LONG;
+ } else {
+ return LONGITUDE_SHORT;
+ }
+}
+
+static inline quadrant_type
+geo_quadrant_type(grn_geo_point *point1, grn_geo_point *point2)
+{
+#define QUADRANT_1ST_WITH_AXIS(point) \
+ (point->longitude >= 0) && (point->latitude >= 0)
+#define QUADRANT_2ND_WITH_AXIS(point) \
+ (point->longitude <= 0) && (point->latitude >= 0)
+#define QUADRANT_3RD_WITH_AXIS(point) \
+ (point->longitude <= 0) && (point->latitude <= 0)
+#define QUADRANT_4TH_WITH_AXIS(point) \
+ (point->longitude >= 0) && (point->latitude <= 0)
+
+ if (QUADRANT_1ST_WITH_AXIS(point1) && QUADRANT_1ST_WITH_AXIS(point2)) {
+ return QUADRANT_1ST;
+ } else if (QUADRANT_2ND_WITH_AXIS(point1) && QUADRANT_2ND_WITH_AXIS(point2)) {
+ return QUADRANT_2ND;
+ } else if (QUADRANT_3RD_WITH_AXIS(point1) && QUADRANT_3RD_WITH_AXIS(point2)) {
+ return QUADRANT_3RD;
+ } else if (QUADRANT_4TH_WITH_AXIS(point1) && QUADRANT_4TH_WITH_AXIS(point2)) {
+ return QUADRANT_4TH;
+ } else {
+ if (point1->longitude > 0 && point2->longitude < 0 &&
+ point1->latitude >= 0 && point2->latitude >= 0) {
+ return QUADRANT_1ST_TO_2ND;
+ } else if (point1->longitude < 0 && point2->longitude > 0 &&
+ point1->latitude >= 0 && point2->latitude >= 0) {
+ return QUADRANT_2ND_TO_1ST;
+ } else if (point1->longitude < 0 && point2->longitude > 0 &&
+ point1->latitude <= 0 && point2->latitude <= 0) {
+ return QUADRANT_3RD_TO_4TH;
+ } else if (point1->longitude > 0 && point2->longitude < 0 &&
+ point1->latitude <= 0 && point2->latitude <= 0) {
+ return QUADRANT_4TH_TO_3RD;
+ } else if (point1->longitude >= 0 && point2->longitude >= 0 &&
+ point1->latitude > 0 && point2->latitude < 0) {
+ return QUADRANT_1ST_TO_4TH;
+ } else if (point1->longitude >= 0 && point2->longitude >= 0 &&
+ point1->latitude < 0 && point2->latitude > 0) {
+ return QUADRANT_4TH_TO_1ST;
+ } else if (point1->longitude <= 0 && point2->longitude <= 0 &&
+ point1->latitude > 0 && point2->latitude < 0) {
+ return QUADRANT_2ND_TO_3RD;
+ } else if (point1->longitude <= 0 && point2->longitude <= 0 &&
+ point1->latitude < 0 && point2->latitude > 0) {
+ return QUADRANT_3RD_TO_2ND;
+ } else if (point1->longitude >= 0 && point2->longitude <= 0 &&
+ point1->latitude > 0 && point2->latitude < 0) {
+ return QUADRANT_1ST_TO_3RD;
+ } else if (point1->longitude <= 0 && point2->longitude >= 0 &&
+ point1->latitude < 0 && point2->latitude > 0) {
+ return QUADRANT_3RD_TO_1ST;
+ } else if (point1->longitude <= 0 && point2->longitude >= 0 &&
+ point1->latitude > 0 && point2->latitude < 0) {
+ return QUADRANT_2ND_TO_4TH;
+ } else if (point1->longitude >= 0 && point2->longitude <= 0 &&
+ point1->latitude < 0 && point2->latitude > 0) {
+ return QUADRANT_4TH_TO_2ND;
+ } else {
+ /* FIXME */
+ return QUADRANT_1ST;
+ }
+ }
+#undef QUADRANT_1ST_WITH_AXIS
+#undef QUADRANT_2ND_WITH_AXIS
+#undef QUADRANT_3RD_WITH_AXIS
+#undef QUADRANT_4TH_WITH_AXIS
+}
+
+static inline double
+geo_distance_rectangle_square_root(double start_longitude, double start_latitude,
+ double end_longitude, double end_latitude)
+{
+ double diff_longitude;
+ double x, y;
+
+ diff_longitude = end_longitude - start_longitude;
+ x = diff_longitude * cos((start_latitude + end_latitude) * 0.5);
+ y = end_latitude - start_latitude;
+ return sqrt((x * x) + (y * y));
+}
+
+static inline double
+geo_distance_rectangle_short_dist_type(quadrant_type quad_type,
+ double lng1, double lat1,
+ double lng2, double lat2)
+{
+ double distance;
+ double longitude_delta, latitude_delta;
+
+ if (quad_type == QUADRANT_1ST_TO_4TH ||
+ quad_type == QUADRANT_4TH_TO_1ST ||
+ quad_type == QUADRANT_2ND_TO_3RD ||
+ quad_type == QUADRANT_3RD_TO_2ND) {
+ longitude_delta = lng2 - lng1;
+ if (longitude_delta > 0 || longitude_delta < 0) {
+ if (lat2 > lat1) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ } else {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1,
+ lat1) * GRN_GEO_RADIUS;
+ }
+ } else {
+ latitude_delta = fabs(lat1) + fabs(lat2);
+ distance = sqrt(latitude_delta * latitude_delta) * GRN_GEO_RADIUS;
+ }
+ } else if (quad_type == QUADRANT_1ST_TO_3RD ||
+ quad_type == QUADRANT_2ND_TO_4TH) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ } else if (quad_type == QUADRANT_3RD_TO_1ST ||
+ quad_type == QUADRANT_4TH_TO_2ND) {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1,
+ lat1) * GRN_GEO_RADIUS;
+ } else if (quad_type == QUADRANT_1ST_TO_2ND ||
+ quad_type == QUADRANT_2ND_TO_1ST ||
+ quad_type == QUADRANT_3RD_TO_4TH ||
+ quad_type == QUADRANT_4TH_TO_3RD) {
+ if (lat2 > lat1) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ } else if (lat2 < lat1) {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1,
+ lat1) * GRN_GEO_RADIUS;
+ } else {
+ longitude_delta = lng2 - lng1;
+ distance = longitude_delta * cos(lat1);
+ distance = sqrt(distance * distance) * GRN_GEO_RADIUS;
+ }
+ } else {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ }
+ return distance;
+}
+
+static inline double
+geo_distance_rectangle_long_dist_type(quadrant_type quad_type,
+ double lng1, double lat1,
+ double lng2, double lat2)
+{
+#define M_2PI 6.28318530717958647692
+
+ double distance;
+
+ if (quad_type == QUADRANT_1ST_TO_2ND ||
+ quad_type == QUADRANT_4TH_TO_3RD) {
+ if (lat1 > lat2) {
+ distance = geo_distance_rectangle_square_root(lng2 + M_2PI,
+ lat2,
+ lng1,
+ lat1) * GRN_GEO_RADIUS;
+ } else {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2 + M_2PI,
+ lat2) * GRN_GEO_RADIUS;
+ }
+ } else if (quad_type == QUADRANT_2ND_TO_1ST ||
+ quad_type == QUADRANT_3RD_TO_4TH) {
+ if (lat1 > lat2) {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1 + M_2PI,
+ lat1) * GRN_GEO_RADIUS;
+ } else {
+ distance = geo_distance_rectangle_square_root(lng1 + M_2PI,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ }
+ } else if (quad_type == QUADRANT_1ST_TO_3RD) {
+ distance = geo_distance_rectangle_square_root(lng2 + M_2PI,
+ lat2,
+ lng1,
+ lat1) * GRN_GEO_RADIUS;
+ } else if (quad_type == QUADRANT_3RD_TO_1ST) {
+ distance = geo_distance_rectangle_square_root(lng1 + M_2PI,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ } else if (quad_type == QUADRANT_2ND_TO_4TH) {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1 + M_2PI,
+ lat1) * GRN_GEO_RADIUS;
+ } else if (quad_type == QUADRANT_4TH_TO_2ND) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2 + M_2PI,
+ lat2) * GRN_GEO_RADIUS;
+ } else {
+ if (lng1 > lng2) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2 + M_2PI,
+ lat2) * GRN_GEO_RADIUS;
+ } else {
+ distance = geo_distance_rectangle_square_root(lng2,
+ lat2,
+ lng1 + M_2PI,
+ lat1) * GRN_GEO_RADIUS;
+ }
+ }
+ return distance;
+#undef M_2PI
+}
+
+double
+grn_geo_distance_rectangle_raw(grn_ctx *ctx,
+ grn_geo_point *point1, grn_geo_point *point2)
+{
+
+ double lng1, lat1, lng2, lat2, distance;
+ distance_type dist_type;
+ quadrant_type quad_type;
+
+ lat1 = GRN_GEO_INT2RAD(point1->latitude);
+ lng1 = GRN_GEO_INT2RAD(point1->longitude);
+ lat2 = GRN_GEO_INT2RAD(point2->latitude);
+ lng2 = GRN_GEO_INT2RAD(point2->longitude);
+ quad_type = geo_quadrant_type(point1, point2);
+ if (quad_type <= QUADRANT_4TH) {
+ distance = geo_distance_rectangle_square_root(lng1,
+ lat1,
+ lng2,
+ lat2) * GRN_GEO_RADIUS;
+ } else {
+ dist_type = geo_longitude_distance_type(point1->longitude,
+ point2->longitude);
+ if (dist_type == LONGITUDE_SHORT) {
+ distance = geo_distance_rectangle_short_dist_type(quad_type,
+ lng1, lat1,
+ lng2, lat2);
+ } else {
+ distance = geo_distance_rectangle_long_dist_type(quad_type,
+ lng1, lat1,
+ lng2, lat2);
+ }
+ }
+ return distance;
+}
+
+double
+grn_geo_distance_sphere_raw(grn_ctx *ctx,
+ grn_geo_point *point1, grn_geo_point *point2)
+{
+ double lng1, lat1, lng2, lat2, x, y;
+
+ lat1 = GRN_GEO_INT2RAD(point1->latitude);
+ lng1 = GRN_GEO_INT2RAD(point1->longitude);
+ lat2 = GRN_GEO_INT2RAD(point2->latitude);
+ lng2 = GRN_GEO_INT2RAD(point2->longitude);
+ x = sin(fabs(lng2 - lng1) * 0.5);
+ y = sin(fabs(lat2 - lat1) * 0.5);
+ return asin(sqrt((y * y) + cos(lat1) * cos(lat2) * x * x)) * 2 * GRN_GEO_RADIUS;
+}
+
+double
+grn_geo_distance_ellipsoid_raw(grn_ctx *ctx,
+ grn_geo_point *point1, grn_geo_point *point2,
+ int c1, int c2, double c3)
+{
+ double lng1, lat1, lng2, lat2, p, q, r, m, n, x, y;
+
+ lat1 = GRN_GEO_INT2RAD(point1->latitude);
+ lng1 = GRN_GEO_INT2RAD(point1->longitude);
+ lat2 = GRN_GEO_INT2RAD(point2->latitude);
+ lng2 = GRN_GEO_INT2RAD(point2->longitude);
+ p = (lat1 + lat2) * 0.5;
+ q = (1 - c3 * sin(p) * sin(p));
+ r = sqrt(q);
+ m = c1 / (q * r);
+ n = c2 / r;
+ x = n * cos(p) * fabs(lng1 - lng2);
+ y = m * fabs(lat1 - lat2);
+ return sqrt((x * x) + (y * y));
+}
+
+double
+grn_geo_distance_ellipsoid_raw_tokyo(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2)
+{
+ return grn_geo_distance_ellipsoid_raw(ctx, point1, point2,
+ GRN_GEO_BES_C1,
+ GRN_GEO_BES_C2,
+ GRN_GEO_BES_C3);
+}
+
+double
+grn_geo_distance_ellipsoid_raw_wgs84(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2)
+{
+ return grn_geo_distance_ellipsoid_raw(ctx, point1, point2,
+ GRN_GEO_GRS_C1,
+ GRN_GEO_GRS_C2,
+ GRN_GEO_GRS_C3);
+}
+
+double
+grn_geo_distance(grn_ctx *ctx, grn_obj *point1, grn_obj *point2,
+ grn_geo_approximate_type type)
+{
+ double d = 0.0;
+
+ switch (type) {
+ case GRN_GEO_APPROXIMATE_RECTANGLE :
+ d = grn_geo_distance_rectangle(ctx, point1, point2);
+ break;
+ case GRN_GEO_APPROXIMATE_SPHERE :
+ d = grn_geo_distance_sphere(ctx, point1, point2);
+ break;
+ case GRN_GEO_APPROXIMATE_ELLIPSOID :
+ d = grn_geo_distance_ellipsoid(ctx, point1, point2);
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "unknown approximate type: <%d>", type);
+ break;
+ }
+ return d;
+}
+
+double
+grn_geo_distance_rectangle(grn_ctx *ctx, grn_obj *point1, grn_obj *point2)
+{
+ double d = 0;
+ grn_bool point1_initialized = GRN_FALSE;
+ grn_bool point2_initialized = GRN_FALSE;
+ grn_obj point1_, point2_;
+ grn_id domain1 = point1->header.domain;
+ grn_id domain2 = point2->header.domain;
+ if (domain1 == GRN_DB_TOKYO_GEO_POINT || domain1 == GRN_DB_WGS84_GEO_POINT) {
+ if (domain1 != domain2) {
+ GRN_OBJ_INIT(&point2_, GRN_BULK, 0, domain1);
+ point2_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point2, &point2_, GRN_FALSE)) { goto exit; }
+ point2 = &point2_;
+ }
+ } else if (domain2 == GRN_DB_TOKYO_GEO_POINT ||
+ domain2 == GRN_DB_WGS84_GEO_POINT) {
+ GRN_OBJ_INIT(&point1_, GRN_BULK, 0, domain2);
+ point1_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point1, &point1_, GRN_FALSE)) { goto exit; }
+ point1 = &point1_;
+ } else if ((GRN_DB_SHORT_TEXT <= domain1 && domain1 <= GRN_DB_LONG_TEXT) &&
+ (GRN_DB_SHORT_TEXT <= domain2 && domain2 <= GRN_DB_LONG_TEXT)) {
+ GRN_OBJ_INIT(&point1_, GRN_BULK, 0, GRN_DB_WGS84_GEO_POINT);
+ point1_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point1, &point1_, GRN_FALSE)) { goto exit; }
+ point1 = &point1_;
+
+ GRN_OBJ_INIT(&point2_, GRN_BULK, 0, GRN_DB_WGS84_GEO_POINT);
+ point2_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point2, &point2_, GRN_FALSE)) { goto exit; }
+ point2 = &point2_;
+ } else {
+ goto exit;
+ }
+ d = grn_geo_distance_rectangle_raw(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point1),
+ GRN_GEO_POINT_VALUE_RAW(point2));
+exit :
+ if (point1_initialized) {
+ GRN_OBJ_FIN(ctx, &point1_);
+ }
+ if (point2_initialized) {
+ GRN_OBJ_FIN(ctx, &point2_);
+ }
+ return d;
+}
+
+double
+grn_geo_distance_sphere(grn_ctx *ctx, grn_obj *point1, grn_obj *point2)
+{
+ double d = 0;
+ grn_bool point2_initialized = GRN_FALSE;
+ grn_obj point2_;
+ grn_id domain = point1->header.domain;
+ if (domain == GRN_DB_TOKYO_GEO_POINT || domain == GRN_DB_WGS84_GEO_POINT) {
+ if (point2->header.domain != domain) {
+ GRN_OBJ_INIT(&point2_, GRN_BULK, 0, domain);
+ point2_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point2, &point2_, GRN_FALSE)) { goto exit; }
+ point2 = &point2_;
+ }
+ d = grn_geo_distance_sphere_raw(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point1),
+ GRN_GEO_POINT_VALUE_RAW(point2));
+ } else {
+ /* todo */
+ }
+exit :
+ if (point2_initialized) {
+ GRN_OBJ_FIN(ctx, &point2_);
+ }
+ return d;
+}
+
+double
+grn_geo_distance_ellipsoid(grn_ctx *ctx, grn_obj *point1, grn_obj *point2)
+{
+ double d = 0;
+ grn_bool point2_initialized = GRN_FALSE;
+ grn_obj point2_;
+ grn_id domain = point1->header.domain;
+ if (domain == GRN_DB_TOKYO_GEO_POINT || domain == GRN_DB_WGS84_GEO_POINT) {
+ if (point2->header.domain != domain) {
+ GRN_OBJ_INIT(&point2_, GRN_BULK, 0, domain);
+ point2_initialized = GRN_TRUE;
+ if (grn_obj_cast(ctx, point2, &point2_, GRN_FALSE)) { goto exit; }
+ point2 = &point2_;
+ }
+ if (domain == GRN_DB_TOKYO_GEO_POINT) {
+ d = grn_geo_distance_ellipsoid_raw_tokyo(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point1),
+ GRN_GEO_POINT_VALUE_RAW(point2));
+ } else {
+ d = grn_geo_distance_ellipsoid_raw_wgs84(ctx,
+ GRN_GEO_POINT_VALUE_RAW(point1),
+ GRN_GEO_POINT_VALUE_RAW(point2));
+ }
+ } else {
+ /* todo */
+ }
+exit :
+ if (point2_initialized) {
+ GRN_OBJ_FIN(ctx, &point2_);
+ }
+ return d;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/geo.h b/storage/mroonga/vendor/groonga/lib/geo.h
new file mode 100644
index 00000000000..b1e04061876
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/geo.h
@@ -0,0 +1,207 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_GEO_H
+#define GRN_GEO_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#include "ii.h"
+#include "db.h"
+
+#if defined(WIN32) || defined(__sun)
+# define _USE_MATH_DEFINES
+# ifndef MAX
+# define MAX(a, b) ((a) > (b) ? (a) : (b))
+# endif
+
+# ifndef MIN
+# define MIN(a, b) ((a) < (b) ? (a) : (b))
+# endif
+#endif /* WIN32 or __sun */
+#include <math.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GRN_GEO_RESOLUTION 3600000
+#define GRN_GEO_RADIUS 6357303
+#define GRN_GEO_BES_C1 6334834
+#define GRN_GEO_BES_C2 6377397
+#define GRN_GEO_BES_C3 0.006674
+#define GRN_GEO_GRS_C1 6335439
+#define GRN_GEO_GRS_C2 6378137
+#define GRN_GEO_GRS_C3 0.006694
+#define GRN_GEO_INT2RAD(x) ((M_PI / (GRN_GEO_RESOLUTION * 180)) * (x))
+#define GRN_GEO_RAD2INT(x) ((int)(((GRN_GEO_RESOLUTION * 180) / M_PI) * (x)))
+
+#define GRN_GEO_MAX_LATITUDE 324000000 /* 90 * 60 * 60 * 1000 */
+#define GRN_GEO_MAX_LONGITUDE (648000000 - 1) /* 180 * 60 * 60 * 1000 - 1 */
+#define GRN_GEO_MIN_LATITUDE -GRN_GEO_MAX_LATITUDE
+#define GRN_GEO_MIN_LONGITUDE -GRN_GEO_MAX_LONGITUDE
+
+#define GRN_GEO_POINT_VALUE_RAW(obj) (grn_geo_point *)GRN_BULK_HEAD(obj)
+#define GRN_GEO_POINT_VALUE_RADIUS(obj,_latitude,_longitude) do {\
+ grn_geo_point *_val = (grn_geo_point *)GRN_BULK_HEAD(obj);\
+ _latitude = GRN_GEO_INT2RAD(_val->latitude);\
+ _longitude = GRN_GEO_INT2RAD(_val->longitude);\
+} while (0)
+
+#define GRN_GEO_KEY_MAX_BITS 64
+
+typedef enum {
+ GRN_GEO_APPROXIMATE_RECTANGLE,
+ GRN_GEO_APPROXIMATE_SPHERE,
+ GRN_GEO_APPROXIMATE_ELLIPSOID
+} grn_geo_approximate_type;
+
+typedef enum {
+ GRN_GEO_CURSOR_ENTRY_STATUS_NONE = 0,
+ GRN_GEO_CURSOR_ENTRY_STATUS_TOP_INCLUDED = 1 << 0,
+ GRN_GEO_CURSOR_ENTRY_STATUS_BOTTOM_INCLUDED = 1 << 1,
+ GRN_GEO_CURSOR_ENTRY_STATUS_LEFT_INCLUDED = 1 << 2,
+ GRN_GEO_CURSOR_ENTRY_STATUS_RIGHT_INCLUDED = 1 << 3,
+ GRN_GEO_CURSOR_ENTRY_STATUS_LATITUDE_INNER = 1 << 4,
+ GRN_GEO_CURSOR_ENTRY_STATUS_LONGITUDE_INNER = 1 << 5
+} grn_geo_cursor_entry_status_flag;
+
+typedef enum {
+ GRN_GEO_AREA_NORTH_EAST,
+ GRN_GEO_AREA_NORTH_WEST,
+ GRN_GEO_AREA_SOUTH_WEST,
+ GRN_GEO_AREA_SOUTH_EAST,
+ GRN_GEO_AREA_LAST
+} grn_geo_area_type;
+
+#define GRN_GEO_N_AREAS GRN_GEO_AREA_LAST
+
+typedef struct {
+ uint8_t key[sizeof(grn_geo_point)];
+ int target_bit;
+ int status_flags;
+} grn_geo_cursor_entry;
+
+typedef struct {
+ grn_geo_point top_left;
+ grn_geo_point bottom_right;
+ uint8_t top_left_key[sizeof(grn_geo_point)];
+ uint8_t bottom_right_key[sizeof(grn_geo_point)];
+ int current_entry;
+ grn_geo_cursor_entry entries[GRN_GEO_KEY_MAX_BITS];
+} grn_geo_cursor_area;
+
+typedef struct {
+ grn_db_obj obj;
+ grn_obj *pat;
+ grn_obj *index;
+ grn_geo_point top_left;
+ grn_geo_point bottom_right;
+ grn_geo_point current;
+ grn_table_cursor *pat_cursor;
+ grn_ii_cursor *ii_cursor;
+ int offset;
+ int rest;
+ int minimum_reduce_bit;
+ grn_geo_area_type current_area;
+ grn_geo_cursor_area areas[GRN_GEO_N_AREAS];
+} grn_geo_cursor_in_rectangle;
+
+grn_rc grn_geo_cursor_close(grn_ctx *ctx, grn_obj *geo_cursor);
+
+
+int grn_geo_table_sort(grn_ctx *ctx, grn_obj *table, int offset, int limit,
+ grn_obj *result, grn_table_sort_key *keys, int n_keys);
+
+grn_rc grn_geo_resolve_approximate_type(grn_ctx *ctx, grn_obj *type_name,
+ grn_geo_approximate_type *type);
+
+/**
+ * grn_geo_select_in_circle:
+ * @index: the index column for TokyoGeoPoint or WGS84GeoPpoint type.
+ * @center_point: the center point of the target circle. (ShortText, Text,
+ * LongText, TokyoGeoPoint or WGS84GeoPoint)
+ * @distance: the radius of the target circle (Int32,
+ * UInt32, Int64, UInt64 or Float) or the point
+ * on the circumference of the target circle. (ShortText, Text, LongText,
+ * TokyoGeoPoint or WGS84GeoPoint)
+ * @approximate_type: the approximate type to compute
+ * distance.
+ * @res: the table to store found record IDs. It must be
+ * GRN_TABLE_HASH_KEY type table.
+ * @op: the operator for matched records.
+ *
+ * It selects records that are in the circle specified by
+ * @center_point and @distance from @center_point. Records
+ * are searched by @index. Found records are added to @res
+ * table with @op operation.
+ **/
+grn_rc grn_geo_select_in_circle(grn_ctx *ctx,
+ grn_obj *index,
+ grn_obj *center_point,
+ grn_obj *distance,
+ grn_geo_approximate_type approximate_type,
+ grn_obj *res,
+ grn_operator op);
+
+grn_rc grn_selector_geo_in_circle(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op);
+grn_rc grn_selector_geo_in_rectangle(grn_ctx *ctx,
+ grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op);
+
+GRN_API grn_bool grn_geo_in_circle(grn_ctx *ctx, grn_obj *point, grn_obj *center,
+ grn_obj *radius_or_point,
+ grn_geo_approximate_type approximate_type);
+GRN_API grn_bool grn_geo_in_rectangle(grn_ctx *ctx, grn_obj *point,
+ grn_obj *top_left, grn_obj *bottom_right);
+grn_bool grn_geo_in_rectangle_raw(grn_ctx *ctx, grn_geo_point *point,
+ grn_geo_point *top_left,
+ grn_geo_point *bottom_right);
+double grn_geo_distance(grn_ctx *ctx, grn_obj *point1, grn_obj *point2,
+ grn_geo_approximate_type type);
+GRN_API double grn_geo_distance_rectangle(grn_ctx *ctx, grn_obj *point1,
+ grn_obj *point2);
+GRN_API double grn_geo_distance_sphere(grn_ctx *ctx, grn_obj *point1,
+ grn_obj *point2);
+GRN_API double grn_geo_distance_ellipsoid(grn_ctx *ctx, grn_obj *point1,
+ grn_obj *point2);
+double grn_geo_distance_rectangle_raw(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2);
+double grn_geo_distance_sphere_raw(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2);
+double grn_geo_distance_ellipsoid_raw(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2,
+ int c1, int c2, double c3);
+double grn_geo_distance_ellipsoid_raw_tokyo(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2);
+double grn_geo_distance_ellipsoid_raw_wgs84(grn_ctx *ctx,
+ grn_geo_point *point1,
+ grn_geo_point *point2);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_GEO_H */
diff --git a/storage/mroonga/vendor/groonga/lib/groonga_in.h b/storage/mroonga/vendor/groonga/lib/groonga_in.h
new file mode 100644
index 00000000000..d7ecff2808b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/groonga_in.h
@@ -0,0 +1,746 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GROONGA_IN_H
+#define GROONGA_IN_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#ifdef __cplusplus
+#define __STDC_LIMIT_MACROS
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif /* HAVE_STDLIB_H */
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif /* HAVE_STDINT_H */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif /* HAVE_SYS_PARAM_H */
+
+#ifdef HAVE_SYS_MMAN_H
+#include <sys/mman.h>
+#endif /* HAVE_SYS_MMAN_H */
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif /* HAVE_SYS_TIME_H */
+
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif /* HAVE_SYS_RESOURCE_H */
+
+#ifdef WIN32
+# define GRN_API __declspec(dllexport)
+#ifdef GROONGA_MAIN
+# define GRN_VAR __declspec(dllimport)
+#else
+# define GRN_VAR __declspec(dllexport) extern
+#endif /* GROONGA_MAIN */
+#else
+# define GRN_API
+# define GRN_VAR extern
+#endif
+
+#ifdef HAVE_OPEN
+# define GRN_OPEN(pathname, ...) open(pathname, __VA_ARGS__)
+#else
+# define GRN_OPEN(pathname, ...) _open(pathname, __VA_ARGS__)
+#endif /* HAVE_OPEN */
+
+#ifdef HAVE_CLOSE
+# define GRN_CLOSE(fd) close(fd)
+#else
+# define GRN_CLOSE(fd) _close(fd)
+#endif /* HAVE_CLOSE */
+
+#ifdef HAVE_READ
+# define GRN_READ(fd, buf, count) read(fd, buf, count)
+#else
+# define GRN_READ(fd, buf, count) _read(fd, buf, count)
+#endif /* HAVE_READ */
+
+#ifdef HAVE_WRITE
+# define GRN_WRITE(fd, buf, count) write(fd, buf, count)
+#else
+# define GRN_WRITE(fd, buf, count) _write(fd, buf, count)
+#endif /* HAVE_WRITE */
+
+#ifdef WIN32
+
+#if defined(__GNUC__) && !defined(WINVER)
+# include <w32api.h>
+# define WINVER WindowsXP
+#endif /* defined(__GNUC__) && !defined(WINVER) */
+
+#include <basetsd.h>
+#include <process.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <windows.h>
+#include <stddef.h>
+#include <windef.h>
+#include <float.h>
+#include <time.h>
+#include <sys/types.h>
+
+#ifndef __GNUC__
+# define PATH_MAX (MAX_PATH - 1)
+# ifndef __cplusplus
+# define inline _inline
+# endif
+#endif
+
+#ifndef __GNUC__
+# define snprintf(str, size, ...) _snprintf(str, size, __VA_ARGS__)
+#endif /* __GNUC__ */
+#if !defined(__GNUC__) && _MSC_VER < 1500
+# define vsnprintf(str, size, format, ap) _vsnprintf(str, size, format, ap)
+#endif /* !defined(__GNUC__) && _MSC_VER < 1500 */
+#define unlink(pathname) _unlink(pathname)
+#define lseek(fd, offset, whence) _lseek(fd, offset, whence)
+#define getpid() _getpid()
+#if !defined(__GNUC__) && _MSC_VER < 1400
+# define fstat(fd, buf) _fstat(fd, buf)
+#endif /* !defined(__GNUC__) && _MSC_VER < 1400 */
+#if !defined(strcasecmp)
+# define strcasecmp(s1, s2) _stricmp(s1, s2)
+#endif /* !defined(strcasecmp) */
+
+#ifdef __GNUC__
+#include <stdint.h>
+#else
+#define uint8_t UINT8
+#define int8_t INT8
+#define int_least8_t INT8
+#define uint_least8_t UINT8
+#define int16_t INT16
+#define uint16_t UINT16
+#define int32_t INT32
+#define uint32_t UINT32
+#define int64_t INT64
+#define uint64_t UINT64
+#define ssize_t SSIZE_T
+#define pid_t int
+#endif
+
+#undef MSG_WAITALL
+#define MSG_WAITALL 0 /* before Vista, not supported... */
+#define SHUT_RDWR SD_BOTH
+
+typedef SOCKET grn_sock;
+#define grn_sock_close(sock) closesocket(sock)
+
+#define CALLBACK __stdcall
+
+#ifndef __GNUC__
+#include <intrin.h>
+#include <sys/timeb.h>
+#include <errno.h>
+#endif
+
+#else /* WIN32 */
+
+#define GROONGA_API
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+# ifndef PATH_MAX
+# if defined(MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+# else /* MAXPATHLEN */
+# define PATH_MAX 1024
+# endif /* MAXPATHLEN */
+# endif /* PATH_MAX */
+# ifndef INT_LEAST8_MAX
+typedef char int_least8_t;
+# endif /* INT_LEAST8_MAX */
+# ifndef UINT_LEAST8_MAX
+typedef unsigned char uint_least8_t;
+# endif /* UINT_LEAST8_MAX */
+typedef int grn_sock;
+# define grn_sock_close(sock) close(sock)
+# define CALLBACK
+
+#endif /* WIN32 */
+
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif /* INT8_MAX */
+
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif /* INT8_MIN */
+
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif /* INT16_MAX */
+
+#ifndef INT16_MIN
+#define INT16_MIN (-32768)
+#endif /* INT16_MIN */
+
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif /* INT32_MAX */
+
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483648)
+#endif /* INT32_MIN */
+
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295)
+#endif /* UINT32_MAX */
+
+#ifndef INT64_MAX
+#define INT64_MAX (9223372036854775807)
+#endif /* INT64_MAX */
+
+#ifndef INT64_MIN
+#define INT64_MIN (-9223372036854775808)
+#endif /* INT64_MIN */
+
+#ifdef HAVE_PTHREAD_H
+#include <pthread.h>
+typedef pthread_t grn_thread;
+#define THREAD_CREATE(thread,func,arg) \
+ (pthread_create(&(thread), NULL, (func), (arg)))
+#define THREAD_JOIN(thread) (pthread_join(thread, NULL))
+typedef pthread_mutex_t grn_mutex;
+#define MUTEX_INIT(m) pthread_mutex_init(&m, NULL)
+#define MUTEX_LOCK(m) pthread_mutex_lock(&m)
+#define MUTEX_UNLOCK(m) pthread_mutex_unlock(&m)
+#define MUTEX_FIN(m)
+#ifdef HAVE_PTHREAD_MUTEXATTR_SETPSHARED
+# define MUTEX_INIT_SHARED(m) do {\
+ pthread_mutexattr_t mutexattr;\
+ pthread_mutexattr_init(&mutexattr);\
+ pthread_mutexattr_setpshared(&mutexattr, PTHREAD_PROCESS_SHARED);\
+ pthread_mutex_init(&m, &mutexattr);\
+} while (0)
+#else
+# define MUTEX_INIT_SHARED MUTEX_INIT
+#endif /* HAVE_PTHREAD_MUTEXATTR_SETPSHARED */
+
+typedef pthread_mutex_t grn_critical_section;
+#define CRITICAL_SECTION_INIT(cs) pthread_mutex_init(&(cs), NULL)
+#define CRITICAL_SECTION_ENTER(cs) pthread_mutex_lock(&(cs))
+#define CRITICAL_SECTION_LEAVE(cs) pthread_mutex_unlock(&(cs))
+#define CRITICAL_SECTION_FIN(cs)
+
+typedef pthread_cond_t grn_cond;
+#define COND_INIT(c) pthread_cond_init(&c, NULL)
+#define COND_SIGNAL(c) pthread_cond_signal(&c)
+#define COND_WAIT(c,m) pthread_cond_wait(&c, &m)
+#define COND_BROADCAST(c) pthread_cond_broadcast(&c)
+#ifdef HAVE_PTHREAD_CONDATTR_SETPSHARED
+# define COND_INIT_SHARED(c) do {\
+ pthread_condattr_t condattr;\
+ pthread_condattr_init(&condattr);\
+ pthread_condattr_setpshared(&condattr, PTHREAD_PROCESS_SHARED);\
+ pthread_cond_init(&c, &condattr);\
+} while (0)
+#else
+# define COND_INIT_SHARED COND_INIT
+#endif /* HAVE_PTHREAD_CONDATTR_SETPSHARE */
+
+typedef pthread_key_t grn_thread_key;
+#define THREAD_KEY_CREATE(key, destr) pthread_key_create(key, destr)
+#define THREAD_KEY_DELETE(key) pthread_key_delete(key)
+#define THREAD_SETSPECIFIC(key, value) pthread_setspecific(key, value)
+#define THREAD_GETSPECIFIC(key) pthread_getspecific(key)
+
+#if USE_UYIELD
+ extern int grn_uyield_count;
+ #define GRN_TEST_YIELD() do {\
+ if (((++grn_uyield_count) & (0x20 - 1)) == 0) {\
+ sched_yield();\
+ if(grn_uyield_count > 0x1000) {\
+ grn_uyield_count = (uint32_t)time(NULL) % 0x1000;\
+ }\
+ }\
+ } while (0)
+
+ #undef assert
+ #define assert(assert_expr) do {\
+ if (!(assert_expr)){\
+ fprintf(stderr, "assertion failed: %s\n", #assert_expr);\
+ abort();\
+ }\
+ GRN_TEST_YIELD();\
+ } while (0)
+
+ #define if(if_cond) \
+ if ((((++grn_uyield_count) & (0x100 - 1)) != 0 || (sched_yield() * 0) == 0) && (if_cond))
+ #define while(while_cond) \
+ while ((((++grn_uyield_count) & (0x100 - 1)) != 0 || (sched_yield() * 0) == 0) && (while_cond))
+
+ #if !defined(_POSIX_PRIORITY_SCHEDULING)
+ #define sched_yield() grn_nanosleep(1000000 * 20)
+ #endif
+#else /* USE_UYIELD */
+ #define GRN_TEST_YIELD() do {} while (0)
+#endif /* USE_UYIELD */
+
+#else /* HAVE_PTHREAD_H */
+
+/* todo */
+typedef int grn_thread_key;
+#define THREAD_KEY_CREATE(key,destr)
+#define THREAD_KEY_DELETE(key)
+#define THREAD_SETSPECIFIC(key)
+#define THREAD_GETSPECIFIC(key,value)
+
+#ifdef WIN32
+typedef uintptr_t grn_thread;
+#define THREAD_CREATE(thread,func,arg) \
+ (((thread)=_beginthreadex(NULL, 0, (func), (arg), 0, NULL)) == NULL)
+#define THREAD_JOIN(thread) \
+ (WaitForSingleObject((thread), INFINITE) == WAIT_FAILED)
+typedef HANDLE grn_mutex;
+#define MUTEX_INIT(m) ((m) = CreateMutex(0, FALSE, NULL))
+#define MUTEX_LOCK(m) WaitForSingleObject((m), INFINITE)
+#define MUTEX_UNLOCK(m) ReleaseMutex(m)
+#define MUTEX_FIN(m) CloseHandle(m)
+typedef CRITICAL_SECTION grn_critical_section;
+#define CRITICAL_SECTION_INIT(cs) InitializeCriticalSection(&(cs))
+#define CRITICAL_SECTION_ENTER(cs) EnterCriticalSection(&(cs))
+#define CRITICAL_SECTION_LEAVE(cs) LeaveCriticalSection(&(cs))
+#define CRITICAL_SECTION_FIN(cs) DeleteCriticalSection(&(cs))
+
+typedef struct
+{
+ int waiters_count_;
+ HANDLE waiters_count_lock_;
+ HANDLE sema_;
+ HANDLE waiters_done_;
+ size_t was_broadcast_;
+} grn_cond;
+
+#define COND_INIT(c) do { \
+ (c).waiters_count_ = 0; \
+ (c).sema_ = CreateSemaphore(NULL, 0, 0x7fffffff, NULL); \
+ MUTEX_INIT((c).waiters_count_lock_); \
+ (c).waiters_done_ = CreateEvent(NULL, FALSE, FALSE, NULL); \
+} while (0)
+
+#define COND_SIGNAL(c) do { \
+ MUTEX_LOCK((c).waiters_count_lock_); \
+ { \
+ int have_waiters = (c).waiters_count_ > 0; \
+ MUTEX_UNLOCK((c).waiters_count_lock_); \
+ if (have_waiters) { \
+ ReleaseSemaphore((c).sema_, 1, 0); \
+ } \
+ } \
+} while (0)
+
+#define COND_BROADCAST(c) do { \
+ MUTEX_LOCK((c).waiters_count_lock_); \
+ { \
+ int have_waiters = (c).waiters_count_ > 0; \
+ if ((c).waiters_count_ > 0) { \
+ (c).was_broadcast_ = 1; \
+ have_waiters = 1; \
+ } \
+ if (have_waiters) { \
+ ReleaseSemaphore((c).sema_, (c).waiters_count_, 0); \
+ MUTEX_UNLOCK((c).waiters_count_lock_); \
+ WaitForSingleObject((c).waiters_done_, INFINITE); \
+ (c).was_broadcast_ = 0; \
+ } \
+ else { \
+ MUTEX_UNLOCK((c).waiters_count_lock_); \
+ } \
+ } \
+} while (0)
+
+#define COND_WAIT(c,m) do { \
+ MUTEX_LOCK((c).waiters_count_lock_); \
+ (c).waiters_count_++; \
+ MUTEX_UNLOCK((c).waiters_count_lock_); \
+ SignalObjectAndWait((m), (c).sema_, INFINITE, FALSE); \
+ MUTEX_LOCK((c).waiters_count_lock_); \
+ (c).waiters_count_--; \
+ { \
+ int last_waiter = (c).was_broadcast_ && (c).waiters_count_ == 0; \
+ MUTEX_UNLOCK((c).waiters_count_lock_); \
+ if (last_waiter) { \
+ SignalObjectAndWait((c).waiters_done_, (m), INFINITE, FALSE); \
+ } \
+ else { \
+ WaitForSingleObject((m), FALSE); \
+ } \
+ } \
+} while (0)
+
+#else /* WIN32 */
+/* todo */
+typedef int grn_cond;
+#define COND_INIT(c) ((c) = 0)
+#define COND_SIGNAL(c)
+#define COND_WAIT(c,m) do { \
+ MUTEX_UNLOCK(m); \
+ grn_nanosleep(1000000); \
+ MUTEX_LOCK(m); \
+} while (0)
+/* todo : must be enhanced! */
+
+#endif /* WIN32 */
+
+#define MUTEX_INIT_SHARED MUTEX_INIT
+#define COND_INIT_SHARED COND_INIT
+
+#define GRN_TEST_YIELD() do {} while (0)
+
+#endif /* HAVE_PTHREAD_H */
+
+/* format string for printf */
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+# define GRN_FMT_INT32D PRId32
+# define GRN_FMT_INT32U PRIu32
+# define GRN_FMT_INT64D PRId64
+# define GRN_FMT_INT64U PRIu64
+# define GRN_FMT_LLD "lld"
+# define GRN_FMT_LLU "llu"
+#else /* HAVE_INTTYPES_H */
+# ifdef WIN32
+# define GRN_FMT_INT32D "I32d"
+# define GRN_FMT_INT32U "I32u"
+# define GRN_FMT_INT64D "I64d"
+# define GRN_FMT_INT64U "I64u"
+# define GRN_FMT_LLD "I64d"
+# define GRN_FMT_LLU "I64u"
+# else /* WIN32 */
+# define GRN_FMT_INT32D "d"
+# define GRN_FMT_INT32U "u"
+# ifdef __x86_64__
+# define GRN_FMT_INT64D "ld"
+# define GRN_FMT_INT64U "lu"
+# else /* __x86_64__ */
+# define GRN_FMT_INT64D "lld"
+# define GRN_FMT_INT64U "llu"
+# endif /* __x86_64__ */
+# define GRN_FMT_LLD "lld"
+# define GRN_FMT_LLU "llu"
+# endif /* WIN32 */
+#endif /* HAVE_INTTYPES_H */
+
+#ifdef __GNUC__
+# if (defined(__i386__) || defined(__x86_64__)) /* ATOMIC ADD */
+/*
+ * GRN_ATOMIC_ADD_EX() performs { r = *p; *p += i; } atomically.
+ */
+# define GRN_ATOMIC_ADD_EX(p, i, r) \
+ __asm__ __volatile__ ("lock xaddl %0, %1" : "=r"(r), "+m"(*p) : "0"(i))
+/*
+ * GRN_BIT_SCAN_REV() finds the most significant 1 bit of `v'. Then, `r' is set
+ * to the index of the found bit. Note that `v' must not be 0.
+ */
+# define GRN_BIT_SCAN_REV(v, r) \
+ __asm__ __volatile__ ("bsrl %1, %%eax; movl %%eax, %0" : "=r"(r) : "r"(v) : "%eax")
+/*
+ * GRN_BIT_SCAN_REV0() is similar to GRN_BIT_SCAN_REV() but if `v' is 0, `r' is
+ * set to 0.
+ */
+# define GRN_BIT_SCAN_REV0(v, r) \
+ __asm__ __volatile__ ("bsrl %1, %%eax; cmovzl %1, %%eax; movl %%eax, %0" : "=r"(r) : "r"(v) : "%eax", "cc")
+# elif (defined(__PPC__) || defined(__ppc__)) /* ATOMIC ADD */
+# define GRN_ATOMIC_ADD_EX(p,i,r) \
+ __asm__ __volatile__ ("\n1:\n\tlwarx %0, 0, %1\n\tadd %0, %0, %2\n\tstwcx. %0, 0, %1\n\tbne- 1b\n\tsub %0, %0, %2" : "=&r" (r) : "r" (p), "r" (i) : "cc", "memory")
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+# elif (defined(__sun) && defined(__SVR4)) /* ATOMIC ADD */
+# include <atomic.h>
+# define GRN_ATOMIC_ADD_EX(p,i,r) \
+ (r = atomic_add_32_nv(p, i) - i)
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+# else /* ATOMIC ADD */
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+# endif /* ATOMIC ADD */
+
+# ifdef __i386__ /* ATOMIC 64BIT SET */
+# define GRN_SET_64BIT(p,v) \
+ __asm__ __volatile__ ("\txchgl %%esi, %%ebx\n1:\n\tmovl (%0), %%eax\n\tmovl 4(%0), %%edx\n\tlock; cmpxchg8b (%0)\n\tjnz 1b\n\txchgl %%ebx, %%esi" : : "D"(p), "S"(*(((uint32_t *)&(v))+0)), "c"(*(((uint32_t *)&(v))+1)) : "ax", "dx", "memory")
+# elif defined(__x86_64__) /* ATOMIC 64BIT SET */
+# define GRN_SET_64BIT(p,v) \
+ (*(p) = (v))
+# elif (defined(__sun) && defined(__SVR4)) /* ATOMIC 64BIT SET */
+/* todo */
+# define GRN_SET_64BIT(p,v) \
+ (void)atomic_swap_64(p, v)
+# elif defined(__ATOMIC_SEQ_CST) /* GCC atomic builtins */
+# define GRN_SET_64BIT(p,v) \
+ __atomic_store_n(p, v, __ATOMIC_SEQ_CST)
+# endif /* ATOMIC 64BIT SET */
+
+# ifdef HAVE_MKOSTEMP
+# define GRN_MKOSTEMP(template,flags,mode) mkostemp(template,flags)
+# else /* HAVE_MKOSTEMP */
+# define GRN_MKOSTEMP(template,flags,mode) \
+ (mktemp(template), GRN_OPEN((template),flags,mode))
+# endif /* HAVE_MKOSTEMP */
+
+#elif (defined(WIN32) || defined (_WIN64)) /* __GNUC__ */
+
+# define GRN_ATOMIC_ADD_EX(p,i,r) \
+ ((r) = (uint32_t)InterlockedExchangeAdd((int32_t *)(p), (int32_t)(i)))
+# if defined(_WIN64) /* ATOMIC 64BIT SET */
+# define GRN_SET_64BIT(p,v) \
+ (*(p) = (v))
+# else /* ATOMIC 64BIT SET */
+# define GRN_SET_64BIT(p,v) do {\
+ uint32_t v1, v2; \
+ uint64_t *p2= (p); \
+ v1 = *(((uint32_t *)&(v))+0);\
+ v2 = *(((uint32_t *)&(v))+1);\
+ __asm _set_loop: \
+ __asm mov esi, p2 \
+ __asm mov ebx, v1 \
+ __asm mov ecx, v2 \
+ __asm mov eax, dword ptr [esi] \
+ __asm mov edx, dword ptr [esi + 4] \
+ __asm lock cmpxchg8b qword ptr [esi] \
+ __asm jnz _set_loop \
+} while (0)
+/* TODO: use _InterlockedCompareExchange64 or inline asm */
+# endif /* ATOMIC 64BIT SET */
+
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+
+# define GRN_MKOSTEMP(template,flags,mode) \
+ (mktemp(template), GRN_OPEN((template),((flags)|O_BINARY),mode))
+
+#else /* __GNUC__ */
+
+# if (defined(__sun) && defined(__SVR4)) /* ATOMIC ADD */
+# define __FUNCTION__ ""
+# include <atomic.h>
+# define GRN_ATOMIC_ADD_EX(p,i,r) \
+ (r = atomic_add_32_nv(p, i) - i)
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+/* todo */
+# define GRN_SET_64BIT(p,v) \
+ (void)atomic_swap_64(p, v)
+# endif /* ATOMIC ADD */
+/* todo */
+# define GRN_BIT_SCAN_REV(v,r) for (r = 31; r && !((1 << r) & v); r--)
+# define GRN_BIT_SCAN_REV0(v,r) GRN_BIT_SCAN_REV(v,r)
+
+# define GRN_MKOSTEMP(template,flags,mode) \
+ (mktemp(template), GRN_OPEN((template),flags,mode))
+
+#endif /* __GNUC__ */
+
+typedef uint8_t byte;
+
+#define GRN_ID_WIDTH 30
+
+#ifdef __GNUC__
+inline static int
+grn_str_greater(const uint8_t *ap, uint32_t as, const uint8_t *bp, uint32_t bs)
+{
+ for (;; ap++, bp++, as--, bs--) {
+ if (!as) { return 0; }
+ if (!bs) { return 1; }
+ if (*ap < *bp) { return 0; }
+ if (*ap > *bp) { return 1; }
+ }
+}
+#else /* __GNUC__ */
+# define grn_str_greater(ap,as,bp,bs)\
+ (((as) > (bs)) ? (memcmp((ap), (bp), (bs)) >= 0) : (memcmp((ap), (bp), (as)) > 0))
+#endif /* __GNUC__ */
+
+#ifdef WORDS_BIGENDIAN
+# define grn_hton(buf,key,size) do {\
+ uint32_t size_ = (uint32_t)size;\
+ uint8_t *buf_ = (uint8_t *)buf;\
+ uint8_t *key_ = (uint8_t *)key;\
+ while (size_--) { *buf_++ = *key_++; }\
+} while (0)
+# define grn_ntohi(buf,key,size) do {\
+ uint32_t size_ = (uint32_t)size;\
+ uint8_t *buf_ = (uint8_t *)buf;\
+ uint8_t *key_ = (uint8_t *)key;\
+ if (size_) { *buf_++ = 0x80 ^ *key_++; size_--; }\
+ while (size_) { *buf_++ = *key_++; size_--; }\
+} while (0)
+#else /* WORDS_BIGENDIAN */
+# define grn_hton(buf,key,size) do {\
+ uint32_t size_ = (uint32_t)size;\
+ uint8_t *buf_ = (uint8_t *)buf;\
+ uint8_t *key_ = (uint8_t *)key + size;\
+ while (size_--) { *buf_++ = *(--key_); }\
+} while (0)
+# define grn_ntohi(buf,key,size) do {\
+ uint32_t size_ = (uint32_t)size;\
+ uint8_t *buf_ = (uint8_t *)buf;\
+ uint8_t *key_ = (uint8_t *)key + size;\
+ while (size_ > 1) { *buf_++ = *(--key_); size_--; }\
+ if (size_) { *buf_ = 0x80 ^ *(--key_); } \
+} while (0)
+#endif /* WORDS_BIGENDIAN */
+#define grn_ntoh(buf,key,size) grn_hton(buf,key,size)
+
+#ifndef __GNUC_PREREQ
+# if defined(__GNUC__) && defined(__GNUC_MINOR__)
+# define __GNUC_PREREQ(maj, min) \
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# else
+# define __GNUC_PREREQ(maj, min) 0
+# endif /* defined(__GNUC__) && defined(__GNUC_MINOR__) */
+#endif /* __GNUC_PREREQ */
+
+#ifdef _MSC_VER
+# define grn_bswap_uint64(in, out) ((out) = _byteswap_uint64(in))
+#else /* _MSC_VER */
+# if defined(__GNUC__) && __GNUC_PREREQ(4, 3)
+# define grn_bswap_uint64(in, out) ((out) = __builtin_bswap64(in))
+# else /* defined(__GNUC__) && __GNUC_PREREQ(4, 3) */
+# define grn_bswap_uint64(in, out) do {\
+ uint64_t temp_ = (in);\
+ (out) = (temp_ << 56) |\
+ ((temp_ & (0xFFULL << 8)) << 40) |\
+ ((temp_ & (0xFFULL << 16)) << 24) |\
+ ((temp_ & (0xFFULL << 24)) << 8) |\
+ ((temp_ & (0xFFULL << 32)) >> 8) |\
+ ((temp_ & (0xFFULL << 40)) >> 24) |\
+ ((temp_ & (0xFFULL << 48)) >> 40) |\
+ (temp_ >> 56);\
+} while (0)
+# endif /* __GNUC__ */
+#endif /* _MSC_VER */
+
+#ifdef WORDS_BIGENDIAN
+# define grn_hton_uint64(in, out) ((out) = (in))
+#else /* WORDS_BIGENDIAN */
+# define grn_hton_uint64(in, out) grn_bswap_uint64(in, out)
+#endif /* WORDS_BIGENDIAN */
+#define grn_ntoh_uint64(in, out) grn_hton_uint64(in, out)
+
+#define grn_gton(keybuf,key,size) do {\
+ const grn_geo_point *point_ = (const grn_geo_point *)key;\
+ uint64_t la_ = (uint32_t)point_->latitude;\
+ uint64_t lo_ = (uint32_t)point_->longitude;\
+ uint64_t result_;\
+ la_ = (la_ | (la_ << 16)) & 0x0000FFFF0000FFFFULL;\
+ la_ = (la_ | (la_ << 8)) & 0x00FF00FF00FF00FFULL;\
+ la_ = (la_ | (la_ << 4)) & 0x0F0F0F0F0F0F0F0FULL;\
+ la_ = (la_ | (la_ << 2)) & 0x3333333333333333ULL;\
+ la_ = (la_ | (la_ << 1)) & 0x5555555555555555ULL;\
+ lo_ = (lo_ | (lo_ << 16)) & 0x0000FFFF0000FFFFULL;\
+ lo_ = (lo_ | (lo_ << 8)) & 0x00FF00FF00FF00FFULL;\
+ lo_ = (lo_ | (lo_ << 4)) & 0x0F0F0F0F0F0F0F0FULL;\
+ lo_ = (lo_ | (lo_ << 2)) & 0x3333333333333333ULL;\
+ lo_ = (lo_ | (lo_ << 1)) & 0x5555555555555555ULL;\
+ result_ = (la_ << 1) | lo_;\
+ grn_hton_uint64(result_, result_);\
+ memcpy(keybuf, &result_, sizeof(result_));\
+} while (0)
+
+#define grn_ntog(keybuf,key,size) do {\
+ grn_geo_point *point_ = (grn_geo_point *)keybuf;\
+ uint64_t key_ = *(const uint64_t *)key;\
+ uint64_t la_, lo_;\
+ grn_ntoh_uint64(key_, key_);\
+ la_ = (key_ >> 1) & 0x5555555555555555ULL;\
+ lo_ = key_ & 0x5555555555555555ULL;\
+ la_ = (la_ | (la_ >> 1)) & 0x3333333333333333ULL;\
+ la_ = (la_ | (la_ >> 2)) & 0x0F0F0F0F0F0F0F0FULL;\
+ la_ = (la_ | (la_ >> 4)) & 0x00FF00FF00FF00FFULL;\
+ la_ = (la_ | (la_ >> 8)) & 0x0000FFFF0000FFFFULL;\
+ la_ = (la_ | (la_ >> 16)) & 0x00000000FFFFFFFFULL;\
+ lo_ = (lo_ | (lo_ >> 1)) & 0x3333333333333333ULL;\
+ lo_ = (lo_ | (lo_ >> 2)) & 0x0F0F0F0F0F0F0F0FULL;\
+ lo_ = (lo_ | (lo_ >> 4)) & 0x00FF00FF00FF00FFULL;\
+ lo_ = (lo_ | (lo_ >> 8)) & 0x0000FFFF0000FFFFULL;\
+ lo_ = (lo_ | (lo_ >> 16)) & 0x00000000FFFFFFFFULL;\
+ point_->latitude = la_;\
+ point_->longitude = lo_;\
+} while (0)
+
+#ifdef HAVE__STRTOUI64
+# define strtoull(nptr,endptr,base) _strtoui64(nptr,endptr,base)
+#endif /* HAVE__STRTOUI64 */
+
+#ifdef USE_FUTEX
+# include <linux/futex.h>
+# include <sys/syscall.h>
+
+# define GRN_FUTEX_WAIT(p) do {\
+ int err;\
+ struct timespec timeout = {1, 0};\
+ while (1) {\
+ if (!(err = syscall(SYS_futex, p, FUTEX_WAIT, *p, &timeout))) {\
+ break;\
+ }\
+ if (err == ETIMEDOUT) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "timeout in GRN_FUTEX_WAIT(%p)", p);\
+ break;\
+ } else if (err != EWOULDBLOCK) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "error %d in GRN_FUTEX_WAIT(%p)", err);\
+ break;\
+ }\
+ }\
+} while(0)
+
+# define GRN_FUTEX_WAKE(p) syscall(SYS_futex, p, FUTEX_WAKE, 1)
+#else /* USE_FUTEX */
+# define GRN_FUTEX_WAIT(p) grn_nanosleep(1000000)
+# define GRN_FUTEX_WAKE(p)
+#endif /* USE_FUTEX */
+
+#ifndef HOST_NAME_MAX
+# ifdef _POSIX_HOST_NAME_MAX
+# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
+# else /* POSIX_HOST_NAME_MAX */
+# define HOST_NAME_MAX 128
+# endif /* POSIX_HOST_NAME_MAX */
+#endif /* HOST_NAME_MAX */
+
+GRN_API void grn_sleep(uint32_t seconds);
+GRN_API void grn_nanosleep(uint64_t nanoseconds);
+
+#ifndef GROONGA_H
+# include "groonga.h"
+#endif /* GROONGA_H */
+
+#endif /* GROONGA_IN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/hash.c b/storage/mroonga/vendor/groonga/lib/hash.c
new file mode 100644
index 00000000000..fa5854a6a93
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/hash.c
@@ -0,0 +1,3348 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "hash.h"
+#include "output.h"
+#include <string.h>
+#include <limits.h>
+
+#include "store.h"
+#include "normalizer_in.h"
+
+/* grn_tiny_array */
+
+/* Requirements: id != GRN_ID_NIL. */
+inline static int
+grn_tiny_array_get_block_id(grn_id id)
+{
+ int most_significant_one_bit_offset;
+ GRN_BIT_SCAN_REV(id, most_significant_one_bit_offset);
+ return most_significant_one_bit_offset >> GRN_TINY_ARRAY_FACTOR;
+}
+
+/* Requirements: id != GRN_ID_NIL. */
+inline static void *
+grn_tiny_array_get(grn_tiny_array *array, grn_id id) {
+ const int block_id = grn_tiny_array_get_block_id(id);
+ uint8_t * const block = (uint8_t *)array->blocks[block_id];
+ if (block) {
+ const size_t offset = GRN_TINY_ARRAY_GET_OFFSET(block_id);
+ return block + (id - offset) * array->element_size;
+ }
+ return NULL;
+}
+
+/* Requirements: id != GRN_ID_NIL. */
+inline static void *
+grn_tiny_array_put(grn_tiny_array *array, grn_id id) {
+ const int block_id = grn_tiny_array_get_block_id(id);
+ void ** const block = &array->blocks[block_id];
+ const size_t offset = GRN_TINY_ARRAY_GET_OFFSET(block_id);
+ if (!*block) {
+ grn_ctx * const ctx = array->ctx;
+ if (array->flags & GRN_TINY_ARRAY_THREADSAFE) {
+ CRITICAL_SECTION_ENTER(array->lock);
+ }
+ if (!*block) {
+ const size_t block_size =
+ GRN_TINY_ARRAY_GET_BLOCK_SIZE(block_id) * array->element_size;
+ if (array->flags & GRN_TINY_ARRAY_USE_MALLOC) {
+ if (array->flags & GRN_TINY_ARRAY_CLEAR) {
+ *block = GRN_CALLOC(block_size);
+ } else {
+ *block = GRN_MALLOC(block_size);
+ }
+ } else {
+ *block = GRN_CTX_ALLOC(ctx, block_size);
+ }
+ }
+ if (array->flags & GRN_TINY_ARRAY_THREADSAFE) {
+ CRITICAL_SECTION_LEAVE(array->lock);
+ }
+ if (!*block) {
+ return NULL;
+ }
+ }
+ if (id > array->max) {
+ array->max = id;
+ }
+ return (uint8_t *)*block + (id - offset) * array->element_size;
+}
+
+inline static void *
+grn_tiny_array_at_inline(grn_tiny_array *array, grn_id id)
+{
+ return id ? grn_tiny_array_put(array, id) : NULL;
+}
+
+inline static void *
+grn_tiny_array_next(grn_tiny_array *array)
+{
+ return grn_tiny_array_put(array, array->max + 1);
+}
+
+void
+grn_tiny_array_init(grn_ctx *ctx, grn_tiny_array *array,
+ uint16_t element_size, uint16_t flags)
+{
+ array->ctx = ctx;
+ array->max = 0;
+ array->element_size = element_size;
+ array->flags = flags;
+ memset(array->blocks, 0, sizeof(array->blocks));
+ if (flags & GRN_TINY_ARRAY_THREADSAFE) {
+ CRITICAL_SECTION_INIT(array->lock);
+ }
+}
+
+void
+grn_tiny_array_fin(grn_tiny_array *array)
+{
+ int block_id;
+ grn_ctx * const ctx = array->ctx;
+ for (block_id = 0; block_id < GRN_TINY_ARRAY_NUM_BLOCKS; block_id++) {
+ if (array->blocks[block_id]) {
+ if (array->flags & GRN_TINY_ARRAY_USE_MALLOC) {
+ GRN_FREE(array->blocks[block_id]);
+ } else {
+ GRN_CTX_FREE(ctx, array->blocks[block_id]);
+ }
+ array->blocks[block_id] = NULL;
+ }
+ }
+}
+
+void *
+grn_tiny_array_at(grn_tiny_array *array, grn_id id)
+{
+ return grn_tiny_array_at_inline(array, id);
+}
+
+grn_id
+grn_tiny_array_id(grn_tiny_array *array, const void *element_address)
+{
+ const uint8_t * const ptr = (const uint8_t *)element_address;
+ uint32_t block_id, offset = 1;
+ for (block_id = 0; block_id < GRN_TINY_ARRAY_NUM_BLOCKS; block_id++) {
+ const uint32_t block_size = GRN_TINY_ARRAY_GET_BLOCK_SIZE(block_id);
+ const uint8_t * const block = (const uint8_t *)array->blocks[block_id];
+ if (block) {
+ if (block <= ptr && ptr < (block + block_size * array->element_size)) {
+ return offset + ((ptr - block) / array->element_size);
+ }
+ }
+ offset += block_size;
+ }
+ return GRN_ID_NIL;
+}
+
+/* grn_tiny_bitmap */
+
+static void
+grn_tiny_bitmap_init(grn_ctx *ctx, grn_tiny_bitmap *bitmap)
+{
+ bitmap->ctx = ctx;
+ memset(bitmap->blocks, 0, sizeof(bitmap->blocks));
+}
+
+static void
+grn_tiny_bitmap_fin(grn_tiny_bitmap *bitmap)
+{
+ int block_id;
+ grn_ctx * const ctx = bitmap->ctx;
+ for (block_id = 0; block_id < GRN_TINY_ARRAY_NUM_BLOCKS; block_id++) {
+ if (bitmap->blocks[block_id]) {
+ GRN_CTX_FREE(ctx, bitmap->blocks[block_id]);
+ bitmap->blocks[block_id] = NULL;
+ }
+ }
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+inline static uint8_t *
+grn_tiny_bitmap_get_byte(grn_tiny_bitmap *bitmap, grn_id bit_id) {
+ const uint32_t byte_id = (bit_id >> 3) + 1;
+ const int block_id = grn_tiny_array_get_block_id(byte_id);
+ uint8_t * const block = (uint8_t *)bitmap->blocks[block_id];
+ if (block) {
+ const size_t offset = GRN_TINY_ARRAY_GET_OFFSET(block_id);
+ return block + byte_id - offset;
+ }
+ return NULL;
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+inline static uint8_t *
+grn_tiny_bitmap_put_byte(grn_tiny_bitmap *bitmap, grn_id bit_id) {
+ const uint32_t byte_id = (bit_id >> 3) + 1;
+ const int block_id = grn_tiny_array_get_block_id(byte_id);
+ void ** const block = &bitmap->blocks[block_id];
+ const size_t offset = GRN_TINY_ARRAY_GET_OFFSET(block_id);
+ if (!*block) {
+ grn_ctx * const ctx = bitmap->ctx;
+ *block = GRN_CTX_ALLOC(ctx, GRN_TINY_ARRAY_GET_BLOCK_SIZE(block_id));
+ if (!*block) {
+ return NULL;
+ }
+ }
+ return (uint8_t *)*block + byte_id - offset;
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+/* Return value: 1/0 on success, -1 on failure. */
+inline static int
+grn_tiny_bitmap_get(grn_tiny_bitmap *bitmap, grn_id bit_id)
+{
+ uint8_t * const ptr = grn_tiny_bitmap_get_byte(bitmap, bit_id);
+ return ptr ? ((*ptr >> (bit_id & 7)) & 1) : -1;
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+/* Return value: 1/0 on success, -1 on failure. */
+/* Note: A bitmap is extended if needed. */
+inline static int
+grn_tiny_bitmap_put(grn_tiny_bitmap *bitmap, grn_id bit_id)
+{
+ uint8_t * const ptr = grn_tiny_bitmap_put_byte(bitmap, bit_id);
+ return ptr ? ((*ptr >> (bit_id & 7)) & 1) : -1;
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+inline static uint8_t *
+grn_tiny_bitmap_get_and_set(grn_tiny_bitmap *bitmap, grn_id bit_id,
+ grn_bool bit)
+{
+ uint8_t * const ptr = grn_tiny_bitmap_get_byte(bitmap, bit_id);
+ if (ptr) {
+ /* This branch will be removed because the given `bit' is constant. */
+ if (bit) {
+ *ptr |= 1 << (bit_id & 7);
+ } else {
+ *ptr &= ~(1 << (bit_id & 7));
+ }
+ }
+ return ptr;
+}
+
+/* Requirements: bit_id != GRN_ID_NIL. */
+/* Note: A bitmap is extended if needed. */
+inline static uint8_t *
+grn_tiny_bitmap_put_and_set(grn_tiny_bitmap *bitmap, grn_id bit_id,
+ grn_bool bit)
+{
+ uint8_t * const ptr = grn_tiny_bitmap_put_byte(bitmap, bit_id);
+ if (ptr) {
+ /* This branch will be removed because the given `bit' is constant. */
+ if (bit) {
+ *ptr |= 1 << (bit_id & 7);
+ } else {
+ *ptr &= ~(1 << (bit_id & 7));
+ }
+ }
+ return ptr;
+}
+
+/* grn_io_array */
+
+#define GRN_ARRAY_MAX (GRN_ID_MAX - 8)
+
+inline static void *
+grn_io_array_at_inline(grn_ctx *ctx, grn_io *io, uint32_t segment_id,
+ uint32_t offset, int flags)
+{
+ void *ptr;
+ GRN_IO_ARRAY_AT(io, segment_id, offset, &flags, ptr);
+ return ptr;
+}
+
+/*
+ * grn_io_array_bit_at() returns 1/0 on success, -1 on failure.
+ */
+inline static int
+grn_io_array_bit_at(grn_ctx *ctx, grn_io *io,
+ uint32_t segment_id, uint32_t offset)
+{
+ uint8_t * const ptr = (uint8_t *)grn_io_array_at_inline(
+ ctx, io, segment_id, (offset >> 3) + 1, 0);
+ return ptr ? ((*ptr >> (offset & 7)) & 1) : -1;
+}
+
+/*
+ * The following functions, grn_io_array_bit_*(), return a non-NULL pointer on
+ * success, a NULL pointer on failure.
+ */
+inline static void *
+grn_io_array_bit_on(grn_ctx *ctx, grn_io *io,
+ uint32_t segment_id, uint32_t offset)
+{
+ uint8_t * const ptr = (uint8_t *)grn_io_array_at_inline(
+ ctx, io, segment_id, (offset >> 3) + 1, GRN_TABLE_ADD);
+ if (ptr) {
+ *ptr |= 1 << (offset & 7);
+ }
+ return ptr;
+}
+
+inline static void *
+grn_io_array_bit_off(grn_ctx *ctx, grn_io *io,
+ uint32_t segment_id, uint32_t offset)
+{
+ uint8_t * const ptr = (uint8_t *)grn_io_array_at_inline(
+ ctx, io, segment_id, (offset >> 3) + 1, GRN_TABLE_ADD);
+ if (ptr) {
+ *ptr &= ~(1 << (offset & 7));
+ }
+ return ptr;
+}
+
+inline static void *
+grn_io_array_bit_flip(grn_ctx *ctx, grn_io *io,
+ uint32_t segment_id, uint32_t offset)
+{
+ uint8_t * const ptr = (uint8_t *)grn_io_array_at_inline(
+ ctx, io, segment_id, (offset >> 3) + 1, GRN_TABLE_ADD);
+ if (ptr) {
+ *ptr ^= 1 << (offset & 7);
+ }
+ return ptr;
+}
+
+/* grn_table_queue */
+
+static void
+grn_table_queue_lock_init(grn_ctx *ctx, grn_table_queue *queue)
+{
+ MUTEX_INIT_SHARED(queue->mutex);
+ COND_INIT_SHARED(queue->cond);
+}
+
+static void
+grn_table_queue_init(grn_ctx *ctx, grn_table_queue *queue)
+{
+ queue->head = 0;
+ queue->tail = 0;
+ queue->cap = GRN_ARRAY_MAX;
+ queue->unblock_requested = GRN_FALSE;
+ grn_table_queue_lock_init(ctx, queue);
+}
+
+uint32_t
+grn_table_queue_size(grn_table_queue *queue)
+{
+ return (queue->head < queue->tail)
+ ? 2 * queue->cap + queue->head - queue->tail
+ : queue->head - queue->tail;
+}
+
+void
+grn_table_queue_head_increment(grn_table_queue *queue)
+{
+ if (queue->head == 2 * queue->cap) {
+ queue->head = 1;
+ } else {
+ queue->head++;
+ }
+}
+
+void
+grn_table_queue_tail_increment(grn_table_queue *queue)
+{
+ if (queue->tail == 2 * queue->cap) {
+ queue->tail = 1;
+ } else {
+ queue->tail++;
+ }
+}
+
+grn_id
+grn_table_queue_head(grn_table_queue *queue)
+{
+ return queue->head > queue->cap
+ ? queue->head - queue->cap
+ : queue->head;
+}
+
+grn_id
+grn_table_queue_tail(grn_table_queue *queue)
+{
+ return queue->tail > queue->cap
+ ? queue->tail - queue->cap
+ : queue->tail;
+}
+
+/* grn_array */
+
+#define GRN_ARRAY_SEGMENT_SIZE 0x400000
+
+/* Header of grn_io-based grn_array. */
+struct grn_array_header {
+ uint32_t flags;
+ uint32_t curr_rec;
+ uint32_t value_size;
+ uint32_t n_entries;
+ uint32_t n_garbages;
+ grn_id garbages;
+ uint32_t lock;
+ uint32_t reserved[9];
+ grn_table_queue queue;
+};
+
+/*
+ * A grn_io-based grn_array consists of the following 2 segments.
+ * GRN_ARRAY_VALUE_SEGMENT: stores values.
+ * GRN_ARRAY_BITMAP_SEGMENT: stores whether entries are valid or not.
+ */
+enum {
+ GRN_ARRAY_VALUE_SEGMENT = 0,
+ GRN_ARRAY_BITMAP_SEGMENT = 1
+};
+
+inline static grn_bool
+grn_array_is_io_array(grn_array *array)
+{
+ return array->io != NULL;
+}
+
+inline static void *
+grn_array_io_entry_at(grn_ctx *ctx, grn_array *array, grn_id id, int flags)
+{
+ return grn_io_array_at_inline(ctx, array->io, GRN_ARRAY_VALUE_SEGMENT, id, flags);
+}
+
+inline static void *
+grn_array_entry_at(grn_ctx *ctx, grn_array *array, grn_id id, int flags)
+{
+ if (grn_array_is_io_array(array)) {
+ return grn_array_io_entry_at(ctx, array, id, flags);
+ } else {
+ return grn_tiny_array_at_inline(&array->array, id);
+ }
+}
+
+/* grn_array_bitmap_at() returns 1/0 on success, -1 on failure. */
+inline static int
+grn_array_bitmap_at(grn_ctx *ctx, grn_array *array, grn_id id)
+{
+ if (grn_array_is_io_array(array)) {
+ return grn_io_array_bit_at(ctx, array->io, GRN_ARRAY_BITMAP_SEGMENT, id);
+ } else {
+ return grn_tiny_bitmap_put(&array->bitmap, id);
+ }
+}
+
+static grn_rc
+grn_array_init_tiny_array(grn_ctx *ctx, grn_array *array, const char *path,
+ uint32_t value_size, uint32_t flags)
+{
+ if (path) {
+ ERR(GRN_INVALID_ARGUMENT, "failed to create tiny array");
+ return ctx->rc;
+ }
+ array->obj.header.flags = flags;
+ array->ctx = ctx;
+ array->value_size = value_size;
+ array->n_keys = 0;
+ array->keys = NULL;
+ array->n_garbages = &array->n_garbages_buf;
+ array->n_entries = &array->n_entries_buf;
+ array->n_garbages_buf = 0;
+ array->n_entries_buf = 0;
+ array->io = NULL;
+ array->garbages = GRN_ID_NIL;
+ grn_tiny_array_init(ctx, &array->array, value_size, GRN_TINY_ARRAY_CLEAR);
+ grn_tiny_bitmap_init(ctx, &array->bitmap);
+ return GRN_SUCCESS;
+}
+
+static grn_io *
+grn_array_create_io_array(grn_ctx *ctx, const char *path, uint32_t value_size)
+{
+ uint32_t w_of_element = 0;
+ grn_io_array_spec array_spec[2];
+
+ while ((1U << w_of_element) < value_size) {
+ w_of_element++;
+ }
+
+ array_spec[GRN_ARRAY_VALUE_SEGMENT].w_of_element = w_of_element;
+ array_spec[GRN_ARRAY_VALUE_SEGMENT].max_n_segments =
+ 1U << (30 - (22 - w_of_element));
+ array_spec[GRN_ARRAY_BITMAP_SEGMENT].w_of_element = 0;
+ array_spec[GRN_ARRAY_BITMAP_SEGMENT].max_n_segments = 1U << (30 - (22 + 3));
+ return grn_io_create_with_array(ctx, path, sizeof(struct grn_array_header),
+ GRN_ARRAY_SEGMENT_SIZE, grn_io_auto,
+ 2, array_spec);
+}
+
+static grn_rc
+grn_array_init_io_array(grn_ctx *ctx, grn_array *array, const char *path,
+ uint32_t value_size, uint32_t flags)
+{
+ grn_io *io;
+ struct grn_array_header *header;
+
+ io = grn_array_create_io_array(ctx, path, value_size);
+ if (!io) {
+ return ctx->rc;
+ }
+ grn_io_set_type(io, GRN_TABLE_NO_KEY);
+
+ header = grn_io_header(io);
+ header->flags = flags;
+ header->curr_rec = 0;
+ header->lock = 0;
+ header->value_size = value_size;
+ header->n_entries = 0;
+ header->n_garbages = 0;
+ header->garbages = GRN_ID_NIL;
+ grn_table_queue_init(ctx, &header->queue);
+ array->obj.header.flags = flags;
+ array->ctx = ctx;
+ array->value_size = value_size;
+ array->n_keys = 0;
+ array->keys = NULL;
+ array->n_garbages = &header->n_garbages;
+ array->n_entries = &header->n_entries;
+ array->io = io;
+ array->header = header;
+ array->lock = &header->lock;
+ return GRN_SUCCESS;
+}
+
+void
+grn_array_queue_lock_clear(grn_ctx *ctx, grn_array *array)
+{
+ struct grn_array_header *header;
+ header = grn_io_header(array->io);
+ grn_table_queue_lock_init(ctx, &header->queue);
+}
+
+grn_table_queue *
+grn_array_queue(grn_ctx *ctx, grn_array *array)
+{
+ if (grn_array_is_io_array(array)) {
+ struct grn_array_header *header;
+ header = grn_io_header(array->io);
+ return &header->queue;
+ } else {
+ return NULL;
+ }
+}
+
+static grn_rc
+grn_array_init(grn_ctx *ctx, grn_array *array,
+ const char *path, uint32_t value_size, uint32_t flags)
+{
+ if (flags & GRN_ARRAY_TINY) {
+ return grn_array_init_tiny_array(ctx, array, path, value_size, flags);
+ } else {
+ return grn_array_init_io_array(ctx, array, path, value_size, flags);
+ }
+}
+
+grn_array *
+grn_array_create(grn_ctx *ctx, const char *path, uint32_t value_size, uint32_t flags)
+{
+ if (ctx) {
+ grn_array * const array = (grn_array *)GRN_MALLOC(sizeof(grn_array));
+ if (array) {
+ GRN_DB_OBJ_SET_TYPE(array, GRN_TABLE_NO_KEY);
+ if (!grn_array_init(ctx, array, path, value_size, flags)) {
+ return array;
+ }
+ GRN_FREE(array);
+ }
+ }
+ return NULL;
+}
+
+grn_array *
+grn_array_open(grn_ctx *ctx, const char *path)
+{
+ if (ctx) {
+ grn_io * const io = grn_io_open(ctx, path, grn_io_auto);
+ if (io) {
+ struct grn_array_header * const header = grn_io_header(io);
+ if (grn_io_get_type(io) == GRN_TABLE_NO_KEY) {
+ grn_array * const array = (grn_array *)GRN_MALLOC(sizeof(grn_array));
+ if (array) {
+ if (!(header->flags & GRN_ARRAY_TINY)) {
+ GRN_DB_OBJ_SET_TYPE(array, GRN_TABLE_NO_KEY);
+ array->obj.header.flags = header->flags;
+ array->ctx = ctx;
+ array->value_size = header->value_size;
+ array->n_keys = 0;
+ array->keys = NULL;
+ array->n_garbages = &header->n_garbages;
+ array->n_entries = &header->n_entries;
+ array->io = io;
+ array->header = header;
+ array->lock = &header->lock;
+ return array;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "invalid array flags. (%x)", header->flags);
+ }
+ GRN_FREE(array);
+ }
+ } else {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ }
+ grn_io_close(ctx, io);
+ }
+ }
+ return NULL;
+}
+
+grn_rc
+grn_array_close(grn_ctx *ctx, grn_array *array)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (!ctx || !array) { return GRN_INVALID_ARGUMENT; }
+ if (array->keys) { GRN_FREE(array->keys); }
+ if (grn_array_is_io_array(array)) {
+ rc = grn_io_close(ctx, array->io);
+ } else {
+ GRN_ASSERT(ctx == array->ctx);
+ grn_tiny_array_fin(&array->array);
+ grn_tiny_bitmap_fin(&array->bitmap);
+ }
+ GRN_FREE(array);
+ return rc;
+}
+
+grn_rc
+grn_array_remove(grn_ctx *ctx, const char *path)
+{
+ if (!ctx || !path) { return GRN_INVALID_ARGUMENT; }
+ return grn_io_remove(ctx, path);
+}
+
+grn_rc
+grn_array_truncate(grn_ctx *ctx, grn_array *array)
+{
+ grn_rc rc = GRN_SUCCESS;
+ char *path = NULL;
+ uint32_t value_size, flags;
+
+ if (!ctx || !array) { return GRN_INVALID_ARGUMENT; }
+ if (grn_array_is_io_array(array)) {
+ const char * const io_path = grn_io_path(array->io);
+ if (io_path && *io_path) {
+ path = GRN_STRDUP(io_path);
+ if (!path) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ }
+ value_size = array->value_size;
+ flags = array->obj.header.flags;
+
+ if (grn_array_is_io_array(array)) {
+ rc = grn_io_close(ctx, array->io);
+ if (!rc) {
+ array->io = NULL;
+ if (path) {
+ rc = grn_io_remove(ctx, path);
+ }
+ }
+ }
+ if (!rc) {
+ rc = grn_array_init(ctx, array, path, value_size, flags);
+ }
+ if (path) { GRN_FREE(path); }
+ return rc;
+}
+
+inline static grn_id
+grn_array_get_max_id(grn_array *array)
+{
+ return grn_array_is_io_array(array) ? array->header->curr_rec : array->array.max;
+}
+
+inline static void *
+grn_array_get_value_inline(grn_ctx *ctx, grn_array *array, grn_id id)
+{
+ if (!ctx || !array) {
+ return NULL;
+ }
+ if (*array->n_garbages) {
+ /*
+ * grn_array_bitmap_at() is a time-consuming function, so it is called only
+ * when there are garbages in the array.
+ */
+ if (grn_array_bitmap_at(ctx, array, id) != 1) {
+ return NULL;
+ }
+ } else if (id == 0 || id > grn_array_get_max_id(array)) {
+ return NULL;
+ }
+ return grn_array_entry_at(ctx, array, id, 0);
+}
+
+int
+grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id, void *valuebuf)
+{
+ void * const value = grn_array_get_value_inline(ctx, array, id);
+ if (value) {
+ if (valuebuf) {
+ memcpy(valuebuf, value, array->value_size);
+ }
+ return array->value_size;
+ }
+ return 0;
+}
+
+void *
+_grn_array_get_value(grn_ctx *ctx, grn_array *array, grn_id id)
+{
+ return grn_array_get_value_inline(ctx, array, id);
+}
+
+inline static grn_rc
+grn_array_set_value_inline(grn_ctx *ctx, grn_array *array, grn_id id,
+ const void *value, int flags)
+{
+ void * const entry = grn_array_entry_at(ctx, array, id, 0);
+ if (!entry) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+
+ switch ((flags & GRN_OBJ_SET_MASK)) {
+ case GRN_OBJ_SET :
+ memcpy(entry, value, array->value_size);
+ return GRN_SUCCESS;
+ case GRN_OBJ_INCR :
+ switch (array->value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)entry) += *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)entry) += *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ case GRN_OBJ_DECR :
+ switch (array->value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)entry) -= *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)entry) -= *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ default :
+ /* todo : support other types. */
+ return GRN_INVALID_ARGUMENT;
+ }
+}
+
+grn_rc
+grn_array_set_value(grn_ctx *ctx, grn_array *array, grn_id id,
+ const void *value, int flags)
+{
+ if (!ctx || !array || !value) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (*array->n_garbages) {
+ /*
+ * grn_array_bitmap_at() is a time-consuming function, so it is called only
+ * when there are garbages in the array.
+ */
+ if (grn_array_bitmap_at(ctx, array, id) != 1) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ } else if (id == 0 || id > grn_array_get_max_id(array)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ return grn_array_set_value_inline(ctx, array, id, value, flags);
+}
+
+grn_rc
+grn_array_delete_by_id(grn_ctx *ctx, grn_array *array, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ if (!ctx || !array) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (grn_array_bitmap_at(ctx, array, id) != 1) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ {
+ grn_rc rc = GRN_SUCCESS;
+ /* lock */
+ if (grn_array_is_io_array(array)) {
+ if (array->value_size >= sizeof(grn_id)) {
+ struct grn_array_header * const header = array->header;
+ void * const entry = grn_array_io_entry_at(ctx, array, id, 0);
+ if (!entry) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ *((grn_id *)entry) = header->garbages;
+ header->garbages = id;
+ }
+ }
+ if (!rc) {
+ (*array->n_entries)--;
+ (*array->n_garbages)++;
+ /*
+ * The following grn_io_array_bit_off() fails iff a problem has
+ * occurred after the above grn_array_bitmap_at(). That is to say,
+ * an unexpected case.
+ */
+ grn_io_array_bit_off(ctx, array->io, GRN_ARRAY_BITMAP_SEGMENT, id);
+ }
+ } else {
+ if (array->value_size >= sizeof(grn_id)) {
+ void * const entry = grn_tiny_array_get(&array->array, id);
+ if (!entry) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ *((grn_id *)entry) = array->garbages;
+ array->garbages = id;
+ }
+ }
+ if (!rc) {
+ (*array->n_entries)--;
+ (*array->n_garbages)++;
+ /*
+ * The following grn_io_array_bit_off() fails iff a problem has
+ * occurred after the above grn_array_bitmap_at(). That is to say,
+ * an unexpected case.
+ */
+ grn_tiny_bitmap_get_and_set(&array->bitmap, id, 0);
+ }
+ }
+ /* unlock */
+ return rc;
+ }
+}
+
+grn_id
+grn_array_at(grn_ctx *ctx, grn_array *array, grn_id id)
+{
+ if (*array->n_garbages) {
+ /*
+ * grn_array_bitmap_at() is a time-consuming function, so it is called only
+ * when there are garbages in the array.
+ */
+ if (grn_array_bitmap_at(ctx, array, id) != 1) {
+ return GRN_ID_NIL;
+ }
+ } else if (id > grn_array_get_max_id(array)) {
+ return GRN_ID_NIL;
+ }
+ return id;
+}
+
+grn_rc
+grn_array_copy_sort_key(grn_ctx *ctx, grn_array *array,
+ grn_table_sort_key *keys, int n_keys)
+{
+ array->keys = (grn_table_sort_key *)GRN_MALLOCN(grn_table_sort_key, n_keys);
+ if (!array->keys) {
+ return ctx->rc;
+ }
+ memcpy(array->keys, keys, sizeof(grn_table_sort_key) * n_keys);
+ array->n_keys = n_keys;
+ return GRN_SUCCESS;
+}
+
+void
+grn_array_cursor_close(grn_ctx *ctx, grn_array_cursor *cursor)
+{
+ GRN_ASSERT(cursor->ctx == ctx);
+ GRN_FREE(cursor);
+}
+
+grn_array_cursor *
+grn_array_cursor_open(grn_ctx *ctx, grn_array *array, grn_id min, grn_id max,
+ int offset, int limit, int flags)
+{
+ grn_array_cursor *cursor;
+ if (!array || !ctx) { return NULL; }
+
+ cursor = (grn_array_cursor *)GRN_MALLOCN(grn_array_cursor, 1);
+ if (!cursor) { return NULL; }
+
+ GRN_DB_OBJ_SET_TYPE(cursor, GRN_CURSOR_TABLE_NO_KEY);
+ cursor->array = array;
+ cursor->ctx = ctx;
+ cursor->obj.header.flags = flags;
+ cursor->obj.header.domain = GRN_ID_NIL;
+
+ if (flags & GRN_CURSOR_DESCENDING) {
+ cursor->dir = -1;
+ if (max) {
+ cursor->curr_rec = max;
+ if (!(flags & GRN_CURSOR_LT)) { cursor->curr_rec++; }
+ } else {
+ cursor->curr_rec = grn_array_get_max_id(array) + 1;
+ }
+ if (min) {
+ cursor->tail = min;
+ if ((flags & GRN_CURSOR_GT)) { cursor->tail++; }
+ } else {
+ cursor->tail = GRN_ID_NIL + 1;
+ }
+ if (cursor->curr_rec < cursor->tail) { cursor->tail = cursor->curr_rec; }
+ } else {
+ cursor->dir = 1;
+ if (min) {
+ cursor->curr_rec = min;
+ if (!(flags & GRN_CURSOR_GT)) { cursor->curr_rec--; }
+ } else {
+ cursor->curr_rec = GRN_ID_NIL;
+ }
+ if (max) {
+ cursor->tail = max;
+ if ((flags & GRN_CURSOR_LT)) { cursor->tail--; }
+ } else {
+ cursor->tail = grn_array_get_max_id(array);
+ }
+ if (cursor->tail < cursor->curr_rec) { cursor->tail = cursor->curr_rec; }
+ }
+
+ if (*array->n_garbages) {
+ while (offset && cursor->curr_rec != cursor->tail) {
+ cursor->curr_rec += cursor->dir;
+ if (grn_array_bitmap_at(ctx, cursor->array, cursor->curr_rec) == 1) {
+ offset--;
+ }
+ }
+ } else {
+ cursor->curr_rec += cursor->dir * offset;
+ }
+ cursor->rest = (limit < 0) ? GRN_ARRAY_MAX : limit;
+ return cursor;
+}
+
+grn_id
+grn_array_cursor_next(grn_ctx *ctx, grn_array_cursor *cursor)
+{
+ if (cursor && cursor->rest) {
+ while (cursor->curr_rec != cursor->tail) {
+ cursor->curr_rec += cursor->dir;
+ if (*cursor->array->n_garbages) {
+ if (grn_array_bitmap_at(ctx, cursor->array, cursor->curr_rec) != 1) {
+ continue;
+ }
+ }
+ cursor->rest--;
+ return cursor->curr_rec;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_array_next(grn_ctx *ctx, grn_array *array, grn_id id)
+{
+ const grn_id max_id = grn_array_get_max_id(array);
+ while (++id <= max_id) {
+ if (!*array->n_garbages ||
+ grn_array_bitmap_at(ctx, array, id) == 1) {
+ return id;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+int
+grn_array_cursor_get_value(grn_ctx *ctx, grn_array_cursor *cursor, void **value)
+{
+ if (cursor && value) {
+ void * const entry = grn_array_entry_at(ctx, cursor->array, cursor->curr_rec, 0);
+ if (entry) {
+ *value = entry;
+ return cursor->array->value_size;
+ }
+ }
+ return 0;
+}
+
+grn_rc
+grn_array_cursor_set_value(grn_ctx *ctx, grn_array_cursor *cursor,
+ const void *value, int flags)
+{
+ return grn_array_set_value_inline(ctx, cursor->array, cursor->curr_rec,
+ value, flags);
+}
+
+grn_rc
+grn_array_cursor_delete(grn_ctx *ctx, grn_array_cursor *cursor,
+ grn_table_delete_optarg *optarg)
+{
+ return grn_array_delete_by_id(ctx, cursor->array, cursor->curr_rec, optarg);
+}
+
+inline static grn_id
+grn_array_add_to_tiny_array(grn_ctx *ctx, grn_array *array, void **value)
+{
+ grn_id id = array->garbages;
+ void *entry;
+ if (id) {
+ /* These operations fail iff the array is broken. */
+ entry = grn_tiny_array_get(&array->array, id);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ array->garbages = *(grn_id *)entry;
+ memset(entry, 0, array->value_size);
+ (*array->n_garbages)--;
+ if (!grn_tiny_bitmap_get_and_set(&array->bitmap, id, 1)) {
+ /* Actually, it is difficult to recover from this error. */
+ *(grn_id *)entry = array->garbages;
+ array->garbages = id;
+ (*array->n_garbages)++;
+ return GRN_ID_NIL;
+ }
+ } else {
+ id = array->array.max + 1;
+ if (!grn_tiny_bitmap_put_and_set(&array->bitmap, id, 1)) {
+ return GRN_ID_NIL;
+ }
+ entry = grn_tiny_array_put(&array->array, id);
+ if (!entry) {
+ grn_tiny_bitmap_get_and_set(&array->bitmap, id, 0);
+ return GRN_ID_NIL;
+ }
+ array->array.max = id;
+ }
+ (*array->n_entries)++;
+ if (value) { *value = entry; }
+ return id;
+}
+
+inline static grn_id
+grn_array_add_to_io_array(grn_ctx *ctx, grn_array *array, void **value)
+{
+ struct grn_array_header * const header = array->header;
+ grn_id id = header->garbages;
+ void *entry;
+ if (id) {
+ /* These operations fail iff the array is broken. */
+ entry = grn_array_io_entry_at(ctx, array, id, GRN_TABLE_ADD);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ header->garbages = *(grn_id *)entry;
+ memset(entry, 0, header->value_size);
+ (*array->n_garbages)--;
+ if (!grn_io_array_bit_on(ctx, array->io, GRN_ARRAY_BITMAP_SEGMENT, id)) {
+ /* Actually, it is difficult to recover from this error. */
+ *(grn_id *)entry = array->garbages;
+ array->garbages = id;
+ (*array->n_garbages)++;
+ return GRN_ID_NIL;
+ }
+ } else {
+ if (header->curr_rec >= GRN_ARRAY_MAX) { return GRN_ID_NIL; }
+ id = header->curr_rec + 1;
+ if (!grn_io_array_bit_on(ctx, array->io, GRN_ARRAY_BITMAP_SEGMENT, id)) {
+ return GRN_ID_NIL;
+ }
+ entry = grn_array_io_entry_at(ctx, array, id, GRN_TABLE_ADD);
+ if (!entry) {
+ grn_io_array_bit_off(ctx, array->io, GRN_ARRAY_BITMAP_SEGMENT, id);
+ return GRN_ID_NIL;
+ }
+ header->curr_rec = id;
+ }
+ (*array->n_entries)++;
+ if (value) { *value = entry; }
+ return id;
+}
+
+void
+grn_array_clear_curr_rec(grn_ctx *ctx, grn_array *array)
+{
+ struct grn_array_header * const header = array->header;
+ header->curr_rec = GRN_ID_NIL;
+}
+
+grn_id
+grn_array_add(grn_ctx *ctx, grn_array *array, void **value)
+{
+ if (ctx && array) {
+ if (grn_array_is_io_array(array)) {
+ return grn_array_add_to_io_array(ctx, array, value);
+ } else {
+ return grn_array_add_to_tiny_array(ctx, array, value);
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_array_push(grn_ctx *ctx, grn_array *array,
+ void (*func)(grn_ctx *, grn_array *, grn_id, void *),
+ void *func_arg)
+{
+ grn_id id = GRN_ID_NIL;
+ grn_table_queue *queue = grn_array_queue(ctx, array);
+ if (queue) {
+ MUTEX_LOCK(queue->mutex);
+ if (grn_table_queue_head(queue) == queue->cap) {
+ grn_array_clear_curr_rec(ctx, array);
+ }
+ id = grn_array_add(ctx, array, NULL);
+ if (func) {
+ func(ctx, array, id, func_arg);
+ }
+ if (grn_table_queue_size(queue) == queue->cap) {
+ grn_table_queue_tail_increment(queue);
+ }
+ grn_table_queue_head_increment(queue);
+ COND_SIGNAL(queue->cond);
+ MUTEX_UNLOCK(queue->mutex);
+ } else {
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "only persistent arrays support push");
+ }
+ return id;
+}
+
+grn_id
+grn_array_pull(grn_ctx *ctx, grn_array *array, grn_bool blockp,
+ void (*func)(grn_ctx *, grn_array *, grn_id, void *),
+ void *func_arg)
+{
+ grn_id id = GRN_ID_NIL;
+ grn_table_queue *queue = grn_array_queue(ctx, array);
+ if (queue) {
+ MUTEX_LOCK(queue->mutex);
+ queue->unblock_requested = GRN_FALSE;
+ while (grn_table_queue_size(queue) == 0) {
+ if (!blockp || queue->unblock_requested) {
+ MUTEX_UNLOCK(queue->mutex);
+ GRN_OUTPUT_BOOL(0);
+ return id;
+ }
+ COND_WAIT(queue->cond, queue->mutex);
+ }
+ grn_table_queue_tail_increment(queue);
+ id = grn_table_queue_tail(queue);
+ if (func) {
+ func(ctx, array, id, func_arg);
+ }
+ MUTEX_UNLOCK(queue->mutex);
+ } else {
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "only persistent arrays support pull");
+ }
+ return id;
+}
+
+void
+grn_array_unblock(grn_ctx *ctx, grn_array *array)
+{
+ grn_table_queue *queue = grn_array_queue(ctx, array);
+ if (!queue) {
+ return;
+ }
+
+ queue->unblock_requested = GRN_TRUE;
+ COND_BROADCAST(queue->cond);
+}
+
+/* grn_hash : hash table */
+
+#define GRN_HASH_MAX_SEGMENT 0x400
+#define GRN_HASH_HEADER_SIZE 0x9000
+#define GRN_HASH_SEGMENT_SIZE 0x400000
+#define W_OF_KEY_IN_A_SEGMENT 22
+#define IDX_MASK_IN_A_SEGMENT 0xfffff
+
+typedef struct {
+ uint8_t key[4];
+ uint8_t value[1];
+} grn_plain_hash_entry;
+
+typedef struct {
+ uint32_t hash_value;
+ uint8_t key_and_value[1];
+} grn_rich_hash_entry;
+
+typedef struct {
+ uint32_t hash_value;
+ uint16_t flag;
+ uint16_t key_size;
+ union {
+ uint8_t buf[sizeof(uint32_t)];
+ uint32_t offset;
+ } key;
+ uint8_t value[1];
+} grn_io_hash_entry;
+
+typedef struct {
+ uint32_t hash_value;
+ uint16_t flag;
+ uint16_t key_size;
+ union {
+ uint8_t buf[sizeof(void *)];
+ void *ptr;
+ } key;
+ uint8_t value[1];
+} grn_tiny_hash_entry;
+
+/*
+ * hash_value is valid even if the entry is grn_plain_hash_entry. In this case,
+ * its hash_value equals its key.
+ * flag, key_size and key.buf are valid if the entry has a variable length key.
+ */
+typedef struct {
+ uint32_t hash_value;
+ uint16_t flag;
+ uint16_t key_size;
+} grn_hash_entry_header;
+
+typedef union {
+ uint32_t hash_value;
+ grn_hash_entry_header header;
+ grn_plain_hash_entry plain_entry;
+ grn_rich_hash_entry rich_entry;
+ grn_io_hash_entry io_entry;
+ grn_tiny_hash_entry tiny_entry;
+} grn_hash_entry;
+
+typedef struct {
+ uint32_t key;
+ uint8_t dummy[1];
+} entry;
+
+typedef struct {
+ uint32_t key;
+ uint16_t flag;
+ uint16_t size;
+ uint32_t str;
+ uint8_t dummy[1];
+} entry_str;
+
+typedef struct {
+ uint32_t key;
+ uint16_t flag;
+ uint16_t size;
+ char *str;
+ uint8_t dummy[1];
+} entry_astr;
+
+#define LOGICAL_MAX_SEGMENT ((GRN_HASH_MAX_SEGMENT) * 4)
+
+enum {
+ GRN_HASH_KEY_SEGMENT = 0,
+ GRN_HASH_ENTRY_SEGMENT = 1,
+ GRN_HASH_INDEX_SEGMENT = 2,
+ GRN_HASH_BITMAP_SEGMENT = 3
+};
+
+inline static grn_bool
+grn_hash_is_io_hash(grn_hash *hash)
+{
+ return hash->io != NULL;
+}
+
+inline static void *
+grn_io_hash_entry_at(grn_ctx *ctx, grn_hash *hash, grn_id id, int flags)
+{
+ return grn_io_array_at_inline(ctx, hash->io, GRN_HASH_ENTRY_SEGMENT, id, flags);
+}
+
+/* todo : error handling */
+inline static void *
+grn_hash_entry_at(grn_ctx *ctx, grn_hash *hash, grn_id id, int flags)
+{
+ if (grn_hash_is_io_hash(hash)) {
+ return grn_io_hash_entry_at(ctx, hash, id, flags);
+ } else {
+ return grn_tiny_array_at_inline(&hash->a, id);
+ }
+}
+
+inline static grn_bool
+grn_hash_bitmap_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ if (grn_hash_is_io_hash(hash)) {
+ return grn_io_array_bit_at(ctx, hash->io, GRN_HASH_BITMAP_SEGMENT, id) == 1;
+ } else {
+ return grn_tiny_bitmap_put(&hash->bitmap, id) == 1;
+ }
+}
+
+inline static grn_id *
+grn_io_hash_idx_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ return grn_io_array_at_inline(ctx, hash->io, GRN_HASH_INDEX_SEGMENT,
+ id, GRN_TABLE_ADD);
+}
+
+inline static grn_id *
+grn_hash_idx_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ if (grn_hash_is_io_hash(hash)) {
+ id = (id & *hash->max_offset) + hash->header->idx_offset;
+ return grn_io_hash_idx_at(ctx, hash, id);
+ } else {
+ return hash->index + (id & *hash->max_offset);
+ }
+}
+
+inline static void *
+grn_io_hash_key_at(grn_ctx *ctx, grn_hash *hash, uint32_t pos)
+{
+ return grn_io_array_at_inline(ctx, hash->io, GRN_HASH_KEY_SEGMENT,
+ pos, GRN_TABLE_ADD);
+}
+
+#define HASH_IMMEDIATE 1
+
+#define MAX_INDEX_SIZE ((GRN_HASH_MAX_SEGMENT * (IDX_MASK_IN_A_SEGMENT + 1)) >> 1)
+
+inline static uint16_t
+grn_hash_entry_get_key_size(grn_hash *hash, grn_hash_entry *entry)
+{
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ return entry->header.key_size;
+ } else {
+ return hash->key_size;
+ }
+}
+
+inline static char *
+grn_hash_entry_get_key(grn_ctx *ctx, grn_hash *hash, grn_hash_entry *entry)
+{
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (grn_hash_is_io_hash(hash)) {
+ if (entry->io_entry.flag & HASH_IMMEDIATE) {
+ return (char *)entry->io_entry.key.buf;
+ } else {
+ return (char *)grn_io_hash_key_at(ctx, hash, entry->io_entry.key.offset);
+ }
+ } else {
+ if (entry->tiny_entry.flag & HASH_IMMEDIATE) {
+ return (char *)entry->tiny_entry.key.buf;
+ } else {
+ return entry->tiny_entry.key.ptr;
+ }
+ }
+ } else {
+ if (hash->key_size == sizeof(uint32_t)) {
+ return (char *)entry->plain_entry.key;
+ } else {
+ return (char *)entry->rich_entry.key_and_value;
+ }
+ }
+}
+
+inline static void *
+grn_hash_entry_get_value(grn_hash *hash, grn_hash_entry *entry)
+{
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (grn_hash_is_io_hash(hash)) {
+ return entry->io_entry.value;
+ } else {
+ return entry->tiny_entry.value;
+ }
+ } else {
+ if (hash->key_size == sizeof(uint32_t)) {
+ return entry->plain_entry.value;
+ } else {
+ return entry->rich_entry.key_and_value + hash->key_size;
+ }
+ }
+}
+
+inline static grn_rc
+grn_io_hash_entry_put_key(grn_ctx *ctx, grn_hash *hash,
+ grn_io_hash_entry *entry,
+ const void *key, unsigned int key_size)
+{
+ uint32_t key_offset;
+ if (entry->key_size) {
+ key_offset = entry->key.offset;
+ } else {
+ uint32_t segment_id;
+ if (key_size >= GRN_HASH_SEGMENT_SIZE) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ key_offset = hash->header->curr_key;
+ segment_id = (key_offset + key_size) >> W_OF_KEY_IN_A_SEGMENT;
+ if ((key_offset >> W_OF_KEY_IN_A_SEGMENT) != segment_id) {
+ key_offset = hash->header->curr_key = segment_id << W_OF_KEY_IN_A_SEGMENT;
+ }
+ hash->header->curr_key += key_size;
+ entry->key.offset = key_offset;
+ }
+
+ {
+ void * const key_ptr = grn_io_hash_key_at(ctx, hash, key_offset);
+ if (!key_ptr) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ memcpy(key_ptr, key, key_size);
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+grn_hash_entry_put_key(grn_ctx *ctx, grn_hash *hash,
+ grn_hash_entry *entry, uint32_t hash_value,
+ const void *key, unsigned int key_size)
+{
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (grn_hash_is_io_hash(hash)) {
+ if (key_size <= sizeof(entry->io_entry.key.buf)) {
+ memcpy(entry->io_entry.key.buf, key, key_size);
+ entry->io_entry.flag = HASH_IMMEDIATE;
+ } else {
+ const grn_rc rc =
+ grn_io_hash_entry_put_key(ctx, hash, (grn_io_hash_entry *)entry,
+ key, key_size);
+ if (rc) {
+ return rc;
+ }
+ entry->io_entry.flag = 0;
+ }
+ entry->io_entry.hash_value = hash_value;
+ entry->io_entry.key_size = key_size;
+ } else {
+ if (key_size <= sizeof(entry->tiny_entry.key.buf)) {
+ memcpy(entry->tiny_entry.key.buf, key, key_size);
+ entry->tiny_entry.flag = HASH_IMMEDIATE;
+ } else {
+ grn_ctx * const ctx = hash->ctx;
+ entry->tiny_entry.key.ptr = GRN_CTX_ALLOC(ctx, key_size);
+ if (!entry->tiny_entry.key.ptr) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ memcpy(entry->tiny_entry.key.ptr, key, key_size);
+ entry->tiny_entry.flag = 0;
+ }
+ entry->tiny_entry.hash_value = hash_value;
+ entry->tiny_entry.key_size = key_size;
+ }
+ } else {
+ if (hash->key_size == sizeof(uint32_t)) {
+ *(uint32_t *)entry->plain_entry.key = hash_value;
+ } else {
+ entry->rich_entry.hash_value = hash_value;
+ memcpy(entry->rich_entry.key_and_value, key, key_size);
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+/*
+ * grn_hash_entry_compare_key() returns GRN_TRUE if the entry key equals the
+ * specified key, or GRN_FALSE otherwise.
+ */
+inline static grn_bool
+grn_hash_entry_compare_key(grn_ctx *ctx, grn_hash *hash,
+ grn_hash_entry *entry, uint32_t hash_value,
+ const void *key, unsigned int key_size)
+{
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (entry->hash_value != hash_value ||
+ entry->header.key_size != key_size) {
+ return GRN_FALSE;
+ }
+ if (grn_hash_is_io_hash(hash)) {
+ if (entry->io_entry.flag & HASH_IMMEDIATE) {
+ return !memcmp(key, entry->io_entry.key.buf, key_size);
+ } else {
+ const void * const entry_key_ptr =
+ grn_io_hash_key_at(ctx, hash, entry->io_entry.key.offset);
+ return !memcmp(key, entry_key_ptr, key_size);
+ }
+ } else {
+ if (entry->tiny_entry.flag & HASH_IMMEDIATE) {
+ return !memcmp(key, entry->tiny_entry.key.buf, key_size);
+ } else {
+ return !memcmp(key, entry->tiny_entry.key.ptr, key_size);
+ }
+ }
+ } else {
+ if (entry->hash_value != hash_value) {
+ return GRN_FALSE;
+ }
+ if (key_size == sizeof(uint32_t)) {
+ return GRN_TRUE;
+ } else {
+ return !memcmp(key, entry->rich_entry.key_and_value, key_size);
+ }
+ }
+}
+
+inline static char *
+get_key(grn_ctx *ctx, grn_hash *hash, entry_str *n)
+{
+ return grn_hash_entry_get_key(ctx, hash, (grn_hash_entry *)n);
+}
+
+inline static void *
+get_value(grn_hash *hash, entry_str *n)
+{
+ return grn_hash_entry_get_value(hash, (grn_hash_entry *)n);
+}
+
+inline static grn_rc
+put_key(grn_ctx *ctx, grn_hash *hash, entry_str *n, uint32_t h,
+ const char *key, unsigned int len)
+{
+ return grn_hash_entry_put_key(ctx, hash, (grn_hash_entry *)n, h, key, len);
+}
+
+inline static int
+match_key(grn_ctx *ctx, grn_hash *hash, entry_str *ee, uint32_t h,
+ const char *key, unsigned int len)
+{
+ return grn_hash_entry_compare_key(ctx, hash, (grn_hash_entry *)ee,
+ h, key, len);
+}
+
+#define GARBAGE (0xffffffff)
+
+inline static uint32_t
+grn_io_hash_calculate_entry_size(uint32_t key_size, uint32_t value_size,
+ uint32_t flags)
+{
+ if (flags & GRN_OBJ_KEY_VAR_SIZE) {
+ return (uintptr_t)((grn_io_hash_entry *)0)->value + value_size;
+ } else {
+ if (key_size == sizeof(uint32_t)) {
+ return (uintptr_t)((grn_plain_hash_entry *)0)->value + value_size;
+ } else {
+ return (uintptr_t)((grn_rich_hash_entry *)0)->key_and_value
+ + key_size + value_size;
+ }
+ }
+}
+
+static grn_io *
+grn_io_hash_create_io(grn_ctx *ctx, const char *path, uint32_t entry_size)
+{
+ uint32_t w_of_element = 0;
+ grn_io_array_spec array_spec[4];
+
+ while ((1U << w_of_element) < entry_size) {
+ w_of_element++;
+ }
+
+ array_spec[GRN_HASH_KEY_SEGMENT].w_of_element = 0;
+ array_spec[GRN_HASH_KEY_SEGMENT].max_n_segments = 0x400;
+ array_spec[GRN_HASH_ENTRY_SEGMENT].w_of_element = w_of_element;
+ array_spec[GRN_HASH_ENTRY_SEGMENT].max_n_segments =
+ 1U << (30 - (22 - w_of_element));
+ array_spec[GRN_HASH_INDEX_SEGMENT].w_of_element = 2;
+ array_spec[GRN_HASH_INDEX_SEGMENT].max_n_segments = 1U << (30 - (22 - 2));
+ array_spec[GRN_HASH_BITMAP_SEGMENT].w_of_element = 0;
+ array_spec[GRN_HASH_BITMAP_SEGMENT].max_n_segments = 1U << (30 - (22 + 3));
+ return grn_io_create_with_array(ctx, path, GRN_HASH_HEADER_SIZE,
+ GRN_HASH_SEGMENT_SIZE,
+ grn_io_auto, 4, array_spec);
+}
+
+static grn_rc
+grn_io_hash_init(grn_ctx *ctx, grn_hash *hash, const char *path,
+ uint32_t key_size, uint32_t value_size, uint32_t flags,
+ grn_encoding encoding, uint32_t init_size)
+{
+ grn_io *io;
+ struct grn_hash_header *header;
+ uint32_t entry_size, max_offset;
+
+ entry_size = grn_io_hash_calculate_entry_size(key_size, value_size, flags);
+
+ io = grn_io_hash_create_io(ctx, path, entry_size);
+ if (!io) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ grn_io_set_type(io, GRN_TABLE_HASH_KEY);
+
+ max_offset = IDX_MASK_IN_A_SEGMENT + 1;
+ while (max_offset < init_size * 2) {
+ max_offset *= 2;
+ }
+ max_offset--;
+
+ if (encoding == GRN_ENC_DEFAULT) {
+ encoding = ctx->encoding;
+ }
+
+ header = grn_io_header(io);
+ header->flags = flags;
+ header->encoding = encoding;
+ header->key_size = key_size;
+ header->curr_rec = 0;
+ header->curr_key = 0;
+ header->lock = 0;
+ header->idx_offset = 0;
+ header->value_size = value_size;
+ header->entry_size = entry_size;
+ header->max_offset = max_offset;
+ header->n_entries = 0;
+ header->n_garbages = 0;
+ header->tokenizer = GRN_ID_NIL;
+ if (header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ hash->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ header->normalizer = grn_obj_id(ctx, hash->normalizer);
+ } else {
+ hash->normalizer = NULL;
+ header->normalizer = GRN_ID_NIL;
+ }
+ GRN_PTR_INIT(&(hash->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_table_queue_init(ctx, &header->queue);
+
+ hash->obj.header.flags = header->flags;
+ hash->ctx = ctx;
+ hash->key_size = key_size;
+ hash->encoding = encoding;
+ hash->value_size = value_size;
+ hash->entry_size = entry_size;
+ hash->n_garbages = &header->n_garbages;
+ hash->n_entries = &header->n_entries;
+ hash->max_offset = &header->max_offset;
+ hash->io = io;
+ hash->header = header;
+ hash->lock = &header->lock;
+ hash->tokenizer = NULL;
+ return GRN_SUCCESS;
+}
+
+#define INITIAL_INDEX_SIZE 256U
+
+static uint32_t
+grn_tiny_hash_calculate_entry_size(uint32_t key_size, uint32_t value_size,
+ uint32_t flags)
+{
+ uint32_t entry_size;
+ if (flags & GRN_OBJ_KEY_VAR_SIZE) {
+ entry_size = (uintptr_t)((grn_tiny_hash_entry *)0)->value + value_size;
+ } else {
+ if (key_size == sizeof(uint32_t)) {
+ entry_size = (uintptr_t)((grn_plain_hash_entry *)0)->value + value_size;
+ } else {
+ entry_size = (uintptr_t)((grn_rich_hash_entry *)0)->key_and_value
+ + key_size + value_size;
+ }
+ }
+ if (entry_size != sizeof(uint32_t)) {
+ entry_size += sizeof(uintptr_t) - 1;
+ entry_size &= ~(sizeof(uintptr_t) - 1);
+ }
+ return entry_size;
+}
+
+static grn_rc
+grn_tiny_hash_init(grn_ctx *ctx, grn_hash *hash, const char *path,
+ uint32_t key_size, uint32_t value_size, uint32_t flags,
+ grn_encoding encoding)
+{
+ uint32_t entry_size;
+
+ if (path) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ hash->index = GRN_CTX_ALLOC(ctx, INITIAL_INDEX_SIZE * sizeof(grn_id));
+ if (!hash->index) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+
+ entry_size = grn_tiny_hash_calculate_entry_size(key_size, value_size, flags);
+ hash->obj.header.flags = flags;
+ hash->ctx = ctx;
+ hash->key_size = key_size;
+ hash->encoding = encoding;
+ hash->value_size = value_size;
+ hash->entry_size = entry_size;
+ hash->n_garbages = &hash->n_garbages_;
+ hash->n_entries = &hash->n_entries_;
+ hash->max_offset = &hash->max_offset_;
+ hash->max_offset_ = INITIAL_INDEX_SIZE - 1;
+ hash->io = NULL;
+ hash->n_garbages_ = 0;
+ hash->n_entries_ = 0;
+ hash->garbages = GRN_ID_NIL;
+ hash->tokenizer = NULL;
+ hash->normalizer = NULL;
+ GRN_PTR_INIT(&(hash->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_tiny_array_init(ctx, &hash->a, entry_size, GRN_TINY_ARRAY_CLEAR);
+ grn_tiny_bitmap_init(ctx, &hash->bitmap);
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_hash_init(grn_ctx *ctx, grn_hash *hash, const char *path,
+ uint32_t key_size, uint32_t value_size, uint32_t flags)
+{
+ if (flags & GRN_HASH_TINY) {
+ return grn_tiny_hash_init(ctx, hash, path, key_size, value_size,
+ flags, ctx->encoding);
+ } else {
+ return grn_io_hash_init(ctx, hash, path, key_size, value_size,
+ flags, ctx->encoding, 0);
+ }
+}
+
+grn_hash *
+grn_hash_create(grn_ctx *ctx, const char *path, uint32_t key_size, uint32_t value_size,
+ uint32_t flags)
+{
+ grn_hash *hash;
+ if (!ctx) {
+ return NULL;
+ }
+ if (key_size > GRN_HASH_MAX_KEY_SIZE) {
+ return NULL;
+ }
+ hash = (grn_hash *)GRN_MALLOC(sizeof(grn_hash));
+ if (!hash) {
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(hash, GRN_TABLE_HASH_KEY);
+ if (grn_hash_init(ctx, hash, path, key_size, value_size, flags)) {
+ GRN_FREE(hash);
+ return NULL;
+ }
+ return hash;
+}
+
+grn_hash *
+grn_hash_open(grn_ctx *ctx, const char *path)
+{
+ if (ctx) {
+ grn_io * const io = grn_io_open(ctx, path, grn_io_auto);
+ if (io) {
+ struct grn_hash_header * const header = grn_io_header(io);
+ if (grn_io_get_type(io) == GRN_TABLE_HASH_KEY) {
+ grn_hash * const hash = (grn_hash *)GRN_MALLOC(sizeof(grn_hash));
+ if (hash) {
+ if (!(header->flags & GRN_HASH_TINY)) {
+ GRN_DB_OBJ_SET_TYPE(hash, GRN_TABLE_HASH_KEY);
+ hash->ctx = ctx;
+ hash->key_size = header->key_size;
+ hash->encoding = header->encoding;
+ hash->value_size = header->value_size;
+ hash->entry_size = header->entry_size;
+ hash->n_garbages = &header->n_garbages;
+ hash->n_entries = &header->n_entries;
+ hash->max_offset = &header->max_offset;
+ hash->io = io;
+ hash->header = header;
+ hash->lock = &header->lock;
+ hash->tokenizer = grn_ctx_at(ctx, header->tokenizer);
+ if (header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ hash->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ header->normalizer = grn_obj_id(ctx, hash->normalizer);
+ } else {
+ hash->normalizer = grn_ctx_at(ctx, header->normalizer);
+ }
+ GRN_PTR_INIT(&(hash->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ hash->obj.header.flags = header->flags;
+ return hash;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "invalid hash flag. (%x)", header->flags);
+ }
+ GRN_FREE(hash);
+ }
+ } else {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ }
+ grn_io_close(ctx, io);
+ }
+ }
+ return NULL;
+}
+
+static grn_rc
+grn_tiny_hash_fin(grn_ctx *ctx, grn_hash *hash)
+{
+ if (!hash->index) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ GRN_OBJ_FIN(ctx, &(hash->token_filters));
+
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ uint32_t num_remaining_entries = *hash->n_entries;
+ grn_id *hash_ptr;
+ for (hash_ptr = hash->index; num_remaining_entries; hash_ptr++) {
+ const grn_id id = *hash_ptr;
+ if (id && id != GARBAGE) {
+ grn_tiny_hash_entry * const entry =
+ (grn_tiny_hash_entry *)grn_tiny_array_get(&hash->a, id);
+ GRN_ASSERT(entry);
+ num_remaining_entries--;
+ if (entry && !(entry->flag & HASH_IMMEDIATE)) {
+ GRN_CTX_FREE(ctx, entry->key.ptr);
+ }
+ }
+ }
+ }
+ grn_tiny_array_fin(&hash->a);
+ grn_tiny_bitmap_fin(&hash->bitmap);
+ GRN_CTX_FREE(ctx, hash->index);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_hash_close(grn_ctx *ctx, grn_hash *hash)
+{
+ grn_rc rc;
+ if (!ctx || !hash) { return GRN_INVALID_ARGUMENT; }
+ if (grn_hash_is_io_hash(hash)) {
+ rc = grn_io_close(ctx, hash->io);
+ GRN_PTR_INIT(&(hash->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ } else {
+ GRN_ASSERT(ctx == hash->ctx);
+ rc = grn_tiny_hash_fin(ctx, hash);
+ }
+ GRN_FREE(hash);
+ return rc;
+}
+
+grn_rc
+grn_hash_remove(grn_ctx *ctx, const char *path)
+{
+ if (!ctx || !path) { return GRN_INVALID_ARGUMENT; }
+ return grn_io_remove(ctx, path);
+}
+
+grn_rc
+grn_hash_truncate(grn_ctx *ctx, grn_hash *hash)
+{
+ grn_rc rc = GRN_SUCCESS;
+ char *path = NULL;
+ uint32_t key_size, value_size, flags;
+
+ if (!ctx || !hash) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ if (grn_hash_is_io_hash(hash)) {
+ const char * const io_path = grn_io_path(hash->io);
+ if (io_path && *io_path) {
+ path = GRN_STRDUP(io_path);
+ if (!path) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ }
+ key_size = hash->key_size;
+ value_size = hash->value_size;
+ flags = hash->obj.header.flags;
+
+ if (grn_hash_is_io_hash(hash)) {
+ rc = grn_io_close(ctx, hash->io);
+ if (!rc) {
+ hash->io = NULL;
+ if (path) {
+ rc = grn_io_remove(ctx, path);
+ }
+ }
+ }
+ if (!rc) {
+ rc = grn_hash_init(ctx, hash, path, key_size, value_size, flags);
+ }
+ if (path) {
+ GRN_FREE(path);
+ }
+ return rc;
+}
+
+inline static uint32_t
+grn_hash_calculate_hash_value(const void *ptr, uint32_t size)
+{
+ uint32_t i;
+ uint32_t hash_value = 0;
+ for (i = 0; i < size; i++) {
+ hash_value = (hash_value * 1021) + ((const uint8_t *)ptr)[i];
+ }
+ return hash_value;
+}
+
+inline static uint32_t
+grn_hash_calculate_step(uint32_t hash_value)
+{
+ return (hash_value >> 2) | 0x1010101;
+}
+
+static grn_rc
+grn_hash_reset(grn_ctx *ctx, grn_hash *hash, uint32_t expected_n_entries)
+{
+ grn_id *new_index = NULL;
+ uint32_t new_index_size = INITIAL_INDEX_SIZE;
+ grn_id *src_ptr = NULL, *dest_ptr = NULL;
+ uint32_t src_offset = 0, dest_offset = 0;
+ const uint32_t n_entries = *hash->n_entries;
+ const uint32_t max_offset = *hash->max_offset;
+
+ if (!expected_n_entries) {
+ expected_n_entries = n_entries * 2;
+ }
+ if (expected_n_entries > INT_MAX) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ while (new_index_size <= expected_n_entries) {
+ new_index_size *= 2;
+ }
+
+ if (grn_hash_is_io_hash(hash)) {
+ uint32_t i;
+ src_offset = hash->header->idx_offset;
+ dest_offset = MAX_INDEX_SIZE - src_offset;
+ for (i = 0; i < new_index_size; i += (IDX_MASK_IN_A_SEGMENT + 1)) {
+ /*
+ * The following grn_io_hash_idx_at() allocates memory for a new segment
+ * and returns a pointer to the new segment. It's actually bad manners
+ * but faster than calling grn_io_hash_idx_at() for each element.
+ */
+ dest_ptr = grn_io_hash_idx_at(ctx, hash, i + dest_offset);
+ if (!dest_ptr) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ memset(dest_ptr, 0, GRN_HASH_SEGMENT_SIZE);
+ }
+ } else {
+ GRN_ASSERT(ctx == hash->ctx);
+ new_index = GRN_CTX_ALLOC(ctx, new_index_size * sizeof(grn_id));
+ if (!new_index) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ src_ptr = hash->index;
+ }
+
+ {
+ uint32_t src_pos, count;
+ const uint32_t new_max_offset = new_index_size - 1;
+ for (count = 0, src_pos = 0; count < n_entries && src_pos <= max_offset;
+ src_pos++, src_ptr++) {
+ uint32_t i, step;
+ grn_id entry_id;
+ grn_hash_entry *entry;
+ if (grn_hash_is_io_hash(hash) && !(src_pos & IDX_MASK_IN_A_SEGMENT)) {
+ src_ptr = grn_io_hash_idx_at(ctx, hash, src_pos + src_offset);
+ if (!src_ptr) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ entry_id = *src_ptr;
+ if (!entry_id || (entry_id == GARBAGE)) {
+ continue;
+ }
+ entry = grn_hash_entry_at(ctx, hash, entry_id, GRN_TABLE_ADD);
+ if (!entry) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ step = grn_hash_calculate_step(entry->hash_value);
+ for (i = entry->hash_value; ; i += step) {
+ i &= new_max_offset;
+ if (grn_hash_is_io_hash(hash)) {
+ dest_ptr = grn_io_hash_idx_at(ctx, hash, i + dest_offset);
+ if (!dest_ptr) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ dest_ptr = new_index + i;
+ }
+ if (!*dest_ptr) {
+ break;
+ }
+ }
+ *dest_ptr = entry_id;
+ count++;
+ }
+ *hash->max_offset = new_max_offset;
+ *hash->n_garbages = 0;
+ }
+
+ if (grn_hash_is_io_hash(hash)) {
+ hash->header->idx_offset = dest_offset;
+ } else {
+ grn_id * const old_index = hash->index;
+ hash->index = new_index;
+ GRN_CTX_FREE(ctx, old_index);
+ }
+
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_hash_lock(grn_ctx *ctx, grn_hash *hash, int timeout)
+{
+ static int _ncalls = 0, _ncolls = 0;
+ uint32_t count;
+ _ncalls++;
+ for (count = 0;; count++) {
+ uint32_t lock;
+ GRN_ATOMIC_ADD_EX(hash->lock, 1, lock);
+ if (lock) {
+ GRN_ATOMIC_ADD_EX(hash->lock, -1, lock);
+ if (!timeout || (timeout > 0 && timeout == count)) { break; }
+ if (!(++_ncolls % 1000000) && (_ncolls > _ncalls)) {
+ if (_ncolls < 0 || _ncalls < 0) {
+ _ncolls = 0; _ncalls = 0;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "hash(%p) collisions(%d/%d)", hash, _ncolls, _ncalls);
+ }
+ }
+ grn_nanosleep(GRN_LOCK_WAIT_TIME_NANOSECOND);
+ continue;
+ }
+ return GRN_SUCCESS;
+ }
+ ERR(GRN_RESOURCE_DEADLOCK_AVOIDED, "grn_hash_lock");
+ return ctx->rc;
+}
+
+grn_rc
+grn_hash_unlock(grn_ctx *ctx, grn_hash *hash)
+{
+ uint32_t lock;
+ GRN_ATOMIC_ADD_EX(hash->lock, -1, lock);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_hash_clear_lock(grn_ctx *ctx, grn_hash *hash)
+{
+ *hash->lock = 0;
+ return GRN_SUCCESS;
+}
+
+inline static grn_id
+grn_io_hash_add(grn_ctx *ctx, grn_hash *hash, uint32_t hash_value,
+ const void *key, unsigned int key_size, void **value)
+{
+ grn_id entry_id;
+ grn_hash_entry *entry;
+ struct grn_hash_header * const header = hash->header;
+
+ entry_id = header->garbages[key_size - 1];
+ if (entry_id) {
+ entry = grn_io_hash_entry_at(ctx, hash, entry_id, GRN_TABLE_ADD);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ header->garbages[key_size - 1] = *(grn_id *)entry;
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ /* keep entry->io_entry's hash_value, flag, key_size and key. */
+ memset(entry->io_entry.value, 0, header->value_size);
+ } else {
+ memset(entry, 0, header->entry_size);
+ }
+ } else {
+ entry_id = header->curr_rec + 1;
+ entry = grn_hash_entry_at(ctx, hash, entry_id, GRN_TABLE_ADD);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ header->curr_rec = entry_id;
+ }
+
+ if (!grn_io_array_bit_on(ctx, hash->io, GRN_HASH_BITMAP_SEGMENT, entry_id)) {
+ /* TODO: error handling. */
+ }
+
+ if (grn_hash_entry_put_key(ctx, hash, entry, hash_value, key, key_size)) {
+ /* TODO: error handling. */
+ }
+
+ if (value) {
+ *value = grn_hash_entry_get_value(hash, entry);
+ }
+ return entry_id;
+}
+
+inline static grn_id
+grn_tiny_hash_add(grn_ctx *ctx, grn_hash *hash, uint32_t hash_value,
+ const void *key, unsigned int key_size, void **value)
+{
+ grn_id entry_id;
+ grn_hash_entry *entry;
+ if (hash->garbages) {
+ entry_id = hash->garbages;
+ entry = (grn_hash_entry *)grn_tiny_array_get(&hash->a, entry_id);
+ hash->garbages = *(grn_id *)entry;
+ memset(entry, 0, hash->entry_size);
+ } else {
+ entry_id = hash->a.max + 1;
+ entry = (grn_hash_entry *)grn_tiny_array_put(&hash->a, entry_id);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ }
+
+ if (!grn_tiny_bitmap_put_and_set(&hash->bitmap, entry_id, 1)) {
+ /* TODO: error handling. */
+ }
+
+ if (grn_hash_entry_put_key(ctx, hash, entry, hash_value, key, key_size)) {
+ /* TODO: error handling. */
+ }
+
+ if (value) {
+ *value = grn_hash_entry_get_value(hash, entry);
+ }
+ return entry_id;
+}
+
+grn_id
+grn_hash_add(grn_ctx *ctx, grn_hash *hash, const void *key,
+ unsigned int key_size, void **value, int *added)
+{
+ uint32_t hash_value;
+ if (!key || !key_size) {
+ return GRN_ID_NIL;
+ }
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (key_size > hash->key_size) {
+ ERR(GRN_INVALID_ARGUMENT, "too long key");
+ return GRN_ID_NIL;
+ }
+ hash_value = grn_hash_calculate_hash_value(key, key_size);
+ } else {
+ if (key_size != hash->key_size) {
+ ERR(GRN_INVALID_ARGUMENT, "key size unmatch");
+ return GRN_ID_NIL;
+ }
+ if (key_size == sizeof(uint32_t)) {
+ hash_value = *((uint32_t *)key);
+ } else {
+ hash_value = grn_hash_calculate_hash_value(key, key_size);
+ }
+ }
+
+ {
+ uint32_t i;
+ const uint32_t step = grn_hash_calculate_step(hash_value);
+ grn_id id, *index, *garbage_index = NULL;
+ grn_hash_entry *entry;
+
+ /* lock */
+ if ((*hash->n_entries + *hash->n_garbages) * 2 > *hash->max_offset) {
+ grn_hash_reset(ctx, hash, 0);
+ }
+
+ for (i = hash_value; ; i += step) {
+ index = grn_hash_idx_at(ctx, hash, i);
+ if (!index) {
+ return GRN_ID_NIL;
+ }
+ id = *index;
+ if (!id) {
+ break;
+ }
+ if (id == GARBAGE) {
+ if (!garbage_index) {
+ garbage_index = index;
+ }
+ continue;
+ }
+
+ entry = grn_hash_entry_at(ctx, hash, id, GRN_TABLE_ADD);
+ if (!entry) {
+ return GRN_ID_NIL;
+ }
+ if (grn_hash_entry_compare_key(ctx, hash, entry, hash_value,
+ key, key_size)) {
+ if (value) {
+ *value = grn_hash_entry_get_value(hash, entry);
+ }
+ if (added) {
+ *added = 0;
+ }
+ return id;
+ }
+ }
+
+ if (grn_hash_is_io_hash(hash)) {
+ id = grn_io_hash_add(ctx, hash, hash_value, key, key_size, value);
+ } else {
+ id = grn_tiny_hash_add(ctx, hash, hash_value, key, key_size, value);
+ }
+ if (!id) {
+ return GRN_ID_NIL;
+ }
+ if (garbage_index) {
+ (*hash->n_garbages)--;
+ index = garbage_index;
+ }
+ *index = id;
+ (*hash->n_entries)++;
+ /* unlock */
+
+ if (added) {
+ *added = 1;
+ }
+ return id;
+ }
+}
+
+grn_id
+grn_hash_get(grn_ctx *ctx, grn_hash *hash, const void *key,
+ unsigned int key_size, void **value)
+{
+ uint32_t hash_value;
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (key_size > hash->key_size) {
+ return GRN_ID_NIL;
+ }
+ hash_value = grn_hash_calculate_hash_value(key, key_size);
+ } else {
+ if (key_size != hash->key_size) {
+ return GRN_ID_NIL;
+ }
+ if (key_size == sizeof(uint32_t)) {
+ hash_value = *((uint32_t *)key);
+ } else {
+ hash_value = grn_hash_calculate_hash_value(key, key_size);
+ }
+ }
+
+ {
+ uint32_t i;
+ const uint32_t step = grn_hash_calculate_step(hash_value);
+ for (i = hash_value; ; i += step) {
+ grn_id id;
+ grn_id * const index = grn_hash_idx_at(ctx, hash, i);
+ if (!index) {
+ return GRN_ID_NIL;
+ }
+ id = *index;
+ if (!id) {
+ return GRN_ID_NIL;
+ }
+ if (id != GARBAGE) {
+ grn_hash_entry * const entry = grn_hash_entry_at(ctx, hash, id, 0);
+ if (entry) {
+ if (grn_hash_entry_compare_key(ctx, hash, entry, hash_value,
+ key, key_size)) {
+ if (value) {
+ *value = grn_hash_entry_get_value(hash, entry);
+ }
+ return id;
+ }
+ }
+ }
+ }
+ }
+}
+
+inline static grn_hash_entry *
+grn_hash_get_entry(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ if (!grn_hash_bitmap_at(ctx, hash, id)) {
+ return NULL;
+ }
+ return grn_hash_entry_at(ctx, hash, id, 0);
+}
+
+const char *
+_grn_hash_key(grn_ctx *ctx, grn_hash *hash, grn_id id, uint32_t *key_size)
+{
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ *key_size = 0;
+ return NULL;
+ }
+ *key_size = grn_hash_entry_get_key_size(hash, entry);
+ return grn_hash_entry_get_key(ctx, hash, entry);
+}
+
+int
+grn_hash_get_key(grn_ctx *ctx, grn_hash *hash, grn_id id, void *keybuf, int bufsize)
+{
+ int key_size;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return 0;
+ }
+ key_size = grn_hash_entry_get_key_size(hash, entry);
+ if (bufsize >= key_size) {
+ memcpy(keybuf, grn_hash_entry_get_key(ctx, hash, entry), key_size);
+ }
+ return key_size;
+}
+
+int
+grn_hash_get_key2(grn_ctx *ctx, grn_hash *hash, grn_id id, grn_obj *bulk)
+{
+ int key_size;
+ char *key;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return 0;
+ }
+ key_size = grn_hash_entry_get_key_size(hash, entry);
+ key = grn_hash_entry_get_key(ctx, hash, entry);
+ if (bulk->header.impl_flags & GRN_OBJ_REFER) {
+ bulk->u.b.head = key;
+ bulk->u.b.curr = key + key_size;
+ } else {
+ grn_bulk_write(ctx, bulk, key, key_size);
+ }
+ return key_size;
+}
+
+int
+grn_hash_get_value(grn_ctx *ctx, grn_hash *hash, grn_id id, void *valuebuf)
+{
+ void *value;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return 0;
+ }
+ value = grn_hash_entry_get_value(hash, entry);
+ if (!value) {
+ return 0;
+ }
+ if (valuebuf) {
+ memcpy(valuebuf, value, hash->value_size);
+ }
+ return hash->value_size;
+}
+
+const char *
+grn_hash_get_value_(grn_ctx *ctx, grn_hash *hash, grn_id id, uint32_t *size)
+{
+ const void *value;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return NULL;
+ }
+ value = grn_hash_entry_get_value(hash, entry);
+ if (!value) {
+ return NULL;
+ }
+ *size = hash->value_size;
+ return (const char *)value;
+}
+
+int
+grn_hash_get_key_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ void *keybuf, int bufsize, void *valuebuf)
+{
+ void *value;
+ int key_size;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return 0;
+ }
+ key_size = grn_hash_entry_get_key_size(hash, entry);
+ if (bufsize >= key_size) {
+ memcpy(keybuf, grn_hash_entry_get_key(ctx, hash, entry), key_size);
+ }
+ value = grn_hash_entry_get_value(hash, entry);
+ if (!value) {
+ return 0;
+ }
+ if (valuebuf) {
+ memcpy(valuebuf, value, hash->value_size);
+ }
+ return key_size;
+}
+
+int
+_grn_hash_get_key_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ void **key, void **value)
+{
+ int key_size;
+ grn_hash_entry * const entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return 0;
+ }
+ key_size = grn_hash_entry_get_key_size(hash, entry);
+ *key = grn_hash_entry_get_key(ctx, hash, entry);
+ *value = grn_hash_entry_get_value(hash, entry);
+ return *value ? key_size : 0;
+}
+
+grn_rc
+grn_hash_set_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ const void *value, int flags)
+{
+ void *entry_value;
+ grn_hash_entry *entry;
+ if (!value) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ entry = grn_hash_get_entry(ctx, hash, id);
+ if (!entry) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ entry_value = grn_hash_entry_get_value(hash, entry);
+ if (!entry_value) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+
+ switch (flags & GRN_OBJ_SET_MASK) {
+ case GRN_OBJ_SET :
+ memcpy(entry_value, value, hash->value_size);
+ return GRN_SUCCESS;
+ case GRN_OBJ_INCR :
+ switch (hash->value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)entry_value) += *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)entry_value) += *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ case GRN_OBJ_DECR :
+ switch (hash->value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)entry_value) -= *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)entry_value) -= *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "flags = %d", flags);
+ return ctx->rc;
+ }
+}
+
+#define DELETE_IT do {\
+ *ep = GARBAGE;\
+ if (grn_hash_is_io_hash(hash)) {\
+ uint32_t size = key_size - 1;\
+ struct grn_hash_header *hh = hash->header;\
+ ee->key = hh->garbages[size];\
+ hh->garbages[size] = e;\
+ grn_io_array_bit_off(ctx, hash->io, GRN_HASH_BITMAP_SEGMENT, e);\
+ } else {\
+ ee->key = hash->garbages;\
+ hash->garbages = e;\
+ if ((hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) && !(ee->flag & HASH_IMMEDIATE)) {\
+ grn_ctx *ctx = hash->ctx;\
+ GRN_CTX_FREE(ctx, ((entry_astr *)ee)->str);\
+ }\
+ grn_tiny_bitmap_get_and_set(&hash->bitmap, e, 0);\
+ }\
+ (*hash->n_entries)--;\
+ (*hash->n_garbages)++;\
+ rc = GRN_SUCCESS;\
+} while (0)
+
+grn_rc
+grn_hash_delete_by_id(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ entry_str *ee;
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ if (!hash || !id) { return rc; }
+ /* lock */
+ ee = grn_hash_entry_at(ctx, hash, id, 0);
+ if (ee) {
+ grn_id e, *ep;
+ uint32_t i, key_size, h = ee->key, s = grn_hash_calculate_step(h);
+ key_size = (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : hash->key_size;
+ for (i = h; ; i += s) {
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(e = *ep)) { break; }
+ if (e == id) {
+ DELETE_IT;
+ break;
+ }
+ }
+ }
+ /* unlock */
+ return rc;
+}
+
+grn_rc
+grn_hash_delete(grn_ctx *ctx, grn_hash *hash, const void *key, uint32_t key_size,
+ grn_table_delete_optarg *optarg)
+{
+ uint32_t h, i, m, s;
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ if (hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ if (key_size > hash->key_size) { return GRN_INVALID_ARGUMENT; }
+ h = grn_hash_calculate_hash_value(key, key_size);
+ } else {
+ if (key_size != hash->key_size) { return GRN_INVALID_ARGUMENT; }
+ if (key_size == sizeof(uint32_t)) {
+ h = *((uint32_t *)key);
+ } else {
+ h = grn_hash_calculate_hash_value(key, key_size);
+ }
+ }
+ s = grn_hash_calculate_step(h);
+ {
+ grn_id e, *ep;
+ /* lock */
+ m = *hash->max_offset;
+ for (i = h; ; i += s) {
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(e = *ep)) { break; }
+ if (e == GARBAGE) { continue; }
+ {
+ entry_str * const ee = grn_hash_entry_at(ctx, hash, e, 0);
+ if (ee && match_key(ctx, hash, ee, h, key, key_size)) {
+ DELETE_IT;
+ break;
+ }
+ }
+ }
+ /* unlock */
+ return rc;
+ }
+}
+
+/* only valid for hash tables, GRN_OBJ_KEY_VAR_SIZE && GRN_HASH_TINY */
+const char *
+_grn_hash_strkey_by_val(void *v, uint16_t *size)
+{
+ entry_astr *n = (entry_astr *)((uintptr_t)v -
+ (uintptr_t)&((entry_astr *)0)->dummy);
+ *size = n->size;
+ return (n->flag & HASH_IMMEDIATE) ? (char *)&n->str : n->str;
+}
+
+void
+grn_hash_cursor_close(grn_ctx *ctx, grn_hash_cursor *c)
+{
+ GRN_ASSERT(c->ctx == ctx);
+ GRN_FREE(c);
+}
+
+#define HASH_CURR_MAX(hash) \
+ ((grn_hash_is_io_hash(hash)) ? (hash)->header->curr_rec : (hash)->a.max)
+
+grn_hash_cursor *
+grn_hash_cursor_open(grn_ctx *ctx, grn_hash *hash,
+ const void *min, uint32_t min_size,
+ const void *max, uint32_t max_size,
+ int offset, int limit, int flags)
+{
+ grn_hash_cursor *c;
+ if (!hash || !ctx) { return NULL; }
+ if (!(c = GRN_MALLOCN(grn_hash_cursor, 1))) { return NULL; }
+ GRN_DB_OBJ_SET_TYPE(c, GRN_CURSOR_TABLE_HASH_KEY);
+ c->hash = hash;
+ c->ctx = ctx;
+ c->obj.header.flags = flags;
+ c->obj.header.domain = GRN_ID_NIL;
+ if (flags & GRN_CURSOR_DESCENDING) {
+ c->dir = -1;
+ if (max) {
+ if (!(c->curr_rec = grn_hash_get(ctx, hash, max, max_size, NULL))) {
+ c->tail = GRN_ID_NIL;
+ goto exit;
+ }
+ if (!(flags & GRN_CURSOR_LT)) { c->curr_rec++; }
+ } else {
+ c->curr_rec = HASH_CURR_MAX(hash) + 1;
+ }
+ if (min) {
+ if (!(c->tail = grn_hash_get(ctx, hash, min, min_size, NULL))) {
+ c->curr_rec = GRN_ID_NIL;
+ goto exit;
+ }
+ if ((flags & GRN_CURSOR_GT)) { c->tail++; }
+ } else {
+ c->tail = GRN_ID_NIL + 1;
+ }
+ if (c->curr_rec < c->tail) { c->tail = c->curr_rec; }
+ } else {
+ c->dir = 1;
+ if (min) {
+ if (!(c->curr_rec = grn_hash_get(ctx, hash, min, min_size, NULL))) {
+ c->tail = GRN_ID_NIL;
+ goto exit;
+ }
+ if (!(flags & GRN_CURSOR_GT)) { c->curr_rec--; }
+ } else {
+ c->curr_rec = GRN_ID_NIL;
+ }
+ if (max) {
+ if (!(c->tail = grn_hash_get(ctx, hash, max, max_size, NULL))) {
+ c->curr_rec = GRN_ID_NIL;
+ goto exit;
+ }
+ if ((flags & GRN_CURSOR_LT)) { c->tail--; }
+ } else {
+ c->tail = HASH_CURR_MAX(hash);
+ }
+ if (c->tail < c->curr_rec) { c->tail = c->curr_rec; }
+ }
+ if (*hash->n_entries != HASH_CURR_MAX(hash)) {
+ while (offset && c->curr_rec != c->tail) {
+ c->curr_rec += c->dir;
+ if (grn_hash_bitmap_at(ctx, c->hash, c->curr_rec)) { offset--; }
+ }
+ } else {
+ c->curr_rec += c->dir * offset;
+ }
+exit :
+ c->rest = (limit < 0) ? GRN_ARRAY_MAX : limit;
+ return c;
+}
+
+grn_id
+grn_hash_cursor_next(grn_ctx *ctx, grn_hash_cursor *c)
+{
+ if (c && c->rest) {
+ while (c->curr_rec != c->tail) {
+ c->curr_rec += c->dir;
+ if (*c->hash->n_entries != HASH_CURR_MAX(c->hash)) {
+ if (!grn_hash_bitmap_at(ctx, c->hash, c->curr_rec)) { continue; }
+ }
+ c->rest--;
+ return c->curr_rec;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_hash_next(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ grn_id max = HASH_CURR_MAX(hash);
+ while (++id <= max) {
+ if (grn_hash_bitmap_at(ctx, hash, id)) { return id; }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_hash_at(grn_ctx *ctx, grn_hash *hash, grn_id id)
+{
+ return grn_hash_bitmap_at(ctx, hash, id) ? id : GRN_ID_NIL;
+}
+
+int
+grn_hash_cursor_get_key(grn_ctx *ctx, grn_hash_cursor *c, void **key)
+{
+ int key_size;
+ entry_str *ee;
+ if (!c) { return 0; }
+ ee = grn_hash_entry_at(ctx, c->hash, c->curr_rec, 0);
+ if (!ee) { return 0; }
+ key_size = (c->hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : c->hash->key_size;
+ *key = get_key(ctx, c->hash, ee);
+ return key_size;
+}
+
+int
+grn_hash_cursor_get_value(grn_ctx *ctx, grn_hash_cursor *c, void **value)
+{
+ void *v;
+ entry_str *ee;
+ if (!c) { return 0; }
+ ee = grn_hash_entry_at(ctx, c->hash, c->curr_rec, 0);
+ if (ee && (v = get_value(c->hash, ee))) {
+ *value = v;
+ return c->hash->value_size;
+ }
+ return 0;
+}
+
+int
+grn_hash_cursor_get_key_value(grn_ctx *ctx, grn_hash_cursor *c,
+ void **key, uint32_t *key_size, void **value)
+{
+ entry_str *ee;
+ if (!c) { return GRN_INVALID_ARGUMENT; }
+ ee = grn_hash_entry_at(ctx, c->hash, c->curr_rec, 0);
+ if (!ee) { return GRN_INVALID_ARGUMENT; }
+ if (key_size) {
+ *key_size = (c->hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) ? ee->size : c->hash->key_size;
+ }
+ if (key) { *key = get_key(ctx, c->hash, ee); }
+ if (value) { *value = get_value(c->hash, ee); }
+ return c->hash->value_size;
+}
+
+grn_rc
+grn_hash_cursor_set_value(grn_ctx *ctx, grn_hash_cursor *c,
+ const void *value, int flags)
+{
+ if (!c) { return GRN_INVALID_ARGUMENT; }
+ return grn_hash_set_value(ctx, c->hash, c->curr_rec, value, flags);
+}
+
+grn_rc
+grn_hash_cursor_delete(grn_ctx *ctx, grn_hash_cursor *c,
+ grn_table_delete_optarg *optarg)
+{
+ if (!c) { return GRN_INVALID_ARGUMENT; }
+ return grn_hash_delete_by_id(ctx, c->hash, c->curr_rec, optarg);
+}
+
+/* sort */
+
+#define PREPARE_VAL(e,ep,es) do {\
+ if ((arg->flags & GRN_TABLE_SORT_BY_VALUE)) {\
+ ep = ((const uint8_t *)(get_value(hash, (entry_str *)(e))));\
+ es = hash->value_size;\
+ } else {\
+ ep = ((const uint8_t *)(get_key(ctx, hash, (entry_str *)(e))));\
+ es = ((hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE)\
+ ? ((entry_str *)(e))->size : hash->key_size); \
+ }\
+ ep += arg->offset;\
+ es -= arg->offset;\
+} while (0)
+
+#define COMPARE_VAL_(ap,as,bp,bs)\
+ (arg->compar\
+ ? arg->compar(ctx,\
+ (grn_obj *)hash, (void *)(ap), as,\
+ (grn_obj *)hash, (void *)(bp), bs, arg->compar_arg)\
+ : ((arg->flags & GRN_TABLE_SORT_AS_NUMBER)\
+ ? ((arg->flags & GRN_TABLE_SORT_AS_UNSIGNED)\
+ ? ((arg->flags & GRN_TABLE_SORT_AS_INT64)\
+ ? *((uint64_t *)(ap)) > *((uint64_t *)(bp))\
+ : *((uint32_t *)(ap)) > *((uint32_t *)(bp)))\
+ : ((arg->flags & GRN_TABLE_SORT_AS_INT64)\
+ ? *((int64_t *)(ap)) > *((int64_t *)(bp))\
+ : *((int32_t *)(ap)) > *((int32_t *)(bp))))\
+ : grn_str_greater(ap, as, bp, bs)))
+
+#define COMPARE_VAL(ap,as,bp,bs)\
+ ((dir) ? COMPARE_VAL_((bp),(bs),(ap),(as)) : COMPARE_VAL_((ap),(as),(bp),(bs)))
+
+inline static entry **
+pack(grn_ctx *ctx, grn_hash *hash, entry **res, grn_table_sort_optarg *arg, int dir)
+{
+ uint32_t n;
+ uint32_t cs, es;
+ const uint8_t *cp, *ep;
+ entry **head, **tail, *e, *c;
+ grn_id id, m = HASH_CURR_MAX(hash);
+ for (id = m >> 1;;id = (id == m) ? 1 : id + 1) {
+ if (grn_hash_bitmap_at(ctx, hash, id)) { break; }
+ }
+ c = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!c) { return NULL; }
+ PREPARE_VAL(c, cp, cs);
+ head = res;
+ n = *hash->n_entries - 1;
+ tail = res + n;
+ while (n--) {
+ do {
+ id = (id == m) ? 1 : id + 1;
+ } while (!grn_hash_bitmap_at(ctx, hash, id));
+ e = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!e) { return NULL; }
+ PREPARE_VAL(e, ep, es);
+ if (COMPARE_VAL(cp, cs, ep, es)) {
+ *head++ = e;
+ } else {
+ *tail-- = e;
+ }
+ }
+ *head = c;
+ return *hash->n_entries > 2 ? head : NULL;
+}
+
+inline static void
+swap(entry **a, entry **b)
+{
+ entry *c_ = *a;
+ *a = *b;
+ *b = c_;
+}
+
+#define SWAP(a,ap,as,b,bp,bs) do {\
+ const uint8_t *cp_ = ap;\
+ uint32_t cs_ = as;\
+ ap = bp; bp = cp_;\
+ as = bs; bs = cs_;\
+ swap(a,b);\
+} while (0)
+
+inline static entry **
+part(grn_ctx *ctx, entry **b, entry **e, grn_table_sort_optarg *arg, grn_hash *hash, int dir)
+{
+ entry **c;
+ const uint8_t *bp, *cp, *ep;
+ uint32_t bs, cs, es;
+ intptr_t d = e - b;
+ PREPARE_VAL(*b, bp, bs);
+ PREPARE_VAL(*e, ep, es);
+ if (COMPARE_VAL(bp, bs, ep, es)) {
+ SWAP(b, bp, bs, e, ep, es);
+ }
+ if (d < 2) { return NULL; }
+ c = b + (d >> 1);
+ PREPARE_VAL(*c, cp, cs);
+ if (COMPARE_VAL(bp, bs, cp, cs)) {
+ SWAP(b, bp, bs, c, cp, cs);
+ } else {
+ if (COMPARE_VAL(cp, cs, ep, es)) {
+ SWAP(c, cp, cs, e, ep, es);
+ }
+ }
+ if (d < 3) { return NULL; }
+ b++;
+ swap(b, c);
+ c = b;
+ PREPARE_VAL(*c, cp, cs);
+ for (;;) {
+ do {
+ b++;
+ PREPARE_VAL(*b, bp, bs);
+ } while (COMPARE_VAL(cp, cs, bp, bs));
+ do {
+ e--;
+ PREPARE_VAL(*e, ep, es);
+ } while (COMPARE_VAL(ep, es, cp, cs));
+ if (b >= e) { break; }
+ SWAP(b, bp, bs, e, ep, es);
+ }
+ SWAP(c, cp, cs, e, ep, es);
+ return e;
+}
+
+static void
+_sort(grn_ctx *ctx, entry **head, entry **tail, int limit,
+ grn_table_sort_optarg *arg, grn_hash *hash, int dir)
+{
+ entry **c;
+ if (head < tail && (c = part(ctx, head, tail, arg, hash, dir))) {
+ intptr_t rest = limit - 1 - (c - head);
+ _sort(ctx, head, c - 1, limit, arg, hash, dir);
+ if (rest > 0) { _sort(ctx, c + 1, tail, (int)rest, arg, hash, dir); }
+ }
+}
+
+static void
+sort(grn_ctx *ctx,
+ grn_hash *hash, entry **res, int limit, grn_table_sort_optarg *arg, int dir)
+{
+ entry **c = pack(ctx, hash, res, arg, dir);
+ if (c) {
+ intptr_t rest = limit - 1 - (c - res);
+ _sort(ctx, res, c - 1, limit, arg, hash, dir);
+ if (rest > 0 ) {
+ _sort(ctx, c + 1, res + *hash->n_entries - 1, (int)rest, arg, hash, dir);
+ }
+ }
+}
+
+typedef struct {
+ grn_id id;
+ int32_t v;
+} val32;
+
+#define PREPARE_VAL32(id,e,ep) do {\
+ (ep)->id = id;\
+ (ep)->v = (arg->flags & GRN_TABLE_SORT_BY_ID)\
+ ? (int32_t) id\
+ : (*((int32_t *)((byte *)((arg->flags & GRN_TABLE_SORT_BY_VALUE)\
+ ? get_value(hash, (e))\
+ : get_key(ctx, hash, (e))) + arg->offset)));\
+} while (0)
+
+#define COMPARE_VAL32_(ap,bp) \
+ (arg->compar\
+ ? arg->compar(ctx,\
+ (grn_obj *)hash, (void *)&(ap)->v, sizeof(uint32_t),\
+ (grn_obj *)hash, (void *)&(bp)->v, sizeof(uint32_t),\
+ arg->compar_arg)\
+ : ((arg->flags & GRN_TABLE_SORT_AS_NUMBER)\
+ ? ((arg->flags & GRN_TABLE_SORT_AS_UNSIGNED)\
+ ? *((uint32_t *)&(ap)->v) > *((uint32_t *)&(bp)->v)\
+ : *((int32_t *)&(ap)->v) > *((int32_t *)&(bp)->v))\
+ : memcmp(&(ap)->v, &(bp)->v, sizeof(uint32_t)) > 0))
+
+#define COMPARE_VAL32(ap,bp)\
+ ((dir) ? COMPARE_VAL32_((bp),(ap)) : COMPARE_VAL32_((ap),(bp)))
+
+inline static val32 *
+pack_val32(grn_ctx *ctx, grn_hash *hash, val32 *res, grn_table_sort_optarg *arg, int dir)
+{
+ uint32_t n;
+ entry_str *e, *c;
+ val32 *head, *tail, cr, er;
+ grn_id id, m = HASH_CURR_MAX(hash);
+ for (id = m >> 1;;id = (id == m) ? 1 : id + 1) {
+ if (grn_hash_bitmap_at(ctx, hash, id)) { break; }
+ }
+ c = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!c) { return NULL; }
+ PREPARE_VAL32(id, c, &cr);
+ head = res;
+ n = *hash->n_entries - 1;
+ tail = res + n;
+ while (n--) {
+ do {
+ id = (id == m) ? 1 : id + 1;
+ } while (!grn_hash_bitmap_at(ctx, hash, id));
+ e = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!e) { return NULL; }
+ PREPARE_VAL32(id, e, &er);
+ if (COMPARE_VAL32(&cr, &er)) {
+ *head++ = er;
+ } else {
+ *tail-- = er;
+ }
+ }
+ *head = cr;
+ return *hash->n_entries > 2 ? head : NULL;
+}
+
+#define SWAP_VAL32(ap,bp) do {\
+ val32 cr_ = *ap;\
+ *ap = *bp;\
+ *bp = cr_;\
+} while (0)
+
+inline static val32 *
+part_val32(grn_ctx *ctx,
+ val32 *b, val32 *e, grn_table_sort_optarg *arg, grn_hash *hash, int dir)
+{
+ val32 *c;
+ intptr_t d = e - b;
+ if (COMPARE_VAL32(b, e)) { SWAP_VAL32(b, e); }
+ if (d < 2) { return NULL; }
+ c = b + (d >> 1);
+ if (COMPARE_VAL32(b, c)) {
+ SWAP_VAL32(b, c);
+ } else {
+ if (COMPARE_VAL32(c, e)) { SWAP_VAL32(c, e); }
+ }
+ if (d < 3) { return NULL; }
+ b++;
+ SWAP_VAL32(b, c);
+ c = b;
+ for (;;) {
+ do { b++; } while (COMPARE_VAL32(c, b));
+ do { e--; } while (COMPARE_VAL32(e, c));
+ if (b >= e) { break; }
+ SWAP_VAL32(b, e);
+ }
+ SWAP_VAL32(c, e);
+ return e;
+}
+
+static void
+_sort_val32(grn_ctx *ctx, val32 *head, val32 *tail, int limit,
+ grn_table_sort_optarg *arg, grn_hash *hash, int dir)
+{
+ val32 *c;
+ if (head < tail && (c = part_val32(ctx, head, tail, arg, hash, dir))) {
+ intptr_t rest = limit - 1 - (c - head);
+ _sort_val32(ctx, head, c - 1, limit, arg, hash, dir);
+ if (rest > 0) { _sort_val32(ctx, c + 1, tail, (int)rest, arg, hash, dir); }
+ }
+}
+
+static void
+sort_val32(grn_ctx *ctx,
+ grn_hash *hash, val32 *res, int limit, grn_table_sort_optarg *arg, int dir)
+{
+ val32 *c = pack_val32(ctx, hash, res, arg, dir);
+ if (c) {
+ intptr_t rest = limit - 1 - (c - res);
+ _sort_val32(ctx, res, c - 1, limit, arg, hash, dir);
+ if (rest > 0 ) {
+ _sort_val32(ctx, c + 1, res + *hash->n_entries - 1, (int)rest, arg, hash, dir);
+ }
+ }
+}
+
+inline static grn_id
+entry2id(grn_ctx *ctx, grn_hash *hash, entry *e)
+{
+ entry *e2;
+ grn_id id, *ep;
+ uint32_t i, h = e->key, s = grn_hash_calculate_step(h);
+ for (i = h; ; i += s) {
+ if (!(ep = grn_hash_idx_at(ctx, hash, i))) { return GRN_ID_NIL; }
+ if (!(id = *ep)) { break; }
+ if (id != GARBAGE) {
+ e2 = grn_hash_entry_at(ctx, hash, id, 0);
+ if (!e2) { return GRN_ID_NIL; }
+ if (e2 == e) { break; }
+ }
+ }
+ return id;
+}
+
+int
+grn_hash_sort(grn_ctx *ctx, grn_hash *hash,
+ int limit, grn_array *result, grn_table_sort_optarg *optarg)
+{
+ entry **res;
+ if (!result || !*hash->n_entries) { return 0; }
+ if (!(res = GRN_MALLOC(sizeof(entry *) * *hash->n_entries))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "allocation of entries failed on grn_hash_sort !");
+ return 0;
+ }
+ if (limit < 0) {
+ limit += *hash->n_entries + 1;
+ if (limit < 0) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "limit is too small in grn_hash_sort !");
+ return 0;
+ }
+ }
+ if (limit > *hash->n_entries) { limit = *hash->n_entries; }
+ /* hash->limit = limit; */
+ if (optarg) {
+ int dir = (optarg->flags & GRN_TABLE_SORT_DESC);
+ if ((optarg->flags & GRN_TABLE_SORT_BY_ID) ||
+ (optarg->flags & GRN_TABLE_SORT_BY_VALUE)
+ ? ((hash->value_size - optarg->offset) == sizeof(uint32_t))
+ : (!(hash->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE)
+ && hash->key_size == sizeof(uint32_t))) {
+ if (sizeof(entry *) != sizeof(val32)) {
+ GRN_FREE(res);
+ if (!(res = GRN_MALLOC(sizeof(val32) * *hash->n_entries))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "allocation of entries failed on grn_hash_sort !");
+ return 0;
+ }
+ }
+ sort_val32(ctx, hash, (val32 *)res, limit, optarg, dir);
+ {
+ int i;
+ grn_id *v;
+ val32 *rp = (val32 *)res;
+ for (i = 0; i < limit; i++, rp++) {
+ if (!grn_array_add(ctx, result, (void **)&v)) { break; }
+ if (!(*v = rp->id)) { break; }
+ }
+ GRN_FREE(res);
+ return i;
+ }
+ } else {
+ sort(ctx, hash, res, limit, optarg, dir);
+ }
+ } else {
+ grn_table_sort_optarg opt = {0, NULL, NULL, NULL, 0};
+ sort(ctx, hash, res, limit, &opt, 0);
+ }
+ {
+ int i;
+ grn_id *v;
+ entry **rp = res;
+ for (i = 0; i < limit; i++, rp++) {
+ if (!grn_array_add(ctx, result, (void **)&v)) { break; }
+ if (!(*v = entry2id(ctx, hash, *rp))) { break; }
+ }
+ GRN_FREE(res);
+ return i;
+ }
+}
+
+void
+grn_hash_check(grn_ctx *ctx, grn_hash *hash)
+{
+ char buf[8];
+ struct grn_hash_header *h = hash->header;
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 1);
+ GRN_OUTPUT_MAP_OPEN("SUMMARY", 25);
+ GRN_OUTPUT_CSTR("flags");
+ grn_itoh(h->flags, buf, 8);
+ GRN_OUTPUT_STR(buf, 8);
+ GRN_OUTPUT_CSTR("key_size");
+ GRN_OUTPUT_INT64(hash->key_size);
+ GRN_OUTPUT_CSTR("value_size");
+ GRN_OUTPUT_INT64(hash->value_size);
+ GRN_OUTPUT_CSTR("tokenizer");
+ GRN_OUTPUT_INT64(h->tokenizer);
+ GRN_OUTPUT_CSTR("normalizer");
+ GRN_OUTPUT_INT64(h->normalizer);
+ GRN_OUTPUT_CSTR("curr_rec");
+ GRN_OUTPUT_INT64(h->curr_rec);
+ GRN_OUTPUT_CSTR("curr_key");
+ GRN_OUTPUT_INT64(h->curr_key);
+ GRN_OUTPUT_CSTR("idx_offset");
+ GRN_OUTPUT_INT64(h->idx_offset);
+ GRN_OUTPUT_CSTR("entry_size");
+ GRN_OUTPUT_INT64(hash->entry_size);
+ GRN_OUTPUT_CSTR("max_offset");
+ GRN_OUTPUT_INT64(*hash->max_offset);
+ GRN_OUTPUT_CSTR("n_entries");
+ GRN_OUTPUT_INT64(*hash->n_entries);
+ GRN_OUTPUT_CSTR("n_garbages");
+ GRN_OUTPUT_INT64(*hash->n_garbages);
+ GRN_OUTPUT_CSTR("lock");
+ GRN_OUTPUT_INT64(h->lock);
+ GRN_OUTPUT_MAP_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+}
+
+/* rhash : grn_hash with subrecs */
+
+#ifdef USE_GRN_INDEX2
+
+static uint32_t default_flags = GRN_HASH_TINY;
+
+grn_rc
+grn_rhash_init(grn_ctx *ctx, grn_hash *hash, grn_rec_unit record_unit, int record_size,
+ grn_rec_unit subrec_unit, int subrec_size, unsigned int max_n_subrecs)
+{
+ grn_rc rc;
+ record_size = grn_rec_unit_size(record_unit, record_size);
+ subrec_size = grn_rec_unit_size(subrec_unit, subrec_size);
+ if (record_unit != grn_rec_userdef && subrec_unit != grn_rec_userdef) {
+ subrec_size -= record_size;
+ }
+ if (!hash) { return GRN_INVALID_ARGUMENT; }
+ if (record_size < 0) { return GRN_INVALID_ARGUMENT; }
+ if ((default_flags & GRN_HASH_TINY)) {
+ rc = grn_tiny_hash_init(ctx, hash, NULL, record_size,
+ max_n_subrecs * (GRN_RSET_SCORE_SIZE + subrec_size),
+ default_flags, GRN_ENC_NONE);
+ } else {
+ rc = grn_io_hash_init(ctx, hash, NULL, record_size,
+ max_n_subrecs * (GRN_RSET_SCORE_SIZE + subrec_size),
+ default_flags, GRN_ENC_NONE, 0);
+ }
+ if (rc) { return rc; }
+ hash->record_unit = record_unit;
+ hash->subrec_unit = subrec_unit;
+ hash->subrec_size = subrec_size;
+ hash->max_n_subrecs = max_n_subrecs;
+ return rc;
+}
+
+grn_rc
+grn_rhash_fin(grn_ctx *ctx, grn_hash *hash)
+{
+ grn_rc rc;
+ if (grn_hash_is_io_hash(hash)) {
+ rc = grn_io_close(ctx, hash->io);
+ } else {
+ GRN_ASSERT(ctx == hash->ctx);
+ rc = grn_tiny_hash_fin(ctx, hash);
+ }
+ return rc;
+}
+
+inline static void
+subrecs_push(byte *subrecs, int size, int n_subrecs, int score, void *body, int dir)
+{
+ byte *v;
+ int *c2;
+ int n = n_subrecs - 1, n2;
+ while (n) {
+ n2 = (n - 1) >> 1;
+ c2 = GRN_RSET_SUBRECS_NTH(subrecs,size,n2);
+ if (GRN_RSET_SUBRECS_CMP(score, *c2, dir) > 0) { break; }
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ }
+ v = subrecs + n * (size + GRN_RSET_SCORE_SIZE);
+ *((int *)v) = score;
+ memcpy(v + GRN_RSET_SCORE_SIZE, body, size);
+}
+
+inline static void
+subrecs_replace_min(byte *subrecs, int size, int n_subrecs, int score, void *body, int dir)
+{
+ byte *v;
+ int n = 0, n1, n2, *c1, *c2;
+ for (;;) {
+ n1 = n * 2 + 1;
+ n2 = n1 + 1;
+ c1 = n1 < n_subrecs ? GRN_RSET_SUBRECS_NTH(subrecs,size,n1) : NULL;
+ c2 = n2 < n_subrecs ? GRN_RSET_SUBRECS_NTH(subrecs,size,n2) : NULL;
+ if (c1 && GRN_RSET_SUBRECS_CMP(score, *c1, dir) > 0) {
+ if (c2 &&
+ GRN_RSET_SUBRECS_CMP(score, *c2, dir) > 0 &&
+ GRN_RSET_SUBRECS_CMP(*c1, *c2, dir) > 0) {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ } else {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c1);
+ n = n1;
+ }
+ } else {
+ if (c2 && GRN_RSET_SUBRECS_CMP(score, *c2, dir) > 0) {
+ GRN_RSET_SUBRECS_COPY(subrecs,size,n,c2);
+ n = n2;
+ } else {
+ break;
+ }
+ }
+ }
+ v = subrecs + n * (size + GRN_RSET_SCORE_SIZE);
+ memcpy(v, &score, GRN_RSET_SCORE_SIZE);
+ memcpy(v + GRN_RSET_SCORE_SIZE, body, size);
+}
+
+void
+grn_rhash_add_subrec(grn_hash *s, grn_rset_recinfo *ri, int score, void *body, int dir)
+{
+ int limit = s->max_n_subrecs;
+ ri->score += score;
+ ri->n_subrecs += 1;
+ if (limit) {
+ int ssize = s->subrec_size;
+ int n_subrecs = GRN_RSET_N_SUBRECS(ri);
+ if (limit < n_subrecs) {
+ if (GRN_RSET_SUBRECS_CMP(score, *ri->subrecs, dir) > 0) {
+ subrecs_replace_min(ri->subrecs, ssize, limit, score, body, dir);
+ }
+ } else {
+ subrecs_push(ri->subrecs, ssize, n_subrecs, score, body, dir);
+ }
+ }
+}
+
+grn_hash *
+grn_rhash_group(grn_hash *s, int limit, grn_group_optarg *optarg)
+{
+ grn_ctx *ctx = s->ctx;
+ grn_hash *g, h;
+ grn_rset_recinfo *ri;
+ grn_rec_unit unit;
+ grn_hash_cursor *c;
+ grn_id rh;
+ byte *key, *ekey, *gkey = NULL;
+ int funcp, dir;
+ unsigned int rsize;
+ if (!s || !s->index) { return NULL; }
+ if (optarg) {
+ unit = grn_rec_userdef;
+ rsize = optarg->key_size;
+ funcp = optarg->func ? 1 : 0;
+ dir = (optarg->mode == grn_sort_ascending) ? -1 : 1;
+ } else {
+ unit = grn_rec_document;
+ rsize = grn_rec_unit_size(unit, sizeof(grn_id));
+ funcp = 0;
+ dir = 1;
+ }
+ if (funcp) {
+ gkey = GRN_MALLOC(rsize ? rsize : 8192);
+ if (!gkey) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "allocation for gkey failed !");
+ return NULL;
+ }
+ } else {
+ if (s->key_size <= rsize) { return NULL; }
+ }
+ if (!(c = grn_hash_cursor_open(s->ctx, s, NULL, 0, NULL, -1, 0))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_cursor_open on grn_hash_group failed !");
+ if (gkey) { GRN_FREE(gkey); }
+ return NULL;
+ }
+ memcpy(&h, s, sizeof(grn_hash));
+ g = s;
+ s = &h;
+ if (grn_rhash_init(ctx, g, unit, rsize, s->record_unit, s->key_size, limit)) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_rhash_init in grn_hash_group failed !");
+ grn_hash_cursor_close(s->ctx, c);
+ if (gkey) { GRN_FREE(gkey); }
+ return NULL;
+ }
+ while ((rh = grn_hash_cursor_next(ctx, c))) {
+ grn_hash_cursor_get_key_value(ctx, c, (void **)&key, NULL, (void **)&ri);
+ if (funcp) {
+ if (optarg->func((grn_records *)s,
+ (grn_recordh *)(intptr_t)rh, gkey, optarg->func_arg)) { continue; }
+ ekey = key;
+ } else {
+ gkey = key;
+ ekey = key + rsize;
+ }
+ {
+ grn_rset_recinfo *gri;
+ if (grn_hash_add(ctx, g, gkey, rsize, (void **)&gri, NULL)) {
+ grn_rhash_add_subrec(g, gri, ri->score, ekey, dir);
+ }
+ }
+ }
+ grn_hash_cursor_close(s->ctx, c);
+ grn_rhash_fin(s->ctx, s);
+ if (funcp) { GRN_FREE(gkey); }
+ return g;
+}
+
+grn_rc
+grn_rhash_subrec_info(grn_hash *s, grn_id rh, int index,
+ grn_id *rid, int *section, int *pos, int *score, void **subrec)
+{
+ grn_rset_posinfo *pi;
+ grn_rset_recinfo *ri;
+ int *p, unit_size = GRN_RSET_SCORE_SIZE + s->subrec_size;
+ if (!s || !rh || index < 0) { return GRN_INVALID_ARGUMENT; }
+ if ((unsigned int)index >= s->max_n_subrecs) { return GRN_INVALID_ARGUMENT; }
+ {
+ entry_str *ee;
+ if (!grn_hash_bitmap_at(ctx, s, rh)) { return GRN_INVALID_ARGUMENT; }
+ ee = grn_hash_entry_at(ctx, s, rh, 0);
+ if (!ee) { return GRN_INVALID_ARGUMENT; }
+ pi = (grn_rset_posinfo *)get_key(ctx, s, ee);
+ ri = get_value(s, ee);
+ if (!pi || !ri) { return GRN_INVALID_ARGUMENT; }
+ }
+ if (index >= ri->n_subrecs) { return GRN_INVALID_ARGUMENT; }
+ p = (int *)(ri->subrecs + index * unit_size);
+ if (score) { *score = p[0]; }
+ if (subrec) { *subrec = &p[1]; }
+ switch (s->record_unit) {
+ case grn_rec_document :
+ if (rid) { *rid = pi->rid; }
+ if (section) { *section = (s->subrec_unit != grn_rec_userdef) ? p[1] : 0; }
+ if (pos) { *pos = (s->subrec_unit == grn_rec_position) ? p[2] : 0; }
+ break;
+ case grn_rec_section :
+ if (rid) { *rid = pi->rid; }
+ if (section) { *section = pi->sid; }
+ if (pos) { *pos = (s->subrec_unit == grn_rec_position) ? p[1] : 0; }
+ break;
+ default :
+ pi = (grn_rset_posinfo *)&p[1];
+ switch (s->subrec_unit) {
+ case grn_rec_document :
+ if (rid) { *rid = pi->rid; }
+ if (section) { *section = 0; }
+ if (pos) { *pos = 0; }
+ break;
+ case grn_rec_section :
+ if (rid) { *rid = pi->rid; }
+ if (section) { *section = pi->sid; }
+ if (pos) { *pos = 0; }
+ break;
+ case grn_rec_position :
+ if (rid) { *rid = pi->rid; }
+ if (section) { *section = pi->sid; }
+ if (pos) { *pos = pi->pos; }
+ break;
+ default :
+ if (rid) { *rid = 0; }
+ if (section) { *section = 0; }
+ if (pos) { *pos = 0; }
+ break;
+ }
+ break;
+ }
+ return GRN_SUCCESS;
+}
+#endif /* USE_GRN_INDEX2 */
diff --git a/storage/mroonga/vendor/groonga/lib/hash.h b/storage/mroonga/vendor/groonga/lib/hash.h
new file mode 100644
index 00000000000..6f2e68de246
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/hash.h
@@ -0,0 +1,347 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_HASH_H
+#define GRN_HASH_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**** grn_tiny_array ****/
+
+/*
+ * grn_tiny_array_init() accepts a logical OR of the following flags.
+ * Note that other flags, such as (1 << 30), will be ignored.
+ *
+ * - GRN_TINY_ARRAY_CLEAR specifies to initialize a new block with zeros.
+ * It is valid only iff specified with GRN_TINY_ARRAY_USE_MALLOC.
+ * - GRN_TINY_ARRAY_THREADSAFE specifies to create a critical section when
+ * allocating memory.
+ * - GRN_TINY_ARRAY_USE_MALLOC specifies to use GRN_MALLOC/CALLOC/FREE instead
+ * of GRN_CTX_ALLOC/FREE.
+ */
+#define GRN_TINY_ARRAY_CLEAR (1 << 0)
+#define GRN_TINY_ARRAY_THREADSAFE (1 << 1)
+#define GRN_TINY_ARRAY_USE_MALLOC (1 << 2)
+
+/*
+ * - GRN_TINY_ARRAY_FACTOR is the global parameter of grn_tiny_array.
+ * - GRN_TINY_ARRAY_GET_OFFSET() returns the offset of a specified block.
+ * - GRN_TINY_ARRAY_BASE_BLOCK_SIZE is the number of elements in the first
+ * block.
+ * - GRN_TINY_ARRAY_GET_BLOCK_SIZE() returns the number of elements in a
+ * specified block.
+ * - GRN_TINY_ARRAY_NUM_BLOCKS is the maximum number of blocks.
+ */
+#define GRN_TINY_ARRAY_FACTOR 0
+#define GRN_TINY_ARRAY_GET_OFFSET(block_id) \
+ (1 << ((block_id) << GRN_TINY_ARRAY_FACTOR))
+#define GRN_TINY_ARRAY_BASE_BLOCK_SIZE \
+ (GRN_TINY_ARRAY_GET_OFFSET(1) - GRN_TINY_ARRAY_GET_OFFSET(0))
+#define GRN_TINY_ARRAY_GET_BLOCK_SIZE(block_id) \
+ (GRN_TINY_ARRAY_BASE_BLOCK_SIZE * GRN_TINY_ARRAY_GET_OFFSET(block_id))
+#define GRN_TINY_ARRAY_NUM_BLOCKS (32 >> GRN_TINY_ARRAY_FACTOR)
+
+/*
+ * grn_tiny_array uses several blocks to emulate an array.
+ * The k-th block, blocks[k - 1], consists of 2^(k-1) elements.
+ */
+typedef struct _grn_tiny_array grn_tiny_array;
+
+struct _grn_tiny_array {
+ grn_ctx *ctx;
+ grn_id max;
+ uint16_t element_size;
+ uint16_t flags;
+ void *blocks[GRN_TINY_ARRAY_NUM_BLOCKS];
+ grn_critical_section lock;
+};
+
+#define GRN_TINY_ARRAY_EACH(array, head, tail, key, value, block) do { \
+ int _block_id; \
+ const grn_id _head = (head); \
+ const grn_id _tail = (tail); \
+ for (_block_id = 0, (key) = (_head); \
+ _block_id < GRN_TINY_ARRAY_NUM_BLOCKS && (key) <= (_tail); \
+ _block_id++) { \
+ int _id = GRN_TINY_ARRAY_GET_BLOCK_SIZE(_block_id); \
+ (value) = (array)->blocks[_block_id]; \
+ if (value) { \
+ while (_id-- && (key) <= (_tail)) { \
+ { \
+ block \
+ } \
+ (key)++; \
+ (value) = (void *)((byte *)(value) + (array)->element_size); \
+ } \
+ } else { \
+ (key) += _id; \
+ } \
+ } \
+} while (0)
+
+GRN_API void grn_tiny_array_init(grn_ctx *ctx, grn_tiny_array *array,
+ uint16_t element_size, uint16_t flags);
+GRN_API void grn_tiny_array_fin(grn_tiny_array *array);
+GRN_API void *grn_tiny_array_at(grn_tiny_array *array, grn_id id);
+GRN_API grn_id grn_tiny_array_id(grn_tiny_array *array,
+ const void *element_address);
+
+/**** grn_tiny_bitmap ****/
+
+typedef struct _grn_tiny_bitmap grn_tiny_bitmap;
+
+struct _grn_tiny_bitmap {
+ grn_ctx *ctx;
+ void *blocks[GRN_TINY_ARRAY_NUM_BLOCKS];
+};
+
+/**** grn_array ****/
+
+#define GRN_ARRAY_TINY (0x01<<6)
+
+/*
+ * grn_array uses grn_io or grn_tiny_array to represent an array.
+ *
+ * To create a grn_tiny_array-based grn_array, specify the GRN_ARRAY_TINY flag
+ * to grn_array_create(). Note that a grn_tiny_array-based grn_array is not
+ * backed by a file.
+ */
+struct _grn_array {
+ grn_db_obj obj;
+ grn_ctx *ctx;
+ uint32_t value_size;
+ int32_t n_keys;
+ grn_table_sort_key *keys;
+ uint32_t *n_garbages;
+ uint32_t *n_entries;
+
+ /* For grn_io_array. */
+ grn_io *io;
+ struct grn_array_header *header;
+ uint32_t *lock;
+
+ /* For grn_tiny_array. */
+ uint32_t n_garbages_buf;
+ uint32_t n_entries_buf;
+ grn_id garbages;
+ grn_tiny_array array;
+ grn_tiny_bitmap bitmap;
+};
+
+struct _grn_array_cursor {
+ grn_db_obj obj;
+ grn_array *array;
+ grn_ctx *ctx;
+ grn_id curr_rec;
+ grn_id tail;
+ unsigned int rest;
+ int dir;
+};
+
+#define GRN_ARRAY_SIZE(array) (*((array)->n_entries))
+
+grn_rc grn_array_truncate(grn_ctx *ctx, grn_array *array);
+grn_rc grn_array_copy_sort_key(grn_ctx *ctx, grn_array *array,
+ grn_table_sort_key *keys, int n_keys);
+
+/* grn_table_queue */
+
+typedef struct _grn_table_queue grn_table_queue;
+
+struct _grn_table_queue {
+ grn_mutex mutex;
+ grn_cond cond;
+ grn_id head;
+ grn_id tail;
+ grn_id cap;
+ grn_bool unblock_requested;
+};
+
+GRN_API void grn_array_queue_lock_clear(grn_ctx *ctx, grn_array *array);
+GRN_API void grn_array_clear_curr_rec(grn_ctx *ctx, grn_array *array);
+GRN_API grn_table_queue *grn_array_queue(grn_ctx *ctx, grn_array *array);
+GRN_API uint32_t grn_table_queue_size(grn_table_queue *queue);
+GRN_API void grn_table_queue_head_increment(grn_table_queue *queue);
+GRN_API void grn_table_queue_tail_increment(grn_table_queue *queue);
+GRN_API grn_id grn_table_queue_head(grn_table_queue *queue);
+GRN_API grn_id grn_table_queue_tail(grn_table_queue *queue);
+
+/**** grn_hash ****/
+
+#define GRN_HASH_TINY (0x01<<6)
+#define GRN_HASH_MAX_KEY_SIZE GRN_TABLE_MAX_KEY_SIZE
+
+struct _grn_hash {
+ grn_db_obj obj;
+ grn_ctx *ctx;
+ uint32_t key_size;
+ grn_encoding encoding;
+ uint32_t value_size;
+ uint32_t entry_size;
+ uint32_t *n_garbages;
+ uint32_t *n_entries;
+ uint32_t *max_offset;
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj token_filters;
+
+ /* For grn_io_hash. */
+ grn_io *io;
+ struct grn_hash_header *header;
+ uint32_t *lock;
+ // uint32_t nref;
+ // unsigned int max_n_subrecs;
+ // unsigned int record_size;
+ // unsigned int subrec_size;
+ // grn_rec_unit record_unit;
+ // grn_rec_unit subrec_unit;
+ // uint8_t arrayp;
+ // grn_recordh *curr_rec;
+ // grn_set_cursor *cursor;
+ // int limit;
+ // void *userdata;
+ // grn_id subrec_id;
+
+ /* For grn_tiny_hash. */
+ uint32_t max_offset_;
+ uint32_t n_garbages_;
+ uint32_t n_entries_;
+ grn_id *index;
+ grn_id garbages;
+ grn_tiny_array a;
+ grn_tiny_bitmap bitmap;
+};
+
+/* Header of grn_io_hash. */
+struct grn_hash_header {
+ uint32_t flags;
+ grn_encoding encoding;
+ uint32_t key_size;
+ uint32_t value_size;
+ grn_id tokenizer;
+ uint32_t curr_rec;
+ int32_t curr_key;
+ uint32_t idx_offset;
+ uint32_t entry_size;
+ uint32_t max_offset;
+ uint32_t n_entries;
+ uint32_t n_garbages;
+ uint32_t lock;
+ grn_id normalizer;
+ uint32_t reserved[15];
+ grn_id garbages[GRN_HASH_MAX_KEY_SIZE];
+ grn_table_queue queue;
+};
+
+struct _grn_hash_cursor {
+ grn_db_obj obj;
+ grn_hash *hash;
+ grn_ctx *ctx;
+ grn_id curr_rec;
+ grn_id tail;
+ unsigned int rest;
+ int dir;
+};
+
+/* deprecated */
+
+#define GRN_TABLE_SORT_BY_KEY 0
+#define GRN_TABLE_SORT_BY_ID (1L<<1)
+#define GRN_TABLE_SORT_BY_VALUE (1L<<2)
+#define GRN_TABLE_SORT_RES_ID 0
+#define GRN_TABLE_SORT_RES_KEY (1L<<3)
+#define GRN_TABLE_SORT_AS_BIN 0
+#define GRN_TABLE_SORT_AS_NUMBER (1L<<4)
+#define GRN_TABLE_SORT_AS_SIGNED 0
+#define GRN_TABLE_SORT_AS_UNSIGNED (1L<<5)
+#define GRN_TABLE_SORT_AS_INT32 0
+#define GRN_TABLE_SORT_AS_INT64 (1L<<6)
+#define GRN_TABLE_SORT_NO_PROC 0
+#define GRN_TABLE_SORT_WITH_PROC (1L<<7)
+
+typedef struct _grn_table_sort_optarg grn_table_sort_optarg;
+
+struct _grn_table_sort_optarg {
+ grn_table_sort_flags flags;
+ int (*compar)(grn_ctx *ctx,
+ grn_obj *table1, void *target1, unsigned int target1_size,
+ grn_obj *table2, void *target2, unsigned int target2_size,
+ void *compare_arg);
+ void *compar_arg;
+ grn_obj *proc;
+ int offset;
+};
+
+GRN_API int grn_hash_sort(grn_ctx *ctx, grn_hash *hash, int limit,
+ grn_array *result, grn_table_sort_optarg *optarg);
+
+grn_rc grn_hash_lock(grn_ctx *ctx, grn_hash *hash, int timeout);
+grn_rc grn_hash_unlock(grn_ctx *ctx, grn_hash *hash);
+grn_rc grn_hash_clear_lock(grn_ctx *ctx, grn_hash *hash);
+
+#define GRN_HASH_SIZE(hash) (*((hash)->n_entries))
+
+/* private */
+typedef enum {
+ grn_rec_document = 0,
+ grn_rec_section,
+ grn_rec_position,
+ grn_rec_userdef,
+ grn_rec_none
+} grn_rec_unit;
+
+GRN_API grn_rc grn_hash_truncate(grn_ctx *ctx, grn_hash *hash);
+
+int grn_rec_unit_size(grn_rec_unit unit, int rec_size);
+
+const char * _grn_hash_key(grn_ctx *ctx, grn_hash *hash, grn_id id, uint32_t *key_size);
+
+int grn_hash_get_key_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ void *keybuf, int bufsize, void *valuebuf);
+
+int _grn_hash_get_key_value(grn_ctx *ctx, grn_hash *hash, grn_id id,
+ void **key, void **value);
+
+grn_id grn_hash_next(grn_ctx *ctx, grn_hash *hash, grn_id id);
+
+/* only valid for hash tables, GRN_OBJ_KEY_VAR_SIZE && GRN_HASH_TINY */
+const char *_grn_hash_strkey_by_val(void *v, uint16_t *size);
+
+const char *grn_hash_get_value_(grn_ctx *ctx, grn_hash *hash, grn_id id, uint32_t *size);
+
+grn_rc grn_hash_remove(grn_ctx *ctx, const char *path);
+grn_rc grn_array_remove(grn_ctx *ctx, const char *path);
+
+grn_id grn_hash_at(grn_ctx *ctx, grn_hash *hash, grn_id id);
+grn_id grn_array_at(grn_ctx *ctx, grn_array *array, grn_id id);
+
+void grn_hash_check(grn_ctx *ctx, grn_hash *hash);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_HASH_H */
diff --git a/storage/mroonga/vendor/groonga/lib/icudump.c b/storage/mroonga/vendor/groonga/lib/icudump.c
new file mode 100644
index 00000000000..2cbc15c249c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/icudump.c
@@ -0,0 +1,294 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include <stdio.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <string.h>
+#include <unicode/utf.h>
+#include <unicode/uchar.h>
+#include <unicode/unorm.h>
+#include <unicode/ustring.h>
+
+#define MAX_UNICODE 0x110000
+#define BUF_SIZE 0x100
+
+static int
+ucs2utf(unsigned int i, unsigned char *buf)
+{
+ unsigned char *p = buf;
+ if (i < 0x80) {
+ *p++ = i;
+ } else {
+ if (i < 0x800) {
+ *p++ = (i >> 6) | 0xc0;
+ } else {
+ if (i < 0x00010000) {
+ *p++ = (i >> 12) | 0xe0;
+ } else {
+ if (i < 0x00200000) {
+ *p++ = (i >> 18) | 0xf0;
+ } else {
+ if (i < 0x04000000) {
+ *p++ = (i >> 24) | 0xf8;
+ } else if (i < 0x80000000) {
+ *p++ = (i >> 30) | 0xfc;
+ *p++ = ((i >> 24) & 0x3f) | 0x80;
+ }
+ *p++ = ((i >> 18) & 0x3f) | 0x80;
+ }
+ *p++ = ((i >> 12) & 0x3f) | 0x80;
+ }
+ *p++ = ((i >> 6) & 0x3f) | 0x80;
+ }
+ *p++ = (0x3f & i) | 0x80;
+ }
+ *p = '\0';
+ return (p - buf);
+}
+
+void
+blockcode(void)
+{
+ UChar32 ch;
+ unsigned char *p, src[7];
+ UBlockCode code, lc = -1;
+ for (ch = 1; ch < MAX_UNICODE; ch++) {
+ if (!U_IS_UNICODE_CHAR(ch)) { continue; }
+ code = ublock_getCode(ch);
+ if (code != lc) {
+ ucs2utf(ch, src);
+ for (p = src; *p; p++) {
+ printf("%x:", *p);
+ }
+ printf("\t%04x\t%d\n", ch, code);
+ }
+ lc = code;
+ }
+}
+
+int
+normalize(const char *str, char *res, UNormalizationMode mode)
+{
+ UErrorCode rc;
+ int32_t ulen, nlen;
+ UChar ubuf[BUF_SIZE], nbuf[BUF_SIZE];
+ rc = U_ZERO_ERROR;
+ u_strFromUTF8(ubuf, BUF_SIZE, &ulen, str, -1, &rc);
+ if (rc != U_ZERO_ERROR /*&& rc != U_STRING_NOT_TERMINATED_WARNING*/) {
+ return -1;
+ }
+ rc = U_ZERO_ERROR;
+ nlen = unorm_normalize(ubuf, ulen, mode, 0, nbuf, BUF_SIZE, &rc);
+ if (rc != U_ZERO_ERROR /*&& rc != U_STRING_NOT_TERMINATED_WARNING*/) {
+ return -1;
+ }
+ rc = U_ZERO_ERROR;
+ u_strToUTF8(res, BUF_SIZE, NULL, nbuf, nlen, &rc);
+ if (rc != U_ZERO_ERROR /*&& rc != U_BUFFER_OVERFLOW_ERROR*/) {
+ return -1;
+ }
+ return 0;
+}
+
+void
+dump(UNormalizationMode mode)
+{
+ UChar32 ch;
+ char str[7], norm[BUF_SIZE];
+ for (ch = 1; ch < MAX_UNICODE; ch++) {
+ if (!U_IS_UNICODE_CHAR(ch)) { continue; }
+ ucs2utf(ch, (unsigned char *)str);
+ if (normalize(str, norm, mode)) {
+ printf("ch=%04x error occure\n", ch);
+ continue;
+ }
+ if (strcmp(norm, str)) {
+ printf("%04x\t%s\t%s\n", ch, str, norm);
+ }
+ }
+}
+
+void
+ccdump(void)
+{
+ UChar32 ch;
+ char str[7], nfd[BUF_SIZE], nfc[BUF_SIZE];
+ for (ch = 1; ch < MAX_UNICODE; ch++) {
+ if (!U_IS_UNICODE_CHAR(ch)) { continue; }
+ ucs2utf(ch, (unsigned char *)str);
+ if (normalize(str, nfd, UNORM_NFD)) {
+ printf("ch=%04x error occure\n", ch);
+ continue;
+ }
+ if (normalize(str, nfc, UNORM_NFC)) {
+ printf("ch=%04x error occure\n", ch);
+ continue;
+ }
+ if (strcmp(nfd, nfc)) {
+ printf("%04x\t%s\t%s\n", ch, nfd, nfc);
+ }
+ }
+}
+
+enum {
+ ctype_null = 0,
+ ctype_alpha,
+ ctype_digit,
+ ctype_symbol,
+ ctype_hiragana,
+ ctype_katakana,
+ ctype_kanji,
+ ctype_others
+};
+
+static const char *ctypes[] = {
+ "grn_str_null",
+ "grn_str_alpha",
+ "grn_str_digit",
+ "grn_str_symbol",
+ "grn_str_hiragana",
+ "grn_str_katakana",
+ "grn_str_kanji",
+ "grn_str_others"
+};
+
+void
+gcdump(void)
+{
+ UChar32 ch;
+ unsigned char *p, src[7];
+ int ctype, lc = -1;
+ for (ch = 1; ch < MAX_UNICODE; ch++) {
+ UCharCategory cat;
+ UBlockCode code;
+ if (!U_IS_UNICODE_CHAR(ch)) { continue; }
+ code = ublock_getCode(ch);
+ switch (code) {
+ case UBLOCK_CJK_RADICALS_SUPPLEMENT: /* cjk radicals */
+ case UBLOCK_KANGXI_RADICALS: /* kanji radicals */
+ case UBLOCK_BOPOMOFO: /* bopomofo letter */
+ case UBLOCK_HANGUL_COMPATIBILITY_JAMO: /* hangul letter */
+ case UBLOCK_KANBUN: /* kaeri ten used in kanbun ex. re-ten */
+ case UBLOCK_BOPOMOFO_EXTENDED: /* bopomofo extended letter */
+ case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A: /* cjk letter */
+ case UBLOCK_CJK_UNIFIED_IDEOGRAPHS: /* cjk letter */
+ case UBLOCK_YI_SYLLABLES: /* Yi syllables */
+ case UBLOCK_YI_RADICALS: /* Yi radicals */
+ case UBLOCK_HANGUL_SYLLABLES: /* hangul syllables */
+ case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS: /* cjk letter */
+ case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B: /* cjk letter */
+ case UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT: /* cjk letter */
+ case UBLOCK_CJK_STROKES: /* kakijun*/
+ ctype = ctype_kanji;
+ break;
+ case UBLOCK_CJK_SYMBOLS_AND_PUNCTUATION: /* symbols ex. JIS mark */
+ case UBLOCK_ENCLOSED_CJK_LETTERS_AND_MONTHS: /* ex. (kabu) */
+ case UBLOCK_CJK_COMPATIBILITY: /* symbols ex. ton doll */
+ case UBLOCK_CJK_COMPATIBILITY_FORMS: /* symbols ex. tategaki kagi-kakko */
+ ctype = ctype_symbol;
+ break;
+ case UBLOCK_HIRAGANA:
+ ctype = ctype_hiragana;
+ break;
+ case UBLOCK_KATAKANA:
+ case UBLOCK_KATAKANA_PHONETIC_EXTENSIONS:
+ ctype = ctype_katakana;
+ break;
+ default:
+ cat = u_charType(ch);
+ switch (cat) {
+ case U_UPPERCASE_LETTER:
+ case U_LOWERCASE_LETTER:
+ case U_TITLECASE_LETTER:
+ case U_MODIFIER_LETTER:
+ case U_OTHER_LETTER:
+ ctype = ctype_alpha;
+ break;
+ case U_DECIMAL_DIGIT_NUMBER:
+ case U_LETTER_NUMBER:
+ case U_OTHER_NUMBER:
+ ctype = ctype_digit;
+ break;
+ case U_DASH_PUNCTUATION:
+ case U_START_PUNCTUATION:
+ case U_END_PUNCTUATION:
+ case U_CONNECTOR_PUNCTUATION:
+ case U_OTHER_PUNCTUATION:
+ case U_MATH_SYMBOL:
+ case U_CURRENCY_SYMBOL:
+ case U_MODIFIER_SYMBOL:
+ case U_OTHER_SYMBOL:
+ ctype = ctype_symbol;
+ break;
+ default:
+ ctype = ctype_others;
+ break;
+ }
+ break;
+ }
+ if (ctype != lc) {
+ ucs2utf(ch, src);
+ for (p = src; *p; p++) {
+ printf("%x:", *p);
+ }
+ printf("\t%04x\t%s\n", ch, ctypes[ctype]);
+ }
+ lc = ctype;
+ }
+}
+
+struct option options[] = {
+ {"bc", 0, NULL, 'b'},
+ {"nfd", 0, NULL, 'd'},
+ {"nfkd", 0, NULL, 'D'},
+ {"nfc", 0, NULL, 'c'},
+ {"nfkc", 0, NULL, 'C'},
+ {"cc", 0, NULL, 'o'},
+ {"gc", 0, NULL, 'g'},
+};
+
+int
+main(int argc, char **argv)
+{
+ switch (getopt_long(argc, argv, "bdDcCog", options, NULL)) {
+ case 'b' :
+ blockcode();
+ break;
+ case 'd' :
+ dump(UNORM_NFD);
+ break;
+ case 'D' :
+ dump(UNORM_NFKD);
+ break;
+ case 'c' :
+ dump(UNORM_NFC);
+ break;
+ case 'C' :
+ dump(UNORM_NFKC);
+ break;
+ case 'o' :
+ ccdump();
+ break;
+ case 'g' :
+ gcdump();
+ break;
+ default :
+ fputs("usage: icudump --[bc|nfd|nfkd|nfc|nfkc|cc|gc]\n", stderr);
+ break;
+ }
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/ii.c b/storage/mroonga/vendor/groonga/lib/ii.c
new file mode 100644
index 00000000000..5dc203865ad
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ii.c
@@ -0,0 +1,7418 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "ii.h"
+#include "ctx_impl.h"
+#include "token.h"
+#include "pat.h"
+#include "db.h"
+#include "output.h"
+#include "util.h"
+
+#define MAX_PSEG 0x20000
+#define S_CHUNK (1 << GRN_II_W_CHUNK)
+#define W_SEGMENT 18
+#define S_SEGMENT (1 << W_SEGMENT)
+#define N_CHUNKS_PER_FILE (GRN_IO_FILE_SIZE >> W_SEGMENT)
+#define W_ARRAY_ELEMENT 3
+#define S_ARRAY_ELEMENT (1 << W_ARRAY_ELEMENT)
+#define W_ARRAY (W_SEGMENT - W_ARRAY_ELEMENT)
+#define ARRAY_MASK_IN_A_SEGMENT ((1 << W_ARRAY) - 1)
+#define NOT_ASSIGNED 0xffffffff
+
+#define S_GARBAGE (1<<12)
+
+#define CHUNK_SPLIT 0x80000000
+#define CHUNK_SPLIT_THRESHOLD 0x60000
+
+#define MAX_N_ELEMENTS 5
+
+#define LSEG(pos) ((pos) >> 16)
+#define LPOS(pos) (((pos) & 0xffff) << 2)
+#define SEG2POS(seg,pos) ((((uint32_t)(seg)) << 16) + (((uint32_t)(pos)) >> 2))
+
+#define NEXT_ADDR(p) (((byte *)(p)) + sizeof(*(p)))
+
+#ifndef S_IRUSR
+# define S_IRUSR 0400
+#endif /* S_IRUSR */
+#ifndef S_IWUSR
+# define S_IWUSR 0200
+#endif /* S_IWUSR */
+
+/* segment */
+
+inline static uint32_t
+segment_get(grn_ctx *ctx, grn_ii *ii)
+{
+ uint32_t pseg;
+ if (ii->header->bgqtail == ((ii->header->bgqhead + 1) & (GRN_II_BGQSIZE - 1))) {
+ pseg = ii->header->bgqbody[ii->header->bgqtail];
+ ii->header->bgqtail = (ii->header->bgqtail + 1) & (GRN_II_BGQSIZE - 1);
+ } else {
+ pseg = ii->header->pnext;
+#ifndef CUT_OFF_COMPATIBILITY
+ if (!pseg) {
+ int i;
+ uint32_t pmax = 0;
+ char *used = GRN_CALLOC(MAX_PSEG);
+ if (!used) { return MAX_PSEG; }
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ if ((pseg = ii->header->ainfo[i]) != NOT_ASSIGNED) {
+ if (pseg > pmax) { pmax = pseg; }
+ used[pseg] = 1;
+ }
+ if ((pseg = ii->header->binfo[i]) != NOT_ASSIGNED) {
+ if (pseg > pmax) { pmax = pseg; }
+ used[pseg] = 1;
+ }
+ }
+ for (pseg = 0; pseg < MAX_PSEG && used[pseg]; pseg++) ;
+ GRN_FREE(used);
+ ii->header->pnext = pmax + 1;
+ } else
+#endif /* CUT_OFF_COMPATIBILITY */
+ if (ii->header->pnext < MAX_PSEG) { ii->header->pnext++; }
+ }
+ return pseg;
+}
+
+inline static grn_rc
+segment_get_clear(grn_ctx *ctx, grn_ii *ii, uint32_t *pseg)
+{
+ uint32_t seg = segment_get(ctx, ii);
+ if (seg < MAX_PSEG) {
+ void *p = NULL;
+ GRN_IO_SEG_REF(ii->seg, seg, p);
+ if (!p) { return GRN_NO_MEMORY_AVAILABLE; }
+ memset(p, 0, S_SEGMENT);
+ GRN_IO_SEG_UNREF(ii->seg, seg);
+ *pseg = seg;
+ return GRN_SUCCESS;
+ } else {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+}
+
+inline static grn_rc
+buffer_segment_new(grn_ctx *ctx, grn_ii *ii, uint32_t *segno)
+{
+ uint32_t lseg, pseg;
+ if (*segno < GRN_II_MAX_LSEG) {
+ if (ii->header->binfo[*segno] != NOT_ASSIGNED) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ lseg = *segno;
+ } else {
+ for (lseg = 0; lseg < GRN_II_MAX_LSEG; lseg++) {
+ if (ii->header->binfo[lseg] == NOT_ASSIGNED) { break; }
+ }
+ if (lseg == GRN_II_MAX_LSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ *segno = lseg;
+ }
+ pseg = segment_get(ctx, ii);
+ if (pseg < MAX_PSEG) {
+ ii->header->binfo[lseg] = pseg;
+ if (lseg >= ii->header->bmax) { ii->header->bmax = lseg + 1; }
+ return GRN_SUCCESS;
+ } else {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+}
+
+static grn_rc
+buffer_segment_reserve(grn_ctx *ctx, grn_ii *ii,
+ uint32_t *lseg0, uint32_t *pseg0,
+ uint32_t *lseg1, uint32_t *pseg1)
+{
+ uint32_t i = 0;
+ for (;; i++) {
+ if (i == GRN_II_MAX_LSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (ii->header->binfo[i] == NOT_ASSIGNED) { break; }
+ }
+ *lseg0 = i++;
+ for (;; i++) {
+ if (i == GRN_II_MAX_LSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (ii->header->binfo[i] == NOT_ASSIGNED) { break; }
+ }
+ *lseg1 = i;
+ if ((*pseg0 = segment_get(ctx, ii)) == MAX_PSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ if ((*pseg1 = segment_get(ctx, ii)) == MAX_PSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ /*
+ {
+ uint32_t pseg;
+ char *used = GRN_CALLOC(MAX_PSEG);
+ if (!used) { return GRN_NO_MEMORY_AVAILABLE; }
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ if ((pseg = ii->header->ainfo[i]) != NOT_ASSIGNED) { used[pseg] = 1; }
+ if ((pseg = ii->header->binfo[i]) != NOT_ASSIGNED) { used[pseg] = 1; }
+ }
+ for (pseg = 0;; pseg++) {
+ if (pseg == MAX_PSEG) { GRN_FREE(used); return GRN_NO_MEMORY_AVAILABLE; }
+ if (!used[pseg]) { break; }
+ }
+ *pseg0 = pseg++;
+ for (;; pseg++) {
+ if (pseg == MAX_PSEG) { GRN_FREE(used); return GRN_NO_MEMORY_AVAILABLE; }
+ if (!used[pseg]) { break; }
+ }
+ *pseg1 = pseg;
+ GRN_FREE(used);
+ }
+ */
+ return GRN_SUCCESS;
+}
+
+#define BGQENQUE(lseg) do {\
+ if (ii->header->binfo[lseg] != NOT_ASSIGNED) {\
+ ii->header->bgqbody[ii->header->bgqhead] = ii->header->binfo[lseg];\
+ ii->header->bgqhead = (ii->header->bgqhead + 1) & (GRN_II_BGQSIZE - 1);\
+ GRN_ASSERT(ii->header->bgqhead != ii->header->bgqtail);\
+ }\
+} while (0)
+
+inline static void
+buffer_segment_update(grn_ii *ii, uint32_t lseg, uint32_t pseg)
+{
+ BGQENQUE(lseg);
+ // smb_wmb();
+ ii->header->binfo[lseg] = pseg;
+ if (lseg >= ii->header->bmax) { ii->header->bmax = lseg + 1; }
+}
+
+inline static void
+buffer_segment_clear(grn_ii *ii, uint32_t lseg)
+{
+ BGQENQUE(lseg);
+ // smb_wmb();
+ ii->header->binfo[lseg] = NOT_ASSIGNED;
+}
+
+/* chunk */
+
+#define HEADER_CHUNK_AT(ii,offset) \
+ ((((ii)->header->chunks[((offset) >> 3)]) >> ((offset) & 7)) & 1)
+
+#define HEADER_CHUNK_ON(ii,offset) \
+ (((ii)->header->chunks[((offset) >> 3)]) |= (1 << ((offset) & 7)))
+
+#define HEADER_CHUNK_OFF(ii,offset) \
+ (((ii)->header->chunks[((offset) >> 3)]) &= ~(1 << ((offset) & 7)))
+
+#define N_GARBAGES_TH 1
+
+#define N_GARBAGES ((S_GARBAGE - (sizeof(uint32_t) * 4))/(sizeof(uint32_t)))
+
+typedef struct {
+ uint32_t head;
+ uint32_t tail;
+ uint32_t nrecs;
+ uint32_t next;
+ uint32_t recs[N_GARBAGES];
+} grn_ii_ginfo;
+
+#define WIN_MAP2(chunk,ctx,iw,seg,pos,size,mode)\
+ grn_io_win_map2(chunk, ctx, iw,\
+ ((seg) >> GRN_II_N_CHUNK_VARIATION),\
+ (((seg) & ((1 << GRN_II_N_CHUNK_VARIATION) - 1)) << GRN_II_W_LEAST_CHUNK) + (pos),\
+ size,mode)
+/*
+static int new_histogram[32];
+static int free_histogram[32];
+*/
+static grn_rc
+chunk_new(grn_ctx *ctx, grn_ii *ii, uint32_t *res, uint32_t size)
+{
+ /*
+ if (size) {
+ int m, es = size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ new_histogram[m]++;
+ }
+ */
+ if (size > S_CHUNK) {
+ int i, j;
+ uint32_t n = (size + S_CHUNK - 1) >> GRN_II_W_CHUNK;
+ for (i = 0, j = -1; i < GRN_II_MAX_CHUNK; i++) {
+ if (HEADER_CHUNK_AT(ii, i)) {
+ j = i;
+ } else {
+ if (i == j + n) {
+ j++;
+ *res = j << GRN_II_N_CHUNK_VARIATION;
+ for (; j <= i; j++) { HEADER_CHUNK_ON(ii, j); }
+ return GRN_SUCCESS;
+ }
+ }
+ }
+ GRN_LOG(ctx, GRN_LOG_CRIT, "index full. requested chunk_size=%d.", size);
+ return GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ uint32_t *vp;
+ int m, aligned_size;
+ if (size > (1 << GRN_II_W_LEAST_CHUNK)) {
+ int es = size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ } else {
+ m = GRN_II_W_LEAST_CHUNK;
+ }
+ aligned_size = 1 << (m - GRN_II_W_LEAST_CHUNK);
+ if (ii->header->ngarbages[m - GRN_II_W_LEAST_CHUNK] > N_GARBAGES_TH) {
+ grn_ii_ginfo *ginfo;
+ uint32_t *gseg;
+ grn_io_win iw, iw_;
+ iw_.addr = NULL;
+ gseg = &ii->header->garbages[m - GRN_II_W_LEAST_CHUNK];
+ while (*gseg != NOT_ASSIGNED) {
+ ginfo = WIN_MAP2(ii->chunk, ctx, &iw, *gseg, 0, S_GARBAGE, grn_io_rdwr);
+ //GRN_IO_SEG_MAP2(ii->chunk, *gseg, ginfo);
+ if (!ginfo) {
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (ginfo->next != NOT_ASSIGNED || ginfo->nrecs > N_GARBAGES_TH) {
+ *res = ginfo->recs[ginfo->tail];
+ if (++ginfo->tail == N_GARBAGES) { ginfo->tail = 0; }
+ ginfo->nrecs--;
+ ii->header->ngarbages[m - GRN_II_W_LEAST_CHUNK]--;
+ if (!ginfo->nrecs) {
+ HEADER_CHUNK_OFF(ii, *gseg);
+ *gseg = ginfo->next;
+ }
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ grn_io_win_unmap2(&iw);
+ return GRN_SUCCESS;
+ }
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ iw_ = iw;
+ gseg = &ginfo->next;
+ }
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ }
+ vp = &ii->header->free_chunks[m - GRN_II_W_LEAST_CHUNK];
+ if (*vp == NOT_ASSIGNED) {
+ int i = 0;
+ while (HEADER_CHUNK_AT(ii, i)) {
+ if (++i >= GRN_II_MAX_CHUNK) { return GRN_NO_MEMORY_AVAILABLE; }
+ }
+ HEADER_CHUNK_ON(ii, i);
+ *vp = i << GRN_II_N_CHUNK_VARIATION;
+ }
+ *res = *vp;
+ *vp += 1 << (m - GRN_II_W_LEAST_CHUNK);
+ if (!(*vp & ((1 << GRN_II_N_CHUNK_VARIATION) - 1))) {
+ *vp = NOT_ASSIGNED;
+ }
+ return GRN_SUCCESS;
+ }
+}
+
+static grn_rc
+chunk_free(grn_ctx *ctx, grn_ii *ii, uint32_t offset, uint32_t dummy, uint32_t size)
+{
+ /*
+ if (size) {
+ int m, es = size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ free_histogram[m]++;
+ }
+ */
+ grn_io_win iw, iw_;
+ grn_ii_ginfo *ginfo;
+ uint32_t seg, m, *gseg;
+ seg = offset >> GRN_II_N_CHUNK_VARIATION;
+ if (size > S_CHUNK) {
+ int n = (size + S_CHUNK - 1) >> GRN_II_W_CHUNK;
+ for (; n--; seg++) { HEADER_CHUNK_OFF(ii, seg); }
+ return GRN_SUCCESS;
+ }
+ if (size > (1 << GRN_II_W_LEAST_CHUNK)) {
+ int es = size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ } else {
+ m = GRN_II_W_LEAST_CHUNK;
+ }
+ gseg = &ii->header->garbages[m - GRN_II_W_LEAST_CHUNK];
+ iw_.addr = NULL;
+ while (*gseg != NOT_ASSIGNED) {
+ ginfo = WIN_MAP2(ii->chunk, ctx, &iw, *gseg, 0, S_GARBAGE, grn_io_rdwr);
+ // GRN_IO_SEG_MAP2(ii->chunk, *gseg, ginfo);
+ if (!ginfo) {
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (ginfo->nrecs < N_GARBAGES) { break; }
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ iw_ = iw;
+ gseg = &ginfo->next;
+ }
+ if (*gseg == NOT_ASSIGNED) {
+ grn_rc rc;
+ if ((rc = chunk_new(ctx, ii, gseg, S_GARBAGE))) {
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ return rc;
+ }
+ ginfo = WIN_MAP2(ii->chunk, ctx, &iw, *gseg, 0, S_GARBAGE, grn_io_rdwr);
+ /*
+ uint32_t i = 0;
+ while (HEADER_CHUNK_AT(ii, i)) {
+ if (++i >= GRN_II_MAX_CHUNK) { return GRN_NO_MEMORY_AVAILABLE; }
+ }
+ HEADER_CHUNK_ON(ii, i);
+ *gseg = i;
+ GRN_IO_SEG_MAP2(ii->chunk, *gseg, ginfo);
+ */
+ if (!ginfo) {
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ ginfo->head = 0;
+ ginfo->tail = 0;
+ ginfo->nrecs = 0;
+ ginfo->next = NOT_ASSIGNED;
+ }
+ if (iw_.addr) { grn_io_win_unmap2(&iw_); }
+ ginfo->recs[ginfo->head] = offset;
+ if (++ginfo->head == N_GARBAGES) { ginfo->head = 0; }
+ ginfo->nrecs++;
+ grn_io_win_unmap2(&iw);
+ ii->header->ngarbages[m - GRN_II_W_LEAST_CHUNK]++;
+ return GRN_SUCCESS;
+}
+
+/*
+inline static grn_rc
+chunk_new(grn_ii *ii, uint32_t *res, uint32_t size)
+{
+ int i, j;
+ uint32_t n = (size + S_CHUNK - 1) >> GRN_II_W_CHUNK;
+ uint32_t base_seg = grn_io_base_seg(ii->chunk);
+ for (i = 0, j = -1; i < GRN_II_MAX_CHUNK; i++) {
+ if (HEADER_CHUNK_AT(ii, i)) {
+ j = i;
+ } else {
+ if (i == j + n) {
+ j++;
+ if (res) { *res = j; }
+ for (; j <= i; j++) { HEADER_CHUNK_ON(ii, j); }
+ return GRN_SUCCESS;
+ }
+ // todo : cut off
+ if ((i + base_seg)/ N_CHUNKS_PER_FILE !=
+ (i + base_seg + 1) / N_CHUNKS_PER_FILE) { j = i; }
+ }
+ }
+ GRN_LOG(ctx, GRN_LOG_CRIT, "index full.");
+ return GRN_NO_MEMORY_AVAILABLE;
+}
+
+static void
+chunk_free(grn_ii *ii, int offset, uint32_t size1, uint32_t size2)
+{
+ uint32_t i = offset + ((size1 + S_CHUNK - 1) >> GRN_II_W_CHUNK);
+ uint32_t n = offset + ((size2 + S_CHUNK - 1) >> GRN_II_W_CHUNK);
+ for (; i < n; i++) { HEADER_CHUNK_OFF(ii, i); }
+}
+*/
+
+#define UNIT_SIZE 0x80
+#define UNIT_MASK (UNIT_SIZE - 1)
+
+/* <generated> */
+static uint8_t *
+pack_1(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 7;
+ v += *p++ << 6;
+ v += *p++ << 5;
+ v += *p++ << 4;
+ v += *p++ << 3;
+ v += *p++ << 2;
+ v += *p++ << 1;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_1(uint32_t *p, uint8_t *dp)
+{
+ *p++ = (*dp >> 7);
+ *p++ = ((*dp >> 6) & 0x1);
+ *p++ = ((*dp >> 5) & 0x1);
+ *p++ = ((*dp >> 4) & 0x1);
+ *p++ = ((*dp >> 3) & 0x1);
+ *p++ = ((*dp >> 2) & 0x1);
+ *p++ = ((*dp >> 1) & 0x1);
+ *p++ = (*dp++ & 0x1);
+ return dp;
+}
+static uint8_t *
+pack_2(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 6;
+ v += *p++ << 4;
+ v += *p++ << 2;
+ *rp++ = v + *p++;
+ v = *p++ << 6;
+ v += *p++ << 4;
+ v += *p++ << 2;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_2(uint32_t *p, uint8_t *dp)
+{
+ *p++ = (*dp >> 6);
+ *p++ = ((*dp >> 4) & 0x3);
+ *p++ = ((*dp >> 2) & 0x3);
+ *p++ = (*dp++ & 0x3);
+ *p++ = (*dp >> 6);
+ *p++ = ((*dp >> 4) & 0x3);
+ *p++ = ((*dp >> 2) & 0x3);
+ *p++ = (*dp++ & 0x3);
+ return dp;
+}
+static uint8_t *
+pack_3(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 5;
+ v += *p++ << 2;
+ *rp++ = v + (*p >> 1); v = *p++ << 7;
+ v += *p++ << 4;
+ v += *p++ << 1;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ v += *p++ << 3;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_3(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ *p++ = (*dp >> 5);
+ *p++ = ((*dp >> 2) & 0x7);
+ v = ((*dp++ << 1) & 0x7); *p++ = v + (*dp >> 7);
+ *p++ = ((*dp >> 4) & 0x7);
+ *p++ = ((*dp >> 1) & 0x7);
+ v = ((*dp++ << 2) & 0x7); *p++ = v + (*dp >> 6);
+ *p++ = ((*dp >> 3) & 0x7);
+ *p++ = (*dp++ & 0x7);
+ return dp;
+}
+static uint8_t *
+pack_4(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 4;
+ *rp++ = v + *p++;
+ v = *p++ << 4;
+ *rp++ = v + *p++;
+ v = *p++ << 4;
+ *rp++ = v + *p++;
+ v = *p++ << 4;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_4(uint32_t *p, uint8_t *dp)
+{
+ *p++ = (*dp >> 4);
+ *p++ = (*dp++ & 0xf);
+ *p++ = (*dp >> 4);
+ *p++ = (*dp++ & 0xf);
+ *p++ = (*dp >> 4);
+ *p++ = (*dp++ & 0xf);
+ *p++ = (*dp >> 4);
+ *p++ = (*dp++ & 0xf);
+ return dp;
+}
+static uint8_t *
+pack_5(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 3;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ v += *p++ << 1;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 1); v = *p++ << 7;
+ v += *p++ << 2;
+ *rp++ = v + (*p >> 3); v = *p++ << 5;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_5(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ *p++ = (*dp >> 3);
+ v = ((*dp++ << 2) & 0x1f); *p++ = v + (*dp >> 6);
+ *p++ = ((*dp >> 1) & 0x1f);
+ v = ((*dp++ << 4) & 0x1f); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 1) & 0x1f); *p++ = v + (*dp >> 7);
+ *p++ = ((*dp >> 2) & 0x1f);
+ v = ((*dp++ << 3) & 0x1f); *p++ = v + (*dp >> 5);
+ *p++ = (*dp++ & 0x1f);
+ return dp;
+}
+static uint8_t *
+pack_6(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 2;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ *rp++ = v + *p++;
+ v = *p++ << 2;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_6(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ *p++ = (*dp >> 2);
+ v = ((*dp++ << 4) & 0x3f); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 2) & 0x3f); *p++ = v + (*dp >> 6);
+ *p++ = (*dp++ & 0x3f);
+ *p++ = (*dp >> 2);
+ v = ((*dp++ << 4) & 0x3f); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 2) & 0x3f); *p++ = v + (*dp >> 6);
+ *p++ = (*dp++ & 0x3f);
+ return dp;
+}
+static uint8_t *
+pack_7(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ v = *p++ << 1;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 1); v = *p++ << 7;
+ *rp++ = v + *p++;
+ return rp;
+}
+static uint8_t *
+unpack_7(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ *p++ = (*dp >> 1);
+ v = ((*dp++ << 6) & 0x7f); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 5) & 0x7f); *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 4) & 0x7f); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 3) & 0x7f); *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 2) & 0x7f); *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 1) & 0x7f); *p++ = v + (*dp >> 7);
+ *p++ = (*dp++ & 0x7f);
+ return dp;
+}
+static uint8_t *
+pack_8(uint32_t *p, uint8_t *rp)
+{
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_8(uint32_t *p, uint8_t *dp)
+{
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ *p++ = *dp++;
+ return dp;
+}
+static uint8_t *
+pack_9(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_9(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 2) & 0x1ff); *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 3) & 0x1ff); *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 4) & 0x1ff); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 5) & 0x1ff); *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 6) & 0x1ff); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 7) & 0x1ff); *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 8) & 0x1ff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_10(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_10(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 4) & 0x3ff); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 6) & 0x3ff); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 8) & 0x3ff); *p++ = v + *dp++;
+ v = *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 4) & 0x3ff); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 6) & 0x3ff); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 8) & 0x3ff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_11(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_11(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 6) & 0x7ff); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 9) & 0x7ff); v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 4) & 0x7ff); *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 7) & 0x7ff); *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 10) & 0x7ff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 5) & 0x7ff); *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 8) & 0x7ff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_12(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_12(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 8) & 0xfff); *p++ = v + *dp++;
+ v = *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 8) & 0xfff); *p++ = v + *dp++;
+ v = *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 8) & 0xfff); *p++ = v + *dp++;
+ v = *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 8) & 0xfff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_13(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_13(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 10) & 0x1fff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 7) & 0x1fff); *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 12) & 0x1fff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 9) & 0x1fff); v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 6) & 0x1fff); *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 11) & 0x1fff); v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 8) & 0x1fff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_14(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_14(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 12) & 0x3fff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 10) & 0x3fff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 8) & 0x3fff); *p++ = v + *dp++;
+ v = *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 12) & 0x3fff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 10) & 0x3fff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 8) & 0x3fff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_15(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_15(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 14) & 0x7fff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 13) & 0x7fff); v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 12) & 0x7fff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 11) & 0x7fff); v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 10) & 0x7fff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 9) & 0x7fff); v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 8) & 0x7fff); *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_16(uint32_t *p, uint8_t *rp)
+{
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_16(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_17(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_17(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 10) & 0x1ffff); v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 11) & 0x1ffff); v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 12) & 0x1ffff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 13) & 0x1ffff); v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 14) & 0x1ffff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 15) & 0x1ffff); v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 16) & 0x1ffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_18(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_18(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 12) & 0x3ffff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 14) & 0x3ffff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 16) & 0x3ffff); v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 12) & 0x3ffff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 14) & 0x3ffff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 16) & 0x3ffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_19(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_19(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 14) & 0x7ffff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 17) & 0x7ffff); v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 12) & 0x7ffff); v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 15) & 0x7ffff); v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 18) & 0x7ffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 13) & 0x7ffff); v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 16) & 0x7ffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_20(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_20(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 16) & 0xfffff); v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 16) & 0xfffff); v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 16) & 0xfffff); v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 16) & 0xfffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_21(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_21(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 18) & 0x1fffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 15) & 0x1fffff); v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 20) & 0x1fffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 17) & 0x1fffff); v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 14) & 0x1fffff); v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 19) & 0x1fffff); v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 16) & 0x1fffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_22(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_22(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 20) & 0x3fffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 18) & 0x3fffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 16) & 0x3fffff); v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 20) & 0x3fffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 18) & 0x3fffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 16) & 0x3fffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_23(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 21); *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_23(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 15; v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 22) & 0x7fffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 21) & 0x7fffff); v += *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 20) & 0x7fffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 19) & 0x7fffff); v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 18) & 0x7fffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 17) & 0x7fffff); v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 16) & 0x7fffff); v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_24(uint32_t *p, uint8_t *rp)
+{
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_24(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_25(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 21); *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 23); *rp++ = (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_25(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 17; v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 18) & 0x1ffffff); v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 19) & 0x1ffffff); v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 20) & 0x1ffffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 21) & 0x1ffffff); v += *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 22) & 0x1ffffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 23) & 0x1ffffff); v += *dp++ << 15; v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 24) & 0x1ffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_26(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_26(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 20) & 0x3ffffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 22) & 0x3ffffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 24) & 0x3ffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 20) & 0x3ffffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 22) & 0x3ffffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 24) & 0x3ffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_27(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 25); *rp++ = (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 23); *rp++ = (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 26); *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 21); *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_27(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 19; v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 22) & 0x7ffffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 25) & 0x7ffffff); v += *dp++ << 17; v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 20) & 0x7ffffff); v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 23) & 0x7ffffff); v += *dp++ << 15; v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 26) & 0x7ffffff); v += *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 21) & 0x7ffffff); v += *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 24) & 0x7ffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_28(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_28(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 24) & 0xfffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 24) & 0xfffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 24) & 0xfffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 24) & 0xfffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_29(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 21); *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 26); *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 23); *rp++ = (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 28); *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 25); *rp++ = (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 27); *rp++ = (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_29(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 21; v += *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 26) & 0x1fffffff); v += *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 23) & 0x1fffffff); v += *dp++ << 15; v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 28) & 0x1fffffff); v += *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 25) & 0x1fffffff); v += *dp++ << 17; v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 22) & 0x1fffffff); v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 27) & 0x1fffffff); v += *dp++ << 19; v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 24) & 0x1fffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_30(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 28); *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 26); *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 28); *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 26); *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_30(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 22; v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 28) & 0x3fffffff); v += *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 26) & 0x3fffffff); v += *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 24) & 0x3fffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 22; v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 28) & 0x3fffffff); v += *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 26) & 0x3fffffff); v += *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 24) & 0x3fffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_31(uint32_t *p, uint8_t *rp)
+{
+ uint8_t v;
+ *rp++ = (*p >> 23); *rp++ = (*p >> 15); *rp++ = (*p >> 7); v = *p++ << 1;
+ *rp++ = v + (*p >> 30); *rp++ = (*p >> 22); *rp++ = (*p >> 14); *rp++ = (*p >> 6); v = *p++ << 2;
+ *rp++ = v + (*p >> 29); *rp++ = (*p >> 21); *rp++ = (*p >> 13); *rp++ = (*p >> 5); v = *p++ << 3;
+ *rp++ = v + (*p >> 28); *rp++ = (*p >> 20); *rp++ = (*p >> 12); *rp++ = (*p >> 4); v = *p++ << 4;
+ *rp++ = v + (*p >> 27); *rp++ = (*p >> 19); *rp++ = (*p >> 11); *rp++ = (*p >> 3); v = *p++ << 5;
+ *rp++ = v + (*p >> 26); *rp++ = (*p >> 18); *rp++ = (*p >> 10); *rp++ = (*p >> 2); v = *p++ << 6;
+ *rp++ = v + (*p >> 25); *rp++ = (*p >> 17); *rp++ = (*p >> 9); *rp++ = (*p >> 1); v = *p++ << 7;
+ *rp++ = v + (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_31(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 23; v += *dp++ << 15; v += *dp++ << 7; *p++ = v + (*dp >> 1);
+ v = ((*dp++ << 30) & 0x7fffffff); v += *dp++ << 22; v += *dp++ << 14; v += *dp++ << 6; *p++ = v + (*dp >> 2);
+ v = ((*dp++ << 29) & 0x7fffffff); v += *dp++ << 21; v += *dp++ << 13; v += *dp++ << 5; *p++ = v + (*dp >> 3);
+ v = ((*dp++ << 28) & 0x7fffffff); v += *dp++ << 20; v += *dp++ << 12; v += *dp++ << 4; *p++ = v + (*dp >> 4);
+ v = ((*dp++ << 27) & 0x7fffffff); v += *dp++ << 19; v += *dp++ << 11; v += *dp++ << 3; *p++ = v + (*dp >> 5);
+ v = ((*dp++ << 26) & 0x7fffffff); v += *dp++ << 18; v += *dp++ << 10; v += *dp++ << 2; *p++ = v + (*dp >> 6);
+ v = ((*dp++ << 25) & 0x7fffffff); v += *dp++ << 17; v += *dp++ << 9; v += *dp++ << 1; *p++ = v + (*dp >> 7);
+ v = ((*dp++ << 24) & 0x7fffffff); v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+static uint8_t *
+pack_32(uint32_t *p, uint8_t *rp)
+{
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ *rp++ = (*p >> 24); *rp++ = (*p >> 16); *rp++ = (*p >> 8); *rp++ = *p++;
+ return rp;
+}
+static uint8_t *
+unpack_32(uint32_t *p, uint8_t *dp)
+{
+ uint32_t v;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ v = *dp++ << 24; v += *dp++ << 16; v += *dp++ << 8; *p++ = v + *dp++;
+ return dp;
+}
+/* </generated> */
+
+static uint8_t *
+pack_(uint32_t *p, uint32_t i, int w, uint8_t *rp)
+{
+ while (i >= 8) {
+ switch (w) {
+ case 0 : break;
+ case 1 : rp = pack_1(p, rp); break;
+ case 2 : rp = pack_2(p, rp); break;
+ case 3 : rp = pack_3(p, rp); break;
+ case 4 : rp = pack_4(p, rp); break;
+ case 5 : rp = pack_5(p, rp); break;
+ case 6 : rp = pack_6(p, rp); break;
+ case 7 : rp = pack_7(p, rp); break;
+ case 8 : rp = pack_8(p, rp); break;
+ case 9 : rp = pack_9(p, rp); break;
+ case 10 : rp = pack_10(p, rp); break;
+ case 11 : rp = pack_11(p, rp); break;
+ case 12 : rp = pack_12(p, rp); break;
+ case 13 : rp = pack_13(p, rp); break;
+ case 14 : rp = pack_14(p, rp); break;
+ case 15 : rp = pack_15(p, rp); break;
+ case 16 : rp = pack_16(p, rp); break;
+ case 17 : rp = pack_17(p, rp); break;
+ case 18 : rp = pack_18(p, rp); break;
+ case 19 : rp = pack_19(p, rp); break;
+ case 20 : rp = pack_20(p, rp); break;
+ case 21 : rp = pack_21(p, rp); break;
+ case 22 : rp = pack_22(p, rp); break;
+ case 23 : rp = pack_23(p, rp); break;
+ case 24 : rp = pack_24(p, rp); break;
+ case 25 : rp = pack_25(p, rp); break;
+ case 26 : rp = pack_26(p, rp); break;
+ case 27 : rp = pack_27(p, rp); break;
+ case 28 : rp = pack_28(p, rp); break;
+ case 29 : rp = pack_29(p, rp); break;
+ case 30 : rp = pack_30(p, rp); break;
+ case 31 : rp = pack_31(p, rp); break;
+ case 32 : rp = pack_32(p, rp); break;
+ }
+ p += 8;
+ i -= 8;
+ }
+ {
+ int b;
+ uint8_t v;
+ uint32_t *pe = p + i;
+ for (b = 8 - w, v = 0; p < pe;) {
+ if (b > 0) {
+ v += *p++ << b;
+ b -= w;
+ } else if (b < 0) {
+ *rp++ = v + (*p >> -b);
+ b += 8;
+ v = 0;
+ } else {
+ *rp++ = v + *p++;
+ b = 8 - w;
+ v = 0;
+ }
+ }
+ if (b + w != 8) { *rp++ = v; }
+ return rp;
+ }
+}
+
+static uint8_t *
+pack(uint32_t *p, uint32_t i, uint8_t *freq, uint8_t *rp)
+{
+ int32_t k, w;
+ uint8_t ebuf[UNIT_SIZE], *ep = ebuf;
+ uint32_t s, *pe = p + i, r, th = i - (i >> 3);
+ for (w = 0, s = 0; w <= 32; w++) {
+ if ((s += freq[w]) >= th) { break; }
+ }
+ if (i == s) {
+ *rp++ = w;
+ return pack_(p, i, w, rp);
+ }
+ r = 1 << w;
+ *rp++ = w + 0x80;
+ *rp++ = i - s;
+ if (r >= UNIT_SIZE) {
+ uint32_t first, *last = &first;
+ for (k = 0; p < pe; p++, k++) {
+ if (*p >= r) {
+ GRN_B_ENC(*p - r, ep);
+ *last = k;
+ last = p;
+ }
+ }
+ *last = 0;
+ *rp++ = (uint8_t) first;
+ } else {
+ for (k = 0; p < pe; p++, k++) {
+ if (*p >= r) {
+ *ep++ = k;
+ GRN_B_ENC(*p - r, ep);
+ *p = 0;
+ }
+ }
+ }
+ rp = pack_(p - i, i, w, rp);
+ memcpy(rp, ebuf, ep - ebuf);
+ return rp + (ep - ebuf);
+}
+
+int
+grn_p_enc(grn_ctx *ctx, uint32_t *data, uint32_t data_size, uint8_t **res)
+{
+ uint8_t *rp, freq[33];
+ uint32_t j, *dp, *dpe, d, w, buf[UNIT_SIZE];
+ *res = rp = GRN_MALLOC(data_size * sizeof(uint32_t) * 2);
+ GRN_B_ENC(data_size, rp);
+ memset(freq, 0, 33);
+ for (j = 0, dp = data, dpe = dp + data_size; dp < dpe; j++, dp++) {
+ if (j == UNIT_SIZE) {
+ rp = pack(buf, j, freq, rp);
+ memset(freq, 0, 33);
+ j = 0;
+ }
+ if ((d = buf[j] = *dp)) {
+ GRN_BIT_SCAN_REV(d, w);
+ freq[w + 1]++;
+ } else {
+ freq[0]++;
+ }
+ }
+ if (j) { rp = pack(buf, j, freq, rp); }
+ return rp - *res;
+}
+
+#define USE_P_ENC (1<<0)
+#define CUT_OFF (1<<1)
+#define ODD (1<<2)
+
+typedef struct {
+ uint32_t *data;
+ uint32_t data_size;
+ uint32_t flags;
+} datavec;
+
+static grn_rc
+datavec_reset(grn_ctx *ctx, datavec *dv, uint32_t dvlen,
+ size_t unitsize, size_t totalsize)
+{
+ int i;
+ if (!dv[0].data || dv[dvlen].data < dv[0].data + totalsize) {
+ if (dv[0].data) { GRN_FREE(dv[0].data); }
+ if (!(dv[0].data = GRN_MALLOC(totalsize * sizeof(uint32_t)))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ dv[dvlen].data = dv[0].data + totalsize;
+ }
+ for (i = 1; i < dvlen; i++) {
+ dv[i].data = dv[i - 1].data + unitsize;
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+datavec_init(grn_ctx *ctx, datavec *dv, uint32_t dvlen,
+ size_t unitsize, size_t totalsize)
+{
+ int i;
+ if (!totalsize) {
+ memset(dv, 0, sizeof(datavec) * (dvlen + 1));
+ return GRN_SUCCESS;
+ }
+ if (!(dv[0].data = GRN_MALLOC(totalsize * sizeof(uint32_t)))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ dv[dvlen].data = dv[0].data + totalsize;
+ for (i = 1; i < dvlen; i++) {
+ dv[i].data = dv[i - 1].data + unitsize;
+ }
+ return GRN_SUCCESS;
+}
+
+static void
+datavec_fin(grn_ctx *ctx, datavec *dv)
+{
+ if (dv[0].data) { GRN_FREE(dv[0].data); }
+}
+
+size_t
+grn_p_encv(grn_ctx *ctx, datavec *dv, uint32_t dvlen, uint8_t *res)
+{
+ uint8_t *rp = res, freq[33];
+ uint32_t pgap, usep, l, df, data_size, *dp, *dpe;
+ if (!dvlen || !(df = dv[0].data_size)) { return 0; }
+ for (usep = 0, data_size = 0, l = 0; l < dvlen; l++) {
+ uint32_t dl = dv[l].data_size;
+ if (dl < df || ((dl > df) && (l != dvlen - 1))) {
+ /* invalid argument */
+ return 0;
+ }
+ usep += (dv[l].flags & USE_P_ENC) << l;
+ data_size += dl;
+ }
+ pgap = data_size - df * dvlen;
+ if (!usep) {
+ GRN_B_ENC((df << 1) + 1, rp);
+ for (l = 0; l < dvlen; l++) {
+ for (dp = dv[l].data, dpe = dp + dv[l].data_size; dp < dpe; dp++) {
+ GRN_B_ENC(*dp, rp);
+ }
+ }
+ } else {
+ uint32_t buf[UNIT_SIZE];
+ GRN_B_ENC((usep << 1), rp);
+ GRN_B_ENC(df, rp);
+ if (dv[dvlen - 1].flags & ODD) {
+ GRN_B_ENC(pgap, rp);
+ } else {
+ GRN_ASSERT(!pgap);
+ }
+ for (l = 0; l < dvlen; l++) {
+ dp = dv[l].data;
+ dpe = dp + dv[l].data_size;
+ if ((dv[l].flags & USE_P_ENC)) {
+ uint32_t j = 0, d;
+ memset(freq, 0, 33);
+ while (dp < dpe) {
+ if (j == UNIT_SIZE) {
+ rp = pack(buf, j, freq, rp);
+ memset(freq, 0, 33);
+ j = 0;
+ }
+ if ((d = buf[j++] = *dp++)) {
+ uint32_t w;
+ GRN_BIT_SCAN_REV(d, w);
+ freq[w + 1]++;
+ } else {
+ freq[0]++;
+ }
+ }
+ if (j) { rp = pack(buf, j, freq, rp); }
+ } else {
+ while (dp < dpe) { GRN_B_ENC(*dp++, rp); }
+ }
+ }
+ }
+ return rp - res;
+}
+
+#define GRN_B_DEC_CHECK(v,p,pe) do { \
+ uint8_t *_p = (uint8_t *)p; \
+ uint32_t _v; \
+ if (_p >= pe) { return 0; } \
+ _v = *_p++; \
+ switch (_v >> 4) { \
+ case 0x08 : \
+ if (_v == 0x8f) { \
+ if (_p + sizeof(uint32_t) > pe) { return 0; } \
+ memcpy(&_v, _p, sizeof(uint32_t)); \
+ _p += sizeof(uint32_t); \
+ } \
+ break; \
+ case 0x09 : \
+ if (_p + 3 > pe) { return 0; } \
+ _v = (_v - 0x90) * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++ + 0x20408f; \
+ break; \
+ case 0x0a : \
+ case 0x0b : \
+ if (_p + 2 > pe) { return 0; } \
+ _v = (_v - 0xa0) * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++ + 0x408f; \
+ break; \
+ case 0x0c : \
+ case 0x0d : \
+ case 0x0e : \
+ case 0x0f : \
+ if (_p + 1 > pe) { return 0; } \
+ _v = (_v - 0xc0) * 0x100 + *_p++ + 0x8f; \
+ break; \
+ } \
+ v = _v; \
+ p = _p; \
+} while (0)
+
+static uint8_t *
+unpack(uint8_t *dp, uint8_t *dpe, int i, uint32_t *rp)
+{
+ uint8_t ne = 0, k = 0, w = *dp++;
+ uint32_t m, *p = rp;
+ if (w & 0x80) {
+ ne = *dp++;
+ w -= 0x80;
+ m = (1 << w) - 1;
+ if (m >= UNIT_MASK) { k = *dp++; }
+ } else {
+ m = (1 << w) - 1;
+ }
+ if (w) {
+ while (i >= 8) {
+ if (dp + w > dpe) { return NULL; }
+ switch (w) {
+ case 1 : dp = unpack_1(p, dp); break;
+ case 2 : dp = unpack_2(p, dp); break;
+ case 3 : dp = unpack_3(p, dp); break;
+ case 4 : dp = unpack_4(p, dp); break;
+ case 5 : dp = unpack_5(p, dp); break;
+ case 6 : dp = unpack_6(p, dp); break;
+ case 7 : dp = unpack_7(p, dp); break;
+ case 8 : dp = unpack_8(p, dp); break;
+ case 9 : dp = unpack_9(p, dp); break;
+ case 10 : dp = unpack_10(p, dp); break;
+ case 11 : dp = unpack_11(p, dp); break;
+ case 12 : dp = unpack_12(p, dp); break;
+ case 13 : dp = unpack_13(p, dp); break;
+ case 14 : dp = unpack_14(p, dp); break;
+ case 15 : dp = unpack_15(p, dp); break;
+ case 16 : dp = unpack_16(p, dp); break;
+ case 17 : dp = unpack_17(p, dp); break;
+ case 18 : dp = unpack_18(p, dp); break;
+ case 19 : dp = unpack_19(p, dp); break;
+ case 20 : dp = unpack_20(p, dp); break;
+ case 21 : dp = unpack_21(p, dp); break;
+ case 22 : dp = unpack_22(p, dp); break;
+ case 23 : dp = unpack_23(p, dp); break;
+ case 24 : dp = unpack_24(p, dp); break;
+ case 25 : dp = unpack_25(p, dp); break;
+ case 26 : dp = unpack_26(p, dp); break;
+ case 27 : dp = unpack_27(p, dp); break;
+ case 28 : dp = unpack_28(p, dp); break;
+ case 29 : dp = unpack_29(p, dp); break;
+ case 30 : dp = unpack_30(p, dp); break;
+ case 31 : dp = unpack_31(p, dp); break;
+ case 32 : dp = unpack_32(p, dp); break;
+ }
+ i -= 8;
+ p += 8;
+ }
+ {
+ int b;
+ uint32_t v, *pe;
+ for (b = 8 - w, v = 0, pe = p + i; p < pe && dp < dpe;) {
+ if (b > 0) {
+ *p++ = v + ((*dp >> b) & m);
+ b -= w;
+ v = 0;
+ } else if (b < 0) {
+ v += (*dp++ << -b) & m;
+ b += 8;
+ } else {
+ *p++ = v + (*dp++ & m);
+ b = 8 - w;
+ v = 0;
+ }
+ }
+ if (b + w != 8) { dp++; }
+ }
+ } else {
+ memset(p, 0, sizeof(uint32_t) * i);
+ }
+ if (ne) {
+ if (m >= UNIT_MASK) {
+ uint32_t *pp;
+ while (ne--) {
+ pp = &rp[k];
+ k = *pp;
+ GRN_B_DEC_CHECK(*pp, dp, dpe);
+ *pp += (m + 1);
+ }
+ } else {
+ while (ne--) {
+ k = *dp++;
+ GRN_B_DEC_CHECK(rp[k], dp, dpe);
+ rp[k] += (m + 1);
+ }
+ }
+ }
+ return dp;
+}
+
+int
+grn_p_dec(grn_ctx *ctx, uint8_t *data, uint32_t data_size, uint32_t nreq, uint32_t **res)
+{
+ uint8_t *dp = data, *dpe = data + data_size;
+ uint32_t rest, orig_size, *rp, *rpe;
+ GRN_B_DEC(orig_size, dp);
+ if (!orig_size) {
+ if (!nreq || nreq > data_size) { nreq = data_size; }
+ if ((*res = rp = GRN_MALLOC(nreq * 4))) {
+ for (rpe = rp + nreq; dp < data + data_size && rp < rpe; rp++) {
+ GRN_B_DEC(*rp, dp);
+ }
+ }
+ return rp - *res;
+ } else {
+ if (!(*res = rp = GRN_MALLOC(orig_size * sizeof(uint32_t)))) {
+ return 0;
+ }
+ if (!nreq || nreq > orig_size) { nreq = orig_size; }
+ for (rest = nreq; rest >= UNIT_SIZE; rest -= UNIT_SIZE) {
+ if (!(dp = unpack(dp, dpe, UNIT_SIZE, rp))) { return 0; }
+ rp += UNIT_SIZE;
+ }
+ if (rest) { if (!(dp = unpack(dp, dpe, rest, rp))) { return 0; } }
+ GRN_ASSERT(data + data_size == dp);
+ return nreq;
+ }
+}
+
+int
+grn_p_decv(grn_ctx *ctx, uint8_t *data, uint32_t data_size, datavec *dv, uint32_t dvlen)
+{
+ size_t size;
+ uint32_t df, l, i, *rp, nreq;
+ uint8_t *dp = data, *dpe = data + data_size;
+ if (!data_size) {
+ dv[0].data_size = 0;
+ return 0;
+ }
+ for (nreq = 0; nreq < dvlen; nreq++) {
+ if (dv[nreq].flags & CUT_OFF) { break; }
+ }
+ if (!nreq) { return 0; }
+ GRN_B_DEC_CHECK(df, dp, dpe);
+ if ((df & 1)) {
+ df >>= 1;
+ size = nreq == dvlen ? data_size : df * nreq;
+ if (dv[dvlen].data < dv[0].data + size) {
+ if (dv[0].data) { GRN_FREE(dv[0].data); }
+ if (!(rp = GRN_MALLOC(size * sizeof(uint32_t)))) { return 0; }
+ dv[dvlen].data = rp + size;
+ } else {
+ rp = dv[0].data;
+ }
+ for (l = 0; l < dvlen; l++) {
+ if (dv[l].flags & CUT_OFF) { break; }
+ dv[l].data = rp;
+ if (l < dvlen - 1) {
+ for (i = 0; i < df; i++, rp++) { GRN_B_DEC_CHECK(*rp, dp, dpe); }
+ } else {
+ for (i = 0; dp < dpe; i++, rp++) { GRN_B_DEC_CHECK(*rp, dp, dpe); }
+ }
+ dv[l].data_size = i;
+ }
+ } else {
+ uint32_t n, rest, usep = df >> 1;
+ GRN_B_DEC_CHECK(df, dp, dpe);
+ if (dv[dvlen -1].flags & ODD) {
+ GRN_B_DEC_CHECK(rest, dp, dpe);
+ } else {
+ rest = 0;
+ }
+ size = df * nreq + (nreq == dvlen ? rest : 0);
+ if (dv[dvlen].data < dv[0].data + size) {
+ if (dv[0].data) { GRN_FREE(dv[0].data); }
+ if (!(rp = GRN_MALLOC(size * sizeof(uint32_t)))) { return 0; }
+ dv[dvlen].data = rp + size;
+ } else {
+ rp = dv[0].data;
+ }
+ for (l = 0; l < dvlen; l++) {
+ if (dv[l].flags & CUT_OFF) { break; }
+ dv[l].data = rp;
+ dv[l].data_size = n = (l < dvlen - 1) ? df : df + rest;
+ if (usep & (1 << l)) {
+ for (; n >= UNIT_SIZE; n -= UNIT_SIZE) {
+ if (!(dp = unpack(dp, dpe, UNIT_SIZE, rp))) { return 0; }
+ rp += UNIT_SIZE;
+ }
+ if (n) {
+ if (!(dp = unpack(dp, dpe, n, rp))) { return 0; }
+ rp += n;
+ }
+ dv[l].flags |= USE_P_ENC;
+ } else {
+ for (; n; n--, rp++) {
+ GRN_B_DEC_CHECK(*rp, dp, dpe);
+ }
+ }
+ }
+ GRN_ASSERT(dp == dpe);
+ if (dp != dpe) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "data_size=%d, %" GRN_FMT_LLD,
+ data_size, (long long int)(dpe - dp));
+ }
+ }
+ return rp - dv[0].data;
+}
+
+int
+grn_b_enc(grn_ctx *ctx, uint32_t *data, uint32_t data_size, uint8_t **res)
+{
+ uint8_t *rp;
+ uint32_t *dp, i;
+ *res = rp = GRN_MALLOC(data_size * sizeof(uint32_t) * 2);
+ GRN_B_ENC(data_size, rp);
+ for (i = data_size, dp = data; i; i--, dp++) {
+ GRN_B_ENC(*dp, rp);
+ }
+ return rp - *res;
+}
+
+int
+grn_b_dec(grn_ctx *ctx, uint8_t *data, uint32_t data_size, uint32_t **res)
+{
+ uint32_t i, *rp, orig_size;
+ uint8_t *dp = data;
+ GRN_B_DEC(orig_size, dp);
+ *res = rp = GRN_MALLOC(orig_size * sizeof(uint32_t));
+ for (i = orig_size; i; i--, rp++) {
+ GRN_B_DEC(*rp, dp);
+ }
+ return orig_size;
+}
+
+/* buffer */
+
+typedef struct {
+ uint32_t tid;
+ uint32_t size_in_chunk;
+ uint32_t pos_in_chunk;
+ uint16_t size_in_buffer;
+ uint16_t pos_in_buffer;
+} buffer_term;
+
+typedef struct {
+ uint16_t step;
+ uint16_t jump;
+} buffer_rec;
+
+typedef struct {
+ uint32_t chunk;
+ uint32_t chunk_size;
+ uint32_t buffer_free;
+ uint16_t nterms;
+ uint16_t nterms_void;
+} buffer_header;
+
+struct grn_ii_buffer {
+ buffer_header header;
+ buffer_term terms[(S_SEGMENT - sizeof(buffer_header))/sizeof(buffer_term)];
+};
+
+typedef struct grn_ii_buffer buffer;
+
+inline static uint32_t
+buffer_open(grn_ctx *ctx, grn_ii *ii, uint32_t pos, buffer_term **bt, buffer **b)
+{
+ byte *p = NULL;
+ uint16_t lseg = (uint16_t) (LSEG(pos));
+ uint32_t pseg = ii->header->binfo[lseg];
+ if (pseg != NOT_ASSIGNED) {
+ GRN_IO_SEG_REF(ii->seg, pseg, p);
+ if (!p) { return NOT_ASSIGNED; }
+ if (b) { *b = (buffer *)p; }
+ if (bt) { *bt = (buffer_term *)(p + LPOS(pos)); }
+ }
+ return pseg;
+}
+
+inline static grn_rc
+buffer_close(grn_ctx *ctx, grn_ii *ii, uint32_t pseg)
+{
+ if (pseg >= MAX_PSEG) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "invalid pseg buffer_close(%d)", pseg);
+ return GRN_INVALID_ARGUMENT;
+ }
+ GRN_IO_SEG_UNREF(ii->seg, pseg);
+ return GRN_SUCCESS;
+}
+
+inline static uint32_t
+buffer_open_if_capable(grn_ctx *ctx, grn_ii *ii, int32_t seg, int size, buffer **b)
+{
+ uint32_t pseg, pos = SEG2POS(seg, 0);
+ if ((pseg = buffer_open(ctx, ii, pos, NULL, b)) != NOT_ASSIGNED) {
+ uint16_t nterms = (*b)->header.nterms - (*b)->header.nterms_void;
+ if (!((nterms < 4096 ||
+ (ii->header->total_chunk_size >> ((nterms >> 8) - 6))
+ > (*b)->header.chunk_size) &&
+ ((*b)->header.buffer_free >= size + sizeof(buffer_term)))) {
+ buffer_close(ctx, ii, pseg);
+ return NOT_ASSIGNED;
+ }
+ }
+ return pseg;
+}
+
+typedef struct {
+ uint32_t rid;
+ uint32_t sid;
+} docid;
+
+#define BUFFER_REC_DEL(r) ((r)->jump = 1)
+#define BUFFER_REC_DELETED(r) ((r)->jump == 1)
+
+#define BUFFER_REC_AT(b,pos) ((buffer_rec *)(b) + (pos))
+#define BUFFER_REC_POS(b,rec) ((uint16_t)((rec) - (buffer_rec *)(b)))
+
+inline static void
+buffer_term_dump(grn_ctx *ctx, grn_ii *ii, buffer *b, buffer_term *bt)
+{
+ int pos, rid, sid;
+ uint8_t *p;
+ buffer_rec *r;
+ GRN_LOG(ctx, GRN_LOG_DEBUG,
+ "b=(%x %u %u %u)", b->header.chunk, b->header.chunk_size, b->header.buffer_free, b->header.nterms);
+ GRN_LOG(ctx, GRN_LOG_DEBUG,
+ "bt=(%u %u %u %u %u)", bt->tid, bt->size_in_chunk, bt->pos_in_chunk, bt->size_in_buffer, bt->pos_in_buffer);
+ for (pos = bt->pos_in_buffer; pos; pos = r->step) {
+ r = BUFFER_REC_AT(b, pos);
+ p = NEXT_ADDR(r);
+ GRN_B_DEC(rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(sid, p);
+ } else {
+ sid = 1;
+ }
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "%d=(%d:%d),(%d:%d)", pos, r->jump, r->step, rid, sid);
+ }
+}
+
+inline static grn_rc
+check_jump(grn_ctx *ctx, grn_ii *ii, buffer *b, buffer_rec *r, int j)
+{
+ uint16_t i = BUFFER_REC_POS(b, r);
+ uint8_t *p;
+ buffer_rec *r2;
+ docid id, id2;
+ if (!j) { return GRN_SUCCESS; }
+ p = NEXT_ADDR(r);
+ GRN_B_DEC(id.rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(id.sid, p);
+ } else {
+ id.sid = 1;
+ }
+ if (j == 1) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "deleting! %d(%d:%d)", i, id.rid, id.sid);
+ return GRN_SUCCESS;
+ }
+ r2 = BUFFER_REC_AT(b, j);
+ p = NEXT_ADDR(r2);
+ GRN_B_DEC(id2.rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(id2.sid, p);
+ } else {
+ id2.sid = 1;
+ }
+ if (r2->step == i) {
+ GRN_LOG(ctx, GRN_LOG_EMERG, "cycle! %d(%d:%d)<->%d(%d:%d)", i, id.rid, id.sid, j, id2.rid, id2.sid);
+ return GRN_FILE_CORRUPT;
+ }
+ if (id2.rid < id.rid || (id2.rid == id.rid && id2.sid <= id.sid)) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "invalid jump! %d(%d:%d)(%d:%d)->%d(%d:%d)(%d:%d)", i, r->jump, r->step, id.rid, id.sid, j, r2->jump, r2->step, id2.rid, id2.sid);
+ return GRN_FILE_CORRUPT;
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+set_jump_r(grn_ctx *ctx, grn_ii *ii, buffer *b, buffer_rec *from, int to)
+{
+ int i, j, max_jump = 100;
+ buffer_rec *r, *r2;
+ for (r = from, j = to; j > 1 && max_jump--; r = BUFFER_REC_AT(b, r->step)) {
+ r2 = BUFFER_REC_AT(b, j);
+ if (r == r2) { break; }
+ if (BUFFER_REC_DELETED(r2)) { break; }
+ if (j == (i = r->jump)) { break; }
+ if (j == r->step) { break; }
+ if (check_jump(ctx, ii, b, r, j)) {
+ ERR(GRN_FILE_CORRUPT, "check_jump failed");
+ return ctx->rc;
+ }
+ r->jump = j;
+ j = i;
+ if (!r->step) { return GRN_FILE_CORRUPT; }
+ }
+ return GRN_SUCCESS;
+}
+
+#define GET_NUM_BITS(x,n) do {\
+ n = x;\
+ n = (n & 0x55555555) + ((n >> 1) & 0x55555555);\
+ n = (n & 0x33333333) + ((n >> 2) & 0x33333333);\
+ n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F);\
+ n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF);\
+ n = (n & 0x0000FFFF) + ((n >>16) & 0x0000FFFF);\
+} while (0)
+
+inline static grn_rc
+buffer_put(grn_ctx *ctx, grn_ii *ii, buffer *b, buffer_term *bt,
+ buffer_rec *rnew, uint8_t *bs, grn_ii_updspec *u, int size)
+{
+ uint8_t *p;
+ grn_rc rc = GRN_SUCCESS;
+ docid id_curr = {0, 0}, id_start = {0, 0}, id_post = {0, 0};
+ buffer_rec *r_curr, *r_start = NULL;
+ uint16_t last = 0, *lastp = &bt->pos_in_buffer, pos = BUFFER_REC_POS(b, rnew);
+ int vdelta = 0, delta, delta0 = 0, vhops = 0, nhops = 0, reset = 1;
+ memcpy(NEXT_ADDR(rnew), bs, size - sizeof(buffer_rec));
+ for (;;) {
+ if (!*lastp) {
+ rnew->step = 0;
+ rnew->jump = 0;
+ // smb_wmb();
+ *lastp = pos;
+ if (bt->size_in_buffer++ > 1) {
+ buffer_rec *rhead = BUFFER_REC_AT(b, bt->pos_in_buffer);
+ rhead->jump = pos;
+ if (!(bt->size_in_buffer & 1)) {
+ int n;
+ buffer_rec *r = BUFFER_REC_AT(b, rhead->step), *r2;
+ GET_NUM_BITS(bt->size_in_buffer, n);
+ while (n-- && (r->jump > 1)) {
+ r2 = BUFFER_REC_AT(b, r->jump);
+ if (BUFFER_REC_DELETED(r2)) { break; }
+ r = r2;
+ }
+ if (r != rnew) { set_jump_r(ctx, ii, b, r, last); }
+ }
+ }
+ break;
+ }
+ r_curr = BUFFER_REC_AT(b, *lastp);
+ p = NEXT_ADDR(r_curr);
+ GRN_B_DEC(id_curr.rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(id_curr.sid, p);
+ } else {
+ id_curr.sid = 1;
+ }
+ if (id_curr.rid < id_post.rid ||
+ (id_curr.rid == id_post.rid && id_curr.sid < id_post.sid)) {
+ rc = GRN_FILE_CORRUPT;
+ ERRSET(ctx, GRN_CRIT, rc, "loop found!!! (%d:%d)->(%d:%d)",
+ id_post.rid, id_post.sid, id_curr.rid, id_curr.sid);
+ buffer_term_dump(ctx, ii, b, bt);
+ bt->pos_in_buffer = 0;
+ bt->size_in_buffer = 0;
+ lastp = &bt->pos_in_buffer;
+ continue;
+ }
+ id_post.rid = id_curr.rid;
+ id_post.sid = id_curr.sid;
+ if (u->rid < id_curr.rid || (u->rid == id_curr.rid && u->sid <= id_curr.sid)) {
+ uint16_t step = *lastp, jump = r_curr->jump;
+ if (u->rid == id_curr.rid) {
+ if (u->sid == 0) {
+ while (id_curr.rid == u->rid) {
+ BUFFER_REC_DEL(r_curr);
+ if (!(step = r_curr->step)) { break; }
+ r_curr = BUFFER_REC_AT(b, step);
+ p = NEXT_ADDR(r_curr);
+ GRN_B_DEC(id_curr.rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(id_curr.sid, p);
+ } else {
+ id_curr.sid = 1;
+ }
+ }
+ } else if (u->sid == id_curr.sid) {
+ BUFFER_REC_DEL(r_curr);
+ step = r_curr->step;
+ }
+ }
+ rnew->step = step;
+ rnew->jump = check_jump(ctx, ii, b, rnew, jump) ? 0 : jump;
+ // smb_wmb();
+ *lastp = pos;
+ break;
+ }
+
+ if (reset) {
+ r_start = r_curr;
+ id_start.rid = id_curr.rid;
+ id_start.sid = id_curr.sid;
+ if (!(delta0 = u->rid - id_start.rid)) { delta0 = u->sid - id_start.sid; }
+ nhops = 0;
+ vhops = 1;
+ vdelta = delta0 >> 1;
+ } else {
+ if (!(delta = id_curr.rid - id_start.rid)) { delta = id_curr.sid - id_start.sid; }
+ if (vdelta < delta) {
+ vdelta += (delta0 >> ++vhops);
+ r_start = r_curr;
+ }
+ if (nhops > vhops) {
+ set_jump_r(ctx, ii, b, r_start, *lastp);
+ } else {
+ nhops++;
+ }
+ }
+
+ last = *lastp;
+ lastp = &r_curr->step;
+ reset = 0;
+ {
+ uint16_t posj = r_curr->jump;
+ if (posj > 1) {
+ buffer_rec *rj = BUFFER_REC_AT(b, posj);
+ if (!BUFFER_REC_DELETED(rj)) {
+ docid idj;
+ p = NEXT_ADDR(rj);
+ GRN_B_DEC(idj.rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(idj.sid, p);
+ } else {
+ idj.sid = 1;
+ }
+ if (idj.rid < u->rid || (idj.rid == u->rid && idj.sid < u->sid)) {
+ last = posj;
+ lastp = &rj->step;
+ } else {
+ reset = 1;
+ }
+ }
+ }
+ }
+ }
+ return rc;
+}
+
+/* array */
+
+inline static uint32_t *
+array_at(grn_ctx *ctx, grn_ii *ii, uint32_t id)
+{
+ byte *p = NULL;
+ uint32_t seg, pseg;
+ if (id > GRN_ID_MAX) { return NULL; }
+ seg = id >> W_ARRAY;
+ if ((pseg = ii->header->ainfo[seg]) == NOT_ASSIGNED) { return NULL; }
+ GRN_IO_SEG_REF(ii->seg, pseg, p);
+ if (!p) { return NULL; }
+ return (uint32_t *)(p + (id & ARRAY_MASK_IN_A_SEGMENT) * S_ARRAY_ELEMENT);
+}
+
+inline static uint32_t *
+array_get(grn_ctx *ctx, grn_ii *ii, uint32_t id)
+{
+ byte *p = NULL;
+ uint16_t seg;
+ uint32_t pseg;
+ if (id > GRN_ID_MAX) { return NULL; }
+ seg = id >> W_ARRAY;
+ if ((pseg = ii->header->ainfo[seg]) == NOT_ASSIGNED) {
+ if (segment_get_clear(ctx, ii, &pseg)) { return NULL; }
+ ii->header->ainfo[seg] = pseg;
+ if (seg >= ii->header->amax) { ii->header->amax = seg + 1; }
+ }
+ GRN_IO_SEG_REF(ii->seg, pseg, p);
+ if (!p) { return NULL; }
+ return (uint32_t *)(p + (id & ARRAY_MASK_IN_A_SEGMENT) * S_ARRAY_ELEMENT);
+}
+
+inline static void
+array_unref(grn_ii *ii, uint32_t id)
+{
+ GRN_IO_SEG_UNREF(ii->seg, ii->header->ainfo[id >> W_ARRAY]);
+}
+
+/* updspec */
+
+grn_ii_updspec *
+grn_ii_updspec_open(grn_ctx *ctx, uint32_t rid, uint32_t sid)
+{
+ grn_ii_updspec *u;
+ if (!(u = GRN_MALLOC(sizeof(grn_ii_updspec)))) { return NULL; }
+ u->rid = rid;
+ u->sid = sid;
+ u->weight = 0;
+ u->tf = 0;
+ u->atf = 0;
+ u->pos = NULL;
+ u->tail = NULL;
+ // u->vnodes = NULL;
+ return u;
+}
+
+#define GRN_II_MAX_TF 0x1ffff
+
+grn_rc
+grn_ii_updspec_add(grn_ctx *ctx, grn_ii_updspec *u, int pos, int32_t weight)
+{
+ struct _grn_ii_pos *p;
+ u->atf++;
+ if (u->tf >= GRN_II_MAX_TF) { return GRN_SUCCESS; }
+ if (!(p = GRN_MALLOC(sizeof(struct _grn_ii_pos)))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ u->weight += weight;
+ p->pos = pos;
+ p->next = NULL;
+ if (u->tail) {
+ u->tail->next = p;
+ } else {
+ u->pos = p;
+ }
+ u->tail = p;
+ u->tf++;
+ return GRN_SUCCESS;
+}
+
+int
+grn_ii_updspec_cmp(grn_ii_updspec *a, grn_ii_updspec *b)
+{
+ struct _grn_ii_pos *pa, *pb;
+ if (a->rid != b->rid) { return a->rid - b->rid; }
+ if (a->sid != b->sid) { return a->sid - b->sid; }
+ if (a->weight != b->weight) { return a->weight - b->weight; }
+ if (a->tf != b->tf) { return a->tf - b->tf; }
+ for (pa = a->pos, pb = b->pos; pa && pb; pa = pa->next, pb = pb->next) {
+ if (pa->pos != pb->pos) { return pa->pos - pb->pos; }
+ }
+ if (pa) { return 1; }
+ if (pb) { return -1; }
+ return 0;
+}
+
+grn_rc
+grn_ii_updspec_close(grn_ctx *ctx, grn_ii_updspec *u)
+{
+ struct _grn_ii_pos *p = u->pos, *q;
+ while (p) {
+ q = p->next;
+ GRN_FREE(p);
+ p = q;
+ }
+ GRN_FREE(u);
+ return GRN_SUCCESS;
+}
+
+inline static uint8_t *
+encode_rec(grn_ctx *ctx, grn_ii *ii, grn_ii_updspec *u, unsigned int *size, int deletep)
+{
+ uint8_t *br, *p;
+ struct _grn_ii_pos *pp;
+ uint32_t lpos, tf, weight;
+ if (deletep) {
+ tf = 0;
+ weight = 0;
+ } else {
+ tf = u->tf;
+ weight = u->weight;
+ }
+ if (!(br = GRN_MALLOC((tf + 4) * 5))) {
+ return NULL;
+ }
+ p = br;
+ GRN_B_ENC(u->rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_ENC(u->sid, p);
+ } else {
+ u->sid = 1;
+ }
+ GRN_B_ENC(tf, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { GRN_B_ENC(weight, p); }
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ for (lpos = 0, pp = u->pos; pp && tf--; lpos = pp->pos, pp = pp->next) {
+ GRN_B_ENC(pp->pos - lpos, p);
+ }
+ }
+ while (((intptr_t)p & 0x03)) { *p++ = 0; }
+ *size = (unsigned int) ((p - br) + sizeof(buffer_rec));
+ return br;
+}
+
+typedef struct {
+ grn_ii *ii;
+ grn_hash *h;
+} lexicon_deletable_arg;
+
+#ifdef CASCADE_DELETE_LEXICON
+static int
+lexicon_deletable(grn_ctx *ctx, grn_obj *lexicon, grn_id tid, void *arg)
+{
+ uint32_t *a;
+ grn_hash *h = ((lexicon_deletable_arg *)arg)->h;
+ grn_ii *ii = ((lexicon_deletable_arg *)arg)->ii;
+ if (!h) { return 0; }
+ if ((a = array_at(ctx, ii, tid))) {
+ if (a[0]) {
+ array_unref(ii, tid);
+ return 0;
+ }
+ array_unref(ii, tid);
+ }
+ {
+ grn_ii_updspec **u;
+ if (!grn_hash_get(ctx, h, &tid, sizeof(grn_id), (void **) &u)) {
+ return (ERRP(ctx, GRN_ERROR)) ? 0 : 1;
+ }
+ if (!(*u)->tf || !(*u)->sid) { return 1; }
+ return 0;
+ }
+}
+#endif /* CASCADE_DELETE_LEXICON */
+
+inline static void
+lexicon_delete(grn_ctx *ctx, grn_ii *ii, uint32_t tid, grn_hash *h)
+{
+#ifdef CASCADE_DELETE_LEXICON
+ lexicon_deletable_arg arg = {ii, h};
+ grn_table_delete_optarg optarg = {0, lexicon_deletable, &arg};
+ _grn_table_delete_by_id(ctx, ii->lexicon, tid, &optarg);
+#endif /* CASCADE_DELETE_LEXICON */
+}
+
+typedef struct {
+ grn_id rid;
+ uint32_t sid;
+ uint32_t tf;
+ uint32_t weight;
+ uint32_t flags;
+} docinfo;
+
+#define GETNEXTC() do {\
+ if (sdf) {\
+ uint32_t dgap = *srp++;\
+ cid.rid += dgap;\
+ if (dgap) { cid.sid = 0; }\
+ snp += cid.tf;\
+ cid.tf = 1 + *stp++;\
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { cid.weight = *sop++; }\
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {\
+ cid.sid += 1 + *ssp++;\
+ } else {\
+ cid.sid = 1;\
+ }\
+ sdf--;\
+ } else {\
+ cid.rid = 0;\
+ }\
+} while (0)
+
+#define PUTNEXT_(id) do {\
+ uint32_t dgap = id.rid - lid.rid;\
+ uint32_t sgap = (dgap ? id.sid : id.sid - lid.sid) - 1;\
+ *ridp++ = dgap;\
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {\
+ *sidp++ = sgap;\
+ }\
+ *tfp++ = id.tf - 1;\
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { *weightp++ = id.weight; }\
+ lid.rid = id.rid;\
+ lid.sid = id.sid;\
+} while (0)
+
+#define PUTNEXTC() do {\
+ if (cid.rid) {\
+ if (cid.tf) {\
+ if (lid.rid > cid.rid || (lid.rid == cid.rid && lid.sid >= cid.sid)) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "brokenc!! (%d:%d) -> (%d:%d)", lid.rid, lid.sid, bid.rid, bid.sid);\
+ rc = GRN_FILE_CORRUPT;\
+ break;\
+ }\
+ PUTNEXT_(cid);\
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {\
+ uint32_t i;\
+ for (i = 0; i < cid.tf; i++) {\
+ *posp++ = snp[i];\
+ spos += snp[i];\
+ }\
+ }\
+ } else {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "invalid chunk(%d,%d)", bt->tid, cid.rid);\
+ rc = GRN_FILE_CORRUPT;\
+ break;\
+ }\
+ }\
+ GETNEXTC();\
+} while (0)
+
+#define GETNEXTB() do {\
+ if (nextb) {\
+ uint32_t lrid = bid.rid, lsid = bid.sid;\
+ buffer_rec *br = BUFFER_REC_AT(sb, nextb);\
+ sbp = NEXT_ADDR(br);\
+ GRN_B_DEC(bid.rid, sbp);\
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {\
+ GRN_B_DEC(bid.sid, sbp);\
+ } else {\
+ bid.sid = 1;\
+ }\
+ if (lrid > bid.rid || (lrid == bid.rid && lsid >= bid.sid)) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "brokeng!! (%d:%d) -> (%d:%d)", lrid, lsid, bid.rid, bid.sid);\
+ rc = GRN_FILE_CORRUPT;\
+ break;\
+ }\
+ nextb = br->step;\
+ } else {\
+ bid.rid = 0;\
+ }\
+} while (0)
+
+#define PUTNEXTB() do {\
+ if (bid.rid && bid.sid) {\
+ GRN_B_DEC(bid.tf, sbp);\
+ if (bid.tf > 0) {\
+ if (lid.rid > bid.rid || (lid.rid == bid.rid && lid.sid >= bid.sid)) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "brokenb!! (%d:%d) -> (%d:%d)", lid.rid, lid.sid, bid.rid, bid.sid);\
+ rc = GRN_FILE_CORRUPT;\
+ break;\
+ }\
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { GRN_B_DEC(bid.weight, sbp); }\
+ PUTNEXT_(bid);\
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {\
+ while (bid.tf--) { GRN_B_DEC(*posp, sbp); spos += *posp++; }\
+ }\
+ }\
+ }\
+ GETNEXTB();\
+} while (0)
+
+#define MERGE_BC(cond) do {\
+ if (bid.rid) {\
+ if (cid.rid) {\
+ if (cid.rid < bid.rid) {\
+ PUTNEXTC();\
+ } else {\
+ if (bid.rid < cid.rid) {\
+ PUTNEXTB();\
+ } else {\
+ if (bid.sid) {\
+ if (cid.sid < bid.sid) {\
+ PUTNEXTC();\
+ } else {\
+ if (bid.sid == cid.sid) { GETNEXTC(); }\
+ PUTNEXTB();\
+ }\
+ } else {\
+ GETNEXTC();\
+ }\
+ }\
+ }\
+ } else {\
+ PUTNEXTB();\
+ }\
+ } else {\
+ if (cid.rid) {\
+ PUTNEXTC();\
+ } else {\
+ break;\
+ }\
+ }\
+} while (cond)
+
+typedef struct {
+ uint32_t segno;
+ uint32_t size;
+ uint32_t dgap;
+} chunk_info;
+
+static grn_rc
+chunk_flush(grn_ctx *ctx, grn_ii *ii, chunk_info *cinfo, uint8_t *enc, uint32_t encsize)
+{
+ grn_rc rc;
+ uint8_t *dc;
+ uint32_t dcn;
+ grn_io_win dw;
+ if (!(rc = chunk_new(ctx, ii, &dcn, encsize))) {
+ if ((dc = WIN_MAP2(ii->chunk, ctx, &dw, dcn, 0, encsize, grn_io_wronly))) {
+ memcpy(dc, enc, encsize);
+ grn_io_win_unmap2(&dw);
+ cinfo->segno = dcn;
+ cinfo->size = encsize;
+ rc = GRN_SUCCESS;
+ } else {
+ chunk_free(ctx, ii, dcn, 0, encsize);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ return rc;
+}
+
+static grn_rc
+chunk_merge(grn_ctx *ctx, grn_ii *ii, buffer *sb, buffer_term *bt,
+ chunk_info *cinfo, grn_id rid, datavec *dv,
+ uint16_t *nextbp, uint8_t **sbpp, docinfo *bidp, int32_t *balance)
+{
+ grn_rc rc;
+ grn_io_win sw;
+ uint64_t spos = 0;
+ uint32_t segno = cinfo->segno, size = cinfo->size, sdf = 0, ndf = 0;
+ uint32_t *ridp = NULL, *sidp = NULL, *tfp, *weightp = NULL, *posp = NULL;
+ docinfo cid = {0, 0, 0, 0, 0}, lid = {0, 0, 0, 0, 0}, bid = *bidp;
+ uint8_t *scp = WIN_MAP2(ii->chunk, ctx, &sw, segno, 0, size, grn_io_rdonly);
+ if (scp) {
+ uint16_t nextb = *nextbp;
+ uint32_t snn = 0, *srp, *ssp = NULL, *stp, *sop = NULL, *snp;
+ uint8_t *sbp = *sbpp;
+ datavec rdv[MAX_N_ELEMENTS + 1];
+ size_t bufsize = S_SEGMENT * ii->n_elements;
+ datavec_init(ctx, rdv, ii->n_elements, 0, 0);
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ rdv[ii->n_elements - 1].flags = ODD;
+ }
+ bufsize += grn_p_decv(ctx, scp, cinfo->size, rdv, ii->n_elements);
+ // (df in chunk list) = a[1] - sdf;
+ {
+ int j = 0;
+ sdf = rdv[j].data_size;
+ srp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { ssp = rdv[j++].data; }
+ stp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { sop = rdv[j++].data; }
+ snn = rdv[j].data_size;
+ snp = rdv[j].data;
+ }
+ if (!(rc = datavec_reset(ctx, dv, ii->n_elements, sdf + S_SEGMENT, bufsize))) {
+ {
+ int j = 0;
+ ridp = dv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { sidp = dv[j++].data; }
+ tfp = dv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { weightp = dv[j++].data; }
+ posp = dv[j].data;
+ }
+ GETNEXTC();
+ MERGE_BC(bid.rid <= rid || cid.rid);
+ *sbpp = sbp;
+ *nextbp = nextb;
+ *bidp = bid;
+ GRN_ASSERT(posp < dv[ii->n_elements].data);
+ ndf = ridp - dv[0].data;
+ }
+ datavec_fin(ctx, rdv);
+ grn_io_win_unmap2(&sw);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (!rc) {
+ int j = 0;
+ uint8_t *enc;
+ uint32_t encsize;
+ uint32_t np = posp - dv[ii->n_elements - 1].data;
+ uint32_t f_s = (ndf < 3) ? 0 : USE_P_ENC;
+ uint32_t f_d = ((ndf < 16) || (ndf <= (lid.rid >> 8))) ? 0 : USE_P_ENC;
+ dv[j].data_size = ndf; dv[j++].flags = f_d;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ }
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ }
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ uint32_t f_p = ((np < 32) || (np <= (spos >> 13))) ? 0 : USE_P_ENC;
+ dv[j].data_size = np; dv[j].flags = f_p|ODD;
+ }
+ if ((enc = GRN_MALLOC((ndf * 4 + np) * 2))) {
+ encsize = grn_p_encv(ctx, dv, ii->n_elements, enc);
+ if (!(rc = chunk_flush(ctx, ii, cinfo, enc, encsize))) {
+ chunk_free(ctx, ii, segno, 0, size);
+ }
+ GRN_FREE(enc);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ *balance += (ndf - sdf);
+ return rc;
+}
+
+static grn_rc
+buffer_merge(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h,
+ buffer *sb, uint8_t *sc, buffer *db, uint8_t *dc)
+{
+ buffer_term *bt;
+ grn_rc rc = GRN_SUCCESS;
+ uint8_t *sbp = NULL, *dcp = dc;
+ datavec dv[MAX_N_ELEMENTS + 1];
+ datavec rdv[MAX_N_ELEMENTS + 1];
+ uint16_t n = db->header.nterms, nterms_void = 0;
+ size_t unitsize = (S_SEGMENT + sb->header.chunk_size / sb->header.nterms) * 2;
+ // size_t unitsize = (S_SEGMENT + sb->header.chunk_size) * 2 + (1<<24);
+ size_t totalsize = unitsize * ii->n_elements;
+ //todo : realloc
+ if ((rc = datavec_init(ctx, dv, ii->n_elements, unitsize, totalsize))) {
+ return rc;
+ }
+ datavec_init(ctx, rdv, ii->n_elements, 0, 0);
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ rdv[ii->n_elements - 1].flags = ODD;
+ }
+ for (bt = db->terms; n; n--, bt++) {
+ uint16_t nextb;
+ uint64_t spos = 0;
+ int32_t balance = 0;
+ uint32_t *ridp, *sidp = NULL, *tfp, *weightp = NULL, *posp, nchunks = 0;
+ chunk_info *cinfo = NULL;
+ grn_id crid = GRN_ID_NIL;
+ docinfo cid = {0, 0, 0, 0, 0}, lid = {0, 0, 0, 0, 0}, bid = {0, 0};
+ uint32_t sdf = 0, snn = 0, ndf;
+ uint32_t *srp = NULL, *ssp = NULL, *stp = NULL, *sop = NULL, *snp = NULL;
+ if (!bt->tid) {
+ nterms_void++;
+ continue;
+ }
+ if (!bt->pos_in_buffer) {
+ GRN_ASSERT(!bt->size_in_buffer);
+ if (bt->size_in_chunk) {
+ memcpy(dcp, sc + bt->pos_in_chunk, bt->size_in_chunk);
+ bt->pos_in_chunk = (uint32_t)(dcp - dc);
+ dcp += bt->size_in_chunk;
+ }
+ continue;
+ }
+ nextb = bt->pos_in_buffer;
+ GETNEXTB();
+ if (sc && bt->size_in_chunk) {
+ uint8_t *scp = sc + bt->pos_in_chunk;
+ uint8_t *sce = scp + bt->size_in_chunk;
+ size_t size = S_SEGMENT * ii->n_elements;
+ if ((bt->tid & CHUNK_SPLIT)) {
+ int i;
+ GRN_B_DEC(nchunks, scp);
+ if (!(cinfo = GRN_MALLOCN(chunk_info, nchunks + 1))) {
+ datavec_fin(ctx, dv);
+ datavec_fin(ctx, rdv);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ for (i = 0; i < nchunks; i++) {
+ GRN_B_DEC(cinfo[i].segno, scp);
+ GRN_B_DEC(cinfo[i].size, scp);
+ GRN_B_DEC(cinfo[i].dgap, scp);
+ crid += cinfo[i].dgap;
+ if (bid.rid <= crid) {
+ rc = chunk_merge(ctx, ii, sb, bt, &cinfo[i], crid, dv,
+ &nextb, &sbp, &bid, &balance);
+ if (rc) {
+ datavec_fin(ctx, dv);
+ datavec_fin(ctx, rdv);
+ return rc;
+ }
+ }
+ }
+ }
+ if (sce > scp) {
+ size += grn_p_decv(ctx, scp, sce - scp, rdv, ii->n_elements);
+ {
+ int j = 0;
+ sdf = rdv[j].data_size;
+ srp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { ssp = rdv[j++].data; }
+ stp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { sop = rdv[j++].data; }
+ snn = rdv[j].data_size;
+ snp = rdv[j].data;
+ }
+ if ((rc = datavec_reset(ctx, dv, ii->n_elements, sdf + S_SEGMENT, size))) {
+ datavec_fin(ctx, dv);
+ datavec_fin(ctx, rdv);
+ return rc;
+ }
+ }
+ }
+ {
+ int j = 0;
+ ridp = dv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { sidp = dv[j++].data; }
+ tfp = dv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { weightp = dv[j++].data; }
+ posp = dv[j].data;
+ }
+ GETNEXTC();
+ MERGE_BC(1);
+ GRN_ASSERT(posp < dv[ii->n_elements].data);
+ ndf = ridp - dv[0].data;
+ /*
+ {
+ grn_obj buf;
+ uint32_t rid, sid, tf, i, pos, *pp;
+ GRN_TEXT_INIT(&buf, 0);
+ rid = 0;
+ pp = dv[3].data;
+ for (i = 0; i < ndf; i++) {
+ GRN_BULK_REWIND(&buf);
+ rid += dv[0].data[i];
+ if (dv[0].data[i]) { sid = 0; }
+ sid += dv[1].data[i] + 1;
+ tf = dv[2].data[i] + 1;
+ pos = 0;
+ grn_text_itoa(ctx, &buf, rid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, sid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, tf);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ while (tf--) {
+ pos += *pp++;
+ grn_text_itoa(ctx, &buf, pos);
+ if (tf) { GRN_TEXT_PUTC(ctx, &buf, ','); }
+ }
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "Posting:%s", GRN_TEXT_VALUE(&buf));
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ */
+ {
+ grn_id tid = bt->tid & GRN_ID_MAX;
+ uint32_t *a = array_at(ctx, ii, tid);
+ if (!a) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "array_entry not found tid=%d", tid);
+ memset(bt, 0, sizeof(buffer_term));
+ nterms_void++;
+ } else {
+ if (!ndf && !nchunks) {
+ a[0] = 0;
+ a[1] = 0;
+ lexicon_delete(ctx, ii, tid, h);
+ memset(bt, 0, sizeof(buffer_term));
+ nterms_void++;
+ } else if ((ii->header->flags & GRN_OBJ_WITH_SECTION)
+ && !nchunks && ndf == 1 && lid.rid < 0x100000 &&
+ lid.sid < 0x800 && lid.tf == 1 && lid.weight == 0) {
+ a[0] = (lid.rid << 12) + (lid.sid << 1) + 1;
+ a[1] = (ii->header->flags & GRN_OBJ_WITH_POSITION) ? posp[-1] : 0;
+ memset(bt, 0, sizeof(buffer_term));
+ nterms_void++;
+ } else if (!(ii->header->flags & GRN_OBJ_WITH_SECTION)
+ && !nchunks && ndf == 1 && lid.tf == 1 && lid.weight == 0) {
+ a[0] = (lid.rid << 1) + 1;
+ a[1] = (ii->header->flags & GRN_OBJ_WITH_POSITION) ? posp[-1] : 0;
+ memset(bt, 0, sizeof(buffer_term));
+ nterms_void++;
+ } else {
+ int j = 0;
+ uint8_t *dcp0;
+ uint32_t encsize;
+ uint32_t f_s = (ndf < 3) ? 0 : USE_P_ENC;
+ uint32_t f_d = ((ndf < 16) || (ndf <= (lid.rid >> 8))) ? 0 : USE_P_ENC;
+ dv[j].data_size = ndf; dv[j++].flags = f_d;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ }
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ dv[j].data_size = ndf; dv[j++].flags = f_s;
+ }
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ uint32_t np = posp - dv[ii->n_elements - 1].data;
+ uint32_t f_p = ((np < 32) || (np <= (spos >> 13))) ? 0 : USE_P_ENC;
+ dv[j].data_size = np; dv[j].flags = f_p|ODD;
+ }
+ dcp0 = dcp;
+ a[1] = (bt->size_in_chunk ? a[1] : 0) + (ndf - sdf) + balance;
+ if (nchunks) {
+ int i;
+ GRN_B_ENC(nchunks, dcp);
+ for (i = 0; i < nchunks; i++) {
+ GRN_B_ENC(cinfo[i].segno, dcp);
+ GRN_B_ENC(cinfo[i].size, dcp);
+ GRN_B_ENC(cinfo[i].dgap, dcp);
+ }
+ }
+ encsize = grn_p_encv(ctx, dv, ii->n_elements, dcp);
+
+ if (sb->header.chunk_size + S_SEGMENT <= (dcp - dc) + encsize) {
+ int i;
+ char buf[255], *bufp;
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "cs(%d)+(%d)=(%d)<=(%" GRN_FMT_LLD ")+(%d)=(%" GRN_FMT_LLD ")",
+ sb->header.chunk_size, S_SEGMENT, sb->header.chunk_size + S_SEGMENT,
+ (long long int)(dcp - dc), encsize, (long long int)((dcp - dc) + encsize));
+ for (j = 0; j < ii->n_elements; j++) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "rdv[%d] data_size=%d, flags=%d",
+ j, rdv[j].data_size, rdv[j].flags);
+ for (i = 0, bufp = buf; i < rdv[j].data_size;) {
+ bufp += sprintf(bufp, " %d", rdv[j].data[i]);
+ i++;
+ if (!(i % 32) || i == rdv[j].data_size) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "rdv[%d].data[%d]%s", j, i, buf);
+ bufp = buf;
+ }
+ }
+ }
+
+ for (j = 0; j < ii->n_elements; j++) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "dv[%d] data_size=%d, flags=%d",
+ j, dv[j].data_size, dv[j].flags);
+ for (i = 0, bufp = buf; i < dv[j].data_size;) {
+ bufp += sprintf(bufp, " %d", dv[j].data[i]);
+ i++;
+ if (!(i % 32) || i == dv[j].data_size) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "dv[%d].data[%d]%s", j, i, buf);
+ bufp = buf;
+ }
+ }
+ }
+
+ }
+
+ if (encsize > CHUNK_SPLIT_THRESHOLD &&
+ (cinfo || (cinfo = GRN_MALLOCN(chunk_info, nchunks + 1))) &&
+ !chunk_flush(ctx, ii, &cinfo[nchunks], dcp, encsize)) {
+ int i;
+ cinfo[nchunks].dgap = lid.rid - crid;
+ nchunks++;
+ dcp = dcp0;
+ GRN_B_ENC(nchunks, dcp);
+ for (i = 0; i < nchunks; i++) {
+ GRN_B_ENC(cinfo[i].segno, dcp);
+ GRN_B_ENC(cinfo[i].size, dcp);
+ GRN_B_ENC(cinfo[i].dgap, dcp);
+ }
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "split (%d) encsize=%d", tid, encsize);
+ bt->tid |= CHUNK_SPLIT;
+ } else {
+ dcp += encsize;
+ }
+ bt->pos_in_chunk = (uint32_t)(dcp0 - dc);
+ bt->size_in_chunk = (uint32_t)(dcp - dcp0);
+ bt->size_in_buffer = 0;
+ bt->pos_in_buffer = 0;
+ }
+ array_unref(ii, tid);
+ }
+ }
+ if (cinfo) { GRN_FREE(cinfo); }
+ }
+ datavec_fin(ctx, rdv);
+ datavec_fin(ctx, dv);
+ db->header.chunk_size = (uint32_t)(dcp - dc);
+ db->header.buffer_free =
+ S_SEGMENT - sizeof(buffer_header) - db->header.nterms * sizeof(buffer_term);
+ db->header.nterms_void = nterms_void;
+ return rc;
+}
+
+static void
+fake_map2(grn_ctx *ctx, grn_io *io, grn_io_win *iw, void *addr, uint32_t seg, uint32_t size)
+{
+ iw->ctx = ctx;
+ iw->diff = 0;
+ iw->io = io;
+ iw->mode = grn_io_wronly;
+ iw->segment = ((seg) >> GRN_II_N_CHUNK_VARIATION);
+ iw->offset = (((seg) & ((1 << GRN_II_N_CHUNK_VARIATION) - 1)) << GRN_II_W_LEAST_CHUNK);
+ iw->size = size;
+ iw->cached = 0;
+ iw->addr = addr;
+}
+
+static grn_rc
+buffer_flush(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
+{
+ grn_rc rc;
+ grn_io_win sw, dw;
+ buffer *sb, *db = NULL;
+ uint8_t *dc, *sc = NULL;
+ uint32_t ds, pseg, scn, dcn = 0;
+ if (ii->header->binfo[seg] == NOT_ASSIGNED) { return GRN_FILE_CORRUPT; }
+ if ((ds = segment_get(ctx, ii)) == MAX_PSEG) { return GRN_NO_MEMORY_AVAILABLE; }
+ pseg = buffer_open(ctx, ii, SEG2POS(seg, 0), NULL, &sb);
+ if (pseg != NOT_ASSIGNED) {
+ GRN_IO_SEG_REF(ii->seg, ds, db);
+ if (db) {
+ uint32_t actual_chunk_size = 0;
+ uint32_t max_dest_chunk_size = sb->header.chunk_size + S_SEGMENT;
+ if ((dc = GRN_MALLOC(max_dest_chunk_size * 2))) {
+ if ((scn = sb->header.chunk) == NOT_ASSIGNED ||
+ (sc = WIN_MAP2(ii->chunk, ctx, &sw, scn, 0,
+ sb->header.chunk_size, grn_io_rdonly))) {
+ uint16_t n = sb->header.nterms;
+ memset(db, 0, S_SEGMENT);
+ memcpy(db->terms, sb->terms, n * sizeof(buffer_term));
+ db->header.nterms = n;
+ if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db, dc))) {
+ actual_chunk_size = db->header.chunk_size;
+ if (actual_chunk_size >= max_dest_chunk_size) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "actual_chunk_size(%d) >= max_dest_chunk_size(%d)",
+ actual_chunk_size, max_dest_chunk_size);
+ }
+ if (!actual_chunk_size || !(rc = chunk_new(ctx, ii, &dcn, actual_chunk_size))) {
+ db->header.chunk = actual_chunk_size ? dcn : NOT_ASSIGNED;
+ fake_map2(ctx, ii->chunk, &dw, dc, dcn, actual_chunk_size);
+ if (!(rc = grn_io_win_unmap2(&dw))) {
+ buffer_segment_update(ii, seg, ds);
+ ii->header->total_chunk_size += actual_chunk_size;
+ if (scn != NOT_ASSIGNED) {
+ grn_io_win_unmap2(&sw);
+ chunk_free(ctx, ii, scn, 0, sb->header.chunk_size);
+ ii->header->total_chunk_size -= sb->header.chunk_size;
+ }
+ } else {
+ GRN_FREE(dc);
+ if (actual_chunk_size) {
+ chunk_free(ctx, ii, dcn, 0, actual_chunk_size);
+ }
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ GRN_IO_SEG_UNREF(ii->seg, ds);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ buffer_close(ctx, ii, pseg);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ return rc;
+}
+
+void
+grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
+{
+ grn_rc rc;
+ grn_io_win sw;
+ buffer *sb;
+ uint8_t *sc = NULL;
+ uint32_t pseg, scn, nterms_with_corrupt_chunk = 0, nterm_with_chunk = 0;
+ uint32_t ndeleted_terms_with_value = 0;
+ buffer_term *bt;
+ uint8_t *sbp = NULL;
+ datavec rdv[MAX_N_ELEMENTS + 1];
+ uint16_t n;
+ int nterms_void = 0;
+ int size_in_buffer = 0;
+ grn_obj buf;
+ size_t lower_bound;
+ int64_t nloops = 0, nviolations = 0;
+ if (ii->header->binfo[seg] == NOT_ASSIGNED) {
+ GRN_OUTPUT_BOOL(GRN_FALSE);
+ return;
+ }
+ pseg = buffer_open(ctx, ii, SEG2POS(seg, 0), NULL, &sb);
+ if (pseg == NOT_ASSIGNED) {
+ GRN_OUTPUT_BOOL(GRN_FALSE);
+ return;
+ }
+ lower_bound =
+ (sb->header.buffer_free + sizeof(buffer_term) * sb->header.nterms)
+ / sizeof(buffer_rec);
+ datavec_init(ctx, rdv, ii->n_elements, 0, 0);
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ rdv[ii->n_elements - 1].flags = ODD;
+ }
+ GRN_OUTPUT_MAP_OPEN("BUFFER", -1);
+ GRN_OUTPUT_CSTR("buffer id");
+ GRN_OUTPUT_INT64(seg);
+ if ((scn = sb->header.chunk) == NOT_ASSIGNED) {
+ GRN_OUTPUT_CSTR("void chunk size");
+ GRN_OUTPUT_INT64(sb->header.chunk_size);
+ } else {
+ if ((sc = WIN_MAP2(ii->chunk, ctx, &sw, scn, 0, sb->header.chunk_size, grn_io_rdonly))) {
+ GRN_OUTPUT_CSTR("chunk size");
+ GRN_OUTPUT_INT64(sb->header.chunk_size);
+ } else {
+ GRN_OUTPUT_CSTR("unmappable chunk size");
+ GRN_OUTPUT_INT64(sb->header.chunk_size);
+ }
+ }
+ GRN_OUTPUT_CSTR("buffer term");
+ GRN_OUTPUT_ARRAY_OPEN("TERMS", sb->header.nterms);
+
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, ii->lexicon->header.domain);
+ for (bt = sb->terms, n = sb->header.nterms; n; n--, bt++) {
+ grn_id tid, tid_;
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_size;
+ uint16_t nextb;
+ uint32_t nchunks = 0;
+ chunk_info *cinfo = NULL;
+ grn_id crid = GRN_ID_NIL;
+ docinfo bid = {0, 0};
+ uint32_t sdf = 0, snn = 0;
+ uint32_t *srp = NULL, *ssp = NULL, *stp = NULL, *sop = NULL, *snp = NULL;
+ if (!bt->tid && !bt->pos_in_buffer && !bt->size_in_buffer) {
+ nterms_void++;
+ continue;
+ }
+ GRN_OUTPUT_ARRAY_OPEN("TERM", -1);
+ tid = (bt->tid & GRN_ID_MAX);
+ key_size = grn_table_get_key(ctx, ii->lexicon, tid, key, GRN_TABLE_MAX_KEY_SIZE);
+ tid_ = grn_table_get(ctx, ii->lexicon, key, key_size);
+ GRN_TEXT_SET(ctx, &buf, key, key_size);
+ GRN_OUTPUT_OBJ(&buf, NULL);
+ GRN_OUTPUT_INT64(bt->tid);
+ GRN_OUTPUT_INT64(tid_);
+ nextb = bt->pos_in_buffer;
+ size_in_buffer += bt->size_in_buffer;
+ if (tid != tid_ && (bt->size_in_buffer || bt->size_in_chunk)) {
+ ndeleted_terms_with_value++;
+ }
+ GETNEXTB();
+ GRN_OUTPUT_INT64(bt->size_in_buffer);
+ GRN_OUTPUT_INT64(bt->size_in_chunk);
+ if (sc && bt->size_in_chunk) {
+ uint8_t *scp = sc + bt->pos_in_chunk;
+ uint8_t *sce = scp + bt->size_in_chunk;
+ size_t size = S_SEGMENT * ii->n_elements;
+ if ((bt->tid & CHUNK_SPLIT)) {
+ int i;
+ GRN_B_DEC(nchunks, scp);
+ if (!(cinfo = GRN_MALLOCN(chunk_info, nchunks + 1))) {
+ datavec_fin(ctx, rdv);
+ GRN_OBJ_FIN(ctx, &buf);
+ return;
+ }
+ for (i = 0; i < nchunks; i++) {
+ GRN_B_DEC(cinfo[i].segno, scp);
+ GRN_B_DEC(cinfo[i].size, scp);
+ GRN_B_DEC(cinfo[i].dgap, scp);
+ crid += cinfo[i].dgap;
+ }
+ }
+ if (sce > scp) {
+ size += grn_p_decv(ctx, scp, sce - scp, rdv, ii->n_elements);
+ {
+ int j = 0;
+ sdf = rdv[j].data_size;
+ GRN_OUTPUT_INT64(sdf);
+ srp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { ssp = rdv[j++].data; }
+ if (sdf != rdv[j].data_size) {
+ nterms_with_corrupt_chunk++;
+ }
+ stp = rdv[j++].data;
+ if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { sop = rdv[j++].data; }
+ GRN_OUTPUT_INT64(rdv[j].data_size);
+ snn = rdv[j].data_size;
+ snp = rdv[j].data;
+ }
+ nterm_with_chunk++;
+ }
+ }
+ {
+ uint16_t pos;
+ grn_id rid, sid, rid_ = 0, sid_ = 0;
+ uint8_t *p;
+ buffer_rec *r;
+ for (pos = bt->pos_in_buffer; pos; pos = r->step) {
+ if (pos < lower_bound) {
+ nviolations++;
+ }
+ r = BUFFER_REC_AT(sb, pos);
+ p = NEXT_ADDR(r);
+ GRN_B_DEC(rid, p);
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(sid, p);
+ } else {
+ sid = 1;
+ }
+ if (rid < rid_ || (rid == rid_ && sid < sid_)) {
+ nloops++;
+ }
+ rid_ = rid;
+ sid_ = sid;
+ }
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ if (cinfo) { GRN_FREE(cinfo); }
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_CSTR("buffer free");
+ GRN_OUTPUT_INT64(sb->header.buffer_free);
+ GRN_OUTPUT_CSTR("size in buffer");
+ GRN_OUTPUT_INT64(size_in_buffer);
+ GRN_OUTPUT_CSTR("nterms");
+ GRN_OUTPUT_INT64(sb->header.nterms);
+ if (nterms_void != sb->header.nterms_void) {
+ GRN_OUTPUT_CSTR("nterms void gap");
+ GRN_OUTPUT_INT64(nterms_void - sb->header.nterms_void);
+ }
+ GRN_OUTPUT_CSTR("nterms with chunk");
+ GRN_OUTPUT_INT64(nterm_with_chunk);
+ if (nterms_with_corrupt_chunk) {
+ GRN_OUTPUT_CSTR("nterms with corrupt chunk");
+ GRN_OUTPUT_INT64(nterms_with_corrupt_chunk);
+ }
+ if (ndeleted_terms_with_value) {
+ GRN_OUTPUT_CSTR("number of deleted terms with value");
+ GRN_OUTPUT_INT64(ndeleted_terms_with_value);
+ }
+ if (nloops) {
+ GRN_OUTPUT_CSTR("number of loops");
+ GRN_OUTPUT_INT64(nloops);
+ }
+ if (nviolations) {
+ GRN_OUTPUT_CSTR("number of violations");
+ GRN_OUTPUT_INT64(nviolations);
+ }
+ GRN_OUTPUT_MAP_CLOSE();
+ datavec_fin(ctx, rdv);
+ if (sc) { grn_io_win_unmap2(&sw); }
+ buffer_close(ctx, ii, pseg);
+}
+
+typedef struct {
+ buffer_term *bt;
+ const char *key;
+ uint32_t key_size;
+} term_sort;
+
+static int
+term_compar(const void *t1, const void *t2)
+{
+ int r;
+ const term_sort *x = (term_sort *)t1, *y = (term_sort *)t2;
+ if (x->key_size > y->key_size) {
+ return (r = memcmp(x->key, y->key, y->key_size)) ? r : x->key_size - y->key_size;
+ } else {
+ return (r = memcmp(x->key, y->key, x->key_size)) ? r : x->key_size - y->key_size;
+ }
+}
+
+static grn_rc
+term_split(grn_ctx *ctx, grn_obj *lexicon, buffer *sb, buffer *db0, buffer *db1)
+{
+ uint16_t i, n, *nt;
+ buffer_term *bt;
+ uint32_t s, th = (sb->header.chunk_size + sb->header.nterms) >> 1;
+ term_sort *ts = GRN_MALLOC(sb->header.nterms * sizeof(term_sort));
+ if (!ts) { return GRN_NO_MEMORY_AVAILABLE; }
+ for (i = 0, n = sb->header.nterms, bt = sb->terms; n; bt++, n--) {
+ if (bt->tid) {
+ grn_id tid = bt->tid & GRN_ID_MAX;
+ ts[i].key = _grn_table_key(ctx, lexicon, tid, &ts[i].key_size);
+ ts[i].bt = bt;
+ i++;
+ }
+ }
+ qsort(ts, i, sizeof(term_sort), term_compar);
+ memset(db0, 0, S_SEGMENT);
+ bt = db0->terms;
+ nt = &db0->header.nterms;
+ for (s = 0; n + 1 < i && s <= th; n++, bt++) {
+ memcpy(bt, ts[n].bt, sizeof(buffer_term));
+ (*nt)++;
+ s += ts[n].bt->size_in_chunk + 1;
+ }
+ memset(db1, 0, S_SEGMENT);
+ bt = db1->terms;
+ nt = &db1->header.nterms;
+ for (; n < i; n++, bt++) {
+ memcpy(bt, ts[n].bt, sizeof(buffer_term));
+ (*nt)++;
+ }
+ GRN_FREE(ts);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "d0=%d d1=%d", db0->header.nterms, db1->header.nterms);
+ return GRN_SUCCESS;
+}
+
+static void
+array_update(grn_ctx *ctx, grn_ii *ii, uint32_t dls, buffer *db)
+{
+ uint16_t n;
+ buffer_term *bt;
+ uint32_t *a, pos = SEG2POS(dls, sizeof(buffer_header));
+ for (n = db->header.nterms, bt = db->terms; n; n--, bt++) {
+ if (bt->tid) {
+ grn_id tid = bt->tid & GRN_ID_MAX;
+ if ((a = array_at(ctx, ii, tid))) {
+ a[0] = pos;
+ array_unref(ii, tid);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "array_at failed (%d)", tid);
+ }
+ }
+ pos += sizeof(buffer_term) >> 2;
+ }
+}
+
+static grn_rc
+buffer_split(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
+{
+ grn_rc rc;
+ grn_io_win sw, dw0, dw1;
+ buffer *sb, *db0 = NULL, *db1 = NULL;
+ uint8_t *sc = NULL, *dc0, *dc1;
+ uint32_t dps0, dps1, dls0, dls1, sps, scn, dcn0 = 0, dcn1 = 0;
+ if (ii->header->binfo[seg] == NOT_ASSIGNED) { return GRN_FILE_CORRUPT; }
+ if ((rc = buffer_segment_reserve(ctx, ii, &dls0, &dps0, &dls1, &dps1))) {
+ return rc;
+ }
+ sps = buffer_open(ctx, ii, SEG2POS(seg, 0), NULL, &sb);
+ if (sps != NOT_ASSIGNED) {
+ GRN_IO_SEG_REF(ii->seg, dps0, db0);
+ if (db0) {
+ GRN_IO_SEG_REF(ii->seg, dps1, db1);
+ if (db1) {
+ uint32_t actual_db0_chunk_size = 0;
+ uint32_t actual_db1_chunk_size = 0;
+ uint32_t max_dest_chunk_size = sb->header.chunk_size + S_SEGMENT;
+ if ((dc0 = GRN_MALLOC(max_dest_chunk_size * 2))) {
+ if ((dc1 = GRN_MALLOC(max_dest_chunk_size * 2))) {
+ if ((scn = sb->header.chunk) == NOT_ASSIGNED ||
+ (sc = WIN_MAP2(ii->chunk, ctx, &sw, scn, 0,
+ sb->header.chunk_size, grn_io_rdonly))) {
+ term_split(ctx, ii->lexicon, sb, db0, db1);
+ if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db0, dc0))) {
+ actual_db0_chunk_size = db0->header.chunk_size;
+ if (actual_db0_chunk_size >= max_dest_chunk_size) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "actual_db0_chunk_size(%d) >= max_dest_chunk_size(%d)",
+ actual_db0_chunk_size, max_dest_chunk_size);
+ }
+ if (!actual_db0_chunk_size ||
+ !(rc = chunk_new(ctx, ii, &dcn0, actual_db0_chunk_size))) {
+ db0->header.chunk = actual_db0_chunk_size ? dcn0 : NOT_ASSIGNED;
+ fake_map2(ctx, ii->chunk, &dw0, dc0, dcn0, actual_db0_chunk_size);
+ if (!(rc = grn_io_win_unmap2(&dw0))) {
+ if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db1, dc1))) {
+ actual_db1_chunk_size = db1->header.chunk_size;
+ if (actual_db1_chunk_size >= max_dest_chunk_size) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "actual_db1_chunk_size(%d) >= max_dest_chunk_size(%d)",
+ actual_db1_chunk_size, max_dest_chunk_size);
+ }
+ if (!actual_db1_chunk_size ||
+ !(rc = chunk_new(ctx, ii, &dcn1, actual_db1_chunk_size))) {
+ fake_map2(ctx, ii->chunk, &dw1, dc1, dcn1, actual_db1_chunk_size);
+ if (!(rc = grn_io_win_unmap2(&dw1))) {
+ db1->header.chunk = actual_db1_chunk_size ? dcn1 : NOT_ASSIGNED;
+ buffer_segment_update(ii, dls0, dps0);
+ buffer_segment_update(ii, dls1, dps1);
+ array_update(ctx, ii, dls0, db0);
+ array_update(ctx, ii, dls1, db1);
+ buffer_segment_clear(ii, seg);
+ ii->header->total_chunk_size += actual_db0_chunk_size;
+ ii->header->total_chunk_size += actual_db1_chunk_size;
+ if (scn != NOT_ASSIGNED) {
+ grn_io_win_unmap2(&sw);
+ chunk_free(ctx, ii, scn, 0, sb->header.chunk_size);
+ ii->header->total_chunk_size -= sb->header.chunk_size;
+ }
+ } else {
+ if (actual_db1_chunk_size) {
+ chunk_free(ctx, ii, dcn1, 0, actual_db1_chunk_size);
+ }
+ if (actual_db0_chunk_size) {
+ chunk_free(ctx, ii, dcn0, 0, actual_db0_chunk_size);
+ }
+ GRN_FREE(dc1);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ if (actual_db0_chunk_size) {
+ chunk_free(ctx, ii, dcn0, 0, actual_db0_chunk_size);
+ }
+ GRN_FREE(dc1);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ if (actual_db0_chunk_size) {
+ chunk_free(ctx, ii, dcn0, 0, actual_db0_chunk_size);
+ }
+ GRN_FREE(dc1);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ if (actual_db0_chunk_size) {
+ chunk_free(ctx, ii, dcn0, 0, actual_db0_chunk_size);
+ }
+ GRN_FREE(dc1);
+ GRN_FREE(dc0);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc1);
+ GRN_FREE(dc0);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc1);
+ GRN_FREE(dc0);
+ if (scn != NOT_ASSIGNED) { grn_io_win_unmap2(&sw); }
+ }
+ } else {
+ GRN_FREE(dc1);
+ GRN_FREE(dc0);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ GRN_FREE(dc0);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ GRN_IO_SEG_UNREF(ii->seg, dps1);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ GRN_IO_SEG_UNREF(ii->seg, dps0);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ buffer_close(ctx, ii, sps);
+ } else {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ }
+ return rc;
+}
+
+#define SCALE_FACTOR 2048
+#define MAX_NTERMS 8192
+#define SPLIT_COND (b->header.nterms > 1024 ||\
+ (b->header.nterms > 1 &&\
+ b->header.chunk_size * 100 > ii->header->total_chunk_size))
+
+inline static uint32_t
+buffer_new(grn_ctx *ctx, grn_ii *ii, int size, uint32_t *pos,
+ buffer_term **bt, buffer_rec **br, buffer **bp, grn_id id, grn_hash *h)
+{
+ buffer *b = NULL;
+ grn_id tid;
+ uint16_t offset;
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ // unsigned int key_size;
+ // const char *key = _grn_table_key(ctx, ii->lexicon, id, &key_size);
+ int key_size = grn_table_get_key(ctx, ii->lexicon, id, key, GRN_TABLE_MAX_KEY_SIZE);
+ uint32_t *a, lseg = NOT_ASSIGNED, pseg = NOT_ASSIGNED;
+ grn_table_cursor *tc = NULL;
+ if (S_SEGMENT - sizeof(buffer_header) < size + sizeof(buffer_term)) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "requested size(%d) is too large", size);
+ return NOT_ASSIGNED;
+ }
+ if (ii->lexicon->header.type == GRN_TABLE_PAT_KEY) {
+ if (ii->lexicon->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ tc = grn_table_cursor_open(ctx, ii->lexicon, key, key_size, NULL, 0, 0, -1,
+ GRN_CURSOR_ASCENDING|GRN_CURSOR_GT);
+ } else {
+ tc = grn_table_cursor_open(ctx, ii->lexicon, NULL, 0, key, key_size, 0, -1,
+ GRN_CURSOR_PREFIX);
+ }
+ } else {
+ tc = grn_table_cursor_open(ctx, ii->lexicon, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_ASCENDING);
+ }
+ if (tc) {
+ while (lseg == NOT_ASSIGNED && (tid = grn_table_cursor_next(ctx, tc))) {
+ if ((a = array_at(ctx, ii, tid))) {
+ for (;;) {
+ uint32_t pos = a[0];
+ if (!pos || (pos & 1)) { break; }
+ if ((pseg = buffer_open(ctx, ii, pos, NULL, &b)) == NOT_ASSIGNED) { break; }
+ if (b->header.buffer_free >= size + sizeof(buffer_term)) {
+ lseg = LSEG(pos);
+ break;
+ }
+ buffer_close(ctx, ii, pseg);
+ if (SPLIT_COND)
+ /* ((S_SEGMENT - sizeof(buffer_header) + ii->header->bmax -
+ b->header.nterms * sizeof(buffer_term)) * 4 <
+ b->header.chunk_size) */
+ {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "nterms=%d chunk=%d total=%" GRN_FMT_INT64U,
+ b->header.nterms,
+ b->header.chunk_size,
+ ii->header->total_chunk_size >> 10);
+ if (buffer_split(ctx, ii, LSEG(pos), h)) { break; }
+ } else {
+ if (S_SEGMENT - sizeof(buffer_header)
+ - b->header.nterms * sizeof(buffer_term)
+ < size + sizeof(buffer_term)) {
+ break;
+ }
+ if (buffer_flush(ctx, ii, LSEG(pos), h)) { break; }
+ }
+ }
+ array_unref(ii, tid);
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ if (lseg == NOT_ASSIGNED) {
+ if (buffer_segment_new(ctx, ii, &lseg) ||
+ (pseg = buffer_open(ctx, ii, SEG2POS(lseg, 0), NULL, &b)) == NOT_ASSIGNED) {
+ return NOT_ASSIGNED;
+ }
+ memset(b, 0, S_SEGMENT);
+ b->header.buffer_free = S_SEGMENT - sizeof(buffer_header);
+ b->header.chunk = NOT_ASSIGNED;
+ }
+ if (b->header.nterms_void) {
+ for (offset = 0; offset < b->header.nterms; offset++) {
+ if (!b->terms[offset].tid) { break; }
+ }
+ if (offset == b->header.nterms) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "inconsistent buffer(%d)", lseg);
+ b->header.nterms_void = 0;
+ b->header.nterms++;
+ b->header.buffer_free -= size + sizeof(buffer_term);
+ } else {
+ b->header.nterms_void--;
+ b->header.buffer_free -= size;
+ }
+ } else {
+ offset = b->header.nterms++;
+ b->header.buffer_free -= size + sizeof(buffer_term);
+ }
+ *pos = SEG2POS(lseg, (sizeof(buffer_header) + sizeof(buffer_term) * offset));
+ *bt = &b->terms[offset];
+ *br = (buffer_rec *)(((byte *)&b->terms[b->header.nterms]) + b->header.buffer_free);
+ *bp = b;
+ return pseg;
+}
+
+/* ii */
+
+static grn_ii *
+_grn_ii_create(grn_ctx *ctx, grn_ii *ii, const char *path, grn_obj *lexicon, uint32_t flags)
+{
+ int i;
+ grn_io *seg, *chunk;
+ char path2[PATH_MAX];
+ struct grn_ii_header *header;
+ grn_obj_flags lflags;
+ grn_encoding encoding;
+ grn_obj *tokenizer;
+ /*
+ for (i = 0; i < 32; i++) {
+ new_histogram[i] = 0;
+ free_histogram[i] = 0;
+ }
+ */
+ if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer,
+ NULL, NULL)) {
+ return NULL;
+ }
+ if (path && strlen(path) + 6 >= PATH_MAX) { return NULL; }
+ seg = grn_io_create(ctx, path, sizeof(struct grn_ii_header),
+ S_SEGMENT, MAX_PSEG, grn_io_auto, GRN_IO_EXPIRE_SEGMENT);
+ if (!seg) { return NULL; }
+ if (path) {
+ strcpy(path2, path);
+ strcat(path2, ".c");
+ chunk = grn_io_create(ctx, path2, 0, S_CHUNK, GRN_II_MAX_CHUNK, grn_io_auto,
+ GRN_IO_EXPIRE_SEGMENT);
+ } else {
+ chunk = grn_io_create(ctx, NULL, 0, S_CHUNK, GRN_II_MAX_CHUNK, grn_io_auto, 0);
+ }
+ if (!chunk) {
+ grn_io_close(ctx, seg);
+ return NULL;
+ }
+ header = grn_io_header(seg);
+ grn_io_set_type(seg, GRN_COLUMN_INDEX);
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ header->ainfo[i] = NOT_ASSIGNED;
+ header->binfo[i] = NOT_ASSIGNED;
+ }
+ for (i = 0; i <= GRN_II_N_CHUNK_VARIATION; i++) {
+ header->free_chunks[i] = NOT_ASSIGNED;
+ header->garbages[i] = NOT_ASSIGNED;
+ }
+ header->flags = flags;
+ ii->seg = seg;
+ ii->chunk = chunk;
+ ii->lexicon = lexicon;
+ ii->lflags = lflags;
+ ii->encoding = encoding;
+ ii->header = header;
+ ii->n_elements = 2;
+ if ((flags & GRN_OBJ_WITH_SECTION)) { ii->n_elements++; }
+ if ((flags & GRN_OBJ_WITH_WEIGHT)) { ii->n_elements++; }
+ if ((flags & GRN_OBJ_WITH_POSITION)) { ii->n_elements++; }
+ return ii;
+}
+
+grn_ii *
+grn_ii_create(grn_ctx *ctx, const char *path, grn_obj *lexicon, uint32_t flags)
+{
+ grn_ii *ii = NULL;
+ if (!(ii = GRN_GMALLOC(sizeof(grn_ii)))) {
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(ii, GRN_COLUMN_INDEX);
+ if (!_grn_ii_create(ctx, ii, path, lexicon, flags)) {
+ GRN_FREE(ii);
+ return NULL;
+ }
+ return ii;
+}
+
+grn_rc
+grn_ii_remove(grn_ctx *ctx, const char *path)
+{
+ grn_rc rc;
+ char buffer[PATH_MAX];
+ if (!path || strlen(path) > PATH_MAX - 4) { return GRN_INVALID_ARGUMENT; }
+ if ((rc = grn_io_remove(ctx, path))) { goto exit; }
+ snprintf(buffer, PATH_MAX, "%s.c", path);
+ rc = grn_io_remove(ctx, buffer);
+exit :
+ return rc;
+}
+
+grn_rc
+grn_ii_truncate(grn_ctx *ctx, grn_ii *ii)
+{
+ grn_rc rc;
+ const char *io_segpath, *io_chunkpath;
+ char *segpath, *chunkpath = NULL;
+ grn_obj *lexicon;
+ uint32_t flags;
+ if ((io_segpath = grn_io_path(ii->seg)) && *io_segpath != '\0') {
+ if (!(segpath = GRN_STRDUP(io_segpath))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_segpath);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if ((io_chunkpath = grn_io_path(ii->chunk)) && *io_chunkpath != '\0') {
+ if (!(chunkpath = GRN_STRDUP(io_chunkpath))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_chunkpath);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ chunkpath = NULL;
+ }
+ } else {
+ segpath = NULL;
+ }
+ lexicon = ii->lexicon;
+ flags = ii->header->flags;
+ if ((rc = grn_io_close(ctx, ii->seg))) { goto exit; }
+ if ((rc = grn_io_close(ctx, ii->chunk))) { goto exit; }
+ ii->seg = NULL;
+ ii->chunk = NULL;
+ if (segpath && (rc = grn_io_remove(ctx, segpath))) { goto exit; }
+ if (chunkpath && (rc = grn_io_remove(ctx, chunkpath))) { goto exit; }
+ if (!_grn_ii_create(ctx, ii, segpath, lexicon, flags)) {
+ rc = GRN_UNKNOWN_ERROR;
+ }
+exit:
+ if (segpath) { GRN_FREE(segpath); }
+ if (chunkpath) { GRN_FREE(chunkpath); }
+ return rc;
+}
+
+grn_ii *
+grn_ii_open(grn_ctx *ctx, const char *path, grn_obj *lexicon)
+{
+ grn_io *seg, *chunk;
+ grn_ii *ii;
+ char path2[PATH_MAX];
+ struct grn_ii_header *header;
+ grn_obj_flags lflags;
+ grn_encoding encoding;
+ grn_obj *tokenizer;
+ if (grn_table_get_info(ctx, lexicon, &lflags, &encoding, &tokenizer,
+ NULL, NULL)) {
+ return NULL;
+ }
+ if (strlen(path) + 6 >= PATH_MAX) { return NULL; }
+ strcpy(path2, path);
+ strcat(path2, ".c");
+ seg = grn_io_open(ctx, path, grn_io_auto);
+ if (!seg) { return NULL; }
+ chunk = grn_io_open(ctx, path2, grn_io_auto);
+ if (!chunk) {
+ grn_io_close(ctx, seg);
+ return NULL;
+ }
+ header = grn_io_header(seg);
+ if (grn_io_get_type(seg) != GRN_COLUMN_INDEX) {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ grn_io_close(ctx, seg);
+ grn_io_close(ctx, chunk);
+ return NULL;
+ }
+ if (!(ii = GRN_GMALLOC(sizeof(grn_ii)))) {
+ grn_io_close(ctx, seg);
+ grn_io_close(ctx, chunk);
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(ii, GRN_COLUMN_INDEX);
+ ii->seg = seg;
+ ii->chunk = chunk;
+ ii->lexicon = lexicon;
+ ii->lflags = lflags;
+ ii->encoding = encoding;
+ ii->header = header;
+ ii->n_elements = 2;
+ if ((header->flags & GRN_OBJ_WITH_SECTION)) { ii->n_elements++; }
+ if ((header->flags & GRN_OBJ_WITH_WEIGHT)) { ii->n_elements++; }
+ if ((header->flags & GRN_OBJ_WITH_POSITION)) { ii->n_elements++; }
+ return ii;
+}
+
+grn_rc
+grn_ii_close(grn_ctx *ctx, grn_ii *ii)
+{
+ grn_rc rc;
+ if (!ii) { return GRN_INVALID_ARGUMENT; }
+ if ((rc = grn_io_close(ctx, ii->seg))) { return rc; }
+ if ((rc = grn_io_close(ctx, ii->chunk))) { return rc; }
+ GRN_GFREE(ii);
+ /*
+ {
+ int i;
+ for (i = 0; i < 32; i++) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "new[%d]=%d free[%d]=%d",
+ i, new_histogram[i],
+ i, free_histogram[i]);
+ }
+ }
+ */
+ return rc;
+}
+
+grn_rc
+grn_ii_info(grn_ctx *ctx, grn_ii *ii, uint64_t *seg_size, uint64_t *chunk_size)
+{
+ grn_rc rc;
+
+ if (seg_size) {
+ if ((rc = grn_io_size(ctx, ii->seg, seg_size))) {
+ return rc;
+ }
+ }
+
+ if (chunk_size) {
+ if ((rc = grn_io_size(ctx, ii->chunk, chunk_size))) {
+ return rc;
+ }
+ }
+
+ return GRN_SUCCESS;
+}
+
+void
+grn_ii_expire(grn_ctx *ctx, grn_ii *ii)
+{
+ /*
+ grn_io_expire(ctx, ii->seg, 128, 1000000);
+ */
+ grn_io_expire(ctx, ii->chunk, 0, 1000000);
+}
+
+#define BIT11_01(x) ((x >> 1) & 0x7ff)
+#define BIT31_12(x) (x >> 12)
+
+grn_rc
+grn_ii_update_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h)
+{
+ grn_rc rc = GRN_SUCCESS;
+ buffer *b;
+ uint8_t *bs;
+ buffer_rec *br = NULL;
+ buffer_term *bt;
+ uint32_t pseg = 0, pos = 0, size, *a;
+ if (!tid) { return rc; }
+ if (!u->tf || !u->sid) { return grn_ii_delete_one(ctx, ii, tid, u, h); }
+ if (u->sid > ii->header->smax) { ii->header->smax = u->sid; }
+ if (!(a = array_get(ctx, ii, tid))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(bs = encode_rec(ctx, ii, u, &size, 0))) {
+ rc = GRN_NO_MEMORY_AVAILABLE; goto exit;
+ }
+ for (;;) {
+ if (a[0]) {
+ if (!(a[0] & 1)) {
+ pos = a[0];
+ if ((pseg = buffer_open(ctx, ii, pos, &bt, &b)) == NOT_ASSIGNED) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ if (b->header.buffer_free < size) {
+ int bfb = b->header.buffer_free;
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "flushing a[0]=%d seg=%d(%p) free=%d",
+ a[0], LSEG(a[0]), b, b->header.buffer_free);
+ buffer_close(ctx, ii, pseg);
+ if (SPLIT_COND)
+ /*((S_SEGMENT - sizeof(buffer_header) + ii->header->bmax -
+ b->header.nterms * sizeof(buffer_term)) * 4 <
+ b->header.chunk_size)*/
+ {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "nterms=%d chunk=%d total=%" GRN_FMT_INT64U,
+ b->header.nterms,
+ b->header.chunk_size,
+ ii->header->total_chunk_size >> 10);
+ if ((rc = buffer_split(ctx, ii, LSEG(pos), h))) { goto exit; }
+ continue;
+ }
+ if ((rc = buffer_flush(ctx, ii, LSEG(pos), h))) { goto exit; }
+ if (a[0] != pos) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "grn_ii_update_one: a[0] changed %d->%d", a[0], pos);
+ continue;
+ }
+ if ((pseg = buffer_open(ctx, ii, pos, &bt, &b)) == NOT_ASSIGNED) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "buffer not found a[0]=%d", a[0]);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "flushed a[0]=%d seg=%d(%p) free=%d->%d nterms=%d v=%d",
+ a[0], LSEG(a[0]), b, bfb, b->header.buffer_free,
+ b->header.nterms, b->header.nterms_void);
+ if (b->header.buffer_free < size) {
+ buffer_close(ctx, ii, pseg);
+ GRN_LOG(ctx, GRN_LOG_CRIT, "buffer(%d) is full (%d < %d) in grn_ii_update_one",
+ a[0], b->header.buffer_free, size);
+ /* todo: direct merge */
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ }
+ b->header.buffer_free -= size;
+ br = (buffer_rec *)(((byte *)&b->terms[b->header.nterms])
+ + b->header.buffer_free);
+ } else {
+ grn_ii_updspec u2;
+ uint32_t size2 = 0, v = a[0];
+ struct _grn_ii_pos pos2;
+ pos2.pos = a[1];
+ pos2.next = NULL;
+ u2.pos = &pos2;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ u2.rid = BIT31_12(v);
+ u2.sid = BIT11_01(v);
+ } else {
+ u2.rid = v >> 1;
+ u2.sid = 1;
+ }
+ u2.tf = 1;
+ u2.weight = 0;
+ if (u2.rid != u->rid || u2.sid != u->sid) {
+ uint8_t *bs2 = encode_rec(ctx, ii, &u2, &size2, 0);
+ if (!bs2) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "encode_rec on grn_ii_update_one failed !");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ pseg = buffer_new(ctx, ii, size + size2, &pos, &bt, &br, &b, tid, h);
+ if (pseg == NOT_ASSIGNED) {
+ GRN_FREE(bs2);
+ goto exit;
+ }
+ bt->tid = tid;
+ bt->size_in_chunk = 0;
+ bt->pos_in_chunk = 0;
+ bt->size_in_buffer = 0;
+ bt->pos_in_buffer = 0;
+ if ((rc = buffer_put(ctx, ii, b, bt, br, bs2, &u2, size2))) {
+ GRN_FREE(bs2);
+ buffer_close(ctx, ii, pseg);
+ goto exit;
+ }
+ br = (buffer_rec *)(((byte *)br) + size2);
+ GRN_FREE(bs2);
+ }
+ }
+ }
+ break;
+ }
+ if (!br) {
+ if (u->tf == 1 && u->weight == 0) {
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ if (u->rid < 0x100000 && u->sid < 0x800) {
+ a[0] = (u->rid << 12) + (u->sid << 1) + 1;
+ a[1] = u->pos->pos;
+ goto exit;
+ }
+ } else {
+ a[0] = (u->rid << 1) + 1;
+ a[1] = u->pos->pos;
+ goto exit;
+ }
+ }
+ pseg = buffer_new(ctx, ii, size, &pos, &bt, &br, &b, tid, h);
+ if (pseg == NOT_ASSIGNED) { goto exit; }
+ bt->tid = tid;
+ bt->size_in_chunk = 0;
+ bt->pos_in_chunk = 0;
+ bt->size_in_buffer = 0;
+ bt->pos_in_buffer = 0;
+ }
+ rc = buffer_put(ctx, ii, b, bt, br, bs, u, size);
+ buffer_close(ctx, ii, pseg);
+ if (!a[0] || (a[0] & 1)) { a[0] = pos; }
+exit :
+ array_unref(ii, tid);
+ if (bs) { GRN_FREE(bs); }
+ if (u->tf != u->atf) {
+ char term[GRN_TABLE_MAX_KEY_SIZE];
+ int term_size;
+ term_size = grn_table_get_key(ctx, ii->lexicon, tid,
+ term, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "too many postings(%d). %d postings are discarded. "
+ "term: <%d>(<%.*s>)",
+ u->atf, u->atf - u->tf,
+ tid, term_size, term);
+ }
+ grn_ii_expire(ctx, ii);
+ return rc;
+}
+
+grn_rc
+grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, grn_id tid, grn_ii_updspec *u, grn_hash *h)
+{
+ grn_rc rc = GRN_SUCCESS;
+ buffer *b;
+ uint8_t *bs = NULL;
+ buffer_rec *br;
+ buffer_term *bt;
+ uint32_t pseg, size, *a;
+ if (!tid) { return rc; }
+ if (!(a = array_at(ctx, ii, tid))) { return GRN_INVALID_ARGUMENT; }
+ for (;;) {
+ if (!a[0]) { goto exit; }
+ if (a[0] & 1) {
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ uint32_t rid = BIT31_12(a[0]);
+ uint32_t sid = BIT11_01(a[0]);
+ if (u->rid == rid && (!u->sid || u->sid == sid)) {
+ a[0] = 0;
+ lexicon_delete(ctx, ii, tid, h);
+ }
+ } else {
+ uint32_t rid = a[0] >> 1;
+ if (u->rid == rid) {
+ a[0] = 0;
+ lexicon_delete(ctx, ii, tid, h);
+ }
+ }
+ goto exit;
+ }
+ if (!(bs = encode_rec(ctx, ii, u, &size, 1))) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ if ((pseg = buffer_open(ctx, ii, a[0], &bt, &b)) == NOT_ASSIGNED) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ if (b->header.buffer_free < size) {
+ uint32_t _a = a[0];
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "flushing! b=%p free=%d, seg(%d)", b, b->header.buffer_free, LSEG(a[0]));
+ buffer_close(ctx, ii, pseg);
+ if ((rc = buffer_flush(ctx, ii, LSEG(a[0]), h))) { goto exit; }
+ if (a[0] != _a) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "grn_ii_delete_one: a[0] changed %d->%d)", a[0], _a);
+ continue;
+ }
+ if ((pseg = buffer_open(ctx, ii, a[0], &bt, &b)) == NOT_ASSIGNED) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "flushed! b=%p free=%d, seg(%d)", b, b->header.buffer_free, LSEG(a[0]));
+ if (b->header.buffer_free < size) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "buffer(%d) is full (%d < %d) in grn_ii_delete_one",
+ a[0], b->header.buffer_free, size);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ buffer_close(ctx, ii, pseg);
+ goto exit;
+ }
+ }
+
+ b->header.buffer_free -= size;
+ br = (buffer_rec *)(((byte *)&b->terms[b->header.nterms]) + b->header.buffer_free);
+ rc = buffer_put(ctx, ii, b, bt, br, bs, u, size);
+ buffer_close(ctx, ii, pseg);
+ break;
+ }
+exit :
+ array_unref(ii, tid);
+ if (bs) { GRN_FREE(bs); }
+ return rc;
+}
+
+#define CHUNK_USED 1
+#define BUFFER_USED 2
+#define SOLE_DOC_USED 4
+#define SOLE_POS_USED 8
+
+struct _grn_ii_cursor {
+ grn_db_obj obj;
+ grn_ctx *ctx;
+ grn_ii *ii;
+ grn_id id;
+ grn_ii_posting *post;
+
+ grn_id min;
+ grn_id max;
+ grn_ii_posting pc;
+ grn_ii_posting pb;
+
+ uint32_t cdf;
+ uint32_t *cdp;
+ uint32_t *crp;
+ uint32_t *csp;
+ uint32_t *ctp;
+ uint32_t *cwp;
+ uint32_t *cpp;
+
+ uint8_t *bp;
+
+ int nelements;
+ uint32_t nchunks;
+ uint32_t curr_chunk;
+ chunk_info *cinfo;
+ grn_io_win iw;
+ uint8_t *cp;
+ uint8_t *cpe;
+ datavec rdv[MAX_N_ELEMENTS + 1];
+
+ struct grn_ii_buffer *buf;
+ uint16_t stat;
+ uint16_t nextb;
+ uint32_t buffer_pseg;
+ int flags;
+ uint32_t *ppseg;
+};
+
+static int
+buffer_is_reused(grn_ctx *ctx, grn_ii *ii, grn_ii_cursor *c)
+{
+ if (*c->ppseg != c->buffer_pseg) {
+ uint32_t i;
+ for (i = ii->header->bgqtail; i != ii->header->bgqhead; i = (i + 1) & (GRN_II_BGQSIZE - 1)) {
+ if (ii->header->bgqbody[i] == c->buffer_pseg) { return 0; }
+ }
+ return 1;
+ }
+ return 0;
+}
+
+static int
+chunk_is_reused(grn_ctx *ctx, grn_ii *ii, grn_ii_cursor *c, uint32_t offset, uint32_t size)
+{
+ if (*c->ppseg != c->buffer_pseg) {
+ uint32_t i, m, gseg;
+ if (size > S_CHUNK) { return 1; }
+ if (size > (1 << GRN_II_W_LEAST_CHUNK)) {
+ int es = size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ } else {
+ m = GRN_II_W_LEAST_CHUNK;
+ }
+ gseg = ii->header->garbages[m - GRN_II_W_LEAST_CHUNK];
+ while (gseg != NOT_ASSIGNED) {
+ grn_io_win iw;
+ grn_ii_ginfo *ginfo = WIN_MAP2(ii->chunk, ctx, &iw, gseg, 0, S_GARBAGE, grn_io_rdwr);
+ if (!ginfo) { break; }
+ for (i = 0; i < ginfo->nrecs; i++) {
+ if (ginfo->recs[i] == offset) {
+ grn_io_win_unmap2(&iw);
+ return 0;
+ }
+ }
+ gseg = ginfo->next;
+ grn_io_win_unmap2(&iw);
+ }
+ return 1;
+ }
+ return 0;
+}
+
+#define GRN_II_CURSOR_CMP(c1,c2) \
+ (((c1)->post->rid > (c2)->post->rid) || \
+ (((c1)->post->rid == (c2)->post->rid) && \
+ (((c1)->post->sid > (c2)->post->sid) || \
+ (((c1)->post->sid == (c2)->post->sid) && \
+ ((c1)->post->pos > (c2)->post->pos)))))
+
+grn_ii_cursor *
+grn_ii_cursor_open(grn_ctx *ctx, grn_ii *ii, grn_id tid,
+ grn_id min, grn_id max, int nelements, int flags)
+{
+ grn_ii_cursor *c = NULL;
+ uint32_t pos, *a;
+ if (!(a = array_at(ctx, ii, tid))) { return NULL; }
+ for (;;) {
+ if (!(pos = a[0])) { goto exit; }
+ if (!(c = GRN_MALLOC(sizeof(grn_ii_cursor)))) { goto exit; }
+ memset(c, 0, sizeof(grn_ii_cursor));
+ c->ctx = ctx;
+ c->ii = ii;
+ c->id = tid;
+ c->min = min;
+ c->max = max;
+ c->nelements = nelements;
+ c->flags = flags;
+ if (pos & 1) {
+ c->stat = 0;
+ if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ c->pb.rid = BIT31_12(pos);
+ c->pb.sid = BIT11_01(pos);
+ } else {
+ c->pb.rid = pos >> 1;
+ c->pb.sid = 1;
+ }
+ c->pb.tf = 1;
+ c->pb.weight = 0;
+ c->pb.pos = a[1];
+ } else {
+ uint32_t chunk;
+ buffer_term *bt;
+ if ((c->buffer_pseg = buffer_open(ctx, ii, pos, &bt, &c->buf)) == NOT_ASSIGNED) {
+ GRN_FREE(c);
+ c = NULL;
+ goto exit;
+ }
+ c->ppseg = &ii->header->binfo[LSEG(pos)];
+ if (bt->size_in_chunk && (chunk = c->buf->header.chunk) != NOT_ASSIGNED) {
+ if (!(c->cp = WIN_MAP2(ii->chunk, ctx, &c->iw, chunk, bt->pos_in_chunk,
+ bt->size_in_chunk, grn_io_rdonly))) {
+ buffer_close(ctx, ii, c->buffer_pseg);
+ GRN_FREE(c);
+ c = NULL;
+ goto exit;
+ }
+ if (buffer_is_reused(ctx, ii, c)) {
+ grn_ii_cursor_close(ctx, c);
+ continue;
+ }
+ c->cpe = c->cp + bt->size_in_chunk;
+ if ((bt->tid & CHUNK_SPLIT)) {
+ int i;
+ grn_id crid;
+ GRN_B_DEC(c->nchunks, c->cp);
+ if (chunk_is_reused(ctx, ii, c, chunk, c->buf->header.chunk_size)) {
+ grn_ii_cursor_close(ctx, c);
+ continue;
+ }
+ if (!(c->cinfo = GRN_MALLOCN(chunk_info, c->nchunks))) {
+ buffer_close(ctx, ii, c->buffer_pseg);
+ grn_io_win_unmap2(&c->iw);
+ GRN_FREE(c);
+ c = NULL;
+ goto exit;
+ }
+ for (i = 0, crid = GRN_ID_NIL; i < c->nchunks; i++) {
+ GRN_B_DEC(c->cinfo[i].segno, c->cp);
+ GRN_B_DEC(c->cinfo[i].size, c->cp);
+ GRN_B_DEC(c->cinfo[i].dgap, c->cp);
+ crid += c->cinfo[i].dgap;
+ if (crid < min) { c->curr_chunk = i + 1; }
+ }
+ if (chunk_is_reused(ctx, ii, c, chunk, c->buf->header.chunk_size)) {
+ grn_ii_cursor_close(ctx, c);
+ continue;
+ }
+ }
+ if ((ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ c->rdv[ii->n_elements - 1].flags = ODD;
+ }
+ }
+ c->nextb = bt->pos_in_buffer;
+ c->stat = CHUNK_USED|BUFFER_USED;
+ }
+ if (pos == a[0]) { break; }
+ grn_ii_cursor_close(ctx, c);
+ }
+exit :
+ array_unref(ii, tid);
+ return c;
+}
+
+grn_ii_posting *
+grn_ii_cursor_next(grn_ctx *ctx, grn_ii_cursor *c)
+{
+ if (c->buf) {
+ for (;;) {
+ if (c->stat & CHUNK_USED) {
+ for (;;) {
+ if (c->crp < c->cdp + c->cdf) {
+ uint32_t dgap = *c->crp++;
+ c->pc.rid += dgap;
+ if (dgap) { c->pc.sid = 0; }
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ c->pc.sid += 1 + *c->csp++;
+ } else {
+ c->pc.sid = 1;
+ }
+ c->cpp += c->pc.rest;
+ c->pc.rest = c->pc.tf = 1 + *c->ctp++;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ c->pc.weight = *c->cwp++;
+ } else {
+ c->pc.weight = 0;
+ }
+ c->pc.pos = 0;
+ /*
+ {
+ static int count = 0;
+ int tf = c->pc.tf, pos = 0, *pp = (int *)c->cpp;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ grn_text_itoa(ctx, &buf, c->pc.rid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, c->pc.sid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, c->pc.tf);
+ GRN_TEXT_PUTC(ctx, &buf, '(');
+ while (tf--) {
+ pos += *pp++;
+ count++;
+ grn_text_itoa(ctx, &buf, pos);
+ if (tf) { GRN_TEXT_PUTC(ctx, &buf, ':'); }
+ }
+ GRN_TEXT_PUTC(ctx, &buf, ')');
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "posting(%d):%s", count, GRN_TEXT_VALUE(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ */
+ } else {
+ if (c->curr_chunk <= c->nchunks) {
+ if (c->curr_chunk == c->nchunks) {
+ if (c->cp < c->cpe) {
+ grn_p_decv(ctx, c->cp, c->cpe - c->cp, c->rdv, c->ii->n_elements);
+ } else {
+ c->pc.rid = 0;
+ break;
+ }
+ } else {
+ uint8_t *cp;
+ grn_io_win iw;
+ uint32_t size = c->cinfo[c->curr_chunk].size;
+ if (size && (cp = WIN_MAP2(c->ii->chunk, ctx, &iw,
+ c->cinfo[c->curr_chunk].segno, 0,
+ size, grn_io_rdonly))) {
+ grn_p_decv(ctx, cp, size, c->rdv, c->ii->n_elements);
+ grn_io_win_unmap2(&iw);
+ if (chunk_is_reused(ctx, c->ii, c,
+ c->cinfo[c->curr_chunk].segno, size)) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "chunk(%d) is reused by another thread",
+ c->cinfo[c->curr_chunk].segno);
+ c->pc.rid = 0;
+ break;
+ }
+ } else {
+ c->pc.rid = 0;
+ break;
+ }
+ }
+ {
+ int j = 0;
+ c->cdf = c->rdv[j].data_size;
+ c->crp = c->cdp = c->rdv[j++].data;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ c->csp = c->rdv[j++].data;
+ }
+ c->ctp = c->rdv[j++].data;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ c->cwp = c->rdv[j++].data;
+ }
+ c->cpp = c->rdv[j].data;
+ }
+ c->pc.rid = 0;
+ c->pc.sid = 0;
+ c->pc.rest = 0;
+ c->curr_chunk++;
+ continue;
+ } else {
+ c->pc.rid = 0;
+ }
+ }
+ break;
+ }
+ }
+ if (c->stat & BUFFER_USED) {
+ if (c->nextb) {
+ uint32_t lrid = c->pb.rid, lsid = c->pb.sid; /* for check */
+ buffer_rec *br = BUFFER_REC_AT(c->buf, c->nextb);
+ if (buffer_is_reused(ctx, c->ii, c)) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "buffer reused(%d,%d)", c->buffer_pseg, *c->ppseg);
+ // todo : rewind;
+ }
+ c->bp = NEXT_ADDR(br);
+ GRN_B_DEC(c->pb.rid, c->bp);
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(c->pb.sid, c->bp);
+ } else {
+ c->pb.sid = 1;
+ }
+ if (lrid > c->pb.rid || (lrid == c->pb.rid && lsid >= c->pb.sid)) {
+ ERR(GRN_FILE_CORRUPT, "brokend!! (%d:%d) -> (%d:%d) (%d->%d)", lrid, lsid, c->pb.rid, c->pb.sid, c->buffer_pseg, *c->ppseg);
+ }
+ c->nextb = br->step;
+ GRN_B_DEC(c->pb.tf, c->bp);
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ GRN_B_DEC(c->pb.weight, c->bp);
+ } else {
+ c->pb.weight = 0;
+ }
+ c->pb.rest = c->pb.tf;
+ c->pb.pos = 0;
+ } else {
+ c->pb.rid = 0;
+ }
+ }
+ if (c->pb.rid) {
+ if (c->pc.rid) {
+ if (c->pc.rid < c->pb.rid) {
+ c->stat = CHUNK_USED;
+ if (c->pc.tf && c->pc.sid) { c->post = &c->pc; break; }
+ } else {
+ if (c->pb.rid < c->pc.rid) {
+ c->stat = BUFFER_USED;
+ if (c->pb.tf && c->pb.sid) { c->post = &c->pb; break; }
+ } else {
+ if (c->pb.sid) {
+ if (c->pc.sid < c->pb.sid) {
+ c->stat = CHUNK_USED;
+ if (c->pc.tf && c->pc.sid) { c->post = &c->pc; break; }
+ } else {
+ c->stat = BUFFER_USED;
+ if (c->pb.sid == c->pc.sid) { c->stat |= CHUNK_USED; }
+ if (c->pb.tf) { c->post = &c->pb; break; }
+ }
+ } else {
+ c->stat = CHUNK_USED;
+ }
+ }
+ }
+ } else {
+ c->stat = BUFFER_USED;
+ if (c->pb.tf && c->pb.sid) { c->post = &c->pb; break; }
+ }
+ } else {
+ if (c->pc.rid) {
+ c->stat = CHUNK_USED;
+ if (c->pc.tf && c->pc.sid) { c->post = &c->pc; break; }
+ } else {
+ c->post = NULL;
+ return NULL;
+ }
+ }
+ }
+ } else {
+ if (c->stat & SOLE_DOC_USED) {
+ c->post = NULL;
+ return NULL;
+ } else {
+ c->post = &c->pb;
+ c->stat |= SOLE_DOC_USED;
+ }
+ }
+ return c->post;
+}
+
+grn_ii_posting *
+grn_ii_cursor_next_pos(grn_ctx *ctx, grn_ii_cursor *c)
+{
+ uint32_t gap;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_POSITION)) {
+ if (c->nelements == c->ii->n_elements) {
+ if (c->buf) {
+ if (c->post == &c->pc) {
+ if (c->pc.rest) {
+ c->pc.rest--;
+ c->pc.pos += *c->cpp++;
+ } else {
+ return NULL;
+ }
+ } else if (c->post == &c->pb) {
+ if (buffer_is_reused(ctx, c->ii, c)) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "buffer reused(%d,%d)", c->buffer_pseg, *c->ppseg);
+ // todo : rewind;
+ }
+ if (c->pb.rest) {
+ c->pb.rest--;
+ GRN_B_DEC(gap, c->bp);
+ c->pb.pos += gap;
+ } else {
+ return NULL;
+ }
+ } else {
+ return NULL;
+ }
+ } else {
+ if (c->stat & SOLE_POS_USED) {
+ return NULL;
+ } else {
+ c->stat |= SOLE_POS_USED;
+ }
+ }
+ }
+ } else {
+ if (c->stat & SOLE_POS_USED) {
+ return NULL;
+ } else {
+ c->stat |= SOLE_POS_USED;
+ }
+ }
+ return c->post;
+}
+
+grn_rc
+grn_ii_cursor_close(grn_ctx *ctx, grn_ii_cursor *c)
+{
+ if (!c) { return GRN_INVALID_ARGUMENT; }
+ datavec_fin(ctx, c->rdv);
+ if (c->cinfo) { GRN_FREE(c->cinfo); }
+ if (c->buf) { buffer_close(ctx, c->ii, c->buffer_pseg); }
+ if (c->cp) { grn_io_win_unmap2(&c->iw); }
+ GRN_FREE(c);
+ return GRN_SUCCESS;
+}
+
+uint32_t
+grn_ii_get_chunksize(grn_ctx *ctx, grn_ii *ii, grn_id tid)
+{
+ uint32_t res, pos, *a;
+ a = array_at(ctx, ii, tid);
+ if (!a) { return 0; }
+ if ((pos = a[0])) {
+ if (pos & 1) {
+ res = 0;
+ } else {
+ buffer *buf;
+ uint32_t pseg;
+ buffer_term *bt;
+ if ((pseg = buffer_open(ctx, ii, pos, &bt, &buf)) == NOT_ASSIGNED) {
+ res = 0;
+ } else {
+ res = bt->size_in_chunk;
+ buffer_close(ctx, ii, pseg);
+ }
+ }
+ } else {
+ res = 0;
+ }
+ array_unref(ii, tid);
+ return res;
+}
+
+uint32_t
+grn_ii_estimate_size(grn_ctx *ctx, grn_ii *ii, grn_id tid)
+{
+ uint32_t res, pos, *a;
+ a = array_at(ctx, ii, tid);
+ if (!a) { return 0; }
+ if ((pos = a[0])) {
+ if (pos & 1) {
+ res = 1;
+ } else {
+ buffer *buf;
+ uint32_t pseg;
+ buffer_term *bt;
+ if ((pseg = buffer_open(ctx, ii, pos, &bt, &buf)) == NOT_ASSIGNED) {
+ res = 0;
+ } else {
+ res = a[1] + bt->size_in_buffer + 2;
+ buffer_close(ctx, ii, pseg);
+ }
+ }
+ } else {
+ res = 0;
+ }
+ array_unref(ii, tid);
+ return res;
+}
+
+int
+grn_ii_entry_info(grn_ctx *ctx, grn_ii *ii, grn_id tid, unsigned int *a,
+ unsigned int *chunk, unsigned int *chunk_size, unsigned int *buffer_free,
+ unsigned int *nterms, unsigned int *nterms_void, unsigned int *bt_tid,
+ unsigned int *size_in_chunk, unsigned int *pos_in_chunk,
+ unsigned int *size_in_buffer, unsigned int *pos_in_buffer)
+{
+ buffer *b;
+ buffer_term *bt;
+ uint32_t pseg, *ap;
+ ERRCLR(NULL);
+ ap = array_at(ctx, ii, tid);
+ if (!ap) { return 0; }
+ a[0] = *ap;
+ array_unref(ii, tid);
+ if (!a[0]) { return 1; }
+ if (a[0] & 1) { return 2; }
+ if ((pseg = buffer_open(ctx, ii, a[0], &bt, &b)) == NOT_ASSIGNED) { return 3; }
+ *chunk = b->header.chunk;
+ *chunk_size = b->header.chunk_size;
+ *buffer_free = b->header.buffer_free;
+ *nterms = b->header.nterms;
+ *bt_tid = bt->tid;
+ *size_in_chunk = bt->size_in_chunk;
+ *pos_in_chunk = bt->pos_in_chunk;
+ *size_in_buffer = bt->size_in_buffer;
+ *pos_in_buffer = bt->pos_in_buffer;
+ buffer_close(ctx, ii, pseg);
+ return 4;
+}
+
+const char *
+grn_ii_path(grn_ii *ii)
+{
+ return grn_io_path(ii->seg);
+}
+
+uint32_t
+grn_ii_max_section(grn_ii *ii)
+{
+ return ii->header->smax;
+}
+
+grn_obj *
+grn_ii_lexicon(grn_ii *ii)
+{
+ return ii->lexicon;
+}
+
+/* private classes */
+
+/* b-heap */
+
+typedef struct {
+ int n_entries;
+ int n_bins;
+ grn_ii_cursor **bins;
+} cursor_heap;
+
+static inline cursor_heap *
+cursor_heap_open(grn_ctx *ctx, int max)
+{
+ cursor_heap *h = GRN_MALLOC(sizeof(cursor_heap));
+ if (!h) { return NULL; }
+ h->bins = GRN_MALLOC(sizeof(grn_ii_cursor *) * max);
+ if (!h->bins) {
+ GRN_FREE(h);
+ return NULL;
+ }
+ h->n_entries = 0;
+ h->n_bins = max;
+ return h;
+}
+
+static inline grn_rc
+cursor_heap_push(grn_ctx *ctx, cursor_heap *h, grn_ii *ii, grn_id tid, uint32_t offset2)
+{
+ int n, n2;
+ grn_ii_cursor *c, *c2;
+ if (h->n_entries >= h->n_bins) {
+ int max = h->n_bins * 2;
+ grn_ii_cursor **bins = GRN_REALLOC(h->bins, sizeof(grn_ii_cursor *) * max);
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "expanded cursor_heap to %d,%p", max, bins);
+ if (!bins) { return GRN_NO_MEMORY_AVAILABLE; }
+ h->n_bins = max;
+ h->bins = bins;
+ }
+ {
+ if (!(c = grn_ii_cursor_open(ctx, ii, tid, GRN_ID_NIL, GRN_ID_MAX,
+ ii->n_elements, 0))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "cursor open failed");
+ return ctx->rc;
+ }
+ if (!grn_ii_cursor_next(ctx, c)) {
+ grn_ii_cursor_close(ctx, c);
+ return GRN_END_OF_DATA;
+ }
+ if (!grn_ii_cursor_next_pos(ctx, c)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "invalid ii_cursor b");
+ grn_ii_cursor_close(ctx, c);
+ return GRN_END_OF_DATA;
+ }
+ n = h->n_entries++;
+ while (n) {
+ n2 = (n - 1) >> 1;
+ c2 = h->bins[n2];
+ if (GRN_II_CURSOR_CMP(c, c2)) { break; }
+ h->bins[n] = c2;
+ n = n2;
+ }
+ h->bins[n] = c;
+ }
+ return GRN_SUCCESS;
+}
+
+static inline grn_rc
+cursor_heap_push2(cursor_heap *h)
+{
+ grn_rc rc = GRN_SUCCESS;
+ return rc;
+}
+
+static inline grn_ii_cursor *
+cursor_heap_min(cursor_heap *h)
+{
+ return h->n_entries ? h->bins[0] : NULL;
+}
+
+static inline void
+cursor_heap_recalc_min(cursor_heap *h)
+{
+ int n = 0, n1, n2, m;
+ if ((m = h->n_entries) > 1) {
+ grn_ii_cursor *c = h->bins[0], *c1, *c2;
+ for (;;) {
+ n1 = n * 2 + 1;
+ n2 = n1 + 1;
+ c1 = n1 < m ? h->bins[n1] : NULL;
+ c2 = n2 < m ? h->bins[n2] : NULL;
+ if (c1 && GRN_II_CURSOR_CMP(c, c1)) {
+ if (c2 && GRN_II_CURSOR_CMP(c, c2) && GRN_II_CURSOR_CMP(c1, c2)) {
+ h->bins[n] = c2;
+ n = n2;
+ } else {
+ h->bins[n] = c1;
+ n = n1;
+ }
+ } else {
+ if (c2 && GRN_II_CURSOR_CMP(c, c2)) {
+ h->bins[n] = c2;
+ n = n2;
+ } else {
+ h->bins[n] = c;
+ break;
+ }
+ }
+ }
+ }
+}
+
+static inline void
+cursor_heap_pop(grn_ctx *ctx, cursor_heap *h)
+{
+ if (h->n_entries) {
+ grn_ii_cursor *c = h->bins[0];
+ if (!grn_ii_cursor_next(ctx, c)) {
+ grn_ii_cursor_close(ctx, c);
+ h->bins[0] = h->bins[--h->n_entries];
+ } else if (!grn_ii_cursor_next_pos(ctx, c)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "invalid ii_cursor c");
+ grn_ii_cursor_close(ctx, c);
+ h->bins[0] = h->bins[--h->n_entries];
+ }
+ if (h->n_entries > 1) { cursor_heap_recalc_min(h); }
+ }
+}
+
+static inline void
+cursor_heap_pop_pos(grn_ctx *ctx, cursor_heap *h)
+{
+ if (h->n_entries) {
+ grn_ii_cursor *c = h->bins[0];
+ if (!grn_ii_cursor_next_pos(ctx, c)) {
+ if (!grn_ii_cursor_next(ctx, c)) {
+ grn_ii_cursor_close(ctx, c);
+ h->bins[0] = h->bins[--h->n_entries];
+ } else if (!grn_ii_cursor_next_pos(ctx, c)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "invalid ii_cursor d");
+ grn_ii_cursor_close(ctx, c);
+ h->bins[0] = h->bins[--h->n_entries];
+ }
+ }
+ if (h->n_entries > 1) { cursor_heap_recalc_min(h); }
+ }
+}
+
+static inline void
+cursor_heap_close(grn_ctx *ctx, cursor_heap *h)
+{
+ int i;
+ if (!h) { return; }
+ for (i = h->n_entries; i--;) { grn_ii_cursor_close(ctx, h->bins[i]); }
+ GRN_FREE(h->bins);
+ GRN_FREE(h);
+}
+
+/* update */
+#ifdef USE_VGRAM
+
+inline static grn_rc
+index_add(grn_ctx *ctx, grn_id rid, grn_obj *lexicon, grn_ii *ii, grn_vgram *vgram,
+ const char *value, size_t value_len)
+{
+ grn_hash *h;
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor;
+ grn_ii_updspec **u;
+ grn_id tid, *tp;
+ grn_rc r, rc = GRN_SUCCESS;
+ grn_vgram_buf *sbuf = NULL;
+ if (!rid) { return GRN_INVALID_ARGUMENT; }
+ if (!(token_cursor = grn_token_cursor_open(ctx, lexicon, value, value_len,
+ GRN_TOKEN_ADD, token_flags))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (vgram) { sbuf = grn_vgram_buf_open(value_len); }
+ h = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_ii_updspec *), GRN_HASH_TINY);
+ if (!h) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create on index_add failed !");
+ grn_token_cursor_close(ctx, token_cursor);
+ if (sbuf) { grn_vgram_buf_close(sbuf); }
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ while (!token_cursor->status) {
+ (tid = grn_token_cursor_next(ctx, token_cursor));
+ if (tid) {
+ if (!grn_hash_add(ctx, h, &tid, sizeof(grn_id), (void **) &u, NULL)) { break; }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, 1))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_ii_updspec_open on index_add failed!");
+ goto exit;
+ }
+ }
+ if (grn_ii_updspec_add(ctx, *u, token_cursor->pos, 0)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_ii_updspec_add on index_add failed!");
+ goto exit;
+ }
+ if (sbuf) { grn_vgram_buf_add(sbuf, tid); }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ // todo : support vgram
+ // if (sbuf) { grn_vgram_update(vgram, rid, sbuf, (grn_set *)h); }
+ GRN_HASH_EACH(ctx, h, id, &tp, NULL, &u, {
+ if ((r = grn_ii_update_one(ctx, ii, *tp, *u, h))) { rc = r; }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ grn_hash_close(ctx, h);
+ if (sbuf) { grn_vgram_buf_close(sbuf); }
+ return rc;
+exit:
+ grn_hash_close(ctx, h);
+ grn_token_cursor_close(ctx, token_cursor);
+ if (sbuf) { grn_vgram_buf_close(sbuf); }
+ return GRN_NO_MEMORY_AVAILABLE;
+}
+
+inline static grn_rc
+index_del(grn_ctx *ctx, grn_id rid, grn_obj *lexicon, grn_ii *ii, grn_vgram *vgram,
+ const char *value, size_t value_len)
+{
+ grn_hash *h;
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor;
+ grn_ii_updspec **u;
+ grn_id tid, *tp;
+ if (!rid) { return GRN_INVALID_ARGUMENT; }
+ if (!(token_cursor = grn_token_cursor_open(ctx, lexicon, value, value_len,
+ GRN_TOKEN_DEL, token_flags))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ h = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_ii_updspec *), GRN_HASH_TINY);
+ if (!h) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create on index_del failed !");
+ grn_token_cursor_close(ctx, token_cursor);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ while (!token_cursor->status) {
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ if (!grn_hash_add(ctx, h, &tid, sizeof(grn_id), (void **) &u, NULL)) { break; }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, 0))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_open on index_del failed !");
+ grn_hash_close(ctx, h);
+ grn_token_cursor_close(ctx, token_cursor);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ GRN_HASH_EACH(ctx, h, id, &tp, NULL, &u, {
+ if (*tp) {
+ grn_ii_delete_one(ctx, ii, *tp, *u, NULL);
+ }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ grn_hash_close(ctx, h);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ii_upd(grn_ctx *ctx, grn_ii *ii, grn_id rid, grn_vgram *vgram,
+ const char *oldvalue, unsigned int oldvalue_len,
+ const char *newvalue, unsigned int newvalue_len)
+{
+ grn_rc rc;
+ grn_obj *lexicon = ii->lexicon;
+ if (!rid) { return GRN_INVALID_ARGUMENT; }
+ if (oldvalue && *oldvalue) {
+ if ((rc = index_del(ctx, rid, lexicon, ii, vgram, oldvalue, oldvalue_len))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "index_del on grn_ii_upd failed !");
+ goto exit;
+ }
+ }
+ if (newvalue && *newvalue) {
+ rc = index_add(ctx, rid, lexicon, ii, vgram, newvalue, newvalue_len);
+ }
+exit :
+ return rc;
+}
+
+grn_rc
+grn_ii_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, grn_vgram *vgram, unsigned int section,
+ grn_values *oldvalues, grn_values *newvalues)
+{
+ int j;
+ grn_value *v;
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor;
+ grn_rc rc = GRN_SUCCESS;
+ grn_hash *old, *new;
+ grn_id tid, *tp;
+ grn_ii_updspec **u, **un;
+ grn_obj *lexicon = ii->lexicon;
+ if (!lexicon || !ii || !rid) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "grn_ii_update: invalid argument");
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (newvalues) {
+ new = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_ii_updspec *), GRN_HASH_TINY);
+ if (!new) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create on grn_ii_update failed !");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ for (j = newvalues->n_values, v = newvalues->values; j; j--, v++) {
+ if ((token_cursor = grn_token_cursor_open(ctx, lexicon, v->str, v->str_len,
+ GRN_TOKEN_ADD, token_flags))) {
+ while (!token_cursor->status) {
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ if (!grn_hash_add(ctx, new, &tid, sizeof(grn_id), (void **) &u, NULL)) {
+ break;
+ }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, section))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_open on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ grn_hash_close(ctx, new);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ }
+ if (grn_ii_updspec_add(ctx, *u, token_cursor->pos, v->weight)) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_add on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ grn_hash_close(ctx, new);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ }
+ if (!GRN_HASH_SIZE(new)) {
+ grn_hash_close(ctx, new);
+ new = NULL;
+ }
+ } else {
+ new = NULL;
+ }
+ if (oldvalues) {
+ old = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_ii_updspec *), GRN_HASH_TINY);
+ if (!old) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create(ctx, NULL, old) on grn_ii_update failed!");
+ if (new) { grn_hash_close(ctx, new); }
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ for (j = oldvalues->n_values, v = oldvalues->values; j; j--, v++) {
+ if ((token_cursor = grn_token_cursor_open(ctx, lexicon, v->str, v->str_len,
+ GRN_TOKEN_DEL, token_flags))) {
+ while (!token_cursor->status) {
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ if (!grn_hash_add(ctx, old, &tid, sizeof(grn_id), (void **) &u, NULL)) {
+ break;
+ }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, section))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_open on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ if (new) { grn_hash_close(ctx, new); };
+ grn_hash_close(ctx, old);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ }
+ if (grn_ii_updspec_add(ctx, *u, token_cursor->pos, v->weight)) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_add on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ if (new) { grn_hash_close(ctx, new); };
+ grn_hash_close(ctx, old);
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ }
+ } else {
+ old = NULL;
+ }
+ if (old) {
+ grn_id eid;
+ GRN_HASH_EACH(ctx, old, id, &tp, NULL, &u, {
+ if (new && (eid = grn_hash_get(ctx, new, tp, sizeof(grn_id), (void **) &un))) {
+ if (!grn_ii_updspec_cmp(*u, *un)) {
+ grn_ii_updspec_close(ctx, *un);
+ grn_hash_delete_by_id(ctx, new, eid, NULL);
+ }
+ } else {
+ grn_ii_delete_one(ctx, ii, *tp, *u, new);
+ }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ grn_hash_close(ctx, old);
+ }
+ if (new) {
+ GRN_HASH_EACH(ctx, new, id, &tp, NULL, &u, {
+ grn_rc r;
+ if ((r = grn_ii_update_one(ctx, ii, *tp, *u, new))) { rc = r; }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ grn_hash_close(ctx, new);
+ } else {
+ if (!section) {
+ /* todo: delete key when all sections deleted */
+ }
+ }
+exit :
+ return rc;
+}
+#endif /* USE_VGRAM */
+
+static grn_rc
+grn_vector2updspecs(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
+ grn_obj *in, grn_obj *out, grn_token_mode mode, grn_obj *posting)
+{
+ int j;
+ grn_id tid;
+ grn_section *v;
+ grn_token_cursor *token_cursor;
+ grn_ii_updspec **u;
+ grn_hash *h = (grn_hash *)out;
+ grn_obj *lexicon = ii->lexicon;
+ if (in->u.v.body) {
+ const char *head = GRN_BULK_HEAD(in->u.v.body);
+ for (j = in->u.v.n_sections, v = in->u.v.sections; j; j--, v++) {
+ unsigned int token_flags = 0;
+ if (v->length &&
+ (token_cursor = grn_token_cursor_open(ctx, lexicon, head + v->offset, v->length,
+ mode, token_flags))) {
+ while (!token_cursor->status) {
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ if (posting) { GRN_RECORD_PUT(ctx, posting, tid); }
+ if (!grn_hash_add(ctx, h, &tid, sizeof(grn_id), (void **) &u, NULL)) {
+ break;
+ }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, section))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_open on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ if (grn_ii_updspec_add(ctx, *u, token_cursor->pos, v->weight)) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_add on grn_ii_update failed!");
+ grn_token_cursor_close(ctx, token_cursor);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_uvector2updspecs(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
+ grn_obj *in, grn_obj *out)
+{
+ int i, n;
+ grn_ii_updspec **u;
+ grn_hash *h = (grn_hash *)out;
+
+ n = grn_vector_size(ctx, in);
+ for (i = 0; i < n; i++) {
+ grn_id id;
+ unsigned int weight;
+
+ id = grn_uvector_get_element(ctx, in, i, &weight);
+ if (!grn_hash_add(ctx, h, &id, sizeof(grn_id), (void **)&u, NULL)) {
+ break;
+ }
+ if (!*u) {
+ if (!(*u = grn_ii_updspec_open(ctx, rid, section))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_open on grn_ii_update failed!");
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ if (grn_ii_updspec_add(ctx, *u, i, weight)) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_ii_updspec_add on grn_ii_update failed!");
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
+ grn_obj *oldvalue, grn_obj *newvalue, grn_obj *posting)
+{
+ grn_id *tp;
+ grn_bool do_grn_ii_updspec_cmp = GRN_TRUE;
+ grn_rc rc = GRN_SUCCESS;
+ grn_ii_updspec **u, **un;
+ grn_obj *old_, *old = oldvalue, *new_, *new = newvalue, oldv, newv, buf, *post = NULL;
+ if (!ii || !ii->lexicon || !rid) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_ii_column_update: invalid argument");
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (posting) {
+ GRN_RECORD_INIT(&buf, GRN_OBJ_VECTOR, grn_obj_id(ctx, ii->lexicon));
+ post = &buf;
+ }
+ if (grn_io_lock(ctx, ii->seg, grn_lock_timeout)) { return ctx->rc; }
+ if (new) {
+ unsigned char type = (ii->obj.header.domain == new->header.domain)
+ ? GRN_UVECTOR
+ : new->header.type;
+ switch (type) {
+ case GRN_BULK :
+ {
+ if (grn_bulk_is_zero(ctx, new)) {
+ do_grn_ii_updspec_cmp = GRN_FALSE;
+ }
+ new_ = new;
+ GRN_OBJ_INIT(&newv, GRN_VECTOR, GRN_OBJ_DO_SHALLOW_COPY, GRN_DB_TEXT);
+ newv.u.v.body = new;
+ new = &newv;
+ grn_vector_delimit(ctx, new, 0, GRN_ID_NIL);
+ if (new_ != newvalue) { grn_obj_close(ctx, new_); }
+ }
+ /* fallthru */
+ case GRN_VECTOR :
+ new_ = new;
+ new = (grn_obj *)grn_hash_create(ctx, NULL, sizeof(grn_id),
+ sizeof(grn_ii_updspec *),
+ GRN_HASH_TINY);
+ if (!new) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create on grn_ii_update failed !");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ rc = grn_vector2updspecs(ctx, ii, rid, section, new_, new, GRN_TOKEN_ADD, post);
+ }
+ if (new_ != newvalue) { grn_obj_close(ctx, new_); }
+ if (rc) { goto exit; }
+ break;
+ case GRN_UVECTOR :
+ new_ = new;
+ new = (grn_obj *)grn_hash_create(ctx, NULL, sizeof(grn_id),
+ sizeof(grn_ii_updspec *),
+ GRN_HASH_TINY);
+ if (!new) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create on grn_ii_update failed !");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ if (new_->header.type == GRN_UVECTOR) {
+ rc = grn_uvector2updspecs(ctx, ii, rid, section, new_, new);
+ } else {
+ grn_obj uvector;
+ unsigned int weight = 0;
+ GRN_VALUE_FIX_SIZE_INIT(&uvector, GRN_OBJ_VECTOR, new_->header.domain);
+ if (new_->header.impl_flags & GRN_OBJ_WITH_WEIGHT) {
+ uvector.header.impl_flags |= GRN_OBJ_WITH_WEIGHT;
+ }
+ grn_uvector_add_element(ctx, &uvector, GRN_RECORD_VALUE(new_), weight);
+ rc = grn_uvector2updspecs(ctx, ii, rid, section, &uvector, new);
+ GRN_OBJ_FIN(ctx, &uvector);
+ }
+ }
+ if (new_ != newvalue) { grn_obj_close(ctx, new_); }
+ if (rc) { goto exit; }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid object assigned as newvalue");
+ goto exit;
+ }
+ }
+ if (posting) {
+ grn_ii_updspec *u_;
+ uint32_t offset = 0;
+ grn_id tid_ = 0, gap, tid, *tpe;
+ grn_table_sort_optarg arg = {GRN_TABLE_SORT_ASC|
+ GRN_TABLE_SORT_AS_NUMBER|
+ GRN_TABLE_SORT_AS_UNSIGNED, NULL, NULL,0 };
+ grn_array *sorted = grn_array_create(ctx, NULL, sizeof(grn_id), 0);
+ grn_hash_sort(ctx, (grn_hash *)new, -1, sorted, &arg);
+ GRN_TEXT_PUT(ctx, posting, ((grn_hash *)new)->n_entries, sizeof(uint32_t));
+ GRN_ARRAY_EACH(ctx, sorted, 0, 0, id, &tp, {
+ grn_hash_get_key(ctx, (grn_hash *)new, *tp, &tid, sizeof(grn_id));
+ gap = tid - tid_;
+ GRN_TEXT_PUT(ctx, posting, &gap, sizeof(grn_id));
+ tid_ = tid;
+ });
+ GRN_ARRAY_EACH(ctx, sorted, 0, 0, id, &tp, {
+ grn_hash_get_value(ctx, (grn_hash *)new, *tp, &u_);
+ u_->offset = offset++;
+ GRN_TEXT_PUT(ctx, posting, &u_->tf, sizeof(int32_t));
+ });
+ tpe = (grn_id *)GRN_BULK_CURR(post);
+ for (tp = (grn_id *)GRN_BULK_HEAD(post); tp < tpe; tp++) {
+ grn_hash_get(ctx, (grn_hash *)new, (void *)tp, sizeof(grn_id), (void **)&u);
+ GRN_TEXT_PUT(ctx, posting, &(*u)->offset, sizeof(int32_t));
+ }
+ GRN_OBJ_FIN(ctx, post);
+ grn_array_close(ctx, sorted);
+ }
+
+ if (old) {
+ unsigned char type = (ii->obj.header.domain == old->header.domain)
+ ? GRN_UVECTOR
+ : old->header.type;
+ switch (type) {
+ case GRN_BULK :
+ {
+ // const char *str = GRN_BULK_HEAD(old);
+ // unsigned int str_len = GRN_BULK_VSIZE(old);
+ old_ = old;
+ GRN_OBJ_INIT(&oldv, GRN_VECTOR, GRN_OBJ_DO_SHALLOW_COPY, GRN_DB_TEXT);
+ oldv.u.v.body = old;
+ old = &oldv;
+ grn_vector_delimit(ctx, old, 0, GRN_ID_NIL);
+ if (old_ != oldvalue) { grn_obj_close(ctx, old_); }
+ }
+ /* fallthru */
+ case GRN_VECTOR :
+ old_ = old;
+ old = (grn_obj *)grn_hash_create(ctx, NULL, sizeof(grn_id),
+ sizeof(grn_ii_updspec *),
+ GRN_HASH_TINY);
+ if (!old) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create(ctx, NULL, old) on grn_ii_update failed!");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ rc = grn_vector2updspecs(ctx, ii, rid, section, old_, old, GRN_TOKEN_DEL, NULL);
+ }
+ if (old_ != oldvalue) { grn_obj_close(ctx, old_); }
+ if (rc) { goto exit; }
+ break;
+ case GRN_UVECTOR :
+ old_ = old;
+ old = (grn_obj *)grn_hash_create(ctx, NULL, sizeof(grn_id),
+ sizeof(grn_ii_updspec *),
+ GRN_HASH_TINY);
+ if (!old) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_create(ctx, NULL, old) on grn_ii_update failed!");
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ if (old_->header.type == GRN_UVECTOR) {
+ rc = grn_uvector2updspecs(ctx, ii, rid, section, old_, old);
+ } else {
+ grn_obj uvector;
+ unsigned int weight = 0;
+ GRN_VALUE_FIX_SIZE_INIT(&uvector, GRN_OBJ_VECTOR, old_->header.domain);
+ if (old_->header.impl_flags & GRN_OBJ_WITH_WEIGHT) {
+ uvector.header.impl_flags |= GRN_OBJ_WITH_WEIGHT;
+ }
+ grn_uvector_add_element(ctx, &uvector, GRN_RECORD_VALUE(old_), weight);
+ rc = grn_uvector2updspecs(ctx, ii, rid, section, &uvector, old);
+ GRN_OBJ_FIN(ctx, &uvector);
+ }
+ }
+ if (old_ != oldvalue) { grn_obj_close(ctx, old_); }
+ if (rc) { goto exit; }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "invalid object assigned as oldvalue");
+ goto exit;
+ }
+ }
+
+ if (old) {
+ grn_id eid;
+ grn_hash *o = (grn_hash *)old;
+ grn_hash *n = (grn_hash *)new;
+ GRN_HASH_EACH(ctx, o, id, &tp, NULL, &u, {
+ if (n && (eid = grn_hash_get(ctx, n, tp, sizeof(grn_id), (void **) &un))) {
+ if (do_grn_ii_updspec_cmp && !grn_ii_updspec_cmp(*u, *un)) {
+ grn_ii_updspec_close(ctx, *un);
+ grn_hash_delete_by_id(ctx, n, eid, NULL);
+ }
+ } else {
+ grn_ii_delete_one(ctx, ii, *tp, *u, n);
+ }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ }
+ if (new) {
+ grn_hash *n = (grn_hash *)new;
+ GRN_HASH_EACH(ctx, n, id, &tp, NULL, &u, {
+ grn_rc r;
+ if ((r = grn_ii_update_one(ctx, ii, *tp, *u, n))) { rc = r; }
+ grn_ii_updspec_close(ctx, *u);
+ });
+ } else {
+ if (!section) {
+ /* todo: delete key when all sections deleted */
+ }
+ }
+exit :
+ grn_io_unlock(ii->seg);
+ if (old && old != oldvalue) { grn_obj_close(ctx, old); }
+ if (new && new != newvalue) { grn_obj_close(ctx, new); }
+ return ctx->rc;
+}
+
+/* token_info */
+
+typedef struct {
+ cursor_heap *cursors;
+ int offset;
+ int pos;
+ int size;
+ int ntoken;
+ grn_ii_posting *p;
+} token_info;
+
+#define EX_NONE 0
+#define EX_PREFIX 1
+#define EX_SUFFIX 2
+#define EX_BOTH 3
+
+inline static void
+token_info_expand_both(grn_ctx *ctx, grn_obj *lexicon, grn_ii *ii,
+ const char *key, unsigned int key_size, token_info *ti)
+{
+ int s = 0;
+ grn_hash *h, *g;
+ uint32_t *offset2;
+ grn_hash_cursor *c;
+ grn_id *tp, *tq;
+ if ((h = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, 0))) {
+ grn_table_search(ctx, lexicon, key, key_size,
+ GRN_OP_PREFIX, (grn_obj *)h, GRN_OP_OR);
+ if (GRN_HASH_SIZE(h)) {
+ if ((ti->cursors = cursor_heap_open(ctx, GRN_HASH_SIZE(h) + 256))) {
+ if ((c = grn_hash_cursor_open(ctx, h, NULL, 0, NULL, 0, 0, -1, 0))) {
+ uint32_t key2_size;
+ const char *key2;
+ while (grn_hash_cursor_next(ctx, c)) {
+ grn_hash_cursor_get_key(ctx, c, (void **) &tp);
+ key2 = _grn_table_key(ctx, lexicon, *tp, &key2_size);
+ if (!key2) { break; }
+ if ((lexicon->header.type != GRN_TABLE_PAT_KEY) ||
+ !(lexicon->header.flags & GRN_OBJ_KEY_WITH_SIS) ||
+ key2_size <= 2) { // todo: refine
+ if ((s = grn_ii_estimate_size(ctx, ii, *tp))) {
+ cursor_heap_push(ctx, ti->cursors, ii, *tp, 0);
+ ti->ntoken++;
+ ti->size += s;
+ }
+ } else {
+ if ((g = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, GRN_HASH_TINY))) {
+ grn_pat_suffix_search(ctx, (grn_pat *)lexicon, key2, key2_size, g);
+ GRN_HASH_EACH(ctx, g, id, &tq, NULL, &offset2, {
+ if ((s = grn_ii_estimate_size(ctx, ii, *tq))) {
+ cursor_heap_push(ctx, ti->cursors, ii, *tq, /* *offset2 */ 0);
+ ti->ntoken++;
+ ti->size += s;
+ }
+ });
+ grn_hash_close(ctx, g);
+ }
+ }
+ }
+ grn_hash_cursor_close(ctx, c);
+ }
+ }
+ }
+ grn_hash_close(ctx, h);
+ }
+}
+
+inline static grn_rc
+token_info_close(grn_ctx *ctx, token_info *ti)
+{
+ cursor_heap_close(ctx, ti->cursors);
+ GRN_FREE(ti);
+ return GRN_SUCCESS;
+}
+
+inline static token_info *
+token_info_open(grn_ctx *ctx, grn_obj *lexicon, grn_ii *ii,
+ const char *key, unsigned int key_size, uint32_t offset, int mode)
+{
+ int s = 0;
+ grn_hash *h;
+ token_info *ti;
+ grn_id tid;
+ grn_id *tp;
+ if (!key) { return NULL; }
+ if (!(ti = GRN_MALLOC(sizeof(token_info)))) { return NULL; }
+ ti->cursors = NULL;
+ ti->size = 0;
+ ti->ntoken = 0;
+ ti->offset = offset;
+ switch (mode) {
+ case EX_BOTH :
+ token_info_expand_both(ctx, lexicon, ii, key, key_size, ti);
+ break;
+ case EX_NONE :
+ if ((tid = grn_table_get(ctx, lexicon, key, key_size)) &&
+ (s = grn_ii_estimate_size(ctx, ii, tid)) &&
+ (ti->cursors = cursor_heap_open(ctx, 1))) {
+ cursor_heap_push(ctx, ti->cursors, ii, tid, 0);
+ ti->ntoken++;
+ ti->size = s;
+ }
+ break;
+ case EX_PREFIX :
+ if ((h = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, 0))) {
+ grn_table_search(ctx, lexicon, key, key_size,
+ GRN_OP_PREFIX, (grn_obj *)h, GRN_OP_OR);
+ if (GRN_HASH_SIZE(h)) {
+ if ((ti->cursors = cursor_heap_open(ctx, GRN_HASH_SIZE(h)))) {
+ GRN_HASH_EACH(ctx, h, id, &tp, NULL, NULL, {
+ if ((s = grn_ii_estimate_size(ctx, ii, *tp))) {
+ cursor_heap_push(ctx, ti->cursors, ii, *tp, 0);
+ ti->ntoken++;
+ ti->size += s;
+ }
+ });
+ }
+ }
+ grn_hash_close(ctx, h);
+ }
+ break;
+ case EX_SUFFIX :
+ if ((h = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, 0))) {
+ grn_table_search(ctx, lexicon, key, key_size,
+ GRN_OP_SUFFIX, (grn_obj *)h, GRN_OP_OR);
+ if (GRN_HASH_SIZE(h)) {
+ if ((ti->cursors = cursor_heap_open(ctx, GRN_HASH_SIZE(h)))) {
+ uint32_t *offset2;
+ GRN_HASH_EACH(ctx, h, id, &tp, NULL, &offset2, {
+ if ((s = grn_ii_estimate_size(ctx, ii, *tp))) {
+ cursor_heap_push(ctx, ti->cursors, ii, *tp, /* *offset2 */ 0);
+ ti->ntoken++;
+ ti->size += s;
+ }
+ });
+ }
+ }
+ grn_hash_close(ctx, h);
+ }
+ break;
+ }
+ if (cursor_heap_push2(ti->cursors)) {
+ token_info_close(ctx, ti);
+ return NULL;
+ }
+ {
+ grn_ii_cursor *ic;
+ if (ti->cursors && (ic = cursor_heap_min(ti->cursors))) {
+ grn_ii_posting *p = ic->post;
+ ti->pos = p->pos - ti->offset;
+ ti->p = p;
+ } else {
+ token_info_close(ctx, ti);
+ ti = NULL;
+ }
+ }
+ return ti;
+}
+
+static inline grn_rc
+token_info_skip(grn_ctx *ctx, token_info *ti, uint32_t rid, uint32_t sid)
+{
+ grn_ii_cursor *c;
+ grn_ii_posting *p;
+ for (;;) {
+ if (!(c = cursor_heap_min(ti->cursors))) { return GRN_END_OF_DATA; }
+ p = c->post;
+ if (p->rid > rid || (p->rid == rid && p->sid >= sid)) { break; }
+ cursor_heap_pop(ctx, ti->cursors);
+ }
+ ti->pos = p->pos - ti->offset;
+ ti->p = p;
+ return GRN_SUCCESS;
+}
+
+static inline grn_rc
+token_info_skip_pos(grn_ctx *ctx, token_info *ti, uint32_t rid, uint32_t sid, uint32_t pos)
+{
+ grn_ii_cursor *c;
+ grn_ii_posting *p;
+ pos += ti->offset;
+ for (;;) {
+ if (!(c = cursor_heap_min(ti->cursors))) { return GRN_END_OF_DATA; }
+ p = c->post;
+ if (p->rid != rid || p->sid != sid || p->pos >= pos) { break; }
+ cursor_heap_pop_pos(ctx, ti->cursors);
+ }
+ ti->pos = p->pos - ti->offset;
+ ti->p = p;
+ return GRN_SUCCESS;
+}
+
+inline static int
+token_compare(const void *a, const void *b)
+{
+ const token_info *t1 = *((token_info **)a), *t2 = *((token_info **)b);
+ return t1->size - t2->size;
+}
+
+inline static grn_rc
+token_info_build(grn_ctx *ctx, grn_obj *lexicon, grn_ii *ii, const char *string, unsigned int string_len,
+ token_info **tis, uint32_t *n, grn_bool *only_skip_token,
+ grn_operator mode)
+{
+ token_info *ti;
+ const char *key;
+ uint32_t size;
+ grn_rc rc = GRN_END_OF_DATA;
+ unsigned int token_flags = GRN_TOKEN_ENABLE_TOKENIZED_DELIMITER;
+ grn_token_cursor *token_cursor = grn_token_cursor_open(ctx, lexicon,
+ string, string_len,
+ GRN_TOKEN_GET,
+ token_flags);
+ *only_skip_token = GRN_FALSE;
+ if (!token_cursor) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (mode == GRN_OP_UNSPLIT) {
+ if ((ti = token_info_open(ctx, lexicon, ii, (char *)token_cursor->orig, token_cursor->orig_blen, 0, EX_BOTH))) {
+ tis[(*n)++] = ti;
+ rc = GRN_SUCCESS;
+ }
+ } else {
+ grn_id tid;
+ int ef;
+ switch (mode) {
+ case GRN_OP_PREFIX :
+ ef = EX_PREFIX;
+ break;
+ case GRN_OP_SUFFIX :
+ ef = EX_SUFFIX;
+ break;
+ case GRN_OP_PARTIAL :
+ ef = EX_BOTH;
+ break;
+ default :
+ ef = EX_NONE;
+ break;
+ }
+ tid = grn_token_cursor_next(ctx, token_cursor);
+ if (token_cursor->force_prefix) { ef |= EX_PREFIX; }
+ switch (token_cursor->status) {
+ case GRN_TOKEN_DOING :
+ key = _grn_table_key(ctx, lexicon, tid, &size);
+ ti = token_info_open(ctx, lexicon, ii, key, size, token_cursor->pos, ef & EX_SUFFIX);
+ break;
+ case GRN_TOKEN_DONE :
+ ti = token_info_open(ctx, lexicon, ii, (const char *)token_cursor->curr,
+ token_cursor->curr_size, 0, ef);
+ /*
+ key = _grn_table_key(ctx, lexicon, tid, &size);
+ ti = token_info_open(ctx, lexicon, ii, token_cursor->curr, token_cursor->curr_size, token_cursor->pos, ef);
+ ti = token_info_open(ctx, lexicon, ii, (char *)token_cursor->orig,
+ token_cursor->orig_blen, token_cursor->pos, ef);
+ */
+ break;
+ case GRN_TOKEN_NOT_FOUND :
+ ti = token_info_open(ctx, lexicon, ii, (char *)token_cursor->orig,
+ token_cursor->orig_blen, 0, ef);
+ break;
+ case GRN_TOKEN_DONE_SKIP :
+ *only_skip_token = GRN_TRUE;
+ goto exit;
+ default :
+ goto exit;
+ }
+ if (!ti) { goto exit ; }
+ tis[(*n)++] = ti;
+ while (token_cursor->status == GRN_TOKEN_DOING) {
+ tid = grn_token_cursor_next(ctx, token_cursor);
+ switch (token_cursor->status) {
+ case GRN_TOKEN_DONE_SKIP :
+ continue;
+ case GRN_TOKEN_DOING :
+ key = _grn_table_key(ctx, lexicon, tid, &size);
+ ti = token_info_open(ctx, lexicon, ii, key, size, token_cursor->pos, EX_NONE);
+ break;
+ case GRN_TOKEN_DONE :
+ if (tid) {
+ key = _grn_table_key(ctx, lexicon, tid, &size);
+ ti = token_info_open(ctx, lexicon, ii, key, size, token_cursor->pos, ef & EX_PREFIX);
+ break;
+ } /* else fallthru */
+ default :
+ ti = token_info_open(ctx, lexicon, ii, (char *)token_cursor->curr,
+ token_cursor->curr_size, token_cursor->pos, ef & EX_PREFIX);
+ break;
+ }
+ if (!ti) { goto exit; }
+ tis[(*n)++] = ti;
+ }
+ rc = GRN_SUCCESS;
+ }
+exit :
+ grn_token_cursor_close(ctx, token_cursor);
+ return rc;
+}
+
+static void
+token_info_clear_offset(token_info **tis, uint32_t n)
+{
+ token_info **tie;
+ for (tie = tis + n; tis < tie; tis++) { (*tis)->offset = 0; }
+}
+
+/* select */
+
+inline static void
+res_add(grn_ctx *ctx, grn_hash *s, grn_rset_posinfo *pi, uint32_t score,
+ grn_operator op)
+{
+ grn_rset_recinfo *ri;
+ switch (op) {
+ case GRN_OP_OR :
+ if (grn_hash_add(ctx, s, pi, s->key_size, (void **)&ri, NULL)) {
+ if (s->obj.header.flags & GRN_OBJ_WITH_SUBREC) {
+ grn_table_add_subrec((grn_obj *)s, ri, score, pi, 1);
+ }
+ }
+ break;
+ case GRN_OP_AND :
+ if (grn_hash_get(ctx, s, pi, s->key_size, (void **)&ri)) {
+ if (s->obj.header.flags & GRN_OBJ_WITH_SUBREC) {
+ ri->n_subrecs |= GRN_RSET_UTIL_BIT;
+ grn_table_add_subrec((grn_obj *)s, ri, score, pi, 1);
+ }
+ }
+ break;
+ case GRN_OP_AND_NOT :
+ {
+ grn_id id;
+ if ((id = grn_hash_get(ctx, s, pi, s->key_size, (void **)&ri))) {
+ grn_hash_delete_by_id(ctx, s, id, NULL);
+ }
+ }
+ break;
+ case GRN_OP_ADJUST :
+ if (grn_hash_get(ctx, s, pi, s->key_size, (void **)&ri)) {
+ if (s->obj.header.flags & GRN_OBJ_WITH_SUBREC) {
+ ri->score += score;
+ }
+ }
+ break;
+ default :
+ break;
+ }
+}
+
+grn_rc
+grn_ii_posting_add(grn_ctx *ctx, grn_ii_posting *pos, grn_hash *s, grn_operator op)
+{
+ res_add(ctx, s, (grn_rset_posinfo *)(pos), (1 + pos->weight), op);
+ return ctx->rc;
+}
+
+#ifdef USE_BHEAP
+
+/* todo */
+
+#else /* USE_BHEAP */
+
+struct _btr_node {
+ struct _btr_node *car;
+ struct _btr_node *cdr;
+ token_info *ti;
+};
+
+typedef struct _btr_node btr_node;
+
+typedef struct {
+ int n;
+ token_info *min;
+ token_info *max;
+ btr_node *root;
+ btr_node *nodes;
+} btr;
+
+inline static void
+bt_zap(btr *bt)
+{
+ bt->n = 0;
+ bt->min = NULL;
+ bt->max = NULL;
+ bt->root = NULL;
+}
+
+inline static btr *
+bt_open(grn_ctx *ctx, int size)
+{
+ btr *bt = GRN_MALLOC(sizeof(btr));
+ if (bt) {
+ bt_zap(bt);
+ if (!(bt->nodes = GRN_MALLOC(sizeof(btr_node) * size))) {
+ GRN_FREE(bt);
+ bt = NULL;
+ }
+ }
+ return bt;
+}
+
+inline static void
+bt_close(grn_ctx *ctx, btr *bt)
+{
+ if (!bt) { return; }
+ GRN_FREE(bt->nodes);
+ GRN_FREE(bt);
+}
+
+inline static void
+bt_push(btr *bt, token_info *ti)
+{
+ int pos = ti->pos, minp = 1, maxp = 1;
+ btr_node *node, *new, **last;
+ new = bt->nodes + bt->n++;
+ new->ti = ti;
+ new->car = NULL;
+ new->cdr = NULL;
+ for (last = &bt->root; (node = *last);) {
+ if (pos < node->ti->pos) {
+ last = &node->car;
+ maxp = 0;
+ } else {
+ last = &node->cdr;
+ minp = 0;
+ }
+ }
+ *last = new;
+ if (minp) { bt->min = ti; }
+ if (maxp) { bt->max = ti; }
+}
+
+inline static void
+bt_pop(btr *bt)
+{
+ btr_node *node, *min, *newmin, **last;
+ for (last = &bt->root; (min = *last) && min->car; last = &min->car) ;
+ if (min) {
+ int pos = min->ti->pos, minp = 1, maxp = 1;
+ *last = min->cdr;
+ min->cdr = NULL;
+ for (last = &bt->root; (node = *last);) {
+ if (pos < node->ti->pos) {
+ last = &node->car;
+ maxp = 0;
+ } else {
+ last = &node->cdr;
+ minp = 0;
+ }
+ }
+ *last = min;
+ if (maxp) { bt->max = min->ti; }
+ if (!minp) {
+ for (newmin = bt->root; newmin->car; newmin = newmin->car) ;
+ bt->min = newmin->ti;
+ }
+ }
+}
+
+#endif /* USE_BHEAP */
+
+typedef enum {
+ grn_wv_none = 0,
+ grn_wv_static,
+ grn_wv_dynamic,
+ grn_wv_constant
+} grn_wv_mode;
+
+inline static int
+get_weight(grn_ctx *ctx, grn_hash *s, grn_id rid, int sid,
+ grn_wv_mode wvm, grn_select_optarg *optarg)
+{
+ switch (wvm) {
+ case grn_wv_none :
+ return 1;
+ case grn_wv_static :
+ return sid <= optarg->vector_size ? optarg->weight_vector[sid - 1] : 0;
+ case grn_wv_dynamic :
+ /* todo : support hash with keys
+ if (s->keys) {
+ uint32_t key_size;
+ const char *key = _grn_table_key(ctx, s->keys, rid, &key_size);
+ // todo : change grn_select_optarg
+ return key ? optarg->func(s, key, key_size, sid, optarg->func_arg) : 0;
+ }
+ */
+ /* todo : cast */
+ return optarg->func(ctx, (void *)s, (void *)(intptr_t)rid, sid, optarg->func_arg);
+ case grn_wv_constant :
+ return optarg->vector_size;
+ default :
+ return 1;
+ }
+}
+
+grn_rc
+grn_ii_similar_search(grn_ctx *ctx, grn_ii *ii,
+ const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_select_optarg *optarg)
+{
+ int *w1, limit;
+ grn_id tid, *tp, max_size;
+ grn_rc rc = GRN_SUCCESS;
+ grn_hash *h;
+ grn_token_cursor *token_cursor;
+ unsigned int token_flags = GRN_TOKEN_ENABLE_TOKENIZED_DELIMITER;
+ grn_obj *lexicon = ii->lexicon;
+ if (!lexicon || !ii || !string || !string_len || !s || !optarg) { return GRN_INVALID_ARGUMENT; }
+ if (!(h = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(int), 0))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (!(token_cursor = grn_token_cursor_open(ctx, lexicon, string, string_len,
+ GRN_TOKEN_GET, token_flags))) {
+ grn_hash_close(ctx, h);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (!(max_size = optarg->max_size)) { max_size = 1048576; }
+ while (token_cursor->status != GRN_TOKEN_DONE &&
+ token_cursor->status != GRN_TOKEN_DONE_SKIP) {
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ if (grn_hash_add(ctx, h, &tid, sizeof(grn_id), (void **)&w1, NULL)) { (*w1)++; }
+ }
+ if (tid && token_cursor->curr_size) {
+ if (optarg->max_interval == GRN_OP_UNSPLIT) {
+ grn_table_search(ctx, lexicon, token_cursor->curr, token_cursor->curr_size,
+ GRN_OP_PREFIX, (grn_obj *)h, GRN_OP_OR);
+ }
+ if (optarg->max_interval == GRN_OP_PARTIAL) {
+ grn_table_search(ctx, lexicon, token_cursor->curr, token_cursor->curr_size,
+ GRN_OP_SUFFIX, (grn_obj *)h, GRN_OP_OR);
+ }
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ {
+ grn_hash_cursor *c = grn_hash_cursor_open(ctx, h, NULL, 0, NULL, 0, 0, -1, 0);
+ if (!c) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_cursor_open on grn_ii_similar_search failed !");
+ grn_hash_close(ctx, h);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ while (grn_hash_cursor_next(ctx, c)) {
+ uint32_t es;
+ grn_hash_cursor_get_key_value(ctx, c, (void **) &tp, NULL, (void **) &w1);
+ if ((es = grn_ii_estimate_size(ctx, ii, *tp))) {
+ *w1 += max_size / es;
+ } else {
+ grn_hash_cursor_delete(ctx, c, NULL);
+ }
+ }
+ grn_hash_cursor_close(ctx, c);
+ }
+ limit = optarg->similarity_threshold
+ ? (optarg->similarity_threshold > GRN_HASH_SIZE(h)
+ ? GRN_HASH_SIZE(h)
+ : optarg->similarity_threshold)
+ : (GRN_HASH_SIZE(h) >> 3) + 1;
+ if (GRN_HASH_SIZE(h)) {
+ grn_id j, id;
+ int w2, rep;
+ grn_ii_cursor *c;
+ grn_ii_posting *pos;
+ grn_wv_mode wvm = grn_wv_none;
+ grn_table_sort_optarg arg = {
+ GRN_TABLE_SORT_DESC|GRN_TABLE_SORT_BY_VALUE|GRN_TABLE_SORT_AS_NUMBER,
+ NULL,
+ NULL,
+ 0
+ };
+ grn_array *sorted = grn_array_create(ctx, NULL, sizeof(grn_id), 0);
+ if (!sorted) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_sort on grn_ii_similar_search failed !");
+ grn_hash_close(ctx, h);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ grn_hash_sort(ctx, h, limit, sorted, &arg);
+ /* todo support subrec
+ rep = (s->record_unit == grn_rec_position || s->subrec_unit == grn_rec_position);
+ */
+ rep = 0;
+ if (optarg->func) {
+ wvm = grn_wv_dynamic;
+ } else if (optarg->vector_size) {
+ wvm = optarg->weight_vector ? grn_wv_static : grn_wv_constant;
+ }
+ for (j = 1; j <= limit; j++) {
+ grn_array_get_value(ctx, sorted, j, &id);
+ _grn_hash_get_key_value(ctx, h, id, (void **) &tp, (void **) &w1);
+ if (!*tp || !(c = grn_ii_cursor_open(ctx, ii, *tp, GRN_ID_NIL, GRN_ID_MAX,
+ rep
+ ? ii->n_elements
+ : ii->n_elements - 1, 0))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "cursor open failed (%d)", *tp);
+ continue;
+ }
+ if (rep) {
+ while (grn_ii_cursor_next(ctx, c)) {
+ pos = c->post;
+ if ((w2 = get_weight(ctx, s, pos->rid, pos->sid, wvm, optarg))) {
+ while (grn_ii_cursor_next_pos(ctx, c)) {
+ res_add(ctx, s, (grn_rset_posinfo *) pos, *w1 * w2 * (1 + pos->weight), op);
+ }
+ }
+ }
+ } else {
+ while (grn_ii_cursor_next(ctx, c)) {
+ pos = c->post;
+ if ((w2 = get_weight(ctx, s, pos->rid, pos->sid, wvm, optarg))) {
+ res_add(ctx, s, (grn_rset_posinfo *) pos, *w1 * w2 * (pos->tf + pos->weight), op);
+ }
+ }
+ }
+ grn_ii_cursor_close(ctx, c);
+ }
+ grn_array_close(ctx, sorted);
+ }
+ grn_hash_close(ctx, h);
+ grn_ii_resolve_sel_and(ctx, s, op);
+ // grn_hash_cursor_clear(r);
+ return rc;
+}
+
+#define TERM_EXTRACT_EACH_POST 0
+#define TERM_EXTRACT_EACH_TERM 1
+
+grn_rc
+grn_ii_term_extract(grn_ctx *ctx, grn_ii *ii, const char *string,
+ unsigned int string_len, grn_hash *s,
+ grn_operator op, grn_select_optarg *optarg)
+{
+ grn_rset_posinfo pi;
+ grn_id tid;
+ const char *p, *pe;
+ grn_obj *nstr;
+ const char *normalized;
+ unsigned int normalized_length_in_bytes;
+ grn_ii_cursor *c;
+ grn_ii_posting *pos;
+ int skip, rep, policy;
+ grn_rc rc = GRN_SUCCESS;
+ grn_wv_mode wvm = grn_wv_none;
+ if (!ii || !string || !string_len || !s || !optarg) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (!(nstr = grn_string_open(ctx, string, string_len, NULL, 0))) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ policy = optarg->max_interval;
+ if (optarg->func) {
+ wvm = grn_wv_dynamic;
+ } else if (optarg->vector_size) {
+ wvm = optarg->weight_vector ? grn_wv_static : grn_wv_constant;
+ }
+ /* todo support subrec
+ if (policy == TERM_EXTRACT_EACH_POST) {
+ if ((rc = grn_records_reopen(s, grn_rec_section, grn_rec_none, 0))) { goto exit; }
+ }
+ rep = (s->record_unit == grn_rec_position || s->subrec_unit == grn_rec_position);
+ */
+ rep = 0;
+ grn_string_get_normalized(ctx, nstr, &normalized, &normalized_length_in_bytes,
+ NULL);
+ for (p = normalized, pe = p + normalized_length_in_bytes; p < pe; p += skip) {
+ if ((tid = grn_table_lcp_search(ctx, ii->lexicon, p, pe - p))) {
+ if (policy == TERM_EXTRACT_EACH_POST) {
+ if (!(skip = grn_table_get_key(ctx, ii->lexicon, tid, NULL, 0))) { break; }
+ } else {
+ if (!(skip = (int)grn_charlen(ctx, p, pe))) { break; }
+ }
+ if (!(c = grn_ii_cursor_open(ctx, ii, tid, GRN_ID_NIL, GRN_ID_MAX,
+ rep
+ ? ii->n_elements
+ : ii->n_elements - 1, 0))) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "cursor open failed (%d)", tid);
+ continue;
+ }
+ if (rep) {
+ while (grn_ii_cursor_next(ctx, c)) {
+ pos = c->post;
+ while (grn_ii_cursor_next_pos(ctx, c)) {
+ res_add(ctx, s, (grn_rset_posinfo *) pos,
+ get_weight(ctx, s, pos->rid, pos->sid, wvm, optarg), op);
+ }
+ }
+ } else {
+ while (grn_ii_cursor_next(ctx, c)) {
+ if (policy == TERM_EXTRACT_EACH_POST) {
+ pi.rid = c->post->rid;
+ pi.sid = p - normalized;
+ res_add(ctx, s, &pi, pi.sid + 1, op);
+ } else {
+ pos = c->post;
+ res_add(ctx, s, (grn_rset_posinfo *) pos,
+ get_weight(ctx, s, pos->rid, pos->sid, wvm, optarg), op);
+ }
+ }
+ }
+ grn_ii_cursor_close(ctx, c);
+ } else {
+ if (!(skip = (int)grn_charlen(ctx, p, pe))) {
+ break;
+ }
+ }
+ }
+ grn_obj_close(ctx, nstr);
+ return rc;
+}
+
+grn_rc
+grn_ii_select(grn_ctx *ctx, grn_ii *ii, const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_select_optarg *optarg)
+{
+ btr *bt = NULL;
+ grn_rc rc = GRN_SUCCESS;
+ int rep, orp, weight, max_interval = 0;
+ token_info *ti, **tis = NULL, **tip, **tie;
+ uint32_t n = 0, rid, sid, nrid, nsid;
+ grn_bool only_skip_token = GRN_FALSE;
+ grn_operator mode = GRN_OP_EXACT;
+ grn_wv_mode wvm = grn_wv_none;
+ grn_obj *lexicon = ii->lexicon;
+ if (!lexicon || !ii || !s) { return GRN_INVALID_ARGUMENT; }
+ if (optarg) {
+ mode = optarg->mode;
+ if (optarg->func) {
+ wvm = grn_wv_dynamic;
+ } else if (optarg->vector_size) {
+ wvm = optarg->weight_vector ? grn_wv_static : grn_wv_constant;
+ }
+ }
+ if (mode == GRN_OP_SIMILAR) {
+ return grn_ii_similar_search(ctx, ii, string, string_len, s, op, optarg);
+ }
+ if (mode == GRN_OP_TERM_EXTRACT) {
+ return grn_ii_term_extract(ctx, ii, string, string_len, s, op, optarg);
+ }
+ /* todo : support subrec
+ rep = (s->record_unit == grn_rec_position || s->subrec_unit == grn_rec_position);
+ orp = (s->record_unit == grn_rec_position || op == GRN_OP_OR);
+ */
+ rep = 0;
+ orp = op == GRN_OP_OR;
+ if (!string_len) { goto exit; }
+ if (!(tis = GRN_MALLOC(sizeof(token_info *) * string_len * 2))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (token_info_build(ctx, lexicon, ii, string, string_len, tis, &n, &only_skip_token, mode) || !n) { goto exit; }
+ switch (mode) {
+ case GRN_OP_NEAR2 :
+ token_info_clear_offset(tis, n);
+ mode = GRN_OP_NEAR;
+ /* fallthru */
+ case GRN_OP_NEAR :
+ if (!(bt = bt_open(ctx, n))) { rc = GRN_NO_MEMORY_AVAILABLE; goto exit; }
+ max_interval = optarg->max_interval;
+ break;
+ default :
+ break;
+ }
+ qsort(tis, n, sizeof(token_info *), token_compare);
+ tie = tis + n;
+ /*
+ for (tip = tis; tip < tie; tip++) {
+ ti = *tip;
+ grn_log("o=%d n=%d s=%d r=%d", ti->offset, ti->ntoken, ti->size, ti->rid);
+ }
+ */
+ GRN_LOG(ctx, GRN_LOG_INFO, "n=%d (%.*s)", n, string_len, string);
+ /* todo : array as result
+ if (n == 1 && (*tis)->cursors->n_entries == 1 && op == GRN_OP_OR
+ && !GRN_HASH_SIZE(s) && !s->garbages
+ && s->record_unit == grn_rec_document && !s->max_n_subrecs
+ && grn_ii_max_section(ii) == 1) {
+ grn_ii_cursor *c = (*tis)->cursors->bins[0];
+ if ((rc = grn_hash_array_init(s, (*tis)->size + 32768))) { goto exit; }
+ do {
+ grn_rset_recinfo *ri;
+ grn_ii_posting *p = c->post;
+ if ((weight = get_weight(ctx, s, p->rid, p->sid, wvm, optarg))) {
+ GRN_HASH_INT_ADD(s, p, ri);
+ ri->score = (p->tf + p->score) * weight;
+ ri->n_subrecs = 1;
+ }
+ } while (grn_ii_cursor_next(ctx, c));
+ goto exit;
+ }
+ */
+ for (;;) {
+ rid = (*tis)->p->rid;
+ sid = (*tis)->p->sid;
+ for (tip = tis + 1, nrid = rid, nsid = sid + 1; tip < tie; tip++) {
+ ti = *tip;
+ if (token_info_skip(ctx, ti, rid, sid)) { goto exit; }
+ if (ti->p->rid != rid || ti->p->sid != sid) {
+ nrid = ti->p->rid;
+ nsid = ti->p->sid;
+ break;
+ }
+ }
+ weight = get_weight(ctx, s, rid, sid, wvm, optarg);
+ if (tip == tie && weight) {
+ grn_rset_posinfo pi = {rid, sid, 0};
+ if (orp || grn_hash_get(ctx, s, &pi, s->key_size, NULL)) {
+ int count = 0, noccur = 0, pos = 0, score = 0, tscore = 0, min, max;
+
+#define SKIP_OR_BREAK(pos) {\
+ if (token_info_skip_pos(ctx, ti, rid, sid, pos)) { break; } \
+ if (ti->p->rid != rid || ti->p->sid != sid) { \
+ nrid = ti->p->rid; \
+ nsid = ti->p->sid; \
+ break; \
+ } \
+}
+ if (n == 1 && !rep) {
+ noccur = (*tis)->p->tf;
+ tscore = (*tis)->p->weight;
+ } else if (mode == GRN_OP_NEAR) {
+ bt_zap(bt);
+ for (tip = tis; tip < tie; tip++) {
+ ti = *tip;
+ SKIP_OR_BREAK(pos);
+ bt_push(bt, ti);
+ }
+ if (tip == tie) {
+ for (;;) {
+ ti = bt->min; min = ti->pos; max = bt->max->pos;
+ if (min > max) { exit(0); }
+ if (max - min <= max_interval) {
+ if (rep) { pi.pos = min; res_add(ctx, s, &pi, weight, op); }
+ noccur++;
+ if (ti->pos == max + 1) {
+ break;
+ }
+ SKIP_OR_BREAK(max + 1);
+ } else {
+ if (ti->pos == max - max_interval) {
+ break;
+ }
+ SKIP_OR_BREAK(max - max_interval);
+ }
+ bt_pop(bt);
+ }
+ }
+ } else {
+ for (tip = tis; ; tip++) {
+ if (tip == tie) { tip = tis; }
+ ti = *tip;
+ SKIP_OR_BREAK(pos);
+ if (ti->pos == pos) {
+ score += ti->p->weight; count++;
+ } else {
+ score = ti->p->weight; count = 1; pos = ti->pos;
+ }
+ if (count == n) {
+ if (rep) { pi.pos = pos; res_add(ctx, s, &pi, (score + 1) * weight, op); }
+ tscore += score;
+ score = 0; count = 0; pos++;
+ noccur++;
+ }
+ }
+ }
+ if (noccur && !rep) { res_add(ctx, s, &pi, (noccur + tscore) * weight, op); }
+#undef SKIP_OR_BREAK
+ }
+ }
+ if (token_info_skip(ctx, *tis, nrid, nsid)) { goto exit; }
+ }
+exit :
+ for (tip = tis; tip < tis + n; tip++) {
+ if (*tip) { token_info_close(ctx, *tip); }
+ }
+ if (tis) { GRN_FREE(tis); }
+ if (!only_skip_token) {
+ grn_ii_resolve_sel_and(ctx, s, op);
+ }
+ // grn_hash_cursor_clear(r);
+ bt_close(ctx, bt);
+#ifdef DEBUG
+ {
+ uint32_t segno = GRN_II_MAX_LSEG, nnref = 0;
+ grn_io_mapinfo *info = ii->seg->maps;
+ for (; segno; segno--, info++) { if (info->nref) { nnref++; } }
+ GRN_LOG(ctx, GRN_LOG_INFO, "nnref=%d", nnref);
+ }
+#endif /* DEBUG */
+ return rc;
+}
+
+grn_rc
+grn_ii_sel(grn_ctx *ctx, grn_ii *ii, const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_search_optarg *optarg)
+{
+ ERRCLR(ctx);
+ GRN_LOG(ctx, GRN_LOG_INFO, "grn_ii_sel > (%.*s)", string_len, string);
+ {
+ grn_select_optarg arg = {GRN_OP_EXACT, 0, 0, NULL, 0, NULL, NULL, 0};
+ if (!s) { return GRN_INVALID_ARGUMENT; }
+ if (optarg) {
+ switch (optarg->mode) {
+ case GRN_OP_NEAR :
+ case GRN_OP_NEAR2 :
+ arg.mode = optarg->mode;
+ arg.max_interval = optarg->max_interval;
+ break;
+ case GRN_OP_SIMILAR :
+ arg.mode = optarg->mode;
+ arg.similarity_threshold = optarg->similarity_threshold;
+ break;
+ default :
+ break;
+ }
+ if (optarg->vector_size > 0) {
+ arg.weight_vector = optarg->weight_vector;
+ arg.vector_size = optarg->vector_size;
+ }
+ }
+ /* todo : support subrec
+ grn_rset_init(ctx, s, grn_rec_document, 0, grn_rec_none, 0, 0);
+ */
+ if (grn_ii_select(ctx, ii, string, string_len, s, op, &arg)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_ii_select on grn_ii_sel(1) failed !");
+ return ctx->rc;
+ }
+ GRN_LOG(ctx, GRN_LOG_INFO, "exact: %d", GRN_HASH_SIZE(s));
+ if (op == GRN_OP_OR) {
+ if ((int64_t)GRN_HASH_SIZE(s) <= ctx->impl->match_escalation_threshold) {
+ arg.mode = GRN_OP_UNSPLIT;
+ if (grn_ii_select(ctx, ii, string, string_len, s, op, &arg)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_ii_select on grn_ii_sel(2) failed !");
+ return ctx->rc;
+ }
+ GRN_LOG(ctx, GRN_LOG_INFO, "unsplit: %d", GRN_HASH_SIZE(s));
+ }
+ if ((int64_t)GRN_HASH_SIZE(s) <= ctx->impl->match_escalation_threshold) {
+ arg.mode = GRN_OP_PARTIAL;
+ if (grn_ii_select(ctx, ii, string, string_len, s, op, &arg)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "grn_ii_select on grn_ii_sel(3) failed !");
+ return ctx->rc;
+ }
+ GRN_LOG(ctx, GRN_LOG_INFO, "partial: %d", GRN_HASH_SIZE(s));
+ }
+ }
+ GRN_LOG(ctx, GRN_LOG_INFO, "hits=%d", GRN_HASH_SIZE(s));
+ return GRN_SUCCESS;
+ }
+}
+
+grn_rc
+grn_ii_at(grn_ctx *ctx, grn_ii *ii, grn_id id, grn_hash *s, grn_operator op)
+{
+ int rep = 0;
+ grn_ii_cursor *c;
+ grn_ii_posting *pos;
+ if ((c = grn_ii_cursor_open(ctx, ii, id, GRN_ID_NIL, GRN_ID_MAX,
+ rep ? ii->n_elements : ii->n_elements - 1, 0))) {
+ while ((pos = grn_ii_cursor_next(ctx, c))) {
+ res_add(ctx, s, (grn_rset_posinfo *) pos, (1 + pos->weight), op);
+ }
+ grn_ii_cursor_close(ctx, c);
+ }
+ return ctx->rc;
+}
+
+void
+grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op)
+{
+ if (op == GRN_OP_AND
+ && !(ctx->flags & GRN_CTX_TEMPORARY_DISABLE_II_RESOLVE_SEL_AND)) {
+ grn_id eid;
+ grn_rset_recinfo *ri;
+ grn_hash_cursor *c = grn_hash_cursor_open(ctx, s, NULL, 0, NULL, 0, 0, -1, 0);
+ if (c) {
+ while ((eid = grn_hash_cursor_next(ctx, c))) {
+ grn_hash_cursor_get_value(ctx, c, (void **) &ri);
+ if ((ri->n_subrecs & GRN_RSET_UTIL_BIT)) {
+ ri->n_subrecs &= ~GRN_RSET_UTIL_BIT;
+ } else {
+ grn_hash_delete_by_id(ctx, s, eid, NULL);
+ }
+ }
+ grn_hash_cursor_close(ctx, c);
+ }
+ }
+}
+
+/* just for inspect */
+static grn_ii_posting *
+grn_ii_cursor_next_all(grn_ctx *ctx, grn_ii_cursor *c)
+{
+ if (c->buf) {
+ for (;;) {
+ if (c->stat & CHUNK_USED) {
+ for (;;) {
+ if (c->crp < c->cdp + c->cdf) {
+ uint32_t dgap = *c->crp++;
+ c->pc.rid += dgap;
+ if (dgap) { c->pc.sid = 0; }
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ c->pc.sid += 1 + *c->csp++;
+ } else {
+ c->pc.sid = 1;
+ }
+ c->cpp += c->pc.rest;
+ c->pc.rest = c->pc.tf = 1 + *c->ctp++;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ c->pc.weight = *c->cwp++;
+ } else {
+ c->pc.weight = 0;
+ }
+ c->pc.pos = 0;
+ /*
+ {
+ static int count = 0;
+ int tf = c->pc.tf, pos = 0, *pp = (int *)c->cpp;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ grn_text_itoa(ctx, &buf, c->pc.rid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, c->pc.sid);
+ GRN_TEXT_PUTC(ctx, &buf, ':');
+ grn_text_itoa(ctx, &buf, c->pc.tf);
+ GRN_TEXT_PUTC(ctx, &buf, '(');
+ while (tf--) {
+ pos += *pp++;
+ count++;
+ grn_text_itoa(ctx, &buf, pos);
+ if (tf) { GRN_TEXT_PUTC(ctx, &buf, ':'); }
+ }
+ GRN_TEXT_PUTC(ctx, &buf, ')');
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "posting(%d):%s", count, GRN_TEXT_VALUE(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+ }
+ */
+ } else {
+ if (c->curr_chunk <= c->nchunks) {
+ if (c->curr_chunk == c->nchunks) {
+ if (c->cp < c->cpe) {
+ grn_p_decv(ctx, c->cp, c->cpe - c->cp, c->rdv, c->ii->n_elements);
+ } else {
+ c->pc.rid = 0;
+ break;
+ }
+ } else {
+ uint8_t *cp;
+ grn_io_win iw;
+ uint32_t size = c->cinfo[c->curr_chunk].size;
+ if (size && (cp = WIN_MAP2(c->ii->chunk, ctx, &iw,
+ c->cinfo[c->curr_chunk].segno, 0,
+ size, grn_io_rdonly))) {
+ grn_p_decv(ctx, cp, size, c->rdv, c->ii->n_elements);
+ grn_io_win_unmap2(&iw);
+ } else {
+ c->pc.rid = 0;
+ break;
+ }
+ }
+ {
+ int j = 0;
+ c->cdf = c->rdv[j].data_size;
+ c->crp = c->cdp = c->rdv[j++].data;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ c->csp = c->rdv[j++].data;
+ }
+ c->ctp = c->rdv[j++].data;
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ c->cwp = c->rdv[j++].data;
+ }
+ c->cpp = c->rdv[j].data;
+ }
+ c->pc.rid = 0;
+ c->pc.sid = 0;
+ c->pc.rest = 0;
+ c->curr_chunk++;
+ continue;
+ } else {
+ c->pc.rid = 0;
+ }
+ }
+ break;
+ }
+ }
+ if (c->stat & BUFFER_USED) {
+ if (c->nextb) {
+ uint32_t lrid = c->pb.rid, lsid = c->pb.sid; /* for check */
+ buffer_rec *br = BUFFER_REC_AT(c->buf, c->nextb);
+ if (buffer_is_reused(ctx, c->ii, c)) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "buffer reused(%d,%d)", c->buffer_pseg, *c->ppseg);
+ // todo : rewind;
+ }
+ c->bp = NEXT_ADDR(br);
+ GRN_B_DEC(c->pb.rid, c->bp);
+ if ((c->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ GRN_B_DEC(c->pb.sid, c->bp);
+ } else {
+ c->pb.sid = 1;
+ }
+ if (lrid > c->pb.rid || (lrid == c->pb.rid && lsid >= c->pb.sid)) {
+ ERR(GRN_FILE_CORRUPT, "brokend!! (%d:%d) -> (%d:%d) (%d->%d)", lrid, lsid, c->pb.rid, c->pb.sid, c->buffer_pseg, *c->ppseg);
+ }
+ c->nextb = br->step;
+ GRN_B_DEC(c->pb.tf, c->bp);
+ if ((c->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ GRN_B_DEC(c->pb.weight, c->bp);
+ } else {
+ c->pb.weight = 0;
+ }
+ c->pb.rest = c->pb.tf;
+ c->pb.pos = 0;
+ } else {
+ c->pb.rid = 0;
+ }
+ }
+ if (c->pb.rid) {
+ if (c->pc.rid) {
+ if (c->pc.rid < c->pb.rid) {
+ c->stat = CHUNK_USED;
+ c->post = &c->pc;
+ break;
+ } else {
+ if (c->pb.rid < c->pc.rid) {
+ c->stat = BUFFER_USED;
+ c->post = &c->pb;
+ break;
+ } else {
+ if (c->pb.sid) {
+ if (c->pc.sid < c->pb.sid) {
+ c->stat = CHUNK_USED;
+ c->post = &c->pc;
+ break;
+ } else {
+ c->stat = BUFFER_USED;
+ if (c->pb.sid == c->pc.sid) { c->stat |= CHUNK_USED; }
+ c->post = &c->pb;
+ break;
+ }
+ } else {
+ c->stat = CHUNK_USED;
+ }
+ }
+ }
+ } else {
+ c->stat = BUFFER_USED;
+ c->post = &c->pb;
+ break;
+ }
+ } else {
+ if (c->pc.rid) {
+ c->stat = CHUNK_USED;
+ c->post = &c->pc;
+ break;
+ } else {
+ c->post = NULL;
+ return NULL;
+ }
+ }
+ }
+ } else {
+ if (c->stat & SOLE_DOC_USED) {
+ c->post = NULL;
+ return NULL;
+ } else {
+ c->post = &c->pb;
+ c->stat |= SOLE_DOC_USED;
+ }
+ }
+ return c->post;
+}
+
+void
+grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf)
+{
+ grn_obj key_buf;
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_size;
+ int i = 0;
+
+ GRN_TEXT_PUTS(ctx, buf, " #<");
+ key_size = grn_table_get_key(ctx, c->ii->lexicon, c->id,
+ key, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OBJ_INIT(&key_buf, GRN_BULK, 0, c->ii->lexicon->header.domain);
+ GRN_TEXT_SET(ctx, &key_buf, key, key_size);
+ grn_inspect(ctx, buf, &key_buf);
+ GRN_OBJ_FIN(ctx, &key_buf);
+
+ GRN_TEXT_PUTS(ctx, buf, "\n elements:[\n ");
+ while (grn_ii_cursor_next_all(ctx, c)) {
+ grn_ii_posting *pos = c->post;
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ",\n ");
+ }
+ i++;
+ GRN_TEXT_PUTS(ctx, buf, "{status:");
+ if (pos->tf && pos->sid) {
+ GRN_TEXT_PUTS(ctx, buf, "available");
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "garbage");
+ }
+ GRN_TEXT_PUTS(ctx, buf, ", rid:");
+ grn_text_lltoa(ctx, buf, pos->rid);
+ GRN_TEXT_PUTS(ctx, buf, ", sid:");
+ grn_text_lltoa(ctx, buf, pos->sid);
+ GRN_TEXT_PUTS(ctx, buf, ", pos:");
+ grn_text_lltoa(ctx, buf, pos->pos);
+ GRN_TEXT_PUTS(ctx, buf, ", tf:");
+ grn_text_lltoa(ctx, buf, pos->tf);
+ GRN_TEXT_PUTS(ctx, buf, ", weight:");
+ grn_text_lltoa(ctx, buf, pos->weight);
+ GRN_TEXT_PUTS(ctx, buf, ", rest:");
+ grn_text_lltoa(ctx, buf, pos->rest);
+ GRN_TEXT_PUTS(ctx, buf, "}");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "\n ]\n >");
+}
+
+void
+grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf)
+{
+ grn_table_cursor *tc;
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ if ((tc = grn_table_cursor_open(ctx, ii->lexicon, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_ASCENDING))) {
+ int i = 0;
+ grn_id tid;
+ grn_ii_cursor *c;
+ while ((tid = grn_table_cursor_next(ctx, tc))) {
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ }
+ i++;
+ GRN_TEXT_PUTS(ctx, buf, "\n");
+ if ((c = grn_ii_cursor_open(ctx, ii, tid, GRN_ID_NIL, GRN_ID_MAX,
+ ii->n_elements,
+ GRN_OBJ_WITH_POSITION|GRN_OBJ_WITH_SECTION))) {
+ grn_ii_cursor_inspect(ctx, c, buf);
+ grn_ii_cursor_close(ctx, c);
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+}
+
+/********************** buffered index builder ***********************/
+
+const grn_id II_BUFFER_RID_FLAG = 0x80000000;
+const grn_id II_BUFFER_WEIGHT_FLAG = 0x40000000;
+#ifdef II_BUFFER_ORDER_BY_ID
+const int II_BUFFER_ORDER = GRN_CURSOR_BY_ID;
+#else /* II_BUFFER_ORDER_BY_ID */
+const int II_BUFFER_ORDER = GRN_CURSOR_BY_KEY;
+#endif /* II_BUFFER_ORDER_BY_ID */
+const uint16_t II_BUFFER_NTERMS_PER_BUFFER = 16380;
+const uint32_t II_BUFFER_PACKED_BUF_SIZE = 0x4000000;
+const char *TMPFILE_PATH = "grn_ii_buffer_tmp";
+const uint32_t II_BUFFER_NCOUNTERS_MARGIN = 0x100000;
+const size_t II_BUFFER_BLOCK_SIZE = 0x1000000;
+const uint32_t II_BUFFER_BLOCK_READ_UNIT_SIZE = 0x200000;
+
+typedef struct {
+ uint32_t nrecs;
+ uint32_t nposts;
+ grn_id last_rid;
+ uint32_t last_sid;
+ uint32_t last_tf;
+ uint32_t last_weight;
+ uint32_t last_pos;
+ uint32_t offset_rid;
+ uint32_t offset_sid;
+ uint32_t offset_tf;
+ uint32_t offset_weight;
+ uint32_t offset_pos;
+} ii_buffer_counter;
+
+typedef struct {
+ off_t head;
+ off_t tail;
+ uint32_t nextsize;
+ uint8_t *buffer;
+ uint32_t buffersize;
+ uint8_t *bufcur;
+ uint32_t rest;
+ grn_id tid;
+ uint32_t nrecs;
+ uint32_t nposts;
+ grn_id *recs;
+ uint32_t *tfs;
+ uint32_t *posts;
+} ii_buffer_block;
+
+struct _grn_ii_buffer {
+ grn_obj *lexicon;
+ grn_obj *tmp_lexicon;
+ ii_buffer_block *blocks;
+ uint32_t nblocks;
+ int tmpfd;
+ char tmpfpath[PATH_MAX];
+ uint64_t update_buffer_size;
+ // stuff for parsing
+ off_t filepos;
+ grn_id *block_buf;
+ size_t block_buf_size;
+ size_t block_pos;
+ ii_buffer_counter *counters;
+ uint32_t ncounters;
+ size_t total_size;
+ size_t curr_size;
+ // stuff for merging
+ grn_ii *ii;
+ uint32_t lseg;
+ uint32_t dseg;
+ buffer *term_buffer;
+ datavec data_vectors[MAX_N_ELEMENTS + 1];
+ uint8_t *packed_buf;
+ size_t packed_buf_size;
+ size_t packed_len;
+ size_t total_chunk_size;
+};
+
+static ii_buffer_block *
+block_new(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ ii_buffer_block *block;
+ if (!(ii_buffer->nblocks & 0x3ff)) {
+ ii_buffer_block *blocks;
+ if (!(blocks = GRN_REALLOC(ii_buffer->blocks,
+ (ii_buffer->nblocks + 0x400) *
+ sizeof(ii_buffer_block)))) {
+ return NULL;
+ }
+ ii_buffer->blocks = blocks;
+ }
+ block = &ii_buffer->blocks[ii_buffer->nblocks];
+ block->head = ii_buffer->filepos;
+ block->rest = 0;
+ block->buffer = NULL;
+ block->buffersize = 0;
+ return block;
+}
+
+static uint8_t *
+allocate_outbuf(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ size_t bufsize = 0, bufsize_ = 0;
+ uint32_t flags = ii_buffer->ii->header->flags;
+ ii_buffer_counter *counter = ii_buffer->counters;
+ grn_id tid, tid_max = grn_table_size(ctx, ii_buffer->tmp_lexicon);
+ for (tid = 1; tid <= tid_max; counter++, tid++) {
+ counter->offset_tf += GRN_B_ENC_SIZE(counter->last_tf - 1);
+ counter->last_rid = 0;
+ counter->last_tf = 0;
+ bufsize += 5;
+ bufsize += GRN_B_ENC_SIZE(counter->nrecs);
+ bufsize += GRN_B_ENC_SIZE(counter->nposts);
+ bufsize += counter->offset_rid;
+ if ((flags & GRN_OBJ_WITH_SECTION)) {
+ bufsize += counter->offset_sid;
+ }
+ bufsize += counter->offset_tf;
+ if ((flags & GRN_OBJ_WITH_WEIGHT)) {
+ bufsize += counter->offset_weight;
+ }
+ if ((flags & GRN_OBJ_WITH_POSITION)) {
+ bufsize += counter->offset_pos;
+ }
+ if (bufsize_ + II_BUFFER_BLOCK_READ_UNIT_SIZE < bufsize) {
+ bufsize += sizeof(uint32_t);
+ bufsize_ = bufsize;
+ }
+ }
+ GRN_LOG(ctx, GRN_LOG_INFO, "flushing:%d bufsize:%zu",
+ ii_buffer->nblocks, bufsize);
+ return (uint8_t *)GRN_MALLOC(bufsize);
+}
+
+static size_t
+encode_terms(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ uint8_t *outbuf, ii_buffer_block *block)
+{
+ grn_id tid;
+ uint8_t *outbufp = outbuf;
+ uint8_t *outbufp_ = outbuf;
+ grn_table_cursor *tc;
+ uint8_t *pnext = (uint8_t *)&block->nextsize;
+ uint32_t flags = ii_buffer->ii->header->flags;
+ tc = grn_table_cursor_open(ctx, ii_buffer->tmp_lexicon,
+ NULL, 0, NULL, 0, 0, -1, II_BUFFER_ORDER);
+ while ((tid = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ char key[GRN_TABLE_MAX_KEY_SIZE];
+ int key_size = grn_table_get_key(ctx, ii_buffer->tmp_lexicon, tid,
+ key, GRN_TABLE_MAX_KEY_SIZE);
+ grn_id gtid = grn_table_add(ctx, ii_buffer->lexicon, key, key_size, NULL);
+ ii_buffer_counter *counter = &ii_buffer->counters[tid - 1];
+ if (counter->nrecs) {
+ uint32_t offset_rid = counter->offset_rid;
+ uint32_t offset_sid = counter->offset_sid;
+ uint32_t offset_tf = counter->offset_tf;
+ uint32_t offset_weight = counter->offset_weight;
+ uint32_t offset_pos = counter->offset_pos;
+ GRN_B_ENC(gtid, outbufp);
+ GRN_B_ENC(counter->nrecs, outbufp);
+ GRN_B_ENC(counter->nposts, outbufp);
+ ii_buffer->total_size += counter->nrecs + counter->nposts;
+ counter->offset_rid = outbufp - outbuf;
+ outbufp += offset_rid;
+ if ((flags & GRN_OBJ_WITH_SECTION)) {
+ counter->offset_sid = outbufp - outbuf;
+ outbufp += offset_sid;
+ }
+ counter->offset_tf = outbufp - outbuf;
+ outbufp += offset_tf;
+ if ((flags & GRN_OBJ_WITH_WEIGHT)) {
+ counter->offset_weight = outbufp - outbuf;
+ outbufp += offset_weight;
+ }
+ if ((flags & GRN_OBJ_WITH_POSITION)) {
+ counter->offset_pos = outbufp - outbuf;
+ outbufp += offset_pos;
+ }
+ }
+ if (outbufp_ + II_BUFFER_BLOCK_READ_UNIT_SIZE < outbufp) {
+ uint32_t size = outbufp - outbufp_ + sizeof(uint32_t);
+ memcpy(pnext, &size, sizeof(uint32_t));
+ pnext = outbufp;
+ outbufp += sizeof(uint32_t);
+ outbufp_ = outbufp;
+ }
+ }
+ grn_table_cursor_close(ctx, tc);
+ if (outbufp_ < outbufp) {
+ uint32_t size = outbufp - outbufp_;
+ memcpy(pnext, &size, sizeof(uint32_t));
+ }
+ return outbufp - outbuf;
+}
+
+static void
+encode_postings(grn_ctx *ctx, grn_ii_buffer *ii_buffer, uint8_t *outbuf)
+{
+ grn_id rid = 0;
+ unsigned int sid = 1;
+ unsigned int weight = 0;
+ uint32_t pos = 0;
+ uint32_t rest;
+ grn_id *bp = ii_buffer->block_buf;
+ uint32_t flags = ii_buffer->ii->header->flags;
+ for (rest = ii_buffer->block_pos; rest; bp++, rest--) {
+ grn_id id = *bp;
+ if (id & II_BUFFER_RID_FLAG) {
+ rid = id - II_BUFFER_RID_FLAG;
+ if ((flags & GRN_OBJ_WITH_SECTION) && rest) {
+ sid = *++bp;
+ rest--;
+ }
+ weight = 0;
+ pos = 0;
+ } else if (id & II_BUFFER_WEIGHT_FLAG) {
+ weight = id - II_BUFFER_WEIGHT_FLAG;
+ } else {
+ ii_buffer_counter *counter = &ii_buffer->counters[id - 1];
+ if (counter->last_rid == rid && counter->last_sid == sid) {
+ counter->last_tf++;
+ counter->last_weight += weight;
+ } else {
+ if (counter->last_tf) {
+ uint8_t *p = outbuf + counter->offset_tf;
+ GRN_B_ENC(counter->last_tf - 1, p);
+ counter->offset_tf = p - outbuf;
+ if (flags & GRN_OBJ_WITH_WEIGHT) {
+ p = outbuf + counter->offset_weight;
+ GRN_B_ENC(counter->last_weight, p);
+ counter->offset_weight = p - outbuf;
+ }
+ }
+ {
+ uint8_t *p = outbuf + counter->offset_rid;
+ GRN_B_ENC(rid - counter->last_rid, p);
+ counter->offset_rid = p - outbuf;
+ }
+ if (flags & GRN_OBJ_WITH_SECTION) {
+ uint8_t *p = outbuf + counter->offset_sid;
+ if (counter->last_rid != rid) {
+ GRN_B_ENC(sid - 1, p);
+ } else {
+ GRN_B_ENC(sid - counter->last_sid - 1, p);
+ }
+ counter->offset_sid = p - outbuf;
+ }
+ counter->last_rid = rid;
+ counter->last_sid = sid;
+ counter->last_tf = 1;
+ counter->last_weight = weight;
+ counter->last_pos = 0;
+ }
+ if (flags & GRN_OBJ_WITH_POSITION) {
+ uint8_t *p = outbuf + counter->offset_pos;
+ GRN_B_ENC(pos - counter->last_pos, p);
+ counter->offset_pos = p - outbuf;
+ counter->last_pos = pos;
+ }
+ pos++;
+ }
+ }
+}
+
+static void
+encode_last_tf(grn_ctx *ctx, grn_ii_buffer *ii_buffer, uint8_t *outbuf)
+{
+ ii_buffer_counter *counter = ii_buffer->counters;
+ grn_id tid, tid_max = grn_table_size(ctx, ii_buffer->tmp_lexicon);
+ for (tid = 1; tid <= tid_max; counter++, tid++) {
+ uint8_t *p = outbuf + counter->offset_tf;
+ GRN_B_ENC(counter->last_tf - 1, p);
+ }
+ if ((ii_buffer->ii->header->flags & GRN_OBJ_WITH_WEIGHT)) {
+ for (tid = 1; tid <= tid_max; counter++, tid++) {
+ uint8_t *p = outbuf + counter->offset_weight;
+ GRN_B_ENC(counter->last_weight, p);
+ }
+ }
+}
+
+static void
+grn_ii_buffer_flush(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ size_t encsize;
+ uint8_t *outbuf;
+ ii_buffer_block *block;
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "flushing:%d npostings:%zu",
+ ii_buffer->nblocks, ii_buffer->block_pos);
+ if (!(block = block_new(ctx, ii_buffer))) { return; }
+ if (!(outbuf = allocate_outbuf(ctx, ii_buffer))) { return; }
+ encsize = encode_terms(ctx, ii_buffer, outbuf, block);
+ encode_postings(ctx, ii_buffer, outbuf);
+ encode_last_tf(ctx, ii_buffer, outbuf);
+ {
+ ssize_t r = GRN_WRITE(ii_buffer->tmpfd, outbuf, encsize);
+ if (r != encsize) {
+ ERR(GRN_INPUT_OUTPUT_ERROR, "write returned %" GRN_FMT_LLD " != %" GRN_FMT_LLU,
+ (long long int)r, (unsigned long long int)encsize);
+ return;
+ }
+ ii_buffer->filepos += r;
+ block->tail = ii_buffer->filepos;
+ }
+ GRN_FREE(outbuf);
+ memset(ii_buffer->counters, 0,
+ grn_table_size(ctx, ii_buffer->tmp_lexicon) *
+ sizeof(ii_buffer_counter));
+ grn_obj_close(ctx, ii_buffer->tmp_lexicon);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "flushed: %d encsize:%zu",
+ ii_buffer->nblocks, encsize);
+ ii_buffer->tmp_lexicon = NULL;
+ ii_buffer->nblocks++;
+ ii_buffer->block_pos = 0;
+}
+
+const uint32_t PAT_CACHE_SIZE = 1<<20;
+
+static grn_obj *
+get_tmp_lexicon(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ grn_obj *tmp_lexicon = ii_buffer->tmp_lexicon;
+ if (!tmp_lexicon) {
+ grn_obj *domain = grn_ctx_at(ctx, ii_buffer->lexicon->header.domain);
+ grn_obj *range = grn_ctx_at(ctx, DB_OBJ(ii_buffer->lexicon)->range);
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj_flags flags;
+ grn_table_get_info(ctx, ii_buffer->lexicon, &flags, NULL,
+ &tokenizer, &normalizer, NULL);
+ flags &= ~GRN_OBJ_PERSISTENT;
+ tmp_lexicon = grn_table_create(ctx, NULL, 0, NULL, flags, domain, range);
+ if (tmp_lexicon) {
+ ii_buffer->tmp_lexicon = tmp_lexicon;
+ grn_obj_set_info(ctx, tmp_lexicon,
+ GRN_INFO_DEFAULT_TOKENIZER, tokenizer);
+ grn_obj_set_info(ctx, tmp_lexicon,
+ GRN_INFO_NORMALIZER, normalizer);
+ if ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_PAT_KEY) {
+ grn_pat_cache_enable(ctx, (grn_pat *)tmp_lexicon, PAT_CACHE_SIZE);
+ }
+ }
+ }
+ return tmp_lexicon;
+}
+
+static ii_buffer_counter *
+get_buffer_counter(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_obj *tmp_lexicon, grn_id tid)
+{
+ if (tid > ii_buffer->ncounters) {
+ ii_buffer_counter *counters;
+ uint32_t ncounters =
+ grn_table_size(ctx, tmp_lexicon) + II_BUFFER_NCOUNTERS_MARGIN;
+ counters = GRN_REALLOC(ii_buffer->counters,
+ ncounters * sizeof(ii_buffer_counter));
+ if (!counters) { return NULL; }
+ memset(&counters[ii_buffer->ncounters], 0,
+ (ncounters - ii_buffer->ncounters) * sizeof(ii_buffer_counter));
+ ii_buffer->ncounters = ncounters;
+ ii_buffer->counters = counters;
+ }
+ return &ii_buffer->counters[tid - 1];
+}
+
+static void
+grn_ii_buffer_tokenize(grn_ctx *ctx, grn_ii_buffer *ii_buffer, grn_id rid,
+ unsigned int sid, unsigned int weight,
+ const char *value, uint32_t value_len)
+{
+ if (value_len) {
+ grn_obj *tmp_lexicon;
+ uint32_t est_len = value_len + 2;
+ if (ii_buffer->block_buf_size < ii_buffer->block_pos + est_len) {
+ grn_ii_buffer_flush(ctx, ii_buffer);
+ }
+ if (ii_buffer->block_buf_size < est_len) {
+ grn_id *block_buf = (grn_id *)GRN_REALLOC(ii_buffer->block_buf,
+ est_len * sizeof(grn_id));
+ if (!block_buf) { return; }
+ ii_buffer->block_buf = block_buf;
+ ii_buffer->block_buf_size = est_len;
+ }
+ if ((tmp_lexicon = get_tmp_lexicon(ctx, ii_buffer))) {
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor;
+ grn_id *buffer = ii_buffer->block_buf;
+ uint32_t block_pos = ii_buffer->block_pos;
+ buffer[block_pos++] = rid + II_BUFFER_RID_FLAG;
+ if ((ii_buffer->ii->header->flags & GRN_OBJ_WITH_SECTION)) {
+ buffer[block_pos++] = sid;
+ }
+ if (weight) {
+ buffer[block_pos++] = weight + II_BUFFER_WEIGHT_FLAG;
+ }
+ if ((token_cursor = grn_token_cursor_open(ctx, tmp_lexicon,
+ value, value_len,
+ GRN_TOKEN_ADD, token_flags))) {
+ uint32_t pos;
+ for (pos = 0; !token_cursor->status; pos++) {
+ grn_id tid;
+ if ((tid = grn_token_cursor_next(ctx, token_cursor))) {
+ ii_buffer_counter *counter;
+ counter = get_buffer_counter(ctx, ii_buffer, tmp_lexicon, tid);
+ if (!counter) { return; }
+ buffer[block_pos++] = tid;
+ if (counter->last_rid != rid) {
+ counter->offset_rid += GRN_B_ENC_SIZE(rid - counter->last_rid);
+ counter->last_rid = rid;
+ counter->offset_sid += GRN_B_ENC_SIZE(sid - 1);
+ counter->last_sid = sid;
+ if (counter->last_tf) {
+ counter->offset_tf += GRN_B_ENC_SIZE(counter->last_tf - 1);
+ counter->last_tf = 0;
+ counter->offset_weight += GRN_B_ENC_SIZE(counter->last_weight);
+ counter->last_weight = 0;
+ }
+ counter->last_pos = 0;
+ counter->nrecs++;
+ } else if (counter->last_sid != sid) {
+ counter->offset_rid += GRN_B_ENC_SIZE(0);
+ counter->offset_sid +=
+ GRN_B_ENC_SIZE(sid - counter->last_sid - 1);
+ counter->last_sid = sid;
+ if (counter->last_tf) {
+ counter->offset_tf += GRN_B_ENC_SIZE(counter->last_tf - 1);
+ counter->last_tf = 0;
+ counter->offset_weight += GRN_B_ENC_SIZE(counter->last_weight);
+ counter->last_weight = 0;
+ }
+ counter->last_pos = 0;
+ counter->nrecs++;
+ }
+ counter->offset_pos += GRN_B_ENC_SIZE(pos - counter->last_pos);
+ counter->last_pos = pos;
+ counter->last_tf++;
+ counter->last_weight += weight;
+ counter->nposts++;
+ }
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ ii_buffer->block_pos = block_pos;
+ }
+ }
+}
+
+static void
+grn_ii_buffer_fetch(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ ii_buffer_block *block)
+{
+ if (!block->rest) {
+ if (block->head < block->tail) {
+ size_t bytesize = block->nextsize;
+ if (block->buffersize < block->nextsize) {
+ void *r = GRN_REALLOC(block->buffer, bytesize);
+ if (r) {
+ block->buffer = (uint8_t *)r;
+ block->buffersize = block->nextsize;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "realloc: %" GRN_FMT_LLU,
+ (unsigned long long int)bytesize);
+ return;
+ }
+ }
+ if (lseek(ii_buffer->tmpfd, block->head, SEEK_SET) != block->head) {
+ SERR("lseek");
+ return;
+ }
+ if (read(ii_buffer->tmpfd, block->buffer, bytesize) != bytesize) {
+ SERR("read");
+ return;
+ }
+ block->head += bytesize;
+ block->bufcur = block->buffer;
+ if (block->head >= block->tail) {
+ if (block->head > block->tail) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "fetch error: %jd > %jd", block->head, block->tail);
+ }
+ block->rest = block->nextsize;
+ block->nextsize = 0;
+ } else {
+ block->rest = block->nextsize - sizeof(uint32_t);
+ memcpy(&block->nextsize,
+ &block->buffer[block->rest], sizeof(uint32_t));
+ }
+ }
+ }
+ if (block->rest) {
+ uint8_t *p = block->bufcur;
+ GRN_B_DEC(block->tid, p);
+ GRN_B_DEC(block->nrecs, p);
+ GRN_B_DEC(block->nposts, p);
+ block->rest -= (p - block->bufcur);
+ block->bufcur = p;
+ } else {
+ block->tid = 0;
+ }
+}
+
+static void
+grn_ii_buffer_chunk_flush(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ grn_io_win io_win;
+ uint32_t chunk_number;
+ chunk_new(ctx, ii_buffer->ii, &chunk_number, ii_buffer->packed_len);
+ GRN_LOG(ctx, GRN_LOG_INFO, "chunk:%d, packed_len:%zu",
+ chunk_number, ii_buffer->packed_len);
+ fake_map2(ctx, ii_buffer->ii->chunk, &io_win, ii_buffer->packed_buf,
+ chunk_number, ii_buffer->packed_len);
+ grn_io_win_unmap2(&io_win);
+ ii_buffer->term_buffer->header.chunk = chunk_number;
+ ii_buffer->term_buffer->header.chunk_size = ii_buffer->packed_len;
+ ii_buffer->term_buffer->header.buffer_free =
+ S_SEGMENT - sizeof(buffer_header) -
+ ii_buffer->term_buffer->header.nterms * sizeof(buffer_term);
+ ii_buffer->term_buffer->header.nterms_void = 0;
+ buffer_segment_update(ii_buffer->ii, ii_buffer->lseg, ii_buffer->dseg);
+ ii_buffer->ii->header->total_chunk_size += ii_buffer->packed_len;
+ ii_buffer->total_chunk_size += ii_buffer->packed_len;
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "nterms=%d chunk=%d total=%" GRN_FMT_INT64U "KB",
+ ii_buffer->term_buffer->header.nterms,
+ ii_buffer->term_buffer->header.chunk_size,
+ ii_buffer->ii->header->total_chunk_size >> 10);
+ ii_buffer->term_buffer = NULL;
+ ii_buffer->packed_buf = NULL;
+ ii_buffer->packed_len = 0;
+ ii_buffer->packed_buf_size = 0;
+ ii_buffer->curr_size = 0;
+}
+
+static size_t
+merge_hit_blocks(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ ii_buffer_block *hits[], int nhits)
+{
+ uint64_t nrecs = 0;
+ uint64_t nposts = 0;
+ size_t max_size;
+ uint64_t flags = ii_buffer->ii->header->flags;
+ int i;
+ for (i = 0; i < nhits; i++) {
+ ii_buffer_block *block = hits[i];
+ nrecs += block->nrecs;
+ nposts += block->nposts;
+ }
+ ii_buffer->curr_size += nrecs + nposts;
+ max_size = nrecs * (ii_buffer->ii->n_elements);
+ if (flags & GRN_OBJ_WITH_POSITION) { max_size += nposts - nrecs; }
+ datavec_reset(ctx, ii_buffer->data_vectors,
+ ii_buffer->ii->n_elements, nrecs, max_size);
+ {
+ int i;
+ uint32_t lr = 0;
+ uint64_t spos = 0;
+ uint32_t *ridp, *sidp = NULL, *tfp, *weightp = NULL, *posp = NULL;
+ {
+ int j = 0;
+ ridp = ii_buffer->data_vectors[j++].data;
+ if (flags & GRN_OBJ_WITH_SECTION) {
+ sidp = ii_buffer->data_vectors[j++].data;
+ }
+ tfp = ii_buffer->data_vectors[j++].data;
+ if (flags & GRN_OBJ_WITH_WEIGHT) {
+ weightp = ii_buffer->data_vectors[j++].data;
+ }
+ if (flags & GRN_OBJ_WITH_POSITION) {
+ posp = ii_buffer->data_vectors[j++].data;
+ }
+ }
+ for (i = 0; i < nhits; i++) {
+ ii_buffer_block *block = hits[i];
+ uint8_t *p = block->bufcur;
+ uint32_t n = block->nrecs;
+ if (n) {
+ GRN_B_DEC(*ridp, p);
+ *ridp -= lr;
+ lr += *ridp++;
+ while (--n) {
+ GRN_B_DEC(*ridp, p);
+ lr += *ridp++;
+ }
+ }
+ if ((flags & GRN_OBJ_WITH_SECTION)) {
+ for (n = block->nrecs; n; n--) {
+ GRN_B_DEC(*sidp++, p);
+ }
+ }
+ for (n = block->nrecs; n; n--) {
+ GRN_B_DEC(*tfp++, p);
+ }
+ if ((flags & GRN_OBJ_WITH_WEIGHT)) {
+ for (n = block->nrecs; n; n--) {
+ GRN_B_DEC(*weightp++, p);
+ }
+ }
+ if ((flags & GRN_OBJ_WITH_POSITION)) {
+ for (n = block->nposts; n; n--) {
+ GRN_B_DEC(*posp, p);
+ spos += *posp++;
+ }
+ }
+ block->rest -= (p - block->bufcur);
+ block->bufcur = p;
+ grn_ii_buffer_fetch(ctx, ii_buffer, block);
+ }
+ {
+ int j = 0;
+ uint32_t f_s = (nrecs < 3) ? 0 : USE_P_ENC;
+ uint32_t f_d = ((nrecs < 16) || (nrecs <= (lr >> 8))) ? 0 : USE_P_ENC;
+ ii_buffer->data_vectors[j].data_size = nrecs;
+ ii_buffer->data_vectors[j++].flags = f_d;
+ if ((flags & GRN_OBJ_WITH_SECTION)) {
+ ii_buffer->data_vectors[j].data_size = nrecs;
+ ii_buffer->data_vectors[j++].flags = f_s;
+ }
+ ii_buffer->data_vectors[j].data_size = nrecs;
+ ii_buffer->data_vectors[j++].flags = f_s;
+ if ((flags & GRN_OBJ_WITH_WEIGHT)) {
+ ii_buffer->data_vectors[j].data_size = nrecs;
+ ii_buffer->data_vectors[j++].flags = f_s;
+ }
+ if ((flags & GRN_OBJ_WITH_POSITION)) {
+ uint32_t f_p = (((nposts < 32) ||
+ (nposts <= (spos >> 13))) ? 0 : USE_P_ENC);
+ ii_buffer->data_vectors[j].data_size = nposts;
+ ii_buffer->data_vectors[j++].flags = f_p|ODD;
+ }
+ }
+ }
+ return (max_size + ii_buffer->ii->n_elements) * 4;
+}
+
+static buffer *
+get_term_buffer(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ if (!ii_buffer->term_buffer) {
+ uint32_t lseg;
+ void *term_buffer;
+ for (lseg = 0; lseg < GRN_II_MAX_LSEG; lseg++) {
+ if (ii_buffer->ii->header->binfo[lseg] == NOT_ASSIGNED) { break; }
+ }
+ if (lseg == GRN_II_MAX_LSEG) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "segment allocate failed");
+ return NULL;
+ }
+ ii_buffer->lseg = lseg;
+ ii_buffer->dseg = segment_get(ctx, ii_buffer->ii);
+ GRN_IO_SEG_REF(ii_buffer->ii->seg, ii_buffer->dseg, term_buffer);
+ ii_buffer->term_buffer = (buffer *)term_buffer;
+ }
+ return ii_buffer->term_buffer;
+}
+
+static grn_bool
+try_in_place_packing(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_id tid, ii_buffer_block *hits[], int nhits)
+{
+ if (nhits == 1 && hits[0]->nrecs == 1 && hits[0]->nposts == 1) {
+ grn_id rid;
+ uint32_t sid = 1, tf, pos = 0, weight = 0;
+ ii_buffer_block *block = hits[0];
+ uint8_t *p = block->bufcur;
+ uint32_t flags = ii_buffer->ii->header->flags;
+ GRN_B_DEC(rid, p);
+ if (flags & GRN_OBJ_WITH_SECTION) {
+ GRN_B_DEC(sid, p);
+ sid++;
+ }
+ GRN_B_DEC(tf, p);
+ if (tf != 0) { GRN_LOG(ctx, GRN_LOG_WARNING, "tf=%d", tf); }
+ if (flags & GRN_OBJ_WITH_WEIGHT) { GRN_B_DEC(weight, p); }
+ if (flags & GRN_OBJ_WITH_POSITION) { GRN_B_DEC(pos, p); }
+ if (!weight) {
+ if (flags & GRN_OBJ_WITH_SECTION) {
+ if (rid < 0x100000 && sid < 0x800) {
+ uint32_t *a = array_get(ctx, ii_buffer->ii, tid);
+ a[0] = (rid << 12) + (sid << 1) + 1;
+ a[1] = pos;
+ } else {
+ return GRN_FALSE;
+ }
+ } else {
+ uint32_t *a = array_get(ctx, ii_buffer->ii, tid);
+ a[0] = (rid << 1) + 1;
+ a[1] = pos;
+ }
+ block->rest -= (p - block->bufcur);
+ block->bufcur = p;
+ grn_ii_buffer_fetch(ctx, ii_buffer, block);
+ return GRN_TRUE;
+ }
+ }
+ return GRN_FALSE;
+}
+
+static void
+grn_ii_buffer_merge(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_id tid, ii_buffer_block *hits[], int nhits)
+{
+ if (!try_in_place_packing(ctx, ii_buffer, tid, hits, nhits)) {
+ size_t max_size = merge_hit_blocks(ctx, ii_buffer, hits, nhits);
+ if (ii_buffer->packed_buf &&
+ ii_buffer->packed_buf_size < ii_buffer->packed_len + max_size) {
+ grn_ii_buffer_chunk_flush(ctx, ii_buffer);
+ }
+ if (!ii_buffer->packed_buf) {
+ size_t buf_size = (max_size > II_BUFFER_PACKED_BUF_SIZE)
+ ? max_size : II_BUFFER_PACKED_BUF_SIZE;
+ if ((ii_buffer->packed_buf = GRN_MALLOC(buf_size))) {
+ ii_buffer->packed_buf_size = buf_size;
+ }
+ }
+ {
+ uint16_t nterm;
+ size_t packed_len;
+ buffer_term *bt;
+ uint32_t *a = array_get(ctx, ii_buffer->ii, tid);
+ buffer *term_buffer = get_term_buffer(ctx, ii_buffer);
+ if (!term_buffer) { return; }
+ nterm = term_buffer->header.nterms++;
+ bt = &term_buffer->terms[nterm];
+ a[0] = SEG2POS(ii_buffer->lseg,
+ (sizeof(buffer_header) + sizeof(buffer_term) * nterm));
+ packed_len = grn_p_encv(ctx, ii_buffer->data_vectors,
+ ii_buffer->ii->n_elements,
+ ii_buffer->packed_buf +
+ ii_buffer->packed_len);
+ a[1] = ii_buffer->data_vectors[0].data_size;
+ bt->tid = tid;
+ bt->size_in_buffer = 0;
+ bt->pos_in_buffer = 0;
+ bt->size_in_chunk = packed_len;
+ bt->pos_in_chunk = ii_buffer->packed_len;
+ ii_buffer->packed_len += packed_len;
+ if (((ii_buffer->curr_size * ii_buffer->update_buffer_size) +
+ (ii_buffer->total_size * term_buffer->header.nterms * 16)) >=
+ (ii_buffer->total_size * II_BUFFER_NTERMS_PER_BUFFER * 16)) {
+ grn_ii_buffer_chunk_flush(ctx, ii_buffer);
+ }
+ }
+ }
+}
+
+grn_ii_buffer *
+grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
+ long long unsigned int update_buffer_size)
+{
+ if (ii && ii->lexicon) {
+ grn_ii_buffer *ii_buffer = GRN_MALLOCN(grn_ii_buffer, 1);
+ if (ii_buffer) {
+ ii_buffer->ii = ii;
+ ii_buffer->lexicon = ii->lexicon;
+ ii_buffer->tmp_lexicon = NULL;
+ ii_buffer->nblocks = 0;
+ ii_buffer->blocks = NULL;
+ ii_buffer->ncounters = II_BUFFER_NCOUNTERS_MARGIN;
+ ii_buffer->block_pos = 0;
+ ii_buffer->filepos = 0;
+ ii_buffer->curr_size = 0;
+ ii_buffer->total_size = 0;
+ ii_buffer->update_buffer_size = update_buffer_size;
+ ii_buffer->counters = GRN_CALLOC(ii_buffer->ncounters *
+ sizeof(ii_buffer_counter));
+ ii_buffer->term_buffer = NULL;
+ ii_buffer->packed_buf = NULL;
+ ii_buffer->packed_len = 0;
+ ii_buffer->packed_buf_size = 0;
+ ii_buffer->total_chunk_size = 0;
+ if (ii_buffer->counters) {
+ ii_buffer->block_buf = GRN_MALLOCN(grn_id, II_BUFFER_BLOCK_SIZE);
+ if (ii_buffer->block_buf) {
+ snprintf(ii_buffer->tmpfpath, PATH_MAX,
+ "%sXXXXXX", grn_io_path(ii->seg));
+ ii_buffer->block_buf_size = II_BUFFER_BLOCK_SIZE;
+ ii_buffer->tmpfd = GRN_MKOSTEMP(ii_buffer->tmpfpath,
+ O_WRONLY|O_CREAT|O_TRUNC,
+ S_IRUSR|S_IWUSR);
+ if (ii_buffer->tmpfd != -1) {
+ grn_obj_flags flags;
+ grn_table_get_info(ctx, ii->lexicon, &flags, NULL, NULL, NULL, NULL);
+ if ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_PAT_KEY) {
+ grn_pat_cache_enable(ctx, (grn_pat *)ii->lexicon,
+ PAT_CACHE_SIZE);
+ }
+ return ii_buffer;
+ } else {
+ SERR("mkostemp");
+ }
+ GRN_FREE(ii_buffer->block_buf);
+ }
+ GRN_FREE(ii_buffer->counters);
+ }
+ GRN_FREE(ii_buffer);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "ii or ii->lexicon is NULL");
+ }
+ return NULL;
+}
+
+grn_rc
+grn_ii_buffer_append(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_id rid, unsigned int sid, grn_obj *value)
+{
+ grn_ii_buffer_tokenize(ctx, ii_buffer, rid, sid, 0,
+ GRN_TEXT_VALUE(value), GRN_TEXT_LEN(value));
+ return ctx->rc;
+}
+
+grn_rc
+grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ if (ii_buffer->block_pos) {
+ grn_ii_buffer_flush(ctx, ii_buffer);
+ }
+ if (ii_buffer->tmpfd != -1) {
+ GRN_CLOSE(ii_buffer->tmpfd);
+ }
+ if (ii_buffer->block_buf) {
+ GRN_FREE(ii_buffer->block_buf);
+ ii_buffer->block_buf = NULL;
+ }
+ if (ii_buffer->counters) {
+ GRN_FREE(ii_buffer->counters);
+ ii_buffer->counters = NULL;
+ }
+
+ if (ii_buffer->update_buffer_size &&
+ ii_buffer->update_buffer_size < 20) {
+ if (ii_buffer->update_buffer_size < 10) {
+ ii_buffer->update_buffer_size =
+ ii_buffer->total_size >> (10 - ii_buffer->update_buffer_size);
+ } else {
+ ii_buffer->update_buffer_size =
+ ii_buffer->total_size << (ii_buffer->update_buffer_size - 10);
+ }
+ }
+
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "nblocks=%d, update_buffer_size=%" GRN_FMT_INT64U,
+ ii_buffer->nblocks, ii_buffer->update_buffer_size);
+
+ datavec_init(ctx, ii_buffer->data_vectors, ii_buffer->ii->n_elements, 0, 0);
+#ifdef WIN32
+ ii_buffer->tmpfd = GRN_OPEN(ii_buffer->tmpfpath, O_RDONLY|O_BINARY);
+#else /* WIN32 */
+ ii_buffer->tmpfd = GRN_OPEN(ii_buffer->tmpfpath, O_RDONLY);
+#endif /* WIN32 */
+ if (ii_buffer->tmpfd == -1) {
+ SERR("oepn");
+ return ctx->rc;
+ }
+ {
+ uint32_t i;
+ for (i = 0; i < ii_buffer->nblocks; i++) {
+ grn_ii_buffer_fetch(ctx, ii_buffer, &ii_buffer->blocks[i]);
+ }
+ }
+ {
+ ii_buffer_block **hits;
+ if ((hits = GRN_MALLOCN(ii_buffer_block *, ii_buffer->nblocks))) {
+ grn_id tid;
+ grn_table_cursor *tc;
+ tc = grn_table_cursor_open(ctx, ii_buffer->lexicon,
+ NULL, 0, NULL, 0, 0, -1, II_BUFFER_ORDER);
+ if (tc) {
+ while ((tid = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ int nrests = 0;
+ int nhits = 0;
+ uint32_t i;
+ for (i = 0; i < ii_buffer->nblocks; i++) {
+ if (ii_buffer->blocks[i].tid == tid) {
+ hits[nhits++] = &ii_buffer->blocks[i];
+ }
+ if (ii_buffer->blocks[i].tid) { nrests++; }
+ }
+ if (nhits) { grn_ii_buffer_merge(ctx, ii_buffer, tid, hits, nhits); }
+ if (!nrests) { break; }
+ }
+ if (ii_buffer->packed_len) {
+ grn_ii_buffer_chunk_flush(ctx, ii_buffer);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_FREE(hits);
+ }
+ }
+ datavec_fin(ctx, ii_buffer->data_vectors);
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "tmpfile_size:%jd > total_chunk_size:%" GRN_FMT_INT64U,
+ ii_buffer->filepos, ii_buffer->total_chunk_size);
+ GRN_CLOSE(ii_buffer->tmpfd);
+ unlink(ii_buffer->tmpfpath);
+ ii_buffer->tmpfd = -1;
+ return ctx->rc;
+}
+
+grn_rc
+grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
+{
+ uint32_t i;
+ grn_obj_flags flags;
+ grn_table_get_info(ctx, ii_buffer->ii->lexicon, &flags, NULL, NULL, NULL, NULL);
+ if ((flags & GRN_OBJ_TABLE_TYPE_MASK) == GRN_OBJ_TABLE_PAT_KEY) {
+ grn_pat_cache_disable(ctx, (grn_pat *)ii_buffer->ii->lexicon);
+ }
+ if (ii_buffer->tmp_lexicon) {
+ grn_obj_close(ctx, ii_buffer->tmp_lexicon);
+ }
+ if (ii_buffer->tmpfd != -1) {
+ GRN_CLOSE(ii_buffer->tmpfd);
+ unlink(ii_buffer->tmpfpath);
+ }
+ if (ii_buffer->block_buf) {
+ GRN_FREE(ii_buffer->block_buf);
+ }
+ if (ii_buffer->counters) {
+ GRN_FREE(ii_buffer->counters);
+ }
+ if (ii_buffer->blocks) {
+ for (i = 0; i < ii_buffer->nblocks; i++) {
+ if (ii_buffer->blocks[i].buffer) {
+ GRN_FREE(ii_buffer->blocks[i].buffer);
+ }
+ }
+ GRN_FREE(ii_buffer->blocks);
+ }
+ GRN_FREE(ii_buffer);
+ return ctx->rc;
+}
+
+static void
+grn_ii_buffer_parse(grn_ctx *ctx, grn_ii_buffer *ii_buffer,
+ grn_obj *target, int ncols, grn_obj **cols)
+{
+ grn_table_cursor *tc;
+ if ((tc = grn_table_cursor_open(ctx, target,
+ NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_ID))) {
+ grn_id rid;
+ grn_obj rv;
+ GRN_TEXT_INIT(&rv, 0);
+ while ((rid = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ int sid;
+ grn_obj **col;
+ for (sid = 1, col = cols; sid <= ncols; sid++, col++) {
+ grn_obj_reinit_for(ctx, &rv, *col);
+ if (GRN_OBJ_TABLEP(*col)) {
+ grn_table_get_key2(ctx, *col, rid, &rv);
+ } else {
+ grn_obj_get_value(ctx, *col, rid, &rv);
+ }
+ switch (rv.header.type) {
+ case GRN_BULK :
+ grn_ii_buffer_tokenize(ctx, ii_buffer, rid, sid, 0,
+ GRN_TEXT_VALUE(&rv), GRN_TEXT_LEN(&rv));
+ break;
+ case GRN_VECTOR :
+ if (rv.u.v.body) {
+ int i;
+ int n_sections = rv.u.v.n_sections;
+ grn_section *sections = rv.u.v.sections;
+ const char *head = GRN_BULK_HEAD(rv.u.v.body);
+ for (i = 0; i < n_sections; i++) {
+ grn_section *section = sections + i;
+ if (section->length == 0) {
+ continue;
+ }
+ grn_ii_buffer_tokenize(ctx, ii_buffer, rid,
+ sid, section->weight,
+ head + section->offset, section->length);
+ }
+ }
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "[index] invalid object assigned as value");
+ break;
+ }
+ }
+ }
+ GRN_OBJ_FIN(ctx, &rv);
+ grn_table_cursor_close(ctx, tc);
+ }
+}
+
+grn_rc
+grn_ii_build(grn_ctx *ctx, grn_ii *ii, uint64_t sparsity)
+{
+ grn_ii_buffer *ii_buffer = grn_ii_buffer_open(ctx, ii, sparsity);
+ if (ii_buffer) {
+ grn_id *s = ii->obj.source;
+ if ((ii->obj.source_size) && s) {
+ int ncols = ii->obj.source_size / sizeof(grn_id);
+ grn_obj **cols = GRN_MALLOCN(grn_obj *, ncols);
+ if (cols) {
+ int i;
+ for (i = 0; i < ncols; i++) {
+ if (!(cols[i] = grn_ctx_at(ctx, s[i]))) { break; }
+ }
+ if (i == ncols) {
+ grn_obj *target = cols[0];
+ if (!GRN_OBJ_TABLEP(target)) {
+ target = grn_ctx_at(ctx, target->header.domain);
+ }
+ if (target) {
+ grn_ii_buffer_parse(ctx, ii_buffer, target, ncols, cols);
+ grn_ii_buffer_commit(ctx, ii_buffer);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "failed to resolve the target");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "failed to resolve a column (%d)", i);
+ }
+ GRN_FREE(cols);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "ii->obj.source is void");
+ }
+ grn_ii_buffer_close(ctx, ii_buffer);
+ }
+ return ctx->rc;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/ii.h b/storage/mroonga/vendor/groonga/lib/ii.h
new file mode 100644
index 00000000000..877200fff7c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/ii.h
@@ -0,0 +1,196 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_II_H
+#define GRN_II_H
+
+/* "ii" is for inverted index */
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_HASH_H
+#include "hash.h"
+#endif /* GRN_HASH_H */
+
+#ifndef GRN_IO_H
+#include "io.h"
+#endif /* GRN_IO_H */
+
+#ifndef GRN_STORE_H
+#include "store.h"
+#endif /* GRN_STORE_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _grn_ii {
+ grn_db_obj obj;
+ grn_io *seg;
+ grn_io *chunk;
+ grn_obj *lexicon;
+ grn_obj_flags lflags;
+ grn_encoding encoding;
+ uint32_t n_elements;
+ struct grn_ii_header *header;
+};
+
+#define GRN_II_BGQSIZE 16
+#define GRN_II_MAX_LSEG 0x10000
+#define GRN_II_W_TOTAL_CHUNK 40
+#define GRN_II_W_CHUNK 22
+#define GRN_II_W_LEAST_CHUNK (GRN_II_W_TOTAL_CHUNK - 32)
+#define GRN_II_MAX_CHUNK (1 << (GRN_II_W_TOTAL_CHUNK - GRN_II_W_CHUNK))
+#define GRN_II_N_CHUNK_VARIATION (GRN_II_W_CHUNK - GRN_II_W_LEAST_CHUNK)
+
+struct grn_ii_header {
+ uint64_t total_chunk_size;
+ uint64_t bmax;
+ uint32_t flags;
+ uint32_t amax;
+ uint32_t smax;
+ uint32_t param1;
+ uint32_t param2;
+ uint32_t pnext;
+ uint32_t bgqhead;
+ uint32_t bgqtail;
+ uint32_t bgqbody[GRN_II_BGQSIZE];
+ uint32_t reserved[288];
+ uint32_t ainfo[GRN_II_MAX_LSEG];
+ uint32_t binfo[GRN_II_MAX_LSEG];
+ uint32_t free_chunks[GRN_II_N_CHUNK_VARIATION + 1];
+ uint32_t garbages[GRN_II_N_CHUNK_VARIATION + 1];
+ uint32_t ngarbages[GRN_II_N_CHUNK_VARIATION + 1];
+ uint8_t chunks[GRN_II_MAX_CHUNK >> 3];
+};
+
+struct _grn_ii_pos {
+ struct _grn_ii_pos *next;
+ uint32_t pos;
+};
+
+struct _grn_ii_updspec {
+ uint32_t rid;
+ uint32_t sid;
+ int32_t weight;
+ int32_t tf; /* number of postings successfully stored to index */
+ int32_t atf; /* actual number of postings */
+ int32_t offset;
+ struct _grn_ii_pos *pos;
+ struct _grn_ii_pos *tail;
+ /* grn_vgram_vnode *vnodes; */
+};
+
+typedef struct _grn_ii_updspec grn_ii_updspec;
+
+GRN_API grn_ii *grn_ii_create(grn_ctx *ctx, const char *path, grn_obj *lexicon,
+ uint32_t flags);
+GRN_API grn_ii *grn_ii_open(grn_ctx *ctx, const char *path, grn_obj *lexicon);
+GRN_API grn_rc grn_ii_close(grn_ctx *ctx, grn_ii *ii);
+GRN_API grn_rc grn_ii_remove(grn_ctx *ctx, const char *path);
+grn_rc grn_ii_info(grn_ctx *ctx, grn_ii *ii, uint64_t *seg_size, uint64_t *chunk_size);
+grn_rc grn_ii_update_one(grn_ctx *ctx, grn_ii *ii, uint32_t key, grn_ii_updspec *u,
+ grn_hash *h);
+grn_rc grn_ii_delete_one(grn_ctx *ctx, grn_ii *ii, uint32_t key, grn_ii_updspec *u,
+ grn_hash *h);
+grn_ii_updspec *grn_ii_updspec_open(grn_ctx *ctx, uint32_t rid, uint32_t sid);
+grn_rc grn_ii_updspec_close(grn_ctx *ctx, grn_ii_updspec *u);
+grn_rc grn_ii_updspec_add(grn_ctx *ctx, grn_ii_updspec *u, int pos, int32_t weight);
+int grn_ii_updspec_cmp(grn_ii_updspec *a, grn_ii_updspec *b);
+
+uint32_t grn_ii_estimate_size(grn_ctx *ctx, grn_ii *ii, uint32_t key);
+
+void grn_ii_expire(grn_ctx *ctx, grn_ii *ii);
+
+typedef struct {
+ grn_id rid;
+ uint32_t sid;
+ uint32_t pos;
+ uint32_t tf;
+ uint32_t weight;
+ uint32_t rest;
+} grn_ii_posting;
+
+typedef struct _grn_ii_cursor grn_ii_cursor;
+
+GRN_API grn_rc grn_ii_posting_add(grn_ctx *ctx, grn_ii_posting *pos,
+ grn_hash *s, grn_operator op);
+
+GRN_API grn_ii_cursor *grn_ii_cursor_open(grn_ctx *ctx, grn_ii *ii, grn_id tid,
+ grn_id min, grn_id max, int nelements, int flags);
+grn_ii_cursor *grn_ii_cursor_openv1(grn_ii *ii, uint32_t key);
+grn_rc grn_ii_cursor_openv2(grn_ii_cursor **cursors, int ncursors);
+GRN_API grn_ii_posting *grn_ii_cursor_next(grn_ctx *ctx, grn_ii_cursor *c);
+grn_ii_posting *grn_ii_cursor_next_pos(grn_ctx *ctx, grn_ii_cursor *c);
+GRN_API grn_rc grn_ii_cursor_close(grn_ctx *ctx, grn_ii_cursor *c);
+
+uint32_t grn_ii_max_section(grn_ii *ii);
+
+int grn_ii_check(grn_ii *ii);
+const char *grn_ii_path(grn_ii *ii);
+grn_obj *grn_ii_lexicon(grn_ii *ii);
+
+/*
+grn_rc grn_ii_upd(grn_ctx *ctx, grn_ii *ii, grn_id rid, grn_vgram *vgram,
+ const char *oldvalue, unsigned int oldvalue_len,
+ const char *newvalue, unsigned int newvalue_len);
+grn_rc grn_ii_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, grn_vgram *vgram,
+ unsigned int section,
+ grn_values *oldvalues, grn_values *newvalues);
+*/
+
+typedef struct _grn_select_optarg grn_select_optarg;
+
+struct _grn_select_optarg {
+ grn_operator mode;
+ int similarity_threshold;
+ int max_interval;
+ int *weight_vector;
+ int vector_size;
+ int (*func)(grn_ctx *, grn_hash *, const void *, int, void *);
+ void *func_arg;
+ int max_size;
+};
+
+GRN_API grn_rc grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id id,
+ unsigned int section, grn_obj *oldvalue,
+ grn_obj *newvalue, grn_obj *posting);
+grn_rc grn_ii_term_extract(grn_ctx *ctx, grn_ii *ii, const char *string,
+ unsigned int string_len, grn_hash *s,
+ grn_operator op, grn_select_optarg *optarg);
+grn_rc grn_ii_similar_search(grn_ctx *ctx, grn_ii *ii, const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_select_optarg *optarg);
+GRN_API grn_rc grn_ii_select(grn_ctx *ctx, grn_ii *ii, const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_select_optarg *optarg);
+grn_rc grn_ii_sel(grn_ctx *ctx, grn_ii *ii, const char *string, unsigned int string_len,
+ grn_hash *s, grn_operator op, grn_search_optarg *optarg);
+
+void grn_ii_resolve_sel_and(grn_ctx *ctx, grn_hash *s, grn_operator op);
+
+grn_rc grn_ii_at(grn_ctx *ctx, grn_ii *ii, grn_id id, grn_hash *s, grn_operator op);
+
+void grn_ii_inspect_elements(grn_ctx *ctx, grn_ii *ii, grn_obj *buf);
+void grn_ii_cursor_inspect(grn_ctx *ctx, grn_ii_cursor *c, grn_obj *buf);
+
+grn_rc grn_ii_build(grn_ctx *ctx, grn_ii *ii, uint64_t sparsity);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_II_H */
diff --git a/storage/mroonga/vendor/groonga/lib/io.c b/storage/mroonga/vendor/groonga/lib/io.c
new file mode 100644
index 00000000000..067832ee77b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/io.c
@@ -0,0 +1,1801 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "groonga_in.h"
+
+#include <stdio.h>
+
+#ifndef __USE_GNU
+#define __USE_GNU /* O_DIRECT */
+#endif /* __USE_GNU */
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "ctx.h"
+#include "io.h"
+#include "plugin_in.h"
+#include "hash.h"
+#include "ctx_impl.h"
+
+#define GRN_IO_IDSTR "GROONGA:IO:00001"
+
+#ifndef O_BINARY
+# ifdef _O_BINARY
+# define O_BINARY _O_BINARY
+# else
+# define O_BINARY 0
+# endif
+#endif
+
+typedef struct _grn_io_fileinfo {
+#ifdef WIN32
+ HANDLE fh;
+ HANDLE fmo;
+ grn_critical_section cs;
+#else /* WIN32 */
+ int fd;
+ dev_t dev;
+ ino_t inode;
+#endif /* WIN32 */
+} fileinfo;
+
+#define IO_HEADER_SIZE 64
+
+inline static grn_rc grn_open(grn_ctx *ctx, fileinfo *fi, const char *path, int flags, size_t maxsize);
+inline static void grn_fileinfo_init(fileinfo *fis, int nfis);
+inline static int grn_opened(fileinfo *fi);
+inline static grn_rc grn_close(grn_ctx *ctx, fileinfo *fi);
+#if defined(WIN32) && defined(WIN32_FMO_EACH)
+inline static void * grn_mmap(grn_ctx *ctx, HANDLE *fmo, fileinfo *fi,
+ off_t offset, size_t length);
+inline static int grn_munmap(grn_ctx *ctx, HANDLE *fmo, void *start, size_t length);
+#define GRN_MMAP(ctx,fmo,fi,offset,length)\
+ (grn_mmap((ctx), (fmo), (fi), (offset), (length)))
+#define GRN_MUNMAP(ctx,fmo,start,length) (grn_munmap((ctx), (fmo), (start), (length)))
+#else /* defined(WIN32) && defined(WIN32_FMO_EACH) */
+inline static void * grn_mmap(grn_ctx *ctx, fileinfo *fi, off_t offset, size_t length);
+inline static int grn_munmap(grn_ctx *ctx, void *start, size_t length);
+#define GRN_MUNMAP(ctx,fmo,start,length) (grn_munmap((ctx), (start), (length)))
+#ifdef USE_FAIL_MALLOC
+inline static void * grn_fail_mmap(grn_ctx *ctx, fileinfo *fi,
+ off_t offset, size_t length,
+ const char* file, int line, const char *func);
+#define GRN_MMAP(ctx,fmo,fi,offset,length) \
+ (grn_fail_mmap((ctx), (fi), (offset), (length), __FILE__, __LINE__, __FUNCTION__))
+#else /* USE_FAIL_MALLOC */
+#define GRN_MMAP(ctx,fmo,fi,offset,length) (grn_mmap((ctx), (fi), (offset), (length)))
+#endif /* USE_FAIL_MALLOC */
+#endif /* defined(WIN32) && defined(WIN32_FMO_EACH) */
+inline static int grn_msync(grn_ctx *ctx, void *start, size_t length);
+inline static grn_rc grn_pread(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset);
+inline static grn_rc grn_pwrite(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset);
+
+grn_rc
+grn_io_init(void)
+{
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_io_fin(void)
+{
+ return GRN_SUCCESS;
+}
+
+grn_io *
+grn_io_create_tmp(uint32_t header_size, uint32_t segment_size,
+ uint32_t max_segment, grn_io_mode mode, uint32_t flags)
+{
+ grn_io *io;
+ unsigned int b;
+ uint32_t total_header_size;
+ struct _grn_io_header *header;
+ total_header_size = IO_HEADER_SIZE + header_size;
+ b = (total_header_size + grn_pagesize - 1) & ~(grn_pagesize - 1);
+ if ((header = (struct _grn_io_header *)GRN_MMAP(&grn_gctx, NULL, NULL, 0, b))) {
+ header->header_size = header_size;
+ header->segment_size = segment_size;
+ header->max_segment = max_segment;
+ header->n_arrays = 0;
+ header->flags = flags;
+ header->lock = 0;
+ memcpy(header->idstr, GRN_IO_IDSTR, 16);
+ if ((io = GRN_GMALLOCN(grn_io, 1))) {
+ grn_io_mapinfo *maps = NULL;
+ if (((maps = GRN_GMALLOCN(grn_io_mapinfo, max_segment)) &&
+ memset(maps, 0, sizeof(grn_io_mapinfo) * max_segment))) {
+ io->header = header;
+ io->user_header = (((byte *) header) + IO_HEADER_SIZE);
+ io->maps = maps;
+ io->base = b;
+ io->base_seg = 0;
+ io->mode = mode;
+ io->header->curr_size = b;
+ io->fis = NULL;
+ io->ainfo = NULL;
+ io->max_map_seg = 0;
+ io->nmaps = 0;
+ io->count = 0;
+ io->flags = GRN_IO_TEMPORARY;
+ io->lock = &header->lock;
+ io->path[0] = '\0';
+ return io;
+ }
+ GRN_GFREE(io);
+ }
+ GRN_MUNMAP(&grn_gctx, NULL, header, b);
+ }
+ return NULL;
+}
+
+static void
+grn_io_register(grn_io *io)
+{
+ if (io->fis && (io->flags & (GRN_IO_EXPIRE_GTICK|GRN_IO_EXPIRE_SEGMENT))) {
+ grn_bool succeeded = GRN_FALSE;
+ CRITICAL_SECTION_ENTER(grn_glock);
+ if (grn_gctx.impl && grn_gctx.impl->ios &&
+ grn_hash_add(&grn_gctx, grn_gctx.impl->ios, io->path, strlen(io->path),
+ (void **)&io, NULL)) {
+ succeeded = GRN_TRUE;
+ }
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ if (!succeeded) {
+ GRN_LOG(&grn_gctx, GRN_LOG_WARNING,
+ "grn_io_register(%s) failed", io->path);
+ }
+ }
+}
+
+static void
+grn_io_unregister(grn_io *io)
+{
+ if (io->fis && (io->flags & (GRN_IO_EXPIRE_GTICK|GRN_IO_EXPIRE_SEGMENT))) {
+ grn_bool succeeded = GRN_FALSE;
+ CRITICAL_SECTION_ENTER(grn_glock);
+ if (grn_gctx.impl && grn_gctx.impl->ios) {
+ grn_hash_delete(&grn_gctx, grn_gctx.impl->ios,
+ io->path, strlen(io->path), NULL);
+ succeeded = GRN_TRUE;
+ }
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ if (!succeeded) {
+ GRN_LOG(&grn_gctx, GRN_LOG_WARNING,
+ "grn_io_unregister(%s) failed", io->path);
+ }
+ }
+}
+
+grn_io *
+grn_io_create(grn_ctx *ctx, const char *path, uint32_t header_size, uint32_t segment_size,
+ uint32_t max_segment, grn_io_mode mode, uint32_t flags)
+{
+ grn_io *io;
+ fileinfo *fis;
+ unsigned int b, max_nfiles;
+ uint32_t bs, total_header_size;
+ struct _grn_io_header *header;
+ if (!path) {
+ return grn_io_create_tmp(header_size, segment_size, max_segment, mode, flags);
+ }
+ if (!*path || (strlen(path) > PATH_MAX - 4)) { return NULL; }
+ total_header_size = IO_HEADER_SIZE + header_size;
+ b = (total_header_size + grn_pagesize - 1) & ~(grn_pagesize - 1);
+ bs = (b + segment_size - 1) / segment_size;
+ max_nfiles = (unsigned int)(
+ ((uint64_t)segment_size * (max_segment + bs) + GRN_IO_FILE_SIZE - 1)
+ / GRN_IO_FILE_SIZE);
+ if ((fis = GRN_GMALLOCN(fileinfo, max_nfiles))) {
+ grn_fileinfo_init(fis, max_nfiles);
+ if (!grn_open(ctx, fis, path, O_RDWR|O_CREAT|O_EXCL, GRN_IO_FILE_SIZE)) {
+ if ((header = (struct _grn_io_header *)GRN_MMAP(&grn_gctx, &fis->fmo, fis, 0, b))) {
+ header->header_size = header_size;
+ header->segment_size = segment_size;
+ header->max_segment = max_segment;
+ header->n_arrays = 0;
+ header->flags = flags;
+ header->lock = 0;
+ memcpy(header->idstr, GRN_IO_IDSTR, 16);
+ grn_msync(ctx, header, b);
+ if ((io = GRN_GMALLOCN(grn_io, 1))) {
+ grn_io_mapinfo *maps = NULL;
+ if (((maps = GRN_GMALLOCN(grn_io_mapinfo, max_segment)) &&
+ memset(maps, 0, sizeof(grn_io_mapinfo) * max_segment))) {
+ strncpy(io->path, path, PATH_MAX);
+ io->header = header;
+ io->user_header = (((byte *) header) + IO_HEADER_SIZE);
+ io->maps = maps;
+ io->base = b;
+ io->base_seg = bs;
+ io->mode = mode;
+ io->header->curr_size = b;
+ io->fis = fis;
+ io->ainfo = NULL;
+ io->max_map_seg = 0;
+ io->nmaps = 0;
+ io->count = 0;
+ io->flags = flags;
+ io->lock = &header->lock;
+ grn_io_register(io);
+ return io;
+ }
+ GRN_GFREE(io);
+ }
+ GRN_MUNMAP(&grn_gctx, &fis->fmo, header, b);
+ }
+ grn_close(ctx, fis);
+ }
+ GRN_GFREE(fis);
+ }
+ return NULL;
+}
+
+static grn_rc
+array_init_(grn_io *io, int n_arrays, size_t hsize, size_t msize)
+{
+ int i;
+ uint32_t ws;
+ byte *hp, *mp;
+ grn_io_array_spec *array_specs = (grn_io_array_spec *)io->user_header;
+ hp = io->user_header;
+ if (!(mp = GRN_GCALLOC(msize))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ io->ainfo = (grn_io_array_info *)mp;
+ hp += sizeof(grn_io_array_spec) * n_arrays;
+ mp += sizeof(grn_io_array_info) * n_arrays;
+ for (ws = 0; (1 << ws) < io->header->segment_size; ws++);
+ for (i = 0; i < n_arrays; i++) {
+ uint32_t we = ws - array_specs[i].w_of_element;
+ io->ainfo[i].w_of_elm_in_a_segment = we;
+ io->ainfo[i].elm_mask_in_a_segment = (1 << we) - 1;
+ io->ainfo[i].max_n_segments = array_specs[i].max_n_segments;
+ io->ainfo[i].element_size = 1 << array_specs[i].w_of_element;
+ io->ainfo[i].segments = (uint32_t *)hp;
+ io->ainfo[i].addrs = (void **)mp;
+ hp += sizeof(uint32_t) * array_specs[i].max_n_segments;
+ mp += sizeof(void *) * array_specs[i].max_n_segments;
+ }
+ io->user_header += hsize;
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+array_init(grn_io *io, int n_arrays)
+{
+ if (n_arrays) {
+ int i;
+ grn_io_array_spec *array_specs = (grn_io_array_spec *)io->user_header;
+ size_t hsize = sizeof(grn_io_array_spec) * n_arrays;
+ size_t msize = sizeof(grn_io_array_info) * n_arrays;
+ for (i = 0; i < n_arrays; i++) {
+ hsize += sizeof(uint32_t) * array_specs[i].max_n_segments;
+ msize += sizeof(void *) * array_specs[i].max_n_segments;
+ }
+ return array_init_(io, n_arrays, hsize, msize);
+ }
+ return GRN_SUCCESS;
+}
+
+grn_io *
+grn_io_create_with_array(grn_ctx *ctx, const char *path,
+ uint32_t header_size, uint32_t segment_size,
+ grn_io_mode mode, int n_arrays, grn_io_array_spec *array_specs)
+{
+ if (n_arrays) {
+ int i;
+ grn_io *io;
+ byte *hp;
+ uint32_t nsegs = 0;
+ size_t hsize = sizeof(grn_io_array_spec) * n_arrays;
+ size_t msize = sizeof(grn_io_array_info) * n_arrays;
+ for (i = 0; i < n_arrays; i++) {
+ nsegs += array_specs[i].max_n_segments;
+ hsize += sizeof(uint32_t) * array_specs[i].max_n_segments;
+ msize += sizeof(void *) * array_specs[i].max_n_segments;
+ }
+ if ((io = grn_io_create(ctx, path, header_size + hsize,
+ segment_size, nsegs, mode, GRN_IO_EXPIRE_GTICK))) {
+ hp = io->user_header;
+ memcpy(hp, array_specs, sizeof(grn_io_array_spec) * n_arrays);
+ io->header->n_arrays = n_arrays;
+ io->header->segment_tail = 1;
+ if (!array_init_(io, n_arrays, hsize, msize)) {
+ return io;
+ }
+ ERR(GRN_NO_MEMORY_AVAILABLE, "grn_io_create_with_array failed");
+ grn_io_close(ctx, io);
+ }
+ }
+ return NULL;
+}
+
+inline static uint32_t
+segment_alloc(grn_io *io)
+{
+ uint32_t n, s;
+ grn_io_array_info *ai;
+ if (io->header->segment_tail) {
+ if (io->header->segment_tail > io->header->max_segment) {
+ s = 0;
+ } else {
+ s = io->header->segment_tail++;
+ }
+ } else {
+ char *used = GRN_GCALLOC(io->header->max_segment + 1);
+ if (!used) { return 0; }
+ for (n = io->header->n_arrays, ai = io->ainfo; n; n--, ai++) {
+ for (s = 0; s < ai->max_n_segments; s++) {
+ used[ai->segments[s]] = 1;
+ }
+ }
+ for (s = 1; ; s++) {
+ if (s > io->header->max_segment) {
+ io->header->segment_tail = s;
+ s = 0;
+ break;
+ }
+ if (!used[s]) {
+ io->header->segment_tail = s + 1;
+ break;
+ }
+ }
+ GRN_GFREE(used);
+ }
+ return s;
+}
+
+void
+grn_io_segment_alloc(grn_ctx *ctx, grn_io *io, grn_io_array_info *ai, uint32_t lseg, int *flags, void **p)
+{
+ uint32_t *sp = &ai->segments[lseg];
+ if (!*sp) {
+ if ((*flags & GRN_TABLE_ADD)) {
+ if ((*sp = segment_alloc(io))) {
+ *flags |= GRN_TABLE_ADDED;
+ }
+ }
+ }
+ if (*sp) {
+ uint32_t pseg = *sp - 1;
+ GRN_IO_SEG_REF(io, pseg, *p);
+ if (*p) { GRN_IO_SEG_UNREF(io, pseg); };
+ }
+}
+
+void *
+grn_io_array_at(grn_ctx *ctx, grn_io *io, uint32_t array, off_t offset, int *flags)
+{
+ void *res;
+ GRN_IO_ARRAY_AT(io,array,offset,flags,res);
+ return res;
+}
+
+uint32_t
+grn_io_detect_type(grn_ctx *ctx, const char *path)
+{
+ struct _grn_io_header h;
+ uint32_t res = 0;
+ int fd = GRN_OPEN(path, O_RDWR | O_BINARY);
+ if (fd != -1) {
+ struct stat s;
+ if (fstat(fd, &s) != -1 && s.st_size >= sizeof(struct _grn_io_header)) {
+ if (read(fd, &h, sizeof(struct _grn_io_header)) == sizeof(struct _grn_io_header)) {
+ if (!memcmp(h.idstr, GRN_IO_IDSTR, 16)) {
+ res = h.type;
+ } else {
+ ERR(GRN_INCOMPATIBLE_FILE_FORMAT, "incompatible file format");
+ }
+ } else {
+ SERR(path);
+ }
+ } else {
+ ERR(GRN_INVALID_FORMAT, "grn_io_detect_type failed");
+ }
+ GRN_CLOSE(fd);
+ } else {
+ SERR(path);
+ }
+ return res;
+}
+
+grn_io *
+grn_io_open(grn_ctx *ctx, const char *path, grn_io_mode mode)
+{
+ grn_io *io;
+ struct stat s;
+ fileinfo *fis;
+ uint32_t flags = 0;
+ unsigned int b, max_nfiles;
+ uint32_t total_header_size;
+ uint32_t header_size = 0, segment_size = 0, max_segment = 0, bs;
+ if (!path || !*path || (strlen(path) > PATH_MAX - 4)) { return NULL; }
+ {
+ struct _grn_io_header h;
+ int fd = GRN_OPEN(path, O_RDWR | O_BINARY);
+ if (fd == -1) { SERR(path); return NULL; }
+ if (fstat(fd, &s) != -1 && s.st_size >= sizeof(struct _grn_io_header)) {
+ if (read(fd, &h, sizeof(struct _grn_io_header)) == sizeof(struct _grn_io_header)) {
+ if (!memcmp(h.idstr, GRN_IO_IDSTR, 16)) {
+ header_size = h.header_size;
+ segment_size = h.segment_size;
+ max_segment = h.max_segment;
+ flags = h.flags;
+ } else {
+ ERR(GRN_INCOMPATIBLE_FILE_FORMAT, "incompatible file format");
+ }
+ }
+ }
+ GRN_CLOSE(fd);
+ if (!segment_size) { return NULL; }
+ }
+ total_header_size = IO_HEADER_SIZE + header_size;
+ b = (total_header_size + grn_pagesize - 1) & ~(grn_pagesize - 1);
+ bs = (b + segment_size - 1) / segment_size;
+ max_nfiles = (unsigned int)(
+ ((uint64_t)segment_size * (max_segment + bs) + GRN_IO_FILE_SIZE - 1)
+ / GRN_IO_FILE_SIZE);
+ if (!(fis = GRN_GMALLOCN(fileinfo, max_nfiles))) { return NULL; }
+ grn_fileinfo_init(fis, max_nfiles);
+ if (!grn_open(ctx, fis, path, O_RDWR, GRN_IO_FILE_SIZE)) {
+ struct _grn_io_header *header;
+ if ((header = GRN_MMAP(&grn_gctx, &fis->fmo, fis, 0, b))) {
+ if ((io = GRN_GMALLOC(sizeof(grn_io)))) {
+ grn_io_mapinfo *maps = NULL;
+ if ((maps = GRN_GCALLOC(sizeof(grn_io_mapinfo) * max_segment))) {
+ strncpy(io->path, path, PATH_MAX);
+ io->header = header;
+ io->user_header = (((byte *) header) + IO_HEADER_SIZE);
+ {
+ io->maps = maps;
+ io->base = b;
+ io->base_seg = bs;
+ io->mode = mode;
+ io->fis = fis;
+ io->ainfo = NULL;
+ io->max_map_seg = 0;
+ io->nmaps = 0;
+ io->count = 0;
+ io->flags = header->flags;
+ io->lock = &header->lock;
+ if (!array_init(io, io->header->n_arrays)) {
+ grn_io_register(io);
+ return io;
+ }
+ }
+ if (io->maps) { GRN_GFREE(io->maps); }
+ }
+ GRN_GFREE(io);
+ }
+ GRN_MUNMAP(&grn_gctx, &fis->fmo, header, b);
+ }
+ grn_close(ctx, fis);
+ }
+ GRN_GFREE(fis);
+ return NULL;
+}
+
+grn_rc
+grn_io_close(grn_ctx *ctx, grn_io *io)
+{
+ int i;
+ grn_io_mapinfo *mi;
+ fileinfo *fi;
+ uint32_t bs = io->base_seg;
+ uint32_t max_segment = io->header->segment_tail
+ ? io->header->segment_tail : io->header->max_segment;
+ uint32_t segment_size = io->header->segment_size;
+ unsigned int max_nfiles = (unsigned int)(
+ ((uint64_t)segment_size * (max_segment + bs) + GRN_IO_FILE_SIZE - 1)
+ / GRN_IO_FILE_SIZE);
+ grn_io_unregister(io);
+ if (io->ainfo) { GRN_GFREE(io->ainfo); }
+ if (io->maps) {
+ for (mi = io->maps, i = max_segment; i; mi++, i--) {
+ if (mi->map) {
+ /* if (atomic_read(mi->nref)) { return STILL_IN_USE ; } */
+#ifdef WIN32
+ if ((io->flags & GRN_IO_TEMPORARY)) {
+ GRN_GFREE(mi->map);
+ } else
+#endif /* WIN32 */
+ GRN_MUNMAP(&grn_gctx, &mi->fmo, mi->map, segment_size);
+ }
+ }
+ GRN_GFREE(io->maps);
+ }
+#ifdef WIN32
+ if ((io->flags & GRN_IO_TEMPORARY)) {
+ GRN_GFREE(io->header);
+ } else
+#endif /* WIN32 */
+ GRN_MUNMAP(&grn_gctx, &io->fis->fmo, io->header, io->base);
+ if (io->fis) {
+ for (fi = io->fis, i = max_nfiles; i; fi++, i--) { grn_close(ctx, fi); }
+ GRN_GFREE(io->fis);
+ }
+ GRN_GFREE(io);
+ return GRN_SUCCESS;
+}
+
+uint32_t
+grn_io_base_seg(grn_io *io)
+{
+ return io->base_seg;
+}
+
+const char *
+grn_io_path(grn_io *io)
+{
+ return io->path;
+}
+
+void *
+grn_io_header(grn_io *io)
+{
+ return io->user_header;
+}
+
+grn_rc
+grn_io_set_type(grn_io *io, uint32_t type)
+{
+ if (!io || !io->header) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ io->header->type = type;
+ return GRN_SUCCESS;
+}
+
+uint32_t
+grn_io_get_type(grn_io *io)
+{
+ if (!io || !io->header) { return GRN_VOID; }
+ return io->header->type;
+}
+
+inline static void
+gen_pathname(const char *path, char *buffer, int fno)
+{
+ size_t len = strlen(path);
+ memcpy(buffer, path, len);
+ if (fno) {
+ buffer[len] = '.';
+ grn_itoh(fno, buffer + len + 1, 3);
+ buffer[len + 4] = '\0';
+ } else {
+ buffer[len] = '\0';
+ }
+}
+
+grn_rc
+grn_io_size(grn_ctx *ctx, grn_io *io, uint64_t *size)
+{
+ int fno;
+ struct stat s;
+ uint64_t tsize = 0;
+ char buffer[PATH_MAX];
+ uint32_t nfiles;
+ if (io->header->curr_size) {
+ nfiles = (uint32_t) ((io->header->curr_size + GRN_IO_FILE_SIZE - 1) / GRN_IO_FILE_SIZE);
+ } else {
+ uint32_t bs = io->base_seg;
+ uint32_t max_segment = io->header->max_segment;
+ uint32_t segment_size = io->header->segment_size;
+ nfiles = (uint32_t) (((uint64_t)segment_size * (max_segment + bs) + GRN_IO_FILE_SIZE - 1)
+ / GRN_IO_FILE_SIZE);
+ }
+ for (fno = 0; fno < nfiles; fno++) {
+ gen_pathname(io->path, buffer, fno);
+ if (stat(buffer, &s)) {
+ SERR(buffer);
+ } else {
+ tsize += s.st_size;
+ }
+ }
+ *size = tsize;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_io_remove(grn_ctx *ctx, const char *path)
+{
+ struct stat s;
+ if (stat(path, &s)) {
+ SERR("stat");
+ return ctx->rc;
+ } else if (unlink(path)) {
+ SERR(path);
+ return ctx->rc;
+ } else {
+ int fno;
+ char buffer[PATH_MAX];
+ for (fno = 1; ; fno++) {
+ gen_pathname(path, buffer, fno);
+ if (!stat(buffer, &s)) {
+ if (unlink(buffer)) { SERR(buffer); }
+ } else {
+ break;
+ }
+ }
+ return GRN_SUCCESS;
+ }
+}
+
+grn_rc
+grn_io_rename(grn_ctx *ctx, const char *old_name, const char *new_name)
+{
+ struct stat s;
+ if (stat(old_name, &s)) {
+ SERR("stat");
+ return ctx->rc;
+ } else if (rename(old_name, new_name)) {
+ SERR(old_name);
+ return ctx->rc;
+ } else {
+ int fno;
+ char old_buffer[PATH_MAX];
+ char new_buffer[PATH_MAX];
+ for (fno = 1; ; fno++) {
+ gen_pathname(old_name, old_buffer, fno);
+ if (!stat(old_buffer, &s)) {
+ gen_pathname(new_name, new_buffer, fno);
+ if (rename(old_buffer, new_buffer)) { SERR(old_buffer); }
+ } else {
+ SERR("stat");
+ return ctx->rc;
+ }
+ }
+ return GRN_SUCCESS;
+ }
+}
+
+typedef struct {
+ grn_io_ja_ehead head;
+ char body[256];
+} ja_element;
+
+grn_rc
+grn_io_read_ja(grn_io *io, grn_ctx *ctx, grn_io_ja_einfo *einfo, uint32_t epos, uint32_t key,
+ uint32_t segment, uint32_t offset, void **value, uint32_t *value_len)
+{
+ uint32_t rest = 0, size = *value_len + sizeof(grn_io_ja_ehead);
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;
+ uint32_t bseg = segment + io->base_seg;
+ int fno = bseg / segments_per_file;
+ fileinfo *fi = &io->fis[fno];
+ off_t base = fno ? 0 : io->base - (uint64_t)segment_size * io->base_seg;
+ off_t pos = (uint64_t)segment_size * (bseg % segments_per_file) + offset + base;
+ ja_element *v = GRN_MALLOC(size);
+ if (!v) {
+ *value = NULL;
+ *value_len = 0;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (pos + size > GRN_IO_FILE_SIZE) {
+ rest = pos + size - GRN_IO_FILE_SIZE;
+ size = GRN_IO_FILE_SIZE - pos;
+ }
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if (grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE)) {
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return ctx->rc;
+ }
+ }
+ if (grn_pread(ctx, fi, v, size, pos)) {
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return ctx->rc;
+ }
+ if (einfo->pos != epos) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "einfo pos changed %x => %x", einfo->pos, epos);
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return GRN_FILE_CORRUPT;
+ }
+ if (einfo->size != *value_len) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "einfo size changed %d => %d", einfo->size, *value_len);
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return GRN_FILE_CORRUPT;
+ }
+ if (v->head.key != key) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ehead key unmatch %x => %x", key, v->head.key);
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return GRN_INVALID_FORMAT;
+ }
+ if (v->head.size != *value_len) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ehead size unmatch %d => %d", *value_len, v->head.size);
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return GRN_INVALID_FORMAT;
+ }
+ if (rest) {
+ byte *vr = (byte *)v + size;
+ do {
+ fi = &io->fis[++fno];
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if (grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE)) {
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return ctx->rc;
+ }
+ }
+ size = rest > GRN_IO_FILE_SIZE ? GRN_IO_FILE_SIZE : rest;
+ if (grn_pread(ctx, fi, vr, size, 0)) {
+ *value = NULL;
+ *value_len = 0;
+ GRN_FREE(v);
+ return ctx->rc;
+ }
+ vr += size;
+ rest -= size;
+ } while (rest);
+ }
+ *value = v->body;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_io_write_ja(grn_io *io, grn_ctx *ctx, uint32_t key,
+ uint32_t segment, uint32_t offset, void *value, uint32_t value_len)
+{
+ grn_rc rc;
+ uint32_t rest = 0, size = value_len + sizeof(grn_io_ja_ehead);
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;
+ uint32_t bseg = segment + io->base_seg;
+ int fno = bseg / segments_per_file;
+ fileinfo *fi = &io->fis[fno];
+ off_t base = fno ? 0 : io->base - (uint64_t)segment_size * io->base_seg;
+ off_t pos = (uint64_t)segment_size * (bseg % segments_per_file) + offset + base;
+ if (pos + size > GRN_IO_FILE_SIZE) {
+ rest = pos + size - GRN_IO_FILE_SIZE;
+ size = GRN_IO_FILE_SIZE - pos;
+ }
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if ((rc = grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE))) { return rc; }
+ }
+ if (value_len <= 256) {
+ ja_element je;
+ je.head.size = value_len;
+ je.head.key = key;
+ memcpy(je.body, value, value_len);
+ rc = grn_pwrite(ctx, fi, &je, size, pos);
+ } else {
+ grn_io_ja_ehead eh;
+ eh.size = value_len;
+ eh.key = key;
+ if ((rc = grn_pwrite(ctx, fi, &eh, sizeof(grn_io_ja_ehead), pos))) { return rc; }
+ pos += sizeof(grn_io_ja_ehead);
+ rc = grn_pwrite(ctx, fi, value, size - sizeof(grn_io_ja_ehead), pos);
+ }
+ if (rc) { return rc; }
+ if (rest) {
+ byte *vr = (byte *)value + size - sizeof(grn_io_ja_ehead);
+ do {
+ fi = &io->fis[++fno];
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if ((rc = grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE))) { return rc; }
+ }
+ size = rest > GRN_IO_FILE_SIZE ? GRN_IO_FILE_SIZE : rest;
+ if ((rc = grn_pwrite(ctx, fi, vr, size, 0))) { return rc; }
+ vr += size;
+ rest -= size;
+ } while (rest);
+ }
+ return rc;
+}
+
+grn_rc
+grn_io_write_ja_ehead(grn_io *io, grn_ctx *ctx, uint32_t key,
+ uint32_t segment, uint32_t offset, uint32_t value_len)
+{
+ grn_rc rc;
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;
+ uint32_t bseg = segment + io->base_seg;
+ int fno = bseg / segments_per_file;
+ fileinfo *fi = &io->fis[fno];
+ off_t base = fno ? 0 : io->base - (uint64_t)segment_size + io->base_seg;
+ off_t pos = (uint64_t)segment_size * (bseg % segments_per_file) + offset + base;
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if ((rc = grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE))) { return rc; }
+ }
+ {
+ grn_io_ja_ehead eh;
+ eh.size = value_len;
+ eh.key = key;
+ return grn_pwrite(ctx, fi, &eh, sizeof(grn_io_ja_ehead), pos);
+ }
+}
+
+void *
+grn_io_win_map(grn_io *io, grn_ctx *ctx, grn_io_win *iw, uint32_t segment,
+ uint32_t offset, uint32_t size, grn_io_rw_mode mode)
+{
+ byte *p;
+ off_t pos, base;
+ int fno;
+ uint32_t nseg, bseg;
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;
+ iw->ctx = ctx;
+ iw->diff = 0;
+ if (offset >= segment_size) {
+ segment += offset / segment_size;
+ offset = offset % segment_size;
+ }
+ nseg = (offset + size + segment_size - 1) / segment_size;
+ bseg = segment + io->base_seg;
+ fno = bseg / segments_per_file;
+ base = fno ? 0 : io->base - (uint64_t)segment_size * io->base_seg;
+ pos = (uint64_t)segment_size * (bseg % segments_per_file) + offset + base;
+ if (!size || !io || segment + nseg > io->header->max_segment ||
+ fno != (bseg + nseg - 1) / segments_per_file) {
+ return NULL;
+ }
+ switch (mode) {
+ case grn_io_rdonly:
+ {
+ fileinfo *fi = &io->fis[fno];
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if (grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE)) {
+ return NULL;
+ }
+ }
+ if (!(p = GRN_MALLOC(size))) { return NULL; }
+ if (grn_pread(ctx, fi, p, size, pos)) {
+ GRN_FREE(p);
+ return NULL;
+ }
+ iw->addr = p;
+ }
+ break;
+ case grn_io_rdwr:
+ // if (nseg > 1) { /* auto unmap is not implemented yet */
+ if (nseg > 0) {
+ fileinfo *fi = &io->fis[fno];
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ if (grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE)) {
+ return NULL;
+ }
+ }
+ if (!(p = GRN_MMAP(&grn_gctx, &iw->fmo, fi, pos, (uint64_t)segment_size * nseg))) {
+ return NULL;
+ }
+ {
+ uint64_t tail = io->base + (uint64_t)segment_size * segment + offset + size;
+ if (tail > io->header->curr_size) { io->header->curr_size = tail; }
+ }
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "nseg == 0! in grn_io_win_map(%p, %u, %u, %u)", io, segment, offset, size);
+ // GRN_IO_SEG_REF(io, segment, p); if (!p) { return NULL; }
+ return NULL;
+ }
+ iw->addr = p + offset;
+ break;
+ case grn_io_wronly:
+ if (!(p = GRN_MALLOC(size))) { return NULL; }
+ memset(p, 0, size);
+ iw->cached = 0;
+ iw->addr = p;
+ break;
+ default :
+ return NULL;
+ }
+ iw->io = io;
+ iw->mode = mode;
+ iw->segment = segment;
+ iw->offset = offset;
+ iw->nseg = nseg;
+ iw->size = size;
+ iw->pos = pos;
+ return iw->addr;
+}
+
+grn_rc
+grn_io_win_unmap(grn_io_win *iw)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_io *io = iw->io;
+ grn_ctx *ctx = iw->ctx;
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;
+ int nseg = iw->nseg;
+ switch (iw->mode) {
+ case grn_io_rdonly:
+ if (iw->addr) { GRN_FREE(iw->addr); }
+ iw->addr = NULL;
+ break;
+ case grn_io_rdwr:
+ // if (nseg > 1) { /* auto unmap is not implemented yet */
+ if (nseg > 0) {
+ GRN_MUNMAP(&grn_gctx, &iw->fmo, ((byte *)iw->addr) - iw->offset, (uint64_t)segment_size * nseg);
+ } else {
+ if (iw->segment >= io->header->max_segment) {
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ //GRN_IO_SEG_UNREF(io, iw->segment);
+ }
+ }
+ iw->addr = NULL;
+ break;
+ case grn_io_wronly:
+ {
+ int fno = (iw->segment + io->base_seg) / segments_per_file;
+ fileinfo *fi = &io->fis[fno];
+ if (!grn_opened(fi)) {
+ char path[PATH_MAX];
+ gen_pathname(io->path, path, fno);
+ rc = grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE);
+ }
+ if (!rc) {
+ if (!(rc = grn_pwrite(ctx, fi, iw->addr, iw->size, iw->pos))) {
+ {
+ uint64_t tail = io->base + (uint64_t)segment_size * iw->segment + iw->offset + iw->size;
+ if (tail > io->header->curr_size) { io->header->curr_size = tail; }
+ }
+ if (!iw->cached) { GRN_FREE(iw->addr); }
+ iw->addr = NULL;
+ }
+ }
+ }
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ return rc;
+}
+
+void *
+grn_io_win_map2(grn_io *io, grn_ctx *ctx, grn_io_win *iw, uint32_t segment,
+ uint32_t offset, uint32_t size, grn_io_rw_mode mode)
+{
+ uint32_t nseg, segment_size = io->header->segment_size;
+ if (offset >= segment_size) {
+ segment += offset / segment_size;
+ offset = offset % segment_size;
+ }
+ nseg = (offset + size + segment_size - 1) / segment_size;
+ if (!size || !ctx || segment + nseg > io->header->max_segment) { return NULL; }
+ iw->ctx = ctx;
+ iw->diff = 0;
+ iw->io = io;
+ iw->mode = mode;
+ iw->tiny_p = 0;
+ iw->segment = segment;
+ iw->offset = offset;
+ iw->nseg = nseg;
+ iw->size = size;
+ if (nseg == 1) {
+ byte *addr = NULL;
+ GRN_IO_SEG_REF(io, segment, addr);
+ if (!addr) { return NULL; }
+ iw->cached = 1;
+ iw->addr = addr + offset;
+ } else {
+ if (!(iw->addr = GRN_MALLOC(size))) { return NULL; }
+ iw->cached = 0;
+ switch (mode) {
+ case grn_io_rdonly:
+ case grn_io_rdwr:
+ {
+ byte *p, *q = NULL;
+ uint32_t s, r;
+ for (p = iw->addr, r = size; r; p += s, r -= s, segment++, offset = 0) {
+ GRN_IO_SEG_REF(io, segment, q);
+ if (!q) {
+ GRN_FREE(iw->addr);
+ return NULL;
+ }
+ s = (offset + r > segment_size) ? segment_size - offset : r;
+ memcpy(p, q + offset, s);
+ GRN_IO_SEG_UNREF(io, segment);
+ }
+ }
+ break;
+ case grn_io_wronly:
+ break;
+ default :
+ return NULL;
+ }
+ }
+ return iw->addr;
+}
+
+grn_rc
+grn_io_win_unmap2(grn_io_win *iw)
+{
+ if (!iw || !iw->io ||!iw->ctx) { return GRN_INVALID_ARGUMENT; }
+ if (iw->cached) {
+ if (!iw->tiny_p) { GRN_IO_SEG_UNREF(iw->io, iw->segment); }
+ return GRN_SUCCESS;
+ }
+ {
+ grn_io *io = iw->io;
+ grn_ctx *ctx = iw->ctx;
+ switch (iw->mode) {
+ case grn_io_rdonly:
+ if (!iw->addr) { return GRN_INVALID_ARGUMENT; }
+ GRN_FREE(iw->addr);
+ return GRN_SUCCESS;
+ case grn_io_rdwr:
+ case grn_io_wronly:
+ {
+ byte *p, *q = NULL;
+ uint32_t segment_size = io->header->segment_size;
+ uint32_t s, r, offset = iw->offset, segment = iw->segment;
+ for (p = iw->addr, r = iw->size; r; p += s, r -= s, segment++, offset = 0) {
+ GRN_IO_SEG_REF(io, segment, q);
+ if (!q) { return GRN_NO_MEMORY_AVAILABLE; }
+ s = (offset + r > segment_size) ? segment_size - offset : r;
+ memcpy(q + offset, p, s);
+ GRN_IO_SEG_UNREF(io, segment);
+ }
+ }
+ GRN_FREE(iw->addr);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+}
+
+#define DO_MAP(io,fmo,fi,pos,size,segno,res) do {\
+ if (((res) = GRN_MMAP(&grn_gctx, (fmo), (fi), (pos), (size)))) {\
+ uint32_t nmaps;\
+ if (io->max_map_seg < segno) { io->max_map_seg = segno; }\
+ GRN_ATOMIC_ADD_EX(&io->nmaps, 1, nmaps);\
+ {\
+ uint64_t tail = io->base + (uint64_t)(size) * ((segno) + 1);\
+ if (tail > io->header->curr_size) { io->header->curr_size = tail; }\
+ }\
+ }\
+} while (0)
+
+#define SEG_MAP(io,segno,info) do {\
+ uint32_t segment_size = io->header->segment_size;\
+ if ((io->flags & GRN_IO_TEMPORARY)) {\
+ DO_MAP(io, &info->fmo, NULL, 0, segment_size, segno, info->map);\
+ } else {\
+ uint32_t segments_per_file = GRN_IO_FILE_SIZE / segment_size;\
+ uint32_t bseg = segno + io->base_seg;\
+ uint32_t fno = bseg / segments_per_file;\
+ off_t base = fno ? 0 : io->base - (uint64_t)segment_size * io->base_seg;\
+ off_t pos = (uint64_t)segment_size * (bseg % segments_per_file) + base;\
+ fileinfo *fi = &io->fis[fno];\
+ if (!grn_opened(fi)) {\
+ char path[PATH_MAX];\
+ gen_pathname(io->path, path, fno);\
+ if (!grn_open(ctx, fi, path, O_RDWR|O_CREAT, GRN_IO_FILE_SIZE)) { \
+ DO_MAP(io, &info->fmo, fi, pos, segment_size, segno, info->map);\
+ }\
+ } else {\
+ DO_MAP(io, &info->fmo, fi, pos, segment_size, segno, info->map);\
+ }\
+ }\
+} while (0)
+
+void
+grn_io_seg_map_(grn_ctx *ctx, grn_io *io, uint32_t segno, grn_io_mapinfo *info)
+{
+ SEG_MAP(io, segno, info);
+}
+
+grn_rc
+grn_io_seg_expire(grn_ctx *ctx, grn_io *io, uint32_t segno, uint32_t nretry)
+{
+ uint32_t retry, *pnref;
+ grn_io_mapinfo *info;
+ if (!io->maps || segno >= io->header->max_segment) { return GRN_INVALID_ARGUMENT; }
+ info = &io->maps[segno];
+ if (!info->map) { return GRN_INVALID_ARGUMENT; }
+ pnref = &info->nref;
+ for (retry = 0;; retry++) {
+ uint32_t nref;
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);
+ if (nref) {
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);
+ if (retry >= GRN_IO_MAX_RETRY) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected! in grn_io_seg_expire(%p, %u, %u)", io, segno, nref);
+ return GRN_RESOURCE_DEADLOCK_AVOIDED;
+ }
+ } else {
+ GRN_ATOMIC_ADD_EX(pnref, GRN_IO_MAX_REF, nref);
+ if (nref > 1) {
+ GRN_ATOMIC_ADD_EX(pnref, -(GRN_IO_MAX_REF + 1), nref);
+ GRN_FUTEX_WAKE(pnref);
+ if (retry >= GRN_IO_MAX_RETRY) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected!! in grn_io_seg_expire(%p, %u, %u)", io,
+ segno, nref);
+ return GRN_RESOURCE_DEADLOCK_AVOIDED;
+ }
+ } else {
+ uint32_t nmaps;
+ GRN_MUNMAP(&grn_gctx, &info->fmo, info->map, io->header->segment_size);
+ info->map = NULL;
+ GRN_ATOMIC_ADD_EX(pnref, -(GRN_IO_MAX_REF + 1), nref);
+ GRN_ATOMIC_ADD_EX(&io->nmaps, -1, nmaps);
+ GRN_FUTEX_WAKE(pnref);
+ return GRN_SUCCESS;
+ }
+ }
+ if (retry >= nretry) { return GRN_RESOURCE_DEADLOCK_AVOIDED; }
+ GRN_FUTEX_WAIT(pnref);
+ }
+}
+
+uint32_t
+grn_io_expire(grn_ctx *ctx, grn_io *io, int count_thresh, uint32_t limit)
+{
+ uint32_t m, n = 0, ln = io->nmaps;
+ switch ((io->flags & (GRN_IO_EXPIRE_GTICK|GRN_IO_EXPIRE_SEGMENT))) {
+ case GRN_IO_EXPIRE_GTICK :
+ {
+ uint32_t nref, nmaps, *pnref = &io->nref;
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);
+ if (!nref && grn_gtick - io->count > count_thresh) {
+ uint32_t i = io->header->n_arrays;
+ grn_io_mapinfo *info = io->maps;
+ grn_io_array_spec *array_specs = (grn_io_array_spec *)io->user_header;
+ while (i--) {
+ memset(io->ainfo[i].addrs, 0, sizeof(void *) * array_specs[i].max_n_segments);
+ }
+ for (m = io->max_map_seg; m; info++, m--) {
+ if (info->map) {
+ GRN_MUNMAP(&grn_gctx, &info->fmo, info->map, io->header->segment_size);
+ info->map = NULL;
+ info->nref = 0;
+ info->count = grn_gtick;
+ GRN_ATOMIC_ADD_EX(&io->nmaps, -1, nmaps);
+ n++;
+ }
+ }
+ }
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);
+ }
+ break;
+ case GRN_IO_EXPIRE_SEGMENT :
+ for (m = io->max_map_seg; n < limit && m; m--) {
+ if (!grn_io_seg_expire(ctx, io, m, 0)) { n++; }
+ }
+ break;
+ case (GRN_IO_EXPIRE_GTICK|GRN_IO_EXPIRE_SEGMENT) :
+ {
+ grn_io_mapinfo *info = io->maps;
+ for (m = io->max_map_seg; n < limit && m; info++, m--) {
+ if (info->map && (grn_gtick - info->count) > count_thresh) {
+ uint32_t nmaps, nref, *pnref = &info->nref;
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);
+ if (!nref && info->map && (grn_gtick - info->count) > count_thresh) {
+ GRN_MUNMAP(&grn_gctx, &info->fmo, info->map, io->header->segment_size);
+ GRN_ATOMIC_ADD_EX(&io->nmaps, -1, nmaps);
+ info->map = NULL;
+ info->count = grn_gtick;
+ n++;
+ }
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);
+ }
+ }
+ }
+ break;
+ }
+ if (n) {
+ GRN_LOG(ctx, GRN_LOG_INFO, "<%p:%x> expired i=%p max=%d (%d/%d)",
+ ctx, grn_gtick, io, io->max_map_seg, n, ln);
+ }
+ return n;
+}
+
+static uint32_t
+grn_expire_(grn_ctx *ctx, int count_thresh, uint32_t limit)
+{
+ uint32_t n = 0;
+ grn_io *io;
+ GRN_HASH_EACH(ctx, grn_gctx.impl->ios, id, NULL, NULL, (void **)&io, {
+ grn_plugin_close(ctx, id);
+ n += grn_io_expire(ctx, io, count_thresh, limit);
+ if (n >= limit) { break; }
+ });
+ return n;
+}
+
+uint32_t
+grn_expire(grn_ctx *ctx, int count_thresh, uint32_t limit)
+{
+ grn_ctx *c;
+ uint32_t n = 0;
+ CRITICAL_SECTION_ENTER(grn_glock);
+ if (grn_gtick) {
+ for (c = grn_gctx.next;; c = ctx->next) {
+ if (c == &grn_gctx) {
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ n = grn_expire_(ctx, count_thresh, limit);
+ CRITICAL_SECTION_ENTER(grn_glock);
+ break;
+ }
+ if ((c->seqno & 1) && (c->seqno == c->seqno2)) { break; }
+ }
+ }
+ grn_gtick++;
+ for (c = grn_gctx.next; c != &grn_gctx; c = ctx->next) { c->seqno2 = c->seqno; }
+ CRITICAL_SECTION_LEAVE(grn_glock);
+ return n;
+}
+
+void *
+grn_io_anon_map(grn_ctx *ctx, grn_io_mapinfo *mi, size_t length)
+{
+ return (mi->map = GRN_MMAP(ctx, &mi->fmo, NULL, 0, length));
+}
+
+void
+grn_io_anon_unmap(grn_ctx *ctx, grn_io_mapinfo *mi, size_t length)
+{
+ /* support WIN32 */
+#ifdef WIN32
+ return GRN_FREE(mi->map);
+#endif
+ GRN_MUNMAP(ctx, &mi->fmo, mi->map, length);
+}
+
+grn_rc
+grn_io_lock(grn_ctx *ctx, grn_io *io, int timeout)
+{
+ static int _ncalls = 0, _ncolls = 0;
+ uint32_t count, count_log_border = 1000;
+ _ncalls++;
+ if (!io) { return GRN_INVALID_ARGUMENT; }
+ for (count = 0;; count++) {
+ uint32_t lock;
+ GRN_ATOMIC_ADD_EX(io->lock, 1, lock);
+ if (lock) {
+ GRN_ATOMIC_ADD_EX(io->lock, -1, lock);
+ if (count == count_log_border) {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "io(%s) collisions(%d/%d): lock failed %d times",
+ io->path, _ncolls, _ncalls, count_log_border);
+ }
+ if (!timeout || (timeout > 0 && timeout == count)) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "[DB Locked] time out(%d): io(%s) collisions(%d/%d)",
+ timeout, io->path, _ncolls, _ncalls);
+ break;
+ }
+ if (!(++_ncolls % 1000000) && (_ncolls > _ncalls)) {
+ if (_ncolls < 0 || _ncalls < 0) {
+ _ncolls = 0; _ncalls = 0;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "io(%s) collisions(%d/%d)", io->path, _ncolls, _ncalls);
+ }
+ }
+ grn_nanosleep(GRN_LOCK_WAIT_TIME_NANOSECOND);
+ continue;
+ }
+ return GRN_SUCCESS;
+ }
+ ERR(GRN_RESOURCE_DEADLOCK_AVOIDED, "grn_io_lock failed");
+ return ctx->rc;
+}
+
+void
+grn_io_unlock(grn_io *io)
+{
+ if (io) {
+ uint32_t lock;
+ GRN_ATOMIC_ADD_EX(io->lock, -1, lock);
+ }
+}
+
+void
+grn_io_clear_lock(grn_io *io)
+{
+ if (io) { *io->lock = 0; }
+}
+
+uint32_t
+grn_io_is_locked(grn_io *io)
+{
+ return io ? *io->lock : 0;
+}
+
+/** mmap abstraction **/
+
+static size_t mmap_size = 0;
+
+#ifdef WIN32
+
+#ifdef WIN32_FMO_EACH
+
+inline static grn_rc
+grn_open(grn_ctx *ctx, fileinfo *fi, const char *path, int flags, size_t maxsize)
+{
+ if ((flags & O_CREAT)) {
+ DWORD dwCreationDisposition;
+ if (flags & O_EXCL) {
+ dwCreationDisposition = CREATE_NEW;
+ } else {
+ dwCreationDisposition = OPEN_ALWAYS;
+ }
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+ goto exit;
+ }
+ if ((flags & O_TRUNC)) {
+ CloseHandle(fi->fh);
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+ goto exit;
+ }
+ /* O_RDWR only */
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+exit:
+ CRITICAL_SECTION_INIT(fi->cs);
+ return GRN_SUCCESS;
+}
+
+inline static void *
+grn_mmap(grn_ctx *ctx, HANDLE *fmo, fileinfo *fi, off_t offset, size_t length)
+{
+ void *res;
+ if (!fi) {
+ if(fmo) {
+ *fmo = (HANDLE)0;
+ }
+ return GRN_GCALLOC(length);
+ }
+ /* CRITICAL_SECTION_ENTER(fi->cs); */
+ /* try to create fmo */
+ *fmo = CreateFileMapping(fi->fh, NULL, PAGE_READWRITE, 0, offset + length, NULL);
+ if (!*fmo) { return NULL; }
+ res = MapViewOfFile(*fmo, FILE_MAP_WRITE, 0, (DWORD)offset, (SIZE_T)length);
+ if (!res) {
+ MERR("MapViewOfFile failed #%d <%zu>", GetLastError(), mmap_size);
+ return NULL;
+ }
+ /* CRITICAL_SECTION_LEAVE(fi->cs); */
+ mmap_size += length;
+ return res;
+}
+
+inline static int
+grn_munmap(grn_ctx *ctx, HANDLE *fmo, void *start, size_t length)
+{
+ int r = 0;
+ if (!fmo) {
+ GRN_FREE(start);
+ }
+ if (*fmo) {
+ if (UnmapViewOfFile(start)) {
+ mmap_size -= length;
+ } else {
+ SERR("UnmapViewOfFile");
+ GRN_LOG(ctx, GRN_LOG_ERROR, "UnmapViewOfFile(%p,%d) failed <%zu>", start, length, mmap_size);
+ r = -1;
+ }
+ if (!CloseHandle(*fmo)) {
+ SERR("CloseHandle");
+ GRN_LOG(ctx, GRN_LOG_ERROR, "CloseHandle(%p,%d) failed <%zu>", start, length, mmap_size);
+ }
+ *fmo = NULL;
+ } else {
+ GRN_FREE(start);
+ }
+ return r;
+}
+
+inline static grn_rc
+grn_close(grn_ctx *ctx, fileinfo *fi)
+{
+ if (fi->fmo != NULL) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "file mapping object exists");
+ }
+ if (fi->fh != INVALID_HANDLE_VALUE) {
+ CloseHandle(fi->fh);
+ CRITICAL_SECTION_FIN(fi->cs);
+ fi->fh = INVALID_HANDLE_VALUE;
+ }
+ return GRN_SUCCESS;
+}
+
+#else /* WIN32_FMO_EACH */
+inline static grn_rc
+grn_open(grn_ctx *ctx, fileinfo *fi, const char *path, int flags, size_t maxsize)
+{
+ /* may be wrong if flags is just only O_RDWR */
+ if ((flags & O_CREAT)) {
+ DWORD dwCreationDisposition;
+ if (flags & O_EXCL) {
+ dwCreationDisposition = CREATE_NEW;
+ } else {
+ dwCreationDisposition = OPEN_ALWAYS;
+ }
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+ goto exit;
+ }
+ if ((flags & O_TRUNC)) {
+ CloseHandle(fi->fh);
+ /* unable to assign OPEN_ALWAYS and TRUNCATE_EXISTING at once */
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+ goto exit;
+ }
+ /* O_RDWR only */
+ fi->fh = CreateFile(path, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (fi->fh == INVALID_HANDLE_VALUE) {
+ SERR("CreateFile");
+ return ctx->rc;
+ }
+exit:
+ /* signature may be wrong.. */
+ fi->fmo = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, NULL);
+ /* open failed */
+ if (fi->fmo == NULL) {
+ // flock
+ /* retry to open */
+ fi->fmo = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, NULL);
+ /* failed again */
+ if (fi->fmo == NULL) {
+ /* try to create fmo */
+ fi->fmo = CreateFileMapping(fi->fh, NULL, PAGE_READWRITE, 0, GRN_IO_FILE_SIZE, NULL);
+ }
+ // funlock
+ }
+ if (fi->fmo != NULL) {
+ if (GetLastError() != ERROR_ALREADY_EXISTS ) {
+ CRITICAL_SECTION_INIT(fi->cs);
+ return GRN_SUCCESS;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "fmo object already exists! handle=%d", fi->fh);
+ CloseHandle(fi->fmo);
+ }
+ } else {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "failed to get FileMappingObject #%d", GetLastError());
+ }
+ CloseHandle(fi->fh);
+ SERR("OpenFileMapping");
+ return ctx->rc;
+}
+
+inline static void *
+grn_mmap(grn_ctx *ctx, fileinfo *fi, off_t offset, size_t length)
+{
+ void *res;
+ if (!fi) { return GRN_GCALLOC(length); }
+ /* file must be exceeded to GRN_IO_FILE_SIZE when FileMappingObject created.
+ and, after fmo created, it's not allowed to expand the size of file.
+ DWORD tail = (DWORD)(offset + length);
+ DWORD filesize = GetFileSize(fi->fh, NULL);
+ if (filesize < tail) {
+ if (SetFilePointer(fi->fh, tail, NULL, FILE_BEGIN) != tail) {
+ grn_log("SetFilePointer failed");
+ return NULL;
+ }
+ if (!SetEndOfFile(fi->fh)) {
+ grn_log("SetEndOfFile failed");
+ return NULL;
+ }
+ filesize = tail;
+ }
+ */
+ res = MapViewOfFile(fi->fmo, FILE_MAP_WRITE, 0, (DWORD)offset, (SIZE_T)length);
+ if (!res) {
+ MERR("MapViewOfFile failed #%d <%zu>", GetLastError(), mmap_size);
+ return NULL;
+ }
+ mmap_size += length;
+ return res;
+}
+
+inline static int
+grn_munmap(grn_ctx *ctx, void *start, size_t length)
+{
+ if (UnmapViewOfFile(start)) {
+ mmap_size -= length;
+ return 0;
+ } else {
+ SERR("UnmapViewOfFile");
+ GRN_LOG(ctx, GRN_LOG_ERROR, "UnmapViewOfFile(%p,%d) failed <%zu>", start, length, mmap_size);
+ return -1;
+ }
+}
+
+inline static grn_rc
+grn_close(grn_ctx *ctx, fileinfo *fi)
+{
+ if (fi->fmo != NULL) {
+ CloseHandle(fi->fmo);
+ fi->fmo = NULL;
+ }
+ if (fi->fh != INVALID_HANDLE_VALUE) {
+ CloseHandle(fi->fh);
+ CRITICAL_SECTION_FIN(fi->cs);
+ fi->fh = INVALID_HANDLE_VALUE;
+ }
+ return GRN_SUCCESS;
+}
+#endif /* WIN32_FMO_EACH */
+
+inline static void
+grn_fileinfo_init(fileinfo *fis, int nfis)
+{
+ for (; nfis--; fis++) {
+ fis->fh = INVALID_HANDLE_VALUE;
+ fis->fmo = NULL;
+ }
+}
+
+inline static int
+grn_opened(fileinfo *fi)
+{
+ return fi->fh != INVALID_HANDLE_VALUE;
+}
+
+inline static int
+grn_msync(grn_ctx *ctx, void *start, size_t length)
+{
+ /* return value may be wrong... */
+ return FlushViewOfFile(start, length);
+}
+
+inline static grn_rc
+grn_pread(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset)
+{
+ DWORD r, len;
+ CRITICAL_SECTION_ENTER(fi->cs);
+ r = SetFilePointer(fi->fh, offset, NULL, FILE_BEGIN);
+ if (r == INVALID_SET_FILE_POINTER) {
+ SERR("SetFilePointer");
+ } else {
+ if (!ReadFile(fi->fh, buf, (DWORD)count, &len, NULL)) {
+ SERR("ReadFile");
+ } else if (len != count) {
+ /* todo : should retry ? */
+ ERR(GRN_INPUT_OUTPUT_ERROR, "ReadFile %d != %d", count, len);
+ }
+ }
+ CRITICAL_SECTION_LEAVE(fi->cs);
+ return ctx->rc;
+}
+
+inline static grn_rc
+grn_pwrite(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset)
+{
+ DWORD r, len;
+ CRITICAL_SECTION_ENTER(fi->cs);
+ r = SetFilePointer(fi->fh, offset, NULL, FILE_BEGIN);
+ if (r == INVALID_SET_FILE_POINTER) {
+ SERR("SetFilePointer");
+ } else {
+ if (!WriteFile(fi->fh, buf, (DWORD)count, &len, NULL)) {
+ SERR("WriteFile");
+ } else if (len != count) {
+ /* todo : should retry ? */
+ ERR(GRN_INPUT_OUTPUT_ERROR, "WriteFile %d != %d", count, len);
+ }
+ }
+ CRITICAL_SECTION_LEAVE(fi->cs);
+ return ctx->rc;
+}
+
+#else /* WIN32 */
+
+inline static grn_rc
+grn_open(grn_ctx *ctx, fileinfo *fi, const char *path, int flags, size_t maxsize)
+{
+ struct stat st;
+ if ((fi->fd = GRN_OPEN(path, flags, 0666)) == -1) {
+ SERR(path);
+ return ctx->rc;
+ }
+ if (fstat(fi->fd, &st) == -1) {
+ SERR(path);
+ return ctx->rc;
+ }
+ fi->dev = st.st_dev;
+ fi->inode = st.st_ino;
+ return GRN_SUCCESS;
+}
+
+inline static void
+grn_fileinfo_init(fileinfo *fis, int nfis)
+{
+ for (; nfis--; fis++) { fis->fd = -1; }
+}
+
+inline static int
+grn_opened(fileinfo *fi)
+{
+ return fi->fd != -1;
+}
+
+inline static grn_rc
+grn_close(grn_ctx *ctx, fileinfo *fi)
+{
+ if (fi->fd != -1) {
+ if (GRN_CLOSE(fi->fd) == -1) {
+ SERR("close");
+ return ctx->rc;
+ }
+ fi->fd = -1;
+ }
+ return GRN_SUCCESS;
+}
+
+#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#include <sys/mman.h>
+
+inline static void *
+grn_mmap(grn_ctx *ctx, fileinfo *fi, off_t offset, size_t length)
+{
+ void *res;
+ int fd, flags;
+ if (fi) {
+ struct stat s;
+ off_t tail = offset + length;
+ fd = fi->fd;
+ if ((fstat(fd, &s) == -1) || (s.st_size < tail && ftruncate(fd, tail) == -1)) {
+ SERR("fstat");
+ return NULL;
+ }
+ flags = MAP_SHARED;
+ } else {
+ fd = -1;
+ flags = MAP_PRIVATE|MAP_ANONYMOUS;
+ }
+ res = mmap(NULL, length, PROT_READ|PROT_WRITE, flags, fd, offset);
+ if (MAP_FAILED == res) {
+ MERR("mmap(%" GRN_FMT_LLU ",%d,%" GRN_FMT_LLD ")=%s <%" GRN_FMT_LLU ">",
+ (unsigned long long int)length, fd, (long long int)offset, strerror(errno),
+ (unsigned long long int)mmap_size);
+ return NULL;
+ }
+ mmap_size += length;
+ return res;
+}
+
+#ifdef USE_FAIL_MALLOC
+inline static void *
+grn_fail_mmap(grn_ctx *ctx, fileinfo *fi, off_t offset, size_t length,
+ const char* file, int line, const char *func)
+{
+ if (grn_fail_malloc_check(length, file, line, func)) {
+ return grn_mmap(ctx, fi, offset, length);
+ } else {
+ MERR("fail_mmap(%zu,%d,%" GRN_FMT_LLU ") (%s:%d@%s) <%zu>",
+ length, fi ? fi->fd : 0, offset, file, line, func, mmap_size);
+ return NULL;
+ }
+}
+#endif /* USE_FAIL_MALLOC */
+
+inline static int
+grn_msync(grn_ctx *ctx, void *start, size_t length)
+{
+ int r = msync(start, length, MS_SYNC);
+ if (r == -1) { SERR("msync"); }
+ return r;
+}
+
+inline static int
+grn_munmap(grn_ctx *ctx, void *start, size_t length)
+{
+ int res;
+ res = munmap(start, length);
+ if (res) {
+ SERR("munmap");
+ GRN_LOG(ctx, GRN_LOG_ERROR, "munmap(%p,%" GRN_FMT_LLU ") failed <%" GRN_FMT_LLU ">",
+ start, (unsigned long long int)length, (unsigned long long int)mmap_size);
+ } else {
+ mmap_size -= length;
+ }
+ return res;
+}
+
+inline static grn_rc
+grn_pread(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset)
+{
+ ssize_t r = pread(fi->fd, buf, count, offset);
+ if (r != count) {
+ if (r == -1) {
+ SERR("pread");
+ } else {
+ /* todo : should retry ? */
+ ERR(GRN_INPUT_OUTPUT_ERROR, "pread returned %" GRN_FMT_LLD " != %" GRN_FMT_LLU,
+ (long long int)r, (unsigned long long int)count);
+ }
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+grn_pwrite(grn_ctx *ctx, fileinfo *fi, void *buf, size_t count, off_t offset)
+{
+ ssize_t r = pwrite(fi->fd, buf, count, offset);
+ if (r != count) {
+ if (r == -1) {
+ SERR("pwrite");
+ } else {
+ /* todo : should retry ? */
+ ERR(GRN_INPUT_OUTPUT_ERROR, "pwrite returned %" GRN_FMT_LLD " != %" GRN_FMT_LLU,
+ (long long int)r, (unsigned long long int)count);
+ }
+ return ctx->rc;
+ }
+ return GRN_SUCCESS;
+}
+
+#endif /* WIN32 */
diff --git a/storage/mroonga/vendor/groonga/lib/io.h b/storage/mroonga/vendor/groonga/lib/io.h
new file mode 100644
index 00000000000..04c75919c5f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/io.h
@@ -0,0 +1,495 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_IO_H
+#define GRN_IO_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_ERROR_H
+#include "error.h"
+#endif /* GRN_ERROR_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+#ifdef WIN32_FMO_EACH
+#define GRN_IO_FILE_SIZE 1073741824UL
+#else /* FMO_EACH */
+#define GRN_IO_FILE_SIZE 134217728L
+#endif /* FMO_EACH */
+#define GRN_IO_COPY grn_io_rdonly
+#define GRN_IO_UPDATE grn_io_wronly
+#else /* WIN32 */
+#define GRN_IO_FILE_SIZE 1073741824UL
+#define GRN_IO_COPY grn_io_rdwr
+#define GRN_IO_UPDATE grn_io_rdwr
+#endif /* WIN32 */
+
+typedef enum {
+ grn_io_rdonly,
+ grn_io_wronly,
+ grn_io_rdwr
+} grn_io_rw_mode;
+
+typedef enum {
+ grn_io_auto,
+ grn_io_manual
+} grn_io_mode;
+
+/**** grn_io ****/
+
+typedef struct _grn_io grn_io;
+
+typedef struct {
+ grn_io *io;
+ grn_ctx *ctx;
+ uint8_t mode;
+ uint8_t tiny_p;
+ uint32_t pseg;
+ uint32_t segment;
+ uint32_t offset;
+ uint32_t size;
+ uint32_t nseg;
+ off_t pos;
+ void *addr;
+ uint32_t diff;
+ int32_t cached;
+#if defined(WIN32) && defined(WIN32_FMO_EACH)
+ HANDLE fmo;
+#endif /* defined(WIN32) && defined(WIN32_FMO_EACH) */
+ void *value;
+} grn_io_win;
+
+typedef struct {
+ void *map;
+ uint32_t nref;
+ uint32_t count;
+#if defined(WIN32) && defined(WIN32_FMO_EACH)
+ HANDLE fmo;
+#endif /* defined(WIN32) && defined(WIN32_FMO_EACH) */
+} grn_io_mapinfo;
+
+typedef struct _grn_io_array_info grn_io_array_info;
+
+struct _grn_io_header {
+ char idstr[16];
+ uint32_t type;
+ uint32_t version;
+ uint32_t flags;
+ uint32_t header_size;
+ uint32_t segment_size;
+ uint32_t max_segment;
+ uint32_t n_arrays;
+ uint32_t lock;
+ uint64_t curr_size;
+ uint32_t segment_tail;
+ uint32_t lastmod;
+};
+
+struct _grn_io {
+ char path[PATH_MAX];
+ struct _grn_io_header *header;
+ byte *user_header;
+ grn_io_mapinfo *maps;
+ uint32_t base;
+ uint32_t base_seg;
+ grn_io_mode mode;
+ struct _grn_io_fileinfo *fis;
+ grn_io_array_info *ainfo;
+ uint32_t max_map_seg;
+ uint32_t nmaps;
+ uint32_t nref;
+ uint32_t count;
+ uint8_t flags;
+ uint32_t *lock;
+};
+
+GRN_API grn_io *grn_io_create(grn_ctx *ctx, const char *path,
+ uint32_t header_size, uint32_t segment_size,
+ uint32_t max_segment, grn_io_mode mode,
+ unsigned int flags);
+grn_io *grn_io_open(grn_ctx *ctx, const char *path, grn_io_mode mode);
+GRN_API grn_rc grn_io_close(grn_ctx *ctx, grn_io *io);
+grn_rc grn_io_remove(grn_ctx *ctx, const char *path);
+grn_rc grn_io_size(grn_ctx *ctx, grn_io *io, uint64_t *size);
+grn_rc grn_io_rename(grn_ctx *ctx, const char *old_name, const char *new_name);
+GRN_API void *grn_io_header(grn_io *io);
+
+void *grn_io_win_map(grn_io *io, grn_ctx *ctx, grn_io_win *iw, uint32_t segment,
+ uint32_t offset, uint32_t size, grn_io_rw_mode mode);
+grn_rc grn_io_win_mapv(grn_io_win **list, grn_ctx *ctx, int nent);
+grn_rc grn_io_win_unmap(grn_io_win *iw);
+
+void *grn_io_win_map2(grn_io *io, grn_ctx *ctx, grn_io_win *iw, uint32_t segment,
+ uint32_t offset, uint32_t size, grn_io_rw_mode mode);
+grn_rc grn_io_win_unmap2(grn_io_win *iw);
+
+typedef struct _grn_io_ja_einfo grn_io_ja_einfo;
+typedef struct _grn_io_ja_ehead grn_io_ja_ehead;
+
+struct _grn_io_ja_einfo {
+ uint32_t pos;
+ uint32_t size;
+};
+
+struct _grn_io_ja_ehead {
+ uint32_t size;
+ uint32_t key;
+};
+
+grn_rc grn_io_read_ja(grn_io *io, grn_ctx *ctx, grn_io_ja_einfo *einfo, uint32_t epos,
+ uint32_t key, uint32_t segment, uint32_t offset,
+ void **value, uint32_t *value_len);
+grn_rc grn_io_write_ja(grn_io *io, grn_ctx *ctx,
+ uint32_t key, uint32_t segment, uint32_t offset,
+ void *value, uint32_t value_len);
+
+grn_rc grn_io_write_ja_ehead(grn_io *io, grn_ctx *ctx, uint32_t key,
+ uint32_t segment, uint32_t offset, uint32_t value_len);
+
+#define GRN_TABLE_ADD (0x01<<6)
+#define GRN_TABLE_ADDED (0x01<<7)
+
+#define GRN_IO_MAX_RETRY (0x10000)
+#define GRN_IO_MAX_REF (0x80000000)
+
+#define GRN_IO_EXPIRE_GTICK (0x01)
+#define GRN_IO_EXPIRE_SEGMENT (0x02)
+#define GRN_IO_TEMPORARY (0x04)
+
+void grn_io_seg_map_(grn_ctx *ctx, grn_io *io, uint32_t segno, grn_io_mapinfo *info);
+
+/* arguments must be validated by caller;
+ * io mustn't be NULL;
+ * segno must be in valid range;
+ * addr must be set NULL;
+ */
+#define GRN_IO_SEG_REF(io,segno,addr) do {\
+ grn_io_mapinfo *info = &(io)->maps[segno];\
+ uint32_t nref, retry, *pnref = &info->nref;\
+ if (io->flags & GRN_IO_EXPIRE_SEGMENT) {\
+ if (io->flags & GRN_IO_EXPIRE_GTICK) {\
+ for (retry = 0; !info->map || info->count != grn_gtick; retry++) {\
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);\
+ if (nref) {\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ if (retry >= GRN_IO_MAX_RETRY) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected! in GRN_IO_SEG_REF(%p, %u)", io, segno);\
+ break;\
+ }\
+ GRN_FUTEX_WAIT(pnref);\
+ } else {\
+ info->count = grn_gtick;\
+ if (!info->map) {\
+ grn_io_seg_map_(ctx, io, segno, info);\
+ if (!info->map) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT,\
+ "mmap failed! in GRN_IO_SEG_REF(%p, %u): %s",\
+ io, segno, grn_current_error_message());\
+ }\
+ }\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ GRN_FUTEX_WAKE(pnref);\
+ break;\
+ }\
+ }\
+ } else {\
+ for (retry = 0;; retry++) {\
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);\
+ if (nref >= GRN_IO_MAX_REF) {\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ if (retry >= GRN_IO_MAX_RETRY) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected!! in GRN_IO_SEG_REF(%p, %u, %u)", io, segno, nref);\
+ *pnref = 0; /* force reset */ \
+ break;\
+ }\
+ GRN_FUTEX_WAIT(pnref);\
+ continue;\
+ }\
+ if (nref >= 0x40000000) {\
+ ALERT("strange nref value!! in GRN_IO_SEG_REF(%p, %u, %u)", io, segno, nref); \
+ }\
+ if (!info->map) {\
+ if (nref) {\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ if (retry >= GRN_IO_MAX_RETRY) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected!!! in GRN_IO_SEG_REF(%p, %u, %u)", io, segno, nref);\
+ break;\
+ }\
+ GRN_FUTEX_WAIT(pnref);\
+ continue;\
+ } else {\
+ grn_io_seg_map_(ctx, io, segno, info);\
+ if (!info->map) {\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ GRN_LOG(ctx, GRN_LOG_CRIT,\
+ "mmap failed!!! in GRN_IO_SEG_REF(%p, %u, %u): %s",\
+ io, segno, nref, grn_current_error_message());\
+ }\
+ \
+ GRN_FUTEX_WAKE(pnref);\
+ }\
+ }\
+ break;\
+ }\
+ info->count = grn_gtick;\
+ }\
+ } else {\
+ for (retry = 0; !info->map; retry++) {\
+ GRN_ATOMIC_ADD_EX(pnref, 1, nref);\
+ if (nref) {\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ if (retry >= GRN_IO_MAX_RETRY) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT, "deadlock detected!!!! in GRN_IO_SEG_REF(%p, %u)", io, segno);\
+ break;\
+ }\
+ GRN_FUTEX_WAIT(pnref);\
+ } else {\
+ if (!info->map) {\
+ grn_io_seg_map_(ctx, io, segno, info);\
+ if (!info->map) {\
+ GRN_LOG(ctx, GRN_LOG_CRIT,\
+ "mmap failed!!!! in GRN_IO_SEG_REF(%p, %u): %s",\
+ io, segno, grn_current_error_message());\
+ }\
+ }\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ GRN_FUTEX_WAKE(pnref);\
+ break;\
+ }\
+ }\
+ info->count = grn_gtick;\
+ }\
+ addr = info->map;\
+} while (0)
+
+#define GRN_IO_SEG_UNREF(io,segno) do {\
+ if (GRN_IO_EXPIRE_SEGMENT ==\
+ (io->flags & (GRN_IO_EXPIRE_GTICK|GRN_IO_EXPIRE_SEGMENT))) {\
+ uint32_t nref, *pnref = &(io)->maps[segno].nref;\
+ GRN_ATOMIC_ADD_EX(pnref, -1, nref);\
+ }\
+} while (0)
+
+uint32_t grn_io_base_seg(grn_io *io);
+const char *grn_io_path(grn_io *io);
+
+typedef struct _grn_io_array_spec grn_io_array_spec;
+
+struct _grn_io_array_spec {
+ uint32_t w_of_element;
+ uint32_t max_n_segments;
+};
+
+struct _grn_io_array_info {
+ uint32_t w_of_elm_in_a_segment;
+ uint32_t elm_mask_in_a_segment;
+ uint32_t max_n_segments;
+ uint32_t element_size;
+ uint32_t *segments;
+ void **addrs;
+};
+
+grn_io *grn_io_create_with_array(grn_ctx *ctx, const char *path, uint32_t header_size,
+ uint32_t segment_size, grn_io_mode mode,
+ int n_arrays, grn_io_array_spec *array_specs);
+
+void *grn_io_array_at(grn_ctx *ctx, grn_io *io, uint32_t array, off_t offset, int *flags);
+
+void grn_io_segment_alloc(grn_ctx *ctx, grn_io *io, grn_io_array_info *ai,
+ uint32_t lseg, int *flags, void **p);
+
+GRN_API grn_rc grn_io_lock(grn_ctx *ctx, grn_io *io, int timeout);
+GRN_API void grn_io_unlock(grn_io *io);
+void grn_io_clear_lock(grn_io *io);
+uint32_t grn_io_is_locked(grn_io *io);
+
+#define GRN_IO_ARRAY_AT(io,array,offset,flags,res) do {\
+ grn_io_array_info *ainfo = &(io)->ainfo[array];\
+ uint32_t lseg = (offset) >> ainfo->w_of_elm_in_a_segment;\
+ void **p_ = &ainfo->addrs[lseg];\
+ if (!*p_) {\
+ grn_io_segment_alloc(ctx, (io), ainfo, lseg, (flags), p_);\
+ if (!*p_) { (res) = NULL; break; }\
+ }\
+ *((byte **)(&(res))) = (((byte *)*p_) + \
+ (((offset) & ainfo->elm_mask_in_a_segment) * ainfo->element_size));\
+} while (0)
+
+#define GRN_IO_ARRAY_BIT_AT(io,array,offset,res) do {\
+ uint8_t *ptr_;\
+ int flags_ = 0;\
+ GRN_IO_ARRAY_AT((io), (array), ((offset) >> 3) + 1, &flags_, ptr_);\
+ res = ptr_ ? ((*ptr_ >> ((offset) & 7)) & 1) : 0;\
+} while (0)
+
+#define GRN_IO_ARRAY_BIT_ON(io,array,offset) do {\
+ uint8_t *ptr_;\
+ int flags_ = GRN_TABLE_ADD;\
+ GRN_IO_ARRAY_AT((io), (array), ((offset) >> 3) + 1, &flags_, ptr_);\
+ if (ptr_) { *ptr_ |= (1 << ((offset) & 7)); }\
+} while (0)
+
+#define GRN_IO_ARRAY_BIT_OFF(io,array,offset) do {\
+ uint8_t *ptr_;\
+ int flags_ = GRN_TABLE_ADD;\
+ GRN_IO_ARRAY_AT((io), (array), ((offset) >> 3) + 1, &flags_, ptr_);\
+ if (ptr_) { *ptr_ &= ~(1 << ((offset) & 7)); }\
+} while (0)
+
+#define GRN_IO_ARRAY_BIT_FLIP(io,array,offset) do {\
+ uint8_t *ptr_;\
+ int flags_ = GRN_TABLE_ADD;\
+ GRN_IO_ARRAY_AT((io), (array), ((offset) >> 3) + 1, &flags_, ptr_);\
+ if (ptr_) { *ptr_ ^= (1 << ((offset) & 7)); }\
+} while (0)
+
+void *grn_io_anon_map(grn_ctx *ctx, grn_io_mapinfo *mi, size_t length);
+void grn_io_anon_unmap(grn_ctx *ctx, grn_io_mapinfo *mi, size_t length);
+uint32_t grn_io_detect_type(grn_ctx *ctx, const char *path);
+grn_rc grn_io_set_type(grn_io *io, uint32_t type);
+uint32_t grn_io_get_type(grn_io *io);
+
+grn_rc grn_io_init(void);
+grn_rc grn_io_fin(void);
+
+uint32_t grn_io_expire(grn_ctx *ctx, grn_io *io, int count_thresh, uint32_t limit);
+uint32_t grn_expire(grn_ctx *ctx, int count_thresh, uint32_t limit);
+
+/* encode/decode */
+
+#define GRN_B_ENC(v,p) do {\
+ uint8_t *_p = (uint8_t *)p; \
+ uint32_t _v = v; \
+ if (_v < 0x8f) { \
+ *_p++ = _v; \
+ } else if (_v < 0x408f) { \
+ _v -= 0x8f; \
+ *_p++ = 0xc0 + (_v >> 8); \
+ *_p++ = _v & 0xff; \
+ } else if (_v < 0x20408f) { \
+ _v -= 0x408f; \
+ *_p++ = 0xa0 + (_v >> 16); \
+ *_p++ = (_v >> 8) & 0xff; \
+ *_p++ = _v & 0xff; \
+ } else if (_v < 0x1020408f) { \
+ _v -= 0x20408f; \
+ *_p++ = 0x90 + (_v >> 24); \
+ *_p++ = (_v >> 16) & 0xff; \
+ *_p++ = (_v >> 8) & 0xff; \
+ *_p++ = _v & 0xff; \
+ } else { \
+ *_p++ = 0x8f; \
+ memcpy(_p, &_v, sizeof(uint32_t));\
+ _p += sizeof(uint32_t); \
+ } \
+ p = _p; \
+} while (0)
+
+#define GRN_B_ENC_SIZE(v) \
+ ((v) < 0x8f ? 1 : ((v) < 0x408f ? 2 : ((v) < 0x20408f ? 3 : ((v) < 0x1020408f ? 4 : 5))))
+
+#define GRN_B_DEC(v,p) do { \
+ uint8_t *_p = (uint8_t *)p; \
+ uint32_t _v = *_p++; \
+ switch (_v >> 4) { \
+ case 0x08 : \
+ if (_v == 0x8f) { \
+ memcpy(&_v, _p, sizeof(uint32_t));\
+ _p += sizeof(uint32_t); \
+ } \
+ break; \
+ case 0x09 : \
+ _v = (_v - 0x90) * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++ + 0x20408f; \
+ break; \
+ case 0x0a : \
+ case 0x0b : \
+ _v = (_v - 0xa0) * 0x100 + *_p++; \
+ _v = _v * 0x100 + *_p++ + 0x408f; \
+ break; \
+ case 0x0c : \
+ case 0x0d : \
+ case 0x0e : \
+ case 0x0f : \
+ _v = (_v - 0xc0) * 0x100 + *_p++ + 0x8f; \
+ break; \
+ } \
+ v = _v; \
+ p = _p; \
+} while (0)
+
+#define GRN_B_SKIP(p) do { \
+ uint8_t *_p = (uint8_t *)p; \
+ uint32_t _v = *_p++; \
+ switch (_v >> 4) { \
+ case 0x08 : \
+ if (_v == 0x8f) { \
+ _p += sizeof(uint32_t); \
+ } \
+ break; \
+ case 0x09 : \
+ _p += 3; \
+ break; \
+ case 0x0a : \
+ case 0x0b : \
+ _p += 2; \
+ break; \
+ case 0x0c : \
+ case 0x0d : \
+ case 0x0e : \
+ case 0x0f : \
+ _p += 1; \
+ break; \
+ } \
+ p = _p; \
+} while (0)
+
+#define GRN_B_COPY(p2,p1) do { \
+ uint32_t size = 0, _v = *p1++; \
+ *p2++ = _v; \
+ switch (_v >> 4) { \
+ case 0x08 : \
+ size = (_v == 0x8f) ? 4 : 0; \
+ break; \
+ case 0x09 : \
+ size = 3; \
+ break; \
+ case 0x0a : \
+ case 0x0b : \
+ size = 2; \
+ break; \
+ case 0x0c : \
+ case 0x0d : \
+ case 0x0e : \
+ case 0x0f : \
+ size = 1; \
+ break; \
+ } \
+ while (size--) { *p2++ = *p1++; } \
+} while (0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_IO_H */
diff --git a/storage/mroonga/vendor/groonga/lib/libgroonga.c b/storage/mroonga/vendor/groonga/lib/libgroonga.c
new file mode 100644
index 00000000000..19e0941031d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/libgroonga.c
@@ -0,0 +1,8 @@
+#ifdef WIN32
+#include <windows.h>
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void * reserve)
+{
+ return TRUE;
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb.c b/storage/mroonga/vendor/groonga/lib/mrb.c
new file mode 100644
index 00000000000..f05949cef98
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb.c
@@ -0,0 +1,226 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "mrb.h"
+#include "ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+# include <mruby/proc.h>
+# include <mruby/compile.h>
+# include <mruby/string.h>
+#endif
+
+#define BUFFER_SIZE 2048
+
+#ifdef GRN_WITH_MRUBY
+#ifdef WIN32
+static char *win32_ruby_scripts_dir = NULL;
+static char win32_ruby_scripts_dir_buffer[PATH_MAX];
+static const char *
+grn_mrb_get_system_ruby_scripts_dir(void)
+{
+ if (!win32_ruby_scripts_dir) {
+ const char *base_dir;
+ const char *relative_path = GRN_RELATIVE_RUBY_SCRIPTS_DIR;
+ char *path;
+ size_t base_dir_length;
+
+ base_dir = grn_win32_base_dir();
+ base_dir_length = strlen(base_dir);
+ strcpy(win32_ruby_scripts_dir_buffer, base_dir);
+ strcat(win32_ruby_scripts_dir_buffer, "/");
+ strcat(win32_ruby_scripts_dir_buffer, relative_path);
+ win32_ruby_scripts_dir = win32_ruby_scripts_dir_buffer;
+ }
+ return win32_ruby_scripts_dir;
+}
+
+#else /* WIN32 */
+static const char *
+grn_mrb_get_system_ruby_scripts_dir(void)
+{
+ return GRN_RUBY_SCRIPTS_DIR;
+}
+#endif /* WIN32 */
+
+static grn_bool
+grn_mrb_expand_script_path(grn_ctx *ctx, const char *path, char *expanded_path)
+{
+ const char *ruby_scripts_dir;
+ char dir_last_char;
+ int path_length, max_path_length;
+
+ if (path[0] == '/') {
+ expanded_path[0] = '\0';
+ } else {
+ ruby_scripts_dir = getenv("GRN_RUBY_SCRIPTS_DIR");
+ if (!ruby_scripts_dir) {
+ ruby_scripts_dir = grn_mrb_get_system_ruby_scripts_dir();
+ }
+ strcpy(expanded_path, ruby_scripts_dir);
+
+ dir_last_char = ruby_scripts_dir[strlen(expanded_path) - 1];
+ if (dir_last_char != '/') {
+ strcat(expanded_path, "/");
+ }
+ }
+
+ path_length = strlen(path);
+ max_path_length = PATH_MAX - strlen(expanded_path) - 1;
+ if (path_length > max_path_length) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "script path is too long: %d (max: %d) <%s%s>",
+ path_length, max_path_length,
+ expanded_path, path);
+ return GRN_FALSE;
+ }
+
+ strcat(expanded_path, path);
+
+ return GRN_TRUE;
+}
+
+mrb_value
+grn_mrb_load(grn_ctx *ctx, const char *path)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ char expanded_path[PATH_MAX];
+ FILE *file;
+ mrb_value result;
+ struct mrb_parser_state *parser;
+
+ if (!mrb) {
+ return mrb_nil_value();
+ }
+
+ if (!grn_mrb_expand_script_path(ctx, path, expanded_path)) {
+ return mrb_nil_value();
+ }
+
+ file = fopen(expanded_path, "r");
+ if (!file) {
+ char message[BUFFER_SIZE];
+ mrb_value exception;
+ snprintf(message, BUFFER_SIZE - 1,
+ "fopen: failed to open mruby script file: <%s>", expanded_path);
+ SERR(message);
+ exception = mrb_exc_new(mrb, E_ARGUMENT_ERROR,
+ ctx->errbuf, strlen(ctx->errbuf));
+ mrb->exc = mrb_obj_ptr(exception);
+ return mrb_nil_value();
+ }
+
+ parser = mrb_parser_new(mrb);
+ mrb_parser_set_filename(parser, expanded_path);
+ parser->s = parser->send = NULL;
+ parser->f = file;
+ mrb_parser_parse(parser, NULL);
+ fclose(file);
+
+ {
+ struct RProc *proc;
+ proc = mrb_generate_code(mrb, parser);
+ result = mrb_toplevel_run(mrb, proc);
+ }
+ mrb_parser_free(parser);
+
+ return result;
+}
+
+mrb_value
+grn_mrb_eval(grn_ctx *ctx, const char *script, int script_length)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ mrb_value result;
+ struct mrb_parser_state *parser;
+
+ if (!mrb) {
+ return mrb_nil_value();
+ }
+
+ if (script_length < 0) {
+ script_length = strlen(script);
+ }
+ parser = mrb_parse_nstring(mrb, script, script_length, NULL);
+ {
+ struct RProc *proc;
+ struct RClass *eval_context_class;
+ mrb_value eval_context;
+
+ proc = mrb_generate_code(mrb, parser);
+ eval_context_class = mrb_class_get_under(mrb, data->module, "EvalContext");
+ eval_context = mrb_obj_new(mrb, eval_context_class, 0, NULL);
+ result = mrb_context_run(mrb, proc, eval_context, 0);
+ }
+ mrb_parser_free(parser);
+
+ return result;
+}
+
+grn_rc
+grn_mrb_to_grn(grn_ctx *ctx, mrb_value mrb_object, grn_obj *grn_object)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+
+ switch (mrb_type(mrb_object)) {
+ case MRB_TT_FALSE :
+ if (mrb_nil_p(mrb_object)) {
+ grn_obj_reinit(ctx, grn_object, GRN_DB_VOID, 0);
+ } else {
+ grn_obj_reinit(ctx, grn_object, GRN_DB_BOOL, 0);
+ GRN_BOOL_SET(ctx, grn_object, GRN_FALSE);
+ }
+ break;
+ case MRB_TT_TRUE :
+ grn_obj_reinit(ctx, grn_object, GRN_DB_BOOL, 0);
+ GRN_BOOL_SET(ctx, grn_object, GRN_TRUE);
+ break;
+ case MRB_TT_FIXNUM :
+ grn_obj_reinit(ctx, grn_object, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, grn_object, mrb_fixnum(mrb_object));
+ break;
+ case MRB_TT_STRING :
+ grn_obj_reinit(ctx, grn_object, GRN_DB_TEXT, 0);
+ GRN_TEXT_SET(ctx, grn_object,
+ RSTRING_PTR(mrb_object),
+ RSTRING_LEN(mrb_object));
+ break;
+ case MRB_TT_SYMBOL :
+ {
+ const char *name;
+ int name_length;
+
+ grn_obj_reinit(ctx, grn_object, GRN_DB_TEXT, 0);
+ GRN_BULK_REWIND(grn_object);
+ GRN_TEXT_PUTC(ctx, grn_object, ':');
+ name = mrb_sym2name_len(mrb, mrb_symbol(mrb_object), &name_length);
+ GRN_TEXT_PUT(ctx, grn_object, name, name_length);
+ }
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ break;
+ }
+
+ return rc;
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb.h b/storage/mroonga/vendor/groonga/lib/mrb.h
new file mode 100644
index 00000000000..fe51e5e7670
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb.h
@@ -0,0 +1,43 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_H
+#define GRN_MRB_H
+
+#include "groonga_in.h"
+#include "ctx.h"
+
+#ifdef GRN_WITH_MRUBY
+# include <mruby.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef GRN_WITH_MRUBY
+GRN_API mrb_value grn_mrb_eval(grn_ctx *ctx, const char *script, int script_length);
+GRN_API mrb_value grn_mrb_load(grn_ctx *ctx, const char *path);
+GRN_API grn_rc grn_mrb_to_grn(grn_ctx *ctx, mrb_value mrb_object, grn_obj *grn_object);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/Makefile.am b/storage/mroonga/vendor/groonga/lib/mrb/Makefile.am
new file mode 100644
index 00000000000..13b4aeb57d3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/Makefile.am
@@ -0,0 +1,20 @@
+SUBDIRS = \
+ scripts
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_CFLAGS = \
+ $(NO_STRICT_ALIASING_CFLAGS) \
+ $(COVERAGE_CFLAGS) \
+ $(GRN_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+
+noinst_LTLIBRARIES = libgrnmrb.la
+
+include sources.am
+
+CLEANFILES = *.gcno *.gcda
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.c
new file mode 100644
index 00000000000..a350c6b04f3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.c
@@ -0,0 +1,71 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/variable.h>
+#include <mruby/data.h>
+
+#include "../db.h"
+#include "mrb_accessor.h"
+
+static struct mrb_data_type mrb_grn_accessor_type = {
+ "Groonga::Accessor",
+ NULL
+};
+
+static mrb_value
+mrb_grn_accessor_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_accessor_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_accessor_ptr);
+ DATA_TYPE(self) = &mrb_grn_accessor_type;
+ DATA_PTR(self) = mrb_cptr(mrb_accessor_ptr);
+ return self;
+}
+
+static mrb_value
+mrb_grn_accessor_next(mrb_state *mrb, mrb_value self)
+{
+ grn_accessor *accessor;
+
+ accessor = DATA_PTR(self);
+ if (!accessor->next) { return mrb_nil_value(); }
+ return mrb_cptr_value(mrb, accessor->next);
+}
+
+void
+grn_mrb_accessor_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Accessor", data->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_accessor_initialize, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "next",
+ mrb_grn_accessor_next, MRB_ARGS_NONE());
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.h
new file mode 100644
index 00000000000..2aaf32f48f9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_accessor.h
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_ACCESSOR_H
+#define GRN_MRB_ACCESSOR_H
+
+#include "../ctx.h"
+#include "../db.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_accessor_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_ACCESSOR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.c
new file mode 100644
index 00000000000..ad428ea5bde
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.c
@@ -0,0 +1,149 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/variable.h>
+#include <mruby/data.h>
+#include <mruby/numeric.h>
+
+#include "../db.h"
+#include "mrb_bulk.h"
+
+static struct mrb_data_type mrb_grn_bulk_type = {
+ "Groonga::Bulk",
+ NULL
+};
+
+static mrb_value
+mrb_grn_bulk_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_bulk_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_bulk_ptr);
+ DATA_TYPE(self) = &mrb_grn_bulk_type;
+ DATA_PTR(self) = mrb_cptr(mrb_bulk_ptr);
+ return self;
+}
+
+static mrb_value
+mrb_grn_bulk_get_domain(mrb_state *mrb, mrb_value self)
+{
+ grn_obj *bulk;
+
+ bulk = DATA_PTR(self);
+ return mrb_fixnum_value(bulk->header.domain);
+}
+
+static mrb_value
+mrb_grn_bulk_get_value(mrb_state *mrb, mrb_value self)
+{
+ grn_obj *bulk;
+ mrb_value mrb_value_;
+
+ bulk = DATA_PTR(self);
+ switch (bulk->header.domain) {
+ case GRN_DB_INT32 :
+ {
+ int32_t value;
+ value = GRN_INT32_VALUE(bulk);
+ mrb_value_ = mrb_fixnum_value(value);
+ }
+ break;
+ case GRN_DB_UINT32 :
+ {
+ int64_t value;
+ value = GRN_UINT32_VALUE(bulk);
+ if (!FIXABLE(value)) {
+ mrb_raisef(mrb, E_RANGE_ERROR,
+ "can't handle large number: <%S>: max: <%S>",
+ mrb_fixnum_value(value), /* TODO: This will cause overflow */
+ mrb_fixnum_value(MRB_INT_MAX));
+ }
+ mrb_value_ = mrb_fixnum_value(value);
+ }
+ break;
+ default :
+ {
+#define MESSAGE_SIZE 4096
+ char message[MESSAGE_SIZE];
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *domain;
+ char domain_name[GRN_TABLE_MAX_KEY_SIZE];
+ int domain_name_size;
+
+ domain = grn_ctx_at(ctx, bulk->header.domain);
+ if (domain) {
+ domain_name_size = grn_obj_name(ctx, domain,
+ domain_name, GRN_TABLE_MAX_KEY_SIZE);
+ grn_obj_unlink(ctx, domain);
+ } else {
+ strcpy(domain_name, "unknown");
+ domain_name_size = strlen(domain_name);
+ }
+ snprintf(message, MESSAGE_SIZE,
+ "unsupported bulk value type: <%d>(%.*s)",
+ bulk->header.domain,
+ domain_name_size,
+ domain_name);
+ mrb_raise(mrb, E_RANGE_ERROR, message);
+#undef MESSAGE_SIZE
+ }
+ break;
+ }
+
+ return mrb_value_;
+}
+
+static mrb_value
+mrb_grn_bulk_equal(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_other;
+
+ mrb_get_args(mrb, "o", &mrb_other);
+
+ if (!mrb_obj_is_kind_of(mrb, mrb_other, mrb_class(mrb, self))) {
+ return mrb_false_value();
+ }
+
+ return mrb_bool_value(DATA_PTR(self) == DATA_PTR(mrb_other));
+}
+
+void
+grn_mrb_bulk_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Bulk", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_bulk_initialize, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "domain",
+ mrb_grn_bulk_get_domain, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "value",
+ mrb_grn_bulk_get_value, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "==",
+ mrb_grn_bulk_equal, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.h
new file mode 100644
index 00000000000..3be86584dc6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_bulk.h
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_BULK_H
+#define GRN_MRB_BULK_H
+
+#include "../ctx.h"
+#include "../db.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_bulk_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_BULK_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.c
new file mode 100644
index 00000000000..545f070d91c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.c
@@ -0,0 +1,39 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+
+#include "mrb_column.h"
+
+void
+grn_mrb_column_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *object_class = data->object_class;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Column", object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.h
new file mode 100644
index 00000000000..77e0dab82fd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_column.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_COLUMN_H
+#define GRN_MRB_COLUMN_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_column_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_COLUMN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.c
new file mode 100644
index 00000000000..2e7c41edbdf
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.c
@@ -0,0 +1,93 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "mrb_converter.h"
+
+struct RClass *
+grn_mrb_class_from_grn_obj(mrb_state *mrb, grn_obj *object)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_mrb_data *data;
+ struct RClass *klass = NULL;
+
+ data = &(ctx->impl->mrb);
+ switch (object->header.type) {
+ case GRN_ACCESSOR :
+ klass = mrb_class_get_under(mrb, data->module, "Accessor");
+ break;
+ case GRN_BULK :
+ klass = mrb_class_get_under(mrb, data->module, "Bulk");
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ klass = mrb_class_get_under(mrb, data->module, "FixedSizeColumn");
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ klass = mrb_class_get_under(mrb, data->module, "VariableSizeColumn");
+ break;
+ case GRN_COLUMN_INDEX :
+ klass = mrb_class_get_under(mrb, data->module, "IndexColumn");
+ break;
+ case GRN_EXPR :
+ klass = mrb_class_get_under(mrb, data->module, "Expression");
+ break;
+ case GRN_PROC :
+ klass = mrb_class_get_under(mrb, data->module, "Procedure");
+ break;
+ case GRN_VOID :
+ klass = mrb_class_get_under(mrb, data->module, "Void");
+ break;
+ default :
+ break;
+ }
+
+ if (!klass) {
+#define BUFFER_SIZE 1024
+ char buffer[BUFFER_SIZE];
+ snprintf(buffer, BUFFER_SIZE - 1,
+ "can't find class for object type: %#x", object->header.type);
+ mrb_raise(mrb, E_ARGUMENT_ERROR, buffer);
+#undef BUFFER_SIZE
+ }
+
+ return klass;
+}
+
+mrb_value
+grn_mrb_value_from_grn_obj(mrb_state *mrb, grn_obj *object)
+{
+ struct RClass *mrb_class;
+ mrb_value mrb_new_arguments[1];
+ mrb_value mrb_object;
+
+ if (!object) {
+ return mrb_nil_value();
+ }
+
+ mrb_class = grn_mrb_class_from_grn_obj(mrb, object);
+ mrb_new_arguments[0] = mrb_cptr_value(mrb, object);
+ mrb_object = mrb_obj_new(mrb, mrb_class, 1, mrb_new_arguments);
+ return mrb_object;
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.h
new file mode 100644
index 00000000000..27223a8c0bf
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_converter.h
@@ -0,0 +1,37 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_CONVERTER_H
+#define GRN_MRB_CONVERTER_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef GRN_WITH_MRUBY
+struct RClass *grn_mrb_class_from_grn_obj(mrb_state *mrb, grn_obj *object);
+mrb_value grn_mrb_value_from_grn_obj(mrb_state *mrb, grn_obj *object);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_CONVERTER_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.c
new file mode 100644
index 00000000000..3f7bc36202d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.c
@@ -0,0 +1,697 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/variable.h>
+#include <mruby/string.h>
+
+#include "../mrb.h"
+#include "mrb_ctx.h"
+#include "mrb_converter.h"
+
+static mrb_value
+ctx_class_instance(mrb_state *mrb, mrb_value klass)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_value mrb_ctx;
+ mrb_sym iv_name;
+
+ iv_name = mrb_intern_lit(mrb, "@instance");
+ mrb_ctx = mrb_iv_get(mrb, klass, iv_name);
+ if (mrb_nil_p(mrb_ctx)) {
+ struct RBasic *raw_mrb_ctx;
+ raw_mrb_ctx = mrb_obj_alloc(mrb, MRB_TT_DATA, mrb_class_ptr(klass));
+ mrb_ctx = mrb_obj_value(raw_mrb_ctx);
+ DATA_PTR(mrb_ctx) = ctx;
+ mrb_iv_set(mrb, klass, iv_name, mrb_ctx);
+ }
+
+ return mrb_ctx;
+}
+
+static mrb_value
+ctx_array_reference(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *object;
+ char *name;
+ int name_length;
+
+ mrb_get_args(mrb, "s", &name, &name_length);
+ object = grn_ctx_get(ctx, name, name_length);
+
+ return grn_mrb_value_from_grn_obj(mrb, object);
+}
+
+static mrb_value
+ctx_get_rc(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_fixnum_value(ctx->rc);
+}
+
+static mrb_value
+ctx_set_rc(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_int rc;
+
+ mrb_get_args(mrb, "i", &rc);
+ ctx->rc = rc;
+
+ return mrb_fixnum_value(ctx->rc);
+}
+
+static mrb_value
+ctx_get_error_level(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_fixnum_value(ctx->errlvl);
+}
+
+static mrb_value
+ctx_set_error_level(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_int error_level;
+
+ mrb_get_args(mrb, "i", &error_level);
+ ctx->errlvl = error_level;
+
+ return mrb_fixnum_value(ctx->errlvl);
+}
+
+static mrb_value
+ctx_get_error_file(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_str_new_cstr(mrb, ctx->errfile);
+}
+
+static mrb_value
+ctx_set_error_file(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_value error_file;
+
+ mrb_get_args(mrb, "S", &error_file);
+ mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@error_file"), error_file);
+ ctx->errfile = mrb_string_value_cstr(mrb, &error_file);
+
+ return error_file;
+}
+
+static mrb_value
+ctx_get_error_line(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_fixnum_value(ctx->errline);
+}
+
+static mrb_value
+ctx_set_error_line(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_int error_line;
+
+ mrb_get_args(mrb, "i", &error_line);
+ ctx->errline = error_line;
+
+ return mrb_fixnum_value(ctx->errline);
+}
+
+static mrb_value
+ctx_get_error_method(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_str_new_cstr(mrb, ctx->errfunc);
+}
+
+static mrb_value
+ctx_set_error_method(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_value error_method;
+
+ mrb_get_args(mrb, "S", &error_method);
+ mrb_iv_set(mrb, self, mrb_intern_lit(mrb, "@error_method"), error_method);
+ ctx->errfunc = mrb_string_value_cstr(mrb, &error_method);
+
+ return error_method;
+}
+
+static mrb_value
+ctx_get_error_message(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_str_new_cstr(mrb, ctx->errbuf);
+}
+
+static mrb_value
+ctx_set_error_message(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_value error_message;
+
+ mrb_get_args(mrb, "S", &error_message);
+ grn_ctx_log(ctx, "%.*s",
+ RSTRING_LEN(error_message),
+ RSTRING_PTR(error_message));
+
+ return error_message;
+}
+
+void
+grn_mrb_ctx_check(mrb_state *mrb)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ struct RClass *module = data->module;
+ struct RClass *error_class;
+#define MESSAGE_SIZE 4096
+ char message[MESSAGE_SIZE];
+
+ switch (ctx->rc) {
+ case GRN_SUCCESS:
+ return;
+ case GRN_END_OF_DATA:
+ error_class = mrb_class_get_under(mrb, module, "EndOfData");
+ snprintf(message, MESSAGE_SIZE,
+ "end of data: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_UNKNOWN_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "UnknownError");
+ snprintf(message, MESSAGE_SIZE,
+ "unknown error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_OPERATION_NOT_PERMITTED:
+ error_class = mrb_class_get_under(mrb, module, "OperationNotPermitted");
+ snprintf(message, MESSAGE_SIZE,
+ "operation not permitted: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_SUCH_FILE_OR_DIRECTORY:
+ error_class = mrb_class_get_under(mrb, module, "NoSuchFileOrDirectory");
+ snprintf(message, MESSAGE_SIZE,
+ "no such file or directory: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_SUCH_PROCESS:
+ error_class = mrb_class_get_under(mrb, module, "NoSuchProcess");
+ snprintf(message, MESSAGE_SIZE,
+ "no such process: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INTERRUPTED_FUNCTION_CALL:
+ error_class = mrb_class_get_under(mrb, module, "InterruptedFunctionCall");
+ snprintf(message, MESSAGE_SIZE,
+ "interrupted function call: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INPUT_OUTPUT_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "InputOutputError");
+ snprintf(message, MESSAGE_SIZE,
+ "input output error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_SUCH_DEVICE_OR_ADDRESS:
+ error_class = mrb_class_get_under(mrb, module, "NoSuchDeviceOrAddress");
+ snprintf(message, MESSAGE_SIZE,
+ "no such device or address: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_ARG_LIST_TOO_LONG:
+ error_class = mrb_class_get_under(mrb, module, "ArgListTooLong");
+ snprintf(message, MESSAGE_SIZE,
+ "arg list too long: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_EXEC_FORMAT_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "ExecFormatError");
+ snprintf(message, MESSAGE_SIZE,
+ "exec format error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_BAD_FILE_DESCRIPTOR:
+ error_class = mrb_class_get_under(mrb, module, "BadFileDescriptor");
+ snprintf(message, MESSAGE_SIZE,
+ "bad file descriptor: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_CHILD_PROCESSES:
+ error_class = mrb_class_get_under(mrb, module, "NoChildProcesses");
+ snprintf(message, MESSAGE_SIZE,
+ "no child processes: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RESOURCE_TEMPORARILY_UNAVAILABLE:
+ error_class = mrb_class_get_under(mrb, module,
+ "ResourceTemporarilyUnavailable");
+ snprintf(message, MESSAGE_SIZE,
+ "resource temporarily unavailable: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NOT_ENOUGH_SPACE:
+ error_class = mrb_class_get_under(mrb, module, "NotEnoughSpace");
+ snprintf(message, MESSAGE_SIZE,
+ "not enough space: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_PERMISSION_DENIED:
+ error_class = mrb_class_get_under(mrb, module, "PermissionDenied");
+ snprintf(message, MESSAGE_SIZE,
+ "permission denied: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_BAD_ADDRESS:
+ error_class = mrb_class_get_under(mrb, module, "BadAddress");
+ snprintf(message, MESSAGE_SIZE,
+ "bad address: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RESOURCE_BUSY:
+ error_class = mrb_class_get_under(mrb, module, "ResourceBusy");
+ snprintf(message, MESSAGE_SIZE,
+ "resource busy: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_FILE_EXISTS:
+ error_class = mrb_class_get_under(mrb, module, "FileExists");
+ snprintf(message, MESSAGE_SIZE,
+ "file exists: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_IMPROPER_LINK:
+ error_class = mrb_class_get_under(mrb, module, "ImproperLink");
+ snprintf(message, MESSAGE_SIZE,
+ "improper link: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_SUCH_DEVICE:
+ error_class = mrb_class_get_under(mrb, module, "NoSuchDevice");
+ snprintf(message, MESSAGE_SIZE,
+ "no such device: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NOT_A_DIRECTORY:
+ error_class = mrb_class_get_under(mrb, module, "NotDirectory");
+ snprintf(message, MESSAGE_SIZE,
+ "not directory: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_IS_A_DIRECTORY:
+ error_class = mrb_class_get_under(mrb, module, "IsDirectory");
+ snprintf(message, MESSAGE_SIZE,
+ "is directory: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INVALID_ARGUMENT:
+ error_class = mrb_class_get_under(mrb, module, "InvalidArgument");
+ snprintf(message, MESSAGE_SIZE,
+ "invalid argument: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_MANY_OPEN_FILES_IN_SYSTEM:
+ error_class = mrb_class_get_under(mrb, module, "TooManyOpenFilesInSystem");
+ snprintf(message, MESSAGE_SIZE,
+ "too many open files in system: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_MANY_OPEN_FILES:
+ error_class = mrb_class_get_under(mrb, module, "TooManyOpenFiles");
+ snprintf(message, MESSAGE_SIZE,
+ "too many open files: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INAPPROPRIATE_I_O_CONTROL_OPERATION:
+ error_class = mrb_class_get_under(mrb, module,
+ "InappropriateIOControlOperation");
+ snprintf(message, MESSAGE_SIZE,
+ "inappropriate IO control operation: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_FILE_TOO_LARGE:
+ error_class = mrb_class_get_under(mrb, module, "FileTooLarge");
+ snprintf(message, MESSAGE_SIZE,
+ "file too large: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_SPACE_LEFT_ON_DEVICE:
+ error_class = mrb_class_get_under(mrb, module, "NoSpaceLeftOnDevice");
+ snprintf(message, MESSAGE_SIZE,
+ "no space left on device: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INVALID_SEEK:
+ error_class = mrb_class_get_under(mrb, module, "InvalidSeek");
+ snprintf(message, MESSAGE_SIZE,
+ "invalid seek: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_READ_ONLY_FILE_SYSTEM:
+ error_class = mrb_class_get_under(mrb, module, "ReadOnlyFileSystem");
+ snprintf(message, MESSAGE_SIZE,
+ "read only file system: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_MANY_LINKS:
+ error_class = mrb_class_get_under(mrb, module, "TooManyLinks");
+ snprintf(message, MESSAGE_SIZE,
+ "too many links: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_BROKEN_PIPE:
+ error_class = mrb_class_get_under(mrb, module, "BrokenPipe");
+ snprintf(message, MESSAGE_SIZE,
+ "broken pipe: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_DOMAIN_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "DomainError");
+ snprintf(message, MESSAGE_SIZE,
+ "domain error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RESULT_TOO_LARGE:
+ error_class = mrb_class_get_under(mrb, module, "ResultTooLarge");
+ snprintf(message, MESSAGE_SIZE,
+ "result too large: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RESOURCE_DEADLOCK_AVOIDED:
+ error_class = mrb_class_get_under(mrb, module, "ResourceDeadlockAvoided");
+ snprintf(message, MESSAGE_SIZE,
+ "resource deadlock avoided: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_MEMORY_AVAILABLE:
+ error_class = mrb_class_get_under(mrb, module, "NoMemoryAvailable");
+ snprintf(message, MESSAGE_SIZE,
+ "no memory available: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_FILENAME_TOO_LONG:
+ error_class = mrb_class_get_under(mrb, module, "FilenameTooLong");
+ snprintf(message, MESSAGE_SIZE,
+ "filename too long: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_LOCKS_AVAILABLE:
+ error_class = mrb_class_get_under(mrb, module, "NoLocksAvailable");
+ snprintf(message, MESSAGE_SIZE,
+ "no locks available: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_FUNCTION_NOT_IMPLEMENTED:
+ error_class = mrb_class_get_under(mrb, module, "FunctionNotImplemented");
+ snprintf(message, MESSAGE_SIZE,
+ "function not implemented: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_DIRECTORY_NOT_EMPTY:
+ error_class = mrb_class_get_under(mrb, module, "DirectoryNotEmpty");
+ snprintf(message, MESSAGE_SIZE,
+ "directory not empty: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_ILLEGAL_BYTE_SEQUENCE:
+ error_class = mrb_class_get_under(mrb, module, "IllegalByteSequence");
+ snprintf(message, MESSAGE_SIZE,
+ "illegal byte sequence: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_SOCKET_NOT_INITIALIZED:
+ error_class = mrb_class_get_under(mrb, module, "SocketNotInitialized");
+ snprintf(message, MESSAGE_SIZE,
+ "socket not initialized: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_OPERATION_WOULD_BLOCK:
+ error_class = mrb_class_get_under(mrb, module, "OperationWouldBlock");
+ snprintf(message, MESSAGE_SIZE,
+ "operation would block: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_ADDRESS_IS_NOT_AVAILABLE:
+ error_class = mrb_class_get_under(mrb, module, "AddressIsNotAvailable");
+ snprintf(message, MESSAGE_SIZE,
+ "address is not available: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NETWORK_IS_DOWN:
+ error_class = mrb_class_get_under(mrb, module, "NetworkIsDown");
+ snprintf(message, MESSAGE_SIZE,
+ "network is down: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NO_BUFFER:
+ error_class = mrb_class_get_under(mrb, module, "NoBuffer");
+ snprintf(message, MESSAGE_SIZE,
+ "no buffer: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_SOCKET_IS_ALREADY_CONNECTED:
+ error_class = mrb_class_get_under(mrb, module, "SocketIsAlreadyConnected");
+ snprintf(message, MESSAGE_SIZE,
+ "socket is already connected: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_SOCKET_IS_NOT_CONNECTED:
+ error_class = mrb_class_get_under(mrb, module, "SocketIsNotConnected");
+ snprintf(message, MESSAGE_SIZE,
+ "socket is not connected: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_SOCKET_IS_ALREADY_SHUTDOWNED:
+ error_class = mrb_class_get_under(mrb, module, "SocketIsAlreadyShutdowned");
+ snprintf(message, MESSAGE_SIZE,
+ "socket is already shutdowned: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_OPERATION_TIMEOUT:
+ error_class = mrb_class_get_under(mrb, module, "OperationTimeout");
+ snprintf(message, MESSAGE_SIZE,
+ "operation timeout: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_CONNECTION_REFUSED:
+ error_class = mrb_class_get_under(mrb, module, "ConnectionRefused");
+ snprintf(message, MESSAGE_SIZE,
+ "connection refused: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RANGE_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "RangeError");
+ snprintf(message, MESSAGE_SIZE,
+ "range error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOKENIZER_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "TokenizerError");
+ snprintf(message, MESSAGE_SIZE,
+ "tokenizer error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_FILE_CORRUPT:
+ error_class = mrb_class_get_under(mrb, module, "FileCorrupt");
+ snprintf(message, MESSAGE_SIZE,
+ "file corrupt: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INVALID_FORMAT:
+ error_class = mrb_class_get_under(mrb, module, "InvalidFormat");
+ snprintf(message, MESSAGE_SIZE,
+ "invalid format: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_OBJECT_CORRUPT:
+ error_class = mrb_class_get_under(mrb, module, "ObjectCorrupt");
+ snprintf(message, MESSAGE_SIZE,
+ "object corrupt: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_MANY_SYMBOLIC_LINKS:
+ error_class = mrb_class_get_under(mrb, module, "TooManySymbolicLinks");
+ snprintf(message, MESSAGE_SIZE,
+ "too many symbolic links: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NOT_SOCKET:
+ error_class = mrb_class_get_under(mrb, module, "NotSocket");
+ snprintf(message, MESSAGE_SIZE,
+ "not socket: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_OPERATION_NOT_SUPPORTED:
+ error_class = mrb_class_get_under(mrb, module, "OperationNotSupported");
+ snprintf(message, MESSAGE_SIZE,
+ "operation not supported: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_ADDRESS_IS_IN_USE:
+ error_class = mrb_class_get_under(mrb, module, "AddressIsInUse");
+ snprintf(message, MESSAGE_SIZE,
+ "address is in use: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_ZLIB_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "ZlibError");
+ snprintf(message, MESSAGE_SIZE,
+ "zlib error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_LZO_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "LzoError");
+ snprintf(message, MESSAGE_SIZE,
+ "LZO error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_STACK_OVER_FLOW:
+ error_class = mrb_class_get_under(mrb, module, "StackOverFlow");
+ snprintf(message, MESSAGE_SIZE,
+ "stack over flow: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_SYNTAX_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "SyntaxError");
+ snprintf(message, MESSAGE_SIZE,
+ "syntax error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_RETRY_MAX:
+ error_class = mrb_class_get_under(mrb, module, "RetryMax");
+ snprintf(message, MESSAGE_SIZE,
+ "retry max: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_INCOMPATIBLE_FILE_FORMAT:
+ error_class = mrb_class_get_under(mrb, module, "IncompatibleFileFormat");
+ snprintf(message, MESSAGE_SIZE,
+ "incompatible file format: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_UPDATE_NOT_ALLOWED:
+ error_class = mrb_class_get_under(mrb, module, "UpdateNotAllowed");
+ snprintf(message, MESSAGE_SIZE,
+ "update not allowed: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_SMALL_OFFSET:
+ error_class = mrb_class_get_under(mrb, module, "TooSmallOffset");
+ snprintf(message, MESSAGE_SIZE,
+ "too small offset: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_LARGE_OFFSET:
+ error_class = mrb_class_get_under(mrb, module, "TooLargeOffset");
+ snprintf(message, MESSAGE_SIZE,
+ "too large offset: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_TOO_SMALL_LIMIT:
+ error_class = mrb_class_get_under(mrb, module, "TooSmallLimit");
+ snprintf(message, MESSAGE_SIZE,
+ "too small limit: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_CAS_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "CASError");
+ snprintf(message, MESSAGE_SIZE,
+ "CAS error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_UNSUPPORTED_COMMAND_VERSION:
+ error_class = mrb_class_get_under(mrb, module, "UnsupportedCommandVersion");
+ snprintf(message, MESSAGE_SIZE,
+ "unsupported command version: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ case GRN_NORMALIZER_ERROR:
+ error_class = mrb_class_get_under(mrb, module, "NormalizerError");
+ snprintf(message, MESSAGE_SIZE,
+ "normalizer error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ default:
+ error_class = mrb_class_get_under(mrb, module, "Error");
+ snprintf(message, MESSAGE_SIZE,
+ "unsupported error: <%s>(%d)",
+ ctx->errbuf, ctx->rc);
+ break;
+ }
+#undef MESSAGE_SIZE
+
+ mrb_raise(mrb, error_class, message);
+}
+
+void
+grn_mrb_ctx_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Context", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+
+ mrb_define_class_method(mrb, klass, "instance",
+ ctx_class_instance, MRB_ARGS_NONE());
+
+ mrb_define_method(mrb, klass, "[]", ctx_array_reference, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "rc", ctx_get_rc, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "rc=", ctx_set_rc, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "error_level", ctx_get_error_level,
+ MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "error_level=", ctx_set_error_level,
+ MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "error_file", ctx_get_error_file,
+ MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "error_file=", ctx_set_error_file,
+ MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "error_line", ctx_get_error_line,
+ MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "error_line=", ctx_set_error_line,
+ MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "error_method", ctx_get_error_method,
+ MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "error_method=", ctx_set_error_method,
+ MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "error_message", ctx_get_error_message,
+ MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "error_message=", ctx_set_error_message,
+ MRB_ARGS_REQ(1));
+
+ grn_mrb_load(ctx, "context/error_level.rb");
+ grn_mrb_load(ctx, "context/rc.rb");
+ grn_mrb_load(ctx, "context.rb");
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.h
new file mode 100644
index 00000000000..5068d0d75e2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_ctx.h
@@ -0,0 +1,37 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_CTX_H
+#define GRN_MRB_CTX_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_ctx_init(grn_ctx *ctx);
+#ifdef GRN_WITH_MRUBY
+void grn_mrb_ctx_check(mrb_state *mrb);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_CTX_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.c
new file mode 100644
index 00000000000..2f45cfc736e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.c
@@ -0,0 +1,185 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+
+#include "../mrb.h"
+#include "mrb_error.h"
+
+void
+grn_mrb_error_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *error_class;
+
+ error_class = mrb_define_class_under(mrb, module, "Error",
+ mrb->eStandardError_class);
+
+ mrb_define_class_under(mrb, module, "EndOfData",
+ error_class);
+ mrb_define_class_under(mrb, module, "UnknownError",
+ error_class);
+ mrb_define_class_under(mrb, module, "OperationNotPermitted",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoSuchFileOrDirectory",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoSuchProcess",
+ error_class);
+ mrb_define_class_under(mrb, module, "InterruptedFunctionCall",
+ error_class);
+ mrb_define_class_under(mrb, module, "InputOutputError",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoSuchDeviceOrAddress",
+ error_class);
+ mrb_define_class_under(mrb, module, "ArgListTooLong",
+ error_class);
+ mrb_define_class_under(mrb, module, "ExecFormatError",
+ error_class);
+ mrb_define_class_under(mrb, module, "BadFileDescriptor",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoChildProcesses",
+ error_class);
+ mrb_define_class_under(mrb, module, "ResourceTemporarilyUnavailable",
+ error_class);
+ mrb_define_class_under(mrb, module, "NotEnoughSpace",
+ error_class);
+ mrb_define_class_under(mrb, module, "PermissionDenied",
+ error_class);
+ mrb_define_class_under(mrb, module, "BadAddress",
+ error_class);
+ mrb_define_class_under(mrb, module, "ResourceBusy",
+ error_class);
+ mrb_define_class_under(mrb, module, "FileExists",
+ error_class);
+ mrb_define_class_under(mrb, module, "ImproperLink",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoSuchDevice",
+ error_class);
+ mrb_define_class_under(mrb, module, "NotDirectory",
+ error_class);
+ mrb_define_class_under(mrb, module, "IsDirectory",
+ error_class);
+ mrb_define_class_under(mrb, module, "InvalidArgument",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooManyOpenFilesInSystem",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooManyOpenFiles",
+ error_class);
+ mrb_define_class_under(mrb, module, "InappropriateIOControlOperation",
+ error_class);
+ mrb_define_class_under(mrb, module, "FileTooLarge",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoSpaceLeftOnDevice",
+ error_class);
+ mrb_define_class_under(mrb, module, "InvalidSeek",
+ error_class);
+ mrb_define_class_under(mrb, module, "ReadOnlyFileSystem",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooManyLinks",
+ error_class);
+ mrb_define_class_under(mrb, module, "BrokenPipe",
+ error_class);
+ mrb_define_class_under(mrb, module, "DomainError",
+ error_class);
+ mrb_define_class_under(mrb, module, "ResultTooLarge",
+ error_class);
+ mrb_define_class_under(mrb, module, "ResourceDeadlockAvoided",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoMemoryAvailable",
+ error_class);
+ mrb_define_class_under(mrb, module, "FilenameTooLong",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoLocksAvailable",
+ error_class);
+ mrb_define_class_under(mrb, module, "FunctionNotImplemented",
+ error_class);
+ mrb_define_class_under(mrb, module, "DirectoryNotEmpty",
+ error_class);
+ mrb_define_class_under(mrb, module, "IllegalByteSequence",
+ error_class);
+ mrb_define_class_under(mrb, module, "SocketNotInitialized",
+ error_class);
+ mrb_define_class_under(mrb, module, "OperationWouldBlock",
+ error_class);
+ mrb_define_class_under(mrb, module, "AddressIsNotAvailable",
+ error_class);
+ mrb_define_class_under(mrb, module, "NetworkIsDown",
+ error_class);
+ mrb_define_class_under(mrb, module, "NoBuffer",
+ error_class);
+ mrb_define_class_under(mrb, module, "SocketIsAlreadyConnected",
+ error_class);
+ mrb_define_class_under(mrb, module, "SocketIsNotConnected",
+ error_class);
+ mrb_define_class_under(mrb, module, "SocketIsAlreadyShutdowned",
+ error_class);
+ mrb_define_class_under(mrb, module, "OperationTimeout",
+ error_class);
+ mrb_define_class_under(mrb, module, "ConnectionRefused",
+ error_class);
+ mrb_define_class_under(mrb, module, "RangeError",
+ error_class);
+ mrb_define_class_under(mrb, module, "TokenizerError",
+ error_class);
+ mrb_define_class_under(mrb, module, "FileCorrupt",
+ error_class);
+ mrb_define_class_under(mrb, module, "InvalidFormat",
+ error_class);
+ mrb_define_class_under(mrb, module, "ObjectCorrupt",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooManySymbolicLinks",
+ error_class);
+ mrb_define_class_under(mrb, module, "NotSocket",
+ error_class);
+ mrb_define_class_under(mrb, module, "OperationNotSupported",
+ error_class);
+ mrb_define_class_under(mrb, module, "AddressIsInUse",
+ error_class);
+ mrb_define_class_under(mrb, module, "ZlibError",
+ error_class);
+ mrb_define_class_under(mrb, module, "LzoError",
+ error_class);
+ mrb_define_class_under(mrb, module, "StackOverFlow",
+ error_class);
+ mrb_define_class_under(mrb, module, "SyntaxError",
+ error_class);
+ mrb_define_class_under(mrb, module, "RetryMax",
+ error_class);
+ mrb_define_class_under(mrb, module, "IncompatibleFileFormat",
+ error_class);
+ mrb_define_class_under(mrb, module, "UpdateNotAllowed",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooSmallOffset",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooLargeOffset",
+ error_class);
+ mrb_define_class_under(mrb, module, "TooSmallLimit",
+ error_class);
+ mrb_define_class_under(mrb, module, "CASError",
+ error_class);
+ mrb_define_class_under(mrb, module, "UnsupportedCommandVersion",
+ error_class);
+ mrb_define_class_under(mrb, module, "NormalizerError",
+ error_class);
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.h
new file mode 100644
index 00000000000..c59fabc12af
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_error.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_ERROR_H
+#define GRN_MRB_ERROR_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_error_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_ERROR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.c
new file mode 100644
index 00000000000..3d0499c6b5c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.c
@@ -0,0 +1,538 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/variable.h>
+#include <mruby/data.h>
+#include <mruby/string.h>
+#include <mruby/array.h>
+
+#include "../expr.h"
+#include "../util.h"
+#include "../mrb.h"
+#include "mrb_accessor.h"
+#include "mrb_ctx.h"
+#include "mrb_expr.h"
+#include "mrb_converter.h"
+
+static struct mrb_data_type mrb_grn_scan_info_type = {
+ "Groonga::ScanInfo",
+ NULL
+};
+static struct mrb_data_type mrb_grn_expr_code_type = {
+ "Groonga::ExpressionCode",
+ NULL
+};
+static struct mrb_data_type mrb_grn_expression_type = {
+ "Groonga::Expression",
+ NULL
+};
+
+static mrb_value
+mrb_grn_scan_info_new(mrb_state *mrb, scan_info *scan_info)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ struct RClass *module = ctx->impl->mrb.module;
+ struct RClass *klass;
+ mrb_value mrb_scan_info;
+
+ mrb_scan_info = mrb_cptr_value(mrb, scan_info);
+ klass = mrb_class_get_under(mrb, module, "ScanInfo");
+ return mrb_obj_new(mrb, klass, 1, &mrb_scan_info);
+}
+
+static mrb_value
+mrb_grn_expr_code_new(mrb_state *mrb, grn_expr_code *code)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ struct RClass *module = ctx->impl->mrb.module;
+ struct RClass *klass;
+ mrb_value mrb_code;
+
+ mrb_code = mrb_cptr_value(mrb, code);
+ klass = mrb_class_get_under(mrb, module, "ExpressionCode");
+ return mrb_obj_new(mrb, klass, 1, &mrb_code);
+}
+
+static mrb_value
+mrb_grn_scan_info_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_ptr);
+ DATA_TYPE(self) = &mrb_grn_scan_info_type;
+ DATA_PTR(self) = mrb_cptr(mrb_ptr);
+ return self;
+}
+
+static mrb_value
+mrb_grn_expr_code_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_code;
+
+ mrb_get_args(mrb, "o", &mrb_code);
+ DATA_TYPE(self) = &mrb_grn_expr_code_type;
+ DATA_PTR(self) = mrb_cptr(mrb_code);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_put_index(mrb_state *mrb, mrb_value self)
+{
+ int sid;
+ int32_t weight;
+ scan_info *si;
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *index;
+ mrb_value mrb_index;
+
+ mrb_get_args(mrb, "oii", &mrb_index, &sid, &weight);
+ si = DATA_PTR(self);
+ index = DATA_PTR(mrb_index);
+ grn_scan_info_put_index(ctx, si, index, sid, weight);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_get_op(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ grn_operator op;
+
+ si = DATA_PTR(self);
+ op = grn_scan_info_get_op(si);
+ return mrb_fixnum_value(op);
+}
+
+static mrb_value
+mrb_grn_scan_info_set_op(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ grn_operator op;
+
+ mrb_get_args(mrb, "i", &op);
+ si = DATA_PTR(self);
+ grn_scan_info_set_op(si, op);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_set_end(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int end;
+
+ mrb_get_args(mrb, "i", &end);
+ si = DATA_PTR(self);
+ grn_scan_info_set_end(si, end);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_set_query(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ mrb_value mrb_query;
+
+ mrb_get_args(mrb, "o", &mrb_query);
+ si = DATA_PTR(self);
+ if (mrb_nil_p(mrb_query)) {
+ grn_scan_info_set_query(si, NULL);
+ } else {
+ grn_scan_info_set_query(si, DATA_PTR(mrb_query));
+ }
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_set_flags(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int flags;
+
+ mrb_get_args(mrb, "i", &flags);
+ si = DATA_PTR(self);
+ grn_scan_info_set_flags(si, flags);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_get_flags(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int flags;
+
+ si = DATA_PTR(self);
+ flags = grn_scan_info_get_flags(si);
+ return mrb_fixnum_value(flags);
+}
+
+static mrb_value
+mrb_grn_scan_info_set_logical_op(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ grn_operator logical_op;
+
+ mrb_get_args(mrb, "i", &logical_op);
+ si = DATA_PTR(self);
+ grn_scan_info_set_logical_op(si, logical_op);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_get_logical_op(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ grn_operator logical_op;
+
+ si = DATA_PTR(self);
+ logical_op = grn_scan_info_get_logical_op(si);
+ return mrb_fixnum_value(logical_op);
+}
+
+static mrb_value
+mrb_grn_scan_info_set_max_interval(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int max_interval;
+
+ mrb_get_args(mrb, "i", &max_interval);
+ si = DATA_PTR(self);
+ grn_scan_info_set_max_interval(si, max_interval);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_get_max_interval(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int max_interval;
+
+ si = DATA_PTR(self);
+ max_interval = grn_scan_info_get_max_interval(si);
+ return mrb_fixnum_value(max_interval);
+}
+
+static mrb_value
+mrb_grn_scan_info_set_similarity_threshold(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int similarity_threshold;
+
+ mrb_get_args(mrb, "i", &similarity_threshold);
+ si = DATA_PTR(self);
+ grn_scan_info_set_similarity_threshold(si, similarity_threshold);
+ return self;
+}
+
+static mrb_value
+mrb_grn_scan_info_get_similarity_threshold(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ int similarity_threshold;
+
+ si = DATA_PTR(self);
+ similarity_threshold = grn_scan_info_get_similarity_threshold(si);
+ return mrb_fixnum_value(similarity_threshold);
+}
+
+static mrb_value
+mrb_grn_scan_info_get_arg(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ scan_info *si;
+ int index;
+ grn_obj *arg;
+
+ mrb_get_args(mrb, "i", &index);
+
+ si = DATA_PTR(self);
+ arg = grn_scan_info_get_arg(ctx, si, index);
+
+ return grn_mrb_value_from_grn_obj(mrb, arg);
+}
+
+static mrb_value
+mrb_grn_scan_info_push_arg(mrb_state *mrb, mrb_value self)
+{
+ scan_info *si;
+ mrb_value mrb_arg;
+ grn_bool success;
+
+ mrb_get_args(mrb, "o", &mrb_arg);
+
+ si = DATA_PTR(self);
+ success = grn_scan_info_push_arg(si, DATA_PTR(mrb_arg));
+
+ return mrb_bool_value(success);
+}
+
+static mrb_value
+mrb_grn_expr_code_get_weight(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+
+ return mrb_fixnum_value(grn_expr_code_get_weight(ctx, DATA_PTR(self)));
+}
+
+static mrb_value
+mrb_grn_expr_code_get_value(mrb_state *mrb, mrb_value self)
+{
+ grn_expr_code *expr_code;
+
+ expr_code = DATA_PTR(self);
+ return grn_mrb_value_from_grn_obj(mrb, expr_code->value);
+}
+
+static mrb_value
+mrb_grn_expr_code_get_op(mrb_state *mrb, mrb_value self)
+{
+ grn_expr_code *expr_code;
+
+ expr_code = DATA_PTR(self);
+ return mrb_fixnum_value(expr_code->op);
+}
+
+static mrb_value
+mrb_grn_expr_code_get_flags(mrb_state *mrb, mrb_value self)
+{
+ grn_expr_code *expr_code;
+
+ expr_code = DATA_PTR(self);
+ return mrb_fixnum_value(expr_code->flags);
+}
+
+static mrb_value
+mrb_grn_expression_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_expression_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_expression_ptr);
+ DATA_TYPE(self) = &mrb_grn_expression_type;
+ DATA_PTR(self) = mrb_cptr(mrb_expression_ptr);
+ return self;
+}
+
+static mrb_value
+mrb_grn_expression_codes(mrb_state *mrb, mrb_value self)
+{
+ grn_expr *expr;
+ mrb_value mrb_codes;
+ int i;
+
+ expr = DATA_PTR(self);
+ mrb_codes = mrb_ary_new_capa(mrb, expr->codes_curr);
+ for (i = 0; i < expr->codes_curr; i++) {
+ grn_expr_code *code = expr->codes + i;
+ mrb_ary_push(mrb, mrb_codes, mrb_grn_expr_code_new(mrb, code));
+ }
+
+ return mrb_codes;
+}
+
+static mrb_value
+mrb_grn_expression_get_var_by_offset(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *expr;
+ mrb_int offset;
+ grn_obj *var;
+
+ mrb_get_args(mrb, "i", &offset);
+
+ expr = DATA_PTR(self);
+ var = grn_expr_get_var_by_offset(ctx, expr, offset);
+ return grn_mrb_value_from_grn_obj(mrb, var);
+}
+
+static mrb_value
+mrb_grn_expression_take_object(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *expr;
+ mrb_value mrb_object;
+ grn_obj *grn_object;
+
+ mrb_get_args(mrb, "o", &mrb_object);
+ expr = DATA_PTR(self);
+ grn_object = DATA_PTR(mrb_object);
+ grn_expr_take_obj(ctx, expr, grn_object);
+
+ return mrb_object;
+}
+
+static mrb_value
+mrb_grn_expression_allocate_constant(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *expr;
+ mrb_value mrb_object;
+ grn_obj *grn_object;
+
+ mrb_get_args(mrb, "o", &mrb_object);
+ expr = DATA_PTR(self);
+
+ switch (mrb_type(mrb_object)) {
+ case MRB_TT_STRING:
+ grn_object = grn_expr_alloc_const(ctx, expr);
+ if (!grn_object) {
+ grn_mrb_ctx_check(mrb);
+ }
+ GRN_TEXT_INIT(grn_object, 0);
+ GRN_TEXT_SET(ctx, grn_object,
+ RSTRING_PTR(mrb_object), RSTRING_LEN(mrb_object));
+ break;
+ default:
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "unsupported type: %S", mrb_object);
+ break;
+ }
+
+ return grn_mrb_value_from_grn_obj(mrb, grn_object);
+}
+
+void
+grn_mrb_expr_init(grn_ctx *ctx)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+ struct RClass *module = ctx->impl->mrb.module;
+ struct RClass *object_class = ctx->impl->mrb.object_class;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "ScanInfo", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_scan_info_initialize, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "put_index",
+ mrb_grn_scan_info_put_index, MRB_ARGS_REQ(3));
+ mrb_define_method(mrb, klass, "op",
+ mrb_grn_scan_info_get_op, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "op=",
+ mrb_grn_scan_info_set_op, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "end=",
+ mrb_grn_scan_info_set_end, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "query=",
+ mrb_grn_scan_info_set_query, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "flags",
+ mrb_grn_scan_info_get_flags, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "flags=",
+ mrb_grn_scan_info_set_flags, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "logical_op",
+ mrb_grn_scan_info_get_logical_op, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "logical_op=",
+ mrb_grn_scan_info_set_logical_op, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "max_interval",
+ mrb_grn_scan_info_get_max_interval, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "max_interval=",
+ mrb_grn_scan_info_set_max_interval, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "similarity_threshold",
+ mrb_grn_scan_info_get_similarity_threshold, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "similarity_threshold=",
+ mrb_grn_scan_info_set_similarity_threshold, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "get_arg",
+ mrb_grn_scan_info_get_arg, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "push_arg",
+ mrb_grn_scan_info_push_arg, MRB_ARGS_REQ(1));
+
+ klass = mrb_define_class_under(mrb, module,
+ "ExpressionCode", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_expr_code_initialize, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "weight",
+ mrb_grn_expr_code_get_weight, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "value",
+ mrb_grn_expr_code_get_value, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "op",
+ mrb_grn_expr_code_get_op, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "flags",
+ mrb_grn_expr_code_get_flags, MRB_ARGS_NONE());
+
+ klass = mrb_define_class_under(mrb, module, "Expression", object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_expression_initialize, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "codes",
+ mrb_grn_expression_codes, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "get_var_by_offset",
+ mrb_grn_expression_get_var_by_offset, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "take_object",
+ mrb_grn_expression_take_object, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "allocate_constant",
+ mrb_grn_expression_allocate_constant, MRB_ARGS_REQ(1));
+
+ grn_mrb_load(ctx, "expression.rb");
+ grn_mrb_load(ctx, "scan_info.rb");
+ grn_mrb_load(ctx, "scan_info_data.rb");
+ grn_mrb_load(ctx, "scan_info_builder.rb");
+}
+
+scan_info **
+grn_mrb_scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
+ grn_operator op, uint32_t size)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ mrb_value mrb_expression;
+ mrb_value mrb_sis;
+ scan_info **sis = NULL;
+ int i;
+ int arena_index;
+
+ arena_index = mrb_gc_arena_save(mrb);
+
+ mrb_expression = grn_mrb_value_from_grn_obj(mrb, expr);
+ mrb_sis = mrb_funcall(mrb, mrb_expression, "build_scan_info", 2,
+ mrb_fixnum_value(op),
+ mrb_fixnum_value(size));
+
+ if (mrb_nil_p(mrb_sis)) {
+ goto exit;
+ }
+
+ if (mrb_type(mrb_sis) == MRB_TT_EXCEPTION) {
+ mrb->exc = mrb_obj_ptr(mrb_sis);
+ mrb_print_error(mrb);
+ goto exit;
+ }
+
+ *n = RARRAY_LEN(mrb_sis);
+ sis = GRN_MALLOCN(scan_info *, *n);
+ for (i = 0; i < *n; i++) {
+ mrb_value mrb_si;
+ mrb_value mrb_si_data;
+ scan_info *si;
+ int start;
+
+ mrb_si_data = RARRAY_PTR(mrb_sis)[i];
+ start = mrb_fixnum(mrb_funcall(mrb, mrb_si_data, "start", 0));
+ si = grn_scan_info_open(ctx, start);
+ mrb_si = mrb_grn_scan_info_new(mrb, si);
+ mrb_funcall(mrb, mrb_si, "apply", 1, mrb_si_data);
+ sis[i] = si;
+ }
+
+exit:
+ mrb_gc_arena_restore(mrb, arena_index);
+
+ return sis;
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.h
new file mode 100644
index 00000000000..7fd5c66e9c5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_expr.h
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_EXPR_H
+#define GRN_MRB_EXPR_H
+
+#include "../ctx.h"
+#include "../expr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_expr_init(grn_ctx *ctx);
+scan_info **grn_mrb_scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, grn_operator op, uint32_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_EXPR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.c
new file mode 100644
index 00000000000..d8df913f77d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.c
@@ -0,0 +1,59 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "mrb_fixed_size_column.h"
+
+static struct mrb_data_type mrb_grn_fixed_size_column_type = {
+ "Groonga::FixedSizeColumn",
+ NULL
+};
+
+static mrb_value
+mrb_grn_fixed_size_column_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_fixed_size_column_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_fixed_size_column_ptr);
+ DATA_TYPE(self) = &mrb_grn_fixed_size_column_type;
+ DATA_PTR(self) = mrb_cptr(mrb_fixed_size_column_ptr);
+ return self;
+}
+
+void
+grn_mrb_fixed_size_column_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *column_class;
+ struct RClass *klass;
+
+ column_class = mrb_class_get_under(mrb, module, "Column");
+ klass = mrb_define_class_under(mrb, module, "FixedSizeColumn", column_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_fixed_size_column_initialize, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.h
new file mode 100644
index 00000000000..938dcd76c7a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_fixed_size_column.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_FIXED_SIZE_COLUMN_H
+#define GRN_MRB_FIXED_SIZE_COLUMN_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_fixed_size_column_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_FIXED_SIZE_COLUMN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.c
new file mode 100644
index 00000000000..aa907b84a43
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.c
@@ -0,0 +1,74 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+
+#include "mrb_id.h"
+
+void
+grn_mrb_id_init(grn_ctx *ctx)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+ struct RClass *module = ctx->impl->mrb.module;
+ struct RClass *id_module;
+
+ id_module = mrb_define_module_under(mrb, module, "ID");
+
+ mrb_define_const(mrb, id_module, "VOID",
+ mrb_fixnum_value(GRN_DB_VOID));
+ mrb_define_const(mrb, id_module, "DB",
+ mrb_fixnum_value(GRN_DB_DB));
+ mrb_define_const(mrb, id_module, "OBJECT",
+ mrb_fixnum_value(GRN_DB_OBJECT));
+ mrb_define_const(mrb, id_module, "BOOL",
+ mrb_fixnum_value(GRN_DB_BOOL));
+ mrb_define_const(mrb, id_module, "INT8",
+ mrb_fixnum_value(GRN_DB_INT8));
+ mrb_define_const(mrb, id_module, "UINT8",
+ mrb_fixnum_value(GRN_DB_UINT8));
+ mrb_define_const(mrb, id_module, "INT16",
+ mrb_fixnum_value(GRN_DB_INT16));
+ mrb_define_const(mrb, id_module, "UINT16",
+ mrb_fixnum_value(GRN_DB_UINT16));
+ mrb_define_const(mrb, id_module, "INT32",
+ mrb_fixnum_value(GRN_DB_INT32));
+ mrb_define_const(mrb, id_module, "UINT32",
+ mrb_fixnum_value(GRN_DB_UINT32));
+ mrb_define_const(mrb, id_module, "INT64",
+ mrb_fixnum_value(GRN_DB_INT64));
+ mrb_define_const(mrb, id_module, "UINT64",
+ mrb_fixnum_value(GRN_DB_UINT64));
+ mrb_define_const(mrb, id_module, "FLOAT",
+ mrb_fixnum_value(GRN_DB_FLOAT));
+ mrb_define_const(mrb, id_module, "TIME",
+ mrb_fixnum_value(GRN_DB_TIME));
+ mrb_define_const(mrb, id_module, "SHORT_TEXT",
+ mrb_fixnum_value(GRN_DB_SHORT_TEXT));
+ mrb_define_const(mrb, id_module, "TEXT",
+ mrb_fixnum_value(GRN_DB_TEXT));
+ mrb_define_const(mrb, id_module, "LONG_TEXT",
+ mrb_fixnum_value(GRN_DB_LONG_TEXT));
+ mrb_define_const(mrb, id_module, "TOKYO_GEO_POINT",
+ mrb_fixnum_value(GRN_DB_TOKYO_GEO_POINT));
+ mrb_define_const(mrb, id_module, "WGS84_GEO_POINT",
+ mrb_fixnum_value(GRN_DB_WGS84_GEO_POINT));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.h
new file mode 100644
index 00000000000..f5b44358143
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_id.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_ID_H
+#define GRN_MRB_ID_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_id_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_ID_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c
new file mode 100644
index 00000000000..7bdf7528fc7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.c
@@ -0,0 +1,59 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "mrb_index_column.h"
+
+static struct mrb_data_type mrb_grn_index_column_type = {
+ "Groonga::IndexColumn",
+ NULL
+};
+
+static mrb_value
+mrb_grn_index_column_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_index_column_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_index_column_ptr);
+ DATA_TYPE(self) = &mrb_grn_index_column_type;
+ DATA_PTR(self) = mrb_cptr(mrb_index_column_ptr);
+ return self;
+}
+
+void
+grn_mrb_index_column_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *column_class;
+ struct RClass *klass;
+
+ column_class = mrb_class_get_under(mrb, module, "Column");
+ klass = mrb_define_class_under(mrb, module, "IndexColumn", column_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_index_column_initialize, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.h
new file mode 100644
index 00000000000..10e0589bf93
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_index_column.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_INDEX_COLUMN_H
+#define GRN_MRB_INDEX_COLUMN_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_index_column_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_INDEX_COLUMN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.c
new file mode 100644
index 00000000000..4917694fa8a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.c
@@ -0,0 +1,76 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+#include <mruby/variable.h>
+#include <mruby/string.h>
+
+#include "../mrb.h"
+#include "mrb_logger.h"
+
+static mrb_value
+logger_need_log_p(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_int level;
+
+ mrb_get_args(mrb, "i", &level);
+
+ return mrb_bool_value(grn_logger_pass(ctx, level));
+}
+
+static mrb_value
+logger_log(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ mrb_int level;
+ char *file;
+ mrb_int line;
+ char *method;
+ char *message;
+ mrb_int message_size;
+
+ mrb_get_args(mrb, "izizs",
+ &level, &file, &line, &method, &message, &message_size);
+ grn_logger_put(ctx, level, file, line, method, "%.*s", message_size, message);
+
+ return self;
+}
+
+void
+grn_mrb_logger_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Logger", mrb->object_class);
+
+ mrb_define_method(mrb, klass, "need_log?", logger_need_log_p, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "log", logger_log, MRB_ARGS_REQ(5));
+
+ grn_mrb_load(ctx, "logger/level.rb");
+ grn_mrb_load(ctx, "logger.rb");
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.h
new file mode 100644
index 00000000000..5bfb62e98a2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_logger.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_LOGGER_H
+#define GRN_MRB_LOGGER_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_logger_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_LOGGER_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.c
new file mode 100644
index 00000000000..142a242b980
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.c
@@ -0,0 +1,135 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+#include "../util.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/string.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "../mrb.h"
+#include "mrb_obj.h"
+#include "mrb_converter.h"
+
+static mrb_value
+object_get_name(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *object;
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_length;
+
+ object = DATA_PTR(self);
+ name_length = grn_obj_name(ctx, object, name, GRN_TABLE_MAX_KEY_SIZE);
+
+ return mrb_str_new(mrb, name, name_length);
+}
+
+static mrb_value
+object_find_index(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj *object;
+ mrb_value mrb_operator;
+ grn_obj *index;
+ int n_indexes;
+ int section_id;
+
+ mrb_get_args(mrb, "o", &mrb_operator);
+ object = DATA_PTR(self);
+ n_indexes = grn_column_index(ctx,
+ object,
+ mrb_fixnum(mrb_operator),
+ &index,
+ 1,
+ &section_id);
+ if (n_indexes == 0) {
+ return mrb_nil_value();
+ } else {
+ grn_mrb_data *data;
+ struct RClass *klass;
+ mrb_value args[2];
+
+ data = &(ctx->impl->mrb);
+ klass = mrb_class_get_under(mrb, data->module, "IndexInfo");
+ args[0] = grn_mrb_value_from_grn_obj(mrb, index);
+ args[1] = mrb_fixnum_value(section_id);
+ return mrb_obj_new(mrb, klass, 2, args);
+ }
+}
+
+static mrb_value
+object_grn_inspect(mrb_state *mrb, mrb_value self)
+{
+ grn_ctx *ctx = (grn_ctx *)mrb->ud;
+ grn_obj buffer;
+ mrb_value inspected;
+
+ GRN_TEXT_INIT(&buffer, 0);
+ grn_inspect(ctx, &buffer, DATA_PTR(self));
+ inspected = mrb_str_new(mrb, GRN_TEXT_VALUE(&buffer), GRN_TEXT_LEN(&buffer));
+ GRN_OBJ_FIN(ctx, &buffer);
+
+ return inspected;
+}
+
+static mrb_value
+object_equal(mrb_state *mrb, mrb_value self)
+{
+ grn_obj *object, *other_object;
+ mrb_value mrb_other;
+
+ mrb_get_args(mrb, "o", &mrb_other);
+ if (!mrb_obj_is_kind_of(mrb, mrb_other, mrb_obj_class(mrb, self))) {
+ return mrb_false_value();
+ }
+
+ object = DATA_PTR(self);
+ other_object = DATA_PTR(mrb_other);
+ if (object == other_object) {
+ return mrb_true_value();
+ } else {
+ return mrb_false_value();
+ }
+}
+
+void
+grn_mrb_obj_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Object", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ data->object_class = klass;
+
+ mrb_define_method(mrb, klass, "name", object_get_name, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "find_index",
+ object_find_index, MRB_ARGS_REQ(1));
+ mrb_define_method(mrb, klass, "grn_inspect",
+ object_grn_inspect, MRB_ARGS_NONE());
+ mrb_define_method(mrb, klass, "==", object_equal, MRB_ARGS_REQ(1));
+
+ grn_mrb_load(ctx, "index_info.rb");
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.h
new file mode 100644
index 00000000000..31d53240f9e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_obj.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_OBJ_H
+#define GRN_MRB_OBJ_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_obj_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_OBJ_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.c
new file mode 100644
index 00000000000..5a18d2e7023
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.c
@@ -0,0 +1,190 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+
+#include "mrb_operator.h"
+
+void
+grn_mrb_operator_init(grn_ctx *ctx)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+ struct RClass *module = ctx->impl->mrb.module;
+ struct RClass *operator_module;
+
+ operator_module = mrb_define_module_under(mrb, module, "Operator");
+
+ mrb_define_const(mrb, operator_module, "PUSH",
+ mrb_fixnum_value(GRN_OP_PUSH));
+ mrb_define_const(mrb, operator_module, "POP",
+ mrb_fixnum_value(GRN_OP_POP));
+ mrb_define_const(mrb, operator_module, "NOP",
+ mrb_fixnum_value(GRN_OP_NOP));
+ mrb_define_const(mrb, operator_module, "CALL",
+ mrb_fixnum_value(GRN_OP_CALL));
+ mrb_define_const(mrb, operator_module, "INTERN",
+ mrb_fixnum_value(GRN_OP_INTERN));
+ mrb_define_const(mrb, operator_module, "GET_REF",
+ mrb_fixnum_value(GRN_OP_GET_REF));
+ mrb_define_const(mrb, operator_module, "GET_VALUE",
+ mrb_fixnum_value(GRN_OP_GET_VALUE));
+ mrb_define_const(mrb, operator_module, "AND",
+ mrb_fixnum_value(GRN_OP_AND));
+ mrb_define_const(mrb, operator_module, "AND_NOT",
+ mrb_fixnum_value(GRN_OP_AND_NOT));
+ mrb_define_const(mrb, operator_module, "OR",
+ mrb_fixnum_value(GRN_OP_OR));
+ mrb_define_const(mrb, operator_module, "ASSIGN",
+ mrb_fixnum_value(GRN_OP_ASSIGN));
+ mrb_define_const(mrb, operator_module, "STAR_ASSIGN",
+ mrb_fixnum_value(GRN_OP_STAR_ASSIGN));
+ mrb_define_const(mrb, operator_module, "SLASH_ASSIGN",
+ mrb_fixnum_value(GRN_OP_SLASH_ASSIGN));
+ mrb_define_const(mrb, operator_module, "MOD_ASSIGN",
+ mrb_fixnum_value(GRN_OP_MOD_ASSIGN));
+ mrb_define_const(mrb, operator_module, "PLUS_ASSIGN",
+ mrb_fixnum_value(GRN_OP_PLUS_ASSIGN));
+ mrb_define_const(mrb, operator_module, "MINUS_ASSIGN",
+ mrb_fixnum_value(GRN_OP_MINUS_ASSIGN));
+ mrb_define_const(mrb, operator_module, "SHIFTL_ASSIGN",
+ mrb_fixnum_value(GRN_OP_SHIFTL_ASSIGN));
+ mrb_define_const(mrb, operator_module, "SHIFTR_ASSIGN",
+ mrb_fixnum_value(GRN_OP_SHIFTR_ASSIGN));
+ mrb_define_const(mrb, operator_module, "SHIFTRR_ASSIGN",
+ mrb_fixnum_value(GRN_OP_SHIFTRR_ASSIGN));
+ mrb_define_const(mrb, operator_module, "AND_ASSIGN",
+ mrb_fixnum_value(GRN_OP_AND_ASSIGN));
+ mrb_define_const(mrb, operator_module, "XOR_ASSIGN",
+ mrb_fixnum_value(GRN_OP_XOR_ASSIGN));
+ mrb_define_const(mrb, operator_module, "OR_ASSIGN",
+ mrb_fixnum_value(GRN_OP_OR_ASSIGN));
+ mrb_define_const(mrb, operator_module, "JUMP",
+ mrb_fixnum_value(GRN_OP_JUMP));
+ mrb_define_const(mrb, operator_module, "CJUMP",
+ mrb_fixnum_value(GRN_OP_CJUMP));
+ mrb_define_const(mrb, operator_module, "COMMA",
+ mrb_fixnum_value(GRN_OP_COMMA));
+ mrb_define_const(mrb, operator_module, "BITWISE_OR",
+ mrb_fixnum_value(GRN_OP_BITWISE_OR));
+ mrb_define_const(mrb, operator_module, "BITWISE_XOR",
+ mrb_fixnum_value(GRN_OP_BITWISE_XOR));
+ mrb_define_const(mrb, operator_module, "BITWISE_AND",
+ mrb_fixnum_value(GRN_OP_BITWISE_AND));
+ mrb_define_const(mrb, operator_module, "BITWISE_NOT",
+ mrb_fixnum_value(GRN_OP_BITWISE_NOT));
+ mrb_define_const(mrb, operator_module, "EQUAL",
+ mrb_fixnum_value(GRN_OP_EQUAL));
+ mrb_define_const(mrb, operator_module, "NOT_EQUAL",
+ mrb_fixnum_value(GRN_OP_NOT_EQUAL));
+ mrb_define_const(mrb, operator_module, "LESS",
+ mrb_fixnum_value(GRN_OP_LESS));
+ mrb_define_const(mrb, operator_module, "GREATER",
+ mrb_fixnum_value(GRN_OP_GREATER));
+ mrb_define_const(mrb, operator_module, "LESS_EQUAL",
+ mrb_fixnum_value(GRN_OP_LESS_EQUAL));
+ mrb_define_const(mrb, operator_module, "GREATER_EQUAL",
+ mrb_fixnum_value(GRN_OP_GREATER_EQUAL));
+ mrb_define_const(mrb, operator_module, "IN",
+ mrb_fixnum_value(GRN_OP_IN));
+ mrb_define_const(mrb, operator_module, "MATCH",
+ mrb_fixnum_value(GRN_OP_MATCH));
+ mrb_define_const(mrb, operator_module, "NEAR",
+ mrb_fixnum_value(GRN_OP_NEAR));
+ mrb_define_const(mrb, operator_module, "NEAR2",
+ mrb_fixnum_value(GRN_OP_NEAR2));
+ mrb_define_const(mrb, operator_module, "SIMILAR",
+ mrb_fixnum_value(GRN_OP_SIMILAR));
+ mrb_define_const(mrb, operator_module, "TERM_EXTRACT",
+ mrb_fixnum_value(GRN_OP_TERM_EXTRACT));
+ mrb_define_const(mrb, operator_module, "SHIFTL",
+ mrb_fixnum_value(GRN_OP_SHIFTL));
+ mrb_define_const(mrb, operator_module, "SHIFTR",
+ mrb_fixnum_value(GRN_OP_SHIFTR));
+ mrb_define_const(mrb, operator_module, "SHIFTRR",
+ mrb_fixnum_value(GRN_OP_SHIFTRR));
+ mrb_define_const(mrb, operator_module, "PLUS",
+ mrb_fixnum_value(GRN_OP_PLUS));
+ mrb_define_const(mrb, operator_module, "MINUS",
+ mrb_fixnum_value(GRN_OP_MINUS));
+ mrb_define_const(mrb, operator_module, "STAR",
+ mrb_fixnum_value(GRN_OP_STAR));
+ mrb_define_const(mrb, operator_module, "SLASH",
+ mrb_fixnum_value(GRN_OP_SLASH));
+ mrb_define_const(mrb, operator_module, "MOD",
+ mrb_fixnum_value(GRN_OP_MOD));
+ mrb_define_const(mrb, operator_module, "DELETE",
+ mrb_fixnum_value(GRN_OP_DELETE));
+ mrb_define_const(mrb, operator_module, "INCR",
+ mrb_fixnum_value(GRN_OP_INCR));
+ mrb_define_const(mrb, operator_module, "DECR",
+ mrb_fixnum_value(GRN_OP_DECR));
+ mrb_define_const(mrb, operator_module, "INCR_POST",
+ mrb_fixnum_value(GRN_OP_INCR_POST));
+ mrb_define_const(mrb, operator_module, "DECR_POST",
+ mrb_fixnum_value(GRN_OP_DECR_POST));
+ mrb_define_const(mrb, operator_module, "NOT",
+ mrb_fixnum_value(GRN_OP_NOT));
+ mrb_define_const(mrb, operator_module, "ADJUST",
+ mrb_fixnum_value(GRN_OP_ADJUST));
+ mrb_define_const(mrb, operator_module, "EXACT",
+ mrb_fixnum_value(GRN_OP_EXACT));
+ mrb_define_const(mrb, operator_module, "LCP",
+ mrb_fixnum_value(GRN_OP_LCP));
+ mrb_define_const(mrb, operator_module, "PARTIAL",
+ mrb_fixnum_value(GRN_OP_PARTIAL));
+ mrb_define_const(mrb, operator_module, "UNSPLIT",
+ mrb_fixnum_value(GRN_OP_UNSPLIT));
+ mrb_define_const(mrb, operator_module, "PREFIX",
+ mrb_fixnum_value(GRN_OP_PREFIX));
+ mrb_define_const(mrb, operator_module, "SUFFIX",
+ mrb_fixnum_value(GRN_OP_SUFFIX));
+ mrb_define_const(mrb, operator_module, "GEO_DISTANCE1",
+ mrb_fixnum_value(GRN_OP_GEO_DISTANCE1));
+ mrb_define_const(mrb, operator_module, "GEO_DISTANCE2",
+ mrb_fixnum_value(GRN_OP_GEO_DISTANCE2));
+ mrb_define_const(mrb, operator_module, "GEO_DISTANCE3",
+ mrb_fixnum_value(GRN_OP_GEO_DISTANCE3));
+ mrb_define_const(mrb, operator_module, "GEO_DISTANCE4",
+ mrb_fixnum_value(GRN_OP_GEO_DISTANCE4));
+ mrb_define_const(mrb, operator_module, "GEO_WITHINP5",
+ mrb_fixnum_value(GRN_OP_GEO_WITHINP5));
+ mrb_define_const(mrb, operator_module, "GEO_WITHINP6",
+ mrb_fixnum_value(GRN_OP_GEO_WITHINP6));
+ mrb_define_const(mrb, operator_module, "GEO_WITHINP8",
+ mrb_fixnum_value(GRN_OP_GEO_WITHINP8));
+ mrb_define_const(mrb, operator_module, "OBJ_SEARCH",
+ mrb_fixnum_value(GRN_OP_OBJ_SEARCH));
+ mrb_define_const(mrb, operator_module, "EXPR_GET_VAR",
+ mrb_fixnum_value(GRN_OP_EXPR_GET_VAR));
+ mrb_define_const(mrb, operator_module, "TABLE_CREATE",
+ mrb_fixnum_value(GRN_OP_TABLE_CREATE));
+ mrb_define_const(mrb, operator_module, "TABLE_SELECT",
+ mrb_fixnum_value(GRN_OP_TABLE_SELECT));
+ mrb_define_const(mrb, operator_module, "TABLE_SORT",
+ mrb_fixnum_value(GRN_OP_TABLE_SORT));
+ mrb_define_const(mrb, operator_module, "TABLE_GROUP",
+ mrb_fixnum_value(GRN_OP_TABLE_GROUP));
+ mrb_define_const(mrb, operator_module, "JSON_PUT",
+ mrb_fixnum_value(GRN_OP_JSON_PUT));
+ mrb_define_const(mrb, operator_module, "GET_MEMBER",
+ mrb_fixnum_value(GRN_OP_GET_MEMBER));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.h
new file mode 100644
index 00000000000..2650cc9421d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_operator.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_OPERATOR_H
+#define GRN_MRB_OPERATOR_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_operator_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_OPERATOR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.c
new file mode 100644
index 00000000000..fa9c677f2e6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.c
@@ -0,0 +1,58 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "mrb_procedure.h"
+
+static struct mrb_data_type mrb_grn_procedure_type = {
+ "Groonga::Procedure",
+ NULL
+};
+
+static mrb_value
+mrb_grn_procedure_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_procedure_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_procedure_ptr);
+ DATA_TYPE(self) = &mrb_grn_procedure_type;
+ DATA_PTR(self) = mrb_cptr(mrb_procedure_ptr);
+ return self;
+}
+
+void
+grn_mrb_procedure_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *object_class = data->object_class;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Procedure", object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_procedure_initialize, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.h
new file mode 100644
index 00000000000..16a4b32895c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_procedure.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_PROCEDURE_H
+#define GRN_MRB_PROCEDURE_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_procedure_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_PROCEDURE_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.c
new file mode 100644
index 00000000000..9073b326f85
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.c
@@ -0,0 +1,60 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/data.h>
+
+#include "mrb_variable_size_column.h"
+
+static struct mrb_data_type mrb_grn_variable_size_column_type = {
+ "Groonga::VariableSizeColumn",
+ NULL
+};
+
+static mrb_value
+mrb_grn_variable_size_column_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_variable_size_column_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_variable_size_column_ptr);
+ DATA_TYPE(self) = &mrb_grn_variable_size_column_type;
+ DATA_PTR(self) = mrb_cptr(mrb_variable_size_column_ptr);
+ return self;
+}
+
+void
+grn_mrb_variable_size_column_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *column_class;
+ struct RClass *klass;
+
+ column_class = mrb_class_get_under(mrb, module, "Column");
+ klass = mrb_define_class_under(mrb, module,
+ "VariableSizeColumn", column_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_variable_size_column_initialize, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.h
new file mode 100644
index 00000000000..d120f737671
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_variable_size_column.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_VARIABLE_SIZE_COLUMN_H
+#define GRN_MRB_VARIABLE_SIZE_COLUMN_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_variable_size_column_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_VARIABLE_SIZE_COLUMN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.c b/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.c
new file mode 100644
index 00000000000..976c472be92
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.c
@@ -0,0 +1,59 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "../ctx_impl.h"
+
+#ifdef GRN_WITH_MRUBY
+#include <mruby.h>
+#include <mruby/class.h>
+#include <mruby/variable.h>
+#include <mruby/data.h>
+
+#include "../db.h"
+#include "mrb_void.h"
+
+static struct mrb_data_type mrb_grn_void_type = {
+ "Groonga::Void",
+ NULL
+};
+
+static mrb_value
+mrb_grn_void_initialize(mrb_state *mrb, mrb_value self)
+{
+ mrb_value mrb_void_ptr;
+
+ mrb_get_args(mrb, "o", &mrb_void_ptr);
+ DATA_TYPE(self) = &mrb_grn_void_type;
+ DATA_PTR(self) = mrb_cptr(mrb_void_ptr);
+ return self;
+}
+
+void
+grn_mrb_void_init(grn_ctx *ctx)
+{
+ grn_mrb_data *data = &(ctx->impl->mrb);
+ mrb_state *mrb = data->state;
+ struct RClass *module = data->module;
+ struct RClass *klass;
+
+ klass = mrb_define_class_under(mrb, module, "Void", mrb->object_class);
+ MRB_SET_INSTANCE_TT(klass, MRB_TT_DATA);
+ mrb_define_method(mrb, klass, "initialize",
+ mrb_grn_void_initialize, MRB_ARGS_REQ(1));
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.h b/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.h
new file mode 100644
index 00000000000..a766cecb0b7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/mrb_void.h
@@ -0,0 +1,34 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_MRB_VOID_H
+#define GRN_MRB_VOID_H
+
+#include "../ctx.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void grn_mrb_void_init(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_MRB_VOID_H */
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/Makefile.am b/storage/mroonga/vendor/groonga/lib/mrb/scripts/Makefile.am
new file mode 100644
index 00000000000..631923e2e06
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/Makefile.am
@@ -0,0 +1,9 @@
+include sources.am
+
+EXTRA_DIST = \
+ test/empty.rb \
+ $(RUBY_SCRIPT_FILES)
+
+if WITH_MRUBY
+nobase_ruby_scripts_DATA = $(RUBY_SCRIPT_FILES)
+endif
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/backtrace_entry.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/backtrace_entry.rb
new file mode 100644
index 00000000000..68ea9e4b6f2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/backtrace_entry.rb
@@ -0,0 +1,20 @@
+module Groonga
+ class BacktraceEntry
+ class << self
+ def parse(entry)
+ match_data = /:(\d+):?/.match(entry)
+ file = match_data.pre_match
+ line = match_data[1].to_i
+ method = match_data.post_match.gsub(/\Ain /, "")
+ new(file, line, method)
+ end
+ end
+
+ attr_reader :file, :line, :method
+ def initialize(file, line, method)
+ @file = file
+ @line = line
+ @method = method
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/context.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context.rb
new file mode 100644
index 00000000000..8ebe2c913b4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context.rb
@@ -0,0 +1,31 @@
+module Groonga
+ class Context
+ def guard(fallback=nil)
+ begin
+ yield
+ rescue => error
+ logger.log_error(error)
+ fallback
+ end
+ end
+
+ def logger
+ @logger ||= Logger.new
+ end
+
+ def record_error(rc, error)
+ rc = RC.find(rc) if rc.is_a?(Symbol)
+ self.rc = rc.to_i
+ self.error_level = ErrorLevel.find(:error).to_i
+
+ backtrace = error.backtrace
+ entry = BacktraceEntry.parse(backtrace.first)
+ self.error_file = entry.file
+ self.error_line = entry.line
+ self.error_method = entry.method
+ self.error_message = error.message
+
+ logger.log_error(error)
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/error_level.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/error_level.rb
new file mode 100644
index 00000000000..c0685f16eef
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/error_level.rb
@@ -0,0 +1,30 @@
+module Groonga
+ class Context
+ class ErrorLevel
+ @@names = {}
+
+ class << self
+ def find(name)
+ @@names[name]
+ end
+ end
+
+ attr_reader :name
+ def initialize(name, level)
+ @@names[name] = self
+ @name = name
+ @level = level
+ end
+
+ def to_i
+ @level
+ end
+
+ EMERGENCY = new(:emergency, 1)
+ ALERT = new(:alert, 2)
+ CRITICAL = new(:critical, 3)
+ ERROR = new(:error, 4)
+ WARNING = new(:warning, 5)
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/rc.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/rc.rb
new file mode 100644
index 00000000000..2863c7f6195
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/context/rc.rb
@@ -0,0 +1,99 @@
+module Groonga
+ class Context
+ class RC
+ @@names = {}
+
+ class << self
+ def find(name)
+ @@names[name]
+ end
+ end
+
+ attr_reader :name
+ def initialize(name, code)
+ @@names[name] = self
+ @name = name
+ @code = code
+ end
+
+ def to_i
+ @code
+ end
+
+ SUCCESS = new(:success, 0)
+ END_OF_DATA = new(:end_of_data, 1)
+ UNKNOWN_ERROR = new(:unknown_error, -1)
+ OPERATION_NOT_PERMITTED = new(:operation_not_permitted, -2)
+ NO_SUCH_FILE_OR_DIRECTORY = new(:no_such_file_or_directory, -3)
+ NO_SUCH_PROCESS = new(:no_such_process, -4)
+ INTERRUPTED_FUNCTION_CALL = new(:interrupted_function_call, -5)
+ INPUT_OUTPUT_ERROR = new(:input_output_error, -6)
+ NO_SUCH_DEVICE_OR_ADDRESS = new(:no_such_device_or_address, -7)
+ ARG_LIST_TOO_LONG = new(:arg_list_too_long, -8)
+ EXEC_FORMAT_ERROR = new(:exec_format_error, -9)
+ BAD_FILE_DESCRIPTOR = new(:bad_file_descriptor, -10)
+ NO_CHILD_PROCESSES = new(:no_child_processes, -11)
+ RESOURCE_TEMPORARILY_UNAVAILABLE = new(:resource_temporarily_unavailable, -12)
+ NOT_ENOUGH_SPACE = new(:not_enough_space, -13)
+ PERMISSION_DENIED = new(:permission_denied, -14)
+ BAD_ADDRESS = new(:bad_address, -15)
+ RESOURCE_BUSY = new(:resource_busy, -16)
+ FILE_EXISTS = new(:file_exists, -17)
+ IMPROPER_LINK = new(:improper_link, -18)
+ NO_SUCH_DEVICE = new(:no_such_device, -19)
+ NOT_A_DIRECTORY = new(:not_a_directory, -20)
+ IS_A_DIRECTORY = new(:is_a_directory, -21)
+ INVALID_ARGUMENT = new(:invalid_argument, -22)
+ TOO_MANY_OPEN_FILES_IN_SYSTEM = new(:too_many_open_files_in_system, -23)
+ TOO_MANY_OPEN_FILES = new(:too_many_open_files, -24)
+ INAPPROPRIATE_IO_CONTROL_OPERATION = new(:inappropriate_io_control_operation, -25)
+ FILE_TOO_LARGE = new(:file_too_large, -26)
+ NO_SPACE_LEFT_ON_DEVICE = new(:no_space_left_on_device, -27)
+ INVALID_SEEK = new(:invalid_seek, -28)
+ READ_ONLY_FILE_SYSTEM = new(:read_only_file_system, -29)
+ TOO_MANY_LINKS = new(:too_many_links, -30)
+ BROKEN_PIPE = new(:broken_pipe, -31)
+ DOMAIN_ERROR = new(:domain_error, -32)
+ RESULT_TOO_LARGE = new(:result_too_large, -33)
+ RESOURCE_DEADLOCK_AVOIDED = new(:resource_deadlock_avoided, -34)
+ NO_MEMORY_AVAILABLE = new(:no_memory_available, -35)
+ FILENAME_TOO_LONG = new(:filename_too_long, -36)
+ NO_LOCKS_AVAILABLE = new(:no_locks_available, -37)
+ FUNCTION_NOT_IMPLEMENTED = new(:function_not_implemented, -38)
+ DIRECTORY_NOT_EMPTY = new(:directory_not_empty, -39)
+ ILLEGAL_BYTE_SEQUENCE = new(:illegal_byte_sequence, -40)
+ SOCKET_NOT_INITIALIZED = new(:socket_not_initialized, -41)
+ OPERATION_WOULD_BLOCK = new(:operation_would_block, -42)
+ ADDRESS_IS_NOT_AVAILABLE = new(:address_is_not_available, -43)
+ NETWORK_IS_DOWN = new(:network_is_down, -44)
+ NO_BUFFER = new(:no_buffer, -45)
+ SOCKET_IS_ALREADY_CONNECTED = new(:socket_is_already_connected, -46)
+ SOCKET_IS_NOT_CONNECTED = new(:socket_is_not_connected, -47)
+ SOCKET_IS_ALREADY_SHUTDOWNED = new(:socket_is_already_shutdowned, -48)
+ OPERATION_TIMEOUT = new(:operation_timeout, -49)
+ CONNECTION_REFUSED = new(:connection_refused, -50)
+ RANGE_ERROR = new(:range_error, -51)
+ TOKENIZER_ERROR = new(:tokenizer_error, -52)
+ FILE_CORRUPT = new(:file_corrupt, -53)
+ INVALID_FORMAT = new(:invalid_format, -54)
+ OBJECT_CORRUPT = new(:object_corrupt, -55)
+ TOO_MANY_SYMBOLIC_LINKS = new(:too_many_symbolic_links, -56)
+ NOT_SOCKET = new(:not_socket, -57)
+ OPERATION_NOT_SUPPORTED = new(:operation_not_supported, -58)
+ ADDRESS_IS_IN_USE = new(:address_is_in_use, -59)
+ ZLIB_ERROR = new(:zlib_error, -60)
+ LZO_ERROR = new(:lzo_error, -61)
+ STACK_OVER_FLOW = new(:stack_over_flow, -62)
+ SYNTAX_ERROR = new(:syntax_error, -63)
+ RETRY_MAX = new(:retry_max, -64)
+ INCOMPATIBLE_FILE_FORMAT = new(:incompatible_file_format, -65)
+ UPDATE_NOT_ALLOWED = new(:update_not_allowed, -66)
+ TOO_SMALL_OFFSET = new(:too_small_offset, -67)
+ TOO_LARGE_OFFSET = new(:too_large_offset, -68)
+ TOO_SMALL_LIMIT = new(:too_small_limit, -69)
+ CAS_ERROR = new(:cas_error, -70)
+ UNSUPPORTED_COMMAND_VERSION = new(:unsupported_command_version, -71)
+ NORMALIZER_ERROR = new(:normalizer_error, -72)
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/eval_context.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/eval_context.rb
new file mode 100644
index 00000000000..546c130d9b5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/eval_context.rb
@@ -0,0 +1,13 @@
+module Groonga
+ class EvalContext
+ def method_missing(id, *args, &block)
+ return super unless args.empty?
+ return super if block_given?
+
+ object = Context.instance[id.to_s]
+ return super if object.nil?
+
+ object
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/expression.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/expression.rb
new file mode 100644
index 00000000000..29290e207f2
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/expression.rb
@@ -0,0 +1,13 @@
+module Groonga
+ class Expression
+ def build_scan_info(op, size)
+ begin
+ builder = ScanInfoBuilder.new(self, op, size)
+ builder.build
+ rescue => error
+ Context.instance.record_error(:invalid_argument, error)
+ nil
+ end
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/index_info.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/index_info.rb
new file mode 100644
index 00000000000..cf8336e50c7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/index_info.rb
@@ -0,0 +1,10 @@
+module Groonga
+ class IndexInfo
+ attr_reader :index
+ attr_reader :section_id
+ def initialize(index, section_id)
+ @index = index
+ @section_id = section_id
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger.rb
new file mode 100644
index 00000000000..06f99c14fc3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger.rb
@@ -0,0 +1,27 @@
+module Groonga
+ class Logger
+ def log_error(error)
+ log_level = Level::ERROR.to_i
+
+ message = "#{error.class}: #{error.message}"
+ backtrace = error.backtrace
+ first_raw_entry = backtrace.first
+ if first_raw_entry
+ first_entry = BacktraceEntry.parse(first_raw_entry)
+ file = first_entry.file
+ line = first_entry.line
+ method = first_entry.method
+ else
+ file = ""
+ line = 0
+ method = ""
+ end
+ log(log_level, file, line, method, message)
+
+ backtrace.each do |raw_entry|
+ entry = BacktraceEntry.parse(raw_entry)
+ log(log_level, entry.file, entry.line, entry.method, raw_entry)
+ end
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger/level.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger/level.rb
new file mode 100644
index 00000000000..b7660993824
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/logger/level.rb
@@ -0,0 +1,32 @@
+module Groonga
+ class Logger
+ class Level
+ @@names = {}
+ def self.find(name)
+ @@names[name]
+ end
+
+ attr_reader :name
+ def initialize(name, level)
+ @@names[name] = self
+ @name = name
+ @level = level
+ end
+
+ def to_i
+ @level
+ end
+
+ NONE = new(:none, 0)
+ EMERG = new(:emerg, 1)
+ ALERT = new(:alert, 2)
+ CRIT = new(:crit, 3)
+ ERROR = new(:error, 4)
+ WARNING = new(:warning, 5)
+ NOTICE = new(:notice, 6)
+ INFO = new(:info, 7)
+ DEBUG = new(:debug, 8)
+ DUMP = new(:dump, 9)
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/object.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/object.rb
new file mode 100644
index 00000000000..f1cc1a6aa79
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/object.rb
@@ -0,0 +1,7 @@
+module Groonga
+ class Object
+ def inspect
+ super[0..-2] + ": #{grn_inspect}>"
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info.rb
new file mode 100644
index 00000000000..cf0056d7fd3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info.rb
@@ -0,0 +1,30 @@
+module Groonga
+ class ScanInfo
+ module Flags
+ ACCESSOR = 0x01
+ PUSH = 0x02
+ POP = 0x04
+ PRE_CONST = 0x08
+ end
+
+ def apply(data)
+ self.op = data.op
+ self.logical_op = data.logical_op
+ self.end = data.end
+ self.query = data.query
+ self.flags = data.flags
+ if data.max_interval
+ self.max_interval = data.max_interval
+ end
+ if data.similarity_threshold
+ self.similarity_threshold = data.similarity_threshold
+ end
+ data.args.each do |arg|
+ push_arg(arg)
+ end
+ data.indexes.each do |index, section_id, weight|
+ put_index(index, section_id, weight)
+ end
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_builder.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_builder.rb
new file mode 100644
index 00000000000..5e258e90e5a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_builder.rb
@@ -0,0 +1,347 @@
+module Groonga
+ # TODO: Move me
+ class ExpressionCode
+ module Flags
+ RELATIONAL_EXPRESSION = 0x01
+ end
+ end
+
+ class ScanInfoBuilder
+ module Status
+ START = 0
+ VAR = 1
+ COL1 = 2
+ COL2 = 3
+ CONST = 4
+ end
+
+ def initialize(expression, operator, size)
+ @data_list = []
+ @expression = expression
+ @operator = operator
+ @size = size
+ end
+
+ RELATION_OPERATORS = [
+ Operator::MATCH,
+ Operator::NEAR,
+ Operator::NEAR2,
+ Operator::SIMILAR,
+ Operator::PREFIX,
+ Operator::SUFFIX,
+ Operator::EQUAL,
+ Operator::NOT_EQUAL,
+ Operator::LESS,
+ Operator::GREATER,
+ Operator::LESS_EQUAL,
+ Operator::GREATER_EQUAL,
+ Operator::GEO_WITHINP5,
+ Operator::GEO_WITHINP6,
+ Operator::GEO_WITHINP8,
+ Operator::TERM_EXTRACT,
+ ]
+
+ LOGICAL_OPERATORS = [
+ Operator::AND,
+ Operator::OR,
+ Operator::AND_NOT,
+ Operator::ADJUST,
+ ]
+ def build
+ return nil unless valid?
+
+ status = Status::START
+ variable = @expression.get_var_by_offset(0)
+ data = nil
+ codes = @expression.codes
+ n_codes = codes.size
+ codes.each_with_index do |code, i|
+ case code.op
+ when *RELATION_OPERATORS
+ status = Status::START
+ data.op = code.op
+ data.end = i
+ data.match_resolve_index
+ @data_list << data
+ data = nil
+ when *LOGICAL_OPERATORS
+ put_logical_op(code.op, i)
+ # TODO: rescue and return nil
+ status = Status::START
+ when Operator::PUSH
+ data ||= ScanInfoData.new(i)
+ if code.value == variable
+ status = Status::VAR
+ else
+ data.args << code.value
+ if status == Status::START
+ data.flags |= ScanInfo::Flags::PRE_CONST
+ end
+ status = Status::CONST
+ end
+ when Operator::GET_VALUE
+ case status
+ when Status::START
+ data ||= ScanInfoData.new(i)
+ status = Status::COL1
+ data.args << code.value
+ when Status::CONST, Status::VAR
+ status = Status::COL1
+ data.args << code.value
+ when Status::COL1
+ raise "invalid expression: can't use column as a value: <#{code.value.name}>: <#{@expression.grn_inspect}>"
+ status = Status::COL2
+ when Status::COL2
+ # Do nothing
+ end
+ when Operator::CALL
+ data ||= ScanInfoData.new(i)
+ if (code.flags & ExpressionCode::Flags::RELATIONAL_EXPRESSION) != 0 or
+ (i + 1) == n_codes
+ status = Status::START
+ data.op = code.op
+ data.end = i
+ data.call_relational_resolve_indexes
+ @data_list << data
+ data = nil
+ else
+ status = Status::COL2
+ end
+ end
+ end
+
+ if @operator == Operator::OR and @size == 0
+ first_data = @data_list.first
+ if (first_data.flags & ScanInfo::Flags::PUSH) == 0 or
+ first_data.logical_op != @operator
+ raise "invalid expr"
+ else
+ first_data.flags &= ~ScanInfo::Flags::PUSH
+ first_data.logical_op = @operator
+ end
+ else
+ put_logical_op(@operator, n_codes)
+ end
+
+ optimize
+ end
+
+ private
+ def valid?
+ n_relation_expressions = 0
+ n_logical_expressions = 0
+ status = Status::START
+ variable = @expression.get_var_by_offset(0)
+ codes = @expression.codes
+ codes.each do |code|
+ case code.op
+ when *RELATION_OPERATORS
+ return false if status < Status::COL1
+ return false if status > Status::CONST
+ status = Status::START
+ n_relation_expressions += 1
+ when *LOGICAL_OPERATORS
+ return false if status != Status::START
+ n_logical_expressions += 1
+ return false if n_logical_expressions >= n_relation_expressions
+ when Operator::PUSH
+ if code.value == variable
+ status = Status::VAR
+ else
+ status = Status::CONST
+ end
+ when Operator::GET_VALUE
+ case status
+ when Status::START, Status::CONST, Status::VAR
+ status = Status::COL1
+ when Status::COL1
+ status = Status::COL2
+ when Status::COL2
+ # Do nothing
+ else
+ return false
+ end
+ when Operator::CALL
+ if (code.flags & ExpressionCode::Flags::RELATIONAL_EXPRESSION) != 0 or
+ code == codes.last
+ status = Status::START
+ n_relation_expressions += 1
+ else
+ status = Status::COL2
+ end
+ else
+ return false
+ end
+ end
+
+ return false if status != Status::START
+ return false if n_relation_expressions != (n_logical_expressions + 1)
+
+ true
+ end
+
+ def put_logical_op(operator, start)
+ n_parens = 1
+ n_dif_ops = 0
+ r = 0
+ j = @data_list.size
+ while j > 0
+ j -= 1
+ data = @data_list[j]
+ if (data.flags & ScanInfo::Flags::POP) != 0
+ n_dif_ops += 1
+ n_parens += 1
+ else
+ if (data.flags & ScanInfo::Flags::PUSH) != 0
+ n_parens -= 1
+ if n_parens == 0
+ if r == 0
+ if n_dif_ops > 0
+ if j > 0 and operator != Operator::AND_NOT
+ n_parens = 1
+ n_dif_ops = 0
+ r = j
+ else
+ new_data = ScanInfoData.new(start)
+ new_data.flags = ScanInfo::Flags::POP
+ new_data.logical_op = operator
+ @data_list << new_data
+ end
+ else
+ data.flags &= ~ScanInfo::Flags::PUSH
+ data.logical_op = operator
+ end
+ else
+ if n_dif_ops > 0
+ new_data = ScanInfoData.new(start)
+ new_data.flags = ScanInfo::Flags::POP
+ new_data.logical_op = operator
+ @data_list << new_data
+ else
+ data.flags &= ~ScanInfo::Flags::PUSH
+ data.logical_op = operator
+ @data_list =
+ @data_list[0...j] +
+ @data_list[r..-1] +
+ @data_list[j...r]
+ end
+ end
+ end
+ else
+ if operator == Operator::AND_NOT or operator != data.logical_op
+ n_dif_ops += 1
+ end
+ end
+ end
+
+ if j < 0
+ raise GRN_INVALID_ARGUMENT.new("unmatched nesting level")
+ end
+ end
+ end
+
+ def optimize
+ optimized_data_list = []
+ i = 0
+ n = @data_list.size
+ while i < n
+ data = @data_list[i]
+ next_data = @data_list[i + 1]
+ i += 1
+ if next_data.nil?
+ optimized_data_list << data
+ next
+ end
+ if range_operations?(data, next_data)
+ between_data = create_between_data(data, next_data)
+ optimized_data_list << between_data
+ i += 1
+ next
+ end
+ optimized_data_list << data
+ end
+ optimized_data_list
+ end
+
+ def range_operations?(data, next_data)
+ return false unless next_data.logical_op == Operator::AND
+
+ op, next_op = data.op, next_data.op
+ return false if !(lower_condition?(op) or lower_condition?(next_op))
+ return false if !(upper_condition?(op) or upper_condition?(next_op))
+
+ return false if data.args[0] != next_data.args[0]
+
+ data_indexes = data.indexes
+ return false if data_indexes.empty?
+
+ data_indexes == next_data.indexes
+ end
+
+ def lower_condition?(operator)
+ case operator
+ when Operator::GREATER, Operator::GREATER_EQUAL
+ true
+ else
+ false
+ end
+ end
+
+ def upper_condition?(operator)
+ case operator
+ when Operator::LESS, Operator::LESS_EQUAL
+ true
+ else
+ false
+ end
+ end
+
+ def create_between_data(data, next_data)
+ between_data = ScanInfoData.new(data.start)
+ between_data.end = next_data.end + 1
+ between_data.flags = data.flags
+ between_data.op = Operator::CALL
+ between_data.logical_op = data.logical_op
+ between_data.args = create_between_data_args(data, next_data)
+ between_data.indexes = data.indexes
+ between_data
+ end
+
+ def create_between_data_args(data, next_data)
+ between = Context.instance["between"]
+ @expression.take_object(between)
+ column = data.args[0]
+ op, next_op = data.op, next_data.op
+ if lower_condition?(op)
+ min = data.args[1]
+ min_operator = op
+ max = next_data.args[1]
+ max_operator = next_op
+ else
+ min = next_data.args[1]
+ min_operator = next_op
+ max = data.args[1]
+ max_operator = op
+ end
+ if min_operator == Operator::GREATER
+ min_border = "exclude"
+ else
+ min_border = "include"
+ end
+ if max_operator == Operator::LESS
+ max_border = "exclude"
+ else
+ max_border = "include"
+ end
+
+ [
+ between,
+ column,
+ min,
+ @expression.allocate_constant(min_border),
+ max,
+ @expression.allocate_constant(max_border),
+ ]
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_data.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_data.rb
new file mode 100644
index 00000000000..67d0bc3aef7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/scan_info_data.rb
@@ -0,0 +1,198 @@
+module Groonga
+ class ScanInfoData
+ attr_accessor :start
+ attr_accessor :end
+ attr_accessor :op
+ attr_accessor :logical_op
+ attr_accessor :query
+ attr_accessor :args
+ attr_accessor :indexes
+ attr_accessor :flags
+ attr_accessor :max_interval
+ attr_accessor :similarity_threshold
+ def initialize(start)
+ @start = start
+ @end = 0
+ @op = 0
+ @logical_op = Operator::OR
+ @query = nil
+ @args = []
+ @indexes = []
+ @flags = ScanInfo::Flags::PUSH
+ @max_interval = nil
+ @similarity_threshold = nil
+ end
+
+ def match_resolve_index
+ if near_search?
+ match_near_resolve_index
+ elsif similar_search?
+ match_similar_resolve_index
+ else
+ match_generic_resolve_index
+ end
+ end
+
+ def call_relational_resolve_indexes
+ # better index resolving framework for functions should be implemented
+ @args.each do |arg|
+ call_relational_resolve_index(arg)
+ end
+ end
+
+ private
+ def near_search?
+ (@op == Operator::NEAR or @op == Operator::NEAR2) and @args.size == 3
+ end
+
+ def match_near_resolve_index
+ arg = @args[0]
+ case arg
+ when Expression
+ match_resolve_index_expression(arg)
+ when Accessor
+ match_resolve_index_accessor(arg)
+ when Object
+ match_resolve_index_db_obj(arg)
+ else
+ message =
+ "The first argument of NEAR/NEAR2 must be Expression, Accessor or Object: #{arg.class}"
+ raise message
+ end
+
+ self.query = @args[1]
+ self.max_interval = @args[2].value
+ end
+
+ def similar_search?
+ @op == Operator::SIMILAR and @args.size == 3
+ end
+
+ def match_similar_resolve_index
+ arg = @args[0]
+ case arg
+ when Expression
+ match_resolve_index_expression(arg)
+ when Accessor
+ match_resolve_index_accessor(arg)
+ when Object
+ match_resolve_index_db_obj(arg)
+ else
+ message =
+ "The first argument of SIMILAR must be Expression, Accessor or Object: #{arg.class}"
+ raise message
+ end
+
+ self.query = @args[1]
+ self.similarity_threshold = @args[2].value
+ end
+
+ def match_generic_resolve_index
+ @args.each do |arg|
+ case arg
+ when Expression
+ match_resolve_index_expression(arg)
+ when Accessor
+ match_resolve_index_accessor(arg)
+ when Object
+ match_resolve_index_db_obj(arg)
+ else
+ self.query = arg
+ end
+ end
+ end
+
+ def match_resolve_index_expression(expression)
+ codes = expression.codes
+ n_codes = codes.size
+ i = 0
+ while i < n_codes
+ code = codes[i]
+ value = code.value
+ case value
+ when Accessor
+ match_resolve_index_expression_accessor(code)
+ when FixedSizeColumn, VariableSizeColumn
+ match_resolve_index_expression_data_column(code)
+ when IndexColumn
+ section_id = 0
+ rest_n_codes = n_codes - i
+ if rest_n_codes >= 2 and
+ codes[i + 1].value.is_a?(Bulk) and
+ codes[i + 1].value.domain == ID::UINT32 and
+ codes[i + 2].op == Operator::GET_MEMBER
+ section_id = codes[i + 1].value.value + 1
+ code = codes[i + 2]
+ i += 2
+ end
+ put_index(value, section_id, code.weight)
+ end
+ i += 1
+ end
+ end
+
+ def match_resolve_index_expression_accessor(expr_code)
+ accessor = expr_code.value
+ self.flags |= ScanInfo::Flags::ACCESSOR
+ index_info = accessor.find_index(op)
+ return if index_info.nil?
+ if accessor.next
+ put_index(accessor, index_info.section_id, expr_code.weight)
+ else
+ put_index(index_info.index, index_info.section_id, expr_code.weight)
+ end
+ end
+
+ def match_resolve_index_expression_data_column(expr_code)
+ column = expr_code.value
+ index_info = column.find_index(op)
+ return if index_info.nil?
+ put_index(index_info.index, index_info.section_id, expr_code.weight)
+ end
+
+ def match_resolve_index_db_obj(db_obj)
+ index_info = db_obj.find_index(op)
+ return if index_info.nil?
+ put_index(index_info.index, index_info.section_id, 1)
+ end
+
+ def match_resolve_index_accessor(accessor)
+ self.flags |= ScanInfo::Flags::ACCESSOR
+ index_info = accessor.find_index(op)
+ return if index_info.nil?
+ if accessor.next
+ put_index(accessor, index_info.section_id, 1)
+ else
+ put_index(index_info.index, index_info.section_id, 1)
+ end
+ end
+
+ def call_relational_resolve_index(object)
+ case object
+ when Accessor
+ call_relational_resolve_index_accessor(object)
+ when Bulk
+ self.query = object
+ else
+ call_relational_resolve_index_db_obj(object)
+ end
+ end
+
+ def call_relational_resolve_index_db_obj(db_obj)
+ index_info = db_obj.find_index(op)
+ return if index_info.nil?
+ put_index(index_info.index, index_info.section_id, 1)
+ end
+
+ def call_relational_resolve_index_accessor(accessor)
+ self.flags |= ScanInfo::Flags::ACCESSOR
+ index_info = accessor.find_index(op)
+ return if index_info.nil?
+ put_index(index_info.index, index_info.section_id, 1)
+ end
+
+ def put_index(index, section_id, weight)
+ @indexes << [index, section_id, weight]
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/sources.am b/storage/mroonga/vendor/groonga/lib/mrb/scripts/sources.am
new file mode 100644
index 00000000000..93ade1627e6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/sources.am
@@ -0,0 +1,13 @@
+RUBY_SCRIPT_FILES = \
+ backtrace_entry.rb \
+ context.rb \
+ context/error_level.rb \
+ context/rc.rb \
+ eval_context.rb \
+ expression.rb \
+ index_info.rb \
+ logger.rb \
+ logger/level.rb \
+ scan_info.rb \
+ scan_info_builder.rb \
+ scan_info_data.rb
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/scripts/test/empty.rb b/storage/mroonga/vendor/groonga/lib/mrb/scripts/test/empty.rb
new file mode 100644
index 00000000000..123002d4b2b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/scripts/test/empty.rb
@@ -0,0 +1 @@
+# This file is just for test.
diff --git a/storage/mroonga/vendor/groonga/lib/mrb/sources.am b/storage/mroonga/vendor/groonga/lib/mrb/sources.am
new file mode 100644
index 00000000000..947607c7ecd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/mrb/sources.am
@@ -0,0 +1,33 @@
+libgrnmrb_la_SOURCES = \
+ mrb_accessor.c \
+ mrb_accessor.h \
+ mrb_bulk.c \
+ mrb_bulk.h \
+ mrb_column.c \
+ mrb_column.h \
+ mrb_converter.c \
+ mrb_converter.h \
+ mrb_ctx.c \
+ mrb_ctx.h \
+ mrb_error.c \
+ mrb_error.h \
+ mrb_expr.c \
+ mrb_expr.h \
+ mrb_fixed_size_column.c \
+ mrb_fixed_size_column.h \
+ mrb_id.c \
+ mrb_id.h \
+ mrb_index_column.c \
+ mrb_index_column.h \
+ mrb_logger.c \
+ mrb_logger.h \
+ mrb_obj.c \
+ mrb_obj.h \
+ mrb_operator.c \
+ mrb_operator.h \
+ mrb_procedure.c \
+ mrb_procedure.h \
+ mrb_variable_size_column.c \
+ mrb_variable_size_column.h \
+ mrb_void.c \
+ mrb_void.h
diff --git a/storage/mroonga/vendor/groonga/lib/nfkc-custom-rules.txt b/storage/mroonga/vendor/groonga/lib/nfkc-custom-rules.txt
new file mode 100644
index 00000000000..496751a5581
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/nfkc-custom-rules.txt
@@ -0,0 +1 @@
+〜 ~
diff --git a/storage/mroonga/vendor/groonga/lib/nfkc.c b/storage/mroonga/vendor/groonga/lib/nfkc.c
new file mode 100644
index 00000000000..252fb210e6e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/nfkc.c
@@ -0,0 +1,80249 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+don't edit this file by hand. it generated automatically by nfkc.rb
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
+
+#include <groonga/nfkc.h>
+
+#ifdef GRN_WITH_NFKC
+
+grn_char_type
+grn_nfkc_char_type(const unsigned char *str)
+{
+switch (str[0]) {
+case 0x01 :
+case 0x02 :
+case 0x03 :
+case 0x04 :
+case 0x05 :
+case 0x06 :
+case 0x07 :
+case 0x08 :
+case 0x09 :
+case 0x0A :
+case 0x0B :
+case 0x0C :
+case 0x0D :
+case 0x0E :
+case 0x0F :
+case 0x10 :
+case 0x11 :
+case 0x12 :
+case 0x13 :
+case 0x14 :
+case 0x15 :
+case 0x16 :
+case 0x17 :
+case 0x18 :
+case 0x19 :
+case 0x1A :
+case 0x1B :
+case 0x1C :
+case 0x1D :
+case 0x1E :
+case 0x1F :
+case 0x20 :
+ return GRN_CHAR_OTHERS;
+ break;
+case 0x21 :
+case 0x22 :
+case 0x23 :
+case 0x24 :
+case 0x25 :
+case 0x26 :
+case 0x27 :
+case 0x28 :
+case 0x29 :
+case 0x2A :
+case 0x2B :
+case 0x2C :
+case 0x2D :
+case 0x2E :
+case 0x2F :
+ return GRN_CHAR_SYMBOL;
+ break;
+case 0x30 :
+case 0x31 :
+case 0x32 :
+case 0x33 :
+case 0x34 :
+case 0x35 :
+case 0x36 :
+case 0x37 :
+case 0x38 :
+case 0x39 :
+ return GRN_CHAR_DIGIT;
+ break;
+case 0x3A :
+case 0x3B :
+case 0x3C :
+case 0x3D :
+case 0x3E :
+case 0x3F :
+case 0x40 :
+ return GRN_CHAR_SYMBOL;
+ break;
+case 0x41 :
+case 0x42 :
+case 0x43 :
+case 0x44 :
+case 0x45 :
+case 0x46 :
+case 0x47 :
+case 0x48 :
+case 0x49 :
+case 0x4A :
+case 0x4B :
+case 0x4C :
+case 0x4D :
+case 0x4E :
+case 0x4F :
+case 0x50 :
+case 0x51 :
+case 0x52 :
+case 0x53 :
+case 0x54 :
+case 0x55 :
+case 0x56 :
+case 0x57 :
+case 0x58 :
+case 0x59 :
+case 0x5A :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0x5B :
+case 0x5C :
+case 0x5D :
+case 0x5E :
+case 0x5F :
+case 0x60 :
+ return GRN_CHAR_SYMBOL;
+ break;
+case 0x61 :
+case 0x62 :
+case 0x63 :
+case 0x64 :
+case 0x65 :
+case 0x66 :
+case 0x67 :
+case 0x68 :
+case 0x69 :
+case 0x6A :
+case 0x6B :
+case 0x6C :
+case 0x6D :
+case 0x6E :
+case 0x6F :
+case 0x70 :
+case 0x71 :
+case 0x72 :
+case 0x73 :
+case 0x74 :
+case 0x75 :
+case 0x76 :
+case 0x77 :
+case 0x78 :
+case 0x79 :
+case 0x7A :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0x7B :
+case 0x7C :
+case 0x7D :
+case 0x7E :
+ return GRN_CHAR_SYMBOL;
+ break;
+case 0x7F :
+case 0x80 :
+case 0x81 :
+case 0x82 :
+case 0x83 :
+case 0x84 :
+case 0x85 :
+case 0x86 :
+case 0x87 :
+case 0x88 :
+case 0x89 :
+case 0x8A :
+case 0x8B :
+case 0x8C :
+case 0x8D :
+case 0x8E :
+case 0x8F :
+case 0x90 :
+case 0x91 :
+case 0x92 :
+case 0x93 :
+case 0x94 :
+case 0x95 :
+case 0x96 :
+case 0x97 :
+case 0x98 :
+case 0x99 :
+case 0x9A :
+case 0x9B :
+case 0x9C :
+case 0x9D :
+case 0x9E :
+case 0x9F :
+case 0xA0 :
+case 0xA1 :
+case 0xA2 :
+case 0xA3 :
+case 0xA4 :
+case 0xA5 :
+case 0xA6 :
+case 0xA7 :
+case 0xA8 :
+case 0xA9 :
+case 0xAA :
+case 0xAB :
+case 0xAC :
+case 0xAD :
+case 0xAE :
+case 0xAF :
+case 0xB0 :
+case 0xB1 :
+case 0xB2 :
+case 0xB3 :
+case 0xB4 :
+case 0xB5 :
+case 0xB6 :
+case 0xB7 :
+case 0xB8 :
+case 0xB9 :
+case 0xBA :
+case 0xBB :
+case 0xBC :
+case 0xBD :
+case 0xBE :
+case 0xBF :
+case 0xC0 :
+case 0xC1 :
+ return GRN_CHAR_OTHERS;
+ break;
+case 0xC2 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAC :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+case 0xC3 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB8 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xC4 :
+case 0xC5 :
+case 0xC6 :
+case 0xC7 :
+case 0xC8 :
+case 0xC9 :
+case 0xCA :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0xCB :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAF :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+case 0xCC :
+ return GRN_CHAR_OTHERS;
+ break;
+case 0xCD :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xCE :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA3 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xCF :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB7 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xD0 :
+case 0xD1 :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0xD2 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x82 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xD3 :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0xD4 :
+ if (str[1] < 0x94) { return GRN_CHAR_ALPHA; }
+ if (str[1] < 0xB1) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+case 0xD5 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA1 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xD6 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xD7 :
+ switch (str[1]) {
+ case 0x80 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x83 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB5 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xD8 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xD9 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB1 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xDA :
+ return GRN_CHAR_ALPHA;
+ break;
+case 0xDB :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x94 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+case 0xDC :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xDD :
+ if (str[1] < 0x8D) { return GRN_CHAR_OTHERS; }
+ if (str[1] < 0xAE) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+case 0xDE :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xDF :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xE0 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA4 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBA :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB2 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x83 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB1 :
+ case 0xB2 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB3 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB5 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9C :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x83 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA6 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB4 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x92 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xE1 :
+ switch (str[1]) {
+ case 0x80 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA2 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA8 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x82 :
+ if (str[2] < 0xA0) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x83 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ if (str[2] < 0x9A) { return GRN_CHAR_ALPHA; }
+ if (str[2] < 0x9F) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ if (str[2] < 0xA3) { return GRN_CHAR_ALPHA; }
+ if (str[2] < 0xA8) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ if (str[2] < 0xBA) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x99 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x81 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBD :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8F :
+ if (str[2] < 0xB5) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ if (str[2] < 0x81) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x99 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB1 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB7 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB1 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9E :
+ if (str[2] < 0xB4) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xA1 :
+ if (str[2] < 0xB8) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA2 :
+ if (str[2] < 0xA9) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA4 :
+ if (str[2] < 0x9D) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA5 :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA6 :
+ if (str[2] < 0xAA) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA7 :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAC :
+ if (str[2] < 0x85) { return GRN_CHAR_OTHERS; }
+ if (str[2] < 0xB4) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAD :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBD :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ if (str[2] < 0x9C) { return GRN_CHAR_ALPHA; }
+ if (str[2] < 0xA0) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ if (str[2] < 0xBA) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9A :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xE2 :
+ switch (str[1]) {
+ case 0x80 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB1 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB6 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x83 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x82 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x94 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBC :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ default :
+ return GRN_CHAR_DIGIT;
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8F :
+ if (str[2] < 0xA8) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ if (str[2] < 0xA7) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x91 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_DIGIT;
+ break;
+ }
+ break;
+ case 0x92 :
+ if (str[2] < 0x9C) { return GRN_CHAR_DIGIT; }
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x93 :
+ if (str[2] < 0xAA) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9A :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB3 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA8 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA9 :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8D :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x96 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB6 :
+ default :
+ return GRN_CHAR_DIGIT;
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x94 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB0 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAC :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA4 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB8 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB2 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB3 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBD :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAF :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x97 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9F :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x98 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBC :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+case 0xE3 :
+ switch (str[1]) {
+ case 0x80 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x81 :
+ return GRN_CHAR_HIRAGANA;
+ break;
+ case 0x82 :
+ if (str[2] < 0xA0) { return GRN_CHAR_HIRAGANA; }
+ return GRN_CHAR_KATAKANA;
+ break;
+ case 0x83 :
+ return GRN_CHAR_KATAKANA;
+ break;
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0x87 :
+ if (str[2] < 0xB0) { return GRN_CHAR_KANJI; }
+ return GRN_CHAR_KATAKANA;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ default :
+ return GRN_CHAR_KANJI;
+ break;
+ }
+ break;
+case 0xE4 :
+ if (str[1] < 0xB7) { return GRN_CHAR_KANJI; }
+ if (str[1] < 0xB8) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_KANJI;
+ break;
+case 0xE5 :
+case 0xE6 :
+case 0xE7 :
+case 0xE8 :
+case 0xE9 :
+ return GRN_CHAR_KANJI;
+ break;
+case 0xEA :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0x93 :
+ if (str[2] < 0x90) { return GRN_CHAR_KANJI; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9C :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA2 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x82 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAC :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB8 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_KANJI;
+ break;
+ }
+ break;
+case 0xEB :
+case 0xEC :
+ return GRN_CHAR_KANJI;
+ break;
+case 0xED :
+ if (str[1] < 0x9E) { return GRN_CHAR_KANJI; }
+ if (str[1] == 0x9E) {
+ if (str[2] < 0xB0) { return GRN_CHAR_KANJI; }
+ return GRN_CHAR_OTHERS;
+ }
+ return GRN_CHAR_OTHERS;
+ break;
+case 0xEE :
+ return GRN_CHAR_OTHERS;
+ break;
+case 0xEF :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0xAC :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x82 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xAE :
+ if (str[2] < 0xB2) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAF :
+ if (str[2] < 0x93) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ if (str[2] < 0xBE) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB5 :
+ if (str[2] < 0x90) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ if (str[2] < 0x90) { return GRN_CHAR_ALPHA; }
+ if (str[2] < 0x92) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB7 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBE :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x93 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB6 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ if (str[2] < 0xBD) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x80 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA6 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xBE :
+ if (str[2] < 0xBF) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+case 0xF0 :
+ switch (str[1]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ switch (str[2]) {
+ case 0x80 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ case 0xBD :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBE :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x82 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x83 :
+ if (str[3] < 0xBB) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB7 :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x85 :
+ if (str[3] < 0xB9) { return GRN_CHAR_DIGIT; }
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ if (str[3] < 0x8A) { return GRN_CHAR_SYMBOL; }
+ if (str[3] < 0x8B) { return GRN_CHAR_DIGIT; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (str[3]) {
+ case 0x80 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x81 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8A :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x8B :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x90 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x96 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x90 :
+ case 0x91 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xAA :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB6 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB7 :
+ case 0xB8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB9 :
+ case 0xBA :
+ case 0xBB :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA4 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA8 :
+ switch (str[3]) {
+ case 0x80 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x94 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x98 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB4 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x99 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8D :
+ if (str[3] < 0xAF) { return GRN_CHAR_ALPHA; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0x91 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB4 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9D :
+ switch (str[2]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x83 :
+ if (str[3] < 0xB6) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x84 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAD :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ default :
+ return GRN_CHAR_SYMBOL;
+ break;
+ }
+ break;
+ case 0x87 :
+ if (str[3] < 0x9E) { return GRN_CHAR_SYMBOL; }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x88 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x89 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x85 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x86 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8C :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8D :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ return GRN_CHAR_DIGIT;
+ break;
+ case 0xB2 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x8E :
+ case 0x8F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ if (str[3] < 0x95) { return GRN_CHAR_ALPHA; }
+ if (str[3] < 0x96) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x92 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA2 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA3 :
+ case 0xA4 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA5 :
+ case 0xA6 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAD :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBB :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBC :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBD :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x93 :
+ if (str[3] < 0x84) { return GRN_CHAR_ALPHA; }
+ if (str[3] < 0x85) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x94 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x86 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8B :
+ case 0x8C :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x95 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBA :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xBB :
+ case 0xBC :
+ case 0xBD :
+ case 0xBE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBF :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x85 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x86 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x91 :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x92 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9A :
+ if (str[3] < 0xA6) { return GRN_CHAR_ALPHA; }
+ if (str[3] < 0xA8) { return GRN_CHAR_OTHERS; }
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ switch (str[3]) {
+ case 0x80 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x81 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x9B :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ case 0xB5 :
+ case 0xB6 :
+ case 0xB7 :
+ case 0xB8 :
+ case 0xB9 :
+ case 0xBA :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xBB :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xBC :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x95 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ case 0xAF :
+ case 0xB0 :
+ case 0xB1 :
+ case 0xB2 :
+ case 0xB3 :
+ case 0xB4 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xB5 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB6 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8F :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ case 0xAA :
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xAF :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xB0 :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ case 0x83 :
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x89 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x8A :
+ case 0x8B :
+ case 0x8C :
+ case 0x8D :
+ case 0x8E :
+ case 0x8F :
+ case 0x90 :
+ case 0x91 :
+ case 0x92 :
+ case 0x93 :
+ case 0x94 :
+ case 0x95 :
+ case 0x96 :
+ case 0x97 :
+ case 0x98 :
+ case 0x99 :
+ case 0x9A :
+ case 0x9B :
+ case 0x9C :
+ case 0x9D :
+ case 0x9E :
+ case 0x9F :
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0xA9 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0xAA :
+ default :
+ return GRN_CHAR_ALPHA;
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (str[3]) {
+ case 0x80 :
+ case 0x81 :
+ case 0x82 :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x83 :
+ return GRN_CHAR_SYMBOL;
+ break;
+ case 0x84 :
+ case 0x85 :
+ case 0x86 :
+ case 0x87 :
+ case 0x88 :
+ case 0x89 :
+ case 0x8A :
+ case 0x8B :
+ return GRN_CHAR_ALPHA;
+ break;
+ case 0x8C :
+ case 0x8D :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0x8E :
+ default :
+ return GRN_CHAR_DIGIT;
+ break;
+ }
+ break;
+ case 0xA0 :
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ case 0x9E :
+ case 0x9F :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xA0 :
+ case 0xA1 :
+ case 0xA2 :
+ case 0xA3 :
+ case 0xA4 :
+ case 0xA5 :
+ case 0xA6 :
+ case 0xA7 :
+ case 0xA8 :
+ case 0xA9 :
+ return GRN_CHAR_KANJI;
+ break;
+ case 0xAA :
+ if (str[2] < 0x9B) { return GRN_CHAR_KANJI; }
+ if (str[2] == 0x9B) {
+ if (str[3] < 0xA0) { return GRN_CHAR_KANJI; }
+ return GRN_CHAR_OTHERS;
+ }
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAB :
+ case 0xAC :
+ case 0xAD :
+ case 0xAE :
+ return GRN_CHAR_OTHERS;
+ break;
+ case 0xAF :
+ if (str[2] < 0xA0) { return GRN_CHAR_OTHERS; }
+ if (str[2] < 0xA8) { return GRN_CHAR_KANJI; }
+ if (str[2] == 0xA8) {
+ if (str[3] < 0xA0) { return GRN_CHAR_KANJI; }
+ return GRN_CHAR_OTHERS;
+ }
+ return GRN_CHAR_OTHERS;
+ break;
+ default :
+ return GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+default :
+ return GRN_CHAR_OTHERS;
+ break;
+}
+ return -1;
+}
+
+const char *
+grn_nfkc_map1(const unsigned char *str)
+{
+switch (str[0]) {
+case 0x41 :
+ return "\x61";
+ break;
+case 0x42 :
+ return "\x62";
+ break;
+case 0x43 :
+ return "\x63";
+ break;
+case 0x44 :
+ return "\x64";
+ break;
+case 0x45 :
+ return "\x65";
+ break;
+case 0x46 :
+ return "\x66";
+ break;
+case 0x47 :
+ return "\x67";
+ break;
+case 0x48 :
+ return "\x68";
+ break;
+case 0x49 :
+ return "\x69";
+ break;
+case 0x4A :
+ return "\x6A";
+ break;
+case 0x4B :
+ return "\x6B";
+ break;
+case 0x4C :
+ return "\x6C";
+ break;
+case 0x4D :
+ return "\x6D";
+ break;
+case 0x4E :
+ return "\x6E";
+ break;
+case 0x4F :
+ return "\x6F";
+ break;
+case 0x50 :
+ return "\x70";
+ break;
+case 0x51 :
+ return "\x71";
+ break;
+case 0x52 :
+ return "\x72";
+ break;
+case 0x53 :
+ return "\x73";
+ break;
+case 0x54 :
+ return "\x74";
+ break;
+case 0x55 :
+ return "\x75";
+ break;
+case 0x56 :
+ return "\x76";
+ break;
+case 0x57 :
+ return "\x77";
+ break;
+case 0x58 :
+ return "\x78";
+ break;
+case 0x59 :
+ return "\x79";
+ break;
+case 0x5A :
+ return "\x7A";
+ break;
+case 0xC2 :
+ switch (str[1]) {
+ case 0xA0 :
+ return "\x20";
+ break;
+ case 0xA8 :
+ return "\xCC\x88";
+ break;
+ case 0xAA :
+ return "\x61";
+ break;
+ case 0xAF :
+ return "\xCC\x84";
+ break;
+ case 0xB2 :
+ return "\x32";
+ break;
+ case 0xB3 :
+ return "\x33";
+ break;
+ case 0xB4 :
+ return "\xCC\x81";
+ break;
+ case 0xB5 :
+ return "\xCE\xBC";
+ break;
+ case 0xB8 :
+ return "\xCC\xA7";
+ break;
+ case 0xB9 :
+ return "\x31";
+ break;
+ case 0xBA :
+ return "\x6F";
+ break;
+ case 0xBC :
+ return "\x31\xE2\x81\x84\x34";
+ break;
+ case 0xBD :
+ return "\x31\xE2\x81\x84\x32";
+ break;
+ case 0xBE :
+ return "\x33\xE2\x81\x84\x34";
+ break;
+ }
+ break;
+case 0xC3 :
+ switch (str[1]) {
+ case 0x80 :
+ return "\xC3\xA0";
+ break;
+ case 0x81 :
+ return "\xC3\xA1";
+ break;
+ case 0x82 :
+ return "\xC3\xA2";
+ break;
+ case 0x83 :
+ return "\xC3\xA3";
+ break;
+ case 0x84 :
+ return "\xC3\xA4";
+ break;
+ case 0x85 :
+ return "\xC3\xA5";
+ break;
+ case 0x87 :
+ return "\xC3\xA7";
+ break;
+ case 0x88 :
+ return "\xC3\xA8";
+ break;
+ case 0x89 :
+ return "\xC3\xA9";
+ break;
+ case 0x8A :
+ return "\xC3\xAA";
+ break;
+ case 0x8B :
+ return "\xC3\xAB";
+ break;
+ case 0x8C :
+ return "\xC3\xAC";
+ break;
+ case 0x8D :
+ return "\xC3\xAD";
+ break;
+ case 0x8E :
+ return "\xC3\xAE";
+ break;
+ case 0x8F :
+ return "\xC3\xAF";
+ break;
+ case 0x91 :
+ return "\xC3\xB1";
+ break;
+ case 0x92 :
+ return "\xC3\xB2";
+ break;
+ case 0x93 :
+ return "\xC3\xB3";
+ break;
+ case 0x94 :
+ return "\xC3\xB4";
+ break;
+ case 0x95 :
+ return "\xC3\xB5";
+ break;
+ case 0x96 :
+ return "\xC3\xB6";
+ break;
+ case 0x99 :
+ return "\xC3\xB9";
+ break;
+ case 0x9A :
+ return "\xC3\xBA";
+ break;
+ case 0x9B :
+ return "\xC3\xBB";
+ break;
+ case 0x9C :
+ return "\xC3\xBC";
+ break;
+ case 0x9D :
+ return "\xC3\xBD";
+ break;
+ }
+ break;
+case 0xC4 :
+ switch (str[1]) {
+ case 0x80 :
+ return "\xC4\x81";
+ break;
+ case 0x82 :
+ return "\xC4\x83";
+ break;
+ case 0x84 :
+ return "\xC4\x85";
+ break;
+ case 0x86 :
+ return "\xC4\x87";
+ break;
+ case 0x88 :
+ return "\xC4\x89";
+ break;
+ case 0x8A :
+ return "\xC4\x8B";
+ break;
+ case 0x8C :
+ return "\xC4\x8D";
+ break;
+ case 0x8E :
+ return "\xC4\x8F";
+ break;
+ case 0x92 :
+ return "\xC4\x93";
+ break;
+ case 0x94 :
+ return "\xC4\x95";
+ break;
+ case 0x96 :
+ return "\xC4\x97";
+ break;
+ case 0x98 :
+ return "\xC4\x99";
+ break;
+ case 0x9A :
+ return "\xC4\x9B";
+ break;
+ case 0x9C :
+ return "\xC4\x9D";
+ break;
+ case 0x9E :
+ return "\xC4\x9F";
+ break;
+ case 0xA0 :
+ return "\xC4\xA1";
+ break;
+ case 0xA2 :
+ return "\xC4\xA3";
+ break;
+ case 0xA4 :
+ return "\xC4\xA5";
+ break;
+ case 0xA8 :
+ return "\xC4\xA9";
+ break;
+ case 0xAA :
+ return "\xC4\xAB";
+ break;
+ case 0xAC :
+ return "\xC4\xAD";
+ break;
+ case 0xAE :
+ return "\xC4\xAF";
+ break;
+ case 0xB0 :
+ return "\x69\xCC\x87";
+ break;
+ case 0xB2 :
+ return "\x69\x6A";
+ break;
+ case 0xB3 :
+ return "\x69\x6A";
+ break;
+ case 0xB4 :
+ return "\xC4\xB5";
+ break;
+ case 0xB6 :
+ return "\xC4\xB7";
+ break;
+ case 0xB9 :
+ return "\xC4\xBA";
+ break;
+ case 0xBB :
+ return "\xC4\xBC";
+ break;
+ case 0xBD :
+ return "\xC4\xBE";
+ break;
+ case 0xBF :
+ return "\x6C\xC2\xB7";
+ break;
+ }
+ break;
+case 0xC5 :
+ switch (str[1]) {
+ case 0x80 :
+ return "\x6C\xC2\xB7";
+ break;
+ case 0x83 :
+ return "\xC5\x84";
+ break;
+ case 0x85 :
+ return "\xC5\x86";
+ break;
+ case 0x87 :
+ return "\xC5\x88";
+ break;
+ case 0x89 :
+ return "\xCA\xBC\x6E";
+ break;
+ case 0x8C :
+ return "\xC5\x8D";
+ break;
+ case 0x8E :
+ return "\xC5\x8F";
+ break;
+ case 0x90 :
+ return "\xC5\x91";
+ break;
+ case 0x94 :
+ return "\xC5\x95";
+ break;
+ case 0x96 :
+ return "\xC5\x97";
+ break;
+ case 0x98 :
+ return "\xC5\x99";
+ break;
+ case 0x9A :
+ return "\xC5\x9B";
+ break;
+ case 0x9C :
+ return "\xC5\x9D";
+ break;
+ case 0x9E :
+ return "\xC5\x9F";
+ break;
+ case 0xA0 :
+ return "\xC5\xA1";
+ break;
+ case 0xA2 :
+ return "\xC5\xA3";
+ break;
+ case 0xA4 :
+ return "\xC5\xA5";
+ break;
+ case 0xA8 :
+ return "\xC5\xA9";
+ break;
+ case 0xAA :
+ return "\xC5\xAB";
+ break;
+ case 0xAC :
+ return "\xC5\xAD";
+ break;
+ case 0xAE :
+ return "\xC5\xAF";
+ break;
+ case 0xB0 :
+ return "\xC5\xB1";
+ break;
+ case 0xB2 :
+ return "\xC5\xB3";
+ break;
+ case 0xB4 :
+ return "\xC5\xB5";
+ break;
+ case 0xB6 :
+ return "\xC5\xB7";
+ break;
+ case 0xB8 :
+ return "\xC3\xBF";
+ break;
+ case 0xB9 :
+ return "\xC5\xBA";
+ break;
+ case 0xBB :
+ return "\xC5\xBC";
+ break;
+ case 0xBD :
+ return "\xC5\xBE";
+ break;
+ case 0xBF :
+ return "\x73";
+ break;
+ }
+ break;
+case 0xC6 :
+ switch (str[1]) {
+ case 0xA0 :
+ return "\xC6\xA1";
+ break;
+ case 0xAF :
+ return "\xC6\xB0";
+ break;
+ }
+ break;
+case 0xC7 :
+ switch (str[1]) {
+ case 0x84 :
+ return "\x64\xC5\xBE";
+ break;
+ case 0x85 :
+ return "\x64\xC5\xBE";
+ break;
+ case 0x86 :
+ return "\x64\xC5\xBE";
+ break;
+ case 0x87 :
+ return "\x6C\x6A";
+ break;
+ case 0x88 :
+ return "\x6C\x6A";
+ break;
+ case 0x89 :
+ return "\x6C\x6A";
+ break;
+ case 0x8A :
+ return "\x6E\x6A";
+ break;
+ case 0x8B :
+ return "\x6E\x6A";
+ break;
+ case 0x8C :
+ return "\x6E\x6A";
+ break;
+ case 0x8D :
+ return "\xC7\x8E";
+ break;
+ case 0x8F :
+ return "\xC7\x90";
+ break;
+ case 0x91 :
+ return "\xC7\x92";
+ break;
+ case 0x93 :
+ return "\xC7\x94";
+ break;
+ case 0x95 :
+ return "\xC7\x96";
+ break;
+ case 0x97 :
+ return "\xC7\x98";
+ break;
+ case 0x99 :
+ return "\xC7\x9A";
+ break;
+ case 0x9B :
+ return "\xC7\x9C";
+ break;
+ case 0x9E :
+ return "\xC7\x9F";
+ break;
+ case 0xA0 :
+ return "\xC7\xA1";
+ break;
+ case 0xA6 :
+ return "\xC7\xA7";
+ break;
+ case 0xA8 :
+ return "\xC7\xA9";
+ break;
+ case 0xAA :
+ return "\xC7\xAB";
+ break;
+ case 0xAC :
+ return "\xC7\xAD";
+ break;
+ case 0xB1 :
+ return "\x64\x7A";
+ break;
+ case 0xB2 :
+ return "\x64\x7A";
+ break;
+ case 0xB3 :
+ return "\x64\x7A";
+ break;
+ case 0xB4 :
+ return "\xC7\xB5";
+ break;
+ case 0xB8 :
+ return "\xC7\xB9";
+ break;
+ case 0xBA :
+ return "\xC7\xBB";
+ break;
+ }
+ break;
+case 0xC8 :
+ switch (str[1]) {
+ case 0x80 :
+ return "\xC8\x81";
+ break;
+ case 0x82 :
+ return "\xC8\x83";
+ break;
+ case 0x84 :
+ return "\xC8\x85";
+ break;
+ case 0x86 :
+ return "\xC8\x87";
+ break;
+ case 0x88 :
+ return "\xC8\x89";
+ break;
+ case 0x8A :
+ return "\xC8\x8B";
+ break;
+ case 0x8C :
+ return "\xC8\x8D";
+ break;
+ case 0x8E :
+ return "\xC8\x8F";
+ break;
+ case 0x90 :
+ return "\xC8\x91";
+ break;
+ case 0x92 :
+ return "\xC8\x93";
+ break;
+ case 0x94 :
+ return "\xC8\x95";
+ break;
+ case 0x96 :
+ return "\xC8\x97";
+ break;
+ case 0x98 :
+ return "\xC8\x99";
+ break;
+ case 0x9A :
+ return "\xC8\x9B";
+ break;
+ case 0x9E :
+ return "\xC8\x9F";
+ break;
+ case 0xA6 :
+ return "\xC8\xA7";
+ break;
+ case 0xA8 :
+ return "\xC8\xA9";
+ break;
+ case 0xAA :
+ return "\xC8\xAB";
+ break;
+ case 0xAC :
+ return "\xC8\xAD";
+ break;
+ case 0xAE :
+ return "\xC8\xAF";
+ break;
+ case 0xB0 :
+ return "\xC8\xB1";
+ break;
+ case 0xB2 :
+ return "\xC8\xB3";
+ break;
+ }
+ break;
+case 0xCA :
+ switch (str[1]) {
+ case 0xB0 :
+ return "\x68";
+ break;
+ case 0xB1 :
+ return "\xC9\xA6";
+ break;
+ case 0xB2 :
+ return "\x6A";
+ break;
+ case 0xB3 :
+ return "\x72";
+ break;
+ case 0xB4 :
+ return "\xC9\xB9";
+ break;
+ case 0xB5 :
+ return "\xC9\xBB";
+ break;
+ case 0xB6 :
+ return "\xCA\x81";
+ break;
+ case 0xB7 :
+ return "\x77";
+ break;
+ case 0xB8 :
+ return "\x79";
+ break;
+ }
+ break;
+case 0xCB :
+ switch (str[1]) {
+ case 0x98 :
+ return "\xCC\x86";
+ break;
+ case 0x99 :
+ return "\xCC\x87";
+ break;
+ case 0x9A :
+ return "\xCC\x8A";
+ break;
+ case 0x9B :
+ return "\xCC\xA8";
+ break;
+ case 0x9C :
+ return "\xCC\x83";
+ break;
+ case 0x9D :
+ return "\xCC\x8B";
+ break;
+ case 0xA0 :
+ return "\xC9\xA3";
+ break;
+ case 0xA1 :
+ return "\x6C";
+ break;
+ case 0xA2 :
+ return "\x73";
+ break;
+ case 0xA3 :
+ return "\x78";
+ break;
+ case 0xA4 :
+ return "\xCA\x95";
+ break;
+ }
+ break;
+case 0xCD :
+ switch (str[1]) {
+ case 0x80 :
+ return "\xCC\x80";
+ break;
+ case 0x81 :
+ return "\xCC\x81";
+ break;
+ case 0x83 :
+ return "\xCC\x93";
+ break;
+ case 0x84 :
+ return "\xCC\x88\xCC\x81";
+ break;
+ case 0xB4 :
+ return "\xCA\xB9";
+ break;
+ case 0xBA :
+ return "\xCD\x85";
+ break;
+ case 0xBE :
+ return "\x3B";
+ break;
+ }
+ break;
+case 0xCE :
+ switch (str[1]) {
+ case 0x84 :
+ return "\xCC\x81";
+ break;
+ case 0x85 :
+ return "\xCC\x88\xCC\x81";
+ break;
+ case 0x87 :
+ return "\xC2\xB7";
+ break;
+ }
+ break;
+case 0xCF :
+ switch (str[1]) {
+ case 0x90 :
+ return "\xCE\xB2";
+ break;
+ case 0x91 :
+ return "\xCE\xB8";
+ break;
+ case 0x92 :
+ return "\xCE\xA5";
+ break;
+ case 0x93 :
+ return "\xCE\x8E";
+ break;
+ case 0x94 :
+ return "\xCE\xAB";
+ break;
+ case 0x95 :
+ return "\xCF\x86";
+ break;
+ case 0x96 :
+ return "\xCF\x80";
+ break;
+ case 0xB0 :
+ return "\xCE\xBA";
+ break;
+ case 0xB1 :
+ return "\xCF\x81";
+ break;
+ case 0xB2 :
+ return "\xCF\x82";
+ break;
+ case 0xB4 :
+ return "\xCE\x98";
+ break;
+ case 0xB5 :
+ return "\xCE\xB5";
+ break;
+ case 0xB9 :
+ return "\xCE\xA3";
+ break;
+ }
+ break;
+case 0xD6 :
+ if (str[1] == 0x87) {
+ return "\xD5\xA5\xD6\x82";
+ }
+ break;
+case 0xD9 :
+ switch (str[1]) {
+ case 0xB5 :
+ return "\xD8\xA7\xD9\xB4";
+ break;
+ case 0xB6 :
+ return "\xD9\x88\xD9\xB4";
+ break;
+ case 0xB7 :
+ return "\xDB\x87\xD9\xB4";
+ break;
+ case 0xB8 :
+ return "\xD9\x8A\xD9\xB4";
+ break;
+ }
+ break;
+case 0xE0 :
+ switch (str[1]) {
+ case 0xA5 :
+ switch (str[2]) {
+ case 0x98 :
+ return "\xE0\xA4\x95\xE0\xA4\xBC";
+ break;
+ case 0x99 :
+ return "\xE0\xA4\x96\xE0\xA4\xBC";
+ break;
+ case 0x9A :
+ return "\xE0\xA4\x97\xE0\xA4\xBC";
+ break;
+ case 0x9B :
+ return "\xE0\xA4\x9C\xE0\xA4\xBC";
+ break;
+ case 0x9C :
+ return "\xE0\xA4\xA1\xE0\xA4\xBC";
+ break;
+ case 0x9D :
+ return "\xE0\xA4\xA2\xE0\xA4\xBC";
+ break;
+ case 0x9E :
+ return "\xE0\xA4\xAB\xE0\xA4\xBC";
+ break;
+ case 0x9F :
+ return "\xE0\xA4\xAF\xE0\xA4\xBC";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (str[2]) {
+ case 0x9C :
+ return "\xE0\xA6\xA1\xE0\xA6\xBC";
+ break;
+ case 0x9D :
+ return "\xE0\xA6\xA2\xE0\xA6\xBC";
+ break;
+ case 0x9F :
+ return "\xE0\xA6\xAF\xE0\xA6\xBC";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (str[2]) {
+ case 0xB3 :
+ return "\xE0\xA8\xB2\xE0\xA8\xBC";
+ break;
+ case 0xB6 :
+ return "\xE0\xA8\xB8\xE0\xA8\xBC";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (str[2]) {
+ case 0x99 :
+ return "\xE0\xA8\x96\xE0\xA8\xBC";
+ break;
+ case 0x9A :
+ return "\xE0\xA8\x97\xE0\xA8\xBC";
+ break;
+ case 0x9B :
+ return "\xE0\xA8\x9C\xE0\xA8\xBC";
+ break;
+ case 0x9E :
+ return "\xE0\xA8\xAB\xE0\xA8\xBC";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (str[2]) {
+ case 0x9C :
+ return "\xE0\xAC\xA1\xE0\xAC\xBC";
+ break;
+ case 0x9D :
+ return "\xE0\xAC\xA2\xE0\xAC\xBC";
+ break;
+ }
+ break;
+ case 0xB8 :
+ if (str[2] == 0xB3) {
+ return "\xE0\xB9\x8D\xE0\xB8\xB2";
+ }
+ break;
+ case 0xBA :
+ if (str[2] == 0xB3) {
+ return "\xE0\xBB\x8D\xE0\xBA\xB2";
+ }
+ break;
+ case 0xBB :
+ switch (str[2]) {
+ case 0x9C :
+ return "\xE0\xBA\xAB\xE0\xBA\x99";
+ break;
+ case 0x9D :
+ return "\xE0\xBA\xAB\xE0\xBA\xA1";
+ break;
+ }
+ break;
+ case 0xBC :
+ if (str[2] == 0x8C) {
+ return "\xE0\xBC\x8B";
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x83 :
+ return "\xE0\xBD\x82\xE0\xBE\xB7";
+ break;
+ case 0x8D :
+ return "\xE0\xBD\x8C\xE0\xBE\xB7";
+ break;
+ case 0x92 :
+ return "\xE0\xBD\x91\xE0\xBE\xB7";
+ break;
+ case 0x97 :
+ return "\xE0\xBD\x96\xE0\xBE\xB7";
+ break;
+ case 0x9C :
+ return "\xE0\xBD\x9B\xE0\xBE\xB7";
+ break;
+ case 0xA9 :
+ return "\xE0\xBD\x80\xE0\xBE\xB5";
+ break;
+ case 0xB3 :
+ return "\xE0\xBD\xB1\xE0\xBD\xB2";
+ break;
+ case 0xB5 :
+ return "\xE0\xBD\xB1\xE0\xBD\xB4";
+ break;
+ case 0xB6 :
+ return "\xE0\xBE\xB2\xE0\xBE\x80";
+ break;
+ case 0xB7 :
+ return "\xE0\xBE\xB2\xE0\xBD\xB1\xE0\xBE\x80";
+ break;
+ case 0xB8 :
+ return "\xE0\xBE\xB3\xE0\xBE\x80";
+ break;
+ case 0xB9 :
+ return "\xE0\xBE\xB3\xE0\xBD\xB1\xE0\xBE\x80";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0x81 :
+ return "\xE0\xBD\xB1\xE0\xBE\x80";
+ break;
+ case 0x93 :
+ return "\xE0\xBE\x92\xE0\xBE\xB7";
+ break;
+ case 0x9D :
+ return "\xE0\xBE\x9C\xE0\xBE\xB7";
+ break;
+ case 0xA2 :
+ return "\xE0\xBE\xA1\xE0\xBE\xB7";
+ break;
+ case 0xA7 :
+ return "\xE0\xBE\xA6\xE0\xBE\xB7";
+ break;
+ case 0xAC :
+ return "\xE0\xBE\xAB\xE0\xBE\xB7";
+ break;
+ case 0xB9 :
+ return "\xE0\xBE\x90\xE0\xBE\xB5";
+ break;
+ }
+ break;
+ }
+ break;
+case 0xE1 :
+ switch (str[1]) {
+ case 0x83 :
+ if (str[2] == 0xBC) {
+ return "\xE1\x83\x9C";
+ }
+ break;
+ case 0xB4 :
+ switch (str[2]) {
+ case 0xAC :
+ return "\x61";
+ break;
+ case 0xAD :
+ return "\xC3\x86";
+ break;
+ case 0xAE :
+ return "\x62";
+ break;
+ case 0xB0 :
+ return "\x64";
+ break;
+ case 0xB1 :
+ return "\x65";
+ break;
+ case 0xB2 :
+ return "\xC6\x8E";
+ break;
+ case 0xB3 :
+ return "\x67";
+ break;
+ case 0xB4 :
+ return "\x68";
+ break;
+ case 0xB5 :
+ return "\x69";
+ break;
+ case 0xB6 :
+ return "\x6A";
+ break;
+ case 0xB7 :
+ return "\x6B";
+ break;
+ case 0xB8 :
+ return "\x6C";
+ break;
+ case 0xB9 :
+ return "\x6D";
+ break;
+ case 0xBA :
+ return "\x6E";
+ break;
+ case 0xBC :
+ return "\x6F";
+ break;
+ case 0xBD :
+ return "\xC8\xA2";
+ break;
+ case 0xBE :
+ return "\x70";
+ break;
+ case 0xBF :
+ return "\x72";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x74";
+ break;
+ case 0x81 :
+ return "\x75";
+ break;
+ case 0x82 :
+ return "\x77";
+ break;
+ case 0x83 :
+ return "\x61";
+ break;
+ case 0x84 :
+ return "\xC9\x90";
+ break;
+ case 0x85 :
+ return "\xC9\x91";
+ break;
+ case 0x86 :
+ return "\xE1\xB4\x82";
+ break;
+ case 0x87 :
+ return "\x62";
+ break;
+ case 0x88 :
+ return "\x64";
+ break;
+ case 0x89 :
+ return "\x65";
+ break;
+ case 0x8A :
+ return "\xC9\x99";
+ break;
+ case 0x8B :
+ return "\xC9\x9B";
+ break;
+ case 0x8C :
+ return "\xC9\x9C";
+ break;
+ case 0x8D :
+ return "\x67";
+ break;
+ case 0x8F :
+ return "\x6B";
+ break;
+ case 0x90 :
+ return "\x6D";
+ break;
+ case 0x91 :
+ return "\xC5\x8B";
+ break;
+ case 0x92 :
+ return "\x6F";
+ break;
+ case 0x93 :
+ return "\xC9\x94";
+ break;
+ case 0x94 :
+ return "\xE1\xB4\x96";
+ break;
+ case 0x95 :
+ return "\xE1\xB4\x97";
+ break;
+ case 0x96 :
+ return "\x70";
+ break;
+ case 0x97 :
+ return "\x74";
+ break;
+ case 0x98 :
+ return "\x75";
+ break;
+ case 0x99 :
+ return "\xE1\xB4\x9D";
+ break;
+ case 0x9A :
+ return "\xC9\xAF";
+ break;
+ case 0x9B :
+ return "\x76";
+ break;
+ case 0x9C :
+ return "\xE1\xB4\xA5";
+ break;
+ case 0x9D :
+ return "\xCE\xB2";
+ break;
+ case 0x9E :
+ return "\xCE\xB3";
+ break;
+ case 0x9F :
+ return "\xCE\xB4";
+ break;
+ case 0xA0 :
+ return "\xCF\x86";
+ break;
+ case 0xA1 :
+ return "\xCF\x87";
+ break;
+ case 0xA2 :
+ return "\x69";
+ break;
+ case 0xA3 :
+ return "\x72";
+ break;
+ case 0xA4 :
+ return "\x75";
+ break;
+ case 0xA5 :
+ return "\x76";
+ break;
+ case 0xA6 :
+ return "\xCE\xB2";
+ break;
+ case 0xA7 :
+ return "\xCE\xB3";
+ break;
+ case 0xA8 :
+ return "\xCF\x81";
+ break;
+ case 0xA9 :
+ return "\xCF\x86";
+ break;
+ case 0xAA :
+ return "\xCF\x87";
+ break;
+ case 0xB8 :
+ return "\xD0\xBD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (str[2]) {
+ case 0x9B :
+ return "\xC9\x92";
+ break;
+ case 0x9C :
+ return "\x63";
+ break;
+ case 0x9D :
+ return "\xC9\x95";
+ break;
+ case 0x9E :
+ return "\xC3\xB0";
+ break;
+ case 0x9F :
+ return "\xC9\x9C";
+ break;
+ case 0xA0 :
+ return "\x66";
+ break;
+ case 0xA1 :
+ return "\xC9\x9F";
+ break;
+ case 0xA2 :
+ return "\xC9\xA1";
+ break;
+ case 0xA3 :
+ return "\xC9\xA5";
+ break;
+ case 0xA4 :
+ return "\xC9\xA8";
+ break;
+ case 0xA5 :
+ return "\xC9\xA9";
+ break;
+ case 0xA6 :
+ return "\xC9\xAA";
+ break;
+ case 0xA7 :
+ return "\xE1\xB5\xBB";
+ break;
+ case 0xA8 :
+ return "\xCA\x9D";
+ break;
+ case 0xA9 :
+ return "\xC9\xAD";
+ break;
+ case 0xAA :
+ return "\xE1\xB6\x85";
+ break;
+ case 0xAB :
+ return "\xCA\x9F";
+ break;
+ case 0xAC :
+ return "\xC9\xB1";
+ break;
+ case 0xAD :
+ return "\xC9\xB0";
+ break;
+ case 0xAE :
+ return "\xC9\xB2";
+ break;
+ case 0xAF :
+ return "\xC9\xB3";
+ break;
+ case 0xB0 :
+ return "\xC9\xB4";
+ break;
+ case 0xB1 :
+ return "\xC9\xB5";
+ break;
+ case 0xB2 :
+ return "\xC9\xB8";
+ break;
+ case 0xB3 :
+ return "\xCA\x82";
+ break;
+ case 0xB4 :
+ return "\xCA\x83";
+ break;
+ case 0xB5 :
+ return "\xC6\xAB";
+ break;
+ case 0xB6 :
+ return "\xCA\x89";
+ break;
+ case 0xB7 :
+ return "\xCA\x8A";
+ break;
+ case 0xB8 :
+ return "\xE1\xB4\x9C";
+ break;
+ case 0xB9 :
+ return "\xCA\x8B";
+ break;
+ case 0xBA :
+ return "\xCA\x8C";
+ break;
+ case 0xBB :
+ return "\x7A";
+ break;
+ case 0xBC :
+ return "\xCA\x90";
+ break;
+ case 0xBD :
+ return "\xCA\x91";
+ break;
+ case 0xBE :
+ return "\xCA\x92";
+ break;
+ case 0xBF :
+ return "\xCE\xB8";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\xB8\x81";
+ break;
+ case 0x82 :
+ return "\xE1\xB8\x83";
+ break;
+ case 0x84 :
+ return "\xE1\xB8\x85";
+ break;
+ case 0x86 :
+ return "\xE1\xB8\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xB8\x89";
+ break;
+ case 0x8A :
+ return "\xE1\xB8\x8B";
+ break;
+ case 0x8C :
+ return "\xE1\xB8\x8D";
+ break;
+ case 0x8E :
+ return "\xE1\xB8\x8F";
+ break;
+ case 0x90 :
+ return "\xE1\xB8\x91";
+ break;
+ case 0x92 :
+ return "\xE1\xB8\x93";
+ break;
+ case 0x94 :
+ return "\xE1\xB8\x95";
+ break;
+ case 0x96 :
+ return "\xE1\xB8\x97";
+ break;
+ case 0x98 :
+ return "\xE1\xB8\x99";
+ break;
+ case 0x9A :
+ return "\xE1\xB8\x9B";
+ break;
+ case 0x9C :
+ return "\xE1\xB8\x9D";
+ break;
+ case 0x9E :
+ return "\xE1\xB8\x9F";
+ break;
+ case 0xA0 :
+ return "\xE1\xB8\xA1";
+ break;
+ case 0xA2 :
+ return "\xE1\xB8\xA3";
+ break;
+ case 0xA4 :
+ return "\xE1\xB8\xA5";
+ break;
+ case 0xA6 :
+ return "\xE1\xB8\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xB8\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xB8\xAB";
+ break;
+ case 0xAC :
+ return "\xE1\xB8\xAD";
+ break;
+ case 0xAE :
+ return "\xE1\xB8\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xB8\xB1";
+ break;
+ case 0xB2 :
+ return "\xE1\xB8\xB3";
+ break;
+ case 0xB4 :
+ return "\xE1\xB8\xB5";
+ break;
+ case 0xB6 :
+ return "\xE1\xB8\xB7";
+ break;
+ case 0xB8 :
+ return "\xE1\xB8\xB9";
+ break;
+ case 0xBA :
+ return "\xE1\xB8\xBB";
+ break;
+ case 0xBC :
+ return "\xE1\xB8\xBD";
+ break;
+ case 0xBE :
+ return "\xE1\xB8\xBF";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\xB9\x81";
+ break;
+ case 0x82 :
+ return "\xE1\xB9\x83";
+ break;
+ case 0x84 :
+ return "\xE1\xB9\x85";
+ break;
+ case 0x86 :
+ return "\xE1\xB9\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xB9\x89";
+ break;
+ case 0x8A :
+ return "\xE1\xB9\x8B";
+ break;
+ case 0x8C :
+ return "\xE1\xB9\x8D";
+ break;
+ case 0x8E :
+ return "\xE1\xB9\x8F";
+ break;
+ case 0x90 :
+ return "\xE1\xB9\x91";
+ break;
+ case 0x92 :
+ return "\xE1\xB9\x93";
+ break;
+ case 0x94 :
+ return "\xE1\xB9\x95";
+ break;
+ case 0x96 :
+ return "\xE1\xB9\x97";
+ break;
+ case 0x98 :
+ return "\xE1\xB9\x99";
+ break;
+ case 0x9A :
+ return "\xE1\xB9\x9B";
+ break;
+ case 0x9C :
+ return "\xE1\xB9\x9D";
+ break;
+ case 0x9E :
+ return "\xE1\xB9\x9F";
+ break;
+ case 0xA0 :
+ return "\xE1\xB9\xA1";
+ break;
+ case 0xA2 :
+ return "\xE1\xB9\xA3";
+ break;
+ case 0xA4 :
+ return "\xE1\xB9\xA5";
+ break;
+ case 0xA6 :
+ return "\xE1\xB9\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xB9\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xB9\xAB";
+ break;
+ case 0xAC :
+ return "\xE1\xB9\xAD";
+ break;
+ case 0xAE :
+ return "\xE1\xB9\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xB9\xB1";
+ break;
+ case 0xB2 :
+ return "\xE1\xB9\xB3";
+ break;
+ case 0xB4 :
+ return "\xE1\xB9\xB5";
+ break;
+ case 0xB6 :
+ return "\xE1\xB9\xB7";
+ break;
+ case 0xB8 :
+ return "\xE1\xB9\xB9";
+ break;
+ case 0xBA :
+ return "\xE1\xB9\xBB";
+ break;
+ case 0xBC :
+ return "\xE1\xB9\xBD";
+ break;
+ case 0xBE :
+ return "\xE1\xB9\xBF";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\xBA\x81";
+ break;
+ case 0x82 :
+ return "\xE1\xBA\x83";
+ break;
+ case 0x84 :
+ return "\xE1\xBA\x85";
+ break;
+ case 0x86 :
+ return "\xE1\xBA\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xBA\x89";
+ break;
+ case 0x8A :
+ return "\xE1\xBA\x8B";
+ break;
+ case 0x8C :
+ return "\xE1\xBA\x8D";
+ break;
+ case 0x8E :
+ return "\xE1\xBA\x8F";
+ break;
+ case 0x90 :
+ return "\xE1\xBA\x91";
+ break;
+ case 0x92 :
+ return "\xE1\xBA\x93";
+ break;
+ case 0x94 :
+ return "\xE1\xBA\x95";
+ break;
+ case 0x9A :
+ return "\x61\xCA\xBE";
+ break;
+ case 0x9B :
+ return "\xE1\xB9\xA1";
+ break;
+ case 0xA0 :
+ return "\xE1\xBA\xA1";
+ break;
+ case 0xA2 :
+ return "\xE1\xBA\xA3";
+ break;
+ case 0xA4 :
+ return "\xE1\xBA\xA5";
+ break;
+ case 0xA6 :
+ return "\xE1\xBA\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xBA\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xBA\xAB";
+ break;
+ case 0xAC :
+ return "\xE1\xBA\xAD";
+ break;
+ case 0xAE :
+ return "\xE1\xBA\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xBA\xB1";
+ break;
+ case 0xB2 :
+ return "\xE1\xBA\xB3";
+ break;
+ case 0xB4 :
+ return "\xE1\xBA\xB5";
+ break;
+ case 0xB6 :
+ return "\xE1\xBA\xB7";
+ break;
+ case 0xB8 :
+ return "\xE1\xBA\xB9";
+ break;
+ case 0xBA :
+ return "\xE1\xBA\xBB";
+ break;
+ case 0xBC :
+ return "\xE1\xBA\xBD";
+ break;
+ case 0xBE :
+ return "\xE1\xBA\xBF";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\xBB\x81";
+ break;
+ case 0x82 :
+ return "\xE1\xBB\x83";
+ break;
+ case 0x84 :
+ return "\xE1\xBB\x85";
+ break;
+ case 0x86 :
+ return "\xE1\xBB\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xBB\x89";
+ break;
+ case 0x8A :
+ return "\xE1\xBB\x8B";
+ break;
+ case 0x8C :
+ return "\xE1\xBB\x8D";
+ break;
+ case 0x8E :
+ return "\xE1\xBB\x8F";
+ break;
+ case 0x90 :
+ return "\xE1\xBB\x91";
+ break;
+ case 0x92 :
+ return "\xE1\xBB\x93";
+ break;
+ case 0x94 :
+ return "\xE1\xBB\x95";
+ break;
+ case 0x96 :
+ return "\xE1\xBB\x97";
+ break;
+ case 0x98 :
+ return "\xE1\xBB\x99";
+ break;
+ case 0x9A :
+ return "\xE1\xBB\x9B";
+ break;
+ case 0x9C :
+ return "\xE1\xBB\x9D";
+ break;
+ case 0x9E :
+ return "\xE1\xBB\x9F";
+ break;
+ case 0xA0 :
+ return "\xE1\xBB\xA1";
+ break;
+ case 0xA2 :
+ return "\xE1\xBB\xA3";
+ break;
+ case 0xA4 :
+ return "\xE1\xBB\xA5";
+ break;
+ case 0xA6 :
+ return "\xE1\xBB\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xBB\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xBB\xAB";
+ break;
+ case 0xAC :
+ return "\xE1\xBB\xAD";
+ break;
+ case 0xAE :
+ return "\xE1\xBB\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xB1";
+ break;
+ case 0xB2 :
+ return "\xE1\xBB\xB3";
+ break;
+ case 0xB4 :
+ return "\xE1\xBB\xB5";
+ break;
+ case 0xB6 :
+ return "\xE1\xBB\xB7";
+ break;
+ case 0xB8 :
+ return "\xE1\xBB\xB9";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0xB1 :
+ return "\xCE\xAC";
+ break;
+ case 0xB3 :
+ return "\xCE\xAD";
+ break;
+ case 0xB5 :
+ return "\xCE\xAE";
+ break;
+ case 0xB7 :
+ return "\xCE\xAF";
+ break;
+ case 0xB9 :
+ return "\xCF\x8C";
+ break;
+ case 0xBB :
+ return "\xCF\x8D";
+ break;
+ case 0xBD :
+ return "\xCF\x8E";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0xBB :
+ return "\xCE\x86";
+ break;
+ case 0xBD :
+ return "\xCC\x93";
+ break;
+ case 0xBE :
+ return "\xCE\xB9";
+ break;
+ case 0xBF :
+ return "\xCC\x93";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xCD\x82";
+ break;
+ case 0x81 :
+ return "\xCC\x88\xCD\x82";
+ break;
+ case 0x89 :
+ return "\xCE\x88";
+ break;
+ case 0x8B :
+ return "\xCE\x89";
+ break;
+ case 0x8D :
+ return "\xCC\x93\xCC\x80";
+ break;
+ case 0x8E :
+ return "\xCC\x93\xCC\x81";
+ break;
+ case 0x8F :
+ return "\xCC\x93\xCD\x82";
+ break;
+ case 0x93 :
+ return "\xCE\x90";
+ break;
+ case 0x9B :
+ return "\xCE\x8A";
+ break;
+ case 0x9D :
+ return "\xCC\x94\xCC\x80";
+ break;
+ case 0x9E :
+ return "\xCC\x94\xCC\x81";
+ break;
+ case 0x9F :
+ return "\xCC\x94\xCD\x82";
+ break;
+ case 0xA3 :
+ return "\xCE\xB0";
+ break;
+ case 0xAB :
+ return "\xCE\x8E";
+ break;
+ case 0xAD :
+ return "\xCC\x88\xCC\x80";
+ break;
+ case 0xAE :
+ return "\xCC\x88\xCC\x81";
+ break;
+ case 0xAF :
+ return "\x60";
+ break;
+ case 0xB9 :
+ return "\xCE\x8C";
+ break;
+ case 0xBB :
+ return "\xCE\x8F";
+ break;
+ case 0xBD :
+ return "\xCC\x81";
+ break;
+ case 0xBE :
+ return "\xCC\x94";
+ break;
+ }
+ break;
+ }
+ break;
+case 0xE2 :
+ switch (str[1]) {
+ case 0x80 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x20";
+ break;
+ case 0x81 :
+ return "\x20";
+ break;
+ case 0x82 :
+ return "\x20";
+ break;
+ case 0x83 :
+ return "\x20";
+ break;
+ case 0x84 :
+ return "\x20";
+ break;
+ case 0x85 :
+ return "\x20";
+ break;
+ case 0x86 :
+ return "\x20";
+ break;
+ case 0x87 :
+ return "\x20";
+ break;
+ case 0x88 :
+ return "\x20";
+ break;
+ case 0x89 :
+ return "\x20";
+ break;
+ case 0x8A :
+ return "\x20";
+ break;
+ case 0x91 :
+ return "\xE2\x80\x90";
+ break;
+ case 0x97 :
+ return "\xCC\xB3";
+ break;
+ case 0xA4 :
+ return "\x2E";
+ break;
+ case 0xA5 :
+ return "\x2E\x2E";
+ break;
+ case 0xA6 :
+ return "\x2E\x2E\x2E";
+ break;
+ case 0xAF :
+ return "\x20";
+ break;
+ case 0xB3 :
+ return "\xE2\x80\xB2\xE2\x80\xB2";
+ break;
+ case 0xB4 :
+ return "\xE2\x80\xB2\xE2\x80\xB2\xE2\x80\xB2";
+ break;
+ case 0xB6 :
+ return "\xE2\x80\xB5\xE2\x80\xB5";
+ break;
+ case 0xB7 :
+ return "\xE2\x80\xB5\xE2\x80\xB5\xE2\x80\xB5";
+ break;
+ case 0xBC :
+ return "\x21\x21";
+ break;
+ case 0xBE :
+ return "\xCC\x85";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (str[2]) {
+ case 0x87 :
+ return "\x3F\x3F";
+ break;
+ case 0x88 :
+ return "\x3F\x21";
+ break;
+ case 0x89 :
+ return "\x21\x3F";
+ break;
+ case 0x97 :
+ return "\xE2\x80\xB2\xE2\x80\xB2\xE2\x80\xB2\xE2\x80\xB2";
+ break;
+ case 0x9F :
+ return "\x20";
+ break;
+ case 0xB0 :
+ return "\x30";
+ break;
+ case 0xB1 :
+ return "\x69";
+ break;
+ case 0xB4 :
+ return "\x34";
+ break;
+ case 0xB5 :
+ return "\x35";
+ break;
+ case 0xB6 :
+ return "\x36";
+ break;
+ case 0xB7 :
+ return "\x37";
+ break;
+ case 0xB8 :
+ return "\x38";
+ break;
+ case 0xB9 :
+ return "\x39";
+ break;
+ case 0xBA :
+ return "\x2B";
+ break;
+ case 0xBB :
+ return "\xE2\x88\x92";
+ break;
+ case 0xBC :
+ return "\x3D";
+ break;
+ case 0xBD :
+ return "\x28";
+ break;
+ case 0xBE :
+ return "\x29";
+ break;
+ case 0xBF :
+ return "\x6E";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x30";
+ break;
+ case 0x81 :
+ return "\x31";
+ break;
+ case 0x82 :
+ return "\x32";
+ break;
+ case 0x83 :
+ return "\x33";
+ break;
+ case 0x84 :
+ return "\x34";
+ break;
+ case 0x85 :
+ return "\x35";
+ break;
+ case 0x86 :
+ return "\x36";
+ break;
+ case 0x87 :
+ return "\x37";
+ break;
+ case 0x88 :
+ return "\x38";
+ break;
+ case 0x89 :
+ return "\x39";
+ break;
+ case 0x8A :
+ return "\x2B";
+ break;
+ case 0x8B :
+ return "\xE2\x88\x92";
+ break;
+ case 0x8C :
+ return "\x3D";
+ break;
+ case 0x8D :
+ return "\x28";
+ break;
+ case 0x8E :
+ return "\x29";
+ break;
+ case 0x90 :
+ return "\x61";
+ break;
+ case 0x91 :
+ return "\x65";
+ break;
+ case 0x92 :
+ return "\x6F";
+ break;
+ case 0x93 :
+ return "\x78";
+ break;
+ case 0x94 :
+ return "\xC9\x99";
+ break;
+ case 0xA8 :
+ return "\x72\x73";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x61\x2F\x63";
+ break;
+ case 0x81 :
+ return "\x61\x2F\x73";
+ break;
+ case 0x82 :
+ return "\x63";
+ break;
+ case 0x83 :
+ return "\xC2\xB0\x63";
+ break;
+ case 0x85 :
+ return "\x63\x2F\x6F";
+ break;
+ case 0x86 :
+ return "\x63\x2F\x75";
+ break;
+ case 0x87 :
+ return "\xC6\x90";
+ break;
+ case 0x89 :
+ return "\xC2\xB0\x66";
+ break;
+ case 0x8A :
+ return "\x67";
+ break;
+ case 0x8B :
+ return "\x68";
+ break;
+ case 0x8C :
+ return "\x68";
+ break;
+ case 0x8D :
+ return "\x68";
+ break;
+ case 0x8E :
+ return "\x68";
+ break;
+ case 0x8F :
+ return "\xC4\xA7";
+ break;
+ case 0x90 :
+ return "\x69";
+ break;
+ case 0x91 :
+ return "\x69";
+ break;
+ case 0x92 :
+ return "\x6C";
+ break;
+ case 0x93 :
+ return "\x6C";
+ break;
+ case 0x95 :
+ return "\x6E";
+ break;
+ case 0x96 :
+ return "\x6E\x6F";
+ break;
+ case 0x99 :
+ return "\x70";
+ break;
+ case 0x9A :
+ return "\x71";
+ break;
+ case 0x9B :
+ return "\x72";
+ break;
+ case 0x9C :
+ return "\x72";
+ break;
+ case 0x9D :
+ return "\x72";
+ break;
+ case 0xA0 :
+ return "\x73\x6D";
+ break;
+ case 0xA1 :
+ return "\x74\x65\x6C";
+ break;
+ case 0xA2 :
+ return "\x74\x6D";
+ break;
+ case 0xA4 :
+ return "\x7A";
+ break;
+ case 0xA6 :
+ return "\xCE\xA9";
+ break;
+ case 0xA8 :
+ return "\x7A";
+ break;
+ case 0xAA :
+ return "\x6B";
+ break;
+ case 0xAB :
+ return "\xC3\xA5";
+ break;
+ case 0xAC :
+ return "\x62";
+ break;
+ case 0xAD :
+ return "\x63";
+ break;
+ case 0xAF :
+ return "\x65";
+ break;
+ case 0xB0 :
+ return "\x65";
+ break;
+ case 0xB1 :
+ return "\x66";
+ break;
+ case 0xB3 :
+ return "\x6D";
+ break;
+ case 0xB4 :
+ return "\x6F";
+ break;
+ case 0xB5 :
+ return "\xD7\x90";
+ break;
+ case 0xB6 :
+ return "\xD7\x91";
+ break;
+ case 0xB7 :
+ return "\xD7\x92";
+ break;
+ case 0xB8 :
+ return "\xD7\x93";
+ break;
+ case 0xB9 :
+ return "\x69";
+ break;
+ case 0xBB :
+ return "\x66\x61\x78";
+ break;
+ case 0xBC :
+ return "\xCF\x80";
+ break;
+ case 0xBD :
+ return "\xCE\xB3";
+ break;
+ case 0xBE :
+ return "\xCE\x93";
+ break;
+ case 0xBF :
+ return "\xCE\xA0";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE2\x88\x91";
+ break;
+ case 0x85 :
+ return "\x64";
+ break;
+ case 0x86 :
+ return "\x64";
+ break;
+ case 0x87 :
+ return "\x65";
+ break;
+ case 0x88 :
+ return "\x69";
+ break;
+ case 0x89 :
+ return "\x6A";
+ break;
+ case 0x93 :
+ return "\x31\xE2\x81\x84\x33";
+ break;
+ case 0x94 :
+ return "\x32\xE2\x81\x84\x33";
+ break;
+ case 0x95 :
+ return "\x31\xE2\x81\x84\x35";
+ break;
+ case 0x96 :
+ return "\x32\xE2\x81\x84\x35";
+ break;
+ case 0x97 :
+ return "\x33\xE2\x81\x84\x35";
+ break;
+ case 0x98 :
+ return "\x34\xE2\x81\x84\x35";
+ break;
+ case 0x99 :
+ return "\x31\xE2\x81\x84\x36";
+ break;
+ case 0x9A :
+ return "\x35\xE2\x81\x84\x36";
+ break;
+ case 0x9B :
+ return "\x31\xE2\x81\x84\x38";
+ break;
+ case 0x9C :
+ return "\x33\xE2\x81\x84\x38";
+ break;
+ case 0x9D :
+ return "\x35\xE2\x81\x84\x38";
+ break;
+ case 0x9E :
+ return "\x37\xE2\x81\x84\x38";
+ break;
+ case 0x9F :
+ return "\x31\xE2\x81\x84";
+ break;
+ case 0xA0 :
+ return "\x69";
+ break;
+ case 0xA1 :
+ return "\x69\x69";
+ break;
+ case 0xA2 :
+ return "\x69\x69\x69";
+ break;
+ case 0xA3 :
+ return "\x69\x76";
+ break;
+ case 0xA4 :
+ return "\x76";
+ break;
+ case 0xA5 :
+ return "\x76\x69";
+ break;
+ case 0xA6 :
+ return "\x76\x69\x69";
+ break;
+ case 0xA7 :
+ return "\x76\x69\x69\x69";
+ break;
+ case 0xA8 :
+ return "\x69\x78";
+ break;
+ case 0xA9 :
+ return "\x78";
+ break;
+ case 0xAA :
+ return "\x78\x69";
+ break;
+ case 0xAB :
+ return "\x78\x69\x69";
+ break;
+ case 0xAC :
+ return "\x6C";
+ break;
+ case 0xAD :
+ return "\x63";
+ break;
+ case 0xAE :
+ return "\x64";
+ break;
+ case 0xAF :
+ return "\x6D";
+ break;
+ case 0xB0 :
+ return "\x69";
+ break;
+ case 0xB1 :
+ return "\x69\x69";
+ break;
+ case 0xB2 :
+ return "\x69\x69\x69";
+ break;
+ case 0xB3 :
+ return "\x69\x76";
+ break;
+ case 0xB4 :
+ return "\x76";
+ break;
+ case 0xB5 :
+ return "\x76\x69";
+ break;
+ case 0xB6 :
+ return "\x76\x69\x69";
+ break;
+ case 0xB7 :
+ return "\x76\x69\x69\x69";
+ break;
+ case 0xB8 :
+ return "\x69\x78";
+ break;
+ case 0xB9 :
+ return "\x78";
+ break;
+ case 0xBA :
+ return "\x78\x69";
+ break;
+ case 0xBB :
+ return "\x78\x69\x69";
+ break;
+ case 0xBC :
+ return "\x6C";
+ break;
+ case 0xBD :
+ return "\x63";
+ break;
+ case 0xBE :
+ return "\x64";
+ break;
+ case 0xBF :
+ return "\x6D";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (str[2]) {
+ case 0xAC :
+ return "\xE2\x88\xAB\xE2\x88\xAB";
+ break;
+ case 0xAD :
+ return "\xE2\x88\xAB\xE2\x88\xAB\xE2\x88\xAB";
+ break;
+ case 0xAF :
+ return "\xE2\x88\xAE\xE2\x88\xAE";
+ break;
+ case 0xB0 :
+ return "\xE2\x88\xAE\xE2\x88\xAE\xE2\x88\xAE";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (str[2]) {
+ case 0xA9 :
+ return "\xE3\x80\x88";
+ break;
+ case 0xAA :
+ return "\xE3\x80\x89";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (str[2]) {
+ case 0xA0 :
+ return "\x31";
+ break;
+ case 0xA1 :
+ return "\x32";
+ break;
+ case 0xA2 :
+ return "\x33";
+ break;
+ case 0xA3 :
+ return "\x34";
+ break;
+ case 0xA4 :
+ return "\x35";
+ break;
+ case 0xA5 :
+ return "\x36";
+ break;
+ case 0xA6 :
+ return "\x37";
+ break;
+ case 0xA7 :
+ return "\x38";
+ break;
+ case 0xA8 :
+ return "\x39";
+ break;
+ case 0xA9 :
+ return "\x31\x30";
+ break;
+ case 0xAA :
+ return "\x31\x31";
+ break;
+ case 0xAB :
+ return "\x31\x32";
+ break;
+ case 0xAC :
+ return "\x31\x33";
+ break;
+ case 0xAD :
+ return "\x31\x34";
+ break;
+ case 0xAE :
+ return "\x31\x35";
+ break;
+ case 0xAF :
+ return "\x31\x36";
+ break;
+ case 0xB0 :
+ return "\x31\x37";
+ break;
+ case 0xB1 :
+ return "\x31\x38";
+ break;
+ case 0xB2 :
+ return "\x31\x39";
+ break;
+ case 0xB3 :
+ return "\x32\x30";
+ break;
+ case 0xB4 :
+ return "\x28\x31\x29";
+ break;
+ case 0xB5 :
+ return "\x28\x32\x29";
+ break;
+ case 0xB6 :
+ return "\x28\x33\x29";
+ break;
+ case 0xB7 :
+ return "\x28\x34\x29";
+ break;
+ case 0xB8 :
+ return "\x28\x35\x29";
+ break;
+ case 0xB9 :
+ return "\x28\x36\x29";
+ break;
+ case 0xBA :
+ return "\x28\x37\x29";
+ break;
+ case 0xBB :
+ return "\x28\x38\x29";
+ break;
+ case 0xBC :
+ return "\x28\x39\x29";
+ break;
+ case 0xBD :
+ return "\x28\x31\x30\x29";
+ break;
+ case 0xBE :
+ return "\x28\x31\x31\x29";
+ break;
+ case 0xBF :
+ return "\x28\x31\x32\x29";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x28\x31\x33\x29";
+ break;
+ case 0x81 :
+ return "\x28\x31\x34\x29";
+ break;
+ case 0x82 :
+ return "\x28\x31\x35\x29";
+ break;
+ case 0x83 :
+ return "\x28\x31\x36\x29";
+ break;
+ case 0x84 :
+ return "\x28\x31\x37\x29";
+ break;
+ case 0x85 :
+ return "\x28\x31\x38\x29";
+ break;
+ case 0x86 :
+ return "\x28\x31\x39\x29";
+ break;
+ case 0x87 :
+ return "\x28\x32\x30\x29";
+ break;
+ case 0x88 :
+ return "\x31\x2E";
+ break;
+ case 0x89 :
+ return "\x32\x2E";
+ break;
+ case 0x8A :
+ return "\x33\x2E";
+ break;
+ case 0x8B :
+ return "\x34\x2E";
+ break;
+ case 0x8C :
+ return "\x35\x2E";
+ break;
+ case 0x8D :
+ return "\x36\x2E";
+ break;
+ case 0x8E :
+ return "\x37\x2E";
+ break;
+ case 0x8F :
+ return "\x38\x2E";
+ break;
+ case 0x90 :
+ return "\x39\x2E";
+ break;
+ case 0x91 :
+ return "\x31\x30\x2E";
+ break;
+ case 0x92 :
+ return "\x31\x31\x2E";
+ break;
+ case 0x93 :
+ return "\x31\x32\x2E";
+ break;
+ case 0x94 :
+ return "\x31\x33\x2E";
+ break;
+ case 0x95 :
+ return "\x31\x34\x2E";
+ break;
+ case 0x96 :
+ return "\x31\x35\x2E";
+ break;
+ case 0x97 :
+ return "\x31\x36\x2E";
+ break;
+ case 0x98 :
+ return "\x31\x37\x2E";
+ break;
+ case 0x99 :
+ return "\x31\x38\x2E";
+ break;
+ case 0x9A :
+ return "\x31\x39\x2E";
+ break;
+ case 0x9B :
+ return "\x32\x30\x2E";
+ break;
+ case 0x9C :
+ return "\x28\x61\x29";
+ break;
+ case 0x9D :
+ return "\x28\x62\x29";
+ break;
+ case 0x9E :
+ return "\x28\x63\x29";
+ break;
+ case 0x9F :
+ return "\x28\x64\x29";
+ break;
+ case 0xA0 :
+ return "\x28\x65\x29";
+ break;
+ case 0xA1 :
+ return "\x28\x66\x29";
+ break;
+ case 0xA2 :
+ return "\x28\x67\x29";
+ break;
+ case 0xA3 :
+ return "\x28\x68\x29";
+ break;
+ case 0xA4 :
+ return "\x28\x69\x29";
+ break;
+ case 0xA5 :
+ return "\x28\x6A\x29";
+ break;
+ case 0xA6 :
+ return "\x28\x6B\x29";
+ break;
+ case 0xA7 :
+ return "\x28\x6C\x29";
+ break;
+ case 0xA8 :
+ return "\x28\x6D\x29";
+ break;
+ case 0xA9 :
+ return "\x28\x6E\x29";
+ break;
+ case 0xAA :
+ return "\x28\x6F\x29";
+ break;
+ case 0xAB :
+ return "\x28\x70\x29";
+ break;
+ case 0xAC :
+ return "\x28\x71\x29";
+ break;
+ case 0xAD :
+ return "\x28\x72\x29";
+ break;
+ case 0xAE :
+ return "\x28\x73\x29";
+ break;
+ case 0xAF :
+ return "\x28\x74\x29";
+ break;
+ case 0xB0 :
+ return "\x28\x75\x29";
+ break;
+ case 0xB1 :
+ return "\x28\x76\x29";
+ break;
+ case 0xB2 :
+ return "\x28\x77\x29";
+ break;
+ case 0xB3 :
+ return "\x28\x78\x29";
+ break;
+ case 0xB4 :
+ return "\x28\x79\x29";
+ break;
+ case 0xB5 :
+ return "\x28\x7A\x29";
+ break;
+ case 0xB6 :
+ return "\x61";
+ break;
+ case 0xB7 :
+ return "\x62";
+ break;
+ case 0xB8 :
+ return "\x63";
+ break;
+ case 0xB9 :
+ return "\x64";
+ break;
+ case 0xBA :
+ return "\x65";
+ break;
+ case 0xBB :
+ return "\x66";
+ break;
+ case 0xBC :
+ return "\x67";
+ break;
+ case 0xBD :
+ return "\x68";
+ break;
+ case 0xBE :
+ return "\x69";
+ break;
+ case 0xBF :
+ return "\x6A";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x6B";
+ break;
+ case 0x81 :
+ return "\x6C";
+ break;
+ case 0x82 :
+ return "\x6D";
+ break;
+ case 0x83 :
+ return "\x6E";
+ break;
+ case 0x84 :
+ return "\x6F";
+ break;
+ case 0x85 :
+ return "\x70";
+ break;
+ case 0x86 :
+ return "\x71";
+ break;
+ case 0x87 :
+ return "\x72";
+ break;
+ case 0x88 :
+ return "\x73";
+ break;
+ case 0x89 :
+ return "\x74";
+ break;
+ case 0x8A :
+ return "\x75";
+ break;
+ case 0x8B :
+ return "\x76";
+ break;
+ case 0x8C :
+ return "\x77";
+ break;
+ case 0x8D :
+ return "\x78";
+ break;
+ case 0x8E :
+ return "\x79";
+ break;
+ case 0x8F :
+ return "\x7A";
+ break;
+ case 0x90 :
+ return "\x61";
+ break;
+ case 0x91 :
+ return "\x62";
+ break;
+ case 0x92 :
+ return "\x63";
+ break;
+ case 0x93 :
+ return "\x64";
+ break;
+ case 0x94 :
+ return "\x65";
+ break;
+ case 0x95 :
+ return "\x66";
+ break;
+ case 0x96 :
+ return "\x67";
+ break;
+ case 0x97 :
+ return "\x68";
+ break;
+ case 0x98 :
+ return "\x69";
+ break;
+ case 0x99 :
+ return "\x6A";
+ break;
+ case 0x9A :
+ return "\x6B";
+ break;
+ case 0x9B :
+ return "\x6C";
+ break;
+ case 0x9C :
+ return "\x6D";
+ break;
+ case 0x9D :
+ return "\x6E";
+ break;
+ case 0x9E :
+ return "\x6F";
+ break;
+ case 0x9F :
+ return "\x70";
+ break;
+ case 0xA0 :
+ return "\x71";
+ break;
+ case 0xA1 :
+ return "\x72";
+ break;
+ case 0xA2 :
+ return "\x73";
+ break;
+ case 0xA3 :
+ return "\x74";
+ break;
+ case 0xA4 :
+ return "\x75";
+ break;
+ case 0xA5 :
+ return "\x76";
+ break;
+ case 0xA6 :
+ return "\x77";
+ break;
+ case 0xA7 :
+ return "\x78";
+ break;
+ case 0xA8 :
+ return "\x79";
+ break;
+ case 0xA9 :
+ return "\x7A";
+ break;
+ case 0xAA :
+ return "\x30";
+ break;
+ }
+ break;
+ case 0xA8 :
+ if (str[2] == 0x8C) {
+ return "\xE2\x88\xAB\xE2\x88\xAB\xE2\x88\xAB\xE2\x88\xAB";
+ }
+ break;
+ case 0xA9 :
+ switch (str[2]) {
+ case 0xB4 :
+ return "\x3A\x3A\x3D";
+ break;
+ case 0xB5 :
+ return "\x3D\x3D";
+ break;
+ case 0xB6 :
+ return "\x3D\x3D\x3D";
+ break;
+ }
+ break;
+ case 0xAB :
+ if (str[2] == 0x9C) {
+ return "\xE2\xAB\x9D\xCC\xB8";
+ }
+ break;
+ case 0xB5 :
+ if (str[2] == 0xAF) {
+ return "\xE2\xB5\xA1";
+ }
+ break;
+ case 0xBA :
+ if (str[2] == 0x9F) {
+ return "\xE6\xAF\x8D";
+ }
+ break;
+ case 0xBB :
+ if (str[2] == 0xB3) {
+ return "\xE9\xBE\x9F";
+ }
+ break;
+ case 0xBC :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE4\xB8\x80";
+ break;
+ case 0x81 :
+ return "\xE4\xB8\xA8";
+ break;
+ case 0x82 :
+ return "\xE4\xB8\xB6";
+ break;
+ case 0x83 :
+ return "\xE4\xB8\xBF";
+ break;
+ case 0x84 :
+ return "\xE4\xB9\x99";
+ break;
+ case 0x85 :
+ return "\xE4\xBA\x85";
+ break;
+ case 0x86 :
+ return "\xE4\xBA\x8C";
+ break;
+ case 0x87 :
+ return "\xE4\xBA\xA0";
+ break;
+ case 0x88 :
+ return "\xE4\xBA\xBA";
+ break;
+ case 0x89 :
+ return "\xE5\x84\xBF";
+ break;
+ case 0x8A :
+ return "\xE5\x85\xA5";
+ break;
+ case 0x8B :
+ return "\xE5\x85\xAB";
+ break;
+ case 0x8C :
+ return "\xE5\x86\x82";
+ break;
+ case 0x8D :
+ return "\xE5\x86\x96";
+ break;
+ case 0x8E :
+ return "\xE5\x86\xAB";
+ break;
+ case 0x8F :
+ return "\xE5\x87\xA0";
+ break;
+ case 0x90 :
+ return "\xE5\x87\xB5";
+ break;
+ case 0x91 :
+ return "\xE5\x88\x80";
+ break;
+ case 0x92 :
+ return "\xE5\x8A\x9B";
+ break;
+ case 0x93 :
+ return "\xE5\x8B\xB9";
+ break;
+ case 0x94 :
+ return "\xE5\x8C\x95";
+ break;
+ case 0x95 :
+ return "\xE5\x8C\x9A";
+ break;
+ case 0x96 :
+ return "\xE5\x8C\xB8";
+ break;
+ case 0x97 :
+ return "\xE5\x8D\x81";
+ break;
+ case 0x98 :
+ return "\xE5\x8D\x9C";
+ break;
+ case 0x99 :
+ return "\xE5\x8D\xA9";
+ break;
+ case 0x9A :
+ return "\xE5\x8E\x82";
+ break;
+ case 0x9B :
+ return "\xE5\x8E\xB6";
+ break;
+ case 0x9C :
+ return "\xE5\x8F\x88";
+ break;
+ case 0x9D :
+ return "\xE5\x8F\xA3";
+ break;
+ case 0x9E :
+ return "\xE5\x9B\x97";
+ break;
+ case 0x9F :
+ return "\xE5\x9C\x9F";
+ break;
+ case 0xA0 :
+ return "\xE5\xA3\xAB";
+ break;
+ case 0xA1 :
+ return "\xE5\xA4\x82";
+ break;
+ case 0xA2 :
+ return "\xE5\xA4\x8A";
+ break;
+ case 0xA3 :
+ return "\xE5\xA4\x95";
+ break;
+ case 0xA4 :
+ return "\xE5\xA4\xA7";
+ break;
+ case 0xA5 :
+ return "\xE5\xA5\xB3";
+ break;
+ case 0xA6 :
+ return "\xE5\xAD\x90";
+ break;
+ case 0xA7 :
+ return "\xE5\xAE\x80";
+ break;
+ case 0xA8 :
+ return "\xE5\xAF\xB8";
+ break;
+ case 0xA9 :
+ return "\xE5\xB0\x8F";
+ break;
+ case 0xAA :
+ return "\xE5\xB0\xA2";
+ break;
+ case 0xAB :
+ return "\xE5\xB0\xB8";
+ break;
+ case 0xAC :
+ return "\xE5\xB1\xAE";
+ break;
+ case 0xAD :
+ return "\xE5\xB1\xB1";
+ break;
+ case 0xAE :
+ return "\xE5\xB7\x9B";
+ break;
+ case 0xAF :
+ return "\xE5\xB7\xA5";
+ break;
+ case 0xB0 :
+ return "\xE5\xB7\xB1";
+ break;
+ case 0xB1 :
+ return "\xE5\xB7\xBE";
+ break;
+ case 0xB2 :
+ return "\xE5\xB9\xB2";
+ break;
+ case 0xB3 :
+ return "\xE5\xB9\xBA";
+ break;
+ case 0xB4 :
+ return "\xE5\xB9\xBF";
+ break;
+ case 0xB5 :
+ return "\xE5\xBB\xB4";
+ break;
+ case 0xB6 :
+ return "\xE5\xBB\xBE";
+ break;
+ case 0xB7 :
+ return "\xE5\xBC\x8B";
+ break;
+ case 0xB8 :
+ return "\xE5\xBC\x93";
+ break;
+ case 0xB9 :
+ return "\xE5\xBD\x90";
+ break;
+ case 0xBA :
+ return "\xE5\xBD\xA1";
+ break;
+ case 0xBB :
+ return "\xE5\xBD\xB3";
+ break;
+ case 0xBC :
+ return "\xE5\xBF\x83";
+ break;
+ case 0xBD :
+ return "\xE6\x88\x88";
+ break;
+ case 0xBE :
+ return "\xE6\x88\xB6";
+ break;
+ case 0xBF :
+ return "\xE6\x89\x8B";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE6\x94\xAF";
+ break;
+ case 0x81 :
+ return "\xE6\x94\xB4";
+ break;
+ case 0x82 :
+ return "\xE6\x96\x87";
+ break;
+ case 0x83 :
+ return "\xE6\x96\x97";
+ break;
+ case 0x84 :
+ return "\xE6\x96\xA4";
+ break;
+ case 0x85 :
+ return "\xE6\x96\xB9";
+ break;
+ case 0x86 :
+ return "\xE6\x97\xA0";
+ break;
+ case 0x87 :
+ return "\xE6\x97\xA5";
+ break;
+ case 0x88 :
+ return "\xE6\x9B\xB0";
+ break;
+ case 0x89 :
+ return "\xE6\x9C\x88";
+ break;
+ case 0x8A :
+ return "\xE6\x9C\xA8";
+ break;
+ case 0x8B :
+ return "\xE6\xAC\xA0";
+ break;
+ case 0x8C :
+ return "\xE6\xAD\xA2";
+ break;
+ case 0x8D :
+ return "\xE6\xAD\xB9";
+ break;
+ case 0x8E :
+ return "\xE6\xAE\xB3";
+ break;
+ case 0x8F :
+ return "\xE6\xAF\x8B";
+ break;
+ case 0x90 :
+ return "\xE6\xAF\x94";
+ break;
+ case 0x91 :
+ return "\xE6\xAF\x9B";
+ break;
+ case 0x92 :
+ return "\xE6\xB0\x8F";
+ break;
+ case 0x93 :
+ return "\xE6\xB0\x94";
+ break;
+ case 0x94 :
+ return "\xE6\xB0\xB4";
+ break;
+ case 0x95 :
+ return "\xE7\x81\xAB";
+ break;
+ case 0x96 :
+ return "\xE7\x88\xAA";
+ break;
+ case 0x97 :
+ return "\xE7\x88\xB6";
+ break;
+ case 0x98 :
+ return "\xE7\x88\xBB";
+ break;
+ case 0x99 :
+ return "\xE7\x88\xBF";
+ break;
+ case 0x9A :
+ return "\xE7\x89\x87";
+ break;
+ case 0x9B :
+ return "\xE7\x89\x99";
+ break;
+ case 0x9C :
+ return "\xE7\x89\x9B";
+ break;
+ case 0x9D :
+ return "\xE7\x8A\xAC";
+ break;
+ case 0x9E :
+ return "\xE7\x8E\x84";
+ break;
+ case 0x9F :
+ return "\xE7\x8E\x89";
+ break;
+ case 0xA0 :
+ return "\xE7\x93\x9C";
+ break;
+ case 0xA1 :
+ return "\xE7\x93\xA6";
+ break;
+ case 0xA2 :
+ return "\xE7\x94\x98";
+ break;
+ case 0xA3 :
+ return "\xE7\x94\x9F";
+ break;
+ case 0xA4 :
+ return "\xE7\x94\xA8";
+ break;
+ case 0xA5 :
+ return "\xE7\x94\xB0";
+ break;
+ case 0xA6 :
+ return "\xE7\x96\x8B";
+ break;
+ case 0xA7 :
+ return "\xE7\x96\x92";
+ break;
+ case 0xA8 :
+ return "\xE7\x99\xB6";
+ break;
+ case 0xA9 :
+ return "\xE7\x99\xBD";
+ break;
+ case 0xAA :
+ return "\xE7\x9A\xAE";
+ break;
+ case 0xAB :
+ return "\xE7\x9A\xBF";
+ break;
+ case 0xAC :
+ return "\xE7\x9B\xAE";
+ break;
+ case 0xAD :
+ return "\xE7\x9F\x9B";
+ break;
+ case 0xAE :
+ return "\xE7\x9F\xA2";
+ break;
+ case 0xAF :
+ return "\xE7\x9F\xB3";
+ break;
+ case 0xB0 :
+ return "\xE7\xA4\xBA";
+ break;
+ case 0xB1 :
+ return "\xE7\xA6\xB8";
+ break;
+ case 0xB2 :
+ return "\xE7\xA6\xBE";
+ break;
+ case 0xB3 :
+ return "\xE7\xA9\xB4";
+ break;
+ case 0xB4 :
+ return "\xE7\xAB\x8B";
+ break;
+ case 0xB5 :
+ return "\xE7\xAB\xB9";
+ break;
+ case 0xB6 :
+ return "\xE7\xB1\xB3";
+ break;
+ case 0xB7 :
+ return "\xE7\xB3\xB8";
+ break;
+ case 0xB8 :
+ return "\xE7\xBC\xB6";
+ break;
+ case 0xB9 :
+ return "\xE7\xBD\x91";
+ break;
+ case 0xBA :
+ return "\xE7\xBE\x8A";
+ break;
+ case 0xBB :
+ return "\xE7\xBE\xBD";
+ break;
+ case 0xBC :
+ return "\xE8\x80\x81";
+ break;
+ case 0xBD :
+ return "\xE8\x80\x8C";
+ break;
+ case 0xBE :
+ return "\xE8\x80\x92";
+ break;
+ case 0xBF :
+ return "\xE8\x80\xB3";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE8\x81\xBF";
+ break;
+ case 0x81 :
+ return "\xE8\x82\x89";
+ break;
+ case 0x82 :
+ return "\xE8\x87\xA3";
+ break;
+ case 0x83 :
+ return "\xE8\x87\xAA";
+ break;
+ case 0x84 :
+ return "\xE8\x87\xB3";
+ break;
+ case 0x85 :
+ return "\xE8\x87\xBC";
+ break;
+ case 0x86 :
+ return "\xE8\x88\x8C";
+ break;
+ case 0x87 :
+ return "\xE8\x88\x9B";
+ break;
+ case 0x88 :
+ return "\xE8\x88\x9F";
+ break;
+ case 0x89 :
+ return "\xE8\x89\xAE";
+ break;
+ case 0x8A :
+ return "\xE8\x89\xB2";
+ break;
+ case 0x8B :
+ return "\xE8\x89\xB8";
+ break;
+ case 0x8C :
+ return "\xE8\x99\x8D";
+ break;
+ case 0x8D :
+ return "\xE8\x99\xAB";
+ break;
+ case 0x8E :
+ return "\xE8\xA1\x80";
+ break;
+ case 0x8F :
+ return "\xE8\xA1\x8C";
+ break;
+ case 0x90 :
+ return "\xE8\xA1\xA3";
+ break;
+ case 0x91 :
+ return "\xE8\xA5\xBE";
+ break;
+ case 0x92 :
+ return "\xE8\xA6\x8B";
+ break;
+ case 0x93 :
+ return "\xE8\xA7\x92";
+ break;
+ case 0x94 :
+ return "\xE8\xA8\x80";
+ break;
+ case 0x95 :
+ return "\xE8\xB0\xB7";
+ break;
+ case 0x96 :
+ return "\xE8\xB1\x86";
+ break;
+ case 0x97 :
+ return "\xE8\xB1\x95";
+ break;
+ case 0x98 :
+ return "\xE8\xB1\xB8";
+ break;
+ case 0x99 :
+ return "\xE8\xB2\x9D";
+ break;
+ case 0x9A :
+ return "\xE8\xB5\xA4";
+ break;
+ case 0x9B :
+ return "\xE8\xB5\xB0";
+ break;
+ case 0x9C :
+ return "\xE8\xB6\xB3";
+ break;
+ case 0x9D :
+ return "\xE8\xBA\xAB";
+ break;
+ case 0x9E :
+ return "\xE8\xBB\x8A";
+ break;
+ case 0x9F :
+ return "\xE8\xBE\x9B";
+ break;
+ case 0xA0 :
+ return "\xE8\xBE\xB0";
+ break;
+ case 0xA1 :
+ return "\xE8\xBE\xB5";
+ break;
+ case 0xA2 :
+ return "\xE9\x82\x91";
+ break;
+ case 0xA3 :
+ return "\xE9\x85\x89";
+ break;
+ case 0xA4 :
+ return "\xE9\x87\x86";
+ break;
+ case 0xA5 :
+ return "\xE9\x87\x8C";
+ break;
+ case 0xA6 :
+ return "\xE9\x87\x91";
+ break;
+ case 0xA7 :
+ return "\xE9\x95\xB7";
+ break;
+ case 0xA8 :
+ return "\xE9\x96\x80";
+ break;
+ case 0xA9 :
+ return "\xE9\x98\x9C";
+ break;
+ case 0xAA :
+ return "\xE9\x9A\xB6";
+ break;
+ case 0xAB :
+ return "\xE9\x9A\xB9";
+ break;
+ case 0xAC :
+ return "\xE9\x9B\xA8";
+ break;
+ case 0xAD :
+ return "\xE9\x9D\x91";
+ break;
+ case 0xAE :
+ return "\xE9\x9D\x9E";
+ break;
+ case 0xAF :
+ return "\xE9\x9D\xA2";
+ break;
+ case 0xB0 :
+ return "\xE9\x9D\xA9";
+ break;
+ case 0xB1 :
+ return "\xE9\x9F\x8B";
+ break;
+ case 0xB2 :
+ return "\xE9\x9F\xAD";
+ break;
+ case 0xB3 :
+ return "\xE9\x9F\xB3";
+ break;
+ case 0xB4 :
+ return "\xE9\xA0\x81";
+ break;
+ case 0xB5 :
+ return "\xE9\xA2\xA8";
+ break;
+ case 0xB6 :
+ return "\xE9\xA3\x9B";
+ break;
+ case 0xB7 :
+ return "\xE9\xA3\x9F";
+ break;
+ case 0xB8 :
+ return "\xE9\xA6\x96";
+ break;
+ case 0xB9 :
+ return "\xE9\xA6\x99";
+ break;
+ case 0xBA :
+ return "\xE9\xA6\xAC";
+ break;
+ case 0xBB :
+ return "\xE9\xAA\xA8";
+ break;
+ case 0xBC :
+ return "\xE9\xAB\x98";
+ break;
+ case 0xBD :
+ return "\xE9\xAB\x9F";
+ break;
+ case 0xBE :
+ return "\xE9\xAC\xA5";
+ break;
+ case 0xBF :
+ return "\xE9\xAC\xAF";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE9\xAC\xB2";
+ break;
+ case 0x81 :
+ return "\xE9\xAC\xBC";
+ break;
+ case 0x82 :
+ return "\xE9\xAD\x9A";
+ break;
+ case 0x83 :
+ return "\xE9\xB3\xA5";
+ break;
+ case 0x84 :
+ return "\xE9\xB9\xB5";
+ break;
+ case 0x85 :
+ return "\xE9\xB9\xBF";
+ break;
+ case 0x86 :
+ return "\xE9\xBA\xA5";
+ break;
+ case 0x87 :
+ return "\xE9\xBA\xBB";
+ break;
+ case 0x88 :
+ return "\xE9\xBB\x83";
+ break;
+ case 0x89 :
+ return "\xE9\xBB\x8D";
+ break;
+ case 0x8A :
+ return "\xE9\xBB\x91";
+ break;
+ case 0x8B :
+ return "\xE9\xBB\xB9";
+ break;
+ case 0x8C :
+ return "\xE9\xBB\xBD";
+ break;
+ case 0x8D :
+ return "\xE9\xBC\x8E";
+ break;
+ case 0x8E :
+ return "\xE9\xBC\x93";
+ break;
+ case 0x8F :
+ return "\xE9\xBC\xA0";
+ break;
+ case 0x90 :
+ return "\xE9\xBC\xBB";
+ break;
+ case 0x91 :
+ return "\xE9\xBD\x8A";
+ break;
+ case 0x92 :
+ return "\xE9\xBD\x92";
+ break;
+ case 0x93 :
+ return "\xE9\xBE\x8D";
+ break;
+ case 0x94 :
+ return "\xE9\xBE\x9C";
+ break;
+ case 0x95 :
+ return "\xE9\xBE\xA0";
+ break;
+ }
+ break;
+ }
+ break;
+case 0xE3 :
+ switch (str[1]) {
+ case 0x80 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x20";
+ break;
+ case 0x9C :
+ return "\x7E";
+ break;
+ case 0xB6 :
+ return "\xE3\x80\x92";
+ break;
+ case 0xB8 :
+ return "\xE5\x8D\x81";
+ break;
+ case 0xB9 :
+ return "\xE5\x8D\x84";
+ break;
+ case 0xBA :
+ return "\xE5\x8D\x85";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (str[2]) {
+ case 0x9B :
+ return "\xE3\x82\x99";
+ break;
+ case 0x9C :
+ return "\xE3\x82\x9A";
+ break;
+ case 0x9F :
+ return "\xE3\x82\x88\xE3\x82\x8A";
+ break;
+ }
+ break;
+ case 0x83 :
+ if (str[2] == 0xBF) {
+ return "\xE3\x82\xB3\xE3\x83\x88";
+ }
+ break;
+ case 0x84 :
+ switch (str[2]) {
+ case 0xB1 :
+ return "\xE1\x84\x80";
+ break;
+ case 0xB2 :
+ return "\xE1\x84\x81";
+ break;
+ case 0xB3 :
+ return "\xE1\x86\xAA";
+ break;
+ case 0xB4 :
+ return "\xE1\x84\x82";
+ break;
+ case 0xB5 :
+ return "\xE1\x86\xAC";
+ break;
+ case 0xB6 :
+ return "\xE1\x86\xAD";
+ break;
+ case 0xB7 :
+ return "\xE1\x84\x83";
+ break;
+ case 0xB8 :
+ return "\xE1\x84\x84";
+ break;
+ case 0xB9 :
+ return "\xE1\x84\x85";
+ break;
+ case 0xBA :
+ return "\xE1\x86\xB0";
+ break;
+ case 0xBB :
+ return "\xE1\x86\xB1";
+ break;
+ case 0xBC :
+ return "\xE1\x86\xB2";
+ break;
+ case 0xBD :
+ return "\xE1\x86\xB3";
+ break;
+ case 0xBE :
+ return "\xE1\x86\xB4";
+ break;
+ case 0xBF :
+ return "\xE1\x86\xB5";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\x84\x9A";
+ break;
+ case 0x81 :
+ return "\xE1\x84\x86";
+ break;
+ case 0x82 :
+ return "\xE1\x84\x87";
+ break;
+ case 0x83 :
+ return "\xE1\x84\x88";
+ break;
+ case 0x84 :
+ return "\xE1\x84\xA1";
+ break;
+ case 0x85 :
+ return "\xE1\x84\x89";
+ break;
+ case 0x86 :
+ return "\xE1\x84\x8A";
+ break;
+ case 0x87 :
+ return "\xE1\x84\x8B";
+ break;
+ case 0x88 :
+ return "\xE1\x84\x8C";
+ break;
+ case 0x89 :
+ return "\xE1\x84\x8D";
+ break;
+ case 0x8A :
+ return "\xE1\x84\x8E";
+ break;
+ case 0x8B :
+ return "\xE1\x84\x8F";
+ break;
+ case 0x8C :
+ return "\xE1\x84\x90";
+ break;
+ case 0x8D :
+ return "\xE1\x84\x91";
+ break;
+ case 0x8E :
+ return "\xE1\x84\x92";
+ break;
+ case 0x8F :
+ return "\xE1\x85\xA1";
+ break;
+ case 0x90 :
+ return "\xE1\x85\xA2";
+ break;
+ case 0x91 :
+ return "\xE1\x85\xA3";
+ break;
+ case 0x92 :
+ return "\xE1\x85\xA4";
+ break;
+ case 0x93 :
+ return "\xE1\x85\xA5";
+ break;
+ case 0x94 :
+ return "\xE1\x85\xA6";
+ break;
+ case 0x95 :
+ return "\xE1\x85\xA7";
+ break;
+ case 0x96 :
+ return "\xE1\x85\xA8";
+ break;
+ case 0x97 :
+ return "\xE1\x85\xA9";
+ break;
+ case 0x98 :
+ return "\xE1\x85\xAA";
+ break;
+ case 0x99 :
+ return "\xE1\x85\xAB";
+ break;
+ case 0x9A :
+ return "\xE1\x85\xAC";
+ break;
+ case 0x9B :
+ return "\xE1\x85\xAD";
+ break;
+ case 0x9C :
+ return "\xE1\x85\xAE";
+ break;
+ case 0x9D :
+ return "\xE1\x85\xAF";
+ break;
+ case 0x9E :
+ return "\xE1\x85\xB0";
+ break;
+ case 0x9F :
+ return "\xE1\x85\xB1";
+ break;
+ case 0xA0 :
+ return "\xE1\x85\xB2";
+ break;
+ case 0xA1 :
+ return "\xE1\x85\xB3";
+ break;
+ case 0xA2 :
+ return "\xE1\x85\xB4";
+ break;
+ case 0xA3 :
+ return "\xE1\x85\xB5";
+ break;
+ case 0xA4 :
+ return "\xE1\x85\xA0";
+ break;
+ case 0xA5 :
+ return "\xE1\x84\x94";
+ break;
+ case 0xA6 :
+ return "\xE1\x84\x95";
+ break;
+ case 0xA7 :
+ return "\xE1\x87\x87";
+ break;
+ case 0xA8 :
+ return "\xE1\x87\x88";
+ break;
+ case 0xA9 :
+ return "\xE1\x87\x8C";
+ break;
+ case 0xAA :
+ return "\xE1\x87\x8E";
+ break;
+ case 0xAB :
+ return "\xE1\x87\x93";
+ break;
+ case 0xAC :
+ return "\xE1\x87\x97";
+ break;
+ case 0xAD :
+ return "\xE1\x87\x99";
+ break;
+ case 0xAE :
+ return "\xE1\x84\x9C";
+ break;
+ case 0xAF :
+ return "\xE1\x87\x9D";
+ break;
+ case 0xB0 :
+ return "\xE1\x87\x9F";
+ break;
+ case 0xB1 :
+ return "\xE1\x84\x9D";
+ break;
+ case 0xB2 :
+ return "\xE1\x84\x9E";
+ break;
+ case 0xB3 :
+ return "\xE1\x84\xA0";
+ break;
+ case 0xB4 :
+ return "\xE1\x84\xA2";
+ break;
+ case 0xB5 :
+ return "\xE1\x84\xA3";
+ break;
+ case 0xB6 :
+ return "\xE1\x84\xA7";
+ break;
+ case 0xB7 :
+ return "\xE1\x84\xA9";
+ break;
+ case 0xB8 :
+ return "\xE1\x84\xAB";
+ break;
+ case 0xB9 :
+ return "\xE1\x84\xAC";
+ break;
+ case 0xBA :
+ return "\xE1\x84\xAD";
+ break;
+ case 0xBB :
+ return "\xE1\x84\xAE";
+ break;
+ case 0xBC :
+ return "\xE1\x84\xAF";
+ break;
+ case 0xBD :
+ return "\xE1\x84\xB2";
+ break;
+ case 0xBE :
+ return "\xE1\x84\xB6";
+ break;
+ case 0xBF :
+ return "\xE1\x85\x80";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE1\x85\x87";
+ break;
+ case 0x81 :
+ return "\xE1\x85\x8C";
+ break;
+ case 0x82 :
+ return "\xE1\x87\xB1";
+ break;
+ case 0x83 :
+ return "\xE1\x87\xB2";
+ break;
+ case 0x84 :
+ return "\xE1\x85\x97";
+ break;
+ case 0x85 :
+ return "\xE1\x85\x98";
+ break;
+ case 0x86 :
+ return "\xE1\x85\x99";
+ break;
+ case 0x87 :
+ return "\xE1\x86\x84";
+ break;
+ case 0x88 :
+ return "\xE1\x86\x85";
+ break;
+ case 0x89 :
+ return "\xE1\x86\x88";
+ break;
+ case 0x8A :
+ return "\xE1\x86\x91";
+ break;
+ case 0x8B :
+ return "\xE1\x86\x92";
+ break;
+ case 0x8C :
+ return "\xE1\x86\x94";
+ break;
+ case 0x8D :
+ return "\xE1\x86\x9E";
+ break;
+ case 0x8E :
+ return "\xE1\x86\xA1";
+ break;
+ case 0x92 :
+ return "\xE4\xB8\x80";
+ break;
+ case 0x93 :
+ return "\xE4\xBA\x8C";
+ break;
+ case 0x94 :
+ return "\xE4\xB8\x89";
+ break;
+ case 0x95 :
+ return "\xE5\x9B\x9B";
+ break;
+ case 0x96 :
+ return "\xE4\xB8\x8A";
+ break;
+ case 0x97 :
+ return "\xE4\xB8\xAD";
+ break;
+ case 0x98 :
+ return "\xE4\xB8\x8B";
+ break;
+ case 0x99 :
+ return "\xE7\x94\xB2";
+ break;
+ case 0x9A :
+ return "\xE4\xB9\x99";
+ break;
+ case 0x9B :
+ return "\xE4\xB8\x99";
+ break;
+ case 0x9C :
+ return "\xE4\xB8\x81";
+ break;
+ case 0x9D :
+ return "\xE5\xA4\xA9";
+ break;
+ case 0x9E :
+ return "\xE5\x9C\xB0";
+ break;
+ case 0x9F :
+ return "\xE4\xBA\xBA";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x28\xE1\x84\x80\x29";
+ break;
+ case 0x81 :
+ return "\x28\xE1\x84\x82\x29";
+ break;
+ case 0x82 :
+ return "\x28\xE1\x84\x83\x29";
+ break;
+ case 0x83 :
+ return "\x28\xE1\x84\x85\x29";
+ break;
+ case 0x84 :
+ return "\x28\xE1\x84\x86\x29";
+ break;
+ case 0x85 :
+ return "\x28\xE1\x84\x87\x29";
+ break;
+ case 0x86 :
+ return "\x28\xE1\x84\x89\x29";
+ break;
+ case 0x87 :
+ return "\x28\xE1\x84\x8B\x29";
+ break;
+ case 0x88 :
+ return "\x28\xE1\x84\x8C\x29";
+ break;
+ case 0x89 :
+ return "\x28\xE1\x84\x8E\x29";
+ break;
+ case 0x8A :
+ return "\x28\xE1\x84\x8F\x29";
+ break;
+ case 0x8B :
+ return "\x28\xE1\x84\x90\x29";
+ break;
+ case 0x8C :
+ return "\x28\xE1\x84\x91\x29";
+ break;
+ case 0x8D :
+ return "\x28\xE1\x84\x92\x29";
+ break;
+ case 0x8E :
+ return "\x28\xEA\xB0\x80\x29";
+ break;
+ case 0x8F :
+ return "\x28\xEB\x82\x98\x29";
+ break;
+ case 0x90 :
+ return "\x28\xEB\x8B\xA4\x29";
+ break;
+ case 0x91 :
+ return "\x28\xEB\x9D\xBC\x29";
+ break;
+ case 0x92 :
+ return "\x28\xEB\xA7\x88\x29";
+ break;
+ case 0x93 :
+ return "\x28\xEB\xB0\x94\x29";
+ break;
+ case 0x94 :
+ return "\x28\xEC\x82\xAC\x29";
+ break;
+ case 0x95 :
+ return "\x28\xEC\x95\x84\x29";
+ break;
+ case 0x96 :
+ return "\x28\xEC\x9E\x90\x29";
+ break;
+ case 0x97 :
+ return "\x28\xEC\xB0\xA8\x29";
+ break;
+ case 0x98 :
+ return "\x28\xEC\xB9\xB4\x29";
+ break;
+ case 0x99 :
+ return "\x28\xED\x83\x80\x29";
+ break;
+ case 0x9A :
+ return "\x28\xED\x8C\x8C\x29";
+ break;
+ case 0x9B :
+ return "\x28\xED\x95\x98\x29";
+ break;
+ case 0x9C :
+ return "\x28\xEC\xA3\xBC\x29";
+ break;
+ case 0x9D :
+ return "\x28\xEC\x98\xA4\xEC\xA0\x84\x29";
+ break;
+ case 0x9E :
+ return "\x28\xEC\x98\xA4\xED\x9B\x84\x29";
+ break;
+ case 0xA0 :
+ return "\x28\xE4\xB8\x80\x29";
+ break;
+ case 0xA1 :
+ return "\x28\xE4\xBA\x8C\x29";
+ break;
+ case 0xA2 :
+ return "\x28\xE4\xB8\x89\x29";
+ break;
+ case 0xA3 :
+ return "\x28\xE5\x9B\x9B\x29";
+ break;
+ case 0xA4 :
+ return "\x28\xE4\xBA\x94\x29";
+ break;
+ case 0xA5 :
+ return "\x28\xE5\x85\xAD\x29";
+ break;
+ case 0xA6 :
+ return "\x28\xE4\xB8\x83\x29";
+ break;
+ case 0xA7 :
+ return "\x28\xE5\x85\xAB\x29";
+ break;
+ case 0xA8 :
+ return "\x28\xE4\xB9\x9D\x29";
+ break;
+ case 0xA9 :
+ return "\x28\xE5\x8D\x81\x29";
+ break;
+ case 0xAA :
+ return "\x28\xE6\x9C\x88\x29";
+ break;
+ case 0xAB :
+ return "\x28\xE7\x81\xAB\x29";
+ break;
+ case 0xAC :
+ return "\x28\xE6\xB0\xB4\x29";
+ break;
+ case 0xAD :
+ return "\x28\xE6\x9C\xA8\x29";
+ break;
+ case 0xAE :
+ return "\x28\xE9\x87\x91\x29";
+ break;
+ case 0xAF :
+ return "\x28\xE5\x9C\x9F\x29";
+ break;
+ case 0xB0 :
+ return "\x28\xE6\x97\xA5\x29";
+ break;
+ case 0xB1 :
+ return "\x28\xE6\xA0\xAA\x29";
+ break;
+ case 0xB2 :
+ return "\x28\xE6\x9C\x89\x29";
+ break;
+ case 0xB3 :
+ return "\x28\xE7\xA4\xBE\x29";
+ break;
+ case 0xB4 :
+ return "\x28\xE5\x90\x8D\x29";
+ break;
+ case 0xB5 :
+ return "\x28\xE7\x89\xB9\x29";
+ break;
+ case 0xB6 :
+ return "\x28\xE8\xB2\xA1\x29";
+ break;
+ case 0xB7 :
+ return "\x28\xE7\xA5\x9D\x29";
+ break;
+ case 0xB8 :
+ return "\x28\xE5\x8A\xB4\x29";
+ break;
+ case 0xB9 :
+ return "\x28\xE4\xBB\xA3\x29";
+ break;
+ case 0xBA :
+ return "\x28\xE5\x91\xBC\x29";
+ break;
+ case 0xBB :
+ return "\x28\xE5\xAD\xA6\x29";
+ break;
+ case 0xBC :
+ return "\x28\xE7\x9B\xA3\x29";
+ break;
+ case 0xBD :
+ return "\x28\xE4\xBC\x81\x29";
+ break;
+ case 0xBE :
+ return "\x28\xE8\xB3\x87\x29";
+ break;
+ case 0xBF :
+ return "\x28\xE5\x8D\x94\x29";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x28\xE7\xA5\xAD\x29";
+ break;
+ case 0x81 :
+ return "\x28\xE4\xBC\x91\x29";
+ break;
+ case 0x82 :
+ return "\x28\xE8\x87\xAA\x29";
+ break;
+ case 0x83 :
+ return "\x28\xE8\x87\xB3\x29";
+ break;
+ case 0x90 :
+ return "\x70\x74\x65";
+ break;
+ case 0x91 :
+ return "\x32\x31";
+ break;
+ case 0x92 :
+ return "\x32\x32";
+ break;
+ case 0x93 :
+ return "\x32\x33";
+ break;
+ case 0x94 :
+ return "\x32\x34";
+ break;
+ case 0x95 :
+ return "\x32\x35";
+ break;
+ case 0x96 :
+ return "\x32\x36";
+ break;
+ case 0x97 :
+ return "\x32\x37";
+ break;
+ case 0x98 :
+ return "\x32\x38";
+ break;
+ case 0x99 :
+ return "\x32\x39";
+ break;
+ case 0x9A :
+ return "\x33\x30";
+ break;
+ case 0x9B :
+ return "\x33\x31";
+ break;
+ case 0x9C :
+ return "\x33\x32";
+ break;
+ case 0x9D :
+ return "\x33\x33";
+ break;
+ case 0x9E :
+ return "\x33\x34";
+ break;
+ case 0x9F :
+ return "\x33\x35";
+ break;
+ case 0xA0 :
+ return "\xE1\x84\x80";
+ break;
+ case 0xA1 :
+ return "\xE1\x84\x82";
+ break;
+ case 0xA2 :
+ return "\xE1\x84\x83";
+ break;
+ case 0xA3 :
+ return "\xE1\x84\x85";
+ break;
+ case 0xA4 :
+ return "\xE1\x84\x86";
+ break;
+ case 0xA5 :
+ return "\xE1\x84\x87";
+ break;
+ case 0xA6 :
+ return "\xE1\x84\x89";
+ break;
+ case 0xA7 :
+ return "\xE1\x84\x8B";
+ break;
+ case 0xA8 :
+ return "\xE1\x84\x8C";
+ break;
+ case 0xA9 :
+ return "\xE1\x84\x8E";
+ break;
+ case 0xAA :
+ return "\xE1\x84\x8F";
+ break;
+ case 0xAB :
+ return "\xE1\x84\x90";
+ break;
+ case 0xAC :
+ return "\xE1\x84\x91";
+ break;
+ case 0xAD :
+ return "\xE1\x84\x92";
+ break;
+ case 0xAE :
+ return "\xEA\xB0\x80";
+ break;
+ case 0xAF :
+ return "\xEB\x82\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\x8B\xA4";
+ break;
+ case 0xB1 :
+ return "\xEB\x9D\xBC";
+ break;
+ case 0xB2 :
+ return "\xEB\xA7\x88";
+ break;
+ case 0xB3 :
+ return "\xEB\xB0\x94";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\xAC";
+ break;
+ case 0xB5 :
+ return "\xEC\x95\x84";
+ break;
+ case 0xB6 :
+ return "\xEC\x9E\x90";
+ break;
+ case 0xB7 :
+ return "\xEC\xB0\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xB9\xB4";
+ break;
+ case 0xB9 :
+ return "\xED\x83\x80";
+ break;
+ case 0xBA :
+ return "\xED\x8C\x8C";
+ break;
+ case 0xBB :
+ return "\xED\x95\x98";
+ break;
+ case 0xBC :
+ return "\xEC\xB0\xB8\xEA\xB3\xA0";
+ break;
+ case 0xBD :
+ return "\xEC\xA3\xBC\xEC\x9D\x98";
+ break;
+ case 0xBE :
+ return "\xEC\x9A\xB0";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE4\xB8\x80";
+ break;
+ case 0x81 :
+ return "\xE4\xBA\x8C";
+ break;
+ case 0x82 :
+ return "\xE4\xB8\x89";
+ break;
+ case 0x83 :
+ return "\xE5\x9B\x9B";
+ break;
+ case 0x84 :
+ return "\xE4\xBA\x94";
+ break;
+ case 0x85 :
+ return "\xE5\x85\xAD";
+ break;
+ case 0x86 :
+ return "\xE4\xB8\x83";
+ break;
+ case 0x87 :
+ return "\xE5\x85\xAB";
+ break;
+ case 0x88 :
+ return "\xE4\xB9\x9D";
+ break;
+ case 0x89 :
+ return "\xE5\x8D\x81";
+ break;
+ case 0x8A :
+ return "\xE6\x9C\x88";
+ break;
+ case 0x8B :
+ return "\xE7\x81\xAB";
+ break;
+ case 0x8C :
+ return "\xE6\xB0\xB4";
+ break;
+ case 0x8D :
+ return "\xE6\x9C\xA8";
+ break;
+ case 0x8E :
+ return "\xE9\x87\x91";
+ break;
+ case 0x8F :
+ return "\xE5\x9C\x9F";
+ break;
+ case 0x90 :
+ return "\xE6\x97\xA5";
+ break;
+ case 0x91 :
+ return "\xE6\xA0\xAA";
+ break;
+ case 0x92 :
+ return "\xE6\x9C\x89";
+ break;
+ case 0x93 :
+ return "\xE7\xA4\xBE";
+ break;
+ case 0x94 :
+ return "\xE5\x90\x8D";
+ break;
+ case 0x95 :
+ return "\xE7\x89\xB9";
+ break;
+ case 0x96 :
+ return "\xE8\xB2\xA1";
+ break;
+ case 0x97 :
+ return "\xE7\xA5\x9D";
+ break;
+ case 0x98 :
+ return "\xE5\x8A\xB4";
+ break;
+ case 0x99 :
+ return "\xE7\xA7\x98";
+ break;
+ case 0x9A :
+ return "\xE7\x94\xB7";
+ break;
+ case 0x9B :
+ return "\xE5\xA5\xB3";
+ break;
+ case 0x9C :
+ return "\xE9\x81\xA9";
+ break;
+ case 0x9D :
+ return "\xE5\x84\xAA";
+ break;
+ case 0x9E :
+ return "\xE5\x8D\xB0";
+ break;
+ case 0x9F :
+ return "\xE6\xB3\xA8";
+ break;
+ case 0xA0 :
+ return "\xE9\xA0\x85";
+ break;
+ case 0xA1 :
+ return "\xE4\xBC\x91";
+ break;
+ case 0xA2 :
+ return "\xE5\x86\x99";
+ break;
+ case 0xA3 :
+ return "\xE6\xAD\xA3";
+ break;
+ case 0xA4 :
+ return "\xE4\xB8\x8A";
+ break;
+ case 0xA5 :
+ return "\xE4\xB8\xAD";
+ break;
+ case 0xA6 :
+ return "\xE4\xB8\x8B";
+ break;
+ case 0xA7 :
+ return "\xE5\xB7\xA6";
+ break;
+ case 0xA8 :
+ return "\xE5\x8F\xB3";
+ break;
+ case 0xA9 :
+ return "\xE5\x8C\xBB";
+ break;
+ case 0xAA :
+ return "\xE5\xAE\x97";
+ break;
+ case 0xAB :
+ return "\xE5\xAD\xA6";
+ break;
+ case 0xAC :
+ return "\xE7\x9B\xA3";
+ break;
+ case 0xAD :
+ return "\xE4\xBC\x81";
+ break;
+ case 0xAE :
+ return "\xE8\xB3\x87";
+ break;
+ case 0xAF :
+ return "\xE5\x8D\x94";
+ break;
+ case 0xB0 :
+ return "\xE5\xA4\x9C";
+ break;
+ case 0xB1 :
+ return "\x33\x36";
+ break;
+ case 0xB2 :
+ return "\x33\x37";
+ break;
+ case 0xB3 :
+ return "\x33\x38";
+ break;
+ case 0xB4 :
+ return "\x33\x39";
+ break;
+ case 0xB5 :
+ return "\x34\x30";
+ break;
+ case 0xB6 :
+ return "\x34\x31";
+ break;
+ case 0xB7 :
+ return "\x34\x32";
+ break;
+ case 0xB8 :
+ return "\x34\x33";
+ break;
+ case 0xB9 :
+ return "\x34\x34";
+ break;
+ case 0xBA :
+ return "\x34\x35";
+ break;
+ case 0xBB :
+ return "\x34\x36";
+ break;
+ case 0xBC :
+ return "\x34\x37";
+ break;
+ case 0xBD :
+ return "\x34\x38";
+ break;
+ case 0xBE :
+ return "\x34\x39";
+ break;
+ case 0xBF :
+ return "\x35\x30";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x31\xE6\x9C\x88";
+ break;
+ case 0x81 :
+ return "\x32\xE6\x9C\x88";
+ break;
+ case 0x82 :
+ return "\x33\xE6\x9C\x88";
+ break;
+ case 0x83 :
+ return "\x34\xE6\x9C\x88";
+ break;
+ case 0x84 :
+ return "\x35\xE6\x9C\x88";
+ break;
+ case 0x85 :
+ return "\x36\xE6\x9C\x88";
+ break;
+ case 0x86 :
+ return "\x37\xE6\x9C\x88";
+ break;
+ case 0x87 :
+ return "\x38\xE6\x9C\x88";
+ break;
+ case 0x88 :
+ return "\x39\xE6\x9C\x88";
+ break;
+ case 0x89 :
+ return "\x31\x30\xE6\x9C\x88";
+ break;
+ case 0x8A :
+ return "\x31\x31\xE6\x9C\x88";
+ break;
+ case 0x8B :
+ return "\x31\x32\xE6\x9C\x88";
+ break;
+ case 0x8C :
+ return "\x68\x67";
+ break;
+ case 0x8D :
+ return "\x65\x72\x67";
+ break;
+ case 0x8E :
+ return "\x65\x76";
+ break;
+ case 0x8F :
+ return "\x6C\x74\x64";
+ break;
+ case 0x90 :
+ return "\xE3\x82\xA2";
+ break;
+ case 0x91 :
+ return "\xE3\x82\xA4";
+ break;
+ case 0x92 :
+ return "\xE3\x82\xA6";
+ break;
+ case 0x93 :
+ return "\xE3\x82\xA8";
+ break;
+ case 0x94 :
+ return "\xE3\x82\xAA";
+ break;
+ case 0x95 :
+ return "\xE3\x82\xAB";
+ break;
+ case 0x96 :
+ return "\xE3\x82\xAD";
+ break;
+ case 0x97 :
+ return "\xE3\x82\xAF";
+ break;
+ case 0x98 :
+ return "\xE3\x82\xB1";
+ break;
+ case 0x99 :
+ return "\xE3\x82\xB3";
+ break;
+ case 0x9A :
+ return "\xE3\x82\xB5";
+ break;
+ case 0x9B :
+ return "\xE3\x82\xB7";
+ break;
+ case 0x9C :
+ return "\xE3\x82\xB9";
+ break;
+ case 0x9D :
+ return "\xE3\x82\xBB";
+ break;
+ case 0x9E :
+ return "\xE3\x82\xBD";
+ break;
+ case 0x9F :
+ return "\xE3\x82\xBF";
+ break;
+ case 0xA0 :
+ return "\xE3\x83\x81";
+ break;
+ case 0xA1 :
+ return "\xE3\x83\x84";
+ break;
+ case 0xA2 :
+ return "\xE3\x83\x86";
+ break;
+ case 0xA3 :
+ return "\xE3\x83\x88";
+ break;
+ case 0xA4 :
+ return "\xE3\x83\x8A";
+ break;
+ case 0xA5 :
+ return "\xE3\x83\x8B";
+ break;
+ case 0xA6 :
+ return "\xE3\x83\x8C";
+ break;
+ case 0xA7 :
+ return "\xE3\x83\x8D";
+ break;
+ case 0xA8 :
+ return "\xE3\x83\x8E";
+ break;
+ case 0xA9 :
+ return "\xE3\x83\x8F";
+ break;
+ case 0xAA :
+ return "\xE3\x83\x92";
+ break;
+ case 0xAB :
+ return "\xE3\x83\x95";
+ break;
+ case 0xAC :
+ return "\xE3\x83\x98";
+ break;
+ case 0xAD :
+ return "\xE3\x83\x9B";
+ break;
+ case 0xAE :
+ return "\xE3\x83\x9E";
+ break;
+ case 0xAF :
+ return "\xE3\x83\x9F";
+ break;
+ case 0xB0 :
+ return "\xE3\x83\xA0";
+ break;
+ case 0xB1 :
+ return "\xE3\x83\xA1";
+ break;
+ case 0xB2 :
+ return "\xE3\x83\xA2";
+ break;
+ case 0xB3 :
+ return "\xE3\x83\xA4";
+ break;
+ case 0xB4 :
+ return "\xE3\x83\xA6";
+ break;
+ case 0xB5 :
+ return "\xE3\x83\xA8";
+ break;
+ case 0xB6 :
+ return "\xE3\x83\xA9";
+ break;
+ case 0xB7 :
+ return "\xE3\x83\xAA";
+ break;
+ case 0xB8 :
+ return "\xE3\x83\xAB";
+ break;
+ case 0xB9 :
+ return "\xE3\x83\xAC";
+ break;
+ case 0xBA :
+ return "\xE3\x83\xAD";
+ break;
+ case 0xBB :
+ return "\xE3\x83\xAF";
+ break;
+ case 0xBC :
+ return "\xE3\x83\xB0";
+ break;
+ case 0xBD :
+ return "\xE3\x83\xB1";
+ break;
+ case 0xBE :
+ return "\xE3\x83\xB2";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE3\x82\xA2\xE3\x83\x91\xE3\x83\xBC\xE3\x83\x88";
+ break;
+ case 0x81 :
+ return "\xE3\x82\xA2\xE3\x83\xAB\xE3\x83\x95\xE3\x82\xA1";
+ break;
+ case 0x82 :
+ return "\xE3\x82\xA2\xE3\x83\xB3\xE3\x83\x9A\xE3\x82\xA2";
+ break;
+ case 0x83 :
+ return "\xE3\x82\xA2\xE3\x83\xBC\xE3\x83\xAB";
+ break;
+ case 0x84 :
+ return "\xE3\x82\xA4\xE3\x83\x8B\xE3\x83\xB3\xE3\x82\xB0";
+ break;
+ case 0x85 :
+ return "\xE3\x82\xA4\xE3\x83\xB3\xE3\x83\x81";
+ break;
+ case 0x86 :
+ return "\xE3\x82\xA6\xE3\x82\xA9\xE3\x83\xB3";
+ break;
+ case 0x87 :
+ return "\xE3\x82\xA8\xE3\x82\xB9\xE3\x82\xAF\xE3\x83\xBC\xE3\x83\x89";
+ break;
+ case 0x88 :
+ return "\xE3\x82\xA8\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xBC";
+ break;
+ case 0x89 :
+ return "\xE3\x82\xAA\xE3\x83\xB3\xE3\x82\xB9";
+ break;
+ case 0x8A :
+ return "\xE3\x82\xAA\xE3\x83\xBC\xE3\x83\xA0";
+ break;
+ case 0x8B :
+ return "\xE3\x82\xAB\xE3\x82\xA4\xE3\x83\xAA";
+ break;
+ case 0x8C :
+ return "\xE3\x82\xAB\xE3\x83\xA9\xE3\x83\x83\xE3\x83\x88";
+ break;
+ case 0x8D :
+ return "\xE3\x82\xAB\xE3\x83\xAD\xE3\x83\xAA\xE3\x83\xBC";
+ break;
+ case 0x8E :
+ return "\xE3\x82\xAC\xE3\x83\xAD\xE3\x83\xB3";
+ break;
+ case 0x8F :
+ return "\xE3\x82\xAC\xE3\x83\xB3\xE3\x83\x9E";
+ break;
+ case 0x90 :
+ return "\xE3\x82\xAE\xE3\x82\xAC";
+ break;
+ case 0x91 :
+ return "\xE3\x82\xAE\xE3\x83\x8B\xE3\x83\xBC";
+ break;
+ case 0x92 :
+ return "\xE3\x82\xAD\xE3\x83\xA5\xE3\x83\xAA\xE3\x83\xBC";
+ break;
+ case 0x93 :
+ return "\xE3\x82\xAE\xE3\x83\xAB\xE3\x83\x80\xE3\x83\xBC";
+ break;
+ case 0x94 :
+ return "\xE3\x82\xAD\xE3\x83\xAD";
+ break;
+ case 0x95 :
+ return "\xE3\x82\xAD\xE3\x83\xAD\xE3\x82\xB0\xE3\x83\xA9\xE3\x83\xA0";
+ break;
+ case 0x96 :
+ return "\xE3\x82\xAD\xE3\x83\xAD\xE3\x83\xA1\xE3\x83\xBC\xE3\x83\x88\xE3\x83\xAB";
+ break;
+ case 0x97 :
+ return "\xE3\x82\xAD\xE3\x83\xAD\xE3\x83\xAF\xE3\x83\x83\xE3\x83\x88";
+ break;
+ case 0x98 :
+ return "\xE3\x82\xB0\xE3\x83\xA9\xE3\x83\xA0";
+ break;
+ case 0x99 :
+ return "\xE3\x82\xB0\xE3\x83\xA9\xE3\x83\xA0\xE3\x83\x88\xE3\x83\xB3";
+ break;
+ case 0x9A :
+ return "\xE3\x82\xAF\xE3\x83\xAB\xE3\x82\xBC\xE3\x82\xA4\xE3\x83\xAD";
+ break;
+ case 0x9B :
+ return "\xE3\x82\xAF\xE3\x83\xAD\xE3\x83\xBC\xE3\x83\x8D";
+ break;
+ case 0x9C :
+ return "\xE3\x82\xB1\xE3\x83\xBC\xE3\x82\xB9";
+ break;
+ case 0x9D :
+ return "\xE3\x82\xB3\xE3\x83\xAB\xE3\x83\x8A";
+ break;
+ case 0x9E :
+ return "\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x9D";
+ break;
+ case 0x9F :
+ return "\xE3\x82\xB5\xE3\x82\xA4\xE3\x82\xAF\xE3\x83\xAB";
+ break;
+ case 0xA0 :
+ return "\xE3\x82\xB5\xE3\x83\xB3\xE3\x83\x81\xE3\x83\xBC\xE3\x83\xA0";
+ break;
+ case 0xA1 :
+ return "\xE3\x82\xB7\xE3\x83\xAA\xE3\x83\xB3\xE3\x82\xB0";
+ break;
+ case 0xA2 :
+ return "\xE3\x82\xBB\xE3\x83\xB3\xE3\x83\x81";
+ break;
+ case 0xA3 :
+ return "\xE3\x82\xBB\xE3\x83\xB3\xE3\x83\x88";
+ break;
+ case 0xA4 :
+ return "\xE3\x83\x80\xE3\x83\xBC\xE3\x82\xB9";
+ break;
+ case 0xA5 :
+ return "\xE3\x83\x87\xE3\x82\xB7";
+ break;
+ case 0xA6 :
+ return "\xE3\x83\x89\xE3\x83\xAB";
+ break;
+ case 0xA7 :
+ return "\xE3\x83\x88\xE3\x83\xB3";
+ break;
+ case 0xA8 :
+ return "\xE3\x83\x8A\xE3\x83\x8E";
+ break;
+ case 0xA9 :
+ return "\xE3\x83\x8E\xE3\x83\x83\xE3\x83\x88";
+ break;
+ case 0xAA :
+ return "\xE3\x83\x8F\xE3\x82\xA4\xE3\x83\x84";
+ break;
+ case 0xAB :
+ return "\xE3\x83\x91\xE3\x83\xBC\xE3\x82\xBB\xE3\x83\xB3\xE3\x83\x88";
+ break;
+ case 0xAC :
+ return "\xE3\x83\x91\xE3\x83\xBC\xE3\x83\x84";
+ break;
+ case 0xAD :
+ return "\xE3\x83\x90\xE3\x83\xBC\xE3\x83\xAC\xE3\x83\xAB";
+ break;
+ case 0xAE :
+ return "\xE3\x83\x94\xE3\x82\xA2\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xAB";
+ break;
+ case 0xAF :
+ return "\xE3\x83\x94\xE3\x82\xAF\xE3\x83\xAB";
+ break;
+ case 0xB0 :
+ return "\xE3\x83\x94\xE3\x82\xB3";
+ break;
+ case 0xB1 :
+ return "\xE3\x83\x93\xE3\x83\xAB";
+ break;
+ case 0xB2 :
+ return "\xE3\x83\x95\xE3\x82\xA1\xE3\x83\xA9\xE3\x83\x83\xE3\x83\x89";
+ break;
+ case 0xB3 :
+ return "\xE3\x83\x95\xE3\x82\xA3\xE3\x83\xBC\xE3\x83\x88";
+ break;
+ case 0xB4 :
+ return "\xE3\x83\x96\xE3\x83\x83\xE3\x82\xB7\xE3\x82\xA7\xE3\x83\xAB";
+ break;
+ case 0xB5 :
+ return "\xE3\x83\x95\xE3\x83\xA9\xE3\x83\xB3";
+ break;
+ case 0xB6 :
+ return "\xE3\x83\x98\xE3\x82\xAF\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\xAB";
+ break;
+ case 0xB7 :
+ return "\xE3\x83\x9A\xE3\x82\xBD";
+ break;
+ case 0xB8 :
+ return "\xE3\x83\x9A\xE3\x83\x8B\xE3\x83\x92";
+ break;
+ case 0xB9 :
+ return "\xE3\x83\x98\xE3\x83\xAB\xE3\x83\x84";
+ break;
+ case 0xBA :
+ return "\xE3\x83\x9A\xE3\x83\xB3\xE3\x82\xB9";
+ break;
+ case 0xBB :
+ return "\xE3\x83\x9A\xE3\x83\xBC\xE3\x82\xB8";
+ break;
+ case 0xBC :
+ return "\xE3\x83\x99\xE3\x83\xBC\xE3\x82\xBF";
+ break;
+ case 0xBD :
+ return "\xE3\x83\x9D\xE3\x82\xA4\xE3\x83\xB3\xE3\x83\x88";
+ break;
+ case 0xBE :
+ return "\xE3\x83\x9C\xE3\x83\xAB\xE3\x83\x88";
+ break;
+ case 0xBF :
+ return "\xE3\x83\x9B\xE3\x83\xB3";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE3\x83\x9D\xE3\x83\xB3\xE3\x83\x89";
+ break;
+ case 0x81 :
+ return "\xE3\x83\x9B\xE3\x83\xBC\xE3\x83\xAB";
+ break;
+ case 0x82 :
+ return "\xE3\x83\x9B\xE3\x83\xBC\xE3\x83\xB3";
+ break;
+ case 0x83 :
+ return "\xE3\x83\x9E\xE3\x82\xA4\xE3\x82\xAF\xE3\x83\xAD";
+ break;
+ case 0x84 :
+ return "\xE3\x83\x9E\xE3\x82\xA4\xE3\x83\xAB";
+ break;
+ case 0x85 :
+ return "\xE3\x83\x9E\xE3\x83\x83\xE3\x83\x8F";
+ break;
+ case 0x86 :
+ return "\xE3\x83\x9E\xE3\x83\xAB\xE3\x82\xAF";
+ break;
+ case 0x87 :
+ return "\xE3\x83\x9E\xE3\x83\xB3\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3";
+ break;
+ case 0x88 :
+ return "\xE3\x83\x9F\xE3\x82\xAF\xE3\x83\xAD\xE3\x83\xB3";
+ break;
+ case 0x89 :
+ return "\xE3\x83\x9F\xE3\x83\xAA";
+ break;
+ case 0x8A :
+ return "\xE3\x83\x9F\xE3\x83\xAA\xE3\x83\x90\xE3\x83\xBC\xE3\x83\xAB";
+ break;
+ case 0x8B :
+ return "\xE3\x83\xA1\xE3\x82\xAC";
+ break;
+ case 0x8C :
+ return "\xE3\x83\xA1\xE3\x82\xAC\xE3\x83\x88\xE3\x83\xB3";
+ break;
+ case 0x8D :
+ return "\xE3\x83\xA1\xE3\x83\xBC\xE3\x83\x88\xE3\x83\xAB";
+ break;
+ case 0x8E :
+ return "\xE3\x83\xA4\xE3\x83\xBC\xE3\x83\x89";
+ break;
+ case 0x8F :
+ return "\xE3\x83\xA4\xE3\x83\xBC\xE3\x83\xAB";
+ break;
+ case 0x90 :
+ return "\xE3\x83\xA6\xE3\x82\xA2\xE3\x83\xB3";
+ break;
+ case 0x91 :
+ return "\xE3\x83\xAA\xE3\x83\x83\xE3\x83\x88\xE3\x83\xAB";
+ break;
+ case 0x92 :
+ return "\xE3\x83\xAA\xE3\x83\xA9";
+ break;
+ case 0x93 :
+ return "\xE3\x83\xAB\xE3\x83\x94\xE3\x83\xBC";
+ break;
+ case 0x94 :
+ return "\xE3\x83\xAB\xE3\x83\xBC\xE3\x83\x96\xE3\x83\xAB";
+ break;
+ case 0x95 :
+ return "\xE3\x83\xAC\xE3\x83\xA0";
+ break;
+ case 0x96 :
+ return "\xE3\x83\xAC\xE3\x83\xB3\xE3\x83\x88\xE3\x82\xB2\xE3\x83\xB3";
+ break;
+ case 0x97 :
+ return "\xE3\x83\xAF\xE3\x83\x83\xE3\x83\x88";
+ break;
+ case 0x98 :
+ return "\x30\xE7\x82\xB9";
+ break;
+ case 0x99 :
+ return "\x31\xE7\x82\xB9";
+ break;
+ case 0x9A :
+ return "\x32\xE7\x82\xB9";
+ break;
+ case 0x9B :
+ return "\x33\xE7\x82\xB9";
+ break;
+ case 0x9C :
+ return "\x34\xE7\x82\xB9";
+ break;
+ case 0x9D :
+ return "\x35\xE7\x82\xB9";
+ break;
+ case 0x9E :
+ return "\x36\xE7\x82\xB9";
+ break;
+ case 0x9F :
+ return "\x37\xE7\x82\xB9";
+ break;
+ case 0xA0 :
+ return "\x38\xE7\x82\xB9";
+ break;
+ case 0xA1 :
+ return "\x39\xE7\x82\xB9";
+ break;
+ case 0xA2 :
+ return "\x31\x30\xE7\x82\xB9";
+ break;
+ case 0xA3 :
+ return "\x31\x31\xE7\x82\xB9";
+ break;
+ case 0xA4 :
+ return "\x31\x32\xE7\x82\xB9";
+ break;
+ case 0xA5 :
+ return "\x31\x33\xE7\x82\xB9";
+ break;
+ case 0xA6 :
+ return "\x31\x34\xE7\x82\xB9";
+ break;
+ case 0xA7 :
+ return "\x31\x35\xE7\x82\xB9";
+ break;
+ case 0xA8 :
+ return "\x31\x36\xE7\x82\xB9";
+ break;
+ case 0xA9 :
+ return "\x31\x37\xE7\x82\xB9";
+ break;
+ case 0xAA :
+ return "\x31\x38\xE7\x82\xB9";
+ break;
+ case 0xAB :
+ return "\x31\x39\xE7\x82\xB9";
+ break;
+ case 0xAC :
+ return "\x32\x30\xE7\x82\xB9";
+ break;
+ case 0xAD :
+ return "\x32\x31\xE7\x82\xB9";
+ break;
+ case 0xAE :
+ return "\x32\x32\xE7\x82\xB9";
+ break;
+ case 0xAF :
+ return "\x32\x33\xE7\x82\xB9";
+ break;
+ case 0xB0 :
+ return "\x32\x34\xE7\x82\xB9";
+ break;
+ case 0xB1 :
+ return "\x68\x70\x61";
+ break;
+ case 0xB2 :
+ return "\x64\x61";
+ break;
+ case 0xB3 :
+ return "\x61\x75";
+ break;
+ case 0xB4 :
+ return "\x62\x61\x72";
+ break;
+ case 0xB5 :
+ return "\x6F\x76";
+ break;
+ case 0xB6 :
+ return "\x70\x63";
+ break;
+ case 0xB7 :
+ return "\x64\x6D";
+ break;
+ case 0xB8 :
+ return "\x64\x6D\x32";
+ break;
+ case 0xB9 :
+ return "\x64\x6D\x33";
+ break;
+ case 0xBA :
+ return "\x69\x75";
+ break;
+ case 0xBB :
+ return "\xE5\xB9\xB3\xE6\x88\x90";
+ break;
+ case 0xBC :
+ return "\xE6\x98\xAD\xE5\x92\x8C";
+ break;
+ case 0xBD :
+ return "\xE5\xA4\xA7\xE6\xAD\xA3";
+ break;
+ case 0xBE :
+ return "\xE6\x98\x8E\xE6\xB2\xBB";
+ break;
+ case 0xBF :
+ return "\xE6\xA0\xAA\xE5\xBC\x8F\xE4\xBC\x9A\xE7\xA4\xBE";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x70\x61";
+ break;
+ case 0x81 :
+ return "\x6E\x61";
+ break;
+ case 0x82 :
+ return "\xCE\xBC\x61";
+ break;
+ case 0x83 :
+ return "\x6D\x61";
+ break;
+ case 0x84 :
+ return "\x6B\x61";
+ break;
+ case 0x85 :
+ return "\x6B\x62";
+ break;
+ case 0x86 :
+ return "\x6D\x62";
+ break;
+ case 0x87 :
+ return "\x67\x62";
+ break;
+ case 0x88 :
+ return "\x63\x61\x6C";
+ break;
+ case 0x89 :
+ return "\x6B\x63\x61\x6C";
+ break;
+ case 0x8A :
+ return "\x70\x66";
+ break;
+ case 0x8B :
+ return "\x6E\x66";
+ break;
+ case 0x8C :
+ return "\xCE\xBC\x66";
+ break;
+ case 0x8D :
+ return "\xCE\xBC\x67";
+ break;
+ case 0x8E :
+ return "\x6D\x67";
+ break;
+ case 0x8F :
+ return "\x6B\x67";
+ break;
+ case 0x90 :
+ return "\x68\x7A";
+ break;
+ case 0x91 :
+ return "\x6B\x68\x7A";
+ break;
+ case 0x92 :
+ return "\x6D\x68\x7A";
+ break;
+ case 0x93 :
+ return "\x67\x68\x7A";
+ break;
+ case 0x94 :
+ return "\x74\x68\x7A";
+ break;
+ case 0x95 :
+ return "\xCE\xBC\x6C";
+ break;
+ case 0x96 :
+ return "\x6D\x6C";
+ break;
+ case 0x97 :
+ return "\x64\x6C";
+ break;
+ case 0x98 :
+ return "\x6B\x6C";
+ break;
+ case 0x99 :
+ return "\x66\x6D";
+ break;
+ case 0x9A :
+ return "\x6E\x6D";
+ break;
+ case 0x9B :
+ return "\xCE\xBC\x6D";
+ break;
+ case 0x9C :
+ return "\x6D\x6D";
+ break;
+ case 0x9D :
+ return "\x63\x6D";
+ break;
+ case 0x9E :
+ return "\x6B\x6D";
+ break;
+ case 0x9F :
+ return "\x6D\x6D\x32";
+ break;
+ case 0xA0 :
+ return "\x63\x6D\x32";
+ break;
+ case 0xA1 :
+ return "\x6D\x32";
+ break;
+ case 0xA2 :
+ return "\x6B\x6D\x32";
+ break;
+ case 0xA3 :
+ return "\x6D\x6D\x33";
+ break;
+ case 0xA4 :
+ return "\x63\x6D\x33";
+ break;
+ case 0xA5 :
+ return "\x6D\x33";
+ break;
+ case 0xA6 :
+ return "\x6B\x6D\x33";
+ break;
+ case 0xA7 :
+ return "\x6D\xE2\x88\x95\x73";
+ break;
+ case 0xA8 :
+ return "\x6D\xE2\x88\x95\x73\x32";
+ break;
+ case 0xA9 :
+ return "\x70\x61";
+ break;
+ case 0xAA :
+ return "\x6B\x70\x61";
+ break;
+ case 0xAB :
+ return "\x6D\x70\x61";
+ break;
+ case 0xAC :
+ return "\x67\x70\x61";
+ break;
+ case 0xAD :
+ return "\x72\x61\x64";
+ break;
+ case 0xAE :
+ return "\x72\x61\x64\xE2\x88\x95\x73";
+ break;
+ case 0xAF :
+ return "\x72\x61\x64\xE2\x88\x95\x73\x32";
+ break;
+ case 0xB0 :
+ return "\x70\x73";
+ break;
+ case 0xB1 :
+ return "\x6E\x73";
+ break;
+ case 0xB2 :
+ return "\xCE\xBC\x73";
+ break;
+ case 0xB3 :
+ return "\x6D\x73";
+ break;
+ case 0xB4 :
+ return "\x70\x76";
+ break;
+ case 0xB5 :
+ return "\x6E\x76";
+ break;
+ case 0xB6 :
+ return "\xCE\xBC\x76";
+ break;
+ case 0xB7 :
+ return "\x6D\x76";
+ break;
+ case 0xB8 :
+ return "\x6B\x76";
+ break;
+ case 0xB9 :
+ return "\x6D\x76";
+ break;
+ case 0xBA :
+ return "\x70\x77";
+ break;
+ case 0xBB :
+ return "\x6E\x77";
+ break;
+ case 0xBC :
+ return "\xCE\xBC\x77";
+ break;
+ case 0xBD :
+ return "\x6D\x77";
+ break;
+ case 0xBE :
+ return "\x6B\x77";
+ break;
+ case 0xBF :
+ return "\x6D\x77";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x6B\xCE\xA9";
+ break;
+ case 0x81 :
+ return "\x6D\xCE\xA9";
+ break;
+ case 0x82 :
+ return "\x61\x2E\x6D\x2E";
+ break;
+ case 0x83 :
+ return "\x62\x71";
+ break;
+ case 0x84 :
+ return "\x63\x63";
+ break;
+ case 0x85 :
+ return "\x63\x64";
+ break;
+ case 0x86 :
+ return "\x63\xE2\x88\x95\x6B\x67";
+ break;
+ case 0x87 :
+ return "\x63\x6F\x2E";
+ break;
+ case 0x88 :
+ return "\x64\x62";
+ break;
+ case 0x89 :
+ return "\x67\x79";
+ break;
+ case 0x8A :
+ return "\x68\x61";
+ break;
+ case 0x8B :
+ return "\x68\x70";
+ break;
+ case 0x8C :
+ return "\x69\x6E";
+ break;
+ case 0x8D :
+ return "\x6B\x6B";
+ break;
+ case 0x8E :
+ return "\x6B\x6D";
+ break;
+ case 0x8F :
+ return "\x6B\x74";
+ break;
+ case 0x90 :
+ return "\x6C\x6D";
+ break;
+ case 0x91 :
+ return "\x6C\x6E";
+ break;
+ case 0x92 :
+ return "\x6C\x6F\x67";
+ break;
+ case 0x93 :
+ return "\x6C\x78";
+ break;
+ case 0x94 :
+ return "\x6D\x62";
+ break;
+ case 0x95 :
+ return "\x6D\x69\x6C";
+ break;
+ case 0x96 :
+ return "\x6D\x6F\x6C";
+ break;
+ case 0x97 :
+ return "\x70\x68";
+ break;
+ case 0x98 :
+ return "\x70\x2E\x6D\x2E";
+ break;
+ case 0x99 :
+ return "\x70\x70\x6D";
+ break;
+ case 0x9A :
+ return "\x70\x72";
+ break;
+ case 0x9B :
+ return "\x73\x72";
+ break;
+ case 0x9C :
+ return "\x73\x76";
+ break;
+ case 0x9D :
+ return "\x77\x62";
+ break;
+ case 0x9E :
+ return "\x76\xE2\x88\x95\x6D";
+ break;
+ case 0x9F :
+ return "\x61\xE2\x88\x95\x6D";
+ break;
+ case 0xA0 :
+ return "\x31\xE6\x97\xA5";
+ break;
+ case 0xA1 :
+ return "\x32\xE6\x97\xA5";
+ break;
+ case 0xA2 :
+ return "\x33\xE6\x97\xA5";
+ break;
+ case 0xA3 :
+ return "\x34\xE6\x97\xA5";
+ break;
+ case 0xA4 :
+ return "\x35\xE6\x97\xA5";
+ break;
+ case 0xA5 :
+ return "\x36\xE6\x97\xA5";
+ break;
+ case 0xA6 :
+ return "\x37\xE6\x97\xA5";
+ break;
+ case 0xA7 :
+ return "\x38\xE6\x97\xA5";
+ break;
+ case 0xA8 :
+ return "\x39\xE6\x97\xA5";
+ break;
+ case 0xA9 :
+ return "\x31\x30\xE6\x97\xA5";
+ break;
+ case 0xAA :
+ return "\x31\x31\xE6\x97\xA5";
+ break;
+ case 0xAB :
+ return "\x31\x32\xE6\x97\xA5";
+ break;
+ case 0xAC :
+ return "\x31\x33\xE6\x97\xA5";
+ break;
+ case 0xAD :
+ return "\x31\x34\xE6\x97\xA5";
+ break;
+ case 0xAE :
+ return "\x31\x35\xE6\x97\xA5";
+ break;
+ case 0xAF :
+ return "\x31\x36\xE6\x97\xA5";
+ break;
+ case 0xB0 :
+ return "\x31\x37\xE6\x97\xA5";
+ break;
+ case 0xB1 :
+ return "\x31\x38\xE6\x97\xA5";
+ break;
+ case 0xB2 :
+ return "\x31\x39\xE6\x97\xA5";
+ break;
+ case 0xB3 :
+ return "\x32\x30\xE6\x97\xA5";
+ break;
+ case 0xB4 :
+ return "\x32\x31\xE6\x97\xA5";
+ break;
+ case 0xB5 :
+ return "\x32\x32\xE6\x97\xA5";
+ break;
+ case 0xB6 :
+ return "\x32\x33\xE6\x97\xA5";
+ break;
+ case 0xB7 :
+ return "\x32\x34\xE6\x97\xA5";
+ break;
+ case 0xB8 :
+ return "\x32\x35\xE6\x97\xA5";
+ break;
+ case 0xB9 :
+ return "\x32\x36\xE6\x97\xA5";
+ break;
+ case 0xBA :
+ return "\x32\x37\xE6\x97\xA5";
+ break;
+ case 0xBB :
+ return "\x32\x38\xE6\x97\xA5";
+ break;
+ case 0xBC :
+ return "\x32\x39\xE6\x97\xA5";
+ break;
+ case 0xBD :
+ return "\x33\x30\xE6\x97\xA5";
+ break;
+ case 0xBE :
+ return "\x33\x31\xE6\x97\xA5";
+ break;
+ case 0xBF :
+ return "\x67\x61\x6C";
+ break;
+ }
+ break;
+ }
+ break;
+case 0xEF :
+ switch (str[1]) {
+ case 0xA4 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE8\xB1\x88";
+ break;
+ case 0x81 :
+ return "\xE6\x9B\xB4";
+ break;
+ case 0x82 :
+ return "\xE8\xBB\x8A";
+ break;
+ case 0x83 :
+ return "\xE8\xB3\x88";
+ break;
+ case 0x84 :
+ return "\xE6\xBB\x91";
+ break;
+ case 0x85 :
+ return "\xE4\xB8\xB2";
+ break;
+ case 0x86 :
+ return "\xE5\x8F\xA5";
+ break;
+ case 0x87 :
+ return "\xE9\xBE\x9C";
+ break;
+ case 0x88 :
+ return "\xE9\xBE\x9C";
+ break;
+ case 0x89 :
+ return "\xE5\xA5\x91";
+ break;
+ case 0x8A :
+ return "\xE9\x87\x91";
+ break;
+ case 0x8B :
+ return "\xE5\x96\x87";
+ break;
+ case 0x8C :
+ return "\xE5\xA5\x88";
+ break;
+ case 0x8D :
+ return "\xE6\x87\xB6";
+ break;
+ case 0x8E :
+ return "\xE7\x99\xA9";
+ break;
+ case 0x8F :
+ return "\xE7\xBE\x85";
+ break;
+ case 0x90 :
+ return "\xE8\x98\xBF";
+ break;
+ case 0x91 :
+ return "\xE8\x9E\xBA";
+ break;
+ case 0x92 :
+ return "\xE8\xA3\xB8";
+ break;
+ case 0x93 :
+ return "\xE9\x82\x8F";
+ break;
+ case 0x94 :
+ return "\xE6\xA8\x82";
+ break;
+ case 0x95 :
+ return "\xE6\xB4\x9B";
+ break;
+ case 0x96 :
+ return "\xE7\x83\x99";
+ break;
+ case 0x97 :
+ return "\xE7\x8F\x9E";
+ break;
+ case 0x98 :
+ return "\xE8\x90\xBD";
+ break;
+ case 0x99 :
+ return "\xE9\x85\xAA";
+ break;
+ case 0x9A :
+ return "\xE9\xA7\xB1";
+ break;
+ case 0x9B :
+ return "\xE4\xBA\x82";
+ break;
+ case 0x9C :
+ return "\xE5\x8D\xB5";
+ break;
+ case 0x9D :
+ return "\xE6\xAC\x84";
+ break;
+ case 0x9E :
+ return "\xE7\x88\x9B";
+ break;
+ case 0x9F :
+ return "\xE8\x98\xAD";
+ break;
+ case 0xA0 :
+ return "\xE9\xB8\x9E";
+ break;
+ case 0xA1 :
+ return "\xE5\xB5\x90";
+ break;
+ case 0xA2 :
+ return "\xE6\xBF\xAB";
+ break;
+ case 0xA3 :
+ return "\xE8\x97\x8D";
+ break;
+ case 0xA4 :
+ return "\xE8\xA5\xA4";
+ break;
+ case 0xA5 :
+ return "\xE6\x8B\x89";
+ break;
+ case 0xA6 :
+ return "\xE8\x87\x98";
+ break;
+ case 0xA7 :
+ return "\xE8\xA0\x9F";
+ break;
+ case 0xA8 :
+ return "\xE5\xBB\x8A";
+ break;
+ case 0xA9 :
+ return "\xE6\x9C\x97";
+ break;
+ case 0xAA :
+ return "\xE6\xB5\xAA";
+ break;
+ case 0xAB :
+ return "\xE7\x8B\xBC";
+ break;
+ case 0xAC :
+ return "\xE9\x83\x8E";
+ break;
+ case 0xAD :
+ return "\xE4\xBE\x86";
+ break;
+ case 0xAE :
+ return "\xE5\x86\xB7";
+ break;
+ case 0xAF :
+ return "\xE5\x8B\x9E";
+ break;
+ case 0xB0 :
+ return "\xE6\x93\x84";
+ break;
+ case 0xB1 :
+ return "\xE6\xAB\x93";
+ break;
+ case 0xB2 :
+ return "\xE7\x88\x90";
+ break;
+ case 0xB3 :
+ return "\xE7\x9B\xA7";
+ break;
+ case 0xB4 :
+ return "\xE8\x80\x81";
+ break;
+ case 0xB5 :
+ return "\xE8\x98\x86";
+ break;
+ case 0xB6 :
+ return "\xE8\x99\x9C";
+ break;
+ case 0xB7 :
+ return "\xE8\xB7\xAF";
+ break;
+ case 0xB8 :
+ return "\xE9\x9C\xB2";
+ break;
+ case 0xB9 :
+ return "\xE9\xAD\xAF";
+ break;
+ case 0xBA :
+ return "\xE9\xB7\xBA";
+ break;
+ case 0xBB :
+ return "\xE7\xA2\x8C";
+ break;
+ case 0xBC :
+ return "\xE7\xA5\xBF";
+ break;
+ case 0xBD :
+ return "\xE7\xB6\xA0";
+ break;
+ case 0xBE :
+ return "\xE8\x8F\x89";
+ break;
+ case 0xBF :
+ return "\xE9\x8C\x84";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE9\xB9\xBF";
+ break;
+ case 0x81 :
+ return "\xE8\xAB\x96";
+ break;
+ case 0x82 :
+ return "\xE5\xA3\x9F";
+ break;
+ case 0x83 :
+ return "\xE5\xBC\x84";
+ break;
+ case 0x84 :
+ return "\xE7\xB1\xA0";
+ break;
+ case 0x85 :
+ return "\xE8\x81\xBE";
+ break;
+ case 0x86 :
+ return "\xE7\x89\xA2";
+ break;
+ case 0x87 :
+ return "\xE7\xA3\x8A";
+ break;
+ case 0x88 :
+ return "\xE8\xB3\x82";
+ break;
+ case 0x89 :
+ return "\xE9\x9B\xB7";
+ break;
+ case 0x8A :
+ return "\xE5\xA3\x98";
+ break;
+ case 0x8B :
+ return "\xE5\xB1\xA2";
+ break;
+ case 0x8C :
+ return "\xE6\xA8\x93";
+ break;
+ case 0x8D :
+ return "\xE6\xB7\x9A";
+ break;
+ case 0x8E :
+ return "\xE6\xBC\x8F";
+ break;
+ case 0x8F :
+ return "\xE7\xB4\xAF";
+ break;
+ case 0x90 :
+ return "\xE7\xB8\xB7";
+ break;
+ case 0x91 :
+ return "\xE9\x99\x8B";
+ break;
+ case 0x92 :
+ return "\xE5\x8B\x92";
+ break;
+ case 0x93 :
+ return "\xE8\x82\x8B";
+ break;
+ case 0x94 :
+ return "\xE5\x87\x9C";
+ break;
+ case 0x95 :
+ return "\xE5\x87\x8C";
+ break;
+ case 0x96 :
+ return "\xE7\xA8\x9C";
+ break;
+ case 0x97 :
+ return "\xE7\xB6\xBE";
+ break;
+ case 0x98 :
+ return "\xE8\x8F\xB1";
+ break;
+ case 0x99 :
+ return "\xE9\x99\xB5";
+ break;
+ case 0x9A :
+ return "\xE8\xAE\x80";
+ break;
+ case 0x9B :
+ return "\xE6\x8B\x8F";
+ break;
+ case 0x9C :
+ return "\xE6\xA8\x82";
+ break;
+ case 0x9D :
+ return "\xE8\xAB\xBE";
+ break;
+ case 0x9E :
+ return "\xE4\xB8\xB9";
+ break;
+ case 0x9F :
+ return "\xE5\xAF\xA7";
+ break;
+ case 0xA0 :
+ return "\xE6\x80\x92";
+ break;
+ case 0xA1 :
+ return "\xE7\x8E\x87";
+ break;
+ case 0xA2 :
+ return "\xE7\x95\xB0";
+ break;
+ case 0xA3 :
+ return "\xE5\x8C\x97";
+ break;
+ case 0xA4 :
+ return "\xE7\xA3\xBB";
+ break;
+ case 0xA5 :
+ return "\xE4\xBE\xBF";
+ break;
+ case 0xA6 :
+ return "\xE5\xBE\xA9";
+ break;
+ case 0xA7 :
+ return "\xE4\xB8\x8D";
+ break;
+ case 0xA8 :
+ return "\xE6\xB3\x8C";
+ break;
+ case 0xA9 :
+ return "\xE6\x95\xB8";
+ break;
+ case 0xAA :
+ return "\xE7\xB4\xA2";
+ break;
+ case 0xAB :
+ return "\xE5\x8F\x83";
+ break;
+ case 0xAC :
+ return "\xE5\xA1\x9E";
+ break;
+ case 0xAD :
+ return "\xE7\x9C\x81";
+ break;
+ case 0xAE :
+ return "\xE8\x91\x89";
+ break;
+ case 0xAF :
+ return "\xE8\xAA\xAA";
+ break;
+ case 0xB0 :
+ return "\xE6\xAE\xBA";
+ break;
+ case 0xB1 :
+ return "\xE8\xBE\xB0";
+ break;
+ case 0xB2 :
+ return "\xE6\xB2\x88";
+ break;
+ case 0xB3 :
+ return "\xE6\x8B\xBE";
+ break;
+ case 0xB4 :
+ return "\xE8\x8B\xA5";
+ break;
+ case 0xB5 :
+ return "\xE6\x8E\xA0";
+ break;
+ case 0xB6 :
+ return "\xE7\x95\xA5";
+ break;
+ case 0xB7 :
+ return "\xE4\xBA\xAE";
+ break;
+ case 0xB8 :
+ return "\xE5\x85\xA9";
+ break;
+ case 0xB9 :
+ return "\xE5\x87\x89";
+ break;
+ case 0xBA :
+ return "\xE6\xA2\x81";
+ break;
+ case 0xBB :
+ return "\xE7\xB3\xA7";
+ break;
+ case 0xBC :
+ return "\xE8\x89\xAF";
+ break;
+ case 0xBD :
+ return "\xE8\xAB\x92";
+ break;
+ case 0xBE :
+ return "\xE9\x87\x8F";
+ break;
+ case 0xBF :
+ return "\xE5\x8B\xB5";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE5\x91\x82";
+ break;
+ case 0x81 :
+ return "\xE5\xA5\xB3";
+ break;
+ case 0x82 :
+ return "\xE5\xBB\xAC";
+ break;
+ case 0x83 :
+ return "\xE6\x97\x85";
+ break;
+ case 0x84 :
+ return "\xE6\xBF\xBE";
+ break;
+ case 0x85 :
+ return "\xE7\xA4\xAA";
+ break;
+ case 0x86 :
+ return "\xE9\x96\xAD";
+ break;
+ case 0x87 :
+ return "\xE9\xA9\xAA";
+ break;
+ case 0x88 :
+ return "\xE9\xBA\x97";
+ break;
+ case 0x89 :
+ return "\xE9\xBB\x8E";
+ break;
+ case 0x8A :
+ return "\xE5\x8A\x9B";
+ break;
+ case 0x8B :
+ return "\xE6\x9B\x86";
+ break;
+ case 0x8C :
+ return "\xE6\xAD\xB7";
+ break;
+ case 0x8D :
+ return "\xE8\xBD\xA2";
+ break;
+ case 0x8E :
+ return "\xE5\xB9\xB4";
+ break;
+ case 0x8F :
+ return "\xE6\x86\x90";
+ break;
+ case 0x90 :
+ return "\xE6\x88\x80";
+ break;
+ case 0x91 :
+ return "\xE6\x92\x9A";
+ break;
+ case 0x92 :
+ return "\xE6\xBC\xA3";
+ break;
+ case 0x93 :
+ return "\xE7\x85\x89";
+ break;
+ case 0x94 :
+ return "\xE7\x92\x89";
+ break;
+ case 0x95 :
+ return "\xE7\xA7\x8A";
+ break;
+ case 0x96 :
+ return "\xE7\xB7\xB4";
+ break;
+ case 0x97 :
+ return "\xE8\x81\xAF";
+ break;
+ case 0x98 :
+ return "\xE8\xBC\xA6";
+ break;
+ case 0x99 :
+ return "\xE8\x93\xAE";
+ break;
+ case 0x9A :
+ return "\xE9\x80\xA3";
+ break;
+ case 0x9B :
+ return "\xE9\x8D\x8A";
+ break;
+ case 0x9C :
+ return "\xE5\x88\x97";
+ break;
+ case 0x9D :
+ return "\xE5\x8A\xA3";
+ break;
+ case 0x9E :
+ return "\xE5\x92\xBD";
+ break;
+ case 0x9F :
+ return "\xE7\x83\x88";
+ break;
+ case 0xA0 :
+ return "\xE8\xA3\x82";
+ break;
+ case 0xA1 :
+ return "\xE8\xAA\xAA";
+ break;
+ case 0xA2 :
+ return "\xE5\xBB\x89";
+ break;
+ case 0xA3 :
+ return "\xE5\xBF\xB5";
+ break;
+ case 0xA4 :
+ return "\xE6\x8D\xBB";
+ break;
+ case 0xA5 :
+ return "\xE6\xAE\xAE";
+ break;
+ case 0xA6 :
+ return "\xE7\xB0\xBE";
+ break;
+ case 0xA7 :
+ return "\xE7\x8D\xB5";
+ break;
+ case 0xA8 :
+ return "\xE4\xBB\xA4";
+ break;
+ case 0xA9 :
+ return "\xE5\x9B\xB9";
+ break;
+ case 0xAA :
+ return "\xE5\xAF\xA7";
+ break;
+ case 0xAB :
+ return "\xE5\xB6\xBA";
+ break;
+ case 0xAC :
+ return "\xE6\x80\x9C";
+ break;
+ case 0xAD :
+ return "\xE7\x8E\xB2";
+ break;
+ case 0xAE :
+ return "\xE7\x91\xA9";
+ break;
+ case 0xAF :
+ return "\xE7\xBE\x9A";
+ break;
+ case 0xB0 :
+ return "\xE8\x81\x86";
+ break;
+ case 0xB1 :
+ return "\xE9\x88\xB4";
+ break;
+ case 0xB2 :
+ return "\xE9\x9B\xB6";
+ break;
+ case 0xB3 :
+ return "\xE9\x9D\x88";
+ break;
+ case 0xB4 :
+ return "\xE9\xA0\x98";
+ break;
+ case 0xB5 :
+ return "\xE4\xBE\x8B";
+ break;
+ case 0xB6 :
+ return "\xE7\xA6\xAE";
+ break;
+ case 0xB7 :
+ return "\xE9\x86\xB4";
+ break;
+ case 0xB8 :
+ return "\xE9\x9A\xB8";
+ break;
+ case 0xB9 :
+ return "\xE6\x83\xA1";
+ break;
+ case 0xBA :
+ return "\xE4\xBA\x86";
+ break;
+ case 0xBB :
+ return "\xE5\x83\x9A";
+ break;
+ case 0xBC :
+ return "\xE5\xAF\xAE";
+ break;
+ case 0xBD :
+ return "\xE5\xB0\xBF";
+ break;
+ case 0xBE :
+ return "\xE6\x96\x99";
+ break;
+ case 0xBF :
+ return "\xE6\xA8\x82";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE7\x87\x8E";
+ break;
+ case 0x81 :
+ return "\xE7\x99\x82";
+ break;
+ case 0x82 :
+ return "\xE8\x93\xBC";
+ break;
+ case 0x83 :
+ return "\xE9\x81\xBC";
+ break;
+ case 0x84 :
+ return "\xE9\xBE\x8D";
+ break;
+ case 0x85 :
+ return "\xE6\x9A\x88";
+ break;
+ case 0x86 :
+ return "\xE9\x98\xAE";
+ break;
+ case 0x87 :
+ return "\xE5\x8A\x89";
+ break;
+ case 0x88 :
+ return "\xE6\x9D\xBB";
+ break;
+ case 0x89 :
+ return "\xE6\x9F\xB3";
+ break;
+ case 0x8A :
+ return "\xE6\xB5\x81";
+ break;
+ case 0x8B :
+ return "\xE6\xBA\x9C";
+ break;
+ case 0x8C :
+ return "\xE7\x90\x89";
+ break;
+ case 0x8D :
+ return "\xE7\x95\x99";
+ break;
+ case 0x8E :
+ return "\xE7\xA1\xAB";
+ break;
+ case 0x8F :
+ return "\xE7\xB4\x90";
+ break;
+ case 0x90 :
+ return "\xE9\xA1\x9E";
+ break;
+ case 0x91 :
+ return "\xE5\x85\xAD";
+ break;
+ case 0x92 :
+ return "\xE6\x88\xAE";
+ break;
+ case 0x93 :
+ return "\xE9\x99\xB8";
+ break;
+ case 0x94 :
+ return "\xE5\x80\xAB";
+ break;
+ case 0x95 :
+ return "\xE5\xB4\x99";
+ break;
+ case 0x96 :
+ return "\xE6\xB7\xAA";
+ break;
+ case 0x97 :
+ return "\xE8\xBC\xAA";
+ break;
+ case 0x98 :
+ return "\xE5\xBE\x8B";
+ break;
+ case 0x99 :
+ return "\xE6\x85\x84";
+ break;
+ case 0x9A :
+ return "\xE6\xA0\x97";
+ break;
+ case 0x9B :
+ return "\xE7\x8E\x87";
+ break;
+ case 0x9C :
+ return "\xE9\x9A\x86";
+ break;
+ case 0x9D :
+ return "\xE5\x88\xA9";
+ break;
+ case 0x9E :
+ return "\xE5\x90\x8F";
+ break;
+ case 0x9F :
+ return "\xE5\xB1\xA5";
+ break;
+ case 0xA0 :
+ return "\xE6\x98\x93";
+ break;
+ case 0xA1 :
+ return "\xE6\x9D\x8E";
+ break;
+ case 0xA2 :
+ return "\xE6\xA2\xA8";
+ break;
+ case 0xA3 :
+ return "\xE6\xB3\xA5";
+ break;
+ case 0xA4 :
+ return "\xE7\x90\x86";
+ break;
+ case 0xA5 :
+ return "\xE7\x97\xA2";
+ break;
+ case 0xA6 :
+ return "\xE7\xBD\xB9";
+ break;
+ case 0xA7 :
+ return "\xE8\xA3\x8F";
+ break;
+ case 0xA8 :
+ return "\xE8\xA3\xA1";
+ break;
+ case 0xA9 :
+ return "\xE9\x87\x8C";
+ break;
+ case 0xAA :
+ return "\xE9\x9B\xA2";
+ break;
+ case 0xAB :
+ return "\xE5\x8C\xBF";
+ break;
+ case 0xAC :
+ return "\xE6\xBA\xBA";
+ break;
+ case 0xAD :
+ return "\xE5\x90\x9D";
+ break;
+ case 0xAE :
+ return "\xE7\x87\x90";
+ break;
+ case 0xAF :
+ return "\xE7\x92\x98";
+ break;
+ case 0xB0 :
+ return "\xE8\x97\xBA";
+ break;
+ case 0xB1 :
+ return "\xE9\x9A\xA3";
+ break;
+ case 0xB2 :
+ return "\xE9\xB1\x97";
+ break;
+ case 0xB3 :
+ return "\xE9\xBA\x9F";
+ break;
+ case 0xB4 :
+ return "\xE6\x9E\x97";
+ break;
+ case 0xB5 :
+ return "\xE6\xB7\x8B";
+ break;
+ case 0xB6 :
+ return "\xE8\x87\xA8";
+ break;
+ case 0xB7 :
+ return "\xE7\xAB\x8B";
+ break;
+ case 0xB8 :
+ return "\xE7\xAC\xA0";
+ break;
+ case 0xB9 :
+ return "\xE7\xB2\x92";
+ break;
+ case 0xBA :
+ return "\xE7\x8B\x80";
+ break;
+ case 0xBB :
+ return "\xE7\x82\x99";
+ break;
+ case 0xBC :
+ return "\xE8\xAD\x98";
+ break;
+ case 0xBD :
+ return "\xE4\xBB\x80";
+ break;
+ case 0xBE :
+ return "\xE8\x8C\xB6";
+ break;
+ case 0xBF :
+ return "\xE5\x88\xBA";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE5\x88\x87";
+ break;
+ case 0x81 :
+ return "\xE5\xBA\xA6";
+ break;
+ case 0x82 :
+ return "\xE6\x8B\x93";
+ break;
+ case 0x83 :
+ return "\xE7\xB3\x96";
+ break;
+ case 0x84 :
+ return "\xE5\xAE\x85";
+ break;
+ case 0x85 :
+ return "\xE6\xB4\x9E";
+ break;
+ case 0x86 :
+ return "\xE6\x9A\xB4";
+ break;
+ case 0x87 :
+ return "\xE8\xBC\xBB";
+ break;
+ case 0x88 :
+ return "\xE8\xA1\x8C";
+ break;
+ case 0x89 :
+ return "\xE9\x99\x8D";
+ break;
+ case 0x8A :
+ return "\xE8\xA6\x8B";
+ break;
+ case 0x8B :
+ return "\xE5\xBB\x93";
+ break;
+ case 0x8C :
+ return "\xE5\x85\x80";
+ break;
+ case 0x8D :
+ return "\xE5\x97\x80";
+ break;
+ case 0x90 :
+ return "\xE5\xA1\x9A";
+ break;
+ case 0x92 :
+ return "\xE6\x99\xB4";
+ break;
+ case 0x95 :
+ return "\xE5\x87\x9E";
+ break;
+ case 0x96 :
+ return "\xE7\x8C\xAA";
+ break;
+ case 0x97 :
+ return "\xE7\x9B\x8A";
+ break;
+ case 0x98 :
+ return "\xE7\xA4\xBC";
+ break;
+ case 0x99 :
+ return "\xE7\xA5\x9E";
+ break;
+ case 0x9A :
+ return "\xE7\xA5\xA5";
+ break;
+ case 0x9B :
+ return "\xE7\xA6\x8F";
+ break;
+ case 0x9C :
+ return "\xE9\x9D\x96";
+ break;
+ case 0x9D :
+ return "\xE7\xB2\xBE";
+ break;
+ case 0x9E :
+ return "\xE7\xBE\xBD";
+ break;
+ case 0xA0 :
+ return "\xE8\x98\x92";
+ break;
+ case 0xA2 :
+ return "\xE8\xAB\xB8";
+ break;
+ case 0xA5 :
+ return "\xE9\x80\xB8";
+ break;
+ case 0xA6 :
+ return "\xE9\x83\xBD";
+ break;
+ case 0xAA :
+ return "\xE9\xA3\xAF";
+ break;
+ case 0xAB :
+ return "\xE9\xA3\xBC";
+ break;
+ case 0xAC :
+ return "\xE9\xA4\xA8";
+ break;
+ case 0xAD :
+ return "\xE9\xB6\xB4";
+ break;
+ case 0xB0 :
+ return "\xE4\xBE\xAE";
+ break;
+ case 0xB1 :
+ return "\xE5\x83\xA7";
+ break;
+ case 0xB2 :
+ return "\xE5\x85\x8D";
+ break;
+ case 0xB3 :
+ return "\xE5\x8B\x89";
+ break;
+ case 0xB4 :
+ return "\xE5\x8B\xA4";
+ break;
+ case 0xB5 :
+ return "\xE5\x8D\x91";
+ break;
+ case 0xB6 :
+ return "\xE5\x96\x9D";
+ break;
+ case 0xB7 :
+ return "\xE5\x98\x86";
+ break;
+ case 0xB8 :
+ return "\xE5\x99\xA8";
+ break;
+ case 0xB9 :
+ return "\xE5\xA1\x80";
+ break;
+ case 0xBA :
+ return "\xE5\xA2\xA8";
+ break;
+ case 0xBB :
+ return "\xE5\xB1\xA4";
+ break;
+ case 0xBC :
+ return "\xE5\xB1\xAE";
+ break;
+ case 0xBD :
+ return "\xE6\x82\x94";
+ break;
+ case 0xBE :
+ return "\xE6\x85\xA8";
+ break;
+ case 0xBF :
+ return "\xE6\x86\x8E";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE6\x87\xB2";
+ break;
+ case 0x81 :
+ return "\xE6\x95\x8F";
+ break;
+ case 0x82 :
+ return "\xE6\x97\xA2";
+ break;
+ case 0x83 :
+ return "\xE6\x9A\x91";
+ break;
+ case 0x84 :
+ return "\xE6\xA2\x85";
+ break;
+ case 0x85 :
+ return "\xE6\xB5\xB7";
+ break;
+ case 0x86 :
+ return "\xE6\xB8\x9A";
+ break;
+ case 0x87 :
+ return "\xE6\xBC\xA2";
+ break;
+ case 0x88 :
+ return "\xE7\x85\xAE";
+ break;
+ case 0x89 :
+ return "\xE7\x88\xAB";
+ break;
+ case 0x8A :
+ return "\xE7\x90\xA2";
+ break;
+ case 0x8B :
+ return "\xE7\xA2\x91";
+ break;
+ case 0x8C :
+ return "\xE7\xA4\xBE";
+ break;
+ case 0x8D :
+ return "\xE7\xA5\x89";
+ break;
+ case 0x8E :
+ return "\xE7\xA5\x88";
+ break;
+ case 0x8F :
+ return "\xE7\xA5\x90";
+ break;
+ case 0x90 :
+ return "\xE7\xA5\x96";
+ break;
+ case 0x91 :
+ return "\xE7\xA5\x9D";
+ break;
+ case 0x92 :
+ return "\xE7\xA6\x8D";
+ break;
+ case 0x93 :
+ return "\xE7\xA6\x8E";
+ break;
+ case 0x94 :
+ return "\xE7\xA9\x80";
+ break;
+ case 0x95 :
+ return "\xE7\xAA\x81";
+ break;
+ case 0x96 :
+ return "\xE7\xAF\x80";
+ break;
+ case 0x97 :
+ return "\xE7\xB7\xB4";
+ break;
+ case 0x98 :
+ return "\xE7\xB8\x89";
+ break;
+ case 0x99 :
+ return "\xE7\xB9\x81";
+ break;
+ case 0x9A :
+ return "\xE7\xBD\xB2";
+ break;
+ case 0x9B :
+ return "\xE8\x80\x85";
+ break;
+ case 0x9C :
+ return "\xE8\x87\xAD";
+ break;
+ case 0x9D :
+ return "\xE8\x89\xB9";
+ break;
+ case 0x9E :
+ return "\xE8\x89\xB9";
+ break;
+ case 0x9F :
+ return "\xE8\x91\x97";
+ break;
+ case 0xA0 :
+ return "\xE8\xA4\x90";
+ break;
+ case 0xA1 :
+ return "\xE8\xA6\x96";
+ break;
+ case 0xA2 :
+ return "\xE8\xAC\x81";
+ break;
+ case 0xA3 :
+ return "\xE8\xAC\xB9";
+ break;
+ case 0xA4 :
+ return "\xE8\xB3\x93";
+ break;
+ case 0xA5 :
+ return "\xE8\xB4\x88";
+ break;
+ case 0xA6 :
+ return "\xE8\xBE\xB6";
+ break;
+ case 0xA7 :
+ return "\xE9\x80\xB8";
+ break;
+ case 0xA8 :
+ return "\xE9\x9B\xA3";
+ break;
+ case 0xA9 :
+ return "\xE9\x9F\xBF";
+ break;
+ case 0xAA :
+ return "\xE9\xA0\xBB";
+ break;
+ case 0xB0 :
+ return "\xE4\xB8\xA6";
+ break;
+ case 0xB1 :
+ return "\xE5\x86\xB5";
+ break;
+ case 0xB2 :
+ return "\xE5\x85\xA8";
+ break;
+ case 0xB3 :
+ return "\xE4\xBE\x80";
+ break;
+ case 0xB4 :
+ return "\xE5\x85\x85";
+ break;
+ case 0xB5 :
+ return "\xE5\x86\x80";
+ break;
+ case 0xB6 :
+ return "\xE5\x8B\x87";
+ break;
+ case 0xB7 :
+ return "\xE5\x8B\xBA";
+ break;
+ case 0xB8 :
+ return "\xE5\x96\x9D";
+ break;
+ case 0xB9 :
+ return "\xE5\x95\x95";
+ break;
+ case 0xBA :
+ return "\xE5\x96\x99";
+ break;
+ case 0xBB :
+ return "\xE5\x97\xA2";
+ break;
+ case 0xBC :
+ return "\xE5\xA1\x9A";
+ break;
+ case 0xBD :
+ return "\xE5\xA2\xB3";
+ break;
+ case 0xBE :
+ return "\xE5\xA5\x84";
+ break;
+ case 0xBF :
+ return "\xE5\xA5\x94";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE5\xA9\xA2";
+ break;
+ case 0x81 :
+ return "\xE5\xAC\xA8";
+ break;
+ case 0x82 :
+ return "\xE5\xBB\x92";
+ break;
+ case 0x83 :
+ return "\xE5\xBB\x99";
+ break;
+ case 0x84 :
+ return "\xE5\xBD\xA9";
+ break;
+ case 0x85 :
+ return "\xE5\xBE\xAD";
+ break;
+ case 0x86 :
+ return "\xE6\x83\x98";
+ break;
+ case 0x87 :
+ return "\xE6\x85\x8E";
+ break;
+ case 0x88 :
+ return "\xE6\x84\x88";
+ break;
+ case 0x89 :
+ return "\xE6\x86\x8E";
+ break;
+ case 0x8A :
+ return "\xE6\x85\xA0";
+ break;
+ case 0x8B :
+ return "\xE6\x87\xB2";
+ break;
+ case 0x8C :
+ return "\xE6\x88\xB4";
+ break;
+ case 0x8D :
+ return "\xE6\x8F\x84";
+ break;
+ case 0x8E :
+ return "\xE6\x90\x9C";
+ break;
+ case 0x8F :
+ return "\xE6\x91\x92";
+ break;
+ case 0x90 :
+ return "\xE6\x95\x96";
+ break;
+ case 0x91 :
+ return "\xE6\x99\xB4";
+ break;
+ case 0x92 :
+ return "\xE6\x9C\x97";
+ break;
+ case 0x93 :
+ return "\xE6\x9C\x9B";
+ break;
+ case 0x94 :
+ return "\xE6\x9D\x96";
+ break;
+ case 0x95 :
+ return "\xE6\xAD\xB9";
+ break;
+ case 0x96 :
+ return "\xE6\xAE\xBA";
+ break;
+ case 0x97 :
+ return "\xE6\xB5\x81";
+ break;
+ case 0x98 :
+ return "\xE6\xBB\x9B";
+ break;
+ case 0x99 :
+ return "\xE6\xBB\x8B";
+ break;
+ case 0x9A :
+ return "\xE6\xBC\xA2";
+ break;
+ case 0x9B :
+ return "\xE7\x80\x9E";
+ break;
+ case 0x9C :
+ return "\xE7\x85\xAE";
+ break;
+ case 0x9D :
+ return "\xE7\x9E\xA7";
+ break;
+ case 0x9E :
+ return "\xE7\x88\xB5";
+ break;
+ case 0x9F :
+ return "\xE7\x8A\xAF";
+ break;
+ case 0xA0 :
+ return "\xE7\x8C\xAA";
+ break;
+ case 0xA1 :
+ return "\xE7\x91\xB1";
+ break;
+ case 0xA2 :
+ return "\xE7\x94\x86";
+ break;
+ case 0xA3 :
+ return "\xE7\x94\xBB";
+ break;
+ case 0xA4 :
+ return "\xE7\x98\x9D";
+ break;
+ case 0xA5 :
+ return "\xE7\x98\x9F";
+ break;
+ case 0xA6 :
+ return "\xE7\x9B\x8A";
+ break;
+ case 0xA7 :
+ return "\xE7\x9B\x9B";
+ break;
+ case 0xA8 :
+ return "\xE7\x9B\xB4";
+ break;
+ case 0xA9 :
+ return "\xE7\x9D\x8A";
+ break;
+ case 0xAA :
+ return "\xE7\x9D\x80";
+ break;
+ case 0xAB :
+ return "\xE7\xA3\x8C";
+ break;
+ case 0xAC :
+ return "\xE7\xAA\xB1";
+ break;
+ case 0xAD :
+ return "\xE7\xAF\x80";
+ break;
+ case 0xAE :
+ return "\xE7\xB1\xBB";
+ break;
+ case 0xAF :
+ return "\xE7\xB5\x9B";
+ break;
+ case 0xB0 :
+ return "\xE7\xB7\xB4";
+ break;
+ case 0xB1 :
+ return "\xE7\xBC\xBE";
+ break;
+ case 0xB2 :
+ return "\xE8\x80\x85";
+ break;
+ case 0xB3 :
+ return "\xE8\x8D\x92";
+ break;
+ case 0xB4 :
+ return "\xE8\x8F\xAF";
+ break;
+ case 0xB5 :
+ return "\xE8\x9D\xB9";
+ break;
+ case 0xB6 :
+ return "\xE8\xA5\x81";
+ break;
+ case 0xB7 :
+ return "\xE8\xA6\x86";
+ break;
+ case 0xB8 :
+ return "\xE8\xA6\x96";
+ break;
+ case 0xB9 :
+ return "\xE8\xAA\xBF";
+ break;
+ case 0xBA :
+ return "\xE8\xAB\xB8";
+ break;
+ case 0xBB :
+ return "\xE8\xAB\x8B";
+ break;
+ case 0xBC :
+ return "\xE8\xAC\x81";
+ break;
+ case 0xBD :
+ return "\xE8\xAB\xBE";
+ break;
+ case 0xBE :
+ return "\xE8\xAB\xAD";
+ break;
+ case 0xBF :
+ return "\xE8\xAC\xB9";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE8\xAE\x8A";
+ break;
+ case 0x81 :
+ return "\xE8\xB4\x88";
+ break;
+ case 0x82 :
+ return "\xE8\xBC\xB8";
+ break;
+ case 0x83 :
+ return "\xE9\x81\xB2";
+ break;
+ case 0x84 :
+ return "\xE9\x86\x99";
+ break;
+ case 0x85 :
+ return "\xE9\x89\xB6";
+ break;
+ case 0x86 :
+ return "\xE9\x99\xBC";
+ break;
+ case 0x87 :
+ return "\xE9\x9B\xA3";
+ break;
+ case 0x88 :
+ return "\xE9\x9D\x96";
+ break;
+ case 0x89 :
+ return "\xE9\x9F\x9B";
+ break;
+ case 0x8A :
+ return "\xE9\x9F\xBF";
+ break;
+ case 0x8B :
+ return "\xE9\xA0\x8B";
+ break;
+ case 0x8C :
+ return "\xE9\xA0\xBB";
+ break;
+ case 0x8D :
+ return "\xE9\xAC\x92";
+ break;
+ case 0x8E :
+ return "\xE9\xBE\x9C";
+ break;
+ case 0x8F :
+ return "\xF0\xA2\xA1\x8A";
+ break;
+ case 0x90 :
+ return "\xF0\xA2\xA1\x84";
+ break;
+ case 0x91 :
+ return "\xF0\xA3\x8F\x95";
+ break;
+ case 0x92 :
+ return "\xE3\xAE\x9D";
+ break;
+ case 0x93 :
+ return "\xE4\x80\x98";
+ break;
+ case 0x94 :
+ return "\xE4\x80\xB9";
+ break;
+ case 0x95 :
+ return "\xF0\xA5\x89\x89";
+ break;
+ case 0x96 :
+ return "\xF0\xA5\xB3\x90";
+ break;
+ case 0x97 :
+ return "\xF0\xA7\xBB\x93";
+ break;
+ case 0x98 :
+ return "\xE9\xBD\x83";
+ break;
+ case 0x99 :
+ return "\xE9\xBE\x8E";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x66\x66";
+ break;
+ case 0x81 :
+ return "\x66\x69";
+ break;
+ case 0x82 :
+ return "\x66\x6C";
+ break;
+ case 0x83 :
+ return "\x66\x66\x69";
+ break;
+ case 0x84 :
+ return "\x66\x66\x6C";
+ break;
+ case 0x85 :
+ return "\x73\x74";
+ break;
+ case 0x86 :
+ return "\x73\x74";
+ break;
+ case 0x93 :
+ return "\xD5\xB4\xD5\xB6";
+ break;
+ case 0x94 :
+ return "\xD5\xB4\xD5\xA5";
+ break;
+ case 0x95 :
+ return "\xD5\xB4\xD5\xAB";
+ break;
+ case 0x96 :
+ return "\xD5\xBE\xD5\xB6";
+ break;
+ case 0x97 :
+ return "\xD5\xB4\xD5\xAD";
+ break;
+ case 0x9D :
+ return "\xD7\x99\xD6\xB4";
+ break;
+ case 0x9F :
+ return "\xD7\xB2\xD6\xB7";
+ break;
+ case 0xA0 :
+ return "\xD7\xA2";
+ break;
+ case 0xA1 :
+ return "\xD7\x90";
+ break;
+ case 0xA2 :
+ return "\xD7\x93";
+ break;
+ case 0xA3 :
+ return "\xD7\x94";
+ break;
+ case 0xA4 :
+ return "\xD7\x9B";
+ break;
+ case 0xA5 :
+ return "\xD7\x9C";
+ break;
+ case 0xA6 :
+ return "\xD7\x9D";
+ break;
+ case 0xA7 :
+ return "\xD7\xA8";
+ break;
+ case 0xA8 :
+ return "\xD7\xAA";
+ break;
+ case 0xA9 :
+ return "\x2B";
+ break;
+ case 0xAA :
+ return "\xD7\xA9\xD7\x81";
+ break;
+ case 0xAB :
+ return "\xD7\xA9\xD7\x82";
+ break;
+ case 0xAC :
+ return "\xD7\xA9\xD6\xBC\xD7\x81";
+ break;
+ case 0xAD :
+ return "\xD7\xA9\xD6\xBC\xD7\x82";
+ break;
+ case 0xAE :
+ return "\xD7\x90\xD6\xB7";
+ break;
+ case 0xAF :
+ return "\xD7\x90\xD6\xB8";
+ break;
+ case 0xB0 :
+ return "\xD7\x90\xD6\xBC";
+ break;
+ case 0xB1 :
+ return "\xD7\x91\xD6\xBC";
+ break;
+ case 0xB2 :
+ return "\xD7\x92\xD6\xBC";
+ break;
+ case 0xB3 :
+ return "\xD7\x93\xD6\xBC";
+ break;
+ case 0xB4 :
+ return "\xD7\x94\xD6\xBC";
+ break;
+ case 0xB5 :
+ return "\xD7\x95\xD6\xBC";
+ break;
+ case 0xB6 :
+ return "\xD7\x96\xD6\xBC";
+ break;
+ case 0xB8 :
+ return "\xD7\x98\xD6\xBC";
+ break;
+ case 0xB9 :
+ return "\xD7\x99\xD6\xBC";
+ break;
+ case 0xBA :
+ return "\xD7\x9A\xD6\xBC";
+ break;
+ case 0xBB :
+ return "\xD7\x9B\xD6\xBC";
+ break;
+ case 0xBC :
+ return "\xD7\x9C\xD6\xBC";
+ break;
+ case 0xBE :
+ return "\xD7\x9E\xD6\xBC";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD7\xA0\xD6\xBC";
+ break;
+ case 0x81 :
+ return "\xD7\xA1\xD6\xBC";
+ break;
+ case 0x83 :
+ return "\xD7\xA3\xD6\xBC";
+ break;
+ case 0x84 :
+ return "\xD7\xA4\xD6\xBC";
+ break;
+ case 0x86 :
+ return "\xD7\xA6\xD6\xBC";
+ break;
+ case 0x87 :
+ return "\xD7\xA7\xD6\xBC";
+ break;
+ case 0x88 :
+ return "\xD7\xA8\xD6\xBC";
+ break;
+ case 0x89 :
+ return "\xD7\xA9\xD6\xBC";
+ break;
+ case 0x8A :
+ return "\xD7\xAA\xD6\xBC";
+ break;
+ case 0x8B :
+ return "\xD7\x95\xD6\xB9";
+ break;
+ case 0x8C :
+ return "\xD7\x91\xD6\xBF";
+ break;
+ case 0x8D :
+ return "\xD7\x9B\xD6\xBF";
+ break;
+ case 0x8E :
+ return "\xD7\xA4\xD6\xBF";
+ break;
+ case 0x8F :
+ return "\xD7\x90\xD7\x9C";
+ break;
+ case 0x90 :
+ return "\xD9\xB1";
+ break;
+ case 0x91 :
+ return "\xD9\xB1";
+ break;
+ case 0x92 :
+ return "\xD9\xBB";
+ break;
+ case 0x93 :
+ return "\xD9\xBB";
+ break;
+ case 0x94 :
+ return "\xD9\xBB";
+ break;
+ case 0x95 :
+ return "\xD9\xBB";
+ break;
+ case 0x96 :
+ return "\xD9\xBE";
+ break;
+ case 0x97 :
+ return "\xD9\xBE";
+ break;
+ case 0x98 :
+ return "\xD9\xBE";
+ break;
+ case 0x99 :
+ return "\xD9\xBE";
+ break;
+ case 0x9A :
+ return "\xDA\x80";
+ break;
+ case 0x9B :
+ return "\xDA\x80";
+ break;
+ case 0x9C :
+ return "\xDA\x80";
+ break;
+ case 0x9D :
+ return "\xDA\x80";
+ break;
+ case 0x9E :
+ return "\xD9\xBA";
+ break;
+ case 0x9F :
+ return "\xD9\xBA";
+ break;
+ case 0xA0 :
+ return "\xD9\xBA";
+ break;
+ case 0xA1 :
+ return "\xD9\xBA";
+ break;
+ case 0xA2 :
+ return "\xD9\xBF";
+ break;
+ case 0xA3 :
+ return "\xD9\xBF";
+ break;
+ case 0xA4 :
+ return "\xD9\xBF";
+ break;
+ case 0xA5 :
+ return "\xD9\xBF";
+ break;
+ case 0xA6 :
+ return "\xD9\xB9";
+ break;
+ case 0xA7 :
+ return "\xD9\xB9";
+ break;
+ case 0xA8 :
+ return "\xD9\xB9";
+ break;
+ case 0xA9 :
+ return "\xD9\xB9";
+ break;
+ case 0xAA :
+ return "\xDA\xA4";
+ break;
+ case 0xAB :
+ return "\xDA\xA4";
+ break;
+ case 0xAC :
+ return "\xDA\xA4";
+ break;
+ case 0xAD :
+ return "\xDA\xA4";
+ break;
+ case 0xAE :
+ return "\xDA\xA6";
+ break;
+ case 0xAF :
+ return "\xDA\xA6";
+ break;
+ case 0xB0 :
+ return "\xDA\xA6";
+ break;
+ case 0xB1 :
+ return "\xDA\xA6";
+ break;
+ case 0xB2 :
+ return "\xDA\x84";
+ break;
+ case 0xB3 :
+ return "\xDA\x84";
+ break;
+ case 0xB4 :
+ return "\xDA\x84";
+ break;
+ case 0xB5 :
+ return "\xDA\x84";
+ break;
+ case 0xB6 :
+ return "\xDA\x83";
+ break;
+ case 0xB7 :
+ return "\xDA\x83";
+ break;
+ case 0xB8 :
+ return "\xDA\x83";
+ break;
+ case 0xB9 :
+ return "\xDA\x83";
+ break;
+ case 0xBA :
+ return "\xDA\x86";
+ break;
+ case 0xBB :
+ return "\xDA\x86";
+ break;
+ case 0xBC :
+ return "\xDA\x86";
+ break;
+ case 0xBD :
+ return "\xDA\x86";
+ break;
+ case 0xBE :
+ return "\xDA\x87";
+ break;
+ case 0xBF :
+ return "\xDA\x87";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xDA\x87";
+ break;
+ case 0x81 :
+ return "\xDA\x87";
+ break;
+ case 0x82 :
+ return "\xDA\x8D";
+ break;
+ case 0x83 :
+ return "\xDA\x8D";
+ break;
+ case 0x84 :
+ return "\xDA\x8C";
+ break;
+ case 0x85 :
+ return "\xDA\x8C";
+ break;
+ case 0x86 :
+ return "\xDA\x8E";
+ break;
+ case 0x87 :
+ return "\xDA\x8E";
+ break;
+ case 0x88 :
+ return "\xDA\x88";
+ break;
+ case 0x89 :
+ return "\xDA\x88";
+ break;
+ case 0x8A :
+ return "\xDA\x98";
+ break;
+ case 0x8B :
+ return "\xDA\x98";
+ break;
+ case 0x8C :
+ return "\xDA\x91";
+ break;
+ case 0x8D :
+ return "\xDA\x91";
+ break;
+ case 0x8E :
+ return "\xDA\xA9";
+ break;
+ case 0x8F :
+ return "\xDA\xA9";
+ break;
+ case 0x90 :
+ return "\xDA\xA9";
+ break;
+ case 0x91 :
+ return "\xDA\xA9";
+ break;
+ case 0x92 :
+ return "\xDA\xAF";
+ break;
+ case 0x93 :
+ return "\xDA\xAF";
+ break;
+ case 0x94 :
+ return "\xDA\xAF";
+ break;
+ case 0x95 :
+ return "\xDA\xAF";
+ break;
+ case 0x96 :
+ return "\xDA\xB3";
+ break;
+ case 0x97 :
+ return "\xDA\xB3";
+ break;
+ case 0x98 :
+ return "\xDA\xB3";
+ break;
+ case 0x99 :
+ return "\xDA\xB3";
+ break;
+ case 0x9A :
+ return "\xDA\xB1";
+ break;
+ case 0x9B :
+ return "\xDA\xB1";
+ break;
+ case 0x9C :
+ return "\xDA\xB1";
+ break;
+ case 0x9D :
+ return "\xDA\xB1";
+ break;
+ case 0x9E :
+ return "\xDA\xBA";
+ break;
+ case 0x9F :
+ return "\xDA\xBA";
+ break;
+ case 0xA0 :
+ return "\xDA\xBB";
+ break;
+ case 0xA1 :
+ return "\xDA\xBB";
+ break;
+ case 0xA2 :
+ return "\xDA\xBB";
+ break;
+ case 0xA3 :
+ return "\xDA\xBB";
+ break;
+ case 0xA4 :
+ return "\xDB\x80";
+ break;
+ case 0xA5 :
+ return "\xDB\x80";
+ break;
+ case 0xA6 :
+ return "\xDB\x81";
+ break;
+ case 0xA7 :
+ return "\xDB\x81";
+ break;
+ case 0xA8 :
+ return "\xDB\x81";
+ break;
+ case 0xA9 :
+ return "\xDB\x81";
+ break;
+ case 0xAA :
+ return "\xDA\xBE";
+ break;
+ case 0xAB :
+ return "\xDA\xBE";
+ break;
+ case 0xAC :
+ return "\xDA\xBE";
+ break;
+ case 0xAD :
+ return "\xDA\xBE";
+ break;
+ case 0xAE :
+ return "\xDB\x92";
+ break;
+ case 0xAF :
+ return "\xDB\x92";
+ break;
+ case 0xB0 :
+ return "\xDB\x93";
+ break;
+ case 0xB1 :
+ return "\xDB\x93";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (str[2]) {
+ case 0x93 :
+ return "\xDA\xAD";
+ break;
+ case 0x94 :
+ return "\xDA\xAD";
+ break;
+ case 0x95 :
+ return "\xDA\xAD";
+ break;
+ case 0x96 :
+ return "\xDA\xAD";
+ break;
+ case 0x97 :
+ return "\xDB\x87";
+ break;
+ case 0x98 :
+ return "\xDB\x87";
+ break;
+ case 0x99 :
+ return "\xDB\x86";
+ break;
+ case 0x9A :
+ return "\xDB\x86";
+ break;
+ case 0x9B :
+ return "\xDB\x88";
+ break;
+ case 0x9C :
+ return "\xDB\x88";
+ break;
+ case 0x9D :
+ return "\xDB\x87\xD9\xB4";
+ break;
+ case 0x9E :
+ return "\xDB\x8B";
+ break;
+ case 0x9F :
+ return "\xDB\x8B";
+ break;
+ case 0xA0 :
+ return "\xDB\x85";
+ break;
+ case 0xA1 :
+ return "\xDB\x85";
+ break;
+ case 0xA2 :
+ return "\xDB\x89";
+ break;
+ case 0xA3 :
+ return "\xDB\x89";
+ break;
+ case 0xA4 :
+ return "\xDB\x90";
+ break;
+ case 0xA5 :
+ return "\xDB\x90";
+ break;
+ case 0xA6 :
+ return "\xDB\x90";
+ break;
+ case 0xA7 :
+ return "\xDB\x90";
+ break;
+ case 0xA8 :
+ return "\xD9\x89";
+ break;
+ case 0xA9 :
+ return "\xD9\x89";
+ break;
+ case 0xAA :
+ return "\xD8\xA6\xD8\xA7";
+ break;
+ case 0xAB :
+ return "\xD8\xA6\xD8\xA7";
+ break;
+ case 0xAC :
+ return "\xD8\xA6\xDB\x95";
+ break;
+ case 0xAD :
+ return "\xD8\xA6\xDB\x95";
+ break;
+ case 0xAE :
+ return "\xD8\xA6\xD9\x88";
+ break;
+ case 0xAF :
+ return "\xD8\xA6\xD9\x88";
+ break;
+ case 0xB0 :
+ return "\xD8\xA6\xDB\x87";
+ break;
+ case 0xB1 :
+ return "\xD8\xA6\xDB\x87";
+ break;
+ case 0xB2 :
+ return "\xD8\xA6\xDB\x86";
+ break;
+ case 0xB3 :
+ return "\xD8\xA6\xDB\x86";
+ break;
+ case 0xB4 :
+ return "\xD8\xA6\xDB\x88";
+ break;
+ case 0xB5 :
+ return "\xD8\xA6\xDB\x88";
+ break;
+ case 0xB6 :
+ return "\xD8\xA6\xDB\x90";
+ break;
+ case 0xB7 :
+ return "\xD8\xA6\xDB\x90";
+ break;
+ case 0xB8 :
+ return "\xD8\xA6\xDB\x90";
+ break;
+ case 0xB9 :
+ return "\xD8\xA6\xD9\x89";
+ break;
+ case 0xBA :
+ return "\xD8\xA6\xD9\x89";
+ break;
+ case 0xBB :
+ return "\xD8\xA6\xD9\x89";
+ break;
+ case 0xBC :
+ return "\xDB\x8C";
+ break;
+ case 0xBD :
+ return "\xDB\x8C";
+ break;
+ case 0xBE :
+ return "\xDB\x8C";
+ break;
+ case 0xBF :
+ return "\xDB\x8C";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD8\xA6\xD8\xAC";
+ break;
+ case 0x81 :
+ return "\xD8\xA6\xD8\xAD";
+ break;
+ case 0x82 :
+ return "\xD8\xA6\xD9\x85";
+ break;
+ case 0x83 :
+ return "\xD8\xA6\xD9\x89";
+ break;
+ case 0x84 :
+ return "\xD8\xA6\xD9\x8A";
+ break;
+ case 0x85 :
+ return "\xD8\xA8\xD8\xAC";
+ break;
+ case 0x86 :
+ return "\xD8\xA8\xD8\xAD";
+ break;
+ case 0x87 :
+ return "\xD8\xA8\xD8\xAE";
+ break;
+ case 0x88 :
+ return "\xD8\xA8\xD9\x85";
+ break;
+ case 0x89 :
+ return "\xD8\xA8\xD9\x89";
+ break;
+ case 0x8A :
+ return "\xD8\xA8\xD9\x8A";
+ break;
+ case 0x8B :
+ return "\xD8\xAA\xD8\xAC";
+ break;
+ case 0x8C :
+ return "\xD8\xAA\xD8\xAD";
+ break;
+ case 0x8D :
+ return "\xD8\xAA\xD8\xAE";
+ break;
+ case 0x8E :
+ return "\xD8\xAA\xD9\x85";
+ break;
+ case 0x8F :
+ return "\xD8\xAA\xD9\x89";
+ break;
+ case 0x90 :
+ return "\xD8\xAA\xD9\x8A";
+ break;
+ case 0x91 :
+ return "\xD8\xAB\xD8\xAC";
+ break;
+ case 0x92 :
+ return "\xD8\xAB\xD9\x85";
+ break;
+ case 0x93 :
+ return "\xD8\xAB\xD9\x89";
+ break;
+ case 0x94 :
+ return "\xD8\xAB\xD9\x8A";
+ break;
+ case 0x95 :
+ return "\xD8\xAC\xD8\xAD";
+ break;
+ case 0x96 :
+ return "\xD8\xAC\xD9\x85";
+ break;
+ case 0x97 :
+ return "\xD8\xAD\xD8\xAC";
+ break;
+ case 0x98 :
+ return "\xD8\xAD\xD9\x85";
+ break;
+ case 0x99 :
+ return "\xD8\xAE\xD8\xAC";
+ break;
+ case 0x9A :
+ return "\xD8\xAE\xD8\xAD";
+ break;
+ case 0x9B :
+ return "\xD8\xAE\xD9\x85";
+ break;
+ case 0x9C :
+ return "\xD8\xB3\xD8\xAC";
+ break;
+ case 0x9D :
+ return "\xD8\xB3\xD8\xAD";
+ break;
+ case 0x9E :
+ return "\xD8\xB3\xD8\xAE";
+ break;
+ case 0x9F :
+ return "\xD8\xB3\xD9\x85";
+ break;
+ case 0xA0 :
+ return "\xD8\xB5\xD8\xAD";
+ break;
+ case 0xA1 :
+ return "\xD8\xB5\xD9\x85";
+ break;
+ case 0xA2 :
+ return "\xD8\xB6\xD8\xAC";
+ break;
+ case 0xA3 :
+ return "\xD8\xB6\xD8\xAD";
+ break;
+ case 0xA4 :
+ return "\xD8\xB6\xD8\xAE";
+ break;
+ case 0xA5 :
+ return "\xD8\xB6\xD9\x85";
+ break;
+ case 0xA6 :
+ return "\xD8\xB7\xD8\xAD";
+ break;
+ case 0xA7 :
+ return "\xD8\xB7\xD9\x85";
+ break;
+ case 0xA8 :
+ return "\xD8\xB8\xD9\x85";
+ break;
+ case 0xA9 :
+ return "\xD8\xB9\xD8\xAC";
+ break;
+ case 0xAA :
+ return "\xD8\xB9\xD9\x85";
+ break;
+ case 0xAB :
+ return "\xD8\xBA\xD8\xAC";
+ break;
+ case 0xAC :
+ return "\xD8\xBA\xD9\x85";
+ break;
+ case 0xAD :
+ return "\xD9\x81\xD8\xAC";
+ break;
+ case 0xAE :
+ return "\xD9\x81\xD8\xAD";
+ break;
+ case 0xAF :
+ return "\xD9\x81\xD8\xAE";
+ break;
+ case 0xB0 :
+ return "\xD9\x81\xD9\x85";
+ break;
+ case 0xB1 :
+ return "\xD9\x81\xD9\x89";
+ break;
+ case 0xB2 :
+ return "\xD9\x81\xD9\x8A";
+ break;
+ case 0xB3 :
+ return "\xD9\x82\xD8\xAD";
+ break;
+ case 0xB4 :
+ return "\xD9\x82\xD9\x85";
+ break;
+ case 0xB5 :
+ return "\xD9\x82\xD9\x89";
+ break;
+ case 0xB6 :
+ return "\xD9\x82\xD9\x8A";
+ break;
+ case 0xB7 :
+ return "\xD9\x83\xD8\xA7";
+ break;
+ case 0xB8 :
+ return "\xD9\x83\xD8\xAC";
+ break;
+ case 0xB9 :
+ return "\xD9\x83\xD8\xAD";
+ break;
+ case 0xBA :
+ return "\xD9\x83\xD8\xAE";
+ break;
+ case 0xBB :
+ return "\xD9\x83\xD9\x84";
+ break;
+ case 0xBC :
+ return "\xD9\x83\xD9\x85";
+ break;
+ case 0xBD :
+ return "\xD9\x83\xD9\x89";
+ break;
+ case 0xBE :
+ return "\xD9\x83\xD9\x8A";
+ break;
+ case 0xBF :
+ return "\xD9\x84\xD8\xAC";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD9\x84\xD8\xAD";
+ break;
+ case 0x81 :
+ return "\xD9\x84\xD8\xAE";
+ break;
+ case 0x82 :
+ return "\xD9\x84\xD9\x85";
+ break;
+ case 0x83 :
+ return "\xD9\x84\xD9\x89";
+ break;
+ case 0x84 :
+ return "\xD9\x84\xD9\x8A";
+ break;
+ case 0x85 :
+ return "\xD9\x85\xD8\xAC";
+ break;
+ case 0x86 :
+ return "\xD9\x85\xD8\xAD";
+ break;
+ case 0x87 :
+ return "\xD9\x85\xD8\xAE";
+ break;
+ case 0x88 :
+ return "\xD9\x85\xD9\x85";
+ break;
+ case 0x89 :
+ return "\xD9\x85\xD9\x89";
+ break;
+ case 0x8A :
+ return "\xD9\x85\xD9\x8A";
+ break;
+ case 0x8B :
+ return "\xD9\x86\xD8\xAC";
+ break;
+ case 0x8C :
+ return "\xD9\x86\xD8\xAD";
+ break;
+ case 0x8D :
+ return "\xD9\x86\xD8\xAE";
+ break;
+ case 0x8E :
+ return "\xD9\x86\xD9\x85";
+ break;
+ case 0x8F :
+ return "\xD9\x86\xD9\x89";
+ break;
+ case 0x90 :
+ return "\xD9\x86\xD9\x8A";
+ break;
+ case 0x91 :
+ return "\xD9\x87\xD8\xAC";
+ break;
+ case 0x92 :
+ return "\xD9\x87\xD9\x85";
+ break;
+ case 0x93 :
+ return "\xD9\x87\xD9\x89";
+ break;
+ case 0x94 :
+ return "\xD9\x87\xD9\x8A";
+ break;
+ case 0x95 :
+ return "\xD9\x8A\xD8\xAC";
+ break;
+ case 0x96 :
+ return "\xD9\x8A\xD8\xAD";
+ break;
+ case 0x97 :
+ return "\xD9\x8A\xD8\xAE";
+ break;
+ case 0x98 :
+ return "\xD9\x8A\xD9\x85";
+ break;
+ case 0x99 :
+ return "\xD9\x8A\xD9\x89";
+ break;
+ case 0x9A :
+ return "\xD9\x8A\xD9\x8A";
+ break;
+ case 0x9B :
+ return "\xD8\xB0\xD9\xB0";
+ break;
+ case 0x9C :
+ return "\xD8\xB1\xD9\xB0";
+ break;
+ case 0x9D :
+ return "\xD9\x89\xD9\xB0";
+ break;
+ case 0x9E :
+ return "\xD9\x8C\xD9\x91";
+ break;
+ case 0x9F :
+ return "\xD9\x8D\xD9\x91";
+ break;
+ case 0xA0 :
+ return "\xD9\x8E\xD9\x91";
+ break;
+ case 0xA1 :
+ return "\xD9\x8F\xD9\x91";
+ break;
+ case 0xA2 :
+ return "\xD9\x90\xD9\x91";
+ break;
+ case 0xA3 :
+ return "\xD9\x91\xD9\xB0";
+ break;
+ case 0xA4 :
+ return "\xD8\xA6\xD8\xB1";
+ break;
+ case 0xA5 :
+ return "\xD8\xA6\xD8\xB2";
+ break;
+ case 0xA6 :
+ return "\xD8\xA6\xD9\x85";
+ break;
+ case 0xA7 :
+ return "\xD8\xA6\xD9\x86";
+ break;
+ case 0xA8 :
+ return "\xD8\xA6\xD9\x89";
+ break;
+ case 0xA9 :
+ return "\xD8\xA6\xD9\x8A";
+ break;
+ case 0xAA :
+ return "\xD8\xA8\xD8\xB1";
+ break;
+ case 0xAB :
+ return "\xD8\xA8\xD8\xB2";
+ break;
+ case 0xAC :
+ return "\xD8\xA8\xD9\x85";
+ break;
+ case 0xAD :
+ return "\xD8\xA8\xD9\x86";
+ break;
+ case 0xAE :
+ return "\xD8\xA8\xD9\x89";
+ break;
+ case 0xAF :
+ return "\xD8\xA8\xD9\x8A";
+ break;
+ case 0xB0 :
+ return "\xD8\xAA\xD8\xB1";
+ break;
+ case 0xB1 :
+ return "\xD8\xAA\xD8\xB2";
+ break;
+ case 0xB2 :
+ return "\xD8\xAA\xD9\x85";
+ break;
+ case 0xB3 :
+ return "\xD8\xAA\xD9\x86";
+ break;
+ case 0xB4 :
+ return "\xD8\xAA\xD9\x89";
+ break;
+ case 0xB5 :
+ return "\xD8\xAA\xD9\x8A";
+ break;
+ case 0xB6 :
+ return "\xD8\xAB\xD8\xB1";
+ break;
+ case 0xB7 :
+ return "\xD8\xAB\xD8\xB2";
+ break;
+ case 0xB8 :
+ return "\xD8\xAB\xD9\x85";
+ break;
+ case 0xB9 :
+ return "\xD8\xAB\xD9\x86";
+ break;
+ case 0xBA :
+ return "\xD8\xAB\xD9\x89";
+ break;
+ case 0xBB :
+ return "\xD8\xAB\xD9\x8A";
+ break;
+ case 0xBC :
+ return "\xD9\x81\xD9\x89";
+ break;
+ case 0xBD :
+ return "\xD9\x81\xD9\x8A";
+ break;
+ case 0xBE :
+ return "\xD9\x82\xD9\x89";
+ break;
+ case 0xBF :
+ return "\xD9\x82\xD9\x8A";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD9\x83\xD8\xA7";
+ break;
+ case 0x81 :
+ return "\xD9\x83\xD9\x84";
+ break;
+ case 0x82 :
+ return "\xD9\x83\xD9\x85";
+ break;
+ case 0x83 :
+ return "\xD9\x83\xD9\x89";
+ break;
+ case 0x84 :
+ return "\xD9\x83\xD9\x8A";
+ break;
+ case 0x85 :
+ return "\xD9\x84\xD9\x85";
+ break;
+ case 0x86 :
+ return "\xD9\x84\xD9\x89";
+ break;
+ case 0x87 :
+ return "\xD9\x84\xD9\x8A";
+ break;
+ case 0x88 :
+ return "\xD9\x85\xD8\xA7";
+ break;
+ case 0x89 :
+ return "\xD9\x85\xD9\x85";
+ break;
+ case 0x8A :
+ return "\xD9\x86\xD8\xB1";
+ break;
+ case 0x8B :
+ return "\xD9\x86\xD8\xB2";
+ break;
+ case 0x8C :
+ return "\xD9\x86\xD9\x85";
+ break;
+ case 0x8D :
+ return "\xD9\x86\xD9\x86";
+ break;
+ case 0x8E :
+ return "\xD9\x86\xD9\x89";
+ break;
+ case 0x8F :
+ return "\xD9\x86\xD9\x8A";
+ break;
+ case 0x90 :
+ return "\xD9\x89\xD9\xB0";
+ break;
+ case 0x91 :
+ return "\xD9\x8A\xD8\xB1";
+ break;
+ case 0x92 :
+ return "\xD9\x8A\xD8\xB2";
+ break;
+ case 0x93 :
+ return "\xD9\x8A\xD9\x85";
+ break;
+ case 0x94 :
+ return "\xD9\x8A\xD9\x86";
+ break;
+ case 0x95 :
+ return "\xD9\x8A\xD9\x89";
+ break;
+ case 0x96 :
+ return "\xD9\x8A\xD9\x8A";
+ break;
+ case 0x97 :
+ return "\xD8\xA6\xD8\xAC";
+ break;
+ case 0x98 :
+ return "\xD8\xA6\xD8\xAD";
+ break;
+ case 0x99 :
+ return "\xD8\xA6\xD8\xAE";
+ break;
+ case 0x9A :
+ return "\xD8\xA6\xD9\x85";
+ break;
+ case 0x9B :
+ return "\xD8\xA6\xD9\x87";
+ break;
+ case 0x9C :
+ return "\xD8\xA8\xD8\xAC";
+ break;
+ case 0x9D :
+ return "\xD8\xA8\xD8\xAD";
+ break;
+ case 0x9E :
+ return "\xD8\xA8\xD8\xAE";
+ break;
+ case 0x9F :
+ return "\xD8\xA8\xD9\x85";
+ break;
+ case 0xA0 :
+ return "\xD8\xA8\xD9\x87";
+ break;
+ case 0xA1 :
+ return "\xD8\xAA\xD8\xAC";
+ break;
+ case 0xA2 :
+ return "\xD8\xAA\xD8\xAD";
+ break;
+ case 0xA3 :
+ return "\xD8\xAA\xD8\xAE";
+ break;
+ case 0xA4 :
+ return "\xD8\xAA\xD9\x85";
+ break;
+ case 0xA5 :
+ return "\xD8\xAA\xD9\x87";
+ break;
+ case 0xA6 :
+ return "\xD8\xAB\xD9\x85";
+ break;
+ case 0xA7 :
+ return "\xD8\xAC\xD8\xAD";
+ break;
+ case 0xA8 :
+ return "\xD8\xAC\xD9\x85";
+ break;
+ case 0xA9 :
+ return "\xD8\xAD\xD8\xAC";
+ break;
+ case 0xAA :
+ return "\xD8\xAD\xD9\x85";
+ break;
+ case 0xAB :
+ return "\xD8\xAE\xD8\xAC";
+ break;
+ case 0xAC :
+ return "\xD8\xAE\xD9\x85";
+ break;
+ case 0xAD :
+ return "\xD8\xB3\xD8\xAC";
+ break;
+ case 0xAE :
+ return "\xD8\xB3\xD8\xAD";
+ break;
+ case 0xAF :
+ return "\xD8\xB3\xD8\xAE";
+ break;
+ case 0xB0 :
+ return "\xD8\xB3\xD9\x85";
+ break;
+ case 0xB1 :
+ return "\xD8\xB5\xD8\xAD";
+ break;
+ case 0xB2 :
+ return "\xD8\xB5\xD8\xAE";
+ break;
+ case 0xB3 :
+ return "\xD8\xB5\xD9\x85";
+ break;
+ case 0xB4 :
+ return "\xD8\xB6\xD8\xAC";
+ break;
+ case 0xB5 :
+ return "\xD8\xB6\xD8\xAD";
+ break;
+ case 0xB6 :
+ return "\xD8\xB6\xD8\xAE";
+ break;
+ case 0xB7 :
+ return "\xD8\xB6\xD9\x85";
+ break;
+ case 0xB8 :
+ return "\xD8\xB7\xD8\xAD";
+ break;
+ case 0xB9 :
+ return "\xD8\xB8\xD9\x85";
+ break;
+ case 0xBA :
+ return "\xD8\xB9\xD8\xAC";
+ break;
+ case 0xBB :
+ return "\xD8\xB9\xD9\x85";
+ break;
+ case 0xBC :
+ return "\xD8\xBA\xD8\xAC";
+ break;
+ case 0xBD :
+ return "\xD8\xBA\xD9\x85";
+ break;
+ case 0xBE :
+ return "\xD9\x81\xD8\xAC";
+ break;
+ case 0xBF :
+ return "\xD9\x81\xD8\xAD";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD9\x81\xD8\xAE";
+ break;
+ case 0x81 :
+ return "\xD9\x81\xD9\x85";
+ break;
+ case 0x82 :
+ return "\xD9\x82\xD8\xAD";
+ break;
+ case 0x83 :
+ return "\xD9\x82\xD9\x85";
+ break;
+ case 0x84 :
+ return "\xD9\x83\xD8\xAC";
+ break;
+ case 0x85 :
+ return "\xD9\x83\xD8\xAD";
+ break;
+ case 0x86 :
+ return "\xD9\x83\xD8\xAE";
+ break;
+ case 0x87 :
+ return "\xD9\x83\xD9\x84";
+ break;
+ case 0x88 :
+ return "\xD9\x83\xD9\x85";
+ break;
+ case 0x89 :
+ return "\xD9\x84\xD8\xAC";
+ break;
+ case 0x8A :
+ return "\xD9\x84\xD8\xAD";
+ break;
+ case 0x8B :
+ return "\xD9\x84\xD8\xAE";
+ break;
+ case 0x8C :
+ return "\xD9\x84\xD9\x85";
+ break;
+ case 0x8D :
+ return "\xD9\x84\xD9\x87";
+ break;
+ case 0x8E :
+ return "\xD9\x85\xD8\xAC";
+ break;
+ case 0x8F :
+ return "\xD9\x85\xD8\xAD";
+ break;
+ case 0x90 :
+ return "\xD9\x85\xD8\xAE";
+ break;
+ case 0x91 :
+ return "\xD9\x85\xD9\x85";
+ break;
+ case 0x92 :
+ return "\xD9\x86\xD8\xAC";
+ break;
+ case 0x93 :
+ return "\xD9\x86\xD8\xAD";
+ break;
+ case 0x94 :
+ return "\xD9\x86\xD8\xAE";
+ break;
+ case 0x95 :
+ return "\xD9\x86\xD9\x85";
+ break;
+ case 0x96 :
+ return "\xD9\x86\xD9\x87";
+ break;
+ case 0x97 :
+ return "\xD9\x87\xD8\xAC";
+ break;
+ case 0x98 :
+ return "\xD9\x87\xD9\x85";
+ break;
+ case 0x99 :
+ return "\xD9\x87\xD9\xB0";
+ break;
+ case 0x9A :
+ return "\xD9\x8A\xD8\xAC";
+ break;
+ case 0x9B :
+ return "\xD9\x8A\xD8\xAD";
+ break;
+ case 0x9C :
+ return "\xD9\x8A\xD8\xAE";
+ break;
+ case 0x9D :
+ return "\xD9\x8A\xD9\x85";
+ break;
+ case 0x9E :
+ return "\xD9\x8A\xD9\x87";
+ break;
+ case 0x9F :
+ return "\xD8\xA6\xD9\x85";
+ break;
+ case 0xA0 :
+ return "\xD8\xA6\xD9\x87";
+ break;
+ case 0xA1 :
+ return "\xD8\xA8\xD9\x85";
+ break;
+ case 0xA2 :
+ return "\xD8\xA8\xD9\x87";
+ break;
+ case 0xA3 :
+ return "\xD8\xAA\xD9\x85";
+ break;
+ case 0xA4 :
+ return "\xD8\xAA\xD9\x87";
+ break;
+ case 0xA5 :
+ return "\xD8\xAB\xD9\x85";
+ break;
+ case 0xA6 :
+ return "\xD8\xAB\xD9\x87";
+ break;
+ case 0xA7 :
+ return "\xD8\xB3\xD9\x85";
+ break;
+ case 0xA8 :
+ return "\xD8\xB3\xD9\x87";
+ break;
+ case 0xA9 :
+ return "\xD8\xB4\xD9\x85";
+ break;
+ case 0xAA :
+ return "\xD8\xB4\xD9\x87";
+ break;
+ case 0xAB :
+ return "\xD9\x83\xD9\x84";
+ break;
+ case 0xAC :
+ return "\xD9\x83\xD9\x85";
+ break;
+ case 0xAD :
+ return "\xD9\x84\xD9\x85";
+ break;
+ case 0xAE :
+ return "\xD9\x86\xD9\x85";
+ break;
+ case 0xAF :
+ return "\xD9\x86\xD9\x87";
+ break;
+ case 0xB0 :
+ return "\xD9\x8A\xD9\x85";
+ break;
+ case 0xB1 :
+ return "\xD9\x8A\xD9\x87";
+ break;
+ case 0xB2 :
+ return "\xD9\x80\xD9\x8E\xD9\x91";
+ break;
+ case 0xB3 :
+ return "\xD9\x80\xD9\x8F\xD9\x91";
+ break;
+ case 0xB4 :
+ return "\xD9\x80\xD9\x90\xD9\x91";
+ break;
+ case 0xB5 :
+ return "\xD8\xB7\xD9\x89";
+ break;
+ case 0xB6 :
+ return "\xD8\xB7\xD9\x8A";
+ break;
+ case 0xB7 :
+ return "\xD8\xB9\xD9\x89";
+ break;
+ case 0xB8 :
+ return "\xD8\xB9\xD9\x8A";
+ break;
+ case 0xB9 :
+ return "\xD8\xBA\xD9\x89";
+ break;
+ case 0xBA :
+ return "\xD8\xBA\xD9\x8A";
+ break;
+ case 0xBB :
+ return "\xD8\xB3\xD9\x89";
+ break;
+ case 0xBC :
+ return "\xD8\xB3\xD9\x8A";
+ break;
+ case 0xBD :
+ return "\xD8\xB4\xD9\x89";
+ break;
+ case 0xBE :
+ return "\xD8\xB4\xD9\x8A";
+ break;
+ case 0xBF :
+ return "\xD8\xAD\xD9\x89";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD8\xAD\xD9\x8A";
+ break;
+ case 0x81 :
+ return "\xD8\xAC\xD9\x89";
+ break;
+ case 0x82 :
+ return "\xD8\xAC\xD9\x8A";
+ break;
+ case 0x83 :
+ return "\xD8\xAE\xD9\x89";
+ break;
+ case 0x84 :
+ return "\xD8\xAE\xD9\x8A";
+ break;
+ case 0x85 :
+ return "\xD8\xB5\xD9\x89";
+ break;
+ case 0x86 :
+ return "\xD8\xB5\xD9\x8A";
+ break;
+ case 0x87 :
+ return "\xD8\xB6\xD9\x89";
+ break;
+ case 0x88 :
+ return "\xD8\xB6\xD9\x8A";
+ break;
+ case 0x89 :
+ return "\xD8\xB4\xD8\xAC";
+ break;
+ case 0x8A :
+ return "\xD8\xB4\xD8\xAD";
+ break;
+ case 0x8B :
+ return "\xD8\xB4\xD8\xAE";
+ break;
+ case 0x8C :
+ return "\xD8\xB4\xD9\x85";
+ break;
+ case 0x8D :
+ return "\xD8\xB4\xD8\xB1";
+ break;
+ case 0x8E :
+ return "\xD8\xB3\xD8\xB1";
+ break;
+ case 0x8F :
+ return "\xD8\xB5\xD8\xB1";
+ break;
+ case 0x90 :
+ return "\xD8\xB6\xD8\xB1";
+ break;
+ case 0x91 :
+ return "\xD8\xB7\xD9\x89";
+ break;
+ case 0x92 :
+ return "\xD8\xB7\xD9\x8A";
+ break;
+ case 0x93 :
+ return "\xD8\xB9\xD9\x89";
+ break;
+ case 0x94 :
+ return "\xD8\xB9\xD9\x8A";
+ break;
+ case 0x95 :
+ return "\xD8\xBA\xD9\x89";
+ break;
+ case 0x96 :
+ return "\xD8\xBA\xD9\x8A";
+ break;
+ case 0x97 :
+ return "\xD8\xB3\xD9\x89";
+ break;
+ case 0x98 :
+ return "\xD8\xB3\xD9\x8A";
+ break;
+ case 0x99 :
+ return "\xD8\xB4\xD9\x89";
+ break;
+ case 0x9A :
+ return "\xD8\xB4\xD9\x8A";
+ break;
+ case 0x9B :
+ return "\xD8\xAD\xD9\x89";
+ break;
+ case 0x9C :
+ return "\xD8\xAD\xD9\x8A";
+ break;
+ case 0x9D :
+ return "\xD8\xAC\xD9\x89";
+ break;
+ case 0x9E :
+ return "\xD8\xAC\xD9\x8A";
+ break;
+ case 0x9F :
+ return "\xD8\xAE\xD9\x89";
+ break;
+ case 0xA0 :
+ return "\xD8\xAE\xD9\x8A";
+ break;
+ case 0xA1 :
+ return "\xD8\xB5\xD9\x89";
+ break;
+ case 0xA2 :
+ return "\xD8\xB5\xD9\x8A";
+ break;
+ case 0xA3 :
+ return "\xD8\xB6\xD9\x89";
+ break;
+ case 0xA4 :
+ return "\xD8\xB6\xD9\x8A";
+ break;
+ case 0xA5 :
+ return "\xD8\xB4\xD8\xAC";
+ break;
+ case 0xA6 :
+ return "\xD8\xB4\xD8\xAD";
+ break;
+ case 0xA7 :
+ return "\xD8\xB4\xD8\xAE";
+ break;
+ case 0xA8 :
+ return "\xD8\xB4\xD9\x85";
+ break;
+ case 0xA9 :
+ return "\xD8\xB4\xD8\xB1";
+ break;
+ case 0xAA :
+ return "\xD8\xB3\xD8\xB1";
+ break;
+ case 0xAB :
+ return "\xD8\xB5\xD8\xB1";
+ break;
+ case 0xAC :
+ return "\xD8\xB6\xD8\xB1";
+ break;
+ case 0xAD :
+ return "\xD8\xB4\xD8\xAC";
+ break;
+ case 0xAE :
+ return "\xD8\xB4\xD8\xAD";
+ break;
+ case 0xAF :
+ return "\xD8\xB4\xD8\xAE";
+ break;
+ case 0xB0 :
+ return "\xD8\xB4\xD9\x85";
+ break;
+ case 0xB1 :
+ return "\xD8\xB3\xD9\x87";
+ break;
+ case 0xB2 :
+ return "\xD8\xB4\xD9\x87";
+ break;
+ case 0xB3 :
+ return "\xD8\xB7\xD9\x85";
+ break;
+ case 0xB4 :
+ return "\xD8\xB3\xD8\xAC";
+ break;
+ case 0xB5 :
+ return "\xD8\xB3\xD8\xAD";
+ break;
+ case 0xB6 :
+ return "\xD8\xB3\xD8\xAE";
+ break;
+ case 0xB7 :
+ return "\xD8\xB4\xD8\xAC";
+ break;
+ case 0xB8 :
+ return "\xD8\xB4\xD8\xAD";
+ break;
+ case 0xB9 :
+ return "\xD8\xB4\xD8\xAE";
+ break;
+ case 0xBA :
+ return "\xD8\xB7\xD9\x85";
+ break;
+ case 0xBB :
+ return "\xD8\xB8\xD9\x85";
+ break;
+ case 0xBC :
+ return "\xD8\xA7\xD9\x8B";
+ break;
+ case 0xBD :
+ return "\xD8\xA7\xD9\x8B";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (str[2]) {
+ case 0x90 :
+ return "\xD8\xAA\xD8\xAC\xD9\x85";
+ break;
+ case 0x91 :
+ return "\xD8\xAA\xD8\xAD\xD8\xAC";
+ break;
+ case 0x92 :
+ return "\xD8\xAA\xD8\xAD\xD8\xAC";
+ break;
+ case 0x93 :
+ return "\xD8\xAA\xD8\xAD\xD9\x85";
+ break;
+ case 0x94 :
+ return "\xD8\xAA\xD8\xAE\xD9\x85";
+ break;
+ case 0x95 :
+ return "\xD8\xAA\xD9\x85\xD8\xAC";
+ break;
+ case 0x96 :
+ return "\xD8\xAA\xD9\x85\xD8\xAD";
+ break;
+ case 0x97 :
+ return "\xD8\xAA\xD9\x85\xD8\xAE";
+ break;
+ case 0x98 :
+ return "\xD8\xAC\xD9\x85\xD8\xAD";
+ break;
+ case 0x99 :
+ return "\xD8\xAC\xD9\x85\xD8\xAD";
+ break;
+ case 0x9A :
+ return "\xD8\xAD\xD9\x85\xD9\x8A";
+ break;
+ case 0x9B :
+ return "\xD8\xAD\xD9\x85\xD9\x89";
+ break;
+ case 0x9C :
+ return "\xD8\xB3\xD8\xAD\xD8\xAC";
+ break;
+ case 0x9D :
+ return "\xD8\xB3\xD8\xAC\xD8\xAD";
+ break;
+ case 0x9E :
+ return "\xD8\xB3\xD8\xAC\xD9\x89";
+ break;
+ case 0x9F :
+ return "\xD8\xB3\xD9\x85\xD8\xAD";
+ break;
+ case 0xA0 :
+ return "\xD8\xB3\xD9\x85\xD8\xAD";
+ break;
+ case 0xA1 :
+ return "\xD8\xB3\xD9\x85\xD8\xAC";
+ break;
+ case 0xA2 :
+ return "\xD8\xB3\xD9\x85\xD9\x85";
+ break;
+ case 0xA3 :
+ return "\xD8\xB3\xD9\x85\xD9\x85";
+ break;
+ case 0xA4 :
+ return "\xD8\xB5\xD8\xAD\xD8\xAD";
+ break;
+ case 0xA5 :
+ return "\xD8\xB5\xD8\xAD\xD8\xAD";
+ break;
+ case 0xA6 :
+ return "\xD8\xB5\xD9\x85\xD9\x85";
+ break;
+ case 0xA7 :
+ return "\xD8\xB4\xD8\xAD\xD9\x85";
+ break;
+ case 0xA8 :
+ return "\xD8\xB4\xD8\xAD\xD9\x85";
+ break;
+ case 0xA9 :
+ return "\xD8\xB4\xD8\xAC\xD9\x8A";
+ break;
+ case 0xAA :
+ return "\xD8\xB4\xD9\x85\xD8\xAE";
+ break;
+ case 0xAB :
+ return "\xD8\xB4\xD9\x85\xD8\xAE";
+ break;
+ case 0xAC :
+ return "\xD8\xB4\xD9\x85\xD9\x85";
+ break;
+ case 0xAD :
+ return "\xD8\xB4\xD9\x85\xD9\x85";
+ break;
+ case 0xAE :
+ return "\xD8\xB6\xD8\xAD\xD9\x89";
+ break;
+ case 0xAF :
+ return "\xD8\xB6\xD8\xAE\xD9\x85";
+ break;
+ case 0xB0 :
+ return "\xD8\xB6\xD8\xAE\xD9\x85";
+ break;
+ case 0xB1 :
+ return "\xD8\xB7\xD9\x85\xD8\xAD";
+ break;
+ case 0xB2 :
+ return "\xD8\xB7\xD9\x85\xD8\xAD";
+ break;
+ case 0xB3 :
+ return "\xD8\xB7\xD9\x85\xD9\x85";
+ break;
+ case 0xB4 :
+ return "\xD8\xB7\xD9\x85\xD9\x8A";
+ break;
+ case 0xB5 :
+ return "\xD8\xB9\xD8\xAC\xD9\x85";
+ break;
+ case 0xB6 :
+ return "\xD8\xB9\xD9\x85\xD9\x85";
+ break;
+ case 0xB7 :
+ return "\xD8\xB9\xD9\x85\xD9\x85";
+ break;
+ case 0xB8 :
+ return "\xD8\xB9\xD9\x85\xD9\x89";
+ break;
+ case 0xB9 :
+ return "\xD8\xBA\xD9\x85\xD9\x85";
+ break;
+ case 0xBA :
+ return "\xD8\xBA\xD9\x85\xD9\x8A";
+ break;
+ case 0xBB :
+ return "\xD8\xBA\xD9\x85\xD9\x89";
+ break;
+ case 0xBC :
+ return "\xD9\x81\xD8\xAE\xD9\x85";
+ break;
+ case 0xBD :
+ return "\xD9\x81\xD8\xAE\xD9\x85";
+ break;
+ case 0xBE :
+ return "\xD9\x82\xD9\x85\xD8\xAD";
+ break;
+ case 0xBF :
+ return "\xD9\x82\xD9\x85\xD9\x85";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD9\x84\xD8\xAD\xD9\x85";
+ break;
+ case 0x81 :
+ return "\xD9\x84\xD8\xAD\xD9\x8A";
+ break;
+ case 0x82 :
+ return "\xD9\x84\xD8\xAD\xD9\x89";
+ break;
+ case 0x83 :
+ return "\xD9\x84\xD8\xAC\xD8\xAC";
+ break;
+ case 0x84 :
+ return "\xD9\x84\xD8\xAC\xD8\xAC";
+ break;
+ case 0x85 :
+ return "\xD9\x84\xD8\xAE\xD9\x85";
+ break;
+ case 0x86 :
+ return "\xD9\x84\xD8\xAE\xD9\x85";
+ break;
+ case 0x87 :
+ return "\xD9\x84\xD9\x85\xD8\xAD";
+ break;
+ case 0x88 :
+ return "\xD9\x84\xD9\x85\xD8\xAD";
+ break;
+ case 0x89 :
+ return "\xD9\x85\xD8\xAD\xD8\xAC";
+ break;
+ case 0x8A :
+ return "\xD9\x85\xD8\xAD\xD9\x85";
+ break;
+ case 0x8B :
+ return "\xD9\x85\xD8\xAD\xD9\x8A";
+ break;
+ case 0x8C :
+ return "\xD9\x85\xD8\xAC\xD8\xAD";
+ break;
+ case 0x8D :
+ return "\xD9\x85\xD8\xAC\xD9\x85";
+ break;
+ case 0x8E :
+ return "\xD9\x85\xD8\xAE\xD8\xAC";
+ break;
+ case 0x8F :
+ return "\xD9\x85\xD8\xAE\xD9\x85";
+ break;
+ case 0x92 :
+ return "\xD9\x85\xD8\xAC\xD8\xAE";
+ break;
+ case 0x93 :
+ return "\xD9\x87\xD9\x85\xD8\xAC";
+ break;
+ case 0x94 :
+ return "\xD9\x87\xD9\x85\xD9\x85";
+ break;
+ case 0x95 :
+ return "\xD9\x86\xD8\xAD\xD9\x85";
+ break;
+ case 0x96 :
+ return "\xD9\x86\xD8\xAD\xD9\x89";
+ break;
+ case 0x97 :
+ return "\xD9\x86\xD8\xAC\xD9\x85";
+ break;
+ case 0x98 :
+ return "\xD9\x86\xD8\xAC\xD9\x85";
+ break;
+ case 0x99 :
+ return "\xD9\x86\xD8\xAC\xD9\x89";
+ break;
+ case 0x9A :
+ return "\xD9\x86\xD9\x85\xD9\x8A";
+ break;
+ case 0x9B :
+ return "\xD9\x86\xD9\x85\xD9\x89";
+ break;
+ case 0x9C :
+ return "\xD9\x8A\xD9\x85\xD9\x85";
+ break;
+ case 0x9D :
+ return "\xD9\x8A\xD9\x85\xD9\x85";
+ break;
+ case 0x9E :
+ return "\xD8\xA8\xD8\xAE\xD9\x8A";
+ break;
+ case 0x9F :
+ return "\xD8\xAA\xD8\xAC\xD9\x8A";
+ break;
+ case 0xA0 :
+ return "\xD8\xAA\xD8\xAC\xD9\x89";
+ break;
+ case 0xA1 :
+ return "\xD8\xAA\xD8\xAE\xD9\x8A";
+ break;
+ case 0xA2 :
+ return "\xD8\xAA\xD8\xAE\xD9\x89";
+ break;
+ case 0xA3 :
+ return "\xD8\xAA\xD9\x85\xD9\x8A";
+ break;
+ case 0xA4 :
+ return "\xD8\xAA\xD9\x85\xD9\x89";
+ break;
+ case 0xA5 :
+ return "\xD8\xAC\xD9\x85\xD9\x8A";
+ break;
+ case 0xA6 :
+ return "\xD8\xAC\xD8\xAD\xD9\x89";
+ break;
+ case 0xA7 :
+ return "\xD8\xAC\xD9\x85\xD9\x89";
+ break;
+ case 0xA8 :
+ return "\xD8\xB3\xD8\xAE\xD9\x89";
+ break;
+ case 0xA9 :
+ return "\xD8\xB5\xD8\xAD\xD9\x8A";
+ break;
+ case 0xAA :
+ return "\xD8\xB4\xD8\xAD\xD9\x8A";
+ break;
+ case 0xAB :
+ return "\xD8\xB6\xD8\xAD\xD9\x8A";
+ break;
+ case 0xAC :
+ return "\xD9\x84\xD8\xAC\xD9\x8A";
+ break;
+ case 0xAD :
+ return "\xD9\x84\xD9\x85\xD9\x8A";
+ break;
+ case 0xAE :
+ return "\xD9\x8A\xD8\xAD\xD9\x8A";
+ break;
+ case 0xAF :
+ return "\xD9\x8A\xD8\xAC\xD9\x8A";
+ break;
+ case 0xB0 :
+ return "\xD9\x8A\xD9\x85\xD9\x8A";
+ break;
+ case 0xB1 :
+ return "\xD9\x85\xD9\x85\xD9\x8A";
+ break;
+ case 0xB2 :
+ return "\xD9\x82\xD9\x85\xD9\x8A";
+ break;
+ case 0xB3 :
+ return "\xD9\x86\xD8\xAD\xD9\x8A";
+ break;
+ case 0xB4 :
+ return "\xD9\x82\xD9\x85\xD8\xAD";
+ break;
+ case 0xB5 :
+ return "\xD9\x84\xD8\xAD\xD9\x85";
+ break;
+ case 0xB6 :
+ return "\xD8\xB9\xD9\x85\xD9\x8A";
+ break;
+ case 0xB7 :
+ return "\xD9\x83\xD9\x85\xD9\x8A";
+ break;
+ case 0xB8 :
+ return "\xD9\x86\xD8\xAC\xD8\xAD";
+ break;
+ case 0xB9 :
+ return "\xD9\x85\xD8\xAE\xD9\x8A";
+ break;
+ case 0xBA :
+ return "\xD9\x84\xD8\xAC\xD9\x85";
+ break;
+ case 0xBB :
+ return "\xD9\x83\xD9\x85\xD9\x85";
+ break;
+ case 0xBC :
+ return "\xD9\x84\xD8\xAC\xD9\x85";
+ break;
+ case 0xBD :
+ return "\xD9\x86\xD8\xAC\xD8\xAD";
+ break;
+ case 0xBE :
+ return "\xD8\xAC\xD8\xAD\xD9\x8A";
+ break;
+ case 0xBF :
+ return "\xD8\xAD\xD8\xAC\xD9\x8A";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD9\x85\xD8\xAC\xD9\x8A";
+ break;
+ case 0x81 :
+ return "\xD9\x81\xD9\x85\xD9\x8A";
+ break;
+ case 0x82 :
+ return "\xD8\xA8\xD8\xAD\xD9\x8A";
+ break;
+ case 0x83 :
+ return "\xD9\x83\xD9\x85\xD9\x85";
+ break;
+ case 0x84 :
+ return "\xD8\xB9\xD8\xAC\xD9\x85";
+ break;
+ case 0x85 :
+ return "\xD8\xB5\xD9\x85\xD9\x85";
+ break;
+ case 0x86 :
+ return "\xD8\xB3\xD8\xAE\xD9\x8A";
+ break;
+ case 0x87 :
+ return "\xD9\x86\xD8\xAC\xD9\x8A";
+ break;
+ case 0xB0 :
+ return "\xD8\xB5\xD9\x84\xDB\x92";
+ break;
+ case 0xB1 :
+ return "\xD9\x82\xD9\x84\xDB\x92";
+ break;
+ case 0xB2 :
+ return "\xD8\xA7\xD9\x84\xD9\x84\xD9\x87";
+ break;
+ case 0xB3 :
+ return "\xD8\xA7\xD9\x83\xD8\xA8\xD8\xB1";
+ break;
+ case 0xB4 :
+ return "\xD9\x85\xD8\xAD\xD9\x85\xD8\xAF";
+ break;
+ case 0xB5 :
+ return "\xD8\xB5\xD9\x84\xD8\xB9\xD9\x85";
+ break;
+ case 0xB6 :
+ return "\xD8\xB1\xD8\xB3\xD9\x88\xD9\x84";
+ break;
+ case 0xB7 :
+ return "\xD8\xB9\xD9\x84\xD9\x8A\xD9\x87";
+ break;
+ case 0xB8 :
+ return "\xD9\x88\xD8\xB3\xD9\x84\xD9\x85";
+ break;
+ case 0xB9 :
+ return "\xD8\xB5\xD9\x84\xD9\x89";
+ break;
+ case 0xBA :
+ return "\xD8\xB5\xD9\x84\xD9\x89\x20\xD8\xA7\xD9\x84\xD9\x84\xD9\x87\x20\xD8\xB9\xD9\x84\xD9\x8A\xD9\x87\x20\xD9\x88\xD8\xB3\xD9\x84\xD9\x85";
+ break;
+ case 0xBB :
+ return "\xD8\xAC\xD9\x84\x20\xD8\xAC\xD9\x84\xD8\xA7\xD9\x84\xD9\x87";
+ break;
+ case 0xBC :
+ return "\xD8\xB1\xDB\x8C\xD8\xA7\xD9\x84";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (str[2]) {
+ case 0x90 :
+ return "\x2C";
+ break;
+ case 0x91 :
+ return "\xE3\x80\x81";
+ break;
+ case 0x92 :
+ return "\xE3\x80\x82";
+ break;
+ case 0x93 :
+ return "\x3A";
+ break;
+ case 0x94 :
+ return "\x3B";
+ break;
+ case 0x95 :
+ return "\x21";
+ break;
+ case 0x96 :
+ return "\x3F";
+ break;
+ case 0x97 :
+ return "\xE3\x80\x96";
+ break;
+ case 0x98 :
+ return "\xE3\x80\x97";
+ break;
+ case 0x99 :
+ return "\x2E\x2E\x2E";
+ break;
+ case 0xB0 :
+ return "\x2E\x2E";
+ break;
+ case 0xB1 :
+ return "\xE2\x80\x94";
+ break;
+ case 0xB2 :
+ return "\xE2\x80\x93";
+ break;
+ case 0xB3 :
+ return "\x5F";
+ break;
+ case 0xB4 :
+ return "\x5F";
+ break;
+ case 0xB5 :
+ return "\x28";
+ break;
+ case 0xB6 :
+ return "\x29";
+ break;
+ case 0xB7 :
+ return "\x7B";
+ break;
+ case 0xB8 :
+ return "\x7D";
+ break;
+ case 0xB9 :
+ return "\xE3\x80\x94";
+ break;
+ case 0xBA :
+ return "\xE3\x80\x95";
+ break;
+ case 0xBB :
+ return "\xE3\x80\x90";
+ break;
+ case 0xBC :
+ return "\xE3\x80\x91";
+ break;
+ case 0xBD :
+ return "\xE3\x80\x8A";
+ break;
+ case 0xBE :
+ return "\xE3\x80\x8B";
+ break;
+ case 0xBF :
+ return "\xE3\x80\x88";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE3\x80\x89";
+ break;
+ case 0x81 :
+ return "\xE3\x80\x8C";
+ break;
+ case 0x82 :
+ return "\xE3\x80\x8D";
+ break;
+ case 0x83 :
+ return "\xE3\x80\x8E";
+ break;
+ case 0x84 :
+ return "\xE3\x80\x8F";
+ break;
+ case 0x87 :
+ return "\x5B";
+ break;
+ case 0x88 :
+ return "\x5D";
+ break;
+ case 0x89 :
+ return "\xCC\x85";
+ break;
+ case 0x8A :
+ return "\xCC\x85";
+ break;
+ case 0x8B :
+ return "\xCC\x85";
+ break;
+ case 0x8C :
+ return "\xCC\x85";
+ break;
+ case 0x8D :
+ return "\x5F";
+ break;
+ case 0x8E :
+ return "\x5F";
+ break;
+ case 0x8F :
+ return "\x5F";
+ break;
+ case 0x90 :
+ return "\x2C";
+ break;
+ case 0x91 :
+ return "\xE3\x80\x81";
+ break;
+ case 0x92 :
+ return "\x2E";
+ break;
+ case 0x94 :
+ return "\x3B";
+ break;
+ case 0x95 :
+ return "\x3A";
+ break;
+ case 0x96 :
+ return "\x3F";
+ break;
+ case 0x97 :
+ return "\x21";
+ break;
+ case 0x98 :
+ return "\xE2\x80\x94";
+ break;
+ case 0x99 :
+ return "\x28";
+ break;
+ case 0x9A :
+ return "\x29";
+ break;
+ case 0x9B :
+ return "\x7B";
+ break;
+ case 0x9C :
+ return "\x7D";
+ break;
+ case 0x9D :
+ return "\xE3\x80\x94";
+ break;
+ case 0x9E :
+ return "\xE3\x80\x95";
+ break;
+ case 0x9F :
+ return "\x23";
+ break;
+ case 0xA0 :
+ return "\x26";
+ break;
+ case 0xA1 :
+ return "\x2A";
+ break;
+ case 0xA2 :
+ return "\x2B";
+ break;
+ case 0xA3 :
+ return "\x2D";
+ break;
+ case 0xA4 :
+ return "\x3C";
+ break;
+ case 0xA5 :
+ return "\x3E";
+ break;
+ case 0xA6 :
+ return "\x3D";
+ break;
+ case 0xA8 :
+ return "\x5C";
+ break;
+ case 0xA9 :
+ return "\x24";
+ break;
+ case 0xAA :
+ return "\x25";
+ break;
+ case 0xAB :
+ return "\x40";
+ break;
+ case 0xB0 :
+ return "\xD9\x8B";
+ break;
+ case 0xB1 :
+ return "\xD9\x80\xD9\x8B";
+ break;
+ case 0xB2 :
+ return "\xD9\x8C";
+ break;
+ case 0xB4 :
+ return "\xD9\x8D";
+ break;
+ case 0xB6 :
+ return "\xD9\x8E";
+ break;
+ case 0xB7 :
+ return "\xD9\x80\xD9\x8E";
+ break;
+ case 0xB8 :
+ return "\xD9\x8F";
+ break;
+ case 0xB9 :
+ return "\xD9\x80\xD9\x8F";
+ break;
+ case 0xBA :
+ return "\xD9\x90";
+ break;
+ case 0xBB :
+ return "\xD9\x80\xD9\x90";
+ break;
+ case 0xBC :
+ return "\xD9\x91";
+ break;
+ case 0xBD :
+ return "\xD9\x80\xD9\x91";
+ break;
+ case 0xBE :
+ return "\xD9\x92";
+ break;
+ case 0xBF :
+ return "\xD9\x80\xD9\x92";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD8\xA1";
+ break;
+ case 0x81 :
+ return "\xD8\xA2";
+ break;
+ case 0x82 :
+ return "\xD8\xA2";
+ break;
+ case 0x83 :
+ return "\xD8\xA3";
+ break;
+ case 0x84 :
+ return "\xD8\xA3";
+ break;
+ case 0x85 :
+ return "\xD8\xA4";
+ break;
+ case 0x86 :
+ return "\xD8\xA4";
+ break;
+ case 0x87 :
+ return "\xD8\xA5";
+ break;
+ case 0x88 :
+ return "\xD8\xA5";
+ break;
+ case 0x89 :
+ return "\xD8\xA6";
+ break;
+ case 0x8A :
+ return "\xD8\xA6";
+ break;
+ case 0x8B :
+ return "\xD8\xA6";
+ break;
+ case 0x8C :
+ return "\xD8\xA6";
+ break;
+ case 0x8D :
+ return "\xD8\xA7";
+ break;
+ case 0x8E :
+ return "\xD8\xA7";
+ break;
+ case 0x8F :
+ return "\xD8\xA8";
+ break;
+ case 0x90 :
+ return "\xD8\xA8";
+ break;
+ case 0x91 :
+ return "\xD8\xA8";
+ break;
+ case 0x92 :
+ return "\xD8\xA8";
+ break;
+ case 0x93 :
+ return "\xD8\xA9";
+ break;
+ case 0x94 :
+ return "\xD8\xA9";
+ break;
+ case 0x95 :
+ return "\xD8\xAA";
+ break;
+ case 0x96 :
+ return "\xD8\xAA";
+ break;
+ case 0x97 :
+ return "\xD8\xAA";
+ break;
+ case 0x98 :
+ return "\xD8\xAA";
+ break;
+ case 0x99 :
+ return "\xD8\xAB";
+ break;
+ case 0x9A :
+ return "\xD8\xAB";
+ break;
+ case 0x9B :
+ return "\xD8\xAB";
+ break;
+ case 0x9C :
+ return "\xD8\xAB";
+ break;
+ case 0x9D :
+ return "\xD8\xAC";
+ break;
+ case 0x9E :
+ return "\xD8\xAC";
+ break;
+ case 0x9F :
+ return "\xD8\xAC";
+ break;
+ case 0xA0 :
+ return "\xD8\xAC";
+ break;
+ case 0xA1 :
+ return "\xD8\xAD";
+ break;
+ case 0xA2 :
+ return "\xD8\xAD";
+ break;
+ case 0xA3 :
+ return "\xD8\xAD";
+ break;
+ case 0xA4 :
+ return "\xD8\xAD";
+ break;
+ case 0xA5 :
+ return "\xD8\xAE";
+ break;
+ case 0xA6 :
+ return "\xD8\xAE";
+ break;
+ case 0xA7 :
+ return "\xD8\xAE";
+ break;
+ case 0xA8 :
+ return "\xD8\xAE";
+ break;
+ case 0xA9 :
+ return "\xD8\xAF";
+ break;
+ case 0xAA :
+ return "\xD8\xAF";
+ break;
+ case 0xAB :
+ return "\xD8\xB0";
+ break;
+ case 0xAC :
+ return "\xD8\xB0";
+ break;
+ case 0xAD :
+ return "\xD8\xB1";
+ break;
+ case 0xAE :
+ return "\xD8\xB1";
+ break;
+ case 0xAF :
+ return "\xD8\xB2";
+ break;
+ case 0xB0 :
+ return "\xD8\xB2";
+ break;
+ case 0xB1 :
+ return "\xD8\xB3";
+ break;
+ case 0xB2 :
+ return "\xD8\xB3";
+ break;
+ case 0xB3 :
+ return "\xD8\xB3";
+ break;
+ case 0xB4 :
+ return "\xD8\xB3";
+ break;
+ case 0xB5 :
+ return "\xD8\xB4";
+ break;
+ case 0xB6 :
+ return "\xD8\xB4";
+ break;
+ case 0xB7 :
+ return "\xD8\xB4";
+ break;
+ case 0xB8 :
+ return "\xD8\xB4";
+ break;
+ case 0xB9 :
+ return "\xD8\xB5";
+ break;
+ case 0xBA :
+ return "\xD8\xB5";
+ break;
+ case 0xBB :
+ return "\xD8\xB5";
+ break;
+ case 0xBC :
+ return "\xD8\xB5";
+ break;
+ case 0xBD :
+ return "\xD8\xB6";
+ break;
+ case 0xBE :
+ return "\xD8\xB6";
+ break;
+ case 0xBF :
+ return "\xD8\xB6";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xD8\xB6";
+ break;
+ case 0x81 :
+ return "\xD8\xB7";
+ break;
+ case 0x82 :
+ return "\xD8\xB7";
+ break;
+ case 0x83 :
+ return "\xD8\xB7";
+ break;
+ case 0x84 :
+ return "\xD8\xB7";
+ break;
+ case 0x85 :
+ return "\xD8\xB8";
+ break;
+ case 0x86 :
+ return "\xD8\xB8";
+ break;
+ case 0x87 :
+ return "\xD8\xB8";
+ break;
+ case 0x88 :
+ return "\xD8\xB8";
+ break;
+ case 0x89 :
+ return "\xD8\xB9";
+ break;
+ case 0x8A :
+ return "\xD8\xB9";
+ break;
+ case 0x8B :
+ return "\xD8\xB9";
+ break;
+ case 0x8C :
+ return "\xD8\xB9";
+ break;
+ case 0x8D :
+ return "\xD8\xBA";
+ break;
+ case 0x8E :
+ return "\xD8\xBA";
+ break;
+ case 0x8F :
+ return "\xD8\xBA";
+ break;
+ case 0x90 :
+ return "\xD8\xBA";
+ break;
+ case 0x91 :
+ return "\xD9\x81";
+ break;
+ case 0x92 :
+ return "\xD9\x81";
+ break;
+ case 0x93 :
+ return "\xD9\x81";
+ break;
+ case 0x94 :
+ return "\xD9\x81";
+ break;
+ case 0x95 :
+ return "\xD9\x82";
+ break;
+ case 0x96 :
+ return "\xD9\x82";
+ break;
+ case 0x97 :
+ return "\xD9\x82";
+ break;
+ case 0x98 :
+ return "\xD9\x82";
+ break;
+ case 0x99 :
+ return "\xD9\x83";
+ break;
+ case 0x9A :
+ return "\xD9\x83";
+ break;
+ case 0x9B :
+ return "\xD9\x83";
+ break;
+ case 0x9C :
+ return "\xD9\x83";
+ break;
+ case 0x9D :
+ return "\xD9\x84";
+ break;
+ case 0x9E :
+ return "\xD9\x84";
+ break;
+ case 0x9F :
+ return "\xD9\x84";
+ break;
+ case 0xA0 :
+ return "\xD9\x84";
+ break;
+ case 0xA1 :
+ return "\xD9\x85";
+ break;
+ case 0xA2 :
+ return "\xD9\x85";
+ break;
+ case 0xA3 :
+ return "\xD9\x85";
+ break;
+ case 0xA4 :
+ return "\xD9\x85";
+ break;
+ case 0xA5 :
+ return "\xD9\x86";
+ break;
+ case 0xA6 :
+ return "\xD9\x86";
+ break;
+ case 0xA7 :
+ return "\xD9\x86";
+ break;
+ case 0xA8 :
+ return "\xD9\x86";
+ break;
+ case 0xA9 :
+ return "\xD9\x87";
+ break;
+ case 0xAA :
+ return "\xD9\x87";
+ break;
+ case 0xAB :
+ return "\xD9\x87";
+ break;
+ case 0xAC :
+ return "\xD9\x87";
+ break;
+ case 0xAD :
+ return "\xD9\x88";
+ break;
+ case 0xAE :
+ return "\xD9\x88";
+ break;
+ case 0xAF :
+ return "\xD9\x89";
+ break;
+ case 0xB0 :
+ return "\xD9\x89";
+ break;
+ case 0xB1 :
+ return "\xD9\x8A";
+ break;
+ case 0xB2 :
+ return "\xD9\x8A";
+ break;
+ case 0xB3 :
+ return "\xD9\x8A";
+ break;
+ case 0xB4 :
+ return "\xD9\x8A";
+ break;
+ case 0xB5 :
+ return "\xD9\x84\xD8\xA2";
+ break;
+ case 0xB6 :
+ return "\xD9\x84\xD8\xA2";
+ break;
+ case 0xB7 :
+ return "\xD9\x84\xD8\xA3";
+ break;
+ case 0xB8 :
+ return "\xD9\x84\xD8\xA3";
+ break;
+ case 0xB9 :
+ return "\xD9\x84\xD8\xA5";
+ break;
+ case 0xBA :
+ return "\xD9\x84\xD8\xA5";
+ break;
+ case 0xBB :
+ return "\xD9\x84\xD8\xA7";
+ break;
+ case 0xBC :
+ return "\xD9\x84\xD8\xA7";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (str[2]) {
+ case 0x81 :
+ return "\x21";
+ break;
+ case 0x82 :
+ return "\x22";
+ break;
+ case 0x83 :
+ return "\x23";
+ break;
+ case 0x84 :
+ return "\x24";
+ break;
+ case 0x85 :
+ return "\x25";
+ break;
+ case 0x86 :
+ return "\x26";
+ break;
+ case 0x87 :
+ return "\x27";
+ break;
+ case 0x88 :
+ return "\x28";
+ break;
+ case 0x89 :
+ return "\x29";
+ break;
+ case 0x8A :
+ return "\x2A";
+ break;
+ case 0x8B :
+ return "\x2B";
+ break;
+ case 0x8C :
+ return "\x2C";
+ break;
+ case 0x8D :
+ return "\x2D";
+ break;
+ case 0x8E :
+ return "\x2E";
+ break;
+ case 0x8F :
+ return "\x2F";
+ break;
+ case 0x90 :
+ return "\x30";
+ break;
+ case 0x91 :
+ return "\x31";
+ break;
+ case 0x92 :
+ return "\x32";
+ break;
+ case 0x93 :
+ return "\x33";
+ break;
+ case 0x94 :
+ return "\x34";
+ break;
+ case 0x95 :
+ return "\x35";
+ break;
+ case 0x96 :
+ return "\x36";
+ break;
+ case 0x97 :
+ return "\x37";
+ break;
+ case 0x98 :
+ return "\x38";
+ break;
+ case 0x99 :
+ return "\x39";
+ break;
+ case 0x9A :
+ return "\x3A";
+ break;
+ case 0x9B :
+ return "\x3B";
+ break;
+ case 0x9C :
+ return "\x3C";
+ break;
+ case 0x9D :
+ return "\x3D";
+ break;
+ case 0x9E :
+ return "\x3E";
+ break;
+ case 0x9F :
+ return "\x3F";
+ break;
+ case 0xA0 :
+ return "\x40";
+ break;
+ case 0xA1 :
+ return "\x61";
+ break;
+ case 0xA2 :
+ return "\x62";
+ break;
+ case 0xA3 :
+ return "\x63";
+ break;
+ case 0xA4 :
+ return "\x64";
+ break;
+ case 0xA5 :
+ return "\x65";
+ break;
+ case 0xA6 :
+ return "\x66";
+ break;
+ case 0xA7 :
+ return "\x67";
+ break;
+ case 0xA8 :
+ return "\x68";
+ break;
+ case 0xA9 :
+ return "\x69";
+ break;
+ case 0xAA :
+ return "\x6A";
+ break;
+ case 0xAB :
+ return "\x6B";
+ break;
+ case 0xAC :
+ return "\x6C";
+ break;
+ case 0xAD :
+ return "\x6D";
+ break;
+ case 0xAE :
+ return "\x6E";
+ break;
+ case 0xAF :
+ return "\x6F";
+ break;
+ case 0xB0 :
+ return "\x70";
+ break;
+ case 0xB1 :
+ return "\x71";
+ break;
+ case 0xB2 :
+ return "\x72";
+ break;
+ case 0xB3 :
+ return "\x73";
+ break;
+ case 0xB4 :
+ return "\x74";
+ break;
+ case 0xB5 :
+ return "\x75";
+ break;
+ case 0xB6 :
+ return "\x76";
+ break;
+ case 0xB7 :
+ return "\x77";
+ break;
+ case 0xB8 :
+ return "\x78";
+ break;
+ case 0xB9 :
+ return "\x79";
+ break;
+ case 0xBA :
+ return "\x7A";
+ break;
+ case 0xBB :
+ return "\x5B";
+ break;
+ case 0xBC :
+ return "\x5C";
+ break;
+ case 0xBD :
+ return "\x5D";
+ break;
+ case 0xBE :
+ return "\x5E";
+ break;
+ case 0xBF :
+ return "\x5F";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (str[2]) {
+ case 0x80 :
+ return "\x60";
+ break;
+ case 0x81 :
+ return "\x61";
+ break;
+ case 0x82 :
+ return "\x62";
+ break;
+ case 0x83 :
+ return "\x63";
+ break;
+ case 0x84 :
+ return "\x64";
+ break;
+ case 0x85 :
+ return "\x65";
+ break;
+ case 0x86 :
+ return "\x66";
+ break;
+ case 0x87 :
+ return "\x67";
+ break;
+ case 0x88 :
+ return "\x68";
+ break;
+ case 0x89 :
+ return "\x69";
+ break;
+ case 0x8A :
+ return "\x6A";
+ break;
+ case 0x8B :
+ return "\x6B";
+ break;
+ case 0x8C :
+ return "\x6C";
+ break;
+ case 0x8D :
+ return "\x6D";
+ break;
+ case 0x8E :
+ return "\x6E";
+ break;
+ case 0x8F :
+ return "\x6F";
+ break;
+ case 0x90 :
+ return "\x70";
+ break;
+ case 0x91 :
+ return "\x71";
+ break;
+ case 0x92 :
+ return "\x72";
+ break;
+ case 0x93 :
+ return "\x73";
+ break;
+ case 0x94 :
+ return "\x74";
+ break;
+ case 0x95 :
+ return "\x75";
+ break;
+ case 0x96 :
+ return "\x76";
+ break;
+ case 0x97 :
+ return "\x77";
+ break;
+ case 0x98 :
+ return "\x78";
+ break;
+ case 0x99 :
+ return "\x79";
+ break;
+ case 0x9A :
+ return "\x7A";
+ break;
+ case 0x9B :
+ return "\x7B";
+ break;
+ case 0x9C :
+ return "\x7C";
+ break;
+ case 0x9D :
+ return "\x7D";
+ break;
+ case 0x9E :
+ return "\x7E";
+ break;
+ case 0x9F :
+ return "\xE2\xA6\x85";
+ break;
+ case 0xA0 :
+ return "\xE2\xA6\x86";
+ break;
+ case 0xA1 :
+ return "\xE3\x80\x82";
+ break;
+ case 0xA2 :
+ return "\xE3\x80\x8C";
+ break;
+ case 0xA3 :
+ return "\xE3\x80\x8D";
+ break;
+ case 0xA4 :
+ return "\xE3\x80\x81";
+ break;
+ case 0xA5 :
+ return "\xE3\x83\xBB";
+ break;
+ case 0xA6 :
+ return "\xE3\x83\xB2";
+ break;
+ case 0xA7 :
+ return "\xE3\x82\xA1";
+ break;
+ case 0xA8 :
+ return "\xE3\x82\xA3";
+ break;
+ case 0xA9 :
+ return "\xE3\x82\xA5";
+ break;
+ case 0xAA :
+ return "\xE3\x82\xA7";
+ break;
+ case 0xAB :
+ return "\xE3\x82\xA9";
+ break;
+ case 0xAC :
+ return "\xE3\x83\xA3";
+ break;
+ case 0xAD :
+ return "\xE3\x83\xA5";
+ break;
+ case 0xAE :
+ return "\xE3\x83\xA7";
+ break;
+ case 0xAF :
+ return "\xE3\x83\x83";
+ break;
+ case 0xB0 :
+ return "\xE3\x83\xBC";
+ break;
+ case 0xB1 :
+ return "\xE3\x82\xA2";
+ break;
+ case 0xB2 :
+ return "\xE3\x82\xA4";
+ break;
+ case 0xB3 :
+ return "\xE3\x82\xA6";
+ break;
+ case 0xB4 :
+ return "\xE3\x82\xA8";
+ break;
+ case 0xB5 :
+ return "\xE3\x82\xAA";
+ break;
+ case 0xB6 :
+ return "\xE3\x82\xAB";
+ break;
+ case 0xB7 :
+ return "\xE3\x82\xAD";
+ break;
+ case 0xB8 :
+ return "\xE3\x82\xAF";
+ break;
+ case 0xB9 :
+ return "\xE3\x82\xB1";
+ break;
+ case 0xBA :
+ return "\xE3\x82\xB3";
+ break;
+ case 0xBB :
+ return "\xE3\x82\xB5";
+ break;
+ case 0xBC :
+ return "\xE3\x82\xB7";
+ break;
+ case 0xBD :
+ return "\xE3\x82\xB9";
+ break;
+ case 0xBE :
+ return "\xE3\x82\xBB";
+ break;
+ case 0xBF :
+ return "\xE3\x82\xBD";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (str[2]) {
+ case 0x80 :
+ return "\xE3\x82\xBF";
+ break;
+ case 0x81 :
+ return "\xE3\x83\x81";
+ break;
+ case 0x82 :
+ return "\xE3\x83\x84";
+ break;
+ case 0x83 :
+ return "\xE3\x83\x86";
+ break;
+ case 0x84 :
+ return "\xE3\x83\x88";
+ break;
+ case 0x85 :
+ return "\xE3\x83\x8A";
+ break;
+ case 0x86 :
+ return "\xE3\x83\x8B";
+ break;
+ case 0x87 :
+ return "\xE3\x83\x8C";
+ break;
+ case 0x88 :
+ return "\xE3\x83\x8D";
+ break;
+ case 0x89 :
+ return "\xE3\x83\x8E";
+ break;
+ case 0x8A :
+ return "\xE3\x83\x8F";
+ break;
+ case 0x8B :
+ return "\xE3\x83\x92";
+ break;
+ case 0x8C :
+ return "\xE3\x83\x95";
+ break;
+ case 0x8D :
+ return "\xE3\x83\x98";
+ break;
+ case 0x8E :
+ return "\xE3\x83\x9B";
+ break;
+ case 0x8F :
+ return "\xE3\x83\x9E";
+ break;
+ case 0x90 :
+ return "\xE3\x83\x9F";
+ break;
+ case 0x91 :
+ return "\xE3\x83\xA0";
+ break;
+ case 0x92 :
+ return "\xE3\x83\xA1";
+ break;
+ case 0x93 :
+ return "\xE3\x83\xA2";
+ break;
+ case 0x94 :
+ return "\xE3\x83\xA4";
+ break;
+ case 0x95 :
+ return "\xE3\x83\xA6";
+ break;
+ case 0x96 :
+ return "\xE3\x83\xA8";
+ break;
+ case 0x97 :
+ return "\xE3\x83\xA9";
+ break;
+ case 0x98 :
+ return "\xE3\x83\xAA";
+ break;
+ case 0x99 :
+ return "\xE3\x83\xAB";
+ break;
+ case 0x9A :
+ return "\xE3\x83\xAC";
+ break;
+ case 0x9B :
+ return "\xE3\x83\xAD";
+ break;
+ case 0x9C :
+ return "\xE3\x83\xAF";
+ break;
+ case 0x9D :
+ return "\xE3\x83\xB3";
+ break;
+ case 0x9E :
+ return "\xE3\x82\x99";
+ break;
+ case 0x9F :
+ return "\xE3\x82\x9A";
+ break;
+ case 0xA0 :
+ return "\xE1\x85\xA0";
+ break;
+ case 0xA1 :
+ return "\xE1\x84\x80";
+ break;
+ case 0xA2 :
+ return "\xE1\x84\x81";
+ break;
+ case 0xA3 :
+ return "\xE1\x86\xAA";
+ break;
+ case 0xA4 :
+ return "\xE1\x84\x82";
+ break;
+ case 0xA5 :
+ return "\xE1\x86\xAC";
+ break;
+ case 0xA6 :
+ return "\xE1\x86\xAD";
+ break;
+ case 0xA7 :
+ return "\xE1\x84\x83";
+ break;
+ case 0xA8 :
+ return "\xE1\x84\x84";
+ break;
+ case 0xA9 :
+ return "\xE1\x84\x85";
+ break;
+ case 0xAA :
+ return "\xE1\x86\xB0";
+ break;
+ case 0xAB :
+ return "\xE1\x86\xB1";
+ break;
+ case 0xAC :
+ return "\xE1\x86\xB2";
+ break;
+ case 0xAD :
+ return "\xE1\x86\xB3";
+ break;
+ case 0xAE :
+ return "\xE1\x86\xB4";
+ break;
+ case 0xAF :
+ return "\xE1\x86\xB5";
+ break;
+ case 0xB0 :
+ return "\xE1\x84\x9A";
+ break;
+ case 0xB1 :
+ return "\xE1\x84\x86";
+ break;
+ case 0xB2 :
+ return "\xE1\x84\x87";
+ break;
+ case 0xB3 :
+ return "\xE1\x84\x88";
+ break;
+ case 0xB4 :
+ return "\xE1\x84\xA1";
+ break;
+ case 0xB5 :
+ return "\xE1\x84\x89";
+ break;
+ case 0xB6 :
+ return "\xE1\x84\x8A";
+ break;
+ case 0xB7 :
+ return "\xE1\x84\x8B";
+ break;
+ case 0xB8 :
+ return "\xE1\x84\x8C";
+ break;
+ case 0xB9 :
+ return "\xE1\x84\x8D";
+ break;
+ case 0xBA :
+ return "\xE1\x84\x8E";
+ break;
+ case 0xBB :
+ return "\xE1\x84\x8F";
+ break;
+ case 0xBC :
+ return "\xE1\x84\x90";
+ break;
+ case 0xBD :
+ return "\xE1\x84\x91";
+ break;
+ case 0xBE :
+ return "\xE1\x84\x92";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (str[2]) {
+ case 0x82 :
+ return "\xE1\x85\xA1";
+ break;
+ case 0x83 :
+ return "\xE1\x85\xA2";
+ break;
+ case 0x84 :
+ return "\xE1\x85\xA3";
+ break;
+ case 0x85 :
+ return "\xE1\x85\xA4";
+ break;
+ case 0x86 :
+ return "\xE1\x85\xA5";
+ break;
+ case 0x87 :
+ return "\xE1\x85\xA6";
+ break;
+ case 0x8A :
+ return "\xE1\x85\xA7";
+ break;
+ case 0x8B :
+ return "\xE1\x85\xA8";
+ break;
+ case 0x8C :
+ return "\xE1\x85\xA9";
+ break;
+ case 0x8D :
+ return "\xE1\x85\xAA";
+ break;
+ case 0x8E :
+ return "\xE1\x85\xAB";
+ break;
+ case 0x8F :
+ return "\xE1\x85\xAC";
+ break;
+ case 0x92 :
+ return "\xE1\x85\xAD";
+ break;
+ case 0x93 :
+ return "\xE1\x85\xAE";
+ break;
+ case 0x94 :
+ return "\xE1\x85\xAF";
+ break;
+ case 0x95 :
+ return "\xE1\x85\xB0";
+ break;
+ case 0x96 :
+ return "\xE1\x85\xB1";
+ break;
+ case 0x97 :
+ return "\xE1\x85\xB2";
+ break;
+ case 0x9A :
+ return "\xE1\x85\xB3";
+ break;
+ case 0x9B :
+ return "\xE1\x85\xB4";
+ break;
+ case 0x9C :
+ return "\xE1\x85\xB5";
+ break;
+ case 0xA0 :
+ return "\xC2\xA2";
+ break;
+ case 0xA1 :
+ return "\xC2\xA3";
+ break;
+ case 0xA2 :
+ return "\xC2\xAC";
+ break;
+ case 0xA3 :
+ return "\xCC\x84";
+ break;
+ case 0xA4 :
+ return "\xC2\xA6";
+ break;
+ case 0xA5 :
+ return "\xC2\xA5";
+ break;
+ case 0xA6 :
+ return "\xE2\x82\xA9";
+ break;
+ case 0xA8 :
+ return "\xE2\x94\x82";
+ break;
+ case 0xA9 :
+ return "\xE2\x86\x90";
+ break;
+ case 0xAA :
+ return "\xE2\x86\x91";
+ break;
+ case 0xAB :
+ return "\xE2\x86\x92";
+ break;
+ case 0xAC :
+ return "\xE2\x86\x93";
+ break;
+ case 0xAD :
+ return "\xE2\x96\xA0";
+ break;
+ case 0xAE :
+ return "\xE2\x97\x8B";
+ break;
+ }
+ break;
+ }
+ break;
+case 0xF0 :
+ switch (str[1]) {
+ case 0x9D :
+ switch (str[2]) {
+ case 0x85 :
+ switch (str[3]) {
+ case 0x9E :
+ return "\xF0\x9D\x85\x97\xF0\x9D\x85\xA5";
+ break;
+ case 0x9F :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5";
+ break;
+ case 0xA0 :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5\xF0\x9D\x85\xAE";
+ break;
+ case 0xA1 :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5\xF0\x9D\x85\xAF";
+ break;
+ case 0xA2 :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5\xF0\x9D\x85\xB0";
+ break;
+ case 0xA3 :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5\xF0\x9D\x85\xB1";
+ break;
+ case 0xA4 :
+ return "\xF0\x9D\x85\x98\xF0\x9D\x85\xA5\xF0\x9D\x85\xB2";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (str[3]) {
+ case 0xBB :
+ return "\xF0\x9D\x86\xB9\xF0\x9D\x85\xA5";
+ break;
+ case 0xBC :
+ return "\xF0\x9D\x86\xBA\xF0\x9D\x85\xA5";
+ break;
+ case 0xBD :
+ return "\xF0\x9D\x86\xB9\xF0\x9D\x85\xA5\xF0\x9D\x85\xAE";
+ break;
+ case 0xBE :
+ return "\xF0\x9D\x86\xBA\xF0\x9D\x85\xA5\xF0\x9D\x85\xAE";
+ break;
+ case 0xBF :
+ return "\xF0\x9D\x86\xB9\xF0\x9D\x85\xA5\xF0\x9D\x85\xAF";
+ break;
+ }
+ break;
+ case 0x87 :
+ if (str[3] == 0x80) {
+ return "\xF0\x9D\x86\xBA\xF0\x9D\x85\xA5\xF0\x9D\x85\xAF";
+ }
+ break;
+ case 0x90 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x61";
+ break;
+ case 0x81 :
+ return "\x62";
+ break;
+ case 0x82 :
+ return "\x63";
+ break;
+ case 0x83 :
+ return "\x64";
+ break;
+ case 0x84 :
+ return "\x65";
+ break;
+ case 0x85 :
+ return "\x66";
+ break;
+ case 0x86 :
+ return "\x67";
+ break;
+ case 0x87 :
+ return "\x68";
+ break;
+ case 0x88 :
+ return "\x69";
+ break;
+ case 0x89 :
+ return "\x6A";
+ break;
+ case 0x8A :
+ return "\x6B";
+ break;
+ case 0x8B :
+ return "\x6C";
+ break;
+ case 0x8C :
+ return "\x6D";
+ break;
+ case 0x8D :
+ return "\x6E";
+ break;
+ case 0x8E :
+ return "\x6F";
+ break;
+ case 0x8F :
+ return "\x70";
+ break;
+ case 0x90 :
+ return "\x71";
+ break;
+ case 0x91 :
+ return "\x72";
+ break;
+ case 0x92 :
+ return "\x73";
+ break;
+ case 0x93 :
+ return "\x74";
+ break;
+ case 0x94 :
+ return "\x75";
+ break;
+ case 0x95 :
+ return "\x76";
+ break;
+ case 0x96 :
+ return "\x77";
+ break;
+ case 0x97 :
+ return "\x78";
+ break;
+ case 0x98 :
+ return "\x79";
+ break;
+ case 0x99 :
+ return "\x7A";
+ break;
+ case 0x9A :
+ return "\x61";
+ break;
+ case 0x9B :
+ return "\x62";
+ break;
+ case 0x9C :
+ return "\x63";
+ break;
+ case 0x9D :
+ return "\x64";
+ break;
+ case 0x9E :
+ return "\x65";
+ break;
+ case 0x9F :
+ return "\x66";
+ break;
+ case 0xA0 :
+ return "\x67";
+ break;
+ case 0xA1 :
+ return "\x68";
+ break;
+ case 0xA2 :
+ return "\x69";
+ break;
+ case 0xA3 :
+ return "\x6A";
+ break;
+ case 0xA4 :
+ return "\x6B";
+ break;
+ case 0xA5 :
+ return "\x6C";
+ break;
+ case 0xA6 :
+ return "\x6D";
+ break;
+ case 0xA7 :
+ return "\x6E";
+ break;
+ case 0xA8 :
+ return "\x6F";
+ break;
+ case 0xA9 :
+ return "\x70";
+ break;
+ case 0xAA :
+ return "\x71";
+ break;
+ case 0xAB :
+ return "\x72";
+ break;
+ case 0xAC :
+ return "\x73";
+ break;
+ case 0xAD :
+ return "\x74";
+ break;
+ case 0xAE :
+ return "\x75";
+ break;
+ case 0xAF :
+ return "\x76";
+ break;
+ case 0xB0 :
+ return "\x77";
+ break;
+ case 0xB1 :
+ return "\x78";
+ break;
+ case 0xB2 :
+ return "\x79";
+ break;
+ case 0xB3 :
+ return "\x7A";
+ break;
+ case 0xB4 :
+ return "\x61";
+ break;
+ case 0xB5 :
+ return "\x62";
+ break;
+ case 0xB6 :
+ return "\x63";
+ break;
+ case 0xB7 :
+ return "\x64";
+ break;
+ case 0xB8 :
+ return "\x65";
+ break;
+ case 0xB9 :
+ return "\x66";
+ break;
+ case 0xBA :
+ return "\x67";
+ break;
+ case 0xBB :
+ return "\x68";
+ break;
+ case 0xBC :
+ return "\x69";
+ break;
+ case 0xBD :
+ return "\x6A";
+ break;
+ case 0xBE :
+ return "\x6B";
+ break;
+ case 0xBF :
+ return "\x6C";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x6D";
+ break;
+ case 0x81 :
+ return "\x6E";
+ break;
+ case 0x82 :
+ return "\x6F";
+ break;
+ case 0x83 :
+ return "\x70";
+ break;
+ case 0x84 :
+ return "\x71";
+ break;
+ case 0x85 :
+ return "\x72";
+ break;
+ case 0x86 :
+ return "\x73";
+ break;
+ case 0x87 :
+ return "\x74";
+ break;
+ case 0x88 :
+ return "\x75";
+ break;
+ case 0x89 :
+ return "\x76";
+ break;
+ case 0x8A :
+ return "\x77";
+ break;
+ case 0x8B :
+ return "\x78";
+ break;
+ case 0x8C :
+ return "\x79";
+ break;
+ case 0x8D :
+ return "\x7A";
+ break;
+ case 0x8E :
+ return "\x61";
+ break;
+ case 0x8F :
+ return "\x62";
+ break;
+ case 0x90 :
+ return "\x63";
+ break;
+ case 0x91 :
+ return "\x64";
+ break;
+ case 0x92 :
+ return "\x65";
+ break;
+ case 0x93 :
+ return "\x66";
+ break;
+ case 0x94 :
+ return "\x67";
+ break;
+ case 0x96 :
+ return "\x69";
+ break;
+ case 0x97 :
+ return "\x6A";
+ break;
+ case 0x98 :
+ return "\x6B";
+ break;
+ case 0x99 :
+ return "\x6C";
+ break;
+ case 0x9A :
+ return "\x6D";
+ break;
+ case 0x9B :
+ return "\x6E";
+ break;
+ case 0x9C :
+ return "\x6F";
+ break;
+ case 0x9D :
+ return "\x70";
+ break;
+ case 0x9E :
+ return "\x71";
+ break;
+ case 0x9F :
+ return "\x72";
+ break;
+ case 0xA0 :
+ return "\x73";
+ break;
+ case 0xA1 :
+ return "\x74";
+ break;
+ case 0xA2 :
+ return "\x75";
+ break;
+ case 0xA3 :
+ return "\x76";
+ break;
+ case 0xA4 :
+ return "\x77";
+ break;
+ case 0xA5 :
+ return "\x78";
+ break;
+ case 0xA6 :
+ return "\x79";
+ break;
+ case 0xA7 :
+ return "\x7A";
+ break;
+ case 0xA8 :
+ return "\x61";
+ break;
+ case 0xA9 :
+ return "\x62";
+ break;
+ case 0xAA :
+ return "\x63";
+ break;
+ case 0xAB :
+ return "\x64";
+ break;
+ case 0xAC :
+ return "\x65";
+ break;
+ case 0xAD :
+ return "\x66";
+ break;
+ case 0xAE :
+ return "\x67";
+ break;
+ case 0xAF :
+ return "\x68";
+ break;
+ case 0xB0 :
+ return "\x69";
+ break;
+ case 0xB1 :
+ return "\x6A";
+ break;
+ case 0xB2 :
+ return "\x6B";
+ break;
+ case 0xB3 :
+ return "\x6C";
+ break;
+ case 0xB4 :
+ return "\x6D";
+ break;
+ case 0xB5 :
+ return "\x6E";
+ break;
+ case 0xB6 :
+ return "\x6F";
+ break;
+ case 0xB7 :
+ return "\x70";
+ break;
+ case 0xB8 :
+ return "\x71";
+ break;
+ case 0xB9 :
+ return "\x72";
+ break;
+ case 0xBA :
+ return "\x73";
+ break;
+ case 0xBB :
+ return "\x74";
+ break;
+ case 0xBC :
+ return "\x75";
+ break;
+ case 0xBD :
+ return "\x76";
+ break;
+ case 0xBE :
+ return "\x77";
+ break;
+ case 0xBF :
+ return "\x78";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x79";
+ break;
+ case 0x81 :
+ return "\x7A";
+ break;
+ case 0x82 :
+ return "\x61";
+ break;
+ case 0x83 :
+ return "\x62";
+ break;
+ case 0x84 :
+ return "\x63";
+ break;
+ case 0x85 :
+ return "\x64";
+ break;
+ case 0x86 :
+ return "\x65";
+ break;
+ case 0x87 :
+ return "\x66";
+ break;
+ case 0x88 :
+ return "\x67";
+ break;
+ case 0x89 :
+ return "\x68";
+ break;
+ case 0x8A :
+ return "\x69";
+ break;
+ case 0x8B :
+ return "\x6A";
+ break;
+ case 0x8C :
+ return "\x6B";
+ break;
+ case 0x8D :
+ return "\x6C";
+ break;
+ case 0x8E :
+ return "\x6D";
+ break;
+ case 0x8F :
+ return "\x6E";
+ break;
+ case 0x90 :
+ return "\x6F";
+ break;
+ case 0x91 :
+ return "\x70";
+ break;
+ case 0x92 :
+ return "\x71";
+ break;
+ case 0x93 :
+ return "\x72";
+ break;
+ case 0x94 :
+ return "\x73";
+ break;
+ case 0x95 :
+ return "\x74";
+ break;
+ case 0x96 :
+ return "\x75";
+ break;
+ case 0x97 :
+ return "\x76";
+ break;
+ case 0x98 :
+ return "\x77";
+ break;
+ case 0x99 :
+ return "\x78";
+ break;
+ case 0x9A :
+ return "\x79";
+ break;
+ case 0x9B :
+ return "\x7A";
+ break;
+ case 0x9C :
+ return "\x61";
+ break;
+ case 0x9E :
+ return "\x63";
+ break;
+ case 0x9F :
+ return "\x64";
+ break;
+ case 0xA2 :
+ return "\x67";
+ break;
+ case 0xA5 :
+ return "\x6A";
+ break;
+ case 0xA6 :
+ return "\x6B";
+ break;
+ case 0xA9 :
+ return "\x6E";
+ break;
+ case 0xAA :
+ return "\x6F";
+ break;
+ case 0xAB :
+ return "\x70";
+ break;
+ case 0xAC :
+ return "\x71";
+ break;
+ case 0xAE :
+ return "\x73";
+ break;
+ case 0xAF :
+ return "\x74";
+ break;
+ case 0xB0 :
+ return "\x75";
+ break;
+ case 0xB1 :
+ return "\x76";
+ break;
+ case 0xB2 :
+ return "\x77";
+ break;
+ case 0xB3 :
+ return "\x78";
+ break;
+ case 0xB4 :
+ return "\x79";
+ break;
+ case 0xB5 :
+ return "\x7A";
+ break;
+ case 0xB6 :
+ return "\x61";
+ break;
+ case 0xB7 :
+ return "\x62";
+ break;
+ case 0xB8 :
+ return "\x63";
+ break;
+ case 0xB9 :
+ return "\x64";
+ break;
+ case 0xBB :
+ return "\x66";
+ break;
+ case 0xBD :
+ return "\x68";
+ break;
+ case 0xBE :
+ return "\x69";
+ break;
+ case 0xBF :
+ return "\x6A";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x6B";
+ break;
+ case 0x81 :
+ return "\x6C";
+ break;
+ case 0x82 :
+ return "\x6D";
+ break;
+ case 0x83 :
+ return "\x6E";
+ break;
+ case 0x85 :
+ return "\x70";
+ break;
+ case 0x86 :
+ return "\x71";
+ break;
+ case 0x87 :
+ return "\x72";
+ break;
+ case 0x88 :
+ return "\x73";
+ break;
+ case 0x89 :
+ return "\x74";
+ break;
+ case 0x8A :
+ return "\x75";
+ break;
+ case 0x8B :
+ return "\x76";
+ break;
+ case 0x8C :
+ return "\x77";
+ break;
+ case 0x8D :
+ return "\x78";
+ break;
+ case 0x8E :
+ return "\x79";
+ break;
+ case 0x8F :
+ return "\x7A";
+ break;
+ case 0x90 :
+ return "\x61";
+ break;
+ case 0x91 :
+ return "\x62";
+ break;
+ case 0x92 :
+ return "\x63";
+ break;
+ case 0x93 :
+ return "\x64";
+ break;
+ case 0x94 :
+ return "\x65";
+ break;
+ case 0x95 :
+ return "\x66";
+ break;
+ case 0x96 :
+ return "\x67";
+ break;
+ case 0x97 :
+ return "\x68";
+ break;
+ case 0x98 :
+ return "\x69";
+ break;
+ case 0x99 :
+ return "\x6A";
+ break;
+ case 0x9A :
+ return "\x6B";
+ break;
+ case 0x9B :
+ return "\x6C";
+ break;
+ case 0x9C :
+ return "\x6D";
+ break;
+ case 0x9D :
+ return "\x6E";
+ break;
+ case 0x9E :
+ return "\x6F";
+ break;
+ case 0x9F :
+ return "\x70";
+ break;
+ case 0xA0 :
+ return "\x71";
+ break;
+ case 0xA1 :
+ return "\x72";
+ break;
+ case 0xA2 :
+ return "\x73";
+ break;
+ case 0xA3 :
+ return "\x74";
+ break;
+ case 0xA4 :
+ return "\x75";
+ break;
+ case 0xA5 :
+ return "\x76";
+ break;
+ case 0xA6 :
+ return "\x77";
+ break;
+ case 0xA7 :
+ return "\x78";
+ break;
+ case 0xA8 :
+ return "\x79";
+ break;
+ case 0xA9 :
+ return "\x7A";
+ break;
+ case 0xAA :
+ return "\x61";
+ break;
+ case 0xAB :
+ return "\x62";
+ break;
+ case 0xAC :
+ return "\x63";
+ break;
+ case 0xAD :
+ return "\x64";
+ break;
+ case 0xAE :
+ return "\x65";
+ break;
+ case 0xAF :
+ return "\x66";
+ break;
+ case 0xB0 :
+ return "\x67";
+ break;
+ case 0xB1 :
+ return "\x68";
+ break;
+ case 0xB2 :
+ return "\x69";
+ break;
+ case 0xB3 :
+ return "\x6A";
+ break;
+ case 0xB4 :
+ return "\x6B";
+ break;
+ case 0xB5 :
+ return "\x6C";
+ break;
+ case 0xB6 :
+ return "\x6D";
+ break;
+ case 0xB7 :
+ return "\x6E";
+ break;
+ case 0xB8 :
+ return "\x6F";
+ break;
+ case 0xB9 :
+ return "\x70";
+ break;
+ case 0xBA :
+ return "\x71";
+ break;
+ case 0xBB :
+ return "\x72";
+ break;
+ case 0xBC :
+ return "\x73";
+ break;
+ case 0xBD :
+ return "\x74";
+ break;
+ case 0xBE :
+ return "\x75";
+ break;
+ case 0xBF :
+ return "\x76";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x77";
+ break;
+ case 0x81 :
+ return "\x78";
+ break;
+ case 0x82 :
+ return "\x79";
+ break;
+ case 0x83 :
+ return "\x7A";
+ break;
+ case 0x84 :
+ return "\x61";
+ break;
+ case 0x85 :
+ return "\x62";
+ break;
+ case 0x87 :
+ return "\x64";
+ break;
+ case 0x88 :
+ return "\x65";
+ break;
+ case 0x89 :
+ return "\x66";
+ break;
+ case 0x8A :
+ return "\x67";
+ break;
+ case 0x8D :
+ return "\x6A";
+ break;
+ case 0x8E :
+ return "\x6B";
+ break;
+ case 0x8F :
+ return "\x6C";
+ break;
+ case 0x90 :
+ return "\x6D";
+ break;
+ case 0x91 :
+ return "\x6E";
+ break;
+ case 0x92 :
+ return "\x6F";
+ break;
+ case 0x93 :
+ return "\x70";
+ break;
+ case 0x94 :
+ return "\x71";
+ break;
+ case 0x96 :
+ return "\x73";
+ break;
+ case 0x97 :
+ return "\x74";
+ break;
+ case 0x98 :
+ return "\x75";
+ break;
+ case 0x99 :
+ return "\x76";
+ break;
+ case 0x9A :
+ return "\x77";
+ break;
+ case 0x9B :
+ return "\x78";
+ break;
+ case 0x9C :
+ return "\x79";
+ break;
+ case 0x9E :
+ return "\x61";
+ break;
+ case 0x9F :
+ return "\x62";
+ break;
+ case 0xA0 :
+ return "\x63";
+ break;
+ case 0xA1 :
+ return "\x64";
+ break;
+ case 0xA2 :
+ return "\x65";
+ break;
+ case 0xA3 :
+ return "\x66";
+ break;
+ case 0xA4 :
+ return "\x67";
+ break;
+ case 0xA5 :
+ return "\x68";
+ break;
+ case 0xA6 :
+ return "\x69";
+ break;
+ case 0xA7 :
+ return "\x6A";
+ break;
+ case 0xA8 :
+ return "\x6B";
+ break;
+ case 0xA9 :
+ return "\x6C";
+ break;
+ case 0xAA :
+ return "\x6D";
+ break;
+ case 0xAB :
+ return "\x6E";
+ break;
+ case 0xAC :
+ return "\x6F";
+ break;
+ case 0xAD :
+ return "\x70";
+ break;
+ case 0xAE :
+ return "\x71";
+ break;
+ case 0xAF :
+ return "\x72";
+ break;
+ case 0xB0 :
+ return "\x73";
+ break;
+ case 0xB1 :
+ return "\x74";
+ break;
+ case 0xB2 :
+ return "\x75";
+ break;
+ case 0xB3 :
+ return "\x76";
+ break;
+ case 0xB4 :
+ return "\x77";
+ break;
+ case 0xB5 :
+ return "\x78";
+ break;
+ case 0xB6 :
+ return "\x79";
+ break;
+ case 0xB7 :
+ return "\x7A";
+ break;
+ case 0xB8 :
+ return "\x61";
+ break;
+ case 0xB9 :
+ return "\x62";
+ break;
+ case 0xBB :
+ return "\x64";
+ break;
+ case 0xBC :
+ return "\x65";
+ break;
+ case 0xBD :
+ return "\x66";
+ break;
+ case 0xBE :
+ return "\x67";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x69";
+ break;
+ case 0x81 :
+ return "\x6A";
+ break;
+ case 0x82 :
+ return "\x6B";
+ break;
+ case 0x83 :
+ return "\x6C";
+ break;
+ case 0x84 :
+ return "\x6D";
+ break;
+ case 0x86 :
+ return "\x6F";
+ break;
+ case 0x8A :
+ return "\x73";
+ break;
+ case 0x8B :
+ return "\x74";
+ break;
+ case 0x8C :
+ return "\x75";
+ break;
+ case 0x8D :
+ return "\x76";
+ break;
+ case 0x8E :
+ return "\x77";
+ break;
+ case 0x8F :
+ return "\x78";
+ break;
+ case 0x90 :
+ return "\x79";
+ break;
+ case 0x92 :
+ return "\x61";
+ break;
+ case 0x93 :
+ return "\x62";
+ break;
+ case 0x94 :
+ return "\x63";
+ break;
+ case 0x95 :
+ return "\x64";
+ break;
+ case 0x96 :
+ return "\x65";
+ break;
+ case 0x97 :
+ return "\x66";
+ break;
+ case 0x98 :
+ return "\x67";
+ break;
+ case 0x99 :
+ return "\x68";
+ break;
+ case 0x9A :
+ return "\x69";
+ break;
+ case 0x9B :
+ return "\x6A";
+ break;
+ case 0x9C :
+ return "\x6B";
+ break;
+ case 0x9D :
+ return "\x6C";
+ break;
+ case 0x9E :
+ return "\x6D";
+ break;
+ case 0x9F :
+ return "\x6E";
+ break;
+ case 0xA0 :
+ return "\x6F";
+ break;
+ case 0xA1 :
+ return "\x70";
+ break;
+ case 0xA2 :
+ return "\x71";
+ break;
+ case 0xA3 :
+ return "\x72";
+ break;
+ case 0xA4 :
+ return "\x73";
+ break;
+ case 0xA5 :
+ return "\x74";
+ break;
+ case 0xA6 :
+ return "\x75";
+ break;
+ case 0xA7 :
+ return "\x76";
+ break;
+ case 0xA8 :
+ return "\x77";
+ break;
+ case 0xA9 :
+ return "\x78";
+ break;
+ case 0xAA :
+ return "\x79";
+ break;
+ case 0xAB :
+ return "\x7A";
+ break;
+ case 0xAC :
+ return "\x61";
+ break;
+ case 0xAD :
+ return "\x62";
+ break;
+ case 0xAE :
+ return "\x63";
+ break;
+ case 0xAF :
+ return "\x64";
+ break;
+ case 0xB0 :
+ return "\x65";
+ break;
+ case 0xB1 :
+ return "\x66";
+ break;
+ case 0xB2 :
+ return "\x67";
+ break;
+ case 0xB3 :
+ return "\x68";
+ break;
+ case 0xB4 :
+ return "\x69";
+ break;
+ case 0xB5 :
+ return "\x6A";
+ break;
+ case 0xB6 :
+ return "\x6B";
+ break;
+ case 0xB7 :
+ return "\x6C";
+ break;
+ case 0xB8 :
+ return "\x6D";
+ break;
+ case 0xB9 :
+ return "\x6E";
+ break;
+ case 0xBA :
+ return "\x6F";
+ break;
+ case 0xBB :
+ return "\x70";
+ break;
+ case 0xBC :
+ return "\x71";
+ break;
+ case 0xBD :
+ return "\x72";
+ break;
+ case 0xBE :
+ return "\x73";
+ break;
+ case 0xBF :
+ return "\x74";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x75";
+ break;
+ case 0x81 :
+ return "\x76";
+ break;
+ case 0x82 :
+ return "\x77";
+ break;
+ case 0x83 :
+ return "\x78";
+ break;
+ case 0x84 :
+ return "\x79";
+ break;
+ case 0x85 :
+ return "\x7A";
+ break;
+ case 0x86 :
+ return "\x61";
+ break;
+ case 0x87 :
+ return "\x62";
+ break;
+ case 0x88 :
+ return "\x63";
+ break;
+ case 0x89 :
+ return "\x64";
+ break;
+ case 0x8A :
+ return "\x65";
+ break;
+ case 0x8B :
+ return "\x66";
+ break;
+ case 0x8C :
+ return "\x67";
+ break;
+ case 0x8D :
+ return "\x68";
+ break;
+ case 0x8E :
+ return "\x69";
+ break;
+ case 0x8F :
+ return "\x6A";
+ break;
+ case 0x90 :
+ return "\x6B";
+ break;
+ case 0x91 :
+ return "\x6C";
+ break;
+ case 0x92 :
+ return "\x6D";
+ break;
+ case 0x93 :
+ return "\x6E";
+ break;
+ case 0x94 :
+ return "\x6F";
+ break;
+ case 0x95 :
+ return "\x70";
+ break;
+ case 0x96 :
+ return "\x71";
+ break;
+ case 0x97 :
+ return "\x72";
+ break;
+ case 0x98 :
+ return "\x73";
+ break;
+ case 0x99 :
+ return "\x74";
+ break;
+ case 0x9A :
+ return "\x75";
+ break;
+ case 0x9B :
+ return "\x76";
+ break;
+ case 0x9C :
+ return "\x77";
+ break;
+ case 0x9D :
+ return "\x78";
+ break;
+ case 0x9E :
+ return "\x79";
+ break;
+ case 0x9F :
+ return "\x7A";
+ break;
+ case 0xA0 :
+ return "\x61";
+ break;
+ case 0xA1 :
+ return "\x62";
+ break;
+ case 0xA2 :
+ return "\x63";
+ break;
+ case 0xA3 :
+ return "\x64";
+ break;
+ case 0xA4 :
+ return "\x65";
+ break;
+ case 0xA5 :
+ return "\x66";
+ break;
+ case 0xA6 :
+ return "\x67";
+ break;
+ case 0xA7 :
+ return "\x68";
+ break;
+ case 0xA8 :
+ return "\x69";
+ break;
+ case 0xA9 :
+ return "\x6A";
+ break;
+ case 0xAA :
+ return "\x6B";
+ break;
+ case 0xAB :
+ return "\x6C";
+ break;
+ case 0xAC :
+ return "\x6D";
+ break;
+ case 0xAD :
+ return "\x6E";
+ break;
+ case 0xAE :
+ return "\x6F";
+ break;
+ case 0xAF :
+ return "\x70";
+ break;
+ case 0xB0 :
+ return "\x71";
+ break;
+ case 0xB1 :
+ return "\x72";
+ break;
+ case 0xB2 :
+ return "\x73";
+ break;
+ case 0xB3 :
+ return "\x74";
+ break;
+ case 0xB4 :
+ return "\x75";
+ break;
+ case 0xB5 :
+ return "\x76";
+ break;
+ case 0xB6 :
+ return "\x77";
+ break;
+ case 0xB7 :
+ return "\x78";
+ break;
+ case 0xB8 :
+ return "\x79";
+ break;
+ case 0xB9 :
+ return "\x7A";
+ break;
+ case 0xBA :
+ return "\x61";
+ break;
+ case 0xBB :
+ return "\x62";
+ break;
+ case 0xBC :
+ return "\x63";
+ break;
+ case 0xBD :
+ return "\x64";
+ break;
+ case 0xBE :
+ return "\x65";
+ break;
+ case 0xBF :
+ return "\x66";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x67";
+ break;
+ case 0x81 :
+ return "\x68";
+ break;
+ case 0x82 :
+ return "\x69";
+ break;
+ case 0x83 :
+ return "\x6A";
+ break;
+ case 0x84 :
+ return "\x6B";
+ break;
+ case 0x85 :
+ return "\x6C";
+ break;
+ case 0x86 :
+ return "\x6D";
+ break;
+ case 0x87 :
+ return "\x6E";
+ break;
+ case 0x88 :
+ return "\x6F";
+ break;
+ case 0x89 :
+ return "\x70";
+ break;
+ case 0x8A :
+ return "\x71";
+ break;
+ case 0x8B :
+ return "\x72";
+ break;
+ case 0x8C :
+ return "\x73";
+ break;
+ case 0x8D :
+ return "\x74";
+ break;
+ case 0x8E :
+ return "\x75";
+ break;
+ case 0x8F :
+ return "\x76";
+ break;
+ case 0x90 :
+ return "\x77";
+ break;
+ case 0x91 :
+ return "\x78";
+ break;
+ case 0x92 :
+ return "\x79";
+ break;
+ case 0x93 :
+ return "\x7A";
+ break;
+ case 0x94 :
+ return "\x61";
+ break;
+ case 0x95 :
+ return "\x62";
+ break;
+ case 0x96 :
+ return "\x63";
+ break;
+ case 0x97 :
+ return "\x64";
+ break;
+ case 0x98 :
+ return "\x65";
+ break;
+ case 0x99 :
+ return "\x66";
+ break;
+ case 0x9A :
+ return "\x67";
+ break;
+ case 0x9B :
+ return "\x68";
+ break;
+ case 0x9C :
+ return "\x69";
+ break;
+ case 0x9D :
+ return "\x6A";
+ break;
+ case 0x9E :
+ return "\x6B";
+ break;
+ case 0x9F :
+ return "\x6C";
+ break;
+ case 0xA0 :
+ return "\x6D";
+ break;
+ case 0xA1 :
+ return "\x6E";
+ break;
+ case 0xA2 :
+ return "\x6F";
+ break;
+ case 0xA3 :
+ return "\x70";
+ break;
+ case 0xA4 :
+ return "\x71";
+ break;
+ case 0xA5 :
+ return "\x72";
+ break;
+ case 0xA6 :
+ return "\x73";
+ break;
+ case 0xA7 :
+ return "\x74";
+ break;
+ case 0xA8 :
+ return "\x75";
+ break;
+ case 0xA9 :
+ return "\x76";
+ break;
+ case 0xAA :
+ return "\x77";
+ break;
+ case 0xAB :
+ return "\x78";
+ break;
+ case 0xAC :
+ return "\x79";
+ break;
+ case 0xAD :
+ return "\x7A";
+ break;
+ case 0xAE :
+ return "\x61";
+ break;
+ case 0xAF :
+ return "\x62";
+ break;
+ case 0xB0 :
+ return "\x63";
+ break;
+ case 0xB1 :
+ return "\x64";
+ break;
+ case 0xB2 :
+ return "\x65";
+ break;
+ case 0xB3 :
+ return "\x66";
+ break;
+ case 0xB4 :
+ return "\x67";
+ break;
+ case 0xB5 :
+ return "\x68";
+ break;
+ case 0xB6 :
+ return "\x69";
+ break;
+ case 0xB7 :
+ return "\x6A";
+ break;
+ case 0xB8 :
+ return "\x6B";
+ break;
+ case 0xB9 :
+ return "\x6C";
+ break;
+ case 0xBA :
+ return "\x6D";
+ break;
+ case 0xBB :
+ return "\x6E";
+ break;
+ case 0xBC :
+ return "\x6F";
+ break;
+ case 0xBD :
+ return "\x70";
+ break;
+ case 0xBE :
+ return "\x71";
+ break;
+ case 0xBF :
+ return "\x72";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x73";
+ break;
+ case 0x81 :
+ return "\x74";
+ break;
+ case 0x82 :
+ return "\x75";
+ break;
+ case 0x83 :
+ return "\x76";
+ break;
+ case 0x84 :
+ return "\x77";
+ break;
+ case 0x85 :
+ return "\x78";
+ break;
+ case 0x86 :
+ return "\x79";
+ break;
+ case 0x87 :
+ return "\x7A";
+ break;
+ case 0x88 :
+ return "\x61";
+ break;
+ case 0x89 :
+ return "\x62";
+ break;
+ case 0x8A :
+ return "\x63";
+ break;
+ case 0x8B :
+ return "\x64";
+ break;
+ case 0x8C :
+ return "\x65";
+ break;
+ case 0x8D :
+ return "\x66";
+ break;
+ case 0x8E :
+ return "\x67";
+ break;
+ case 0x8F :
+ return "\x68";
+ break;
+ case 0x90 :
+ return "\x69";
+ break;
+ case 0x91 :
+ return "\x6A";
+ break;
+ case 0x92 :
+ return "\x6B";
+ break;
+ case 0x93 :
+ return "\x6C";
+ break;
+ case 0x94 :
+ return "\x6D";
+ break;
+ case 0x95 :
+ return "\x6E";
+ break;
+ case 0x96 :
+ return "\x6F";
+ break;
+ case 0x97 :
+ return "\x70";
+ break;
+ case 0x98 :
+ return "\x71";
+ break;
+ case 0x99 :
+ return "\x72";
+ break;
+ case 0x9A :
+ return "\x73";
+ break;
+ case 0x9B :
+ return "\x74";
+ break;
+ case 0x9C :
+ return "\x75";
+ break;
+ case 0x9D :
+ return "\x76";
+ break;
+ case 0x9E :
+ return "\x77";
+ break;
+ case 0x9F :
+ return "\x78";
+ break;
+ case 0xA0 :
+ return "\x79";
+ break;
+ case 0xA1 :
+ return "\x7A";
+ break;
+ case 0xA2 :
+ return "\x61";
+ break;
+ case 0xA3 :
+ return "\x62";
+ break;
+ case 0xA4 :
+ return "\x63";
+ break;
+ case 0xA5 :
+ return "\x64";
+ break;
+ case 0xA6 :
+ return "\x65";
+ break;
+ case 0xA7 :
+ return "\x66";
+ break;
+ case 0xA8 :
+ return "\x67";
+ break;
+ case 0xA9 :
+ return "\x68";
+ break;
+ case 0xAA :
+ return "\x69";
+ break;
+ case 0xAB :
+ return "\x6A";
+ break;
+ case 0xAC :
+ return "\x6B";
+ break;
+ case 0xAD :
+ return "\x6C";
+ break;
+ case 0xAE :
+ return "\x6D";
+ break;
+ case 0xAF :
+ return "\x6E";
+ break;
+ case 0xB0 :
+ return "\x6F";
+ break;
+ case 0xB1 :
+ return "\x70";
+ break;
+ case 0xB2 :
+ return "\x71";
+ break;
+ case 0xB3 :
+ return "\x72";
+ break;
+ case 0xB4 :
+ return "\x73";
+ break;
+ case 0xB5 :
+ return "\x74";
+ break;
+ case 0xB6 :
+ return "\x75";
+ break;
+ case 0xB7 :
+ return "\x76";
+ break;
+ case 0xB8 :
+ return "\x77";
+ break;
+ case 0xB9 :
+ return "\x78";
+ break;
+ case 0xBA :
+ return "\x79";
+ break;
+ case 0xBB :
+ return "\x7A";
+ break;
+ case 0xBC :
+ return "\x61";
+ break;
+ case 0xBD :
+ return "\x62";
+ break;
+ case 0xBE :
+ return "\x63";
+ break;
+ case 0xBF :
+ return "\x64";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x65";
+ break;
+ case 0x81 :
+ return "\x66";
+ break;
+ case 0x82 :
+ return "\x67";
+ break;
+ case 0x83 :
+ return "\x68";
+ break;
+ case 0x84 :
+ return "\x69";
+ break;
+ case 0x85 :
+ return "\x6A";
+ break;
+ case 0x86 :
+ return "\x6B";
+ break;
+ case 0x87 :
+ return "\x6C";
+ break;
+ case 0x88 :
+ return "\x6D";
+ break;
+ case 0x89 :
+ return "\x6E";
+ break;
+ case 0x8A :
+ return "\x6F";
+ break;
+ case 0x8B :
+ return "\x70";
+ break;
+ case 0x8C :
+ return "\x71";
+ break;
+ case 0x8D :
+ return "\x72";
+ break;
+ case 0x8E :
+ return "\x73";
+ break;
+ case 0x8F :
+ return "\x74";
+ break;
+ case 0x90 :
+ return "\x75";
+ break;
+ case 0x91 :
+ return "\x76";
+ break;
+ case 0x92 :
+ return "\x77";
+ break;
+ case 0x93 :
+ return "\x78";
+ break;
+ case 0x94 :
+ return "\x79";
+ break;
+ case 0x95 :
+ return "\x7A";
+ break;
+ case 0x96 :
+ return "\x61";
+ break;
+ case 0x97 :
+ return "\x62";
+ break;
+ case 0x98 :
+ return "\x63";
+ break;
+ case 0x99 :
+ return "\x64";
+ break;
+ case 0x9A :
+ return "\x65";
+ break;
+ case 0x9B :
+ return "\x66";
+ break;
+ case 0x9C :
+ return "\x67";
+ break;
+ case 0x9D :
+ return "\x68";
+ break;
+ case 0x9E :
+ return "\x69";
+ break;
+ case 0x9F :
+ return "\x6A";
+ break;
+ case 0xA0 :
+ return "\x6B";
+ break;
+ case 0xA1 :
+ return "\x6C";
+ break;
+ case 0xA2 :
+ return "\x6D";
+ break;
+ case 0xA3 :
+ return "\x6E";
+ break;
+ case 0xA4 :
+ return "\x6F";
+ break;
+ case 0xA5 :
+ return "\x70";
+ break;
+ case 0xA6 :
+ return "\x71";
+ break;
+ case 0xA7 :
+ return "\x72";
+ break;
+ case 0xA8 :
+ return "\x73";
+ break;
+ case 0xA9 :
+ return "\x74";
+ break;
+ case 0xAA :
+ return "\x75";
+ break;
+ case 0xAB :
+ return "\x76";
+ break;
+ case 0xAC :
+ return "\x77";
+ break;
+ case 0xAD :
+ return "\x78";
+ break;
+ case 0xAE :
+ return "\x79";
+ break;
+ case 0xAF :
+ return "\x7A";
+ break;
+ case 0xB0 :
+ return "\x61";
+ break;
+ case 0xB1 :
+ return "\x62";
+ break;
+ case 0xB2 :
+ return "\x63";
+ break;
+ case 0xB3 :
+ return "\x64";
+ break;
+ case 0xB4 :
+ return "\x65";
+ break;
+ case 0xB5 :
+ return "\x66";
+ break;
+ case 0xB6 :
+ return "\x67";
+ break;
+ case 0xB7 :
+ return "\x68";
+ break;
+ case 0xB8 :
+ return "\x69";
+ break;
+ case 0xB9 :
+ return "\x6A";
+ break;
+ case 0xBA :
+ return "\x6B";
+ break;
+ case 0xBB :
+ return "\x6C";
+ break;
+ case 0xBC :
+ return "\x6D";
+ break;
+ case 0xBD :
+ return "\x6E";
+ break;
+ case 0xBE :
+ return "\x6F";
+ break;
+ case 0xBF :
+ return "\x70";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (str[3]) {
+ case 0x80 :
+ return "\x71";
+ break;
+ case 0x81 :
+ return "\x72";
+ break;
+ case 0x82 :
+ return "\x73";
+ break;
+ case 0x83 :
+ return "\x74";
+ break;
+ case 0x84 :
+ return "\x75";
+ break;
+ case 0x85 :
+ return "\x76";
+ break;
+ case 0x86 :
+ return "\x77";
+ break;
+ case 0x87 :
+ return "\x78";
+ break;
+ case 0x88 :
+ return "\x79";
+ break;
+ case 0x89 :
+ return "\x7A";
+ break;
+ case 0x8A :
+ return "\x61";
+ break;
+ case 0x8B :
+ return "\x62";
+ break;
+ case 0x8C :
+ return "\x63";
+ break;
+ case 0x8D :
+ return "\x64";
+ break;
+ case 0x8E :
+ return "\x65";
+ break;
+ case 0x8F :
+ return "\x66";
+ break;
+ case 0x90 :
+ return "\x67";
+ break;
+ case 0x91 :
+ return "\x68";
+ break;
+ case 0x92 :
+ return "\x69";
+ break;
+ case 0x93 :
+ return "\x6A";
+ break;
+ case 0x94 :
+ return "\x6B";
+ break;
+ case 0x95 :
+ return "\x6C";
+ break;
+ case 0x96 :
+ return "\x6D";
+ break;
+ case 0x97 :
+ return "\x6E";
+ break;
+ case 0x98 :
+ return "\x6F";
+ break;
+ case 0x99 :
+ return "\x70";
+ break;
+ case 0x9A :
+ return "\x71";
+ break;
+ case 0x9B :
+ return "\x72";
+ break;
+ case 0x9C :
+ return "\x73";
+ break;
+ case 0x9D :
+ return "\x74";
+ break;
+ case 0x9E :
+ return "\x75";
+ break;
+ case 0x9F :
+ return "\x76";
+ break;
+ case 0xA0 :
+ return "\x77";
+ break;
+ case 0xA1 :
+ return "\x78";
+ break;
+ case 0xA2 :
+ return "\x79";
+ break;
+ case 0xA3 :
+ return "\x7A";
+ break;
+ case 0xA4 :
+ return "\xC4\xB1";
+ break;
+ case 0xA5 :
+ return "\xC8\xB7";
+ break;
+ case 0xA8 :
+ return "\xCE\x91";
+ break;
+ case 0xA9 :
+ return "\xCE\x92";
+ break;
+ case 0xAA :
+ return "\xCE\x93";
+ break;
+ case 0xAB :
+ return "\xCE\x94";
+ break;
+ case 0xAC :
+ return "\xCE\x95";
+ break;
+ case 0xAD :
+ return "\xCE\x96";
+ break;
+ case 0xAE :
+ return "\xCE\x97";
+ break;
+ case 0xAF :
+ return "\xCE\x98";
+ break;
+ case 0xB0 :
+ return "\xCE\x99";
+ break;
+ case 0xB1 :
+ return "\xCE\x9A";
+ break;
+ case 0xB2 :
+ return "\xCE\x9B";
+ break;
+ case 0xB3 :
+ return "\xCE\x9C";
+ break;
+ case 0xB4 :
+ return "\xCE\x9D";
+ break;
+ case 0xB5 :
+ return "\xCE\x9E";
+ break;
+ case 0xB6 :
+ return "\xCE\x9F";
+ break;
+ case 0xB7 :
+ return "\xCE\xA0";
+ break;
+ case 0xB8 :
+ return "\xCE\xA1";
+ break;
+ case 0xB9 :
+ return "\xCE\x98";
+ break;
+ case 0xBA :
+ return "\xCE\xA3";
+ break;
+ case 0xBB :
+ return "\xCE\xA4";
+ break;
+ case 0xBC :
+ return "\xCE\xA5";
+ break;
+ case 0xBD :
+ return "\xCE\xA6";
+ break;
+ case 0xBE :
+ return "\xCE\xA7";
+ break;
+ case 0xBF :
+ return "\xCE\xA8";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xCE\xA9";
+ break;
+ case 0x81 :
+ return "\xE2\x88\x87";
+ break;
+ case 0x82 :
+ return "\xCE\xB1";
+ break;
+ case 0x83 :
+ return "\xCE\xB2";
+ break;
+ case 0x84 :
+ return "\xCE\xB3";
+ break;
+ case 0x85 :
+ return "\xCE\xB4";
+ break;
+ case 0x86 :
+ return "\xCE\xB5";
+ break;
+ case 0x87 :
+ return "\xCE\xB6";
+ break;
+ case 0x88 :
+ return "\xCE\xB7";
+ break;
+ case 0x89 :
+ return "\xCE\xB8";
+ break;
+ case 0x8A :
+ return "\xCE\xB9";
+ break;
+ case 0x8B :
+ return "\xCE\xBA";
+ break;
+ case 0x8C :
+ return "\xCE\xBB";
+ break;
+ case 0x8D :
+ return "\xCE\xBC";
+ break;
+ case 0x8E :
+ return "\xCE\xBD";
+ break;
+ case 0x8F :
+ return "\xCE\xBE";
+ break;
+ case 0x90 :
+ return "\xCE\xBF";
+ break;
+ case 0x91 :
+ return "\xCF\x80";
+ break;
+ case 0x92 :
+ return "\xCF\x81";
+ break;
+ case 0x93 :
+ return "\xCF\x82";
+ break;
+ case 0x94 :
+ return "\xCF\x83";
+ break;
+ case 0x95 :
+ return "\xCF\x84";
+ break;
+ case 0x96 :
+ return "\xCF\x85";
+ break;
+ case 0x97 :
+ return "\xCF\x86";
+ break;
+ case 0x98 :
+ return "\xCF\x87";
+ break;
+ case 0x99 :
+ return "\xCF\x88";
+ break;
+ case 0x9A :
+ return "\xCF\x89";
+ break;
+ case 0x9B :
+ return "\xE2\x88\x82";
+ break;
+ case 0x9C :
+ return "\xCE\xB5";
+ break;
+ case 0x9D :
+ return "\xCE\xB8";
+ break;
+ case 0x9E :
+ return "\xCE\xBA";
+ break;
+ case 0x9F :
+ return "\xCF\x86";
+ break;
+ case 0xA0 :
+ return "\xCF\x81";
+ break;
+ case 0xA1 :
+ return "\xCF\x80";
+ break;
+ case 0xA2 :
+ return "\xCE\x91";
+ break;
+ case 0xA3 :
+ return "\xCE\x92";
+ break;
+ case 0xA4 :
+ return "\xCE\x93";
+ break;
+ case 0xA5 :
+ return "\xCE\x94";
+ break;
+ case 0xA6 :
+ return "\xCE\x95";
+ break;
+ case 0xA7 :
+ return "\xCE\x96";
+ break;
+ case 0xA8 :
+ return "\xCE\x97";
+ break;
+ case 0xA9 :
+ return "\xCE\x98";
+ break;
+ case 0xAA :
+ return "\xCE\x99";
+ break;
+ case 0xAB :
+ return "\xCE\x9A";
+ break;
+ case 0xAC :
+ return "\xCE\x9B";
+ break;
+ case 0xAD :
+ return "\xCE\x9C";
+ break;
+ case 0xAE :
+ return "\xCE\x9D";
+ break;
+ case 0xAF :
+ return "\xCE\x9E";
+ break;
+ case 0xB0 :
+ return "\xCE\x9F";
+ break;
+ case 0xB1 :
+ return "\xCE\xA0";
+ break;
+ case 0xB2 :
+ return "\xCE\xA1";
+ break;
+ case 0xB3 :
+ return "\xCE\x98";
+ break;
+ case 0xB4 :
+ return "\xCE\xA3";
+ break;
+ case 0xB5 :
+ return "\xCE\xA4";
+ break;
+ case 0xB6 :
+ return "\xCE\xA5";
+ break;
+ case 0xB7 :
+ return "\xCE\xA6";
+ break;
+ case 0xB8 :
+ return "\xCE\xA7";
+ break;
+ case 0xB9 :
+ return "\xCE\xA8";
+ break;
+ case 0xBA :
+ return "\xCE\xA9";
+ break;
+ case 0xBB :
+ return "\xE2\x88\x87";
+ break;
+ case 0xBC :
+ return "\xCE\xB1";
+ break;
+ case 0xBD :
+ return "\xCE\xB2";
+ break;
+ case 0xBE :
+ return "\xCE\xB3";
+ break;
+ case 0xBF :
+ return "\xCE\xB4";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xCE\xB5";
+ break;
+ case 0x81 :
+ return "\xCE\xB6";
+ break;
+ case 0x82 :
+ return "\xCE\xB7";
+ break;
+ case 0x83 :
+ return "\xCE\xB8";
+ break;
+ case 0x84 :
+ return "\xCE\xB9";
+ break;
+ case 0x85 :
+ return "\xCE\xBA";
+ break;
+ case 0x86 :
+ return "\xCE\xBB";
+ break;
+ case 0x87 :
+ return "\xCE\xBC";
+ break;
+ case 0x88 :
+ return "\xCE\xBD";
+ break;
+ case 0x89 :
+ return "\xCE\xBE";
+ break;
+ case 0x8A :
+ return "\xCE\xBF";
+ break;
+ case 0x8B :
+ return "\xCF\x80";
+ break;
+ case 0x8C :
+ return "\xCF\x81";
+ break;
+ case 0x8D :
+ return "\xCF\x82";
+ break;
+ case 0x8E :
+ return "\xCF\x83";
+ break;
+ case 0x8F :
+ return "\xCF\x84";
+ break;
+ case 0x90 :
+ return "\xCF\x85";
+ break;
+ case 0x91 :
+ return "\xCF\x86";
+ break;
+ case 0x92 :
+ return "\xCF\x87";
+ break;
+ case 0x93 :
+ return "\xCF\x88";
+ break;
+ case 0x94 :
+ return "\xCF\x89";
+ break;
+ case 0x95 :
+ return "\xE2\x88\x82";
+ break;
+ case 0x96 :
+ return "\xCE\xB5";
+ break;
+ case 0x97 :
+ return "\xCE\xB8";
+ break;
+ case 0x98 :
+ return "\xCE\xBA";
+ break;
+ case 0x99 :
+ return "\xCF\x86";
+ break;
+ case 0x9A :
+ return "\xCF\x81";
+ break;
+ case 0x9B :
+ return "\xCF\x80";
+ break;
+ case 0x9C :
+ return "\xCE\x91";
+ break;
+ case 0x9D :
+ return "\xCE\x92";
+ break;
+ case 0x9E :
+ return "\xCE\x93";
+ break;
+ case 0x9F :
+ return "\xCE\x94";
+ break;
+ case 0xA0 :
+ return "\xCE\x95";
+ break;
+ case 0xA1 :
+ return "\xCE\x96";
+ break;
+ case 0xA2 :
+ return "\xCE\x97";
+ break;
+ case 0xA3 :
+ return "\xCE\x98";
+ break;
+ case 0xA4 :
+ return "\xCE\x99";
+ break;
+ case 0xA5 :
+ return "\xCE\x9A";
+ break;
+ case 0xA6 :
+ return "\xCE\x9B";
+ break;
+ case 0xA7 :
+ return "\xCE\x9C";
+ break;
+ case 0xA8 :
+ return "\xCE\x9D";
+ break;
+ case 0xA9 :
+ return "\xCE\x9E";
+ break;
+ case 0xAA :
+ return "\xCE\x9F";
+ break;
+ case 0xAB :
+ return "\xCE\xA0";
+ break;
+ case 0xAC :
+ return "\xCE\xA1";
+ break;
+ case 0xAD :
+ return "\xCE\x98";
+ break;
+ case 0xAE :
+ return "\xCE\xA3";
+ break;
+ case 0xAF :
+ return "\xCE\xA4";
+ break;
+ case 0xB0 :
+ return "\xCE\xA5";
+ break;
+ case 0xB1 :
+ return "\xCE\xA6";
+ break;
+ case 0xB2 :
+ return "\xCE\xA7";
+ break;
+ case 0xB3 :
+ return "\xCE\xA8";
+ break;
+ case 0xB4 :
+ return "\xCE\xA9";
+ break;
+ case 0xB5 :
+ return "\xE2\x88\x87";
+ break;
+ case 0xB6 :
+ return "\xCE\xB1";
+ break;
+ case 0xB7 :
+ return "\xCE\xB2";
+ break;
+ case 0xB8 :
+ return "\xCE\xB3";
+ break;
+ case 0xB9 :
+ return "\xCE\xB4";
+ break;
+ case 0xBA :
+ return "\xCE\xB5";
+ break;
+ case 0xBB :
+ return "\xCE\xB6";
+ break;
+ case 0xBC :
+ return "\xCE\xB7";
+ break;
+ case 0xBD :
+ return "\xCE\xB8";
+ break;
+ case 0xBE :
+ return "\xCE\xB9";
+ break;
+ case 0xBF :
+ return "\xCE\xBA";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xCE\xBB";
+ break;
+ case 0x81 :
+ return "\xCE\xBC";
+ break;
+ case 0x82 :
+ return "\xCE\xBD";
+ break;
+ case 0x83 :
+ return "\xCE\xBE";
+ break;
+ case 0x84 :
+ return "\xCE\xBF";
+ break;
+ case 0x85 :
+ return "\xCF\x80";
+ break;
+ case 0x86 :
+ return "\xCF\x81";
+ break;
+ case 0x87 :
+ return "\xCF\x82";
+ break;
+ case 0x88 :
+ return "\xCF\x83";
+ break;
+ case 0x89 :
+ return "\xCF\x84";
+ break;
+ case 0x8A :
+ return "\xCF\x85";
+ break;
+ case 0x8B :
+ return "\xCF\x86";
+ break;
+ case 0x8C :
+ return "\xCF\x87";
+ break;
+ case 0x8D :
+ return "\xCF\x88";
+ break;
+ case 0x8E :
+ return "\xCF\x89";
+ break;
+ case 0x8F :
+ return "\xE2\x88\x82";
+ break;
+ case 0x90 :
+ return "\xCE\xB5";
+ break;
+ case 0x91 :
+ return "\xCE\xB8";
+ break;
+ case 0x92 :
+ return "\xCE\xBA";
+ break;
+ case 0x93 :
+ return "\xCF\x86";
+ break;
+ case 0x94 :
+ return "\xCF\x81";
+ break;
+ case 0x95 :
+ return "\xCF\x80";
+ break;
+ case 0x96 :
+ return "\xCE\x91";
+ break;
+ case 0x97 :
+ return "\xCE\x92";
+ break;
+ case 0x98 :
+ return "\xCE\x93";
+ break;
+ case 0x99 :
+ return "\xCE\x94";
+ break;
+ case 0x9A :
+ return "\xCE\x95";
+ break;
+ case 0x9B :
+ return "\xCE\x96";
+ break;
+ case 0x9C :
+ return "\xCE\x97";
+ break;
+ case 0x9D :
+ return "\xCE\x98";
+ break;
+ case 0x9E :
+ return "\xCE\x99";
+ break;
+ case 0x9F :
+ return "\xCE\x9A";
+ break;
+ case 0xA0 :
+ return "\xCE\x9B";
+ break;
+ case 0xA1 :
+ return "\xCE\x9C";
+ break;
+ case 0xA2 :
+ return "\xCE\x9D";
+ break;
+ case 0xA3 :
+ return "\xCE\x9E";
+ break;
+ case 0xA4 :
+ return "\xCE\x9F";
+ break;
+ case 0xA5 :
+ return "\xCE\xA0";
+ break;
+ case 0xA6 :
+ return "\xCE\xA1";
+ break;
+ case 0xA7 :
+ return "\xCE\x98";
+ break;
+ case 0xA8 :
+ return "\xCE\xA3";
+ break;
+ case 0xA9 :
+ return "\xCE\xA4";
+ break;
+ case 0xAA :
+ return "\xCE\xA5";
+ break;
+ case 0xAB :
+ return "\xCE\xA6";
+ break;
+ case 0xAC :
+ return "\xCE\xA7";
+ break;
+ case 0xAD :
+ return "\xCE\xA8";
+ break;
+ case 0xAE :
+ return "\xCE\xA9";
+ break;
+ case 0xAF :
+ return "\xE2\x88\x87";
+ break;
+ case 0xB0 :
+ return "\xCE\xB1";
+ break;
+ case 0xB1 :
+ return "\xCE\xB2";
+ break;
+ case 0xB2 :
+ return "\xCE\xB3";
+ break;
+ case 0xB3 :
+ return "\xCE\xB4";
+ break;
+ case 0xB4 :
+ return "\xCE\xB5";
+ break;
+ case 0xB5 :
+ return "\xCE\xB6";
+ break;
+ case 0xB6 :
+ return "\xCE\xB7";
+ break;
+ case 0xB7 :
+ return "\xCE\xB8";
+ break;
+ case 0xB8 :
+ return "\xCE\xB9";
+ break;
+ case 0xB9 :
+ return "\xCE\xBA";
+ break;
+ case 0xBA :
+ return "\xCE\xBB";
+ break;
+ case 0xBB :
+ return "\xCE\xBC";
+ break;
+ case 0xBC :
+ return "\xCE\xBD";
+ break;
+ case 0xBD :
+ return "\xCE\xBE";
+ break;
+ case 0xBE :
+ return "\xCE\xBF";
+ break;
+ case 0xBF :
+ return "\xCF\x80";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xCF\x81";
+ break;
+ case 0x81 :
+ return "\xCF\x82";
+ break;
+ case 0x82 :
+ return "\xCF\x83";
+ break;
+ case 0x83 :
+ return "\xCF\x84";
+ break;
+ case 0x84 :
+ return "\xCF\x85";
+ break;
+ case 0x85 :
+ return "\xCF\x86";
+ break;
+ case 0x86 :
+ return "\xCF\x87";
+ break;
+ case 0x87 :
+ return "\xCF\x88";
+ break;
+ case 0x88 :
+ return "\xCF\x89";
+ break;
+ case 0x89 :
+ return "\xE2\x88\x82";
+ break;
+ case 0x8A :
+ return "\xCE\xB5";
+ break;
+ case 0x8B :
+ return "\xCE\xB8";
+ break;
+ case 0x8C :
+ return "\xCE\xBA";
+ break;
+ case 0x8D :
+ return "\xCF\x86";
+ break;
+ case 0x8E :
+ return "\xCF\x81";
+ break;
+ case 0x8F :
+ return "\xCF\x80";
+ break;
+ case 0x90 :
+ return "\xCE\x91";
+ break;
+ case 0x91 :
+ return "\xCE\x92";
+ break;
+ case 0x92 :
+ return "\xCE\x93";
+ break;
+ case 0x93 :
+ return "\xCE\x94";
+ break;
+ case 0x94 :
+ return "\xCE\x95";
+ break;
+ case 0x95 :
+ return "\xCE\x96";
+ break;
+ case 0x96 :
+ return "\xCE\x97";
+ break;
+ case 0x97 :
+ return "\xCE\x98";
+ break;
+ case 0x98 :
+ return "\xCE\x99";
+ break;
+ case 0x99 :
+ return "\xCE\x9A";
+ break;
+ case 0x9A :
+ return "\xCE\x9B";
+ break;
+ case 0x9B :
+ return "\xCE\x9C";
+ break;
+ case 0x9C :
+ return "\xCE\x9D";
+ break;
+ case 0x9D :
+ return "\xCE\x9E";
+ break;
+ case 0x9E :
+ return "\xCE\x9F";
+ break;
+ case 0x9F :
+ return "\xCE\xA0";
+ break;
+ case 0xA0 :
+ return "\xCE\xA1";
+ break;
+ case 0xA1 :
+ return "\xCE\x98";
+ break;
+ case 0xA2 :
+ return "\xCE\xA3";
+ break;
+ case 0xA3 :
+ return "\xCE\xA4";
+ break;
+ case 0xA4 :
+ return "\xCE\xA5";
+ break;
+ case 0xA5 :
+ return "\xCE\xA6";
+ break;
+ case 0xA6 :
+ return "\xCE\xA7";
+ break;
+ case 0xA7 :
+ return "\xCE\xA8";
+ break;
+ case 0xA8 :
+ return "\xCE\xA9";
+ break;
+ case 0xA9 :
+ return "\xE2\x88\x87";
+ break;
+ case 0xAA :
+ return "\xCE\xB1";
+ break;
+ case 0xAB :
+ return "\xCE\xB2";
+ break;
+ case 0xAC :
+ return "\xCE\xB3";
+ break;
+ case 0xAD :
+ return "\xCE\xB4";
+ break;
+ case 0xAE :
+ return "\xCE\xB5";
+ break;
+ case 0xAF :
+ return "\xCE\xB6";
+ break;
+ case 0xB0 :
+ return "\xCE\xB7";
+ break;
+ case 0xB1 :
+ return "\xCE\xB8";
+ break;
+ case 0xB2 :
+ return "\xCE\xB9";
+ break;
+ case 0xB3 :
+ return "\xCE\xBA";
+ break;
+ case 0xB4 :
+ return "\xCE\xBB";
+ break;
+ case 0xB5 :
+ return "\xCE\xBC";
+ break;
+ case 0xB6 :
+ return "\xCE\xBD";
+ break;
+ case 0xB7 :
+ return "\xCE\xBE";
+ break;
+ case 0xB8 :
+ return "\xCE\xBF";
+ break;
+ case 0xB9 :
+ return "\xCF\x80";
+ break;
+ case 0xBA :
+ return "\xCF\x81";
+ break;
+ case 0xBB :
+ return "\xCF\x82";
+ break;
+ case 0xBC :
+ return "\xCF\x83";
+ break;
+ case 0xBD :
+ return "\xCF\x84";
+ break;
+ case 0xBE :
+ return "\xCF\x85";
+ break;
+ case 0xBF :
+ return "\xCF\x86";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xCF\x87";
+ break;
+ case 0x81 :
+ return "\xCF\x88";
+ break;
+ case 0x82 :
+ return "\xCF\x89";
+ break;
+ case 0x83 :
+ return "\xE2\x88\x82";
+ break;
+ case 0x84 :
+ return "\xCE\xB5";
+ break;
+ case 0x85 :
+ return "\xCE\xB8";
+ break;
+ case 0x86 :
+ return "\xCE\xBA";
+ break;
+ case 0x87 :
+ return "\xCF\x86";
+ break;
+ case 0x88 :
+ return "\xCF\x81";
+ break;
+ case 0x89 :
+ return "\xCF\x80";
+ break;
+ case 0x8A :
+ return "\xCF\x9C";
+ break;
+ case 0x8B :
+ return "\xCF\x9D";
+ break;
+ case 0x8E :
+ return "\x30";
+ break;
+ case 0x8F :
+ return "\x31";
+ break;
+ case 0x90 :
+ return "\x32";
+ break;
+ case 0x91 :
+ return "\x33";
+ break;
+ case 0x92 :
+ return "\x34";
+ break;
+ case 0x93 :
+ return "\x35";
+ break;
+ case 0x94 :
+ return "\x36";
+ break;
+ case 0x95 :
+ return "\x37";
+ break;
+ case 0x96 :
+ return "\x38";
+ break;
+ case 0x97 :
+ return "\x39";
+ break;
+ case 0x98 :
+ return "\x30";
+ break;
+ case 0x99 :
+ return "\x31";
+ break;
+ case 0x9A :
+ return "\x32";
+ break;
+ case 0x9B :
+ return "\x33";
+ break;
+ case 0x9C :
+ return "\x34";
+ break;
+ case 0x9D :
+ return "\x35";
+ break;
+ case 0x9E :
+ return "\x36";
+ break;
+ case 0x9F :
+ return "\x37";
+ break;
+ case 0xA0 :
+ return "\x38";
+ break;
+ case 0xA1 :
+ return "\x39";
+ break;
+ case 0xA2 :
+ return "\x30";
+ break;
+ case 0xA3 :
+ return "\x31";
+ break;
+ case 0xA4 :
+ return "\x32";
+ break;
+ case 0xA5 :
+ return "\x33";
+ break;
+ case 0xA6 :
+ return "\x34";
+ break;
+ case 0xA7 :
+ return "\x35";
+ break;
+ case 0xA8 :
+ return "\x36";
+ break;
+ case 0xA9 :
+ return "\x37";
+ break;
+ case 0xAA :
+ return "\x38";
+ break;
+ case 0xAB :
+ return "\x39";
+ break;
+ case 0xAC :
+ return "\x30";
+ break;
+ case 0xAD :
+ return "\x31";
+ break;
+ case 0xAE :
+ return "\x32";
+ break;
+ case 0xAF :
+ return "\x33";
+ break;
+ case 0xB0 :
+ return "\x34";
+ break;
+ case 0xB1 :
+ return "\x35";
+ break;
+ case 0xB2 :
+ return "\x36";
+ break;
+ case 0xB3 :
+ return "\x37";
+ break;
+ case 0xB4 :
+ return "\x38";
+ break;
+ case 0xB5 :
+ return "\x39";
+ break;
+ case 0xB6 :
+ return "\x30";
+ break;
+ case 0xB7 :
+ return "\x31";
+ break;
+ case 0xB8 :
+ return "\x32";
+ break;
+ case 0xB9 :
+ return "\x33";
+ break;
+ case 0xBA :
+ return "\x34";
+ break;
+ case 0xBB :
+ return "\x35";
+ break;
+ case 0xBC :
+ return "\x36";
+ break;
+ case 0xBD :
+ return "\x37";
+ break;
+ case 0xBE :
+ return "\x38";
+ break;
+ case 0xBF :
+ return "\x39";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (str[2]) {
+ case 0xA0 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE4\xB8\xBD";
+ break;
+ case 0x81 :
+ return "\xE4\xB8\xB8";
+ break;
+ case 0x82 :
+ return "\xE4\xB9\x81";
+ break;
+ case 0x83 :
+ return "\xF0\xA0\x84\xA2";
+ break;
+ case 0x84 :
+ return "\xE4\xBD\xA0";
+ break;
+ case 0x85 :
+ return "\xE4\xBE\xAE";
+ break;
+ case 0x86 :
+ return "\xE4\xBE\xBB";
+ break;
+ case 0x87 :
+ return "\xE5\x80\x82";
+ break;
+ case 0x88 :
+ return "\xE5\x81\xBA";
+ break;
+ case 0x89 :
+ return "\xE5\x82\x99";
+ break;
+ case 0x8A :
+ return "\xE5\x83\xA7";
+ break;
+ case 0x8B :
+ return "\xE5\x83\x8F";
+ break;
+ case 0x8C :
+ return "\xE3\x92\x9E";
+ break;
+ case 0x8D :
+ return "\xF0\xA0\x98\xBA";
+ break;
+ case 0x8E :
+ return "\xE5\x85\x8D";
+ break;
+ case 0x8F :
+ return "\xE5\x85\x94";
+ break;
+ case 0x90 :
+ return "\xE5\x85\xA4";
+ break;
+ case 0x91 :
+ return "\xE5\x85\xB7";
+ break;
+ case 0x92 :
+ return "\xF0\xA0\x94\x9C";
+ break;
+ case 0x93 :
+ return "\xE3\x92\xB9";
+ break;
+ case 0x94 :
+ return "\xE5\x85\xA7";
+ break;
+ case 0x95 :
+ return "\xE5\x86\x8D";
+ break;
+ case 0x96 :
+ return "\xF0\xA0\x95\x8B";
+ break;
+ case 0x97 :
+ return "\xE5\x86\x97";
+ break;
+ case 0x98 :
+ return "\xE5\x86\xA4";
+ break;
+ case 0x99 :
+ return "\xE4\xBB\x8C";
+ break;
+ case 0x9A :
+ return "\xE5\x86\xAC";
+ break;
+ case 0x9B :
+ return "\xE5\x86\xB5";
+ break;
+ case 0x9C :
+ return "\xF0\xA9\x87\x9F";
+ break;
+ case 0x9D :
+ return "\xE5\x87\xB5";
+ break;
+ case 0x9E :
+ return "\xE5\x88\x83";
+ break;
+ case 0x9F :
+ return "\xE3\x93\x9F";
+ break;
+ case 0xA0 :
+ return "\xE5\x88\xBB";
+ break;
+ case 0xA1 :
+ return "\xE5\x89\x86";
+ break;
+ case 0xA2 :
+ return "\xE5\x89\xB2";
+ break;
+ case 0xA3 :
+ return "\xE5\x89\xB7";
+ break;
+ case 0xA4 :
+ return "\xE3\x94\x95";
+ break;
+ case 0xA5 :
+ return "\xE5\x8B\x87";
+ break;
+ case 0xA6 :
+ return "\xE5\x8B\x89";
+ break;
+ case 0xA7 :
+ return "\xE5\x8B\xA4";
+ break;
+ case 0xA8 :
+ return "\xE5\x8B\xBA";
+ break;
+ case 0xA9 :
+ return "\xE5\x8C\x85";
+ break;
+ case 0xAA :
+ return "\xE5\x8C\x86";
+ break;
+ case 0xAB :
+ return "\xE5\x8C\x97";
+ break;
+ case 0xAC :
+ return "\xE5\x8D\x89";
+ break;
+ case 0xAD :
+ return "\xE5\x8D\x91";
+ break;
+ case 0xAE :
+ return "\xE5\x8D\x9A";
+ break;
+ case 0xAF :
+ return "\xE5\x8D\xB3";
+ break;
+ case 0xB0 :
+ return "\xE5\x8D\xBD";
+ break;
+ case 0xB1 :
+ return "\xE5\x8D\xBF";
+ break;
+ case 0xB2 :
+ return "\xE5\x8D\xBF";
+ break;
+ case 0xB3 :
+ return "\xE5\x8D\xBF";
+ break;
+ case 0xB4 :
+ return "\xF0\xA0\xA8\xAC";
+ break;
+ case 0xB5 :
+ return "\xE7\x81\xB0";
+ break;
+ case 0xB6 :
+ return "\xE5\x8F\x8A";
+ break;
+ case 0xB7 :
+ return "\xE5\x8F\x9F";
+ break;
+ case 0xB8 :
+ return "\xF0\xA0\xAD\xA3";
+ break;
+ case 0xB9 :
+ return "\xE5\x8F\xAB";
+ break;
+ case 0xBA :
+ return "\xE5\x8F\xB1";
+ break;
+ case 0xBB :
+ return "\xE5\x90\x86";
+ break;
+ case 0xBC :
+ return "\xE5\x92\x9E";
+ break;
+ case 0xBD :
+ return "\xE5\x90\xB8";
+ break;
+ case 0xBE :
+ return "\xE5\x91\x88";
+ break;
+ case 0xBF :
+ return "\xE5\x91\xA8";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE5\x92\xA2";
+ break;
+ case 0x81 :
+ return "\xE5\x93\xB6";
+ break;
+ case 0x82 :
+ return "\xE5\x94\x90";
+ break;
+ case 0x83 :
+ return "\xE5\x95\x93";
+ break;
+ case 0x84 :
+ return "\xE5\x95\xA3";
+ break;
+ case 0x85 :
+ return "\xE5\x96\x84";
+ break;
+ case 0x86 :
+ return "\xE5\x96\x84";
+ break;
+ case 0x87 :
+ return "\xE5\x96\x99";
+ break;
+ case 0x88 :
+ return "\xE5\x96\xAB";
+ break;
+ case 0x89 :
+ return "\xE5\x96\xB3";
+ break;
+ case 0x8A :
+ return "\xE5\x97\x82";
+ break;
+ case 0x8B :
+ return "\xE5\x9C\x96";
+ break;
+ case 0x8C :
+ return "\xE5\x98\x86";
+ break;
+ case 0x8D :
+ return "\xE5\x9C\x97";
+ break;
+ case 0x8E :
+ return "\xE5\x99\x91";
+ break;
+ case 0x8F :
+ return "\xE5\x99\xB4";
+ break;
+ case 0x90 :
+ return "\xE5\x88\x87";
+ break;
+ case 0x91 :
+ return "\xE5\xA3\xAE";
+ break;
+ case 0x92 :
+ return "\xE5\x9F\x8E";
+ break;
+ case 0x93 :
+ return "\xE5\x9F\xB4";
+ break;
+ case 0x94 :
+ return "\xE5\xA0\x8D";
+ break;
+ case 0x95 :
+ return "\xE5\x9E\x8B";
+ break;
+ case 0x96 :
+ return "\xE5\xA0\xB2";
+ break;
+ case 0x97 :
+ return "\xE5\xA0\xB1";
+ break;
+ case 0x98 :
+ return "\xE5\xA2\xAC";
+ break;
+ case 0x99 :
+ return "\xF0\xA1\x93\xA4";
+ break;
+ case 0x9A :
+ return "\xE5\xA3\xB2";
+ break;
+ case 0x9B :
+ return "\xE5\xA3\xB7";
+ break;
+ case 0x9C :
+ return "\xE5\xA4\x86";
+ break;
+ case 0x9D :
+ return "\xE5\xA4\x9A";
+ break;
+ case 0x9E :
+ return "\xE5\xA4\xA2";
+ break;
+ case 0x9F :
+ return "\xE5\xA5\xA2";
+ break;
+ case 0xA0 :
+ return "\xF0\xA1\x9A\xA8";
+ break;
+ case 0xA1 :
+ return "\xF0\xA1\x9B\xAA";
+ break;
+ case 0xA2 :
+ return "\xE5\xA7\xAC";
+ break;
+ case 0xA3 :
+ return "\xE5\xA8\x9B";
+ break;
+ case 0xA4 :
+ return "\xE5\xA8\xA7";
+ break;
+ case 0xA5 :
+ return "\xE5\xA7\x98";
+ break;
+ case 0xA6 :
+ return "\xE5\xA9\xA6";
+ break;
+ case 0xA7 :
+ return "\xE3\x9B\xAE";
+ break;
+ case 0xA8 :
+ return "\xE3\x9B\xBC";
+ break;
+ case 0xA9 :
+ return "\xE5\xAC\x88";
+ break;
+ case 0xAA :
+ return "\xE5\xAC\xBE";
+ break;
+ case 0xAB :
+ return "\xE5\xAC\xBE";
+ break;
+ case 0xAC :
+ return "\xF0\xA1\xA7\x88";
+ break;
+ case 0xAD :
+ return "\xE5\xAF\x83";
+ break;
+ case 0xAE :
+ return "\xE5\xAF\x98";
+ break;
+ case 0xAF :
+ return "\xE5\xAF\xA7";
+ break;
+ case 0xB0 :
+ return "\xE5\xAF\xB3";
+ break;
+ case 0xB1 :
+ return "\xF0\xA1\xAC\x98";
+ break;
+ case 0xB2 :
+ return "\xE5\xAF\xBF";
+ break;
+ case 0xB3 :
+ return "\xE5\xB0\x86";
+ break;
+ case 0xB4 :
+ return "\xE5\xBD\x93";
+ break;
+ case 0xB5 :
+ return "\xE5\xB0\xA2";
+ break;
+ case 0xB6 :
+ return "\xE3\x9E\x81";
+ break;
+ case 0xB7 :
+ return "\xE5\xB1\xA0";
+ break;
+ case 0xB8 :
+ return "\xE5\xB1\xAE";
+ break;
+ case 0xB9 :
+ return "\xE5\xB3\x80";
+ break;
+ case 0xBA :
+ return "\xE5\xB2\x8D";
+ break;
+ case 0xBB :
+ return "\xF0\xA1\xB7\xA4";
+ break;
+ case 0xBC :
+ return "\xE5\xB5\x83";
+ break;
+ case 0xBD :
+ return "\xF0\xA1\xB7\xA6";
+ break;
+ case 0xBE :
+ return "\xE5\xB5\xAE";
+ break;
+ case 0xBF :
+ return "\xE5\xB5\xAB";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE5\xB5\xBC";
+ break;
+ case 0x81 :
+ return "\xE5\xB7\xA1";
+ break;
+ case 0x82 :
+ return "\xE5\xB7\xA2";
+ break;
+ case 0x83 :
+ return "\xE3\xA0\xAF";
+ break;
+ case 0x84 :
+ return "\xE5\xB7\xBD";
+ break;
+ case 0x85 :
+ return "\xE5\xB8\xA8";
+ break;
+ case 0x86 :
+ return "\xE5\xB8\xBD";
+ break;
+ case 0x87 :
+ return "\xE5\xB9\xA9";
+ break;
+ case 0x88 :
+ return "\xE3\xA1\xA2";
+ break;
+ case 0x89 :
+ return "\xF0\xA2\x86\x83";
+ break;
+ case 0x8A :
+ return "\xE3\xA1\xBC";
+ break;
+ case 0x8B :
+ return "\xE5\xBA\xB0";
+ break;
+ case 0x8C :
+ return "\xE5\xBA\xB3";
+ break;
+ case 0x8D :
+ return "\xE5\xBA\xB6";
+ break;
+ case 0x8E :
+ return "\xE5\xBB\x8A";
+ break;
+ case 0x8F :
+ return "\xF0\xAA\x8E\x92";
+ break;
+ case 0x90 :
+ return "\xE5\xBB\xBE";
+ break;
+ case 0x91 :
+ return "\xF0\xA2\x8C\xB1";
+ break;
+ case 0x92 :
+ return "\xF0\xA2\x8C\xB1";
+ break;
+ case 0x93 :
+ return "\xE8\x88\x81";
+ break;
+ case 0x94 :
+ return "\xE5\xBC\xA2";
+ break;
+ case 0x95 :
+ return "\xE5\xBC\xA2";
+ break;
+ case 0x96 :
+ return "\xE3\xA3\x87";
+ break;
+ case 0x97 :
+ return "\xF0\xA3\x8A\xB8";
+ break;
+ case 0x98 :
+ return "\xF0\xA6\x87\x9A";
+ break;
+ case 0x99 :
+ return "\xE5\xBD\xA2";
+ break;
+ case 0x9A :
+ return "\xE5\xBD\xAB";
+ break;
+ case 0x9B :
+ return "\xE3\xA3\xA3";
+ break;
+ case 0x9C :
+ return "\xE5\xBE\x9A";
+ break;
+ case 0x9D :
+ return "\xE5\xBF\x8D";
+ break;
+ case 0x9E :
+ return "\xE5\xBF\x97";
+ break;
+ case 0x9F :
+ return "\xE5\xBF\xB9";
+ break;
+ case 0xA0 :
+ return "\xE6\x82\x81";
+ break;
+ case 0xA1 :
+ return "\xE3\xA4\xBA";
+ break;
+ case 0xA2 :
+ return "\xE3\xA4\x9C";
+ break;
+ case 0xA3 :
+ return "\xE6\x82\x94";
+ break;
+ case 0xA4 :
+ return "\xF0\xA2\x9B\x94";
+ break;
+ case 0xA5 :
+ return "\xE6\x83\x87";
+ break;
+ case 0xA6 :
+ return "\xE6\x85\x88";
+ break;
+ case 0xA7 :
+ return "\xE6\x85\x8C";
+ break;
+ case 0xA8 :
+ return "\xE6\x85\x8E";
+ break;
+ case 0xA9 :
+ return "\xE6\x85\x8C";
+ break;
+ case 0xAA :
+ return "\xE6\x85\xBA";
+ break;
+ case 0xAB :
+ return "\xE6\x86\x8E";
+ break;
+ case 0xAC :
+ return "\xE6\x86\xB2";
+ break;
+ case 0xAD :
+ return "\xE6\x86\xA4";
+ break;
+ case 0xAE :
+ return "\xE6\x86\xAF";
+ break;
+ case 0xAF :
+ return "\xE6\x87\x9E";
+ break;
+ case 0xB0 :
+ return "\xE6\x87\xB2";
+ break;
+ case 0xB1 :
+ return "\xE6\x87\xB6";
+ break;
+ case 0xB2 :
+ return "\xE6\x88\x90";
+ break;
+ case 0xB3 :
+ return "\xE6\x88\x9B";
+ break;
+ case 0xB4 :
+ return "\xE6\x89\x9D";
+ break;
+ case 0xB5 :
+ return "\xE6\x8A\xB1";
+ break;
+ case 0xB6 :
+ return "\xE6\x8B\x94";
+ break;
+ case 0xB7 :
+ return "\xE6\x8D\x90";
+ break;
+ case 0xB8 :
+ return "\xF0\xA2\xAC\x8C";
+ break;
+ case 0xB9 :
+ return "\xE6\x8C\xBD";
+ break;
+ case 0xBA :
+ return "\xE6\x8B\xBC";
+ break;
+ case 0xBB :
+ return "\xE6\x8D\xA8";
+ break;
+ case 0xBC :
+ return "\xE6\x8E\x83";
+ break;
+ case 0xBD :
+ return "\xE6\x8F\xA4";
+ break;
+ case 0xBE :
+ return "\xF0\xA2\xAF\xB1";
+ break;
+ case 0xBF :
+ return "\xE6\x90\xA2";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE6\x8F\x85";
+ break;
+ case 0x81 :
+ return "\xE6\x8E\xA9";
+ break;
+ case 0x82 :
+ return "\xE3\xA8\xAE";
+ break;
+ case 0x83 :
+ return "\xE6\x91\xA9";
+ break;
+ case 0x84 :
+ return "\xE6\x91\xBE";
+ break;
+ case 0x85 :
+ return "\xE6\x92\x9D";
+ break;
+ case 0x86 :
+ return "\xE6\x91\xB7";
+ break;
+ case 0x87 :
+ return "\xE3\xA9\xAC";
+ break;
+ case 0x88 :
+ return "\xE6\x95\x8F";
+ break;
+ case 0x89 :
+ return "\xE6\x95\xAC";
+ break;
+ case 0x8A :
+ return "\xF0\xA3\x80\x8A";
+ break;
+ case 0x8B :
+ return "\xE6\x97\xA3";
+ break;
+ case 0x8C :
+ return "\xE6\x9B\xB8";
+ break;
+ case 0x8D :
+ return "\xE6\x99\x89";
+ break;
+ case 0x8E :
+ return "\xE3\xAC\x99";
+ break;
+ case 0x8F :
+ return "\xE6\x9A\x91";
+ break;
+ case 0x90 :
+ return "\xE3\xAC\x88";
+ break;
+ case 0x91 :
+ return "\xE3\xAB\xA4";
+ break;
+ case 0x92 :
+ return "\xE5\x86\x92";
+ break;
+ case 0x93 :
+ return "\xE5\x86\x95";
+ break;
+ case 0x94 :
+ return "\xE6\x9C\x80";
+ break;
+ case 0x95 :
+ return "\xE6\x9A\x9C";
+ break;
+ case 0x96 :
+ return "\xE8\x82\xAD";
+ break;
+ case 0x97 :
+ return "\xE4\x8F\x99";
+ break;
+ case 0x98 :
+ return "\xE6\x9C\x97";
+ break;
+ case 0x99 :
+ return "\xE6\x9C\x9B";
+ break;
+ case 0x9A :
+ return "\xE6\x9C\xA1";
+ break;
+ case 0x9B :
+ return "\xE6\x9D\x9E";
+ break;
+ case 0x9C :
+ return "\xE6\x9D\x93";
+ break;
+ case 0x9D :
+ return "\xF0\xA3\x8F\x83";
+ break;
+ case 0x9E :
+ return "\xE3\xAD\x89";
+ break;
+ case 0x9F :
+ return "\xE6\x9F\xBA";
+ break;
+ case 0xA0 :
+ return "\xE6\x9E\x85";
+ break;
+ case 0xA1 :
+ return "\xE6\xA1\x92";
+ break;
+ case 0xA2 :
+ return "\xE6\xA2\x85";
+ break;
+ case 0xA3 :
+ return "\xF0\xA3\x91\xAD";
+ break;
+ case 0xA4 :
+ return "\xE6\xA2\x8E";
+ break;
+ case 0xA5 :
+ return "\xE6\xA0\x9F";
+ break;
+ case 0xA6 :
+ return "\xE6\xA4\x94";
+ break;
+ case 0xA7 :
+ return "\xE3\xAE\x9D";
+ break;
+ case 0xA8 :
+ return "\xE6\xA5\x82";
+ break;
+ case 0xA9 :
+ return "\xE6\xA6\xA3";
+ break;
+ case 0xAA :
+ return "\xE6\xA7\xAA";
+ break;
+ case 0xAB :
+ return "\xE6\xAA\xA8";
+ break;
+ case 0xAC :
+ return "\xF0\xA3\x9A\xA3";
+ break;
+ case 0xAD :
+ return "\xE6\xAB\x9B";
+ break;
+ case 0xAE :
+ return "\xE3\xB0\x98";
+ break;
+ case 0xAF :
+ return "\xE6\xAC\xA1";
+ break;
+ case 0xB0 :
+ return "\xF0\xA3\xA2\xA7";
+ break;
+ case 0xB1 :
+ return "\xE6\xAD\x94";
+ break;
+ case 0xB2 :
+ return "\xE3\xB1\x8E";
+ break;
+ case 0xB3 :
+ return "\xE6\xAD\xB2";
+ break;
+ case 0xB4 :
+ return "\xE6\xAE\x9F";
+ break;
+ case 0xB5 :
+ return "\xE6\xAE\xBA";
+ break;
+ case 0xB6 :
+ return "\xE6\xAE\xBB";
+ break;
+ case 0xB7 :
+ return "\xF0\xA3\xAA\x8D";
+ break;
+ case 0xB8 :
+ return "\xF0\xA1\xB4\x8B";
+ break;
+ case 0xB9 :
+ return "\xF0\xA3\xAB\xBA";
+ break;
+ case 0xBA :
+ return "\xE6\xB1\x8E";
+ break;
+ case 0xBB :
+ return "\xF0\xA3\xB2\xBC";
+ break;
+ case 0xBC :
+ return "\xE6\xB2\xBF";
+ break;
+ case 0xBD :
+ return "\xE6\xB3\x8D";
+ break;
+ case 0xBE :
+ return "\xE6\xB1\xA7";
+ break;
+ case 0xBF :
+ return "\xE6\xB4\x96";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE6\xB4\xBE";
+ break;
+ case 0x81 :
+ return "\xE6\xB5\xB7";
+ break;
+ case 0x82 :
+ return "\xE6\xB5\x81";
+ break;
+ case 0x83 :
+ return "\xE6\xB5\xA9";
+ break;
+ case 0x84 :
+ return "\xE6\xB5\xB8";
+ break;
+ case 0x85 :
+ return "\xE6\xB6\x85";
+ break;
+ case 0x86 :
+ return "\xF0\xA3\xB4\x9E";
+ break;
+ case 0x87 :
+ return "\xE6\xB4\xB4";
+ break;
+ case 0x88 :
+ return "\xE6\xB8\xAF";
+ break;
+ case 0x89 :
+ return "\xE6\xB9\xAE";
+ break;
+ case 0x8A :
+ return "\xE3\xB4\xB3";
+ break;
+ case 0x8B :
+ return "\xE6\xBB\x8B";
+ break;
+ case 0x8C :
+ return "\xE6\xBB\x87";
+ break;
+ case 0x8D :
+ return "\xF0\xA3\xBB\x91";
+ break;
+ case 0x8E :
+ return "\xE6\xB7\xB9";
+ break;
+ case 0x8F :
+ return "\xE6\xBD\xAE";
+ break;
+ case 0x90 :
+ return "\xF0\xA3\xBD\x9E";
+ break;
+ case 0x91 :
+ return "\xF0\xA3\xBE\x8E";
+ break;
+ case 0x92 :
+ return "\xE6\xBF\x86";
+ break;
+ case 0x93 :
+ return "\xE7\x80\xB9";
+ break;
+ case 0x94 :
+ return "\xE7\x80\x9E";
+ break;
+ case 0x95 :
+ return "\xE7\x80\x9B";
+ break;
+ case 0x96 :
+ return "\xE3\xB6\x96";
+ break;
+ case 0x97 :
+ return "\xE7\x81\x8A";
+ break;
+ case 0x98 :
+ return "\xE7\x81\xBD";
+ break;
+ case 0x99 :
+ return "\xE7\x81\xB7";
+ break;
+ case 0x9A :
+ return "\xE7\x82\xAD";
+ break;
+ case 0x9B :
+ return "\xF0\xA0\x94\xA5";
+ break;
+ case 0x9C :
+ return "\xE7\x85\x85";
+ break;
+ case 0x9D :
+ return "\xF0\xA4\x89\xA3";
+ break;
+ case 0x9E :
+ return "\xE7\x86\x9C";
+ break;
+ case 0x9F :
+ return "\xF0\xA4\x8E\xAB";
+ break;
+ case 0xA0 :
+ return "\xE7\x88\xA8";
+ break;
+ case 0xA1 :
+ return "\xE7\x88\xB5";
+ break;
+ case 0xA2 :
+ return "\xE7\x89\x90";
+ break;
+ case 0xA3 :
+ return "\xF0\xA4\x98\x88";
+ break;
+ case 0xA4 :
+ return "\xE7\x8A\x80";
+ break;
+ case 0xA5 :
+ return "\xE7\x8A\x95";
+ break;
+ case 0xA6 :
+ return "\xF0\xA4\x9C\xB5";
+ break;
+ case 0xA7 :
+ return "\xF0\xA4\xA0\x94";
+ break;
+ case 0xA8 :
+ return "\xE7\x8D\xBA";
+ break;
+ case 0xA9 :
+ return "\xE7\x8E\x8B";
+ break;
+ case 0xAA :
+ return "\xE3\xBA\xAC";
+ break;
+ case 0xAB :
+ return "\xE7\x8E\xA5";
+ break;
+ case 0xAC :
+ return "\xE3\xBA\xB8";
+ break;
+ case 0xAD :
+ return "\xE3\xBA\xB8";
+ break;
+ case 0xAE :
+ return "\xE7\x91\x87";
+ break;
+ case 0xAF :
+ return "\xE7\x91\x9C";
+ break;
+ case 0xB0 :
+ return "\xE7\x91\xB1";
+ break;
+ case 0xB1 :
+ return "\xE7\x92\x85";
+ break;
+ case 0xB2 :
+ return "\xE7\x93\x8A";
+ break;
+ case 0xB3 :
+ return "\xE3\xBC\x9B";
+ break;
+ case 0xB4 :
+ return "\xE7\x94\xA4";
+ break;
+ case 0xB5 :
+ return "\xF0\xA4\xB0\xB6";
+ break;
+ case 0xB6 :
+ return "\xE7\x94\xBE";
+ break;
+ case 0xB7 :
+ return "\xF0\xA4\xB2\x92";
+ break;
+ case 0xB8 :
+ return "\xE7\x95\xB0";
+ break;
+ case 0xB9 :
+ return "\xF0\xA2\x86\x9F";
+ break;
+ case 0xBA :
+ return "\xE7\x98\x90";
+ break;
+ case 0xBB :
+ return "\xF0\xA4\xBE\xA1";
+ break;
+ case 0xBC :
+ return "\xF0\xA4\xBE\xB8";
+ break;
+ case 0xBD :
+ return "\xF0\xA5\x81\x84";
+ break;
+ case 0xBE :
+ return "\xE3\xBF\xBC";
+ break;
+ case 0xBF :
+ return "\xE4\x80\x88";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE7\x9B\xB4";
+ break;
+ case 0x81 :
+ return "\xF0\xA5\x83\xB3";
+ break;
+ case 0x82 :
+ return "\xF0\xA5\x83\xB2";
+ break;
+ case 0x83 :
+ return "\xF0\xA5\x84\x99";
+ break;
+ case 0x84 :
+ return "\xF0\xA5\x84\xB3";
+ break;
+ case 0x85 :
+ return "\xE7\x9C\x9E";
+ break;
+ case 0x86 :
+ return "\xE7\x9C\x9F";
+ break;
+ case 0x87 :
+ return "\xE7\x9C\x9F";
+ break;
+ case 0x88 :
+ return "\xE7\x9D\x8A";
+ break;
+ case 0x89 :
+ return "\xE4\x80\xB9";
+ break;
+ case 0x8A :
+ return "\xE7\x9E\x8B";
+ break;
+ case 0x8B :
+ return "\xE4\x81\x86";
+ break;
+ case 0x8C :
+ return "\xE4\x82\x96";
+ break;
+ case 0x8D :
+ return "\xF0\xA5\x90\x9D";
+ break;
+ case 0x8E :
+ return "\xE7\xA1\x8E";
+ break;
+ case 0x8F :
+ return "\xE7\xA2\x8C";
+ break;
+ case 0x90 :
+ return "\xE7\xA3\x8C";
+ break;
+ case 0x91 :
+ return "\xE4\x83\xA3";
+ break;
+ case 0x92 :
+ return "\xF0\xA5\x98\xA6";
+ break;
+ case 0x93 :
+ return "\xE7\xA5\x96";
+ break;
+ case 0x94 :
+ return "\xF0\xA5\x9A\x9A";
+ break;
+ case 0x95 :
+ return "\xF0\xA5\x9B\x85";
+ break;
+ case 0x96 :
+ return "\xE7\xA6\x8F";
+ break;
+ case 0x97 :
+ return "\xE7\xA7\xAB";
+ break;
+ case 0x98 :
+ return "\xE4\x84\xAF";
+ break;
+ case 0x99 :
+ return "\xE7\xA9\x80";
+ break;
+ case 0x9A :
+ return "\xE7\xA9\x8A";
+ break;
+ case 0x9B :
+ return "\xE7\xA9\x8F";
+ break;
+ case 0x9C :
+ return "\xF0\xA5\xA5\xBC";
+ break;
+ case 0x9D :
+ return "\xF0\xA5\xAA\xA7";
+ break;
+ case 0x9E :
+ return "\xF0\xA5\xAA\xA7";
+ break;
+ case 0x9F :
+ return "\xE7\xAB\xAE";
+ break;
+ case 0xA0 :
+ return "\xE4\x88\x82";
+ break;
+ case 0xA1 :
+ return "\xF0\xA5\xAE\xAB";
+ break;
+ case 0xA2 :
+ return "\xE7\xAF\x86";
+ break;
+ case 0xA3 :
+ return "\xE7\xAF\x89";
+ break;
+ case 0xA4 :
+ return "\xE4\x88\xA7";
+ break;
+ case 0xA5 :
+ return "\xF0\xA5\xB2\x80";
+ break;
+ case 0xA6 :
+ return "\xE7\xB3\x92";
+ break;
+ case 0xA7 :
+ return "\xE4\x8A\xA0";
+ break;
+ case 0xA8 :
+ return "\xE7\xB3\xA8";
+ break;
+ case 0xA9 :
+ return "\xE7\xB3\xA3";
+ break;
+ case 0xAA :
+ return "\xE7\xB4\x80";
+ break;
+ case 0xAB :
+ return "\xF0\xA5\xBE\x86";
+ break;
+ case 0xAC :
+ return "\xE7\xB5\xA3";
+ break;
+ case 0xAD :
+ return "\xE4\x8C\x81";
+ break;
+ case 0xAE :
+ return "\xE7\xB7\x87";
+ break;
+ case 0xAF :
+ return "\xE7\xB8\x82";
+ break;
+ case 0xB0 :
+ return "\xE7\xB9\x85";
+ break;
+ case 0xB1 :
+ return "\xE4\x8C\xB4";
+ break;
+ case 0xB2 :
+ return "\xF0\xA6\x88\xA8";
+ break;
+ case 0xB3 :
+ return "\xF0\xA6\x89\x87";
+ break;
+ case 0xB4 :
+ return "\xE4\x8D\x99";
+ break;
+ case 0xB5 :
+ return "\xF0\xA6\x8B\x99";
+ break;
+ case 0xB6 :
+ return "\xE7\xBD\xBA";
+ break;
+ case 0xB7 :
+ return "\xF0\xA6\x8C\xBE";
+ break;
+ case 0xB8 :
+ return "\xE7\xBE\x95";
+ break;
+ case 0xB9 :
+ return "\xE7\xBF\xBA";
+ break;
+ case 0xBA :
+ return "\xE8\x80\x85";
+ break;
+ case 0xBB :
+ return "\xF0\xA6\x93\x9A";
+ break;
+ case 0xBC :
+ return "\xF0\xA6\x94\xA3";
+ break;
+ case 0xBD :
+ return "\xE8\x81\xA0";
+ break;
+ case 0xBE :
+ return "\xF0\xA6\x96\xA8";
+ break;
+ case 0xBF :
+ return "\xE8\x81\xB0";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xF0\xA3\x8D\x9F";
+ break;
+ case 0x81 :
+ return "\xE4\x8F\x95";
+ break;
+ case 0x82 :
+ return "\xE8\x82\xB2";
+ break;
+ case 0x83 :
+ return "\xE8\x84\x83";
+ break;
+ case 0x84 :
+ return "\xE4\x90\x8B";
+ break;
+ case 0x85 :
+ return "\xE8\x84\xBE";
+ break;
+ case 0x86 :
+ return "\xE5\xAA\xB5";
+ break;
+ case 0x87 :
+ return "\xF0\xA6\x9E\xA7";
+ break;
+ case 0x88 :
+ return "\xF0\xA6\x9E\xB5";
+ break;
+ case 0x89 :
+ return "\xF0\xA3\x8E\x93";
+ break;
+ case 0x8A :
+ return "\xF0\xA3\x8E\x9C";
+ break;
+ case 0x8B :
+ return "\xE8\x88\x81";
+ break;
+ case 0x8C :
+ return "\xE8\x88\x84";
+ break;
+ case 0x8D :
+ return "\xE8\xBE\x9E";
+ break;
+ case 0x8E :
+ return "\xE4\x91\xAB";
+ break;
+ case 0x8F :
+ return "\xE8\x8A\x91";
+ break;
+ case 0x90 :
+ return "\xE8\x8A\x8B";
+ break;
+ case 0x91 :
+ return "\xE8\x8A\x9D";
+ break;
+ case 0x92 :
+ return "\xE5\x8A\xB3";
+ break;
+ case 0x93 :
+ return "\xE8\x8A\xB1";
+ break;
+ case 0x94 :
+ return "\xE8\x8A\xB3";
+ break;
+ case 0x95 :
+ return "\xE8\x8A\xBD";
+ break;
+ case 0x96 :
+ return "\xE8\x8B\xA6";
+ break;
+ case 0x97 :
+ return "\xF0\xA6\xAC\xBC";
+ break;
+ case 0x98 :
+ return "\xE8\x8B\xA5";
+ break;
+ case 0x99 :
+ return "\xE8\x8C\x9D";
+ break;
+ case 0x9A :
+ return "\xE8\x8D\xA3";
+ break;
+ case 0x9B :
+ return "\xE8\x8E\xAD";
+ break;
+ case 0x9C :
+ return "\xE8\x8C\xA3";
+ break;
+ case 0x9D :
+ return "\xE8\x8E\xBD";
+ break;
+ case 0x9E :
+ return "\xE8\x8F\xA7";
+ break;
+ case 0x9F :
+ return "\xE8\x91\x97";
+ break;
+ case 0xA0 :
+ return "\xE8\x8D\x93";
+ break;
+ case 0xA1 :
+ return "\xE8\x8F\x8A";
+ break;
+ case 0xA2 :
+ return "\xE8\x8F\x8C";
+ break;
+ case 0xA3 :
+ return "\xE8\x8F\x9C";
+ break;
+ case 0xA4 :
+ return "\xF0\xA6\xB0\xB6";
+ break;
+ case 0xA5 :
+ return "\xF0\xA6\xB5\xAB";
+ break;
+ case 0xA6 :
+ return "\xF0\xA6\xB3\x95";
+ break;
+ case 0xA7 :
+ return "\xE4\x94\xAB";
+ break;
+ case 0xA8 :
+ return "\xE8\x93\xB1";
+ break;
+ case 0xA9 :
+ return "\xE8\x93\xB3";
+ break;
+ case 0xAA :
+ return "\xE8\x94\x96";
+ break;
+ case 0xAB :
+ return "\xF0\xA7\x8F\x8A";
+ break;
+ case 0xAC :
+ return "\xE8\x95\xA4";
+ break;
+ case 0xAD :
+ return "\xF0\xA6\xBC\xAC";
+ break;
+ case 0xAE :
+ return "\xE4\x95\x9D";
+ break;
+ case 0xAF :
+ return "\xE4\x95\xA1";
+ break;
+ case 0xB0 :
+ return "\xF0\xA6\xBE\xB1";
+ break;
+ case 0xB1 :
+ return "\xF0\xA7\x83\x92";
+ break;
+ case 0xB2 :
+ return "\xE4\x95\xAB";
+ break;
+ case 0xB3 :
+ return "\xE8\x99\x90";
+ break;
+ case 0xB4 :
+ return "\xE8\x99\x9C";
+ break;
+ case 0xB5 :
+ return "\xE8\x99\xA7";
+ break;
+ case 0xB6 :
+ return "\xE8\x99\xA9";
+ break;
+ case 0xB7 :
+ return "\xE8\x9A\xA9";
+ break;
+ case 0xB8 :
+ return "\xE8\x9A\x88";
+ break;
+ case 0xB9 :
+ return "\xE8\x9C\x8E";
+ break;
+ case 0xBA :
+ return "\xE8\x9B\xA2";
+ break;
+ case 0xBB :
+ return "\xE8\x9D\xB9";
+ break;
+ case 0xBC :
+ return "\xE8\x9C\xA8";
+ break;
+ case 0xBD :
+ return "\xE8\x9D\xAB";
+ break;
+ case 0xBE :
+ return "\xE8\x9E\x86";
+ break;
+ case 0xBF :
+ return "\xE4\x97\x97";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE8\x9F\xA1";
+ break;
+ case 0x81 :
+ return "\xE8\xA0\x81";
+ break;
+ case 0x82 :
+ return "\xE4\x97\xB9";
+ break;
+ case 0x83 :
+ return "\xE8\xA1\xA0";
+ break;
+ case 0x84 :
+ return "\xE8\xA1\xA3";
+ break;
+ case 0x85 :
+ return "\xF0\xA7\x99\xA7";
+ break;
+ case 0x86 :
+ return "\xE8\xA3\x97";
+ break;
+ case 0x87 :
+ return "\xE8\xA3\x9E";
+ break;
+ case 0x88 :
+ return "\xE4\x98\xB5";
+ break;
+ case 0x89 :
+ return "\xE8\xA3\xBA";
+ break;
+ case 0x8A :
+ return "\xE3\x92\xBB";
+ break;
+ case 0x8B :
+ return "\xF0\xA7\xA2\xAE";
+ break;
+ case 0x8C :
+ return "\xF0\xA7\xA5\xA6";
+ break;
+ case 0x8D :
+ return "\xE4\x9A\xBE";
+ break;
+ case 0x8E :
+ return "\xE4\x9B\x87";
+ break;
+ case 0x8F :
+ return "\xE8\xAA\xA0";
+ break;
+ case 0x90 :
+ return "\xE8\xAB\xAD";
+ break;
+ case 0x91 :
+ return "\xE8\xAE\x8A";
+ break;
+ case 0x92 :
+ return "\xE8\xB1\x95";
+ break;
+ case 0x93 :
+ return "\xF0\xA7\xB2\xA8";
+ break;
+ case 0x94 :
+ return "\xE8\xB2\xAB";
+ break;
+ case 0x95 :
+ return "\xE8\xB3\x81";
+ break;
+ case 0x96 :
+ return "\xE8\xB4\x9B";
+ break;
+ case 0x97 :
+ return "\xE8\xB5\xB7";
+ break;
+ case 0x98 :
+ return "\xF0\xA7\xBC\xAF";
+ break;
+ case 0x99 :
+ return "\xF0\xA0\xA0\x84";
+ break;
+ case 0x9A :
+ return "\xE8\xB7\x8B";
+ break;
+ case 0x9B :
+ return "\xE8\xB6\xBC";
+ break;
+ case 0x9C :
+ return "\xE8\xB7\xB0";
+ break;
+ case 0x9D :
+ return "\xF0\xA0\xA3\x9E";
+ break;
+ case 0x9E :
+ return "\xE8\xBB\x94";
+ break;
+ case 0x9F :
+ return "\xE8\xBC\xB8";
+ break;
+ case 0xA0 :
+ return "\xF0\xA8\x97\x92";
+ break;
+ case 0xA1 :
+ return "\xF0\xA8\x97\xAD";
+ break;
+ case 0xA2 :
+ return "\xE9\x82\x94";
+ break;
+ case 0xA3 :
+ return "\xE9\x83\xB1";
+ break;
+ case 0xA4 :
+ return "\xE9\x84\x91";
+ break;
+ case 0xA5 :
+ return "\xF0\xA8\x9C\xAE";
+ break;
+ case 0xA6 :
+ return "\xE9\x84\x9B";
+ break;
+ case 0xA7 :
+ return "\xE9\x88\xB8";
+ break;
+ case 0xA8 :
+ return "\xE9\x8B\x97";
+ break;
+ case 0xA9 :
+ return "\xE9\x8B\x98";
+ break;
+ case 0xAA :
+ return "\xE9\x89\xBC";
+ break;
+ case 0xAB :
+ return "\xE9\x8F\xB9";
+ break;
+ case 0xAC :
+ return "\xE9\x90\x95";
+ break;
+ case 0xAD :
+ return "\xF0\xA8\xAF\xBA";
+ break;
+ case 0xAE :
+ return "\xE9\x96\x8B";
+ break;
+ case 0xAF :
+ return "\xE4\xA6\x95";
+ break;
+ case 0xB0 :
+ return "\xE9\x96\xB7";
+ break;
+ case 0xB1 :
+ return "\xF0\xA8\xB5\xB7";
+ break;
+ case 0xB2 :
+ return "\xE4\xA7\xA6";
+ break;
+ case 0xB3 :
+ return "\xE9\x9B\x83";
+ break;
+ case 0xB4 :
+ return "\xE5\xB6\xB2";
+ break;
+ case 0xB5 :
+ return "\xE9\x9C\xA3";
+ break;
+ case 0xB6 :
+ return "\xF0\xA9\x85\x85";
+ break;
+ case 0xB7 :
+ return "\xF0\xA9\x88\x9A";
+ break;
+ case 0xB8 :
+ return "\xE4\xA9\xAE";
+ break;
+ case 0xB9 :
+ return "\xE4\xA9\xB6";
+ break;
+ case 0xBA :
+ return "\xE9\x9F\xA0";
+ break;
+ case 0xBB :
+ return "\xF0\xA9\x90\x8A";
+ break;
+ case 0xBC :
+ return "\xE4\xAA\xB2";
+ break;
+ case 0xBD :
+ return "\xF0\xA9\x92\x96";
+ break;
+ case 0xBE :
+ return "\xE9\xA0\x8B";
+ break;
+ case 0xBF :
+ return "\xE9\xA0\x8B";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (str[3]) {
+ case 0x80 :
+ return "\xE9\xA0\xA9";
+ break;
+ case 0x81 :
+ return "\xF0\xA9\x96\xB6";
+ break;
+ case 0x82 :
+ return "\xE9\xA3\xA2";
+ break;
+ case 0x83 :
+ return "\xE4\xAC\xB3";
+ break;
+ case 0x84 :
+ return "\xE9\xA4\xA9";
+ break;
+ case 0x85 :
+ return "\xE9\xA6\xA7";
+ break;
+ case 0x86 :
+ return "\xE9\xA7\x82";
+ break;
+ case 0x87 :
+ return "\xE9\xA7\xBE";
+ break;
+ case 0x88 :
+ return "\xE4\xAF\x8E";
+ break;
+ case 0x89 :
+ return "\xF0\xA9\xAC\xB0";
+ break;
+ case 0x8A :
+ return "\xE9\xAC\x92";
+ break;
+ case 0x8B :
+ return "\xE9\xB1\x80";
+ break;
+ case 0x8C :
+ return "\xE9\xB3\xBD";
+ break;
+ case 0x8D :
+ return "\xE4\xB3\x8E";
+ break;
+ case 0x8E :
+ return "\xE4\xB3\xAD";
+ break;
+ case 0x8F :
+ return "\xE9\xB5\xA7";
+ break;
+ case 0x90 :
+ return "\xF0\xAA\x83\x8E";
+ break;
+ case 0x91 :
+ return "\xE4\xB3\xB8";
+ break;
+ case 0x92 :
+ return "\xF0\xAA\x84\x85";
+ break;
+ case 0x93 :
+ return "\xF0\xAA\x88\x8E";
+ break;
+ case 0x94 :
+ return "\xF0\xAA\x8A\x91";
+ break;
+ case 0x95 :
+ return "\xE9\xBA\xBB";
+ break;
+ case 0x96 :
+ return "\xE4\xB5\x96";
+ break;
+ case 0x97 :
+ return "\xE9\xBB\xB9";
+ break;
+ case 0x98 :
+ return "\xE9\xBB\xBE";
+ break;
+ case 0x99 :
+ return "\xE9\xBC\x85";
+ break;
+ case 0x9A :
+ return "\xE9\xBC\x8F";
+ break;
+ case 0x9B :
+ return "\xE9\xBC\x96";
+ break;
+ case 0x9C :
+ return "\xE9\xBC\xBB";
+ break;
+ case 0x9D :
+ return "\xF0\xAA\x98\x80";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+}
+ return 0;
+}
+
+const char *
+grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix)
+{
+switch (suffix[0]) {
+case 0xCC :
+ switch (suffix[1]) {
+ case 0x80 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA0";
+ break;
+ case 0x65 :
+ return "\xC3\xA8";
+ break;
+ case 0x69 :
+ return "\xC3\xAC";
+ break;
+ case 0x6E :
+ return "\xC7\xB9";
+ break;
+ case 0x6F :
+ return "\xC3\xB2";
+ break;
+ case 0x75 :
+ return "\xC3\xB9";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x81";
+ break;
+ case 0x79 :
+ return "\xE1\xBB\xB3";
+ break;
+ case 0xC3 :
+ switch (prefix[1]) {
+ case 0xA2 :
+ return "\xE1\xBA\xA7";
+ break;
+ case 0xAA :
+ return "\xE1\xBB\x81";
+ break;
+ case 0xB4 :
+ return "\xE1\xBB\x93";
+ break;
+ case 0xBC :
+ return "\xC7\x9C";
+ break;
+ }
+ break;
+ case 0xC4 :
+ switch (prefix[1]) {
+ case 0x83 :
+ return "\xE1\xBA\xB1";
+ break;
+ case 0x93 :
+ return "\xE1\xB8\x95";
+ break;
+ }
+ break;
+ case 0xC5 :
+ if (prefix[1] == 0x8D) {
+ return "\xE1\xB9\x91";
+ }
+ break;
+ case 0xC6 :
+ switch (prefix[1]) {
+ case 0xA1 :
+ return "\xE1\xBB\x9D";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xAB";
+ break;
+ }
+ break;
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBE\xBA";
+ break;
+ case 0x95 :
+ return "\xE1\xBF\x88";
+ break;
+ case 0x97 :
+ return "\xE1\xBF\x8A";
+ break;
+ case 0x99 :
+ return "\xE1\xBF\x9A";
+ break;
+ case 0x9F :
+ return "\xE1\xBF\xB8";
+ break;
+ case 0xA5 :
+ return "\xE1\xBF\xAA";
+ break;
+ case 0xA9 :
+ return "\xE1\xBF\xBA";
+ break;
+ case 0xB1 :
+ return "\xE1\xBD\xB0";
+ break;
+ case 0xB5 :
+ return "\xE1\xBD\xB2";
+ break;
+ case 0xB7 :
+ return "\xE1\xBD\xB4";
+ break;
+ case 0xB9 :
+ return "\xE1\xBD\xB6";
+ break;
+ case 0xBF :
+ return "\xE1\xBD\xB8";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x85 :
+ return "\xE1\xBD\xBA";
+ break;
+ case 0x89 :
+ return "\xE1\xBD\xBC";
+ break;
+ case 0x8A :
+ return "\xE1\xBF\x92";
+ break;
+ case 0x8B :
+ return "\xE1\xBF\xA2";
+ break;
+ }
+ break;
+ case 0xD0 :
+ switch (prefix[1]) {
+ case 0x95 :
+ return "\xD0\x80";
+ break;
+ case 0x98 :
+ return "\xD0\x8D";
+ break;
+ case 0xB5 :
+ return "\xD1\x90";
+ break;
+ case 0xB8 :
+ return "\xD1\x9D";
+ break;
+ }
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBC\x82";
+ break;
+ case 0x81 :
+ return "\xE1\xBC\x83";
+ break;
+ case 0x88 :
+ return "\xE1\xBC\x8A";
+ break;
+ case 0x89 :
+ return "\xE1\xBC\x8B";
+ break;
+ case 0x90 :
+ return "\xE1\xBC\x92";
+ break;
+ case 0x91 :
+ return "\xE1\xBC\x93";
+ break;
+ case 0x98 :
+ return "\xE1\xBC\x9A";
+ break;
+ case 0x99 :
+ return "\xE1\xBC\x9B";
+ break;
+ case 0xA0 :
+ return "\xE1\xBC\xA2";
+ break;
+ case 0xA1 :
+ return "\xE1\xBC\xA3";
+ break;
+ case 0xA8 :
+ return "\xE1\xBC\xAA";
+ break;
+ case 0xA9 :
+ return "\xE1\xBC\xAB";
+ break;
+ case 0xB0 :
+ return "\xE1\xBC\xB2";
+ break;
+ case 0xB1 :
+ return "\xE1\xBC\xB3";
+ break;
+ case 0xB8 :
+ return "\xE1\xBC\xBA";
+ break;
+ case 0xB9 :
+ return "\xE1\xBC\xBB";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBD\x82";
+ break;
+ case 0x81 :
+ return "\xE1\xBD\x83";
+ break;
+ case 0x88 :
+ return "\xE1\xBD\x8A";
+ break;
+ case 0x89 :
+ return "\xE1\xBD\x8B";
+ break;
+ case 0x90 :
+ return "\xE1\xBD\x92";
+ break;
+ case 0x91 :
+ return "\xE1\xBD\x93";
+ break;
+ case 0x99 :
+ return "\xE1\xBD\x9B";
+ break;
+ case 0xA0 :
+ return "\xE1\xBD\xA2";
+ break;
+ case 0xA1 :
+ return "\xE1\xBD\xA3";
+ break;
+ case 0xA8 :
+ return "\xE1\xBD\xAA";
+ break;
+ case 0xA9 :
+ return "\xE1\xBD\xAB";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA1";
+ break;
+ case 0x63 :
+ return "\xC4\x87";
+ break;
+ case 0x65 :
+ return "\xC3\xA9";
+ break;
+ case 0x67 :
+ return "\xC7\xB5";
+ break;
+ case 0x69 :
+ return "\xC3\xAD";
+ break;
+ case 0x6B :
+ return "\xE1\xB8\xB1";
+ break;
+ case 0x6C :
+ return "\xC4\xBA";
+ break;
+ case 0x6D :
+ return "\xE1\xB8\xBF";
+ break;
+ case 0x6E :
+ return "\xC5\x84";
+ break;
+ case 0x6F :
+ return "\xC3\xB3";
+ break;
+ case 0x70 :
+ return "\xE1\xB9\x95";
+ break;
+ case 0x72 :
+ return "\xC5\x95";
+ break;
+ case 0x73 :
+ return "\xC5\x9B";
+ break;
+ case 0x75 :
+ return "\xC3\xBA";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x83";
+ break;
+ case 0x79 :
+ return "\xC3\xBD";
+ break;
+ case 0x7A :
+ return "\xC5\xBA";
+ break;
+ case 0xC3 :
+ switch (prefix[1]) {
+ case 0x86 :
+ return "\xC7\xBC";
+ break;
+ case 0x98 :
+ return "\xC7\xBE";
+ break;
+ case 0xA2 :
+ return "\xE1\xBA\xA5";
+ break;
+ case 0xA5 :
+ return "\xC7\xBB";
+ break;
+ case 0xA6 :
+ return "\xC7\xBD";
+ break;
+ case 0xA7 :
+ return "\xE1\xB8\x89";
+ break;
+ case 0xAA :
+ return "\xE1\xBA\xBF";
+ break;
+ case 0xAF :
+ return "\xE1\xB8\xAF";
+ break;
+ case 0xB4 :
+ return "\xE1\xBB\x91";
+ break;
+ case 0xB5 :
+ return "\xE1\xB9\x8D";
+ break;
+ case 0xB8 :
+ return "\xC7\xBF";
+ break;
+ case 0xBC :
+ return "\xC7\x98";
+ break;
+ }
+ break;
+ case 0xC4 :
+ switch (prefix[1]) {
+ case 0x83 :
+ return "\xE1\xBA\xAF";
+ break;
+ case 0x93 :
+ return "\xE1\xB8\x97";
+ break;
+ }
+ break;
+ case 0xC5 :
+ switch (prefix[1]) {
+ case 0x8D :
+ return "\xE1\xB9\x93";
+ break;
+ case 0xA9 :
+ return "\xE1\xB9\xB9";
+ break;
+ }
+ break;
+ case 0xC6 :
+ switch (prefix[1]) {
+ case 0xA1 :
+ return "\xE1\xBB\x9B";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xA9";
+ break;
+ }
+ break;
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xCE\x86";
+ break;
+ case 0x95 :
+ return "\xCE\x88";
+ break;
+ case 0x97 :
+ return "\xCE\x89";
+ break;
+ case 0x99 :
+ return "\xCE\x8A";
+ break;
+ case 0x9F :
+ return "\xCE\x8C";
+ break;
+ case 0xA5 :
+ return "\xCE\x8E";
+ break;
+ case 0xA9 :
+ return "\xCE\x8F";
+ break;
+ case 0xB1 :
+ return "\xCE\xAC";
+ break;
+ case 0xB5 :
+ return "\xCE\xAD";
+ break;
+ case 0xB7 :
+ return "\xCE\xAE";
+ break;
+ case 0xB9 :
+ return "\xCE\xAF";
+ break;
+ case 0xBF :
+ return "\xCF\x8C";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x85 :
+ return "\xCF\x8D";
+ break;
+ case 0x89 :
+ return "\xCF\x8E";
+ break;
+ case 0x8A :
+ return "\xCE\x90";
+ break;
+ case 0x8B :
+ return "\xCE\xB0";
+ break;
+ }
+ break;
+ case 0xD0 :
+ switch (prefix[1]) {
+ case 0x93 :
+ return "\xD0\x83";
+ break;
+ case 0x9A :
+ return "\xD0\x8C";
+ break;
+ case 0xB3 :
+ return "\xD1\x93";
+ break;
+ case 0xBA :
+ return "\xD1\x9C";
+ break;
+ }
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBC\x84";
+ break;
+ case 0x81 :
+ return "\xE1\xBC\x85";
+ break;
+ case 0x88 :
+ return "\xE1\xBC\x8C";
+ break;
+ case 0x89 :
+ return "\xE1\xBC\x8D";
+ break;
+ case 0x90 :
+ return "\xE1\xBC\x94";
+ break;
+ case 0x91 :
+ return "\xE1\xBC\x95";
+ break;
+ case 0x98 :
+ return "\xE1\xBC\x9C";
+ break;
+ case 0x99 :
+ return "\xE1\xBC\x9D";
+ break;
+ case 0xA0 :
+ return "\xE1\xBC\xA4";
+ break;
+ case 0xA1 :
+ return "\xE1\xBC\xA5";
+ break;
+ case 0xA8 :
+ return "\xE1\xBC\xAC";
+ break;
+ case 0xA9 :
+ return "\xE1\xBC\xAD";
+ break;
+ case 0xB0 :
+ return "\xE1\xBC\xB4";
+ break;
+ case 0xB1 :
+ return "\xE1\xBC\xB5";
+ break;
+ case 0xB8 :
+ return "\xE1\xBC\xBC";
+ break;
+ case 0xB9 :
+ return "\xE1\xBC\xBD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBD\x84";
+ break;
+ case 0x81 :
+ return "\xE1\xBD\x85";
+ break;
+ case 0x88 :
+ return "\xE1\xBD\x8C";
+ break;
+ case 0x89 :
+ return "\xE1\xBD\x8D";
+ break;
+ case 0x90 :
+ return "\xE1\xBD\x94";
+ break;
+ case 0x91 :
+ return "\xE1\xBD\x95";
+ break;
+ case 0x99 :
+ return "\xE1\xBD\x9D";
+ break;
+ case 0xA0 :
+ return "\xE1\xBD\xA4";
+ break;
+ case 0xA1 :
+ return "\xE1\xBD\xA5";
+ break;
+ case 0xA8 :
+ return "\xE1\xBD\xAC";
+ break;
+ case 0xA9 :
+ return "\xE1\xBD\xAD";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA2";
+ break;
+ case 0x63 :
+ return "\xC4\x89";
+ break;
+ case 0x65 :
+ return "\xC3\xAA";
+ break;
+ case 0x67 :
+ return "\xC4\x9D";
+ break;
+ case 0x68 :
+ return "\xC4\xA5";
+ break;
+ case 0x69 :
+ return "\xC3\xAE";
+ break;
+ case 0x6A :
+ return "\xC4\xB5";
+ break;
+ case 0x6F :
+ return "\xC3\xB4";
+ break;
+ case 0x73 :
+ return "\xC5\x9D";
+ break;
+ case 0x75 :
+ return "\xC3\xBB";
+ break;
+ case 0x77 :
+ return "\xC5\xB5";
+ break;
+ case 0x79 :
+ return "\xC5\xB7";
+ break;
+ case 0x7A :
+ return "\xE1\xBA\x91";
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0xA1 :
+ return "\xE1\xBA\xAD";
+ break;
+ case 0xB9 :
+ return "\xE1\xBB\x87";
+ break;
+ }
+ break;
+ case 0xBB :
+ if (prefix[2] == 0x8D) {
+ return "\xE1\xBB\x99";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA3";
+ break;
+ case 0x65 :
+ return "\xE1\xBA\xBD";
+ break;
+ case 0x69 :
+ return "\xC4\xA9";
+ break;
+ case 0x6E :
+ return "\xC3\xB1";
+ break;
+ case 0x6F :
+ return "\xC3\xB5";
+ break;
+ case 0x75 :
+ return "\xC5\xA9";
+ break;
+ case 0x76 :
+ return "\xE1\xB9\xBD";
+ break;
+ case 0x79 :
+ return "\xE1\xBB\xB9";
+ break;
+ case 0xC3 :
+ switch (prefix[1]) {
+ case 0xA2 :
+ return "\xE1\xBA\xAB";
+ break;
+ case 0xAA :
+ return "\xE1\xBB\x85";
+ break;
+ case 0xB4 :
+ return "\xE1\xBB\x97";
+ break;
+ }
+ break;
+ case 0xC4 :
+ if (prefix[1] == 0x83) {
+ return "\xE1\xBA\xB5";
+ }
+ break;
+ case 0xC6 :
+ switch (prefix[1]) {
+ case 0xA1 :
+ return "\xE1\xBB\xA1";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xAF";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC4\x81";
+ break;
+ case 0x65 :
+ return "\xC4\x93";
+ break;
+ case 0x67 :
+ return "\xE1\xB8\xA1";
+ break;
+ case 0x69 :
+ return "\xC4\xAB";
+ break;
+ case 0x6F :
+ return "\xC5\x8D";
+ break;
+ case 0x75 :
+ return "\xC5\xAB";
+ break;
+ case 0x79 :
+ return "\xC8\xB3";
+ break;
+ case 0xC3 :
+ switch (prefix[1]) {
+ case 0x86 :
+ return "\xC7\xA2";
+ break;
+ case 0xA4 :
+ return "\xC7\x9F";
+ break;
+ case 0xA6 :
+ return "\xC7\xA3";
+ break;
+ case 0xB5 :
+ return "\xC8\xAD";
+ break;
+ case 0xB6 :
+ return "\xC8\xAB";
+ break;
+ case 0xBC :
+ return "\xC7\x96";
+ break;
+ }
+ break;
+ case 0xC7 :
+ if (prefix[1] == 0xAB) {
+ return "\xC7\xAD";
+ }
+ break;
+ case 0xC8 :
+ switch (prefix[1]) {
+ case 0xA7 :
+ return "\xC7\xA1";
+ break;
+ case 0xAF :
+ return "\xC8\xB1";
+ break;
+ }
+ break;
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBE\xB9";
+ break;
+ case 0x99 :
+ return "\xE1\xBF\x99";
+ break;
+ case 0xA5 :
+ return "\xE1\xBF\xA9";
+ break;
+ case 0xB1 :
+ return "\xE1\xBE\xB1";
+ break;
+ case 0xB9 :
+ return "\xE1\xBF\x91";
+ break;
+ }
+ break;
+ case 0xCF :
+ if (prefix[1] == 0x85) {
+ return "\xE1\xBF\xA1";
+ }
+ break;
+ case 0xD0 :
+ switch (prefix[1]) {
+ case 0x98 :
+ return "\xD3\xA2";
+ break;
+ case 0xA3 :
+ return "\xD3\xAE";
+ break;
+ case 0xB8 :
+ return "\xD3\xA3";
+ break;
+ }
+ break;
+ case 0xD1 :
+ if (prefix[1] == 0x83) {
+ return "\xD3\xAF";
+ }
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xB8 :
+ if (prefix[2] == 0xB7) {
+ return "\xE1\xB8\xB9";
+ }
+ break;
+ case 0xB9 :
+ if (prefix[2] == 0x9B) {
+ return "\xE1\xB9\x9D";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC4\x83";
+ break;
+ case 0x65 :
+ return "\xC4\x95";
+ break;
+ case 0x67 :
+ return "\xC4\x9F";
+ break;
+ case 0x69 :
+ return "\xC4\xAD";
+ break;
+ case 0x6F :
+ return "\xC5\x8F";
+ break;
+ case 0x75 :
+ return "\xC5\xAD";
+ break;
+ case 0xC8 :
+ if (prefix[1] == 0xA9) {
+ return "\xE1\xB8\x9D";
+ }
+ break;
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBE\xB8";
+ break;
+ case 0x99 :
+ return "\xE1\xBF\x98";
+ break;
+ case 0xA5 :
+ return "\xE1\xBF\xA8";
+ break;
+ case 0xB1 :
+ return "\xE1\xBE\xB0";
+ break;
+ case 0xB9 :
+ return "\xE1\xBF\x90";
+ break;
+ }
+ break;
+ case 0xCF :
+ if (prefix[1] == 0x85) {
+ return "\xE1\xBF\xA0";
+ }
+ break;
+ case 0xD0 :
+ switch (prefix[1]) {
+ case 0x90 :
+ return "\xD3\x90";
+ break;
+ case 0x95 :
+ return "\xD3\x96";
+ break;
+ case 0x96 :
+ return "\xD3\x81";
+ break;
+ case 0x98 :
+ return "\xD0\x99";
+ break;
+ case 0xA3 :
+ return "\xD0\x8E";
+ break;
+ case 0xB0 :
+ return "\xD3\x91";
+ break;
+ case 0xB5 :
+ return "\xD3\x97";
+ break;
+ case 0xB6 :
+ return "\xD3\x82";
+ break;
+ case 0xB8 :
+ return "\xD0\xB9";
+ break;
+ }
+ break;
+ case 0xD1 :
+ if (prefix[1] == 0x83) {
+ return "\xD1\x9E";
+ }
+ break;
+ case 0xE1 :
+ if (prefix[1] == 0xBA) {
+ if (prefix[2] == 0xA1) {
+ return "\xE1\xBA\xB7";
+ }
+ }
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC8\xA7";
+ break;
+ case 0x62 :
+ return "\xE1\xB8\x83";
+ break;
+ case 0x63 :
+ return "\xC4\x8B";
+ break;
+ case 0x64 :
+ return "\xE1\xB8\x8B";
+ break;
+ case 0x65 :
+ return "\xC4\x97";
+ break;
+ case 0x66 :
+ return "\xE1\xB8\x9F";
+ break;
+ case 0x67 :
+ return "\xC4\xA1";
+ break;
+ case 0x68 :
+ return "\xE1\xB8\xA3";
+ break;
+ case 0x6D :
+ return "\xE1\xB9\x81";
+ break;
+ case 0x6E :
+ return "\xE1\xB9\x85";
+ break;
+ case 0x6F :
+ return "\xC8\xAF";
+ break;
+ case 0x70 :
+ return "\xE1\xB9\x97";
+ break;
+ case 0x72 :
+ return "\xE1\xB9\x99";
+ break;
+ case 0x73 :
+ return "\xE1\xB9\xA1";
+ break;
+ case 0x74 :
+ return "\xE1\xB9\xAB";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x87";
+ break;
+ case 0x78 :
+ return "\xE1\xBA\x8B";
+ break;
+ case 0x79 :
+ return "\xE1\xBA\x8F";
+ break;
+ case 0x7A :
+ return "\xC5\xBC";
+ break;
+ case 0xC5 :
+ switch (prefix[1]) {
+ case 0x9B :
+ return "\xE1\xB9\xA5";
+ break;
+ case 0xA1 :
+ return "\xE1\xB9\xA7";
+ break;
+ }
+ break;
+ case 0xE1 :
+ if (prefix[1] == 0xB9) {
+ if (prefix[2] == 0xA3) {
+ return "\xE1\xB9\xA9";
+ }
+ }
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA4";
+ break;
+ case 0x65 :
+ return "\xC3\xAB";
+ break;
+ case 0x68 :
+ return "\xE1\xB8\xA7";
+ break;
+ case 0x69 :
+ return "\xC3\xAF";
+ break;
+ case 0x6F :
+ return "\xC3\xB6";
+ break;
+ case 0x74 :
+ return "\xE1\xBA\x97";
+ break;
+ case 0x75 :
+ return "\xC3\xBC";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x85";
+ break;
+ case 0x78 :
+ return "\xE1\xBA\x8D";
+ break;
+ case 0x79 :
+ return "\xC3\xBF";
+ break;
+ case 0xC3 :
+ if (prefix[1] == 0xB5) {
+ return "\xE1\xB9\x8F";
+ }
+ break;
+ case 0xC5 :
+ if (prefix[1] == 0xAB) {
+ return "\xE1\xB9\xBB";
+ }
+ break;
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x99 :
+ return "\xCE\xAA";
+ break;
+ case 0xA5 :
+ return "\xCE\xAB";
+ break;
+ case 0xB9 :
+ return "\xCF\x8A";
+ break;
+ }
+ break;
+ case 0xCF :
+ if (prefix[1] == 0x85) {
+ return "\xCF\x8B";
+ }
+ break;
+ case 0xD0 :
+ switch (prefix[1]) {
+ case 0x86 :
+ return "\xD0\x87";
+ break;
+ case 0x90 :
+ return "\xD3\x92";
+ break;
+ case 0x95 :
+ return "\xD0\x81";
+ break;
+ case 0x96 :
+ return "\xD3\x9C";
+ break;
+ case 0x97 :
+ return "\xD3\x9E";
+ break;
+ case 0x98 :
+ return "\xD3\xA4";
+ break;
+ case 0x9E :
+ return "\xD3\xA6";
+ break;
+ case 0xA3 :
+ return "\xD3\xB0";
+ break;
+ case 0xA7 :
+ return "\xD3\xB4";
+ break;
+ case 0xAB :
+ return "\xD3\xB8";
+ break;
+ case 0xAD :
+ return "\xD3\xAC";
+ break;
+ case 0xB0 :
+ return "\xD3\x93";
+ break;
+ case 0xB5 :
+ return "\xD1\x91";
+ break;
+ case 0xB6 :
+ return "\xD3\x9D";
+ break;
+ case 0xB7 :
+ return "\xD3\x9F";
+ break;
+ case 0xB8 :
+ return "\xD3\xA5";
+ break;
+ case 0xBE :
+ return "\xD3\xA7";
+ break;
+ }
+ break;
+ case 0xD1 :
+ switch (prefix[1]) {
+ case 0x83 :
+ return "\xD3\xB1";
+ break;
+ case 0x87 :
+ return "\xD3\xB5";
+ break;
+ case 0x8B :
+ return "\xD3\xB9";
+ break;
+ case 0x8D :
+ return "\xD3\xAD";
+ break;
+ case 0x96 :
+ return "\xD1\x97";
+ break;
+ }
+ break;
+ case 0xD3 :
+ switch (prefix[1]) {
+ case 0x98 :
+ return "\xD3\x9A";
+ break;
+ case 0x99 :
+ return "\xD3\x9B";
+ break;
+ case 0xA8 :
+ return "\xD3\xAA";
+ break;
+ case 0xA9 :
+ return "\xD3\xAB";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xE1\xBA\xA3";
+ break;
+ case 0x65 :
+ return "\xE1\xBA\xBB";
+ break;
+ case 0x69 :
+ return "\xE1\xBB\x89";
+ break;
+ case 0x6F :
+ return "\xE1\xBB\x8F";
+ break;
+ case 0x75 :
+ return "\xE1\xBB\xA7";
+ break;
+ case 0x79 :
+ return "\xE1\xBB\xB7";
+ break;
+ case 0xC3 :
+ switch (prefix[1]) {
+ case 0xA2 :
+ return "\xE1\xBA\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xBB\x83";
+ break;
+ case 0xB4 :
+ return "\xE1\xBB\x95";
+ break;
+ }
+ break;
+ case 0xC4 :
+ if (prefix[1] == 0x83) {
+ return "\xE1\xBA\xB3";
+ }
+ break;
+ case 0xC6 :
+ switch (prefix[1]) {
+ case 0xA1 :
+ return "\xE1\xBB\x9F";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xAD";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC3\xA5";
+ break;
+ case 0x75 :
+ return "\xC5\xAF";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x98";
+ break;
+ case 0x79 :
+ return "\xE1\xBA\x99";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[0]) {
+ case 0x6F :
+ return "\xC5\x91";
+ break;
+ case 0x75 :
+ return "\xC5\xB1";
+ break;
+ case 0xD0 :
+ if (prefix[1] == 0xA3) {
+ return "\xD3\xB2";
+ }
+ break;
+ case 0xD1 :
+ if (prefix[1] == 0x83) {
+ return "\xD3\xB3";
+ }
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC7\x8E";
+ break;
+ case 0x63 :
+ return "\xC4\x8D";
+ break;
+ case 0x64 :
+ return "\xC4\x8F";
+ break;
+ case 0x65 :
+ return "\xC4\x9B";
+ break;
+ case 0x67 :
+ return "\xC7\xA7";
+ break;
+ case 0x68 :
+ return "\xC8\x9F";
+ break;
+ case 0x69 :
+ return "\xC7\x90";
+ break;
+ case 0x6A :
+ return "\xC7\xB0";
+ break;
+ case 0x6B :
+ return "\xC7\xA9";
+ break;
+ case 0x6C :
+ return "\xC4\xBE";
+ break;
+ case 0x6E :
+ return "\xC5\x88";
+ break;
+ case 0x6F :
+ return "\xC7\x92";
+ break;
+ case 0x72 :
+ return "\xC5\x99";
+ break;
+ case 0x73 :
+ return "\xC5\xA1";
+ break;
+ case 0x74 :
+ return "\xC5\xA5";
+ break;
+ case 0x75 :
+ return "\xC7\x94";
+ break;
+ case 0x7A :
+ return "\xC5\xBE";
+ break;
+ case 0xC3 :
+ if (prefix[1] == 0xBC) {
+ return "\xC7\x9A";
+ }
+ break;
+ case 0xC6 :
+ if (prefix[1] == 0xB7) {
+ return "\xC7\xAE";
+ }
+ break;
+ case 0xCA :
+ if (prefix[1] == 0x92) {
+ return "\xC7\xAF";
+ }
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC8\x81";
+ break;
+ case 0x65 :
+ return "\xC8\x85";
+ break;
+ case 0x69 :
+ return "\xC8\x89";
+ break;
+ case 0x6F :
+ return "\xC8\x8D";
+ break;
+ case 0x72 :
+ return "\xC8\x91";
+ break;
+ case 0x75 :
+ return "\xC8\x95";
+ break;
+ case 0xD1 :
+ switch (prefix[1]) {
+ case 0xB4 :
+ return "\xD1\xB6";
+ break;
+ case 0xB5 :
+ return "\xD1\xB7";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC8\x83";
+ break;
+ case 0x65 :
+ return "\xC8\x87";
+ break;
+ case 0x69 :
+ return "\xC8\x8B";
+ break;
+ case 0x6F :
+ return "\xC8\x8F";
+ break;
+ case 0x72 :
+ return "\xC8\x93";
+ break;
+ case 0x75 :
+ return "\xC8\x97";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[0]) {
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBC\x88";
+ break;
+ case 0x95 :
+ return "\xE1\xBC\x98";
+ break;
+ case 0x97 :
+ return "\xE1\xBC\xA8";
+ break;
+ case 0x99 :
+ return "\xE1\xBC\xB8";
+ break;
+ case 0x9F :
+ return "\xE1\xBD\x88";
+ break;
+ case 0xA9 :
+ return "\xE1\xBD\xA8";
+ break;
+ case 0xB1 :
+ return "\xE1\xBC\x80";
+ break;
+ case 0xB5 :
+ return "\xE1\xBC\x90";
+ break;
+ case 0xB7 :
+ return "\xE1\xBC\xA0";
+ break;
+ case 0xB9 :
+ return "\xE1\xBC\xB0";
+ break;
+ case 0xBF :
+ return "\xE1\xBD\x80";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x81 :
+ return "\xE1\xBF\xA4";
+ break;
+ case 0x85 :
+ return "\xE1\xBD\x90";
+ break;
+ case 0x89 :
+ return "\xE1\xBD\xA0";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[0]) {
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBC\x89";
+ break;
+ case 0x95 :
+ return "\xE1\xBC\x99";
+ break;
+ case 0x97 :
+ return "\xE1\xBC\xA9";
+ break;
+ case 0x99 :
+ return "\xE1\xBC\xB9";
+ break;
+ case 0x9F :
+ return "\xE1\xBD\x89";
+ break;
+ case 0xA1 :
+ return "\xE1\xBF\xAC";
+ break;
+ case 0xA5 :
+ return "\xE1\xBD\x99";
+ break;
+ case 0xA9 :
+ return "\xE1\xBD\xA9";
+ break;
+ case 0xB1 :
+ return "\xE1\xBC\x81";
+ break;
+ case 0xB5 :
+ return "\xE1\xBC\x91";
+ break;
+ case 0xB7 :
+ return "\xE1\xBC\xA1";
+ break;
+ case 0xB9 :
+ return "\xE1\xBC\xB1";
+ break;
+ case 0xBF :
+ return "\xE1\xBD\x81";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x81 :
+ return "\xE1\xBF\xA5";
+ break;
+ case 0x85 :
+ return "\xE1\xBD\x91";
+ break;
+ case 0x89 :
+ return "\xE1\xBD\xA1";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[0]) {
+ case 0x6F :
+ return "\xC6\xA1";
+ break;
+ case 0x75 :
+ return "\xC6\xB0";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xE1\xBA\xA1";
+ break;
+ case 0x62 :
+ return "\xE1\xB8\x85";
+ break;
+ case 0x64 :
+ return "\xE1\xB8\x8D";
+ break;
+ case 0x65 :
+ return "\xE1\xBA\xB9";
+ break;
+ case 0x68 :
+ return "\xE1\xB8\xA5";
+ break;
+ case 0x69 :
+ return "\xE1\xBB\x8B";
+ break;
+ case 0x6B :
+ return "\xE1\xB8\xB3";
+ break;
+ case 0x6C :
+ return "\xE1\xB8\xB7";
+ break;
+ case 0x6D :
+ return "\xE1\xB9\x83";
+ break;
+ case 0x6E :
+ return "\xE1\xB9\x87";
+ break;
+ case 0x6F :
+ return "\xE1\xBB\x8D";
+ break;
+ case 0x72 :
+ return "\xE1\xB9\x9B";
+ break;
+ case 0x73 :
+ return "\xE1\xB9\xA3";
+ break;
+ case 0x74 :
+ return "\xE1\xB9\xAD";
+ break;
+ case 0x75 :
+ return "\xE1\xBB\xA5";
+ break;
+ case 0x76 :
+ return "\xE1\xB9\xBF";
+ break;
+ case 0x77 :
+ return "\xE1\xBA\x89";
+ break;
+ case 0x79 :
+ return "\xE1\xBB\xB5";
+ break;
+ case 0x7A :
+ return "\xE1\xBA\x93";
+ break;
+ case 0xC6 :
+ switch (prefix[1]) {
+ case 0xA1 :
+ return "\xE1\xBB\xA3";
+ break;
+ case 0xB0 :
+ return "\xE1\xBB\xB1";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xA4 :
+ if (prefix[0] == 0x75) {
+ return "\xE1\xB9\xB3";
+ }
+ break;
+ case 0xA5 :
+ if (prefix[0] == 0x61) {
+ return "\xE1\xB8\x81";
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[0]) {
+ case 0x73 :
+ return "\xC8\x99";
+ break;
+ case 0x74 :
+ return "\xC8\x9B";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[0]) {
+ case 0x63 :
+ return "\xC3\xA7";
+ break;
+ case 0x64 :
+ return "\xE1\xB8\x91";
+ break;
+ case 0x65 :
+ return "\xC8\xA9";
+ break;
+ case 0x67 :
+ return "\xC4\xA3";
+ break;
+ case 0x68 :
+ return "\xE1\xB8\xA9";
+ break;
+ case 0x6B :
+ return "\xC4\xB7";
+ break;
+ case 0x6C :
+ return "\xC4\xBC";
+ break;
+ case 0x6E :
+ return "\xC5\x86";
+ break;
+ case 0x72 :
+ return "\xC5\x97";
+ break;
+ case 0x73 :
+ return "\xC5\x9F";
+ break;
+ case 0x74 :
+ return "\xC5\xA3";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[0]) {
+ case 0x61 :
+ return "\xC4\x85";
+ break;
+ case 0x65 :
+ return "\xC4\x99";
+ break;
+ case 0x69 :
+ return "\xC4\xAF";
+ break;
+ case 0x6F :
+ return "\xC7\xAB";
+ break;
+ case 0x75 :
+ return "\xC5\xB3";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[0]) {
+ case 0x64 :
+ return "\xE1\xB8\x93";
+ break;
+ case 0x65 :
+ return "\xE1\xB8\x99";
+ break;
+ case 0x6C :
+ return "\xE1\xB8\xBD";
+ break;
+ case 0x6E :
+ return "\xE1\xB9\x8B";
+ break;
+ case 0x74 :
+ return "\xE1\xB9\xB1";
+ break;
+ case 0x75 :
+ return "\xE1\xB9\xB7";
+ break;
+ }
+ break;
+ case 0xAE :
+ if (prefix[0] == 0x68) {
+ return "\xE1\xB8\xAB";
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[0]) {
+ case 0x65 :
+ return "\xE1\xB8\x9B";
+ break;
+ case 0x69 :
+ return "\xE1\xB8\xAD";
+ break;
+ case 0x75 :
+ return "\xE1\xB9\xB5";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[0]) {
+ case 0x62 :
+ return "\xE1\xB8\x87";
+ break;
+ case 0x64 :
+ return "\xE1\xB8\x8F";
+ break;
+ case 0x68 :
+ return "\xE1\xBA\x96";
+ break;
+ case 0x6B :
+ return "\xE1\xB8\xB5";
+ break;
+ case 0x6C :
+ return "\xE1\xB8\xBB";
+ break;
+ case 0x6E :
+ return "\xE1\xB9\x89";
+ break;
+ case 0x72 :
+ return "\xE1\xB9\x9F";
+ break;
+ case 0x74 :
+ return "\xE1\xB9\xAF";
+ break;
+ case 0x7A :
+ return "\xE1\xBA\x95";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[0]) {
+ case 0x3C :
+ return "\xE2\x89\xAE";
+ break;
+ case 0x3D :
+ return "\xE2\x89\xA0";
+ break;
+ case 0x3E :
+ return "\xE2\x89\xAF";
+ break;
+ case 0xE2 :
+ switch (prefix[1]) {
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xE2\x86\x9A";
+ break;
+ case 0x92 :
+ return "\xE2\x86\x9B";
+ break;
+ case 0x94 :
+ return "\xE2\x86\xAE";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xE2\x87\x8D";
+ break;
+ case 0x92 :
+ return "\xE2\x87\x8F";
+ break;
+ case 0x94 :
+ return "\xE2\x87\x8E";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x83 :
+ return "\xE2\x88\x84";
+ break;
+ case 0x88 :
+ return "\xE2\x88\x89";
+ break;
+ case 0x8B :
+ return "\xE2\x88\x8C";
+ break;
+ case 0xA3 :
+ return "\xE2\x88\xA4";
+ break;
+ case 0xA5 :
+ return "\xE2\x88\xA6";
+ break;
+ case 0xBC :
+ return "\xE2\x89\x81";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x83 :
+ return "\xE2\x89\x84";
+ break;
+ case 0x85 :
+ return "\xE2\x89\x87";
+ break;
+ case 0x88 :
+ return "\xE2\x89\x89";
+ break;
+ case 0x8D :
+ return "\xE2\x89\xAD";
+ break;
+ case 0xA1 :
+ return "\xE2\x89\xA2";
+ break;
+ case 0xA4 :
+ return "\xE2\x89\xB0";
+ break;
+ case 0xA5 :
+ return "\xE2\x89\xB1";
+ break;
+ case 0xB2 :
+ return "\xE2\x89\xB4";
+ break;
+ case 0xB3 :
+ return "\xE2\x89\xB5";
+ break;
+ case 0xB6 :
+ return "\xE2\x89\xB8";
+ break;
+ case 0xB7 :
+ return "\xE2\x89\xB9";
+ break;
+ case 0xBA :
+ return "\xE2\x8A\x80";
+ break;
+ case 0xBB :
+ return "\xE2\x8A\x81";
+ break;
+ case 0xBC :
+ return "\xE2\x8B\xA0";
+ break;
+ case 0xBD :
+ return "\xE2\x8B\xA1";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x82 :
+ return "\xE2\x8A\x84";
+ break;
+ case 0x83 :
+ return "\xE2\x8A\x85";
+ break;
+ case 0x86 :
+ return "\xE2\x8A\x88";
+ break;
+ case 0x87 :
+ return "\xE2\x8A\x89";
+ break;
+ case 0x91 :
+ return "\xE2\x8B\xA2";
+ break;
+ case 0x92 :
+ return "\xE2\x8B\xA3";
+ break;
+ case 0xA2 :
+ return "\xE2\x8A\xAC";
+ break;
+ case 0xA8 :
+ return "\xE2\x8A\xAD";
+ break;
+ case 0xA9 :
+ return "\xE2\x8A\xAE";
+ break;
+ case 0xAB :
+ return "\xE2\x8A\xAF";
+ break;
+ case 0xB2 :
+ return "\xE2\x8B\xAA";
+ break;
+ case 0xB3 :
+ return "\xE2\x8B\xAB";
+ break;
+ case 0xB4 :
+ return "\xE2\x8B\xAC";
+ break;
+ case 0xB5 :
+ return "\xE2\x8B\xAD";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+case 0xCD :
+ switch (suffix[1]) {
+ case 0x82 :
+ switch (prefix[0]) {
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0xB1 :
+ return "\xE1\xBE\xB6";
+ break;
+ case 0xB7 :
+ return "\xE1\xBF\x86";
+ break;
+ case 0xB9 :
+ return "\xE1\xBF\x96";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x85 :
+ return "\xE1\xBF\xA6";
+ break;
+ case 0x89 :
+ return "\xE1\xBF\xB6";
+ break;
+ case 0x8A :
+ return "\xE1\xBF\x97";
+ break;
+ case 0x8B :
+ return "\xE1\xBF\xA7";
+ break;
+ }
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBC\x86";
+ break;
+ case 0x81 :
+ return "\xE1\xBC\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xBC\x8E";
+ break;
+ case 0x89 :
+ return "\xE1\xBC\x8F";
+ break;
+ case 0xA0 :
+ return "\xE1\xBC\xA6";
+ break;
+ case 0xA1 :
+ return "\xE1\xBC\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xBC\xAE";
+ break;
+ case 0xA9 :
+ return "\xE1\xBC\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xBC\xB6";
+ break;
+ case 0xB1 :
+ return "\xE1\xBC\xB7";
+ break;
+ case 0xB8 :
+ return "\xE1\xBC\xBE";
+ break;
+ case 0xB9 :
+ return "\xE1\xBC\xBF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xE1\xBD\x96";
+ break;
+ case 0x91 :
+ return "\xE1\xBD\x97";
+ break;
+ case 0x99 :
+ return "\xE1\xBD\x9F";
+ break;
+ case 0xA0 :
+ return "\xE1\xBD\xA6";
+ break;
+ case 0xA1 :
+ return "\xE1\xBD\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xBD\xAE";
+ break;
+ case 0xA9 :
+ return "\xE1\xBD\xAF";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[0]) {
+ case 0xCE :
+ switch (prefix[1]) {
+ case 0x91 :
+ return "\xE1\xBE\xBC";
+ break;
+ case 0x97 :
+ return "\xE1\xBF\x8C";
+ break;
+ case 0xA9 :
+ return "\xE1\xBF\xBC";
+ break;
+ case 0xAC :
+ return "\xE1\xBE\xB4";
+ break;
+ case 0xAE :
+ return "\xE1\xBF\x84";
+ break;
+ case 0xB1 :
+ return "\xE1\xBE\xB3";
+ break;
+ case 0xB7 :
+ return "\xE1\xBF\x83";
+ break;
+ }
+ break;
+ case 0xCF :
+ switch (prefix[1]) {
+ case 0x89 :
+ return "\xE1\xBF\xB3";
+ break;
+ case 0x8E :
+ return "\xE1\xBF\xB4";
+ break;
+ }
+ break;
+ case 0xE1 :
+ switch (prefix[1]) {
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xE1\xBE\x80";
+ break;
+ case 0x81 :
+ return "\xE1\xBE\x81";
+ break;
+ case 0x82 :
+ return "\xE1\xBE\x82";
+ break;
+ case 0x83 :
+ return "\xE1\xBE\x83";
+ break;
+ case 0x84 :
+ return "\xE1\xBE\x84";
+ break;
+ case 0x85 :
+ return "\xE1\xBE\x85";
+ break;
+ case 0x86 :
+ return "\xE1\xBE\x86";
+ break;
+ case 0x87 :
+ return "\xE1\xBE\x87";
+ break;
+ case 0x88 :
+ return "\xE1\xBE\x88";
+ break;
+ case 0x89 :
+ return "\xE1\xBE\x89";
+ break;
+ case 0x8A :
+ return "\xE1\xBE\x8A";
+ break;
+ case 0x8B :
+ return "\xE1\xBE\x8B";
+ break;
+ case 0x8C :
+ return "\xE1\xBE\x8C";
+ break;
+ case 0x8D :
+ return "\xE1\xBE\x8D";
+ break;
+ case 0x8E :
+ return "\xE1\xBE\x8E";
+ break;
+ case 0x8F :
+ return "\xE1\xBE\x8F";
+ break;
+ case 0xA0 :
+ return "\xE1\xBE\x90";
+ break;
+ case 0xA1 :
+ return "\xE1\xBE\x91";
+ break;
+ case 0xA2 :
+ return "\xE1\xBE\x92";
+ break;
+ case 0xA3 :
+ return "\xE1\xBE\x93";
+ break;
+ case 0xA4 :
+ return "\xE1\xBE\x94";
+ break;
+ case 0xA5 :
+ return "\xE1\xBE\x95";
+ break;
+ case 0xA6 :
+ return "\xE1\xBE\x96";
+ break;
+ case 0xA7 :
+ return "\xE1\xBE\x97";
+ break;
+ case 0xA8 :
+ return "\xE1\xBE\x98";
+ break;
+ case 0xA9 :
+ return "\xE1\xBE\x99";
+ break;
+ case 0xAA :
+ return "\xE1\xBE\x9A";
+ break;
+ case 0xAB :
+ return "\xE1\xBE\x9B";
+ break;
+ case 0xAC :
+ return "\xE1\xBE\x9C";
+ break;
+ case 0xAD :
+ return "\xE1\xBE\x9D";
+ break;
+ case 0xAE :
+ return "\xE1\xBE\x9E";
+ break;
+ case 0xAF :
+ return "\xE1\xBE\x9F";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0xA0 :
+ return "\xE1\xBE\xA0";
+ break;
+ case 0xA1 :
+ return "\xE1\xBE\xA1";
+ break;
+ case 0xA2 :
+ return "\xE1\xBE\xA2";
+ break;
+ case 0xA3 :
+ return "\xE1\xBE\xA3";
+ break;
+ case 0xA4 :
+ return "\xE1\xBE\xA4";
+ break;
+ case 0xA5 :
+ return "\xE1\xBE\xA5";
+ break;
+ case 0xA6 :
+ return "\xE1\xBE\xA6";
+ break;
+ case 0xA7 :
+ return "\xE1\xBE\xA7";
+ break;
+ case 0xA8 :
+ return "\xE1\xBE\xA8";
+ break;
+ case 0xA9 :
+ return "\xE1\xBE\xA9";
+ break;
+ case 0xAA :
+ return "\xE1\xBE\xAA";
+ break;
+ case 0xAB :
+ return "\xE1\xBE\xAB";
+ break;
+ case 0xAC :
+ return "\xE1\xBE\xAC";
+ break;
+ case 0xAD :
+ return "\xE1\xBE\xAD";
+ break;
+ case 0xAE :
+ return "\xE1\xBE\xAE";
+ break;
+ case 0xAF :
+ return "\xE1\xBE\xAF";
+ break;
+ case 0xB0 :
+ return "\xE1\xBE\xB2";
+ break;
+ case 0xB4 :
+ return "\xE1\xBF\x82";
+ break;
+ case 0xBC :
+ return "\xE1\xBF\xB2";
+ break;
+ }
+ break;
+ case 0xBE :
+ if (prefix[2] == 0xB6) {
+ return "\xE1\xBE\xB7";
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x86 :
+ return "\xE1\xBF\x87";
+ break;
+ case 0xB6 :
+ return "\xE1\xBF\xB7";
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+case 0xD9 :
+ switch (suffix[1]) {
+ case 0x93 :
+ if (prefix[0] == 0xD8) {
+ if (prefix[1] == 0xA7) {
+ return "\xD8\xA2";
+ }
+ }
+ break;
+ case 0x94 :
+ switch (prefix[0]) {
+ case 0xD8 :
+ if (prefix[1] == 0xA7) {
+ return "\xD8\xA3";
+ }
+ break;
+ case 0xD9 :
+ switch (prefix[1]) {
+ case 0x88 :
+ return "\xD8\xA4";
+ break;
+ case 0x8A :
+ return "\xD8\xA6";
+ break;
+ }
+ break;
+ case 0xDB :
+ switch (prefix[1]) {
+ case 0x81 :
+ return "\xDB\x82";
+ break;
+ case 0x92 :
+ return "\xDB\x93";
+ break;
+ case 0x95 :
+ return "\xDB\x80";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x95 :
+ if (prefix[0] == 0xD8) {
+ if (prefix[1] == 0xA7) {
+ return "\xD8\xA5";
+ }
+ }
+ break;
+ }
+ break;
+case 0xE0 :
+ switch (suffix[1]) {
+ case 0xA4 :
+ if (suffix[2] == 0xBC) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xA4) {
+ switch (prefix[2]) {
+ case 0xA8 :
+ return "\xE0\xA4\xA9";
+ break;
+ case 0xB0 :
+ return "\xE0\xA4\xB1";
+ break;
+ case 0xB3 :
+ return "\xE0\xA4\xB4";
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case 0xA6 :
+ if (suffix[2] == 0xBE) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xA7) {
+ if (prefix[2] == 0x87) {
+ return "\xE0\xA7\x8B";
+ }
+ }
+ }
+ }
+ break;
+ case 0xA7 :
+ if (suffix[2] == 0x97) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xA7) {
+ if (prefix[2] == 0x87) {
+ return "\xE0\xA7\x8C";
+ }
+ }
+ }
+ }
+ break;
+ case 0xAC :
+ if (suffix[2] == 0xBE) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xAD) {
+ if (prefix[2] == 0x87) {
+ return "\xE0\xAD\x8B";
+ }
+ }
+ }
+ }
+ break;
+ case 0xAD :
+ switch (suffix[2]) {
+ case 0x96 :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xAD) {
+ if (prefix[2] == 0x87) {
+ return "\xE0\xAD\x88";
+ }
+ }
+ }
+ break;
+ case 0x97 :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xAD) {
+ if (prefix[2] == 0x87) {
+ return "\xE0\xAD\x8C";
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 0xAE :
+ if (suffix[2] == 0xBE) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xAF) {
+ switch (prefix[2]) {
+ case 0x86 :
+ return "\xE0\xAF\x8A";
+ break;
+ case 0x87 :
+ return "\xE0\xAF\x8B";
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case 0xAF :
+ if (suffix[2] == 0x97) {
+ if (prefix[0] == 0xE0) {
+ switch (prefix[1]) {
+ case 0xAE :
+ if (prefix[2] == 0x92) {
+ return "\xE0\xAE\x94";
+ }
+ break;
+ case 0xAF :
+ if (prefix[2] == 0x86) {
+ return "\xE0\xAF\x8C";
+ }
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB1 :
+ if (suffix[2] == 0x96) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB1) {
+ if (prefix[2] == 0x86) {
+ return "\xE0\xB1\x88";
+ }
+ }
+ }
+ }
+ break;
+ case 0xB3 :
+ switch (suffix[2]) {
+ case 0x82 :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB3) {
+ if (prefix[2] == 0x86) {
+ return "\xE0\xB3\x8A";
+ }
+ }
+ }
+ break;
+ case 0x95 :
+ if (prefix[0] == 0xE0) {
+ switch (prefix[1]) {
+ case 0xB2 :
+ if (prefix[2] == 0xBF) {
+ return "\xE0\xB3\x80";
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x86 :
+ return "\xE0\xB3\x87";
+ break;
+ case 0x8A :
+ return "\xE0\xB3\x8B";
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ case 0x96 :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB3) {
+ if (prefix[2] == 0x86) {
+ return "\xE0\xB3\x88";
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 0xB4 :
+ if (suffix[2] == 0xBE) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB5) {
+ switch (prefix[2]) {
+ case 0x86 :
+ return "\xE0\xB5\x8A";
+ break;
+ case 0x87 :
+ return "\xE0\xB5\x8B";
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case 0xB5 :
+ if (suffix[2] == 0x97) {
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB5) {
+ if (prefix[2] == 0x86) {
+ return "\xE0\xB5\x8C";
+ }
+ }
+ }
+ }
+ break;
+ case 0xB7 :
+ switch (suffix[2]) {
+ case 0x8A :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB7) {
+ switch (prefix[2]) {
+ case 0x99 :
+ return "\xE0\xB7\x9A";
+ break;
+ case 0x9C :
+ return "\xE0\xB7\x9D";
+ break;
+ }
+ }
+ }
+ break;
+ case 0x8F :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB7) {
+ if (prefix[2] == 0x99) {
+ return "\xE0\xB7\x9C";
+ }
+ }
+ }
+ break;
+ case 0x9F :
+ if (prefix[0] == 0xE0) {
+ if (prefix[1] == 0xB7) {
+ if (prefix[2] == 0x99) {
+ return "\xE0\xB7\x9E";
+ }
+ }
+ }
+ break;
+ }
+ break;
+ }
+ break;
+case 0xE1 :
+ switch (suffix[1]) {
+ case 0x80 :
+ if (suffix[2] == 0xAE) {
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x80) {
+ if (prefix[2] == 0xA5) {
+ return "\xE1\x80\xA6";
+ }
+ }
+ }
+ }
+ break;
+ case 0x85 :
+ switch (suffix[2]) {
+ case 0xA1 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x80";
+ break;
+ case 0x81 :
+ return "\xEA\xB9\x8C";
+ break;
+ case 0x82 :
+ return "\xEB\x82\x98";
+ break;
+ case 0x83 :
+ return "\xEB\x8B\xA4";
+ break;
+ case 0x84 :
+ return "\xEB\x94\xB0";
+ break;
+ case 0x85 :
+ return "\xEB\x9D\xBC";
+ break;
+ case 0x86 :
+ return "\xEB\xA7\x88";
+ break;
+ case 0x87 :
+ return "\xEB\xB0\x94";
+ break;
+ case 0x88 :
+ return "\xEB\xB9\xA0";
+ break;
+ case 0x89 :
+ return "\xEC\x82\xAC";
+ break;
+ case 0x8A :
+ return "\xEC\x8B\xB8";
+ break;
+ case 0x8B :
+ return "\xEC\x95\x84";
+ break;
+ case 0x8C :
+ return "\xEC\x9E\x90";
+ break;
+ case 0x8D :
+ return "\xEC\xA7\x9C";
+ break;
+ case 0x8E :
+ return "\xEC\xB0\xA8";
+ break;
+ case 0x8F :
+ return "\xEC\xB9\xB4";
+ break;
+ case 0x90 :
+ return "\xED\x83\x80";
+ break;
+ case 0x91 :
+ return "\xED\x8C\x8C";
+ break;
+ case 0x92 :
+ return "\xED\x95\x98";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA2 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x9C";
+ break;
+ case 0x81 :
+ return "\xEA\xB9\xA8";
+ break;
+ case 0x82 :
+ return "\xEB\x82\xB4";
+ break;
+ case 0x83 :
+ return "\xEB\x8C\x80";
+ break;
+ case 0x84 :
+ return "\xEB\x95\x8C";
+ break;
+ case 0x85 :
+ return "\xEB\x9E\x98";
+ break;
+ case 0x86 :
+ return "\xEB\xA7\xA4";
+ break;
+ case 0x87 :
+ return "\xEB\xB0\xB0";
+ break;
+ case 0x88 :
+ return "\xEB\xB9\xBC";
+ break;
+ case 0x89 :
+ return "\xEC\x83\x88";
+ break;
+ case 0x8A :
+ return "\xEC\x8C\x94";
+ break;
+ case 0x8B :
+ return "\xEC\x95\xA0";
+ break;
+ case 0x8C :
+ return "\xEC\x9E\xAC";
+ break;
+ case 0x8D :
+ return "\xEC\xA7\xB8";
+ break;
+ case 0x8E :
+ return "\xEC\xB1\x84";
+ break;
+ case 0x8F :
+ return "\xEC\xBA\x90";
+ break;
+ case 0x90 :
+ return "\xED\x83\x9C";
+ break;
+ case 0x91 :
+ return "\xED\x8C\xA8";
+ break;
+ case 0x92 :
+ return "\xED\x95\xB4";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA3 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\xB8";
+ break;
+ case 0x81 :
+ return "\xEA\xBA\x84";
+ break;
+ case 0x82 :
+ return "\xEB\x83\x90";
+ break;
+ case 0x83 :
+ return "\xEB\x8C\x9C";
+ break;
+ case 0x84 :
+ return "\xEB\x95\xA8";
+ break;
+ case 0x85 :
+ return "\xEB\x9E\xB4";
+ break;
+ case 0x86 :
+ return "\xEB\xA8\x80";
+ break;
+ case 0x87 :
+ return "\xEB\xB1\x8C";
+ break;
+ case 0x88 :
+ return "\xEB\xBA\x98";
+ break;
+ case 0x89 :
+ return "\xEC\x83\xA4";
+ break;
+ case 0x8A :
+ return "\xEC\x8C\xB0";
+ break;
+ case 0x8B :
+ return "\xEC\x95\xBC";
+ break;
+ case 0x8C :
+ return "\xEC\x9F\x88";
+ break;
+ case 0x8D :
+ return "\xEC\xA8\x94";
+ break;
+ case 0x8E :
+ return "\xEC\xB1\xA0";
+ break;
+ case 0x8F :
+ return "\xEC\xBA\xAC";
+ break;
+ case 0x90 :
+ return "\xED\x83\xB8";
+ break;
+ case 0x91 :
+ return "\xED\x8D\x84";
+ break;
+ case 0x92 :
+ return "\xED\x96\x90";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA4 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB1\x94";
+ break;
+ case 0x81 :
+ return "\xEA\xBA\xA0";
+ break;
+ case 0x82 :
+ return "\xEB\x83\xAC";
+ break;
+ case 0x83 :
+ return "\xEB\x8C\xB8";
+ break;
+ case 0x84 :
+ return "\xEB\x96\x84";
+ break;
+ case 0x85 :
+ return "\xEB\x9F\x90";
+ break;
+ case 0x86 :
+ return "\xEB\xA8\x9C";
+ break;
+ case 0x87 :
+ return "\xEB\xB1\xA8";
+ break;
+ case 0x88 :
+ return "\xEB\xBA\xB4";
+ break;
+ case 0x89 :
+ return "\xEC\x84\x80";
+ break;
+ case 0x8A :
+ return "\xEC\x8D\x8C";
+ break;
+ case 0x8B :
+ return "\xEC\x96\x98";
+ break;
+ case 0x8C :
+ return "\xEC\x9F\xA4";
+ break;
+ case 0x8D :
+ return "\xEC\xA8\xB0";
+ break;
+ case 0x8E :
+ return "\xEC\xB1\xBC";
+ break;
+ case 0x8F :
+ return "\xEC\xBB\x88";
+ break;
+ case 0x90 :
+ return "\xED\x84\x94";
+ break;
+ case 0x91 :
+ return "\xED\x8D\xA0";
+ break;
+ case 0x92 :
+ return "\xED\x96\xAC";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA5 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB1\xB0";
+ break;
+ case 0x81 :
+ return "\xEA\xBA\xBC";
+ break;
+ case 0x82 :
+ return "\xEB\x84\x88";
+ break;
+ case 0x83 :
+ return "\xEB\x8D\x94";
+ break;
+ case 0x84 :
+ return "\xEB\x96\xA0";
+ break;
+ case 0x85 :
+ return "\xEB\x9F\xAC";
+ break;
+ case 0x86 :
+ return "\xEB\xA8\xB8";
+ break;
+ case 0x87 :
+ return "\xEB\xB2\x84";
+ break;
+ case 0x88 :
+ return "\xEB\xBB\x90";
+ break;
+ case 0x89 :
+ return "\xEC\x84\x9C";
+ break;
+ case 0x8A :
+ return "\xEC\x8D\xA8";
+ break;
+ case 0x8B :
+ return "\xEC\x96\xB4";
+ break;
+ case 0x8C :
+ return "\xEC\xA0\x80";
+ break;
+ case 0x8D :
+ return "\xEC\xA9\x8C";
+ break;
+ case 0x8E :
+ return "\xEC\xB2\x98";
+ break;
+ case 0x8F :
+ return "\xEC\xBB\xA4";
+ break;
+ case 0x90 :
+ return "\xED\x84\xB0";
+ break;
+ case 0x91 :
+ return "\xED\x8D\xBC";
+ break;
+ case 0x92 :
+ return "\xED\x97\x88";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA6 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB2\x8C";
+ break;
+ case 0x81 :
+ return "\xEA\xBB\x98";
+ break;
+ case 0x82 :
+ return "\xEB\x84\xA4";
+ break;
+ case 0x83 :
+ return "\xEB\x8D\xB0";
+ break;
+ case 0x84 :
+ return "\xEB\x96\xBC";
+ break;
+ case 0x85 :
+ return "\xEB\xA0\x88";
+ break;
+ case 0x86 :
+ return "\xEB\xA9\x94";
+ break;
+ case 0x87 :
+ return "\xEB\xB2\xA0";
+ break;
+ case 0x88 :
+ return "\xEB\xBB\xAC";
+ break;
+ case 0x89 :
+ return "\xEC\x84\xB8";
+ break;
+ case 0x8A :
+ return "\xEC\x8E\x84";
+ break;
+ case 0x8B :
+ return "\xEC\x97\x90";
+ break;
+ case 0x8C :
+ return "\xEC\xA0\x9C";
+ break;
+ case 0x8D :
+ return "\xEC\xA9\xA8";
+ break;
+ case 0x8E :
+ return "\xEC\xB2\xB4";
+ break;
+ case 0x8F :
+ return "\xEC\xBC\x80";
+ break;
+ case 0x90 :
+ return "\xED\x85\x8C";
+ break;
+ case 0x91 :
+ return "\xED\x8E\x98";
+ break;
+ case 0x92 :
+ return "\xED\x97\xA4";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA7 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB2\xA8";
+ break;
+ case 0x81 :
+ return "\xEA\xBB\xB4";
+ break;
+ case 0x82 :
+ return "\xEB\x85\x80";
+ break;
+ case 0x83 :
+ return "\xEB\x8E\x8C";
+ break;
+ case 0x84 :
+ return "\xEB\x97\x98";
+ break;
+ case 0x85 :
+ return "\xEB\xA0\xA4";
+ break;
+ case 0x86 :
+ return "\xEB\xA9\xB0";
+ break;
+ case 0x87 :
+ return "\xEB\xB2\xBC";
+ break;
+ case 0x88 :
+ return "\xEB\xBC\x88";
+ break;
+ case 0x89 :
+ return "\xEC\x85\x94";
+ break;
+ case 0x8A :
+ return "\xEC\x8E\xA0";
+ break;
+ case 0x8B :
+ return "\xEC\x97\xAC";
+ break;
+ case 0x8C :
+ return "\xEC\xA0\xB8";
+ break;
+ case 0x8D :
+ return "\xEC\xAA\x84";
+ break;
+ case 0x8E :
+ return "\xEC\xB3\x90";
+ break;
+ case 0x8F :
+ return "\xEC\xBC\x9C";
+ break;
+ case 0x90 :
+ return "\xED\x85\xA8";
+ break;
+ case 0x91 :
+ return "\xED\x8E\xB4";
+ break;
+ case 0x92 :
+ return "\xED\x98\x80";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA8 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB3\x84";
+ break;
+ case 0x81 :
+ return "\xEA\xBC\x90";
+ break;
+ case 0x82 :
+ return "\xEB\x85\x9C";
+ break;
+ case 0x83 :
+ return "\xEB\x8E\xA8";
+ break;
+ case 0x84 :
+ return "\xEB\x97\xB4";
+ break;
+ case 0x85 :
+ return "\xEB\xA1\x80";
+ break;
+ case 0x86 :
+ return "\xEB\xAA\x8C";
+ break;
+ case 0x87 :
+ return "\xEB\xB3\x98";
+ break;
+ case 0x88 :
+ return "\xEB\xBC\xA4";
+ break;
+ case 0x89 :
+ return "\xEC\x85\xB0";
+ break;
+ case 0x8A :
+ return "\xEC\x8E\xBC";
+ break;
+ case 0x8B :
+ return "\xEC\x98\x88";
+ break;
+ case 0x8C :
+ return "\xEC\xA1\x94";
+ break;
+ case 0x8D :
+ return "\xEC\xAA\xA0";
+ break;
+ case 0x8E :
+ return "\xEC\xB3\xAC";
+ break;
+ case 0x8F :
+ return "\xEC\xBC\xB8";
+ break;
+ case 0x90 :
+ return "\xED\x86\x84";
+ break;
+ case 0x91 :
+ return "\xED\x8F\x90";
+ break;
+ case 0x92 :
+ return "\xED\x98\x9C";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xA9 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB3\xA0";
+ break;
+ case 0x81 :
+ return "\xEA\xBC\xAC";
+ break;
+ case 0x82 :
+ return "\xEB\x85\xB8";
+ break;
+ case 0x83 :
+ return "\xEB\x8F\x84";
+ break;
+ case 0x84 :
+ return "\xEB\x98\x90";
+ break;
+ case 0x85 :
+ return "\xEB\xA1\x9C";
+ break;
+ case 0x86 :
+ return "\xEB\xAA\xA8";
+ break;
+ case 0x87 :
+ return "\xEB\xB3\xB4";
+ break;
+ case 0x88 :
+ return "\xEB\xBD\x80";
+ break;
+ case 0x89 :
+ return "\xEC\x86\x8C";
+ break;
+ case 0x8A :
+ return "\xEC\x8F\x98";
+ break;
+ case 0x8B :
+ return "\xEC\x98\xA4";
+ break;
+ case 0x8C :
+ return "\xEC\xA1\xB0";
+ break;
+ case 0x8D :
+ return "\xEC\xAA\xBC";
+ break;
+ case 0x8E :
+ return "\xEC\xB4\x88";
+ break;
+ case 0x8F :
+ return "\xEC\xBD\x94";
+ break;
+ case 0x90 :
+ return "\xED\x86\xA0";
+ break;
+ case 0x91 :
+ return "\xED\x8F\xAC";
+ break;
+ case 0x92 :
+ return "\xED\x98\xB8";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAA :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB3\xBC";
+ break;
+ case 0x81 :
+ return "\xEA\xBD\x88";
+ break;
+ case 0x82 :
+ return "\xEB\x86\x94";
+ break;
+ case 0x83 :
+ return "\xEB\x8F\xA0";
+ break;
+ case 0x84 :
+ return "\xEB\x98\xAC";
+ break;
+ case 0x85 :
+ return "\xEB\xA1\xB8";
+ break;
+ case 0x86 :
+ return "\xEB\xAB\x84";
+ break;
+ case 0x87 :
+ return "\xEB\xB4\x90";
+ break;
+ case 0x88 :
+ return "\xEB\xBD\x9C";
+ break;
+ case 0x89 :
+ return "\xEC\x86\xA8";
+ break;
+ case 0x8A :
+ return "\xEC\x8F\xB4";
+ break;
+ case 0x8B :
+ return "\xEC\x99\x80";
+ break;
+ case 0x8C :
+ return "\xEC\xA2\x8C";
+ break;
+ case 0x8D :
+ return "\xEC\xAB\x98";
+ break;
+ case 0x8E :
+ return "\xEC\xB4\xA4";
+ break;
+ case 0x8F :
+ return "\xEC\xBD\xB0";
+ break;
+ case 0x90 :
+ return "\xED\x86\xBC";
+ break;
+ case 0x91 :
+ return "\xED\x90\x88";
+ break;
+ case 0x92 :
+ return "\xED\x99\x94";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAB :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB4\x98";
+ break;
+ case 0x81 :
+ return "\xEA\xBD\xA4";
+ break;
+ case 0x82 :
+ return "\xEB\x86\xB0";
+ break;
+ case 0x83 :
+ return "\xEB\x8F\xBC";
+ break;
+ case 0x84 :
+ return "\xEB\x99\x88";
+ break;
+ case 0x85 :
+ return "\xEB\xA2\x94";
+ break;
+ case 0x86 :
+ return "\xEB\xAB\xA0";
+ break;
+ case 0x87 :
+ return "\xEB\xB4\xAC";
+ break;
+ case 0x88 :
+ return "\xEB\xBD\xB8";
+ break;
+ case 0x89 :
+ return "\xEC\x87\x84";
+ break;
+ case 0x8A :
+ return "\xEC\x90\x90";
+ break;
+ case 0x8B :
+ return "\xEC\x99\x9C";
+ break;
+ case 0x8C :
+ return "\xEC\xA2\xA8";
+ break;
+ case 0x8D :
+ return "\xEC\xAB\xB4";
+ break;
+ case 0x8E :
+ return "\xEC\xB5\x80";
+ break;
+ case 0x8F :
+ return "\xEC\xBE\x8C";
+ break;
+ case 0x90 :
+ return "\xED\x87\x98";
+ break;
+ case 0x91 :
+ return "\xED\x90\xA4";
+ break;
+ case 0x92 :
+ return "\xED\x99\xB0";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAC :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB4\xB4";
+ break;
+ case 0x81 :
+ return "\xEA\xBE\x80";
+ break;
+ case 0x82 :
+ return "\xEB\x87\x8C";
+ break;
+ case 0x83 :
+ return "\xEB\x90\x98";
+ break;
+ case 0x84 :
+ return "\xEB\x99\xA4";
+ break;
+ case 0x85 :
+ return "\xEB\xA2\xB0";
+ break;
+ case 0x86 :
+ return "\xEB\xAB\xBC";
+ break;
+ case 0x87 :
+ return "\xEB\xB5\x88";
+ break;
+ case 0x88 :
+ return "\xEB\xBE\x94";
+ break;
+ case 0x89 :
+ return "\xEC\x87\xA0";
+ break;
+ case 0x8A :
+ return "\xEC\x90\xAC";
+ break;
+ case 0x8B :
+ return "\xEC\x99\xB8";
+ break;
+ case 0x8C :
+ return "\xEC\xA3\x84";
+ break;
+ case 0x8D :
+ return "\xEC\xAC\x90";
+ break;
+ case 0x8E :
+ return "\xEC\xB5\x9C";
+ break;
+ case 0x8F :
+ return "\xEC\xBE\xA8";
+ break;
+ case 0x90 :
+ return "\xED\x87\xB4";
+ break;
+ case 0x91 :
+ return "\xED\x91\x80";
+ break;
+ case 0x92 :
+ return "\xED\x9A\x8C";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAD :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB5\x90";
+ break;
+ case 0x81 :
+ return "\xEA\xBE\x9C";
+ break;
+ case 0x82 :
+ return "\xEB\x87\xA8";
+ break;
+ case 0x83 :
+ return "\xEB\x90\xB4";
+ break;
+ case 0x84 :
+ return "\xEB\x9A\x80";
+ break;
+ case 0x85 :
+ return "\xEB\xA3\x8C";
+ break;
+ case 0x86 :
+ return "\xEB\xAC\x98";
+ break;
+ case 0x87 :
+ return "\xEB\xB5\xA4";
+ break;
+ case 0x88 :
+ return "\xEB\xBE\xB0";
+ break;
+ case 0x89 :
+ return "\xEC\x87\xBC";
+ break;
+ case 0x8A :
+ return "\xEC\x91\x88";
+ break;
+ case 0x8B :
+ return "\xEC\x9A\x94";
+ break;
+ case 0x8C :
+ return "\xEC\xA3\xA0";
+ break;
+ case 0x8D :
+ return "\xEC\xAC\xAC";
+ break;
+ case 0x8E :
+ return "\xEC\xB5\xB8";
+ break;
+ case 0x8F :
+ return "\xEC\xBF\x84";
+ break;
+ case 0x90 :
+ return "\xED\x88\x90";
+ break;
+ case 0x91 :
+ return "\xED\x91\x9C";
+ break;
+ case 0x92 :
+ return "\xED\x9A\xA8";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAE :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB5\xAC";
+ break;
+ case 0x81 :
+ return "\xEA\xBE\xB8";
+ break;
+ case 0x82 :
+ return "\xEB\x88\x84";
+ break;
+ case 0x83 :
+ return "\xEB\x91\x90";
+ break;
+ case 0x84 :
+ return "\xEB\x9A\x9C";
+ break;
+ case 0x85 :
+ return "\xEB\xA3\xA8";
+ break;
+ case 0x86 :
+ return "\xEB\xAC\xB4";
+ break;
+ case 0x87 :
+ return "\xEB\xB6\x80";
+ break;
+ case 0x88 :
+ return "\xEB\xBF\x8C";
+ break;
+ case 0x89 :
+ return "\xEC\x88\x98";
+ break;
+ case 0x8A :
+ return "\xEC\x91\xA4";
+ break;
+ case 0x8B :
+ return "\xEC\x9A\xB0";
+ break;
+ case 0x8C :
+ return "\xEC\xA3\xBC";
+ break;
+ case 0x8D :
+ return "\xEC\xAD\x88";
+ break;
+ case 0x8E :
+ return "\xEC\xB6\x94";
+ break;
+ case 0x8F :
+ return "\xEC\xBF\xA0";
+ break;
+ case 0x90 :
+ return "\xED\x88\xAC";
+ break;
+ case 0x91 :
+ return "\xED\x91\xB8";
+ break;
+ case 0x92 :
+ return "\xED\x9B\x84";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xAF :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB6\x88";
+ break;
+ case 0x81 :
+ return "\xEA\xBF\x94";
+ break;
+ case 0x82 :
+ return "\xEB\x88\xA0";
+ break;
+ case 0x83 :
+ return "\xEB\x91\xAC";
+ break;
+ case 0x84 :
+ return "\xEB\x9A\xB8";
+ break;
+ case 0x85 :
+ return "\xEB\xA4\x84";
+ break;
+ case 0x86 :
+ return "\xEB\xAD\x90";
+ break;
+ case 0x87 :
+ return "\xEB\xB6\x9C";
+ break;
+ case 0x88 :
+ return "\xEB\xBF\xA8";
+ break;
+ case 0x89 :
+ return "\xEC\x88\xB4";
+ break;
+ case 0x8A :
+ return "\xEC\x92\x80";
+ break;
+ case 0x8B :
+ return "\xEC\x9B\x8C";
+ break;
+ case 0x8C :
+ return "\xEC\xA4\x98";
+ break;
+ case 0x8D :
+ return "\xEC\xAD\xA4";
+ break;
+ case 0x8E :
+ return "\xEC\xB6\xB0";
+ break;
+ case 0x8F :
+ return "\xEC\xBF\xBC";
+ break;
+ case 0x90 :
+ return "\xED\x89\x88";
+ break;
+ case 0x91 :
+ return "\xED\x92\x94";
+ break;
+ case 0x92 :
+ return "\xED\x9B\xA0";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB0 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB6\xA4";
+ break;
+ case 0x81 :
+ return "\xEA\xBF\xB0";
+ break;
+ case 0x82 :
+ return "\xEB\x88\xBC";
+ break;
+ case 0x83 :
+ return "\xEB\x92\x88";
+ break;
+ case 0x84 :
+ return "\xEB\x9B\x94";
+ break;
+ case 0x85 :
+ return "\xEB\xA4\xA0";
+ break;
+ case 0x86 :
+ return "\xEB\xAD\xAC";
+ break;
+ case 0x87 :
+ return "\xEB\xB6\xB8";
+ break;
+ case 0x88 :
+ return "\xEC\x80\x84";
+ break;
+ case 0x89 :
+ return "\xEC\x89\x90";
+ break;
+ case 0x8A :
+ return "\xEC\x92\x9C";
+ break;
+ case 0x8B :
+ return "\xEC\x9B\xA8";
+ break;
+ case 0x8C :
+ return "\xEC\xA4\xB4";
+ break;
+ case 0x8D :
+ return "\xEC\xAE\x80";
+ break;
+ case 0x8E :
+ return "\xEC\xB7\x8C";
+ break;
+ case 0x8F :
+ return "\xED\x80\x98";
+ break;
+ case 0x90 :
+ return "\xED\x89\xA4";
+ break;
+ case 0x91 :
+ return "\xED\x92\xB0";
+ break;
+ case 0x92 :
+ return "\xED\x9B\xBC";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB1 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x80";
+ break;
+ case 0x81 :
+ return "\xEB\x80\x8C";
+ break;
+ case 0x82 :
+ return "\xEB\x89\x98";
+ break;
+ case 0x83 :
+ return "\xEB\x92\xA4";
+ break;
+ case 0x84 :
+ return "\xEB\x9B\xB0";
+ break;
+ case 0x85 :
+ return "\xEB\xA4\xBC";
+ break;
+ case 0x86 :
+ return "\xEB\xAE\x88";
+ break;
+ case 0x87 :
+ return "\xEB\xB7\x94";
+ break;
+ case 0x88 :
+ return "\xEC\x80\xA0";
+ break;
+ case 0x89 :
+ return "\xEC\x89\xAC";
+ break;
+ case 0x8A :
+ return "\xEC\x92\xB8";
+ break;
+ case 0x8B :
+ return "\xEC\x9C\x84";
+ break;
+ case 0x8C :
+ return "\xEC\xA5\x90";
+ break;
+ case 0x8D :
+ return "\xEC\xAE\x9C";
+ break;
+ case 0x8E :
+ return "\xEC\xB7\xA8";
+ break;
+ case 0x8F :
+ return "\xED\x80\xB4";
+ break;
+ case 0x90 :
+ return "\xED\x8A\x80";
+ break;
+ case 0x91 :
+ return "\xED\x93\x8C";
+ break;
+ case 0x92 :
+ return "\xED\x9C\x98";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB2 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x9C";
+ break;
+ case 0x81 :
+ return "\xEB\x80\xA8";
+ break;
+ case 0x82 :
+ return "\xEB\x89\xB4";
+ break;
+ case 0x83 :
+ return "\xEB\x93\x80";
+ break;
+ case 0x84 :
+ return "\xEB\x9C\x8C";
+ break;
+ case 0x85 :
+ return "\xEB\xA5\x98";
+ break;
+ case 0x86 :
+ return "\xEB\xAE\xA4";
+ break;
+ case 0x87 :
+ return "\xEB\xB7\xB0";
+ break;
+ case 0x88 :
+ return "\xEC\x80\xBC";
+ break;
+ case 0x89 :
+ return "\xEC\x8A\x88";
+ break;
+ case 0x8A :
+ return "\xEC\x93\x94";
+ break;
+ case 0x8B :
+ return "\xEC\x9C\xA0";
+ break;
+ case 0x8C :
+ return "\xEC\xA5\xAC";
+ break;
+ case 0x8D :
+ return "\xEC\xAE\xB8";
+ break;
+ case 0x8E :
+ return "\xEC\xB8\x84";
+ break;
+ case 0x8F :
+ return "\xED\x81\x90";
+ break;
+ case 0x90 :
+ return "\xED\x8A\x9C";
+ break;
+ case 0x91 :
+ return "\xED\x93\xA8";
+ break;
+ case 0x92 :
+ return "\xED\x9C\xB4";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB3 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\xB8";
+ break;
+ case 0x81 :
+ return "\xEB\x81\x84";
+ break;
+ case 0x82 :
+ return "\xEB\x8A\x90";
+ break;
+ case 0x83 :
+ return "\xEB\x93\x9C";
+ break;
+ case 0x84 :
+ return "\xEB\x9C\xA8";
+ break;
+ case 0x85 :
+ return "\xEB\xA5\xB4";
+ break;
+ case 0x86 :
+ return "\xEB\xAF\x80";
+ break;
+ case 0x87 :
+ return "\xEB\xB8\x8C";
+ break;
+ case 0x88 :
+ return "\xEC\x81\x98";
+ break;
+ case 0x89 :
+ return "\xEC\x8A\xA4";
+ break;
+ case 0x8A :
+ return "\xEC\x93\xB0";
+ break;
+ case 0x8B :
+ return "\xEC\x9C\xBC";
+ break;
+ case 0x8C :
+ return "\xEC\xA6\x88";
+ break;
+ case 0x8D :
+ return "\xEC\xAF\x94";
+ break;
+ case 0x8E :
+ return "\xEC\xB8\xA0";
+ break;
+ case 0x8F :
+ return "\xED\x81\xAC";
+ break;
+ case 0x90 :
+ return "\xED\x8A\xB8";
+ break;
+ case 0x91 :
+ return "\xED\x94\x84";
+ break;
+ case 0x92 :
+ return "\xED\x9D\x90";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB4 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB8\x94";
+ break;
+ case 0x81 :
+ return "\xEB\x81\xA0";
+ break;
+ case 0x82 :
+ return "\xEB\x8A\xAC";
+ break;
+ case 0x83 :
+ return "\xEB\x93\xB8";
+ break;
+ case 0x84 :
+ return "\xEB\x9D\x84";
+ break;
+ case 0x85 :
+ return "\xEB\xA6\x90";
+ break;
+ case 0x86 :
+ return "\xEB\xAF\x9C";
+ break;
+ case 0x87 :
+ return "\xEB\xB8\xA8";
+ break;
+ case 0x88 :
+ return "\xEC\x81\xB4";
+ break;
+ case 0x89 :
+ return "\xEC\x8B\x80";
+ break;
+ case 0x8A :
+ return "\xEC\x94\x8C";
+ break;
+ case 0x8B :
+ return "\xEC\x9D\x98";
+ break;
+ case 0x8C :
+ return "\xEC\xA6\xA4";
+ break;
+ case 0x8D :
+ return "\xEC\xAF\xB0";
+ break;
+ case 0x8E :
+ return "\xEC\xB8\xBC";
+ break;
+ case 0x8F :
+ return "\xED\x82\x88";
+ break;
+ case 0x90 :
+ return "\xED\x8B\x94";
+ break;
+ case 0x91 :
+ return "\xED\x94\xA0";
+ break;
+ case 0x92 :
+ return "\xED\x9D\xAC";
+ break;
+ }
+ }
+ }
+ break;
+ case 0xB5 :
+ if (prefix[0] == 0xE1) {
+ if (prefix[1] == 0x84) {
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB8\xB0";
+ break;
+ case 0x81 :
+ return "\xEB\x81\xBC";
+ break;
+ case 0x82 :
+ return "\xEB\x8B\x88";
+ break;
+ case 0x83 :
+ return "\xEB\x94\x94";
+ break;
+ case 0x84 :
+ return "\xEB\x9D\xA0";
+ break;
+ case 0x85 :
+ return "\xEB\xA6\xAC";
+ break;
+ case 0x86 :
+ return "\xEB\xAF\xB8";
+ break;
+ case 0x87 :
+ return "\xEB\xB9\x84";
+ break;
+ case 0x88 :
+ return "\xEC\x82\x90";
+ break;
+ case 0x89 :
+ return "\xEC\x8B\x9C";
+ break;
+ case 0x8A :
+ return "\xEC\x94\xA8";
+ break;
+ case 0x8B :
+ return "\xEC\x9D\xB4";
+ break;
+ case 0x8C :
+ return "\xEC\xA7\x80";
+ break;
+ case 0x8D :
+ return "\xEC\xB0\x8C";
+ break;
+ case 0x8E :
+ return "\xEC\xB9\x98";
+ break;
+ case 0x8F :
+ return "\xED\x82\xA4";
+ break;
+ case 0x90 :
+ return "\xED\x8B\xB0";
+ break;
+ case 0x91 :
+ return "\xED\x94\xBC";
+ break;
+ case 0x92 :
+ return "\xED\x9E\x88";
+ break;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (suffix[2]) {
+ case 0xA8 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x81";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\x9D";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xB9";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x95";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB1";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x8D";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xA9";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x85";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA1";
+ break;
+ case 0xBC :
+ return "\xEA\xB3\xBD";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x99";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xB5";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x91";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xAD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x89";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xA5";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x81";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\x9D";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xB9";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x95";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB1";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x8D";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xA9";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x85";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA1";
+ break;
+ case 0xBC :
+ return "\xEA\xBA\xBD";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x99";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xB5";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x91";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xAD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x89";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xA5";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x81";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\x9D";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xB9";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x95";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB1";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xA9";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\x81\xBD";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xB5";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x91";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xAD";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xA5";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x81";
+ break;
+ case 0x9C :
+ return "\xEB\x85\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xB9";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB1";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xA9";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\x88\xBD";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xB5";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x91";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xAD";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xA5";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x81";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xB9";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB1";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xA9";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\x8F\xBD";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xB5";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x91";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xAD";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xA5";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x81";
+ break;
+ case 0x9C :
+ return "\xEB\x93\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xB9";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB1";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xA9";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\x96\xBD";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xB5";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x91";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xAD";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xA5";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x81";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xB9";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB1";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xA9";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\x9D\xBD";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xB5";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x91";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xAD";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xA5";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x81";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xB9";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB1";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xA9";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\xA4\xBD";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xB5";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x91";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xAD";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xA5";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x81";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xB9";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB1";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xA9";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\xAB\xBD";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xB5";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x91";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xAD";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xA5";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x81";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xB9";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB1";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xA9";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\xB2\xBD";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xB5";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x91";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xAD";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xA5";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x81";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xB9";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB1";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xA9";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x85";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA1";
+ break;
+ case 0xBC :
+ return "\xEB\xB9\xBD";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x99";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xB5";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x91";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xAD";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x89";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xA5";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x81";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\x9D";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xB9";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x95";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB1";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x8D";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xA9";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\x80\xBD";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xB5";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x91";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xAD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xA5";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x81";
+ break;
+ case 0x9C :
+ return "\xEC\x84\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xB9";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB1";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xA9";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\x87\xBD";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xB5";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x91";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xAD";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xA5";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x81";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xB9";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB1";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xA9";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\x8E\xBD";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xB5";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x91";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xAD";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xA5";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x81";
+ break;
+ case 0x9C :
+ return "\xEC\x92\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xB9";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB1";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xA9";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\x95\xBD";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xB5";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x91";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xAD";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xA5";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x81";
+ break;
+ case 0x9C :
+ return "\xEC\x99\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xB9";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB1";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xA9";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\x9C\xBD";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xB5";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x91";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xAD";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xA5";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x81";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xB9";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB1";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xA9";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\xA3\xBD";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xB5";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x91";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xAD";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xA5";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x81";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xB9";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB1";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xA9";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\xAA\xBD";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xB5";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x91";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xAD";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xA5";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x81";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xB9";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB1";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xA9";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\xB1\xBD";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xB5";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x91";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xAD";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xA5";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x81";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xB9";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB1";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xA9";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\xB8\xBD";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x99";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xB5";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x91";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xAD";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x89";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xA5";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x81";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\x9D";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xB9";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x95";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB1";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x8D";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xA9";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x85";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA1";
+ break;
+ case 0xBC :
+ return "\xEC\xBF\xBD";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x99";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xB5";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x91";
+ break;
+ case 0xAC :
+ return "\xED\x81\xAD";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x89";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xA5";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x81";
+ break;
+ case 0x9C :
+ return "\xED\x83\x9D";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xB9";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x95";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB1";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x8D";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xA9";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x85";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA1";
+ break;
+ case 0xBC :
+ return "\xED\x86\xBD";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x99";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xB5";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x91";
+ break;
+ case 0xAC :
+ return "\xED\x88\xAD";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x89";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xA5";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x81";
+ break;
+ case 0x9C :
+ return "\xED\x8A\x9D";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xB9";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x95";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB1";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x8D";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xA9";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x85";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA1";
+ break;
+ case 0xBC :
+ return "\xED\x8D\xBD";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x99";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xB5";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x91";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xAD";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x89";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xA5";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x81";
+ break;
+ case 0x9C :
+ return "\xED\x91\x9D";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xB9";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x95";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB1";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x8D";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xA9";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x85";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA1";
+ break;
+ case 0xBC :
+ return "\xED\x94\xBD";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x99";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xB5";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x91";
+ break;
+ case 0xAC :
+ return "\xED\x96\xAD";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x89";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xA5";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x81";
+ break;
+ case 0x9C :
+ return "\xED\x98\x9D";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xB9";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x95";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB1";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x8D";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xA9";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x85";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA1";
+ break;
+ case 0xBC :
+ return "\xED\x9B\xBD";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x99";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xB5";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x91";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xAD";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x89";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x82";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\x9E";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBA";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x96";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB2";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x8E";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAA";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x86";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA2";
+ break;
+ case 0xBC :
+ return "\xEA\xB3\xBE";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9A";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xB6";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x92";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xAE";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8A";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xA6";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x82";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\x9E";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBA";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x96";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB2";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x8E";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAA";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x86";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA2";
+ break;
+ case 0xBC :
+ return "\xEA\xBA\xBE";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9A";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xB6";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x92";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xAE";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8A";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xA6";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x82";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\x9E";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBA";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x96";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB2";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAA";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\x81\xBE";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xB6";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x92";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xAE";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xA6";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x82";
+ break;
+ case 0x9C :
+ return "\xEB\x85\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBA";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB2";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAA";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\x88\xBE";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xB6";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x92";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xAE";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xA6";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x82";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBA";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB2";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAA";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\x8F\xBE";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xB6";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x92";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xAE";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xA6";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x82";
+ break;
+ case 0x9C :
+ return "\xEB\x93\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBA";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB2";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAA";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\x96\xBE";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xB6";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x92";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xAE";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xA6";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x82";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBA";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB2";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAA";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\x9D\xBE";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xB6";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x92";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xAE";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xA6";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x82";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBA";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB2";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAA";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\xA4\xBE";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xB6";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x92";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xAE";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xA6";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x82";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBA";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB2";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAA";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\xAB\xBE";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xB6";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x92";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xAE";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xA6";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x82";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBA";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB2";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAA";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\xB2\xBE";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xB6";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x92";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xAE";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xA6";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x82";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBA";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB2";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAA";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x86";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA2";
+ break;
+ case 0xBC :
+ return "\xEB\xB9\xBE";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9A";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xB6";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x92";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xAE";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8A";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xA6";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x82";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\x9E";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBA";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x96";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB2";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x8E";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAA";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\x80\xBE";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xB6";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x92";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xAE";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xA6";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x82";
+ break;
+ case 0x9C :
+ return "\xEC\x84\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBA";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB2";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAA";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\x87\xBE";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xB6";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x92";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xAE";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xA6";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x82";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBA";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB2";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAA";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\x8E\xBE";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xB6";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x92";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xAE";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xA6";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x82";
+ break;
+ case 0x9C :
+ return "\xEC\x92\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBA";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB2";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAA";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\x95\xBE";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xB6";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x92";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xAE";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xA6";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x82";
+ break;
+ case 0x9C :
+ return "\xEC\x99\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBA";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB2";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAA";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\x9C\xBE";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xB6";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x92";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xAE";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xA6";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x82";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBA";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB2";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAA";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\xA3\xBE";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xB6";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x92";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xAE";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xA6";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x82";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBA";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB2";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAA";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\xAA\xBE";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xB6";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x92";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xAE";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xA6";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x82";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBA";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB2";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAA";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\xB1\xBE";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xB6";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x92";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xAE";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xA6";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x82";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBA";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB2";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAA";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\xB8\xBE";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9A";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xB6";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x92";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xAE";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8A";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xA6";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x82";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\x9E";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBA";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x96";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB2";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x8E";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAA";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x86";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA2";
+ break;
+ case 0xBC :
+ return "\xEC\xBF\xBE";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9A";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xB6";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x92";
+ break;
+ case 0xAC :
+ return "\xED\x81\xAE";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8A";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xA6";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x82";
+ break;
+ case 0x9C :
+ return "\xED\x83\x9E";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBA";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x96";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB2";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x8E";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAA";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x86";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA2";
+ break;
+ case 0xBC :
+ return "\xED\x86\xBE";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9A";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xB6";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x92";
+ break;
+ case 0xAC :
+ return "\xED\x88\xAE";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8A";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xA6";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x82";
+ break;
+ case 0x9C :
+ return "\xED\x8A\x9E";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBA";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x96";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB2";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x8E";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAA";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x86";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA2";
+ break;
+ case 0xBC :
+ return "\xED\x8D\xBE";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9A";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xB6";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x92";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xAE";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8A";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xA6";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x82";
+ break;
+ case 0x9C :
+ return "\xED\x91\x9E";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBA";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x96";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB2";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x8E";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAA";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x86";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA2";
+ break;
+ case 0xBC :
+ return "\xED\x94\xBE";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9A";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xB6";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x92";
+ break;
+ case 0xAC :
+ return "\xED\x96\xAE";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8A";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xA6";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x82";
+ break;
+ case 0x9C :
+ return "\xED\x98\x9E";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBA";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x96";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB2";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x8E";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAA";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x86";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA2";
+ break;
+ case 0xBC :
+ return "\xED\x9B\xBE";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9A";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xB6";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x92";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xAE";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8A";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x83";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\x9F";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBB";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x97";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB3";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x8F";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAB";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x87";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA3";
+ break;
+ case 0xBC :
+ return "\xEA\xB3\xBF";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9B";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xB7";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x93";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xAF";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8B";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xA7";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x83";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\x9F";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBB";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x97";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB3";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x8F";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAB";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x87";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA3";
+ break;
+ case 0xBC :
+ return "\xEA\xBA\xBF";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9B";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xB7";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x93";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xAF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8B";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xA7";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x83";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\x9F";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBB";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x97";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB3";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAB";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\x81\xBF";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xB7";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x93";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xAF";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xA7";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x83";
+ break;
+ case 0x9C :
+ return "\xEB\x85\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBB";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB3";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAB";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\x88\xBF";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xB7";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x93";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xAF";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xA7";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x83";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBB";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB3";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAB";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\x8F\xBF";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xB7";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x93";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xAF";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xA7";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x83";
+ break;
+ case 0x9C :
+ return "\xEB\x93\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBB";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB3";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAB";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\x96\xBF";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xB7";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x93";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xAF";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xA7";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x83";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBB";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB3";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAB";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\x9D\xBF";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xB7";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x93";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xAF";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xA7";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x83";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBB";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB3";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAB";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\xA4\xBF";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xB7";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x93";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xAF";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xA7";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x83";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBB";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB3";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAB";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\xAB\xBF";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xB7";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x93";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xAF";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xA7";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x83";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBB";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB3";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAB";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\xB2\xBF";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xB7";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x93";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xAF";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xA7";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x83";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBB";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB3";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAB";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x87";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA3";
+ break;
+ case 0xBC :
+ return "\xEB\xB9\xBF";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9B";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xB7";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x93";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xAF";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8B";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xA7";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x83";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\x9F";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBB";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x97";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB3";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x8F";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAB";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\x80\xBF";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xB7";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x93";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xAF";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xA7";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x83";
+ break;
+ case 0x9C :
+ return "\xEC\x84\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBB";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB3";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAB";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\x87\xBF";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xB7";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x93";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xAF";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xA7";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x83";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBB";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB3";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAB";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\x8E\xBF";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xB7";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x93";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xAF";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xA7";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x83";
+ break;
+ case 0x9C :
+ return "\xEC\x92\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBB";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB3";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAB";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\x95\xBF";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xB7";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x93";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xAF";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xA7";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x83";
+ break;
+ case 0x9C :
+ return "\xEC\x99\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBB";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB3";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAB";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\x9C\xBF";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xB7";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x93";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xAF";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xA7";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x83";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBB";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB3";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAB";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\xA3\xBF";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xB7";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x93";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xAF";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xA7";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x83";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBB";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB3";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAB";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\xAA\xBF";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xB7";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x93";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xAF";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xA7";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x83";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBB";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB3";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAB";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\xB1\xBF";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xB7";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x93";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xAF";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xA7";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x83";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBB";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB3";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAB";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\xB8\xBF";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9B";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xB7";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x93";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xAF";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8B";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xA7";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x83";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\x9F";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBB";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x97";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB3";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x8F";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAB";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x87";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA3";
+ break;
+ case 0xBC :
+ return "\xEC\xBF\xBF";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9B";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xB7";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x93";
+ break;
+ case 0xAC :
+ return "\xED\x81\xAF";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8B";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xA7";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x83";
+ break;
+ case 0x9C :
+ return "\xED\x83\x9F";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBB";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x97";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB3";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x8F";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAB";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x87";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA3";
+ break;
+ case 0xBC :
+ return "\xED\x86\xBF";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9B";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xB7";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x93";
+ break;
+ case 0xAC :
+ return "\xED\x88\xAF";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8B";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xA7";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x83";
+ break;
+ case 0x9C :
+ return "\xED\x8A\x9F";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBB";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x97";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB3";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x8F";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAB";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x87";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA3";
+ break;
+ case 0xBC :
+ return "\xED\x8D\xBF";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9B";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xB7";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x93";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xAF";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8B";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xA7";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x83";
+ break;
+ case 0x9C :
+ return "\xED\x91\x9F";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBB";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x97";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB3";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x8F";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAB";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x87";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA3";
+ break;
+ case 0xBC :
+ return "\xED\x94\xBF";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9B";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xB7";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x93";
+ break;
+ case 0xAC :
+ return "\xED\x96\xAF";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8B";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xA7";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x83";
+ break;
+ case 0x9C :
+ return "\xED\x98\x9F";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBB";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x97";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB3";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x8F";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAB";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x87";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA3";
+ break;
+ case 0xBC :
+ return "\xED\x9B\xBF";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9B";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xB7";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x93";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xAF";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8B";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x84";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA0";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBC";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x98";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB4";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x90";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAC";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x88";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA4";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x80";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9C";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xB8";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x94";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB0";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8C";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xA8";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x84";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA0";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBC";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x98";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB4";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x90";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAC";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x88";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA4";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x80";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9C";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xB8";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x94";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB0";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8C";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xA8";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x84";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA0";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBC";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x98";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB4";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAC";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x80";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xB8";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x94";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB0";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xA8";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x84";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBC";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB4";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAC";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x80";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xB8";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x94";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB0";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xA8";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x84";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBC";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB4";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAC";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x80";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xB8";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x94";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB0";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xA8";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x84";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBC";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB4";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAC";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x80";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xB8";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x94";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB0";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xA8";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x84";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBC";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB4";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAC";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x80";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xB8";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x94";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB0";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xA8";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x84";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBC";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB4";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAC";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x80";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xB8";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x94";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB0";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xA8";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x84";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBC";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB4";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAC";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x80";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xB8";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x94";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB0";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xA8";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x84";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBC";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB4";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAC";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x80";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xB8";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x94";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB0";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xA8";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x84";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBC";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB4";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAC";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x88";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA4";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x80";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9C";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xB8";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x94";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB0";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8C";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xA8";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x84";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA0";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBC";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x98";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB4";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x90";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAC";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x80";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xB8";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x94";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB0";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xA8";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x84";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBC";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB4";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAC";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x80";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xB8";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x94";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB0";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xA8";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x84";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBC";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB4";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAC";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x80";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xB8";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x94";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB0";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xA8";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x84";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBC";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB4";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAC";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x80";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xB8";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x94";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB0";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xA8";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x84";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBC";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB4";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAC";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x80";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xB8";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x94";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB0";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xA8";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x84";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBC";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB4";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAC";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x80";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xB8";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x94";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB0";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xA8";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x84";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBC";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB4";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAC";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x80";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xB8";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x94";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB0";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xA8";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x84";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBC";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB4";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAC";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x80";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xB8";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x94";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB0";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xA8";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x84";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBC";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB4";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAC";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA4";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x80";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9C";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xB8";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x94";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB0";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8C";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xA8";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x84";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA0";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBC";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x98";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB4";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x90";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAC";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x88";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA4";
+ break;
+ case 0xBC :
+ return "\xED\x80\x80";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9C";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xB8";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x94";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB0";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8C";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xA8";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x84";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA0";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBC";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x98";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB4";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x90";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAC";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x88";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA4";
+ break;
+ case 0xBC :
+ return "\xED\x87\x80";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9C";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xB8";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x94";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB0";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8C";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xA8";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x84";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA0";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBC";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x98";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB4";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x90";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAC";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x88";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA4";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x80";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9C";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xB8";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x94";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB0";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8C";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xA8";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x84";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA0";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBC";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x98";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB4";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x90";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAC";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x88";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA4";
+ break;
+ case 0xBC :
+ return "\xED\x95\x80";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9C";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xB8";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x94";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB0";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8C";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xA8";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x84";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA0";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBC";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x98";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB4";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x90";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAC";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x88";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA4";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x80";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9C";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xB8";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x94";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB0";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8C";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x85";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA1";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBD";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x99";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB5";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x91";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAD";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x89";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA5";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x81";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9D";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xB9";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x95";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB1";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8D";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xA9";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x85";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA1";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBD";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x99";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB5";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x91";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAD";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x89";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA5";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x81";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9D";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xB9";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x95";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB1";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8D";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xA9";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x85";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA1";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBD";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x99";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB5";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAD";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x81";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xB9";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x95";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB1";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xA9";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x85";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBD";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB5";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAD";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x81";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xB9";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x95";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB1";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xA9";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x85";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBD";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB5";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAD";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x81";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xB9";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x95";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB1";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xA9";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x85";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBD";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB5";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAD";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x81";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xB9";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x95";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB1";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xA9";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x85";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBD";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB5";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAD";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x81";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xB9";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x95";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB1";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xA9";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x85";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBD";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB5";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAD";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x81";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xB9";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x95";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB1";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xA9";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x85";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBD";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB5";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAD";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x81";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xB9";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x95";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB1";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xA9";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x85";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBD";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB5";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAD";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x81";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xB9";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x95";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB1";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xA9";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x85";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBD";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB5";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAD";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x89";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA5";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x81";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9D";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xB9";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x95";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB1";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8D";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xA9";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x85";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA1";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBD";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x99";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB5";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x91";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAD";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x81";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xB9";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x95";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB1";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xA9";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x85";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBD";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB5";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAD";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x81";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xB9";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x95";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB1";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xA9";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x85";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBD";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB5";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAD";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x81";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xB9";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x95";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB1";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xA9";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x85";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBD";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB5";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAD";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x81";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xB9";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x95";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB1";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xA9";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x85";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBD";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB5";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAD";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x81";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xB9";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x95";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB1";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xA9";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x85";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBD";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB5";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAD";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x81";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xB9";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x95";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB1";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xA9";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x85";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBD";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB5";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAD";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x81";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xB9";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x95";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB1";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xA9";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x85";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBD";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB5";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAD";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x81";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xB9";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x95";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB1";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xA9";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x85";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB5";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAD";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA5";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x81";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9D";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xB9";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x95";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB1";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8D";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xA9";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x85";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA1";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x99";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB5";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x91";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAD";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x89";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA5";
+ break;
+ case 0xBC :
+ return "\xED\x80\x81";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9D";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xB9";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x95";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB1";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8D";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xA9";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x85";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA1";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBD";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x99";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB5";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x91";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAD";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x89";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA5";
+ break;
+ case 0xBC :
+ return "\xED\x87\x81";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9D";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xB9";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x95";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB1";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8D";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xA9";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x85";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA1";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBD";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x99";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB5";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x91";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAD";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x89";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA5";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x81";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9D";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xB9";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x95";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB1";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8D";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xA9";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x85";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA1";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBD";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x99";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB5";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x91";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAD";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x89";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA5";
+ break;
+ case 0xBC :
+ return "\xED\x95\x81";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9D";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xB9";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x95";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB1";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8D";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xA9";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x85";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA1";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBD";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x99";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB5";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x91";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAD";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x89";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA5";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x81";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9D";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xB9";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x95";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB1";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8D";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x86";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA2";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBE";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9A";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB6";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x92";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAE";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8A";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA6";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x82";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9E";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBA";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x96";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB2";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8E";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAA";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x86";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA2";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBE";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9A";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB6";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x92";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAE";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8A";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA6";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x82";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9E";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBA";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x96";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB2";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8E";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAA";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x86";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA2";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBE";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9A";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB6";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAE";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x82";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBA";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x96";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB2";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAA";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x86";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBE";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB6";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAE";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x82";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBA";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x96";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB2";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAA";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x86";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBE";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB6";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAE";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x82";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBA";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x96";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB2";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAA";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x86";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBE";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB6";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAE";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x82";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBA";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x96";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB2";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAA";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x86";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBE";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB6";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAE";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x82";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBA";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x96";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB2";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAA";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x86";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBE";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB6";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAE";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x82";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBA";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x96";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB2";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAA";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x86";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBE";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB6";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAE";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x82";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBA";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x96";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB2";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAA";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x86";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBE";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB6";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAE";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x82";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBA";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x96";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB2";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAA";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x86";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBE";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB6";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAE";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8A";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA6";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x82";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9E";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBA";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x96";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB2";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8E";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAA";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x86";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA2";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBE";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9A";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB6";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x92";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAE";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x82";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBA";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x96";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB2";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAA";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x86";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBE";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB6";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAE";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x82";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBA";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x96";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB2";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAA";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x86";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBE";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB6";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAE";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x82";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBA";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x96";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB2";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAA";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x86";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBE";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB6";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAE";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x82";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBA";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x96";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB2";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAA";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x86";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBE";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB6";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAE";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x82";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBA";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x96";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB2";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAA";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x86";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBE";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB6";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAE";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x82";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBA";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x96";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB2";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAA";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x86";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBE";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB6";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAE";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x82";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBA";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x96";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB2";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAA";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x86";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBE";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB6";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAE";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x82";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBA";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x96";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB2";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAA";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x86";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBE";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB6";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAE";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA6";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x82";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9E";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBA";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x96";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB2";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8E";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAA";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x86";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA2";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBE";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9A";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB6";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x92";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAE";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8A";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA6";
+ break;
+ case 0xBC :
+ return "\xED\x80\x82";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9E";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBA";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x96";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB2";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8E";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAA";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x86";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA2";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBE";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9A";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB6";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x92";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAE";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8A";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA6";
+ break;
+ case 0xBC :
+ return "\xED\x87\x82";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9E";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBA";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x96";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB2";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8E";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAA";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x86";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA2";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBE";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9A";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB6";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x92";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAE";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8A";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA6";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x82";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9E";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBA";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x96";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB2";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8E";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAA";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x86";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA2";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBE";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9A";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB6";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x92";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAE";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8A";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA6";
+ break;
+ case 0xBC :
+ return "\xED\x95\x82";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9E";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBA";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x96";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB2";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8E";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAA";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x86";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA2";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBE";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9A";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB6";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x92";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAE";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8A";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA6";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x82";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9E";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBA";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x96";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB2";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8E";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x87";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA3";
+ break;
+ case 0xB8 :
+ return "\xEA\xB0\xBF";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9B";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB7";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x93";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xAF";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8B";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA7";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x83";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\x9F";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBB";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x97";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB3";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x8F";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAB";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x87";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA3";
+ break;
+ case 0xB8 :
+ return "\xEA\xB7\xBF";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9B";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB7";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x93";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xAF";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8B";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA7";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x83";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\x9F";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBB";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x97";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB3";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x8F";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAB";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x87";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA3";
+ break;
+ case 0xB8 :
+ return "\xEA\xBE\xBF";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9B";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB7";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xAF";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x83";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBB";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x97";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB3";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAB";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x87";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\x85\xBF";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB7";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xAF";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x83";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBB";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x97";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB3";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAB";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x87";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\x8C\xBF";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB7";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xAF";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x83";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBB";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x97";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB3";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAB";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x87";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\x93\xBF";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB7";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xAF";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x83";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBB";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x97";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB3";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAB";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x87";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\x9A\xBF";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB7";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xAF";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x83";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBB";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x97";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB3";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAB";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x87";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\xA1\xBF";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB7";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xAF";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x83";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBB";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x97";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB3";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAB";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x87";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\xA8\xBF";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB7";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xAF";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x83";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBB";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x97";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB3";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAB";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x87";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\xAF\xBF";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB7";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xAF";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x83";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBB";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x97";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB3";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAB";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x87";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\xB6\xBF";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB7";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xAF";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8B";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA7";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x83";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\x9F";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBB";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x97";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB3";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x8F";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAB";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x87";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA3";
+ break;
+ case 0xB8 :
+ return "\xEB\xBD\xBF";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9B";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB7";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x93";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xAF";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x83";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBB";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x97";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB3";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAB";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x87";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\x84\xBF";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB7";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xAF";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x83";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBB";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x97";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB3";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAB";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x87";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\x8B\xBF";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB7";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xAF";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x83";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBB";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x97";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB3";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAB";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x87";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\x92\xBF";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB7";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xAF";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x83";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBB";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x97";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB3";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAB";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x87";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\x99\xBF";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB7";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xAF";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x83";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBB";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x97";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB3";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAB";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x87";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\xA0\xBF";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB7";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xAF";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x83";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBB";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x97";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB3";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAB";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x87";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\xA7\xBF";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB7";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xAF";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x83";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBB";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x97";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB3";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAB";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x87";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\xAE\xBF";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB7";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xAF";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x83";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBB";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x97";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB3";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAB";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x87";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\xB5\xBF";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB7";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xAF";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA7";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x83";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\x9F";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBB";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x97";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB3";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x8F";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAB";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x87";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA3";
+ break;
+ case 0xB8 :
+ return "\xEC\xBC\xBF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9B";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB7";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x93";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xAF";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8B";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA7";
+ break;
+ case 0xBC :
+ return "\xED\x80\x83";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\x9F";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBB";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x97";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB3";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x8F";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAB";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x87";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA3";
+ break;
+ case 0xB8 :
+ return "\xED\x83\xBF";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9B";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB7";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x93";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xAF";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8B";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA7";
+ break;
+ case 0xBC :
+ return "\xED\x87\x83";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\x9F";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBB";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x97";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB3";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x8F";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAB";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x87";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA3";
+ break;
+ case 0xB8 :
+ return "\xED\x8A\xBF";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9B";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB7";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x93";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xAF";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8B";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA7";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x83";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\x9F";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBB";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x97";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB3";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x8F";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAB";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x87";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA3";
+ break;
+ case 0xB8 :
+ return "\xED\x91\xBF";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9B";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB7";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x93";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xAF";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8B";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA7";
+ break;
+ case 0xBC :
+ return "\xED\x95\x83";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\x9F";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBB";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x97";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB3";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x8F";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAB";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x87";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA3";
+ break;
+ case 0xB8 :
+ return "\xED\x98\xBF";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9B";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB7";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x93";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xAF";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8B";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA7";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x83";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\x9F";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBB";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x97";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB3";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x8F";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x88";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA4";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x80";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9C";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB8";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x94";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB0";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8C";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA8";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x84";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA0";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBC";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x98";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB4";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x90";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAC";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x88";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA4";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x80";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9C";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB8";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x94";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB0";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8C";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA8";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x84";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA0";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBC";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x98";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB4";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x90";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAC";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x88";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA4";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x80";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9C";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB8";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB0";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x84";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBC";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x98";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB4";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAC";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x88";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x80";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB8";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB0";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x84";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBC";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x98";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB4";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAC";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x88";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x80";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB8";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB0";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x84";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBC";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x98";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB4";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAC";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x88";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x80";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB8";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB0";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x84";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBC";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x98";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB4";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAC";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x88";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x80";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB8";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB0";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x84";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBC";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x98";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB4";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAC";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x88";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x80";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB8";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB0";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x84";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBC";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x98";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB4";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAC";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x88";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x80";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB8";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB0";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x84";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBC";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x98";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB4";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAC";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x88";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x80";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB8";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB0";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x84";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBC";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x98";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB4";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAC";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x88";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x80";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB8";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB0";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8C";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA8";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x84";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA0";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBC";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x98";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB4";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x90";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAC";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x88";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA4";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x80";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9C";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB8";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x94";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB0";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x84";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBC";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x98";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB4";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAC";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x88";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x80";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB8";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB0";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x84";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBC";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x98";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB4";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAC";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x88";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x80";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB8";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB0";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x84";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBC";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x98";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB4";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAC";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x88";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x80";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB8";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB0";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x84";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBC";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x98";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB4";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAC";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x88";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x80";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB8";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB0";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x84";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBC";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x98";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB4";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAC";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x88";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x80";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB8";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB0";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x84";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBC";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x98";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB4";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAC";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x88";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x80";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB8";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB0";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x84";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBC";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x98";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB4";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAC";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x88";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x80";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB8";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB0";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x84";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBC";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x98";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB4";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAC";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x88";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x80";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB8";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB0";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA8";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x84";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA0";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBC";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x98";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB4";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x90";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAC";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x88";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA4";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x80";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9C";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB8";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x94";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB0";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8C";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA8";
+ break;
+ case 0xBC :
+ return "\xED\x80\x84";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA0";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBC";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x98";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB4";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x90";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAC";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x88";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA4";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x80";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9C";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB8";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x94";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB0";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8C";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA8";
+ break;
+ case 0xBC :
+ return "\xED\x87\x84";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA0";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBC";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x98";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB4";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x90";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAC";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x88";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA4";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x80";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9C";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB8";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x94";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB0";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8C";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA8";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x84";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA0";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBC";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x98";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB4";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x90";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAC";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x88";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA4";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x80";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9C";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB8";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x94";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB0";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8C";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA8";
+ break;
+ case 0xBC :
+ return "\xED\x95\x84";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA0";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBC";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x98";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB4";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x90";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAC";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x88";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA4";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x80";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9C";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB8";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x94";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB0";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8C";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA8";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x84";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA0";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBC";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x98";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB4";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x90";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x89";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA5";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x81";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9D";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xB9";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x95";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB1";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8D";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xA9";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x85";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA1";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBD";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x99";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB5";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x91";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAD";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x89";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA5";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x81";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9D";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xB9";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x95";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB1";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8D";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xA9";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x85";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA1";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBD";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x99";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB5";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x91";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAD";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x89";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA5";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x81";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9D";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xB9";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB1";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x85";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x99";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB5";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAD";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x89";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x81";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xB9";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB1";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x85";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBD";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x99";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB5";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAD";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x89";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x81";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xB9";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB1";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x85";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBD";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x99";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB5";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAD";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x89";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x81";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xB9";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB1";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x85";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBD";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x99";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB5";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAD";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x89";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x81";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xB9";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB1";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x85";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBD";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x99";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB5";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAD";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x89";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x81";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xB9";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB1";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x85";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBD";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x99";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB5";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAD";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x89";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x81";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xB9";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB1";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x85";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBD";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x99";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB5";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAD";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x89";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x81";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xB9";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB1";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x85";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBD";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x99";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB5";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x89";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x81";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xB9";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB1";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8D";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xA9";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x85";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA1";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBD";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x99";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB5";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x91";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x89";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA5";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x81";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9D";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xB9";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x95";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB1";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x85";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBD";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x99";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB5";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAD";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x89";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x81";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xB9";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB1";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x85";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBD";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x99";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB5";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAD";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x89";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x81";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xB9";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB1";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x85";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBD";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x99";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB5";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAD";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x89";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x81";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xB9";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB1";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x85";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBD";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x99";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB5";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAD";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x89";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x81";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xB9";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB1";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x85";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBD";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x99";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB5";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAD";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x89";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x81";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xB9";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB1";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x85";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBD";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x99";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB5";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAD";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x89";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x81";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xB9";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB1";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x85";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBD";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x99";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB5";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAD";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x89";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x81";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xB9";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB1";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x85";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBD";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x99";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB5";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAD";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x89";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x81";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xB9";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB1";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xA9";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x85";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA1";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBD";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x99";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB5";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x91";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAD";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x89";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA5";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x81";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9D";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xB9";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x95";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB1";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8D";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xA9";
+ break;
+ case 0xBC :
+ return "\xED\x80\x85";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA1";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBD";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x99";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB5";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x91";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x89";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA5";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x81";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9D";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xB9";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x95";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB1";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8D";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xA9";
+ break;
+ case 0xBC :
+ return "\xED\x87\x85";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA1";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBD";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x99";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB5";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x91";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAD";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x89";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA5";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x81";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9D";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xB9";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x95";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB1";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8D";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xA9";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x85";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA1";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBD";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x99";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB5";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x91";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAD";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x89";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA5";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x81";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9D";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xB9";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x95";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB1";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8D";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xA9";
+ break;
+ case 0xBC :
+ return "\xED\x95\x85";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA1";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBD";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x99";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB5";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x91";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAD";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x89";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA5";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x81";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9D";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xB9";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x95";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB1";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8D";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xA9";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x85";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA1";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBD";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x99";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB5";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x91";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8A";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA6";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x82";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9E";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBA";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x96";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB2";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8E";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAA";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x86";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA2";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBE";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9A";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB6";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x92";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAE";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8A";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA6";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x82";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9E";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBA";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x96";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB2";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8E";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAA";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x86";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA2";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBE";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9A";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB6";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x92";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAE";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8A";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA6";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x82";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9E";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBA";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB2";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x86";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBE";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB6";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAE";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x82";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBA";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB2";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x86";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBE";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB6";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAE";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x82";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBA";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB2";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x86";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBE";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB6";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAE";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x82";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBA";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB2";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x86";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBE";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB6";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAE";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x82";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBA";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB2";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x86";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBE";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB6";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAE";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x82";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBA";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB2";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x86";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBE";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB6";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAE";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x82";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBA";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB2";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x86";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBE";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB6";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAE";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x82";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBA";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB2";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x86";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBE";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB6";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAE";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x82";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBA";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB2";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8E";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAA";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x86";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA2";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBE";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9A";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB6";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x92";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAE";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8A";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA6";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x82";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9E";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBA";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x96";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB2";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x86";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBE";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB6";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAE";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x82";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBA";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB2";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x86";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBE";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB6";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAE";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x82";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBA";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB2";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x86";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBE";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB6";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAE";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x82";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBA";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB2";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x86";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBE";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB6";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAE";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x82";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBA";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB2";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x86";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBE";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB6";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAE";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x82";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBA";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB2";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x86";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBE";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB6";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAE";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x82";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBA";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB2";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x86";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBE";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB6";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAE";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x82";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBA";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB2";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x86";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBE";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB6";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAE";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x82";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBA";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB2";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAA";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x86";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA2";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBE";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9A";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB6";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x92";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAE";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8A";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA6";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x82";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9E";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBA";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x96";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB2";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8E";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAA";
+ break;
+ case 0xBC :
+ return "\xED\x80\x86";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA2";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBE";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9A";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB6";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x92";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAE";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8A";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA6";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x82";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9E";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBA";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x96";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB2";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8E";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAA";
+ break;
+ case 0xBC :
+ return "\xED\x87\x86";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA2";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBE";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9A";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB6";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x92";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAE";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8A";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA6";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x82";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9E";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBA";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x96";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB2";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8E";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAA";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x86";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA2";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBE";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9A";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB6";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x92";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAE";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8A";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA6";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x82";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9E";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBA";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x96";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB2";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8E";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAA";
+ break;
+ case 0xBC :
+ return "\xED\x95\x86";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA2";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBE";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9A";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB6";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x92";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAE";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8A";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA6";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x82";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9E";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBA";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x96";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB2";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8E";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAA";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x86";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA2";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBE";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9A";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB6";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x92";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8B";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA7";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x83";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\x9F";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBB";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x97";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB3";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x8F";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAB";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x87";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA3";
+ break;
+ case 0xB4 :
+ return "\xEA\xB4\xBF";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9B";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB7";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x93";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xAF";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8B";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA7";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x83";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\x9F";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBB";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x97";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB3";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x8F";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAB";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x87";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA3";
+ break;
+ case 0xB4 :
+ return "\xEA\xBB\xBF";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9B";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB7";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x93";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xAF";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8B";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA7";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x83";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\x9F";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBB";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB3";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x87";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\x82\xBF";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB7";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xAF";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x83";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBB";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB3";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x87";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\x89\xBF";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB7";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xAF";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x83";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBB";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB3";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x87";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\x90\xBF";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB7";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xAF";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x83";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBB";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB3";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x87";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\x97\xBF";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB7";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xAF";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x83";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBB";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB3";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x87";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\x9E\xBF";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB7";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xAF";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x83";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBB";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB3";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x87";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\xA5\xBF";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB7";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xAF";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x83";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBB";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB3";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x87";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\xAC\xBF";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB7";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xAF";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x83";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBB";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB3";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x87";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\xB3\xBF";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB7";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xAF";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x83";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBB";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB3";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x8F";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAB";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x87";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA3";
+ break;
+ case 0xB4 :
+ return "\xEB\xBA\xBF";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9B";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB7";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x93";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xAF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8B";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA7";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x83";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\x9F";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBB";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x97";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB3";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x87";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\x81\xBF";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB7";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xAF";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x83";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBB";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB3";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x87";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\x88\xBF";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB7";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xAF";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x83";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBB";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB3";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x87";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\x8F\xBF";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB7";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xAF";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x83";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBB";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB3";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x87";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\x96\xBF";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB7";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xAF";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x83";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBB";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB3";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x87";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\x9D\xBF";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB7";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xAF";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x83";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBB";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB3";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x87";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\xA4\xBF";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB7";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xAF";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x83";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBB";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB3";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x87";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\xAB\xBF";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB7";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xAF";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x83";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBB";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB3";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x87";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\xB2\xBF";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB7";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xAF";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x83";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBB";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB3";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAB";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x87";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA3";
+ break;
+ case 0xB4 :
+ return "\xEC\xB9\xBF";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9B";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB7";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x93";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xAF";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8B";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA7";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x83";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\x9F";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBB";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x97";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB3";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x8F";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAB";
+ break;
+ case 0xBC :
+ return "\xED\x80\x87";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA3";
+ break;
+ case 0xB4 :
+ return "\xED\x80\xBF";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9B";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB7";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x93";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xAF";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8B";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA7";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x83";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\x9F";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBB";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x97";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB3";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x8F";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAB";
+ break;
+ case 0xBC :
+ return "\xED\x87\x87";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA3";
+ break;
+ case 0xB4 :
+ return "\xED\x87\xBF";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9B";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB7";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x93";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xAF";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8B";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA7";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x83";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\x9F";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBB";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x97";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB3";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x8F";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAB";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x87";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA3";
+ break;
+ case 0xB4 :
+ return "\xED\x8E\xBF";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9B";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB7";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x93";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xAF";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8B";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA7";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x83";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\x9F";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBB";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x97";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB3";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x8F";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAB";
+ break;
+ case 0xBC :
+ return "\xED\x95\x87";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA3";
+ break;
+ case 0xB4 :
+ return "\xED\x95\xBF";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9B";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB7";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x93";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xAF";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8B";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA7";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x83";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\x9F";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBB";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x97";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB3";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x8F";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAB";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x87";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA3";
+ break;
+ case 0xB4 :
+ return "\xED\x9C\xBF";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9B";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB7";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x93";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8C";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA8";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x84";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA0";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBC";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x98";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB4";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x90";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAC";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x88";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA4";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x80";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9C";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB8";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x94";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB0";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8C";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA8";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x84";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA0";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBC";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x98";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB4";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x90";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAC";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x88";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA4";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x80";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9C";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB8";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x94";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB0";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8C";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA8";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x84";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA0";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBC";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB4";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x88";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x80";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB8";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB0";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x84";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBC";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB4";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x88";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x80";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB8";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB0";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x84";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBC";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB4";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x88";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x80";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB8";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB0";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x84";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBC";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB4";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x88";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x80";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB8";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB0";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x84";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBC";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB4";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x88";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x80";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB8";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB0";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x84";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBC";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB4";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x88";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x80";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB8";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB0";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x84";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBC";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB4";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x88";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x80";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB8";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB0";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x84";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBC";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB4";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x88";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x80";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB8";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB0";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x84";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBC";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB4";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x90";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAC";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x88";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA4";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x80";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9C";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB8";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x94";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB0";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8C";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA8";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x84";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA0";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBC";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x98";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB4";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x88";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x80";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB8";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB0";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x84";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBC";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB4";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x88";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x80";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB8";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB0";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x84";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBC";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB4";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x88";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x80";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB8";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB0";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x84";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBC";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB4";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x88";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x80";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB8";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB0";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x84";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBC";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB4";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x88";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x80";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB8";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB0";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x84";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBC";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB4";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x88";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x80";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB8";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB0";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x84";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBC";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB4";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x88";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x80";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB8";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB0";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x84";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBC";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB4";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x88";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x80";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB8";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB0";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x84";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBC";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB4";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAC";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x88";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA4";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x80";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9C";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB8";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x94";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB0";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8C";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA8";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x84";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA0";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBC";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x98";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB4";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x90";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAC";
+ break;
+ case 0xBC :
+ return "\xED\x80\x88";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA4";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x80";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9C";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB8";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x94";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB0";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8C";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA8";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x84";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA0";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBC";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x98";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB4";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x90";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAC";
+ break;
+ case 0xBC :
+ return "\xED\x87\x88";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA4";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x80";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9C";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB8";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x94";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB0";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8C";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA8";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x84";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA0";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBC";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x98";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB4";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x90";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAC";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x88";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA4";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x80";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9C";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB8";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x94";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB0";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8C";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA8";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x84";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA0";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBC";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x98";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB4";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x90";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAC";
+ break;
+ case 0xBC :
+ return "\xED\x95\x88";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA4";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x80";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9C";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB8";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x94";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB0";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8C";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA8";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x84";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA0";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBC";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x98";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB4";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x90";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAC";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x88";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA4";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x80";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9C";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB8";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x94";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8D";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xA9";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x85";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA1";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBD";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x99";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB5";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x91";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAD";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x89";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA5";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x81";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9D";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xB9";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x95";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB1";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8D";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xA9";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x85";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA1";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBD";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x99";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB5";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x91";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAD";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x89";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA5";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x81";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9D";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xB9";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x95";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB1";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8D";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xA9";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x85";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA1";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBD";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB5";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x89";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x81";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xB9";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB1";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x85";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBD";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB5";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x89";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x81";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xB9";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB1";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x85";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBD";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB5";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x89";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x81";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xB9";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB1";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x85";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBD";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB5";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x89";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x81";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xB9";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB1";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x85";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBD";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB5";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x89";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x81";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xB9";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB1";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x85";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBD";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB5";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x89";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x81";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xB9";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB1";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x85";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBD";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB5";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x89";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x81";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xB9";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB1";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x85";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBD";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB5";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x89";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x81";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xB9";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB1";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x85";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBD";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB5";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x91";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAD";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x89";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA5";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x81";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9D";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xB9";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x95";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB1";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8D";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xA9";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x85";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA1";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBD";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x99";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB5";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x89";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x81";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xB9";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB1";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x85";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBD";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB5";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x89";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x81";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xB9";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB1";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x85";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBD";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB5";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x89";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x81";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xB9";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB1";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x85";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBD";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB5";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x89";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x81";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xB9";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB1";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x85";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBD";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB5";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x89";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x81";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xB9";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB1";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x85";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBD";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB5";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x89";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x81";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xB9";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB1";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x85";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBD";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB5";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x89";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x81";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xB9";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB1";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x85";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBD";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB5";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x89";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x81";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xB9";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB1";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x85";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBD";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB5";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAD";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x89";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA5";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x81";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9D";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xB9";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x95";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB1";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8D";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xA9";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x85";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA1";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBD";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x99";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB5";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x91";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAD";
+ break;
+ case 0xBC :
+ return "\xED\x80\x89";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA5";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x81";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9D";
+ break;
+ case 0xAC :
+ return "\xED\x81\xB9";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x95";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB1";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8D";
+ break;
+ case 0x9C :
+ return "\xED\x83\xA9";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x85";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA1";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBD";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x99";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB5";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x91";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAD";
+ break;
+ case 0xBC :
+ return "\xED\x87\x89";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA5";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x81";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9D";
+ break;
+ case 0xAC :
+ return "\xED\x88\xB9";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x95";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB1";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8D";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xA9";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x85";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA1";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBD";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x99";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB5";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x91";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAD";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x89";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA5";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x81";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9D";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xB9";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x95";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB1";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8D";
+ break;
+ case 0x9C :
+ return "\xED\x91\xA9";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x85";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA1";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBD";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x99";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB5";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x91";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAD";
+ break;
+ case 0xBC :
+ return "\xED\x95\x89";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA5";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x81";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9D";
+ break;
+ case 0xAC :
+ return "\xED\x96\xB9";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x95";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB1";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8D";
+ break;
+ case 0x9C :
+ return "\xED\x98\xA9";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x85";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA1";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBD";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x99";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB5";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x91";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAD";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x89";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA5";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x81";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9D";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xB9";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x95";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8E";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAA";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x86";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA2";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBE";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9A";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB6";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x92";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAE";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8A";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA6";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x82";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9E";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBA";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x96";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB2";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8E";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAA";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x86";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA2";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBE";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9A";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB6";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x92";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAE";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8A";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA6";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x82";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9E";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBA";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x96";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB2";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8E";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAA";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x86";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA2";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBE";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB6";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8A";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x82";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBA";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB2";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x86";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBE";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB6";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8A";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x82";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBA";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB2";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x86";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBE";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB6";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8A";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x82";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBA";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB2";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x86";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBE";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB6";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8A";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x82";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBA";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB2";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x86";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBE";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB6";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8A";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x82";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBA";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB2";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x86";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBE";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB6";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8A";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x82";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBA";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB2";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x86";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBE";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB6";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8A";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x82";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBA";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB2";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x86";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBE";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB6";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8A";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x82";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBA";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB2";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x86";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBE";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB6";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x92";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAE";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8A";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA6";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x82";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9E";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBA";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x96";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB2";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8E";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAA";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x86";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA2";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBE";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9A";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB6";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8A";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x82";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBA";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB2";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x86";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBE";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB6";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8A";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x82";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBA";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB2";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x86";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBE";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB6";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8A";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x82";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBA";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB2";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x86";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBE";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB6";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8A";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x82";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBA";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB2";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x86";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBE";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB6";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8A";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x82";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBA";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB2";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x86";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBE";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB6";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8A";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x82";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBA";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB2";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x86";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBE";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB6";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8A";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x82";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBA";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB2";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x86";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBE";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB6";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8A";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x82";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBA";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB2";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x86";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBE";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB6";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAE";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8A";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA6";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x82";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9E";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBA";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x96";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB2";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8E";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAA";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x86";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA2";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBE";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9A";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB6";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x92";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAE";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8A";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA6";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x82";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9E";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBA";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x96";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB2";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8E";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAA";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x86";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA2";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBE";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9A";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB6";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x92";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAE";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8A";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA6";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x82";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9E";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBA";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x96";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB2";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8E";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAA";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x86";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA2";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBE";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9A";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB6";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x92";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAE";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8A";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA6";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x82";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9E";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBA";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x96";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB2";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8E";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAA";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x86";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA2";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBE";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9A";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB6";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x92";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAE";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8A";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA6";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x82";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9E";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBA";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x96";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB2";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8E";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAA";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x86";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA2";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBE";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9A";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB6";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x92";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAE";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8A";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA6";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x82";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9E";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBA";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x96";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x8F";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAB";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x87";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA3";
+ break;
+ case 0xB0 :
+ return "\xEA\xB1\xBF";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9B";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB7";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x93";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xAF";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8B";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA7";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x83";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\x9F";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBB";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x97";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB3";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x8F";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAB";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x87";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA3";
+ break;
+ case 0xB0 :
+ return "\xEA\xB8\xBF";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9B";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB7";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x93";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xAF";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8B";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA7";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x83";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\x9F";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBB";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x97";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB3";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x8F";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAB";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x87";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA3";
+ break;
+ case 0xB0 :
+ return "\xEA\xBF\xBF";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB7";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8B";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x83";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBB";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB3";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x87";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\x86\xBF";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB7";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8B";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x83";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBB";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB3";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x87";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\x8D\xBF";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB7";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8B";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x83";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBB";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB3";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x87";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\x94\xBF";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB7";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8B";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x83";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBB";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB3";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x87";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\x9B\xBF";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB7";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8B";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x83";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBB";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB3";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x87";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\xA2\xBF";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB7";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8B";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x83";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBB";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB3";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x87";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\xA9\xBF";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB7";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8B";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x83";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBB";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB3";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x87";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\xB0\xBF";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB7";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8B";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x83";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBB";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB3";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x87";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\xB7\xBF";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB7";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x93";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xAF";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8B";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA7";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x83";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\x9F";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBB";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x97";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB3";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x8F";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAB";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x87";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA3";
+ break;
+ case 0xB0 :
+ return "\xEB\xBE\xBF";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9B";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB7";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8B";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x83";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBB";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB3";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x87";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\x85\xBF";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB7";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8B";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x83";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBB";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB3";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x87";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\x8C\xBF";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB7";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8B";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x83";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBB";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB3";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x87";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\x93\xBF";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB7";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8B";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x83";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBB";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB3";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x87";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\x9A\xBF";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB7";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8B";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x83";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBB";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB3";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x87";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\xA1\xBF";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB7";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8B";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x83";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBB";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB3";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x87";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\xA8\xBF";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB7";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8B";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x83";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBB";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB3";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x87";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\xAF\xBF";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB7";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8B";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x83";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBB";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB3";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x87";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\xB6\xBF";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB7";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xAF";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8B";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA7";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x83";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\x9F";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBB";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x97";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB3";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x8F";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAB";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x87";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA3";
+ break;
+ case 0xB0 :
+ return "\xEC\xBD\xBF";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9B";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB7";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x93";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xAF";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8B";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA7";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x83";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\x9F";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBB";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x97";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB3";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x8F";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAB";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x87";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA3";
+ break;
+ case 0xB0 :
+ return "\xED\x84\xBF";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9B";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB7";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x93";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xAF";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8B";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA7";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x83";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\x9F";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBB";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x97";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB3";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x8F";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAB";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x87";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA3";
+ break;
+ case 0xB0 :
+ return "\xED\x8B\xBF";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9B";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB7";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x93";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xAF";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8B";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA7";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x83";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\x9F";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBB";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x97";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB3";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x8F";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAB";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x87";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA3";
+ break;
+ case 0xB0 :
+ return "\xED\x92\xBF";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9B";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB7";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x93";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xAF";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8B";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA7";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x83";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\x9F";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBB";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x97";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB3";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x8F";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAB";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x87";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA3";
+ break;
+ case 0xB0 :
+ return "\xED\x99\xBF";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9B";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB7";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x93";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xAF";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8B";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA7";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x83";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\x9F";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBB";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x97";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x90";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAC";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x88";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA4";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x80";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9C";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB8";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x94";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB0";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8C";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA8";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x84";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA0";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBC";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x98";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB4";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x90";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAC";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x88";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA4";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x80";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9C";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB8";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x94";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB0";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8C";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA8";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x84";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA0";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBC";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x98";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB4";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x90";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAC";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x88";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x80";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB8";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8C";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x84";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBC";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB4";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x90";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x88";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x80";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB8";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8C";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x84";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBC";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB4";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x90";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x88";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x80";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB8";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8C";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x84";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBC";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB4";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x90";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x88";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x80";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB8";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8C";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x84";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBC";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB4";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x90";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x88";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x80";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB8";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8C";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x84";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBC";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB4";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x90";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x88";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x80";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB8";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8C";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x84";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBC";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB4";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x90";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x88";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x80";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB8";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8C";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x84";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBC";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB4";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x90";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x88";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x80";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB8";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8C";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x84";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBC";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB4";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x90";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x88";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x80";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB8";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x94";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB0";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8C";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA8";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x84";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA0";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBC";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x98";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB4";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x90";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAC";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x88";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA4";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x80";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9C";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB8";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8C";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x84";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBC";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB4";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x90";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x88";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x80";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB8";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8C";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x84";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBC";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB4";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x90";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x88";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x80";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB8";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8C";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x84";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBC";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB4";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x90";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x88";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x80";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB8";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8C";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x84";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBC";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB4";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x90";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x88";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x80";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB8";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8C";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x84";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBC";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB4";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x90";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x88";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x80";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB8";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8C";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x84";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBC";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB4";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x90";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x88";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x80";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB8";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8C";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x84";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBC";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB4";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x90";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x88";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x80";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB8";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8C";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x84";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBC";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB4";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x90";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x88";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x80";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB8";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB0";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8C";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA8";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x84";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA0";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBC";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x98";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB4";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x90";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAC";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x88";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA4";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x80";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9C";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB8";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x94";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB0";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8C";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA8";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x84";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA0";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBC";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x98";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB4";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x90";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAC";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x88";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA4";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x80";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9C";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB8";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x94";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB0";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8C";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA8";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x84";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA0";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBC";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x98";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB4";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x90";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAC";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x88";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA4";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x80";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9C";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB8";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x94";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB0";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8C";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA8";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x84";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA0";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBC";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x98";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB4";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x90";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAC";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x88";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA4";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x80";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9C";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB8";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x94";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB0";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8C";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA8";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x84";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA0";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBC";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x98";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB4";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x90";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAC";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x88";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA4";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x80";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9C";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB8";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x94";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB0";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8C";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA8";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x84";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA0";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBC";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x98";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x91";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAD";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x89";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA5";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x81";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9D";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xB9";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x95";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB1";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8D";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xA9";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x85";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA1";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x99";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB5";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x91";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAD";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x89";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA5";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x81";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9D";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xB9";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x95";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB1";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8D";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xA9";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x85";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA1";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x99";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB5";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x91";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAD";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x89";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x81";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xB9";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8D";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x85";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBD";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB5";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x91";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x89";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x81";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xB9";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8D";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x85";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBD";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB5";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x91";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x89";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x81";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xB9";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8D";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x85";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBD";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB5";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x91";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x89";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x81";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xB9";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8D";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x85";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBD";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB5";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x91";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x89";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x81";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xB9";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8D";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x85";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBD";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB5";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x91";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x89";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x81";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xB9";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8D";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x85";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBD";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB5";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x91";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x89";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x81";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xB9";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8D";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x85";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBD";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB5";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x91";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x89";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x81";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xB9";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8D";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x85";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBD";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB5";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x91";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x89";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x81";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xB9";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x95";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB1";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8D";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xA9";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x85";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA1";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBD";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x99";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB5";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x91";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAD";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x89";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA5";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x81";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9D";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xB9";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8D";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x85";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB5";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x91";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x89";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x81";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xB9";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8D";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x85";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBD";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB5";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x91";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x89";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x81";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xB9";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8D";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x85";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBD";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB5";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x91";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x89";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x81";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xB9";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8D";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x85";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBD";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB5";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x91";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x89";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x81";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xB9";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8D";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x85";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBD";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB5";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x91";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x89";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x81";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xB9";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8D";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x85";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBD";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB5";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x91";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x89";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x81";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xB9";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8D";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x85";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBD";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB5";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x91";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x89";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x81";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xB9";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8D";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x85";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBD";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB5";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x91";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x89";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x81";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xB9";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB1";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8D";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xA9";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x85";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA1";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBD";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x99";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB5";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x91";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAD";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x89";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA5";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x81";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9D";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xB9";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x95";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB1";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8D";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xA9";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x85";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA1";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBD";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x99";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB5";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x91";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAD";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x89";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA5";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x81";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9D";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xB9";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x95";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB1";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8D";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xA9";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x85";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA1";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBD";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x99";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB5";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x91";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAD";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x89";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA5";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x81";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9D";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xB9";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x95";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB1";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8D";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xA9";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x85";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA1";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBD";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x99";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB5";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x91";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAD";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x89";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA5";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x81";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9D";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xB9";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x95";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB1";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8D";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xA9";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x85";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA1";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBD";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x99";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB5";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x91";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAD";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x89";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA5";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x81";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9D";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xB9";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x95";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB1";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8D";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xA9";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x85";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA1";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBD";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x99";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x92";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAE";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8A";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA6";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x82";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9E";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBA";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x96";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB2";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8E";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAA";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x86";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA2";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBE";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9A";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB6";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x92";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAE";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8A";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA6";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x82";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9E";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBA";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x96";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB2";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8E";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAA";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x86";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA2";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBE";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9A";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB6";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x92";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAE";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8A";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x82";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBA";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8E";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x86";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBE";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB6";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x92";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8A";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x82";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBA";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8E";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x86";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBE";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB6";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x92";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8A";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x82";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBA";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8E";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x86";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBE";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB6";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x92";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8A";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x82";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBA";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8E";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x86";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBE";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB6";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x92";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8A";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x82";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBA";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8E";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x86";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBE";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB6";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x92";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8A";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x82";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBA";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8E";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x86";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBE";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB6";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x92";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8A";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x82";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBA";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8E";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x86";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBE";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB6";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x92";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8A";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x82";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBA";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8E";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x86";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBE";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB6";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x92";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8A";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x82";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBA";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x96";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB2";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8E";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAA";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x86";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA2";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBE";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9A";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB6";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x92";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAE";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8A";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA6";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x82";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9E";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBA";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8E";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x86";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBE";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB6";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x92";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8A";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x82";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBA";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8E";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x86";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBE";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB6";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x92";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8A";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x82";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBA";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8E";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x86";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBE";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB6";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x92";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8A";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x82";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBA";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8E";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x86";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBE";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB6";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x92";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8A";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x82";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBA";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8E";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x86";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBE";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB6";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x92";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8A";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x82";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBA";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8E";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x86";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBE";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB6";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x92";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8A";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x82";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBA";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8E";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x86";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBE";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB6";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x92";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8A";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x82";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBA";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8E";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x86";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBE";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB6";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x92";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8A";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x82";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBA";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB2";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8E";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAA";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x86";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA2";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBE";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9A";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB6";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x92";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAE";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8A";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA6";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x82";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9E";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBA";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x96";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB2";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8E";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAA";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x86";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA2";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBE";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9A";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB6";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x92";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAE";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8A";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA6";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x82";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9E";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBA";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x96";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB2";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8E";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAA";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x86";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA2";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBE";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9A";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB6";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x92";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAE";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8A";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA6";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x82";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9E";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBA";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x96";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB2";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8E";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAA";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x86";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA2";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBE";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9A";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB6";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x92";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAE";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8A";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA6";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x82";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9E";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBA";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x96";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB2";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8E";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAA";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x86";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA2";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBE";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9A";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB6";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x92";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAE";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8A";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA6";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x82";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9E";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBA";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x96";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB2";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8E";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAA";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x86";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA2";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBE";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9A";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x93";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xAF";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8B";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA7";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x83";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\x9F";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBB";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x97";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB3";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x8F";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAB";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x87";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA3";
+ break;
+ case 0xAC :
+ return "\xEA\xB5\xBF";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9B";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB7";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x93";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xAF";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8B";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA7";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x83";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\x9F";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBB";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x97";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB3";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x8F";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAB";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x87";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA3";
+ break;
+ case 0xAC :
+ return "\xEA\xBC\xBF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9B";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB7";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x93";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xAF";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8B";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x83";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBB";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x8F";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x87";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\x83\xBF";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB7";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x93";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8B";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x83";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBB";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x8F";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x87";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\x8A\xBF";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB7";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x93";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8B";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x83";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBB";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x8F";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x87";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\x91\xBF";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB7";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x93";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8B";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x83";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBB";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x8F";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x87";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\x98\xBF";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB7";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x93";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8B";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x83";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBB";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x8F";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x87";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\x9F\xBF";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB7";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x93";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8B";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x83";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBB";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x8F";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x87";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\xA6\xBF";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB7";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x93";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8B";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x83";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBB";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x8F";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x87";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\xAD\xBF";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB7";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x93";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8B";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x83";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBB";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x8F";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x87";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\xB4\xBF";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB7";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x93";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8B";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x83";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBB";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x97";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB3";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x8F";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAB";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x87";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA3";
+ break;
+ case 0xAC :
+ return "\xEB\xBB\xBF";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9B";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB7";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x93";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xAF";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8B";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA7";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x83";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\x9F";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBB";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x8F";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x87";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\x82\xBF";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB7";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x93";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8B";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x83";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBB";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x8F";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x87";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\x89\xBF";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB7";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x93";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8B";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x83";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBB";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x8F";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x87";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\x90\xBF";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB7";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x93";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8B";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x83";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBB";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x8F";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x87";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\x97\xBF";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB7";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x93";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8B";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x83";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBB";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x8F";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x87";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\x9E\xBF";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB7";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x93";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8B";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x83";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBB";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x8F";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x87";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\xA5\xBF";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB7";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x93";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8B";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x83";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBB";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x8F";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x87";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\xAC\xBF";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB7";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x93";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8B";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x83";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBB";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x8F";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x87";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\xB3\xBF";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB7";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x93";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8B";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x83";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBB";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB3";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x8F";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAB";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x87";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA3";
+ break;
+ case 0xAC :
+ return "\xEC\xBA\xBF";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9B";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB7";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x93";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xAF";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8B";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA7";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x83";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\x9F";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBB";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x97";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB3";
+ break;
+ case 0xBC :
+ return "\xED\x80\x8F";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAB";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x87";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA3";
+ break;
+ case 0xAC :
+ return "\xED\x81\xBF";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9B";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB7";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x93";
+ break;
+ case 0x9C :
+ return "\xED\x83\xAF";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8B";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA7";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x83";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\x9F";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBB";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x97";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB3";
+ break;
+ case 0xBC :
+ return "\xED\x87\x8F";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAB";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x87";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA3";
+ break;
+ case 0xAC :
+ return "\xED\x88\xBF";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9B";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB7";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x93";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xAF";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8B";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA7";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x83";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\x9F";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBB";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x97";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB3";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x8F";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAB";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x87";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA3";
+ break;
+ case 0xAC :
+ return "\xED\x8F\xBF";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9B";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB7";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x93";
+ break;
+ case 0x9C :
+ return "\xED\x91\xAF";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8B";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA7";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x83";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\x9F";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBB";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x97";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB3";
+ break;
+ case 0xBC :
+ return "\xED\x95\x8F";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAB";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x87";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA3";
+ break;
+ case 0xAC :
+ return "\xED\x96\xBF";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9B";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB7";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x93";
+ break;
+ case 0x9C :
+ return "\xED\x98\xAF";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8B";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA7";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x83";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\x9F";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBB";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x97";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB3";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x8F";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAB";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x87";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA3";
+ break;
+ case 0xAC :
+ return "\xED\x9D\xBF";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9B";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x94";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB0";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8C";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA8";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x84";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA0";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBC";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x98";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB4";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x90";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAC";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x88";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA4";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x80";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9C";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB8";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x94";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB0";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8C";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA8";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x84";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA0";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBC";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x98";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB4";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x90";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAC";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x88";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA4";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x80";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9C";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB8";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x94";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB0";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8C";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x84";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBC";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x90";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x88";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x80";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB8";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x94";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8C";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x84";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBC";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x90";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x88";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x80";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB8";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x94";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8C";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x84";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBC";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x90";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x88";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x80";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB8";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x94";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8C";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x84";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBC";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x90";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x88";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x80";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB8";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x94";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8C";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x84";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBC";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x90";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x88";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x80";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB8";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x94";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8C";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x84";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBC";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x90";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x88";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x80";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB8";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x94";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8C";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x84";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBC";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x90";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x88";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x80";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB8";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x94";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8C";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x84";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBC";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x90";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x88";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x80";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB8";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x94";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8C";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x84";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBC";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x98";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB4";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x90";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAC";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x88";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA4";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x80";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9C";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB8";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x94";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB0";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8C";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA8";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x84";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA0";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBC";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x90";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x88";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x80";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB8";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x94";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8C";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x84";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBC";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x90";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x88";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x80";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB8";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x94";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8C";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x84";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBC";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x90";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x88";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x80";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB8";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x94";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8C";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x84";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBC";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x90";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x88";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x80";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB8";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x94";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8C";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x84";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBC";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x90";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x88";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x80";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB8";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x94";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8C";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x84";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBC";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x90";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x88";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x80";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB8";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x94";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8C";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x84";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBC";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x90";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x88";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x80";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB8";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x94";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8C";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x84";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBC";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x90";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x88";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x80";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB8";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x94";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8C";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x84";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBC";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB4";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x90";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAC";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x88";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA4";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x80";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9C";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB8";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x94";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB0";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8C";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA8";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x84";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA0";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBC";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x98";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB4";
+ break;
+ case 0xBC :
+ return "\xED\x80\x90";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAC";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x88";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA4";
+ break;
+ case 0xAC :
+ return "\xED\x82\x80";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9C";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB8";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x94";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB0";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8C";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA8";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x84";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA0";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBC";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x98";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB4";
+ break;
+ case 0xBC :
+ return "\xED\x87\x90";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAC";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x88";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA4";
+ break;
+ case 0xAC :
+ return "\xED\x89\x80";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9C";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB8";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x94";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB0";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8C";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA8";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x84";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA0";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBC";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x98";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB4";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x90";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAC";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x88";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA4";
+ break;
+ case 0xAC :
+ return "\xED\x90\x80";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9C";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB8";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x94";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB0";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8C";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA8";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x84";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA0";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBC";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x98";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB4";
+ break;
+ case 0xBC :
+ return "\xED\x95\x90";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAC";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x88";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA4";
+ break;
+ case 0xAC :
+ return "\xED\x97\x80";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9C";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB8";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x94";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB0";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8C";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA8";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x84";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA0";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBC";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x98";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB4";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x90";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAC";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x88";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA4";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x80";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9C";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x95";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB1";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8D";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xA9";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x85";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA1";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBD";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x99";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB5";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x91";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAD";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x89";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA5";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x81";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9D";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xB9";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x95";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB1";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8D";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xA9";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x85";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA1";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBD";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x99";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB5";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x91";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAD";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x89";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA5";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x81";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9D";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xB9";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x95";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB1";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8D";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x85";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBD";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x91";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x89";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x81";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xB9";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x95";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8D";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x85";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBD";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x91";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x89";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x81";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xB9";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x95";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8D";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x85";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBD";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x91";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x89";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x81";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xB9";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x95";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8D";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x85";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBD";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x91";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x89";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x81";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xB9";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x95";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8D";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x85";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBD";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x91";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x89";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x81";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xB9";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x95";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8D";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x85";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBD";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x91";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x89";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x81";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xB9";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x95";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8D";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x85";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBD";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x91";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x89";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x81";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xB9";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x95";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8D";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x85";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBD";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x91";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x89";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x81";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xB9";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x95";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8D";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x85";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBD";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x99";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB5";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x91";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAD";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x89";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA5";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x81";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9D";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xB9";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x95";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB1";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8D";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xA9";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x85";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA1";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBD";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x91";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x89";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x81";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xB9";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x95";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8D";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x85";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBD";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x91";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x89";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x81";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xB9";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x95";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8D";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x85";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBD";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x91";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x89";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x81";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xB9";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x95";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8D";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x85";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBD";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x91";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x89";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x81";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xB9";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x95";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8D";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x85";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBD";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x91";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x89";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x81";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xB9";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x95";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8D";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x85";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBD";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x91";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x89";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x81";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xB9";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x95";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8D";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x85";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBD";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x91";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x89";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x81";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xB9";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x95";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8D";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x85";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBD";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x91";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x89";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x81";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xB9";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x95";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8D";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x85";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBD";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB5";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x91";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAD";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x89";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA5";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x81";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9D";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xB9";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x95";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB1";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8D";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xA9";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x85";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA1";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBD";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x99";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB5";
+ break;
+ case 0xBC :
+ return "\xED\x80\x91";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAD";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x89";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA5";
+ break;
+ case 0xAC :
+ return "\xED\x82\x81";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9D";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xB9";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x95";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB1";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8D";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xA9";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x85";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA1";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBD";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x99";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB5";
+ break;
+ case 0xBC :
+ return "\xED\x87\x91";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAD";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x89";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA5";
+ break;
+ case 0xAC :
+ return "\xED\x89\x81";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9D";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xB9";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x95";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB1";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8D";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xA9";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x85";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA1";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBD";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x99";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB5";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x91";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAD";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x89";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA5";
+ break;
+ case 0xAC :
+ return "\xED\x90\x81";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9D";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xB9";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x95";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB1";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8D";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xA9";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x85";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA1";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBD";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x99";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB5";
+ break;
+ case 0xBC :
+ return "\xED\x95\x91";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAD";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x89";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA5";
+ break;
+ case 0xAC :
+ return "\xED\x97\x81";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9D";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xB9";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x95";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB1";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8D";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xA9";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x85";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA1";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBD";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x99";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB5";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x91";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAD";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x89";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA5";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x81";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9D";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x96";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB2";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8E";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAA";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x86";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA2";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBE";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9A";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB6";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x92";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAE";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8A";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA6";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x82";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9E";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBA";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x96";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB2";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8E";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAA";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x86";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA2";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBE";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9A";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB6";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x92";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAE";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8A";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA6";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x82";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9E";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBA";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x96";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB2";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8E";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x86";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBE";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x92";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8A";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x82";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBA";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x96";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8E";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x86";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBE";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x92";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8A";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x82";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBA";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x96";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8E";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x86";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBE";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x92";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8A";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x82";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBA";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x96";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8E";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x86";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBE";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x92";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8A";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x82";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBA";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x96";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8E";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x86";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBE";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x92";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8A";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x82";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBA";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x96";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8E";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x86";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBE";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x92";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8A";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x82";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBA";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x96";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8E";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x86";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBE";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x92";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8A";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x82";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBA";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x96";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8E";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x86";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBE";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x92";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8A";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x82";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBA";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x96";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8E";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x86";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBE";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9A";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB6";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x92";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAE";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8A";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA6";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x82";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9E";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBA";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x96";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB2";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8E";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAA";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x86";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA2";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBE";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x92";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8A";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x82";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBA";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x96";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8E";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x86";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBE";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x92";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8A";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x82";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBA";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x96";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8E";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x86";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBE";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x92";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8A";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x82";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBA";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x96";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8E";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x86";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBE";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x92";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8A";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x82";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBA";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x96";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8E";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x86";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBE";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x92";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8A";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x82";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBA";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x96";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8E";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x86";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBE";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x92";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8A";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x82";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBA";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x96";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8E";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x86";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBE";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x92";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8A";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x82";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBA";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x96";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8E";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x86";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBE";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x92";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8A";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x82";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBA";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x96";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8E";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x86";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBE";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB6";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x92";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAE";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8A";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA6";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x82";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9E";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBA";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x96";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB2";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8E";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAA";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x86";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA2";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBE";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9A";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB6";
+ break;
+ case 0xBC :
+ return "\xED\x80\x92";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAE";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8A";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA6";
+ break;
+ case 0xAC :
+ return "\xED\x82\x82";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9E";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBA";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x96";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB2";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8E";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAA";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x86";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA2";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBE";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9A";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB6";
+ break;
+ case 0xBC :
+ return "\xED\x87\x92";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAE";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8A";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA6";
+ break;
+ case 0xAC :
+ return "\xED\x89\x82";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9E";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBA";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x96";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB2";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8E";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAA";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x86";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA2";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBE";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9A";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB6";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x92";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAE";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8A";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA6";
+ break;
+ case 0xAC :
+ return "\xED\x90\x82";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9E";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBA";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x96";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB2";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8E";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAA";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x86";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA2";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBE";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9A";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB6";
+ break;
+ case 0xBC :
+ return "\xED\x95\x92";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAE";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8A";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA6";
+ break;
+ case 0xAC :
+ return "\xED\x97\x82";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9E";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBA";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x96";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB2";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8E";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAA";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x86";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA2";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBE";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9A";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB6";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x92";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAE";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8A";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA6";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x82";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9E";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x97";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB3";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x8F";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAB";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x87";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA3";
+ break;
+ case 0xA8 :
+ return "\xEA\xB2\xBF";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9B";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB7";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x93";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xAF";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8B";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA7";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x83";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\x9F";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBB";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x97";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB3";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x8F";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAB";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x87";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA3";
+ break;
+ case 0xA8 :
+ return "\xEA\xB9\xBF";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9B";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB7";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x93";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xAF";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8B";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA7";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x83";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\x9F";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBB";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x97";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB3";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x8F";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x87";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\x80\xBF";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x93";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8B";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x83";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBB";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x97";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x8F";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x87";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\x87\xBF";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x93";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8B";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x83";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBB";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x97";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x8F";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x87";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\x8E\xBF";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x93";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8B";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x83";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBB";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x97";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x8F";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x87";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\x95\xBF";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x93";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8B";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x83";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBB";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x97";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x8F";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x87";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\x9C\xBF";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x93";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8B";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x83";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBB";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x97";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x8F";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x87";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\xA3\xBF";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x93";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8B";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x83";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBB";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x97";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x8F";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x87";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\xAA\xBF";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x93";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8B";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x83";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBB";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x97";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x8F";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x87";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\xB1\xBF";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x93";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8B";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x83";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBB";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x97";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x8F";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x87";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\xB8\xBF";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9B";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB7";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x93";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xAF";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8B";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA7";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x83";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\x9F";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBB";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x97";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB3";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x8F";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAB";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x87";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA3";
+ break;
+ case 0xA8 :
+ return "\xEB\xBF\xBF";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x93";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8B";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x83";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBB";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x97";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x8F";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x87";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\x86\xBF";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x93";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8B";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x83";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBB";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x97";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x8F";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x87";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\x8D\xBF";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x93";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8B";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x83";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBB";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x97";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x8F";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x87";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\x94\xBF";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x93";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8B";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x83";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBB";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x97";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x8F";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x87";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\x9B\xBF";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x93";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8B";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x83";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBB";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x97";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x8F";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x87";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\xA2\xBF";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x93";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8B";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x83";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBB";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x97";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x8F";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x87";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\xA9\xBF";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x93";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8B";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x83";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBB";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x97";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x8F";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x87";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\xB0\xBF";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x93";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8B";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x83";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBB";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x97";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x8F";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x87";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\xB7\xBF";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB7";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x93";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xAF";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8B";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA7";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x83";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\x9F";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBB";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x97";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB3";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x8F";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAB";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x87";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA3";
+ break;
+ case 0xA8 :
+ return "\xEC\xBE\xBF";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9B";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB7";
+ break;
+ case 0xBC :
+ return "\xED\x80\x93";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xAF";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8B";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA7";
+ break;
+ case 0xAC :
+ return "\xED\x82\x83";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\x9F";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBB";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x97";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB3";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x8F";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAB";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x87";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA3";
+ break;
+ case 0xA8 :
+ return "\xED\x85\xBF";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9B";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB7";
+ break;
+ case 0xBC :
+ return "\xED\x87\x93";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xAF";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8B";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA7";
+ break;
+ case 0xAC :
+ return "\xED\x89\x83";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\x9F";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBB";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x97";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB3";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x8F";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAB";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x87";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA3";
+ break;
+ case 0xA8 :
+ return "\xED\x8C\xBF";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9B";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB7";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x93";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xAF";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8B";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA7";
+ break;
+ case 0xAC :
+ return "\xED\x90\x83";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\x9F";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBB";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x97";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB3";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x8F";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAB";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x87";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA3";
+ break;
+ case 0xA8 :
+ return "\xED\x93\xBF";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9B";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB7";
+ break;
+ case 0xBC :
+ return "\xED\x95\x93";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xAF";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8B";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA7";
+ break;
+ case 0xAC :
+ return "\xED\x97\x83";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\x9F";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBB";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x97";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB3";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x8F";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAB";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x87";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA3";
+ break;
+ case 0xA8 :
+ return "\xED\x9A\xBF";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9B";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB7";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x93";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xAF";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8B";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA7";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x83";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\x9F";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x98";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB4";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x90";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAC";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x88";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA4";
+ break;
+ case 0xA8 :
+ return "\xEA\xB3\x80";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9C";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB8";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x94";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xB0";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8C";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA8";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x84";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\xA0";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBC";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x98";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB4";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x90";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAC";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x88";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA4";
+ break;
+ case 0xA8 :
+ return "\xEA\xBA\x80";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9C";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB8";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x94";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xB0";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8C";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA8";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x84";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\xA0";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBC";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x98";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB4";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x90";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x88";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\x81\x80";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x94";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8C";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x84";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBC";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x98";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x90";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x88";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\x88\x80";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x94";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8C";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x84";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBC";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x98";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x90";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x88";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\x8F\x80";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x94";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8C";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x84";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBC";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x98";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x90";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x88";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\x96\x80";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x94";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8C";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x84";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBC";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x98";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x90";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x88";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\x9D\x80";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x94";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8C";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x84";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBC";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x98";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x90";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x88";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\xA4\x80";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x94";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8C";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x84";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBC";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x98";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x90";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x88";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\xAB\x80";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x94";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8C";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x84";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBC";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x98";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x90";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x88";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\xB2\x80";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x94";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8C";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x84";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBC";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x98";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x90";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x88";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA4";
+ break;
+ case 0xA8 :
+ return "\xEB\xB9\x80";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9C";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB8";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x94";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xB0";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8C";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA8";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x84";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\xA0";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBC";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x98";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB4";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x90";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAC";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x88";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\x80\x80";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x94";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8C";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x84";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBC";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x98";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x90";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x88";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\x87\x80";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x94";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8C";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x84";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBC";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x98";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x90";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x88";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\x8E\x80";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x94";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8C";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x84";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBC";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x98";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x90";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x88";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\x95\x80";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x94";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8C";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x84";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBC";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x98";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x90";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x88";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\x9C\x80";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x94";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8C";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x84";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBC";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x98";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x90";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x88";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\xA3\x80";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x94";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8C";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x84";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBC";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x98";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x90";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x88";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\xAA\x80";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x94";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8C";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x84";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBC";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x98";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x90";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x88";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\xB1\x80";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x94";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8C";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x84";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBC";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x98";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x90";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x88";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\xB8\x80";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB8";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x94";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xB0";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8C";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA8";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x84";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\xA0";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBC";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x98";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB4";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x90";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAC";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x88";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA4";
+ break;
+ case 0xA8 :
+ return "\xEC\xBF\x80";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9C";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB8";
+ break;
+ case 0xBC :
+ return "\xED\x80\x94";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xB0";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8C";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA8";
+ break;
+ case 0xAC :
+ return "\xED\x82\x84";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\xA0";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBC";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x98";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB4";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x90";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAC";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x88";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA4";
+ break;
+ case 0xA8 :
+ return "\xED\x86\x80";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9C";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB8";
+ break;
+ case 0xBC :
+ return "\xED\x87\x94";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xB0";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8C";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA8";
+ break;
+ case 0xAC :
+ return "\xED\x89\x84";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\xA0";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBC";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x98";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB4";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x90";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAC";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x88";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA4";
+ break;
+ case 0xA8 :
+ return "\xED\x8D\x80";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9C";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB8";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x94";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xB0";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8C";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA8";
+ break;
+ case 0xAC :
+ return "\xED\x90\x84";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\xA0";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBC";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x98";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB4";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x90";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAC";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x88";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA4";
+ break;
+ case 0xA8 :
+ return "\xED\x94\x80";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9C";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB8";
+ break;
+ case 0xBC :
+ return "\xED\x95\x94";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xB0";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8C";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA8";
+ break;
+ case 0xAC :
+ return "\xED\x97\x84";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\xA0";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBC";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x98";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB4";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x90";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAC";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x88";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA4";
+ break;
+ case 0xA8 :
+ return "\xED\x9B\x80";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9C";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB8";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x94";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xB0";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8C";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA8";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x84";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\xA0";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (suffix[2]) {
+ case 0x80 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x99";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB5";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x91";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAD";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x89";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA5";
+ break;
+ case 0xA8 :
+ return "\xEA\xB3\x81";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9D";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xB9";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x95";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xB1";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8D";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xA9";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x85";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\xA1";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBD";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x99";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB5";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x91";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAD";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x89";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA5";
+ break;
+ case 0xA8 :
+ return "\xEA\xBA\x81";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9D";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xB9";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x95";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xB1";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8D";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xA9";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x85";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\xA1";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBD";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x99";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB5";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x91";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x89";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\x81\x81";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x95";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8D";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x85";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBD";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x99";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x91";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x89";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\x88\x81";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x95";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8D";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x85";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBD";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x99";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x91";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x89";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\x8F\x81";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x95";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8D";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x85";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBD";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x99";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x91";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x89";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\x96\x81";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x95";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8D";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x85";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBD";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x99";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x91";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x89";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\x9D\x81";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x95";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8D";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x85";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBD";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x99";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x91";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x89";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\xA4\x81";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x95";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8D";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x85";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBD";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x99";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x91";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x89";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\xAB\x81";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x95";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8D";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x85";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBD";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x99";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x91";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x89";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\xB2\x81";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x95";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8D";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x85";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBD";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x99";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x91";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x89";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA5";
+ break;
+ case 0xA8 :
+ return "\xEB\xB9\x81";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9D";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xB9";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x95";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xB1";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8D";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xA9";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x85";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\xA1";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBD";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x99";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB5";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x91";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAD";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x89";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\x80\x81";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x95";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8D";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x85";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBD";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x99";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x91";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x89";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\x87\x81";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x95";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8D";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x85";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBD";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x99";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x91";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x89";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\x8E\x81";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x95";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8D";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x85";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBD";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x99";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x91";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x89";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\x95\x81";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x95";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8D";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x85";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBD";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x99";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x91";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x89";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\x9C\x81";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x95";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8D";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x85";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBD";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x99";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x91";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x89";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\xA3\x81";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x95";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8D";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x85";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBD";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x99";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x91";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x89";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\xAA\x81";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x95";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8D";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x85";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBD";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x99";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x91";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x89";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\xB1\x81";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x95";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8D";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x85";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBD";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x99";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x91";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x89";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\xB8\x81";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xB9";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x95";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xB1";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8D";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xA9";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x85";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\xA1";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBD";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x99";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB5";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x91";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAD";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x89";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA5";
+ break;
+ case 0xA8 :
+ return "\xEC\xBF\x81";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9D";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xB9";
+ break;
+ case 0xBC :
+ return "\xED\x80\x95";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xB1";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8D";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xA9";
+ break;
+ case 0xAC :
+ return "\xED\x82\x85";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\xA1";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x99";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB5";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x91";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAD";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x89";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA5";
+ break;
+ case 0xA8 :
+ return "\xED\x86\x81";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9D";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xB9";
+ break;
+ case 0xBC :
+ return "\xED\x87\x95";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xB1";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8D";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xA9";
+ break;
+ case 0xAC :
+ return "\xED\x89\x85";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\xA1";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBD";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x99";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB5";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x91";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAD";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x89";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA5";
+ break;
+ case 0xA8 :
+ return "\xED\x8D\x81";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9D";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xB9";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x95";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xB1";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8D";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xA9";
+ break;
+ case 0xAC :
+ return "\xED\x90\x85";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\xA1";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBD";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x99";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB5";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x91";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAD";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x89";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA5";
+ break;
+ case 0xA8 :
+ return "\xED\x94\x81";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9D";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xB9";
+ break;
+ case 0xBC :
+ return "\xED\x95\x95";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xB1";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8D";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xA9";
+ break;
+ case 0xAC :
+ return "\xED\x97\x85";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\xA1";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBD";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x99";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB5";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x91";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAD";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x89";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA5";
+ break;
+ case 0xA8 :
+ return "\xED\x9B\x81";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9D";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xB9";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x95";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xB1";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8D";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xA9";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x85";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\xA1";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x9A";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB6";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x92";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAE";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x8A";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA6";
+ break;
+ case 0xA8 :
+ return "\xEA\xB3\x82";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9E";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xBA";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x96";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xB2";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8E";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xAA";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x86";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\xA2";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBE";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x9A";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB6";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x92";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAE";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x8A";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA6";
+ break;
+ case 0xA8 :
+ return "\xEA\xBA\x82";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9E";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xBA";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x96";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xB2";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8E";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xAA";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x86";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\xA2";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBE";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x9A";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB6";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x92";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x8A";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\x81\x82";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x96";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8E";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x86";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBE";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x92";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x8A";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\x88\x82";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x96";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8E";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x86";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBE";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x92";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x8A";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\x8F\x82";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x96";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8E";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x86";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBE";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x92";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x8A";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\x96\x82";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x96";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8E";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x86";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBE";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x92";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x8A";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\x9D\x82";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x96";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8E";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x86";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBE";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x92";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x8A";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\xA4\x82";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x96";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8E";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x86";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBE";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x92";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x8A";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\xAB\x82";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x96";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8E";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x86";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBE";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x92";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x8A";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\xB2\x82";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x96";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8E";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x86";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBE";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x92";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x8A";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA6";
+ break;
+ case 0xA8 :
+ return "\xEB\xB9\x82";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9E";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xBA";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x96";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xB2";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8E";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xAA";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x86";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\xA2";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBE";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x9A";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB6";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x92";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAE";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x8A";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\x80\x82";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x96";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8E";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x86";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBE";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x92";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x8A";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\x87\x82";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x96";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8E";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x86";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBE";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x92";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x8A";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\x8E\x82";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x96";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8E";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x86";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBE";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x92";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x8A";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\x95\x82";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x96";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8E";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x86";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBE";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x92";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x8A";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\x9C\x82";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x96";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8E";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x86";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBE";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x92";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x8A";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\xA3\x82";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x96";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8E";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x86";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBE";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x92";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x8A";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\xAA\x82";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x96";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8E";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x86";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBE";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x92";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x8A";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\xB1\x82";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x96";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8E";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x86";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBE";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x92";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x8A";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\xB8\x82";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xBA";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x96";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xB2";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8E";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xAA";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x86";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\xA2";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBE";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x9A";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB6";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x92";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAE";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x8A";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA6";
+ break;
+ case 0xA8 :
+ return "\xEC\xBF\x82";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9E";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xBA";
+ break;
+ case 0xBC :
+ return "\xED\x80\x96";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xB2";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8E";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xAA";
+ break;
+ case 0xAC :
+ return "\xED\x82\x86";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\xA2";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBE";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x9A";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB6";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x92";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAE";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x8A";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA6";
+ break;
+ case 0xA8 :
+ return "\xED\x86\x82";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9E";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xBA";
+ break;
+ case 0xBC :
+ return "\xED\x87\x96";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xB2";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8E";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xAA";
+ break;
+ case 0xAC :
+ return "\xED\x89\x86";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\xA2";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBE";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x9A";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB6";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x92";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAE";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x8A";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA6";
+ break;
+ case 0xA8 :
+ return "\xED\x8D\x82";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9E";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xBA";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x96";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xB2";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8E";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xAA";
+ break;
+ case 0xAC :
+ return "\xED\x90\x86";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\xA2";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBE";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x9A";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB6";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x92";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAE";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x8A";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA6";
+ break;
+ case 0xA8 :
+ return "\xED\x94\x82";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9E";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xBA";
+ break;
+ case 0xBC :
+ return "\xED\x95\x96";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xB2";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8E";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xAA";
+ break;
+ case 0xAC :
+ return "\xED\x97\x86";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\xA2";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBE";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x9A";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB6";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x92";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAE";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x8A";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA6";
+ break;
+ case 0xA8 :
+ return "\xED\x9B\x82";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9E";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xBA";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x96";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xB2";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8E";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xAA";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x86";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\xA2";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[0]) {
+ case 0xEA :
+ switch (prefix[1]) {
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB0\x9B";
+ break;
+ case 0x9C :
+ return "\xEA\xB0\xB7";
+ break;
+ case 0xB8 :
+ return "\xEA\xB1\x93";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB1\xAF";
+ break;
+ case 0xB0 :
+ return "\xEA\xB2\x8B";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB2\xA7";
+ break;
+ case 0xA8 :
+ return "\xEA\xB3\x83";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xB3\x9F";
+ break;
+ case 0xA0 :
+ return "\xEA\xB3\xBB";
+ break;
+ case 0xBC :
+ return "\xEA\xB4\x97";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xB4\xB3";
+ break;
+ case 0xB4 :
+ return "\xEA\xB5\x8F";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xB5\xAB";
+ break;
+ case 0xAC :
+ return "\xEA\xB6\x87";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xB6\xA3";
+ break;
+ case 0xA4 :
+ return "\xEA\xB6\xBF";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xB7\x9B";
+ break;
+ case 0x9C :
+ return "\xEA\xB7\xB7";
+ break;
+ case 0xB8 :
+ return "\xEA\xB8\x93";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xB8\xAF";
+ break;
+ case 0xB0 :
+ return "\xEA\xB9\x8B";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEA\xB9\xA7";
+ break;
+ case 0xA8 :
+ return "\xEA\xBA\x83";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEA\xBA\x9F";
+ break;
+ case 0xA0 :
+ return "\xEA\xBA\xBB";
+ break;
+ case 0xBC :
+ return "\xEA\xBB\x97";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEA\xBB\xB3";
+ break;
+ case 0xB4 :
+ return "\xEA\xBC\x8F";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEA\xBC\xAB";
+ break;
+ case 0xAC :
+ return "\xEA\xBD\x87";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEA\xBD\xA3";
+ break;
+ case 0xA4 :
+ return "\xEA\xBD\xBF";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEA\xBE\x9B";
+ break;
+ case 0x9C :
+ return "\xEA\xBE\xB7";
+ break;
+ case 0xB8 :
+ return "\xEA\xBF\x93";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEA\xBF\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\x80\x8B";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEB :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x80\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\x81\x83";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x81\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\x81\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\x82\x97";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x82\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\x83\x8F";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x83\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\x84\x87";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x84\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\x84\xBF";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x85\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\x85\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\x86\x93";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x86\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\x87\x8B";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x87\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\x88\x83";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x88\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\x88\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\x89\x97";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x89\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\x8A\x8F";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x8A\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\x8B\x87";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x8B\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\x8B\xBF";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x8C\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\x8C\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\x8D\x93";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x8D\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\x8E\x8B";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x8E\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\x8F\x83";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x8F\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\x8F\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\x90\x97";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x90\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\x91\x8F";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x91\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\x92\x87";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x92\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\x92\xBF";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x93\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\x93\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\x94\x93";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x94\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\x95\x8B";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x95\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\x96\x83";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x96\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\x96\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\x97\x97";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x97\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\x98\x8F";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x98\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\x99\x87";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\x99\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\x99\xBF";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\x9A\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\x9A\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\x9B\x93";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\x9B\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\x9C\x8B";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\x9C\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\x9D\x83";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\x9D\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\x9D\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\x9E\x97";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\x9E\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\x9F\x8F";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\x9F\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\xA0\x87";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA0\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\xA0\xBF";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA1\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\xA1\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\xA2\x93";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA2\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\xA3\x8B";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xA3\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\xA4\x83";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xA4\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\xA4\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\xA5\x97";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xA5\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\xA6\x8F";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xA6\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\xA7\x87";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xA7\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\xA7\xBF";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xA8\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\xA8\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\xA9\x93";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xA9\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\xAA\x8B";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xAA\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\xAB\x83";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xAB\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\xAB\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\xAC\x97";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xAC\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\xAD\x8F";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xAD\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\xAE\x87";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xAE\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\xAE\xBF";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xAF\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\xAF\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\xB0\x93";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB0\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\xB1\x8B";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB1\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\xB2\x83";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB2\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\xB2\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\xB3\x97";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xB3\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\xB4\x8F";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xB4\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\xB5\x87";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xB5\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\xB5\xBF";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xB6\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\xB6\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\xB7\x93";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xB7\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\xB8\x8B";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xB8\xA7";
+ break;
+ case 0xA8 :
+ return "\xEB\xB9\x83";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEB\xB9\x9F";
+ break;
+ case 0xA0 :
+ return "\xEB\xB9\xBB";
+ break;
+ case 0xBC :
+ return "\xEB\xBA\x97";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEB\xBA\xB3";
+ break;
+ case 0xB4 :
+ return "\xEB\xBB\x8F";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEB\xBB\xAB";
+ break;
+ case 0xAC :
+ return "\xEB\xBC\x87";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEB\xBC\xA3";
+ break;
+ case 0xA4 :
+ return "\xEB\xBC\xBF";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEB\xBD\x9B";
+ break;
+ case 0x9C :
+ return "\xEB\xBD\xB7";
+ break;
+ case 0xB8 :
+ return "\xEB\xBE\x93";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEB\xBE\xAF";
+ break;
+ case 0xB0 :
+ return "\xEB\xBF\x8B";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEB\xBF\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\x80\x83";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xEC :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x80\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\x80\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\x81\x97";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x81\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\x82\x8F";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x82\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\x83\x87";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x83\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\x83\xBF";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x84\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\x84\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\x85\x93";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x85\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\x86\x8B";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x86\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\x87\x83";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x87\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\x87\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\x88\x97";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x88\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\x89\x8F";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x89\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\x8A\x87";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x8A\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\x8A\xBF";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x8B\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\x8B\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\x8C\x93";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x8C\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\x8D\x8B";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x8D\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\x8E\x83";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x8E\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\x8E\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\x8F\x97";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x8F\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\x90\x8F";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x90\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\x91\x87";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x91\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\x91\xBF";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x92\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\x92\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\x93\x93";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x93\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\x94\x8B";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x94\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\x95\x83";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x95\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\x95\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\x96\x97";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x96\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\x97\x8F";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x97\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\x98\x87";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x98\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\x98\xBF";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\x99\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\x99\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\x9A\x93";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\x9A\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\x9B\x8B";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\x9B\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\x9C\x83";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\x9C\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\x9C\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\x9D\x97";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\x9D\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\x9E\x8F";
+ break;
+ }
+ break;
+ case 0x9E :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\x9E\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\x9F\x87";
+ break;
+ }
+ break;
+ case 0x9F :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\x9F\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\x9F\xBF";
+ break;
+ }
+ break;
+ case 0xA0 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA0\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\xA0\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\xA1\x93";
+ break;
+ }
+ break;
+ case 0xA1 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA1\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\xA2\x8B";
+ break;
+ }
+ break;
+ case 0xA2 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA2\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\xA3\x83";
+ break;
+ }
+ break;
+ case 0xA3 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xA3\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\xA3\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\xA4\x97";
+ break;
+ }
+ break;
+ case 0xA4 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xA4\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\xA5\x8F";
+ break;
+ }
+ break;
+ case 0xA5 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xA5\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\xA6\x87";
+ break;
+ }
+ break;
+ case 0xA6 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xA6\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\xA6\xBF";
+ break;
+ }
+ break;
+ case 0xA7 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xA7\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\xA7\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\xA8\x93";
+ break;
+ }
+ break;
+ case 0xA8 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xA8\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\xA9\x8B";
+ break;
+ }
+ break;
+ case 0xA9 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xA9\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\xAA\x83";
+ break;
+ }
+ break;
+ case 0xAA :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xAA\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\xAA\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\xAB\x97";
+ break;
+ }
+ break;
+ case 0xAB :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xAB\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\xAC\x8F";
+ break;
+ }
+ break;
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xAC\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\xAD\x87";
+ break;
+ }
+ break;
+ case 0xAD :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xAD\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\xAD\xBF";
+ break;
+ }
+ break;
+ case 0xAE :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xAE\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\xAE\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\xAF\x93";
+ break;
+ }
+ break;
+ case 0xAF :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xAF\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\xB0\x8B";
+ break;
+ }
+ break;
+ case 0xB0 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB0\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\xB1\x83";
+ break;
+ }
+ break;
+ case 0xB1 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB1\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\xB1\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\xB2\x97";
+ break;
+ }
+ break;
+ case 0xB2 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB2\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\xB3\x8F";
+ break;
+ }
+ break;
+ case 0xB3 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xB3\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\xB4\x87";
+ break;
+ }
+ break;
+ case 0xB4 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xB4\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\xB4\xBF";
+ break;
+ }
+ break;
+ case 0xB5 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xB5\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\xB5\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\xB6\x93";
+ break;
+ }
+ break;
+ case 0xB6 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xB6\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\xB7\x8B";
+ break;
+ }
+ break;
+ case 0xB7 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xB7\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\xB8\x83";
+ break;
+ }
+ break;
+ case 0xB8 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xB8\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\xB8\xBB";
+ break;
+ case 0xBC :
+ return "\xEC\xB9\x97";
+ break;
+ }
+ break;
+ case 0xB9 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xEC\xB9\xB3";
+ break;
+ case 0xB4 :
+ return "\xEC\xBA\x8F";
+ break;
+ }
+ break;
+ case 0xBA :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xEC\xBA\xAB";
+ break;
+ case 0xAC :
+ return "\xEC\xBB\x87";
+ break;
+ }
+ break;
+ case 0xBB :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xEC\xBB\xA3";
+ break;
+ case 0xA4 :
+ return "\xEC\xBB\xBF";
+ break;
+ }
+ break;
+ case 0xBC :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xEC\xBC\x9B";
+ break;
+ case 0x9C :
+ return "\xEC\xBC\xB7";
+ break;
+ case 0xB8 :
+ return "\xEC\xBD\x93";
+ break;
+ }
+ break;
+ case 0xBD :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xEC\xBD\xAF";
+ break;
+ case 0xB0 :
+ return "\xEC\xBE\x8B";
+ break;
+ }
+ break;
+ case 0xBE :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xEC\xBE\xA7";
+ break;
+ case 0xA8 :
+ return "\xEC\xBF\x83";
+ break;
+ }
+ break;
+ case 0xBF :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xEC\xBF\x9F";
+ break;
+ case 0xA0 :
+ return "\xEC\xBF\xBB";
+ break;
+ case 0xBC :
+ return "\xED\x80\x97";
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xED :
+ switch (prefix[1]) {
+ case 0x80 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x80\xB3";
+ break;
+ case 0xB4 :
+ return "\xED\x81\x8F";
+ break;
+ }
+ break;
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x81\xAB";
+ break;
+ case 0xAC :
+ return "\xED\x82\x87";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x82\xA3";
+ break;
+ case 0xA4 :
+ return "\xED\x82\xBF";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x83\x9B";
+ break;
+ case 0x9C :
+ return "\xED\x83\xB7";
+ break;
+ case 0xB8 :
+ return "\xED\x84\x93";
+ break;
+ }
+ break;
+ case 0x84 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x84\xAF";
+ break;
+ case 0xB0 :
+ return "\xED\x85\x8B";
+ break;
+ }
+ break;
+ case 0x85 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x85\xA7";
+ break;
+ case 0xA8 :
+ return "\xED\x86\x83";
+ break;
+ }
+ break;
+ case 0x86 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x86\x9F";
+ break;
+ case 0xA0 :
+ return "\xED\x86\xBB";
+ break;
+ case 0xBC :
+ return "\xED\x87\x97";
+ break;
+ }
+ break;
+ case 0x87 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x87\xB3";
+ break;
+ case 0xB4 :
+ return "\xED\x88\x8F";
+ break;
+ }
+ break;
+ case 0x88 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x88\xAB";
+ break;
+ case 0xAC :
+ return "\xED\x89\x87";
+ break;
+ }
+ break;
+ case 0x89 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x89\xA3";
+ break;
+ case 0xA4 :
+ return "\xED\x89\xBF";
+ break;
+ }
+ break;
+ case 0x8A :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x8A\x9B";
+ break;
+ case 0x9C :
+ return "\xED\x8A\xB7";
+ break;
+ case 0xB8 :
+ return "\xED\x8B\x93";
+ break;
+ }
+ break;
+ case 0x8B :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x8B\xAF";
+ break;
+ case 0xB0 :
+ return "\xED\x8C\x8B";
+ break;
+ }
+ break;
+ case 0x8C :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x8C\xA7";
+ break;
+ case 0xA8 :
+ return "\xED\x8D\x83";
+ break;
+ }
+ break;
+ case 0x8D :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x8D\x9F";
+ break;
+ case 0xA0 :
+ return "\xED\x8D\xBB";
+ break;
+ case 0xBC :
+ return "\xED\x8E\x97";
+ break;
+ }
+ break;
+ case 0x8E :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x8E\xB3";
+ break;
+ case 0xB4 :
+ return "\xED\x8F\x8F";
+ break;
+ }
+ break;
+ case 0x8F :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x8F\xAB";
+ break;
+ case 0xAC :
+ return "\xED\x90\x87";
+ break;
+ }
+ break;
+ case 0x90 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x90\xA3";
+ break;
+ case 0xA4 :
+ return "\xED\x90\xBF";
+ break;
+ }
+ break;
+ case 0x91 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x91\x9B";
+ break;
+ case 0x9C :
+ return "\xED\x91\xB7";
+ break;
+ case 0xB8 :
+ return "\xED\x92\x93";
+ break;
+ }
+ break;
+ case 0x92 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x92\xAF";
+ break;
+ case 0xB0 :
+ return "\xED\x93\x8B";
+ break;
+ }
+ break;
+ case 0x93 :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x93\xA7";
+ break;
+ case 0xA8 :
+ return "\xED\x94\x83";
+ break;
+ }
+ break;
+ case 0x94 :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x94\x9F";
+ break;
+ case 0xA0 :
+ return "\xED\x94\xBB";
+ break;
+ case 0xBC :
+ return "\xED\x95\x97";
+ break;
+ }
+ break;
+ case 0x95 :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x95\xB3";
+ break;
+ case 0xB4 :
+ return "\xED\x96\x8F";
+ break;
+ }
+ break;
+ case 0x96 :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x96\xAB";
+ break;
+ case 0xAC :
+ return "\xED\x97\x87";
+ break;
+ }
+ break;
+ case 0x97 :
+ switch (prefix[2]) {
+ case 0x88 :
+ return "\xED\x97\xA3";
+ break;
+ case 0xA4 :
+ return "\xED\x97\xBF";
+ break;
+ }
+ break;
+ case 0x98 :
+ switch (prefix[2]) {
+ case 0x80 :
+ return "\xED\x98\x9B";
+ break;
+ case 0x9C :
+ return "\xED\x98\xB7";
+ break;
+ case 0xB8 :
+ return "\xED\x99\x93";
+ break;
+ }
+ break;
+ case 0x99 :
+ switch (prefix[2]) {
+ case 0x94 :
+ return "\xED\x99\xAF";
+ break;
+ case 0xB0 :
+ return "\xED\x9A\x8B";
+ break;
+ }
+ break;
+ case 0x9A :
+ switch (prefix[2]) {
+ case 0x8C :
+ return "\xED\x9A\xA7";
+ break;
+ case 0xA8 :
+ return "\xED\x9B\x83";
+ break;
+ }
+ break;
+ case 0x9B :
+ switch (prefix[2]) {
+ case 0x84 :
+ return "\xED\x9B\x9F";
+ break;
+ case 0xA0 :
+ return "\xED\x9B\xBB";
+ break;
+ case 0xBC :
+ return "\xED\x9C\x97";
+ break;
+ }
+ break;
+ case 0x9C :
+ switch (prefix[2]) {
+ case 0x98 :
+ return "\xED\x9C\xB3";
+ break;
+ case 0xB4 :
+ return "\xED\x9D\x8F";
+ break;
+ }
+ break;
+ case 0x9D :
+ switch (prefix[2]) {
+ case 0x90 :
+ return "\xED\x9D\xAB";
+ break;
+ case 0xAC :
+ return "\xED\x9E\x87";
+ break;
+ }
+ break;
+ case 0x9E :
+ if (prefix[2] == 0x88) {
+ return "\xED\x9E\xA3";
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ break;
+ case 0xAC :
+ if (suffix[2] == 0xB5) {
+ if (prefix[0] == 0xE1) {
+ switch (prefix[1]) {
+ case 0xAC :
+ switch (prefix[2]) {
+ case 0x85 :
+ return "\xE1\xAC\x86";
+ break;
+ case 0x87 :
+ return "\xE1\xAC\x88";
+ break;
+ case 0x89 :
+ return "\xE1\xAC\x8A";
+ break;
+ case 0x8B :
+ return "\xE1\xAC\x8C";
+ break;
+ case 0x8D :
+ return "\xE1\xAC\x8E";
+ break;
+ case 0x91 :
+ return "\xE1\xAC\x92";
+ break;
+ case 0xBA :
+ return "\xE1\xAC\xBB";
+ break;
+ case 0xBC :
+ return "\xE1\xAC\xBD";
+ break;
+ case 0xBE :
+ return "\xE1\xAD\x80";
+ break;
+ case 0xBF :
+ return "\xE1\xAD\x81";
+ break;
+ }
+ break;
+ case 0xAD :
+ if (prefix[2] == 0x82) {
+ return "\xE1\xAD\x83";
+ }
+ break;
+ }
+ }
+ }
+ break;
+ }
+ break;
+case 0xE3 :
+ if (suffix[1] == 0x82) {
+ switch (suffix[2]) {
+ case 0x99 :
+ if (prefix[0] == 0xE3) {
+ switch (prefix[1]) {
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0x86 :
+ return "\xE3\x82\x94";
+ break;
+ case 0x8B :
+ return "\xE3\x81\x8C";
+ break;
+ case 0x8D :
+ return "\xE3\x81\x8E";
+ break;
+ case 0x8F :
+ return "\xE3\x81\x90";
+ break;
+ case 0x91 :
+ return "\xE3\x81\x92";
+ break;
+ case 0x93 :
+ return "\xE3\x81\x94";
+ break;
+ case 0x95 :
+ return "\xE3\x81\x96";
+ break;
+ case 0x97 :
+ return "\xE3\x81\x98";
+ break;
+ case 0x99 :
+ return "\xE3\x81\x9A";
+ break;
+ case 0x9B :
+ return "\xE3\x81\x9C";
+ break;
+ case 0x9D :
+ return "\xE3\x81\x9E";
+ break;
+ case 0x9F :
+ return "\xE3\x81\xA0";
+ break;
+ case 0xA1 :
+ return "\xE3\x81\xA2";
+ break;
+ case 0xA4 :
+ return "\xE3\x81\xA5";
+ break;
+ case 0xA6 :
+ return "\xE3\x81\xA7";
+ break;
+ case 0xA8 :
+ return "\xE3\x81\xA9";
+ break;
+ case 0xAF :
+ return "\xE3\x81\xB0";
+ break;
+ case 0xB2 :
+ return "\xE3\x81\xB3";
+ break;
+ case 0xB5 :
+ return "\xE3\x81\xB6";
+ break;
+ case 0xB8 :
+ return "\xE3\x81\xB9";
+ break;
+ case 0xBB :
+ return "\xE3\x81\xBC";
+ break;
+ }
+ break;
+ case 0x82 :
+ switch (prefix[2]) {
+ case 0x9D :
+ return "\xE3\x82\x9E";
+ break;
+ case 0xA6 :
+ return "\xE3\x83\xB4";
+ break;
+ case 0xAB :
+ return "\xE3\x82\xAC";
+ break;
+ case 0xAD :
+ return "\xE3\x82\xAE";
+ break;
+ case 0xAF :
+ return "\xE3\x82\xB0";
+ break;
+ case 0xB1 :
+ return "\xE3\x82\xB2";
+ break;
+ case 0xB3 :
+ return "\xE3\x82\xB4";
+ break;
+ case 0xB5 :
+ return "\xE3\x82\xB6";
+ break;
+ case 0xB7 :
+ return "\xE3\x82\xB8";
+ break;
+ case 0xB9 :
+ return "\xE3\x82\xBA";
+ break;
+ case 0xBB :
+ return "\xE3\x82\xBC";
+ break;
+ case 0xBD :
+ return "\xE3\x82\xBE";
+ break;
+ case 0xBF :
+ return "\xE3\x83\x80";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x81 :
+ return "\xE3\x83\x82";
+ break;
+ case 0x84 :
+ return "\xE3\x83\x85";
+ break;
+ case 0x86 :
+ return "\xE3\x83\x87";
+ break;
+ case 0x88 :
+ return "\xE3\x83\x89";
+ break;
+ case 0x8F :
+ return "\xE3\x83\x90";
+ break;
+ case 0x92 :
+ return "\xE3\x83\x93";
+ break;
+ case 0x95 :
+ return "\xE3\x83\x96";
+ break;
+ case 0x98 :
+ return "\xE3\x83\x99";
+ break;
+ case 0x9B :
+ return "\xE3\x83\x9C";
+ break;
+ case 0xAF :
+ return "\xE3\x83\xB7";
+ break;
+ case 0xB0 :
+ return "\xE3\x83\xB8";
+ break;
+ case 0xB1 :
+ return "\xE3\x83\xB9";
+ break;
+ case 0xB2 :
+ return "\xE3\x83\xBA";
+ break;
+ case 0xBD :
+ return "\xE3\x83\xBE";
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ case 0x9A :
+ if (prefix[0] == 0xE3) {
+ switch (prefix[1]) {
+ case 0x81 :
+ switch (prefix[2]) {
+ case 0xAF :
+ return "\xE3\x81\xB1";
+ break;
+ case 0xB2 :
+ return "\xE3\x81\xB4";
+ break;
+ case 0xB5 :
+ return "\xE3\x81\xB7";
+ break;
+ case 0xB8 :
+ return "\xE3\x81\xBA";
+ break;
+ case 0xBB :
+ return "\xE3\x81\xBD";
+ break;
+ }
+ break;
+ case 0x83 :
+ switch (prefix[2]) {
+ case 0x8F :
+ return "\xE3\x83\x91";
+ break;
+ case 0x92 :
+ return "\xE3\x83\x94";
+ break;
+ case 0x95 :
+ return "\xE3\x83\x97";
+ break;
+ case 0x98 :
+ return "\xE3\x83\x9A";
+ break;
+ case 0x9B :
+ return "\xE3\x83\x9D";
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+ break;
+}
+ return 0;
+}
+
+#endif /* GRN_WITH_NFKC */
+
diff --git a/storage/mroonga/vendor/groonga/lib/nfkc.rb b/storage/mroonga/vendor/groonga/lib/nfkc.rb
new file mode 100755
index 00000000000..1a134384c80
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/nfkc.rb
@@ -0,0 +1,418 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+#
+# Copyright(C) 2010 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+$KCODE = 'u'
+
+CUSTOM_RULE_PATH = 'nfkc-custom-rules.txt'
+
+def gen_bc(file, hash, level)
+ bl = ' ' * (level * 2)
+ h2 = {}
+ hash.each{|key,val|
+ head = key[0]
+ rest = key[1..-1]
+ if h2[head]
+ h2[head][rest] = val
+ else
+ h2[head] = {rest => val}
+ end
+ }
+ if h2.size < 3
+ h2.keys.sort.each{|k|
+ if (0x80 < k)
+ file.printf("#{bl}if (str[#{level}] < 0x%02X) { return #{$lv}; }\n", k)
+ end
+ h = h2[k]
+ if h.keys.join =~ /^\x80*$/
+ $lv, = h.values
+ else
+ file.printf("#{bl}if (str[#{level}] == 0x%02X) {\n", k)
+ gen_bc(file, h, level + 1)
+ file.puts bl + '}'
+ end
+ }
+ file.puts bl + "return #{$lv};"
+ else
+ file.puts bl + "switch (str[#{level}]) {"
+ lk = 0x80
+ br = true
+ h2.keys.sort.each{|k|
+ if (lk < k)
+ for j in lk..k-1
+ file.printf("#{bl}case 0x%02X :\n", j)
+ end
+ br = false
+ end
+ unless br
+ file.puts bl + " return #{$lv};"
+ file.puts bl + ' break;'
+ end
+ h = h2[k]
+ file.printf("#{bl}case 0x%02X :\n", k)
+ if h.keys.join =~ /^\x80*$/
+ $lv, = h.values
+ br = false
+ else
+ gen_bc(file, h, level + 1)
+ file.puts bl + ' break;'
+ br = true
+ end
+ lk = k + 1
+ }
+ file.puts bl + 'default :'
+ file.puts bl + " return #{$lv};"
+ file.puts bl + ' break;'
+ file.puts bl + '}'
+ end
+end
+
+def generate_blockcode_char_type(file, option)
+ bc = {}
+ open("|./icudump --#{option}").each{|l|
+ src,_,code = l.chomp.split("\t")
+ str = src.split(':').collect{|c| format("%c", c.hex)}.join
+ bc[str] = code
+ }
+ $lv = 0
+ gen_bc(file, bc, 0)
+end
+
+def ccpush(hash, src, dst)
+ head = src.shift
+ hash[head] = {} unless hash[head]
+ if head
+ ccpush(hash[head], src, dst)
+ else
+ hash[head] = dst
+ end
+end
+
+def subst(hash, str)
+ cand = nil
+ src = str.split(//)
+ for i in 0..src.size-1
+ h = hash
+ for j in i..src.size-1
+ head = src[j]
+ h = h[head]
+ break unless h
+ if h[nil]
+ cand = src[0,i].to_s + h[nil] + src[j + 1..-1].to_s
+ end
+ end
+ return cand if cand
+ end
+ return str
+end
+
+def map_entry(map1, cc, src, dst)
+ dst.downcase! unless $case_sensitive
+ loop {
+ dst2 = subst(cc, dst)
+ break if dst2 == dst
+ dst = dst2
+ }
+ unless $keep_space
+ dst = $1 if dst =~ /^ +([^ ].*)$/
+ end
+ map1[src] = dst if src != dst
+end
+
+def create_map1()
+ cc = {}
+ open('|./icudump --cc').each{|l|
+ _,src,dst = l.chomp.split("\t")
+ if cc[src]
+ STDERR.puts "caution: ambiguous mapping #{src}|#{cc[src]}|#{dst}" if cc[src] != dst
+ end
+ ccpush(cc, src.split(//), dst)
+ }
+ map1 = {}
+ open('|./icudump --nfkd').each{|l|
+ n,src,dst = l.chomp.split("\t")
+ map_entry(map1, cc, src, dst)
+ }
+ if File.readable?(CUSTOM_RULE_PATH)
+ open(CUSTOM_RULE_PATH).each{|l|
+ src,dst = l.chomp.split("\t")
+ map_entry(map1, cc, src, dst)
+ }
+ end
+ unless $case_sensitive
+ for c in 'A'..'Z'
+ map1[c] = c.downcase
+ end
+ end
+ return map1
+end
+
+def create_map2(map1)
+ cc = {}
+ open('|./icudump --cc').each{|l|
+ _,src,dst = l.chomp.split("\t")
+ src = src.split(//).collect{|c| map1[c] || c}.join
+ dst = map1[dst] || dst
+ if cc[src] && cc[src] != dst
+ STDERR.puts("caution: inconsitent mapping '#{src}' => '#{cc[src]}'|'#{dst}'")
+ end
+ cc[src] = dst if src != dst
+ }
+ loop {
+ noccur = 0
+ cc2 = {}
+ cc.each {|src,dst|
+ src2 = src
+ chars = src.split(//)
+ l = chars.size - 1
+ for i in 0..l
+ for j in i..l
+ next if i == 0 && j == l
+ str = chars[i..j].join
+ if map1[str]
+ STDERR.printf("caution: recursive mapping '%s'=>'%s'\n", str, map1[str])
+ end
+ if cc[str]
+ src2 = (i > 0 ? chars[0..i-1].join : '') + cc[str] + (j < l ? chars[j+1..l].join : '')
+ noccur += 1
+ end
+ end
+ end
+ cc2[src2] = dst if src2 != dst
+ }
+ cc = cc2
+ STDERR.puts("substituted #{noccur} patterns.")
+ break if noccur == 0
+ STDERR.puts('try again..')
+ }
+ return cc
+end
+
+def generate_map1(file, hash, level)
+ bl = ' ' * ((level + 0) * 2)
+ if hash['']
+ dst = ''
+ hash[''].each_byte{|b| dst << format('\x%02X', b)}
+ file.puts "#{bl}return \"#{dst}\";"
+ hash.delete('')
+ end
+ return if hash.empty?
+ h2 = {}
+ hash.each{|key,val|
+ head = key[0]
+ rest = key[1..-1]
+ if h2[head]
+ h2[head][rest] = val
+ else
+ h2[head] = {rest => val}
+ end
+ }
+ if h2.size == 1
+ h2.each{|key,val|
+ file.printf("#{bl}if (str[#{level}] == 0x%02X) {\n", key)
+ generate_map1(file, val, level + 1)
+ file.puts bl + '}'
+ }
+ else
+ file.puts "#{bl}switch (str[#{level}]) {"
+ h2.keys.sort.each{|k|
+ file.printf("#{bl}case 0x%02X :\n", k)
+ generate_map1(file, h2[k], level + 1)
+ file.puts("#{bl} break;")
+ }
+ file.puts bl + '}'
+ end
+end
+
+def gen_map2_sub2(file, hash, level, indent)
+ bl = ' ' * ((level + indent + 0) * 2)
+ if hash['']
+ file.print "#{bl}return \""
+ hash[''].each_byte{|b| file.printf('\x%02X', b)}
+ file.puts "\";"
+ hash.delete('')
+ end
+ return if hash.empty?
+
+ h2 = {}
+ hash.each{|key,val|
+ head = key[0]
+ rest = key[1..-1]
+ if h2[head]
+ h2[head][rest] = val
+ else
+ h2[head] = {rest => val}
+ end
+ }
+
+ if h2.size == 1
+ h2.each{|key,val|
+ file.printf("#{bl}if (prefix[#{level}] == 0x%02X) {\n", key)
+ gen_map2_sub2(file, val, level + 1, indent)
+ file.puts bl + '}'
+ }
+ else
+ file.puts "#{bl}switch (prefix[#{level}]) {"
+ h2.keys.sort.each{|k|
+ file.printf("#{bl}case 0x%02X :\n", k)
+ gen_map2_sub2(file, h2[k], level + 1, indent)
+ file.puts("#{bl} break;")
+ }
+ file.puts bl + '}'
+ end
+end
+
+def gen_map2_sub(file, hash, level)
+ bl = ' ' * ((level + 0) * 2)
+ if hash['']
+ gen_map2_sub2(file, hash[''], 0, level)
+ hash.delete('')
+ end
+ return if hash.empty?
+ h2 = {}
+ hash.each{|key,val|
+ head = key[0]
+ rest = key[1..-1]
+ if h2[head]
+ h2[head][rest] = val
+ else
+ h2[head] = {rest => val}
+ end
+ }
+ if h2.size == 1
+ h2.each{|key,val|
+ file.printf("#{bl}if (suffix[#{level}] == 0x%02X) {\n", key)
+ gen_map2_sub(file, val, level + 1)
+ file.puts bl + '}'
+ }
+ else
+ file.puts "#{bl}switch (suffix[#{level}]) {"
+ h2.keys.sort.each{|k|
+ file.printf("#{bl}case 0x%02X :\n", k)
+ gen_map2_sub(file, h2[k], level + 1)
+ file.puts("#{bl} break;")
+ }
+ file.puts bl + '}'
+ end
+end
+
+def generate_map2(file, map2)
+ suffix = {}
+ map2.each{|src,dst|
+ chars = src.split(//)
+ if chars.size != 2
+ STDERR.puts "caution: more than two chars in pattern #{chars.join('|')}"
+ end
+ s = chars.pop
+ if suffix[s]
+ suffix[s][chars.join] = dst
+ else
+ suffix[s] = {chars.join=>dst}
+ end
+ }
+ gen_map2_sub(file, suffix, 0)
+end
+
+template = <<END
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+don't edit this file by hand. it generated automatically by nfkc.rb
+*/
+
+#include "nfkc.h"
+
+#ifdef GRN_WITH_NFKC
+
+unsigned char
+grn_nfkc_char_type(const unsigned char *str)
+{
+% return -1;
+}
+
+const char *
+grn_nfkc_map1(const unsigned char *str)
+{
+% return 0;
+}
+
+const char *
+grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix)
+{
+% return 0;
+}
+
+#endif /* GRN_WITH_NFKC */
+
+END
+
+######## main #######
+
+ARGV.each{|arg|
+ case arg
+ when /-*c/i
+ $case_sensitive = true
+ when /-*s/i
+ $keep_space = true
+ end
+}
+
+STDERR.puts('compiling icudump')
+system('cc -Wall -O3 -o icudump icudump.c -licui18n')
+
+STDERR.puts('creating map1..')
+map1 = create_map1()
+
+STDERR.puts('creating map2..')
+map2 = create_map2(map1)
+
+outf = open('nfkc.c', 'w')
+
+tmps = template.split(/%/)
+
+#STDERR.puts('generating block code..')
+#outf.print(tmps.shift)
+#generate_blockcode_char_type(outf, 'bc')
+
+STDERR.puts('generating char type code..')
+outf.print(tmps.shift)
+generate_blockcode_char_type(outf, 'gc')
+
+STDERR.puts('generating map1 code..')
+outf.print(tmps.shift)
+generate_map1(outf, map1, 0)
+
+STDERR.puts('generating map2 code..')
+outf.print(tmps.shift)
+generate_map2(outf, map2)
+
+outf.print(tmps.shift)
+outf.close
+STDERR.puts('done.')
diff --git a/storage/mroonga/vendor/groonga/lib/normalizer.c b/storage/mroonga/vendor/groonga/lib/normalizer.c
new file mode 100644
index 00000000000..04719bdd463
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/normalizer.c
@@ -0,0 +1,1195 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include "normalizer_in.h"
+#include "string_in.h"
+#include <groonga/normalizer.h>
+#include <groonga/tokenizer.h>
+
+grn_rc
+grn_normalizer_register(grn_ctx *ctx,
+ const char *name_ptr,
+ int name_length,
+ grn_proc_func *init,
+ grn_proc_func *next,
+ grn_proc_func *fin)
+{
+ grn_expr_var vars[] = {
+ { NULL, 0 }
+ };
+ GRN_PTR_INIT(&vars[0].value, 0, GRN_ID_NIL);
+
+ if (name_length < 0) {
+ name_length = strlen(name_ptr);
+ }
+
+ {
+ grn_obj * const normalizer = grn_proc_create(ctx,
+ name_ptr, name_length,
+ GRN_PROC_NORMALIZER,
+ init, next, fin,
+ sizeof(*vars) / sizeof(vars),
+ vars);
+ if (!normalizer) {
+ GRN_PLUGIN_ERROR(ctx, GRN_NORMALIZER_ERROR,
+ "[normalizer] failed to register normalizer: <%.*s>",
+ name_length, name_ptr);
+ return ctx->rc;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_normalizer_init(void)
+{
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_normalizer_fin(void)
+{
+ return GRN_SUCCESS;
+}
+
+static unsigned char symbol[] = {
+ ',', '.', 0, ':', ';', '?', '!', 0, 0, 0, '`', 0, '^', '~', '_', 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, '-', '-', '/', '\\', 0, 0, '|', 0, 0, 0, '\'', 0,
+ '"', '(', ')', 0, 0, '[', ']', '{', '}', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ '+', '-', 0, 0, 0, '=', 0, '<', '>', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ '$', 0, 0, '%', '#', '&', '*', '@', 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+inline static grn_obj *
+eucjp_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ static uint16_t hankana[] = {
+ 0xa1a1, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1, 0xa5a3,
+ 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3, 0xa1bc, 0xa5a2,
+ 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, 0xa5af, 0xa5b1, 0xa5b3,
+ 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6,
+ 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5,
+ 0xa5d8, 0xa5db, 0xa5de, 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6,
+ 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab,
+ 0xa1eb
+ };
+ static unsigned char dakuten[] = {
+ 0xf4, 0, 0, 0, 0, 0xac, 0, 0xae, 0, 0xb0, 0, 0xb2, 0, 0xb4, 0, 0xb6, 0,
+ 0xb8, 0, 0xba, 0, 0xbc, 0, 0xbe, 0, 0xc0, 0, 0xc2, 0, 0, 0xc5, 0, 0xc7,
+ 0, 0xc9, 0, 0, 0, 0, 0, 0, 0xd0, 0, 0, 0xd3, 0, 0, 0xd6, 0, 0, 0xd9, 0,
+ 0, 0xdc
+ };
+ static unsigned char handaku[] = {
+ 0xd1, 0, 0, 0xd4, 0, 0, 0xd7, 0, 0, 0xda, 0, 0, 0xdd
+ };
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_, b;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->original_length_in_bytes, length = 0;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ if (!(nstr->normalized = GRN_MALLOC(size * 2 + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][eucjp] failed to allocate normalized text space");
+ return NULL;
+ }
+ d0 = (unsigned char *) nstr->normalized;
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][eucjp] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->normalized);
+ nstr->checks = NULL;
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][eucjp] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *) nstr->original, d = d_ = d0; s < e; s++) {
+ if ((*s & 0x80)) {
+ if (((s + 1) < e) && (*(s + 1) & 0x80)) {
+ unsigned char c1 = *s++, c2 = *s, c3 = 0;
+ switch (c1 >> 4) {
+ case 0x08 :
+ if (c1 == 0x8e && 0xa0 <= c2 && c2 <= 0xdf) {
+ uint16_t c = hankana[c2 - 0xa0];
+ switch (c) {
+ case 0xa1ab :
+ if (d > d0 + 1 && d[-2] == 0xa5
+ && 0xa6 <= d[-1] && d[-1] <= 0xdb && (b = dakuten[d[-1] - 0xa6])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1] += 2; s_ += 2; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ case 0xa1eb :
+ if (d > d0 + 1 && d[-2] == 0xa5
+ && 0xcf <= d[-1] && d[-1] <= 0xdb && (b = handaku[d[-1] - 0xcf])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1] += 2; s_ += 2; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ default :
+ *d++ = c >> 8; *d = c & 0xff;
+ break;
+ }
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 0x09 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ case 0x0a :
+ switch (c1 & 0x0f) {
+ case 1 :
+ switch (c2) {
+ case 0xbc :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 0xb9 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ case 0xa1 :
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ break;
+ default :
+ if (c2 >= 0xa4 && (c3 = symbol[c2 - 0xa4])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ }
+ break;
+ case 2 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ case 3 :
+ c3 = c2 - 0x80;
+ if ('a' <= c3 && c3 <= 'z') {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c3;
+ } else if ('A' <= c3 && c3 <= 'Z') {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c3 + 0x20;
+ } else if ('0' <= c3 && c3 <= '9') {
+ ctype = GRN_CHAR_DIGIT;
+ *d = c3;
+ } else {
+ ctype = GRN_CHAR_OTHERS;
+ *d++ = c1; *d = c2;
+ }
+ break;
+ case 4 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_HIRAGANA;
+ break;
+ case 5 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 6 :
+ case 7 :
+ case 8 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ }
+ } else {
+ /* skip invalid character */
+ continue;
+ }
+ } else {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+
+inline static grn_obj *
+sjis_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ static uint16_t hankana[] = {
+ 0x8140, 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340, 0x8342,
+ 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362, 0x815b, 0x8341,
+ 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c, 0x834e, 0x8350, 0x8352,
+ 0x8354, 0x8356, 0x8358, 0x835a, 0x835c, 0x835e, 0x8360, 0x8363, 0x8365,
+ 0x8367, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, 0x8371, 0x8374,
+ 0x8377, 0x837a, 0x837d, 0x837e, 0x8380, 0x8381, 0x8382, 0x8384, 0x8386,
+ 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a,
+ 0x814b
+ };
+ static unsigned char dakuten[] = {
+ 0x94, 0, 0, 0, 0, 0x4b, 0, 0x4d, 0, 0x4f, 0, 0x51, 0, 0x53, 0, 0x55, 0,
+ 0x57, 0, 0x59, 0, 0x5b, 0, 0x5d, 0, 0x5f, 0, 0x61, 0, 0, 0x64, 0, 0x66,
+ 0, 0x68, 0, 0, 0, 0, 0, 0, 0x6f, 0, 0, 0x72, 0, 0, 0x75, 0, 0, 0x78, 0,
+ 0, 0x7b
+ };
+ static unsigned char handaku[] = {
+ 0x70, 0, 0, 0x73, 0, 0, 0x76, 0, 0, 0x79, 0, 0, 0x7c
+ };
+ int16_t *ch;
+ const unsigned char *s, *s_;
+ unsigned char *d, *d0, *d_, b, *e;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->original_length_in_bytes, length = 0;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ if (!(nstr->normalized = GRN_MALLOC(size * 2 + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][sjis] failed to allocate normalized text space");
+ return NULL;
+ }
+ d0 = (unsigned char *) nstr->normalized;
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][sjis] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->normalized);
+ nstr->checks = NULL;
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][sjis] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *) nstr->original, d = d_ = d0; s < e; s++) {
+ if ((*s & 0x80)) {
+ if (0xa0 <= *s && *s <= 0xdf) {
+ uint16_t c = hankana[*s - 0xa0];
+ switch (c) {
+ case 0x814a :
+ if (d > d0 + 1 && d[-2] == 0x83
+ && 0x45 <= d[-1] && d[-1] <= 0x7a && (b = dakuten[d[-1] - 0x45])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1]++; s_++; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ case 0x814b :
+ if (d > d0 + 1 && d[-2] == 0x83
+ && 0x6e <= d[-1] && d[-1] <= 0x7a && (b = handaku[d[-1] - 0x6e])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1]++; s_++; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ default :
+ *d++ = c >> 8; *d = c & 0xff;
+ break;
+ }
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ if ((s + 1) < e && 0x40 <= *(s + 1) && *(s + 1) <= 0xfc) {
+ unsigned char c1 = *s++, c2 = *s, c3 = 0;
+ if (0x81 <= c1 && c1 <= 0x87) {
+ switch (c1 & 0x0f) {
+ case 1 :
+ switch (c2) {
+ case 0x5b :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 0x58 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ case 0x40 :
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ break;
+ default :
+ if (0x43 <= c2 && c2 <= 0x7e && (c3 = symbol[c2 - 0x43])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else if (0x7f <= c2 && c2 <= 0x97 && (c3 = symbol[c2 - 0x44])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ }
+ break;
+ case 2 :
+ c3 = c2 - 0x1f;
+ if (0x4f <= c2 && c2 <= 0x58) {
+ ctype = GRN_CHAR_DIGIT;
+ *d = c2 - 0x1f;
+ } else if (0x60 <= c2 && c2 <= 0x79) {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c2 + 0x01;
+ } else if (0x81 <= c2 && c2 <= 0x9a) {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c2 - 0x20;
+ } else if (0x9f <= c2 && c2 <= 0xf1) {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_HIRAGANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 3 :
+ if (0x40 <= c2 && c2 <= 0x96) {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 4 :
+ case 7 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ }
+ } else {
+ /* skip invalid character */
+ continue;
+ }
+ }
+ } else {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+
+#ifdef GRN_WITH_NFKC
+const char *grn_nfkc_map1(const unsigned char *str);
+const char *grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix);
+
+static inline int
+grn_str_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end)
+{
+ /* MEMO: This function allows non-null-terminated string as str. */
+ /* But requires the end of string. */
+ const unsigned char *p = str;
+ if (end <= p || !*p) { return 0; }
+ if (*p & 0x80) {
+ int b, w;
+ int size;
+ int i;
+ for (b = 0x40, w = 0; b && (*p & b); b >>= 1, w++);
+ if (!w) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "invalid utf8 string: the first bit is 0x80: <%.*s>: <%.*s>",
+ (int)(end - p), p,
+ (int)(end - str), str);
+ return 0;
+ }
+ size = w + 1;
+ for (i = 1; i < size; i++) {
+ if (++p >= end) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "invalid utf8 string: too short: "
+ "%d byte is required but %d byte is given: <%.*s>",
+ size, i,
+ (int)(end - str), str);
+ return 0;
+ }
+ if (!*p) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "invalid utf8 string: NULL character is found: <%.*s>",
+ (int)(end - str), str);
+ return 0;
+ }
+ if ((*p & 0xc0) != 0x80) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "invalid utf8 string: 0x80 is not allowed: <%.*s>: <%.*s>",
+ (int)(end - p), p,
+ (int)(end - str), str);
+ return 0;
+ }
+ }
+ return size;
+ } else {
+ return 1;
+ }
+ return 0;
+}
+
+inline static grn_obj *
+utf8_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *s__ = NULL, *p, *p2, *pe, *e;
+ unsigned char *d, *d_, *de;
+ uint_least8_t *cp;
+ size_t length = 0, ls, lp, size = nstr->original_length_in_bytes, ds = size * 3;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ grn_bool remove_tokenized_delimiter_p =
+ nstr->flags & GRN_STRING_REMOVE_TOKENIZED_DELIMITER;
+ if (!(nstr->normalized = GRN_MALLOC(ds + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to allocate normalized text space");
+ return NULL;
+ }
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(ds * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(ds + 1))) {
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->normalized); nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = nstr->ctypes;
+ d = (unsigned char *)nstr->normalized;
+ de = d + ds;
+ d_ = NULL;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *)nstr->original; ; s += ls) {
+ if (!(ls = grn_str_charlen_utf8(ctx, s, e))) {
+ break;
+ }
+ if (remove_tokenized_delimiter_p &&
+ grn_tokenizer_is_tokenized_delimiter(ctx, (const char *)s, ls,
+ GRN_ENC_UTF8)) {
+ continue;
+ }
+ if ((p = (unsigned char *)grn_nfkc_map1(s))) {
+ pe = p + strlen((char *)p);
+ } else {
+ p = s;
+ pe = p + ls;
+ }
+ if (d_ && (p2 = (unsigned char *)grn_nfkc_map2(d_, p))) {
+ p = p2;
+ pe = p + strlen((char *)p);
+ if (cp) { cp--; }
+ if (ch) {
+ ch -= (d - d_);
+ if (ch[0] >= 0) {
+ s_ = s__;
+ }
+ }
+ d = d_;
+ length--;
+ }
+ for (; ; p += lp) {
+ if (!(lp = grn_str_charlen_utf8(ctx, p, pe))) {
+ break;
+ }
+ if ((*p == ' ' && removeblankp) || *p < 0x20 /* skip unprintable ascii */ ) {
+ if (cp > nstr->ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ } else {
+ if (de <= d + lp) {
+ unsigned char *normalized;
+ ds += (ds >> 1) + lp;
+ if (!(normalized = GRN_REALLOC(nstr->normalized, ds + 1))) {
+ if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->normalized); nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to expand normalized text space");
+ return NULL;
+ }
+ de = normalized + ds;
+ d = normalized + (d - (unsigned char *)nstr->normalized);
+ nstr->normalized = (char *)normalized;
+ if (ch) {
+ int16_t *checks;
+ if (!(checks = GRN_REALLOC(nstr->checks, ds * sizeof(int16_t) + 1))) {
+ if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+ GRN_FREE(nstr->checks); nstr->checks = NULL;
+ GRN_FREE(nstr->normalized); nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to expand checks space");
+ return NULL;
+ }
+ ch = checks + (ch - nstr->checks);
+ nstr->checks = checks;
+ }
+ if (cp) {
+ uint_least8_t *ctypes;
+ if (!(ctypes = GRN_REALLOC(nstr->ctypes, ds + 1))) {
+ GRN_FREE(nstr->ctypes); nstr->ctypes = NULL;
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->normalized); nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][utf8] failed to expand character types space");
+ return NULL;
+ }
+ cp = ctypes + (cp - nstr->ctypes);
+ nstr->ctypes = ctypes;
+ }
+ }
+ memcpy(d, p, lp);
+ d_ = d;
+ d += lp;
+ length++;
+ if (cp) { *cp++ = grn_nfkc_char_type(p); }
+ if (ch) {
+ size_t i;
+ if (s_ == s + ls) {
+ *ch++ = -1;
+ } else {
+ *ch++ = (int16_t)(s + ls - s_);
+ s__ = s_;
+ s_ = s + ls;
+ }
+ for (i = lp; i > 1; i--) { *ch++ = 0; }
+ }
+ }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+#endif /* GRN_WITH_NFKC */
+
+inline static grn_obj *
+ascii_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->original_length_in_bytes, length = 0;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ if (!(nstr->normalized = GRN_MALLOC(size + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][ascii] failed to allocate normalized text space");
+ return NULL;
+ }
+ d0 = (unsigned char *) nstr->normalized;
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][ascii] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->normalized);
+ nstr->checks = NULL;
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][ascii] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *) nstr->original, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+
+/* use cp1252 as latin1 */
+inline static grn_obj *
+latin1_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->original_length_in_bytes, length = 0;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ if (!(nstr->normalized = GRN_MALLOC(size + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][latin1] failed to allocate normalized text space");
+ return NULL;
+ }
+ d0 = (unsigned char *) nstr->normalized;
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][latin1] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->normalized);
+ nstr->checks = NULL;
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[normalizer][latin1] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *) nstr->original, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ case 8 :
+ if (c == 0x8a || c == 0x8c || c == 0x8e) {
+ *d = c + 0x10;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 9 :
+ if (c == 0x9a || c == 0x9c || c == 0x9e || c == 0x9f) {
+ *d = (c == 0x9f) ? c + 0x60 : c;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 0x0c :
+ *d = c + 0x20;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0d :
+ *d = (c == 0xd7 || c == 0xdf) ? c : c + 0x20;
+ ctype = (c == 0xd7) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 0x0e :
+ *d = c;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0f :
+ *d = c;
+ ctype = (c == 0xf7) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+
+inline static grn_obj *
+koi8r_normalize(grn_ctx *ctx, grn_string *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->original_length_in_bytes, length = 0;
+ int removeblankp = nstr->flags & GRN_STRING_REMOVE_BLANK;
+ if (!(nstr->normalized = GRN_MALLOC(size + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][koi8r] failed to allocate normalized text space");
+ return NULL;
+ }
+ d0 = (unsigned char *) nstr->normalized;
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->normalized);
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][koi8r] failed to allocate checks space");
+ return NULL;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STRING_WITH_TYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->normalized);
+ nstr->checks = NULL;
+ nstr->normalized = NULL;
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[string][koi8r] failed to allocate character types space");
+ return NULL;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->original + size;
+ for (s = s_ = (unsigned char *) nstr->original, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_CHAR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_CHAR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ case 0x0a :
+ *d = c;
+ ctype = (c == 0xa3) ? GRN_CHAR_ALPHA : GRN_CHAR_OTHERS;
+ break;
+ case 0x0b :
+ if (c == 0xb3) {
+ *d = c - 0x10;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 0x0c :
+ case 0x0d :
+ *d = c;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0e :
+ case 0x0f :
+ *d = c - 0x20;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->n_characters = length;
+ nstr->normalized_length_in_bytes = (size_t)(d - (unsigned char *)nstr->normalized);
+ return NULL;
+}
+
+static grn_obj *
+auto_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_string *string = (grn_string *)(args[0]);
+ switch (string->encoding) {
+ case GRN_ENC_EUC_JP :
+ eucjp_normalize(ctx, string);
+ break;
+ case GRN_ENC_UTF8 :
+#ifdef GRN_WITH_NFKC
+ utf8_normalize(ctx, string);
+#else /* GRN_WITH_NFKC */
+ ascii_normalize(ctx, string);
+#endif /* GRN_WITH_NFKC */
+ break;
+ case GRN_ENC_SJIS :
+ sjis_normalize(ctx, string);
+ break;
+ case GRN_ENC_LATIN1 :
+ latin1_normalize(ctx, string);
+ break;
+ case GRN_ENC_KOI8R :
+ koi8r_normalize(ctx, string);
+ break;
+ default :
+ ascii_normalize(ctx, string);
+ break;
+ }
+ return NULL;
+}
+
+#ifdef GRN_WITH_NFKC
+static grn_obj *
+nfkc51_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_string *string = (grn_string *)(args[0]);
+ utf8_normalize(ctx, string);
+ return NULL;
+}
+#endif /* GRN_WITH_NFKC */
+
+grn_rc
+grn_normalizer_normalize(grn_ctx *ctx, grn_obj *normalizer, grn_obj *string)
+{
+ grn_rc rc;
+ int nargs = 0;
+
+ grn_ctx_push(ctx, string);
+ nargs++;
+ rc = grn_proc_call(ctx, normalizer, nargs, NULL);
+ grn_ctx_pop(ctx);
+
+ return rc;
+}
+
+grn_rc
+grn_db_init_builtin_normalizers(grn_ctx *ctx)
+{
+ const char *normalizer_nfkc51_name = "NormalizerNFKC51";
+
+ grn_normalizer_register(ctx, GRN_NORMALIZER_AUTO_NAME, -1,
+ NULL, auto_next, NULL);
+
+#ifdef GRN_WITH_NFKC
+ grn_normalizer_register(ctx, normalizer_nfkc51_name, -1,
+ NULL, nfkc51_next, NULL);
+#else /* GRN_WITH_NFKC */
+ grn_normalizer_register(ctx, normalizer_nfkc51_name, -1,
+ NULL, NULL, NULL);
+#endif /* GRN_WITH_NFKC */
+/*
+ grn_normalizer_register(ctx, "NormalizerUCA", -1,
+ NULL, uca_next, NULL);
+*/
+
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/normalizer_in.h b/storage/mroonga/vendor/groonga/lib/normalizer_in.h
new file mode 100644
index 00000000000..201c789f626
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/normalizer_in.h
@@ -0,0 +1,52 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_NORMALIZER_IN_H
+#define GRN_NORMALIZER_IN_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_DB_H
+#include "db.h"
+#endif /* GRN_DB_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GRN_NORMALIZER_AUTO_NAME "NormalizerAuto"
+
+grn_rc grn_normalizer_init(void);
+grn_rc grn_normalizer_fin(void);
+
+grn_rc grn_normalizer_normalize(grn_ctx *ctx,
+ grn_obj *normalizer,
+ grn_obj *string);
+
+grn_rc grn_db_init_builtin_normalizers(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_NORMALIZER_IN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/output.c b/storage/mroonga/vendor/groonga/lib/output.c
new file mode 100644
index 00000000000..9b745c89a01
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/output.c
@@ -0,0 +1,1927 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#include <string.h>
+#include "str.h"
+#include "db.h"
+#include "util.h"
+#include "output.h"
+
+#define LEVELS (&ctx->impl->levels)
+#define DEPTH (GRN_BULK_VSIZE(LEVELS)>>2)
+#define CURR_LEVEL (DEPTH ? (GRN_UINT32_VALUE_AT(LEVELS, (DEPTH - 1))) : 0)
+#define INCR_DEPTH(i) GRN_UINT32_PUT(ctx, LEVELS, i)
+#define DECR_DEPTH (DEPTH ? grn_bulk_truncate(ctx, LEVELS, GRN_BULK_VSIZE(LEVELS) - sizeof(uint32_t)) : 0)
+#define INCR_LENGTH (DEPTH ? (GRN_UINT32_VALUE_AT(LEVELS, (DEPTH - 1)) += 2) : 0)
+
+static void
+put_delimiter(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
+{
+ uint32_t level = CURR_LEVEL;
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ if (level < 2) { return; }
+ GRN_TEXT_PUTC(ctx, outbuf, ((level & 3) == 3) ? ':' : ',');
+ // if (DEPTH == 1 && ((level & 3) != 3)) { GRN_TEXT_PUTC(ctx, outbuf, '\n'); }
+ break;
+ case GRN_CONTENT_XML:
+ if (!DEPTH) { return; }
+ GRN_TEXT_PUTC(ctx, outbuf, '\n');
+ break;
+ case GRN_CONTENT_TSV:
+ if (level < 2) { return; }
+ if (DEPTH <= 2) {
+ GRN_TEXT_PUTC(ctx, outbuf, ((level & 3) == 3) ? '\t' : '\n');
+ } else {
+ GRN_TEXT_PUTC(ctx, outbuf, '\t');
+ }
+ case GRN_CONTENT_MSGPACK :
+ // do nothing
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+}
+
+void
+grn_output_array_open(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *name, int nelements)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTC(ctx, outbuf, '[');
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTC(ctx, outbuf, '<');
+ GRN_TEXT_PUTS(ctx, outbuf, name);
+ GRN_TEXT_PUTC(ctx, outbuf, '>');
+ grn_vector_add_element(ctx, &ctx->impl->names, name, strlen(name), 0, GRN_DB_SHORT_TEXT);
+ break;
+ case GRN_CONTENT_TSV:
+ if (DEPTH > 2) { GRN_TEXT_PUTS(ctx, outbuf, "[\t"); }
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ if (nelements < 0) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG,
+ "grn_output_array_open nelements (%d) for <%s>",
+ nelements,
+ name);
+ }
+ msgpack_pack_array(&ctx->impl->msgpacker, nelements);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_DEPTH(0);
+}
+
+void
+grn_output_array_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
+{
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTC(ctx, outbuf, ']');
+ break;
+ case GRN_CONTENT_TSV:
+ if (DEPTH > 3) {
+ if (CURR_LEVEL >= 2) { GRN_TEXT_PUTC(ctx, outbuf, '\t'); }
+ GRN_TEXT_PUTC(ctx, outbuf, ']');
+ }
+ break;
+ case GRN_CONTENT_XML:
+ {
+ const char *name;
+ unsigned int name_len = grn_vector_pop_element(ctx, &ctx->impl->names, &name, NULL, NULL);
+ GRN_TEXT_PUTS(ctx, outbuf, "</");
+ GRN_TEXT_PUT(ctx, outbuf, name, name_len);
+ GRN_TEXT_PUTC(ctx, outbuf, '>');
+ }
+ break;
+ case GRN_CONTENT_MSGPACK :
+ // do nothing
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ DECR_DEPTH;
+ INCR_LENGTH;
+}
+
+void
+grn_output_map_open(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *name, int nelements)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTS(ctx, outbuf, "{");
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTC(ctx, outbuf, '<');
+ GRN_TEXT_PUTS(ctx, outbuf, name);
+ GRN_TEXT_PUTC(ctx, outbuf, '>');
+ grn_vector_add_element(ctx, &ctx->impl->names, name, strlen(name), 0, GRN_DB_SHORT_TEXT);
+ break;
+ case GRN_CONTENT_TSV:
+ if (DEPTH > 2) { GRN_TEXT_PUTS(ctx, outbuf, "{\t"); }
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ if (nelements < 0) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG,
+ "grn_output_map_open nelements (%d) for <%s>",
+ nelements,
+ name);
+ }
+ msgpack_pack_map(&ctx->impl->msgpacker, nelements);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_DEPTH(1);
+}
+
+void
+grn_output_map_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
+{
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTS(ctx, outbuf, "}");
+ break;
+ case GRN_CONTENT_TSV:
+ if (DEPTH > 3) {
+ if (CURR_LEVEL >= 2) { GRN_TEXT_PUTC(ctx, outbuf, '\t'); }
+ GRN_TEXT_PUTC(ctx, outbuf, '}');
+ }
+ break;
+ case GRN_CONTENT_XML:
+ {
+ const char *name;
+ unsigned int name_len = grn_vector_pop_element(ctx, &ctx->impl->names, &name, NULL, NULL);
+ GRN_TEXT_PUTS(ctx, outbuf, "</");
+ GRN_TEXT_PUT(ctx, outbuf, name, name_len);
+ GRN_TEXT_PUTC(ctx, outbuf, '>');
+ }
+ break;
+ case GRN_CONTENT_MSGPACK :
+ // do nothing
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ DECR_DEPTH;
+ INCR_LENGTH;
+}
+
+void
+grn_output_int32(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, int value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_itoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_itoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<INT>");
+ grn_text_itoa(ctx, outbuf, value);
+ GRN_TEXT_PUTS(ctx, outbuf, "</INT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_int32(&ctx->impl->msgpacker, value);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_int64(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, int64_t value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_lltoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_lltoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<INT>");
+ grn_text_lltoa(ctx, outbuf, value);
+ GRN_TEXT_PUTS(ctx, outbuf, "</INT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_int64(&ctx->impl->msgpacker, value);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_uint64(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, int64_t value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_ulltoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_ulltoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<INT>");
+ grn_text_ulltoa(ctx, outbuf, value);
+ GRN_TEXT_PUTS(ctx, outbuf, "</INT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_uint64(&ctx->impl->msgpacker, value);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_float(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, double value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_ftoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_ftoa(ctx, outbuf, value);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<FLOAT>");
+ grn_text_ftoa(ctx, outbuf, value);
+ GRN_TEXT_PUTS(ctx, outbuf, "</FLOAT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_double(&ctx->impl->msgpacker, value);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_str(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *value, size_t value_len)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_esc(ctx, outbuf, value, value_len);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_esc(ctx, outbuf, value, value_len);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<TEXT>");
+ grn_text_escape_xml(ctx, outbuf, value, value_len);
+ GRN_TEXT_PUTS(ctx, outbuf, "</TEXT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_raw(&ctx->impl->msgpacker, value_len);
+ msgpack_pack_raw_body(&ctx->impl->msgpacker, value, value_len);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_cstr(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *value)
+{
+ grn_output_str(ctx, outbuf, output_type, value, strlen(value));
+}
+
+void
+grn_output_bool(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, grn_bool value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTS(ctx, outbuf, value ? "true" : "false");
+ break;
+ case GRN_CONTENT_TSV:
+ GRN_TEXT_PUTS(ctx, outbuf, value ? "true" : "false");
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<BOOL>");
+ GRN_TEXT_PUTS(ctx, outbuf, value ? "true" : "false");
+ GRN_TEXT_PUTS(ctx, outbuf, "</BOOL>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ if (value) {
+ msgpack_pack_true(&ctx->impl->msgpacker);
+ } else {
+ msgpack_pack_false(&ctx->impl->msgpacker);
+ }
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+static inline void
+grn_output_null(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ GRN_TEXT_PUTS(ctx, outbuf, "null");
+ break;
+ case GRN_CONTENT_TSV:
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<NULL/>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_nil(&ctx->impl->msgpacker);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+static inline void
+grn_output_bulk_void(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *value, size_t value_len)
+{
+ if (value_len == sizeof(grn_id) && *(grn_id *)value == GRN_ID_NIL) {
+ grn_output_null(ctx, outbuf, output_type);
+ } else {
+ grn_output_str(ctx, outbuf, output_type, value, value_len);
+ }
+}
+
+void
+grn_output_time(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type, int64_t value)
+{
+ double dv = value;
+ dv /= 1000000.0;
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ grn_text_ftoa(ctx, outbuf, dv);
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_ftoa(ctx, outbuf, dv);
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<DATE>");
+ grn_text_ftoa(ctx, outbuf, dv);
+ GRN_TEXT_PUTS(ctx, outbuf, "</DATE>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ msgpack_pack_double(&ctx->impl->msgpacker, dv);
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+void
+grn_output_geo_point(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_geo_point *value)
+{
+ put_delimiter(ctx, outbuf, output_type);
+ switch (output_type) {
+ case GRN_CONTENT_JSON:
+ if (value) {
+ GRN_TEXT_PUTC(ctx, outbuf, '"');
+ grn_text_itoa(ctx, outbuf, value->latitude);
+ GRN_TEXT_PUTC(ctx, outbuf, 'x');
+ grn_text_itoa(ctx, outbuf, value->longitude);
+ GRN_TEXT_PUTC(ctx, outbuf, '"');
+ } else {
+ GRN_TEXT_PUTS(ctx, outbuf, "null");
+ }
+ break;
+ case GRN_CONTENT_TSV:
+ if (value) {
+ GRN_TEXT_PUTC(ctx, outbuf, '"');
+ grn_text_itoa(ctx, outbuf, value->latitude);
+ GRN_TEXT_PUTC(ctx, outbuf, 'x');
+ grn_text_itoa(ctx, outbuf, value->longitude);
+ GRN_TEXT_PUTC(ctx, outbuf, '"');
+ } else {
+ GRN_TEXT_PUTS(ctx, outbuf, "\"\"");
+ }
+ break;
+ case GRN_CONTENT_XML:
+ GRN_TEXT_PUTS(ctx, outbuf, "<GEO_POINT>");
+ if (value) {
+ grn_text_itoa(ctx, outbuf, value->latitude);
+ GRN_TEXT_PUTC(ctx, outbuf, 'x');
+ grn_text_itoa(ctx, outbuf, value->longitude);
+ }
+ GRN_TEXT_PUTS(ctx, outbuf, "</GEO_POINT>");
+ break;
+ case GRN_CONTENT_MSGPACK :
+#ifdef GRN_WITH_MESSAGE_PACK
+ if (value) {
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ grn_text_itoa(ctx, &buf, value->latitude);
+ GRN_TEXT_PUTC(ctx, &buf, 'x');
+ grn_text_itoa(ctx, &buf, value->longitude);
+ msgpack_pack_raw(&ctx->impl->msgpacker, GRN_TEXT_LEN(&buf));
+ msgpack_pack_raw_body(&ctx->impl->msgpacker,
+ GRN_TEXT_VALUE(&buf),
+ GRN_TEXT_LEN(&buf));
+ grn_obj_close(ctx, &buf);
+ } else {
+ msgpack_pack_nil(&ctx->impl->msgpacker);
+ }
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+ INCR_LENGTH;
+}
+
+static void
+grn_text_atoj(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *obj, grn_id id)
+{
+ uint32_t vs;
+ grn_obj buf;
+ if (obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a = (grn_accessor *)obj;
+ GRN_TEXT_INIT(&buf, 0);
+ for (;;) {
+ buf.header.domain = grn_obj_get_range(ctx, obj);
+ GRN_BULK_REWIND(&buf);
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ GRN_UINT32_PUT(ctx, &buf, id);
+ buf.header.domain = GRN_DB_UINT32;
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ grn_table_get_key2(ctx, a->obj, id, &buf);
+ buf.header.domain = DB_OBJ(a->obj)->header.domain;
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ buf.header.domain = DB_OBJ(a->obj)->range;
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, &buf, ri->score);
+ }
+ buf.header.domain = GRN_DB_INT32;
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, &buf, ri->n_subrecs);
+ }
+ buf.header.domain = GRN_DB_INT32;
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ if ((a->obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR) {
+ if (a->next) {
+ grn_id *idp;
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ idp = (grn_id *)GRN_BULK_HEAD(&buf);
+ vs = GRN_BULK_VSIZE(&buf) / sizeof(grn_id);
+ grn_output_array_open(ctx, outbuf, output_type, "VECTOR", vs);
+ for (; vs--; idp++) {
+ grn_text_atoj(ctx, outbuf, output_type, (grn_obj *)a->next, *idp);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ } else {
+ grn_text_atoj(ctx, outbuf, output_type, a->obj, id);
+ }
+ goto exit;
+ } else {
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ }
+ break;
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ if (a->next) {
+ a = a->next;
+ if (GRN_BULK_VSIZE(&buf) >= sizeof(grn_id)) {
+ id = *((grn_id *)GRN_BULK_HEAD(&buf));
+ } else {
+ id = GRN_ID_NIL;
+ }
+ } else {
+ break;
+ }
+ }
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+ } else {
+ grn_obj_format *format_argument = NULL;
+ grn_obj_format format;
+ GRN_OBJ_FORMAT_INIT(&format, 0, 0, 0, 0);
+ switch (obj->header.type) {
+ case GRN_COLUMN_FIX_SIZE :
+ GRN_VALUE_FIX_SIZE_INIT(&buf, 0, DB_OBJ(obj)->range);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ if ((obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR) {
+ grn_obj *range = grn_ctx_at(ctx, DB_OBJ(obj)->range);
+ if (GRN_OBJ_TABLEP(range) ||
+ (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) == 0) {
+ GRN_VALUE_FIX_SIZE_INIT(&buf, GRN_OBJ_VECTOR, DB_OBJ(obj)->range);
+ } else {
+ GRN_VALUE_VAR_SIZE_INIT(&buf, GRN_OBJ_VECTOR, DB_OBJ(obj)->range);
+ }
+ if (obj->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ format.flags |= GRN_OBJ_FORMAT_WITH_WEIGHT;
+ format_argument = &format;
+ }
+ } else {
+ GRN_VALUE_VAR_SIZE_INIT(&buf, 0, DB_OBJ(obj)->range);
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ GRN_UINT32_INIT(&buf, 0);
+ break;
+ default:
+ GRN_TEXT_INIT(&buf, 0);
+ break;
+ }
+ grn_obj_get_value(ctx, obj, id, &buf);
+ grn_output_obj(ctx, outbuf, output_type, &buf, format_argument);
+ }
+exit :
+ grn_obj_close(ctx, &buf);
+}
+
+static inline void
+grn_output_void(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *bulk, grn_obj_format *format)
+{
+ grn_output_null(ctx, outbuf, output_type);
+}
+
+static inline void
+grn_output_bulk(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *bulk, grn_obj_format *format)
+{
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ switch (bulk->header.domain) {
+ case GRN_DB_VOID :
+ grn_output_bulk_void(ctx, outbuf, output_type, GRN_BULK_HEAD(bulk), GRN_BULK_VSIZE(bulk));
+ break;
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ grn_output_str(ctx, outbuf, output_type, GRN_BULK_HEAD(bulk), GRN_BULK_VSIZE(bulk));
+ break;
+ case GRN_DB_BOOL :
+ grn_output_bool(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_UINT8_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_INT8 :
+ grn_output_int32(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_INT8_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_UINT8 :
+ grn_output_int32(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_UINT8_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_INT16 :
+ grn_output_int32(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_INT16_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_UINT16 :
+ grn_output_int32(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_UINT16_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_INT32 :
+ grn_output_int32(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_INT32_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_UINT32 :
+ grn_output_int64(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_UINT32_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_INT64 :
+ grn_output_int64(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_INT64_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_UINT64 :
+ grn_output_uint64(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_UINT64_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_FLOAT :
+ grn_output_float(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_FLOAT_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_TIME :
+ grn_output_time(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? GRN_INT64_VALUE(bulk) : 0);
+ break;
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ grn_output_geo_point(ctx, outbuf, output_type,
+ GRN_BULK_VSIZE(bulk) ? (grn_geo_point *)GRN_BULK_HEAD(bulk) : NULL);
+ break;
+ default :
+ if (format) {
+ int j;
+ int ncolumns = GRN_BULK_VSIZE(&format->columns)/sizeof(grn_obj *);
+ grn_id id = GRN_RECORD_VALUE(bulk);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", ncolumns);
+ for (j = 0; j < ncolumns; j++) {
+ grn_id range_id;
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMN", 2);
+ GRN_BULK_REWIND(&buf);
+ grn_column_name_(ctx, columns[j], &buf);
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+ /* column range */
+ range_id = grn_obj_get_range(ctx, columns[j]);
+ if (range_id == GRN_ID_NIL) {
+ GRN_TEXT_PUTS(ctx, outbuf, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(&buf);
+ GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+ grn_output_array_open(ctx, outbuf, output_type, "HIT", ncolumns);
+ for (j = 0; j < ncolumns; j++) {
+ grn_text_atoj(ctx, outbuf, output_type, columns[j], id);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ } else {
+ grn_obj *table = grn_ctx_at(ctx, bulk->header.domain);
+ grn_id id = GRN_RECORD_VALUE(bulk);
+ if (table && table->header.type != GRN_TABLE_NO_KEY) {
+ grn_obj *accessor = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ if (accessor) {
+ if (id == GRN_ID_NIL) {
+ grn_obj_reinit_for(ctx, &buf, accessor);
+ } else {
+ grn_obj_get_value(ctx, accessor, id, &buf);
+ }
+ grn_obj_unlink(ctx, accessor);
+ }
+ grn_output_obj(ctx, outbuf, output_type, &buf, format);
+ } else {
+ grn_output_int64(ctx, outbuf, output_type, id);
+ }
+ }
+ break;
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static void
+grn_output_uvector_result_set(grn_ctx *ctx,
+ grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *uvector,
+ grn_obj_format *format)
+{
+ unsigned int i_hit, n_hits;
+ unsigned int i_column, n_columns;
+ unsigned int n_elements;
+ grn_obj **columns;
+ grn_obj buf;
+ grn_bool with_column_names = GRN_FALSE;
+
+ n_hits = grn_vector_size(ctx, uvector);
+
+ n_columns = GRN_BULK_VSIZE(&format->columns) / sizeof(grn_obj *);
+ columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+
+ GRN_TEXT_INIT(&buf, 0);
+
+ if (n_hits > 0 && format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ with_column_names = GRN_TRUE;
+ }
+
+ n_elements = 1; /* for NHITS */
+ if (with_column_names) {
+ n_elements += 1; /* for COLUMNS */
+ }
+ n_elements += n_hits; /* for HITS */
+ grn_output_array_open(ctx, outbuf, output_type, "RESULTSET", n_elements);
+
+ grn_output_array_open(ctx, outbuf, output_type, "NHITS", 1);
+ grn_text_itoa(ctx, outbuf, n_hits);
+ grn_output_array_close(ctx, outbuf, output_type);
+
+ if (with_column_names) {
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", n_columns);
+ for (i_column = 0; i_column < n_columns; i_column++) {
+ grn_id range_id;
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMN", 2);
+
+ /* name */
+ GRN_BULK_REWIND(&buf);
+ grn_column_name_(ctx, columns[i_column], &buf);
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+
+ /* type */
+ range_id = grn_obj_get_range(ctx, columns[i_column]);
+ if (range_id == GRN_ID_NIL) {
+ GRN_TEXT_PUTS(ctx, outbuf, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(&buf);
+ GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+ }
+
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+
+ for (i_hit = 0; i_hit < n_hits++; i_hit++) {
+ grn_id id;
+
+ id = grn_uvector_get_element(ctx, uvector, i_hit, NULL);
+ grn_output_array_open(ctx, outbuf, output_type, "HITS", n_columns);
+ for (i_column = 0; i_column < n_columns; i_column++) {
+ GRN_BULK_REWIND(&buf);
+ grn_obj_get_value(ctx, columns[i_column], id, &buf);
+ grn_output_obj(ctx, outbuf, output_type, &buf, NULL);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+
+ grn_output_array_close(ctx, outbuf, output_type);
+
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static inline void
+grn_output_uvector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *uvector, grn_obj_format *format)
+{
+ grn_bool output_result_set = GRN_FALSE;
+ grn_bool with_weight = GRN_FALSE;
+ grn_obj *range;
+ grn_bool range_is_type;
+
+ if (format) {
+ if (GRN_BULK_VSIZE(&(format->columns)) > 0) {
+ output_result_set = GRN_TRUE;
+ }
+ if (format->flags & GRN_OBJ_FORMAT_WITH_WEIGHT) {
+ with_weight = GRN_TRUE;
+ }
+ }
+
+ if (output_result_set) {
+ grn_output_uvector_result_set(ctx, outbuf, output_type, uvector, format);
+ return;
+ }
+
+ range = grn_ctx_at(ctx, uvector->header.domain);
+ range_is_type = (range->header.type == GRN_TYPE);
+ if (range_is_type) {
+ unsigned int i, n;
+ char *raw_elements;
+ unsigned int element_size;
+ grn_obj element;
+
+ raw_elements = GRN_BULK_HEAD(uvector);
+ element_size = GRN_TYPE_SIZE(DB_OBJ(range));
+ n = GRN_BULK_VSIZE(uvector) / element_size;
+
+ grn_output_array_open(ctx, outbuf, output_type, "VECTOR", n);
+ GRN_OBJ_INIT(&element, GRN_BULK, 0, uvector->header.domain);
+ for (i = 0; i < n; i++) {
+ GRN_BULK_REWIND(&element);
+ grn_bulk_write_from(ctx, &element, raw_elements + (element_size * i),
+ 0, element_size);
+ grn_output_obj(ctx, outbuf, output_type, &element, NULL);
+ }
+ GRN_OBJ_FIN(ctx, &element);
+ grn_output_array_close(ctx, outbuf, output_type);
+ } else {
+ unsigned int i, n;
+ grn_obj id_value;
+ grn_obj key_value;
+
+ GRN_UINT32_INIT(&id_value, 0);
+ GRN_OBJ_INIT(&key_value, GRN_BULK, 0, range->header.domain);
+
+ n = grn_vector_size(ctx, uvector);
+ if (with_weight) {
+ grn_output_map_open(ctx, outbuf, output_type, "WEIGHT_VECTOR", n);
+ } else {
+ grn_output_array_open(ctx, outbuf, output_type, "VECTOR", n);
+ }
+
+ for (i = 0; i < n; i++) {
+ grn_id id;
+ unsigned int weight;
+
+ id = grn_uvector_get_element(ctx, uvector, i, &weight);
+ if (range->header.type == GRN_TABLE_NO_KEY) {
+ GRN_UINT32_SET(ctx, &id_value, id);
+ grn_output_obj(ctx, outbuf, output_type, &id_value, NULL);
+ } else {
+ GRN_BULK_REWIND(&key_value);
+ grn_table_get_key2(ctx, range, id, &key_value);
+ grn_output_obj(ctx, outbuf, output_type, &key_value, NULL);
+ }
+
+ if (with_weight) {
+ grn_output_uint64(ctx, outbuf, output_type, weight);
+ }
+ }
+
+ if (with_weight) {
+ grn_output_map_close(ctx, outbuf, output_type);
+ } else {
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+
+ GRN_OBJ_FIN(ctx, &id_value);
+ GRN_OBJ_FIN(ctx, &key_value);
+ }
+ grn_obj_unlink(ctx, range);
+}
+
+static inline void
+grn_output_vector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *vector, grn_obj_format *format)
+{
+ grn_bool with_weight = GRN_FALSE;
+
+ if (vector->header.domain == GRN_DB_VOID) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid obj->header.domain");
+ return;
+ }
+
+ if (format) {
+ if (format->flags & GRN_OBJ_FORMAT_WITH_WEIGHT) {
+ with_weight = GRN_TRUE;
+ }
+ }
+
+ if (with_weight) {
+ unsigned int i, n;
+ grn_obj value;
+
+ GRN_VOID_INIT(&value);
+ n = grn_vector_size(ctx, vector);
+ grn_output_map_open(ctx, outbuf, output_type, "WEIGHT_VECTOR", n);
+ for (i = 0; i < n; i++) {
+ const char *_value;
+ unsigned int weight, length;
+ grn_id domain;
+
+ length = grn_vector_get_element(ctx, vector, i,
+ &_value, &weight, &domain);
+ if (domain != GRN_DB_VOID) {
+ grn_obj_reinit(ctx, &value, domain, 0);
+ } else {
+ grn_obj_reinit(ctx, &value, vector->header.domain, 0);
+ }
+ grn_bulk_write(ctx, &value, _value, length);
+ grn_output_obj(ctx, outbuf, output_type, &value, NULL);
+ grn_output_uint64(ctx, outbuf, output_type, weight);
+ }
+ grn_output_map_close(ctx, outbuf, output_type);
+ GRN_OBJ_FIN(ctx, &value);
+ } else {
+ unsigned int i, n;
+ grn_obj value;
+ GRN_VOID_INIT(&value);
+ n = grn_vector_size(ctx, vector);
+ grn_output_array_open(ctx, outbuf, output_type, "VECTOR", n);
+ for (i = 0; i < n; i++) {
+ const char *_value;
+ unsigned int weight, length;
+ grn_id domain;
+
+ length = grn_vector_get_element(ctx, vector, i,
+ &_value, &weight, &domain);
+ if (domain != GRN_DB_VOID) {
+ grn_obj_reinit(ctx, &value, domain, 0);
+ } else {
+ grn_obj_reinit(ctx, &value, vector->header.domain, 0);
+ }
+ grn_bulk_write(ctx, &value, _value, length);
+ grn_output_obj(ctx, outbuf, output_type, &value, NULL);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ GRN_OBJ_FIN(ctx, &value);
+ }
+}
+
+static inline void
+grn_output_pvector(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *pvector, grn_obj_format *format)
+{
+ if (format) {
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+ "cannot print GRN_PVECTOR using grn_obj_format");
+ } else {
+ unsigned int i, n;
+ grn_output_array_open(ctx, outbuf, output_type, "VECTOR", -1);
+ n = GRN_BULK_VSIZE(pvector) / sizeof(grn_obj *);
+ for (i = 0; i < n; i++) {
+ grn_obj *value;
+
+ value = GRN_PTR_VALUE_AT(pvector, i);
+ grn_output_obj(ctx, outbuf, output_type, value, NULL);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+}
+
+static inline void
+grn_output_table_header(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format)
+{
+ grn_output_array_open(ctx, outbuf, output_type, "NHITS", 1);
+ if (output_type == GRN_CONTENT_XML) {
+ grn_text_itoa(ctx, outbuf, format->nhits);
+ } else {
+ grn_output_int32(ctx, outbuf, output_type, format->nhits);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+}
+
+static inline int
+count_n_elements_in_expression(grn_ctx *ctx, grn_obj *expression)
+{
+ int n_elements = 0;
+ grn_bool is_first_comma = GRN_TRUE;
+ grn_expr *expr = (grn_expr *)expression;
+ grn_expr_code *code;
+ grn_expr_code *code_end = expr->codes + expr->codes_curr;
+
+ for (code = expr->codes; code < code_end; code++) {
+ if (code->op == GRN_OP_COMMA) {
+ n_elements++;
+ if (is_first_comma) {
+ n_elements++;
+ is_first_comma = GRN_FALSE;
+ }
+ }
+ }
+
+ return n_elements;
+}
+
+static inline int
+count_used_n_codes(grn_ctx *ctx, grn_expr_code *start, grn_expr_code *target)
+{
+ int n_codes;
+ int i, n_args;
+ grn_bool have_proc_push_code = GRN_FALSE;
+ grn_expr_code *sub_code;
+
+ if (start == target) {
+ return 0;
+ }
+
+ n_args = target->nargs;
+ if (target->op == GRN_OP_CALL) {
+ if (!target->value) {
+ have_proc_push_code = GRN_TRUE;
+ }
+ } else {
+ if (target->value) {
+ n_args--;
+ if (n_args == 0) {
+ return 1;
+ }
+ }
+ }
+
+ n_codes = 1;
+ sub_code = target - 1;
+ for (i = 0; i < n_args; i++) {
+ int sub_n_codes;
+ sub_n_codes = count_used_n_codes(ctx, start, sub_code);
+ n_codes += sub_n_codes;
+ sub_code -= sub_n_codes;
+ if (sub_code < start) {
+ /* TODO: report error */
+ return 0;
+ }
+ }
+
+ if (have_proc_push_code) {
+ n_codes++;
+ sub_code--;
+ if (sub_code < start) {
+ /* TODO: report error */
+ return 0;
+ }
+ }
+
+ return n_codes;
+}
+
+static inline void
+grn_output_table_column(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *column, grn_obj *buf)
+{
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMN", 2);
+ if (column) {
+ grn_id range_id;
+ GRN_BULK_REWIND(buf);
+ grn_column_name_(ctx, column, buf);
+ grn_output_obj(ctx, outbuf, output_type, buf, NULL);
+ range_id = grn_obj_get_range(ctx, column);
+ if (range_id == GRN_ID_NIL) {
+ grn_output_cstr(ctx, outbuf, output_type, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(buf);
+ GRN_TEXT_PUT(ctx, buf, name_buf, name_len);
+ grn_output_obj(ctx, outbuf, output_type, buf, NULL);
+ }
+ } else {
+ grn_output_cstr(ctx, outbuf, output_type, "");
+ grn_output_cstr(ctx, outbuf, output_type, "");
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+}
+
+static inline void
+grn_output_table_columns_by_expression(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format,
+ grn_obj *buf)
+{
+ int n_elements;
+ int previous_comma_offset = -1;
+ grn_bool is_first_comma = GRN_TRUE;
+ grn_bool have_comma = GRN_FALSE;
+ grn_expr *expr = (grn_expr *)format->expression;
+ grn_expr_code *code;
+ grn_expr_code *code_end = expr->codes + expr->codes_curr;
+
+ n_elements = count_n_elements_in_expression(ctx, format->expression);
+
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", n_elements);
+ for (code = expr->codes; code < code_end; code++) {
+ int code_start_offset;
+
+ if (code->op != GRN_OP_COMMA) {
+ continue;
+ }
+
+ have_comma = GRN_TRUE;
+ code_start_offset = previous_comma_offset + 1;
+ if (is_first_comma) {
+ int code_end_offset;
+ int n_used_code;
+
+ grn_output_table_column(ctx, outbuf, output_type,
+ expr->codes[0].value, buf);
+
+ code_end_offset = code - expr->codes - code_start_offset - 1;
+ n_used_code = count_used_n_codes(ctx,
+ expr->codes,
+ expr->codes + code_end_offset);
+ code_start_offset = code_end_offset - n_used_code + 1;
+ is_first_comma = GRN_FALSE;
+ }
+
+ grn_output_table_column(ctx, outbuf, output_type,
+ expr->codes[code_start_offset].value, buf);
+ previous_comma_offset = code - expr->codes;
+ }
+
+ if (!have_comma && expr->codes_curr > 0) {
+ grn_output_table_column(ctx, outbuf, output_type,
+ expr->codes[0].value, buf);
+ }
+
+ grn_output_array_close(ctx, outbuf, output_type);
+}
+
+static inline void
+grn_output_table_columns_by_columns(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format,
+ grn_obj *buf)
+{
+ int i;
+ int ncolumns = GRN_BULK_VSIZE(&format->columns)/sizeof(grn_obj *);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+
+ grn_output_array_open(ctx, outbuf, output_type, "COLUMNS", ncolumns);
+ for (i = 0; i < ncolumns; i++) {
+ grn_output_table_column(ctx, outbuf, output_type, columns[i], buf);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+}
+
+static inline void
+grn_output_table_columns(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format)
+{
+ grn_obj buf;
+
+ GRN_TEXT_INIT(&buf, 0);
+ if (format->expression) {
+ grn_output_table_columns_by_expression(ctx, outbuf, output_type,
+ table, format, &buf);
+ } else {
+ grn_output_table_columns_by_columns(ctx, outbuf, output_type,
+ table, format, &buf);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static inline void
+grn_output_table_record_by_expression(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *expression)
+{
+ grn_obj *result;
+ result = grn_expr_exec(ctx, expression, 0);
+ if (result) {
+ grn_output_obj(ctx, outbuf, output_type, result, NULL);
+ } else {
+ grn_output_cstr(ctx, outbuf, output_type, ctx->errbuf);
+ }
+}
+
+static inline void
+grn_output_table_records_by_expression(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_table_cursor *tc,
+ grn_obj_format *format)
+{
+ int n_elements = 0;
+ grn_id id;
+ grn_obj *record;
+ grn_expr *expr = (grn_expr *)format->expression;
+ grn_expr_code *code;
+ grn_expr_code *code_end = expr->codes + expr->codes_curr;
+
+ n_elements = count_n_elements_in_expression(ctx, format->expression);
+ record = grn_expr_get_var_by_offset(ctx, format->expression, 0);
+ while ((id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ int previous_comma_offset = -1;
+ grn_bool is_first_comma = GRN_TRUE;
+ grn_bool have_comma = GRN_FALSE;
+ GRN_RECORD_SET(ctx, record, id);
+ grn_output_array_open(ctx, outbuf, output_type, "HIT", n_elements);
+ for (code = expr->codes; code < code_end; code++) {
+ if (code->op == GRN_OP_COMMA) {
+ int code_start_offset = previous_comma_offset + 1;
+ int code_end_offset;
+ int original_codes_curr = expr->codes_curr;
+
+ have_comma = GRN_TRUE;
+ if (is_first_comma) {
+ int second_code_offset;
+ int second_code_n_used_code;
+ second_code_offset = code - expr->codes - 1;
+ second_code_n_used_code =
+ count_used_n_codes(ctx,
+ expr->codes,
+ expr->codes + second_code_offset);
+ expr->codes_curr = second_code_offset - second_code_n_used_code + 1;
+ grn_output_table_record_by_expression(ctx, outbuf, output_type,
+ format->expression);
+ code_start_offset = expr->codes_curr;
+ is_first_comma = GRN_FALSE;
+ }
+ code_end_offset = code - expr->codes - code_start_offset;
+ expr->codes += code_start_offset;
+ expr->codes_curr = code_end_offset;
+ grn_output_table_record_by_expression(ctx, outbuf, output_type,
+ format->expression);
+ expr->codes -= code_start_offset;
+ expr->codes_curr = original_codes_curr;
+ previous_comma_offset = code - expr->codes;
+ }
+ }
+
+ if (!have_comma && expr->codes_curr > 0) {
+ grn_output_table_record_by_expression(ctx, outbuf, output_type,
+ format->expression);
+ }
+
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+}
+
+static inline void
+grn_output_table_records_by_columns(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_table_cursor *tc,
+ grn_obj_format *format)
+{
+ int i;
+ grn_id id;
+ int ncolumns = GRN_BULK_VSIZE(&format->columns)/sizeof(grn_obj *);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+ while ((id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ grn_output_array_open(ctx, outbuf, output_type, "HIT", ncolumns);
+ for (i = 0; i < ncolumns; i++) {
+ grn_text_atoj(ctx, outbuf, output_type, columns[i], id);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ }
+}
+
+static inline void
+grn_output_table_records(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format)
+{
+ grn_table_cursor *tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0,
+ format->offset, format->limit,
+ GRN_CURSOR_ASCENDING);
+ if (tc) {
+ if (format->expression) {
+ grn_output_table_records_by_expression(ctx, outbuf, output_type,
+ tc, format);
+ } else {
+ grn_output_table_records_by_columns(ctx, outbuf, output_type,
+ tc, format);
+ }
+ grn_table_cursor_close(ctx, tc);
+ } else {
+ ERRCLR(ctx);
+ }
+}
+
+static inline void
+grn_output_table(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *table, grn_obj_format *format)
+{
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ if (format) {
+ int resultset_size = 1;
+ /* resultset: [NHITS, (COLUMNS), (HITS)] */
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ resultset_size++;
+ }
+ resultset_size += format->limit;
+ grn_output_array_open(ctx, outbuf, output_type, "RESULTSET", resultset_size);
+ grn_output_table_header(ctx, outbuf, output_type, table, format);
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ grn_output_table_columns(ctx, outbuf, output_type, table, format);
+ }
+ grn_output_table_records(ctx, outbuf, output_type, table, format);
+ grn_output_array_close(ctx, outbuf, output_type);
+ } else {
+ int i;
+ grn_obj *column = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ grn_table_cursor *tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0,
+ 0, -1, GRN_CURSOR_ASCENDING);
+ grn_output_array_open(ctx, outbuf, output_type, "HIT", -1);
+ if (tc) {
+ grn_id id;
+ for (i = 0; (id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL; i++) {
+ GRN_BULK_REWIND(&buf);
+ grn_obj_get_value(ctx, column, id, &buf);
+ grn_text_esc(ctx, outbuf, GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf));
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ grn_output_array_close(ctx, outbuf, output_type);
+ grn_obj_unlink(ctx, column);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+void
+grn_output_obj(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ grn_obj *obj, grn_obj_format *format)
+{
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ switch (obj->header.type) {
+ case GRN_VOID :
+ grn_output_void(ctx, outbuf, output_type, obj, format);
+ break;
+ case GRN_BULK :
+ grn_output_bulk(ctx, outbuf, output_type, obj, format);
+ break;
+ case GRN_UVECTOR :
+ grn_output_uvector(ctx, outbuf, output_type, obj, format);
+ break;
+ case GRN_VECTOR :
+ grn_output_vector(ctx, outbuf, output_type, obj, format);
+ break;
+ case GRN_PVECTOR :
+ grn_output_pvector(ctx, outbuf, output_type, obj, format);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ grn_output_table(ctx, outbuf, output_type, obj, format);
+ break;
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+typedef enum {
+ XML_START,
+ XML_START_ELEMENT,
+ XML_END_ELEMENT,
+ XML_TEXT
+} xml_status;
+
+typedef enum {
+ XML_PLACE_NONE,
+ XML_PLACE_COLUMN,
+ XML_PLACE_HIT
+} xml_place;
+
+static char *
+transform_xml_next_column(grn_obj *columns, int n)
+{
+ char *column = GRN_TEXT_VALUE(columns);
+ while (n--) {
+ while (*column) {
+ column++;
+ }
+ column++;
+ }
+ return column;
+}
+
+static void
+transform_xml(grn_ctx *ctx, grn_obj *output, grn_obj *transformed)
+{
+ char *s, *e;
+ xml_status status = XML_START;
+ xml_place place = XML_PLACE_NONE;
+ grn_obj buf, name, columns, *expr;
+ unsigned int len;
+ int offset = 0, limit = 0, record_n = 0;
+ int column_n = 0, column_text_n = 0, result_set_n = -1;
+ grn_bool in_vector = GRN_FALSE;
+ unsigned int vector_element_n = 0;
+ grn_bool in_weight_vector = GRN_FALSE;
+ unsigned int weight_vector_item_n = 0;
+
+ s = GRN_TEXT_VALUE(output);
+ e = GRN_BULK_CURR(output);
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_INIT(&name, 0);
+ GRN_TEXT_INIT(&columns, 0);
+
+ expr = ctx->impl->curr_expr;
+
+#define EQUAL_NAME_P(_name) \
+ (GRN_TEXT_LEN(&name) == strlen(_name) && \
+ !memcmp(GRN_TEXT_VALUE(&name), _name, strlen(_name)))
+
+ while (s < e) {
+ switch (*s) {
+ case '<' :
+ s++;
+ switch (*s) {
+ case '/' :
+ status = XML_END_ELEMENT;
+ s++;
+ break;
+ default :
+ status = XML_START_ELEMENT;
+ break;
+ }
+ GRN_BULK_REWIND(&name);
+ break;
+ case '>' :
+ switch (status) {
+ case XML_START_ELEMENT :
+ if (EQUAL_NAME_P("COLUMN")) {
+ place = XML_PLACE_COLUMN;
+ column_text_n = 0;
+ } else if (EQUAL_NAME_P("HIT")) {
+ place = XML_PLACE_HIT;
+ column_n = 0;
+ if (result_set_n == 0) {
+ GRN_TEXT_PUTS(ctx, transformed, "<HIT NO=\"");
+ grn_text_itoa(ctx, transformed, record_n++);
+ GRN_TEXT_PUTS(ctx, transformed, "\">\n");
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed, "<NAVIGATIONELEMENT ");
+ }
+ } else if (EQUAL_NAME_P("RESULTSET")) {
+ GRN_BULK_REWIND(&columns);
+ result_set_n++;
+ if (result_set_n == 0) {
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed, "<NAVIGATIONENTRY>\n");
+ }
+ } else if (EQUAL_NAME_P("VECTOR")) {
+ char *c = transform_xml_next_column(&columns, column_n++);
+ in_vector = GRN_TRUE;
+ vector_element_n = 0;
+ GRN_TEXT_PUTS(ctx, transformed, "<FIELD NAME=\"");
+ GRN_TEXT_PUTS(ctx, transformed, c);
+ GRN_TEXT_PUTS(ctx, transformed, "\">");
+ } else if (EQUAL_NAME_P("WEIGHT_VECTOR")) {
+ char *c = transform_xml_next_column(&columns, column_n++);
+ in_weight_vector = GRN_TRUE;
+ weight_vector_item_n = 0;
+ GRN_TEXT_PUTS(ctx, transformed, "<FIELD NAME=\"");
+ GRN_TEXT_PUTS(ctx, transformed, c);
+ GRN_TEXT_PUTS(ctx, transformed, "\">");
+ }
+ break;
+ case XML_END_ELEMENT :
+ if (EQUAL_NAME_P("HIT")) {
+ place = XML_PLACE_NONE;
+ if (result_set_n == 0) {
+ GRN_TEXT_PUTS(ctx, transformed, "</HIT>\n");
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed, "/>\n");
+ }
+ } else if (EQUAL_NAME_P("RESULTSET")) {
+ place = XML_PLACE_NONE;
+ if (result_set_n == 0) {
+ GRN_TEXT_PUTS(ctx, transformed, "</RESULTSET>\n");
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed,
+ "</NAVIGATIONELEMENTS>\n"
+ "</NAVIGATIONENTRY>\n");
+ }
+ } else if (EQUAL_NAME_P("RESULT")) {
+ GRN_TEXT_PUTS(ctx, transformed,
+ "</RESULTPAGE>\n"
+ "</SEGMENT>\n"
+ "</SEGMENTS>\n");
+ } else if (EQUAL_NAME_P("VECTOR")) {
+ in_vector = GRN_FALSE;
+ GRN_TEXT_PUTS(ctx, transformed, "</FIELD>\n");
+ } else if (EQUAL_NAME_P("WEIGHT_VECTOR")) {
+ in_weight_vector = GRN_FALSE;
+ GRN_TEXT_PUTS(ctx, transformed, "</FIELD>\n");
+ } else {
+ switch (place) {
+ case XML_PLACE_HIT :
+ if (result_set_n == 0) {
+ if (in_vector) {
+ if (vector_element_n > 0) {
+ GRN_TEXT_PUTS(ctx, transformed, ", ");
+ }
+ GRN_TEXT_PUT(ctx, transformed,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ vector_element_n++;
+ } else if (in_weight_vector) {
+ grn_bool is_key;
+ is_key = ((weight_vector_item_n % 2) == 0);
+ if (is_key) {
+ unsigned int weight_vector_key_n;
+ weight_vector_key_n = weight_vector_item_n / 2;
+ if (weight_vector_key_n > 0) {
+ GRN_TEXT_PUTS(ctx, transformed, ", ");
+ }
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed, ":");
+ }
+ GRN_TEXT_PUT(ctx, transformed,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ weight_vector_item_n++;
+ } else {
+ char *c = transform_xml_next_column(&columns, column_n++);
+ GRN_TEXT_PUTS(ctx, transformed, "<FIELD NAME=\"");
+ GRN_TEXT_PUTS(ctx, transformed, c);
+ GRN_TEXT_PUTS(ctx, transformed, "\">");
+ GRN_TEXT_PUT(ctx, transformed,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_TEXT_PUTS(ctx, transformed, "</FIELD>\n");
+ }
+ } else {
+ char *c = transform_xml_next_column(&columns, column_n++);
+ GRN_TEXT_PUTS(ctx, transformed, c);
+ GRN_TEXT_PUTS(ctx, transformed, "=\"");
+ GRN_TEXT_PUT(ctx, transformed,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_TEXT_PUTS(ctx, transformed, "\" ");
+ }
+ break;
+ default :
+ if (EQUAL_NAME_P("NHITS")) {
+ if (result_set_n == 0) {
+ uint32_t nhits;
+ grn_obj *offset_value, *limit_value;
+
+ nhits = grn_atoui(GRN_TEXT_VALUE(&buf), GRN_BULK_CURR(&buf),
+ NULL);
+ offset_value = grn_expr_get_var(ctx, expr,
+ "offset", strlen("offset"));
+ limit_value = grn_expr_get_var(ctx, expr,
+ "limit", strlen("limit"));
+ if (GRN_TEXT_LEN(offset_value)) {
+ offset = grn_atoi(GRN_TEXT_VALUE(offset_value),
+ GRN_BULK_CURR(offset_value),
+ NULL);
+ } else {
+ offset = 0;
+ }
+ if (GRN_TEXT_LEN(limit_value)) {
+ limit = grn_atoi(GRN_TEXT_VALUE(limit_value),
+ GRN_BULK_CURR(limit_value),
+ NULL);
+ } else {
+#define DEFAULT_LIMIT 10
+ limit = DEFAULT_LIMIT;
+#undef DEFAULT_LIMIT
+ }
+ grn_normalize_offset_and_limit(ctx, nhits, &offset, &limit);
+ record_n = offset + 1;
+ GRN_TEXT_PUTS(ctx, transformed,
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ "<SEGMENTS>\n"
+ "<SEGMENT>\n"
+ "<RESULTPAGE>\n"
+ "<RESULTSET OFFSET=\"");
+ grn_text_lltoa(ctx, transformed, offset);
+ GRN_TEXT_PUTS(ctx, transformed, "\" LIMIT=\"");
+ grn_text_lltoa(ctx, transformed, limit);
+ GRN_TEXT_PUTS(ctx, transformed, "\" NHITS=\"");
+ grn_text_lltoa(ctx, transformed, nhits);
+ GRN_TEXT_PUTS(ctx, transformed, "\">\n");
+ } else {
+ GRN_TEXT_PUTS(ctx, transformed,
+ "<NAVIGATIONELEMENTS COUNT=\"");
+ GRN_TEXT_PUT(ctx, transformed,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_TEXT_PUTS(ctx, transformed,
+ "\">\n");
+ }
+ } else if (EQUAL_NAME_P("TEXT")) {
+ switch (place) {
+ case XML_PLACE_COLUMN :
+ if (column_text_n == 0) {
+ GRN_TEXT_PUT(ctx, &columns,
+ GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_TEXT_PUTC(ctx, &columns, '\0');
+ }
+ column_text_n++;
+ break;
+ default :
+ break;
+ }
+ }
+ }
+ }
+ default :
+ break;
+ }
+ s++;
+ GRN_BULK_REWIND(&buf);
+ status = XML_TEXT;
+ break;
+ default :
+ len = grn_charlen(ctx, s, e);
+ switch (status) {
+ case XML_START_ELEMENT :
+ case XML_END_ELEMENT :
+ GRN_TEXT_PUT(ctx, &name, s, len);
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, &buf, s, len);
+ break;
+ }
+ s += len;
+ break;
+ }
+ }
+#undef EQUAL_NAME_P
+
+ GRN_OBJ_FIN(ctx, &buf);
+ GRN_OBJ_FIN(ctx, &name);
+ GRN_OBJ_FIN(ctx, &columns);
+}
+
+#ifdef GRN_WITH_MESSAGE_PACK
+typedef struct {
+ grn_ctx *ctx;
+ grn_obj *buffer;
+} msgpack_writer_ctx;
+
+static inline int
+msgpack_buffer_writer(void* data, const char* buf, unsigned int len)
+{
+ msgpack_writer_ctx *writer_ctx = (msgpack_writer_ctx *)data;
+ return grn_bulk_write(writer_ctx->ctx, writer_ctx->buffer, buf, len);
+}
+#endif
+
+#define JSON_CALLBACK_PARAM "callback"
+
+void
+grn_output_envelope(grn_ctx *ctx,
+ grn_rc rc,
+ grn_obj *head,
+ grn_obj *body,
+ grn_obj *foot,
+ const char *file,
+ int line)
+{
+ double started, finished, elapsed;
+ grn_obj *expr = NULL;
+ grn_obj *jsonp_func = NULL;
+
+ grn_timeval tv_now;
+ grn_timeval_now(ctx, &tv_now);
+ started = ctx->impl->tv.tv_sec;
+ started += ctx->impl->tv.tv_nsec / GRN_TIME_NSEC_PER_SEC_F;
+ finished = tv_now.tv_sec;
+ finished += tv_now.tv_nsec / GRN_TIME_NSEC_PER_SEC_F;
+ elapsed = finished - started;
+
+ switch (ctx->impl->output_type) {
+ case GRN_CONTENT_JSON:
+ expr = ctx->impl->curr_expr;
+ if (expr) {
+ jsonp_func = grn_expr_get_var(ctx, expr, JSON_CALLBACK_PARAM,
+ strlen(JSON_CALLBACK_PARAM));
+ }
+ if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
+ GRN_TEXT_PUT(ctx, head, GRN_TEXT_VALUE(jsonp_func), GRN_TEXT_LEN(jsonp_func));
+ GRN_TEXT_PUTC(ctx, head, '(');
+ }
+ GRN_TEXT_PUTS(ctx, head, "[[");
+ grn_text_itoa(ctx, head, rc);
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_ftoa(ctx, head, started);
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_ftoa(ctx, head, elapsed);
+ if (rc != GRN_SUCCESS) {
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_esc(ctx, head, ctx->errbuf, strlen(ctx->errbuf));
+ if (ctx->errfunc && ctx->errfile) {
+ grn_obj *command;
+ /* TODO: output backtrace */
+ GRN_TEXT_PUTS(ctx, head, ",[[");
+ grn_text_esc(ctx, head, ctx->errfunc, strlen(ctx->errfunc));
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_esc(ctx, head, ctx->errfile, strlen(ctx->errfile));
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_itoa(ctx, head, ctx->errline);
+ GRN_TEXT_PUTS(ctx, head, "]");
+ if (file && (command = GRN_CTX_USER_DATA(ctx)->ptr)) {
+ GRN_TEXT_PUTS(ctx, head, ",[");
+ grn_text_esc(ctx, head, file, strlen(file));
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_itoa(ctx, head, line);
+ GRN_TEXT_PUTC(ctx, head, ',');
+ grn_text_esc(ctx, head, GRN_TEXT_VALUE(command), GRN_TEXT_LEN(command));
+ GRN_TEXT_PUTS(ctx, head, "]");
+ }
+ GRN_TEXT_PUTS(ctx, head, "]");
+ }
+ }
+ GRN_TEXT_PUTC(ctx, head, ']');
+ if (GRN_TEXT_LEN(body)) { GRN_TEXT_PUTC(ctx, head, ','); }
+ GRN_TEXT_PUTC(ctx, foot, ']');
+ if (jsonp_func && GRN_TEXT_LEN(jsonp_func)) {
+ GRN_TEXT_PUTS(ctx, foot, ");");
+ }
+ break;
+ case GRN_CONTENT_TSV:
+ grn_text_itoa(ctx, head, rc);
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_ftoa(ctx, head, started);
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_ftoa(ctx, head, elapsed);
+ if (rc != GRN_SUCCESS) {
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_esc(ctx, head, ctx->errbuf, strlen(ctx->errbuf));
+ if (ctx->errfunc && ctx->errfile) {
+ /* TODO: output backtrace */
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_esc(ctx, head, ctx->errfunc, strlen(ctx->errfunc));
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_esc(ctx, head, ctx->errfile, strlen(ctx->errfile));
+ GRN_TEXT_PUTC(ctx, head, '\t');
+ grn_text_itoa(ctx, head, ctx->errline);
+ }
+ }
+ GRN_TEXT_PUTS(ctx, head, "\n");
+ GRN_TEXT_PUTS(ctx, foot, "\nEND");
+ break;
+ case GRN_CONTENT_XML:
+ {
+ char buf[GRN_TABLE_MAX_KEY_SIZE];
+ int is_select = 0;
+ if (!rc && ctx->impl->curr_expr) {
+ int len = grn_obj_name(ctx, ctx->impl->curr_expr,
+ buf, GRN_TABLE_MAX_KEY_SIZE);
+ buf[len] = '\0';
+ is_select = strcmp(buf, "select") == 0;
+ }
+ if (is_select) {
+ grn_obj transformed;
+ GRN_TEXT_INIT(&transformed, 0);
+ transform_xml(ctx, body, &transformed);
+ GRN_TEXT_SET(ctx, body,
+ GRN_TEXT_VALUE(&transformed), GRN_TEXT_LEN(&transformed));
+ GRN_OBJ_FIN(ctx, &transformed);
+ } else {
+ GRN_TEXT_PUTS(ctx, head, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RESULT CODE=\"");
+ grn_text_itoa(ctx, head, rc);
+ GRN_TEXT_PUTS(ctx, head, "\" UP=\"");
+ grn_text_ftoa(ctx, head, started);
+ GRN_TEXT_PUTS(ctx, head, "\" ELAPSED=\"");
+ grn_text_ftoa(ctx, head, elapsed);
+ GRN_TEXT_PUTS(ctx, head, "\">\n");
+ if (rc != GRN_SUCCESS) {
+ GRN_TEXT_PUTS(ctx, head, "<ERROR>");
+ grn_text_escape_xml(ctx, head, ctx->errbuf, strlen(ctx->errbuf));
+ if (ctx->errfunc && ctx->errfile) {
+ /* TODO: output backtrace */
+ GRN_TEXT_PUTS(ctx, head, "<INFO FUNC=\"");
+ grn_text_escape_xml(ctx, head, ctx->errfunc, strlen(ctx->errfunc));
+ GRN_TEXT_PUTS(ctx, head, "\" FILE=\"");
+ grn_text_escape_xml(ctx, head, ctx->errfile, strlen(ctx->errfile));
+ GRN_TEXT_PUTS(ctx, head, "\" LINE=\"");
+ grn_text_itoa(ctx, head, ctx->errline);
+ GRN_TEXT_PUTS(ctx, head, "\"/>");
+ }
+ GRN_TEXT_PUTS(ctx, head, "</ERROR>");
+ }
+ GRN_TEXT_PUTS(ctx, foot, "\n</RESULT>");
+ }
+ }
+ break;
+ case GRN_CONTENT_MSGPACK:
+#ifdef GRN_WITH_MESSAGE_PACK
+ {
+ msgpack_writer_ctx head_writer_ctx;
+ msgpack_packer header_packer;
+ int header_size;
+
+ head_writer_ctx.ctx = ctx;
+ head_writer_ctx.buffer = head;
+ msgpack_packer_init(&header_packer, &head_writer_ctx, msgpack_buffer_writer);
+
+ /* [HEAD, (BODY)] */
+ if (GRN_TEXT_LEN(body) > 0) {
+ msgpack_pack_array(&header_packer, 2);
+ } else {
+ msgpack_pack_array(&header_packer, 1);
+ }
+
+ /* HEAD := [rc, started, elapsed, (error, (ERROR DETAIL))] */
+ header_size = 3;
+ if (rc != GRN_SUCCESS) {
+ header_size++;
+ if (ctx->errfunc && ctx->errfile) {
+ header_size++;
+ }
+ }
+ msgpack_pack_array(&header_packer, header_size);
+ msgpack_pack_int(&header_packer, rc);
+
+ msgpack_pack_double(&header_packer, started);
+ msgpack_pack_double(&header_packer, elapsed);
+
+ if (rc != GRN_SUCCESS) {
+ msgpack_pack_raw(&header_packer, strlen(ctx->errbuf));
+ msgpack_pack_raw_body(&header_packer, ctx->errbuf, strlen(ctx->errbuf));
+ if (ctx->errfunc && ctx->errfile) {
+ grn_obj *command = GRN_CTX_USER_DATA(ctx)->ptr;
+ int error_detail_size;
+
+ /* ERROR DETAIL := [[errfunc, errfile, errline,
+ (file, line, command)]] */
+ /* TODO: output backtrace */
+ msgpack_pack_array(&header_packer, 1);
+ error_detail_size = 3;
+ if (command) {
+ error_detail_size += 3;
+ }
+ msgpack_pack_array(&header_packer, error_detail_size);
+
+ msgpack_pack_raw(&header_packer, strlen(ctx->errfunc));
+ msgpack_pack_raw_body(&header_packer, ctx->errfunc, strlen(ctx->errfunc));
+
+ msgpack_pack_raw(&header_packer, strlen(ctx->errfile));
+ msgpack_pack_raw_body(&header_packer, ctx->errfile, strlen(ctx->errfile));
+
+ msgpack_pack_int(&header_packer, ctx->errline);
+
+ if (command) {
+ if (file) {
+ msgpack_pack_raw(&header_packer, strlen(file));
+ msgpack_pack_raw_body(&header_packer, file, strlen(file));
+ } else {
+ msgpack_pack_raw(&header_packer, 7);
+ msgpack_pack_raw_body(&header_packer, "(stdin)", 7);
+ }
+
+ msgpack_pack_int(&header_packer, line);
+
+ msgpack_pack_raw(&header_packer, GRN_TEXT_LEN(command));
+ msgpack_pack_raw_body(&header_packer, GRN_TEXT_VALUE(command), GRN_TEXT_LEN(command));
+ }
+ }
+ }
+ }
+#endif
+ break;
+ case GRN_CONTENT_NONE:
+ break;
+ }
+}
diff --git a/storage/mroonga/vendor/groonga/lib/output.h b/storage/mroonga/vendor/groonga/lib/output.h
new file mode 100644
index 00000000000..7c8a3f7a769
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/output.h
@@ -0,0 +1,89 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_OUTPUT_H
+#define GRN_OUTPUT_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_STORE_H
+#include "store.h"
+#endif /* GRN_STORE_H */
+
+#ifndef GRN_CTX_IMPL_H
+#include "ctx_impl.h"
+#endif /* GRN_CTX_IMPL_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GRN_API void grn_output_array_open(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *name, int nelements);
+GRN_API void grn_output_array_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type);
+GRN_API void grn_output_map_open(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *name, int nelements);
+GRN_API void grn_output_map_close(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type);
+void grn_output_int32(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ int32_t value);
+GRN_API void grn_output_int64(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ int64_t value);
+void grn_output_float(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ double value);
+GRN_API void grn_output_cstr(grn_ctx *ctx, grn_obj *outbuf, grn_content_type output_type,
+ const char *value);
+GRN_API void grn_output_str(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ const char *value, size_t value_len);
+GRN_API void grn_output_bool(grn_ctx *ctx, grn_obj *outbuf,
+ grn_content_type output_type,
+ grn_bool value);
+
+#define GRN_OUTPUT_ARRAY_OPEN(name,nelements) \
+ (grn_ctx_output_array_open(ctx, name, nelements))
+#define GRN_OUTPUT_ARRAY_CLOSE() \
+ (grn_ctx_output_array_close(ctx))
+#define GRN_OUTPUT_MAP_OPEN(name,nelements) \
+ (grn_ctx_output_map_open(ctx, name, nelements))
+#define GRN_OUTPUT_MAP_CLOSE() \
+ (grn_ctx_output_map_close(ctx))
+#define GRN_OUTPUT_INT32(value) \
+ (grn_ctx_output_int32(ctx, value))
+#define GRN_OUTPUT_INT64(value) \
+ (grn_ctx_output_int64(ctx, value))
+#define GRN_OUTPUT_FLOAT(value) \
+ (grn_ctx_output_float(ctx, value))
+#define GRN_OUTPUT_CSTR(value)\
+ (grn_ctx_output_cstr(ctx, value))
+#define GRN_OUTPUT_STR(value,value_len)\
+ (grn_ctx_output_str(ctx, value, value_len))
+#define GRN_OUTPUT_BOOL(value)\
+ (grn_ctx_output_bool(ctx, value))
+#define GRN_OUTPUT_OBJ(obj,format)\
+ (grn_ctx_output_obj(ctx, obj, format))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_OUTPUT_H */
diff --git a/storage/mroonga/vendor/groonga/lib/pat.c b/storage/mroonga/vendor/groonga/lib/pat.c
new file mode 100644
index 00000000000..5b03e6132e9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/pat.c
@@ -0,0 +1,2916 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <string.h>
+#include <limits.h>
+#include "pat.h"
+#include "output.h"
+#include "util.h"
+#include "normalizer_in.h"
+
+#define GRN_PAT_DELETED (GRN_ID_MAX + 1)
+
+#define GRN_PAT_SEGMENT_SIZE 0x400000
+#define W_OF_KEY_IN_A_SEGMENT 22
+#define W_OF_PAT_IN_A_SEGMENT 18
+#define W_OF_SIS_IN_A_SEGMENT 19
+#define KEY_MASK_IN_A_SEGMENT 0x3fffff
+#define PAT_MASK_IN_A_SEGMENT 0x3ffff
+#define SIS_MASK_IN_A_SEGMENT 0x7ffff
+#define SEG_NOT_ASSIGNED 0xffff
+#define GRN_PAT_MAX_SEGMENT 0x1000
+#define GRN_PAT_MDELINFOS (GRN_PAT_NDELINFOS - 1)
+
+#define GRN_PAT_BIN_KEY 0x70000
+
+typedef struct {
+ grn_id lr[2];
+ /*
+ lr[0]: the left node.
+ lr[1]: the right node.
+
+ The left node has 0 at the nth bit at the nth byte.
+ The right node has 1 at the nth bit at the nth byte.
+ 'check' value indicate 'at the nth bit at the nth byte'.
+
+ The both available nodes has larger check value rather
+ than the current node.
+
+ The first node (PAT_AT(pat, GRN_ID_NIL, node)) has only
+ the right node and the node is the start point.
+ */
+ uint32_t key;
+ /*
+ PAT_IMD(node) == 0: key bytes offset in memory map.
+ PAT_IMD(node) == 1: the key bytes.
+ */
+ uint16_t check;
+ /*
+ nth byte: 12, nth bit: 3, terminated: 1
+
+ nth byte is different in key bytes: (check >> 4): max == 4095
+ the left most byte is the 0th byte and the right most byte is the 11th byte.
+
+ nth bit is different in nth byte: ((check >> 1) & 0b111)
+ the left most bit is the 0th bit and the right most bit is the 7th bit.
+
+ terminated: (check & 0b1)
+ terminated == 1: key is terminated.
+ */
+ uint16_t bits;
+ /* length : 13, deleting : 1, immediate : 1 */
+} pat_node;
+
+#define PAT_DELETING (1<<1)
+#define PAT_IMMEDIATE (1<<2)
+
+#define PAT_DEL(x) ((x)->bits & PAT_DELETING)
+#define PAT_IMD(x) ((x)->bits & PAT_IMMEDIATE)
+#define PAT_LEN(x) (((x)->bits >> 3) + 1)
+#define PAT_CHK(x) ((x)->check)
+#define PAT_DEL_ON(x) ((x)->bits |= PAT_DELETING)
+#define PAT_IMD_ON(x) ((x)->bits |= PAT_IMMEDIATE)
+#define PAT_DEL_OFF(x) ((x)->bits &= ~PAT_DELETING)
+#define PAT_IMD_OFF(x) ((x)->bits &= ~PAT_IMMEDIATE)
+#define PAT_LEN_SET(x,v) ((x)->bits = ((x)->bits & ((1<<3) - 1))|(((v) - 1) << 3))
+#define PAT_CHK_SET(x,v) ((x)->check = (v))
+
+typedef struct {
+ grn_id children;
+ grn_id sibling;
+} sis_node;
+
+enum {
+ segment_key = 0,
+ segment_pat = 1,
+ segment_sis = 2
+};
+
+/* bit operation */
+
+#define nth_bit(key,n,l) ((((key)[(n)>>4]) >> (7 - (((n)>>1) & 7))) & 1)
+
+/* segment operation */
+
+/* patricia array operation */
+
+#define PAT_AT(pat,id,n) do {\
+ int flags = 0;\
+ GRN_IO_ARRAY_AT(pat->io, segment_pat, id, &flags, n);\
+} while (0)
+
+inline static pat_node *
+pat_get(grn_ctx *ctx, grn_pat *pat, grn_id id)
+{
+ pat_node *res;
+ int flags = GRN_TABLE_ADD;
+ if (id > GRN_ID_MAX) { return NULL; }
+ GRN_IO_ARRAY_AT(pat->io, segment_pat, id, &flags, res);
+ return res;
+}
+
+inline static pat_node *
+pat_node_new(grn_ctx *ctx, grn_pat *pat, grn_id *id)
+{
+ uint32_t n = pat->header->curr_rec + 1;
+ pat_node *res;
+ if (n > GRN_ID_MAX) { return NULL; }
+ if ((res = pat_get(ctx, pat, n))) {
+ pat->header->curr_rec = n;
+ pat->header->n_entries++;
+ }
+ if (id) { *id = n; }
+ return res;
+}
+
+/* sis operation */
+
+inline static sis_node *
+sis_at(grn_ctx *ctx, grn_pat *pat, grn_id id)
+{
+ sis_node *res;
+ int flags = 0;
+ if (id > GRN_ID_MAX) { return NULL; }
+ GRN_IO_ARRAY_AT(pat->io, segment_sis, id, &flags, res);
+ return res;
+}
+
+inline static sis_node *
+sis_get(grn_ctx *ctx, grn_pat *pat, grn_id id)
+{
+ sis_node *res;
+ int flags = GRN_TABLE_ADD;
+ if (id > GRN_ID_MAX) { return NULL; }
+ GRN_IO_ARRAY_AT(pat->io, segment_sis, id, &flags, res);
+ return res;
+}
+
+#define MAX_LEVEL 16
+
+static void
+sis_collect(grn_ctx *ctx, grn_pat *pat, grn_hash *h, grn_id id, uint32_t level)
+{
+ uint32_t *offset;
+ sis_node *sl = sis_at(ctx, pat, id);
+ if (sl) {
+ grn_id sid = sl->children;
+ while (sid && sid != id) {
+ if (grn_hash_add(ctx, h, &sid, sizeof(grn_id), (void **) &offset, NULL)) {
+ *offset = level;
+ if (level < MAX_LEVEL) { sis_collect(ctx, pat, h, sid, level + 1); }
+ if (!(sl = sis_at(ctx, pat, sid))) { break; }
+ sid = sl->sibling;
+ } else {
+ /* todo : must be handled */
+ }
+ }
+ }
+}
+
+/* key operation */
+
+#define KEY_AT(pat,pos,ptr,addp) do {\
+ int flags = addp;\
+ GRN_IO_ARRAY_AT(pat->io, segment_key, pos, &flags, ptr);\
+} while (0)
+
+inline static uint32_t
+key_put(grn_ctx *ctx, grn_pat *pat, const uint8_t *key, int len)
+{
+ uint32_t res, ts;
+// if (len >= GRN_PAT_SEGMENT_SIZE) { return 0; /* error */ }
+ res = pat->header->curr_key;
+ ts = (res + len) >> W_OF_KEY_IN_A_SEGMENT;
+ if (res >> W_OF_KEY_IN_A_SEGMENT != ts) {
+ res = pat->header->curr_key = ts << W_OF_KEY_IN_A_SEGMENT;
+ }
+ {
+ uint8_t *dest;
+ KEY_AT(pat, res, dest, GRN_TABLE_ADD);
+ if (!dest) { return 0; }
+ memcpy(dest, key, len);
+ }
+ pat->header->curr_key += len;
+ return res;
+}
+
+inline static uint8_t *
+pat_node_get_key(grn_ctx *ctx, grn_pat *pat, pat_node *n)
+{
+ if (PAT_IMD(n)) {
+ return (uint8_t *) &n->key;
+ } else {
+ uint8_t *res;
+ KEY_AT(pat, n->key, res, 0);
+ return res;
+ }
+}
+
+inline static grn_rc
+pat_node_set_key(grn_ctx *ctx, grn_pat *pat, pat_node *n, const uint8_t *key, unsigned int len)
+{
+ if (!key || !len) { return GRN_INVALID_ARGUMENT; }
+ PAT_LEN_SET(n, len);
+ if (len <= sizeof(uint32_t)) {
+ PAT_IMD_ON(n);
+ memcpy(&n->key, key, len);
+ } else {
+ PAT_IMD_OFF(n);
+ n->key = key_put(ctx, pat, key, len);
+ }
+ return GRN_SUCCESS;
+}
+
+/* delinfo operation */
+
+enum {
+ DL_EMPTY = 0,
+ DL_PHASE1,
+ DL_PHASE2
+};
+
+inline static grn_pat_delinfo *
+delinfo_search(grn_pat *pat, grn_id id)
+{
+ int i;
+ grn_pat_delinfo *di;
+ for (i = (pat->header->curr_del2) & GRN_PAT_MDELINFOS;
+ i != pat->header->curr_del;
+ i = (i + 1) & GRN_PAT_MDELINFOS) {
+ di = &pat->header->delinfos[i];
+ if (di->stat != DL_PHASE1) { continue; }
+ if (di->ld == id) { return di; }
+ if (di->d == id) { return di; }
+ }
+ return NULL;
+}
+
+inline static grn_rc
+delinfo_turn_2(grn_ctx *ctx, grn_pat *pat, grn_pat_delinfo *di)
+{
+ grn_id d, *p = NULL;
+ pat_node *ln, *dn;
+ // grn_log("delinfo_turn_2> di->d=%d di->ld=%d stat=%d", di->d, di->ld, di->stat);
+ if (di->stat != DL_PHASE1) { return GRN_SUCCESS; }
+ PAT_AT(pat, di->ld, ln);
+ if (!ln) { return GRN_INVALID_ARGUMENT; }
+ if (!(d = di->d)) { return GRN_INVALID_ARGUMENT; }
+ PAT_AT(pat, d, dn);
+ if (!dn) { return GRN_INVALID_ARGUMENT; }
+ PAT_DEL_OFF(ln);
+ PAT_DEL_OFF(dn);
+ {
+ grn_id r, *p0;
+ pat_node *rn;
+ int c0 = -1, c;
+ uint32_t len = PAT_LEN(dn) * 16;
+ const uint8_t *key = pat_node_get_key(ctx, pat, dn);
+ if (!key) { return GRN_INVALID_ARGUMENT; }
+ PAT_AT(pat, 0, rn);
+ p0 = &rn->lr[1];
+ while ((r = *p0)) {
+ if (r == d) {
+ p = p0;
+ break;
+ }
+ PAT_AT(pat, r, rn);
+ if (!rn) { return GRN_FILE_CORRUPT; }
+ c = PAT_CHK(rn);
+ if (c <= c0 || len <= c) { break; }
+ if (c & 1) {
+ p0 = (c + 1 < len) ? &rn->lr[1] : &rn->lr[0];
+ } else {
+ p0 = &rn->lr[nth_bit((uint8_t *)key, c, len)];
+ }
+ c0 = c;
+ }
+ }
+ if (p) {
+ PAT_CHK_SET(ln, PAT_CHK(dn));
+ ln->lr[1] = dn->lr[1];
+ ln->lr[0] = dn->lr[0];
+ *p = di->ld;
+ } else {
+ /* debug */
+ int j;
+ grn_id dd;
+ grn_pat_delinfo *ddi;
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "failed to find d=%d", d);
+ for (j = (pat->header->curr_del2 + 1) & GRN_PAT_MDELINFOS;
+ j != pat->header->curr_del;
+ j = (j + 1) & GRN_PAT_MDELINFOS) {
+ ddi = &pat->header->delinfos[j];
+ if (ddi->stat != DL_PHASE1) { continue; }
+ PAT_AT(pat, ddi->ld, ln);
+ if (!ln) { continue; }
+ if (!(dd = ddi->d)) { continue; }
+ if (d == ddi->ld) {
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "found!!!, d(%d) become ld of (%d)", d, dd);
+ }
+ }
+ /* debug */
+ }
+ di->stat = DL_PHASE2;
+ di->d = d;
+ // grn_log("delinfo_turn_2< di->d=%d di->ld=%d", di->d, di->ld);
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+delinfo_turn_3(grn_ctx *ctx, grn_pat *pat, grn_pat_delinfo *di)
+{
+ pat_node *dn;
+ uint32_t size;
+ if (di->stat != DL_PHASE2) { return GRN_SUCCESS; }
+ PAT_AT(pat, di->d, dn);
+ if (!dn) { return GRN_INVALID_ARGUMENT; }
+ if (di->shared) {
+ PAT_IMD_ON(dn);
+ size = 0;
+ } else {
+ if (PAT_IMD(dn)) {
+ size = 0;
+ } else {
+ size = PAT_LEN(dn);
+ }
+ }
+ di->stat = DL_EMPTY;
+ // dn->lr[1] = GRN_PAT_DELETED;
+ dn->lr[0] = pat->header->garbages[size];
+ pat->header->garbages[size] = di->d;
+ return GRN_SUCCESS;
+}
+
+inline static grn_pat_delinfo *
+delinfo_new(grn_ctx *ctx, grn_pat *pat)
+{
+ grn_pat_delinfo *res = &pat->header->delinfos[pat->header->curr_del];
+ uint32_t n = (pat->header->curr_del + 1) & GRN_PAT_MDELINFOS;
+ int gap = ((n + GRN_PAT_NDELINFOS - pat->header->curr_del2) & GRN_PAT_MDELINFOS)
+ - (GRN_PAT_NDELINFOS / 2);
+ while (gap-- > 0) {
+ if (delinfo_turn_2(ctx, pat, &pat->header->delinfos[pat->header->curr_del2])) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "d2 failed: %d", pat->header->delinfos[pat->header->curr_del2].ld);
+ }
+ pat->header->curr_del2 = (pat->header->curr_del2 + 1) & GRN_PAT_MDELINFOS;
+ }
+ if (n == pat->header->curr_del3) {
+ if (delinfo_turn_3(ctx, pat, &pat->header->delinfos[pat->header->curr_del3])) {
+ GRN_LOG(ctx, GRN_LOG_CRIT, "d3 failed: %d", pat->header->delinfos[pat->header->curr_del3].ld);
+ }
+ pat->header->curr_del3 = (pat->header->curr_del3 + 1) & GRN_PAT_MDELINFOS;
+ }
+ pat->header->curr_del = n;
+ return res;
+}
+
+/* pat operation */
+
+inline static grn_pat *
+_grn_pat_create(grn_ctx *ctx, grn_pat *pat,
+ const char *path, uint32_t key_size,
+ uint32_t value_size, uint32_t flags) {
+ grn_io *io;
+ pat_node *node0;
+ struct grn_pat_header *header;
+ uint32_t entry_size, w_of_element;
+ grn_encoding encoding = ctx->encoding;
+ if (flags & GRN_OBJ_KEY_WITH_SIS) {
+ entry_size = sizeof(sis_node) + value_size;
+ } else {
+ entry_size = value_size;
+ }
+ for (w_of_element = 0; (1 << w_of_element) < entry_size; w_of_element++) {
+ /* nop */
+ }
+ {
+ grn_io_array_spec array_spec[3];
+ array_spec[segment_key].w_of_element = 0;
+ array_spec[segment_key].max_n_segments = 0x400;
+ array_spec[segment_pat].w_of_element = 4;
+ array_spec[segment_pat].max_n_segments = 1 << (30 - (22 - 4));
+ array_spec[segment_sis].w_of_element = w_of_element;
+ array_spec[segment_sis].max_n_segments = 1 << (30 - (22 - w_of_element));
+ io = grn_io_create_with_array(ctx, path, sizeof(struct grn_pat_header),
+ GRN_PAT_SEGMENT_SIZE, grn_io_auto, 3, array_spec);
+ }
+ if (!io) { return NULL; }
+ if (encoding == GRN_ENC_DEFAULT) { encoding = grn_gctx.encoding; }
+ header = grn_io_header(io);
+ grn_io_set_type(io, GRN_TABLE_PAT_KEY);
+ header->flags = flags;
+ header->encoding = encoding;
+ header->key_size = key_size;
+ header->value_size = value_size;
+ header->n_entries = 0;
+ header->curr_rec = 0;
+ header->curr_key = -1;
+ header->curr_del = 0;
+ header->curr_del2 = 0;
+ header->curr_del3 = 0;
+ header->n_garbages = 0;
+ header->tokenizer = GRN_ID_NIL;
+ if (header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ pat->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ header->normalizer = grn_obj_id(ctx, pat->normalizer);
+ } else {
+ pat->normalizer = NULL;
+ header->normalizer = GRN_ID_NIL;
+ }
+ GRN_PTR_INIT(&(pat->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ pat->io = io;
+ pat->header = header;
+ pat->key_size = key_size;
+ pat->value_size = value_size;
+ pat->tokenizer = NULL;
+ pat->encoding = encoding;
+ pat->obj.header.flags = header->flags;
+ if (!(node0 = pat_get(ctx, pat, 0))) {
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ node0->lr[1] = 0;
+ node0->lr[0] = 0;
+ node0->key = 0;
+ return pat;
+}
+
+grn_pat *
+grn_pat_create(grn_ctx *ctx, const char *path, uint32_t key_size,
+ uint32_t value_size, uint32_t flags)
+{
+ grn_pat *pat;
+ if (!(pat = GRN_MALLOC(sizeof(grn_pat)))) {
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(pat, GRN_TABLE_PAT_KEY);
+ if (!_grn_pat_create(ctx, pat, path, key_size, value_size, flags)) {
+ GRN_FREE(pat);
+ return NULL;
+ }
+ pat->cache = NULL;
+ pat->cache_size = 0;
+ return pat;
+}
+
+/*
+ grn_pat_cache_enable() and grn_pat_cache_disable() are not thread-safe.
+ So far, they can be used only from single threaded programs.
+ */
+
+grn_rc
+grn_pat_cache_enable(grn_ctx *ctx, grn_pat *pat, uint32_t cache_size)
+{
+ if (pat->cache || pat->cache_size) {
+ ERR(GRN_INVALID_ARGUMENT, "cache is already enabled");
+ return ctx->rc;
+ }
+ if (cache_size & (cache_size - 1)) {
+ ERR(GRN_INVALID_ARGUMENT, "cache_size(%u) must be a power of two", cache_size);
+ return ctx->rc;
+ }
+ if (!(pat->cache = GRN_CALLOC(cache_size * sizeof(grn_id)))) {
+ return ctx->rc;
+ }
+ pat->cache_size = cache_size;
+ return GRN_SUCCESS;
+}
+
+void
+grn_pat_cache_disable(grn_ctx *ctx, grn_pat *pat)
+{
+ if (pat->cache) {
+ GRN_FREE(pat->cache);
+ pat->cache_size = 0;
+ pat->cache = NULL;
+ }
+}
+
+grn_pat *
+grn_pat_open(grn_ctx *ctx, const char *path)
+{
+ grn_io *io;
+ grn_pat *pat;
+ pat_node *node0;
+ struct grn_pat_header *header;
+ io = grn_io_open(ctx, path, grn_io_auto);
+ if (!io) { return NULL; }
+ header = grn_io_header(io);
+ if (grn_io_get_type(io) != GRN_TABLE_PAT_KEY) {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ if (!(pat = GRN_MALLOC(sizeof(grn_pat)))) {
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(pat, GRN_TABLE_PAT_KEY);
+ pat->io = io;
+ pat->header = header;
+ pat->key_size = header->key_size;
+ pat->value_size = header->value_size;
+ pat->encoding = header->encoding;
+ pat->tokenizer = grn_ctx_at(ctx, header->tokenizer);
+ if (header->flags & GRN_OBJ_KEY_NORMALIZE) {
+ header->flags &= ~GRN_OBJ_KEY_NORMALIZE;
+ pat->normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ header->normalizer = grn_obj_id(ctx, pat->normalizer);
+ } else {
+ pat->normalizer = grn_ctx_at(ctx, header->normalizer);
+ }
+ GRN_PTR_INIT(&(pat->token_filters), GRN_OBJ_VECTOR, GRN_ID_NIL);
+ pat->obj.header.flags = header->flags;
+ PAT_AT(pat, 0, node0);
+ if (!node0) {
+ grn_io_close(ctx, io);
+ GRN_GFREE(pat);
+ return NULL;
+ }
+ pat->cache = NULL;
+ pat->cache_size = 0;
+ return pat;
+}
+
+grn_rc
+grn_pat_close(grn_ctx *ctx, grn_pat *pat)
+{
+ grn_rc rc;
+ if ((rc = grn_io_close(ctx, pat->io))) {
+ ERR(rc, "grn_io_close failed");
+ } else {
+ GRN_OBJ_FIN(ctx, &(pat->token_filters));
+ if (pat->cache) { grn_pat_cache_disable(ctx, pat); }
+ GRN_FREE(pat);
+ }
+ return rc;
+}
+
+grn_rc
+grn_pat_remove(grn_ctx *ctx, const char *path)
+{
+ if (!path) {
+ ERR(GRN_INVALID_ARGUMENT, "path is null");
+ return GRN_INVALID_ARGUMENT;
+ }
+ return grn_io_remove(ctx, path);
+}
+
+grn_rc
+grn_pat_truncate(grn_ctx *ctx, grn_pat *pat)
+{
+ grn_rc rc;
+ const char *io_path;
+ char *path;
+ uint32_t key_size, value_size, flags;
+
+ if ((io_path = grn_io_path(pat->io)) && *io_path != '\0') {
+ if (!(path = GRN_STRDUP(io_path))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ path = NULL;
+ }
+ key_size = pat->key_size;
+ value_size = pat->value_size;
+ flags = pat->obj.header.flags;
+ if ((rc = grn_io_close(ctx, pat->io))) { goto exit; }
+ pat->io = NULL;
+ if (path && (rc = grn_io_remove(ctx, path))) { goto exit; }
+ if (!_grn_pat_create(ctx, pat, path, key_size, value_size, flags)) {
+ rc = GRN_UNKNOWN_ERROR;
+ }
+ if (pat->cache && pat->cache_size) {
+ memset(pat->cache, 0, pat->cache_size * sizeof(grn_id));
+ }
+exit:
+ if (path) { GRN_FREE(path); }
+ return rc;
+}
+
+inline static grn_id
+_grn_pat_add(grn_ctx *ctx, grn_pat *pat, const uint8_t *key, uint32_t size, uint32_t *new, uint32_t *lkey)
+{
+ grn_id r, r0, *p0, *p1 = NULL;
+ pat_node *rn, *rn0;
+ int c, c0 = -1, c1 = -1, len;
+
+ uint32_t cache_id = 0;
+ if (pat->cache) {
+ const uint8_t *p = key;
+ uint32_t length = size;
+ for (cache_id = 0; length--; p++) { cache_id = (cache_id * 37) + *p; }
+ cache_id &= (pat->cache_size - 1);
+ if (pat->cache[cache_id]) {
+ PAT_AT(pat, pat->cache[cache_id], rn);
+ if (rn) {
+ const uint8_t *k = pat_node_get_key(ctx, pat, rn);
+ if (k && size == PAT_LEN(rn) && !memcmp(k, key, size)) {
+ return pat->cache[cache_id];
+ }
+ }
+ }
+ }
+
+ *new = 0;
+ len = (int)size * 16;
+ PAT_AT(pat, 0, rn0);
+ p0 = &rn0->lr[1];
+ if (*p0) {
+ uint32_t size2;
+ int xor, mask;
+ const uint8_t *s, *d;
+ for (;;) {
+ if (!(r0 = *p0)) {
+ if (!(s = pat_node_get_key(ctx, pat, rn0))) { return 0; }
+ size2 = PAT_LEN(rn0);
+ break;
+ }
+ PAT_AT(pat, r0, rn0);
+ if (!rn0) { return GRN_ID_NIL; }
+ if (c0 < rn0->check && rn0->check < len) {
+ c1 = c0; c0 = rn0->check;
+ p1 = p0;
+ if (c0 & 1) {
+ p0 = (c0 + 1 < len) ? &rn0->lr[1] : &rn0->lr[0];
+ } else {
+ p0 = &rn0->lr[nth_bit(key, c0, len)];
+ }
+ } else {
+ if (!(s = pat_node_get_key(ctx, pat, rn0))) { return 0; }
+ size2 = PAT_LEN(rn0);
+ if (size == size2 && !memcmp(s, key, size)) {
+ if (pat->cache) { pat->cache[cache_id] = r0; }
+ return r0;
+ }
+ break;
+ }
+ }
+ {
+ uint32_t min = size > size2 ? size2 : size;
+ for (c = 0, d = key; min && *s == *d; c += 16, s++, d++, min--);
+ if (min) {
+ for (xor = *s ^ *d, mask = 0x80; !(xor & mask); mask >>= 1, c += 2);
+ } else {
+ c--;
+ }
+ }
+ if (c == c0 && !*p0) {
+ if (c < len - 2) { c += 2; }
+ } else {
+ if (c < c0) {
+ if (c > c1) {
+ p0 = p1;
+ } else {
+ PAT_AT(pat, 0, rn0);
+ p0 = &rn0->lr[1];
+ while ((r0 = *p0)) {
+ PAT_AT(pat, r0, rn0);
+ if (!rn0) { return 0; }
+ c0 = PAT_CHK(rn0);
+ if (c < c0) { break; }
+ if (c0 & 1) {
+ p0 = (c0 + 1 < len) ? &rn0->lr[1] : &rn0->lr[0];
+ } else {
+ p0 = &rn0->lr[nth_bit(key, c0, len)];
+ }
+ }
+ }
+ }
+ }
+ if (c >= len) { return 0; }
+ } else {
+ c = len - 2;
+ }
+ {
+ uint32_t size2 = size > sizeof(uint32_t) ? size : 0;
+ if (*lkey && size2) {
+ if (pat->header->garbages[0]) {
+ r = pat->header->garbages[0];
+ pat->header->n_entries++;
+ pat->header->n_garbages--;
+ PAT_AT(pat, r, rn);
+ if (!rn) { return 0; }
+ pat->header->garbages[0] = rn->lr[0];
+ } else {
+ if (!(rn = pat_node_new(ctx, pat, &r))) { return 0; }
+ }
+ PAT_IMD_OFF(rn);
+ PAT_LEN_SET(rn, size);
+ rn->key = *lkey;
+ } else {
+ if (pat->header->garbages[size2]) {
+ uint8_t *keybuf;
+ r = pat->header->garbages[size2];
+ pat->header->n_entries++;
+ pat->header->n_garbages--;
+ PAT_AT(pat, r, rn);
+ if (!rn) { return 0; }
+ pat->header->garbages[size2] = rn->lr[0];
+ if (!(keybuf = pat_node_get_key(ctx, pat, rn))) { return 0; }
+ PAT_LEN_SET(rn, size);
+ memcpy(keybuf, key, size);
+ } else {
+ if (!(rn = pat_node_new(ctx, pat, &r))) { return 0; }
+ pat_node_set_key(ctx, pat, rn, key, size);
+ }
+ *lkey = rn->key;
+ }
+ }
+ PAT_CHK_SET(rn, c);
+ PAT_DEL_OFF(rn);
+ if ((c & 1) ? (c + 1 < len) : nth_bit(key, c, len)) {
+ rn->lr[1] = r;
+ rn->lr[0] = *p0;
+ } else {
+ rn->lr[1] = *p0;
+ rn->lr[0] = r;
+ }
+ // smp_wmb();
+ *p0 = r;
+ *new = 1;
+ if (pat->cache) { pat->cache[cache_id] = r; }
+ return r;
+}
+
+inline static int
+chop(grn_ctx *ctx, grn_pat *pat, const char **key, const char *end, uint32_t *lkey)
+{
+ size_t len = grn_charlen(ctx, *key, end);
+ if (len) {
+ *lkey += len;
+ *key += len;
+ return **key;
+ } else {
+ return 0;
+ }
+}
+
+#define MAX_FIXED_KEY_SIZE (sizeof(int64_t))
+
+#define KEY_NEEDS_CONVERT(pat,size) \
+ (!((pat)->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE) && (size) <= MAX_FIXED_KEY_SIZE)
+
+#define KEY_ENC(pat,keybuf,key,size) do {\
+ switch ((pat)->obj.header.flags & GRN_OBJ_KEY_MASK) {\
+ case GRN_OBJ_KEY_UINT :\
+ if (((pat)->obj.header.domain != GRN_DB_TOKYO_GEO_POINT) &&\
+ ((pat)->obj.header.domain != GRN_DB_WGS84_GEO_POINT)) {\
+ grn_hton((keybuf), (key), (size));\
+ break;\
+ }\
+ case GRN_OBJ_KEY_GEO_POINT :\
+ grn_gton((keybuf), (key), (size));\
+ break;\
+ case GRN_OBJ_KEY_INT :\
+ grn_hton((keybuf), (key), (size));\
+ *((uint8_t *)(keybuf)) ^= 0x80;\
+ break;\
+ case GRN_OBJ_KEY_FLOAT :\
+ if ((size) == sizeof(int64_t)) {\
+ int64_t v = *(int64_t *)(key);\
+ v ^= ((v >> 63)|(1LL << 63));\
+ grn_hton((keybuf), &v, (size));\
+ }\
+ break;\
+ }\
+} while (0)
+
+#define KEY_DEC(pat,keybuf,key,size) do {\
+ switch ((pat)->obj.header.flags & GRN_OBJ_KEY_MASK) {\
+ case GRN_OBJ_KEY_UINT :\
+ if (((pat)->obj.header.domain != GRN_DB_TOKYO_GEO_POINT) &&\
+ ((pat)->obj.header.domain != GRN_DB_WGS84_GEO_POINT)) {\
+ grn_ntoh((keybuf), (key), (size));\
+ break;\
+ }\
+ case GRN_OBJ_KEY_GEO_POINT :\
+ grn_ntog((keybuf), (key), (size));\
+ break;\
+ case GRN_OBJ_KEY_INT :\
+ grn_ntohi((keybuf), (key), (size));\
+ break;\
+ case GRN_OBJ_KEY_FLOAT :\
+ if ((size) == sizeof(int64_t)) {\
+ int64_t v;\
+ grn_hton(&v, (key), (size));\
+ *((int64_t *)(keybuf)) = v ^ (((v^(1LL<<63))>> 63)|(1LL<<63)); \
+ }\
+ break;\
+ }\
+} while (0)
+
+#define KEY_ENCODE(pat,keybuf,key,size) do {\
+ if (KEY_NEEDS_CONVERT(pat,size)) {\
+ KEY_ENC((pat), (keybuf), (key), (size));\
+ (key) = (keybuf);\
+ }\
+} while (0)
+
+grn_id
+grn_pat_add(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size,
+ void **value, int *added)
+{
+ uint32_t new, lkey = 0;
+ grn_id r0;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ if (!key || !key_size) { return GRN_ID_NIL; }
+ if (key_size > GRN_TABLE_MAX_KEY_SIZE) {
+ ERR(GRN_INVALID_ARGUMENT, "too long key: (%u)", key_size);
+ return GRN_ID_NIL;
+ }
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ r0 = _grn_pat_add(ctx, pat, (uint8_t *)key, key_size, &new, &lkey);
+ if (added) { *added = new; }
+ if (r0 && (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) &&
+ (*((uint8_t *)key) & 0x80)) { // todo: refine!!
+ sis_node *sl, *sr;
+ grn_id l = r0, r;
+ if (new && (sl = sis_get(ctx, pat, l))) {
+ const char *sis = key, *end = sis + key_size;
+ sl->children = l;
+ sl->sibling = 0;
+ while (chop(ctx, pat, &sis, end, &lkey)) {
+ if (!(*sis & 0x80)) { break; }
+ if (!(r = _grn_pat_add(ctx, pat, (uint8_t *)sis, end - sis, &new, &lkey))) {
+ break;
+ }
+ if (!(sr = sis_get(ctx, pat, r))) { break; }
+ if (new) {
+ sl->sibling = r;
+ sr->children = l;
+ sr->sibling = 0;
+ } else {
+ sl->sibling = sr->children;
+ sr->children = l;
+ break;
+ }
+ l = r;
+ sl = sr;
+ }
+ }
+ }
+ if (r0 && value) {
+ byte *v = (byte *)sis_get(ctx, pat, r0);
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ *value = v + sizeof(sis_node);
+ } else {
+ *value = v;
+ }
+ }
+ return r0;
+}
+
+inline static grn_id
+_grn_pat_get(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size, void **value)
+{
+ grn_id r;
+ pat_node *rn;
+ int c0 = -1, c;
+ uint32_t len = key_size * 16;
+ PAT_AT(pat, 0, rn);
+ for (r = rn->lr[1]; r;) {
+ PAT_AT(pat, r, rn);
+ if (!rn) { break; /* corrupt? */ }
+ c = PAT_CHK(rn);
+ if (len <= c) { break; }
+ if (c <= c0) {
+ const uint8_t *k = pat_node_get_key(ctx, pat, rn);
+ if (k && key_size == PAT_LEN(rn) && !memcmp(k, key, key_size)) {
+ if (value) {
+ byte *v = (byte *)sis_get(ctx, pat, r);
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ *value = v + sizeof(sis_node);
+ } else {
+ *value = v;
+ }
+ }
+ return r;
+ }
+ break;
+ }
+ if (c & 1) {
+ r = (c + 1 < len) ? rn->lr[1] : rn->lr[0];
+ } else {
+ r = rn->lr[nth_bit((uint8_t *)key, c, len)];
+ }
+ c0 = c;
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_pat_get(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size, void **value)
+{
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ return _grn_pat_get(ctx, pat, key, key_size, value);
+}
+
+grn_id
+grn_pat_nextid(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size)
+{
+ grn_id r = GRN_ID_NIL;
+ if (pat && key) {
+ if (!(r = pat->header->garbages[key_size > sizeof(uint32_t) ? key_size : 0])) {
+ r = pat->header->curr_rec + 1;
+ }
+ }
+ return r;
+}
+
+static void
+get_tc(grn_ctx *ctx, grn_pat *pat, grn_hash *h, pat_node *rn)
+{
+ grn_id id;
+ pat_node *node;
+ id = rn->lr[1];
+ if (id) {
+ PAT_AT(pat, id, node);
+ if (node) {
+ if (PAT_CHK(node) > PAT_CHK(rn)) {
+ get_tc(ctx, pat, h, node);
+ } else {
+ grn_hash_add(ctx, h, &id, sizeof(grn_id), NULL, NULL);
+ }
+ }
+ }
+ id = rn->lr[0];
+ if (id) {
+ PAT_AT(pat, id, node);
+ if (node) {
+ if (PAT_CHK(node) > PAT_CHK(rn)) {
+ get_tc(ctx, pat, h, node);
+ } else {
+ grn_hash_add(ctx, h, &id, sizeof(grn_id), NULL, NULL);
+ }
+ }
+ }
+}
+
+grn_rc
+grn_pat_prefix_search(grn_ctx *ctx, grn_pat *pat,
+ const void *key, uint32_t key_size, grn_hash *h)
+{
+ int c0 = -1, c;
+ const uint8_t *k;
+ uint32_t len = key_size * 16;
+ grn_id r;
+ pat_node *rn;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ PAT_AT(pat, 0, rn);
+ r = rn->lr[1];
+ while (r) {
+ PAT_AT(pat, r, rn);
+ if (!rn) { return GRN_FILE_CORRUPT; }
+ c = PAT_CHK(rn);
+ if (c0 < c && c < len - 1) {
+ if (c & 1) {
+ r = (c + 1 < len) ? rn->lr[1] : rn->lr[0];
+ } else {
+ r = rn->lr[nth_bit((uint8_t *)key, c, len)];
+ }
+ c0 = c;
+ continue;
+ }
+ if (!(k = pat_node_get_key(ctx, pat, rn))) { break; }
+ if (PAT_LEN(rn) < key_size) { break; }
+ if (!memcmp(k, key, key_size)) {
+ if (c >= len - 1) {
+ get_tc(ctx, pat, h, rn);
+ } else {
+ grn_hash_add(ctx, h, &r, sizeof(grn_id), NULL, NULL);
+ }
+ return GRN_SUCCESS;
+ }
+ break;
+ }
+ return GRN_END_OF_DATA;
+}
+
+grn_hash *
+grn_pat_prefix_search2(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size)
+{
+ grn_hash *h;
+ if (!pat || !key) { return NULL; }
+ if ((h = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, 0))) {
+ if (grn_pat_prefix_search(ctx, pat, key, key_size, h)) {
+ grn_hash_close(ctx, h);
+ h = NULL;
+ }
+ }
+ return h;
+}
+
+grn_rc
+grn_pat_suffix_search(grn_ctx *ctx, grn_pat *pat,
+ const void *key, uint32_t key_size, grn_hash *h)
+{
+ grn_id r;
+ if ((r = grn_pat_get(ctx, pat, key, key_size, NULL))) {
+ uint32_t *offset;
+ if (grn_hash_add(ctx, h, &r, sizeof(grn_id), (void **) &offset, NULL)) {
+ *offset = 0;
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) { sis_collect(ctx, pat, h, r, 1); }
+ return GRN_SUCCESS;
+ }
+ }
+ return GRN_END_OF_DATA;
+}
+
+grn_hash *
+grn_pat_suffix_search2(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size)
+{
+ grn_hash *h;
+ if (!pat || !key) { return NULL; }
+ if ((h = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(uint32_t), 0))) {
+ if (grn_pat_suffix_search(ctx, pat, key, key_size, h)) {
+ grn_hash_close(ctx, h);
+ h = NULL;
+ }
+ }
+ return h;
+}
+
+grn_id
+grn_pat_lcp_search(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size)
+{
+ pat_node *rn;
+ grn_id r, r2 = GRN_ID_NIL;
+ uint32_t len = key_size * 16;
+ int c0 = -1, c;
+ if (!pat || !key || !(pat->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE)) { return GRN_ID_NIL; }
+ PAT_AT(pat, 0, rn);
+ for (r = rn->lr[1]; r;) {
+ PAT_AT(pat, r, rn);
+ if (!rn) { break; /* corrupt? */ }
+ c = PAT_CHK(rn);
+ if (c <= c0) {
+ if (PAT_LEN(rn) <= key_size) {
+ uint8_t *p = pat_node_get_key(ctx, pat, rn);
+ if (!p) { break; }
+ if (!memcmp(p, key, PAT_LEN(rn))) { return r; }
+ }
+ break;
+ }
+ if (len <= c) { break; }
+ if (c & 1) {
+ uint8_t *p;
+ pat_node *rn0;
+ grn_id r0 = rn->lr[0];
+ PAT_AT(pat, r0, rn0);
+ if (!rn0) { break; /* corrupt? */ }
+ p = pat_node_get_key(ctx, pat, rn0);
+ if (!p) { break; }
+ if (PAT_LEN(rn0) <= key_size && !memcmp(p, key, PAT_LEN(rn0))) { r2 = r0; }
+ r = (c + 1 < len) ? rn->lr[1] : rn->lr[0];
+ } else {
+ r = rn->lr[nth_bit((uint8_t *)key, c, len)];
+ }
+ c0 = c;
+ }
+ return r2;
+}
+
+inline static grn_rc
+_grn_pat_del(grn_ctx *ctx, grn_pat *pat, const char *key, uint32_t key_size, int shared,
+ grn_table_delete_optarg *optarg)
+{
+ grn_pat_delinfo *di;
+ uint8_t direction;
+ pat_node *rn, *rn0 = NULL, *rno;
+ int c, c0 = -1, ch;
+ uint32_t len = key_size * 16;
+ grn_id r, otherside, *proot, *p, *p0 = NULL;
+
+ di = delinfo_new(ctx, pat); /* must be called before find rn */
+ di->shared = shared;
+ PAT_AT(pat, 0, rn);
+ c = -1;
+ proot = p = &rn->lr[1];
+ for (;;) {
+ if (!(r = *p)) { return GRN_INVALID_ARGUMENT; }
+ PAT_AT(pat, r, rn);
+ if (!rn) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(rn);
+ if (len <= ch) { return GRN_INVALID_ARGUMENT; }
+ if (c >= ch) {
+ const uint8_t *k = pat_node_get_key(ctx, pat, rn);
+ if (!k) { return GRN_INVALID_ARGUMENT; }
+ if (key_size == PAT_LEN(rn) && !memcmp(k, key, key_size)) {
+ break; /* found */
+ } else { return GRN_INVALID_ARGUMENT; }
+ }
+ c0 = c;
+ p0 = p;
+ if ((c = ch) & 1) {
+ p = (c + 1 < len) ? &rn->lr[1] : &rn->lr[0];
+ } else {
+ p = &rn->lr[nth_bit((uint8_t *)key, c, len)];
+ }
+ rn0 = rn;
+ }
+ if (optarg && optarg->func &&
+ !optarg->func(ctx, (grn_obj *)pat, r, optarg->func_arg)) {
+ return GRN_SUCCESS;
+ }
+ direction = (rn0->lr[1] == r);
+ otherside = direction ? rn0->lr[0] : rn0->lr[1];
+ if (rn == rn0) {
+ di->stat = DL_PHASE2;
+ di->d = r;
+ if (otherside) {
+ PAT_AT(pat, otherside, rno);
+ if (rno && c0 < PAT_CHK(rno) && PAT_CHK(rno) <= c) {
+ if (!delinfo_search(pat, otherside)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "no delinfo found %d", otherside);
+ }
+ PAT_CHK_SET(rno, 0);
+ }
+ if (proot == p0 && !rno->check) { rno->lr[0] = rno->lr[1] = otherside; }
+ }
+ *p0 = otherside;
+ } else {
+ grn_pat_delinfo *ldi = NULL, *ddi = NULL;
+ if (PAT_DEL(rn)) { ldi = delinfo_search(pat, r); }
+ if (PAT_DEL(rn0)) { ddi = delinfo_search(pat, *p0); }
+ if (ldi) {
+ PAT_DEL_OFF(rn);
+ di->stat = DL_PHASE2;
+ if (ddi) {
+ PAT_DEL_OFF(rn0);
+ ddi->stat = DL_PHASE2;
+ if (ddi == ldi) {
+ if (r != ddi->ld) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "r(%d) != ddi->ld(%d)", r, ddi->ld);
+ }
+ di->d = r;
+ } else {
+ ldi->ld = ddi->ld;
+ di->d = r;
+ }
+ } else {
+ PAT_DEL_ON(rn0);
+ ldi->ld = *p0;
+ di->d = r;
+ }
+ } else {
+ PAT_DEL_ON(rn);
+ if (ddi) {
+ if (ddi->d != *p0) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "ddi->d(%d) != *p0(%d)", ddi->d, *p0);
+ }
+ PAT_DEL_OFF(rn0);
+ ddi->stat = DL_PHASE2;
+ di->stat = DL_PHASE1;
+ di->ld = ddi->ld;
+ di->d = r;
+ /*
+ PAT_DEL_OFF(rn0);
+ ddi->d = r;
+ di->stat = DL_PHASE2;
+ di->d = *p0;
+ */
+ } else {
+ PAT_DEL_ON(rn0);
+ di->stat = DL_PHASE1;
+ di->ld = *p0;
+ di->d = r;
+ // grn_log("pat_del d=%d ld=%d stat=%d", r, *p0, DL_PHASE1);
+ }
+ }
+ if (*p0 == otherside) {
+ PAT_CHK_SET(rn0, 0);
+ if (proot == p0 && !rn0->check) { rn0->lr[0] = rn0->lr[1] = otherside; }
+ } else {
+ if (otherside) {
+ PAT_AT(pat, otherside, rno);
+ if (rno && c0 < PAT_CHK(rno) && PAT_CHK(rno) <= c) {
+ if (!delinfo_search(pat, otherside)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "no delinfo found %d", otherside);
+ }
+ PAT_CHK_SET(rno, 0);
+ }
+ if (proot == p0 && !rno->check) { rno->lr[0] = rno->lr[1] = otherside; }
+ }
+ *p0 = otherside;
+ }
+ }
+ pat->header->n_entries--;
+ pat->header->n_garbages++;
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+_grn_pat_delete(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size,
+ grn_table_delete_optarg *optarg)
+{
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ grn_id id = grn_pat_get(ctx, pat, key, key_size, NULL);
+ if (id && grn_pat_delete_with_sis(ctx, pat, id, optarg)) {
+ return GRN_SUCCESS;
+ }
+ return GRN_INVALID_ARGUMENT;
+ }
+ return _grn_pat_del(ctx, pat, key, key_size, 0, optarg);
+}
+
+grn_rc
+grn_pat_delete(grn_ctx *ctx, grn_pat *pat, const void *key, uint32_t key_size,
+ grn_table_delete_optarg *optarg)
+{
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ if (!pat || !key || !key_size) { return GRN_INVALID_ARGUMENT; }
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ return _grn_pat_delete(ctx, pat, key, key_size, optarg);
+}
+
+uint32_t
+grn_pat_size(grn_ctx *ctx, grn_pat *pat)
+{
+ if (!pat) { return GRN_INVALID_ARGUMENT; }
+ return pat->header->n_entries;
+}
+
+const char *
+_grn_pat_key(grn_ctx *ctx, grn_pat *pat, grn_id id, uint32_t *key_size)
+{
+ pat_node *node;
+ uint8_t *key;
+ PAT_AT(pat, id, node);
+ if (!node) {
+ *key_size = 0;
+ return NULL;
+ }
+ key = pat_node_get_key(ctx, pat, node);
+ if (key) {
+ *key_size = PAT_LEN(node);
+ } else {
+ *key_size = 0;
+ }
+ return (const char *)key;
+}
+
+grn_rc
+grn_pat_delete_by_id(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ if (!pat || !id) { return GRN_INVALID_ARGUMENT; }
+ {
+ uint32_t key_size;
+ const char *key = _grn_pat_key(ctx, pat, id, &key_size);
+ return _grn_pat_delete(ctx, pat, key, key_size, optarg);
+ }
+}
+
+int
+grn_pat_get_key(grn_ctx *ctx, grn_pat *pat, grn_id id, void *keybuf, int bufsize)
+{
+ int len;
+ uint8_t *key;
+ pat_node *node;
+ if (!pat) { return GRN_INVALID_ARGUMENT; }
+ PAT_AT(pat, id, node);
+ if (!node) { return 0; }
+ if (!(key = pat_node_get_key(ctx, pat, node))) { return 0; }
+ len = PAT_LEN(node);
+ if (keybuf && bufsize >= len) {
+ if (KEY_NEEDS_CONVERT(pat, len)) {
+ KEY_DEC(pat, keybuf, key, len);
+ } else {
+ memcpy(keybuf, key, len);
+ }
+ }
+ return len;
+}
+
+int
+grn_pat_get_key2(grn_ctx *ctx, grn_pat *pat, grn_id id, grn_obj *bulk)
+{
+ uint32_t len;
+ uint8_t *key;
+ pat_node *node;
+ if (!pat) { return GRN_INVALID_ARGUMENT; }
+ PAT_AT(pat, id, node);
+ if (!node) { return 0; }
+ if (!(key = pat_node_get_key(ctx, pat, node))) { return 0; }
+ len = PAT_LEN(node);
+ if (KEY_NEEDS_CONVERT(pat, len)) {
+ if (bulk->header.impl_flags & GRN_OBJ_REFER) {
+ GRN_TEXT_INIT(bulk, 0);
+ }
+ if (!grn_bulk_reserve(ctx, bulk, len)) {
+ char *curr = GRN_BULK_CURR(bulk);
+ KEY_DEC(pat, curr, key, len);
+ grn_bulk_truncate(ctx, bulk, GRN_BULK_VSIZE(bulk) + len);
+ }
+ } else {
+ if (bulk->header.impl_flags & GRN_OBJ_REFER) {
+ bulk->u.b.head = (char *)key;
+ bulk->u.b.curr = (char *)key + len;
+ } else {
+ grn_bulk_write(ctx, bulk, (char *)key, len);
+ }
+ }
+ return len;
+}
+
+int
+grn_pat_get_value(grn_ctx *ctx, grn_pat *pat, grn_id id, void *valuebuf)
+{
+ int value_size = (int)pat->value_size;
+ if (value_size) {
+ byte *v = (byte *)sis_at(ctx, pat, id);
+ if (v) {
+ if (valuebuf) {
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ memcpy(valuebuf, v + sizeof(sis_node), value_size);
+ } else {
+ memcpy(valuebuf, v, value_size);
+ }
+ }
+ return value_size;
+ }
+ }
+ return 0;
+}
+
+const char *
+grn_pat_get_value_(grn_ctx *ctx, grn_pat *pat, grn_id id, uint32_t *size)
+{
+ const char *value = NULL;
+ if ((*size = pat->value_size)) {
+ if ((value = (const char *)sis_at(ctx, pat, id))
+ && (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS)) {
+ value += sizeof(sis_node);
+ }
+ }
+ return value;
+}
+
+grn_rc
+grn_pat_set_value(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ const void *value, int flags)
+{
+ if (value) {
+ uint32_t value_size = pat->value_size;
+ if (value_size) {
+ byte *v = (byte *)sis_get(ctx, pat, id);
+ if (v) {
+ if (pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) { v += sizeof(sis_node); }
+ switch ((flags & GRN_OBJ_SET_MASK)) {
+ case GRN_OBJ_SET :
+ memcpy(v, value, value_size);
+ return GRN_SUCCESS;
+ case GRN_OBJ_INCR :
+ switch (value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)v) += *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)v) += *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ case GRN_OBJ_DECR :
+ switch (value_size) {
+ case sizeof(int32_t) :
+ *((int32_t *)v) -= *((int32_t *)value);
+ return GRN_SUCCESS;
+ case sizeof(int64_t) :
+ *((int64_t *)v) -= *((int64_t *)value);
+ return GRN_SUCCESS;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ }
+ break;
+ default :
+ // todo : support other types.
+ return GRN_INVALID_ARGUMENT;
+ }
+ } else {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ }
+ return GRN_INVALID_ARGUMENT;
+}
+
+grn_rc
+grn_pat_info(grn_ctx *ctx, grn_pat *pat, int *key_size, unsigned int *flags,
+ grn_encoding *encoding, unsigned int *n_entries, unsigned int *file_size)
+{
+ ERRCLR(NULL);
+ if (!pat) { return GRN_INVALID_ARGUMENT; }
+ if (key_size) { *key_size = pat->key_size; }
+ if (flags) { *flags = pat->obj.header.flags; }
+ if (encoding) { *encoding = pat->encoding; }
+ if (n_entries) { *n_entries = pat->header->n_entries; }
+ if (file_size) {
+ grn_rc rc;
+ uint64_t tmp = 0;
+ if ((rc = grn_io_size(ctx, pat->io, &tmp))) {
+ return rc;
+ }
+ *file_size = (unsigned int) tmp; /* FIXME: inappropriate cast */
+ }
+ return GRN_SUCCESS;
+}
+
+int
+grn_pat_delete_with_sis(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ grn_table_delete_optarg *optarg)
+{
+ int level = 0, shared;
+ const char *key = NULL, *_key;
+ sis_node *sp, *ss = NULL, *si = sis_at(ctx, pat, id);
+ while (id) {
+ pat_node *rn;
+ uint32_t key_size;
+ if ((si && si->children && si->children != id) ||
+ (optarg && optarg->func &&
+ !optarg->func(ctx, (grn_obj *)pat, id, optarg->func_arg))) {
+ break;
+ }
+ PAT_AT(pat, id, rn);
+ if (!(_key = (char *)pat_node_get_key(ctx, pat, rn))) { return 0; }
+ if (_key == key) {
+ shared = 1;
+ } else {
+ key = _key;
+ shared = 0;
+ }
+ key_size = PAT_LEN(rn);
+ if (key && key_size) { _grn_pat_del(ctx, pat, key, key_size, shared, NULL); }
+ if (si) {
+ grn_id *p, sid;
+ uint32_t lkey = 0;
+ if ((*key & 0x80) && chop(ctx, pat, &key, key + key_size, &lkey)) {
+ if ((sid = grn_pat_get(ctx, pat, key, key_size - lkey, NULL)) &&
+ (ss = sis_at(ctx, pat, sid))) {
+ for (p = &ss->children; *p && *p != sid; p = &sp->sibling) {
+ if (*p == id) {
+ *p = si->sibling;
+ break;
+ }
+ if (!(sp = sis_at(ctx, pat, *p))) { break; }
+ }
+ }
+ } else {
+ sid = GRN_ID_NIL;
+ }
+ si->sibling = 0;
+ si->children = 0;
+ id = sid;
+ si = ss;
+ } else {
+ id = GRN_ID_NIL;
+ }
+ level++;
+ }
+ if (level) {
+ uint32_t lkey = 0;
+ while (id && key) {
+ uint32_t key_size;
+ if (_grn_pat_key(ctx, pat, id, &key_size) != key) { break; }
+ {
+ pat_node *rn;
+ PAT_AT(pat, id, rn);
+ if (!rn) { break; }
+ if (lkey) {
+ rn->key = lkey;
+ } else {
+ pat_node_set_key(ctx, pat, rn, (uint8_t *)key, key_size);
+ lkey = rn->key;
+ }
+ }
+ {
+ const char *end = key + key_size;
+ if (!((*key & 0x80) && chop(ctx, pat, &key, end, &lkey))) { break; }
+ id = grn_pat_get(ctx, pat, key, end - key, NULL);
+ }
+ }
+ }
+ return level;
+}
+
+grn_id
+grn_pat_next(grn_ctx *ctx, grn_pat *pat, grn_id id)
+{
+ while (++id <= pat->header->curr_rec) {
+ uint32_t key_size;
+ const char *key = _grn_pat_key(ctx, pat, id, &key_size);
+ if (id == grn_pat_get(ctx, pat, key, key_size, NULL)) {
+ return id;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_pat_at(grn_ctx *ctx, grn_pat *pat, grn_id id)
+{
+ uint32_t key_size;
+ const char *key = _grn_pat_key(ctx, pat, id, &key_size);
+ if (key && (id == _grn_pat_get(ctx, pat, key, key_size, NULL))) { return id; }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_pat_curr_id(grn_ctx *ctx, grn_pat *pat)
+{
+ return pat->header->curr_rec;
+}
+
+int
+grn_pat_scan(grn_ctx *ctx, grn_pat *pat, const char *str, unsigned int str_len,
+ grn_pat_scan_hit *sh, unsigned int sh_size, const char **rest)
+{
+ int n = 0;
+ grn_id tid;
+ if (pat->normalizer) {
+ grn_obj *nstr = grn_string_open(ctx, str, str_len,
+ pat->normalizer, GRN_STRING_WITH_CHECKS);
+ if (nstr) {
+ const short *cp = grn_string_get_checks(ctx, nstr);
+ unsigned int offset = 0, offset0 = 0;
+ unsigned int normalized_length_in_bytes;
+ const char *sp, *se;
+ grn_string_get_normalized(ctx, nstr, &sp, &normalized_length_in_bytes,
+ NULL);
+ se = sp + normalized_length_in_bytes;
+ while (n < sh_size) {
+ if ((tid = grn_pat_lcp_search(ctx, pat, sp, se - sp))) {
+ uint32_t len;
+ _grn_pat_key(ctx, pat, tid, &len);
+ sh[n].id = tid;
+ sh[n].offset = (*cp > 0) ? offset : offset0;
+ while (len--) {
+ if (*cp > 0) { offset0 = offset; offset += *cp; }
+ sp++; cp++;
+ }
+ sh[n].length = offset - sh[n].offset;
+ n++;
+ } else {
+ if (*cp > 0) { offset0 = offset; offset += *cp; }
+ do {
+ sp++; cp++;
+ } while (sp < se && !*cp);
+ }
+ if (se <= sp) { offset = str_len; break; }
+ }
+ if (rest) {
+ grn_string_get_original(ctx, nstr, rest, NULL);
+ *rest += offset;
+ }
+ grn_obj_close(ctx, nstr);
+ } else {
+ n = -1;
+ if (rest) { *rest = str; }
+ }
+ } else {
+ uint32_t len;
+ const char *sp, *se = str + str_len;
+ for (sp = str; sp < se && n < sh_size; sp += len) {
+ if ((tid = grn_pat_lcp_search(ctx, pat, sp, se - sp))) {
+ _grn_pat_key(ctx, pat, tid, &len);
+ sh[n].id = tid;
+ sh[n].offset = sp - str;
+ sh[n].length = len;
+ n++;
+ } else {
+ len = grn_charlen(ctx, sp, se);
+ }
+ if (!len) { break; }
+ }
+ if (rest) { *rest = sp; }
+ }
+ return n;
+}
+
+#define INITIAL_SIZE 512
+
+inline static void
+push(grn_pat_cursor *c, grn_id id, uint16_t check)
+{
+ grn_ctx *ctx = c->ctx;
+ grn_pat_cursor_entry *se;
+ if (c->size <= c->sp) {
+ if (c->ss) {
+ uint32_t size = c->size * 4;
+ grn_pat_cursor_entry *ss = GRN_REALLOC(c->ss, size);
+ if (!ss) { return; /* give up */ }
+ c->ss = ss;
+ c->size = size;
+ } else {
+ if (!(c->ss = GRN_MALLOC(sizeof(grn_pat_cursor_entry) * INITIAL_SIZE))) {
+ return; /* give up */
+ }
+ c->size = INITIAL_SIZE;
+ }
+ }
+ se = &c->ss[c->sp++];
+ se->id = id;
+ se->check = check;
+}
+
+inline static grn_pat_cursor_entry *
+pop(grn_pat_cursor *c)
+{
+ return c->sp ? &c->ss[--c->sp] : NULL;
+}
+
+static grn_id
+grn_pat_cursor_next_by_id(grn_ctx *ctx, grn_pat_cursor *c)
+{
+ grn_pat *pat = c->pat;
+ int dir = (c->obj.header.flags & GRN_CURSOR_DESCENDING) ? -1 : 1;
+ while (c->curr_rec != c->tail) {
+ c->curr_rec += dir;
+ if (pat->header->n_garbages) {
+ uint32_t key_size;
+ const void *key = _grn_pat_key(ctx, pat, c->curr_rec, &key_size);
+ if (_grn_pat_get(ctx, pat, key, key_size, NULL) != c->curr_rec) {
+ continue;
+ }
+ }
+ c->rest--;
+ return c->curr_rec;
+ }
+ return GRN_ID_NIL;
+}
+
+grn_id
+grn_pat_cursor_next(grn_ctx *ctx, grn_pat_cursor *c)
+{
+ pat_node *node;
+ grn_pat_cursor_entry *se;
+ if (!c->rest) { return GRN_ID_NIL; }
+ if ((c->obj.header.flags & GRN_CURSOR_BY_ID)) {
+ return grn_pat_cursor_next_by_id(ctx, c);
+ }
+ while ((se = pop(c))) {
+ grn_id id = se->id;
+ int check = se->check, ch;
+ for (;;) {
+ if (id) {
+ PAT_AT(c->pat, id, node);
+ if (node) {
+ ch = PAT_CHK(node);
+ if (ch > check) {
+ if (c->obj.header.flags & GRN_CURSOR_DESCENDING) {
+ push(c, node->lr[0], ch);
+ id = node->lr[1];
+ } else {
+ push(c, node->lr[1], ch);
+ id = node->lr[0];
+ }
+ check = ch;
+ continue;
+ } else {
+ if (id == c->tail) {
+ c->sp = 0;
+ } else {
+ if (!c->curr_rec && c->tail) {
+ uint32_t lmin, lmax;
+ pat_node *nmin, *nmax;
+ const uint8_t *kmin, *kmax;
+ if (c->obj.header.flags & GRN_CURSOR_DESCENDING) {
+ PAT_AT(c->pat, c->tail, nmin);
+ PAT_AT(c->pat, id, nmax);
+ } else {
+ PAT_AT(c->pat, id, nmin);
+ PAT_AT(c->pat, c->tail, nmax);
+ }
+ lmin = PAT_LEN(nmin);
+ lmax = PAT_LEN(nmax);
+ kmin = pat_node_get_key(ctx, c->pat, nmin);
+ kmax = pat_node_get_key(ctx, c->pat, nmax);
+ if ((lmin < lmax) ?
+ (memcmp(kmin, kmax, lmin) > 0) :
+ (memcmp(kmin, kmax, lmax) >= 0)) {
+ c->sp = 0;
+ break;
+ }
+ }
+ }
+ c->curr_rec = id;
+ c->rest--;
+ return id;
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+void
+grn_pat_cursor_close(grn_ctx *ctx, grn_pat_cursor *c)
+{
+ GRN_ASSERT(c->ctx == ctx);
+ if (c->ss) { GRN_FREE(c->ss); }
+ GRN_FREE(c);
+}
+
+inline static int
+bitcmp(const void *s1, const void *s2, int offset, int length)
+{
+ int r, rest = length + (offset & 7) - 8, bl = offset >> 3, mask = 0xff >> (offset & 7);
+ unsigned char *a = (unsigned char *)s1 + bl, *b = (unsigned char *)s2 + bl;
+ if (rest <= 0) {
+ mask &= 0xff << -rest;
+ return (*a & mask) - (*b & mask);
+ }
+ if ((r = (*a & mask) - (*b & mask))) { return r; }
+ a++; b++;
+ if ((bl = rest >> 3)) {
+ if ((r = memcmp(a, b, bl))) { return r; }
+ a += bl; b += bl;
+ }
+ mask = 0xff << (8 - (rest & 7));
+ return (*a & mask) - (*b & mask);
+}
+
+inline static grn_rc
+set_cursor_prefix(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ const void *key, uint32_t key_size, int flags)
+{
+ int c0 = -1, ch;
+ const uint8_t *k;
+ uint32_t len, byte_len;
+ grn_id id;
+ pat_node *node;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ if (flags & GRN_CURSOR_SIZE_BY_BIT) {
+ len = key_size * 2;
+ byte_len = key_size >> 3;
+ } else {
+ len = key_size * 16;
+ byte_len = key_size;
+ }
+ KEY_ENCODE(pat, keybuf, key, byte_len);
+ PAT_AT(pat, 0, node);
+ id = node->lr[1];
+ while (id) {
+ PAT_AT(pat, id, node);
+ if (!node) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(node);
+ if (c0 < ch && ch < len - 1) {
+ if (ch & 1) {
+ id = (ch + 1 < len) ? node->lr[1] : node->lr[0];
+ } else {
+ id = node->lr[nth_bit((uint8_t *)key, ch, len)];
+ }
+ c0 = ch;
+ continue;
+ }
+ if (!(k = pat_node_get_key(ctx, pat, node))) { break; }
+ if (PAT_LEN(node) < byte_len) { break; }
+ if ((flags & GRN_CURSOR_SIZE_BY_BIT)
+ ? !bitcmp(k, key, 0, key_size)
+ : !memcmp(k, key, key_size)) {
+ if (c0 < ch) {
+ if (flags & GRN_CURSOR_DESCENDING) {
+ if ((ch > len - 1) || !(flags & GRN_CURSOR_GT)) {
+ push(c, node->lr[0], ch);
+ }
+ push(c, node->lr[1], ch);
+ } else {
+ push(c, node->lr[1], ch);
+ if ((ch > len - 1) || !(flags & GRN_CURSOR_GT)) {
+ push(c, node->lr[0], ch);
+ }
+ }
+ } else {
+ if (PAT_LEN(node) * 16 > len || !(flags & GRN_CURSOR_GT)) {
+ push(c, id, ch);
+ }
+ }
+ }
+ break;
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+set_cursor_near(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ uint32_t min_size, const void *key, int flags)
+{
+ grn_id id;
+ pat_node *node;
+ const uint8_t *k;
+ int r, check = -1, ch;
+ uint32_t min = min_size * 16;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, pat->key_size);
+ PAT_AT(pat, 0, node);
+ for (id = node->lr[1]; id;) {
+ PAT_AT(pat, id, node);
+ if (!node) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(node);
+ if (ch <= check) {
+ if (check >= min) { push(c, id, check); }
+ break;
+ }
+ if ((check += 2) < ch) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ if ((r = bitcmp(key, k, check >> 1, (ch - check) >> 1))) {
+ if (ch >= min) {
+ push(c, node->lr[1], ch);
+ push(c, node->lr[0], ch);
+ }
+ break;
+ }
+ }
+ check = ch;
+ if (nth_bit((uint8_t *)key, check, pat->key_size)) {
+ if (check >= min) { push(c, node->lr[0], check); }
+ id = node->lr[1];
+ } else {
+ if (check >= min) { push(c, node->lr[1], check); }
+ id = node->lr[0];
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+set_cursor_common_prefix(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ uint32_t min_size, const void *key, uint32_t key_size, int flags)
+{
+ grn_id id;
+ pat_node *node;
+ const uint8_t *k;
+ int check = -1, ch;
+ uint32_t len = key_size * 16;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ PAT_AT(pat, 0, node);
+ for (id = node->lr[1]; id;) {
+ PAT_AT(pat, id, node);
+ if (!node) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(node);
+ if (ch <= check) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ {
+ uint32_t l = PAT_LEN(node);
+ if (min_size <= l && l <= key_size) {
+ if (!memcmp(key, k, l)) { push(c, id, check); }
+ }
+ }
+ break;
+ }
+ check = ch;
+ if (len <= check) { break; }
+ if (check & 1) {
+ grn_id id0 = node->lr[0];
+ pat_node *node0;
+ PAT_AT(pat, id0, node0);
+ if (!node0) { return GRN_FILE_CORRUPT; }
+ if (!(k = pat_node_get_key(ctx, pat, node0))) { return GRN_FILE_CORRUPT; }
+ {
+ uint32_t l = PAT_LEN(node0);
+ if (memcmp(key, k, l)) { break; }
+ if (min_size <= l) {
+ push(c, id0, check);
+ }
+ }
+ id = node->lr[1];
+ } else {
+ id = node->lr[nth_bit((uint8_t *)key, check, len)];
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+set_cursor_ascend(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ const void *key, uint32_t key_size, int flags)
+{
+ grn_id id;
+ pat_node *node;
+ const uint8_t *k;
+ int r, check = -1, ch, c2;
+ uint32_t len = key_size * 16;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ PAT_AT(pat, 0, node);
+ for (id = node->lr[1]; id;) {
+ PAT_AT(pat, id, node);
+ if (!node) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(node);
+ if (ch <= check) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ {
+ uint32_t l = PAT_LEN(node);
+ if (l == key_size) {
+ if (flags & GRN_CURSOR_GT) {
+ if (memcmp(key, k, l) < 0) { push(c, id, check); }
+ } else {
+ if (memcmp(key, k, l) <= 0) { push(c, id, check); }
+ }
+ } else if (l < key_size) {
+ if (memcmp(key, k, l) < 0) { push(c, id, check); }
+ } else {
+ if (memcmp(key, k, key_size) <= 0) { push(c, id, check); }
+ }
+ }
+ break;
+ }
+ c2 = len < ch ? len : ch;
+ if ((check += 2) < c2) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ if ((r = bitcmp(key, k, check >> 1, ((c2 + 1) >> 1) - (check >> 1)))) {
+ if (r < 0) {
+ push(c, node->lr[1], ch);
+ push(c, node->lr[0], ch);
+ }
+ break;
+ }
+ }
+ check = ch;
+ if (len <= check) {
+ push(c, node->lr[1], ch);
+ push(c, node->lr[0], ch);
+ break;
+ }
+ if (check & 1) {
+ if (check + 1 < len) {
+ id = node->lr[1];
+ } else {
+ push(c, node->lr[1], check);
+ id = node->lr[0];
+ }
+ } else {
+ if (nth_bit((uint8_t *)key, check, len)) {
+ id = node->lr[1];
+ } else {
+ push(c, node->lr[1], check);
+ id = node->lr[0];
+ }
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+set_cursor_descend(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ const void *key, uint32_t key_size, int flags)
+{
+ grn_id id;
+ pat_node *node;
+ const uint8_t *k;
+ int r, check = -1, ch, c2;
+ uint32_t len = key_size * 16;
+ uint8_t keybuf[MAX_FIXED_KEY_SIZE];
+ KEY_ENCODE(pat, keybuf, key, key_size);
+ PAT_AT(pat, 0, node);
+ for (id = node->lr[1]; id;) {
+ PAT_AT(pat, id, node);
+ if (!node) { return GRN_FILE_CORRUPT; }
+ ch = PAT_CHK(node);
+ if (ch <= check) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ {
+ uint32_t l = PAT_LEN(node);
+ if (l <= key_size) {
+ if ((flags & GRN_CURSOR_LT) && l == key_size) {
+ if (memcmp(key, k, l) > 0) { push(c, id, check); }
+ } else {
+ if (memcmp(key, k, l) >= 0) { push(c, id, check); }
+ }
+ } else {
+ if (memcmp(key, k, key_size) > 0) { push(c, id, check); }
+ }
+ }
+ break;
+ }
+ c2 = len < ch ? len : ch;
+ if ((check += 2) < c2) {
+ if (!(k = pat_node_get_key(ctx, pat, node))) { return GRN_FILE_CORRUPT; }
+ if ((r = bitcmp(key, k, check >> 1, ((c2 + 1) >> 1) - (check >> 1)))) {
+ if (r >= 0) {
+ push(c, node->lr[0], ch);
+ push(c, node->lr[1], ch);
+ }
+ break;
+ }
+ }
+ check = ch;
+ if (len <= check) { break; }
+ if (check & 1) {
+ if (check + 1 < len) {
+ push(c, node->lr[0], check);
+ id = node->lr[1];
+ } else {
+ id = node->lr[0];
+ }
+ } else {
+ if (nth_bit((uint8_t *)key, check, len)) {
+ push(c, node->lr[0], check);
+ id = node->lr[1];
+ } else {
+ id = node->lr[0];
+ }
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_pat_cursor *
+grn_pat_cursor_open_by_id(grn_ctx *ctx, grn_pat *pat,
+ const void *min, uint32_t min_size,
+ const void *max, uint32_t max_size,
+ int offset, int limit, int flags)
+{
+ int dir;
+ grn_pat_cursor *c;
+ if (!pat || !ctx) { return NULL; }
+ if (!(c = GRN_MALLOCN(grn_pat_cursor, 1))) { return NULL; }
+ GRN_DB_OBJ_SET_TYPE(c, GRN_CURSOR_TABLE_PAT_KEY);
+ c->pat = pat;
+ c->ctx = ctx;
+ c->obj.header.flags = flags;
+ c->obj.header.domain = GRN_ID_NIL;
+ c->size = 0;
+ c->sp = 0;
+ c->ss = NULL;
+ c->tail = 0;
+ if (flags & GRN_CURSOR_DESCENDING) {
+ dir = -1;
+ if (max) {
+ if (!(c->curr_rec = grn_pat_get(ctx, pat, max, max_size, NULL))) {
+ c->tail = GRN_ID_NIL;
+ goto exit;
+ }
+ if (!(flags & GRN_CURSOR_LT)) { c->curr_rec++; }
+ } else {
+ c->curr_rec = pat->header->curr_rec + 1;
+ }
+ if (min) {
+ if (!(c->tail = grn_pat_get(ctx, pat, min, min_size, NULL))) {
+ c->curr_rec = GRN_ID_NIL;
+ goto exit;
+ }
+ if ((flags & GRN_CURSOR_GT)) { c->tail++; }
+ } else {
+ c->tail = GRN_ID_NIL + 1;
+ }
+ if (c->curr_rec < c->tail) { c->tail = c->curr_rec; }
+ } else {
+ dir = 1;
+ if (min) {
+ if (!(c->curr_rec = grn_pat_get(ctx, pat, min, min_size, NULL))) {
+ c->tail = GRN_ID_NIL;
+ goto exit;
+ }
+ if (!(flags & GRN_CURSOR_GT)) { c->curr_rec--; }
+ } else {
+ c->curr_rec = GRN_ID_NIL;
+ }
+ if (max) {
+ if (!(c->tail = grn_pat_get(ctx, pat, max, max_size, NULL))) {
+ c->curr_rec = GRN_ID_NIL;
+ goto exit;
+ }
+ if ((flags & GRN_CURSOR_LT)) { c->tail--; }
+ } else {
+ c->tail = pat->header->curr_rec;
+ }
+ if (c->tail < c->curr_rec) { c->tail = c->curr_rec; }
+ }
+ if (pat->header->n_garbages) {
+ while (offset && c->curr_rec != c->tail) {
+ uint32_t key_size;
+ const void *key;
+ c->curr_rec += dir;
+ key = _grn_pat_key(ctx, pat, c->curr_rec, &key_size);
+ if (_grn_pat_get(ctx, pat, key, key_size, NULL) == c->curr_rec) {
+ offset--;
+ }
+ }
+ } else {
+ if ((dir * (c->tail - c->curr_rec)) < offset) {
+ c->curr_rec = c->tail;
+ } else {
+ c->curr_rec += dir * offset;
+ }
+ }
+ c->rest = (limit < 0) ? GRN_ID_MAX : limit;
+exit :
+ return c;
+}
+
+static grn_rc set_cursor_rk(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ const void *key, uint32_t key_size, int flags);
+
+grn_pat_cursor *
+grn_pat_cursor_open(grn_ctx *ctx, grn_pat *pat,
+ const void *min, uint32_t min_size,
+ const void *max, uint32_t max_size,
+ int offset, int limit, int flags)
+{
+ grn_id id;
+ pat_node *node;
+ grn_pat_cursor *c;
+ if (!pat || !ctx) { return NULL; }
+ if ((flags & GRN_CURSOR_BY_ID)) {
+ return grn_pat_cursor_open_by_id(ctx, pat, min, min_size, max, max_size,
+ offset, limit, flags);
+ }
+ if (!(c = GRN_MALLOCN(grn_pat_cursor, 1))) { return NULL; }
+ GRN_DB_OBJ_SET_TYPE(c, GRN_CURSOR_TABLE_PAT_KEY);
+ c->pat = pat;
+ c->ctx = ctx;
+ c->size = 0;
+ c->sp = 0;
+ c->ss = NULL;
+ c->tail = 0;
+ c->rest = GRN_ID_MAX;
+ c->curr_rec = GRN_ID_NIL;
+ c->obj.header.domain = GRN_ID_NIL;
+ if (flags & GRN_CURSOR_PREFIX) {
+ if (max && max_size) {
+ if ((pat->obj.header.flags & GRN_OBJ_KEY_VAR_SIZE)) {
+ set_cursor_common_prefix(ctx, pat, c, min_size, max, max_size, flags);
+ } else {
+ set_cursor_near(ctx, pat, c, min_size, max, flags);
+ }
+ goto exit;
+ } else {
+ if (min && min_size) {
+ if (flags & GRN_CURSOR_RK) {
+ set_cursor_rk(ctx, pat, c, min, min_size, flags);
+ } else {
+ set_cursor_prefix(ctx, pat, c, min, min_size, flags);
+ }
+ goto exit;
+ }
+ }
+ }
+ if (flags & GRN_CURSOR_DESCENDING) {
+ if (min && min_size) {
+ set_cursor_ascend(ctx, pat, c, min, min_size, flags);
+ c->obj.header.flags = GRN_CURSOR_ASCENDING;
+ c->tail = grn_pat_cursor_next(ctx, c);
+ c->sp = 0;
+ if (!c->tail) { goto exit; }
+ }
+ if (max && max_size) {
+ set_cursor_descend(ctx, pat, c, max, max_size, flags);
+ } else {
+ PAT_AT(pat, 0, node);
+ if (!node) {
+ grn_pat_cursor_close(ctx, c);
+ return NULL;
+ }
+ if ((id = node->lr[1])) {
+ PAT_AT(pat, id, node);
+ if (node) {
+ int ch = PAT_CHK(node);
+ push(c, node->lr[0], ch);
+ push(c, node->lr[1], ch);
+ }
+ }
+ }
+ } else {
+ if (max && max_size) {
+ set_cursor_descend(ctx, pat, c, max, max_size, flags);
+ c->obj.header.flags = GRN_CURSOR_DESCENDING;
+ c->tail = grn_pat_cursor_next(ctx, c);
+ c->sp = 0;
+ if (!c->tail) { goto exit; }
+ }
+ if (min && min_size) {
+ set_cursor_ascend(ctx, pat, c, min, min_size, flags);
+ } else {
+ PAT_AT(pat, 0, node);
+ if (!node) {
+ grn_pat_cursor_close(ctx, c);
+ return NULL;
+ }
+ if ((id = node->lr[1])) {
+ PAT_AT(pat, id, node);
+ if (node) {
+ int ch = PAT_CHK(node);
+ push(c, node->lr[1], ch);
+ push(c, node->lr[0], ch);
+ }
+ }
+ }
+ }
+exit :
+ c->obj.header.flags = flags;
+ c->curr_rec = GRN_ID_NIL;
+ while (offset--) { grn_pat_cursor_next(ctx, c); }
+ c->rest = (limit < 0) ? GRN_ID_MAX : limit;
+ return c;
+}
+
+int
+grn_pat_cursor_get_key(grn_ctx *ctx, grn_pat_cursor *c, void **key)
+{
+ *key = c->curr_key;
+ return grn_pat_get_key(ctx, c->pat, c->curr_rec, *key, GRN_TABLE_MAX_KEY_SIZE);
+}
+
+int
+grn_pat_cursor_get_value(grn_ctx *ctx, grn_pat_cursor *c, void **value)
+{
+ int value_size = (int)c->pat->value_size;
+ if (value_size) {
+ byte *v = (byte *)sis_at(ctx, c->pat, c->curr_rec);
+ if (v) {
+ if (c->pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ *value = v + sizeof(sis_node);
+ } else {
+ *value = v;
+ }
+ } else {
+ *value = NULL;
+ }
+ }
+ return value_size;
+}
+
+int
+grn_pat_cursor_get_key_value(grn_ctx *ctx, grn_pat_cursor *c,
+ void **key, uint32_t *key_size, void **value)
+{
+ int value_size = (int)c->pat->value_size;
+ if (key_size) {
+ *key_size = (uint32_t) grn_pat_get_key(ctx, c->pat, c->curr_rec, c->curr_key,
+ GRN_TABLE_MAX_KEY_SIZE);
+ if (key) { *key = c->curr_key; }
+ }
+ if (value && value_size) {
+ byte *v = (byte *)sis_at(ctx, c->pat, c->curr_rec);
+ if (v) {
+ if (c->pat->obj.header.flags & GRN_OBJ_KEY_WITH_SIS) {
+ *value = v + sizeof(sis_node);
+ } else {
+ *value = v;
+ }
+ } else {
+ *value = NULL;
+ }
+ }
+ return value_size;
+}
+
+grn_rc
+grn_pat_cursor_set_value(grn_ctx *ctx, grn_pat_cursor *c,
+ const void *value, int flags)
+{
+ return grn_pat_set_value(ctx, c->pat, c->curr_rec, value, flags);
+}
+
+grn_rc
+grn_pat_cursor_delete(grn_ctx *ctx, grn_pat_cursor *c,
+ grn_table_delete_optarg *optarg)
+{
+ return grn_pat_delete_by_id(ctx, c->pat, c->curr_rec, optarg);
+}
+
+void
+grn_pat_check(grn_ctx *ctx, grn_pat *pat)
+{
+ char buf[8];
+ struct grn_pat_header *h = pat->header;
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 1);
+ GRN_OUTPUT_MAP_OPEN("SUMMARY", 23);
+ GRN_OUTPUT_CSTR("flags");
+ grn_itoh(h->flags, buf, 8);
+ GRN_OUTPUT_STR(buf, 8);
+ GRN_OUTPUT_CSTR("key size");
+ GRN_OUTPUT_INT64(h->key_size);
+ GRN_OUTPUT_CSTR("value_size");
+ GRN_OUTPUT_INT64(h->value_size);
+ GRN_OUTPUT_CSTR("tokenizer");
+ GRN_OUTPUT_INT64(h->tokenizer);
+ GRN_OUTPUT_CSTR("normalizer");
+ GRN_OUTPUT_INT64(h->normalizer);
+ GRN_OUTPUT_CSTR("n_entries");
+ GRN_OUTPUT_INT64(h->n_entries);
+ GRN_OUTPUT_CSTR("curr_rec");
+ GRN_OUTPUT_INT64(h->curr_rec);
+ GRN_OUTPUT_CSTR("curr_key");
+ GRN_OUTPUT_INT64(h->curr_key);
+ GRN_OUTPUT_CSTR("curr_del");
+ GRN_OUTPUT_INT64(h->curr_del);
+ GRN_OUTPUT_CSTR("curr_del2");
+ GRN_OUTPUT_INT64(h->curr_del2);
+ GRN_OUTPUT_CSTR("curr_del3");
+ GRN_OUTPUT_INT64(h->curr_del3);
+ GRN_OUTPUT_CSTR("n_garbages");
+ GRN_OUTPUT_INT64(h->n_garbages);
+ GRN_OUTPUT_MAP_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+}
+
+static void
+grn_pat_inspect_check(grn_ctx *ctx, grn_obj *buf, int check)
+{
+ GRN_TEXT_PUTS(ctx, buf, "{");
+ grn_text_lltoa(ctx, buf, check >> 4);
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ grn_text_lltoa(ctx, buf, (check >> 1) & 7);
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ grn_text_lltoa(ctx, buf, check & 1);
+ GRN_TEXT_PUTS(ctx, buf, "}");
+}
+
+static void
+grn_pat_inspect_node(grn_ctx *ctx, grn_pat *pat, grn_id id, int check,
+ grn_obj *key_buf, int indent, const char *prefix,
+ grn_obj *buf)
+{
+ pat_node *node = NULL;
+ int i, c;
+
+ PAT_AT(pat, id, node);
+ c = PAT_CHK(node);
+
+ for (i = 0; i < indent; i++) {
+ GRN_TEXT_PUTC(ctx, buf, ' ');
+ }
+ GRN_TEXT_PUTS(ctx, buf, prefix);
+ grn_text_lltoa(ctx, buf, id);
+
+ if (c > check) {
+ int key_size;
+ uint8_t *key;
+
+ key_size = PAT_LEN(node);
+ GRN_BULK_REWIND(key_buf);
+ grn_bulk_space(ctx, key_buf, key_size);
+ grn_pat_get_key(ctx, pat, id, GRN_BULK_HEAD(key_buf), key_size);
+ GRN_TEXT_PUTS(ctx, buf, "(");
+ grn_inspect(ctx, buf, key_buf);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+
+ grn_pat_inspect_check(ctx, buf, c);
+
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ key = pat_node_get_key(ctx, pat, node);
+ for (i = 0; i < key_size; i++) {
+ int j;
+ uint8_t byte = key[i];
+ if (i != 0) {
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ }
+ for (j = 0; j < 8; j++) {
+ grn_text_lltoa(ctx, buf, (byte >> (7 - j)) & 1);
+ }
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+ }
+
+ if (c > check) {
+ GRN_TEXT_PUTS(ctx, buf, "\n");
+ grn_pat_inspect_node(ctx, pat, node->lr[0], c, key_buf,
+ indent + 2, "L:", buf);
+ GRN_TEXT_PUTS(ctx, buf, "\n");
+ grn_pat_inspect_node(ctx, pat, node->lr[1], c, key_buf,
+ indent + 2, "R:", buf);
+ }
+}
+
+void
+grn_pat_inspect_nodes(grn_ctx *ctx, grn_pat *pat, grn_obj *buf)
+{
+ pat_node *node;
+ grn_obj key_buf;
+
+ GRN_TEXT_PUTS(ctx, buf, "{");
+ PAT_AT(pat, GRN_ID_NIL, node);
+ if (node->lr[1]) {
+ GRN_TEXT_PUTS(ctx, buf, "\n");
+ GRN_OBJ_INIT(&key_buf, GRN_BULK, 0, pat->obj.header.domain);
+ grn_pat_inspect_node(ctx, pat, node->lr[1], -1, &key_buf, 0, "", buf);
+ GRN_OBJ_FIN(ctx, &key_buf);
+ GRN_TEXT_PUTS(ctx, buf, "\n");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "}");
+}
+
+static void
+grn_pat_cursor_inspect_entries(grn_ctx *ctx, grn_pat_cursor *c, grn_obj *buf)
+{
+ int i;
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ for (i = 0; i < c->sp; i++) {
+ grn_pat_cursor_entry *e = c->ss + i;
+ if (i != 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ grn_text_lltoa(ctx, buf, e->id);
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ grn_pat_inspect_check(ctx, buf, e->check);
+ GRN_TEXT_PUTS(ctx, buf, "]");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+}
+
+void
+grn_pat_cursor_inspect(grn_ctx *ctx, grn_pat_cursor *c, grn_obj *buf)
+{
+ GRN_TEXT_PUTS(ctx, buf, "#<cursor:pat:");
+ grn_inspect_name(ctx, buf, (grn_obj *)(c->pat));
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ GRN_TEXT_PUTS(ctx, buf, "current:");
+ grn_text_lltoa(ctx, buf, c->curr_rec);
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ GRN_TEXT_PUTS(ctx, buf, "tail:");
+ grn_text_lltoa(ctx, buf, c->tail);
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ GRN_TEXT_PUTS(ctx, buf, "flags:");
+ if (c->obj.header.flags & GRN_CURSOR_PREFIX) {
+ GRN_TEXT_PUTS(ctx, buf, "prefix");
+ } else {
+ if (c->obj.header.flags & GRN_CURSOR_DESCENDING) {
+ GRN_TEXT_PUTS(ctx, buf, "descending");
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "ascending");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "|");
+ if (c->obj.header.flags & GRN_CURSOR_GT) {
+ GRN_TEXT_PUTS(ctx, buf, "greater-than");
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "greater");
+ }
+ GRN_TEXT_PUTS(ctx, buf, "|");
+ if (c->obj.header.flags & GRN_CURSOR_LT) {
+ GRN_TEXT_PUTS(ctx, buf, "less-than");
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "less");
+ }
+ if (c->obj.header.flags & GRN_CURSOR_BY_ID) {
+ GRN_TEXT_PUTS(ctx, buf, "|by-id");
+ }
+ if (c->obj.header.flags & GRN_CURSOR_BY_KEY) {
+ GRN_TEXT_PUTS(ctx, buf, "|by-key");
+ }
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ GRN_TEXT_PUTS(ctx, buf, "rest:");
+ grn_text_lltoa(ctx, buf, c->rest);
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ GRN_TEXT_PUTS(ctx, buf, "entries:");
+ grn_pat_cursor_inspect_entries(ctx, c, buf);
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+}
+
+typedef struct {
+ uint8_t code;
+ uint8_t next;
+ uint8_t emit;
+ uint8_t attr;
+} rk_tree_node;
+
+static uint16_t rk_str_idx[] = {
+ 0x0003, 0x0006, 0x0009, 0x000c, 0x0012, 0x0015, 0x0018, 0x001e, 0x0024, 0x002a,
+ 0x0030, 0x0036, 0x003c, 0x0042, 0x0048, 0x004e, 0x0054, 0x005a, 0x0060, 0x0066,
+ 0x006c, 0x0072, 0x0078, 0x007e, 0x0084, 0x008a, 0x0090, 0x0096, 0x009c, 0x00a2,
+ 0x00a8, 0x00ae, 0x00b4, 0x00ba, 0x00c0, 0x00c3, 0x00c6, 0x00c9, 0x00cc, 0x00cf,
+ 0x00d2, 0x00d5, 0x00db, 0x00e1, 0x00e7, 0x00ea, 0x00f0, 0x00f6, 0x00fc, 0x00ff,
+ 0x0105, 0x0108, 0x010e, 0x0111, 0x0114, 0x0117, 0x011a, 0x011d, 0x0120, 0x0123,
+ 0x0129, 0x012f, 0x0135, 0x013b, 0x013e, 0x0144, 0x014a, 0x0150, 0x0156, 0x0159,
+ 0x015c, 0x015f, 0x0162, 0x0165, 0x0168, 0x016b, 0x016e, 0x0171, 0x0177, 0x017d,
+ 0x0183, 0x0189, 0x018c, 0x0192, 0x0198, 0x019e, 0x01a1, 0x01a4, 0x01aa, 0x01b0,
+ 0x01b6, 0x01bc, 0x01bf, 0x01c2, 0x01c8, 0x01ce, 0x01d1, 0x01d7, 0x01dd, 0x01e0,
+ 0x01e6, 0x01e9, 0x01ef, 0x01f2, 0x01f5, 0x01fb, 0x0201, 0x0207, 0x020d, 0x0213,
+ 0x0216, 0x0219, 0x021c, 0x021f, 0x0222, 0x0225, 0x0228, 0x022e, 0x0234, 0x023a,
+ 0x023d, 0x0243, 0x0249, 0x024f, 0x0252, 0x0258, 0x025e, 0x0264, 0x0267, 0x026d,
+ 0x0273, 0x0279, 0x027f, 0x0285, 0x0288, 0x028b, 0x028e, 0x0291, 0x0294, 0x0297,
+ 0x029a, 0x029d, 0x02a0, 0x02a3, 0x02a9, 0x02af, 0x02b5, 0x02b8, 0x02bb, 0x02be,
+ 0x02c1, 0x02c4, 0x02c7, 0x02ca, 0x02cd, 0x02d0, 0x02d3, 0x02d6, 0x02dc, 0x02e2,
+ 0x02e8, 0x02eb, 0x02ee, 0x02f1, 0x02f4, 0x02f7, 0x02fa, 0x02fd, 0x0300, 0x0303,
+ 0x0309, 0x030c, 0x0312, 0x0318, 0x031e, 0x0324, 0x0327, 0x032a, 0x032d
+};
+static char rk_str[] = {
+ 0xe3, 0x82, 0xa1, 0xe3, 0x82, 0xa2, 0xe3, 0x82, 0xa3, 0xe3, 0x82, 0xa4, 0xe3,
+ 0x82, 0xa4, 0xe3, 0x82, 0xa7, 0xe3, 0x82, 0xa5, 0xe3, 0x82, 0xa6, 0xe3, 0x82,
+ 0xa6, 0xe3, 0x82, 0xa2, 0xe3, 0x82, 0xa6, 0xe3, 0x82, 0xa3, 0xe3, 0x82, 0xa6,
+ 0xe3, 0x82, 0xa4, 0xe3, 0x82, 0xa6, 0xe3, 0x82, 0xa6, 0xe3, 0x82, 0xa6, 0xe3,
+ 0x82, 0xa7, 0xe3, 0x82, 0xa6, 0xe3, 0x82, 0xa8, 0xe3, 0x82, 0xa6, 0xe3, 0x82,
+ 0xaa, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa0, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa1,
+ 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa2, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa3, 0xe3,
+ 0x82, 0xa6, 0xe3, 0x83, 0xa4, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa5, 0xe3, 0x82,
+ 0xa6, 0xe3, 0x83, 0xa6, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa7, 0xe3, 0x82, 0xa6,
+ 0xe3, 0x83, 0xa8, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xa9, 0xe3, 0x82, 0xa6, 0xe3,
+ 0x83, 0xaa, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xab, 0xe3, 0x82, 0xa6, 0xe3, 0x83,
+ 0xac, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xad, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xae,
+ 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xaf, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xb0, 0xe3,
+ 0x82, 0xa6, 0xe3, 0x83, 0xb1, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xb2, 0xe3, 0x82,
+ 0xa6, 0xe3, 0x83, 0xb3, 0xe3, 0x82, 0xa6, 0xe3, 0x83, 0xbc, 0xe3, 0x82, 0xa7,
+ 0xe3, 0x82, 0xa8, 0xe3, 0x82, 0xa9, 0xe3, 0x82, 0xaa, 0xe3, 0x82, 0xab, 0xe3,
+ 0x82, 0xac, 0xe3, 0x82, 0xad, 0xe3, 0x82, 0xad, 0xe3, 0x83, 0xa3, 0xe3, 0x82,
+ 0xad, 0xe3, 0x83, 0xa5, 0xe3, 0x82, 0xad, 0xe3, 0x83, 0xa7, 0xe3, 0x82, 0xae,
+ 0xe3, 0x82, 0xae, 0xe3, 0x83, 0xa3, 0xe3, 0x82, 0xae, 0xe3, 0x83, 0xa5, 0xe3,
+ 0x82, 0xae, 0xe3, 0x83, 0xa7, 0xe3, 0x82, 0xaf, 0xe3, 0x82, 0xaf, 0xe3, 0x82,
+ 0xa1, 0xe3, 0x82, 0xb0, 0xe3, 0x82, 0xb0, 0xe3, 0x82, 0xa1, 0xe3, 0x82, 0xb1,
+ 0xe3, 0x82, 0xb2, 0xe3, 0x82, 0xb3, 0xe3, 0x82, 0xb4, 0xe3, 0x82, 0xb5, 0xe3,
+ 0x82, 0xb6, 0xe3, 0x82, 0xb7, 0xe3, 0x82, 0xb7, 0xe3, 0x82, 0xa7, 0xe3, 0x82,
+ 0xb7, 0xe3, 0x83, 0xa3, 0xe3, 0x82, 0xb7, 0xe3, 0x83, 0xa5, 0xe3, 0x82, 0xb7,
+ 0xe3, 0x83, 0xa7, 0xe3, 0x82, 0xb8, 0xe3, 0x82, 0xb8, 0xe3, 0x82, 0xa7, 0xe3,
+ 0x82, 0xb8, 0xe3, 0x83, 0xa3, 0xe3, 0x82, 0xb8, 0xe3, 0x83, 0xa5, 0xe3, 0x82,
+ 0xb8, 0xe3, 0x83, 0xa7, 0xe3, 0x82, 0xb9, 0xe3, 0x82, 0xba, 0xe3, 0x82, 0xbb,
+ 0xe3, 0x82, 0xbc, 0xe3, 0x82, 0xbd, 0xe3, 0x82, 0xbe, 0xe3, 0x82, 0xbf, 0xe3,
+ 0x83, 0x80, 0xe3, 0x83, 0x81, 0xe3, 0x83, 0x81, 0xe3, 0x82, 0xa7, 0xe3, 0x83,
+ 0x81, 0xe3, 0x83, 0xa3, 0xe3, 0x83, 0x81, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x81,
+ 0xe3, 0x83, 0xa7, 0xe3, 0x83, 0x82, 0xe3, 0x83, 0x82, 0xe3, 0x83, 0xa3, 0xe3,
+ 0x83, 0x82, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x82, 0xe3, 0x83, 0xa7, 0xe3, 0x83,
+ 0x83, 0xe3, 0x83, 0x84, 0xe3, 0x83, 0x84, 0xe3, 0x82, 0xa1, 0xe3, 0x83, 0x84,
+ 0xe3, 0x82, 0xa3, 0xe3, 0x83, 0x84, 0xe3, 0x82, 0xa7, 0xe3, 0x83, 0x84, 0xe3,
+ 0x82, 0xa9, 0xe3, 0x83, 0x85, 0xe3, 0x83, 0x86, 0xe3, 0x83, 0x86, 0xe3, 0x82,
+ 0xa3, 0xe3, 0x83, 0x86, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x87, 0xe3, 0x83, 0x87,
+ 0xe3, 0x82, 0xa3, 0xe3, 0x83, 0x87, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x88, 0xe3,
+ 0x83, 0x88, 0xe3, 0x82, 0xa5, 0xe3, 0x83, 0x89, 0xe3, 0x83, 0x89, 0xe3, 0x82,
+ 0xa5, 0xe3, 0x83, 0x8a, 0xe3, 0x83, 0x8b, 0xe3, 0x83, 0x8b, 0xe3, 0x82, 0xa3,
+ 0xe3, 0x83, 0x8b, 0xe3, 0x82, 0xa7, 0xe3, 0x83, 0x8b, 0xe3, 0x83, 0xa3, 0xe3,
+ 0x83, 0x8b, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x8b, 0xe3, 0x83, 0xa7, 0xe3, 0x83,
+ 0x8c, 0xe3, 0x83, 0x8d, 0xe3, 0x83, 0x8e, 0xe3, 0x83, 0x8f, 0xe3, 0x83, 0x90,
+ 0xe3, 0x83, 0x91, 0xe3, 0x83, 0x92, 0xe3, 0x83, 0x92, 0xe3, 0x83, 0xa3, 0xe3,
+ 0x83, 0x92, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x92, 0xe3, 0x83, 0xa7, 0xe3, 0x83,
+ 0x93, 0xe3, 0x83, 0x93, 0xe3, 0x83, 0xa3, 0xe3, 0x83, 0x93, 0xe3, 0x83, 0xa5,
+ 0xe3, 0x83, 0x93, 0xe3, 0x83, 0xa7, 0xe3, 0x83, 0x94, 0xe3, 0x83, 0x94, 0xe3,
+ 0x83, 0xa3, 0xe3, 0x83, 0x94, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x94, 0xe3, 0x83,
+ 0xa7, 0xe3, 0x83, 0x95, 0xe3, 0x83, 0x95, 0xe3, 0x82, 0xa1, 0xe3, 0x83, 0x95,
+ 0xe3, 0x82, 0xa3, 0xe3, 0x83, 0x95, 0xe3, 0x82, 0xa7, 0xe3, 0x83, 0x95, 0xe3,
+ 0x82, 0xa9, 0xe3, 0x83, 0x95, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0x96, 0xe3, 0x83,
+ 0x97, 0xe3, 0x83, 0x98, 0xe3, 0x83, 0x99, 0xe3, 0x83, 0x9a, 0xe3, 0x83, 0x9b,
+ 0xe3, 0x83, 0x9c, 0xe3, 0x83, 0x9d, 0xe3, 0x83, 0x9e, 0xe3, 0x83, 0x9f, 0xe3,
+ 0x83, 0x9f, 0xe3, 0x83, 0xa3, 0xe3, 0x83, 0x9f, 0xe3, 0x83, 0xa5, 0xe3, 0x83,
+ 0x9f, 0xe3, 0x83, 0xa7, 0xe3, 0x83, 0xa0, 0xe3, 0x83, 0xa1, 0xe3, 0x83, 0xa2,
+ 0xe3, 0x83, 0xa3, 0xe3, 0x83, 0xa4, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0xa6, 0xe3,
+ 0x83, 0xa7, 0xe3, 0x83, 0xa8, 0xe3, 0x83, 0xa9, 0xe3, 0x83, 0xaa, 0xe3, 0x83,
+ 0xaa, 0xe3, 0x83, 0xa3, 0xe3, 0x83, 0xaa, 0xe3, 0x83, 0xa5, 0xe3, 0x83, 0xaa,
+ 0xe3, 0x83, 0xa7, 0xe3, 0x83, 0xab, 0xe3, 0x83, 0xac, 0xe3, 0x83, 0xad, 0xe3,
+ 0x83, 0xae, 0xe3, 0x83, 0xaf, 0xe3, 0x83, 0xb0, 0xe3, 0x83, 0xb1, 0xe3, 0x83,
+ 0xb2, 0xe3, 0x83, 0xb3, 0xe3, 0x83, 0xb3, 0xe3, 0x83, 0xbc, 0xe3, 0x83, 0xb4,
+ 0xe3, 0x83, 0xb4, 0xe3, 0x82, 0xa1, 0xe3, 0x83, 0xb4, 0xe3, 0x82, 0xa3, 0xe3,
+ 0x83, 0xb4, 0xe3, 0x82, 0xa7, 0xe3, 0x83, 0xb4, 0xe3, 0x82, 0xa9, 0xe3, 0x83,
+ 0xb5, 0xe3, 0x83, 0xb6, 0xe3, 0x83, 0xbc
+};
+static uint16_t rk_tree_idx[] = {
+ 0x001b, 0x0022, 0x0025, 0x0028, 0x002d, 0x0030, 0x0039, 0x003b, 0x003c, 0x003f,
+ 0x0046, 0x0047, 0x004f, 0x0050, 0x0053, 0x005a, 0x005d, 0x0064, 0x0067, 0x006f,
+ 0x0070, 0x0073, 0x007d, 0x007f, 0x0081, 0x0082, 0x0083, 0x0088, 0x008f, 0x0092,
+ 0x00af, 0x00b5, 0x00bc, 0x00bf, 0x00c6, 0x00c9, 0x00d1, 0x00d6, 0x00da, 0x00e4,
+ 0x00e6, 0x00eb, 0x00ec, 0x00f0, 0x00f6, 0x00fc, 0x00fe, 0x0108, 0x010a, 0x010c,
+ 0x010d, 0x010e, 0x0113, 0x0118, 0x011f, 0x0123, 0x0125, 0x0164, 0x0180, 0x0183,
+ 0x0199, 0x01ad
+};
+static rk_tree_node rk_tree[] = {
+ {0x2d, 0x00, 0xb2, 0x01}, {0x61, 0x00, 0x01, 0x01}, {0x62, 0x01, 0xff, 0x01},
+ {0x63, 0x03, 0xff, 0x01}, {0x64, 0x06, 0xff, 0x01}, {0x65, 0x00, 0x24, 0x01},
+ {0x66, 0x0a, 0xff, 0x01}, {0x67, 0x0c, 0xff, 0x01}, {0x68, 0x0f, 0xff, 0x01},
+ {0x69, 0x00, 0x03, 0x01}, {0x6a, 0x11, 0xff, 0x01}, {0x6b, 0x13, 0xff, 0x01},
+ {0x6c, 0x16, 0xff, 0x01}, {0x6d, 0x1c, 0xff, 0x01}, {0x6e, 0x1e, 0xff, 0x01},
+ {0x6f, 0x00, 0x26, 0x01}, {0x70, 0x20, 0xff, 0x01}, {0x72, 0x22, 0xff, 0x01},
+ {0x73, 0x24, 0xff, 0x01}, {0x74, 0x27, 0xff, 0x01}, {0x75, 0x00, 0x06, 0x01},
+ {0x76, 0x2c, 0xff, 0x01}, {0x77, 0x2d, 0xff, 0x01}, {0x78, 0x2f, 0xff, 0x01},
+ {0x79, 0x35, 0xff, 0x01}, {0x7a, 0x36, 0xff, 0x01}, {0xe3, 0x38, 0xff, 0x01},
+ {0x61, 0x00, 0x72, 0x01}, {0x62, 0x01, 0x56, 0x01}, {0x65, 0x00, 0x89, 0x01},
+ {0x69, 0x00, 0x78, 0x01}, {0x6f, 0x00, 0x8c, 0x01}, {0x75, 0x00, 0x86, 0x01},
+ {0x79, 0x02, 0xff, 0x00}, {0x61, 0x00, 0x79, 0x01}, {0x6f, 0x00, 0x7b, 0x01},
+ {0x75, 0x00, 0x7a, 0x01}, {0x63, 0x03, 0x56, 0x01}, {0x68, 0x04, 0xff, 0x01},
+ {0x79, 0x05, 0xff, 0x01}, {0x61, 0x00, 0x4f, 0x00}, {0x65, 0x00, 0x4e, 0x00},
+ {0x69, 0x00, 0x4d, 0x01}, {0x6f, 0x00, 0x51, 0x00}, {0x75, 0x00, 0x50, 0x00},
+ {0x61, 0x00, 0x4f, 0x01}, {0x6f, 0x00, 0x51, 0x01}, {0x75, 0x00, 0x50, 0x01},
+ {0x61, 0x00, 0x4c, 0x01}, {0x64, 0x06, 0x56, 0x01}, {0x65, 0x00, 0x60, 0x01},
+ {0x68, 0x07, 0xff, 0x00}, {0x69, 0x00, 0x61, 0x00}, {0x6f, 0x00, 0x65, 0x01},
+ {0x75, 0x00, 0x5c, 0x01}, {0x77, 0x08, 0xff, 0x00}, {0x79, 0x09, 0xff, 0x01},
+ {0x69, 0x00, 0x61, 0x01}, {0x75, 0x00, 0x62, 0x01}, {0x75, 0x00, 0x66, 0x01},
+ {0x61, 0x00, 0x53, 0x01}, {0x6f, 0x00, 0x55, 0x01}, {0x75, 0x00, 0x54, 0x01},
+ {0x61, 0x00, 0x81, 0x00}, {0x65, 0x00, 0x83, 0x00}, {0x66, 0x0a, 0x56, 0x01},
+ {0x69, 0x00, 0x82, 0x00}, {0x6f, 0x00, 0x84, 0x00}, {0x75, 0x00, 0x80, 0x01},
+ {0x79, 0x0b, 0xff, 0x00}, {0x75, 0x00, 0x85, 0x01}, {0x61, 0x00, 0x28, 0x01},
+ {0x65, 0x00, 0x36, 0x01}, {0x67, 0x0c, 0x56, 0x01}, {0x69, 0x00, 0x2d, 0x01},
+ {0x6f, 0x00, 0x38, 0x01}, {0x75, 0x00, 0x33, 0x01}, {0x77, 0x0d, 0xff, 0x00},
+ {0x79, 0x0e, 0xff, 0x00}, {0x61, 0x00, 0x34, 0x01}, {0x61, 0x00, 0x2e, 0x01},
+ {0x6f, 0x00, 0x30, 0x01}, {0x75, 0x00, 0x2f, 0x01}, {0x61, 0x00, 0x71, 0x01},
+ {0x65, 0x00, 0x88, 0x01}, {0x68, 0x0f, 0x56, 0x01}, {0x69, 0x00, 0x74, 0x01},
+ {0x6f, 0x00, 0x8b, 0x01}, {0x75, 0x00, 0x80, 0x01}, {0x79, 0x10, 0xff, 0x00},
+ {0x61, 0x00, 0x75, 0x01}, {0x6f, 0x00, 0x77, 0x01}, {0x75, 0x00, 0x76, 0x01},
+ {0x61, 0x00, 0x42, 0x00}, {0x65, 0x00, 0x41, 0x00}, {0x69, 0x00, 0x40, 0x01},
+ {0x6a, 0x11, 0x56, 0x01}, {0x6f, 0x00, 0x44, 0x00}, {0x75, 0x00, 0x43, 0x00},
+ {0x79, 0x12, 0xff, 0x00}, {0x61, 0x00, 0x42, 0x01}, {0x6f, 0x00, 0x44, 0x01},
+ {0x75, 0x00, 0x43, 0x01}, {0x61, 0x00, 0x27, 0x01}, {0x65, 0x00, 0x35, 0x01},
+ {0x69, 0x00, 0x29, 0x01}, {0x6b, 0x13, 0x56, 0x01}, {0x6f, 0x00, 0x37, 0x01},
+ {0x75, 0x00, 0x31, 0x01}, {0x77, 0x14, 0xff, 0x00}, {0x79, 0x15, 0xff, 0x00},
+ {0x61, 0x00, 0x32, 0x01}, {0x61, 0x00, 0x2a, 0x01}, {0x6f, 0x00, 0x2c, 0x01},
+ {0x75, 0x00, 0x2b, 0x01}, {0x61, 0x00, 0x00, 0x01}, {0x65, 0x00, 0x23, 0x01},
+ {0x69, 0x00, 0x02, 0x01}, {0x6b, 0x17, 0xff, 0x01}, {0x6c, 0x16, 0x56, 0x01},
+ {0x6f, 0x00, 0x25, 0x01}, {0x74, 0x18, 0xff, 0x01}, {0x75, 0x00, 0x05, 0x01},
+ {0x77, 0x1a, 0xff, 0x01}, {0x79, 0x1b, 0xff, 0x01}, {0x61, 0x00, 0xb0, 0x01},
+ {0x65, 0x00, 0xb1, 0x01}, {0x73, 0x19, 0xff, 0x00}, {0x75, 0x00, 0x56, 0x01},
+ {0x75, 0x00, 0x56, 0x01}, {0x61, 0x00, 0xa4, 0x01}, {0x61, 0x00, 0x96, 0x01},
+ {0x65, 0x00, 0x23, 0x01}, {0x69, 0x00, 0x02, 0x01}, {0x6f, 0x00, 0x9a, 0x01},
+ {0x75, 0x00, 0x98, 0x01}, {0x61, 0x00, 0x8e, 0x01}, {0x65, 0x00, 0x94, 0x01},
+ {0x69, 0x00, 0x8f, 0x01}, {0x6d, 0x1c, 0x56, 0x01}, {0x6f, 0x00, 0x95, 0x01},
+ {0x75, 0x00, 0x93, 0x01}, {0x79, 0x1d, 0xff, 0x00}, {0x61, 0x00, 0x90, 0x01},
+ {0x6f, 0x00, 0x92, 0x01}, {0x75, 0x00, 0x91, 0x01}, {0x00, 0x00, 0xa9, 0x01},
+ {0x27, 0x00, 0xa9, 0x00}, {0x2d, 0x00, 0xaa, 0x00}, {0x61, 0x00, 0x67, 0x01},
+ {0x62, 0x01, 0xa9, 0x00}, {0x63, 0x03, 0xa9, 0x00}, {0x64, 0x06, 0xa9, 0x00},
+ {0x65, 0x00, 0x6f, 0x01}, {0x66, 0x0a, 0xa9, 0x00}, {0x67, 0x0c, 0xa9, 0x00},
+ {0x68, 0x0f, 0xa9, 0x00}, {0x69, 0x00, 0x68, 0x01}, {0x6a, 0x11, 0xa9, 0x00},
+ {0x6b, 0x13, 0xa9, 0x00}, {0x6c, 0x16, 0xa9, 0x00}, {0x6d, 0x1c, 0xa9, 0x00},
+ {0x6e, 0x00, 0xa9, 0x00}, {0x6f, 0x00, 0x70, 0x01}, {0x70, 0x20, 0xa9, 0x00},
+ {0x72, 0x22, 0xa9, 0x00}, {0x73, 0x24, 0xa9, 0x00}, {0x74, 0x27, 0xa9, 0x00},
+ {0x75, 0x00, 0x6e, 0x01}, {0x76, 0x2c, 0xa9, 0x00}, {0x77, 0x2d, 0xa9, 0x00},
+ {0x78, 0x2f, 0xa9, 0x00}, {0x79, 0x1f, 0xff, 0x00}, {0x7a, 0x36, 0xa9, 0x00},
+ {0xe3, 0x38, 0xa9, 0x00}, {0x00, 0x00, 0xa9, 0x01}, {0x61, 0x00, 0x6b, 0x01},
+ {0x65, 0x00, 0x6a, 0x01}, {0x69, 0x00, 0x69, 0x01}, {0x6f, 0x00, 0x6d, 0x01},
+ {0x75, 0x00, 0x6c, 0x01}, {0x61, 0x00, 0x73, 0x01}, {0x65, 0x00, 0x8a, 0x01},
+ {0x69, 0x00, 0x7c, 0x01}, {0x6f, 0x00, 0x8d, 0x01}, {0x70, 0x20, 0x56, 0x01},
+ {0x75, 0x00, 0x87, 0x01}, {0x79, 0x21, 0xff, 0x00}, {0x61, 0x00, 0x7d, 0x01},
+ {0x6f, 0x00, 0x7f, 0x01}, {0x75, 0x00, 0x7e, 0x01}, {0x61, 0x00, 0x9c, 0x01},
+ {0x65, 0x00, 0xa2, 0x01}, {0x69, 0x00, 0x9d, 0x01}, {0x6f, 0x00, 0xa3, 0x01},
+ {0x72, 0x22, 0x56, 0x01}, {0x75, 0x00, 0xa1, 0x01}, {0x79, 0x23, 0xff, 0x00},
+ {0x61, 0x00, 0x9e, 0x01}, {0x6f, 0x00, 0xa0, 0x01}, {0x75, 0x00, 0x9f, 0x01},
+ {0x61, 0x00, 0x39, 0x01}, {0x65, 0x00, 0x47, 0x01}, {0x68, 0x25, 0xff, 0x00},
+ {0x69, 0x00, 0x3b, 0x01}, {0x6f, 0x00, 0x49, 0x01}, {0x73, 0x24, 0x56, 0x01},
+ {0x75, 0x00, 0x45, 0x01}, {0x79, 0x26, 0xff, 0x00}, {0x61, 0x00, 0x3d, 0x00},
+ {0x65, 0x00, 0x3c, 0x00}, {0x69, 0x00, 0x3b, 0x01}, {0x6f, 0x00, 0x3f, 0x00},
+ {0x75, 0x00, 0x3e, 0x00}, {0x61, 0x00, 0x3d, 0x01}, {0x65, 0x00, 0x3c, 0x01},
+ {0x6f, 0x00, 0x3f, 0x01}, {0x75, 0x00, 0x3e, 0x01}, {0x61, 0x00, 0x4b, 0x01},
+ {0x65, 0x00, 0x5d, 0x01}, {0x68, 0x28, 0xff, 0x00}, {0x69, 0x00, 0x4d, 0x01},
+ {0x6f, 0x00, 0x63, 0x01}, {0x73, 0x29, 0xff, 0x00}, {0x74, 0x27, 0x56, 0x01},
+ {0x75, 0x00, 0x57, 0x01}, {0x77, 0x2a, 0xff, 0x00}, {0x79, 0x2b, 0xff, 0x00},
+ {0x69, 0x00, 0x5e, 0x01}, {0x75, 0x00, 0x5f, 0x01}, {0x61, 0x00, 0x58, 0x00},
+ {0x65, 0x00, 0x5a, 0x00}, {0x69, 0x00, 0x59, 0x00}, {0x6f, 0x00, 0x5b, 0x00},
+ {0x75, 0x00, 0x57, 0x01}, {0x75, 0x00, 0x64, 0x01}, {0x61, 0x00, 0x4f, 0x01},
+ {0x65, 0x00, 0x4e, 0x01}, {0x6f, 0x00, 0x51, 0x01}, {0x75, 0x00, 0x50, 0x01},
+ {0x61, 0x00, 0xac, 0x00}, {0x65, 0x00, 0xae, 0x00}, {0x69, 0x00, 0xad, 0x00},
+ {0x6f, 0x00, 0xaf, 0x00}, {0x75, 0x00, 0xab, 0x01}, {0x76, 0x2c, 0x56, 0x01},
+ {0x61, 0x00, 0xa5, 0x01}, {0x65, 0x00, 0x0b, 0x01}, {0x69, 0x00, 0x08, 0x01},
+ {0x6f, 0x00, 0xa8, 0x01}, {0x77, 0x2d, 0x56, 0x01}, {0x79, 0x2e, 0xff, 0x01},
+ {0x65, 0x00, 0xa7, 0x01}, {0x69, 0x00, 0xa6, 0x01}, {0x61, 0x00, 0x00, 0x01},
+ {0x65, 0x00, 0x23, 0x01}, {0x69, 0x00, 0x02, 0x01}, {0x6b, 0x30, 0xff, 0x01},
+ {0x6f, 0x00, 0x25, 0x01}, {0x74, 0x31, 0xff, 0x01}, {0x75, 0x00, 0x05, 0x01},
+ {0x77, 0x33, 0xff, 0x01}, {0x78, 0x2f, 0x56, 0x01}, {0x79, 0x34, 0xff, 0x01},
+ {0x61, 0x00, 0xb0, 0x01}, {0x65, 0x00, 0xb1, 0x01}, {0x73, 0x32, 0xff, 0x00},
+ {0x75, 0x00, 0x56, 0x01}, {0x75, 0x00, 0x56, 0x01}, {0x61, 0x00, 0xa4, 0x01},
+ {0x61, 0x00, 0x96, 0x01}, {0x65, 0x00, 0x23, 0x01}, {0x69, 0x00, 0x02, 0x01},
+ {0x6f, 0x00, 0x9a, 0x01}, {0x75, 0x00, 0x98, 0x01}, {0x61, 0x00, 0x97, 0x01},
+ {0x65, 0x00, 0x04, 0x01}, {0x6f, 0x00, 0x9b, 0x01}, {0x75, 0x00, 0x99, 0x01},
+ {0x79, 0x35, 0x56, 0x01}, {0x61, 0x00, 0x3a, 0x01}, {0x65, 0x00, 0x48, 0x01},
+ {0x69, 0x00, 0x40, 0x01}, {0x6f, 0x00, 0x4a, 0x01}, {0x75, 0x00, 0x46, 0x01},
+ {0x79, 0x37, 0xff, 0x00}, {0x7a, 0x36, 0x56, 0x01}, {0x61, 0x00, 0x42, 0x01},
+ {0x65, 0x00, 0x41, 0x01}, {0x6f, 0x00, 0x44, 0x01}, {0x75, 0x00, 0x43, 0x01},
+ {0x81, 0x39, 0xff, 0x01}, {0x82, 0x3d, 0xff, 0x01}, {0x81, 0x00, 0x00, 0x01},
+ {0x82, 0x00, 0x01, 0x01}, {0x83, 0x00, 0x02, 0x01}, {0x84, 0x00, 0x03, 0x01},
+ {0x85, 0x00, 0x05, 0x01}, {0x86, 0x3a, 0xff, 0x01}, {0x87, 0x00, 0x23, 0x01},
+ {0x88, 0x00, 0x24, 0x01}, {0x89, 0x00, 0x25, 0x01}, {0x8a, 0x00, 0x26, 0x01},
+ {0x8b, 0x00, 0x27, 0x01}, {0x8c, 0x00, 0x28, 0x01}, {0x8d, 0x00, 0x29, 0x01},
+ {0x8e, 0x00, 0x2d, 0x01}, {0x8f, 0x00, 0x31, 0x01}, {0x90, 0x00, 0x33, 0x01},
+ {0x91, 0x00, 0x35, 0x01}, {0x92, 0x00, 0x36, 0x01}, {0x93, 0x00, 0x37, 0x01},
+ {0x94, 0x00, 0x38, 0x01}, {0x95, 0x00, 0x39, 0x01}, {0x96, 0x00, 0x3a, 0x01},
+ {0x97, 0x00, 0x3b, 0x01}, {0x98, 0x00, 0x40, 0x01}, {0x99, 0x00, 0x45, 0x01},
+ {0x9a, 0x00, 0x46, 0x01}, {0x9b, 0x00, 0x47, 0x01}, {0x9c, 0x00, 0x48, 0x01},
+ {0x9d, 0x00, 0x49, 0x01}, {0x9e, 0x00, 0x4a, 0x01}, {0x9f, 0x00, 0x4b, 0x01},
+ {0xa0, 0x00, 0x4c, 0x01}, {0xa1, 0x00, 0x4d, 0x01}, {0xa2, 0x00, 0x52, 0x01},
+ {0xa3, 0x00, 0x56, 0x01}, {0xa4, 0x00, 0x57, 0x01}, {0xa5, 0x00, 0x5c, 0x01},
+ {0xa6, 0x00, 0x5d, 0x01}, {0xa7, 0x00, 0x60, 0x01}, {0xa8, 0x00, 0x63, 0x01},
+ {0xa9, 0x00, 0x65, 0x01}, {0xaa, 0x00, 0x67, 0x01}, {0xab, 0x00, 0x68, 0x01},
+ {0xac, 0x00, 0x6e, 0x01}, {0xad, 0x00, 0x6f, 0x01}, {0xae, 0x00, 0x70, 0x01},
+ {0xaf, 0x00, 0x71, 0x01}, {0xb0, 0x00, 0x72, 0x01}, {0xb1, 0x00, 0x73, 0x01},
+ {0xb2, 0x00, 0x74, 0x01}, {0xb3, 0x00, 0x78, 0x01}, {0xb4, 0x00, 0x7c, 0x01},
+ {0xb5, 0x00, 0x80, 0x01}, {0xb6, 0x00, 0x86, 0x01}, {0xb7, 0x00, 0x87, 0x01},
+ {0xb8, 0x00, 0x88, 0x01}, {0xb9, 0x00, 0x89, 0x01}, {0xba, 0x00, 0x8a, 0x01},
+ {0xbb, 0x00, 0x8b, 0x01}, {0xbc, 0x00, 0x8c, 0x01}, {0xbd, 0x00, 0x8d, 0x01},
+ {0xbe, 0x00, 0x8e, 0x01}, {0xbf, 0x00, 0x8f, 0x01}, {0x00, 0x00, 0x06, 0x00},
+ {0x2d, 0x00, 0x22, 0x00}, {0x61, 0x00, 0x07, 0x00}, {0x62, 0x01, 0x06, 0x00},
+ {0x63, 0x03, 0x06, 0x00}, {0x64, 0x06, 0x06, 0x00}, {0x65, 0x00, 0x0c, 0x00},
+ {0x66, 0x0a, 0x06, 0x00}, {0x67, 0x0c, 0x06, 0x00}, {0x68, 0x0f, 0x06, 0x00},
+ {0x69, 0x00, 0x09, 0x00}, {0x6a, 0x11, 0x06, 0x00}, {0x6b, 0x13, 0x06, 0x00},
+ {0x6c, 0x16, 0x06, 0x00}, {0x6d, 0x1c, 0x06, 0x00}, {0x6e, 0x1e, 0x06, 0x00},
+ {0x6f, 0x00, 0x0d, 0x00}, {0x70, 0x20, 0x06, 0x00}, {0x72, 0x22, 0x06, 0x00},
+ {0x73, 0x24, 0x06, 0x00}, {0x74, 0x27, 0x06, 0x00}, {0x75, 0x00, 0x0a, 0x00},
+ {0x76, 0x2c, 0x06, 0x00}, {0x77, 0x2d, 0x06, 0x00}, {0x78, 0x2f, 0x06, 0x00},
+ {0x79, 0x35, 0x06, 0x00}, {0x7a, 0x36, 0x06, 0x00}, {0xe3, 0x3b, 0xff, 0x01},
+ {0x00, 0x00, 0x06, 0x00}, {0x81, 0x39, 0x06, 0x00}, {0x82, 0x3c, 0xff, 0x01},
+ {0x00, 0x00, 0x06, 0x01}, {0x80, 0x00, 0x0e, 0x00}, {0x81, 0x00, 0x0f, 0x00},
+ {0x82, 0x00, 0x10, 0x00}, {0x83, 0x00, 0x11, 0x00}, {0x84, 0x00, 0x12, 0x00},
+ {0x85, 0x00, 0x13, 0x00}, {0x86, 0x00, 0x14, 0x00}, {0x87, 0x00, 0x15, 0x00},
+ {0x88, 0x00, 0x16, 0x00}, {0x89, 0x00, 0x17, 0x00}, {0x8a, 0x00, 0x18, 0x00},
+ {0x8b, 0x00, 0x19, 0x00}, {0x8c, 0x00, 0x1a, 0x00}, {0x8d, 0x00, 0x1b, 0x00},
+ {0x8e, 0x00, 0x1c, 0x00}, {0x8f, 0x00, 0x1d, 0x00}, {0x90, 0x00, 0x1e, 0x00},
+ {0x91, 0x00, 0x1f, 0x00}, {0x92, 0x00, 0x20, 0x00}, {0x93, 0x00, 0x21, 0x00},
+ {0x9b, 0x00, 0xab, 0x01}, {0x80, 0x00, 0x93, 0x01}, {0x81, 0x00, 0x94, 0x01},
+ {0x82, 0x00, 0x95, 0x01}, {0x83, 0x00, 0x96, 0x01}, {0x84, 0x00, 0x97, 0x01},
+ {0x85, 0x00, 0x98, 0x01}, {0x86, 0x00, 0x99, 0x01}, {0x87, 0x00, 0x9a, 0x01},
+ {0x88, 0x00, 0x9b, 0x01}, {0x89, 0x00, 0x9c, 0x01}, {0x8a, 0x00, 0x9d, 0x01},
+ {0x8b, 0x00, 0xa1, 0x01}, {0x8c, 0x00, 0xa2, 0x01}, {0x8d, 0x00, 0xa3, 0x01},
+ {0x8e, 0x00, 0xa4, 0x01}, {0x8f, 0x00, 0xa5, 0x01}, {0x90, 0x00, 0xa6, 0x01},
+ {0x91, 0x00, 0xa7, 0x01}, {0x92, 0x00, 0xa8, 0x01}, {0x93, 0x00, 0xa9, 0x01}
+};
+
+static rk_tree_node *
+rk_lookup(uint8_t state, uint8_t code)
+{
+ if (state < sizeof(rk_tree_idx)/sizeof(uint16_t)) {
+ uint16_t ns = state ? rk_tree_idx[state - 1] : 0;
+ uint16_t ne = rk_tree_idx[state];
+ while (ns < ne) {
+ uint16_t m = (ns + ne)>>1;
+ rk_tree_node *rn = &rk_tree[m];
+ if (rn->code == code) { return rn; }
+ if (rn->code < code) {
+ ns = m + 1;
+ } else {
+ ne = m;
+ }
+ }
+ }
+ return NULL;
+}
+
+static uint32_t
+rk_emit(rk_tree_node *rn, char **str)
+{
+ if (rn && rn->emit != 0xff) {
+ uint16_t pos = rn->emit ? rk_str_idx[rn->emit - 1] : 0;
+ *str = &rk_str[pos];
+ return (uint32_t)(rk_str_idx[rn->emit] - pos);
+ } else {
+ *str = NULL;
+ return 0;
+ }
+}
+
+#define RK_OUTPUT(e,l) do {\
+ if (oc < oe) {\
+ uint32_t l_ = (oc + (l) < oe) ? (l) : (oe - oc);\
+ memcpy(oc, (e), l_);\
+ oc += l_;\
+ ic_ = ic;\
+ }\
+} while (0)
+
+static uint32_t
+rk_conv(const char *str, uint32_t str_len, uint8_t *buf, uint32_t buf_size, uint8_t *statep)
+{
+ uint32_t l;
+ uint8_t state = 0;
+ rk_tree_node *rn;
+ char *e;
+ uint8_t *oc = buf, *oe = oc + buf_size;
+ const uint8_t *ic = (uint8_t *)str, *ic_ = ic, *ie = ic + str_len;
+ while (ic < ie) {
+ if ((rn = rk_lookup(state, *ic))) {
+ ic++;
+ if ((l = rk_emit(rn, &e))) { RK_OUTPUT(e, l); }
+ state = rn->next;
+ } else {
+ if (!state) { ic++; }
+ if (ic_ < ic) { RK_OUTPUT(ic_, ic - ic_); }
+ state = 0;
+ }
+ }
+#ifdef FLUSH_UNRESOLVED_INPUT
+ if ((rn = rk_lookup(state, 0))) {
+ if ((l = rk_emit(rn, &e))) { RK_OUTPUT(e, l); }
+ state = rn->next;
+ } else {
+ if (ic_ < ic) { RK_OUTPUT(ic_, ic - ic_); }
+ }
+#endif /* FLUSH_UNRESOLVED_INPUT */
+ *statep = state;
+ return oc - buf;
+}
+
+static grn_id
+sub_search(grn_ctx *ctx, grn_pat *pat, grn_id id,
+ int *c0, uint8_t *key, uint32_t key_len)
+{
+ pat_node *pn;
+ uint32_t len = key_len * 16;
+ if (!key_len) { return id; }
+ PAT_AT(pat, id, pn);
+ while (pn) {
+ int ch;
+ ch = PAT_CHK(pn);
+ if (*c0 < ch && ch < len - 1) {
+ if (ch & 1) {
+ id = (ch + 1 < len) ? pn->lr[1] : pn->lr[0];
+ } else {
+ id = pn->lr[nth_bit(key, ch, len)];
+ }
+ *c0 = ch;
+ PAT_AT(pat, id, pn);
+ } else {
+ const uint8_t *k = pat_node_get_key(ctx, pat, pn);
+ return (k && key_len <= PAT_LEN(pn) && !memcmp(k, key, key_len)) ? id : GRN_ID_NIL;
+ }
+ }
+ return GRN_ID_NIL;
+}
+
+static void
+search_push(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ uint8_t *key, uint32_t key_len, uint8_t state, grn_id id, int c0, int flags)
+{
+ if (state) {
+ int step;
+ uint16_t ns, ne;
+ if (flags & GRN_CURSOR_DESCENDING) {
+ ns = rk_tree_idx[state - 1];
+ ne = rk_tree_idx[state];
+ step = 1;
+ } else {
+ ns = rk_tree_idx[state] - 1;
+ ne = rk_tree_idx[state - 1] - 1;
+ step = -1;
+ }
+ for (; ns != ne; ns += step) {
+ rk_tree_node *rn = &rk_tree[ns];
+ if (rn->attr) {
+ char *e;
+ uint32_t l = rk_emit(rn, &e);
+ if (l) {
+ if (l + key_len <= GRN_TABLE_MAX_KEY_SIZE) {
+ int ch = c0;
+ grn_id i;
+ memcpy(key + key_len, e, l);
+ if ((i = sub_search(ctx, pat, id, &ch, key, key_len + l))) {
+ search_push(ctx, pat, c, key, key_len + l, rn->next, i, ch, flags);
+ }
+ }
+ } else {
+ search_push(ctx, pat, c, key, key_len, rn->next, id, c0, flags);
+ }
+ }
+ }
+ } else {
+ pat_node *pn;
+ PAT_AT(pat, id, pn);
+ if (pn) {
+ int ch = PAT_CHK(pn);
+ uint32_t len = key_len * 16;
+ if (c0 < ch) {
+ if (flags & GRN_CURSOR_DESCENDING) {
+ if ((ch > len - 1) || !(flags & GRN_CURSOR_GT)) { push(c, pn->lr[0], ch); }
+ push(c, pn->lr[1], ch);
+ } else {
+ push(c, pn->lr[1], ch);
+ if ((ch > len - 1) || !(flags & GRN_CURSOR_GT)) { push(c, pn->lr[0], ch); }
+ }
+ } else {
+ if (PAT_LEN(pn) * 16 > len || !(flags & GRN_CURSOR_GT)) { push(c, id, ch); }
+ }
+ }
+ }
+}
+
+static grn_rc
+set_cursor_rk(grn_ctx *ctx, grn_pat *pat, grn_pat_cursor *c,
+ const void *key, uint32_t key_len, int flags)
+{
+ grn_id id;
+ uint8_t state;
+ pat_node *pn;
+ int c0 = -1;
+ uint32_t len, byte_len;
+ uint8_t keybuf[GRN_TABLE_MAX_KEY_SIZE];
+ if (flags & GRN_CURSOR_SIZE_BY_BIT) { return GRN_OPERATION_NOT_SUPPORTED; }
+ byte_len = rk_conv(key, key_len, keybuf, GRN_TABLE_MAX_KEY_SIZE, &state);
+ len = byte_len * 16;
+ PAT_AT(pat, 0, pn);
+ id = pn->lr[1];
+ if ((id = sub_search(ctx, pat, id, &c0, keybuf, byte_len))) {
+ search_push(ctx, pat, c, keybuf, byte_len, state, id, c0, flags);
+ }
+ return ctx->rc;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/pat.h b/storage/mroonga/vendor/groonga/lib/pat.h
new file mode 100644
index 00000000000..d2d10322c7c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/pat.h
@@ -0,0 +1,114 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PAT_H
+#define GRN_PAT_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#include "db.h"
+#include "hash.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GRN_PAT_MAX_KEY_SIZE GRN_TABLE_MAX_KEY_SIZE
+
+struct _grn_pat {
+ grn_db_obj obj;
+ grn_io *io;
+ struct grn_pat_header *header;
+ grn_encoding encoding;
+ uint32_t key_size;
+ uint32_t value_size;
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj token_filters;
+ grn_id *cache;
+ uint32_t cache_size;
+};
+
+#define GRN_PAT_NDELINFOS 0x100
+
+typedef struct {
+ grn_id d;
+ grn_id ld;
+ uint32_t stat;
+ uint32_t shared;
+} grn_pat_delinfo;
+
+struct grn_pat_header {
+ uint32_t flags;
+ grn_encoding encoding;
+ uint32_t key_size;
+ uint32_t value_size;
+ grn_id tokenizer;
+ uint32_t n_entries;
+ uint32_t curr_rec;
+ int32_t curr_key;
+ int32_t curr_del;
+ int32_t curr_del2;
+ int32_t curr_del3;
+ uint32_t n_garbages;
+ grn_id normalizer;
+ uint32_t reserved[1004];
+ grn_pat_delinfo delinfos[GRN_PAT_NDELINFOS];
+ grn_id garbages[GRN_PAT_MAX_KEY_SIZE + 1];
+};
+
+struct _grn_pat_cursor_entry {
+ grn_id id;
+ uint16_t check;
+};
+
+typedef struct _grn_pat_cursor_entry grn_pat_cursor_entry;
+
+struct _grn_pat_cursor {
+ grn_db_obj obj;
+ grn_id curr_rec;
+ grn_pat *pat;
+ grn_ctx *ctx;
+ unsigned int size;
+ unsigned int sp;
+ grn_id tail;
+ unsigned int rest;
+ grn_pat_cursor_entry *ss;
+ uint8_t curr_key[GRN_TABLE_MAX_KEY_SIZE];
+};
+
+GRN_API grn_id grn_pat_curr_id(grn_ctx *ctx, grn_pat *pat);
+
+/* private */
+GRN_API grn_rc grn_pat_truncate(grn_ctx *ctx, grn_pat *pat);
+const char *_grn_pat_key(grn_ctx *ctx, grn_pat *pat, grn_id id, uint32_t *key_size);
+grn_id grn_pat_next(grn_ctx *ctx, grn_pat *pat, grn_id id);
+const char *grn_pat_get_value_(grn_ctx *ctx, grn_pat *pat, grn_id id, uint32_t *size);
+GRN_API grn_id grn_pat_at(grn_ctx *ctx, grn_pat *pat, grn_id id);
+void grn_pat_check(grn_ctx *ctx, grn_pat *pat);
+void grn_pat_inspect_nodes(grn_ctx *ctx, grn_pat *pat, grn_obj *buf);
+void grn_pat_cursor_inspect(grn_ctx *ctx, grn_pat_cursor *c, grn_obj *buf);
+
+grn_rc grn_pat_cache_enable(grn_ctx *ctx, grn_pat *pat, uint32_t cache_size);
+void grn_pat_cache_disable(grn_ctx *ctx, grn_pat *pat);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_PAT_H */
diff --git a/storage/mroonga/vendor/groonga/lib/plugin.c b/storage/mroonga/vendor/groonga/lib/plugin.c
new file mode 100644
index 00000000000..3483cc9a5b0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/plugin.c
@@ -0,0 +1,752 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include "groonga/plugin.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "db.h"
+#include "plugin_in.h"
+#include "ctx_impl.h"
+#include "util.h"
+
+static grn_hash *grn_plugins = NULL;
+static grn_critical_section grn_plugins_lock;
+
+#define PATHLEN(filename) (strlen(filename) + 1)
+
+#ifdef HAVE_DLFCN_H
+# include <dlfcn.h>
+# define grn_dl_open(filename) dlopen(filename, RTLD_LAZY | RTLD_LOCAL)
+# define grn_dl_open_error_label() dlerror()
+# define grn_dl_close(dl) (dlclose(dl) == 0)
+# define grn_dl_close_error_label() dlerror()
+# define grn_dl_sym(dl, symbol) dlsym(dl, symbol)
+# define grn_dl_sym_error_label() dlerror()
+# define grn_dl_clear_error() dlerror()
+#else
+# define grn_dl_open(filename) LoadLibrary(filename)
+# define grn_dl_open_error_label() "LoadLibrary"
+# define grn_dl_close(dl) (FreeLibrary(dl) != 0)
+# define grn_dl_close_error_label() "FreeLibrary"
+# define grn_dl_sym(dl, symbol) ((void *)GetProcAddress(dl, symbol))
+# define grn_dl_sym_error_label() "GetProcAddress"
+# define grn_dl_clear_error()
+#endif
+
+static int
+compute_name_size(const char *name, int name_size)
+{
+ if (name_size < 0) {
+ if (name) {
+ name_size = strlen(name);
+ } else {
+ name_size = 0;
+ }
+ }
+ return name_size;
+}
+
+grn_id
+grn_plugin_reference(grn_ctx *ctx, const char *filename)
+{
+ grn_id id;
+ grn_plugin **plugin = NULL;
+
+ CRITICAL_SECTION_ENTER(grn_plugins_lock);
+ id = grn_hash_get(&grn_gctx, grn_plugins, filename, PATHLEN(filename),
+ (void **)&plugin);
+ if (plugin) {
+ (*plugin)->refcount++;
+ }
+ CRITICAL_SECTION_LEAVE(grn_plugins_lock);
+
+ return id;
+}
+
+const char *
+grn_plugin_path(grn_ctx *ctx, grn_id id)
+{
+ const char *path;
+ uint32_t key_size;
+ const char *system_plugins_dir;
+ size_t system_plugins_dir_size;
+
+ CRITICAL_SECTION_ENTER(grn_plugins_lock);
+ path = _grn_hash_key(&grn_gctx, grn_plugins, id, &key_size);
+ CRITICAL_SECTION_LEAVE(grn_plugins_lock);
+
+ if (!path) {
+ return NULL;
+ }
+
+ system_plugins_dir = grn_plugin_get_system_plugins_dir();
+ system_plugins_dir_size = strlen(system_plugins_dir);
+ if (strncmp(system_plugins_dir, path, system_plugins_dir_size) == 0) {
+ const char *plugin_name = path + system_plugins_dir_size;
+ while (plugin_name[0] == '/') {
+ plugin_name++;
+ }
+ /* TODO: remove suffix too? */
+ return plugin_name;
+ } else {
+ return path;
+ }
+}
+
+#define GRN_PLUGIN_FUNC_PREFIX "grn_plugin_impl_"
+
+static grn_rc
+grn_plugin_call_init (grn_ctx *ctx, grn_id id)
+{
+ grn_plugin *plugin;
+ if (!grn_hash_get_value(&grn_gctx, grn_plugins, id, &plugin)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (plugin->init_func) {
+ return plugin->init_func(ctx);
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_plugin_call_register(grn_ctx *ctx, grn_id id)
+{
+ grn_plugin *plugin;
+ if (!grn_hash_get_value(&grn_gctx, grn_plugins, id, &plugin)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (plugin->register_func) {
+ return plugin->register_func(ctx);
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_plugin_call_fin(grn_ctx *ctx, grn_id id)
+{
+ grn_plugin *plugin;
+ if (!grn_hash_get_value(&grn_gctx, grn_plugins, id, &plugin)) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (plugin->fin_func) {
+ return plugin->fin_func(ctx);
+ }
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_plugin_initialize(grn_ctx *ctx, grn_plugin *plugin,
+ grn_dl dl, grn_id id, const char *path)
+{
+ plugin->dl = dl;
+
+#define GET_SYMBOL(type) do { \
+ grn_dl_clear_error(); \
+ plugin->type ## _func = grn_dl_sym(dl, GRN_PLUGIN_FUNC_PREFIX #type); \
+ if (!plugin->type ## _func) { \
+ const char *label; \
+ label = grn_dl_sym_error_label(); \
+ SERR(label); \
+ } \
+} while (0)
+
+ GET_SYMBOL(init);
+ GET_SYMBOL(register);
+ GET_SYMBOL(fin);
+
+#undef GET_SYMBOL
+
+ if (!plugin->init_func || !plugin->register_func || !plugin->fin_func) {
+ ERR(GRN_INVALID_FORMAT,
+ "init func (%s) %sfound, "
+ "register func (%s) %sfound and "
+ "fin func (%s) %sfound",
+ GRN_PLUGIN_FUNC_PREFIX "init", plugin->init_func ? "" : "not ",
+ GRN_PLUGIN_FUNC_PREFIX "register", plugin->register_func ? "" : "not ",
+ GRN_PLUGIN_FUNC_PREFIX "fin", plugin->fin_func ? "" : "not ");
+ }
+
+ if (!ctx->rc) {
+ ctx->impl->plugin_path = path;
+ grn_plugin_call_init(ctx, id);
+ ctx->impl->plugin_path = NULL;
+ }
+
+ return ctx->rc;
+}
+
+grn_id
+grn_plugin_open(grn_ctx *ctx, const char *filename)
+{
+ grn_id id;
+ grn_dl dl;
+ grn_plugin **plugin = NULL;
+
+ CRITICAL_SECTION_ENTER(grn_plugins_lock);
+ if ((id = grn_hash_get(&grn_gctx, grn_plugins, filename, PATHLEN(filename),
+ (void **)&plugin))) {
+ (*plugin)->refcount++;
+ goto exit;
+ }
+
+ if ((dl = grn_dl_open(filename))) {
+ if ((id = grn_hash_add(&grn_gctx, grn_plugins, filename, PATHLEN(filename),
+ (void **)&plugin, NULL))) {
+ *plugin = GRN_GMALLOCN(grn_plugin, 1);
+ if (*plugin) {
+ if (grn_plugin_initialize(ctx, *plugin, dl, id, filename)) {
+ GRN_GFREE(*plugin);
+ *plugin = NULL;
+ }
+ }
+ if (!*plugin) {
+ grn_hash_delete_by_id(&grn_gctx, grn_plugins, id, NULL);
+ if (grn_dl_close(dl)) {
+ /* Now, __FILE__ set in plugin is invalid. */
+ ctx->errline = 0;
+ ctx->errfile = NULL;
+ } else {
+ const char *label;
+ label = grn_dl_close_error_label();
+ SERR(label);
+ }
+ id = GRN_ID_NIL;
+ } else {
+ (*plugin)->refcount = 1;
+ }
+ } else {
+ if (!grn_dl_close(dl)) {
+ const char *label;
+ label = grn_dl_close_error_label();
+ SERR(label);
+ }
+ }
+ } else {
+ const char *label;
+ label = grn_dl_open_error_label();
+ SERR(label);
+ }
+
+exit:
+ CRITICAL_SECTION_LEAVE(grn_plugins_lock);
+
+ return id;
+}
+
+grn_rc
+grn_plugin_close(grn_ctx *ctx, grn_id id)
+{
+ grn_rc rc;
+ grn_plugin *plugin;
+
+ if (id == GRN_ID_NIL) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ CRITICAL_SECTION_ENTER(grn_plugins_lock);
+ if (!grn_hash_get_value(&grn_gctx, grn_plugins, id, &plugin)) {
+ rc = GRN_INVALID_ARGUMENT;
+ goto exit;
+ }
+ if (--plugin->refcount) {
+ rc = GRN_SUCCESS;
+ goto exit;
+ }
+ grn_plugin_call_fin(ctx, id);
+ if (!grn_dl_close(plugin->dl)) {
+ const char *label;
+ label = grn_dl_close_error_label();
+ SERR(label);
+ }
+ GRN_GFREE(plugin);
+ rc = grn_hash_delete_by_id(&grn_gctx, grn_plugins, id, NULL);
+
+exit:
+ CRITICAL_SECTION_LEAVE(grn_plugins_lock);
+
+ return rc;
+}
+
+void *
+grn_plugin_sym(grn_ctx *ctx, grn_id id, const char *symbol)
+{
+ grn_plugin *plugin;
+ grn_dl_symbol func;
+
+ if (id == GRN_ID_NIL) {
+ return NULL;
+ }
+
+ CRITICAL_SECTION_ENTER(grn_plugins_lock);
+ if (!grn_hash_get_value(&grn_gctx, grn_plugins, id, &plugin)) {
+ func = NULL;
+ goto exit;
+ }
+ grn_dl_clear_error();
+ if (!(func = grn_dl_sym(plugin->dl, symbol))) {
+ const char *label;
+ label = grn_dl_sym_error_label();
+ SERR(label);
+ }
+
+exit:
+ CRITICAL_SECTION_LEAVE(grn_plugins_lock);
+
+ return func;
+}
+
+grn_rc
+grn_plugins_init(void)
+{
+ CRITICAL_SECTION_INIT(grn_plugins_lock);
+ grn_plugins = grn_hash_create(&grn_gctx, NULL, PATH_MAX, sizeof(grn_plugin *),
+ GRN_OBJ_KEY_VAR_SIZE);
+ if (!grn_plugins) { return GRN_NO_MEMORY_AVAILABLE; }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_plugins_fin(void)
+{
+ grn_rc rc;
+ if (!grn_plugins) { return GRN_INVALID_ARGUMENT; }
+ GRN_HASH_EACH(&grn_gctx, grn_plugins, id, NULL, NULL, NULL, {
+ grn_plugin_close(&grn_gctx, id);
+ });
+ rc = grn_hash_close(&grn_gctx, grn_plugins);
+ CRITICAL_SECTION_FIN(grn_plugins_lock);
+ return rc;
+}
+
+const char *
+grn_plugin_get_suffix(void)
+{
+ return GRN_PLUGIN_SUFFIX;
+}
+
+grn_rc
+grn_plugin_register_by_path(grn_ctx *ctx, const char *path)
+{
+ grn_obj *db;
+ if (!ctx || !ctx->impl || !(db = ctx->impl->db)) {
+ ERR(GRN_INVALID_ARGUMENT, "db not initialized");
+ return ctx->rc;
+ }
+ GRN_API_ENTER;
+ if (GRN_DB_P(db)) {
+ grn_id id;
+ id = grn_plugin_open(ctx, path);
+ if (id) {
+ ctx->impl->plugin_path = path;
+ ctx->rc = grn_plugin_call_register(ctx, id);
+ ctx->impl->plugin_path = NULL;
+ grn_plugin_close(ctx, id);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid db assigned");
+ }
+ GRN_API_RETURN(ctx->rc);
+}
+
+#ifdef WIN32
+static char *win32_plugins_dir = NULL;
+static char win32_plugins_dir_buffer[PATH_MAX];
+const char *
+grn_plugin_get_system_plugins_dir(void)
+{
+ if (!win32_plugins_dir) {
+ const char *base_dir;
+ const char *relative_path = GRN_RELATIVE_PLUGINS_DIR;
+ size_t base_dir_length;
+
+ base_dir = grn_win32_base_dir();
+ base_dir_length = strlen(base_dir);
+ strcpy(win32_plugins_dir_buffer, base_dir);
+ strcat(win32_plugins_dir_buffer, "/");
+ strcat(win32_plugins_dir_buffer, relative_path);
+ win32_plugins_dir = win32_plugins_dir_buffer;
+ }
+ return win32_plugins_dir;
+}
+
+#else /* WIN32 */
+const char *
+grn_plugin_get_system_plugins_dir(void)
+{
+ return GRN_PLUGINS_DIR;
+}
+#endif /* WIN32 */
+
+char *
+grn_plugin_find_path(grn_ctx *ctx, const char *name)
+{
+ const char *plugins_dir;
+ char dir_last_char;
+ char path[PATH_MAX];
+ int name_length, max_name_length;
+ FILE *plugin_file;
+ char complemented_path[PATH_MAX], complemented_libs_path[PATH_MAX];
+ char *found_path = NULL;
+ size_t path_len;
+
+ GRN_API_ENTER;
+ if (name[0] == '/') {
+ path[0] = '\0';
+ } else {
+ plugins_dir = getenv("GRN_PLUGINS_DIR");
+ if (!plugins_dir) {
+ plugins_dir = grn_plugin_get_system_plugins_dir();
+ }
+ strcpy(path, plugins_dir);
+
+ dir_last_char = plugins_dir[strlen(path) - 1];
+ if (dir_last_char != '/') {
+ strcat(path, "/");
+ }
+ }
+
+ name_length = strlen(name);
+ max_name_length = PATH_MAX - strlen(path) - 1;
+ if (name_length > max_name_length) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "plugin name is too long: %d (max: %d) <%s%s>",
+ name_length, max_name_length,
+ path, name);
+ goto exit;
+ }
+ strcat(path, name);
+
+ plugin_file = fopen(path, "r");
+ if (plugin_file) {
+ fclose(plugin_file);
+ found_path = GRN_STRDUP(path);
+ } else {
+ path_len = strlen(path);
+ path_len += strlen(grn_plugin_get_suffix());
+ if (path_len >= PATH_MAX) {
+ ERR(GRN_FILENAME_TOO_LONG,
+ "too long plugin path: <%s%s>",
+ path, grn_plugin_get_suffix());
+ goto exit;
+ }
+ strcpy(complemented_path, path);
+ strcat(complemented_path, grn_plugin_get_suffix());
+ plugin_file = fopen(complemented_path, "r");
+ if (plugin_file) {
+ fclose(plugin_file);
+ found_path = GRN_STRDUP(complemented_path);
+ } else {
+ const char *base_name;
+
+ base_name = strrchr(path, '/');
+ if (base_name) {
+ path_len = base_name - path + strlen("/.libs") + strlen(base_name);
+ path_len += strlen(grn_plugin_get_suffix());
+ if (path_len >= PATH_MAX) {
+ ERR(GRN_FILENAME_TOO_LONG,
+ "too long plugin path: <%.*s/.libs%s%s>",
+ (int)(base_name - path), path, base_name, grn_plugin_get_suffix());
+ goto exit;
+ }
+ complemented_libs_path[0] = '\0';
+ strncat(complemented_libs_path, path, base_name - path);
+ strcat(complemented_libs_path, "/.libs");
+ strcat(complemented_libs_path, base_name);
+ strcat(complemented_libs_path, grn_plugin_get_suffix());
+ plugin_file = fopen(complemented_libs_path, "r");
+ if (plugin_file) {
+ fclose(plugin_file);
+ found_path = GRN_STRDUP(complemented_libs_path);
+ }
+ }
+ }
+ }
+
+exit :
+ GRN_API_RETURN(found_path);
+}
+
+grn_rc
+grn_plugin_register(grn_ctx *ctx, const char *name)
+{
+ grn_rc rc;
+ char *path;
+
+ GRN_API_ENTER;
+ path = grn_plugin_find_path(ctx, name);
+ if (path) {
+ rc = grn_plugin_register_by_path(ctx, path);
+ GRN_FREE(path);
+ } else {
+ if (ctx->rc == GRN_SUCCESS) {
+ const char *prefix, *prefix_separator, *suffix;
+ if (name[0] == '/') {
+ prefix = "";
+ prefix_separator = "";
+ suffix = "";
+ } else {
+ prefix = getenv("GRN_PLUGINS_DIR");
+ if (!prefix) {
+ prefix = grn_plugin_get_system_plugins_dir();
+ }
+ if (prefix[strlen(prefix) - 1] != '/') {
+ prefix_separator = "/";
+ } else {
+ prefix_separator = "";
+ }
+ suffix = grn_plugin_get_suffix();
+ }
+ ERR(GRN_NO_SUCH_FILE_OR_DIRECTORY,
+ "cannot find plugin file: <%s%s%s%s>",
+ prefix, prefix_separator, name, suffix);
+ }
+ rc = ctx->rc;
+ }
+ GRN_API_RETURN(rc);
+}
+
+void *
+grn_plugin_malloc(grn_ctx *ctx, size_t size, const char *file, int line,
+ const char *func)
+{
+ return grn_malloc(ctx, size, file, line, func);
+}
+
+void *
+grn_plugin_realloc(grn_ctx *ctx, void *ptr, size_t size,
+ const char *file, int line, const char *func)
+{
+ return grn_realloc(ctx, ptr, size, file, line, func);
+}
+
+void
+grn_plugin_free(grn_ctx *ctx, void *ptr, const char *file, int line,
+ const char *func)
+{
+ grn_free(ctx, ptr, file, line, func);
+}
+
+/*
+ grn_plugin_ctx_log() is a clone of grn_ctx_log() in ctx.c. The only
+ difference is that grn_plugin_ctx_log() uses va_list instead of `...'.
+ */
+static void
+grn_plugin_ctx_log(grn_ctx *ctx, const char *format, va_list ap)
+{
+ vsnprintf(ctx->errbuf, GRN_CTX_MSGSIZE, format, ap);
+}
+
+void
+grn_plugin_set_error(grn_ctx *ctx, grn_log_level level, grn_rc error_code,
+ const char *file, int line, const char *func,
+ const char *format, ...)
+{
+ ctx->errlvl = level;
+ ctx->rc = error_code;
+ ctx->errfile = file;
+ ctx->errline = line;
+ ctx->errfunc = func;
+
+ {
+ va_list ap;
+ va_start(ap, format);
+ grn_plugin_ctx_log(ctx, format, ap);
+ va_end(ap);
+ }
+}
+
+void
+grn_plugin_backtrace(grn_ctx *ctx)
+{
+ BACKTRACE(ctx);
+}
+
+void
+grn_plugin_logtrace(grn_ctx *ctx, grn_log_level level)
+{
+ if (level <= GRN_LOG_ERROR) {
+ LOGTRACE(ctx, level);
+ }
+}
+
+struct _grn_plugin_mutex {
+ grn_critical_section critical_section;
+};
+
+grn_plugin_mutex *
+grn_plugin_mutex_open(grn_ctx *ctx)
+{
+ grn_plugin_mutex * const mutex =
+ GRN_PLUGIN_MALLOC(ctx, sizeof(grn_plugin_mutex));
+ if (mutex != NULL) {
+ CRITICAL_SECTION_INIT(mutex->critical_section);
+ }
+ return mutex;
+}
+
+grn_plugin_mutex *
+grn_plugin_mutex_create(grn_ctx *ctx)
+{
+ return grn_plugin_mutex_open(ctx);
+}
+
+void
+grn_plugin_mutex_close(grn_ctx *ctx, grn_plugin_mutex *mutex)
+{
+ if (mutex != NULL) {
+ CRITICAL_SECTION_FIN(mutex->critical_section);
+ GRN_PLUGIN_FREE(ctx, mutex);
+ }
+}
+
+void
+grn_plugin_mutex_destroy(grn_ctx *ctx, grn_plugin_mutex *mutex)
+{
+ grn_plugin_mutex_close(ctx, mutex);
+}
+
+void
+grn_plugin_mutex_lock(grn_ctx *ctx, grn_plugin_mutex *mutex)
+{
+ if (mutex != NULL) {
+ CRITICAL_SECTION_ENTER(mutex->critical_section);
+ }
+}
+
+void
+grn_plugin_mutex_unlock(grn_ctx *ctx, grn_plugin_mutex *mutex)
+{
+ if (mutex != NULL) {
+ CRITICAL_SECTION_LEAVE(mutex->critical_section);
+ }
+}
+
+grn_obj *
+grn_plugin_proc_alloc(grn_ctx *ctx, grn_user_data *user_data,
+ grn_id domain, grn_obj_flags flags)
+{
+ return grn_proc_alloc(ctx, user_data, domain, flags);
+}
+
+grn_obj *
+grn_plugin_proc_get_var(grn_ctx *ctx, grn_user_data *user_data,
+ const char *name, int name_size)
+{
+ name_size = compute_name_size(name, name_size);
+ return grn_proc_get_var(ctx, user_data, name, name_size);
+}
+
+grn_obj *
+grn_plugin_proc_get_var_by_offset(grn_ctx *ctx, grn_user_data *user_data,
+ unsigned int offset)
+{
+ return grn_proc_get_var_by_offset(ctx, user_data, offset);
+}
+
+const char *
+grn_plugin_win32_base_dir(void)
+{
+#ifdef WIN32
+ return grn_win32_base_dir();
+#else /* WIN32 */
+ return NULL;
+#endif /* WIN32 */
+}
+
+/*
+ grn_plugin_charlen() takes the length of a string, unlike grn_charlen_().
+ */
+int
+grn_plugin_charlen(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding)
+{
+ return grn_charlen_(ctx, str_ptr, str_ptr + str_length, encoding);
+}
+
+/*
+ grn_plugin_isspace() takes the length of a string, unlike grn_isspace().
+ */
+int
+grn_plugin_isspace(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding)
+{
+ if ((str_ptr == NULL) || (str_length == 0)) {
+ return 0;
+ }
+ switch ((unsigned char)str_ptr[0]) {
+ case ' ' :
+ case '\f' :
+ case '\n' :
+ case '\r' :
+ case '\t' :
+ case '\v' :
+ return 1;
+ case 0x81 :
+ if ((encoding == GRN_ENC_SJIS) && (str_length >= 2) &&
+ ((unsigned char)str_ptr[1] == 0x40)) {
+ return 2;
+ }
+ break;
+ case 0xA1 :
+ if ((encoding == GRN_ENC_EUC_JP) && (str_length >= 2) &&
+ ((unsigned char)str_ptr[1] == 0xA1)) {
+ return 2;
+ }
+ break;
+ case 0xE3 :
+ if ((encoding == GRN_ENC_UTF8) && (str_length >= 3) &&
+ ((unsigned char)str_ptr[1] == 0x80) &&
+ ((unsigned char)str_ptr[2] == 0x80)) {
+ return 3;
+ }
+ break;
+ default :
+ break;
+ }
+ return 0;
+}
+
+grn_rc
+grn_plugin_expr_var_init(grn_ctx *ctx,
+ grn_expr_var *var,
+ const char *name,
+ int name_size)
+{
+ var->name = name;
+ var->name_size = compute_name_size(name, name_size);
+ GRN_TEXT_INIT(&var->value, 0);
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_plugin_command_create(grn_ctx *ctx,
+ const char *name,
+ int name_size,
+ grn_proc_func func,
+ unsigned int n_vars,
+ grn_expr_var *vars)
+{
+ grn_obj *proc;
+ name_size = compute_name_size(name, name_size);
+ proc = grn_proc_create(ctx, name, name_size, GRN_PROC_COMMAND,
+ func, NULL, NULL, n_vars, vars);
+ return proc;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/plugin_in.h b/storage/mroonga/vendor/groonga/lib/plugin_in.h
new file mode 100644
index 00000000000..6f983089dc9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/plugin_in.h
@@ -0,0 +1,68 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PLUGIN_IN_H
+#define GRN_PLUGIN_IN_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_STORE_H
+#include "store.h"
+#endif /* GRN_STORE_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef WIN32
+typedef HINSTANCE grn_dl;
+typedef FARPROC grn_dl_symbol;
+
+#else
+typedef void * grn_dl;
+typedef void * grn_dl_symbol;
+#endif
+
+typedef struct _grn_plugin grn_plugin;
+
+struct _grn_plugin {
+ grn_dl dl;
+ grn_plugin_func init_func;
+ grn_plugin_func register_func;
+ grn_plugin_func unregister_func;
+ grn_plugin_func fin_func;
+ int refcount;
+};
+
+grn_rc grn_plugins_init(void);
+grn_rc grn_plugins_fin(void);
+grn_id grn_plugin_open(grn_ctx *ctx, const char *filename);
+grn_rc grn_plugin_close(grn_ctx *ctx, grn_id id);
+grn_id grn_plugin_reference(grn_ctx *ctx, const char *filename);
+const char *grn_plugin_path(grn_ctx *ctx, grn_id id);
+char *grn_plugin_find_path(grn_ctx *ctx, const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_PLUGIN_IN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/proc.c b/storage/mroonga/vendor/groonga/lib/proc.c
new file mode 100644
index 00000000000..37b7ae67d35
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/proc.c
@@ -0,0 +1,5482 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "proc.h"
+#include "ii.h"
+#include "db.h"
+#include "util.h"
+#include "output.h"
+#include "pat.h"
+#include "geo.h"
+#include "token.h"
+#include "expr.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW 0
+#endif
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+typedef grn_rc (*grn_substitute_term_func) (grn_ctx *ctx,
+ const char *term,
+ unsigned int term_len,
+ grn_obj *substituted_term,
+ grn_user_data *user_data);
+typedef struct {
+ grn_obj *table;
+ grn_obj *column;
+} grn_substitute_term_by_column_data;
+
+/**** globals for procs ****/
+const char *grn_document_root = NULL;
+
+#define VAR GRN_PROC_GET_VAR_BY_OFFSET
+
+#define GRN_SELECT_INTERNAL_VAR_CONDITION "$condition"
+#define GRN_SELECT_INTERNAL_VAR_MATCH_COLUMNS "$match_columns"
+
+/* bulk must be initialized grn_bulk or grn_msg */
+static int
+grn_bulk_put_from_file(grn_ctx *ctx, grn_obj *bulk, const char *path)
+{
+ /* FIXME: implement more smartly with grn_bulk */
+ int fd, ret = 0;
+ struct stat stat;
+ if ((fd = GRN_OPEN(path, O_RDONLY|O_NOFOLLOW|O_BINARY)) == -1) {
+ switch (errno) {
+ case EACCES :
+ ERR(GRN_OPERATION_NOT_PERMITTED, "request is not allowed: <%s>", path);
+ break;
+ case ENOENT :
+ ERR(GRN_NO_SUCH_FILE_OR_DIRECTORY, "no such file: <%s>", path);
+ break;
+#ifndef WIN32
+ case ELOOP :
+ ERR(GRN_NO_SUCH_FILE_OR_DIRECTORY,
+ "symbolic link is not allowed: <%s>", path);
+ break;
+#endif /* WIN32 */
+ default :
+ ERR(GRN_UNKNOWN_ERROR, "GRN_OPEN() failed(errno: %d): <%s>", errno, path);
+ break;
+ }
+ return 0;
+ }
+ if (fstat(fd, &stat) != -1) {
+ char *buf, *bp;
+ off_t rest = stat.st_size;
+ if ((buf = GRN_MALLOC(rest))) {
+ ssize_t ss;
+ for (bp = buf; rest; rest -= ss, bp += ss) {
+ if ((ss = GRN_READ(fd, bp, rest)) == -1) { goto exit; }
+ }
+ GRN_TEXT_PUT(ctx, bulk, buf, stat.st_size);
+ ret = 1;
+ }
+ GRN_FREE(buf);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "cannot stat file: <%s>", path);
+ }
+exit :
+ GRN_CLOSE(fd);
+ return ret;
+}
+
+#ifdef stat
+# undef stat
+#endif /* stat */
+
+/**** query expander ****/
+
+static grn_rc
+substitute_term_by_func(grn_ctx *ctx, const char *term, unsigned int term_len,
+ grn_obj *expanded_term, grn_user_data *user_data)
+{
+ grn_rc rc;
+ grn_obj *expander = user_data->ptr;
+ grn_obj grn_term;
+ grn_obj *caller;
+ grn_obj *rc_object;
+ int nargs = 0;
+
+ GRN_TEXT_INIT(&grn_term, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET(ctx, &grn_term, term, term_len);
+ grn_ctx_push(ctx, &grn_term);
+ nargs++;
+ grn_ctx_push(ctx, expanded_term);
+ nargs++;
+
+ caller = grn_expr_create(ctx, NULL, 0);
+ rc = grn_proc_call(ctx, expander, nargs, caller);
+ GRN_OBJ_FIN(ctx, &grn_term);
+ rc_object = grn_ctx_pop(ctx);
+ rc = GRN_INT32_VALUE(rc_object);
+ grn_obj_unlink(ctx, caller);
+
+ return rc;
+}
+
+static grn_rc
+substitute_term_by_column(grn_ctx *ctx, const char *term, unsigned int term_len,
+ grn_obj *expanded_term, grn_user_data *user_data)
+{
+ grn_rc rc = GRN_END_OF_DATA;
+ grn_id id;
+ grn_substitute_term_by_column_data *data = user_data->ptr;
+ grn_obj *table, *column;
+
+ table = data->table;
+ column = data->column;
+ if ((id = grn_table_get(ctx, table, term, term_len))) {
+ if ((column->header.type == GRN_COLUMN_VAR_SIZE) &&
+ ((column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR)) {
+ unsigned int i, n;
+ grn_obj values;
+ GRN_TEXT_INIT(&values, GRN_OBJ_VECTOR);
+ grn_obj_get_value(ctx, column, id, &values);
+ n = grn_vector_size(ctx, &values);
+ if (n > 1) { GRN_TEXT_PUTC(ctx, expanded_term, '('); }
+ for (i = 0; i < n; i++) {
+ const char *value;
+ unsigned int length;
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, expanded_term, " OR ");
+ }
+ if (n > 1) { GRN_TEXT_PUTC(ctx, expanded_term, '('); }
+ length = grn_vector_get_element(ctx, &values, i, &value, NULL, NULL);
+ GRN_TEXT_PUT(ctx, expanded_term, value, length);
+ if (n > 1) { GRN_TEXT_PUTC(ctx, expanded_term, ')'); }
+ }
+ if (n > 1) { GRN_TEXT_PUTC(ctx, expanded_term, ')'); }
+ GRN_OBJ_FIN(ctx, &values);
+ } else {
+ grn_obj_get_value(ctx, column, id, expanded_term);
+ }
+ rc = GRN_SUCCESS;
+ }
+ return rc;
+}
+
+static grn_rc
+substitute_terms(grn_ctx *ctx, const char *query, unsigned int query_len,
+ grn_expr_flags flags,
+ grn_obj *expanded_query,
+ grn_substitute_term_func substitute_term_func,
+ grn_user_data *user_data)
+{
+ grn_obj buf;
+ unsigned int len;
+ const char *start, *cur = query, *query_end = query + (size_t)query_len;
+ GRN_TEXT_INIT(&buf, 0);
+ for (;;) {
+ while (cur < query_end && grn_isspace(cur, ctx->encoding)) {
+ if (!(len = grn_charlen(ctx, cur, query_end))) { goto exit; }
+ GRN_TEXT_PUT(ctx, expanded_query, cur, len);
+ cur += len;
+ }
+ if (query_end <= cur) { break; }
+ switch (*cur) {
+ case '\0' :
+ goto exit;
+ break;
+ case GRN_QUERY_AND :
+ case GRN_QUERY_ADJ_INC :
+ case GRN_QUERY_ADJ_DEC :
+ case GRN_QUERY_ADJ_NEG :
+ case GRN_QUERY_AND_NOT :
+ case GRN_QUERY_PARENL :
+ case GRN_QUERY_PARENR :
+ case GRN_QUERY_PREFIX :
+ GRN_TEXT_PUTC(ctx, expanded_query, *cur);
+ cur++;
+ break;
+ case GRN_QUERY_QUOTEL :
+ GRN_BULK_REWIND(&buf);
+ for (start = cur++; cur < query_end; cur += len) {
+ if (!(len = grn_charlen(ctx, cur, query_end))) {
+ goto exit;
+ } else if (len == 1) {
+ if (*cur == GRN_QUERY_QUOTER) {
+ cur++;
+ break;
+ } else if (cur + 1 < query_end && *cur == GRN_QUERY_ESCAPE) {
+ cur++;
+ len = grn_charlen(ctx, cur, query_end);
+ }
+ }
+ GRN_TEXT_PUT(ctx, &buf, cur, len);
+ }
+ if (substitute_term_func(ctx, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf),
+ expanded_query, user_data)) {
+ GRN_TEXT_PUT(ctx, expanded_query, start, cur - start);
+ }
+ break;
+ case 'O' :
+ if (cur + 2 <= query_end && cur[1] == 'R' &&
+ (cur + 2 == query_end || grn_isspace(cur + 2, ctx->encoding))) {
+ GRN_TEXT_PUT(ctx, expanded_query, cur, 2);
+ cur += 2;
+ break;
+ }
+ /* fallthru */
+ default :
+ for (start = cur; cur < query_end; cur += len) {
+ if (!(len = grn_charlen(ctx, cur, query_end))) {
+ goto exit;
+ } else if (grn_isspace(cur, ctx->encoding)) {
+ break;
+ } else if (len == 1) {
+ if (*cur == GRN_QUERY_PARENL ||
+ *cur == GRN_QUERY_PARENR ||
+ *cur == GRN_QUERY_PREFIX) {
+ break;
+ } else if (flags & GRN_EXPR_ALLOW_COLUMN && *cur == GRN_QUERY_COLUMN) {
+ if (cur + 1 < query_end) {
+ switch (cur[1]) {
+ case '!' :
+ case '@' :
+ case '^' :
+ case '$' :
+ cur += 2;
+ break;
+ case '=' :
+ cur += (flags & GRN_EXPR_ALLOW_UPDATE) ? 2 : 1;
+ break;
+ case '<' :
+ case '>' :
+ cur += (cur + 2 < query_end && cur[2] == '=') ? 3 : 2;
+ break;
+ default :
+ cur += 1;
+ break;
+ }
+ } else {
+ cur += 1;
+ }
+ GRN_TEXT_PUT(ctx, expanded_query, start, cur - start);
+ start = cur;
+ break;
+ }
+ }
+ }
+ if (start < cur) {
+ if (substitute_term_func(ctx, start, cur - start,
+ expanded_query, user_data)) {
+ GRN_TEXT_PUT(ctx, expanded_query, start, cur - start);
+ }
+ }
+ break;
+ }
+ }
+exit :
+ GRN_OBJ_FIN(ctx, &buf);
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+expand_query(grn_ctx *ctx, const char *query, unsigned int query_len,
+ grn_expr_flags flags,
+ const char *query_expander_name,
+ unsigned int query_expander_name_len,
+ grn_obj *expanded_query)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *query_expander;
+
+ query_expander = grn_ctx_get(ctx,
+ query_expander_name, query_expander_name_len);
+ if (!query_expander) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "nonexistent query expansion column: <%.*s>",
+ query_expander_name_len, query_expander_name);
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ switch (query_expander->header.type) {
+ case GRN_PROC :
+ if (((grn_proc *)query_expander)->type == GRN_PROC_FUNCTION) {
+ grn_user_data user_data;
+ user_data.ptr = query_expander;
+ substitute_terms(ctx, query, query_len, flags, expanded_query,
+ substitute_term_by_func, &user_data);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[expand-query] must be function proc: <%.*s>",
+ query_expander_name_len, query_expander_name);
+ }
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ {
+ grn_obj *query_expansion_table;
+ query_expansion_table = grn_column_table(ctx, query_expander);
+ if (query_expansion_table) {
+ grn_user_data user_data;
+ grn_substitute_term_by_column_data data;
+ user_data.ptr = &data;
+ data.table = query_expansion_table;
+ data.column = query_expander;
+ substitute_terms(ctx, query, query_len, flags, expanded_query,
+ substitute_term_by_column, &user_data);
+ grn_obj_unlink(ctx, query_expansion_table);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[expand-query] failed to get table of column: <%.*s>",
+ query_expander_name_len, query_expander_name);
+ }
+ }
+ break;
+ default :
+ rc = GRN_INVALID_ARGUMENT;
+ {
+ grn_obj type_name;
+ GRN_TEXT_INIT(&type_name, 0);
+ grn_inspect_type(ctx, &type_name, query_expander->header.type);
+ ERR(rc,
+ "[expand-query] must be a column or function proc: <%.*s>(%.*s)",
+ query_expander_name_len, query_expander_name,
+ (int)GRN_TEXT_LEN(&type_name), GRN_TEXT_VALUE(&type_name));
+ GRN_OBJ_FIN(ctx, &type_name);
+ }
+ break;
+ }
+ grn_obj_unlink(ctx, query_expander);
+
+ return rc;
+}
+
+
+/**** procs ****/
+
+#define DEFAULT_LIMIT 10
+#define DEFAULT_OUTPUT_COLUMNS "_id, _key, *"
+#define DEFAULT_DRILLDOWN_LIMIT 10
+#define DEFAULT_DRILLDOWN_OUTPUT_COLUMNS "_key, _nsubrecs"
+#define DUMP_COLUMNS "_id, _key, _value, *"
+
+static grn_expr_flags
+grn_parse_query_flags(grn_ctx *ctx, const char *query_flags,
+ unsigned int query_flags_len)
+{
+ grn_expr_flags flags = 0;
+ const char *query_flags_end = query_flags + query_flags_len;
+
+ while (query_flags < query_flags_end) {
+ if (*query_flags == '|' || *query_flags == ' ') {
+ query_flags += 1;
+ continue;
+ }
+
+#define CHECK_EXPR_FLAG(name)\
+ if (((query_flags_end - query_flags) >= (sizeof(#name) - 1)) &&\
+ (!memcmp(query_flags, #name, sizeof(#name) - 1))) {\
+ flags |= GRN_EXPR_ ## name;\
+ query_flags += sizeof(#name);\
+ continue;\
+ }
+
+ CHECK_EXPR_FLAG(ALLOW_PRAGMA);
+ CHECK_EXPR_FLAG(ALLOW_COLUMN);
+ CHECK_EXPR_FLAG(ALLOW_UPDATE);
+ CHECK_EXPR_FLAG(ALLOW_LEADING_NOT);
+
+#define GRN_EXPR_NONE 0
+ CHECK_EXPR_FLAG(NONE);
+#undef GNR_EXPR_NONE
+
+ ERR(GRN_INVALID_ARGUMENT, "invalid query flag: <%.*s>",
+ (int)(query_flags_end - query_flags), query_flags);
+ return 0;
+#undef CHECK_EXPR_FLAG
+ }
+
+ return flags;
+}
+
+static inline grn_bool
+is_output_columns_format_v1(grn_ctx *ctx,
+ const char *output_columns,
+ unsigned int output_columns_len)
+{
+ unsigned int i;
+
+ /* TODO: REMOVE ME. If new output_columns handler is marked as stable,
+ this check is removed. We need more error checks. */
+ if (grn_ctx_get_command_version(ctx) == GRN_COMMAND_VERSION_1) {
+ return GRN_TRUE;
+ }
+
+ for (i = 0; i < output_columns_len; i++) {
+ switch (output_columns[i]) {
+ case ',' :
+ case '(' :
+ return GRN_FALSE;
+ default :
+ break;
+ }
+ }
+
+ return GRN_TRUE;
+}
+
+static int
+grn_select_apply_adjuster_ensure_factor(grn_ctx *ctx, grn_obj *factor_object)
+{
+ if (!factor_object) {
+ return 1;
+ } else if (factor_object->header.domain == GRN_DB_INT32) {
+ return GRN_INT32_VALUE(factor_object);
+ } else {
+ grn_rc rc;
+ grn_obj int32_object;
+ int factor;
+ GRN_INT32_INIT(&int32_object, 0);
+ rc = grn_obj_cast(ctx, factor_object, &int32_object, GRN_FALSE);
+ if (rc == GRN_SUCCESS) {
+ factor = GRN_INT32_VALUE(&int32_object);
+ } else {
+ /* TODO: Log or return error? */
+ factor = 1;
+ }
+ GRN_OBJ_FIN(ctx, &int32_object);
+ return factor;
+ }
+}
+
+static void
+grn_select_apply_adjuster_adjust(grn_ctx *ctx, grn_obj *table, grn_obj *res,
+ grn_obj *column, grn_obj *value,
+ grn_obj *factor)
+{
+ grn_obj *index;
+ unsigned int n_indexes;
+ int factor_value;
+
+ n_indexes = grn_column_index(ctx, column, GRN_OP_MATCH, &index, 1, NULL);
+ if (n_indexes == 0) {
+ char column_name[GRN_TABLE_MAX_KEY_SIZE];
+ int column_name_size;
+ column_name_size = grn_obj_name(ctx, column,
+ column_name, GRN_TABLE_MAX_KEY_SIZE);
+ ERR(GRN_INVALID_ARGUMENT,
+ "adjuster requires index column for the target column: <%.*s>",
+ column_name_size, column_name);
+ return;
+ }
+
+ factor_value = grn_select_apply_adjuster_ensure_factor(ctx, factor);
+
+ {
+ grn_search_optarg options;
+
+ options.mode = GRN_OP_EXACT;
+ options.similarity_threshold = 0;
+ options.max_interval = 0;
+ options.weight_vector = NULL;
+ options.vector_size = factor_value;
+ options.proc = NULL;
+ options.max_size = 0;
+
+ grn_obj_search(ctx, index, value, res, GRN_OP_ADJUST, &options);
+ }
+}
+
+static void
+grn_select_apply_adjuster(grn_ctx *ctx, grn_obj *table, grn_obj *res,
+ grn_obj *adjuster)
+{
+ grn_expr *expr = (grn_expr *)adjuster;
+ grn_expr_code *code, *code_end;
+
+ code = expr->codes;
+ code_end = expr->codes + expr->codes_curr;
+ while (code < code_end) {
+ grn_obj *column, *value, *factor;
+
+ if (code->op == GRN_OP_PLUS) {
+ code++;
+ continue;
+ }
+
+ column = code->value;
+ code++;
+ value = code->value;
+ code++;
+ code++; /* op == GRN_OP_MATCH */
+ if ((code_end - code) >= 2 && code[1].op == GRN_OP_STAR) {
+ factor = code->value;
+ code++;
+ code++; /* op == GRN_OP_STAR */
+ } else {
+ factor = NULL;
+ }
+ grn_select_apply_adjuster_adjust(ctx, table, res, column, value, factor);
+ }
+}
+
+grn_rc
+grn_select(grn_ctx *ctx, const char *table, unsigned int table_len,
+ const char *match_columns, unsigned int match_columns_len,
+ const char *query, unsigned int query_len,
+ const char *filter, unsigned int filter_len,
+ const char *scorer, unsigned int scorer_len,
+ const char *sortby, unsigned int sortby_len,
+ const char *output_columns, unsigned int output_columns_len,
+ int offset, int limit,
+ const char *drilldown, unsigned int drilldown_len,
+ const char *drilldown_sortby, unsigned int drilldown_sortby_len,
+ const char *drilldown_output_columns, unsigned int drilldown_output_columns_len,
+ int drilldown_offset, int drilldown_limit,
+ const char *cache, unsigned int cache_len,
+ const char *match_escalation_threshold, unsigned int match_escalation_threshold_len,
+ const char *query_expander, unsigned int query_expander_len,
+ const char *query_flags, unsigned int query_flags_len,
+ const char *adjuster, unsigned int adjuster_len)
+{
+ uint32_t nkeys, nhits;
+ uint16_t cacheable = 1, taintable = 0;
+ grn_obj_format format;
+ grn_table_sort_key *keys;
+ grn_obj *outbuf = ctx->impl->outbuf;
+ grn_content_type output_type = ctx->impl->output_type;
+ grn_obj *table_, *match_columns_ = NULL, *cond = NULL, *scorer_, *res = NULL, *sorted;
+ char cache_key[GRN_TABLE_MAX_KEY_SIZE];
+ uint32_t cache_key_size = table_len + 1 + match_columns_len + 1 + query_len + 1 +
+ filter_len + 1 + scorer_len + 1 + sortby_len + 1 + output_columns_len + 1 +
+ drilldown_len + 1 + drilldown_sortby_len + 1 +
+ drilldown_output_columns_len + 1 + match_escalation_threshold_len + 1 +
+ query_expander_len + 1 + query_flags_len + 1 + adjuster_len + 1 +
+ sizeof(grn_content_type) + sizeof(int) * 4;
+ long long int threshold, original_threshold = 0;
+ grn_cache *cache_obj = grn_cache_current_get(ctx);
+ if (cache_key_size <= GRN_TABLE_MAX_KEY_SIZE) {
+ grn_obj *cache_value;
+ char *cp = cache_key;
+ memcpy(cp, table, table_len);
+ cp += table_len; *cp++ = '\0';
+ memcpy(cp, match_columns, match_columns_len);
+ cp += match_columns_len; *cp++ = '\0';
+ memcpy(cp, query, query_len);
+ cp += query_len; *cp++ = '\0';
+ memcpy(cp, filter, filter_len);
+ cp += filter_len; *cp++ = '\0';
+ memcpy(cp, scorer, scorer_len);
+ cp += scorer_len; *cp++ = '\0';
+ memcpy(cp, sortby, sortby_len);
+ cp += sortby_len; *cp++ = '\0';
+ memcpy(cp, output_columns, output_columns_len);
+ cp += output_columns_len; *cp++ = '\0';
+ memcpy(cp, drilldown, drilldown_len);
+ cp += drilldown_len; *cp++ = '\0';
+ memcpy(cp, drilldown_sortby, drilldown_sortby_len);
+ cp += drilldown_sortby_len; *cp++ = '\0';
+ memcpy(cp, drilldown_output_columns, drilldown_output_columns_len);
+ cp += drilldown_output_columns_len; *cp++ = '\0';
+ memcpy(cp, match_escalation_threshold, match_escalation_threshold_len);
+ cp += match_escalation_threshold_len; *cp++ = '\0';
+ memcpy(cp, query_expander, query_expander_len);
+ cp += query_expander_len; *cp++ = '\0';
+ memcpy(cp, query_flags, query_flags_len);
+ cp += query_flags_len; *cp++ = '\0';
+ memcpy(cp, adjuster, adjuster_len);
+ cp += adjuster_len; *cp++ = '\0';
+ memcpy(cp, &output_type, sizeof(grn_content_type)); cp += sizeof(grn_content_type);
+ memcpy(cp, &offset, sizeof(int)); cp += sizeof(int);
+ memcpy(cp, &limit, sizeof(int)); cp += sizeof(int);
+ memcpy(cp, &drilldown_offset, sizeof(int)); cp += sizeof(int);
+ memcpy(cp, &drilldown_limit, sizeof(int)); cp += sizeof(int);
+ cache_value = grn_cache_fetch(ctx, cache_obj, cache_key, cache_key_size);
+ if (cache_value) {
+ GRN_TEXT_PUT(ctx, outbuf,
+ GRN_TEXT_VALUE(cache_value),
+ GRN_TEXT_LEN(cache_value));
+ grn_cache_unref(ctx, cache_obj, cache_key, cache_key_size);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_CACHE,
+ ":", "cache(%" GRN_FMT_LLD ")",
+ (long long int)GRN_TEXT_LEN(cache_value));
+ return ctx->rc;
+ }
+ }
+ if (match_escalation_threshold_len) {
+ const char *end, *rest;
+ original_threshold = grn_ctx_get_match_escalation_threshold(ctx);
+ end = match_escalation_threshold + match_escalation_threshold_len;
+ threshold = grn_atoll(match_escalation_threshold, end, &rest);
+ if (end == rest) {
+ grn_ctx_set_match_escalation_threshold(ctx, threshold);
+ }
+ }
+ if ((table_ = grn_ctx_get(ctx, table, table_len))) {
+ // match_columns_ = grn_obj_column(ctx, table_, match_columns, match_columns_len);
+ if (query_len || filter_len) {
+ grn_obj *v;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, cond, v);
+ if (cond) {
+ if (match_columns_len) {
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, match_columns_, v);
+ if (match_columns_) {
+ grn_expr_parse(ctx, match_columns_, match_columns, match_columns_len,
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ } else {
+ /* todo */
+ }
+ }
+ if (query_len) {
+ grn_expr_flags flags;
+ grn_obj query_expander_buf;
+ GRN_TEXT_INIT(&query_expander_buf, 0);
+ flags = GRN_EXPR_SYNTAX_QUERY;
+ if (query_flags_len) {
+ flags |= grn_parse_query_flags(ctx, query_flags, query_flags_len);
+ } else {
+ flags |= GRN_EXPR_ALLOW_PRAGMA|GRN_EXPR_ALLOW_COLUMN;
+ if (ctx->rc) {
+ goto exit;
+ }
+ }
+ if (query_expander_len) {
+ if (expand_query(ctx, query, query_len, flags,
+ query_expander, query_expander_len,
+ &query_expander_buf) == GRN_SUCCESS) {
+ query = GRN_TEXT_VALUE(&query_expander_buf);
+ query_len = GRN_TEXT_LEN(&query_expander_buf);
+ } else {
+ GRN_OBJ_FIN(ctx, &query_expander_buf);
+ goto exit;
+ }
+ }
+ grn_expr_parse(ctx, cond, query, query_len,
+ match_columns_, GRN_OP_MATCH, GRN_OP_AND, flags);
+ GRN_OBJ_FIN(ctx, &query_expander_buf);
+ if (!ctx->rc && filter_len) {
+ grn_expr_parse(ctx, cond, filter, filter_len,
+ match_columns_, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ if (!ctx->rc) { grn_expr_append_op(ctx, cond, GRN_OP_AND, 2); }
+ }
+ } else {
+ grn_expr_parse(ctx, cond, filter, filter_len,
+ match_columns_, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ }
+ cacheable *= ((grn_expr *)cond)->cacheable;
+ taintable += ((grn_expr *)cond)->taintable;
+ /*
+ grn_obj strbuf;
+ GRN_TEXT_INIT(&strbuf, 0);
+ grn_expr_inspect(ctx, &strbuf, cond);
+ GRN_TEXT_PUTC(ctx, &strbuf, '\0');
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "query=(%s)", GRN_TEXT_VALUE(&strbuf));
+ GRN_OBJ_FIN(ctx, &strbuf);
+ */
+ if (!ctx->rc) { res = grn_table_select(ctx, table_, cond, NULL, GRN_OP_OR); }
+ } else {
+ /* todo */
+ ERRCLR(ctx);
+ }
+ } else {
+ res = table_;
+ }
+ nhits = res ? grn_table_size(ctx, res) : 0;
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "select(%d)", nhits);
+
+ if (res) {
+ uint32_t ngkeys;
+ grn_table_sort_key *gkeys = NULL;
+ int result_size = 1;
+ if (!ctx->rc && drilldown_len) {
+ gkeys = grn_table_sort_key_from_str(ctx,
+ drilldown, drilldown_len,
+ res, &ngkeys);
+ if (gkeys) {
+ result_size += ngkeys;
+ }
+ }
+
+ if (adjuster && adjuster_len) {
+ grn_obj *adjuster_;
+ grn_obj *v;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, adjuster_, v);
+ if (adjuster_ && v) {
+ grn_rc rc;
+ rc = grn_expr_parse(ctx, adjuster_, adjuster, adjuster_len, NULL,
+ GRN_OP_MATCH, GRN_OP_ADJUST,
+ GRN_EXPR_SYNTAX_ADJUSTER);
+ if (rc) {
+ grn_obj_unlink(ctx, adjuster_);
+ goto exit;
+ }
+ cacheable *= ((grn_expr *)adjuster_)->cacheable;
+ taintable += ((grn_expr *)adjuster_)->taintable;
+ grn_select_apply_adjuster(ctx, table_, res, adjuster_);
+ grn_obj_unlink(ctx, adjuster_);
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "adjust(%d)", nhits);
+ }
+
+ if (scorer && scorer_len) {
+ grn_obj *v;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, res, scorer_, v);
+ if (scorer_ && v) {
+ grn_table_cursor *tc;
+ grn_expr_parse(ctx, scorer_, scorer, scorer_len, NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE);
+ cacheable *= ((grn_expr *)scorer_)->cacheable;
+ taintable += ((grn_expr *)scorer_)->taintable;
+ if ((tc = grn_table_cursor_open(ctx, res, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ GRN_RECORD_SET(ctx, v, id);
+ grn_expr_exec(ctx, scorer_, 0);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ grn_obj_unlink(ctx, scorer_);
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "score(%d)", nhits);
+ }
+
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", result_size);
+
+ grn_normalize_offset_and_limit(ctx, nhits, &offset, &limit);
+
+ if (sortby_len &&
+ (keys = grn_table_sort_key_from_str(ctx, sortby, sortby_len, res, &nkeys))) {
+ if ((sorted = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_NO_KEY, NULL, res))) {
+ grn_table_sort(ctx, res, offset, limit, sorted, keys, nkeys);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "sort(%d)", limit);
+ GRN_OBJ_FORMAT_INIT(&format, nhits, 0, limit, offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET;
+ if (is_output_columns_format_v1(ctx, output_columns, output_columns_len)) {
+ grn_obj_columns(ctx, sorted, output_columns, output_columns_len,
+ &format.columns);
+ } else {
+ grn_obj *v;
+ grn_obj *condition_ptr;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, sorted, format.expression, v);
+ grn_expr_parse(ctx, format.expression,
+ output_columns, output_columns_len, NULL,
+ GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_OUTPUT_COLUMNS);
+ condition_ptr =
+ grn_expr_get_or_add_var(ctx, format.expression,
+ GRN_SELECT_INTERNAL_VAR_CONDITION,
+ strlen(GRN_SELECT_INTERNAL_VAR_CONDITION));
+ GRN_PTR_INIT(condition_ptr, 0, GRN_DB_OBJECT);
+ GRN_PTR_SET(ctx, condition_ptr, cond);
+ }
+ GRN_OUTPUT_OBJ(sorted, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ grn_obj_unlink(ctx, sorted);
+ }
+ grn_table_sort_key_close(ctx, keys, nkeys);
+ } else {
+ if (!ctx->rc) {
+ GRN_OBJ_FORMAT_INIT(&format, nhits, offset, limit, offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET;
+ if (is_output_columns_format_v1(ctx, output_columns, output_columns_len)) {
+ grn_obj_columns(ctx, res, output_columns, output_columns_len,
+ &format.columns);
+ } else {
+ grn_obj *v;
+ grn_obj *condition_ptr;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, res, format.expression, v);
+ grn_expr_parse(ctx, format.expression,
+ output_columns, output_columns_len, NULL,
+ GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_OUTPUT_COLUMNS);
+ condition_ptr =
+ grn_expr_get_or_add_var(ctx, format.expression,
+ GRN_SELECT_INTERNAL_VAR_CONDITION,
+ strlen(GRN_SELECT_INTERNAL_VAR_CONDITION));
+ GRN_PTR_INIT(condition_ptr, 0, GRN_DB_OBJECT);
+ GRN_PTR_SET(ctx, condition_ptr, cond);
+ }
+ GRN_OUTPUT_OBJ(res, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "output(%d)", limit);
+ if (!ctx->rc && drilldown_len) {
+ uint32_t i;
+ grn_table_group_result g = {NULL, 0, 0, 1, GRN_TABLE_GROUP_CALC_COUNT, 0};
+ if (gkeys) {
+ for (i = 0; i < ngkeys; i++) {
+ if ((g.table = grn_table_create_for_group(ctx, NULL, 0, NULL,
+ gkeys[i].key, res, 0))) {
+ int n_drilldown_offset = drilldown_offset,
+ n_drilldown_limit = drilldown_limit;
+
+ grn_table_group(ctx, res, &gkeys[i], 1, &g, 1);
+ nhits = grn_table_size(ctx, g.table);
+
+ grn_normalize_offset_and_limit(ctx, nhits,
+ &n_drilldown_offset, &n_drilldown_limit);
+
+ if (drilldown_sortby_len) {
+ if ((keys = grn_table_sort_key_from_str(ctx,
+ drilldown_sortby, drilldown_sortby_len,
+ g.table, &nkeys))) {
+ if ((sorted = grn_table_create(ctx, NULL, 0, NULL, GRN_OBJ_TABLE_NO_KEY,
+ NULL, g.table))) {
+ grn_table_sort(ctx, g.table, n_drilldown_offset, n_drilldown_limit,
+ sorted, keys, nkeys);
+ GRN_OBJ_FORMAT_INIT(&format, nhits, 0,
+ n_drilldown_limit, n_drilldown_offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_NAVIGATIONENTRY;
+ grn_obj_columns(ctx, sorted,
+ drilldown_output_columns, drilldown_output_columns_len,
+ &format.columns);
+ GRN_OUTPUT_OBJ(sorted, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ grn_obj_unlink(ctx, sorted);
+ }
+ grn_table_sort_key_close(ctx, keys, nkeys);
+ }
+ } else {
+ GRN_OBJ_FORMAT_INIT(&format, nhits, n_drilldown_offset,
+ n_drilldown_limit, n_drilldown_offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_NAVIGATIONENTRY;
+ grn_obj_columns(ctx, g.table, drilldown_output_columns,
+ drilldown_output_columns_len, &format.columns);
+ GRN_OUTPUT_OBJ(g.table, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ grn_obj_unlink(ctx, g.table);
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "drilldown(%d)", nhits);
+ }
+ grn_table_sort_key_close(ctx, gkeys, ngkeys);
+ }
+ }
+ if (res != table_) { grn_obj_unlink(ctx, res); }
+ } else {
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 0);
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ if (!ctx->rc && cacheable && cache_key_size <= GRN_TABLE_MAX_KEY_SIZE
+ && (!cache || cache_len != 2 || *cache != 'n' || *(cache + 1) != 'o')) {
+ grn_cache_update(ctx, cache_obj, cache_key, cache_key_size, outbuf);
+ }
+ if (taintable) { grn_db_touch(ctx, DB_OBJ(table_)->db); }
+ grn_obj_unlink(ctx, table_);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid table name: <%.*s>", table_len, table);
+ }
+exit:
+ if (match_escalation_threshold_len) {
+ grn_ctx_set_match_escalation_threshold(ctx, original_threshold);
+ }
+ if (match_columns_) {
+ grn_obj_unlink(ctx, match_columns_);
+ }
+ if (cond) {
+ grn_obj_unlink(ctx, cond);
+ }
+ /* GRN_LOG(ctx, GRN_LOG_NONE, "%d", ctx->seqno); */
+ return ctx->rc;
+}
+
+static grn_obj *
+proc_select(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int offset = GRN_TEXT_LEN(VAR(7))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(7)), GRN_BULK_CURR(VAR(7)), NULL)
+ : 0;
+ int limit = GRN_TEXT_LEN(VAR(8))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(8)), GRN_BULK_CURR(VAR(8)), NULL)
+ : DEFAULT_LIMIT;
+ const char *output_columns = GRN_TEXT_VALUE(VAR(6));
+ uint32_t output_columns_len = GRN_TEXT_LEN(VAR(6));
+ const char *drilldown_output_columns = GRN_TEXT_VALUE(VAR(11));
+ uint32_t drilldown_output_columns_len = GRN_TEXT_LEN(VAR(11));
+ int drilldown_offset = GRN_TEXT_LEN(VAR(12))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(12)), GRN_BULK_CURR(VAR(12)), NULL)
+ : 0;
+ int drilldown_limit = GRN_TEXT_LEN(VAR(13))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(13)), GRN_BULK_CURR(VAR(13)), NULL)
+ : DEFAULT_DRILLDOWN_LIMIT;
+ grn_obj *query_expansion = VAR(16);
+ grn_obj *query_expander = VAR(18);
+ grn_obj *adjuster = VAR(19);
+ if (GRN_TEXT_LEN(query_expander) == 0 && GRN_TEXT_LEN(query_expansion) > 0) {
+ query_expander = query_expansion;
+ }
+ if (!output_columns_len) {
+ output_columns = DEFAULT_OUTPUT_COLUMNS;
+ output_columns_len = strlen(DEFAULT_OUTPUT_COLUMNS);
+ }
+ if (!drilldown_output_columns_len) {
+ drilldown_output_columns = DEFAULT_DRILLDOWN_OUTPUT_COLUMNS;
+ drilldown_output_columns_len = strlen(DEFAULT_DRILLDOWN_OUTPUT_COLUMNS);
+ }
+ if (grn_select(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
+ GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)),
+ GRN_TEXT_VALUE(VAR(3)), GRN_TEXT_LEN(VAR(3)),
+ GRN_TEXT_VALUE(VAR(4)), GRN_TEXT_LEN(VAR(4)),
+ GRN_TEXT_VALUE(VAR(5)), GRN_TEXT_LEN(VAR(5)),
+ output_columns, output_columns_len,
+ offset, limit,
+ GRN_TEXT_VALUE(VAR(9)), GRN_TEXT_LEN(VAR(9)),
+ GRN_TEXT_VALUE(VAR(10)), GRN_TEXT_LEN(VAR(10)),
+ drilldown_output_columns, drilldown_output_columns_len,
+ drilldown_offset, drilldown_limit,
+ GRN_TEXT_VALUE(VAR(14)), GRN_TEXT_LEN(VAR(14)),
+ GRN_TEXT_VALUE(VAR(15)), GRN_TEXT_LEN(VAR(15)),
+ GRN_TEXT_VALUE(query_expander), GRN_TEXT_LEN(query_expander),
+ GRN_TEXT_VALUE(VAR(17)), GRN_TEXT_LEN(VAR(17)),
+ GRN_TEXT_VALUE(adjuster), GRN_TEXT_LEN(adjuster))) {
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_define_selector(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ uint32_t i, nvars;
+ grn_expr_var *vars;
+ grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL);
+ for (i = 1; i < nvars; i++) {
+ GRN_TEXT_SET(ctx, &((vars + i)->value),
+ GRN_TEXT_VALUE(VAR(i)), GRN_TEXT_LEN(VAR(i)));
+ }
+ grn_proc_create(ctx,
+ GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ GRN_PROC_COMMAND, proc_select, NULL, NULL, nvars - 1, vars + 1);
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_load(ctx, grn_get_ctype(VAR(4)),
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
+ GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)),
+ GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ GRN_TEXT_VALUE(VAR(3)), GRN_TEXT_LEN(VAR(3)),
+ GRN_TEXT_VALUE(VAR(5)), GRN_TEXT_LEN(VAR(5)));
+ if (ctx->impl->loader.stat != GRN_LOADER_END) {
+ grn_ctx_set_next_expr(ctx, grn_proc_get_info(ctx, user_data, NULL, NULL, NULL));
+ } else {
+ GRN_OUTPUT_INT64(ctx->impl->loader.nrecords);
+ if (ctx->impl->loader.table) {
+ grn_db_touch(ctx, DB_OBJ(ctx->impl->loader.table)->db);
+ }
+ /* maybe necessary : grn_ctx_loader_clear(ctx); */
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_status(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_timeval now;
+ grn_cache *cache;
+ grn_cache_statistics statistics;
+
+ grn_timeval_now(ctx, &now);
+ cache = grn_cache_current_get(ctx);
+ grn_cache_get_statistics(ctx, cache, &statistics);
+ GRN_OUTPUT_MAP_OPEN("RESULT", 9);
+ GRN_OUTPUT_CSTR("alloc_count");
+ GRN_OUTPUT_INT32(grn_alloc_count());
+ GRN_OUTPUT_CSTR("starttime");
+ GRN_OUTPUT_INT32(grn_starttime.tv_sec);
+ GRN_OUTPUT_CSTR("uptime");
+ GRN_OUTPUT_INT32(now.tv_sec - grn_starttime.tv_sec);
+ GRN_OUTPUT_CSTR("version");
+ GRN_OUTPUT_CSTR(grn_get_version());
+ GRN_OUTPUT_CSTR("n_queries");
+ GRN_OUTPUT_INT64(statistics.nfetches);
+ GRN_OUTPUT_CSTR("cache_hit_rate");
+ if (statistics.nfetches == 0) {
+ GRN_OUTPUT_FLOAT(0.0);
+ } else {
+ double cache_hit_rate;
+ cache_hit_rate = (double)statistics.nhits / (double)statistics.nfetches;
+ GRN_OUTPUT_FLOAT(cache_hit_rate * 100.0);
+ }
+ GRN_OUTPUT_CSTR("command_version");
+ GRN_OUTPUT_INT32(grn_ctx_get_command_version(ctx));
+ GRN_OUTPUT_CSTR("default_command_version");
+ GRN_OUTPUT_INT32(grn_get_default_command_version());
+ GRN_OUTPUT_CSTR("max_command_version");
+ GRN_OUTPUT_INT32(GRN_COMMAND_VERSION_MAX);
+ GRN_OUTPUT_MAP_CLOSE();
+ return NULL;
+}
+
+static grn_obj_flags
+grn_parse_table_create_flags(grn_ctx *ctx, const char *nptr, const char *end)
+{
+ grn_obj_flags flags = 0;
+ while (nptr < end) {
+ if (*nptr == '|' || *nptr == ' ') {
+ nptr += 1;
+ continue;
+ }
+ if (!memcmp(nptr, "TABLE_HASH_KEY", 14)) {
+ flags |= GRN_OBJ_TABLE_HASH_KEY;
+ nptr += 14;
+ } else if (!memcmp(nptr, "TABLE_PAT_KEY", 13)) {
+ flags |= GRN_OBJ_TABLE_PAT_KEY;
+ nptr += 13;
+ } else if (!memcmp(nptr, "TABLE_DAT_KEY", 13)) {
+ flags |= GRN_OBJ_TABLE_DAT_KEY;
+ nptr += 13;
+ } else if (!memcmp(nptr, "TABLE_NO_KEY", 12)) {
+ flags |= GRN_OBJ_TABLE_NO_KEY;
+ nptr += 12;
+ } else if (!memcmp(nptr, "KEY_NORMALIZE", 13)) {
+ flags |= GRN_OBJ_KEY_NORMALIZE;
+ nptr += 13;
+ } else if (!memcmp(nptr, "KEY_WITH_SIS", 12)) {
+ flags |= GRN_OBJ_KEY_WITH_SIS;
+ nptr += 12;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid flags option: %.*s",
+ (int)(end - nptr), nptr);
+ return 0;
+ }
+ }
+ return flags;
+}
+
+static grn_obj_flags
+grn_parse_column_create_flags(grn_ctx *ctx, const char *nptr, const char *end)
+{
+ grn_obj_flags flags = 0;
+ while (nptr < end) {
+ if (*nptr == '|' || *nptr == ' ') {
+ nptr += 1;
+ continue;
+ }
+ if (!memcmp(nptr, "COLUMN_SCALAR", 13)) {
+ flags |= GRN_OBJ_COLUMN_SCALAR;
+ nptr += 13;
+ } else if (!memcmp(nptr, "COLUMN_VECTOR", 13)) {
+ flags |= GRN_OBJ_COLUMN_VECTOR;
+ nptr += 13;
+ } else if (!memcmp(nptr, "COLUMN_INDEX", 12)) {
+ flags |= GRN_OBJ_COLUMN_INDEX;
+ nptr += 12;
+ } else if (!memcmp(nptr, "COMPRESS_ZLIB", 13)) {
+ flags |= GRN_OBJ_COMPRESS_ZLIB;
+ nptr += 13;
+ } else if (!memcmp(nptr, "COMPRESS_LZO", 12)) {
+ flags |= GRN_OBJ_COMPRESS_LZO;
+ nptr += 12;
+ } else if (!memcmp(nptr, "WITH_SECTION", 12)) {
+ flags |= GRN_OBJ_WITH_SECTION;
+ nptr += 12;
+ } else if (!memcmp(nptr, "WITH_WEIGHT", 11)) {
+ flags |= GRN_OBJ_WITH_WEIGHT;
+ nptr += 11;
+ } else if (!memcmp(nptr, "WITH_POSITION", 13)) {
+ flags |= GRN_OBJ_WITH_POSITION;
+ nptr += 13;
+ } else if (!memcmp(nptr, "RING_BUFFER", 11)) {
+ flags |= GRN_OBJ_RING_BUFFER;
+ nptr += 11;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid flags option: %.*s",
+ (int)(end - nptr), nptr);
+ return 0;
+ }
+ }
+ return flags;
+}
+
+static void
+grn_table_create_flags_to_text(grn_ctx *ctx, grn_obj *buf, grn_obj_flags flags)
+{
+ GRN_BULK_REWIND(buf);
+ switch (flags & GRN_OBJ_TABLE_TYPE_MASK) {
+ case GRN_OBJ_TABLE_HASH_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "TABLE_HASH_KEY");
+ break;
+ case GRN_OBJ_TABLE_PAT_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "TABLE_PAT_KEY");
+ break;
+ case GRN_OBJ_TABLE_DAT_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "TABLE_DAT_KEY");
+ break;
+ case GRN_OBJ_TABLE_NO_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "TABLE_NO_KEY");
+ break;
+ }
+ if (flags & GRN_OBJ_KEY_WITH_SIS) {
+ GRN_TEXT_PUTS(ctx, buf, "|KEY_WITH_SIS");
+ }
+ if (flags & GRN_OBJ_KEY_NORMALIZE) {
+ GRN_TEXT_PUTS(ctx, buf, "|KEY_NORMALIZE");
+ }
+ if (flags & GRN_OBJ_PERSISTENT) {
+ GRN_TEXT_PUTS(ctx, buf, "|PERSISTENT");
+ }
+}
+
+static void
+grn_column_create_flags_to_text(grn_ctx *ctx, grn_obj *buf, grn_obj_flags flags)
+{
+ GRN_BULK_REWIND(buf);
+ switch (flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_SCALAR:
+ GRN_TEXT_PUTS(ctx, buf, "COLUMN_SCALAR");
+ break;
+ case GRN_OBJ_COLUMN_VECTOR:
+ GRN_TEXT_PUTS(ctx, buf, "COLUMN_VECTOR");
+ if (flags & GRN_OBJ_WITH_WEIGHT) {
+ GRN_TEXT_PUTS(ctx, buf, "|WITH_WEIGHT");
+ }
+ break;
+ case GRN_OBJ_COLUMN_INDEX:
+ GRN_TEXT_PUTS(ctx, buf, "COLUMN_INDEX");
+ if (flags & GRN_OBJ_WITH_SECTION) {
+ GRN_TEXT_PUTS(ctx, buf, "|WITH_SECTION");
+ }
+ if (flags & GRN_OBJ_WITH_WEIGHT) {
+ GRN_TEXT_PUTS(ctx, buf, "|WITH_WEIGHT");
+ }
+ if (flags & GRN_OBJ_WITH_POSITION) {
+ GRN_TEXT_PUTS(ctx, buf, "|WITH_POSITION");
+ }
+ break;
+ }
+ switch (flags & GRN_OBJ_COMPRESS_MASK) {
+ case GRN_OBJ_COMPRESS_NONE:
+ break;
+ case GRN_OBJ_COMPRESS_ZLIB:
+ GRN_TEXT_PUTS(ctx, buf, "|COMPRESS_ZLIB");
+ break;
+ case GRN_OBJ_COMPRESS_LZO:
+ GRN_TEXT_PUTS(ctx, buf, "|COMPRESS_LZO");
+ break;
+ }
+ if (flags & GRN_OBJ_PERSISTENT) {
+ GRN_TEXT_PUTS(ctx, buf, "|PERSISTENT");
+ }
+}
+
+static grn_bool
+proc_table_create_set_token_filters_put(grn_ctx *ctx,
+ grn_obj *token_filters,
+ const char *token_filter_name,
+ int token_filter_name_length)
+{
+ grn_obj *token_filter;
+
+ token_filter = grn_ctx_get(ctx,
+ token_filter_name,
+ token_filter_name_length);
+ if (token_filter) {
+ GRN_PTR_PUT(ctx, token_filters, token_filter);
+ return GRN_TRUE;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create][token-filter] nonexistent token filter: <%.*s>",
+ token_filter_name_length, token_filter_name);
+ return GRN_FALSE;
+ }
+}
+
+static grn_bool
+proc_table_create_set_token_filters_fill(grn_ctx *ctx,
+ grn_obj *token_filters,
+ grn_obj *token_filter_names)
+{
+ const char *start, *current, *end;
+ const char *name_start, *name_end;
+ const char *last_name_end;
+
+ start = GRN_TEXT_VALUE(token_filter_names);
+ end = start + GRN_TEXT_LEN(token_filter_names);
+ current = start;
+ name_start = NULL;
+ name_end = NULL;
+ last_name_end = start;
+ while (current < end) {
+ switch (current[0]) {
+ case ' ' :
+ if (name_start && !name_end) {
+ name_end = current;
+ }
+ break;
+ case ',' :
+ if (!name_start) {
+ goto break_loop;
+ }
+ if (!name_end) {
+ name_end = current;
+ }
+ proc_table_create_set_token_filters_put(ctx,
+ token_filters,
+ name_start,
+ name_end - name_start);
+ last_name_end = name_end + 1;
+ name_start = NULL;
+ name_end = NULL;
+ break;
+ default :
+ if (!name_start) {
+ name_start = current;
+ }
+ break;
+ }
+ current++;
+ }
+
+break_loop:
+ if (!name_start) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create][token-filter] empty token filter name: "
+ "<%.*s|%.*s|%.*s>",
+ (int)(last_name_end - start), start,
+ (int)(current - last_name_end), last_name_end,
+ (int)(end - current), current);
+ return GRN_FALSE;
+ }
+
+ if (!name_end) {
+ name_end = current;
+ }
+ proc_table_create_set_token_filters_put(ctx,
+ token_filters,
+ name_start,
+ name_end - name_start);
+
+ return GRN_TRUE;
+}
+
+static void
+proc_table_create_set_token_filters(grn_ctx *ctx,
+ grn_obj *table,
+ grn_obj *token_filter_names)
+{
+ grn_obj token_filters;
+
+ if (GRN_TEXT_LEN(token_filter_names) == 0) {
+ return;
+ }
+
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, 0);
+ if (proc_table_create_set_token_filters_fill(ctx,
+ &token_filters,
+ token_filter_names)) {
+ grn_obj_set_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters);
+ }
+ grn_obj_unlink(ctx, &token_filters);
+}
+
+static grn_obj *
+proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table;
+ const char *rest;
+ grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(1)),
+ GRN_BULK_CURR(VAR(1)), &rest);
+ if (GRN_TEXT_VALUE(VAR(1)) == rest) {
+ flags = grn_parse_table_create_flags(ctx, GRN_TEXT_VALUE(VAR(1)),
+ GRN_BULK_CURR(VAR(1)));
+ if (ctx->rc) { goto exit; }
+ }
+ if (GRN_TEXT_LEN(VAR(0))) {
+ grn_obj *key_type = NULL, *value_type = NULL;
+ if (GRN_TEXT_LEN(VAR(2)) > 0) {
+ key_type = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(2)),
+ GRN_TEXT_LEN(VAR(2)));
+ if (!key_type) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] key type doesn't exist: <%.*s> (%.*s)",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(2)), GRN_TEXT_VALUE(VAR(2)));
+ return NULL;
+ }
+ }
+ if (GRN_TEXT_LEN(VAR(3)) > 0) {
+ value_type = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)),
+ GRN_TEXT_LEN(VAR(3)));
+ if (!value_type) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] value type doesn't exist: <%.*s> (%.*s)",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(3)), GRN_TEXT_VALUE(VAR(3)));
+ return NULL;
+ }
+ }
+ flags |= GRN_OBJ_PERSISTENT;
+ table = grn_table_create(ctx,
+ GRN_TEXT_VALUE(VAR(0)),
+ GRN_TEXT_LEN(VAR(0)),
+ NULL, flags,
+ key_type,
+ value_type);
+ if (table) {
+ grn_obj *normalizer_name;
+ grn_obj_set_info(ctx, table,
+ GRN_INFO_DEFAULT_TOKENIZER,
+ grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(4)),
+ GRN_TEXT_LEN(VAR(4))));
+ normalizer_name = VAR(5);
+ if (GRN_TEXT_LEN(normalizer_name) > 0) {
+ grn_obj_set_info(ctx, table,
+ GRN_INFO_NORMALIZER,
+ grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(normalizer_name),
+ GRN_TEXT_LEN(normalizer_name)));
+ }
+ proc_table_create_set_token_filters(ctx, table, VAR(6));
+ grn_obj_unlink(ctx, table);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][create] should not create anonymous table");
+ }
+exit:
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_table_remove(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table;
+ table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)),
+ GRN_TEXT_LEN(VAR(0)));
+ if (table) {
+ grn_obj_remove(ctx,table);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "table not found.");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_table_rename(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *table = NULL;
+ if (GRN_TEXT_LEN(VAR(0)) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "[table][rename] table name isn't specified");
+ goto exit;
+ }
+ table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (!table) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][rename] table isn't found: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(VAR(1)) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][rename] new table name isn't specified: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ goto exit;
+ }
+ rc = grn_table_rename(ctx, table,
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)));
+ if (rc != GRN_SUCCESS && ctx->rc == GRN_SUCCESS) {
+ ERR(rc,
+ "[table][rename] failed to rename: <%.*s> -> <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ }
+exit:
+ GRN_OUTPUT_BOOL(!rc);
+ if (table) { grn_obj_unlink(ctx, table); }
+ return NULL;
+}
+
+static grn_rc
+proc_column_create_resolve_source_name(grn_ctx *ctx,
+ grn_obj *table,
+ const char *source_name,
+ int source_name_length,
+ grn_obj *source_ids)
+{
+ grn_obj *column;
+
+ column = grn_obj_column(ctx, table, source_name, source_name_length);
+ if (!column) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] nonexistent source: <%.*s>",
+ source_name_length, source_name);
+ return ctx->rc;
+ }
+
+ if (column->header.type == GRN_ACCESSOR) {
+ if (strncmp(source_name, "_key", source_name_length) == 0) {
+ grn_id source_id = grn_obj_id(ctx, table);
+ GRN_UINT32_PUT(ctx, source_ids, source_id);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] pseudo column except <_key> is invalid: <%.*s>",
+ source_name_length, source_name);
+ }
+ } else {
+ grn_id source_id = grn_obj_id(ctx, column);
+ GRN_UINT32_PUT(ctx, source_ids, source_id);
+ }
+ grn_obj_unlink(ctx, column);
+
+ return ctx->rc;
+}
+
+static grn_rc
+proc_column_create_resolve_source_names(grn_ctx *ctx,
+ grn_obj *table,
+ grn_obj *source_names,
+ grn_obj *source_ids)
+{
+ int i, names_length;
+ int start, source_name_length;
+ const char *names;
+
+ names = GRN_TEXT_VALUE(source_names);
+ start = 0;
+ source_name_length = 0;
+ names_length = GRN_TEXT_LEN(source_names);
+ for (i = 0; i < names_length; i++) {
+ switch (names[i]) {
+ case ' ' :
+ if (source_name_length == 0) {
+ start++;
+ }
+ break;
+ case ',' :
+ {
+ grn_rc rc;
+ const char *source_name = names + start;
+ rc = proc_column_create_resolve_source_name(ctx,
+ table,
+ source_name,
+ source_name_length,
+ source_ids);
+ if (rc) {
+ return rc;
+ }
+ start = i + 1;
+ source_name_length = 0;
+ }
+ break;
+ default :
+ source_name_length++;
+ break;
+ }
+ }
+
+ if (source_name_length > 0) {
+ grn_rc rc;
+ const char *source_name = names + start;
+ rc = proc_column_create_resolve_source_name(ctx,
+ table,
+ source_name,
+ source_name_length,
+ source_ids);
+ if (rc) {
+ return rc;
+ }
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_obj *
+proc_column_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_bool succeeded = GRN_TRUE;
+ grn_obj *column, *table = NULL, *type = NULL;
+ const char *rest;
+ grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(2)),
+ GRN_BULK_CURR(VAR(2)), &rest);
+ if (GRN_TEXT_VALUE(VAR(2)) == rest) {
+ flags = grn_parse_column_create_flags(ctx, GRN_TEXT_VALUE(VAR(2)),
+ GRN_BULK_CURR(VAR(2)));
+ if (ctx->rc) {
+ succeeded = GRN_FALSE;
+ goto exit;
+ }
+ }
+ table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (!table) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] table doesn't exist: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ succeeded = GRN_FALSE;
+ goto exit;
+ }
+ type = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)),
+ GRN_TEXT_LEN(VAR(3)));
+ if (!type) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[column][create] type doesn't exist: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(3)), GRN_TEXT_VALUE(VAR(3))) ;
+ succeeded = GRN_FALSE;
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(VAR(1))) {
+ flags |= GRN_OBJ_PERSISTENT;
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "[column][create] name is missing");
+ succeeded = GRN_FALSE;
+ goto exit;
+ }
+ column = grn_column_create(ctx, table,
+ GRN_TEXT_VALUE(VAR(1)),
+ GRN_TEXT_LEN(VAR(1)),
+ NULL, flags, type);
+ if (column) {
+ if (GRN_TEXT_LEN(VAR(4))) {
+ grn_rc rc;
+ grn_obj source_ids;
+ GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR);
+ rc = proc_column_create_resolve_source_names(ctx,
+ type,
+ VAR(4),
+ &source_ids);
+ if (!rc && GRN_BULK_VSIZE(&source_ids)) {
+ grn_obj_set_info(ctx, column, GRN_INFO_SOURCE, &source_ids);
+ rc = ctx->rc;
+ }
+ GRN_OBJ_FIN(ctx, &source_ids);
+ if (rc) {
+ grn_obj_remove(ctx, column);
+ succeeded = GRN_FALSE;
+ goto exit;
+ }
+ }
+ grn_obj_unlink(ctx, column);
+ } else {
+ succeeded = GRN_FALSE;
+ }
+exit:
+ GRN_OUTPUT_BOOL(succeeded);
+ if (table) { grn_obj_unlink(ctx, table); }
+ if (type) { grn_obj_unlink(ctx, type); }
+ return NULL;
+}
+
+static grn_obj *
+proc_column_remove(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table, *col;
+ char *colname,fullname[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int colname_len,fullname_len;
+
+ table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)),
+ GRN_TEXT_LEN(VAR(0)));
+
+ colname = GRN_TEXT_VALUE(VAR(1));
+ colname_len = GRN_TEXT_LEN(VAR(1));
+
+ if ((fullname_len = grn_obj_name(ctx, table, fullname, GRN_TABLE_MAX_KEY_SIZE))) {
+ fullname[fullname_len] = GRN_DB_DELIMITER;
+ memcpy((fullname + fullname_len + 1), colname, colname_len);
+ fullname_len += colname_len + 1;
+ //TODO:check fullname_len < GRN_TABLE_MAX_KEY_SIZE
+ col = grn_ctx_get(ctx, fullname, fullname_len);
+ if (col) {
+ grn_obj_remove(ctx, col);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "column not found.");
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "table not found.");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_column_rename(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *table = NULL;
+ grn_obj *column = NULL;
+ if (GRN_TEXT_LEN(VAR(0)) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "[column][rename] table name isn't specified");
+ goto exit;
+ }
+ table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (!table) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[column][rename] table isn't found: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(VAR(1)) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[column][rename] column name isn't specified: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ goto exit;
+ }
+ column = grn_obj_column(ctx, table,
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)));
+ if (!column) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[column][rename] column isn't found: <%.*s.%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(VAR(2)) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[column][rename] new column name isn't specified: <%.*s.%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ goto exit;
+ }
+ rc = grn_column_rename(ctx, column,
+ GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)));
+ if (rc != GRN_SUCCESS && ctx->rc == GRN_SUCCESS) {
+ ERR(rc,
+ "[column][rename] failed to rename: <%.*s.%.*s> -> <%.*s.%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)),
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)),
+ (int)GRN_TEXT_LEN(VAR(2)), GRN_TEXT_VALUE(VAR(2)));
+ }
+exit:
+ GRN_OUTPUT_BOOL(!rc);
+ if (column) { grn_obj_unlink(ctx, column); }
+ if (table) { grn_obj_unlink(ctx, table); }
+ return NULL;
+}
+
+#define GRN_STRLEN(s) ((s) ? strlen(s) : 0)
+
+static void
+output_column_name(grn_ctx *ctx, grn_obj *column)
+{
+ grn_obj bulk;
+ int name_len;
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+
+ GRN_TEXT_INIT(&bulk, GRN_OBJ_DO_SHALLOW_COPY);
+ name_len = grn_column_name(ctx, column, name, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_TEXT_SET(ctx, &bulk, name, name_len);
+
+ GRN_OUTPUT_OBJ(&bulk, NULL);
+ GRN_OBJ_FIN(ctx, &bulk);
+}
+
+static void
+output_object_name(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_obj bulk;
+ int name_len;
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+
+ if (obj) {
+ GRN_TEXT_INIT(&bulk, GRN_OBJ_DO_SHALLOW_COPY);
+ name_len = grn_obj_name(ctx, obj, name, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_TEXT_SET(ctx, &bulk, name, name_len);
+ } else {
+ GRN_VOID_INIT(&bulk);
+ }
+
+ GRN_OUTPUT_OBJ(&bulk, NULL);
+ GRN_OBJ_FIN(ctx, &bulk);
+}
+
+static void
+output_object_id_name(grn_ctx *ctx, grn_id id)
+{
+ grn_obj *obj = NULL;
+
+ if (id != GRN_ID_NIL) {
+ obj = grn_ctx_at(ctx, id);
+ }
+
+ output_object_name(ctx, obj);
+}
+
+static int
+output_column_info(grn_ctx *ctx, grn_obj *column)
+{
+ grn_obj o;
+ grn_id id;
+ const char *type;
+ const char *path;
+
+ switch (column->header.type) {
+ case GRN_COLUMN_FIX_SIZE:
+ type = "fix";
+ break;
+ case GRN_COLUMN_VAR_SIZE:
+ type = "var";
+ break;
+ case GRN_COLUMN_INDEX:
+ type = "index";
+ break;
+ default:
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "invalid header type %d\n", column->header.type);
+ return 0;
+ }
+ id = grn_obj_id(ctx, column);
+ path = grn_obj_path(ctx, column);
+ GRN_TEXT_INIT(&o, 0);
+ GRN_OUTPUT_ARRAY_OPEN("COLUMN", 8);
+ GRN_OUTPUT_INT64(id);
+ output_column_name(ctx, column);
+ GRN_OUTPUT_CSTR(path);
+ GRN_OUTPUT_CSTR(type);
+ grn_column_create_flags_to_text(ctx, &o, column->header.flags);
+ GRN_OUTPUT_OBJ(&o, NULL);
+ output_object_id_name(ctx, column->header.domain);
+ output_object_id_name(ctx, grn_obj_get_range(ctx, column));
+ {
+ grn_db_obj *obj = (grn_db_obj *)column;
+ grn_id *s = obj->source;
+ int i = 0, n = obj->source_size / sizeof(grn_id);
+ GRN_OUTPUT_ARRAY_OPEN("SOURCES", n);
+ for (i = 0; i < n; i++, s++) {
+ output_object_id_name(ctx, *s);
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+
+ }
+ // output_obj_source(ctx, (grn_db_obj *)column);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OBJ_FIN(ctx, &o);
+ return 1;
+}
+
+static grn_obj *
+proc_column_list(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table;
+ if ((table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)),
+ GRN_TEXT_LEN(VAR(0))))) {
+ grn_hash *cols;
+ grn_obj *col;
+ int column_list_size = -1;
+#ifdef GRN_WITH_MESSAGE_PACK
+ column_list_size = 1; /* [header, (key), (COLUMNS)] */
+ if ((col = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN))) {
+ column_list_size++;
+ grn_obj_unlink(ctx, col);
+ }
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ column_list_size += grn_table_columns(ctx, table, NULL, 0,
+ (grn_obj *)cols);
+ grn_hash_close(ctx, cols);
+ }
+#endif
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ GRN_OUTPUT_ARRAY_OPEN("COLUMN_LIST", column_list_size);
+ GRN_OUTPUT_ARRAY_OPEN("HEADER", 8);
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("id");
+ GRN_OUTPUT_CSTR("UInt32");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("name");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("path");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("type");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("flags");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("domain");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("range");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("source");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+ if ((col = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN))) {
+ int name_len;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+ grn_id id;
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_OUTPUT_ARRAY_OPEN("COLUMN", 8);
+ id = grn_obj_id(ctx, table);
+ GRN_OUTPUT_INT64(id);
+ GRN_OUTPUT_CSTR(GRN_COLUMN_NAME_KEY);
+ GRN_OUTPUT_CSTR("");
+ GRN_OUTPUT_CSTR("");
+ grn_column_create_flags_to_text(ctx, &buf, 0);
+ GRN_OUTPUT_OBJ(&buf, NULL);
+ name_len = grn_obj_name(ctx, table, name_buf, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OUTPUT_STR(name_buf, name_len);
+ output_object_id_name(ctx, table->header.domain);
+ GRN_OUTPUT_ARRAY_OPEN("SOURCES", 0);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OBJ_FIN(ctx, &buf);
+ grn_obj_unlink(ctx, col);
+ }
+ if (grn_table_columns(ctx, table, NULL, 0, (grn_obj *)cols) >= 0) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ if ((col = grn_ctx_at(ctx, *key))) {
+ output_column_info(ctx, col);
+ grn_obj_unlink(ctx, col);
+ }
+ });
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ grn_hash_close(ctx, cols);
+ }
+ grn_obj_unlink(ctx, table);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "table '%.*s' does not exist.",
+ (int)GRN_TEXT_LEN(VAR(0)),
+ GRN_TEXT_VALUE(VAR(0)));
+ }
+ return NULL;
+}
+
+static grn_bool
+is_table(grn_obj *obj)
+{
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ return GRN_TRUE;
+ default:
+ return GRN_FALSE;
+ }
+}
+
+static int
+output_table_info(grn_ctx *ctx, grn_obj *table)
+{
+ grn_id id;
+ grn_obj o;
+ const char *path;
+ grn_obj *default_tokenizer;
+ grn_obj *normalizer;
+
+ id = grn_obj_id(ctx, table);
+ path = grn_obj_path(ctx, table);
+ GRN_TEXT_INIT(&o, 0);
+ GRN_OUTPUT_ARRAY_OPEN("TABLE", 8);
+ GRN_OUTPUT_INT64(id);
+ output_object_id_name(ctx, id);
+ GRN_OUTPUT_CSTR(path);
+ grn_table_create_flags_to_text(ctx, &o, table->header.flags);
+ GRN_OUTPUT_OBJ(&o, NULL);
+ output_object_id_name(ctx, table->header.domain);
+ output_object_id_name(ctx, grn_obj_get_range(ctx, table));
+ default_tokenizer = grn_obj_get_info(ctx, table, GRN_INFO_DEFAULT_TOKENIZER,
+ NULL);
+ output_object_name(ctx, default_tokenizer);
+ normalizer = grn_obj_get_info(ctx, table, GRN_INFO_NORMALIZER, NULL);
+ output_object_name(ctx, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OBJ_FIN(ctx, &o);
+ return 1;
+}
+
+static grn_obj *
+proc_table_list(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_table_cursor *cur;
+ grn_obj tables;
+ int n_top_level_elements;
+ int n_elements_for_header = 1;
+ int n_tables;
+ int i;
+
+ GRN_PTR_INIT(&tables, GRN_OBJ_VECTOR, GRN_ID_NIL);
+
+ if ((cur = grn_table_cursor_open(ctx, ctx->impl->db, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *object;
+ if ((object = grn_ctx_at(ctx, id))) {
+ if (is_table(object)) {
+ GRN_PTR_PUT(ctx, &tables, object);
+ } else {
+ grn_obj_unlink(ctx, object);
+ }
+ } else {
+ if (ctx->rc != GRN_SUCCESS) {
+ ERRCLR(ctx);
+ }
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+
+ n_tables = GRN_BULK_VSIZE(&tables) / sizeof(grn_obj *);
+ n_top_level_elements = n_elements_for_header + n_tables;
+ GRN_OUTPUT_ARRAY_OPEN("TABLE_LIST", n_top_level_elements);
+
+ GRN_OUTPUT_ARRAY_OPEN("HEADER", 8);
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("id");
+ GRN_OUTPUT_CSTR("UInt32");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("name");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("path");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("flags");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("domain");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("range");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("default_tokenizer");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("PROPERTY", 2);
+ GRN_OUTPUT_CSTR("normalizer");
+ GRN_OUTPUT_CSTR("ShortText");
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+
+ for (i = 0; i < n_tables; i++) {
+ grn_obj *table = ((grn_obj **)GRN_BULK_HEAD(&tables))[i];
+ output_table_info(ctx, table);
+ grn_obj_unlink(ctx, table);
+ }
+ GRN_OBJ_FIN(ctx, &tables);
+
+ GRN_OUTPUT_ARRAY_CLOSE();
+
+ return NULL;
+}
+
+static grn_obj *
+proc_missing(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ uint32_t plen;
+ grn_obj *outbuf = ctx->impl->outbuf;
+ static int grn_document_root_len = -1;
+ if (!grn_document_root) { return NULL; }
+ if (grn_document_root_len < 0) {
+ size_t l;
+ if ((l = strlen(grn_document_root)) > PATH_MAX) {
+ return NULL;
+ }
+ grn_document_root_len = (int)l;
+ if (l > 0 && grn_document_root[l - 1] == '/') { grn_document_root_len--; }
+ }
+ if ((plen = GRN_TEXT_LEN(VAR(0))) + grn_document_root_len < PATH_MAX) {
+ char path[PATH_MAX];
+ memcpy(path, grn_document_root, grn_document_root_len);
+ path[grn_document_root_len] = '/';
+ grn_str_url_path_normalize(ctx,
+ GRN_TEXT_VALUE(VAR(0)),
+ GRN_TEXT_LEN(VAR(0)),
+ path + grn_document_root_len + 1,
+ PATH_MAX - grn_document_root_len - 1);
+ grn_bulk_put_from_file(ctx, outbuf, path);
+ } else {
+ uint32_t abbrlen = 32;
+ ERR(GRN_INVALID_ARGUMENT,
+ "too long path name: <%s/%.*s...> %u(%u)",
+ grn_document_root,
+ abbrlen < plen ? abbrlen : plen, GRN_TEXT_VALUE(VAR(0)),
+ plen + grn_document_root_len, PATH_MAX);
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_quit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ ctx->stat = GRN_CTX_QUITTING;
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_shutdown(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_gctx.stat = GRN_CTX_QUIT;
+ ctx->stat = GRN_CTX_QUITTING;
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_clearlock(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int target_name_len;
+ grn_obj *target_name;
+ grn_obj *obj;
+
+ target_name = VAR(0);
+ target_name_len = GRN_TEXT_LEN(target_name);
+
+ if (target_name_len) {
+ obj = grn_ctx_get(ctx, GRN_TEXT_VALUE(target_name), target_name_len);
+ } else {
+ obj = ctx->impl->db;
+ }
+
+ if (obj) {
+ grn_obj_clear_lock(ctx, obj);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "[clearlock] target object not found: <%.*s>",
+ target_name_len, GRN_TEXT_VALUE(target_name));
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_defrag(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ int olen, threshold;
+ olen = GRN_TEXT_LEN(VAR(0));
+
+ if (olen) {
+ obj = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), olen);
+ } else {
+ obj = ctx->impl->db;
+ }
+
+ threshold = GRN_TEXT_LEN(VAR(1))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(1)), GRN_BULK_CURR(VAR(1)), NULL)
+ : 0;
+
+ if (obj) {
+ grn_obj_defrag(ctx, obj, threshold);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "defrag object not found");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static char slev[] = " EACewnid-";
+
+static grn_obj *
+proc_log_level(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ char *p;
+ if (GRN_TEXT_LEN(VAR(0)) &&
+ (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) {
+ grn_log_level max_level = (grn_log_level)(p - slev);
+ grn_logger_set_max_level(ctx, max_level);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid log level.");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_log_put(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ char *p;
+ if (GRN_TEXT_LEN(VAR(0)) &&
+ (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) {
+ GRN_TEXT_PUTC(ctx, VAR(1), '\0');
+ GRN_LOG(ctx, (int)(p - slev), "%s", GRN_TEXT_VALUE(VAR(1)));
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid log level.");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+proc_log_reopen(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_log_reopen(ctx);
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_rc
+proc_delete_validate_selector(grn_ctx *ctx, grn_obj *table, grn_obj *table_name,
+ grn_obj *key, grn_obj *id, grn_obj *filter)
+{
+ grn_rc rc = GRN_SUCCESS;
+
+ if (!table) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] table doesn't exist: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name));
+ return rc;
+ }
+
+ if (GRN_TEXT_LEN(key) == 0 &&
+ GRN_TEXT_LEN(id) == 0 &&
+ GRN_TEXT_LEN(filter) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] either key, id or filter must be specified: "
+ "table: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name));
+ return rc;
+ }
+
+ if (GRN_TEXT_LEN(key) && GRN_TEXT_LEN(id) && GRN_TEXT_LEN(filter)) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] "
+ "record selector must be one of key, id and filter: "
+ "table: <%.*s>, key: <%.*s>, id: <%.*s>, filter: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(key), GRN_TEXT_VALUE(key),
+ (int)GRN_TEXT_LEN(id), GRN_TEXT_VALUE(id),
+ (int)GRN_TEXT_LEN(filter), GRN_TEXT_VALUE(filter));
+ return rc;
+ }
+
+ if (GRN_TEXT_LEN(key) && GRN_TEXT_LEN(id) && GRN_TEXT_LEN(filter) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] "
+ "can't use both key and id: table: <%.*s>, key: <%.*s>, id: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(key), GRN_TEXT_VALUE(key),
+ (int)GRN_TEXT_LEN(id), GRN_TEXT_VALUE(id));
+ return rc;
+ }
+
+ if (GRN_TEXT_LEN(key) && GRN_TEXT_LEN(id) == 0 && GRN_TEXT_LEN(filter)) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] "
+ "can't use both key and filter: "
+ "table: <%.*s>, key: <%.*s>, filter: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(key), GRN_TEXT_VALUE(key),
+ (int)GRN_TEXT_LEN(filter), GRN_TEXT_VALUE(filter));
+ return rc;
+ }
+
+ if (GRN_TEXT_LEN(key) == 0 && GRN_TEXT_LEN(id) && GRN_TEXT_LEN(filter)) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] "
+ "can't use both id and filter: "
+ "table: <%.*s>, id: <%.*s>, filter: <%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(id), GRN_TEXT_VALUE(id),
+ (int)GRN_TEXT_LEN(filter), GRN_TEXT_VALUE(filter));
+ return rc;
+ }
+
+ return rc;
+}
+
+static grn_obj *
+proc_delete(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ grn_obj *table_name = VAR(0);
+ grn_obj *key = VAR(1);
+ grn_obj *id = VAR(2);
+ grn_obj *filter = VAR(3);
+ grn_obj *table = NULL;
+
+ if (GRN_TEXT_LEN(table_name) == 0) {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc, "[table][record][delete] table name isn't specified");
+ goto exit;
+ }
+
+ table = grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(table_name),
+ GRN_TEXT_LEN(table_name));
+ rc = proc_delete_validate_selector(ctx, table, table_name, key, id, filter);
+ if (rc != GRN_SUCCESS) { goto exit; }
+
+ if (GRN_TEXT_LEN(key)) {
+ grn_obj casted_key;
+ if (key->header.domain != table->header.domain) {
+ GRN_OBJ_INIT(&casted_key, GRN_BULK, 0, table->header.domain);
+ grn_obj_cast(ctx, key, &casted_key, GRN_FALSE);
+ key = &casted_key;
+ }
+ if (ctx->rc) {
+ rc = ctx->rc;
+ } else {
+ rc = grn_table_delete(ctx, table, GRN_BULK_HEAD(key), GRN_BULK_VSIZE(key));
+ if (key == &casted_key) {
+ GRN_OBJ_FIN(ctx, &casted_key);
+ }
+ }
+ } else if (GRN_TEXT_LEN(id)) {
+ const char *end;
+ grn_id parsed_id = grn_atoui(GRN_TEXT_VALUE(id), GRN_BULK_CURR(id), &end);
+ if (end == GRN_BULK_CURR(id)) {
+ rc = grn_table_delete_by_id(ctx, table, parsed_id);
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ ERR(rc,
+ "[table][record][delete] id should be number: "
+ "table: <%.*s>, id: <%.*s>, detail: <%.*s|%c|%.*s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(id), GRN_TEXT_VALUE(id),
+ (int)(end - GRN_TEXT_VALUE(id)), GRN_TEXT_VALUE(id),
+ end[0],
+ (int)(GRN_TEXT_VALUE(id) - end - 1), end + 1);
+ }
+ } else if (GRN_TEXT_LEN(filter)) {
+ grn_obj *cond, *v;
+
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, cond, v);
+ grn_expr_parse(ctx, cond,
+ GRN_TEXT_VALUE(filter),
+ GRN_TEXT_LEN(filter),
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ if (ctx->rc) {
+ char original_error_message[GRN_CTX_MSGSIZE];
+ strcpy(original_error_message, ctx->errbuf);
+ rc = ctx->rc;
+ ERR(rc,
+ "[table][record][delete] failed to parse filter: "
+ "table: <%.*s>, filter: <%.*s>, detail: <%s>",
+ (int)GRN_TEXT_LEN(table_name), GRN_TEXT_VALUE(table_name),
+ (int)GRN_TEXT_LEN(filter), GRN_TEXT_VALUE(filter),
+ original_error_message);
+ } else {
+ grn_obj *records;
+
+ records = grn_table_select(ctx, table, cond, NULL, GRN_OP_OR);
+ if (records) {
+ void *key = NULL;
+ GRN_TABLE_EACH(ctx, records, GRN_ID_NIL, GRN_ID_NIL,
+ result_id, &key, NULL, NULL, {
+ grn_id id = *(grn_id *)key;
+ grn_table_delete_by_id(ctx, table, id);
+ if (ctx->rc == GRN_OPERATION_NOT_PERMITTED) {
+ ERRCLR(ctx);
+ }
+ });
+ grn_obj_unlink(ctx, records);
+ }
+ }
+ grn_obj_unlink(ctx, cond);
+ }
+
+exit :
+ if (table) {
+ grn_obj_unlink(ctx, table);
+ }
+ GRN_OUTPUT_BOOL(!rc);
+ return NULL;
+}
+
+static void
+dump_name(grn_ctx *ctx, grn_obj *outbuf, const char *name, int name_len)
+{
+ grn_obj escaped_name;
+ GRN_TEXT_INIT(&escaped_name, 0);
+ grn_text_esc(ctx, &escaped_name, name, name_len);
+ /* is no character escaped? */
+ /* TODO false positive with spaces inside names */
+ if (GRN_TEXT_LEN(&escaped_name) == name_len + 2) {
+ GRN_TEXT_PUT(ctx, outbuf, name, name_len);
+ } else {
+ GRN_TEXT_PUT(ctx, outbuf,
+ GRN_TEXT_VALUE(&escaped_name), GRN_TEXT_LEN(&escaped_name));
+ }
+ grn_obj_close(ctx, &escaped_name);
+}
+
+static void
+dump_obj_name(grn_ctx *ctx, grn_obj *outbuf, grn_obj *obj)
+{
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_len;
+ name_len = grn_obj_name(ctx, obj, name, GRN_TABLE_MAX_KEY_SIZE);
+ dump_name(ctx, outbuf, name, name_len);
+}
+
+static void
+dump_column_name(grn_ctx *ctx, grn_obj *outbuf, grn_obj *column)
+{
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_len;
+ name_len = grn_column_name(ctx, column, name, GRN_TABLE_MAX_KEY_SIZE);
+ dump_name(ctx, outbuf, name, name_len);
+}
+
+static void
+dump_index_column_sources(grn_ctx *ctx, grn_obj *outbuf, grn_obj *column)
+{
+ grn_obj sources;
+ grn_id *source_ids;
+ int i, n;
+
+ GRN_OBJ_INIT(&sources, GRN_BULK, 0, GRN_ID_NIL);
+ grn_obj_get_info(ctx, column, GRN_INFO_SOURCE, &sources);
+
+ n = GRN_BULK_VSIZE(&sources) / sizeof(grn_id);
+ source_ids = (grn_id *)GRN_BULK_HEAD(&sources);
+ if (n > 0) {
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ }
+ for (i = 0; i < n; i++) {
+ grn_obj *source;
+ if ((source = grn_ctx_at(ctx, *source_ids))) {
+ if (i) { GRN_TEXT_PUTC(ctx, outbuf, ','); }
+ switch (source->header.type) {
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_HASH_KEY:
+ GRN_TEXT_PUT(ctx, outbuf, GRN_COLUMN_NAME_KEY, GRN_COLUMN_NAME_KEY_LEN);
+ break;
+ default:
+ dump_column_name(ctx, outbuf, source);
+ break;
+ }
+ }
+ source_ids++;
+ }
+ grn_obj_close(ctx, &sources);
+}
+
+static void
+dump_column(grn_ctx *ctx, grn_obj *outbuf , grn_obj *table, grn_obj *column)
+{
+ grn_obj *type;
+ grn_obj_flags default_flags = GRN_OBJ_PERSISTENT;
+ grn_obj buf;
+
+ type = grn_ctx_at(ctx, ((grn_db_obj *)column)->range);
+ if (!type) {
+ // ERR(GRN_RANGE_ERROR, "couldn't get column's type object");
+ return;
+ }
+
+ GRN_TEXT_PUTS(ctx, outbuf, "column_create ");
+ dump_obj_name(ctx, outbuf, table);
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ dump_column_name(ctx, outbuf, column);
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ if (type->header.type == GRN_TYPE) {
+ default_flags |= type->header.flags;
+ }
+ GRN_TEXT_INIT(&buf, 0);
+ grn_column_create_flags_to_text(ctx, &buf, column->header.flags & ~default_flags);
+ GRN_TEXT_PUT(ctx, outbuf, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ dump_obj_name(ctx, outbuf, type);
+ if (column->header.flags & GRN_OBJ_COLUMN_INDEX) {
+ dump_index_column_sources(ctx, outbuf, column);
+ }
+ GRN_TEXT_PUTC(ctx, outbuf, '\n');
+
+ grn_obj_unlink(ctx, type);
+}
+
+static int
+reference_column_p(grn_ctx *ctx, grn_obj *column)
+{
+ grn_obj *range;
+
+ range = grn_ctx_at(ctx, grn_obj_get_range(ctx, column));
+ if (!range) {
+ return GRN_FALSE;
+ }
+
+ switch (range->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ return GRN_TRUE;
+ default:
+ return GRN_FALSE;
+ }
+}
+
+static void
+dump_columns(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table,
+ grn_obj *pending_columns)
+{
+ grn_hash *columns;
+ columns = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ if (!columns) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "couldn't create a hash to hold columns");
+ return;
+ }
+
+ if (grn_table_columns(ctx, table, NULL, 0, (grn_obj *)columns) >= 0) {
+ grn_id *key;
+
+ GRN_HASH_EACH(ctx, columns, id, &key, NULL, NULL, {
+ grn_obj *column;
+ if ((column = grn_ctx_at(ctx, *key))) {
+ if (reference_column_p(ctx, column)) {
+ GRN_PTR_PUT(ctx, pending_columns, column);
+ } else {
+ dump_column(ctx, outbuf, table, column);
+ grn_obj_unlink(ctx, column);
+ }
+ }
+ });
+ }
+ grn_hash_close(ctx, columns);
+}
+
+static void
+dump_record_column_vector(grn_ctx *ctx, grn_obj *outbuf, grn_id id,
+ grn_obj *column, grn_id range_id, grn_obj *buf)
+{
+ grn_obj *range;
+
+ range = grn_ctx_at(ctx, range_id);
+ if (GRN_OBJ_TABLEP(range) ||
+ (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) == 0) {
+ GRN_OBJ_INIT(buf, GRN_UVECTOR, 0, range_id);
+ grn_obj_get_value(ctx, column, id, buf);
+ grn_text_otoj(ctx, outbuf, buf, NULL);
+ } else {
+ grn_obj_format *format_argument = NULL;
+ grn_obj_format format;
+ if (column->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ format.flags = GRN_OBJ_FORMAT_WITH_WEIGHT;
+ format_argument = &format;
+ }
+ GRN_OBJ_INIT(buf, GRN_VECTOR, 0, range_id);
+ grn_obj_get_value(ctx, column, id, buf);
+ grn_text_otoj(ctx, outbuf, buf, format_argument);
+ }
+ grn_obj_unlink(ctx, range);
+ grn_obj_unlink(ctx, buf);
+}
+
+static void
+dump_records(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table)
+{
+ grn_obj **columns;
+ grn_id old_id = 0, id;
+ grn_table_cursor *cursor;
+ int i, ncolumns, n_use_columns;
+ grn_obj columnbuf, delete_commands, use_columns, column_name;
+
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ break;
+ default:
+ return;
+ }
+
+ if (grn_table_size(ctx, table) == 0) {
+ return;
+ }
+
+ GRN_TEXT_INIT(&delete_commands, 0);
+
+ GRN_TEXT_PUTS(ctx, outbuf, "load --table ");
+ dump_obj_name(ctx, outbuf, table);
+ GRN_TEXT_PUTS(ctx, outbuf, "\n[\n");
+
+ GRN_PTR_INIT(&columnbuf, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_obj_columns(ctx, table, DUMP_COLUMNS, strlen(DUMP_COLUMNS), &columnbuf);
+ columns = (grn_obj **)GRN_BULK_HEAD(&columnbuf);
+ ncolumns = GRN_BULK_VSIZE(&columnbuf)/sizeof(grn_obj *);
+
+ GRN_PTR_INIT(&use_columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ GRN_TEXT_INIT(&column_name, 0);
+ for (i = 0; i < ncolumns; i++) {
+ if (GRN_OBJ_INDEX_COLUMNP(columns[i])) {
+ continue;
+ }
+ GRN_BULK_REWIND(&column_name);
+ grn_column_name_(ctx, columns[i], &column_name);
+ if (((table->header.type == GRN_TABLE_HASH_KEY ||
+ table->header.type == GRN_TABLE_PAT_KEY ||
+ table->header.type == GRN_TABLE_DAT_KEY) &&
+ GRN_TEXT_LEN(&column_name) == GRN_COLUMN_NAME_ID_LEN &&
+ !memcmp(GRN_TEXT_VALUE(&column_name),
+ GRN_COLUMN_NAME_ID,
+ GRN_COLUMN_NAME_ID_LEN)) ||
+ (table->header.type == GRN_TABLE_NO_KEY &&
+ GRN_TEXT_LEN(&column_name) == GRN_COLUMN_NAME_KEY_LEN &&
+ !memcmp(GRN_TEXT_VALUE(&column_name),
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN))) {
+ continue;
+ }
+ GRN_PTR_PUT(ctx, &use_columns, columns[i]);
+ }
+
+ n_use_columns = GRN_BULK_VSIZE(&use_columns) / sizeof(grn_obj *);
+ GRN_TEXT_PUTC(ctx, outbuf, '[');
+ for (i = 0; i < n_use_columns; i++) {
+ grn_obj *column;
+ column = *((grn_obj **)GRN_BULK_HEAD(&use_columns) + i);
+ if (i) { GRN_TEXT_PUTC(ctx, outbuf, ','); }
+ GRN_BULK_REWIND(&column_name);
+ grn_column_name_(ctx, column, &column_name);
+ grn_text_otoj(ctx, outbuf, &column_name, NULL);
+ }
+ GRN_TEXT_PUTS(ctx, outbuf, "],\n");
+
+ cursor = grn_table_cursor_open(ctx, table, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_KEY);
+ for (i = 0; (id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL;
+ ++i, old_id = id) {
+ int is_value_column;
+ int j;
+ grn_obj buf;
+ if (i) { GRN_TEXT_PUTS(ctx, outbuf, ",\n"); }
+ if (table->header.type == GRN_TABLE_NO_KEY && old_id + 1 < id) {
+ grn_id current_id;
+ for (current_id = old_id + 1; current_id < id; current_id++) {
+ GRN_TEXT_PUTS(ctx, outbuf, "[],\n");
+ GRN_TEXT_PUTS(ctx, &delete_commands, "delete --table ");
+ dump_obj_name(ctx, &delete_commands, table);
+ GRN_TEXT_PUTS(ctx, &delete_commands, " --id ");
+ grn_text_lltoa(ctx, &delete_commands, current_id);
+ GRN_TEXT_PUTC(ctx, &delete_commands, '\n');
+ }
+ }
+ GRN_TEXT_PUTC(ctx, outbuf, '[');
+ for (j = 0; j < n_use_columns; j++) {
+ grn_id range;
+ grn_obj *column;
+ column = *((grn_obj **)GRN_BULK_HEAD(&use_columns) + j);
+ GRN_BULK_REWIND(&column_name);
+ grn_column_name_(ctx, column, &column_name);
+ if (GRN_TEXT_LEN(&column_name) == GRN_COLUMN_NAME_VALUE_LEN &&
+ !memcmp(GRN_TEXT_VALUE(&column_name),
+ GRN_COLUMN_NAME_VALUE,
+ GRN_COLUMN_NAME_VALUE_LEN)) {
+ is_value_column = 1;
+ } else {
+ is_value_column = 0;
+ }
+ range = grn_obj_get_range(ctx, column);
+
+ if (j) { GRN_TEXT_PUTC(ctx, outbuf, ','); }
+ switch (column->header.type) {
+ case GRN_COLUMN_VAR_SIZE:
+ case GRN_COLUMN_FIX_SIZE:
+ switch (column->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_VECTOR:
+ dump_record_column_vector(ctx, outbuf, id, column, range, &buf);
+ break;
+ case GRN_OBJ_COLUMN_SCALAR:
+ {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ grn_obj_get_value(ctx, column, id, &buf);
+ grn_text_otoj(ctx, outbuf, &buf, NULL);
+ grn_obj_unlink(ctx, &buf);
+ }
+ break;
+ default:
+ ERR(GRN_OPERATION_NOT_SUPPORTED,
+ "unsupported column type: %#x",
+ column->header.type);
+ break;
+ }
+ break;
+ case GRN_COLUMN_INDEX:
+ break;
+ case GRN_ACCESSOR:
+ {
+ GRN_OBJ_INIT(&buf, GRN_BULK, 0, range);
+ grn_obj_get_value(ctx, column, id, &buf);
+ /* XXX maybe, grn_obj_get_range() should not unconditionally return
+ GRN_DB_INT32 when column is GRN_ACCESSOR and
+ GRN_ACCESSOR_GET_VALUE */
+ if (is_value_column) {
+ buf.header.domain = ((grn_db_obj *)table)->range;
+ }
+ grn_text_otoj(ctx, outbuf, &buf, NULL);
+ grn_obj_unlink(ctx, &buf);
+ }
+ break;
+ default:
+ ERR(GRN_OPERATION_NOT_SUPPORTED,
+ "unsupported header type %#x",
+ column->header.type);
+ break;
+ }
+ }
+ GRN_TEXT_PUTC(ctx, outbuf, ']');
+ }
+ GRN_TEXT_PUTS(ctx, outbuf, "\n]\n");
+ GRN_TEXT_PUT(ctx, outbuf, GRN_TEXT_VALUE(&delete_commands),
+ GRN_TEXT_LEN(&delete_commands));
+ grn_obj_unlink(ctx, &delete_commands);
+ grn_obj_unlink(ctx, &column_name);
+ grn_obj_unlink(ctx, &use_columns);
+
+ grn_table_cursor_close(ctx, cursor);
+ for (i = 0; i < ncolumns; i++) {
+ grn_obj_unlink(ctx, columns[i]);
+ }
+ grn_obj_unlink(ctx, &columnbuf);
+}
+
+static void
+dump_table(grn_ctx *ctx, grn_obj *outbuf, grn_obj *table,
+ grn_obj *pending_columns)
+{
+ grn_obj *domain = NULL, *range = NULL;
+ grn_obj_flags default_flags = GRN_OBJ_PERSISTENT;
+ grn_obj *default_tokenizer;
+ grn_obj *normalizer;
+ grn_obj buf;
+
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ domain = grn_ctx_at(ctx, table->header.domain);
+ break;
+ default:
+ break;
+ }
+
+ GRN_TEXT_PUTS(ctx, outbuf, "table_create ");
+ dump_obj_name(ctx, outbuf, table);
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ GRN_TEXT_INIT(&buf, 0);
+ grn_table_create_flags_to_text(ctx, &buf, table->header.flags & ~default_flags);
+ GRN_TEXT_PUT(ctx, outbuf, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+ if (domain) {
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ dump_obj_name(ctx, outbuf, domain);
+ }
+ if (((grn_db_obj *)table)->range != GRN_ID_NIL) {
+ range = grn_ctx_at(ctx, ((grn_db_obj *)table)->range);
+ if (!range) {
+ // ERR(GRN_RANGE_ERROR, "couldn't get table's value_type object");
+ return;
+ }
+ if (table->header.type != GRN_TABLE_NO_KEY) {
+ GRN_TEXT_PUTC(ctx, outbuf, ' ');
+ } else {
+ GRN_TEXT_PUTS(ctx, outbuf, " --value_type ");
+ }
+ dump_obj_name(ctx, outbuf, range);
+ grn_obj_unlink(ctx, range);
+ }
+ default_tokenizer = grn_obj_get_info(ctx, table, GRN_INFO_DEFAULT_TOKENIZER,
+ NULL);
+ if (default_tokenizer) {
+ GRN_TEXT_PUTS(ctx, outbuf, " --default_tokenizer ");
+ dump_obj_name(ctx, outbuf, default_tokenizer);
+ }
+ normalizer = grn_obj_get_info(ctx, table, GRN_INFO_NORMALIZER, NULL);
+ if (normalizer) {
+ GRN_TEXT_PUTS(ctx, outbuf, " --normalizer ");
+ dump_obj_name(ctx, outbuf, normalizer);
+ }
+ if (table->header.type != GRN_TABLE_NO_KEY) {
+ grn_obj token_filters;
+ int n_token_filters;
+
+ GRN_PTR_INIT(&token_filters, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_obj_get_info(ctx, table, GRN_INFO_TOKEN_FILTERS, &token_filters);
+ n_token_filters = GRN_BULK_VSIZE(&token_filters) / sizeof(grn_obj *);
+ if (n_token_filters > 0) {
+ int i;
+ GRN_TEXT_PUTS(ctx, outbuf, " --token_filters ");
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter = GRN_PTR_VALUE_AT(&token_filters, i);
+ if (i > 0) {
+ GRN_TEXT_PUTC(ctx, outbuf, ',');
+ }
+ dump_obj_name(ctx, outbuf, token_filter);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &token_filters);
+ }
+
+ GRN_TEXT_PUTC(ctx, outbuf, '\n');
+
+ if (domain) {
+ grn_obj_unlink(ctx, domain);
+ }
+
+ dump_columns(ctx, outbuf, table, pending_columns);
+}
+
+/* can we move this to groonga.h? */
+#define GRN_PTR_POP(obj,value) do {\
+ if (GRN_BULK_VSIZE(obj) >= sizeof(grn_obj *)) {\
+ GRN_BULK_INCR_LEN((obj), -(sizeof(grn_obj *)));\
+ value = *(grn_obj **)(GRN_BULK_CURR(obj));\
+ } else {\
+ value = NULL;\
+ }\
+} while (0)
+
+static void
+dump_schema(grn_ctx *ctx, grn_obj *outbuf)
+{
+ grn_obj *db = ctx->impl->db;
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_ID))) {
+ grn_id id;
+ grn_obj pending_columns;
+
+ GRN_PTR_INIT(&pending_columns, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ while ((id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *object;
+
+ if ((object = grn_ctx_at(ctx, id))) {
+ switch (object->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ case GRN_TABLE_NO_KEY:
+ dump_table(ctx, outbuf, object, &pending_columns);
+ break;
+ default:
+ break;
+ }
+ grn_obj_unlink(ctx, object);
+ } else {
+ /* XXX: this clause is executed when MeCab tokenizer is enabled in
+ database but the groonga isn't supported MeCab.
+ We should return error mesage about it and error exit status
+ but it's too difficult for this architecture. :< */
+ ERRCLR(ctx);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+
+ while (GRN_TRUE) {
+ grn_obj *table, *column;
+ GRN_PTR_POP(&pending_columns, column);
+ if (!column) {
+ break;
+ }
+ table = grn_ctx_at(ctx, column->header.domain);
+ dump_column(ctx, outbuf, table, column);
+ grn_obj_unlink(ctx, column);
+ grn_obj_unlink(ctx, table);
+ }
+ grn_obj_close(ctx, &pending_columns);
+ }
+}
+
+static void
+dump_selected_tables_records(grn_ctx *ctx, grn_obj *outbuf, grn_obj *tables)
+{
+ const char *p, *e;
+
+ p = GRN_TEXT_VALUE(tables);
+ e = p + GRN_TEXT_LEN(tables);
+ while (p < e) {
+ int len;
+ grn_obj *table;
+ const char *token, *token_e;
+
+ if ((len = grn_isspace(p, ctx->encoding))) {
+ p += len;
+ continue;
+ }
+
+ token = p;
+ if (!(('a' <= *p && *p <= 'z') ||
+ ('A' <= *p && *p <= 'Z') ||
+ (*p == '_'))) {
+ while (p < e && !grn_isspace(p, ctx->encoding)) {
+ p++;
+ }
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid table name is ignored: <%.*s>\n",
+ (int)(p - token), token);
+ continue;
+ }
+ while (p < e &&
+ (('a' <= *p && *p <= 'z') ||
+ ('A' <= *p && *p <= 'Z') ||
+ ('0' <= *p && *p <= '9') ||
+ (*p == '_'))) {
+ p++;
+ }
+ token_e = p;
+ while (p < e && (len = grn_isspace(p, ctx->encoding))) {
+ p += len;
+ continue;
+ }
+ if (p < e && *p == ',') {
+ p++;
+ }
+
+ if ((table = grn_ctx_get(ctx, token, token_e - token))) {
+ dump_records(ctx, outbuf, table);
+ grn_obj_unlink(ctx, table);
+ } else {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "nonexistent table name is ignored: <%.*s>\n",
+ (int)(token_e - token), token);
+ }
+ }
+}
+
+static void
+dump_all_records(grn_ctx *ctx, grn_obj *outbuf)
+{
+ grn_obj *db = ctx->impl->db;
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_ID))) {
+ grn_id id;
+
+ while ((id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *table;
+
+ if ((table = grn_ctx_at(ctx, id))) {
+ dump_records(ctx, outbuf, table);
+ grn_obj_unlink(ctx, table);
+ } else {
+ /* XXX: this clause is executed when MeCab tokenizer is enabled in
+ database but the groonga isn't supported MeCab.
+ We should return error mesage about it and error exit status
+ but it's too difficult for this architecture. :< */
+ ERRCLR(ctx);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static grn_obj *
+proc_dump(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *outbuf = ctx->impl->outbuf;
+ ctx->impl->output_type = GRN_CONTENT_NONE;
+ ctx->impl->mime_type = "text/x-groonga-command-list";
+ dump_schema(ctx, outbuf);
+ /* To update index columns correctly, we first create the whole schema, then
+ load non-derivative records, while skipping records of index columns. That
+ way, groonga will silently do the job of updating index columns for us. */
+ if (GRN_TEXT_LEN(VAR(0)) > 0) {
+ dump_selected_tables_records(ctx, outbuf, VAR(0));
+ } else {
+ dump_all_records(ctx, outbuf);
+ }
+
+ /* remove the last newline because another one will be added by the calller.
+ maybe, the caller of proc functions currently doesn't consider the
+ possibility of multiple-line output from proc functions. */
+ if (GRN_BULK_VSIZE(outbuf) > 0) {
+ grn_bulk_truncate(ctx, outbuf, GRN_BULK_VSIZE(outbuf) - 1);
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_cache_limit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_cache *cache;
+ unsigned int current_max_n_entries;
+
+ cache = grn_cache_current_get(ctx);
+ current_max_n_entries = grn_cache_get_max_n_entries(ctx, cache);
+ if (GRN_TEXT_LEN(VAR(0))) {
+ const char *rest;
+ uint32_t max = grn_atoui(GRN_TEXT_VALUE(VAR(0)),
+ GRN_BULK_CURR(VAR(0)), &rest);
+ if (GRN_BULK_CURR(VAR(0)) == rest) {
+ grn_cache_set_max_n_entries(ctx, cache, max);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "max value is invalid unsigned integer format: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ }
+ if (ctx->rc == GRN_SUCCESS) {
+ GRN_OUTPUT_INT64(current_max_n_entries);
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_register(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ if (GRN_TEXT_LEN(VAR(0))) {
+ const char *name;
+ GRN_TEXT_PUTC(ctx, VAR(0), '\0');
+ name = GRN_TEXT_VALUE(VAR(0));
+ grn_plugin_register(ctx, name);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "path is required");
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+void grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg);
+
+static grn_obj *
+proc_check(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (!obj) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "no such object: <%.*s>", (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ } else {
+ switch (obj->header.type) {
+ case GRN_DB :
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ break;
+ case GRN_TABLE_PAT_KEY :
+ grn_pat_check(ctx, (grn_pat *)obj);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ grn_hash_check(ctx, (grn_hash *)obj);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ case GRN_COLUMN_FIX_SIZE :
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ grn_ja_check(ctx, (grn_ja *)obj);
+ break;
+ case GRN_COLUMN_INDEX :
+ {
+ grn_ii *ii = (grn_ii *)obj;
+ struct grn_ii_header *h = ii->header;
+ char buf[8];
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 8);
+ {
+ uint32_t i, j, g =0, a = 0, b = 0;
+ uint32_t max = 0;
+ for (i = h->bgqtail; i != h->bgqhead; i = ((i + 1) & (GRN_II_BGQSIZE - 1))) {
+ j = h->bgqbody[i];
+ g++;
+ if (j > max) { max = j; }
+ }
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ j = h->binfo[i];
+ if (j < 0x20000) {
+ if (j > max) { max = j; }
+ b++;
+ }
+ }
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ j = h->ainfo[i];
+ if (j < 0x20000) {
+ if (j > max) { max = j; }
+ a++;
+ }
+ }
+ GRN_OUTPUT_MAP_OPEN("SUMMARY", 12);
+ GRN_OUTPUT_CSTR("flags");
+ grn_itoh(h->flags, buf, 8);
+ GRN_OUTPUT_STR(buf, 8);
+ GRN_OUTPUT_CSTR("max sid");
+ GRN_OUTPUT_INT64(h->smax);
+ GRN_OUTPUT_CSTR("number of garbage segments");
+ GRN_OUTPUT_INT64(g);
+ GRN_OUTPUT_CSTR("number of array segments");
+ GRN_OUTPUT_INT64(a);
+ GRN_OUTPUT_CSTR("max id of array segment");
+ GRN_OUTPUT_INT64(h->amax);
+ GRN_OUTPUT_CSTR("number of buffer segments");
+ GRN_OUTPUT_INT64(b);
+ GRN_OUTPUT_CSTR("max id of buffer segment");
+ GRN_OUTPUT_INT64(h->bmax);
+ GRN_OUTPUT_CSTR("max id of physical segment in use");
+ GRN_OUTPUT_INT64(max);
+ GRN_OUTPUT_CSTR("number of unmanaged segments");
+ GRN_OUTPUT_INT64(h->pnext - a - b - g);
+ GRN_OUTPUT_CSTR("total chunk size");
+ GRN_OUTPUT_INT64(h->total_chunk_size);
+ for (max = 0, i = 0; i < (GRN_II_MAX_CHUNK >> 3); i++) {
+ if ((j = h->chunks[i])) {
+ int k;
+ for (k = 0; k < 8; k++) {
+ if ((j & (1 << k))) { max = (i << 3) + j; }
+ }
+ }
+ }
+ GRN_OUTPUT_CSTR("max id of chunk segments in use");
+ GRN_OUTPUT_INT64(max);
+ GRN_OUTPUT_CSTR("number of garbage chunk");
+ GRN_OUTPUT_ARRAY_OPEN("NGARBAGES", GRN_II_N_CHUNK_VARIATION);
+ for (i = 0; i <= GRN_II_N_CHUNK_VARIATION; i++) {
+ GRN_OUTPUT_INT64(h->ngarbages[i]);
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_MAP_CLOSE();
+ for (i = 0; i < GRN_II_MAX_LSEG; i++) {
+ if (h->binfo[i] < 0x20000) { grn_ii_buffer_check(ctx, ii, i); }
+ }
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ }
+ break;
+ }
+ }
+ return NULL;
+}
+
+static grn_obj *
+proc_truncate(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int table_name_len = GRN_TEXT_LEN(VAR(0));
+ if (table_name_len == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "table name is missing");
+ } else {
+ const char *table_name = GRN_TEXT_VALUE(VAR(0));
+ grn_obj *table = grn_ctx_get(ctx, table_name, table_name_len);
+ if (!table) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "no such table: <%.*s>", table_name_len, table_name);
+ } else {
+ switch (table->header.type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ grn_table_truncate(ctx, table);
+ break;
+ default:
+ {
+ grn_obj buffer;
+ GRN_TEXT_INIT(&buffer, 0);
+ grn_inspect(ctx, &buffer, table);
+ ERR(GRN_INVALID_ARGUMENT,
+ "not a table object: %.*s",
+ (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));
+ GRN_OBJ_FIN(ctx, &buffer);
+ }
+ break;
+ }
+ }
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static int
+parse_normalize_flags(grn_ctx *ctx, grn_obj *flag_names)
+{
+ int flags = 0;
+ const char *names, *names_end;
+ int length;
+
+ names = GRN_TEXT_VALUE(flag_names);
+ length = GRN_TEXT_LEN(flag_names);
+ names_end = names + length;
+ while (names < names_end) {
+ if (*names == '|' || *names == ' ') {
+ names += 1;
+ continue;
+ }
+
+#define CHECK_FLAG(name)\
+ if (((names_end - names) >= (sizeof(#name) - 1)) &&\
+ (!memcmp(names, #name, sizeof(#name) - 1))) {\
+ flags |= GRN_STRING_ ## name;\
+ names += sizeof(#name);\
+ continue;\
+ }
+
+ CHECK_FLAG(REMOVE_BLANK);
+ CHECK_FLAG(WITH_TYPES);
+ CHECK_FLAG(WITH_CHECKS);
+ CHECK_FLAG(REMOVE_TOKENIZED_DELIMITER);
+
+#define GRN_STRING_NONE 0
+ CHECK_FLAG(NONE);
+#undef GRN_STRING_NONE
+
+ ERR(GRN_INVALID_ARGUMENT, "[normalize] invalid flag: <%.*s>",
+ (int)(names_end - names), names);
+ return 0;
+#undef CHECK_FLAG
+ }
+
+ return flags;
+}
+
+static grn_bool
+is_normalizer(grn_ctx *ctx, grn_obj *object)
+{
+ if (object->header.type != GRN_PROC) {
+ return GRN_FALSE;
+ }
+
+ if (grn_proc_get_type(ctx, object) != GRN_PROC_NORMALIZER) {
+ return GRN_FALSE;
+ }
+
+ return GRN_TRUE;
+}
+
+static grn_bool
+is_tokenizer(grn_ctx *ctx, grn_obj *object)
+{
+ if (object->header.type != GRN_PROC) {
+ return GRN_FALSE;
+ }
+
+ if (grn_proc_get_type(ctx, object) != GRN_PROC_TOKENIZER) {
+ return GRN_FALSE;
+ }
+
+ return GRN_TRUE;
+}
+
+static const char *
+char_type_name(grn_char_type type)
+{
+ const char *name = "unknown";
+
+ switch (type) {
+ case GRN_CHAR_NULL :
+ name = "null";
+ break;
+ case GRN_CHAR_ALPHA :
+ name = "alpha";
+ break;
+ case GRN_CHAR_DIGIT :
+ name = "digit";
+ break;
+ case GRN_CHAR_SYMBOL :
+ name = "symbol";
+ break;
+ case GRN_CHAR_HIRAGANA :
+ name = "hiragana";
+ break;
+ case GRN_CHAR_KATAKANA :
+ name = "katakana";
+ break;
+ case GRN_CHAR_KANJI :
+ name = "kanji";
+ break;
+ case GRN_CHAR_OTHERS :
+ name = "others";
+ break;
+ }
+
+ return name;
+}
+
+static grn_obj *
+proc_normalize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *normalizer_name;
+ grn_obj *string;
+ grn_obj *flag_names;
+
+ normalizer_name = VAR(0);
+ string = VAR(1);
+ flag_names = VAR(2);
+ if (GRN_TEXT_LEN(normalizer_name) == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "normalizer name is missing");
+ GRN_OUTPUT_CSTR("");
+ return NULL;
+ }
+
+ {
+ grn_obj *normalizer;
+ grn_obj *grn_string;
+ int flags;
+ unsigned int normalized_length_in_bytes;
+ unsigned int normalized_n_characters;
+
+ flags = parse_normalize_flags(ctx, flag_names);
+ normalizer = grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(normalizer_name),
+ GRN_TEXT_LEN(normalizer_name));
+ if (!normalizer) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[normalize] nonexistent normalizer: <%.*s>",
+ (int)GRN_TEXT_LEN(normalizer_name),
+ GRN_TEXT_VALUE(normalizer_name));
+ GRN_OUTPUT_CSTR("");
+ return NULL;
+ }
+
+ if (!is_normalizer(ctx, normalizer)) {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, normalizer);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[normalize] not normalizer: %.*s",
+ (int)GRN_TEXT_LEN(&inspected),
+ GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ GRN_OUTPUT_CSTR("");
+ grn_obj_unlink(ctx, normalizer);
+ return NULL;
+ }
+
+ grn_string = grn_string_open(ctx,
+ GRN_TEXT_VALUE(string), GRN_TEXT_LEN(string),
+ normalizer, flags);
+ grn_obj_unlink(ctx, normalizer);
+
+ GRN_OUTPUT_MAP_OPEN("RESULT", 3);
+ {
+ const char *normalized;
+
+ grn_string_get_normalized(ctx, grn_string,
+ &normalized,
+ &normalized_length_in_bytes,
+ &normalized_n_characters);
+ GRN_OUTPUT_CSTR("normalized");
+ GRN_OUTPUT_STR(normalized, normalized_length_in_bytes);
+ }
+ {
+ const unsigned char *types;
+
+ types = grn_string_get_types(ctx, grn_string);
+ GRN_OUTPUT_CSTR("types");
+ if (types) {
+ unsigned int i;
+ GRN_OUTPUT_ARRAY_OPEN("types", normalized_n_characters);
+ for (i = 0; i < normalized_n_characters; i++) {
+ GRN_OUTPUT_CSTR(char_type_name(types[i]));
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ } else {
+ GRN_OUTPUT_ARRAY_OPEN("types", 0);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ }
+ }
+ {
+ const short *checks;
+
+ checks = grn_string_get_checks(ctx, grn_string);
+ GRN_OUTPUT_CSTR("checks");
+ if (checks) {
+ unsigned int i;
+ GRN_OUTPUT_ARRAY_OPEN("checks", normalized_length_in_bytes);
+ for (i = 0; i < normalized_length_in_bytes; i++) {
+ GRN_OUTPUT_INT32(checks[i]);
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ } else {
+ GRN_OUTPUT_ARRAY_OPEN("checks", 0);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ }
+ }
+ GRN_OUTPUT_MAP_CLOSE();
+
+ grn_obj_unlink(ctx, grn_string);
+ }
+
+ return NULL;
+}
+
+static unsigned int
+parse_tokenize_flags(grn_ctx *ctx, grn_obj *flag_names)
+{
+ unsigned int flags = 0;
+ const char *names, *names_end;
+ int length;
+
+ names = GRN_TEXT_VALUE(flag_names);
+ length = GRN_TEXT_LEN(flag_names);
+ names_end = names + length;
+ while (names < names_end) {
+ if (*names == '|' || *names == ' ') {
+ names += 1;
+ continue;
+ }
+
+#define CHECK_FLAG(name)\
+ if (((names_end - names) >= (sizeof(#name) - 1)) &&\
+ (!memcmp(names, #name, sizeof(#name) - 1))) {\
+ flags |= GRN_TOKEN_ ## name;\
+ names += sizeof(#name);\
+ continue;\
+ }
+
+ CHECK_FLAG(ENABLE_TOKENIZED_DELIMITER);
+
+#define GRN_TOKEN_NONE 0
+ CHECK_FLAG(NONE);
+#undef GRN_TOKEN_NONE
+
+ ERR(GRN_INVALID_ARGUMENT, "[tokenize] invalid flag: <%.*s>",
+ (int)(names_end - names), names);
+ return 0;
+#undef CHECK_FLAG
+ }
+
+ return flags;
+}
+
+typedef struct {
+ grn_id id;
+ int32_t position;
+} tokenize_token;
+
+static void
+output_tokens(grn_ctx *ctx, grn_obj *tokens, grn_hash *lexicon)
+{
+ int i, n_tokens;
+
+ n_tokens = GRN_BULK_VSIZE(tokens) / sizeof(tokenize_token);
+ GRN_OUTPUT_ARRAY_OPEN("TOKENS", n_tokens);
+ for (i = 0; i < n_tokens; i++) {
+ tokenize_token *token;
+ char value[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int value_size;
+
+ token = ((tokenize_token *)(GRN_BULK_HEAD(tokens))) + i;
+
+ GRN_OUTPUT_MAP_OPEN("TOKEN", 2);
+
+ GRN_OUTPUT_CSTR("value");
+ value_size = grn_hash_get_key(ctx, lexicon, token->id,
+ value, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OUTPUT_STR(value, value_size);
+
+ GRN_OUTPUT_CSTR("position");
+ GRN_OUTPUT_INT32(token->position);
+
+ GRN_OUTPUT_MAP_CLOSE();
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+}
+
+static grn_hash *
+create_lexicon_for_tokenize(grn_ctx *ctx,
+ grn_obj *tokenizer_name,
+ grn_obj *normalizer_name)
+{
+ grn_hash *lexicon;
+ grn_obj *tokenizer;
+ grn_obj *normalizer = NULL;
+
+ tokenizer = grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(tokenizer_name),
+ GRN_TEXT_LEN(tokenizer_name));
+ if (!tokenizer) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[tokenize] nonexistent tokenizer: <%.*s>",
+ (int)GRN_TEXT_LEN(tokenizer_name),
+ GRN_TEXT_VALUE(tokenizer_name));
+ return NULL;
+ }
+
+ if (!is_tokenizer(ctx, tokenizer)) {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, tokenizer);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[tokenize] not tokenizer: %.*s",
+ (int)GRN_TEXT_LEN(&inspected),
+ GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ grn_obj_unlink(ctx, tokenizer);
+ return NULL;
+ }
+
+ if (GRN_TEXT_LEN(normalizer_name) > 0) {
+ normalizer = grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(normalizer_name),
+ GRN_TEXT_LEN(normalizer_name));
+ if (!normalizer) {
+ grn_obj_unlink(ctx, tokenizer);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[tokenize] nonexistent normalizer: <%.*s>",
+ (int)GRN_TEXT_LEN(normalizer_name),
+ GRN_TEXT_VALUE(normalizer_name));
+ return NULL;
+ }
+
+ if (!is_normalizer(ctx, normalizer)) {
+ grn_obj inspected;
+ grn_obj_unlink(ctx, tokenizer);
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, normalizer);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[tokenize] not normalizer: %.*s",
+ (int)GRN_TEXT_LEN(&inspected),
+ GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ grn_obj_unlink(ctx, normalizer);
+ return NULL;
+ }
+ }
+
+ lexicon = grn_hash_create(ctx, NULL, GRN_TABLE_MAX_KEY_SIZE, 0,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_KEY_VAR_SIZE);
+ grn_obj_set_info(ctx, (grn_obj *)lexicon,
+ GRN_INFO_DEFAULT_TOKENIZER, tokenizer);
+ grn_obj_unlink(ctx, tokenizer);
+ if (normalizer) {
+ grn_obj_set_info(ctx, (grn_obj *)lexicon,
+ GRN_INFO_NORMALIZER, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+
+ return lexicon;
+}
+
+static void
+tokenize(grn_ctx *ctx, grn_hash *lexicon, grn_obj *string, grn_token_mode mode,
+ unsigned int flags, grn_obj *tokens)
+{
+ grn_token_cursor *token_cursor;
+
+ token_cursor =
+ grn_token_cursor_open(ctx, (grn_obj *)lexicon,
+ GRN_TEXT_VALUE(string), GRN_TEXT_LEN(string),
+ mode, flags);
+ if (!token_cursor) {
+ return;
+ }
+
+ while (token_cursor->status == GRN_TOKEN_DOING) {
+ grn_id token_id = grn_token_cursor_next(ctx, token_cursor);
+ tokenize_token *current_token;
+ if (token_id == GRN_ID_NIL) {
+ continue;
+ }
+ grn_bulk_space(ctx, tokens, sizeof(tokenize_token));
+ current_token = ((tokenize_token *)(GRN_BULK_CURR(tokens))) - 1;
+ current_token->id = token_id;
+ current_token->position = token_cursor->pos;
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+}
+
+static grn_obj *
+proc_tokenize(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *tokenizer_name;
+ grn_obj *string;
+ grn_obj *normalizer_name;
+ grn_obj *flag_names;
+ grn_obj *mode_name;
+
+ tokenizer_name = VAR(0);
+ string = VAR(1);
+ normalizer_name = VAR(2);
+ flag_names = VAR(3);
+ mode_name = VAR(4);
+
+ if (GRN_TEXT_LEN(tokenizer_name) == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenize] tokenizer name is missing");
+ return NULL;
+ }
+
+ if (GRN_TEXT_LEN(string) == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenize] string is missing");
+ return NULL;
+ }
+
+ {
+ unsigned int flags;
+ grn_hash *lexicon;
+
+ flags = parse_tokenize_flags(ctx, flag_names);
+ if (ctx->rc != GRN_SUCCESS) {
+ return NULL;
+ }
+
+ lexicon = create_lexicon_for_tokenize(ctx, tokenizer_name, normalizer_name);
+ if (!lexicon) {
+ return NULL;
+ }
+
+#define MODE_NAME_EQUAL(name)\
+ (GRN_TEXT_LEN(mode_name) == strlen(name) &&\
+ memcmp(GRN_TEXT_VALUE(mode_name), name, strlen(name)) == 0)
+
+ if (GRN_TEXT_LEN(mode_name) == 0 || MODE_NAME_EQUAL("ADD")) {
+ grn_obj tokens;
+ GRN_VALUE_FIX_SIZE_INIT(&tokens, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ tokenize(ctx, lexicon, string, GRN_TOKEN_ADD, flags, &tokens);
+ output_tokens(ctx, &tokens, lexicon);
+ GRN_OBJ_FIN(ctx, &tokens);
+ } else if (MODE_NAME_EQUAL("GET")) {
+ {
+ grn_token_cursor *token_cursor;
+ token_cursor =
+ grn_token_cursor_open(ctx, (grn_obj *)lexicon,
+ GRN_TEXT_VALUE(string), GRN_TEXT_LEN(string),
+ GRN_TOKEN_ADD, flags);
+ if (token_cursor) {
+ while (token_cursor->status == GRN_TOKEN_DOING) {
+ grn_token_cursor_next(ctx, token_cursor);
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+ }
+
+ {
+ grn_obj tokens;
+ GRN_VALUE_FIX_SIZE_INIT(&tokens, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ tokenize(ctx, lexicon, string, GRN_TOKEN_GET, flags, &tokens);
+ output_tokens(ctx, &tokens, lexicon);
+ GRN_OBJ_FIN(ctx, &tokens);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenize] invalid mode: <%.*s>",
+ (int)GRN_TEXT_LEN(mode_name), GRN_TEXT_VALUE(mode_name));
+ }
+#undef MODE_NAME_EQUAL
+
+ grn_hash_close(ctx, lexicon);
+ }
+
+ return NULL;
+}
+
+static void
+list_proc(grn_ctx *ctx, grn_proc_type target_proc_type,
+ const char *name, const char *plural_name)
+{
+ grn_obj *db;
+ grn_table_cursor *cursor;
+ grn_obj target_procs;
+
+ db = grn_ctx_db(ctx);
+ cursor = grn_table_cursor_open(ctx, db, NULL, 0, NULL, 0, 0, -1,
+ GRN_CURSOR_BY_ID);
+ if (!cursor) {
+ return;
+ }
+
+ GRN_PTR_INIT(&target_procs, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ {
+ grn_id id;
+
+ while ((id = grn_table_cursor_next(ctx, cursor)) != GRN_ID_NIL) {
+ grn_obj *obj;
+ grn_proc_type proc_type;
+
+ obj = grn_ctx_at(ctx, id);
+ if (!obj) {
+ continue;
+ }
+
+ if (obj->header.type != GRN_PROC) {
+ grn_obj_unlink(ctx, obj);
+ continue;
+ }
+
+ proc_type = grn_proc_get_type(ctx, obj);
+ if (proc_type != target_proc_type) {
+ grn_obj_unlink(ctx, obj);
+ continue;
+ }
+
+ GRN_PTR_PUT(ctx, &target_procs, obj);
+ }
+ grn_table_cursor_close(ctx, cursor);
+
+ {
+ int i, n_procs;
+
+ n_procs = GRN_BULK_VSIZE(&target_procs) / sizeof(grn_obj *);
+ GRN_OUTPUT_ARRAY_OPEN(plural_name, n_procs);
+ for (i = 0; i < n_procs; i++) {
+ grn_obj *proc;
+ char name[GRN_TABLE_MAX_KEY_SIZE];
+ int name_size;
+
+ proc = GRN_PTR_VALUE_AT(&target_procs, i);
+ name_size = grn_obj_name(ctx, proc, name, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OUTPUT_MAP_OPEN(name, 1);
+ GRN_OUTPUT_CSTR("name");
+ GRN_OUTPUT_STR(name, name_size);
+ GRN_OUTPUT_MAP_CLOSE();
+
+ grn_obj_unlink(ctx, proc);
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ }
+
+ grn_obj_unlink(ctx, &target_procs);
+ }
+}
+
+static grn_obj *
+proc_tokenizer_list(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ list_proc(ctx, GRN_PROC_TOKENIZER, "tokenizer", "tokenizers");
+ return NULL;
+}
+
+static grn_obj *
+proc_normalizer_list(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ list_proc(ctx, GRN_PROC_NORMALIZER, "normalizer", "normalizers");
+ return NULL;
+}
+
+static grn_obj *
+func_rand(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int val;
+ grn_obj *obj;
+ if (nargs > 0) {
+ int max = GRN_INT32_VALUE(args[0]);
+ val = (int) (1.0 * max * rand() / (RAND_MAX + 1.0));
+ } else {
+ val = rand();
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_INT32, 0))) {
+ GRN_INT32_SET(ctx, obj, val);
+ }
+ return obj;
+}
+
+static grn_obj *
+func_now(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_TIME, 0))) {
+ GRN_TIME_NOW(ctx, obj);
+ }
+ return obj;
+}
+
+static inline grn_bool
+is_comparable_number_type(grn_id type)
+{
+ return GRN_DB_INT8 <= type && type <= GRN_DB_TIME;
+}
+
+static inline grn_id
+larger_number_type(grn_id type1, grn_id type2)
+{
+ if (type1 == type2) {
+ return type1;
+ }
+
+ switch (type1) {
+ case GRN_DB_FLOAT :
+ return type1;
+ case GRN_DB_TIME :
+ if (type2 == GRN_DB_FLOAT) {
+ return type2;
+ } else {
+ return type1;
+ }
+ default :
+ if (type2 > type1) {
+ return type2;
+ } else {
+ return type1;
+ }
+ }
+}
+
+static inline grn_id
+smaller_number_type(grn_id type1, grn_id type2)
+{
+ if (type1 == type2) {
+ return type1;
+ }
+
+ switch (type1) {
+ case GRN_DB_FLOAT :
+ return type1;
+ case GRN_DB_TIME :
+ if (type2 == GRN_DB_FLOAT) {
+ return type2;
+ } else {
+ return type1;
+ }
+ default :
+ {
+ grn_id smaller_number_type;
+ if (type2 > type1) {
+ smaller_number_type = type2;
+ } else {
+ smaller_number_type = type1;
+ }
+ switch (smaller_number_type) {
+ case GRN_DB_UINT8 :
+ return GRN_DB_INT8;
+ case GRN_DB_UINT16 :
+ return GRN_DB_INT16;
+ case GRN_DB_UINT32 :
+ return GRN_DB_INT32;
+ case GRN_DB_UINT64 :
+ return GRN_DB_INT64;
+ default :
+ return smaller_number_type;
+ }
+ }
+ }
+}
+
+static inline grn_bool
+is_negative_value(grn_obj *number)
+{
+ switch (number->header.domain) {
+ case GRN_DB_INT8 :
+ return GRN_INT8_VALUE(number) < 0;
+ case GRN_DB_INT16 :
+ return GRN_INT16_VALUE(number) < 0;
+ case GRN_DB_INT32 :
+ return GRN_INT32_VALUE(number) < 0;
+ case GRN_DB_INT64 :
+ return GRN_INT64_VALUE(number) < 0;
+ case GRN_DB_TIME :
+ return GRN_TIME_VALUE(number) < 0;
+ case GRN_DB_FLOAT :
+ return GRN_FLOAT_VALUE(number) < 0;
+ default :
+ return GRN_FALSE;
+ }
+}
+
+static inline grn_bool
+number_safe_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, grn_id type)
+{
+ grn_obj_reinit(ctx, dest, type, 0);
+ if (src->header.domain == type) {
+ GRN_TEXT_SET(ctx, dest, GRN_TEXT_VALUE(src), GRN_TEXT_LEN(src));
+ return GRN_TRUE;
+ }
+
+ switch (type) {
+ case GRN_DB_UINT8 :
+ if (is_negative_value(src)) {
+ GRN_UINT8_SET(ctx, dest, 0);
+ return GRN_TRUE;
+ }
+ case GRN_DB_UINT16 :
+ if (is_negative_value(src)) {
+ GRN_UINT16_SET(ctx, dest, 0);
+ return GRN_TRUE;
+ }
+ case GRN_DB_UINT32 :
+ if (is_negative_value(src)) {
+ GRN_UINT32_SET(ctx, dest, 0);
+ return GRN_TRUE;
+ }
+ case GRN_DB_UINT64 :
+ if (is_negative_value(src)) {
+ GRN_UINT64_SET(ctx, dest, 0);
+ return GRN_TRUE;
+ }
+ default :
+ return grn_obj_cast(ctx, src, dest, GRN_FALSE) == GRN_SUCCESS;
+ }
+}
+
+static inline int
+compare_number(grn_ctx *ctx, grn_obj *number1, grn_obj *number2, grn_id type)
+{
+#define COMPARE_AND_RETURN(type, value1, value2)\
+ {\
+ type computed_value1 = value1;\
+ type computed_value2 = value2;\
+ if (computed_value1 > computed_value2) {\
+ return 1;\
+ } else if (computed_value1 < computed_value2) {\
+ return -1;\
+ } else {\
+ return 0;\
+ }\
+ }
+
+ switch (type) {
+ case GRN_DB_INT8 :
+ COMPARE_AND_RETURN(int8_t,
+ GRN_INT8_VALUE(number1),
+ GRN_INT8_VALUE(number2));
+ case GRN_DB_UINT8 :
+ COMPARE_AND_RETURN(uint8_t,
+ GRN_UINT8_VALUE(number1),
+ GRN_UINT8_VALUE(number2));
+ case GRN_DB_INT16 :
+ COMPARE_AND_RETURN(int16_t,
+ GRN_INT16_VALUE(number1),
+ GRN_INT16_VALUE(number2));
+ case GRN_DB_UINT16 :
+ COMPARE_AND_RETURN(uint16_t,
+ GRN_UINT16_VALUE(number1),
+ GRN_UINT16_VALUE(number2));
+ case GRN_DB_INT32 :
+ COMPARE_AND_RETURN(int32_t,
+ GRN_INT32_VALUE(number1),
+ GRN_INT32_VALUE(number2));
+ case GRN_DB_UINT32 :
+ COMPARE_AND_RETURN(uint32_t,
+ GRN_UINT32_VALUE(number1),
+ GRN_UINT32_VALUE(number2));
+ case GRN_DB_INT64 :
+ COMPARE_AND_RETURN(int64_t,
+ GRN_INT64_VALUE(number1),
+ GRN_INT64_VALUE(number2));
+ case GRN_DB_UINT64 :
+ COMPARE_AND_RETURN(uint64_t,
+ GRN_UINT64_VALUE(number1),
+ GRN_UINT64_VALUE(number2));
+ case GRN_DB_FLOAT :
+ COMPARE_AND_RETURN(double,
+ GRN_FLOAT_VALUE(number1),
+ GRN_FLOAT_VALUE(number2));
+ case GRN_DB_TIME :
+ COMPARE_AND_RETURN(int64_t,
+ GRN_TIME_VALUE(number1),
+ GRN_TIME_VALUE(number2));
+ default :
+ return 0;
+ }
+
+#undef COMPARE_AND_RETURN
+}
+
+static grn_obj *
+func_max(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *max;
+ grn_id cast_type = GRN_DB_INT8;
+ grn_obj casted_max, casted_number;
+ int i;
+
+ max = GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ if (!max) {
+ return max;
+ }
+
+ GRN_VOID_INIT(&casted_max);
+ GRN_VOID_INIT(&casted_number);
+ for (i = 0; i < nargs; i++) {
+ grn_obj *number = args[i];
+ grn_id domain = number->header.domain;
+ if (!is_comparable_number_type(domain)) {
+ continue;
+ }
+ cast_type = larger_number_type(cast_type, domain);
+ if (!number_safe_cast(ctx, number, &casted_number, cast_type)) {
+ continue;
+ }
+ if (max->header.domain == GRN_DB_VOID) {
+ grn_obj_reinit(ctx, max, cast_type, 0);
+ GRN_TEXT_SET(ctx, max,
+ GRN_TEXT_VALUE(&casted_number),
+ GRN_TEXT_LEN(&casted_number));
+ continue;
+ }
+
+ if (max->header.domain != cast_type) {
+ if (!number_safe_cast(ctx, max, &casted_max, cast_type)) {
+ continue;
+ }
+ grn_obj_reinit(ctx, max, cast_type, 0);
+ GRN_TEXT_SET(ctx, max,
+ GRN_TEXT_VALUE(&casted_max),
+ GRN_TEXT_LEN(&casted_max));
+ }
+ if (compare_number(ctx, &casted_number, max, cast_type) > 0) {
+ grn_obj_reinit(ctx, max, cast_type, 0);
+ GRN_TEXT_SET(ctx, max,
+ GRN_TEXT_VALUE(&casted_number),
+ GRN_TEXT_LEN(&casted_number));
+ }
+ }
+ GRN_OBJ_FIN(ctx, &casted_max);
+ GRN_OBJ_FIN(ctx, &casted_number);
+
+ return max;
+}
+
+static grn_obj *
+func_min(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *min;
+ grn_id cast_type = GRN_DB_INT8;
+ grn_obj casted_min, casted_number;
+ int i;
+
+ min = GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ if (!min) {
+ return min;
+ }
+
+ GRN_VOID_INIT(&casted_min);
+ GRN_VOID_INIT(&casted_number);
+ for (i = 0; i < nargs; i++) {
+ grn_obj *number = args[i];
+ grn_id domain = number->header.domain;
+ if (!is_comparable_number_type(domain)) {
+ continue;
+ }
+ cast_type = smaller_number_type(cast_type, domain);
+ if (!number_safe_cast(ctx, number, &casted_number, cast_type)) {
+ continue;
+ }
+ if (min->header.domain == GRN_DB_VOID) {
+ grn_obj_reinit(ctx, min, cast_type, 0);
+ GRN_TEXT_SET(ctx, min,
+ GRN_TEXT_VALUE(&casted_number),
+ GRN_TEXT_LEN(&casted_number));
+ continue;
+ }
+
+ if (min->header.domain != cast_type) {
+ if (!number_safe_cast(ctx, min, &casted_min, cast_type)) {
+ continue;
+ }
+ grn_obj_reinit(ctx, min, cast_type, 0);
+ GRN_TEXT_SET(ctx, min,
+ GRN_TEXT_VALUE(&casted_min),
+ GRN_TEXT_LEN(&casted_min));
+ }
+ if (compare_number(ctx, &casted_number, min, cast_type) < 0) {
+ grn_obj_reinit(ctx, min, cast_type, 0);
+ GRN_TEXT_SET(ctx, min,
+ GRN_TEXT_VALUE(&casted_number),
+ GRN_TEXT_LEN(&casted_number));
+ }
+ }
+ GRN_OBJ_FIN(ctx, &casted_min);
+ GRN_OBJ_FIN(ctx, &casted_number);
+
+ return min;
+}
+
+static grn_obj *
+func_geo_in_circle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ unsigned char r = GRN_FALSE;
+ grn_geo_approximate_type type = GRN_GEO_APPROXIMATE_RECTANGLE;
+ switch (nargs) {
+ case 4 :
+ if (grn_geo_resolve_approximate_type(ctx, args[3], &type) != GRN_SUCCESS) {
+ break;
+ }
+ /* fallthru */
+ case 3 :
+ r = grn_geo_in_circle(ctx, args[0], args[1], args[2], type);
+ break;
+ default :
+ break;
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
+ GRN_UINT32_SET(ctx, obj, r);
+ }
+ return obj;
+}
+
+static grn_obj *
+func_geo_in_rectangle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ unsigned char r = GRN_FALSE;
+ if (nargs == 3) {
+ r = grn_geo_in_rectangle(ctx, args[0], args[1], args[2]);
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
+ GRN_UINT32_SET(ctx, obj, r);
+ }
+ return obj;
+}
+
+static grn_obj *
+func_geo_distance(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ double d = 0.0;
+ grn_geo_approximate_type type = GRN_GEO_APPROXIMATE_RECTANGLE;
+ switch (nargs) {
+ case 3 :
+ if (grn_geo_resolve_approximate_type(ctx, args[2], &type) != GRN_SUCCESS) {
+ break;
+ }
+ /* fallthru */
+ case 2 :
+ d = grn_geo_distance(ctx, args[0], args[1], type);
+ break;
+ default:
+ break;
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
+ GRN_FLOAT_SET(ctx, obj, d);
+ }
+ return obj;
+}
+
+/* deprecated. */
+static grn_obj *
+func_geo_distance2(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ double d = 0;
+ if (nargs == 2) {
+ d = grn_geo_distance_sphere(ctx, args[0], args[1]);
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
+ GRN_FLOAT_SET(ctx, obj, d);
+ }
+ return obj;
+}
+
+/* deprecated. */
+static grn_obj *
+func_geo_distance3(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *obj;
+ double d = 0;
+ if (nargs == 2) {
+ d = grn_geo_distance_ellipsoid(ctx, args[0], args[1]);
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
+ GRN_FLOAT_SET(ctx, obj, d);
+ }
+ return obj;
+}
+
+#define DIST(ox,oy) (dists[((lx + 1) * (oy)) + (ox)])
+
+static grn_obj *
+func_edit_distance(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int d = 0;
+ grn_obj *obj;
+ if (nargs == 2) {
+ uint32_t cx, lx, cy, ly, *dists;
+ char *px, *sx = GRN_TEXT_VALUE(args[0]), *ex = GRN_BULK_CURR(args[0]);
+ char *py, *sy = GRN_TEXT_VALUE(args[1]), *ey = GRN_BULK_CURR(args[1]);
+ for (px = sx, lx = 0; px < ex && (cx = grn_charlen(ctx, px, ex)); px += cx, lx++);
+ for (py = sy, ly = 0; py < ey && (cy = grn_charlen(ctx, py, ey)); py += cy, ly++);
+ if ((dists = GRN_MALLOC((lx + 1) * (ly + 1) * sizeof(uint32_t)))) {
+ uint32_t x, y;
+ for (x = 0; x <= lx; x++) { DIST(x, 0) = x; }
+ for (y = 0; y <= ly; y++) { DIST(0, y) = y; }
+ for (x = 1, px = sx; x <= lx; x++, px += cx) {
+ cx = grn_charlen(ctx, px, ex);
+ for (y = 1, py = sy; y <= ly; y++, py += cy) {
+ cy = grn_charlen(ctx, py, ey);
+ if (cx == cy && !memcmp(px, py, cx)) {
+ DIST(x, y) = DIST(x - 1, y - 1);
+ } else {
+ uint32_t a = DIST(x - 1, y) + 1;
+ uint32_t b = DIST(x, y - 1) + 1;
+ uint32_t c = DIST(x - 1, y - 1) + 1;
+ DIST(x, y) = ((a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c));
+ }
+ }
+ }
+ d = DIST(lx, ly);
+ GRN_FREE(dists);
+ }
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
+ GRN_UINT32_SET(ctx, obj, d);
+ }
+ return obj;
+}
+
+static grn_obj *
+func_all_records(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *true_value;
+ if ((true_value = GRN_PROC_ALLOC(GRN_DB_BOOL, 0))) {
+ GRN_BOOL_SET(ctx, true_value, GRN_TRUE);
+ }
+ return true_value;
+}
+
+static grn_rc
+selector_all_records(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ grn_obj score;
+
+ GRN_UINT32_INIT(&score, 0);
+ GRN_UINT32_SET(ctx, &score, 1);
+
+ GRN_TABLE_EACH(ctx, table, 0, 0, id, NULL, NULL, NULL, {
+ grn_id result_id;
+ result_id = grn_table_add(ctx, res, &id, sizeof(grn_id), NULL);
+ grn_obj_set_value(ctx, res, result_id, &score, GRN_OBJ_SET);
+ });
+
+ GRN_OBJ_FIN(ctx, &score);
+
+ return ctx->rc;
+}
+
+static grn_obj *
+snippet_exec(grn_ctx *ctx, grn_obj *snip, grn_obj *text,
+ grn_user_data *user_data)
+{
+ grn_rc rc;
+ unsigned int i, n_results, max_tagged_length;
+ grn_obj snippet_buffer;
+ grn_obj *snippets;
+
+ if (GRN_TEXT_LEN(text) == 0) {
+ return NULL;
+ }
+
+ rc = grn_snip_exec(ctx, snip,
+ GRN_TEXT_VALUE(text), GRN_TEXT_LEN(text),
+ &n_results, &max_tagged_length);
+ if (rc != GRN_SUCCESS) {
+ return NULL;
+ }
+
+ if (n_results == 0) {
+ return GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ }
+
+ snippets = GRN_PROC_ALLOC(GRN_DB_SHORT_TEXT, GRN_OBJ_VECTOR);
+ if (!snippets) {
+ return NULL;
+ }
+
+ GRN_TEXT_INIT(&snippet_buffer, 0);
+ grn_bulk_space(ctx, &snippet_buffer, max_tagged_length);
+ for (i = 0; i < n_results; i++) {
+ unsigned int snippet_length;
+
+ GRN_BULK_REWIND(&snippet_buffer);
+ rc = grn_snip_get_result(ctx, snip, i,
+ GRN_TEXT_VALUE(&snippet_buffer),
+ &snippet_length);
+ if (rc == GRN_SUCCESS) {
+ grn_vector_add_element(ctx, snippets,
+ GRN_TEXT_VALUE(&snippet_buffer), snippet_length,
+ 0, GRN_DB_SHORT_TEXT);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &snippet_buffer);
+
+ return snippets;
+}
+
+static grn_obj *
+func_snippet_html(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *snippets = NULL;
+
+ /* TODO: support parameters */
+ if (nargs == 1) {
+ grn_obj *text = args[0];
+ grn_obj *expression = NULL;
+ grn_obj *condition_ptr = NULL;
+ grn_obj *condition = NULL;
+ grn_obj *snip = NULL;
+ int flags = GRN_SNIP_SKIP_LEADING_SPACES;
+ unsigned int width = 200;
+ unsigned int max_n_results = 3;
+ const char *open_tag = "<span class=\"keyword\">";
+ const char *close_tag = "</span>";
+ grn_snip_mapping *mapping = GRN_SNIP_MAPPING_HTML_ESCAPE;
+
+ grn_proc_get_info(ctx, user_data, NULL, NULL, &expression);
+ condition_ptr = grn_expr_get_var(ctx, expression,
+ GRN_SELECT_INTERNAL_VAR_CONDITION,
+ strlen(GRN_SELECT_INTERNAL_VAR_CONDITION));
+ if (condition_ptr) {
+ condition = GRN_PTR_VALUE(condition_ptr);
+ }
+
+ if (condition) {
+ snip = grn_snip_open(ctx, flags, width, max_n_results,
+ open_tag, strlen(open_tag),
+ close_tag, strlen(close_tag),
+ mapping);
+ if (snip) {
+ grn_snip_set_normalizer(ctx, snip, GRN_NORMALIZER_AUTO);
+ grn_expr_snip_add_conditions(ctx, condition, snip,
+ 0, NULL, NULL, NULL, NULL);
+ }
+ }
+
+ if (snip) {
+ snippets = snippet_exec(ctx, snip, text, user_data);
+ grn_obj_close(ctx, snip);
+ }
+ }
+
+ if (!snippets) {
+ snippets = GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ }
+
+ return snippets;
+}
+
+typedef struct {
+ grn_obj *found;
+ grn_obj *table;
+ grn_obj *records;
+} selector_to_function_data;
+
+static grn_bool
+selector_to_function_data_init(grn_ctx *ctx,
+ selector_to_function_data *data,
+ grn_user_data *user_data)
+{
+ grn_obj *condition = NULL;
+ grn_obj *variable;
+
+ data->table = NULL;
+ data->records = NULL;
+
+ data->found = GRN_PROC_ALLOC(GRN_DB_BOOL, 0);
+ if (!data->found) {
+ return GRN_FALSE;
+ }
+ GRN_BOOL_SET(ctx, data->found, GRN_FALSE);
+
+ grn_proc_get_info(ctx, user_data, NULL, NULL, &condition);
+ if (!condition) {
+ return GRN_FALSE;
+ }
+
+ variable = grn_expr_get_var_by_offset(ctx, condition, 0);
+ if (!variable) {
+ return GRN_FALSE;
+ }
+
+ data->table = grn_ctx_at(ctx, variable->header.domain);
+ if (!data->table) {
+ return GRN_FALSE;
+ }
+
+ data->records = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ data->table, NULL);
+ if (!data->records) {
+ return GRN_FALSE;
+ }
+
+ {
+ grn_rset_posinfo pi;
+ unsigned int key_size;
+ memset(&pi, 0, sizeof(grn_rset_posinfo));
+ pi.rid = GRN_RECORD_VALUE(variable);
+ key_size = ((grn_hash *)(data->records))->key_size;
+ if (grn_table_add(ctx, data->records, &pi, key_size, NULL) == GRN_ID_NIL) {
+ return GRN_FALSE;
+ }
+ }
+
+ return GRN_TRUE;
+}
+
+static void
+selector_to_function_data_selected(grn_ctx *ctx,
+ selector_to_function_data *data)
+{
+ GRN_BOOL_SET(ctx, data->found, grn_table_size(ctx, data->records) > 0);
+}
+
+static void
+selector_to_function_data_fin(grn_ctx *ctx,
+ selector_to_function_data *data)
+{
+ if (data->records) {
+ grn_obj_unlink(ctx, data->records);
+ }
+
+ if (data->table) {
+ grn_obj_unlink(ctx, data->table);
+ }
+}
+
+static grn_rc
+run_query(grn_ctx *ctx, grn_obj *table,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *match_columns_string;
+ grn_obj *query;
+ grn_obj *query_expander_name = NULL;
+ grn_obj *match_columns = NULL;
+ grn_obj *condition = NULL;
+ grn_obj *dummy_variable;
+
+ /* TODO: support flags by parameters */
+ if (!(2 <= nargs && nargs <= 3)) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "wrong number of arguments (%d for 2..3)", nargs);
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ match_columns_string = args[0];
+ query = args[1];
+ if (nargs > 2) {
+ query_expander_name = args[2];
+ }
+
+ if (match_columns_string->header.domain == GRN_DB_TEXT &&
+ GRN_TEXT_LEN(match_columns_string) > 0) {
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, match_columns, dummy_variable);
+ if (!match_columns) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ grn_expr_parse(ctx, match_columns,
+ GRN_TEXT_VALUE(match_columns_string),
+ GRN_TEXT_LEN(match_columns_string),
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ if (ctx->rc != GRN_SUCCESS) {
+ rc = ctx->rc;
+ goto exit;
+ }
+ }
+
+ if (query->header.domain == GRN_DB_TEXT && GRN_TEXT_LEN(query) > 0) {
+ const char *query_string;
+ unsigned int query_string_len;
+ grn_obj expanded_query;
+ grn_expr_flags flags =
+ GRN_EXPR_SYNTAX_QUERY|GRN_EXPR_ALLOW_PRAGMA|GRN_EXPR_ALLOW_COLUMN;
+
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, condition, dummy_variable);
+ if (!condition) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ query_string = GRN_TEXT_VALUE(query);
+ query_string_len = GRN_TEXT_LEN(query);
+
+ GRN_TEXT_INIT(&expanded_query, 0);
+ if (query_expander_name &&
+ query_expander_name->header.domain == GRN_DB_TEXT &&
+ GRN_TEXT_LEN(query_expander_name) > 0) {
+ rc = expand_query(ctx, query_string, query_string_len, flags,
+ GRN_TEXT_VALUE(query_expander_name),
+ GRN_TEXT_LEN(query_expander_name),
+ &expanded_query);
+ if (rc != GRN_SUCCESS) {
+ GRN_OBJ_FIN(ctx, &expanded_query);
+ goto exit;
+ }
+ query_string = GRN_TEXT_VALUE(&expanded_query);
+ query_string_len = GRN_TEXT_LEN(&expanded_query);
+ }
+ grn_expr_parse(ctx, condition,
+ query_string,
+ query_string_len,
+ match_columns, GRN_OP_MATCH, GRN_OP_AND, flags);
+ rc = ctx->rc;
+ GRN_OBJ_FIN(ctx, &expanded_query);
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ grn_table_select(ctx, table, condition, res, op);
+ rc = ctx->rc;
+ }
+
+exit:
+ if (match_columns) {
+ grn_obj_unlink(ctx, match_columns);
+ }
+ if (condition) {
+ grn_obj_unlink(ctx, condition);
+ }
+
+ return rc;
+}
+
+static grn_obj *
+func_query(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ selector_to_function_data data;
+
+ if (selector_to_function_data_init(ctx, &data, user_data)) {
+ grn_rc rc;
+ rc = run_query(ctx, data.table, nargs, args, data.records, GRN_OP_AND);
+ if (rc == GRN_SUCCESS) {
+ selector_to_function_data_selected(ctx, &data);
+ }
+ }
+ selector_to_function_data_fin(ctx, &data);
+
+ return data.found;
+}
+
+static grn_rc
+selector_query(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ return run_query(ctx, table, nargs - 1, args + 1, res, op);
+}
+
+static grn_rc
+run_sub_filter(grn_ctx *ctx, grn_obj *table,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *scope;
+ grn_obj *sub_filter_string;
+ grn_obj *scope_domain = NULL;
+ grn_obj *sub_filter = NULL;
+ grn_obj *dummy_variable = NULL;
+
+ if (nargs != 2) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "sub_filter(): wrong number of arguments (%d for 2)", nargs);
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ scope = args[0];
+ sub_filter_string = args[1];
+
+ switch (scope->header.type) {
+ case GRN_ACCESSOR :
+ case GRN_COLUMN_FIX_SIZE :
+ case GRN_COLUMN_VAR_SIZE :
+ break;
+ default :
+ /* TODO: put inspected the 1nd argument to message */
+ ERR(GRN_INVALID_ARGUMENT,
+ "sub_filter(): the 1nd argument must be column or accessor");
+ rc = ctx->rc;
+ goto exit;
+ break;
+ }
+
+ scope_domain = grn_ctx_at(ctx, grn_obj_get_range(ctx, scope));
+
+ if (sub_filter_string->header.domain != GRN_DB_TEXT) {
+ /* TODO: put inspected the 2nd argument to message */
+ ERR(GRN_INVALID_ARGUMENT,
+ "sub_filter(): the 2nd argument must be String");
+ rc = ctx->rc;
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(sub_filter_string) == 0) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "sub_filter(): the 2nd argument must not be empty String");
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, scope_domain, sub_filter, dummy_variable);
+ if (!sub_filter) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ grn_expr_parse(ctx, sub_filter,
+ GRN_TEXT_VALUE(sub_filter_string),
+ GRN_TEXT_LEN(sub_filter_string),
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ if (ctx->rc != GRN_SUCCESS) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ {
+ grn_obj *base_res = NULL;
+ grn_obj *resolve_res = NULL;
+
+ base_res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC,
+ scope_domain, NULL);
+ grn_table_select(ctx, scope_domain, sub_filter, base_res, GRN_OP_OR);
+ if (scope->header.type == GRN_ACCESSOR) {
+ rc = grn_accessor_resolve(ctx, scope, -1, base_res, &resolve_res, NULL);
+ } else {
+ grn_accessor accessor;
+ accessor.header.type = GRN_ACCESSOR;
+ accessor.obj = scope;
+ accessor.action = GRN_ACCESSOR_GET_COLUMN_VALUE;
+ accessor.next = NULL;
+ rc = grn_accessor_resolve(ctx, (grn_obj *)&accessor, -1, base_res,
+ &resolve_res, NULL);
+ }
+ if (resolve_res) {
+ rc = grn_table_setoperation(ctx, res, resolve_res, res, op);
+ grn_obj_unlink(ctx, resolve_res);
+ }
+ grn_obj_unlink(ctx, base_res);
+ }
+
+exit:
+ if (scope_domain) {
+ grn_obj_unlink(ctx, scope_domain);
+ }
+ if (sub_filter) {
+ grn_obj_unlink(ctx, sub_filter);
+ }
+
+ return rc;
+}
+
+static grn_obj *
+func_sub_filter(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ selector_to_function_data data;
+
+ if (selector_to_function_data_init(ctx, &data, user_data)) {
+ grn_rc rc;
+ rc = run_sub_filter(ctx, data.table, nargs, args, data.records, GRN_OP_AND);
+ if (rc == GRN_SUCCESS) {
+ selector_to_function_data_selected(ctx, &data);
+ }
+ }
+ selector_to_function_data_fin(ctx, &data);
+
+ return data.found;
+}
+
+static grn_rc
+selector_sub_filter(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ return run_sub_filter(ctx, table, nargs - 1, args + 1, res, op);
+}
+
+static grn_obj *
+func_html_untag(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *html_arg;
+ int html_arg_domain;
+ grn_obj html;
+ grn_obj *text;
+ const char *html_raw;
+ int i, length;
+ grn_bool in_tag = GRN_FALSE;
+
+ if (nargs != 1) {
+ ERR(GRN_INVALID_ARGUMENT, "HTML is missing");
+ return NULL;
+ }
+
+ html_arg = args[0];
+ html_arg_domain = html_arg->header.domain;
+ switch (html_arg_domain) {
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ GRN_VALUE_VAR_SIZE_INIT(&html, GRN_OBJ_DO_SHALLOW_COPY, html_arg_domain);
+ GRN_TEXT_SET(ctx, &html, GRN_TEXT_VALUE(html_arg), GRN_TEXT_LEN(html_arg));
+ break;
+ default :
+ GRN_TEXT_INIT(&html, 0);
+ if (grn_obj_cast(ctx, html_arg, &html, GRN_FALSE)) {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, html_arg);
+ ERR(GRN_INVALID_ARGUMENT, "failed to cast to text: <%.*s>",
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ GRN_OBJ_FIN(ctx, &html);
+ return NULL;
+ }
+ break;
+ }
+
+ text = GRN_PROC_ALLOC(html.header.domain, 0);
+ if (!text) {
+ GRN_OBJ_FIN(ctx, &html);
+ return NULL;
+ }
+
+ html_raw = GRN_TEXT_VALUE(&html);
+ length = GRN_TEXT_LEN(&html);
+ for (i = 0; i < length; i++) {
+ switch (html_raw[i]) {
+ case '<' :
+ in_tag = GRN_TRUE;
+ break;
+ case '>' :
+ if (in_tag) {
+ in_tag = GRN_FALSE;
+ } else {
+ GRN_TEXT_PUTC(ctx, text, html_raw[i]);
+ }
+ break;
+ default :
+ if (!in_tag) {
+ GRN_TEXT_PUTC(ctx, text, html_raw[i]);
+ }
+ break;
+ }
+ }
+
+ GRN_OBJ_FIN(ctx, &html);
+
+ return text;
+}
+
+static grn_bool
+grn_text_equal_cstr(grn_ctx *ctx, grn_obj *text, const char *cstr)
+{
+ int cstr_len;
+
+ cstr_len = strlen(cstr);
+ return (GRN_TEXT_LEN(text) == cstr_len &&
+ strncmp(GRN_TEXT_VALUE(text), cstr, cstr_len) == 0);
+}
+
+typedef enum {
+ BETWEEN_BORDER_INVALID,
+ BETWEEN_BORDER_INCLUDE,
+ BETWEEN_BORDER_EXCLUDE
+} between_border_type;
+
+typedef struct {
+ grn_obj *value;
+ grn_obj *min;
+ between_border_type min_border_type;
+ grn_obj *max;
+ between_border_type max_border_type;
+} between_data;
+
+static between_border_type
+between_parse_border(grn_ctx *ctx, grn_obj *border,
+ const char *argument_description)
+{
+ grn_obj inspected;
+
+ /* TODO: support other text types */
+ if (border->header.domain == GRN_DB_TEXT) {
+ if (grn_text_equal_cstr(ctx, border, "include")) {
+ return BETWEEN_BORDER_INCLUDE;
+ } else if (grn_text_equal_cstr(ctx, border, "exclude")) {
+ return BETWEEN_BORDER_EXCLUDE;
+ }
+ }
+
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, border);
+ ERR(GRN_INVALID_ARGUMENT,
+ "between(): %s must be \"include\" or \"exclude\": <%.*s>",
+ argument_description,
+ (int)GRN_TEXT_LEN(&inspected),
+ GRN_TEXT_VALUE(&inspected));
+ grn_obj_unlink(ctx, &inspected);
+
+ return BETWEEN_BORDER_INVALID;
+}
+
+static grn_rc
+between_parse_args(grn_ctx *ctx, int nargs, grn_obj **args, between_data *data)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *min_border;
+ grn_obj *max_border;
+
+ if (nargs != 5) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "between(): wrong number of arguments (%d for 5)", nargs);
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ data->value = args[0];
+ data->min = args[1];
+ min_border = args[2];
+ data->max = args[3];
+ max_border = args[4];
+
+ data->min_border_type =
+ between_parse_border(ctx, min_border, "the 3rd argument (min_border)");
+ if (data->min_border_type == BETWEEN_BORDER_INVALID) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ data->max_border_type =
+ between_parse_border(ctx, max_border, "the 5th argument (max_border)");
+ if (data->max_border_type == BETWEEN_BORDER_INVALID) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+exit :
+ return rc;
+}
+
+static grn_rc
+between_cast(grn_ctx *ctx, grn_obj *source, grn_obj *destination, grn_id domain,
+ const char *target_argument_name)
+{
+ grn_rc rc;
+
+ GRN_OBJ_INIT(destination, GRN_BULK, 0, domain);
+ rc = grn_obj_cast(ctx, source, destination, GRN_FALSE);
+ if (rc != GRN_SUCCESS) {
+ grn_obj inspected_source;
+ grn_obj *domain_object;
+ char domain_name[GRN_TABLE_MAX_KEY_SIZE];
+ int domain_name_length;
+
+ GRN_TEXT_INIT(&inspected_source, 0);
+ grn_inspect(ctx, &inspected_source, source);
+
+ domain_object = grn_ctx_at(ctx, domain);
+ domain_name_length =
+ grn_obj_name(ctx, domain_object, domain_name, GRN_TABLE_MAX_KEY_SIZE);
+
+ ERR(rc, "between(): failed to cast %s: <%.*s> -> <%.*s>",
+ target_argument_name,
+ (int)GRN_TEXT_LEN(&inspected_source),
+ GRN_TEXT_VALUE(&inspected_source),
+ domain_name_length,
+ domain_name);
+
+ grn_obj_unlink(ctx, &inspected_source);
+ grn_obj_unlink(ctx, domain_object);
+ }
+
+ return rc;
+}
+
+static grn_obj *
+func_between(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_obj *found;
+ between_data data;
+ grn_obj *condition = NULL;
+ grn_obj *variable;
+ grn_obj *table;
+ grn_obj *between_expr;
+ grn_obj *between_variable;
+ grn_obj *result;
+
+ found = GRN_PROC_ALLOC(GRN_DB_BOOL, 0);
+ if (!found) {
+ return NULL;
+ }
+ GRN_BOOL_SET(ctx, found, GRN_FALSE);
+
+ grn_proc_get_info(ctx, user_data, NULL, NULL, &condition);
+ if (!condition) {
+ return found;
+ }
+
+ variable = grn_expr_get_var_by_offset(ctx, condition, 0);
+ if (!variable) {
+ return found;
+ }
+
+ rc = between_parse_args(ctx, nargs, args, &data);
+ if (rc != GRN_SUCCESS) {
+ return found;
+ }
+
+ table = grn_ctx_at(ctx, variable->header.domain);
+ if (!table) {
+ return found;
+ }
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, between_expr, between_variable);
+ if (!between_expr) {
+ grn_obj_unlink(ctx, table);
+ return found;
+ }
+
+ grn_expr_append_obj(ctx, between_expr, data.value, GRN_OP_PUSH, 1);
+ grn_expr_append_obj(ctx, between_expr, data.min, GRN_OP_PUSH, 1);
+ if (data.min_border_type == BETWEEN_BORDER_INCLUDE) {
+ grn_expr_append_op(ctx, between_expr, GRN_OP_GREATER_EQUAL, 2);
+ } else {
+ grn_expr_append_op(ctx, between_expr, GRN_OP_GREATER, 2);
+ }
+
+ grn_expr_append_obj(ctx, between_expr, data.value, GRN_OP_PUSH, 1);
+ grn_expr_append_obj(ctx, between_expr, data.max, GRN_OP_PUSH, 1);
+ if (data.max_border_type == BETWEEN_BORDER_INCLUDE) {
+ grn_expr_append_op(ctx, between_expr, GRN_OP_LESS_EQUAL, 2);
+ } else {
+ grn_expr_append_op(ctx, between_expr, GRN_OP_LESS, 2);
+ }
+
+ grn_expr_append_op(ctx, between_expr, GRN_OP_AND, 2);
+
+ GRN_RECORD_SET(ctx, between_variable, GRN_RECORD_VALUE(variable));
+ result = grn_expr_exec(ctx, between_expr, 0);
+ if (result && GRN_UINT32_VALUE(result) > 0) {
+ GRN_BOOL_SET(ctx, found, GRN_TRUE);
+ }
+
+ grn_obj_unlink(ctx, between_expr);
+ grn_obj_unlink(ctx, table);
+
+ return found;
+}
+
+static grn_rc
+selector_between(grn_ctx *ctx, grn_obj *table, grn_obj *index,
+ int nargs, grn_obj **args,
+ grn_obj *res, grn_operator op)
+{
+ grn_rc rc = GRN_SUCCESS;
+ int offset = 0;
+ int limit = -1;
+ int flags = GRN_CURSOR_ASCENDING | GRN_CURSOR_BY_KEY;
+ between_data data;
+ grn_obj casted_min, casted_max;
+ grn_obj *used_min = NULL;
+ grn_obj *used_max = NULL;
+ grn_obj *index_table = NULL;
+ grn_table_cursor *cursor;
+ grn_id id;
+
+ if (!index) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ rc = between_parse_args(ctx, nargs - 1, args + 1, &data);
+ if (rc != GRN_SUCCESS) {
+ return rc;
+ }
+
+ if (data.min_border_type == BETWEEN_BORDER_EXCLUDE) {
+ flags |= GRN_CURSOR_GT;
+ }
+ if (data.max_border_type == BETWEEN_BORDER_EXCLUDE) {
+ flags |= GRN_CURSOR_LT;
+ }
+
+ index_table = grn_ctx_at(ctx, index->header.domain);
+ if (data.min->header.domain == index_table->header.domain) {
+ used_min = data.min;
+ } else {
+ used_min = &casted_min;
+ rc = between_cast(ctx, data.min, &casted_min, index_table->header.domain,
+ "min");
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ }
+ if (data.max->header.domain == index_table->header.domain) {
+ used_max = data.max;
+ } else {
+ used_max = &casted_max;
+ rc = between_cast(ctx, data.max, &casted_max, index_table->header.domain,
+ "max");
+ if (rc != GRN_SUCCESS) {
+ goto exit;
+ }
+ }
+ cursor = grn_table_cursor_open(ctx, index_table,
+ GRN_BULK_HEAD(used_min),
+ GRN_BULK_VSIZE(used_min),
+ GRN_BULK_HEAD(used_max),
+ GRN_BULK_VSIZE(used_max),
+ offset, limit, flags);
+ if (!cursor) {
+ rc = ctx->rc;
+ goto exit;
+ }
+
+ while ((id = grn_table_cursor_next(ctx, cursor))) {
+ grn_ii_at(ctx, (grn_ii *)index, id, (grn_hash *)res, op);
+ }
+ grn_ii_resolve_sel_and(ctx, (grn_hash *)res, op);
+ grn_table_cursor_close(ctx, cursor);
+
+exit :
+ if (used_min == &casted_min) {
+ grn_obj_unlink(ctx, &casted_min);
+ }
+ if (used_max == &casted_max) {
+ grn_obj_unlink(ctx, &casted_max);
+ }
+ if (index_table) {
+ grn_obj_unlink(ctx, index_table);
+ }
+
+ return rc;
+}
+
+static void
+grn_pat_tag_keys_put_original_text(grn_ctx *ctx, grn_obj *output,
+ const char *text, unsigned int length,
+ grn_bool use_html_escape)
+{
+ if (use_html_escape) {
+ grn_text_escape_xml(ctx, output, text, length);
+ } else {
+ GRN_TEXT_PUT(ctx, output, text, length);
+ }
+}
+
+static grn_rc
+grn_pat_tag_keys(grn_ctx *ctx, grn_obj *keywords,
+ const char *string, unsigned int string_length,
+ const char **open_tags, unsigned int *open_tag_lengths,
+ const char **close_tags, unsigned int *close_tag_lengths,
+ unsigned int n_tags,
+ grn_obj *highlighted,
+ grn_bool use_html_escape)
+{
+ while (string_length > 0) {
+#define MAX_N_HITS 1024
+ grn_pat_scan_hit hits[MAX_N_HITS];
+ const char *rest;
+ unsigned int i, n_hits;
+ unsigned int previous = 0;
+
+ n_hits = grn_pat_scan(ctx, (grn_pat *)keywords,
+ string, string_length,
+ hits, MAX_N_HITS, &rest);
+ for (i = 0; i < n_hits; i++) {
+ unsigned int nth_tag;
+ if (hits[i].offset - previous > 0) {
+ grn_pat_tag_keys_put_original_text(ctx,
+ highlighted,
+ string + previous,
+ hits[i].offset - previous,
+ use_html_escape);
+ }
+ nth_tag = ((hits[i].id - 1) % n_tags);
+ GRN_TEXT_PUT(ctx, highlighted,
+ open_tags[nth_tag], open_tag_lengths[nth_tag]);
+ grn_pat_tag_keys_put_original_text(ctx,
+ highlighted,
+ string + hits[i].offset,
+ hits[i].length,
+ use_html_escape);
+ GRN_TEXT_PUT(ctx, highlighted,
+ close_tags[nth_tag], close_tag_lengths[nth_tag]);
+ previous = hits[i].offset + hits[i].length;
+ }
+ if (string_length - previous > 0) {
+ grn_pat_tag_keys_put_original_text(ctx,
+ highlighted,
+ string + previous,
+ string_length - previous,
+ use_html_escape);
+ }
+ string_length -= rest - string;
+ string = rest;
+#undef MAX_N_HITS
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_obj *
+func_highlight_html(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *highlighted = NULL;
+
+#define N_REQUIRED_ARGS 1
+ if (nargs == N_REQUIRED_ARGS) {
+ grn_obj *string = args[0];
+ grn_obj *expression = NULL;
+ grn_obj *condition_ptr = NULL;
+ grn_obj *condition = NULL;
+ grn_bool use_html_escape = GRN_TRUE;
+ unsigned int n_keyword_sets = 1;
+ const char *open_tags[1];
+ unsigned int open_tag_lengths[1];
+ const char *close_tags[1];
+ unsigned int close_tag_lengths[1];
+ grn_obj *keywords;
+
+ open_tags[0] = "<span class=\"keyword\">";
+ open_tag_lengths[0] = strlen("<span class=\"keyword\">");
+ close_tags[0] = "</span>";
+ close_tag_lengths[0] = strlen("</span>");
+
+ keywords = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_PAT_KEY,
+ grn_ctx_at(ctx, GRN_DB_SHORT_TEXT),
+ NULL);
+ {
+ grn_obj *normalizer;
+ normalizer = grn_ctx_get(ctx, "NormalizerAuto", -1);
+ grn_obj_set_info(ctx, keywords, GRN_INFO_NORMALIZER, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+
+ grn_proc_get_info(ctx, user_data, NULL, NULL, &expression);
+ condition_ptr = grn_expr_get_var(ctx, expression,
+ GRN_SELECT_INTERNAL_VAR_CONDITION,
+ strlen(GRN_SELECT_INTERNAL_VAR_CONDITION));
+ if (condition_ptr) {
+ condition = GRN_PTR_VALUE(condition_ptr);
+ }
+
+ if (condition) {
+ grn_obj current_keywords;
+ GRN_PTR_INIT(&current_keywords, GRN_OBJ_VECTOR, GRN_ID_NIL);
+ grn_expr_get_keywords(ctx, condition, &current_keywords);
+
+ for (;;) {
+ grn_obj *keyword;
+ GRN_PTR_POP(&current_keywords, keyword);
+ if (!keyword) { break; }
+ grn_table_add(ctx, keywords,
+ GRN_TEXT_VALUE(keyword),
+ GRN_TEXT_LEN(keyword),
+ NULL);
+ }
+ grn_obj_unlink(ctx, &current_keywords);
+ }
+
+ highlighted = GRN_PROC_ALLOC(GRN_DB_TEXT, 0);
+ grn_pat_tag_keys(ctx, keywords,
+ GRN_TEXT_VALUE(string), GRN_TEXT_LEN(string),
+ open_tags,
+ open_tag_lengths,
+ close_tags,
+ close_tag_lengths,
+ n_keyword_sets,
+ highlighted,
+ use_html_escape);
+
+ grn_obj_unlink(ctx, keywords);
+ }
+#undef N_REQUIRED_ARGS
+
+ if (!highlighted) {
+ highlighted = GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ }
+
+ return highlighted;
+}
+
+static grn_obj *
+func_highlight_full(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *highlighted = NULL;
+
+#define N_REQUIRED_ARGS 3
+#define KEYWORD_SET_SIZE 3
+ if (nargs >= (N_REQUIRED_ARGS + KEYWORD_SET_SIZE) &&
+ (nargs - N_REQUIRED_ARGS) % KEYWORD_SET_SIZE == 0) {
+ grn_obj *string = args[0];
+ grn_obj *normalizer_name = args[1];
+ grn_obj *use_html_escape = args[2];
+ grn_obj **keyword_set_args = args + N_REQUIRED_ARGS;
+ unsigned int n_keyword_sets = (nargs - N_REQUIRED_ARGS) / KEYWORD_SET_SIZE;
+ unsigned int i;
+ grn_obj open_tags;
+ grn_obj open_tag_lengths;
+ grn_obj close_tags;
+ grn_obj close_tag_lengths;
+ grn_obj *keywords;
+
+ keywords = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_PAT_KEY,
+ grn_ctx_at(ctx, GRN_DB_SHORT_TEXT),
+ NULL);
+
+ if (GRN_TEXT_LEN(normalizer_name)) {
+ grn_obj *normalizer;
+ normalizer = grn_ctx_get(ctx,
+ GRN_TEXT_VALUE(normalizer_name),
+ GRN_TEXT_LEN(normalizer_name));
+ if (!is_normalizer(ctx, normalizer)) {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, normalizer);
+ ERR(GRN_INVALID_ARGUMENT,
+ "[highlight_full] not normalizer: %.*s",
+ (int)GRN_TEXT_LEN(&inspected),
+ GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ grn_obj_unlink(ctx, normalizer);
+ grn_obj_unlink(ctx, keywords);
+ return NULL;
+ }
+ grn_obj_set_info(ctx, keywords, GRN_INFO_NORMALIZER, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ }
+
+ GRN_OBJ_INIT(&open_tags, GRN_BULK, 0, GRN_DB_VOID);
+ GRN_OBJ_INIT(&open_tag_lengths, GRN_BULK, 0, GRN_DB_VOID);
+ GRN_OBJ_INIT(&close_tags, GRN_BULK, 0, GRN_DB_VOID);
+ GRN_OBJ_INIT(&close_tag_lengths, GRN_BULK, 0, GRN_DB_VOID);
+ for (i = 0; i < n_keyword_sets; i++) {
+ grn_obj *keyword = keyword_set_args[i * KEYWORD_SET_SIZE + 0];
+ grn_obj *open_tag = keyword_set_args[i * KEYWORD_SET_SIZE + 1];
+ grn_obj *close_tag = keyword_set_args[i * KEYWORD_SET_SIZE + 2];
+
+ grn_table_add(ctx, keywords,
+ GRN_TEXT_VALUE(keyword),
+ GRN_TEXT_LEN(keyword),
+ NULL);
+
+ {
+ const char *open_tag_content = GRN_TEXT_VALUE(open_tag);
+ grn_bulk_write(ctx, &open_tags,
+ (const char *)(&open_tag_content),
+ sizeof(char *));
+ }
+ {
+ unsigned int open_tag_length = GRN_TEXT_LEN(open_tag);
+ grn_bulk_write(ctx, &open_tag_lengths,
+ (const char *)(&open_tag_length),
+ sizeof(unsigned int));
+ }
+ {
+ const char *close_tag_content = GRN_TEXT_VALUE(close_tag);
+ grn_bulk_write(ctx, &close_tags,
+ (const char *)(&close_tag_content),
+ sizeof(char *));
+ }
+ {
+ unsigned int close_tag_length = GRN_TEXT_LEN(close_tag);
+ grn_bulk_write(ctx, &close_tag_lengths,
+ (const char *)(&close_tag_length),
+ sizeof(unsigned int));
+ }
+ }
+
+ highlighted = GRN_PROC_ALLOC(GRN_DB_TEXT, 0);
+ grn_pat_tag_keys(ctx, keywords,
+ GRN_TEXT_VALUE(string), GRN_TEXT_LEN(string),
+ (const char **)GRN_BULK_HEAD(&open_tags),
+ (unsigned int *)GRN_BULK_HEAD(&open_tag_lengths),
+ (const char **)GRN_BULK_HEAD(&close_tags),
+ (unsigned int *)GRN_BULK_HEAD(&close_tag_lengths),
+ n_keyword_sets,
+ highlighted,
+ GRN_BOOL_VALUE(use_html_escape));
+
+ grn_obj_unlink(ctx, keywords);
+ grn_obj_unlink(ctx, &open_tags);
+ grn_obj_unlink(ctx, &open_tag_lengths);
+ grn_obj_unlink(ctx, &close_tags);
+ grn_obj_unlink(ctx, &close_tag_lengths);
+ }
+#undef N_REQUIRED_ARGS
+#undef KEYWORD_SET_SIZE
+
+ if (!highlighted) {
+ highlighted = GRN_PROC_ALLOC(GRN_DB_VOID, 0);
+ }
+
+ return highlighted;
+}
+
+#define DEF_VAR(v,name_str) do {\
+ (v).name = (name_str);\
+ (v).name_size = GRN_STRLEN(name_str);\
+ GRN_TEXT_INIT(&(v).value, 0);\
+} while (0)
+
+#define DEF_COMMAND(name, func, nvars, vars)\
+ (grn_proc_create(ctx, (name), (sizeof(name) - 1),\
+ GRN_PROC_COMMAND, (func), NULL, NULL, (nvars), (vars)))
+
+void
+grn_db_init_builtin_query(grn_ctx *ctx)
+{
+ grn_expr_var vars[21];
+
+ DEF_VAR(vars[0], "name");
+ DEF_VAR(vars[1], "table");
+ DEF_VAR(vars[2], "match_columns");
+ DEF_VAR(vars[3], "query");
+ DEF_VAR(vars[4], "filter");
+ DEF_VAR(vars[5], "scorer");
+ DEF_VAR(vars[6], "sortby");
+ DEF_VAR(vars[7], "output_columns");
+ DEF_VAR(vars[8], "offset");
+ DEF_VAR(vars[9], "limit");
+ DEF_VAR(vars[10], "drilldown");
+ DEF_VAR(vars[11], "drilldown_sortby");
+ DEF_VAR(vars[12], "drilldown_output_columns");
+ DEF_VAR(vars[13], "drilldown_offset");
+ DEF_VAR(vars[14], "drilldown_limit");
+ DEF_VAR(vars[15], "cache");
+ DEF_VAR(vars[16], "match_escalation_threshold");
+ /* Deprecated. Use query_expander instead. */
+ DEF_VAR(vars[17], "query_expansion");
+ DEF_VAR(vars[18], "query_flags");
+ DEF_VAR(vars[19], "query_expander");
+ DEF_VAR(vars[20], "adjuster");
+ DEF_COMMAND("define_selector", proc_define_selector, 21, vars);
+ DEF_COMMAND("select", proc_select, 20, vars + 1);
+
+ DEF_VAR(vars[0], "values");
+ DEF_VAR(vars[1], "table");
+ DEF_VAR(vars[2], "columns");
+ DEF_VAR(vars[3], "ifexists");
+ DEF_VAR(vars[4], "input_type");
+ DEF_VAR(vars[5], "each");
+ DEF_COMMAND("load", proc_load, 6, vars);
+
+ DEF_COMMAND("status", proc_status, 0, vars);
+
+ DEF_COMMAND("table_list", proc_table_list, 0, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_COMMAND("column_list", proc_column_list, 1, vars);
+
+ DEF_VAR(vars[0], "name");
+ DEF_VAR(vars[1], "flags");
+ DEF_VAR(vars[2], "key_type");
+ DEF_VAR(vars[3], "value_type");
+ DEF_VAR(vars[4], "default_tokenizer");
+ DEF_VAR(vars[5], "normalizer");
+ DEF_VAR(vars[6], "token_filters");
+ DEF_COMMAND("table_create", proc_table_create, 7, vars);
+
+ DEF_VAR(vars[0], "name");
+ DEF_COMMAND("table_remove", proc_table_remove, 1, vars);
+
+ DEF_VAR(vars[0], "name");
+ DEF_VAR(vars[1], "new_name");
+ DEF_COMMAND("table_rename", proc_table_rename, 2, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_VAR(vars[1], "name");
+ DEF_VAR(vars[2], "flags");
+ DEF_VAR(vars[3], "type");
+ DEF_VAR(vars[4], "source");
+ DEF_COMMAND("column_create", proc_column_create, 5, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_VAR(vars[1], "name");
+ DEF_COMMAND("column_remove", proc_column_remove, 2, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_VAR(vars[1], "name");
+ DEF_VAR(vars[2], "new_name");
+ DEF_COMMAND("column_rename", proc_column_rename, 3, vars);
+
+ DEF_VAR(vars[0], "path");
+ DEF_COMMAND(GRN_EXPR_MISSING_NAME, proc_missing, 1, vars);
+
+ DEF_COMMAND("quit", proc_quit, 0, vars);
+
+ DEF_COMMAND("shutdown", proc_shutdown, 0, vars);
+
+ DEF_VAR(vars[0], "target_name");
+ DEF_COMMAND("clearlock", proc_clearlock, 1, vars);
+
+ DEF_VAR(vars[0], "target_name");
+ DEF_VAR(vars[1], "threshold");
+ DEF_COMMAND("defrag", proc_defrag, 2, vars);
+
+ DEF_VAR(vars[0], "level");
+ DEF_COMMAND("log_level", proc_log_level, 1, vars);
+
+ DEF_VAR(vars[0], "level");
+ DEF_VAR(vars[1], "message");
+ DEF_COMMAND("log_put", proc_log_put, 2, vars);
+
+ DEF_COMMAND("log_reopen", proc_log_reopen, 0, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_VAR(vars[1], "key");
+ DEF_VAR(vars[2], "id");
+ DEF_VAR(vars[3], "filter");
+ DEF_COMMAND("delete", proc_delete, 4, vars);
+
+ DEF_VAR(vars[0], "max");
+ DEF_COMMAND("cache_limit", proc_cache_limit, 1, vars);
+
+ DEF_VAR(vars[0], "tables");
+ DEF_COMMAND("dump", proc_dump, 1, vars);
+
+ DEF_VAR(vars[0], "path");
+ DEF_COMMAND("register", proc_register, 1, vars);
+
+ DEF_VAR(vars[0], "obj");
+ DEF_COMMAND("check", proc_check, 1, vars);
+
+ DEF_VAR(vars[0], "table");
+ DEF_COMMAND("truncate", proc_truncate, 1, vars);
+
+ DEF_VAR(vars[0], "normalizer");
+ DEF_VAR(vars[1], "string");
+ DEF_VAR(vars[2], "flags");
+ DEF_COMMAND("normalize", proc_normalize, 3, vars);
+
+ DEF_VAR(vars[0], "tokenizer");
+ DEF_VAR(vars[1], "string");
+ DEF_VAR(vars[2], "normalizer");
+ DEF_VAR(vars[3], "flags");
+ DEF_VAR(vars[4], "mode");
+ DEF_COMMAND("tokenize", proc_tokenize, 5, vars);
+
+ DEF_COMMAND("tokenizer_list", proc_tokenizer_list, 0, vars);
+
+ DEF_COMMAND("normalizer_list", proc_normalizer_list, 0, vars);
+
+ DEF_VAR(vars[0], "seed");
+ grn_proc_create(ctx, "rand", -1, GRN_PROC_FUNCTION, func_rand,
+ NULL, NULL, 0, vars);
+
+ grn_proc_create(ctx, "now", -1, GRN_PROC_FUNCTION, func_now,
+ NULL, NULL, 0, vars);
+
+ grn_proc_create(ctx, "max", -1, GRN_PROC_FUNCTION, func_max,
+ NULL, NULL, 0, vars);
+ grn_proc_create(ctx, "min", -1, GRN_PROC_FUNCTION, func_min,
+ NULL, NULL, 0, vars);
+
+ {
+ grn_obj *selector_proc;
+
+ selector_proc = grn_proc_create(ctx, "geo_in_circle", -1, GRN_PROC_FUNCTION,
+ func_geo_in_circle, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, grn_selector_geo_in_circle);
+
+ selector_proc = grn_proc_create(ctx, "geo_in_rectangle", -1,
+ GRN_PROC_FUNCTION,
+ func_geo_in_rectangle, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, grn_selector_geo_in_rectangle);
+ }
+
+ grn_proc_create(ctx, "geo_distance", -1, GRN_PROC_FUNCTION,
+ func_geo_distance, NULL, NULL, 0, NULL);
+
+ /* deprecated. */
+ grn_proc_create(ctx, "geo_distance2", -1, GRN_PROC_FUNCTION,
+ func_geo_distance2, NULL, NULL, 0, NULL);
+
+ /* deprecated. */
+ grn_proc_create(ctx, "geo_distance3", -1, GRN_PROC_FUNCTION,
+ func_geo_distance3, NULL, NULL, 0, NULL);
+
+ grn_proc_create(ctx, "edit_distance", -1, GRN_PROC_FUNCTION,
+ func_edit_distance, NULL, NULL, 0, NULL);
+
+ {
+ grn_obj *selector_proc;
+
+ selector_proc = grn_proc_create(ctx, "all_records", -1, GRN_PROC_FUNCTION,
+ func_all_records, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, selector_all_records);
+ }
+
+ /* experimental */
+ grn_proc_create(ctx, "snippet_html", -1, GRN_PROC_FUNCTION,
+ func_snippet_html, NULL, NULL, 0, NULL);
+
+ {
+ grn_obj *selector_proc;
+
+ selector_proc = grn_proc_create(ctx, "query", -1, GRN_PROC_FUNCTION,
+ func_query, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, selector_query);
+ }
+
+ {
+ grn_obj *selector_proc;
+
+ selector_proc = grn_proc_create(ctx, "sub_filter", -1, GRN_PROC_FUNCTION,
+ func_sub_filter, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, selector_sub_filter);
+ }
+
+ grn_proc_create(ctx, "html_untag", -1, GRN_PROC_FUNCTION,
+ func_html_untag, NULL, NULL, 0, NULL);
+
+ {
+ grn_obj *selector_proc;
+
+ selector_proc = grn_proc_create(ctx, "between", -1, GRN_PROC_FUNCTION,
+ func_between, NULL, NULL, 0, NULL);
+ grn_proc_set_selector(ctx, selector_proc, selector_between);
+ }
+
+ grn_proc_create(ctx, "highlight_html", -1, GRN_PROC_FUNCTION,
+ func_highlight_html, NULL, NULL, 0, NULL);
+
+ grn_proc_create(ctx, "highlight_full", -1, GRN_PROC_FUNCTION,
+ func_highlight_full, NULL, NULL, 0, NULL);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/proc.h b/storage/mroonga/vendor/groonga/lib/proc.h
new file mode 100644
index 00000000000..1f7f81d5d97
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/proc.h
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_PROC_H
+#define GRN_PROC_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GRN_VAR const char *grn_document_root;
+void grn_db_init_builtin_query(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_PROC_H */
diff --git a/storage/mroonga/vendor/groonga/lib/snip.c b/storage/mroonga/vendor/groonga/lib/snip.c
new file mode 100644
index 00000000000..78c6ef54387
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/snip.c
@@ -0,0 +1,838 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <string.h>
+#include <stddef.h>
+#include "snip.h"
+#include "ctx.h"
+
+#if !defined MAX
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#endif
+
+#if !defined MIN
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+static int
+grn_bm_check_euc(const unsigned char *x, const size_t y)
+{
+ const unsigned char *p;
+ for (p = x + y - 1; p >= x && *p >= 0x80U; p--);
+ return (int) ((x + y - p) & 1);
+}
+
+static int
+grn_bm_check_sjis(const unsigned char *x, const size_t y)
+{
+ const unsigned char *p;
+ for (p = x + y - 1; p >= x; p--)
+ if ((*p < 0x81U) || (*p > 0x9fU && *p < 0xe0U) || (*p > 0xfcU))
+ break;
+ return (int) ((x + y - p) & 1);
+}
+
+/*
+static void
+grn_bm_suffixes(const unsigned char *x, size_t m, size_t *suff)
+{
+ size_t f, g;
+ intptr_t i;
+ f = 0;
+ suff[m - 1] = m;
+ g = m - 1;
+ for (i = m - 2; i >= 0; --i) {
+ if (i > (intptr_t) g && suff[i + m - 1 - f] < i - g)
+ suff[i] = suff[i + m - 1 - f];
+ else {
+ if (i < (intptr_t) g)
+ g = i;
+ f = i;
+ while (g > 0 && x[g] == x[g + m - 1 - f])
+ --g;
+ suff[i] = f - g;
+ }
+ }
+}
+*/
+
+static void
+grn_bm_preBmBc(const unsigned char *x, size_t m, size_t *bmBc)
+{
+ size_t i;
+ for (i = 0; i < ASIZE; ++i) {
+ bmBc[i] = m;
+ }
+ for (i = 0; i < m - 1; ++i) {
+ bmBc[(unsigned int) x[i]] = m - (i + 1);
+ }
+}
+
+#define GRN_BM_COMPARE do { \
+ if (string_checks[found]) { \
+ size_t offset = cond->last_offset, found_alpha_head = cond->found_alpha_head; \
+ /* calc real offset */\
+ for (i = cond->last_found; i < found; i++) { \
+ if (string_checks[i] > 0) { \
+ found_alpha_head = i; \
+ offset += string_checks[i]; \
+ } \
+ } \
+ /* if real offset is in a character, move it the head of the character */ \
+ if (string_checks[found] < 0) { \
+ offset -= string_checks[found_alpha_head]; \
+ cond->last_found = found_alpha_head; \
+ } else { \
+ cond->last_found = found; \
+ } \
+ cond->start_offset = cond->last_offset = offset; \
+ if (flags & GRN_SNIP_SKIP_LEADING_SPACES) { \
+ while (cond->start_offset < string_original_length_in_bytes && \
+ (i = grn_isspace(string_original + cond->start_offset, \
+ string_encoding))) { cond->start_offset += i; } \
+ } \
+ for (i = cond->last_found; i < found + m; i++) { \
+ if (string_checks[i] > 0) { \
+ offset += string_checks[i]; \
+ } \
+ } \
+ cond->end_offset = offset; \
+ cond->found = found + shift; \
+ cond->found_alpha_head = found_alpha_head; \
+ /* printf("bm: cond:%p found:%zd last_found:%zd st_off:%zd ed_off:%zd\n", cond, cond->found,cond->last_found,cond->start_offset,cond->end_offset); */ \
+ return; \
+ } \
+} while (0)
+
+#define GRN_BM_BM_COMPARE do { \
+ if (p[-2] == ck) { \
+ for (i = 3; i <= m && p[-(intptr_t)i] == cp[-(intptr_t)i]; ++i) { \
+ } \
+ if (i > m) { \
+ found = p - y - m; \
+ GRN_BM_COMPARE; \
+ } \
+ } \
+} while (0)
+
+void
+grn_bm_tunedbm(grn_ctx *ctx, snip_cond *cond, grn_obj *string, int flags)
+{
+ register unsigned char *limit, ck;
+ register const unsigned char *p, *cp;
+ register size_t *bmBc, delta1, i;
+
+ const unsigned char *x;
+ unsigned char *y;
+ size_t shift, found;
+
+ const char *string_original;
+ unsigned int string_original_length_in_bytes;
+ const short *string_checks;
+ grn_encoding string_encoding;
+ const char *string_norm, *keyword_norm;
+ unsigned int n, m;
+
+ grn_string_get_original(ctx, string,
+ &string_original, &string_original_length_in_bytes);
+ string_checks = grn_string_get_checks(ctx, string);
+ string_encoding = grn_string_get_encoding(ctx, string);
+ grn_string_get_normalized(ctx, string, &string_norm, &n, NULL);
+ grn_string_get_normalized(ctx, cond->keyword, &keyword_norm, &m, NULL);
+
+ y = (unsigned char *)string_norm;
+ if (m == 1) {
+ if (n > cond->found) {
+ shift = 1;
+ p = memchr(y + cond->found, keyword_norm[0], n - cond->found);
+ if (p != NULL) {
+ found = p - y;
+ GRN_BM_COMPARE;
+ }
+ }
+ cond->stopflag = SNIPCOND_STOP;
+ return;
+ }
+
+ x = (unsigned char *)keyword_norm;
+ bmBc = cond->bmBc;
+ shift = cond->shift;
+
+ /* Restart */
+ p = y + m + cond->found;
+ cp = x + m;
+ ck = cp[-2];
+
+ /* 12 means 1(initial offset) + 10 (in loop) + 1 (shift) */
+ if (n - cond->found > 12 * m) {
+ limit = y + n - 11 * m;
+ while (p <= limit) {
+ p += bmBc[p[-1]];
+ if(!(delta1 = bmBc[p[-1]])) {
+ goto check;
+ }
+ p += delta1;
+ p += bmBc[p[-1]];
+ p += bmBc[p[-1]];
+ if(!(delta1 = bmBc[p[-1]])) {
+ goto check;
+ }
+ p += delta1;
+ p += bmBc[p[-1]];
+ p += bmBc[p[-1]];
+ if(!(delta1 = bmBc[p[-1]])) {
+ goto check;
+ }
+ p += delta1;
+ p += bmBc[p[-1]];
+ p += bmBc[p[-1]];
+ continue;
+ check:
+ GRN_BM_BM_COMPARE;
+ p += shift;
+ }
+ }
+ /* limit check + search */
+ limit = y + n;
+ while(p <= limit) {
+ if (!(delta1 = bmBc[p[-1]])) {
+ GRN_BM_BM_COMPARE;
+ p += shift;
+ }
+ p += delta1;
+ }
+ cond->stopflag = SNIPCOND_STOP;
+}
+
+static size_t
+count_mapped_chars(const char *str, const char *end)
+{
+ const char *p;
+ size_t dl;
+
+ dl = 0;
+ for (p = str; p != end; p++) {
+ switch (*p) {
+ case '<':
+ case '>':
+ dl += 4; /* &lt; or &gt; */
+ break;
+ case '&':
+ dl += 5; /* &amp; */
+ break;
+ case '"':
+ dl += 6; /* &quot; */
+ break;
+ default:
+ dl++;
+ break;
+ }
+ }
+ return dl;
+}
+
+grn_rc
+grn_snip_cond_close(grn_ctx *ctx, snip_cond *cond)
+{
+ if (!cond) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (cond->keyword) {
+ grn_obj_close(ctx, cond->keyword);
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_snip_cond_init(grn_ctx *ctx, snip_cond *sc, const char *keyword, unsigned int keyword_len,
+ grn_encoding enc, grn_obj *normalizer, int flags)
+{
+ const char *norm;
+ unsigned int norm_blen;
+ int f = GRN_STR_REMOVEBLANK;
+ memset(sc, 0, sizeof(snip_cond));
+ if (!(sc->keyword = grn_string_open(ctx, keyword, keyword_len,
+ normalizer, f))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT,
+ "grn_string_open on snip_cond_init failed!");
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ grn_string_get_normalized(ctx, sc->keyword, &norm, &norm_blen, NULL);
+ if (!norm_blen) {
+ grn_snip_cond_close(ctx, sc);
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (norm_blen != 1) {
+ grn_bm_preBmBc((unsigned char *)norm, norm_blen, sc->bmBc);
+ sc->shift = sc->bmBc[(unsigned char)norm[norm_blen - 1]];
+ sc->bmBc[(unsigned char)norm[norm_blen - 1]] = 0;
+ }
+ return GRN_SUCCESS;
+}
+
+void
+grn_snip_cond_reinit(snip_cond *cond)
+{
+ cond->found = 0;
+ cond->last_found = 0;
+ cond->last_offset = 0;
+ cond->start_offset = 0;
+ cond->end_offset = 0;
+
+ cond->count = 0;
+ cond->stopflag = SNIPCOND_NONSTOP;
+}
+
+inline static char *
+grn_snip_strndup(grn_ctx *ctx, const char *string, unsigned int string_len)
+{
+ char *copied_string;
+
+ copied_string = GRN_MALLOC(string_len + 1);
+ if (!copied_string) {
+ return NULL;
+ }
+ memcpy(copied_string, string, string_len);
+ copied_string[string_len]= '\0'; /* not required, but for ql use */
+ return copied_string;
+}
+
+inline static grn_rc
+grn_snip_cond_set_tag(grn_ctx *ctx,
+ const char **dest_tag, size_t *dest_tag_len,
+ const char *tag, unsigned int tag_len,
+ const char *default_tag, unsigned int default_tag_len,
+ int copy_tag)
+{
+ if (tag) {
+ if (copy_tag) {
+ char *copied_tag;
+ copied_tag = grn_snip_strndup(ctx, tag, tag_len);
+ if (!copied_tag) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ *dest_tag = copied_tag;
+ } else {
+ *dest_tag = tag;
+ }
+ *dest_tag_len = tag_len;
+ } else {
+ *dest_tag = default_tag;
+ *dest_tag_len = default_tag_len;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_snip_set_normalizer(grn_ctx *ctx, grn_obj *snip,
+ grn_obj *normalizer)
+{
+ grn_snip *snip_;
+ if (!snip) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ snip_ = (grn_snip *)snip;
+ snip_->normalizer = normalizer;
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_snip_get_normalizer(grn_ctx *ctx, grn_obj *snip)
+{
+ grn_snip *snip_;
+
+ if (!snip) {
+ return NULL;
+ }
+
+ snip_ = (grn_snip *)snip;
+ return snip_->normalizer;
+}
+
+grn_rc
+grn_snip_add_cond(grn_ctx *ctx, grn_obj *snip,
+ const char *keyword, unsigned int keyword_len,
+ const char *opentag, unsigned int opentag_len,
+ const char *closetag, unsigned int closetag_len)
+{
+ grn_rc rc;
+ int copy_tag;
+ snip_cond *cond;
+ unsigned int norm_blen;
+ grn_snip *snip_;
+
+ snip_ = (grn_snip *)snip;
+ if (!snip_ || !keyword || !keyword_len || snip_->cond_len >= MAX_SNIP_COND_COUNT) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ cond = snip_->cond + snip_->cond_len;
+ if ((rc = grn_snip_cond_init(ctx, cond, keyword, keyword_len,
+ snip_->encoding, snip_->normalizer, snip_->flags))) {
+ return rc;
+ }
+ grn_string_get_normalized(ctx, cond->keyword, NULL, &norm_blen, NULL);
+ if (norm_blen > snip_->width) {
+ grn_snip_cond_close(ctx, cond);
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ copy_tag = snip_->flags & GRN_SNIP_COPY_TAG;
+ rc = grn_snip_cond_set_tag(ctx,
+ &(cond->opentag), &(cond->opentag_len),
+ opentag, opentag_len,
+ snip_->defaultopentag, snip_->defaultopentag_len,
+ copy_tag);
+ if (rc) {
+ grn_snip_cond_close(ctx, cond);
+ return rc;
+ }
+
+ rc = grn_snip_cond_set_tag(ctx,
+ &(cond->closetag), &(cond->closetag_len),
+ closetag, closetag_len,
+ snip_->defaultclosetag, snip_->defaultclosetag_len,
+ copy_tag);
+ if (rc) {
+ if (opentag && copy_tag) {
+ GRN_FREE((void *)cond->opentag);
+ }
+ grn_snip_cond_close(ctx, cond);
+ return rc;
+ }
+
+ snip_->cond_len++;
+ return GRN_SUCCESS;
+}
+
+static size_t
+grn_snip_find_firstbyte(const char *string, grn_encoding encoding, size_t offset,
+ size_t doffset)
+{
+ switch (encoding) {
+ case GRN_ENC_EUC_JP:
+ while (!(grn_bm_check_euc((unsigned char *) string, offset)))
+ offset += doffset;
+ break;
+ case GRN_ENC_SJIS:
+ if (!(grn_bm_check_sjis((unsigned char *) string, offset)))
+ offset += doffset;
+ break;
+ case GRN_ENC_UTF8:
+ while ((signed char)string[offset] <= (signed char)0xc0)
+ offset += doffset;
+ break;
+ default:
+ break;
+ }
+ return offset;
+}
+
+inline static grn_rc
+grn_snip_set_default_tag(grn_ctx *ctx,
+ const char **dest_tag, size_t *dest_tag_len,
+ const char *tag, unsigned int tag_len,
+ int copy_tag)
+{
+ if (copy_tag && tag) {
+ char *copied_tag;
+ copied_tag = grn_snip_strndup(ctx, tag, tag_len);
+ if (!copied_tag) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ *dest_tag = copied_tag;
+ } else {
+ *dest_tag = tag;
+ }
+ *dest_tag_len = tag_len;
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_snip_open(grn_ctx *ctx, int flags, unsigned int width,
+ unsigned int max_results,
+ const char *defaultopentag, unsigned int defaultopentag_len,
+ const char *defaultclosetag, unsigned int defaultclosetag_len,
+ grn_snip_mapping *mapping)
+{
+ int copy_tag;
+ grn_snip *ret = NULL;
+ if (!(ret = GRN_MALLOC(sizeof(grn_snip)))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_snip allocation failed on grn_snip_open");
+ return NULL;
+ }
+ if (max_results > MAX_SNIP_RESULT_COUNT || max_results == 0) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "max_results is invalid on grn_snip_open");
+ GRN_FREE(ret);
+ return NULL;
+ }
+ GRN_API_ENTER;
+ ret->encoding = ctx->encoding;
+ ret->flags = flags;
+ ret->width = width;
+ ret->max_results = max_results;
+ ret->defaultopentag = NULL;
+ ret->defaultclosetag = NULL;
+
+ copy_tag = flags & GRN_SNIP_COPY_TAG;
+ if (grn_snip_set_default_tag(ctx,
+ &(ret->defaultopentag),
+ &(ret->defaultopentag_len),
+ defaultopentag, defaultopentag_len,
+ copy_tag)) {
+ GRN_FREE(ret);
+ GRN_API_RETURN(NULL);
+ }
+
+ if (grn_snip_set_default_tag(ctx,
+ &(ret->defaultclosetag),
+ &(ret->defaultclosetag_len),
+ defaultclosetag, defaultclosetag_len,
+ copy_tag)) {
+ if (copy_tag && ret->defaultopentag) {
+ GRN_FREE((void *)ret->defaultopentag);
+ }
+ GRN_FREE(ret);
+ GRN_API_RETURN(NULL);
+ }
+
+ ret->cond_len = 0;
+ ret->mapping = mapping;
+ ret->nstr = NULL;
+ ret->tag_count = 0;
+ ret->snip_count = 0;
+ if (ret->flags & GRN_SNIP_NORMALIZE) {
+ ret->normalizer = GRN_NORMALIZER_AUTO;
+ } else {
+ ret->normalizer = NULL;
+ }
+
+ GRN_DB_OBJ_SET_TYPE(ret, GRN_SNIP);
+ {
+ grn_obj *db;
+ grn_id id;
+ db = grn_ctx_db(ctx);
+ id = grn_obj_register(ctx, db, NULL, 0);
+ DB_OBJ(ret)->header.domain = GRN_ID_NIL;
+ DB_OBJ(ret)->range = GRN_ID_NIL;
+ grn_db_obj_init(ctx, db, id, DB_OBJ(ret));
+ }
+
+ GRN_API_RETURN((grn_obj *)ret);
+}
+
+static grn_rc
+exec_clean(grn_ctx *ctx, grn_snip *snip)
+{
+ snip_cond *cond, *cond_end;
+ if (snip->nstr) {
+ grn_obj_close(ctx, snip->nstr);
+ snip->nstr = NULL;
+ }
+ snip->tag_count = 0;
+ snip->snip_count = 0;
+ for (cond = snip->cond, cond_end = cond + snip->cond_len;
+ cond < cond_end; cond++) {
+ grn_snip_cond_reinit(cond);
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_snip_close(grn_ctx *ctx, grn_snip *snip)
+{
+ snip_cond *cond, *cond_end;
+ if (!snip) { return GRN_INVALID_ARGUMENT; }
+ GRN_API_ENTER;
+ if (snip->flags & GRN_SNIP_COPY_TAG) {
+ int i;
+ snip_cond *sc;
+ const char *dot = snip->defaultopentag, *dct = snip->defaultclosetag;
+ for (i = snip->cond_len, sc = snip->cond; i; i--, sc++) {
+ if (sc->opentag != dot) { GRN_FREE((void *)sc->opentag); }
+ if (sc->closetag != dct) { GRN_FREE((void *)sc->closetag); }
+ }
+ if (dot) { GRN_FREE((void *)dot); }
+ if (dct) { GRN_FREE((void *)dct); }
+ }
+ if (snip->nstr) {
+ grn_obj_close(ctx, snip->nstr);
+ }
+ for (cond = snip->cond, cond_end = cond + snip->cond_len;
+ cond < cond_end; cond++) {
+ grn_snip_cond_close(ctx, cond);
+ }
+ GRN_FREE(snip);
+ GRN_API_RETURN(GRN_SUCCESS);
+}
+
+grn_rc
+grn_snip_exec(grn_ctx *ctx, grn_obj *snip, const char *string, unsigned int string_len,
+ unsigned int *nresults, unsigned int *max_tagged_len)
+{
+ size_t i;
+ grn_snip *snip_;
+ int f = GRN_STR_WITH_CHECKS|GRN_STR_REMOVEBLANK;
+ if (!snip || !string || !nresults || !max_tagged_len) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_ENTER;
+ snip_ = (grn_snip *)snip;
+ exec_clean(ctx, snip_);
+ *nresults = 0;
+ snip_->nstr = grn_string_open(ctx, string, string_len, snip_->normalizer, f);
+ if (!snip_->nstr) {
+ exec_clean(ctx, snip_);
+ GRN_LOG(ctx, GRN_LOG_ALERT, "grn_string_open on grn_snip_exec failed !");
+ GRN_API_RETURN(ctx->rc);
+ }
+ for (i = 0; i < snip_->cond_len; i++) {
+ grn_bm_tunedbm(ctx, snip_->cond + i, snip_->nstr, snip_->flags);
+ }
+
+ {
+ _snip_tag_result *tag_result = snip_->tag_result;
+ _snip_result *snip_result = snip_->snip_result;
+ size_t last_end_offset = 0, last_last_end_offset = 0;
+ unsigned int unfound_cond_count = snip_->cond_len;
+
+ *max_tagged_len = 0;
+ while (1) {
+ size_t tagged_len = 0, last_tag_end = 0;
+ int_least8_t all_stop = 1, found_cond = 0;
+ snip_result->tag_count = 0;
+
+ while (1) {
+ size_t min_start_offset = (size_t) -1;
+ size_t max_end_offset = 0;
+ snip_cond *cond = NULL;
+
+ /* get condition which have minimum offset and is not stopped */
+ for (i = 0; i < snip_->cond_len; i++) {
+ if (snip_->cond[i].stopflag == SNIPCOND_NONSTOP &&
+ (min_start_offset > snip_->cond[i].start_offset ||
+ (min_start_offset == snip_->cond[i].start_offset &&
+ max_end_offset < snip_->cond[i].end_offset))) {
+ min_start_offset = snip_->cond[i].start_offset;
+ max_end_offset = snip_->cond[i].end_offset;
+ cond = &snip_->cond[i];
+ }
+ }
+ if (!cond) {
+ break;
+ }
+ /* check whether condtion is the first condition in snippet */
+ if (snip_result->tag_count == 0) {
+ /* skip condition if the number of rest snippet field is smaller than */
+ /* the number of unfound keywords. */
+ if (snip_->max_results - *nresults <= unfound_cond_count && cond->count > 0) {
+ int_least8_t exclude_other_cond = 1;
+ for (i = 0; i < snip_->cond_len; i++) {
+ if ((snip_->cond + i) != cond
+ && snip_->cond[i].end_offset <= cond->start_offset + snip_->width
+ && snip_->cond[i].count == 0) {
+ exclude_other_cond = 0;
+ }
+ }
+ if (exclude_other_cond) {
+ grn_bm_tunedbm(ctx, cond, snip_->nstr, snip_->flags);
+ continue;
+ }
+ }
+ snip_result->start_offset = cond->start_offset;
+ snip_result->first_tag_result_idx = snip_->tag_count;
+ } else {
+ if (cond->start_offset >= snip_result->start_offset + snip_->width) {
+ break;
+ }
+ /* check nesting to make valid HTML */
+ /* ToDo: allow <test><te>te</te><st>st</st></test> */
+ if (cond->start_offset < last_tag_end) {
+ grn_bm_tunedbm(ctx, cond, snip_->nstr, snip_->flags);
+ continue;
+ }
+ }
+ if (cond->end_offset > snip_result->start_offset + snip_->width) {
+ /* If a keyword gets across a snippet, */
+ /* it was skipped and never to be tagged. */
+ cond->stopflag = SNIPCOND_ACROSS;
+ grn_bm_tunedbm(ctx, cond, snip_->nstr, snip_->flags);
+ } else {
+ found_cond = 1;
+ if (cond->count == 0) {
+ unfound_cond_count--;
+ }
+ cond->count++;
+ last_end_offset = cond->end_offset;
+
+ tag_result->cond = cond;
+ tag_result->start_offset = cond->start_offset;
+ tag_result->end_offset = last_tag_end = cond->end_offset;
+
+ snip_result->tag_count++;
+ tag_result++;
+ tagged_len += cond->opentag_len + cond->closetag_len;
+ if (++snip_->tag_count >= MAX_SNIP_TAG_COUNT) {
+ break;
+ }
+ grn_bm_tunedbm(ctx, cond, snip_->nstr, snip_->flags);
+ }
+ }
+ if (!found_cond) {
+ break;
+ }
+ if (snip_result->start_offset + last_end_offset < snip_->width) {
+ snip_result->start_offset = 0;
+ } else {
+ snip_result->start_offset =
+ MAX(MIN
+ ((snip_result->start_offset + last_end_offset - snip_->width) / 2,
+ string_len - snip_->width), last_last_end_offset);
+ }
+ snip_result->start_offset =
+ grn_snip_find_firstbyte(string, snip_->encoding, snip_result->start_offset, 1);
+
+ snip_result->end_offset = snip_result->start_offset + snip_->width;
+ if (snip_result->end_offset < string_len) {
+ snip_result->end_offset =
+ grn_snip_find_firstbyte(string, snip_->encoding, snip_result->end_offset, -1);
+ } else {
+ snip_result->end_offset = string_len;
+ }
+ last_last_end_offset = snip_result->end_offset;
+
+ if (snip_->mapping == (grn_snip_mapping *) -1) {
+ tagged_len +=
+ count_mapped_chars(&string[snip_result->start_offset],
+ &string[snip_result->end_offset]) + 1;
+ } else {
+ tagged_len += snip_result->end_offset - snip_result->start_offset + 1;
+ }
+
+ *max_tagged_len = MAX(*max_tagged_len, tagged_len);
+
+ snip_result->last_tag_result_idx = snip_->tag_count - 1;
+ (*nresults)++;
+ snip_result++;
+
+ if (*nresults == snip_->max_results || snip_->tag_count == MAX_SNIP_TAG_COUNT) {
+ break;
+ }
+ for (i = 0; i < snip_->cond_len; i++) {
+ if (snip_->cond[i].stopflag != SNIPCOND_STOP) {
+ all_stop = 0;
+ snip_->cond[i].stopflag = SNIPCOND_NONSTOP;
+ }
+ }
+ if (all_stop) {
+ break;
+ }
+ }
+ }
+ snip_->snip_count = *nresults;
+ snip_->string = string;
+
+ snip_->max_tagged_len = *max_tagged_len;
+
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_rc
+grn_snip_get_result(grn_ctx *ctx, grn_obj *snip, const unsigned int index, char *result, unsigned int *result_len)
+{
+ char *p;
+ size_t i, j, k;
+ _snip_result *sres;
+ grn_snip *snip_;
+
+ snip_ = (grn_snip *)snip;
+ if (snip_->snip_count <= index || !snip_->nstr) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ GRN_ASSERT(snip_->snip_count != 0 && snip_->tag_count != 0);
+
+ GRN_API_ENTER;
+ sres = &snip_->snip_result[index];
+ j = sres->first_tag_result_idx;
+ for (p = result, i = sres->start_offset; i < sres->end_offset; i++) {
+ for (; j <= sres->last_tag_result_idx && snip_->tag_result[j].start_offset == i; j++) {
+ if (snip_->tag_result[j].end_offset > sres->end_offset) {
+ continue;
+ }
+ memcpy(p, snip_->tag_result[j].cond->opentag, snip_->tag_result[j].cond->opentag_len);
+ p += snip_->tag_result[j].cond->opentag_len;
+ }
+
+ if (snip_->mapping == GRN_SNIP_MAPPING_HTML_ESCAPE) {
+ switch (snip_->string[i]) {
+ case '<':
+ *p++ = '&';
+ *p++ = 'l';
+ *p++ = 't';
+ *p++ = ';';
+ break;
+ case '>':
+ *p++ = '&';
+ *p++ = 'g';
+ *p++ = 't';
+ *p++ = ';';
+ break;
+ case '&':
+ *p++ = '&';
+ *p++ = 'a';
+ *p++ = 'm';
+ *p++ = 'p';
+ *p++ = ';';
+ break;
+ case '"':
+ *p++ = '&';
+ *p++ = 'q';
+ *p++ = 'u';
+ *p++ = 'o';
+ *p++ = 't';
+ *p++ = ';';
+ break;
+ default:
+ *p++ = snip_->string[i];
+ break;
+ }
+ } else {
+ *p++ = snip_->string[i];
+ }
+
+ for (k = sres->last_tag_result_idx;
+ snip_->tag_result[k].end_offset <= sres->end_offset; k--) {
+ /* TODO: avoid all loop */
+ if (snip_->tag_result[k].end_offset == i + 1) {
+ memcpy(p, snip_->tag_result[k].cond->closetag,
+ snip_->tag_result[k].cond->closetag_len);
+ p += snip_->tag_result[k].cond->closetag_len;
+ }
+ if (k <= sres->first_tag_result_idx) {
+ break;
+ }
+ };
+ }
+ *p = '\0';
+
+ if(result_len) { *result_len = (unsigned int)(p - result); }
+ GRN_ASSERT((unsigned int)(p - result) <= snip_->max_tagged_len);
+
+ GRN_API_RETURN(ctx->rc);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/snip.h b/storage/mroonga/vendor/groonga/lib/snip.h
new file mode 100644
index 00000000000..7a252921b3a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/snip.h
@@ -0,0 +1,132 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_SNIP_H
+#define GRN_SNIP_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_STR_H
+#include "str.h"
+#endif /* GRN_STR_H */
+
+#include "db.h"
+
+#define ASIZE 256U
+#define MAX_SNIP_TAG_COUNT 512U
+#define MAX_SNIP_COND_COUNT 32U
+#define MAX_SNIP_RESULT_COUNT 16U
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define SNIPCOND_NONSTOP 0
+#define SNIPCOND_STOP 1
+#define SNIPCOND_ACROSS 2
+
+#define GRN_QUERY_SCAN_ALLOCCONDS 0x0002
+
+typedef struct _snip_cond
+{
+ /* initial parameters */
+ const char *opentag;
+ const char *closetag;
+ size_t opentag_len;
+ size_t closetag_len;
+ grn_obj *keyword;
+
+ /* Tuned BM pre */
+ size_t bmBc[ASIZE];
+ size_t shift;
+
+ /* Tuned BM temporal result */
+ size_t found;
+ size_t last_found;
+ size_t last_offset;
+ size_t start_offset;
+ size_t end_offset;
+ size_t found_alpha_head;
+
+ /* search result */
+ int count;
+
+ /* stop flag */
+ int_least8_t stopflag;
+} snip_cond;
+
+typedef struct
+{
+ size_t start_offset;
+ size_t end_offset;
+ snip_cond *cond;
+} _snip_tag_result;
+
+typedef struct
+{
+ size_t start_offset;
+ size_t end_offset;
+ unsigned int first_tag_result_idx;
+ unsigned int last_tag_result_idx;
+ unsigned int tag_count;
+} _snip_result;
+
+typedef struct _grn_snip
+{
+ grn_db_obj obj;
+ grn_encoding encoding;
+ int flags;
+ size_t width;
+ unsigned int max_results;
+ const char *defaultopentag;
+ const char *defaultclosetag;
+ size_t defaultopentag_len;
+ size_t defaultclosetag_len;
+
+ grn_snip_mapping *mapping;
+
+ snip_cond cond[MAX_SNIP_COND_COUNT];
+ unsigned int cond_len;
+
+ unsigned int tag_count;
+ unsigned int snip_count;
+
+ const char *string;
+ grn_obj *nstr;
+
+ _snip_result snip_result[MAX_SNIP_RESULT_COUNT];
+ _snip_tag_result tag_result[MAX_SNIP_TAG_COUNT];
+
+ size_t max_tagged_len;
+
+ grn_obj *normalizer;
+} grn_snip;
+
+grn_rc grn_snip_close(grn_ctx *ctx, grn_snip *snip);
+grn_rc grn_snip_cond_init(grn_ctx *ctx, snip_cond *sc, const char *keyword, unsigned int keyword_len,
+ grn_encoding enc, grn_obj *normalizer, int flags);
+void grn_snip_cond_reinit(snip_cond *cond);
+grn_rc grn_snip_cond_close(grn_ctx *ctx, snip_cond *cond);
+void grn_bm_tunedbm(grn_ctx *ctx, snip_cond *cond, grn_obj *string, int flags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_SNIP_H */
diff --git a/storage/mroonga/vendor/groonga/lib/sources.am b/storage/mroonga/vendor/groonga/lib/sources.am
new file mode 100644
index 00000000000..8b371081fe6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/sources.am
@@ -0,0 +1,52 @@
+libgroonga_la_SOURCES = \
+ com.c \
+ com.h \
+ ctx.c \
+ ctx.h \
+ ctx_impl.h \
+ ctx_impl_mrb.c \
+ ctx_impl_mrb.h \
+ dat.cpp \
+ dat.h \
+ db.c \
+ db.h \
+ error.c \
+ error.h \
+ expr.c \
+ expr.h \
+ geo.c \
+ geo.h \
+ groonga_in.h \
+ hash.c \
+ hash.h \
+ ii.c \
+ ii.h \
+ io.c \
+ io.h \
+ mrb.c \
+ mrb.h \
+ nfkc.c \
+ normalizer.c \
+ normalizer_in.h \
+ output.c \
+ output.h \
+ pat.c \
+ pat.h \
+ plugin.c \
+ plugin_in.h \
+ proc.c \
+ proc.h \
+ snip.c \
+ snip.h \
+ store.c \
+ store.h \
+ str.c \
+ str.h \
+ string.c \
+ string_in.h \
+ token.c \
+ token.h \
+ tokenizer.c \
+ token_filter.c \
+ util.c \
+ util.h
diff --git a/storage/mroonga/vendor/groonga/lib/store.c b/storage/mroonga/vendor/groonga/lib/store.c
new file mode 100644
index 00000000000..3649611a560
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/store.c
@@ -0,0 +1,1790 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include "str.h"
+#include "store.h"
+#include "ctx_impl.h"
+#include "output.h"
+#include <string.h>
+
+/* rectangular arrays */
+
+#define GRN_RA_SEGMENT_SIZE (1 << 22)
+
+static grn_ra *
+_grn_ra_create(grn_ctx *ctx, grn_ra *ra, const char *path, unsigned int element_size)
+{
+ grn_io *io;
+ int max_segments, n_elm, w_elm;
+ struct grn_ra_header *header;
+ unsigned int actual_size;
+ if (element_size > GRN_RA_SEGMENT_SIZE) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "element_size too large (%d)", element_size);
+ return NULL;
+ }
+ for (actual_size = 1; actual_size < element_size; actual_size *= 2) ;
+ max_segments = ((GRN_ID_MAX + 1) / GRN_RA_SEGMENT_SIZE) * actual_size;
+ io = grn_io_create(ctx, path, sizeof(struct grn_ra_header),
+ GRN_RA_SEGMENT_SIZE, max_segments, grn_io_auto,
+ GRN_IO_EXPIRE_SEGMENT);
+ if (!io) { return NULL; }
+ header = grn_io_header(io);
+ grn_io_set_type(io, GRN_COLUMN_FIX_SIZE);
+ header->element_size = actual_size;
+ n_elm = GRN_RA_SEGMENT_SIZE / header->element_size;
+ for (w_elm = 22; (1 << w_elm) > n_elm; w_elm--);
+ ra->io = io;
+ ra->header = header;
+ ra->element_mask = n_elm - 1;
+ ra->element_width = w_elm;
+ return ra;
+}
+
+grn_ra *
+grn_ra_create(grn_ctx *ctx, const char *path, unsigned int element_size)
+{
+ grn_ra *ra = NULL;
+ if (!(ra = GRN_GMALLOC(sizeof(grn_ra)))) {
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(ra, GRN_COLUMN_FIX_SIZE);
+ if (!_grn_ra_create(ctx, ra, path, element_size)) {
+ GRN_FREE(ra);
+ return NULL;
+ }
+ return ra;
+}
+
+grn_ra *
+grn_ra_open(grn_ctx *ctx, const char *path)
+{
+ grn_io *io;
+ int n_elm, w_elm;
+ grn_ra *ra = NULL;
+ struct grn_ra_header *header;
+ io = grn_io_open(ctx, path, grn_io_auto);
+ if (!io) { return NULL; }
+ header = grn_io_header(io);
+ if (grn_io_get_type(io) != GRN_COLUMN_FIX_SIZE) {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ if (!(ra = GRN_GMALLOC(sizeof(grn_ra)))) {
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ n_elm = GRN_RA_SEGMENT_SIZE / header->element_size;
+ for (w_elm = 22; (1 << w_elm) > n_elm; w_elm--);
+ GRN_DB_OBJ_SET_TYPE(ra, GRN_COLUMN_FIX_SIZE);
+ ra->io = io;
+ ra->header = header;
+ ra->element_mask = n_elm - 1;
+ ra->element_width = w_elm;
+ return ra;
+}
+
+grn_rc
+grn_ra_info(grn_ctx *ctx, grn_ra *ra, unsigned int *element_size)
+{
+ if (!ra) { return GRN_INVALID_ARGUMENT; }
+ if (element_size) { *element_size = ra->header->element_size; }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ra_close(grn_ctx *ctx, grn_ra *ra)
+{
+ grn_rc rc;
+ if (!ra) { return GRN_INVALID_ARGUMENT; }
+ rc = grn_io_close(ctx, ra->io);
+ GRN_GFREE(ra);
+ return rc;
+}
+
+grn_rc
+grn_ra_remove(grn_ctx *ctx, const char *path)
+{
+ if (!path) { return GRN_INVALID_ARGUMENT; }
+ return grn_io_remove(ctx, path);
+}
+
+grn_rc
+grn_ra_truncate(grn_ctx *ctx, grn_ra *ra)
+{
+ grn_rc rc;
+ const char *io_path;
+ char *path;
+ unsigned int element_size;
+ if ((io_path = grn_io_path(ra->io)) && *io_path != '\0') {
+ if (!(path = GRN_STRDUP(io_path))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ path = NULL;
+ }
+ element_size = ra->header->element_size;
+ if ((rc = grn_io_close(ctx, ra->io))) { goto exit; }
+ ra->io = NULL;
+ if (path && (rc = grn_io_remove(ctx, path))) { goto exit; }
+ if (!_grn_ra_create(ctx, ra, path, element_size)) {
+ rc = GRN_UNKNOWN_ERROR;
+ }
+exit:
+ if (path) { GRN_FREE(path); }
+ return rc;
+}
+
+void *
+grn_ra_ref(grn_ctx *ctx, grn_ra *ra, grn_id id)
+{
+ void *p = NULL;
+ uint16_t seg;
+ if (id > GRN_ID_MAX) { return NULL; }
+ seg = id >> ra->element_width;
+ GRN_IO_SEG_REF(ra->io, seg, p);
+ if (!p) { return NULL; }
+ return (void *)(((byte *)p) + ((id & ra->element_mask) * ra->header->element_size));
+}
+
+grn_rc
+grn_ra_unref(grn_ctx *ctx, grn_ra *ra, grn_id id)
+{
+ uint16_t seg;
+ if (id > GRN_ID_MAX) { return GRN_INVALID_ARGUMENT; }
+ seg = id >> ra->element_width;
+ GRN_IO_SEG_UNREF(ra->io, seg);
+ return GRN_SUCCESS;
+}
+
+void *
+grn_ra_ref_cache(grn_ctx *ctx, grn_ra *ra, grn_id id, grn_ra_cache *cache)
+{
+ void *p = NULL;
+ uint16_t seg;
+ if (id > GRN_ID_MAX) { return NULL; }
+ seg = id >> ra->element_width;
+ if (seg == cache->seg) {
+ p = cache->p;
+ } else {
+ if (cache->seg != -1) { GRN_IO_SEG_UNREF(ra->io, cache->seg); }
+ GRN_IO_SEG_REF(ra->io, seg, p);
+ cache->seg = seg;
+ cache->p = p;
+ }
+ if (!p) { return NULL; }
+ return (void *)(((byte *)p) + ((id & ra->element_mask) * ra->header->element_size));
+}
+
+grn_rc
+grn_ra_cache_fin(grn_ctx *ctx, grn_ra *ra, grn_id id)
+{
+ uint16_t seg;
+ if (id > GRN_ID_MAX) { return GRN_INVALID_ARGUMENT; }
+ seg = id >> ra->element_width;
+ GRN_IO_SEG_UNREF(ra->io, seg);
+ return GRN_SUCCESS;
+}
+
+/**** jagged arrays ****/
+
+#define GRN_JA_W_SEGREGATE_THRESH_V1 7
+#define GRN_JA_W_SEGREGATE_THRESH_V2 16
+#define GRN_JA_W_CAPACITY 38
+#define GRN_JA_W_SEGMENT 22
+
+#define JA_ESEG_VOID (0xffffffffU)
+#define JA_SEGMENT_SIZE (1U << GRN_JA_W_SEGMENT)
+#define JA_W_EINFO 3
+#define JA_W_SEGMENTS_MAX (GRN_JA_W_CAPACITY - GRN_JA_W_SEGMENT)
+#define JA_W_EINFO_IN_A_SEGMENT (GRN_JA_W_SEGMENT - JA_W_EINFO)
+#define JA_N_EINFO_IN_A_SEGMENT (1U << JA_W_EINFO_IN_A_SEGMENT)
+#define JA_M_EINFO_IN_A_SEGMENT (JA_N_EINFO_IN_A_SEGMENT - 1)
+#define JA_N_GARBAGES_IN_A_SEGMENT ((1U << (GRN_JA_W_SEGMENT - 3)) - 2)
+#define JA_N_ELEMENT_VARIATION_V1 (GRN_JA_W_SEGREGATE_THRESH_V1 - JA_W_EINFO + 1)
+#define JA_N_ELEMENT_VARIATION_V2 (GRN_JA_W_SEGREGATE_THRESH_V2 - JA_W_EINFO + 1)
+#define JA_N_DSEGMENTS (1U << JA_W_SEGMENTS_MAX)
+#define JA_N_ESEGMENTS (1U << (GRN_ID_WIDTH - JA_W_EINFO_IN_A_SEGMENT))
+
+typedef struct _grn_ja_einfo grn_ja_einfo;
+
+struct _grn_ja_einfo {
+ union {
+ struct {
+ uint16_t seg;
+ uint16_t pos;
+ uint16_t size;
+ uint8_t c1;
+ uint8_t c2;
+ } n;
+ struct {
+ uint32_t size;
+ uint16_t seg;
+ uint8_t c1;
+ uint8_t c2;
+ } h;
+ uint8_t c[8];
+ } u;
+};
+
+#define ETINY (0x80)
+#define EHUGE (0x40)
+#define ETINY_P(e) ((e)->u.c[7] & ETINY)
+#define ETINY_ENC(e,_size) ((e)->u.c[7] = (_size) + ETINY)
+#define ETINY_DEC(e,_size) ((_size) = (e)->u.c[7] & ~(ETINY|EHUGE))
+#define EHUGE_P(e) ((e)->u.c[7] & EHUGE)
+#define EHUGE_ENC(e,_seg,_size) do {\
+ (e)->u.h.c1 = 0;\
+ (e)->u.h.c2 = EHUGE;\
+ (e)->u.h.seg = (_seg);\
+ (e)->u.h.size = (_size);\
+} while (0)
+#define EHUGE_DEC(e,_seg,_size) do {\
+ (_seg) = (e)->u.h.seg;\
+ (_size) = (e)->u.h.size;\
+} while (0)
+#define EINFO_ENC(e,_seg,_pos,_size) do {\
+ (e)->u.n.c1 = (_pos) >> 16;\
+ (e)->u.n.c2 = ((_size) >> 16);\
+ (e)->u.n.seg = (_seg);\
+ (e)->u.n.pos = (_pos);\
+ (e)->u.n.size = (_size);\
+} while (0)
+#define EINFO_DEC(e,_seg,_pos,_size) do {\
+ (_seg) = (e)->u.n.seg;\
+ (_pos) = ((e)->u.n.c1 << 16) + (e)->u.n.pos;\
+ (_size) = ((e)->u.n.c2 << 16) + (e)->u.n.size;\
+} while (0)
+
+typedef struct {
+ uint32_t seg;
+ uint32_t pos;
+} ja_pos;
+
+typedef struct {
+ uint32_t head;
+ uint32_t tail;
+ uint32_t nrecs;
+ uint32_t next;
+ ja_pos recs[JA_N_GARBAGES_IN_A_SEGMENT];
+} grn_ja_ginfo;
+
+struct grn_ja_header_v1 {
+ uint32_t flags;
+ uint32_t curr_seg;
+ uint32_t curr_pos;
+ uint32_t max_element_size;
+ ja_pos free_elements[JA_N_ELEMENT_VARIATION_V1];
+ uint32_t garbages[JA_N_ELEMENT_VARIATION_V1];
+ uint32_t ngarbages[JA_N_ELEMENT_VARIATION_V1];
+ uint32_t dsegs[JA_N_DSEGMENTS];
+ uint32_t esegs[JA_N_ESEGMENTS];
+};
+
+struct grn_ja_header_v2 {
+ uint32_t flags;
+ uint32_t curr_seg;
+ uint32_t curr_pos;
+ uint32_t max_element_size;
+ ja_pos free_elements[JA_N_ELEMENT_VARIATION_V2];
+ uint32_t garbages[JA_N_ELEMENT_VARIATION_V2];
+ uint32_t ngarbages[JA_N_ELEMENT_VARIATION_V2];
+ uint32_t dsegs[JA_N_DSEGMENTS];
+ uint32_t esegs[JA_N_ESEGMENTS];
+ uint8_t segregate_threshold;
+ uint8_t n_element_variation;
+};
+
+struct grn_ja_header {
+ uint32_t flags;
+ uint32_t *curr_seg;
+ uint32_t *curr_pos;
+ uint32_t max_element_size;
+ ja_pos *free_elements;
+ uint32_t *garbages;
+ uint32_t *ngarbages;
+ uint32_t *dsegs;
+ uint32_t *esegs;
+ uint8_t segregate_threshold;
+ uint8_t n_element_variation;
+};
+
+#define SEG_SEQ (0x10000000U)
+#define SEG_HUGE (0x20000000U)
+#define SEG_EINFO (0x30000000U)
+#define SEG_GINFO (0x40000000U)
+#define SEG_MASK (0xf0000000U)
+
+#define SEGMENTS_AT(ja,seg) ((ja)->header->dsegs[seg])
+#define SEGMENTS_SEGRE_ON(ja,seg,width) (SEGMENTS_AT(ja,seg) = width)
+#define SEGMENTS_SEQ_ON(ja,seg) (SEGMENTS_AT(ja,seg) = SEG_SEQ)
+#define SEGMENTS_HUGE_ON(ja,seg) (SEGMENTS_AT(ja,seg) = SEG_HUGE)
+#define SEGMENTS_EINFO_ON(ja,seg,lseg) (SEGMENTS_AT(ja,seg) = SEG_EINFO|(lseg))
+#define SEGMENTS_GINFO_ON(ja,seg,width) (SEGMENTS_AT(ja,seg) = SEG_GINFO|(width))
+#define SEGMENTS_OFF(ja,seg) (SEGMENTS_AT(ja,seg) = 0)
+
+grn_bool grn_ja_skip_same_value_put = GRN_TRUE;
+
+static grn_ja *
+_grn_ja_create(grn_ctx *ctx, grn_ja *ja, const char *path,
+ unsigned int max_element_size, uint32_t flags)
+{
+ int i;
+ grn_io *io;
+ struct grn_ja_header *header;
+ struct grn_ja_header_v2 *header_v2;
+ io = grn_io_create(ctx, path, sizeof(struct grn_ja_header_v2),
+ JA_SEGMENT_SIZE, JA_N_DSEGMENTS, grn_io_auto,
+ GRN_IO_EXPIRE_SEGMENT);
+ if (!io) { return NULL; }
+ grn_io_set_type(io, GRN_COLUMN_VAR_SIZE);
+
+ header_v2 = grn_io_header(io);
+ header_v2->flags = flags;
+ header_v2->curr_seg = 0;
+ header_v2->curr_pos = JA_SEGMENT_SIZE;
+ header_v2->max_element_size = max_element_size;
+ for (i = 0; i < JA_N_ESEGMENTS; i++) { header_v2->esegs[i] = JA_ESEG_VOID; }
+ header_v2->segregate_threshold = GRN_JA_W_SEGREGATE_THRESH_V2;
+ header_v2->n_element_variation = JA_N_ELEMENT_VARIATION_V2;
+
+ header = GRN_GMALLOC(sizeof(struct grn_ja_header));
+ if (!header) {
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ header->flags = header_v2->flags;
+ header->curr_seg = &(header_v2->curr_seg);
+ header->curr_pos = &(header_v2->curr_pos);
+ header->max_element_size = header_v2->max_element_size;
+ header->free_elements = header_v2->free_elements;
+ header->garbages = header_v2->garbages;
+ header->ngarbages = header_v2->ngarbages;
+ header->dsegs = header_v2->dsegs;
+ header->esegs = header_v2->esegs;
+ header->segregate_threshold = header_v2->segregate_threshold;
+ header->n_element_variation = header_v2->n_element_variation;
+
+ ja->io = io;
+ ja->header = header;
+ SEGMENTS_EINFO_ON(ja, 0, 0);
+ header->esegs[0] = 0;
+ return ja;
+}
+
+grn_ja *
+grn_ja_create(grn_ctx *ctx, const char *path, unsigned int max_element_size, uint32_t flags)
+{
+ grn_ja *ja = NULL;
+ if (!(ja = GRN_GMALLOC(sizeof(grn_ja)))) {
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(ja, GRN_COLUMN_VAR_SIZE);
+ if (!_grn_ja_create(ctx, ja, path, max_element_size, flags)) {
+ GRN_FREE(ja);
+ return NULL;
+ }
+ return ja;
+}
+
+grn_ja *
+grn_ja_open(grn_ctx *ctx, const char *path)
+{
+ grn_io *io;
+ grn_ja *ja = NULL;
+ struct grn_ja_header *header;
+ struct grn_ja_header_v2 *header_v2;
+ io = grn_io_open(ctx, path, grn_io_auto);
+ if (!io) { return NULL; }
+ header_v2 = grn_io_header(io);
+ if (grn_io_get_type(io) != GRN_COLUMN_VAR_SIZE) {
+ ERR(GRN_INVALID_FORMAT, "file type unmatch");
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ if (header_v2->segregate_threshold == 0) {
+ header_v2->segregate_threshold = GRN_JA_W_SEGREGATE_THRESH_V1;
+ }
+ if (header_v2->n_element_variation == 0) {
+ header_v2->n_element_variation = JA_N_ELEMENT_VARIATION_V1;
+ }
+ if (!(ja = GRN_GMALLOC(sizeof(grn_ja)))) {
+ grn_io_close(ctx, io);
+ return NULL;
+ }
+ GRN_DB_OBJ_SET_TYPE(ja, GRN_COLUMN_VAR_SIZE);
+ if (!(header = GRN_GMALLOC(sizeof(struct grn_ja_header)))) {
+ grn_io_close(ctx, io);
+ GRN_GFREE(ja);
+ return NULL;
+ }
+
+ header->flags = header_v2->flags;
+ header->curr_seg = &(header_v2->curr_seg);
+ header->curr_pos = &(header_v2->curr_pos);
+ header->max_element_size = header_v2->max_element_size;
+ header->segregate_threshold = header_v2->segregate_threshold;
+ header->n_element_variation = header_v2->n_element_variation;
+ if (header->segregate_threshold == GRN_JA_W_SEGREGATE_THRESH_V1) {
+ struct grn_ja_header_v1 *header_v1 = (struct grn_ja_header_v1 *)header_v2;
+ header->free_elements = header_v1->free_elements;
+ header->garbages = header_v1->garbages;
+ header->ngarbages = header_v1->ngarbages;
+ header->dsegs = header_v1->dsegs;
+ header->esegs = header_v1->esegs;
+ } else {
+ header->free_elements = header_v2->free_elements;
+ header->garbages = header_v2->garbages;
+ header->ngarbages = header_v2->ngarbages;
+ header->dsegs = header_v2->dsegs;
+ header->esegs = header_v2->esegs;
+ }
+
+ ja->io = io;
+ ja->header = header;
+
+ return ja;
+}
+
+grn_rc
+grn_ja_info(grn_ctx *ctx, grn_ja *ja, unsigned int *max_element_size)
+{
+ if (!ja) { return GRN_INVALID_ARGUMENT; }
+ if (max_element_size) { *max_element_size = ja->header->max_element_size; }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ja_close(grn_ctx *ctx, grn_ja *ja)
+{
+ grn_rc rc;
+ if (!ja) { return GRN_INVALID_ARGUMENT; }
+ rc = grn_io_close(ctx, ja->io);
+ GRN_GFREE(ja->header);
+ GRN_GFREE(ja);
+ return rc;
+}
+
+grn_rc
+grn_ja_remove(grn_ctx *ctx, const char *path)
+{
+ if (!path) { return GRN_INVALID_ARGUMENT; }
+ return grn_io_remove(ctx, path);
+}
+
+grn_rc
+grn_ja_truncate(grn_ctx *ctx, grn_ja *ja)
+{
+ grn_rc rc;
+ const char *io_path;
+ char *path;
+ unsigned int max_element_size;
+ uint32_t flags;
+ if ((io_path = grn_io_path(ja->io)) && *io_path != '\0') {
+ if (!(path = GRN_STRDUP(io_path))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_path);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ } else {
+ path = NULL;
+ }
+ max_element_size = ja->header->max_element_size;
+ flags = ja->header->flags;
+ if ((rc = grn_io_close(ctx, ja->io))) { goto exit; }
+ ja->io = NULL;
+ if (path && (rc = grn_io_remove(ctx, path))) { goto exit; }
+ GRN_GFREE(ja->header);
+ if (!_grn_ja_create(ctx, ja, path, max_element_size, flags)) {
+ rc = GRN_UNKNOWN_ERROR;
+ }
+exit:
+ if (path) { GRN_FREE(path); }
+ return rc;
+}
+
+static void *
+grn_ja_ref_raw(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw, uint32_t *value_len)
+{
+ uint32_t pseg = ja->header->esegs[id >> JA_W_EINFO_IN_A_SEGMENT];
+ iw->size = 0;
+ iw->addr = NULL;
+ iw->pseg = pseg;
+ iw->value = NULL;
+ if (pseg != JA_ESEG_VOID) {
+ grn_ja_einfo *einfo = NULL;
+ GRN_IO_SEG_REF(ja->io, pseg, einfo);
+ if (einfo) {
+ grn_ja_einfo *ei = &einfo[id & JA_M_EINFO_IN_A_SEGMENT];
+ if (ETINY_P(ei)) {
+ iw->tiny_p = 1;
+ ETINY_DEC(ei, iw->size);
+ iw->io = ja->io;
+ iw->ctx = ctx;
+ iw->addr = (void *)ei;
+ } else {
+ uint32_t jag, vpos, vsize;
+ iw->tiny_p = 0;
+ if (EHUGE_P(ei)) {
+ EHUGE_DEC(ei, jag, vsize);
+ vpos = 0;
+ } else {
+ EINFO_DEC(ei, jag, vpos, vsize);
+ }
+ grn_io_win_map2(ja->io, ctx, iw, jag, vpos, vsize, grn_io_rdonly);
+ }
+ if (!iw->addr) { GRN_IO_SEG_UNREF(ja->io, pseg); }
+ }
+ }
+ *value_len = iw->size;
+ return iw->addr;
+}
+
+grn_rc
+grn_ja_unref(grn_ctx *ctx, grn_io_win *iw)
+{
+ if (iw->value) {
+ GRN_FREE(iw->value);
+ iw->value = NULL;
+ } else {
+ if (!iw->addr) { return GRN_INVALID_ARGUMENT; }
+ GRN_IO_SEG_UNREF(iw->io, iw->pseg);
+ if (!iw->tiny_p) { grn_io_win_unmap2(iw); }
+ }
+ return GRN_SUCCESS;
+}
+
+#define DELETED 0x80000000
+
+static grn_rc
+grn_ja_free(grn_ctx *ctx, grn_ja *ja, grn_ja_einfo *einfo)
+{
+ grn_ja_ginfo *ginfo = NULL;
+ uint32_t seg, pos, element_size, aligned_size, m, *gseg;
+ if (ETINY_P(einfo)) { return GRN_SUCCESS; }
+ if (EHUGE_P(einfo)) {
+ uint32_t n;
+ EHUGE_DEC(einfo, seg, element_size);
+ n = ((element_size + JA_SEGMENT_SIZE - 1) >> GRN_JA_W_SEGMENT);
+ for (; n--; seg++) { SEGMENTS_OFF(ja, seg); }
+ return GRN_SUCCESS;
+ }
+ EINFO_DEC(einfo, seg, pos, element_size);
+ if (!element_size) { return GRN_SUCCESS; }
+ {
+ int es = element_size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ }
+ if (m > ja->header->segregate_threshold) {
+ byte *addr = NULL;
+ GRN_IO_SEG_REF(ja->io, seg, addr);
+ if (!addr) { return GRN_NO_MEMORY_AVAILABLE; }
+ aligned_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);
+ *(uint32_t *)(addr + pos - sizeof(grn_id)) = DELETED|aligned_size;
+ if (SEGMENTS_AT(ja, seg) < (aligned_size + sizeof(grn_id)) + SEG_SEQ) {
+ GRN_LOG(ctx, GRN_WARN, "inconsistent ja entry detected (%d > %d)",
+ element_size, SEGMENTS_AT(ja, seg) - SEG_SEQ);
+ }
+ SEGMENTS_AT(ja, seg) -= (aligned_size + sizeof(grn_id));
+ if (SEGMENTS_AT(ja, seg) == SEG_SEQ) {
+ /* reuse the segment */
+ SEGMENTS_OFF(ja, seg);
+ if (seg == *(ja->header->curr_seg)) {
+ *(ja->header->curr_pos) = JA_SEGMENT_SIZE;
+ }
+ }
+ GRN_IO_SEG_UNREF(ja->io, seg);
+ } else {
+ uint32_t lseg = 0, lseg_;
+ gseg = &ja->header->garbages[m - JA_W_EINFO];
+ while ((lseg_ = *gseg)) {
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ GRN_IO_SEG_REF(ja->io, lseg_, ginfo);
+ if (!ginfo) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ lseg = lseg_;
+ if (ginfo->nrecs < JA_N_GARBAGES_IN_A_SEGMENT) { break; }
+ gseg = &ginfo->next;
+ }
+ if (!lseg_) {
+ uint32_t i = 0;
+ while (SEGMENTS_AT(ja, i)) {
+ if (++i >= JA_N_DSEGMENTS) {
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ SEGMENTS_GINFO_ON(ja, i, m - JA_W_EINFO);
+ *gseg = i;
+ lseg_ = *gseg;
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ GRN_IO_SEG_REF(ja->io, lseg_, ginfo);
+ lseg = lseg_;
+ if (!ginfo) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ ginfo->head = 0;
+ ginfo->tail = 0;
+ ginfo->nrecs = 0;
+ ginfo->next = 0;
+ }
+ ginfo->recs[ginfo->head].seg = seg;
+ ginfo->recs[ginfo->head].pos = pos;
+ if (++ginfo->head == JA_N_GARBAGES_IN_A_SEGMENT) { ginfo->head = 0; }
+ ginfo->nrecs++;
+ ja->header->ngarbages[m - JA_W_EINFO]++;
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ja_replace(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ grn_ja_einfo *ei, uint64_t *cas)
+{
+ grn_rc rc = GRN_SUCCESS;
+ uint32_t lseg, *pseg, pos;
+ grn_ja_einfo *einfo = NULL, eback;
+ lseg = id >> JA_W_EINFO_IN_A_SEGMENT;
+ pos = id & JA_M_EINFO_IN_A_SEGMENT;
+ pseg = &ja->header->esegs[lseg];
+ if (grn_io_lock(ctx, ja->io, grn_lock_timeout)) {
+ return ctx->rc;
+ }
+ if (*pseg == JA_ESEG_VOID) {
+ int i = 0;
+ while (SEGMENTS_AT(ja, i)) {
+ if (++i >= JA_N_DSEGMENTS) {
+ ERR(GRN_NOT_ENOUGH_SPACE, "grn_ja file (%s) is full", ja->io->path);
+ rc = GRN_NOT_ENOUGH_SPACE;
+ goto exit;
+ }
+ }
+ SEGMENTS_EINFO_ON(ja, i, lseg);
+ GRN_IO_SEG_REF(ja->io, i, einfo);
+ if (einfo) {
+ *pseg = i;
+ memset(einfo, 0, JA_SEGMENT_SIZE);
+ }
+ } else {
+ GRN_IO_SEG_REF(ja->io, *pseg, einfo);
+ }
+ if (!einfo) {
+ rc = GRN_NO_MEMORY_AVAILABLE;
+ goto exit;
+ }
+ eback = einfo[pos];
+ if (cas && *cas != *((uint64_t *)&eback)) {
+ ERR(GRN_CAS_ERROR, "cas failed (%d)", id);
+ GRN_IO_SEG_UNREF(ja->io, *pseg);
+ rc = GRN_CAS_ERROR;
+ goto exit;
+ }
+ // smb_wmb();
+ {
+ uint64_t *location = (uint64_t *)(einfo + pos);
+ uint64_t value = *((uint64_t *)ei);
+ GRN_SET_64BIT(location, value);
+ }
+ GRN_IO_SEG_UNREF(ja->io, *pseg);
+ grn_ja_free(ctx, ja, &eback);
+exit :
+ grn_io_unlock(ja->io);
+ return rc;
+}
+
+#define JA_N_GARBAGES_TH 10
+
+// todo : grn_io_win_map2 cause verbose copy when nseg > 1, it should be copied directly.
+static grn_rc
+grn_ja_alloc(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ uint32_t element_size, grn_ja_einfo *einfo, grn_io_win *iw)
+{
+ byte *addr = NULL;
+ iw->io = ja->io;
+ iw->ctx = ctx;
+ iw->cached = 1;
+ if (element_size < 8) {
+ ETINY_ENC(einfo, element_size);
+ iw->tiny_p = 1;
+ iw->addr = (void *)einfo;
+ return GRN_SUCCESS;
+ }
+ iw->tiny_p = 0;
+ if (grn_io_lock(ctx, ja->io, grn_lock_timeout)) { return ctx->rc; }
+ if (element_size + sizeof(grn_id) > JA_SEGMENT_SIZE) {
+ int i, j, n = (element_size + JA_SEGMENT_SIZE - 1) >> GRN_JA_W_SEGMENT;
+ for (i = 0, j = -1; i < JA_N_DSEGMENTS; i++) {
+ if (SEGMENTS_AT(ja, i)) {
+ j = i;
+ } else {
+ if (i == j + n) {
+ j++;
+ addr = grn_io_win_map2(ja->io, ctx, iw, j, 0, element_size, grn_io_wronly);
+ if (!addr) {
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ EHUGE_ENC(einfo, j, element_size);
+ for (; j <= i; j++) { SEGMENTS_HUGE_ON(ja, j); }
+ grn_io_unlock(ja->io);
+ return GRN_SUCCESS;
+ }
+ }
+ }
+ GRN_LOG(ctx, GRN_LOG_CRIT, "ja full. requested element_size=%d.", element_size);
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ } else {
+ ja_pos *vp;
+ int m, aligned_size, es = element_size - 1;
+ GRN_BIT_SCAN_REV(es, m);
+ m++;
+ if (m > ja->header->segregate_threshold) {
+ uint32_t seg = *(ja->header->curr_seg);
+ uint32_t pos = *(ja->header->curr_pos);
+ if (pos + element_size + sizeof(grn_id) > JA_SEGMENT_SIZE) {
+ seg = 0;
+ while (SEGMENTS_AT(ja, seg)) {
+ if (++seg >= JA_N_DSEGMENTS) {
+ grn_io_unlock(ja->io);
+ GRN_LOG(ctx, GRN_LOG_CRIT, "ja full. seg=%d.", seg);
+ return GRN_NOT_ENOUGH_SPACE;
+ }
+ }
+ SEGMENTS_SEQ_ON(ja, seg);
+ *(ja->header->curr_seg) = seg;
+ pos = 0;
+ }
+ GRN_IO_SEG_REF(ja->io, seg, addr);
+ if (!addr) {
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ *(grn_id *)(addr + pos) = id;
+ aligned_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);
+ if (pos + aligned_size < JA_SEGMENT_SIZE) {
+ *(grn_id *)(addr + pos + aligned_size) = GRN_ID_NIL;
+ }
+ SEGMENTS_AT(ja, seg) += aligned_size + sizeof(grn_id);
+ pos += sizeof(grn_id);
+ EINFO_ENC(einfo, seg, pos, element_size);
+ iw->segment = seg;
+ iw->addr = addr + pos;
+ *(ja->header->curr_pos) = pos + aligned_size;
+ grn_io_unlock(ja->io);
+ return GRN_SUCCESS;
+ } else {
+ uint32_t lseg = 0, lseg_;
+ aligned_size = 1 << m;
+ if (ja->header->ngarbages[m - JA_W_EINFO] > JA_N_GARBAGES_TH) {
+ grn_ja_ginfo *ginfo = NULL;
+ uint32_t seg, pos, *gseg;
+ gseg = &ja->header->garbages[m - JA_W_EINFO];
+ while ((lseg_ = *gseg)) {
+ GRN_IO_SEG_REF(ja->io, lseg_, ginfo);
+ if (!ginfo) {
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (ginfo->next || ginfo->nrecs > JA_N_GARBAGES_TH) {
+ seg = ginfo->recs[ginfo->tail].seg;
+ pos = ginfo->recs[ginfo->tail].pos;
+ GRN_IO_SEG_REF(ja->io, seg, addr);
+ if (!addr) {
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ GRN_IO_SEG_UNREF(ja->io, lseg_);
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ EINFO_ENC(einfo, seg, pos, element_size);
+ iw->segment = seg;
+ iw->addr = addr + pos;
+ if (++ginfo->tail == JA_N_GARBAGES_IN_A_SEGMENT) { ginfo->tail = 0; }
+ ginfo->nrecs--;
+ ja->header->ngarbages[m - JA_W_EINFO]--;
+ if (!ginfo->nrecs) {
+ SEGMENTS_OFF(ja, *gseg);
+ *gseg = ginfo->next;
+ }
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ GRN_IO_SEG_UNREF(ja->io, lseg_);
+ grn_io_unlock(ja->io);
+ return GRN_SUCCESS;
+ }
+ if (lseg) { GRN_IO_SEG_UNREF(ja->io, lseg); }
+ if (!ginfo->next) {
+ GRN_IO_SEG_UNREF(ja->io, lseg_);
+ break;
+ }
+ lseg = lseg_;
+ gseg = &ginfo->next;
+ }
+ }
+ vp = &ja->header->free_elements[m - JA_W_EINFO];
+ if (!vp->seg) {
+ int i = 0;
+ while (SEGMENTS_AT(ja, i)) {
+ if (++i >= JA_N_DSEGMENTS) {
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ SEGMENTS_SEGRE_ON(ja, i, m);
+ vp->seg = i;
+ vp->pos = 0;
+ }
+ }
+ EINFO_ENC(einfo, vp->seg, vp->pos, element_size);
+ GRN_IO_SEG_REF(ja->io, vp->seg, addr);
+ if (!addr) {
+ grn_io_unlock(ja->io);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ iw->segment = vp->seg;
+ iw->addr = addr + vp->pos;
+ if ((vp->pos += aligned_size) == JA_SEGMENT_SIZE) {
+ vp->seg = 0;
+ vp->pos = 0;
+ }
+ iw->value = NULL;
+ grn_io_unlock(ja->io);
+ return GRN_SUCCESS;
+ }
+}
+
+static grn_rc
+set_value(grn_ctx *ctx, grn_ja *ja, grn_id id, void *value, uint32_t value_len,
+ grn_ja_einfo *einfo)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_io_win iw;
+ if ((ja->header->flags & GRN_OBJ_RING_BUFFER) &&
+ value_len >= ja->header->max_element_size) {
+ if ((rc = grn_ja_alloc(ctx, ja, id, value_len + sizeof(uint32_t), einfo, &iw))) {
+ return rc;
+ }
+ memcpy(iw.addr, value, value_len);
+ memset((byte *)iw.addr + value_len, 0, sizeof(uint32_t));
+ grn_io_win_unmap2(&iw);
+ } else {
+ if ((rc = grn_ja_alloc(ctx, ja, id, value_len, einfo, &iw))) { return rc; }
+ memcpy(iw.addr, value, value_len);
+ grn_io_win_unmap2(&iw);
+ }
+ return rc;
+}
+
+grn_rc
+grn_ja_put_raw(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ void *value, uint32_t value_len, int flags, uint64_t *cas)
+{
+ int rc;
+ int64_t buf;
+ grn_io_win iw;
+ grn_ja_einfo einfo;
+
+ if (grn_ja_skip_same_value_put &&
+ (flags & GRN_OBJ_SET_MASK) == GRN_OBJ_SET &&
+ value_len > 0) {
+ grn_io_win jw;
+ uint32_t old_len;
+ void *old_value;
+ grn_bool same_value = GRN_FALSE;
+
+ old_value = grn_ja_ref(ctx, ja, id, &jw, &old_len);
+ if (value_len == old_len && memcmp(value, old_value, value_len) == 0) {
+ same_value = GRN_TRUE;
+ }
+ grn_ja_unref(ctx, &jw);
+ if (same_value) {
+ return GRN_SUCCESS;
+ }
+ }
+
+ switch (flags & GRN_OBJ_SET_MASK) {
+ case GRN_OBJ_APPEND :
+ if (value_len) {
+ grn_io_win jw;
+ uint32_t old_len;
+ void *oldvalue = grn_ja_ref(ctx, ja, id, &jw, &old_len);
+ if (oldvalue) {
+ if ((ja->header->flags & GRN_OBJ_RING_BUFFER) &&
+ old_len + value_len >= ja->header->max_element_size) {
+ if (old_len >= ja->header->max_element_size) {
+ byte *b = oldvalue;
+ uint32_t el = old_len - sizeof(uint32_t);
+ uint32_t pos = *((uint32_t *)(b + el));
+ GRN_ASSERT(pos < el);
+ if (el <= pos + value_len) {
+ uint32_t rest = el - pos;
+ memcpy(b + pos, value, rest);
+ memcpy(b, (byte *)value + rest, value_len - rest);
+ *((uint32_t *)(b + el)) = value_len - rest;
+ } else {
+ memcpy(b + pos, value, value_len);
+ *((uint32_t *)(b + el)) = pos + value_len;
+ }
+ return GRN_SUCCESS;
+ } else {
+ if ((rc = grn_ja_alloc(ctx, ja, id,
+ value_len + old_len + sizeof(uint32_t),
+ &einfo, &iw))) {
+ grn_ja_unref(ctx, &jw);
+ return rc;
+ }
+ memcpy(iw.addr, oldvalue, old_len);
+ memcpy((byte *)iw.addr + old_len, value, value_len);
+ memset((byte *)iw.addr + old_len + value_len, 0, sizeof(uint32_t));
+ grn_io_win_unmap2(&iw);
+ }
+ } else {
+ if ((rc = grn_ja_alloc(ctx, ja, id, value_len + old_len, &einfo, &iw))) {
+ grn_ja_unref(ctx, &jw);
+ return rc;
+ }
+ memcpy(iw.addr, oldvalue, old_len);
+ memcpy((byte *)iw.addr + old_len, value, value_len);
+ grn_io_win_unmap2(&iw);
+ }
+ grn_ja_unref(ctx, &jw);
+ } else {
+ set_value(ctx, ja, id, value, value_len, &einfo);
+ }
+ }
+ break;
+ case GRN_OBJ_PREPEND :
+ if (value_len) {
+ grn_io_win jw;
+ uint32_t old_len;
+ void *oldvalue = grn_ja_ref(ctx, ja, id, &jw, &old_len);
+ if (oldvalue) {
+ if ((ja->header->flags & GRN_OBJ_RING_BUFFER) &&
+ old_len + value_len >= ja->header->max_element_size) {
+ if (old_len >= ja->header->max_element_size) {
+ byte *b = oldvalue;
+ uint32_t el = old_len - sizeof(uint32_t);
+ uint32_t pos = *((uint32_t *)(b + el));
+ GRN_ASSERT(pos < el);
+ if (pos < value_len) {
+ uint32_t rest = value_len - pos;
+ memcpy(b, (byte *)value + rest, pos);
+ memcpy(b + el - rest, value, rest);
+ *((uint32_t *)(b + el)) = el - rest;
+ } else {
+ memcpy(b + pos - value_len, value, value_len);
+ *((uint32_t *)(b + el)) = pos - value_len;
+ }
+ return GRN_SUCCESS;
+ } else {
+ if ((rc = grn_ja_alloc(ctx, ja, id,
+ value_len + old_len + sizeof(uint32_t),
+ &einfo, &iw))) {
+ grn_ja_unref(ctx, &jw);
+ return rc;
+ }
+ memcpy(iw.addr, value, value_len);
+ memcpy((byte *)iw.addr + value_len, oldvalue, old_len);
+ memset((byte *)iw.addr + value_len + old_len, 0, sizeof(uint32_t));
+ grn_io_win_unmap2(&iw);
+ }
+ } else {
+ if ((rc = grn_ja_alloc(ctx, ja, id, value_len + old_len, &einfo, &iw))) {
+ grn_ja_unref(ctx, &jw);
+ return rc;
+ }
+ memcpy(iw.addr, value, value_len);
+ memcpy((byte *)iw.addr + value_len, oldvalue, old_len);
+ grn_io_win_unmap2(&iw);
+ }
+ grn_ja_unref(ctx, &jw);
+ } else {
+ set_value(ctx, ja, id, value, value_len, &einfo);
+ }
+ }
+ break;
+ case GRN_OBJ_DECR :
+ if (value_len == sizeof(int64_t)) {
+ int64_t *v = (int64_t *)&buf;
+ *v = -(*(int64_t *)value);
+ value = v;
+ } else if (value_len == sizeof(int32_t)) {
+ int32_t *v = (int32_t *)&buf;
+ *v = -(*(int32_t *)value);
+ value = v;
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+ /* fallthru */
+ case GRN_OBJ_INCR :
+ {
+ grn_io_win jw;
+ uint32_t old_len;
+ void *oldvalue = grn_ja_ref(ctx, ja, id, &jw, &old_len);
+ if (oldvalue && old_len) {
+ grn_rc rc = GRN_INVALID_ARGUMENT;
+ if (old_len == sizeof(int64_t) && value_len == sizeof(int64_t)) {
+ (*(int64_t *)oldvalue) += (*(int64_t *)value);
+ rc = GRN_SUCCESS;
+ } else if (old_len == sizeof(int32_t) && value_len == sizeof(int32_t)) {
+ (*(int32_t *)oldvalue) += (*(int32_t *)value);
+ rc = GRN_SUCCESS;
+ }
+ grn_ja_unref(ctx, &jw);
+ return rc;
+ }
+ }
+ /* fallthru */
+ case GRN_OBJ_SET :
+ if (value_len) {
+ set_value(ctx, ja, id, value, value_len, &einfo);
+ } else {
+ memset(&einfo, 0, sizeof(grn_ja_einfo));
+ }
+ break;
+ default :
+ ERR(GRN_INVALID_ARGUMENT, "grn_ja_put_raw called with illegal flags value");
+ return GRN_INVALID_ARGUMENT;
+ }
+ if ((rc = grn_ja_replace(ctx, ja, id, &einfo, cas))) {
+ if (!grn_io_lock(ctx, ja->io, grn_lock_timeout)) {
+ grn_ja_free(ctx, ja, &einfo);
+ grn_io_unlock(ja->io);
+ }
+ }
+ return rc;
+}
+
+grn_rc
+grn_ja_putv(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_obj *vector, int flags)
+{
+ grn_obj header, footer;
+ grn_rc rc = GRN_SUCCESS;
+ grn_section *vp;
+ int i, f = 0, n = grn_vector_size(ctx, vector);
+ GRN_TEXT_INIT(&header, 0);
+ GRN_TEXT_INIT(&footer, 0);
+ grn_text_benc(ctx, &header, n);
+ for (i = 0, vp = vector->u.v.sections; i < n; i++, vp++) {
+ grn_text_benc(ctx, &header, vp->length);
+ if (vp->weight || vp->domain) { f = 1; }
+ }
+ if (f) {
+ for (i = 0, vp = vector->u.v.sections; i < n; i++, vp++) {
+ grn_text_benc(ctx, &footer, vp->weight);
+ grn_text_benc(ctx, &footer, vp->domain);
+ }
+ }
+ {
+ grn_io_win iw;
+ grn_ja_einfo einfo;
+ grn_obj *body = vector->u.v.body;
+ size_t sizeh = GRN_BULK_VSIZE(&header);
+ size_t sizev = body ? GRN_BULK_VSIZE(body) : 0;
+ size_t sizef = GRN_BULK_VSIZE(&footer);
+ if ((rc = grn_ja_alloc(ctx, ja, id, sizeh + sizev + sizef, &einfo, &iw))) { goto exit; }
+ memcpy(iw.addr, GRN_BULK_HEAD(&header), sizeh);
+ if (body) { memcpy((char *)iw.addr + sizeh, GRN_BULK_HEAD(body), sizev); }
+ if (f) { memcpy((char *)iw.addr + sizeh + sizev, GRN_BULK_HEAD(&footer), sizef); }
+ grn_io_win_unmap2(&iw);
+ rc = grn_ja_replace(ctx, ja, id, &einfo, NULL);
+ }
+exit :
+ GRN_OBJ_FIN(ctx, &footer);
+ GRN_OBJ_FIN(ctx, &header);
+ return rc;
+}
+
+uint32_t
+grn_ja_size(grn_ctx *ctx, grn_ja *ja, grn_id id)
+{
+ grn_ja_einfo *einfo = NULL, *ei;
+ uint32_t lseg, *pseg, pos, size;
+ lseg = id >> JA_W_EINFO_IN_A_SEGMENT;
+ pos = id & JA_M_EINFO_IN_A_SEGMENT;
+ pseg = &ja->header->esegs[lseg];
+ if (*pseg == JA_ESEG_VOID) {
+ ctx->rc = GRN_INVALID_ARGUMENT;
+ return 0;
+ }
+ GRN_IO_SEG_REF(ja->io, *pseg, einfo);
+ if (!einfo) {
+ ctx->rc = GRN_NO_MEMORY_AVAILABLE;
+ return 0;
+ }
+ ei = &einfo[pos];
+ if (ETINY_P(ei)) {
+ ETINY_DEC(ei, size);
+ } else {
+ if (EHUGE_P(ei)) {
+ size = ei->u.h.size;
+ } else {
+ size = (ei->u.n.c2 << 16) + ei->u.n.size;
+ }
+ }
+ GRN_IO_SEG_UNREF(ja->io, *pseg);
+ return size;
+}
+
+grn_rc
+grn_ja_element_info(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ uint64_t *cas, uint32_t *pos, uint32_t *size)
+{
+ uint32_t pseg = ja->header->esegs[id >> JA_W_EINFO_IN_A_SEGMENT];
+ if (pseg == JA_ESEG_VOID) {
+ return GRN_INVALID_ARGUMENT;
+ } else {
+ grn_ja_einfo *einfo = NULL;
+ GRN_IO_SEG_REF(ja->io, pseg, einfo);
+ if (einfo) {
+ grn_ja_einfo *ei;
+ *cas = *((uint64_t *)&einfo[id & JA_M_EINFO_IN_A_SEGMENT]);
+ ei = (grn_ja_einfo *)cas;
+ if (ETINY_P(ei)) {
+ ETINY_DEC(ei, *size);
+ *pos = 0;
+ } else {
+ uint32_t jag;
+ if (EHUGE_P(ei)) {
+ EHUGE_DEC(ei, jag, *size);
+ *pos = 0;
+ } else {
+ EINFO_DEC(ei, jag, *pos, *size);
+ }
+ }
+ GRN_IO_SEG_UNREF(ja->io, pseg);
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+#ifdef GRN_WITH_ZLIB
+#include <zlib.h>
+
+static void *
+grn_ja_ref_zlib(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw, uint32_t *value_len)
+{
+ z_stream zstream;
+ void *zvalue;
+ uint32_t zvalue_len;
+ if (!(zvalue = grn_ja_ref_raw(ctx, ja, id, iw, &zvalue_len))) {
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ zstream.next_in = (Bytef *)(((uint64_t *)zvalue) + 1);
+ zstream.avail_in = zvalue_len + sizeof(uint64_t);
+ zstream.zalloc = Z_NULL;
+ zstream.zfree = Z_NULL;
+ if (inflateInit2(&zstream, 15 /* windowBits */) != Z_OK) {
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ if (!(iw->value = GRN_MALLOC(*((uint64_t *)zvalue)))) {
+ inflateEnd(&zstream);
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ zstream.next_out = (Bytef *)iw->value;
+ zstream.avail_out = *(uint64_t *)zvalue;
+ if (inflate(&zstream, Z_FINISH) != Z_STREAM_END) {
+ inflateEnd(&zstream);
+ GRN_FREE(iw->value);
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ *value_len = zstream.total_out;
+ if (inflateEnd(&zstream) != Z_OK) {
+ GRN_FREE(iw->value);
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ return iw->value;
+}
+#endif /* GRN_WITH_ZLIB */
+
+#ifdef GRN_WITH_LZO
+#include <lzo/lzo1x.h>
+
+static void *
+grn_ja_ref_lzo(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw, uint32_t *value_len)
+{
+ void *lvalue;
+ uint32_t lvalue_len;
+ lzo_uint lout_len;
+ if (!(lvalue = grn_ja_ref_raw(ctx, ja, id, iw, &lvalue_len))) {
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ if (!(iw->value = GRN_MALLOC(*((uint64_t *)lvalue)))) {
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ lout_len = *((uint64_t *)lvalue);
+ switch (lzo1x_decompress((lzo_bytep)(((uint64_t *)lvalue) + 1),
+ lvalue_len,
+ (lzo_bytep)(iw->value),
+ &lout_len,
+ NULL)) {
+ case LZO_E_OK :
+ case LZO_E_INPUT_NOT_CONSUMED :
+ break;
+ default :
+ GRN_FREE(iw->value);
+ iw->value = NULL;
+ *value_len = 0;
+ return NULL;
+ }
+ *value_len = lout_len;
+ return iw->value;
+}
+#endif /* GRN_WITH_LZO */
+
+void *
+grn_ja_ref(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw, uint32_t *value_len)
+{
+#ifdef GRN_WITH_ZLIB
+ if (ja->header->flags & GRN_OBJ_COMPRESS_ZLIB) {
+ return grn_ja_ref_zlib(ctx, ja, id, iw, value_len);
+ }
+#endif /* GRN_WITH_ZLIB */
+#ifdef GRN_WITH_LZO
+ if (ja->header->flags & GRN_OBJ_COMPRESS_LZO) {
+ return grn_ja_ref_lzo(ctx, ja, id, iw, value_len);
+ }
+#endif /* GRN_WITH_LZO */
+ return grn_ja_ref_raw(ctx, ja, id, iw, value_len);
+}
+
+grn_obj *
+grn_ja_get_value(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_obj *value)
+{
+ void *v;
+ uint32_t len;
+ grn_io_win iw;
+ if (!value) {
+ if (!(value = grn_obj_open(ctx, GRN_BULK, 0, 0))) {
+ ERR(GRN_INVALID_ARGUMENT, "grn_obj_get_value failed");
+ goto exit;
+ }
+ }
+ if ((v = grn_ja_ref(ctx, ja, id, &iw, &len))) {
+ if ((ja->header->flags & GRN_OBJ_RING_BUFFER) &&
+ len > ja->header->max_element_size) {
+ byte *b = v;
+ uint32_t el = len - sizeof(uint32_t);
+ uint32_t pos = *((uint32_t *)(b + el));
+ GRN_ASSERT(pos < el);
+ grn_bulk_write(ctx, value, (char *)(b + pos), el - pos);
+ grn_bulk_write(ctx, value, (char *)(b), pos);
+ } else {
+ grn_bulk_write(ctx, value, v, len);
+ }
+ grn_ja_unref(ctx, &iw);
+ }
+exit :
+ return value;
+}
+
+#ifdef GRN_WITH_ZLIB
+inline static grn_rc
+grn_ja_put_zlib(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ void *value, uint32_t value_len, int flags, uint64_t *cas)
+{
+ grn_rc rc;
+ z_stream zstream;
+ void *zvalue;
+ int zvalue_len;
+
+ if (value_len == 0) {
+ return grn_ja_put_raw(ctx, ja, id, value, value_len, flags, cas);
+ }
+
+ zstream.next_in = value;
+ zstream.avail_in = value_len;
+ zstream.zalloc = Z_NULL;
+ zstream.zfree = Z_NULL;
+ if (deflateInit2(&zstream, Z_DEFAULT_COMPRESSION, Z_DEFLATED,
+ 15 /* windowBits */,
+ 8 /* memLevel */,
+ Z_DEFAULT_STRATEGY) != Z_OK) {
+ ERR(GRN_ZLIB_ERROR, "deflateInit2 failed");
+ return ctx->rc;
+ }
+ zvalue_len = deflateBound(&zstream, value_len);
+ if (!(zvalue = GRN_MALLOC(zvalue_len + sizeof(uint64_t)))) { deflateEnd(&zstream); return GRN_NO_MEMORY_AVAILABLE; }
+ zstream.next_out = (Bytef *)(((uint64_t *)zvalue) + 1);
+ zstream.avail_out = zvalue_len;
+ if (deflate(&zstream, Z_FINISH) != Z_STREAM_END) {
+ deflateEnd(&zstream);
+ GRN_FREE(zvalue);
+ ERR(GRN_ZLIB_ERROR, "deflate failed");
+ return ctx->rc;
+ }
+ zvalue_len = zstream.total_out;
+ if (deflateEnd(&zstream) != Z_OK) {
+ GRN_FREE(zvalue);
+ ERR(GRN_ZLIB_ERROR, "deflateEnd failed");
+ return ctx->rc;
+ }
+ *(uint64_t *)zvalue = value_len;
+ rc = grn_ja_put_raw(ctx, ja, id, zvalue, zvalue_len + sizeof(uint64_t), flags, cas);
+ GRN_FREE(zvalue);
+ return rc;
+}
+#endif /* GRN_WITH_ZLIB */
+
+#ifdef GRN_WITH_LZO
+inline static grn_rc
+grn_ja_put_lzo(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ void *value, uint32_t value_len, int flags, uint64_t *cas)
+{
+ grn_rc rc;
+ void *lvalue, *lwork;
+ lzo_uint lvalue_len = value_len + value_len / 16 + 64 + 3;
+
+ if (value_len == 0) {
+ return grn_ja_put_raw(ctx, ja, id, value, value_len, flags, cas);
+ }
+
+ if (!(lvalue = GRN_MALLOC(lvalue_len + sizeof(uint64_t)))) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (!(lwork = GRN_MALLOC(LZO1X_1_MEM_COMPRESS))) { GRN_FREE(lvalue); return GRN_NO_MEMORY_AVAILABLE; }
+ if (lzo1x_1_compress(value, value_len, (lzo_bytep)((uint64_t *)lvalue + 1), &lvalue_len, lwork) != LZO_E_OK) {
+ GRN_FREE(lwork);
+ GRN_FREE(lvalue);
+ ERR(GRN_LZO_ERROR, "lzo1x_1_compress");
+ return ctx->rc;
+ }
+ GRN_FREE(lwork);
+ *(uint64_t *)lvalue = value_len;
+ rc = grn_ja_put_raw(ctx, ja, id, lvalue, lvalue_len + sizeof(uint64_t), flags, cas);
+ GRN_FREE(lvalue);
+ return rc;
+}
+#endif /* GRN_WITH_LZO */
+
+grn_rc
+grn_ja_put(grn_ctx *ctx, grn_ja *ja, grn_id id, void *value, uint32_t value_len,
+ int flags, uint64_t *cas)
+{
+#ifdef GRN_WITH_ZLIB
+ if (ja->header->flags & GRN_OBJ_COMPRESS_ZLIB) {
+ return grn_ja_put_zlib(ctx, ja, id, value, value_len, flags, cas);
+ }
+#endif /* GRN_WITH_ZLIB */
+#ifdef GRN_WITH_LZO
+ if (ja->header->flags & GRN_OBJ_COMPRESS_LZO) {
+ return grn_ja_put_lzo(ctx, ja, id, value, value_len, flags, cas);
+ }
+#endif /* GRN_WITH_LZO */
+ return grn_ja_put_raw(ctx, ja, id, value, value_len, flags, cas);
+}
+
+static grn_rc
+grn_ja_defrag_seg(grn_ctx *ctx, grn_ja *ja, uint32_t seg)
+{
+ byte *v = NULL, *ve;
+ uint32_t element_size, cum = 0, *seginfo = &SEGMENTS_AT(ja,seg), sum;
+ sum = (*seginfo & ~SEG_MASK);
+ GRN_IO_SEG_REF(ja->io, seg, v);
+ if (!v) { return GRN_NO_MEMORY_AVAILABLE; }
+ ve = v + JA_SEGMENT_SIZE;
+ while (v < ve && cum < sum) {
+ grn_id id = *((grn_id *)v);
+ if (!id) { break; }
+ if (id & DELETED) {
+ element_size = (id & ~DELETED);
+ } else {
+ uint64_t cas;
+ uint32_t pos;
+ if (grn_ja_element_info(ctx, ja, id, &cas, &pos, &element_size)) { break; }
+ if (v + sizeof(uint32_t) != ve - JA_SEGMENT_SIZE + pos) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "dseges[%d] = pos unmatch (%d != %" GRN_FMT_LLD ")",
+ seg, pos, (long long int)(v + sizeof(uint32_t) + JA_SEGMENT_SIZE - ve));
+ break;
+ }
+ if (grn_ja_put(ctx, ja, id, v + sizeof(uint32_t), element_size, GRN_OBJ_SET, &cas)) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "dseges[%d] = put failed (%d)", seg, id);
+ break;
+ }
+ element_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);
+ cum += sizeof(uint32_t) + element_size;
+ }
+ v += sizeof(uint32_t) + element_size;
+ }
+ if (*seginfo) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "dseges[%d] = %d after defrag", seg, (*seginfo & ~SEG_MASK));
+ }
+ GRN_IO_SEG_UNREF(ja->io, seg);
+ return GRN_SUCCESS;
+}
+
+int
+grn_ja_defrag(grn_ctx *ctx, grn_ja *ja, int threshold)
+{
+ int nsegs = 0;
+ uint32_t seg, ts = 1U << (GRN_JA_W_SEGMENT - threshold);
+ for (seg = 0; seg < JA_N_DSEGMENTS; seg++) {
+ if (seg == *(ja->header->curr_seg)) { continue; }
+ if (((SEGMENTS_AT(ja, seg) & SEG_MASK) == SEG_SEQ) &&
+ ((SEGMENTS_AT(ja, seg) & ~SEG_MASK) < ts)) {
+ if (!grn_ja_defrag_seg(ctx, ja, seg)) { nsegs++; }
+ }
+ }
+ return nsegs;
+}
+
+void
+grn_ja_check(grn_ctx *ctx, grn_ja *ja)
+{
+ char buf[8];
+ uint32_t seg;
+ struct grn_ja_header *h = ja->header;
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 8);
+ GRN_OUTPUT_MAP_OPEN("SUMMARY", 8);
+ GRN_OUTPUT_CSTR("flags");
+ grn_itoh(h->flags, buf, 8);
+ GRN_OUTPUT_STR(buf, 8);
+ GRN_OUTPUT_CSTR("curr seg");
+ GRN_OUTPUT_INT64(*(h->curr_seg));
+ GRN_OUTPUT_CSTR("curr pos");
+ GRN_OUTPUT_INT64(*(h->curr_pos));
+ GRN_OUTPUT_CSTR("max_element_size");
+ GRN_OUTPUT_INT64(h->max_element_size);
+ GRN_OUTPUT_CSTR("segregate_threshold");
+ GRN_OUTPUT_INT64(h->segregate_threshold);
+ GRN_OUTPUT_CSTR("n_element_variation");
+ GRN_OUTPUT_INT64(h->n_element_variation);
+ GRN_OUTPUT_MAP_CLOSE();
+ GRN_OUTPUT_ARRAY_OPEN("DETAIL", -1);
+ for (seg = 0; seg < JA_N_DSEGMENTS; seg++) {
+ int dseg = SEGMENTS_AT(ja, seg);
+ if (dseg) {
+ GRN_OUTPUT_MAP_OPEN("SEG", -1);
+ GRN_OUTPUT_CSTR("seg id");
+ GRN_OUTPUT_INT64(seg);
+ GRN_OUTPUT_CSTR("seg type");
+ GRN_OUTPUT_INT64((dseg & SEG_MASK)>>28);
+ GRN_OUTPUT_CSTR("seg value");
+ GRN_OUTPUT_INT64(dseg & ~SEG_MASK);
+ if ((dseg & SEG_MASK) == SEG_SEQ) {
+ byte *v = NULL, *ve;
+ uint32_t element_size, cum = 0, sum = dseg & ~SEG_MASK;
+ uint32_t n_del_elements = 0, n_elements = 0, s_del_elements = 0, s_elements = 0;
+ GRN_IO_SEG_REF(ja->io, seg, v);
+ if (v) {
+ /*
+ GRN_OUTPUT_CSTR("seg seq");
+ GRN_OUTPUT_ARRAY_OPEN("SEQ", -1);
+ */
+ ve = v + JA_SEGMENT_SIZE;
+ while (v < ve && cum < sum) {
+ grn_id id = *((grn_id *)v);
+ /*
+ GRN_OUTPUT_MAP_OPEN("ENTRY", -1);
+ GRN_OUTPUT_CSTR("id");
+ GRN_OUTPUT_INT64(id);
+ */
+ if (!id) { break; }
+ if (id & DELETED) {
+ element_size = (id & ~DELETED);
+ n_del_elements++;
+ s_del_elements += element_size;
+ } else {
+ element_size = grn_ja_size(ctx, ja, id);
+ element_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);
+ cum += sizeof(uint32_t) + element_size;
+ n_elements++;
+ s_elements += sizeof(uint32_t) + element_size;
+ }
+ v += sizeof(uint32_t) + element_size;
+ /*
+ GRN_OUTPUT_CSTR("size");
+ GRN_OUTPUT_INT64(element_size);
+ GRN_OUTPUT_CSTR("cum");
+ GRN_OUTPUT_INT64(cum);
+ GRN_OUTPUT_MAP_CLOSE();
+ */
+ }
+ GRN_IO_SEG_UNREF(ja->io, seg);
+ /*
+ GRN_OUTPUT_ARRAY_CLOSE();
+ */
+ GRN_OUTPUT_CSTR("n_elements");
+ GRN_OUTPUT_INT64(n_elements);
+ GRN_OUTPUT_CSTR("s_elements");
+ GRN_OUTPUT_INT64(s_elements);
+ GRN_OUTPUT_CSTR("n_del_elements");
+ GRN_OUTPUT_INT64(n_del_elements);
+ GRN_OUTPUT_CSTR("s_del_elements");
+ GRN_OUTPUT_INT64(s_del_elements);
+ if (cum != sum) {
+ GRN_OUTPUT_CSTR("cum gap");
+ GRN_OUTPUT_INT64(cum - sum);
+ }
+ }
+ }
+ GRN_OUTPUT_MAP_CLOSE();
+ }
+ }
+ GRN_OUTPUT_ARRAY_CLOSE();
+ GRN_OUTPUT_ARRAY_CLOSE();
+}
+
+/**** vgram ****/
+
+/*
+
+static int len_sum = 0;
+static int img_sum = 0;
+static int simple_sum = 0;
+static int skip_sum = 0;
+
+grn_vgram *
+grn_vgram_create(const char *path)
+{
+ grn_vgram *s;
+ if (!(s = GRN_GMALLOC(sizeof(grn_vgram)))) { return NULL; }
+ s->vgram = grn_sym_create(path, sizeof(grn_id) * 2, 0, GRN_ENC_NONE);
+ if (!s->vgram) {
+ GRN_GFREE(s);
+ return NULL;
+ }
+ return s;
+}
+
+grn_vgram *
+grn_vgram_open(const char *path)
+{
+ grn_vgram *s;
+ if (!(s = GRN_GMALLOC(sizeof(grn_vgram)))) { return NULL; }
+ s->vgram = grn_sym_open(path);
+ if (!s->vgram) {
+ GRN_GFREE(s);
+ return NULL;
+ }
+ return s;
+}
+
+grn_vgram_buf *
+grn_vgram_buf_open(size_t len)
+{
+ grn_vgram_buf *b;
+ if (!(b = GRN_GMALLOC(sizeof(grn_vgram_buf)))) { return NULL; }
+ b->len = len;
+ b->tvs = b->tvp = GRN_GMALLOC(sizeof(grn_id) * len);
+ if (!b->tvp) { GRN_GFREE(b); return NULL; }
+ b->tve = b->tvs + len;
+ b->vps = b->vpp = GRN_GMALLOC(sizeof(grn_vgram_vnode) * len * 2);
+ if (!b->vpp) { GRN_GFREE(b->tvp); GRN_GFREE(b); return NULL; }
+ b->vpe = b->vps + len;
+ return b;
+}
+
+grn_rc
+grn_vgram_buf_add(grn_vgram_buf *b, grn_id tid)
+{
+ uint8_t dummybuf[8], *dummyp;
+ if (b->tvp < b->tve) { *b->tvp++ = tid; }
+ dummyp = dummybuf;
+ GRN_B_ENC(tid, dummyp);
+ simple_sum += dummyp - dummybuf;
+ return GRN_SUCCESS;
+}
+
+typedef struct {
+ grn_id vid;
+ grn_id tid;
+} vgram_key;
+
+grn_rc
+grn_vgram_update(grn_vgram *vgram, grn_id rid, grn_vgram_buf *b, grn_hash *terms)
+{
+ grn_inv_updspec **u;
+ if (b && b->tvs < b->tvp) {
+ grn_id *t0, *tn;
+ for (t0 = b->tvs; t0 < b->tvp - 1; t0++) {
+ grn_vgram_vnode *v, **vp;
+ if (grn_set_at(terms, t0, (void **) &u)) {
+ vp = &(*u)->vnodes;
+ for (tn = t0 + 1; tn < b->tvp; tn++) {
+ for (v = *vp; v && v->tid != *tn; v = v->cdr) ;
+ if (!v) {
+ if (b->vpp < b->vpe) {
+ v = b->vpp++;
+ } else {
+ // todo;
+ break;
+ }
+ v->car = NULL;
+ v->cdr = *vp;
+ *vp = v;
+ v->tid = *tn;
+ v->vid = 0;
+ v->freq = 0;
+ v->len = tn - t0;
+ }
+ v->freq++;
+ if (v->vid) {
+ vp = &v->car;
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ {
+ grn_set *th = grn_set_open(sizeof(grn_id), sizeof(int), 0);
+ if (!th) { return GRN_NO_MEMORY_AVAILABLE; }
+ if (t0 == b->tvp) { GRN_LOG(ctx, GRN_LOG_DEBUG, "t0 == tvp"); }
+ for (t0 = b->tvs; t0 < b->tvp; t0++) {
+ grn_id vid, vid0 = *t0, vid1 = 0;
+ grn_vgram_vnode *v, *v2 = NULL, **vp;
+ if (grn_set_at(terms, t0, (void **) &u)) {
+ vp = &(*u)->vnodes;
+ for (tn = t0 + 1; tn < b->tvp; tn++) {
+ for (v = *vp; v; v = v->cdr) {
+ if (!v->vid && (v->freq < 2 || v->freq * v->len < 4)) {
+ *vp = v->cdr;
+ v->freq = 0;
+ }
+ if (v->tid == *tn) { break; }
+ vp = &v->cdr;
+ }
+ if (v) {
+ if (v->freq) {
+ v2 = v;
+ vid1 = vid0;
+ vid0 = v->vid;
+ }
+ if (v->vid) {
+ vp = &v->car;
+ continue;
+ }
+ }
+ break;
+ }
+ }
+ if (v2) {
+ if (!v2->vid) {
+ vgram_key key;
+ key.vid = vid1;
+ key.tid = v2->tid;
+ if (!(v2->vid = grn_sym_get(vgram->vgram, (char *)&key))) {
+ grn_set_close(th);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ vid = *t0 = v2->vid * 2 + 1;
+ memset(t0 + 1, 0, sizeof(grn_id) * v2->len);
+ t0 += v2->len;
+ } else {
+ vid = *t0 *= 2;
+ }
+ {
+ int *tf;
+ if (!grn_set_get(th, &vid, (void **) &tf)) {
+ grn_set_close(th);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ (*tf)++;
+ }
+ }
+ if (!th->n_entries) { GRN_LOG(ctx, GRN_LOG_DEBUG, "th->n_entries == 0"); }
+ {
+ int j = 0;
+ int skip = 0;
+ grn_set_eh *ehs, *ehp, *ehe;
+ grn_set_sort_optarg arg;
+ uint8_t *ps = GRN_GMALLOC(b->len * 2), *pp, *pe;
+ if (!ps) {
+ grn_set_close(th);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ pp = ps;
+ pe = ps + b->len * 2;
+ arg.mode = grn_sort_descending;
+ arg.compar = NULL;
+ arg.compar_arg = (void *)(intptr_t)sizeof(grn_id);
+ ehs = grn_set_sort(th, 0, &arg);
+ if (!ehs) {
+ GRN_GFREE(ps);
+ grn_set_close(th);
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ GRN_B_ENC(th->n_entries, pp);
+ for (ehp = ehs, ehe = ehs + th->n_entries; ehp < ehe; ehp++, j++) {
+ int *id = (int *)GRN_SET_INTVAL(*ehp);
+ GRN_B_ENC(*GRN_SET_INTKEY(*ehp), pp);
+ *id = j;
+ }
+ for (t0 = b->tvs; t0 < b->tvp; t0++) {
+ if (*t0) {
+ int *id;
+ if (!grn_set_at(th, t0, (void **) &id)) {
+ GRN_LOG(ctx, GRN_LOG_ERROR, "lookup error (%d)", *t0);
+ }
+ GRN_B_ENC(*id, pp);
+ } else {
+ skip++;
+ }
+ }
+ len_sum += b->len;
+ img_sum += pp - ps;
+ skip_sum += skip;
+ GRN_GFREE(ehs);
+ GRN_GFREE(ps);
+ }
+ grn_set_close(th);
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_vgram_buf_close(grn_vgram_buf *b)
+{
+ if (!b) { return GRN_INVALID_ARGUMENT; }
+ if (b->tvs) { GRN_GFREE(b->tvs); }
+ if (b->vps) { GRN_GFREE(b->vps); }
+ GRN_GFREE(b);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_vgram_close(grn_vgram *vgram)
+{
+ if (!vgram) { return GRN_INVALID_ARGUMENT; }
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "len=%d img=%d skip=%d simple=%d", len_sum, img_sum, skip_sum, simple_sum);
+ grn_sym_close(vgram->vgram);
+ GRN_GFREE(vgram);
+ return GRN_SUCCESS;
+}
+*/
diff --git a/storage/mroonga/vendor/groonga/lib/store.h b/storage/mroonga/vendor/groonga/lib/store.h
new file mode 100644
index 00000000000..719fe775bd9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/store.h
@@ -0,0 +1,160 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_STORE_H
+#define GRN_STORE_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_HASH_H
+#include "hash.h"
+#endif /* GRN_HASH_H */
+
+#ifndef GRN_IO_H
+#include "io.h"
+#endif /* GRN_IO_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**** fixed sized elements ****/
+
+typedef struct _grn_ra grn_ra;
+
+struct _grn_ra {
+ grn_db_obj obj;
+ grn_io *io;
+ int element_width;
+ int element_mask;
+ struct grn_ra_header *header;
+};
+
+struct grn_ra_header {
+ uint32_t element_size;
+ uint32_t nrecords; /* nrecords is not maintained by default */
+ uint32_t reserved[10];
+};
+
+grn_ra *grn_ra_create(grn_ctx *ctx, const char *path, unsigned int element_size);
+grn_ra *grn_ra_open(grn_ctx *ctx, const char *path);
+grn_rc grn_ra_info(grn_ctx *ctx, grn_ra *ra, unsigned int *element_size);
+grn_rc grn_ra_close(grn_ctx *ctx, grn_ra *ra);
+grn_rc grn_ra_remove(grn_ctx *ctx, const char *path);
+void *grn_ra_ref(grn_ctx *ctx, grn_ra *ra, grn_id id);
+grn_rc grn_ra_unref(grn_ctx *ctx, grn_ra *ra, grn_id id);
+
+typedef struct _grn_ra_cache grn_ra_cache;
+
+struct _grn_ra_cache {
+ void *p;
+ int32_t seg;
+};
+
+#define GRN_RA_CACHE_INIT(ra,c) do {\
+ (c)->p = NULL; (c)->seg = -1;\
+} while (0)
+
+#define GRN_RA_CACHE_FIN(ra,c) do {\
+ if ((c)->seg != -1) { GRN_IO_SEG_UNREF((ra)->io, (c)->seg); }\
+} while (0);
+
+void *grn_ra_ref_cache(grn_ctx *ctx, grn_ra *ra, grn_id id, grn_ra_cache *cache);
+
+/**** variable sized elements ****/
+
+extern grn_bool grn_ja_skip_same_value_put;
+
+typedef struct _grn_ja grn_ja;
+
+struct _grn_ja {
+ grn_db_obj obj;
+ grn_io *io;
+ struct grn_ja_header *header;
+};
+
+GRN_API grn_ja *grn_ja_create(grn_ctx *ctx, const char *path,
+ uint32_t max_element_size, uint32_t flags);
+grn_ja *grn_ja_open(grn_ctx *ctx, const char *path);
+grn_rc grn_ja_info(grn_ctx *ctx, grn_ja *ja, unsigned int *max_element_size);
+GRN_API grn_rc grn_ja_close(grn_ctx *ctx, grn_ja *ja);
+grn_rc grn_ja_remove(grn_ctx *ctx, const char *path);
+grn_rc grn_ja_put(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ void *value, uint32_t value_len, int flags, uint64_t *cas);
+int grn_ja_at(grn_ctx *ctx, grn_ja *ja, grn_id id, void *valbuf, int buf_size);
+
+GRN_API void *grn_ja_ref(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw,
+ uint32_t *value_len);
+grn_obj *grn_ja_get_value(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_obj *value);
+
+GRN_API grn_rc grn_ja_unref(grn_ctx *ctx, grn_io_win *iw);
+int grn_ja_defrag(grn_ctx *ctx, grn_ja *ja, int threshold);
+
+GRN_API grn_rc grn_ja_putv(grn_ctx *ctx, grn_ja *ja, grn_id id,
+ grn_obj *vector, int flags);
+GRN_API uint32_t grn_ja_size(grn_ctx *ctx, grn_ja *ja, grn_id id);
+
+void grn_ja_check(grn_ctx *ctx, grn_ja *ja);
+
+/*
+
+typedef struct _grn_vgram_vnode
+{
+ struct _grn_vgram_vnode *car;
+ struct _grn_vgram_vnode *cdr;
+ grn_id tid;
+ grn_id vid;
+ int freq;
+ int len;
+} grn_vgram_vnode;
+
+typedef struct _grn_vgram grn_vgram;
+struct _grn_vgram {
+ void *vgram;
+};
+
+struct _grn_vgram_buf {
+ size_t len;
+ grn_id *tvs;
+ grn_id *tvp;
+ grn_id *tve;
+ grn_vgram_vnode *vps;
+ grn_vgram_vnode *vpp;
+ grn_vgram_vnode *vpe;
+};
+
+grn_vgram *grn_vgram_create(const char *path);
+grn_vgram *grn_vgram_open(const char *path);
+grn_rc grn_vgram_close(grn_vgram *vgram);
+grn_rc grn_vgram_update(grn_vgram *vgram, grn_id rid, grn_vgram_buf *b, grn_hash *terms);
+
+grn_vgram_buf *grn_vgram_buf_open(size_t len);
+grn_rc grn_vgram_buf_add(grn_vgram_buf *b, grn_id tid);
+grn_rc grn_vgram_buf_close(grn_vgram_buf *b);
+
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_STORE_H */
diff --git a/storage/mroonga/vendor/groonga/lib/str.c b/storage/mroonga/vendor/groonga/lib/str.c
new file mode 100644
index 00000000000..29e532a8021
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/str.c
@@ -0,0 +1,3181 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <limits.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include "db.h"
+#include "str.h"
+
+#ifndef _ISOC99_SOURCE
+#define _ISOC99_SOURCE
+#endif /* _ISOC99_SOURCE */
+#include <math.h>
+
+/* For Visual C++ 2010. Drop the code when we drop Visual C++ 2010 support. */
+#if defined(_MSC_VER) && _MSC_VER < 1800
+# define va_copy(destination, source) destination = source
+#endif
+
+inline static int
+grn_str_charlen_utf8(grn_ctx *ctx, const unsigned char *str, const unsigned char *end)
+{
+ /* MEMO: This function allows non-null-terminated string as str. */
+ /* But requires the end of string. */
+ if (end <= str || !*str) {
+ return 0;
+ }
+ if (*str & 0x80) {
+ int i;
+ int len;
+ GRN_BIT_SCAN_REV(~(*str << 24), len);
+ len = 31 - len;
+ if ((unsigned int)(len - 2) >= 3) { /* (len == 1 || len >= 5) */
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "grn_str_charlen_utf8(): first byte is invalid");
+ return 0;
+ }
+ if (str + len > end) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "grn_str_charlen_utf8(): incomplete character");
+ return 0;
+ }
+ for (i = 1; i < len; ++i) {
+ if ((str[i] & 0xc0) != 0x80) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "grn_str_charlen_utf8(): <%d>th byte is invalid",
+ i + 1);
+ return 0;
+ }
+ }
+ return len;
+ } else {
+ return 1;
+ }
+}
+
+unsigned int
+grn_str_charlen(grn_ctx *ctx, const char *str, grn_encoding encoding)
+{
+ /* MEMO: This function requires null-terminated string as str.*/
+ unsigned char *p = (unsigned char *) str;
+ if (!*p) { return 0; }
+ switch (encoding) {
+ case GRN_ENC_EUC_JP :
+ if (*p & 0x80) {
+ if (*(p + 1)) {
+ return 2;
+ } else {
+ /* This is invalid character */
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid euc-jp string end on grn_str_charlen");
+ return 0;
+ }
+ }
+ return 1;
+ break;
+ case GRN_ENC_UTF8 :
+ if (*p & 0x80) {
+ int b, w;
+ size_t size;
+ for (b = 0x40, w = 0; b && (*p & b); b >>= 1, w++);
+ if (!w) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(1) on grn_str_charlen");
+ return 0;
+ }
+ for (size = 1; w--; size++) {
+ if (!*++p || (*p & 0xc0) != 0x80) {
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid utf8 string(2) on grn_str_charlen");
+ return 0;
+ }
+ }
+ return size;
+ } else {
+ return 1;
+ }
+ break;
+ case GRN_ENC_SJIS :
+ if (*p & 0x80) {
+ /* we regard 0xa0 as JIS X 0201 KANA. adjusted to other tools. */
+ if (0xa0 <= *p && *p <= 0xdf) {
+ /* hankaku-kana */
+ return 1;
+ } else if (!(*(p + 1))) {
+ /* This is invalid character */
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid sjis string end on grn_str_charlen");
+ return 0;
+ } else {
+ return 2;
+ }
+ } else {
+ return 1;
+ }
+ break;
+ default :
+ return 1;
+ break;
+ }
+ return 0;
+}
+
+int
+grn_charlen_(grn_ctx *ctx, const char *str, const char *end, grn_encoding encoding)
+{
+ /* MEMO: This function allows non-null-terminated string as str. */
+ /* But requires the end of string. */
+ unsigned char *p = (unsigned char *) str;
+ if (p >= (unsigned char *)end) { return 0; }
+ switch (encoding) {
+ case GRN_ENC_EUC_JP :
+ if (*p & 0x80) {
+ if ((p + 1) < (unsigned char *)end) {
+ return 2;
+ } else {
+ /* This is invalid character */
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid euc-jp string end on grn_charlen");
+ return 0;
+ }
+ }
+ return 1;
+ break;
+ case GRN_ENC_UTF8 :
+ return grn_str_charlen_utf8(ctx, p, (unsigned char *)end);
+ break;
+ case GRN_ENC_SJIS :
+ if (*p & 0x80) {
+ /* we regard 0xa0 as JIS X 0201 KANA. adjusted to other tools. */
+ if (0xa0 <= *p && *p <= 0xdf) {
+ /* hankaku-kana */
+ return 1;
+ } else if (++p >= (unsigned char *)end) {
+ /* This is invalid character */
+ GRN_LOG(ctx, GRN_LOG_WARNING, "invalid sjis string end on grn_charlen");
+ return 0;
+ } else {
+ return 2;
+ }
+ } else {
+ return 1;
+ }
+ break;
+ default :
+ return 1;
+ break;
+ }
+ return 0;
+}
+
+int
+grn_charlen(grn_ctx *ctx, const char *str, const char *end)
+{
+ return grn_charlen_(ctx, str, end, ctx->encoding);
+}
+
+static unsigned char symbol[] = {
+ ',', '.', 0, ':', ';', '?', '!', 0, 0, 0, '`', 0, '^', '~', '_', 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, '-', '-', '/', '\\', 0, 0, '|', 0, 0, 0, '\'', 0,
+ '"', '(', ')', 0, 0, '[', ']', '{', '}', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ '+', '-', 0, 0, 0, '=', 0, '<', '>', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ '$', 0, 0, '%', '#', '&', '*', '@', 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+inline static grn_rc
+normalize_euc(grn_ctx *ctx, grn_str *nstr)
+{
+ static uint16_t hankana[] = {
+ 0xa1a1, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1, 0xa5a3,
+ 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3, 0xa1bc, 0xa5a2,
+ 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, 0xa5af, 0xa5b1, 0xa5b3,
+ 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6,
+ 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5,
+ 0xa5d8, 0xa5db, 0xa5de, 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6,
+ 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab,
+ 0xa1eb
+ };
+ static unsigned char dakuten[] = {
+ 0xf4, 0, 0, 0, 0, 0xac, 0, 0xae, 0, 0xb0, 0, 0xb2, 0, 0xb4, 0, 0xb6, 0,
+ 0xb8, 0, 0xba, 0, 0xbc, 0, 0xbe, 0, 0xc0, 0, 0xc2, 0, 0, 0xc5, 0, 0xc7,
+ 0, 0xc9, 0, 0, 0, 0, 0, 0, 0xd0, 0, 0, 0xd3, 0, 0, 0xd6, 0, 0, 0xd9, 0,
+ 0, 0xdc
+ };
+ static unsigned char handaku[] = {
+ 0xd1, 0, 0, 0xd4, 0, 0, 0xd7, 0, 0, 0xda, 0, 0, 0xdd
+ };
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_, b;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->orig_blen, length = 0;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(size * 2 + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ d0 = (unsigned char *) nstr->norm;
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm);
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->norm);
+ nstr->checks = NULL;
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *) nstr->orig, d = d_ = d0; s < e; s++) {
+ if ((*s & 0x80)) {
+ if (((s + 1) < e) && (*(s + 1) & 0x80)) {
+ unsigned char c1 = *s++, c2 = *s, c3 = 0;
+ switch (c1 >> 4) {
+ case 0x08 :
+ if (c1 == 0x8e && 0xa0 <= c2 && c2 <= 0xdf) {
+ uint16_t c = hankana[c2 - 0xa0];
+ switch (c) {
+ case 0xa1ab :
+ if (d > d0 + 1 && d[-2] == 0xa5
+ && 0xa6 <= d[-1] && d[-1] <= 0xdb && (b = dakuten[d[-1] - 0xa6])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1] += 2; s_ += 2; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ case 0xa1eb :
+ if (d > d0 + 1 && d[-2] == 0xa5
+ && 0xcf <= d[-1] && d[-1] <= 0xdb && (b = handaku[d[-1] - 0xcf])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1] += 2; s_ += 2; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ default :
+ *d++ = c >> 8; *d = c & 0xff;
+ break;
+ }
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 0x09 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ case 0x0a :
+ switch (c1 & 0x0f) {
+ case 1 :
+ switch (c2) {
+ case 0xbc :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 0xb9 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ case 0xa1 :
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ break;
+ default :
+ if (c2 >= 0xa4 && (c3 = symbol[c2 - 0xa4])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ }
+ break;
+ case 2 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ case 3 :
+ c3 = c2 - 0x80;
+ if ('a' <= c3 && c3 <= 'z') {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c3;
+ } else if ('A' <= c3 && c3 <= 'Z') {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c3 + 0x20;
+ } else if ('0' <= c3 && c3 <= '9') {
+ ctype = GRN_CHAR_DIGIT;
+ *d = c3;
+ } else {
+ ctype = GRN_CHAR_OTHERS;
+ *d++ = c1; *d = c2;
+ }
+ break;
+ case 4 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_HIRAGANA;
+ break;
+ case 5 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 6 :
+ case 7 :
+ case 8 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ }
+ } else {
+ /* skip invalid character */
+ continue;
+ }
+ } else {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+
+#ifdef GRN_WITH_NFKC
+const char *grn_nfkc_map1(const unsigned char *str);
+const char *grn_nfkc_map2(const unsigned char *prefix, const unsigned char *suffix);
+
+inline static grn_rc
+normalize_utf8(grn_ctx *ctx, grn_str *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *s__ = NULL, *p, *p2, *pe, *e;
+ unsigned char *d, *d_, *de;
+ uint_least8_t *cp;
+ size_t length = 0, ls, lp, size = nstr->orig_blen, ds = size * 3;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(ds + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(ds * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm); nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(ds + 1))) {
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->norm); nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = nstr->ctypes;
+ d = (unsigned char *)nstr->norm;
+ de = d + ds;
+ d_ = NULL;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *)nstr->orig; ; s += ls) {
+ if (!(ls = grn_str_charlen_utf8(ctx, s, e))) {
+ break;
+ }
+ if ((p = (unsigned char *)grn_nfkc_map1(s))) {
+ pe = p + strlen((char *)p);
+ } else {
+ p = s;
+ pe = p + ls;
+ }
+ if (d_ && (p2 = (unsigned char *)grn_nfkc_map2(d_, p))) {
+ p = p2;
+ pe = p + strlen((char *)p);
+ if (cp) { cp--; }
+ if (ch) {
+ ch -= (d - d_);
+ s_ = s__;
+ }
+ d = d_;
+ length--;
+ }
+ for (; ; p += lp) {
+ if (!(lp = grn_str_charlen_utf8(ctx, p, pe))) {
+ break;
+ }
+ if ((*p == ' ' && removeblankp) || *p < 0x20 /* skip unprintable ascii */ ) {
+ if (cp > nstr->ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ } else {
+ if (de <= d + lp) {
+ unsigned char *norm;
+ ds += (ds >> 1) + lp;
+ if (!(norm = GRN_REALLOC(nstr->norm, ds + 1))) {
+ if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->norm); nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ de = norm + ds;
+ d = norm + (d - (unsigned char *)nstr->norm);
+ nstr->norm = (char *)norm;
+ if (ch) {
+ int16_t *checks;
+ if (!(checks = GRN_REALLOC(nstr->checks, ds * sizeof(int16_t)+ 1))) {
+ if (nstr->ctypes) { GRN_FREE(nstr->ctypes); nstr->ctypes = NULL; }
+ GRN_FREE(nstr->checks); nstr->checks = NULL;
+ GRN_FREE(nstr->norm); nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ ch = checks + (ch - nstr->checks);
+ nstr->checks = checks;
+ }
+ if (cp) {
+ uint_least8_t *ctypes;
+ if (!(ctypes = GRN_REALLOC(nstr->ctypes, ds + 1))) {
+ GRN_FREE(nstr->ctypes); nstr->ctypes = NULL;
+ if (nstr->checks) { GRN_FREE(nstr->checks); nstr->checks = NULL; }
+ GRN_FREE(nstr->norm); nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ cp = ctypes + (cp - nstr->ctypes);
+ nstr->ctypes = ctypes;
+ }
+ }
+ memcpy(d, p, lp);
+ d_ = d;
+ d += lp;
+ length++;
+ if (cp) { *cp++ = grn_nfkc_char_type(p); }
+ if (ch) {
+ size_t i;
+ if (s_ == s + ls) {
+ *ch++ = -1;
+ } else {
+ *ch++ = (int16_t)(s + ls - s_);
+ s__ = s_;
+ s_ = s + ls;
+ }
+ for (i = lp; i > 1; i--) { *ch++ = 0; }
+ }
+ }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+#endif /* GRN_WITH_NFKC */
+
+inline static grn_rc
+normalize_sjis(grn_ctx *ctx, grn_str *nstr)
+{
+ static uint16_t hankana[] = {
+ 0x8140, 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340, 0x8342,
+ 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362, 0x815b, 0x8341,
+ 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c, 0x834e, 0x8350, 0x8352,
+ 0x8354, 0x8356, 0x8358, 0x835a, 0x835c, 0x835e, 0x8360, 0x8363, 0x8365,
+ 0x8367, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, 0x8371, 0x8374,
+ 0x8377, 0x837a, 0x837d, 0x837e, 0x8380, 0x8381, 0x8382, 0x8384, 0x8386,
+ 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a,
+ 0x814b
+ };
+ static unsigned char dakuten[] = {
+ 0x94, 0, 0, 0, 0, 0x4b, 0, 0x4d, 0, 0x4f, 0, 0x51, 0, 0x53, 0, 0x55, 0,
+ 0x57, 0, 0x59, 0, 0x5b, 0, 0x5d, 0, 0x5f, 0, 0x61, 0, 0, 0x64, 0, 0x66,
+ 0, 0x68, 0, 0, 0, 0, 0, 0, 0x6f, 0, 0, 0x72, 0, 0, 0x75, 0, 0, 0x78, 0,
+ 0, 0x7b
+ };
+ static unsigned char handaku[] = {
+ 0x70, 0, 0, 0x73, 0, 0, 0x76, 0, 0, 0x79, 0, 0, 0x7c
+ };
+ int16_t *ch;
+ const unsigned char *s, *s_;
+ unsigned char *d, *d0, *d_, b, *e;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->orig_blen, length = 0;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(size * 2 + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ d0 = (unsigned char *) nstr->norm;
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * 2 * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm);
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->norm);
+ nstr->checks = NULL;
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *) nstr->orig, d = d_ = d0; s < e; s++) {
+ if ((*s & 0x80)) {
+ if (0xa0 <= *s && *s <= 0xdf) {
+ uint16_t c = hankana[*s - 0xa0];
+ switch (c) {
+ case 0x814a :
+ if (d > d0 + 1 && d[-2] == 0x83
+ && 0x45 <= d[-1] && d[-1] <= 0x7a && (b = dakuten[d[-1] - 0x45])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1]++; s_++; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ case 0x814b :
+ if (d > d0 + 1 && d[-2] == 0x83
+ && 0x6e <= d[-1] && d[-1] <= 0x7a && (b = handaku[d[-1] - 0x6e])) {
+ *(d - 1) = b;
+ if (ch) { ch[-1]++; s_++; }
+ continue;
+ } else {
+ *d++ = c >> 8; *d = c & 0xff;
+ }
+ break;
+ default :
+ *d++ = c >> 8; *d = c & 0xff;
+ break;
+ }
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ if ((s + 1) < e && 0x40 <= *(s + 1) && *(s + 1) <= 0xfc) {
+ unsigned char c1 = *s++, c2 = *s, c3 = 0;
+ if (0x81 <= c1 && c1 <= 0x87) {
+ switch (c1 & 0x0f) {
+ case 1 :
+ switch (c2) {
+ case 0x5b :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ break;
+ case 0x58 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ break;
+ case 0x40 :
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ break;
+ default :
+ if (0x43 <= c2 && c2 <= 0x7e && (c3 = symbol[c2 - 0x43])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else if (0x7f <= c2 && c2 <= 0x97 && (c3 = symbol[c2 - 0x44])) {
+ *d = c3;
+ ctype = GRN_CHAR_SYMBOL;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ }
+ break;
+ case 2 :
+ c3 = c2 - 0x1f;
+ if (0x4f <= c2 && c2 <= 0x58) {
+ ctype = GRN_CHAR_DIGIT;
+ *d = c2 - 0x1f;
+ } else if (0x60 <= c2 && c2 <= 0x79) {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c2 + 0x01;
+ } else if (0x81 <= c2 && c2 <= 0x9a) {
+ ctype = GRN_CHAR_ALPHA;
+ *d = c2 - 0x20;
+ } else if (0x9f <= c2 && c2 <= 0xf1) {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_HIRAGANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 3 :
+ if (0x40 <= c2 && c2 <= 0x96) {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KATAKANA;
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 4 :
+ case 7 :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_SYMBOL;
+ break;
+ default :
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ } else {
+ *d++ = c1; *d = c2;
+ ctype = GRN_CHAR_KANJI;
+ }
+ } else {
+ /* skip invalid character */
+ continue;
+ }
+ }
+ } else {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+normalize_none(grn_ctx *ctx, grn_str *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->orig_blen, length = 0;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(size + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ d0 = (unsigned char *) nstr->norm;
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm);
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->norm);
+ nstr->checks = NULL;
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *) nstr->orig, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+
+/* use cp1252 as latin1 */
+inline static grn_rc
+normalize_latin1(grn_ctx *ctx, grn_str *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = nstr->orig_blen, length = 0;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(size + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ d0 = (unsigned char *) nstr->norm;
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm);
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->norm);
+ nstr->checks = NULL;
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *) nstr->orig, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ case 8 :
+ if (c == 0x8a || c == 0x8c || c == 0x8e) {
+ *d = c + 0x10;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 9 :
+ if (c == 0x9a || c == 0x9c || c == 0x9e || c == 0x9f) {
+ *d = (c == 0x9f) ? c + 0x60 : c;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 0x0c :
+ *d = c + 0x20;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0d :
+ *d = (c == 0xd7 || c == 0xdf) ? c : c + 0x20;
+ ctype = (c == 0xd7) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 0x0e :
+ *d = c;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0f :
+ *d = c;
+ ctype = (c == 0xf7) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+
+inline static grn_rc
+normalize_koi8r(grn_ctx *ctx, grn_str *nstr)
+{
+ int16_t *ch;
+ const unsigned char *s, *s_, *e;
+ unsigned char *d, *d0, *d_;
+ uint_least8_t *cp, *ctypes, ctype;
+ size_t size = strlen(nstr->orig), length = 0;
+ int removeblankp = nstr->flags & GRN_STR_REMOVEBLANK;
+ if (!(nstr->norm = GRN_MALLOC(size + 1))) {
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ d0 = (unsigned char *) nstr->norm;
+ if (nstr->flags & GRN_STR_WITH_CHECKS) {
+ if (!(nstr->checks = GRN_MALLOC(size * sizeof(int16_t) + 1))) {
+ GRN_FREE(nstr->norm);
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ ch = nstr->checks;
+ if (nstr->flags & GRN_STR_WITH_CTYPES) {
+ if (!(nstr->ctypes = GRN_MALLOC(size + 1))) {
+ GRN_FREE(nstr->checks);
+ GRN_FREE(nstr->norm);
+ nstr->checks = NULL;
+ nstr->norm = NULL;
+ return GRN_NO_MEMORY_AVAILABLE;
+ }
+ }
+ cp = ctypes = nstr->ctypes;
+ e = (unsigned char *)nstr->orig + size;
+ for (s = s_ = (unsigned char *) nstr->orig, d = d_ = d0; s < e; s++) {
+ unsigned char c = *s;
+ switch (c >> 4) {
+ case 0 :
+ case 1 :
+ /* skip unprintable ascii */
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ case 2 :
+ if (c == 0x20) {
+ if (removeblankp) {
+ if (cp > ctypes) { *(cp - 1) |= GRN_STR_BLANK; }
+ continue;
+ } else {
+ *d = ' ';
+ ctype = GRN_STR_BLANK|GRN_CHAR_SYMBOL;
+ }
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_SYMBOL;
+ }
+ break;
+ case 3 :
+ *d = c;
+ ctype = (c <= 0x39) ? GRN_CHAR_DIGIT : GRN_CHAR_SYMBOL;
+ break;
+ case 4 :
+ *d = ('A' <= c) ? c + 0x20 : c;
+ ctype = (c == 0x40) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 5 :
+ *d = (c <= 'Z') ? c + 0x20 : c;
+ ctype = (c <= 0x5a) ? GRN_CHAR_ALPHA : GRN_CHAR_SYMBOL;
+ break;
+ case 6 :
+ *d = c;
+ ctype = (c == 0x60) ? GRN_CHAR_SYMBOL : GRN_CHAR_ALPHA;
+ break;
+ case 7 :
+ *d = c;
+ ctype = (c <= 0x7a) ? GRN_CHAR_ALPHA : (c == 0x7f ? GRN_CHAR_OTHERS : GRN_CHAR_SYMBOL);
+ break;
+ case 0x0a :
+ *d = c;
+ ctype = (c == 0xa3) ? GRN_CHAR_ALPHA : GRN_CHAR_OTHERS;
+ break;
+ case 0x0b :
+ if (c == 0xb3) {
+ *d = c - 0x10;
+ ctype = GRN_CHAR_ALPHA;
+ } else {
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ }
+ break;
+ case 0x0c :
+ case 0x0d :
+ *d = c;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ case 0x0e :
+ case 0x0f :
+ *d = c - 0x20;
+ ctype = GRN_CHAR_ALPHA;
+ break;
+ default :
+ *d = c;
+ ctype = GRN_CHAR_OTHERS;
+ break;
+ }
+ d++;
+ length++;
+ if (cp) { *cp++ = ctype; }
+ if (ch) {
+ *ch++ = (int16_t)(s + 1 - s_);
+ s_ = s + 1;
+ while (++d_ < d) { *ch++ = 0; }
+ }
+ }
+ if (cp) { *cp = GRN_CHAR_NULL; }
+ *d = '\0';
+ nstr->length = length;
+ nstr->norm_blen = (size_t)(d - (unsigned char *)nstr->norm);
+ return GRN_SUCCESS;
+}
+
+static grn_str *
+grn_fakenstr_open(grn_ctx *ctx, const char *str, size_t str_len, grn_encoding encoding, int flags)
+{
+ /* TODO: support GRN_STR_REMOVEBLANK flag and ctypes */
+ grn_str *nstr;
+ if (!(nstr = GRN_MALLOC(sizeof(grn_str)))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "memory allocation on grn_fakenstr_open failed !");
+ return NULL;
+ }
+ if (!(nstr->norm = GRN_MALLOC(str_len + 1))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "memory allocation for keyword on grn_snip_add_cond failed !");
+ GRN_FREE(nstr);
+ return NULL;
+ }
+ nstr->orig = str;
+ nstr->orig_blen = str_len;
+ memcpy(nstr->norm, str, str_len);
+ nstr->norm[str_len] = '\0';
+ nstr->norm_blen = str_len;
+ nstr->ctypes = NULL;
+ nstr->flags = flags;
+
+ if (flags & GRN_STR_WITH_CHECKS) {
+ int16_t f = 0;
+ unsigned char c;
+ size_t i;
+ if (!(nstr->checks = (int16_t *) GRN_MALLOC(sizeof(int16_t) * str_len))) {
+ GRN_FREE(nstr->norm);
+ GRN_FREE(nstr);
+ return NULL;
+ }
+ switch (encoding) {
+ case GRN_ENC_EUC_JP:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = ((c >= 0xa1U && c <= 0xfeU) || c == 0x8eU ? 2 : (c == 0x8fU ? 3 : 1)
+ );
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ case GRN_ENC_SJIS:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = (c >= 0x81U && ((c <= 0x9fU) || (c >= 0xe0U && c <= 0xfcU)) ? 2 : 1);
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ case GRN_ENC_UTF8:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = (c & 0x80U ? (c & 0x20U ? (c & 0x10U ? 4 : 3)
+ : 2)
+ : 1);
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ default:
+ for (i = 0; i < str_len; i++) {
+ nstr->checks[i] = 1;
+ }
+ break;
+ }
+ } else {
+ nstr->checks = NULL;
+ }
+ return nstr;
+}
+
+grn_str *
+grn_str_open_(grn_ctx *ctx, const char *str, unsigned int str_len, int flags, grn_encoding encoding)
+{
+ grn_rc rc;
+ grn_str *nstr;
+ if (!str || !str_len) { return NULL; }
+
+ if (!(flags & GRN_STR_NORMALIZE)) {
+ return grn_fakenstr_open(ctx, str, str_len, encoding, flags);
+ }
+
+ if (!(nstr = GRN_MALLOC(sizeof(grn_str)))) {
+ GRN_LOG(ctx, GRN_LOG_ALERT, "memory allocation on grn_str_open failed !");
+ return NULL;
+ }
+ nstr->orig = str;
+ nstr->orig_blen = str_len;
+ nstr->norm = NULL;
+ nstr->norm_blen = 0;
+ nstr->checks = NULL;
+ nstr->ctypes = NULL;
+ nstr->encoding = encoding;
+ nstr->flags = flags;
+ switch (encoding) {
+ case GRN_ENC_EUC_JP :
+ rc = normalize_euc(ctx, nstr);
+ break;
+ case GRN_ENC_UTF8 :
+#ifdef GRN_WITH_NFKC
+ rc = normalize_utf8(ctx, nstr);
+#else /* GRN_WITH_NFKC */
+ rc = normalize_none(ctx, nstr);
+#endif /* GRN_WITH_NFKC */
+ break;
+ case GRN_ENC_SJIS :
+ rc = normalize_sjis(ctx, nstr);
+ break;
+ case GRN_ENC_LATIN1 :
+ rc = normalize_latin1(ctx, nstr);
+ break;
+ case GRN_ENC_KOI8R :
+ rc = normalize_koi8r(ctx, nstr);
+ break;
+ default :
+ rc = normalize_none(ctx, nstr);
+ break;
+ }
+ if (rc) {
+ grn_str_close(ctx, nstr);
+ return NULL;
+ }
+ return nstr;
+}
+
+grn_str *
+grn_str_open(grn_ctx *ctx, const char *str, unsigned int str_len, int flags)
+{
+ return grn_str_open_(ctx, str, str_len, flags, ctx->encoding);
+}
+
+grn_rc
+grn_str_close(grn_ctx *ctx, grn_str *nstr)
+{
+ if (nstr) {
+ if (nstr->norm) { GRN_FREE(nstr->norm); }
+ if (nstr->ctypes) { GRN_FREE(nstr->ctypes); }
+ if (nstr->checks) { GRN_FREE(nstr->checks); }
+ GRN_FREE(nstr);
+ return GRN_SUCCESS;
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+}
+
+static const char *grn_enc_string[] = {
+ "default",
+ "none",
+ "euc_jp",
+ "utf8",
+ "sjis",
+ "latin1",
+ "koi8r"
+};
+
+const char *
+grn_encoding_to_string(grn_encoding enc)
+{
+ if (enc < (sizeof(grn_enc_string) / sizeof(char *))) {
+ return grn_enc_string[enc];
+ } else {
+ return "unknown";
+ }
+}
+
+grn_encoding
+grn_encoding_parse(const char *str)
+{
+ grn_encoding e = GRN_ENC_UTF8;
+ int i = sizeof(grn_enc_string) / sizeof(grn_enc_string[0]);
+ while (i--) {
+ if (!strcmp(str, grn_enc_string[i])) {
+ e = (grn_encoding)i;
+ }
+ }
+ return e;
+}
+
+size_t
+grn_str_len(grn_ctx *ctx, const char *str, grn_encoding encoding, const char **last)
+{
+ size_t len, tlen;
+ const char *p = NULL;
+ for (len = 0; ; len++) {
+ p = str;
+ if (!(tlen = grn_str_charlen(ctx, str, encoding))) {
+ break;
+ }
+ str += tlen;
+ }
+ if (last) { *last = p; }
+ return len;
+}
+
+int
+grn_isspace(const char *str, grn_encoding encoding)
+{
+ const unsigned char *s = (const unsigned char *) str;
+ if (!s) { return 0; }
+ switch (s[0]) {
+ case ' ' :
+ case '\f' :
+ case '\n' :
+ case '\r' :
+ case '\t' :
+ case '\v' :
+ return 1;
+ case 0x81 :
+ if (encoding == GRN_ENC_SJIS && s[1] == 0x40) { return 2; }
+ break;
+ case 0xA1 :
+ if (encoding == GRN_ENC_EUC_JP && s[1] == 0xA1) { return 2; }
+ break;
+ case 0xE3 :
+ if (encoding == GRN_ENC_UTF8 && s[1] == 0x80 && s[2] == 0x80) { return 3; }
+ break;
+ default :
+ break;
+ }
+ return 0;
+}
+
+int8_t
+grn_atoi8(const char *nptr, const char *end, const char **rest)
+{
+ const char *p = nptr;
+ int8_t v = 0, t, n = 0, o = 0;
+ if (p < end && *p == '-') {
+ p++;
+ n = 1;
+ o = 1;
+ }
+ while (p < end && *p >= '0' && *p <= '9') {
+ t = v * 10 - (*p - '0');
+ if (t > v || (!n && t == INT8_MIN)) { v = 0; break; }
+ v = t;
+ o = 0;
+ p++;
+ }
+ if (rest) { *rest = o ? nptr : p; }
+ return n ? v : -v;
+}
+
+uint8_t
+grn_atoui8(const char *nptr, const char *end, const char **rest)
+{
+ uint8_t v = 0, t;
+ while (nptr < end && *nptr >= '0' && *nptr <= '9') {
+ t = v * 10 + (*nptr - '0');
+ if (t < v) { v = 0; break; }
+ v = t;
+ nptr++;
+ }
+ if (rest) { *rest = nptr; }
+ return v;
+}
+
+int16_t
+grn_atoi16(const char *nptr, const char *end, const char **rest)
+{
+ const char *p = nptr;
+ int16_t v = 0, t, n = 0, o = 0;
+ if (p < end && *p == '-') {
+ p++;
+ n = 1;
+ o = 1;
+ }
+ while (p < end && *p >= '0' && *p <= '9') {
+ t = v * 10 - (*p - '0');
+ if (t > v || (!n && t == INT16_MIN)) { v = 0; break; }
+ v = t;
+ o = 0;
+ p++;
+ }
+ if (rest) { *rest = o ? nptr : p; }
+ return n ? v : -v;
+}
+
+uint16_t
+grn_atoui16(const char *nptr, const char *end, const char **rest)
+{
+ uint16_t v = 0, t;
+ while (nptr < end && *nptr >= '0' && *nptr <= '9') {
+ t = v * 10 + (*nptr - '0');
+ if (t < v) { v = 0; break; }
+ v = t;
+ nptr++;
+ }
+ if (rest) { *rest = nptr; }
+ return v;
+}
+
+int
+grn_atoi(const char *nptr, const char *end, const char **rest)
+{
+ const char *p = nptr;
+ int v = 0, t, n = 0, o = 0;
+ if (p < end && *p == '-') {
+ p++;
+ n = 1;
+ o = 1;
+ }
+ while (p < end && *p >= '0' && *p <= '9') {
+ t = v * 10 - (*p - '0');
+ if (t > v || (!n && t == INT32_MIN)) { v = 0; break; }
+ v = t;
+ o = 0;
+ p++;
+ }
+ if (rest) { *rest = o ? nptr : p; }
+ return n ? v : -v;
+}
+
+unsigned int
+grn_atoui(const char *nptr, const char *end, const char **rest)
+{
+ unsigned int v = 0, t;
+ while (nptr < end && *nptr >= '0' && *nptr <= '9') {
+ t = v * 10 + (*nptr - '0');
+ if (t < v) { v = 0; break; }
+ v = t;
+ nptr++;
+ }
+ if (rest) { *rest = nptr; }
+ return v;
+}
+
+int64_t
+grn_atoll(const char *nptr, const char *end, const char **rest)
+{
+ /* FIXME: INT_MIN is not supported */
+ const char *p = nptr;
+ int n = 0, o = 0;
+ int64_t v = 0, t;
+ if (p < end && *p == '-') {
+ p++;
+ n = 1;
+ o = 1;
+ }
+ while (p < end && *p >= '0' && *p <= '9') {
+ t = v * 10 + (*p - '0');
+ if (t < v) { v = 0; break; }
+ v = t;
+ o = 0;
+ p++;
+ }
+ if (rest) { *rest = o ? nptr : p; }
+ return n ? -v : v;
+}
+
+unsigned int
+grn_htoui(const char *nptr, const char *end, const char **rest)
+{
+ unsigned int v = 0, t;
+ while (nptr < end) {
+ switch (*nptr) {
+ case '0' :
+ case '1' :
+ case '2' :
+ case '3' :
+ case '4' :
+ case '5' :
+ case '6' :
+ case '7' :
+ case '8' :
+ case '9' :
+ t = v * 16 + (*nptr++ - '0');
+ break;
+ case 'a' :
+ case 'b' :
+ case 'c' :
+ case 'd' :
+ case 'e' :
+ case 'f' :
+ t = v * 16 + (*nptr++ - 'a') + 10;
+ break;
+ case 'A' :
+ case 'B' :
+ case 'C' :
+ case 'D' :
+ case 'E' :
+ case 'F' :
+ t = v * 16 + (*nptr++ - 'A') + 10;
+ break;
+ default :
+ v = 0; goto exit;
+ }
+ if (t < v) { v = 0; goto exit; }
+ v = t;
+ }
+exit :
+ if (rest) { *rest = nptr; }
+ return v;
+}
+
+void
+grn_itoh(unsigned int i, char *p, unsigned int len)
+{
+ static const char *hex = "0123456789ABCDEF";
+ p += len - 1;
+ while (len--) {
+ *p-- = hex[i & 0xf];
+ i >>= 4;
+ }
+}
+
+grn_rc
+grn_itoa(int i, char *p, char *end, char **rest)
+{
+ char *q;
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ q = p;
+ if (i < 0) {
+ *p++ = '-';
+ q = p;
+ if (i == INT_MIN) {
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ *p++ = (-(i % 10)) + '0';
+ i /= 10;
+ }
+ i = -i;
+ }
+ do {
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ *p++ = i % 10 + '0';
+ } while ((i /= 10) > 0);
+ if (rest) { *rest = p; }
+ for (p--; q < p; q++, p--) {
+ char t = *q;
+ *q = *p;
+ *p = t;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_itoa_padded(int i, char *p, char *end, char ch)
+{
+ char *q;
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ if (i < 0) {
+ *p++ = '-';
+ if (i == INT_MIN) {
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ *p++ = (-(i % 10)) + '0';
+ i /= 10;
+ }
+ i = -i;
+ }
+ q = end - 1;
+ do {
+ if (q < p) { return GRN_INVALID_ARGUMENT; }
+ *q-- = i % 10 + '0';
+ } while ((i /= 10) > 0);
+ while (q >= p) {
+ *q-- = ch;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_lltoa(int64_t i, char *p, char *end, char **rest)
+{
+ char *q;
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ q = p;
+ if (i < 0) {
+ *p++ = '-';
+ q = p;
+ if (i == INT64_MIN) {
+ *p++ = (-(i % 10)) + '0';
+ i /= 10;
+ }
+ i = -i;
+ }
+ do {
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ *p++ = i % 10 + '0';
+ } while ((i /= 10) > 0);
+ if (rest) { *rest = p; }
+ for (p--; q < p; q++, p--) {
+ char t = *q;
+ *q = *p;
+ *p = t;
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_ulltoa(uint64_t i, char *p, char *end, char **rest)
+{
+ char *q;
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ q = p;
+ do {
+ if (p >= end) { return GRN_INVALID_ARGUMENT; }
+ *p++ = i % 10 + '0';
+ } while ((i /= 10) > 0);
+ if (rest) { *rest = p; }
+ for (p--; q < p; q++, p--) {
+ char t = *q;
+ *q = *p;
+ *p = t;
+ }
+ return GRN_SUCCESS;
+}
+
+#define I2B(i) \
+ ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(i) & 0x3f])
+
+#define B2I(b) \
+ (((b) < '+' || 'z' < (b)) ? 0xff : "\x3e\xff\xff\xff\x3f\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\xff\xff\xff\xff\xff\xff\xff\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\xff\xff\xff\xff\xff\xff\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33"[(b) - '+'])
+
+#define MASK 0x34d34d34
+
+char *
+grn_itob(grn_id id, char *p)
+{
+ id ^= MASK;
+ *p++ = I2B(id >> 24);
+ *p++ = I2B(id >> 18);
+ *p++ = I2B(id >> 12);
+ *p++ = I2B(id >> 6);
+ *p++ = I2B(id);
+ return p;
+}
+
+grn_id
+grn_btoi(char *b)
+{
+ uint8_t i;
+ grn_id id = 0;
+ int len = 5;
+ while (len--) {
+ char c = *b++;
+ if ((i = B2I(c)) == 0xff) { return 0; }
+ id = (id << 6) + i;
+ }
+ return id ^ MASK;
+}
+
+#define I2B32H(i) ("0123456789ABCDEFGHIJKLMNOPQRSTUV"[(i) & 0x1f])
+
+char *
+grn_lltob32h(int64_t i, char *p)
+{
+ uint64_t u = (uint64_t)i + 0x8000000000000000ULL;
+ *p++ = I2B32H(u >> 60);
+ *p++ = I2B32H(u >> 55);
+ *p++ = I2B32H(u >> 50);
+ *p++ = I2B32H(u >> 45);
+ *p++ = I2B32H(u >> 40);
+ *p++ = I2B32H(u >> 35);
+ *p++ = I2B32H(u >> 30);
+ *p++ = I2B32H(u >> 25);
+ *p++ = I2B32H(u >> 20);
+ *p++ = I2B32H(u >> 15);
+ *p++ = I2B32H(u >> 10);
+ *p++ = I2B32H(u >> 5);
+ *p++ = I2B32H(u);
+ return p;
+}
+
+char *
+grn_ulltob32h(uint64_t i, char *p)
+{
+ char lb = (i >> 59) & 0x10;
+ i += 0x8000000000000000ULL;
+ *p++ = lb + I2B32H(i >> 60);
+ *p++ = I2B32H(i >> 55);
+ *p++ = I2B32H(i >> 50);
+ *p++ = I2B32H(i >> 45);
+ *p++ = I2B32H(i >> 40);
+ *p++ = I2B32H(i >> 35);
+ *p++ = I2B32H(i >> 30);
+ *p++ = I2B32H(i >> 25);
+ *p++ = I2B32H(i >> 20);
+ *p++ = I2B32H(i >> 15);
+ *p++ = I2B32H(i >> 10);
+ *p++ = I2B32H(i >> 5);
+ *p++ = I2B32H(i);
+ return p;
+}
+
+grn_rc
+grn_aton(grn_ctx *ctx, const char *p, const char *end, const char **rest,
+ grn_obj *res)
+{
+ if (*p == '+') {
+ p++;
+ }
+
+ switch (*p) {
+ case '-' :
+ case '0' : case '1' : case '2' : case '3' : case '4' :
+ case '5' : case '6' : case '7' : case '8' : case '9' :
+ {
+ int64_t int64;
+ char rest_char;
+ int64 = grn_atoll(p, end, rest);
+ rest_char = **rest;
+ if (end == *rest) {
+ if ((int64_t)INT32_MIN <= int64 && int64 <= (int64_t)INT32_MAX) {
+ grn_obj_reinit(ctx, res, GRN_DB_INT32, 0);
+ GRN_INT32_SET(ctx, res, int64);
+ } else if ((int64_t)INT32_MAX < int64 && int64 <= (int64_t)UINT32_MAX) {
+ grn_obj_reinit(ctx, res, GRN_DB_UINT32, 0);
+ GRN_UINT32_SET(ctx, res, int64);
+ } else {
+ grn_obj_reinit(ctx, res, GRN_DB_INT64, 0);
+ GRN_INT64_SET(ctx, res, int64);
+ }
+ } else if (rest_char == '.' || rest_char == 'e' || rest_char == 'E' ||
+ (rest_char >= '0' && rest_char <= '9')) {
+ char *rest_float;
+ double d;
+ errno = 0;
+ d = strtod(p, &rest_float);
+ if (!errno && rest_float == end) {
+ grn_obj_reinit(ctx, res, GRN_DB_FLOAT, 0);
+ GRN_FLOAT_SET(ctx, res, d);
+ *rest = rest_float;
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+ }
+ }
+ break;
+ default :
+ return GRN_INVALID_ARGUMENT;
+ break;
+ }
+
+ return GRN_SUCCESS;
+}
+
+int
+grn_str_tok(const char *str, size_t str_len, char delim, const char **tokbuf, int buf_size, const char **rest)
+{
+ const char **tok = tokbuf, **tok_end = tokbuf + buf_size;
+ if (buf_size > 0) {
+ const char *str_end = str + str_len;
+ for (;;str++) {
+ if (str == str_end) {
+ *tok++ = str;
+ break;
+ }
+ if (delim == *str) {
+ // *str = '\0';
+ *tok++ = str;
+ if (tok == tok_end) { break; }
+ }
+ }
+ }
+ if (rest) { *rest = str; }
+ return tok - tokbuf;
+}
+
+inline static int
+op_getopt_flag(int *flags, const grn_str_getopt_opt *o,
+ int argc, char * const argv[], int i, const char *optvalue)
+{
+ switch (o->op) {
+ case GETOPT_OP_NONE:
+ break;
+ case GETOPT_OP_ON:
+ *flags |= o->flag;
+ break;
+ case GETOPT_OP_OFF:
+ *flags &= ~o->flag;
+ break;
+ case GETOPT_OP_UPDATE:
+ *flags = o->flag;
+ break;
+ default:
+ return i;
+ }
+ if (o->arg) {
+ if (optvalue) {
+ *o->arg = (char *)optvalue;
+ } else if (++i < argc) {
+ *o->arg = argv[i];
+ } else {
+ return -1;
+ }
+ }
+ return i;
+}
+
+int
+grn_str_getopt(int argc, char * const argv[], const grn_str_getopt_opt *opts,
+ int *flags)
+{
+ int i;
+ for (i = 1; i < argc; i++) {
+ const char * v = argv[i];
+ if (*v == '-') {
+ const grn_str_getopt_opt *o;
+ int found;
+ if (*++v == '-') {
+ const char *eq;
+ size_t len;
+ found = 0;
+ v++;
+ for (eq = v; *eq != '\0' && *eq != '='; eq++) {}
+ len = eq - v;
+ for (o = opts; o->opt != '\0' || o->longopt != NULL; o++) {
+ if (o->longopt && strlen(o->longopt) == len &&
+ !memcmp(v, o->longopt, len)) {
+ i = op_getopt_flag(flags, o, argc, argv, i,
+ (*eq == '\0' ? NULL : eq + 1));
+ if (i < 0) {
+ fprintf(stderr, "%s: option '--%s' needs argument.\n", argv[0], o->longopt);
+ return -1;
+ }
+ found = 1;
+ break;
+ }
+ }
+ if (!found) { goto exit; }
+ } else {
+ const char *p;
+ for (p = v; *p; p++) {
+ found = 0;
+ for (o = opts; o->opt != '\0' || o->longopt != NULL; o++) {
+ if (o->opt && *p == o->opt) {
+ i = op_getopt_flag(flags, o, argc, argv, i, NULL);
+ if (i < 0) {
+ fprintf(stderr, "%s: option '-%c' needs argument.\n", argv[0], *p);
+ return -1;
+ }
+ found = 1;
+ break;
+ }
+ }
+ if (!found) { goto exit; }
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ return i;
+exit:
+ fprintf(stderr, "%s: cannot recognize option '%s'.\n", argv[0], argv[i]);
+ return -1;
+}
+
+#define UNIT_SIZE (1 << 12)
+#define UNIT_MASK (UNIT_SIZE - 1)
+
+int grn_bulk_margin_size = 0;
+
+grn_rc
+grn_bulk_resize(grn_ctx *ctx, grn_obj *buf, unsigned int newsize)
+{
+ char *head;
+ unsigned int rounded_newsize;
+ newsize += grn_bulk_margin_size + 1;
+ if (GRN_BULK_OUTP(buf)) {
+ rounded_newsize = (newsize + (UNIT_MASK)) & ~UNIT_MASK;
+ if (rounded_newsize < newsize) { return GRN_NOT_ENOUGH_SPACE; }
+ newsize = rounded_newsize;
+ head = buf->u.b.head - (buf->u.b.head ? grn_bulk_margin_size : 0);
+ if (!(head = GRN_REALLOC(head, newsize))) { return GRN_NO_MEMORY_AVAILABLE; }
+ buf->u.b.curr = head + grn_bulk_margin_size + GRN_BULK_VSIZE(buf);
+ buf->u.b.head = head + grn_bulk_margin_size;
+ buf->u.b.tail = head + newsize;
+ } else {
+ if (newsize > GRN_BULK_BUFSIZE) {
+ rounded_newsize = (newsize + (UNIT_MASK)) & ~UNIT_MASK;
+ if (rounded_newsize < newsize) { return GRN_NOT_ENOUGH_SPACE; }
+ newsize = rounded_newsize;
+ if (!(head = GRN_MALLOC(newsize))) { return GRN_NO_MEMORY_AVAILABLE; }
+ memcpy(head, GRN_BULK_HEAD(buf), GRN_BULK_VSIZE(buf));
+ buf->u.b.curr = head + grn_bulk_margin_size + GRN_BULK_VSIZE(buf);
+ buf->u.b.head = head + grn_bulk_margin_size;
+ buf->u.b.tail = head + newsize;
+ buf->header.impl_flags |= GRN_OBJ_OUTPLACE;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_bulk_reinit(grn_ctx *ctx, grn_obj *buf, unsigned int size)
+{
+ GRN_BULK_REWIND(buf);
+ return grn_bulk_resize(ctx, buf, size);
+}
+
+grn_rc
+grn_bulk_write(grn_ctx *ctx, grn_obj *buf, const char *str, unsigned int len)
+{
+ grn_rc rc = GRN_SUCCESS;
+ char *curr;
+ if (GRN_BULK_REST(buf) < len) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + len))) { return rc; }
+ }
+ curr = GRN_BULK_CURR(buf);
+ memcpy(curr, str, len);
+ GRN_BULK_INCR_LEN(buf, len);
+ return rc;
+}
+
+grn_rc
+grn_bulk_write_from(grn_ctx *ctx, grn_obj *bulk,
+ const char *str, unsigned int from, unsigned int len)
+{
+ grn_rc rc = grn_bulk_truncate(ctx, bulk, from);
+ if (!rc) { rc = grn_bulk_write(ctx, bulk, str, len); }
+ return rc;
+}
+
+grn_rc
+grn_bulk_reserve(grn_ctx *ctx, grn_obj *buf, unsigned int len)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_BULK_REST(buf) < len) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + len))) { return rc; }
+ }
+ return rc;
+}
+
+grn_rc
+grn_bulk_space(grn_ctx *ctx, grn_obj *buf, unsigned int len)
+{
+ grn_rc rc = grn_bulk_reserve(ctx, buf, len);
+ if (!rc) {
+ GRN_BULK_INCR_LEN(buf, len);
+ }
+ return rc;
+}
+
+static grn_rc
+grn_bulk_space_clear(grn_ctx *ctx, grn_obj *buf, unsigned int len)
+{
+ grn_rc rc = grn_bulk_reserve(ctx, buf, len);
+ if (!rc) {
+ memset(GRN_BULK_CURR(buf), 0, len);
+ GRN_BULK_INCR_LEN(buf, len);
+ }
+ return rc;
+}
+
+grn_rc
+grn_bulk_truncate(grn_ctx *ctx, grn_obj *bulk, unsigned int len)
+{
+ if (GRN_BULK_OUTP(bulk)) {
+ if ((bulk->u.b.tail - bulk->u.b.head) < len) {
+ return grn_bulk_space_clear(ctx, bulk, len);
+ } else {
+ bulk->u.b.curr = bulk->u.b.head + len;
+ }
+ } else {
+ if (GRN_BULK_BUFSIZE < len) {
+ return grn_bulk_space_clear(ctx, bulk, len);
+ } else {
+ bulk->header.flags &= ~GRN_BULK_BUFSIZE_MAX;
+ bulk->header.flags += len;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_text_itoa(grn_ctx *ctx, grn_obj *buf, int i)
+{
+ grn_rc rc = GRN_SUCCESS;
+ for (;;) {
+ char *curr = GRN_BULK_CURR(buf);
+ char *tail = GRN_BULK_TAIL(buf);
+ if (grn_itoa(i, curr, tail, &curr)) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_WSIZE(buf) + UNIT_SIZE))) { return rc; }
+ } else {
+ GRN_BULK_SET_CURR(buf, curr);
+ break;
+ }
+ }
+ return rc;
+}
+
+grn_rc
+grn_text_itoa_padded(grn_ctx *ctx, grn_obj *buf, int i, char ch, unsigned int len)
+{
+ grn_rc rc = GRN_SUCCESS;
+ char *curr;
+ if ((rc = grn_bulk_reserve(ctx, buf, len))) { return rc; }
+ curr = GRN_BULK_CURR(buf);
+ if (!grn_itoa_padded(i, curr, curr + len, ch)) {
+ GRN_BULK_SET_CURR(buf, curr + len);
+ }
+ return rc;
+}
+
+grn_rc
+grn_text_lltoa(grn_ctx *ctx, grn_obj *buf, long long int i)
+{
+ grn_rc rc = GRN_SUCCESS;
+ for (;;) {
+ char *curr = GRN_BULK_CURR(buf);
+ char *tail = GRN_BULK_TAIL(buf);
+ if (grn_lltoa(i, curr, tail, &curr)) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_WSIZE(buf) + UNIT_SIZE))) { return rc; }
+ } else {
+ GRN_BULK_SET_CURR(buf, curr);
+ break;
+ }
+ }
+ return rc;
+}
+
+grn_rc
+grn_text_ulltoa(grn_ctx *ctx, grn_obj *buf, unsigned long long int i)
+{
+ grn_rc rc = GRN_SUCCESS;
+ for (;;) {
+ char *curr = GRN_BULK_CURR(buf);
+ char *tail = GRN_BULK_TAIL(buf);
+ if (grn_ulltoa(i, curr, tail, &curr)) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_WSIZE(buf) + UNIT_SIZE))) { return rc; }
+ } else {
+ GRN_BULK_SET_CURR(buf, curr);
+ break;
+ }
+ }
+ return rc;
+}
+
+inline static void
+ftoa_(grn_ctx *ctx, grn_obj *buf, double d)
+{
+ char *curr;
+ size_t len;
+#define DIGIT_NUMBER 15
+ grn_bulk_reserve(ctx, buf, DIGIT_NUMBER + 1);
+ curr = GRN_BULK_CURR(buf);
+ len = sprintf(curr, "%#.*g", DIGIT_NUMBER, d);
+#undef DIGIT_NUMBER
+ if (curr[len - 1] == '.') {
+ GRN_BULK_INCR_LEN(buf, len);
+ GRN_TEXT_PUTC(ctx, buf, '0');
+ } else {
+ char *p, *q;
+ curr[len] = '\0';
+ if ((p = strchr(curr, 'e'))) {
+ for (q = p; *(q - 2) != '.' && *(q - 1) == '0'; q--) { len--; }
+ memmove(q, p, curr + len - q);
+ } else {
+ for (q = curr + len; *(q - 2) != '.' && *(q - 1) == '0'; q--) { len--; }
+ }
+ GRN_BULK_INCR_LEN(buf, len);
+ }
+}
+
+grn_rc
+grn_text_ftoa(grn_ctx *ctx, grn_obj *buf, double d)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_BULK_REST(buf) < 32) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + 32))) { return rc; }
+ }
+#ifdef HAVE_FPCLASSIFY
+ switch (fpclassify(d)) {
+ case FP_NAN :
+ GRN_TEXT_PUTS(ctx, buf, "#<nan>");
+ break;
+ case FP_INFINITE :
+ GRN_TEXT_PUTS(ctx, buf, d > 0 ? "#i1/0" : "#i-1/0");
+ break;
+ default :
+ ftoa_(ctx, buf, d);
+ break;
+ }
+#else /* HAVE_FPCLASSIFY */
+ if (d == d) {
+ if (d != 0 && ((d / 2.0) == d)) {
+ GRN_TEXT_PUTS(ctx, buf, d > 0 ? "#i1/0" : "#i-1/0");
+ } else {
+ ftoa_(ctx, buf, d);
+ }
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "#<nan>");
+ }
+#endif /* HAVE_FPCLASSIFY */
+ return rc;
+}
+
+grn_rc
+grn_text_itoh(grn_ctx *ctx, grn_obj *buf, int i, unsigned int len)
+{
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_BULK_REST(buf) < len) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + len))) { return rc; }
+ }
+ grn_itoh(i, GRN_BULK_CURR(buf), len);
+ GRN_BULK_INCR_LEN(buf, len);
+ return rc;
+}
+
+grn_rc
+grn_text_itob(grn_ctx *ctx, grn_obj *buf, grn_id id)
+{
+ size_t len = 5;
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_BULK_REST(buf) < len) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + len))) { return rc; }
+ }
+ grn_itob(id, GRN_BULK_CURR(buf));
+ GRN_BULK_INCR_LEN(buf, len);
+ return rc;
+}
+
+grn_rc
+grn_text_lltob32h(grn_ctx *ctx, grn_obj *buf, long long int i)
+{
+ size_t len = 13;
+ grn_rc rc = GRN_SUCCESS;
+ if (GRN_BULK_REST(buf) < len) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + len))) { return rc; }
+ }
+ grn_lltob32h(i, GRN_BULK_CURR(buf));
+ GRN_BULK_INCR_LEN(buf, len);
+ return rc;
+}
+
+grn_rc
+grn_text_esc(grn_ctx *ctx, grn_obj *buf, const char *s, unsigned int len)
+{
+ const char *e;
+ unsigned int l;
+ grn_rc rc = GRN_SUCCESS;
+
+ GRN_TEXT_PUTC(ctx, buf, '"');
+ for (e = s + len; s < e; s += l) {
+ if (!(l = grn_charlen(ctx, s, e))) { break; }
+ if (l == 1) {
+ switch (*s) {
+ case '"' :
+ grn_bulk_write(ctx, buf, "\\\"", 2);
+ break;
+ case '\\' :
+ grn_bulk_write(ctx, buf, "\\\\", 2);
+ break;
+ case '\b' :
+ grn_bulk_write(ctx, buf, "\\b", 2);
+ break;
+ case '\f' :
+ grn_bulk_write(ctx, buf, "\\f", 2);
+ break;
+ case '\n' :
+ grn_bulk_write(ctx, buf, "\\n", 2);
+ break;
+ case '\r' :
+ grn_bulk_write(ctx, buf, "\\r", 2);
+ break;
+ case '\t' :
+ grn_bulk_write(ctx, buf, "\\t", 2);
+ break;
+ case '\x00': case '\x01': case '\x02': case '\x03': case '\x04': case '\x05':
+ case '\x06': case '\x07': case '\x0b': case '\x0e': case '\x0f': case '\x10':
+ case '\x11': case '\x12': case '\x13': case '\x14': case '\x15': case '\x16':
+ case '\x17': case '\x18': case '\x19': case '\x1a': case '\x1b': case '\x1c':
+ case '\x1d': case '\x1e': case '\x1f': case '\x7f':
+ if (!(rc = grn_bulk_write(ctx, buf, "\\u", 2))) {
+ if ((rc = grn_text_itoh(ctx, buf, *s, 4))) {
+ GRN_BULK_INCR_LEN(buf, -2);
+ return rc;
+ }
+ } else {
+ return rc;
+ }
+ break;
+ default :
+ GRN_TEXT_PUTC(ctx, buf, *s);
+ }
+ } else if (l == 3) {
+ if (*s == '\xe2' && *(s + 1) == '\x80') {
+ switch (*(s + 2)) {
+ case '\xa8': /* \u2028 */
+ grn_bulk_write(ctx, buf, "\\u2028", 6);
+ break;
+ case '\xa9': /* \u2029 */
+ grn_bulk_write(ctx, buf, "\\u2029", 6);
+ break;
+ default:
+ grn_bulk_write(ctx, buf, s, l);
+ }
+ } else {
+ grn_bulk_write(ctx, buf, s, l);
+ }
+ } else {
+ grn_bulk_write(ctx, buf, s, l);
+ }
+ }
+ GRN_TEXT_PUTC(ctx, buf, '"');
+ return rc;
+}
+
+grn_rc
+grn_text_escape_xml(grn_ctx *ctx, grn_obj *buf, const char *s, unsigned int len)
+{
+ const char *e;
+ unsigned int l;
+ grn_rc rc = GRN_SUCCESS;
+
+ for (e = s + len; s < e; s += l) {
+ if (!(l = grn_charlen(ctx, s, e))) { break; }
+ if (l == 1) {
+ switch (*s) {
+ case '"' :
+ grn_bulk_write(ctx, buf, "&quot;", 6);
+ break;
+ case '<' :
+ grn_bulk_write(ctx, buf, "&lt;", 4);
+ break;
+ case '>' :
+ grn_bulk_write(ctx, buf, "&gt;", 4);
+ break;
+ case '&' :
+ grn_bulk_write(ctx, buf, "&amp;", 5);
+ break;
+ default :
+ GRN_TEXT_PUTC(ctx, buf, *s);
+ }
+ } else {
+ grn_bulk_write(ctx, buf, s, l);
+ }
+ }
+ return rc;
+}
+
+#define TOK_ESC (0x80)
+
+const char *
+grn_text_unesc_tok(grn_ctx *ctx, grn_obj *buf, const char *s, const char *e, char *tok_type)
+{
+ const char *p;
+ unsigned int len;
+ uint8_t stat = GRN_TOK_VOID;
+ for (p = s; p < e; p += len) {
+ if (!(len = grn_charlen(ctx, p, e))) {
+ p = e;
+ stat &= ~TOK_ESC;
+ goto exit;
+ }
+ switch (stat) {
+ case GRN_TOK_VOID :
+ if (*p == ' ') { continue; }
+ switch (*p) {
+ case '"' :
+ stat = GRN_TOK_STRING;
+ break;
+ case '\'' :
+ stat = GRN_TOK_QUOTE;
+ break;
+ case ')' :
+ case '(' :
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ p += len;
+ stat = GRN_TOK_SYMBOL;
+ goto exit;
+ case '\\' :
+ stat = GRN_TOK_SYMBOL|TOK_ESC;
+ break;
+ default :
+ stat = GRN_TOK_SYMBOL;
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ break;
+ }
+ break;
+ case GRN_TOK_SYMBOL :
+ if (*p == ' ') { goto exit; }
+ switch (*p) {
+ case '\'' :
+ case '"' :
+ case ')' :
+ case '(' :
+ goto exit;
+ case '\\' :
+ stat |= TOK_ESC;
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ break;
+ }
+ break;
+ case GRN_TOK_STRING :
+ switch (*p) {
+ case '"' :
+ p += len;
+ goto exit;
+ case '\\' :
+ stat |= TOK_ESC;
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ break;
+ }
+ break;
+ case GRN_TOK_QUOTE :
+ switch (*p) {
+ case '\'' :
+ p += len;
+ goto exit;
+ case '\\' :
+ stat |= TOK_ESC;
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ break;
+ }
+ break;
+ case GRN_TOK_SYMBOL|TOK_ESC :
+ case GRN_TOK_STRING|TOK_ESC :
+ case GRN_TOK_QUOTE|TOK_ESC :
+ switch (*p) {
+ case 'b' :
+ GRN_TEXT_PUTC(ctx, buf, '\b');
+ break;
+ case 'f' :
+ GRN_TEXT_PUTC(ctx, buf, '\f');
+ break;
+ case 'n' :
+ GRN_TEXT_PUTC(ctx, buf, '\n');
+ break;
+ case 'r' :
+ GRN_TEXT_PUTC(ctx, buf, '\r');
+ break;
+ case 't' :
+ GRN_TEXT_PUTC(ctx, buf, '\t');
+ break;
+ default :
+ GRN_TEXT_PUT(ctx, buf, p, len);
+ break;
+ }
+ stat &= ~TOK_ESC;
+ break;
+ }
+ }
+exit :
+ *tok_type = stat;
+ return p;
+}
+
+grn_rc
+grn_text_benc(grn_ctx *ctx, grn_obj *buf, unsigned int v)
+{
+ grn_rc rc = GRN_SUCCESS;
+ uint8_t *p;
+ if (GRN_BULK_REST(buf) < 5) {
+ if ((rc = grn_bulk_resize(ctx, buf, GRN_BULK_VSIZE(buf) + 5))) { return rc; }
+ }
+ p = (uint8_t *)GRN_BULK_CURR(buf);
+ GRN_B_ENC(v, p);
+ GRN_BULK_SET_CURR(buf, (char *)p);
+ return rc;
+}
+
+/* 0x00 - 0x7f */
+static const int_least8_t urlenc_tbl[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
+};
+
+grn_rc
+grn_text_urlenc(grn_ctx *ctx, grn_obj *buf, const char *s, unsigned int len)
+{
+ const char *e, c = '%';
+ for (e = s + len; s < e; s++) {
+ if ((signed char)*s < 0 || urlenc_tbl[(int)*s]) {
+ if (!grn_bulk_write(ctx, buf, &c, 1)) {
+ if (grn_text_itoh(ctx, buf, *s, 2)) {
+ GRN_BULK_INCR_LEN(buf, -1);
+ }
+ }
+ } else {
+ GRN_TEXT_PUTC(ctx, buf, *s);
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static const char *weekdays[7] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+static const char *months[12] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+
+grn_rc
+grn_text_time2rfc1123(grn_ctx *ctx, grn_obj *bulk, int sec)
+{
+ time_t tsec;
+ struct tm *t;
+#ifdef HAVE_GMTIME_R
+ struct tm tm;
+ tsec = (time_t)sec;
+ t = gmtime_r(&tsec, &tm);
+#else /* HAVE_GMTIME_R */
+ tsec = (time_t)sec;
+ t = gmtime(&tsec);
+#endif /* HAVE_GMTIME_R */
+ if (t) {
+ GRN_TEXT_SET(ctx, bulk, weekdays[t->tm_wday], 3);
+ GRN_TEXT_PUTS(ctx, bulk, ", ");
+ grn_text_itoa_padded(ctx, bulk, t->tm_mday, '0', 2);
+ GRN_TEXT_PUTS(ctx, bulk, " ");
+ GRN_TEXT_PUT(ctx, bulk, months[t->tm_mon], 3);
+ GRN_TEXT_PUTS(ctx, bulk, " ");
+ grn_text_itoa(ctx, bulk, t->tm_year + 1900);
+ GRN_TEXT_PUTS(ctx, bulk, " ");
+ grn_text_itoa_padded(ctx, bulk, t->tm_hour, '0', 2);
+ GRN_TEXT_PUTS(ctx, bulk, ":");
+ grn_text_itoa_padded(ctx, bulk, t->tm_min, '0', 2);
+ GRN_TEXT_PUTS(ctx, bulk, ":");
+ grn_text_itoa_padded(ctx, bulk, t->tm_sec, '0', 2);
+ GRN_TEXT_PUTS(ctx, bulk, " GMT");
+ } else {
+ GRN_TEXT_SETS(ctx, bulk, "Mon, 16 Mar 1980 20:40:00 GMT");
+ }
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_text_printf(grn_ctx *ctx, grn_obj *bulk, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ grn_text_vprintf(ctx, bulk, format, args);
+ va_end(args);
+
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_text_vprintf(grn_ctx *ctx, grn_obj *bulk, const char *format, va_list args)
+{
+ int rest_size, written_size;
+
+ {
+ va_list copied_args;
+
+ rest_size = GRN_BULK_REST(bulk);
+ va_copy(copied_args, args);
+ written_size = vsnprintf(GRN_BULK_CURR(bulk), rest_size,
+ format, copied_args);
+ va_end(copied_args);
+ }
+
+ if (written_size >= rest_size) {
+ grn_rc rc;
+ int required_size = written_size + 1; /* "+ 1" for terminate '\0'. */
+
+ rc = grn_bulk_reserve(ctx, bulk, GRN_BULK_VSIZE(bulk) + required_size);
+ if (rc) {
+ return rc;
+ }
+ written_size = vsnprintf(GRN_BULK_CURR(bulk), required_size,
+ format, args);
+ }
+
+ if (written_size < 0) {
+ return GRN_INVALID_ARGUMENT;
+ }
+
+ GRN_BULK_INCR_LEN(bulk, written_size);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_bulk_fin(grn_ctx *ctx, grn_obj *buf)
+{
+ if (!(buf->header.impl_flags & GRN_OBJ_REFER)) {
+ if (GRN_BULK_OUTP(buf) && buf->u.b.head) {
+ GRN_REALLOC(buf->u.b.head - grn_bulk_margin_size, 0);
+ }
+ }
+ buf->header.flags = 0;
+ buf->header.impl_flags &= ~GRN_OBJ_DO_SHALLOW_COPY;
+ buf->u.b.head = NULL;
+ buf->u.b.curr = NULL;
+ buf->u.b.tail = NULL;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_substring(grn_ctx *ctx, char **str, char **str_end, int start, int end, grn_encoding encoding)
+{
+ int i;
+ size_t l;
+ char *s = *str, *e = *str_end;
+ for (i = 0; s < e; i++, s += l) {
+ if (i == start) { *str = s; }
+ if (!(l = grn_charlen(ctx, s, e))) {
+ return GRN_INVALID_ARGUMENT;
+ }
+ if (i == end) {
+ *str_end = s;
+ break;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+static void
+grn_text_atoj(grn_ctx *ctx, grn_obj *bulk, grn_obj *obj, grn_id id)
+{
+ uint32_t vs;
+ grn_obj buf;
+ if (obj->header.type == GRN_ACCESSOR) {
+ grn_accessor *a = (grn_accessor *)obj;
+ GRN_TEXT_INIT(&buf, 0);
+ for (;;) {
+ GRN_BULK_REWIND(&buf);
+ switch (a->action) {
+ case GRN_ACCESSOR_GET_ID :
+ GRN_UINT32_PUT(ctx, &buf, id);
+ buf.header.domain = GRN_DB_UINT32;
+ break;
+ case GRN_ACCESSOR_GET_KEY :
+ grn_table_get_key2(ctx, a->obj, id, &buf);
+ buf.header.domain = DB_OBJ(a->obj)->header.domain;
+ break;
+ case GRN_ACCESSOR_GET_VALUE :
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ buf.header.domain = GRN_DB_INT32; /* fix me */
+ break;
+ case GRN_ACCESSOR_GET_SCORE :
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, &buf, ri->score);
+ }
+ buf.header.domain = GRN_DB_INT32;
+ break;
+ case GRN_ACCESSOR_GET_NSUBRECS :
+ {
+ grn_rset_recinfo *ri = (grn_rset_recinfo *)grn_obj_get_value_(ctx, a->obj, id, &vs);
+ GRN_INT32_PUT(ctx, &buf, ri->n_subrecs);
+ }
+ buf.header.domain = GRN_DB_INT32;
+ break;
+ case GRN_ACCESSOR_GET_COLUMN_VALUE :
+ if ((a->obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR) {
+ if (a->next) {
+ grn_id *idp;
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ idp = (grn_id *)GRN_BULK_HEAD(&buf);
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ for (vs = GRN_BULK_VSIZE(&buf) / sizeof(grn_id); vs--; idp++) {
+ grn_text_atoj(ctx, bulk, (grn_obj *)a->next, *idp);
+ if (vs) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ } else {
+ grn_text_atoj(ctx, bulk, a->obj, id);
+ }
+ goto exit;
+ } else {
+ grn_obj_get_value(ctx, a->obj, id, &buf);
+ }
+ break;
+ case GRN_ACCESSOR_GET_DB_OBJ :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_LOOKUP :
+ /* todo */
+ break;
+ case GRN_ACCESSOR_FUNCALL :
+ /* todo */
+ break;
+ }
+ if (a->next) {
+ a = a->next;
+ id = *((grn_id *)GRN_BULK_HEAD(&buf));
+ } else {
+ break;
+ }
+ }
+ } else {
+ switch (obj->header.type) {
+ case GRN_COLUMN_FIX_SIZE :
+ GRN_VALUE_FIX_SIZE_INIT(&buf, 0, DB_OBJ(obj)->range);
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ if ((obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR) {
+ grn_obj *range = grn_ctx_at(ctx, DB_OBJ(obj)->range);
+ if (range->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ GRN_VALUE_VAR_SIZE_INIT(&buf, GRN_OBJ_VECTOR, DB_OBJ(obj)->range);
+ } else {
+ GRN_VALUE_FIX_SIZE_INIT(&buf, GRN_OBJ_VECTOR, DB_OBJ(obj)->range);
+ }
+ } else {
+ GRN_VALUE_VAR_SIZE_INIT(&buf, 0, DB_OBJ(obj)->range);
+ }
+ break;
+ case GRN_COLUMN_INDEX :
+ GRN_UINT32_INIT(&buf, 0);
+ break;
+ default:
+ GRN_TEXT_INIT(&buf, 0);
+ break;
+ }
+ grn_obj_get_value(ctx, obj, id, &buf);
+ }
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+exit :
+ grn_obj_close(ctx, &buf);
+}
+
+grn_rc
+grn_text_otoj(grn_ctx *ctx, grn_obj *bulk, grn_obj *obj, grn_obj_format *format)
+{
+ grn_obj buf;
+ GRN_TEXT_INIT(&buf, 0);
+ switch (obj->header.type) {
+ case GRN_BULK :
+ switch (obj->header.domain) {
+ case GRN_DB_VOID :
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ grn_text_esc(ctx, bulk, GRN_BULK_HEAD(obj), GRN_BULK_VSIZE(obj));
+ break;
+ case GRN_DB_BOOL :
+ if (*((unsigned char *)GRN_BULK_HEAD(obj))) {
+ GRN_TEXT_PUTS(ctx, bulk, "true");
+ } else {
+ GRN_TEXT_PUTS(ctx, bulk, "false");
+ }
+ break;
+ case GRN_DB_INT8 :
+ grn_text_itoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_INT8_VALUE(obj) : 0);
+ break;
+ case GRN_DB_UINT8 :
+ grn_text_lltoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_UINT8_VALUE(obj) : 0);
+ break;
+ case GRN_DB_INT16 :
+ grn_text_itoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_INT16_VALUE(obj) : 0);
+ break;
+ case GRN_DB_UINT16 :
+ grn_text_lltoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_UINT16_VALUE(obj) : 0);
+ break;
+ case GRN_DB_INT32 :
+ grn_text_itoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_INT32_VALUE(obj) : 0);
+ break;
+ case GRN_DB_UINT32 :
+ grn_text_lltoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_UINT32_VALUE(obj) : 0);
+ break;
+ case GRN_DB_INT64 :
+ grn_text_lltoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_INT64_VALUE(obj) : 0);
+ break;
+ case GRN_DB_UINT64 :
+ grn_text_ulltoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_UINT64_VALUE(obj) : 0);
+ break;
+ case GRN_DB_FLOAT :
+ grn_text_ftoa(ctx, bulk, GRN_BULK_VSIZE(obj) ? GRN_FLOAT_VALUE(obj) : 0);
+ break;
+ case GRN_DB_TIME :
+ {
+ double dv = *((int64_t *)GRN_BULK_HEAD(obj));
+ dv /= 1000000.0;
+ grn_text_ftoa(ctx, bulk, dv);
+ }
+ break;
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ if (GRN_BULK_VSIZE(obj) == sizeof(grn_geo_point)) {
+ grn_geo_point *gp = (grn_geo_point *)GRN_BULK_HEAD(obj);
+ GRN_TEXT_PUTC(ctx, bulk, '"');
+ grn_text_itoa(ctx, bulk, gp->latitude);
+ GRN_TEXT_PUTC(ctx, bulk, 'x');
+ grn_text_itoa(ctx, bulk, gp->longitude);
+ GRN_TEXT_PUTC(ctx, bulk, '"');
+ } else {
+ GRN_TEXT_PUTS(ctx, bulk, "\"\"");
+ }
+ break;
+ default :
+ if (format) {
+ int j;
+ int ncolumns = GRN_BULK_VSIZE(&format->columns)/sizeof(grn_obj *);
+ grn_id id = GRN_RECORD_VALUE(obj);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ GRN_TEXT_PUTS(ctx, bulk, "[");
+ for (j = 0; j < ncolumns; j++) {
+ grn_id range_id;
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ GRN_TEXT_PUTS(ctx, bulk, "[");
+ GRN_BULK_REWIND(&buf);
+ grn_column_name_(ctx, columns[j], &buf);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ /* column range */
+ range_id = grn_obj_get_range(ctx, columns[j]);
+ if (range_id == GRN_ID_NIL) {
+ GRN_TEXT_PUTS(ctx, bulk, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(&buf);
+ GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ }
+ GRN_TEXT_PUTS(ctx, bulk, "]");
+ }
+ GRN_TEXT_PUTS(ctx, bulk, "],");
+ }
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ for (j = 0; j < ncolumns; j++) {
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ grn_text_atoj(ctx, bulk, columns[j], id);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ } else {
+ if (GRN_BULK_VSIZE(obj) == 0) {
+ GRN_TEXT_PUTS(ctx, bulk, "null");
+ } else {
+ grn_obj *table = grn_ctx_at(ctx, obj->header.domain);
+ grn_id id = GRN_RECORD_VALUE(obj);
+ if (table && table->header.type != GRN_TABLE_NO_KEY) {
+ /* todo : temporal patch. grn_table_at() is kinda costful... */
+ if (grn_table_at(ctx, table, id)) {
+ grn_obj *accessor = grn_obj_column(ctx, table,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ if (accessor) {
+ grn_obj_get_value(ctx, accessor, id, &buf);
+ grn_obj_unlink(ctx, accessor);
+ }
+ }
+ grn_text_otoj(ctx, bulk, &buf, format);
+ } else {
+ grn_text_lltoa(ctx, bulk, id);
+ }
+ }
+ }
+ }
+ break;
+ case GRN_UVECTOR :
+ if (format) {
+ int i, j;
+ grn_id *v = (grn_id *)GRN_BULK_HEAD(obj), *ve = (grn_id *)GRN_BULK_CURR(obj);
+ int ncolumns = GRN_BULK_VSIZE(&format->columns) / sizeof(grn_obj *);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+ GRN_TEXT_PUTS(ctx, bulk, "[[");
+ grn_text_itoa(ctx, bulk, ve - v);
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ if (v < ve) {
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ GRN_TEXT_PUTS(ctx, bulk, ",[");
+ for (j = 0; j < ncolumns; j++) {
+ grn_id range_id;
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ GRN_TEXT_PUTS(ctx, bulk, "[");
+ GRN_BULK_REWIND(&buf);
+ grn_column_name_(ctx, columns[j], &buf);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ /* column range */
+ range_id = grn_obj_get_range(ctx, columns[j]);
+ if (range_id == GRN_ID_NIL) {
+ GRN_TEXT_PUTS(ctx, bulk, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(&buf);
+ GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ }
+ GRN_TEXT_PUTS(ctx, bulk, "]");
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ for (i = 0;; i++) {
+ GRN_TEXT_PUTS(ctx, bulk, ",[");
+ for (j = 0; j < ncolumns; j++) {
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ GRN_BULK_REWIND(&buf);
+ grn_obj_get_value(ctx, columns[j], *v, &buf);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ v++;
+ if (v < ve) {
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ } else {
+ break;
+ }
+ }
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ } else {
+ grn_obj *range = grn_ctx_at(ctx, obj->header.domain);
+ if (range && range->header.type == GRN_TYPE) {
+ grn_id value_size = ((struct _grn_type *)range)->obj.range;
+ char *v = (char *)GRN_BULK_HEAD(obj),
+ *ve = (char *)GRN_BULK_CURR(obj);
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ if (v < ve) {
+ for (;;) {
+ grn_obj value;
+ GRN_OBJ_INIT(&value, GRN_BULK, 0, obj->header.domain);
+ grn_bulk_write_from(ctx, &value, v, 0, value_size);
+ grn_text_otoj(ctx, bulk, &value, NULL);
+
+ v += value_size;
+ if (v < ve) {
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ } else {
+ break;
+ }
+ }
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ } else {
+ grn_id *v = (grn_id *)GRN_BULK_HEAD(obj),
+ *ve = (grn_id *)GRN_BULK_CURR(obj);
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ if (v < ve) {
+ for (;;) {
+ if (range->header.type != GRN_TABLE_NO_KEY) {
+ grn_obj key;
+ GRN_OBJ_INIT(&key, GRN_BULK, 0, range->header.domain);
+ grn_table_get_key2(ctx, range, *v, &key);
+ grn_text_otoj(ctx, bulk, &key, NULL);
+ GRN_OBJ_FIN(ctx, &key);
+ } else {
+ grn_text_lltoa(ctx, bulk, *v);
+ }
+ v++;
+ if (v < ve) {
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ } else {
+ break;
+ }
+ }
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ }
+ break;
+ case GRN_VECTOR :
+ if (obj->header.domain == GRN_DB_VOID) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid obj->header.domain");
+ } else {
+ unsigned int i, n;
+ grn_obj value;
+ grn_obj weight;
+ grn_bool with_weight;
+
+ GRN_VOID_INIT(&value);
+ GRN_UINT32_INIT(&weight, 0);
+ with_weight = (format && format->flags & GRN_OBJ_FORMAT_WITH_WEIGHT);
+ n = grn_vector_size(ctx, obj);
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ for (i = 0; i < n; i++) {
+ const char *_value;
+ unsigned int _weight, length;
+ grn_id domain;
+ if (i) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+
+ length = grn_vector_get_element(ctx, obj, i,
+ &_value, &_weight, &domain);
+ if (domain != GRN_DB_VOID) {
+ grn_obj_reinit(ctx, &value, domain, 0);
+ } else {
+ grn_obj_reinit(ctx, &value, obj->header.domain, 0);
+ }
+ if (with_weight) {
+ GRN_TEXT_PUTC(ctx, bulk, '{');
+ }
+ grn_bulk_write(ctx, &value, _value, length);
+ grn_text_otoj(ctx, bulk, &value, NULL);
+ if (with_weight) {
+ GRN_TEXT_PUTC(ctx, bulk, ':');
+ GRN_UINT32_SET(ctx, &weight, _weight);
+ grn_text_otoj(ctx, bulk, &weight, NULL);
+ GRN_TEXT_PUTC(ctx, bulk, '}');
+ }
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ break;
+ case GRN_PVECTOR :
+ if (format) {
+ ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+ "cannot print GRN_PVECTOR using grn_obj_format");
+ } else {
+ unsigned int i, n;
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ n = GRN_BULK_VSIZE(obj) / sizeof(grn_obj *);
+ for (i = 0; i < n; i++) {
+ grn_obj *value;
+
+ if (i) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ value = GRN_PTR_VALUE_AT(obj, i);
+ grn_text_otoj(ctx, bulk, value, NULL);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ if (format) {
+ int i, j;
+ int ncolumns = GRN_BULK_VSIZE(&format->columns)/sizeof(grn_obj *);
+ grn_obj **columns = (grn_obj **)GRN_BULK_HEAD(&format->columns);
+ grn_table_cursor *tc = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0,
+ format->offset, format->limit,
+ GRN_CURSOR_ASCENDING);
+ if (!tc) { ERRCLR(ctx); }
+ GRN_TEXT_PUTS(ctx, bulk, "[[");
+ grn_text_itoa(ctx, bulk, format->nhits);
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ if (format->flags & GRN_OBJ_FORMAT_WITH_COLUMN_NAMES) {
+ GRN_TEXT_PUTS(ctx, bulk, ",[");
+ for (j = 0; j < ncolumns; j++) {
+ grn_id range_id;
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ GRN_TEXT_PUTS(ctx, bulk, "[");
+ GRN_BULK_REWIND(&buf);
+ grn_column_name_(ctx, columns[j], &buf);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ GRN_TEXT_PUTC(ctx, bulk, ',');
+ /* column range */
+ range_id = grn_obj_get_range(ctx, columns[j]);
+ if (range_id == GRN_ID_NIL) {
+ GRN_TEXT_PUTS(ctx, bulk, "null");
+ } else {
+ int name_len;
+ grn_obj *range_obj;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ range_obj = grn_ctx_at(ctx, range_id);
+ name_len = grn_obj_name(ctx, range_obj, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_BULK_REWIND(&buf);
+ GRN_TEXT_PUT(ctx, &buf, name_buf, name_len);
+ grn_text_otoj(ctx, bulk, &buf, NULL);
+ }
+ GRN_TEXT_PUTS(ctx, bulk, "]");
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ if (tc) {
+ grn_id id;
+ for (i = 0; (id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL; i++) {
+ GRN_TEXT_PUTS(ctx, bulk, ",[");
+ for (j = 0; j < ncolumns; j++) {
+ if (j) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ grn_text_atoj(ctx, bulk, columns[j], id);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ } else {
+ int i;
+ grn_id id;
+ grn_obj *column = grn_obj_column(ctx, obj,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ grn_table_cursor *tc = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0,
+ 0, -1, GRN_CURSOR_ASCENDING);
+ GRN_TEXT_PUTC(ctx, bulk, '[');
+ if (tc) {
+ for (i = 0; (id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL; i++) {
+ if (i) { GRN_TEXT_PUTC(ctx, bulk, ','); }
+ GRN_BULK_REWIND(&buf);
+ grn_obj_get_value(ctx, column, id, &buf);
+ grn_text_esc(ctx, bulk, GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf));
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTC(ctx, bulk, ']');
+ grn_obj_unlink(ctx, column);
+ }
+ break;
+ }
+ grn_obj_close(ctx, &buf);
+ return GRN_SUCCESS;
+}
+
+const char *
+grn_text_urldec(grn_ctx *ctx, grn_obj *buf, const char *p, const char *e, char d)
+{
+ while (p < e) {
+ if (*p == d) {
+ p++; break;
+ } else if (*p == '%' && p + 3 <= e) {
+ const char *r;
+ unsigned int c = grn_htoui(p + 1, p + 3, &r);
+ if (p + 3 == r) {
+ GRN_TEXT_PUTC(ctx, buf, c);
+ p += 3;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "invalid %% sequence (%c%c)", p[1], p[2]);
+ GRN_TEXT_PUTC(ctx, buf, '%');
+ p += 1;
+ }
+ } else {
+ GRN_TEXT_PUTC(ctx, buf, *p);
+ p++;
+ }
+ }
+ return p;
+}
+
+const char *
+grn_text_cgidec(grn_ctx *ctx, grn_obj *buf, const char *p, const char *e,
+ const char *delimiters)
+{
+ while (p < e) {
+ grn_bool found_delimiter = GRN_FALSE;
+ const char *delimiter;
+ for (delimiter = delimiters; *delimiter; delimiter++) {
+ if (*p == *delimiter) {
+ found_delimiter = GRN_TRUE;
+ break;
+ }
+ }
+ if (found_delimiter) {
+ p++;
+ break;
+ }
+
+ if (*p == '+') {
+ GRN_TEXT_PUTC(ctx, buf, ' ');
+ p++;
+ } else if (*p == '%' && p + 3 <= e) {
+ const char *r;
+ unsigned int c = grn_htoui(p + 1, p + 3, &r);
+ if (p + 3 == r) {
+ GRN_TEXT_PUTC(ctx, buf, c);
+ p += 3;
+ } else {
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "invalid %% sequence (%c%c)", p[1], p[2]);
+ GRN_TEXT_PUTC(ctx, buf, '%');
+ p += 1;
+ }
+ } else {
+ GRN_TEXT_PUTC(ctx, buf, *p);
+ p++;
+ }
+ }
+ return p;
+}
+
+void
+grn_str_url_path_normalize(grn_ctx *ctx, const char *path, size_t path_len,
+ char *buf, size_t buf_len)
+{
+ char *b = buf, *be = buf + buf_len - 1;
+ const char *p = path, *pe = path + path_len, *pc;
+
+ if (buf_len < 2) { return; }
+
+ while (p < pe) {
+ for (pc = p; pc < pe && *pc != '/'; pc++) {}
+ if (*p == '.') {
+ if (pc == p + 2 && *(p + 1) == '.') {
+ /* '..' */
+ if (b - buf >= 2) {
+ for (b -= 2; *b != '/' && b >= buf; b--) {}
+ }
+ if (*b == '/') {
+ b++;
+ ERR(GRN_INVALID_ARGUMENT, "parent path doesn't exist.");
+ }
+ p = pc + 1;
+ continue;
+ } else if (pc == p + 1) {
+ /* '.' */
+ p = pc + 1;
+ continue;
+ }
+ }
+ if (be - b >= pc - p) {
+ memcpy(b, p, (pc - p));
+ b += pc - p;
+ p = pc;
+ if (p < pe && *pc == '/' && be > b) {
+ *b++ = '/';
+ p++;
+ }
+ }
+ }
+ *b = '\0';
+}
+
+grn_rc
+grn_text_fgets(grn_ctx *ctx, grn_obj *buf, FILE *fp)
+{
+ size_t len;
+ grn_rc rc = GRN_END_OF_DATA;
+ for (;;) {
+ grn_bulk_reserve(ctx, buf, BUFSIZ);
+ if (!fgets(GRN_BULK_CURR(buf), BUFSIZ, fp)) { break; }
+ if (!(len = strlen(GRN_BULK_CURR(buf)))) { break; }
+ GRN_BULK_INCR_LEN(buf, len);
+ rc = GRN_SUCCESS;
+ if (GRN_BULK_CURR(buf)[-1] == '\n') { break; }
+ }
+ return rc;
+}
+
+grn_bool
+grn_bulk_is_zero(grn_ctx *ctx, grn_obj *obj)
+{
+ const char *v = GRN_BULK_HEAD(obj);
+ unsigned int s = GRN_BULK_VSIZE(obj);
+ for (; s; s--, v++) {
+ if (*v) { return GRN_FALSE; }
+ }
+ return GRN_TRUE;
+}
+
diff --git a/storage/mroonga/vendor/groonga/lib/str.h b/storage/mroonga/vendor/groonga/lib/str.h
new file mode 100644
index 00000000000..069250a70d8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/str.h
@@ -0,0 +1,129 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_STR_H
+#define GRN_STR_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_NFKC_H
+#include <groonga/nfkc.h>
+#endif /* GRN_NFKC_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ GETOPT_OP_NONE = 0,
+ GETOPT_OP_ON,
+ GETOPT_OP_OFF,
+ GETOPT_OP_UPDATE
+} grn_str_getopt_op;
+
+typedef struct {
+ const char opt; /* ends opt == 0 && longopt == NULL */
+ const char *longopt;
+ const char **arg; /* if NULL, no arg are required */
+ int flag;
+ grn_str_getopt_op op;
+} grn_str_getopt_opt;
+
+GRN_API size_t grn_str_len(grn_ctx *ctx, const char *str, grn_encoding encoding, const char **last);
+
+#define GRN_STR_BLANK 0x80
+#define GRN_STR_ISBLANK(c) (c & 0x80)
+#define GRN_STR_CTYPE(c) (c & 0x7f)
+
+GRN_API int grn_isspace(const char *s, grn_encoding encoding);
+int8_t grn_atoi8(const char *nptr, const char *end, const char **rest);
+uint8_t grn_atoui8(const char *nptr, const char *end, const char **rest);
+int16_t grn_atoi16(const char *nptr, const char *end, const char **rest);
+uint16_t grn_atoui16(const char *nptr, const char *end, const char **rest);
+GRN_API int grn_atoi(const char *nptr, const char *end, const char **rest);
+GRN_API unsigned int grn_atoui(const char *nptr, const char *end, const char **rest);
+unsigned int grn_htoui(const char *nptr, const char *end, const char **rest);
+GRN_API int64_t grn_atoll(const char *nptr, const char *end, const char **rest);
+grn_rc grn_itoa(int i, char *p, char *end, char **rest);
+grn_rc grn_lltoa(int64_t i, char *p, char *end, char **rest);
+grn_rc grn_ulltoa(uint64_t i, char *p, char *end, char **rest);
+GRN_API grn_rc grn_aton(grn_ctx *ctx, const char *p, const char *end, const char **rest, grn_obj *res);
+
+GRN_API void grn_itoh(unsigned int i, char *p, unsigned int len);
+int grn_str_tok(const char *str, size_t str_len, char delim, const char **tokbuf, int buf_size, const char **rest);
+GRN_API int grn_str_getopt(int argc, char * const argv[], const grn_str_getopt_opt *opts, int *flags);
+
+extern int grn_str_margin_size;
+
+char *grn_itob(grn_id id, char *p);
+grn_id grn_btoi(char *b);
+
+grn_rc grn_substring(grn_ctx *ctx, char **str, char **str_end, int start, int end, grn_encoding encoding);
+
+GRN_API int grn_charlen_(grn_ctx *ctx, const char *str, const char *end, grn_encoding encoding);
+GRN_API grn_str *grn_str_open_(grn_ctx *ctx, const char *str, unsigned int str_len, int flags, grn_encoding encoding);
+
+#define GRN_BULK_INCR_LEN(buf,len) do {\
+ if (GRN_BULK_OUTP(buf)) {\
+ (buf)->u.b.curr += (len);\
+ } else {\
+ (buf)->header.flags += (len);\
+ }\
+} while (0)
+
+#define GRN_BULK_SET_CURR(buf,p) do {\
+ if (GRN_BULK_OUTP(buf)) {\
+ (buf)->u.b.curr = (char *)(p);\
+ } else {\
+ (buf)->header.flags = (char *)(p) - GRN_BULK_HEAD(buf);\
+ }\
+} while (0)
+
+grn_rc grn_text_ulltoa(grn_ctx *ctx, grn_obj *buf, unsigned long long int i);
+
+GRN_API const char *grn_text_cgidec(grn_ctx *ctx, grn_obj *buf,
+ const char *p, const char *e,
+ const char *delimiters);
+
+#define GRN_TOK_VOID (0x00)
+#define GRN_TOK_SYMBOL (0x01)
+#define GRN_TOK_STRING (0x02)
+#define GRN_TOK_QUOTE (0x03)
+
+GRN_API const char *grn_text_unesc_tok(grn_ctx *ctx, grn_obj *buf,
+ const char *p, const char *e,
+ char *tok_type);
+
+GRN_API void grn_str_url_path_normalize(grn_ctx *ctx,
+ const char *path, size_t path_len,
+ char *buf, size_t buf_len);
+
+#define GRN_OBJ_FORMAT_XML_ELEMENT_MASK (0x01<<1)
+#define GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET (0x00<<1)
+#define GRN_OBJ_FORMAT_XML_ELEMENT_NAVIGATIONENTRY (0x01<<1)
+
+#include <stdio.h>
+GRN_API grn_rc grn_text_fgets(grn_ctx *ctx, grn_obj *buf, FILE *fp);
+
+grn_bool grn_bulk_is_zero(grn_ctx *ctx, grn_obj *obj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_STR_H */
diff --git a/storage/mroonga/vendor/groonga/lib/string.c b/storage/mroonga/vendor/groonga/lib/string.c
new file mode 100644
index 00000000000..f0fcf561b5e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/string.c
@@ -0,0 +1,406 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "groonga_in.h"
+#include <string.h>
+#include "string_in.h"
+#include "normalizer_in.h"
+#include "str.h"
+#include "util.h"
+
+#include <groonga/tokenizer.h>
+
+static grn_string *
+grn_fake_string_open(grn_ctx *ctx, grn_string *string)
+{
+ /* TODO: support GRN_STRING_REMOVE_BLANK flag and ctypes */
+ grn_string *nstr = string;
+ const char *str;
+ unsigned int str_len;
+
+ str = nstr->original;
+ str_len = nstr->original_length_in_bytes;
+
+ if (!(nstr->normalized = GRN_MALLOC(str_len + 1))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[strinig][fake] failed to allocate normalized text space");
+ grn_string_close(ctx, (grn_obj *)nstr);
+ return NULL;
+ }
+
+ if (nstr->flags & GRN_STRING_REMOVE_TOKENIZED_DELIMITER &&
+ ctx->encoding == GRN_ENC_UTF8) {
+ int char_length;
+ const char *source_current = str;
+ const char *source_end = str + str_len;
+ char *destination = nstr->normalized;
+ unsigned int destination_length = 0;
+ while ((char_length = grn_charlen(ctx, source_current, source_end)) > 0) {
+ if (!grn_tokenizer_is_tokenized_delimiter(ctx,
+ source_current, char_length,
+ ctx->encoding)) {
+ memcpy(destination, source_current, char_length);
+ destination += char_length;
+ destination_length += char_length;
+ }
+ source_current += char_length;
+ }
+ nstr->normalized[destination_length] = '\0';
+ nstr->normalized_length_in_bytes = destination_length;
+ } else {
+ memcpy(nstr->normalized, str, str_len);
+ nstr->normalized[str_len] = '\0';
+ nstr->normalized_length_in_bytes = str_len;
+ }
+
+ if (nstr->flags & GRN_STRING_WITH_CHECKS) {
+ int16_t f = 0;
+ unsigned char c;
+ size_t i;
+ if (!(nstr->checks = (int16_t *) GRN_MALLOC(sizeof(int16_t) * str_len))) {
+ grn_string_close(ctx, (grn_obj *)nstr);
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[strinig][fake] failed to allocate checks space");
+ return NULL;
+ }
+ switch (nstr->encoding) {
+ case GRN_ENC_EUC_JP:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = ((c >= 0xa1U && c <= 0xfeU) || c == 0x8eU ? 2 : (c == 0x8fU ? 3 : 1)
+ );
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ case GRN_ENC_SJIS:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = (c >= 0x81U && ((c <= 0x9fU) || (c >= 0xe0U && c <= 0xfcU)) ? 2 : 1);
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ case GRN_ENC_UTF8:
+ for (i = 0; i < str_len; i++) {
+ if (!f) {
+ c = (unsigned char) str[i];
+ f = (c & 0x80U ? (c & 0x20U ? (c & 0x10U ? 4 : 3)
+ : 2)
+ : 1);
+ nstr->checks[i] = f;
+ } else {
+ nstr->checks[i] = 0;
+ }
+ f--;
+ }
+ break;
+ default:
+ for (i = 0; i < str_len; i++) {
+ nstr->checks[i] = 1;
+ }
+ break;
+ }
+ }
+ return nstr;
+}
+
+grn_obj *
+grn_string_open_(grn_ctx *ctx, const char *str, unsigned int str_len,
+ grn_obj *normalizer, int flags, grn_encoding encoding)
+{
+ grn_string *string;
+ grn_obj *obj;
+ grn_bool is_normalizer_auto;
+
+ if (!str || !str_len) {
+ return NULL;
+ }
+
+ string = GRN_MALLOCN(grn_string, 1);
+ if (!string) {
+ GRN_LOG(ctx, GRN_LOG_ALERT,
+ "[string][open] failed to allocate memory");
+ return NULL;
+ }
+
+ obj = (grn_obj *)string;
+ GRN_OBJ_INIT(obj, GRN_STRING, GRN_OBJ_ALLOCATED, GRN_ID_NIL);
+ string->original = str;
+ string->original_length_in_bytes = str_len;
+ string->normalized = NULL;
+ string->normalized_length_in_bytes = 0;
+ string->n_characters = 0;
+ string->checks = NULL;
+ string->ctypes = NULL;
+ string->encoding = encoding;
+ string->flags = flags;
+
+ if (!normalizer) {
+ return (grn_obj *)grn_fake_string_open(ctx, string);
+ }
+
+ is_normalizer_auto = (normalizer == GRN_NORMALIZER_AUTO);
+ if (is_normalizer_auto) {
+ normalizer = grn_ctx_get(ctx, GRN_NORMALIZER_AUTO_NAME, -1);
+ }
+
+ /* TODO: check rc */
+ grn_normalizer_normalize(ctx, normalizer, (grn_obj *)string);
+ if (ctx->rc) {
+ grn_obj_close(ctx, obj);
+ obj = NULL;
+ }
+
+ if (is_normalizer_auto) {
+ grn_obj_unlink(ctx, normalizer);
+ }
+
+ return obj;
+}
+
+grn_obj *
+grn_string_open(grn_ctx *ctx, const char *str, unsigned int str_len,
+ grn_obj *normalizer, int flags)
+{
+ return grn_string_open_(ctx, str, str_len, normalizer, flags, ctx->encoding);
+}
+
+grn_rc
+grn_string_get_original(grn_ctx *ctx, grn_obj *string,
+ const char **original,
+ unsigned int *length_in_bytes)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ if (original) { *original = string_->original; }
+ if (length_in_bytes) {
+ *length_in_bytes = string_->original_length_in_bytes;
+ }
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_RETURN(rc);
+}
+
+int
+grn_string_get_flags(grn_ctx *ctx, grn_obj *string)
+{
+ int flags = 0;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ flags = string_->flags;
+ }
+ GRN_API_RETURN(flags);
+}
+
+grn_rc
+grn_string_get_normalized(grn_ctx *ctx, grn_obj *string,
+ const char **normalized,
+ unsigned int *length_in_bytes,
+ unsigned int *n_characters)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ if (normalized) { *normalized = string_->normalized; }
+ if (length_in_bytes) {
+ *length_in_bytes = string_->normalized_length_in_bytes;
+ }
+ if (n_characters) { *n_characters = string_->n_characters; }
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_rc
+grn_string_set_normalized(grn_ctx *ctx, grn_obj *string,
+ char *normalized, unsigned int length_in_bytes,
+ unsigned int n_characters)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ if (string_->normalized) { GRN_FREE(string_->normalized); }
+ string_->normalized = normalized;
+ string_->normalized_length_in_bytes = length_in_bytes;
+ string_->n_characters = n_characters;
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_RETURN(rc);
+}
+
+const short *
+grn_string_get_checks(grn_ctx *ctx, grn_obj *string)
+{
+ int16_t *checks = NULL;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ checks = string_->checks;
+ } else {
+ checks = NULL;
+ }
+ GRN_API_RETURN(checks);
+}
+
+grn_rc
+grn_string_set_checks(grn_ctx *ctx, grn_obj *string, short *checks)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ if (string_->checks) { GRN_FREE(string_->checks); }
+ string_->checks = checks;
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_RETURN(rc);
+}
+
+const unsigned char *
+grn_string_get_types(grn_ctx *ctx, grn_obj *string)
+{
+ unsigned char *types = NULL;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ types = string_->ctypes;
+ } else {
+ types = NULL;
+ }
+ GRN_API_RETURN(types);
+}
+
+grn_rc
+grn_string_set_types(grn_ctx *ctx, grn_obj *string, unsigned char *types)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ if (string_->ctypes) { GRN_FREE(string_->ctypes); }
+ string_->ctypes = types;
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ GRN_API_RETURN(rc);
+}
+
+grn_encoding
+grn_string_get_encoding(grn_ctx *ctx, grn_obj *string)
+{
+ grn_encoding encoding = GRN_ENC_NONE;
+ grn_string *string_ = (grn_string *)string;
+ GRN_API_ENTER;
+ if (string_) {
+ encoding = string_->encoding;
+ }
+ GRN_API_RETURN(encoding);
+}
+
+grn_rc
+grn_string_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *string)
+{
+ grn_string *string_ = (grn_string *)string;
+
+ GRN_TEXT_PUTS(ctx, buffer, "#<string:");
+
+ GRN_TEXT_PUTS(ctx, buffer, " original:<");
+ GRN_TEXT_PUT(ctx, buffer,
+ string_->original,
+ string_->original_length_in_bytes);
+ GRN_TEXT_PUTS(ctx, buffer, ">");
+ GRN_TEXT_PUTS(ctx, buffer, "(");
+ grn_text_itoa(ctx, buffer, string_->original_length_in_bytes);
+ GRN_TEXT_PUTS(ctx, buffer, ")");
+
+ GRN_TEXT_PUTS(ctx, buffer, " normalized:<");
+ GRN_TEXT_PUT(ctx, buffer,
+ string_->normalized,
+ string_->normalized_length_in_bytes);
+ GRN_TEXT_PUTS(ctx, buffer, ">");
+ GRN_TEXT_PUTS(ctx, buffer, "(");
+ grn_text_itoa(ctx, buffer, string_->normalized_length_in_bytes);
+ GRN_TEXT_PUTS(ctx, buffer, ")");
+
+ GRN_TEXT_PUTS(ctx, buffer, " n_characters:");
+ grn_text_itoa(ctx, buffer, string_->n_characters);
+
+ GRN_TEXT_PUTS(ctx, buffer, " encoding:");
+ grn_inspect_encoding(ctx, buffer, string_->encoding);
+
+ GRN_TEXT_PUTS(ctx, buffer, " flags:");
+ if (string_->flags & GRN_STRING_REMOVE_BLANK) {
+ GRN_TEXT_PUTS(ctx, buffer, "REMOVE_BLANK|");
+ }
+ if (string_->flags & GRN_STRING_WITH_TYPES) {
+ GRN_TEXT_PUTS(ctx, buffer, "WITH_TYPES|");
+ }
+ if (string_->flags & GRN_STRING_WITH_CHECKS) {
+ GRN_TEXT_PUTS(ctx, buffer, "WITH_CHECKS|");
+ }
+ if (string_->flags & GRN_STRING_REMOVE_TOKENIZED_DELIMITER) {
+ GRN_TEXT_PUTS(ctx, buffer, "REMOVE_TOKENIZED_DELIMITER|");
+ }
+ if (GRN_TEXT_VALUE(buffer)[GRN_TEXT_LEN(buffer) - 1] == '|') {
+ grn_bulk_truncate(ctx, buffer, GRN_TEXT_LEN(buffer) - 1);
+ }
+
+ GRN_TEXT_PUTS(ctx, buffer, ">");
+
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_string_close(grn_ctx *ctx, grn_obj *string)
+{
+ grn_rc rc;
+ grn_string *string_ = (grn_string *)string;
+ if (string_) {
+ if (string_->normalized) { GRN_FREE(string_->normalized); }
+ if (string_->ctypes) { GRN_FREE(string_->ctypes); }
+ if (string_->checks) { GRN_FREE(string_->checks); }
+ GRN_FREE(string);
+ rc = GRN_SUCCESS;
+ } else {
+ rc = GRN_INVALID_ARGUMENT;
+ }
+ return rc;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/string_in.h b/storage/mroonga/vendor/groonga/lib/string_in.h
new file mode 100644
index 00000000000..55e2cb2cbcb
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/string_in.h
@@ -0,0 +1,65 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef GRN_STRING_H
+#define GRN_STRING_H
+
+#ifndef GROONGA_IN_H
+# include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+# include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_DB_H
+# include "db.h"
+#endif /* GRN_DB_H */
+
+#ifndef GRN_STR_H
+# include "str.h"
+#endif /* GRN_STR_IN_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ grn_obj_header header;
+ const char *original;
+ unsigned int original_length_in_bytes;
+ char *normalized;
+ unsigned int normalized_length_in_bytes;
+ unsigned int n_characters;
+ short *checks;
+ unsigned char *ctypes;
+ grn_encoding encoding;
+ int flags;
+} grn_string;
+
+grn_obj *grn_string_open_(grn_ctx *ctx, const char *str, unsigned int str_len,
+ grn_obj *normalizer, int flags, grn_encoding encoding);
+grn_rc grn_string_close(grn_ctx *ctx, grn_obj *string);
+grn_rc grn_string_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *string);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_STRING_IN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/token.c b/storage/mroonga/vendor/groonga/lib/token.c
new file mode 100644
index 00000000000..00b3de2ebdd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/token.c
@@ -0,0 +1,897 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include <string.h>
+#include <ctype.h>
+#include "ctx_impl.h"
+#include "token.h"
+#include "pat.h"
+#include "dat.h"
+#include "hash.h"
+#include "string_in.h"
+#include "plugin_in.h"
+#include <groonga/tokenizer.h>
+
+grn_obj *grn_token_uvector = NULL;
+
+typedef struct {
+ grn_tokenizer_token token;
+ byte *curr;
+ byte *tail;
+ uint32_t unit;
+} grn_uvector_tokenizer;
+
+static grn_obj *
+uvector_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *str, *flags, *mode;
+ grn_uvector_tokenizer *tokenizer;
+ if (!(flags = grn_ctx_pop(ctx))) {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenizer][uvector] missing argument: flags");
+ return NULL;
+ }
+ if (!(str = grn_ctx_pop(ctx))) {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenizer][uvector] missing argument: string");
+ return NULL;
+ }
+ if (!(mode = grn_ctx_pop(ctx))) {
+ ERR(GRN_INVALID_ARGUMENT, "[tokenizer][uvector] missing argument: mode");
+ return NULL;
+ }
+ if (!(tokenizer = GRN_MALLOC(sizeof(grn_uvector_tokenizer)))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][uvector] "
+ "memory allocation to grn_uvector_tokenizer failed");
+ return NULL;
+ }
+ user_data->ptr = tokenizer;
+
+ grn_tokenizer_token_init(ctx, &(tokenizer->token));
+ tokenizer->curr = (byte *)GRN_TEXT_VALUE(str);
+ tokenizer->tail = tokenizer->curr + GRN_TEXT_LEN(str);
+ tokenizer->unit = sizeof(grn_id);
+ return NULL;
+}
+
+static grn_obj *
+uvector_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_uvector_tokenizer *tokenizer = user_data->ptr;
+ byte *p = tokenizer->curr + tokenizer->unit;
+ if (tokenizer->tail < p) {
+ grn_tokenizer_token_push(ctx, &(tokenizer->token),
+ (const char *)tokenizer->curr, 0,
+ GRN_TOKENIZER_TOKEN_LAST);
+ } else {
+ grn_tokenizer_status status;
+ if (tokenizer->tail == p) {
+ status = GRN_TOKENIZER_TOKEN_LAST;
+ } else {
+ status = GRN_TOKENIZER_TOKEN_CONTINUE;
+ }
+ grn_tokenizer_token_push(ctx, &(tokenizer->token),
+ (const char *)tokenizer->curr, tokenizer->unit,
+ status);
+ tokenizer->curr = p;
+ }
+ return NULL;
+}
+
+static grn_obj *
+uvector_fin(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_uvector_tokenizer *tokenizer = user_data->ptr;
+ if (!tokenizer) {
+ return NULL;
+ }
+ grn_tokenizer_token_fin(ctx, &(tokenizer->token));
+ GRN_FREE(tokenizer);
+ return NULL;
+}
+
+typedef struct {
+ const uint8_t *delimiter;
+ uint32_t delimiter_len;
+ const unsigned char *next;
+ const unsigned char *end;
+ grn_tokenizer_token token;
+ grn_tokenizer_query *query;
+ grn_bool have_tokenized_delimiter;
+} grn_delimited_tokenizer;
+
+static grn_obj *
+delimited_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data,
+ const uint8_t *delimiter, uint32_t delimiter_len)
+{
+ grn_tokenizer_query *query;
+ unsigned int normalize_flags = 0;
+ const char *normalized;
+ unsigned int normalized_length_in_bytes;
+ grn_delimited_tokenizer *tokenizer;
+
+ query = grn_tokenizer_query_open(ctx, nargs, args, normalize_flags);
+ if (!query) {
+ return NULL;
+ }
+
+ if (!(tokenizer = GRN_MALLOC(sizeof(grn_delimited_tokenizer)))) {
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][delimit] "
+ "memory allocation to grn_delimited_tokenizer failed");
+ grn_tokenizer_query_close(ctx, query);
+ return NULL;
+ }
+ user_data->ptr = tokenizer;
+
+ tokenizer->query = query;
+
+ tokenizer->have_tokenized_delimiter =
+ grn_tokenizer_have_tokenized_delimiter(ctx,
+ tokenizer->query->ptr,
+ tokenizer->query->length,
+ tokenizer->query->encoding);
+ tokenizer->delimiter = delimiter;
+ tokenizer->delimiter_len = delimiter_len;
+ grn_string_get_normalized(ctx, tokenizer->query->normalized_query,
+ &normalized, &normalized_length_in_bytes,
+ NULL);
+ tokenizer->next = (const unsigned char *)normalized;
+ tokenizer->end = tokenizer->next + normalized_length_in_bytes;
+
+ grn_tokenizer_token_init(ctx, &(tokenizer->token));
+
+ return NULL;
+}
+
+static grn_obj *
+delimited_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_delimited_tokenizer *tokenizer = user_data->ptr;
+
+ if (tokenizer->have_tokenized_delimiter) {
+ unsigned int rest_length;
+ rest_length = tokenizer->end - tokenizer->next;
+ tokenizer->next =
+ (unsigned char *)grn_tokenizer_tokenized_delimiter_next(
+ ctx,
+ &(tokenizer->token),
+ (const char *)tokenizer->next,
+ rest_length,
+ tokenizer->query->encoding);
+ } else {
+ size_t cl;
+ const unsigned char *p = tokenizer->next, *r;
+ const unsigned char *e = tokenizer->end;
+ grn_tokenizer_status status;
+ for (r = p; r < e; r += cl) {
+ if (!(cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ tokenizer->next = (unsigned char *)e;
+ break;
+ }
+ {
+ grn_bool found_delimiter = GRN_FALSE;
+ const unsigned char *current_end = r;
+ while (current_end + tokenizer->delimiter_len <= e &&
+ !memcmp(current_end,
+ tokenizer->delimiter, tokenizer->delimiter_len)) {
+ current_end += tokenizer->delimiter_len;
+ tokenizer->next = current_end;
+ found_delimiter = GRN_TRUE;
+ }
+ if (found_delimiter) {
+ break;
+ }
+ }
+ }
+ if (r == e) {
+ status = GRN_TOKENIZER_LAST;
+ } else {
+ status = GRN_TOKENIZER_CONTINUE;
+ }
+ grn_tokenizer_token_push(ctx,
+ &(tokenizer->token),
+ (const char *)p,
+ r - p,
+ status);
+ }
+
+ return NULL;
+}
+
+static grn_obj *
+delimited_fin(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_delimited_tokenizer *tokenizer = user_data->ptr;
+ if (!tokenizer) {
+ return NULL;
+ }
+ grn_tokenizer_query_close(ctx, tokenizer->query);
+ grn_tokenizer_token_fin(ctx, &(tokenizer->token));
+ GRN_FREE(tokenizer);
+ return NULL;
+}
+
+static grn_obj *
+delimit_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ static const uint8_t delimiter[1] = {' '};
+ return delimited_init(ctx, nargs, args, user_data, delimiter, 1);
+}
+
+static grn_obj *
+delimit_null_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ static const uint8_t delimiter[1] = {'\0'};
+ return delimited_init(ctx, nargs, args, user_data, delimiter, 1);
+}
+
+/* ngram tokenizer */
+
+typedef struct {
+ grn_tokenizer_token token;
+ grn_tokenizer_query *query;
+ uint8_t uni_alpha;
+ uint8_t uni_digit;
+ uint8_t uni_symbol;
+ uint8_t ngram_unit;
+ uint8_t ignore_blank;
+ uint8_t overlap;
+ int32_t pos;
+ uint32_t skip;
+ const unsigned char *next;
+ const unsigned char *end;
+ const uint_least8_t *ctypes;
+ uint32_t len;
+ uint32_t tail;
+} grn_ngram_tokenizer;
+
+static grn_obj *
+ngram_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data, uint8_t ngram_unit,
+ uint8_t uni_alpha, uint8_t uni_digit, uint8_t uni_symbol, uint8_t ignore_blank)
+{
+ unsigned int normalize_flags =
+ GRN_STRING_REMOVE_BLANK |
+ GRN_STRING_WITH_TYPES |
+ GRN_STRING_REMOVE_TOKENIZED_DELIMITER;
+ grn_tokenizer_query *query;
+ const char *normalized;
+ unsigned int normalized_length_in_bytes;
+ grn_ngram_tokenizer *tokenizer;
+
+ query = grn_tokenizer_query_open(ctx, nargs, args, normalize_flags);
+ if (!query) {
+ return NULL;
+ }
+
+ if (!(tokenizer = GRN_MALLOC(sizeof(grn_ngram_tokenizer)))) {
+ grn_tokenizer_query_close(ctx, query);
+ ERR(GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][ngram] "
+ "memory allocation to grn_ngram_tokenizer failed");
+ return NULL;
+ }
+ user_data->ptr = tokenizer;
+
+ grn_tokenizer_token_init(ctx, &(tokenizer->token));
+ tokenizer->query = query;
+
+ tokenizer->uni_alpha = uni_alpha;
+ tokenizer->uni_digit = uni_digit;
+ tokenizer->uni_symbol = uni_symbol;
+ tokenizer->ngram_unit = ngram_unit;
+ tokenizer->ignore_blank = ignore_blank;
+ tokenizer->overlap = 0;
+ tokenizer->pos = 0;
+ tokenizer->skip = 0;
+
+ grn_string_get_normalized(ctx, tokenizer->query->normalized_query,
+ &normalized, &normalized_length_in_bytes,
+ &(tokenizer->len));
+ tokenizer->next = (const unsigned char *)normalized;
+ tokenizer->end = tokenizer->next + normalized_length_in_bytes;
+ tokenizer->ctypes =
+ grn_string_get_types(ctx, tokenizer->query->normalized_query);
+ return NULL;
+}
+
+static grn_obj *
+unigram_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 1, 1, 1, 1, 0); }
+
+static grn_obj *
+bigram_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 1, 1, 1, 0); }
+
+static grn_obj *
+trigram_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 3, 1, 1, 1, 0); }
+
+static grn_obj *
+bigrams_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 1, 1, 0, 0); }
+
+static grn_obj *
+bigramsa_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 0, 1, 0, 0); }
+
+static grn_obj *
+bigramsad_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 0, 0, 0, 0); }
+
+static grn_obj *
+bigrami_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 1, 1, 1, 1); }
+
+static grn_obj *
+bigramis_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 1, 1, 0, 1); }
+
+static grn_obj *
+bigramisa_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 0, 1, 0, 1); }
+
+static grn_obj *
+bigramisad_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{ return ngram_init(ctx, nargs, args, user_data, 2, 0, 0, 0, 1); }
+
+static grn_obj *
+ngram_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ size_t cl;
+ grn_ngram_tokenizer *tokenizer = user_data->ptr;
+ const unsigned char *p = tokenizer->next, *r = p, *e = tokenizer->end;
+ int32_t len = 0, pos = tokenizer->pos + tokenizer->skip, status = 0;
+ const uint_least8_t *cp = tokenizer->ctypes ? tokenizer->ctypes + pos : NULL;
+ if (cp && tokenizer->uni_alpha && GRN_STR_CTYPE(*cp) == GRN_CHAR_ALPHA) {
+ while ((cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ len++;
+ r += cl;
+ if (/* !tokenizer->ignore_blank && */ GRN_STR_ISBLANK(*cp)) { break; }
+ if (GRN_STR_CTYPE(*++cp) != GRN_CHAR_ALPHA) { break; }
+ }
+ tokenizer->next = r;
+ tokenizer->overlap = 0;
+ } else if (cp &&
+ tokenizer->uni_digit &&
+ GRN_STR_CTYPE(*cp) == GRN_CHAR_DIGIT) {
+ while ((cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ len++;
+ r += cl;
+ if (/* !tokenizer->ignore_blank && */ GRN_STR_ISBLANK(*cp)) { break; }
+ if (GRN_STR_CTYPE(*++cp) != GRN_CHAR_DIGIT) { break; }
+ }
+ tokenizer->next = r;
+ tokenizer->overlap = 0;
+ } else if (cp &&
+ tokenizer->uni_symbol &&
+ GRN_STR_CTYPE(*cp) == GRN_CHAR_SYMBOL) {
+ while ((cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ len++;
+ r += cl;
+ if (!tokenizer->ignore_blank && GRN_STR_ISBLANK(*cp)) { break; }
+ if (GRN_STR_CTYPE(*++cp) != GRN_CHAR_SYMBOL) { break; }
+ }
+ tokenizer->next = r;
+ tokenizer->overlap = 0;
+ } else {
+#ifdef PRE_DEFINED_UNSPLIT_WORDS
+ const unsigned char *key = NULL;
+ // todo : grn_pat_lcp_search
+ if ((tid = grn_sym_common_prefix_search(sym, p))) {
+ if (!(key = _grn_sym_key(sym, tid))) {
+ tokenizer->status = GRN_TOKEN_NOT_FOUND;
+ return NULL;
+ }
+ len = grn_str_len(key, tokenizer->query->encoding, NULL);
+ }
+ r = p + grn_charlen_(ctx, p, e, tokenizer->query->encoding);
+ if (tid && (len > 1 || r == p)) {
+ if (r != p && pos + len - 1 <= tokenizer->tail) { continue; }
+ p += strlen(key);
+ if (!*p && tokenizer->mode == GRN_TOKEN_GET) {
+ tokenizer->status = GRN_TOKEN_DONE;
+ }
+ }
+#endif /* PRE_DEFINED_UNSPLIT_WORDS */
+ if ((cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ len++;
+ r += cl;
+ tokenizer->next = r;
+ while (len < tokenizer->ngram_unit &&
+ (cl = grn_charlen_(ctx, (char *)r, (char *)e,
+ tokenizer->query->encoding))) {
+ if (cp) {
+ if (!tokenizer->ignore_blank && GRN_STR_ISBLANK(*cp)) { break; }
+ cp++;
+ if ((tokenizer->uni_alpha && GRN_STR_CTYPE(*cp) == GRN_CHAR_ALPHA) ||
+ (tokenizer->uni_digit && GRN_STR_CTYPE(*cp) == GRN_CHAR_DIGIT) ||
+ (tokenizer->uni_symbol && GRN_STR_CTYPE(*cp) == GRN_CHAR_SYMBOL)) {
+ break;
+ }
+ }
+ len++;
+ r += cl;
+ }
+ if (tokenizer->overlap) {
+ status |= GRN_TOKENIZER_TOKEN_OVERLAP;
+ }
+ if (len < tokenizer->ngram_unit) {
+ status |= GRN_TOKENIZER_TOKEN_UNMATURED;
+ }
+ tokenizer->overlap = (len > 1) ? 1 : 0;
+ }
+ }
+ tokenizer->pos = pos;
+ tokenizer->len = len;
+ tokenizer->tail = pos + len - 1;
+ if (p == r || tokenizer->next == e) {
+ tokenizer->skip = 0;
+ status |= GRN_TOKENIZER_TOKEN_LAST;
+ } else {
+ tokenizer->skip = tokenizer->overlap ? 1 : len;
+ }
+ if (r == e) { status |= GRN_TOKENIZER_TOKEN_REACH_END; }
+ grn_tokenizer_token_push(ctx,
+ &(tokenizer->token),
+ (const char *)p,
+ r - p,
+ status);
+ return NULL;
+}
+
+static grn_obj *
+ngram_fin(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_ngram_tokenizer *tokenizer = user_data->ptr;
+ if (!tokenizer) {
+ return NULL;
+ }
+ grn_tokenizer_token_fin(ctx, &(tokenizer->token));
+ grn_tokenizer_query_close(ctx, tokenizer->query);
+ GRN_FREE(tokenizer);
+ return NULL;
+}
+
+/* external */
+
+grn_rc
+grn_token_init(void)
+{
+ static grn_proc _grn_token_uvector;
+ _grn_token_uvector.obj.db = NULL;
+ _grn_token_uvector.obj.id = GRN_ID_NIL;
+ _grn_token_uvector.obj.header.domain = GRN_ID_NIL;
+ _grn_token_uvector.obj.range = GRN_ID_NIL;
+ _grn_token_uvector.funcs[PROC_INIT] = uvector_init;
+ _grn_token_uvector.funcs[PROC_NEXT] = uvector_next;
+ _grn_token_uvector.funcs[PROC_FIN] = uvector_fin;
+ grn_token_uvector = (grn_obj *)&_grn_token_uvector;
+ return GRN_SUCCESS;
+}
+
+grn_rc
+grn_token_fin(void)
+{
+ return GRN_SUCCESS;
+}
+
+static void
+grn_token_cursor_open_initialize_token_filters(grn_ctx *ctx,
+ grn_token_cursor *token_cursor)
+{
+ grn_obj *token_filters = token_cursor->token_filters;
+ unsigned int i, n_token_filters;
+
+ if (token_filters) {
+ n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
+ } else {
+ n_token_filters = 0;
+ }
+
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
+ grn_proc *token_filter = (grn_proc *)token_filter_object;
+
+ token_filter->user_data =
+ token_filter->callbacks.token_filter.init(ctx,
+ token_cursor->table,
+ token_cursor->mode);
+ }
+}
+
+grn_token_cursor *
+grn_token_cursor_open(grn_ctx *ctx, grn_obj *table,
+ const char *str, size_t str_len,
+ grn_token_mode mode, unsigned int flags)
+{
+ grn_token_cursor *token_cursor;
+ grn_encoding encoding;
+ grn_obj *tokenizer;
+ grn_obj *normalizer;
+ grn_obj *token_filters;
+ grn_obj_flags table_flags;
+ if (grn_table_get_info(ctx, table, &table_flags, &encoding, &tokenizer,
+ &normalizer, &token_filters)) {
+ return NULL;
+ }
+ if (!(token_cursor = GRN_MALLOC(sizeof(grn_token_cursor)))) { return NULL; }
+ token_cursor->table = table;
+ token_cursor->mode = mode;
+ token_cursor->encoding = encoding;
+ token_cursor->tokenizer = tokenizer;
+ token_cursor->token_filters = token_filters;
+ token_cursor->orig = (const unsigned char *)str;
+ token_cursor->orig_blen = str_len;
+ token_cursor->curr = NULL;
+ token_cursor->nstr = NULL;
+ token_cursor->curr_size = 0;
+ token_cursor->pos = -1;
+ token_cursor->status = GRN_TOKEN_DOING;
+ token_cursor->force_prefix = 0;
+ if (tokenizer) {
+ grn_obj str_, flags_, mode_;
+ GRN_TEXT_INIT(&str_, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&str_, str, str_len);
+ GRN_UINT32_INIT(&flags_, 0);
+ GRN_UINT32_SET(ctx, &flags_, flags);
+ GRN_UINT32_INIT(&mode_, 0);
+ GRN_UINT32_SET(ctx, &mode_, mode);
+ token_cursor->pctx.caller = NULL;
+ token_cursor->pctx.user_data.ptr = NULL;
+ token_cursor->pctx.proc = (grn_proc *)tokenizer;
+ token_cursor->pctx.hooks = NULL;
+ token_cursor->pctx.currh = NULL;
+ token_cursor->pctx.phase = PROC_INIT;
+ grn_ctx_push(ctx, &mode_);
+ grn_ctx_push(ctx, &str_);
+ grn_ctx_push(ctx, &flags_);
+ ((grn_proc *)tokenizer)->funcs[PROC_INIT](ctx, 1, &table, &token_cursor->pctx.user_data);
+ grn_obj_close(ctx, &flags_);
+ grn_obj_close(ctx, &str_);
+ grn_obj_close(ctx, &mode_);
+ } else {
+ int nflags = 0;
+ token_cursor->nstr = grn_string_open_(ctx, str, str_len,
+ normalizer,
+ nflags,
+ token_cursor->encoding);
+ if (token_cursor->nstr) {
+ const char *normalized;
+ grn_string_get_normalized(ctx, token_cursor->nstr,
+ &normalized, &(token_cursor->curr_size), NULL);
+ token_cursor->curr = (const unsigned char *)normalized;
+ } else {
+ ERR(GRN_TOKENIZER_ERROR,
+ "[token-cursor][open] failed to grn_string_open()");
+ }
+ }
+
+ grn_token_cursor_open_initialize_token_filters(ctx, token_cursor);
+
+ if (ctx->rc) {
+ grn_token_cursor_close(ctx, token_cursor);
+ token_cursor = NULL;
+ }
+ return token_cursor;
+}
+
+static int
+grn_token_cursor_next_apply_token_filters(grn_ctx *ctx,
+ grn_token_cursor *token_cursor,
+ grn_obj *current_token_data,
+ grn_obj *status)
+{
+ grn_obj *token_filters = token_cursor->token_filters;
+ unsigned int i, n_token_filters;
+ grn_token current_token;
+ grn_token next_token;
+
+ if (token_filters) {
+ n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
+ } else {
+ n_token_filters = 0;
+ }
+
+ GRN_TEXT_INIT(&(current_token.data), GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET(ctx, &(current_token.data),
+ GRN_TEXT_VALUE(current_token_data),
+ GRN_TEXT_LEN(current_token_data));
+ current_token.status = GRN_INT32_VALUE(status);
+ GRN_TEXT_INIT(&(next_token.data), GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET(ctx, &(next_token.data),
+ GRN_TEXT_VALUE(&(current_token.data)),
+ GRN_TEXT_LEN(&(current_token.data)));
+ next_token.status = current_token.status;
+
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
+ grn_proc *token_filter = (grn_proc *)token_filter_object;
+
+#define SKIP_FLAGS\
+ (GRN_TOKENIZER_TOKEN_SKIP |\
+ GRN_TOKENIZER_TOKEN_SKIP_WITH_POSITION)
+ if (current_token.status & SKIP_FLAGS) {
+ break;
+ }
+#undef SKIP_FLAGS
+
+ token_filter->callbacks.token_filter.filter(ctx,
+ &current_token,
+ &next_token,
+ token_filter->user_data);
+ GRN_TEXT_SET(ctx, &(current_token.data),
+ GRN_TEXT_VALUE(&(next_token.data)),
+ GRN_TEXT_LEN(&(next_token.data)));
+ current_token.status = next_token.status;
+ }
+
+ token_cursor->curr =
+ (const unsigned char *)GRN_TEXT_VALUE(&(current_token.data));
+ token_cursor->curr_size = GRN_TEXT_LEN(&(current_token.data));
+
+ return current_token.status;
+}
+
+grn_id
+grn_token_cursor_next(grn_ctx *ctx, grn_token_cursor *token_cursor)
+{
+ int status;
+ grn_id tid = GRN_ID_NIL;
+ grn_obj *table = token_cursor->table;
+ grn_obj *tokenizer = token_cursor->tokenizer;
+ while (token_cursor->status != GRN_TOKEN_DONE) {
+ if (tokenizer) {
+ grn_obj *curr_, *stat_;
+ ((grn_proc *)tokenizer)->funcs[PROC_NEXT](ctx, 1, &table, &token_cursor->pctx.user_data);
+ stat_ = grn_ctx_pop(ctx);
+ curr_ = grn_ctx_pop(ctx);
+ status = grn_token_cursor_next_apply_token_filters(ctx, token_cursor,
+ curr_, stat_);
+ token_cursor->status =
+ ((status & GRN_TOKENIZER_TOKEN_LAST) ||
+ (token_cursor->mode == GRN_TOKEN_GET &&
+ (status & GRN_TOKENIZER_TOKEN_REACH_END)))
+ ? GRN_TOKEN_DONE : GRN_TOKEN_DOING;
+ token_cursor->force_prefix = 0;
+#define SKIP_FLAGS \
+ (GRN_TOKENIZER_TOKEN_SKIP | GRN_TOKENIZER_TOKEN_SKIP_WITH_POSITION)
+ if (status & SKIP_FLAGS) {
+ if (status & GRN_TOKENIZER_TOKEN_SKIP) {
+ token_cursor->pos++;
+ }
+ if (token_cursor->status == GRN_TOKEN_DONE && tid == GRN_ID_NIL) {
+ token_cursor->status = GRN_TOKEN_DONE_SKIP;
+ break;
+ } else {
+ continue;
+ }
+ }
+#undef SKIP_FLAGS
+ if (token_cursor->curr_size == 0) {
+ char tokenizer_name[GRN_TABLE_MAX_KEY_SIZE];
+ int tokenizer_name_length;
+ tokenizer_name_length =
+ grn_obj_name(ctx, token_cursor->tokenizer,
+ tokenizer_name, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_LOG(ctx, GRN_WARN,
+ "[token_next] ignore an empty token: <%.*s>: <%.*s>",
+ tokenizer_name_length, tokenizer_name,
+ token_cursor->orig_blen, token_cursor->orig);
+ continue;
+ }
+ if (token_cursor->curr_size > GRN_TABLE_MAX_KEY_SIZE) {
+ GRN_LOG(ctx, GRN_WARN,
+ "[token_next] ignore too long token. "
+ "Token must be less than or equal to %d: <%d>(<%.*s>)",
+ GRN_TABLE_MAX_KEY_SIZE,
+ token_cursor->curr_size,
+ token_cursor->curr_size, token_cursor->curr);
+ continue;
+ }
+ if (status & GRN_TOKENIZER_TOKEN_UNMATURED) {
+ if (status & GRN_TOKENIZER_TOKEN_OVERLAP) {
+ if (token_cursor->mode == GRN_TOKEN_GET) { token_cursor->pos++; continue; }
+ } else {
+ if (status & GRN_TOKENIZER_TOKEN_LAST) { token_cursor->force_prefix = 1; }
+ }
+ }
+ } else {
+ token_cursor->status = GRN_TOKEN_DONE;
+ }
+ if (token_cursor->mode == GRN_TOKEN_ADD) {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ if (grn_io_lock(ctx, ((grn_pat *)table)->io, grn_lock_timeout)) {
+ tid = GRN_ID_NIL;
+ } else {
+ tid = grn_pat_add(ctx, (grn_pat *)table, token_cursor->curr, token_cursor->curr_size,
+ NULL, NULL);
+ grn_io_unlock(((grn_pat *)table)->io);
+ }
+ break;
+ case GRN_TABLE_DAT_KEY :
+ if (grn_io_lock(ctx, ((grn_dat *)table)->io, grn_lock_timeout)) {
+ tid = GRN_ID_NIL;
+ } else {
+ tid = grn_dat_add(ctx, (grn_dat *)table, token_cursor->curr, token_cursor->curr_size,
+ NULL, NULL);
+ grn_io_unlock(((grn_dat *)table)->io);
+ }
+ break;
+ case GRN_TABLE_HASH_KEY :
+ if (grn_io_lock(ctx, ((grn_hash *)table)->io, grn_lock_timeout)) {
+ tid = GRN_ID_NIL;
+ } else {
+ tid = grn_hash_add(ctx, (grn_hash *)table, token_cursor->curr, token_cursor->curr_size,
+ NULL, NULL);
+ grn_io_unlock(((grn_hash *)table)->io);
+ }
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (token_cursor->curr_size == sizeof(grn_id)) {
+ tid = *((grn_id *)token_cursor->curr);
+ } else {
+ tid = GRN_ID_NIL;
+ }
+ break;
+ }
+ } else {
+ switch (table->header.type) {
+ case GRN_TABLE_PAT_KEY :
+ tid = grn_pat_get(ctx, (grn_pat *)table, token_cursor->curr, token_cursor->curr_size, NULL);
+ break;
+ case GRN_TABLE_DAT_KEY :
+ tid = grn_dat_get(ctx, (grn_dat *)table, token_cursor->curr, token_cursor->curr_size, NULL);
+ break;
+ case GRN_TABLE_HASH_KEY :
+ tid = grn_hash_get(ctx, (grn_hash *)table, token_cursor->curr, token_cursor->curr_size, NULL);
+ break;
+ case GRN_TABLE_NO_KEY :
+ if (token_cursor->curr_size == sizeof(grn_id)) {
+ tid = *((grn_id *)token_cursor->curr);
+ } else {
+ tid = GRN_ID_NIL;
+ }
+ break;
+ }
+ }
+ if (tid == GRN_ID_NIL && token_cursor->status != GRN_TOKEN_DONE) {
+ token_cursor->status = GRN_TOKEN_NOT_FOUND;
+ }
+ token_cursor->pos++;
+ break;
+ }
+ return tid;
+}
+
+static void
+grn_token_cursor_close_token_filters(grn_ctx *ctx,
+ grn_token_cursor *token_cursor)
+{
+ grn_obj *token_filters = token_cursor->token_filters;
+ unsigned int i, n_token_filters;
+
+ if (token_filters) {
+ n_token_filters = GRN_BULK_VSIZE(token_filters) / sizeof(grn_obj *);
+ } else {
+ n_token_filters = 0;
+ }
+ for (i = 0; i < n_token_filters; i++) {
+ grn_obj *token_filter_object = GRN_PTR_VALUE_AT(token_filters, i);
+ grn_proc *token_filter = (grn_proc *)token_filter_object;
+
+ token_filter->callbacks.token_filter.fin(ctx, token_filter->user_data);
+ }
+}
+
+grn_rc
+grn_token_cursor_close(grn_ctx *ctx, grn_token_cursor *token_cursor)
+{
+ if (token_cursor) {
+ if (token_cursor->tokenizer) {
+ ((grn_proc *)token_cursor->tokenizer)->funcs[PROC_FIN](ctx, 1, &token_cursor->table,
+ &token_cursor->pctx.user_data);
+ }
+ grn_token_cursor_close_token_filters(ctx, token_cursor);
+ if (token_cursor->nstr) {
+ grn_obj_close(ctx, token_cursor->nstr);
+ }
+ GRN_FREE(token_cursor);
+ return GRN_SUCCESS;
+ } else {
+ return GRN_INVALID_ARGUMENT;
+ }
+}
+
+grn_rc
+grn_db_init_mecab_tokenizer(grn_ctx *ctx)
+{
+ switch (GRN_CTX_GET_ENCODING(ctx)) {
+ case GRN_ENC_EUC_JP :
+ case GRN_ENC_UTF8 :
+ case GRN_ENC_SJIS :
+ {
+ const char *mecab_plugin_name = "tokenizers/mecab";
+ char *path;
+ path = grn_plugin_find_path(ctx, mecab_plugin_name);
+ if (path) {
+ GRN_FREE(path);
+ return grn_plugin_register(ctx, mecab_plugin_name);
+ } else {
+ return GRN_NO_SUCH_FILE_OR_DIRECTORY;
+ }
+ }
+ break;
+ default :
+ return GRN_OPERATION_NOT_SUPPORTED;
+ }
+}
+
+#define DEF_TOKENIZER(name, init, next, fin, vars)\
+ (grn_proc_create(ctx, (name), (sizeof(name) - 1),\
+ GRN_PROC_TOKENIZER, (init), (next), (fin), 3, (vars)))
+
+grn_rc
+grn_db_init_builtin_tokenizers(grn_ctx *ctx)
+{
+ grn_obj *obj;
+ grn_expr_var vars[] = {
+ {NULL, 0},
+ {NULL, 0},
+ {NULL, 0}
+ };
+ GRN_TEXT_INIT(&vars[0].value, 0);
+ GRN_TEXT_INIT(&vars[1].value, 0);
+ GRN_UINT32_INIT(&vars[2].value, 0);
+
+ obj = DEF_TOKENIZER("TokenDelimit",
+ delimit_init, delimited_next, delimited_fin, vars);
+ if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_DELIMIT) { return GRN_FILE_CORRUPT; }
+ obj = DEF_TOKENIZER("TokenUnigram",
+ unigram_init, ngram_next, ngram_fin, vars);
+ if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_UNIGRAM) { return GRN_FILE_CORRUPT; }
+ obj = DEF_TOKENIZER("TokenBigram",
+ bigram_init, ngram_next, ngram_fin, vars);
+ if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_BIGRAM) { return GRN_FILE_CORRUPT; }
+ obj = DEF_TOKENIZER("TokenTrigram",
+ trigram_init, ngram_next, ngram_fin, vars);
+ if (!obj || ((grn_db_obj *)obj)->id != GRN_DB_TRIGRAM) { return GRN_FILE_CORRUPT; }
+
+ DEF_TOKENIZER("TokenBigramSplitSymbol",
+ bigrams_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramSplitSymbolAlpha",
+ bigramsa_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramSplitSymbolAlphaDigit",
+ bigramsad_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramIgnoreBlank",
+ bigrami_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramIgnoreBlankSplitSymbol",
+ bigramis_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramIgnoreBlankSplitSymbolAlpha",
+ bigramisa_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenBigramIgnoreBlankSplitSymbolAlphaDigit",
+ bigramisad_init, ngram_next, ngram_fin, vars);
+ DEF_TOKENIZER("TokenDelimitNull",
+ delimit_null_init, delimited_next, delimited_fin, vars);
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/token.h b/storage/mroonga/vendor/groonga/lib/token.h
new file mode 100644
index 00000000000..868930758ba
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/token.h
@@ -0,0 +1,95 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_TOKEN_H
+#define GRN_TOKEN_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifndef GRN_DB_H
+#include "db.h"
+#endif /* GRN_DB_H */
+
+#ifndef GRN_STR_H
+#include "str.h"
+#endif /* GRN_STR_H */
+
+#include <groonga/tokenizer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ GRN_TOKEN_DOING = 0,
+ GRN_TOKEN_DONE,
+ GRN_TOKEN_DONE_SKIP,
+ GRN_TOKEN_NOT_FOUND
+} grn_token_status;
+
+struct _grn_token {
+ grn_obj data;
+ grn_tokenizer_status status;
+};
+
+typedef struct {
+ grn_obj *table;
+ const unsigned char *orig;
+ const unsigned char *curr;
+ uint32_t orig_blen;
+ uint32_t curr_size;
+ int32_t pos;
+ grn_token_mode mode;
+ grn_token_status status;
+ uint8_t force_prefix;
+ grn_obj_flags table_flags;
+ grn_encoding encoding;
+ grn_obj *tokenizer;
+ grn_proc_ctx pctx;
+ grn_obj *token_filters;
+ uint32_t variant;
+ grn_obj *nstr;
+} grn_token_cursor;
+
+extern grn_obj *grn_token_uvector;
+
+grn_rc grn_token_init(void);
+grn_rc grn_token_fin(void);
+
+#define GRN_TOKEN_ENABLE_TOKENIZED_DELIMITER (0x01L<<0)
+
+GRN_API grn_token_cursor *grn_token_cursor_open(grn_ctx *ctx, grn_obj *table,
+ const char *str, size_t str_len,
+ grn_token_mode mode,
+ unsigned int flags);
+
+GRN_API grn_id grn_token_cursor_next(grn_ctx *ctx, grn_token_cursor *token_cursor);
+GRN_API grn_rc grn_token_cursor_close(grn_ctx *ctx, grn_token_cursor *token_cursor);
+
+grn_rc grn_db_init_mecab_tokenizer(grn_ctx *ctx);
+grn_rc grn_db_init_builtin_tokenizers(grn_ctx *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_TOKEN_H */
diff --git a/storage/mroonga/vendor/groonga/lib/token_filter.c b/storage/mroonga/vendor/groonga/lib/token_filter.c
new file mode 100644
index 00000000000..910bb9a5715
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/token_filter.c
@@ -0,0 +1,59 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include "groonga_in.h"
+#include "db.h"
+#include <groonga/token_filter.h>
+
+grn_rc
+grn_token_filter_register(grn_ctx *ctx,
+ const char *plugin_name_ptr,
+ int plugin_name_length,
+ grn_token_filter_init_func *init,
+ grn_token_filter_filter_func *filter,
+ grn_token_filter_fin_func *fin)
+{
+ if (plugin_name_length == -1) {
+ plugin_name_length = strlen(plugin_name_ptr);
+ }
+
+ {
+ grn_obj *token_filter_object = grn_proc_create(ctx,
+ plugin_name_ptr,
+ plugin_name_length,
+ GRN_PROC_TOKENIZER,
+ NULL, NULL, NULL, 0, NULL);
+ if (token_filter_object == NULL) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKEN_FILTER_ERROR,
+ "[token-filter][%.*s] failed to grn_proc_create()",
+ plugin_name_length, plugin_name_ptr);
+ return ctx->rc;
+ }
+
+ {
+ grn_proc *token_filter = (grn_proc *)token_filter_object;
+ token_filter->callbacks.token_filter.init = init;
+ token_filter->callbacks.token_filter.filter = filter;
+ token_filter->callbacks.token_filter.fin = fin;
+ }
+ }
+
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/lib/tokenizer.c b/storage/mroonga/vendor/groonga/lib/tokenizer.c
new file mode 100644
index 00000000000..ac4628ba5de
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/tokenizer.c
@@ -0,0 +1,376 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include "groonga_in.h"
+#include "groonga/tokenizer.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "ctx.h"
+#include "db.h"
+#include "str.h"
+#include "string_in.h"
+#include "token.h"
+
+/*
+ Just for backward compatibility. See grn_plugin_charlen() instead.
+ */
+int
+grn_tokenizer_charlen(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding)
+{
+ return grn_plugin_charlen(ctx, str_ptr, str_length, encoding);
+}
+
+/*
+ Just for backward compatibility. See grn_plugin_isspace() instead.
+ */
+int
+grn_tokenizer_isspace(grn_ctx *ctx, const char *str_ptr,
+ unsigned int str_length, grn_encoding encoding)
+{
+ return grn_plugin_isspace(ctx, str_ptr, str_length, encoding);
+}
+
+grn_bool
+grn_tokenizer_is_tokenized_delimiter(grn_ctx *ctx,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding)
+{
+ if (encoding != GRN_ENC_UTF8) {
+ return GRN_FALSE;
+ }
+
+ if (str_length != GRN_TOKENIZER_TOKENIZED_DELIMITER_UTF8_LEN) {
+ return GRN_FALSE;
+ }
+
+ return memcmp(str_ptr,
+ GRN_TOKENIZER_TOKENIZED_DELIMITER_UTF8,
+ GRN_TOKENIZER_TOKENIZED_DELIMITER_UTF8_LEN) == 0;
+}
+
+grn_bool
+grn_tokenizer_have_tokenized_delimiter(grn_ctx *ctx,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding)
+{
+ int char_length;
+ const char *current = str_ptr;
+ const char *end = str_ptr + str_length;
+
+ if (encoding != GRN_ENC_UTF8) {
+ return GRN_FALSE;
+ }
+
+ if (str_length == 0) {
+ return GRN_FALSE;
+ }
+
+ while ((char_length = grn_charlen_(ctx, current, end, encoding)) > 0) {
+ if (grn_tokenizer_is_tokenized_delimiter(ctx,
+ current, char_length,
+ encoding)) {
+ return GRN_TRUE;
+ }
+ current += char_length;
+ }
+ return GRN_FALSE;
+}
+
+grn_tokenizer_query *
+grn_tokenizer_query_open(grn_ctx *ctx, int num_args, grn_obj **args,
+ unsigned int normalize_flags)
+{
+ grn_obj *flags = grn_ctx_pop(ctx);
+ grn_obj *query_str = grn_ctx_pop(ctx);
+ grn_obj *token_mode = grn_ctx_pop(ctx);
+
+ if (query_str == NULL) {
+ GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT, "missing argument");
+ return NULL;
+ }
+
+ if ((num_args < 1) || (args == NULL) || (args[0] == NULL)) {
+ GRN_PLUGIN_ERROR(ctx, GRN_INVALID_ARGUMENT, "invalid NULL pointer");
+ return NULL;
+ }
+
+ {
+ grn_tokenizer_query * const query =
+ GRN_PLUGIN_MALLOC(ctx, sizeof(grn_tokenizer_query));
+ if (query == NULL) {
+ return NULL;
+ }
+ query->normalized_query = NULL;
+ query->query_buf = NULL;
+ if (flags) {
+ query->flags = GRN_UINT32_VALUE(flags);
+ } else {
+ query->flags = 0;
+ }
+ if (token_mode) {
+ query->token_mode = GRN_UINT32_VALUE(token_mode);
+ } else {
+ query->token_mode = GRN_TOKEN_ADD;
+ }
+
+ {
+ grn_obj * const table = args[0];
+ grn_obj_flags table_flags;
+ grn_encoding table_encoding;
+ unsigned int query_length = GRN_TEXT_LEN(query_str);
+ char *query_buf = (char *)GRN_PLUGIN_MALLOC(ctx, query_length + 1);
+ grn_obj *normalizer = NULL;
+
+ if (query_buf == NULL) {
+ GRN_PLUGIN_FREE(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer] failed to duplicate query");
+ return NULL;
+ }
+ grn_table_get_info(ctx, table, &table_flags, &table_encoding, NULL,
+ &normalizer, NULL);
+ {
+ grn_obj *normalized_query;
+ if (table_flags & GRN_OBJ_KEY_NORMALIZE) {
+ normalizer = GRN_NORMALIZER_AUTO;
+ }
+ normalized_query = grn_string_open_(ctx,
+ GRN_TEXT_VALUE(query_str),
+ GRN_TEXT_LEN(query_str),
+ normalizer,
+ normalize_flags,
+ table_encoding);
+ if (!normalized_query) {
+ GRN_PLUGIN_FREE(ctx, query_buf);
+ GRN_PLUGIN_FREE(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer] failed to open normalized string");
+ return NULL;
+ }
+ query->normalized_query = normalized_query;
+ memcpy(query_buf, GRN_TEXT_VALUE(query_str), query_length);
+ query_buf[query_length] = '\0';
+ query->query_buf = query_buf;
+ query->ptr = query_buf;
+ query->length = query_length;
+ }
+ query->encoding = table_encoding;
+
+ if (query->flags & GRN_TOKEN_ENABLE_TOKENIZED_DELIMITER) {
+ const char *normalized_string;
+ unsigned int normalized_string_length;
+
+ grn_string_get_normalized(ctx,
+ query->normalized_query,
+ &normalized_string,
+ &normalized_string_length,
+ NULL);
+ query->have_tokenized_delimiter =
+ grn_tokenizer_have_tokenized_delimiter(ctx,
+ normalized_string,
+ normalized_string_length,
+ query->encoding);
+ } else {
+ query->have_tokenized_delimiter = GRN_FALSE;
+ }
+ }
+ return query;
+ }
+}
+
+grn_tokenizer_query *
+grn_tokenizer_query_create(grn_ctx *ctx, int num_args, grn_obj **args)
+{
+ return grn_tokenizer_query_open(ctx, num_args, args, 0);
+}
+
+void
+grn_tokenizer_query_close(grn_ctx *ctx, grn_tokenizer_query *query)
+{
+ if (query != NULL) {
+ if (query->normalized_query != NULL) {
+ grn_obj_unlink(ctx, query->normalized_query);
+ }
+ if (query->query_buf != NULL) {
+ GRN_PLUGIN_FREE(ctx, query->query_buf);
+ }
+ GRN_PLUGIN_FREE(ctx, query);
+ }
+}
+
+void
+grn_tokenizer_query_destroy(grn_ctx *ctx, grn_tokenizer_query *query)
+{
+ grn_tokenizer_query_close(ctx, query);
+}
+
+void
+grn_tokenizer_token_init(grn_ctx *ctx, grn_tokenizer_token *token)
+{
+ GRN_TEXT_INIT(&token->str, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_UINT32_INIT(&token->status, 0);
+}
+
+void
+grn_tokenizer_token_fin(grn_ctx *ctx, grn_tokenizer_token *token)
+{
+ GRN_OBJ_FIN(ctx, &(token->str));
+ GRN_OBJ_FIN(ctx, &(token->status));
+}
+
+void
+grn_tokenizer_token_push(grn_ctx *ctx, grn_tokenizer_token *token,
+ const char *str_ptr, unsigned int str_length,
+ grn_tokenizer_status status)
+{
+ GRN_TEXT_SET_REF(&token->str, str_ptr, str_length);
+ GRN_UINT32_SET(ctx, &token->status, status);
+ grn_ctx_push(ctx, &token->str);
+ grn_ctx_push(ctx, &token->status);
+}
+
+const char *
+grn_tokenizer_tokenized_delimiter_next(grn_ctx *ctx,
+ grn_tokenizer_token *token,
+ const char *str_ptr,
+ unsigned int str_length,
+ grn_encoding encoding)
+{
+ size_t char_length = 0;
+ const char *start = str_ptr;
+ const char *current;
+ const char *end = str_ptr + str_length;
+ const char *next_start = NULL;
+ unsigned int token_length;
+ grn_tokenizer_status status;
+
+ for (current = start; current < end; current += char_length) {
+ char_length = grn_charlen_(ctx, current, end, encoding);
+ if (char_length == 0) {
+ break;
+ }
+ if (grn_tokenizer_is_tokenized_delimiter(ctx, current, char_length,
+ encoding)) {
+ next_start = str_ptr + (current - start + char_length);
+ break;
+ }
+ }
+
+ token_length = current - start;
+ if (current == end) {
+ status = GRN_TOKENIZER_LAST;
+ } else {
+ status = GRN_TOKENIZER_CONTINUE;
+ }
+ grn_tokenizer_token_push(ctx, token, start, token_length, status);
+
+ return next_start;
+}
+
+grn_rc
+grn_tokenizer_register(grn_ctx *ctx, const char *plugin_name_ptr,
+ unsigned int plugin_name_length,
+ grn_proc_func *init, grn_proc_func *next,
+ grn_proc_func *fin)
+{
+ grn_expr_var vars[] = {
+ { NULL, 0 },
+ { NULL, 0 },
+ { NULL, 0 }
+ };
+ GRN_TEXT_INIT(&vars[0].value, 0);
+ GRN_TEXT_INIT(&vars[1].value, 0);
+ GRN_UINT32_INIT(&vars[2].value, 0);
+
+ {
+ /*
+ grn_proc_create() registers a plugin to the database which is associated
+ with `ctx'. A returned object must not be finalized here.
+ */
+ grn_obj * const obj = grn_proc_create(ctx, plugin_name_ptr,
+ plugin_name_length,
+ GRN_PROC_TOKENIZER,
+ init, next, fin, 3, vars);
+ if (obj == NULL) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR, "grn_proc_create() failed");
+ return ctx->rc;
+ }
+ }
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_token_get_data(grn_ctx *ctx, grn_token *token)
+{
+ GRN_API_ENTER;
+ if (!token) {
+ ERR(GRN_INVALID_ARGUMENT, "token must not be NULL");
+ GRN_API_RETURN(NULL);
+ }
+ GRN_API_RETURN(&(token->data));
+}
+
+grn_rc
+grn_token_set_data(grn_ctx *ctx,
+ grn_token *token,
+ const char *str_ptr,
+ int str_length)
+{
+ GRN_API_ENTER;
+ if (!token) {
+ ERR(GRN_INVALID_ARGUMENT, "token must not be NULL");
+ goto exit;
+ }
+ if (str_length == -1) {
+ str_length = strlen(str_ptr);
+ }
+ GRN_TEXT_SET(ctx, &(token->data), str_ptr, str_length);
+exit:
+ GRN_API_RETURN(ctx->rc);
+}
+
+grn_tokenizer_status
+grn_token_get_status(grn_ctx *ctx, grn_token *token)
+{
+ GRN_API_ENTER;
+ if (!token) {
+ ERR(GRN_INVALID_ARGUMENT, "token must not be NULL");
+ GRN_API_RETURN(GRN_TOKENIZER_TOKEN_CONTINUE);
+ }
+ GRN_API_RETURN(token->status);
+}
+
+grn_rc
+grn_token_set_status(grn_ctx *ctx,
+ grn_token *token,
+ grn_tokenizer_status status)
+{
+ GRN_API_ENTER;
+ if (!token) {
+ ERR(GRN_INVALID_ARGUMENT, "token must not be NULL");
+ goto exit;
+ }
+ token->status = status;
+exit:
+ GRN_API_RETURN(ctx->rc);
+}
diff --git a/storage/mroonga/vendor/groonga/lib/util.c b/storage/mroonga/vendor/groonga/lib/util.c
new file mode 100644
index 00000000000..67f0ff32125
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/util.c
@@ -0,0 +1,1151 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "db.h"
+#include "pat.h"
+#include "ii.h"
+#include "util.h"
+#include "string_in.h"
+
+#include <string.h>
+#include <stdio.h>
+
+grn_rc
+grn_normalize_offset_and_limit(grn_ctx *ctx, int size, int *p_offset, int *p_limit)
+{
+ int end;
+ int offset = *p_offset;
+ int limit = *p_limit;
+
+ if (offset < 0) {
+ offset += size;
+ if (offset < 0) {
+ *p_offset = 0;
+ *p_limit = 0;
+ return GRN_TOO_SMALL_OFFSET;
+ }
+ } else if (offset != 0 && offset >= size) {
+ *p_offset = 0;
+ *p_limit = 0;
+ return GRN_TOO_LARGE_OFFSET;
+ }
+
+ if (limit < 0) {
+ limit += size + 1;
+ if (limit < 0) {
+ *p_offset = 0;
+ *p_limit = 0;
+ return GRN_TOO_SMALL_LIMIT;
+ }
+ } else if (limit > size) {
+ limit = size;
+ }
+
+ /* At this point, offset and limit must be zero or positive. */
+ end = offset + limit;
+ if (end > size) {
+ limit -= end - size;
+ }
+ *p_offset = offset;
+ *p_limit = limit;
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_inspect_name(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ int name_size;
+
+ name_size = grn_obj_name(ctx, obj, NULL, 0);
+ if (name_size) {
+ grn_bulk_space(ctx, buf, name_size);
+ grn_obj_name(ctx, obj, GRN_BULK_CURR(buf) - name_size, name_size);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nil)");
+ }
+
+ return buf;
+}
+
+grn_obj *
+grn_inspect_encoding(grn_ctx *ctx, grn_obj *buf, grn_encoding encoding)
+{
+ switch (encoding) {
+ case GRN_ENC_DEFAULT :
+ GRN_TEXT_PUTS(ctx, buf, "default(");
+ grn_inspect_encoding(ctx, buf, grn_get_default_encoding());
+ GRN_TEXT_PUTS(ctx, buf, ")");
+ break;
+ case GRN_ENC_NONE :
+ GRN_TEXT_PUTS(ctx, buf, "none");
+ break;
+ case GRN_ENC_EUC_JP :
+ GRN_TEXT_PUTS(ctx, buf, "EUC-JP");
+ break;
+ case GRN_ENC_UTF8 :
+ GRN_TEXT_PUTS(ctx, buf, "UTF-8");
+ break;
+ case GRN_ENC_SJIS :
+ GRN_TEXT_PUTS(ctx, buf, "Shift_JIS");
+ break;
+ case GRN_ENC_LATIN1 :
+ GRN_TEXT_PUTS(ctx, buf, "Latin-1");
+ break;
+ case GRN_ENC_KOI8R :
+ GRN_TEXT_PUTS(ctx, buf, "KOI8-R");
+ break;
+ default :
+ GRN_TEXT_PUTS(ctx, buf, "unknown(");
+ grn_text_itoa(ctx, buf, encoding);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+ break;
+ }
+
+ return buf;
+}
+
+grn_obj *
+grn_inspect_type(grn_ctx *ctx, grn_obj *buf, unsigned char type)
+{
+ switch (type) {
+ case GRN_VOID :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_VOID");
+ break;
+ case GRN_BULK :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_BULK");
+ break;
+ case GRN_PTR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_PTR");
+ break;
+ case GRN_UVECTOR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_UVECTOR");
+ break;
+ case GRN_PVECTOR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_PVECTOR");
+ break;
+ case GRN_VECTOR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_VECTOR");
+ break;
+ case GRN_MSG :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_MSG");
+ break;
+ case GRN_QUERY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_QUERY");
+ break;
+ case GRN_ACCESSOR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_ACCESSOR");
+ break;
+ case GRN_SNIP :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_SNIP");
+ break;
+ case GRN_PATSNIP :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_PATSNIP");
+ break;
+ case GRN_STRING :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_STRING");
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_TABLE_HASH_KEY");
+ break;
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_TABLE_PAT_KEY");
+ break;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_TABLE_DAT_KEY");
+ break;
+ case GRN_CURSOR_TABLE_NO_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_TABLE_NO_KEY");
+ break;
+ case GRN_CURSOR_COLUMN_INDEX :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_COLUMN_INDEX");
+ break;
+ case GRN_CURSOR_COLUMN_GEO_INDEX :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_CURSOR_COLUMN_GEO_INDEX");
+ break;
+ case GRN_TYPE :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_TYPE");
+ break;
+ case GRN_PROC :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_PROC");
+ break;
+ case GRN_EXPR :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_EXPR");
+ break;
+ case GRN_TABLE_HASH_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_TABLE_HASH_KEY");
+ break;
+ case GRN_TABLE_PAT_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_TABLE_PAT_KEY");
+ break;
+ case GRN_TABLE_DAT_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_TABLE_DAT_KEY");
+ break;
+ case GRN_TABLE_NO_KEY :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_TABLE_NO_KEY");
+ break;
+ case GRN_DB :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_DB");
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_COLUMN_FIX_SIZE");
+ break;
+ case GRN_COLUMN_VAR_SIZE :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_COLUMN_VAR_SIZE");
+ break;
+ case GRN_COLUMN_INDEX :
+ GRN_TEXT_PUTS(ctx, buf, "GRN_COLUMN_INDEX");
+ break;
+ default:
+ {
+ char type_in_hex[5]; /* "0xXX" */
+ sprintf(type_in_hex, "%#02x", type);
+ GRN_TEXT_PUTS(ctx, buf, "(unknown: ");
+ GRN_TEXT_PUTS(ctx, buf, type_in_hex);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+ }
+ break;
+ }
+
+ return buf;
+}
+
+static grn_rc
+grn_proc_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_proc *proc = (grn_proc *)obj;
+ uint32_t i;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<proc:");
+ switch (proc->type) {
+ case GRN_PROC_INVALID :
+ GRN_TEXT_PUTS(ctx, buf, "invalid");
+ GRN_TEXT_PUTS(ctx, buf, ">");
+ return GRN_SUCCESS;
+ break;
+ case GRN_PROC_TOKENIZER :
+ GRN_TEXT_PUTS(ctx, buf, "tokenizer");
+ break;
+ case GRN_PROC_COMMAND :
+ GRN_TEXT_PUTS(ctx, buf, "command");
+ break;
+ case GRN_PROC_FUNCTION :
+ GRN_TEXT_PUTS(ctx, buf, "function");
+ break;
+ case GRN_PROC_HOOK :
+ GRN_TEXT_PUTS(ctx, buf, "hook");
+ break;
+ case GRN_PROC_NORMALIZER :
+ GRN_TEXT_PUTS(ctx, buf, "normalizer");
+ break;
+ case GRN_PROC_TOKEN_FILTER :
+ GRN_TEXT_PUTS(ctx, buf, "token-filter");
+ break;
+ }
+ GRN_TEXT_PUTS(ctx, buf, " ");
+
+ grn_inspect_name(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, " ");
+
+ GRN_TEXT_PUTS(ctx, buf, "arguments:[");
+ for (i = 0; i < proc->nvars; i++) {
+ grn_expr_var *var = proc->vars + i;
+ if (i != 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ GRN_TEXT_PUT(ctx, buf, var->name, var->name_size);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_vector_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *vector)
+{
+ int i;
+ grn_obj *body = vector->u.v.body;
+
+ GRN_TEXT_PUTS(ctx, buffer, "[");
+ for (i = 0; i < vector->u.v.n_sections; i++) {
+ grn_section *section = &(vector->u.v.sections[i]);
+ const char *value_raw;
+
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buffer, ", ");
+ }
+
+ value_raw = GRN_BULK_HEAD(body) + section->offset;
+ GRN_TEXT_PUTS(ctx, buffer, "{");
+ GRN_TEXT_PUTS(ctx, buffer, "\"value\":");
+ {
+ grn_obj value_object;
+ GRN_OBJ_INIT(&value_object, GRN_BULK, GRN_OBJ_DO_SHALLOW_COPY,
+ section->domain);
+ GRN_TEXT_SET(ctx, &value_object, value_raw, section->length);
+ grn_inspect(ctx, buffer, &value_object);
+ GRN_OBJ_FIN(ctx, &value_object);
+ }
+ GRN_TEXT_PUTS(ctx, buffer, ", \"weight\":");
+ grn_text_itoa(ctx, buffer, section->weight);
+ GRN_TEXT_PUTS(ctx, buffer, "}");
+ }
+ GRN_TEXT_PUTS(ctx, buffer, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_accessor_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ return grn_column_name_(ctx, obj, buf);
+}
+
+static grn_rc
+grn_type_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_id range_id;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<type ");
+ grn_inspect_name(ctx, buf, obj);
+
+ range_id = grn_obj_get_range(ctx, obj);
+ GRN_TEXT_PUTS(ctx, buf, " size:");
+ grn_text_lltoa(ctx, buf, range_id);
+
+ GRN_TEXT_PUTS(ctx, buf, " type:");
+ if (obj->header.flags & GRN_OBJ_KEY_VAR_SIZE) {
+ GRN_TEXT_PUTS(ctx, buf, "var_size");
+ } else {
+ switch (obj->header.flags & GRN_OBJ_KEY_MASK) {
+ case GRN_OBJ_KEY_UINT :
+ GRN_TEXT_PUTS(ctx, buf, "uint");
+ break;
+ case GRN_OBJ_KEY_INT :
+ GRN_TEXT_PUTS(ctx, buf, "int");
+ break;
+ case GRN_OBJ_KEY_FLOAT :
+ GRN_TEXT_PUTS(ctx, buf, "float");
+ break;
+ case GRN_OBJ_KEY_GEO_POINT :
+ GRN_TEXT_PUTS(ctx, buf, "geo_point");
+ break;
+ default :
+ break;
+ }
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_column_inspect_common(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_id range_id;
+
+ grn_inspect_name(ctx, buf, obj);
+
+ range_id = grn_obj_get_range(ctx, obj);
+ if (range_id) {
+ grn_obj *range = grn_ctx_at(ctx, range_id);
+ GRN_TEXT_PUTS(ctx, buf, " range:");
+ if (range) {
+ grn_inspect_name(ctx, buf, range);
+ grn_obj_unlink(ctx, range);
+ } else {
+ grn_text_lltoa(ctx, buf, range_id);
+ }
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_store_inspect_body(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_column_inspect_common(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, " type:");
+ switch (obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
+ case GRN_OBJ_COLUMN_VECTOR :
+ GRN_TEXT_PUTS(ctx, buf, "vector");
+ break;
+ case GRN_OBJ_COLUMN_SCALAR :
+ GRN_TEXT_PUTS(ctx, buf, "scalar");
+ break;
+ default:
+ break;
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " compress:");
+ switch (obj->header.flags & GRN_OBJ_COMPRESS_MASK) {
+ case GRN_OBJ_COMPRESS_NONE :
+ GRN_TEXT_PUTS(ctx, buf, "none");
+ break;
+ case GRN_OBJ_COMPRESS_ZLIB :
+ GRN_TEXT_PUTS(ctx, buf, "zlib");
+ break;
+ case GRN_OBJ_COMPRESS_LZO :
+ GRN_TEXT_PUTS(ctx, buf, "lzo");
+ break;
+ default:
+ break;
+ }
+
+ if (obj->header.flags & GRN_OBJ_RING_BUFFER) {
+ GRN_TEXT_PUTS(ctx, buf, " ring_buffer:true");
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_ra_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ GRN_TEXT_PUTS(ctx, buf, "#<column:fix_size ");
+ grn_store_inspect_body(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, ">");
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_ja_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ GRN_TEXT_PUTS(ctx, buf, "#<column:var_size ");
+ grn_store_inspect_body(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, ">");
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_ii_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_obj sources;
+ int i, n, have_flags = 0;
+ grn_id *source_ids;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<column:index ");
+ grn_column_inspect_common(ctx, buf, obj);
+
+ GRN_TEXT_INIT(&sources, 0);
+ grn_obj_get_info(ctx, obj, GRN_INFO_SOURCE, &sources);
+ source_ids = (grn_id *)GRN_BULK_HEAD(&sources);
+ n = GRN_BULK_VSIZE(&sources) / sizeof(grn_id);
+ GRN_TEXT_PUTS(ctx, buf, " sources:[");
+ for (i = 0; i < n; i++) {
+ grn_id source_id;
+ grn_obj *source;
+ if (i) { GRN_TEXT_PUTS(ctx, buf, ", "); }
+ source_id = source_ids[i];
+ source = grn_ctx_at(ctx, source_id);
+ if (source) {
+ grn_inspect_name(ctx, buf, source);
+ } else {
+ grn_text_lltoa(ctx, buf, source_id);
+ }
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+ GRN_OBJ_FIN(ctx, &sources);
+
+ GRN_TEXT_PUTS(ctx, buf, " flags:");
+ if (obj->header.flags & GRN_OBJ_WITH_SECTION) {
+ GRN_TEXT_PUTS(ctx, buf, "SECTION");
+ have_flags = 1;
+ }
+ if (obj->header.flags & GRN_OBJ_WITH_WEIGHT) {
+ if (have_flags) { GRN_TEXT_PUTS(ctx, buf, "|"); }
+ GRN_TEXT_PUTS(ctx, buf, "WEIGHT");
+ have_flags = 1;
+ }
+ if (obj->header.flags & GRN_OBJ_WITH_POSITION) {
+ if (have_flags) { GRN_TEXT_PUTS(ctx, buf, "|"); }
+ GRN_TEXT_PUTS(ctx, buf, "POSITION");
+ have_flags = 1;
+ }
+ if (!have_flags) {
+ GRN_TEXT_PUTS(ctx, buf, "NONE");
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " elements:");
+ grn_ii_inspect_elements(ctx, (grn_ii *)obj, buf);
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_type_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ switch (obj->header.type) {
+ case GRN_TABLE_HASH_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "hash");
+ break;
+ case GRN_TABLE_PAT_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "pat");
+ break;
+ case GRN_TABLE_NO_KEY:
+ GRN_TEXT_PUTS(ctx, buf, "no_key");
+ break;
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_key_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_obj *domain;
+ grn_id domain_id;
+
+ GRN_TEXT_PUTS(ctx, buf, "key:");
+ domain_id = obj->header.domain;
+ domain = grn_ctx_at(ctx, domain_id);
+ if (domain) {
+ grn_inspect_name(ctx, buf, domain);
+ grn_obj_unlink(ctx, domain);
+ } else if (domain_id) {
+ grn_text_lltoa(ctx, buf, domain_id);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nil)");
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_columns_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_hash *cols;
+
+ GRN_TEXT_PUTS(ctx, buf, "columns:[");
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, obj, "", 0, (grn_obj *)cols)) {
+ int i = 0;
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) {
+ if (i++ > 0) { GRN_TEXT_PUTS(ctx, buf, ", "); }
+ grn_column_name_(ctx, col, buf);
+ grn_obj_unlink(ctx, col);
+ }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_ids_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_table_cursor *tc;
+
+ GRN_TEXT_PUTS(ctx, buf, "ids:[");
+ tc = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0,
+ 0, -1, GRN_CURSOR_ASCENDING);
+ if (tc) {
+ int i = 0;
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, tc))) {
+ if (i++ > 0) { GRN_TEXT_PUTS(ctx, buf, ", "); }
+ grn_text_lltoa(ctx, buf, id);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_default_tokenizer_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_obj *default_tokenizer;
+
+ GRN_TEXT_PUTS(ctx, buf, "default_tokenizer:");
+ default_tokenizer = grn_obj_get_info(ctx, obj,
+ GRN_INFO_DEFAULT_TOKENIZER, NULL);
+ if (default_tokenizer) {
+ grn_inspect_name(ctx, buf, default_tokenizer);
+ grn_obj_unlink(ctx, default_tokenizer);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nil)");
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_normalizer_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_obj *normalizer;
+
+ GRN_TEXT_PUTS(ctx, buf, "normalizer:");
+ normalizer = grn_obj_get_info(ctx, obj, GRN_INFO_NORMALIZER, NULL);
+ if (normalizer) {
+ grn_inspect_name(ctx, buf, normalizer);
+ grn_obj_unlink(ctx, normalizer);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nil)");
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_keys_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_table_cursor *tc;
+
+ GRN_TEXT_PUTS(ctx, buf, "keys:[");
+ tc = grn_table_cursor_open(ctx, obj, NULL, 0, NULL, 0,
+ 0, -1, GRN_CURSOR_ASCENDING);
+ if (tc) {
+ int i = 0;
+ grn_id id;
+ grn_obj key;
+ GRN_OBJ_INIT(&key, GRN_BULK, 0, obj->header.domain);
+ while ((id = grn_table_cursor_next(ctx, tc))) {
+ if (i++ > 0) { GRN_TEXT_PUTS(ctx, buf, ", "); }
+ grn_table_get_key2(ctx, obj, id, &key);
+ grn_inspect(ctx, buf, &key);
+ GRN_BULK_REWIND(&key);
+ }
+ GRN_OBJ_FIN(ctx, &key);
+ grn_table_cursor_close(ctx, tc);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_subrec_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ GRN_TEXT_PUTS(ctx, buf, "subrec:");
+ if (obj->header.flags & GRN_OBJ_WITH_SUBREC) {
+ switch (obj->header.flags & GRN_OBJ_UNIT_MASK) {
+ case GRN_OBJ_UNIT_DOCUMENT_NONE :
+ GRN_TEXT_PUTS(ctx, buf, "document:none");
+ break;
+ case GRN_OBJ_UNIT_DOCUMENT_SECTION :
+ GRN_TEXT_PUTS(ctx, buf, "document:section");
+ break;
+ case GRN_OBJ_UNIT_DOCUMENT_POSITION :
+ GRN_TEXT_PUTS(ctx, buf, "document:position");
+ break;
+ case GRN_OBJ_UNIT_SECTION_NONE :
+ GRN_TEXT_PUTS(ctx, buf, "section:none");
+ break;
+ case GRN_OBJ_UNIT_SECTION_POSITION :
+ GRN_TEXT_PUTS(ctx, buf, "section:popsition");
+ break;
+ case GRN_OBJ_UNIT_POSITION_NONE :
+ GRN_TEXT_PUTS(ctx, buf, "section:none");
+ break;
+ case GRN_OBJ_UNIT_USERDEF_DOCUMENT :
+ GRN_TEXT_PUTS(ctx, buf, "userdef:document");
+ break;
+ case GRN_OBJ_UNIT_USERDEF_SECTION :
+ GRN_TEXT_PUTS(ctx, buf, "userdef:section");
+ break;
+ case GRN_OBJ_UNIT_USERDEF_POSITION :
+ GRN_TEXT_PUTS(ctx, buf, "userdef:position");
+ break;
+ }
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "none");
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_table_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_id range_id;
+ grn_obj *range;
+
+ GRN_TEXT_PUTS(ctx, buf, "#<table:");
+ grn_table_type_inspect(ctx, buf, obj);
+ GRN_TEXT_PUTS(ctx, buf, " ");
+
+ grn_inspect_name(ctx, buf, obj);
+
+ if (obj->header.type != GRN_TABLE_NO_KEY) {
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_key_inspect(ctx, buf, obj);
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " value:");
+ range_id = grn_obj_get_range(ctx, obj);
+ range = grn_ctx_at(ctx, range_id);
+ if (range) {
+ grn_inspect_name(ctx, buf, range);
+ } else if (range_id) {
+ grn_text_lltoa(ctx, buf, range_id);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nil)");
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " size:");
+ grn_text_lltoa(ctx, buf, grn_table_size(ctx, obj));
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_columns_inspect(ctx, buf, obj);
+
+ if (obj->header.type == GRN_TABLE_NO_KEY) {
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_ids_inspect(ctx, buf, obj);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_default_tokenizer_inspect(ctx, buf, obj);
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_normalizer_inspect(ctx, buf, obj);
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_keys_inspect(ctx, buf, obj);
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_table_subrec_inspect(ctx, buf, obj);
+
+ if (obj->header.type == GRN_TABLE_PAT_KEY) {
+ GRN_TEXT_PUTS(ctx, buf, " nodes:");
+ grn_pat_inspect_nodes(ctx, (grn_pat *)obj, buf);
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, ">");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_geo_point_inspect_point(grn_ctx *ctx, grn_obj *buf, int point)
+{
+ GRN_TEXT_PUTS(ctx, buf, "(");
+ grn_text_itoa(ctx, buf, point / 1000 / 3600 % 3600);
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ grn_text_itoa(ctx, buf, point / 1000 / 60 % 60);
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ grn_text_itoa(ctx, buf, point / 1000 % 60);
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ grn_text_itoa(ctx, buf, point % 1000);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_geo_point_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ int latitude, longitude;
+
+ GRN_GEO_POINT_VALUE(obj, latitude, longitude);
+
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ GRN_TEXT_PUTS(ctx, buf, "(");
+ grn_text_itoa(ctx, buf, latitude);
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ grn_text_itoa(ctx, buf, longitude);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+
+ GRN_TEXT_PUTS(ctx, buf, " (");
+ grn_geo_point_inspect_point(ctx, buf, latitude);
+ GRN_TEXT_PUTS(ctx, buf, ",");
+ grn_geo_point_inspect_point(ctx, buf, longitude);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+
+ {
+ int i, j;
+ grn_geo_point point;
+ uint8_t encoded[sizeof(grn_geo_point)];
+
+ GRN_TEXT_PUTS(ctx, buf, " [");
+ point.latitude = latitude;
+ point.longitude = longitude;
+ grn_gton(encoded, &point, sizeof(grn_geo_point));
+ for (i = 0; i < sizeof(grn_geo_point); i++) {
+ if (i != 0) {
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ }
+ for (j = 0; j < 8; j++) {
+ grn_text_itoa(ctx, buf, (encoded[i] >> (7 - j)) & 1);
+ }
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_json_load_open_bracket_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ uint32_t i, n;
+
+ n = GRN_UINT32_VALUE(obj);
+
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ for (i = 0; i < n; i++) {
+ grn_obj *value;
+ value = obj + 1 + i;
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ grn_inspect(ctx, buf, value);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_json_load_open_brace_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ uint32_t i, n;
+
+ n = GRN_UINT32_VALUE(obj);
+
+ GRN_TEXT_PUTS(ctx, buf, "{");
+ for (i = 0; i < n; i += 2) {
+ grn_obj *key, *value;
+ key = obj + 1 + i;
+ value = key + 1;
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+ grn_inspect(ctx, buf, key);
+ GRN_TEXT_PUTS(ctx, buf, ": ");
+ grn_inspect(ctx, buf, value);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "}");
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_record_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ grn_id id;
+ grn_obj *table;
+ grn_hash *cols;
+
+ table = grn_ctx_at(ctx, obj->header.domain);
+ GRN_TEXT_PUTS(ctx, buf, "#<record:");
+ if (table) {
+ grn_table_type_inspect(ctx, buf, table);
+ GRN_TEXT_PUTS(ctx, buf, ":");
+ grn_inspect_name(ctx, buf, table);
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(anonymous table:");
+ grn_text_lltoa(ctx, buf, obj->header.domain);
+ GRN_TEXT_PUTS(ctx, buf, ")");
+ }
+
+ GRN_TEXT_PUTS(ctx, buf, " id:");
+ id = GRN_RECORD_VALUE(obj);
+ grn_text_lltoa(ctx, buf, id);
+
+ if (table && grn_table_at(ctx, table, id)) {
+ if (table->header.type != GRN_TABLE_NO_KEY) {
+ grn_obj key;
+ GRN_TEXT_PUTS(ctx, buf, " key:");
+ GRN_OBJ_INIT(&key, GRN_BULK, 0, table->header.domain);
+ grn_table_get_key2(ctx, table, id, &key);
+ grn_inspect(ctx, buf, &key);
+ GRN_OBJ_FIN(ctx, &key);
+ }
+ if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) {
+ if (grn_table_columns(ctx, table, "", 0, (grn_obj *)cols)) {
+ grn_id *key;
+ GRN_HASH_EACH(ctx, cols, column_id, &key, NULL, NULL, {
+ grn_obj *col = grn_ctx_at(ctx, *key);
+ if (col) {
+ grn_obj value;
+ GRN_TEXT_INIT(&value, 0);
+ GRN_TEXT_PUTS(ctx, buf, " ");
+ grn_column_name_(ctx, col, buf);
+ GRN_TEXT_PUTS(ctx, buf, ":");
+ grn_obj_get_value(ctx, col, id, &value);
+ grn_inspect(ctx, buf, &value);
+ GRN_OBJ_FIN(ctx, &value);
+ grn_obj_unlink(ctx, col);
+ }
+ });
+ }
+ grn_hash_close(ctx, cols);
+ }
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "(nonexistent)");
+ }
+ GRN_TEXT_PUTS(ctx, buf, ">");
+
+ if (table) {
+ grn_obj_unlink(ctx, table);
+ }
+
+ return GRN_SUCCESS;
+}
+
+static grn_rc
+grn_uvector_record_inspect(grn_ctx *ctx, grn_obj *buf, grn_obj *obj)
+{
+ unsigned int i, n = 0;
+ grn_obj record;
+
+ GRN_RECORD_INIT(&record, 0, obj->header.domain);
+ GRN_TEXT_PUTS(ctx, buf, "[");
+ n = grn_vector_size(ctx, obj);
+ for (i = 0; i < n; i++) {
+ grn_id id;
+ unsigned int weight;
+
+ if (i > 0) {
+ GRN_TEXT_PUTS(ctx, buf, ", ");
+ }
+
+ id = grn_uvector_get_element(ctx, obj, i, &weight);
+ GRN_TEXT_PUTS(ctx, buf, "#<element record:");
+ GRN_RECORD_SET(ctx, &record, id);
+ grn_inspect(ctx, buf, &record);
+ grn_text_printf(ctx, buf, ", weight:%u>", weight);
+ }
+ GRN_TEXT_PUTS(ctx, buf, "]");
+ GRN_OBJ_FIN(ctx, &record);
+
+ return GRN_SUCCESS;
+}
+
+grn_obj *
+grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)
+{
+ grn_obj *domain;
+
+ if (!buffer) {
+ buffer = grn_obj_open(ctx, GRN_BULK, 0, GRN_DB_TEXT);
+ }
+
+ if (!obj) {
+ GRN_TEXT_PUTS(ctx, buffer, "(NULL)");
+ return buffer;
+ }
+
+ switch (obj->header.type) {
+ case GRN_VOID :
+ /* TODO */
+ break;
+ case GRN_BULK :
+ switch (obj->header.domain) {
+ case GRN_DB_TOKYO_GEO_POINT :
+ case GRN_DB_WGS84_GEO_POINT :
+ grn_geo_point_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_JSON_LOAD_OPEN_BRACKET :
+ grn_json_load_open_bracket_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_JSON_LOAD_OPEN_BRACE :
+ grn_json_load_open_brace_inspect(ctx, buffer, obj);
+ return buffer;
+ default :
+ domain = grn_ctx_at(ctx, obj->header.domain);
+ if (domain) {
+ grn_id type = domain->header.type;
+ grn_obj_unlink(ctx, domain);
+ switch (type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ grn_record_inspect(ctx, buffer, obj);
+ return buffer;
+ default :
+ break;
+ }
+ }
+ }
+ break;
+ case GRN_PTR :
+ /* TODO */
+ break;
+ case GRN_UVECTOR :
+ domain = grn_ctx_at(ctx, obj->header.domain);
+ if (domain) {
+ grn_id type = domain->header.type;
+ grn_obj_unlink(ctx, domain);
+ switch (type) {
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ grn_uvector_record_inspect(ctx, buffer, obj);
+ return buffer;
+ default :
+ break;
+ }
+ }
+ break;
+ case GRN_PVECTOR :
+ /* TODO */
+ break;
+ case GRN_VECTOR :
+ grn_vector_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_MSG :
+ /* TODO */
+ break;
+ case GRN_ACCESSOR :
+ grn_accessor_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_SNIP :
+ case GRN_PATSNIP :
+ /* TODO */
+ break;
+ case GRN_STRING :
+ grn_string_inspect(ctx, buffer, obj);
+ break;
+ case GRN_CURSOR_TABLE_HASH_KEY :
+ /* TODO */
+ break;
+ case GRN_CURSOR_TABLE_PAT_KEY :
+ grn_pat_cursor_inspect(ctx, (grn_pat_cursor *)obj, buffer);
+ return buffer;
+ case GRN_CURSOR_TABLE_DAT_KEY :
+ case GRN_CURSOR_TABLE_NO_KEY :
+ case GRN_CURSOR_COLUMN_INDEX :
+ case GRN_CURSOR_COLUMN_GEO_INDEX :
+ /* TODO */
+ break;
+ case GRN_TYPE :
+ grn_type_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_PROC :
+ grn_proc_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_EXPR :
+ grn_expr_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_TABLE_HASH_KEY :
+ case GRN_TABLE_PAT_KEY :
+ case GRN_TABLE_DAT_KEY :
+ case GRN_TABLE_NO_KEY :
+ grn_table_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_DB :
+ /* TODO */
+ break;
+ case GRN_COLUMN_FIX_SIZE :
+ grn_ra_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_COLUMN_VAR_SIZE :
+ grn_ja_inspect(ctx, buffer, obj);
+ return buffer;
+ case GRN_COLUMN_INDEX :
+ grn_ii_inspect(ctx, buffer, obj);
+ return buffer;
+ default :
+ break;
+ }
+
+ grn_text_otoj(ctx, buffer, obj, NULL);
+ return buffer;
+}
+
+void
+grn_p(grn_ctx *ctx, grn_obj *obj)
+{
+ grn_obj buffer;
+
+ GRN_TEXT_INIT(&buffer, 0);
+ grn_inspect(ctx, &buffer, obj);
+ printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));
+ grn_obj_unlink(ctx, &buffer);
+}
+
+void
+grn_p_geo_point(grn_ctx *ctx, grn_geo_point *point)
+{
+ grn_obj obj;
+
+ GRN_WGS84_GEO_POINT_INIT(&obj, 0);
+ GRN_GEO_POINT_SET(ctx, &obj, point->latitude, point->longitude);
+ grn_p(ctx, &obj);
+ grn_obj_unlink(ctx, &obj);
+}
+
+#ifdef WIN32
+static char *win32_base_dir = NULL;
+const char *
+grn_win32_base_dir(void)
+{
+ if (!win32_base_dir) {
+ HMODULE dll;
+ const wchar_t *dll_filename = GRN_DLL_FILENAME;
+ wchar_t absolute_dll_filename[MAX_PATH];
+ DWORD absolute_dll_filename_size;
+ dll = GetModuleHandleW(dll_filename);
+ absolute_dll_filename_size = GetModuleFileNameW(dll,
+ absolute_dll_filename,
+ MAX_PATH);
+ if (absolute_dll_filename_size == 0) {
+ win32_base_dir = strdup(".");
+ } else {
+ DWORD ansi_dll_filename_size;
+ ansi_dll_filename_size =
+ WideCharToMultiByte(CP_ACP, 0,
+ absolute_dll_filename, absolute_dll_filename_size,
+ NULL, 0, NULL, NULL);
+ if (ansi_dll_filename_size == 0) {
+ win32_base_dir = strdup(".");
+ } else {
+ char *path;
+ win32_base_dir = malloc(ansi_dll_filename_size + 1);
+ WideCharToMultiByte(CP_ACP, 0,
+ absolute_dll_filename, absolute_dll_filename_size,
+ win32_base_dir, ansi_dll_filename_size,
+ NULL, NULL);
+ win32_base_dir[ansi_dll_filename_size] = '\0';
+ if ((path = strrchr(win32_base_dir, '\\'))) {
+ *path = '\0';
+ }
+ path = strrchr(win32_base_dir, '\\');
+ if (path && (strcasecmp(path + 1, "bin") == 0 ||
+ strcasecmp(path + 1, "lib") == 0)) {
+ *path = '\0';
+ } else {
+ path = win32_base_dir + strlen(win32_base_dir);
+ *path = '\0';
+ }
+ for (path = win32_base_dir; *path; path++) {
+ if (*path == '\\') {
+ *path = '/';
+ }
+ }
+ }
+ }
+ }
+ return win32_base_dir;
+}
+#endif
diff --git a/storage/mroonga/vendor/groonga/lib/util.h b/storage/mroonga/vendor/groonga/lib/util.h
new file mode 100644
index 00000000000..b4dbb000aed
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/lib/util.h
@@ -0,0 +1,48 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2011 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_UTIL_H
+#define GRN_UTIL_H
+
+#ifndef GROONGA_IN_H
+#include "groonga_in.h"
+#endif /* GROONGA_IN_H */
+
+#ifndef GRN_CTX_H
+#include "ctx.h"
+#endif /* GRN_CTX_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GRN_API grn_rc grn_normalize_offset_and_limit(grn_ctx *ctx, int size, int *offset, int *limit);
+
+GRN_API grn_obj *grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj);
+GRN_API grn_obj *grn_inspect_name(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj);
+GRN_API grn_obj *grn_inspect_encoding(grn_ctx *ctx, grn_obj *buffer, grn_encoding encoding);
+GRN_API grn_obj *grn_inspect_type(grn_ctx *ctx, grn_obj *buffer, unsigned char type);
+void grn_p(grn_ctx *ctx, grn_obj *obj);
+void grn_p_geo_point(grn_ctx *ctx, grn_geo_point *point);
+
+GRN_API const char *grn_win32_base_dir(void);
+GRN_API char *grn_path_separator_to_system(char *dest, char *groonga_path);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GRN_UTIL_H */
diff --git a/storage/mroonga/vendor/groonga/nginx_version b/storage/mroonga/vendor/groonga/nginx_version
new file mode 100644
index 00000000000..de28578affc
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/nginx_version
@@ -0,0 +1 @@
+1.7.6
diff --git a/storage/mroonga/vendor/groonga/plugins/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/CMakeLists.txt
new file mode 100644
index 00000000000..42a3045a415
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright(C) 2012-2014 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+add_subdirectory(suggest)
+add_subdirectory(tokenizers)
+add_subdirectory(table)
+add_subdirectory(query_expanders)
+add_subdirectory(ruby)
+add_subdirectory(token_filters)
diff --git a/storage/mroonga/vendor/groonga/plugins/Makefile.am b/storage/mroonga/vendor/groonga/plugins/Makefile.am
new file mode 100644
index 00000000000..1d1abf1dee9
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/Makefile.am
@@ -0,0 +1,10 @@
+SUBDIRS = \
+ tokenizers \
+ suggest \
+ table \
+ query_expanders \
+ ruby \
+ token_filters
+
+EXTRA_DIST = \
+ CMakeLists.txt
diff --git a/storage/mroonga/vendor/groonga/plugins/query_expanders/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/query_expanders/CMakeLists.txt
new file mode 100644
index 00000000000..1e2a2c23b09
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/query_expanders/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ )
+
+set(QUERY_EXPANDERS_DIR "${GRN_RELATIVE_PLUGINS_DIR}/query_expanders")
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/tsv_sources.am TSV_SOURCES)
+set_source_files_properties(${TSV_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+add_library(tsv_query_expander MODULE ${TSV_SOURCES})
+set_target_properties(tsv_query_expander PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "tsv")
+target_link_libraries(tsv_query_expander libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS tsv_query_expander DESTINATION "${QUERY_EXPANDERS_DIR}")
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/query_expanders/Makefile.am b/storage/mroonga/vendor/groonga/plugins/query_expanders/Makefile.am
new file mode 100644
index 00000000000..ca26760d332
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/query_expanders/Makefile.am
@@ -0,0 +1,20 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la
+
+query_expanders_plugins_LTLIBRARIES =
+query_expanders_plugins_LTLIBRARIES += tsv.la
+
+include tsv_sources.am
diff --git a/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv.c b/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv.c
new file mode 100644
index 00000000000..6b1fc51d6dc
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv.c
@@ -0,0 +1,299 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <groonga/plugin.h>
+
+/* groonga's internal headers */
+/* for grn_text_fgets(): We don't want to require stdio.h for groonga.h.
+ What should we do? Should we split header file such as groonga/stdio.h? */
+#include <str.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef HAVE__STRNICMP
+# define strncasecmp(s1,s2,n) _strnicmp(s1,s2,n)
+#endif /* HAVE__STRNICMP */
+
+#define MAX_SYNONYM_BYTES 4096
+
+static grn_hash *synonyms = NULL;
+
+#ifdef WIN32
+static char *win32_synonyms_file = NULL;
+const char *
+get_system_synonyms_file(void)
+{
+ if (!win32_synonyms_file) {
+ const char *base_dir;
+ const char *relative_path = GRN_QUERY_EXPANDER_TSV_RELATIVE_SYNONYMS_FILE;
+ char *synonyms_file;
+ char *path;
+ size_t base_dir_length;
+
+ base_dir = grn_plugin_win32_base_dir();
+ base_dir_length = strlen(base_dir);
+ synonyms_file =
+ malloc(base_dir_length + strlen("/") + strlen(relative_path) + 1);
+ strcpy(synonyms_file, base_dir);
+ strcat(synonyms_file, "/");
+ strcat(synonyms_file, relative_path);
+ win32_synonyms_file = synonyms_file;
+ }
+ return win32_synonyms_file;
+}
+
+#else /* WIN32 */
+const char *
+get_system_synonyms_file(void)
+{
+ return GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE;
+}
+#endif /* WIN32 */
+
+static inline grn_bool
+is_comment_mark(char character)
+{
+ return character == '#';
+}
+
+static inline grn_encoding
+detect_coding_part(grn_ctx *ctx, const char *line, size_t line_length)
+{
+ grn_encoding encoding = GRN_ENC_NONE;
+ grn_obj null_terminated_line_buffer;
+ const char *c_line;
+ const char *coding_part_keyword = "coding: ";
+ const char *coding_part;
+ const char *encoding_name;
+
+ GRN_TEXT_INIT(&null_terminated_line_buffer, 0);
+ GRN_TEXT_PUT(ctx, &null_terminated_line_buffer, line, line_length);
+ GRN_TEXT_PUTC(ctx, &null_terminated_line_buffer, '\0');
+
+ c_line = GRN_TEXT_VALUE(&null_terminated_line_buffer);
+ coding_part = strstr(c_line, coding_part_keyword);
+ if (coding_part) {
+ encoding_name = coding_part + strlen(coding_part_keyword);
+ if (strncasecmp(encoding_name, "utf-8", strlen("utf-8")) == 0 ||
+ strncasecmp(encoding_name, "utf8", strlen("utf8")) == 0) {
+ encoding = GRN_ENC_UTF8;
+ } else if (strncasecmp(encoding_name, "sjis", strlen("sjis")) == 0 ||
+ strncasecmp(encoding_name, "Shift_JIS", strlen("Shift_JIS")) == 0) {
+ encoding = GRN_ENC_SJIS;
+ } else if (strncasecmp(encoding_name, "EUC-JP", strlen("EUC-JP")) == 0 ||
+ strncasecmp(encoding_name, "euc_jp", strlen("euc_jp")) == 0) {
+ encoding = GRN_ENC_EUC_JP;
+ } else if (strncasecmp(encoding_name, "latin1", strlen("latin1")) == 0) {
+ encoding = GRN_ENC_LATIN1;
+ } else if (strncasecmp(encoding_name, "KOI8-R", strlen("KOI8-R")) == 0 ||
+ strncasecmp(encoding_name, "koi8r", strlen("koi8r")) == 0) {
+ encoding = GRN_ENC_KOI8R;
+ }
+ } else {
+ encoding = ctx->encoding;
+ }
+ GRN_OBJ_FIN(ctx, &null_terminated_line_buffer);
+
+ return encoding;
+}
+
+static inline grn_encoding
+guess_encoding(grn_ctx *ctx, const char **line, size_t *line_length)
+{
+ const char bom[] = {0xef, 0xbb, 0xbf};
+ size_t bom_length = sizeof(bom);
+
+ if (*line_length >= bom_length && memcmp(*line, bom, bom_length) == 0) {
+ *line += bom_length;
+ *line_length -= bom_length;
+ return GRN_ENC_UTF8;
+ }
+
+ if (!is_comment_mark((*line)[0])) {
+ return ctx->encoding;
+ }
+
+ return detect_coding_part(ctx, (*line) + 1, (*line_length) - 1);
+}
+
+static void
+parse_synonyms_file_line(grn_ctx *ctx, const char *line, int line_length,
+ grn_obj *key, grn_obj *value)
+{
+ size_t i = 0;
+
+ if (is_comment_mark(line[i])) {
+ return;
+ }
+
+ while (i < line_length) {
+ char character = line[i];
+ i++;
+ if (character == '\t') {
+ break;
+ }
+ GRN_TEXT_PUTC(ctx, key, character);
+ }
+
+ if (i == line_length) {
+ return;
+ }
+
+ GRN_TEXT_PUTS(ctx, value, "((");
+ while (i < line_length) {
+ char character = line[i];
+ i++;
+ if (character == '\t') {
+ GRN_TEXT_PUTS(ctx, value, ") OR (");
+ } else {
+ GRN_TEXT_PUTC(ctx, value, character);
+ }
+ }
+ GRN_TEXT_PUTS(ctx, value, "))");
+
+ {
+ grn_id id;
+ void *value_location = NULL;
+
+ id = grn_hash_add(ctx, synonyms, GRN_TEXT_VALUE(key), GRN_TEXT_LEN(key),
+ &value_location, NULL);
+ if (id == GRN_ID_NIL) {
+ GRN_PLUGIN_LOG(ctx, GRN_LOG_WARNING,
+ "[plugin][query-expander][tsv] "
+ "failed to register key: <%.*s>",
+ (int)GRN_TEXT_LEN(key), GRN_TEXT_VALUE(key));
+ return;
+ }
+
+ grn_bulk_truncate(ctx, value, MAX_SYNONYM_BYTES - 1);
+ GRN_TEXT_PUTC(ctx, value, '\0');
+ memcpy(value_location, GRN_TEXT_VALUE(value), MAX_SYNONYM_BYTES);
+ }
+}
+
+static void
+load_synonyms(grn_ctx *ctx)
+{
+ const char *path;
+ FILE *file;
+ int number_of_lines;
+ grn_encoding encoding;
+ grn_obj line, key, value;
+
+ path = getenv("GRN_QUERY_EXPANDER_TSV_SYNONYMS_FILE");
+ if (!path) {
+ path = get_system_synonyms_file();
+ }
+ file = fopen(path, "r");
+ if (!file) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "[plugin][query-expander][tsv] "
+ "synonyms file doesn't exist: <%s>",
+ path);
+ return;
+ }
+
+ GRN_TEXT_INIT(&line, 0);
+ GRN_TEXT_INIT(&key, 0);
+ GRN_TEXT_INIT(&value, 0);
+ grn_bulk_reserve(ctx, &value, MAX_SYNONYM_BYTES);
+ number_of_lines = 0;
+ while (grn_text_fgets(ctx, &line, file) == GRN_SUCCESS) {
+ const char *line_value = GRN_TEXT_VALUE(&line);
+ size_t line_length = GRN_TEXT_LEN(&line);
+
+ number_of_lines++;
+ if (number_of_lines == 1) {
+ encoding = guess_encoding(ctx, &line_value, &line_length);
+ }
+ GRN_BULK_REWIND(&key);
+ GRN_BULK_REWIND(&value);
+ parse_synonyms_file_line(ctx, line_value, line_length, &key, &value);
+ GRN_BULK_REWIND(&line);
+ }
+ GRN_OBJ_FIN(ctx, &line);
+ GRN_OBJ_FIN(ctx, &key);
+ GRN_OBJ_FIN(ctx, &value);
+
+ fclose(file);
+}
+
+static grn_obj *
+func_query_expander_tsv(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_rc rc = GRN_END_OF_DATA;
+ grn_id id;
+ grn_obj *term, *expanded_term;
+ void *value;
+ grn_obj *rc_object;
+
+ term = args[0];
+ expanded_term = args[1];
+ id = grn_hash_get(ctx, synonyms,
+ GRN_TEXT_VALUE(term), GRN_TEXT_LEN(term),
+ &value);
+ if (id != GRN_ID_NIL) {
+ const char *query = value;
+ GRN_TEXT_PUTS(ctx, expanded_term, query);
+ rc = GRN_SUCCESS;
+ }
+
+ rc_object = grn_plugin_proc_alloc(ctx, user_data, GRN_DB_INT32, 0);
+ if (rc_object) {
+ GRN_INT32_SET(ctx, rc_object, rc);
+ }
+
+ return rc_object;
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ if (!synonyms) {
+ synonyms = grn_hash_create(ctx, NULL,
+ GRN_TABLE_MAX_KEY_SIZE,
+ MAX_SYNONYM_BYTES,
+ GRN_OBJ_TABLE_HASH_KEY | GRN_OBJ_KEY_VAR_SIZE);
+ if (!synonyms) {
+ return ctx->rc;
+ }
+ load_synonyms(ctx);
+ }
+ return ctx->rc;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_proc_create(ctx, "QueryExpanderTSV", strlen("QueryExpanderTSV"),
+ GRN_PROC_FUNCTION,
+ func_query_expander_tsv, NULL, NULL,
+ 0, NULL);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ if (synonyms) {
+ grn_hash_close(ctx, synonyms);
+ synonyms = NULL;
+ }
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv_sources.am b/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv_sources.am
new file mode 100644
index 00000000000..f1bdabede85
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/query_expanders/tsv_sources.am
@@ -0,0 +1,2 @@
+tsv_la_SOURCES = \
+ tsv.c
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/ruby/CMakeLists.txt
new file mode 100644
index 00000000000..d82b154098c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright(C) 2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ ${MRUBY_INCLUDE_DIRS})
+
+if(GRN_WITH_MRUBY)
+ set(GRN_RELATIVE_RUBY_PLUGINS_DIR "${GRN_RELATIVE_PLUGINS_DIR}/ruby")
+
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/eval_sources.am RUBY_EVAL_SOURCES)
+ add_library(eval MODULE ${RUBY_EVAL_SOURCES})
+ set_source_files_properties(${RUBY_EVAL_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ set_target_properties(eval PROPERTIES PREFIX "")
+ target_link_libraries(eval libgroonga)
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS eval DESTINATION "${GRN_RELATIVE_RUBY_PLUGINS_DIR}")
+ endif()
+
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/load_sources.am RUBY_LOAD_SOURCES)
+ add_library(load MODULE ${RUBY_LOAD_SOURCES})
+ set_source_files_properties(${RUBY_LOAD_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ set_target_properties(load PROPERTIES PREFIX "")
+ target_link_libraries(load libgroonga)
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS load DESTINATION "${GRN_RELATIVE_RUBY_PLUGINS_DIR}")
+ endif()
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/Makefile.am b/storage/mroonga/vendor/groonga/plugins/ruby/Makefile.am
new file mode 100644
index 00000000000..381fb47160b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/Makefile.am
@@ -0,0 +1,29 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(MESSAGE_PACK_LIBS)
+
+if WITH_MRUBY
+ruby_plugins_LTLIBRARIES = \
+ eval.la \
+ load.la
+endif
+
+include eval_sources.am
+include load_sources.am
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/eval.c b/storage/mroonga/vendor/groonga/plugins/ruby/eval.c
new file mode 100644
index 00000000000..ad1e7948249
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/eval.c
@@ -0,0 +1,64 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "ruby_plugin.h"
+
+static grn_obj *
+command_ruby_eval(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+ grn_obj *script;
+ mrb_value result;
+
+ script = VAR(0);
+ switch (script->header.domain) {
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ break;
+ default :
+ {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, script);
+ ERR(GRN_INVALID_ARGUMENT, "script must be a string: <%.*s>",
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ return NULL;
+ }
+ break;
+ }
+
+ mrb->exc = NULL;
+ result = grn_mrb_eval(ctx, GRN_TEXT_VALUE(script), GRN_TEXT_LEN(script));
+ output_result(ctx, result);
+
+ return NULL;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_expr_var vars[1];
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "script", -1);
+ grn_plugin_command_create(ctx, "ruby_eval", -1, command_ruby_eval, 1, vars);
+
+ return ctx->rc;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/eval_sources.am b/storage/mroonga/vendor/groonga/plugins/ruby/eval_sources.am
new file mode 100644
index 00000000000..08543e43fb4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/eval_sources.am
@@ -0,0 +1,3 @@
+eval_la_SOURCES = \
+ ruby_plugin.h \
+ eval.c
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/load.c b/storage/mroonga/vendor/groonga/plugins/ruby/load.c
new file mode 100644
index 00000000000..a4e60acc357
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/load.c
@@ -0,0 +1,63 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "ruby_plugin.h"
+
+static grn_obj *
+command_ruby_load(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ grn_obj *path;
+ mrb_value result;
+
+ path = VAR(0);
+ switch (path->header.domain) {
+ case GRN_DB_SHORT_TEXT :
+ case GRN_DB_TEXT :
+ case GRN_DB_LONG_TEXT :
+ break;
+ default :
+ {
+ grn_obj inspected;
+ GRN_TEXT_INIT(&inspected, 0);
+ grn_inspect(ctx, &inspected, path);
+ ERR(GRN_INVALID_ARGUMENT, "path must be a string: <%.*s>",
+ (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected));
+ GRN_OBJ_FIN(ctx, &inspected);
+ return NULL;
+ }
+ break;
+ }
+
+ GRN_TEXT_PUTC(ctx, path, '\0');
+ result = grn_mrb_load(ctx, GRN_TEXT_VALUE(path));
+ output_result(ctx, result);
+
+ return NULL;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_expr_var vars[1];
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "path", -1);
+ grn_plugin_command_create(ctx, "ruby_load", -1, command_ruby_load, 1, vars);
+
+ return ctx->rc;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/load_sources.am b/storage/mroonga/vendor/groonga/plugins/ruby/load_sources.am
new file mode 100644
index 00000000000..d1cce258caa
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/load_sources.am
@@ -0,0 +1,3 @@
+load_la_SOURCES = \
+ ruby_plugin.h \
+ load.c
diff --git a/storage/mroonga/vendor/groonga/plugins/ruby/ruby_plugin.h b/storage/mroonga/vendor/groonga/plugins/ruby/ruby_plugin.h
new file mode 100644
index 00000000000..5314ea68fe5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/ruby/ruby_plugin.h
@@ -0,0 +1,76 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/*
+ Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <mrb.h>
+#include <output.h>
+#include <db.h>
+#include <ctx_impl.h>
+#include <util.h>
+
+#include <groonga/plugin.h>
+
+#include <mruby.h>
+
+#define VAR GRN_PROC_GET_VAR_BY_OFFSET
+
+static void
+output_result(grn_ctx *ctx, mrb_value result)
+{
+ mrb_state *mrb = ctx->impl->mrb.state;
+
+ GRN_OUTPUT_MAP_OPEN("result", 1);
+ if (mrb->exc) {
+ mrb_value mrb_message;
+ grn_obj grn_message;
+ GRN_OUTPUT_CSTR("exception");
+ GRN_OUTPUT_MAP_OPEN("exception", 1);
+ GRN_OUTPUT_CSTR("message");
+ mrb_message = mrb_funcall(mrb, mrb_obj_value(mrb->exc), "message", 0);
+ GRN_VOID_INIT(&grn_message);
+ if (grn_mrb_to_grn(ctx, mrb_message, &grn_message) == GRN_SUCCESS) {
+ GRN_OUTPUT_OBJ(&grn_message, NULL);
+ } else {
+ GRN_OUTPUT_CSTR("unsupported message type");
+ }
+ grn_obj_unlink(ctx, &grn_message);
+ GRN_OUTPUT_MAP_CLOSE();
+ } else {
+ grn_obj grn_result;
+ GRN_OUTPUT_CSTR("value");
+ GRN_VOID_INIT(&grn_result);
+ if (grn_mrb_to_grn(ctx, result, &grn_result) == GRN_SUCCESS) {
+ GRN_OUTPUT_OBJ(&grn_result, NULL);
+ } else {
+ GRN_OUTPUT_CSTR("unsupported return value");
+ }
+ grn_obj_unlink(ctx, &grn_result);
+ }
+ GRN_OUTPUT_MAP_CLOSE();
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/suggest/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/suggest/CMakeLists.txt
new file mode 100644
index 00000000000..72b86362c55
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/suggest/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ ${MRUBY_INCLUDE_DIRS})
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/sources.am SUGGEST_SOURCES)
+add_library(suggest MODULE ${SUGGEST_SOURCES})
+set_source_files_properties(${SUGGEST_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+set_target_properties(suggest PROPERTIES PREFIX "")
+target_link_libraries(suggest libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS suggest DESTINATION "${GRN_RELATIVE_PLUGINS_DIR}/suggest")
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/suggest/Makefile.am b/storage/mroonga/vendor/groonga/plugins/suggest/Makefile.am
new file mode 100644
index 00000000000..7f321b6c482
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/suggest/Makefile.am
@@ -0,0 +1,24 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(MESSAGE_PACK_LIBS)
+
+suggest_plugins_LTLIBRARIES = suggest.la
+
+include sources.am
diff --git a/storage/mroonga/vendor/groonga/plugins/suggest/sources.am b/storage/mroonga/vendor/groonga/plugins/suggest/sources.am
new file mode 100644
index 00000000000..798a431a8e8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/suggest/sources.am
@@ -0,0 +1,2 @@
+suggest_la_SOURCES = \
+ suggest.c
diff --git a/storage/mroonga/vendor/groonga/plugins/suggest/suggest.c b/storage/mroonga/vendor/groonga/plugins/suggest/suggest.c
new file mode 100644
index 00000000000..3e291b96d90
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/suggest/suggest.c
@@ -0,0 +1,1023 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/* Copyright(C) 2010-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "ctx.h"
+#include "db.h"
+#include "ii.h"
+#include "token.h"
+#include "output.h"
+#include <groonga/plugin.h>
+#include <string.h>
+
+#ifdef HAVE__STRNICMP
+# define strncasecmp(s1,s2,n) _strnicmp(s1,s2,n)
+#endif /* HAVE__STRNICMP */
+
+#define VAR GRN_PROC_GET_VAR_BY_OFFSET
+#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0
+#define TEXT_VALUE_LEN(x) GRN_TEXT_VALUE(x), GRN_TEXT_LEN(x)
+
+#define MIN_LEARN_DISTANCE (60 * GRN_TIME_USEC_PER_SEC)
+
+#define COMPLETE 1
+#define CORRECT 2
+#define SUGGEST 4
+
+typedef enum {
+ GRN_SUGGEST_SEARCH_YES,
+ GRN_SUGGEST_SEARCH_NO,
+ GRN_SUGGEST_SEARCH_AUTO
+} grn_suggest_search_mode;
+
+typedef struct {
+ grn_obj *post_event;
+ grn_obj *post_type;
+ grn_obj *post_item;
+ grn_obj *seq;
+ grn_obj *post_time;
+ grn_obj *pairs;
+
+ int learn_distance_in_seconds;
+
+ grn_id post_event_id;
+ grn_id post_type_id;
+ grn_id post_item_id;
+ grn_id seq_id;
+ int64_t post_time_value;
+
+ grn_obj *seqs;
+ grn_obj *seqs_events;
+ grn_obj *events;
+ grn_obj *events_item;
+ grn_obj *events_type;
+ grn_obj *events_time;
+ grn_obj *event_types;
+ grn_obj *items;
+ grn_obj *items_freq;
+ grn_obj *items_freq2;
+ grn_obj *items_last;
+ grn_obj *pairs_pre;
+ grn_obj *pairs_post;
+ grn_obj *pairs_freq0;
+ grn_obj *pairs_freq1;
+ grn_obj *pairs_freq2;
+
+ grn_obj dataset_name;
+
+ grn_obj *configuration;
+
+ grn_obj weight;
+ grn_obj pre_events;
+
+ uint64_t key_prefix;
+ grn_obj pre_item;
+} grn_suggest_learner;
+
+static int
+grn_parse_suggest_types(grn_obj *text)
+{
+ const char *nptr = GRN_TEXT_VALUE(text);
+ const char *end = GRN_BULK_CURR(text);
+ int types = 0;
+ while (nptr < end) {
+ if (*nptr == '|') {
+ nptr += 1;
+ continue;
+ }
+ {
+ const char string[] = "complete";
+ size_t length = sizeof(string) - 1;
+ if (nptr + length <= end && memcmp(nptr, string, length) == 0) {
+ types |= COMPLETE;
+ nptr += length;
+ continue;
+ }
+ }
+ {
+ const char string[] = "correct";
+ size_t length = sizeof(string) - 1;
+ if (nptr + length <= end && memcmp(nptr, string, length) == 0) {
+ types |= CORRECT;
+ nptr += length;
+ continue;
+ }
+ }
+ {
+ const char string[] = "suggest";
+ size_t length = sizeof(string) - 1;
+ if (nptr + length <= end && memcmp(nptr, string, length) == 0) {
+ types |= SUGGEST;
+ nptr += length;
+ continue;
+ }
+ }
+ break;
+ }
+ return types;
+}
+
+static int32_t
+cooccurrence_search(grn_ctx *ctx, grn_obj *items, grn_obj *items_boost, grn_id id,
+ grn_obj *res, int query_type, int frequency_threshold,
+ double conditional_probability_threshold)
+{
+ int32_t max_score = 0;
+ if (id) {
+ grn_ii_cursor *c;
+ grn_obj *co = grn_obj_column(ctx, items, CONST_STR_LEN("co"));
+ grn_obj *pairs = grn_ctx_at(ctx, grn_obj_get_range(ctx, co));
+ grn_obj *items_freq = grn_obj_column(ctx, items, CONST_STR_LEN("freq"));
+ grn_obj *items_freq2 = grn_obj_column(ctx, items, CONST_STR_LEN("freq2"));
+ grn_obj *pairs_freq, *pairs_post = grn_obj_column(ctx, pairs, CONST_STR_LEN("post"));
+ switch (query_type) {
+ case COMPLETE :
+ pairs_freq = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq0"));
+ break;
+ case CORRECT :
+ pairs_freq = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq1"));
+ break;
+ case SUGGEST :
+ pairs_freq = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq2"));
+ break;
+ default :
+ return max_score;
+ }
+ if ((c = grn_ii_cursor_open(ctx, (grn_ii *)co, id, GRN_ID_NIL, GRN_ID_MAX,
+ ((grn_ii *)co)->n_elements - 1, 0))) {
+ grn_ii_posting *p;
+ grn_obj post, pair_freq, item_freq, item_freq2, item_boost;
+ GRN_RECORD_INIT(&post, 0, grn_obj_id(ctx, items));
+ GRN_INT32_INIT(&pair_freq, 0);
+ GRN_INT32_INIT(&item_freq, 0);
+ GRN_INT32_INIT(&item_freq2, 0);
+ GRN_INT32_INIT(&item_boost, 0);
+ while ((p = grn_ii_cursor_next(ctx, c))) {
+ grn_id post_id;
+ int pfreq, ifreq, ifreq2, boost;
+ double conditional_probability;
+ GRN_BULK_REWIND(&post);
+ GRN_BULK_REWIND(&pair_freq);
+ GRN_BULK_REWIND(&item_freq);
+ GRN_BULK_REWIND(&item_freq2);
+ GRN_BULK_REWIND(&item_boost);
+ grn_obj_get_value(ctx, pairs_post, p->rid, &post);
+ grn_obj_get_value(ctx, pairs_freq, p->rid, &pair_freq);
+ post_id = GRN_RECORD_VALUE(&post);
+ grn_obj_get_value(ctx, items_freq, post_id, &item_freq);
+ grn_obj_get_value(ctx, items_freq2, post_id, &item_freq2);
+ grn_obj_get_value(ctx, items_boost, post_id, &item_boost);
+ pfreq = GRN_INT32_VALUE(&pair_freq);
+ ifreq = GRN_INT32_VALUE(&item_freq);
+ ifreq2 = GRN_INT32_VALUE(&item_freq2);
+ if (ifreq2 > 0) {
+ conditional_probability = (double)pfreq / (double)ifreq2;
+ } else {
+ conditional_probability = 0.0;
+ }
+ boost = GRN_INT32_VALUE(&item_boost);
+ if (pfreq >= frequency_threshold && ifreq >= frequency_threshold &&
+ conditional_probability >= conditional_probability_threshold &&
+ boost >= 0) {
+ grn_rset_recinfo *ri;
+ void *value;
+ int32_t score = pfreq;
+ int added;
+ if (max_score < score + boost) { max_score = score + boost; }
+ /* put any formula if desired */
+ if (grn_hash_add(ctx, (grn_hash *)res,
+ &post_id, sizeof(grn_id), &value, &added)) {
+ ri = value;
+ ri->score += score;
+ if (added) {
+ ri->score += boost;
+ }
+ }
+ }
+ }
+ GRN_OBJ_FIN(ctx, &post);
+ GRN_OBJ_FIN(ctx, &pair_freq);
+ GRN_OBJ_FIN(ctx, &item_freq);
+ GRN_OBJ_FIN(ctx, &item_freq2);
+ GRN_OBJ_FIN(ctx, &item_boost);
+ grn_ii_cursor_close(ctx, c);
+ }
+ }
+ return max_score;
+}
+
+#define DEFAULT_LIMIT 10
+#define DEFAULT_SORTBY "-_score"
+#define DEFAULT_OUTPUT_COLUMNS "_key,_score"
+#define DEFAULT_FREQUENCY_THRESHOLD 100
+#define DEFAULT_CONDITIONAL_PROBABILITY_THRESHOLD 0.2
+
+static void
+output(grn_ctx *ctx, grn_obj *table, grn_obj *res, grn_id tid,
+ grn_obj *sortby, grn_obj *output_columns, int offset, int limit)
+{
+ grn_obj *sorted;
+ if ((sorted = grn_table_create(ctx, NULL, 0, NULL, GRN_OBJ_TABLE_NO_KEY, NULL, res))) {
+ uint32_t nkeys;
+ grn_obj_format format;
+ grn_table_sort_key *keys;
+ const char *sortby_val = GRN_TEXT_VALUE(sortby);
+ unsigned int sortby_len = GRN_TEXT_LEN(sortby);
+ const char *oc_val = GRN_TEXT_VALUE(output_columns);
+ unsigned int oc_len = GRN_TEXT_LEN(output_columns);
+ if (!sortby_val || !sortby_len) {
+ sortby_val = DEFAULT_SORTBY;
+ sortby_len = sizeof(DEFAULT_SORTBY) - 1;
+ }
+ if (!oc_val || !oc_len) {
+ oc_val = DEFAULT_OUTPUT_COLUMNS;
+ oc_len = sizeof(DEFAULT_OUTPUT_COLUMNS) - 1;
+ }
+ if ((keys = grn_table_sort_key_from_str(ctx, sortby_val, sortby_len, res, &nkeys))) {
+ grn_table_sort(ctx, res, offset, limit, sorted, keys, nkeys);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "sort(%d)", limit);
+ GRN_OBJ_FORMAT_INIT(&format, grn_table_size(ctx, res), 0, limit, offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET;
+ grn_obj_columns(ctx, sorted, oc_val, oc_len, &format.columns);
+ GRN_OUTPUT_OBJ(sorted, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ grn_table_sort_key_close(ctx, keys, nkeys);
+ }
+ grn_obj_unlink(ctx, sorted);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot create temporary sort table.");
+ }
+}
+
+static inline void
+complete_add_item(grn_ctx *ctx, grn_id id, grn_obj *res, int frequency_threshold,
+ grn_obj *items_freq, grn_obj *items_boost,
+ grn_obj *item_freq, grn_obj *item_boost)
+{
+ GRN_BULK_REWIND(item_freq);
+ GRN_BULK_REWIND(item_boost);
+ grn_obj_get_value(ctx, items_freq, id, item_freq);
+ grn_obj_get_value(ctx, items_boost, id, item_boost);
+ if (GRN_INT32_VALUE(item_boost) >= 0) {
+ int32_t score;
+ score = 1 +
+ GRN_INT32_VALUE(item_freq) +
+ GRN_INT32_VALUE(item_boost);
+ if (score >= frequency_threshold) {
+ void *value;
+ if (grn_hash_add(ctx, (grn_hash *)res, &id, sizeof(grn_id),
+ &value, NULL)) {
+ grn_rset_recinfo *ri;
+ ri = value;
+ ri->score += score;
+ }
+ }
+ }
+}
+
+static void
+complete(grn_ctx *ctx, grn_obj *items, grn_obj *items_boost, grn_obj *col,
+ grn_obj *query, grn_obj *sortby,
+ grn_obj *output_columns, int offset, int limit,
+ int frequency_threshold, double conditional_probability_threshold,
+ grn_suggest_search_mode prefix_search_mode)
+{
+ grn_obj *res;
+ grn_obj *items_freq = grn_obj_column(ctx, items, CONST_STR_LEN("freq"));
+ grn_obj item_freq, item_boost;
+ GRN_INT32_INIT(&item_freq, 0);
+ GRN_INT32_INIT(&item_boost, 0);
+ if ((res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, items, NULL))) {
+ grn_id tid = grn_table_get(ctx, items, TEXT_VALUE_LEN(query));
+ if (GRN_TEXT_LEN(query)) {
+ grn_table_cursor *cur;
+ /* RK search + prefix search */
+ grn_obj *index;
+ /* FIXME: support index selection */
+ if (grn_column_index(ctx, col, GRN_OP_PREFIX, &index, 1, NULL)) {
+ if ((cur = grn_table_cursor_open(ctx, grn_ctx_at(ctx, index->header.domain),
+ GRN_TEXT_VALUE(query),
+ GRN_TEXT_LEN(query),
+ NULL, 0, 0, -1,
+ GRN_CURSOR_PREFIX|GRN_CURSOR_RK))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, cur))) {
+ grn_ii_cursor *icur;
+ if ((icur = grn_ii_cursor_open(ctx, (grn_ii *)index, id,
+ GRN_ID_NIL, GRN_ID_MAX, 1, 0))) {
+ grn_ii_posting *p;
+ while ((p = grn_ii_cursor_next(ctx, icur))) {
+ complete_add_item(ctx, p->rid, res, frequency_threshold,
+ items_freq, items_boost,
+ &item_freq, &item_boost);
+ }
+ grn_ii_cursor_close(ctx, icur);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot open cursor for prefix RK search.");
+ }
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot find index for prefix RK search.");
+ }
+ cooccurrence_search(ctx, items, items_boost, tid, res, COMPLETE,
+ frequency_threshold,
+ conditional_probability_threshold);
+ if (((prefix_search_mode == GRN_SUGGEST_SEARCH_YES) ||
+ (prefix_search_mode == GRN_SUGGEST_SEARCH_AUTO &&
+ !grn_table_size(ctx, res))) &&
+ (cur = grn_table_cursor_open(ctx, items,
+ GRN_TEXT_VALUE(query),
+ GRN_TEXT_LEN(query),
+ NULL, 0, 0, -1, GRN_CURSOR_PREFIX))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, cur))) {
+ complete_add_item(ctx, id, res, frequency_threshold,
+ items_freq, items_boost, &item_freq, &item_boost);
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+ }
+ output(ctx, items, res, tid, sortby, output_columns, offset, limit);
+ grn_obj_close(ctx, res);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot create temporary table.");
+ }
+ GRN_OBJ_FIN(ctx, &item_boost);
+ GRN_OBJ_FIN(ctx, &item_freq);
+}
+
+static void
+correct(grn_ctx *ctx, grn_obj *items, grn_obj *items_boost,
+ grn_obj *query, grn_obj *sortby,
+ grn_obj *output_columns, int offset, int limit,
+ int frequency_threshold, double conditional_probability_threshold,
+ grn_suggest_search_mode similar_search_mode)
+{
+ grn_obj *res;
+ grn_obj *items_freq2 = grn_obj_column(ctx, items, CONST_STR_LEN("freq2"));
+ grn_obj item_freq2, item_boost;
+ GRN_INT32_INIT(&item_freq2, 0);
+ GRN_INT32_INIT(&item_boost, 0);
+ if ((res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, items, NULL))) {
+ grn_id tid = grn_table_get(ctx, items, TEXT_VALUE_LEN(query));
+ int32_t max_score;
+ max_score = cooccurrence_search(ctx, items, items_boost, tid, res, CORRECT,
+ frequency_threshold,
+ conditional_probability_threshold);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SCORE,
+ ":", "cooccur(%d)", max_score);
+ if (GRN_TEXT_LEN(query) &&
+ ((similar_search_mode == GRN_SUGGEST_SEARCH_YES) ||
+ (similar_search_mode == GRN_SUGGEST_SEARCH_AUTO &&
+ max_score < frequency_threshold))) {
+ grn_obj *key, *index;
+ if ((key = grn_obj_column(ctx, items,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN))) {
+ if (grn_column_index(ctx, key, GRN_OP_MATCH, &index, 1, NULL)) {
+ grn_select_optarg optarg;
+ memset(&optarg, 0, sizeof(grn_select_optarg));
+ optarg.mode = GRN_OP_SIMILAR;
+ optarg.similarity_threshold = 0;
+ optarg.max_size = 2;
+ grn_ii_select(ctx, (grn_ii *)index, TEXT_VALUE_LEN(query),
+ (grn_hash *)res, GRN_OP_OR, &optarg);
+ grn_obj_unlink(ctx, index);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "similar(%d)", grn_table_size(ctx, res));
+ {
+ grn_hash_cursor *hc = grn_hash_cursor_open(ctx, (grn_hash *)res, NULL,
+ 0, NULL, 0, 0, -1, 0);
+ if (hc) {
+ while (grn_hash_cursor_next(ctx, hc)) {
+ void *key, *value;
+ if (grn_hash_cursor_get_key_value(ctx, hc, &key, NULL, &value)) {
+ grn_id *rp;
+ rp = key;
+ GRN_BULK_REWIND(&item_freq2);
+ GRN_BULK_REWIND(&item_boost);
+ grn_obj_get_value(ctx, items_freq2, *rp, &item_freq2);
+ grn_obj_get_value(ctx, items_boost, *rp, &item_boost);
+ if (GRN_INT32_VALUE(&item_boost) >= 0) {
+ int32_t score;
+ grn_rset_recinfo *ri;
+ score = 1 +
+ (GRN_INT32_VALUE(&item_freq2) >> 4) +
+ GRN_INT32_VALUE(&item_boost);
+ ri = value;
+ ri->score += score;
+ if (score >= frequency_threshold) { continue; }
+ }
+ /* score < frequency_threshold || item_boost < 0 */
+ grn_hash_cursor_delete(ctx, hc, NULL);
+ }
+ }
+ grn_hash_cursor_close(ctx, hc);
+ }
+ }
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_SIZE,
+ ":", "filter(%d)", grn_table_size(ctx, res));
+ {
+ /* exec _score -= edit_distance(_key, "query string") for all records */
+ grn_obj *var;
+ grn_obj *expr;
+
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, res, expr, var);
+ if (expr) {
+ grn_table_cursor *tc;
+ grn_obj *score = grn_obj_column(ctx, res,
+ GRN_COLUMN_NAME_SCORE,
+ GRN_COLUMN_NAME_SCORE_LEN);
+ grn_obj *key = grn_obj_column(ctx, res,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ grn_expr_append_obj(ctx, expr,
+ score,
+ GRN_OP_GET_VALUE, 1);
+ grn_expr_append_obj(ctx, expr,
+ grn_ctx_get(ctx, CONST_STR_LEN("edit_distance")),
+ GRN_OP_PUSH, 1);
+ grn_expr_append_obj(ctx, expr,
+ key,
+ GRN_OP_GET_VALUE, 1);
+ grn_expr_append_const(ctx, expr, query, GRN_OP_PUSH, 1);
+ grn_expr_append_op(ctx, expr, GRN_OP_CALL, 2);
+ grn_expr_append_op(ctx, expr, GRN_OP_MINUS_ASSIGN, 2);
+
+ if ((tc = grn_table_cursor_open(ctx, res, NULL, 0, NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ grn_obj score_value;
+ GRN_INT32_INIT(&score_value, 0);
+ while ((id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ GRN_RECORD_SET(ctx, var, id);
+ grn_expr_exec(ctx, expr, 0);
+ GRN_BULK_REWIND(&score_value);
+ grn_obj_get_value(ctx, score, id, &score_value);
+ if (GRN_INT32_VALUE(&score_value) < frequency_threshold) {
+ grn_table_cursor_delete(ctx, tc);
+ }
+ }
+ grn_obj_unlink(ctx, &score_value);
+ grn_table_cursor_close(ctx, tc);
+ }
+ grn_obj_unlink(ctx, score);
+ grn_obj_unlink(ctx, key);
+ grn_obj_unlink(ctx, expr);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR,
+ "error on building expr. for calicurating edit distance");
+ }
+ }
+ }
+ grn_obj_unlink(ctx, key);
+ }
+ }
+ output(ctx, items, res, tid, sortby, output_columns, offset, limit);
+ grn_obj_close(ctx, res);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot create temporary table.");
+ }
+ GRN_OBJ_FIN(ctx, &item_boost);
+ GRN_OBJ_FIN(ctx, &item_freq2);
+}
+
+static void
+suggest(grn_ctx *ctx, grn_obj *items, grn_obj *items_boost,
+ grn_obj *query, grn_obj *sortby,
+ grn_obj *output_columns, int offset, int limit,
+ int frequency_threshold, double conditional_probability_threshold)
+{
+ grn_obj *res;
+ if ((res = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|GRN_OBJ_WITH_SUBREC, items, NULL))) {
+ grn_id tid = grn_table_get(ctx, items, TEXT_VALUE_LEN(query));
+ cooccurrence_search(ctx, items, items_boost, tid, res, SUGGEST,
+ frequency_threshold, conditional_probability_threshold);
+ output(ctx, items, res, tid, sortby, output_columns, offset, limit);
+ grn_obj_close(ctx, res);
+ } else {
+ ERR(GRN_UNKNOWN_ERROR, "cannot create temporary table.");
+ }
+}
+
+static grn_suggest_search_mode
+parse_search_mode(grn_ctx *ctx, grn_obj *mode_text)
+{
+ grn_suggest_search_mode mode;
+ int mode_length;
+
+ mode_length = GRN_TEXT_LEN(mode_text);
+ if (mode_length == 3 &&
+ strncasecmp("yes", GRN_TEXT_VALUE(mode_text), 3) == 0) {
+ mode = GRN_SUGGEST_SEARCH_YES;
+ } else if (mode_length == 2 &&
+ strncasecmp("no", GRN_TEXT_VALUE(mode_text), 2) == 0) {
+ mode = GRN_SUGGEST_SEARCH_NO;
+ } else {
+ mode = GRN_SUGGEST_SEARCH_AUTO;
+ }
+
+ return mode;
+}
+
+static grn_obj *
+command_suggest(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *items, *col, *items_boost;
+ int types;
+ int offset = 0;
+ int limit = DEFAULT_LIMIT;
+ int frequency_threshold = DEFAULT_FREQUENCY_THRESHOLD;
+ double conditional_probability_threshold =
+ DEFAULT_CONDITIONAL_PROBABILITY_THRESHOLD;
+ grn_suggest_search_mode prefix_search_mode;
+ grn_suggest_search_mode similar_search_mode;
+
+ types = grn_parse_suggest_types(VAR(0));
+ if (GRN_TEXT_LEN(VAR(6)) > 0) {
+ offset = grn_atoi(GRN_TEXT_VALUE(VAR(6)), GRN_BULK_CURR(VAR(6)), NULL);
+ }
+ if (GRN_TEXT_LEN(VAR(7)) > 0) {
+ limit = grn_atoi(GRN_TEXT_VALUE(VAR(7)), GRN_BULK_CURR(VAR(7)), NULL);
+ }
+ if (GRN_TEXT_LEN(VAR(8)) > 0) {
+ frequency_threshold = grn_atoi(GRN_TEXT_VALUE(VAR(8)), GRN_BULK_CURR(VAR(8)), NULL);
+ }
+ if (GRN_TEXT_LEN(VAR(9)) > 0) {
+ GRN_TEXT_PUTC(ctx, VAR(9), '\0');
+ conditional_probability_threshold = strtod(GRN_TEXT_VALUE(VAR(9)), NULL);
+ }
+
+ prefix_search_mode = parse_search_mode(ctx, VAR(10));
+ similar_search_mode = parse_search_mode(ctx, VAR(11));
+
+ if ((items = grn_ctx_get(ctx, TEXT_VALUE_LEN(VAR(1))))) {
+ if ((items_boost = grn_obj_column(ctx, items, CONST_STR_LEN("boost")))) {
+ GRN_OUTPUT_MAP_OPEN("RESULT_SET", -1);
+ if (types & COMPLETE) {
+ if ((col = grn_obj_column(ctx, items, TEXT_VALUE_LEN(VAR(2))))) {
+ GRN_OUTPUT_CSTR("complete");
+ complete(ctx, items, items_boost, col, VAR(3), VAR(4),
+ VAR(5), offset, limit,
+ frequency_threshold, conditional_probability_threshold,
+ prefix_search_mode);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "invalid column.");
+ }
+ }
+ if (types & CORRECT) {
+ GRN_OUTPUT_CSTR("correct");
+ correct(ctx, items, items_boost, VAR(3), VAR(4),
+ VAR(5), offset, limit,
+ frequency_threshold, conditional_probability_threshold,
+ similar_search_mode);
+ }
+ if (types & SUGGEST) {
+ GRN_OUTPUT_CSTR("suggest");
+ suggest(ctx, items, items_boost, VAR(3), VAR(4),
+ VAR(5), offset, limit,
+ frequency_threshold, conditional_probability_threshold);
+ }
+ GRN_OUTPUT_MAP_CLOSE();
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "nonexistent column: <%.*s.boost>",
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ }
+ grn_obj_unlink(ctx, items);
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "nonexistent table: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ }
+ return NULL;
+}
+
+static void
+learner_init_values(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ learner->post_event_id = GRN_RECORD_VALUE(learner->post_event);
+ learner->post_type_id = GRN_RECORD_VALUE(learner->post_type);
+ learner->post_item_id = GRN_RECORD_VALUE(learner->post_item);
+ learner->seq_id = GRN_RECORD_VALUE(learner->seq);
+ learner->post_time_value = GRN_TIME_VALUE(learner->post_time);
+}
+
+static void
+learner_init(grn_ctx *ctx, grn_suggest_learner *learner,
+ grn_obj *post_event, grn_obj *post_type, grn_obj *post_item,
+ grn_obj *seq, grn_obj *post_time, grn_obj *pairs)
+{
+ learner->post_event = post_event;
+ learner->post_type = post_type;
+ learner->post_item = post_item;
+ learner->seq = seq;
+ learner->post_time = post_time;
+ learner->pairs = pairs;
+
+ learner->learn_distance_in_seconds = 0;
+
+ learner_init_values(ctx, learner);
+}
+
+static void
+learner_init_columns(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_id events_id, event_types_id;
+ grn_obj *seqs, *events, *post_item, *items, *pairs;
+
+ learner->seqs = seqs = grn_ctx_at(ctx, GRN_OBJ_GET_DOMAIN(learner->seq));
+ learner->seqs_events = grn_obj_column(ctx, seqs, CONST_STR_LEN("events"));
+
+ events_id = grn_obj_get_range(ctx, learner->seqs_events);
+ learner->events = events = grn_ctx_at(ctx, events_id);
+ learner->events_item = grn_obj_column(ctx, events, CONST_STR_LEN("item"));
+ learner->events_type = grn_obj_column(ctx, events, CONST_STR_LEN("type"));
+ learner->events_time = grn_obj_column(ctx, events, CONST_STR_LEN("time"));
+
+ event_types_id = grn_obj_get_range(ctx, learner->events_type);
+ learner->event_types = grn_obj_column(ctx, events, CONST_STR_LEN("time"));
+
+ post_item = learner->post_item;
+ learner->items = items = grn_ctx_at(ctx, GRN_OBJ_GET_DOMAIN(post_item));
+ learner->items_freq = grn_obj_column(ctx, items, CONST_STR_LEN("freq"));
+ learner->items_freq2 = grn_obj_column(ctx, items, CONST_STR_LEN("freq2"));
+ learner->items_last = grn_obj_column(ctx, items, CONST_STR_LEN("last"));
+
+ pairs = learner->pairs;
+ learner->pairs_pre = grn_obj_column(ctx, pairs, CONST_STR_LEN("pre"));
+ learner->pairs_post = grn_obj_column(ctx, pairs, CONST_STR_LEN("post"));
+ learner->pairs_freq0 = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq0"));
+ learner->pairs_freq1 = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq1"));
+ learner->pairs_freq2 = grn_obj_column(ctx, pairs, CONST_STR_LEN("freq2"));
+}
+
+static void
+learner_fin_columns(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_obj_unlink(ctx, learner->seqs);
+ grn_obj_unlink(ctx, learner->seqs_events);
+
+ grn_obj_unlink(ctx, learner->events);
+ grn_obj_unlink(ctx, learner->events_item);
+ grn_obj_unlink(ctx, learner->events_type);
+ grn_obj_unlink(ctx, learner->events_time);
+
+ grn_obj_unlink(ctx, learner->event_types);
+
+ grn_obj_unlink(ctx, learner->items);
+ grn_obj_unlink(ctx, learner->items_freq);
+ grn_obj_unlink(ctx, learner->items_freq2);
+ grn_obj_unlink(ctx, learner->items_last);
+
+ grn_obj_unlink(ctx, learner->pairs_pre);
+ grn_obj_unlink(ctx, learner->pairs_post);
+ grn_obj_unlink(ctx, learner->pairs_freq0);
+ grn_obj_unlink(ctx, learner->pairs_freq1);
+ grn_obj_unlink(ctx, learner->pairs_freq2);
+}
+
+static void
+learner_init_weight(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_obj *weight_column = NULL;
+ unsigned int weight = 1;
+
+ if (learner->configuration) {
+ weight_column = grn_obj_column(ctx,
+ learner->configuration,
+ CONST_STR_LEN("weight"));
+ }
+ if (weight_column) {
+ grn_id id;
+ id = grn_table_get(ctx, learner->configuration,
+ GRN_TEXT_VALUE(&(learner->dataset_name)),
+ GRN_TEXT_LEN(&(learner->dataset_name)));
+ if (id != GRN_ID_NIL) {
+ grn_obj weight_value;
+ GRN_UINT32_INIT(&weight_value, 0);
+ grn_obj_get_value(ctx, weight_column, id, &weight_value);
+ weight = GRN_UINT32_VALUE(&weight_value);
+ GRN_OBJ_FIN(ctx, &weight_value);
+ }
+ grn_obj_unlink(ctx, weight_column);
+ }
+
+ GRN_UINT32_INIT(&(learner->weight), 0);
+ GRN_UINT32_SET(ctx, &(learner->weight), weight);
+}
+
+static void
+learner_init_dataset_name(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ char events_name[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int events_name_size;
+ unsigned int events_name_prefix_size;
+
+ events_name_size = grn_obj_name(ctx, learner->events,
+ events_name, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_TEXT_INIT(&(learner->dataset_name), 0);
+ events_name_prefix_size = strlen("event_");
+ if (events_name_size > events_name_prefix_size) {
+ GRN_TEXT_PUT(ctx,
+ &(learner->dataset_name),
+ events_name + events_name_prefix_size,
+ events_name_size - events_name_prefix_size);
+ }
+}
+
+static void
+learner_fin_dataset_name(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ GRN_OBJ_FIN(ctx, &(learner->dataset_name));
+}
+
+static void
+learner_init_configuration(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ learner->configuration = grn_ctx_get(ctx, "configuration", -1);
+}
+
+static void
+learner_fin_configuration(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ if (learner->configuration) {
+ grn_obj_unlink(ctx, learner->configuration);
+ }
+}
+
+static void
+learner_init_buffers(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ learner_init_weight(ctx, learner);
+ GRN_RECORD_INIT(&(learner->pre_events), 0, grn_obj_id(ctx, learner->events));
+}
+
+static void
+learner_fin_buffers(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_obj_unlink(ctx, &(learner->weight));
+ grn_obj_unlink(ctx, &(learner->pre_events));
+}
+
+static void
+learner_init_submit_learn(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_id items_id;
+
+ learner->key_prefix = ((uint64_t)learner->post_item_id) << 32;
+
+ items_id = grn_obj_get_range(ctx, learner->events_item);
+ GRN_RECORD_INIT(&(learner->pre_item), 0, items_id);
+
+ grn_obj_get_value(ctx, learner->seqs_events, learner->seq_id,
+ &(learner->pre_events));
+}
+
+static void
+learner_fin_submit_learn(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_obj_unlink(ctx, &(learner->pre_item));
+ GRN_BULK_REWIND(&(learner->pre_events));
+}
+
+static grn_bool
+learner_is_valid_input(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ return learner->post_event_id && learner->post_item_id && learner->seq_id;
+}
+
+static void
+learner_increment(grn_ctx *ctx, grn_suggest_learner *learner,
+ grn_obj *column, grn_id record_id)
+{
+ grn_obj_set_value(ctx, column, record_id, &(learner->weight), GRN_OBJ_INCR);
+}
+
+static void
+learner_increment_item_freq(grn_ctx *ctx, grn_suggest_learner *learner,
+ grn_obj *column)
+{
+ learner_increment(ctx, learner, column, learner->post_item_id);
+}
+
+static void
+learner_set_last_post_time(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ grn_obj_set_value(ctx, learner->items_last, learner->post_item_id,
+ learner->post_time, GRN_OBJ_SET);
+}
+
+static void
+learner_learn_for_complete_and_correcnt(grn_ctx *ctx,
+ grn_suggest_learner *learner)
+{
+ grn_obj *pre_item, *post_item, *pre_events;
+ grn_obj pre_type, pre_time;
+ grn_id *ep, *es;
+ uint64_t key;
+ int64_t post_time_value;
+
+ pre_item = &(learner->pre_item);
+ post_item = learner->post_item;
+ pre_events = &(learner->pre_events);
+ post_time_value = learner->post_time_value;
+ GRN_RECORD_INIT(&pre_type, 0, grn_obj_get_range(ctx, learner->events_type));
+ GRN_TIME_INIT(&pre_time, 0);
+ ep = (grn_id *)GRN_BULK_CURR(pre_events);
+ es = (grn_id *)GRN_BULK_HEAD(pre_events);
+ while (es < ep--) {
+ grn_id pair_id;
+ int added;
+ int64_t learn_distance;
+
+ GRN_BULK_REWIND(&pre_type);
+ GRN_BULK_REWIND(&pre_time);
+ GRN_BULK_REWIND(pre_item);
+ grn_obj_get_value(ctx, learner->events_type, *ep, &pre_type);
+ grn_obj_get_value(ctx, learner->events_time, *ep, &pre_time);
+ grn_obj_get_value(ctx, learner->events_item, *ep, pre_item);
+ learn_distance = post_time_value - GRN_TIME_VALUE(&pre_time);
+ if (learn_distance >= MIN_LEARN_DISTANCE) {
+ learner->learn_distance_in_seconds =
+ (int)(learn_distance / GRN_TIME_USEC_PER_SEC);
+ break;
+ }
+ key = learner->key_prefix + GRN_RECORD_VALUE(pre_item);
+ pair_id = grn_table_add(ctx, learner->pairs, &key, sizeof(uint64_t),
+ &added);
+ if (added) {
+ grn_obj_set_value(ctx, learner->pairs_pre, pair_id, pre_item,
+ GRN_OBJ_SET);
+ grn_obj_set_value(ctx, learner->pairs_post, pair_id, post_item,
+ GRN_OBJ_SET);
+ }
+ if (GRN_RECORD_VALUE(&pre_type)) {
+ learner_increment(ctx, learner, learner->pairs_freq1, pair_id);
+ break;
+ } else {
+ learner_increment(ctx, learner, learner->pairs_freq0, pair_id);
+ }
+ }
+ GRN_OBJ_FIN(ctx, &pre_type);
+ GRN_OBJ_FIN(ctx, &pre_time);
+}
+
+static void
+learner_learn_for_suggest(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ char keybuf[GRN_TABLE_MAX_KEY_SIZE];
+ int keylen = grn_table_get_key(ctx, learner->items, learner->post_item_id,
+ keybuf, GRN_TABLE_MAX_KEY_SIZE);
+ unsigned int token_flags = 0;
+ grn_token_cursor *token_cursor =
+ grn_token_cursor_open(ctx, learner->items, keybuf, keylen,
+ GRN_TOKEN_ADD, token_flags);
+ if (token_cursor) {
+ grn_id tid;
+ grn_obj *pre_item = &(learner->pre_item);
+ grn_obj *post_item = learner->post_item;
+ grn_hash *token_ids = NULL;
+ while ((tid = grn_token_cursor_next(ctx, token_cursor)) && tid != learner->post_item_id) {
+ uint64_t key;
+ int added;
+ grn_id pair_id;
+ key = learner->key_prefix + tid;
+ pair_id = grn_table_add(ctx, learner->pairs, &key, sizeof(uint64_t),
+ &added);
+ if (added) {
+ GRN_RECORD_SET(ctx, pre_item, tid);
+ grn_obj_set_value(ctx, learner->pairs_pre, pair_id,
+ pre_item, GRN_OBJ_SET);
+ grn_obj_set_value(ctx, learner->pairs_post, pair_id,
+ post_item, GRN_OBJ_SET);
+ }
+ if (!token_ids) {
+ token_ids = grn_hash_create(ctx, NULL, sizeof(grn_id), 0,
+ GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY);
+ }
+ if (token_ids) {
+ int token_added;
+ grn_hash_add(ctx, token_ids, &tid, sizeof(grn_id), NULL, &token_added);
+ if (token_added) {
+ learner_increment(ctx, learner, learner->pairs_freq2, pair_id);
+ }
+ }
+ }
+ if (token_ids) {
+ grn_hash_close(ctx, token_ids);
+ }
+ grn_token_cursor_close(ctx, token_cursor);
+ }
+}
+
+static void
+learner_append_post_event(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ GRN_RECORD_SET(ctx, &(learner->pre_events), learner->post_event_id);
+ grn_obj_set_value(ctx, learner->seqs_events, learner->seq_id,
+ &(learner->pre_events), GRN_OBJ_APPEND);
+}
+
+static void
+learner_learn(grn_ctx *ctx, grn_suggest_learner *learner)
+{
+ if (learner_is_valid_input(ctx, learner)) {
+ learner_init_columns(ctx, learner);
+ learner_init_dataset_name(ctx, learner);
+ learner_init_configuration(ctx, learner);
+ learner_init_buffers(ctx, learner);
+ learner_increment_item_freq(ctx, learner, learner->items_freq);
+ learner_set_last_post_time(ctx, learner);
+ if (learner->post_type_id) {
+ learner_init_submit_learn(ctx, learner);
+ learner_increment_item_freq(ctx, learner, learner->items_freq2);
+ learner_learn_for_complete_and_correcnt(ctx, learner);
+ learner_learn_for_suggest(ctx, learner);
+ learner_fin_submit_learn(ctx, learner);
+ }
+ learner_append_post_event(ctx, learner);
+ learner_fin_buffers(ctx, learner);
+ learner_fin_configuration(ctx, learner);
+ learner_fin_dataset_name(ctx, learner);
+ learner_fin_columns(ctx, learner);
+ }
+}
+
+static grn_obj *
+func_suggest_preparer(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int learn_distance_in_seconds = 0;
+ grn_obj *obj;
+ if (nargs == 6) {
+ grn_obj *post_event = args[0];
+ grn_obj *post_type = args[1];
+ grn_obj *post_item = args[2];
+ grn_obj *seq = args[3];
+ grn_obj *post_time = args[4];
+ grn_obj *pairs = args[5];
+ grn_suggest_learner learner;
+ learner_init(ctx, &learner,
+ post_event, post_type, post_item, seq, post_time, pairs);
+ learner_learn(ctx, &learner);
+ learn_distance_in_seconds = learner.learn_distance_in_seconds;
+ }
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
+ GRN_UINT32_SET(ctx, obj, learn_distance_in_seconds);
+ }
+ return obj;
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_expr_var vars[12];
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "types", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "column", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "query", -1);
+ grn_plugin_expr_var_init(ctx, &vars[4], "sortby", -1);
+ grn_plugin_expr_var_init(ctx, &vars[5], "output_columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[6], "offset", -1);
+ grn_plugin_expr_var_init(ctx, &vars[7], "limit", -1);
+ grn_plugin_expr_var_init(ctx, &vars[8], "frequency_threshold", -1);
+ grn_plugin_expr_var_init(ctx, &vars[9], "conditional_probability_threshold", -1);
+ grn_plugin_expr_var_init(ctx, &vars[10], "prefix_search", -1);
+ grn_plugin_expr_var_init(ctx, &vars[11], "similar_search", -1);
+ grn_plugin_command_create(ctx, "suggest", -1, command_suggest, 12, vars);
+
+ grn_proc_create(ctx, CONST_STR_LEN("suggest_preparer"), GRN_PROC_FUNCTION,
+ func_suggest_preparer, NULL, NULL, 0, NULL);
+ return ctx->rc;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/table/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/table/CMakeLists.txt
new file mode 100644
index 00000000000..cba4697f042
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/table/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ ${MRUBY_INCLUDE_DIRS})
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/sources.am TABLE_SOURCES)
+add_library(table MODULE ${TABLE_SOURCES})
+set_source_files_properties(${TABLE_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+set_target_properties(table PROPERTIES PREFIX "")
+target_link_libraries(table libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS table DESTINATION "${GRN_RELATIVE_PLUGINS_DIR}/table")
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/table/Makefile.am b/storage/mroonga/vendor/groonga/plugins/table/Makefile.am
new file mode 100644
index 00000000000..4b49b0a3224
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/table/Makefile.am
@@ -0,0 +1,24 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(MESSAGE_PACK_LIBS)
+
+table_plugins_LTLIBRARIES = table.la
+
+include sources.am
diff --git a/storage/mroonga/vendor/groonga/plugins/table/sources.am b/storage/mroonga/vendor/groonga/plugins/table/sources.am
new file mode 100644
index 00000000000..943e79b1f5c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/table/sources.am
@@ -0,0 +1,2 @@
+table_la_SOURCES = \
+ table.c
diff --git a/storage/mroonga/vendor/groonga/plugins/table/table.c b/storage/mroonga/vendor/groonga/plugins/table/table.c
new file mode 100644
index 00000000000..a4fcd17bf90
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/table/table.c
@@ -0,0 +1,747 @@
+/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
+/* Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <string.h>
+
+#include "ctx.h"
+#include "db.h"
+#include "output.h"
+#include "util.h"
+#include <groonga/plugin.h>
+
+#define VAR GRN_PROC_GET_VAR_BY_OFFSET
+#define TEXT_VALUE_LEN(x) GRN_TEXT_VALUE(x), GRN_TEXT_LEN(x)
+
+static grn_obj *
+grn_ctx_get_table_by_name_or_id(grn_ctx *ctx,
+ const char *name, unsigned int name_len)
+{
+ grn_obj *table;
+ const char *end = name + name_len;
+ const char *rest = NULL;
+ grn_id id = grn_atoui(name, end, &rest);
+ if (rest == end) {
+ table = grn_ctx_at(ctx, id);
+ } else {
+ table = grn_ctx_get(ctx, name, name_len);
+ }
+ if (!GRN_OBJ_TABLEP(table)) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid table name: <%.*s>", name_len, name);
+ if (table) {
+ grn_obj_unlink(ctx, table);
+ table = NULL;
+ }
+ }
+ return table;
+}
+
+static void
+grn_output_table_name_or_id(grn_ctx *ctx, grn_obj *table)
+{
+ if (table) {
+ if (((grn_db_obj *)table)->id & GRN_OBJ_TMP_OBJECT) {
+ GRN_OUTPUT_INT64(((grn_db_obj *)table)->id);
+ } else {
+ int name_len;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+ name_len = grn_obj_name(ctx, table, name_buf, GRN_TABLE_MAX_KEY_SIZE);
+ GRN_OUTPUT_STR(name_buf, name_len);
+ }
+ } else {
+ GRN_OUTPUT_INT64(0);
+ }
+}
+
+static grn_bool
+parse_bool_value(grn_ctx *ctx, grn_obj *text)
+{
+ grn_bool value = GRN_FALSE;
+ if (GRN_TEXT_LEN(text) == 3 &&
+ memcmp("yes", GRN_TEXT_VALUE(text), 3) == 0) {
+ value = GRN_TRUE;
+ }
+ return value;
+}
+
+static grn_operator
+parse_set_operator_value(grn_ctx *ctx, grn_obj *text)
+{
+ grn_operator value = GRN_OP_OR;
+ if (GRN_TEXT_LEN(text) == 3) {
+ if (memcmp("and", GRN_TEXT_VALUE(text), 3) == 0) {
+ value = GRN_OP_AND;
+ } else if (memcmp("but", GRN_TEXT_VALUE(text), 3) == 0) {
+ value = GRN_OP_AND_NOT;
+ }
+ } else if (GRN_TEXT_LEN(text) == 6 &&
+ memcmp("adjust", GRN_TEXT_VALUE(text), 6) == 0) {
+ value = GRN_OP_ADJUST;
+ } else if (GRN_TEXT_LEN(text) == 7 &&
+ memcmp("and_not", GRN_TEXT_VALUE(text), 7) == 0) {
+ value = GRN_OP_AND_NOT;
+ }
+ return value;
+}
+
+static grn_obj *
+command_match(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *result_set = NULL;
+ grn_obj *table = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(0)));
+ if (table) {
+ grn_expr_flags flags = GRN_EXPR_SYNTAX_QUERY;
+ grn_obj *v, *query, *columns = NULL;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, v);
+ if (query) {
+ if (GRN_TEXT_LEN(VAR(1))) {
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, columns, v);
+ if (columns) {
+ grn_expr_parse(ctx, columns, TEXT_VALUE_LEN(VAR(1)),
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT);
+ }
+ }
+ if (parse_bool_value(ctx, VAR(5))) {
+ flags |= GRN_EXPR_ALLOW_COLUMN;
+ }
+ if (parse_bool_value(ctx, VAR(6))) {
+ flags |= GRN_EXPR_ALLOW_PRAGMA;
+ }
+ grn_expr_parse(ctx, query, TEXT_VALUE_LEN(VAR(2)),
+ columns, GRN_OP_MATCH, GRN_OP_AND, flags);
+ if (GRN_TEXT_LEN(VAR(3))) {
+ result_set = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(3)));
+ } else {
+ result_set = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|
+ GRN_OBJ_WITH_SUBREC,
+ table, NULL);
+ }
+ if (result_set) {
+ grn_table_select(ctx, table, query, result_set,
+ parse_set_operator_value(ctx, VAR(4)));
+ }
+ grn_obj_unlink(ctx, columns);
+ grn_obj_unlink(ctx, query);
+ }
+ }
+ grn_output_table_name_or_id(ctx, result_set);
+ return NULL;
+}
+
+static grn_obj *
+command_filter_by_script(grn_ctx *ctx, int nargs,
+ grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *result_set = NULL;
+ grn_obj *table = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(0)));
+ if (table) {
+ grn_expr_flags flags = GRN_EXPR_SYNTAX_SCRIPT;
+ grn_obj *v, *query;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table, query, v);
+ if (query) {
+ if (parse_bool_value(ctx, VAR(4))) {
+ flags |= GRN_EXPR_ALLOW_UPDATE;
+ }
+ grn_expr_parse(ctx, query, TEXT_VALUE_LEN(VAR(1)),
+ NULL, GRN_OP_MATCH, GRN_OP_AND, flags);
+ if (GRN_TEXT_LEN(VAR(2))) {
+ result_set = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(2)));
+ } else {
+ result_set = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|
+ GRN_OBJ_WITH_SUBREC,
+ table, NULL);
+ }
+ if (result_set) {
+ grn_table_select(ctx, table, query, result_set,
+ parse_set_operator_value(ctx, VAR(3)));
+ }
+ grn_obj_unlink(ctx, query);
+ }
+ }
+ grn_output_table_name_or_id(ctx, result_set);
+ return NULL;
+}
+
+static grn_obj *
+command_filter(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_operator operator = GRN_OP_NOP;
+ grn_obj *table, *column, *result_set = NULL;
+ if (!(table = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(0))))) {
+ goto exit;
+ }
+ if (!(column = grn_obj_column(ctx, table, TEXT_VALUE_LEN(VAR(1))))) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid column name: <%.*s>",
+ (int)GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(1)));
+ goto exit;
+ }
+ if (GRN_TEXT_LEN(VAR(2)) == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "missing mandatory argument: operator");
+ goto exit;
+ } else {
+ uint32_t operator_len = GRN_TEXT_LEN(VAR(2));
+ const char *operator_text = GRN_TEXT_VALUE(VAR(2));
+ switch (operator_text[0]) {
+ case '<' :
+ if (operator_len == 1) {
+ operator = GRN_OP_LESS;
+ }
+ break;
+ }
+ if (operator == GRN_OP_NOP) {
+ ERR(GRN_INVALID_ARGUMENT, "invalid operator: <%.*s>",
+ operator_len, operator_text);
+ goto exit;
+ }
+ }
+ if (GRN_TEXT_LEN(VAR(4))) {
+ result_set = grn_ctx_get_table_by_name_or_id(ctx, TEXT_VALUE_LEN(VAR(4)));
+ } else {
+ result_set = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_TABLE_HASH_KEY|
+ GRN_OBJ_WITH_SUBREC,
+ table, NULL);
+ }
+ if (result_set) {
+ grn_column_filter(ctx, column, operator, VAR(3), result_set,
+ parse_set_operator_value(ctx, VAR(5)));
+ }
+exit :
+ grn_output_table_name_or_id(ctx, result_set);
+ return NULL;
+}
+
+static grn_obj *
+command_group(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ const char *table = GRN_TEXT_VALUE(VAR(0));
+ unsigned int table_len = GRN_TEXT_LEN(VAR(0));
+ const char *key = GRN_TEXT_VALUE(VAR(1));
+ unsigned int key_len = GRN_TEXT_LEN(VAR(1));
+ const char *set = GRN_TEXT_VALUE(VAR(2));
+ unsigned int set_len = GRN_TEXT_LEN(VAR(2));
+ grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len);
+ grn_obj *set_ = NULL;
+ if (table_) {
+ uint32_t ngkeys;
+ grn_table_sort_key *gkeys;
+ gkeys = grn_table_sort_key_from_str(ctx, key, key_len, table_, &ngkeys);
+ if (gkeys) {
+ if (set_len) {
+ set_ = grn_ctx_get_table_by_name_or_id(ctx, set, set_len);
+ } else {
+ set_ = grn_table_create_for_group(ctx, NULL, 0, NULL,
+ gkeys[0].key, table_, 0);
+ }
+ if (set_) {
+ if (GRN_TEXT_LEN(VAR(3))) {
+ uint32_t gap = grn_atoui(GRN_TEXT_VALUE(VAR(3)),
+ GRN_BULK_CURR(VAR(3)), NULL);
+ grn_table_group_with_range_gap(ctx, table_, gkeys, set_, gap);
+ } else {
+ grn_table_group_result g = {
+ set_, 0, 0, 1,
+ GRN_TABLE_GROUP_CALC_COUNT, 0
+ };
+ grn_table_group(ctx, table_, gkeys, 1, &g, 1);
+ }
+ }
+ grn_table_sort_key_close(ctx, gkeys, ngkeys);
+ }
+ }
+ grn_output_table_name_or_id(ctx, set_);
+ return NULL;
+}
+
+#define DEFAULT_LIMIT 10
+
+static grn_obj *
+command_sort(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ const char *table = GRN_TEXT_VALUE(VAR(0));
+ unsigned int table_len = GRN_TEXT_LEN(VAR(0));
+ const char *keys = GRN_TEXT_VALUE(VAR(1));
+ unsigned int keys_len = GRN_TEXT_LEN(VAR(1));
+ int offset = GRN_TEXT_LEN(VAR(2))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(2)), GRN_BULK_CURR(VAR(2)), NULL)
+ : 0;
+ int limit = GRN_TEXT_LEN(VAR(3))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(3)), GRN_BULK_CURR(VAR(3)), NULL)
+ : DEFAULT_LIMIT;
+ grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len);
+ grn_obj *sorted = NULL;
+ if (table_) {
+ uint32_t nkeys;
+ grn_table_sort_key *keys_;
+ if (keys_len &&
+ (keys_ = grn_table_sort_key_from_str(ctx, keys, keys_len,
+ table_, &nkeys))) {
+ if ((sorted = grn_table_create(ctx, NULL, 0, NULL,
+ GRN_OBJ_TABLE_NO_KEY, NULL, table_))) {
+ int table_size = (int)grn_table_size(ctx, table_);
+ grn_normalize_offset_and_limit(ctx, table_size, &offset, &limit);
+ grn_table_sort(ctx, table_, offset, limit, sorted, keys_, nkeys);
+ grn_table_sort_key_close(ctx, keys_, nkeys);
+ }
+ }
+ }
+ grn_output_table_name_or_id(ctx, sorted);
+ return NULL;
+}
+
+static grn_obj *
+command_output(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ const char *table = GRN_TEXT_VALUE(VAR(0));
+ unsigned int table_len = GRN_TEXT_LEN(VAR(0));
+ const char *columns = GRN_TEXT_VALUE(VAR(1));
+ unsigned int columns_len = GRN_TEXT_LEN(VAR(1));
+ int offset = GRN_TEXT_LEN(VAR(2))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(2)), GRN_BULK_CURR(VAR(2)), NULL)
+ : 0;
+ int limit = GRN_TEXT_LEN(VAR(3))
+ ? grn_atoi(GRN_TEXT_VALUE(VAR(3)), GRN_BULK_CURR(VAR(3)), NULL)
+ : DEFAULT_LIMIT;
+ grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len);
+ if (table_) {
+ grn_obj_format format;
+ int table_size = (int)grn_table_size(ctx, table_);
+ GRN_OBJ_FORMAT_INIT(&format, table_size, 0, limit, offset);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES|
+ GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET;
+ /* TODO: accept only comma separated expr as columns */
+ grn_obj_columns(ctx, table_, columns, columns_len, &format.columns);
+ GRN_OUTPUT_OBJ(table_, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ return NULL;
+}
+
+static grn_obj *
+command_each(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ const char *table = GRN_TEXT_VALUE(VAR(0));
+ unsigned int table_len = GRN_TEXT_LEN(VAR(0));
+ const char *expr = GRN_TEXT_VALUE(VAR(1));
+ unsigned int expr_len = GRN_TEXT_LEN(VAR(1));
+ grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len);
+ if (table_) {
+ grn_obj *v, *expr_;
+ GRN_EXPR_CREATE_FOR_QUERY(ctx, table_, expr_, v);
+ if (expr_ && v) {
+ grn_table_cursor *tc;
+ grn_expr_parse(ctx, expr_, expr, expr_len,
+ NULL, GRN_OP_MATCH, GRN_OP_AND,
+ GRN_EXPR_SYNTAX_SCRIPT|GRN_EXPR_ALLOW_UPDATE);
+ if ((tc = grn_table_cursor_open(ctx, table_, NULL, 0,
+ NULL, 0, 0, -1, 0))) {
+ grn_id id;
+ while ((id = grn_table_cursor_next(ctx, tc)) != GRN_ID_NIL) {
+ GRN_RECORD_SET(ctx, v, id);
+ grn_expr_exec(ctx, expr_, 0);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ grn_obj_unlink(ctx, expr_);
+ }
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+command_unlink(grn_ctx *ctx, int nargs, grn_obj **args,
+ grn_user_data *user_data)
+{
+ const char *table = GRN_TEXT_VALUE(VAR(0));
+ unsigned int table_len = GRN_TEXT_LEN(VAR(0));
+ grn_obj *table_ = grn_ctx_get_table_by_name_or_id(ctx, table, table_len);
+ if (table_) {
+ grn_obj_unlink(ctx, table_);
+ }
+ GRN_OUTPUT_BOOL(!ctx->rc);
+ return NULL;
+}
+
+static grn_obj *
+command_add(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_load_(ctx, GRN_CONTENT_JSON,
+ GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ NULL, 0,
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
+ NULL, 0, NULL, 0, 0);
+ GRN_OUTPUT_BOOL(ctx->impl->loader.nrecords);
+ if (ctx->impl->loader.table) {
+ grn_db_touch(ctx, DB_OBJ(ctx->impl->loader.table)->db);
+ }
+ return NULL;
+}
+
+static grn_obj *
+command_set(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ int table_name_len = GRN_TEXT_LEN(VAR(0));
+ const char *table_name = GRN_TEXT_VALUE(VAR(0));
+ grn_obj *table = grn_ctx_get(ctx, table_name, table_name_len);
+ if (table) {
+ grn_id id = GRN_ID_NIL;
+ int key_len = GRN_TEXT_LEN(VAR(2));
+ int id_len = GRN_TEXT_LEN(VAR(5));
+ if (key_len) {
+ const char *key = GRN_TEXT_VALUE(VAR(2));
+ id = grn_table_get(ctx, table, key, key_len);
+ } else {
+ if (id_len) {
+ id = grn_atoui(GRN_TEXT_VALUE(VAR(5)), GRN_BULK_CURR(VAR(5)), NULL);
+ }
+ id = grn_table_at(ctx, table, id);
+ }
+ if (id) {
+ grn_obj obj;
+ grn_obj_format format;
+ GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id);
+ GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0);
+ GRN_RECORD_SET(ctx, &obj, id);
+ grn_obj_columns(ctx, table,
+ GRN_TEXT_VALUE(VAR(4)),
+ GRN_TEXT_LEN(VAR(4)), &format.columns);
+ format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */;
+ GRN_OUTPUT_OBJ(&obj, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "nonexistent table name: <%.*s>", table_name_len, table_name);
+ }
+ return NULL;
+}
+
+static grn_rc
+command_get_resolve_parameters(grn_ctx *ctx, grn_user_data *user_data,
+ grn_obj **table, grn_id *id)
+{
+ const char *table_text, *id_text, *key_text;
+ int table_length, id_length, key_length;
+
+ table_text = GRN_TEXT_VALUE(VAR(0));
+ table_length = GRN_TEXT_LEN(VAR(0));
+ if (table_length == 0) {
+ ERR(GRN_INVALID_ARGUMENT, "[table][get] table isn't specified");
+ return ctx->rc;
+ }
+
+ *table = grn_ctx_get(ctx, table_text, table_length);
+ if (!*table) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] table doesn't exist: <%.*s>", table_length, table_text);
+ return ctx->rc;
+ }
+
+ key_text = GRN_TEXT_VALUE(VAR(1));
+ key_length = GRN_TEXT_LEN(VAR(1));
+ id_text = GRN_TEXT_VALUE(VAR(3));
+ id_length = GRN_TEXT_LEN(VAR(3));
+ switch ((*table)->header.type) {
+ case GRN_TABLE_NO_KEY:
+ if (key_length) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] should not specify key for NO_KEY table: <%.*s>: "
+ "table: <%.*s>",
+ key_length, key_text,
+ table_length, table_text);
+ return ctx->rc;
+ }
+ if (id_length) {
+ const char *rest = NULL;
+ *id = grn_atoi(id_text, id_text + id_length, &rest);
+ if (rest == id_text) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] ID should be a number: <%.*s>: table: <%.*s>",
+ id_length, id_text,
+ table_length, table_text);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] ID isn't specified: table: <%.*s>",
+ table_length, table_text);
+ }
+ break;
+ case GRN_TABLE_HASH_KEY:
+ case GRN_TABLE_PAT_KEY:
+ case GRN_TABLE_DAT_KEY:
+ if (key_length && id_length) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] should not specify both key and ID: "
+ "key: <%.*s>: ID: <%.*s>: table: <%.*s>",
+ key_length, key_text,
+ id_length, id_text,
+ table_length, table_text);
+ return ctx->rc;
+ }
+ if (key_length) {
+ *id = grn_table_get(ctx, *table, key_text, key_length);
+ if (!*id) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] nonexistent key: <%.*s>: table: <%.*s>",
+ key_length, key_text,
+ table_length, table_text);
+ }
+ } else {
+ if (id_length) {
+ const char *rest = NULL;
+ *id = grn_atoi(id_text, id_text + id_length, &rest);
+ if (rest == id_text) {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] ID should be a number: <%.*s>: table: <%.*s>",
+ id_length, id_text,
+ table_length, table_text);
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] key nor ID isn't specified: table: <%.*s>",
+ table_length, table_text);
+ }
+ }
+ break;
+ default:
+ ERR(GRN_INVALID_ARGUMENT,
+ "[table][get] not a table: <%.*s>", table_length, table_text);
+ break;
+ }
+
+ return ctx->rc;
+}
+
+static grn_obj *
+command_get(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_id id = GRN_ID_NIL;
+ grn_obj *table = NULL;
+ if (!command_get_resolve_parameters(ctx, user_data, &table, &id)) {
+ grn_obj obj;
+ grn_obj_format format;
+ GRN_OUTPUT_ARRAY_OPEN("RESULT", 2);
+ GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id);
+ GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0);
+ GRN_RECORD_SET(ctx, &obj, id);
+ grn_obj_columns(ctx, table, GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)),
+ &format.columns);
+ format.flags =
+ GRN_OBJ_FORMAT_WITH_COLUMN_NAMES |
+ GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET;
+ GRN_OUTPUT_OBJ(&obj, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ GRN_OUTPUT_ARRAY_CLOSE();
+ }
+ return NULL;
+}
+
+static grn_obj *
+command_push(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_NO_KEY:
+ {
+ grn_array *array = (grn_array *)table;
+ grn_table_queue *queue = grn_array_queue(ctx, array);
+ if (queue) {
+ MUTEX_LOCK(queue->mutex);
+ if (grn_table_queue_head(queue) == queue->cap) {
+ grn_array_clear_curr_rec(ctx, array);
+ }
+ grn_load_(ctx, GRN_CONTENT_JSON,
+ GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ NULL, 0,
+ GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
+ NULL, 0, NULL, 0, 0);
+ if (grn_table_queue_size(queue) == queue->cap) {
+ grn_table_queue_tail_increment(queue);
+ }
+ grn_table_queue_head_increment(queue);
+ COND_SIGNAL(queue->cond);
+ MUTEX_UNLOCK(queue->mutex);
+ GRN_OUTPUT_BOOL(ctx->impl->loader.nrecords);
+ if (ctx->impl->loader.table) {
+ grn_db_touch(ctx, DB_OBJ(ctx->impl->loader.table)->db);
+ }
+ } else {
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "table '%.*s' doesn't support push",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ }
+ break;
+ default :
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "table '%.*s' doesn't support push",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "table '%.*s' does not exist.",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ return NULL;
+}
+
+static grn_obj *
+command_pull(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_obj *table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)));
+ if (table) {
+ switch (table->header.type) {
+ case GRN_TABLE_NO_KEY:
+ {
+ grn_array *array = (grn_array *)table;
+ grn_table_queue *queue = grn_array_queue(ctx, array);
+ if (queue) {
+ MUTEX_LOCK(queue->mutex);
+ while (grn_table_queue_size(queue) == 0) {
+ if (GRN_TEXT_LEN(VAR(2))) {
+ MUTEX_UNLOCK(queue->mutex);
+ GRN_OUTPUT_BOOL(0);
+ return NULL;
+ }
+ COND_WAIT(queue->cond, queue->mutex);
+ }
+ grn_table_queue_tail_increment(queue);
+ {
+ grn_obj obj;
+ grn_obj_format format;
+ GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id);
+ GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0);
+ GRN_RECORD_SET(ctx, &obj, grn_table_queue_tail(queue));
+ grn_obj_columns(ctx, table, GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
+ &format.columns);
+ format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */;
+ GRN_OUTPUT_OBJ(&obj, &format);
+ GRN_OBJ_FORMAT_FIN(ctx, &format);
+ }
+ MUTEX_UNLOCK(queue->mutex);
+ } else {
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "table '%.*s' doesn't support pull",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ }
+ break;
+ default :
+ ERR(GRN_OPERATION_NOT_SUPPORTED, "table '%.*s' doesn't support pull",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ } else {
+ ERR(GRN_INVALID_ARGUMENT, "table '%.*s' does not exist.",
+ (int)GRN_TEXT_LEN(VAR(0)), GRN_TEXT_VALUE(VAR(0)));
+ }
+ return NULL;
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_expr_var vars[18];
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "expression", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "result_set", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "set_operation", -1);
+ grn_plugin_expr_var_init(ctx, &vars[4], "allow_update", -1);
+ grn_plugin_command_create(ctx, "filter_by_script", -1, command_filter_by_script, 5, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "column", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "operator", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "value", -1);
+ grn_plugin_expr_var_init(ctx, &vars[4], "result_set", -1);
+ grn_plugin_expr_var_init(ctx, &vars[5], "set_operation", -1);
+ grn_plugin_command_create(ctx, "filter", -1, command_filter, 6, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "key", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "result_set", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "range_gap", -1);
+ grn_plugin_command_create(ctx, "group", -1, command_group, 4, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "keys", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "offset", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "limit", -1);
+ grn_plugin_command_create(ctx, "sort", -1, command_sort, 4, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "offset", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "limit", -1);
+ grn_plugin_command_create(ctx, "output", -1, command_output, 4, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "expression", -1);
+ grn_plugin_command_create(ctx, "each", -1, command_each, 2, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_command_create(ctx, "unlink", -1, command_unlink, 1, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "values", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "key", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[4], "output_columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[5], "id", -1);
+ grn_plugin_command_create(ctx, "add", -1, command_add, 2, vars);
+ grn_plugin_command_create(ctx, "push", -1, command_push, 2, vars);
+ grn_plugin_command_create(ctx, "set", -1, command_set, 6, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "key", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "output_columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "id", -1);
+ grn_plugin_command_create(ctx, "get", -1, command_get, 4, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "output_columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "non_block", -1);
+ grn_plugin_command_create(ctx, "pull", -1, command_pull, 3, vars);
+
+ grn_plugin_expr_var_init(ctx, &vars[0], "table", -1);
+ grn_plugin_expr_var_init(ctx, &vars[1], "columns", -1);
+ grn_plugin_expr_var_init(ctx, &vars[2], "query", -1);
+ grn_plugin_expr_var_init(ctx, &vars[3], "result_set", -1);
+ grn_plugin_expr_var_init(ctx, &vars[4], "set_operation", -1);
+ grn_plugin_expr_var_init(ctx, &vars[5], "allow_column_expression", -1);
+ grn_plugin_expr_var_init(ctx, &vars[6], "allow_pragma", -1);
+ grn_plugin_command_create(ctx, "match", -1, command_match, 7, vars);
+
+ return ctx->rc;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/token_filters/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/token_filters/CMakeLists.txt
new file mode 100644
index 00000000000..9ffe53d2e8d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/token_filters/CMakeLists.txt
@@ -0,0 +1,34 @@
+# Copyright(C) 2014 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ )
+
+set(TOKEN_FILTERS_DIR "${GRN_RELATIVE_PLUGINS_DIR}/token_filters")
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/stop_word_sources.am
+ STOP_WORD_SOURCES)
+add_library(stop_word_token_filter MODULE ${STOP_WORD_SOURCES})
+set_source_files_properties(${STOP_WORD_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+set_target_properties(stop_word_token_filter PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "stop_word")
+target_link_libraries(stop_word_token_filter libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS stop_word_token_filter DESTINATION "${TOKEN_FILTERS_DIR}")
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/token_filters/Makefile.am b/storage/mroonga/vendor/groonga/plugins/token_filters/Makefile.am
new file mode 100644
index 00000000000..8d77466f053
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/token_filters/Makefile.am
@@ -0,0 +1,20 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la
+
+token_filter_plugins_LTLIBRARIES =
+token_filter_plugins_LTLIBRARIES += stop_word.la
+
+include stop_word_sources.am
diff --git a/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word.c b/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word.c
new file mode 100644
index 00000000000..21451f00b25
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word.c
@@ -0,0 +1,150 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <str.h>
+
+#include <groonga.h>
+#include <groonga/token_filter.h>
+
+#include <string.h>
+
+#define COLUMN_NAME "is_stop_word"
+
+typedef struct {
+ grn_obj *table;
+ grn_token_mode mode;
+ grn_obj *column;
+ grn_obj value;
+ grn_tokenizer_token token;
+} grn_stop_word_token_filter;
+
+static void *
+stop_word_init(grn_ctx *ctx, grn_obj *table, grn_token_mode mode)
+{
+ grn_stop_word_token_filter *token_filter;
+
+ token_filter = GRN_PLUGIN_MALLOC(ctx, sizeof(grn_stop_word_token_filter));
+ if (!token_filter) {
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[token-filter][stop-word] "
+ "failed to allocate grn_stop_word_token_filter");
+ return NULL;
+ }
+
+ token_filter->table = table;
+ token_filter->mode = mode;
+ token_filter->column = grn_obj_column(ctx,
+ token_filter->table,
+ COLUMN_NAME,
+ strlen(COLUMN_NAME));
+ if (!token_filter->column) {
+ char table_name[GRN_TABLE_MAX_KEY_SIZE];
+ unsigned int table_name_size;
+
+ table_name_size = grn_obj_name(ctx,
+ token_filter->table,
+ table_name,
+ GRN_TABLE_MAX_KEY_SIZE);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKEN_FILTER_ERROR,
+ "[token-filter][stop-word] "
+ "column for judging stop word doesn't exit: <%.*s.%s>",
+ table_name_size,
+ table_name,
+ COLUMN_NAME);
+ GRN_PLUGIN_FREE(ctx, token_filter);
+ return NULL;
+ }
+
+ GRN_BOOL_INIT(&(token_filter->value), 0);
+ grn_tokenizer_token_init(ctx, &(token_filter->token));
+
+ return token_filter;
+}
+
+static void
+stop_word_filter(grn_ctx *ctx,
+ grn_token *current_token,
+ grn_token *next_token,
+ void *user_data)
+{
+ grn_stop_word_token_filter *token_filter = user_data;
+
+ if (token_filter->mode == GRN_TOKEN_GET) {
+ grn_id id;
+ grn_obj *data;
+
+ data = grn_token_get_data(ctx, current_token);
+ id = grn_table_get(ctx,
+ token_filter->table,
+ GRN_TEXT_VALUE(data),
+ GRN_TEXT_LEN(data));
+ if (id != GRN_ID_NIL) {
+ GRN_BULK_REWIND(&(token_filter->value));
+ grn_obj_get_value(ctx,
+ token_filter->column,
+ id,
+ &(token_filter->value));
+ if (GRN_BOOL_VALUE(&(token_filter->value))) {
+ grn_tokenizer_status status;
+ status = grn_token_get_status(ctx, current_token);
+ status |= GRN_TOKENIZER_TOKEN_SKIP;
+ grn_token_set_status(ctx, next_token, status);
+ }
+ }
+ }
+}
+
+static void
+stop_word_fin(grn_ctx *ctx, void *user_data)
+{
+ grn_stop_word_token_filter *token_filter = user_data;
+ if (!token_filter) {
+ return;
+ }
+
+ grn_tokenizer_token_fin(ctx, &(token_filter->token));
+ grn_obj_unlink(ctx, token_filter->column);
+ grn_obj_unlink(ctx, &(token_filter->value));
+ GRN_PLUGIN_FREE(ctx, token_filter);
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ return ctx->rc;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_rc rc;
+
+ rc = grn_token_filter_register(ctx,
+ "TokenFilterStopWord", -1,
+ stop_word_init,
+ stop_word_filter,
+ stop_word_fin);
+
+ return rc;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word_sources.am b/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word_sources.am
new file mode 100644
index 00000000000..bab89551826
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/token_filters/stop_word_sources.am
@@ -0,0 +1,2 @@
+stop_word_la_SOURCES = \
+ stop_word.c
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/CMakeLists.txt b/storage/mroonga/vendor/groonga/plugins/tokenizers/CMakeLists.txt
new file mode 100644
index 00000000000..e044c1fbb93
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ )
+
+set(TOKENIZERS_DIR "${GRN_RELATIVE_PLUGINS_DIR}/tokenizers")
+if(GRN_WITH_MECAB)
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/mecab_sources.am MECAB_SOURCES)
+ include_directories(${MECAB_INCLUDE_DIRS})
+ link_directories(${MECAB_LIBRARY_DIRS})
+ add_library(mecab_tokenizer MODULE ${MECAB_SOURCES})
+ set_source_files_properties(${MECAB_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ set_target_properties(mecab_tokenizer PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "mecab")
+ target_link_libraries(mecab_tokenizer libgroonga ${MECAB_LIBRARIES})
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS mecab_tokenizer DESTINATION "${TOKENIZERS_DIR}")
+ endif()
+endif()
+
+if(GRN_WITH_KYTEA)
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/kytea_sources.am KYTEA_SOURCES)
+ include_directories(${KYTEA_INCLUDE_DIRS})
+ link_directories(${KYTEA_LIBRARY_DIRS})
+ add_library(kytea_tokenizer MODULE ${KYTEA_SOURCES})
+ set_source_files_properties(${KYTEA_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_CXX_COMPILE_FLAGS}")
+ set_target_properties(kytea_tokenizer PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "kytea")
+ target_link_libraries(kytea_tokenizer libgroonga ${KYTEA_LIBRARIES})
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS kytea_tokenizer DESTINATION "${TOKENIZERS_DIR}")
+ endif()
+endif()
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/Makefile.am b/storage/mroonga/vendor/groonga/plugins/tokenizers/Makefile.am
new file mode 100644
index 00000000000..386b1554f73
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/Makefile.am
@@ -0,0 +1,33 @@
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CPPFLAGS = \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(top_builddir)/lib/libgroonga.la
+
+tokenizers_plugins_LTLIBRARIES =
+if WITH_MECAB
+tokenizers_plugins_LTLIBRARIES += mecab.la
+endif
+if WITH_KYTEA
+tokenizers_plugins_LTLIBRARIES += kytea.la
+endif
+
+include mecab_sources.am
+mecab_la_CPPFLAGS = $(AM_CPPFLAGS) $(MECAB_CPPFLAGS)
+mecab_la_LIBADD = $(LIBS) $(MECAB_LIBS)
+mecab_la_LDFLAGS = $(AM_LDFLAGS) $(MECAB_LDFLAGS)
+
+include kytea_sources.am
+kytea_la_CPPFLAGS = $(AM_CPPFLAGS) $(KYTEA_CFLAGS)
+kytea_la_LIBADD = $(LIBS) $(KYTEA_LIBS)
+kytea_la_LDFLAGS = $(AM_LDFLAGS) $(KYTEA_LDFLAGS)
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea.cpp b/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea.cpp
new file mode 100644
index 00000000000..a7ee4104592
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea.cpp
@@ -0,0 +1,354 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <groonga/tokenizer.h>
+
+#include <kytea/kytea.h>
+#include <kytea/string-util.h>
+
+#include <string.h>
+
+#include <string>
+#include <vector>
+
+namespace {
+
+grn_plugin_mutex *kytea_mutex = NULL;
+kytea::KyteaConfig *kytea_config = NULL;
+kytea::Kytea *kytea_tagger = NULL;
+kytea::StringUtil *kytea_util = NULL;
+
+void kytea_init(grn_ctx *ctx);
+void kytea_fin(grn_ctx *ctx);
+
+void kytea_init(grn_ctx *ctx) {
+ if (kytea_mutex || kytea_config || kytea_tagger || kytea_util) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "TokenKytea is already initialized");
+ return;
+ }
+
+ kytea_mutex = grn_plugin_mutex_open(ctx);
+ if (!kytea_mutex) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][kytea] "
+ "grn_plugin_mutex_open() failed");
+ return;
+ }
+
+ kytea::KyteaConfig * const config = static_cast<kytea::KyteaConfig *>(
+ GRN_PLUGIN_MALLOC(ctx, sizeof(kytea::KyteaConfig)));
+ if (!config) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][kytea] "
+ "memory allocation to kytea::KyteaConfig failed");
+ return;
+ }
+
+ try {
+ new (config) kytea::KyteaConfig;
+ kytea_config = config;
+ try {
+ kytea_config->setDebug(0);
+ kytea_config->setOnTraining(false);
+ kytea_config->parseRunCommandLine(0, NULL);
+ } catch (...) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "kytea::KyteaConfig settings failed");
+ return;
+ }
+ } catch (...) {
+ GRN_PLUGIN_FREE(ctx, config);
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "kytea::KyteaConfig initialization failed");
+ return;
+ }
+
+ kytea::Kytea * const tagger = static_cast<kytea::Kytea *>(
+ GRN_PLUGIN_MALLOC(ctx, sizeof(kytea::Kytea)));
+ if (!tagger) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][kytea] "
+ "memory allocation to kytea::Kytea failed");
+ return;
+ }
+
+ try {
+ new (tagger) kytea::Kytea;
+ kytea_tagger = tagger;
+ try {
+ kytea_tagger->readModel(kytea_config->getModelFile().c_str());
+ } catch (...) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "kytea::Kytea::readModel() failed");
+ return;
+ }
+ } catch (...) {
+ GRN_PLUGIN_FREE(ctx, tagger);
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "kytea::Kytea initialization failed");
+ return;
+ }
+
+ try {
+ kytea_util = kytea_tagger->getStringUtil();
+ } catch (...) {
+ kytea_fin(ctx);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "kytea::Kytea::getStringUtil() failed");
+ return;
+ }
+}
+
+void kytea_fin(grn_ctx *ctx) {
+ kytea_util = NULL;
+
+ if (kytea_tagger) {
+ kytea_tagger->~Kytea();
+ GRN_PLUGIN_FREE(ctx, kytea_tagger);
+ kytea_tagger = NULL;
+ }
+
+ if (kytea_config) {
+ kytea_config->~KyteaConfig();
+ GRN_PLUGIN_FREE(ctx, kytea_config);
+ kytea_config = NULL;
+ }
+
+ if (kytea_mutex) {
+ grn_plugin_mutex_close(ctx, kytea_mutex);
+ kytea_mutex = NULL;
+ }
+}
+
+struct grn_tokenizer_kytea {
+ grn_tokenizer_query *query;
+ kytea::KyteaSentence sentence;
+ std::vector<std::string> tokens;
+ std::size_t id;
+ grn_tokenizer_token token;
+ const char *rest_query_string;
+ unsigned int rest_query_string_length;
+
+ grn_tokenizer_kytea() :
+ query(NULL),
+ sentence(),
+ tokens(),
+ id(0),
+ token(),
+ rest_query_string(NULL)
+ {
+ }
+ ~grn_tokenizer_kytea() {}
+};
+
+void grn_tokenizer_kytea_init(grn_ctx *ctx, grn_tokenizer_kytea *tokenizer) {
+ new (tokenizer) grn_tokenizer_kytea;
+ grn_tokenizer_token_init(ctx, &tokenizer->token);
+}
+
+void grn_tokenizer_kytea_fin(grn_ctx *ctx, grn_tokenizer_kytea *tokenizer) {
+ grn_tokenizer_token_fin(ctx, &tokenizer->token);
+ if (tokenizer->query) {
+ grn_tokenizer_query_close(ctx, tokenizer->query);
+ }
+ tokenizer->~grn_tokenizer_kytea();
+}
+
+grn_obj *grn_kytea_init(grn_ctx *ctx, int num_args, grn_obj **args,
+ grn_user_data *user_data) {
+ unsigned int normalizer_flags = 0;
+ grn_tokenizer_query * const query =
+ grn_tokenizer_query_open(ctx, num_args, args, normalizer_flags);
+ if (!query) {
+ return NULL;
+ }
+
+ grn_tokenizer_kytea * const tokenizer = static_cast<grn_tokenizer_kytea *>(
+ GRN_PLUGIN_MALLOC(ctx, sizeof(grn_tokenizer_kytea)));
+ if (!tokenizer) {
+ grn_tokenizer_query_close(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][kytea] "
+ "memory allocation to grn_tokenizer_kytea failed");
+ return NULL;
+ }
+
+ try {
+ grn_tokenizer_kytea_init(ctx, tokenizer);
+ } catch (...) {
+ grn_tokenizer_query_close(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "tokenizer initialization failed");
+ return NULL;
+ }
+
+ tokenizer->query = query;
+
+ grn_obj *normalized_query = query->normalized_query;
+ const char *normalized_string;
+ unsigned int normalized_string_length;
+ grn_string_get_normalized(ctx,
+ normalized_query,
+ &normalized_string,
+ &normalized_string_length,
+ NULL);
+ if (tokenizer->query->have_tokenized_delimiter) {
+ tokenizer->rest_query_string = normalized_string;
+ tokenizer->rest_query_string_length = normalized_string_length;
+ } else {
+ grn_plugin_mutex_lock(ctx, kytea_mutex);
+ try {
+ const std::string str(normalized_string, normalized_string_length);
+ const kytea::KyteaString &surface_str = kytea_util->mapString(str);
+ const kytea::KyteaString &normalized_str = kytea_util->normalize(surface_str);
+ tokenizer->sentence = kytea::KyteaSentence(surface_str, normalized_str);
+ kytea_tagger->calculateWS(tokenizer->sentence);
+ } catch (...) {
+ grn_plugin_mutex_unlock(ctx, kytea_mutex);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "tokenization failed");
+ return NULL;
+ }
+ grn_plugin_mutex_unlock(ctx, kytea_mutex);
+
+ try {
+ for (std::size_t i = 0; i < tokenizer->sentence.words.size(); ++i) {
+ const std::string &token =
+ kytea_util->showString(tokenizer->sentence.words[i].surface);
+ const char *ptr = token.c_str();
+ unsigned int left = static_cast<unsigned int>(token.length());
+ while (left > 0) {
+ const int char_length =
+ grn_tokenizer_charlen(ctx, ptr, left, query->encoding);
+ if ((char_length == 0) ||
+ (grn_tokenizer_isspace(ctx, ptr, left, query->encoding) != 0)) {
+ break;
+ }
+ ptr += char_length;
+ left -= char_length;
+ }
+ if (left == 0) {
+ tokenizer->tokens.push_back(token);
+ }
+ }
+ } catch (...) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][kytea] "
+ "adjustment failed");
+ return NULL;
+ }
+ }
+
+ user_data->ptr = tokenizer;
+ return NULL;
+}
+
+grn_obj *grn_kytea_next(grn_ctx *ctx, int num_args, grn_obj **args,
+ grn_user_data *user_data) {
+ grn_tokenizer_kytea * const tokenizer =
+ static_cast<grn_tokenizer_kytea *>(user_data->ptr);
+
+ if (tokenizer->query->have_tokenized_delimiter) {
+ unsigned int rest_query_string_length =
+ tokenizer->rest_query_string_length;
+ const char *rest_query_string =
+ grn_tokenizer_tokenized_delimiter_next(ctx,
+ &(tokenizer->token),
+ tokenizer->rest_query_string,
+ rest_query_string_length,
+ tokenizer->query->encoding);
+ if (rest_query_string) {
+ tokenizer->rest_query_string_length -=
+ rest_query_string - tokenizer->rest_query_string;
+ }
+ tokenizer->rest_query_string = rest_query_string;
+ } else {
+ const grn_tokenizer_status status =
+ ((tokenizer->id + 1) < tokenizer->tokens.size()) ?
+ GRN_TOKENIZER_CONTINUE : GRN_TOKENIZER_LAST;
+ if (tokenizer->id < tokenizer->tokens.size()) {
+ const std::string &token = tokenizer->tokens[tokenizer->id++];
+ grn_tokenizer_token_push(ctx, &tokenizer->token,
+ token.c_str(), token.length(), status);
+ } else {
+ grn_tokenizer_token_push(ctx, &tokenizer->token, "", 0, status);
+ }
+ }
+
+ return NULL;
+}
+
+grn_obj *grn_kytea_fin(grn_ctx *ctx, int num_args, grn_obj **args,
+ grn_user_data *user_data) {
+ grn_tokenizer_kytea * const tokenizer =
+ static_cast<grn_tokenizer_kytea *>(user_data->ptr);
+ if (tokenizer) {
+ grn_tokenizer_kytea_fin(ctx, tokenizer);
+ GRN_PLUGIN_FREE(ctx, tokenizer);
+ }
+ return NULL;
+}
+
+} // namespace
+
+extern "C" {
+
+/*
+ GRN_PLUGIN_INIT() is called to initialize this plugin. Note that an error
+ code must be set in `ctx->rc' on failure.
+ */
+grn_rc GRN_PLUGIN_INIT(grn_ctx *ctx) {
+ kytea_init(ctx);
+ return ctx->rc;
+}
+
+/*
+ GRN_PLUGIN_REGISTER() registers this plugin to the database associated with
+ `ctx'. The registration requires the plugin name and the functions to be
+ called for tokenization.
+ */
+grn_rc GRN_PLUGIN_REGISTER(grn_ctx *ctx) {
+ return grn_tokenizer_register(ctx, "TokenKytea", 10, grn_kytea_init,
+ grn_kytea_next, grn_kytea_fin);
+}
+
+/*
+ GRN_PLUGIN_FIN() is called to finalize the plugin that was initialized by
+ GRN_PLUGIN_INIT().
+ */
+grn_rc GRN_PLUGIN_FIN(grn_ctx *ctx) {
+ kytea_fin(ctx);
+ return GRN_SUCCESS;
+}
+
+} // extern "C"
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea_sources.am b/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea_sources.am
new file mode 100644
index 00000000000..182f38577e3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/kytea_sources.am
@@ -0,0 +1,2 @@
+kytea_la_SOURCES = \
+ kytea.cpp
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab.c b/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab.c
new file mode 100644
index 00000000000..4ac99f9a9e8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab.c
@@ -0,0 +1,338 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <str.h>
+
+#include <groonga.h>
+#include <groonga/tokenizer.h>
+
+#include <mecab.h>
+
+#include <string.h>
+#include <ctype.h>
+
+static mecab_t *sole_mecab = NULL;
+static grn_plugin_mutex *sole_mecab_mutex = NULL;
+static grn_encoding sole_mecab_encoding = GRN_ENC_NONE;
+
+typedef struct {
+ mecab_t *mecab;
+ grn_obj buf;
+ const char *next;
+ const char *end;
+ grn_tokenizer_query *query;
+ grn_tokenizer_token token;
+} grn_mecab_tokenizer;
+
+static grn_encoding
+translate_mecab_charset_to_grn_encoding(const char *charset)
+{
+ if (strcasecmp(charset, "euc-jp") == 0) {
+ return GRN_ENC_EUC_JP;
+ } else if (strcasecmp(charset, "utf-8") == 0 ||
+ strcasecmp(charset, "utf8") == 0) {
+ return GRN_ENC_UTF8;
+ } else if (strcasecmp(charset, "shift_jis") == 0 ||
+ strcasecmp(charset, "shift-jis") == 0 ||
+ strcasecmp(charset, "sjis") == 0) {
+ return GRN_ENC_SJIS;
+ }
+ return GRN_ENC_NONE;
+}
+
+static grn_encoding
+get_mecab_encoding(mecab_t *mecab)
+{
+ grn_encoding encoding = GRN_ENC_NONE;
+ const mecab_dictionary_info_t *dictionary_info;
+ dictionary_info = mecab_dictionary_info(mecab);
+ if (dictionary_info) {
+ const char *charset = dictionary_info->charset;
+ encoding = translate_mecab_charset_to_grn_encoding(charset);
+ }
+ return encoding;
+}
+
+/*
+ This function is called for a full text search query or a document to be
+ indexed. This means that both short/long strings are given.
+ The return value of this function is ignored. When an error occurs in this
+ function, `ctx->rc' is overwritten with an error code (not GRN_SUCCESS).
+ */
+static grn_obj *
+mecab_init(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ const char *s;
+ grn_mecab_tokenizer *tokenizer;
+ unsigned int normalizer_flags = 0;
+ grn_tokenizer_query *query;
+ grn_obj *normalized_query;
+ const char *normalized_string;
+ unsigned int normalized_string_length;
+
+ query = grn_tokenizer_query_open(ctx, nargs, args, normalizer_flags);
+ if (!query) {
+ return NULL;
+ }
+ if (!sole_mecab) {
+ grn_plugin_mutex_lock(ctx, sole_mecab_mutex);
+ if (!sole_mecab) {
+ sole_mecab = mecab_new2("-Owakati");
+ if (!sole_mecab) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][mecab] "
+ "mecab_new2() failed on mecab_init(): %s",
+ mecab_strerror(NULL));
+ } else {
+ sole_mecab_encoding = get_mecab_encoding(sole_mecab);
+ }
+ }
+ grn_plugin_mutex_unlock(ctx, sole_mecab_mutex);
+ }
+ if (!sole_mecab) {
+ grn_tokenizer_query_close(ctx, query);
+ return NULL;
+ }
+
+ if (query->encoding != sole_mecab_encoding) {
+ grn_tokenizer_query_close(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][mecab] "
+ "MeCab dictionary charset (%s) does not match "
+ "the table encoding: <%s>",
+ grn_encoding_to_string(sole_mecab_encoding),
+ grn_encoding_to_string(query->encoding));
+ return NULL;
+ }
+
+ if (!(tokenizer = GRN_PLUGIN_MALLOC(ctx, sizeof(grn_mecab_tokenizer)))) {
+ grn_tokenizer_query_close(ctx, query);
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][mecab] "
+ "memory allocation to grn_mecab_tokenizer failed");
+ return NULL;
+ }
+ tokenizer->mecab = sole_mecab;
+ tokenizer->query = query;
+
+ normalized_query = query->normalized_query;
+ grn_string_get_normalized(ctx,
+ normalized_query,
+ &normalized_string,
+ &normalized_string_length,
+ NULL);
+ GRN_TEXT_INIT(&(tokenizer->buf), 0);
+ if (query->have_tokenized_delimiter) {
+ tokenizer->next = normalized_string;
+ tokenizer->end = tokenizer->next + normalized_string_length;
+ } else if (normalized_string_length == 0) {
+ tokenizer->next = "";
+ tokenizer->end = tokenizer->next;
+ } else {
+ grn_plugin_mutex_lock(ctx, sole_mecab_mutex);
+ s = mecab_sparse_tostr2(tokenizer->mecab,
+ normalized_string,
+ normalized_string_length);
+ if (!s) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][mecab] "
+ "mecab_sparse_tostr() failed len=%d err=%s",
+ normalized_string_length,
+ mecab_strerror(tokenizer->mecab));
+ } else {
+ GRN_TEXT_PUTS(ctx, &(tokenizer->buf), s);
+ }
+ grn_plugin_mutex_unlock(ctx, sole_mecab_mutex);
+ if (!s) {
+ grn_tokenizer_query_close(ctx, tokenizer->query);
+ GRN_PLUGIN_FREE(ctx, tokenizer);
+ return NULL;
+ }
+ {
+ char *buf, *p;
+ unsigned int bufsize;
+
+ buf = GRN_TEXT_VALUE(&(tokenizer->buf));
+ bufsize = GRN_TEXT_LEN(&(tokenizer->buf));
+ /* A certain version of mecab returns trailing lf or spaces. */
+ for (p = buf + bufsize - 2;
+ buf <= p && isspace(*(unsigned char *)p);
+ p--) { *p = '\0'; }
+ tokenizer->next = buf;
+ tokenizer->end = p + 1;
+ }
+ }
+ user_data->ptr = tokenizer;
+
+ grn_tokenizer_token_init(ctx, &(tokenizer->token));
+
+ return NULL;
+}
+
+/*
+ This function returns tokens one by one.
+ */
+static grn_obj *
+mecab_next(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ /* grn_obj *table = args[0]; */
+ grn_mecab_tokenizer *tokenizer = user_data->ptr;
+ grn_encoding encoding = tokenizer->query->encoding;
+
+ if (tokenizer->query->have_tokenized_delimiter) {
+ tokenizer->next =
+ grn_tokenizer_tokenized_delimiter_next(ctx,
+ &(tokenizer->token),
+ tokenizer->next,
+ tokenizer->end - tokenizer->next,
+ encoding);
+ } else {
+ size_t cl;
+ const char *p = tokenizer->next, *r;
+ const char *e = tokenizer->end;
+ grn_tokenizer_status status;
+
+ for (r = p; r < e; r += cl) {
+ if (!(cl = grn_charlen_(ctx, r, e, encoding))) {
+ tokenizer->next = e;
+ break;
+ }
+ if (grn_isspace(r, encoding)) {
+ const char *q = r;
+ while ((cl = grn_isspace(q, encoding))) { q += cl; }
+ tokenizer->next = q;
+ break;
+ }
+ }
+
+ if (r == e) {
+ status = GRN_TOKENIZER_LAST;
+ } else {
+ status = GRN_TOKENIZER_CONTINUE;
+ }
+ grn_tokenizer_token_push(ctx, &(tokenizer->token), p, r - p, status);
+ }
+
+ return NULL;
+}
+
+/*
+ This function finalizes a tokenization.
+ */
+static grn_obj *
+mecab_fin(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
+{
+ grn_mecab_tokenizer *tokenizer = user_data->ptr;
+ if (!tokenizer) {
+ return NULL;
+ }
+ grn_tokenizer_token_fin(ctx, &(tokenizer->token));
+ grn_tokenizer_query_close(ctx, tokenizer->query);
+ grn_obj_unlink(ctx, &(tokenizer->buf));
+ GRN_PLUGIN_FREE(ctx, tokenizer);
+ return NULL;
+}
+
+static void
+check_mecab_dictionary_encoding(grn_ctx *ctx)
+{
+#ifdef HAVE_MECAB_DICTIONARY_INFO_T
+ mecab_t *mecab;
+
+ mecab = mecab_new2("-Owakati");
+ if (mecab) {
+ grn_encoding encoding;
+ int have_same_encoding_dictionary = 0;
+
+ encoding = GRN_CTX_GET_ENCODING(ctx);
+ have_same_encoding_dictionary = encoding == get_mecab_encoding(mecab);
+ mecab_destroy(mecab);
+
+ if (!have_same_encoding_dictionary) {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][mecab] "
+ "MeCab has no dictionary that uses the context encoding"
+ ": <%s>",
+ grn_encoding_to_string(encoding));
+ }
+ } else {
+ GRN_PLUGIN_ERROR(ctx, GRN_TOKENIZER_ERROR,
+ "[tokenizer][mecab] "
+ "mecab_new2 failed in check_mecab_dictionary_encoding: %s",
+ mecab_strerror(NULL));
+ }
+#endif
+}
+
+/*
+ This function initializes a plugin. This function fails if there is no
+ dictionary that uses the context encoding of groonga.
+ */
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ sole_mecab = NULL;
+ sole_mecab_mutex = grn_plugin_mutex_open(ctx);
+ if (!sole_mecab_mutex) {
+ GRN_PLUGIN_ERROR(ctx, GRN_NO_MEMORY_AVAILABLE,
+ "[tokenizer][mecab] grn_plugin_mutex_open() failed");
+ return ctx->rc;
+ }
+
+ check_mecab_dictionary_encoding(ctx);
+ return ctx->rc;
+}
+
+/*
+ This function registers a plugin to a database.
+ */
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_rc rc;
+
+ rc = grn_tokenizer_register(ctx, "TokenMecab", 10,
+ mecab_init, mecab_next, mecab_fin);
+ if (rc == GRN_SUCCESS) {
+ grn_obj *token_mecab;
+ token_mecab = grn_ctx_get(ctx, "TokenMecab", 10);
+ /* Just for backward compatibility. TokenMecab was built-in not plugin. */
+ if (token_mecab && grn_obj_id(ctx, token_mecab) != GRN_DB_MECAB) {
+ rc = GRN_FILE_CORRUPT;
+ }
+ }
+
+ return rc;
+}
+
+/*
+ This function finalizes a plugin.
+ */
+grn_rc
+GRN_PLUGIN_FIN(grn_ctx *ctx)
+{
+ if (sole_mecab) {
+ mecab_destroy(sole_mecab);
+ sole_mecab = NULL;
+ }
+ if (sole_mecab_mutex) {
+ grn_plugin_mutex_close(ctx, sole_mecab_mutex);
+ sole_mecab_mutex = NULL;
+ }
+
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab_sources.am b/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab_sources.am
new file mode 100644
index 00000000000..56912727c3d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/plugins/tokenizers/mecab_sources.am
@@ -0,0 +1,2 @@
+mecab_la_SOURCES = \
+ mecab.c
diff --git a/storage/mroonga/vendor/groonga/src/.gitignore b/storage/mroonga/vendor/groonga/src/.gitignore
new file mode 100644
index 00000000000..a8278d75b4b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/.gitignore
@@ -0,0 +1,2 @@
+/grntest
+/*.exe
diff --git a/storage/mroonga/vendor/groonga/src/CMakeLists.txt b/storage/mroonga/vendor/groonga/src/CMakeLists.txt
new file mode 100644
index 00000000000..4d02109dae5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${MRUBY_INCLUDE_DIRS}
+ )
+
+add_subdirectory(suggest)
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/groonga_sources.am GROONGA_SOURCES)
+add_executable(groonga ${GROONGA_SOURCES})
+set_source_files_properties(${GROONGA_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+target_link_libraries(groonga libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS groonga DESTINATION ${BIN_DIR})
+endif()
+
+if(NOT WIN32)
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/grnslap_sources.am GRNSLAP_SOURCES)
+ add_executable(grnslap ${GRNSLAP_SOURCES})
+ set_source_files_properties(${GRNSLAP_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ target_link_libraries(grnslap libgroonga)
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS grnslap DESTINATION ${BIN_DIR})
+ endif()
+endif()
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/groonga_benchmark_sources.am
+ GROONGA_BENCHMARK_SOURCES)
+add_executable(groonga-benchmark ${GROONGA_BENCHMARK_SOURCES})
+set_source_files_properties(${GROONGA_BENCHMARK_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+target_link_libraries(groonga-benchmark libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS groonga-benchmark DESTINATION ${BIN_DIR})
+endif()
+
diff --git a/storage/mroonga/vendor/groonga/src/Makefile.am b/storage/mroonga/vendor/groonga/src/Makefile.am
new file mode 100644
index 00000000000..b125db54c3d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/Makefile.am
@@ -0,0 +1,48 @@
+SUBDIRS = \
+ suggest \
+ httpd
+
+NONEXISTENT_CXX_SOURCE = nonexistent.cpp
+
+bin_PROGRAMS = groonga groonga-benchmark
+noinst_PROGRAMS = grnslap
+
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(NO_STRICT_ALIASING_CFLAGS) \
+ $(COVERAGE_CFLAGS) \
+ $(GRN_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+DEFS += $(GRN_DEFS)
+
+AM_LDFLAGS = -no-undefined
+
+DEFAULT_INCLUDES = \
+ -I$(top_builddir) \
+ -I$(srcdir) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/include \
+ $(GROONGA_INCLUDEDIR)
+
+include groonga_sources.am
+nodist_EXTRA_groonga_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+groonga_CFLAGS = $(AM_CFLAGS) $(LIBEDIT_CFLAGS)
+groonga_LDADD = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(LIBEDIT_LIBS) \
+ $(MESSAGE_PACK_LIBS)
+
+include grnslap_sources.am
+nodist_EXTRA_grnslap_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+grnslap_LDADD = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(MESSAGE_PACK_LIBS)
+
+include groonga_benchmark_sources.am
+nodist_EXTRA_groonga_benchmark_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+groonga_benchmark_LDADD = \
+ $(top_builddir)/lib/libgroonga.la \
+ $(MESSAGE_PACK_LIBS)
diff --git a/storage/mroonga/vendor/groonga/src/grnslap.c b/storage/mroonga/vendor/groonga/src/grnslap.c
new file mode 100644
index 00000000000..5400fbb23e0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/grnslap.c
@@ -0,0 +1,373 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "lib/com.h"
+#include "lib/ctx_impl.h"
+#include <string.h>
+#include <stdio.h>
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif /* HAVE_SYS_WAIT_H */
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif /* HAVE_NETINET_IN_H */
+
+#define DEFAULT_PORT 10041
+#define DEFAULT_HOST "localhost"
+#define DEFAULT_MAX_CONCURRENCY 10
+#define DEFAULT_MAX_THROUGHPUT 10000
+#define MAX_DEST 256
+
+typedef struct {
+ const char *host;
+ uint16_t port;
+} grn_slap_dest;
+
+static int proto = 'g';
+static int verbose = 0;
+static int dest_cnt = 0;
+static grn_slap_dest dests[MAX_DEST];
+static int max_con = DEFAULT_MAX_CONCURRENCY;
+static int max_tp = DEFAULT_MAX_THROUGHPUT;
+
+#include <stdarg.h>
+static void
+lprint(grn_ctx *ctx, const char *fmt, ...)
+{
+ char buf[1024];
+ grn_timeval tv;
+ int len;
+ va_list argp;
+ grn_timeval_now(ctx, &tv);
+ grn_timeval2str(ctx, &tv, buf);
+ len = strlen(buf);
+ buf[len++] = '|';
+ va_start(argp, fmt);
+ vsnprintf(buf + len, 1023 - len, fmt, argp);
+ va_end(argp);
+ buf[1023] = '\0';
+ puts(buf);
+}
+
+static void
+parse_dest(char *deststr, grn_slap_dest *dest)
+{
+ int p;
+ char *d;
+ if ((d = strchr(deststr, ':'))) {
+ if ((p = atoi(d + 1))) {
+ *d = '\0';
+ dest->host = deststr;
+ dest->port = p;
+ return;
+ }
+ }
+ dest->host = NULL;
+ dest->port = 0;
+}
+
+static void
+usage(void)
+{
+ fprintf(stderr,
+ "Usage: grnslap [options...] [dest...]\n"
+ "options:\n"
+ " -P <protocol>: http or gqtp (default: gqtp)\n"
+ " -m <max concurrency>: number of max concurrency (default: %d)\n"
+ "dest: hostname:port number (default: \"%s:%d\")\n",
+ DEFAULT_MAX_CONCURRENCY, DEFAULT_HOST, DEFAULT_PORT);
+}
+
+#define BUFSIZE 0x1000000
+
+typedef struct _session session;
+
+struct _session {
+ grn_com_queue_entry eq;
+ grn_com *com;
+ struct timeval tv;
+ grn_id id;
+ int stat;
+ int query_id;
+ int n_query;
+ int n_sessions;
+};
+
+static grn_com_event ev;
+static grn_com_queue fsessions;
+static grn_hash *sessions;
+static int done = 0;
+static int nsent = 0;
+static int nrecv = 0;
+static int etime_min = INT32_MAX;
+static int etime_max = 0;
+static int64_t etime_amount = 0;
+
+static session *
+session_open(grn_ctx *ctx, grn_slap_dest *dest)
+{
+ grn_id id;
+ session *s;
+ grn_com *com;
+ if (!(com = grn_com_copen(ctx, &ev, dest->host, dest->port))) { return NULL; }
+ id = grn_hash_add(ctx, sessions, &com->fd, sizeof(grn_sock), (void **)&s, NULL);
+ com->opaque = s;
+ s->com = com;
+ s->id = id;
+ s->stat = 1;
+ return s;
+}
+
+static void
+session_close(grn_ctx *ctx, session *s)
+{
+ if (!s->stat) { return; }
+ grn_com_close(ctx, s->com);
+ s->stat = 0;
+ grn_hash_delete_by_id(ctx, sessions, s->id, NULL);
+}
+
+static session *
+session_alloc(grn_ctx *ctx, grn_slap_dest *dest)
+{
+ session *s;
+ while ((s = (session *)grn_com_queue_deque(ctx, &fsessions))) {
+ if (s->n_query < 1000000 && !s->com->closed) { return s; }
+ //session_close(ctx, s);
+ }
+ return session_open(ctx, dest);
+}
+
+static void
+msg_handler(grn_ctx *ctx, grn_obj *msg)
+{
+ uint32_t etime;
+ struct timeval tv;
+ grn_msg *m = (grn_msg *)msg;
+ grn_com *com = ((grn_msg *)msg)->u.peer;
+ session *s = com->opaque;
+ s->stat = 3;
+ gettimeofday(&tv, NULL);
+ etime = (tv.tv_sec - s->tv.tv_sec) * 1000000 + (tv.tv_usec - s->tv.tv_usec);
+ if (etime > etime_max) { etime_max = etime; }
+ if (etime < etime_min) { etime_min = etime; }
+ if (ctx->rc) { m->header.proto = 0; }
+ switch (m->header.proto) {
+ case GRN_COM_PROTO_GQTP :
+ if (GRN_BULK_VSIZE(msg) == 2) {
+ etime_amount += etime;
+ } else {
+ if (verbose) {
+ GRN_TEXT_PUTC(ctx, msg, '\0');
+ lprint(ctx, "%8d(%4d) %8d : %s", s->query_id, s->n_sessions, etime, GRN_BULK_HEAD(msg));
+ }
+ }
+ if ((m->header.flags & GRN_CTX_TAIL)) {
+ grn_com_queue_enque(ctx, &fsessions, (grn_com_queue_entry *)s);
+ nrecv++;
+ }
+ break;
+ case GRN_COM_PROTO_HTTP :
+ nrecv++;
+ /* lprint(ctx, "recv: %d, %d", (int)GRN_BULK_VSIZE(msg), nrecv); */
+ grn_com_close_(ctx, com);
+ grn_com_queue_enque(ctx, &fsessions, (grn_com_queue_entry *)s);
+ break;
+ default :
+ grn_com_close_(ctx, com);
+ grn_com_queue_enque(ctx, &fsessions, (grn_com_queue_entry *)s);
+ break;
+ }
+ grn_msg_close(ctx, msg);
+}
+
+static void * CALLBACK
+receiver(void *arg)
+{
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ while (!grn_com_event_poll(ctx, &ev, 100)) {
+ if (nsent == nrecv && done) { break; }
+ /*
+ {
+ session *s;
+ GRN_HASH_EACH(ctx, sessions, id, NULL, NULL, &s, {
+ printf("id=%d: fd=%d stat=%d q=%d n=%d\n", s->id, s->com->fd, s->stat, s->query_id, s->n_query);
+ });
+ }
+ */
+ }
+ grn_ctx_fin(ctx);
+ return NULL;
+}
+
+static int
+do_client()
+{
+ int rc = -1;
+ grn_obj text;
+ grn_thread thread;
+ struct timeval tvb, tve;
+ grn_com_header sheader;
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ GRN_COM_QUEUE_INIT(&fsessions);
+ sessions = grn_hash_create(ctx, NULL, sizeof(grn_sock), sizeof(session), 0);
+ sheader.proto = GRN_COM_PROTO_GQTP;
+ sheader.qtype = 0;
+ sheader.keylen = 0;
+ sheader.level = 0;
+ sheader.flags = 0;
+ sheader.status = 0;
+ sheader.opaque = 0;
+ sheader.cas = 0;
+ GRN_TEXT_INIT(&text, 0);
+ rc = grn_bulk_reserve(ctx, &text, BUFSIZE);
+ if (!rc) {
+ char *buf = GRN_TEXT_VALUE(&text);
+ if (!grn_com_event_init(ctx, &ev, 1000, sizeof(grn_com))) {
+ ev.msg_handler = msg_handler;
+ if (!THREAD_CREATE(thread, receiver, NULL)) {
+ int cnt = 0;
+ gettimeofday(&tvb, NULL);
+ lprint(ctx, "begin: procotol=%c max_concurrency=%d max_tp=%d", proto, max_con, max_tp);
+ while (fgets(buf, BUFSIZE, stdin)) {
+ uint32_t size = strlen(buf) - 1;
+ session *s = session_alloc(ctx, dests + (cnt++ % dest_cnt));
+ if (s) {
+ gettimeofday(&s->tv, NULL);
+ s->n_query++;
+ s->query_id = ++nsent;
+ s->n_sessions = (nsent - nrecv);
+ switch (proto) {
+ case 'H' :
+ case 'h' :
+ if (grn_com_send_http(ctx, s->com, buf, size, 0)) {
+ fprintf(stderr, "grn_com_send_http failed\n");
+ }
+ s->stat = 2;
+ /*
+ lprint(ctx, "sent %04d %04d %d",
+ s->n_query, s->query_id, s->com->fd);
+ */
+ break;
+ default :
+ if (grn_com_send(ctx, s->com, &sheader, buf, size, 0)) {
+ fprintf(stderr, "grn_com_send failed\n");
+ }
+ break;
+ }
+ } else {
+ fprintf(stderr, "grn_com_copen failed\n");
+ }
+ for (;;) {
+ gettimeofday(&tve, NULL);
+ if ((nrecv < max_tp * (tve.tv_sec - tvb.tv_sec)) &&
+ (nsent - nrecv) < max_con) { break; }
+ /* lprint(ctx, "s:%d r:%d", nsent, nrecv); */
+ grn_nanosleep(1000000);
+ }
+ if (!(nsent % 1000)) { lprint(ctx, " : %d", nsent); }
+ }
+ done = 1;
+ if (THREAD_JOIN(thread)) {
+ fprintf(stderr, "THREAD_JOIN failed\n");
+ }
+ gettimeofday(&tve, NULL);
+ {
+ double qps;
+ uint64_t etime = (tve.tv_sec - tvb.tv_sec);
+ etime *= 1000000;
+ etime += (tve.tv_usec - tvb.tv_usec);
+ qps = (double)nsent * 1000000 / etime;
+ lprint(ctx, "end : n=%d min=%d max=%d avg=%d qps=%f etime=%d.%06d", nsent, etime_min, etime_max, (int)(etime_amount / nsent), qps, etime / 1000000, etime % 1000000);
+ }
+ {
+ session *s;
+ GRN_HASH_EACH(ctx, sessions, id, NULL, NULL, &s, {
+ session_close(ctx, s);
+ });
+ }
+ rc = 0;
+ } else {
+ fprintf(stderr, "THREAD_CREATE failed\n");
+ }
+ grn_com_event_fin(ctx, &ev);
+ } else {
+ fprintf(stderr, "grn_com_event_init failed\n");
+ }
+ }
+ grn_obj_unlink(ctx, &text);
+ grn_hash_close(ctx, sessions);
+ grn_ctx_fin(ctx);
+ return rc;
+}
+
+enum {
+ flag_usage = 1,
+ flag_verbose = 2
+};
+
+int
+main(int argc, char **argv)
+{
+ const char *protostr = NULL, *maxconstr = NULL, *maxtpstr = NULL;
+ int r, i, flags = 0;
+ static grn_str_getopt_opt opts[] = {
+ {'P', NULL, NULL, 0, GETOPT_OP_NONE},
+ {'m', NULL, NULL, 0, GETOPT_OP_NONE},
+ {'t', NULL, NULL, 0, GETOPT_OP_NONE},
+ {'h', NULL, NULL, flag_usage, GETOPT_OP_ON},
+ {'v', NULL, NULL, flag_verbose, GETOPT_OP_ON},
+ {'\0', NULL, NULL, 0, 0}
+ };
+ opts[0].arg = &protostr;
+ opts[1].arg = &maxconstr;
+ opts[2].arg = &maxtpstr;
+ i = grn_str_getopt(argc, argv, opts, &flags);
+ if (protostr) { proto = *protostr; }
+ if (maxconstr) { max_con = atoi(maxconstr); }
+ if (maxtpstr) { max_tp = atoi(maxtpstr); }
+ if (flags & flag_verbose) { verbose = 1; }
+
+ if (argc <= i) {
+ dests[0].host = DEFAULT_HOST;
+ dests[0].port = DEFAULT_PORT;
+ dest_cnt = 1;
+ } else if (i > 0 && argc <= (i + MAX_DEST)){
+ for (dest_cnt = 0; i < argc; i++) {
+ parse_dest(argv[i], &dests[dest_cnt]);
+ if (dests[dest_cnt].host) {
+ dest_cnt++;
+ }
+ }
+ if (!dest_cnt) { flags |= flag_usage; }
+ } else {
+ /* too much dests */
+ flags |= flag_usage;
+ }
+
+ if (grn_init()) { return -1; }
+ if (flags & flag_usage) {
+ usage(); r = -1;
+ } else {
+ r = do_client();
+ }
+ grn_fin();
+ return r;
+}
diff --git a/storage/mroonga/vendor/groonga/src/grnslap_sources.am b/storage/mroonga/vendor/groonga/src/grnslap_sources.am
new file mode 100644
index 00000000000..244f5bfc8f5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/grnslap_sources.am
@@ -0,0 +1,2 @@
+grnslap_SOURCES = \
+ grnslap.c
diff --git a/storage/mroonga/vendor/groonga/src/groonga.c b/storage/mroonga/vendor/groonga/src/groonga.c
new file mode 100644
index 00000000000..9d1009d72da
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/groonga.c
@@ -0,0 +1,2819 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2009-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef WIN32
+# define GROONGA_MAIN
+#endif /* WIN32 */
+#include "lib/groonga_in.h"
+
+#include "lib/com.h"
+#include "lib/ctx_impl.h"
+#include "lib/proc.h"
+#include "lib/db.h"
+#include "lib/util.h"
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <fcntl.h>
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif /* HAVE_SYS_WAIT_H */
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif /* HAVE_SYS_SOCKET_H */
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif /* HAVE_NETINET_IN_H */
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif /* HAVE_SYS_RESOURCE_H */
+
+#ifdef HAVE_SYS_SYSCTL_H
+# include <sys/sysctl.h>
+#endif /* HAVE_SYS_SYSCTL_H */
+
+#ifdef HAVE__STRNICMP
+# define strncasecmp(s1,s2,n) _strnicmp(s1,s2,n)
+#endif /* HAVE__STRNICMP */
+
+#ifndef USE_MSG_NOSIGNAL
+# ifdef MSG_NOSIGNAL
+# undef MSG_NOSIGNAL
+# endif
+# define MSG_NOSIGNAL 0
+#endif /* USE_MSG_NOSIGNAL */
+
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif /* STDIN_FILENO */
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif /* STDOUT_FILENO */
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif /* STDERR_FILENO */
+
+#define DEFAULT_HTTP_PORT 10041
+#define DEFAULT_GQTP_PORT 10043
+#define DEFAULT_DEST "localhost"
+#define DEFAULT_MAX_NFTHREADS 8
+#define MAX_CON 0x10000
+
+#define RLIMIT_NOFILE_MINIMUM 4096
+
+static char bind_address[HOST_NAME_MAX + 1];
+static char hostname[HOST_NAME_MAX + 1];
+static int port = DEFAULT_GQTP_PORT;
+static int batchmode;
+static int number_of_lines = 0;
+static int newdb;
+static grn_bool is_daemon_mode = GRN_FALSE;
+static int (*do_client)(int argc, char **argv);
+static int (*do_server)(char *path);
+static const char *pid_file_path = NULL;
+static const char *input_path = NULL;
+static FILE *output = NULL;
+
+static int ready_notify_pipe[2];
+#define PIPE_READ 0
+#define PIPE_WRITE 1
+
+static grn_encoding encoding;
+static grn_command_version default_command_version;
+static int64_t default_match_escalation_threshold;
+static int log_level;
+
+static int
+grn_rc_to_exit_code(grn_rc rc)
+{
+ if (rc == GRN_SUCCESS) {
+ return EXIT_SUCCESS;
+ } else {
+ return EXIT_FAILURE;
+ }
+}
+
+#ifdef GRN_WITH_LIBEDIT
+#include <locale.h>
+#include <histedit.h>
+static EditLine *line_editor = NULL;
+static HistoryW *line_editor_history = NULL;
+static HistEventW line_editor_history_event;
+static char line_editor_history_path[PATH_MAX] = "";
+
+static const wchar_t *
+line_editor_prompt(EditLine *e __attribute__((unused)))
+{
+ return L"> ";
+}
+static const wchar_t * const line_editor_editor = L"emacs";
+
+static void
+line_editor_init(int argc __attribute__((unused)), char *argv[])
+{
+ const char * const HOME_PATH = getenv("HOME");
+ const char * const HISTORY_PATH = "/.groonga-history";
+
+ setlocale(LC_ALL, "");
+
+ if (strlen(HOME_PATH) + strlen(HISTORY_PATH) < PATH_MAX) {
+ strcpy(line_editor_history_path, HOME_PATH);
+ strcat(line_editor_history_path, HISTORY_PATH);
+ } else {
+ line_editor_history_path[0] = '\0';
+ }
+
+ line_editor_history = history_winit();
+ history_w(line_editor_history, &line_editor_history_event, H_SETSIZE, 200);
+ if (line_editor_history_path[0]) {
+ history_w(line_editor_history, &line_editor_history_event,
+ H_LOAD, line_editor_history_path);
+ }
+
+ line_editor = el_init(argv[0], stdin, stdout, stderr);
+ el_wset(line_editor, EL_PROMPT, &line_editor_prompt);
+ el_wset(line_editor, EL_EDITOR, line_editor_editor);
+ el_wset(line_editor, EL_HIST, history_w, line_editor_history);
+ el_source(line_editor, NULL);
+}
+
+static void
+line_editor_fin(void)
+{
+ if (line_editor) {
+ el_end(line_editor);
+ if (line_editor_history) {
+ if (line_editor_history_path[0]) {
+ history_w(line_editor_history, &line_editor_history_event,
+ H_SAVE, line_editor_history_path);
+ }
+ history_wend(line_editor_history);
+ }
+ }
+}
+
+static grn_rc
+line_editor_fgets(grn_ctx *ctx, grn_obj *buf)
+{
+ grn_rc rc = GRN_SUCCESS;
+ const wchar_t *line;
+ int nchar;
+ line = el_wgets(line_editor, &nchar);
+ if (nchar > 0) {
+ int i;
+ char multibyte_buf[MB_CUR_MAX];
+ size_t multibyte_len;
+ mbstate_t ps;
+ history_w(line_editor_history, &line_editor_history_event, H_ENTER, line);
+ memset(&ps, 0, sizeof(ps));
+ wcrtomb(NULL, L'\0', &ps);
+ for (i = 0; i < nchar; i++) {
+ multibyte_len = wcrtomb(multibyte_buf, line[i], &ps);
+ if (multibyte_len == (size_t)-1) {
+ GRN_LOG(ctx, GRN_LOG_WARNING,
+ "[prompt][libedit] failed to read input: %s", strerror(errno));
+ rc = GRN_INVALID_ARGUMENT;
+ } else {
+ GRN_TEXT_PUT(ctx, buf, multibyte_buf, multibyte_len);
+ }
+ }
+ } else {
+ rc = GRN_END_OF_DATA;
+ }
+ return rc;
+}
+#endif /* GRN_WITH_LIBEDIT */
+
+inline static grn_rc
+read_next_line(grn_ctx *ctx, grn_obj *buf)
+{
+ static int the_first_read = GRN_TRUE;
+ grn_rc rc = GRN_SUCCESS;
+ if (!batchmode) {
+#ifdef GRN_WITH_LIBEDIT
+ rc = line_editor_fgets(ctx, buf);
+#else
+ fprintf(stderr, "> ");
+ rc = grn_text_fgets(ctx, buf, stdin);
+#endif
+ } else {
+ rc = grn_text_fgets(ctx, buf, stdin);
+ if (rc != GRN_END_OF_DATA) {
+ number_of_lines++;
+ }
+ }
+ if (the_first_read && GRN_TEXT_LEN(buf) > 0) {
+ const char bom[] = {0xef, 0xbb, 0xbf};
+ if (GRN_CTX_GET_ENCODING(ctx) == GRN_ENC_UTF8 &&
+ GRN_TEXT_LEN(buf) > 3 && !memcmp(GRN_TEXT_VALUE(buf), bom, 3)) {
+ grn_obj buf_without_bom;
+ GRN_TEXT_INIT(&buf_without_bom, 0);
+ GRN_TEXT_PUT(ctx, &buf_without_bom,
+ GRN_TEXT_VALUE(buf) + 3, GRN_TEXT_LEN(buf) - 3);
+ GRN_TEXT_SET(ctx, buf,
+ GRN_TEXT_VALUE(&buf_without_bom),
+ GRN_TEXT_LEN(&buf_without_bom));
+ grn_obj_unlink(ctx, &buf_without_bom);
+ }
+ the_first_read = GRN_FALSE;
+ }
+ if (GRN_TEXT_LEN(buf) > 0 &&
+ GRN_TEXT_VALUE(buf)[GRN_TEXT_LEN(buf) - 1] == '\n') {
+ grn_bulk_truncate(ctx, buf, GRN_TEXT_LEN(buf) - 1);
+ }
+ if (GRN_TEXT_LEN(buf) > 0 &&
+ GRN_TEXT_VALUE(buf)[GRN_TEXT_LEN(buf) - 1] == '\r') {
+ grn_bulk_truncate(ctx, buf, GRN_TEXT_LEN(buf) - 1);
+ }
+ return rc;
+}
+
+inline static grn_rc
+prompt(grn_ctx *ctx, grn_obj *buf)
+{
+ grn_rc rc = GRN_SUCCESS;
+ grn_bool need_next_line = GRN_TRUE;
+ GRN_BULK_REWIND(buf);
+ while (need_next_line) {
+ rc = read_next_line(ctx, buf);
+ if (rc == GRN_SUCCESS &&
+ GRN_TEXT_LEN(buf) > 0 &&
+ GRN_TEXT_VALUE(buf)[GRN_TEXT_LEN(buf) - 1] == '\\') {
+ grn_bulk_truncate(ctx, buf, GRN_TEXT_LEN(buf) - 1);
+ need_next_line = GRN_TRUE;
+ } else {
+ need_next_line = GRN_FALSE;
+ }
+ }
+ return rc;
+}
+
+static void
+output_envelope(grn_ctx *ctx, grn_rc rc, grn_obj *head, grn_obj *body, grn_obj *foot)
+{
+ grn_output_envelope(ctx, rc, head, body, foot, input_path, number_of_lines);
+}
+
+static void
+s_output(grn_ctx *ctx, int flags, void *arg)
+{
+ if (ctx && ctx->impl && (flags & GRN_CTX_TAIL)) {
+ grn_obj *buf = ctx->impl->outbuf;
+ grn_obj *command;
+ if (GRN_TEXT_LEN(buf) || ctx->rc) {
+ FILE * stream = (FILE *) arg;
+ grn_obj head, foot;
+ GRN_TEXT_INIT(&head, 0);
+ GRN_TEXT_INIT(&foot, 0);
+ output_envelope(ctx, ctx->rc, &head, buf, &foot);
+ fwrite(GRN_TEXT_VALUE(&head), 1, GRN_TEXT_LEN(&head), stream);
+ fwrite(GRN_TEXT_VALUE(buf), 1, GRN_TEXT_LEN(buf), stream);
+ fwrite(GRN_TEXT_VALUE(&foot), 1, GRN_TEXT_LEN(&foot), stream);
+ fputc('\n', stream);
+ fflush(stream);
+ GRN_BULK_REWIND(buf);
+ GRN_OBJ_FIN(ctx, &head);
+ GRN_OBJ_FIN(ctx, &foot);
+ }
+ command = GRN_CTX_USER_DATA(ctx)->ptr;
+ GRN_BULK_REWIND(command);
+ }
+}
+
+static int
+do_alone(int argc, char **argv)
+{
+ int exit_code = EXIT_FAILURE;
+ char *path = NULL;
+ grn_obj *db;
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ if (argc > 0 && argv) { path = *argv++; argc--; }
+ db = (newdb || !path) ? grn_db_create(ctx, path, NULL) : grn_db_open(ctx, path);
+ if (db) {
+ grn_obj command;
+ GRN_TEXT_INIT(&command, 0);
+ GRN_CTX_USER_DATA(ctx)->ptr = &command;
+ grn_ctx_recv_handler_set(ctx, s_output, output);
+ if (!argc) {
+ grn_obj text;
+ GRN_TEXT_INIT(&text, 0);
+ while (prompt(ctx, &text) != GRN_END_OF_DATA) {
+ GRN_TEXT_PUT(ctx, &command, GRN_TEXT_VALUE(&text), GRN_TEXT_LEN(&text));
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(&text), GRN_TEXT_LEN(&text), 0);
+ if (ctx->stat == GRN_CTX_QUIT) { break; }
+ }
+ exit_code = grn_rc_to_exit_code(ctx->rc);
+ grn_obj_unlink(ctx, &text);
+ } else {
+ grn_rc rc;
+ rc = grn_ctx_sendv(ctx, argc, argv, 0);
+ exit_code = grn_rc_to_exit_code(rc);
+ }
+ grn_obj_unlink(ctx, &command);
+ grn_obj_close(ctx, db);
+ } else {
+ fprintf(stderr, "db open failed (%s): %s\n", path, ctx->errbuf);
+ }
+ grn_ctx_fin(ctx);
+ return exit_code;
+}
+
+static int
+c_output(grn_ctx *ctx)
+{
+ int flags;
+ char *str;
+ unsigned int str_len;
+ do {
+ grn_ctx_recv(ctx, &str, &str_len, &flags);
+ /*
+ if (ctx->rc) {
+ fprintf(stderr, "grn_ctx_recv failed\n");
+ return -1;
+ }
+ */
+ if (str_len || ctx->rc) {
+ grn_obj head, body, foot;
+ GRN_TEXT_INIT(&head, 0);
+ GRN_TEXT_INIT(&body, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_INIT(&foot, 0);
+ if (ctx->rc == GRN_SUCCESS) {
+ GRN_TEXT_SET(ctx, &body, str, str_len);
+ } else {
+ ERR(ctx->rc, "%.*s", str_len, str);
+ }
+ output_envelope(ctx, ctx->rc, &head, &body, &foot);
+ fwrite(GRN_TEXT_VALUE(&head), 1, GRN_TEXT_LEN(&head), output);
+ fwrite(GRN_TEXT_VALUE(&body), 1, GRN_TEXT_LEN(&body), output);
+ fwrite(GRN_TEXT_VALUE(&foot), 1, GRN_TEXT_LEN(&foot), output);
+ fputc('\n', output);
+ fflush(output);
+ GRN_OBJ_FIN(ctx, &head);
+ GRN_OBJ_FIN(ctx, &body);
+ GRN_OBJ_FIN(ctx, &foot);
+ }
+ } while ((flags & GRN_CTX_MORE));
+ return 0;
+}
+
+static int
+g_client(int argc, char **argv)
+{
+ int exit_code = EXIT_FAILURE;
+ grn_ctx ctx_, *ctx = &ctx_;
+ const char *hostname = DEFAULT_DEST;
+ if (argc > 0 && argv) { hostname = *argv++; argc--; }
+ grn_ctx_init(ctx, 0);
+ if (!grn_ctx_connect(ctx, hostname, port, 0)) {
+ if (!argc) {
+ grn_obj text;
+ GRN_TEXT_INIT(&text, 0);
+ while (prompt(ctx, &text) != GRN_END_OF_DATA) {
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(&text), GRN_TEXT_LEN(&text), 0);
+ exit_code = grn_rc_to_exit_code(ctx->rc);
+ if (ctx->rc != GRN_SUCCESS) { break; }
+ if (c_output(ctx)) { goto exit; }
+ if (ctx->stat == GRN_CTX_QUIT) { break; }
+ }
+ grn_obj_unlink(ctx, &text);
+ } else {
+ grn_rc rc;
+ rc = grn_ctx_sendv(ctx, argc, argv, 0);
+ exit_code = grn_rc_to_exit_code(rc);
+ if (c_output(ctx)) { goto exit; }
+ }
+ } else {
+ fprintf(stderr, "grn_ctx_connect failed (%s:%d)\n", hostname, port);
+ }
+exit :
+ grn_ctx_fin(ctx);
+ return exit_code;
+}
+
+/* server */
+
+typedef void (*grn_edge_dispatcher_func)(grn_ctx *ctx, grn_edge *edge);
+typedef void (*grn_handler_func)(grn_ctx *ctx, grn_obj *msg);
+
+static grn_com_queue ctx_new;
+static grn_com_queue ctx_old;
+static grn_mutex q_mutex;
+static grn_cond q_cond;
+static uint32_t nthreads = 0, nfthreads = 0, max_nfthreads;
+
+static void
+reset_ready_notify_pipe(void)
+{
+ ready_notify_pipe[PIPE_READ] = 0;
+ ready_notify_pipe[PIPE_WRITE] = 0;
+}
+
+static void
+close_ready_notify_pipe(void)
+{
+ if (ready_notify_pipe[PIPE_READ] > 0) {
+ close(ready_notify_pipe[PIPE_READ]);
+ }
+ if (ready_notify_pipe[PIPE_WRITE] > 0) {
+ close(ready_notify_pipe[PIPE_WRITE]);
+ }
+ reset_ready_notify_pipe();
+}
+
+static void
+send_ready_notify(void)
+{
+ if (ready_notify_pipe[PIPE_WRITE] > 0) {
+ const char *ready_notify_message = "ready";
+ write(ready_notify_pipe[PIPE_WRITE],
+ ready_notify_message,
+ strlen(ready_notify_message));
+ }
+ close_ready_notify_pipe();
+}
+
+static int
+daemonize(void)
+{
+ int exit_code = EXIT_SUCCESS;
+#ifndef WIN32
+ pid_t pid;
+
+ if (pipe(ready_notify_pipe) == -1) {
+ reset_ready_notify_pipe();
+ }
+
+ switch (fork()) {
+ case 0:
+ break;
+ case -1:
+ perror("fork");
+ return EXIT_FAILURE;
+ default:
+ wait(NULL);
+ if (ready_notify_pipe[PIPE_READ] > 0) {
+ int max_fd;
+ fd_set read_fds;
+ FD_ZERO(&read_fds);
+ FD_SET(ready_notify_pipe[PIPE_READ], &read_fds);
+ max_fd = ready_notify_pipe[PIPE_READ] + 1;
+ select(max_fd, &read_fds, NULL, NULL, NULL);
+ }
+ close_ready_notify_pipe();
+ _exit(EXIT_SUCCESS);
+ }
+ switch (fork()) {
+ case 0:
+ {
+ FILE *pid_file = NULL;
+ if (pid_file_path) {
+ pid_file = fopen(pid_file_path, "w");
+ }
+ pid = getpid();
+ if (!pid_file) {
+ fprintf(stderr, "%d\n", pid);
+ } else {
+ fprintf(pid_file, "%d\n", pid);
+ fclose(pid_file);
+ pid_file = NULL;
+ }
+ }
+ break;
+ case -1:
+ perror("fork");
+ return EXIT_FAILURE;
+ default:
+ close_ready_notify_pipe();
+ _exit(EXIT_SUCCESS);
+ }
+ {
+ int null_fd = GRN_OPEN("/dev/null", O_RDWR, 0);
+ if (null_fd != -1) {
+ dup2(null_fd, STDIN_FILENO);
+ dup2(null_fd, STDOUT_FILENO);
+ dup2(null_fd, STDERR_FILENO);
+ if (null_fd > STDERR_FILENO) { GRN_CLOSE(null_fd); }
+ }
+ }
+#endif /* WIN32 */
+ return exit_code;
+}
+
+static void
+clean_pid_file(void)
+{
+#ifndef WIN32
+ if (pid_file_path) {
+ unlink(pid_file_path);
+ }
+#endif
+}
+
+static void
+run_server_loop(grn_ctx *ctx, grn_com_event *ev)
+{
+ while (!grn_com_event_poll(ctx, ev, 1000) && grn_gctx.stat != GRN_CTX_QUIT) {
+ grn_edge *edge;
+ while ((edge = (grn_edge *)grn_com_queue_deque(ctx, &ctx_old))) {
+ grn_obj *msg;
+ while ((msg = (grn_obj *)grn_com_queue_deque(ctx, &edge->send_old))) {
+ grn_msg_close(&edge->ctx, msg);
+ }
+ while ((msg = (grn_obj *)grn_com_queue_deque(ctx, &edge->recv_new))) {
+ grn_msg_close(ctx, msg);
+ }
+ grn_ctx_fin(&edge->ctx);
+ if (edge->com->has_sid && edge->com->opaque == edge) {
+ grn_com_close(ctx, edge->com);
+ }
+ grn_edges_delete(ctx, edge);
+ }
+ /* todo : log stat */
+ }
+ for (;;) {
+ MUTEX_LOCK(q_mutex);
+ if (nthreads == nfthreads) { break; }
+ MUTEX_UNLOCK(q_mutex);
+ grn_nanosleep(1000000);
+ }
+ {
+ grn_edge *edge;
+ GRN_HASH_EACH(ctx, grn_edges, id, NULL, NULL, &edge, {
+ grn_obj *obj;
+ while ((obj = (grn_obj *)grn_com_queue_deque(ctx, &edge->send_old))) {
+ grn_msg_close(&edge->ctx, obj);
+ }
+ while ((obj = (grn_obj *)grn_com_queue_deque(ctx, &edge->recv_new))) {
+ grn_msg_close(ctx, obj);
+ }
+ grn_ctx_fin(&edge->ctx);
+ if (edge->com->has_sid) {
+ grn_com_close(ctx, edge->com);
+ }
+ grn_edges_delete(ctx, edge);
+ });
+ }
+ {
+ grn_com *com;
+ GRN_HASH_EACH(ctx, ev->hash, id, NULL, NULL, &com, { grn_com_close(ctx, com); });
+ }
+}
+
+static int
+run_server(grn_ctx *ctx, grn_obj *db, grn_com_event *ev,
+ grn_edge_dispatcher_func dispatcher, grn_handler_func handler)
+{
+ int exit_code = EXIT_SUCCESS;
+ struct hostent *he;
+ if (!(he = gethostbyname(hostname))) {
+ send_ready_notify();
+ SERR("gethostbyname");
+ } else {
+ ev->opaque = db;
+ grn_edges_init(ctx, dispatcher);
+ if (!grn_com_sopen(ctx, ev, bind_address, port, handler, he)) {
+ send_ready_notify();
+ run_server_loop(ctx, ev);
+ exit_code = EXIT_SUCCESS;
+ } else {
+ send_ready_notify();
+ fprintf(stderr, "grn_com_sopen failed (%s:%d): %s\n",
+ bind_address, port, ctx->errbuf);
+ }
+ grn_edges_fin(ctx);
+ }
+ return exit_code;
+}
+
+static int
+start_service(grn_ctx *ctx, const char *db_path,
+ grn_edge_dispatcher_func dispatcher, grn_handler_func handler)
+{
+ int exit_code = EXIT_SUCCESS;
+ grn_com_event ev;
+
+ if (is_daemon_mode) {
+ exit_code = daemonize();
+ if (exit_code != EXIT_SUCCESS) {
+ return exit_code;
+ }
+ }
+
+ if (!grn_com_event_init(ctx, &ev, MAX_CON, sizeof(grn_com))) {
+ grn_obj *db;
+ db = (newdb || !db_path) ? grn_db_create(ctx, db_path, NULL) : grn_db_open(ctx, db_path);
+ if (db) {
+ exit_code = run_server(ctx, db, &ev, dispatcher, handler);
+ grn_obj_close(ctx, db);
+ } else {
+ fprintf(stderr, "db open failed (%s)\n", db_path);
+ exit_code = EXIT_FAILURE;
+ send_ready_notify();
+ }
+ grn_com_event_fin(ctx, &ev);
+ } else {
+ fprintf(stderr, "grn_com_event_init failed\n");
+ exit_code = EXIT_FAILURE;
+ send_ready_notify();
+ }
+
+ if (is_daemon_mode) {
+ clean_pid_file();
+ }
+
+ return exit_code;
+}
+
+typedef struct {
+ grn_msg *msg;
+} ht_context;
+
+static void
+h_output(grn_ctx *ctx, int flags, void *arg)
+{
+ grn_rc expr_rc = ctx->rc;
+ ht_context *hc = (ht_context *)arg;
+ grn_sock fd = hc->msg->u.fd;
+ grn_obj header, head, foot, *outbuf = ctx->impl->outbuf;
+ if (!(flags & GRN_CTX_TAIL)) { return; }
+ GRN_TEXT_INIT(&header, 0);
+ GRN_TEXT_INIT(&head, 0);
+ GRN_TEXT_INIT(&foot, 0);
+ output_envelope(ctx, expr_rc, &head, outbuf, &foot);
+ switch (expr_rc) {
+ case GRN_SUCCESS :
+ GRN_TEXT_SETS(ctx, &header, "HTTP/1.1 200 OK\r\n");
+ break;
+ case GRN_INVALID_ARGUMENT :
+ case GRN_SYNTAX_ERROR :
+ GRN_TEXT_SETS(ctx, &header, "HTTP/1.1 400 Bad Request\r\n");
+ break;
+ case GRN_NO_SUCH_FILE_OR_DIRECTORY :
+ GRN_TEXT_SETS(ctx, &header, "HTTP/1.1 404 Not Found\r\n");
+ break;
+ default :
+ GRN_TEXT_SETS(ctx, &header, "HTTP/1.1 500 Internal Server Error\r\n");
+ break;
+ }
+ GRN_TEXT_PUTS(ctx, &header, "Connection: close\r\n");
+ GRN_TEXT_PUTS(ctx, &header, "Content-Type: ");
+ GRN_TEXT_PUTS(ctx, &header, grn_ctx_get_mime_type(ctx));
+ GRN_TEXT_PUTS(ctx, &header, "\r\nContent-Length: ");
+ grn_text_lltoa(ctx, &header,
+ GRN_TEXT_LEN(&head) + GRN_TEXT_LEN(outbuf) + GRN_TEXT_LEN(&foot));
+ GRN_TEXT_PUTS(ctx, &header, "\r\n\r\n");
+ {
+ ssize_t ret, len;
+#ifdef WIN32
+ WSABUF wsabufs[4];
+ wsabufs[0].buf = GRN_TEXT_VALUE(&header);
+ wsabufs[0].len = GRN_TEXT_LEN(&header);
+ wsabufs[1].buf = GRN_TEXT_VALUE(&head);
+ wsabufs[1].len = GRN_TEXT_LEN(&head);
+ wsabufs[2].buf = GRN_TEXT_VALUE(outbuf);
+ wsabufs[2].len = GRN_TEXT_LEN(outbuf);
+ wsabufs[3].buf = GRN_TEXT_VALUE(&foot);
+ wsabufs[3].len = GRN_TEXT_LEN(&foot);
+ if (WSASend(fd, wsabufs, 4, &ret, 0, NULL, NULL) == SOCKET_ERROR) {
+ SERR("WSASend");
+ }
+#else /* WIN32 */
+ struct iovec msg_iov[4];
+ struct msghdr msg;
+ msg.msg_name = NULL;
+ msg.msg_namelen = 0;
+ msg.msg_iov = msg_iov;
+ msg.msg_iovlen = 4;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+ msg_iov[0].iov_base = GRN_TEXT_VALUE(&header);
+ msg_iov[0].iov_len = GRN_TEXT_LEN(&header);
+ msg_iov[1].iov_base = GRN_TEXT_VALUE(&head);
+ msg_iov[1].iov_len = GRN_TEXT_LEN(&head);
+ msg_iov[2].iov_base = GRN_TEXT_VALUE(outbuf);
+ msg_iov[2].iov_len = GRN_TEXT_LEN(outbuf);
+ msg_iov[3].iov_base = GRN_TEXT_VALUE(&foot);
+ msg_iov[3].iov_len = GRN_TEXT_LEN(&foot);
+ if ((ret = sendmsg(fd, &msg, MSG_NOSIGNAL)) == -1) {
+ SERR("sendmsg");
+ }
+#endif /* WIN32 */
+ len = GRN_TEXT_LEN(&header) + GRN_TEXT_LEN(&head) +
+ GRN_TEXT_LEN(outbuf) + GRN_TEXT_LEN(&foot);
+ if (ret != len) {
+ GRN_LOG(&grn_gctx, GRN_LOG_NOTICE,
+ "couldn't send all data (%" GRN_FMT_LLD "/%" GRN_FMT_LLD ")",
+ (long long int)ret, (long long int)len);
+ }
+ }
+ GRN_BULK_REWIND(outbuf);
+ GRN_OBJ_FIN(ctx, &foot);
+ GRN_OBJ_FIN(ctx, &head);
+ GRN_OBJ_FIN(ctx, &header);
+}
+
+static void
+do_htreq_get(grn_ctx *ctx, grn_msg *msg)
+{
+ char *path = NULL;
+ char *pathe = GRN_BULK_HEAD((grn_obj *)msg);
+ char *e = GRN_BULK_CURR((grn_obj *)msg);
+ for (;; pathe++) {
+ if (e <= pathe + 6) {
+ /* invalid request */
+ return;
+ }
+ if (*pathe == ' ') {
+ if (!path) {
+ path = pathe + 1;
+ } else {
+ if (!memcmp(pathe + 1, "HTTP/1", 6)) {
+ break;
+ }
+ }
+ }
+ }
+ grn_ctx_send(ctx, path, pathe - path, 0);
+}
+
+typedef struct {
+ const char *path_start;
+ int path_length;
+ int content_length;
+ grn_bool have_100_continue;
+ const char *body_start;
+} h_post_header;
+
+#define STRING_EQUAL(string, string_length, constant_string)\
+ (string_length == strlen(constant_string) &&\
+ strncmp(string, constant_string, string_length) == 0)
+
+#define STRING_EQUAL_CI(string, string_length, constant_string)\
+ (string_length == strlen(constant_string) &&\
+ strncasecmp(string, constant_string, string_length) == 0)
+
+static const char *
+do_htreq_post_parse_header_request_line(grn_ctx *ctx,
+ const char *start,
+ const char *end,
+ h_post_header *header)
+{
+ const char *current;
+
+ {
+ const char *method = start;
+ int method_length = -1;
+
+ for (current = method; current < end; current++) {
+ if (current[0] == '\n') {
+ return NULL;
+ }
+ if (current[0] == ' ') {
+ method_length = current - method;
+ current++;
+ break;
+ }
+ }
+ if (method_length == -1) {
+ return NULL;
+ }
+ if (!STRING_EQUAL_CI(method, method_length, "POST")) {
+ return NULL;
+ }
+ }
+
+ {
+ header->path_start = current;
+ header->path_length = -1;
+ for (; current < end; current++) {
+ if (current[0] == '\n') {
+ return NULL;
+ }
+ if (current[0] == ' ') {
+ header->path_length = current - header->path_start;
+ current++;
+ break;
+ }
+ }
+ if (header->path_length == -1) {
+ return NULL;
+ }
+ }
+
+ {
+ const char *http_version_start = current;
+ int http_version_length = -1;
+ for (; current < end; current++) {
+ if (current[0] == '\n') {
+ http_version_length = current - http_version_start;
+ if (http_version_length > 0 &&
+ http_version_start[http_version_length - 1] == '\r') {
+ http_version_length--;
+ }
+ current++;
+ break;
+ }
+ }
+ if (http_version_length == -1) {
+ return NULL;
+ }
+ if (!(STRING_EQUAL_CI(http_version_start, http_version_length, "HTTP/1.0") ||
+ STRING_EQUAL_CI(http_version_start, http_version_length, "HTTP/1.1"))) {
+ return NULL;
+ }
+ }
+
+ return current;
+}
+
+static const char *
+do_htreq_post_parse_header_values(grn_ctx *ctx,
+ const char *start,
+ const char *end,
+ h_post_header *header)
+{
+ const char *current;
+ const char *name = start;
+ int name_length = -1;
+ const char *value = NULL;
+ int value_length = -1;
+
+ for (current = start; current < end; current++) {
+ switch (current[0]) {
+ case '\n' :
+ if (name_length == -1) {
+ if (current - name == 1 && current[-1] == '\r') {
+ return current + 1;
+ } else {
+ /* No ":" header line. TODO: report error. */
+ return NULL;
+ }
+ } else {
+ while (value < current && value[0] == ' ') {
+ value++;
+ }
+ value_length = current - value;
+ if (value_length > 0 && value[value_length - 1] == '\r') {
+ value_length--;
+ }
+ if (STRING_EQUAL_CI(name, name_length, "Content-Length")) {
+ const char *rest;
+ header->content_length = grn_atoi(value, value + value_length, &rest);
+ if (rest != value + value_length) {
+ /* Invalid Content-Length value. TODO: report error. */
+ header->content_length = -1;
+ }
+ } else if (STRING_EQUAL_CI(name, name_length, "Expect")) {
+ if (STRING_EQUAL(value, value_length, "100-continue")) {
+ header->have_100_continue = GRN_TRUE;
+ }
+ }
+ }
+ name = current + 1;
+ name_length = -1;
+ value = NULL;
+ value_length = -1;
+ break;
+ case ':' :
+ if (name_length == -1) {
+ name_length = current - name;
+ value = current + 1;
+ }
+ break;
+ default :
+ break;
+ }
+ }
+
+ return NULL;
+}
+
+static grn_bool
+do_htreq_post_parse_header(grn_ctx *ctx,
+ const char *start,
+ const char *end,
+ h_post_header *header)
+{
+ const char *current;
+
+ current = do_htreq_post_parse_header_request_line(ctx, start, end, header);
+ if (!current) {
+ return GRN_FALSE;
+ }
+ current = do_htreq_post_parse_header_values(ctx, current, end, header);
+ if (!current) {
+ return GRN_FALSE;
+ }
+
+ if (!header->have_100_continue && current == end) {
+ return GRN_FALSE;
+ }
+
+ if (current == end) {
+ header->body_start = NULL;
+ } else {
+ header->body_start = current;
+ }
+
+ return GRN_TRUE;
+}
+
+static void
+do_htreq_post(grn_ctx *ctx, grn_msg *msg)
+{
+ grn_sock fd = msg->u.fd;
+ const char *end;
+ h_post_header header;
+
+ header.path_start = NULL;
+ header.path_length = -1;
+ header.content_length = -1;
+ header.body_start = NULL;
+ header.have_100_continue = GRN_FALSE;
+
+ end = GRN_BULK_CURR((grn_obj *)msg);
+ if (!do_htreq_post_parse_header(ctx,
+ GRN_BULK_HEAD((grn_obj *)msg),
+ end,
+ &header)) {
+ return;
+ }
+
+ grn_ctx_send(ctx, header.path_start, header.path_length, GRN_CTX_QUIET);
+ if (ctx->rc != GRN_SUCCESS) {
+ ht_context context;
+ context.msg = msg;
+ h_output(ctx, GRN_CTX_TAIL, &context);
+ return;
+ }
+
+ if (header.have_100_continue) {
+ const char *continue_message = "HTTP/1.1 100 Continue\r\n";
+ ssize_t send_size;
+ int send_flags = MSG_NOSIGNAL;
+ send_size = send(fd, continue_message, strlen(continue_message), send_flags);
+ if (send_size == -1) {
+ SERR("send");
+ return;
+ }
+ }
+
+ {
+ grn_obj line_buffer;
+ int read_content_length = 0;
+
+ GRN_TEXT_INIT(&line_buffer, 0);
+ while (read_content_length < header.content_length) {
+#define POST_BUFFER_SIZE 8192
+ grn_rc rc;
+ char buffer[POST_BUFFER_SIZE];
+ const char *buffer_start, *buffer_current, *buffer_end;
+
+ if (header.body_start) {
+ buffer_start = header.body_start;
+ buffer_end = end;
+ header.body_start = NULL;
+ } else {
+ ssize_t recv_length;
+ int recv_flags = 0;
+ recv_length = recv(fd, buffer, POST_BUFFER_SIZE, recv_flags);
+ if (recv_length == 0) {
+ break;
+ }
+ if (recv_length == -1) {
+ SERR("recv");
+ break;
+ }
+ buffer_start = buffer;
+ buffer_end = buffer_start + recv_length;
+ }
+ read_content_length += buffer_end - buffer_start;
+
+ rc = GRN_SUCCESS;
+ buffer_current = buffer_start;
+ for (; rc == GRN_SUCCESS && buffer_current < buffer_end; buffer_current++) {
+ if (buffer_current[0] != '\n') {
+ continue;
+ }
+ GRN_TEXT_PUT(ctx,
+ &line_buffer,
+ buffer_start,
+ buffer_current - buffer_start);
+ {
+ int flags = 0;
+ if (!(read_content_length == header.content_length &&
+ buffer_current + 1 == buffer_end)) {
+ flags |= GRN_CTX_QUIET;
+ }
+ rc = grn_ctx_send(ctx,
+ GRN_TEXT_VALUE(&line_buffer),
+ GRN_TEXT_LEN(&line_buffer),
+ flags);
+ }
+ buffer_start = buffer_current + 1;
+ GRN_BULK_REWIND(&line_buffer);
+ }
+ GRN_TEXT_PUT(ctx, &line_buffer, buffer_start, buffer_end - buffer_start);
+#undef POST_BUFFER_SIZE
+ }
+
+ if (GRN_TEXT_LEN(&line_buffer) > 0) {
+ grn_ctx_send(ctx,
+ GRN_TEXT_VALUE(&line_buffer),
+ GRN_TEXT_LEN(&line_buffer),
+ 0);
+ }
+
+ GRN_OBJ_FIN(ctx, &line_buffer);
+ }
+}
+
+static void
+do_htreq(grn_ctx *ctx, grn_msg *msg)
+{
+ grn_com_header *header = &msg->header;
+ switch (header->qtype) {
+ case 'G' : /* GET */
+ do_htreq_get(ctx, msg);
+ break;
+ case 'P' : /* POST */
+ do_htreq_post(ctx, msg);
+ break;
+ }
+ /* TODO: support "Connection: keep-alive" */
+ ctx->stat = GRN_CTX_QUIT;
+ /* TODO: support a command in multi requests. e.g.: load command */
+ grn_ctx_set_next_expr(ctx, NULL);
+ /* if (ctx->rc != GRN_OPERATION_WOULD_BLOCK) {...} */
+ grn_msg_close(ctx, (grn_obj *)msg);
+ /* if not keep alive connection */
+ grn_sock_close(msg->u.fd);
+ grn_com_event_start_accept(ctx, msg->acceptor->ev);
+}
+
+enum {
+ MBRES_SUCCESS = 0x00,
+ MBRES_KEY_ENOENT = 0x01,
+ MBRES_KEY_EEXISTS = 0x02,
+ MBRES_E2BIG = 0x03,
+ MBRES_EINVAL = 0x04,
+ MBRES_NOT_STORED = 0x05,
+ MBRES_UNKNOWN_COMMAND = 0x81,
+ MBRES_ENOMEM = 0x82,
+};
+
+enum {
+ MBCMD_GET = 0x00,
+ MBCMD_SET = 0x01,
+ MBCMD_ADD = 0x02,
+ MBCMD_REPLACE = 0x03,
+ MBCMD_DELETE = 0x04,
+ MBCMD_INCREMENT = 0x05,
+ MBCMD_DECREMENT = 0x06,
+ MBCMD_QUIT = 0x07,
+ MBCMD_FLUSH = 0x08,
+ MBCMD_GETQ = 0x09,
+ MBCMD_NOOP = 0x0a,
+ MBCMD_VERSION = 0x0b,
+ MBCMD_GETK = 0x0c,
+ MBCMD_GETKQ = 0x0d,
+ MBCMD_APPEND = 0x0e,
+ MBCMD_PREPEND = 0x0f,
+ MBCMD_STAT = 0x10,
+ MBCMD_SETQ = 0x11,
+ MBCMD_ADDQ = 0x12,
+ MBCMD_REPLACEQ = 0x13,
+ MBCMD_DELETEQ = 0x14,
+ MBCMD_INCREMENTQ = 0x15,
+ MBCMD_DECREMENTQ = 0x16,
+ MBCMD_QUITQ = 0x17,
+ MBCMD_FLUSHQ = 0x18,
+ MBCMD_APPENDQ = 0x19,
+ MBCMD_PREPENDQ = 0x1a
+};
+
+static grn_critical_section cache_lock;
+static grn_obj *cache_table = NULL;
+static grn_obj *cache_value = NULL;
+static grn_obj *cache_flags = NULL;
+static grn_obj *cache_expire = NULL;
+static grn_obj *cache_cas = NULL;
+
+#define CTX_GET(name) (grn_ctx_get(ctx, (name), strlen(name)))
+
+static grn_obj *
+cache_init(grn_ctx *ctx)
+{
+ if (cache_cas) { return cache_cas; }
+ CRITICAL_SECTION_ENTER(cache_lock);
+ if (!cache_cas) {
+ if ((cache_table = CTX_GET("Memcache"))) {
+ cache_value = CTX_GET("Memcache.value");
+ cache_flags = CTX_GET("Memcache.flags");
+ cache_expire = CTX_GET("Memcache.expire");
+ cache_cas = CTX_GET("Memcache.cas");
+ } else {
+ if (!cache_table) {
+ grn_obj *uint32_type = grn_ctx_at(ctx, GRN_DB_UINT32);
+ grn_obj *uint64_type = grn_ctx_at(ctx, GRN_DB_UINT64);
+ grn_obj *shorttext_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT);
+ if ((cache_table = grn_table_create(ctx, "Memcache", 8, NULL,
+ GRN_OBJ_TABLE_PAT_KEY|GRN_OBJ_PERSISTENT,
+ shorttext_type, NULL))) {
+ cache_value = grn_column_create(ctx, cache_table, "value", 5, NULL,
+ GRN_OBJ_PERSISTENT, shorttext_type);
+ cache_flags = grn_column_create(ctx, cache_table, "flags", 5, NULL,
+ GRN_OBJ_PERSISTENT, uint32_type);
+ cache_expire = grn_column_create(ctx, cache_table, "expire", 6, NULL,
+ GRN_OBJ_PERSISTENT, uint32_type);
+ cache_cas = grn_column_create(ctx, cache_table, "cas", 3, NULL,
+ GRN_OBJ_PERSISTENT, uint64_type);
+ }
+ }
+ }
+ }
+ CRITICAL_SECTION_LEAVE(cache_lock);
+ return cache_cas;
+}
+
+#define RELATIVE_TIME_THRESH 1000000000
+
+#define MBRES(ctx,re,status,key_len,extra_len,flags) do {\
+ grn_msg_set_property((ctx), (re), (status), (key_len), (extra_len));\
+ grn_msg_send((ctx), (re), (flags));\
+} while (0)
+
+#define GRN_MSG_MBRES(block) do {\
+ if (!quiet) {\
+ grn_obj *re = grn_msg_open_for_reply(ctx, (grn_obj *)msg, &edge->send_old);\
+ ((grn_msg *)re)->header.qtype = header->qtype;\
+ block\
+ }\
+} while (0)
+
+static uint64_t
+get_mbreq_cas_id()
+{
+ static uint64_t cas_id = 0;
+ /* FIXME: use GRN_ATOMIC_ADD_EX_64, but it is not implemented */
+ return ++cas_id;
+}
+
+static void
+do_mbreq(grn_ctx *ctx, grn_edge *edge)
+{
+ int quiet = 0;
+ int flags = 0;
+ grn_msg *msg = edge->msg;
+ grn_com_header *header = &msg->header;
+
+ switch (header->qtype) {
+ case MBCMD_GETQ :
+ flags = GRN_CTX_MORE;
+ /* fallthru */
+ case MBCMD_GET :
+ {
+ grn_id rid;
+ uint16_t keylen = ntohs(header->keylen);
+ char *key = GRN_BULK_HEAD((grn_obj *)msg);
+ cache_init(ctx);
+ rid = grn_table_get(ctx, cache_table, key, keylen);
+ if (!rid) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_timeval tv;
+ uint32_t expire;
+ {
+ grn_obj expire_buf;
+ GRN_UINT32_INIT(&expire_buf, 0);
+ grn_obj_get_value(ctx, cache_expire, rid, &expire_buf);
+ expire = GRN_UINT32_VALUE(&expire_buf);
+ grn_obj_close(ctx, &expire_buf);
+ }
+ grn_timeval_now(ctx, &tv);
+ if (expire && expire < tv.tv_sec) {
+ grn_table_delete_by_id(ctx, cache_table, rid);
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_obj cas_buf;
+ GRN_UINT64_INIT(&cas_buf, 0);
+ grn_obj_get_value(ctx, cache_cas, rid, &cas_buf);
+ GRN_MSG_MBRES({
+ grn_obj_get_value(ctx, cache_flags, rid, re);
+ grn_obj_get_value(ctx, cache_value, rid, re);
+ ((grn_msg *)re)->header.cas = GRN_UINT64_VALUE(&cas_buf);
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 4, flags);
+ });
+ grn_obj_close(ctx, &cas_buf);
+ }
+ }
+ }
+ break;
+ case MBCMD_SETQ :
+ case MBCMD_ADDQ :
+ case MBCMD_REPLACEQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_SET :
+ case MBCMD_ADD :
+ case MBCMD_REPLACE :
+ {
+ grn_id rid;
+ uint32_t size = ntohl(header->size);
+ uint16_t keylen = ntohs(header->keylen);
+ uint8_t extralen = header->level;
+ char *body = GRN_BULK_HEAD((grn_obj *)msg);
+ uint32_t flags = *((uint32_t *)body);
+ uint32_t expire = ntohl(*((uint32_t *)(body + 4)));
+ uint32_t valuelen = size - keylen - extralen;
+ char *key = body + 8;
+ char *value = key + keylen;
+ int added = 0;
+ int f = (header->qtype == MBCMD_REPLACE ||
+ header->qtype == MBCMD_REPLACEQ) ? 0 : GRN_TABLE_ADD;
+ GRN_ASSERT(extralen == 8);
+ cache_init(ctx);
+ if (header->qtype == MBCMD_REPLACE || header->qtype == MBCMD_REPLACEQ) {
+ rid = grn_table_get(ctx, cache_table, key, keylen);
+ } else {
+ rid = grn_table_add(ctx, cache_table, key, keylen, &added);
+ }
+ if (!rid) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, (f & GRN_TABLE_ADD) ? MBRES_ENOMEM : MBRES_NOT_STORED, 0, 0, 0);
+ });
+ } else {
+ if (added) {
+ if (header->cas) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_EINVAL, 0, 0, 0);
+ });
+ } else {
+ grn_obj text_buf, uint32_buf;
+ GRN_TEXT_INIT(&text_buf, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&text_buf, value, valuelen);
+ grn_obj_set_value(ctx, cache_value, rid, &text_buf, GRN_OBJ_SET);
+ GRN_UINT32_INIT(&uint32_buf, 0);
+ GRN_UINT32_SET(ctx, &uint32_buf, flags);
+ grn_obj_set_value(ctx, cache_flags, rid, &uint32_buf, GRN_OBJ_SET);
+ if (expire && expire < RELATIVE_TIME_THRESH) {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ expire += tv.tv_sec;
+ }
+ GRN_UINT32_SET(ctx, &uint32_buf, expire);
+ grn_obj_set_value(ctx, cache_expire, rid, &uint32_buf, GRN_OBJ_SET);
+ grn_obj_close(ctx, &uint32_buf);
+ {
+ grn_obj cas_buf;
+ uint64_t cas_id = get_mbreq_cas_id();
+ GRN_UINT64_INIT(&cas_buf, 0);
+ GRN_UINT64_SET(ctx, &cas_buf, cas_id);
+ grn_obj_set_value(ctx, cache_cas, rid, &cas_buf, GRN_OBJ_SET);
+ grn_obj_close(ctx, &cas_buf);
+ GRN_MSG_MBRES({
+ ((grn_msg *)re)->header.cas = cas_id;
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 0, 0);
+ });
+ }
+ }
+ } else {
+ if (header->qtype != MBCMD_SET && header->qtype != MBCMD_SETQ) {
+ grn_obj uint32_buf;
+ grn_timeval tv;
+ uint32_t oexpire;
+
+ GRN_UINT32_INIT(&uint32_buf, 0);
+ grn_obj_get_value(ctx, cache_expire, rid, &uint32_buf);
+ oexpire = GRN_UINT32_VALUE(&uint32_buf);
+ grn_timeval_now(ctx, &tv);
+
+ if (oexpire && oexpire < tv.tv_sec) {
+ if (header->qtype == MBCMD_REPLACE ||
+ header->qtype == MBCMD_REPLACEQ) {
+ grn_table_delete_by_id(ctx, cache_table, rid);
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_NOT_STORED, 0, 0, 0);
+ });
+ break;
+ }
+ } else if (header->qtype == MBCMD_ADD ||
+ header->qtype == MBCMD_ADDQ) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_NOT_STORED, 0, 0, 0);
+ });
+ break;
+ }
+ }
+ {
+ if (header->cas) {
+ grn_obj cas_buf;
+ GRN_UINT64_INIT(&cas_buf, 0);
+ grn_obj_get_value(ctx, cache_cas, rid, &cas_buf);
+ if (header->cas != GRN_UINT64_VALUE(&cas_buf)) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_NOT_STORED, 0, 0, 0);
+ });
+ }
+ }
+ {
+ grn_obj text_buf, uint32_buf;
+ GRN_TEXT_INIT(&text_buf, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&text_buf, value, valuelen);
+ grn_obj_set_value(ctx, cache_value, rid, &text_buf, GRN_OBJ_SET);
+ GRN_UINT32_INIT(&uint32_buf, 0);
+ GRN_UINT32_SET(ctx, &uint32_buf, flags);
+ grn_obj_set_value(ctx, cache_flags, rid, &uint32_buf, GRN_OBJ_SET);
+ if (expire && expire < RELATIVE_TIME_THRESH) {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ expire += tv.tv_sec;
+ }
+ GRN_UINT32_SET(ctx, &uint32_buf, expire);
+ grn_obj_set_value(ctx, cache_expire, rid, &uint32_buf, GRN_OBJ_SET);
+ {
+ grn_obj cas_buf;
+ uint64_t cas_id = get_mbreq_cas_id();
+ GRN_UINT64_INIT(&cas_buf, 0);
+ GRN_UINT64_SET(ctx, &cas_buf, cas_id);
+ grn_obj_set_value(ctx, cache_cas, rid, &cas_buf, GRN_OBJ_SET);
+ GRN_MSG_MBRES({
+ ((grn_msg *)re)->header.cas = cas_id;
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 0, 0);
+ });
+ }
+ }
+ }
+ }
+ }
+ }
+ break;
+ case MBCMD_DELETEQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_DELETE :
+ {
+ grn_id rid;
+ uint16_t keylen = ntohs(header->keylen);
+ char *key = GRN_BULK_HEAD((grn_obj *)msg);
+ cache_init(ctx);
+ rid = grn_table_get(ctx, cache_table, key, keylen);
+ if (!rid) {
+ /* GRN_LOG(ctx, GRN_LOG_NOTICE, "GET k=%d not found", keylen); */
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_table_delete_by_id(ctx, cache_table, rid);
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 4, 0);
+ });
+ }
+ }
+ break;
+ case MBCMD_INCREMENTQ :
+ case MBCMD_DECREMENTQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_INCREMENT :
+ case MBCMD_DECREMENT :
+ {
+ grn_id rid;
+ int added = 0;
+ uint64_t delta, init;
+ uint16_t keylen = ntohs(header->keylen);
+ char *body = GRN_BULK_HEAD((grn_obj *)msg);
+ char *key = body + 20;
+ uint32_t expire = ntohl(*((uint32_t *)(body + 16)));
+ grn_ntoh(&delta, body, 8);
+ grn_ntoh(&init, body + 8, 8);
+ GRN_ASSERT(header->level == 20); /* extralen */
+ cache_init(ctx);
+ if (expire == 0xffffffff) {
+ rid = grn_table_get(ctx, cache_table, key, keylen);
+ } else {
+ rid = grn_table_add(ctx, cache_table, key, keylen, &added);
+ }
+ if (!rid) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_obj uint32_buf, text_buf;
+ GRN_UINT32_INIT(&uint32_buf, 0);
+ GRN_TEXT_INIT(&text_buf, GRN_OBJ_DO_SHALLOW_COPY);
+ if (added) {
+ GRN_TEXT_SET_REF(&text_buf, &init, 8);
+ grn_obj_set_value(ctx, cache_value, rid, &text_buf, GRN_OBJ_SET);
+ GRN_UINT32_SET(ctx, &uint32_buf, 0);
+ grn_obj_set_value(ctx, cache_flags, rid, &uint32_buf, GRN_OBJ_SET);
+ } else {
+ grn_timeval tv;
+ uint32_t oexpire;
+
+ grn_obj_get_value(ctx, cache_expire, rid, &uint32_buf);
+ oexpire = GRN_UINT32_VALUE(&uint32_buf);
+ grn_timeval_now(ctx, &tv);
+
+ if (oexpire && oexpire < tv.tv_sec) {
+ if (expire == 0xffffffffU) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ break;
+ } else {
+ GRN_TEXT_SET_REF(&text_buf, &init, 8);
+ grn_obj_set_value(ctx, cache_value, rid, &text_buf, GRN_OBJ_SET);
+ GRN_UINT32_SET(ctx, &uint32_buf, 0);
+ grn_obj_set_value(ctx, cache_flags, rid, &uint32_buf, GRN_OBJ_SET);
+ }
+ } else {
+ grn_obj uint64_buf;
+ GRN_UINT64_INIT(&uint64_buf, 0);
+ GRN_UINT64_SET(ctx, &uint64_buf, delta);
+ grn_obj_set_value(ctx, cache_value, rid, &uint64_buf,
+ header->qtype == MBCMD_INCREMENT ||
+ header->qtype == MBCMD_INCREMENTQ
+ ? GRN_OBJ_INCR
+ : GRN_OBJ_DECR);
+ }
+ }
+ if (expire && expire < RELATIVE_TIME_THRESH) {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ expire += tv.tv_sec;
+ }
+ GRN_UINT32_SET(ctx, &uint32_buf, expire);
+ grn_obj_set_value(ctx, cache_expire, rid, &uint32_buf, GRN_OBJ_SET);
+ GRN_MSG_MBRES({
+ /* TODO: get_mbreq_cas_id() */
+ grn_obj_get_value(ctx, cache_value, rid, re);
+ grn_hton(&delta, (uint64_t *)GRN_BULK_HEAD(re), 8);
+ GRN_TEXT_SET(ctx, re, &delta, sizeof(uint64_t));
+ MBRES(ctx, re, MBRES_SUCCESS, 0, sizeof(uint64_t), 0);
+ });
+ }
+ }
+ break;
+ case MBCMD_FLUSHQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_FLUSH :
+ {
+ uint32_t expire;
+ uint8_t extralen = header->level;
+ if (extralen) {
+ char *body = GRN_BULK_HEAD((grn_obj *)msg);
+ GRN_ASSERT(extralen == 4);
+ expire = ntohl(*((uint32_t *)(body)));
+ if (expire < RELATIVE_TIME_THRESH) {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ if (expire) {
+ expire += tv.tv_sec;
+ } else {
+ expire = tv.tv_sec - 1;
+ }
+ }
+ } else {
+ grn_timeval tv;
+ grn_timeval_now(ctx, &tv);
+ expire = tv.tv_sec - 1;
+ }
+ {
+ grn_obj exp_buf;
+ GRN_UINT32_INIT(&exp_buf, 0);
+ GRN_UINT32_SET(ctx, &exp_buf, expire);
+ GRN_TABLE_EACH(ctx, cache_table, 0, 0, rid, NULL, NULL, NULL, {
+ grn_obj_set_value(ctx, cache_expire, rid, &exp_buf, GRN_OBJ_SET);
+ });
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 4, 0);
+ });
+ grn_obj_close(ctx, &exp_buf);
+ }
+ }
+ break;
+ case MBCMD_NOOP :
+ break;
+ case MBCMD_VERSION :
+ GRN_MSG_MBRES({
+ grn_bulk_write(ctx, re, PACKAGE_VERSION, strlen(PACKAGE_VERSION));
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 0, 0);
+ });
+ break;
+ case MBCMD_GETKQ :
+ flags = GRN_CTX_MORE;
+ /* fallthru */
+ case MBCMD_GETK :
+ {
+ grn_id rid;
+ uint16_t keylen = ntohs(header->keylen);
+ char *key = GRN_BULK_HEAD((grn_obj *)msg);
+ cache_init(ctx);
+ rid = grn_table_get(ctx, cache_table, key, keylen);
+ if (!rid) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_obj uint32_buf;
+ grn_timeval tv;
+ uint32_t expire;
+ GRN_UINT32_INIT(&uint32_buf, 0);
+ grn_obj_get_value(ctx, cache_expire, rid, &uint32_buf);
+ expire = GRN_UINT32_VALUE(&uint32_buf);
+ grn_timeval_now(ctx, &tv);
+ if (expire && expire < tv.tv_sec) {
+ grn_table_delete_by_id(ctx, cache_table, rid);
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_KEY_ENOENT, 0, 0, 0);
+ });
+ } else {
+ grn_obj uint64_buf;
+ GRN_UINT64_INIT(&uint64_buf, 0);
+ grn_obj_get_value(ctx, cache_cas, rid, &uint64_buf);
+ GRN_MSG_MBRES({
+ grn_obj_get_value(ctx, cache_flags, rid, re);
+ grn_bulk_write(ctx, re, key, keylen);
+ grn_obj_get_value(ctx, cache_value, rid, re);
+ ((grn_msg *)re)->header.cas = GRN_UINT64_VALUE(&uint64_buf);
+ MBRES(ctx, re, MBRES_SUCCESS, keylen, 4, flags);
+ });
+ }
+ }
+ }
+ break;
+ case MBCMD_APPENDQ :
+ case MBCMD_PREPENDQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_APPEND :
+ case MBCMD_PREPEND :
+ {
+ grn_id rid;
+ uint32_t size = ntohl(header->size);
+ uint16_t keylen = ntohs(header->keylen);
+ char *key = GRN_BULK_HEAD((grn_obj *)msg);
+ char *value = key + keylen;
+ uint32_t valuelen = size - keylen;
+ cache_init(ctx);
+ rid = grn_table_add(ctx, cache_table, key, keylen, NULL);
+ if (!rid) {
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_ENOMEM, 0, 0, 0);
+ });
+ } else {
+ /* FIXME: check expire */
+ grn_obj buf;
+ int flags = header->qtype == MBCMD_APPEND ? GRN_OBJ_APPEND : GRN_OBJ_PREPEND;
+ GRN_TEXT_INIT(&buf, GRN_OBJ_DO_SHALLOW_COPY);
+ GRN_TEXT_SET_REF(&buf, value, valuelen);
+ grn_obj_set_value(ctx, cache_value, rid, &buf, flags);
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 0, 0);
+ });
+ }
+ }
+ break;
+ case MBCMD_STAT :
+ {
+ pid_t pid = getpid();
+ GRN_MSG_MBRES({
+ grn_bulk_write(ctx, re, "pid", 3);
+ grn_text_itoa(ctx, re, pid);
+ MBRES(ctx, re, MBRES_SUCCESS, 3, 0, 0);
+ });
+ }
+ break;
+ case MBCMD_QUITQ :
+ quiet = 1;
+ /* fallthru */
+ case MBCMD_QUIT :
+ GRN_MSG_MBRES({
+ MBRES(ctx, re, MBRES_SUCCESS, 0, 0, 0);
+ });
+ /* fallthru */
+ default :
+ ctx->stat = GRN_CTX_QUIT;
+ break;
+ }
+}
+
+/* worker thread */
+
+enum {
+ EDGE_IDLE = 0x00,
+ EDGE_WAIT = 0x01,
+ EDGE_DOING = 0x02,
+ EDGE_ABORT = 0x03,
+};
+
+static void
+check_rlimit_nofile(grn_ctx *ctx)
+{
+#ifndef WIN32
+ struct rlimit limit;
+ limit.rlim_cur = 0;
+ limit.rlim_max = 0;
+ getrlimit(RLIMIT_NOFILE, &limit);
+ if (limit.rlim_cur < RLIMIT_NOFILE_MINIMUM) {
+ limit.rlim_cur = RLIMIT_NOFILE_MINIMUM;
+ limit.rlim_max = RLIMIT_NOFILE_MINIMUM;
+ setrlimit(RLIMIT_NOFILE, &limit);
+ limit.rlim_cur = 0;
+ limit.rlim_max = 0;
+ getrlimit(RLIMIT_NOFILE, &limit);
+ }
+ GRN_LOG(ctx, GRN_LOG_NOTICE,
+ "RLIMIT_NOFILE(%" GRN_FMT_LLD ",%" GRN_FMT_LLD ")",
+ (long long int)limit.rlim_cur, (long long int)limit.rlim_max);
+#endif /* WIN32 */
+}
+
+static void * CALLBACK
+h_worker(void *arg)
+{
+ ht_context hc;
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ grn_ctx_use(ctx, (grn_obj *)arg);
+ grn_ctx_recv_handler_set(ctx, h_output, &hc);
+ GRN_LOG(&grn_gctx, GRN_LOG_NOTICE, "thread start (%d/%d)", nfthreads, nthreads + 1);
+ MUTEX_LOCK(q_mutex);
+ do {
+ grn_obj *msg;
+ nfthreads++;
+ while (!(msg = (grn_obj *)grn_com_queue_deque(&grn_gctx, &ctx_new))) {
+ COND_WAIT(q_cond, q_mutex);
+ if (grn_gctx.stat == GRN_CTX_QUIT) {
+ nfthreads--;
+ goto exit;
+ }
+ }
+ nfthreads--;
+ MUTEX_UNLOCK(q_mutex);
+ hc.msg = (grn_msg *)msg;
+ do_htreq(ctx, (grn_msg *)msg);
+ MUTEX_LOCK(q_mutex);
+ } while (nfthreads < max_nfthreads && grn_gctx.stat != GRN_CTX_QUIT);
+exit :
+ nthreads--;
+ MUTEX_UNLOCK(q_mutex);
+ GRN_LOG(&grn_gctx, GRN_LOG_NOTICE, "thread end (%d/%d)", nfthreads, nthreads);
+ grn_ctx_fin(ctx);
+ return NULL;
+}
+
+static void
+h_handler(grn_ctx *ctx, grn_obj *msg)
+{
+ grn_com *com = ((grn_msg *)msg)->u.peer;
+ if (ctx->rc) {
+ grn_com_close(ctx, com);
+ grn_msg_close(ctx, msg);
+ } else {
+ grn_sock fd = com->fd;
+ void *arg = com->ev->opaque;
+ /* if not keep alive connection */
+ grn_com_event_del(ctx, com->ev, fd);
+ ((grn_msg *)msg)->u.fd = fd;
+ MUTEX_LOCK(q_mutex);
+ grn_com_queue_enque(ctx, &ctx_new, (grn_com_queue_entry *)msg);
+ if (!nfthreads && nthreads < max_nfthreads) {
+ grn_thread thread;
+ nthreads++;
+ if (THREAD_CREATE(thread, h_worker, arg)) { SERR("pthread_create"); }
+ }
+ COND_SIGNAL(q_cond);
+ MUTEX_UNLOCK(q_mutex);
+ }
+}
+
+static int
+h_server(char *path)
+{
+ int exit_code = EXIT_FAILURE;
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ MUTEX_INIT(q_mutex);
+ COND_INIT(q_cond);
+ CRITICAL_SECTION_INIT(cache_lock);
+ GRN_COM_QUEUE_INIT(&ctx_new);
+ GRN_COM_QUEUE_INIT(&ctx_old);
+ check_rlimit_nofile(ctx);
+ exit_code = start_service(ctx, path, NULL, h_handler);
+ grn_ctx_fin(ctx);
+ return exit_code;
+}
+
+static void * CALLBACK
+g_worker(void *arg)
+{
+ GRN_LOG(&grn_gctx, GRN_LOG_NOTICE, "thread start (%d/%d)", nfthreads, nthreads + 1);
+ MUTEX_LOCK(q_mutex);
+ do {
+ grn_ctx *ctx;
+ grn_edge *edge;
+ nfthreads++;
+ while (!(edge = (grn_edge *)grn_com_queue_deque(&grn_gctx, &ctx_new))) {
+ COND_WAIT(q_cond, q_mutex);
+ if (grn_gctx.stat == GRN_CTX_QUIT) {
+ nfthreads--;
+ goto exit;
+ }
+ }
+ ctx = &edge->ctx;
+ nfthreads--;
+ if (edge->stat == EDGE_DOING) { continue; }
+ if (edge->stat == EDGE_WAIT) {
+ edge->stat = EDGE_DOING;
+ while (!GRN_COM_QUEUE_EMPTYP(&edge->recv_new)) {
+ grn_obj *msg;
+ MUTEX_UNLOCK(q_mutex);
+ /* if (edge->flags == GRN_EDGE_WORKER) */
+ while (ctx->stat != GRN_CTX_QUIT &&
+ (edge->msg = (grn_msg *)grn_com_queue_deque(ctx, &edge->recv_new))) {
+ grn_com_header *header = &edge->msg->header;
+ msg = (grn_obj *)edge->msg;
+ switch (header->proto) {
+ case GRN_COM_PROTO_MBREQ :
+ do_mbreq(ctx, edge);
+ break;
+ case GRN_COM_PROTO_GQTP :
+ grn_ctx_send(ctx, GRN_BULK_HEAD(msg), GRN_BULK_VSIZE(msg), header->flags);
+ ERRCLR(ctx);
+ break;
+ default :
+ ctx->stat = GRN_CTX_QUIT;
+ break;
+ }
+ grn_msg_close(ctx, msg);
+ }
+ while ((msg = (grn_obj *)grn_com_queue_deque(ctx, &edge->send_old))) {
+ grn_msg_close(ctx, msg);
+ }
+ MUTEX_LOCK(q_mutex);
+ if (ctx->stat == GRN_CTX_QUIT || edge->stat == EDGE_ABORT) { break; }
+ }
+ }
+ if (ctx->stat == GRN_CTX_QUIT || edge->stat == EDGE_ABORT) {
+ grn_com_queue_enque(&grn_gctx, &ctx_old, (grn_com_queue_entry *)edge);
+ edge->stat = EDGE_ABORT;
+ } else {
+ edge->stat = EDGE_IDLE;
+ }
+ } while (nfthreads < max_nfthreads && grn_gctx.stat != GRN_CTX_QUIT);
+exit :
+ nthreads--;
+ MUTEX_UNLOCK(q_mutex);
+ GRN_LOG(&grn_gctx, GRN_LOG_NOTICE, "thread end (%d/%d)", nfthreads, nthreads);
+ return NULL;
+}
+
+static void
+g_dispatcher(grn_ctx *ctx, grn_edge *edge)
+{
+ MUTEX_LOCK(q_mutex);
+ if (edge->stat == EDGE_IDLE) {
+ grn_com_queue_enque(ctx, &ctx_new, (grn_com_queue_entry *)edge);
+ edge->stat = EDGE_WAIT;
+ if (!nfthreads && nthreads < max_nfthreads) {
+ grn_thread thread;
+ nthreads++;
+ if (THREAD_CREATE(thread, g_worker, NULL)) { SERR("pthread_create"); }
+ }
+ COND_SIGNAL(q_cond);
+ }
+ MUTEX_UNLOCK(q_mutex);
+}
+
+static void
+g_output(grn_ctx *ctx, int flags, void *arg)
+{
+ grn_edge *edge = arg;
+ grn_com *com = edge->com;
+ grn_msg *req = edge->msg, *msg = (grn_msg *)ctx->impl->outbuf;
+ msg->edge_id = req->edge_id;
+ msg->header.proto = req->header.proto == GRN_COM_PROTO_MBREQ
+ ? GRN_COM_PROTO_MBRES : req->header.proto;
+ if (ctx->rc != GRN_SUCCESS && GRN_BULK_VSIZE(ctx->impl->outbuf) == 0) {
+ GRN_TEXT_PUTS(ctx, ctx->impl->outbuf, ctx->errbuf);
+ }
+ if (grn_msg_send(ctx, (grn_obj *)msg,
+ (flags & GRN_CTX_MORE) ? GRN_CTX_MORE : GRN_CTX_TAIL)) {
+ edge->stat = EDGE_ABORT;
+ }
+ ctx->impl->outbuf = grn_msg_open(ctx, com, &edge->send_old);
+}
+
+static void
+g_handler(grn_ctx *ctx, grn_obj *msg)
+{
+ grn_edge *edge;
+ grn_com *com = ((grn_msg *)msg)->u.peer;
+ if (ctx->rc) {
+ if (com->has_sid) {
+ if ((edge = com->opaque)) {
+ MUTEX_LOCK(q_mutex);
+ if (edge->stat == EDGE_IDLE) {
+ grn_com_queue_enque(ctx, &ctx_old, (grn_com_queue_entry *)edge);
+ }
+ edge->stat = EDGE_ABORT;
+ MUTEX_UNLOCK(q_mutex);
+ } else {
+ grn_com_close(ctx, com);
+ }
+ }
+ grn_msg_close(ctx, msg);
+ } else {
+ int added;
+ edge = grn_edges_add(ctx, &((grn_msg *)msg)->edge_id, &added);
+ if (added) {
+ grn_ctx_init(&edge->ctx, 0);
+ GRN_COM_QUEUE_INIT(&edge->recv_new);
+ GRN_COM_QUEUE_INIT(&edge->send_old);
+ grn_ctx_use(&edge->ctx, (grn_obj *)com->ev->opaque);
+ grn_ctx_recv_handler_set(&edge->ctx, g_output, edge);
+ com->opaque = edge;
+ grn_obj_close(&edge->ctx, edge->ctx.impl->outbuf);
+ edge->ctx.impl->outbuf = grn_msg_open(&edge->ctx, com, &edge->send_old);
+ edge->com = com;
+ edge->stat = EDGE_IDLE;
+ edge->flags = GRN_EDGE_WORKER;
+ }
+ if (edge->ctx.stat == GRN_CTX_QUIT || edge->stat == EDGE_ABORT) {
+ grn_msg_close(ctx, msg);
+ } else {
+ grn_com_queue_enque(ctx, &edge->recv_new, (grn_com_queue_entry *)msg);
+ g_dispatcher(ctx, edge);
+ }
+ }
+}
+
+static int
+g_server(char *path)
+{
+ int exit_code = EXIT_FAILURE;
+ grn_ctx ctx_, *ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ MUTEX_INIT(q_mutex);
+ COND_INIT(q_cond);
+ CRITICAL_SECTION_INIT(cache_lock);
+ GRN_COM_QUEUE_INIT(&ctx_new);
+ GRN_COM_QUEUE_INIT(&ctx_old);
+ check_rlimit_nofile(ctx);
+ exit_code = start_service(ctx, path, g_dispatcher, g_handler);
+ grn_ctx_fin(ctx);
+ return exit_code;
+}
+
+enum {
+ mode_alone = 0,
+ mode_client,
+ mode_daemon,
+ mode_server,
+ mode_usage,
+ mode_version,
+ mode_config,
+ mode_error
+};
+
+#define MODE_MASK 0x007f
+#define MODE_NEW_DB 0x0100
+
+static uint32_t
+get_core_number(void)
+{
+#ifdef WIN32
+ SYSTEM_INFO sinfo;
+ GetSystemInfo(&sinfo);
+ return sinfo.dwNumberOfProcessors;
+#else /* WIN32 */
+# ifdef _SC_NPROCESSORS_CONF
+ return sysconf(_SC_NPROCESSORS_CONF);
+# else
+ int n_processors;
+ size_t length = sizeof(n_processors);
+ int mib[] = {CTL_HW, HW_NCPU};
+ if (sysctl(mib, sizeof(mib) / sizeof(mib[0]),
+ &n_processors, &length, NULL, 0) == 0 &&
+ length == sizeof(n_processors) &&
+ 0 < n_processors) {
+ return n_processors;
+ } else {
+ return 1;
+ }
+# endif /* _SC_NPROCESSORS_CONF */
+#endif /* WIN32 */
+}
+
+/*
+ * The length of each line, including an end-of-line, in config file should be
+ * shorter than (CONFIG_FILE_BUF_SIZE - 1) bytes. Too long lines are ignored.
+ * Note that both '\r' and '\n' are handled as end-of-lines.
+ *
+ * '#' and ';' are special symbols to start comments. A comment ends with an
+ * end-of-line.
+ *
+ * Format: name[=value]
+ * - Preceding/trailing white-spaces of each line are removed.
+ * - White-spaces aroung '=' are removed.
+ * - name does not allow white-spaces.
+ */
+#define CONFIG_FILE_BUF_SIZE 4096
+#define CONFIG_FILE_MAX_NAME_LENGTH 128
+#define CONFIG_FILE_MAX_VALUE_LENGTH 2048
+
+typedef enum {
+ CONFIG_FILE_SUCCESS,
+ CONFIG_FILE_FORMAT_ERROR,
+ CONFIG_FILE_FOPEN_ERROR,
+ CONFIG_FILE_MALLOC_ERROR,
+ CONFIG_FILE_ATEXIT_ERROR
+} config_file_status;
+
+/*
+ * The node type of a linked list for storing values. Note that a value is
+ * stored in the extra space of an object.
+ */
+typedef struct _config_file_entry {
+ struct _config_file_entry *next;
+} config_file_entry;
+
+static config_file_entry *config_file_entry_head = NULL;
+
+static void
+config_file_clear(void) {
+ while (config_file_entry_head) {
+ config_file_entry *next = config_file_entry_head->next;
+ free(config_file_entry_head);
+ config_file_entry_head = next;
+ }
+}
+
+static config_file_status
+config_file_register(const char *path, const grn_str_getopt_opt *opts,
+ int *flags, const char *name, size_t name_length,
+ const char *value, size_t value_length)
+{
+ char name_buf[CONFIG_FILE_MAX_NAME_LENGTH + 3];
+ config_file_entry *entry = NULL;
+ char *args[4];
+
+ name_buf[0] = name_buf[1] = '-';
+ strcpy(name_buf + 2, name);
+
+ if (value) {
+ const size_t entry_size = sizeof(config_file_entry) + value_length + 1;
+ entry = (config_file_entry *)malloc(entry_size);
+ if (!entry) {
+ fprintf(stderr, "memory allocation failed: %u bytes\n",
+ (unsigned int)entry_size);
+ return CONFIG_FILE_MALLOC_ERROR;
+ }
+ strcpy((char *)(entry + 1), value);
+ entry->next = config_file_entry_head;
+ if (!config_file_entry_head) {
+ if (atexit(config_file_clear)) {
+ free(entry);
+ return CONFIG_FILE_ATEXIT_ERROR;
+ }
+ }
+ config_file_entry_head = entry;
+ }
+
+ args[0] = (char *)path;
+ args[1] = name_buf;
+ args[2] = entry ? (char *)(entry + 1) : NULL;
+ args[3] = NULL;
+ grn_str_getopt(entry ? 3 : 2, args, opts, flags);
+ return CONFIG_FILE_SUCCESS;
+}
+
+static config_file_status
+config_file_parse(const char *path, const grn_str_getopt_opt *opts,
+ int *flags, char *buf) {
+ char *ptr, *name, *value;
+ size_t name_length, value_length;
+
+ while (isspace(*buf)) {
+ buf++;
+ }
+
+ ptr = buf;
+ while (*ptr && *ptr != '#' && *ptr != ';') {
+ ptr++;
+ }
+
+ do {
+ *ptr-- = '\0';
+ } while (ptr >= buf && isspace(*ptr));
+
+ if (!*buf) {
+ return CONFIG_FILE_SUCCESS;
+ }
+
+ name = ptr = buf;
+ while (*ptr && !isspace(*ptr) && *ptr != '=') {
+ ptr++;
+ }
+ while (isspace(*ptr)) {
+ *ptr++ = '\0';
+ }
+
+ name_length = strlen(name);
+ if (name_length == 0) {
+ return CONFIG_FILE_SUCCESS;
+ } else if (name_length > CONFIG_FILE_MAX_NAME_LENGTH) {
+ fprintf(stderr, "too long name in config file: %u bytes\n",
+ (unsigned int)name_length);
+ return CONFIG_FILE_FORMAT_ERROR;
+ }
+
+ if (*ptr == '=') {
+ *ptr++ = '\0';
+ while (isspace(*ptr)) {
+ ptr++;
+ }
+ value = ptr;
+ } else if (*ptr) {
+ fprintf(stderr, "invalid name in config file\n");
+ return CONFIG_FILE_FORMAT_ERROR;
+ } else {
+ value = NULL;
+ }
+
+ value_length = value ? strlen(value) : 0;
+ if (value_length > CONFIG_FILE_MAX_VALUE_LENGTH) {
+ fprintf(stderr, "too long value in config file: %u bytes\n",
+ (unsigned int)value_length);
+ return CONFIG_FILE_FORMAT_ERROR;
+ }
+
+ return config_file_register(path, opts, flags,
+ name, name_length, value, value_length);
+}
+
+static config_file_status
+config_file_load(const char *path, const grn_str_getopt_opt *opts, int *flags)
+{
+ config_file_status status = CONFIG_FILE_SUCCESS;
+ char buf[CONFIG_FILE_BUF_SIZE];
+ size_t length = 0;
+ FILE * const file = fopen(path, "rb");
+ if (!file) {
+ return CONFIG_FILE_FOPEN_ERROR;
+ }
+
+ for ( ; ; ) {
+ int c = fgetc(file);
+ if (c == '\r' || c == '\n' || c == EOF) {
+ if (length < sizeof(buf) - 1) {
+ buf[length] = '\0';
+ status = config_file_parse(path, opts, flags, buf);
+ if (status != CONFIG_FILE_SUCCESS) {
+ break;
+ }
+ }
+ length = 0;
+ } else if (c == '\0') {
+ fprintf(stderr, "prohibited '\\0' in config file: %s\n", path);
+ status = CONFIG_FILE_FORMAT_ERROR;
+ break;
+ } else {
+ if (length < sizeof(buf) - 1) {
+ buf[length] = (char)c;
+ }
+ length++;
+ }
+
+ if (c == EOF) {
+ break;
+ }
+ }
+
+ fclose(file);
+ return status;
+}
+
+static const int default_http_port = DEFAULT_HTTP_PORT;
+static const int default_gqtp_port = DEFAULT_GQTP_PORT;
+static grn_encoding default_encoding = GRN_ENC_DEFAULT;
+static uint32_t default_max_num_threads = DEFAULT_MAX_NFTHREADS;
+static const int default_mode = mode_alone;
+static const int default_log_level = GRN_LOG_DEFAULT_LEVEL;
+static const char * const default_protocol = "gqtp";
+static const char *default_hostname = "localhost";
+static const char * const default_dest = "localhost";
+static const char *default_log_path = "";
+static const char *default_query_log_path = "";
+static const char *default_config_path = "";
+static const char *default_document_root = "";
+static grn_command_version default_default_command_version =
+ GRN_COMMAND_VERSION_DEFAULT;
+static int64_t default_default_match_escalation_threshold = 0;
+static const char * const default_bind_address = "0.0.0.0";
+
+static void
+init_default_hostname(void)
+{
+ static char hostname[HOST_NAME_MAX + 1];
+ struct addrinfo hints, *result;
+
+ hostname[HOST_NAME_MAX] = '\0';
+ if (gethostname(hostname, HOST_NAME_MAX) == -1)
+ return;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_addr = NULL;
+ hints.ai_canonname = NULL;
+ hints.ai_next = NULL;
+ if (getaddrinfo(hostname, NULL, &hints, &result) != 0)
+ return;
+ freeaddrinfo(result);
+
+ default_hostname = hostname;
+}
+
+static void
+init_default_settings(void)
+{
+ output = stdout;
+
+ default_encoding = grn_encoding_parse(GRN_DEFAULT_ENCODING);
+
+ {
+ const uint32_t num_cores = get_core_number();
+ if (num_cores != 0) {
+ default_max_num_threads = num_cores;
+ }
+ }
+
+ init_default_hostname();
+
+ default_log_path = grn_default_logger_get_path();
+ default_query_log_path = grn_default_query_logger_get_path();
+
+ default_config_path = getenv("GRN_CONFIG_PATH");
+ if (!default_config_path) {
+ default_config_path = GRN_CONFIG_PATH;
+ if (!default_config_path) {
+ default_config_path = "";
+ }
+ }
+
+#ifdef WIN32
+ {
+ static char win32_default_document_root[PATH_MAX];
+ size_t document_root_length = strlen(grn_win32_base_dir()) + 1 +
+ strlen(GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT) + 1;
+ if (document_root_length >= PATH_MAX) {
+ fprintf(stderr, "can't use default root: too long path\n");
+ } else {
+ strcpy(win32_default_document_root, grn_win32_base_dir());
+ strcat(win32_default_document_root, "/");
+ strcat(win32_default_document_root, GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT);
+ default_document_root = win32_default_document_root;
+ }
+ }
+#else
+ default_document_root = GRN_DEFAULT_DOCUMENT_ROOT;
+#endif
+
+ default_default_command_version = grn_get_default_command_version();
+ default_default_match_escalation_threshold =
+ grn_get_default_match_escalation_threshold();
+}
+
+static void
+show_config(FILE *out, const grn_str_getopt_opt *opts, int flags)
+{
+ const grn_str_getopt_opt *o;
+
+ for (o = opts; o->opt || o->longopt; o++) {
+ switch (o->op) {
+ case GETOPT_OP_NONE:
+ if (o->arg && *o->arg) {
+ if (o->longopt && strcmp(o->longopt, "config-path")) {
+ fprintf(out, "%s=%s\n", o->longopt, *o->arg);
+ }
+ }
+ break;
+ case GETOPT_OP_ON:
+ if (flags & o->flag) {
+ goto no_arg;
+ }
+ break;
+ case GETOPT_OP_OFF:
+ if (!(flags & o->flag)) {
+ goto no_arg;
+ }
+ break;
+ case GETOPT_OP_UPDATE:
+ if (flags == o->flag) {
+ no_arg:
+ if (o->longopt) {
+ fprintf(out, "%s\n", o->longopt);
+ }
+ }
+ break;
+ }
+ }
+}
+
+static void
+show_version(void)
+{
+ printf("%s %s [",
+ grn_get_package(),
+ grn_get_version());
+
+ /* FIXME: Should we detect host information dynamically on Windows? */
+#ifdef HOST_OS
+ printf("%s,", HOST_OS);
+#endif
+#ifdef HOST_CPU
+ printf("%s,", HOST_CPU);
+#endif
+ printf("%s", GRN_DEFAULT_ENCODING);
+
+ printf(",match-escalation-threshold=%" GRN_FMT_LLD,
+ grn_get_default_match_escalation_threshold());
+
+#ifndef NO_NFKC
+ printf(",nfkc");
+#endif
+#ifdef GRN_WITH_MECAB
+ printf(",mecab");
+#endif
+#ifdef GRN_WITH_MESSAGE_PACK
+ printf(",msgpack");
+#endif
+#ifdef GRN_WITH_ZLIB
+ printf(",zlib");
+#endif
+#ifdef GRN_WITH_LZO
+ printf(",lzo");
+#endif
+#ifdef USE_KQUEUE
+ printf(",kqueue");
+#endif
+#ifdef USE_EPOLL
+ printf(",epoll");
+#endif
+#ifdef USE_POLL
+ printf(",poll");
+#endif
+ printf("]\n");
+
+#ifdef CONFIGURE_OPTIONS
+ printf("\n");
+ printf("configure options: <%s>\n", CONFIGURE_OPTIONS);
+#endif
+}
+
+static void
+show_usage(FILE *output)
+{
+ uint32_t default_cache_limit = GRN_CACHE_DEFAULT_MAX_N_ENTRIES;
+
+ fprintf(output,
+ "Usage: groonga [options...] [dest]\n"
+ "\n"
+ "Mode options: (default: standalone)\n"
+ " By default, groonga runs in standalone mode.\n"
+ " -c: run in client mode\n"
+ " -s: run in server mode\n"
+ " -d: run in daemon mode\n"
+ "\n"
+ "Database creation options:\n"
+ " -n: create new database (except client mode)\n"
+ " -e, --encoding <encoding>:\n"
+ " specify encoding for new database\n"
+ " [none|euc|utf8|sjis|latin1|koi8r] (default: %s)\n"
+ "\n"
+ "Standalone/client options:\n"
+ " --file <path>: read commands from specified file\n"
+ " --input-fd <FD>: read commands from specified file descriptor\n"
+ " --file has a prioriry over --input-fd\n"
+ " --output-fd <FD>: output response to specifid file descriptor\n"
+ " -p, --port <port number>: specify server port number (client mode only)\n"
+ " (default: %d)\n"
+ "\n"
+ "Server/daemon options:\n"
+ " --bind-address <ip/hostname>:\n"
+ " specify server address to bind\n"
+ " (default: %s)\n"
+ " -p, --port <port number>: specify server port number\n"
+ " (HTTP default: %d, GQTP default: %d)\n"
+ " -i, --server-id <ip/hostname>:\n"
+ " specify server ID address (default: %s)\n"
+ " --protocol <protocol>: specify server protocol to listen\n"
+ " [gqtp|http|memcached] (default: %s)\n"
+ " --document-root <path>: specify document root path (http only)\n"
+ " (default: %s)\n"
+ " --cache-limit <limit>: specify max number of cache data (default: %u)\n"
+ " -t, --max-threads <max threads>:\n"
+ " specify max number of threads (default: %u)\n"
+ " --pid-path <path>: specify file to write process ID to\n"
+ " (daemon mode only)\n"
+ "\n"
+ "Logging options:\n"
+ " -l, --log-level <log level>:\n"
+ " specify log level (default: %d)\n"
+ " --log-path <path>: specify log path\n"
+ " (default: %s)\n"
+ " --query-log-path <path>:\n"
+ " specify query log path\n"
+ " (default: %s)\n"
+ "\n"
+ "Common options:\n"
+ " --working-directory <path>:\n"
+ " specify working directory path\n"
+ " (none)\n"
+ " --config-path <path>:\n"
+ " specify config file path\n"
+ " (default: %s)\n"
+ " --default-command-version <version>:\n"
+ " specify default command version (default: %d)\n"
+ " --default-match-escalation-threshold <threshold>:\n"
+ " specify default match escalation threshold"
+ " (default: %" GRN_FMT_LLD ")\n"
+ "\n"
+ " --show-config: show config\n"
+ " -h, --help: show usage\n"
+ " --version: show groonga version\n"
+ "\n"
+ "dest:\n"
+ " <db pathname> [<commands>]: in standalone mode\n"
+ " <db pathname>: in server/daemon mode\n"
+ " <dest hostname> [<commands>]: in client mode (default: %s)\n",
+ grn_encoding_to_string(default_encoding),
+ default_gqtp_port, default_bind_address,
+ default_http_port, default_gqtp_port, default_hostname, default_protocol,
+ default_document_root, default_cache_limit, default_max_num_threads,
+ default_log_level, default_log_path, default_query_log_path,
+ default_config_path, default_default_command_version,
+ (long long int)default_default_match_escalation_threshold,
+ default_dest);
+}
+
+int
+main(int argc, char **argv)
+{
+ const char *port_arg = NULL, *encoding_arg = NULL,
+ *max_num_threads_arg = NULL, *log_level_arg = NULL,
+ *bind_address_arg = NULL, *hostname_arg = NULL, *protocol_arg = NULL,
+ *log_path_arg = NULL, *query_log_path_arg = NULL,
+ *cache_limit_arg = NULL, *document_root_arg = NULL,
+ *default_command_version_arg = NULL,
+ *default_match_escalation_threshold_arg = NULL,
+ *input_fd_arg = NULL, *output_fd_arg = NULL,
+ *working_directory_arg = NULL;
+ const char *config_path = NULL;
+ int exit_code = EXIT_SUCCESS;
+ int i, mode = mode_alone;
+ uint32_t cache_limit = 0;
+ static grn_str_getopt_opt opts[] = {
+ {'p', "port", NULL, 0, GETOPT_OP_NONE},
+ {'e', "encoding", NULL, 0, GETOPT_OP_NONE},
+ {'t', "max-threads", NULL, 0, GETOPT_OP_NONE},
+ {'h', "help", NULL, mode_usage, GETOPT_OP_UPDATE},
+ {'c', NULL, NULL, mode_client, GETOPT_OP_UPDATE},
+ {'d', NULL, NULL, mode_daemon, GETOPT_OP_UPDATE},
+ {'s', NULL, NULL, mode_server, GETOPT_OP_UPDATE},
+ {'l', "log-level", NULL, 0, GETOPT_OP_NONE},
+ {'i', "server-id", NULL, 0, GETOPT_OP_NONE},
+ {'n', NULL, NULL, MODE_NEW_DB, GETOPT_OP_ON},
+ {'\0', "protocol", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "version", NULL, mode_version, GETOPT_OP_UPDATE},
+ {'\0', "log-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "query-log-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "pid-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "config-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "show-config", NULL, mode_config, GETOPT_OP_UPDATE},
+ {'\0', "cache-limit", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "file", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "document-root", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "default-command-version", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "default-match-escalation-threshold", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "bind-address", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "input-fd", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "output-fd", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "working-directory", NULL, 0, GETOPT_OP_NONE},
+ {'\0', NULL, NULL, 0, 0}
+ };
+ opts[0].arg = &port_arg;
+ opts[1].arg = &encoding_arg;
+ opts[2].arg = &max_num_threads_arg;
+ opts[7].arg = &log_level_arg;
+ opts[8].arg = &hostname_arg;
+ opts[10].arg = &protocol_arg;
+ opts[12].arg = &log_path_arg;
+ opts[13].arg = &query_log_path_arg;
+ opts[14].arg = &pid_file_path;
+ opts[15].arg = &config_path;
+ opts[17].arg = &cache_limit_arg;
+ opts[18].arg = &input_path;
+ opts[19].arg = &document_root_arg;
+ opts[20].arg = &default_command_version_arg;
+ opts[21].arg = &default_match_escalation_threshold_arg;
+ opts[22].arg = &bind_address_arg;
+ opts[23].arg = &input_fd_arg;
+ opts[24].arg = &output_fd_arg;
+ opts[25].arg = &working_directory_arg;
+
+ reset_ready_notify_pipe();
+
+ init_default_settings();
+
+ /* only for parsing --config-path. */
+ i = grn_str_getopt(argc, argv, opts, &mode);
+ if (i < 0) {
+ show_usage(stderr);
+ return EXIT_FAILURE;
+ }
+
+ if (config_path) {
+ const config_file_status status = config_file_load(config_path, opts, &mode);
+ if (status == CONFIG_FILE_FOPEN_ERROR) {
+ fprintf(stderr, "%s: can't open config file: %s (%s)\n",
+ argv[0], config_path, strerror(errno));
+ return EXIT_FAILURE;
+ } else if (status != CONFIG_FILE_SUCCESS) {
+ fprintf(stderr, "%s: failed to parse config file: %s (%s)\n",
+ argv[0], config_path,
+ (status == CONFIG_FILE_FORMAT_ERROR) ? "Invalid format" : strerror(errno));
+ return EXIT_FAILURE;
+ }
+ } else if (*default_config_path) {
+ const config_file_status status =
+ config_file_load(default_config_path, opts, &mode);
+ if (status != CONFIG_FILE_SUCCESS && status != CONFIG_FILE_FOPEN_ERROR) {
+ fprintf(stderr, "%s: failed to parse config file: %s (%s)\n",
+ argv[0], default_config_path,
+ (status == CONFIG_FILE_FORMAT_ERROR) ? "Invalid format" : strerror(errno));
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (working_directory_arg) {
+ if (chdir(working_directory_arg) == -1) {
+ fprintf(stderr, "%s: failed to change directory: %s: %s\n",
+ argv[0], working_directory_arg, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ }
+
+ /* ignore mode option in config file */
+ mode = (mode == mode_error) ? default_mode :
+ ((mode & ~MODE_MASK) | default_mode);
+
+ i = grn_str_getopt(argc, argv, opts, &mode);
+ if (i < 0) { mode = mode_error; }
+ switch (mode & MODE_MASK) {
+ case mode_version :
+ show_version();
+ return EXIT_SUCCESS;
+ case mode_usage :
+ show_usage(output);
+ return EXIT_SUCCESS;
+ case mode_config :
+ show_config(output, opts, mode & ~MODE_MASK);
+ return EXIT_SUCCESS;
+ case mode_error :
+ show_usage(stderr);
+ return EXIT_FAILURE;
+ }
+
+ if (port_arg) {
+ const char * const end = port_arg + strlen(port_arg);
+ const char *rest = NULL;
+ const int value = grn_atoi(port_arg, end, &rest);
+ if (rest != end || value <= 0 || value > 65535) {
+ fprintf(stderr, "invalid port number: <%s>\n", port_arg);
+ return EXIT_FAILURE;
+ }
+ port = value;
+ } else {
+ if (protocol_arg) {
+ if (*protocol_arg == 'h' || *protocol_arg == 'H') {
+ port = default_http_port;
+ }
+ }
+ }
+
+ if (encoding_arg) {
+ switch (*encoding_arg) {
+ case 'n' :
+ case 'N' :
+ encoding = GRN_ENC_NONE;
+ break;
+ case 'e' :
+ case 'E' :
+ encoding = GRN_ENC_EUC_JP;
+ break;
+ case 'u' :
+ case 'U' :
+ encoding = GRN_ENC_UTF8;
+ break;
+ case 's' :
+ case 'S' :
+ encoding = GRN_ENC_SJIS;
+ break;
+ case 'l' :
+ case 'L' :
+ encoding = GRN_ENC_LATIN1;
+ break;
+ case 'k' :
+ case 'K' :
+ encoding = GRN_ENC_KOI8R;
+ break;
+ default:
+ encoding = GRN_ENC_DEFAULT;
+ break;
+ }
+ } else {
+ encoding = GRN_ENC_DEFAULT;
+ }
+
+ if (!grn_document_root) {
+ grn_document_root = default_document_root;
+ }
+
+ if (protocol_arg) {
+ switch (*protocol_arg) {
+ case 'g' :
+ case 'G' :
+ do_client = g_client;
+ do_server = g_server;
+ break;
+ case 'h' :
+ case 'H' :
+ do_client = g_client;
+ do_server = h_server;
+ break;
+ case 'm' :
+ case 'M' :
+ do_client = g_client;
+ do_server = g_server;
+ break;
+ default :
+ do_client = g_client;
+ do_server = g_server;
+ break;
+ }
+ } else {
+ do_client = g_client;
+ do_server = g_server;
+ }
+
+ if (log_path_arg) {
+ grn_default_logger_set_path(log_path_arg);
+ }
+
+ if (query_log_path_arg) {
+ grn_default_query_logger_set_path(query_log_path_arg);
+ }
+
+ if (log_level_arg) {
+ const char * const end = log_level_arg + strlen(log_level_arg);
+ const char *rest = NULL;
+ const int value = grn_atoi(log_level_arg, end, &rest);
+ if (end != rest || value < 0 || value > 9) {
+ fprintf(stderr, "invalid log level: <%s>\n", log_level_arg);
+ return EXIT_FAILURE;
+ }
+ log_level = value;
+ } else {
+ log_level = default_log_level;
+ }
+ grn_default_logger_set_max_level(log_level);
+
+ if (max_num_threads_arg) {
+ const char * const end = max_num_threads_arg + strlen(max_num_threads_arg);
+ const char *rest = NULL;
+ const uint32_t value = grn_atoui(max_num_threads_arg, end, &rest);
+ if (end != rest || value < 1 || value > 100) {
+ fprintf(stderr, "invalid max number of threads: <%s>\n",
+ max_num_threads_arg);
+ return EXIT_FAILURE;
+ }
+ max_nfthreads = value;
+ } else {
+ max_nfthreads = default_max_num_threads;
+ }
+
+ if (input_path) {
+ if (!freopen(input_path, "r", stdin)) {
+ fprintf(stderr, "can't open input file: %s (%s)\n",
+ input_path, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ batchmode = GRN_TRUE;
+ } else {
+ if (input_fd_arg) {
+ const char * const end = input_fd_arg + strlen(input_fd_arg);
+ const char *rest = NULL;
+ const int input_fd = grn_atoi(input_fd_arg, end, &rest);
+ if (rest != end || input_fd == 0) {
+ fprintf(stderr, "invalid input FD: <%s>\n", input_fd_arg);
+ return EXIT_FAILURE;
+ }
+ if (dup2(input_fd, STDIN_FILENO) == -1) {
+ fprintf(stderr, "can't open input FD: %d (%s)\n",
+ input_fd, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ batchmode = GRN_TRUE;
+ } else {
+ if (argc - i > 1) {
+ batchmode = GRN_TRUE;
+ } else {
+ batchmode = !isatty(0);
+ }
+ }
+ }
+
+ if (output_fd_arg) {
+ const char * const end = output_fd_arg + strlen(output_fd_arg);
+ const char *rest = NULL;
+ const int output_fd = grn_atoi(output_fd_arg, end, &rest);
+ if (rest != end || output_fd == 0) {
+ fprintf(stderr, "invalid output FD: <%s>\n", output_fd_arg);
+ return EXIT_FAILURE;
+ }
+ output = fdopen(output_fd, "w");
+ if (!output) {
+ fprintf(stderr, "can't open output FD: %d (%s)\n",
+ output_fd, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ }
+
+
+ if (bind_address_arg) {
+ const size_t bind_address_length = strlen(bind_address_arg);
+ if (bind_address_length > HOST_NAME_MAX) {
+ fprintf(stderr, "too long bind address: %s (%u bytes):"
+ " must not be longer than %u bytes\n",
+ bind_address_arg, (unsigned int)bind_address_length, HOST_NAME_MAX);
+ return EXIT_FAILURE;
+ }
+ strcpy(bind_address, bind_address_arg);
+ } else {
+ strcpy(bind_address, default_bind_address);
+ }
+
+ if (hostname_arg) {
+ const size_t hostname_length = strlen(hostname_arg);
+ if (hostname_length > HOST_NAME_MAX) {
+ fprintf(stderr, "too long hostname: %s (%u bytes):"
+ " must not be longer than %u bytes\n",
+ hostname_arg, (unsigned int)hostname_length, HOST_NAME_MAX);
+ return EXIT_FAILURE;
+ }
+ strcpy(hostname, hostname_arg);
+ } else {
+ strcpy(hostname, default_hostname);
+ }
+
+ if (document_root_arg) {
+ grn_document_root = document_root_arg;
+ }
+
+ if (default_command_version_arg) {
+ const char * const end = default_command_version_arg
+ + strlen(default_command_version_arg);
+ const char *rest = NULL;
+ const int value = grn_atoi(default_command_version_arg, end, &rest);
+ if (end != rest || value < GRN_COMMAND_VERSION_MIN ||
+ value > GRN_COMMAND_VERSION_MAX) {
+ fprintf(stderr, "invalid command version: <%s>\n",
+ default_command_version_arg);
+ return EXIT_FAILURE;
+ }
+ switch (value) {
+ case 1 :
+ default_command_version = GRN_COMMAND_VERSION_1;
+ break;
+ case 2 :
+ default_command_version = GRN_COMMAND_VERSION_2;
+ break;
+ default :
+ fprintf(stderr, "invalid command version: <%s>\n",
+ default_command_version_arg);
+ return EXIT_FAILURE;
+ }
+ } else {
+ default_command_version = default_default_command_version;
+ }
+
+ if (default_match_escalation_threshold_arg) {
+ const char * const end = default_match_escalation_threshold_arg
+ + strlen(default_match_escalation_threshold_arg);
+ const char *rest = NULL;
+ const int64_t value = grn_atoll(default_match_escalation_threshold_arg, end, &rest);
+ if (end != rest) {
+ fprintf(stderr, "invalid match escalation threshold: <%s>\n",
+ default_match_escalation_threshold_arg);
+ return EXIT_FAILURE;
+ }
+ default_match_escalation_threshold = value;
+ } else {
+ default_match_escalation_threshold = default_default_match_escalation_threshold;
+ }
+
+ if (cache_limit_arg) {
+ const char * const end = cache_limit_arg + strlen(cache_limit_arg);
+ const char *rest = NULL;
+ const uint32_t value = grn_atoui(cache_limit_arg, end, &rest);
+ if (end != rest) {
+ fprintf(stderr, "invalid --cache-limit value: <%s>\n", cache_limit_arg);
+ return EXIT_FAILURE;
+ }
+ cache_limit = value;
+ }
+
+#ifdef GRN_WITH_LIBEDIT
+ if (!batchmode) {
+ line_editor_init(argc, argv);
+ }
+#endif
+ if (grn_init()) { return EXIT_FAILURE; }
+
+ grn_set_default_encoding(encoding);
+
+ if (default_command_version_arg) {
+ grn_set_default_command_version(default_command_version);
+ }
+
+ if (default_match_escalation_threshold_arg) {
+ grn_set_default_match_escalation_threshold(default_match_escalation_threshold);
+ }
+
+ grn_set_segv_handler();
+ grn_set_int_handler();
+ grn_set_term_handler();
+
+ if (cache_limit_arg) {
+ grn_cache *cache;
+ cache = grn_cache_current_get(&grn_gctx);
+ grn_cache_set_max_n_entries(&grn_gctx, cache, cache_limit);
+ }
+
+ newdb = (mode & MODE_NEW_DB);
+ switch (mode & MODE_MASK) {
+ case mode_alone :
+ exit_code = do_alone(argc - i, argv + i);
+ break;
+ case mode_client :
+ exit_code = do_client(argc - i, argv + i);
+ break;
+ case mode_daemon :
+ is_daemon_mode = GRN_TRUE;
+ /* fallthru */
+ case mode_server :
+ exit_code = do_server(argc > i ? argv[i] : NULL);
+ break;
+ default:
+ exit_code = EXIT_FAILURE;
+ break;
+ }
+
+#ifdef GRN_WITH_LIBEDIT
+ if (!batchmode) {
+ line_editor_fin();
+ }
+#endif
+ if (output != stdout) {
+ fclose(output);
+ }
+ grn_fin();
+ return exit_code;
+}
diff --git a/storage/mroonga/vendor/groonga/src/groonga_benchmark.c b/storage/mroonga/vendor/groonga/src/groonga_benchmark.c
new file mode 100644
index 00000000000..61575174950
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/groonga_benchmark.c
@@ -0,0 +1,3172 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2010-2012 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif /* HAVE_SYS_WAIT_H */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif /* HAVE_SYS_SOCKET_H */
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif /* HAVE_NETINET_IN_H */
+
+#include "lib/str.h"
+#include "lib/com.h"
+#include "lib/db.h"
+
+#ifdef WIN32
+#include <windows.h>
+#include <stddef.h>
+#else
+#include <sys/param.h>
+#include <sys/utsname.h>
+#include <sys/statvfs.h>
+#include <libgen.h>
+#endif /* WIN32 */
+
+/*
+#define DEBUG_FTP
+#define DEBUG_HTTP
+*/
+
+#define FTPUSER "anonymous"
+#define FTPPASSWD "grntest"
+#define FTPSERVER "ftp.groonga.org"
+#define FTPBUF 20000
+#define DEFAULT_PORT 10041
+#define DEFAULT_DEST "localhost"
+
+#define OUT_JSON 0
+#define OUT_TSV 1
+
+static int grntest_outtype = OUT_JSON;
+
+static grn_critical_section grntest_cs;
+
+static int grntest_stop_flag = 0;
+static int grntest_detail_on = 0;
+static int grntest_remote_mode = 0;
+static int grntest_localonly_mode = 0;
+static int grntest_owndb_mode = 0;
+static int grntest_onmemory_mode = 0;
+static grn_bool grntest_ftp_mode = GRN_FALSE;
+#define TMPFILE "_grntest.tmp"
+
+static grn_ctx grntest_server_context;
+static FILE *grntest_log_file;
+
+#define OS_LINUX64 "LINUX64"
+#define OS_LINUX32 "LINUX32"
+#define OS_WINDOWS64 "WINDOWS64"
+#define OS_WINDOWS32 "WINDOWS32"
+
+#ifdef WIN32
+typedef SOCKET socket_t;
+#define SOCKETERROR INVALID_SOCKET
+#define socketclose closesocket
+static const char *groonga_path = "groonga.exe";
+static PROCESS_INFORMATION grntest_pi;
+#else
+static pid_t grntest_server_id = 0;
+typedef int socket_t;
+#define socketclose close
+#define SOCKETERROR -1
+static const char *groonga_path = "groonga";
+#endif /* WIN32 */
+
+static const char *groonga_protocol = "gqtp";
+static const char *grntest_osinfo;
+static int grntest_sigint = 0;
+
+
+
+static grn_obj *grntest_db = NULL;
+
+#define MAX_CON_JOB 10
+#define MAX_CON 64
+
+#define BUF_LEN 1024
+#define MAX_PATH_LEN 256
+
+#define J_DO_LOCAL 1 /* do_local */
+#define J_DO_GQTP 2 /* do_gqtp */
+#define J_DO_HTTP 3 /* do_http */
+#define J_REP_LOCAL 4 /* rep_local */
+#define J_REP_GQTP 5 /* rep_gqtp */
+#define J_REP_HTTP 6 /* rep_http */
+#define J_OUT_LOCAL 7 /* out_local */
+#define J_OUT_GQTP 8 /* out_gqtp */
+#define J_OUT_HTTP 9 /* out_http */
+#define J_TEST_LOCAL 10 /* test_local */
+#define J_TEST_GQTP 11 /* test_gqtp */
+#define J_TEST_HTTP 12 /* test_http */
+
+static char grntest_username[BUF_LEN];
+static char grntest_scriptname[BUF_LEN];
+static char grntest_date[BUF_LEN];
+static char grntest_serverhost[BUF_LEN];
+static int grntest_serverport;
+static const char *grntest_dbpath;
+
+struct job {
+ char jobname[BUF_LEN];
+ char commandfile[BUF_LEN];
+ int qnum;
+ int jobtype;
+ int concurrency;
+ int ntimes;
+ int done;
+ long long int max;
+ long long int min;
+ FILE *outputlog;
+ FILE *inputlog;
+ char logfile[BUF_LEN];
+};
+
+struct task {
+ char *file;
+ grn_obj *commands;
+ int jobtype;
+ int ntimes;
+ int qnum;
+ int job_id;
+ long long int max;
+ long long int min;
+ socket_t http_socket;
+ grn_obj http_response;
+};
+
+static struct task grntest_task[MAX_CON];
+static struct job grntest_job[MAX_CON];
+static int grntest_jobdone;
+static int grntest_jobnum;
+static grn_ctx grntest_ctx[MAX_CON];
+static grn_obj *grntest_owndb[MAX_CON];
+
+static grn_obj grntest_starttime, grntest_jobs_start;
+
+static int
+grntest_atoi(const char *str, const char *end, const char **rest)
+{
+ while (grn_isspace(str, GRN_ENC_UTF8) == 1) {
+ str++;
+ }
+ return grn_atoi(str, end, rest);
+}
+
+static int
+out_p(int jobtype)
+{
+ if (jobtype == J_OUT_LOCAL) {
+ return 1;
+ }
+ if (jobtype == J_OUT_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_OUT_HTTP) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+test_p(int jobtype)
+{
+ if (jobtype == J_TEST_LOCAL) {
+ return 1;
+ }
+ if (jobtype == J_TEST_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_TEST_HTTP) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+report_p(int jobtype)
+{
+ if (jobtype == J_REP_LOCAL) {
+ return 1;
+ }
+ if (jobtype == J_REP_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_REP_HTTP) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+gqtp_p(int jobtype)
+{
+ if (jobtype == J_DO_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_REP_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_OUT_GQTP) {
+ return 1;
+ }
+ if (jobtype == J_TEST_GQTP) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+http_p(int jobtype)
+{
+ if (jobtype == J_DO_HTTP) {
+ return 1;
+ }
+ if (jobtype == J_REP_HTTP) {
+ return 1;
+ }
+ if (jobtype == J_OUT_HTTP) {
+ return 1;
+ }
+ if (jobtype == J_TEST_HTTP) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+error_exit_in_thread(intptr_t code)
+{
+ fprintf(stderr,
+ "Fatal error! Check script file or database!: %ld\n", (long)code);
+ fflush(stderr);
+ CRITICAL_SECTION_ENTER(grntest_cs);
+ grntest_stop_flag = 1;
+ CRITICAL_SECTION_LEAVE(grntest_cs);
+#ifdef WIN32
+ _endthreadex(code);
+#else
+ pthread_exit((void *)code);
+#endif /* WIN32 */
+ return 0;
+}
+
+
+static void
+escape_command(grn_ctx *ctx, const char *in, int ilen, grn_obj *escaped_command)
+{
+ int i = 0;
+
+ while (i < ilen) {
+ if ((in[i] == '\\') || (in[i] == '\"') || (in[i] == '/')) {
+ GRN_TEXT_PUTC(ctx, escaped_command, '\\');
+ GRN_TEXT_PUTC(ctx, escaped_command, in[i]);
+ i++;
+ } else {
+ switch (in[i]) {
+ case '\b':
+ GRN_TEXT_PUTS(ctx, escaped_command, "\\b");
+ i++;
+ break;
+ case '\f':
+ GRN_TEXT_PUTS(ctx, escaped_command, "\\f");
+ i++;
+ break;
+ case '\n':
+ GRN_TEXT_PUTS(ctx, escaped_command, "\\n");
+ i++;
+ break;
+ case '\r':
+ GRN_TEXT_PUTS(ctx, escaped_command, "\\r");
+ i++;
+ break;
+ case '\t':
+ GRN_TEXT_PUTS(ctx, escaped_command, "\\t");
+ i++;
+ break;
+ default:
+ GRN_TEXT_PUTC(ctx, escaped_command, in[i]);
+ i++;
+ break;
+ }
+ }
+ }
+ GRN_TEXT_PUTC(ctx, escaped_command, '\0');
+}
+
+static int
+report_command(grn_ctx *ctx, const char *command, const char *ret, int task_id,
+ grn_obj *start_time, grn_obj *end_time)
+{
+ int i, len, clen;
+ long long int start, end;
+ grn_obj result, escaped_command;
+
+ GRN_TEXT_INIT(&result, 0);
+ if (strncmp(ret, "[[", 2) == 0) {
+ i = 2;
+ len = 1;
+ while (ret[i] != ']') {
+ i++;
+ len++;
+ if (ret[i] == '\0') {
+ fprintf(stderr, "Error results:command=[%s]\n", command);
+ error_exit_in_thread(3);
+ }
+ }
+ len++;
+ grn_text_esc(ctx, &result, ret + 1, len);
+ } else {
+ grn_text_esc(ctx, &result, ret, strlen(ret));
+ }
+
+ start = GRN_TIME_VALUE(start_time) - GRN_TIME_VALUE(&grntest_starttime);
+ end = GRN_TIME_VALUE(end_time) - GRN_TIME_VALUE(&grntest_starttime);
+ clen = strlen(command);
+ GRN_TEXT_INIT(&escaped_command, 0);
+ escape_command(ctx, command, clen, &escaped_command);
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "report\t%d\t%s\t%" GRN_FMT_LLD "\t%" GRN_FMT_LLD "\t%.*s\n",
+ task_id, GRN_TEXT_VALUE(&escaped_command), start, end,
+ (int)GRN_TEXT_LEN(&result), GRN_TEXT_VALUE(&result));
+ } else {
+ fprintf(grntest_log_file, "[%d, \"%s\", %" GRN_FMT_LLD ", %" GRN_FMT_LLD ", %.*s],\n",
+ task_id, GRN_TEXT_VALUE(&escaped_command), start, end,
+ (int)GRN_TEXT_LEN(&result), GRN_TEXT_VALUE(&result));
+ }
+ fflush(grntest_log_file);
+ GRN_OBJ_FIN(ctx, &escaped_command);
+ GRN_OBJ_FIN(ctx, &result);
+ return 0;
+}
+
+static int
+output_result_final(grn_ctx *ctx, int qnum)
+{
+ grn_obj end_time;
+ long long int latency, self;
+ double sec, qps;
+
+ GRN_TIME_INIT(&end_time, 0);
+ GRN_TIME_NOW(ctx, &end_time);
+
+ latency = GRN_TIME_VALUE(&end_time) - GRN_TIME_VALUE(&grntest_starttime);
+ self = latency;
+ sec = self / (double)1000000;
+ qps = (double)qnum / sec;
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "total\t%" GRN_FMT_LLD "\t%f\t%d\n", latency, qps, qnum);
+ } else {
+ fprintf(grntest_log_file,
+ "{\"total\": %" GRN_FMT_LLD ", \"qps\": %f, \"queries\": %d}]\n", latency, qps, qnum);
+ }
+ grn_obj_close(ctx, &end_time);
+ return 0;
+}
+
+static int
+output_sysinfo(char *sysinfo)
+{
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "%s", sysinfo);
+ } else {
+ fprintf(grntest_log_file, "[%s\n", sysinfo);
+ }
+ return 0;
+}
+
+/* #define ENABLE_ERROR_REPORT 1 */
+#ifdef ENABLE_ERROR_REPORT
+static int
+error_command(grn_ctx *ctx, char *command, int task_id)
+{
+ fprintf(stderr, "error!:command=[%s] task_id = %d\n", command, task_id);
+ fflush(stderr);
+ error_exit_in_thread(1);
+ return 0;
+}
+#endif
+
+static void
+normalize_output(char *output, int length,
+ char **normalized_output, int *normalized_length)
+{
+ int i;
+
+ *normalized_output = NULL;
+ *normalized_length = length;
+ for (i = 0; i < length; i++) {
+ if (!strncmp(output + i, "],", 2)) {
+ *normalized_output = output + i + 2;
+ *normalized_length -= i + 2;
+ break;
+ }
+ }
+
+ if (!*normalized_output) {
+ if (length > 2 && strncmp(output + length - 2, "]]", 2)) {
+ *normalized_output = output + length;
+ *normalized_length = 0;
+ } else {
+ *normalized_output = output;
+ }
+ }
+}
+
+static grn_bool
+same_result_p(char *expect, int expected_length, char *result, int result_length)
+{
+ char *normalized_expected, *normalized_result;
+ int normalized_expected_length, normalized_result_length;
+
+ normalize_output(expect, expected_length,
+ &normalized_expected, &normalized_expected_length);
+ normalize_output(result, result_length,
+ &normalized_result, &normalized_result_length);
+
+ return((normalized_expected_length == normalized_result_length) &&
+ strncmp(normalized_expected, normalized_result,
+ normalized_expected_length) == 0);
+}
+
+static socket_t
+open_socket(const char *host, int port)
+{
+ socket_t sock;
+ struct hostent *servhost;
+ struct sockaddr_in server;
+ u_long inaddr;
+ int ret;
+
+ servhost = gethostbyname(host);
+ if (servhost == NULL){
+ fprintf(stderr, "Bad hostname [%s]\n", host);
+ return -1;
+ }
+ inaddr = *(u_long*)(servhost->h_addr_list[0]);
+
+ memset(&server, 0, sizeof(struct sockaddr_in));
+ server.sin_family = AF_INET;
+ server.sin_port = htons(port);
+ server.sin_addr = *(struct in_addr*)&inaddr;
+
+ sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock == -1) {
+ fprintf(stderr, "socket error\n");
+ return -1;
+ }
+ ret = connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in));
+ if (ret == -1) {
+ fprintf(stderr, "connect error\n");
+ return -1;
+ }
+ return sock;
+}
+
+static int
+write_to_server(socket_t socket, const char *buf)
+{
+#ifdef DEBUG_FTP
+ fprintf(stderr, "send:%s", buf);
+#endif
+ send(socket, buf, strlen(buf), 0);
+ return 0;
+}
+
+#define OUTPUT_TYPE "output_type"
+#define OUTPUT_TYPE_LEN (sizeof(OUTPUT_TYPE) - 1)
+
+static void
+command_line_to_uri_path(grn_ctx *ctx, grn_obj *uri, const char *command)
+{
+ char tok_type;
+ int offset = 0, have_key = 0;
+ const char *p, *e, *v;
+ grn_obj buf, *expr = NULL;
+ grn_expr_var *vars;
+ unsigned int nvars;
+
+ GRN_TEXT_INIT(&buf, 0);
+ p = command;
+ e = command + strlen(command);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ if ((expr = grn_ctx_get(ctx, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf)))) {
+ grn_obj params, output_type;
+
+ GRN_TEXT_INIT(&params, 0);
+ GRN_TEXT_INIT(&output_type, 0);
+ vars = ((grn_proc *)expr)->vars;
+ nvars = ((grn_proc *)expr)->nvars;
+ GRN_TEXT_PUTS(ctx, uri, "/d/");
+ GRN_TEXT_PUT(ctx, uri, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ while (p < e) {
+ GRN_BULK_REWIND(&buf);
+ p = grn_text_unesc_tok(ctx, &buf, p, e, &tok_type);
+ v = GRN_TEXT_VALUE(&buf);
+ switch (tok_type) {
+ case GRN_TOK_VOID :
+ p = e;
+ break;
+ case GRN_TOK_SYMBOL :
+ if (GRN_TEXT_LEN(&buf) > 2 && v[0] == '-' && v[1] == '-') {
+ int l = GRN_TEXT_LEN(&buf) - 2;
+ v += 2;
+ if (l == OUTPUT_TYPE_LEN && !memcmp(v, OUTPUT_TYPE, OUTPUT_TYPE_LEN)) {
+ GRN_BULK_REWIND(&output_type);
+ p = grn_text_unesc_tok(ctx, &output_type, p, e, &tok_type);
+ break;
+ }
+ if (GRN_TEXT_LEN(&params)) {
+ GRN_TEXT_PUTS(ctx, &params, "&");
+ }
+ grn_text_urlenc(ctx, &params, v, l);
+ have_key = 1;
+ break;
+ }
+ /* fallthru */
+ case GRN_TOK_STRING :
+ case GRN_TOK_QUOTE :
+ if (!have_key) {
+ if (offset < nvars) {
+ if (GRN_TEXT_LEN(&params)) {
+ GRN_TEXT_PUTS(ctx, &params, "&");
+ }
+ grn_text_urlenc(ctx, &params,
+ vars[offset].name, vars[offset].name_size);
+ offset++;
+ }
+ }
+ GRN_TEXT_PUTS(ctx, &params, "=");
+ grn_text_urlenc(ctx, &params, GRN_TEXT_VALUE(&buf), GRN_TEXT_LEN(&buf));
+ have_key = 0;
+ break;
+ }
+ }
+ GRN_TEXT_PUTS(ctx, uri, ".");
+ if (GRN_TEXT_LEN(&output_type)) {
+ GRN_TEXT_PUT(ctx, uri,
+ GRN_TEXT_VALUE(&output_type), GRN_TEXT_LEN(&output_type));
+ } else {
+ GRN_TEXT_PUTS(ctx, uri, "json");
+ }
+ if (GRN_TEXT_LEN(&params) > 0) {
+ GRN_TEXT_PUTS(ctx, uri, "?");
+ GRN_TEXT_PUT(ctx, uri, GRN_TEXT_VALUE(&params), GRN_TEXT_LEN(&params));
+ }
+ GRN_OBJ_FIN(ctx, &params);
+ GRN_OBJ_FIN(ctx, &output_type);
+ }
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static void
+command_send_http(grn_ctx *ctx, const char *command, int type, int task_id)
+{
+ socket_t http_socket;
+ grn_obj buf;
+
+ http_socket = open_socket(grntest_serverhost, grntest_serverport);
+ if (http_socket == SOCKETERROR) {
+ fprintf(stderr, "failed to connect to groonga at %s:%d via HTTP: ",
+ grntest_serverhost, grntest_serverport);
+#ifdef WIN32
+ fprintf(stderr, "%d\n", GetLastError());
+#else
+ fprintf(stderr, "%s\n", strerror(errno));
+#endif
+ error_exit_in_thread(100);
+ }
+ grntest_task[task_id].http_socket = http_socket;
+ GRN_BULK_REWIND(&grntest_task[task_id].http_response);
+
+ GRN_TEXT_INIT(&buf, 0);
+ GRN_TEXT_PUTS(ctx, &buf, "GET ");
+ if (strncmp(command, "/d/", 3) == 0) {
+ GRN_TEXT_PUTS(ctx, &buf, command);
+ } else {
+ command_line_to_uri_path(ctx, &buf, command);
+ }
+#ifdef DEBUG_HTTP
+ fprintf(stderr, "command: <%s>\n", command);
+ fprintf(stderr, "path: <%.*s>\n",
+ (int)GRN_TEXT_LEN(&buf), GRN_TEXT_VALUE(&buf));
+#endif
+ GRN_TEXT_PUTS(ctx, &buf, " HTTP/1.1\r\n");
+ GRN_TEXT_PUTS(ctx, &buf, "Host: ");
+ GRN_TEXT_PUTS(ctx, &buf, grntest_serverhost);
+ GRN_TEXT_PUTS(ctx, &buf, "\r\n");
+ GRN_TEXT_PUTS(ctx, &buf, "User-Agent: grntest/");
+ GRN_TEXT_PUTS(ctx, &buf, grn_get_version());
+ GRN_TEXT_PUTS(ctx, &buf, "\r\n");
+ GRN_TEXT_PUTS(ctx, &buf, "Connection: close\r\n");
+ GRN_TEXT_PUTS(ctx, &buf, "\r\n");
+ GRN_TEXT_PUTC(ctx, &buf, '\0');
+ write_to_server(http_socket, GRN_TEXT_VALUE(&buf));
+ GRN_OBJ_FIN(ctx, &buf);
+}
+
+static void
+command_send_ctx(grn_ctx *ctx, const char *command, int type, int task_id)
+{
+ grn_ctx_send(ctx, command, strlen(command), 0);
+/* fix me.
+ when command fails, ctx->rc is not 0 in local mode!
+ if (ctx->rc) {
+ fprintf(stderr, "ctx_send:rc=%d:command:%s\n", ctx->rc, command);
+ error_exit_in_thread(1);
+ }
+*/
+}
+
+static void
+command_send(grn_ctx *ctx, const char *command, int type, int task_id)
+{
+ if (http_p(type)) {
+ command_send_http(ctx, command, type, task_id);
+ } else {
+ command_send_ctx(ctx, command, type, task_id);
+ }
+}
+
+static void
+command_recv_http(grn_ctx *ctx, int type, int task_id,
+ char **res, unsigned int *res_len, int *flags)
+{
+ int len;
+ char buf[BUF_LEN];
+ char *p, *e;
+ socket_t http_socket;
+ grn_obj *http_response;
+
+ http_socket = grntest_task[task_id].http_socket;
+ http_response = &grntest_task[task_id].http_response;
+ while ((len = recv(http_socket, buf, BUF_LEN - 1, 0))) {
+#ifdef DEBUG_HTTP
+ fprintf(stderr, "receive: <%.*s>\n", len, buf);
+#endif
+ GRN_TEXT_PUT(ctx, http_response, buf, len);
+ }
+
+ p = GRN_TEXT_VALUE(http_response);
+ e = p + GRN_TEXT_LEN(http_response);
+ while (p < e) {
+ if (p[0] != '\r') {
+ p++;
+ continue;
+ }
+ if (e - p >= 4) {
+ if (!memcmp(p, "\r\n\r\n", 4)) {
+ *res = p + 4;
+ *res_len = e - *res;
+#ifdef DEBUG_HTTP
+ fprintf(stderr, "body: <%.*s>\n", *res_len, *res);
+#endif
+ break;
+ }
+ p += 4;
+ } else {
+ *res = NULL;
+ *res_len = 0;
+ break;
+ }
+ }
+
+ socketclose(http_socket);
+ grntest_task[task_id].http_socket = 0;
+}
+
+static void
+command_recv_ctx(grn_ctx *ctx, int type, int task_id,
+ char **res, unsigned int *res_len, int *flags)
+{
+ grn_ctx_recv(ctx, res, res_len, flags);
+ if (ctx->rc) {
+ fprintf(stderr, "ctx_recv:rc=%d\n", ctx->rc);
+ error_exit_in_thread(1);
+ }
+}
+
+static void
+command_recv(grn_ctx *ctx, int type, int task_id,
+ char **res, unsigned int *res_len, int *flags)
+{
+ if (http_p(type)) {
+ command_recv_http(ctx, type, task_id, res, res_len, flags);
+ } else {
+ command_recv_ctx(ctx, type, task_id, res, res_len, flags);
+ }
+}
+
+static int
+shutdown_server(void)
+{
+ char *res;
+ int flags;
+ unsigned int res_len;
+ int job_type;
+ int task_id = 0;
+
+ if (grntest_remote_mode) {
+ return 0;
+ }
+ job_type = grntest_task[task_id].jobtype;
+ command_send(&grntest_server_context, "shutdown", job_type, task_id);
+ if (grntest_server_context.rc) {
+ fprintf(stderr, "ctx_send:rc=%d\n", grntest_server_context.rc);
+ exit(1);
+ }
+ command_recv(&grntest_server_context, job_type, task_id,
+ &res, &res_len, &flags);
+
+ return 0;
+}
+
+static int
+do_load_command(grn_ctx *ctx, char *command, int type, int task_id,
+ long long int *load_start)
+{
+ char *res;
+ unsigned int res_len;
+ int flags, ret;
+ grn_obj start_time, end_time;
+
+ GRN_TIME_INIT(&start_time, 0);
+ if (*load_start == 0) {
+ GRN_TIME_NOW(ctx, &start_time);
+ *load_start = GRN_TIME_VALUE(&start_time);
+ } else {
+ GRN_TIME_SET(ctx, &start_time, *load_start);
+ }
+
+ command_send(ctx, command, type, task_id);
+ do {
+ command_recv(ctx, type, task_id, &res, &res_len, &flags);
+ if (res_len) {
+ long long int self;
+ GRN_TIME_INIT(&end_time, 0);
+ GRN_TIME_NOW(ctx, &end_time);
+
+ self = GRN_TIME_VALUE(&end_time) - *load_start;
+
+ if (grntest_task[task_id].max < self) {
+ grntest_task[task_id].max = self;
+ }
+ if (grntest_task[task_id].min > self) {
+ grntest_task[task_id].min = self;
+ }
+
+ if (report_p(grntest_task[task_id].jobtype)) {
+ char tmpbuf[BUF_LEN];
+
+ if (res_len < BUF_LEN) {
+ strncpy(tmpbuf, res, res_len);
+ tmpbuf[res_len] = '\0';
+ } else {
+ strncpy(tmpbuf, res, BUF_LEN - 2);
+ tmpbuf[BUF_LEN -2] = '\0';
+ }
+ report_command(ctx, "load", tmpbuf, task_id, &start_time, &end_time);
+ }
+ if (out_p(grntest_task[task_id].jobtype)) {
+ fwrite(res, 1, res_len, grntest_job[grntest_task[task_id].job_id].outputlog);
+ fputc('\n', grntest_job[grntest_task[task_id].job_id].outputlog);
+ fflush(grntest_job[grntest_task[task_id].job_id].outputlog);
+ }
+ if (test_p(grntest_task[task_id].jobtype)) {
+ grn_obj log;
+ FILE *input;
+ FILE *output;
+ GRN_TEXT_INIT(&log, 0);
+ input = grntest_job[grntest_task[task_id].job_id].inputlog;
+ output = grntest_job[grntest_task[task_id].job_id].outputlog;
+ if (grn_text_fgets(ctx, &log, input) != GRN_SUCCESS) {
+ GRN_LOG(ctx, GRN_ERROR, "Cannot get input-log");
+ error_exit_in_thread(55);
+ }
+ if (GRN_TEXT_VALUE(&log)[GRN_TEXT_LEN(&log) - 1] == '\n') {
+ grn_bulk_truncate(ctx, &log, GRN_TEXT_LEN(&log) - 1);
+ }
+
+ if (!same_result_p(GRN_TEXT_VALUE(&log), GRN_TEXT_LEN(&log),
+ res, res_len)) {
+ fprintf(output, "DIFF:command:%s\n", command);
+ fprintf(output, "DIFF:result:");
+ fwrite(res, 1, res_len, output);
+ fputc('\n', output);
+ fprintf(output, "DIFF:expect:%.*s\n",
+ (int)GRN_TEXT_LEN(&log), GRN_TEXT_VALUE(&log));
+ fflush(output);
+ }
+ GRN_OBJ_FIN(ctx, &log);
+ }
+ grn_obj_close(ctx, &end_time);
+ ret = 1;
+ break;
+ } else {
+ ret = 0;
+ break;
+ }
+ } while ((flags & GRN_CTX_MORE));
+ grn_obj_close(ctx, &start_time);
+
+ return ret;
+}
+
+
+static int
+do_command(grn_ctx *ctx, char *command, int type, int task_id)
+{
+ char *res;
+ unsigned int res_len;
+ int flags;
+ grn_obj start_time, end_time;
+
+ GRN_TIME_INIT(&start_time, 0);
+ GRN_TIME_NOW(ctx, &start_time);
+
+ command_send(ctx, command, type, task_id);
+ do {
+ command_recv(ctx, type, task_id, &res, &res_len, &flags);
+ if (res_len) {
+ long long int self;
+ GRN_TIME_INIT(&end_time, 0);
+ GRN_TIME_NOW(ctx, &end_time);
+
+ self = GRN_TIME_VALUE(&end_time) - GRN_TIME_VALUE(&start_time);
+
+ if (grntest_task[task_id].max < self) {
+ grntest_task[task_id].max = self;
+ }
+ if (grntest_task[task_id].min > self) {
+ grntest_task[task_id].min = self;
+ }
+
+ if (report_p(grntest_task[task_id].jobtype)) {
+ char tmpbuf[BUF_LEN];
+
+ if (res_len < BUF_LEN) {
+ strncpy(tmpbuf, res, res_len);
+ tmpbuf[res_len] = '\0';
+ } else {
+ strncpy(tmpbuf, res, BUF_LEN - 2);
+ tmpbuf[BUF_LEN -2] = '\0';
+ }
+ report_command(ctx, command, tmpbuf, task_id, &start_time, &end_time);
+ }
+ if (out_p(grntest_task[task_id].jobtype)) {
+ fwrite(res, 1, res_len, grntest_job[grntest_task[task_id].job_id].outputlog);
+ fputc('\n', grntest_job[grntest_task[task_id].job_id].outputlog);
+ fflush(grntest_job[grntest_task[task_id].job_id].outputlog);
+ }
+ if (test_p(grntest_task[task_id].jobtype)) {
+ grn_obj log;
+ FILE *input;
+ FILE *output;
+ GRN_TEXT_INIT(&log, 0);
+ input = grntest_job[grntest_task[task_id].job_id].inputlog;
+ output = grntest_job[grntest_task[task_id].job_id].outputlog;
+ if (grn_text_fgets(ctx, &log, input) != GRN_SUCCESS) {
+ GRN_LOG(ctx, GRN_ERROR, "Cannot get input-log");
+ error_exit_in_thread(55);
+ }
+ if (GRN_TEXT_VALUE(&log)[GRN_TEXT_LEN(&log) - 1] == '\n') {
+ grn_bulk_truncate(ctx, &log, GRN_TEXT_LEN(&log) - 1);
+ }
+
+ if (!same_result_p(GRN_TEXT_VALUE(&log), GRN_TEXT_LEN(&log),
+ res, res_len)) {
+ fprintf(output, "DIFF:command:%s\n", command);
+ fprintf(output, "DIFF:result:");
+ fwrite(res, 1, res_len, output);
+ fputc('\n', output);
+ fprintf(output, "DIFF:expect:%.*s\n",
+ (int)GRN_TEXT_LEN(&log), GRN_TEXT_VALUE(&log));
+ fflush(output);
+ }
+ GRN_OBJ_FIN(ctx, &log);
+ }
+ grn_obj_close(ctx, &end_time);
+ break;
+ } else {
+#ifdef ENABLE_ERROR_REPORT
+ error_command(ctx, command, task_id);
+#endif
+ }
+ } while ((flags & GRN_CTX_MORE));
+
+ grn_obj_close(ctx, &start_time);
+
+ return 0;
+}
+
+static int
+comment_p(char *command)
+{
+ if (command[0] == '#') {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+load_command_p(char *command)
+{
+ int i = 0;
+
+ while (grn_isspace(&command[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ }
+ if (command[i] == '\0') {
+ return 0;
+ }
+ if (!strncmp(&command[i], "load", 4)) {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+worker_sub(grn_ctx *ctx, grn_obj *log, int task_id)
+{
+ int i, load_mode, load_count;
+ grn_obj end_time;
+ long long int total_elapsed_time, job_elapsed_time;
+ double sec, qps;
+ long long int load_start;
+ struct task *task;
+ struct job *job;
+
+ task = &(grntest_task[task_id]);
+ task->max = 0LL;
+ task->min = 9223372036854775807LL;
+ task->qnum = 0;
+
+ for (i = 0; i < task->ntimes; i++) {
+ if (task->file != NULL) {
+ FILE *fp;
+ grn_obj line;
+ fp = fopen(task->file, "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot open %s\n",grntest_task[task_id].file);
+ error_exit_in_thread(1);
+ }
+ load_mode = 0;
+ load_count = 0;
+ load_start = 0LL;
+ GRN_TEXT_INIT(&line, 0);
+ while (grn_text_fgets(ctx, &line, fp) == GRN_SUCCESS) {
+ if (GRN_TEXT_VALUE(&line)[GRN_TEXT_LEN(&line) - 1] == '\n') {
+ grn_bulk_truncate(ctx, &line, GRN_TEXT_LEN(&line) - 1);
+ }
+ if (GRN_TEXT_LEN(&line) == 0) {
+ GRN_BULK_REWIND(&line);
+ continue;
+ }
+ GRN_TEXT_PUTC(ctx, &line, '\0');
+ if (comment_p(GRN_TEXT_VALUE(&line))) {
+ GRN_BULK_REWIND(&line);
+ continue;
+ }
+ if (load_command_p(GRN_TEXT_VALUE(&line))) {
+ load_mode = 1;
+ load_count = 1;
+ }
+ if (load_mode == 1) {
+ if (do_load_command(&grntest_ctx[task_id], GRN_TEXT_VALUE(&line),
+ task->jobtype,
+ task_id, &load_start)) {
+ task->qnum += load_count;
+ load_mode = 0;
+ load_count = 0;
+ load_start = 0LL;
+ }
+ load_count++;
+ GRN_BULK_REWIND(&line);
+ continue;
+ }
+ do_command(&grntest_ctx[task_id], GRN_TEXT_VALUE(&line),
+ task->jobtype,
+ task_id);
+ task->qnum++;
+ GRN_BULK_REWIND(&line);
+ if (grntest_sigint) {
+ goto exit;
+ }
+ }
+ GRN_OBJ_FIN(ctx, &line);
+ fclose(fp);
+ } else {
+ int i, n_commands;
+ grn_obj *commands;
+ commands = task->commands;
+ if (!commands) {
+ error_exit_in_thread(1);
+ }
+ load_mode = 0;
+ n_commands = GRN_BULK_VSIZE(commands) / sizeof(grn_obj *);
+ for (i = 0; i < n_commands; i++) {
+ grn_obj *command;
+ command = GRN_PTR_VALUE_AT(commands, i);
+ if (load_command_p(GRN_TEXT_VALUE(command))) {
+ load_mode = 1;
+ }
+ if (load_mode == 1) {
+ if (do_load_command(&grntest_ctx[task_id],
+ GRN_TEXT_VALUE(command),
+ task->jobtype, task_id, &load_start)) {
+ load_mode = 0;
+ load_start = 0LL;
+ task->qnum++;
+ }
+ continue;
+ }
+ do_command(&grntest_ctx[task_id],
+ GRN_TEXT_VALUE(command),
+ task->jobtype, task_id);
+ task->qnum++;
+ if (grntest_sigint) {
+ goto exit;
+ }
+ }
+ }
+ }
+
+exit:
+ GRN_TIME_INIT(&end_time, 0);
+ GRN_TIME_NOW(&grntest_ctx[task_id], &end_time);
+ total_elapsed_time = GRN_TIME_VALUE(&end_time) - GRN_TIME_VALUE(&grntest_starttime);
+ job_elapsed_time = GRN_TIME_VALUE(&end_time) - GRN_TIME_VALUE(&grntest_jobs_start);
+
+ CRITICAL_SECTION_ENTER(grntest_cs);
+ job = &(grntest_job[task->job_id]);
+ if (job->max < task->max) {
+ job->max = task->max;
+ }
+ if (job->min > task->min) {
+ job->min = task->min;
+ }
+
+ job->qnum += task->qnum;
+ job->done++;
+ if (job->done == job->concurrency) {
+ char tmpbuf[BUF_LEN];
+ sec = job_elapsed_time / (double)1000000;
+ qps = (double)job->qnum/ sec;
+ grntest_jobdone++;
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf,
+ "job\t"
+ "%s\t"
+ "%" GRN_FMT_LLD "\t"
+ "%" GRN_FMT_LLD "\t"
+ "%f\t"
+ "%" GRN_FMT_LLD "\t"
+ "%" GRN_FMT_LLD "\t"
+ "%d\n",
+ job->jobname,
+ total_elapsed_time,
+ job_elapsed_time,
+ qps,
+ job->min,
+ job->max,
+ job->qnum);
+ } else {
+ sprintf(tmpbuf,
+ "{\"job\": \"%s\", "
+ "\"total_elapsed_time\": %" GRN_FMT_LLD ", "
+ "\"job_elapsed_time\": %" GRN_FMT_LLD ", "
+ "\"qps\": %f, "
+ "\"min\": %" GRN_FMT_LLD ", "
+ "\"max\": %" GRN_FMT_LLD ", "
+ "\"queries\": %d}",
+ job->jobname,
+ total_elapsed_time,
+ job_elapsed_time,
+ qps,
+ job->min,
+ job->max,
+ job->qnum);
+ if (grntest_jobdone < grntest_jobnum) {
+ strcat(tmpbuf, ",");
+ }
+ }
+ GRN_TEXT_PUTS(ctx, log, tmpbuf);
+ if (grntest_jobdone == grntest_jobnum) {
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "%.*s",
+ (int)GRN_TEXT_LEN(log), GRN_TEXT_VALUE(log));
+ } else {
+ if (grntest_detail_on) {
+ fseek(grntest_log_file, -2, SEEK_CUR);
+ fprintf(grntest_log_file, "],\n");
+ }
+ fprintf(grntest_log_file, "\"summary\": [");
+ fprintf(grntest_log_file, "%.*s",
+ (int)GRN_TEXT_LEN(log), GRN_TEXT_VALUE(log));
+ fprintf(grntest_log_file, "]");
+ }
+ fflush(grntest_log_file);
+ }
+ }
+ grn_obj_close(&grntest_ctx[task_id], &end_time);
+ CRITICAL_SECTION_LEAVE(grntest_cs);
+
+ return 0;
+}
+
+typedef struct _grntest_worker {
+ grn_ctx *ctx;
+ grn_obj log;
+ int task_id;
+} grntest_worker;
+
+#ifdef WIN32
+static int
+__stdcall
+worker(void *val)
+{
+ grntest_worker *worker = val;
+ worker_sub(worker->ctx, &worker->log, worker->task_id);
+ return 0;
+}
+#else
+static void *
+worker(void *val)
+{
+ grntest_worker *worker = val;
+ worker_sub(worker->ctx, &worker->log, worker->task_id);
+ return NULL;
+}
+#endif /* WIN32 */
+
+#ifdef WIN32
+static int
+thread_main(grn_ctx *ctx, int num)
+{
+ int i;
+ int ret;
+ HANDLE pthread[MAX_CON];
+ grntest_worker *workers[MAX_CON];
+
+ for (i = 0; i < num; i++) {
+ workers[i] = GRN_MALLOC(sizeof(grntest_worker));
+ workers[i]->ctx = &grntest_ctx[i];
+ GRN_TEXT_INIT(&workers[i]->log, 0);
+ workers[i]->task_id = i;
+ pthread[i] = (HANDLE)_beginthreadex(NULL, 0, worker, (void *)workers[i],
+ 0, NULL);
+ if (pthread[i]== (HANDLE)0) {
+ fprintf(stderr, "thread failed:%d\n", i);
+ error_exit_in_thread(1);
+ }
+ }
+
+ ret = WaitForMultipleObjects(num, pthread, TRUE, INFINITE);
+ if (ret == WAIT_TIMEOUT) {
+ fprintf(stderr, "timeout\n");
+ error_exit_in_thread(1);
+ }
+
+ for (i = 0; i < num; i++) {
+ CloseHandle(pthread[i]);
+ GRN_OBJ_FIN(workers[i]->ctx, &workers[i]->log);
+ GRN_FREE(workers[i]);
+ }
+ return 0;
+}
+#else
+static int
+thread_main(grn_ctx *ctx, int num)
+{
+ intptr_t i;
+ int ret;
+ pthread_t pthread[MAX_CON];
+ grntest_worker *workers[MAX_CON];
+
+ for (i = 0; i < num; i++) {
+ workers[i] = GRN_MALLOC(sizeof(grntest_worker));
+ workers[i]->ctx = &grntest_ctx[i];
+ GRN_TEXT_INIT(&workers[i]->log, 0);
+ workers[i]->task_id = i;
+ ret = pthread_create(&pthread[i], NULL, worker, (void *)workers[i]);
+ if (ret) {
+ fprintf(stderr, "Cannot create thread:ret=%d\n", ret);
+ error_exit_in_thread(1);
+ }
+ }
+
+ for (i = 0; i < num; i++) {
+ ret = pthread_join(pthread[i], NULL);
+ GRN_OBJ_FIN(workers[i]->ctx, &workers[i]->log);
+ GRN_FREE(workers[i]);
+ if (ret) {
+ fprintf(stderr, "Cannot join thread:ret=%d\n", ret);
+ error_exit_in_thread(1);
+ }
+ }
+ return 0;
+}
+#endif
+
+static int
+error_exit(grn_ctx *ctx, int ret)
+{
+ fflush(stderr);
+ shutdown_server();
+ grn_ctx_fin(ctx);
+ grn_fin();
+ exit(ret);
+}
+
+static int
+get_sysinfo(const char *path, char *result, int olen)
+{
+ char tmpbuf[256];
+
+#ifdef WIN32
+ int cinfo[4];
+ ULARGE_INTEGER dinfo;
+ char cpustring[64];
+ SYSTEM_INFO sinfo;
+ MEMORYSTATUSEX minfo;
+ OSVERSIONINFO osinfo;
+
+ if (grntest_outtype == OUT_TSV) {
+ result[0] = '\0';
+ sprintf(tmpbuf, "script\t%s\n", grntest_scriptname);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "user\t%s\n", grntest_username);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "date\t%s\n", grntest_date);
+ strcat(result, tmpbuf);
+ } else {
+ strcpy(result, "{");
+ sprintf(tmpbuf, "\"script\": \"%s.scr\",\n", grntest_scriptname);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"user\": \"%s\",\n", grntest_username);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"date\": \"%s\",\n", grntest_date);
+ strcat(result, tmpbuf);
+ }
+
+ memset(cpustring, 0, 64);
+#ifndef __GNUC__
+ __cpuid(cinfo, 0x80000002);
+ memcpy(cpustring, cinfo, 16);
+ __cpuid(cinfo, 0x80000003);
+ memcpy(cpustring+16, cinfo, 16);
+ __cpuid(cinfo, 0x80000004);
+ memcpy(cpustring+32, cinfo, 16);
+#endif
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\n", cpustring);
+ } else {
+ sprintf(tmpbuf, " \"CPU\": \"%s\",\n", cpustring);
+ }
+ strcat(result, tmpbuf);
+
+ if (sizeof(int *) == 8) {
+ grntest_osinfo = OS_WINDOWS64;
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "64BIT\n");
+ } else {
+ sprintf(tmpbuf, " \"BIT\": 64,\n");
+ }
+ } else {
+ grntest_osinfo = OS_WINDOWS32;
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "32BIT\n");
+ } else {
+ sprintf(tmpbuf, " \"BIT\": 32,\n");
+ }
+ }
+ strcat(result, tmpbuf);
+
+ GetSystemInfo(&sinfo);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "CORE\t%d\n", sinfo.dwNumberOfProcessors);
+ } else {
+ sprintf(tmpbuf, " \"CORE\": %d,\n", sinfo.dwNumberOfProcessors);
+ }
+ strcat(result, tmpbuf);
+
+ minfo.dwLength = sizeof(MEMORYSTATUSEX);
+ GlobalMemoryStatusEx(&minfo);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "RAM\t%I64dMByte\n", minfo.ullTotalPhys/(1024*1024));
+ } else {
+ sprintf(tmpbuf, " \"RAM\": \"%I64dMByte\",\n", minfo.ullTotalPhys/(1024*1024));
+ }
+ strcat(result, tmpbuf);
+
+ GetDiskFreeSpaceEx(NULL, NULL, &dinfo, NULL);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "HDD\t%I64dKBytes\n", dinfo.QuadPart/1024 );
+ } else {
+ sprintf(tmpbuf, " \"HDD\": \"%I64dKBytes\",\n", dinfo.QuadPart/1024 );
+ }
+ strcat(result, tmpbuf);
+
+ osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osinfo);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "Windows %d.%d\n", osinfo.dwMajorVersion, osinfo.dwMinorVersion);
+ } else {
+ sprintf(tmpbuf, " \"OS\": \"Windows %d.%d\",\n", osinfo.dwMajorVersion,
+ osinfo.dwMinorVersion);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\n", grntest_serverhost);
+ } else {
+ sprintf(tmpbuf, " \"HOST\": \"%s\",\n", grntest_serverhost);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%d\n", grntest_serverport);
+ } else {
+ sprintf(tmpbuf, " \"PORT\": \"%d\",\n", grntest_serverport);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\"\n", grn_get_version());
+ } else {
+ sprintf(tmpbuf, " \"VERSION\": \"%s\"\n", grn_get_version());
+ }
+
+ strcat(result, tmpbuf);
+ if (grntest_outtype != OUT_TSV) {
+ strcat(result, "}");
+ }
+
+#else /* linux only */
+ FILE *fp;
+ int ret;
+ int cpunum = 0;
+ int minfo = 0;
+ int unevictable = 0;
+ int mlocked = 0;
+ char cpustring[256];
+ struct utsname ubuf;
+ struct statvfs vfsbuf;
+
+ if (grntest_outtype == OUT_TSV) {
+ result[0] = '\0';
+ sprintf(tmpbuf, "sctipt\t%s\n", grntest_scriptname);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "user\t%s\n", grntest_username);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "date\t%s\n", grntest_date);
+ strcat(result, tmpbuf);
+ } else {
+ strcpy(result, "{");
+ sprintf(tmpbuf, "\"script\": \"%s.scr\",\n", grntest_scriptname);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"user\": \"%s\",\n", grntest_username);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"date\": \"%s\",\n", grntest_date);
+ strcat(result, tmpbuf);
+ }
+
+ fp = fopen("/proc/cpuinfo", "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot open cpuinfo\n");
+ exit(1);
+ }
+ while (fgets(tmpbuf, 256, fp) != NULL) {
+ tmpbuf[strlen(tmpbuf)-1] = '\0';
+ if (!strncmp(tmpbuf, "model name\t: ", 13)) {
+ strcpy(cpustring, &tmpbuf[13]);
+ }
+ }
+ fclose(fp);
+ cpunum = sysconf(_SC_NPROCESSORS_CONF);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\n", cpustring);
+ } else {
+ sprintf(tmpbuf, " \"CPU\": \"%s\",\n", cpustring);
+ }
+ strcat(result, tmpbuf);
+
+ if (sizeof(int *) == 8) {
+ grntest_osinfo = OS_LINUX64;
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "64BIT\n");
+ } else {
+ sprintf(tmpbuf, " \"BIT\": 64,\n");
+ }
+ } else {
+ grntest_osinfo = OS_LINUX32;
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "32BIT\n");
+ } else {
+ sprintf(tmpbuf, " \"BIT\": 32,\n");
+ }
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "CORE\t%d\n", cpunum);
+ } else {
+ sprintf(tmpbuf, " \"CORE\": %d,\n", cpunum);
+ }
+ strcat(result, tmpbuf);
+
+ fp = fopen("/proc/meminfo", "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot open meminfo\n");
+ exit(1);
+ }
+ while (fgets(tmpbuf, 256, fp) != NULL) {
+ tmpbuf[strlen(tmpbuf)-1] = '\0';
+ if (!strncmp(tmpbuf, "MemTotal:", 9)) {
+ minfo = grntest_atoi(&tmpbuf[10], &tmpbuf[10] + 40, NULL);
+ }
+ if (!strncmp(tmpbuf, "Unevictable:", 12)) {
+ unevictable = grntest_atoi(&tmpbuf[13], &tmpbuf[13] + 40, NULL);
+ }
+ if (!strncmp(tmpbuf, "Mlocked:", 8)) {
+ mlocked = grntest_atoi(&tmpbuf[9], &tmpbuf[9] + 40, NULL);
+ }
+ }
+ fclose(fp);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%dMBytes\n", minfo/1024);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "%dMBytes_Unevictable\n", unevictable/1024);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, "%dMBytes_Mlocked\n", mlocked/1024);
+ strcat(result, tmpbuf);
+ } else {
+ sprintf(tmpbuf, " \"RAM\": \"%dMBytes\",\n", minfo/1024);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"Unevictable\": \"%dMBytes\",\n", unevictable/1024);
+ strcat(result, tmpbuf);
+ sprintf(tmpbuf, " \"Mlocked\": \"%dMBytes\",\n", mlocked/1024);
+ strcat(result, tmpbuf);
+ }
+
+ ret = statvfs(path, &vfsbuf);
+ if (ret) {
+ fprintf(stderr, "Cannot access %s\n", path);
+ exit(1);
+ }
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%" GRN_FMT_INT64U "KBytes\n", vfsbuf.f_blocks * 4);
+ } else {
+ sprintf(tmpbuf,
+ " \"HDD\": \"%" GRN_FMT_INT64U "KBytes\",\n",
+ vfsbuf.f_blocks * 4);
+ }
+ strcat(result, tmpbuf);
+
+ uname(&ubuf);
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s %s\n", ubuf.sysname, ubuf.release);
+ } else {
+ sprintf(tmpbuf, " \"OS\": \"%s %s\",\n", ubuf.sysname, ubuf.release);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\n", grntest_serverhost);
+ } else {
+ sprintf(tmpbuf, " \"HOST\": \"%s\",\n", grntest_serverhost);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%d\n", grntest_serverport);
+ } else {
+ sprintf(tmpbuf, " \"PORT\": \"%d\",\n", grntest_serverport);
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype == OUT_TSV) {
+ sprintf(tmpbuf, "%s\n", grn_get_version());
+ } else {
+ sprintf(tmpbuf, " \"VERSION\": \"%s\"\n", grn_get_version());
+ }
+ strcat(result, tmpbuf);
+
+ if (grntest_outtype != OUT_TSV) {
+ strcat(result, "},");
+ }
+#endif /* WIN32 */
+ if (strlen(result) >= olen) {
+ fprintf(stderr, "buffer overrun in get_sysinfo!\n");
+ exit(1);
+ }
+ return 0;
+}
+
+static int
+start_server(const char *dbpath, int r)
+{
+ int ret;
+ char optbuf[BUF_LEN];
+#ifdef WIN32
+ char tmpbuf[BUF_LEN];
+
+ STARTUPINFO si;
+
+ if (strlen(dbpath) > BUF_LEN - 100) {
+ fprintf(stderr, "too long dbpath!\n");
+ exit(1);
+ }
+
+ strcpy(tmpbuf, groonga_path);
+ strcat(tmpbuf, " -s --protocol ");
+ strcat(tmpbuf, groonga_protocol);
+ strcat(tmpbuf, " -p ");
+ sprintf(optbuf, "%d ", grntest_serverport);
+ strcat(tmpbuf, optbuf);
+ strcat(tmpbuf, dbpath);
+ memset(&si, 0, sizeof(STARTUPINFO));
+ si.cb=sizeof(STARTUPINFO);
+ ret = CreateProcess(NULL, tmpbuf, NULL, NULL, FALSE,
+ 0, NULL, NULL, &si, &grntest_pi);
+
+ if (ret == 0) {
+ fprintf(stderr, "Cannot start groonga server: <%s>: error=%d\n",
+ groonga_path, GetLastError());
+ exit(1);
+ }
+
+#else
+ pid_t pid;
+ pid = fork();
+ if (pid < 0) {
+ fprintf(stderr, "Cannot start groonga server:Cannot fork\n");
+ exit(1);
+ }
+ sprintf(optbuf, "%d", grntest_serverport);
+ if (pid == 0) {
+ ret = execlp(groonga_path, groonga_path,
+ "-s",
+ "--protocol", groonga_protocol,
+ "-p", optbuf,
+ dbpath, (char*)NULL);
+ if (ret == -1) {
+ fprintf(stderr, "Cannot start groonga server: <%s>: errno=%d\n",
+ groonga_path, errno);
+ exit(1);
+ }
+ }
+ else {
+ grntest_server_id = pid;
+ }
+
+#endif /* WIN32 */
+
+ return 0;
+}
+
+static int
+parse_line(char *buf, int start, int end, int num)
+{
+ int i, j, error_flag = 0, out_or_test = 0;
+ char tmpbuf[BUF_LEN];
+
+ grntest_job[num].concurrency = 1;
+ grntest_job[num].ntimes = 1;
+ grntest_job[num].done = 0;
+ grntest_job[num].qnum = 0;
+ grntest_job[num].max = 0LL;
+ grntest_job[num].min = 9223372036854775807LL;
+ grntest_job[num].outputlog = NULL;
+ grntest_job[num].inputlog = NULL;
+
+ strncpy(grntest_job[num].jobname, &buf[start], end - start);
+ grntest_job[num].jobname[end - start] = '\0';
+ i = start;
+ while (i < end) {
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ continue;
+ }
+ if (!strncmp(&buf[i], "do_local", 8)) {
+ grntest_job[num].jobtype = J_DO_LOCAL;
+ i = i + 8;
+ break;
+ }
+ if (!strncmp(&buf[i], "do_gqtp", 7)) {
+ grntest_job[num].jobtype = J_DO_GQTP;
+ i = i + 7;
+ break;
+ }
+ if (!strncmp(&buf[i], "do_http", 7)) {
+ grntest_job[num].jobtype = J_DO_HTTP;
+ i = i + 7;
+ break;
+ }
+ if (!strncmp(&buf[i], "rep_local", 9)) {
+ grntest_job[num].jobtype = J_REP_LOCAL;
+ i = i + 9;
+ break;
+ }
+ if (!strncmp(&buf[i], "rep_gqtp", 8)) {
+ grntest_job[num].jobtype = J_REP_GQTP;
+ i = i + 8;
+ break;
+ }
+ if (!strncmp(&buf[i], "rep_http", 8)) {
+ grntest_job[num].jobtype = J_REP_HTTP;
+ i = i + 8;
+ break;
+ }
+ if (!strncmp(&buf[i], "out_local", 9)) {
+ grntest_job[num].jobtype = J_OUT_LOCAL;
+ i = i + 9;
+ out_or_test = 1;
+ break;
+ }
+ if (!strncmp(&buf[i], "out_gqtp", 8)) {
+ grntest_job[num].jobtype = J_OUT_GQTP;
+ i = i + 8;
+ out_or_test = 1;
+ break;
+ }
+ if (!strncmp(&buf[i], "out_http", 8)) {
+ grntest_job[num].jobtype = J_OUT_HTTP;
+ i = i + 8;
+ out_or_test = 1;
+ break;
+ }
+ if (!strncmp(&buf[i], "test_local", 10)) {
+ grntest_job[num].jobtype = J_TEST_LOCAL;
+ i = i + 10;
+ out_or_test = 1;
+ break;
+ }
+ if (!strncmp(&buf[i], "test_gqtp", 9)) {
+ grntest_job[num].jobtype = J_TEST_GQTP;
+ i = i + 9;
+ out_or_test = 1;
+ break;
+ }
+ if (!strncmp(&buf[i], "test_http", 9)) {
+ grntest_job[num].jobtype = J_TEST_HTTP;
+ i = i + 9;
+ out_or_test = 1;
+ break;
+ }
+ error_flag = 1;
+ i++;
+ }
+
+ if (error_flag) {
+ return 3;
+ }
+ if (i == end) {
+ return 1;
+ }
+
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) != 1) {
+ return 4;
+ }
+ i++;
+
+ while (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ continue;
+ }
+ j = 0;
+ while (i < end) {
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ break;
+ }
+ grntest_job[num].commandfile[j] = buf[i];
+ i++;
+ j++;
+ if (j > 255) {
+ return 5;
+ }
+ }
+ grntest_job[num].commandfile[j] = '\0';
+
+ while (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ }
+
+ if (i == end) {
+ if (out_or_test) {
+ fprintf(stderr, "log(test)_local(gqtp|http) needs log(test)_filename\n");
+ return 11;
+ }
+ return 0;
+ }
+
+ j = 0;
+ while (i < end) {
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ break;
+ }
+ tmpbuf[j] = buf[i];
+ i++;
+ j++;
+ if (j >= BUF_LEN) {
+ return 6;
+ }
+ }
+ tmpbuf[j] ='\0';
+ if (out_or_test) {
+ if (out_p(grntest_job[num].jobtype)) {
+ grntest_job[num].outputlog = fopen(tmpbuf, "wb");
+ if (grntest_job[num].outputlog == NULL) {
+ fprintf(stderr, "Cannot open %s\n", tmpbuf);
+ return 13;
+ }
+ } else {
+ char outlog[BUF_LEN];
+ grntest_job[num].inputlog = fopen(tmpbuf, "rb");
+ if (grntest_job[num].inputlog == NULL) {
+ fprintf(stderr, "Cannot open %s\n", tmpbuf);
+ return 14;
+ }
+ sprintf(outlog, "%s.diff", tmpbuf);
+ grntest_job[num].outputlog = fopen(outlog, "wb");
+ if (grntest_job[num].outputlog == NULL) {
+ fprintf(stderr, "Cannot open %s\n", outlog);
+ return 15;
+ }
+ }
+ strcpy(grntest_job[num].logfile, tmpbuf);
+ return 0;
+ } else {
+ grntest_job[num].concurrency = grntest_atoi(tmpbuf, tmpbuf + j, NULL);
+ if (grntest_job[num].concurrency == 0) {
+ return 7;
+ }
+ }
+
+ while (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ }
+
+ if (i == end) {
+ return 0;
+ }
+
+ j = 0;
+ while (i < end) {
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ break;
+ }
+ tmpbuf[j] = buf[i];
+ i++;
+ j++;
+ if (j > 16) {
+ return 8;
+ }
+ }
+ tmpbuf[j] ='\0';
+ grntest_job[num].ntimes = grntest_atoi(tmpbuf, tmpbuf + j, NULL);
+ if (grntest_job[num].ntimes == 0) {
+ return 9;
+ }
+ if (i == end) {
+ return 0;
+ }
+
+ while (i < end) {
+ if (grn_isspace(&buf[i], GRN_ENC_UTF8) == 1) {
+ i++;
+ continue;
+ }
+ return 10;
+ }
+ return 0;
+}
+
+static int
+get_jobs(grn_ctx *ctx, char *buf, int line)
+{
+ int i, len, start, end, ret;
+ int jnum = 0;
+
+ len = strlen(buf);
+ i = 0;
+ while (i < len) {
+ if ((buf[i] == '#') || (buf[i] == '\r') || (buf[i] == '\n')) {
+ buf[i] = '\0';
+ len = i;
+ break;
+ }
+ i++;
+ }
+
+ i = 0;
+ start = 0;
+ while (i < len) {
+ if (buf[i] == ';') {
+ end = i;
+ ret = parse_line(buf, start, end, jnum);
+ if (ret) {
+ if (ret > 1) {
+ fprintf(stderr, "Syntax error:line=%d:ret=%d:%s\n", line, ret, buf);
+ error_exit(ctx, 1);
+ }
+ } else {
+ jnum++;
+ }
+ start = end + 1;
+ }
+ i++;
+ }
+ end = len;
+ ret = parse_line(buf, start, end, jnum);
+ if (ret) {
+ if (ret > 1) {
+ fprintf(stderr, "Syntax error:line=%d:ret=%d:%s\n", line, ret, buf);
+ error_exit(ctx, 1);
+ }
+ } else {
+ jnum++;
+ }
+ return jnum;
+}
+
+static int
+make_task_table(grn_ctx *ctx, int jobnum)
+{
+ int i, j;
+ int tid = 0;
+ FILE *fp;
+ grn_obj *commands = NULL;
+
+ for (i = 0; i < jobnum; i++) {
+ if ((grntest_job[i].concurrency == 1) && (!grntest_onmemory_mode)) {
+ grntest_task[tid].file = grntest_job[i].commandfile;
+ grntest_task[tid].commands = NULL;
+ grntest_task[tid].ntimes = grntest_job[i].ntimes;
+ grntest_task[tid].jobtype = grntest_job[i].jobtype;
+ grntest_task[tid].job_id = i;
+ tid++;
+ continue;
+ }
+ for (j = 0; j < grntest_job[i].concurrency; j++) {
+ if (j == 0) {
+ grn_obj line;
+ GRN_TEXT_INIT(&line, 0);
+ commands = grn_obj_open(ctx, GRN_PVECTOR, 0, GRN_VOID);
+ if (!commands) {
+ fprintf(stderr, "Cannot alloc commands\n");
+ error_exit(ctx, 1);
+ }
+ fp = fopen(grntest_job[i].commandfile, "r");
+ if (!fp) {
+ fprintf(stderr, "Cannot alloc commandfile:%s\n",
+ grntest_job[i].commandfile);
+ error_exit(ctx, 1);
+ }
+ while (grn_text_fgets(ctx, &line, fp) == GRN_SUCCESS) {
+ grn_obj *command;
+ if (GRN_TEXT_VALUE(&line)[GRN_TEXT_LEN(&line) - 1] == '\n') {
+ grn_bulk_truncate(ctx, &line, GRN_TEXT_LEN(&line) - 1);
+ }
+ if (GRN_TEXT_LEN(&line) == 0) {
+ GRN_BULK_REWIND(&line);
+ continue;
+ }
+ GRN_TEXT_PUTC(ctx, &line, '\0');
+ if (comment_p(GRN_TEXT_VALUE(&line))) {
+ GRN_BULK_REWIND(&line);
+ continue;
+ }
+ command = grn_obj_open(ctx, GRN_BULK, 0, GRN_VOID);
+ if (!command) {
+ fprintf(stderr, "Cannot alloc command: %s: %s\n",
+ grntest_job[i].commandfile, GRN_TEXT_VALUE(&line));
+ GRN_OBJ_FIN(ctx, &line);
+ error_exit(ctx, 1);
+ }
+ GRN_TEXT_SET(ctx, command, GRN_TEXT_VALUE(&line), GRN_TEXT_LEN(&line));
+ GRN_PTR_PUT(ctx, commands, command);
+ GRN_BULK_REWIND(&line);
+ }
+ GRN_OBJ_FIN(ctx, &line);
+ }
+ grntest_task[tid].file = NULL;
+ grntest_task[tid].commands = commands;
+ grntest_task[tid].ntimes = grntest_job[i].ntimes;
+ grntest_task[tid].jobtype = grntest_job[i].jobtype;
+ grntest_task[tid].job_id = i;
+ tid++;
+ }
+ }
+ return tid;
+}
+
+/*
+static int
+print_commandlist(int task_id)
+{
+ int i;
+
+ for (i = 0; i < GRN_TEXT_LEN(grntest_task[task_id].commands); i++) {
+ grn_obj *command;
+ command = GRN_PTR_VALUE_AT(grntest_task[task_id].commands, i);
+ printf("%s\n", GRN_TEXT_VALUE(command));
+ }
+ return 0;
+}
+*/
+
+/* return num of query */
+static int
+do_jobs(grn_ctx *ctx, int jobnum, int line)
+{
+ int i, task_num, ret, qnum = 0, thread_num = 0;
+
+ for (i = 0; i < jobnum; i++) {
+/*
+printf("%d:type =%d:file=%s:con=%d:ntimes=%d\n", i, grntest_job[i].jobtype,
+ grntest_job[i].commandfile, JobTable[i].concurrency, JobTable[i].ntimes);
+
+*/
+ thread_num = thread_num + grntest_job[i].concurrency;
+ }
+
+ if (thread_num >= MAX_CON) {
+ fprintf(stderr, "Too many threads requested(MAX=64):line=%d\n", line);
+ error_exit(ctx, 1);
+ }
+
+ task_num = make_task_table(ctx, jobnum);
+ if (task_num != thread_num) {
+ fprintf(stderr, "Logical error\n");
+ error_exit(ctx, 9);
+ }
+
+ grntest_detail_on = 0;
+ for (i = 0; i < task_num; i++) {
+ grn_ctx_init(&grntest_ctx[i], 0);
+ grntest_owndb[i] = NULL;
+ if (gqtp_p(grntest_task[i].jobtype)) {
+ ret = grn_ctx_connect(&grntest_ctx[i], grntest_serverhost, grntest_serverport, 0);
+ if (ret) {
+ fprintf(stderr, "Cannot connect groonga server:host=%s:port=%d:ret=%d\n",
+ grntest_serverhost, grntest_serverport, ret);
+ error_exit(ctx, 1);
+ }
+ } else if (http_p(grntest_task[i].jobtype)) {
+ grntest_task[i].http_socket = 0;
+ GRN_TEXT_INIT(&grntest_task[i].http_response, 0);
+ if (grntest_owndb_mode) {
+ grntest_owndb[i] = grn_db_open(&grntest_ctx[i], grntest_dbpath);
+ if (grntest_owndb[i] == NULL) {
+ fprintf(stderr, "Cannot open db:%s\n", grntest_dbpath);
+ exit(1);
+ }
+ } else {
+ grntest_owndb[i] = grn_db_create(&grntest_ctx[i], NULL, NULL);
+ }
+ } else {
+ if (grntest_owndb_mode) {
+ grntest_owndb[i] = grn_db_open(&grntest_ctx[i], grntest_dbpath);
+ if (grntest_owndb[i] == NULL) {
+ fprintf(stderr, "Cannot open db:%s\n", grntest_dbpath);
+ exit(1);
+ }
+ }
+ else {
+ grn_ctx_use(&grntest_ctx[i], grntest_db);
+ }
+ }
+ if (report_p(grntest_task[i].jobtype)) {
+ grntest_detail_on++;
+ }
+ }
+ if (grntest_detail_on) {
+ if (grntest_outtype == OUT_TSV) {
+ ;
+ }
+ else {
+ fprintf(grntest_log_file, "\"detail\": [\n");
+ }
+ fflush(grntest_log_file);
+ }
+
+ thread_main(ctx, task_num);
+
+ for (i = 0; i < task_num; i++) {
+ if (grntest_owndb[i]) {
+ grn_obj_close(&grntest_ctx[i], grntest_owndb[i]);
+ }
+ if (http_p(grntest_task[i].jobtype)) {
+ GRN_OBJ_FIN(&grntest_ctx[i], &grntest_task[i].http_response);
+ }
+ grn_ctx_fin(&grntest_ctx[i]);
+ qnum = qnum + grntest_task[i].qnum;
+ }
+
+ i = 0;
+ while (i < task_num) {
+ int job_id;
+ if (grntest_task[i].commands) {
+ job_id = grntest_task[i].job_id;
+ GRN_OBJ_FIN(ctx, grntest_task[i].commands);
+ while (job_id == grntest_task[i].job_id) {
+ i++;
+ }
+ } else {
+ i++;
+ }
+ }
+ for (i = 0; i < jobnum; i++) {
+ if (grntest_job[i].outputlog) {
+ int ret;
+ ret = fclose(grntest_job[i].outputlog);
+ if (ret) {
+ fprintf(stderr, "Cannot close %s\n", grntest_job[i].logfile);
+ exit(1);
+ }
+ }
+ if (grntest_job[i].inputlog) {
+ int ret;
+ ret = fclose(grntest_job[i].inputlog);
+ if (ret) {
+ fprintf(stderr, "Cannot close %s\n", grntest_job[i].logfile);
+ exit(1);
+ }
+ }
+ }
+ return qnum;
+}
+
+/* return num of query */
+static int
+do_script(grn_ctx *ctx, const char *script_file_path)
+{
+ int n_lines = 0;
+ int n_jobs;
+ int n_queries, total_n_queries = 0;
+ FILE *script_file;
+ grn_obj line;
+
+ script_file = fopen(script_file_path, "r");
+ if (script_file == NULL) {
+ fprintf(stderr, "Cannot open script file: <%s>\n", script_file_path);
+ error_exit(ctx, 1);
+ }
+
+ GRN_TEXT_INIT(&line, 0);
+ while (grn_text_fgets(ctx, &line, script_file) == GRN_SUCCESS) {
+ if (grntest_sigint) {
+ break;
+ }
+ n_lines++;
+ grntest_jobdone = 0;
+ n_jobs = get_jobs(ctx, GRN_TEXT_VALUE(&line), n_lines);
+ grntest_jobnum = n_jobs;
+
+ if (n_jobs > 0) {
+ GRN_TIME_INIT(&grntest_jobs_start, 0);
+ GRN_TIME_NOW(ctx, &grntest_jobs_start);
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "jobs-start\t%s\n", GRN_TEXT_VALUE(&line));
+ } else {
+ fprintf(grntest_log_file, "{\"jobs\": \"%s\",\n", GRN_TEXT_VALUE(&line));
+ }
+ n_queries = do_jobs(ctx, n_jobs, n_lines);
+ if (grntest_outtype == OUT_TSV) {
+ fprintf(grntest_log_file, "jobs-end\t%s\n", GRN_TEXT_VALUE(&line));
+ } else {
+ fprintf(grntest_log_file, "},\n");
+ }
+ total_n_queries += n_queries;
+
+ grn_obj_close(ctx, &grntest_jobs_start);
+ }
+ if (grntest_stop_flag) {
+ fprintf(stderr, "Error:Quit\n");
+ break;
+ }
+ GRN_BULK_REWIND(&line);
+ }
+ grn_obj_unlink(ctx, &line);
+
+ fclose(script_file);
+
+ return total_n_queries;
+}
+
+static int
+start_local(grn_ctx *ctx, const char *dbpath)
+{
+ grntest_db = grn_db_open(ctx, dbpath);
+ if (!grntest_db) {
+ grntest_db = grn_db_create(ctx, dbpath, NULL);
+ }
+ if (!grntest_db) {
+ fprintf(stderr, "Cannot open db:%s\n", dbpath);
+ exit(1);
+ }
+ return 0;
+}
+
+static int
+check_server(grn_ctx *ctx)
+{
+ int ret, retry = 0;
+ while (1) {
+ ret = grn_ctx_connect(ctx, grntest_serverhost, grntest_serverport, 0);
+ if (ret == GRN_CONNECTION_REFUSED) {
+ grn_sleep(1);
+ retry++;
+ if (retry > 5) {
+ fprintf(stderr, "Cannot connect groonga server:host=%s:port=%d:ret=%d\n",
+ grntest_serverhost, grntest_serverport, ret);
+ return 1;
+ }
+ continue;
+ }
+ if (ret) {
+ fprintf(stderr, "Cannot connect groonga server:host=%s:port=%d:ret=%d\n",
+ grntest_serverhost, grntest_serverport, ret);
+ return 1;
+ }
+ break;
+ }
+ return 0;
+}
+
+#define MODE_LIST 1
+#define MODE_GET 2
+#define MODE_PUT 3
+#define MODE_TIME 4
+
+static int
+check_response(char *buf)
+{
+ if (buf[0] == '1') {
+ return 1;
+ }
+ if (buf[0] == '2') {
+ return 1;
+ }
+ if (buf[0] == '3') {
+ return 1;
+ }
+ return 0;
+}
+
+static int
+read_response(socket_t socket, char *buf)
+{
+ int ret;
+ ret = recv(socket, buf, BUF_LEN - 1, 0);
+ if (ret == -1) {
+ fprintf(stderr, "recv error:3\n");
+ exit(1);
+ }
+ buf[ret] ='\0';
+#ifdef DEBUG_FTP
+ fprintf(stderr, "recv:%s", buf);
+#endif
+ return ret;
+}
+
+static int
+put_file(socket_t socket, const char *filename)
+{
+ FILE *fp;
+ int c, ret, size = 0;
+ char buf[1];
+
+ fp = fopen(filename, "rb");
+ if (!fp) {
+ fprintf(stderr, "LOCAL:no such file:%s\n", filename);
+ return 0;
+ }
+
+ while ((c = fgetc(fp)) != EOF) {
+ buf[0] = c;
+ ret = send(socket, buf, 1, 0);
+ if (ret == -1) {
+ fprintf(stderr, "send error\n");
+ exit(1);
+ }
+ size++;
+ }
+ fclose(fp);
+ return size;
+}
+
+static int
+ftp_list(socket_t data_socket)
+{
+ int ret;
+ char buf[BUF_LEN];
+
+ while (1) {
+ ret = recv(data_socket, buf, BUF_LEN - 2, 0);
+ if (ret == 0) {
+ fflush(stdout);
+ return 0;
+ }
+ buf[ret] = '\0';
+ fprintf(stdout, "%s", buf);
+ }
+
+ return 0;
+}
+
+static int
+get_file(socket_t socket, const char *filename, int size)
+{
+ FILE *fp;
+ int ret, total;
+ char buf[FTPBUF];
+
+ fp = fopen(filename, "wb");
+ if (!fp) {
+ fprintf(stderr, "Cannot open %s\n", filename);
+ return -1;
+ }
+
+ total = 0;
+ while (total != size) {
+ ret = recv(socket, buf, FTPBUF, 0);
+ if (ret == -1) {
+ fprintf(stderr, "recv error:2:ret=%d:size=%d:total\n", ret, size);
+ return -1;
+ }
+ if (ret == 0) {
+ break;
+ }
+ fwrite(buf, ret, 1, fp);
+ total = total + ret;
+ }
+
+ fclose(fp);
+ return size;
+}
+
+static int
+get_port(char *buf, char *host, int *port)
+{
+ int ret,d1,d2,d3,d4,d5,d6;
+ ret = sscanf(buf, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)",
+ &d1, &d2, &d3, &d4, &d5, &d6);
+ if (ret != 6) {
+ fprintf(stderr, "Cannot enter passsive mode\n");
+ return 0;
+ }
+
+ *port = d5 * 256 + d6;
+ sprintf(host, "%d.%d.%d.%d", d1, d2, d3, d4);
+ return 1;
+}
+
+static char *
+get_ftp_date(char *buf)
+{
+ while (*buf !=' ') {
+ buf++;
+ if (*buf == '\0') {
+ return NULL;
+ }
+ }
+ buf++;
+
+ return buf;
+}
+
+static int
+get_size(char *buf)
+{
+ int size;
+
+ while (*buf !='(') {
+ buf++;
+ if (*buf == '\0') {
+ return 0;
+ }
+ }
+ buf++;
+ size = grntest_atoi(buf, buf + strlen(buf), NULL);
+
+ return size;
+}
+
+int
+ftp_sub(const char *user, const char *passwd, const char *host,
+ const char *filename, int mode,
+ const char *cd_dirname, char *retval)
+{
+ int size = 0;
+ int status = 0;
+ socket_t command_socket, data_socket;
+ int data_port;
+ char data_host[BUF_LEN];
+ char send_mesg[BUF_LEN];
+ char buf[BUF_LEN];
+#ifdef WIN32
+ char base[BUF_LEN];
+ char fname[BUF_LEN];
+ char ext[BUF_LEN];
+#else
+ char *base;
+#endif /* WIN32 */
+
+#ifdef WIN32
+ WSADATA ws;
+
+ WSAStartup(MAKEWORD(2,0), &ws);
+#endif /* WIN32 */
+
+ if ((filename != NULL) && (strlen(filename) >= MAX_PATH_LEN)) {
+ fprintf(stderr, "too long filename\n");
+ exit(1);
+ }
+
+ if ((cd_dirname != NULL) && (strlen(cd_dirname) >= MAX_PATH_LEN)) {
+ fprintf(stderr, "too long dirname\n");
+ exit(1);
+ }
+
+ command_socket = open_socket(host, 21);
+ if (command_socket == SOCKETERROR) {
+ return 0;
+ }
+
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ goto exit;
+ }
+
+ /* send username */
+ sprintf(send_mesg, "USER %s\r\n", user);
+ write_to_server(command_socket, send_mesg);
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ goto exit;
+ }
+
+ /* send passwd */
+ sprintf(send_mesg, "PASS %s\r\n", passwd);
+ write_to_server(command_socket, send_mesg);
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ goto exit;
+ }
+
+ /* send TYPE I */
+ sprintf(send_mesg, "TYPE I\r\n");
+ write_to_server(command_socket, send_mesg);
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ goto exit;
+ }
+
+ /* send PASV */
+ sprintf(send_mesg, "PASV\r\n");
+ write_to_server(command_socket, send_mesg);
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ goto exit;
+ }
+
+ if (!get_port(buf, data_host, &data_port)) {
+ goto exit;
+ }
+
+ data_socket = open_socket(data_host, data_port);
+ if (data_socket == SOCKETERROR) {
+ goto exit;
+ }
+
+ if (cd_dirname) {
+ sprintf(send_mesg, "CWD %s\r\n", cd_dirname);
+ write_to_server(command_socket, send_mesg);
+ }
+
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ socketclose(data_socket);
+ goto exit;
+ }
+
+#ifdef WIN32
+ _splitpath(filename, NULL, NULL, fname, ext);
+ strcpy(base, fname);
+ strcat(base, ext);
+#else
+ strcpy(buf, filename);
+ base = basename(buf);
+#endif /* WIN32 */
+
+ switch (mode) {
+ case MODE_LIST:
+ if (filename) {
+ sprintf(send_mesg, "LIST %s\r\n", filename);
+ } else {
+ sprintf(send_mesg, "LIST \r\n");
+ }
+ write_to_server(command_socket, send_mesg);
+ break;
+ case MODE_PUT:
+ sprintf(send_mesg, "STOR %s\r\n", base);
+ write_to_server(command_socket, send_mesg);
+ break;
+ case MODE_GET:
+ sprintf(send_mesg, "RETR %s\r\n", base);
+ write_to_server(command_socket, send_mesg);
+ break;
+ case MODE_TIME:
+ sprintf(send_mesg, "MDTM %s\r\n", base);
+ write_to_server(command_socket, send_mesg);
+ break;
+ default:
+ fprintf(stderr, "invalid mode\n");
+ socketclose(data_socket);
+ goto exit;
+ }
+
+ read_response(command_socket, buf);
+ if (!check_response(buf)) {
+ socketclose(data_socket);
+ goto exit;
+ }
+ if (!strncmp(buf, "150", 3)) {
+ size = get_size(buf);
+ }
+ if (!strncmp(buf, "213", 3)) {
+ retval[BUF_LEN-2] = '\0';
+ strcpy(retval, get_ftp_date(buf));
+ if (retval[BUF_LEN-2] != '\0' ) {
+ fprintf(stderr, "buffer over run in ftp\n");
+ exit(1);
+ }
+ }
+
+ switch (mode) {
+ case MODE_LIST:
+ ftp_list(data_socket);
+ break;
+ case MODE_GET:
+ if (get_file(data_socket, filename, size) == -1) {
+ socketclose(data_socket);
+ goto exit;
+ }
+ fprintf(stderr, "get:%s\n", filename);
+ break;
+ case MODE_PUT:
+ if (put_file(data_socket, filename) == -1) {
+ socketclose(data_socket);
+ goto exit;
+ }
+ fprintf(stderr, "put:%s\n", filename);
+ break;
+ default:
+ break;
+ }
+
+ socketclose(data_socket);
+ if ((mode == MODE_GET) || (mode == MODE_PUT)) {
+ read_response(command_socket, buf);
+ }
+ write_to_server(command_socket, "QUIT\n");
+ status = 1;
+exit:
+ socketclose(command_socket);
+
+#ifdef WIN32
+ WSACleanup();
+#endif
+ return status;
+}
+
+/*
+static int
+ftp_main(int argc, char **argv)
+{
+ char val[BUF_LEN];
+ val[0] = '\0';
+ ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, argv[2],
+ grntest_atoi(argv[3], argv[3] + strlen(argv[3]), NULL), argv[4], val);
+ if (val[0] != '\0') {
+ printf("val=%s\n", val);
+ }
+ return 0;
+}
+*/
+
+static int
+get_username(char *name, int maxlen)
+{
+ char *env=NULL;
+ strcpy(name, "nobody");
+#ifdef WIN32
+ env = getenv("USERNAME");
+#else
+ env = getenv("USER");
+#endif /* WIN32 */
+ if (strlen(env) > maxlen) {
+ fprintf(stderr, "too long username:%s\n", env);
+ exit(1);
+ }
+ if (env) {
+ strcpy(name, env);
+ }
+ return 0;
+}
+
+static int
+get_date(char *date, time_t *sec)
+{
+#if defined(WIN32) && !defined(__GNUC__)
+ struct tm tmbuf;
+ struct tm *tm = &tmbuf;
+ localtime_s(tm, sec);
+#else /* defined(WIN32) && !defined(__GNUC__) */
+# ifdef HAVE_LOCALTIME_R
+ struct tm result;
+ struct tm *tm = &result;
+ localtime_r(sec, tm);
+# else /* HAVE_LOCALTIME_R */
+ struct tm *tm = localtime(sec);
+# endif /* HAVE_LOCALTIME_R */
+#endif /* defined(WIN32) && !defined(__GNUC__) */
+
+#ifdef WIN32
+ strftime(date, 128, "%Y-%m-%d %H:%M:%S", tm);
+#else
+ strftime(date, 128, "%F %T", tm);
+#endif /* WIN32 */
+
+ return 1;
+}
+
+static int
+get_scriptname(const char *path, char *name, const char *suffix)
+{
+ int slen = strlen(suffix);
+ int len = strlen(path);
+
+ if (len >= BUF_LEN) {
+ fprintf(stderr, "too long script name\n");
+ exit(1);
+ }
+ if (slen > len) {
+ fprintf(stderr, "too long suffux\n");
+ exit(1);
+ }
+
+ strcpy(name, path);
+ if (strncmp(&name[len-slen], suffix, slen)) {
+ name[0] = '\0';
+ return 0;
+ }
+ name[len-slen] = '\0';
+ return 1;
+}
+
+#ifdef WIN32
+static int
+get_tm_from_serverdate(char *serverdate, struct tm *tm)
+{
+ int res;
+ int year, month, day, hour, minute, second;
+
+ res = sscanf(serverdate, "%4d%2d%2d%2d%2d%2d",
+ &year, &month, &day, &hour, &minute, &second);
+
+/*
+ printf("%d %d %d %d %d %d\n", year, month, day, hour, minute, second);
+*/
+
+ tm->tm_sec = second;
+ tm->tm_min = minute;
+ tm->tm_hour = hour;
+ tm->tm_mday = day;
+ tm->tm_mon = month - 1;
+ tm->tm_year = year - 1900;
+ tm->tm_isdst = -1;
+
+ return 0;
+}
+#endif /* WIN32 */
+
+
+
+static int
+sync_sub(grn_ctx *ctx, const char *filename)
+{
+ int ret;
+ char serverdate[BUF_LEN];
+#ifdef WIN32
+ struct _stat statbuf;
+#else
+ struct stat statbuf;
+#endif /* WIN32 */
+ time_t st, lt;
+ struct tm stm;
+
+ ret = ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, filename, MODE_TIME, "data",
+ serverdate);
+ if (ret == 0) {
+ fprintf(stderr, "[%s] does not exist in server\n", filename);
+ return 0;
+ }
+#ifdef WIN32
+ get_tm_from_serverdate(serverdate, &stm);
+#else
+ strptime(serverdate, "%Y%m%d %H%M%S", &stm);
+#endif /* WIN32 */
+
+ /* fixme! needs timezone info */
+ st = mktime(&stm) + 3600 * 9;
+ lt = st;
+
+#ifdef WIN32
+ ret = _stat(filename, &statbuf);
+#else
+ ret = stat(filename, &statbuf);
+#endif /* WIN32 */
+
+ if (!ret) {
+ lt = statbuf.st_mtime;
+ if (lt < st) {
+ fprintf(stderr, "newer [%s] exists in server\n", filename);
+ fflush(stderr);
+ ret = ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, filename, MODE_GET, "data",
+ NULL);
+ return ret;
+ }
+ } else {
+ fprintf(stderr, "[%s] does not exist in local\n", filename);
+ fflush(stderr);
+ ret = ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, filename, MODE_GET, "data",
+ NULL);
+ return ret;
+ }
+ return 0;
+}
+
+static int
+cache_file(grn_ctx *ctx, char **flist, char *file, int fnum)
+{
+ int i;
+
+ for (i = 0; i < fnum; i++) {
+ if (!strcmp(flist[i], file) ) {
+ return fnum;
+ }
+ }
+ flist[fnum] = GRN_STRDUP(file);
+ fnum++;
+ if (fnum >= BUF_LEN) {
+ fprintf(stderr, "too many uniq commands file!\n");
+ exit(1);
+ }
+ return fnum;
+}
+
+static int
+sync_datafile(grn_ctx *ctx, const char *script_file_path)
+{
+ int line = 0;
+ int fnum = 0;
+ int i, job_num;
+ FILE *fp;
+ char buf[BUF_LEN];
+ char *filelist[BUF_LEN];
+
+ fp = fopen(script_file_path, "r");
+ if (fp == NULL) {
+ fprintf(stderr, "Cannot open script file: <%s>\n", script_file_path);
+ error_exit(ctx, 1);
+ }
+ buf[BUF_LEN-2] = '\0';
+ while (fgets(buf, BUF_LEN, fp) != NULL) {
+ line++;
+ if (buf[BUF_LEN-2] != '\0') {
+ fprintf(stderr, "Too long line in script file:%d\n", line);
+ error_exit(ctx, 1);
+ }
+ job_num = get_jobs(ctx, buf, line);
+
+ if (job_num > 0) {
+ for (i = 0; i < job_num; i++) {
+/*
+printf("commandfile=[%s]:buf=%s\n", grntest_job[i].commandfile, buf);
+*/
+ fnum = cache_file(ctx, filelist, grntest_job[i].commandfile, fnum);
+ }
+ }
+ }
+ for (i = 0; i < fnum; i++) {
+ if (sync_sub(ctx, filelist[i])) {
+ fprintf(stderr, "updated!:%s\n", filelist[i]);
+ fflush(stderr);
+ }
+ GRN_FREE(filelist[i]);
+ }
+ fclose(fp);
+ return fnum;
+}
+
+static int
+sync_script(grn_ctx *ctx, const char *filename)
+{
+ int ret, filenum;
+
+ ret = sync_sub(ctx, filename);
+ if (!ret) {
+ return 0;
+ }
+
+ fprintf(stderr, "updated!:%s\n", filename);
+ fflush(stderr);
+ filenum = sync_datafile(ctx, filename);
+ return 1;
+}
+
+static void
+usage(void)
+{
+ fprintf(stderr,
+ "Usage: grntest [options...] [script] [db]\n"
+ "options:\n"
+ " --dir: show script files on ftp server\n"
+ " -i, --host <ip/hostname>: server address to listen (default: %s)\n"
+ " --localonly: omit server connection\n"
+ " --log-output-dir: specify output dir (default: current)\n"
+ " --ftp: connect to ftp server\n"
+ " --onmemory: load all commands into memory\n"
+ " --output-type <tsv/json>: specify output-type (default: json)\n"
+ " --owndb: open dbs for each ctx\n"
+ " -p, --port <port number>: server port number (default: %d)\n"
+ " --groonga <groonga_path>: groonga command path (default: %s)\n"
+ " --protocol <gqtp|http>: groonga server protocol (default: %s)\n"
+ " --log-path <path>: specify log file path\n"
+ " --pid-path <path>: specify file path to store PID file\n",
+ DEFAULT_DEST, DEFAULT_PORT,
+ groonga_path, groonga_protocol);
+ exit(1);
+}
+
+enum {
+ mode_default = 0,
+ mode_list,
+ mode_usage,
+};
+
+#define MODE_MASK 0x007f
+#define MODE_FTP 0x0080
+#define MODE_LOCALONLY 0x0100
+#define MODE_OWNDB 0x0800
+#define MODE_ONMEMORY 0x1000
+
+
+static int
+get_token(char *line, char *token, int maxlen, char **next)
+{
+ int i = 0;
+
+ *next = NULL;
+ token[i] = '\0';
+
+ while (*line) {
+ if (grn_isspace(line, GRN_ENC_UTF8) == 1) {
+ line++;
+ continue;
+ }
+ if (*line == ';') {
+ token[0] = ';';
+ token[1] = '\0';
+ *next = line + 1;
+ return 1;
+ }
+ if (*line == '#') {
+ token[0] = ';';
+ token[1] = '\0';
+ *next = line + 1;
+ return 1;
+ }
+ break;
+ }
+
+ while (*line) {
+ token[i] = *line;
+ i++;
+ if (grn_isspace(line + 1, GRN_ENC_UTF8) == 1) {
+ token[i] = '\0';
+ *next = line + 1;
+ return 1;
+ }
+ if (*(line + 1) == ';') {
+ token[i] = '\0';
+ *next = line + 1;
+ return 1;
+ }
+ if (*(line + 1) == '#') {
+ token[i] = '\0';
+ *next = line + 1;
+ return 1;
+ }
+ if (*(line + 1) == '\0') {
+ token[i] = '\0';
+ return 1;
+ }
+
+ line++;
+ }
+ return 0;
+}
+
+/* SET_PORT and SET_HOST */
+static grn_bool
+check_script(grn_ctx *ctx, const char *script_file_path)
+{
+ FILE *script_file;
+ grn_obj line;
+ char token[BUF_LEN];
+ char prev[BUF_LEN];
+ char *next = NULL;
+
+ script_file = fopen(script_file_path, "r");
+ if (!script_file) {
+ fprintf(stderr, "Cannot open script file: <%s>\n", script_file_path);
+ return GRN_FALSE;
+ }
+
+ GRN_TEXT_INIT(&line, 0);
+ while (grn_text_fgets(ctx, &line, script_file) == GRN_SUCCESS) {
+ GRN_TEXT_VALUE(&line)[GRN_TEXT_LEN(&line) - 1] = '\0';
+ get_token(GRN_TEXT_VALUE(&line), token, BUF_LEN, &next);
+ strcpy(prev, token);
+
+ while (next) {
+ get_token(next, token, BUF_LEN, &next);
+ if (!strncmp(prev, "SET_PORT", 8)) {
+ grntest_serverport = grn_atoi(token, token + strlen(token), NULL);
+ }
+ if (!strncmp(prev, "SET_HOST", 8)) {
+ strcpy(grntest_serverhost, token);
+ grntest_remote_mode = 1;
+ }
+ strcpy(prev, token);
+ }
+ }
+ grn_obj_unlink(ctx, &line);
+
+ fclose(script_file);
+ return GRN_TRUE;
+}
+
+#ifndef WIN32
+static void
+timeout(int sig)
+{
+ fprintf(stderr, "timeout:groonga server cannot shutdown!!\n");
+ fprintf(stderr, "Use \"kill -9 %d\"\n", grntest_server_id);
+ alarm(0);
+}
+
+static void
+setexit(int sig)
+{
+ grntest_sigint = 1;
+}
+
+static int
+setsigalarm(int sec)
+{
+ int ret;
+ struct sigaction sig;
+
+ alarm(sec);
+ sig.sa_handler = timeout;
+ sig.sa_flags = 0;
+ sigemptyset(&sig.sa_mask);
+ ret = sigaction(SIGALRM, &sig, NULL);
+ if (ret == -1) {
+ fprintf(stderr, "setsigalarm:errno= %d\n", errno);
+ }
+ return ret;
+}
+
+static int
+setsigint(void)
+{
+ int ret;
+ struct sigaction sig;
+
+ sig.sa_handler = setexit;
+ sig.sa_flags = 0;
+ sigemptyset(&sig.sa_mask);
+ ret = sigaction(SIGINT, &sig, NULL);
+ if (ret == -1) {
+ fprintf(stderr, "setsigint:errno= %d\n", errno);
+ }
+ return ret;
+}
+#endif /* WIN32 */
+
+int
+main(int argc, char **argv)
+{
+ int qnum, i, mode = 0;
+ int exit_code = EXIT_SUCCESS;
+ grn_ctx context;
+ char sysinfo[BUF_LEN];
+ char log_path_buffer[BUF_LEN];
+ const char *log_path = NULL;
+ const char *pid_path = NULL;
+ const char *portstr = NULL, *hoststr = NULL, *dbname = NULL, *scrname = NULL, *outdir = NULL, *outtype = NULL;
+ time_t sec;
+
+ static grn_str_getopt_opt opts[] = {
+ {'i', "host", NULL, 0, GETOPT_OP_NONE},
+ {'p', "port", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "log-output-dir", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "output-type", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "dir", NULL, mode_list, GETOPT_OP_UPDATE},
+ {'\0', "ftp", NULL, MODE_FTP, GETOPT_OP_ON},
+ {'h', "help", NULL, mode_usage, GETOPT_OP_UPDATE},
+ {'\0', "localonly", NULL, MODE_LOCALONLY, GETOPT_OP_ON},
+ {'\0', "onmemory", NULL, MODE_ONMEMORY, GETOPT_OP_ON},
+ {'\0', "owndb", NULL, MODE_OWNDB, GETOPT_OP_ON},
+ {'\0', "groonga", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "protocol", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "log-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "pid-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', NULL, NULL, 0, 0}
+ };
+
+ opts[0].arg = &hoststr;
+ opts[1].arg = &portstr;
+ opts[2].arg = &outdir;
+ opts[3].arg = &outtype;
+ opts[10].arg = &groonga_path;
+ opts[11].arg = &groonga_protocol;
+ opts[12].arg = &log_path;
+ opts[13].arg = &pid_path;
+
+ i = grn_str_getopt(argc, argv, opts, &mode);
+ if (i < 0) {
+ usage();
+ }
+
+ switch (mode & MODE_MASK) {
+ case mode_list :
+ ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, "*.scr", 1, "data",
+ NULL);
+ return 0;
+ break;
+ case mode_usage :
+ usage();
+ break;
+ default :
+ break;
+ }
+
+ if (pid_path) {
+ FILE *pid_file;
+ pid_file = fopen(pid_path, "w");
+ if (pid_file) {
+ fprintf(pid_file, "%d", getpid());
+ fclose(pid_file);
+ } else {
+ fprintf(stderr,
+ "failed to open PID file: <%s>: %s\n",
+ pid_path, strerror(errno));
+ }
+ }
+
+ if (i < argc) {
+ scrname = argv[i];
+ }
+ if (i < argc - 1) {
+ dbname = argv[i+1];
+ }
+ grntest_dbpath = dbname;
+
+ if (mode & MODE_LOCALONLY) {
+ grntest_localonly_mode = 1;
+ grntest_remote_mode = 1;
+ }
+
+ if (mode & MODE_OWNDB) {
+ grntest_localonly_mode = 1;
+ grntest_remote_mode = 1;
+ grntest_owndb_mode = 1;
+ }
+
+ if (mode & MODE_ONMEMORY) {
+ grntest_onmemory_mode= 1;
+ }
+
+ if (mode & MODE_FTP) {
+ grntest_ftp_mode = GRN_TRUE;
+ }
+
+ if ((scrname == NULL) || (dbname == NULL)) {
+ usage();
+ }
+
+ strcpy(grntest_serverhost, DEFAULT_DEST);
+ if (hoststr) {
+ grntest_remote_mode = 1;
+ strcpy(grntest_serverhost, hoststr);
+ }
+ grntest_serverport = DEFAULT_PORT;
+ if (portstr) {
+ grntest_serverport = grn_atoi(portstr, portstr + strlen(portstr), NULL);
+ }
+
+ if (outtype && !strcmp(outtype, "tsv")) {
+ grntest_outtype = OUT_TSV;
+ }
+
+ grn_init();
+ CRITICAL_SECTION_INIT(grntest_cs);
+
+ grn_ctx_init(&context, 0);
+ grn_ctx_init(&grntest_server_context, 0);
+ grn_db_create(&grntest_server_context, NULL, NULL);
+ grn_set_default_encoding(GRN_ENC_UTF8);
+
+ if (grntest_ftp_mode) {
+ sync_script(&context, scrname);
+ }
+ if (!check_script(&context, scrname)) {
+ exit_code = EXIT_FAILURE;
+ goto exit;
+ }
+
+ start_local(&context, dbname);
+ if (!grntest_remote_mode) {
+ start_server(dbname, 0);
+ }
+
+ if (!grntest_localonly_mode) {
+ if (check_server(&grntest_server_context)) {
+ goto exit;
+ }
+ }
+
+ get_scriptname(scrname, grntest_scriptname, ".scr");
+ get_username(grntest_username, 256);
+
+ GRN_TIME_INIT(&grntest_starttime, 0);
+ GRN_TIME_NOW(&context, &grntest_starttime);
+ sec = (time_t)(GRN_TIME_VALUE(&grntest_starttime)/1000000);
+ get_date(grntest_date, &sec);
+
+ if (!log_path) {
+ if (outdir) {
+ sprintf(log_path_buffer,
+ "%s/%s-%s-%" GRN_FMT_LLD "-%s.log", outdir, grntest_scriptname,
+ grntest_username,
+ GRN_TIME_VALUE(&grntest_starttime), grn_get_version());
+ } else {
+ sprintf(log_path_buffer,
+ "%s-%s-%" GRN_FMT_LLD "-%s.log", grntest_scriptname,
+ grntest_username,
+ GRN_TIME_VALUE(&grntest_starttime), grn_get_version());
+ }
+ log_path = log_path_buffer;
+ }
+
+ grntest_log_file = fopen(log_path, "w+b");
+ if (!grntest_log_file) {
+ fprintf(stderr, "Cannot open log file: <%s>\n", log_path);
+ goto exit;
+ }
+
+ get_sysinfo(dbname, sysinfo, BUF_LEN);
+ output_sysinfo(sysinfo);
+
+#ifndef WIN32
+ setsigint();
+#endif /* WIN32 */
+ qnum = do_script(&context, scrname);
+ output_result_final(&context, qnum);
+ fclose(grntest_log_file);
+
+ if (grntest_ftp_mode) {
+ ftp_sub(FTPUSER, FTPPASSWD, FTPSERVER, log_path, 3,
+ "report", NULL);
+ }
+ fprintf(stderr, "grntest done. logfile=%s\n", log_path);
+
+exit:
+ if (pid_path) {
+ remove(pid_path);
+ }
+
+ shutdown_server();
+#ifdef WIN32
+ if (!grntest_remote_mode) {
+ int ret;
+ ret = WaitForSingleObject(grntest_pi.hProcess, 20000);
+ if (ret == WAIT_TIMEOUT) {
+ fprintf(stderr, "timeout:groonga server cannot shutdown!!\n");
+ fprintf(stderr, "Cannot wait\n");
+ exit(1);
+ }
+ }
+#else
+ if (grntest_server_id) {
+ int ret, pstatus;
+ setsigalarm(20);
+ ret = waitpid(grntest_server_id, &pstatus, 0);
+ if (ret < 0) {
+ fprintf(stderr, "Cannot wait\n");
+ exit(1);
+ }
+/*
+ else {
+ fprintf(stderr, "pstatus = %d\n", pstatus);
+ }
+*/
+ alarm(0);
+ }
+#endif /* WIN32 */
+ CRITICAL_SECTION_FIN(grntest_cs);
+ grn_obj_close(&context, &grntest_starttime);
+ grn_obj_close(&context, grntest_db);
+ grn_ctx_fin(&context);
+ grn_obj_close(&grntest_server_context, grn_ctx_db(&grntest_server_context));
+ grn_ctx_fin(&grntest_server_context);
+ grn_fin();
+ return exit_code;
+}
diff --git a/storage/mroonga/vendor/groonga/src/groonga_benchmark_sources.am b/storage/mroonga/vendor/groonga/src/groonga_benchmark_sources.am
new file mode 100644
index 00000000000..bf05fbff632
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/groonga_benchmark_sources.am
@@ -0,0 +1,2 @@
+groonga_benchmark_SOURCES = \
+ groonga_benchmark.c
diff --git a/storage/mroonga/vendor/groonga/src/groonga_sources.am b/storage/mroonga/vendor/groonga/src/groonga_sources.am
new file mode 100644
index 00000000000..308fdc3df96
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/groonga_sources.am
@@ -0,0 +1,2 @@
+groonga_SOURCES = \
+ groonga.c
diff --git a/storage/mroonga/vendor/groonga/src/httpd/Makefile.am b/storage/mroonga/vendor/groonga/src/httpd/Makefile.am
new file mode 100644
index 00000000000..88bcc03a33c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/httpd/Makefile.am
@@ -0,0 +1,32 @@
+NGINX_DIR = $(top_builddir)/vendor/nginx-$(NGINX_VERSION)
+
+EXTRA_DIST = \
+ nginx-module \
+ configure
+
+if WITH_GROONGA_HTTPD
+NGINX_MAKEILE = $(NGINX_DIR)/Makefile
+NGINX_MAKEFILE_DEPEND_FILES = \
+ configure \
+ Makefile.am \
+ $(top_builddir)/config.status \
+ $(srcdir)/nginx-module/config
+
+$(NGINX_MAKEILE): $(NGINX_MAKEFILE_DEPEND_FILES)
+ $(srcdir)/configure --srcdir="$(srcdir)" `../../config.status --config`
+
+# nginx's Makefile specify 'build' as the default rule.
+# This isn't compatible with the 'all' default rule generated by Automake
+# So, override the all rule.
+all-nginx: $(NGINX_MAKEILE)
+ (cd $(NGINX_DIR) && $(MAKE) build)
+all-local: all-nginx
+
+clean-nginx: $(NGINX_MAKEILE)
+ (cd $(NGINX_DIR) && $(MAKE) clean)
+clean-local: clean-nginx
+
+install-exec-nginx: $(NGINX_MAKEILE)
+ (cd $(NGINX_DIR) && $(MAKE) install)
+install-exec-local: install-exec-nginx
+endif
diff --git a/storage/mroonga/vendor/groonga/src/httpd/nginx-module/config b/storage/mroonga/vendor/groonga/src/httpd/nginx-module/config
new file mode 100644
index 00000000000..fc1fe16fad7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/httpd/nginx-module/config
@@ -0,0 +1,52 @@
+# -*- sh -*-
+
+groonga_strip_switch()
+{
+ # skip "-I" from "-I/usr/..."
+ tail -c +3
+}
+
+if [ "$GROONGA_HTTPD_IN_TREE" = yes ]; then
+ groonga_cflags="-I${GROONGA_HTTPD_IN_TREE_INCLUDE_PATH}"
+ groonga_cflags="${groonga_cflags} -DNGX_HTTP_GROONGA_LOG_PATH=\\\"\"${GROONGA_HTTPD_GROONGA_LOG_PATH}\"\\\""
+ groonga_cflags="${groonga_cflags} -DNGX_HTTP_GROONGA_QUERY_LOG_PATH=\\\"\"${GROONGA_HTTPD_GROONGA_QUERY_LOG_PATH}\"\\\""
+ groonga_libs="-L${GROONGA_HTTPD_IN_TREE_LINK_PATH} -lgroonga"
+ if [ -n "${GROONGA_HTTPD_RPATH}" ]; then
+ groonga_libs="$groonga_libs -Wl,-rpath -Wl,${GROONGA_HTTPD_RPATH}"
+ fi
+
+ ngx_addon_name=ngx_http_groonga_module
+ HTTP_MODULES="$HTTP_MODULES ngx_http_groonga_module"
+ NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_groonga_module.c"
+ CFLAGS="$CFLAGS $groonga_cflags"
+ CORE_LIBS="$CORE_LIBS $groonga_libs"
+
+ return 0
+fi
+
+groonga_cflags="$(pkg-config --cflags groonga)"
+groonga_feature_path="$(pkg-config --cflags-only-I groonga |
+ groonga_strip_switch)"
+groonga_libs="$(pkg-config --libs groonga)"
+
+ngx_feature="groonga"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs="#include <groonga.h>"
+ngx_feature_path="$groonga_feature_path"
+ngx_feature_libs="$groonga_libs"
+ngx_feature_test="grn_get_version()"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ ngx_addon_name=ngx_http_groonga_module
+ HTTP_MODULES="$HTTP_MODULES ngx_http_groonga_module"
+ NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_groonga_module.c"
+ CFLAGS="$CFLAGS $groonga_cflags"
+ CORE_LIBS="$CORE_LIBS $groonga_libs"
+else
+ cat << END
+$0: error: the groonga module requires the groonga library.
+END
+ exit 1
+fi
diff --git a/storage/mroonga/vendor/groonga/src/httpd/nginx-module/ngx_http_groonga_module.c b/storage/mroonga/vendor/groonga/src/httpd/nginx-module/ngx_http_groonga_module.c
new file mode 100644
index 00000000000..26be6be7d0a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/httpd/nginx-module/ngx_http_groonga_module.c
@@ -0,0 +1,1440 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2012-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_http.h>
+
+#include <groonga.h>
+
+#define GRN_NO_FLAGS 0
+
+typedef struct {
+ ngx_flag_t enabled;
+ ngx_str_t database_path;
+ char *database_path_cstr;
+ ngx_flag_t database_auto_create;
+ ngx_str_t base_path;
+ ngx_str_t log_path;
+ ngx_open_file_t *log_file;
+ grn_log_level log_level;
+ ngx_str_t query_log_path;
+ ngx_open_file_t *query_log_file;
+ size_t cache_limit;
+ char *config_file;
+ int config_line;
+ char *name;
+ grn_ctx context;
+ grn_cache *cache;
+} ngx_http_groonga_loc_conf_t;
+
+typedef struct {
+ ngx_log_t *log;
+ ngx_pool_t *pool;
+ ngx_int_t rc;
+} ngx_http_groonga_database_callback_data_t;
+
+typedef struct {
+ grn_bool initialized;
+ grn_ctx context;
+ grn_obj head;
+ grn_obj body;
+ grn_obj foot;
+} ngx_http_groonga_handler_data_t;
+
+typedef struct {
+ ngx_pool_t *pool;
+ ngx_open_file_t *file;
+} ngx_http_groonga_logger_data_t;
+
+typedef struct {
+ ngx_pool_t *pool;
+ ngx_open_file_t *file;
+ ngx_str_t *path;
+} ngx_http_groonga_query_logger_data_t;
+
+typedef void (*ngx_http_groonga_loc_conf_callback_pt)(ngx_http_groonga_loc_conf_t *conf, void *user_data);
+
+ngx_module_t ngx_http_groonga_module;
+
+static char *
+ngx_str_null_terminate(ngx_pool_t *pool, const ngx_str_t *string)
+{
+ char *null_terminated_c_string;
+
+ null_terminated_c_string = ngx_pnalloc(pool, string->len + 1);
+ if (!null_terminated_c_string) {
+ return NULL;
+ }
+
+ memcpy(null_terminated_c_string, string->data, string->len);
+ null_terminated_c_string[string->len] = '\0';
+
+ return null_terminated_c_string;
+}
+
+static grn_bool
+ngx_str_equal_c_string(ngx_str_t *string, const char *c_string)
+{
+ if (string->len != strlen(c_string)) {
+ return GRN_FALSE;
+ }
+
+ return memcmp(c_string, string->data, string->len) == 0;
+}
+
+static grn_bool
+ngx_str_is_custom_path(ngx_str_t *string)
+{
+ if (string->len == 0) {
+ return GRN_FALSE;
+ }
+
+ if (strncmp((const char *)(string->data), "off", string->len) == 0) {
+ return GRN_FALSE;
+ }
+
+ return GRN_TRUE;
+}
+
+static void
+ngx_http_groonga_logger_log(grn_ctx *ctx, grn_log_level level,
+ const char *timestamp, const char *title,
+ const char *message, const char *location,
+ void *user_data)
+{
+ ngx_http_groonga_logger_data_t *logger_data = user_data;
+ const char level_marks[] = " EACewnid-";
+ u_char buffer[NGX_MAX_ERROR_STR];
+ u_char *last;
+
+ if (location && *location) {
+ last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR,
+ "%s|%c|%s %s %s\n",
+ timestamp, *(level_marks + level), title, message,
+ location);
+ } else {
+ last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR,
+ "%s|%c|%s %s\n",
+ timestamp, *(level_marks + level), title, message);
+ }
+ ngx_write_fd(logger_data->file->fd, buffer, last - buffer);
+}
+
+static void
+ngx_http_groonga_logger_reopen(grn_ctx *ctx, void *user_data)
+{
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log will be closed.");
+ ngx_reopen_files((ngx_cycle_t *)ngx_cycle, -1);
+ GRN_LOG(ctx, GRN_LOG_NOTICE, "log opened.");
+}
+
+static void
+ngx_http_groonga_logger_fin(grn_ctx *ctx, void *user_data)
+{
+ ngx_http_groonga_logger_data_t *logger_data = user_data;
+
+ ngx_pfree(logger_data->pool, logger_data);
+}
+
+static grn_logger ngx_http_groonga_logger = {
+ GRN_LOG_DEFAULT_LEVEL,
+ GRN_LOG_TIME | GRN_LOG_MESSAGE,
+ NULL,
+ ngx_http_groonga_logger_log,
+ ngx_http_groonga_logger_reopen,
+ ngx_http_groonga_logger_fin
+};
+
+static ngx_int_t
+ngx_http_groonga_context_init_logger(grn_ctx *context,
+ ngx_http_groonga_loc_conf_t *location_conf,
+ ngx_pool_t *pool,
+ ngx_log_t *log)
+{
+ ngx_http_groonga_logger_data_t *logger_data;
+
+ if (!location_conf->log_file) {
+ return NGX_OK;
+ }
+
+ logger_data = ngx_pcalloc(pool, sizeof(ngx_http_groonga_logger_data_t));
+ if (!logger_data) {
+ ngx_log_error(NGX_LOG_ERR, log, 0,
+ "http_groonga: failed to allocate memory for logger");
+ return NGX_ERROR;
+ }
+
+ logger_data->pool = pool;
+ logger_data->file = location_conf->log_file;
+ ngx_http_groonga_logger.max_level = location_conf->log_level;
+ ngx_http_groonga_logger.user_data = logger_data;
+ grn_logger_set(context, &ngx_http_groonga_logger);
+
+ return NGX_OK;
+}
+
+static void
+ngx_http_groonga_query_logger_log(grn_ctx *ctx, unsigned int flag,
+ const char *timestamp, const char *info,
+ const char *message, void *user_data)
+{
+ ngx_http_groonga_query_logger_data_t *data = user_data;
+ u_char buffer[NGX_MAX_ERROR_STR];
+ u_char *last;
+
+ last = ngx_slprintf(buffer, buffer + NGX_MAX_ERROR_STR,
+ "%s|%s%s\n",
+ timestamp, info, message);
+ ngx_write_fd(data->file->fd, buffer, last - buffer);
+}
+
+static void
+ngx_http_groonga_query_logger_reopen(grn_ctx *ctx, void *user_data)
+{
+ ngx_http_groonga_query_logger_data_t *data = user_data;
+
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_DESTINATION, " ",
+ "query log will be closed: <%.*s>",
+ (int)(data->path->len), data->path->data);
+ ngx_reopen_files((ngx_cycle_t *)ngx_cycle, -1);
+ GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_DESTINATION, " ",
+ "query log is opened: <%.*s>",
+ (int)(data->path->len), data->path->data);
+}
+
+static void
+ngx_http_groonga_query_logger_fin(grn_ctx *ctx, void *user_data)
+{
+ ngx_http_groonga_query_logger_data_t *data = user_data;
+
+ ngx_pfree(data->pool, data);
+}
+
+static grn_query_logger ngx_http_groonga_query_logger = {
+ GRN_QUERY_LOG_DEFAULT,
+ NULL,
+ ngx_http_groonga_query_logger_log,
+ ngx_http_groonga_query_logger_reopen,
+ ngx_http_groonga_query_logger_fin
+};
+
+static ngx_int_t
+ngx_http_groonga_context_init_query_logger(grn_ctx *context,
+ ngx_http_groonga_loc_conf_t *location_conf,
+ ngx_pool_t *pool,
+ ngx_log_t *log)
+{
+ ngx_http_groonga_query_logger_data_t *query_logger_data;
+
+ if (!location_conf->query_log_file) {
+ return NGX_OK;
+ }
+
+ query_logger_data = ngx_pcalloc(pool,
+ sizeof(ngx_http_groonga_query_logger_data_t));
+ if (!query_logger_data) {
+ ngx_log_error(NGX_LOG_ERR, log, 0,
+ "http_groonga: failed to allocate memory for query logger");
+ return NGX_ERROR;
+ }
+
+ query_logger_data->pool = pool;
+ query_logger_data->file = location_conf->query_log_file;
+ query_logger_data->path = &(location_conf->query_log_path);
+ ngx_http_groonga_query_logger.user_data = query_logger_data;
+ grn_query_logger_set(context, &ngx_http_groonga_query_logger);
+
+ return NGX_OK;
+}
+
+static ngx_int_t
+ngx_http_groonga_context_init(grn_ctx *context,
+ ngx_http_groonga_loc_conf_t *location_conf,
+ ngx_pool_t *pool,
+ ngx_log_t *log)
+{
+ ngx_int_t status;
+
+ grn_ctx_init(context, GRN_NO_FLAGS);
+
+ status = ngx_http_groonga_context_init_logger(context,
+ location_conf,
+ pool,
+ log);
+ if (status == NGX_ERROR) {
+ grn_ctx_fin(context);
+ return status;
+ }
+
+ status = ngx_http_groonga_context_init_query_logger(context,
+ location_conf,
+ pool,
+ log);
+ if (status == NGX_ERROR) {
+ grn_ctx_fin(context);
+ return status;
+ }
+
+ if (location_conf->cache) {
+ grn_cache_current_set(context, location_conf->cache);
+ }
+
+ return status;
+}
+
+static void
+ngx_http_groonga_context_log_error(ngx_log_t *log, grn_ctx *context)
+{
+ if (context->rc == GRN_SUCCESS) {
+ return;
+ }
+
+ ngx_log_error(NGX_LOG_ERR, log, 0, "%s", context->errbuf);
+}
+
+static ngx_int_t
+ngx_http_groonga_context_check_error(ngx_log_t *log, grn_ctx *context)
+{
+ if (context->rc == GRN_SUCCESS) {
+ return NGX_OK;
+ } else {
+ ngx_http_groonga_context_log_error(log, context);
+ return NGX_HTTP_BAD_REQUEST;
+ }
+}
+
+static ngx_buf_t *
+ngx_http_groonga_grn_obj_to_ngx_buf(ngx_pool_t *pool, grn_obj *object)
+{
+ ngx_buf_t *buffer;
+ buffer = ngx_pcalloc(pool, sizeof(ngx_buf_t));
+ if (buffer == NULL) {
+ return NULL;
+ }
+
+ /* adjust the pointers of the buffer */
+ buffer->pos = (u_char *)GRN_TEXT_VALUE(object);
+ buffer->last = (u_char *)GRN_TEXT_VALUE(object) + GRN_TEXT_LEN(object);
+ buffer->memory = 1; /* this buffer is in memory */
+
+ return buffer;
+}
+
+static void
+ngx_http_groonga_handler_cleanup(void *user_data)
+{
+ ngx_http_groonga_handler_data_t *data = user_data;
+ grn_ctx *context;
+
+ if (!data->initialized) {
+ return;
+ }
+
+ context = &(data->context);
+ GRN_OBJ_FIN(context, &(data->head));
+ GRN_OBJ_FIN(context, &(data->body));
+ GRN_OBJ_FIN(context, &(data->foot));
+ grn_logger_set(context, NULL);
+ grn_query_logger_set(context, NULL);
+ grn_ctx_fin(context);
+}
+
+static void
+ngx_http_groonga_context_receive_handler(grn_ctx *context,
+ int flags,
+ void *callback_data)
+{
+ ngx_http_groonga_handler_data_t *data = callback_data;
+ char *result = NULL;
+ unsigned int result_size = 0;
+ int recv_flags;
+
+ if (!(flags & GRN_CTX_TAIL)) {
+ return;
+ }
+
+ grn_ctx_recv(context, &result, &result_size, &recv_flags);
+
+ if (recv_flags == GRN_CTX_QUIT) {
+ ngx_int_t ngx_rc;
+ ngx_int_t ngx_pid;
+
+ if (ngx_process == NGX_PROCESS_SINGLE) {
+ ngx_pid = getpid();
+ } else {
+ ngx_pid = getppid();
+ }
+
+ ngx_rc = ngx_os_signal_process((ngx_cycle_t*)ngx_cycle,
+ "stop",
+ ngx_pid);
+ if (ngx_rc == NGX_OK) {
+ context->stat &= ~GRN_CTX_QUIT;
+ grn_ctx_recv(context, &result, &result_size, &recv_flags);
+ context->stat |= GRN_CTX_QUIT;
+ } else {
+ context->rc = GRN_OPERATION_NOT_PERMITTED;
+ GRN_TEXT_PUTS(context, &(data->body), "false");
+ context->stat &= ~GRN_CTX_QUIT;
+ }
+ }
+
+ if (result_size > 0 ||
+ GRN_TEXT_LEN(&(data->body)) > 0 ||
+ context->rc != GRN_SUCCESS) {
+ if (result_size > 0) {
+ GRN_TEXT_PUT(context, &(data->body), result, result_size);
+ }
+
+ grn_output_envelope(context,
+ context->rc,
+ &(data->head),
+ &(data->body),
+ &(data->foot),
+ NULL,
+ 0);
+ }
+}
+
+static ngx_int_t
+ngx_http_groonga_extract_command_path(ngx_http_request_t *r,
+ ngx_str_t *command_path)
+{
+ size_t base_path_length;
+
+ ngx_http_core_loc_conf_t *http_location_conf;
+ ngx_http_groonga_loc_conf_t *location_conf;
+
+ http_location_conf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+ location_conf = ngx_http_get_module_loc_conf(r, ngx_http_groonga_module);
+
+ command_path->data = r->unparsed_uri.data;
+ command_path->len = r->unparsed_uri.len;
+ base_path_length = http_location_conf->name.len;
+ if (location_conf->base_path.len > 0) {
+ if (command_path->len < location_conf->base_path.len) {
+ ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
+ "requested URI is shorter than groonga_base_path: "
+ "URI: <%V>, groonga_base_path: <%V>",
+ &(r->unparsed_uri), &(location_conf->base_path));
+ } else if (strncmp((const char *)command_path->data,
+ (const char *)(location_conf->base_path.data),
+ location_conf->base_path.len) < 0) {
+ ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
+ "groonga_base_path doesn't match requested URI: "
+ "URI: <%V>, groonga_base_path: <%V>",
+ &(r->unparsed_uri), &(location_conf->base_path));
+ } else {
+ base_path_length = location_conf->base_path.len;
+ }
+ }
+ command_path->data += base_path_length;
+ command_path->len -= base_path_length;
+ if (command_path->len > 0 && command_path->data[0] == '/') {
+ command_path->data += 1;
+ command_path->len -= 1;
+ }
+ if (command_path->len == 0) {
+ return NGX_HTTP_BAD_REQUEST;
+ }
+
+ return NGX_OK;
+}
+
+static void
+ngx_http_groonga_handler_set_content_type(ngx_http_request_t *r,
+ const char *content_type)
+{
+ r->headers_out.content_type.len = strlen(content_type);
+ r->headers_out.content_type.data = (u_char *)content_type;
+ r->headers_out.content_type_len = r->headers_out.content_type.len;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_create_data(ngx_http_request_t *r,
+ ngx_http_groonga_handler_data_t **data_return)
+{
+ ngx_int_t rc;
+
+ ngx_http_groonga_loc_conf_t *location_conf;
+
+ ngx_http_cleanup_t *cleanup;
+ ngx_http_groonga_handler_data_t *data;
+
+ grn_ctx *context;
+
+ location_conf = ngx_http_get_module_loc_conf(r, ngx_http_groonga_module);
+
+ cleanup = ngx_http_cleanup_add(r, sizeof(ngx_http_groonga_handler_data_t));
+ cleanup->handler = ngx_http_groonga_handler_cleanup;
+ data = cleanup->data;
+ *data_return = data;
+
+ context = &(data->context);
+ rc = ngx_http_groonga_context_init(context, location_conf,
+ r->pool, r->connection->log);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+ data->initialized = GRN_TRUE;
+ GRN_TEXT_INIT(&(data->head), GRN_NO_FLAGS);
+ GRN_TEXT_INIT(&(data->body), GRN_NO_FLAGS);
+ GRN_TEXT_INIT(&(data->foot), GRN_NO_FLAGS);
+ grn_ctx_use(context, grn_ctx_db(&(location_conf->context)));
+ rc = ngx_http_groonga_context_check_error(r->connection->log, context);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ grn_ctx_recv_handler_set(context,
+ ngx_http_groonga_context_receive_handler,
+ data);
+
+ return NGX_OK;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_process_command_path(ngx_http_request_t *r,
+ ngx_str_t *command_path,
+ ngx_http_groonga_handler_data_t *data)
+{
+ grn_ctx *context;
+ grn_obj uri;
+
+ context = &(data->context);
+ GRN_TEXT_INIT(&uri, 0);
+ GRN_TEXT_PUTS(context, &uri, "/d/");
+ GRN_TEXT_PUT(context, &uri, command_path->data, command_path->len);
+ grn_ctx_send(context, GRN_TEXT_VALUE(&uri), GRN_TEXT_LEN(&uri),
+ GRN_NO_FLAGS);
+ ngx_http_groonga_context_log_error(r->connection->log, context);
+ GRN_OBJ_FIN(context, &uri);
+
+ return NGX_OK;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_validate_post_command(ngx_http_request_t *r,
+ ngx_str_t *command_path,
+ ngx_http_groonga_handler_data_t *data)
+{
+ grn_ctx *context;
+ ngx_str_t command;
+
+ command.data = command_path->data;
+ if (r->args.len == 0) {
+ command.len = command_path->len;
+ } else {
+ command.len = command_path->len - r->args.len - strlen("?");
+ }
+ if (ngx_str_equal_c_string(&command, "load")) {
+ return NGX_OK;
+ }
+
+ context = &(data->context);
+ ngx_http_groonga_handler_set_content_type(r, "text/plain");
+ GRN_TEXT_PUTS(context, &(data->body), "command for POST must be <load>: <");
+ GRN_TEXT_PUT(context, &(data->body), command.data, command.len);
+ GRN_TEXT_PUTS(context, &(data->body), ">");
+
+ return NGX_HTTP_BAD_REQUEST;
+}
+
+static ngx_int_t
+ngx_http_groonga_send_lines(grn_ctx *context,
+ ngx_http_request_t *r,
+ u_char *current,
+ u_char *last)
+{
+ ngx_int_t rc;
+
+ u_char *line_start;
+
+ for (line_start = current; current < last; current++) {
+ if (*current != '\n') {
+ continue;
+ }
+
+ grn_ctx_send(context, (const char *)line_start, current - line_start,
+ GRN_NO_FLAGS);
+ rc = ngx_http_groonga_context_check_error(r->connection->log, context);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+ line_start = current + 1;
+ }
+ if (line_start < current) {
+ grn_ctx_send(context, (const char *)line_start, current - line_start,
+ GRN_NO_FLAGS);
+ rc = ngx_http_groonga_context_check_error(r->connection->log, context);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+ }
+
+ return NGX_OK;
+}
+
+static ngx_int_t
+ngx_http_groonga_join_request_body_chain(ngx_http_request_t *r,
+ ngx_chain_t *chain,
+ u_char **out_start,
+ u_char **out_end)
+{
+ ngx_int_t rc;
+
+ ngx_log_t *log = r->connection->log;
+
+ ngx_chain_t *current;
+ u_char *out;
+ size_t out_size;
+
+ u_char *out_cursor;
+ ngx_buf_t *buffer;
+ size_t buffer_size;
+
+ out_size = 0;
+ for (current = chain; current; current = current->next) {
+ out_size += ngx_buf_size(current->buf);
+ }
+ out = ngx_palloc(r->pool, out_size);
+ if (!out) {
+ ngx_log_error(NGX_LOG_ERR, log, 0,
+ "http_groonga: failed to allocate memory for request body");
+ return NGX_ERROR;
+ }
+
+ out_cursor = out;
+ for (current = chain; current; current = current->next) {
+ buffer = current->buf;
+ buffer_size = ngx_buf_size(current->buf);
+
+ if (buffer->file) {
+ rc = ngx_read_file(buffer->file, out_cursor, buffer_size, 0);
+ if (rc < 0) {
+ ngx_log_error(NGX_LOG_ERR, log, 0,
+ "http_groonga: failed to read a request body stored in a file");
+ return rc;
+ }
+ } else {
+ ngx_memcpy(out_cursor, buffer->pos, buffer_size);
+ }
+ out_cursor += buffer_size;
+ }
+
+ *out_start = out;
+ *out_end = out + out_size;
+
+ return NGX_OK;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_process_body(ngx_http_request_t *r,
+ ngx_http_groonga_handler_data_t *data)
+{
+ ngx_int_t rc;
+
+ grn_ctx *context;
+
+ ngx_buf_t *body;
+ u_char *body_data;
+ u_char *body_data_end;
+
+ context = &(data->context);
+
+ body = r->request_body->bufs->buf;
+ if (!body) {
+ ngx_http_groonga_handler_set_content_type(r, "text/plain");
+ GRN_TEXT_PUTS(context, &(data->body), "must send load data as body");
+ return NGX_HTTP_BAD_REQUEST;
+ }
+
+ rc = ngx_http_groonga_join_request_body_chain(r,
+ r->request_body->bufs,
+ &body_data,
+ &body_data_end);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_send_lines(context, r, body_data, body_data_end);
+ ngx_pfree(r->pool, body_data);
+
+ return rc;
+}
+
+
+static ngx_int_t
+ngx_http_groonga_handler_process_load(ngx_http_request_t *r,
+ ngx_str_t *command_path,
+ ngx_http_groonga_handler_data_t *data)
+{
+ ngx_int_t rc;
+
+ rc = ngx_http_groonga_handler_validate_post_command(r, command_path, data);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_handler_process_command_path(r, command_path, data);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_handler_process_body(r, data);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ return NGX_OK;
+}
+
+static ngx_chain_t *
+ngx_http_groonga_attach_chain(ngx_chain_t *chain, ngx_chain_t *new_chain)
+{
+ ngx_chain_t *last_chain;
+
+ if (new_chain->buf->last == new_chain->buf->pos) {
+ return chain;
+ }
+
+ new_chain->buf->last_buf = 1;
+ new_chain->next = NULL;
+ if (!chain) {
+ return new_chain;
+ }
+
+ chain->buf->last_buf = 0;
+ last_chain = chain;
+ while (last_chain->next) {
+ last_chain = last_chain->next;
+ }
+ last_chain->next = new_chain;
+ return chain;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_send_response(ngx_http_request_t *r,
+ ngx_http_groonga_handler_data_t *data)
+{
+ ngx_int_t rc;
+ grn_ctx *context;
+ const char *content_type;
+ ngx_buf_t *head_buf, *body_buf, *foot_buf;
+ ngx_chain_t head_chain, body_chain, foot_chain;
+ ngx_chain_t *output_chain = NULL;
+
+ context = &(data->context);
+
+ /* set the 'Content-type' header */
+ if (r->headers_out.content_type.len == 0) {
+ content_type = grn_ctx_get_mime_type(context);
+ ngx_http_groonga_handler_set_content_type(r, content_type);
+ }
+
+ /* allocate buffers for a response body */
+ head_buf = ngx_http_groonga_grn_obj_to_ngx_buf(r->pool, &(data->head));
+ if (!head_buf) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ body_buf = ngx_http_groonga_grn_obj_to_ngx_buf(r->pool, &(data->body));
+ if (!body_buf) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ foot_buf = ngx_http_groonga_grn_obj_to_ngx_buf(r->pool, &(data->foot));
+ if (!foot_buf) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ /* attach buffers to the buffer chain */
+ head_chain.buf = head_buf;
+ output_chain = ngx_http_groonga_attach_chain(output_chain, &head_chain);
+ body_chain.buf = body_buf;
+ output_chain = ngx_http_groonga_attach_chain(output_chain, &body_chain);
+ foot_chain.buf = foot_buf;
+ output_chain = ngx_http_groonga_attach_chain(output_chain, &foot_chain);
+
+ /* set the status line */
+ r->headers_out.status = NGX_HTTP_OK;
+ r->headers_out.content_length_n = GRN_TEXT_LEN(&(data->head)) +
+ GRN_TEXT_LEN(&(data->body)) +
+ GRN_TEXT_LEN(&(data->foot));
+ if (r->headers_out.content_length_n == 0) {
+ r->header_only = 1;
+ }
+
+ /* send the headers of your response */
+ rc = ngx_http_send_header(r);
+
+ if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
+ return rc;
+ }
+
+ /* send the buffer chain of your response */
+ rc = ngx_http_output_filter(r, output_chain);
+
+ return rc;
+}
+
+static ngx_int_t
+ngx_http_groonga_handler_get(ngx_http_request_t *r)
+{
+ ngx_int_t rc;
+ ngx_str_t command_path;
+ ngx_http_groonga_handler_data_t *data;
+
+ rc = ngx_http_groonga_extract_command_path(r, &command_path);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_handler_create_data(r, &data);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_handler_process_command_path(r, &command_path, data);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ /* discard request body, since we don't need it here */
+ rc = ngx_http_discard_request_body(r);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ rc = ngx_http_groonga_handler_send_response(r, data);
+
+ return rc;
+}
+
+static void
+ngx_http_groonga_handler_post_send_error_response(ngx_http_request_t *r,
+ ngx_int_t rc)
+{
+ r->headers_out.status = rc;
+ r->headers_out.content_length_n = 0;
+ r->header_only = 1;
+ rc = ngx_http_send_header(r);
+ ngx_http_finalize_request(r, rc);
+}
+
+static void
+ngx_http_groonga_handler_post(ngx_http_request_t *r)
+{
+ ngx_int_t rc;
+ ngx_str_t command_path;
+ ngx_http_groonga_handler_data_t *data = NULL;
+
+ rc = ngx_http_groonga_extract_command_path(r, &command_path);
+ if (rc != NGX_OK) {
+ ngx_http_groonga_handler_post_send_error_response(r, rc);
+ return;
+ }
+
+ rc = ngx_http_groonga_handler_create_data(r, &data);
+ if (rc != NGX_OK) {
+ ngx_http_groonga_handler_post_send_error_response(r, rc);
+ return;
+ }
+
+ rc = ngx_http_groonga_handler_process_load(r, &command_path, data);
+ if (rc != NGX_OK) {
+ ngx_http_groonga_handler_post_send_error_response(r, rc);
+ return;
+ }
+
+ ngx_http_groonga_handler_send_response(r, data);
+ ngx_http_finalize_request(r, rc);
+}
+
+static ngx_int_t
+ngx_http_groonga_handler(ngx_http_request_t *r)
+{
+ ngx_int_t rc;
+
+ switch (r->method) {
+ case NGX_HTTP_GET:
+ case NGX_HTTP_HEAD:
+ rc = ngx_http_groonga_handler_get(r);
+ break;
+ case NGX_HTTP_POST:
+ rc = ngx_http_read_client_request_body(r, ngx_http_groonga_handler_post);
+ if (rc < NGX_HTTP_SPECIAL_RESPONSE) {
+ rc = NGX_DONE;
+ }
+ break;
+ default:
+ rc = NGX_HTTP_NOT_ALLOWED;
+ break;
+ }
+
+ return rc;
+}
+
+static char *
+ngx_http_groonga_conf_set_groonga_slot(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf)
+{
+ char *status;
+ ngx_http_core_loc_conf_t *location_conf;
+ ngx_http_groonga_loc_conf_t *groonga_location_conf = conf;
+
+ status = ngx_conf_set_flag_slot(cf, cmd, conf);
+ if (status != NGX_CONF_OK) {
+ return status;
+ }
+
+ location_conf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
+ if (groonga_location_conf->enabled) {
+ location_conf->handler = ngx_http_groonga_handler;
+ groonga_location_conf->name =
+ ngx_str_null_terminate(cf->pool, &(location_conf->name));
+ groonga_location_conf->config_file =
+ ngx_str_null_terminate(cf->pool, &(cf->conf_file->file.name));
+ groonga_location_conf->config_line = cf->conf_file->line;
+ } else {
+ location_conf->handler = NULL;
+ }
+
+ return NGX_CONF_OK;
+}
+
+static char *
+ngx_http_groonga_conf_set_log_path_slot(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf)
+{
+ char *status;
+ ngx_http_groonga_loc_conf_t *groonga_location_conf = conf;
+
+ status = ngx_conf_set_str_slot(cf, cmd, conf);
+ if (status != NGX_CONF_OK) {
+ return status;
+ }
+
+ if (!groonga_location_conf->log_path.data) {
+ return NGX_CONF_OK;
+ }
+
+ if (!ngx_str_is_custom_path(&(groonga_location_conf->log_path))) {
+ return NGX_CONF_OK;
+ }
+
+ groonga_location_conf->log_file =
+ ngx_conf_open_file(cf->cycle, &(groonga_location_conf->log_path));
+ if (!groonga_location_conf->log_file) {
+ ngx_log_error(NGX_LOG_ERR, cf->cycle->log, 0,
+ "http_groonga: failed to open groonga log file: <%V>",
+ &(groonga_location_conf->log_path));
+ return NGX_CONF_ERROR;
+ }
+
+ return NGX_CONF_OK;
+}
+
+static char *
+ngx_http_groonga_conf_set_log_level_slot(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf)
+{
+ char *status = NGX_CONF_OK;
+ ngx_http_groonga_loc_conf_t *groonga_location_conf = conf;
+ char *value;
+
+ value = ngx_str_null_terminate(cf->cycle->pool,
+ ((ngx_str_t *)cf->args->elts) + 1);
+ if (strcasecmp(value, "none") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_NONE;
+ } else if (strcasecmp(value, "emergency") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_EMERG;
+ } else if (strcasecmp(value, "alert") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_ALERT;
+ } else if (strcasecmp(value, "critical") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_CRIT;
+ } else if (strcasecmp(value, "error") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_ERROR;
+ } else if (strcasecmp(value, "warning") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_WARNING;
+ } else if (strcasecmp(value, "notice") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_NOTICE;
+ } else if (strcasecmp(value, "info") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_INFO;
+ } else if (strcasecmp(value, "debug") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_DEBUG;
+ } else if (strcasecmp(value, "dump") == 0) {
+ groonga_location_conf->log_level = GRN_LOG_DUMP;
+ } else {
+ status = "must be one of 'none', 'emergency', 'alert', "
+ "'ciritical', 'error', 'warning', 'notice', 'info', 'debug' and 'dump'";
+ }
+ ngx_pfree(cf->cycle->pool, value);
+
+ return status;
+}
+
+static char *
+ngx_http_groonga_conf_set_query_log_path_slot(ngx_conf_t *cf,
+ ngx_command_t *cmd,
+ void *conf)
+{
+ char *status;
+ ngx_http_groonga_loc_conf_t *groonga_location_conf = conf;
+
+ status = ngx_conf_set_str_slot(cf, cmd, conf);
+ if (status != NGX_CONF_OK) {
+ return status;
+ }
+
+ if (!groonga_location_conf->query_log_path.data) {
+ return NGX_CONF_OK;
+ }
+
+ if (!ngx_str_is_custom_path(&(groonga_location_conf->query_log_path))) {
+ return NGX_CONF_OK;
+ }
+
+ groonga_location_conf->query_log_file =
+ ngx_conf_open_file(cf->cycle, &(groonga_location_conf->query_log_path));
+ if (!groonga_location_conf->query_log_file) {
+ ngx_log_error(NGX_LOG_ERR, cf->cycle->log, 0,
+ "http_groonga: failed to open groonga query log file: <%V>",
+ &(groonga_location_conf->query_log_path));
+ return NGX_CONF_ERROR;
+ }
+
+ return NGX_CONF_OK;
+}
+
+static void *
+ngx_http_groonga_create_loc_conf(ngx_conf_t *cf)
+{
+ ngx_http_groonga_loc_conf_t *conf;
+ conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_groonga_loc_conf_t));
+ if (conf == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ conf->enabled = NGX_CONF_UNSET;
+ conf->database_path.data = NULL;
+ conf->database_path.len = 0;
+ conf->database_path_cstr = NULL;
+ conf->database_auto_create = NGX_CONF_UNSET;
+ conf->base_path.data = NULL;
+ conf->base_path.len = 0;
+ conf->log_path.data = NULL;
+ conf->log_path.len = 0;
+ conf->log_file = NULL;
+ conf->log_level = GRN_LOG_DEFAULT_LEVEL;
+ conf->query_log_path.data = NULL;
+ conf->query_log_path.len = 0;
+ conf->query_log_file = NULL;
+ conf->cache_limit = NGX_CONF_UNSET_SIZE;
+ conf->config_file = NULL;
+ conf->config_line = 0;
+ conf->cache = NULL;
+
+ return conf;
+}
+
+static char *
+ngx_http_groonga_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
+{
+ ngx_http_groonga_loc_conf_t *prev = parent;
+ ngx_http_groonga_loc_conf_t *conf = child;
+
+ ngx_conf_merge_str_value(conf->database_path, prev->database_path, NULL);
+ ngx_conf_merge_value(conf->database_auto_create,
+ prev->database_auto_create,
+ GRN_TRUE);
+ ngx_conf_merge_size_value(conf->cache_limit, prev->cache_limit,
+ GRN_CACHE_DEFAULT_MAX_N_ENTRIES);
+
+#ifdef NGX_HTTP_GROONGA_LOG_PATH
+ {
+ ngx_str_t default_log_path;
+ default_log_path.data = (u_char *)NGX_HTTP_GROONGA_LOG_PATH;
+ default_log_path.len = strlen(NGX_HTTP_GROONGA_LOG_PATH);
+ conf->log_file = ngx_conf_open_file(cf->cycle, &default_log_path);
+ if (!conf->log_file) {
+ ngx_log_error(NGX_LOG_ERR, cf->cycle->log, 0,
+ "http_groonga: "
+ "failed to open the default groonga log file: <%V>",
+ &default_log_path);
+ return NGX_CONF_ERROR;
+ }
+ }
+#else
+ conf->log_file = NULL;
+#endif
+
+ ngx_conf_merge_str_value(conf->query_log_path, prev->query_log_path,
+ NGX_HTTP_GROONGA_QUERY_LOG_PATH);
+ if (!conf->query_log_file &&
+ ngx_str_is_custom_path(&(conf->query_log_path)) &&
+ conf->enabled) {
+ conf->query_log_file = ngx_conf_open_file(cf->cycle,
+ &(conf->query_log_path));
+ if (!conf->query_log_file) {
+ ngx_log_error(NGX_LOG_ERR, cf->cycle->log, 0,
+ "http_groonga: "
+ "failed to open the default groonga query log file: <%V>",
+ &(conf->query_log_path));
+ return NGX_CONF_ERROR;
+ }
+ }
+
+ return NGX_CONF_OK;
+}
+
+static void
+ngx_http_groonga_each_loc_conf_in_tree(ngx_http_location_tree_node_t *node,
+ ngx_http_groonga_loc_conf_callback_pt callback,
+ void *user_data)
+{
+ if (!node) {
+ return;
+ }
+
+ if (node->exact && node->exact->handler == ngx_http_groonga_handler) {
+ callback(node->exact->loc_conf[ngx_http_groonga_module.ctx_index],
+ user_data);
+ }
+
+ if (node->inclusive && node->inclusive->handler == ngx_http_groonga_handler) {
+ callback(node->inclusive->loc_conf[ngx_http_groonga_module.ctx_index],
+ user_data);
+ }
+
+ ngx_http_groonga_each_loc_conf_in_tree(node->left, callback, user_data);
+ ngx_http_groonga_each_loc_conf_in_tree(node->right, callback, user_data);
+ ngx_http_groonga_each_loc_conf_in_tree(node->tree, callback, user_data);
+}
+
+static void
+ngx_http_groonga_each_loc_conf(ngx_http_conf_ctx_t *http_conf,
+ ngx_http_groonga_loc_conf_callback_pt callback,
+ void *user_data)
+{
+ ngx_http_core_main_conf_t *main_conf;
+ ngx_http_core_srv_conf_t **server_confs;
+ ngx_uint_t i;
+
+ if (!http_conf) {
+ return;
+ }
+
+ main_conf = http_conf->main_conf[ngx_http_core_module.ctx_index];
+ server_confs = main_conf->servers.elts;
+ for (i = 0; i < main_conf->servers.nelts; i++) {
+ ngx_http_core_srv_conf_t *server_conf;
+ ngx_http_core_loc_conf_t *location_conf;
+
+ server_conf = server_confs[i];
+ location_conf = server_conf->ctx->loc_conf[ngx_http_core_module.ctx_index];
+ ngx_http_groonga_each_loc_conf_in_tree(location_conf->static_locations,
+ callback,
+ user_data);
+ }
+}
+
+static ngx_int_t
+ngx_http_groonga_mkdir_p(ngx_log_t *log, const char *dir_name)
+{
+ char sub_path[PATH_MAX];
+ size_t i, dir_name_length;
+
+ dir_name_length = strlen(dir_name);
+ sub_path[0] = dir_name[0];
+ for (i = 1; i < dir_name_length + 1; i++) {
+ if (dir_name[i] == '/' || dir_name[i] == '\0') {
+ struct stat stat_buffer;
+ sub_path[i] = '\0';
+ if (stat(sub_path, &stat_buffer) == -1) {
+ if (ngx_create_dir(sub_path, 0700) == -1) {
+ ngx_log_error(NGX_LOG_EMERG, log, 0,
+ "failed to create directory: %s (%s): %s",
+ sub_path, dir_name,
+ strerror(errno));
+ return NGX_ERROR;
+ }
+ }
+ }
+ sub_path[i] = dir_name[i];
+ }
+
+ return NGX_OK;
+}
+
+static void
+ngx_http_groonga_create_database(ngx_http_groonga_loc_conf_t *location_conf,
+ ngx_http_groonga_database_callback_data_t *data)
+{
+ const char *database_base_name;
+ grn_ctx *context;
+
+ database_base_name = strrchr(location_conf->database_path_cstr, '/');
+ if (database_base_name) {
+ char database_dir[PATH_MAX];
+ database_dir[0] = '\0';
+ strncat(database_dir,
+ location_conf->database_path_cstr,
+ database_base_name - location_conf->database_path_cstr);
+ data->rc = ngx_http_groonga_mkdir_p(data->log, database_dir);
+ if (data->rc != NGX_OK) {
+ return;
+ }
+ }
+
+ context = &(location_conf->context);
+ grn_db_create(context, location_conf->database_path_cstr, NULL);
+ if (context->rc == GRN_SUCCESS) {
+ return;
+ }
+
+ ngx_log_error(NGX_LOG_EMERG, data->log, 0,
+ "failed to create groonga database: %s",
+ context->errbuf);
+ data->rc = NGX_ERROR;
+}
+
+static void
+ngx_http_groonga_open_database_callback(ngx_http_groonga_loc_conf_t *location_conf,
+ void *user_data)
+{
+ ngx_http_groonga_database_callback_data_t *data = user_data;
+ grn_ctx *context;
+
+ context = &(location_conf->context);
+ data->rc = ngx_http_groonga_context_init(context, location_conf,
+ data->pool, data->log);
+ if (data->rc != NGX_OK) {
+ return;
+ }
+
+ if (!location_conf->database_path.data) {
+ ngx_log_error(NGX_LOG_EMERG, data->log, 0,
+ "%s: \"groonga_database\" must be specified in block at %s:%d",
+ location_conf->name,
+ location_conf->config_file,
+ location_conf->config_line);
+ data->rc = NGX_ERROR;
+ return;
+ }
+
+ if (!location_conf->database_path_cstr) {
+ location_conf->database_path_cstr =
+ ngx_str_null_terminate(data->pool, &(location_conf->database_path));
+ }
+
+ grn_db_open(context, location_conf->database_path_cstr);
+ if (context->rc != GRN_SUCCESS) {
+ if (location_conf->database_auto_create) {
+ ngx_http_groonga_create_database(location_conf, data);
+ } else {
+ ngx_log_error(NGX_LOG_EMERG, data->log, 0,
+ "failed to open groonga database: %s",
+ context->errbuf);
+ data->rc = NGX_ERROR;
+ return;
+ }
+ }
+
+ location_conf->cache = grn_cache_open(context);
+ if (!location_conf->cache) {
+ ngx_log_error(NGX_LOG_EMERG, data->log, 0,
+ "failed to open groonga cache: %s",
+ context->errbuf);
+ data->rc = NGX_ERROR;
+ return;
+ }
+ if (location_conf->cache_limit != NGX_CONF_UNSET_SIZE) {
+ grn_cache_set_max_n_entries(context,
+ location_conf->cache,
+ location_conf->cache_limit);
+ }
+}
+
+static void
+ngx_http_groonga_close_database_callback(ngx_http_groonga_loc_conf_t *location_conf,
+ void *user_data)
+{
+ ngx_http_groonga_database_callback_data_t *data = user_data;
+ grn_ctx *context;
+
+ context = &(location_conf->context);
+ ngx_http_groonga_context_init_logger(context,
+ location_conf,
+ data->pool,
+ data->log);
+ ngx_http_groonga_context_init_query_logger(context,
+ location_conf,
+ data->pool,
+ data->log);
+ grn_cache_current_set(context, location_conf->cache);
+
+ grn_obj_close(context, grn_ctx_db(context));
+ ngx_http_groonga_context_log_error(data->log, context);
+
+ grn_cache_current_set(context, NULL);
+ grn_cache_close(context, location_conf->cache);
+
+ grn_ctx_fin(context);
+}
+
+static ngx_int_t
+ngx_http_groonga_init_process(ngx_cycle_t *cycle)
+{
+ grn_rc rc;
+ ngx_http_conf_ctx_t *http_conf;
+ ngx_http_groonga_database_callback_data_t data;
+
+ rc = grn_init();
+ if (rc != GRN_SUCCESS) {
+ return NGX_ERROR;
+ }
+
+ grn_set_segv_handler();
+
+ http_conf =
+ (ngx_http_conf_ctx_t *)ngx_get_conf(cycle->conf_ctx, ngx_http_module);
+
+ data.log = cycle->log;
+ data.pool = cycle->pool;
+ data.rc = NGX_OK;
+ ngx_http_groonga_each_loc_conf(http_conf,
+ ngx_http_groonga_open_database_callback,
+ &data);
+
+ return data.rc;
+}
+
+static void
+ngx_http_groonga_exit_process(ngx_cycle_t *cycle)
+{
+ ngx_http_conf_ctx_t *http_conf;
+ ngx_http_groonga_database_callback_data_t data;
+
+ http_conf =
+ (ngx_http_conf_ctx_t *)ngx_get_conf(cycle->conf_ctx, ngx_http_module);
+ data.log = cycle->log;
+ data.pool = cycle->pool;
+ ngx_http_groonga_each_loc_conf(http_conf,
+ ngx_http_groonga_close_database_callback,
+ &data);
+
+ grn_fin();
+
+ return;
+}
+
+/* entry point */
+static ngx_command_t ngx_http_groonga_commands[] = {
+ { ngx_string("groonga"),
+ NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_http_groonga_conf_set_groonga_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, enabled),
+ NULL },
+
+ { ngx_string("groonga_database"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_str_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, database_path),
+ NULL },
+
+ { ngx_string("groonga_database_auto_create"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, database_auto_create),
+ NULL },
+
+ { ngx_string("groonga_base_path"),
+ NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_str_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, base_path),
+ NULL },
+
+ { ngx_string("groonga_log_path"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_http_groonga_conf_set_log_path_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, log_path),
+ NULL },
+
+ { ngx_string("groonga_log_level"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_http_groonga_conf_set_log_level_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
+ { ngx_string("groonga_query_log_path"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_http_groonga_conf_set_query_log_path_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, query_log_path),
+ NULL },
+
+ { ngx_string("groonga_cache_limit"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_size_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_groonga_loc_conf_t, cache_limit),
+ NULL },
+
+ ngx_null_command
+};
+
+static ngx_http_module_t ngx_http_groonga_module_ctx = {
+ NULL, /* preconfiguration */
+ NULL, /* postconfiguration */
+
+ NULL, /* create main configuration */
+ NULL, /* init main configuration */
+
+ NULL, /* create server configuration */
+ NULL, /* merge server configuration */
+
+ ngx_http_groonga_create_loc_conf, /* create location configuration */
+ ngx_http_groonga_merge_loc_conf, /* merge location configuration */
+};
+
+ngx_module_t ngx_http_groonga_module = {
+ NGX_MODULE_V1,
+ &ngx_http_groonga_module_ctx, /* module context */
+ ngx_http_groonga_commands, /* module directives */
+ NGX_HTTP_MODULE, /* module type */
+ NULL, /* init master */
+ NULL, /* init module */
+ ngx_http_groonga_init_process, /* init process */
+ NULL, /* init thread */
+ NULL, /* exit thread */
+ ngx_http_groonga_exit_process, /* exit process */
+ NULL, /* exit master */
+ NGX_MODULE_V1_PADDING
+};
diff --git a/storage/mroonga/vendor/groonga/src/suggest/CMakeLists.txt b/storage/mroonga/vendor/groonga/src/suggest/CMakeLists.txt
new file mode 100644
index 00000000000..0773026a618
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/CMakeLists.txt
@@ -0,0 +1,90 @@
+# Copyright(C) 2012-2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+include_directories(
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../lib
+ ${MRUBY_INCLUDE_DIRS})
+
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/create_dataset_sources.am
+ GROONGA_SUGGEST_CREATE_DATASET_SOURCES)
+add_executable(groonga-suggest-create-dataset
+ ${GROONGA_SUGGEST_CREATE_DATASET_SOURCES})
+set_source_files_properties(${GROONGA_SUGGEST_CREATE_DATASET_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+target_link_libraries(groonga-suggest-create-dataset libgroonga)
+if(NOT MRN_GROONGA_BUNDLED)
+ install(
+ TARGETS groonga-suggest-create-dataset
+ DESTINATION ${BIN_DIR})
+endif()
+
+if(GRN_WITH_LIBEVENT AND GRN_WITH_ZEROMQ AND GRN_WITH_MESSAGE_PACK)
+ set(GRN_WITH_SUGGEST_LEARNER TRUE)
+else()
+ set(GRN_WITH_SUGGEST_LEARNER FALSE)
+endif()
+
+if(GRN_WITH_SUGGEST_LEARNER)
+ include_directories(
+ ${LIBEVENT_INCLUDE_DIRS}
+ ${ZEROMQ_INCLUDE_DIRS}
+ ${MESSAGE_PACK_INCLUDE_DIRS}
+ )
+ link_directories(
+ ${LIBEVENT_LIBRARY_DIRS}
+ ${ZEROMQ_LIBRARY_DIRS}
+ ${MESSAGE_PACK_LIBRARY_DIRS}
+ )
+
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/util_sources.am
+ GROONGA_SUGGEST_UTIL_SOURCES)
+ add_library(groonga-suggest-util STATIC ${GROONGA_SUGGEST_UTIL_SOURCES})
+ set_source_files_properties(${GROONGA_SUGGEST_UTIL_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/learner_sources.am
+ GROONGA_SUGGEST_LEARNER_SOURCES)
+ add_executable(groonga-suggest-learner ${GROONGA_SUGGEST_LEARNER_SOURCES})
+ set_source_files_properties(${GROONGA_SUGGEST_LEARNER_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ target_link_libraries(groonga-suggest-learner
+ groonga-suggest-util
+ libgroonga
+ ${LIBEVENT_LIBRARIES}
+ ${ZEROMQ_LIBRARIES}
+ ${MESSAGE_PACK_LIBRARIES})
+
+ read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/httpd_sources.am
+ GROONGA_SUGGEST_HTTPD_SOURCES)
+ add_executable(groonga-suggest-httpd ${GROONGA_SUGGEST_HTTPD_SOURCES})
+ set_source_files_properties(${GROONGA_SUGGEST_HTTPD_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ target_link_libraries(groonga-suggest-httpd
+ groonga-suggest-util
+ libgroonga
+ ${LIBEVENT_LIBRARIES}
+ ${ZEROMQ_LIBRARIES}
+ ${MESSAGE_PACK_LIBRARIES})
+
+ if(NOT MRN_GROONGA_BUNDLED)
+ install(
+ TARGETS groonga-suggest-learner groonga-suggest-httpd
+ DESTINATION ${BIN_DIR})
+ endif()
+endif()
diff --git a/storage/mroonga/vendor/groonga/src/suggest/Makefile.am b/storage/mroonga/vendor/groonga/src/suggest/Makefile.am
new file mode 100644
index 00000000000..cecf4001e9a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/Makefile.am
@@ -0,0 +1,77 @@
+bin_PROGRAMS =
+
+NONEXISTENT_CXX_SOURCE = nonexistent.cpp
+
+if !PLATFORM_WIN32
+bin_PROGRAMS += \
+ groonga-suggest-create-dataset
+
+if ENABLE_SUGGEST_LEARNER
+bin_PROGRAMS += \
+ groonga-suggest-learner \
+ groonga-suggest-httpd
+noinst_LTLIBRARIES = libutil.la
+endif
+
+endif
+
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(NO_STRICT_ALIASING_CFLAGS) \
+ $(COVERAGE_CFLAGS) \
+ $(GRN_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS) \
+ $(MRUBY_CFLAGS)
+
+DEFS += $(GRN_DEFS)
+
+AM_LDFLAGS = -no-undefined
+
+DEFAULT_INCLUDES = \
+ -I$(top_builddir) \
+ -I$(srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib \
+ $(GROONGA_INCLUDEDIR)
+
+include learner_sources.am
+nodist_EXTRA_groonga_suggest_learner_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+groonga_suggest_learner_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(LIBEVENT_CFLAGS) \
+ $(LIBZMQ_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS)
+groonga_suggest_learner_LDADD = \
+ libutil.la \
+ $(top_builddir)/lib/libgroonga.la \
+ $(LIBEVENT_LIBS) \
+ $(LIBZMQ_LIBS) \
+ $(MESSAGE_PACK_LIBS)
+
+include httpd_sources.am
+nodist_EXTRA_groonga_suggest_httpd_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+groonga_suggest_httpd_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(LIBEVENT_CFLAGS) \
+ $(LIBZMQ_CFLAGS) \
+ $(MESSAGE_PACK_CFLAGS)
+groonga_suggest_httpd_LDADD = \
+ libutil.la \
+ $(top_builddir)/lib/libgroonga.la \
+ $(LIBEVENT_LIBS) \
+ $(LIBZMQ_LIBS) \
+ $(MESSAGE_PACK_LIBS)
+
+include create_dataset_sources.am
+nodist_EXTRA_groonga_suggest_create_dataset_SOURCES = $(NONEXISTENT_CXX_SOURCE)
+groonga_suggest_create_dataset_CFLAGS = \
+ $(AM_CFLAGS)
+groonga_suggest_create_dataset_LDADD = \
+ $(top_builddir)/lib/libgroonga.la
+
+include util_sources.am
+libutil_la_CFLAGS = \
+ $(AM_CFLAGS) \
+ $(LIBEVENT_CFLAGS)
diff --git a/storage/mroonga/vendor/groonga/src/suggest/create_dataset_sources.am b/storage/mroonga/vendor/groonga/src/suggest/create_dataset_sources.am
new file mode 100644
index 00000000000..cfecd6500dd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/create_dataset_sources.am
@@ -0,0 +1,2 @@
+groonga_suggest_create_dataset_SOURCES = \
+ groonga_suggest_create_dataset.c
diff --git a/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_create_dataset.c b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_create_dataset.c
new file mode 100644
index 00000000000..35f2cd09fc0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_create_dataset.c
@@ -0,0 +1,220 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <groonga.h>
+
+/* For grn_str_getopt() */
+#include <str.h>
+
+typedef enum {
+ MODE_NONE,
+ MODE_USAGE
+} ModeFlags;
+
+static const char *DEFAULT_DEFAULT_TOKENIZER = "TokenBigram";
+
+static void
+usage(FILE *output, int argc, char **argv)
+{
+#define OUTPUT(...) fprintf(output, __VA_ARGS__)
+
+ OUTPUT("Usage: %s [OPTIONS] DB_PATH DATASET_NAME\n", argv[0]);
+ OUTPUT(" e.g.: %s /tmp/db shops\n", argv[0]);
+ OUTPUT("\n");
+ OUTPUT("Options:\n");
+ OUTPUT(" --default-tokenizer=TOKENIZER Use TOKENIZER as the default\n");
+ OUTPUT(" tokenizer for item name\n");
+ OUTPUT(" (default: %s)\n",
+ DEFAULT_DEFAULT_TOKENIZER);
+ OUTPUT(" -h, --help Show this message and exit\n");
+
+#undef OUTPUT
+}
+
+static void
+output(grn_ctx *ctx)
+{
+ int flags = 0;
+ char *str;
+ unsigned int str_len;
+
+ do {
+ grn_ctx_recv(ctx, &str, &str_len, &flags);
+ if (str_len > 0 || ctx->rc) {
+ if (ctx->rc) {
+ printf("ERROR (%d): %s\n", ctx->rc, ctx->errbuf);
+ }
+ if (str_len > 0) {
+ printf("%.*s\n", str_len, str);
+ }
+ }
+ } while (flags & GRN_CTX_MORE);
+}
+
+static void
+send_command(grn_ctx *ctx, grn_obj *buffer, const char *command,
+ const char *dataset_name)
+{
+ const char *p = command;
+ const char *dataset_place_holder = "${DATASET}";
+ char *dataset_place_holder_position;
+
+ if (ctx->rc != GRN_SUCCESS) {
+ return;
+ }
+
+ GRN_BULK_REWIND(buffer);
+ while ((dataset_place_holder_position = strstr(p, dataset_place_holder))) {
+ GRN_TEXT_PUT(ctx, buffer, p, dataset_place_holder_position - p);
+ GRN_TEXT_PUTS(ctx, buffer, dataset_name);
+ p = dataset_place_holder_position + strlen(dataset_place_holder);
+ }
+ GRN_TEXT_PUTS(ctx, buffer, p);
+ printf("> %.*s\n", (int)GRN_TEXT_LEN(buffer), GRN_TEXT_VALUE(buffer));
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(buffer), GRN_TEXT_LEN(buffer), 0);
+ output(ctx);
+}
+
+
+int
+main(int argc, char **argv)
+{
+ const char *db_path;
+ const char *dataset_name;
+ grn_ctx ctx_, *ctx;
+ grn_obj *db;
+ grn_bool success = GRN_TRUE;
+ int parsed_argc, rest_argc;
+ int flags = MODE_NONE;
+ const char *default_tokenizer = NULL;
+ static grn_str_getopt_opt opts[] = {
+ {'\0', "default-tokenizer", NULL, 0, GETOPT_OP_NONE},
+ {'h', "help", NULL, MODE_USAGE, GETOPT_OP_UPDATE}
+ };
+
+ opts[0].arg = &default_tokenizer;
+
+ parsed_argc = grn_str_getopt(argc, argv, opts, &flags);
+ if (parsed_argc < 0) {
+ usage(stderr, argc, argv);
+ return EXIT_FAILURE;
+ }
+
+ if (flags & MODE_USAGE) {
+ usage(stdout, argc, argv);
+ return EXIT_SUCCESS;
+ }
+
+ rest_argc = argc - parsed_argc;
+ if (rest_argc != 2) {
+ usage(stderr, argc, argv);
+ return EXIT_FAILURE;
+ }
+
+ db_path = argv[parsed_argc];
+ dataset_name = argv[parsed_argc + 1];
+
+ grn_init();
+
+ ctx = &ctx_;
+ grn_ctx_init(ctx, 0);
+ db = grn_db_open(ctx, db_path);
+ if (!db) {
+ if (ctx->rc == GRN_NO_SUCH_FILE_OR_DIRECTORY) {
+ db = grn_db_create(ctx, db_path, NULL);
+ if (!db) {
+ fprintf(stderr, "DB create failed (%s): %s\n", db_path, ctx->errbuf);
+ }
+ } else {
+ fprintf(stderr, "DB open failed (%s): %s\n", db_path, ctx->errbuf);
+ }
+ }
+
+ if (db) {
+ grn_obj text;
+ GRN_TEXT_INIT(&text, 0);
+#define SEND(string) send_command(ctx, &text, string, dataset_name)
+ SEND("register suggest/suggest");
+ SEND("table_create event_type TABLE_HASH_KEY ShortText");
+ {
+ grn_obj query;
+ GRN_TEXT_INIT(&query, 0);
+ GRN_TEXT_PUTS(ctx, &query,
+ "table_create bigram TABLE_PAT_KEY|KEY_NORMALIZE ShortText "
+ "--default_tokenizer ");
+ if (default_tokenizer) {
+ GRN_TEXT_PUTS(ctx, &query, default_tokenizer);
+ } else {
+ GRN_TEXT_PUTS(ctx, &query, DEFAULT_DEFAULT_TOKENIZER);
+ }
+ GRN_TEXT_PUTC(ctx, &query, '\0');
+ SEND(GRN_TEXT_VALUE(&query));
+ GRN_OBJ_FIN(ctx, &query);
+ }
+ SEND("table_create kana TABLE_PAT_KEY|KEY_NORMALIZE ShortText");
+ SEND("table_create item_${DATASET} TABLE_PAT_KEY|KEY_NORMALIZE "
+ "ShortText --default_tokenizer TokenDelimit");
+ SEND("column_create bigram item_${DATASET}_key "
+ "COLUMN_INDEX|WITH_POSITION item_${DATASET} _key");
+ SEND("column_create item_${DATASET} kana COLUMN_VECTOR kana");
+ SEND("column_create kana item_${DATASET}_kana COLUMN_INDEX "
+ "item_${DATASET} kana");
+ SEND("column_create item_${DATASET} freq COLUMN_SCALAR Int32");
+ SEND("column_create item_${DATASET} last COLUMN_SCALAR Time");
+ SEND("column_create item_${DATASET} boost COLUMN_SCALAR Int32");
+ SEND("column_create item_${DATASET} freq2 COLUMN_SCALAR Int32");
+ SEND("column_create item_${DATASET} buzz COLUMN_SCALAR Int32");
+
+ SEND("table_create pair_${DATASET} TABLE_HASH_KEY UInt64");
+ SEND("column_create pair_${DATASET} pre COLUMN_SCALAR item_${DATASET}");
+ SEND("column_create pair_${DATASET} post COLUMN_SCALAR item_${DATASET}");
+ SEND("column_create pair_${DATASET} freq0 COLUMN_SCALAR Int32");
+ SEND("column_create pair_${DATASET} freq1 COLUMN_SCALAR Int32");
+ SEND("column_create pair_${DATASET} freq2 COLUMN_SCALAR Int32");
+ SEND("column_create item_${DATASET} co COLUMN_INDEX pair_${DATASET} pre");
+
+ SEND("table_create sequence_${DATASET} TABLE_HASH_KEY ShortText");
+ SEND("table_create event_${DATASET} TABLE_NO_KEY");
+ SEND("column_create sequence_${DATASET} events "
+ "COLUMN_VECTOR|RING_BUFFER event_${DATASET}");
+ SEND("column_create event_${DATASET} type COLUMN_SCALAR event_type");
+ SEND("column_create event_${DATASET} time COLUMN_SCALAR Time");
+ SEND("column_create event_${DATASET} item COLUMN_SCALAR item_${DATASET}");
+ SEND("column_create event_${DATASET} sequence COLUMN_SCALAR "
+ "sequence_${DATASET}");
+
+ SEND("table_create configuration TABLE_HASH_KEY ShortText");
+ SEND("column_create configuration weight COLUMN_SCALAR UInt32");
+ SEND("load --table configuration");
+ SEND("[");
+ SEND("{\"_key\": \"${DATASET}\", \"weight\": 1}");
+ SEND("]");
+#undef SEND
+ success = ctx->rc == GRN_SUCCESS;
+ GRN_OBJ_FIN(ctx, &text);
+ GRN_OBJ_FIN(ctx, db);
+ } else {
+ success = GRN_FALSE;
+ }
+ grn_ctx_fin(ctx);
+ grn_fin();
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_ddl.txt b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_ddl.txt
new file mode 100644
index 00000000000..f82763f8f1d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_ddl.txt
@@ -0,0 +1,62 @@
+suggestå‘ã‘DDL解説
+==================
+
+suggest機能ã§å¿…è¦ã¨ãªã‚‹ã‚¹ã‚­ãƒ¼ãƒžã‚’説明ã™ã‚‹ã€‚ãªãŠã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯suggest機能完æˆã¨ã¨ã‚‚ã«docsディレクトリ内ã«ç§»å‹•ã•ã‚Œã‚‹ã€‚
+
+1. 概è¦
+
+ suggestデータベースã«ã¯ã€å­¦ç¿’éŽç¨‹ã§ã®ã¿å¿…è¦ã«ãªã‚‹ãƒ†ãƒ¼ãƒ–ルã¨ã€
+ 学習時ãŠã‚ˆã³ã‚µã‚¸ã‚§ã‚¹ãƒˆæ™‚ã«å¿…è¦ã«ãªã‚‹ãƒ†ãƒ¼ãƒ–ルãŒã‚ã‚Šã¾ã™ã€‚
+ å‰è€…を作業用テーブルã¨å‘¼ã³ã€å¾Œè€…を学習çµæžœãƒ†ãƒ¼ãƒ–ルã¨å‘¼ã³ã¾ã™ã€‚
+
+2. 学習çµæžœãƒ†ãƒ¼ãƒ–ル
+
+ 学習çµæžœãƒ†ãƒ¼ãƒ–ルã¯äºŒã¤ã®ãƒ•ã‚¡ã‚¯ãƒˆãƒ†ãƒ¼ãƒ–ルã¨äºŒã¤ã®èªžå½™ãƒ†ãƒ¼ãƒ–ルã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚
+
+2.1. 学習çµæžœãƒ•ã‚¡ã‚¯ãƒˆãƒ†ãƒ¼ãƒ–ル
+
+item: suggest候補ã¨ã—ã¦æ示ã™ã‚‹å€‹ã€…ã®æ–‡å­—列を格ç´ã™ã‚‹ãƒ†ãƒ¼ãƒ–ルã§ã™ã€‚
+
+ 以下ã®ã‚«ãƒ©ãƒ ã‚’用æ„ã—ã¦ã„ã¾ã™ã€‚
+
+ _key: itemテーブルã®ä¸»ã‚­ãƒ¼ã¯ã€ã‚µã‚¸ã‚§ã‚¹ãƒˆå¯¾è±¡æ–‡å­—列ãã®ã‚‚ã®ã¨ãªã‚Šã¾ã™ã€‚
+ kana: 対象文字列ã®èª­ã¿ä»®åã‚’æ ¼ç´ã—ã¾ã™ã€‚å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€ã‚»ãƒƒãƒˆã•ã‚Œã¦ã„ã‚Œã°ãƒ­ãƒ¼ãƒžå­—入力途中ã®æ–‡å­—列ã«å¯¾ã—ã¦ã‚‚補完候補をæ示å¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+ freq: ユーザクエリã«ãŠã„ã¦å…¥åŠ›ã•ã‚ŒãŸå›žæ•°ã‚’記録ã—ã¾ã™ã€‚
+ last: ユーザクエリã«æœ€å¾Œã«å…¥åŠ›ã•ã‚ŒãŸæ™‚刻を記録ã—ã¾ã™ã€‚
+ freq2: ユーザクエリã«ãŠã„ã¦ã‚µãƒ–ミットã•ã‚ŒãŸå›žæ•°ã‚’記録ã—ã¾ã™ã€‚
+ boost: 当該文字列ã®éœ²å‡ºã‚’制御ã—ã¾ã™ã€‚正値を指定ã™ã‚Œã°éœ²å‡ºãŒé »ç¹ã«ãªã‚Šã€-1を指定ã™ã‚Œã°ã€éœ²å‡ºã•ã‚Œã¾ã›ã‚“。
+ buzz: 入力回数ã®å·®åˆ†ã‚’記録ã—ã¾ã™ã€‚
+ co: 共起ã™ã‚‹ä»–ã®æ–‡å­—列をå‚ç…§ã™ã‚‹ãŸã‚ã®ç´¢å¼•ã§ã™ã€‚
+
+pair: itemé–“ã®å…±èµ·é–¢ä¿‚を管ç†ã™ã‚‹ãƒ†ãƒ¼ãƒ–ルã§ã™ã€‚
+
+ 以下ã®ã‚«ãƒ©ãƒ ã‚’用æ„ã—ã¦ã„ã¾ã™ã€‚
+
+ _kay: preãŠã‚ˆã³postã®IDã‚’çµåˆã—ãŸæ•°å€¤ãŒä¸»ã‚­ãƒ¼ã¨ãªã‚Šã¾ã™ã€‚
+ pre: 事å‰ã«å‡ºç¾ã™ã‚‹ã‚¢ã‚¤ãƒ†ã‚£ãƒ ã§ã™ã€‚
+ post: 事後ã«å‡ºç¾ã™ã‚‹ã‚¢ã‚¤ãƒ†ã‚£ãƒ ã§ã™ã€‚
+ freq0: completeイベントã«ãŠã‘る共起頻度を記録ã—ã¾ã™ã€‚
+ freq1: correctイベントã«ãŠã‘る共起頻度を記録ã—ã¾ã™ã€‚
+ freq2: suggestイベントã«ãŠã‘る共起頻度を記録ã—ã¾ã™ã€‚
+
+2.2. 学習çµæžœèªžå½™ãƒ†ãƒ¼ãƒ–ル
+
+ bigram: itemã®ä¸»ã‚­ãƒ¼ã«ã‚ˆã£ã¦å…¨æ–‡æ¤œç´¢ã‚’è¡Œã†ãŸã‚ã®èªžå½™è¡¨ã§ã™ã€‚
+ kana: itemã®kanaカラムã®å…¥åŠ›è£œå®Œã‚’è¡Œã†ãŸã‚ã®èªžå½™è¡¨ã§ã™ã€‚
+
+3. 作業用テーブル
+
+ 作業用テーブルã«ã¯eventã¨sequenceã®2テーブルãŒã‚ã‚Šã¾ã™ã€‚
+
+event: ユーザã®å€‹ã€…ã®ã‚¯ã‚¨ãƒªã‚¤ãƒ™ãƒ³ãƒˆã«å¯¾å¿œã—ã¾ã™ã€‚レコードã®è¿½åŠ ã®ã¿ãŒè¡Œã‚ã‚Œã¾ã™ã€‚
+ é©å®œdropã—ã¦å†ä½œæˆã™ã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„ã§ã™ã€‚
+
+ type: submitã®æœ‰ç„¡ã‚’記録ã—ã¾ã™ã€‚
+ time: イベントãŒç™ºç”Ÿã—ãŸæ™‚刻を記録ã—ã¾ã™ã€‚
+ item: ユーザãŒå…¥åŠ›ã—ãŸæ–‡å­—列を記録ã—ã¾ã™ã€‚
+ sequence: ユーザã®è­˜åˆ¥å­(cookie, ipアドレス等)を記録ã—ã¾ã™ã€‚
+
+sequence: åŒä¸€ãƒ¦ãƒ¼ã‚¶ã®ä¸€é€£ã®æ“作を記録ã—ã¾ã™ã€‚レコードã®è¿½åŠ ã®ã¿ãŒè¡Œã‚ã‚Œã¾ã™ã€‚
+ é©å®œdropã—ã¦å†ä½œæˆã™ã‚‹ã“ã¨ãŒæœ›ã¾ã—ã„ã§ã™ã€‚
+
+ events: 当該ユーザã®æ“作履歴を記録ã—ã¾ã™ã€‚
diff --git a/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_httpd.c b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_httpd.c
new file mode 100644
index 00000000000..6d94be87a8a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_httpd.c
@@ -0,0 +1,842 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/* groonga origin headers */
+#include <str.h>
+
+#include <stdio.h>
+#include <signal.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
+
+#include <fcntl.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <sys/resource.h>
+
+#include "zmq_compatible.h"
+#include <event.h>
+#include <evhttp.h>
+#include <msgpack.h>
+#include <groonga.h>
+#include <pthread.h>
+
+#include "util.h"
+
+#define DEFAULT_PORT 8080
+#define DEFAULT_MAX_THREADS 8
+
+#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0
+
+#define LISTEN_BACKLOG 756
+#define MIN_MAX_FDS 2048
+#define MAX_THREADS 128 /* max 256 */
+
+typedef enum {
+ run_mode_none = 0,
+ run_mode_usage,
+ run_mode_daemon,
+ run_mode_error
+} run_mode;
+
+#define RUN_MODE_MASK 0x007f
+#define RUN_MODE_ENABLE_MAX_FD_CHECK 0x0080
+
+
+typedef struct {
+ grn_ctx *ctx;
+ grn_obj *db;
+ void *zmq_sock;
+ grn_obj cmd_buf;
+ grn_obj pass_through_parameters;
+ pthread_t thd;
+ uint32_t thread_id;
+ struct event_base *base;
+ struct evhttp *httpd;
+ struct event pulse;
+ const char *log_base_path;
+ FILE *log_file;
+ uint32_t log_count;
+ grn_bool request_reopen_log_file;
+} thd_data;
+
+typedef struct {
+ const char *db_path;
+ const char *recv_endpoint;
+ pthread_t thd;
+ void *zmq_ctx;
+} recv_thd_data;
+
+#define CMD_BUF_SIZE 1024
+
+static thd_data threads[MAX_THREADS];
+static uint32_t default_max_threads = DEFAULT_MAX_THREADS;
+static uint32_t max_threads;
+static volatile sig_atomic_t loop = 1;
+static grn_obj *db;
+static uint32_t n_lines_per_log_file = 1000000;
+
+static int
+suggest_result(grn_ctx *ctx,
+ struct evbuffer *res_buf, const char *types, const char *query,
+ const char *target_name, int frequency_threshold,
+ double conditional_probability_threshold, int limit,
+ grn_obj *cmd_buf, grn_obj *pass_through_parameters)
+{
+ if (target_name && types && query) {
+ GRN_BULK_REWIND(cmd_buf);
+ GRN_TEXT_PUTS(ctx, cmd_buf, "/d/suggest?table=item_");
+ grn_text_urlenc(ctx, cmd_buf, target_name, strlen(target_name));
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&column=kana&types=");
+ grn_text_urlenc(ctx, cmd_buf, types, strlen(types));
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&query=");
+ grn_text_urlenc(ctx, cmd_buf, query, strlen(query));
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&frequency_threshold=");
+ grn_text_itoa(ctx, cmd_buf, frequency_threshold);
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&conditional_probability_threshold=");
+ grn_text_ftoa(ctx, cmd_buf, conditional_probability_threshold);
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&limit=");
+ grn_text_itoa(ctx, cmd_buf, limit);
+ if (GRN_TEXT_LEN(pass_through_parameters) > 0) {
+ GRN_TEXT_PUTS(ctx, cmd_buf, "&");
+ GRN_TEXT_PUT(ctx, cmd_buf,
+ GRN_TEXT_VALUE(pass_through_parameters),
+ GRN_TEXT_LEN(pass_through_parameters));
+ }
+ {
+ char *res;
+ int flags;
+ unsigned int res_len;
+
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(cmd_buf), GRN_TEXT_LEN(cmd_buf), 0);
+ grn_ctx_recv(ctx, &res, &res_len, &flags);
+
+ evbuffer_add(res_buf, res, res_len);
+ return res_len;
+ }
+ } else {
+ evbuffer_add(res_buf, "{}", 2);
+ return 2;
+ }
+}
+
+static void
+log_send(struct evkeyvalq *output_headers, struct evbuffer *res_buf,
+ thd_data *thd, struct evkeyvalq *get_args)
+{
+ uint64_t millisec;
+ int frequency_threshold, limit;
+ double conditional_probability_threshold;
+ const char *callback, *types, *query, *client_id, *target_name,
+ *learn_target_name;
+
+ GRN_BULK_REWIND(&(thd->pass_through_parameters));
+ parse_keyval(thd->ctx, get_args, &query, &types, &client_id, &target_name,
+ &learn_target_name, &callback, &millisec, &frequency_threshold,
+ &conditional_probability_threshold, &limit,
+ &(thd->pass_through_parameters));
+
+ /* send data to learn client */
+ if (thd->zmq_sock && millisec && client_id && query && learn_target_name) {
+ char c;
+ size_t l;
+ msgpack_packer pk;
+ msgpack_sbuffer sbuf;
+ int cnt, submit_flag = 0;
+
+ msgpack_sbuffer_init(&sbuf);
+ msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
+
+ cnt = 4;
+ if (types && !strcmp(types, "submit")) {
+ cnt++;
+ types = NULL;
+ submit_flag = 1;
+ }
+ msgpack_pack_map(&pk, cnt);
+
+ c = 'i';
+ msgpack_pack_raw(&pk, 1);
+ msgpack_pack_raw_body(&pk, &c, 1);
+ l = strlen(client_id);
+ msgpack_pack_raw(&pk, l);
+ msgpack_pack_raw_body(&pk, client_id, l);
+
+ c = 'q';
+ msgpack_pack_raw(&pk, 1);
+ msgpack_pack_raw_body(&pk, &c, 1);
+ l = strlen(query);
+ msgpack_pack_raw(&pk, l);
+ msgpack_pack_raw_body(&pk, query, l);
+
+ c = 's';
+ msgpack_pack_raw(&pk, 1);
+ msgpack_pack_raw_body(&pk, &c, 1);
+ msgpack_pack_uint64(&pk, millisec);
+
+ c = 'l';
+ msgpack_pack_raw(&pk, 1);
+ msgpack_pack_raw_body(&pk, &c, 1);
+ l = strlen(learn_target_name);
+ msgpack_pack_raw(&pk, l);
+ msgpack_pack_raw_body(&pk, learn_target_name, l);
+
+ if (submit_flag) {
+ c = 't';
+ msgpack_pack_raw(&pk, 1);
+ msgpack_pack_raw_body(&pk, &c, 1);
+ msgpack_pack_true(&pk);
+ }
+ {
+ zmq_msg_t msg;
+ if (!zmq_msg_init_size(&msg, sbuf.size)) {
+ memcpy((void *)zmq_msg_data(&msg), sbuf.data, sbuf.size);
+ if (zmq_msg_send(&msg, thd->zmq_sock, 0)) {
+ print_error("zmq_msg_send() error");
+ }
+ zmq_msg_close(&msg);
+ }
+ }
+ msgpack_sbuffer_destroy(&sbuf);
+ }
+ /* make result */
+ {
+ int content_length;
+ if (callback) {
+ evhttp_add_header(output_headers,
+ "Content-Type", "text/javascript; charset=UTF-8");
+ content_length = strlen(callback);
+ evbuffer_add(res_buf, callback, content_length);
+ evbuffer_add(res_buf, "(", 1);
+ content_length += suggest_result(thd->ctx,
+ res_buf, types, query, target_name,
+ frequency_threshold,
+ conditional_probability_threshold,
+ limit,
+ &(thd->cmd_buf),
+ &(thd->pass_through_parameters)) + 3;
+ evbuffer_add(res_buf, ");", 2);
+ } else {
+ evhttp_add_header(output_headers,
+ "Content-Type", "application/json; charset=UTF-8");
+ content_length = suggest_result(thd->ctx,
+ res_buf, types, query, target_name,
+ frequency_threshold,
+ conditional_probability_threshold,
+ limit,
+ &(thd->cmd_buf),
+ &(thd->pass_through_parameters));
+ }
+ if (content_length >= 0) {
+ char num_buf[16];
+ snprintf(num_buf, 16, "%d", content_length);
+ evhttp_add_header(output_headers, "Content-Length", num_buf);
+ }
+ }
+}
+
+static void
+cleanup_httpd_thread(thd_data *thd) {
+ if (thd->log_file) {
+ fclose(thd->log_file);
+ }
+ if (thd->httpd) {
+ evhttp_free(thd->httpd);
+ }
+ if (thd->zmq_sock) {
+ zmq_close(thd->zmq_sock);
+ }
+ grn_obj_unlink(thd->ctx, &(thd->cmd_buf));
+ grn_obj_unlink(thd->ctx, &(thd->pass_through_parameters));
+ if (thd->ctx) {
+ grn_ctx_close(thd->ctx);
+ }
+ event_base_free(thd->base);
+}
+
+static void
+close_log_file(thd_data *thread)
+{
+ fclose(thread->log_file);
+ thread->log_file = NULL;
+ thread->request_reopen_log_file = GRN_FALSE;
+}
+
+static void
+generic_handler(struct evhttp_request *req, void *arg)
+{
+ struct evkeyvalq args;
+ thd_data *thd = arg;
+
+ if (!loop) {
+ event_base_loopexit(thd->base, NULL);
+ return;
+ }
+ if (!req->uri) { return; }
+
+ evhttp_parse_query(req->uri, &args);
+ {
+ struct evbuffer *res_buf;
+ if (!(res_buf = evbuffer_new())) {
+ err(1, "failed to create response buffer");
+ }
+
+ evhttp_add_header(req->output_headers, "Connection", "close");
+
+ log_send(req->output_headers, res_buf, thd, &args);
+ evhttp_send_reply(req, HTTP_OK, "OK", res_buf);
+ evbuffer_free(res_buf);
+ /* logging */
+ {
+ if (thd->log_base_path) {
+ if (thd->log_file && thd->request_reopen_log_file) {
+ close_log_file(thd);
+ }
+ if (!thd->log_file) {
+ time_t n;
+ struct tm *t_st;
+ char p[PATH_MAX + 1];
+
+ time(&n);
+ t_st = localtime(&n);
+
+ snprintf(p, PATH_MAX, "%s%04d%02d%02d%02d%02d%02d-%02d",
+ thd->log_base_path,
+ t_st->tm_year + 1900, t_st->tm_mon + 1, t_st->tm_mday,
+ t_st->tm_hour, t_st->tm_min, t_st->tm_sec, thd->thread_id);
+
+ if (!(thd->log_file = fopen(p, "a"))) {
+ print_error("cannot open log_file %s.", p);
+ } else {
+ thd->log_count = 0;
+ }
+ }
+ if (thd->log_file) {
+ fprintf(thd->log_file, "%s\n", req->uri);
+ thd->log_count++;
+ if (n_lines_per_log_file > 0 &&
+ thd->log_count >= n_lines_per_log_file) {
+ close_log_file(thd);
+ }
+ }
+ }
+ }
+ }
+ evhttp_clear_headers(&args);
+}
+
+static int
+bind_socket(int port)
+{
+ int nfd;
+ if ((nfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+ print_error("cannot open socket for http.");
+ return -1;
+ } else {
+ int r, one = 1;
+ struct sockaddr_in addr;
+
+ r = setsockopt(nfd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(int));
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = INADDR_ANY;
+ addr.sin_port = htons(port);
+
+ if ((r = bind(nfd, (struct sockaddr *)&addr, sizeof(addr))) < 0) {
+ print_error("cannot bind socket for http.");
+ return r;
+ }
+ if ((r = listen(nfd, LISTEN_BACKLOG)) < 0) {
+ print_error("cannot listen socket for http.");
+ return r;
+ }
+ if ((r = fcntl(nfd, F_GETFL, 0)) < 0 || fcntl(nfd, F_SETFL, r | O_NONBLOCK) < 0 ) {
+ print_error("cannot fcntl socket for http.");
+ return -1;
+ }
+ return nfd;
+ }
+}
+
+static void
+signal_handler(int sig)
+{
+ loop = 0;
+}
+
+static void
+signal_reopen_log_file(int sig)
+{
+ uint32_t i;
+
+ for (i = 0; i < max_threads; i++) {
+ threads[i].request_reopen_log_file = GRN_TRUE;
+ }
+}
+
+void
+timeout_handler(int fd, short events, void *arg) {
+ thd_data *thd = arg;
+ if (!loop) {
+ event_base_loopexit(thd->base, NULL);
+ } else {
+ struct timeval tv = {1, 0};
+ evtimer_add(&(thd->pulse), &tv);
+ }
+}
+
+static void *
+dispatch(void *arg)
+{
+ event_base_dispatch((struct event_base *)arg);
+ return NULL;
+}
+
+static void
+msgpack2json(msgpack_object *o, grn_ctx *ctx, grn_obj *buf)
+{
+ switch (o->type) {
+ case MSGPACK_OBJECT_POSITIVE_INTEGER:
+ grn_text_ulltoa(ctx, buf, o->via.u64);
+ break;
+ case MSGPACK_OBJECT_RAW:
+ grn_text_esc(ctx, buf, o->via.raw.ptr, o->via.raw.size);
+ break;
+ case MSGPACK_OBJECT_ARRAY:
+ GRN_TEXT_PUTC(ctx, buf, '[');
+ {
+ int i;
+ for (i = 0; i < o->via.array.size; i++) {
+ msgpack2json(o->via.array.ptr, ctx, buf);
+ }
+ }
+ GRN_TEXT_PUTC(ctx, buf, ']');
+ break;
+ case MSGPACK_OBJECT_DOUBLE:
+ grn_text_ftoa(ctx, buf, o->via.dec);
+ break;
+ default:
+ print_error("cannot handle this msgpack type.");
+ }
+}
+
+static void
+load_from_learner(msgpack_object *o, grn_ctx *ctx, grn_obj *cmd_buf)
+{
+ if (o->type == MSGPACK_OBJECT_MAP && o->via.map.size) {
+ msgpack_object_kv *kv;
+ kv = &(o->via.map.ptr[0]);
+ if (kv->key.type == MSGPACK_OBJECT_RAW && kv->key.via.raw.size == 6 &&
+ !memcmp(kv->key.via.raw.ptr, CONST_STR_LEN("target"))) {
+ if (kv->val.type == MSGPACK_OBJECT_RAW) {
+ int i;
+ GRN_BULK_REWIND(cmd_buf);
+ GRN_TEXT_PUTS(ctx, cmd_buf, "load --table ");
+ GRN_TEXT_PUT(ctx, cmd_buf, kv->val.via.raw.ptr, kv->val.via.raw.size);
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(cmd_buf), GRN_TEXT_LEN(cmd_buf), GRN_CTX_MORE);
+ grn_ctx_send(ctx, CONST_STR_LEN("["), GRN_CTX_MORE);
+ if (kv->val.via.raw.size > 5) {
+ if (!memcmp(kv->val.via.raw.ptr, CONST_STR_LEN("item_")) ||
+ !memcmp(kv->val.via.raw.ptr, CONST_STR_LEN("pair_"))) {
+ char delim = '{';
+ GRN_BULK_REWIND(cmd_buf);
+ for (i = 1; i < o->via.map.size; i++) {
+ GRN_TEXT_PUTC(ctx, cmd_buf, delim);
+ kv = &(o->via.map.ptr[i]);
+ msgpack2json(&(kv->key), ctx, cmd_buf);
+ GRN_TEXT_PUTC(ctx, cmd_buf, ':');
+ msgpack2json(&(kv->val), ctx, cmd_buf);
+ delim = ',';
+ }
+ GRN_TEXT_PUTC(ctx, cmd_buf, '}');
+ /* printf("msg: %.*s\n", GRN_TEXT_LEN(cmd_buf), GRN_TEXT_VALUE(cmd_buf)); */
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(cmd_buf), GRN_TEXT_LEN(cmd_buf), GRN_CTX_MORE);
+ }
+ }
+ grn_ctx_send(ctx, CONST_STR_LEN("]"), 0);
+ {
+ char *res;
+ int flags;
+ unsigned int res_len;
+ grn_ctx_recv(ctx, &res, &res_len, &flags);
+ }
+ }
+ }
+ }
+}
+
+static void
+recv_handler(grn_ctx *ctx, void *zmq_recv_sock, msgpack_zone *mempool, grn_obj *cmd_buf)
+{
+ zmq_msg_t msg;
+
+ if (zmq_msg_init(&msg)) {
+ print_error("cannot init zmq message.");
+ } else {
+ if (zmq_msg_recv(&msg, zmq_recv_sock, 0)) {
+ print_error("cannot recv zmq message.");
+ } else {
+ msgpack_object obj;
+ msgpack_unpack_return ret;
+
+ ret = msgpack_unpack(zmq_msg_data(&msg), zmq_msg_size(&msg), NULL, mempool, &obj);
+ if (MSGPACK_UNPACK_SUCCESS == ret) {
+ load_from_learner(&obj, ctx, cmd_buf);
+ } else {
+ print_error("invalid recv data.");
+ }
+ msgpack_zone_clear(mempool);
+ }
+ zmq_msg_close(&msg);
+ }
+}
+
+static void *
+recv_from_learner(void *arg)
+{
+ void *zmq_recv_sock;
+ recv_thd_data *thd = arg;
+
+ if ((zmq_recv_sock = zmq_socket(thd->zmq_ctx, ZMQ_SUB))) {
+ if (!zmq_connect(zmq_recv_sock, thd->recv_endpoint)) {
+ grn_ctx ctx;
+ if (!grn_ctx_init(&ctx, 0)) {
+ if ((!grn_ctx_use(&ctx, db))) {
+ msgpack_zone *mempool;
+ if ((mempool = msgpack_zone_new(MSGPACK_ZONE_CHUNK_SIZE))) {
+ grn_obj cmd_buf;
+ zmq_pollitem_t items[] = {
+ { zmq_recv_sock, 0, ZMQ_POLLIN, 0}
+ };
+ GRN_TEXT_INIT(&cmd_buf, 0);
+ zmq_setsockopt(zmq_recv_sock, ZMQ_SUBSCRIBE, "", 0);
+ while (loop) {
+ zmq_poll(items, 1, 10000);
+ if (items[0].revents & ZMQ_POLLIN) {
+ recv_handler(&ctx, zmq_recv_sock, mempool, &cmd_buf);
+ }
+ }
+ grn_obj_unlink(&ctx, &cmd_buf);
+ msgpack_zone_free(mempool);
+ } else {
+ print_error("cannot create msgpack zone.");
+ }
+ /* db_close */
+ } else {
+ print_error("error in grn_db_open() on recv thread.");
+ }
+ grn_ctx_fin(&ctx);
+ } else {
+ print_error("error in grn_ctx_init() on recv thread.");
+ }
+ } else {
+ print_error("cannot create recv zmq_socket.");
+ }
+ } else {
+ print_error("cannot connect zmq_socket.");
+ }
+ return NULL;
+}
+
+static int
+serve_threads(int nthreads, int port, const char *db_path, void *zmq_ctx,
+ const char *send_endpoint, const char *recv_endpoint,
+ const char *log_base_path)
+{
+ int nfd;
+ uint32_t i;
+ if ((nfd = bind_socket(port)) < 0) {
+ print_error("cannot bind socket. please check port number with netstat.");
+ return -1;
+ }
+
+ for (i = 0; i < nthreads; i++) {
+ memset(&threads[i], 0, sizeof(threads[i]));
+ threads[i].request_reopen_log_file = GRN_FALSE;
+ if (!(threads[i].base = event_init())) {
+ print_error("error in event_init() on thread %d.", i);
+ } else {
+ if (!(threads[i].httpd = evhttp_new(threads[i].base))) {
+ print_error("error in evhttp_new() on thread %d.", i);
+ } else {
+ int r;
+ if ((r = evhttp_accept_socket(threads[i].httpd, nfd))) {
+ print_error("error in evhttp_accept_socket() on thread %d.", i);
+ } else {
+ if (send_endpoint) {
+ if (!(threads[i].zmq_sock = zmq_socket(zmq_ctx, ZMQ_PUB))) {
+ print_error("cannot create zmq_socket.");
+ } else if (zmq_connect(threads[i].zmq_sock, send_endpoint)) {
+ print_error("cannot connect zmq_socket.");
+ zmq_close(threads[i].zmq_sock);
+ threads[i].zmq_sock = NULL;
+ } else {
+ uint64_t hwm = 1;
+ zmq_setsockopt(threads[i].zmq_sock, ZMQ_SNDHWM, &hwm, sizeof(uint64_t));
+ }
+ } else {
+ threads[i].zmq_sock = NULL;
+ }
+ if (!(threads[i].ctx = grn_ctx_open(0))) {
+ print_error("error in grn_ctx_open() on thread %d.", i);
+ } else if (grn_ctx_use(threads[i].ctx, db)) {
+ print_error("error in grn_db_open() on thread %d.", i);
+ } else {
+ GRN_TEXT_INIT(&(threads[i].cmd_buf), 0);
+ GRN_TEXT_INIT(&(threads[i].pass_through_parameters), 0);
+ threads[i].log_base_path = log_base_path;
+ threads[i].thread_id = i;
+ evhttp_set_gencb(threads[i].httpd, generic_handler, &threads[i]);
+ evhttp_set_timeout(threads[i].httpd, 10);
+ {
+ struct timeval tv = {1, 0};
+ evtimer_set(&(threads[i].pulse), timeout_handler, &threads[i]);
+ evtimer_add(&(threads[i].pulse), &tv);
+ }
+ if ((r = pthread_create(&(threads[i].thd), NULL, dispatch, threads[i].base))) {
+ print_error("error in pthread_create() on thread %d.", i);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* recv thread from learner */
+ if (recv_endpoint) {
+ recv_thd_data rthd;
+ rthd.db_path = db_path;
+ rthd.recv_endpoint = recv_endpoint;
+ rthd.zmq_ctx = zmq_ctx;
+
+ if (pthread_create(&(rthd.thd), NULL, recv_from_learner, &rthd)) {
+ print_error("error in pthread_create() on thread %d.", i);
+ }
+ if (pthread_join(rthd.thd, NULL)) {
+ print_error("error in pthread_join() on thread %d.", i);
+ }
+ } else {
+ while (loop) { sleep(1); }
+ }
+
+ /* join all httpd thread */
+ for (i = 0; i < nthreads; i++) {
+ if (threads[i].thd) {
+ if (pthread_join(threads[i].thd, NULL)) {
+ print_error("error in pthread_join() on thread %d.", i);
+ }
+ }
+ cleanup_httpd_thread(&(threads[i]));
+ }
+ return 0;
+}
+
+static uint32_t
+get_core_number(void)
+{
+#ifdef ACTUALLY_GET_CORE_NUMBER
+#ifdef _SC_NPROCESSORS_CONF
+ return sysconf(_SC_NPROCESSORS_CONF);
+#else /* _SC_NPROCESSORS_CONF */
+ int n_processors;
+ size_t length = sizeof(n_processors);
+ int mib[] = {CTL_HW, HW_NCPU};
+ if (sysctl(mib, sizeof(mib) / sizeof(mib[0]),
+ &n_processors, &length, NULL, 0) == 0 &&
+ length == sizeof(n_processors) &&
+ 0 < n_processors) {
+ return n_processors;
+ } else {
+ return 1;
+ }
+#endif /* _SC_NPROCESSORS_CONF */
+#endif /* ACTUALLY_GET_CORE_NUMBER */
+ return 0;
+}
+
+static void
+usage(FILE *output)
+{
+ fprintf(
+ output,
+ "Usage: groonga-suggest-httpd [options...] db_path\n"
+ "db_path:\n"
+ " specify groonga database path which is used for suggestion.\n"
+ "\n"
+ "options:\n"
+ " -p, --port <port number> : http server port number\n"
+ " (default: %d)\n"
+ /*
+ " --address <ip/hostname> : server address to listen\n"
+ " (default: %s)\n"
+ */
+ " -c <thread number> : number of server threads\n"
+ " (deprecated. use --n-threads)\n"
+ " -t, --n-threads <thread number> : number of server threads\n"
+ " (default: %d)\n"
+ " -s, --send-endpoint <send endpoint> : send endpoint\n"
+ " (ex. tcp://example.com:1234)\n"
+ " -r, --receive-endpoint <receive endpoint> : receive endpoint\n"
+ " (ex. tcp://example.com:1235)\n"
+ " -l, --log-base-path <path prefix> : log path prefix\n"
+ " --n-lines-per-log-file <lines number> : number of lines in a log file\n"
+ " use 0 for disabling this\n"
+ " (default: %d)\n"
+ " -d, --daemon : daemonize\n"
+ " --disable-max-fd-check : disable max FD check on start\n"
+ " -h, --help : show this message\n",
+ DEFAULT_PORT, default_max_threads, n_lines_per_log_file);
+}
+
+int
+main(int argc, char **argv)
+{
+ int port_no = DEFAULT_PORT;
+ const char *max_threads_string = NULL, *port_string = NULL;
+ const char *address;
+ const char *send_endpoint = NULL, *recv_endpoint = NULL, *log_base_path = NULL;
+ const char *n_lines_per_log_file_string = NULL;
+ int n_processed_args, flags = RUN_MODE_ENABLE_MAX_FD_CHECK;
+ run_mode mode = run_mode_none;
+
+ if (!(default_max_threads = get_core_number())) {
+ default_max_threads = DEFAULT_MAX_THREADS;
+ }
+
+ /* parse options */
+ {
+ static grn_str_getopt_opt opts[] = {
+ {'c', NULL, NULL, 0, GETOPT_OP_NONE}, /* deprecated */
+ {'t', "n-threads", NULL, 0, GETOPT_OP_NONE},
+ {'h', "help", NULL, run_mode_usage, GETOPT_OP_UPDATE},
+ {'p', "port", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "bind-address", NULL, 0, GETOPT_OP_NONE}, /* not supported yet */
+ {'s', "send-endpoint", NULL, 0, GETOPT_OP_NONE},
+ {'r', "receive-endpoint", NULL, 0, GETOPT_OP_NONE},
+ {'l', "log-base-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "n-lines-per-log-file", NULL, 0, GETOPT_OP_NONE},
+ {'d', "daemon", NULL, run_mode_daemon, GETOPT_OP_UPDATE},
+ {'\0', "disable-max-fd-check", NULL, RUN_MODE_ENABLE_MAX_FD_CHECK,
+ GETOPT_OP_OFF},
+ {'\0', NULL, NULL, 0, 0}
+ };
+ opts[0].arg = &max_threads_string;
+ opts[1].arg = &max_threads_string;
+ opts[3].arg = &port_string;
+ opts[4].arg = &address;
+ opts[5].arg = &send_endpoint;
+ opts[6].arg = &recv_endpoint;
+ opts[7].arg = &log_base_path;
+ opts[8].arg = &n_lines_per_log_file_string;
+
+ n_processed_args = grn_str_getopt(argc, argv, opts, &flags);
+ }
+
+ /* main */
+ mode = (flags & RUN_MODE_MASK);
+ if (n_processed_args < 0 ||
+ (argc - n_processed_args) != 1 ||
+ mode == run_mode_error) {
+ usage(stderr);
+ return EXIT_FAILURE;
+ } else if (mode == run_mode_usage) {
+ usage(stdout);
+ return EXIT_SUCCESS;
+ } else {
+ grn_ctx ctx;
+ void *zmq_ctx;
+
+ if (max_threads_string) {
+ max_threads = atoi(max_threads_string);
+ if (max_threads > MAX_THREADS) {
+ print_error("too many threads. limit to %d.", MAX_THREADS);
+ max_threads = MAX_THREADS;
+ }
+ } else {
+ max_threads = default_max_threads;
+ }
+
+ if (port_string) {
+ port_no = atoi(port_string);
+ }
+
+ if (flags & RUN_MODE_ENABLE_MAX_FD_CHECK) {
+ /* check environment */
+ struct rlimit rlim;
+ if (!getrlimit(RLIMIT_NOFILE, &rlim)) {
+ if (rlim.rlim_max < MIN_MAX_FDS) {
+ print_error("too small max fds. %d required.", MIN_MAX_FDS);
+ return -1;
+ }
+ rlim.rlim_cur = rlim.rlim_cur;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+ }
+ }
+
+ if (n_lines_per_log_file_string) {
+ int64_t n_lines;
+ n_lines = grn_atoll(n_lines_per_log_file_string,
+ n_lines_per_log_file_string + strlen(n_lines_per_log_file_string),
+ NULL);
+ if (n_lines < 0) {
+ print_error("--n-lines-per-log-file must be >= 0: <%s>",
+ n_lines_per_log_file_string);
+ return(EXIT_FAILURE);
+ }
+ if (n_lines > UINT32_MAX) {
+ print_error("--n-lines-per-log-file must be <= %ld: <%s>",
+ UINT32_MAX, n_lines_per_log_file_string);
+ return(EXIT_FAILURE);
+ }
+ n_lines_per_log_file = (uint32_t)n_lines;
+ }
+
+ if (mode == run_mode_daemon) {
+ daemonize();
+ }
+
+ grn_init();
+ grn_ctx_init(&ctx, 0);
+ if ((db = grn_db_open(&ctx, argv[n_processed_args]))) {
+ if ((zmq_ctx = zmq_init(1))) {
+ signal(SIGTERM, signal_handler);
+ signal(SIGINT, signal_handler);
+ signal(SIGQUIT, signal_handler);
+ signal(SIGUSR1, signal_reopen_log_file);
+
+ serve_threads(max_threads, port_no, argv[n_processed_args], zmq_ctx,
+ send_endpoint, recv_endpoint, log_base_path);
+ zmq_term(zmq_ctx);
+ } else {
+ print_error("cannot create zmq context.");
+ }
+ grn_obj_close(&ctx, db);
+ } else {
+ print_error("cannot open db.");
+ }
+ grn_ctx_fin(&ctx);
+ grn_fin();
+ }
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_learner.c b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_learner.c
new file mode 100644
index 00000000000..060d238565a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/groonga_suggest_learner.c
@@ -0,0 +1,839 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010-2014 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/* for grn_str_getopt() */
+#include <str.h>
+
+#include "zmq_compatible.h"
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <msgpack.h>
+#include <pthread.h>
+#include <groonga.h>
+#include <inttypes.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <dirent.h>
+
+#include "util.h"
+
+#include <evhttp.h>
+
+#define DEFAULT_RECV_ENDPOINT "tcp://*:1234"
+#define DEFAULT_SEND_ENDPOINT "tcp://*:1235"
+#define SEND_WAIT 1000 /* 0.001sec */
+
+#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0
+
+typedef enum {
+ RUN_MODE_NONE = 0x00,
+ RUN_MODE_USAGE = 0x01,
+ RUN_MODE_DAEMON = 0x02,
+ RUN_MODE_ERROR = 0x04
+} run_mode;
+
+#define RUN_MODE_MASK 0x007f
+
+typedef struct {
+ const char *db_path;
+ const char *send_endpoint;
+ pthread_t thd;
+ void *zmq_ctx;
+} send_thd_data;
+
+static volatile sig_atomic_t loop = 1;
+
+static void
+load_to_groonga(grn_ctx *ctx,
+ grn_obj *buf,
+ const char *query, uint32_t query_len,
+ const char *client_id, uint32_t client_id_len,
+ const char *learn_target_name, uint32_t learn_target_name_len,
+ uint64_t millisec,
+ int submit)
+{
+ GRN_BULK_REWIND(buf);
+ GRN_TEXT_PUTS(ctx, buf, "load --table event_");
+ GRN_TEXT_PUT(ctx, buf, learn_target_name, learn_target_name_len);
+ GRN_TEXT_PUTS(ctx, buf, " --each 'suggest_preparer(_id,type,item,sequence,time,pair_");
+ GRN_TEXT_PUT(ctx, buf, learn_target_name, learn_target_name_len);
+ GRN_TEXT_PUTS(ctx, buf, ")'");
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(buf), GRN_TEXT_LEN(buf), GRN_CTX_MORE);
+ grn_ctx_send(ctx, CONST_STR_LEN("["), GRN_CTX_MORE);
+
+ GRN_BULK_REWIND(buf);
+ GRN_TEXT_PUTS(ctx, buf, "{\"item\":");
+ grn_text_esc(ctx, buf, query, query_len);
+ GRN_TEXT_PUTS(ctx, buf, ",\"sequence\":");
+ grn_text_esc(ctx, buf, client_id, client_id_len);
+ GRN_TEXT_PUTS(ctx, buf, ",\"time\":");
+ grn_text_ftoa(ctx, buf, (double)millisec / 1000);
+ if (submit) {
+ GRN_TEXT_PUTS(ctx, buf, ",\"type\":\"submit\"}");
+ } else {
+ GRN_TEXT_PUTS(ctx, buf, "}");
+ }
+ /* printf("%.*s\n", GRN_TEXT_LEN(buf), GRN_TEXT_VALUE(buf)); */
+ grn_ctx_send(ctx, GRN_TEXT_VALUE(buf), GRN_TEXT_LEN(buf), GRN_CTX_MORE);
+
+ grn_ctx_send(ctx, CONST_STR_LEN("]"), 0);
+
+ {
+ char *res;
+ int flags;
+ unsigned int res_len;
+ grn_ctx_recv(ctx, &res, &res_len, &flags);
+ }
+}
+
+void
+load_to_multi_targets(grn_ctx *ctx,
+ grn_obj *buf,
+ const char *query, uint32_t query_len,
+ const char *client_id, uint32_t client_id_len,
+ const char *learn_target_names,
+ uint32_t learn_target_names_len,
+ uint64_t millisec,
+ int submit)
+{
+ if (millisec && query && client_id && learn_target_names) {
+ unsigned int tn_len;
+ const char *tn, *tnp, *tne;
+ tn = tnp = learn_target_names;
+ tne = learn_target_names + learn_target_names_len;
+ while (tnp <= tne) {
+ if (tnp == tne || *tnp == '|') {
+ tn_len = tnp - tn;
+
+ /*
+ printf("sec: %" PRIu64 " query %.*s client_id: %.*s target: %.*s\n",
+ millisec,
+ query_len, query,
+ client_id_len, client_id,
+ tn_len, tn);
+ */
+ load_to_groonga(ctx, buf, query, query_len, client_id, client_id_len,
+ tn, tn_len, millisec, submit);
+
+ tn = ++tnp;
+ } else {
+ tnp++;
+ }
+ }
+ }
+}
+
+#define PACK_KEY_FROM_ID(id) do { \
+ int _k_len; \
+ char _k_buf[GRN_TABLE_MAX_KEY_SIZE]; \
+ _k_len = grn_table_get_key(ctx, ref_table, (id), _k_buf, GRN_TABLE_MAX_KEY_SIZE); \
+ msgpack_pack_raw(&pk, _k_len); \
+ msgpack_pack_raw_body(&pk, _k_buf, _k_len); \
+} while (0)
+
+#define PACK_MAP_ITEM(col_name) do { \
+ grn_obj _v; \
+ msgpack_pack_raw(&pk, sizeof(#col_name) - 1); \
+ msgpack_pack_raw_body(&pk, CONST_STR_LEN(#col_name)); \
+ switch (col_##col_name->header.type) { \
+ case GRN_COLUMN_FIX_SIZE: \
+ GRN_VALUE_FIX_SIZE_INIT(&_v, 0, grn_obj_get_range(ctx, col_##col_name)); \
+ break; \
+ case GRN_COLUMN_VAR_SIZE: \
+ if ((col_##col_name->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_VECTOR) { \
+ GRN_VALUE_FIX_SIZE_INIT(&_v, GRN_OBJ_VECTOR, grn_obj_get_range(ctx, col_##col_name)); \
+ } else { \
+ GRN_VALUE_VAR_SIZE_INIT(&_v, 0, grn_obj_get_range(ctx, col_##col_name)); \
+ } \
+ break; \
+ } \
+ grn_obj_get_value(ctx, col_##col_name, rec_id, &_v); \
+ \
+ switch (_v.header.type) { \
+ case GRN_BULK: \
+ switch (_v.header.domain) { \
+ case GRN_DB_SHORT_TEXT: \
+ msgpack_pack_raw(&pk, GRN_TEXT_LEN(&_v)); \
+ msgpack_pack_raw_body(&pk, GRN_TEXT_VALUE(&_v), GRN_TEXT_LEN(&_v)); \
+ break; \
+ case GRN_DB_INT32: \
+ msgpack_pack_int32(&pk, GRN_INT32_VALUE(&_v)); \
+ break; \
+ case GRN_DB_UINT32: \
+ msgpack_pack_uint32(&pk, GRN_UINT32_VALUE(&_v)); \
+ break; \
+ case GRN_DB_TIME: \
+ msgpack_pack_double(&pk, (double)GRN_TIME_VALUE(&_v) / GRN_TIME_USEC_PER_SEC); \
+ break; \
+ default: /* ref. to ShortText key */ \
+ PACK_KEY_FROM_ID(GRN_RECORD_VALUE(&_v)); \
+ } \
+ break; \
+ case GRN_UVECTOR: /* ref.s to ShortText key */ \
+ { \
+ grn_id *_idv = (grn_id *)GRN_BULK_HEAD(&_v), *_idve = (grn_id *)GRN_BULK_CURR(&_v); \
+ msgpack_pack_array(&pk, _idve - _idv); \
+ for (; _idv < _idve; _idv++) { \
+ PACK_KEY_FROM_ID(*_idv); \
+ } \
+ } \
+ break; \
+ default: \
+ print_error("invalid groonga object type(%d) for msgpack.", _v.header.type); \
+ msgpack_pack_nil(&pk); \
+ break; \
+ } \
+ grn_obj_close(ctx, &_v); \
+} while (0)
+
+static int
+zmq_send_to_httpd(void *zmq_send_sock, void *data, size_t size)
+{
+ zmq_msg_t msg;
+ if (!zmq_msg_init_size(&msg, size)) {
+ memcpy((void *)zmq_msg_data(&msg), data, size);
+ if (zmq_msg_send(&msg, zmq_send_sock, 0)) {
+ print_error("zmq_send() error");
+ return -1;
+ }
+ zmq_msg_close(&msg);
+ } else {
+ print_error("zmq_msg_init_size() error");
+ }
+ return 0;
+}
+
+static void
+send_handler(void *zmq_send_sock, grn_ctx *ctx)
+{
+ grn_table_cursor *cur;
+ if ((cur = grn_table_cursor_open(ctx, grn_ctx_db(ctx), NULL, 0, NULL, 0,
+ 0, -1, 0))) {
+ grn_id table_id;
+ while (loop && (table_id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) {
+ grn_obj *table;
+ if ((table = grn_ctx_at(ctx, table_id))) {
+ int name_len;
+ char name_buf[GRN_TABLE_MAX_KEY_SIZE];
+
+ name_len = grn_obj_name(ctx, table, name_buf,
+ GRN_TABLE_MAX_KEY_SIZE);
+
+ if (name_len > 5) {
+ if (table->header.type == GRN_TABLE_PAT_KEY &&
+ !memcmp(name_buf, CONST_STR_LEN("item_"))) {
+ /* ["_key","ShortText"],["last","Time"],["kana","kana"],["freq2","Int32"],["freq","Int32"],["co","pair_all"],["buzz","Int32"],["boost","Int32"] */
+ grn_obj *ref_table;
+ grn_table_cursor *tc;
+ grn_obj *col_last, *col_kana, *col_freq, *col_freq2,
+ *col_buzz, *col_boost;
+
+ col_kana = grn_obj_column(ctx, table, CONST_STR_LEN("kana"));
+ col_freq = grn_obj_column(ctx, table, CONST_STR_LEN("freq"));
+ col_last = grn_obj_column(ctx, table, CONST_STR_LEN("last"));
+ col_boost = grn_obj_column(ctx, table, CONST_STR_LEN("boost"));
+ col_freq2 = grn_obj_column(ctx, table, CONST_STR_LEN("freq2"));
+ col_buzz = grn_obj_column(ctx, table, CONST_STR_LEN("buzz"));
+
+ ref_table = grn_ctx_at(ctx, grn_obj_get_range(ctx, col_kana));
+
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL,
+ 0, 0, -1, 0))) {
+ grn_id rec_id;
+ while (loop && (rec_id = grn_table_cursor_next(ctx, tc))
+ != GRN_ID_NIL) {
+ char *key;
+ size_t key_len;
+ msgpack_packer pk;
+ msgpack_sbuffer sbuf;
+
+ msgpack_sbuffer_init(&sbuf);
+ msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
+
+ msgpack_pack_map(&pk, 8);
+
+ /* ["_key","ShortText"],["last","Time"],["kana","kana"],["freq2","Int32"],["freq","Int32"],["co","pair_all"],["buzz","Int32"],["boost","Int32"] */
+ msgpack_pack_raw(&pk, 6);
+ msgpack_pack_raw_body(&pk, CONST_STR_LEN("target"));
+ msgpack_pack_raw(&pk, name_len);
+ msgpack_pack_raw_body(&pk, name_buf, name_len);
+
+ msgpack_pack_raw(&pk, 4);
+ msgpack_pack_raw_body(&pk,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ key_len = grn_table_cursor_get_key(ctx, tc, (void **)&key);
+ msgpack_pack_raw(&pk, key_len);
+ msgpack_pack_raw_body(&pk, key, key_len);
+
+ PACK_MAP_ITEM(last);
+ PACK_MAP_ITEM(kana);
+ PACK_MAP_ITEM(freq);
+ PACK_MAP_ITEM(freq2);
+ PACK_MAP_ITEM(buzz);
+ PACK_MAP_ITEM(boost);
+
+ zmq_send_to_httpd(zmq_send_sock, sbuf.data, sbuf.size);
+
+ usleep(SEND_WAIT);
+
+ msgpack_sbuffer_destroy(&sbuf);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ } else if (table->header.type == GRN_TABLE_HASH_KEY &&
+ !memcmp(name_buf, CONST_STR_LEN("pair_"))) {
+ grn_obj *ref_table;
+ grn_table_cursor *tc;
+ grn_obj *col_pre, *col_post, *col_freq0, *col_freq1, *col_freq2;
+
+ col_pre = grn_obj_column(ctx, table, CONST_STR_LEN("pre"));
+ col_post = grn_obj_column(ctx, table, CONST_STR_LEN("post"));
+ col_freq0 = grn_obj_column(ctx, table, CONST_STR_LEN("freq0"));
+ col_freq1 = grn_obj_column(ctx, table, CONST_STR_LEN("freq1"));
+ col_freq2 = grn_obj_column(ctx, table, CONST_STR_LEN("freq2"));
+
+ ref_table = grn_ctx_at(ctx, grn_obj_get_range(ctx, col_pre));
+
+ if ((tc = grn_table_cursor_open(ctx, table, NULL, 0, NULL,
+ 0, 0, -1, 0))) {
+ grn_id rec_id;
+ while (loop && (rec_id = grn_table_cursor_next(ctx, tc))
+ != GRN_ID_NIL) {
+ uint64_t *key;
+ msgpack_packer pk;
+ msgpack_sbuffer sbuf;
+
+ /* skip freq0 == 0 && freq1 == 0 && freq2 == 0 */
+ {
+ grn_obj f;
+ grn_obj_get_value(ctx, col_freq0, rec_id, &f);
+ if (!GRN_INT32_VALUE(&f)) {
+ grn_obj_get_value(ctx, col_freq1, rec_id, &f);
+ if (!GRN_INT32_VALUE(&f)) {
+ grn_obj_get_value(ctx, col_freq2, rec_id, &f);
+ if (!GRN_INT32_VALUE(&f)) { continue; }
+ }
+ }
+ }
+
+ /* make pair_* message */
+ msgpack_sbuffer_init(&sbuf);
+ msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
+
+ msgpack_pack_map(&pk, 7);
+ /* ["_key","UInt64"],["pre","item_all"],["post","item_all"],["freq2","Int32"],["freq1","Int32"],["freq0","Int32"] */
+
+ msgpack_pack_raw(&pk, 6);
+ msgpack_pack_raw_body(&pk, CONST_STR_LEN("target"));
+ msgpack_pack_raw(&pk, name_len);
+ msgpack_pack_raw_body(&pk, name_buf, name_len);
+
+ msgpack_pack_raw(&pk, 4);
+ msgpack_pack_raw_body(&pk,
+ GRN_COLUMN_NAME_KEY,
+ GRN_COLUMN_NAME_KEY_LEN);
+ grn_table_cursor_get_key(ctx, tc, (void **)&key);
+ msgpack_pack_uint64(&pk, *key);
+
+ PACK_MAP_ITEM(pre);
+ PACK_MAP_ITEM(post);
+ PACK_MAP_ITEM(freq0);
+ PACK_MAP_ITEM(freq1);
+ PACK_MAP_ITEM(freq2);
+
+ zmq_send_to_httpd(zmq_send_sock, sbuf.data, sbuf.size);
+
+ usleep(SEND_WAIT);
+
+ msgpack_sbuffer_destroy(&sbuf);
+ }
+ grn_table_cursor_close(ctx, tc);
+ }
+ }
+ }
+ grn_obj_unlink(ctx, table);
+ }
+ }
+ grn_table_cursor_close(ctx, cur);
+ }
+}
+
+static void *
+send_to_httpd(void *arg)
+{
+ send_thd_data *thd = arg;
+ void *zmq_send_sock;
+ if ((zmq_send_sock = zmq_socket(thd->zmq_ctx, ZMQ_PUB))) {
+ if (!zmq_bind(zmq_send_sock, thd->send_endpoint)) {
+ grn_ctx ctx;
+ if (!(grn_ctx_init(&ctx, 0))) {
+ grn_obj *db;
+ if ((db = grn_db_open(&ctx, thd->db_path))) {
+ uint64_t hwm = 1;
+ zmq_setsockopt(zmq_send_sock, ZMQ_SNDHWM, &hwm, sizeof(uint64_t));
+ while (loop) {
+ send_handler(zmq_send_sock, &ctx);
+ }
+ grn_obj_close(&ctx, db);
+ } else {
+ print_error("error in grn_db_open() on send thread.");
+ }
+ grn_ctx_fin(&ctx);
+ } else {
+ print_error("error in grn_ctx_init() on send thread.");
+ }
+ } else {
+ print_error("cannot bind zmq_socket.");
+ }
+ } else {
+ print_error("cannot create zmq_socket.");
+ }
+ return NULL;
+}
+
+static void
+handle_msg(msgpack_object *obj, grn_ctx *ctx, grn_obj *buf)
+{
+ int submit_flag = 0;
+ uint64_t millisec = 0;
+ const char *query = NULL,
+ *client_id = NULL, *learn_target_names = NULL;
+ uint32_t query_len = 0, client_id_len = 0, learn_target_names_len = 0;
+ if (obj->type == MSGPACK_OBJECT_MAP) {
+ int i;
+ for (i = 0; i < obj->via.map.size; i++) {
+ msgpack_object_kv *kv;
+ kv = &(obj->via.map.ptr[i]);
+ if (kv->key.type == MSGPACK_OBJECT_RAW && kv->key.via.raw.size) {
+ switch (kv->key.via.raw.ptr[0]) {
+ case 'i':
+ if (kv->val.type == MSGPACK_OBJECT_RAW) {
+ client_id_len = kv->val.via.raw.size;
+ client_id = kv->val.via.raw.ptr;
+ }
+ break;
+ case 'q':
+ if (kv->val.type == MSGPACK_OBJECT_RAW) {
+ query_len = kv->val.via.raw.size;
+ query = kv->val.via.raw.ptr;
+ }
+ break;
+ case 'l':
+ if (kv->val.type == MSGPACK_OBJECT_RAW) {
+ learn_target_names_len = kv->val.via.raw.size;
+ learn_target_names = kv->val.via.raw.ptr;
+ }
+ break;
+ case 's':
+ if (kv->val.type == MSGPACK_OBJECT_POSITIVE_INTEGER) {
+ millisec = kv->val.via.u64;
+ }
+ break;
+ case 't':
+ if (kv->val.type == MSGPACK_OBJECT_BOOLEAN) {
+ submit_flag = (kv->val.via.boolean ? 1 : 0);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ load_to_multi_targets(ctx, buf, query, query_len,
+ client_id, client_id_len,
+ learn_target_names, learn_target_names_len,
+ millisec, submit_flag);
+ }
+}
+
+static void
+recv_event_loop(msgpack_zone *mempool, void *zmq_sock, grn_ctx *ctx)
+{
+ grn_obj buf;
+ zmq_pollitem_t items[] = {
+ { zmq_sock, 0, ZMQ_POLLIN, 0}
+ };
+ GRN_TEXT_INIT(&buf, 0);
+ while (loop) {
+ zmq_poll(items, 1, 10000);
+ if (items[0].revents & ZMQ_POLLIN) { /* always true */
+ zmq_msg_t msg;
+ if (zmq_msg_init(&msg)) {
+ print_error("cannot init zmq message.");
+ } else {
+ if (zmq_msg_recv(&msg, zmq_sock, 0)) {
+ print_error("cannot recv zmq message.");
+ } else {
+ msgpack_object obj;
+ msgpack_unpack_return ret;
+ ret = msgpack_unpack(zmq_msg_data(&msg), zmq_msg_size(&msg), NULL, mempool, &obj);
+ if (MSGPACK_UNPACK_SUCCESS == ret) {
+ /* msgpack_object_print(stdout, obj); */
+ handle_msg(&obj, ctx, &buf);
+ }
+ msgpack_zone_clear(mempool);
+ }
+ zmq_msg_close(&msg);
+ }
+ }
+ }
+ grn_obj_unlink(ctx, &buf);
+}
+
+struct _suggest_log_file {
+ FILE *fp;
+ char *path;
+ uint64_t line;
+ /* datas from one line */
+ int submit;
+ char *query;
+ uint64_t millisec;
+ char *client_id;
+ char *learn_target_name;
+ /* link list */
+ struct _suggest_log_file *next;
+};
+typedef struct _suggest_log_file suggest_log_file;
+
+#if 0
+static void
+print_log_file_list(suggest_log_file *list)
+{
+ while (list) {
+ printf("fp:%p millisec:%" PRIu64 " next:%p\n",
+ list->fp, list->millisec, list->next);
+ list = list->next;
+ }
+}
+#endif
+
+static void
+free_log_line_data(suggest_log_file *l)
+{
+ if (l->query) {
+ free(l->query);
+ l->query = NULL;
+ }
+ if (l->client_id) {
+ free(l->client_id);
+ l->client_id = NULL;
+ }
+ if (l->learn_target_name) {
+ free(l->learn_target_name);
+ l->learn_target_name = NULL;
+ }
+}
+
+#define MAX_LOG_LENGTH 0x2000
+
+static void
+read_log_line(suggest_log_file **list)
+{
+ suggest_log_file *t = *list;
+ char line_buf[MAX_LOG_LENGTH];
+ while (1) {
+ free_log_line_data(t);
+ if (fgets(line_buf, MAX_LOG_LENGTH, t->fp)) {
+ char *eol;
+ t->line++;
+ if ((eol = strrchr(line_buf, '\n'))) {
+ const char *query, *types, *client_id, *learn_target_name;
+ struct evkeyvalq get_args;
+ *eol = '\0';
+ evhttp_parse_query(line_buf, &get_args);
+ parse_keyval(NULL,
+ &get_args, &query, &types, &client_id, NULL,
+ &learn_target_name, NULL, &(t->millisec), NULL, NULL, NULL,
+ NULL);
+ if (query && client_id && learn_target_name && t->millisec) {
+ t->query = evhttp_decode_uri(query);
+ t->submit = (types && !strcmp(types, "submit"));
+ t->client_id = evhttp_decode_uri(client_id);
+ t->learn_target_name = evhttp_decode_uri(learn_target_name);
+ evhttp_clear_headers(&get_args);
+ break;
+ }
+ print_error("invalid line path:%s line:%" PRIu64,
+ t->path, t->line);
+ evhttp_clear_headers(&get_args);
+ } else {
+ /* read until new line */
+ while (1) {
+ int c = fgetc(t->fp);
+ if (c == '\n' || c == EOF) { break; }
+ }
+ }
+ } else {
+ /* terminate reading log */
+ fclose(t->fp);
+ free(t->path);
+ *list = t->next;
+ free(t);
+ break;
+ }
+ }
+}
+
+/* re-sorting by list->millisec asc with moving a head item. */
+static void
+sort_log_file_list(suggest_log_file **list)
+{
+ suggest_log_file *p, *target;
+ target = *list;
+ if (!target || !target->next || target->millisec < target->next->millisec) {
+ return;
+ }
+ *list = target->next;
+ for (p = *list; p; p = p->next) {
+ if (!p->next || target->millisec > p->next->millisec) {
+ target->next = p->next;
+ p->next = target;
+ return;
+ }
+ }
+}
+
+#define PATH_SEPARATOR '/'
+
+static suggest_log_file *
+gather_log_file(const char *dir_path, unsigned int dir_path_len)
+{
+ DIR *dir;
+ struct dirent *dirent;
+ char path[PATH_MAX + 1];
+ suggest_log_file *list = NULL;
+ if (!(dir = opendir(dir_path))) {
+ print_error("cannot open log directory.");
+ return NULL;
+ }
+ memcpy(path, dir_path, dir_path_len);
+ path[dir_path_len] = PATH_SEPARATOR;
+ while ((dirent = readdir(dir))) {
+ struct stat fstat;
+ unsigned int d_namlen, path_len;
+ if (*(dirent->d_name) == '.' && (
+ dirent->d_name[1] == '\0' ||
+ (dirent->d_name[1] == '.' && dirent->d_name[2] == '\0'))) {
+ continue;
+ }
+ d_namlen = strlen(dirent->d_name);
+ path_len = dir_path_len + 1 + d_namlen;
+ if (dir_path_len + d_namlen >= PATH_MAX) { continue; }
+ memcpy(path + dir_path_len + 1, dirent->d_name, d_namlen);
+ path[path_len] = '\0';
+ lstat(path, &fstat);
+ if (S_ISDIR(fstat.st_mode)) {
+ gather_log_file(path, path_len);
+ } else {
+ suggest_log_file *p = calloc(1, sizeof(suggest_log_file));
+ if (!(p->fp = fopen(path, "r"))) {
+ free(p);
+ } else {
+ if (list) {
+ p->next = list;
+ }
+ p->path = strdup(path);
+ list = p;
+ read_log_line(&list);
+ sort_log_file_list(&list);
+ }
+ }
+ /* print_log_file_list(list); */
+ }
+ return list;
+}
+
+static void
+load_log(grn_ctx *ctx, const char *log_dir_name)
+{
+ grn_obj buf;
+ suggest_log_file *list;
+ GRN_TEXT_INIT(&buf, 0);
+ list = gather_log_file(log_dir_name, strlen(log_dir_name));
+ while (list) {
+ /*
+ printf("file:%s line:%" PRIu64 " query:%s millisec:%" PRIu64 "\n",
+ list->path, list->line, list->query, list->millisec);
+ */
+ load_to_multi_targets(ctx, &buf,
+ list->query, strlen(list->query),
+ list->client_id, strlen(list->client_id),
+ list->learn_target_name, strlen(list->learn_target_name),
+ list->millisec,
+ list->submit);
+ read_log_line(&list);
+ sort_log_file_list(&list);
+ }
+ grn_obj_close(ctx, &buf);
+}
+
+static void
+usage(FILE *output)
+{
+ fprintf(output,
+ "Usage: groonga-suggest-learner [options...] db_path\n"
+ "options:\n"
+ " -r <recv endpoint>: recv endpoint (default: %s)\n"
+ " --receive-endpoint <recv endpoint>\n"
+ "\n"
+ " -s <send endpoint>: send endpoint (default: %s)\n"
+ " --send-endpoint <send endpoint>\n"
+ "\n"
+ " -l <log directory>: load from log files made on webserver.\n"
+ " --log-base-path <log directory>\n"
+ "\n"
+ " --log-path <path> : output logs to <path>\n"
+ " --log-level <level> : set log level to <level> (default: %d)\n"
+ " -d, --daemon : daemonize\n",
+ DEFAULT_RECV_ENDPOINT, DEFAULT_SEND_ENDPOINT,
+ GRN_LOG_DEFAULT_LEVEL);
+}
+
+static void
+signal_handler(int sig)
+{
+ loop = 0;
+}
+
+int
+main(int argc, char **argv)
+{
+ run_mode mode = RUN_MODE_NONE;
+ int n_processed_args;
+ const char *recv_endpoint = DEFAULT_RECV_ENDPOINT;
+ const char *send_endpoint = DEFAULT_SEND_ENDPOINT;
+ const char *log_base_path = NULL;
+ const char *db_path = NULL;
+
+ /* parse options */
+ {
+ int flags = mode;
+ const char *log_path = NULL;
+ const char *log_level = NULL;
+ static grn_str_getopt_opt opts[] = {
+ {'r', "receive-endpoint", NULL, 0, GETOPT_OP_NONE},
+ {'s', "send-endpoint", NULL, 0, GETOPT_OP_NONE},
+ {'l', "log-base-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "log-path", NULL, 0, GETOPT_OP_NONE},
+ {'\0', "log-level", NULL, 0, GETOPT_OP_NONE},
+ {'d', "daemon", NULL, RUN_MODE_DAEMON, GETOPT_OP_UPDATE},
+ {'h', "help", NULL, RUN_MODE_USAGE, GETOPT_OP_UPDATE},
+ {'\0', NULL, NULL, 0, 0}
+ };
+ opts[0].arg = &recv_endpoint;
+ opts[1].arg = &send_endpoint;
+ opts[2].arg = &log_base_path;
+ opts[3].arg = &log_path;
+ opts[4].arg = &log_level;
+
+ n_processed_args = grn_str_getopt(argc, argv, opts, &flags);
+
+ if (log_path) {
+ grn_default_logger_set_path(log_path);
+ }
+
+ if (log_level) {
+ const char * const end = log_level + strlen(log_level);
+ const char *rest = NULL;
+ const int value = grn_atoi(log_level, end, &rest);
+ if (end != rest || value < 0 || value > 9) {
+ fprintf(stderr, "invalid log level: <%s>\n", log_level);
+ return EXIT_FAILURE;
+ }
+ grn_default_logger_set_max_level(value);
+ }
+
+ mode = (flags & RUN_MODE_MASK);
+
+ if (mode & RUN_MODE_USAGE) {
+ usage(stdout);
+ return EXIT_SUCCESS;
+ }
+
+ if ((n_processed_args < 0) ||
+ (argc - n_processed_args) != 1) {
+ usage(stderr);
+ }
+
+ db_path = argv[n_processed_args];
+ }
+
+ /* main */
+ {
+ grn_ctx *ctx;
+ msgpack_zone *mempool;
+
+ if (mode == RUN_MODE_DAEMON) {
+ daemonize();
+ }
+
+ grn_init();
+
+ ctx = grn_ctx_open(0);
+ if (!(grn_db_open(ctx, db_path))) {
+ print_error("cannot open database.");
+ } else {
+ if (log_base_path) {
+ /* loading log mode */
+ load_log(ctx, log_base_path);
+ } else {
+ /* zeromq/msgpack recv mode */
+ if (!(mempool = msgpack_zone_new(MSGPACK_ZONE_CHUNK_SIZE))) {
+ print_error("cannot create msgpack zone.");
+ } else {
+ void *zmq_ctx, *zmq_recv_sock;
+ if (!(zmq_ctx = zmq_init(1))) {
+ print_error("cannot create zmq context.");
+ } else {
+ if (!(zmq_recv_sock = zmq_socket(zmq_ctx, ZMQ_SUB))) {
+ print_error("cannot create zmq_socket.");
+ } else if (zmq_bind(zmq_recv_sock, recv_endpoint)) {
+ print_error("cannot bind zmq_socket.");
+ } else {
+ send_thd_data thd;
+
+ signal(SIGTERM, signal_handler);
+ signal(SIGINT, signal_handler);
+ signal(SIGQUIT, signal_handler);
+
+ zmq_setsockopt(zmq_recv_sock, ZMQ_SUBSCRIBE, "", 0);
+ thd.db_path = db_path;
+ thd.send_endpoint = send_endpoint;
+ thd.zmq_ctx = zmq_ctx;
+
+ if (pthread_create(&(thd.thd), NULL, send_to_httpd, &thd)) {
+ print_error("error in pthread_create() for sending datas.");
+ }
+ recv_event_loop(mempool, zmq_recv_sock, ctx);
+ if (pthread_join(thd.thd, NULL)) {
+ print_error("error in pthread_join() for waiting completion of sending data.");
+ }
+ }
+ zmq_term(zmq_ctx);
+ }
+ msgpack_zone_free(mempool);
+ }
+ }
+ }
+ grn_obj_close(ctx, grn_ctx_db(ctx));
+ grn_ctx_fin(ctx);
+ grn_fin();
+ }
+ return 0;
+}
diff --git a/storage/mroonga/vendor/groonga/src/suggest/httpd_sources.am b/storage/mroonga/vendor/groonga/src/suggest/httpd_sources.am
new file mode 100644
index 00000000000..a09328d51e1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/httpd_sources.am
@@ -0,0 +1,3 @@
+groonga_suggest_httpd_SOURCES = \
+ groonga_suggest_httpd.c \
+ zmq_compatible.h
diff --git a/storage/mroonga/vendor/groonga/src/suggest/learner_sources.am b/storage/mroonga/vendor/groonga/src/suggest/learner_sources.am
new file mode 100644
index 00000000000..03b49087116
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/learner_sources.am
@@ -0,0 +1,3 @@
+groonga_suggest_learner_SOURCES = \
+ groonga_suggest_learner.c \
+ zmq_compatible.h
diff --git a/storage/mroonga/vendor/groonga/src/suggest/util.c b/storage/mroonga/vendor/groonga/src/suggest/util.c
new file mode 100644
index 00000000000..f6a717b8d7a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/util.c
@@ -0,0 +1,215 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010- Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include "util.h"
+
+#define DEFAULT_FREQUENCY_THRESHOLD 100
+#define DEFAULT_CONDITIONAL_PROBABILITY_THRESHOLD 0.2
+
+int
+print_error(const char *format, ...)
+{
+ int r;
+ va_list l;
+
+ va_start(l, format);
+ vfprintf(stderr, format, l);
+ r = fprintf(stderr, "\n");
+ fflush(stderr);
+ va_end(l);
+
+ return r;
+}
+
+int
+daemonize(void)
+{
+ pid_t pid;
+
+ switch (fork()) {
+ case 0:
+ break;
+ case -1:
+ print_error("fork failed.");
+ return -1;
+ default:
+ wait(NULL);
+ _exit(0);
+ }
+ switch ((pid = fork())) {
+ case 0:
+ break;
+ case -1:
+ perror("fork");
+ return -1;
+ default:
+ fprintf(stderr, "%d\n", pid);
+ _exit(0);
+ }
+ {
+ int null_fd = open("/dev/null", O_RDWR, 0);
+ if (null_fd != -1) {
+ dup2(null_fd, 0);
+ dup2(null_fd, 1);
+ dup2(null_fd, 2);
+ if (null_fd > 2) { close(null_fd); }
+ }
+ }
+ return 1;
+}
+
+static uint64_t
+atouint64_t(const char *s)
+{
+ uint64_t r;
+ for (r = 0; *s; s++) {
+ r *= 10;
+ r += (*s - '0');
+ }
+ return r;
+}
+
+void
+parse_keyval(grn_ctx *ctx,
+ struct evkeyvalq *get_args,
+ const char **query, const char **types,
+ const char **client_id, const char **target_name,
+ const char **learn_target_name,
+ const char **callback,
+ uint64_t *millisec,
+ int *frequency_threshold,
+ double *conditional_probability_threshold,
+ int *limit,
+ grn_obj *pass_through_parameters)
+{
+ struct evkeyval *get;
+
+ if (query) { *query = NULL; }
+ if (types) { *types = NULL; }
+ if (client_id) { *client_id = NULL; }
+ if (target_name) { *target_name = NULL; }
+ if (learn_target_name) { *learn_target_name = NULL; }
+ if (callback) { *callback = NULL; }
+ if (millisec) { *millisec = 0; }
+ if (frequency_threshold) {
+ *frequency_threshold = DEFAULT_FREQUENCY_THRESHOLD;
+ }
+ if (conditional_probability_threshold) {
+ *conditional_probability_threshold = DEFAULT_CONDITIONAL_PROBABILITY_THRESHOLD;
+ }
+ if (limit) { *limit = -1; }
+
+ TAILQ_FOREACH(get, get_args, next) {
+ grn_bool is_pass_through_parameter = GRN_FALSE;
+ size_t key_length;
+
+ key_length = strlen(get->key);
+ switch (key_length) {
+ case 0:
+ break;
+ case 1:
+ switch(get->key[0]) {
+ case 'q':
+ if (query) {
+ *query = get->value;
+ }
+ break;
+ case 't':
+ /* TODO: check types */
+ if (types) {
+ *types = get->value;
+ }
+ break;
+ case 'i':
+ if (client_id) {
+ *client_id = get->value;
+ }
+ break;
+ case 's':
+ if (millisec) {
+ *millisec = atouint64_t(get->value);
+ }
+ break;
+ case 'n':
+ /* TODO: check target_name */
+ if (target_name) {
+ *target_name = get->value;
+ }
+ break;
+ case 'l':
+ if (learn_target_name) {
+ *learn_target_name = get->value;
+ }
+ break;
+ case 'h':
+ if (frequency_threshold) {
+ *frequency_threshold = atoi(get->value);
+ }
+ break;
+ case 'p':
+ if (conditional_probability_threshold) {
+ *conditional_probability_threshold = strtod(get->value, NULL);
+ }
+ break;
+ case 'm':
+ if (limit) {
+ *limit = atoi(get->value);
+ }
+ break;
+ default:
+ is_pass_through_parameter = GRN_TRUE;
+ break;
+ }
+ break;
+ default:
+ switch (get->key[0]) {
+ case 'c':
+ if (!strcmp(get->key, "callback")) {
+ if (callback) {
+ *callback = get->value;
+ }
+ } else {
+ is_pass_through_parameter = GRN_TRUE;
+ }
+ break;
+ default:
+ is_pass_through_parameter = GRN_TRUE;
+ }
+ }
+
+ if (is_pass_through_parameter && pass_through_parameters) {
+ if (GRN_TEXT_LEN(pass_through_parameters) > 0) {
+ GRN_TEXT_PUTS(ctx, pass_through_parameters, "&");
+ }
+ grn_text_urlenc(ctx, pass_through_parameters, get->key, strlen(get->key));
+ GRN_TEXT_PUTS(ctx, pass_through_parameters, "=");
+ grn_text_urlenc(ctx, pass_through_parameters,
+ get->value, strlen(get->value));
+ }
+ }
+}
diff --git a/storage/mroonga/vendor/groonga/src/suggest/util.h b/storage/mroonga/vendor/groonga/src/suggest/util.h
new file mode 100644
index 00000000000..468fe1045ba
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/util.h
@@ -0,0 +1,40 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2010- Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_SUGGEST_UTIL_H
+#define GRN_SUGGEST_UTIL_H
+
+#include <sys/queue.h>
+#include <event.h>
+#include <stdint.h>
+
+#include <groonga.h>
+
+int print_error(const char *format, ...);
+int daemonize(void);
+void parse_keyval(grn_ctx *ctx,
+ struct evkeyvalq *get_args,
+ const char **query, const char **types,
+ const char **client_id, const char **target_name,
+ const char **learn_target_name,
+ const char **callback,
+ uint64_t *millisec,
+ int *frequency_threshold,
+ double *conditional_probability_threshold,
+ int *limit,
+ grn_obj *pass_through_parameters);
+
+#endif /* GRN_SUGGEST_UTIL_H */
diff --git a/storage/mroonga/vendor/groonga/src/suggest/util_sources.am b/storage/mroonga/vendor/groonga/src/suggest/util_sources.am
new file mode 100644
index 00000000000..d4b74860e2b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/util_sources.am
@@ -0,0 +1,3 @@
+libutil_la_SOURCES = \
+ util.c \
+ util.h
diff --git a/storage/mroonga/vendor/groonga/src/suggest/zmq_compatible.h b/storage/mroonga/vendor/groonga/src/suggest/zmq_compatible.h
new file mode 100644
index 00000000000..28bc035a46a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/src/suggest/zmq_compatible.h
@@ -0,0 +1,33 @@
+/* -*- c-basic-offset: 2 -*- */
+/* Copyright(C) 2013 Brazil
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+#ifndef GRN_SUGGEST_ZMQ_COMPATIBLE_H
+#define GRN_SUGGEST_ZMQ_COMPATIBLE_H
+
+#include <zmq.h>
+
+#ifndef ZMQ_SNDHWM
+# define ZMQ_SNDHWM ZMQ_HWM
+#endif
+
+#if ZMQ_VERSION_MAJOR == 2
+# define zmq_msg_send(message, socket, flags) \
+ zmq_send((socket), (message), (flags))
+# define zmq_msg_recv(message, socket, flags) \
+ zmq_recv((socket), (message), (flags))
+#endif
+
+#endif /* GRN_SUGGEST_ZMQ_COMPATIBLE_H */
diff --git a/storage/mroonga/vendor/groonga/tools/Makefile.am b/storage/mroonga/vendor/groonga/tools/Makefile.am
new file mode 100644
index 00000000000..00e14ea5da5
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/Makefile.am
@@ -0,0 +1,6 @@
+noinstall_ruby_scripts = \
+ groonga-memory-leak-checker.rb \
+ prepare-sphinx-html.rb
+
+EXTRA_DIST = \
+ $(noinstall_ruby_scripts)
diff --git a/storage/mroonga/vendor/groonga/tools/groonga-memory-leak-checker.rb b/storage/mroonga/vendor/groonga/tools/groonga-memory-leak-checker.rb
new file mode 100755
index 00000000000..4e4e10a4371
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/groonga-memory-leak-checker.rb
@@ -0,0 +1,93 @@
+#!/usr/bin/env ruby
+
+unless respond_to?(:spawn, true)
+ puts("Ruby 1.9 is required.")
+ exit(false)
+end
+
+require 'ostruct'
+require 'optparse'
+require 'tempfile'
+require 'time'
+
+options = OpenStruct.new
+options.groonga = "groonga"
+options.show_result = false
+options.report_progress = true
+
+option_parser = OptionParser.new do |parser|
+ parser.banner += " DATABASE COMMAND_FILE1 ..."
+
+ parser.on("--groonga=PATH",
+ "Use PATH as groonga command path") do |path|
+ options.groonga = path
+ end
+
+ parser.on("--[no-]show-result",
+ "Show result of command") do |boolean|
+ options.show_result = boolean
+ end
+
+ parser.on("--[no-]report-progress",
+ "Report progress") do |boolean|
+ options.report_progress = boolean
+ end
+end
+
+database, *command_files = option_parser.parse!(ARGV)
+if database.nil?
+ puts(option_parser)
+ exit(false)
+end
+
+i = 0
+command_files.each do |path|
+ File.open(path) do |file|
+ file.each_line do |command|
+ if options.report_progress
+ i += 1
+ puts("#{Time.now.iso8601}: #{i} commands done.") if (i % 1000).zero?
+ end
+ command = command.chomp
+ base_name = File.basename($0, ".*")
+ log = Tempfile.new("#{base_name}-log")
+ command_file = Tempfile.new("#{base_name}-command")
+ command_file.puts(command)
+ command_file.close
+ command_line = [options.groonga,
+ "--log-path", log.path,
+ "--file", command_file.path]
+ command_file << "-n" unless File.exist?(database)
+ command_line << database
+ result = Tempfile.new("#{base_name}-result")
+ pid = spawn(*command_line, :out => result.fileno)
+ pid, status = Process.waitpid2(pid)
+ unless status.success?
+ puts("failed to run: (#{status.exitstatus}): " +
+ "[#{command_line.join(' ')}]")
+ puts("command:")
+ puts(command)
+ puts("result:")
+ result.open
+ puts(result.read)
+ next
+ # exit(false)
+ end
+ if options.show_result
+ result.open
+ puts(result.read)
+ end
+ log.open
+ log.each_line do |log_line|
+ case log_line
+ when /grn_fin \((\d+)\)/
+ n_unfreed_allocations = $1.to_i
+ unless n_unfreed_allocations.zero?
+ puts("maybe memory leak: #{n_unfreed_allocations}: <#{command}>")
+ exit(false)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/tools/groonga-suggest-httpd-client.rb b/storage/mroonga/vendor/groonga/tools/groonga-suggest-httpd-client.rb
new file mode 100755
index 00000000000..ac4c30778e6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/groonga-suggest-httpd-client.rb
@@ -0,0 +1,181 @@
+#!/usr/bin/env ruby
+#
+# Copyright(C) 2011 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+require "optparse"
+require "cool.io"
+require "digest"
+
+class Terms
+ def initialize
+ @sources = []
+ end
+
+ def next
+ until @sources.empty?
+ source = @sources.first
+ term = source.next
+ @sources.shift if source.empty?
+ break if term
+ end
+ term
+ end
+
+ def empty?
+ @sources.all?(&:empty?)
+ end
+
+ def add_source_file(path)
+ @sources << InputSource.new(File.open(path))
+ end
+
+ def add_source_input(input)
+ @sources << InputSource.new(input)
+ end
+
+ class InputSource
+ def initialize(source)
+ @source = source
+ @lines = @source.each_line
+ @look_ahead_term = nil
+ end
+
+ def next
+ if @look_ahead_term
+ term = @look_ahead_term
+ @look_ahead_term = nil
+ else
+ loop do
+ term = @lines.next.strip
+ break unless term.empty?
+ end
+ end
+ term
+ rescue StopIteration
+ @lines = nil
+ @source.close
+ @source = nil
+ nil
+ end
+
+ def empty?
+ if @source.nil?
+ true
+ else
+ @look_ahead_term ||= self.next
+ @look_ahead_term.nil?
+ end
+ end
+ end
+end
+
+class GroongaSuggestHTTPDClient < Coolio::HttpClient
+ def initialize(socket, dataset, id, term)
+ super(socket)
+ @dataset = dataset
+ @id = id
+ @term = term
+ @callbacks = []
+ end
+
+ def request
+ query = {}
+ query["q"] = @term.dup.force_encoding("ASCII-8BIT")
+ query["s"] = (Time.now.to_f * 1_000).round.to_s
+ query["i"] = @id
+ query["t"] = "submit" if rand(10).zero?
+ query["l"] = @dataset
+ super("GET", "/", :query => query)
+ end
+
+ def on_body_data(data)
+ end
+
+ def on_request_complete(&block)
+ if block
+ @callbacks << block
+ else
+ @callbacks.each do |callback|
+ callback.call(self)
+ end
+ end
+ end
+
+ def on_error(reason)
+ close
+ $stderr.puts("Error: #{reason}")
+ end
+end
+
+n_connections = 100
+host = "localhost"
+port = 8080
+terms = Terms.new
+parser = OptionParser.new
+parser.banner += " DATASET"
+parser.on("--host=HOST",
+ "Use HOST as groonga suggest HTTPD host.",
+ "(#{host})") do |_host|
+ host = _host
+end
+parser.on("--port=PORT", Integer,
+ "Use PORT as groonga suggest HTTPD port.",
+ "(#{port})") do |_port|
+ port = _port
+end
+parser.on("--n-connections=N", Integer,
+ "Use N connections.",
+ "(#{n_connections})") do |n|
+ n_connections = n
+end
+parser.on("--terms=PATH",
+ "Use terns in PATH.",
+ "(none)") do |path|
+ terms.add_source_file(path)
+end
+
+parser.parse!
+if ARGV.size != 1
+ puts(parser)
+ exit(false)
+end
+dataset = ARGV.shift
+
+if terms.empty? and !$stdin.tty?
+ terms.add_source_input($stdin)
+end
+
+if terms.empty?
+ puts("no terms")
+ exit(false)
+end
+
+loop = Coolio::Loop.default
+run_client = lambda do |id|
+ term = terms.next
+ return if term.nil?
+ client = GroongaSuggestHTTPDClient.connect(host, port, dataset, id, term)
+ client.on_request_complete do
+ run_client.call(id)
+ end
+ client.attach(loop)
+ client.request
+end
+n_connections.times do |i|
+ id = Digest::SHA2.hexdigest(Time.now.to_f.to_s)
+ run_client.call(id)
+end
+loop.run
diff --git a/storage/mroonga/vendor/groonga/tools/prepare-sphinx-html.rb b/storage/mroonga/vendor/groonga/tools/prepare-sphinx-html.rb
new file mode 100755
index 00000000000..5396d267bfd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/prepare-sphinx-html.rb
@@ -0,0 +1,183 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+if ARGV.size != 2
+ puts "Usage: #{$0} SOURCE_DIR DEST_DIR"
+ exit(false)
+end
+
+require 'pathname'
+
+def fix_link(text, extension, language)
+ send("fix_#{extension}_link", text, language)
+end
+
+def fix_link_path(text)
+ text.gsub(/\b_(sources|static|images)\b/, '\1')
+end
+
+def fix_language_link(url, language)
+ url.gsub(/\A((?:\.\.\/){2,})([a-z]{2})\/html\//) do
+ relative_base_path = $1
+ link_language = $2
+ close_quote = $3
+ if language == "en"
+ relative_base_path = relative_base_path.gsub(/\A\.\.\//, '')
+ end
+ if link_language != "en"
+ relative_base_path += "#{link_language}/"
+ end
+ "#{relative_base_path}docs/"
+ end
+end
+
+def fix_html_link(html, language)
+ html = html.gsub(/(href|src)="(.+?)"/) do
+ attribute = $1
+ link = $2
+ link = fix_link_path(link)
+ link = fix_language_link(link, language)
+ "#{attribute}=\"#{link}\""
+ end
+ html.gsub(/(id="top-link" href=)"(.+?)"/) do
+ prefix = $1
+ top_path = $2.gsub(/\/index\.html\z/, '/')
+ top_path = "./" if ["index.html", "#"].include?(top_path)
+ "#{prefix}\"#{top_path}../\""
+ end
+end
+
+def add_language_annotation_to_source_label(html, language)
+ return html unless language == "ja"
+ html.gsub(/>(ソースコードを表示)</) do
+ label = $1
+ ">#{label}(英語)<"
+ end
+end
+
+def fix_js_link(js, language)
+ fix_link_path(js)
+end
+
+LANGUAGE_TO_LOCALE = {
+ "ja" => "ja_JP",
+ "en" => "en_US",
+}
+
+def insert_facebook_html_header(html)
+ html.gsub(/<\/head>/) do
+ <<-HTML
+ <meta property="fb:page_id" content="201193596592346" /><!-- groonga -->
+ <meta property="fb:admins" content="664204556" /><!-- kouhei.sutou -->
+ <meta property="og:type" content="product" />
+ <meta property="og:image" content="http://groonga.org/images/logos/groonga-icon-full-size.png" />
+ <meta property="og:site_name" content="groonga" />
+
+ <link rel="stylesheet" href="/css/sphinx.css" type="text/css" />
+ </head>
+ HTML
+ end
+end
+
+def insert_facebook_html_fb_root(html)
+ html.gsub(/<body>/) do
+ <<-HTML
+ <body>
+ <div id="fb-root"></div>
+ HTML
+ end
+end
+
+def insert_facebook_html_buttons(html)
+ html.gsub(/(<div class="other-language-links">)/) do
+ <<-HTML
+ <div class="facebook-buttons">
+ <fb:like href="http://www.facebook.com/pages/groonga/201193596592346"
+ layout="standard"
+ width="290"></fb:like>
+ </div>
+ #{$1}
+ HTML
+ end
+end
+
+def insert_facebook_html_footer(html, language)
+ locale = LANGUAGE_TO_LOCALE[language]
+ raise "unknown locale for language #{language.inspect}" if locale.nil?
+ html.gsub(/<\/body>/) do
+ <<-HTML
+ <script src="http://connect.facebook.net/#{locale}/all.js"></script>
+
+ <script>
+ FB.init({
+ appId : null,
+ status : true, // check login status
+ cookie : true, // enable cookies to allow the server to access the session
+ xfbml : true // parse XFBML
+ });
+ </script>
+ </body>
+ HTML
+ end
+end
+
+def insert_facebook_html(html, language)
+ html = insert_facebook_html_header(html)
+ html = insert_facebook_html_fb_root(html)
+ html = insert_facebook_html_buttons(html)
+ html = insert_facebook_html_footer(html, language)
+ html
+end
+
+source_dir, dest_dir = ARGV
+
+source_dir = Pathname.new(source_dir)
+dest_dir = Pathname.new(dest_dir)
+
+language_dirs = []
+source_dir.each_entry do |top_level_path|
+ language_dirs << top_level_path if /\A[a-z]{2}\z/ =~ top_level_path.to_s
+end
+
+language_dirs.each do |language_dir|
+ language = language_dir.to_s
+ language_source_dir = source_dir + language_dir + "html"
+ language_dest_dir = dest_dir + language_dir
+ language_source_dir.find do |source_path|
+ relative_path = source_path.relative_path_from(language_source_dir)
+ dest_path = language_dest_dir + relative_path
+ if source_path.directory?
+ dest_path.mkpath
+ else
+ case source_path.extname
+ when ".html", ".js"
+ content = source_path.read
+ extension = source_path.extname.gsub(/\A\./, '')
+ content = fix_link(content, extension, language)
+ if extension == "html"
+ content = insert_facebook_html(content, language)
+ content = add_language_annotation_to_source_label(content, language)
+ end
+ dest_path.open("wb") do |dest|
+ dest.print(content.strip)
+ end
+ FileUtils.touch(dest_path, :mtime => source_path.mtime)
+ else
+ case source_path.basename.to_s
+ when ".buildinfo"
+ # ignore
+ else
+ FileUtils.cp(source_path, dest_path, :preserve => true)
+ end
+ end
+ end
+ end
+end
+
+dest_dir.find do |dest_path|
+ if dest_path.directory? and /\A_/ =~ dest_path.basename.to_s
+ normalized_dest_path = dest_path + ".."
+ normalized_dest_path += dest_path.basename.to_s.gsub(/\A_/, '')
+ FileUtils.mv(dest_path, normalized_dest_path)
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/tools/travis-before-script.sh b/storage/mroonga/vendor/groonga/tools/travis-before-script.sh
new file mode 100755
index 00000000000..943f41b0013
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/travis-before-script.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+set -e
+
+git submodule update --init --depth 1
+
+case "${BUILD_TOOL}" in
+ autotools)
+ ./autogen.sh
+
+ configure_args=""
+ #if [ "$CC" = "clang" ]; then
+ configure_args="${configure_args} --enable-debug"
+ #fi
+ if [ "$ENABLE_MRUBY" = "yes" ]; then
+ configure_args="${configure_args} --with-ruby --enable-mruby"
+ fi
+
+ ./configure --with-ruby ${configure_args}
+ ;;
+ cmake)
+ cmake_args=""
+ cmake_args="${cmake_args} -DGRN_WITH_DEBUG=yes"
+ if [ "$ENABLE_MRUBY" = "yes" ]; then
+ cmake_args="${cmake_args} -DGRN_WITH_MRUBY=yes"
+ fi
+
+ cmake . ${cmake_args}
+ ;;
+esac
+
+n_processors="$(grep '^processor' /proc/cpuinfo | wc -l)"
+make -j${n_processors} > /dev/null
diff --git a/storage/mroonga/vendor/groonga/tools/travis-script.sh b/storage/mroonga/vendor/groonga/tools/travis-script.sh
new file mode 100755
index 00000000000..7931903d419
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/tools/travis-script.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+case "${BUILD_TOOL}" in
+ autotools)
+ test/unit/run-test.sh
+ test/command/run-test.sh
+ # test/command/run-test.sh --interface http
+ # test/command/run-test.sh --interface http --testee groonga-httpd
+ ;;
+ cmake)
+ test/command/run-test.sh
+ ;;
+esac
diff --git a/storage/mroonga/vendor/groonga/vendor/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/CMakeLists.txt
new file mode 100644
index 00000000000..30c9befebb6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright(C) 2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+add_subdirectory(mruby)
diff --git a/storage/mroonga/vendor/groonga/vendor/Makefile.am b/storage/mroonga/vendor/groonga/vendor/Makefile.am
new file mode 100644
index 00000000000..334b6fd8917
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/Makefile.am
@@ -0,0 +1,18 @@
+NGINX_DIR = nginx-$(NGINX_VERSION)
+
+SUBDIRS = \
+ onigmo \
+ mruby
+
+EXTRA_DIST = \
+ $(NGINX_DIR) \
+ CMakeLists.txt \
+ plugins/CMakeLists.txt \
+ mruby/CMakeLists.txt
+
+dist-hook:
+ GIT_DIR=$(srcdir)/mruby-source/.git git archive --format=tar HEAD | \
+ tar xf - -C $(distdir)/mruby-source
+ $(MKDIR_P) $(distdir)/onigmo-source
+ GIT_DIR=$(srcdir)/onigmo-source/.git git archive --format=tar HEAD | \
+ tar xf - -C $(distdir)/onigmo-source
diff --git a/storage/mroonga/vendor/groonga/vendor/mruby/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/mruby/CMakeLists.txt
new file mode 100644
index 00000000000..9f4aad4c32b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/mruby/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright(C) 2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+add_definitions(
+ -DDISABLE_GEMS
+ )
+
+include_directories(
+ "${CMAKE_CURRENT_SOURCE_DIR}/../mruby-${MRUBY_VERSION}/include"
+ "${CMAKE_CURRENT_SOURCE_DIR}/../mruby-${MRUBY_VERSION}/src"
+ )
+
+if(GRN_WITH_MRUBY)
+ read_file_list("${CMAKE_CURRENT_SOURCE_DIR}/sources.am" MRUBY_SOURCES)
+ add_library(mruby OBJECT ${MRUBY_SOURCES})
+ set_source_files_properties(${MRUBY_SOURCES}
+ PROPERTIES
+ COMPILE_FLAGS "${GRN_C_COMPILE_FLAGS}")
+ set_target_properties(
+ mruby
+ PROPERTIES
+ POSITION_INDEPENDENT_CODE ON)
+endif()
diff --git a/storage/mroonga/vendor/groonga/vendor/mruby/Makefile.am b/storage/mroonga/vendor/groonga/vendor/mruby/Makefile.am
new file mode 100644
index 00000000000..41385bcd589
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/mruby/Makefile.am
@@ -0,0 +1,63 @@
+EXTRA_DIST = \
+ build_config.rb
+
+DEFAULT_INCLUDES = \
+ -I$(srcdir)/../mruby-source/include \
+ -I$(srcdir)/../mruby-source/src
+
+if WITH_MRUBY
+noinst_LTLIBRARIES = libmruby.la
+
+AM_CPPFLAGS = \
+ -I$(srcdir)/../onigmo-source
+
+if PLATFORM_WIN32
+AM_CPPFLAGS += \
+ -DMRB_BUILD_AS_DLL \
+ -DMRB_CORE
+endif
+
+include sources.am
+
+BUILT_SOURCES = \
+ parse.c \
+ mrblib.c \
+ mrbgems_init.c \
+ mruby_onig_regexp.c
+libmruby_la_SOURCES += $(BUILT_SOURCES)
+
+parse.c: mruby-build.timestamp
+mrblib.c: mruby-build.timestamp
+mrbgems_init.c: mruby-build.timestamp
+mruby_onig_regexp.c: mruby-build.timestamp
+
+MRUBY_CONFIG = $(abs_srcdir)/build_config.rb
+MRUBY_BUILD_DIR = $(abs_top_builddir)/vendor/mruby-build
+MRUBY_ONIG_REGEXP_DIR = $(MRUBY_BUILD_DIR)/mrbgems/mruby-onig-regexp
+mruby-build.timestamp: build_config.rb
+ rm -rf $(MRUBY_BUILD_DIR)
+ cd $(srcdir)/../mruby-source && \
+ $(RUBY) minirake \
+ MRUBY_BUILD_DIR=$(MRUBY_BUILD_DIR) \
+ MRUBY_CONFIG=$(MRUBY_CONFIG)
+ touch $@
+ cp $(MRUBY_BUILD_DIR)/host/src/y.tab.c parse.c
+ cp $(MRUBY_BUILD_DIR)/host/mrblib/mrblib.c ./
+ ( \
+ cat $(MRUBY_BUILD_DIR)/host/mrbgems/gem_init.c; \
+ cat $(MRUBY_BUILD_DIR)/host/mrbgems/*/gem_init.c; \
+ ) > mrbgems_init.c
+ cp $(MRUBY_ONIG_REGEXP_DIR)/src/mruby_onig_regexp.c ./
+
+EXTRA_DIST += \
+ mruby-build.timestamp
+
+CLEANFILES = *.gcno *gcda
+MAINTAINERCLEANFILES = mruby-build.timestamp
+endif
+
+update:
+ cd "$(srcdir)/../mruby-source" && \
+ (git checkout master && git pull --rebase)
+ cd "$(srcdir)" && \
+ ./update.rb build_config.rb ../mruby-source > sources.am
diff --git a/storage/mroonga/vendor/groonga/vendor/mruby/build_config.rb b/storage/mroonga/vendor/groonga/vendor/mruby/build_config.rb
new file mode 100644
index 00000000000..2380c04789d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/mruby/build_config.rb
@@ -0,0 +1,33 @@
+MRuby::Build.new do |conf|
+ if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+ toolchain :visualcpp
+ else
+ toolchain :gcc
+ end
+
+ enable_debug
+
+ conf.gem :core => "mruby-sprintf"
+ conf.gem :core => "mruby-print"
+ conf.gem :core => "mruby-math"
+ conf.gem :core => "mruby-time"
+ conf.gem :core => "mruby-struct"
+ conf.gem :core => "mruby-enum-ext"
+ conf.gem :core => "mruby-string-ext"
+ conf.gem :core => "mruby-numeric-ext"
+ conf.gem :core => "mruby-array-ext"
+ conf.gem :core => "mruby-hash-ext"
+ conf.gem :core => "mruby-range-ext"
+ conf.gem :core => "mruby-proc-ext"
+ conf.gem :core => "mruby-symbol-ext"
+ conf.gem :core => "mruby-random"
+ conf.gem :core => "mruby-object-ext"
+ conf.gem :core => "mruby-objectspace"
+ conf.gem :core => "mruby-fiber"
+ conf.gem :core => "mruby-enumerator"
+ conf.gem :core => "mruby-enum-lazy"
+ conf.gem :core => "mruby-toplevel-ext"
+ conf.gem :core => "mruby-kernel-ext"
+
+ conf.gem :github => "mattn/mruby-onig-regexp"
+end
diff --git a/storage/mroonga/vendor/groonga/vendor/mruby/sources.am b/storage/mroonga/vendor/groonga/vendor/mruby/sources.am
new file mode 100644
index 00000000000..b470d58b803
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/mruby/sources.am
@@ -0,0 +1,56 @@
+libmruby_la_SOURCES = \
+ ../mruby-source/src/array.c \
+ ../mruby-source/src/backtrace.c \
+ ../mruby-source/src/class.c \
+ ../mruby-source/src/codegen.c \
+ ../mruby-source/src/compar.c \
+ ../mruby-source/src/crc.c \
+ ../mruby-source/src/debug.c \
+ ../mruby-source/src/dump.c \
+ ../mruby-source/src/enum.c \
+ ../mruby-source/src/error.c \
+ ../mruby-source/src/error.h \
+ ../mruby-source/src/etc.c \
+ ../mruby-source/src/gc.c \
+ ../mruby-source/src/hash.c \
+ ../mruby-source/src/init.c \
+ ../mruby-source/src/kernel.c \
+ ../mruby-source/src/load.c \
+ ../mruby-source/src/mrb_throw.h \
+ ../mruby-source/src/node.h \
+ ../mruby-source/src/numeric.c \
+ ../mruby-source/src/object.c \
+ ../mruby-source/src/opcode.h \
+ ../mruby-source/src/pool.c \
+ ../mruby-source/src/print.c \
+ ../mruby-source/src/proc.c \
+ ../mruby-source/src/range.c \
+ ../mruby-source/src/state.c \
+ ../mruby-source/src/string.c \
+ ../mruby-source/src/symbol.c \
+ ../mruby-source/src/value_array.h \
+ ../mruby-source/src/variable.c \
+ ../mruby-source/src/version.c \
+ ../mruby-source/src/vm.c \
+ ../mruby-source/mrbgems/mruby-sprintf/src/kernel.c \
+ ../mruby-source/mrbgems/mruby-sprintf/src/sprintf.c \
+ ../mruby-source/mrbgems/mruby-print/src/print.c \
+ ../mruby-source/mrbgems/mruby-math/src/math.c \
+ ../mruby-source/mrbgems/mruby-time/src/time.c \
+ ../mruby-source/mrbgems/mruby-struct/src/struct.c \
+ ../mruby-source/mrbgems/mruby-string-ext/src/string.c \
+ ../mruby-source/mrbgems/mruby-numeric-ext/src/numeric_ext.c \
+ ../mruby-source/mrbgems/mruby-array-ext/src/array.c \
+ ../mruby-source/mrbgems/mruby-hash-ext/src/hash-ext.c \
+ ../mruby-source/mrbgems/mruby-range-ext/src/range.c \
+ ../mruby-source/mrbgems/mruby-proc-ext/src/proc.c \
+ ../mruby-source/mrbgems/mruby-proc-ext/test/proc.c \
+ ../mruby-source/mrbgems/mruby-symbol-ext/src/symbol.c \
+ ../mruby-source/mrbgems/mruby-random/src/mt19937ar.c \
+ ../mruby-source/mrbgems/mruby-random/src/mt19937ar.h \
+ ../mruby-source/mrbgems/mruby-random/src/random.c \
+ ../mruby-source/mrbgems/mruby-random/src/random.h \
+ ../mruby-source/mrbgems/mruby-object-ext/src/object.c \
+ ../mruby-source/mrbgems/mruby-objectspace/src/mruby_objectspace.c \
+ ../mruby-source/mrbgems/mruby-fiber/src/fiber.c \
+ ../mruby-source/mrbgems/mruby-kernel-ext/src/kernel.c
diff --git a/storage/mroonga/vendor/groonga/vendor/mruby/update.rb b/storage/mroonga/vendor/groonga/vendor/mruby/update.rb
new file mode 100755
index 00000000000..888c3d3066d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/mruby/update.rb
@@ -0,0 +1,88 @@
+#!/usr/bin/env ruby
+
+if ARGV.size != 2
+ puts("Usage: #{$0} BUILD_COFNIG.RB MRUBY_SOURCE_DIR")
+ exit(false)
+end
+
+require "find"
+
+build_config_rb = ARGV.shift
+mruby_source_dir = ARGV.shift
+
+module MRuby
+ class Build
+ class << self
+ def source_dir=(dir)
+ @@source_dir = dir
+ end
+
+ def latest
+ @@latest
+ end
+ end
+
+ attr_reader :config
+ def initialize(&block)
+ @@latest = self
+ @config = Config.new(@@source_dir)
+ @config.instance_eval(&block)
+ end
+ end
+
+ class Config
+ attr_reader :gem_dirs
+ def initialize(source_dir)
+ @source_dir = source_dir
+ @gem_dirs = []
+ end
+
+ def toolchain(*args)
+ # ignore
+ end
+
+ def enable_debug
+ # ignore
+ end
+
+ def gem(gem_dir)
+ if gem_dir.is_a?(Hash)
+ gem_dir = load_special_path_gem(gem_dir)
+ return if gem_dir.nil?
+ end
+ @gem_dirs << gem_dir
+ end
+
+ private
+ def load_special_path_gem(params)
+ if params[:core]
+ "#{@source_dir}/mrbgems/#{params[:core]}"
+ elsif params[:github]
+ nil
+ else
+ raise "Unsupported gem options: #{params.inspect}"
+ end
+ end
+ end
+end
+
+MRuby::Build.source_dir = mruby_source_dir
+load build_config_rb
+build = MRuby::Build.latest
+
+sources = []
+source_dirs = ["#{mruby_source_dir}/src"] + build.config.gem_dirs
+source_dirs.each do |source_dir|
+ Find.find(source_dir) do |path|
+ case path
+ when /\.[ch]\z/
+ sources << path
+ end
+ end
+end
+
+indented_sources = sources.collect do |source|
+ "\t#{source}"
+end
+puts("libmruby_la_SOURCES = \\")
+puts(indented_sources.join(" \\\n"))
diff --git a/storage/mroonga/vendor/groonga/vendor/onigmo/Makefile.am b/storage/mroonga/vendor/groonga/vendor/onigmo/Makefile.am
new file mode 100644
index 00000000000..772bfb420c6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/onigmo/Makefile.am
@@ -0,0 +1,31 @@
+EXTRA_DIST = \
+ configure
+
+CONFIGURE_DEPENDENCIES = \
+ configure
+
+ALL_DEPEND_TARGETS =
+INSTALL_DEPEND_TARGETS =
+CLEAN_DEPEND_TARGETS =
+if WITH_MRUBY
+ALL_DEPEND_TARGETS += onigmo-all
+if WITH_SHARED_ONIGMO
+INSTALL_DEPEND_TARGETS += onigmo-install
+endif
+CLEAN_DEPEND_TARGETS += onigmo-clean
+endif
+
+onigmo-all:
+ cd ../onigmo-source && $(MAKE) all
+
+all: $(ALL_DEPEND_TARGETS)
+
+onigmo-install:
+ cd ../onigmo-source && $(MAKE) install
+
+install: $(INSTALL_DEPEND_TARGETS)
+
+onigmo-clean:
+ cd ../onigmo-source && $(MAKE) clean
+
+clean: $(CLEAN_DEPEND_TARGETS)
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/plugins/CMakeLists.txt
new file mode 100644
index 00000000000..845c57f5716
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright(C) 2013 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+file(GLOB
+ PLUGIN_CMAKE_LISTS_LIST
+ "${CMAKE_CURRENT_SOURCE_DIR}/*/CMakeLists.txt")
+if(PLUGIN_CMAKE_LISTS_LIST)
+ foreach(PLUGIN_CMAKE_LISTS "${PLUGIN_CMAKE_LISTS_LIST}")
+ string(REGEX REPLACE
+ "(^${CMAKE_CURRENT_SOURCE_DIR}/+|/+CMakeLists\\.txt$)" ""
+ PLUGIN_DIR
+ "${PLUGIN_CMAKE_LISTS}")
+ add_subdirectory("${PLUGIN_DIR}")
+ endforeach(PLUGIN_CMAKE_LISTS)
+endif()
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/AUTHORS b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/AUTHORS
new file mode 100644
index 00000000000..95053dbcb47
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/AUTHORS
@@ -0,0 +1 @@
+See README.md.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt
new file mode 100644
index 00000000000..484a7d63bfd
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt
@@ -0,0 +1,65 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA
+
+cmake_minimum_required(VERSION 2.6)
+project(groonga-normalizer-mysql)
+
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/version" VERSION)
+
+if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+ set(GROONGA_NORMALIZER_MYSQL_BUNDLED FALSE)
+else()
+ set(GROONGA_NORMALIZER_MYSQL_BUNDLED TRUE)
+endif()
+
+if(GROONGA_NORMALIZER_MYSQL_BUNDLED)
+ set(GROONGA_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include")
+ set(GROONGA_LIBRARY_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/lib")
+ set(GROONGA_LIBRARIES "libgroonga")
+ set(GROONGA_PLUGINS_DIR "${GRN_RELATIVE_PLUGINS_DIR}")
+else()
+ include(FindPkgConfig)
+ include(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake_modules/ReadFileList.cmake)
+
+ file(READ
+ ${CMAKE_CURRENT_SOURCE_DIR}/required_groonga_version
+ GROONGA_REQUIRED_VERSION)
+ string(STRIP "${GROONGA_REQUIRED_VERSION}" GROONGA_REQUIRED_VERSION)
+
+ pkg_check_modules(GROONGA REQUIRED "groonga >= ${GROONGA_REQUIRED_VERSION}")
+ _pkgconfig_invoke(groonga GROONGA PLUGINS_DIR "" --variable=pluginsdir)
+endif()
+
+include_directories(
+ ${CMAKE_BINARY_DIR}
+ ${GROONGA_INCLUDE_DIRS})
+
+link_directories(
+ ${GROONGA_LIBRARY_DIRS})
+
+add_subdirectory(normalizers)
+
+configure_file(
+ groonga-normalizer-mysql.pc.in
+ "${CMAKE_CURRENT_BINARY_DIR}/groonga-normalizer-mysql.pc"
+ @ONLY)
+
+if(NOT GROONGA_NORMALIZER_MYSQL_FOUND)
+ install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/groonga-normalizer-mysql.pc"
+ DESTINATION "lib/pkgconfig/")
+endif()
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/ChangeLog b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/ChangeLog
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/ChangeLog
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/INSTALL b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/INSTALL
new file mode 100644
index 00000000000..95053dbcb47
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/INSTALL
@@ -0,0 +1 @@
+See README.md.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/Makefile.am
new file mode 100644
index 00000000000..cdc7ec525f4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/Makefile.am
@@ -0,0 +1,84 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = \
+ build \
+ normalizers \
+ packages \
+ test \
+ doc
+
+docdir = $(datadir)/doc/$(PACKAGE)
+dist_doc_DATA = \
+ README.md
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = groonga-normalizer-mysql.pc
+
+EXTRA_DIST = \
+ CMakeLists.txt
+
+update-tables:
+ cd normalizers && $(MAKE) update-tables
+
+echo-groonga:
+ @echo $(GROONGA)
+
+echo-groonga-httpd:
+ @echo $(GROONGA_HTTPD)
+
+echo-ruby:
+ @echo $(RUBY)
+
+tag:
+ cd $(top_srcdir) && git tag v$(VERSION) -a -m 'groonga-normalizer-mysql $(VERSION)!!!'
+
+update-version:
+ @if test -z "$(NEW_VERSION)"; then \
+ echo "\$$(NEW_VERSION) is missing"; \
+ exit 1; \
+ fi
+ @echo -n $(NEW_VERSION) > $(srcdir)/version
+
+update-latest-release: misc
+ @if test -z "$(OLD_RELEASE)"; then \
+ echo "\$$(OLD_RELEASE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(OLD_RELEASE_DATE)"; then \
+ echo "\$$(OLD_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ @if test -z "$(NEW_RELEASE_DATE)"; then \
+ echo "\$$(NEW_RELEASE_DATE) is missing"; \
+ exit 1; \
+ fi
+ cd $(top_srcdir) && \
+ misc/update-latest-release.rb \
+ $(PACKAGE) $(OLD_RELEASE) $(OLD_RELEASE_DATE) \
+ $(VERSION) $(NEW_RELEASE_DATE) \
+ packages/rpm/fedora/groonga-normalizer-mysql.spec.in \
+ packages/rpm/centos/groonga-normalizer-mysql.spec.in \
+ packages/debian/changelog
+
+misc:
+ @if test -z "$(CUTTER_SOURCE_PATH)"; then \
+ echo "\$$(CUTTER_SOURCE_PATH) is missing"; \
+ exit 1; \
+ fi
+ ln -s "$(CUTTER_SOURCE_PATH)/misc" misc
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/NEWS b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/NEWS
new file mode 100644
index 00000000000..a4685347e88
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/NEWS
@@ -0,0 +1 @@
+See doc/text/news.md.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README
new file mode 100644
index 00000000000..95053dbcb47
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README
@@ -0,0 +1 @@
+See README.md.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README.md b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README.md
new file mode 100644
index 00000000000..866aba84d40
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/README.md
@@ -0,0 +1,201 @@
+# README
+
+## Name
+
+groonga-normalizer-mysql
+
+## Description
+
+Groonga-normalizer-mysql is a groonga plugin. It provides MySQL
+compatible normalizers and a custom normalizer to groonga.
+
+MySQL compatible normalizers are `NormalizerMySQLGeneralCI` and
+`NormalizerMySQLUnicodeCI`. `NormalizerMySQLGeneralCI` corresponds to
+`utf8mb4_general_ci`. `NormalizerMySQLUnicodeCI` corresponds to
+`utf8mb4_unicode_ci`.
+
+A custom normalizer is
+`NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`. It is
+self-descriptive name but long. It is a variant normalizer of
+`NormalizerMySQLUnicode`. It has different behaviors. The followings
+are the different behaviors.
+
+* `NormalizerMySQLUnicode` normalizes all small Hiragana such as `ã`,
+ `ã£` to Hiragana such as `ã‚`, `ã¤`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`
+ doesn't normalize `ã` to `ã‚` nor `ã£` to `ã¤`. `ã` and `ã‚` are
+ different characters. `ã£` and `ã¤` are also different characters.
+ This behavior is described by `ExceptKanaCI` in the long name. This
+ following behaviors ared described by
+ `ExceptKanaWithVoicedSoundMark` in the long name.
+* `NormalizerMySQLUnicode` normalizes all Hiragana with voiced sound
+ mark such as `ãŒ` to Hiragana without voiced sound mark such as `ã‹`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark` doesn't
+ normalize `ãŒ` to `ã‹`. `ãŒ` and `ã‹` are different characters.
+* `NormalizerMySQLUnicode` normalizes all Hiragana with semi-voiced sound
+ mark such as `ã±` to Hiragana without semi-voiced sound mark such as `ã¯`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark` doesn't
+ normalize `ã±` to `ã¯`. `ã±` and `ã¯` are different characters.
+* `NormalizerMySQLUnicode` normalizes all Katakana with voiced sound
+ mark such as `ガ` to Katakana without voiced sound mark such as `カ`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark` doesn't
+ normalize `ガ` to `カ`. `ガ` and `カ` are different characters.
+* `NormalizerMySQLUnicode` normalizes all Katakana with semi-voiced sound
+ mark such as `パ` to Hiragana without semi-voiced sound mark such as `ãƒ`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark` doesn't
+ normalize `パ` to `ãƒ`. `パ` and `ãƒ` are different characters.
+* `NormalizerMySQLUnicode` normalizes all halfwidth Katakana with
+ voiced sound mark such as `ガ` to halfwidth Katakana without voiced
+ sound mark such as `カ`.
+ `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark`
+ normalizes all halfwidth Katakana with voided sound mark such as `ガ`
+ to fullwidth Katakana with voiced sound mark such as `ガ`.
+
+`NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark` is MySQL
+incompatible normalizer but it is useful for Japanese text. For
+example, `ãµã‚‰ã¤ã` and `ブラック` has different
+means. `NormalizerMySQLUnicodeCI` identifies `ãµã‚‰ã¤ã` with `ブラック
+` but `NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark
+doesn't identify them.
+
+## Install
+
+### Debian GNU/Linux
+
+[Add apt-line for the groonga deb package repository](http://groonga.org/docs/install/debian.html)
+and install `groonga-normalizer-mysql` package:
+
+ % sudo aptitude -V -D -y install groonga-normalizer-mysql
+
+### Ubuntu
+
+[Add apt-line for the groonga deb package repository](http://groonga.org/docs/install/ubuntu.html)
+and install `groonga-normalizer-mysql` package:
+
+ % sudo aptitude -V -D -y install groonga-normalizer-mysql
+
+
+### CentOS
+
+Install `groonga-repository` package:
+
+ % sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
+ % sudo yum makecache
+
+Then install `groonga-normalizer-mysql` package:
+
+ % sudo yum install -y groonga-normalizer-mysql
+
+### Fedora
+
+Install `groonga-repository` package:
+
+ % sudo rpm -ivh http://packages.groonga.org/fedora/groonga-release-1.1.0-1.noarch.rpm
+ % sudo yum makecache
+
+Then install `groonga-normalizer-mysql` package:
+
+ % sudo yum install -y groonga-normalizer-mysql
+
+### OS X - Homebrew
+
+Install `groonga-normalizer-mysql` package:
+
+ % brew install groonga-normalizer-mysql
+
+### Windows
+
+You need to build from source. Here are build instructions.
+
+#### Build system
+
+Install the following build tools:
+
+* [Microsoft Visual Studio 2010 Express](http://www.microsoft.com/japan/msdn/vstudio/express/): 2012 isn't tested yet.
+* [CMake](http://www.cmake.org/)
+
+#### Build groonga
+
+Download the latest groonga source from [packages.groonga.org](http://packages.groonga.org/source/groonga/). Source file name is formatted as `groonga-X.Y.Z.zip`.
+
+Extract the source and move to the source folder:
+
+ > cd ...\groonga-X.Y.Z
+ groonga-X.Y.Z>
+
+Run CMake. Here is a command line to install groonga to `C:\groonga` folder:
+
+ groonga-X.Y.Z> cmake . -G "Visual Studio 10 Win64" -DCMAKE_INSTALL_PREFIX=C:\groonga
+
+Build:
+
+ groonga-X.Y.Z> cmake --build . --config Release
+
+Install:
+
+ groonga-X.Y.Z> cmake --build . --config Release --target Install
+
+#### Build groonga-normalizer-mysql
+
+Download the latest groonga-normalizer-mysql source from [packages.groonga.org](http://packages.groonga.org/source/groonga-normalizer-mysql/). Source file name is formatted as `groonga-normalizer-X.Y.Z.zip`.
+
+Extract the source and move to the source folder:
+
+ > cd ...\groonga-normalizer-mysql-X.Y.Z
+ groonga-normalizer-mysql-X.Y.Z>
+
+IMPORTANT!!!: Set `PKG_CONFIG_PATH` environment variable:
+
+ groonga-normalizer-mysql-X.Y.Z> set PKG_CONFIG_PATH=C:\groongalocal\lib\pkgconfig
+
+Run CMake. Here is a command line to install groonga to `C:\groonga` folder:
+
+ groonga-normalizer-mysql-X.Y.Z> cmake . -G "Visual Studio 10 Win64" -DCMAKE_INSTALL_PREFIX=C:\groonga
+
+Build:
+
+ groonga-normalizer-mysql-X.Y.Z> cmake --build . --config Release
+
+Install:
+
+ groonga-normalizer-mysql-X.Y.Z> cmake --build . --config Release --target Install
+
+## Usage
+
+First, you need to register `normalizers/mysql` plugin:
+
+ groonga> register normalizers/mysql
+
+Then, you can use `NormalizerMySQLGeneralCI` and
+`NormalizerMySQLUnicodeCI` as normalizers:
+
+ groonga> table_create Lexicon TABLE_PAT_KEY --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI
+
+## Dependencies
+
+* groonga >= 3.0.3
+
+## Mailing list
+
+* English: [groonga-talk@lists.sourceforge.net](https://lists.sourceforge.net/lists/listinfo/groonga-talk)
+* Japanese: [groonga-dev@lists.sourceforge.jp](http://lists.sourceforge.jp/mailman/listinfo/groonga-dev)
+
+## Thanks
+
+* Alexander Barkov \<bar@udm.net\>: The author of
+ `MYSQL_SOURCE/strings/ctype-utf8.c`.
+* ...
+
+## Authors
+
+* Kouhei Sutou \<kou@clear-code.com\>
+
+## License
+
+LGPLv2 only. See doc/text/lgpl-2.0.txt for details.
+
+This program uses normalization table defined in MySQL source code. So
+this program is derived work of
+`MYSQL_SOURCE/strings/ctype-utf8.c`. This program is the same license
+as `MYSQL_SOURCE/strings/ctype-utf8.c` and it is licensed under LGPLv2
+only.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/autogen.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/autogen.sh
new file mode 100755
index 00000000000..62385ed00d6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/autogen.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+mkdir -p m4
+autoreconf -i
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/Makefile.am
new file mode 100644
index 00000000000..4a73087dc26
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/Makefile.am
@@ -0,0 +1,18 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = \
+ cmake_modules
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/Makefile.am
new file mode 100644
index 00000000000..44ac5150c6d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/Makefile.am
@@ -0,0 +1,18 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ ReadFileList.cmake
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/ReadFileList.cmake b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/ReadFileList.cmake
new file mode 100644
index 00000000000..018587991d8
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/build/cmake_modules/ReadFileList.cmake
@@ -0,0 +1,27 @@
+# Copyright(C) 2012 Brazil
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1 as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+macro(read_file_list file_name output_variable)
+ file(READ ${file_name} ${output_variable})
+ # Remove variable declaration at the first line:
+ # "libgroonga_la_SOURCES = \" -> ""
+ string(REGEX REPLACE "^.*=[ \t]*\\\\" ""
+ ${output_variable} "${${output_variable}}")
+ # Remove white spaces: " com.c \\\n com.h \\\n" -> "com.c\\com.h"
+ string(REGEX REPLACE "[ \t\n]" "" ${output_variable} "${${output_variable}}")
+ # Convert string to list: "com.c\\com.h" -> "com.c;com.h"
+ # NOTE: List in CMake is ";" separated string.
+ string(REGEX REPLACE "\\\\" ";" ${output_variable} "${${output_variable}}")
+endmacro()
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/configure.ac b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/configure.ac
new file mode 100644
index 00000000000..effb5884f93
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/configure.ac
@@ -0,0 +1,180 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+AC_PREREQ(2.59)
+m4_define([groonga_normalizer_mysql_version], m4_include(version))
+AC_INIT([groonga-normalizer-mysql],
+ groonga_normalizer_mysql_version,
+ [groonga-talk@lists.sourceforge.net])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_SRCDIR([normalizers/mysql.c])
+AM_CONFIG_HEADER([config.h])
+
+AM_INIT_AUTOMAKE([1.9 tar-pax])
+
+AC_PROG_LIBTOOL
+
+if test "$GCC" = "yes"; then
+ CFLAGS="$CFLAGS -Wall -Wextra"
+ CFLAGS="$CFLAGS -Wmissing-declarations -Wmissing-prototypes"
+fi
+
+m4_define([groonga_required_version], m4_include(required_groonga_version))
+GROONGA_REQUIRED_VERSION=groonga_required_version
+PKG_CHECK_MODULES([GROONGA], [groonga >= ${GROONGA_REQUIRED_VERSION}])
+
+_PKG_CONFIG(GROONGA_PLUGINS_DIR, [variable=pluginsdir], [groonga])
+_PKG_CONFIG(GROONGA, [variable=groonga], [groonga])
+
+GROONGA_PLUGINS_DIR="${pkg_cv_GROONGA_PLUGINS_DIR}"
+GROONGA="${pkg_cv_GROONGA}"
+
+AC_SUBST(GROONGA_PLUGINS_DIR)
+AC_SUBST(GROONGA)
+
+normalizers_pluginsdir="\${GROONGA_PLUGINS_DIR}/normalizers"
+AC_SUBST(normalizers_pluginsdir)
+
+# check Ruby for test
+ac_cv_ruby_available="no"
+AC_ARG_WITH([ruby19],
+ AS_HELP_STRING([--with-ruby19=PATH],
+ [Ruby 1.9 interpreter path (default: auto)]),
+ [RUBY="$withval"],
+ [RUBY="auto"])
+
+if test "x$RUBY" = "xno"; then
+ RUBY=
+else
+ if test "x$RUBY" = "xauto"; then
+ AC_PATH_PROGS(RUBY, [ruby1.9 ruby19 ruby1.9.1 ruby], ruby19-not-found)
+ if test "$RUBY" != "ruby19-not-found"; then
+ ruby_version="`$RUBY --version`"
+ if echo "$ruby_version" | grep -q -- 'ruby 1\.9'; then
+ ac_cv_ruby_available="yes"
+ else
+ AC_MSG_WARN([$RUBY isn't Ruby 1.9 ($ruby_version)])
+ fi
+ fi
+ else
+ ruby_not_found_warning_message="$RUBY is not found. Disable HTTP test."
+ case "$RUBY" in
+ /*)
+ AC_CHECK_FILE([$RUBY],
+ [ac_cv_ruby_available="yes"],
+ [AC_MSG_WARN([$ruby_not_found_warning_message])
+ RUBY="$RUBY-not-found"])
+ ;;
+ *)
+ ruby_not_found="$RUBY-not-found"
+ AC_PATH_PROGS(RUBY, "$RUBY", "$ruby_not_found")
+ if test "$RUBY" = "$ruby_not_found"; then
+ AC_MSG_WARN([$ruby_not_found_warning_message])
+ else
+ ac_cv_ruby_available="yes"
+ fi
+ ;;
+ esac
+ fi
+fi
+AC_SUBST(RUBY)
+AM_CONDITIONAL([WITH_TEST], [test "$ac_cv_ruby_available" = "yes"])
+
+# For package
+AC_ARG_WITH(rsync-path,
+ [AS_HELP_STRING([--with-rsync-path=PATH],
+ [specify rsync path to upload groonga packages.])],
+ [RSYNC_PATH="$withval"],
+ [RSYNC_PATH="packages@packages.groonga.org:public"])
+AC_SUBST(RSYNC_PATH)
+
+AC_ARG_WITH(launchpad-uploader-pgp-key,
+ [AS_HELP_STRING([--with-launchpad-uploader-pgp-key=KEY],
+ [specify PGP key UID to upload Groonga packages to Launchpad.])],
+ [LAUNCHPAD_UPLOADER_PGP_KEY="$withval"],
+ [LAUNCHPAD_UPLOADER_PGP_KEY=""])
+AC_SUBST(LAUNCHPAD_UPLOADER_PGP_KEY)
+
+AC_ARG_WITH([groonga-source-path],
+ AS_HELP_STRING([--with-groonga-source-path=PATH],
+ [Specify Groonga source path for
+ groonga-normalizer-mysql's release manager.]),
+ [GROONGA_SOURCE_PATH="$withval"])
+case "$GROONGA_SOURCE_PATH" in
+ ""|/*)
+ : # do nothing
+ ;;
+ *)
+ GROONGA_SOURCE_PATH="\$(top_builddir)/${GROONGA_SOURCE_PATH}"
+ ;;
+esac
+AC_SUBST(GROONGA_SOURCE_PATH)
+
+AC_ARG_WITH([cutter-source-path],
+ AS_HELP_STRING([--with-cutter-source-path=PATH],
+ [Specify Cutter source path for
+ groonga-normalizer-mysql's release manager.]),
+ [CUTTER_SOURCE_PATH="$withval"])
+case "$CUTTER_SOURCE_PATH" in
+ ""|/*)
+ : # do nothing
+ ;;
+ *)
+ CUTTER_SOURCE_PATH="\$(top_builddir)/${CUTTER_SOURCE_PATH}"
+ ;;
+esac
+AC_SUBST(CUTTER_SOURCE_PATH)
+
+GPG_UID=m4_include(gpg_uid)
+AC_SUBST(GPG_UID)
+
+AC_CONFIG_FILES([
+ Makefile
+ groonga-normalizer-mysql.pc
+ build/Makefile
+ build/cmake_modules/Makefile
+ normalizers/Makefile
+ packages/Makefile
+ packages/apt/Makefile
+ packages/apt/env.sh
+ packages/ubuntu/Makefile
+ packages/rpm/Makefile
+ packages/rpm/centos/Makefile
+ packages/rpm/centos/groonga-normalizer-mysql.spec
+ packages/rpm/fedora/Makefile
+ packages/rpm/fedora/groonga-normalizer-mysql.spec
+ packages/yum/Makefile
+ packages/yum/env.sh
+ packages/source/Makefile
+ test/Makefile
+ doc/Makefile
+ doc/text/Makefile
+])
+
+AC_OUTPUT
+
+echo "$PACKAGE_NAME $PACKAGE_VERSION configuration:"
+echo "-----------------------"
+echo " Compiler: ${CC}"
+echo " CFLAGS: ${CFLAGS}"
+echo " CXXFLAGS: ${CXXFLAGS}"
+echo " Libraries: ${LIBS}"
+echo
+echo "groonga"
+echo " CFLAGS: ${GROONGA_CFLAGS}"
+echo " Libraries: ${GROONGA_LIBS}"
+echo " install directory: ${normalizers_pluginsdir}"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/data/travis/setup.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/data/travis/setup.sh
new file mode 100755
index 00000000000..a4752f82131
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/data/travis/setup.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -e
+
+if [ "$GROONGA_NORMALIZER_MYSQL_MASTER" = "yes" ]; then
+ if ! pkg-config --exists groonga; then
+ sudo apt-get install -qq -y -V libgroonga-dev
+ fi
+ git clone --depth 1 https://github.com/groonga/groonga-normalizer-mysql.git
+ cd groonga-normalizer-mysql
+ ./autogen.sh
+ ./configure CFLAGS="-O0 -g3" CXXFLAGS="-O0 -g3" --prefix=/usr
+ make -j$(grep '^processor' /proc/cpuinfo | wc -l) > /dev/null
+ sudo make install > /dev/null
+ cd ..
+else
+ sudo apt-get install -qq -y -V groonga-normalizer-mysql
+fi
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/Makefile.am
new file mode 100644
index 00000000000..771336d84a0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/Makefile.am
@@ -0,0 +1,18 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = \
+ text
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/Makefile.am
new file mode 100644
index 00000000000..52dbe4a8f0d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/Makefile.am
@@ -0,0 +1,19 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+docdir = $(datadir)/doc/$(PACKAGE)
+dist_doc_DATA = \
+ lgpl-2.0.txt
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/lgpl-2.0.txt b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/lgpl-2.0.txt
new file mode 100644
index 00000000000..5bc8fb2c8f7
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/doc/text/lgpl-2.0.txt
@@ -0,0 +1,481 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/gpg_uid b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/gpg_uid
new file mode 100644
index 00000000000..7c1a800ba92
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/gpg_uid
@@ -0,0 +1 @@
+45499429
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/groonga-normalizer-mysql.pc.in b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/groonga-normalizer-mysql.pc.in
new file mode 100644
index 00000000000..c1093445916
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/groonga-normalizer-mysql.pc.in
@@ -0,0 +1,5 @@
+plugin_name=normalizers/mysql
+
+Name: groonga-normalizer-mysql
+Description: A MySQL compatible normalizer plugin for groonga
+Version: @VERSION@
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/CMakeLists.txt
new file mode 100644
index 00000000000..ae290b66347
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301, USA
+
+set(NORMALIZERS_DIR "${GROONGA_PLUGINS_DIR}/normalizers")
+read_file_list(${CMAKE_CURRENT_SOURCE_DIR}/mysql_sources.am MYSQL_SOURCES)
+add_library(mysql_normalizer MODULE ${MYSQL_SOURCES})
+set_target_properties(mysql_normalizer PROPERTIES
+ PREFIX ""
+ OUTPUT_NAME "mysql")
+target_link_libraries(mysql_normalizer ${GROONGA_LIBRARIES})
+if(NOT MRN_GROONGA_BUNDLED)
+ install(TARGETS mysql_normalizer DESTINATION "${NORMALIZERS_DIR}")
+endif()
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/Makefile.am
new file mode 100644
index 00000000000..c5c131ce2af
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/Makefile.am
@@ -0,0 +1,69 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+EXTRA_DIST = \
+ CMakeLists.txt
+
+AM_CFLAGS = \
+ $(GROONGA_CFLAGS)
+
+AM_LDFLAGS = \
+ -avoid-version \
+ -module \
+ -no-undefined
+
+LIBS = \
+ $(GROONGA_LIBS)
+
+normalizers_plugins_LTLIBRARIES =
+normalizers_plugins_LTLIBRARIES += mysql.la
+
+include mysql_sources.am
+
+ensure-mysql-source-dir:
+ @if test -z "$(MYSQL_SOURCE_DIR)"; then \
+ echo "\$$(MYSQL_SOURCE_DIR) is missing"; \
+ exit 1; \
+ fi
+
+UPDATE_TABLES_TARGETS = \
+ update-general-ci-table \
+ update-unicode-ci-table \
+ update-unicode-ci-except-kana-ci-kana-with-voiced-sound-mark-table
+
+update-tables: $(UPDATE_TABLES_TARGETS)
+
+update-general-ci-table: ensure-mysql-source-dir
+ $(RUBY) \
+ $(top_srcdir)/tool/generate_utf8_table.rb \
+ $(MYSQL_SOURCE_DIR)/strings/ctype-utf8.c > \
+ $(srcdir)/mysql_general_ci_table.h
+
+update-unicode-ci-table: ensure-mysql-source-dir
+ $(RUBY) \
+ $(top_srcdir)/tool/generate_uca_table.rb \
+ $(MYSQL_SOURCE_DIR)/strings/ctype-uca.c > \
+ $(srcdir)/mysql_unicode_ci_table.h
+
+update-unicode-ci-except-kana-ci-kana-with-voiced-sound-mark-table: ensure-mysql-source-dir
+ $(RUBY) \
+ $(top_srcdir)/tool/generate_uca_table.rb \
+ --split-small-kana \
+ --split-kana-with-voiced-sound-mark \
+ --split-kana-with-semi-voiced-sound-mark \
+ --suffix _except_kana_ci_kana_with_voiced_sound_mark \
+ $(MYSQL_SOURCE_DIR)/strings/ctype-uca.c > \
+ $(srcdir)/mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql.c b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql.c
new file mode 100644
index 00000000000..94acfb16389
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql.c
@@ -0,0 +1,666 @@
+/* -*- c-basic-offset: 2 -*- */
+/*
+ Copyright(C) 2013-2014 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+*/
+
+#include <groonga/normalizer.h>
+#include <groonga/nfkc.h>
+
+#include <string.h>
+#include <stdio.h>
+
+#include "mysql_general_ci_table.h"
+#include "mysql_unicode_ci_table.h"
+#include "mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h"
+
+#ifdef __GNUC__
+# define GNUC_UNUSED __attribute__((__unused__))
+#else
+# define GNUC_UNUSED
+#endif
+
+#ifdef _MSC_VER
+# define inline _inline
+# define snprintf _snprintf
+#endif
+
+#define SNIPPET_BUFFER_SIZE 256
+
+typedef grn_bool (*normalizer_func)(grn_ctx *ctx,
+ const char *utf8,
+ int *character_length,
+ int rest_length,
+ uint32_t **normalize_table,
+ char *normalized,
+ unsigned int *normalized_characer_length,
+ unsigned int *normalized_length_in_bytes,
+ unsigned int *normalized_n_characters);
+
+static inline unsigned int
+unichar_to_utf8(uint32_t unichar, char *output)
+{
+ unsigned int n_bytes;
+
+ if (unichar < 0x80) {
+ output[0] = unichar;
+ n_bytes = 1;
+ } else if (unichar < 0x0800) {
+ output[0] = ((unichar >> 6) & 0x1f) | 0xc0;
+ output[1] = (unichar & 0x3f) | 0x80;
+ n_bytes = 2;
+ } else if (unichar < 0x10000) {
+ output[0] = (unichar >> 12) | 0xe0;
+ output[1] = ((unichar >> 6) & 0x3f) | 0x80;
+ output[2] = (unichar & 0x3f) | 0x80;
+ n_bytes = 3;
+ } else if (unichar < 0x200000) {
+ output[0] = (unichar >> 18) | 0xf0;
+ output[1] = ((unichar >> 12) & 0x3f) | 0x80;
+ output[2] = ((unichar >> 6) & 0x3f) | 0x80;
+ output[3] = (unichar & 0x3f) | 0x80;
+ n_bytes = 4;
+ } else if (unichar < 0x4000000) {
+ output[0] = (unichar >> 24) | 0xf8;
+ output[1] = ((unichar >> 18) & 0x3f) | 0x80;
+ output[2] = ((unichar >> 12) & 0x3f) | 0x80;
+ output[3] = ((unichar >> 6) & 0x3f) | 0x80;
+ output[4] = (unichar & 0x3f) | 0x80;
+ n_bytes = 5;
+ } else {
+ output[0] = (unichar >> 30) | 0xfc;
+ output[1] = ((unichar >> 24) & 0x3f) | 0x80;
+ output[2] = ((unichar >> 18) & 0x3f) | 0x80;
+ output[3] = ((unichar >> 12) & 0x3f) | 0x80;
+ output[4] = ((unichar >> 6) & 0x3f) | 0x80;
+ output[5] = (unichar & 0x3f) | 0x80;
+ n_bytes = 6;
+ }
+
+ return n_bytes;
+}
+
+static inline uint32_t
+utf8_to_unichar(const char *utf8, int byte_size)
+{
+ uint32_t unichar;
+ const unsigned char *bytes = (const unsigned char *)utf8;
+
+ switch (byte_size) {
+ case 1 :
+ unichar = bytes[0] & 0x7f;
+ break;
+ case 2 :
+ unichar = ((bytes[0] & 0x1f) << 6) + (bytes[1] & 0x3f);
+ break;
+ case 3 :
+ unichar =
+ ((bytes[0] & 0x0f) << 12) +
+ ((bytes[1] & 0x3f) << 6) +
+ ((bytes[2] & 0x3f));
+ break;
+ case 4 :
+ unichar =
+ ((bytes[0] & 0x07) << 18) +
+ ((bytes[1] & 0x3f) << 12) +
+ ((bytes[2] & 0x3f) << 6) +
+ ((bytes[3] & 0x3f));
+ break;
+ case 5 :
+ unichar =
+ ((bytes[0] & 0x03) << 24) +
+ ((bytes[1] & 0x3f) << 18) +
+ ((bytes[2] & 0x3f) << 12) +
+ ((bytes[3] & 0x3f) << 6) +
+ ((bytes[4] & 0x3f));
+ break;
+ case 6 :
+ unichar =
+ ((bytes[0] & 0x01) << 30) +
+ ((bytes[1] & 0x3f) << 24) +
+ ((bytes[2] & 0x3f) << 18) +
+ ((bytes[3] & 0x3f) << 12) +
+ ((bytes[4] & 0x3f) << 6) +
+ ((bytes[5] & 0x3f));
+ break;
+ default :
+ unichar = 0;
+ break;
+ }
+
+ return unichar;
+}
+
+static inline void
+decompose_character(const char *rest, int character_length,
+ int *page, uint32_t *low_code)
+{
+ switch (character_length) {
+ case 1 :
+ *page = 0x00;
+ *low_code = rest[0] & 0x7f;
+ break;
+ case 2 :
+ *page = (rest[0] & 0x1c) >> 2;
+ *low_code = ((rest[0] & 0x03) << 6) + (rest[1] & 0x3f);
+ break;
+ case 3 :
+ *page = ((rest[0] & 0x0f) << 4) + ((rest[1] & 0x3c) >> 2);
+ *low_code = ((rest[1] & 0x03) << 6) + (rest[2] & 0x3f);
+ break;
+ case 4 :
+ *page =
+ ((rest[0] & 0x07) << 10) +
+ ((rest[1] & 0x3f) << 4) +
+ ((rest[2] & 0x3c) >> 2);
+ *low_code = ((rest[1] & 0x03) << 6) + (rest[2] & 0x3f);
+ break;
+ default :
+ *page = -1;
+ *low_code = 0x00;
+ break;
+ }
+}
+
+static inline void
+normalize_character(const char *utf8, int character_length,
+ uint32_t **normalize_table,
+ char *normalized,
+ unsigned int *normalized_character_length,
+ unsigned int *normalized_length_in_bytes,
+ unsigned int *normalized_n_characters)
+{
+ int page;
+ uint32_t low_code;
+ decompose_character(utf8, character_length, &page, &low_code);
+ if ((0x00 <= page && page <= 0xff) && normalize_table[page]) {
+ uint32_t normalized_code;
+ unsigned int n_bytes;
+ normalized_code = normalize_table[page][low_code];
+ if (normalized_code == 0x00000) {
+ *normalized_character_length = 0;
+ } else {
+ n_bytes = unichar_to_utf8(normalized_code,
+ normalized + *normalized_length_in_bytes);
+ *normalized_character_length = n_bytes;
+ *normalized_length_in_bytes += n_bytes;
+ (*normalized_n_characters)++;
+ }
+ } else {
+ int i;
+ for (i = 0; i < character_length; i++) {
+ normalized[*normalized_length_in_bytes + i] = utf8[i];
+ }
+ *normalized_character_length = character_length;
+ *normalized_length_in_bytes += character_length;
+ (*normalized_n_characters)++;
+ }
+}
+
+static void
+sized_buffer_append(char *buffer,
+ unsigned int buffer_length,
+ unsigned int *buffer_rest_length,
+ const char *string)
+{
+ size_t string_length;
+
+ string_length = strlen(string);
+ if (string_length >= *buffer_rest_length) {
+ return;
+ }
+
+ strncat(buffer, string, buffer_length);
+ *buffer_rest_length -= string_length;
+}
+
+static void
+sized_buffer_dump_string(char *buffer,
+ unsigned int buffer_length,
+ unsigned int *buffer_rest_length,
+ const char *string, unsigned int string_length)
+{
+ const unsigned char *bytes;
+ unsigned int i;
+
+ bytes = (const unsigned char *)string;
+ for (i = 0; i < string_length; i++) {
+ unsigned char byte = bytes[i];
+#define FORMATTED_BYTE_BUFFER_SIZE 5 /* "0xFF\0" */
+ char formatted_byte[FORMATTED_BYTE_BUFFER_SIZE];
+ if (i > 0) {
+ sized_buffer_append(buffer, buffer_length, buffer_rest_length,
+ " ");
+ }
+ if (byte == 0) {
+ strncpy(formatted_byte, "0x00", FORMATTED_BYTE_BUFFER_SIZE);
+ } else {
+ snprintf(formatted_byte, FORMATTED_BYTE_BUFFER_SIZE, "%#04x", byte);
+ }
+ sized_buffer_append(buffer, buffer_length, buffer_rest_length,
+ formatted_byte);
+#undef FORMATTED_BYTE_BUFFER_SIZE
+ }
+}
+
+static const char *
+snippet(const char *string, unsigned int length, unsigned int target_byte,
+ char *buffer, unsigned int buffer_length)
+{
+ const char *elision_mark = "...";
+ unsigned int max_window_length = 12;
+ unsigned int window_length;
+ unsigned int buffer_rest_length = buffer_length - 1;
+
+ buffer[0] = '\0';
+
+ if (target_byte > 0) {
+ sized_buffer_append(buffer, buffer_length, &buffer_rest_length,
+ elision_mark);
+ }
+
+ sized_buffer_append(buffer, buffer_length, &buffer_rest_length, "<");
+ if (target_byte + max_window_length > length) {
+ window_length = length - target_byte;
+ } else {
+ window_length = max_window_length;
+ }
+ sized_buffer_dump_string(buffer, buffer_length, &buffer_rest_length,
+ string + target_byte, window_length);
+ sized_buffer_append(buffer, buffer_length, &buffer_rest_length,
+ ">");
+
+ if (target_byte + window_length < length) {
+ sized_buffer_append(buffer, buffer_length, &buffer_rest_length,
+ elision_mark);
+ }
+
+ return buffer;
+}
+
+static void
+normalize(grn_ctx *ctx, grn_obj *string,
+ const char *normalizer_type_label,
+ uint32_t **normalize_table,
+ normalizer_func custom_normalizer)
+{
+ const char *original, *rest;
+ unsigned int original_length_in_bytes, rest_length;
+ char *normalized;
+ unsigned int normalized_length_in_bytes = 0;
+ unsigned int normalized_n_characters = 0;
+ unsigned char *types = NULL;
+ unsigned char *current_type = NULL;
+ short *checks = NULL;
+ short *current_check = NULL;
+ grn_encoding encoding;
+ int flags;
+ grn_bool remove_blank_p;
+
+ encoding = grn_string_get_encoding(ctx, string);
+ flags = grn_string_get_flags(ctx, string);
+ remove_blank_p = flags & GRN_STRING_REMOVE_BLANK;
+ grn_string_get_original(ctx, string, &original, &original_length_in_bytes);
+ {
+ unsigned int max_normalized_length_in_bytes =
+ original_length_in_bytes + 1;
+ normalized = GRN_PLUGIN_MALLOC(ctx, max_normalized_length_in_bytes);
+ }
+ if (flags & GRN_STRING_WITH_TYPES) {
+ unsigned int max_normalized_n_characters = original_length_in_bytes + 1;
+ types = GRN_PLUGIN_MALLOC(ctx, max_normalized_n_characters);
+ current_type = types;
+ }
+ if (flags & GRN_STRING_WITH_CHECKS) {
+ unsigned int max_checks_size = sizeof(short) * original_length_in_bytes + 1;
+ checks = GRN_PLUGIN_MALLOC(ctx, max_checks_size);
+ current_check = checks;
+ current_check[0] = 0;
+ }
+ rest = original;
+ rest_length = original_length_in_bytes;
+ while (rest_length > 0) {
+ int character_length;
+
+ character_length = grn_plugin_charlen(ctx, rest, rest_length, encoding);
+ if (character_length == 0) {
+ break;
+ }
+
+ if (remove_blank_p && character_length == 1 && rest[0] == ' ') {
+ if (current_type > types) {
+ current_type[-1] |= GRN_CHAR_BLANK;
+ }
+ if (current_check) {
+ current_check[0]++;
+ }
+ } else {
+ grn_bool custom_normalized = GRN_FALSE;
+ unsigned int normalized_character_length;
+ if (custom_normalizer) {
+ custom_normalized = custom_normalizer(ctx,
+ rest,
+ &character_length,
+ rest_length - character_length,
+ normalize_table,
+ normalized,
+ &normalized_character_length,
+ &normalized_length_in_bytes,
+ &normalized_n_characters);
+ }
+ if (!custom_normalized) {
+ normalize_character(rest, character_length, normalize_table,
+ normalized,
+ &normalized_character_length,
+ &normalized_length_in_bytes,
+ &normalized_n_characters);
+ }
+ if (current_type && normalized_character_length > 0) {
+ char *current_normalized;
+ current_normalized =
+ normalized + normalized_length_in_bytes - normalized_character_length;
+ current_type[0] =
+ grn_nfkc_char_type((unsigned char *)current_normalized);
+ current_type++;
+ }
+ if (current_check) {
+ current_check[0] += character_length;
+ if (normalized_character_length > 0) {
+ unsigned int i;
+ current_check++;
+ for (i = 1; i < normalized_character_length; i++) {
+ current_check[0] = 0;
+ current_check++;
+ }
+ current_check[0] = 0;
+ }
+ }
+ }
+
+ rest += character_length;
+ rest_length -= character_length;
+ }
+ if (current_type) {
+ current_type[0] = GRN_CHAR_NULL;
+ }
+ normalized[normalized_length_in_bytes] = '\0';
+
+ if (rest_length > 0) {
+ char buffer[SNIPPET_BUFFER_SIZE];
+ GRN_PLUGIN_LOG(ctx, GRN_LOG_DEBUG,
+ "[normalizer][%s] failed to normalize at %u byte: %s",
+ normalizer_type_label,
+ original_length_in_bytes - rest_length,
+ snippet(original,
+ original_length_in_bytes,
+ original_length_in_bytes - rest_length,
+ buffer,
+ SNIPPET_BUFFER_SIZE));
+ }
+ grn_string_set_normalized(ctx,
+ string,
+ normalized,
+ normalized_length_in_bytes,
+ normalized_n_characters);
+ grn_string_set_types(ctx, string, types);
+ grn_string_set_checks(ctx, string, checks);
+}
+
+static grn_obj *
+mysql_general_ci_next(GNUC_UNUSED grn_ctx *ctx,
+ GNUC_UNUSED int nargs,
+ grn_obj **args,
+ GNUC_UNUSED grn_user_data *user_data)
+{
+ grn_obj *string = args[0];
+ grn_encoding encoding;
+ const char *normalizer_type_label = "mysql-general-ci";
+
+ encoding = grn_string_get_encoding(ctx, string);
+ if (encoding != GRN_ENC_UTF8) {
+ GRN_PLUGIN_ERROR(ctx,
+ GRN_FUNCTION_NOT_IMPLEMENTED,
+ "[normalizer][%s] "
+ "UTF-8 encoding is only supported: %s",
+ normalizer_type_label,
+ grn_encoding_to_string(encoding));
+ return NULL;
+ }
+ normalize(ctx, string, normalizer_type_label, general_ci_table, NULL);
+ return NULL;
+}
+
+static grn_obj *
+mysql_unicode_ci_next(GNUC_UNUSED grn_ctx *ctx,
+ GNUC_UNUSED int nargs,
+ grn_obj **args,
+ GNUC_UNUSED grn_user_data *user_data)
+{
+ grn_obj *string = args[0];
+ grn_encoding encoding;
+ const char *normalizer_type_label = "mysql-unicode-ci";
+
+ encoding = grn_string_get_encoding(ctx, string);
+ if (encoding != GRN_ENC_UTF8) {
+ GRN_PLUGIN_ERROR(ctx,
+ GRN_FUNCTION_NOT_IMPLEMENTED,
+ "[normalizer][%s] "
+ "UTF-8 encoding is only supported: %s",
+ normalizer_type_label,
+ grn_encoding_to_string(encoding));
+ return NULL;
+ }
+ normalize(ctx, string, normalizer_type_label, unicode_ci_table, NULL);
+ return NULL;
+}
+
+#define HALFWIDTH_KATAKANA_LETTER_KA 0xff76
+#define HALFWIDTH_KATAKANA_LETTER_KI 0xff77
+#define HALFWIDTH_KATAKANA_LETTER_KU 0xff78
+#define HALFWIDTH_KATAKANA_LETTER_KE 0xff79
+#define HALFWIDTH_KATAKANA_LETTER_KO 0xff7a
+
+#define HALFWIDTH_KATAKANA_LETTER_SA 0xff7b
+#define HALFWIDTH_KATAKANA_LETTER_SI 0xff7c
+#define HALFWIDTH_KATAKANA_LETTER_SU 0xff7d
+#define HALFWIDTH_KATAKANA_LETTER_SE 0xff7e
+#define HALFWIDTH_KATAKANA_LETTER_SO 0xff7f
+
+#define HALFWIDTH_KATAKANA_LETTER_TA 0xff80
+#define HALFWIDTH_KATAKANA_LETTER_TI 0xff81
+#define HALFWIDTH_KATAKANA_LETTER_TU 0xff82
+#define HALFWIDTH_KATAKANA_LETTER_TE 0xff83
+#define HALFWIDTH_KATAKANA_LETTER_TO 0xff84
+
+#define HALFWIDTH_KATAKANA_LETTER_HA 0xff8a
+#define HALFWIDTH_KATAKANA_LETTER_HI 0xff8b
+#define HALFWIDTH_KATAKANA_LETTER_HU 0xff8c
+#define HALFWIDTH_KATAKANA_LETTER_HE 0xff8d
+#define HALFWIDTH_KATAKANA_LETTER_HO 0xff8e
+
+#define HALFWIDTH_KATAKANA_VOICED_SOUND_MARK 0xff9e
+#define HALFWIDTH_KATAKANA_SEMI_VOICED_SOUND_MARK 0xff9f
+
+#define HIRAGANA_LETTER_KA 0x304b
+#define HIRAGANA_VOICED_SOUND_MARK_OFFSET 1
+#define HIRAGANA_VOICED_SOUND_MARK_GAP 2
+
+#define HIRAGANA_LETTER_HA 0x306f
+#define HIRAGANA_HA_LINE_BA_OFFSET 1
+#define HIRAGANA_HA_LINE_PA_OFFSET 2
+#define HIRAGANA_HA_LINE_GAP 3
+
+static grn_bool
+normalize_halfwidth_katakana_with_voiced_sound_mark(
+ grn_ctx *ctx,
+ const char *utf8,
+ int *character_length,
+ int rest_length,
+ GNUC_UNUSED uint32_t **normalize_table,
+ char *normalized,
+ unsigned int *normalized_character_length,
+ unsigned int *normalized_length_in_bytes,
+ unsigned int *normalized_n_characters)
+{
+ grn_bool custom_normalized = GRN_FALSE;
+ grn_bool is_voiced_sound_markable_halfwidth_katakana = GRN_FALSE;
+ grn_bool is_semi_voiced_sound_markable_halfwidth_katakana = GRN_FALSE;
+ grn_bool is_ha_line = GRN_FALSE;
+ uint32_t unichar;
+
+ if (*character_length != 3) {
+ return GRN_FALSE;
+ }
+ if (rest_length < 3) {
+ return GRN_FALSE;
+ }
+
+ unichar = utf8_to_unichar(utf8, *character_length);
+ if (HALFWIDTH_KATAKANA_LETTER_KA <= unichar &&
+ unichar <= HALFWIDTH_KATAKANA_LETTER_TO) {
+ is_voiced_sound_markable_halfwidth_katakana = GRN_TRUE;
+ } else if (HALFWIDTH_KATAKANA_LETTER_HA <= unichar &&
+ unichar <= HALFWIDTH_KATAKANA_LETTER_HO) {
+ is_voiced_sound_markable_halfwidth_katakana = GRN_TRUE;
+ is_semi_voiced_sound_markable_halfwidth_katakana = GRN_TRUE;
+ is_ha_line = GRN_TRUE;
+ }
+
+ if (!is_voiced_sound_markable_halfwidth_katakana &&
+ !is_semi_voiced_sound_markable_halfwidth_katakana) {
+ return GRN_FALSE;
+ }
+
+ {
+ int next_character_length;
+ uint32_t next_unichar;
+ next_character_length = grn_plugin_charlen(ctx,
+ utf8 + *character_length,
+ rest_length,
+ GRN_ENC_UTF8);
+ if (next_character_length != 3) {
+ return GRN_FALSE;
+ }
+ next_unichar = utf8_to_unichar(utf8 + *character_length,
+ next_character_length);
+ if (next_unichar == HALFWIDTH_KATAKANA_VOICED_SOUND_MARK) {
+ if (is_voiced_sound_markable_halfwidth_katakana) {
+ unsigned int n_bytes;
+ if (is_ha_line) {
+ n_bytes = unichar_to_utf8(HIRAGANA_LETTER_HA +
+ HIRAGANA_HA_LINE_BA_OFFSET +
+ ((unichar - HALFWIDTH_KATAKANA_LETTER_HA) *
+ HIRAGANA_HA_LINE_GAP),
+ normalized + *normalized_length_in_bytes);
+ } else {
+ int small_tu_offset = 0;
+ if (HALFWIDTH_KATAKANA_LETTER_TU <= unichar &&
+ unichar <= HALFWIDTH_KATAKANA_LETTER_TO) {
+ small_tu_offset = 1;
+ }
+ n_bytes = unichar_to_utf8(HIRAGANA_LETTER_KA +
+ HIRAGANA_VOICED_SOUND_MARK_OFFSET +
+ small_tu_offset +
+ ((unichar - HALFWIDTH_KATAKANA_LETTER_KA) *
+ HIRAGANA_VOICED_SOUND_MARK_GAP),
+ normalized + *normalized_length_in_bytes);
+ }
+ *character_length += next_character_length;
+ *normalized_character_length = n_bytes;
+ *normalized_length_in_bytes += n_bytes;
+ (*normalized_n_characters)++;
+ custom_normalized = GRN_TRUE;
+ }
+ } else if (next_unichar == HALFWIDTH_KATAKANA_SEMI_VOICED_SOUND_MARK) {
+ if (is_semi_voiced_sound_markable_halfwidth_katakana) {
+ unsigned int n_bytes;
+ n_bytes = unichar_to_utf8(HIRAGANA_LETTER_HA +
+ HIRAGANA_HA_LINE_PA_OFFSET +
+ ((unichar - HALFWIDTH_KATAKANA_LETTER_HA) *
+ HIRAGANA_HA_LINE_GAP),
+ normalized + *normalized_length_in_bytes);
+ *character_length += next_character_length;
+ *normalized_character_length = n_bytes;
+ *normalized_length_in_bytes += n_bytes;
+ (*normalized_n_characters)++;
+ custom_normalized = GRN_TRUE;
+ }
+ }
+ }
+
+ return custom_normalized;
+}
+
+static grn_obj *
+mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_next(
+ GNUC_UNUSED grn_ctx *ctx,
+ GNUC_UNUSED int nargs,
+ grn_obj **args,
+ GNUC_UNUSED grn_user_data *user_data)
+{
+ grn_obj *string = args[0];
+ grn_encoding encoding;
+ const char *normalizer_type_label =
+ "mysql-unicode-ci-except-kana-ci-kana-with-voiced-sound-mark";
+
+ encoding = grn_string_get_encoding(ctx, string);
+ if (encoding != GRN_ENC_UTF8) {
+ GRN_PLUGIN_ERROR(ctx,
+ GRN_FUNCTION_NOT_IMPLEMENTED,
+ "[normalizer][%s] "
+ "UTF-8 encoding is only supported: %s",
+ normalizer_type_label,
+ grn_encoding_to_string(encoding));
+ return NULL;
+ }
+ normalize(ctx, string,
+ normalizer_type_label,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table,
+ normalize_halfwidth_katakana_with_voiced_sound_mark);
+ return NULL;
+}
+
+grn_rc
+GRN_PLUGIN_INIT(grn_ctx *ctx)
+{
+ return ctx->rc;
+}
+
+grn_rc
+GRN_PLUGIN_REGISTER(grn_ctx *ctx)
+{
+ grn_normalizer_register(ctx, "NormalizerMySQLGeneralCI", -1,
+ NULL, mysql_general_ci_next, NULL);
+ grn_normalizer_register(ctx, "NormalizerMySQLUnicodeCI", -1,
+ NULL, mysql_unicode_ci_next, NULL);
+ grn_normalizer_register(ctx,
+ "NormalizerMySQLUnicodeCI"
+ "Except"
+ "KanaCI"
+ "KanaWithVoicedSoundMark",
+ -1,
+ NULL,
+ mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_next,
+ NULL);
+ return GRN_SUCCESS;
+}
+
+grn_rc
+GRN_PLUGIN_FIN(GNUC_UNUSED grn_ctx *ctx)
+{
+ return GRN_SUCCESS;
+}
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_general_ci_table.h b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_general_ci_table.h
new file mode 100644
index 00000000000..15ed558e2dc
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_general_ci_table.h
@@ -0,0 +1,565 @@
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ This file uses normalization table defined in
+ mysql-5.5.29/strings/ctype-utf8.c.
+ The following is the header of the file:
+
+ Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ UTF8 according RFC 2279
+ Written by Alexander Barkov <bar@udm.net>
+*/
+
+#ifndef MYSQL_UTF8_H
+#define MYSQL_UTF8_H
+
+#include <stdint.h>
+
+static uint32_t general_ci_page_00[] = {
+ 0x00000, 0x00001, 0x00002, 0x00003, 0x00004, 0x00005, 0x00006, 0x00007,
+ 0x00008, 0x00009, 0x0000a, 0x0000b, 0x0000c, 0x0000d, 0x0000e, 0x0000f,
+ 0x00010, 0x00011, 0x00012, 0x00013, 0x00014, 0x00015, 0x00016, 0x00017,
+ 0x00018, 0x00019, 0x0001a, 0x0001b, 0x0001c, 0x0001d, 0x0001e, 0x0001f,
+ 0x00020, 0x00021, 0x00022, 0x00023, 0x00024, 0x00025, 0x00026, 0x00027,
+ 0x00028, 0x00029, 0x0002a, 0x0002b, 0x0002c, 0x0002d, 0x0002e, 0x0002f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0003a, 0x0003b, 0x0003c, 0x0003d, 0x0003e, 0x0003f,
+ 0x00040, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0005b, 0x0005c, 0x0005d, 0x0005e, 0x0005f,
+ 0x00060, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0007b, 0x0007c, 0x0007d, 0x0007e, 0x0007f,
+ 0x00080, 0x00081, 0x00082, 0x00083, 0x00084, 0x00085, 0x00086, 0x00087,
+ 0x00088, 0x00089, 0x0008a, 0x0008b, 0x0008c, 0x0008d, 0x0008e, 0x0008f,
+ 0x00090, 0x00091, 0x00092, 0x00093, 0x00094, 0x00095, 0x00096, 0x00097,
+ 0x00098, 0x00099, 0x0009a, 0x0009b, 0x0009c, 0x0009d, 0x0009e, 0x0009f,
+ 0x000a0, 0x000a1, 0x000a2, 0x000a3, 0x000a4, 0x000a5, 0x000a6, 0x000a7,
+ 0x000a8, 0x000a9, 0x000aa, 0x000ab, 0x000ac, 0x000ad, 0x000ae, 0x000af,
+ 0x000b0, 0x000b1, 0x000b2, 0x000b3, 0x000b4, 0x0039c, 0x000b6, 0x000b7,
+ 0x000b8, 0x000b9, 0x000ba, 0x000bb, 0x000bc, 0x000bd, 0x000be, 0x000bf,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000d7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x00053,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000f7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x00059
+};
+
+static uint32_t general_ci_page_01[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00043, 0x00043,
+ 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00044, 0x00044,
+ 0x00110, 0x00110, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00047, 0x00047, 0x00047, 0x00047,
+ 0x00047, 0x00047, 0x00047, 0x00047, 0x00048, 0x00048, 0x00126, 0x00126,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x00049, 0x00049, 0x00132, 0x00132, 0x0004a, 0x0004a, 0x0004b, 0x0004b,
+ 0x00138, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0013f,
+ 0x0013f, 0x00141, 0x00141, 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x00149, 0x0014a, 0x0014a, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00152, 0x00152, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00052, 0x00052, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00166, 0x00166,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00057, 0x00057, 0x00059, 0x00059,
+ 0x00059, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00053,
+ 0x00180, 0x00181, 0x00182, 0x00182, 0x00184, 0x00184, 0x00186, 0x00187,
+ 0x00187, 0x00189, 0x0018a, 0x0018b, 0x0018b, 0x0018d, 0x0018e, 0x0018f,
+ 0x00190, 0x00191, 0x00191, 0x00193, 0x00194, 0x001f6, 0x00196, 0x00197,
+ 0x00198, 0x00198, 0x0019a, 0x0019b, 0x0019c, 0x0019d, 0x0019e, 0x0019f,
+ 0x0004f, 0x0004f, 0x001a2, 0x001a2, 0x001a4, 0x001a4, 0x001a6, 0x001a7,
+ 0x001a7, 0x001a9, 0x001aa, 0x001ab, 0x001ac, 0x001ac, 0x001ae, 0x00055,
+ 0x00055, 0x001b1, 0x001b2, 0x001b3, 0x001b3, 0x001b5, 0x001b5, 0x001b7,
+ 0x001b8, 0x001b8, 0x001ba, 0x001bb, 0x001bc, 0x001bc, 0x001be, 0x001f7,
+ 0x001c0, 0x001c1, 0x001c2, 0x001c3, 0x001c4, 0x001c4, 0x001c4, 0x001c7,
+ 0x001c7, 0x001c7, 0x001ca, 0x001ca, 0x001ca, 0x00041, 0x00041, 0x00049,
+ 0x00049, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x0018e, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x000c6, 0x000c6, 0x001e4, 0x001e4, 0x00047, 0x00047,
+ 0x0004b, 0x0004b, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x001b7, 0x001b7,
+ 0x0004a, 0x001f1, 0x001f1, 0x001f1, 0x00047, 0x00047, 0x001f6, 0x001f7,
+ 0x0004e, 0x0004e, 0x00041, 0x00041, 0x000c6, 0x000c6, 0x000d8, 0x000d8
+};
+
+static uint32_t general_ci_page_02[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x0021c, 0x0021c, 0x00048, 0x00048,
+ 0x00220, 0x00221, 0x00222, 0x00222, 0x00224, 0x00224, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00059, 0x00059, 0x00234, 0x00235, 0x00236, 0x00237,
+ 0x00238, 0x00239, 0x0023a, 0x0023b, 0x0023c, 0x0023d, 0x0023e, 0x0023f,
+ 0x00240, 0x00241, 0x00242, 0x00243, 0x00244, 0x00245, 0x00246, 0x00247,
+ 0x00248, 0x00249, 0x0024a, 0x0024b, 0x0024c, 0x0024d, 0x0024e, 0x0024f,
+ 0x00250, 0x00251, 0x00252, 0x00181, 0x00186, 0x00255, 0x00189, 0x0018a,
+ 0x00258, 0x0018f, 0x0025a, 0x00190, 0x0025c, 0x0025d, 0x0025e, 0x0025f,
+ 0x00193, 0x00261, 0x00262, 0x00194, 0x00264, 0x00265, 0x00266, 0x00267,
+ 0x00197, 0x00196, 0x0026a, 0x0026b, 0x0026c, 0x0026d, 0x0026e, 0x0019c,
+ 0x00270, 0x00271, 0x0019d, 0x00273, 0x00274, 0x0019f, 0x00276, 0x00277,
+ 0x00278, 0x00279, 0x0027a, 0x0027b, 0x0027c, 0x0027d, 0x0027e, 0x0027f,
+ 0x001a6, 0x00281, 0x00282, 0x001a9, 0x00284, 0x00285, 0x00286, 0x00287,
+ 0x001ae, 0x00289, 0x001b1, 0x001b2, 0x0028c, 0x0028d, 0x0028e, 0x0028f,
+ 0x00290, 0x00291, 0x001b7, 0x00293, 0x00294, 0x00295, 0x00296, 0x00297,
+ 0x00298, 0x00299, 0x0029a, 0x0029b, 0x0029c, 0x0029d, 0x0029e, 0x0029f,
+ 0x002a0, 0x002a1, 0x002a2, 0x002a3, 0x002a4, 0x002a5, 0x002a6, 0x002a7,
+ 0x002a8, 0x002a9, 0x002aa, 0x002ab, 0x002ac, 0x002ad, 0x002ae, 0x002af,
+ 0x002b0, 0x002b1, 0x002b2, 0x002b3, 0x002b4, 0x002b5, 0x002b6, 0x002b7,
+ 0x002b8, 0x002b9, 0x002ba, 0x002bb, 0x002bc, 0x002bd, 0x002be, 0x002bf,
+ 0x002c0, 0x002c1, 0x002c2, 0x002c3, 0x002c4, 0x002c5, 0x002c6, 0x002c7,
+ 0x002c8, 0x002c9, 0x002ca, 0x002cb, 0x002cc, 0x002cd, 0x002ce, 0x002cf,
+ 0x002d0, 0x002d1, 0x002d2, 0x002d3, 0x002d4, 0x002d5, 0x002d6, 0x002d7,
+ 0x002d8, 0x002d9, 0x002da, 0x002db, 0x002dc, 0x002dd, 0x002de, 0x002df,
+ 0x002e0, 0x002e1, 0x002e2, 0x002e3, 0x002e4, 0x002e5, 0x002e6, 0x002e7,
+ 0x002e8, 0x002e9, 0x002ea, 0x002eb, 0x002ec, 0x002ed, 0x002ee, 0x002ef,
+ 0x002f0, 0x002f1, 0x002f2, 0x002f3, 0x002f4, 0x002f5, 0x002f6, 0x002f7,
+ 0x002f8, 0x002f9, 0x002fa, 0x002fb, 0x002fc, 0x002fd, 0x002fe, 0x002ff
+};
+
+static uint32_t general_ci_page_03[] = {
+ 0x00300, 0x00301, 0x00302, 0x00303, 0x00304, 0x00305, 0x00306, 0x00307,
+ 0x00308, 0x00309, 0x0030a, 0x0030b, 0x0030c, 0x0030d, 0x0030e, 0x0030f,
+ 0x00310, 0x00311, 0x00312, 0x00313, 0x00314, 0x00315, 0x00316, 0x00317,
+ 0x00318, 0x00319, 0x0031a, 0x0031b, 0x0031c, 0x0031d, 0x0031e, 0x0031f,
+ 0x00320, 0x00321, 0x00322, 0x00323, 0x00324, 0x00325, 0x00326, 0x00327,
+ 0x00328, 0x00329, 0x0032a, 0x0032b, 0x0032c, 0x0032d, 0x0032e, 0x0032f,
+ 0x00330, 0x00331, 0x00332, 0x00333, 0x00334, 0x00335, 0x00336, 0x00337,
+ 0x00338, 0x00339, 0x0033a, 0x0033b, 0x0033c, 0x0033d, 0x0033e, 0x0033f,
+ 0x00340, 0x00341, 0x00342, 0x00343, 0x00344, 0x00399, 0x00346, 0x00347,
+ 0x00348, 0x00349, 0x0034a, 0x0034b, 0x0034c, 0x0034d, 0x0034e, 0x0034f,
+ 0x00350, 0x00351, 0x00352, 0x00353, 0x00354, 0x00355, 0x00356, 0x00357,
+ 0x00358, 0x00359, 0x0035a, 0x0035b, 0x0035c, 0x0035d, 0x0035e, 0x0035f,
+ 0x00360, 0x00361, 0x00362, 0x00363, 0x00364, 0x00365, 0x00366, 0x00367,
+ 0x00368, 0x00369, 0x0036a, 0x0036b, 0x0036c, 0x0036d, 0x0036e, 0x0036f,
+ 0x00370, 0x00371, 0x00372, 0x00373, 0x00374, 0x00375, 0x00376, 0x00377,
+ 0x00378, 0x00379, 0x0037a, 0x0037b, 0x0037c, 0x0037d, 0x0037e, 0x0037f,
+ 0x00380, 0x00381, 0x00382, 0x00383, 0x00384, 0x00385, 0x00391, 0x00387,
+ 0x00395, 0x00397, 0x00399, 0x0038b, 0x0039f, 0x0038d, 0x003a5, 0x003a9,
+ 0x00399, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a2, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x00391, 0x00395, 0x00397, 0x00399,
+ 0x003a5, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a3, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x0039f, 0x003a5, 0x003a9, 0x003cf,
+ 0x00392, 0x00398, 0x003d2, 0x003d2, 0x003d2, 0x003a6, 0x003a0, 0x003d7,
+ 0x003d8, 0x003d9, 0x003da, 0x003da, 0x003dc, 0x003dc, 0x003de, 0x003de,
+ 0x003e0, 0x003e0, 0x003e2, 0x003e2, 0x003e4, 0x003e4, 0x003e6, 0x003e6,
+ 0x003e8, 0x003e8, 0x003ea, 0x003ea, 0x003ec, 0x003ec, 0x003ee, 0x003ee,
+ 0x0039a, 0x003a1, 0x003a3, 0x003f3, 0x003f4, 0x003f5, 0x003f6, 0x003f7,
+ 0x003f8, 0x003f9, 0x003fa, 0x003fb, 0x003fc, 0x003fd, 0x003fe, 0x003ff
+};
+
+static uint32_t general_ci_page_04[] = {
+ 0x00415, 0x00415, 0x00402, 0x00413, 0x00404, 0x00405, 0x00406, 0x00406,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0041a, 0x00418, 0x00423, 0x0040f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00415, 0x00416, 0x00417,
+ 0x00418, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00415, 0x00416, 0x00417,
+ 0x00418, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00415, 0x00415, 0x00402, 0x00413, 0x00404, 0x00405, 0x00406, 0x00406,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0041a, 0x00418, 0x00423, 0x0040f,
+ 0x00460, 0x00460, 0x00462, 0x00462, 0x00464, 0x00464, 0x00466, 0x00466,
+ 0x00468, 0x00468, 0x0046a, 0x0046a, 0x0046c, 0x0046c, 0x0046e, 0x0046e,
+ 0x00470, 0x00470, 0x00472, 0x00472, 0x00474, 0x00474, 0x00474, 0x00474,
+ 0x00478, 0x00478, 0x0047a, 0x0047a, 0x0047c, 0x0047c, 0x0047e, 0x0047e,
+ 0x00480, 0x00480, 0x00482, 0x00483, 0x00484, 0x00485, 0x00486, 0x00487,
+ 0x00488, 0x00489, 0x0048a, 0x0048b, 0x0048c, 0x0048c, 0x0048e, 0x0048e,
+ 0x00490, 0x00490, 0x00492, 0x00492, 0x00494, 0x00494, 0x00496, 0x00496,
+ 0x00498, 0x00498, 0x0049a, 0x0049a, 0x0049c, 0x0049c, 0x0049e, 0x0049e,
+ 0x004a0, 0x004a0, 0x004a2, 0x004a2, 0x004a4, 0x004a4, 0x004a6, 0x004a6,
+ 0x004a8, 0x004a8, 0x004aa, 0x004aa, 0x004ac, 0x004ac, 0x004ae, 0x004ae,
+ 0x004b0, 0x004b0, 0x004b2, 0x004b2, 0x004b4, 0x004b4, 0x004b6, 0x004b6,
+ 0x004b8, 0x004b8, 0x004ba, 0x004ba, 0x004bc, 0x004bc, 0x004be, 0x004be,
+ 0x004c0, 0x00416, 0x00416, 0x004c3, 0x004c3, 0x004c5, 0x004c6, 0x004c7,
+ 0x004c7, 0x004c9, 0x004ca, 0x004cb, 0x004cb, 0x004cd, 0x004ce, 0x004cf,
+ 0x00410, 0x00410, 0x00410, 0x00410, 0x004d4, 0x004d4, 0x00415, 0x00415,
+ 0x004d8, 0x004d8, 0x004d8, 0x004d8, 0x00416, 0x00416, 0x00417, 0x00417,
+ 0x004e0, 0x004e0, 0x00418, 0x00418, 0x00418, 0x00418, 0x0041e, 0x0041e,
+ 0x004e8, 0x004e8, 0x004e8, 0x004e8, 0x0042d, 0x0042d, 0x00423, 0x00423,
+ 0x00423, 0x00423, 0x00423, 0x00423, 0x00427, 0x00427, 0x004f6, 0x004f7,
+ 0x0042b, 0x0042b, 0x004fa, 0x004fb, 0x004fc, 0x004fd, 0x004fe, 0x004ff
+};
+
+static uint32_t general_ci_page_05[] = {
+ 0x00500, 0x00501, 0x00502, 0x00503, 0x00504, 0x00505, 0x00506, 0x00507,
+ 0x00508, 0x00509, 0x0050a, 0x0050b, 0x0050c, 0x0050d, 0x0050e, 0x0050f,
+ 0x00510, 0x00511, 0x00512, 0x00513, 0x00514, 0x00515, 0x00516, 0x00517,
+ 0x00518, 0x00519, 0x0051a, 0x0051b, 0x0051c, 0x0051d, 0x0051e, 0x0051f,
+ 0x00520, 0x00521, 0x00522, 0x00523, 0x00524, 0x00525, 0x00526, 0x00527,
+ 0x00528, 0x00529, 0x0052a, 0x0052b, 0x0052c, 0x0052d, 0x0052e, 0x0052f,
+ 0x00530, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00557,
+ 0x00558, 0x00559, 0x0055a, 0x0055b, 0x0055c, 0x0055d, 0x0055e, 0x0055f,
+ 0x00560, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00587,
+ 0x00588, 0x00589, 0x0058a, 0x0058b, 0x0058c, 0x0058d, 0x0058e, 0x0058f,
+ 0x00590, 0x00591, 0x00592, 0x00593, 0x00594, 0x00595, 0x00596, 0x00597,
+ 0x00598, 0x00599, 0x0059a, 0x0059b, 0x0059c, 0x0059d, 0x0059e, 0x0059f,
+ 0x005a0, 0x005a1, 0x005a2, 0x005a3, 0x005a4, 0x005a5, 0x005a6, 0x005a7,
+ 0x005a8, 0x005a9, 0x005aa, 0x005ab, 0x005ac, 0x005ad, 0x005ae, 0x005af,
+ 0x005b0, 0x005b1, 0x005b2, 0x005b3, 0x005b4, 0x005b5, 0x005b6, 0x005b7,
+ 0x005b8, 0x005b9, 0x005ba, 0x005bb, 0x005bc, 0x005bd, 0x005be, 0x005bf,
+ 0x005c0, 0x005c1, 0x005c2, 0x005c3, 0x005c4, 0x005c5, 0x005c6, 0x005c7,
+ 0x005c8, 0x005c9, 0x005ca, 0x005cb, 0x005cc, 0x005cd, 0x005ce, 0x005cf,
+ 0x005d0, 0x005d1, 0x005d2, 0x005d3, 0x005d4, 0x005d5, 0x005d6, 0x005d7,
+ 0x005d8, 0x005d9, 0x005da, 0x005db, 0x005dc, 0x005dd, 0x005de, 0x005df,
+ 0x005e0, 0x005e1, 0x005e2, 0x005e3, 0x005e4, 0x005e5, 0x005e6, 0x005e7,
+ 0x005e8, 0x005e9, 0x005ea, 0x005eb, 0x005ec, 0x005ed, 0x005ee, 0x005ef,
+ 0x005f0, 0x005f1, 0x005f2, 0x005f3, 0x005f4, 0x005f5, 0x005f6, 0x005f7,
+ 0x005f8, 0x005f9, 0x005fa, 0x005fb, 0x005fc, 0x005fd, 0x005fe, 0x005ff
+};
+
+static uint32_t general_ci_page_1e[] = {
+ 0x00041, 0x00041, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042,
+ 0x00043, 0x00043, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044,
+ 0x00044, 0x00044, 0x00044, 0x00044, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00046, 0x00046,
+ 0x00047, 0x00047, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048,
+ 0x00048, 0x00048, 0x00048, 0x00048, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004c, 0x0004c,
+ 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004d, 0x0004d,
+ 0x0004d, 0x0004d, 0x0004d, 0x0004d, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00050, 0x00050, 0x00050, 0x00050,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054,
+ 0x00054, 0x00054, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00056, 0x00056, 0x00056, 0x00056,
+ 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057,
+ 0x00057, 0x00057, 0x00058, 0x00058, 0x00058, 0x00058, 0x00059, 0x00059,
+ 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00048, 0x00054,
+ 0x00057, 0x00059, 0x01e9a, 0x00053, 0x01e9c, 0x01e9d, 0x01e9e, 0x01e9f,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059,
+ 0x00059, 0x00059, 0x01efa, 0x01efb, 0x01efc, 0x01efd, 0x01efe, 0x01eff
+};
+
+static uint32_t general_ci_page_1f[] = {
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f16, 0x01f17,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f1e, 0x01f1f,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f46, 0x01f47,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f4e, 0x01f4f,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5,
+ 0x01f58, 0x003a5, 0x01f5a, 0x003a5, 0x01f5c, 0x003a5, 0x01f5e, 0x003a5,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x01fbb, 0x00395, 0x01fc9, 0x00397, 0x01fcb, 0x00399, 0x01fdb,
+ 0x0039f, 0x01ff9, 0x003a5, 0x01feb, 0x003a9, 0x01ffb, 0x01f7e, 0x01f7f,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x01fb5, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x01fbb, 0x00391, 0x01fbd, 0x00399, 0x01fbf,
+ 0x01fc0, 0x01fc1, 0x00397, 0x00397, 0x00397, 0x01fc5, 0x00397, 0x00397,
+ 0x00395, 0x01fc9, 0x00397, 0x01fcb, 0x00397, 0x01fcd, 0x01fce, 0x01fcf,
+ 0x00399, 0x00399, 0x00399, 0x01fd3, 0x01fd4, 0x01fd5, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x01fdb, 0x01fdc, 0x01fdd, 0x01fde, 0x01fdf,
+ 0x003a5, 0x003a5, 0x003a5, 0x01fe3, 0x003a1, 0x003a1, 0x003a5, 0x003a5,
+ 0x003a5, 0x003a5, 0x003a5, 0x01feb, 0x003a1, 0x01fed, 0x01fee, 0x01fef,
+ 0x01ff0, 0x01ff1, 0x003a9, 0x003a9, 0x003a9, 0x01ff5, 0x003a9, 0x003a9,
+ 0x0039f, 0x01ff9, 0x003a9, 0x01ffb, 0x003a9, 0x01ffd, 0x01ffe, 0x01fff
+};
+
+static uint32_t general_ci_page_21[] = {
+ 0x02100, 0x02101, 0x02102, 0x02103, 0x02104, 0x02105, 0x02106, 0x02107,
+ 0x02108, 0x02109, 0x0210a, 0x0210b, 0x0210c, 0x0210d, 0x0210e, 0x0210f,
+ 0x02110, 0x02111, 0x02112, 0x02113, 0x02114, 0x02115, 0x02116, 0x02117,
+ 0x02118, 0x02119, 0x0211a, 0x0211b, 0x0211c, 0x0211d, 0x0211e, 0x0211f,
+ 0x02120, 0x02121, 0x02122, 0x02123, 0x02124, 0x02125, 0x02126, 0x02127,
+ 0x02128, 0x02129, 0x0212a, 0x0212b, 0x0212c, 0x0212d, 0x0212e, 0x0212f,
+ 0x02130, 0x02131, 0x02132, 0x02133, 0x02134, 0x02135, 0x02136, 0x02137,
+ 0x02138, 0x02139, 0x0213a, 0x0213b, 0x0213c, 0x0213d, 0x0213e, 0x0213f,
+ 0x02140, 0x02141, 0x02142, 0x02143, 0x02144, 0x02145, 0x02146, 0x02147,
+ 0x02148, 0x02149, 0x0214a, 0x0214b, 0x0214c, 0x0214d, 0x0214e, 0x0214f,
+ 0x02150, 0x02151, 0x02152, 0x02153, 0x02154, 0x02155, 0x02156, 0x02157,
+ 0x02158, 0x02159, 0x0215a, 0x0215b, 0x0215c, 0x0215d, 0x0215e, 0x0215f,
+ 0x02160, 0x02161, 0x02162, 0x02163, 0x02164, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x02169, 0x0216a, 0x0216b, 0x0216c, 0x0216d, 0x0216e, 0x0216f,
+ 0x02160, 0x02161, 0x02162, 0x02163, 0x02164, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x02169, 0x0216a, 0x0216b, 0x0216c, 0x0216d, 0x0216e, 0x0216f,
+ 0x02180, 0x02181, 0x02182, 0x02183, 0x02184, 0x02185, 0x02186, 0x02187,
+ 0x02188, 0x02189, 0x0218a, 0x0218b, 0x0218c, 0x0218d, 0x0218e, 0x0218f,
+ 0x02190, 0x02191, 0x02192, 0x02193, 0x02194, 0x02195, 0x02196, 0x02197,
+ 0x02198, 0x02199, 0x0219a, 0x0219b, 0x0219c, 0x0219d, 0x0219e, 0x0219f,
+ 0x021a0, 0x021a1, 0x021a2, 0x021a3, 0x021a4, 0x021a5, 0x021a6, 0x021a7,
+ 0x021a8, 0x021a9, 0x021aa, 0x021ab, 0x021ac, 0x021ad, 0x021ae, 0x021af,
+ 0x021b0, 0x021b1, 0x021b2, 0x021b3, 0x021b4, 0x021b5, 0x021b6, 0x021b7,
+ 0x021b8, 0x021b9, 0x021ba, 0x021bb, 0x021bc, 0x021bd, 0x021be, 0x021bf,
+ 0x021c0, 0x021c1, 0x021c2, 0x021c3, 0x021c4, 0x021c5, 0x021c6, 0x021c7,
+ 0x021c8, 0x021c9, 0x021ca, 0x021cb, 0x021cc, 0x021cd, 0x021ce, 0x021cf,
+ 0x021d0, 0x021d1, 0x021d2, 0x021d3, 0x021d4, 0x021d5, 0x021d6, 0x021d7,
+ 0x021d8, 0x021d9, 0x021da, 0x021db, 0x021dc, 0x021dd, 0x021de, 0x021df,
+ 0x021e0, 0x021e1, 0x021e2, 0x021e3, 0x021e4, 0x021e5, 0x021e6, 0x021e7,
+ 0x021e8, 0x021e9, 0x021ea, 0x021eb, 0x021ec, 0x021ed, 0x021ee, 0x021ef,
+ 0x021f0, 0x021f1, 0x021f2, 0x021f3, 0x021f4, 0x021f5, 0x021f6, 0x021f7,
+ 0x021f8, 0x021f9, 0x021fa, 0x021fb, 0x021fc, 0x021fd, 0x021fe, 0x021ff
+};
+
+static uint32_t general_ci_page_24[] = {
+ 0x02400, 0x02401, 0x02402, 0x02403, 0x02404, 0x02405, 0x02406, 0x02407,
+ 0x02408, 0x02409, 0x0240a, 0x0240b, 0x0240c, 0x0240d, 0x0240e, 0x0240f,
+ 0x02410, 0x02411, 0x02412, 0x02413, 0x02414, 0x02415, 0x02416, 0x02417,
+ 0x02418, 0x02419, 0x0241a, 0x0241b, 0x0241c, 0x0241d, 0x0241e, 0x0241f,
+ 0x02420, 0x02421, 0x02422, 0x02423, 0x02424, 0x02425, 0x02426, 0x02427,
+ 0x02428, 0x02429, 0x0242a, 0x0242b, 0x0242c, 0x0242d, 0x0242e, 0x0242f,
+ 0x02430, 0x02431, 0x02432, 0x02433, 0x02434, 0x02435, 0x02436, 0x02437,
+ 0x02438, 0x02439, 0x0243a, 0x0243b, 0x0243c, 0x0243d, 0x0243e, 0x0243f,
+ 0x02440, 0x02441, 0x02442, 0x02443, 0x02444, 0x02445, 0x02446, 0x02447,
+ 0x02448, 0x02449, 0x0244a, 0x0244b, 0x0244c, 0x0244d, 0x0244e, 0x0244f,
+ 0x02450, 0x02451, 0x02452, 0x02453, 0x02454, 0x02455, 0x02456, 0x02457,
+ 0x02458, 0x02459, 0x0245a, 0x0245b, 0x0245c, 0x0245d, 0x0245e, 0x0245f,
+ 0x02460, 0x02461, 0x02462, 0x02463, 0x02464, 0x02465, 0x02466, 0x02467,
+ 0x02468, 0x02469, 0x0246a, 0x0246b, 0x0246c, 0x0246d, 0x0246e, 0x0246f,
+ 0x02470, 0x02471, 0x02472, 0x02473, 0x02474, 0x02475, 0x02476, 0x02477,
+ 0x02478, 0x02479, 0x0247a, 0x0247b, 0x0247c, 0x0247d, 0x0247e, 0x0247f,
+ 0x02480, 0x02481, 0x02482, 0x02483, 0x02484, 0x02485, 0x02486, 0x02487,
+ 0x02488, 0x02489, 0x0248a, 0x0248b, 0x0248c, 0x0248d, 0x0248e, 0x0248f,
+ 0x02490, 0x02491, 0x02492, 0x02493, 0x02494, 0x02495, 0x02496, 0x02497,
+ 0x02498, 0x02499, 0x0249a, 0x0249b, 0x0249c, 0x0249d, 0x0249e, 0x0249f,
+ 0x024a0, 0x024a1, 0x024a2, 0x024a3, 0x024a4, 0x024a5, 0x024a6, 0x024a7,
+ 0x024a8, 0x024a9, 0x024aa, 0x024ab, 0x024ac, 0x024ad, 0x024ae, 0x024af,
+ 0x024b0, 0x024b1, 0x024b2, 0x024b3, 0x024b4, 0x024b5, 0x024b6, 0x024b7,
+ 0x024b8, 0x024b9, 0x024ba, 0x024bb, 0x024bc, 0x024bd, 0x024be, 0x024bf,
+ 0x024c0, 0x024c1, 0x024c2, 0x024c3, 0x024c4, 0x024c5, 0x024c6, 0x024c7,
+ 0x024c8, 0x024c9, 0x024ca, 0x024cb, 0x024cc, 0x024cd, 0x024ce, 0x024cf,
+ 0x024b6, 0x024b7, 0x024b8, 0x024b9, 0x024ba, 0x024bb, 0x024bc, 0x024bd,
+ 0x024be, 0x024bf, 0x024c0, 0x024c1, 0x024c2, 0x024c3, 0x024c4, 0x024c5,
+ 0x024c6, 0x024c7, 0x024c8, 0x024c9, 0x024ca, 0x024cb, 0x024cc, 0x024cd,
+ 0x024ce, 0x024cf, 0x024ea, 0x024eb, 0x024ec, 0x024ed, 0x024ee, 0x024ef,
+ 0x024f0, 0x024f1, 0x024f2, 0x024f3, 0x024f4, 0x024f5, 0x024f6, 0x024f7,
+ 0x024f8, 0x024f9, 0x024fa, 0x024fb, 0x024fc, 0x024fd, 0x024fe, 0x024ff
+};
+
+static uint32_t general_ci_page_ff[] = {
+ 0x0ff00, 0x0ff01, 0x0ff02, 0x0ff03, 0x0ff04, 0x0ff05, 0x0ff06, 0x0ff07,
+ 0x0ff08, 0x0ff09, 0x0ff0a, 0x0ff0b, 0x0ff0c, 0x0ff0d, 0x0ff0e, 0x0ff0f,
+ 0x0ff10, 0x0ff11, 0x0ff12, 0x0ff13, 0x0ff14, 0x0ff15, 0x0ff16, 0x0ff17,
+ 0x0ff18, 0x0ff19, 0x0ff1a, 0x0ff1b, 0x0ff1c, 0x0ff1d, 0x0ff1e, 0x0ff1f,
+ 0x0ff20, 0x0ff21, 0x0ff22, 0x0ff23, 0x0ff24, 0x0ff25, 0x0ff26, 0x0ff27,
+ 0x0ff28, 0x0ff29, 0x0ff2a, 0x0ff2b, 0x0ff2c, 0x0ff2d, 0x0ff2e, 0x0ff2f,
+ 0x0ff30, 0x0ff31, 0x0ff32, 0x0ff33, 0x0ff34, 0x0ff35, 0x0ff36, 0x0ff37,
+ 0x0ff38, 0x0ff39, 0x0ff3a, 0x0ff3b, 0x0ff3c, 0x0ff3d, 0x0ff3e, 0x0ff3f,
+ 0x0ff40, 0x0ff21, 0x0ff22, 0x0ff23, 0x0ff24, 0x0ff25, 0x0ff26, 0x0ff27,
+ 0x0ff28, 0x0ff29, 0x0ff2a, 0x0ff2b, 0x0ff2c, 0x0ff2d, 0x0ff2e, 0x0ff2f,
+ 0x0ff30, 0x0ff31, 0x0ff32, 0x0ff33, 0x0ff34, 0x0ff35, 0x0ff36, 0x0ff37,
+ 0x0ff38, 0x0ff39, 0x0ff3a, 0x0ff5b, 0x0ff5c, 0x0ff5d, 0x0ff5e, 0x0ff5f,
+ 0x0ff60, 0x0ff61, 0x0ff62, 0x0ff63, 0x0ff64, 0x0ff65, 0x0ff66, 0x0ff67,
+ 0x0ff68, 0x0ff69, 0x0ff6a, 0x0ff6b, 0x0ff6c, 0x0ff6d, 0x0ff6e, 0x0ff6f,
+ 0x0ff70, 0x0ff71, 0x0ff72, 0x0ff73, 0x0ff74, 0x0ff75, 0x0ff76, 0x0ff77,
+ 0x0ff78, 0x0ff79, 0x0ff7a, 0x0ff7b, 0x0ff7c, 0x0ff7d, 0x0ff7e, 0x0ff7f,
+ 0x0ff80, 0x0ff81, 0x0ff82, 0x0ff83, 0x0ff84, 0x0ff85, 0x0ff86, 0x0ff87,
+ 0x0ff88, 0x0ff89, 0x0ff8a, 0x0ff8b, 0x0ff8c, 0x0ff8d, 0x0ff8e, 0x0ff8f,
+ 0x0ff90, 0x0ff91, 0x0ff92, 0x0ff93, 0x0ff94, 0x0ff95, 0x0ff96, 0x0ff97,
+ 0x0ff98, 0x0ff99, 0x0ff9a, 0x0ff9b, 0x0ff9c, 0x0ff9d, 0x0ff9e, 0x0ff9f,
+ 0x0ffa0, 0x0ffa1, 0x0ffa2, 0x0ffa3, 0x0ffa4, 0x0ffa5, 0x0ffa6, 0x0ffa7,
+ 0x0ffa8, 0x0ffa9, 0x0ffaa, 0x0ffab, 0x0ffac, 0x0ffad, 0x0ffae, 0x0ffaf,
+ 0x0ffb0, 0x0ffb1, 0x0ffb2, 0x0ffb3, 0x0ffb4, 0x0ffb5, 0x0ffb6, 0x0ffb7,
+ 0x0ffb8, 0x0ffb9, 0x0ffba, 0x0ffbb, 0x0ffbc, 0x0ffbd, 0x0ffbe, 0x0ffbf,
+ 0x0ffc0, 0x0ffc1, 0x0ffc2, 0x0ffc3, 0x0ffc4, 0x0ffc5, 0x0ffc6, 0x0ffc7,
+ 0x0ffc8, 0x0ffc9, 0x0ffca, 0x0ffcb, 0x0ffcc, 0x0ffcd, 0x0ffce, 0x0ffcf,
+ 0x0ffd0, 0x0ffd1, 0x0ffd2, 0x0ffd3, 0x0ffd4, 0x0ffd5, 0x0ffd6, 0x0ffd7,
+ 0x0ffd8, 0x0ffd9, 0x0ffda, 0x0ffdb, 0x0ffdc, 0x0ffdd, 0x0ffde, 0x0ffdf,
+ 0x0ffe0, 0x0ffe1, 0x0ffe2, 0x0ffe3, 0x0ffe4, 0x0ffe5, 0x0ffe6, 0x0ffe7,
+ 0x0ffe8, 0x0ffe9, 0x0ffea, 0x0ffeb, 0x0ffec, 0x0ffed, 0x0ffee, 0x0ffef,
+ 0x0fff0, 0x0fff1, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff5, 0x0fff6, 0x0fff7,
+ 0x0fff8, 0x0fff9, 0x0fffa, 0x0fffb, 0x0fffc, 0x0fffd, 0x0fffe, 0x0ffff
+};
+
+static uint32_t *general_ci_table[256] = {
+ general_ci_page_00, general_ci_page_01,
+ general_ci_page_02, general_ci_page_03,
+ general_ci_page_04, general_ci_page_05,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ general_ci_page_1e, general_ci_page_1f,
+ NULL, general_ci_page_21,
+ NULL, NULL,
+ general_ci_page_24, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, general_ci_page_ff
+};
+
+#endif
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_sources.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_sources.am
new file mode 100644
index 00000000000..6f1d9b02018
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_sources.am
@@ -0,0 +1,5 @@
+mysql_la_SOURCES = \
+ mysql.c \
+ mysql_general_ci_table.h \
+ mysql_unicode_ci_table.h \
+ mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h
new file mode 100644
index 00000000000..4e6b6c539f4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table.h
@@ -0,0 +1,1685 @@
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ This file uses normalization table defined in
+ mysql-5.5.29/strings/ctype-uca.c.
+ The following is the header of the file:
+
+ Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ UCA (Unicode Collation Algorithm) support.
+ Written by Alexander Barkov <bar@mysql.com>
+*/
+
+#ifndef MYSQL_UCA_EXCEPT_KANA_CI_KANA_WITH_VOICED_SOUND_MARK_H
+#define MYSQL_UCA_EXCEPT_KANA_CI_KANA_WITH_VOICED_SOUND_MARK_H
+
+#include <stdint.h>
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_00[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00009, 0x0000a, 0x0000b, 0x0000c, 0x0000d, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00020, 0x00021, 0x00022, 0x00023, 0x00024, 0x00025, 0x00026, 0x00027,
+ 0x00028, 0x00029, 0x0002a, 0x0002b, 0x0002c, 0x0002d, 0x0002e, 0x0002f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0003a, 0x0003b, 0x0003c, 0x0003d, 0x0003e, 0x0003f,
+ 0x00040, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0005b, 0x0005c, 0x0005d, 0x0005e, 0x0005f,
+ 0x00060, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0007b, 0x0007c, 0x0007d, 0x0007e, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00085, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00020, 0x000a1, 0x000a2, 0x000a3, 0x000a4, 0x000a5, 0x000a6, 0x000a7,
+ 0x000a8, 0x000a9, 0x00041, 0x000ab, 0x000ac, 0x000ad, 0x000ae, 0x000af,
+ 0x000b0, 0x000b1, 0x00032, 0x00033, 0x000b4, 0x0039c, 0x000b6, 0x000b7,
+ 0x000b8, 0x00031, 0x0004f, 0x000bb, 0x000bc, 0x000bd, 0x000be, 0x000bf,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000d7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x000df,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000f7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x00059
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_01[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00043, 0x00043,
+ 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00044, 0x00044,
+ 0x00110, 0x00110, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00047, 0x00047, 0x00047, 0x00047,
+ 0x00047, 0x00047, 0x00047, 0x00047, 0x00048, 0x00048, 0x00126, 0x00126,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x00049, 0x00131, 0x00132, 0x00132, 0x0004a, 0x0004a, 0x0004b, 0x0004b,
+ 0x00138, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0013f,
+ 0x0013f, 0x00141, 0x00141, 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x00149, 0x0014a, 0x0014a, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00152, 0x00152, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00052, 0x00052, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00166, 0x00166,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00057, 0x00057, 0x00059, 0x00059,
+ 0x00059, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00053,
+ 0x00180, 0x00181, 0x00182, 0x00182, 0x00184, 0x00184, 0x00186, 0x00187,
+ 0x00187, 0x00189, 0x0018a, 0x0018b, 0x0018b, 0x0018d, 0x0018e, 0x0018f,
+ 0x00190, 0x00191, 0x00191, 0x00193, 0x00194, 0x00195, 0x00196, 0x00197,
+ 0x00198, 0x00198, 0x0019a, 0x0019b, 0x0019c, 0x0019d, 0x0019e, 0x0019f,
+ 0x0004f, 0x0004f, 0x001a2, 0x001a2, 0x001a4, 0x001a4, 0x001a6, 0x001a7,
+ 0x001a7, 0x001a9, 0x001aa, 0x001ab, 0x001ac, 0x001ac, 0x001ae, 0x00055,
+ 0x00055, 0x001b1, 0x001b2, 0x001b3, 0x001b3, 0x001b5, 0x001b5, 0x001b7,
+ 0x001b8, 0x001b8, 0x001ba, 0x001bb, 0x001bc, 0x001bc, 0x001be, 0x001bf,
+ 0x001c0, 0x001c1, 0x001c2, 0x001c3, 0x001c4, 0x001c4, 0x001c4, 0x001c7,
+ 0x001c7, 0x001c7, 0x001ca, 0x001ca, 0x001ca, 0x00041, 0x00041, 0x00049,
+ 0x00049, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x0018e, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x000c6, 0x000c6, 0x001e4, 0x001e4, 0x00047, 0x00047,
+ 0x0004b, 0x0004b, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x001b7, 0x001b7,
+ 0x0004a, 0x001c4, 0x001c4, 0x001c4, 0x00047, 0x00047, 0x00195, 0x001bf,
+ 0x0004e, 0x0004e, 0x00041, 0x00041, 0x000c6, 0x000c6, 0x000d8, 0x001ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_02[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x0021c, 0x0021c, 0x00048, 0x00048,
+ 0x0019e, 0x00221, 0x00222, 0x00222, 0x00224, 0x00224, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00059, 0x00059, 0x00234, 0x00235, 0x00236, 0x00237,
+ 0x00238, 0x00239, 0x0023a, 0x0023b, 0x0023c, 0x0023d, 0x0023e, 0x0023f,
+ 0x00240, 0x00241, 0x00242, 0x00243, 0x00244, 0x00245, 0x00246, 0x00247,
+ 0x00248, 0x00249, 0x0024a, 0x0024b, 0x0024c, 0x0024d, 0x0024e, 0x0024f,
+ 0x00250, 0x00251, 0x00252, 0x00181, 0x00186, 0x00255, 0x00189, 0x0018a,
+ 0x00258, 0x0018f, 0x0025a, 0x00190, 0x0025c, 0x0025d, 0x0025e, 0x0025f,
+ 0x00193, 0x00261, 0x00262, 0x00194, 0x00264, 0x00265, 0x00266, 0x00267,
+ 0x00197, 0x00196, 0x0026a, 0x0026b, 0x0026c, 0x0026d, 0x0026e, 0x0019c,
+ 0x00270, 0x00271, 0x0019d, 0x00273, 0x00274, 0x0019f, 0x00276, 0x00277,
+ 0x00278, 0x00279, 0x0027a, 0x0027b, 0x0027c, 0x0027d, 0x0027e, 0x0027f,
+ 0x001a6, 0x00281, 0x00282, 0x001a9, 0x00284, 0x00285, 0x00286, 0x00287,
+ 0x001ae, 0x00289, 0x001b1, 0x001b2, 0x0028c, 0x0028d, 0x0028e, 0x0028f,
+ 0x00290, 0x00291, 0x001b7, 0x00293, 0x00294, 0x00295, 0x00296, 0x00297,
+ 0x00298, 0x00299, 0x0029a, 0x0029b, 0x0029c, 0x0029d, 0x0029e, 0x0029f,
+ 0x002a0, 0x002a1, 0x002a2, 0x001c4, 0x002a4, 0x002a5, 0x001be, 0x002a7,
+ 0x002a8, 0x002a9, 0x002aa, 0x002ab, 0x002ac, 0x002ad, 0x002ae, 0x002af,
+ 0x00048, 0x00266, 0x0004a, 0x00052, 0x00279, 0x0027b, 0x00281, 0x00057,
+ 0x00059, 0x002b9, 0x002ba, 0x002bb, 0x002bc, 0x002bd, 0x002be, 0x002bf,
+ 0x002c0, 0x002c1, 0x002c2, 0x002c3, 0x002c4, 0x002c5, 0x002c6, 0x002c7,
+ 0x002c8, 0x002c9, 0x002ca, 0x002cb, 0x002cc, 0x002cd, 0x002ce, 0x002cf,
+ 0x002d0, 0x002d1, 0x002d2, 0x002d3, 0x002d4, 0x002d5, 0x002d6, 0x002d7,
+ 0x002d8, 0x002d9, 0x002da, 0x002db, 0x002dc, 0x002dd, 0x002de, 0x002df,
+ 0x00194, 0x0004c, 0x00053, 0x00058, 0x00295, 0x002e5, 0x002e6, 0x002e7,
+ 0x002e8, 0x002e9, 0x002ea, 0x002eb, 0x002ec, 0x002ed, 0x002ee, 0x002ef,
+ 0x002f0, 0x002f1, 0x002f2, 0x002f3, 0x002f4, 0x002f5, 0x002f6, 0x002f7,
+ 0x002f8, 0x002f9, 0x002fa, 0x002fb, 0x002fc, 0x002fd, 0x002fe, 0x002ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_03[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00358, 0x00359, 0x0035a, 0x0035b, 0x0035c, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00041, 0x00045, 0x00049, 0x0004f, 0x00055,
+ 0x00043, 0x00044, 0x00048, 0x0004d, 0x00052, 0x00054, 0x00056, 0x00058,
+ 0x00370, 0x00371, 0x00372, 0x00373, 0x002b9, 0x00375, 0x00376, 0x00377,
+ 0x00378, 0x00379, 0x00399, 0x0037b, 0x0037c, 0x0037d, 0x0003b, 0x0037f,
+ 0x00380, 0x00381, 0x00382, 0x00383, 0x000b4, 0x000a8, 0x00391, 0x000b7,
+ 0x00395, 0x00397, 0x00399, 0x0038b, 0x0039f, 0x0038d, 0x003a5, 0x003a9,
+ 0x00399, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a2, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x00391, 0x00395, 0x00397, 0x00399,
+ 0x003a5, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a3, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x0039f, 0x003a5, 0x003a9, 0x003cf,
+ 0x00392, 0x00398, 0x003a5, 0x003a5, 0x003a5, 0x003a6, 0x003a0, 0x003d7,
+ 0x003d8, 0x003d8, 0x003da, 0x003da, 0x003dc, 0x003dc, 0x003de, 0x003de,
+ 0x003e0, 0x003e0, 0x003e2, 0x003e2, 0x003e4, 0x003e4, 0x003e6, 0x003e6,
+ 0x003e8, 0x003e8, 0x003ea, 0x003ea, 0x003ec, 0x003ec, 0x003ee, 0x003ee,
+ 0x0039a, 0x003a1, 0x003a3, 0x003f3, 0x00398, 0x00395, 0x003f6, 0x003f7,
+ 0x003f7, 0x003a3, 0x003fa, 0x003fa, 0x003fc, 0x003fd, 0x003fe, 0x003ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_04[] = {
+ 0x00400, 0x00400, 0x00402, 0x00403, 0x00404, 0x00405, 0x00406, 0x00407,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0040c, 0x0040d, 0x0040e, 0x0040f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00400, 0x00416, 0x00417,
+ 0x0040d, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00400, 0x00416, 0x00417,
+ 0x0040d, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00400, 0x00400, 0x00402, 0x00403, 0x00404, 0x00405, 0x00406, 0x00407,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0040c, 0x0040d, 0x0040e, 0x0040f,
+ 0x00460, 0x00460, 0x00462, 0x00462, 0x00464, 0x00464, 0x00466, 0x00466,
+ 0x00468, 0x00468, 0x0046a, 0x0046a, 0x0046c, 0x0046c, 0x0046e, 0x0046e,
+ 0x00470, 0x00470, 0x00472, 0x00472, 0x00474, 0x00474, 0x00476, 0x00476,
+ 0x00478, 0x00478, 0x0047a, 0x0047a, 0x0047c, 0x0047c, 0x0047e, 0x0047e,
+ 0x00480, 0x00480, 0x00482, 0x00000, 0x00000, 0x00000, 0x00000, 0x00487,
+ 0x00000, 0x00000, 0x0048a, 0x0048a, 0x0048c, 0x0048c, 0x0048e, 0x0048e,
+ 0x00413, 0x00413, 0x00492, 0x00492, 0x00494, 0x00494, 0x00496, 0x00496,
+ 0x00498, 0x00498, 0x0049a, 0x0049a, 0x0049c, 0x0049c, 0x0049e, 0x0049e,
+ 0x004a0, 0x004a0, 0x004a2, 0x004a2, 0x004a4, 0x004a4, 0x004a6, 0x004a6,
+ 0x004a8, 0x004a8, 0x004aa, 0x004aa, 0x004ac, 0x004ac, 0x004ae, 0x004ae,
+ 0x004b0, 0x004b0, 0x004b2, 0x004b2, 0x004b4, 0x004b4, 0x004b6, 0x004b6,
+ 0x004b8, 0x004b8, 0x004ba, 0x004ba, 0x004bc, 0x004bc, 0x004be, 0x004be,
+ 0x004c0, 0x00416, 0x00416, 0x004c3, 0x004c3, 0x004c5, 0x004c5, 0x004c7,
+ 0x004c7, 0x004c9, 0x004c9, 0x004cb, 0x004cb, 0x004cd, 0x004cd, 0x004cf,
+ 0x004d0, 0x004d0, 0x004d2, 0x004d2, 0x004d4, 0x004d4, 0x004d6, 0x004d6,
+ 0x004d8, 0x004d8, 0x004da, 0x004da, 0x004dc, 0x004dc, 0x004de, 0x004de,
+ 0x004e0, 0x004e0, 0x0040d, 0x0040d, 0x004e4, 0x004e4, 0x004e6, 0x004e6,
+ 0x004e8, 0x004e8, 0x004ea, 0x004ea, 0x004ec, 0x004ec, 0x00423, 0x00423,
+ 0x004f0, 0x004f0, 0x004f2, 0x004f2, 0x004f4, 0x004f4, 0x004f6, 0x004f7,
+ 0x004f8, 0x004f8, 0x004fa, 0x004fb, 0x004fc, 0x004fd, 0x004fe, 0x004ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_05[] = {
+ 0x00500, 0x00500, 0x00502, 0x00502, 0x00504, 0x00504, 0x00506, 0x00506,
+ 0x00508, 0x00508, 0x0050a, 0x0050a, 0x0050c, 0x0050c, 0x0050e, 0x0050e,
+ 0x00510, 0x00511, 0x00512, 0x00513, 0x00514, 0x00515, 0x00516, 0x00517,
+ 0x00518, 0x00519, 0x0051a, 0x0051b, 0x0051c, 0x0051d, 0x0051e, 0x0051f,
+ 0x00520, 0x00521, 0x00522, 0x00523, 0x00524, 0x00525, 0x00526, 0x00527,
+ 0x00528, 0x00529, 0x0052a, 0x0052b, 0x0052c, 0x0052d, 0x0052e, 0x0052f,
+ 0x00530, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00557,
+ 0x00558, 0x00559, 0x0055a, 0x0055b, 0x0055c, 0x0055d, 0x0055e, 0x0055f,
+ 0x00560, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00587,
+ 0x00588, 0x00589, 0x0058a, 0x0058b, 0x0058c, 0x0058d, 0x0058e, 0x0058f,
+ 0x00590, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x005a2, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x005ba, 0x00000, 0x00000, 0x00000, 0x005be, 0x00000,
+ 0x005c0, 0x00000, 0x00000, 0x005c3, 0x00000, 0x005c5, 0x005c6, 0x005c7,
+ 0x005c8, 0x005c9, 0x005ca, 0x005cb, 0x005cc, 0x005cd, 0x005ce, 0x005cf,
+ 0x005d0, 0x005d1, 0x005d2, 0x005d3, 0x005d4, 0x005d5, 0x005d6, 0x005d7,
+ 0x005d8, 0x005d9, 0x005da, 0x005da, 0x005dc, 0x005dd, 0x005dd, 0x005df,
+ 0x005df, 0x005e1, 0x005e2, 0x005e3, 0x005e3, 0x005e5, 0x005e5, 0x005e7,
+ 0x005e8, 0x005e9, 0x005ea, 0x005eb, 0x005ec, 0x005ed, 0x005ee, 0x005ef,
+ 0x005f0, 0x005f1, 0x005f2, 0x005f3, 0x005f4, 0x005f5, 0x005f6, 0x005f7,
+ 0x005f8, 0x005f9, 0x005fa, 0x005fb, 0x005fc, 0x005fd, 0x005fe, 0x005ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_06[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00604, 0x00605, 0x00606, 0x00607,
+ 0x00608, 0x00609, 0x0060a, 0x0060b, 0x0060c, 0x0060d, 0x0060e, 0x0060f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00616, 0x00617,
+ 0x00618, 0x00619, 0x0061a, 0x0061b, 0x0061c, 0x0061d, 0x0061e, 0x0061f,
+ 0x00620, 0x00621, 0x00622, 0x00623, 0x00624, 0x00625, 0x00626, 0x00627,
+ 0x00628, 0x00629, 0x0062a, 0x0062b, 0x0062c, 0x0062d, 0x0062e, 0x0062f,
+ 0x00630, 0x00631, 0x00632, 0x00633, 0x00634, 0x00635, 0x00636, 0x00637,
+ 0x00638, 0x00639, 0x0063a, 0x0063b, 0x0063c, 0x0063d, 0x0063e, 0x0063f,
+ 0x00640, 0x00641, 0x00642, 0x00643, 0x00644, 0x00645, 0x00646, 0x00647,
+ 0x00648, 0x00649, 0x0064a, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00659, 0x0065a, 0x0065b, 0x0065c, 0x0065d, 0x0065e, 0x0065f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0066a, 0x0066b, 0x0066c, 0x0066d, 0x0066e, 0x0066f,
+ 0x00000, 0x00671, 0x00672, 0x00673, 0x00621, 0x00675, 0x00676, 0x00677,
+ 0x00678, 0x00679, 0x0067a, 0x0067b, 0x0067c, 0x0067d, 0x0067e, 0x0067f,
+ 0x00680, 0x00681, 0x00682, 0x00683, 0x00684, 0x00685, 0x00686, 0x00687,
+ 0x00688, 0x00689, 0x0068a, 0x0068b, 0x0068c, 0x0068d, 0x0068e, 0x0068f,
+ 0x00690, 0x00691, 0x00692, 0x00693, 0x00694, 0x00695, 0x00696, 0x00697,
+ 0x00698, 0x00699, 0x0069a, 0x0069b, 0x0069c, 0x0069d, 0x0069e, 0x0069f,
+ 0x006a0, 0x006a1, 0x006a2, 0x006a3, 0x006a4, 0x006a5, 0x006a6, 0x006a7,
+ 0x006a8, 0x006a9, 0x006aa, 0x006ab, 0x006ac, 0x006ad, 0x006ae, 0x006af,
+ 0x006b0, 0x006b1, 0x006b2, 0x006b3, 0x006b4, 0x006b5, 0x006b6, 0x006b7,
+ 0x006b8, 0x006b9, 0x006ba, 0x006bb, 0x006bc, 0x006bd, 0x006be, 0x006bf,
+ 0x006c0, 0x006c1, 0x006c1, 0x006c3, 0x006c4, 0x006c5, 0x006c6, 0x006c7,
+ 0x006c8, 0x006c9, 0x006ca, 0x006cb, 0x006cc, 0x006cd, 0x006ce, 0x006cf,
+ 0x006d0, 0x006d1, 0x006d2, 0x006d2, 0x006d4, 0x006c0, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00648, 0x0064a, 0x00000,
+ 0x00000, 0x006e9, 0x00000, 0x00000, 0x00000, 0x00000, 0x006ee, 0x006ef,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x006fa, 0x006fb, 0x006fc, 0x00621, 0x00645, 0x006ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_07[] = {
+ 0x00700, 0x00701, 0x00702, 0x00703, 0x00704, 0x00705, 0x00706, 0x00707,
+ 0x00708, 0x00709, 0x0070a, 0x0070b, 0x0070c, 0x0070d, 0x0070e, 0x00000,
+ 0x00710, 0x00000, 0x00712, 0x00713, 0x00713, 0x00715, 0x00716, 0x00717,
+ 0x00718, 0x00719, 0x0071a, 0x0071b, 0x0071b, 0x0071d, 0x0071e, 0x0071f,
+ 0x00720, 0x00721, 0x00722, 0x00723, 0x00723, 0x00725, 0x00726, 0x00726,
+ 0x00728, 0x00729, 0x0072a, 0x0072b, 0x0072c, 0x00712, 0x00713, 0x00715,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x0074b, 0x0074c, 0x0074d, 0x0074e, 0x0074f,
+ 0x00750, 0x00751, 0x00752, 0x00753, 0x00754, 0x00755, 0x00756, 0x00757,
+ 0x00758, 0x00759, 0x0075a, 0x0075b, 0x0075c, 0x0075d, 0x0075e, 0x0075f,
+ 0x00760, 0x00761, 0x00762, 0x00763, 0x00764, 0x00765, 0x00766, 0x00767,
+ 0x00768, 0x00769, 0x0076a, 0x0076b, 0x0076c, 0x0076d, 0x0076e, 0x0076f,
+ 0x00770, 0x00771, 0x00772, 0x00773, 0x00774, 0x00775, 0x00776, 0x00777,
+ 0x00778, 0x00779, 0x0077a, 0x0077b, 0x0077c, 0x0077d, 0x0077e, 0x0077f,
+ 0x00780, 0x00781, 0x00782, 0x00783, 0x00784, 0x00785, 0x00786, 0x00787,
+ 0x00788, 0x00789, 0x0078a, 0x0078b, 0x0078c, 0x0078d, 0x0078e, 0x0078f,
+ 0x00790, 0x00791, 0x00792, 0x00793, 0x00794, 0x00795, 0x00796, 0x00797,
+ 0x00798, 0x00799, 0x0079a, 0x0079b, 0x0079c, 0x0079d, 0x0079e, 0x0079f,
+ 0x007a0, 0x007a1, 0x007a2, 0x007a3, 0x007a4, 0x007a5, 0x007a6, 0x007a7,
+ 0x007a8, 0x007a9, 0x007aa, 0x007ab, 0x007ac, 0x007ad, 0x007ae, 0x007af,
+ 0x007b0, 0x007b1, 0x007b2, 0x007b3, 0x007b4, 0x007b5, 0x007b6, 0x007b7,
+ 0x007b8, 0x007b9, 0x007ba, 0x007bb, 0x007bc, 0x007bd, 0x007be, 0x007bf,
+ 0x007c0, 0x007c1, 0x007c2, 0x007c3, 0x007c4, 0x007c5, 0x007c6, 0x007c7,
+ 0x007c8, 0x007c9, 0x007ca, 0x007cb, 0x007cc, 0x007cd, 0x007ce, 0x007cf,
+ 0x007d0, 0x007d1, 0x007d2, 0x007d3, 0x007d4, 0x007d5, 0x007d6, 0x007d7,
+ 0x007d8, 0x007d9, 0x007da, 0x007db, 0x007dc, 0x007dd, 0x007de, 0x007df,
+ 0x007e0, 0x007e1, 0x007e2, 0x007e3, 0x007e4, 0x007e5, 0x007e6, 0x007e7,
+ 0x007e8, 0x007e9, 0x007ea, 0x007eb, 0x007ec, 0x007ed, 0x007ee, 0x007ef,
+ 0x007f0, 0x007f1, 0x007f2, 0x007f3, 0x007f4, 0x007f5, 0x007f6, 0x007f7,
+ 0x007f8, 0x007f9, 0x007fa, 0x007fb, 0x007fc, 0x007fd, 0x007fe, 0x007ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_09[] = {
+ 0x00900, 0x00000, 0x00000, 0x00000, 0x00904, 0x00905, 0x00906, 0x00907,
+ 0x00908, 0x00909, 0x0090a, 0x0090b, 0x0090c, 0x0090d, 0x0090e, 0x0090f,
+ 0x00910, 0x00911, 0x00912, 0x00913, 0x00914, 0x00915, 0x00916, 0x00917,
+ 0x00918, 0x00919, 0x0091a, 0x0091b, 0x0091c, 0x0091d, 0x0091e, 0x0091f,
+ 0x00920, 0x00921, 0x00922, 0x00923, 0x00924, 0x00925, 0x00926, 0x00927,
+ 0x00928, 0x00928, 0x0092a, 0x0092b, 0x0092c, 0x0092d, 0x0092e, 0x0092f,
+ 0x00930, 0x00930, 0x00932, 0x00933, 0x00933, 0x00935, 0x00936, 0x00937,
+ 0x00938, 0x00939, 0x0093a, 0x0093b, 0x00000, 0x0093d, 0x0093e, 0x0093f,
+ 0x00940, 0x00941, 0x00942, 0x00943, 0x00944, 0x00945, 0x00946, 0x00947,
+ 0x00948, 0x00949, 0x0094a, 0x0094b, 0x0094c, 0x0094d, 0x0094e, 0x0094f,
+ 0x00950, 0x00000, 0x00000, 0x00000, 0x00000, 0x00955, 0x00956, 0x00957,
+ 0x00915, 0x00916, 0x00917, 0x0091c, 0x00921, 0x00922, 0x0092b, 0x0092f,
+ 0x00960, 0x00961, 0x00962, 0x00963, 0x00964, 0x00965, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00970, 0x00971, 0x00972, 0x00973, 0x00974, 0x00975, 0x00976, 0x00977,
+ 0x00978, 0x00979, 0x0097a, 0x0097b, 0x0097c, 0x0097d, 0x0097e, 0x0097f,
+ 0x00980, 0x00000, 0x00000, 0x00000, 0x00984, 0x00985, 0x00986, 0x00987,
+ 0x00988, 0x00989, 0x0098a, 0x0098b, 0x0098c, 0x0098d, 0x0098e, 0x0098f,
+ 0x00990, 0x00991, 0x00992, 0x00993, 0x00994, 0x00995, 0x00996, 0x00997,
+ 0x00998, 0x00999, 0x0099a, 0x0099b, 0x0099c, 0x0099d, 0x0099e, 0x0099f,
+ 0x009a0, 0x009a1, 0x009a2, 0x009a3, 0x009a4, 0x009a5, 0x009a6, 0x009a7,
+ 0x009a8, 0x009a9, 0x009aa, 0x009ab, 0x009ac, 0x009ad, 0x009ae, 0x009af,
+ 0x009b0, 0x009b1, 0x009b2, 0x009b3, 0x009b4, 0x009b5, 0x009b6, 0x009b7,
+ 0x009b8, 0x009b9, 0x009ba, 0x009bb, 0x00000, 0x009bd, 0x009be, 0x009bf,
+ 0x009c0, 0x009c1, 0x009c2, 0x009c3, 0x009c4, 0x009c5, 0x009c6, 0x009c7,
+ 0x009c8, 0x009c9, 0x009ca, 0x009cb, 0x009cc, 0x009cd, 0x009ce, 0x009cf,
+ 0x009d0, 0x009d1, 0x009d2, 0x009d3, 0x009d4, 0x009d5, 0x009d6, 0x009d7,
+ 0x009d8, 0x009d9, 0x009da, 0x009db, 0x009a1, 0x009a2, 0x009de, 0x009af,
+ 0x009e0, 0x009e1, 0x009e2, 0x009e3, 0x009e4, 0x009e5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x009f0, 0x009f1, 0x009f2, 0x009f3, 0x00031, 0x00032, 0x00033, 0x00034,
+ 0x009f8, 0x009f9, 0x009fa, 0x009fb, 0x009fc, 0x009fd, 0x009fe, 0x009ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0a[] = {
+ 0x00a00, 0x00000, 0x00000, 0x00000, 0x00a04, 0x00a05, 0x00a06, 0x00a07,
+ 0x00a08, 0x00a09, 0x00a0a, 0x00a0b, 0x00a0c, 0x00a0d, 0x00a0e, 0x00a0f,
+ 0x00a10, 0x00a11, 0x00a12, 0x00a13, 0x00a14, 0x00a15, 0x00a16, 0x00a17,
+ 0x00a18, 0x00a19, 0x00a1a, 0x00a1b, 0x00a1c, 0x00a1d, 0x00a1e, 0x00a1f,
+ 0x00a20, 0x00a21, 0x00a22, 0x00a23, 0x00a24, 0x00a25, 0x00a26, 0x00a27,
+ 0x00a28, 0x00a29, 0x00a2a, 0x00a2b, 0x00a2c, 0x00a2d, 0x00a2e, 0x00a2f,
+ 0x00a30, 0x00a31, 0x00a32, 0x00a32, 0x00a34, 0x00a35, 0x00a36, 0x00a37,
+ 0x00a36, 0x00a39, 0x00a3a, 0x00a3b, 0x00000, 0x00a3d, 0x00a3e, 0x00a3f,
+ 0x00a40, 0x00a41, 0x00a42, 0x00a43, 0x00a44, 0x00a45, 0x00a46, 0x00a47,
+ 0x00a48, 0x00a49, 0x00a4a, 0x00a4b, 0x00a4c, 0x00a4d, 0x00a4e, 0x00a4f,
+ 0x00a50, 0x00a51, 0x00a52, 0x00a53, 0x00a54, 0x00a55, 0x00a56, 0x00a57,
+ 0x00a58, 0x00a16, 0x00a17, 0x00a1c, 0x00a5c, 0x00a5d, 0x00a2b, 0x00a5f,
+ 0x00a60, 0x00a61, 0x00a62, 0x00a63, 0x00a64, 0x00a65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00000, 0x00000, 0x00a72, 0x00a73, 0x00a74, 0x00a75, 0x00a76, 0x00a77,
+ 0x00a78, 0x00a79, 0x00a7a, 0x00a7b, 0x00a7c, 0x00a7d, 0x00a7e, 0x00a7f,
+ 0x00a80, 0x00000, 0x00000, 0x00000, 0x00a84, 0x00a85, 0x00a86, 0x00a87,
+ 0x00a88, 0x00a89, 0x00a8a, 0x00a8b, 0x00a8c, 0x00a8d, 0x00a8e, 0x00a8f,
+ 0x00a90, 0x00a91, 0x00a92, 0x00a93, 0x00a94, 0x00a95, 0x00a96, 0x00a97,
+ 0x00a98, 0x00a99, 0x00a9a, 0x00a9b, 0x00a9c, 0x00a9d, 0x00a9e, 0x00a9f,
+ 0x00aa0, 0x00aa1, 0x00aa2, 0x00aa3, 0x00aa4, 0x00aa5, 0x00aa6, 0x00aa7,
+ 0x00aa8, 0x00aa9, 0x00aaa, 0x00aab, 0x00aac, 0x00aad, 0x00aae, 0x00aaf,
+ 0x00ab0, 0x00ab1, 0x00ab2, 0x00ab3, 0x00ab4, 0x00ab5, 0x00ab6, 0x00ab7,
+ 0x00ab8, 0x00ab9, 0x00aba, 0x00abb, 0x00000, 0x00abd, 0x00abe, 0x00abf,
+ 0x00ac0, 0x00ac1, 0x00ac2, 0x00ac3, 0x00ac4, 0x00ac5, 0x00ac6, 0x00ac7,
+ 0x00ac8, 0x00ac9, 0x00aca, 0x00acb, 0x00acc, 0x00acd, 0x00ace, 0x00acf,
+ 0x00ad0, 0x00ad1, 0x00ad2, 0x00ad3, 0x00ad4, 0x00ad5, 0x00ad6, 0x00ad7,
+ 0x00ad8, 0x00ad9, 0x00ada, 0x00adb, 0x00adc, 0x00add, 0x00ade, 0x00adf,
+ 0x00ae0, 0x00ae1, 0x00ae2, 0x00ae3, 0x00ae4, 0x00ae5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00af0, 0x00af1, 0x00af2, 0x00af3, 0x00af4, 0x00af5, 0x00af6, 0x00af7,
+ 0x00af8, 0x00af9, 0x00afa, 0x00afb, 0x00afc, 0x00afd, 0x00afe, 0x00aff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0b[] = {
+ 0x00b00, 0x00000, 0x00000, 0x00000, 0x00b04, 0x00b05, 0x00b06, 0x00b07,
+ 0x00b08, 0x00b09, 0x00b0a, 0x00b0b, 0x00b0c, 0x00b0d, 0x00b0e, 0x00b0f,
+ 0x00b10, 0x00b11, 0x00b12, 0x00b13, 0x00b14, 0x00b15, 0x00b16, 0x00b17,
+ 0x00b18, 0x00b19, 0x00b1a, 0x00b1b, 0x00b1c, 0x00b1d, 0x00b1e, 0x00b1f,
+ 0x00b20, 0x00b21, 0x00b22, 0x00b23, 0x00b24, 0x00b25, 0x00b26, 0x00b27,
+ 0x00b28, 0x00b29, 0x00b2a, 0x00b2b, 0x00b2c, 0x00b2d, 0x00b2e, 0x00b2f,
+ 0x00b30, 0x00b31, 0x00b32, 0x00b33, 0x00b34, 0x00b35, 0x00b36, 0x00b37,
+ 0x00b38, 0x00b39, 0x00b3a, 0x00b3b, 0x00000, 0x00b3d, 0x00b3e, 0x00b3f,
+ 0x00b40, 0x00b41, 0x00b42, 0x00b43, 0x00b44, 0x00b45, 0x00b46, 0x00b47,
+ 0x00b48, 0x00b49, 0x00b4a, 0x00b4b, 0x00b4c, 0x00b4d, 0x00b4e, 0x00b4f,
+ 0x00b50, 0x00b51, 0x00b52, 0x00b53, 0x00b54, 0x00b55, 0x00b56, 0x00b57,
+ 0x00b58, 0x00b59, 0x00b5a, 0x00b5b, 0x00b21, 0x00b22, 0x00b5e, 0x00b5f,
+ 0x00b60, 0x00b61, 0x00b62, 0x00b63, 0x00b64, 0x00b65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00b70, 0x00b71, 0x00b72, 0x00b73, 0x00b74, 0x00b75, 0x00b76, 0x00b77,
+ 0x00b78, 0x00b79, 0x00b7a, 0x00b7b, 0x00b7c, 0x00b7d, 0x00b7e, 0x00b7f,
+ 0x00b80, 0x00b81, 0x00000, 0x00b83, 0x00b84, 0x00b85, 0x00b86, 0x00b87,
+ 0x00b88, 0x00b89, 0x00b8a, 0x00b8b, 0x00b8c, 0x00b8d, 0x00b8e, 0x00b8f,
+ 0x00b90, 0x00b91, 0x00b92, 0x00b93, 0x00b94, 0x00b95, 0x00b96, 0x00b97,
+ 0x00b98, 0x00b99, 0x00b9a, 0x00b9b, 0x00b9c, 0x00b9d, 0x00b9e, 0x00b9f,
+ 0x00ba0, 0x00ba1, 0x00ba2, 0x00ba3, 0x00ba4, 0x00ba5, 0x00ba6, 0x00ba7,
+ 0x00ba8, 0x00ba9, 0x00baa, 0x00bab, 0x00bac, 0x00bad, 0x00bae, 0x00baf,
+ 0x00bb0, 0x00bb1, 0x00bb2, 0x00bb3, 0x00bb4, 0x00bb5, 0x00bb6, 0x00bb7,
+ 0x00bb8, 0x00bb9, 0x00bba, 0x00bbb, 0x00bbc, 0x00bbd, 0x00bbe, 0x00bbf,
+ 0x00bc0, 0x00bc1, 0x00bc2, 0x00bc3, 0x00bc4, 0x00bc5, 0x00bc6, 0x00bc7,
+ 0x00bc8, 0x00bc9, 0x00bca, 0x00bcb, 0x00bcc, 0x00bcd, 0x00bce, 0x00bcf,
+ 0x00bd0, 0x00bd1, 0x00bd2, 0x00bd3, 0x00bd4, 0x00bd5, 0x00bd6, 0x00bd7,
+ 0x00bd8, 0x00bd9, 0x00bda, 0x00bdb, 0x00bdc, 0x00bdd, 0x00bde, 0x00bdf,
+ 0x00be0, 0x00be1, 0x00be2, 0x00be3, 0x00be4, 0x00be5, 0x00be6, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00bf0, 0x00bf1, 0x00bf2, 0x00bf3, 0x00bf4, 0x00bf5, 0x00bf6, 0x00bf7,
+ 0x00bf8, 0x00bf9, 0x00bfa, 0x00bfb, 0x00bfc, 0x00bfd, 0x00bfe, 0x00bff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0c[] = {
+ 0x00c00, 0x00000, 0x00000, 0x00000, 0x00c04, 0x00c05, 0x00c06, 0x00c07,
+ 0x00c08, 0x00c09, 0x00c0a, 0x00c0b, 0x00c0c, 0x00c0d, 0x00c0e, 0x00c0f,
+ 0x00c10, 0x00c11, 0x00c12, 0x00c13, 0x00c14, 0x00c15, 0x00c16, 0x00c17,
+ 0x00c18, 0x00c19, 0x00c1a, 0x00c1b, 0x00c1c, 0x00c1d, 0x00c1e, 0x00c1f,
+ 0x00c20, 0x00c21, 0x00c22, 0x00c23, 0x00c24, 0x00c25, 0x00c26, 0x00c27,
+ 0x00c28, 0x00c29, 0x00c2a, 0x00c2b, 0x00c2c, 0x00c2d, 0x00c2e, 0x00c2f,
+ 0x00c30, 0x00c31, 0x00c32, 0x00c33, 0x00c34, 0x00c35, 0x00c36, 0x00c37,
+ 0x00c38, 0x00c39, 0x00c3a, 0x00c3b, 0x00c3c, 0x00c3d, 0x00c3e, 0x00c3f,
+ 0x00c40, 0x00c41, 0x00c42, 0x00c43, 0x00c44, 0x00c45, 0x00c46, 0x00c47,
+ 0x00c48, 0x00c49, 0x00c4a, 0x00c4b, 0x00c4c, 0x00c4d, 0x00c4e, 0x00c4f,
+ 0x00c50, 0x00c51, 0x00c52, 0x00c53, 0x00c54, 0x00c55, 0x00c56, 0x00c57,
+ 0x00c58, 0x00c59, 0x00c5a, 0x00c5b, 0x00c5c, 0x00c5d, 0x00c5e, 0x00c5f,
+ 0x00c60, 0x00c61, 0x00c62, 0x00c63, 0x00c64, 0x00c65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00c70, 0x00c71, 0x00c72, 0x00c73, 0x00c74, 0x00c75, 0x00c76, 0x00c77,
+ 0x00c78, 0x00c79, 0x00c7a, 0x00c7b, 0x00c7c, 0x00c7d, 0x00c7e, 0x00c7f,
+ 0x00c80, 0x00c81, 0x00000, 0x00000, 0x00c84, 0x00c85, 0x00c86, 0x00c87,
+ 0x00c88, 0x00c89, 0x00c8a, 0x00c8b, 0x00c8c, 0x00c8d, 0x00c8e, 0x00c8f,
+ 0x00c90, 0x00c91, 0x00c92, 0x00c93, 0x00c94, 0x00c95, 0x00c96, 0x00c97,
+ 0x00c98, 0x00c99, 0x00c9a, 0x00c9b, 0x00c9c, 0x00c9d, 0x00c9e, 0x00c9f,
+ 0x00ca0, 0x00ca1, 0x00ca2, 0x00ca3, 0x00ca4, 0x00ca5, 0x00ca6, 0x00ca7,
+ 0x00ca8, 0x00ca9, 0x00caa, 0x00cab, 0x00cac, 0x00cad, 0x00cae, 0x00caf,
+ 0x00cb0, 0x00cb1, 0x00cb2, 0x00cb3, 0x00cb4, 0x00cb5, 0x00cb6, 0x00cb7,
+ 0x00cb8, 0x00cb9, 0x00cba, 0x00cbb, 0x00000, 0x00cbd, 0x00cbe, 0x00cbf,
+ 0x00cc0, 0x00cc1, 0x00cc2, 0x00cc3, 0x00cc4, 0x00cc5, 0x00cc6, 0x00cc7,
+ 0x00cc8, 0x00cc9, 0x00cca, 0x00ccb, 0x00ccc, 0x00ccd, 0x00cce, 0x00ccf,
+ 0x00cd0, 0x00cd1, 0x00cd2, 0x00cd3, 0x00cd4, 0x00cd5, 0x00cd6, 0x00cd7,
+ 0x00cd8, 0x00cd9, 0x00cda, 0x00cdb, 0x00cdc, 0x00cdd, 0x00cde, 0x00cdf,
+ 0x00ce0, 0x00ce1, 0x00ce2, 0x00ce3, 0x00ce4, 0x00ce5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00cf0, 0x00cf1, 0x00cf2, 0x00cf3, 0x00cf4, 0x00cf5, 0x00cf6, 0x00cf7,
+ 0x00cf8, 0x00cf9, 0x00cfa, 0x00cfb, 0x00cfc, 0x00cfd, 0x00cfe, 0x00cff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0d[] = {
+ 0x00d00, 0x00d01, 0x00000, 0x00000, 0x00d04, 0x00d05, 0x00d06, 0x00d07,
+ 0x00d08, 0x00d09, 0x00d0a, 0x00d0b, 0x00d0c, 0x00d0d, 0x00d0e, 0x00d0f,
+ 0x00d10, 0x00d11, 0x00d12, 0x00d13, 0x00d14, 0x00d15, 0x00d16, 0x00d17,
+ 0x00d18, 0x00d19, 0x00d1a, 0x00d1b, 0x00d1c, 0x00d1d, 0x00d1e, 0x00d1f,
+ 0x00d20, 0x00d21, 0x00d22, 0x00d23, 0x00d24, 0x00d25, 0x00d26, 0x00d27,
+ 0x00d28, 0x00d29, 0x00d2a, 0x00d2b, 0x00d2c, 0x00d2d, 0x00d2e, 0x00d2f,
+ 0x00d30, 0x00d31, 0x00d32, 0x00d33, 0x00d34, 0x00d35, 0x00d36, 0x00d37,
+ 0x00d38, 0x00d39, 0x00d3a, 0x00d3b, 0x00d3c, 0x00d3d, 0x00d3e, 0x00d3f,
+ 0x00d40, 0x00d41, 0x00d42, 0x00d43, 0x00d44, 0x00d45, 0x00d46, 0x00d47,
+ 0x00d48, 0x00d49, 0x00d4a, 0x00d4b, 0x00d4c, 0x00d4d, 0x00d4e, 0x00d4f,
+ 0x00d50, 0x00d51, 0x00d52, 0x00d53, 0x00d54, 0x00d55, 0x00d56, 0x00d57,
+ 0x00d58, 0x00d59, 0x00d5a, 0x00d5b, 0x00d5c, 0x00d5d, 0x00d5e, 0x00d5f,
+ 0x00d60, 0x00d61, 0x00d62, 0x00d63, 0x00d64, 0x00d65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00d70, 0x00d71, 0x00d72, 0x00d73, 0x00d74, 0x00d75, 0x00d76, 0x00d77,
+ 0x00d78, 0x00d79, 0x00d7a, 0x00d7b, 0x00d7c, 0x00d7d, 0x00d7e, 0x00d7f,
+ 0x00d80, 0x00d81, 0x00000, 0x00000, 0x00d84, 0x00d85, 0x00d86, 0x00d87,
+ 0x00d88, 0x00d89, 0x00d8a, 0x00d8b, 0x00d8c, 0x00d8d, 0x00d8e, 0x00d8f,
+ 0x00d90, 0x00d91, 0x00d92, 0x00d93, 0x00d94, 0x00d95, 0x00d96, 0x00d97,
+ 0x00d98, 0x00d99, 0x00d9a, 0x00d9b, 0x00d9c, 0x00d9d, 0x00d9e, 0x00d9f,
+ 0x00da0, 0x00da1, 0x00da2, 0x00da3, 0x00da4, 0x00da5, 0x00da6, 0x00da7,
+ 0x00da8, 0x00da9, 0x00daa, 0x00dab, 0x00dac, 0x00dad, 0x00dae, 0x00daf,
+ 0x00db0, 0x00db1, 0x00db2, 0x00db3, 0x00db4, 0x00db5, 0x00db6, 0x00db7,
+ 0x00db8, 0x00db9, 0x00dba, 0x00dbb, 0x00dbc, 0x00dbd, 0x00dbe, 0x00dbf,
+ 0x00dc0, 0x00dc1, 0x00dc2, 0x00dc3, 0x00dc4, 0x00dc5, 0x00dc6, 0x00dc7,
+ 0x00dc8, 0x00dc9, 0x00dca, 0x00dcb, 0x00dcc, 0x00dcd, 0x00dce, 0x00dcf,
+ 0x00dd0, 0x00dd1, 0x00dd2, 0x00dd3, 0x00dd4, 0x00dd5, 0x00dd6, 0x00dd7,
+ 0x00dd8, 0x00dd9, 0x00dda, 0x00ddb, 0x00ddc, 0x00ddd, 0x00dde, 0x00ddf,
+ 0x00de0, 0x00de1, 0x00de2, 0x00de3, 0x00de4, 0x00de5, 0x00de6, 0x00de7,
+ 0x00de8, 0x00de9, 0x00dea, 0x00deb, 0x00dec, 0x00ded, 0x00dee, 0x00def,
+ 0x00df0, 0x00df1, 0x00df2, 0x00df3, 0x00df4, 0x00df5, 0x00df6, 0x00df7,
+ 0x00df8, 0x00df9, 0x00dfa, 0x00dfb, 0x00dfc, 0x00dfd, 0x00dfe, 0x00dff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0e[] = {
+ 0x00e00, 0x00e01, 0x00e02, 0x00e03, 0x00e04, 0x00e05, 0x00e06, 0x00e07,
+ 0x00e08, 0x00e09, 0x00e0a, 0x00e0b, 0x00e0c, 0x00e0d, 0x00e0e, 0x00e0f,
+ 0x00e10, 0x00e11, 0x00e12, 0x00e13, 0x00e14, 0x00e15, 0x00e16, 0x00e17,
+ 0x00e18, 0x00e19, 0x00e1a, 0x00e1b, 0x00e1c, 0x00e1d, 0x00e1e, 0x00e1f,
+ 0x00e20, 0x00e21, 0x00e22, 0x00e23, 0x00e24, 0x00e25, 0x00e26, 0x00e27,
+ 0x00e28, 0x00e29, 0x00e2a, 0x00e2b, 0x00e2c, 0x00e2d, 0x00e2e, 0x00e2f,
+ 0x00e30, 0x00e31, 0x00e32, 0x00e33, 0x00e34, 0x00e35, 0x00e36, 0x00e37,
+ 0x00e38, 0x00e39, 0x00e3a, 0x00e3b, 0x00e3c, 0x00e3d, 0x00e3e, 0x00e3f,
+ 0x00e40, 0x00e41, 0x00e42, 0x00e43, 0x00e44, 0x00e45, 0x00e46, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00e4c, 0x00e4d, 0x00000, 0x00e4f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00e5a, 0x00e5b, 0x00e5c, 0x00e5d, 0x00e5e, 0x00e5f,
+ 0x00e60, 0x00e61, 0x00e62, 0x00e63, 0x00e64, 0x00e65, 0x00e66, 0x00e67,
+ 0x00e68, 0x00e69, 0x00e6a, 0x00e6b, 0x00e6c, 0x00e6d, 0x00e6e, 0x00e6f,
+ 0x00e70, 0x00e71, 0x00e72, 0x00e73, 0x00e74, 0x00e75, 0x00e76, 0x00e77,
+ 0x00e78, 0x00e79, 0x00e7a, 0x00e7b, 0x00e7c, 0x00e7d, 0x00e7e, 0x00e7f,
+ 0x00e80, 0x00e81, 0x00e82, 0x00e83, 0x00e84, 0x00e85, 0x00e86, 0x00e87,
+ 0x00e88, 0x00e89, 0x00e8a, 0x00e8b, 0x00e8c, 0x00e8d, 0x00e8e, 0x00e8f,
+ 0x00e90, 0x00e91, 0x00e92, 0x00e93, 0x00e94, 0x00e95, 0x00e96, 0x00e97,
+ 0x00e98, 0x00e99, 0x00e9a, 0x00e9b, 0x00e9c, 0x00e9d, 0x00e9e, 0x00e9f,
+ 0x00ea0, 0x00ea1, 0x00ea2, 0x00ea3, 0x00ea4, 0x00ea5, 0x00ea6, 0x00ea7,
+ 0x00ea8, 0x00ea9, 0x00eaa, 0x00eab, 0x00eac, 0x00ead, 0x00eae, 0x00eaf,
+ 0x00eb0, 0x00eb1, 0x00eb2, 0x00eb3, 0x00eb4, 0x00eb5, 0x00eb6, 0x00eb7,
+ 0x00eb8, 0x00eb9, 0x00eba, 0x00ebb, 0x00ebc, 0x00ebd, 0x00ebe, 0x00ebf,
+ 0x00ec0, 0x00ec1, 0x00ec2, 0x00ec3, 0x00ec4, 0x00ec5, 0x00ec6, 0x00ec7,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00ecc, 0x00ecd, 0x00ece, 0x00ecf,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00eda, 0x00edb, 0x00edc, 0x00edd, 0x00ede, 0x00edf,
+ 0x00ee0, 0x00ee1, 0x00ee2, 0x00ee3, 0x00ee4, 0x00ee5, 0x00ee6, 0x00ee7,
+ 0x00ee8, 0x00ee9, 0x00eea, 0x00eeb, 0x00eec, 0x00eed, 0x00eee, 0x00eef,
+ 0x00ef0, 0x00ef1, 0x00ef2, 0x00ef3, 0x00ef4, 0x00ef5, 0x00ef6, 0x00ef7,
+ 0x00ef8, 0x00ef9, 0x00efa, 0x00efb, 0x00efc, 0x00efd, 0x00efe, 0x00eff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0f[] = {
+ 0x00f00, 0x00f01, 0x00f02, 0x00f03, 0x00f04, 0x00f05, 0x00f06, 0x00f07,
+ 0x00f08, 0x00f09, 0x00f0a, 0x00f0b, 0x00f0b, 0x00f0d, 0x00f0e, 0x00f0f,
+ 0x00f10, 0x00f11, 0x00f12, 0x00f13, 0x00f14, 0x00f15, 0x00f16, 0x00f17,
+ 0x00000, 0x00000, 0x00f1a, 0x00f1b, 0x00f1c, 0x00f1d, 0x00f1e, 0x00f1f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036,
+ 0x00037, 0x00038, 0x00039, 0x00030, 0x00f34, 0x00000, 0x00f36, 0x00000,
+ 0x00f38, 0x00000, 0x00f3a, 0x00f3b, 0x00f3c, 0x00f3d, 0x00f3e, 0x00f3f,
+ 0x00f40, 0x00f41, 0x00f42, 0x00f43, 0x00f44, 0x00f45, 0x00f46, 0x00f47,
+ 0x00f48, 0x00f49, 0x00f4a, 0x00f4b, 0x00f4c, 0x00f4d, 0x00f4e, 0x00f4f,
+ 0x00f50, 0x00f51, 0x00f52, 0x00f53, 0x00f54, 0x00f55, 0x00f56, 0x00f57,
+ 0x00f58, 0x00f59, 0x00f5a, 0x00f5b, 0x00f5c, 0x00f5d, 0x00f5e, 0x00f5f,
+ 0x00f60, 0x00f61, 0x00f62, 0x00f63, 0x00f64, 0x00f65, 0x00f66, 0x00f67,
+ 0x00f68, 0x00f69, 0x00f62, 0x00f6b, 0x00f6c, 0x00f6d, 0x00f6e, 0x00f6f,
+ 0x00f70, 0x00f71, 0x00f72, 0x00f73, 0x00f74, 0x00f75, 0x00f76, 0x00f77,
+ 0x00f78, 0x00f79, 0x00f7a, 0x00f7b, 0x00f7c, 0x00f7d, 0x00000, 0x00000,
+ 0x00f80, 0x00f81, 0x00000, 0x00000, 0x00f84, 0x00f85, 0x00000, 0x00000,
+ 0x00f88, 0x00f89, 0x00f8a, 0x00f8b, 0x00f8c, 0x00f8d, 0x00f8e, 0x00f8f,
+ 0x00f90, 0x00f91, 0x00f92, 0x00f93, 0x00f94, 0x00f95, 0x00f96, 0x00f97,
+ 0x00f98, 0x00f99, 0x00f9a, 0x00f9b, 0x00f9c, 0x00f9d, 0x00f9e, 0x00f9f,
+ 0x00fa0, 0x00fa1, 0x00fa2, 0x00fa3, 0x00fa4, 0x00fa5, 0x00fa6, 0x00fa7,
+ 0x00fa8, 0x00fa9, 0x00faa, 0x00fab, 0x00fac, 0x00fad, 0x00fae, 0x00faf,
+ 0x00fb0, 0x00fb1, 0x00fb2, 0x00fb3, 0x00fb4, 0x00fb5, 0x00fb6, 0x00fb7,
+ 0x00fb8, 0x00fb9, 0x00fad, 0x00fb1, 0x00fb2, 0x00fbd, 0x00fbe, 0x00fbf,
+ 0x00fc0, 0x00fc1, 0x00fc2, 0x00fc3, 0x00fc4, 0x00fc5, 0x00000, 0x00fc7,
+ 0x00fc8, 0x00fc9, 0x00fca, 0x00fcb, 0x00fcc, 0x00fcd, 0x00fce, 0x00fcf,
+ 0x00fd0, 0x00fd1, 0x00fd2, 0x00fd3, 0x00fd4, 0x00fd5, 0x00fd6, 0x00fd7,
+ 0x00fd8, 0x00fd9, 0x00fda, 0x00fdb, 0x00fdc, 0x00fdd, 0x00fde, 0x00fdf,
+ 0x00fe0, 0x00fe1, 0x00fe2, 0x00fe3, 0x00fe4, 0x00fe5, 0x00fe6, 0x00fe7,
+ 0x00fe8, 0x00fe9, 0x00fea, 0x00feb, 0x00fec, 0x00fed, 0x00fee, 0x00fef,
+ 0x00ff0, 0x00ff1, 0x00ff2, 0x00ff3, 0x00ff4, 0x00ff5, 0x00ff6, 0x00ff7,
+ 0x00ff8, 0x00ff9, 0x00ffa, 0x00ffb, 0x00ffc, 0x00ffd, 0x00ffe, 0x00fff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_10[] = {
+ 0x01000, 0x01001, 0x01002, 0x01003, 0x01004, 0x01005, 0x01006, 0x01007,
+ 0x01008, 0x01009, 0x0100a, 0x0100b, 0x0100c, 0x0100d, 0x0100e, 0x0100f,
+ 0x01010, 0x01011, 0x01012, 0x01013, 0x01014, 0x01015, 0x01016, 0x01017,
+ 0x01018, 0x01019, 0x0101a, 0x0101b, 0x0101c, 0x0101d, 0x0101e, 0x0101f,
+ 0x01020, 0x01021, 0x01022, 0x01023, 0x01024, 0x01025, 0x01026, 0x01027,
+ 0x01028, 0x01029, 0x0102a, 0x0102b, 0x0102c, 0x0102d, 0x0102e, 0x0102f,
+ 0x01030, 0x01031, 0x01032, 0x01033, 0x01034, 0x01035, 0x00000, 0x00000,
+ 0x00000, 0x01039, 0x0103a, 0x0103b, 0x0103c, 0x0103d, 0x0103e, 0x0103f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0104a, 0x0104b, 0x0104c, 0x0104d, 0x0104e, 0x0104f,
+ 0x01050, 0x01051, 0x01052, 0x01053, 0x01054, 0x01055, 0x01056, 0x01057,
+ 0x01058, 0x01059, 0x0105a, 0x0105b, 0x0105c, 0x0105d, 0x0105e, 0x0105f,
+ 0x01060, 0x01061, 0x01062, 0x01063, 0x01064, 0x01065, 0x01066, 0x01067,
+ 0x01068, 0x01069, 0x0106a, 0x0106b, 0x0106c, 0x0106d, 0x0106e, 0x0106f,
+ 0x01070, 0x01071, 0x01072, 0x01073, 0x01074, 0x01075, 0x01076, 0x01077,
+ 0x01078, 0x01079, 0x0107a, 0x0107b, 0x0107c, 0x0107d, 0x0107e, 0x0107f,
+ 0x01080, 0x01081, 0x01082, 0x01083, 0x01084, 0x01085, 0x01086, 0x01087,
+ 0x01088, 0x01089, 0x0108a, 0x0108b, 0x0108c, 0x0108d, 0x0108e, 0x0108f,
+ 0x01090, 0x01091, 0x01092, 0x01093, 0x01094, 0x01095, 0x01096, 0x01097,
+ 0x01098, 0x01099, 0x0109a, 0x0109b, 0x0109c, 0x0109d, 0x0109e, 0x0109f,
+ 0x010a0, 0x010a1, 0x010a2, 0x010a3, 0x010a4, 0x010a5, 0x010a6, 0x010a7,
+ 0x010a8, 0x010a9, 0x010aa, 0x010ab, 0x010ac, 0x010ad, 0x010ae, 0x010af,
+ 0x010b0, 0x010b1, 0x010b2, 0x010b3, 0x010b4, 0x010b5, 0x010b6, 0x010b7,
+ 0x010b8, 0x010b9, 0x010ba, 0x010bb, 0x010bc, 0x010bd, 0x010be, 0x010bf,
+ 0x010c0, 0x010c1, 0x010c2, 0x010c3, 0x010c4, 0x010c5, 0x010c6, 0x010c7,
+ 0x010c8, 0x010c9, 0x010ca, 0x010cb, 0x010cc, 0x010cd, 0x010ce, 0x010cf,
+ 0x010a0, 0x010a1, 0x010a2, 0x010a3, 0x010a4, 0x010a5, 0x010a6, 0x010a7,
+ 0x010a8, 0x010a9, 0x010aa, 0x010ab, 0x010ac, 0x010ad, 0x010ae, 0x010af,
+ 0x010b0, 0x010b1, 0x010b2, 0x010b3, 0x010b4, 0x010b5, 0x010b6, 0x010b7,
+ 0x010b8, 0x010b9, 0x010ba, 0x010bb, 0x010bc, 0x010bd, 0x010be, 0x010bf,
+ 0x010c0, 0x010c1, 0x010c2, 0x010c3, 0x010c4, 0x010c5, 0x010f6, 0x010f7,
+ 0x010f8, 0x010f9, 0x010fa, 0x010fb, 0x010fc, 0x010fd, 0x010fe, 0x010ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_13[] = {
+ 0x01300, 0x01301, 0x01302, 0x01303, 0x01304, 0x01305, 0x01306, 0x01307,
+ 0x01308, 0x01309, 0x0130a, 0x0130b, 0x0130c, 0x0130d, 0x0130e, 0x0130f,
+ 0x01310, 0x01311, 0x01312, 0x01313, 0x01314, 0x01315, 0x01316, 0x01317,
+ 0x01318, 0x01319, 0x0131a, 0x0131b, 0x0131c, 0x0131d, 0x0131e, 0x0131f,
+ 0x01320, 0x01321, 0x01322, 0x01323, 0x01324, 0x01325, 0x01326, 0x01327,
+ 0x01328, 0x01329, 0x0132a, 0x0132b, 0x0132c, 0x0132d, 0x0132e, 0x0132f,
+ 0x01330, 0x01331, 0x01332, 0x01333, 0x01334, 0x01335, 0x01336, 0x01337,
+ 0x01338, 0x01339, 0x0133a, 0x0133b, 0x0133c, 0x0133d, 0x0133e, 0x0133f,
+ 0x01340, 0x01341, 0x01342, 0x01343, 0x01344, 0x01345, 0x01346, 0x01347,
+ 0x01348, 0x01349, 0x0134a, 0x0134b, 0x0134c, 0x0134d, 0x0134e, 0x0134f,
+ 0x01350, 0x01351, 0x01352, 0x01353, 0x01354, 0x01355, 0x01356, 0x01357,
+ 0x01358, 0x01359, 0x0135a, 0x0135b, 0x0135c, 0x0135d, 0x0135e, 0x0135f,
+ 0x01360, 0x01361, 0x01362, 0x01363, 0x01364, 0x01365, 0x01366, 0x01367,
+ 0x01368, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x01372, 0x01373, 0x01374, 0x01375, 0x01376, 0x01377,
+ 0x01378, 0x01379, 0x0137a, 0x0137b, 0x0137c, 0x0137d, 0x0137e, 0x0137f,
+ 0x01380, 0x01381, 0x01382, 0x01383, 0x01384, 0x01385, 0x01386, 0x01387,
+ 0x01388, 0x01389, 0x0138a, 0x0138b, 0x0138c, 0x0138d, 0x0138e, 0x0138f,
+ 0x01390, 0x01391, 0x01392, 0x01393, 0x01394, 0x01395, 0x01396, 0x01397,
+ 0x01398, 0x01399, 0x0139a, 0x0139b, 0x0139c, 0x0139d, 0x0139e, 0x0139f,
+ 0x013a0, 0x013a1, 0x013a2, 0x013a3, 0x013a4, 0x013a5, 0x013a6, 0x013a7,
+ 0x013a8, 0x013a9, 0x013aa, 0x013ab, 0x013ac, 0x013ad, 0x013ae, 0x013af,
+ 0x013b0, 0x013b1, 0x013b2, 0x013b3, 0x013b4, 0x013b5, 0x013b6, 0x013b7,
+ 0x013b8, 0x013b9, 0x013ba, 0x013bb, 0x013bc, 0x013bd, 0x013be, 0x013bf,
+ 0x013c0, 0x013c1, 0x013c2, 0x013c3, 0x013c4, 0x013c5, 0x013c6, 0x013c7,
+ 0x013c8, 0x013c9, 0x013ca, 0x013cb, 0x013cc, 0x013cd, 0x013ce, 0x013cf,
+ 0x013d0, 0x013d1, 0x013d2, 0x013d3, 0x013d4, 0x013d5, 0x013d6, 0x013d7,
+ 0x013d8, 0x013d9, 0x013da, 0x013db, 0x013dc, 0x013dd, 0x013de, 0x013df,
+ 0x013e0, 0x013e1, 0x013e2, 0x013e3, 0x013e4, 0x013e5, 0x013e6, 0x013e7,
+ 0x013e8, 0x013e9, 0x013ea, 0x013eb, 0x013ec, 0x013ed, 0x013ee, 0x013ef,
+ 0x013f0, 0x013f1, 0x013f2, 0x013f3, 0x013f4, 0x013f5, 0x013f6, 0x013f7,
+ 0x013f8, 0x013f9, 0x013fa, 0x013fb, 0x013fc, 0x013fd, 0x013fe, 0x013ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_16[] = {
+ 0x01600, 0x01601, 0x01602, 0x01603, 0x01604, 0x01605, 0x01606, 0x01607,
+ 0x01608, 0x01609, 0x0160a, 0x0160b, 0x0160c, 0x0160d, 0x0160e, 0x0160f,
+ 0x01610, 0x01611, 0x01612, 0x01613, 0x01614, 0x01615, 0x01616, 0x01617,
+ 0x01618, 0x01619, 0x0161a, 0x0161b, 0x0161c, 0x0161d, 0x0161e, 0x0161f,
+ 0x01620, 0x01621, 0x01622, 0x01623, 0x01624, 0x01625, 0x01626, 0x01627,
+ 0x01628, 0x01629, 0x0162a, 0x0162b, 0x0162c, 0x0162d, 0x0162e, 0x0162f,
+ 0x01630, 0x01631, 0x01632, 0x01633, 0x01634, 0x01635, 0x01636, 0x01637,
+ 0x01638, 0x01639, 0x0163a, 0x0163b, 0x0163c, 0x0163d, 0x0163e, 0x0163f,
+ 0x01640, 0x01641, 0x01642, 0x01643, 0x01644, 0x01645, 0x01646, 0x01647,
+ 0x01648, 0x01649, 0x0164a, 0x0164b, 0x0164c, 0x0164d, 0x0164e, 0x0164f,
+ 0x01650, 0x01651, 0x01652, 0x01653, 0x01654, 0x01655, 0x01656, 0x01657,
+ 0x01658, 0x01659, 0x0165a, 0x0165b, 0x0165c, 0x0165d, 0x0165e, 0x0165f,
+ 0x01660, 0x01661, 0x01662, 0x01663, 0x01664, 0x01665, 0x01666, 0x01667,
+ 0x01668, 0x01669, 0x0166a, 0x0166b, 0x0166c, 0x0166d, 0x0166e, 0x0166f,
+ 0x01670, 0x01671, 0x01672, 0x01673, 0x01674, 0x01675, 0x01676, 0x01677,
+ 0x01678, 0x01679, 0x0167a, 0x0167b, 0x0167c, 0x0167d, 0x0167e, 0x0167f,
+ 0x01680, 0x01681, 0x01682, 0x01683, 0x01684, 0x01685, 0x01686, 0x01687,
+ 0x01688, 0x01689, 0x0168a, 0x0168b, 0x0168c, 0x0168d, 0x0168e, 0x0168f,
+ 0x01690, 0x01691, 0x01692, 0x01693, 0x01694, 0x01695, 0x01696, 0x01697,
+ 0x01698, 0x01699, 0x0169a, 0x0169b, 0x0169c, 0x0169d, 0x0169e, 0x0169f,
+ 0x016a0, 0x016a0, 0x016a2, 0x016a3, 0x016a2, 0x016a2, 0x016a6, 0x016a6,
+ 0x016a8, 0x016a8, 0x016aa, 0x016ab, 0x016a8, 0x016a8, 0x016a8, 0x016af,
+ 0x016b0, 0x016b1, 0x016b2, 0x016b2, 0x016b2, 0x016b2, 0x016b2, 0x016b7,
+ 0x016b8, 0x016b9, 0x016ba, 0x016ba, 0x016ba, 0x016ba, 0x016be, 0x016be,
+ 0x016be, 0x016c1, 0x016c1, 0x016c3, 0x016c3, 0x016c5, 0x016c5, 0x016c7,
+ 0x016c8, 0x016c9, 0x016ca, 0x016ca, 0x016ca, 0x016ca, 0x016ca, 0x016cf,
+ 0x016cf, 0x016cf, 0x016d2, 0x016d2, 0x016d2, 0x016c8, 0x016d6, 0x016d7,
+ 0x016d7, 0x016d7, 0x016da, 0x016da, 0x016dc, 0x016dc, 0x016de, 0x016df,
+ 0x016e0, 0x016e1, 0x016e2, 0x016e3, 0x016e4, 0x016e5, 0x016e6, 0x016e6,
+ 0x016e6, 0x016b9, 0x016ca, 0x016eb, 0x016ec, 0x016ed, 0x016ee, 0x016ef,
+ 0x016f0, 0x016f1, 0x016f2, 0x016f3, 0x016f4, 0x016f5, 0x016f6, 0x016f7,
+ 0x016f8, 0x016f9, 0x016fa, 0x016fb, 0x016fc, 0x016fd, 0x016fe, 0x016ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_17[] = {
+ 0x01700, 0x01701, 0x01702, 0x01703, 0x01704, 0x01705, 0x01706, 0x01707,
+ 0x01708, 0x01709, 0x0170a, 0x0170b, 0x0170c, 0x0170d, 0x0170e, 0x0170f,
+ 0x01710, 0x01711, 0x01712, 0x01713, 0x01714, 0x01715, 0x01716, 0x01717,
+ 0x01718, 0x01719, 0x0171a, 0x0171b, 0x0171c, 0x0171d, 0x0171e, 0x0171f,
+ 0x01720, 0x01721, 0x01722, 0x01723, 0x01724, 0x01725, 0x01726, 0x01727,
+ 0x01728, 0x01729, 0x0172a, 0x0172b, 0x0172c, 0x0172d, 0x0172e, 0x0172f,
+ 0x01730, 0x01731, 0x01732, 0x01733, 0x01734, 0x01735, 0x01736, 0x01737,
+ 0x01738, 0x01739, 0x0173a, 0x0173b, 0x0173c, 0x0173d, 0x0173e, 0x0173f,
+ 0x01740, 0x01741, 0x01742, 0x01743, 0x01744, 0x01745, 0x01746, 0x01747,
+ 0x01748, 0x01749, 0x0174a, 0x0174b, 0x0174c, 0x0174d, 0x0174e, 0x0174f,
+ 0x01750, 0x01751, 0x01752, 0x01753, 0x01754, 0x01755, 0x01756, 0x01757,
+ 0x01758, 0x01759, 0x0175a, 0x0175b, 0x0175c, 0x0175d, 0x0175e, 0x0175f,
+ 0x01760, 0x01761, 0x01762, 0x01763, 0x01764, 0x01765, 0x01766, 0x01767,
+ 0x01768, 0x01769, 0x0176a, 0x0176b, 0x0176c, 0x0176d, 0x0176e, 0x0176f,
+ 0x01770, 0x01771, 0x01772, 0x01773, 0x01774, 0x01775, 0x01776, 0x01777,
+ 0x01778, 0x01779, 0x0177a, 0x0177b, 0x0177c, 0x0177d, 0x0177e, 0x0177f,
+ 0x01780, 0x01781, 0x01782, 0x01783, 0x01784, 0x01785, 0x01786, 0x01787,
+ 0x01788, 0x01789, 0x0178a, 0x0178b, 0x0178c, 0x0178d, 0x0178e, 0x0178f,
+ 0x01790, 0x01791, 0x01792, 0x01793, 0x01794, 0x01795, 0x01796, 0x01797,
+ 0x01798, 0x01799, 0x0179a, 0x0179b, 0x0179c, 0x0179d, 0x0179e, 0x0179f,
+ 0x017a0, 0x017a1, 0x017a2, 0x017a3, 0x017a4, 0x017a5, 0x017a6, 0x017a7,
+ 0x017a8, 0x017a9, 0x017aa, 0x017ab, 0x017ac, 0x017ad, 0x017ae, 0x017af,
+ 0x017b0, 0x017b1, 0x017b2, 0x017b3, 0x017b4, 0x017b5, 0x017b6, 0x017b7,
+ 0x017b8, 0x017b9, 0x017ba, 0x017bb, 0x017bc, 0x017bd, 0x017be, 0x017bf,
+ 0x017c0, 0x017c1, 0x017c2, 0x017c3, 0x017c4, 0x017c5, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x017d2, 0x00000, 0x017d4, 0x017d5, 0x017d6, 0x017d7,
+ 0x017d8, 0x017d9, 0x017da, 0x017db, 0x017dc, 0x00000, 0x017de, 0x017df,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x017ea, 0x017eb, 0x017ec, 0x017ed, 0x017ee, 0x017ef,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x017fa, 0x017fb, 0x017fc, 0x017fd, 0x017fe, 0x017ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_18[] = {
+ 0x01800, 0x01801, 0x01802, 0x01803, 0x01804, 0x01805, 0x01806, 0x01807,
+ 0x01808, 0x01809, 0x0180a, 0x00000, 0x00000, 0x00000, 0x00000, 0x0180f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0181a, 0x0181b, 0x0181c, 0x0181d, 0x0181e, 0x0181f,
+ 0x01820, 0x01821, 0x01822, 0x01823, 0x01824, 0x01825, 0x01826, 0x01827,
+ 0x01828, 0x01829, 0x0182a, 0x0182b, 0x0182c, 0x0182d, 0x0182e, 0x0182f,
+ 0x01830, 0x01831, 0x01832, 0x01833, 0x01834, 0x01835, 0x01836, 0x01837,
+ 0x01838, 0x01839, 0x0183a, 0x0183b, 0x0183c, 0x0183d, 0x0183e, 0x0183f,
+ 0x01840, 0x01841, 0x01842, 0x01843, 0x01844, 0x01845, 0x01846, 0x01847,
+ 0x01848, 0x01849, 0x0184a, 0x0184b, 0x0184c, 0x0184d, 0x0184e, 0x0184f,
+ 0x01850, 0x01851, 0x01852, 0x01853, 0x01854, 0x01855, 0x01856, 0x01857,
+ 0x01858, 0x01859, 0x0185a, 0x0185b, 0x0185c, 0x0185d, 0x0185e, 0x0185f,
+ 0x01860, 0x01861, 0x01862, 0x01863, 0x01864, 0x01865, 0x01866, 0x01867,
+ 0x01868, 0x01869, 0x0186a, 0x0186b, 0x0186c, 0x0186d, 0x0186e, 0x0186f,
+ 0x01870, 0x01871, 0x01872, 0x01873, 0x01874, 0x01875, 0x01876, 0x01877,
+ 0x01878, 0x01879, 0x0187a, 0x0187b, 0x0187c, 0x0187d, 0x0187e, 0x0187f,
+ 0x01880, 0x01881, 0x01882, 0x01883, 0x01884, 0x01885, 0x01886, 0x01887,
+ 0x01888, 0x01889, 0x0188a, 0x0188b, 0x0188c, 0x0188d, 0x0188e, 0x0188f,
+ 0x01890, 0x01891, 0x01892, 0x01893, 0x01894, 0x01895, 0x01896, 0x01897,
+ 0x01898, 0x01899, 0x0189a, 0x0189b, 0x0189c, 0x0189d, 0x0189e, 0x0189f,
+ 0x018a0, 0x018a1, 0x018a2, 0x018a3, 0x018a4, 0x018a5, 0x018a6, 0x018a7,
+ 0x018a8, 0x018a9, 0x018aa, 0x018ab, 0x018ac, 0x018ad, 0x018ae, 0x018af,
+ 0x018b0, 0x018b1, 0x018b2, 0x018b3, 0x018b4, 0x018b5, 0x018b6, 0x018b7,
+ 0x018b8, 0x018b9, 0x018ba, 0x018bb, 0x018bc, 0x018bd, 0x018be, 0x018bf,
+ 0x018c0, 0x018c1, 0x018c2, 0x018c3, 0x018c4, 0x018c5, 0x018c6, 0x018c7,
+ 0x018c8, 0x018c9, 0x018ca, 0x018cb, 0x018cc, 0x018cd, 0x018ce, 0x018cf,
+ 0x018d0, 0x018d1, 0x018d2, 0x018d3, 0x018d4, 0x018d5, 0x018d6, 0x018d7,
+ 0x018d8, 0x018d9, 0x018da, 0x018db, 0x018dc, 0x018dd, 0x018de, 0x018df,
+ 0x018e0, 0x018e1, 0x018e2, 0x018e3, 0x018e4, 0x018e5, 0x018e6, 0x018e7,
+ 0x018e8, 0x018e9, 0x018ea, 0x018eb, 0x018ec, 0x018ed, 0x018ee, 0x018ef,
+ 0x018f0, 0x018f1, 0x018f2, 0x018f3, 0x018f4, 0x018f5, 0x018f6, 0x018f7,
+ 0x018f8, 0x018f9, 0x018fa, 0x018fb, 0x018fc, 0x018fd, 0x018fe, 0x018ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_19[] = {
+ 0x01900, 0x01901, 0x01902, 0x01903, 0x01904, 0x01905, 0x01906, 0x01907,
+ 0x01908, 0x01909, 0x0190a, 0x0190b, 0x0190c, 0x0190d, 0x0190e, 0x0190f,
+ 0x01910, 0x01911, 0x01912, 0x01913, 0x01914, 0x01915, 0x01916, 0x01917,
+ 0x01918, 0x01919, 0x0191a, 0x0191b, 0x0191c, 0x0191d, 0x0191e, 0x0191f,
+ 0x01920, 0x01921, 0x01922, 0x01923, 0x01924, 0x01925, 0x01926, 0x01927,
+ 0x01928, 0x01929, 0x0192a, 0x0192b, 0x0192c, 0x0192d, 0x0192e, 0x0192f,
+ 0x01930, 0x01931, 0x01932, 0x01933, 0x01934, 0x01935, 0x01936, 0x01937,
+ 0x01938, 0x00000, 0x00000, 0x00000, 0x0193c, 0x0193d, 0x0193e, 0x0193f,
+ 0x01940, 0x01941, 0x01942, 0x01943, 0x01944, 0x01945, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x01950, 0x01951, 0x01952, 0x01953, 0x01954, 0x01955, 0x01956, 0x01957,
+ 0x01958, 0x01959, 0x0195a, 0x0195b, 0x0195c, 0x0195d, 0x0195e, 0x0195f,
+ 0x01960, 0x01961, 0x01962, 0x01963, 0x01964, 0x01965, 0x01966, 0x01967,
+ 0x01968, 0x01969, 0x0196a, 0x0196b, 0x0196c, 0x0196d, 0x0196e, 0x0196f,
+ 0x01970, 0x01971, 0x01972, 0x01973, 0x01974, 0x01975, 0x01976, 0x01977,
+ 0x01978, 0x01979, 0x0197a, 0x0197b, 0x0197c, 0x0197d, 0x0197e, 0x0197f,
+ 0x01980, 0x01981, 0x01982, 0x01983, 0x01984, 0x01985, 0x01986, 0x01987,
+ 0x01988, 0x01989, 0x0198a, 0x0198b, 0x0198c, 0x0198d, 0x0198e, 0x0198f,
+ 0x01990, 0x01991, 0x01992, 0x01993, 0x01994, 0x01995, 0x01996, 0x01997,
+ 0x01998, 0x01999, 0x0199a, 0x0199b, 0x0199c, 0x0199d, 0x0199e, 0x0199f,
+ 0x019a0, 0x019a1, 0x019a2, 0x019a3, 0x019a4, 0x019a5, 0x019a6, 0x019a7,
+ 0x019a8, 0x019a9, 0x019aa, 0x019ab, 0x019ac, 0x019ad, 0x019ae, 0x019af,
+ 0x019b0, 0x019b1, 0x019b2, 0x019b3, 0x019b4, 0x019b5, 0x019b6, 0x019b7,
+ 0x019b8, 0x019b9, 0x019ba, 0x019bb, 0x019bc, 0x019bd, 0x019be, 0x019bf,
+ 0x019c0, 0x019c1, 0x019c2, 0x019c3, 0x019c4, 0x019c5, 0x019c6, 0x019c7,
+ 0x019c8, 0x019c9, 0x019ca, 0x019cb, 0x019cc, 0x019cd, 0x019ce, 0x019cf,
+ 0x019d0, 0x019d1, 0x019d2, 0x019d3, 0x019d4, 0x019d5, 0x019d6, 0x019d7,
+ 0x019d8, 0x019d9, 0x019da, 0x019db, 0x019dc, 0x019dd, 0x019de, 0x019df,
+ 0x019e0, 0x019e1, 0x019e2, 0x019e3, 0x019e4, 0x019e5, 0x019e6, 0x019e7,
+ 0x019e8, 0x019e9, 0x019ea, 0x019eb, 0x019ec, 0x019ed, 0x019ee, 0x019ef,
+ 0x019f0, 0x019f1, 0x019f2, 0x019f3, 0x019f4, 0x019f5, 0x019f6, 0x019f7,
+ 0x019f8, 0x019f9, 0x019fa, 0x019fb, 0x019fc, 0x019fd, 0x019fe, 0x019ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1d[] = {
+ 0x01d00, 0x01d01, 0x01d02, 0x01d03, 0x01d04, 0x01d05, 0x01d06, 0x01d07,
+ 0x01d08, 0x01d09, 0x01d0a, 0x01d0b, 0x01d0c, 0x01d0d, 0x01d0e, 0x01d0f,
+ 0x01d10, 0x01d11, 0x01d12, 0x01d13, 0x01d14, 0x01d15, 0x01d16, 0x01d17,
+ 0x01d18, 0x01d19, 0x01d1a, 0x01d1b, 0x01d1c, 0x01d1d, 0x01d1e, 0x01d1f,
+ 0x01d20, 0x01d21, 0x01d22, 0x01d23, 0x01d24, 0x01d25, 0x01d26, 0x01d27,
+ 0x01d28, 0x01d29, 0x01d2a, 0x01d2b, 0x00041, 0x000c6, 0x00042, 0x01d2f,
+ 0x00044, 0x00045, 0x0018e, 0x00047, 0x00048, 0x00049, 0x0004a, 0x0004b,
+ 0x0004c, 0x0004d, 0x0004e, 0x01d3b, 0x0004f, 0x00222, 0x00050, 0x00052,
+ 0x00054, 0x00055, 0x00057, 0x00041, 0x00250, 0x00251, 0x01d02, 0x00042,
+ 0x00044, 0x00045, 0x0018f, 0x00190, 0x01d08, 0x00047, 0x01d09, 0x0004b,
+ 0x0004d, 0x0014a, 0x0004f, 0x00186, 0x01d16, 0x01d17, 0x00050, 0x00054,
+ 0x00055, 0x01d1d, 0x0019c, 0x00056, 0x01d25, 0x00392, 0x00393, 0x00394,
+ 0x003a6, 0x003a7, 0x00049, 0x00052, 0x00055, 0x00056, 0x00392, 0x00393,
+ 0x003a1, 0x003a6, 0x003a7, 0x01d6b, 0x01d6c, 0x01d6d, 0x01d6e, 0x01d6f,
+ 0x01d70, 0x01d71, 0x01d72, 0x01d73, 0x01d74, 0x01d75, 0x01d76, 0x01d77,
+ 0x01d78, 0x01d79, 0x01d7a, 0x01d7b, 0x01d7c, 0x01d7d, 0x01d7e, 0x01d7f,
+ 0x01d80, 0x01d81, 0x01d82, 0x01d83, 0x01d84, 0x01d85, 0x01d86, 0x01d87,
+ 0x01d88, 0x01d89, 0x01d8a, 0x01d8b, 0x01d8c, 0x01d8d, 0x01d8e, 0x01d8f,
+ 0x01d90, 0x01d91, 0x01d92, 0x01d93, 0x01d94, 0x01d95, 0x01d96, 0x01d97,
+ 0x01d98, 0x01d99, 0x01d9a, 0x01d9b, 0x01d9c, 0x01d9d, 0x01d9e, 0x01d9f,
+ 0x01da0, 0x01da1, 0x01da2, 0x01da3, 0x01da4, 0x01da5, 0x01da6, 0x01da7,
+ 0x01da8, 0x01da9, 0x01daa, 0x01dab, 0x01dac, 0x01dad, 0x01dae, 0x01daf,
+ 0x01db0, 0x01db1, 0x01db2, 0x01db3, 0x01db4, 0x01db5, 0x01db6, 0x01db7,
+ 0x01db8, 0x01db9, 0x01dba, 0x01dbb, 0x01dbc, 0x01dbd, 0x01dbe, 0x01dbf,
+ 0x01dc0, 0x01dc1, 0x01dc2, 0x01dc3, 0x01dc4, 0x01dc5, 0x01dc6, 0x01dc7,
+ 0x01dc8, 0x01dc9, 0x01dca, 0x01dcb, 0x01dcc, 0x01dcd, 0x01dce, 0x01dcf,
+ 0x01dd0, 0x01dd1, 0x01dd2, 0x01dd3, 0x01dd4, 0x01dd5, 0x01dd6, 0x01dd7,
+ 0x01dd8, 0x01dd9, 0x01dda, 0x01ddb, 0x01ddc, 0x01ddd, 0x01dde, 0x01ddf,
+ 0x01de0, 0x01de1, 0x01de2, 0x01de3, 0x01de4, 0x01de5, 0x01de6, 0x01de7,
+ 0x01de8, 0x01de9, 0x01dea, 0x01deb, 0x01dec, 0x01ded, 0x01dee, 0x01def,
+ 0x01df0, 0x01df1, 0x01df2, 0x01df3, 0x01df4, 0x01df5, 0x01df6, 0x01df7,
+ 0x01df8, 0x01df9, 0x01dfa, 0x01dfb, 0x01dfc, 0x01dfd, 0x01dfe, 0x01dff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1e[] = {
+ 0x00041, 0x00041, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042,
+ 0x00043, 0x00043, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044,
+ 0x00044, 0x00044, 0x00044, 0x00044, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00046, 0x00046,
+ 0x00047, 0x00047, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048,
+ 0x00048, 0x00048, 0x00048, 0x00048, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004c, 0x0004c,
+ 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004d, 0x0004d,
+ 0x0004d, 0x0004d, 0x0004d, 0x0004d, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00050, 0x00050, 0x00050, 0x00050,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054,
+ 0x00054, 0x00054, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00056, 0x00056, 0x00056, 0x00056,
+ 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057,
+ 0x00057, 0x00057, 0x00058, 0x00058, 0x00058, 0x00058, 0x00059, 0x00059,
+ 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00048, 0x00054,
+ 0x00057, 0x00059, 0x01e9a, 0x00053, 0x01e9c, 0x01e9d, 0x01e9e, 0x01e9f,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059,
+ 0x00059, 0x00059, 0x01efa, 0x01efb, 0x01efc, 0x01efd, 0x01efe, 0x01eff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1f[] = {
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f16, 0x01f17,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f1e, 0x01f1f,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f46, 0x01f47,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f4e, 0x01f4f,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5,
+ 0x01f58, 0x003a5, 0x01f5a, 0x003a5, 0x01f5c, 0x003a5, 0x01f5e, 0x003a5,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x00391, 0x00395, 0x00395, 0x00397, 0x00397, 0x00399, 0x00399,
+ 0x0039f, 0x0039f, 0x003a5, 0x003a5, 0x003a9, 0x003a9, 0x01f7e, 0x01f7f,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x01fb5, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x01fbd, 0x00399, 0x01fbd,
+ 0x01fc0, 0x000a8, 0x00397, 0x00397, 0x00397, 0x01fc5, 0x00397, 0x00397,
+ 0x00395, 0x00395, 0x00397, 0x00397, 0x00397, 0x01fbd, 0x01fbd, 0x01fbd,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x01fd4, 0x01fd5, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x01fdc, 0x01fdd, 0x01fdd, 0x01fdd,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a1, 0x003a1, 0x003a5, 0x003a5,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a1, 0x000a8, 0x000a8, 0x00060,
+ 0x01ff0, 0x01ff1, 0x003a9, 0x003a9, 0x003a9, 0x01ff5, 0x003a9, 0x003a9,
+ 0x0039f, 0x0039f, 0x003a9, 0x003a9, 0x003a9, 0x000b4, 0x01fdd, 0x01fff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_20[] = {
+ 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020,
+ 0x00020, 0x00020, 0x00020, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x02010, 0x02010, 0x02012, 0x02013, 0x02014, 0x02015, 0x02016, 0x02017,
+ 0x02018, 0x02019, 0x0201a, 0x0201b, 0x0201c, 0x0201d, 0x0201e, 0x0201f,
+ 0x02020, 0x02021, 0x02022, 0x02023, 0x0002e, 0x02025, 0x02026, 0x02027,
+ 0x02028, 0x02029, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00020,
+ 0x02030, 0x02031, 0x02032, 0x02033, 0x02034, 0x02035, 0x02036, 0x02037,
+ 0x02038, 0x02039, 0x0203a, 0x0203b, 0x0203c, 0x0203d, 0x0203e, 0x0203f,
+ 0x02040, 0x02041, 0x02042, 0x02043, 0x02044, 0x02045, 0x02046, 0x02047,
+ 0x02048, 0x02049, 0x0204a, 0x0204b, 0x0204c, 0x0204d, 0x0204e, 0x0204f,
+ 0x02050, 0x02051, 0x02052, 0x02053, 0x02054, 0x02055, 0x02056, 0x02057,
+ 0x02058, 0x02059, 0x0205a, 0x0205b, 0x0205c, 0x0205d, 0x0205e, 0x00020,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x02064, 0x02065, 0x02066, 0x02067,
+ 0x02068, 0x02069, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00030, 0x00049, 0x02072, 0x02073, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0002b, 0x0207b, 0x0003d, 0x00028, 0x00029, 0x0004e,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0002b, 0x0207b, 0x0003d, 0x00028, 0x00029, 0x0208f,
+ 0x02090, 0x02091, 0x02092, 0x02093, 0x02094, 0x02095, 0x02096, 0x02097,
+ 0x02098, 0x02099, 0x0209a, 0x0209b, 0x0209c, 0x0209d, 0x0209e, 0x0209f,
+ 0x020a0, 0x020a1, 0x020a2, 0x020a3, 0x020a4, 0x020a5, 0x020a6, 0x020a7,
+ 0x020a8, 0x020a9, 0x020aa, 0x020ab, 0x020ac, 0x020ad, 0x020ae, 0x020af,
+ 0x020b0, 0x020b1, 0x020b2, 0x020b3, 0x020b4, 0x020b5, 0x020b6, 0x020b7,
+ 0x020b8, 0x020b9, 0x020ba, 0x020bb, 0x020bc, 0x020bd, 0x020be, 0x020bf,
+ 0x020c0, 0x020c1, 0x020c2, 0x020c3, 0x020c4, 0x020c5, 0x020c6, 0x020c7,
+ 0x020c8, 0x020c9, 0x020ca, 0x020cb, 0x020cc, 0x020cd, 0x020ce, 0x020cf,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x020eb, 0x020ec, 0x020ed, 0x020ee, 0x020ef,
+ 0x020f0, 0x020f1, 0x020f2, 0x020f3, 0x020f4, 0x020f5, 0x020f6, 0x020f7,
+ 0x020f8, 0x020f9, 0x020fa, 0x020fb, 0x020fc, 0x020fd, 0x020fe, 0x020ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_21[] = {
+ 0x02100, 0x02101, 0x00043, 0x02103, 0x02104, 0x02105, 0x02106, 0x00190,
+ 0x02108, 0x02109, 0x00047, 0x00048, 0x00048, 0x00048, 0x00048, 0x00126,
+ 0x00049, 0x00049, 0x0004c, 0x0004c, 0x02114, 0x0004e, 0x02116, 0x02117,
+ 0x02118, 0x00050, 0x00051, 0x00052, 0x00052, 0x00052, 0x0211e, 0x0211f,
+ 0x02120, 0x02121, 0x02122, 0x02123, 0x0005a, 0x02125, 0x003a9, 0x02127,
+ 0x0005a, 0x02129, 0x0004b, 0x00041, 0x00042, 0x00043, 0x0212e, 0x00045,
+ 0x00045, 0x00046, 0x02132, 0x0004d, 0x0004f, 0x005d0, 0x005d1, 0x005d2,
+ 0x005d3, 0x00049, 0x0213a, 0x0213b, 0x0213c, 0x00393, 0x00393, 0x003a0,
+ 0x02140, 0x02141, 0x02142, 0x02143, 0x02144, 0x00044, 0x00044, 0x00045,
+ 0x00049, 0x0004a, 0x0214a, 0x0214b, 0x0214c, 0x0214d, 0x0214e, 0x0214f,
+ 0x02150, 0x02151, 0x02152, 0x02153, 0x02154, 0x02155, 0x02156, 0x02157,
+ 0x02158, 0x02159, 0x0215a, 0x0215b, 0x0215c, 0x0215d, 0x0215e, 0x0215f,
+ 0x00049, 0x02161, 0x02162, 0x02163, 0x00056, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x00058, 0x0216a, 0x0216b, 0x0004c, 0x00043, 0x00044, 0x0004d,
+ 0x00049, 0x02161, 0x02162, 0x02163, 0x00056, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x00058, 0x0216a, 0x0216b, 0x0004c, 0x00043, 0x00044, 0x0004d,
+ 0x02180, 0x02181, 0x02182, 0x02183, 0x02184, 0x02185, 0x02186, 0x02187,
+ 0x02188, 0x02189, 0x0218a, 0x0218b, 0x0218c, 0x0218d, 0x0218e, 0x0218f,
+ 0x02190, 0x02191, 0x02192, 0x02193, 0x02194, 0x02195, 0x02196, 0x02197,
+ 0x02198, 0x02199, 0x02190, 0x02192, 0x0219c, 0x0219d, 0x0219e, 0x0219f,
+ 0x021a0, 0x021a1, 0x021a2, 0x021a3, 0x021a4, 0x021a5, 0x021a6, 0x021a7,
+ 0x021a8, 0x021a9, 0x021aa, 0x021ab, 0x021ac, 0x021ad, 0x02194, 0x021af,
+ 0x021b0, 0x021b1, 0x021b2, 0x021b3, 0x021b4, 0x021b5, 0x021b6, 0x021b7,
+ 0x021b8, 0x021b9, 0x021ba, 0x021bb, 0x021bc, 0x021bd, 0x021be, 0x021bf,
+ 0x021c0, 0x021c1, 0x021c2, 0x021c3, 0x021c4, 0x021c5, 0x021c6, 0x021c7,
+ 0x021c8, 0x021c9, 0x021ca, 0x021cb, 0x021cc, 0x021cd, 0x021ce, 0x021cf,
+ 0x021cd, 0x021d1, 0x021cf, 0x021d3, 0x021ce, 0x021d5, 0x021d6, 0x021d7,
+ 0x021d8, 0x021d9, 0x021da, 0x021db, 0x021dc, 0x021dd, 0x021de, 0x021df,
+ 0x021e0, 0x021e1, 0x021e2, 0x021e3, 0x021e4, 0x021e5, 0x021e6, 0x021e7,
+ 0x021e8, 0x021e9, 0x021ea, 0x021eb, 0x021ec, 0x021ed, 0x021ee, 0x021ef,
+ 0x021f0, 0x021f1, 0x021f2, 0x021f3, 0x021f4, 0x021f5, 0x021f6, 0x021f7,
+ 0x021f8, 0x021f9, 0x021fa, 0x021fb, 0x021fc, 0x021fd, 0x021fe, 0x021ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_22[] = {
+ 0x02200, 0x02201, 0x02202, 0x02203, 0x02203, 0x02205, 0x02206, 0x02207,
+ 0x02208, 0x02208, 0x0220a, 0x0220b, 0x0220b, 0x0220d, 0x0220e, 0x0220f,
+ 0x02210, 0x02140, 0x0207b, 0x02213, 0x02214, 0x02215, 0x02216, 0x02217,
+ 0x02218, 0x02219, 0x0221a, 0x0221b, 0x0221c, 0x0221d, 0x0221e, 0x0221f,
+ 0x02220, 0x02221, 0x02222, 0x02223, 0x02223, 0x02225, 0x02225, 0x02227,
+ 0x02228, 0x02229, 0x0222a, 0x0222b, 0x0222c, 0x0222d, 0x0222e, 0x0222f,
+ 0x02230, 0x02231, 0x02232, 0x02233, 0x02234, 0x02235, 0x02236, 0x02237,
+ 0x02238, 0x02239, 0x0223a, 0x0223b, 0x0223c, 0x0223d, 0x0223e, 0x0223f,
+ 0x02240, 0x0223c, 0x02242, 0x02243, 0x02243, 0x02245, 0x02246, 0x02245,
+ 0x02248, 0x02248, 0x0224a, 0x0224b, 0x0224c, 0x0224d, 0x0224e, 0x0224f,
+ 0x02250, 0x02251, 0x02252, 0x02253, 0x02254, 0x02255, 0x02256, 0x02257,
+ 0x02258, 0x02259, 0x0225a, 0x0225b, 0x0225c, 0x0225d, 0x0225e, 0x0225f,
+ 0x0003d, 0x02261, 0x02261, 0x02263, 0x02264, 0x02265, 0x02266, 0x02267,
+ 0x02268, 0x02269, 0x0226a, 0x0226b, 0x0226c, 0x0224d, 0x0003c, 0x0003e,
+ 0x02264, 0x02265, 0x02272, 0x02273, 0x02272, 0x02273, 0x02276, 0x02277,
+ 0x02276, 0x02277, 0x0227a, 0x0227b, 0x0227c, 0x0227d, 0x0227e, 0x0227f,
+ 0x0227a, 0x0227b, 0x02282, 0x02283, 0x02282, 0x02283, 0x02286, 0x02287,
+ 0x02286, 0x02287, 0x0228a, 0x0228b, 0x0228c, 0x0228d, 0x0228e, 0x0228f,
+ 0x02290, 0x02291, 0x02292, 0x02293, 0x02294, 0x02295, 0x02296, 0x02297,
+ 0x02298, 0x02299, 0x0229a, 0x0229b, 0x0229c, 0x0229d, 0x0229e, 0x0229f,
+ 0x022a0, 0x022a1, 0x022a2, 0x022a3, 0x022a4, 0x022a5, 0x022a6, 0x022a7,
+ 0x022a8, 0x022a9, 0x022aa, 0x022ab, 0x022a2, 0x022a8, 0x022a9, 0x022ab,
+ 0x022b0, 0x022b1, 0x022b2, 0x022b3, 0x022b4, 0x022b5, 0x022b6, 0x022b7,
+ 0x022b8, 0x022b9, 0x022ba, 0x022bb, 0x022bc, 0x022bd, 0x022be, 0x022bf,
+ 0x022c0, 0x022c1, 0x022c2, 0x022c3, 0x022c4, 0x022c5, 0x022c6, 0x022c7,
+ 0x022c8, 0x022c9, 0x022ca, 0x022cb, 0x022cc, 0x022cd, 0x022ce, 0x022cf,
+ 0x022d0, 0x022d1, 0x022d2, 0x022d3, 0x022d4, 0x022d5, 0x022d6, 0x022d7,
+ 0x022d8, 0x022d9, 0x022da, 0x022db, 0x022dc, 0x022dd, 0x022de, 0x022df,
+ 0x0227c, 0x0227d, 0x02291, 0x02292, 0x022e4, 0x022e5, 0x022e6, 0x022e7,
+ 0x022e8, 0x022e9, 0x022b2, 0x022b3, 0x022b4, 0x022b5, 0x022ee, 0x022ef,
+ 0x022f0, 0x022f1, 0x022f2, 0x022f3, 0x022f4, 0x022f5, 0x022f6, 0x022f7,
+ 0x022f8, 0x022f9, 0x022fa, 0x022fb, 0x022fc, 0x022fd, 0x022fe, 0x022ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_24[] = {
+ 0x02400, 0x02401, 0x02402, 0x02403, 0x02404, 0x02405, 0x02406, 0x02407,
+ 0x02408, 0x02409, 0x0240a, 0x0240b, 0x0240c, 0x0240d, 0x0240e, 0x0240f,
+ 0x02410, 0x02411, 0x02412, 0x02413, 0x02414, 0x02415, 0x02416, 0x02417,
+ 0x02418, 0x02419, 0x0241a, 0x0241b, 0x0241c, 0x0241d, 0x0241e, 0x0241f,
+ 0x02420, 0x02421, 0x02422, 0x02423, 0x02424, 0x02425, 0x02426, 0x02427,
+ 0x02428, 0x02429, 0x0242a, 0x0242b, 0x0242c, 0x0242d, 0x0242e, 0x0242f,
+ 0x02430, 0x02431, 0x02432, 0x02433, 0x02434, 0x02435, 0x02436, 0x02437,
+ 0x02438, 0x02439, 0x0243a, 0x0243b, 0x0243c, 0x0243d, 0x0243e, 0x0243f,
+ 0x02440, 0x02441, 0x02442, 0x02443, 0x02444, 0x02445, 0x02446, 0x02447,
+ 0x02448, 0x02449, 0x0244a, 0x0244b, 0x0244c, 0x0244d, 0x0244e, 0x0244f,
+ 0x02450, 0x02451, 0x02452, 0x02453, 0x02454, 0x02455, 0x02456, 0x02457,
+ 0x02458, 0x02459, 0x0245a, 0x0245b, 0x0245c, 0x0245d, 0x0245e, 0x0245f,
+ 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038,
+ 0x00039, 0x02469, 0x0246a, 0x0246b, 0x0246c, 0x0246d, 0x0246e, 0x0246f,
+ 0x02470, 0x02471, 0x02472, 0x02473, 0x02474, 0x02475, 0x02476, 0x02477,
+ 0x02478, 0x02479, 0x0247a, 0x0247b, 0x0247c, 0x0247d, 0x0247e, 0x0247f,
+ 0x02480, 0x02481, 0x02482, 0x02483, 0x02484, 0x02485, 0x02486, 0x02487,
+ 0x02488, 0x02489, 0x0248a, 0x0248b, 0x0248c, 0x0248d, 0x0248e, 0x0248f,
+ 0x02490, 0x02491, 0x02492, 0x02493, 0x02494, 0x02495, 0x02496, 0x02497,
+ 0x02498, 0x02499, 0x0249a, 0x0249b, 0x0249c, 0x0249d, 0x0249e, 0x0249f,
+ 0x024a0, 0x024a1, 0x024a2, 0x024a3, 0x024a4, 0x024a5, 0x024a6, 0x024a7,
+ 0x024a8, 0x024a9, 0x024aa, 0x024ab, 0x024ac, 0x024ad, 0x024ae, 0x024af,
+ 0x024b0, 0x024b1, 0x024b2, 0x024b3, 0x024b4, 0x024b5, 0x00041, 0x00042,
+ 0x00043, 0x00044, 0x00045, 0x00046, 0x00047, 0x00048, 0x00049, 0x0004a,
+ 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f, 0x00050, 0x00051, 0x00052,
+ 0x00053, 0x00054, 0x00055, 0x00056, 0x00057, 0x00058, 0x00059, 0x0005a,
+ 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047, 0x00048,
+ 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f, 0x00050,
+ 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057, 0x00058,
+ 0x00059, 0x0005a, 0x00030, 0x0246a, 0x0246b, 0x0246c, 0x0246d, 0x0246e,
+ 0x0246f, 0x02470, 0x02471, 0x02472, 0x02473, 0x00031, 0x00032, 0x00033,
+ 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039, 0x02469, 0x00030
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_27[] = {
+ 0x02700, 0x02701, 0x02702, 0x02703, 0x02704, 0x02705, 0x02706, 0x02707,
+ 0x02708, 0x02709, 0x0270a, 0x0270b, 0x0270c, 0x0270d, 0x0270e, 0x0270f,
+ 0x02710, 0x02711, 0x02712, 0x02713, 0x02714, 0x02715, 0x02716, 0x02717,
+ 0x02718, 0x02719, 0x0271a, 0x0271b, 0x0271c, 0x0271d, 0x0271e, 0x0271f,
+ 0x02720, 0x02721, 0x02722, 0x02723, 0x02724, 0x02725, 0x02726, 0x02727,
+ 0x02728, 0x02729, 0x0272a, 0x0272b, 0x0272c, 0x0272d, 0x0272e, 0x0272f,
+ 0x02730, 0x02731, 0x02732, 0x02733, 0x02734, 0x02735, 0x02736, 0x02737,
+ 0x02738, 0x02739, 0x0273a, 0x0273b, 0x0273c, 0x0273d, 0x0273e, 0x0273f,
+ 0x02740, 0x02741, 0x02742, 0x02743, 0x02744, 0x02745, 0x02746, 0x02747,
+ 0x02748, 0x02749, 0x0274a, 0x0274b, 0x0274c, 0x0274d, 0x0274e, 0x0274f,
+ 0x02750, 0x02751, 0x02752, 0x02753, 0x02754, 0x02755, 0x02756, 0x02757,
+ 0x02758, 0x02759, 0x0275a, 0x0275b, 0x0275c, 0x0275d, 0x0275e, 0x0275f,
+ 0x02760, 0x02761, 0x02762, 0x02763, 0x02764, 0x02765, 0x02766, 0x02767,
+ 0x02768, 0x02769, 0x0276a, 0x0276b, 0x0276c, 0x0276d, 0x0276e, 0x0276f,
+ 0x02770, 0x02771, 0x02772, 0x02773, 0x02774, 0x02775, 0x00031, 0x00032,
+ 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039, 0x02469,
+ 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038,
+ 0x00039, 0x02469, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036,
+ 0x00037, 0x00038, 0x00039, 0x02469, 0x02794, 0x02795, 0x02796, 0x02797,
+ 0x02798, 0x02799, 0x0279a, 0x0279b, 0x0279c, 0x0279d, 0x0279e, 0x0279f,
+ 0x027a0, 0x027a1, 0x027a2, 0x027a3, 0x027a4, 0x027a5, 0x027a6, 0x027a7,
+ 0x027a8, 0x027a9, 0x027aa, 0x027ab, 0x027ac, 0x027ad, 0x027ae, 0x027af,
+ 0x027b0, 0x027b1, 0x027b2, 0x027b3, 0x027b4, 0x027b5, 0x027b6, 0x027b7,
+ 0x027b8, 0x027b9, 0x027ba, 0x027bb, 0x027bc, 0x027bd, 0x027be, 0x027bf,
+ 0x027c0, 0x027c1, 0x027c2, 0x027c3, 0x027c4, 0x027c5, 0x027c6, 0x027c7,
+ 0x027c8, 0x027c9, 0x027ca, 0x027cb, 0x027cc, 0x027cd, 0x027ce, 0x027cf,
+ 0x027d0, 0x027d1, 0x027d2, 0x027d3, 0x027d4, 0x027d5, 0x027d6, 0x027d7,
+ 0x027d8, 0x027d9, 0x027da, 0x027db, 0x027dc, 0x027dd, 0x027de, 0x027df,
+ 0x027e0, 0x027e1, 0x027e2, 0x027e3, 0x027e4, 0x027e5, 0x027e6, 0x027e7,
+ 0x027e8, 0x027e9, 0x027ea, 0x027eb, 0x027ec, 0x027ed, 0x027ee, 0x027ef,
+ 0x027f0, 0x027f1, 0x027f2, 0x027f3, 0x027f4, 0x027f5, 0x027f6, 0x027f7,
+ 0x027f8, 0x027f9, 0x027fa, 0x027fb, 0x027fc, 0x027fd, 0x027fe, 0x027ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2a[] = {
+ 0x02a00, 0x02a01, 0x02a02, 0x02a03, 0x02a04, 0x02a05, 0x02a06, 0x02a07,
+ 0x02a08, 0x02a09, 0x02a0a, 0x02a0b, 0x02a0c, 0x02a0d, 0x02a0e, 0x02a0f,
+ 0x02a10, 0x02a11, 0x02a12, 0x02a13, 0x02a14, 0x02a15, 0x02a16, 0x02a17,
+ 0x02a18, 0x02a19, 0x02a1a, 0x02a1b, 0x02a1c, 0x02a1d, 0x02a1e, 0x02a1f,
+ 0x02a20, 0x02a21, 0x02a22, 0x02a23, 0x02a24, 0x02a25, 0x02a26, 0x02a27,
+ 0x02a28, 0x02a29, 0x02a2a, 0x02a2b, 0x02a2c, 0x02a2d, 0x02a2e, 0x02a2f,
+ 0x02a30, 0x02a31, 0x02a32, 0x02a33, 0x02a34, 0x02a35, 0x02a36, 0x02a37,
+ 0x02a38, 0x02a39, 0x02a3a, 0x02a3b, 0x02a3c, 0x02a3d, 0x02a3e, 0x02a3f,
+ 0x02a40, 0x02a41, 0x02a42, 0x02a43, 0x02a44, 0x02a45, 0x02a46, 0x02a47,
+ 0x02a48, 0x02a49, 0x02a4a, 0x02a4b, 0x02a4c, 0x02a4d, 0x02a4e, 0x02a4f,
+ 0x02a50, 0x02a51, 0x02a52, 0x02a53, 0x02a54, 0x02a55, 0x02a56, 0x02a57,
+ 0x02a58, 0x02a59, 0x02a5a, 0x02a5b, 0x02a5c, 0x02a5d, 0x02a5e, 0x02a5f,
+ 0x02a60, 0x02a61, 0x02a62, 0x02a63, 0x02a64, 0x02a65, 0x02a66, 0x02a67,
+ 0x02a68, 0x02a69, 0x02a6a, 0x02a6b, 0x02a6c, 0x02a6d, 0x02a6e, 0x02a6f,
+ 0x02a70, 0x02a71, 0x02a72, 0x02a73, 0x02a74, 0x02a75, 0x02a76, 0x02a77,
+ 0x02a78, 0x02a79, 0x02a7a, 0x02a7b, 0x02a7c, 0x02a7d, 0x02a7e, 0x02a7f,
+ 0x02a80, 0x02a81, 0x02a82, 0x02a83, 0x02a84, 0x02a85, 0x02a86, 0x02a87,
+ 0x02a88, 0x02a89, 0x02a8a, 0x02a8b, 0x02a8c, 0x02a8d, 0x02a8e, 0x02a8f,
+ 0x02a90, 0x02a91, 0x02a92, 0x02a93, 0x02a94, 0x02a95, 0x02a96, 0x02a97,
+ 0x02a98, 0x02a99, 0x02a9a, 0x02a9b, 0x02a9c, 0x02a9d, 0x02a9e, 0x02a9f,
+ 0x02aa0, 0x02aa1, 0x02aa2, 0x02aa3, 0x02aa4, 0x02aa5, 0x02aa6, 0x02aa7,
+ 0x02aa8, 0x02aa9, 0x02aaa, 0x02aab, 0x02aac, 0x02aad, 0x02aae, 0x02aaf,
+ 0x02ab0, 0x02ab1, 0x02ab2, 0x02ab3, 0x02ab4, 0x02ab5, 0x02ab6, 0x02ab7,
+ 0x02ab8, 0x02ab9, 0x02aba, 0x02abb, 0x02abc, 0x02abd, 0x02abe, 0x02abf,
+ 0x02ac0, 0x02ac1, 0x02ac2, 0x02ac3, 0x02ac4, 0x02ac5, 0x02ac6, 0x02ac7,
+ 0x02ac8, 0x02ac9, 0x02aca, 0x02acb, 0x02acc, 0x02acd, 0x02ace, 0x02acf,
+ 0x02ad0, 0x02ad1, 0x02ad2, 0x02ad3, 0x02ad4, 0x02ad5, 0x02ad6, 0x02ad7,
+ 0x02ad8, 0x02ad9, 0x02ada, 0x02adb, 0x02adc, 0x02adc, 0x02ade, 0x02adf,
+ 0x02ae0, 0x02ae1, 0x02ae2, 0x02ae3, 0x02ae4, 0x02ae5, 0x02ae6, 0x02ae7,
+ 0x02ae8, 0x02ae9, 0x02aea, 0x02aeb, 0x02aec, 0x02aed, 0x02aee, 0x02aef,
+ 0x02af0, 0x02af1, 0x02af2, 0x02af3, 0x02af4, 0x02af5, 0x02af6, 0x02af7,
+ 0x02af8, 0x02af9, 0x02afa, 0x02afb, 0x02afc, 0x02afd, 0x02afe, 0x02aff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2e[] = {
+ 0x02e00, 0x02e01, 0x02e02, 0x02e03, 0x02e04, 0x02e05, 0x02e06, 0x02e07,
+ 0x02e08, 0x02e09, 0x02e0a, 0x02e0b, 0x02e0c, 0x02e0d, 0x02e0e, 0x02e0f,
+ 0x02e10, 0x02e11, 0x02e12, 0x02e13, 0x02e14, 0x02e15, 0x02e16, 0x02e17,
+ 0x02e18, 0x02e19, 0x02e1a, 0x02e1b, 0x02e1c, 0x02e1d, 0x02e1e, 0x02e1f,
+ 0x02e20, 0x02e21, 0x02e22, 0x02e23, 0x02e24, 0x02e25, 0x02e26, 0x02e27,
+ 0x02e28, 0x02e29, 0x02e2a, 0x02e2b, 0x02e2c, 0x02e2d, 0x02e2e, 0x02e2f,
+ 0x02e30, 0x02e31, 0x02e32, 0x02e33, 0x02e34, 0x02e35, 0x02e36, 0x02e37,
+ 0x02e38, 0x02e39, 0x02e3a, 0x02e3b, 0x02e3c, 0x02e3d, 0x02e3e, 0x02e3f,
+ 0x02e40, 0x02e41, 0x02e42, 0x02e43, 0x02e44, 0x02e45, 0x02e46, 0x02e47,
+ 0x02e48, 0x02e49, 0x02e4a, 0x02e4b, 0x02e4c, 0x02e4d, 0x02e4e, 0x02e4f,
+ 0x02e50, 0x02e51, 0x02e52, 0x02e53, 0x02e54, 0x02e55, 0x02e56, 0x02e57,
+ 0x02e58, 0x02e59, 0x02e5a, 0x02e5b, 0x02e5c, 0x02e5d, 0x02e5e, 0x02e5f,
+ 0x02e60, 0x02e61, 0x02e62, 0x02e63, 0x02e64, 0x02e65, 0x02e66, 0x02e67,
+ 0x02e68, 0x02e69, 0x02e6a, 0x02e6b, 0x02e6c, 0x02e6d, 0x02e6e, 0x02e6f,
+ 0x02e70, 0x02e71, 0x02e72, 0x02e73, 0x02e74, 0x02e75, 0x02e76, 0x02e77,
+ 0x02e78, 0x02e79, 0x02e7a, 0x02e7b, 0x02e7c, 0x02e7d, 0x02e7e, 0x02e7f,
+ 0x02e80, 0x02e81, 0x02e82, 0x02e83, 0x0319a, 0x02e85, 0x02e86, 0x02f0f,
+ 0x02f11, 0x02e89, 0x02f18, 0x02e8b, 0x02f29, 0x02f29, 0x02e8e, 0x02e8f,
+ 0x02e8e, 0x02e8f, 0x02e92, 0x02e93, 0x02e94, 0x02e95, 0x02e96, 0x02f3c,
+ 0x02e98, 0x02e99, 0x02e9a, 0x02e9b, 0x02f47, 0x02f49, 0x02e9e, 0x02e9f,
+ 0x02ea0, 0x02ea1, 0x02ea2, 0x02ea3, 0x02ea4, 0x02ea4, 0x02ea6, 0x02f5c,
+ 0x02ea8, 0x02ea9, 0x02eaa, 0x02f6c, 0x02f70, 0x02ead, 0x02f75, 0x02eaf,
+ 0x02eb0, 0x02eb1, 0x02eb2, 0x02eb1, 0x02eb1, 0x02eb2, 0x02eb7, 0x02eb7,
+ 0x02eb8, 0x02eb9, 0x02eba, 0x02f80, 0x02f81, 0x02f85, 0x02ebe, 0x02ebe,
+ 0x02ebe, 0x02ec1, 0x02ec2, 0x02ec3, 0x02ec4, 0x02ec5, 0x02f93, 0x02f93,
+ 0x02ec8, 0x02ec9, 0x02f9c, 0x02ecb, 0x02ecc, 0x02ecc, 0x02ecc, 0x02fa2,
+ 0x02ed0, 0x02fa7, 0x02ed2, 0x02ed3, 0x02ed4, 0x02fa9, 0x02ed6, 0x02fac,
+ 0x02ed8, 0x02ed9, 0x02eda, 0x02edb, 0x02edc, 0x02fb7, 0x02ede, 0x02ede,
+ 0x02ee0, 0x02fb8, 0x02ee2, 0x02fbb, 0x02fc1, 0x02ee5, 0x02ee6, 0x02ee7,
+ 0x02ee8, 0x02ee9, 0x02eea, 0x02eeb, 0x02eec, 0x02eed, 0x02eee, 0x02eef,
+ 0x02ef0, 0x02ef2, 0x02ef2, 0x02ef3, 0x02ef4, 0x02ef5, 0x02ef6, 0x02ef7,
+ 0x02ef8, 0x02ef9, 0x02efa, 0x02efb, 0x02efc, 0x02efd, 0x02efe, 0x02eff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2f[] = {
+ 0x03192, 0x02f01, 0x02e80, 0x02f03, 0x0319a, 0x02f05, 0x03193, 0x02f07,
+ 0x0319f, 0x02f09, 0x02f0a, 0x02f0b, 0x02e86, 0x02f0d, 0x02f0e, 0x02f0f,
+ 0x02f10, 0x02f11, 0x02f12, 0x02f13, 0x02f14, 0x02f15, 0x02f16, 0x02f17,
+ 0x02f18, 0x02e8b, 0x02e81, 0x02f1b, 0x02f1c, 0x02f1d, 0x02f1e, 0x02f1f,
+ 0x02f20, 0x02f21, 0x02f22, 0x02f23, 0x02f24, 0x02f25, 0x02f26, 0x02f27,
+ 0x02f28, 0x02f29, 0x02e8e, 0x02f2b, 0x02f2c, 0x02f2d, 0x02f2e, 0x02f2f,
+ 0x02f30, 0x02f31, 0x02f32, 0x02e93, 0x02f34, 0x02f35, 0x02f36, 0x02f37,
+ 0x02f38, 0x02e95, 0x02f3a, 0x02f3b, 0x02f3c, 0x02f3d, 0x02f3e, 0x02f3f,
+ 0x02f40, 0x02f41, 0x02f42, 0x02f43, 0x02f44, 0x02f45, 0x02f46, 0x02f47,
+ 0x02f48, 0x02f49, 0x02f4a, 0x02f4b, 0x02f4c, 0x02f4d, 0x02f4e, 0x02f4f,
+ 0x02f50, 0x02f51, 0x02f52, 0x02f53, 0x02f54, 0x02f55, 0x02f56, 0x02f57,
+ 0x02f58, 0x02f59, 0x02f5a, 0x02f5b, 0x02f5c, 0x02f5d, 0x02f5e, 0x02f5f,
+ 0x02f60, 0x02f61, 0x02f62, 0x02f63, 0x02f64, 0x02f65, 0x02eaa, 0x02f67,
+ 0x02f68, 0x02f69, 0x02f6a, 0x02f6b, 0x02f6c, 0x02f6d, 0x02f6e, 0x02f6f,
+ 0x02f70, 0x02f71, 0x02f72, 0x02f73, 0x02f74, 0x02f75, 0x02f76, 0x02f77,
+ 0x02f78, 0x02f79, 0x02eb7, 0x02f7b, 0x02f7c, 0x02f7d, 0x02f7e, 0x02f7f,
+ 0x02f80, 0x02f81, 0x02f82, 0x02f83, 0x02f84, 0x02f85, 0x02f86, 0x02f87,
+ 0x02f88, 0x02f89, 0x02f8a, 0x02f8b, 0x02f8c, 0x02f8d, 0x02f8e, 0x02f8f,
+ 0x02f90, 0x02f91, 0x02f92, 0x02f93, 0x02f94, 0x02f95, 0x02f96, 0x02f97,
+ 0x02f98, 0x02f99, 0x02f9a, 0x02f9b, 0x02f9c, 0x02f9d, 0x02f9e, 0x02f9f,
+ 0x02fa0, 0x02fa1, 0x02fa2, 0x02fa3, 0x02fa4, 0x02fa5, 0x02fa6, 0x02fa7,
+ 0x02fa8, 0x02fa9, 0x02faa, 0x02fab, 0x02fac, 0x02fad, 0x02fae, 0x02faf,
+ 0x02fb0, 0x02fb1, 0x02fb2, 0x02fb3, 0x02fb4, 0x02fb5, 0x02fb6, 0x02fb7,
+ 0x02fb8, 0x02fb9, 0x02fba, 0x02fbb, 0x02fbc, 0x02fbd, 0x02fbe, 0x02fbf,
+ 0x02fc0, 0x02fc1, 0x02fc2, 0x02fc3, 0x02ee7, 0x02fc5, 0x02fc6, 0x02fc7,
+ 0x02fc8, 0x02fc9, 0x02fca, 0x02fcb, 0x02fcc, 0x02fcd, 0x02fce, 0x02fcf,
+ 0x02fd0, 0x02eeb, 0x02eed, 0x02eef, 0x02ef2, 0x02fd5, 0x02fd6, 0x02fd7,
+ 0x02fd8, 0x02fd9, 0x02fda, 0x02fdb, 0x02fdc, 0x02fdd, 0x02fde, 0x02fdf,
+ 0x02fe0, 0x02fe1, 0x02fe2, 0x02fe3, 0x02fe4, 0x02fe5, 0x02fe6, 0x02fe7,
+ 0x02fe8, 0x02fe9, 0x02fea, 0x02feb, 0x02fec, 0x02fed, 0x02fee, 0x02fef,
+ 0x02ff0, 0x02ff1, 0x02ff2, 0x02ff3, 0x02ff4, 0x02ff5, 0x02ff6, 0x02ff7,
+ 0x02ff8, 0x02ff9, 0x02ffa, 0x02ffb, 0x02ffc, 0x02ffd, 0x02ffe, 0x02fff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_30[] = {
+ 0x00020, 0x03001, 0x03002, 0x03003, 0x03004, 0x03005, 0x03006, 0x00030,
+ 0x02329, 0x0232a, 0x0300a, 0x0300b, 0x0300c, 0x0300d, 0x0300e, 0x0300f,
+ 0x03010, 0x03011, 0x03012, 0x03013, 0x03014, 0x03015, 0x03016, 0x03017,
+ 0x03018, 0x03019, 0x0301a, 0x0301b, 0x0301c, 0x0301d, 0x0301e, 0x0301f,
+ 0x03020, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x03030, 0x03031, 0x03031, 0x03033, 0x03033, 0x03035, 0x03012, 0x03037,
+ 0x02f17, 0x03039, 0x0303a, 0x0303b, 0x0303c, 0x0303d, 0x0303e, 0x0303f,
+ 0x03040, 0x03041, 0x03042, 0x03043, 0x03044, 0x03045, 0x03046, 0x03047,
+ 0x03048, 0x03049, 0x0304a, 0x0304b, 0x0304c, 0x0304d, 0x0304e, 0x0304f,
+ 0x03050, 0x03051, 0x03052, 0x03053, 0x03054, 0x03055, 0x03056, 0x03057,
+ 0x03058, 0x03059, 0x0305a, 0x0305b, 0x0305c, 0x0305d, 0x0305e, 0x0305f,
+ 0x03060, 0x03061, 0x03062, 0x03063, 0x03064, 0x03065, 0x03066, 0x03067,
+ 0x03068, 0x03069, 0x0306a, 0x0306b, 0x0306c, 0x0306d, 0x0306e, 0x0306f,
+ 0x03070, 0x03071, 0x03072, 0x03073, 0x03074, 0x03075, 0x03076, 0x03077,
+ 0x03078, 0x03079, 0x0307a, 0x0307b, 0x0307c, 0x0307d, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03083, 0x03084, 0x03085, 0x03086, 0x03087,
+ 0x03088, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308e, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x03093, 0x03046, 0x0304b, 0x03051, 0x03097,
+ 0x03098, 0x00000, 0x00000, 0x0309b, 0x0309c, 0x0309d, 0x0309d, 0x0309f,
+ 0x030a0, 0x03041, 0x03042, 0x03043, 0x03044, 0x03045, 0x03046, 0x03047,
+ 0x03048, 0x03049, 0x0304a, 0x0304b, 0x0304c, 0x0304d, 0x0304e, 0x0304f,
+ 0x03050, 0x03051, 0x03052, 0x03053, 0x03054, 0x03055, 0x03056, 0x03057,
+ 0x03058, 0x03059, 0x0305a, 0x0305b, 0x0305c, 0x0305d, 0x0305e, 0x0305f,
+ 0x03060, 0x03061, 0x03062, 0x03063, 0x03064, 0x03065, 0x03066, 0x03067,
+ 0x03068, 0x03069, 0x0306a, 0x0306b, 0x0306c, 0x0306d, 0x0306e, 0x0306f,
+ 0x03070, 0x03071, 0x03072, 0x03073, 0x03074, 0x03075, 0x03076, 0x03077,
+ 0x03078, 0x03079, 0x0307a, 0x0307b, 0x0307c, 0x0307d, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03083, 0x03084, 0x03085, 0x03086, 0x03087,
+ 0x03088, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308e, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x03093, 0x03046, 0x0304b, 0x03051, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x030fb, 0x030fc, 0x030fd, 0x030fd, 0x030ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_31[] = {
+ 0x03100, 0x03101, 0x03102, 0x03103, 0x03104, 0x03105, 0x03106, 0x03107,
+ 0x03108, 0x03109, 0x0310a, 0x0310b, 0x0310c, 0x0310d, 0x0310e, 0x0310f,
+ 0x03110, 0x03111, 0x03112, 0x03113, 0x03114, 0x03115, 0x03116, 0x03117,
+ 0x03118, 0x03119, 0x0311a, 0x0311b, 0x0311c, 0x0311d, 0x0311e, 0x0311f,
+ 0x03120, 0x03121, 0x03122, 0x03123, 0x03124, 0x03125, 0x03126, 0x03127,
+ 0x03128, 0x03129, 0x0312a, 0x0312b, 0x0312c, 0x0312d, 0x0312e, 0x0312f,
+ 0x03130, 0x01100, 0x01101, 0x011aa, 0x01102, 0x011ac, 0x011ad, 0x01103,
+ 0x01104, 0x01105, 0x011b0, 0x011b1, 0x011b2, 0x011b3, 0x011b4, 0x011b5,
+ 0x0111a, 0x01106, 0x01107, 0x01108, 0x01121, 0x01109, 0x0110a, 0x0110b,
+ 0x0110c, 0x0110d, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x01161,
+ 0x01162, 0x01163, 0x01164, 0x01165, 0x01166, 0x01167, 0x01168, 0x01169,
+ 0x0116a, 0x0116b, 0x0116c, 0x0116d, 0x0116e, 0x0116f, 0x01170, 0x01171,
+ 0x01172, 0x01173, 0x01174, 0x01175, 0x01160, 0x01114, 0x01115, 0x011c7,
+ 0x011c8, 0x011cc, 0x011ce, 0x011d3, 0x011d7, 0x011d9, 0x0111c, 0x011dd,
+ 0x011df, 0x0111d, 0x0111e, 0x01120, 0x01122, 0x01123, 0x01127, 0x01129,
+ 0x0112b, 0x0112c, 0x0112d, 0x0112e, 0x0112f, 0x01132, 0x01136, 0x01140,
+ 0x01147, 0x0114c, 0x011f1, 0x011f2, 0x01157, 0x01158, 0x01159, 0x01184,
+ 0x01185, 0x01188, 0x01191, 0x01192, 0x01194, 0x0119e, 0x011a1, 0x0318f,
+ 0x03190, 0x03191, 0x03192, 0x03193, 0x03194, 0x03195, 0x03196, 0x03197,
+ 0x03198, 0x03199, 0x0319a, 0x0319b, 0x0319c, 0x0319d, 0x0319e, 0x0319f,
+ 0x03105, 0x03117, 0x03110, 0x0310d, 0x031a4, 0x031a4, 0x031a6, 0x0311b,
+ 0x03128, 0x0311a, 0x03127, 0x03128, 0x031ac, 0x031ad, 0x0311e, 0x03120,
+ 0x031b0, 0x031b1, 0x031b2, 0x03127, 0x03106, 0x0310a, 0x0310e, 0x0310f,
+ 0x031b8, 0x031b9, 0x031ba, 0x031bb, 0x031bc, 0x031bd, 0x031be, 0x031bf,
+ 0x031c0, 0x031c1, 0x031c2, 0x031c3, 0x031c4, 0x031c5, 0x031c6, 0x031c7,
+ 0x031c8, 0x031c9, 0x031ca, 0x031cb, 0x031cc, 0x031cd, 0x031ce, 0x031cf,
+ 0x031d0, 0x031d1, 0x031d2, 0x031d3, 0x031d4, 0x031d5, 0x031d6, 0x031d7,
+ 0x031d8, 0x031d9, 0x031da, 0x031db, 0x031dc, 0x031dd, 0x031de, 0x031df,
+ 0x031e0, 0x031e1, 0x031e2, 0x031e3, 0x031e4, 0x031e5, 0x031e6, 0x031e7,
+ 0x031e8, 0x031e9, 0x031ea, 0x031eb, 0x031ec, 0x031ed, 0x031ee, 0x031ef,
+ 0x0304f, 0x03057, 0x03059, 0x03068, 0x0306c, 0x0306f, 0x03072, 0x03075,
+ 0x03078, 0x0307b, 0x03080, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x031ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_32[] = {
+ 0x03200, 0x03201, 0x03202, 0x03203, 0x03204, 0x03205, 0x03206, 0x03207,
+ 0x03208, 0x03209, 0x0320a, 0x0320b, 0x0320c, 0x0320d, 0x0320e, 0x0320f,
+ 0x03210, 0x03211, 0x03212, 0x03213, 0x03214, 0x03215, 0x03216, 0x03217,
+ 0x03218, 0x03219, 0x0321a, 0x0321b, 0x0321c, 0x0321d, 0x0321e, 0x0321f,
+ 0x03220, 0x03221, 0x03222, 0x03223, 0x03224, 0x03225, 0x03226, 0x03227,
+ 0x03228, 0x03229, 0x0322a, 0x0322b, 0x0322c, 0x0322d, 0x0322e, 0x0322f,
+ 0x03230, 0x03231, 0x03232, 0x03233, 0x03234, 0x03235, 0x03236, 0x03237,
+ 0x03238, 0x03239, 0x0323a, 0x0323b, 0x0323c, 0x0323d, 0x0323e, 0x0323f,
+ 0x03240, 0x03241, 0x03242, 0x03243, 0x03244, 0x03245, 0x03246, 0x03247,
+ 0x03248, 0x03249, 0x0324a, 0x0324b, 0x0324c, 0x0324d, 0x0324e, 0x0324f,
+ 0x03250, 0x03251, 0x03252, 0x03253, 0x03254, 0x03255, 0x03256, 0x03257,
+ 0x03258, 0x03259, 0x0325a, 0x0325b, 0x0325c, 0x0325d, 0x0325e, 0x0325f,
+ 0x01100, 0x01102, 0x01103, 0x01105, 0x01106, 0x01107, 0x01109, 0x0110b,
+ 0x0110c, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x0326e, 0x0326f,
+ 0x03270, 0x03271, 0x03272, 0x03273, 0x03274, 0x03275, 0x03276, 0x03277,
+ 0x03278, 0x03279, 0x0327a, 0x0327b, 0x0327c, 0x0327d, 0x0327e, 0x0327f,
+ 0x03192, 0x03193, 0x03194, 0x03195, 0x03284, 0x03285, 0x03286, 0x02f0b,
+ 0x03288, 0x02f17, 0x02f49, 0x02f55, 0x02f54, 0x02f4a, 0x02fa6, 0x02f1f,
+ 0x02f47, 0x03291, 0x03292, 0x03293, 0x03294, 0x03295, 0x03296, 0x03297,
+ 0x03298, 0x03299, 0x0329a, 0x02f25, 0x0329c, 0x0329d, 0x0329e, 0x0329f,
+ 0x032a0, 0x032a1, 0x032a2, 0x032a3, 0x03196, 0x03197, 0x03198, 0x032a7,
+ 0x032a8, 0x032a9, 0x032aa, 0x032ab, 0x032ac, 0x032ad, 0x032ae, 0x032af,
+ 0x032b0, 0x032b1, 0x032b2, 0x032b3, 0x032b4, 0x032b5, 0x032b6, 0x032b7,
+ 0x032b8, 0x032b9, 0x032ba, 0x032bb, 0x032bc, 0x032bd, 0x032be, 0x032bf,
+ 0x032c0, 0x032c1, 0x032c2, 0x032c3, 0x032c4, 0x032c5, 0x032c6, 0x032c7,
+ 0x032c8, 0x032c9, 0x032ca, 0x032cb, 0x032cc, 0x032cd, 0x032ce, 0x032cf,
+ 0x03042, 0x03044, 0x03046, 0x03048, 0x0304a, 0x0304b, 0x0304d, 0x0304f,
+ 0x03051, 0x03053, 0x03055, 0x03057, 0x03059, 0x0305b, 0x0305d, 0x0305f,
+ 0x03061, 0x03064, 0x03066, 0x03068, 0x0306a, 0x0306b, 0x0306c, 0x0306d,
+ 0x0306e, 0x0306f, 0x03072, 0x03075, 0x03078, 0x0307b, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03084, 0x03086, 0x03088, 0x03089, 0x0308a,
+ 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x03090, 0x03091, 0x03092, 0x032ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_33[] = {
+ 0x03300, 0x03301, 0x03302, 0x03303, 0x03304, 0x03305, 0x03306, 0x03307,
+ 0x03308, 0x03309, 0x0330a, 0x0330b, 0x0330c, 0x0330d, 0x0330e, 0x0330f,
+ 0x03310, 0x03311, 0x03312, 0x03313, 0x03314, 0x03315, 0x03316, 0x03317,
+ 0x03318, 0x03319, 0x0331a, 0x0331b, 0x0331c, 0x0331d, 0x0331e, 0x0331f,
+ 0x03320, 0x03321, 0x03322, 0x03323, 0x03324, 0x03325, 0x03326, 0x03327,
+ 0x03328, 0x03329, 0x0332a, 0x0332b, 0x0332c, 0x0332d, 0x0332e, 0x0332f,
+ 0x03330, 0x03331, 0x03332, 0x03333, 0x03334, 0x03335, 0x03336, 0x03337,
+ 0x03338, 0x03339, 0x0333a, 0x0333b, 0x0333c, 0x0333d, 0x0333e, 0x0333f,
+ 0x03340, 0x03341, 0x03342, 0x03343, 0x03344, 0x03345, 0x03346, 0x03347,
+ 0x03348, 0x03349, 0x0334a, 0x0334b, 0x0334c, 0x0334d, 0x0334e, 0x0334f,
+ 0x03350, 0x03351, 0x03352, 0x03353, 0x03354, 0x03355, 0x03356, 0x03357,
+ 0x03358, 0x03359, 0x0335a, 0x0335b, 0x0335c, 0x0335d, 0x0335e, 0x0335f,
+ 0x03360, 0x03361, 0x03362, 0x03363, 0x03364, 0x03365, 0x03366, 0x03367,
+ 0x03368, 0x03369, 0x0336a, 0x0336b, 0x0336c, 0x0336d, 0x0336e, 0x0336f,
+ 0x03370, 0x03371, 0x03372, 0x03373, 0x03374, 0x03375, 0x03376, 0x03377,
+ 0x03378, 0x03379, 0x0337a, 0x0337b, 0x0337c, 0x0337d, 0x0337e, 0x0337f,
+ 0x03380, 0x03381, 0x03382, 0x03383, 0x03384, 0x03385, 0x03386, 0x03387,
+ 0x03388, 0x03389, 0x0338a, 0x0338b, 0x0338c, 0x0338d, 0x0338e, 0x0338f,
+ 0x03390, 0x03391, 0x03392, 0x03393, 0x03394, 0x03395, 0x03396, 0x03397,
+ 0x03398, 0x03399, 0x0339a, 0x0339b, 0x0339c, 0x0339d, 0x0339e, 0x0339f,
+ 0x033a0, 0x033a1, 0x033a2, 0x033a3, 0x033a4, 0x033a5, 0x033a6, 0x033a7,
+ 0x033a8, 0x03380, 0x033aa, 0x033ab, 0x033ac, 0x033ad, 0x033ae, 0x033af,
+ 0x033b0, 0x033b1, 0x033b2, 0x033b3, 0x033b4, 0x033b5, 0x033b6, 0x033b7,
+ 0x033b8, 0x033b7, 0x033ba, 0x033bb, 0x033bc, 0x033bd, 0x033be, 0x033bd,
+ 0x033c0, 0x033c1, 0x033c2, 0x033c3, 0x033c4, 0x033c5, 0x033c6, 0x033c7,
+ 0x033c8, 0x033c9, 0x033ca, 0x033cb, 0x033cc, 0x033cd, 0x0339e, 0x033cf,
+ 0x033d0, 0x033d1, 0x033d2, 0x033d3, 0x03386, 0x033d5, 0x033d6, 0x033d7,
+ 0x033d8, 0x033d9, 0x033da, 0x033db, 0x033dc, 0x033dd, 0x033de, 0x033df,
+ 0x033e0, 0x033e1, 0x033e2, 0x033e3, 0x033e4, 0x033e5, 0x033e6, 0x033e7,
+ 0x033e8, 0x033e9, 0x033ea, 0x033eb, 0x033ec, 0x033ed, 0x033ee, 0x033ef,
+ 0x033f0, 0x033f1, 0x033f2, 0x033f3, 0x033f4, 0x033f5, 0x033f6, 0x033f7,
+ 0x033f8, 0x033f9, 0x033fa, 0x033fb, 0x033fc, 0x033fd, 0x033fe, 0x033ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_f9[] = {
+ 0x0f900, 0x0f901, 0x02f9e, 0x0f903, 0x0f904, 0x0f905, 0x0f906, 0x02ef2,
+ 0x02ef2, 0x0f909, 0x02fa6, 0x0f90b, 0x0f90c, 0x0f90d, 0x0f90e, 0x0f90f,
+ 0x0f910, 0x0f911, 0x0f912, 0x0f913, 0x0f914, 0x0f915, 0x0f916, 0x0f917,
+ 0x0f918, 0x0f919, 0x0f91a, 0x0f91b, 0x0f91c, 0x0f91d, 0x0f91e, 0x0f91f,
+ 0x0f920, 0x0f921, 0x0f922, 0x0f923, 0x0f924, 0x0f925, 0x0f926, 0x0f927,
+ 0x0f928, 0x0f929, 0x0f92a, 0x0f92b, 0x0f92c, 0x0f92d, 0x0f92e, 0x0f92f,
+ 0x0f930, 0x0f931, 0x0f932, 0x0f933, 0x02f7c, 0x0f935, 0x0f936, 0x0f937,
+ 0x0f938, 0x0f939, 0x0f93a, 0x0f93b, 0x0f93c, 0x0f93d, 0x0f93e, 0x0f93f,
+ 0x02fc5, 0x0f941, 0x0f942, 0x0f943, 0x0f944, 0x0f945, 0x0f946, 0x0f947,
+ 0x0f948, 0x0f949, 0x0f94a, 0x0f94b, 0x0f94c, 0x0f94d, 0x0f94e, 0x0f94f,
+ 0x0f950, 0x0f951, 0x0f952, 0x0f953, 0x0f954, 0x0f955, 0x0f956, 0x0f957,
+ 0x0f958, 0x0f959, 0x0f95a, 0x0f95b, 0x0f914, 0x0f95d, 0x0f95e, 0x0f95f,
+ 0x0f960, 0x0f961, 0x0f962, 0x0f963, 0x0f964, 0x0f965, 0x0f966, 0x0f967,
+ 0x0f968, 0x0f969, 0x0f96a, 0x0f96b, 0x0f96c, 0x0f96d, 0x0f96e, 0x0f96f,
+ 0x0f970, 0x02fa0, 0x0f972, 0x0f973, 0x0f974, 0x0f975, 0x0f976, 0x0f977,
+ 0x0f978, 0x0f979, 0x0f97a, 0x0f97b, 0x0f97c, 0x0f97d, 0x0f97e, 0x0f97f,
+ 0x0f980, 0x02f25, 0x0f982, 0x0f983, 0x0f984, 0x0f985, 0x0f986, 0x0f987,
+ 0x0f988, 0x0f989, 0x02f12, 0x0f98b, 0x0f98c, 0x0f98d, 0x0f98e, 0x0f98f,
+ 0x0f990, 0x0f991, 0x0f992, 0x0f993, 0x0f994, 0x0f995, 0x0f996, 0x0f997,
+ 0x0f998, 0x0f999, 0x0f99a, 0x0f99b, 0x0f99c, 0x0f99d, 0x0f99e, 0x0f99f,
+ 0x0f9a0, 0x0f96f, 0x0f9a2, 0x0f9a3, 0x0f9a4, 0x0f9a5, 0x0f9a6, 0x0f9a7,
+ 0x0f9a8, 0x0f9a9, 0x0f95f, 0x0f9ab, 0x0f9ac, 0x0f9ad, 0x0f9ae, 0x0f9af,
+ 0x0f9b0, 0x0f9b1, 0x0f9b2, 0x0f9b3, 0x0f9b4, 0x0f9b5, 0x0f9b6, 0x0f9b7,
+ 0x0f9b8, 0x0f9b9, 0x0f9ba, 0x0f9bb, 0x0f9bc, 0x0f9bd, 0x0f9be, 0x0f914,
+ 0x0f9c0, 0x0f9c1, 0x0f9c2, 0x0f9c3, 0x02eef, 0x0f9c5, 0x0f9c6, 0x0f9c7,
+ 0x0f9c8, 0x0f9c9, 0x0f9ca, 0x0f9cb, 0x0f9cc, 0x0f9cd, 0x0f9ce, 0x0f9cf,
+ 0x0f9d0, 0x03285, 0x0f9d2, 0x0f9d3, 0x0f9d4, 0x0f9d5, 0x0f9d6, 0x0f9d7,
+ 0x0f9d8, 0x0f9d9, 0x0f9da, 0x0f961, 0x0f9dc, 0x0f9dd, 0x0f9de, 0x0f9df,
+ 0x0f9e0, 0x0f9e1, 0x0f9e2, 0x0f9e3, 0x0f9e4, 0x0f9e5, 0x0f9e6, 0x0f9e7,
+ 0x0f9e8, 0x02fa5, 0x0f9ea, 0x0f9eb, 0x0f9ec, 0x0f9ed, 0x0f9ee, 0x0f9ef,
+ 0x0f9f0, 0x0f9f1, 0x0f9f2, 0x0f9f3, 0x0f9f4, 0x0f9f5, 0x0f9f6, 0x02f74,
+ 0x0f9f8, 0x0f9f9, 0x0f9fa, 0x0f9fb, 0x0f9fc, 0x0f9fd, 0x0f9fe, 0x0f9ff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fa[] = {
+ 0x0fa00, 0x0fa01, 0x0fa02, 0x0fa03, 0x0fa04, 0x0fa05, 0x0fa06, 0x0fa07,
+ 0x02f8f, 0x0fa09, 0x02f92, 0x0fa0b, 0x0fa0c, 0x0fa0d, 0x0fa0e, 0x0fa0f,
+ 0x0fa10, 0x0fa11, 0x0fa12, 0x0fa13, 0x0fa14, 0x0fa15, 0x0fa16, 0x0fa17,
+ 0x0fa18, 0x0fa19, 0x0fa1a, 0x0fa1b, 0x0fa1c, 0x0fa1d, 0x02f7b, 0x0fa1f,
+ 0x0fa20, 0x0fa21, 0x0fa22, 0x0fa23, 0x0fa24, 0x0fa25, 0x0fa26, 0x0fa27,
+ 0x0fa28, 0x0fa29, 0x0fa2a, 0x0fa2b, 0x0fa2c, 0x0fa2d, 0x0fa2e, 0x0fa2f,
+ 0x0fa30, 0x0fa31, 0x0fa32, 0x0fa33, 0x0fa34, 0x0fa35, 0x0fa36, 0x0fa37,
+ 0x0fa38, 0x0fa39, 0x0fa3a, 0x0fa3b, 0x02f2c, 0x0fa3d, 0x0fa3e, 0x0fa3f,
+ 0x0fa40, 0x0fa41, 0x0fa42, 0x0fa43, 0x0fa44, 0x0fa45, 0x0fa46, 0x0fa47,
+ 0x0fa48, 0x02ea4, 0x0fa4a, 0x0fa4b, 0x03293, 0x0fa4d, 0x0fa4e, 0x0fa4f,
+ 0x0fa50, 0x03297, 0x0fa52, 0x0fa53, 0x0fa54, 0x0fa55, 0x0fa56, 0x0f996,
+ 0x0fa58, 0x0fa59, 0x0fa5a, 0x0fa5b, 0x0fa5c, 0x02ebe, 0x02ebe, 0x0fa5f,
+ 0x0fa60, 0x0fa61, 0x0fa62, 0x0fa63, 0x0fa64, 0x0fa65, 0x02ecc, 0x0fa25,
+ 0x0fa68, 0x0fa69, 0x0fa6a, 0x0fa6b, 0x0fa6c, 0x0fa6d, 0x0fa6e, 0x0fa6f,
+ 0x0fa70, 0x0fa71, 0x0fa72, 0x0fa73, 0x0fa74, 0x0fa75, 0x0fa76, 0x0fa77,
+ 0x0fa78, 0x0fa79, 0x0fa7a, 0x0fa7b, 0x0fa7c, 0x0fa7d, 0x0fa7e, 0x0fa7f,
+ 0x0fa80, 0x0fa81, 0x0fa82, 0x0fa83, 0x0fa84, 0x0fa85, 0x0fa86, 0x0fa87,
+ 0x0fa88, 0x0fa89, 0x0fa8a, 0x0fa8b, 0x0fa8c, 0x0fa8d, 0x0fa8e, 0x0fa8f,
+ 0x0fa90, 0x0fa91, 0x0fa92, 0x0fa93, 0x0fa94, 0x0fa95, 0x0fa96, 0x0fa97,
+ 0x0fa98, 0x0fa99, 0x0fa9a, 0x0fa9b, 0x0fa9c, 0x0fa9d, 0x0fa9e, 0x0fa9f,
+ 0x0faa0, 0x0faa1, 0x0faa2, 0x0faa3, 0x0faa4, 0x0faa5, 0x0faa6, 0x0faa7,
+ 0x0faa8, 0x0faa9, 0x0faaa, 0x0faab, 0x0faac, 0x0faad, 0x0faae, 0x0faaf,
+ 0x0fab0, 0x0fab1, 0x0fab2, 0x0fab3, 0x0fab4, 0x0fab5, 0x0fab6, 0x0fab7,
+ 0x0fab8, 0x0fab9, 0x0faba, 0x0fabb, 0x0fabc, 0x0fabd, 0x0fabe, 0x0fabf,
+ 0x0fac0, 0x0fac1, 0x0fac2, 0x0fac3, 0x0fac4, 0x0fac5, 0x0fac6, 0x0fac7,
+ 0x0fac8, 0x0fac9, 0x0faca, 0x0facb, 0x0facc, 0x0facd, 0x0face, 0x0facf,
+ 0x0fad0, 0x0fad1, 0x0fad2, 0x0fad3, 0x0fad4, 0x0fad5, 0x0fad6, 0x0fad7,
+ 0x0fad8, 0x0fad9, 0x0fada, 0x0fadb, 0x0fadc, 0x0fadd, 0x0fade, 0x0fadf,
+ 0x0fae0, 0x0fae1, 0x0fae2, 0x0fae3, 0x0fae4, 0x0fae5, 0x0fae6, 0x0fae7,
+ 0x0fae8, 0x0fae9, 0x0faea, 0x0faeb, 0x0faec, 0x0faed, 0x0faee, 0x0faef,
+ 0x0faf0, 0x0faf1, 0x0faf2, 0x0faf3, 0x0faf4, 0x0faf5, 0x0faf6, 0x0faf7,
+ 0x0faf8, 0x0faf9, 0x0fafa, 0x0fafb, 0x0fafc, 0x0fafd, 0x0fafe, 0x0faff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fb[] = {
+ 0x0fb00, 0x0fb01, 0x0fb02, 0x0fb03, 0x0fb04, 0x0fb05, 0x0fb05, 0x0fb07,
+ 0x0fb08, 0x0fb09, 0x0fb0a, 0x0fb0b, 0x0fb0c, 0x0fb0d, 0x0fb0e, 0x0fb0f,
+ 0x0fb10, 0x0fb11, 0x0fb12, 0x0fb13, 0x0fb14, 0x0fb15, 0x0fb16, 0x0fb17,
+ 0x0fb18, 0x0fb19, 0x0fb1a, 0x0fb1b, 0x0fb1c, 0x005d9, 0x00000, 0x005f2,
+ 0x005e2, 0x005d0, 0x005d3, 0x005d4, 0x005da, 0x005dc, 0x005dd, 0x005e8,
+ 0x005ea, 0x0002b, 0x005e9, 0x005e9, 0x005e9, 0x005e9, 0x005d0, 0x005d0,
+ 0x005d0, 0x005d1, 0x005d2, 0x005d3, 0x005d4, 0x005d5, 0x005d6, 0x0fb37,
+ 0x005d8, 0x005d9, 0x005da, 0x005da, 0x005dc, 0x0fb3d, 0x005dd, 0x0fb3f,
+ 0x005df, 0x005e1, 0x0fb42, 0x005e3, 0x005e3, 0x0fb45, 0x005e5, 0x005e7,
+ 0x005e8, 0x005e9, 0x005ea, 0x005d5, 0x005d1, 0x005da, 0x005e3, 0x0fb4f,
+ 0x00671, 0x00671, 0x0067b, 0x0067b, 0x0067b, 0x0067b, 0x0067e, 0x0067e,
+ 0x0067e, 0x0067e, 0x00680, 0x00680, 0x00680, 0x00680, 0x0067a, 0x0067a,
+ 0x0067a, 0x0067a, 0x0067f, 0x0067f, 0x0067f, 0x0067f, 0x00679, 0x00679,
+ 0x00679, 0x00679, 0x006a4, 0x006a4, 0x006a4, 0x006a4, 0x006a6, 0x006a6,
+ 0x006a6, 0x006a6, 0x00684, 0x00684, 0x00684, 0x00684, 0x00683, 0x00683,
+ 0x00683, 0x00683, 0x00686, 0x00686, 0x00686, 0x00686, 0x00687, 0x00687,
+ 0x00687, 0x00687, 0x0068d, 0x0068d, 0x0068c, 0x0068c, 0x0068e, 0x0068e,
+ 0x00688, 0x00688, 0x00698, 0x00698, 0x00691, 0x00691, 0x006a9, 0x006a9,
+ 0x006a9, 0x006a9, 0x006af, 0x006af, 0x006af, 0x006af, 0x006b3, 0x006b3,
+ 0x006b3, 0x006b3, 0x006b1, 0x006b1, 0x006b1, 0x006b1, 0x006ba, 0x006ba,
+ 0x006bb, 0x006bb, 0x006bb, 0x006bb, 0x006c0, 0x006c0, 0x006c1, 0x006c1,
+ 0x006c1, 0x006c1, 0x006be, 0x006be, 0x006be, 0x006be, 0x006d2, 0x006d2,
+ 0x006d2, 0x006d2, 0x0fbb2, 0x0fbb3, 0x0fbb4, 0x0fbb5, 0x0fbb6, 0x0fbb7,
+ 0x0fbb8, 0x0fbb9, 0x0fbba, 0x0fbbb, 0x0fbbc, 0x0fbbd, 0x0fbbe, 0x0fbbf,
+ 0x0fbc0, 0x0fbc1, 0x0fbc2, 0x0fbc3, 0x0fbc4, 0x0fbc5, 0x0fbc6, 0x0fbc7,
+ 0x0fbc8, 0x0fbc9, 0x0fbca, 0x0fbcb, 0x0fbcc, 0x0fbcd, 0x0fbce, 0x0fbcf,
+ 0x0fbd0, 0x0fbd1, 0x0fbd2, 0x006ad, 0x006ad, 0x006ad, 0x006ad, 0x006c7,
+ 0x006c7, 0x006c6, 0x006c6, 0x006c8, 0x006c8, 0x00677, 0x006cb, 0x006cb,
+ 0x006c5, 0x006c5, 0x006c9, 0x006c9, 0x006d0, 0x006d0, 0x006d0, 0x006d0,
+ 0x00649, 0x00649, 0x0fbea, 0x0fbea, 0x0fbec, 0x0fbec, 0x0fbee, 0x0fbee,
+ 0x0fbf0, 0x0fbf0, 0x0fbf2, 0x0fbf2, 0x0fbf4, 0x0fbf4, 0x0fbf6, 0x0fbf6,
+ 0x0fbf6, 0x0fbf9, 0x0fbf9, 0x0fbf9, 0x006cc, 0x006cc, 0x006cc, 0x006cc
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fc[] = {
+ 0x0fc00, 0x0fc01, 0x0fc02, 0x0fbf9, 0x0fc04, 0x0fc05, 0x0fc06, 0x0fc07,
+ 0x0fc08, 0x0fc09, 0x0fc0a, 0x0fc0b, 0x0fc0c, 0x0fc0d, 0x0fc0e, 0x0fc0f,
+ 0x0fc10, 0x0fc11, 0x0fc12, 0x0fc13, 0x0fc14, 0x0fc15, 0x0fc16, 0x0fc17,
+ 0x0fc18, 0x0fc19, 0x0fc1a, 0x0fc1b, 0x0fc1c, 0x0fc1d, 0x0fc1e, 0x0fc1f,
+ 0x0fc20, 0x0fc21, 0x0fc22, 0x0fc23, 0x0fc24, 0x0fc25, 0x0fc26, 0x0fc27,
+ 0x0fc28, 0x0fc29, 0x0fc2a, 0x0fc2b, 0x0fc2c, 0x0fc2d, 0x0fc2e, 0x0fc2f,
+ 0x0fc30, 0x0fc31, 0x0fc32, 0x0fc33, 0x0fc34, 0x0fc35, 0x0fc36, 0x0fc37,
+ 0x0fc38, 0x0fc39, 0x0fc3a, 0x0fc3b, 0x0fc3c, 0x0fc3d, 0x0fc3e, 0x0fc3f,
+ 0x0fc40, 0x0fc41, 0x0fc42, 0x0fc43, 0x0fc44, 0x0fc45, 0x0fc46, 0x0fc47,
+ 0x0fc48, 0x0fc49, 0x0fc4a, 0x0fc4b, 0x0fc4c, 0x0fc4d, 0x0fc4e, 0x0fc4f,
+ 0x0fc50, 0x0fc51, 0x0fc52, 0x0fc53, 0x0fc54, 0x0fc55, 0x0fc56, 0x0fc57,
+ 0x0fc58, 0x0fc59, 0x0fc5a, 0x00630, 0x00631, 0x00649, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x0fc64, 0x0fc65, 0x0fc02, 0x0fc67,
+ 0x0fbf9, 0x0fc04, 0x0fc6a, 0x0fc6b, 0x0fc08, 0x0fc6d, 0x0fc09, 0x0fc0a,
+ 0x0fc70, 0x0fc71, 0x0fc0e, 0x0fc73, 0x0fc0f, 0x0fc10, 0x0fc76, 0x0fc77,
+ 0x0fc12, 0x0fc79, 0x0fc13, 0x0fc14, 0x0fc31, 0x0fc32, 0x0fc35, 0x0fc36,
+ 0x0fc37, 0x0fc3b, 0x0fc3c, 0x0fc3d, 0x0fc3e, 0x0fc42, 0x0fc43, 0x0fc44,
+ 0x0fc88, 0x0fc48, 0x0fc8a, 0x0fc8b, 0x0fc4e, 0x0fc8d, 0x0fc4f, 0x0fc50,
+ 0x00649, 0x0fc91, 0x0fc92, 0x0fc58, 0x0fc94, 0x0fc59, 0x0fc5a, 0x0fc00,
+ 0x0fc01, 0x0fc99, 0x0fc02, 0x0fc9b, 0x0fc05, 0x0fc06, 0x0fc07, 0x0fc08,
+ 0x0fca0, 0x0fc0b, 0x0fc0c, 0x0fc0d, 0x0fc0e, 0x0fca5, 0x0fc12, 0x0fc15,
+ 0x0fc16, 0x0fc17, 0x0fc18, 0x0fc19, 0x0fc1b, 0x0fc1c, 0x0fc1d, 0x0fc1e,
+ 0x0fc1f, 0x0fc20, 0x0fcb2, 0x0fc21, 0x0fc22, 0x0fc23, 0x0fc24, 0x0fc25,
+ 0x0fc26, 0x0fc28, 0x0fc29, 0x0fc2a, 0x0fc2b, 0x0fc2c, 0x0fc2d, 0x0fc2e,
+ 0x0fc2f, 0x0fc30, 0x0fc33, 0x0fc34, 0x0fc38, 0x0fc39, 0x0fc3a, 0x0fc3b,
+ 0x0fc3c, 0x0fc3f, 0x0fc40, 0x0fc41, 0x0fc42, 0x0fccd, 0x0fc45, 0x0fc46,
+ 0x0fc47, 0x0fc48, 0x0fc4b, 0x0fc4c, 0x0fc4d, 0x0fc4e, 0x0fcd6, 0x0fc51,
+ 0x0fc52, 0x00647, 0x0fc55, 0x0fc56, 0x0fc57, 0x0fc58, 0x0fcde, 0x0fc02,
+ 0x0fc9b, 0x0fc08, 0x0fca0, 0x0fc0e, 0x0fca5, 0x0fc12, 0x0fce6, 0x0fc1f,
+ 0x0fce8, 0x0fce9, 0x0fcea, 0x0fc3b, 0x0fc3c, 0x0fc42, 0x0fc4e, 0x0fcd6,
+ 0x0fc58, 0x0fcde, 0x00000, 0x00000, 0x00000, 0x0fcf5, 0x0fcf6, 0x0fcf7,
+ 0x0fcf8, 0x0fcf9, 0x0fcfa, 0x0fcfb, 0x0fcfc, 0x0fcfd, 0x0fcfe, 0x0fcff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fd[] = {
+ 0x0fd00, 0x0fd01, 0x0fd02, 0x0fd03, 0x0fd04, 0x0fd05, 0x0fd06, 0x0fd07,
+ 0x0fd08, 0x0fd09, 0x0fd0a, 0x0fd0b, 0x0fce9, 0x0fd0d, 0x0fd0e, 0x0fd0f,
+ 0x0fd10, 0x0fcf5, 0x0fcf6, 0x0fcf7, 0x0fcf8, 0x0fcf9, 0x0fcfa, 0x0fcfb,
+ 0x0fcfc, 0x0fcfd, 0x0fcfe, 0x0fd1b, 0x0fd00, 0x0fd01, 0x0fd02, 0x0fd03,
+ 0x0fd04, 0x0fd05, 0x0fd06, 0x0fd07, 0x0fd08, 0x0fd09, 0x0fd0a, 0x0fd0b,
+ 0x0fce9, 0x0fd0d, 0x0fd0e, 0x0fd0f, 0x0fd10, 0x0fd09, 0x0fd0a, 0x0fd0b,
+ 0x0fce9, 0x0fce8, 0x0fcea, 0x0fc27, 0x0fc1c, 0x0fc1d, 0x0fc1e, 0x0fd09,
+ 0x0fd0a, 0x0fd0b, 0x0fc27, 0x0fc28, 0x00627, 0x00627, 0x0fd3e, 0x0fd3f,
+ 0x0fd40, 0x0fd41, 0x0fd42, 0x0fd43, 0x0fd44, 0x0fd45, 0x0fd46, 0x0fd47,
+ 0x0fd48, 0x0fd49, 0x0fd4a, 0x0fd4b, 0x0fd4c, 0x0fd4d, 0x0fd4e, 0x0fd4f,
+ 0x0fd50, 0x0fd51, 0x0fd51, 0x0fd53, 0x0fd54, 0x0fd55, 0x0fd56, 0x0fd57,
+ 0x0fd58, 0x0fd58, 0x0fd5a, 0x0fd5b, 0x0fd5c, 0x0fd5d, 0x0fd5e, 0x0fd5f,
+ 0x0fd5f, 0x0fd61, 0x0fd62, 0x0fd62, 0x0fd64, 0x0fd64, 0x0fd66, 0x0fd67,
+ 0x0fd67, 0x0fd69, 0x0fd6a, 0x0fd6a, 0x0fd6c, 0x0fd6c, 0x0fd6e, 0x0fd6f,
+ 0x0fd6f, 0x0fd71, 0x0fd71, 0x0fd73, 0x0fd74, 0x0fd75, 0x0fd76, 0x0fd76,
+ 0x0fd78, 0x0fd79, 0x0fd7a, 0x0fd7b, 0x0fd7c, 0x0fd7c, 0x0fd7e, 0x0fd7f,
+ 0x0fd80, 0x0fd81, 0x0fd82, 0x0fd83, 0x0fd83, 0x0fd85, 0x0fd85, 0x0fd87,
+ 0x0fd87, 0x0fd89, 0x0fd8a, 0x0fd8b, 0x0fd8c, 0x0fd8d, 0x0fd8e, 0x0fd8f,
+ 0x0fd90, 0x0fd91, 0x0fd92, 0x0fd93, 0x0fd94, 0x0fd95, 0x0fd96, 0x0fd97,
+ 0x0fd97, 0x0fd99, 0x0fd9a, 0x0fd9b, 0x0fd9c, 0x0fd9c, 0x0fd9e, 0x0fd9f,
+ 0x0fda0, 0x0fda1, 0x0fda2, 0x0fda3, 0x0fda4, 0x0fda5, 0x0fda6, 0x0fda7,
+ 0x0fda8, 0x0fda9, 0x0fdaa, 0x0fdab, 0x0fdac, 0x0fdad, 0x0fdae, 0x0fdaf,
+ 0x0fdb0, 0x0fdb1, 0x0fdb2, 0x0fdb3, 0x0fd7e, 0x0fd80, 0x0fdb6, 0x0fdb7,
+ 0x0fdb8, 0x0fdb9, 0x0fdba, 0x0fdbb, 0x0fdba, 0x0fdb8, 0x0fdbe, 0x0fdbf,
+ 0x0fdc0, 0x0fdc1, 0x0fdc2, 0x0fdbb, 0x0fd75, 0x0fd66, 0x0fdc6, 0x0fdc7,
+ 0x0fdc8, 0x0fdc9, 0x0fdca, 0x0fdcb, 0x0fdcc, 0x0fdcd, 0x0fdce, 0x0fdcf,
+ 0x0fdd0, 0x0fdd1, 0x0fdd2, 0x0fdd3, 0x0fdd4, 0x0fdd5, 0x0fdd6, 0x0fdd7,
+ 0x0fdd8, 0x0fdd9, 0x0fdda, 0x0fddb, 0x0fddc, 0x0fddd, 0x0fdde, 0x0fddf,
+ 0x0fde0, 0x0fde1, 0x0fde2, 0x0fde3, 0x0fde4, 0x0fde5, 0x0fde6, 0x0fde7,
+ 0x0fde8, 0x0fde9, 0x0fdea, 0x0fdeb, 0x0fdec, 0x0fded, 0x0fdee, 0x0fdef,
+ 0x0fdf0, 0x0fdf1, 0x0fdf2, 0x0fdf3, 0x0fdf4, 0x0fdf5, 0x0fdf6, 0x0fdf7,
+ 0x0fdf8, 0x0fdf9, 0x0fdfa, 0x0fdfb, 0x0fdfc, 0x0fdfd, 0x0fdfe, 0x0fdff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fe[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x0fe10, 0x0fe11, 0x0fe12, 0x0fe13, 0x0fe14, 0x0fe15, 0x0fe16, 0x0fe17,
+ 0x0fe18, 0x0fe19, 0x0fe1a, 0x0fe1b, 0x0fe1c, 0x0fe1d, 0x0fe1e, 0x0fe1f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x0fe24, 0x0fe25, 0x0fe26, 0x0fe27,
+ 0x0fe28, 0x0fe29, 0x0fe2a, 0x0fe2b, 0x0fe2c, 0x0fe2d, 0x0fe2e, 0x0fe2f,
+ 0x02025, 0x02014, 0x02013, 0x0005f, 0x0005f, 0x00028, 0x00029, 0x0007b,
+ 0x0007d, 0x03014, 0x03015, 0x03010, 0x03011, 0x0300a, 0x0300b, 0x02329,
+ 0x0232a, 0x0300c, 0x0300d, 0x0300e, 0x0300f, 0x0fe45, 0x0fe46, 0x0005b,
+ 0x0005d, 0x0203e, 0x0203e, 0x0203e, 0x0203e, 0x0005f, 0x0005f, 0x0005f,
+ 0x0002c, 0x03001, 0x0002e, 0x0fe53, 0x0003b, 0x0003a, 0x0003f, 0x00021,
+ 0x02014, 0x00028, 0x00029, 0x0007b, 0x0007d, 0x03014, 0x03015, 0x00023,
+ 0x00026, 0x0002a, 0x0002b, 0x0002d, 0x0003c, 0x0003e, 0x0003d, 0x0fe67,
+ 0x0005c, 0x00024, 0x00025, 0x00040, 0x0fe6c, 0x0fe6d, 0x0fe6e, 0x0fe6f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x0fe75, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00621, 0x00622, 0x00622, 0x00623, 0x00623, 0x00624, 0x00624, 0x00625,
+ 0x00625, 0x00626, 0x00626, 0x00626, 0x00626, 0x00627, 0x00627, 0x00628,
+ 0x00628, 0x00628, 0x00628, 0x00629, 0x00629, 0x0062a, 0x0062a, 0x0062a,
+ 0x0062a, 0x0062b, 0x0062b, 0x0062b, 0x0062b, 0x0062c, 0x0062c, 0x0062c,
+ 0x0062c, 0x0062d, 0x0062d, 0x0062d, 0x0062d, 0x0062e, 0x0062e, 0x0062e,
+ 0x0062e, 0x0062f, 0x0062f, 0x00630, 0x00630, 0x00631, 0x00631, 0x00632,
+ 0x00632, 0x00633, 0x00633, 0x00633, 0x00633, 0x00634, 0x00634, 0x00634,
+ 0x00634, 0x00635, 0x00635, 0x00635, 0x00635, 0x00636, 0x00636, 0x00636,
+ 0x00636, 0x00637, 0x00637, 0x00637, 0x00637, 0x00638, 0x00638, 0x00638,
+ 0x00638, 0x00639, 0x00639, 0x00639, 0x00639, 0x0063a, 0x0063a, 0x0063a,
+ 0x0063a, 0x00641, 0x00641, 0x00641, 0x00641, 0x00642, 0x00642, 0x00642,
+ 0x00642, 0x00643, 0x00643, 0x00643, 0x00643, 0x00644, 0x00644, 0x00644,
+ 0x00644, 0x00645, 0x00645, 0x00645, 0x00645, 0x00646, 0x00646, 0x00646,
+ 0x00646, 0x00647, 0x00647, 0x00647, 0x00647, 0x00648, 0x00648, 0x00649,
+ 0x00649, 0x0064a, 0x0064a, 0x0064a, 0x0064a, 0x0fef5, 0x0fef5, 0x0fef7,
+ 0x0fef7, 0x0fef9, 0x0fef9, 0x0fefb, 0x0fefb, 0x0fefd, 0x0fefe, 0x0feff
+};
+
+static uint32_t unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_ff[] = {
+ 0x0ff00, 0x00021, 0x00022, 0x00023, 0x00024, 0x00025, 0x00026, 0x00027,
+ 0x00028, 0x00029, 0x0002a, 0x0002b, 0x0002c, 0x0002d, 0x0002e, 0x0002f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0003a, 0x0003b, 0x0003c, 0x0003d, 0x0003e, 0x0003f,
+ 0x00040, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0005b, 0x0005c, 0x0005d, 0x0005e, 0x0005f,
+ 0x00060, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0007b, 0x0007c, 0x0007d, 0x0007e, 0x02985,
+ 0x02986, 0x03002, 0x0300c, 0x0300d, 0x03001, 0x030fb, 0x03092, 0x03041,
+ 0x03043, 0x03045, 0x03047, 0x03049, 0x03083, 0x03085, 0x03087, 0x03063,
+ 0x030fc, 0x03042, 0x03044, 0x03046, 0x03048, 0x0304a, 0x0304b, 0x0304d,
+ 0x0304f, 0x03051, 0x03053, 0x03055, 0x03057, 0x03059, 0x0305b, 0x0305d,
+ 0x0305f, 0x03061, 0x03064, 0x03066, 0x03068, 0x0306a, 0x0306b, 0x0306c,
+ 0x0306d, 0x0306e, 0x0306f, 0x03072, 0x03075, 0x03078, 0x0307b, 0x0307e,
+ 0x0307f, 0x03080, 0x03081, 0x03082, 0x03084, 0x03086, 0x03088, 0x03089,
+ 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x03093, 0x00000, 0x00000,
+ 0x01160, 0x01100, 0x01101, 0x011aa, 0x01102, 0x011ac, 0x011ad, 0x01103,
+ 0x01104, 0x01105, 0x011b0, 0x011b1, 0x011b2, 0x011b3, 0x011b4, 0x011b5,
+ 0x0111a, 0x01106, 0x01107, 0x01108, 0x01121, 0x01109, 0x0110a, 0x0110b,
+ 0x0110c, 0x0110d, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x0ffbf,
+ 0x0ffc0, 0x0ffc1, 0x01161, 0x01162, 0x01163, 0x01164, 0x01165, 0x01166,
+ 0x0ffc8, 0x0ffc9, 0x01167, 0x01168, 0x01169, 0x0116a, 0x0116b, 0x0116c,
+ 0x0ffd0, 0x0ffd1, 0x0116d, 0x0116e, 0x0116f, 0x01170, 0x01171, 0x01172,
+ 0x0ffd8, 0x0ffd9, 0x01173, 0x01174, 0x01175, 0x0ffdd, 0x0ffde, 0x0ffdf,
+ 0x000a2, 0x000a3, 0x000ac, 0x000af, 0x000a6, 0x000a5, 0x020a9, 0x0ffe7,
+ 0x02502, 0x02190, 0x02191, 0x02192, 0x02193, 0x025a0, 0x025cb, 0x0ffef,
+ 0x0fff0, 0x0fff1, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff5, 0x0fff6, 0x0fff7,
+ 0x0fff8, 0x00000, 0x00000, 0x00000, 0x0fffc, 0x0fffd, 0x0fffe, 0x0ffff
+};
+
+static uint32_t *unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_table[256] = {
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_00, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_01,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_02, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_03,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_04, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_05,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_06, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_07,
+ NULL, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_09,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0a, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0b,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0c, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0d,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0e, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_0f,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_10, NULL,
+ NULL, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_13,
+ NULL, NULL,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_16, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_17,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_18, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_19,
+ NULL, NULL,
+ NULL, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1d,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1e, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_1f,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_20, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_21,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_22, NULL,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_24, NULL,
+ NULL, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_27,
+ NULL, NULL,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2a, NULL,
+ NULL, NULL,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2e, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_2f,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_30, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_31,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_32, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_33,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_f9,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fa, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fb,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fc, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fd,
+ unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_fe, unicode_ci_except_kana_ci_kana_with_voiced_sound_mark_page_ff
+};
+
+#endif
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_table.h b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_table.h
new file mode 100644
index 00000000000..861c2029e68
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/normalizers/mysql_unicode_ci_table.h
@@ -0,0 +1,1685 @@
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ This file uses normalization table defined in
+ mysql-5.5.29/strings/ctype-uca.c.
+ The following is the header of the file:
+
+ Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ UCA (Unicode Collation Algorithm) support.
+ Written by Alexander Barkov <bar@mysql.com>
+*/
+
+#ifndef MYSQL_UCA_H
+#define MYSQL_UCA_H
+
+#include <stdint.h>
+
+static uint32_t unicode_ci_page_00[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00009, 0x0000a, 0x0000b, 0x0000c, 0x0000d, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00020, 0x00021, 0x00022, 0x00023, 0x00024, 0x00025, 0x00026, 0x00027,
+ 0x00028, 0x00029, 0x0002a, 0x0002b, 0x0002c, 0x0002d, 0x0002e, 0x0002f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0003a, 0x0003b, 0x0003c, 0x0003d, 0x0003e, 0x0003f,
+ 0x00040, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0005b, 0x0005c, 0x0005d, 0x0005e, 0x0005f,
+ 0x00060, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0007b, 0x0007c, 0x0007d, 0x0007e, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00085, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00020, 0x000a1, 0x000a2, 0x000a3, 0x000a4, 0x000a5, 0x000a6, 0x000a7,
+ 0x000a8, 0x000a9, 0x00041, 0x000ab, 0x000ac, 0x000ad, 0x000ae, 0x000af,
+ 0x000b0, 0x000b1, 0x00032, 0x00033, 0x000b4, 0x0039c, 0x000b6, 0x000b7,
+ 0x000b8, 0x00031, 0x0004f, 0x000bb, 0x000bc, 0x000bd, 0x000be, 0x000bf,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000d7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x000df,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x000c6, 0x00043,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x000d0, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x000f7,
+ 0x000d8, 0x00055, 0x00055, 0x00055, 0x00055, 0x00059, 0x000de, 0x00059
+};
+
+static uint32_t unicode_ci_page_01[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00043, 0x00043,
+ 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00043, 0x00044, 0x00044,
+ 0x00110, 0x00110, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00047, 0x00047, 0x00047, 0x00047,
+ 0x00047, 0x00047, 0x00047, 0x00047, 0x00048, 0x00048, 0x00126, 0x00126,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x00049, 0x00131, 0x00132, 0x00132, 0x0004a, 0x0004a, 0x0004b, 0x0004b,
+ 0x00138, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0013f,
+ 0x0013f, 0x00141, 0x00141, 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x00149, 0x0014a, 0x0014a, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00152, 0x00152, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00052, 0x00052, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00166, 0x00166,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00057, 0x00057, 0x00059, 0x00059,
+ 0x00059, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00053,
+ 0x00180, 0x00181, 0x00182, 0x00182, 0x00184, 0x00184, 0x00186, 0x00187,
+ 0x00187, 0x00189, 0x0018a, 0x0018b, 0x0018b, 0x0018d, 0x0018e, 0x0018f,
+ 0x00190, 0x00191, 0x00191, 0x00193, 0x00194, 0x00195, 0x00196, 0x00197,
+ 0x00198, 0x00198, 0x0019a, 0x0019b, 0x0019c, 0x0019d, 0x0019e, 0x0019f,
+ 0x0004f, 0x0004f, 0x001a2, 0x001a2, 0x001a4, 0x001a4, 0x001a6, 0x001a7,
+ 0x001a7, 0x001a9, 0x001aa, 0x001ab, 0x001ac, 0x001ac, 0x001ae, 0x00055,
+ 0x00055, 0x001b1, 0x001b2, 0x001b3, 0x001b3, 0x001b5, 0x001b5, 0x001b7,
+ 0x001b8, 0x001b8, 0x001ba, 0x001bb, 0x001bc, 0x001bc, 0x001be, 0x001bf,
+ 0x001c0, 0x001c1, 0x001c2, 0x001c3, 0x001c4, 0x001c4, 0x001c4, 0x001c7,
+ 0x001c7, 0x001c7, 0x001ca, 0x001ca, 0x001ca, 0x00041, 0x00041, 0x00049,
+ 0x00049, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x0018e, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x000c6, 0x000c6, 0x001e4, 0x001e4, 0x00047, 0x00047,
+ 0x0004b, 0x0004b, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x001b7, 0x001b7,
+ 0x0004a, 0x001c4, 0x001c4, 0x001c4, 0x00047, 0x00047, 0x00195, 0x001bf,
+ 0x0004e, 0x0004e, 0x00041, 0x00041, 0x000c6, 0x000c6, 0x000d8, 0x001ff
+};
+
+static uint32_t unicode_ci_page_02[] = {
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x0021c, 0x0021c, 0x00048, 0x00048,
+ 0x0019e, 0x00221, 0x00222, 0x00222, 0x00224, 0x00224, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x00059, 0x00059, 0x00234, 0x00235, 0x00236, 0x00237,
+ 0x00238, 0x00239, 0x0023a, 0x0023b, 0x0023c, 0x0023d, 0x0023e, 0x0023f,
+ 0x00240, 0x00241, 0x00242, 0x00243, 0x00244, 0x00245, 0x00246, 0x00247,
+ 0x00248, 0x00249, 0x0024a, 0x0024b, 0x0024c, 0x0024d, 0x0024e, 0x0024f,
+ 0x00250, 0x00251, 0x00252, 0x00181, 0x00186, 0x00255, 0x00189, 0x0018a,
+ 0x00258, 0x0018f, 0x0025a, 0x00190, 0x0025c, 0x0025d, 0x0025e, 0x0025f,
+ 0x00193, 0x00261, 0x00262, 0x00194, 0x00264, 0x00265, 0x00266, 0x00267,
+ 0x00197, 0x00196, 0x0026a, 0x0026b, 0x0026c, 0x0026d, 0x0026e, 0x0019c,
+ 0x00270, 0x00271, 0x0019d, 0x00273, 0x00274, 0x0019f, 0x00276, 0x00277,
+ 0x00278, 0x00279, 0x0027a, 0x0027b, 0x0027c, 0x0027d, 0x0027e, 0x0027f,
+ 0x001a6, 0x00281, 0x00282, 0x001a9, 0x00284, 0x00285, 0x00286, 0x00287,
+ 0x001ae, 0x00289, 0x001b1, 0x001b2, 0x0028c, 0x0028d, 0x0028e, 0x0028f,
+ 0x00290, 0x00291, 0x001b7, 0x00293, 0x00294, 0x00295, 0x00296, 0x00297,
+ 0x00298, 0x00299, 0x0029a, 0x0029b, 0x0029c, 0x0029d, 0x0029e, 0x0029f,
+ 0x002a0, 0x002a1, 0x002a2, 0x001c4, 0x002a4, 0x002a5, 0x001be, 0x002a7,
+ 0x002a8, 0x002a9, 0x002aa, 0x002ab, 0x002ac, 0x002ad, 0x002ae, 0x002af,
+ 0x00048, 0x00266, 0x0004a, 0x00052, 0x00279, 0x0027b, 0x00281, 0x00057,
+ 0x00059, 0x002b9, 0x002ba, 0x002bb, 0x002bc, 0x002bd, 0x002be, 0x002bf,
+ 0x002c0, 0x002c1, 0x002c2, 0x002c3, 0x002c4, 0x002c5, 0x002c6, 0x002c7,
+ 0x002c8, 0x002c9, 0x002ca, 0x002cb, 0x002cc, 0x002cd, 0x002ce, 0x002cf,
+ 0x002d0, 0x002d1, 0x002d2, 0x002d3, 0x002d4, 0x002d5, 0x002d6, 0x002d7,
+ 0x002d8, 0x002d9, 0x002da, 0x002db, 0x002dc, 0x002dd, 0x002de, 0x002df,
+ 0x00194, 0x0004c, 0x00053, 0x00058, 0x00295, 0x002e5, 0x002e6, 0x002e7,
+ 0x002e8, 0x002e9, 0x002ea, 0x002eb, 0x002ec, 0x002ed, 0x002ee, 0x002ef,
+ 0x002f0, 0x002f1, 0x002f2, 0x002f3, 0x002f4, 0x002f5, 0x002f6, 0x002f7,
+ 0x002f8, 0x002f9, 0x002fa, 0x002fb, 0x002fc, 0x002fd, 0x002fe, 0x002ff
+};
+
+static uint32_t unicode_ci_page_03[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00358, 0x00359, 0x0035a, 0x0035b, 0x0035c, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00041, 0x00045, 0x00049, 0x0004f, 0x00055,
+ 0x00043, 0x00044, 0x00048, 0x0004d, 0x00052, 0x00054, 0x00056, 0x00058,
+ 0x00370, 0x00371, 0x00372, 0x00373, 0x002b9, 0x00375, 0x00376, 0x00377,
+ 0x00378, 0x00379, 0x00399, 0x0037b, 0x0037c, 0x0037d, 0x0003b, 0x0037f,
+ 0x00380, 0x00381, 0x00382, 0x00383, 0x000b4, 0x000a8, 0x00391, 0x000b7,
+ 0x00395, 0x00397, 0x00399, 0x0038b, 0x0039f, 0x0038d, 0x003a5, 0x003a9,
+ 0x00399, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a2, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x00391, 0x00395, 0x00397, 0x00399,
+ 0x003a5, 0x00391, 0x00392, 0x00393, 0x00394, 0x00395, 0x00396, 0x00397,
+ 0x00398, 0x00399, 0x0039a, 0x0039b, 0x0039c, 0x0039d, 0x0039e, 0x0039f,
+ 0x003a0, 0x003a1, 0x003a3, 0x003a3, 0x003a4, 0x003a5, 0x003a6, 0x003a7,
+ 0x003a8, 0x003a9, 0x00399, 0x003a5, 0x0039f, 0x003a5, 0x003a9, 0x003cf,
+ 0x00392, 0x00398, 0x003a5, 0x003a5, 0x003a5, 0x003a6, 0x003a0, 0x003d7,
+ 0x003d8, 0x003d8, 0x003da, 0x003da, 0x003dc, 0x003dc, 0x003de, 0x003de,
+ 0x003e0, 0x003e0, 0x003e2, 0x003e2, 0x003e4, 0x003e4, 0x003e6, 0x003e6,
+ 0x003e8, 0x003e8, 0x003ea, 0x003ea, 0x003ec, 0x003ec, 0x003ee, 0x003ee,
+ 0x0039a, 0x003a1, 0x003a3, 0x003f3, 0x00398, 0x00395, 0x003f6, 0x003f7,
+ 0x003f7, 0x003a3, 0x003fa, 0x003fa, 0x003fc, 0x003fd, 0x003fe, 0x003ff
+};
+
+static uint32_t unicode_ci_page_04[] = {
+ 0x00400, 0x00400, 0x00402, 0x00403, 0x00404, 0x00405, 0x00406, 0x00407,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0040c, 0x0040d, 0x0040e, 0x0040f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00400, 0x00416, 0x00417,
+ 0x0040d, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00410, 0x00411, 0x00412, 0x00413, 0x00414, 0x00400, 0x00416, 0x00417,
+ 0x0040d, 0x00419, 0x0041a, 0x0041b, 0x0041c, 0x0041d, 0x0041e, 0x0041f,
+ 0x00420, 0x00421, 0x00422, 0x00423, 0x00424, 0x00425, 0x00426, 0x00427,
+ 0x00428, 0x00429, 0x0042a, 0x0042b, 0x0042c, 0x0042d, 0x0042e, 0x0042f,
+ 0x00400, 0x00400, 0x00402, 0x00403, 0x00404, 0x00405, 0x00406, 0x00407,
+ 0x00408, 0x00409, 0x0040a, 0x0040b, 0x0040c, 0x0040d, 0x0040e, 0x0040f,
+ 0x00460, 0x00460, 0x00462, 0x00462, 0x00464, 0x00464, 0x00466, 0x00466,
+ 0x00468, 0x00468, 0x0046a, 0x0046a, 0x0046c, 0x0046c, 0x0046e, 0x0046e,
+ 0x00470, 0x00470, 0x00472, 0x00472, 0x00474, 0x00474, 0x00476, 0x00476,
+ 0x00478, 0x00478, 0x0047a, 0x0047a, 0x0047c, 0x0047c, 0x0047e, 0x0047e,
+ 0x00480, 0x00480, 0x00482, 0x00000, 0x00000, 0x00000, 0x00000, 0x00487,
+ 0x00000, 0x00000, 0x0048a, 0x0048a, 0x0048c, 0x0048c, 0x0048e, 0x0048e,
+ 0x00413, 0x00413, 0x00492, 0x00492, 0x00494, 0x00494, 0x00496, 0x00496,
+ 0x00498, 0x00498, 0x0049a, 0x0049a, 0x0049c, 0x0049c, 0x0049e, 0x0049e,
+ 0x004a0, 0x004a0, 0x004a2, 0x004a2, 0x004a4, 0x004a4, 0x004a6, 0x004a6,
+ 0x004a8, 0x004a8, 0x004aa, 0x004aa, 0x004ac, 0x004ac, 0x004ae, 0x004ae,
+ 0x004b0, 0x004b0, 0x004b2, 0x004b2, 0x004b4, 0x004b4, 0x004b6, 0x004b6,
+ 0x004b8, 0x004b8, 0x004ba, 0x004ba, 0x004bc, 0x004bc, 0x004be, 0x004be,
+ 0x004c0, 0x00416, 0x00416, 0x004c3, 0x004c3, 0x004c5, 0x004c5, 0x004c7,
+ 0x004c7, 0x004c9, 0x004c9, 0x004cb, 0x004cb, 0x004cd, 0x004cd, 0x004cf,
+ 0x004d0, 0x004d0, 0x004d2, 0x004d2, 0x004d4, 0x004d4, 0x004d6, 0x004d6,
+ 0x004d8, 0x004d8, 0x004da, 0x004da, 0x004dc, 0x004dc, 0x004de, 0x004de,
+ 0x004e0, 0x004e0, 0x0040d, 0x0040d, 0x004e4, 0x004e4, 0x004e6, 0x004e6,
+ 0x004e8, 0x004e8, 0x004ea, 0x004ea, 0x004ec, 0x004ec, 0x00423, 0x00423,
+ 0x004f0, 0x004f0, 0x004f2, 0x004f2, 0x004f4, 0x004f4, 0x004f6, 0x004f7,
+ 0x004f8, 0x004f8, 0x004fa, 0x004fb, 0x004fc, 0x004fd, 0x004fe, 0x004ff
+};
+
+static uint32_t unicode_ci_page_05[] = {
+ 0x00500, 0x00500, 0x00502, 0x00502, 0x00504, 0x00504, 0x00506, 0x00506,
+ 0x00508, 0x00508, 0x0050a, 0x0050a, 0x0050c, 0x0050c, 0x0050e, 0x0050e,
+ 0x00510, 0x00511, 0x00512, 0x00513, 0x00514, 0x00515, 0x00516, 0x00517,
+ 0x00518, 0x00519, 0x0051a, 0x0051b, 0x0051c, 0x0051d, 0x0051e, 0x0051f,
+ 0x00520, 0x00521, 0x00522, 0x00523, 0x00524, 0x00525, 0x00526, 0x00527,
+ 0x00528, 0x00529, 0x0052a, 0x0052b, 0x0052c, 0x0052d, 0x0052e, 0x0052f,
+ 0x00530, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00557,
+ 0x00558, 0x00559, 0x0055a, 0x0055b, 0x0055c, 0x0055d, 0x0055e, 0x0055f,
+ 0x00560, 0x00531, 0x00532, 0x00533, 0x00534, 0x00535, 0x00536, 0x00537,
+ 0x00538, 0x00539, 0x0053a, 0x0053b, 0x0053c, 0x0053d, 0x0053e, 0x0053f,
+ 0x00540, 0x00541, 0x00542, 0x00543, 0x00544, 0x00545, 0x00546, 0x00547,
+ 0x00548, 0x00549, 0x0054a, 0x0054b, 0x0054c, 0x0054d, 0x0054e, 0x0054f,
+ 0x00550, 0x00551, 0x00552, 0x00553, 0x00554, 0x00555, 0x00556, 0x00587,
+ 0x00588, 0x00589, 0x0058a, 0x0058b, 0x0058c, 0x0058d, 0x0058e, 0x0058f,
+ 0x00590, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x005a2, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x005ba, 0x00000, 0x00000, 0x00000, 0x005be, 0x00000,
+ 0x005c0, 0x00000, 0x00000, 0x005c3, 0x00000, 0x005c5, 0x005c6, 0x005c7,
+ 0x005c8, 0x005c9, 0x005ca, 0x005cb, 0x005cc, 0x005cd, 0x005ce, 0x005cf,
+ 0x005d0, 0x005d1, 0x005d2, 0x005d3, 0x005d4, 0x005d5, 0x005d6, 0x005d7,
+ 0x005d8, 0x005d9, 0x005da, 0x005da, 0x005dc, 0x005dd, 0x005dd, 0x005df,
+ 0x005df, 0x005e1, 0x005e2, 0x005e3, 0x005e3, 0x005e5, 0x005e5, 0x005e7,
+ 0x005e8, 0x005e9, 0x005ea, 0x005eb, 0x005ec, 0x005ed, 0x005ee, 0x005ef,
+ 0x005f0, 0x005f1, 0x005f2, 0x005f3, 0x005f4, 0x005f5, 0x005f6, 0x005f7,
+ 0x005f8, 0x005f9, 0x005fa, 0x005fb, 0x005fc, 0x005fd, 0x005fe, 0x005ff
+};
+
+static uint32_t unicode_ci_page_06[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00604, 0x00605, 0x00606, 0x00607,
+ 0x00608, 0x00609, 0x0060a, 0x0060b, 0x0060c, 0x0060d, 0x0060e, 0x0060f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00616, 0x00617,
+ 0x00618, 0x00619, 0x0061a, 0x0061b, 0x0061c, 0x0061d, 0x0061e, 0x0061f,
+ 0x00620, 0x00621, 0x00622, 0x00623, 0x00624, 0x00625, 0x00626, 0x00627,
+ 0x00628, 0x00629, 0x0062a, 0x0062b, 0x0062c, 0x0062d, 0x0062e, 0x0062f,
+ 0x00630, 0x00631, 0x00632, 0x00633, 0x00634, 0x00635, 0x00636, 0x00637,
+ 0x00638, 0x00639, 0x0063a, 0x0063b, 0x0063c, 0x0063d, 0x0063e, 0x0063f,
+ 0x00640, 0x00641, 0x00642, 0x00643, 0x00644, 0x00645, 0x00646, 0x00647,
+ 0x00648, 0x00649, 0x0064a, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00659, 0x0065a, 0x0065b, 0x0065c, 0x0065d, 0x0065e, 0x0065f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0066a, 0x0066b, 0x0066c, 0x0066d, 0x0066e, 0x0066f,
+ 0x00000, 0x00671, 0x00672, 0x00673, 0x00621, 0x00675, 0x00676, 0x00677,
+ 0x00678, 0x00679, 0x0067a, 0x0067b, 0x0067c, 0x0067d, 0x0067e, 0x0067f,
+ 0x00680, 0x00681, 0x00682, 0x00683, 0x00684, 0x00685, 0x00686, 0x00687,
+ 0x00688, 0x00689, 0x0068a, 0x0068b, 0x0068c, 0x0068d, 0x0068e, 0x0068f,
+ 0x00690, 0x00691, 0x00692, 0x00693, 0x00694, 0x00695, 0x00696, 0x00697,
+ 0x00698, 0x00699, 0x0069a, 0x0069b, 0x0069c, 0x0069d, 0x0069e, 0x0069f,
+ 0x006a0, 0x006a1, 0x006a2, 0x006a3, 0x006a4, 0x006a5, 0x006a6, 0x006a7,
+ 0x006a8, 0x006a9, 0x006aa, 0x006ab, 0x006ac, 0x006ad, 0x006ae, 0x006af,
+ 0x006b0, 0x006b1, 0x006b2, 0x006b3, 0x006b4, 0x006b5, 0x006b6, 0x006b7,
+ 0x006b8, 0x006b9, 0x006ba, 0x006bb, 0x006bc, 0x006bd, 0x006be, 0x006bf,
+ 0x006c0, 0x006c1, 0x006c1, 0x006c3, 0x006c4, 0x006c5, 0x006c6, 0x006c7,
+ 0x006c8, 0x006c9, 0x006ca, 0x006cb, 0x006cc, 0x006cd, 0x006ce, 0x006cf,
+ 0x006d0, 0x006d1, 0x006d2, 0x006d2, 0x006d4, 0x006c0, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00648, 0x0064a, 0x00000,
+ 0x00000, 0x006e9, 0x00000, 0x00000, 0x00000, 0x00000, 0x006ee, 0x006ef,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x006fa, 0x006fb, 0x006fc, 0x00621, 0x00645, 0x006ff
+};
+
+static uint32_t unicode_ci_page_07[] = {
+ 0x00700, 0x00701, 0x00702, 0x00703, 0x00704, 0x00705, 0x00706, 0x00707,
+ 0x00708, 0x00709, 0x0070a, 0x0070b, 0x0070c, 0x0070d, 0x0070e, 0x00000,
+ 0x00710, 0x00000, 0x00712, 0x00713, 0x00713, 0x00715, 0x00716, 0x00717,
+ 0x00718, 0x00719, 0x0071a, 0x0071b, 0x0071b, 0x0071d, 0x0071e, 0x0071f,
+ 0x00720, 0x00721, 0x00722, 0x00723, 0x00723, 0x00725, 0x00726, 0x00726,
+ 0x00728, 0x00729, 0x0072a, 0x0072b, 0x0072c, 0x00712, 0x00713, 0x00715,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x0074b, 0x0074c, 0x0074d, 0x0074e, 0x0074f,
+ 0x00750, 0x00751, 0x00752, 0x00753, 0x00754, 0x00755, 0x00756, 0x00757,
+ 0x00758, 0x00759, 0x0075a, 0x0075b, 0x0075c, 0x0075d, 0x0075e, 0x0075f,
+ 0x00760, 0x00761, 0x00762, 0x00763, 0x00764, 0x00765, 0x00766, 0x00767,
+ 0x00768, 0x00769, 0x0076a, 0x0076b, 0x0076c, 0x0076d, 0x0076e, 0x0076f,
+ 0x00770, 0x00771, 0x00772, 0x00773, 0x00774, 0x00775, 0x00776, 0x00777,
+ 0x00778, 0x00779, 0x0077a, 0x0077b, 0x0077c, 0x0077d, 0x0077e, 0x0077f,
+ 0x00780, 0x00781, 0x00782, 0x00783, 0x00784, 0x00785, 0x00786, 0x00787,
+ 0x00788, 0x00789, 0x0078a, 0x0078b, 0x0078c, 0x0078d, 0x0078e, 0x0078f,
+ 0x00790, 0x00791, 0x00792, 0x00793, 0x00794, 0x00795, 0x00796, 0x00797,
+ 0x00798, 0x00799, 0x0079a, 0x0079b, 0x0079c, 0x0079d, 0x0079e, 0x0079f,
+ 0x007a0, 0x007a1, 0x007a2, 0x007a3, 0x007a4, 0x007a5, 0x007a6, 0x007a7,
+ 0x007a8, 0x007a9, 0x007aa, 0x007ab, 0x007ac, 0x007ad, 0x007ae, 0x007af,
+ 0x007b0, 0x007b1, 0x007b2, 0x007b3, 0x007b4, 0x007b5, 0x007b6, 0x007b7,
+ 0x007b8, 0x007b9, 0x007ba, 0x007bb, 0x007bc, 0x007bd, 0x007be, 0x007bf,
+ 0x007c0, 0x007c1, 0x007c2, 0x007c3, 0x007c4, 0x007c5, 0x007c6, 0x007c7,
+ 0x007c8, 0x007c9, 0x007ca, 0x007cb, 0x007cc, 0x007cd, 0x007ce, 0x007cf,
+ 0x007d0, 0x007d1, 0x007d2, 0x007d3, 0x007d4, 0x007d5, 0x007d6, 0x007d7,
+ 0x007d8, 0x007d9, 0x007da, 0x007db, 0x007dc, 0x007dd, 0x007de, 0x007df,
+ 0x007e0, 0x007e1, 0x007e2, 0x007e3, 0x007e4, 0x007e5, 0x007e6, 0x007e7,
+ 0x007e8, 0x007e9, 0x007ea, 0x007eb, 0x007ec, 0x007ed, 0x007ee, 0x007ef,
+ 0x007f0, 0x007f1, 0x007f2, 0x007f3, 0x007f4, 0x007f5, 0x007f6, 0x007f7,
+ 0x007f8, 0x007f9, 0x007fa, 0x007fb, 0x007fc, 0x007fd, 0x007fe, 0x007ff
+};
+
+static uint32_t unicode_ci_page_09[] = {
+ 0x00900, 0x00000, 0x00000, 0x00000, 0x00904, 0x00905, 0x00906, 0x00907,
+ 0x00908, 0x00909, 0x0090a, 0x0090b, 0x0090c, 0x0090d, 0x0090e, 0x0090f,
+ 0x00910, 0x00911, 0x00912, 0x00913, 0x00914, 0x00915, 0x00916, 0x00917,
+ 0x00918, 0x00919, 0x0091a, 0x0091b, 0x0091c, 0x0091d, 0x0091e, 0x0091f,
+ 0x00920, 0x00921, 0x00922, 0x00923, 0x00924, 0x00925, 0x00926, 0x00927,
+ 0x00928, 0x00928, 0x0092a, 0x0092b, 0x0092c, 0x0092d, 0x0092e, 0x0092f,
+ 0x00930, 0x00930, 0x00932, 0x00933, 0x00933, 0x00935, 0x00936, 0x00937,
+ 0x00938, 0x00939, 0x0093a, 0x0093b, 0x00000, 0x0093d, 0x0093e, 0x0093f,
+ 0x00940, 0x00941, 0x00942, 0x00943, 0x00944, 0x00945, 0x00946, 0x00947,
+ 0x00948, 0x00949, 0x0094a, 0x0094b, 0x0094c, 0x0094d, 0x0094e, 0x0094f,
+ 0x00950, 0x00000, 0x00000, 0x00000, 0x00000, 0x00955, 0x00956, 0x00957,
+ 0x00915, 0x00916, 0x00917, 0x0091c, 0x00921, 0x00922, 0x0092b, 0x0092f,
+ 0x00960, 0x00961, 0x00962, 0x00963, 0x00964, 0x00965, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00970, 0x00971, 0x00972, 0x00973, 0x00974, 0x00975, 0x00976, 0x00977,
+ 0x00978, 0x00979, 0x0097a, 0x0097b, 0x0097c, 0x0097d, 0x0097e, 0x0097f,
+ 0x00980, 0x00000, 0x00000, 0x00000, 0x00984, 0x00985, 0x00986, 0x00987,
+ 0x00988, 0x00989, 0x0098a, 0x0098b, 0x0098c, 0x0098d, 0x0098e, 0x0098f,
+ 0x00990, 0x00991, 0x00992, 0x00993, 0x00994, 0x00995, 0x00996, 0x00997,
+ 0x00998, 0x00999, 0x0099a, 0x0099b, 0x0099c, 0x0099d, 0x0099e, 0x0099f,
+ 0x009a0, 0x009a1, 0x009a2, 0x009a3, 0x009a4, 0x009a5, 0x009a6, 0x009a7,
+ 0x009a8, 0x009a9, 0x009aa, 0x009ab, 0x009ac, 0x009ad, 0x009ae, 0x009af,
+ 0x009b0, 0x009b1, 0x009b2, 0x009b3, 0x009b4, 0x009b5, 0x009b6, 0x009b7,
+ 0x009b8, 0x009b9, 0x009ba, 0x009bb, 0x00000, 0x009bd, 0x009be, 0x009bf,
+ 0x009c0, 0x009c1, 0x009c2, 0x009c3, 0x009c4, 0x009c5, 0x009c6, 0x009c7,
+ 0x009c8, 0x009c9, 0x009ca, 0x009cb, 0x009cc, 0x009cd, 0x009ce, 0x009cf,
+ 0x009d0, 0x009d1, 0x009d2, 0x009d3, 0x009d4, 0x009d5, 0x009d6, 0x009d7,
+ 0x009d8, 0x009d9, 0x009da, 0x009db, 0x009a1, 0x009a2, 0x009de, 0x009af,
+ 0x009e0, 0x009e1, 0x009e2, 0x009e3, 0x009e4, 0x009e5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x009f0, 0x009f1, 0x009f2, 0x009f3, 0x00031, 0x00032, 0x00033, 0x00034,
+ 0x009f8, 0x009f9, 0x009fa, 0x009fb, 0x009fc, 0x009fd, 0x009fe, 0x009ff
+};
+
+static uint32_t unicode_ci_page_0a[] = {
+ 0x00a00, 0x00000, 0x00000, 0x00000, 0x00a04, 0x00a05, 0x00a06, 0x00a07,
+ 0x00a08, 0x00a09, 0x00a0a, 0x00a0b, 0x00a0c, 0x00a0d, 0x00a0e, 0x00a0f,
+ 0x00a10, 0x00a11, 0x00a12, 0x00a13, 0x00a14, 0x00a15, 0x00a16, 0x00a17,
+ 0x00a18, 0x00a19, 0x00a1a, 0x00a1b, 0x00a1c, 0x00a1d, 0x00a1e, 0x00a1f,
+ 0x00a20, 0x00a21, 0x00a22, 0x00a23, 0x00a24, 0x00a25, 0x00a26, 0x00a27,
+ 0x00a28, 0x00a29, 0x00a2a, 0x00a2b, 0x00a2c, 0x00a2d, 0x00a2e, 0x00a2f,
+ 0x00a30, 0x00a31, 0x00a32, 0x00a32, 0x00a34, 0x00a35, 0x00a36, 0x00a37,
+ 0x00a36, 0x00a39, 0x00a3a, 0x00a3b, 0x00000, 0x00a3d, 0x00a3e, 0x00a3f,
+ 0x00a40, 0x00a41, 0x00a42, 0x00a43, 0x00a44, 0x00a45, 0x00a46, 0x00a47,
+ 0x00a48, 0x00a49, 0x00a4a, 0x00a4b, 0x00a4c, 0x00a4d, 0x00a4e, 0x00a4f,
+ 0x00a50, 0x00a51, 0x00a52, 0x00a53, 0x00a54, 0x00a55, 0x00a56, 0x00a57,
+ 0x00a58, 0x00a16, 0x00a17, 0x00a1c, 0x00a5c, 0x00a5d, 0x00a2b, 0x00a5f,
+ 0x00a60, 0x00a61, 0x00a62, 0x00a63, 0x00a64, 0x00a65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00000, 0x00000, 0x00a72, 0x00a73, 0x00a74, 0x00a75, 0x00a76, 0x00a77,
+ 0x00a78, 0x00a79, 0x00a7a, 0x00a7b, 0x00a7c, 0x00a7d, 0x00a7e, 0x00a7f,
+ 0x00a80, 0x00000, 0x00000, 0x00000, 0x00a84, 0x00a85, 0x00a86, 0x00a87,
+ 0x00a88, 0x00a89, 0x00a8a, 0x00a8b, 0x00a8c, 0x00a8d, 0x00a8e, 0x00a8f,
+ 0x00a90, 0x00a91, 0x00a92, 0x00a93, 0x00a94, 0x00a95, 0x00a96, 0x00a97,
+ 0x00a98, 0x00a99, 0x00a9a, 0x00a9b, 0x00a9c, 0x00a9d, 0x00a9e, 0x00a9f,
+ 0x00aa0, 0x00aa1, 0x00aa2, 0x00aa3, 0x00aa4, 0x00aa5, 0x00aa6, 0x00aa7,
+ 0x00aa8, 0x00aa9, 0x00aaa, 0x00aab, 0x00aac, 0x00aad, 0x00aae, 0x00aaf,
+ 0x00ab0, 0x00ab1, 0x00ab2, 0x00ab3, 0x00ab4, 0x00ab5, 0x00ab6, 0x00ab7,
+ 0x00ab8, 0x00ab9, 0x00aba, 0x00abb, 0x00000, 0x00abd, 0x00abe, 0x00abf,
+ 0x00ac0, 0x00ac1, 0x00ac2, 0x00ac3, 0x00ac4, 0x00ac5, 0x00ac6, 0x00ac7,
+ 0x00ac8, 0x00ac9, 0x00aca, 0x00acb, 0x00acc, 0x00acd, 0x00ace, 0x00acf,
+ 0x00ad0, 0x00ad1, 0x00ad2, 0x00ad3, 0x00ad4, 0x00ad5, 0x00ad6, 0x00ad7,
+ 0x00ad8, 0x00ad9, 0x00ada, 0x00adb, 0x00adc, 0x00add, 0x00ade, 0x00adf,
+ 0x00ae0, 0x00ae1, 0x00ae2, 0x00ae3, 0x00ae4, 0x00ae5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00af0, 0x00af1, 0x00af2, 0x00af3, 0x00af4, 0x00af5, 0x00af6, 0x00af7,
+ 0x00af8, 0x00af9, 0x00afa, 0x00afb, 0x00afc, 0x00afd, 0x00afe, 0x00aff
+};
+
+static uint32_t unicode_ci_page_0b[] = {
+ 0x00b00, 0x00000, 0x00000, 0x00000, 0x00b04, 0x00b05, 0x00b06, 0x00b07,
+ 0x00b08, 0x00b09, 0x00b0a, 0x00b0b, 0x00b0c, 0x00b0d, 0x00b0e, 0x00b0f,
+ 0x00b10, 0x00b11, 0x00b12, 0x00b13, 0x00b14, 0x00b15, 0x00b16, 0x00b17,
+ 0x00b18, 0x00b19, 0x00b1a, 0x00b1b, 0x00b1c, 0x00b1d, 0x00b1e, 0x00b1f,
+ 0x00b20, 0x00b21, 0x00b22, 0x00b23, 0x00b24, 0x00b25, 0x00b26, 0x00b27,
+ 0x00b28, 0x00b29, 0x00b2a, 0x00b2b, 0x00b2c, 0x00b2d, 0x00b2e, 0x00b2f,
+ 0x00b30, 0x00b31, 0x00b32, 0x00b33, 0x00b34, 0x00b35, 0x00b36, 0x00b37,
+ 0x00b38, 0x00b39, 0x00b3a, 0x00b3b, 0x00000, 0x00b3d, 0x00b3e, 0x00b3f,
+ 0x00b40, 0x00b41, 0x00b42, 0x00b43, 0x00b44, 0x00b45, 0x00b46, 0x00b47,
+ 0x00b48, 0x00b49, 0x00b4a, 0x00b4b, 0x00b4c, 0x00b4d, 0x00b4e, 0x00b4f,
+ 0x00b50, 0x00b51, 0x00b52, 0x00b53, 0x00b54, 0x00b55, 0x00b56, 0x00b57,
+ 0x00b58, 0x00b59, 0x00b5a, 0x00b5b, 0x00b21, 0x00b22, 0x00b5e, 0x00b5f,
+ 0x00b60, 0x00b61, 0x00b62, 0x00b63, 0x00b64, 0x00b65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00b70, 0x00b71, 0x00b72, 0x00b73, 0x00b74, 0x00b75, 0x00b76, 0x00b77,
+ 0x00b78, 0x00b79, 0x00b7a, 0x00b7b, 0x00b7c, 0x00b7d, 0x00b7e, 0x00b7f,
+ 0x00b80, 0x00b81, 0x00000, 0x00b83, 0x00b84, 0x00b85, 0x00b86, 0x00b87,
+ 0x00b88, 0x00b89, 0x00b8a, 0x00b8b, 0x00b8c, 0x00b8d, 0x00b8e, 0x00b8f,
+ 0x00b90, 0x00b91, 0x00b92, 0x00b93, 0x00b94, 0x00b95, 0x00b96, 0x00b97,
+ 0x00b98, 0x00b99, 0x00b9a, 0x00b9b, 0x00b9c, 0x00b9d, 0x00b9e, 0x00b9f,
+ 0x00ba0, 0x00ba1, 0x00ba2, 0x00ba3, 0x00ba4, 0x00ba5, 0x00ba6, 0x00ba7,
+ 0x00ba8, 0x00ba9, 0x00baa, 0x00bab, 0x00bac, 0x00bad, 0x00bae, 0x00baf,
+ 0x00bb0, 0x00bb1, 0x00bb2, 0x00bb3, 0x00bb4, 0x00bb5, 0x00bb6, 0x00bb7,
+ 0x00bb8, 0x00bb9, 0x00bba, 0x00bbb, 0x00bbc, 0x00bbd, 0x00bbe, 0x00bbf,
+ 0x00bc0, 0x00bc1, 0x00bc2, 0x00bc3, 0x00bc4, 0x00bc5, 0x00bc6, 0x00bc7,
+ 0x00bc8, 0x00bc9, 0x00bca, 0x00bcb, 0x00bcc, 0x00bcd, 0x00bce, 0x00bcf,
+ 0x00bd0, 0x00bd1, 0x00bd2, 0x00bd3, 0x00bd4, 0x00bd5, 0x00bd6, 0x00bd7,
+ 0x00bd8, 0x00bd9, 0x00bda, 0x00bdb, 0x00bdc, 0x00bdd, 0x00bde, 0x00bdf,
+ 0x00be0, 0x00be1, 0x00be2, 0x00be3, 0x00be4, 0x00be5, 0x00be6, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00bf0, 0x00bf1, 0x00bf2, 0x00bf3, 0x00bf4, 0x00bf5, 0x00bf6, 0x00bf7,
+ 0x00bf8, 0x00bf9, 0x00bfa, 0x00bfb, 0x00bfc, 0x00bfd, 0x00bfe, 0x00bff
+};
+
+static uint32_t unicode_ci_page_0c[] = {
+ 0x00c00, 0x00000, 0x00000, 0x00000, 0x00c04, 0x00c05, 0x00c06, 0x00c07,
+ 0x00c08, 0x00c09, 0x00c0a, 0x00c0b, 0x00c0c, 0x00c0d, 0x00c0e, 0x00c0f,
+ 0x00c10, 0x00c11, 0x00c12, 0x00c13, 0x00c14, 0x00c15, 0x00c16, 0x00c17,
+ 0x00c18, 0x00c19, 0x00c1a, 0x00c1b, 0x00c1c, 0x00c1d, 0x00c1e, 0x00c1f,
+ 0x00c20, 0x00c21, 0x00c22, 0x00c23, 0x00c24, 0x00c25, 0x00c26, 0x00c27,
+ 0x00c28, 0x00c29, 0x00c2a, 0x00c2b, 0x00c2c, 0x00c2d, 0x00c2e, 0x00c2f,
+ 0x00c30, 0x00c31, 0x00c32, 0x00c33, 0x00c34, 0x00c35, 0x00c36, 0x00c37,
+ 0x00c38, 0x00c39, 0x00c3a, 0x00c3b, 0x00c3c, 0x00c3d, 0x00c3e, 0x00c3f,
+ 0x00c40, 0x00c41, 0x00c42, 0x00c43, 0x00c44, 0x00c45, 0x00c46, 0x00c47,
+ 0x00c48, 0x00c49, 0x00c4a, 0x00c4b, 0x00c4c, 0x00c4d, 0x00c4e, 0x00c4f,
+ 0x00c50, 0x00c51, 0x00c52, 0x00c53, 0x00c54, 0x00c55, 0x00c56, 0x00c57,
+ 0x00c58, 0x00c59, 0x00c5a, 0x00c5b, 0x00c5c, 0x00c5d, 0x00c5e, 0x00c5f,
+ 0x00c60, 0x00c61, 0x00c62, 0x00c63, 0x00c64, 0x00c65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00c70, 0x00c71, 0x00c72, 0x00c73, 0x00c74, 0x00c75, 0x00c76, 0x00c77,
+ 0x00c78, 0x00c79, 0x00c7a, 0x00c7b, 0x00c7c, 0x00c7d, 0x00c7e, 0x00c7f,
+ 0x00c80, 0x00c81, 0x00000, 0x00000, 0x00c84, 0x00c85, 0x00c86, 0x00c87,
+ 0x00c88, 0x00c89, 0x00c8a, 0x00c8b, 0x00c8c, 0x00c8d, 0x00c8e, 0x00c8f,
+ 0x00c90, 0x00c91, 0x00c92, 0x00c93, 0x00c94, 0x00c95, 0x00c96, 0x00c97,
+ 0x00c98, 0x00c99, 0x00c9a, 0x00c9b, 0x00c9c, 0x00c9d, 0x00c9e, 0x00c9f,
+ 0x00ca0, 0x00ca1, 0x00ca2, 0x00ca3, 0x00ca4, 0x00ca5, 0x00ca6, 0x00ca7,
+ 0x00ca8, 0x00ca9, 0x00caa, 0x00cab, 0x00cac, 0x00cad, 0x00cae, 0x00caf,
+ 0x00cb0, 0x00cb1, 0x00cb2, 0x00cb3, 0x00cb4, 0x00cb5, 0x00cb6, 0x00cb7,
+ 0x00cb8, 0x00cb9, 0x00cba, 0x00cbb, 0x00000, 0x00cbd, 0x00cbe, 0x00cbf,
+ 0x00cc0, 0x00cc1, 0x00cc2, 0x00cc3, 0x00cc4, 0x00cc5, 0x00cc6, 0x00cc7,
+ 0x00cc8, 0x00cc9, 0x00cca, 0x00ccb, 0x00ccc, 0x00ccd, 0x00cce, 0x00ccf,
+ 0x00cd0, 0x00cd1, 0x00cd2, 0x00cd3, 0x00cd4, 0x00cd5, 0x00cd6, 0x00cd7,
+ 0x00cd8, 0x00cd9, 0x00cda, 0x00cdb, 0x00cdc, 0x00cdd, 0x00cde, 0x00cdf,
+ 0x00ce0, 0x00ce1, 0x00ce2, 0x00ce3, 0x00ce4, 0x00ce5, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00cf0, 0x00cf1, 0x00cf2, 0x00cf3, 0x00cf4, 0x00cf5, 0x00cf6, 0x00cf7,
+ 0x00cf8, 0x00cf9, 0x00cfa, 0x00cfb, 0x00cfc, 0x00cfd, 0x00cfe, 0x00cff
+};
+
+static uint32_t unicode_ci_page_0d[] = {
+ 0x00d00, 0x00d01, 0x00000, 0x00000, 0x00d04, 0x00d05, 0x00d06, 0x00d07,
+ 0x00d08, 0x00d09, 0x00d0a, 0x00d0b, 0x00d0c, 0x00d0d, 0x00d0e, 0x00d0f,
+ 0x00d10, 0x00d11, 0x00d12, 0x00d13, 0x00d14, 0x00d15, 0x00d16, 0x00d17,
+ 0x00d18, 0x00d19, 0x00d1a, 0x00d1b, 0x00d1c, 0x00d1d, 0x00d1e, 0x00d1f,
+ 0x00d20, 0x00d21, 0x00d22, 0x00d23, 0x00d24, 0x00d25, 0x00d26, 0x00d27,
+ 0x00d28, 0x00d29, 0x00d2a, 0x00d2b, 0x00d2c, 0x00d2d, 0x00d2e, 0x00d2f,
+ 0x00d30, 0x00d31, 0x00d32, 0x00d33, 0x00d34, 0x00d35, 0x00d36, 0x00d37,
+ 0x00d38, 0x00d39, 0x00d3a, 0x00d3b, 0x00d3c, 0x00d3d, 0x00d3e, 0x00d3f,
+ 0x00d40, 0x00d41, 0x00d42, 0x00d43, 0x00d44, 0x00d45, 0x00d46, 0x00d47,
+ 0x00d48, 0x00d49, 0x00d4a, 0x00d4b, 0x00d4c, 0x00d4d, 0x00d4e, 0x00d4f,
+ 0x00d50, 0x00d51, 0x00d52, 0x00d53, 0x00d54, 0x00d55, 0x00d56, 0x00d57,
+ 0x00d58, 0x00d59, 0x00d5a, 0x00d5b, 0x00d5c, 0x00d5d, 0x00d5e, 0x00d5f,
+ 0x00d60, 0x00d61, 0x00d62, 0x00d63, 0x00d64, 0x00d65, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x00d70, 0x00d71, 0x00d72, 0x00d73, 0x00d74, 0x00d75, 0x00d76, 0x00d77,
+ 0x00d78, 0x00d79, 0x00d7a, 0x00d7b, 0x00d7c, 0x00d7d, 0x00d7e, 0x00d7f,
+ 0x00d80, 0x00d81, 0x00000, 0x00000, 0x00d84, 0x00d85, 0x00d86, 0x00d87,
+ 0x00d88, 0x00d89, 0x00d8a, 0x00d8b, 0x00d8c, 0x00d8d, 0x00d8e, 0x00d8f,
+ 0x00d90, 0x00d91, 0x00d92, 0x00d93, 0x00d94, 0x00d95, 0x00d96, 0x00d97,
+ 0x00d98, 0x00d99, 0x00d9a, 0x00d9b, 0x00d9c, 0x00d9d, 0x00d9e, 0x00d9f,
+ 0x00da0, 0x00da1, 0x00da2, 0x00da3, 0x00da4, 0x00da5, 0x00da6, 0x00da7,
+ 0x00da8, 0x00da9, 0x00daa, 0x00dab, 0x00dac, 0x00dad, 0x00dae, 0x00daf,
+ 0x00db0, 0x00db1, 0x00db2, 0x00db3, 0x00db4, 0x00db5, 0x00db6, 0x00db7,
+ 0x00db8, 0x00db9, 0x00dba, 0x00dbb, 0x00dbc, 0x00dbd, 0x00dbe, 0x00dbf,
+ 0x00dc0, 0x00dc1, 0x00dc2, 0x00dc3, 0x00dc4, 0x00dc5, 0x00dc6, 0x00dc7,
+ 0x00dc8, 0x00dc9, 0x00dca, 0x00dcb, 0x00dcc, 0x00dcd, 0x00dce, 0x00dcf,
+ 0x00dd0, 0x00dd1, 0x00dd2, 0x00dd3, 0x00dd4, 0x00dd5, 0x00dd6, 0x00dd7,
+ 0x00dd8, 0x00dd9, 0x00dda, 0x00ddb, 0x00ddc, 0x00ddd, 0x00dde, 0x00ddf,
+ 0x00de0, 0x00de1, 0x00de2, 0x00de3, 0x00de4, 0x00de5, 0x00de6, 0x00de7,
+ 0x00de8, 0x00de9, 0x00dea, 0x00deb, 0x00dec, 0x00ded, 0x00dee, 0x00def,
+ 0x00df0, 0x00df1, 0x00df2, 0x00df3, 0x00df4, 0x00df5, 0x00df6, 0x00df7,
+ 0x00df8, 0x00df9, 0x00dfa, 0x00dfb, 0x00dfc, 0x00dfd, 0x00dfe, 0x00dff
+};
+
+static uint32_t unicode_ci_page_0e[] = {
+ 0x00e00, 0x00e01, 0x00e02, 0x00e03, 0x00e04, 0x00e05, 0x00e06, 0x00e07,
+ 0x00e08, 0x00e09, 0x00e0a, 0x00e0b, 0x00e0c, 0x00e0d, 0x00e0e, 0x00e0f,
+ 0x00e10, 0x00e11, 0x00e12, 0x00e13, 0x00e14, 0x00e15, 0x00e16, 0x00e17,
+ 0x00e18, 0x00e19, 0x00e1a, 0x00e1b, 0x00e1c, 0x00e1d, 0x00e1e, 0x00e1f,
+ 0x00e20, 0x00e21, 0x00e22, 0x00e23, 0x00e24, 0x00e25, 0x00e26, 0x00e27,
+ 0x00e28, 0x00e29, 0x00e2a, 0x00e2b, 0x00e2c, 0x00e2d, 0x00e2e, 0x00e2f,
+ 0x00e30, 0x00e31, 0x00e32, 0x00e33, 0x00e34, 0x00e35, 0x00e36, 0x00e37,
+ 0x00e38, 0x00e39, 0x00e3a, 0x00e3b, 0x00e3c, 0x00e3d, 0x00e3e, 0x00e3f,
+ 0x00e40, 0x00e41, 0x00e42, 0x00e43, 0x00e44, 0x00e45, 0x00e46, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00e4c, 0x00e4d, 0x00000, 0x00e4f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00e5a, 0x00e5b, 0x00e5c, 0x00e5d, 0x00e5e, 0x00e5f,
+ 0x00e60, 0x00e61, 0x00e62, 0x00e63, 0x00e64, 0x00e65, 0x00e66, 0x00e67,
+ 0x00e68, 0x00e69, 0x00e6a, 0x00e6b, 0x00e6c, 0x00e6d, 0x00e6e, 0x00e6f,
+ 0x00e70, 0x00e71, 0x00e72, 0x00e73, 0x00e74, 0x00e75, 0x00e76, 0x00e77,
+ 0x00e78, 0x00e79, 0x00e7a, 0x00e7b, 0x00e7c, 0x00e7d, 0x00e7e, 0x00e7f,
+ 0x00e80, 0x00e81, 0x00e82, 0x00e83, 0x00e84, 0x00e85, 0x00e86, 0x00e87,
+ 0x00e88, 0x00e89, 0x00e8a, 0x00e8b, 0x00e8c, 0x00e8d, 0x00e8e, 0x00e8f,
+ 0x00e90, 0x00e91, 0x00e92, 0x00e93, 0x00e94, 0x00e95, 0x00e96, 0x00e97,
+ 0x00e98, 0x00e99, 0x00e9a, 0x00e9b, 0x00e9c, 0x00e9d, 0x00e9e, 0x00e9f,
+ 0x00ea0, 0x00ea1, 0x00ea2, 0x00ea3, 0x00ea4, 0x00ea5, 0x00ea6, 0x00ea7,
+ 0x00ea8, 0x00ea9, 0x00eaa, 0x00eab, 0x00eac, 0x00ead, 0x00eae, 0x00eaf,
+ 0x00eb0, 0x00eb1, 0x00eb2, 0x00eb3, 0x00eb4, 0x00eb5, 0x00eb6, 0x00eb7,
+ 0x00eb8, 0x00eb9, 0x00eba, 0x00ebb, 0x00ebc, 0x00ebd, 0x00ebe, 0x00ebf,
+ 0x00ec0, 0x00ec1, 0x00ec2, 0x00ec3, 0x00ec4, 0x00ec5, 0x00ec6, 0x00ec7,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00ecc, 0x00ecd, 0x00ece, 0x00ecf,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00eda, 0x00edb, 0x00edc, 0x00edd, 0x00ede, 0x00edf,
+ 0x00ee0, 0x00ee1, 0x00ee2, 0x00ee3, 0x00ee4, 0x00ee5, 0x00ee6, 0x00ee7,
+ 0x00ee8, 0x00ee9, 0x00eea, 0x00eeb, 0x00eec, 0x00eed, 0x00eee, 0x00eef,
+ 0x00ef0, 0x00ef1, 0x00ef2, 0x00ef3, 0x00ef4, 0x00ef5, 0x00ef6, 0x00ef7,
+ 0x00ef8, 0x00ef9, 0x00efa, 0x00efb, 0x00efc, 0x00efd, 0x00efe, 0x00eff
+};
+
+static uint32_t unicode_ci_page_0f[] = {
+ 0x00f00, 0x00f01, 0x00f02, 0x00f03, 0x00f04, 0x00f05, 0x00f06, 0x00f07,
+ 0x00f08, 0x00f09, 0x00f0a, 0x00f0b, 0x00f0b, 0x00f0d, 0x00f0e, 0x00f0f,
+ 0x00f10, 0x00f11, 0x00f12, 0x00f13, 0x00f14, 0x00f15, 0x00f16, 0x00f17,
+ 0x00000, 0x00000, 0x00f1a, 0x00f1b, 0x00f1c, 0x00f1d, 0x00f1e, 0x00f1f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036,
+ 0x00037, 0x00038, 0x00039, 0x00030, 0x00f34, 0x00000, 0x00f36, 0x00000,
+ 0x00f38, 0x00000, 0x00f3a, 0x00f3b, 0x00f3c, 0x00f3d, 0x00f3e, 0x00f3f,
+ 0x00f40, 0x00f41, 0x00f42, 0x00f43, 0x00f44, 0x00f45, 0x00f46, 0x00f47,
+ 0x00f48, 0x00f49, 0x00f4a, 0x00f4b, 0x00f4c, 0x00f4d, 0x00f4e, 0x00f4f,
+ 0x00f50, 0x00f51, 0x00f52, 0x00f53, 0x00f54, 0x00f55, 0x00f56, 0x00f57,
+ 0x00f58, 0x00f59, 0x00f5a, 0x00f5b, 0x00f5c, 0x00f5d, 0x00f5e, 0x00f5f,
+ 0x00f60, 0x00f61, 0x00f62, 0x00f63, 0x00f64, 0x00f65, 0x00f66, 0x00f67,
+ 0x00f68, 0x00f69, 0x00f62, 0x00f6b, 0x00f6c, 0x00f6d, 0x00f6e, 0x00f6f,
+ 0x00f70, 0x00f71, 0x00f72, 0x00f73, 0x00f74, 0x00f75, 0x00f76, 0x00f77,
+ 0x00f78, 0x00f79, 0x00f7a, 0x00f7b, 0x00f7c, 0x00f7d, 0x00000, 0x00000,
+ 0x00f80, 0x00f81, 0x00000, 0x00000, 0x00f84, 0x00f85, 0x00000, 0x00000,
+ 0x00f88, 0x00f89, 0x00f8a, 0x00f8b, 0x00f8c, 0x00f8d, 0x00f8e, 0x00f8f,
+ 0x00f90, 0x00f91, 0x00f92, 0x00f93, 0x00f94, 0x00f95, 0x00f96, 0x00f97,
+ 0x00f98, 0x00f99, 0x00f9a, 0x00f9b, 0x00f9c, 0x00f9d, 0x00f9e, 0x00f9f,
+ 0x00fa0, 0x00fa1, 0x00fa2, 0x00fa3, 0x00fa4, 0x00fa5, 0x00fa6, 0x00fa7,
+ 0x00fa8, 0x00fa9, 0x00faa, 0x00fab, 0x00fac, 0x00fad, 0x00fae, 0x00faf,
+ 0x00fb0, 0x00fb1, 0x00fb2, 0x00fb3, 0x00fb4, 0x00fb5, 0x00fb6, 0x00fb7,
+ 0x00fb8, 0x00fb9, 0x00fad, 0x00fb1, 0x00fb2, 0x00fbd, 0x00fbe, 0x00fbf,
+ 0x00fc0, 0x00fc1, 0x00fc2, 0x00fc3, 0x00fc4, 0x00fc5, 0x00000, 0x00fc7,
+ 0x00fc8, 0x00fc9, 0x00fca, 0x00fcb, 0x00fcc, 0x00fcd, 0x00fce, 0x00fcf,
+ 0x00fd0, 0x00fd1, 0x00fd2, 0x00fd3, 0x00fd4, 0x00fd5, 0x00fd6, 0x00fd7,
+ 0x00fd8, 0x00fd9, 0x00fda, 0x00fdb, 0x00fdc, 0x00fdd, 0x00fde, 0x00fdf,
+ 0x00fe0, 0x00fe1, 0x00fe2, 0x00fe3, 0x00fe4, 0x00fe5, 0x00fe6, 0x00fe7,
+ 0x00fe8, 0x00fe9, 0x00fea, 0x00feb, 0x00fec, 0x00fed, 0x00fee, 0x00fef,
+ 0x00ff0, 0x00ff1, 0x00ff2, 0x00ff3, 0x00ff4, 0x00ff5, 0x00ff6, 0x00ff7,
+ 0x00ff8, 0x00ff9, 0x00ffa, 0x00ffb, 0x00ffc, 0x00ffd, 0x00ffe, 0x00fff
+};
+
+static uint32_t unicode_ci_page_10[] = {
+ 0x01000, 0x01001, 0x01002, 0x01003, 0x01004, 0x01005, 0x01006, 0x01007,
+ 0x01008, 0x01009, 0x0100a, 0x0100b, 0x0100c, 0x0100d, 0x0100e, 0x0100f,
+ 0x01010, 0x01011, 0x01012, 0x01013, 0x01014, 0x01015, 0x01016, 0x01017,
+ 0x01018, 0x01019, 0x0101a, 0x0101b, 0x0101c, 0x0101d, 0x0101e, 0x0101f,
+ 0x01020, 0x01021, 0x01022, 0x01023, 0x01024, 0x01025, 0x01026, 0x01027,
+ 0x01028, 0x01029, 0x0102a, 0x0102b, 0x0102c, 0x0102d, 0x0102e, 0x0102f,
+ 0x01030, 0x01031, 0x01032, 0x01033, 0x01034, 0x01035, 0x00000, 0x00000,
+ 0x00000, 0x01039, 0x0103a, 0x0103b, 0x0103c, 0x0103d, 0x0103e, 0x0103f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0104a, 0x0104b, 0x0104c, 0x0104d, 0x0104e, 0x0104f,
+ 0x01050, 0x01051, 0x01052, 0x01053, 0x01054, 0x01055, 0x01056, 0x01057,
+ 0x01058, 0x01059, 0x0105a, 0x0105b, 0x0105c, 0x0105d, 0x0105e, 0x0105f,
+ 0x01060, 0x01061, 0x01062, 0x01063, 0x01064, 0x01065, 0x01066, 0x01067,
+ 0x01068, 0x01069, 0x0106a, 0x0106b, 0x0106c, 0x0106d, 0x0106e, 0x0106f,
+ 0x01070, 0x01071, 0x01072, 0x01073, 0x01074, 0x01075, 0x01076, 0x01077,
+ 0x01078, 0x01079, 0x0107a, 0x0107b, 0x0107c, 0x0107d, 0x0107e, 0x0107f,
+ 0x01080, 0x01081, 0x01082, 0x01083, 0x01084, 0x01085, 0x01086, 0x01087,
+ 0x01088, 0x01089, 0x0108a, 0x0108b, 0x0108c, 0x0108d, 0x0108e, 0x0108f,
+ 0x01090, 0x01091, 0x01092, 0x01093, 0x01094, 0x01095, 0x01096, 0x01097,
+ 0x01098, 0x01099, 0x0109a, 0x0109b, 0x0109c, 0x0109d, 0x0109e, 0x0109f,
+ 0x010a0, 0x010a1, 0x010a2, 0x010a3, 0x010a4, 0x010a5, 0x010a6, 0x010a7,
+ 0x010a8, 0x010a9, 0x010aa, 0x010ab, 0x010ac, 0x010ad, 0x010ae, 0x010af,
+ 0x010b0, 0x010b1, 0x010b2, 0x010b3, 0x010b4, 0x010b5, 0x010b6, 0x010b7,
+ 0x010b8, 0x010b9, 0x010ba, 0x010bb, 0x010bc, 0x010bd, 0x010be, 0x010bf,
+ 0x010c0, 0x010c1, 0x010c2, 0x010c3, 0x010c4, 0x010c5, 0x010c6, 0x010c7,
+ 0x010c8, 0x010c9, 0x010ca, 0x010cb, 0x010cc, 0x010cd, 0x010ce, 0x010cf,
+ 0x010a0, 0x010a1, 0x010a2, 0x010a3, 0x010a4, 0x010a5, 0x010a6, 0x010a7,
+ 0x010a8, 0x010a9, 0x010aa, 0x010ab, 0x010ac, 0x010ad, 0x010ae, 0x010af,
+ 0x010b0, 0x010b1, 0x010b2, 0x010b3, 0x010b4, 0x010b5, 0x010b6, 0x010b7,
+ 0x010b8, 0x010b9, 0x010ba, 0x010bb, 0x010bc, 0x010bd, 0x010be, 0x010bf,
+ 0x010c0, 0x010c1, 0x010c2, 0x010c3, 0x010c4, 0x010c5, 0x010f6, 0x010f7,
+ 0x010f8, 0x010f9, 0x010fa, 0x010fb, 0x010fc, 0x010fd, 0x010fe, 0x010ff
+};
+
+static uint32_t unicode_ci_page_13[] = {
+ 0x01300, 0x01301, 0x01302, 0x01303, 0x01304, 0x01305, 0x01306, 0x01307,
+ 0x01308, 0x01309, 0x0130a, 0x0130b, 0x0130c, 0x0130d, 0x0130e, 0x0130f,
+ 0x01310, 0x01311, 0x01312, 0x01313, 0x01314, 0x01315, 0x01316, 0x01317,
+ 0x01318, 0x01319, 0x0131a, 0x0131b, 0x0131c, 0x0131d, 0x0131e, 0x0131f,
+ 0x01320, 0x01321, 0x01322, 0x01323, 0x01324, 0x01325, 0x01326, 0x01327,
+ 0x01328, 0x01329, 0x0132a, 0x0132b, 0x0132c, 0x0132d, 0x0132e, 0x0132f,
+ 0x01330, 0x01331, 0x01332, 0x01333, 0x01334, 0x01335, 0x01336, 0x01337,
+ 0x01338, 0x01339, 0x0133a, 0x0133b, 0x0133c, 0x0133d, 0x0133e, 0x0133f,
+ 0x01340, 0x01341, 0x01342, 0x01343, 0x01344, 0x01345, 0x01346, 0x01347,
+ 0x01348, 0x01349, 0x0134a, 0x0134b, 0x0134c, 0x0134d, 0x0134e, 0x0134f,
+ 0x01350, 0x01351, 0x01352, 0x01353, 0x01354, 0x01355, 0x01356, 0x01357,
+ 0x01358, 0x01359, 0x0135a, 0x0135b, 0x0135c, 0x0135d, 0x0135e, 0x0135f,
+ 0x01360, 0x01361, 0x01362, 0x01363, 0x01364, 0x01365, 0x01366, 0x01367,
+ 0x01368, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x01372, 0x01373, 0x01374, 0x01375, 0x01376, 0x01377,
+ 0x01378, 0x01379, 0x0137a, 0x0137b, 0x0137c, 0x0137d, 0x0137e, 0x0137f,
+ 0x01380, 0x01381, 0x01382, 0x01383, 0x01384, 0x01385, 0x01386, 0x01387,
+ 0x01388, 0x01389, 0x0138a, 0x0138b, 0x0138c, 0x0138d, 0x0138e, 0x0138f,
+ 0x01390, 0x01391, 0x01392, 0x01393, 0x01394, 0x01395, 0x01396, 0x01397,
+ 0x01398, 0x01399, 0x0139a, 0x0139b, 0x0139c, 0x0139d, 0x0139e, 0x0139f,
+ 0x013a0, 0x013a1, 0x013a2, 0x013a3, 0x013a4, 0x013a5, 0x013a6, 0x013a7,
+ 0x013a8, 0x013a9, 0x013aa, 0x013ab, 0x013ac, 0x013ad, 0x013ae, 0x013af,
+ 0x013b0, 0x013b1, 0x013b2, 0x013b3, 0x013b4, 0x013b5, 0x013b6, 0x013b7,
+ 0x013b8, 0x013b9, 0x013ba, 0x013bb, 0x013bc, 0x013bd, 0x013be, 0x013bf,
+ 0x013c0, 0x013c1, 0x013c2, 0x013c3, 0x013c4, 0x013c5, 0x013c6, 0x013c7,
+ 0x013c8, 0x013c9, 0x013ca, 0x013cb, 0x013cc, 0x013cd, 0x013ce, 0x013cf,
+ 0x013d0, 0x013d1, 0x013d2, 0x013d3, 0x013d4, 0x013d5, 0x013d6, 0x013d7,
+ 0x013d8, 0x013d9, 0x013da, 0x013db, 0x013dc, 0x013dd, 0x013de, 0x013df,
+ 0x013e0, 0x013e1, 0x013e2, 0x013e3, 0x013e4, 0x013e5, 0x013e6, 0x013e7,
+ 0x013e8, 0x013e9, 0x013ea, 0x013eb, 0x013ec, 0x013ed, 0x013ee, 0x013ef,
+ 0x013f0, 0x013f1, 0x013f2, 0x013f3, 0x013f4, 0x013f5, 0x013f6, 0x013f7,
+ 0x013f8, 0x013f9, 0x013fa, 0x013fb, 0x013fc, 0x013fd, 0x013fe, 0x013ff
+};
+
+static uint32_t unicode_ci_page_16[] = {
+ 0x01600, 0x01601, 0x01602, 0x01603, 0x01604, 0x01605, 0x01606, 0x01607,
+ 0x01608, 0x01609, 0x0160a, 0x0160b, 0x0160c, 0x0160d, 0x0160e, 0x0160f,
+ 0x01610, 0x01611, 0x01612, 0x01613, 0x01614, 0x01615, 0x01616, 0x01617,
+ 0x01618, 0x01619, 0x0161a, 0x0161b, 0x0161c, 0x0161d, 0x0161e, 0x0161f,
+ 0x01620, 0x01621, 0x01622, 0x01623, 0x01624, 0x01625, 0x01626, 0x01627,
+ 0x01628, 0x01629, 0x0162a, 0x0162b, 0x0162c, 0x0162d, 0x0162e, 0x0162f,
+ 0x01630, 0x01631, 0x01632, 0x01633, 0x01634, 0x01635, 0x01636, 0x01637,
+ 0x01638, 0x01639, 0x0163a, 0x0163b, 0x0163c, 0x0163d, 0x0163e, 0x0163f,
+ 0x01640, 0x01641, 0x01642, 0x01643, 0x01644, 0x01645, 0x01646, 0x01647,
+ 0x01648, 0x01649, 0x0164a, 0x0164b, 0x0164c, 0x0164d, 0x0164e, 0x0164f,
+ 0x01650, 0x01651, 0x01652, 0x01653, 0x01654, 0x01655, 0x01656, 0x01657,
+ 0x01658, 0x01659, 0x0165a, 0x0165b, 0x0165c, 0x0165d, 0x0165e, 0x0165f,
+ 0x01660, 0x01661, 0x01662, 0x01663, 0x01664, 0x01665, 0x01666, 0x01667,
+ 0x01668, 0x01669, 0x0166a, 0x0166b, 0x0166c, 0x0166d, 0x0166e, 0x0166f,
+ 0x01670, 0x01671, 0x01672, 0x01673, 0x01674, 0x01675, 0x01676, 0x01677,
+ 0x01678, 0x01679, 0x0167a, 0x0167b, 0x0167c, 0x0167d, 0x0167e, 0x0167f,
+ 0x01680, 0x01681, 0x01682, 0x01683, 0x01684, 0x01685, 0x01686, 0x01687,
+ 0x01688, 0x01689, 0x0168a, 0x0168b, 0x0168c, 0x0168d, 0x0168e, 0x0168f,
+ 0x01690, 0x01691, 0x01692, 0x01693, 0x01694, 0x01695, 0x01696, 0x01697,
+ 0x01698, 0x01699, 0x0169a, 0x0169b, 0x0169c, 0x0169d, 0x0169e, 0x0169f,
+ 0x016a0, 0x016a0, 0x016a2, 0x016a3, 0x016a2, 0x016a2, 0x016a6, 0x016a6,
+ 0x016a8, 0x016a8, 0x016aa, 0x016ab, 0x016a8, 0x016a8, 0x016a8, 0x016af,
+ 0x016b0, 0x016b1, 0x016b2, 0x016b2, 0x016b2, 0x016b2, 0x016b2, 0x016b7,
+ 0x016b8, 0x016b9, 0x016ba, 0x016ba, 0x016ba, 0x016ba, 0x016be, 0x016be,
+ 0x016be, 0x016c1, 0x016c1, 0x016c3, 0x016c3, 0x016c5, 0x016c5, 0x016c7,
+ 0x016c8, 0x016c9, 0x016ca, 0x016ca, 0x016ca, 0x016ca, 0x016ca, 0x016cf,
+ 0x016cf, 0x016cf, 0x016d2, 0x016d2, 0x016d2, 0x016c8, 0x016d6, 0x016d7,
+ 0x016d7, 0x016d7, 0x016da, 0x016da, 0x016dc, 0x016dc, 0x016de, 0x016df,
+ 0x016e0, 0x016e1, 0x016e2, 0x016e3, 0x016e4, 0x016e5, 0x016e6, 0x016e6,
+ 0x016e6, 0x016b9, 0x016ca, 0x016eb, 0x016ec, 0x016ed, 0x016ee, 0x016ef,
+ 0x016f0, 0x016f1, 0x016f2, 0x016f3, 0x016f4, 0x016f5, 0x016f6, 0x016f7,
+ 0x016f8, 0x016f9, 0x016fa, 0x016fb, 0x016fc, 0x016fd, 0x016fe, 0x016ff
+};
+
+static uint32_t unicode_ci_page_17[] = {
+ 0x01700, 0x01701, 0x01702, 0x01703, 0x01704, 0x01705, 0x01706, 0x01707,
+ 0x01708, 0x01709, 0x0170a, 0x0170b, 0x0170c, 0x0170d, 0x0170e, 0x0170f,
+ 0x01710, 0x01711, 0x01712, 0x01713, 0x01714, 0x01715, 0x01716, 0x01717,
+ 0x01718, 0x01719, 0x0171a, 0x0171b, 0x0171c, 0x0171d, 0x0171e, 0x0171f,
+ 0x01720, 0x01721, 0x01722, 0x01723, 0x01724, 0x01725, 0x01726, 0x01727,
+ 0x01728, 0x01729, 0x0172a, 0x0172b, 0x0172c, 0x0172d, 0x0172e, 0x0172f,
+ 0x01730, 0x01731, 0x01732, 0x01733, 0x01734, 0x01735, 0x01736, 0x01737,
+ 0x01738, 0x01739, 0x0173a, 0x0173b, 0x0173c, 0x0173d, 0x0173e, 0x0173f,
+ 0x01740, 0x01741, 0x01742, 0x01743, 0x01744, 0x01745, 0x01746, 0x01747,
+ 0x01748, 0x01749, 0x0174a, 0x0174b, 0x0174c, 0x0174d, 0x0174e, 0x0174f,
+ 0x01750, 0x01751, 0x01752, 0x01753, 0x01754, 0x01755, 0x01756, 0x01757,
+ 0x01758, 0x01759, 0x0175a, 0x0175b, 0x0175c, 0x0175d, 0x0175e, 0x0175f,
+ 0x01760, 0x01761, 0x01762, 0x01763, 0x01764, 0x01765, 0x01766, 0x01767,
+ 0x01768, 0x01769, 0x0176a, 0x0176b, 0x0176c, 0x0176d, 0x0176e, 0x0176f,
+ 0x01770, 0x01771, 0x01772, 0x01773, 0x01774, 0x01775, 0x01776, 0x01777,
+ 0x01778, 0x01779, 0x0177a, 0x0177b, 0x0177c, 0x0177d, 0x0177e, 0x0177f,
+ 0x01780, 0x01781, 0x01782, 0x01783, 0x01784, 0x01785, 0x01786, 0x01787,
+ 0x01788, 0x01789, 0x0178a, 0x0178b, 0x0178c, 0x0178d, 0x0178e, 0x0178f,
+ 0x01790, 0x01791, 0x01792, 0x01793, 0x01794, 0x01795, 0x01796, 0x01797,
+ 0x01798, 0x01799, 0x0179a, 0x0179b, 0x0179c, 0x0179d, 0x0179e, 0x0179f,
+ 0x017a0, 0x017a1, 0x017a2, 0x017a3, 0x017a4, 0x017a5, 0x017a6, 0x017a7,
+ 0x017a8, 0x017a9, 0x017aa, 0x017ab, 0x017ac, 0x017ad, 0x017ae, 0x017af,
+ 0x017b0, 0x017b1, 0x017b2, 0x017b3, 0x017b4, 0x017b5, 0x017b6, 0x017b7,
+ 0x017b8, 0x017b9, 0x017ba, 0x017bb, 0x017bc, 0x017bd, 0x017be, 0x017bf,
+ 0x017c0, 0x017c1, 0x017c2, 0x017c3, 0x017c4, 0x017c5, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x017d2, 0x00000, 0x017d4, 0x017d5, 0x017d6, 0x017d7,
+ 0x017d8, 0x017d9, 0x017da, 0x017db, 0x017dc, 0x00000, 0x017de, 0x017df,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x017ea, 0x017eb, 0x017ec, 0x017ed, 0x017ee, 0x017ef,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x017fa, 0x017fb, 0x017fc, 0x017fd, 0x017fe, 0x017ff
+};
+
+static uint32_t unicode_ci_page_18[] = {
+ 0x01800, 0x01801, 0x01802, 0x01803, 0x01804, 0x01805, 0x01806, 0x01807,
+ 0x01808, 0x01809, 0x0180a, 0x00000, 0x00000, 0x00000, 0x00000, 0x0180f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0181a, 0x0181b, 0x0181c, 0x0181d, 0x0181e, 0x0181f,
+ 0x01820, 0x01821, 0x01822, 0x01823, 0x01824, 0x01825, 0x01826, 0x01827,
+ 0x01828, 0x01829, 0x0182a, 0x0182b, 0x0182c, 0x0182d, 0x0182e, 0x0182f,
+ 0x01830, 0x01831, 0x01832, 0x01833, 0x01834, 0x01835, 0x01836, 0x01837,
+ 0x01838, 0x01839, 0x0183a, 0x0183b, 0x0183c, 0x0183d, 0x0183e, 0x0183f,
+ 0x01840, 0x01841, 0x01842, 0x01843, 0x01844, 0x01845, 0x01846, 0x01847,
+ 0x01848, 0x01849, 0x0184a, 0x0184b, 0x0184c, 0x0184d, 0x0184e, 0x0184f,
+ 0x01850, 0x01851, 0x01852, 0x01853, 0x01854, 0x01855, 0x01856, 0x01857,
+ 0x01858, 0x01859, 0x0185a, 0x0185b, 0x0185c, 0x0185d, 0x0185e, 0x0185f,
+ 0x01860, 0x01861, 0x01862, 0x01863, 0x01864, 0x01865, 0x01866, 0x01867,
+ 0x01868, 0x01869, 0x0186a, 0x0186b, 0x0186c, 0x0186d, 0x0186e, 0x0186f,
+ 0x01870, 0x01871, 0x01872, 0x01873, 0x01874, 0x01875, 0x01876, 0x01877,
+ 0x01878, 0x01879, 0x0187a, 0x0187b, 0x0187c, 0x0187d, 0x0187e, 0x0187f,
+ 0x01880, 0x01881, 0x01882, 0x01883, 0x01884, 0x01885, 0x01886, 0x01887,
+ 0x01888, 0x01889, 0x0188a, 0x0188b, 0x0188c, 0x0188d, 0x0188e, 0x0188f,
+ 0x01890, 0x01891, 0x01892, 0x01893, 0x01894, 0x01895, 0x01896, 0x01897,
+ 0x01898, 0x01899, 0x0189a, 0x0189b, 0x0189c, 0x0189d, 0x0189e, 0x0189f,
+ 0x018a0, 0x018a1, 0x018a2, 0x018a3, 0x018a4, 0x018a5, 0x018a6, 0x018a7,
+ 0x018a8, 0x018a9, 0x018aa, 0x018ab, 0x018ac, 0x018ad, 0x018ae, 0x018af,
+ 0x018b0, 0x018b1, 0x018b2, 0x018b3, 0x018b4, 0x018b5, 0x018b6, 0x018b7,
+ 0x018b8, 0x018b9, 0x018ba, 0x018bb, 0x018bc, 0x018bd, 0x018be, 0x018bf,
+ 0x018c0, 0x018c1, 0x018c2, 0x018c3, 0x018c4, 0x018c5, 0x018c6, 0x018c7,
+ 0x018c8, 0x018c9, 0x018ca, 0x018cb, 0x018cc, 0x018cd, 0x018ce, 0x018cf,
+ 0x018d0, 0x018d1, 0x018d2, 0x018d3, 0x018d4, 0x018d5, 0x018d6, 0x018d7,
+ 0x018d8, 0x018d9, 0x018da, 0x018db, 0x018dc, 0x018dd, 0x018de, 0x018df,
+ 0x018e0, 0x018e1, 0x018e2, 0x018e3, 0x018e4, 0x018e5, 0x018e6, 0x018e7,
+ 0x018e8, 0x018e9, 0x018ea, 0x018eb, 0x018ec, 0x018ed, 0x018ee, 0x018ef,
+ 0x018f0, 0x018f1, 0x018f2, 0x018f3, 0x018f4, 0x018f5, 0x018f6, 0x018f7,
+ 0x018f8, 0x018f9, 0x018fa, 0x018fb, 0x018fc, 0x018fd, 0x018fe, 0x018ff
+};
+
+static uint32_t unicode_ci_page_19[] = {
+ 0x01900, 0x01901, 0x01902, 0x01903, 0x01904, 0x01905, 0x01906, 0x01907,
+ 0x01908, 0x01909, 0x0190a, 0x0190b, 0x0190c, 0x0190d, 0x0190e, 0x0190f,
+ 0x01910, 0x01911, 0x01912, 0x01913, 0x01914, 0x01915, 0x01916, 0x01917,
+ 0x01918, 0x01919, 0x0191a, 0x0191b, 0x0191c, 0x0191d, 0x0191e, 0x0191f,
+ 0x01920, 0x01921, 0x01922, 0x01923, 0x01924, 0x01925, 0x01926, 0x01927,
+ 0x01928, 0x01929, 0x0192a, 0x0192b, 0x0192c, 0x0192d, 0x0192e, 0x0192f,
+ 0x01930, 0x01931, 0x01932, 0x01933, 0x01934, 0x01935, 0x01936, 0x01937,
+ 0x01938, 0x00000, 0x00000, 0x00000, 0x0193c, 0x0193d, 0x0193e, 0x0193f,
+ 0x01940, 0x01941, 0x01942, 0x01943, 0x01944, 0x01945, 0x00030, 0x00031,
+ 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039,
+ 0x01950, 0x01951, 0x01952, 0x01953, 0x01954, 0x01955, 0x01956, 0x01957,
+ 0x01958, 0x01959, 0x0195a, 0x0195b, 0x0195c, 0x0195d, 0x0195e, 0x0195f,
+ 0x01960, 0x01961, 0x01962, 0x01963, 0x01964, 0x01965, 0x01966, 0x01967,
+ 0x01968, 0x01969, 0x0196a, 0x0196b, 0x0196c, 0x0196d, 0x0196e, 0x0196f,
+ 0x01970, 0x01971, 0x01972, 0x01973, 0x01974, 0x01975, 0x01976, 0x01977,
+ 0x01978, 0x01979, 0x0197a, 0x0197b, 0x0197c, 0x0197d, 0x0197e, 0x0197f,
+ 0x01980, 0x01981, 0x01982, 0x01983, 0x01984, 0x01985, 0x01986, 0x01987,
+ 0x01988, 0x01989, 0x0198a, 0x0198b, 0x0198c, 0x0198d, 0x0198e, 0x0198f,
+ 0x01990, 0x01991, 0x01992, 0x01993, 0x01994, 0x01995, 0x01996, 0x01997,
+ 0x01998, 0x01999, 0x0199a, 0x0199b, 0x0199c, 0x0199d, 0x0199e, 0x0199f,
+ 0x019a0, 0x019a1, 0x019a2, 0x019a3, 0x019a4, 0x019a5, 0x019a6, 0x019a7,
+ 0x019a8, 0x019a9, 0x019aa, 0x019ab, 0x019ac, 0x019ad, 0x019ae, 0x019af,
+ 0x019b0, 0x019b1, 0x019b2, 0x019b3, 0x019b4, 0x019b5, 0x019b6, 0x019b7,
+ 0x019b8, 0x019b9, 0x019ba, 0x019bb, 0x019bc, 0x019bd, 0x019be, 0x019bf,
+ 0x019c0, 0x019c1, 0x019c2, 0x019c3, 0x019c4, 0x019c5, 0x019c6, 0x019c7,
+ 0x019c8, 0x019c9, 0x019ca, 0x019cb, 0x019cc, 0x019cd, 0x019ce, 0x019cf,
+ 0x019d0, 0x019d1, 0x019d2, 0x019d3, 0x019d4, 0x019d5, 0x019d6, 0x019d7,
+ 0x019d8, 0x019d9, 0x019da, 0x019db, 0x019dc, 0x019dd, 0x019de, 0x019df,
+ 0x019e0, 0x019e1, 0x019e2, 0x019e3, 0x019e4, 0x019e5, 0x019e6, 0x019e7,
+ 0x019e8, 0x019e9, 0x019ea, 0x019eb, 0x019ec, 0x019ed, 0x019ee, 0x019ef,
+ 0x019f0, 0x019f1, 0x019f2, 0x019f3, 0x019f4, 0x019f5, 0x019f6, 0x019f7,
+ 0x019f8, 0x019f9, 0x019fa, 0x019fb, 0x019fc, 0x019fd, 0x019fe, 0x019ff
+};
+
+static uint32_t unicode_ci_page_1d[] = {
+ 0x01d00, 0x01d01, 0x01d02, 0x01d03, 0x01d04, 0x01d05, 0x01d06, 0x01d07,
+ 0x01d08, 0x01d09, 0x01d0a, 0x01d0b, 0x01d0c, 0x01d0d, 0x01d0e, 0x01d0f,
+ 0x01d10, 0x01d11, 0x01d12, 0x01d13, 0x01d14, 0x01d15, 0x01d16, 0x01d17,
+ 0x01d18, 0x01d19, 0x01d1a, 0x01d1b, 0x01d1c, 0x01d1d, 0x01d1e, 0x01d1f,
+ 0x01d20, 0x01d21, 0x01d22, 0x01d23, 0x01d24, 0x01d25, 0x01d26, 0x01d27,
+ 0x01d28, 0x01d29, 0x01d2a, 0x01d2b, 0x00041, 0x000c6, 0x00042, 0x01d2f,
+ 0x00044, 0x00045, 0x0018e, 0x00047, 0x00048, 0x00049, 0x0004a, 0x0004b,
+ 0x0004c, 0x0004d, 0x0004e, 0x01d3b, 0x0004f, 0x00222, 0x00050, 0x00052,
+ 0x00054, 0x00055, 0x00057, 0x00041, 0x00250, 0x00251, 0x01d02, 0x00042,
+ 0x00044, 0x00045, 0x0018f, 0x00190, 0x01d08, 0x00047, 0x01d09, 0x0004b,
+ 0x0004d, 0x0014a, 0x0004f, 0x00186, 0x01d16, 0x01d17, 0x00050, 0x00054,
+ 0x00055, 0x01d1d, 0x0019c, 0x00056, 0x01d25, 0x00392, 0x00393, 0x00394,
+ 0x003a6, 0x003a7, 0x00049, 0x00052, 0x00055, 0x00056, 0x00392, 0x00393,
+ 0x003a1, 0x003a6, 0x003a7, 0x01d6b, 0x01d6c, 0x01d6d, 0x01d6e, 0x01d6f,
+ 0x01d70, 0x01d71, 0x01d72, 0x01d73, 0x01d74, 0x01d75, 0x01d76, 0x01d77,
+ 0x01d78, 0x01d79, 0x01d7a, 0x01d7b, 0x01d7c, 0x01d7d, 0x01d7e, 0x01d7f,
+ 0x01d80, 0x01d81, 0x01d82, 0x01d83, 0x01d84, 0x01d85, 0x01d86, 0x01d87,
+ 0x01d88, 0x01d89, 0x01d8a, 0x01d8b, 0x01d8c, 0x01d8d, 0x01d8e, 0x01d8f,
+ 0x01d90, 0x01d91, 0x01d92, 0x01d93, 0x01d94, 0x01d95, 0x01d96, 0x01d97,
+ 0x01d98, 0x01d99, 0x01d9a, 0x01d9b, 0x01d9c, 0x01d9d, 0x01d9e, 0x01d9f,
+ 0x01da0, 0x01da1, 0x01da2, 0x01da3, 0x01da4, 0x01da5, 0x01da6, 0x01da7,
+ 0x01da8, 0x01da9, 0x01daa, 0x01dab, 0x01dac, 0x01dad, 0x01dae, 0x01daf,
+ 0x01db0, 0x01db1, 0x01db2, 0x01db3, 0x01db4, 0x01db5, 0x01db6, 0x01db7,
+ 0x01db8, 0x01db9, 0x01dba, 0x01dbb, 0x01dbc, 0x01dbd, 0x01dbe, 0x01dbf,
+ 0x01dc0, 0x01dc1, 0x01dc2, 0x01dc3, 0x01dc4, 0x01dc5, 0x01dc6, 0x01dc7,
+ 0x01dc8, 0x01dc9, 0x01dca, 0x01dcb, 0x01dcc, 0x01dcd, 0x01dce, 0x01dcf,
+ 0x01dd0, 0x01dd1, 0x01dd2, 0x01dd3, 0x01dd4, 0x01dd5, 0x01dd6, 0x01dd7,
+ 0x01dd8, 0x01dd9, 0x01dda, 0x01ddb, 0x01ddc, 0x01ddd, 0x01dde, 0x01ddf,
+ 0x01de0, 0x01de1, 0x01de2, 0x01de3, 0x01de4, 0x01de5, 0x01de6, 0x01de7,
+ 0x01de8, 0x01de9, 0x01dea, 0x01deb, 0x01dec, 0x01ded, 0x01dee, 0x01def,
+ 0x01df0, 0x01df1, 0x01df2, 0x01df3, 0x01df4, 0x01df5, 0x01df6, 0x01df7,
+ 0x01df8, 0x01df9, 0x01dfa, 0x01dfb, 0x01dfc, 0x01dfd, 0x01dfe, 0x01dff
+};
+
+static uint32_t unicode_ci_page_1e[] = {
+ 0x00041, 0x00041, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042, 0x00042,
+ 0x00043, 0x00043, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044, 0x00044,
+ 0x00044, 0x00044, 0x00044, 0x00044, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00046, 0x00046,
+ 0x00047, 0x00047, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048, 0x00048,
+ 0x00048, 0x00048, 0x00048, 0x00048, 0x00049, 0x00049, 0x00049, 0x00049,
+ 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004b, 0x0004c, 0x0004c,
+ 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004c, 0x0004d, 0x0004d,
+ 0x0004d, 0x0004d, 0x0004d, 0x0004d, 0x0004e, 0x0004e, 0x0004e, 0x0004e,
+ 0x0004e, 0x0004e, 0x0004e, 0x0004e, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00050, 0x00050, 0x00050, 0x00050,
+ 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052, 0x00052,
+ 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053, 0x00053,
+ 0x00053, 0x00053, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054, 0x00054,
+ 0x00054, 0x00054, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00056, 0x00056, 0x00056, 0x00056,
+ 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057, 0x00057,
+ 0x00057, 0x00057, 0x00058, 0x00058, 0x00058, 0x00058, 0x00059, 0x00059,
+ 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x0005a, 0x00048, 0x00054,
+ 0x00057, 0x00059, 0x01e9a, 0x00053, 0x01e9c, 0x01e9d, 0x01e9e, 0x01e9f,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041, 0x00041,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045, 0x00045,
+ 0x00049, 0x00049, 0x00049, 0x00049, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x0004f,
+ 0x0004f, 0x0004f, 0x0004f, 0x0004f, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055, 0x00055,
+ 0x00055, 0x00055, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059, 0x00059,
+ 0x00059, 0x00059, 0x01efa, 0x01efb, 0x01efc, 0x01efd, 0x01efe, 0x01eff
+};
+
+static uint32_t unicode_ci_page_1f[] = {
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f16, 0x01f17,
+ 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x00395, 0x01f1e, 0x01f1f,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399, 0x00399,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f46, 0x01f47,
+ 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x0039f, 0x01f4e, 0x01f4f,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a5,
+ 0x01f58, 0x003a5, 0x01f5a, 0x003a5, 0x01f5c, 0x003a5, 0x01f5e, 0x003a5,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x00391, 0x00395, 0x00395, 0x00397, 0x00397, 0x00399, 0x00399,
+ 0x0039f, 0x0039f, 0x003a5, 0x003a5, 0x003a9, 0x003a9, 0x01f7e, 0x01f7f,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x00391,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397, 0x00397,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9, 0x003a9,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x01fb5, 0x00391, 0x00391,
+ 0x00391, 0x00391, 0x00391, 0x00391, 0x00391, 0x01fbd, 0x00399, 0x01fbd,
+ 0x01fc0, 0x000a8, 0x00397, 0x00397, 0x00397, 0x01fc5, 0x00397, 0x00397,
+ 0x00395, 0x00395, 0x00397, 0x00397, 0x00397, 0x01fbd, 0x01fbd, 0x01fbd,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x01fd4, 0x01fd5, 0x00399, 0x00399,
+ 0x00399, 0x00399, 0x00399, 0x00399, 0x01fdc, 0x01fdd, 0x01fdd, 0x01fdd,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a1, 0x003a1, 0x003a5, 0x003a5,
+ 0x003a5, 0x003a5, 0x003a5, 0x003a5, 0x003a1, 0x000a8, 0x000a8, 0x00060,
+ 0x01ff0, 0x01ff1, 0x003a9, 0x003a9, 0x003a9, 0x01ff5, 0x003a9, 0x003a9,
+ 0x0039f, 0x0039f, 0x003a9, 0x003a9, 0x003a9, 0x000b4, 0x01fdd, 0x01fff
+};
+
+static uint32_t unicode_ci_page_20[] = {
+ 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020, 0x00020,
+ 0x00020, 0x00020, 0x00020, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x02010, 0x02010, 0x02012, 0x02013, 0x02014, 0x02015, 0x02016, 0x02017,
+ 0x02018, 0x02019, 0x0201a, 0x0201b, 0x0201c, 0x0201d, 0x0201e, 0x0201f,
+ 0x02020, 0x02021, 0x02022, 0x02023, 0x0002e, 0x02025, 0x02026, 0x02027,
+ 0x02028, 0x02029, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00020,
+ 0x02030, 0x02031, 0x02032, 0x02033, 0x02034, 0x02035, 0x02036, 0x02037,
+ 0x02038, 0x02039, 0x0203a, 0x0203b, 0x0203c, 0x0203d, 0x0203e, 0x0203f,
+ 0x02040, 0x02041, 0x02042, 0x02043, 0x02044, 0x02045, 0x02046, 0x02047,
+ 0x02048, 0x02049, 0x0204a, 0x0204b, 0x0204c, 0x0204d, 0x0204e, 0x0204f,
+ 0x02050, 0x02051, 0x02052, 0x02053, 0x02054, 0x02055, 0x02056, 0x02057,
+ 0x02058, 0x02059, 0x0205a, 0x0205b, 0x0205c, 0x0205d, 0x0205e, 0x00020,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x02064, 0x02065, 0x02066, 0x02067,
+ 0x02068, 0x02069, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00030, 0x00049, 0x02072, 0x02073, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0002b, 0x0207b, 0x0003d, 0x00028, 0x00029, 0x0004e,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0002b, 0x0207b, 0x0003d, 0x00028, 0x00029, 0x0208f,
+ 0x02090, 0x02091, 0x02092, 0x02093, 0x02094, 0x02095, 0x02096, 0x02097,
+ 0x02098, 0x02099, 0x0209a, 0x0209b, 0x0209c, 0x0209d, 0x0209e, 0x0209f,
+ 0x020a0, 0x020a1, 0x020a2, 0x020a3, 0x020a4, 0x020a5, 0x020a6, 0x020a7,
+ 0x020a8, 0x020a9, 0x020aa, 0x020ab, 0x020ac, 0x020ad, 0x020ae, 0x020af,
+ 0x020b0, 0x020b1, 0x020b2, 0x020b3, 0x020b4, 0x020b5, 0x020b6, 0x020b7,
+ 0x020b8, 0x020b9, 0x020ba, 0x020bb, 0x020bc, 0x020bd, 0x020be, 0x020bf,
+ 0x020c0, 0x020c1, 0x020c2, 0x020c3, 0x020c4, 0x020c5, 0x020c6, 0x020c7,
+ 0x020c8, 0x020c9, 0x020ca, 0x020cb, 0x020cc, 0x020cd, 0x020ce, 0x020cf,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x020eb, 0x020ec, 0x020ed, 0x020ee, 0x020ef,
+ 0x020f0, 0x020f1, 0x020f2, 0x020f3, 0x020f4, 0x020f5, 0x020f6, 0x020f7,
+ 0x020f8, 0x020f9, 0x020fa, 0x020fb, 0x020fc, 0x020fd, 0x020fe, 0x020ff
+};
+
+static uint32_t unicode_ci_page_21[] = {
+ 0x02100, 0x02101, 0x00043, 0x02103, 0x02104, 0x02105, 0x02106, 0x00190,
+ 0x02108, 0x02109, 0x00047, 0x00048, 0x00048, 0x00048, 0x00048, 0x00126,
+ 0x00049, 0x00049, 0x0004c, 0x0004c, 0x02114, 0x0004e, 0x02116, 0x02117,
+ 0x02118, 0x00050, 0x00051, 0x00052, 0x00052, 0x00052, 0x0211e, 0x0211f,
+ 0x02120, 0x02121, 0x02122, 0x02123, 0x0005a, 0x02125, 0x003a9, 0x02127,
+ 0x0005a, 0x02129, 0x0004b, 0x00041, 0x00042, 0x00043, 0x0212e, 0x00045,
+ 0x00045, 0x00046, 0x02132, 0x0004d, 0x0004f, 0x005d0, 0x005d1, 0x005d2,
+ 0x005d3, 0x00049, 0x0213a, 0x0213b, 0x0213c, 0x00393, 0x00393, 0x003a0,
+ 0x02140, 0x02141, 0x02142, 0x02143, 0x02144, 0x00044, 0x00044, 0x00045,
+ 0x00049, 0x0004a, 0x0214a, 0x0214b, 0x0214c, 0x0214d, 0x0214e, 0x0214f,
+ 0x02150, 0x02151, 0x02152, 0x02153, 0x02154, 0x02155, 0x02156, 0x02157,
+ 0x02158, 0x02159, 0x0215a, 0x0215b, 0x0215c, 0x0215d, 0x0215e, 0x0215f,
+ 0x00049, 0x02161, 0x02162, 0x02163, 0x00056, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x00058, 0x0216a, 0x0216b, 0x0004c, 0x00043, 0x00044, 0x0004d,
+ 0x00049, 0x02161, 0x02162, 0x02163, 0x00056, 0x02165, 0x02166, 0x02167,
+ 0x02168, 0x00058, 0x0216a, 0x0216b, 0x0004c, 0x00043, 0x00044, 0x0004d,
+ 0x02180, 0x02181, 0x02182, 0x02183, 0x02184, 0x02185, 0x02186, 0x02187,
+ 0x02188, 0x02189, 0x0218a, 0x0218b, 0x0218c, 0x0218d, 0x0218e, 0x0218f,
+ 0x02190, 0x02191, 0x02192, 0x02193, 0x02194, 0x02195, 0x02196, 0x02197,
+ 0x02198, 0x02199, 0x02190, 0x02192, 0x0219c, 0x0219d, 0x0219e, 0x0219f,
+ 0x021a0, 0x021a1, 0x021a2, 0x021a3, 0x021a4, 0x021a5, 0x021a6, 0x021a7,
+ 0x021a8, 0x021a9, 0x021aa, 0x021ab, 0x021ac, 0x021ad, 0x02194, 0x021af,
+ 0x021b0, 0x021b1, 0x021b2, 0x021b3, 0x021b4, 0x021b5, 0x021b6, 0x021b7,
+ 0x021b8, 0x021b9, 0x021ba, 0x021bb, 0x021bc, 0x021bd, 0x021be, 0x021bf,
+ 0x021c0, 0x021c1, 0x021c2, 0x021c3, 0x021c4, 0x021c5, 0x021c6, 0x021c7,
+ 0x021c8, 0x021c9, 0x021ca, 0x021cb, 0x021cc, 0x021cd, 0x021ce, 0x021cf,
+ 0x021cd, 0x021d1, 0x021cf, 0x021d3, 0x021ce, 0x021d5, 0x021d6, 0x021d7,
+ 0x021d8, 0x021d9, 0x021da, 0x021db, 0x021dc, 0x021dd, 0x021de, 0x021df,
+ 0x021e0, 0x021e1, 0x021e2, 0x021e3, 0x021e4, 0x021e5, 0x021e6, 0x021e7,
+ 0x021e8, 0x021e9, 0x021ea, 0x021eb, 0x021ec, 0x021ed, 0x021ee, 0x021ef,
+ 0x021f0, 0x021f1, 0x021f2, 0x021f3, 0x021f4, 0x021f5, 0x021f6, 0x021f7,
+ 0x021f8, 0x021f9, 0x021fa, 0x021fb, 0x021fc, 0x021fd, 0x021fe, 0x021ff
+};
+
+static uint32_t unicode_ci_page_22[] = {
+ 0x02200, 0x02201, 0x02202, 0x02203, 0x02203, 0x02205, 0x02206, 0x02207,
+ 0x02208, 0x02208, 0x0220a, 0x0220b, 0x0220b, 0x0220d, 0x0220e, 0x0220f,
+ 0x02210, 0x02140, 0x0207b, 0x02213, 0x02214, 0x02215, 0x02216, 0x02217,
+ 0x02218, 0x02219, 0x0221a, 0x0221b, 0x0221c, 0x0221d, 0x0221e, 0x0221f,
+ 0x02220, 0x02221, 0x02222, 0x02223, 0x02223, 0x02225, 0x02225, 0x02227,
+ 0x02228, 0x02229, 0x0222a, 0x0222b, 0x0222c, 0x0222d, 0x0222e, 0x0222f,
+ 0x02230, 0x02231, 0x02232, 0x02233, 0x02234, 0x02235, 0x02236, 0x02237,
+ 0x02238, 0x02239, 0x0223a, 0x0223b, 0x0223c, 0x0223d, 0x0223e, 0x0223f,
+ 0x02240, 0x0223c, 0x02242, 0x02243, 0x02243, 0x02245, 0x02246, 0x02245,
+ 0x02248, 0x02248, 0x0224a, 0x0224b, 0x0224c, 0x0224d, 0x0224e, 0x0224f,
+ 0x02250, 0x02251, 0x02252, 0x02253, 0x02254, 0x02255, 0x02256, 0x02257,
+ 0x02258, 0x02259, 0x0225a, 0x0225b, 0x0225c, 0x0225d, 0x0225e, 0x0225f,
+ 0x0003d, 0x02261, 0x02261, 0x02263, 0x02264, 0x02265, 0x02266, 0x02267,
+ 0x02268, 0x02269, 0x0226a, 0x0226b, 0x0226c, 0x0224d, 0x0003c, 0x0003e,
+ 0x02264, 0x02265, 0x02272, 0x02273, 0x02272, 0x02273, 0x02276, 0x02277,
+ 0x02276, 0x02277, 0x0227a, 0x0227b, 0x0227c, 0x0227d, 0x0227e, 0x0227f,
+ 0x0227a, 0x0227b, 0x02282, 0x02283, 0x02282, 0x02283, 0x02286, 0x02287,
+ 0x02286, 0x02287, 0x0228a, 0x0228b, 0x0228c, 0x0228d, 0x0228e, 0x0228f,
+ 0x02290, 0x02291, 0x02292, 0x02293, 0x02294, 0x02295, 0x02296, 0x02297,
+ 0x02298, 0x02299, 0x0229a, 0x0229b, 0x0229c, 0x0229d, 0x0229e, 0x0229f,
+ 0x022a0, 0x022a1, 0x022a2, 0x022a3, 0x022a4, 0x022a5, 0x022a6, 0x022a7,
+ 0x022a8, 0x022a9, 0x022aa, 0x022ab, 0x022a2, 0x022a8, 0x022a9, 0x022ab,
+ 0x022b0, 0x022b1, 0x022b2, 0x022b3, 0x022b4, 0x022b5, 0x022b6, 0x022b7,
+ 0x022b8, 0x022b9, 0x022ba, 0x022bb, 0x022bc, 0x022bd, 0x022be, 0x022bf,
+ 0x022c0, 0x022c1, 0x022c2, 0x022c3, 0x022c4, 0x022c5, 0x022c6, 0x022c7,
+ 0x022c8, 0x022c9, 0x022ca, 0x022cb, 0x022cc, 0x022cd, 0x022ce, 0x022cf,
+ 0x022d0, 0x022d1, 0x022d2, 0x022d3, 0x022d4, 0x022d5, 0x022d6, 0x022d7,
+ 0x022d8, 0x022d9, 0x022da, 0x022db, 0x022dc, 0x022dd, 0x022de, 0x022df,
+ 0x0227c, 0x0227d, 0x02291, 0x02292, 0x022e4, 0x022e5, 0x022e6, 0x022e7,
+ 0x022e8, 0x022e9, 0x022b2, 0x022b3, 0x022b4, 0x022b5, 0x022ee, 0x022ef,
+ 0x022f0, 0x022f1, 0x022f2, 0x022f3, 0x022f4, 0x022f5, 0x022f6, 0x022f7,
+ 0x022f8, 0x022f9, 0x022fa, 0x022fb, 0x022fc, 0x022fd, 0x022fe, 0x022ff
+};
+
+static uint32_t unicode_ci_page_24[] = {
+ 0x02400, 0x02401, 0x02402, 0x02403, 0x02404, 0x02405, 0x02406, 0x02407,
+ 0x02408, 0x02409, 0x0240a, 0x0240b, 0x0240c, 0x0240d, 0x0240e, 0x0240f,
+ 0x02410, 0x02411, 0x02412, 0x02413, 0x02414, 0x02415, 0x02416, 0x02417,
+ 0x02418, 0x02419, 0x0241a, 0x0241b, 0x0241c, 0x0241d, 0x0241e, 0x0241f,
+ 0x02420, 0x02421, 0x02422, 0x02423, 0x02424, 0x02425, 0x02426, 0x02427,
+ 0x02428, 0x02429, 0x0242a, 0x0242b, 0x0242c, 0x0242d, 0x0242e, 0x0242f,
+ 0x02430, 0x02431, 0x02432, 0x02433, 0x02434, 0x02435, 0x02436, 0x02437,
+ 0x02438, 0x02439, 0x0243a, 0x0243b, 0x0243c, 0x0243d, 0x0243e, 0x0243f,
+ 0x02440, 0x02441, 0x02442, 0x02443, 0x02444, 0x02445, 0x02446, 0x02447,
+ 0x02448, 0x02449, 0x0244a, 0x0244b, 0x0244c, 0x0244d, 0x0244e, 0x0244f,
+ 0x02450, 0x02451, 0x02452, 0x02453, 0x02454, 0x02455, 0x02456, 0x02457,
+ 0x02458, 0x02459, 0x0245a, 0x0245b, 0x0245c, 0x0245d, 0x0245e, 0x0245f,
+ 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038,
+ 0x00039, 0x02469, 0x0246a, 0x0246b, 0x0246c, 0x0246d, 0x0246e, 0x0246f,
+ 0x02470, 0x02471, 0x02472, 0x02473, 0x02474, 0x02475, 0x02476, 0x02477,
+ 0x02478, 0x02479, 0x0247a, 0x0247b, 0x0247c, 0x0247d, 0x0247e, 0x0247f,
+ 0x02480, 0x02481, 0x02482, 0x02483, 0x02484, 0x02485, 0x02486, 0x02487,
+ 0x02488, 0x02489, 0x0248a, 0x0248b, 0x0248c, 0x0248d, 0x0248e, 0x0248f,
+ 0x02490, 0x02491, 0x02492, 0x02493, 0x02494, 0x02495, 0x02496, 0x02497,
+ 0x02498, 0x02499, 0x0249a, 0x0249b, 0x0249c, 0x0249d, 0x0249e, 0x0249f,
+ 0x024a0, 0x024a1, 0x024a2, 0x024a3, 0x024a4, 0x024a5, 0x024a6, 0x024a7,
+ 0x024a8, 0x024a9, 0x024aa, 0x024ab, 0x024ac, 0x024ad, 0x024ae, 0x024af,
+ 0x024b0, 0x024b1, 0x024b2, 0x024b3, 0x024b4, 0x024b5, 0x00041, 0x00042,
+ 0x00043, 0x00044, 0x00045, 0x00046, 0x00047, 0x00048, 0x00049, 0x0004a,
+ 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f, 0x00050, 0x00051, 0x00052,
+ 0x00053, 0x00054, 0x00055, 0x00056, 0x00057, 0x00058, 0x00059, 0x0005a,
+ 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047, 0x00048,
+ 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f, 0x00050,
+ 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057, 0x00058,
+ 0x00059, 0x0005a, 0x00030, 0x0246a, 0x0246b, 0x0246c, 0x0246d, 0x0246e,
+ 0x0246f, 0x02470, 0x02471, 0x02472, 0x02473, 0x00031, 0x00032, 0x00033,
+ 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039, 0x02469, 0x00030
+};
+
+static uint32_t unicode_ci_page_27[] = {
+ 0x02700, 0x02701, 0x02702, 0x02703, 0x02704, 0x02705, 0x02706, 0x02707,
+ 0x02708, 0x02709, 0x0270a, 0x0270b, 0x0270c, 0x0270d, 0x0270e, 0x0270f,
+ 0x02710, 0x02711, 0x02712, 0x02713, 0x02714, 0x02715, 0x02716, 0x02717,
+ 0x02718, 0x02719, 0x0271a, 0x0271b, 0x0271c, 0x0271d, 0x0271e, 0x0271f,
+ 0x02720, 0x02721, 0x02722, 0x02723, 0x02724, 0x02725, 0x02726, 0x02727,
+ 0x02728, 0x02729, 0x0272a, 0x0272b, 0x0272c, 0x0272d, 0x0272e, 0x0272f,
+ 0x02730, 0x02731, 0x02732, 0x02733, 0x02734, 0x02735, 0x02736, 0x02737,
+ 0x02738, 0x02739, 0x0273a, 0x0273b, 0x0273c, 0x0273d, 0x0273e, 0x0273f,
+ 0x02740, 0x02741, 0x02742, 0x02743, 0x02744, 0x02745, 0x02746, 0x02747,
+ 0x02748, 0x02749, 0x0274a, 0x0274b, 0x0274c, 0x0274d, 0x0274e, 0x0274f,
+ 0x02750, 0x02751, 0x02752, 0x02753, 0x02754, 0x02755, 0x02756, 0x02757,
+ 0x02758, 0x02759, 0x0275a, 0x0275b, 0x0275c, 0x0275d, 0x0275e, 0x0275f,
+ 0x02760, 0x02761, 0x02762, 0x02763, 0x02764, 0x02765, 0x02766, 0x02767,
+ 0x02768, 0x02769, 0x0276a, 0x0276b, 0x0276c, 0x0276d, 0x0276e, 0x0276f,
+ 0x02770, 0x02771, 0x02772, 0x02773, 0x02774, 0x02775, 0x00031, 0x00032,
+ 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038, 0x00039, 0x02469,
+ 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037, 0x00038,
+ 0x00039, 0x02469, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036,
+ 0x00037, 0x00038, 0x00039, 0x02469, 0x02794, 0x02795, 0x02796, 0x02797,
+ 0x02798, 0x02799, 0x0279a, 0x0279b, 0x0279c, 0x0279d, 0x0279e, 0x0279f,
+ 0x027a0, 0x027a1, 0x027a2, 0x027a3, 0x027a4, 0x027a5, 0x027a6, 0x027a7,
+ 0x027a8, 0x027a9, 0x027aa, 0x027ab, 0x027ac, 0x027ad, 0x027ae, 0x027af,
+ 0x027b0, 0x027b1, 0x027b2, 0x027b3, 0x027b4, 0x027b5, 0x027b6, 0x027b7,
+ 0x027b8, 0x027b9, 0x027ba, 0x027bb, 0x027bc, 0x027bd, 0x027be, 0x027bf,
+ 0x027c0, 0x027c1, 0x027c2, 0x027c3, 0x027c4, 0x027c5, 0x027c6, 0x027c7,
+ 0x027c8, 0x027c9, 0x027ca, 0x027cb, 0x027cc, 0x027cd, 0x027ce, 0x027cf,
+ 0x027d0, 0x027d1, 0x027d2, 0x027d3, 0x027d4, 0x027d5, 0x027d6, 0x027d7,
+ 0x027d8, 0x027d9, 0x027da, 0x027db, 0x027dc, 0x027dd, 0x027de, 0x027df,
+ 0x027e0, 0x027e1, 0x027e2, 0x027e3, 0x027e4, 0x027e5, 0x027e6, 0x027e7,
+ 0x027e8, 0x027e9, 0x027ea, 0x027eb, 0x027ec, 0x027ed, 0x027ee, 0x027ef,
+ 0x027f0, 0x027f1, 0x027f2, 0x027f3, 0x027f4, 0x027f5, 0x027f6, 0x027f7,
+ 0x027f8, 0x027f9, 0x027fa, 0x027fb, 0x027fc, 0x027fd, 0x027fe, 0x027ff
+};
+
+static uint32_t unicode_ci_page_2a[] = {
+ 0x02a00, 0x02a01, 0x02a02, 0x02a03, 0x02a04, 0x02a05, 0x02a06, 0x02a07,
+ 0x02a08, 0x02a09, 0x02a0a, 0x02a0b, 0x02a0c, 0x02a0d, 0x02a0e, 0x02a0f,
+ 0x02a10, 0x02a11, 0x02a12, 0x02a13, 0x02a14, 0x02a15, 0x02a16, 0x02a17,
+ 0x02a18, 0x02a19, 0x02a1a, 0x02a1b, 0x02a1c, 0x02a1d, 0x02a1e, 0x02a1f,
+ 0x02a20, 0x02a21, 0x02a22, 0x02a23, 0x02a24, 0x02a25, 0x02a26, 0x02a27,
+ 0x02a28, 0x02a29, 0x02a2a, 0x02a2b, 0x02a2c, 0x02a2d, 0x02a2e, 0x02a2f,
+ 0x02a30, 0x02a31, 0x02a32, 0x02a33, 0x02a34, 0x02a35, 0x02a36, 0x02a37,
+ 0x02a38, 0x02a39, 0x02a3a, 0x02a3b, 0x02a3c, 0x02a3d, 0x02a3e, 0x02a3f,
+ 0x02a40, 0x02a41, 0x02a42, 0x02a43, 0x02a44, 0x02a45, 0x02a46, 0x02a47,
+ 0x02a48, 0x02a49, 0x02a4a, 0x02a4b, 0x02a4c, 0x02a4d, 0x02a4e, 0x02a4f,
+ 0x02a50, 0x02a51, 0x02a52, 0x02a53, 0x02a54, 0x02a55, 0x02a56, 0x02a57,
+ 0x02a58, 0x02a59, 0x02a5a, 0x02a5b, 0x02a5c, 0x02a5d, 0x02a5e, 0x02a5f,
+ 0x02a60, 0x02a61, 0x02a62, 0x02a63, 0x02a64, 0x02a65, 0x02a66, 0x02a67,
+ 0x02a68, 0x02a69, 0x02a6a, 0x02a6b, 0x02a6c, 0x02a6d, 0x02a6e, 0x02a6f,
+ 0x02a70, 0x02a71, 0x02a72, 0x02a73, 0x02a74, 0x02a75, 0x02a76, 0x02a77,
+ 0x02a78, 0x02a79, 0x02a7a, 0x02a7b, 0x02a7c, 0x02a7d, 0x02a7e, 0x02a7f,
+ 0x02a80, 0x02a81, 0x02a82, 0x02a83, 0x02a84, 0x02a85, 0x02a86, 0x02a87,
+ 0x02a88, 0x02a89, 0x02a8a, 0x02a8b, 0x02a8c, 0x02a8d, 0x02a8e, 0x02a8f,
+ 0x02a90, 0x02a91, 0x02a92, 0x02a93, 0x02a94, 0x02a95, 0x02a96, 0x02a97,
+ 0x02a98, 0x02a99, 0x02a9a, 0x02a9b, 0x02a9c, 0x02a9d, 0x02a9e, 0x02a9f,
+ 0x02aa0, 0x02aa1, 0x02aa2, 0x02aa3, 0x02aa4, 0x02aa5, 0x02aa6, 0x02aa7,
+ 0x02aa8, 0x02aa9, 0x02aaa, 0x02aab, 0x02aac, 0x02aad, 0x02aae, 0x02aaf,
+ 0x02ab0, 0x02ab1, 0x02ab2, 0x02ab3, 0x02ab4, 0x02ab5, 0x02ab6, 0x02ab7,
+ 0x02ab8, 0x02ab9, 0x02aba, 0x02abb, 0x02abc, 0x02abd, 0x02abe, 0x02abf,
+ 0x02ac0, 0x02ac1, 0x02ac2, 0x02ac3, 0x02ac4, 0x02ac5, 0x02ac6, 0x02ac7,
+ 0x02ac8, 0x02ac9, 0x02aca, 0x02acb, 0x02acc, 0x02acd, 0x02ace, 0x02acf,
+ 0x02ad0, 0x02ad1, 0x02ad2, 0x02ad3, 0x02ad4, 0x02ad5, 0x02ad6, 0x02ad7,
+ 0x02ad8, 0x02ad9, 0x02ada, 0x02adb, 0x02adc, 0x02adc, 0x02ade, 0x02adf,
+ 0x02ae0, 0x02ae1, 0x02ae2, 0x02ae3, 0x02ae4, 0x02ae5, 0x02ae6, 0x02ae7,
+ 0x02ae8, 0x02ae9, 0x02aea, 0x02aeb, 0x02aec, 0x02aed, 0x02aee, 0x02aef,
+ 0x02af0, 0x02af1, 0x02af2, 0x02af3, 0x02af4, 0x02af5, 0x02af6, 0x02af7,
+ 0x02af8, 0x02af9, 0x02afa, 0x02afb, 0x02afc, 0x02afd, 0x02afe, 0x02aff
+};
+
+static uint32_t unicode_ci_page_2e[] = {
+ 0x02e00, 0x02e01, 0x02e02, 0x02e03, 0x02e04, 0x02e05, 0x02e06, 0x02e07,
+ 0x02e08, 0x02e09, 0x02e0a, 0x02e0b, 0x02e0c, 0x02e0d, 0x02e0e, 0x02e0f,
+ 0x02e10, 0x02e11, 0x02e12, 0x02e13, 0x02e14, 0x02e15, 0x02e16, 0x02e17,
+ 0x02e18, 0x02e19, 0x02e1a, 0x02e1b, 0x02e1c, 0x02e1d, 0x02e1e, 0x02e1f,
+ 0x02e20, 0x02e21, 0x02e22, 0x02e23, 0x02e24, 0x02e25, 0x02e26, 0x02e27,
+ 0x02e28, 0x02e29, 0x02e2a, 0x02e2b, 0x02e2c, 0x02e2d, 0x02e2e, 0x02e2f,
+ 0x02e30, 0x02e31, 0x02e32, 0x02e33, 0x02e34, 0x02e35, 0x02e36, 0x02e37,
+ 0x02e38, 0x02e39, 0x02e3a, 0x02e3b, 0x02e3c, 0x02e3d, 0x02e3e, 0x02e3f,
+ 0x02e40, 0x02e41, 0x02e42, 0x02e43, 0x02e44, 0x02e45, 0x02e46, 0x02e47,
+ 0x02e48, 0x02e49, 0x02e4a, 0x02e4b, 0x02e4c, 0x02e4d, 0x02e4e, 0x02e4f,
+ 0x02e50, 0x02e51, 0x02e52, 0x02e53, 0x02e54, 0x02e55, 0x02e56, 0x02e57,
+ 0x02e58, 0x02e59, 0x02e5a, 0x02e5b, 0x02e5c, 0x02e5d, 0x02e5e, 0x02e5f,
+ 0x02e60, 0x02e61, 0x02e62, 0x02e63, 0x02e64, 0x02e65, 0x02e66, 0x02e67,
+ 0x02e68, 0x02e69, 0x02e6a, 0x02e6b, 0x02e6c, 0x02e6d, 0x02e6e, 0x02e6f,
+ 0x02e70, 0x02e71, 0x02e72, 0x02e73, 0x02e74, 0x02e75, 0x02e76, 0x02e77,
+ 0x02e78, 0x02e79, 0x02e7a, 0x02e7b, 0x02e7c, 0x02e7d, 0x02e7e, 0x02e7f,
+ 0x02e80, 0x02e81, 0x02e82, 0x02e83, 0x0319a, 0x02e85, 0x02e86, 0x02f0f,
+ 0x02f11, 0x02e89, 0x02f18, 0x02e8b, 0x02f29, 0x02f29, 0x02e8e, 0x02e8f,
+ 0x02e8e, 0x02e8f, 0x02e92, 0x02e93, 0x02e94, 0x02e95, 0x02e96, 0x02f3c,
+ 0x02e98, 0x02e99, 0x02e9a, 0x02e9b, 0x02f47, 0x02f49, 0x02e9e, 0x02e9f,
+ 0x02ea0, 0x02ea1, 0x02ea2, 0x02ea3, 0x02ea4, 0x02ea4, 0x02ea6, 0x02f5c,
+ 0x02ea8, 0x02ea9, 0x02eaa, 0x02f6c, 0x02f70, 0x02ead, 0x02f75, 0x02eaf,
+ 0x02eb0, 0x02eb1, 0x02eb2, 0x02eb1, 0x02eb1, 0x02eb2, 0x02eb7, 0x02eb7,
+ 0x02eb8, 0x02eb9, 0x02eba, 0x02f80, 0x02f81, 0x02f85, 0x02ebe, 0x02ebe,
+ 0x02ebe, 0x02ec1, 0x02ec2, 0x02ec3, 0x02ec4, 0x02ec5, 0x02f93, 0x02f93,
+ 0x02ec8, 0x02ec9, 0x02f9c, 0x02ecb, 0x02ecc, 0x02ecc, 0x02ecc, 0x02fa2,
+ 0x02ed0, 0x02fa7, 0x02ed2, 0x02ed3, 0x02ed4, 0x02fa9, 0x02ed6, 0x02fac,
+ 0x02ed8, 0x02ed9, 0x02eda, 0x02edb, 0x02edc, 0x02fb7, 0x02ede, 0x02ede,
+ 0x02ee0, 0x02fb8, 0x02ee2, 0x02fbb, 0x02fc1, 0x02ee5, 0x02ee6, 0x02ee7,
+ 0x02ee8, 0x02ee9, 0x02eea, 0x02eeb, 0x02eec, 0x02eed, 0x02eee, 0x02eef,
+ 0x02ef0, 0x02ef2, 0x02ef2, 0x02ef3, 0x02ef4, 0x02ef5, 0x02ef6, 0x02ef7,
+ 0x02ef8, 0x02ef9, 0x02efa, 0x02efb, 0x02efc, 0x02efd, 0x02efe, 0x02eff
+};
+
+static uint32_t unicode_ci_page_2f[] = {
+ 0x03192, 0x02f01, 0x02e80, 0x02f03, 0x0319a, 0x02f05, 0x03193, 0x02f07,
+ 0x0319f, 0x02f09, 0x02f0a, 0x02f0b, 0x02e86, 0x02f0d, 0x02f0e, 0x02f0f,
+ 0x02f10, 0x02f11, 0x02f12, 0x02f13, 0x02f14, 0x02f15, 0x02f16, 0x02f17,
+ 0x02f18, 0x02e8b, 0x02e81, 0x02f1b, 0x02f1c, 0x02f1d, 0x02f1e, 0x02f1f,
+ 0x02f20, 0x02f21, 0x02f22, 0x02f23, 0x02f24, 0x02f25, 0x02f26, 0x02f27,
+ 0x02f28, 0x02f29, 0x02e8e, 0x02f2b, 0x02f2c, 0x02f2d, 0x02f2e, 0x02f2f,
+ 0x02f30, 0x02f31, 0x02f32, 0x02e93, 0x02f34, 0x02f35, 0x02f36, 0x02f37,
+ 0x02f38, 0x02e95, 0x02f3a, 0x02f3b, 0x02f3c, 0x02f3d, 0x02f3e, 0x02f3f,
+ 0x02f40, 0x02f41, 0x02f42, 0x02f43, 0x02f44, 0x02f45, 0x02f46, 0x02f47,
+ 0x02f48, 0x02f49, 0x02f4a, 0x02f4b, 0x02f4c, 0x02f4d, 0x02f4e, 0x02f4f,
+ 0x02f50, 0x02f51, 0x02f52, 0x02f53, 0x02f54, 0x02f55, 0x02f56, 0x02f57,
+ 0x02f58, 0x02f59, 0x02f5a, 0x02f5b, 0x02f5c, 0x02f5d, 0x02f5e, 0x02f5f,
+ 0x02f60, 0x02f61, 0x02f62, 0x02f63, 0x02f64, 0x02f65, 0x02eaa, 0x02f67,
+ 0x02f68, 0x02f69, 0x02f6a, 0x02f6b, 0x02f6c, 0x02f6d, 0x02f6e, 0x02f6f,
+ 0x02f70, 0x02f71, 0x02f72, 0x02f73, 0x02f74, 0x02f75, 0x02f76, 0x02f77,
+ 0x02f78, 0x02f79, 0x02eb7, 0x02f7b, 0x02f7c, 0x02f7d, 0x02f7e, 0x02f7f,
+ 0x02f80, 0x02f81, 0x02f82, 0x02f83, 0x02f84, 0x02f85, 0x02f86, 0x02f87,
+ 0x02f88, 0x02f89, 0x02f8a, 0x02f8b, 0x02f8c, 0x02f8d, 0x02f8e, 0x02f8f,
+ 0x02f90, 0x02f91, 0x02f92, 0x02f93, 0x02f94, 0x02f95, 0x02f96, 0x02f97,
+ 0x02f98, 0x02f99, 0x02f9a, 0x02f9b, 0x02f9c, 0x02f9d, 0x02f9e, 0x02f9f,
+ 0x02fa0, 0x02fa1, 0x02fa2, 0x02fa3, 0x02fa4, 0x02fa5, 0x02fa6, 0x02fa7,
+ 0x02fa8, 0x02fa9, 0x02faa, 0x02fab, 0x02fac, 0x02fad, 0x02fae, 0x02faf,
+ 0x02fb0, 0x02fb1, 0x02fb2, 0x02fb3, 0x02fb4, 0x02fb5, 0x02fb6, 0x02fb7,
+ 0x02fb8, 0x02fb9, 0x02fba, 0x02fbb, 0x02fbc, 0x02fbd, 0x02fbe, 0x02fbf,
+ 0x02fc0, 0x02fc1, 0x02fc2, 0x02fc3, 0x02ee7, 0x02fc5, 0x02fc6, 0x02fc7,
+ 0x02fc8, 0x02fc9, 0x02fca, 0x02fcb, 0x02fcc, 0x02fcd, 0x02fce, 0x02fcf,
+ 0x02fd0, 0x02eeb, 0x02eed, 0x02eef, 0x02ef2, 0x02fd5, 0x02fd6, 0x02fd7,
+ 0x02fd8, 0x02fd9, 0x02fda, 0x02fdb, 0x02fdc, 0x02fdd, 0x02fde, 0x02fdf,
+ 0x02fe0, 0x02fe1, 0x02fe2, 0x02fe3, 0x02fe4, 0x02fe5, 0x02fe6, 0x02fe7,
+ 0x02fe8, 0x02fe9, 0x02fea, 0x02feb, 0x02fec, 0x02fed, 0x02fee, 0x02fef,
+ 0x02ff0, 0x02ff1, 0x02ff2, 0x02ff3, 0x02ff4, 0x02ff5, 0x02ff6, 0x02ff7,
+ 0x02ff8, 0x02ff9, 0x02ffa, 0x02ffb, 0x02ffc, 0x02ffd, 0x02ffe, 0x02fff
+};
+
+static uint32_t unicode_ci_page_30[] = {
+ 0x00020, 0x03001, 0x03002, 0x03003, 0x03004, 0x03005, 0x03006, 0x00030,
+ 0x02329, 0x0232a, 0x0300a, 0x0300b, 0x0300c, 0x0300d, 0x0300e, 0x0300f,
+ 0x03010, 0x03011, 0x03012, 0x03013, 0x03014, 0x03015, 0x03016, 0x03017,
+ 0x03018, 0x03019, 0x0301a, 0x0301b, 0x0301c, 0x0301d, 0x0301e, 0x0301f,
+ 0x03020, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x03030, 0x03031, 0x03031, 0x03033, 0x03033, 0x03035, 0x03012, 0x03037,
+ 0x02f17, 0x03039, 0x0303a, 0x0303b, 0x0303c, 0x0303d, 0x0303e, 0x0303f,
+ 0x03040, 0x03042, 0x03042, 0x03044, 0x03044, 0x03046, 0x03046, 0x03048,
+ 0x03048, 0x0304a, 0x0304a, 0x0304b, 0x0304b, 0x0304d, 0x0304d, 0x0304f,
+ 0x0304f, 0x03051, 0x03051, 0x03053, 0x03053, 0x03055, 0x03055, 0x03057,
+ 0x03057, 0x03059, 0x03059, 0x0305b, 0x0305b, 0x0305d, 0x0305d, 0x0305f,
+ 0x0305f, 0x03061, 0x03061, 0x03064, 0x03064, 0x03064, 0x03066, 0x03066,
+ 0x03068, 0x03068, 0x0306a, 0x0306b, 0x0306c, 0x0306d, 0x0306e, 0x0306f,
+ 0x0306f, 0x0306f, 0x03072, 0x03072, 0x03072, 0x03075, 0x03075, 0x03075,
+ 0x03078, 0x03078, 0x03078, 0x0307b, 0x0307b, 0x0307b, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03084, 0x03084, 0x03086, 0x03086, 0x03088,
+ 0x03088, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x03093, 0x03046, 0x0304b, 0x03051, 0x03097,
+ 0x03098, 0x00000, 0x00000, 0x0309b, 0x0309c, 0x0309d, 0x0309d, 0x0309f,
+ 0x030a0, 0x03042, 0x03042, 0x03044, 0x03044, 0x03046, 0x03046, 0x03048,
+ 0x03048, 0x0304a, 0x0304a, 0x0304b, 0x0304b, 0x0304d, 0x0304d, 0x0304f,
+ 0x0304f, 0x03051, 0x03051, 0x03053, 0x03053, 0x03055, 0x03055, 0x03057,
+ 0x03057, 0x03059, 0x03059, 0x0305b, 0x0305b, 0x0305d, 0x0305d, 0x0305f,
+ 0x0305f, 0x03061, 0x03061, 0x03064, 0x03064, 0x03064, 0x03066, 0x03066,
+ 0x03068, 0x03068, 0x0306a, 0x0306b, 0x0306c, 0x0306d, 0x0306e, 0x0306f,
+ 0x0306f, 0x0306f, 0x03072, 0x03072, 0x03072, 0x03075, 0x03075, 0x03075,
+ 0x03078, 0x03078, 0x03078, 0x0307b, 0x0307b, 0x0307b, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03084, 0x03084, 0x03086, 0x03086, 0x03088,
+ 0x03088, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x03093, 0x03046, 0x0304b, 0x03051, 0x0308f,
+ 0x03090, 0x03091, 0x03092, 0x030fb, 0x030fc, 0x030fd, 0x030fd, 0x030ff
+};
+
+static uint32_t unicode_ci_page_31[] = {
+ 0x03100, 0x03101, 0x03102, 0x03103, 0x03104, 0x03105, 0x03106, 0x03107,
+ 0x03108, 0x03109, 0x0310a, 0x0310b, 0x0310c, 0x0310d, 0x0310e, 0x0310f,
+ 0x03110, 0x03111, 0x03112, 0x03113, 0x03114, 0x03115, 0x03116, 0x03117,
+ 0x03118, 0x03119, 0x0311a, 0x0311b, 0x0311c, 0x0311d, 0x0311e, 0x0311f,
+ 0x03120, 0x03121, 0x03122, 0x03123, 0x03124, 0x03125, 0x03126, 0x03127,
+ 0x03128, 0x03129, 0x0312a, 0x0312b, 0x0312c, 0x0312d, 0x0312e, 0x0312f,
+ 0x03130, 0x01100, 0x01101, 0x011aa, 0x01102, 0x011ac, 0x011ad, 0x01103,
+ 0x01104, 0x01105, 0x011b0, 0x011b1, 0x011b2, 0x011b3, 0x011b4, 0x011b5,
+ 0x0111a, 0x01106, 0x01107, 0x01108, 0x01121, 0x01109, 0x0110a, 0x0110b,
+ 0x0110c, 0x0110d, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x01161,
+ 0x01162, 0x01163, 0x01164, 0x01165, 0x01166, 0x01167, 0x01168, 0x01169,
+ 0x0116a, 0x0116b, 0x0116c, 0x0116d, 0x0116e, 0x0116f, 0x01170, 0x01171,
+ 0x01172, 0x01173, 0x01174, 0x01175, 0x01160, 0x01114, 0x01115, 0x011c7,
+ 0x011c8, 0x011cc, 0x011ce, 0x011d3, 0x011d7, 0x011d9, 0x0111c, 0x011dd,
+ 0x011df, 0x0111d, 0x0111e, 0x01120, 0x01122, 0x01123, 0x01127, 0x01129,
+ 0x0112b, 0x0112c, 0x0112d, 0x0112e, 0x0112f, 0x01132, 0x01136, 0x01140,
+ 0x01147, 0x0114c, 0x011f1, 0x011f2, 0x01157, 0x01158, 0x01159, 0x01184,
+ 0x01185, 0x01188, 0x01191, 0x01192, 0x01194, 0x0119e, 0x011a1, 0x0318f,
+ 0x03190, 0x03191, 0x03192, 0x03193, 0x03194, 0x03195, 0x03196, 0x03197,
+ 0x03198, 0x03199, 0x0319a, 0x0319b, 0x0319c, 0x0319d, 0x0319e, 0x0319f,
+ 0x03105, 0x03117, 0x03110, 0x0310d, 0x031a4, 0x031a4, 0x031a6, 0x0311b,
+ 0x03128, 0x0311a, 0x03127, 0x03128, 0x031ac, 0x031ad, 0x0311e, 0x03120,
+ 0x031b0, 0x031b1, 0x031b2, 0x03127, 0x03106, 0x0310a, 0x0310e, 0x0310f,
+ 0x031b8, 0x031b9, 0x031ba, 0x031bb, 0x031bc, 0x031bd, 0x031be, 0x031bf,
+ 0x031c0, 0x031c1, 0x031c2, 0x031c3, 0x031c4, 0x031c5, 0x031c6, 0x031c7,
+ 0x031c8, 0x031c9, 0x031ca, 0x031cb, 0x031cc, 0x031cd, 0x031ce, 0x031cf,
+ 0x031d0, 0x031d1, 0x031d2, 0x031d3, 0x031d4, 0x031d5, 0x031d6, 0x031d7,
+ 0x031d8, 0x031d9, 0x031da, 0x031db, 0x031dc, 0x031dd, 0x031de, 0x031df,
+ 0x031e0, 0x031e1, 0x031e2, 0x031e3, 0x031e4, 0x031e5, 0x031e6, 0x031e7,
+ 0x031e8, 0x031e9, 0x031ea, 0x031eb, 0x031ec, 0x031ed, 0x031ee, 0x031ef,
+ 0x0304f, 0x03057, 0x03059, 0x03068, 0x0306c, 0x0306f, 0x03072, 0x03075,
+ 0x03078, 0x0307b, 0x03080, 0x03089, 0x0308a, 0x0308b, 0x0308c, 0x031ff
+};
+
+static uint32_t unicode_ci_page_32[] = {
+ 0x03200, 0x03201, 0x03202, 0x03203, 0x03204, 0x03205, 0x03206, 0x03207,
+ 0x03208, 0x03209, 0x0320a, 0x0320b, 0x0320c, 0x0320d, 0x0320e, 0x0320f,
+ 0x03210, 0x03211, 0x03212, 0x03213, 0x03214, 0x03215, 0x03216, 0x03217,
+ 0x03218, 0x03219, 0x0321a, 0x0321b, 0x0321c, 0x0321d, 0x0321e, 0x0321f,
+ 0x03220, 0x03221, 0x03222, 0x03223, 0x03224, 0x03225, 0x03226, 0x03227,
+ 0x03228, 0x03229, 0x0322a, 0x0322b, 0x0322c, 0x0322d, 0x0322e, 0x0322f,
+ 0x03230, 0x03231, 0x03232, 0x03233, 0x03234, 0x03235, 0x03236, 0x03237,
+ 0x03238, 0x03239, 0x0323a, 0x0323b, 0x0323c, 0x0323d, 0x0323e, 0x0323f,
+ 0x03240, 0x03241, 0x03242, 0x03243, 0x03244, 0x03245, 0x03246, 0x03247,
+ 0x03248, 0x03249, 0x0324a, 0x0324b, 0x0324c, 0x0324d, 0x0324e, 0x0324f,
+ 0x03250, 0x03251, 0x03252, 0x03253, 0x03254, 0x03255, 0x03256, 0x03257,
+ 0x03258, 0x03259, 0x0325a, 0x0325b, 0x0325c, 0x0325d, 0x0325e, 0x0325f,
+ 0x01100, 0x01102, 0x01103, 0x01105, 0x01106, 0x01107, 0x01109, 0x0110b,
+ 0x0110c, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x0326e, 0x0326f,
+ 0x03270, 0x03271, 0x03272, 0x03273, 0x03274, 0x03275, 0x03276, 0x03277,
+ 0x03278, 0x03279, 0x0327a, 0x0327b, 0x0327c, 0x0327d, 0x0327e, 0x0327f,
+ 0x03192, 0x03193, 0x03194, 0x03195, 0x03284, 0x03285, 0x03286, 0x02f0b,
+ 0x03288, 0x02f17, 0x02f49, 0x02f55, 0x02f54, 0x02f4a, 0x02fa6, 0x02f1f,
+ 0x02f47, 0x03291, 0x03292, 0x03293, 0x03294, 0x03295, 0x03296, 0x03297,
+ 0x03298, 0x03299, 0x0329a, 0x02f25, 0x0329c, 0x0329d, 0x0329e, 0x0329f,
+ 0x032a0, 0x032a1, 0x032a2, 0x032a3, 0x03196, 0x03197, 0x03198, 0x032a7,
+ 0x032a8, 0x032a9, 0x032aa, 0x032ab, 0x032ac, 0x032ad, 0x032ae, 0x032af,
+ 0x032b0, 0x032b1, 0x032b2, 0x032b3, 0x032b4, 0x032b5, 0x032b6, 0x032b7,
+ 0x032b8, 0x032b9, 0x032ba, 0x032bb, 0x032bc, 0x032bd, 0x032be, 0x032bf,
+ 0x032c0, 0x032c1, 0x032c2, 0x032c3, 0x032c4, 0x032c5, 0x032c6, 0x032c7,
+ 0x032c8, 0x032c9, 0x032ca, 0x032cb, 0x032cc, 0x032cd, 0x032ce, 0x032cf,
+ 0x03042, 0x03044, 0x03046, 0x03048, 0x0304a, 0x0304b, 0x0304d, 0x0304f,
+ 0x03051, 0x03053, 0x03055, 0x03057, 0x03059, 0x0305b, 0x0305d, 0x0305f,
+ 0x03061, 0x03064, 0x03066, 0x03068, 0x0306a, 0x0306b, 0x0306c, 0x0306d,
+ 0x0306e, 0x0306f, 0x03072, 0x03075, 0x03078, 0x0307b, 0x0307e, 0x0307f,
+ 0x03080, 0x03081, 0x03082, 0x03084, 0x03086, 0x03088, 0x03089, 0x0308a,
+ 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x03090, 0x03091, 0x03092, 0x032ff
+};
+
+static uint32_t unicode_ci_page_33[] = {
+ 0x03300, 0x03301, 0x03302, 0x03303, 0x03304, 0x03305, 0x03306, 0x03307,
+ 0x03308, 0x03309, 0x0330a, 0x0330b, 0x0330c, 0x0330d, 0x0330e, 0x0330f,
+ 0x03310, 0x03311, 0x03312, 0x03313, 0x03314, 0x03315, 0x03316, 0x03317,
+ 0x03318, 0x03319, 0x0331a, 0x0331b, 0x0331c, 0x0331d, 0x0331e, 0x0331f,
+ 0x03320, 0x03321, 0x03322, 0x03323, 0x03324, 0x03325, 0x03326, 0x03327,
+ 0x03328, 0x03329, 0x0332a, 0x0332b, 0x0332c, 0x0332d, 0x0332e, 0x0332f,
+ 0x03330, 0x03331, 0x03332, 0x03333, 0x03334, 0x03335, 0x03336, 0x03337,
+ 0x03338, 0x03339, 0x0333a, 0x0333b, 0x0333c, 0x0333d, 0x0333e, 0x0333f,
+ 0x03340, 0x03341, 0x03342, 0x03343, 0x03344, 0x03345, 0x03346, 0x03347,
+ 0x03348, 0x03349, 0x0334a, 0x0334b, 0x0334c, 0x0334d, 0x0334e, 0x0334f,
+ 0x03350, 0x03351, 0x03352, 0x03353, 0x03354, 0x03355, 0x03356, 0x03357,
+ 0x03358, 0x03359, 0x0335a, 0x0335b, 0x0335c, 0x0335d, 0x0335e, 0x0335f,
+ 0x03360, 0x03361, 0x03362, 0x03363, 0x03364, 0x03365, 0x03366, 0x03367,
+ 0x03368, 0x03369, 0x0336a, 0x0336b, 0x0336c, 0x0336d, 0x0336e, 0x0336f,
+ 0x03370, 0x03371, 0x03372, 0x03373, 0x03374, 0x03375, 0x03376, 0x03377,
+ 0x03378, 0x03379, 0x0337a, 0x0337b, 0x0337c, 0x0337d, 0x0337e, 0x0337f,
+ 0x03380, 0x03381, 0x03382, 0x03383, 0x03384, 0x03385, 0x03386, 0x03387,
+ 0x03388, 0x03389, 0x0338a, 0x0338b, 0x0338c, 0x0338d, 0x0338e, 0x0338f,
+ 0x03390, 0x03391, 0x03392, 0x03393, 0x03394, 0x03395, 0x03396, 0x03397,
+ 0x03398, 0x03399, 0x0339a, 0x0339b, 0x0339c, 0x0339d, 0x0339e, 0x0339f,
+ 0x033a0, 0x033a1, 0x033a2, 0x033a3, 0x033a4, 0x033a5, 0x033a6, 0x033a7,
+ 0x033a8, 0x03380, 0x033aa, 0x033ab, 0x033ac, 0x033ad, 0x033ae, 0x033af,
+ 0x033b0, 0x033b1, 0x033b2, 0x033b3, 0x033b4, 0x033b5, 0x033b6, 0x033b7,
+ 0x033b8, 0x033b7, 0x033ba, 0x033bb, 0x033bc, 0x033bd, 0x033be, 0x033bd,
+ 0x033c0, 0x033c1, 0x033c2, 0x033c3, 0x033c4, 0x033c5, 0x033c6, 0x033c7,
+ 0x033c8, 0x033c9, 0x033ca, 0x033cb, 0x033cc, 0x033cd, 0x0339e, 0x033cf,
+ 0x033d0, 0x033d1, 0x033d2, 0x033d3, 0x03386, 0x033d5, 0x033d6, 0x033d7,
+ 0x033d8, 0x033d9, 0x033da, 0x033db, 0x033dc, 0x033dd, 0x033de, 0x033df,
+ 0x033e0, 0x033e1, 0x033e2, 0x033e3, 0x033e4, 0x033e5, 0x033e6, 0x033e7,
+ 0x033e8, 0x033e9, 0x033ea, 0x033eb, 0x033ec, 0x033ed, 0x033ee, 0x033ef,
+ 0x033f0, 0x033f1, 0x033f2, 0x033f3, 0x033f4, 0x033f5, 0x033f6, 0x033f7,
+ 0x033f8, 0x033f9, 0x033fa, 0x033fb, 0x033fc, 0x033fd, 0x033fe, 0x033ff
+};
+
+static uint32_t unicode_ci_page_f9[] = {
+ 0x0f900, 0x0f901, 0x02f9e, 0x0f903, 0x0f904, 0x0f905, 0x0f906, 0x02ef2,
+ 0x02ef2, 0x0f909, 0x02fa6, 0x0f90b, 0x0f90c, 0x0f90d, 0x0f90e, 0x0f90f,
+ 0x0f910, 0x0f911, 0x0f912, 0x0f913, 0x0f914, 0x0f915, 0x0f916, 0x0f917,
+ 0x0f918, 0x0f919, 0x0f91a, 0x0f91b, 0x0f91c, 0x0f91d, 0x0f91e, 0x0f91f,
+ 0x0f920, 0x0f921, 0x0f922, 0x0f923, 0x0f924, 0x0f925, 0x0f926, 0x0f927,
+ 0x0f928, 0x0f929, 0x0f92a, 0x0f92b, 0x0f92c, 0x0f92d, 0x0f92e, 0x0f92f,
+ 0x0f930, 0x0f931, 0x0f932, 0x0f933, 0x02f7c, 0x0f935, 0x0f936, 0x0f937,
+ 0x0f938, 0x0f939, 0x0f93a, 0x0f93b, 0x0f93c, 0x0f93d, 0x0f93e, 0x0f93f,
+ 0x02fc5, 0x0f941, 0x0f942, 0x0f943, 0x0f944, 0x0f945, 0x0f946, 0x0f947,
+ 0x0f948, 0x0f949, 0x0f94a, 0x0f94b, 0x0f94c, 0x0f94d, 0x0f94e, 0x0f94f,
+ 0x0f950, 0x0f951, 0x0f952, 0x0f953, 0x0f954, 0x0f955, 0x0f956, 0x0f957,
+ 0x0f958, 0x0f959, 0x0f95a, 0x0f95b, 0x0f914, 0x0f95d, 0x0f95e, 0x0f95f,
+ 0x0f960, 0x0f961, 0x0f962, 0x0f963, 0x0f964, 0x0f965, 0x0f966, 0x0f967,
+ 0x0f968, 0x0f969, 0x0f96a, 0x0f96b, 0x0f96c, 0x0f96d, 0x0f96e, 0x0f96f,
+ 0x0f970, 0x02fa0, 0x0f972, 0x0f973, 0x0f974, 0x0f975, 0x0f976, 0x0f977,
+ 0x0f978, 0x0f979, 0x0f97a, 0x0f97b, 0x0f97c, 0x0f97d, 0x0f97e, 0x0f97f,
+ 0x0f980, 0x02f25, 0x0f982, 0x0f983, 0x0f984, 0x0f985, 0x0f986, 0x0f987,
+ 0x0f988, 0x0f989, 0x02f12, 0x0f98b, 0x0f98c, 0x0f98d, 0x0f98e, 0x0f98f,
+ 0x0f990, 0x0f991, 0x0f992, 0x0f993, 0x0f994, 0x0f995, 0x0f996, 0x0f997,
+ 0x0f998, 0x0f999, 0x0f99a, 0x0f99b, 0x0f99c, 0x0f99d, 0x0f99e, 0x0f99f,
+ 0x0f9a0, 0x0f96f, 0x0f9a2, 0x0f9a3, 0x0f9a4, 0x0f9a5, 0x0f9a6, 0x0f9a7,
+ 0x0f9a8, 0x0f9a9, 0x0f95f, 0x0f9ab, 0x0f9ac, 0x0f9ad, 0x0f9ae, 0x0f9af,
+ 0x0f9b0, 0x0f9b1, 0x0f9b2, 0x0f9b3, 0x0f9b4, 0x0f9b5, 0x0f9b6, 0x0f9b7,
+ 0x0f9b8, 0x0f9b9, 0x0f9ba, 0x0f9bb, 0x0f9bc, 0x0f9bd, 0x0f9be, 0x0f914,
+ 0x0f9c0, 0x0f9c1, 0x0f9c2, 0x0f9c3, 0x02eef, 0x0f9c5, 0x0f9c6, 0x0f9c7,
+ 0x0f9c8, 0x0f9c9, 0x0f9ca, 0x0f9cb, 0x0f9cc, 0x0f9cd, 0x0f9ce, 0x0f9cf,
+ 0x0f9d0, 0x03285, 0x0f9d2, 0x0f9d3, 0x0f9d4, 0x0f9d5, 0x0f9d6, 0x0f9d7,
+ 0x0f9d8, 0x0f9d9, 0x0f9da, 0x0f961, 0x0f9dc, 0x0f9dd, 0x0f9de, 0x0f9df,
+ 0x0f9e0, 0x0f9e1, 0x0f9e2, 0x0f9e3, 0x0f9e4, 0x0f9e5, 0x0f9e6, 0x0f9e7,
+ 0x0f9e8, 0x02fa5, 0x0f9ea, 0x0f9eb, 0x0f9ec, 0x0f9ed, 0x0f9ee, 0x0f9ef,
+ 0x0f9f0, 0x0f9f1, 0x0f9f2, 0x0f9f3, 0x0f9f4, 0x0f9f5, 0x0f9f6, 0x02f74,
+ 0x0f9f8, 0x0f9f9, 0x0f9fa, 0x0f9fb, 0x0f9fc, 0x0f9fd, 0x0f9fe, 0x0f9ff
+};
+
+static uint32_t unicode_ci_page_fa[] = {
+ 0x0fa00, 0x0fa01, 0x0fa02, 0x0fa03, 0x0fa04, 0x0fa05, 0x0fa06, 0x0fa07,
+ 0x02f8f, 0x0fa09, 0x02f92, 0x0fa0b, 0x0fa0c, 0x0fa0d, 0x0fa0e, 0x0fa0f,
+ 0x0fa10, 0x0fa11, 0x0fa12, 0x0fa13, 0x0fa14, 0x0fa15, 0x0fa16, 0x0fa17,
+ 0x0fa18, 0x0fa19, 0x0fa1a, 0x0fa1b, 0x0fa1c, 0x0fa1d, 0x02f7b, 0x0fa1f,
+ 0x0fa20, 0x0fa21, 0x0fa22, 0x0fa23, 0x0fa24, 0x0fa25, 0x0fa26, 0x0fa27,
+ 0x0fa28, 0x0fa29, 0x0fa2a, 0x0fa2b, 0x0fa2c, 0x0fa2d, 0x0fa2e, 0x0fa2f,
+ 0x0fa30, 0x0fa31, 0x0fa32, 0x0fa33, 0x0fa34, 0x0fa35, 0x0fa36, 0x0fa37,
+ 0x0fa38, 0x0fa39, 0x0fa3a, 0x0fa3b, 0x02f2c, 0x0fa3d, 0x0fa3e, 0x0fa3f,
+ 0x0fa40, 0x0fa41, 0x0fa42, 0x0fa43, 0x0fa44, 0x0fa45, 0x0fa46, 0x0fa47,
+ 0x0fa48, 0x02ea4, 0x0fa4a, 0x0fa4b, 0x03293, 0x0fa4d, 0x0fa4e, 0x0fa4f,
+ 0x0fa50, 0x03297, 0x0fa52, 0x0fa53, 0x0fa54, 0x0fa55, 0x0fa56, 0x0f996,
+ 0x0fa58, 0x0fa59, 0x0fa5a, 0x0fa5b, 0x0fa5c, 0x02ebe, 0x02ebe, 0x0fa5f,
+ 0x0fa60, 0x0fa61, 0x0fa62, 0x0fa63, 0x0fa64, 0x0fa65, 0x02ecc, 0x0fa25,
+ 0x0fa68, 0x0fa69, 0x0fa6a, 0x0fa6b, 0x0fa6c, 0x0fa6d, 0x0fa6e, 0x0fa6f,
+ 0x0fa70, 0x0fa71, 0x0fa72, 0x0fa73, 0x0fa74, 0x0fa75, 0x0fa76, 0x0fa77,
+ 0x0fa78, 0x0fa79, 0x0fa7a, 0x0fa7b, 0x0fa7c, 0x0fa7d, 0x0fa7e, 0x0fa7f,
+ 0x0fa80, 0x0fa81, 0x0fa82, 0x0fa83, 0x0fa84, 0x0fa85, 0x0fa86, 0x0fa87,
+ 0x0fa88, 0x0fa89, 0x0fa8a, 0x0fa8b, 0x0fa8c, 0x0fa8d, 0x0fa8e, 0x0fa8f,
+ 0x0fa90, 0x0fa91, 0x0fa92, 0x0fa93, 0x0fa94, 0x0fa95, 0x0fa96, 0x0fa97,
+ 0x0fa98, 0x0fa99, 0x0fa9a, 0x0fa9b, 0x0fa9c, 0x0fa9d, 0x0fa9e, 0x0fa9f,
+ 0x0faa0, 0x0faa1, 0x0faa2, 0x0faa3, 0x0faa4, 0x0faa5, 0x0faa6, 0x0faa7,
+ 0x0faa8, 0x0faa9, 0x0faaa, 0x0faab, 0x0faac, 0x0faad, 0x0faae, 0x0faaf,
+ 0x0fab0, 0x0fab1, 0x0fab2, 0x0fab3, 0x0fab4, 0x0fab5, 0x0fab6, 0x0fab7,
+ 0x0fab8, 0x0fab9, 0x0faba, 0x0fabb, 0x0fabc, 0x0fabd, 0x0fabe, 0x0fabf,
+ 0x0fac0, 0x0fac1, 0x0fac2, 0x0fac3, 0x0fac4, 0x0fac5, 0x0fac6, 0x0fac7,
+ 0x0fac8, 0x0fac9, 0x0faca, 0x0facb, 0x0facc, 0x0facd, 0x0face, 0x0facf,
+ 0x0fad0, 0x0fad1, 0x0fad2, 0x0fad3, 0x0fad4, 0x0fad5, 0x0fad6, 0x0fad7,
+ 0x0fad8, 0x0fad9, 0x0fada, 0x0fadb, 0x0fadc, 0x0fadd, 0x0fade, 0x0fadf,
+ 0x0fae0, 0x0fae1, 0x0fae2, 0x0fae3, 0x0fae4, 0x0fae5, 0x0fae6, 0x0fae7,
+ 0x0fae8, 0x0fae9, 0x0faea, 0x0faeb, 0x0faec, 0x0faed, 0x0faee, 0x0faef,
+ 0x0faf0, 0x0faf1, 0x0faf2, 0x0faf3, 0x0faf4, 0x0faf5, 0x0faf6, 0x0faf7,
+ 0x0faf8, 0x0faf9, 0x0fafa, 0x0fafb, 0x0fafc, 0x0fafd, 0x0fafe, 0x0faff
+};
+
+static uint32_t unicode_ci_page_fb[] = {
+ 0x0fb00, 0x0fb01, 0x0fb02, 0x0fb03, 0x0fb04, 0x0fb05, 0x0fb05, 0x0fb07,
+ 0x0fb08, 0x0fb09, 0x0fb0a, 0x0fb0b, 0x0fb0c, 0x0fb0d, 0x0fb0e, 0x0fb0f,
+ 0x0fb10, 0x0fb11, 0x0fb12, 0x0fb13, 0x0fb14, 0x0fb15, 0x0fb16, 0x0fb17,
+ 0x0fb18, 0x0fb19, 0x0fb1a, 0x0fb1b, 0x0fb1c, 0x005d9, 0x00000, 0x005f2,
+ 0x005e2, 0x005d0, 0x005d3, 0x005d4, 0x005da, 0x005dc, 0x005dd, 0x005e8,
+ 0x005ea, 0x0002b, 0x005e9, 0x005e9, 0x005e9, 0x005e9, 0x005d0, 0x005d0,
+ 0x005d0, 0x005d1, 0x005d2, 0x005d3, 0x005d4, 0x005d5, 0x005d6, 0x0fb37,
+ 0x005d8, 0x005d9, 0x005da, 0x005da, 0x005dc, 0x0fb3d, 0x005dd, 0x0fb3f,
+ 0x005df, 0x005e1, 0x0fb42, 0x005e3, 0x005e3, 0x0fb45, 0x005e5, 0x005e7,
+ 0x005e8, 0x005e9, 0x005ea, 0x005d5, 0x005d1, 0x005da, 0x005e3, 0x0fb4f,
+ 0x00671, 0x00671, 0x0067b, 0x0067b, 0x0067b, 0x0067b, 0x0067e, 0x0067e,
+ 0x0067e, 0x0067e, 0x00680, 0x00680, 0x00680, 0x00680, 0x0067a, 0x0067a,
+ 0x0067a, 0x0067a, 0x0067f, 0x0067f, 0x0067f, 0x0067f, 0x00679, 0x00679,
+ 0x00679, 0x00679, 0x006a4, 0x006a4, 0x006a4, 0x006a4, 0x006a6, 0x006a6,
+ 0x006a6, 0x006a6, 0x00684, 0x00684, 0x00684, 0x00684, 0x00683, 0x00683,
+ 0x00683, 0x00683, 0x00686, 0x00686, 0x00686, 0x00686, 0x00687, 0x00687,
+ 0x00687, 0x00687, 0x0068d, 0x0068d, 0x0068c, 0x0068c, 0x0068e, 0x0068e,
+ 0x00688, 0x00688, 0x00698, 0x00698, 0x00691, 0x00691, 0x006a9, 0x006a9,
+ 0x006a9, 0x006a9, 0x006af, 0x006af, 0x006af, 0x006af, 0x006b3, 0x006b3,
+ 0x006b3, 0x006b3, 0x006b1, 0x006b1, 0x006b1, 0x006b1, 0x006ba, 0x006ba,
+ 0x006bb, 0x006bb, 0x006bb, 0x006bb, 0x006c0, 0x006c0, 0x006c1, 0x006c1,
+ 0x006c1, 0x006c1, 0x006be, 0x006be, 0x006be, 0x006be, 0x006d2, 0x006d2,
+ 0x006d2, 0x006d2, 0x0fbb2, 0x0fbb3, 0x0fbb4, 0x0fbb5, 0x0fbb6, 0x0fbb7,
+ 0x0fbb8, 0x0fbb9, 0x0fbba, 0x0fbbb, 0x0fbbc, 0x0fbbd, 0x0fbbe, 0x0fbbf,
+ 0x0fbc0, 0x0fbc1, 0x0fbc2, 0x0fbc3, 0x0fbc4, 0x0fbc5, 0x0fbc6, 0x0fbc7,
+ 0x0fbc8, 0x0fbc9, 0x0fbca, 0x0fbcb, 0x0fbcc, 0x0fbcd, 0x0fbce, 0x0fbcf,
+ 0x0fbd0, 0x0fbd1, 0x0fbd2, 0x006ad, 0x006ad, 0x006ad, 0x006ad, 0x006c7,
+ 0x006c7, 0x006c6, 0x006c6, 0x006c8, 0x006c8, 0x00677, 0x006cb, 0x006cb,
+ 0x006c5, 0x006c5, 0x006c9, 0x006c9, 0x006d0, 0x006d0, 0x006d0, 0x006d0,
+ 0x00649, 0x00649, 0x0fbea, 0x0fbea, 0x0fbec, 0x0fbec, 0x0fbee, 0x0fbee,
+ 0x0fbf0, 0x0fbf0, 0x0fbf2, 0x0fbf2, 0x0fbf4, 0x0fbf4, 0x0fbf6, 0x0fbf6,
+ 0x0fbf6, 0x0fbf9, 0x0fbf9, 0x0fbf9, 0x006cc, 0x006cc, 0x006cc, 0x006cc
+};
+
+static uint32_t unicode_ci_page_fc[] = {
+ 0x0fc00, 0x0fc01, 0x0fc02, 0x0fbf9, 0x0fc04, 0x0fc05, 0x0fc06, 0x0fc07,
+ 0x0fc08, 0x0fc09, 0x0fc0a, 0x0fc0b, 0x0fc0c, 0x0fc0d, 0x0fc0e, 0x0fc0f,
+ 0x0fc10, 0x0fc11, 0x0fc12, 0x0fc13, 0x0fc14, 0x0fc15, 0x0fc16, 0x0fc17,
+ 0x0fc18, 0x0fc19, 0x0fc1a, 0x0fc1b, 0x0fc1c, 0x0fc1d, 0x0fc1e, 0x0fc1f,
+ 0x0fc20, 0x0fc21, 0x0fc22, 0x0fc23, 0x0fc24, 0x0fc25, 0x0fc26, 0x0fc27,
+ 0x0fc28, 0x0fc29, 0x0fc2a, 0x0fc2b, 0x0fc2c, 0x0fc2d, 0x0fc2e, 0x0fc2f,
+ 0x0fc30, 0x0fc31, 0x0fc32, 0x0fc33, 0x0fc34, 0x0fc35, 0x0fc36, 0x0fc37,
+ 0x0fc38, 0x0fc39, 0x0fc3a, 0x0fc3b, 0x0fc3c, 0x0fc3d, 0x0fc3e, 0x0fc3f,
+ 0x0fc40, 0x0fc41, 0x0fc42, 0x0fc43, 0x0fc44, 0x0fc45, 0x0fc46, 0x0fc47,
+ 0x0fc48, 0x0fc49, 0x0fc4a, 0x0fc4b, 0x0fc4c, 0x0fc4d, 0x0fc4e, 0x0fc4f,
+ 0x0fc50, 0x0fc51, 0x0fc52, 0x0fc53, 0x0fc54, 0x0fc55, 0x0fc56, 0x0fc57,
+ 0x0fc58, 0x0fc59, 0x0fc5a, 0x00630, 0x00631, 0x00649, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x0fc64, 0x0fc65, 0x0fc02, 0x0fc67,
+ 0x0fbf9, 0x0fc04, 0x0fc6a, 0x0fc6b, 0x0fc08, 0x0fc6d, 0x0fc09, 0x0fc0a,
+ 0x0fc70, 0x0fc71, 0x0fc0e, 0x0fc73, 0x0fc0f, 0x0fc10, 0x0fc76, 0x0fc77,
+ 0x0fc12, 0x0fc79, 0x0fc13, 0x0fc14, 0x0fc31, 0x0fc32, 0x0fc35, 0x0fc36,
+ 0x0fc37, 0x0fc3b, 0x0fc3c, 0x0fc3d, 0x0fc3e, 0x0fc42, 0x0fc43, 0x0fc44,
+ 0x0fc88, 0x0fc48, 0x0fc8a, 0x0fc8b, 0x0fc4e, 0x0fc8d, 0x0fc4f, 0x0fc50,
+ 0x00649, 0x0fc91, 0x0fc92, 0x0fc58, 0x0fc94, 0x0fc59, 0x0fc5a, 0x0fc00,
+ 0x0fc01, 0x0fc99, 0x0fc02, 0x0fc9b, 0x0fc05, 0x0fc06, 0x0fc07, 0x0fc08,
+ 0x0fca0, 0x0fc0b, 0x0fc0c, 0x0fc0d, 0x0fc0e, 0x0fca5, 0x0fc12, 0x0fc15,
+ 0x0fc16, 0x0fc17, 0x0fc18, 0x0fc19, 0x0fc1b, 0x0fc1c, 0x0fc1d, 0x0fc1e,
+ 0x0fc1f, 0x0fc20, 0x0fcb2, 0x0fc21, 0x0fc22, 0x0fc23, 0x0fc24, 0x0fc25,
+ 0x0fc26, 0x0fc28, 0x0fc29, 0x0fc2a, 0x0fc2b, 0x0fc2c, 0x0fc2d, 0x0fc2e,
+ 0x0fc2f, 0x0fc30, 0x0fc33, 0x0fc34, 0x0fc38, 0x0fc39, 0x0fc3a, 0x0fc3b,
+ 0x0fc3c, 0x0fc3f, 0x0fc40, 0x0fc41, 0x0fc42, 0x0fccd, 0x0fc45, 0x0fc46,
+ 0x0fc47, 0x0fc48, 0x0fc4b, 0x0fc4c, 0x0fc4d, 0x0fc4e, 0x0fcd6, 0x0fc51,
+ 0x0fc52, 0x00647, 0x0fc55, 0x0fc56, 0x0fc57, 0x0fc58, 0x0fcde, 0x0fc02,
+ 0x0fc9b, 0x0fc08, 0x0fca0, 0x0fc0e, 0x0fca5, 0x0fc12, 0x0fce6, 0x0fc1f,
+ 0x0fce8, 0x0fce9, 0x0fcea, 0x0fc3b, 0x0fc3c, 0x0fc42, 0x0fc4e, 0x0fcd6,
+ 0x0fc58, 0x0fcde, 0x00000, 0x00000, 0x00000, 0x0fcf5, 0x0fcf6, 0x0fcf7,
+ 0x0fcf8, 0x0fcf9, 0x0fcfa, 0x0fcfb, 0x0fcfc, 0x0fcfd, 0x0fcfe, 0x0fcff
+};
+
+static uint32_t unicode_ci_page_fd[] = {
+ 0x0fd00, 0x0fd01, 0x0fd02, 0x0fd03, 0x0fd04, 0x0fd05, 0x0fd06, 0x0fd07,
+ 0x0fd08, 0x0fd09, 0x0fd0a, 0x0fd0b, 0x0fce9, 0x0fd0d, 0x0fd0e, 0x0fd0f,
+ 0x0fd10, 0x0fcf5, 0x0fcf6, 0x0fcf7, 0x0fcf8, 0x0fcf9, 0x0fcfa, 0x0fcfb,
+ 0x0fcfc, 0x0fcfd, 0x0fcfe, 0x0fd1b, 0x0fd00, 0x0fd01, 0x0fd02, 0x0fd03,
+ 0x0fd04, 0x0fd05, 0x0fd06, 0x0fd07, 0x0fd08, 0x0fd09, 0x0fd0a, 0x0fd0b,
+ 0x0fce9, 0x0fd0d, 0x0fd0e, 0x0fd0f, 0x0fd10, 0x0fd09, 0x0fd0a, 0x0fd0b,
+ 0x0fce9, 0x0fce8, 0x0fcea, 0x0fc27, 0x0fc1c, 0x0fc1d, 0x0fc1e, 0x0fd09,
+ 0x0fd0a, 0x0fd0b, 0x0fc27, 0x0fc28, 0x00627, 0x00627, 0x0fd3e, 0x0fd3f,
+ 0x0fd40, 0x0fd41, 0x0fd42, 0x0fd43, 0x0fd44, 0x0fd45, 0x0fd46, 0x0fd47,
+ 0x0fd48, 0x0fd49, 0x0fd4a, 0x0fd4b, 0x0fd4c, 0x0fd4d, 0x0fd4e, 0x0fd4f,
+ 0x0fd50, 0x0fd51, 0x0fd51, 0x0fd53, 0x0fd54, 0x0fd55, 0x0fd56, 0x0fd57,
+ 0x0fd58, 0x0fd58, 0x0fd5a, 0x0fd5b, 0x0fd5c, 0x0fd5d, 0x0fd5e, 0x0fd5f,
+ 0x0fd5f, 0x0fd61, 0x0fd62, 0x0fd62, 0x0fd64, 0x0fd64, 0x0fd66, 0x0fd67,
+ 0x0fd67, 0x0fd69, 0x0fd6a, 0x0fd6a, 0x0fd6c, 0x0fd6c, 0x0fd6e, 0x0fd6f,
+ 0x0fd6f, 0x0fd71, 0x0fd71, 0x0fd73, 0x0fd74, 0x0fd75, 0x0fd76, 0x0fd76,
+ 0x0fd78, 0x0fd79, 0x0fd7a, 0x0fd7b, 0x0fd7c, 0x0fd7c, 0x0fd7e, 0x0fd7f,
+ 0x0fd80, 0x0fd81, 0x0fd82, 0x0fd83, 0x0fd83, 0x0fd85, 0x0fd85, 0x0fd87,
+ 0x0fd87, 0x0fd89, 0x0fd8a, 0x0fd8b, 0x0fd8c, 0x0fd8d, 0x0fd8e, 0x0fd8f,
+ 0x0fd90, 0x0fd91, 0x0fd92, 0x0fd93, 0x0fd94, 0x0fd95, 0x0fd96, 0x0fd97,
+ 0x0fd97, 0x0fd99, 0x0fd9a, 0x0fd9b, 0x0fd9c, 0x0fd9c, 0x0fd9e, 0x0fd9f,
+ 0x0fda0, 0x0fda1, 0x0fda2, 0x0fda3, 0x0fda4, 0x0fda5, 0x0fda6, 0x0fda7,
+ 0x0fda8, 0x0fda9, 0x0fdaa, 0x0fdab, 0x0fdac, 0x0fdad, 0x0fdae, 0x0fdaf,
+ 0x0fdb0, 0x0fdb1, 0x0fdb2, 0x0fdb3, 0x0fd7e, 0x0fd80, 0x0fdb6, 0x0fdb7,
+ 0x0fdb8, 0x0fdb9, 0x0fdba, 0x0fdbb, 0x0fdba, 0x0fdb8, 0x0fdbe, 0x0fdbf,
+ 0x0fdc0, 0x0fdc1, 0x0fdc2, 0x0fdbb, 0x0fd75, 0x0fd66, 0x0fdc6, 0x0fdc7,
+ 0x0fdc8, 0x0fdc9, 0x0fdca, 0x0fdcb, 0x0fdcc, 0x0fdcd, 0x0fdce, 0x0fdcf,
+ 0x0fdd0, 0x0fdd1, 0x0fdd2, 0x0fdd3, 0x0fdd4, 0x0fdd5, 0x0fdd6, 0x0fdd7,
+ 0x0fdd8, 0x0fdd9, 0x0fdda, 0x0fddb, 0x0fddc, 0x0fddd, 0x0fdde, 0x0fddf,
+ 0x0fde0, 0x0fde1, 0x0fde2, 0x0fde3, 0x0fde4, 0x0fde5, 0x0fde6, 0x0fde7,
+ 0x0fde8, 0x0fde9, 0x0fdea, 0x0fdeb, 0x0fdec, 0x0fded, 0x0fdee, 0x0fdef,
+ 0x0fdf0, 0x0fdf1, 0x0fdf2, 0x0fdf3, 0x0fdf4, 0x0fdf5, 0x0fdf6, 0x0fdf7,
+ 0x0fdf8, 0x0fdf9, 0x0fdfa, 0x0fdfb, 0x0fdfc, 0x0fdfd, 0x0fdfe, 0x0fdff
+};
+
+static uint32_t unicode_ci_page_fe[] = {
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x0fe10, 0x0fe11, 0x0fe12, 0x0fe13, 0x0fe14, 0x0fe15, 0x0fe16, 0x0fe17,
+ 0x0fe18, 0x0fe19, 0x0fe1a, 0x0fe1b, 0x0fe1c, 0x0fe1d, 0x0fe1e, 0x0fe1f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x0fe24, 0x0fe25, 0x0fe26, 0x0fe27,
+ 0x0fe28, 0x0fe29, 0x0fe2a, 0x0fe2b, 0x0fe2c, 0x0fe2d, 0x0fe2e, 0x0fe2f,
+ 0x02025, 0x02014, 0x02013, 0x0005f, 0x0005f, 0x00028, 0x00029, 0x0007b,
+ 0x0007d, 0x03014, 0x03015, 0x03010, 0x03011, 0x0300a, 0x0300b, 0x02329,
+ 0x0232a, 0x0300c, 0x0300d, 0x0300e, 0x0300f, 0x0fe45, 0x0fe46, 0x0005b,
+ 0x0005d, 0x0203e, 0x0203e, 0x0203e, 0x0203e, 0x0005f, 0x0005f, 0x0005f,
+ 0x0002c, 0x03001, 0x0002e, 0x0fe53, 0x0003b, 0x0003a, 0x0003f, 0x00021,
+ 0x02014, 0x00028, 0x00029, 0x0007b, 0x0007d, 0x03014, 0x03015, 0x00023,
+ 0x00026, 0x0002a, 0x0002b, 0x0002d, 0x0003c, 0x0003e, 0x0003d, 0x0fe67,
+ 0x0005c, 0x00024, 0x00025, 0x00040, 0x0fe6c, 0x0fe6d, 0x0fe6e, 0x0fe6f,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x0fe75, 0x00000, 0x00000,
+ 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
+ 0x00621, 0x00622, 0x00622, 0x00623, 0x00623, 0x00624, 0x00624, 0x00625,
+ 0x00625, 0x00626, 0x00626, 0x00626, 0x00626, 0x00627, 0x00627, 0x00628,
+ 0x00628, 0x00628, 0x00628, 0x00629, 0x00629, 0x0062a, 0x0062a, 0x0062a,
+ 0x0062a, 0x0062b, 0x0062b, 0x0062b, 0x0062b, 0x0062c, 0x0062c, 0x0062c,
+ 0x0062c, 0x0062d, 0x0062d, 0x0062d, 0x0062d, 0x0062e, 0x0062e, 0x0062e,
+ 0x0062e, 0x0062f, 0x0062f, 0x00630, 0x00630, 0x00631, 0x00631, 0x00632,
+ 0x00632, 0x00633, 0x00633, 0x00633, 0x00633, 0x00634, 0x00634, 0x00634,
+ 0x00634, 0x00635, 0x00635, 0x00635, 0x00635, 0x00636, 0x00636, 0x00636,
+ 0x00636, 0x00637, 0x00637, 0x00637, 0x00637, 0x00638, 0x00638, 0x00638,
+ 0x00638, 0x00639, 0x00639, 0x00639, 0x00639, 0x0063a, 0x0063a, 0x0063a,
+ 0x0063a, 0x00641, 0x00641, 0x00641, 0x00641, 0x00642, 0x00642, 0x00642,
+ 0x00642, 0x00643, 0x00643, 0x00643, 0x00643, 0x00644, 0x00644, 0x00644,
+ 0x00644, 0x00645, 0x00645, 0x00645, 0x00645, 0x00646, 0x00646, 0x00646,
+ 0x00646, 0x00647, 0x00647, 0x00647, 0x00647, 0x00648, 0x00648, 0x00649,
+ 0x00649, 0x0064a, 0x0064a, 0x0064a, 0x0064a, 0x0fef5, 0x0fef5, 0x0fef7,
+ 0x0fef7, 0x0fef9, 0x0fef9, 0x0fefb, 0x0fefb, 0x0fefd, 0x0fefe, 0x0feff
+};
+
+static uint32_t unicode_ci_page_ff[] = {
+ 0x0ff00, 0x00021, 0x00022, 0x00023, 0x00024, 0x00025, 0x00026, 0x00027,
+ 0x00028, 0x00029, 0x0002a, 0x0002b, 0x0002c, 0x0002d, 0x0002e, 0x0002f,
+ 0x00030, 0x00031, 0x00032, 0x00033, 0x00034, 0x00035, 0x00036, 0x00037,
+ 0x00038, 0x00039, 0x0003a, 0x0003b, 0x0003c, 0x0003d, 0x0003e, 0x0003f,
+ 0x00040, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0005b, 0x0005c, 0x0005d, 0x0005e, 0x0005f,
+ 0x00060, 0x00041, 0x00042, 0x00043, 0x00044, 0x00045, 0x00046, 0x00047,
+ 0x00048, 0x00049, 0x0004a, 0x0004b, 0x0004c, 0x0004d, 0x0004e, 0x0004f,
+ 0x00050, 0x00051, 0x00052, 0x00053, 0x00054, 0x00055, 0x00056, 0x00057,
+ 0x00058, 0x00059, 0x0005a, 0x0007b, 0x0007c, 0x0007d, 0x0007e, 0x02985,
+ 0x02986, 0x03002, 0x0300c, 0x0300d, 0x03001, 0x030fb, 0x03092, 0x03042,
+ 0x03044, 0x03046, 0x03048, 0x0304a, 0x03084, 0x03086, 0x03088, 0x03064,
+ 0x030fc, 0x03042, 0x03044, 0x03046, 0x03048, 0x0304a, 0x0304b, 0x0304d,
+ 0x0304f, 0x03051, 0x03053, 0x03055, 0x03057, 0x03059, 0x0305b, 0x0305d,
+ 0x0305f, 0x03061, 0x03064, 0x03066, 0x03068, 0x0306a, 0x0306b, 0x0306c,
+ 0x0306d, 0x0306e, 0x0306f, 0x03072, 0x03075, 0x03078, 0x0307b, 0x0307e,
+ 0x0307f, 0x03080, 0x03081, 0x03082, 0x03084, 0x03086, 0x03088, 0x03089,
+ 0x0308a, 0x0308b, 0x0308c, 0x0308d, 0x0308f, 0x03093, 0x00000, 0x00000,
+ 0x01160, 0x01100, 0x01101, 0x011aa, 0x01102, 0x011ac, 0x011ad, 0x01103,
+ 0x01104, 0x01105, 0x011b0, 0x011b1, 0x011b2, 0x011b3, 0x011b4, 0x011b5,
+ 0x0111a, 0x01106, 0x01107, 0x01108, 0x01121, 0x01109, 0x0110a, 0x0110b,
+ 0x0110c, 0x0110d, 0x0110e, 0x0110f, 0x01110, 0x01111, 0x01112, 0x0ffbf,
+ 0x0ffc0, 0x0ffc1, 0x01161, 0x01162, 0x01163, 0x01164, 0x01165, 0x01166,
+ 0x0ffc8, 0x0ffc9, 0x01167, 0x01168, 0x01169, 0x0116a, 0x0116b, 0x0116c,
+ 0x0ffd0, 0x0ffd1, 0x0116d, 0x0116e, 0x0116f, 0x01170, 0x01171, 0x01172,
+ 0x0ffd8, 0x0ffd9, 0x01173, 0x01174, 0x01175, 0x0ffdd, 0x0ffde, 0x0ffdf,
+ 0x000a2, 0x000a3, 0x000ac, 0x000af, 0x000a6, 0x000a5, 0x020a9, 0x0ffe7,
+ 0x02502, 0x02190, 0x02191, 0x02192, 0x02193, 0x025a0, 0x025cb, 0x0ffef,
+ 0x0fff0, 0x0fff1, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff5, 0x0fff6, 0x0fff7,
+ 0x0fff8, 0x00000, 0x00000, 0x00000, 0x0fffc, 0x0fffd, 0x0fffe, 0x0ffff
+};
+
+static uint32_t *unicode_ci_table[256] = {
+ unicode_ci_page_00, unicode_ci_page_01,
+ unicode_ci_page_02, unicode_ci_page_03,
+ unicode_ci_page_04, unicode_ci_page_05,
+ unicode_ci_page_06, unicode_ci_page_07,
+ NULL, unicode_ci_page_09,
+ unicode_ci_page_0a, unicode_ci_page_0b,
+ unicode_ci_page_0c, unicode_ci_page_0d,
+ unicode_ci_page_0e, unicode_ci_page_0f,
+ unicode_ci_page_10, NULL,
+ NULL, unicode_ci_page_13,
+ NULL, NULL,
+ unicode_ci_page_16, unicode_ci_page_17,
+ unicode_ci_page_18, unicode_ci_page_19,
+ NULL, NULL,
+ NULL, unicode_ci_page_1d,
+ unicode_ci_page_1e, unicode_ci_page_1f,
+ unicode_ci_page_20, unicode_ci_page_21,
+ unicode_ci_page_22, NULL,
+ unicode_ci_page_24, NULL,
+ NULL, unicode_ci_page_27,
+ NULL, NULL,
+ unicode_ci_page_2a, NULL,
+ NULL, NULL,
+ unicode_ci_page_2e, unicode_ci_page_2f,
+ unicode_ci_page_30, unicode_ci_page_31,
+ unicode_ci_page_32, unicode_ci_page_33,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+ NULL, unicode_ci_page_f9,
+ unicode_ci_page_fa, unicode_ci_page_fb,
+ unicode_ci_page_fc, unicode_ci_page_fd,
+ unicode_ci_page_fe, unicode_ci_page_ff
+};
+
+#endif
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/Makefile.am
new file mode 100644
index 00000000000..f6ab8e5af9f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/Makefile.am
@@ -0,0 +1,6 @@
+SUBDIRS = \
+ apt \
+ ubuntu \
+ rpm \
+ yum \
+ source
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Makefile.am
new file mode 100644
index 00000000000..cb257b9293b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Makefile.am
@@ -0,0 +1,67 @@
+REPOSITORIES_PATH = repositories
+DISTRIBUTIONS = debian
+ARCHITECTURES = i386 amd64
+CODE_NAMES = wheezy
+
+all:
+
+release: build sign-packages update-repository sign-repository upload
+
+remove-existing-packages:
+ for distribution in $(DISTRIBUTIONS); do \
+ find $(REPOSITORIES_PATH)/$${distribution}/pool \
+ -type f -delete; \
+ done
+
+ensure-rsync-path:
+ @if test -z "$(RSYNC_PATH)"; then \
+ echo "--with-rsync-path configure option must be specified."; \
+ false; \
+ fi
+
+download: ensure-rsync-path
+ for distribution in $(DISTRIBUTIONS); do \
+ rsync -avz --progress --delete \
+ $(RSYNC_PATH)/$${distribution} \
+ ${REPOSITORIES_PATH}/; \
+ done
+
+sign-packages:
+ ./sign-packages.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODE_NAMES)'
+
+update-repository:
+ ./update-repository.sh '$(PACKAGE_NAME)' '$(REPOSITORIES_PATH)/' \
+ '$(ARCHITECTURES)' '$(CODE_NAMES)'
+
+sign-repository:
+ ./sign-repository.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' '$(CODE_NAMES)'
+
+upload: ensure-rsync-path
+ for distribution in $(DISTRIBUTIONS); do \
+ (cd $(REPOSITORIES_PATH)/$${distribution}; \
+ rsync -avz --progress --delete \
+ dists pool $(RSYNC_PATH)/$${distribution}); \
+ done
+
+build: build-package-deb
+
+build-package-deb: prepare-build-package-deb
+ vagrant destroy --force
+ for architecture in $(ARCHITECTURES); do \
+ for code_name in $(CODE_NAMES); do \
+ id=debian-$$code_name-$$architecture; \
+ vagrant up $$id || exit 1; \
+ vagrant destroy --force $$id; \
+ done; \
+ done
+
+prepare-build-package-deb: source env.sh
+ cp env.sh tmp/
+ rm -rf tmp/debian
+ cp -rp $(srcdir)/../debian tmp/
+
+source: tmp/$(PACKAGE)-$(VERSION).tar.gz
+
+tmp/$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+ mkdir -p tmp
+ cp $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz $@
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Vagrantfile b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Vagrantfile
new file mode 100644
index 00000000000..97ba2496071
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/Vagrantfile
@@ -0,0 +1,27 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+ vms = [
+ {
+ :id => "debian-wheezy-i386",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.6-i386_chef-provisionerless.box
+",
+ },
+ {
+ :id => "debian-wheezy-amd64",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_debian-7.6_chef-provisionerless.box",
+ },
+ ]
+
+ vms.each do |vm|
+ config.vm.define(vm[:id]) do |node|
+ node.vm.box = vm[:id]
+ node.vm.box_url = vm[:box_url]
+ node.vm.provision(:shell, :path => "build-deb.sh")
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/build-deb.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/build-deb.sh
new file mode 100755
index 00000000000..fdfc8f52f03
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/build-deb.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+LANG=C
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+. /vagrant/tmp/env.sh
+
+run apt-get update
+run apt-get install -y lsb-release
+
+distribution=$(lsb_release --id --short | tr 'A-Z' 'a-z')
+code_name=$(lsb_release --codename --short)
+case "${distribution}" in
+ debian)
+ component=main
+ run cat <<EOF > /etc/apt/sources.list.d/groonga.list
+deb http://packages.groonga.org/debian/ wheezy main
+deb-src http://packages.groonga.org/debian/ wheezy main
+EOF
+ run apt-get update
+ run apt-get install -y --allow-unauthenticated groonga-keyring
+ run apt-get update
+ ;;
+ ubuntu)
+ component=universe
+ run apt-get -y install software-properties-common
+ run add-apt-repository -y universe
+ run add-apt-repository -y ppa:groonga/ppa
+ run apt-get update
+ ;;
+esac
+
+run apt-get install -V -y build-essential devscripts ${DEPENDED_PACKAGES}
+
+run mkdir -p build
+run cp /vagrant/tmp/${PACKAGE}-${VERSION}.tar.gz \
+ build/${PACKAGE}_${VERSION}.orig.tar.gz
+run cd build
+run tar xfz ${PACKAGE}_${VERSION}.orig.tar.gz
+run cd ${PACKAGE}-${VERSION}/
+run cp -rp /vagrant/tmp/debian debian
+# export DEB_BUILD_OPTIONS=noopt
+run debuild -us -uc
+run cd -
+
+package_initial=$(echo "${PACKAGE}" | sed -e 's/\(.\).*/\1/')
+pool_dir="/vagrant/repositories/${distribution}/pool/${code_name}/${component}/${package_initial}/${PACKAGE}"
+run mkdir -p "${pool_dir}/"
+run cp *.tar.gz *.dsc *.deb "${pool_dir}/"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/env.sh.in b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/env.sh.in
new file mode 100644
index 00000000000..6fb3e8407a1
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/env.sh.in
@@ -0,0 +1,8 @@
+PACKAGE=@PACKAGE@
+VERSION=@VERSION@
+DEPENDED_PACKAGES="
+debhelper
+autotools-dev
+pkg-config
+libgroonga-dev
+"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-packages.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-packages.sh
new file mode 100755
index 00000000000..11a4aea26db
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-packages.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+ echo "Usage: $0 GPG_UID DESITINATION CODES"
+ echo " e.g.: $0 'F10399C0' repositories/ 'lenny unstable hardy karmic'"
+ exit 1
+fi
+
+GPG_UID=$1
+DESTINATION=$2
+CODES=$3
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+for code_name in ${CODES}; do
+ case ${code_name} in
+ squeeze|wheezy|jessie|unstable)
+ distribution=debian
+ ;;
+ *)
+ distribution=ubuntu
+ ;;
+ esac
+
+ base_directory=${DESTINATION}${distribution}
+ debsign -pgpg2 --re-sign -k${GPG_UID} \
+ $(find ${base_directory} -name '*.dsc' -or -name '*.changes') &
+ if [ "${PARALLEL}" != "yes" ]; then
+ wait
+ fi
+done
+
+wait
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-repository.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-repository.sh
new file mode 100755
index 00000000000..fb0de850d6f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/sign-repository.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+ echo "Usage: $0 GPG_UID DESTINATION CODES"
+ echo " e.g.: $0 'F10399C0' repositories/ 'lenny unstable hardy karmic'"
+ exit 1
+fi
+
+GPG_UID=$1
+DESTINATION=$2
+CODES=$3
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+for code_name in ${CODES}; do
+ case ${code_name} in
+ squeeze|wheezy|jessie|unstable)
+ distribution=debian
+ ;;
+ *)
+ distribution=ubuntu
+ ;;
+ esac
+
+ release=${DESTINATION}${distribution}/dists/${code_name}/Release
+ rm -f ${release}.gpg
+ gpg2 --sign --detach-sign --armor \
+ --local-user ${GPG_UID} \
+ --output ${release}.gpg \
+ ${release} &
+
+ if [ "${PARALLEL}" != "yes" ]; then
+ wait
+ fi
+done
+
+wait
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/update-repository.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/update-repository.sh
new file mode 100755
index 00000000000..da1f8cd121c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/apt/update-repository.sh
@@ -0,0 +1,130 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 4 ]; then
+ echo "Usage: $0 PROJECT_NAME DESTINATION ARCHITECTURES CODES"
+ echo " e.g.: $0 mroonga repositories/ 'i386 amd64' 'lenny unstable hardy karmic'"
+ exit 1
+fi
+
+PROJECT_NAME=$1
+DESTINATION=$2
+ARCHITECTURES=$3
+CODES=$4
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+update_repository()
+{
+ distribution=$1
+ code_name=$2
+ component=$3
+
+ rm -rf dists/${code_name}
+ mkdir -p dists/${code_name}/${component}/binary-i386/
+ mkdir -p dists/${code_name}/${component}/binary-amd64/
+ mkdir -p dists/${code_name}/${component}/source/
+
+ cat <<EOF > dists/.htaccess
+Options +Indexes
+EOF
+
+ cat <<EOF > dists/${code_name}/${component}/binary-i386/Release
+Archive: ${code_name}
+Component: ${component}
+Origin: The ${PROJECT_NAME} project
+Label: The ${PROJECT_NAME} project
+Architecture: i386
+EOF
+
+ cat <<EOF > dists/${code_name}/${component}/binary-amd64/Release
+Archive: ${code_name}
+Component: ${component}
+Origin: The ${PROJECT_NAME} project
+Label: The ${PROJECT_NAME} project
+Architecture: amd64
+EOF
+
+ cat <<EOF > dists/${code_name}/${component}/source/Release
+Archive: ${code_name}
+Component: ${component}
+Origin: The ${PROJECT_NAME} project
+Label: The ${PROJECT_NAME} project
+Architecture: source
+EOF
+
+ cat <<EOF > generate-${code_name}.conf
+Dir::ArchiveDir ".";
+Dir::CacheDir ".";
+TreeDefault::Directory "pool/${code_name}/${component}";
+TreeDefault::SrcDirectory "pool/${code_name}/${component}";
+Default::Packages::Extensions ".deb";
+Default::Packages::Compress ". gzip bzip2";
+Default::Sources::Compress ". gzip bzip2";
+Default::Contents::Compress "gzip bzip2";
+
+BinDirectory "dists/${code_name}/${component}/binary-i386" {
+ Packages "dists/${code_name}/${component}/binary-i386/Packages";
+ Contents "dists/${code_name}/Contents-i386";
+ SrcPackages "dists/${code_name}/${component}/source/Sources";
+};
+
+BinDirectory "dists/${code_name}/${component}/binary-amd64" {
+ Packages "dists/${code_name}/${component}/binary-amd64/Packages";
+ Contents "dists/${code_name}/Contents-amd64";
+ SrcPackages "dists/${code_name}/${component}/source/Sources";
+};
+
+Tree "dists/${code_name}" {
+ Sections "${component}";
+ Architectures "i386 amd64 source";
+};
+EOF
+ apt-ftparchive generate generate-${code_name}.conf
+ chmod 644 dists/${code_name}/Contents-*
+
+ rm -f dists/${code_name}/Release*
+ rm -f *.db
+ cat <<EOF > release-${code_name}.conf
+APT::FTPArchive::Release::Origin "The ${PROJECT_NAME} project";
+APT::FTPArchive::Release::Label "The ${PROJECT_NAME} project";
+APT::FTPArchive::Release::Architectures "i386 amd64";
+APT::FTPArchive::Release::Codename "${code_name}";
+APT::FTPArchive::Release::Suite "${code_name}";
+APT::FTPArchive::Release::Components "${component}";
+APT::FTPArchive::Release::Description "${PACKAGE_NAME} packages";
+EOF
+ apt-ftparchive -c release-${code_name}.conf \
+ release dists/${code_name} > /tmp/Release
+ mv /tmp/Release dists/${code_name}
+}
+
+for code_name in ${CODES}; do
+ case ${code_name} in
+ squeeze|wheezy|jessie|unstable)
+ distribution=debian
+ component=main
+ ;;
+ *)
+ distribution=ubuntu
+ component=universe
+ ;;
+ esac
+
+ mkdir -p ${DESTINATION}${distribution}
+ (cd ${DESTINATION}${distribution}
+ update_repository $distribution $code_name $component) &
+ if [ "${PARALLEL}" != "yes" ]; then
+ wait
+ fi
+done
+
+wait
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/changelog b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/changelog
new file mode 100644
index 00000000000..245c138a35a
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/changelog
@@ -0,0 +1,41 @@
+groonga-normalizer-mysql (1.0.6-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- HAYASHI Kentaro <hayashi@clear-code.com> Sun, 09 Feb 2014 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.5-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- HAYASHI Kentaro <hayashi@clear-code.com> Sat, 29 Jun 2013 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.4-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- HAYASHI Kentaro <hayashi@clear-code.com> Wed, 29 May 2013 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.3-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- HAYASHI Kentaro <hayashi@clear-code.com> Mon, 29 Apr 2013 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- HAYASHI Kentaro <hayashi@clear-code.com> Fri, 29 Mar 2013 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.1) unstable; urgency=low
+
+ * New upstream release
+
+ -- khayashi <hayashi@clear-code.com> Thu, 28 Feb 2013 00:00:00 +0900
+
+groonga-normalizer-mysql (1.0.0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Kouhei Sutou <kou@clear-code.com> Sat, 9 Feb 2013 00:00:00 +0900
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/compat b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/compat
new file mode 100644
index 00000000000..ec635144f60
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/control b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/control
new file mode 100644
index 00000000000..20c456b0a76
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/control
@@ -0,0 +1,25 @@
+Source: groonga-normalizer-mysql
+Section: libs
+Priority: optional
+Maintainer: Kouhei Sutou <kou@clear-code.com>
+Build-Depends:
+ debhelper (>= 9),
+ autotools-dev,
+ pkg-config,
+ libgroonga-dev (>= 3.0.0)
+Standards-Version: 3.9.3
+Homepage: http://groonga.org/
+
+Package: groonga-normalizer-mysql
+Section: libs
+Architecture: any
+Depends:
+ ${misc:Depends},
+ ${shlibs:Depends},
+ libgroonga0
+Description: MySQL derived normalizer for groonga.
+ Groonga is an open-source fulltext search engine and column store.
+ It lets you write high-performance applications that requires fulltext search.
+ .
+ This package provides a normalizer which normalizes text as same as MySQL does.
+
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/copyright b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/copyright
new file mode 100644
index 00000000000..cd3295a134c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/copyright
@@ -0,0 +1,29 @@
+This package was debianized by Kouhei Sutou <kou@clear-code.com> on
+Tue, 29 Jan 2013 14:52:04 +0000.
+
+It was downloaded from <http://groonga.org/>
+
+Upstream Author(s):
+
+ Kouhei Sutou <kou at clear-code.com>
+
+Copyright:
+
+ Copyright(C) 2013 Brazil
+
+License:
+
+ This library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2 of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+The Debian packaging is (C) 2013, Kouhei Sutou <kou@clear-code.com> and
+is licensed under the LGPL-2, see `/usr/share/common-licenses/LGPL-2'.
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/groonga-normalizer-mysql.install b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/groonga-normalizer-mysql.install
new file mode 100644
index 00000000000..1f58446dfb6
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/groonga-normalizer-mysql.install
@@ -0,0 +1 @@
+usr/lib/groonga/plugins/normalizers/mysql*
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/patches/series b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/patches/series
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/patches/series
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/rules b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/rules
new file mode 100755
index 00000000000..811e09274c0
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/rules
@@ -0,0 +1,15 @@
+#!/usr/bin/make -f
+# -*- makefile-gmake -*-
+#
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+# This has to be exported to make some magic below work.
+export DH_OPTIONS
+
+%:
+ dh $@
+
+# disable 'make check'.
+override_dh_auto_test:
+
+override_dh_install:
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/source/format b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/source/format
new file mode 100644
index 00000000000..163aaf8d82b
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/Makefile.am
new file mode 100644
index 00000000000..06031c93f6f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = centos fedora
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/Makefile.am
new file mode 100644
index 00000000000..eb5a6b42a61
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/Makefile.am
@@ -0,0 +1 @@
+noinst_DATA = groonga-normalizer-mysql.spec
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/groonga-normalizer-mysql.spec.in b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/groonga-normalizer-mysql.spec.in
new file mode 100644
index 00000000000..e51bae6990d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/centos/groonga-normalizer-mysql.spec.in
@@ -0,0 +1,78 @@
+%global _initddir %{_sysconfdir}/init.d/
+
+Name: groonga-normalizer-mysql
+Version: @VERSION@
+Release: 1%{?dist}
+Summary: MySQL compatible normalizer plugin for groonga
+
+Group: Applications/Text
+License: LGPLv2
+URL: http://groonga.org/
+Source0: http://packages.groonga.org/source/%{name}/%{name}-%{version}.tar.gz
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id_u} -n)
+BuildRequires: groonga-devel >= 3.0.3
+Requires: groonga-libs >= 3.0.3
+
+%description
+This package provides MySQL compatible normalizer plugin.
+You can use NormalizerMySQLGeneralCI and NormalizerMySQLUnicodeCI as normalizer.
+
+%package devel
+Summary: Development files for groonga-normalizer-mysql
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description devel
+This package provides development files for groonga-normalizer-mysql.
+
+%prep
+%setup -q
+
+
+%build
+%configure \
+ --disable-static
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+make %{?_smp_mflags}
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
+rm $RPM_BUILD_ROOT%{_libdir}/groonga/plugins/*/*.la
+
+%files
+%doc README AUTHORS COPYING
+%dir %{_libdir}/groonga
+%dir %{_libdir}/groonga/plugins
+%dir %{_libdir}/groonga/plugins/normalizers
+%{_libdir}/groonga/plugins/normalizers/mysql.so
+%{_datadir}/doc/groonga-normalizer-mysql/
+
+%files devel
+%{_libdir}/pkgconfig/groonga-normalizer-mysql.pc
+
+%changelog
+* Sun Feb 09 2014 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.6-1
+- new upstream release.
+
+* Sat Jun 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.5-1
+- new upstream release.
+
+* Wed May 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.4-1
+- new upstream release.
+
+* Mon Apr 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.3-0
+- new upstream release.
+- Reduce required packages. groonga-libs is only required.
+- Require groonga 3.0.3 or later.
+- Split development files into -devel package.
+
+* Fri Mar 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.2-0
+- new upstream release.
+
+* Thu Feb 28 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.1-0
+- new upstream release
+
+* Tue Jan 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.0-0
+- initial packaging for CentOS
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/Makefile.am
new file mode 100644
index 00000000000..1273c1d4009
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/Makefile.am
@@ -0,0 +1,2 @@
+noinst_DATA = groonga-normalizer-mysql.spec
+
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/groonga-normalizer-mysql.spec.in b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/groonga-normalizer-mysql.spec.in
new file mode 100644
index 00000000000..3be5e0797db
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/rpm/fedora/groonga-normalizer-mysql.spec.in
@@ -0,0 +1,77 @@
+%global __provides_exclude_from ^%{_libdir}/groonga/plugins/normalizers/mysql\\.so$
+
+Name: groonga-normalizer-mysql
+Version: @VERSION@
+Release: 1%{?dist}
+Summary: MySQL compatible normalizer plugin for groonga
+
+Group: Applications/Text
+License: LGPLv2
+URL: http://groonga.org/
+Source0: http://packages.groonga.org/source/%{name}/%{name}-%{version}.tar.gz
+
+BuildRequires: groonga-devel >= 3.0.3
+Requires: groonga-libs >= 3.0.3
+ExclusiveArch: %{ix86} x86_64
+
+%description
+This package provides MySQL compatible normalizer plugin.
+You can use NormalizerMySQLGeneralCI and NormalizerMySQLUnicodeCI as normalizer.
+
+%package devel
+Summary: Development files for groonga-normalizer-mysql
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description devel
+This package provides development files for groonga-normalizer-mysql.
+
+%prep
+%setup -q
+
+%build
+%configure \
+ --disable-static
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+make %{?_smp_mflags}
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p"
+rm $RPM_BUILD_ROOT%{_libdir}/groonga/plugins/*/*.la
+
+%files
+%doc README AUTHORS COPYING
+%dir %{_libdir}/groonga
+%dir %{_libdir}/groonga/plugins
+%dir %{_libdir}/groonga/plugins/normalizers
+%{_libdir}/groonga/plugins/normalizers/mysql.so
+%{_datadir}/doc/groonga-normalizer-mysql/
+
+%files devel
+%{_libdir}/pkgconfig/groonga-normalizer-mysql.pc
+
+%changelog
+* Sun Feb 09 2014 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.6-1
+- new upstream release.
+
+* Sat Jun 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.5-1
+- new upstream release.
+
+* Wed May 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.4-1
+- new upstream release.
+
+* Mon Apr 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.3-1
+- new upstream release.
+- Reduce required packages. groonga-libs is only required.
+- Require groonga 3.0.3 or later.
+- Split development files into -devel package.
+
+* Fri Mar 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.2-0
+- new upstream release.
+
+* Thu Feb 28 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.1-1
+- new upstream release
+
+* Tue Jan 29 2013 HAYASHI Kentaro <hayashi@clear-code.com> - 1.0.0-1
+- initial packaging for Fedora
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/source/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/source/Makefile.am
new file mode 100644
index 00000000000..29051e80db4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/source/Makefile.am
@@ -0,0 +1,25 @@
+all:
+
+release: upload
+
+ensure-rsync-path:
+ @if test -z "$(RSYNC_PATH)"; then \
+ echo "--with-rsync-path configure option must be specified."; \
+ false; \
+ fi
+
+download: ensure-rsync-path
+ rsync -avz --progress $(RSYNC_PATH)/source/groonga-normalizer-mysql/ files
+
+upload: ensure-rsync-path files/$(PACKAGE)-$(VERSION).tar.gz files/$(PACKAGE)-$(VERSION).zip
+ rsync -avz --progress --delete files/ $(RSYNC_PATH)/source/groonga-normalizer-mysql
+
+files/$(PACKAGE)-$(VERSION).tar.gz: $(top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+ mkdir -p files
+ cp -p $< $@
+
+files/$(PACKAGE)-$(VERSION).zip: files/$(PACKAGE)-$(VERSION).tar.gz
+ rm -rf $(PACKAGE)-$(VERSION)
+ tar xvzf files/$(PACKAGE)-$(VERSION).tar.gz
+ zip -r $@ $(PACKAGE)-$(VERSION)
+ rm -rf $(PACKAGE)-$(VERSION)
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/ubuntu/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/ubuntu/Makefile.am
new file mode 100644
index 00000000000..3b616910900
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/ubuntu/Makefile.am
@@ -0,0 +1,28 @@
+CODE_NAMES = precise,trusty
+SOURCE = ../$(PACKAGE)-$(VERSION).tar.gz
+
+all:
+
+ensure-configuration:
+ @if test -z "$(LAUNCHPAD_UPLOADER_PGP_KEY)"; then \
+ echo "--with-launchpad-uploader-pgp-key configure option must be specified."; \
+ false; \
+ fi
+ @if test -z "$(GROONGA_SOURCE_PATH)"; then \
+ echo "--with-groonga-source-path configure option must be specified."; \
+ false; \
+ fi
+
+upload: source ensure-configuration
+ $(GROONGA_SOURCE_PATH)/packages/ubuntu/upload.rb \
+ --package '$(PACKAGE)' \
+ --version '$(VERSION)' \
+ --source-archive '$(SOURCE)' \
+ --code-names '$(CODE_NAMES)' \
+ --debian-directory '$(srcdir)/../debian/' \
+ --pgp-sign-key '$(LAUNCHPAD_UPLOADER_PGP_KEY)'
+
+source: $(SOURCE)
+
+$(SOURCE):
+ ln -s $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz $(SOURCE)
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Makefile.am b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Makefile.am
new file mode 100644
index 00000000000..ea62f6e427e
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Makefile.am
@@ -0,0 +1,72 @@
+REPOSITORIES_PATH = repositories
+DISTRIBUTIONS = centos
+ARCHITECTURES = i386 x86_64
+HAVE_DEVELOPMENT_BRANCH = no
+
+release: download build sign-packages update-repository upload
+
+ensure-rsync-path:
+ @if test -z "$(RSYNC_PATH)"; then \
+ echo "--with-rsync-path configure option must be specified."; \
+ false; \
+ fi
+
+sign-packages:
+ ./sign-rpm.sh '$(GPG_UID)' '$(REPOSITORIES_PATH)/' \
+ '$(DISTRIBUTIONS)'
+
+update-repository: RPM-GPG-KEY-$(PACKAGE)
+ ./update-repository.sh '$(PACKAGE)' '$(REPOSITORIES_PATH)/' \
+ '$(DISTRIBUTIONS)'
+
+upload: ensure-rsync-path
+ for distribution in $(DISTRIBUTIONS); do \
+ rsync -avz --progress --delete --exclude .gitignore \
+ $(REPOSITORIES_PATH)/$${distribution}/ \
+ $(RSYNC_PATH)/$${distribution}; \
+ done
+
+download: ensure-rsync-path
+ mkdir -p $(REPOSITORIES_PATH)
+ for distribution in $(DISTRIBUTIONS); do \
+ rsync -avz --progress --delete \
+ $(RSYNC_PATH)/$${distribution}/ \
+ $(REPOSITORIES_PATH)/$${distribution}; \
+ done
+
+build: build-in-vm
+
+build-in-vm: source specs env.sh
+ vagrant destroy --force
+ for architecture in $(ARCHITECTURES); do \
+ for version in 5 6 7; do \
+ if [ $$version = 7 -a $$architecture = i386 ]; then \
+ continue; \
+ fi; \
+ id=centos-$$version-$$architecture; \
+ vagrant up $$id; \
+ vagrant destroy --force $$id; \
+ done; \
+ done
+
+ensure-public-key:
+ gpg --list-keys '$(GPG_UID)' > /dev/null || \
+ gpg --keyserver keyserver.ubuntu.com --recv-key '$(GPG_UID)'
+
+RPM-GPG-KEY-$(PACKAGE): ensure-public-key
+ gpg --armor --export '$(GPG_UID)' > $@
+
+source: tmp/$(PACKAGE)-$(VERSION).tar.gz
+
+tmp/$(PACKAGE)-$(VERSION).tar.gz: $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz
+ mkdir -p tmp/
+ cp $(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz tmp/
+
+$(abs_top_builddir)/$(PACKAGE)-$(VERSION).tar.gz:
+ cd $(abs_top_builddir) && $(MAKE) dist
+
+specs: tmp/centos/$(PACKAGE).spec
+
+tmp/centos/$(PACKAGE).spec: $(builddir)/../rpm/centos/$(PACKAGE).spec
+ mkdir -p tmp/centos
+ cp $(builddir)/../rpm/centos/$(PACKAGE).spec tmp/centos/
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Vagrantfile b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Vagrantfile
new file mode 100644
index 00000000000..4238d678721
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/Vagrantfile
@@ -0,0 +1,38 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+ vms = [
+ {
+ :id => "centos-5-i386",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.10-i386_chef-provisionerless.box",
+ },
+ {
+ :id => "centos-5-x86_64",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-5.10_chef-provisionerless.box",
+ },
+ {
+ :id => "centos-6-i386",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5-i386_chef-provisionerless.box",
+ },
+ {
+ :id => "centos-6-x86_64",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box",
+ },
+ {
+ :id => "centos-7-x86_64",
+ :box_url => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.0_chef-provisionerless.box",
+ },
+ ]
+
+ vms.each do |vm|
+ config.vm.define(vm[:id]) do |node|
+ node.vm.box = vm[:id]
+ node.vm.box_url = vm[:box_url]
+ node.vm.provision(:shell, :path => "build-rpm.sh")
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/build-rpm.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/build-rpm.sh
new file mode 100755
index 00000000000..14a13ad0e00
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/build-rpm.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+rpmbuild_options=
+
+. /vagrant/env.sh
+
+distribution=$(cut -d " " -f 1 /etc/redhat-release | tr "A-Z" "a-z")
+if grep -q Linux /etc/redhat-release; then
+ distribution_version=$(cut -d " " -f 4 /etc/redhat-release)
+else
+ distribution_version=$(cut -d " " -f 3 /etc/redhat-release)
+fi
+distribution_version=$(echo ${distribution_version} | sed -e 's/\..*$//g')
+
+architecture="$(arch)"
+case "${architecture}" in
+ i*86)
+ architecture=i386
+ ;;
+esac
+
+run rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
+run yum makecache
+
+run yum groupinstall -y "Development Tools"
+run yum install -y rpm-build rpmdevtools tar ${DEPENDED_PACKAGES}
+
+if [ -x /usr/bin/rpmdev-setuptree ]; then
+ rm -rf .rpmmacros
+ run rpmdev-setuptree
+else
+ run cat <<EOM > ~/.rpmmacros
+%_topdir ${HOME}/rpmbuild
+EOM
+ run mkdir -p ~/rpmbuild/SOURCES
+ run mkdir -p ~/rpmbuild/SPECS
+ run mkdir -p ~/rpmbuild/BUILD
+ run mkdir -p ~/rpmbuild/RPMS
+ run mkdir -p ~/rpmbuild/SRPMS
+fi
+
+repository="/vagrant/repositories/${distribution}/${distribution_version}"
+rpm_dir="${repository}/${architecture}/Packages"
+srpm_dir="${repository}/source/SRPMS"
+run mkdir -p "${rpm_dir}" "${srpm_dir}"
+
+# for debug
+# rpmbuild_options="$rpmbuild_options --define 'optflags -O0 -g3'"
+
+cd
+
+run cp /vagrant/tmp/${PACKAGE}-${VERSION}.* rpmbuild/SOURCES/
+run cp /vagrant/tmp/${distribution}/${PACKAGE}.spec rpmbuild/SPECS/
+
+run rpmbuild -ba ${rpmbuild_options} rpmbuild/SPECS/${PACKAGE}.spec
+
+run mv rpmbuild/RPMS/*/* "${rpm_dir}/"
+run mv rpmbuild/SRPMS/* "${srpm_dir}/"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/env.sh.in b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/env.sh.in
new file mode 100644
index 00000000000..ea55d0d88da
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/env.sh.in
@@ -0,0 +1,11 @@
+PACKAGE=@PACKAGE@
+VERSION=@VERSION@
+DEPENDED_PACKAGES="
+intltool
+libtool
+gcc
+gcc-c++
+make
+tar
+groonga-devel
+"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/sign-rpm.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/sign-rpm.sh
new file mode 100755
index 00000000000..2022ca66956
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/sign-rpm.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+ echo "Usage: $0 GPG_UID DESTINATION DISTRIBUTIONS"
+ echo " e.g.: $0 'F10399C0' repositories/ 'fedora centos'"
+ exit 1
+fi
+
+GPG_UID=$1
+DESTINATION=$2
+DISTRIBUTIONS=$3
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+rpms=""
+for distribution in ${DISTRIBUTIONS}; do
+ rpms="${rpms} $(echo ${DESTINATION}${distribution}/*/*/*/*.rpm)"
+done
+
+echo "NOTE: YOU JUST ENTER! YOU DON'T NEED TO INPUT PASSWORD!"
+echo " IT'S JUST FOR rpm COMMAND RESTRICTION!"
+run echo $rpms | xargs rpm \
+ -D "_gpg_name ${GPG_UID}" \
+ -D "_gpg_digest_algo sha1" \
+ -D "__gpg /usr/bin/gpg2" \
+ -D "__gpg_check_password_cmd /bin/true true" \
+ -D "__gpg_sign_cmd %{__gpg} gpg --batch --no-verbose --no-armor %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} --no-secmem-warning -u \"%{_gpg_name}\" -sbo %{__signature_filename} %{__plaintext_filename}" \
+ --resign
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/update-repository.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/update-repository.sh
new file mode 100755
index 00000000000..04058598dce
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/packages/yum/update-repository.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+script_base_dir=`dirname $0`
+
+if [ $# != 3 ]; then
+ echo "Usage: $0 GPG_KEY_NAME DESTINATION DISTRIBUTIONS"
+ echo " e.g.: $0 mitler-manager repositories/ 'fedora centos'"
+ exit 1
+fi
+
+GPG_KEY_NAME=$1
+DESTINATION=$2
+DISTRIBUTIONS=$3
+
+run()
+{
+ "$@"
+ if test $? -ne 0; then
+ echo "Failed $@"
+ exit 1
+ fi
+}
+
+for distribution in ${DISTRIBUTIONS}; do
+ for dir in ${DESTINATION}${distribution}/*/*; do
+ # "--checksum sha" is for CentOS 5. If we drop CentOS 5 support,
+ # we can remove the option.
+ test -d $dir && run createrepo --checksum sha $dir
+ done;
+
+ run cp $script_base_dir/RPM-GPG-KEY-${GPG_KEY_NAME} \
+ ${DESTINATION}${distribution}/RPM-GPG-KEY-${GPG_KEY_NAME};
+done
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/required_groonga_version b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/required_groonga_version
new file mode 100644
index 00000000000..75a22a26ac4
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/required_groonga_version
@@ -0,0 +1 @@
+3.0.3
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_uca.rb b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_uca.rb
new file mode 100644
index 00000000000..45e60c2973f
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_uca.rb
@@ -0,0 +1,50 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+$LOAD_PATH.unshift(File.dirname(__FILE__))
+require "parser"
+
+if ARGV.size != 1
+ puts("Usage: #{$0} MYSQL_SOURCE/strings/ctype-uca.c")
+ exit(false)
+end
+
+parser = CTypeUCAParser.new
+parser.parse(ARGF)
+
+n_idencials = 0
+n_expanded_characters = 0
+parser.weight_based_characters.each do |weight, characters|
+ next if characters.size == 1
+ n_idencials += 1
+ representative_character = characters.first
+ rest_characters = characters[1..-1]
+ rest_characters.each do |character|
+ if representative_character[:utf8].bytesize > character[:utf8].bytesize
+ n_expanded_characters += 1
+ end
+ end
+ formatted_weight = weight.collect {|component| '%#07x' % component}.join(', ')
+ puts "weight: #{formatted_weight}"
+ characters.each do |character|
+ utf8 = character[:utf8]
+ code_point = character[:code_point]
+ p ["U+%04x" % code_point, utf8]
+ end
+end
+
+puts "Number of idencial weights #{n_idencials}"
+puts "Number of expanded characters: #{n_expanded_characters}"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_utf8.rb b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_utf8.rb
new file mode 100644
index 00000000000..8cbfe969c13
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/dump_difference_utf8.rb
@@ -0,0 +1,50 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+$LOAD_PATH.unshift(File.dirname(__FILE__))
+require "parser"
+
+if ARGV.size != 1
+ puts("Usage: #{$0} MYSQL_SOURCE/strings/ctype-utf8.c")
+ exit(false)
+end
+
+parser = CTypeUTF8Parser.new
+parser.parse(ARGF)
+
+n_differences = 0
+n_expanded_sort_characters = 0
+parser.sorted_pages.each do |page, characters|
+ characters.each do |character|
+ base = character[:base]
+ upper = character[:upper]
+ lower = character[:lower]
+ sort = character[:sort]
+ next if base == sort
+ n_differences += 1
+ utf8s = [base, upper, lower, sort]
+ formatted_code_points = utf8s.collect do |utf8|
+ "%#07x" % Unicode.from_utf8(utf8)
+ end
+ if sort.bytesize > base.bytesize
+ n_expanded_sort_characters += 1
+ end
+ p [utf8s, formatted_code_points]
+ end
+end
+
+puts "Number of differences: #{n_differences}"
+puts "Number of expanded sort characters: #{n_expanded_sort_characters}"
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_uca_table.rb b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_uca_table.rb
new file mode 100755
index 00000000000..57dba4e0477
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_uca_table.rb
@@ -0,0 +1,286 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+require "optparse"
+
+$LOAD_PATH.unshift(File.dirname(__FILE__))
+require "parser"
+
+@suffix = ""
+@split_small_kana_p = false
+@split_kana_with_voiced_sound_mark_p = false
+@split_kana_with_semi_voiced_sound_mark_p = false
+
+option_parser = OptionParser.new
+option_parser.banner += " MYSQL_SOURCE/strings/ctype-uca.c"
+
+option_parser.on("--suffix=SUFFIX", "Add SUFFIX to names") do |suffix|
+ @suffix = suffix
+end
+
+option_parser.on("--[no-]split-small-kana",
+ "Split small hiragana (katakana) and " +
+ "large hiragana (katakana)",
+ "(#{@split_small_kana_p})") do |boolean|
+ @split_small_kana_p = boolean
+end
+
+option_parser.on("--[no-]split-kana-with-voiced-sound-mark",
+ "Split hiragana (katakana) with voiced sound mark",
+ "(#{@split_kana_with_voiced_sound_mark})") do |boolean|
+ @split_kana_with_voiced_sound_mark_p = boolean
+end
+
+option_parser.on("--[no-]split-kana-with-semi-voiced-sound-mark",
+ "Split hiragana (katakana) with semi-voiced sound mark",
+ "(#{@split_kana_with_semi_voiced_sound_mark})") do |boolean|
+ @split_kana_with_semi_voiced_sound_mark_p = boolean
+end
+
+begin
+ option_parser.parse!(ARGV)
+rescue OptionParser::Error
+ puts($!)
+ exit(false)
+end
+
+if ARGV.size != 1
+ puts(option_parser)
+ exit(false)
+end
+
+ctype_uca_c_path = ARGV[0]
+
+parser = CTypeUCAParser.new
+File.open(ctype_uca_c_path) do |ctype_uca_c|
+ parser.parse(ctype_uca_c)
+end
+
+SMALL_KANAS = [
+ "ã", "ãƒ", "ã…", "ã‡", "ã‰",
+ "ã£",
+ "ゃ", "ゅ", "ょ",
+ "ã‚Ž",
+ "ァ", "ィ", "ゥ", "ェ", "ォ",
+ "ッ",
+ "ャ", "ュ", "ョ",
+ "ヮ",
+ "ァ", "ィ", "ゥ", "ェ", "ォ",
+ "ッ",
+ "ャ", "ュ", "ョ",
+]
+def small_kana?(character)
+ SMALL_KANAS.include?(character[:utf8])
+end
+
+KANA_WITH_VOICED_SOUND_MARKS = [
+ "ãŒ", "ãŽ", "ã", "ã’", "ã”",
+ "ã–", "ã˜", "ãš", "ãœ", "ãž",
+ "ã ", "ã¢", "ã¥", "ã§", "ã©",
+ "ã°", "ã³", "ã¶", "ã¹", "ã¼",
+ "ガ", "ギ", "グ", "ゲ", "ゴ",
+ "ザ", "ジ", "ズ", "ゼ", "ゾ",
+ "ダ", "ヂ", "ヅ", "デ", "ド",
+ "ãƒ", "ビ", "ブ", "ベ", "ボ",
+]
+def kana_with_voiced_sound_mark?(character)
+ KANA_WITH_VOICED_SOUND_MARKS.include?(character[:utf8])
+end
+
+KANA_WITH_SEMI_VOICED_SOUND_MARKS = [
+ "ã±", "ã´", "ã·", "ãº", "ã½",
+ "パ", "ピ", "プ", "ペ", "ãƒ",
+]
+def kana_with_semi_voiced_sound_mark?(character)
+ KANA_WITH_SEMI_VOICED_SOUND_MARKS.include?(character[:utf8])
+end
+
+def split_characters(characters)
+ grouped_characters = characters.group_by do |character|
+ if @split_small_kana_p and small_kana?(character)
+ :small_kana
+ elsif @split_kana_with_voiced_sound_mark_p and
+ kana_with_voiced_sound_mark?(character)
+ :kana_with_voiced_sound_mark
+ elsif @split_kana_with_semi_voiced_sound_mark_p and
+ kana_with_semi_voiced_sound_mark?(character)
+ :kana_with_semi_voiced_sound_mark
+ else
+ :other
+ end
+ end
+ grouped_characters.values
+end
+
+grouped_characters = []
+parser.weight_based_characters.each do |weight, characters|
+ grouped_characters.concat(split_characters(characters))
+end
+
+GREEK_CAPITAL_UNICODE_RANGE = Unicode.from_utf8("Α")..Unicode.from_utf8("Ω")
+def find_greek_capital_character(characters)
+ characters.find do |character|
+ GREEK_CAPITAL_UNICODE_RANGE.cover?(character[:code_point])
+ end
+end
+
+def find_representative_character(characters)
+ representative_character = nil
+ case characters.first[:utf8]
+ when "⺄", "⺇", "⺈", "⺊", "⺌", "⺗"
+ representative_character = characters.last
+ when "⺜", "âº", "⺧", "⺫", "⺬", "⺮", "⺶", "⺻", "⺼", "⺽"
+ representative_character = characters[1]
+ when "⻆", "⻊", "â»", "⻑", "⻕", "â»—", "â»", "⻡", "⻣", "⻤"
+ representative_character = characters.last
+ when "⻱", "⼀", "⼆", "⼈"
+ representative_character = characters[1]
+ when "ã", "ãƒ", "ã…", "ã‡", "ã‰", "ã£", "ゃ", "ã‚…", "ょ", "ã‚Ž"
+ representative_character = characters[1] unless @split_small_kana_p
+ else
+ representative_character ||= find_greek_capital_character(characters)
+ end
+ representative_character ||= characters.first
+ representative_character
+end
+
+target_pages = {}
+grouped_characters.each do |characters|
+ next if characters.size == 1
+ representative_character = find_representative_character(characters)
+ representative_code_point = representative_character[:code_point]
+ rest_characters = characters.reject do |character|
+ character == representative_character
+ end
+ rest_characters.each do |character|
+ code_point = character[:code_point]
+ page = code_point >> 8
+ low_code = code_point & 0xff
+ target_pages[page] ||= [nil] * 256
+ target_pages[page][low_code] = representative_code_point
+ end
+end
+
+sorted_target_pages = target_pages.sort_by do |page, code_points|
+ page
+end
+
+
+normalized_ctype_uca_c_path =
+ ctype_uca_c_path.sub(/\A.*\/([^\/]+\/strings\/ctype-uca\.c)\z/, "\\1")
+
+@suffix_upper_case = @suffix.upcase
+
+puts(<<-HEADER)
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ This file uses normalization table defined in
+ #{normalized_ctype_uca_c_path}.
+ The following is the header of the file:
+
+ Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ UCA (Unicode Collation Algorithm) support.
+ Written by Alexander Barkov <bar@mysql.com>
+*/
+
+#ifndef MYSQL_UCA#{@suffix_upper_case}_H
+#define MYSQL_UCA#{@suffix_upper_case}_H
+
+#include <stdint.h>
+HEADER
+
+def page_name(page)
+ "unicode_ci#{@suffix}_page_%02x" % page
+end
+
+sorted_target_pages.each do |page, characters|
+ puts(<<-PAGE_HEADER)
+
+static uint32_t #{page_name(page)}[] = {
+PAGE_HEADER
+ lines = characters.each_with_index.each_slice(8).collect do |characters_group|
+ formatted_code_points = characters_group.collect do |normalized, low_code|
+ normalized ||= (page << 8) + low_code
+ "0x%05x" % normalized
+ end
+ " " + formatted_code_points.join(", ")
+ end
+ puts(lines.join(",\n"))
+ puts(<<-PAGE_FOOTER)
+};
+PAGE_FOOTER
+end
+
+puts(<<-PAGES_HEADER)
+
+static uint32_t *unicode_ci#{@suffix}_table[256] = {
+PAGES_HEADER
+
+pages = ["NULL"] * 256
+sorted_target_pages.each do |page, characters|
+ pages[page] = page_name(page)
+end
+lines = pages.each_slice(2).collect do |pages_group|
+ formatted_pages = pages_group.collect do |page|
+ "%19s" % page
+ end
+ " " + formatted_pages.join(", ")
+end
+puts(lines.join(",\n"))
+
+puts(<<-PAGES_FOOTER)
+};
+PAGES_FOOTER
+
+puts(<<-FOOTER)
+
+#endif
+FOOTER
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_utf8_table.rb b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_utf8_table.rb
new file mode 100755
index 00000000000..dfedd94174c
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/generate_utf8_table.rb
@@ -0,0 +1,146 @@
+#!/usr/bin/env ruby
+#
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+$LOAD_PATH.unshift(File.dirname(__FILE__))
+require "parser"
+
+if ARGV.size != 1
+ puts("Usage: #{$0} MYSQL_SOURCE/strings/ctype-utf8.c")
+ exit(false)
+end
+
+ctype_utf8_c_path = ARGV[0]
+
+parser = CTypeUTF8Parser.new
+File.open(ctype_utf8_c_path) do |ctype_utf8_c|
+ parser.parse(ctype_utf8_c)
+end
+
+target_pages = {}
+parser.sorted_pages.each do |page, characters|
+ characters.each do |character|
+ base = character[:base]
+ upper = character[:upper]
+ lower = character[:lower]
+ sort = character[:sort]
+ next if base == sort
+ target_pages[page] ||= [nil] * 256
+ low_code = Unicode.from_utf8(base) & 0xff
+ target_pages[page][low_code] = Unicode.from_utf8(sort)
+ end
+end
+
+normalized_ctype_utf8_c_path =
+ ctype_utf8_c_path.sub(/\A.*\/([^\/]+\/strings\/ctype-utf8\.c)\z/, "\\1")
+puts(<<-HEADER)
+/*
+ Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ This file uses normalization table defined in
+ #{normalized_ctype_utf8_c_path}.
+ The following is the header of the file:
+
+ Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; version 2
+ of the License.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA
+
+ UTF8 according RFC 2279
+ Written by Alexander Barkov <bar@udm.net>
+*/
+
+#ifndef MYSQL_UTF8_H
+#define MYSQL_UTF8_H
+
+#include <stdint.h>
+HEADER
+
+def page_name(page)
+ "general_ci_page_%02x" % page
+end
+
+target_pages.each do |page, characters|
+ puts(<<-PAGE_HEADER)
+
+static uint32_t #{page_name(page)}[] = {
+PAGE_HEADER
+ lines = characters.each_with_index.each_slice(8).collect do |characters_group|
+ formatted_code_points = characters_group.collect do |normalized, low_code|
+ normalized ||= (page << 8) + low_code
+ "0x%05x" % normalized
+ end
+ " " + formatted_code_points.join(", ")
+ end
+ puts(lines.join(",\n"))
+ puts(<<-PAGE_FOOTER)
+};
+PAGE_FOOTER
+end
+
+puts(<<-PAGES_HEADER)
+
+static uint32_t *general_ci_table[256] = {
+PAGES_HEADER
+
+pages = ["NULL"] * 256
+target_pages.each do |page, characters|
+ pages[page] = page_name(page)
+end
+lines = pages.each_slice(2).collect do |pages_group|
+ formatted_pages = pages_group.collect do |page|
+ "%18s" % page
+ end
+ " " + formatted_pages.join(", ")
+end
+puts(lines.join(",\n"))
+
+puts(<<-PAGES_FOOTER)
+};
+PAGES_FOOTER
+
+puts(<<-FOOTER)
+
+#endif
+FOOTER
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/parser.rb b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/parser.rb
new file mode 100644
index 00000000000..b8652825f80
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/parser.rb
@@ -0,0 +1,161 @@
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+require "English"
+
+module Unicode
+ module_function
+ def to_utf8(code_point)
+ [code_point].pack("U")
+ end
+
+ def from_utf8(utf8)
+ utf8.unpack("U")[0]
+ end
+end
+
+class CTypeUTF8Parser
+ def initialize
+ @pages = {}
+ end
+
+ def parse(input)
+ parse_ctype_utf8(input)
+ normalize_pages
+ end
+
+ def sorted_pages
+ @pages.sort_by do |page, characters|
+ page
+ end
+ end
+
+ private
+ def parse_ctype_utf8(input)
+ current_page = nil
+ input.each_line do |line|
+ case line
+ when / plane([\da-fA-F]{2})\[\]=/
+ current_page = $1.to_i(16)
+ @pages[current_page] = []
+ when /^\s*
+ \{0x([\da-z]+),0x([\da-z]+),0x([\da-z]+)\},
+ \s*
+ \{0x([\da-z]+),0x([\da-z]+),0x([\da-z]+)\},?$/ix
+ next if current_page.nil?
+ parsed_characters = $LAST_MATCH_INFO.captures.collect do |value|
+ Unicode.to_utf8(value.to_i(16))
+ end
+ upper1, lower1, sort1, upper2, lower2, sort2 = parsed_characters
+ characters = @pages[current_page]
+ characters << {:upper => upper1, :lower => lower1, :sort => sort1}
+ characters << {:upper => upper2, :lower => lower2, :sort => sort2}
+ when /^\};$/
+ current_page = nil
+ end
+ end
+ end
+
+ def normalize_pages
+ @pages.each do |page, characters|
+ characters.each_with_index do |character, i|
+ character[:base] = Unicode.to_utf8((page << 8) + i)
+ end
+ end
+ end
+end
+
+class CTypeUCAParser
+ attr_reader :pages
+ def initialize
+ @pages = {}
+ @lengths = []
+ end
+
+ def parse(input)
+ parse_ctype_uca(input)
+ normalize_pages
+ end
+
+ def weight_based_characters
+ weight_based_characters = {}
+ sorted_pages.each do |page, characters|
+ characters.each do |character|
+ weight = character[:weight]
+ weight_based_characters[weight] ||= []
+ weight_based_characters[weight] << character
+ end
+ end
+ weight_based_characters
+ end
+
+ def sorted_pages
+ @pages.sort_by do |page, characters|
+ page
+ end
+ end
+
+ private
+ def parse_ctype_uca(input)
+ current_page = nil
+ in_length = false
+ input.each_line do |line|
+ case line
+ when / page([\da-fA-F]{3})data\[\]=/
+ current_page = $1.to_i(16)
+ @pages[current_page] = []
+ when /^\s*0x(?:[\da-z]+)(?:,\s*0x(?:[\da-z]+))*,?$/i
+ next if current_page.nil?
+ weights = line.chomp.split(/,\s*/).collect do |component|
+ Integer(component)
+ end
+ @pages[current_page].concat(weights)
+ when / uca_length\[256\]=/
+ in_length = true
+ when /^\d+(?:,\d+)*,?$/
+ next unless in_length
+ current_lengths = line.chomp.split(/,/).collect do |length|
+ Integer(length)
+ end
+ @lengths.concat(current_lengths)
+ when /^\};$/
+ current_page = nil
+ in_length = false
+ end
+ end
+ end
+
+ def normalize_pages
+ @pages.each do |page, flatten_weights|
+ weights = flatten_weights.each_slice(@lengths[page])
+ @pages[page] = weights.with_index.collect do |weight, i|
+ if weight.all?(&:zero?)
+ weight = [0]
+ else
+ while weight.last.zero?
+ weight.pop
+ end
+ end
+ code_point = (page << 8) + i
+ {
+ :weight => weight,
+ :code_point => code_point,
+ :utf8 => Unicode.to_utf8(code_point),
+ }
+ end
+ end
+ end
+end
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/before_script.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/before_script.sh
new file mode 100755
index 00000000000..353fb53d3b3
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/before_script.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -e
+
+./autogen.sh
+
+./configure
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/install.sh b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/install.sh
new file mode 100755
index 00000000000..ed61a3540ed
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/tool/travis/install.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# Copyright (C) 2013-2014 Kouhei Sutou <kou@clear-code.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+set -e
+
+# export GROONGA_MASTER=yes
+curl --silent --location \
+ https://raw.github.com/groonga/groonga/master/data/travis/setup.sh | sh
+
+if ! pkg-config --exists groonga; then
+ sudo apt-get install -qq -y libgroonga-dev
+fi
diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/version b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/version
new file mode 100644
index 00000000000..ece61c60124
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/version
@@ -0,0 +1 @@
+1.0.6 \ No newline at end of file
diff --git a/storage/mroonga/vendor/groonga/version-gen.sh b/storage/mroonga/vendor/groonga/version-gen.sh
new file mode 100755
index 00000000000..c56cb9e0d0d
--- /dev/null
+++ b/storage/mroonga/vendor/groonga/version-gen.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+case "$0" in
+ */*)
+ cd `dirname $0`
+ ;;
+esac
+
+GRN_VERSION_SH=version.sh
+
+if test -f version
+then
+ GRN_VN=`cat version`
+elif test -d .git -o -f .git
+then
+ GRN_VN=`git describe --abbrev=7 HEAD 2>/dev/null`
+ if [ $? -ne 0 ]
+ then
+ GRN_VN=`cat base_version`
+ fi
+fi
+
+GRN_VN=`expr "$GRN_VN" : v*'\(.*\)'`
+
+if test -r $GRN_VERSION_SH
+then
+ GRN_VN_OLD=`sed -e 's/^GRN_VERSION=//' <$GRN_VERSION_SH`
+else
+ GRN_VN_OLD=unset
+fi
+
+if test "$GRN_VN_OLD" != "$GRN_VN"
+then
+ echo "GRN_VERSION=$GRN_VN" >$GRN_VERSION_SH
+fi
diff --git a/storage/mroonga/version b/storage/mroonga/version
new file mode 100644
index 00000000000..b0372476047
--- /dev/null
+++ b/storage/mroonga/version
@@ -0,0 +1 @@
+4.06 \ No newline at end of file
diff --git a/storage/mroonga/version_in_hex b/storage/mroonga/version_in_hex
new file mode 100644
index 00000000000..6f503be55dd
--- /dev/null
+++ b/storage/mroonga/version_in_hex
@@ -0,0 +1 @@
+0x0406 \ No newline at end of file
diff --git a/storage/mroonga/version_major b/storage/mroonga/version_major
new file mode 100644
index 00000000000..bf0d87ab1b2
--- /dev/null
+++ b/storage/mroonga/version_major
@@ -0,0 +1 @@
+4 \ No newline at end of file
diff --git a/storage/mroonga/version_micro b/storage/mroonga/version_micro
new file mode 100644
index 00000000000..62f9457511f
--- /dev/null
+++ b/storage/mroonga/version_micro
@@ -0,0 +1 @@
+6 \ No newline at end of file
diff --git a/storage/mroonga/version_minor b/storage/mroonga/version_minor
new file mode 100644
index 00000000000..c227083464f
--- /dev/null
+++ b/storage/mroonga/version_minor
@@ -0,0 +1 @@
+0 \ No newline at end of file
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 439aa85b09d..2c47aae5843 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -21,9 +21,9 @@
#endif
#define MYSQL_SERVER 1
+#include "sql_plugin.h"
#include "sql_priv.h"
#include "key.h" // key_copy
-#include "sql_plugin.h"
#include <m_ctype.h>
#include <my_bit.h>
#include "ha_myisam.h"
diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc
index 3c151818457..bb82e57427a 100644
--- a/storage/myisammrg/ha_myisammrg.cc
+++ b/storage/myisammrg/ha_myisammrg.cc
@@ -90,12 +90,12 @@
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "sql_priv.h"
#include "unireg.h"
#include "sql_cache.h" // query_cache_*
#include "sql_show.h" // append_identifier
#include "sql_table.h" // build_table_filename
-#include <mysql/plugin.h>
#include <m_ctype.h>
#include "../myisam/ha_myisam.h"
#include "ha_myisammrg.h"
diff --git a/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff b/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff
new file mode 100644
index 00000000000..c21211560e9
--- /dev/null
+++ b/storage/myisammrg/mysql-test/storage_engine/alter_table_online.rdiff
@@ -0,0 +1,44 @@
+--- suite/storage_engine/alter_table_online.result 2014-09-25 12:15:42.000000000 +0400
++++ suite/storage_engine/alter_table_online.reject 2014-11-17 20:25:16.000000000 +0400
+@@ -9,20 +9,35 @@
+ CREATE TEMPORARY TABLE t1 (a <INT_COLUMN>, b <CHAR_COLUMN>) ENGINE=<STORAGE_ENGINE> <CUSTOM_TABLE_OPTIONS>;
+ INSERT INTO t1 (a,b) VALUES (1,'a'),(2,'b'),(3,'c');
+ ALTER ONLINE TABLE t1 MODIFY b <INT_COLUMN> DEFAULT 5;
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
++# ------------ UNEXPECTED RESULT ------------
++# The statement|command succeeded unexpectedly.
++# Functionality or the mix could be unsupported|malfunctioning, or the problem was caused by previous errors.
++# You can change the engine code, or create an rdiff, or disable the test by adding it to disabled.def.
++# Further in this test, the message might sometimes be suppressed; a part of the test might be skipped.
++# Also, this problem may cause a chain effect (more errors of different kinds in the test).
++# -------------------------------------------
+ ALTER ONLINE TABLE t1 CHANGE b new_name <INT_COLUMN>;
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
+ ALTER ONLINE TABLE t1 COMMENT 'new comment';
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
+ ALTER ONLINE TABLE t1 RENAME TO t2;
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
+ DROP TABLE t1;
++ERROR 42S02: Unknown table 't1'
+ CREATE TABLE t1 (a <INT_COLUMN>, b <INT_COLUMN>, c <CHAR_COLUMN>) ENGINE=<STORAGE_ENGINE> <CUSTOM_TABLE_OPTIONS>;
+ INSERT INTO t1 (a,b,c) VALUES (1,100,'a'),(2,200,'b'),(3,300,'c');
+ ALTER ONLINE TABLE t1 DROP COLUMN b, ADD b <INT_COLUMN>;
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
++# ------------ UNEXPECTED RESULT ------------
++# The statement|command succeeded unexpectedly.
++# Functionality or the mix could be unsupported|malfunctioning, or the problem was caused by previous errors.
++# You can change the engine code, or create an rdiff, or disable the test by adding it to disabled.def.
++# Further in this test, the message might sometimes be suppressed; a part of the test might be skipped.
++# Also, this problem may cause a chain effect (more errors of different kinds in the test).
++# -------------------------------------------
+ ALTER ONLINE TABLE t1 MODIFY b BIGINT <CUSTOM_COL_OPTIONS>;
+-ERROR HY000: Can't execute the given 'ALTER' command as online
++# ERROR: Statement succeeded (expected results: ER_CANT_DO_ONLINE)
+ ALTER ONLINE TABLE t1 ENGINE=MEMORY;
+ ERROR HY000: Can't execute the given 'ALTER' command as online
+ DROP TABLE t1;
diff --git a/storage/myisammrg/mysql-test/storage_engine/disabled.def b/storage/myisammrg/mysql-test/storage_engine/disabled.def
deleted file mode 100644
index 86b96c2ba2b..00000000000
--- a/storage/myisammrg/mysql-test/storage_engine/disabled.def
+++ /dev/null
@@ -1,2 +0,0 @@
-alter_table_online : MDEV-5266 (Temporary MERGE table with temporary underlying is broken by ALTER)
-
diff --git a/storage/oqgraph/ha_oqgraph.cc b/storage/oqgraph/ha_oqgraph.cc
index 6294b0dc35b..f4a00c2dd14 100644
--- a/storage/oqgraph/ha_oqgraph.cc
+++ b/storage/oqgraph/ha_oqgraph.cc
@@ -26,6 +26,8 @@
#pragma implementation // gcc: Class implementation
#endif
+#include <my_config.h>
+
#define MYSQL_SERVER // to have THD
#include <mysql/plugin.h>
#include "sql_class.h"
@@ -858,7 +860,7 @@ static int parse_latch_string_to_legacy_int(const String& value, int &latch)
unsigned long int v = strtoul( latchValue.c_ptr_safe(), &eptr, 10);
if (!*eptr) {
// we had an unsigned number; remember 0 is valid too ('vertices' aka 'no_search'))
- if (v >= 0 && v < oqgraph::NUM_SEARCH_OP) {
+ if (v < oqgraph::NUM_SEARCH_OP) {
latch = v;
return true;
}
@@ -1068,7 +1070,7 @@ int ha_oqgraph::rnd_init(bool scan)
int ha_oqgraph::rnd_next(byte *buf)
{
int res;
- open_query::row row = {};
+ open_query::row row = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
if (!(res= graph->fetch_row(row)))
res= fill_record(buf, row);
diff --git a/storage/oqgraph/oqgraph_thunk.cc b/storage/oqgraph/oqgraph_thunk.cc
index e929ca3f5b0..0e7b1f2b8ed 100644
--- a/storage/oqgraph/oqgraph_thunk.cc
+++ b/storage/oqgraph/oqgraph_thunk.cc
@@ -22,17 +22,18 @@
======================================================================
*/
+#include <my_config.h>
#include "oqgraph_thunk.h"
#include <boost/tuple/tuple.hpp>
#define MYSQL_SERVER
-#include "mysql_version.h"
+#include <my_global.h>
+#include "unireg.h"
#include "sql_base.h"
#include "table.h"
#include "field.h"
#include "key.h"
-#include "unireg.h"
#if MYSQL_VERSION_ID < 100000
// Allow compatibility with build for 5.5.32
diff --git a/storage/sequence/sequence.cc b/storage/sequence/sequence.cc
index 57a558465a2..970ee7ca2f7 100644
--- a/storage/sequence/sequence.cc
+++ b/storage/sequence/sequence.cc
@@ -20,6 +20,7 @@
a engine that auto-creates tables with rows filled with sequential values
*/
+#include <my_config.h>
#include <ctype.h>
#include <mysql_version.h>
#include <handler.h>
diff --git a/storage/sphinx/ha_sphinx.cc b/storage/sphinx/ha_sphinx.cc
index 8a46167c92a..a54930ec331 100644
--- a/storage/sphinx/ha_sphinx.cc
+++ b/storage/sphinx/ha_sphinx.cc
@@ -1,5 +1,5 @@
//
-// $Id: ha_sphinx.cc 4761 2014-07-03 07:24:02Z deogar $
+// $Id: ha_sphinx.cc 4842 2014-11-12 21:03:06Z deogar $
//
//
@@ -153,7 +153,7 @@ void sphUnalignedWrite ( void * pPtr, const T & tVal )
#define SPHINXSE_MAX_ALLOC (16*1024*1024)
#define SPHINXSE_MAX_KEYWORDSTATS 4096
-#define SPHINXSE_VERSION "2.1.9-release"
+#define SPHINXSE_VERSION "2.2.6-release"
// FIXME? the following is cut-n-paste from sphinx.h and searchd.cpp
// cut-n-paste is somewhat simpler that adding dependencies however..
@@ -425,7 +425,7 @@ public:
};
/// thread local storage
-struct CSphSEThreadData
+struct CSphSEThreadTable
{
static const int MAX_QUERY_LEN = 262144; // 256k should be enough, right?
@@ -447,7 +447,10 @@ struct CSphSEThreadData
longlong m_iCondId; ///< value acquired from id=value condition pushdown
bool m_bCondDone; ///< index_read() is now over
- CSphSEThreadData ()
+ const ha_sphinx * m_pHandler;
+ CSphSEThreadTable * m_pTableNext;
+
+ CSphSEThreadTable ( const ha_sphinx * pHandler )
: m_bStats ( false )
, m_bQuery ( false )
, m_pQueryCharset ( NULL )
@@ -455,9 +458,34 @@ struct CSphSEThreadData
, m_bCondId ( false )
, m_iCondId ( 0 )
, m_bCondDone ( false )
+ , m_pHandler ( pHandler )
+ , m_pTableNext ( NULL )
{}
};
+
+struct CSphTLS
+{
+ CSphSEThreadTable * m_pHeadTable;
+
+ explicit CSphTLS ( const ha_sphinx * pHandler )
+ {
+ m_pHeadTable = new CSphSEThreadTable ( pHandler );
+ }
+
+ ~CSphTLS()
+ {
+ CSphSEThreadTable * pCur = m_pHeadTable;
+ while ( pCur )
+ {
+ CSphSEThreadTable * pNext = pCur->m_pTableNext;
+ SafeDelete ( pCur );
+ pCur = pNext;
+ }
+ }
+};
+
+
/// filter types
enum ESphFilter
{
@@ -737,7 +765,7 @@ static int sphinx_close_connection ( handlerton * hton, THD * thd )
// deallocate common handler data
SPH_ENTER_FUNC();
void ** tmp = thd_ha_data ( thd, hton );
- CSphSEThreadData * pTls = (CSphSEThreadData*) (*tmp);
+ CSphTLS * pTls = (CSphTLS *) (*tmp);
SafeDelete ( pTls );
*tmp = NULL;
SPH_RET(0);
@@ -773,7 +801,7 @@ static int sphinx_close_connection ( THD * thd )
{
// deallocate common handler data
SPH_ENTER_FUNC();
- CSphSEThreadData * pTls = (CSphSEThreadData*) thd->ha_data[sphinx_hton.slot];
+ CSphTLS * pTls = (CSphTLS *) thd->ha_data[sphinx_hton.slot];
SafeDelete ( pTls );
thd->ha_data[sphinx_hton.slot] = NULL;
SPH_RET(0);
@@ -811,7 +839,7 @@ bool sphinx_show_status ( THD * thd )
#if MYSQL_VERSION_ID>50100
// 5.1.x style stats
- CSphSEThreadData * pTls = (CSphSEThreadData*) ( *thd_ha_data ( thd, hton ) );
+ CSphTLS * pTls = (CSphTLS*) ( *thd_ha_data ( thd, hton ) );
#define LOC_STATS(_key,_keylen,_val,_vallen) \
stat_print ( thd, sphinx_hton_name, strlen(sphinx_hton_name), _key, _keylen, _val, _vallen );
@@ -825,7 +853,7 @@ bool sphinx_show_status ( THD * thd )
MYF(0) );
SPH_RET(TRUE);
}
- CSphSEThreadData * pTls = (CSphSEThreadData*) thd->ha_data[sphinx_hton.slot];
+ CSphTLS * pTls = (CSphTLS*) thd->ha_data[sphinx_hton.slot];
field_list.push_back ( new Item_empty_string ( "Type", 10 ) );
field_list.push_back ( new Item_empty_string ( "Name", FN_REFLEN ) );
@@ -845,9 +873,9 @@ bool sphinx_show_status ( THD * thd )
// show query stats
- if ( pTls && pTls->m_bStats )
+ if ( pTls && pTls->m_pHeadTable && pTls->m_pHeadTable->m_bStats )
{
- const CSphSEStats * pStats = &pTls->m_tStats;
+ const CSphSEStats * pStats = &pTls->m_pHeadTable->m_tStats;
buf1len = my_snprintf ( buf1, sizeof(buf1),
"total: %d, total found: %d, time: %d, words: %d",
pStats->m_iMatchesTotal, pStats->m_iMatchesFound, pStats->m_iQueryMsec, pStats->m_iWords );
@@ -868,10 +896,10 @@ bool sphinx_show_status ( THD * thd )
int iWord = buf2len;
String sBuf3;
- if ( pTls->m_pQueryCharset )
+ if ( pTls->m_pHeadTable->m_pQueryCharset )
{
uint iErrors;
- sBuf3.copy ( buf2, buf2len, pTls->m_pQueryCharset, system_charset_info, &iErrors );
+ sBuf3.copy ( buf2, buf2len, pTls->m_pHeadTable->m_pQueryCharset, system_charset_info, &iErrors );
sWord = sBuf3.c_ptr();
iWord = sBuf3.length();
}
@@ -881,13 +909,13 @@ bool sphinx_show_status ( THD * thd )
}
// show last error or warning (either in addition to stats, or on their own)
- if ( pTls && pTls->m_tStats.m_sLastMessage && pTls->m_tStats.m_sLastMessage[0] )
+ if ( pTls && pTls->m_pHeadTable && pTls->m_pHeadTable->m_tStats.m_sLastMessage && pTls->m_pHeadTable->m_tStats.m_sLastMessage[0] )
{
- const char * sMessageType = pTls->m_tStats.m_bLastError ? "error" : "warning";
+ const char * sMessageType = pTls->m_pHeadTable->m_tStats.m_bLastError ? "error" : "warning";
LOC_STATS (
sMessageType, strlen ( sMessageType ),
- pTls->m_tStats.m_sLastMessage, strlen ( pTls->m_tStats.m_sLastMessage ) );
+ pTls->m_pHeadTable->m_tStats.m_sLastMessage, strlen ( pTls->m_pHeadTable->m_tStats.m_sLastMessage ) );
} else
{
@@ -1272,7 +1300,7 @@ CSphSEQuery::CSphSEQuery ( const char * sQuery, int iLength, const char * sIndex
, m_fGeoLatitude ( 0.0f )
, m_fGeoLongitude ( 0.0f )
, m_sComment ( "" )
- , m_sSelect ( "" )
+ , m_sSelect ( "*" )
, m_pBuf ( NULL )
, m_pCur ( NULL )
@@ -2073,13 +2101,7 @@ int ha_sphinx::open ( const char * name, int, uint )
thr_lock_data_init ( &m_pShare->m_tLock, &m_tLock, NULL );
#if MYSQL_VERSION_ID>50100
- void **tmp= thd_ha_data(table->in_use, ht);
- if (*tmp)
- {
- CSphSEThreadData* pTls = (CSphSEThreadData*) *tmp;
- SafeDelete(pTls);
- *tmp= NULL;
- }
+ *thd_ha_data ( table->in_use, ht ) = NULL;
#else
table->in_use->ha_data [ sphinx_hton.slot ] = NULL;
#endif
@@ -2249,29 +2271,29 @@ int ha_sphinx::close()
int ha_sphinx::HandleMysqlError ( MYSQL * pConn, int iErrCode )
{
- CSphSEThreadData * pTls = GetTls ();
- if ( pTls )
+ CSphSEThreadTable * pTable = GetTls ();
+ if ( pTable )
{
- strncpy ( pTls->m_tStats.m_sLastMessage, mysql_error ( pConn ), sizeof ( pTls->m_tStats.m_sLastMessage ) );
- pTls->m_tStats.m_bLastError = true;
+ strncpy ( pTable->m_tStats.m_sLastMessage, mysql_error ( pConn ), sizeof ( pTable->m_tStats.m_sLastMessage ) );
+ pTable->m_tStats.m_bLastError = true;
}
mysql_close ( pConn );
- my_error ( iErrCode, MYF(0), pTls->m_tStats.m_sLastMessage );
+ my_error ( iErrCode, MYF(0), pTable->m_tStats.m_sLastMessage );
return -1;
}
int ha_sphinx::extra ( enum ha_extra_function op )
{
- CSphSEThreadData * pTls = GetTls();
- if ( pTls )
+ CSphSEThreadTable * pTable = GetTls();
+ if ( pTable )
{
if ( op==HA_EXTRA_WRITE_CAN_REPLACE )
- pTls->m_bReplace = true;
+ pTable->m_bReplace = true;
else if ( op==HA_EXTRA_WRITE_CANNOT_REPLACE )
- pTls->m_bReplace = false;
+ pTable->m_bReplace = false;
}
return 0;
}
@@ -2292,8 +2314,8 @@ int ha_sphinx::write_row ( byte * )
sQuery.length ( 0 );
sValue.length ( 0 );
- CSphSEThreadData * pTls = GetTls ();
- sQuery.append ( pTls && pTls->m_bReplace ? "REPLACE INTO " : "INSERT INTO " );
+ CSphSEThreadTable * pTable = GetTls ();
+ sQuery.append ( pTable && pTable->m_bReplace ? "REPLACE INTO " : "INSERT INTO " );
sQuery.append ( m_pShare->m_sIndex );
sQuery.append ( " (" );
@@ -2438,9 +2460,9 @@ int ha_sphinx::index_init ( uint keynr, bool )
SPH_ENTER_METHOD();
active_index = keynr;
- CSphSEThreadData * pTls = GetTls();
- if ( pTls )
- pTls->m_bCondDone = false;
+ CSphSEThreadTable * pTable = GetTls();
+ if ( pTable )
+ pTable->m_bCondDone = false;
SPH_RET(0);
}
@@ -2521,11 +2543,11 @@ bool ha_sphinx::UnpackSchema ()
if ( uStatus!=SEARCHD_OK )
{
sMessage = UnpackString ();
- CSphSEThreadData * pTls = GetTls ();
- if ( pTls )
+ CSphSEThreadTable * pTable = GetTls ();
+ if ( pTable )
{
- strncpy ( pTls->m_tStats.m_sLastMessage, sMessage, sizeof(pTls->m_tStats.m_sLastMessage) );
- pTls->m_tStats.m_bLastError = ( uStatus==SEARCHD_ERROR );
+ strncpy ( pTable->m_tStats.m_sLastMessage, sMessage, sizeof(pTable->m_tStats.m_sLastMessage) );
+ pTable->m_tStats.m_bLastError = ( uStatus==SEARCHD_ERROR );
}
if ( uStatus==SEARCHD_ERROR )
@@ -2703,8 +2725,8 @@ const Item * ha_sphinx::cond_push ( const Item *cond )
break;
// get my tls
- CSphSEThreadData * pTls = GetTls ();
- if ( !pTls )
+ CSphSEThreadTable * pTable = GetTls ();
+ if ( !pTable )
break;
Item ** args = condf->arguments();
@@ -2720,10 +2742,10 @@ const Item * ha_sphinx::cond_push ( const Item *cond )
// copy the query, and let know that we intercepted this condition
String *pString= args[1]->val_str(NULL);
- pTls->m_bQuery = true;
- strncpy ( pTls->m_sQuery, pString->c_ptr(), sizeof(pTls->m_sQuery) );
- pTls->m_sQuery[sizeof(pTls->m_sQuery)-1] = '\0';
- pTls->m_pQueryCharset = pString->charset();
+ pTable->m_bQuery = true;
+ strncpy ( pTable->m_sQuery, pString->c_ptr(), sizeof(pTable->m_sQuery) );
+ pTable->m_sQuery[sizeof(pTable->m_sQuery)-1] = '\0';
+ pTable->m_pQueryCharset = pString->charset();
} else
{
@@ -2736,8 +2758,8 @@ const Item * ha_sphinx::cond_push ( const Item *cond )
break;
Item_int * pVal = (Item_int *) args[1];
- pTls->m_iCondId = pVal->val_int();
- pTls->m_bCondId = true;
+ pTable->m_iCondId = pVal->val_int();
+ pTable->m_bCondId = true;
}
// we intercepted this condition
@@ -2752,29 +2774,47 @@ const Item * ha_sphinx::cond_push ( const Item *cond )
/// condition popup
void ha_sphinx::cond_pop ()
{
- CSphSEThreadData * pTls = GetTls ();
- if ( pTls )
- pTls->m_bQuery = false;
+ CSphSEThreadTable * pTable = GetTls ();
+ if ( pTable )
+ pTable->m_bQuery = false;
}
/// get TLS (maybe allocate it, too)
-CSphSEThreadData * ha_sphinx::GetTls()
+CSphSEThreadTable * ha_sphinx::GetTls()
{
+ SPH_ENTER_METHOD()
// where do we store that pointer in today's version?
- CSphSEThreadData ** ppTls;
+ CSphTLS ** ppTls;
#if MYSQL_VERSION_ID>50100
- ppTls = (CSphSEThreadData**) thd_ha_data ( table->in_use, ht );
+ ppTls = (CSphTLS**) thd_ha_data ( table->in_use, ht );
#else
- ppTls = (CSphSEThreadData**) &current_thd->ha_data[sphinx_hton.slot];
+ ppTls = (CSphTLS**) &current_thd->ha_data[sphinx_hton.slot];
#endif // >50100
+ CSphSEThreadTable * pTable = NULL;
// allocate if needed
if ( !*ppTls )
- *ppTls = new CSphSEThreadData ();
+ {
+ *ppTls = new CSphTLS ( this );
+ pTable = (*ppTls)->m_pHeadTable;
+ } else
+ {
+ pTable = (*ppTls)->m_pHeadTable;
+ }
+
+ while ( pTable && pTable->m_pHandler!=this )
+ pTable = pTable->m_pTableNext;
+
+ if ( !pTable )
+ {
+ pTable = new CSphSEThreadTable ( this );
+ pTable->m_pTableNext = (*ppTls)->m_pHeadTable;
+ (*ppTls)->m_pHeadTable = pTable;
+ }
// errors will be handled by caller
- return *ppTls;
+ return pTable;
}
@@ -2787,26 +2827,26 @@ int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_
char sError[256];
// set new data for thd->ha_data, it is used in show_status
- CSphSEThreadData * pTls = GetTls();
- if ( !pTls )
+ CSphSEThreadTable * pTable = GetTls();
+ if ( !pTable )
{
my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: TLS malloc() failed" );
SPH_RET ( HA_ERR_END_OF_FILE );
}
- pTls->m_tStats.Reset ();
+ pTable->m_tStats.Reset ();
// sphinxql table, just return the key once
if ( m_pShare->m_bSphinxQL )
{
// over and out
- if ( pTls->m_bCondDone )
+ if ( pTable->m_bCondDone )
SPH_RET ( HA_ERR_END_OF_FILE );
// return a value from pushdown, if any
- if ( pTls->m_bCondId )
+ if ( pTable->m_bCondId )
{
- table->field[0]->store ( pTls->m_iCondId, 1 );
- pTls->m_bCondDone = true;
+ table->field[0]->store ( pTable->m_iCondId, 1 );
+ pTable->m_bCondDone = true;
SPH_RET(0);
}
@@ -2823,22 +2863,22 @@ int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_
}
table->field[0]->store ( iRef, 1 );
- pTls->m_bCondDone = true;
+ pTable->m_bCondDone = true;
SPH_RET(0);
}
// parse query
- if ( pTls->m_bQuery )
+ if ( pTable->m_bQuery )
{
// we have a query from condition pushdown
- m_pCurrentKey = (const byte *) pTls->m_sQuery;
- m_iCurrentKeyLen = strlen(pTls->m_sQuery);
+ m_pCurrentKey = (const byte *) pTable->m_sQuery;
+ m_iCurrentKeyLen = strlen(pTable->m_sQuery);
} else
{
// just use the key (might be truncated)
m_pCurrentKey = key+HA_KEY_BLOB_LENGTH;
m_iCurrentKeyLen = uint2korr(key); // or maybe key_len?
- pTls->m_pQueryCharset = m_pShare ? m_pShare->m_pTableQueryCharset : NULL;
+ pTable->m_pQueryCharset = m_pShare ? m_pShare->m_pTableQueryCharset : NULL;
}
CSphSEQuery q ( (const char*)m_pCurrentKey, m_iCurrentKeyLen, m_pShare->m_sIndex );
@@ -2912,7 +2952,7 @@ int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_
}
// we'll have a message, at least
- pTls->m_bStats = true;
+ pTable->m_bStats = true;
// parse reply
m_iCurrentPos = 0;
@@ -2930,15 +2970,15 @@ int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_
SPH_RET ( HA_ERR_END_OF_FILE );
}
- strncpy ( pTls->m_tStats.m_sLastMessage, sMessage, sizeof(pTls->m_tStats.m_sLastMessage) );
+ strncpy ( pTable->m_tStats.m_sLastMessage, sMessage, sizeof(pTable->m_tStats.m_sLastMessage) );
SafeDeleteArray ( sMessage );
if ( uRespStatus!=SEARCHD_WARNING )
{
- my_snprintf ( sError, sizeof(sError), "searchd error: %s", pTls->m_tStats.m_sLastMessage );
+ my_snprintf ( sError, sizeof(sError), "searchd error: %s", pTable->m_tStats.m_sLastMessage );
my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError );
- pTls->m_tStats.m_bLastError = true;
+ pTable->m_tStats.m_bLastError = true;
SPH_RET ( HA_ERR_END_OF_FILE );
}
}
@@ -2946,7 +2986,7 @@ int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_
if ( !UnpackSchema () )
SPH_RET ( HA_ERR_END_OF_FILE );
- if ( !UnpackStats ( &pTls->m_tStats ) )
+ if ( !UnpackStats ( &pTable->m_tStats ) )
{
my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: UnpackStats() failed" );
SPH_RET ( HA_ERR_END_OF_FILE );
@@ -3241,9 +3281,9 @@ void ha_sphinx::info ( uint )
int ha_sphinx::reset ()
{
SPH_ENTER_METHOD();
- CSphSEThreadData * pTls = GetTls ();
- if ( pTls )
- pTls->m_bQuery = false;
+ CSphSEThreadTable * pTable = GetTls ();
+ if ( pTable )
+ pTable->m_bQuery = false;
SPH_RET(0);
}
@@ -3450,7 +3490,7 @@ int ha_sphinx::create ( const char * name, TABLE * table, HA_CREATE_INFO * )
if ( sError[0] )
{
my_error ( ER_CANT_CREATE_TABLE, MYF(0),
- table->s->db.str, table->s->table_name, sError );
+ table->s->db.str, table->s->table_name, sError );
SPH_RET(-1);
}
@@ -3468,15 +3508,15 @@ CSphSEStats * sphinx_get_stats ( THD * thd, SHOW_VAR * out )
#if MYSQL_VERSION_ID>50100
if ( sphinx_hton_ptr )
{
- CSphSEThreadData *pTls = (CSphSEThreadData *) *thd_ha_data ( thd, sphinx_hton_ptr );
+ CSphTLS * pTls = (CSphTLS *) *thd_ha_data ( thd, sphinx_hton_ptr );
- if ( pTls && pTls->m_bStats )
- return &pTls->m_tStats;
+ if ( pTls && pTls->m_pHeadTable && pTls->m_pHeadTable->m_bStats )
+ return &pTls->m_pHeadTable->m_tStats;
}
#else
- CSphSEThreadData *pTls = (CSphSEThreadData *) thd->ha_data[sphinx_hton.slot];
- if ( pTls && pTls->m_bStats )
- return &pTls->m_tStats;
+ CSphTLS * pTls = (CSphTLS *) thd->ha_data[sphinx_hton.slot];
+ if ( pTls && pTls->m_pHeadTable && pTls->m_pHeadTable->m_bStats )
+ return &pTls->m_pHeadTable->m_tStats;
#endif
out->type = SHOW_CHAR;
@@ -3533,14 +3573,14 @@ int sphinx_showfunc_words ( THD * thd, SHOW_VAR * out, char * sBuffer )
#if MYSQL_VERSION_ID>50100
if ( sphinx_hton_ptr )
{
- CSphSEThreadData * pTls = (CSphSEThreadData *) *thd_ha_data ( thd, sphinx_hton_ptr );
+ CSphTLS * pTls = (CSphTLS *) *thd_ha_data ( thd, sphinx_hton_ptr );
#else
{
- CSphSEThreadData * pTls = (CSphSEThreadData *) thd->ha_data[sphinx_hton.slot];
+ CSphTLS * pTls = (CSphTLS *) thd->ha_data[sphinx_hton.slot];
#endif
- if ( pTls && pTls->m_bStats )
+ if ( pTls && pTls->m_pHeadTable && pTls->m_pHeadTable->m_bStats )
{
- CSphSEStats * pStats = &pTls->m_tStats;
+ CSphSEStats * pStats = &pTls->m_pHeadTable->m_tStats;
if ( pStats && pStats->m_iWords )
{
uint uBuffLen = 0;
@@ -3562,7 +3602,7 @@ int sphinx_showfunc_words ( THD * thd, SHOW_VAR * out, char * sBuffer )
// trim last space
sBuffer [ --uBuffLen ] = 0;
- if ( pTls->m_pQueryCharset )
+ if ( pTls->m_pHeadTable->m_pQueryCharset )
{
// String::c_ptr() will nul-terminate the buffer.
//
@@ -3570,7 +3610,7 @@ int sphinx_showfunc_words ( THD * thd, SHOW_VAR * out, char * sBuffer )
String sConvert;
uint iErrors;
- sConvert.copy ( sBuffer, uBuffLen, pTls->m_pQueryCharset, system_charset_info, &iErrors );
+ sConvert.copy ( sBuffer, uBuffLen, pTls->m_pHeadTable->m_pQueryCharset, system_charset_info, &iErrors );
memcpy ( sBuffer, sConvert.c_ptr(), sConvert.length() + 1 );
}
}
@@ -3626,16 +3666,16 @@ maria_declare_plugin(sphinx)
PLUGIN_LICENSE_GPL,
sphinx_init_func, // Plugin Init
sphinx_done_func, // Plugin Deinit
- 0x0200, // 2.0
+ 0x0202, // 2.2
sphinx_status_vars,
NULL,
- SPHINXSE_VERSION, // string version
- MariaDB_PLUGIN_MATURITY_GAMMA
+ SPHINXSE_VERSION, // string version
+MariaDB_PLUGIN_MATURITY_GAMMA
}
maria_declare_plugin_end;
#endif // >50100
//
-// $Id: ha_sphinx.cc 4761 2014-07-03 07:24:02Z deogar $
+// $Id: ha_sphinx.cc 4842 2014-11-12 21:03:06Z deogar $
//
diff --git a/storage/sphinx/ha_sphinx.h b/storage/sphinx/ha_sphinx.h
index c3c35f19b89..c310deb7060 100644
--- a/storage/sphinx/ha_sphinx.h
+++ b/storage/sphinx/ha_sphinx.h
@@ -1,5 +1,5 @@
//
-// $Id: ha_sphinx.h 3866 2013-05-22 11:54:20Z kevg $
+// $Id: ha_sphinx.h 4818 2014-09-24 08:53:38Z tomat $
//
#ifdef USE_PRAGMA_INTERFACE
@@ -27,7 +27,7 @@ struct CSphReqQuery;
struct CSphSEShare;
struct CSphSEAttr;
struct CSphSEStats;
-struct CSphSEThreadData;
+struct CSphSEThreadTable;
/// Sphinx SE handler class
class ha_sphinx : public handler
@@ -156,7 +156,7 @@ private:
bool UnpackStats ( CSphSEStats * pStats );
bool CheckResponcePtr ( int iLen );
- CSphSEThreadData * GetTls ();
+ CSphSEThreadTable * GetTls ();
};
@@ -171,5 +171,5 @@ int sphinx_showfunc_word_count ( THD *, SHOW_VAR *, char * );
int sphinx_showfunc_words ( THD *, SHOW_VAR *, char * );
//
-// $Id: ha_sphinx.h 3866 2013-05-22 11:54:20Z kevg $
+// $Id: ha_sphinx.h 4818 2014-09-24 08:53:38Z tomat $
//
diff --git a/storage/sphinx/snippets_udf.cc b/storage/sphinx/snippets_udf.cc
index bfb9beae7b5..2a290bd8de9 100644
--- a/storage/sphinx/snippets_udf.cc
+++ b/storage/sphinx/snippets_udf.cc
@@ -1,5 +1,5 @@
//
-// $Id: snippets_udf.cc 4505 2014-01-22 15:16:21Z deogar $
+// $Id: snippets_udf.cc 4522 2014-01-30 11:00:18Z tomat $
//
//
@@ -13,6 +13,7 @@
// did not, you can find it at http://www.gnu.org/
//
+#include <my_config.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
@@ -821,5 +822,5 @@ void sphinx_snippets_deinit ( UDF_INIT * pUDF )
}
//
-// $Id: snippets_udf.cc 4505 2014-01-22 15:16:21Z deogar $
+// $Id: snippets_udf.cc 4522 2014-01-30 11:00:18Z tomat $
//
diff --git a/storage/spider/ha_spider.cc b/storage/spider/ha_spider.cc
index 03fa6440d43..2944e750b88 100644
--- a/storage/spider/ha_spider.cc
+++ b/storage/spider/ha_spider.cc
@@ -18,6 +18,7 @@
#endif
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/hs_client/config.cpp b/storage/spider/hs_client/config.cpp
index 8f6447829e1..b546230ca03 100644
--- a/storage/spider/hs_client/config.cpp
+++ b/storage/spider/hs_client/config.cpp
@@ -7,6 +7,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/hs_client/escape.cpp b/storage/spider/hs_client/escape.cpp
index d382dfbc07e..c3194e1d111 100644
--- a/storage/spider/hs_client/escape.cpp
+++ b/storage/spider/hs_client/escape.cpp
@@ -6,6 +6,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#include "mysql_version.h"
#include "hs_compat.h"
#include "escape.hpp"
diff --git a/storage/spider/hs_client/fatal.cpp b/storage/spider/hs_client/fatal.cpp
index b26fb50f4fb..bec031153e4 100644
--- a/storage/spider/hs_client/fatal.cpp
+++ b/storage/spider/hs_client/fatal.cpp
@@ -7,6 +7,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/hs_client/hstcpcli.cpp b/storage/spider/hs_client/hstcpcli.cpp
index 6aa83e60a27..fed87803f9c 100644
--- a/storage/spider/hs_client/hstcpcli.cpp
+++ b/storage/spider/hs_client/hstcpcli.cpp
@@ -7,6 +7,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#include "mysql_version.h"
#include "hs_compat.h"
#if MYSQL_VERSION_ID < 50500
diff --git a/storage/spider/hs_client/socket.cpp b/storage/spider/hs_client/socket.cpp
index 769bd0b497c..2082d1f024e 100644
--- a/storage/spider/hs_client/socket.cpp
+++ b/storage/spider/hs_client/socket.cpp
@@ -7,6 +7,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#ifndef __WIN__
#include <sys/types.h>
#include <sys/un.h>
diff --git a/storage/spider/hs_client/string_util.cpp b/storage/spider/hs_client/string_util.cpp
index 133143165c2..9cf2f04d5b6 100644
--- a/storage/spider/hs_client/string_util.cpp
+++ b/storage/spider/hs_client/string_util.cpp
@@ -7,6 +7,7 @@
* See COPYRIGHT.txt for details.
*/
+#include <my_global.h>
#include "mysql_version.h"
#include "hs_compat.h"
#if MYSQL_VERSION_ID < 50500
diff --git a/storage/spider/mysql-test/spider/bg/suite.opt b/storage/spider/mysql-test/spider/bg/suite.opt
index 077a81334be..672a3b37d4f 100644
--- a/storage/spider/mysql-test/spider/bg/suite.opt
+++ b/storage/spider/mysql-test/spider/bg/suite.opt
@@ -1 +1 @@
---loose-innodb --skip-performance-schema
+--loose-innodb --loose-skip-performance-schema
diff --git a/storage/spider/mysql-test/spider/suite.opt b/storage/spider/mysql-test/spider/suite.opt
index 077a81334be..672a3b37d4f 100644
--- a/storage/spider/mysql-test/spider/suite.opt
+++ b/storage/spider/mysql-test/spider/suite.opt
@@ -1 +1 @@
---loose-innodb --skip-performance-schema
+--loose-innodb --loose-skip-performance-schema
diff --git a/storage/spider/spd_conn.cc b/storage/spider/spd_conn.cc
index e19222c99f6..ce786a7b697 100644
--- a/storage/spider/spd_conn.cc
+++ b/storage/spider/spd_conn.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_copy_tables.cc b/storage/spider/spd_copy_tables.cc
index 10fed696134..dae0d94d7aa 100644
--- a/storage/spider/spd_copy_tables.cc
+++ b/storage/spider/spd_copy_tables.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_db_conn.cc b/storage/spider/spd_db_conn.cc
index 64e2dc59b65..81b6fae841f 100644
--- a/storage/spider/spd_db_conn.cc
+++ b/storage/spider/spd_db_conn.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_db_handlersocket.cc b/storage/spider/spd_db_handlersocket.cc
index f7f974a0142..d1eb68679b2 100644
--- a/storage/spider/spd_db_handlersocket.cc
+++ b/storage/spider/spd_db_handlersocket.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index 81e2fc41a57..f60220ee38b 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc
index 0d8a218c5f6..0464d2b576d 100644
--- a/storage/spider/spd_db_oracle.cc
+++ b/storage/spider/spd_db_oracle.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_direct_sql.cc b/storage/spider/spd_direct_sql.cc
index 27041790d63..7149502d8f6 100644
--- a/storage/spider/spd_direct_sql.cc
+++ b/storage/spider/spd_direct_sql.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_i_s.cc b/storage/spider/spd_i_s.cc
index 49824693984..025878b6253 100644
--- a/storage/spider/spd_i_s.cc
+++ b/storage/spider/spd_i_s.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_malloc.cc b/storage/spider/spd_malloc.cc
index 4a033c1e7cf..56fb3c9ccd2 100644
--- a/storage/spider/spd_malloc.cc
+++ b/storage/spider/spd_malloc.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_param.cc b/storage/spider/spd_param.cc
index 2b1e87313d1..387d17134e5 100644
--- a/storage/spider/spd_param.cc
+++ b/storage/spider/spd_param.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_ping_table.cc b/storage/spider/spd_ping_table.cc
index d32dbec2421..8c55b0fc683 100644
--- a/storage/spider/spd_ping_table.cc
+++ b/storage/spider/spd_ping_table.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_sys_table.cc b/storage/spider/spd_sys_table.cc
index 1ff3496d83e..7b46889a135 100644
--- a/storage/spider/spd_sys_table.cc
+++ b/storage/spider/spd_sys_table.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_table.cc b/storage/spider/spd_table.cc
index f17de987366..ba845426d49 100644
--- a/storage/spider/spd_table.cc
+++ b/storage/spider/spd_table.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc
index a66fa5a7f5d..dd0cc1d3101 100644
--- a/storage/spider/spd_trx.cc
+++ b/storage/spider/spd_trx.cc
@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define MYSQL_SERVER 1
+#include <my_global.h>
#include "mysql_version.h"
#if MYSQL_VERSION_ID < 50500
#include "mysql_priv.h"
diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt
index 30b31e10c91..416f6355d32 100644
--- a/storage/tokudb/CMakeLists.txt
+++ b/storage/tokudb/CMakeLists.txt
@@ -19,7 +19,7 @@ IF(NOT LIBJEMALLOC)
ENDIF()
############################################
-SET(TOKUDB_VERSION "7.5.0")
+SET(TOKUDB_VERSION "tokudb-7.5.3")
SET(TOKUDB_DEB_FILES "usr/lib/mysql/plugin/ha_tokudb.so\netc/mysql/conf.d/tokudb.cnf\nusr/bin/tokuftdump\nusr/share/doc/mariadb-server-10.1/README-TOKUDB\nusr/share/doc/mariadb-server-10.1/README.md" PARENT_SCOPE)
SET(USE_BDB OFF CACHE BOOL "")
MARK_AS_ADVANCED(BUILDNAME)
@@ -44,7 +44,12 @@ IF(NOT DEFINED TOKUDB_VERSION)
ENDIF()
ENDIF()
IF(DEFINED TOKUDB_VERSION)
- ADD_DEFINITIONS("-DTOKUDB_VERSION=\"${TOKUDB_VERSION}\"")
+ ADD_DEFINITIONS("-DTOKUDB_VERSION=${TOKUDB_VERSION}")
+ IF (${TOKUDB_VERSION} MATCHES "^tokudb-([0-9]+)\\.([0-9]+)\\.([0-9]+.*)")
+ ADD_DEFINITIONS("-DTOKUDB_VERSION_MAJOR=${CMAKE_MATCH_1}")
+ ADD_DEFINITIONS("-DTOKUDB_VERSION_MINOR=${CMAKE_MATCH_2}")
+ ADD_DEFINITIONS("-DTOKUDB_VERSION_PATCH=${CMAKE_MATCH_3}")
+ ENDIF()
ENDIF()
IF(DEFINED TOKUDB_NOPATCH_CONFIG)
diff --git a/storage/tokudb/README.md b/storage/tokudb/README.md
index ff1773fc2b0..dc7362a5124 100644
--- a/storage/tokudb/README.md
+++ b/storage/tokudb/README.md
@@ -24,14 +24,14 @@ working MySQL or MariaDB with Tokutek patches, and with the TokuDB storage
engine, called `make.mysql.bash`. This script will download copies of the
needed source code from github and build everything.
-To build MySQL 5.5.38 with TokuDB 7.1.7:
+To build MySQL 5.5.39 with TokuDB 7.5.2:
```sh
-scripts/make.mysql.bash --mysqlbuild=mysql-5.5.38-tokudb-7.1.7-linux-x86_64
+scripts/make.mysql.bash --mysqlbuild=mysql-5.5.39-tokudb-7.5.2-linux-x86_64
```
-To build MariaDB 5.5.38 with TokuDB 7.1.7:
+To build MariaDB 5.5.39 with TokuDB 7.5.2:
```sh
-scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.38-tokudb-7.1.7-linux-x86_64
+scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.39-tokudb-7.5.2-linux-x86_64
```
Before you start, make sure you have a C++11-compatible compiler (GCC >=
diff --git a/storage/tokudb/ft-index/cmake/merge_archives_unix.cmake.in b/storage/tokudb/ft-index/cmake/merge_archives_unix.cmake.in
index 66e23a824bd..0a59e4553df 100644
--- a/storage/tokudb/ft-index/cmake/merge_archives_unix.cmake.in
+++ b/storage/tokudb/ft-index/cmake/merge_archives_unix.cmake.in
@@ -16,9 +16,7 @@
# This script merges many static libraries into
# one big library on Unix.
-SET(TARGET_LOCATION "@TARGET_LOCATION@")
SET(TARGET "@TARGET@")
-SET(STATIC_LIBS "@STATIC_LIBS@")
SET(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@")
SET(CMAKE_AR "@CMAKE_AR@")
SET(CMAKE_RANLIB "@CMAKE_RANLIB@")
@@ -30,7 +28,7 @@ MAKE_DIRECTORY(${TEMP_DIR})
# clashes) Since the lib may contain objects with the same name, we first
# list the archive contents, then uniquify the object names as we extract
# them.
-FOREACH(LIB ${STATIC_LIBS})
+FOREACH(LIB ${STATIC_LIB_FILES})
GET_FILENAME_COMPONENT(NAME_NO_EXT ${LIB} NAME_WE)
SET(TEMP_SUBDIR ${TEMP_DIR}/${NAME_NO_EXT})
MAKE_DIRECTORY(${TEMP_SUBDIR})
@@ -87,10 +85,10 @@ FOREACH(OBJ ${OBJECTS})
SET(ALL_OBJECTS ${ALL_OBJECTS} ${OBJ})
ENDFOREACH()
-FILE(TO_NATIVE_PATH ${TARGET_LOCATION} ${TARGET_LOCATION})
+FILE(TO_NATIVE_PATH ${TARGET_FILE} TARGET_FILE)
# Now pack the objects into library with ar.
EXECUTE_PROCESS(
- COMMAND ${CMAKE_AR} rcs ${TARGET_LOCATION} ${ALL_OBJECTS}
+ COMMAND ${CMAKE_AR} rcs ${TARGET_FILE} ${ALL_OBJECTS}
WORKING_DIRECTORY ${TEMP_DIR}
)
diff --git a/storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake b/storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake
index 3658a89429f..15066906831 100644
--- a/storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake
+++ b/storage/tokudb/ft-index/cmake_modules/TokuMergeLibs.cmake
@@ -27,17 +27,12 @@ MACRO(TOKU_MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
SET(OSLIBS)
FOREACH(LIB ${LIBS_TO_MERGE})
- GET_TARGET_PROPERTY(LIB_LOCATION ${LIB} LOCATION)
- GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE)
- IF(NOT LIB_LOCATION)
- # 3rd party library like libz.so. Make sure that everything
- # that links to our library links to this one as well.
- LIST(APPEND OSLIBS ${LIB})
- ELSE()
+ IF(TARGET ${LIB})
# This is a target in current project
# (can be a static or shared lib)
+ GET_TARGET_PROPERTY(LIB_TYPE ${LIB} TYPE)
IF(LIB_TYPE STREQUAL "STATIC_LIBRARY")
- SET(STATIC_LIBS ${STATIC_LIBS} ${LIB_LOCATION})
+ LIST(APPEND STATIC_LIBS ${LIB})
ADD_DEPENDENCIES(${TARGET} ${LIB})
# Extract dependend OS libraries
TOKU_GET_DEPENDEND_OS_LIBS(${LIB} LIB_OSLIBS)
@@ -46,6 +41,10 @@ MACRO(TOKU_MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
# This is a shared library our static lib depends on.
LIST(APPEND OSLIBS ${LIB})
ENDIF()
+ ELSE()
+ # 3rd party library like libz.so. Make sure that everything
+ # that links to our library links to this one as well.
+ LIST(APPEND OSLIBS ${LIB})
ENDIF()
ENDFOREACH()
IF(OSLIBS)
@@ -65,19 +64,21 @@ MACRO(TOKU_MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
# To merge libs, just pass them to lib.exe command line.
SET(LINKER_EXTRA_FLAGS "")
FOREACH(LIB ${STATIC_LIBS})
- SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} ${LIB}")
+ SET(LINKER_EXTRA_FLAGS "${LINKER_EXTRA_FLAGS} $<TARGET_FILE:${LIB}>")
ENDFOREACH()
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES STATIC_LIBRARY_FLAGS
"${LINKER_EXTRA_FLAGS}")
ELSE()
- GET_TARGET_PROPERTY(TARGET_LOCATION ${TARGET} LOCATION)
+ FOREACH(STATIC_LIB ${STATIC_LIBS})
+ LIST(APPEND STATIC_LIB_FILES $<TARGET_FILE:${STATIC_LIB}>)
+ ENDFOREACH()
IF(APPLE)
# Use OSX's libtool to merge archives (ihandles universal
# binaries properly)
ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
- COMMAND rm ${TARGET_LOCATION}
- COMMAND /usr/bin/libtool -static -o ${TARGET_LOCATION}
- ${STATIC_LIBS}
+ COMMAND rm $<TARGET_FILE:${TARGET}>
+ COMMAND /usr/bin/libtool -static -o $<TARGET_FILE:${TARGET}>
+ ${STATIC_LIB_FILES}
)
ELSE()
# Generic Unix, Cygwin or MinGW. In post-build step, call
@@ -88,11 +89,14 @@ MACRO(TOKU_MERGE_STATIC_LIBS TARGET OUTPUT_NAME LIBS_TO_MERGE)
${TOKU_CMAKE_SCRIPT_DIR}/merge_archives_unix.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
@ONLY
- )
+ )
+ STRING(REGEX REPLACE ";" "\\\;" STATIC_LIB_FILES "${STATIC_LIB_FILES}")
ADD_CUSTOM_COMMAND(TARGET ${TARGET} POST_BUILD
- COMMAND rm ${TARGET_LOCATION}
- COMMAND ${CMAKE_COMMAND} -P
- ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
+ COMMAND rm $<TARGET_FILE:${TARGET}>
+ COMMAND ${CMAKE_COMMAND}
+ -D TARGET_FILE=$<TARGET_FILE:${TARGET}>
+ -D STATIC_LIB_FILES="${STATIC_LIB_FILES}"
+ -P ${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/merge_archives_${TARGET}.cmake"
)
ENDIF()
diff --git a/storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake b/storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake
index 4b8a600f141..99629e40bdb 100644
--- a/storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake
+++ b/storage/tokudb/ft-index/cmake_modules/TokuSetupCompiler.cmake
@@ -17,15 +17,22 @@ add_c_defines(
if (NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
## on FreeBSD these types of macros actually remove functionality
add_c_defines(
- _SVID_SOURCE
+ _DEFAULT_SOURCE
_XOPEN_SOURCE=600
)
endif ()
## add TOKU_PTHREAD_DEBUG for debug builds
-set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG TOKU_PTHREAD_DEBUG=1)
-set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DRD TOKU_PTHREAD_DEBUG=1)
-set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DRD _FORTIFY_SOURCE=2)
+if (CMAKE_VERSION VERSION_LESS 3.0)
+ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG TOKU_PTHREAD_DEBUG=1)
+ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DRD TOKU_PTHREAD_DEBUG=1)
+ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DRD _FORTIFY_SOURCE=2)
+else ()
+ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
+ $<$<OR:$<CONFIG:DEBUG>,$<CONFIG:DRD>>:TOKU_PTHREAD_DEBUG=1>
+ $<$<CONFIG:DRD>:_FORTIFY_SOURCE=2>
+ )
+endif ()
## coverage
option(USE_GCOV "Use gcov for test coverage." OFF)
@@ -215,7 +222,7 @@ function(maybe_add_gcov_to_libraries)
foreach(lib ${ARGN})
add_space_separated_property(TARGET ${lib} COMPILE_FLAGS --coverage)
add_space_separated_property(TARGET ${lib} LINK_FLAGS --coverage)
- target_link_libraries(${lib} gcov)
+ target_link_libraries(${lib} LINK_PRIVATE gcov)
endforeach(lib)
endif (USE_GCOV)
endfunction(maybe_add_gcov_to_libraries)
diff --git a/storage/tokudb/ft-index/ft/bndata.cc b/storage/tokudb/ft-index/ft/bndata.cc
index a277e52aa0b..c4d522849a1 100644
--- a/storage/tokudb/ft-index/ft/bndata.cc
+++ b/storage/tokudb/ft-index/ft/bndata.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <ft/bndata.h>
#include <ft/ft-internal.h>
diff --git a/storage/tokudb/ft-index/ft/cachetable/cachetable.cc b/storage/tokudb/ft-index/ft/cachetable/cachetable.cc
index feda4abc76a..2704d0fd76c 100644
--- a/storage/tokudb/ft-index/ft/cachetable/cachetable.cc
+++ b/storage/tokudb/ft-index/ft/cachetable/cachetable.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <string.h>
#include <time.h>
#include <stdarg.h>
@@ -2514,7 +2516,7 @@ toku_cachetable_minicron_shutdown(CACHETABLE ct) {
void toku_cachetable_prepare_close(CACHETABLE ct UU()) {
extern bool toku_serialize_in_parallel;
- toku_serialize_in_parallel = true;
+ toku_drd_unsafe_set(&toku_serialize_in_parallel, true);
}
/* Requires that it all be flushed. */
diff --git a/storage/tokudb/ft-index/ft/cachetable/checkpoint.cc b/storage/tokudb/ft-index/ft/cachetable/checkpoint.cc
index 492893ddc7b..8a0ba32240e 100644
--- a/storage/tokudb/ft-index/ft/cachetable/checkpoint.cc
+++ b/storage/tokudb/ft-index/ft/cachetable/checkpoint.cc
@@ -126,6 +126,8 @@ PATENT RIGHTS GRANT:
*
*****/
+#include <config.h>
+
#include <time.h>
#include "portability/toku_portability.h"
diff --git a/storage/tokudb/ft-index/ft/cursor.cc b/storage/tokudb/ft-index/ft/cursor.cc
index 9814a49416b..b7000869336 100644
--- a/storage/tokudb/ft-index/ft/cursor.cc
+++ b/storage/tokudb/ft-index/ft/cursor.cc
@@ -86,6 +86,8 @@ PATENT RIGHTS GRANT:
under this License.
*/
+#include <config.h>
+
#include "ft/ft-internal.h"
#include "ft/cursor.h"
diff --git a/storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc b/storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc
index b8bee800f36..5c6331855a4 100644
--- a/storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc
+++ b/storage/tokudb/ft-index/ft/ft-cachetable-wrappers.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/serialize/block_table.h"
#include "ft/ft-cachetable-wrappers.h"
#include "ft/ft-flusher.h"
diff --git a/storage/tokudb/ft-index/ft/ft-flusher.cc b/storage/tokudb/ft-index/ft/ft-flusher.cc
index 4db92fa9d2b..a39092aa058 100644
--- a/storage/tokudb/ft-index/ft/ft-flusher.cc
+++ b/storage/tokudb/ft-index/ft/ft-flusher.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-cachetable-wrappers.h"
#include "ft/ft-internal.h"
@@ -600,8 +602,9 @@ handle_split_of_child(
// We never set the rightmost blocknum to be the root.
// Instead, we wait for the root to split and let promotion initialize the rightmost
// blocknum to be the first non-root leaf node on the right extreme to recieve an insert.
- invariant(ft->h->root_blocknum.b != ft->rightmost_blocknum.b);
- if (childa->blocknum.b == ft->rightmost_blocknum.b) {
+ BLOCKNUM rightmost_blocknum = toku_drd_unsafe_fetch(&ft->rightmost_blocknum);
+ invariant(ft->h->root_blocknum.b != rightmost_blocknum.b);
+ if (childa->blocknum.b == rightmost_blocknum.b) {
// The rightmost leaf (a) split into (a) and (b). We want (b) to swap pair values
// with (a), now that it is the new rightmost leaf. This keeps the rightmost blocknum
// constant, the same the way we keep the root blocknum constant.
@@ -1428,7 +1431,8 @@ ft_merge_child(
node->pivotkeys.delete_at(childnuma);
// Handle a merge of the rightmost leaf node.
- if (did_merge && childb->blocknum.b == ft->rightmost_blocknum.b) {
+ BLOCKNUM rightmost_blocknum = toku_drd_unsafe_fetch(&ft->rightmost_blocknum);
+ if (did_merge && childb->blocknum.b == rightmost_blocknum.b) {
invariant(childb->blocknum.b != ft->h->root_blocknum.b);
toku_ftnode_swap_pair_values(childa, childb);
BP_BLOCKNUM(node, childnuma) = childa->blocknum;
diff --git a/storage/tokudb/ft-index/ft/ft-hot-flusher.cc b/storage/tokudb/ft-index/ft/ft-hot-flusher.cc
index 55230e75da0..74d6109f52e 100644
--- a/storage/tokudb/ft-index/ft/ft-hot-flusher.cc
+++ b/storage/tokudb/ft-index/ft/ft-hot-flusher.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-cachetable-wrappers.h"
#include "ft/ft-flusher.h"
diff --git a/storage/tokudb/ft-index/ft/ft-ops.cc b/storage/tokudb/ft-index/ft/ft-ops.cc
index bf845d2c38d..481d80fdbe4 100644
--- a/storage/tokudb/ft-index/ft/ft-ops.cc
+++ b/storage/tokudb/ft-index/ft/ft-ops.cc
@@ -200,6 +200,8 @@ basement nodes, bulk fetch, and partial fetch:
*/
+#include <config.h>
+
#include "ft/cachetable/checkpoint.h"
#include "ft/cursor.h"
#include "ft/ft.h"
@@ -1200,7 +1202,7 @@ exit:
// We need a function to have something a drd suppression can reference
// see src/tests/drd.suppressions (unsafe_touch_clock)
static void unsafe_touch_clock(FTNODE node, int i) {
- BP_TOUCH_CLOCK(node, i);
+ toku_drd_unsafe_set(&node->bp[i].clock_count, static_cast<unsigned char>(1));
}
// Callback that states if a partial fetch of the node is necessary
@@ -1620,13 +1622,13 @@ static void inject_message_in_locked_node(
paranoid_invariant(msg_with_msn.msn().msn == node->max_msn_applied_to_node_on_disk.msn);
if (node->blocknum.b == ft->rightmost_blocknum.b) {
- if (ft->seqinsert_score < FT_SEQINSERT_SCORE_THRESHOLD) {
+ if (toku_drd_unsafe_fetch(&ft->seqinsert_score) < FT_SEQINSERT_SCORE_THRESHOLD) {
// we promoted to the rightmost leaf node and the seqinsert score has not yet saturated.
toku_sync_fetch_and_add(&ft->seqinsert_score, 1);
}
- } else if (ft->seqinsert_score != 0) {
+ } else if (toku_drd_unsafe_fetch(&ft->seqinsert_score) != 0) {
// we promoted to something other than the rightmost leaf node and the score should reset
- ft->seqinsert_score = 0;
+ toku_drd_unsafe_set(&ft->seqinsert_score, static_cast<uint32_t>(0));
}
// if we call toku_ft_flush_some_child, then that function unpins the root
@@ -1785,19 +1787,19 @@ static inline bool should_inject_in_node(seqinsert_loc loc, int height, int dept
return (height == 0 || (loc == NEITHER_EXTREME && (height <= 1 || depth >= 2)));
}
-static void ft_set_or_verify_rightmost_blocknum(FT ft, BLOCKNUM b)
+static void ft_verify_or_set_rightmost_blocknum(FT ft, BLOCKNUM b)
// Given: 'b', the _definitive_ and constant rightmost blocknum of 'ft'
{
- if (ft->rightmost_blocknum.b == RESERVED_BLOCKNUM_NULL) {
+ if (toku_drd_unsafe_fetch(&ft->rightmost_blocknum.b) == RESERVED_BLOCKNUM_NULL) {
toku_ft_lock(ft);
if (ft->rightmost_blocknum.b == RESERVED_BLOCKNUM_NULL) {
- ft->rightmost_blocknum = b;
+ toku_drd_unsafe_set(&ft->rightmost_blocknum, b);
}
toku_ft_unlock(ft);
}
// The rightmost blocknum only transitions from RESERVED_BLOCKNUM_NULL to non-null.
// If it's already set, verify that the stored value is consistent with 'b'
- invariant(ft->rightmost_blocknum.b == b.b);
+ invariant(toku_drd_unsafe_fetch(&ft->rightmost_blocknum.b) == b.b);
}
bool toku_bnc_should_promote(FT ft, NONLEAF_CHILDINFO bnc) {
@@ -1859,7 +1861,7 @@ static void push_something_in_subtree(
// otherwise. We explicitly skip the root node because then we don't have
// to worry about changing the rightmost blocknum when the root splits.
if (subtree_root->height == 0 && loc == RIGHT_EXTREME && subtree_root->blocknum.b != ft->h->root_blocknum.b) {
- ft_set_or_verify_rightmost_blocknum(ft, subtree_root->blocknum);
+ ft_verify_or_set_rightmost_blocknum(ft, subtree_root->blocknum);
}
inject_message_in_locked_node(ft, subtree_root, target_childnum, msg, flow_deltas, gc_info);
} else {
@@ -2237,7 +2239,7 @@ static int ft_leaf_get_relative_key_pos(FT ft, FTNODE leaf, const DBT *key, bool
nullptr, nullptr, nullptr
);
*target_childnum = childnum;
- if (r == 0 && !le_latest_is_del(leftmost_le)) {
+ if (r == 0 && !le_latest_is_del(target_le)) {
*nondeleted_key_found = true;
}
}
@@ -2276,20 +2278,21 @@ static int ft_maybe_insert_into_rightmost_leaf(FT ft, DBT *key, DBT *val, XIDS m
int r = -1;
uint32_t rightmost_fullhash;
- BLOCKNUM rightmost_blocknum = ft->rightmost_blocknum;
+ BLOCKNUM rightmost_blocknum;
FTNODE rightmost_leaf = nullptr;
// Don't do the optimization if our heurstic suggests that
// insertion pattern is not sequential.
- if (ft->seqinsert_score < FT_SEQINSERT_SCORE_THRESHOLD) {
+ if (toku_drd_unsafe_fetch(&ft->seqinsert_score) < FT_SEQINSERT_SCORE_THRESHOLD) {
goto cleanup;
}
// We know the seqinsert score is high enough that we should
- // attemp to directly insert into the right most leaf. Because
+ // attempt to directly insert into the rightmost leaf. Because
// the score is non-zero, the rightmost blocknum must have been
// set. See inject_message_in_locked_node(), which only increases
// the score if the target node blocknum == rightmost_blocknum
+ rightmost_blocknum = ft->rightmost_blocknum;
invariant(rightmost_blocknum.b != RESERVED_BLOCKNUM_NULL);
// Pin the rightmost leaf with a write lock.
diff --git a/storage/tokudb/ft-index/ft/ft-test-helpers.cc b/storage/tokudb/ft-index/ft/ft-test-helpers.cc
index dc0b77099fa..38be041a16d 100644
--- a/storage/tokudb/ft-index/ft/ft-test-helpers.cc
+++ b/storage/tokudb/ft-index/ft/ft-test-helpers.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-cachetable-wrappers.h"
#include "ft/ft-internal.h"
diff --git a/storage/tokudb/ft-index/ft/ft-verify.cc b/storage/tokudb/ft-index/ft/ft-verify.cc
index cbb5159e276..d9606f37604 100644
--- a/storage/tokudb/ft-index/ft/ft-verify.cc
+++ b/storage/tokudb/ft-index/ft/ft-verify.cc
@@ -97,6 +97,8 @@ PATENT RIGHTS GRANT:
* For each nonleaf node: All the messages have keys that are between the associated pivot keys ( left_pivot_key < message <= right_pivot_key)
*/
+#include <config.h>
+
#include "ft/serialize/block_table.h"
#include "ft/ft.h"
#include "ft/ft-cachetable-wrappers.h"
diff --git a/storage/tokudb/ft-index/ft/ft.cc b/storage/tokudb/ft-index/ft/ft.cc
index fd3960b64f6..bf99646351a 100644
--- a/storage/tokudb/ft-index/ft/ft.cc
+++ b/storage/tokudb/ft-index/ft/ft.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/serialize/block_table.h"
#include "ft/ft.h"
#include "ft/ft-cachetable-wrappers.h"
diff --git a/storage/tokudb/ft-index/ft/le-cursor.cc b/storage/tokudb/ft-index/ft/le-cursor.cc
index f840c021fd2..ac34b119245 100644
--- a/storage/tokudb/ft-index/ft/le-cursor.cc
+++ b/storage/tokudb/ft-index/ft/le-cursor.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2010-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-internal.h"
#include "ft/le-cursor.h"
diff --git a/storage/tokudb/ft-index/ft/loader/dbufio.cc b/storage/tokudb/ft-index/ft/loader/dbufio.cc
index c3f72e14ab1..3cf7d2412cd 100644
--- a/storage/tokudb/ft-index/ft/loader/dbufio.cc
+++ b/storage/tokudb/ft-index/ft/loader/dbufio.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2010-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <errno.h>
#include <string.h>
#include <unistd.h>
diff --git a/storage/tokudb/ft-index/ft/loader/loader.cc b/storage/tokudb/ft-index/ft/loader/loader.cc
index a6f41cd6b54..d83340f2e49 100644
--- a/storage/tokudb/ft-index/ft/loader/loader.cc
+++ b/storage/tokudb/ft-index/ft/loader/loader.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <toku_portability.h>
#include <arpa/inet.h>
diff --git a/storage/tokudb/ft-index/ft/loader/pqueue.cc b/storage/tokudb/ft-index/ft/loader/pqueue.cc
index c50664f5e45..6c28b048543 100644
--- a/storage/tokudb/ft-index/ft/loader/pqueue.cc
+++ b/storage/tokudb/ft-index/ft/loader/pqueue.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2010-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <toku_portability.h>
#include "toku_os.h"
#include "ft-internal.h"
diff --git a/storage/tokudb/ft-index/ft/logger/log_upgrade.cc b/storage/tokudb/ft-index/ft/logger/log_upgrade.cc
index 6631759fae0..0f2b3848e6e 100644
--- a/storage/tokudb/ft-index/ft/logger/log_upgrade.cc
+++ b/storage/tokudb/ft-index/ft/logger/log_upgrade.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <ft/log_header.h>
#include "log-internal.h"
diff --git a/storage/tokudb/ft-index/ft/logger/logcursor.cc b/storage/tokudb/ft-index/ft/logger/logcursor.cc
index dec3c923bc3..3402cd28122 100644
--- a/storage/tokudb/ft-index/ft/logger/logcursor.cc
+++ b/storage/tokudb/ft-index/ft/logger/logcursor.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "log-internal.h"
#include "logger/logcursor.h"
#include <limits.h>
diff --git a/storage/tokudb/ft-index/ft/logger/logfilemgr.cc b/storage/tokudb/ft-index/ft/logger/logfilemgr.cc
index 04d091ae1bc..86bec09db3a 100644
--- a/storage/tokudb/ft-index/ft/logger/logfilemgr.cc
+++ b/storage/tokudb/ft-index/ft/logger/logfilemgr.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "logger/log-internal.h"
#include "logger/logcursor.h"
#include "logger/logfilemgr.h"
diff --git a/storage/tokudb/ft-index/ft/logger/logformat.cc b/storage/tokudb/ft-index/ft/logger/logformat.cc
index 698b612c078..dbae9b09806 100644
--- a/storage/tokudb/ft-index/ft/logger/logformat.cc
+++ b/storage/tokudb/ft-index/ft/logger/logformat.cc
@@ -852,6 +852,7 @@ int main (int argc, const char *const argv[]) {
fprintf(hf, "#pragma once\n");
fprintf2(cf, hf, "/* Do not edit this file. This code generated by logformat.c. Copyright (c) 2007-2013 Tokutek Inc. */\n");
fprintf2(cf, hf, "#ident \"Copyright (c) 2007-2013 Tokutek Inc. All rights reserved.\"\n");
+ fprintf2(cf, pf, "#include <config.h>\n");
fprintf2(cf, pf, "#include <stdint.h>\n");
fprintf2(cf, pf, "#include <sys/time.h>\n");
fprintf2(cf, pf, "#include <ft/logger/log-internal.h>\n");
diff --git a/storage/tokudb/ft-index/ft/logger/logger.cc b/storage/tokudb/ft-index/ft/logger/logger.cc
index 2296a2b43f8..a07e5f84f37 100644
--- a/storage/tokudb/ft-index/ft/logger/logger.cc
+++ b/storage/tokudb/ft-index/ft/logger/logger.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <memory.h>
#include <ctype.h>
#include <limits.h>
@@ -572,14 +574,18 @@ toku_logger_make_space_in_inbuf (TOKULOGGER logger, int n_bytes_needed)
release_output(logger, fsynced_lsn);
}
-void toku_logger_fsync (TOKULOGGER logger)
+void toku_logger_fsync(TOKULOGGER logger)
// Effect: This is the exported fsync used by ydb.c for env_log_flush. Group commit doesn't have to work.
// Entry: Holds no locks
// Exit: Holds no locks
// Implementation note: Acquire the output condition lock, then the output permission, then release the output condition lock, then get the input lock.
-// Then release everything.
+// Then release everything. Hold the input lock while reading the current max lsn in buf to make drd happy that there is no data race.
{
- toku_logger_maybe_fsync(logger, logger->inbuf.max_lsn_in_buf, true, false);
+ ml_lock(&logger->input_lock);
+ const LSN max_lsn_in_buf = logger->inbuf.max_lsn_in_buf;
+ ml_unlock(&logger->input_lock);
+
+ toku_logger_maybe_fsync(logger, max_lsn_in_buf, true, false);
}
void toku_logger_fsync_if_lsn_not_fsynced (TOKULOGGER logger, LSN lsn) {
diff --git a/storage/tokudb/ft-index/ft/logger/recover.cc b/storage/tokudb/ft-index/ft/logger/recover.cc
index ca284568f07..8dd7bf87624 100644
--- a/storage/tokudb/ft-index/ft/logger/recover.cc
+++ b/storage/tokudb/ft-index/ft/logger/recover.cc
@@ -90,6 +90,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/cachetable/cachetable.h"
#include "ft/cachetable/checkpoint.h"
#include "ft/ft.h"
diff --git a/storage/tokudb/ft-index/ft/node.cc b/storage/tokudb/ft-index/ft/node.cc
index f6a8c0bb2b3..fcb4533bb80 100644
--- a/storage/tokudb/ft-index/ft/node.cc
+++ b/storage/tokudb/ft-index/ft/node.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-internal.h"
#include "ft/serialize/ft_node-serialize.h"
diff --git a/storage/tokudb/ft-index/ft/pivotkeys.cc b/storage/tokudb/ft-index/ft/pivotkeys.cc
index cf37777d892..93d1abb2049 100644
--- a/storage/tokudb/ft-index/ft/pivotkeys.cc
+++ b/storage/tokudb/ft-index/ft/pivotkeys.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <string>
#include "portability/memory.h"
diff --git a/storage/tokudb/ft-index/ft/serialize/block_table.cc b/storage/tokudb/ft-index/ft/serialize/block_table.cc
index 561f03a8871..60c48251fd3 100644
--- a/storage/tokudb/ft-index/ft/serialize/block_table.cc
+++ b/storage/tokudb/ft-index/ft/serialize/block_table.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "portability/memory.h"
#include "portability/toku_assert.h"
#include "portability/toku_portability.h"
diff --git a/storage/tokudb/ft-index/ft/serialize/compress.cc b/storage/tokudb/ft-index/ft/serialize/compress.cc
index e905220026b..6cd168cff23 100644
--- a/storage/tokudb/ft-index/ft/serialize/compress.cc
+++ b/storage/tokudb/ft-index/ft/serialize/compress.cc
@@ -88,6 +88,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2011-2013 Tokutek Inc. All rights reserved."
#ident "$Id$"
+#include <config.h>
+
#include <toku_portability.h>
#include <util/scoped_malloc.h>
diff --git a/storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc b/storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc
index 4e55c222eb7..211259ae50b 100644
--- a/storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc
+++ b/storage/tokudb/ft-index/ft/serialize/ft-node-deserialize.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/node.h"
#include "ft/ft-internal.h"
#include "ft/serialize/ft_node-serialize.h"
diff --git a/storage/tokudb/ft-index/ft/serialize/ft-serialize.cc b/storage/tokudb/ft-index/ft/serialize/ft-serialize.cc
index 4e447592255..a31ea4f59a2 100644
--- a/storage/tokudb/ft-index/ft/serialize/ft-serialize.cc
+++ b/storage/tokudb/ft-index/ft/serialize/ft-serialize.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-internal.h"
#include "ft/msg.h"
diff --git a/storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc b/storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc
index 8e6e27b34b3..6fd452aba54 100644
--- a/storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc
+++ b/storage/tokudb/ft-index/ft/serialize/ft_node-serialize.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "portability/toku_atomic.h"
#include "ft/cachetable/cachetable.h"
@@ -145,7 +147,7 @@ struct toku_thread_pool *get_ft_pool(void) {
}
void toku_serialize_set_parallel(bool in_parallel) {
- toku_serialize_in_parallel = in_parallel;
+ toku_drd_unsafe_set(&toku_serialize_in_parallel, in_parallel);
}
void toku_ft_serialize_layer_init(void) {
@@ -852,7 +854,7 @@ toku_serialize_ftnode_to (int fd, BLOCKNUM blocknum, FTNODE node, FTNODE_DISK_DA
ft->h->basementnodesize,
ft->h->compression_method,
do_rebalancing,
- toku_serialize_in_parallel, // in_parallel
+ toku_drd_unsafe_fetch(&toku_serialize_in_parallel),
&n_to_write,
&n_uncompressed_bytes,
&compressed_buf
diff --git a/storage/tokudb/ft-index/ft/serialize/sub_block.cc b/storage/tokudb/ft-index/ft/serialize/sub_block.cc
index 1346c76b103..0172d58a4ca 100644
--- a/storage/tokudb/ft-index/ft/serialize/sub_block.cc
+++ b/storage/tokudb/ft-index/ft/serialize/sub_block.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <errno.h>
#include <stdio.h>
#include <string.h>
diff --git a/storage/tokudb/ft-index/ft/tests/CMakeLists.txt b/storage/tokudb/ft-index/ft/tests/CMakeLists.txt
index a363b70c5dd..a02a561dde2 100644
--- a/storage/tokudb/ft-index/ft/tests/CMakeLists.txt
+++ b/storage/tokudb/ft-index/ft/tests/CMakeLists.txt
@@ -95,6 +95,11 @@ if(BUILD_TESTING OR BUILD_FT_TESTS)
REQUIRED_FILES "ftdump-test-generate.ctest-data"
)
+ ## keyrange has some inequality assumptions that were broken by
+ ## promotion, they seem benign but are complicated, so for now, skip
+ ## this test, when we get some time, we should fix it and re-enable it.
+ list(REMOVE_ITEM tests keyrange)
+
foreach(test ${tests})
add_ft_test(${test})
endforeach(test)
diff --git a/storage/tokudb/ft-index/ft/txn/roll.cc b/storage/tokudb/ft-index/ft/txn/roll.cc
index affa9fa802c..69a75112576 100644
--- a/storage/tokudb/ft-index/ft/txn/roll.cc
+++ b/storage/tokudb/ft-index/ft/txn/roll.cc
@@ -92,6 +92,8 @@ PATENT RIGHTS GRANT:
/* rollback and rollforward routines. */
+#include <config.h>
+
#include "ft/ft.h"
#include "ft/ft-ops.h"
#include "ft/log_header.h"
diff --git a/storage/tokudb/ft-index/ft/txn/rollback-apply.cc b/storage/tokudb/ft-index/ft/txn/rollback-apply.cc
index 258994223cc..e65e5fc0fbf 100644
--- a/storage/tokudb/ft-index/ft/txn/rollback-apply.cc
+++ b/storage/tokudb/ft-index/ft/txn/rollback-apply.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/logger/log-internal.h"
#include "ft/txn/rollback-apply.h"
diff --git a/storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc b/storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc
index bb60e787735..9897b46e7c1 100644
--- a/storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc
+++ b/storage/tokudb/ft-index/ft/txn/rollback-ct-callbacks.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "portability/memory.h"
#include "portability/toku_portability.h"
diff --git a/storage/tokudb/ft-index/ft/txn/rollback.cc b/storage/tokudb/ft-index/ft/txn/rollback.cc
index 54a7d9b58ae..62048039c26 100644
--- a/storage/tokudb/ft-index/ft/txn/rollback.cc
+++ b/storage/tokudb/ft-index/ft/txn/rollback.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <toku_stdint.h>
#include "ft/serialize/block_table.h"
diff --git a/storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc b/storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc
index 95a54d6fd76..b542c00ce4e 100644
--- a/storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc
+++ b/storage/tokudb/ft-index/ft/txn/rollback_log_node_cache.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include <memory.h>
#include <portability/toku_portability.h>
diff --git a/storage/tokudb/ft-index/ft/txn/txn.cc b/storage/tokudb/ft-index/ft/txn/txn.cc
index 7b475c2c975..216cb0d8dfd 100644
--- a/storage/tokudb/ft-index/ft/txn/txn.cc
+++ b/storage/tokudb/ft-index/ft/txn/txn.cc
@@ -90,6 +90,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/cachetable/checkpoint.h"
#include "ft/ft.h"
#include "ft/logger/log-internal.h"
diff --git a/storage/tokudb/ft-index/ft/txn/txn_child_manager.cc b/storage/tokudb/ft-index/ft/txn/txn_child_manager.cc
index 3a006285e20..747220b2849 100644
--- a/storage/tokudb/ft-index/ft/txn/txn_child_manager.cc
+++ b/storage/tokudb/ft-index/ft/txn/txn_child_manager.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "ft/logger/log-internal.h"
#include "ft/txn/txn_child_manager.h"
diff --git a/storage/tokudb/ft-index/ft/txn/txn_manager.cc b/storage/tokudb/ft-index/ft/txn/txn_manager.cc
index 570174f9b9f..25ce1e73133 100644
--- a/storage/tokudb/ft-index/ft/txn/txn_manager.cc
+++ b/storage/tokudb/ft-index/ft/txn/txn_manager.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <config.h>
+
#include "portability/toku_race_tools.h"
#include "ft/cachetable/checkpoint.h"
@@ -325,7 +327,7 @@ toku_txn_manager_get_oldest_living_xid(TXN_MANAGER txn_manager) {
}
TXNID toku_txn_manager_get_oldest_referenced_xid_estimate(TXN_MANAGER txn_manager) {
- return txn_manager->last_calculated_oldest_referenced_xid;
+ return toku_drd_unsafe_fetch(&txn_manager->last_calculated_oldest_referenced_xid);
}
int live_root_txn_list_iter(const TOKUTXN &live_xid, const uint32_t UU(index), TXNID **const referenced_xids);
@@ -385,7 +387,7 @@ static void set_oldest_referenced_xid(TXN_MANAGER txn_manager) {
oldest_referenced_xid = txn_manager->last_xid;
}
invariant(oldest_referenced_xid != TXNID_MAX);
- txn_manager->last_calculated_oldest_referenced_xid = oldest_referenced_xid;
+ toku_drd_unsafe_set(&txn_manager->last_calculated_oldest_referenced_xid, oldest_referenced_xid);
}
//Heaviside function to find a TOKUTXN by TOKUTXN (used to find the index)
diff --git a/storage/tokudb/ft-index/ft/ule.cc b/storage/tokudb/ft-index/ft/ule.cc
index 03ec452cbd2..0f31f4337cf 100644
--- a/storage/tokudb/ft-index/ft/ule.cc
+++ b/storage/tokudb/ft-index/ft/ule.cc
@@ -102,6 +102,8 @@ PATENT RIGHTS GRANT:
// See design documentation for nested transactions at
// TokuWiki/Imp/TransactionsOverview.
+#include <config.h>
+
#include "portability/toku_portability.h"
#include "ft/ft-internal.h"
diff --git a/storage/tokudb/ft-index/ft/valgrind.suppressions b/storage/tokudb/ft-index/ft/valgrind.suppressions
index d8b9b09bd1f..7f6be084338 100644
--- a/storage/tokudb/ft-index/ft/valgrind.suppressions
+++ b/storage/tokudb/ft-index/ft/valgrind.suppressions
@@ -286,11 +286,9 @@
Memcheck:Leak
match-leak-kinds: reachable
fun:calloc
- obj:/usr/lib/libdl-2.19.so
+ ...
fun:dlsym
- fun:_Z19toku_memory_startupv
- fun:call_init.part.0
+ ...
fun:_dl_init
- obj:/usr/lib/ld-2.19.so
}
diff --git a/storage/tokudb/ft-index/locktree/locktree.cc b/storage/tokudb/ft-index/locktree/locktree.cc
index eb9be825f48..27e528db8e8 100644
--- a/storage/tokudb/ft-index/locktree/locktree.cc
+++ b/storage/tokudb/ft-index/locktree/locktree.cc
@@ -275,7 +275,7 @@ void locktree::sto_end(void) {
void locktree::sto_end_early_no_accounting(void *prepared_lkr) {
sto_migrate_buffer_ranges_to_tree(prepared_lkr);
sto_end();
- m_sto_score = 0;
+ toku_drd_unsafe_set(&m_sto_score, 0);
}
void locktree::sto_end_early(void *prepared_lkr) {
@@ -330,7 +330,7 @@ void locktree::sto_migrate_buffer_ranges_to_tree(void *prepared_lkr) {
bool locktree::sto_try_acquire(void *prepared_lkr,
TXNID txnid,
const DBT *left_key, const DBT *right_key) {
- if (m_rangetree->is_empty() && m_sto_buffer.is_empty() && m_sto_score >= STO_SCORE_THRESHOLD) {
+ if (m_rangetree->is_empty() && m_sto_buffer.is_empty() && data_race::unsafe_read<int>(m_sto_score) >= STO_SCORE_THRESHOLD) {
// We can do the optimization because the rangetree is empty, and
// we know its worth trying because the sto score is big enough.
sto_begin(txnid);
@@ -536,16 +536,16 @@ void locktree::remove_overlapping_locks_for_txnid(TXNID txnid,
}
bool locktree::sto_txnid_is_valid_unsafe(void) const {
- return m_sto_txnid != TXNID_NONE;
+ return data_race::unsafe_read<TXNID>(m_sto_txnid) != TXNID_NONE;
}
int locktree::sto_get_score_unsafe(void) const {
- return m_sto_score;
+ return data_race::unsafe_read<int>(m_sto_score);
}
bool locktree::sto_try_release(TXNID txnid) {
bool released = false;
- if (sto_txnid_is_valid_unsafe()) {
+ if (data_race::unsafe_read<TXNID>(m_sto_txnid) != TXNID_NONE) {
// check the bit again with a prepared locked keyrange,
// which protects the optimization bits and rangetree data
concurrent_tree::locked_keyrange lkr;
@@ -585,7 +585,7 @@ void locktree::release_locks(TXNID txnid, const range_buffer *ranges) {
// the threshold and we'll try the optimization again. This
// is how a previously multithreaded system transitions into
// a single threaded system that benefits from the optimization.
- if (sto_get_score_unsafe() < STO_SCORE_THRESHOLD) {
+ if (data_race::unsafe_read<int>(m_sto_score) < STO_SCORE_THRESHOLD) {
toku_sync_fetch_and_add(&m_sto_score, 1);
}
}
diff --git a/storage/tokudb/ft-index/locktree/manager.cc b/storage/tokudb/ft-index/locktree/manager.cc
index 5f69c46f7da..6fe8dc8dfdf 100644
--- a/storage/tokudb/ft-index/locktree/manager.cc
+++ b/storage/tokudb/ft-index/locktree/manager.cc
@@ -267,19 +267,22 @@ void locktree_manager::release_lt(locktree *lt) {
uint32_t refs = lt->release_reference();
if (refs == 0) {
mutex_lock();
+ // lt may not have already been destroyed, so look it up.
locktree *find_lt = locktree_map_find(dict_id);
if (find_lt != nullptr) {
// A locktree is still in the map with that dict_id, so it must be
// equal to lt. This is true because dictionary ids are never reused.
// If the reference count is zero, it's our responsibility to remove
// it and do the destroy. Otherwise, someone still wants it.
- invariant(find_lt == lt);
- if (lt->get_reference_count() == 0) {
- locktree_map_remove(lt);
- do_destroy = true;
+ // If the locktree is still valid then check if it should be deleted.
+ if (find_lt == lt) {
+ if (lt->get_reference_count() == 0) {
+ locktree_map_remove(lt);
+ do_destroy = true;
+ }
+ m_lt_counters.add(lt->get_lock_request_info()->counters);
}
}
- m_lt_counters.add(lt->get_lock_request_info()->counters);
mutex_unlock();
}
diff --git a/storage/tokudb/ft-index/locktree/tests/manager_parallel_locktree_get_release.cc b/storage/tokudb/ft-index/locktree/tests/manager_parallel_locktree_get_release.cc
new file mode 100644
index 00000000000..09d09a77aeb
--- /dev/null
+++ b/storage/tokudb/ft-index/locktree/tests/manager_parallel_locktree_get_release.cc
@@ -0,0 +1,145 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuFT, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2014 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+
+// This test crashes prior to the FT-600 fix.
+
+#include "manager_unit_test.h"
+
+namespace toku {
+
+static int my_cmp(DB *UU(db), const DBT *UU(a), const DBT *UU(b)) {
+ return 0;
+}
+
+static void my_test(locktree_manager *mgr) {
+ toku::comparator my_comparator;
+ my_comparator.create(my_cmp, nullptr);
+ DICTIONARY_ID a = { 42 };
+ for (int i=0; i<100000; i++) {
+ locktree *alt = mgr->get_lt(a, my_comparator, nullptr);
+ invariant_notnull(alt);
+ mgr->release_lt(alt);
+ }
+ my_comparator.destroy();
+}
+
+static void *my_tester(void *arg) {
+ locktree_manager *mgr = (locktree_manager *) arg;
+ my_test(mgr);
+ return arg;
+}
+
+void manager_unit_test::test_reference_release_lt(void) {
+ int r;
+ locktree_manager mgr;
+ mgr.create(nullptr, nullptr, nullptr, nullptr);
+ const int nthreads = 2;
+ pthread_t ids[nthreads];
+ for (int i = 0; i < nthreads; i++) {
+ r = toku_pthread_create(&ids[i], nullptr, my_tester, &mgr);
+ assert(r == 0);
+ }
+ for (int i = 0; i < nthreads; i++) {
+ void *ret;
+ r = toku_pthread_join(ids[i], &ret);
+ assert(r == 0);
+ }
+ my_test(&mgr);
+ mgr.destroy();
+}
+
+} /* namespace toku */
+
+int main(void) {
+ toku::manager_unit_test test;
+ test.test_reference_release_lt();
+ return 0;
+}
diff --git a/storage/tokudb/ft-index/portability/tests/try-leak-lost.cc b/storage/tokudb/ft-index/portability/tests/try-leak-lost.cc
index 57bbe3589bb..290e2969aa7 100644
--- a/storage/tokudb/ft-index/portability/tests/try-leak-lost.cc
+++ b/storage/tokudb/ft-index/portability/tests/try-leak-lost.cc
@@ -88,9 +88,11 @@ PATENT RIGHTS GRANT:
#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <stdio.h>
#include <stdlib.h>
int main(void) {
- (void) malloc(42);
+ // GCC has gotten smart enough to optimize this away unless we use it.
+ printf("%p\n", malloc(42));
return 0;
}
diff --git a/storage/tokudb/ft-index/portability/tests/try-uninit.cc b/storage/tokudb/ft-index/portability/tests/try-uninit.cc
index c763348ed2f..ef092541fd9 100644
--- a/storage/tokudb/ft-index/portability/tests/try-uninit.cc
+++ b/storage/tokudb/ft-index/portability/tests/try-uninit.cc
@@ -95,11 +95,11 @@ static void foo(int i) {
printf("%d\n", i);
}
-int main(int argc, char *argv[]) {
+int main(void) {
int arg;
- int i;
- for (i = 1; i < argc; i++) {
- arg = atoi(argv[i]);
+ char *buf = (char *) &arg;
+ for (int i = 0; i < 2; i++) {
+ buf[i] = 'a';
}
foo(arg);
return 0;
diff --git a/storage/tokudb/ft-index/portability/toku_race_tools.h b/storage/tokudb/ft-index/portability/toku_race_tools.h
index b4c83b6119d..042e05de2bc 100644
--- a/storage/tokudb/ft-index/portability/toku_race_tools.h
+++ b/storage/tokudb/ft-index/portability/toku_race_tools.h
@@ -103,6 +103,10 @@ PATENT RIGHTS GRANT:
# define TOKU_VALGRIND_HG_DISABLE_CHECKING(p, size) VALGRIND_HG_DISABLE_CHECKING(p, size)
# define TOKU_DRD_IGNORE_VAR(v) DRD_IGNORE_VAR(v)
# define TOKU_DRD_STOP_IGNORING_VAR(v) DRD_STOP_IGNORING_VAR(v)
+# define TOKU_ANNOTATE_IGNORE_READS_BEGIN() ANNOTATE_IGNORE_READS_BEGIN()
+# define TOKU_ANNOTATE_IGNORE_READS_END() ANNOTATE_IGNORE_READS_END()
+# define TOKU_ANNOTATE_IGNORE_WRITES_BEGIN() ANNOTATE_IGNORE_WRITES_BEGIN()
+# define TOKU_ANNOTATE_IGNORE_WRITES_END() ANNOTATE_IGNORE_WRITES_END()
/*
* How to make helgrind happy about tree rotations and new mutex orderings:
@@ -134,7 +138,51 @@ PATENT RIGHTS GRANT:
# define TOKU_VALGRIND_HG_DISABLE_CHECKING(p, size) ((void) 0)
# define TOKU_DRD_IGNORE_VAR(v)
# define TOKU_DRD_STOP_IGNORING_VAR(v)
+# define TOKU_ANNOTATE_IGNORE_READS_BEGIN() ((void) 0)
+# define TOKU_ANNOTATE_IGNORE_READS_END() ((void) 0)
+# define TOKU_ANNOTATE_IGNORE_WRITES_BEGIN() ((void) 0)
+# define TOKU_ANNOTATE_IGNORE_WRITES_END() ((void) 0)
# define TOKU_VALGRIND_RESET_MUTEX_ORDERING_INFO(mutex)
# define RUNNING_ON_VALGRIND (0U)
#endif
+
+namespace data_race {
+
+ template<typename T>
+ class unsafe_read {
+ const T &_val;
+ public:
+ unsafe_read(const T &val)
+ : _val(val) {
+ TOKU_VALGRIND_HG_DISABLE_CHECKING(&_val, sizeof _val);
+ TOKU_ANNOTATE_IGNORE_READS_BEGIN();
+ }
+ ~unsafe_read() {
+ TOKU_ANNOTATE_IGNORE_READS_END();
+ TOKU_VALGRIND_HG_ENABLE_CHECKING(&_val, sizeof _val);
+ }
+ operator T() const {
+ return _val;
+ }
+ };
+
+} // namespace data_race
+
+// Unsafely fetch and return a `T' from src, telling drd to ignore
+// racey access to src for the next sizeof(*src) bytes
+template <typename T>
+T toku_drd_unsafe_fetch(T *src) {
+ return data_race::unsafe_read<T>(*src);
+}
+
+// Unsafely set a `T' value into *dest from src, telling drd to ignore
+// racey access to dest for the next sizeof(*dest) bytes
+template <typename T>
+void toku_drd_unsafe_set(T *dest, const T src) {
+ TOKU_VALGRIND_HG_DISABLE_CHECKING(dest, sizeof *dest);
+ TOKU_ANNOTATE_IGNORE_WRITES_BEGIN();
+ *dest = src;
+ TOKU_ANNOTATE_IGNORE_WRITES_END();
+ TOKU_VALGRIND_HG_ENABLE_CHECKING(dest, sizeof *dest);
+}
diff --git a/storage/tokudb/ft-index/scripts/run.stress-tests.py b/storage/tokudb/ft-index/scripts/run.stress-tests.py
index 62edbab8f3c..ae0aae6ee13 100755
--- a/storage/tokudb/ft-index/scripts/run.stress-tests.py
+++ b/storage/tokudb/ft-index/scripts/run.stress-tests.py
@@ -766,8 +766,8 @@ if __name__ == '__main__':
help="skip the tests that don't involve upgrade [default=False]")
upgrade_group.add_option('--double_upgrade', action='store_true', dest='double_upgrade', default=False,
help='run the upgrade tests twice in a row [default=False]')
- upgrade_group.add_option('--add_old_version', action='append', type='choice', dest='old_versions', choices=['4.2.0', '5.0.8', '5.2.7', '6.0.0', '6.1.0', '6.5.1', '6.6.3', '7.1.6'],
- help='which old versions to use for running the stress tests in upgrade mode. can be specified multiple times [options=4.2.0, 5.0.8, 5.2.7, 6.0.0, 6.1.0, 6.5.1, 6.6.3, 7.1.6]')
+ upgrade_group.add_option('--add_old_version', action='append', type='choice', dest='old_versions', choices=['4.2.0', '5.0.8', '5.2.7', '6.0.0', '6.1.0', '6.5.1', '6.6.3', '7.0.1','7.1.6','v26','7.5.0'],
+ help='which old versions to use for running the stress tests in upgrade mode. can be specified multiple times [options=4.2.0, 5.0.8, 5.2.7, 6.0.0, 6.1.0, 6.5.1, 6.6.3, 7.1.0, 7.1.6, v26, 7.5.0]')
upgrade_group.add_option('--old_environments_dir', type='string', dest='old_environments_dir',
default=('%s/old-stress-test-envs' % default_tokudb_data),
help='directory containing old version environments (should contain 5.0.8/, 5.2.7/, etc, and the environments should be in those) [default=../../tokudb.data/stress_environments]')
diff --git a/storage/tokudb/ft-index/src/errors.cc b/storage/tokudb/ft-index/src/errors.cc
index fa1227b25cc..6c330f040dd 100644
--- a/storage/tokudb/ft-index/src/errors.cc
+++ b/storage/tokudb/ft-index/src/errors.cc
@@ -96,6 +96,8 @@ PATENT RIGHTS GRANT:
The error handling routines for ydb
*/
+#include <config.h>
+
#include <toku_portability.h>
#include <stdio.h>
#include <stdarg.h>
diff --git a/storage/tokudb/ft-index/src/indexer-undo-do.cc b/storage/tokudb/ft-index/src/indexer-undo-do.cc
index 52489fb7825..03e05751358 100644
--- a/storage/tokudb/ft-index/src/indexer-undo-do.cc
+++ b/storage/tokudb/ft-index/src/indexer-undo-do.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <toku_portability.h>
#include <toku_assert.h>
diff --git a/storage/tokudb/ft-index/src/indexer.cc b/storage/tokudb/ft-index/src/indexer.cc
index aa821f67fba..ebb2607483a 100644
--- a/storage/tokudb/ft-index/src/indexer.cc
+++ b/storage/tokudb/ft-index/src/indexer.cc
@@ -92,6 +92,8 @@ PATENT RIGHTS GRANT:
/*
* The indexer
*/
+#include <config.h>
+
#include <stdio.h>
#include <string.h>
#include <toku_portability.h>
diff --git a/storage/tokudb/ft-index/src/loader.cc b/storage/tokudb/ft-index/src/loader.cc
index 1a6bf718443..0a742dff6d1 100644
--- a/storage/tokudb/ft-index/src/loader.cc
+++ b/storage/tokudb/ft-index/src/loader.cc
@@ -93,6 +93,8 @@ PATENT RIGHTS GRANT:
* The loader
*/
+#include <config.h>
+
#include <toku_portability.h>
#include <portability/toku_atomic.h>
#include <stdio.h>
diff --git a/storage/tokudb/ft-index/src/tests/CMakeLists.txt b/storage/tokudb/ft-index/src/tests/CMakeLists.txt
index 06f7e523746..228c91136cd 100644
--- a/storage/tokudb/ft-index/src/tests/CMakeLists.txt
+++ b/storage/tokudb/ft-index/src/tests/CMakeLists.txt
@@ -486,6 +486,7 @@ if(BUILD_TESTING OR BUILD_SRC_TESTS)
ydb/loader-stress-test4z.tdb
ydb/recover_stress.tdb
ydb/test3529.tdb
+ ydb/test_insert_unique.tdb
)
set_tests_properties(${phenomenally_long_tests} PROPERTIES TIMEOUT 14400)
endif(BUILD_TESTING OR BUILD_SRC_TESTS)
diff --git a/storage/tokudb/ft-index/src/tests/helgrind.suppressions b/storage/tokudb/ft-index/src/tests/helgrind.suppressions
index 84d316d06d5..524739387ce 100644
--- a/storage/tokudb/ft-index/src/tests/helgrind.suppressions
+++ b/storage/tokudb/ft-index/src/tests/helgrind.suppressions
@@ -123,4 +123,24 @@
fun:pthread_cond_destroy@*
...
fun:_ZN7evictor7destroyEv
-} \ No newline at end of file
+}
+{
+ <helgrind_doesnt_understand_the_way_the_world_works_and_ignores_our_disable_checking_instructions>
+ Helgrind:Race
+ fun:_ZN4toku8locktree15sto_try_acquireEPvmPK10__toku_dbtS4_
+ fun:_ZN4toku8locktree12acquire_lockEbmPK10__toku_dbtS3_PNS_9txnid_setE
+ fun:_ZN4toku8locktree16try_acquire_lockEbmPK10__toku_dbtS3_PNS_9txnid_setEb
+ fun:_ZN4toku8locktree18acquire_write_lockEmPK10__toku_dbtS3_PNS_9txnid_setEb
+ fun:_ZN4toku12lock_request5startEv
+ ...
+}
+{
+ <helgrind_bug_323432_see_http://permalink.gmane.org/gmane.comp.debugging.valgrind/13325>
+ Helgrind:Race
+ obj:/usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so
+ fun:pthread_mutex_destroy
+ fun:toku_mutex_destroy
+ fun:_ZN4toku8treenode4freeEPS0_
+ fun:_ZN4toku8treenode22remove_root_of_subtreeEv
+ ...
+}
diff --git a/storage/tokudb/ft-index/src/tests/test_insert_unique.cc b/storage/tokudb/ft-index/src/tests/test_insert_unique.cc
index 84d1ded6db5..e38ae892a67 100644
--- a/storage/tokudb/ft-index/src/tests/test_insert_unique.cc
+++ b/storage/tokudb/ft-index/src/tests/test_insert_unique.cc
@@ -133,7 +133,7 @@ static void test_large_sequential_insert_unique(DB_ENV *env) {
r = db->set_readpagesize(db, 2 * 1024); CKERR(r);
r = db->open(db, NULL, "db", NULL, DB_BTREE, DB_CREATE, 0644); CKERR(r);
- const int val_size = 1024;
+ const int val_size = 8;
char *XMALLOC_N(val_size, val_buf);
memset(val_buf, 'k', val_size);
DBT val;
@@ -153,9 +153,18 @@ static void test_large_sequential_insert_unique(DB_ENV *env) {
// .. but re-inserting is okay, if we provisionally deleted the row
DB_TXN *txn;
r = env->txn_begin(env, NULL, &txn, 0); CKERR(r);
- r = db->del(db, NULL, &key, DB_DELETE_ANY); CKERR(r);
- r = db->put(db, NULL, &key, &val, DB_NOOVERWRITE); CKERR(r);
+ r = db->del(db, txn, &key, DB_DELETE_ANY); CKERR(r);
+ r = db->put(db, txn, &key, &val, DB_NOOVERWRITE); CKERR(r);
r = txn->commit(txn, 0); CKERR(r);
+
+ // re-inserting is also ok if we actually delete the row, for some key < k
+ if (i > 0) {
+ DBT other_key;
+ int other_k = toku_htonl(i - 10);
+ dbt_init(&other_key, &other_k, sizeof(other_k));
+ r = db->del(db, NULL, &other_key, DB_DELETE_ANY); CKERR(r);
+ r = db->put(db, NULL, &other_key, &val, DB_NOOVERWRITE); CKERR(r);
+ }
}
if (i > 0 && i % 250 == 0) {
// sanity check - unique checks on random keys we already inserted should
diff --git a/storage/tokudb/ft-index/src/tests/test_keylen_diff.cc b/storage/tokudb/ft-index/src/tests/test_keylen_diff.cc
index 144ac5fce3e..d37c03db566 100644
--- a/storage/tokudb/ft-index/src/tests/test_keylen_diff.cc
+++ b/storage/tokudb/ft-index/src/tests/test_keylen_diff.cc
@@ -138,15 +138,12 @@ static int update_callback(DB *UU(db), const DBT *UU(key), const DBT *old_val, c
void (*set_val)(const DBT *new_val, void *setval_extra), void *setval_extra) {
assert(extra != nullptr);
assert(old_val != nullptr);
- assert(extra->size == 0);
- assert(old_val->size == 0);
+ assert(extra->size == 0 || extra->size == 100);
+ assert(old_val->size == 0 || old_val->size == 100);
if (extra->data == nullptr) {
set_val(nullptr, setval_extra);
} else {
- DBT new_val;
- char empty_v;
- dbt_init(&new_val, &empty_v, 0);
- set_val(&new_val, setval_extra);
+ set_val(extra, setval_extra);
}
return 0;
}
@@ -176,12 +173,13 @@ static void test_keylen_diff(enum overwrite_method method, bool control_test) {
r = db->set_readpagesize(db, 1 * 1024); // smaller basements so we get more per leaf
r = db->open(db, nullptr, "db", nullptr, DB_BTREE, DB_CREATE, 0666); CKERR(r);
- DBT null_dbt, empty_dbt;
- char empty_v;
- dbt_init(&empty_dbt, &empty_v, 0);
+ DBT null_dbt, val_dbt;
+ char val_buf[100];
+ memset(val_buf, 0, sizeof val_buf);
+ dbt_init(&val_dbt, &val_buf, sizeof val_buf);
dbt_init(&null_dbt, nullptr, 0);
- const int num_keys = 256 * 1000;
+ const int num_keys = 1<<11; //256 * 1000;
for (int i = 0; i < num_keys; i++) {
// insert it using a 4 byte key ..
@@ -189,7 +187,7 @@ static void test_keylen_diff(enum overwrite_method method, bool control_test) {
DBT dbt;
dbt_init(&dbt, &key, key.size());
- r = db->put(db, nullptr, &dbt, &empty_dbt, 0); CKERR(r);
+ r = db->put(db, nullptr, &dbt, &val_dbt, 0); CKERR(r);
}
// overwrite keys randomly, so we induce flushes and get better / realistic coverage
@@ -217,7 +215,7 @@ static void test_keylen_diff(enum overwrite_method method, bool control_test) {
env->txn_begin(env, nullptr, &txn, DB_TXN_NOSYNC); CKERR(r);
switch (method) {
case VIA_INSERT: {
- r = db->put(db, txn, &dbt, &empty_dbt, 0); CKERR(r);
+ r = db->put(db, txn, &dbt, &val_dbt, 0); CKERR(r);
break;
}
case VIA_DELETE: {
@@ -228,12 +226,12 @@ static void test_keylen_diff(enum overwrite_method method, bool control_test) {
}
case VIA_UPDATE_OVERWRITE:
case VIA_UPDATE_DELETE: {
- r = db->update(db, txn, &dbt, method == VIA_UPDATE_DELETE ? &null_dbt : &empty_dbt, 0); CKERR(r);
+ r = db->update(db, txn, &dbt, method == VIA_UPDATE_DELETE ? &null_dbt : &val_dbt, 0); CKERR(r);
break;
}
case VIA_UPDATE_OVERWRITE_BROADCAST:
case VIA_UPDATE_DELETE_BROADCAST: {
- r = db->update_broadcast(db, txn, method == VIA_UPDATE_DELETE_BROADCAST ? &null_dbt : &empty_dbt, 0); CKERR(r);
+ r = db->update_broadcast(db, txn, method == VIA_UPDATE_DELETE_BROADCAST ? &null_dbt : &val_dbt, 0); CKERR(r);
if (i > 1 ) { // only need to test broadcast twice - one with abort, one without
txn->abort(txn); // we opened a txn so we should abort it before exiting
goto done;
diff --git a/storage/tokudb/ft-index/src/ydb.cc b/storage/tokudb/ft-index/src/ydb.cc
index e61bf940175..85445a67eef 100644
--- a/storage/tokudb/ft-index/src/ydb.cc
+++ b/storage/tokudb/ft-index/src/ydb.cc
@@ -92,6 +92,8 @@ PATENT RIGHTS GRANT:
extern const char *toku_patent_string;
const char *toku_copyright_string = "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved.";
+#include <config.h>
+
#include <db.h>
#include <errno.h>
#include <string.h>
diff --git a/storage/tokudb/ft-index/src/ydb_cursor.cc b/storage/tokudb/ft-index/src/ydb_cursor.cc
index c42e2fb673e..57f3b5808b6 100644
--- a/storage/tokudb/ft-index/src/ydb_cursor.cc
+++ b/storage/tokudb/ft-index/src/ydb_cursor.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/storage/tokudb/ft-index/src/ydb_db.cc b/storage/tokudb/ft-index/src/ydb_db.cc
index 2c54a3bd4dc..57f28b33d69 100644
--- a/storage/tokudb/ft-index/src/ydb_db.cc
+++ b/storage/tokudb/ft-index/src/ydb_db.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <ctype.h>
#include <db.h>
diff --git a/storage/tokudb/ft-index/src/ydb_env_func.cc b/storage/tokudb/ft-index/src/ydb_env_func.cc
index 714fad74ec5..e7a1a31fcce 100644
--- a/storage/tokudb/ft-index/src/ydb_env_func.cc
+++ b/storage/tokudb/ft-index/src/ydb_env_func.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <toku_portability.h>
#include <memory.h>
diff --git a/storage/tokudb/ft-index/src/ydb_row_lock.cc b/storage/tokudb/ft-index/src/ydb_row_lock.cc
index 40cafd0e331..5ca853d92d9 100644
--- a/storage/tokudb/ft-index/src/ydb_row_lock.cc
+++ b/storage/tokudb/ft-index/src/ydb_row_lock.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <db.h>
#include <locktree/lock_request.h>
diff --git a/storage/tokudb/ft-index/src/ydb_txn.cc b/storage/tokudb/ft-index/src/ydb_txn.cc
index b6b8e154c6f..dd428c4d502 100644
--- a/storage/tokudb/ft-index/src/ydb_txn.cc
+++ b/storage/tokudb/ft-index/src/ydb_txn.cc
@@ -89,6 +89,7 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
#include <db.h>
diff --git a/storage/tokudb/ft-index/src/ydb_write.cc b/storage/tokudb/ft-index/src/ydb_write.cc
index 77daf4e6793..b6d9ac6b338 100644
--- a/storage/tokudb/ft-index/src/ydb_write.cc
+++ b/storage/tokudb/ft-index/src/ydb_write.cc
@@ -89,6 +89,8 @@ PATENT RIGHTS GRANT:
#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
#ident "$Id$"
+#include <config.h>
+
#include <db.h>
#include "ydb-internal.h"
#include "indexer.h"
diff --git a/storage/tokudb/ft-index/tools/ftverify.cc b/storage/tokudb/ft-index/tools/ftverify.cc
index 120658b2cb1..13e171f9f92 100644
--- a/storage/tokudb/ft-index/tools/ftverify.cc
+++ b/storage/tokudb/ft-index/tools/ftverify.cc
@@ -94,6 +94,8 @@ PATENT RIGHTS GRANT:
// fractal tree file, one block at a time.
////////////////////////////////////////////////////////////////////
+#include <config.h>
+
#include "portability/toku_assert.h"
#include "portability/toku_list.h"
#include "portability/toku_portability.h"
diff --git a/storage/tokudb/ft-index/tools/tdb_logprint.cc b/storage/tokudb/ft-index/tools/tdb_logprint.cc
index 1dd7581b9f5..15a28632cfb 100644
--- a/storage/tokudb/ft-index/tools/tdb_logprint.cc
+++ b/storage/tokudb/ft-index/tools/tdb_logprint.cc
@@ -91,6 +91,8 @@ PATENT RIGHTS GRANT:
/* Dump the log from stdin to stdout. */
+#include <config.h>
+
#include "ft/log_header.h"
#include "ft/logger/logger.h"
diff --git a/storage/tokudb/ft-index/tools/tokuftdump.cc b/storage/tokudb/ft-index/tools/tokuftdump.cc
index 3aab5401cd3..3f73136fb5c 100644
--- a/storage/tokudb/ft-index/tools/tokuftdump.cc
+++ b/storage/tokudb/ft-index/tools/tokuftdump.cc
@@ -91,6 +91,8 @@ PATENT RIGHTS GRANT:
// Dump a fractal tree file
+#include <config.h>
+
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc
index 0c2310f6685..f2182efec37 100644
--- a/storage/tokudb/ha_tokudb.cc
+++ b/storage/tokudb/ha_tokudb.cc
@@ -92,6 +92,8 @@ PATENT RIGHTS GRANT:
#pragma implementation // gcc: Class implementation
#endif
+#include <my_global.h> // must be first!
+
extern "C" {
#include "stdint.h"
#define __STDC_FORMAT_MACROS
@@ -242,23 +244,20 @@ void TOKUDB_SHARE::destroy(void) {
tokudb_pthread_mutex_destroy(&mutex);
rwlock_destroy(&num_DBs_lock);
tokudb_pthread_cond_destroy(&m_openclose_cond);
+ tokudb_my_free(rec_per_key);
+ rec_per_key = NULL;
}
// MUST have tokudb_mutex locked on input
static TOKUDB_SHARE *get_share(const char *table_name, TABLE_SHARE* table_share) {
TOKUDB_SHARE *share = NULL;
int error = 0;
- uint length;
-
- length = (uint) strlen(table_name);
-
+ uint length = (uint) strlen(table_name);
if (!(share = (TOKUDB_SHARE *) my_hash_search(&tokudb_open_tables, (uchar *) table_name, length))) {
char *tmp_name;
- //
// create share and fill it with all zeroes
// hence, all pointers are initialized to NULL
- //
share = (TOKUDB_SHARE *) tokudb_my_multi_malloc(MYF(MY_WME | MY_ZEROFILL),
&share, sizeof(*share),
&tmp_name, length + 1,
@@ -1595,11 +1594,7 @@ exit:
return ret_val;
}
-int ha_tokudb::initialize_share(
- const char* name,
- int mode
- )
-{
+int ha_tokudb::initialize_share(const char* name, int mode) {
int error = 0;
uint64_t num_rows = 0;
DB_TXN* txn = NULL;
@@ -1746,17 +1741,12 @@ int ha_tokudb::initialize_share(
init_hidden_prim_key_info(txn);
// initialize cardinality info from the status dictionary
- {
- uint total_key_parts = tokudb::compute_total_key_parts(table_share);
- uint64_t rec_per_key[total_key_parts];
- error = tokudb::get_card_from_status(share->status_block, txn, total_key_parts, rec_per_key);
- if (error == 0) {
- tokudb::set_card_in_key_info(table, total_key_parts, rec_per_key);
- } else {
- for (uint i = 0; i < total_key_parts; i++)
- rec_per_key[i] = 0;
- tokudb::set_card_in_key_info(table, total_key_parts, rec_per_key);
- }
+ share->n_rec_per_key = tokudb::compute_total_key_parts(table_share);
+ share->rec_per_key = (uint64_t *) tokudb_my_realloc(share->rec_per_key, share->n_rec_per_key * sizeof (uint64_t), MYF(MY_FAE));
+ error = tokudb::get_card_from_status(share->status_block, txn, share->n_rec_per_key, share->rec_per_key);
+ if (error) {
+ for (uint i = 0; i < share->n_rec_per_key; i++)
+ share->rec_per_key[i] = 0;
}
error = 0;
@@ -2993,12 +2983,7 @@ void ha_tokudb::init_hidden_prim_key_info(DB_TXN *txn) {
if (!(share->status & STATUS_PRIMARY_KEY_INIT)) {
int error = 0;
DBC* c = NULL;
- error = share->key_file[primary_key]->cursor(
- share->key_file[primary_key],
- txn,
- &c,
- 0
- );
+ error = share->key_file[primary_key]->cursor(share->key_file[primary_key], txn, &c, 0);
assert(error == 0);
DBT key,val;
memset(&key, 0, sizeof(key));
@@ -3218,11 +3203,12 @@ bool ha_tokudb::may_table_be_empty(DB_TXN *txn) {
error = share->file->cursor(share->file, txn, &tmp_cursor, 0);
if (error)
goto cleanup;
-
+ tmp_cursor->c_set_check_interrupt_callback(tmp_cursor, tokudb_killed_thd_callback, ha_thd());
if (empty_scan == TOKUDB_EMPTY_SCAN_LR)
error = tmp_cursor->c_getf_next(tmp_cursor, 0, smart_dbt_do_nothing, NULL);
else
error = tmp_cursor->c_getf_prev(tmp_cursor, 0, smart_dbt_do_nothing, NULL);
+ error = map_to_handler_error(error);
if (error == DB_NOTFOUND)
ret_val = true;
else
@@ -3542,6 +3528,7 @@ int ha_tokudb::is_val_unique(bool* is_unique, uchar* record, KEY* key_info, uint
goto cleanup;
}
else if (error) {
+ error = map_to_handler_error(error);
goto cleanup;
}
if (ir_info.cmp) {
@@ -4499,8 +4486,10 @@ int ha_tokudb::index_init(uint keynr, bool sorted) {
}
tokudb_active_index = keynr;
+#if TOKU_CLUSTERING_IS_COVERING
if (keynr < table->s->keys && table->key_info[keynr].option_struct->clustering)
- key_read = false;
+ key_read = false;
+#endif
last_cursor_error = 0;
range_lock_grabbed = false;
@@ -4528,6 +4517,7 @@ int ha_tokudb::index_init(uint keynr, bool sorted) {
cursor = NULL; // Safety
goto exit;
}
+ cursor->c_set_check_interrupt_callback(cursor, tokudb_killed_thd_callback, thd);
memset((void *) &last_key, 0, sizeof(last_key));
add_to_trx_handler_list();
@@ -5850,16 +5840,14 @@ void ha_tokudb::position(const uchar * record) {
// 0, always success
//
int ha_tokudb::info(uint flag) {
- TOKUDB_HANDLER_DBUG_ENTER("%d %lld", flag, (long long) share->rows);
- int error;
- DB_TXN* txn = NULL;
- uint curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key);
- DB_BTREE_STAT64 dict_stats;
-
+ TOKUDB_HANDLER_DBUG_ENTER("%d", flag);
+ int error = 0;
+#if TOKU_CLUSTERING_IS_COVERING
for (uint i=0; i < table->s->keys; i++)
- if (table->key_info[i].option_struct->clustering)
- table->covering_keys.set_bit(i);
-
+ if (key_is_clustering(&table->key_info[i]))
+ table->covering_keys.set_bit(i);
+#endif
+ DB_TXN* txn = NULL;
if (flag & HA_STATUS_VARIABLE) {
// Just to get optimizations right
stats.records = share->rows + share->rows_from_locked_table;
@@ -5889,18 +5877,12 @@ int ha_tokudb::info(uint flag) {
else {
goto cleanup;
}
- error = share->file->get_fragmentation(
- share->file,
- &frag_info
- );
+ error = share->file->get_fragmentation(share->file, &frag_info);
if (error) { goto cleanup; }
stats.delete_length = frag_info.unused_bytes;
- error = share->file->stat64(
- share->file,
- txn,
- &dict_stats
- );
+ DB_BTREE_STAT64 dict_stats;
+ error = share->file->stat64(share->file, txn, &dict_stats);
if (error) { goto cleanup; }
stats.create_time = dict_stats.bt_create_time_sec;
@@ -5936,6 +5918,7 @@ int ha_tokudb::info(uint flag) {
//
// this solution is much simpler than trying to maintain an
// accurate number of valid keys at the handlerton layer.
+ uint curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key);
for (uint i = 0; i < curr_num_DBs; i++) {
// skip the primary key, skip dropped indexes
if (i == primary_key || share->key_file[i] == NULL) {
@@ -5960,6 +5943,7 @@ int ha_tokudb::info(uint flag) {
}
if ((flag & HA_STATUS_CONST)) {
stats.max_data_file_length= 9223372036854775807ULL;
+ tokudb::set_card_in_key_info(table, share->n_rec_per_key, share->rec_per_key);
}
/* Don't return key if we got an error for the internal primary key */
@@ -6024,7 +6008,6 @@ int ha_tokudb::reset(void) {
TOKUDB_HANDLER_DBUG_RETURN(0);
}
-
//
// helper function that iterates through all DB's
// and grabs a lock (either read or write, but not both)
@@ -6036,6 +6019,7 @@ int ha_tokudb::reset(void) {
// error otherwise
//
int ha_tokudb::acquire_table_lock (DB_TXN* trans, TABLE_LOCK_TYPE lt) {
+ TOKUDB_HANDLER_DBUG_ENTER("%p %s", trans, lt == lock_read ? "r" : "w");
int error = ENOSYS;
if (!num_DBs_locked_in_bulk) {
rw_rdlock(&share->num_DBs_lock);
@@ -6067,10 +6051,9 @@ cleanup:
if (!num_DBs_locked_in_bulk) {
rw_unlock(&share->num_DBs_lock);
}
- return error;
+ TOKUDB_HANDLER_DBUG_RETURN(error);
}
-
int ha_tokudb::create_txn(THD* thd, tokudb_trx_data* trx) {
int error;
ulong tx_isolation = thd_tx_isolation(thd);
@@ -6247,7 +6230,6 @@ cleanup:
TABLE LOCK is done.
Under LOCK TABLES, each used tables will force a call to start_stmt.
*/
-
int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) {
TOKUDB_HANDLER_DBUG_ENTER("cmd %d lock %d %s", thd_sql_command(thd), lock_type, share->table_name);
if (0)
@@ -6276,27 +6258,6 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) {
TOKUDB_HANDLER_TRACE("trx->stmt %p already existed", trx->stmt);
}
}
- //
- // we know we are in lock tables
- // attempt to grab a table lock
- // if fail, continue, do not return error
- // This is because a failure ok, it simply means
- // another active transaction has some locks.
- // That other transaction modify this table
- // until it is unlocked, therefore having acquire_table_lock
- // potentially grab some locks but not all is ok.
- //
- if (lock.type <= TL_READ_NO_INSERT) {
- acquire_table_lock(trx->sub_sp_level,lock_read);
- }
- else {
- if (!(thd_sql_command(thd) == SQLCOM_CREATE_INDEX ||
- thd_sql_command(thd) == SQLCOM_ALTER_TABLE ||
- thd_sql_command(thd) == SQLCOM_DROP_INDEX ||
- thd_sql_command(thd) == SQLCOM_TRUNCATE)) {
- acquire_table_lock(trx->sub_sp_level,lock_write);
- }
- }
if (added_rows > deleted_rows) {
share->rows_from_locked_table = added_rows - deleted_rows;
}
@@ -6409,6 +6370,13 @@ static toku_compression_method get_compression_method(DB *file) {
return method;
}
+#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION
+enum row_type ha_tokudb::get_row_type(void) const {
+ toku_compression_method compression_method = get_compression_method(share->file);
+ return toku_compression_method_to_row_type(compression_method);
+}
+#endif
+
static int create_sub_table(
const char *table_name,
DBT* row_descriptor,
@@ -6807,11 +6775,13 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
memset(&kc_info, 0, sizeof(kc_info));
+#if 100000 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 100999
// TokuDB does not support discover_table_names() and writes no files
// in the database directory, so automatic filename-based
// discover_table_names() doesn't work either. So, it must force .frm
// file to disk.
form->s->write_frm_image();
+#endif
#if TOKU_INCLUDE_OPTION_STRUCTS
const srv_row_format_t row_format = (srv_row_format_t) form->s->option_struct->row_format;
@@ -7058,17 +7028,17 @@ int ha_tokudb::delete_or_rename_table (const char* from_name, const char* to_nam
error = status_db->cursor(status_db, txn, &status_cursor, 0);
if (error) { goto cleanup; }
+ status_cursor->c_set_check_interrupt_callback(status_cursor, tokudb_killed_thd_callback, thd);
while (error != DB_NOTFOUND) {
- error = status_cursor->c_get(
- status_cursor,
- &curr_key,
- &curr_val,
- DB_NEXT
- );
- if (error && error != DB_NOTFOUND) { goto cleanup; }
- if (error == DB_NOTFOUND) { break; }
-
+ error = status_cursor->c_get(status_cursor, &curr_key, &curr_val, DB_NEXT);
+ if (error && error != DB_NOTFOUND) {
+ error = map_to_handler_error(error);
+ goto cleanup;
+ }
+ if (error == DB_NOTFOUND) {
+ break;
+ }
HA_METADATA_KEY mk = *(HA_METADATA_KEY *)curr_key.data;
if (mk != hatoku_key_name) {
continue;
@@ -7943,23 +7913,33 @@ void ha_tokudb::restore_drop_indexes(TABLE *table_arg, uint *key_num, uint num_o
}
int ha_tokudb::map_to_handler_error(int error) {
- if (error == DB_LOCK_DEADLOCK)
+ switch (error) {
+ case DB_LOCK_DEADLOCK:
error = HA_ERR_LOCK_DEADLOCK;
- if (error == DB_LOCK_NOTGRANTED)
+ break;
+ case DB_LOCK_NOTGRANTED:
error = HA_ERR_LOCK_WAIT_TIMEOUT;
+ break;
#if defined(HA_ERR_DISK_FULL)
- if (error == ENOSPC) {
+ case ENOSPC:
error = HA_ERR_DISK_FULL;
- }
+ break;
#endif
- if (error == DB_KEYEXIST) {
+ case DB_KEYEXIST:
error = HA_ERR_FOUND_DUPP_KEY;
- }
+ break;
#if defined(HA_ALTER_ERROR)
- if (error == HA_ALTER_ERROR) {
+ case HA_ALTER_ERROR:
error = HA_ERR_UNSUPPORTED;
- }
+ break;
#endif
+ case TOKUDB_INTERRUPTED:
+ error = ER_QUERY_INTERRUPTED;
+ break;
+ case TOKUDB_OUT_OF_LOCKS:
+ error = HA_ERR_LOCK_TABLE_FULL;
+ break;
+ }
return error;
}
diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h
index 061b28823d4..10be517f7ea 100644
--- a/storage/tokudb/ha_tokudb.h
+++ b/storage/tokudb/ha_tokudb.h
@@ -184,6 +184,9 @@ public:
enum { CLOSED, OPENING, OPENED, CLOSING, ERROR } m_state;
int m_error;
int m_initialize_count;
+
+ uint n_rec_per_key;
+ uint64_t *rec_per_key;
};
typedef struct st_filter_key_part_info {
@@ -757,7 +760,9 @@ public:
uchar* buf,
DBT* key_to_compare
);
-
+#if TOKU_INCLUDE_ROW_TYPE_COMPRESSION
+ enum row_type get_row_type() const;
+#endif
private:
int read_full_row(uchar * buf);
int __close();
diff --git a/storage/tokudb/ha_tokudb_admin.cc b/storage/tokudb/ha_tokudb_admin.cc
index 100c88a76a8..c3b895bf4f4 100644
--- a/storage/tokudb/ha_tokudb_admin.cc
+++ b/storage/tokudb/ha_tokudb_admin.cc
@@ -102,7 +102,7 @@ struct analyze_progress_extra {
static int analyze_progress(void *v_extra, uint64_t rows) {
struct analyze_progress_extra *extra = (struct analyze_progress_extra *) v_extra;
THD *thd = extra->thd;
- if (thd->killed)
+ if (thd_killed(thd))
return ER_ABORTING_CONNECTION;
time_t t_now = time(0);
@@ -133,7 +133,7 @@ int ha_tokudb::analyze(THD *thd, HA_CHECK_OPT *check_opt) {
int result = HA_ADMIN_OK;
// stub out analyze if optimize is remapped to alter recreate + analyze
- if (thd_sql_command(thd) != SQLCOM_ANALYZE) {
+ if (thd_sql_command(thd) != SQLCOM_ANALYZE && thd_sql_command(thd) != SQLCOM_ALTER_TABLE) {
TOKUDB_HANDLER_DBUG_RETURN(result);
}
@@ -190,7 +190,7 @@ typedef struct hot_optimize_context {
static int hot_poll_fun(void *extra, float progress) {
HOT_OPTIMIZE_CONTEXT context = (HOT_OPTIMIZE_CONTEXT)extra;
- if (context->thd->killed) {
+ if (thd_killed(context->thd)) {
sprintf(context->write_status_msg, "The process has been killed, aborting hot optimize.");
return ER_ABORTING_CONNECTION;
}
@@ -271,7 +271,7 @@ struct check_context {
static int ha_tokudb_check_progress(void *extra, float progress) {
struct check_context *context = (struct check_context *) extra;
int result = 0;
- if (context->thd->killed)
+ if (thd_killed(context->thd))
result = ER_ABORTING_CONNECTION;
return result;
}
diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc
index 1793d31e6e1..adc854d6367 100644
--- a/storage/tokudb/ha_tokudb_alter_56.cc
+++ b/storage/tokudb/ha_tokudb_alter_56.cc
@@ -528,7 +528,7 @@ bool ha_tokudb::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha
error = alter_table_expand_blobs(altered_table, ha_alter_info);
if (error == 0 && ctx->reset_card) {
- error = tokudb::set_card_from_status(share->status_block, ctx->alter_txn, table->s, altered_table->s);
+ error = tokudb::alter_card(share->status_block, ctx->alter_txn, table->s, altered_table->s);
}
if (error == 0 && ctx->optimize_needed) {
error = do_optimize(ha_thd());
diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h
index ca25037cb0b..4ad177be9aa 100644
--- a/storage/tokudb/hatoku_defines.h
+++ b/storage/tokudb/hatoku_defines.h
@@ -105,7 +105,7 @@ PATENT RIGHTS GRANT:
// mariadb 10.0
#define TOKU_USE_DB_TYPE_TOKUDB 1
#define TOKU_INCLUDE_ALTER_56 1
-#define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1
+#define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0
#define TOKU_INCLUDE_XA 1
#define TOKU_INCLUDE_WRITE_FRM_DATA 0
#define TOKU_PARTITION_WRITE_FRM_DATA 0
@@ -114,6 +114,7 @@ PATENT RIGHTS GRANT:
#endif
#define TOKU_INCLUDE_OPTION_STRUCTS 1
#define TOKU_OPTIMIZE_WITH_RECREATE 1
+#define TOKU_CLUSTERING_IS_COVERING 1
#elif 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799
// mysql 5.7 with no patches
@@ -153,7 +154,7 @@ PATENT RIGHTS GRANT:
#define TOKU_USE_DB_TYPE_TOKUDB 1
#define TOKU_INCLUDE_ALTER_56 0 /* MariaDB 5.5 */
#define TOKU_INCLUDE_ALTER_55 0 /* MariaDB 5.5 */
-#define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 1
+#define TOKU_INCLUDE_ROW_TYPE_COMPRESSION 0 /* MariaDB 5.5 */
#define TOKU_INCLUDE_XA 1
#define TOKU_PARTITION_WRITE_FRM_DATA 0 /* MariaDB 5.5 */
#define TOKU_INCLUDE_WRITE_FRM_DATA 0 /* MariaDB 5.5 */
@@ -161,6 +162,7 @@ PATENT RIGHTS GRANT:
#if defined(MARIADB_BASE_VERSION)
#define TOKU_INCLUDE_EXTENDED_KEYS 1
#define TOKU_INCLUDE_OPTION_STRUCTS 1
+#define TOKU_CLUSTERING_IS_COVERING 1
#endif
#define TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL 0 /* MariaDB 5.5 */
@@ -441,15 +443,18 @@ static inline void *tokudb_my_malloc(size_t s, myf flags) {
}
static inline void *tokudb_my_realloc(void *p, size_t s, myf flags) {
+ if (s == 0)
+ return p;
#if 50700 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID <= 50799
return my_realloc(0, p, s, flags);
#else
- return my_realloc(p, s, flags);
+ return my_realloc(p, s, flags | MY_ALLOW_ZERO_PTR);
#endif
}
static inline void tokudb_my_free(void *ptr) {
- my_free(ptr);
+ if (ptr)
+ my_free(ptr);
}
static inline char *tokudb_my_strdup(const char *p, myf flags) {
diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc
index da4dc178d23..a6af0152088 100644
--- a/storage/tokudb/hatoku_hton.cc
+++ b/storage/tokudb/hatoku_hton.cc
@@ -264,11 +264,15 @@ static uint32_t tokudb_checkpointing_period;
static uint32_t tokudb_fsync_log_period;
uint32_t tokudb_write_status_frequency;
uint32_t tokudb_read_status_frequency;
+
#ifdef TOKUDB_VERSION
-char *tokudb_version = (char*) TOKUDB_VERSION;
+#define tokudb_stringify_2(x) #x
+#define tokudb_stringify(x) tokudb_stringify_2(x)
+#define TOKUDB_VERSION_STR tokudb_stringify(TOKUDB_VERSION)
#else
-char *tokudb_version;
+#define TOKUDB_VERSION_STR NULL
#endif
+char *tokudb_version = (char *) TOKUDB_VERSION_STR;
static int tokudb_fs_reserve_percent; // file system reserve as a percentage of total disk space
#if defined(_WIN32)
@@ -624,8 +628,8 @@ int tokudb_end(handlerton * hton, ha_panic_function type) {
if (db_env) {
if (tokudb_init_flags & DB_INIT_LOG)
tokudb_cleanup_log_files();
-#if TOKU_INCLUDE_XA
long total_prepared = 0; // count the total number of prepared txn's that we discard
+#if TOKU_INCLUDE_XA
while (1) {
// get xid's
const long n_xid = 1;
@@ -1525,6 +1529,8 @@ static int tokudb_file_map(TABLE *table, THD *thd) {
error = schema_table_store_record(thd, table);
}
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
}
if (error == DB_NOTFOUND) {
error = 0;
@@ -1557,7 +1563,7 @@ static int tokudb_file_map_fill_table(THD *thd, TABLE_LIST *tables, COND *cond)
} else {
error = tokudb_file_map(table, thd);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
rw_unlock(&tokudb_hton_initialized_lock);
@@ -1670,6 +1676,8 @@ static int tokudb_fractal_tree_info(TABLE *table, THD *thd) {
if (!error) {
error = tokudb_report_fractal_tree_info_for_db(&curr_key, &curr_val, table, thd);
}
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
}
if (error == DB_NOTFOUND) {
error = 0;
@@ -1704,7 +1712,7 @@ static int tokudb_fractal_tree_info_fill_table(THD *thd, TABLE_LIST *tables, CON
} else {
error = tokudb_fractal_tree_info(table, thd);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
//3938: unlock the status flag lock
@@ -1883,6 +1891,8 @@ static int tokudb_fractal_tree_block_map(TABLE *table, THD *thd) {
if (!error) {
error = tokudb_report_fractal_tree_block_map_for_db(&curr_key, &curr_val, table, thd);
}
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
}
if (error == DB_NOTFOUND) {
error = 0;
@@ -1917,7 +1927,7 @@ static int tokudb_fractal_tree_block_map_fill_table(THD *thd, TABLE_LIST *tables
} else {
error = tokudb_fractal_tree_block_map(table, thd);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
//3938: unlock the status flag lock
@@ -2051,6 +2061,8 @@ static int tokudb_trx_callback(uint64_t txn_id, uint64_t client_id, iterate_row_
table->field[0]->store(txn_id, false);
table->field[1]->store(client_id, false);
int error = schema_table_store_record(thd, table);
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
return error;
}
@@ -2071,7 +2083,7 @@ static int tokudb_trx_fill_table(THD *thd, TABLE_LIST *tables, COND *cond) {
struct tokudb_trx_extra e = { thd, tables->table };
error = db_env->iterate_live_transactions(db_env, tokudb_trx_callback, &e);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
rw_unlock(&tokudb_hton_initialized_lock);
@@ -2134,6 +2146,10 @@ static int tokudb_lock_waits_callback(DB *db, uint64_t requesting_txnid, const D
table->field[8]->store(dictionary_name.c_ptr(), dictionary_name.length(), system_charset_info);
int error = schema_table_store_record(thd, table);
+
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
+
return error;
}
@@ -2154,7 +2170,7 @@ static int tokudb_lock_waits_fill_table(THD *thd, TABLE_LIST *tables, COND *cond
struct tokudb_lock_waits_extra e = { thd, tables->table };
error = db_env->iterate_pending_lock_requests(db_env, tokudb_lock_waits_callback, &e);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
rw_unlock(&tokudb_hton_initialized_lock);
@@ -2221,6 +2237,9 @@ static int tokudb_locks_callback(uint64_t txn_id, uint64_t client_id, iterate_ro
table->field[7]->store(dictionary_name.c_ptr(), dictionary_name.length(), system_charset_info);
error = schema_table_store_record(thd, table);
+
+ if (!error && thd_killed(thd))
+ error = ER_QUERY_INTERRUPTED;
}
return error;
}
@@ -2242,7 +2261,7 @@ static int tokudb_locks_fill_table(THD *thd, TABLE_LIST *tables, COND *cond) {
struct tokudb_locks_extra e = { thd, tables->table };
error = db_env->iterate_live_transactions(db_env, tokudb_locks_callback, &e);
if (error)
- my_error(error, MYF(0));
+ my_error(ER_GET_ERRNO, MYF(0), error, tokudb_hton_name);
}
rw_unlock(&tokudb_hton_initialized_lock);
@@ -2260,9 +2279,6 @@ static int tokudb_locks_done(void *p) {
return 0;
}
-enum { TOKUDB_PLUGIN_VERSION = 0x0400 };
-#define TOKUDB_PLUGIN_VERSION_STR "1024"
-
// Retrieves variables for information_schema.global_status.
// Names (columnname) are automatically converted to upper case, and prefixed with "TOKUDB_"
static int show_tokudb_vars(THD *thd, SHOW_VAR *var, char *buff) {
@@ -2361,7 +2377,17 @@ static void tokudb_backtrace(void) {
}
#endif
+#if defined(TOKUDB_VERSION_MAJOR) && defined(TOKUDB_VERSION_MINOR)
+#define TOKUDB_PLUGIN_VERSION ((TOKUDB_VERSION_MAJOR << 8) + TOKUDB_VERSION_MINOR)
+#else
+#define TOKUDB_PLUGIN_VERSION 0
+#endif
+
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+maria_declare_plugin(tokudb)
+#else
mysql_declare_plugin(tokudb)
+#endif
{
MYSQL_STORAGE_ENGINE_PLUGIN,
&tokudb_storage_engine,
@@ -2371,11 +2397,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_init_func, /* plugin init */
tokudb_done_func, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
toku_global_status_variables_export, /* status variables */
tokudb_system_variables, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2388,11 +2417,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_trx_init, /* plugin init */
tokudb_trx_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2405,11 +2437,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_lock_waits_init, /* plugin init */
tokudb_lock_waits_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2422,11 +2457,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_locks_init, /* plugin init */
tokudb_locks_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2439,11 +2477,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_file_map_init, /* plugin init */
tokudb_file_map_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2456,11 +2497,14 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_fractal_tree_info_init, /* plugin init */
tokudb_fractal_tree_info_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
},
@@ -2473,124 +2517,19 @@ mysql_declare_plugin(tokudb)
PLUGIN_LICENSE_GPL,
tokudb_fractal_tree_block_map_init, /* plugin init */
tokudb_fractal_tree_block_map_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
+ TOKUDB_PLUGIN_VERSION,
NULL, /* status variables */
NULL, /* system variables */
+#ifdef MARIA_PLUGIN_INTERFACE_VERSION
+ tokudb_version,
+ MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
+#else
NULL, /* config options */
-#if MYSQL_VERSION_ID >= 50521
0, /* flags */
#endif
}
-mysql_declare_plugin_end;
-
#ifdef MARIA_PLUGIN_INTERFACE_VERSION
-
-maria_declare_plugin(tokudb)
-{
- MYSQL_STORAGE_ENGINE_PLUGIN,
- &tokudb_storage_engine,
- tokudb_hton_name,
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_init_func, /* plugin init */
- tokudb_done_func, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- toku_global_status_variables_export, /* status variables */
- tokudb_system_variables, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_trx_information_schema,
- "TokuDB_trx",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_trx_init, /* plugin init */
- tokudb_trx_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_lock_waits_information_schema,
- "TokuDB_lock_waits",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_lock_waits_init, /* plugin init */
- tokudb_lock_waits_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_locks_information_schema,
- "TokuDB_locks",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_locks_init, /* plugin init */
- tokudb_locks_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_file_map_information_schema,
- "TokuDB_file_map",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_file_map_init, /* plugin init */
- tokudb_file_map_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_fractal_tree_info_information_schema,
- "TokuDB_fractal_tree_info",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_fractal_tree_info_init, /* plugin init */
- tokudb_fractal_tree_info_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-},
-{
- MYSQL_INFORMATION_SCHEMA_PLUGIN,
- &tokudb_fractal_tree_block_map_information_schema,
- "TokuDB_fractal_tree_block_map",
- "Tokutek Inc",
- "Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology",
- PLUGIN_LICENSE_GPL,
- tokudb_fractal_tree_block_map_init, /* plugin init */
- tokudb_fractal_tree_block_map_done, /* plugin deinit */
- TOKUDB_PLUGIN_VERSION, /* 4.0.0 */
- NULL, /* status variables */
- NULL, /* system variables */
- TOKUDB_PLUGIN_VERSION_STR, /* string version */
- MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
-}
maria_declare_plugin_end;
-
+#else
+mysql_declare_plugin_end;
#endif
diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h
index 58d34f01af6..797e8ff48bc 100644
--- a/storage/tokudb/hatoku_hton.h
+++ b/storage/tokudb/hatoku_hton.h
@@ -427,7 +427,12 @@ static uint64_t tokudb_get_killed_time_callback(uint64_t default_killed_time) {
static int tokudb_killed_callback(void) {
THD *thd = current_thd;
- return thd->killed;
+ return thd_killed(thd);
+}
+
+static bool tokudb_killed_thd_callback(void *extra) {
+ THD *thd = static_cast<THD *>(extra);
+ return thd_killed(thd) != 0;
}
enum {
diff --git a/storage/tokudb/mysql-test/rpl/disabled.def b/storage/tokudb/mysql-test/rpl/disabled.def
new file mode 100644
index 00000000000..efa4be9e16c
--- /dev/null
+++ b/storage/tokudb/mysql-test/rpl/disabled.def
@@ -0,0 +1,12 @@
+rpl_tokudb_delete_pk: unreliable, uses timestamp differences
+rpl_tokudb_delete_pk_lookup1: unreliable, uses timestamp differences
+rpl_tokudb_update_pk_uc0_lookup0: unreliable, uses timestamp differences
+rpl_tokudb_update_pk_uc0_lookup1: unreliable, uses timestamp differences
+rpl_tokudb_update_pk_uc1_lookup0: unreliable, uses timestamp differences
+rpl_tokudb_update_pk_uc1_lookup1: unreliable, uses timestamp differences
+rpl_tokudb_update_unique_uc0_lookup0: unreliable, uses timestamp differences
+rpl_tokudb_update_unique_uc0_lookup1: unreliable, uses timestamp differences
+rpl_tokudb_write_pk: unreliable, uses timestamp differences
+rpl_tokudb_write_pk_uc1: unreliable, uses timestamp differences
+rpl_tokudb_write_unique: unreliable, uses timestamp differences
+rpl_tokudb_write_unique_uc1: unreliable, uses timestamp differences
diff --git a/storage/tokudb/mysql-test/tokudb/disabled.def b/storage/tokudb/mysql-test/tokudb/disabled.def
index a396de4d9c3..10d5947cdaf 100644
--- a/storage/tokudb/mysql-test/tokudb/disabled.def
+++ b/storage/tokudb/mysql-test/tokudb/disabled.def
@@ -26,3 +26,5 @@ mvcc-27: No online OPTIMIZE in MariaDB 5.5
mvcc-19: how this could work, if alter needs an exclusive mdl lock?
mvcc-20: how this could work, if alter needs an exclusive mdl lock?
cluster_key_part: engine options on partitioned tables
+i_s_tokudb_lock_waits_released: unstable, race conditions
+i_s_tokudb_locks_released: unstable, race conditions
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_create_select.result b/storage/tokudb/mysql-test/tokudb/r/bf_create_select.result
index adacf1ed6aa..c98bf2a4b78 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_create_select.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_create_select.result
@@ -1,72 +1,56 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
+drop table if exists t1,t2;
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
-CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
CREATE TABLE t2 AS SELECT count(*) from t1;
DROP TABLE t2;
CREATE TABLE t2 AS SELECT count(*) from t1;
@@ -88,155 +72,127 @@ DROP TABLE t2;
CREATE TABLE t2 AS SELECT count(*) from t1;
DROP TABLE t2;
1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
-CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
1
-drop table t,t1;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_create_select_hash_part.result b/storage/tokudb/mysql-test/tokudb/r/bf_create_select_hash_part.result
index f8c8e6c596d..c352980124c 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_create_select_hash_part.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_create_select_hash_part.result
@@ -1,328 +1,198 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2,t3;
-CREATE TABLE `t` (
-`num` int(10) unsigned auto_increment NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
+drop table if exists t1,t2;
CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
-CREATE TABLE `t2` (
-`num` int(10) unsigned NOT NULL,
+`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
-) PARTITION BY HASH (num)
-PARTITIONS 8 as select * from t;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2;
-DROP TABLE t3;
+) PARTITION BY HASH (num) PARTITIONS 8;
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
1
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
-CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t3;
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
1
-drop table t,t1,t2;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_create_select_range_part.result b/storage/tokudb/mysql-test/tokudb/r/bf_create_select_range_part.result
index 0e055e76d3f..47e3ee7718a 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_create_select_range_part.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_create_select_range_part.result
@@ -1,335 +1,206 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
-`num` int(10) unsigned auto_increment NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
+drop table if exists t1,t2;
CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
-CREATE TABLE `t2` (
-`num` int(10) unsigned NOT NULL,
+`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
) PARTITION BY RANGE (num)
-(PARTITION p0 VALUES LESS THAN (1000000),
-PARTITION p1 VALUES LESS THAN (2000000),
-PARTITION p2 VALUES LESS THAN (3000000),
-PARTITION p3 VALUES LESS THAN (4000000),
-PARTITION p4 VALUES LESS THAN (5000000),
-PARTITION p5 VALUES LESS THAN (6000000),
-PARTITION p6 VALUES LESS THAN (7000000),
-PARTITION p7 VALUES LESS THAN MAXVALUE) as select * from t;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1;
-count(*)
-8388608
-DROP TABLE t3;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2;
-DROP TABLE t4;
+(PARTITION p0 VALUES LESS THAN (100000),
+PARTITION p1 VALUES LESS THAN (200000),
+PARTITION p2 VALUES LESS THAN (300000),
+PARTITION p3 VALUES LESS THAN (400000),
+PARTITION p4 VALUES LESS THAN (500000),
+PARTITION p5 VALUES LESS THAN (600000),
+PARTITION p6 VALUES LESS THAN (700000),
+PARTITION p7 VALUES LESS THAN MAXVALUE);
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
1
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE `t3` (`x` bigint);
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-DROP TABLE t3;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
-CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
-DROP TABLE t4;
+set tokudb_bulk_fetch=ON;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
1
-drop table t,t1,t2;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_create_temp_select.result b/storage/tokudb/mysql-test/tokudb/r/bf_create_temp_select.result
index 6eddfaa9e82..543bd795e2e 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_create_temp_select.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_create_temp_select.result
@@ -1,242 +1,198 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
+drop table if exists t1,t2;
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
-CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
-DROP TEMPORARY TABLE t2;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+DROP TABLE t2;
1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
-CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
-DROP TEMPORARY TABLE t2;
+set tokudb_bulk_fetch=ON;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+set tokudb_bulk_fetch=OFF;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
+CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+DROP TABLE t2;
1
-drop table t,t1;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_insert_select.result b/storage/tokudb/mysql-test/tokudb/r/bf_insert_select.result
index ba7d0f63cd6..403e5ec5938 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_insert_select.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_insert_select.result
@@ -1,75 +1,69 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
+drop table if exists t1,t2;
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
-CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
CREATE TABLE `t2` (
`count` bigint(20) NOT NULL
-) ENGINE=TokuDB DEFAULT CHARSET=latin1;
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
+);
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+set tokudb_bulk_fetch=OFF;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
+INSERT into t2 SELECT count(*) from t1;
INSERT into t2 SELECT count(*) from t1;
INSERT into t2 SELECT count(*) from t1;
INSERT into t2 SELECT count(*) from t1;
@@ -81,125 +75,47 @@ INSERT into t2 SELECT count(*) from t1;
INSERT into t2 SELECT count(*) from t1;
INSERT into t2 SELECT count(*) from t1;
1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT into t2 SELECT count(*) from t1 where num > 7000000;
+set tokudb_bulk_fetch=ON;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+set tokudb_bulk_fetch=OFF;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
+INSERT into t2 SELECT count(*) from t1 where num > 700000;
1
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_insert_select_dup_key.result b/storage/tokudb/mysql-test/tokudb/r/bf_insert_select_dup_key.result
index 22e2846d181..a725c4d8aca 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_insert_select_dup_key.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_insert_select_dup_key.result
@@ -1,77 +1,71 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
+drop table if exists t1,t2;
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
-CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
CREATE TABLE `t2` (
`num` int(10) unsigned auto_increment NOT NULL,
`count` bigint(20) NOT NULL,
UNIQUE (num)
-) ENGINE=TokuDB DEFAULT CHARSET=latin1;
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
+);
+set tokudb_bulk_fetch=ON;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+set tokudb_bulk_fetch=OFF;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
@@ -83,125 +77,47 @@ INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
-INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
+set tokudb_bulk_fetch=ON;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+set tokudb_bulk_fetch=OFF;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
+INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
1
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_replace_select.result b/storage/tokudb/mysql-test/tokudb/r/bf_replace_select.result
index eab0f103ed6..a175797685c 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_replace_select.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_replace_select.result
@@ -1,75 +1,69 @@
set default_storage_engine='tokudb';
-drop table if exists t,t1,t2;
-CREATE TABLE `t` (
+drop table if exists t1,t2;
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-count(*)
-8388608
-CREATE TABLE `t1` (
-`num` int(10) unsigned NOT NULL,
-`val` varchar(32) DEFAULT NULL,
-PRIMARY KEY (`num`)
-) as select * from t;
CREATE TABLE `t2` (
`count` bigint(20) NOT NULL
-) ENGINE=TokuDB DEFAULT CHARSET=latin1;
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
+);
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+count(*)
+1048576
+set tokudb_bulk_fetch=ON;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+set tokudb_bulk_fetch=OFF;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
+REPLACE into t2 SELECT count(*) from t1;
REPLACE into t2 SELECT count(*) from t1;
REPLACE into t2 SELECT count(*) from t1;
REPLACE into t2 SELECT count(*) from t1;
@@ -81,287 +75,47 @@ REPLACE into t2 SELECT count(*) from t1;
REPLACE into t2 SELECT count(*) from t1;
REPLACE into t2 SELECT count(*) from t1;
1
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-SELECT count(*) from t1;
-count(*)
-8388608
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-INSERT IGNORE into t2 SELECT count(*) from t1;
-1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
-1
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-SELECT count(*) from t1 where num > 7000000;
-count(*)
-1847274
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
-INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
+set tokudb_bulk_fetch=ON;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+set tokudb_bulk_fetch=OFF;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
+REPLACE into t2 SELECT count(*) from t1 where num > 700000;
1
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/r/bf_select_range_part.result b/storage/tokudb/mysql-test/tokudb/r/bf_select_range_part.result
index c13324aa34e..cc6c16bc92a 100644
--- a/storage/tokudb/mysql-test/tokudb/r/bf_select_range_part.result
+++ b/storage/tokudb/mysql-test/tokudb/r/bf_select_range_part.result
@@ -98,6 +98,36 @@ count(*)
SELECT count(*) from t;
count(*)
1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
set tokudb_bulk_fetch=OFF;
SELECT count(*) from t;
count(*)
@@ -159,6 +189,36 @@ count(*)
SELECT count(*) from t;
count(*)
1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
+SELECT count(*) from t;
+count(*)
+1048576
1
set tokudb_bulk_fetch=ON;
SELECT count(*) from t where num > 700000;
@@ -221,6 +281,36 @@ count(*)
SELECT count(*) from t where num > 700000;
count(*)
348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
set tokudb_bulk_fetch=OFF;
SELECT count(*) from t where num > 700000;
count(*)
@@ -282,5 +372,35 @@ count(*)
SELECT count(*) from t where num > 700000;
count(*)
348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
+SELECT count(*) from t where num > 700000;
+count(*)
+348576
1
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb/r/card_drop_index_2.result b/storage/tokudb/mysql-test/tokudb/r/card_drop_index_2.result
new file mode 100644
index 00000000000..4103a37a6ed
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb/r/card_drop_index_2.result
@@ -0,0 +1,158 @@
+set default_storage_engine='tokudb';
+drop table if exists tt;
+create table tt (a int, b int, c int, primary key(a), key(b), key(c));
+insert into tt values (0, 0, 0), (0+1, 0, 0), (0+2, 0, 0), (0+3, 0, 0);
+insert into tt values (4, 4, 0), (4+1, 4, 0), (4+2, 4, 0), (4+3, 4, 0);
+insert into tt values (8, 8, 0), (8+1, 8, 0), (8+2, 8, 0), (8+3, 8, 0);
+insert into tt values (12, 12, 0), (12+1, 12, 0), (12+2, 12, 0), (12+3, 12, 0);
+insert into tt values (16, 16, 0), (16+1, 16, 0), (16+2, 16, 0), (16+3, 16, 0);
+insert into tt values (20, 20, 0), (20+1, 20, 0), (20+2, 20, 0), (20+3, 20, 0);
+insert into tt values (24, 24, 0), (24+1, 24, 0), (24+2, 24, 0), (24+3, 24, 0);
+insert into tt values (28, 28, 0), (28+1, 28, 0), (28+2, 28, 0), (28+3, 28, 0);
+insert into tt values (32, 32, 0), (32+1, 32, 0), (32+2, 32, 0), (32+3, 32, 0);
+insert into tt values (36, 36, 0), (36+1, 36, 0), (36+2, 36, 0), (36+3, 36, 0);
+insert into tt values (40, 40, 0), (40+1, 40, 0), (40+2, 40, 0), (40+3, 40, 0);
+insert into tt values (44, 44, 0), (44+1, 44, 0), (44+2, 44, 0), (44+3, 44, 0);
+insert into tt values (48, 48, 0), (48+1, 48, 0), (48+2, 48, 0), (48+3, 48, 0);
+insert into tt values (52, 52, 0), (52+1, 52, 0), (52+2, 52, 0), (52+3, 52, 0);
+insert into tt values (56, 56, 0), (56+1, 56, 0), (56+2, 56, 0), (56+3, 56, 0);
+insert into tt values (60, 60, 0), (60+1, 60, 0), (60+2, 60, 0), (60+3, 60, 0);
+insert into tt values (64, 64, 0), (64+1, 64, 0), (64+2, 64, 0), (64+3, 64, 0);
+insert into tt values (68, 68, 0), (68+1, 68, 0), (68+2, 68, 0), (68+3, 68, 0);
+insert into tt values (72, 72, 0), (72+1, 72, 0), (72+2, 72, 0), (72+3, 72, 0);
+insert into tt values (76, 76, 0), (76+1, 76, 0), (76+2, 76, 0), (76+3, 76, 0);
+insert into tt values (80, 80, 0), (80+1, 80, 0), (80+2, 80, 0), (80+3, 80, 0);
+insert into tt values (84, 84, 0), (84+1, 84, 0), (84+2, 84, 0), (84+3, 84, 0);
+insert into tt values (88, 88, 0), (88+1, 88, 0), (88+2, 88, 0), (88+3, 88, 0);
+insert into tt values (92, 92, 0), (92+1, 92, 0), (92+2, 92, 0), (92+3, 92, 0);
+insert into tt values (96, 96, 0), (96+1, 96, 0), (96+2, 96, 0), (96+3, 96, 0);
+insert into tt values (100, 100, 0), (100+1, 100, 0), (100+2, 100, 0), (100+3, 100, 0);
+insert into tt values (104, 104, 0), (104+1, 104, 0), (104+2, 104, 0), (104+3, 104, 0);
+insert into tt values (108, 108, 0), (108+1, 108, 0), (108+2, 108, 0), (108+3, 108, 0);
+insert into tt values (112, 112, 0), (112+1, 112, 0), (112+2, 112, 0), (112+3, 112, 0);
+insert into tt values (116, 116, 0), (116+1, 116, 0), (116+2, 116, 0), (116+3, 116, 0);
+insert into tt values (120, 120, 0), (120+1, 120, 0), (120+2, 120, 0), (120+3, 120, 0);
+insert into tt values (124, 124, 0), (124+1, 124, 0), (124+2, 124, 0), (124+3, 124, 0);
+insert into tt values (128, 128, 0), (128+1, 128, 0), (128+2, 128, 0), (128+3, 128, 0);
+insert into tt values (132, 132, 0), (132+1, 132, 0), (132+2, 132, 0), (132+3, 132, 0);
+insert into tt values (136, 136, 0), (136+1, 136, 0), (136+2, 136, 0), (136+3, 136, 0);
+insert into tt values (140, 140, 0), (140+1, 140, 0), (140+2, 140, 0), (140+3, 140, 0);
+insert into tt values (144, 144, 0), (144+1, 144, 0), (144+2, 144, 0), (144+3, 144, 0);
+insert into tt values (148, 148, 0), (148+1, 148, 0), (148+2, 148, 0), (148+3, 148, 0);
+insert into tt values (152, 152, 0), (152+1, 152, 0), (152+2, 152, 0), (152+3, 152, 0);
+insert into tt values (156, 156, 0), (156+1, 156, 0), (156+2, 156, 0), (156+3, 156, 0);
+insert into tt values (160, 160, 0), (160+1, 160, 0), (160+2, 160, 0), (160+3, 160, 0);
+insert into tt values (164, 164, 0), (164+1, 164, 0), (164+2, 164, 0), (164+3, 164, 0);
+insert into tt values (168, 168, 0), (168+1, 168, 0), (168+2, 168, 0), (168+3, 168, 0);
+insert into tt values (172, 172, 0), (172+1, 172, 0), (172+2, 172, 0), (172+3, 172, 0);
+insert into tt values (176, 176, 0), (176+1, 176, 0), (176+2, 176, 0), (176+3, 176, 0);
+insert into tt values (180, 180, 0), (180+1, 180, 0), (180+2, 180, 0), (180+3, 180, 0);
+insert into tt values (184, 184, 0), (184+1, 184, 0), (184+2, 184, 0), (184+3, 184, 0);
+insert into tt values (188, 188, 0), (188+1, 188, 0), (188+2, 188, 0), (188+3, 188, 0);
+insert into tt values (192, 192, 0), (192+1, 192, 0), (192+2, 192, 0), (192+3, 192, 0);
+insert into tt values (196, 196, 0), (196+1, 196, 0), (196+2, 196, 0), (196+3, 196, 0);
+insert into tt values (200, 200, 0), (200+1, 200, 0), (200+2, 200, 0), (200+3, 200, 0);
+insert into tt values (204, 204, 0), (204+1, 204, 0), (204+2, 204, 0), (204+3, 204, 0);
+insert into tt values (208, 208, 0), (208+1, 208, 0), (208+2, 208, 0), (208+3, 208, 0);
+insert into tt values (212, 212, 0), (212+1, 212, 0), (212+2, 212, 0), (212+3, 212, 0);
+insert into tt values (216, 216, 0), (216+1, 216, 0), (216+2, 216, 0), (216+3, 216, 0);
+insert into tt values (220, 220, 0), (220+1, 220, 0), (220+2, 220, 0), (220+3, 220, 0);
+insert into tt values (224, 224, 0), (224+1, 224, 0), (224+2, 224, 0), (224+3, 224, 0);
+insert into tt values (228, 228, 0), (228+1, 228, 0), (228+2, 228, 0), (228+3, 228, 0);
+insert into tt values (232, 232, 0), (232+1, 232, 0), (232+2, 232, 0), (232+3, 232, 0);
+insert into tt values (236, 236, 0), (236+1, 236, 0), (236+2, 236, 0), (236+3, 236, 0);
+insert into tt values (240, 240, 0), (240+1, 240, 0), (240+2, 240, 0), (240+3, 240, 0);
+insert into tt values (244, 244, 0), (244+1, 244, 0), (244+2, 244, 0), (244+3, 244, 0);
+insert into tt values (248, 248, 0), (248+1, 248, 0), (248+2, 248, 0), (248+3, 248, 0);
+insert into tt values (252, 252, 0), (252+1, 252, 0), (252+2, 252, 0), (252+3, 252, 0);
+insert into tt values (256, 256, 0), (256+1, 256, 0), (256+2, 256, 0), (256+3, 256, 0);
+insert into tt values (260, 260, 0), (260+1, 260, 0), (260+2, 260, 0), (260+3, 260, 0);
+insert into tt values (264, 264, 0), (264+1, 264, 0), (264+2, 264, 0), (264+3, 264, 0);
+insert into tt values (268, 268, 0), (268+1, 268, 0), (268+2, 268, 0), (268+3, 268, 0);
+insert into tt values (272, 272, 0), (272+1, 272, 0), (272+2, 272, 0), (272+3, 272, 0);
+insert into tt values (276, 276, 0), (276+1, 276, 0), (276+2, 276, 0), (276+3, 276, 0);
+insert into tt values (280, 280, 0), (280+1, 280, 0), (280+2, 280, 0), (280+3, 280, 0);
+insert into tt values (284, 284, 0), (284+1, 284, 0), (284+2, 284, 0), (284+3, 284, 0);
+insert into tt values (288, 288, 0), (288+1, 288, 0), (288+2, 288, 0), (288+3, 288, 0);
+insert into tt values (292, 292, 0), (292+1, 292, 0), (292+2, 292, 0), (292+3, 292, 0);
+insert into tt values (296, 296, 0), (296+1, 296, 0), (296+2, 296, 0), (296+3, 296, 0);
+insert into tt values (300, 300, 0), (300+1, 300, 0), (300+2, 300, 0), (300+3, 300, 0);
+insert into tt values (304, 304, 0), (304+1, 304, 0), (304+2, 304, 0), (304+3, 304, 0);
+insert into tt values (308, 308, 0), (308+1, 308, 0), (308+2, 308, 0), (308+3, 308, 0);
+insert into tt values (312, 312, 0), (312+1, 312, 0), (312+2, 312, 0), (312+3, 312, 0);
+insert into tt values (316, 316, 0), (316+1, 316, 0), (316+2, 316, 0), (316+3, 316, 0);
+insert into tt values (320, 320, 0), (320+1, 320, 0), (320+2, 320, 0), (320+3, 320, 0);
+insert into tt values (324, 324, 0), (324+1, 324, 0), (324+2, 324, 0), (324+3, 324, 0);
+insert into tt values (328, 328, 0), (328+1, 328, 0), (328+2, 328, 0), (328+3, 328, 0);
+insert into tt values (332, 332, 0), (332+1, 332, 0), (332+2, 332, 0), (332+3, 332, 0);
+insert into tt values (336, 336, 0), (336+1, 336, 0), (336+2, 336, 0), (336+3, 336, 0);
+insert into tt values (340, 340, 0), (340+1, 340, 0), (340+2, 340, 0), (340+3, 340, 0);
+insert into tt values (344, 344, 0), (344+1, 344, 0), (344+2, 344, 0), (344+3, 344, 0);
+insert into tt values (348, 348, 0), (348+1, 348, 0), (348+2, 348, 0), (348+3, 348, 0);
+insert into tt values (352, 352, 0), (352+1, 352, 0), (352+2, 352, 0), (352+3, 352, 0);
+insert into tt values (356, 356, 0), (356+1, 356, 0), (356+2, 356, 0), (356+3, 356, 0);
+insert into tt values (360, 360, 0), (360+1, 360, 0), (360+2, 360, 0), (360+3, 360, 0);
+insert into tt values (364, 364, 0), (364+1, 364, 0), (364+2, 364, 0), (364+3, 364, 0);
+insert into tt values (368, 368, 0), (368+1, 368, 0), (368+2, 368, 0), (368+3, 368, 0);
+insert into tt values (372, 372, 0), (372+1, 372, 0), (372+2, 372, 0), (372+3, 372, 0);
+insert into tt values (376, 376, 0), (376+1, 376, 0), (376+2, 376, 0), (376+3, 376, 0);
+insert into tt values (380, 380, 0), (380+1, 380, 0), (380+2, 380, 0), (380+3, 380, 0);
+insert into tt values (384, 384, 0), (384+1, 384, 0), (384+2, 384, 0), (384+3, 384, 0);
+insert into tt values (388, 388, 0), (388+1, 388, 0), (388+2, 388, 0), (388+3, 388, 0);
+insert into tt values (392, 392, 0), (392+1, 392, 0), (392+2, 392, 0), (392+3, 392, 0);
+insert into tt values (396, 396, 0), (396+1, 396, 0), (396+2, 396, 0), (396+3, 396, 0);
+insert into tt values (400, 400, 0), (400+1, 400, 0), (400+2, 400, 0), (400+3, 400, 0);
+insert into tt values (404, 404, 0), (404+1, 404, 0), (404+2, 404, 0), (404+3, 404, 0);
+insert into tt values (408, 408, 0), (408+1, 408, 0), (408+2, 408, 0), (408+3, 408, 0);
+insert into tt values (412, 412, 0), (412+1, 412, 0), (412+2, 412, 0), (412+3, 412, 0);
+insert into tt values (416, 416, 0), (416+1, 416, 0), (416+2, 416, 0), (416+3, 416, 0);
+insert into tt values (420, 420, 0), (420+1, 420, 0), (420+2, 420, 0), (420+3, 420, 0);
+insert into tt values (424, 424, 0), (424+1, 424, 0), (424+2, 424, 0), (424+3, 424, 0);
+insert into tt values (428, 428, 0), (428+1, 428, 0), (428+2, 428, 0), (428+3, 428, 0);
+insert into tt values (432, 432, 0), (432+1, 432, 0), (432+2, 432, 0), (432+3, 432, 0);
+insert into tt values (436, 436, 0), (436+1, 436, 0), (436+2, 436, 0), (436+3, 436, 0);
+insert into tt values (440, 440, 0), (440+1, 440, 0), (440+2, 440, 0), (440+3, 440, 0);
+insert into tt values (444, 444, 0), (444+1, 444, 0), (444+2, 444, 0), (444+3, 444, 0);
+insert into tt values (448, 448, 0), (448+1, 448, 0), (448+2, 448, 0), (448+3, 448, 0);
+insert into tt values (452, 452, 0), (452+1, 452, 0), (452+2, 452, 0), (452+3, 452, 0);
+insert into tt values (456, 456, 0), (456+1, 456, 0), (456+2, 456, 0), (456+3, 456, 0);
+insert into tt values (460, 460, 0), (460+1, 460, 0), (460+2, 460, 0), (460+3, 460, 0);
+insert into tt values (464, 464, 0), (464+1, 464, 0), (464+2, 464, 0), (464+3, 464, 0);
+insert into tt values (468, 468, 0), (468+1, 468, 0), (468+2, 468, 0), (468+3, 468, 0);
+insert into tt values (472, 472, 0), (472+1, 472, 0), (472+2, 472, 0), (472+3, 472, 0);
+insert into tt values (476, 476, 0), (476+1, 476, 0), (476+2, 476, 0), (476+3, 476, 0);
+insert into tt values (480, 480, 0), (480+1, 480, 0), (480+2, 480, 0), (480+3, 480, 0);
+insert into tt values (484, 484, 0), (484+1, 484, 0), (484+2, 484, 0), (484+3, 484, 0);
+insert into tt values (488, 488, 0), (488+1, 488, 0), (488+2, 488, 0), (488+3, 488, 0);
+insert into tt values (492, 492, 0), (492+1, 492, 0), (492+2, 492, 0), (492+3, 492, 0);
+insert into tt values (496, 496, 0), (496+1, 496, 0), (496+2, 496, 0), (496+3, 496, 0);
+select count(*) from tt;
+count(*)
+500
+show indexes from tt;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+tt 0 PRIMARY 1 a A 500 NULL NULL BTREE
+tt 1 b 1 b A NULL NULL NULL YES BTREE
+tt 1 c 1 c A NULL NULL NULL YES BTREE
+analyze table tt;
+Table Op Msg_type Msg_text
+test.tt analyze status OK
+show indexes from tt;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+tt 0 PRIMARY 1 a A 500 NULL NULL BTREE
+tt 1 b 1 b A 125 NULL NULL YES BTREE
+tt 1 c 1 c A 1 NULL NULL YES BTREE
+alter table tt drop key b;
+show indexes from tt;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+tt 0 PRIMARY 1 a A 500 NULL NULL BTREE
+tt 1 c 1 c A 1 NULL NULL YES BTREE
+alter table tt drop key c;
+show indexes from tt;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+tt 0 PRIMARY 1 a A 500 NULL NULL BTREE
+flush tables;
+show indexes from tt;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+tt 0 PRIMARY 1 a A 500 NULL NULL BTREE
+drop table tt;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test
index a8b7f9c9f6a..20455da874f 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test
@@ -6,64 +6,56 @@ source include/have_tokudb.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create first table from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
-let $s = `select to_seconds(now())`;
+let $maxq = 10;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ CREATE TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
CREATE TABLE t2 AS SELECT count(*) from t1;
@@ -71,48 +63,41 @@ while ($i < $maxq) {
inc $i;
}
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# Check that the time with bulk fetch off is at least twice that whith bulk fetch on
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; }
+if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; }
-let $maxrq = 30;
+let $maxq = 30;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
DROP TABLE t2;
inc $i;
}
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# Check that the time with bulk fetch off is at least twice that whith bulk fetch on
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; }
+if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; }
-drop table t,t1;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test
index b9ec8c52aa8..4df0a138be8 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test
@@ -7,137 +7,96 @@ source include/have_partition.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2,t3;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
-
-CREATE TABLE `t` (
- `num` int(10) unsigned auto_increment NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-);
-
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create base table (control table) from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
+let $debug = 0;
# Create source hash partitioned table from source table t
-CREATE TABLE `t2` (
- `num` int(10) unsigned NOT NULL,
+CREATE TABLE `t1` (
+ `num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
-) PARTITION BY HASH (num)
-PARTITIONS 8 as select * from t;
-
-let $s = `select to_seconds(now())`;
+) PARTITION BY HASH (num) PARTITIONS 8;
+
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+
+let $maxq = 20;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- CREATE TABLE `t3` (`x` bigint);
- SELECT count(*) from t1;
- DROP TABLE t3;
+ CREATE TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- CREATE TABLE t3 AS SELECT count(*) from t2;
- DROP TABLE t3;
+ CREATE TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
-
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-# Additionally, it is important to note that 1.5 is the multiplier applied to the time_elapsed_select
-# value because it appears that MySQL 5.5.39 uses a sorted index scan during the create select statement
-# while Percona Server 5.6 uses an unsorted index scan.
-# The issue has been resolved in MySQL 5.6 but still persists in Maria 10.0.12
-# in the defect found at https://mariadb.atlassian.net/browse/MDEV-6547.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= 1.5 * $time_elapsed_select`;
+# check that bulk fetch on is at least 1.5 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`;
echo $verdict;
-if (!$verdict) { echo index scan t2 $time_elapsed_create_select $time_elapsed_select; }
+if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; }
-let $maxrq = 30;
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TABLE `t3` (`x` bigint);
- SELECT count(*) from t1 where num > 7000000;
- DROP TABLE t3;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TABLE t3 AS SELECT count(*) from t2 where num > 7000000;
- DROP TABLE t3;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
-
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-# Additionally, it is important to note that 1.5 is the multiplier applied to the time_elapsed_select
-# value because it appears that MySQL 5.5.39 uses a sorted index scan during the create select statement
-# while Percona Server 5.6 uses an unsorted index scan.
-# The issue has been resolved in MySQL 5.6 but still persists in Maria 10.0.12
-# in the defect found at https://mariadb.atlassian.net/browse/MDEV-6547.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= 1.5 * $time_elapsed_select`;
+# check that bulk fetch on is at least 1.5 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`;
echo $verdict;
-if (!$verdict) { echo range scan t2 $time_elapsed_create_select $time_elapsed_select; }
+if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; }
-drop table t,t1,t2;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test
index a48f272b84f..b66b2c42808 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test
@@ -7,132 +7,103 @@ source include/have_partition.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
- `num` int(10) unsigned auto_increment NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-);
-
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create base table (control table) from source table t
CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
-
-# Create source range partitioned table from source table t
-CREATE TABLE `t2` (
- `num` int(10) unsigned NOT NULL,
+ `num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
) PARTITION BY RANGE (num)
-(PARTITION p0 VALUES LESS THAN (1000000),
- PARTITION p1 VALUES LESS THAN (2000000),
- PARTITION p2 VALUES LESS THAN (3000000),
- PARTITION p3 VALUES LESS THAN (4000000),
- PARTITION p4 VALUES LESS THAN (5000000),
- PARTITION p5 VALUES LESS THAN (6000000),
- PARTITION p6 VALUES LESS THAN (7000000),
- PARTITION p7 VALUES LESS THAN MAXVALUE) as select * from t;
-
-let $s = `select to_seconds(now())`;
+(PARTITION p0 VALUES LESS THAN (100000),
+ PARTITION p1 VALUES LESS THAN (200000),
+ PARTITION p2 VALUES LESS THAN (300000),
+ PARTITION p3 VALUES LESS THAN (400000),
+ PARTITION p4 VALUES LESS THAN (500000),
+ PARTITION p5 VALUES LESS THAN (600000),
+ PARTITION p6 VALUES LESS THAN (700000),
+ PARTITION p7 VALUES LESS THAN MAXVALUE);
+
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+
+let $maxq = 20;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- CREATE TABLE `t3` (`x` bigint);
- SELECT count(*) from t1;
- DROP TABLE t3;
+ CREATE TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- CREATE TABLE t4 AS SELECT count(*) from t2;
- DROP TABLE t4;
+ CREATE TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
-
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; }
-let $maxrq = 30;
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TABLE `t3` (`x` bigint);
- SELECT count(*) from t1 where num > 7000000;
- DROP TABLE t3;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TABLE t4 AS SELECT count(*) from t2 where num > 7000000;
- DROP TABLE t4;
+while ($i < $maxq) {
+ CREATE TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
-
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; }
-drop table t,t1,t2;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test
index fdd665076c9..52cb886a410 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test
@@ -1,118 +1,103 @@
# Verify that index and range scans are not slow
-# on temporary tables during create select statements
+# on tables during create select statements
# due to tokudb bulk fetch not being used
source include/have_tokudb.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
-# Create first table from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
-
-let $s = `select to_seconds(now())`;
+let $maxq = 10;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1;
- DROP TEMPORARY TABLE t2;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_create_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# Check that the time with bulk fetch off is at least twice that whith bulk fetch on
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; }
+if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; }
-let $maxrq = 30;
+let $maxq = 30;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_select seconds.;
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 7000000;
- DROP TEMPORARY TABLE t2;
+while ($i < $maxq) {
+ CREATE TEMPORARY TABLE t2 AS SELECT count(*) from t1 where num > 700000;
+ DROP TABLE t2;
inc $i;
}
-let $time_elapsed_create_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_create_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the create select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_create_select - $time_elapsed_select) <= $time_elapsed_select`;
+# Check that the time with bulk fetch off is at least twice that whith bulk fetch on
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; }
+if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; }
-drop table t,t1;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_delete.test b/storage/tokudb/mysql-test/tokudb/t/bf_delete.test
index 65b26df230e..f98e87f1ec1 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_delete.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_delete.test
@@ -8,6 +8,8 @@ disable_warnings;
drop table if exists t;
enable_warnings;
+let $debug = 0;
+
CREATE TABLE `t` (id bigint not null auto_increment primary key, val bigint not null default 0);
# put 8M rows into t
@@ -42,27 +44,28 @@ let $maxq = 10;
# measure the time to do $maxq deletes from t that affect no rows with bulk fetch ON
set tokudb_bulk_fetch = ON;
-let $s = `select to_seconds(now())`;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
delete from t where val > 0;
inc $i;
}
-let $time_elapsed_bf_on = `select to_seconds(now()) - $s`;
+let $time_elapsed_bf_on = `select unix_timestamp() - $s`;
# measure the time to do $maxq deletes from t that affect no rows with bulk fetch OFF
set tokudb_bulk_fetch = OFF;
-let $s = `select to_seconds(now())`;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
delete from t where val > 0;
inc $i;
}
-let $time_elapsed_bf_off = `select to_seconds(now()) - $s`;
+let $time_elapsed_bf_off = `select unix_timestamp() - $s`;
# verify that a delete scan with bulk fetch ON is at least 2 times faster than with bulk fetch OFF
-let $verdict = `select $time_elapsed_bf_off > $time_elapsed_bf_on && ($time_elapsed_bf_off - $time_elapsed_bf_on) / $time_elapsed_bf_on >= 2`;
+let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off >= 2 * $time_elapsed_bf_on`;
echo $verdict;
-if (!$verdict) { echo $time_elapsed_bf_on $time_elapsed_bf_off; }
+if ($debug) { echo range $verdict $time_elapsed_bf_on $time_elapsed_bf_off; }
+if (!$verdict) { echo range $time_elapsed_bf_on $time_elapsed_bf_off; }
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test
index 11f14013a30..5fcb8fa58b5 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test
@@ -6,117 +6,95 @@ source include/have_tokudb.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create first table from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
-
# Create second table t2 that will serve as the target for the insert select statment
CREATE TABLE `t2` (
`count` bigint(20) NOT NULL
- ) ENGINE=TokuDB DEFAULT CHARSET=latin1;
-
+);
-let $s = `select to_seconds(now())`;
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+
+let $maxq = 20;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ INSERT into t2 SELECT count(*) from t1;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
INSERT into t2 SELECT count(*) from t1;
inc $i;
}
-let $time_elapsed_insert_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_insert_select seconds.;
-
-# This check evaluates whether the time elapsed during the insert select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; }
-let $maxrq = 30;
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ INSERT into t2 SELECT count(*) from t1 where num > 700000;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the insert select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-#echo Range scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- INSERT into t2 SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ INSERT into t2 SELECT count(*) from t1 where num > 700000;
inc $i;
}
-let $time_elapsed_insert_select = `select to_seconds(now()) - $s`;
-
-# This check evaluates whether the time elapsed during the insert select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-#echo Range scans took $time_elapsed_insert_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the insert select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_select - $time_elapsed_select) <= $time_elapsed_select`;
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; }
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test
index 3200beeaba9..51c6d66d706 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test
@@ -8,120 +8,98 @@ source include/have_tokudb.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create first table from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
# Create second table t2 that will serve as the target for the insert select statment
CREATE TABLE `t2` (
`num` int(10) unsigned auto_increment NOT NULL,
`count` bigint(20) NOT NULL,
UNIQUE (num)
- ) ENGINE=TokuDB DEFAULT CHARSET=latin1;
+);
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
INSERT into t2 (num,count) SELECT NULL,count(*) from t1 on DUPLICATE KEY UPDATE count=count+1;
inc $i;
}
-let $time_elapsed_insert_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_insert_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the insert select on duplicate key statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; }
-let $maxrq = 30;
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
+while ($i < $maxq) {
+ INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_select seconds.;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
-while ($i < $maxrq) {
- INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 7000000 on DUPLICATE KEY UPDATE count=count+1;
+while ($i < $maxq) {
+ INSERT into t2 (num,count) SELECT NULL,count(*) from t1 where num > 700000 on DUPLICATE KEY UPDATE count=count+1;
inc $i;
}
-let $time_elapsed_insert_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_insert_select seconds.;
-
-# This check evaluates whether the time elapsed during the insert select on duplicate key statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; }
-enable_warnings;
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test
index 380eb5adda8..1ca754454eb 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test
@@ -1,190 +1,100 @@
# Verify that index and range scans are not slow
-# on tables during replace select and insert ignore statements
+# on tables during replace select statements
# due to tokudb bulk fetch not being used
source include/have_tokudb.inc;
source include/big_test.inc;
set default_storage_engine='tokudb';
disable_warnings;
-drop table if exists t,t1,t2;
+drop table if exists t1,t2;
enable_warnings;
-let $maxq = 10;
+let $debug = 0;
-CREATE TABLE `t` (
+CREATE TABLE `t1` (
`num` int(10) unsigned auto_increment NOT NULL,
`val` varchar(32) DEFAULT NULL,
PRIMARY KEY (`num`)
);
-# put 8M rows into t
-INSERT INTO t values (null,null);
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-INSERT INTO t SELECT null,val FROM t;
-SELECT count(*) FROM t;
-
-# Create first table from source table t
-CREATE TABLE `t1` (
- `num` int(10) unsigned NOT NULL,
- `val` varchar(32) DEFAULT NULL,
- PRIMARY KEY (`num`)
-) as select * from t;
-
-# Create second table t2 that will serve as the target for the replace select statment
+# Create second table t2 that will serve as the target for the insert select statment
CREATE TABLE `t2` (
`count` bigint(20) NOT NULL
- ) ENGINE=TokuDB DEFAULT CHARSET=latin1;
-
+);
-let $s = `select to_seconds(now())`;
+# put 1M rows into t1
+INSERT INTO t1 values (null,null);
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+INSERT INTO t1 SELECT null,val FROM t1;
+SELECT count(*) FROM t1;
+
+let $maxq = 20;
+
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ REPLACE into t2 SELECT count(*) from t1;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
REPLACE into t2 SELECT count(*) from t1;
inc $i;
}
-let $time_elapsed_replace_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_replace_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the replace select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_replace_select - $time_elapsed_select) <= $time_elapsed_select`;
+# check that bulk fetch on is at least 2 times faster than bulk fetch off
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; }
-##############################################################
+let $maxq = 20;
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=ON;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- SELECT count(*) from t1;
+ REPLACE into t2 SELECT count(*) from t1 where num > 700000;
inc $i;
}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
+let $time_elapsed_on = `select unix_timestamp() - $s`;
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
+set tokudb_bulk_fetch=OFF;
+let $s = `select unix_timestamp()`;
let $i = 0;
while ($i < $maxq) {
- INSERT IGNORE into t2 SELECT count(*) from t1;
+ REPLACE into t2 SELECT count(*) from t1 where num > 700000;
inc $i;
}
-let $time_elapsed_insert_ignore_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Index scans took $time_elapsed_insert_ignore_select seconds.;
+let $time_elapsed_off = `select unix_timestamp() - $s`;
-# This check evaluates whether the time elapsed during the insert ignore select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_ignore_select - $time_elapsed_select) <= $time_elapsed_select`;
+let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`;
echo $verdict;
+if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; }
+if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; }
-##################################################################
-
-let $maxrq = 30;
-
-let $s = `select to_seconds(now())`;
-let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
- inc $i;
-}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
-let $i = 0;
-while ($i < $maxrq) {
- REPLACE into t2 SELECT count(*) from t1 where num > 7000000;
- inc $i;
-}
-let $time_elapsed_replace_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_replace_select seconds.;
-
-# This check evaluates whether the time elapsed during the replace select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_replace_select - $time_elapsed_select) <= $time_elapsed_select`;
-echo $verdict;
-
-####################################################################
-
-let $s = `select to_seconds(now())`;
-let $i = 0;
-while ($i < $maxrq) {
- SELECT count(*) from t1 where num > 7000000;
- inc $i;
-}
-let $time_elapsed_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_select seconds.;
-
-
-let $s = `select to_seconds(now())`;
-let $i = 0;
-while ($i < $maxrq) {
- INSERT IGNORE into t2 SELECT count(*) from t1 where num > 7000000;
- inc $i;
-}
-let $time_elapsed_insert_ignore_select = `select to_seconds(now()) - $s`;
-
-# The following line can be used to display the time elapsed data
-# which could be useful for debugging.
-#echo Range scans took $time_elapsed_insert_ignore_select seconds.;
-
-# This check evaluates whether the time elapsed during the insert ignore select statement is on par
-# with the select statement, which will confirm that bulk fetch is in fact being used.
-let $verdict = `select abs($time_elapsed_insert_ignore_select - $time_elapsed_select) <= $time_elapsed_select`;
-echo $verdict;
-
-#########################################################################
-
-drop table t,t1,t2;
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test
index 67fefcb45bd..2271a2086be 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test
@@ -66,9 +66,10 @@ let $time_bf_off = `select unix_timestamp() - $s`;
if ($debug) { echo index scans took $time_bf_off.; }
# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on
-let $verdict = `select $time_bf_off > $time_bf_on && $time_bf_off >= 1.5 * $time_bf_on`;
+let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`;
echo $verdict;
-if (!$verdict) { echo index scan $time_bf_on $time_bf_off; }
+if ($debug) { echo index $verdict $time_bf_on $time_bf_off; }
+if (!$verdict) { echo index $time_bf_on $time_bf_off; }
set tokudb_bulk_fetch=ON;
let $s = `select unix_timestamp()`;
@@ -93,8 +94,9 @@ let $time_bf_off = `select unix_timestamp() - $s`;
if ($debug) { echo range scans took $time_bf_off.; }
# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on
-let $verdict = `select $time_bf_off > $time_bf_on && $time_bf_off >= 1.5 * $time_bf_on`;
+let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`;
echo $verdict;
-if (!$verdict) { echo range scan $time_bf_on $time_bf_off; }
+if ($debug) { echo range $verdict $time_bf_on $time_bf_off; }
+if (!$verdict) { echo range $time_bf_on $time_bf_off; }
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test
index 0a1d7de3747..9dcb044d4d4 100644
--- a/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test
+++ b/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test
@@ -9,7 +9,6 @@ disable_warnings;
drop table if exists t;
enable_warnings;
-let $maxq = 20;
let $debug = 0;
# create the range partition table
@@ -51,6 +50,8 @@ INSERT INTO t SELECT null,val FROM t;
INSERT INTO t SELECT null,val FROM t;
SELECT count(*) FROM t;
+let $maxq = 30;
+
set tokudb_bulk_fetch=ON;
let $s = `select unix_timestamp()`;
let $i = 0;
@@ -60,8 +61,6 @@ while ($i < $maxq) {
}
let $time_bf_on = `select unix_timestamp() - $s`;
-if ($debug) { echo index scans took $time_bf_on; }
-
set tokudb_bulk_fetch=OFF;
let $s = `select unix_timestamp()`;
let $i = 0;
@@ -71,11 +70,10 @@ while ($i < $maxq) {
}
let $time_bf_off = `select unix_timestamp() - $s`;
-if ($debug) { echo index scans took $time_bf_off.; }
-
# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on
-let $verdict = `select $time_bf_off > $time_bf_on && $time_bf_off >= 1.5 * $time_bf_on`;
+let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`;
echo $verdict;
+if ($debug) { echo index $verdict $time_bf_on $time_bf_off; }
if (!$verdict) { echo index scan $time_bf_on $time_bf_off; }
set tokudb_bulk_fetch=ON;
@@ -87,8 +85,6 @@ while ($i < $maxq) {
}
let $time_bf_on = `select unix_timestamp() - $s`;
-if ($debug) { echo range scans took $time_bf_on; }
-
set tokudb_bulk_fetch=OFF;
let $s = `select unix_timestamp()`;
let $i = 0;
@@ -98,11 +94,10 @@ while ($i < $maxq) {
}
let $time_bf_off = `select unix_timestamp() - $s`;
-if ($debug) { echo range scans took $time_bf_off.; }
-
# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on
-let $verdict = `select $time_bf_off > $time_bf_on && $time_bf_off >= 1.5 * $time_bf_on`;
+let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`;
echo $verdict;
-if (!$verdict) { echo range scan $time_bf_on $time_bf_off; }
+if ($debug) { echo range $verdict $time_bf_on $time_bf_off; }
+if (!$verdict) { echo range $time_bf_on $time_bf_off; }
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb/t/card_drop_index_2.test b/storage/tokudb/mysql-test/tokudb/t/card_drop_index_2.test
new file mode 100644
index 00000000000..88e0f6a413f
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb/t/card_drop_index_2.test
@@ -0,0 +1,35 @@
+# test that add index keeps cardinality for older indexes
+
+source include/have_tokudb.inc;
+set default_storage_engine='tokudb';
+
+disable_warnings;
+drop table if exists tt;
+enable_warnings;
+
+create table tt (a int, b int, c int, primary key(a), key(b), key(c));
+let $a=0;
+while ($a < 500) {
+ eval insert into tt values ($a, $a, 0), ($a+1, $a, 0), ($a+2, $a, 0), ($a+3, $a, 0);
+ inc $a; inc $a; inc $a; inc $a;
+}
+select count(*) from tt;
+
+# compute cardinality
+show indexes from tt;
+analyze table tt;
+show indexes from tt;
+
+# drop key b
+alter table tt drop key b;
+show indexes from tt;
+
+# drop key c
+alter table tt drop key c;
+show indexes from tt;
+
+# test that cardinality is persistent
+flush tables;
+show indexes from tt;
+
+drop table tt;
diff --git a/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test b/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test
index e217ad38fd2..c4f9ccefe5c 100644
--- a/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test
+++ b/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_lock_waits_released.test
@@ -1,8 +1,4 @@
# verify that information_schema.tokudb_locks gets populated with locks, information_schema.tokudb_lock_waits gets
-if (`select @@tokudb_version <= "7.1.8"`)
-{
- --skip Race condition in the test in TokuDB 7.1.8 or earlier
-}
# populated with 1 lock_wait and all transactions are present in information_schema.tokudb_trx for 2 clients
source include/have_tokudb.inc;
diff --git a/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test b/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test
index 6df23e7edb3..56d5f4a3a6c 100644
--- a/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test
+++ b/storage/tokudb/mysql-test/tokudb/t/i_s_tokudb_locks_released.test
@@ -1,7 +1,3 @@
-if (`select @@tokudb_version <= "7.1.8"`)
-{
- --skip Race condition in the test in TokuDB 7.1.8 or earlier
-}
# verify that information_schema.tokudb_locks gets populated with locks for 2 clients
source include/have_tokudb.inc;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db397_delete_trigger.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_delete_trigger.result
new file mode 100644
index 00000000000..da82fa445e8
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_delete_trigger.result
@@ -0,0 +1,57 @@
+set default_storage_engine='tokudb';
+drop table if exists t1;
+drop table if exists t1_audit;
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+create table t1_audit (
+col1 int not null,
+action varchar(10) not null,
+ts timestamp not null default now());
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+set local tokudb_prelock_empty=0;
+create trigger t1_trigger before delete on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'BEFORE DELETE');
+insert into t1 (col1,col2) values (1,1);
+start transaction;
+delete from t1 where col1 = 1;
+select col1,col2 from t1;
+col1 col2
+0 0
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE DEL
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0200000000000000 0200000000000000
+./test/t1-main ff01000000 0101000000
+./test/t1-main 0001000000 0001000000
+commit;
+drop trigger t1_trigger;
+create trigger t1_trigger after delete on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'AFTER DELETE');
+insert into t1 (col1,col2) values (2,2);
+start transaction;
+delete from t1 where col1 = 2;
+select col1,col2 from t1;
+col1 col2
+0 0
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE DEL
+2 AFTER DELE
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0300000000000000 0300000000000000
+./test/t1-main ff02000000 0102000000
+./test/t1-main 0002000000 0002000000
+commit;
+drop trigger t1_trigger;
+drop table t1;
+drop table t1_audit;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db397_insert_trigger.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_insert_trigger.result
new file mode 100644
index 00000000000..41765a6fcd3
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_insert_trigger.result
@@ -0,0 +1,56 @@
+set default_storage_engine='tokudb';
+drop table if exists t1;
+drop table if exists t1_audit;
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+create table t1_audit (
+col1 int not null,
+action varchar(32) not null,
+ts timestamp not null default now());
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+set local tokudb_prelock_empty=0;
+create trigger t1_trigger before insert on t1
+for each row
+insert into t1_audit (col1, action) values (new.col1, 'BEFORE INSERT');
+start transaction;
+insert into t1 (col1, col2) values (1,1);
+select col1,col2 from t1;
+col1 col2
+0 0
+1 1
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE INSERT
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0200000000000000 0200000000000000
+./test/t1-main 0001000000 0001000000
+commit;
+drop trigger t1_trigger;
+create trigger t1_trigger after insert on t1
+for each row
+insert into t1_audit (col1, action) values (new.col1, 'AFTER INSERT');
+start transaction;
+insert into t1 (col1, col2) values (2,2);
+select col1,col2 from t1;
+col1 col2
+0 0
+1 1
+2 2
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE INSERT
+2 AFTER INSERT
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0300000000000000 0300000000000000
+./test/t1-main 0002000000 0002000000
+commit;
+drop trigger t1_trigger;
+drop table t1;
+drop table t1_audit;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db397_update_trigger.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_update_trigger.result
new file mode 100644
index 00000000000..c197430ad25
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db397_update_trigger.result
@@ -0,0 +1,58 @@
+set default_storage_engine='tokudb';
+drop table if exists t1, t1_audit;
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+create table t1_audit (
+col1 int not null,
+action varchar(32) not null,
+ts timestamp not null default now());
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+set local tokudb_prelock_empty=0;
+create trigger t1_trigger before update on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'BEFORE UPDATE');
+insert into t1 (col1,col2) values (1,1);
+start transaction;
+update t1 set col2=1000 where col1 = 1;
+select col1,col2 from t1;
+col1 col2
+0 0
+1 1000
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE UPDATE
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0200000000000000 0200000000000000
+./test/t1-main ff01000000 0101000000
+./test/t1-main 0001000000 0001000000
+commit;
+drop trigger t1_trigger;
+create trigger t1_trigger after update on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'AFTER UPDATE');
+insert into t1 (col1,col2) values (2,2);
+start transaction;
+update t1 set col2=1001 where col1 = 2;
+select col1,col2 from t1;
+col1 col2
+0 0
+1 1000
+2 1001
+select col1,action from t1_audit;
+col1 action
+0 DUMMY
+1 BEFORE UPDATE
+2 AFTER UPDATE
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+locks_dname locks_key_left locks_key_right
+./test/t1_audit-main 0300000000000000 0300000000000000
+./test/t1-main ff02000000 0102000000
+./test/t1-main 0002000000 0002000000
+commit;
+drop trigger t1_trigger;
+drop table t1, t1_audit;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db739_insert.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_insert.result
new file mode 100644
index 00000000000..c1ea1c2f484
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_insert.result
@@ -0,0 +1,100013 @@
+set default_storage_engine=tokudb;
+drop table if exists t;
+create table t (
+id bigint not null,
+a bigint not null default 0,
+b bigint not null default 0,
+c bigint not null default 0,
+primary key(id, a)
+);
+set tokudb_commit_sync=0;
+insert into t (id,a) values (0,0);
+insert into t (id,a) values (0,1);
+insert into t (id,a) values (0,2);
+insert into t (id,a) values (0,3);
+insert into t (id,a) values (0,4);
+insert into t (id,a) values (0,5);
+insert into t (id,a) values (0,6);
+insert into t (id,a) values (0,7);
+insert into t (id,a) values (0,8);
+insert into t (id,a) values (0,9);
+insert into t (id,a) values (0,10);
+insert into t (id,a) values (0,11);
+insert into t (id,a) values (0,12);
+insert into t (id,a) values (0,13);
+insert into t (id,a) values (0,14);
+insert into t (id,a) values (0,15);
+insert into t (id,a) values (0,16);
+insert into t (id,a) values (0,17);
+insert into t (id,a) values (0,18);
+insert into t (id,a) values (0,19);
+insert into t (id,a) values (0,20);
+insert into t (id,a) values (0,21);
+insert into t (id,a) values (0,22);
+insert into t (id,a) values (0,23);
+insert into t (id,a) values (0,24);
+insert into t (id,a) values (0,25);
+insert into t (id,a) values (0,26);
+insert into t (id,a) values (0,27);
+insert into t (id,a) values (0,28);
+insert into t (id,a) values (0,29);
+insert into t (id,a) values (0,30);
+insert into t (id,a) values (0,31);
+insert into t (id,a) values (0,32);
+insert into t (id,a) values (0,33);
+insert into t (id,a) values (0,34);
+insert into t (id,a) values (0,35);
+insert into t (id,a) values (0,36);
+insert into t (id,a) values (0,37);
+insert into t (id,a) values (0,38);
+insert into t (id,a) values (0,39);
+insert into t (id,a) values (0,40);
+insert into t (id,a) values (0,41);
+insert into t (id,a) values (0,42);
+insert into t (id,a) values (0,43);
+insert into t (id,a) values (0,44);
+insert into t (id,a) values (0,45);
+insert into t (id,a) values (0,46);
+insert into t (id,a) values (0,47);
+insert into t (id,a) values (0,48);
+insert into t (id,a) values (0,49);
+insert into t (id,a) values (0,50);
+insert into t (id,a) values (0,51);
+insert into t (id,a) values (0,52);
+insert into t (id,a) values (0,53);
+insert into t (id,a) values (0,54);
+insert into t (id,a) values (0,55);
+insert into t (id,a) values (0,56);
+insert into t (id,a) values (0,57);
+insert into t (id,a) values (0,58);
+insert into t (id,a) values (0,59);
+insert into t (id,a) values (0,60);
+insert into t (id,a) values (0,61);
+insert into t (id,a) values (0,62);
+insert into t (id,a) values (0,63);
+insert into t (id,a) values (0,64);
+insert into t (id,a) values (0,65);
+insert into t (id,a) values (0,66);
+insert into t (id,a) values (0,67);
+insert into t (id,a) values (0,68);
+insert into t (id,a) values (0,69);
+insert into t (id,a) values (0,70);
+insert into t (id,a) values (0,71);
+insert into t (id,a) values (0,72);
+insert into t (id,a) values (0,73);
+insert into t (id,a) values (0,74);
+insert into t (id,a) values (0,75);
+insert into t (id,a) values (0,76);
+insert into t (id,a) values (0,77);
+insert into t (id,a) values (0,78);
+insert into t (id,a) values (0,79);
+insert into t (id,a) values (0,80);
+insert into t (id,a) values (0,81);
+insert into t (id,a) values (0,82);
+insert into t (id,a) values (0,83);
+insert into t (id,a) values (0,84);
+insert into t (id,a) values (0,85);
+insert into t (id,a) values (0,86);
+insert into t (id,a) values (0,87);
+insert into t (id,a) values (0,88);
+insert into t (id,a) values (0,89);
+insert into t (id,a) values (0,90);
+insert into t (id,a) values (0,91);
+insert into t (id,a) values (0,92);
+insert into t (id,a) values (0,93);
+insert into t (id,a) values (0,94);
+insert into t (id,a) values (0,95);
+insert into t (id,a) values (0,96);
+insert into t (id,a) values (0,97);
+insert into t (id,a) values (0,98);
+insert into t (id,a) values (0,99);
+insert into t (id,a) values (1,0);
+insert into t (id,a) values (1,1);
+insert into t (id,a) values (1,2);
+insert into t (id,a) values (1,3);
+insert into t (id,a) values (1,4);
+insert into t (id,a) values (1,5);
+insert into t (id,a) values (1,6);
+insert into t (id,a) values (1,7);
+insert into t (id,a) values (1,8);
+insert into t (id,a) values (1,9);
+insert into t (id,a) values (1,10);
+insert into t (id,a) values (1,11);
+insert into t (id,a) values (1,12);
+insert into t (id,a) values (1,13);
+insert into t (id,a) values (1,14);
+insert into t (id,a) values (1,15);
+insert into t (id,a) values (1,16);
+insert into t (id,a) values (1,17);
+insert into t (id,a) values (1,18);
+insert into t (id,a) values (1,19);
+insert into t (id,a) values (1,20);
+insert into t (id,a) values (1,21);
+insert into t (id,a) values (1,22);
+insert into t (id,a) values (1,23);
+insert into t (id,a) values (1,24);
+insert into t (id,a) values (1,25);
+insert into t (id,a) values (1,26);
+insert into t (id,a) values (1,27);
+insert into t (id,a) values (1,28);
+insert into t (id,a) values (1,29);
+insert into t (id,a) values (1,30);
+insert into t (id,a) values (1,31);
+insert into t (id,a) values (1,32);
+insert into t (id,a) values (1,33);
+insert into t (id,a) values (1,34);
+insert into t (id,a) values (1,35);
+insert into t (id,a) values (1,36);
+insert into t (id,a) values (1,37);
+insert into t (id,a) values (1,38);
+insert into t (id,a) values (1,39);
+insert into t (id,a) values (1,40);
+insert into t (id,a) values (1,41);
+insert into t (id,a) values (1,42);
+insert into t (id,a) values (1,43);
+insert into t (id,a) values (1,44);
+insert into t (id,a) values (1,45);
+insert into t (id,a) values (1,46);
+insert into t (id,a) values (1,47);
+insert into t (id,a) values (1,48);
+insert into t (id,a) values (1,49);
+insert into t (id,a) values (1,50);
+insert into t (id,a) values (1,51);
+insert into t (id,a) values (1,52);
+insert into t (id,a) values (1,53);
+insert into t (id,a) values (1,54);
+insert into t (id,a) values (1,55);
+insert into t (id,a) values (1,56);
+insert into t (id,a) values (1,57);
+insert into t (id,a) values (1,58);
+insert into t (id,a) values (1,59);
+insert into t (id,a) values (1,60);
+insert into t (id,a) values (1,61);
+insert into t (id,a) values (1,62);
+insert into t (id,a) values (1,63);
+insert into t (id,a) values (1,64);
+insert into t (id,a) values (1,65);
+insert into t (id,a) values (1,66);
+insert into t (id,a) values (1,67);
+insert into t (id,a) values (1,68);
+insert into t (id,a) values (1,69);
+insert into t (id,a) values (1,70);
+insert into t (id,a) values (1,71);
+insert into t (id,a) values (1,72);
+insert into t (id,a) values (1,73);
+insert into t (id,a) values (1,74);
+insert into t (id,a) values (1,75);
+insert into t (id,a) values (1,76);
+insert into t (id,a) values (1,77);
+insert into t (id,a) values (1,78);
+insert into t (id,a) values (1,79);
+insert into t (id,a) values (1,80);
+insert into t (id,a) values (1,81);
+insert into t (id,a) values (1,82);
+insert into t (id,a) values (1,83);
+insert into t (id,a) values (1,84);
+insert into t (id,a) values (1,85);
+insert into t (id,a) values (1,86);
+insert into t (id,a) values (1,87);
+insert into t (id,a) values (1,88);
+insert into t (id,a) values (1,89);
+insert into t (id,a) values (1,90);
+insert into t (id,a) values (1,91);
+insert into t (id,a) values (1,92);
+insert into t (id,a) values (1,93);
+insert into t (id,a) values (1,94);
+insert into t (id,a) values (1,95);
+insert into t (id,a) values (1,96);
+insert into t (id,a) values (1,97);
+insert into t (id,a) values (1,98);
+insert into t (id,a) values (1,99);
+insert into t (id,a) values (2,0);
+insert into t (id,a) values (2,1);
+insert into t (id,a) values (2,2);
+insert into t (id,a) values (2,3);
+insert into t (id,a) values (2,4);
+insert into t (id,a) values (2,5);
+insert into t (id,a) values (2,6);
+insert into t (id,a) values (2,7);
+insert into t (id,a) values (2,8);
+insert into t (id,a) values (2,9);
+insert into t (id,a) values (2,10);
+insert into t (id,a) values (2,11);
+insert into t (id,a) values (2,12);
+insert into t (id,a) values (2,13);
+insert into t (id,a) values (2,14);
+insert into t (id,a) values (2,15);
+insert into t (id,a) values (2,16);
+insert into t (id,a) values (2,17);
+insert into t (id,a) values (2,18);
+insert into t (id,a) values (2,19);
+insert into t (id,a) values (2,20);
+insert into t (id,a) values (2,21);
+insert into t (id,a) values (2,22);
+insert into t (id,a) values (2,23);
+insert into t (id,a) values (2,24);
+insert into t (id,a) values (2,25);
+insert into t (id,a) values (2,26);
+insert into t (id,a) values (2,27);
+insert into t (id,a) values (2,28);
+insert into t (id,a) values (2,29);
+insert into t (id,a) values (2,30);
+insert into t (id,a) values (2,31);
+insert into t (id,a) values (2,32);
+insert into t (id,a) values (2,33);
+insert into t (id,a) values (2,34);
+insert into t (id,a) values (2,35);
+insert into t (id,a) values (2,36);
+insert into t (id,a) values (2,37);
+insert into t (id,a) values (2,38);
+insert into t (id,a) values (2,39);
+insert into t (id,a) values (2,40);
+insert into t (id,a) values (2,41);
+insert into t (id,a) values (2,42);
+insert into t (id,a) values (2,43);
+insert into t (id,a) values (2,44);
+insert into t (id,a) values (2,45);
+insert into t (id,a) values (2,46);
+insert into t (id,a) values (2,47);
+insert into t (id,a) values (2,48);
+insert into t (id,a) values (2,49);
+insert into t (id,a) values (2,50);
+insert into t (id,a) values (2,51);
+insert into t (id,a) values (2,52);
+insert into t (id,a) values (2,53);
+insert into t (id,a) values (2,54);
+insert into t (id,a) values (2,55);
+insert into t (id,a) values (2,56);
+insert into t (id,a) values (2,57);
+insert into t (id,a) values (2,58);
+insert into t (id,a) values (2,59);
+insert into t (id,a) values (2,60);
+insert into t (id,a) values (2,61);
+insert into t (id,a) values (2,62);
+insert into t (id,a) values (2,63);
+insert into t (id,a) values (2,64);
+insert into t (id,a) values (2,65);
+insert into t (id,a) values (2,66);
+insert into t (id,a) values (2,67);
+insert into t (id,a) values (2,68);
+insert into t (id,a) values (2,69);
+insert into t (id,a) values (2,70);
+insert into t (id,a) values (2,71);
+insert into t (id,a) values (2,72);
+insert into t (id,a) values (2,73);
+insert into t (id,a) values (2,74);
+insert into t (id,a) values (2,75);
+insert into t (id,a) values (2,76);
+insert into t (id,a) values (2,77);
+insert into t (id,a) values (2,78);
+insert into t (id,a) values (2,79);
+insert into t (id,a) values (2,80);
+insert into t (id,a) values (2,81);
+insert into t (id,a) values (2,82);
+insert into t (id,a) values (2,83);
+insert into t (id,a) values (2,84);
+insert into t (id,a) values (2,85);
+insert into t (id,a) values (2,86);
+insert into t (id,a) values (2,87);
+insert into t (id,a) values (2,88);
+insert into t (id,a) values (2,89);
+insert into t (id,a) values (2,90);
+insert into t (id,a) values (2,91);
+insert into t (id,a) values (2,92);
+insert into t (id,a) values (2,93);
+insert into t (id,a) values (2,94);
+insert into t (id,a) values (2,95);
+insert into t (id,a) values (2,96);
+insert into t (id,a) values (2,97);
+insert into t (id,a) values (2,98);
+insert into t (id,a) values (2,99);
+insert into t (id,a) values (3,0);
+insert into t (id,a) values (3,1);
+insert into t (id,a) values (3,2);
+insert into t (id,a) values (3,3);
+insert into t (id,a) values (3,4);
+insert into t (id,a) values (3,5);
+insert into t (id,a) values (3,6);
+insert into t (id,a) values (3,7);
+insert into t (id,a) values (3,8);
+insert into t (id,a) values (3,9);
+insert into t (id,a) values (3,10);
+insert into t (id,a) values (3,11);
+insert into t (id,a) values (3,12);
+insert into t (id,a) values (3,13);
+insert into t (id,a) values (3,14);
+insert into t (id,a) values (3,15);
+insert into t (id,a) values (3,16);
+insert into t (id,a) values (3,17);
+insert into t (id,a) values (3,18);
+insert into t (id,a) values (3,19);
+insert into t (id,a) values (3,20);
+insert into t (id,a) values (3,21);
+insert into t (id,a) values (3,22);
+insert into t (id,a) values (3,23);
+insert into t (id,a) values (3,24);
+insert into t (id,a) values (3,25);
+insert into t (id,a) values (3,26);
+insert into t (id,a) values (3,27);
+insert into t (id,a) values (3,28);
+insert into t (id,a) values (3,29);
+insert into t (id,a) values (3,30);
+insert into t (id,a) values (3,31);
+insert into t (id,a) values (3,32);
+insert into t (id,a) values (3,33);
+insert into t (id,a) values (3,34);
+insert into t (id,a) values (3,35);
+insert into t (id,a) values (3,36);
+insert into t (id,a) values (3,37);
+insert into t (id,a) values (3,38);
+insert into t (id,a) values (3,39);
+insert into t (id,a) values (3,40);
+insert into t (id,a) values (3,41);
+insert into t (id,a) values (3,42);
+insert into t (id,a) values (3,43);
+insert into t (id,a) values (3,44);
+insert into t (id,a) values (3,45);
+insert into t (id,a) values (3,46);
+insert into t (id,a) values (3,47);
+insert into t (id,a) values (3,48);
+insert into t (id,a) values (3,49);
+insert into t (id,a) values (3,50);
+insert into t (id,a) values (3,51);
+insert into t (id,a) values (3,52);
+insert into t (id,a) values (3,53);
+insert into t (id,a) values (3,54);
+insert into t (id,a) values (3,55);
+insert into t (id,a) values (3,56);
+insert into t (id,a) values (3,57);
+insert into t (id,a) values (3,58);
+insert into t (id,a) values (3,59);
+insert into t (id,a) values (3,60);
+insert into t (id,a) values (3,61);
+insert into t (id,a) values (3,62);
+insert into t (id,a) values (3,63);
+insert into t (id,a) values (3,64);
+insert into t (id,a) values (3,65);
+insert into t (id,a) values (3,66);
+insert into t (id,a) values (3,67);
+insert into t (id,a) values (3,68);
+insert into t (id,a) values (3,69);
+insert into t (id,a) values (3,70);
+insert into t (id,a) values (3,71);
+insert into t (id,a) values (3,72);
+insert into t (id,a) values (3,73);
+insert into t (id,a) values (3,74);
+insert into t (id,a) values (3,75);
+insert into t (id,a) values (3,76);
+insert into t (id,a) values (3,77);
+insert into t (id,a) values (3,78);
+insert into t (id,a) values (3,79);
+insert into t (id,a) values (3,80);
+insert into t (id,a) values (3,81);
+insert into t (id,a) values (3,82);
+insert into t (id,a) values (3,83);
+insert into t (id,a) values (3,84);
+insert into t (id,a) values (3,85);
+insert into t (id,a) values (3,86);
+insert into t (id,a) values (3,87);
+insert into t (id,a) values (3,88);
+insert into t (id,a) values (3,89);
+insert into t (id,a) values (3,90);
+insert into t (id,a) values (3,91);
+insert into t (id,a) values (3,92);
+insert into t (id,a) values (3,93);
+insert into t (id,a) values (3,94);
+insert into t (id,a) values (3,95);
+insert into t (id,a) values (3,96);
+insert into t (id,a) values (3,97);
+insert into t (id,a) values (3,98);
+insert into t (id,a) values (3,99);
+insert into t (id,a) values (4,0);
+insert into t (id,a) values (4,1);
+insert into t (id,a) values (4,2);
+insert into t (id,a) values (4,3);
+insert into t (id,a) values (4,4);
+insert into t (id,a) values (4,5);
+insert into t (id,a) values (4,6);
+insert into t (id,a) values (4,7);
+insert into t (id,a) values (4,8);
+insert into t (id,a) values (4,9);
+insert into t (id,a) values (4,10);
+insert into t (id,a) values (4,11);
+insert into t (id,a) values (4,12);
+insert into t (id,a) values (4,13);
+insert into t (id,a) values (4,14);
+insert into t (id,a) values (4,15);
+insert into t (id,a) values (4,16);
+insert into t (id,a) values (4,17);
+insert into t (id,a) values (4,18);
+insert into t (id,a) values (4,19);
+insert into t (id,a) values (4,20);
+insert into t (id,a) values (4,21);
+insert into t (id,a) values (4,22);
+insert into t (id,a) values (4,23);
+insert into t (id,a) values (4,24);
+insert into t (id,a) values (4,25);
+insert into t (id,a) values (4,26);
+insert into t (id,a) values (4,27);
+insert into t (id,a) values (4,28);
+insert into t (id,a) values (4,29);
+insert into t (id,a) values (4,30);
+insert into t (id,a) values (4,31);
+insert into t (id,a) values (4,32);
+insert into t (id,a) values (4,33);
+insert into t (id,a) values (4,34);
+insert into t (id,a) values (4,35);
+insert into t (id,a) values (4,36);
+insert into t (id,a) values (4,37);
+insert into t (id,a) values (4,38);
+insert into t (id,a) values (4,39);
+insert into t (id,a) values (4,40);
+insert into t (id,a) values (4,41);
+insert into t (id,a) values (4,42);
+insert into t (id,a) values (4,43);
+insert into t (id,a) values (4,44);
+insert into t (id,a) values (4,45);
+insert into t (id,a) values (4,46);
+insert into t (id,a) values (4,47);
+insert into t (id,a) values (4,48);
+insert into t (id,a) values (4,49);
+insert into t (id,a) values (4,50);
+insert into t (id,a) values (4,51);
+insert into t (id,a) values (4,52);
+insert into t (id,a) values (4,53);
+insert into t (id,a) values (4,54);
+insert into t (id,a) values (4,55);
+insert into t (id,a) values (4,56);
+insert into t (id,a) values (4,57);
+insert into t (id,a) values (4,58);
+insert into t (id,a) values (4,59);
+insert into t (id,a) values (4,60);
+insert into t (id,a) values (4,61);
+insert into t (id,a) values (4,62);
+insert into t (id,a) values (4,63);
+insert into t (id,a) values (4,64);
+insert into t (id,a) values (4,65);
+insert into t (id,a) values (4,66);
+insert into t (id,a) values (4,67);
+insert into t (id,a) values (4,68);
+insert into t (id,a) values (4,69);
+insert into t (id,a) values (4,70);
+insert into t (id,a) values (4,71);
+insert into t (id,a) values (4,72);
+insert into t (id,a) values (4,73);
+insert into t (id,a) values (4,74);
+insert into t (id,a) values (4,75);
+insert into t (id,a) values (4,76);
+insert into t (id,a) values (4,77);
+insert into t (id,a) values (4,78);
+insert into t (id,a) values (4,79);
+insert into t (id,a) values (4,80);
+insert into t (id,a) values (4,81);
+insert into t (id,a) values (4,82);
+insert into t (id,a) values (4,83);
+insert into t (id,a) values (4,84);
+insert into t (id,a) values (4,85);
+insert into t (id,a) values (4,86);
+insert into t (id,a) values (4,87);
+insert into t (id,a) values (4,88);
+insert into t (id,a) values (4,89);
+insert into t (id,a) values (4,90);
+insert into t (id,a) values (4,91);
+insert into t (id,a) values (4,92);
+insert into t (id,a) values (4,93);
+insert into t (id,a) values (4,94);
+insert into t (id,a) values (4,95);
+insert into t (id,a) values (4,96);
+insert into t (id,a) values (4,97);
+insert into t (id,a) values (4,98);
+insert into t (id,a) values (4,99);
+insert into t (id,a) values (5,0);
+insert into t (id,a) values (5,1);
+insert into t (id,a) values (5,2);
+insert into t (id,a) values (5,3);
+insert into t (id,a) values (5,4);
+insert into t (id,a) values (5,5);
+insert into t (id,a) values (5,6);
+insert into t (id,a) values (5,7);
+insert into t (id,a) values (5,8);
+insert into t (id,a) values (5,9);
+insert into t (id,a) values (5,10);
+insert into t (id,a) values (5,11);
+insert into t (id,a) values (5,12);
+insert into t (id,a) values (5,13);
+insert into t (id,a) values (5,14);
+insert into t (id,a) values (5,15);
+insert into t (id,a) values (5,16);
+insert into t (id,a) values (5,17);
+insert into t (id,a) values (5,18);
+insert into t (id,a) values (5,19);
+insert into t (id,a) values (5,20);
+insert into t (id,a) values (5,21);
+insert into t (id,a) values (5,22);
+insert into t (id,a) values (5,23);
+insert into t (id,a) values (5,24);
+insert into t (id,a) values (5,25);
+insert into t (id,a) values (5,26);
+insert into t (id,a) values (5,27);
+insert into t (id,a) values (5,28);
+insert into t (id,a) values (5,29);
+insert into t (id,a) values (5,30);
+insert into t (id,a) values (5,31);
+insert into t (id,a) values (5,32);
+insert into t (id,a) values (5,33);
+insert into t (id,a) values (5,34);
+insert into t (id,a) values (5,35);
+insert into t (id,a) values (5,36);
+insert into t (id,a) values (5,37);
+insert into t (id,a) values (5,38);
+insert into t (id,a) values (5,39);
+insert into t (id,a) values (5,40);
+insert into t (id,a) values (5,41);
+insert into t (id,a) values (5,42);
+insert into t (id,a) values (5,43);
+insert into t (id,a) values (5,44);
+insert into t (id,a) values (5,45);
+insert into t (id,a) values (5,46);
+insert into t (id,a) values (5,47);
+insert into t (id,a) values (5,48);
+insert into t (id,a) values (5,49);
+insert into t (id,a) values (5,50);
+insert into t (id,a) values (5,51);
+insert into t (id,a) values (5,52);
+insert into t (id,a) values (5,53);
+insert into t (id,a) values (5,54);
+insert into t (id,a) values (5,55);
+insert into t (id,a) values (5,56);
+insert into t (id,a) values (5,57);
+insert into t (id,a) values (5,58);
+insert into t (id,a) values (5,59);
+insert into t (id,a) values (5,60);
+insert into t (id,a) values (5,61);
+insert into t (id,a) values (5,62);
+insert into t (id,a) values (5,63);
+insert into t (id,a) values (5,64);
+insert into t (id,a) values (5,65);
+insert into t (id,a) values (5,66);
+insert into t (id,a) values (5,67);
+insert into t (id,a) values (5,68);
+insert into t (id,a) values (5,69);
+insert into t (id,a) values (5,70);
+insert into t (id,a) values (5,71);
+insert into t (id,a) values (5,72);
+insert into t (id,a) values (5,73);
+insert into t (id,a) values (5,74);
+insert into t (id,a) values (5,75);
+insert into t (id,a) values (5,76);
+insert into t (id,a) values (5,77);
+insert into t (id,a) values (5,78);
+insert into t (id,a) values (5,79);
+insert into t (id,a) values (5,80);
+insert into t (id,a) values (5,81);
+insert into t (id,a) values (5,82);
+insert into t (id,a) values (5,83);
+insert into t (id,a) values (5,84);
+insert into t (id,a) values (5,85);
+insert into t (id,a) values (5,86);
+insert into t (id,a) values (5,87);
+insert into t (id,a) values (5,88);
+insert into t (id,a) values (5,89);
+insert into t (id,a) values (5,90);
+insert into t (id,a) values (5,91);
+insert into t (id,a) values (5,92);
+insert into t (id,a) values (5,93);
+insert into t (id,a) values (5,94);
+insert into t (id,a) values (5,95);
+insert into t (id,a) values (5,96);
+insert into t (id,a) values (5,97);
+insert into t (id,a) values (5,98);
+insert into t (id,a) values (5,99);
+insert into t (id,a) values (6,0);
+insert into t (id,a) values (6,1);
+insert into t (id,a) values (6,2);
+insert into t (id,a) values (6,3);
+insert into t (id,a) values (6,4);
+insert into t (id,a) values (6,5);
+insert into t (id,a) values (6,6);
+insert into t (id,a) values (6,7);
+insert into t (id,a) values (6,8);
+insert into t (id,a) values (6,9);
+insert into t (id,a) values (6,10);
+insert into t (id,a) values (6,11);
+insert into t (id,a) values (6,12);
+insert into t (id,a) values (6,13);
+insert into t (id,a) values (6,14);
+insert into t (id,a) values (6,15);
+insert into t (id,a) values (6,16);
+insert into t (id,a) values (6,17);
+insert into t (id,a) values (6,18);
+insert into t (id,a) values (6,19);
+insert into t (id,a) values (6,20);
+insert into t (id,a) values (6,21);
+insert into t (id,a) values (6,22);
+insert into t (id,a) values (6,23);
+insert into t (id,a) values (6,24);
+insert into t (id,a) values (6,25);
+insert into t (id,a) values (6,26);
+insert into t (id,a) values (6,27);
+insert into t (id,a) values (6,28);
+insert into t (id,a) values (6,29);
+insert into t (id,a) values (6,30);
+insert into t (id,a) values (6,31);
+insert into t (id,a) values (6,32);
+insert into t (id,a) values (6,33);
+insert into t (id,a) values (6,34);
+insert into t (id,a) values (6,35);
+insert into t (id,a) values (6,36);
+insert into t (id,a) values (6,37);
+insert into t (id,a) values (6,38);
+insert into t (id,a) values (6,39);
+insert into t (id,a) values (6,40);
+insert into t (id,a) values (6,41);
+insert into t (id,a) values (6,42);
+insert into t (id,a) values (6,43);
+insert into t (id,a) values (6,44);
+insert into t (id,a) values (6,45);
+insert into t (id,a) values (6,46);
+insert into t (id,a) values (6,47);
+insert into t (id,a) values (6,48);
+insert into t (id,a) values (6,49);
+insert into t (id,a) values (6,50);
+insert into t (id,a) values (6,51);
+insert into t (id,a) values (6,52);
+insert into t (id,a) values (6,53);
+insert into t (id,a) values (6,54);
+insert into t (id,a) values (6,55);
+insert into t (id,a) values (6,56);
+insert into t (id,a) values (6,57);
+insert into t (id,a) values (6,58);
+insert into t (id,a) values (6,59);
+insert into t (id,a) values (6,60);
+insert into t (id,a) values (6,61);
+insert into t (id,a) values (6,62);
+insert into t (id,a) values (6,63);
+insert into t (id,a) values (6,64);
+insert into t (id,a) values (6,65);
+insert into t (id,a) values (6,66);
+insert into t (id,a) values (6,67);
+insert into t (id,a) values (6,68);
+insert into t (id,a) values (6,69);
+insert into t (id,a) values (6,70);
+insert into t (id,a) values (6,71);
+insert into t (id,a) values (6,72);
+insert into t (id,a) values (6,73);
+insert into t (id,a) values (6,74);
+insert into t (id,a) values (6,75);
+insert into t (id,a) values (6,76);
+insert into t (id,a) values (6,77);
+insert into t (id,a) values (6,78);
+insert into t (id,a) values (6,79);
+insert into t (id,a) values (6,80);
+insert into t (id,a) values (6,81);
+insert into t (id,a) values (6,82);
+insert into t (id,a) values (6,83);
+insert into t (id,a) values (6,84);
+insert into t (id,a) values (6,85);
+insert into t (id,a) values (6,86);
+insert into t (id,a) values (6,87);
+insert into t (id,a) values (6,88);
+insert into t (id,a) values (6,89);
+insert into t (id,a) values (6,90);
+insert into t (id,a) values (6,91);
+insert into t (id,a) values (6,92);
+insert into t (id,a) values (6,93);
+insert into t (id,a) values (6,94);
+insert into t (id,a) values (6,95);
+insert into t (id,a) values (6,96);
+insert into t (id,a) values (6,97);
+insert into t (id,a) values (6,98);
+insert into t (id,a) values (6,99);
+insert into t (id,a) values (7,0);
+insert into t (id,a) values (7,1);
+insert into t (id,a) values (7,2);
+insert into t (id,a) values (7,3);
+insert into t (id,a) values (7,4);
+insert into t (id,a) values (7,5);
+insert into t (id,a) values (7,6);
+insert into t (id,a) values (7,7);
+insert into t (id,a) values (7,8);
+insert into t (id,a) values (7,9);
+insert into t (id,a) values (7,10);
+insert into t (id,a) values (7,11);
+insert into t (id,a) values (7,12);
+insert into t (id,a) values (7,13);
+insert into t (id,a) values (7,14);
+insert into t (id,a) values (7,15);
+insert into t (id,a) values (7,16);
+insert into t (id,a) values (7,17);
+insert into t (id,a) values (7,18);
+insert into t (id,a) values (7,19);
+insert into t (id,a) values (7,20);
+insert into t (id,a) values (7,21);
+insert into t (id,a) values (7,22);
+insert into t (id,a) values (7,23);
+insert into t (id,a) values (7,24);
+insert into t (id,a) values (7,25);
+insert into t (id,a) values (7,26);
+insert into t (id,a) values (7,27);
+insert into t (id,a) values (7,28);
+insert into t (id,a) values (7,29);
+insert into t (id,a) values (7,30);
+insert into t (id,a) values (7,31);
+insert into t (id,a) values (7,32);
+insert into t (id,a) values (7,33);
+insert into t (id,a) values (7,34);
+insert into t (id,a) values (7,35);
+insert into t (id,a) values (7,36);
+insert into t (id,a) values (7,37);
+insert into t (id,a) values (7,38);
+insert into t (id,a) values (7,39);
+insert into t (id,a) values (7,40);
+insert into t (id,a) values (7,41);
+insert into t (id,a) values (7,42);
+insert into t (id,a) values (7,43);
+insert into t (id,a) values (7,44);
+insert into t (id,a) values (7,45);
+insert into t (id,a) values (7,46);
+insert into t (id,a) values (7,47);
+insert into t (id,a) values (7,48);
+insert into t (id,a) values (7,49);
+insert into t (id,a) values (7,50);
+insert into t (id,a) values (7,51);
+insert into t (id,a) values (7,52);
+insert into t (id,a) values (7,53);
+insert into t (id,a) values (7,54);
+insert into t (id,a) values (7,55);
+insert into t (id,a) values (7,56);
+insert into t (id,a) values (7,57);
+insert into t (id,a) values (7,58);
+insert into t (id,a) values (7,59);
+insert into t (id,a) values (7,60);
+insert into t (id,a) values (7,61);
+insert into t (id,a) values (7,62);
+insert into t (id,a) values (7,63);
+insert into t (id,a) values (7,64);
+insert into t (id,a) values (7,65);
+insert into t (id,a) values (7,66);
+insert into t (id,a) values (7,67);
+insert into t (id,a) values (7,68);
+insert into t (id,a) values (7,69);
+insert into t (id,a) values (7,70);
+insert into t (id,a) values (7,71);
+insert into t (id,a) values (7,72);
+insert into t (id,a) values (7,73);
+insert into t (id,a) values (7,74);
+insert into t (id,a) values (7,75);
+insert into t (id,a) values (7,76);
+insert into t (id,a) values (7,77);
+insert into t (id,a) values (7,78);
+insert into t (id,a) values (7,79);
+insert into t (id,a) values (7,80);
+insert into t (id,a) values (7,81);
+insert into t (id,a) values (7,82);
+insert into t (id,a) values (7,83);
+insert into t (id,a) values (7,84);
+insert into t (id,a) values (7,85);
+insert into t (id,a) values (7,86);
+insert into t (id,a) values (7,87);
+insert into t (id,a) values (7,88);
+insert into t (id,a) values (7,89);
+insert into t (id,a) values (7,90);
+insert into t (id,a) values (7,91);
+insert into t (id,a) values (7,92);
+insert into t (id,a) values (7,93);
+insert into t (id,a) values (7,94);
+insert into t (id,a) values (7,95);
+insert into t (id,a) values (7,96);
+insert into t (id,a) values (7,97);
+insert into t (id,a) values (7,98);
+insert into t (id,a) values (7,99);
+insert into t (id,a) values (8,0);
+insert into t (id,a) values (8,1);
+insert into t (id,a) values (8,2);
+insert into t (id,a) values (8,3);
+insert into t (id,a) values (8,4);
+insert into t (id,a) values (8,5);
+insert into t (id,a) values (8,6);
+insert into t (id,a) values (8,7);
+insert into t (id,a) values (8,8);
+insert into t (id,a) values (8,9);
+insert into t (id,a) values (8,10);
+insert into t (id,a) values (8,11);
+insert into t (id,a) values (8,12);
+insert into t (id,a) values (8,13);
+insert into t (id,a) values (8,14);
+insert into t (id,a) values (8,15);
+insert into t (id,a) values (8,16);
+insert into t (id,a) values (8,17);
+insert into t (id,a) values (8,18);
+insert into t (id,a) values (8,19);
+insert into t (id,a) values (8,20);
+insert into t (id,a) values (8,21);
+insert into t (id,a) values (8,22);
+insert into t (id,a) values (8,23);
+insert into t (id,a) values (8,24);
+insert into t (id,a) values (8,25);
+insert into t (id,a) values (8,26);
+insert into t (id,a) values (8,27);
+insert into t (id,a) values (8,28);
+insert into t (id,a) values (8,29);
+insert into t (id,a) values (8,30);
+insert into t (id,a) values (8,31);
+insert into t (id,a) values (8,32);
+insert into t (id,a) values (8,33);
+insert into t (id,a) values (8,34);
+insert into t (id,a) values (8,35);
+insert into t (id,a) values (8,36);
+insert into t (id,a) values (8,37);
+insert into t (id,a) values (8,38);
+insert into t (id,a) values (8,39);
+insert into t (id,a) values (8,40);
+insert into t (id,a) values (8,41);
+insert into t (id,a) values (8,42);
+insert into t (id,a) values (8,43);
+insert into t (id,a) values (8,44);
+insert into t (id,a) values (8,45);
+insert into t (id,a) values (8,46);
+insert into t (id,a) values (8,47);
+insert into t (id,a) values (8,48);
+insert into t (id,a) values (8,49);
+insert into t (id,a) values (8,50);
+insert into t (id,a) values (8,51);
+insert into t (id,a) values (8,52);
+insert into t (id,a) values (8,53);
+insert into t (id,a) values (8,54);
+insert into t (id,a) values (8,55);
+insert into t (id,a) values (8,56);
+insert into t (id,a) values (8,57);
+insert into t (id,a) values (8,58);
+insert into t (id,a) values (8,59);
+insert into t (id,a) values (8,60);
+insert into t (id,a) values (8,61);
+insert into t (id,a) values (8,62);
+insert into t (id,a) values (8,63);
+insert into t (id,a) values (8,64);
+insert into t (id,a) values (8,65);
+insert into t (id,a) values (8,66);
+insert into t (id,a) values (8,67);
+insert into t (id,a) values (8,68);
+insert into t (id,a) values (8,69);
+insert into t (id,a) values (8,70);
+insert into t (id,a) values (8,71);
+insert into t (id,a) values (8,72);
+insert into t (id,a) values (8,73);
+insert into t (id,a) values (8,74);
+insert into t (id,a) values (8,75);
+insert into t (id,a) values (8,76);
+insert into t (id,a) values (8,77);
+insert into t (id,a) values (8,78);
+insert into t (id,a) values (8,79);
+insert into t (id,a) values (8,80);
+insert into t (id,a) values (8,81);
+insert into t (id,a) values (8,82);
+insert into t (id,a) values (8,83);
+insert into t (id,a) values (8,84);
+insert into t (id,a) values (8,85);
+insert into t (id,a) values (8,86);
+insert into t (id,a) values (8,87);
+insert into t (id,a) values (8,88);
+insert into t (id,a) values (8,89);
+insert into t (id,a) values (8,90);
+insert into t (id,a) values (8,91);
+insert into t (id,a) values (8,92);
+insert into t (id,a) values (8,93);
+insert into t (id,a) values (8,94);
+insert into t (id,a) values (8,95);
+insert into t (id,a) values (8,96);
+insert into t (id,a) values (8,97);
+insert into t (id,a) values (8,98);
+insert into t (id,a) values (8,99);
+insert into t (id,a) values (9,0);
+insert into t (id,a) values (9,1);
+insert into t (id,a) values (9,2);
+insert into t (id,a) values (9,3);
+insert into t (id,a) values (9,4);
+insert into t (id,a) values (9,5);
+insert into t (id,a) values (9,6);
+insert into t (id,a) values (9,7);
+insert into t (id,a) values (9,8);
+insert into t (id,a) values (9,9);
+insert into t (id,a) values (9,10);
+insert into t (id,a) values (9,11);
+insert into t (id,a) values (9,12);
+insert into t (id,a) values (9,13);
+insert into t (id,a) values (9,14);
+insert into t (id,a) values (9,15);
+insert into t (id,a) values (9,16);
+insert into t (id,a) values (9,17);
+insert into t (id,a) values (9,18);
+insert into t (id,a) values (9,19);
+insert into t (id,a) values (9,20);
+insert into t (id,a) values (9,21);
+insert into t (id,a) values (9,22);
+insert into t (id,a) values (9,23);
+insert into t (id,a) values (9,24);
+insert into t (id,a) values (9,25);
+insert into t (id,a) values (9,26);
+insert into t (id,a) values (9,27);
+insert into t (id,a) values (9,28);
+insert into t (id,a) values (9,29);
+insert into t (id,a) values (9,30);
+insert into t (id,a) values (9,31);
+insert into t (id,a) values (9,32);
+insert into t (id,a) values (9,33);
+insert into t (id,a) values (9,34);
+insert into t (id,a) values (9,35);
+insert into t (id,a) values (9,36);
+insert into t (id,a) values (9,37);
+insert into t (id,a) values (9,38);
+insert into t (id,a) values (9,39);
+insert into t (id,a) values (9,40);
+insert into t (id,a) values (9,41);
+insert into t (id,a) values (9,42);
+insert into t (id,a) values (9,43);
+insert into t (id,a) values (9,44);
+insert into t (id,a) values (9,45);
+insert into t (id,a) values (9,46);
+insert into t (id,a) values (9,47);
+insert into t (id,a) values (9,48);
+insert into t (id,a) values (9,49);
+insert into t (id,a) values (9,50);
+insert into t (id,a) values (9,51);
+insert into t (id,a) values (9,52);
+insert into t (id,a) values (9,53);
+insert into t (id,a) values (9,54);
+insert into t (id,a) values (9,55);
+insert into t (id,a) values (9,56);
+insert into t (id,a) values (9,57);
+insert into t (id,a) values (9,58);
+insert into t (id,a) values (9,59);
+insert into t (id,a) values (9,60);
+insert into t (id,a) values (9,61);
+insert into t (id,a) values (9,62);
+insert into t (id,a) values (9,63);
+insert into t (id,a) values (9,64);
+insert into t (id,a) values (9,65);
+insert into t (id,a) values (9,66);
+insert into t (id,a) values (9,67);
+insert into t (id,a) values (9,68);
+insert into t (id,a) values (9,69);
+insert into t (id,a) values (9,70);
+insert into t (id,a) values (9,71);
+insert into t (id,a) values (9,72);
+insert into t (id,a) values (9,73);
+insert into t (id,a) values (9,74);
+insert into t (id,a) values (9,75);
+insert into t (id,a) values (9,76);
+insert into t (id,a) values (9,77);
+insert into t (id,a) values (9,78);
+insert into t (id,a) values (9,79);
+insert into t (id,a) values (9,80);
+insert into t (id,a) values (9,81);
+insert into t (id,a) values (9,82);
+insert into t (id,a) values (9,83);
+insert into t (id,a) values (9,84);
+insert into t (id,a) values (9,85);
+insert into t (id,a) values (9,86);
+insert into t (id,a) values (9,87);
+insert into t (id,a) values (9,88);
+insert into t (id,a) values (9,89);
+insert into t (id,a) values (9,90);
+insert into t (id,a) values (9,91);
+insert into t (id,a) values (9,92);
+insert into t (id,a) values (9,93);
+insert into t (id,a) values (9,94);
+insert into t (id,a) values (9,95);
+insert into t (id,a) values (9,96);
+insert into t (id,a) values (9,97);
+insert into t (id,a) values (9,98);
+insert into t (id,a) values (9,99);
+insert into t (id,a) values (10,0);
+insert into t (id,a) values (10,1);
+insert into t (id,a) values (10,2);
+insert into t (id,a) values (10,3);
+insert into t (id,a) values (10,4);
+insert into t (id,a) values (10,5);
+insert into t (id,a) values (10,6);
+insert into t (id,a) values (10,7);
+insert into t (id,a) values (10,8);
+insert into t (id,a) values (10,9);
+insert into t (id,a) values (10,10);
+insert into t (id,a) values (10,11);
+insert into t (id,a) values (10,12);
+insert into t (id,a) values (10,13);
+insert into t (id,a) values (10,14);
+insert into t (id,a) values (10,15);
+insert into t (id,a) values (10,16);
+insert into t (id,a) values (10,17);
+insert into t (id,a) values (10,18);
+insert into t (id,a) values (10,19);
+insert into t (id,a) values (10,20);
+insert into t (id,a) values (10,21);
+insert into t (id,a) values (10,22);
+insert into t (id,a) values (10,23);
+insert into t (id,a) values (10,24);
+insert into t (id,a) values (10,25);
+insert into t (id,a) values (10,26);
+insert into t (id,a) values (10,27);
+insert into t (id,a) values (10,28);
+insert into t (id,a) values (10,29);
+insert into t (id,a) values (10,30);
+insert into t (id,a) values (10,31);
+insert into t (id,a) values (10,32);
+insert into t (id,a) values (10,33);
+insert into t (id,a) values (10,34);
+insert into t (id,a) values (10,35);
+insert into t (id,a) values (10,36);
+insert into t (id,a) values (10,37);
+insert into t (id,a) values (10,38);
+insert into t (id,a) values (10,39);
+insert into t (id,a) values (10,40);
+insert into t (id,a) values (10,41);
+insert into t (id,a) values (10,42);
+insert into t (id,a) values (10,43);
+insert into t (id,a) values (10,44);
+insert into t (id,a) values (10,45);
+insert into t (id,a) values (10,46);
+insert into t (id,a) values (10,47);
+insert into t (id,a) values (10,48);
+insert into t (id,a) values (10,49);
+insert into t (id,a) values (10,50);
+insert into t (id,a) values (10,51);
+insert into t (id,a) values (10,52);
+insert into t (id,a) values (10,53);
+insert into t (id,a) values (10,54);
+insert into t (id,a) values (10,55);
+insert into t (id,a) values (10,56);
+insert into t (id,a) values (10,57);
+insert into t (id,a) values (10,58);
+insert into t (id,a) values (10,59);
+insert into t (id,a) values (10,60);
+insert into t (id,a) values (10,61);
+insert into t (id,a) values (10,62);
+insert into t (id,a) values (10,63);
+insert into t (id,a) values (10,64);
+insert into t (id,a) values (10,65);
+insert into t (id,a) values (10,66);
+insert into t (id,a) values (10,67);
+insert into t (id,a) values (10,68);
+insert into t (id,a) values (10,69);
+insert into t (id,a) values (10,70);
+insert into t (id,a) values (10,71);
+insert into t (id,a) values (10,72);
+insert into t (id,a) values (10,73);
+insert into t (id,a) values (10,74);
+insert into t (id,a) values (10,75);
+insert into t (id,a) values (10,76);
+insert into t (id,a) values (10,77);
+insert into t (id,a) values (10,78);
+insert into t (id,a) values (10,79);
+insert into t (id,a) values (10,80);
+insert into t (id,a) values (10,81);
+insert into t (id,a) values (10,82);
+insert into t (id,a) values (10,83);
+insert into t (id,a) values (10,84);
+insert into t (id,a) values (10,85);
+insert into t (id,a) values (10,86);
+insert into t (id,a) values (10,87);
+insert into t (id,a) values (10,88);
+insert into t (id,a) values (10,89);
+insert into t (id,a) values (10,90);
+insert into t (id,a) values (10,91);
+insert into t (id,a) values (10,92);
+insert into t (id,a) values (10,93);
+insert into t (id,a) values (10,94);
+insert into t (id,a) values (10,95);
+insert into t (id,a) values (10,96);
+insert into t (id,a) values (10,97);
+insert into t (id,a) values (10,98);
+insert into t (id,a) values (10,99);
+insert into t (id,a) values (11,0);
+insert into t (id,a) values (11,1);
+insert into t (id,a) values (11,2);
+insert into t (id,a) values (11,3);
+insert into t (id,a) values (11,4);
+insert into t (id,a) values (11,5);
+insert into t (id,a) values (11,6);
+insert into t (id,a) values (11,7);
+insert into t (id,a) values (11,8);
+insert into t (id,a) values (11,9);
+insert into t (id,a) values (11,10);
+insert into t (id,a) values (11,11);
+insert into t (id,a) values (11,12);
+insert into t (id,a) values (11,13);
+insert into t (id,a) values (11,14);
+insert into t (id,a) values (11,15);
+insert into t (id,a) values (11,16);
+insert into t (id,a) values (11,17);
+insert into t (id,a) values (11,18);
+insert into t (id,a) values (11,19);
+insert into t (id,a) values (11,20);
+insert into t (id,a) values (11,21);
+insert into t (id,a) values (11,22);
+insert into t (id,a) values (11,23);
+insert into t (id,a) values (11,24);
+insert into t (id,a) values (11,25);
+insert into t (id,a) values (11,26);
+insert into t (id,a) values (11,27);
+insert into t (id,a) values (11,28);
+insert into t (id,a) values (11,29);
+insert into t (id,a) values (11,30);
+insert into t (id,a) values (11,31);
+insert into t (id,a) values (11,32);
+insert into t (id,a) values (11,33);
+insert into t (id,a) values (11,34);
+insert into t (id,a) values (11,35);
+insert into t (id,a) values (11,36);
+insert into t (id,a) values (11,37);
+insert into t (id,a) values (11,38);
+insert into t (id,a) values (11,39);
+insert into t (id,a) values (11,40);
+insert into t (id,a) values (11,41);
+insert into t (id,a) values (11,42);
+insert into t (id,a) values (11,43);
+insert into t (id,a) values (11,44);
+insert into t (id,a) values (11,45);
+insert into t (id,a) values (11,46);
+insert into t (id,a) values (11,47);
+insert into t (id,a) values (11,48);
+insert into t (id,a) values (11,49);
+insert into t (id,a) values (11,50);
+insert into t (id,a) values (11,51);
+insert into t (id,a) values (11,52);
+insert into t (id,a) values (11,53);
+insert into t (id,a) values (11,54);
+insert into t (id,a) values (11,55);
+insert into t (id,a) values (11,56);
+insert into t (id,a) values (11,57);
+insert into t (id,a) values (11,58);
+insert into t (id,a) values (11,59);
+insert into t (id,a) values (11,60);
+insert into t (id,a) values (11,61);
+insert into t (id,a) values (11,62);
+insert into t (id,a) values (11,63);
+insert into t (id,a) values (11,64);
+insert into t (id,a) values (11,65);
+insert into t (id,a) values (11,66);
+insert into t (id,a) values (11,67);
+insert into t (id,a) values (11,68);
+insert into t (id,a) values (11,69);
+insert into t (id,a) values (11,70);
+insert into t (id,a) values (11,71);
+insert into t (id,a) values (11,72);
+insert into t (id,a) values (11,73);
+insert into t (id,a) values (11,74);
+insert into t (id,a) values (11,75);
+insert into t (id,a) values (11,76);
+insert into t (id,a) values (11,77);
+insert into t (id,a) values (11,78);
+insert into t (id,a) values (11,79);
+insert into t (id,a) values (11,80);
+insert into t (id,a) values (11,81);
+insert into t (id,a) values (11,82);
+insert into t (id,a) values (11,83);
+insert into t (id,a) values (11,84);
+insert into t (id,a) values (11,85);
+insert into t (id,a) values (11,86);
+insert into t (id,a) values (11,87);
+insert into t (id,a) values (11,88);
+insert into t (id,a) values (11,89);
+insert into t (id,a) values (11,90);
+insert into t (id,a) values (11,91);
+insert into t (id,a) values (11,92);
+insert into t (id,a) values (11,93);
+insert into t (id,a) values (11,94);
+insert into t (id,a) values (11,95);
+insert into t (id,a) values (11,96);
+insert into t (id,a) values (11,97);
+insert into t (id,a) values (11,98);
+insert into t (id,a) values (11,99);
+insert into t (id,a) values (12,0);
+insert into t (id,a) values (12,1);
+insert into t (id,a) values (12,2);
+insert into t (id,a) values (12,3);
+insert into t (id,a) values (12,4);
+insert into t (id,a) values (12,5);
+insert into t (id,a) values (12,6);
+insert into t (id,a) values (12,7);
+insert into t (id,a) values (12,8);
+insert into t (id,a) values (12,9);
+insert into t (id,a) values (12,10);
+insert into t (id,a) values (12,11);
+insert into t (id,a) values (12,12);
+insert into t (id,a) values (12,13);
+insert into t (id,a) values (12,14);
+insert into t (id,a) values (12,15);
+insert into t (id,a) values (12,16);
+insert into t (id,a) values (12,17);
+insert into t (id,a) values (12,18);
+insert into t (id,a) values (12,19);
+insert into t (id,a) values (12,20);
+insert into t (id,a) values (12,21);
+insert into t (id,a) values (12,22);
+insert into t (id,a) values (12,23);
+insert into t (id,a) values (12,24);
+insert into t (id,a) values (12,25);
+insert into t (id,a) values (12,26);
+insert into t (id,a) values (12,27);
+insert into t (id,a) values (12,28);
+insert into t (id,a) values (12,29);
+insert into t (id,a) values (12,30);
+insert into t (id,a) values (12,31);
+insert into t (id,a) values (12,32);
+insert into t (id,a) values (12,33);
+insert into t (id,a) values (12,34);
+insert into t (id,a) values (12,35);
+insert into t (id,a) values (12,36);
+insert into t (id,a) values (12,37);
+insert into t (id,a) values (12,38);
+insert into t (id,a) values (12,39);
+insert into t (id,a) values (12,40);
+insert into t (id,a) values (12,41);
+insert into t (id,a) values (12,42);
+insert into t (id,a) values (12,43);
+insert into t (id,a) values (12,44);
+insert into t (id,a) values (12,45);
+insert into t (id,a) values (12,46);
+insert into t (id,a) values (12,47);
+insert into t (id,a) values (12,48);
+insert into t (id,a) values (12,49);
+insert into t (id,a) values (12,50);
+insert into t (id,a) values (12,51);
+insert into t (id,a) values (12,52);
+insert into t (id,a) values (12,53);
+insert into t (id,a) values (12,54);
+insert into t (id,a) values (12,55);
+insert into t (id,a) values (12,56);
+insert into t (id,a) values (12,57);
+insert into t (id,a) values (12,58);
+insert into t (id,a) values (12,59);
+insert into t (id,a) values (12,60);
+insert into t (id,a) values (12,61);
+insert into t (id,a) values (12,62);
+insert into t (id,a) values (12,63);
+insert into t (id,a) values (12,64);
+insert into t (id,a) values (12,65);
+insert into t (id,a) values (12,66);
+insert into t (id,a) values (12,67);
+insert into t (id,a) values (12,68);
+insert into t (id,a) values (12,69);
+insert into t (id,a) values (12,70);
+insert into t (id,a) values (12,71);
+insert into t (id,a) values (12,72);
+insert into t (id,a) values (12,73);
+insert into t (id,a) values (12,74);
+insert into t (id,a) values (12,75);
+insert into t (id,a) values (12,76);
+insert into t (id,a) values (12,77);
+insert into t (id,a) values (12,78);
+insert into t (id,a) values (12,79);
+insert into t (id,a) values (12,80);
+insert into t (id,a) values (12,81);
+insert into t (id,a) values (12,82);
+insert into t (id,a) values (12,83);
+insert into t (id,a) values (12,84);
+insert into t (id,a) values (12,85);
+insert into t (id,a) values (12,86);
+insert into t (id,a) values (12,87);
+insert into t (id,a) values (12,88);
+insert into t (id,a) values (12,89);
+insert into t (id,a) values (12,90);
+insert into t (id,a) values (12,91);
+insert into t (id,a) values (12,92);
+insert into t (id,a) values (12,93);
+insert into t (id,a) values (12,94);
+insert into t (id,a) values (12,95);
+insert into t (id,a) values (12,96);
+insert into t (id,a) values (12,97);
+insert into t (id,a) values (12,98);
+insert into t (id,a) values (12,99);
+insert into t (id,a) values (13,0);
+insert into t (id,a) values (13,1);
+insert into t (id,a) values (13,2);
+insert into t (id,a) values (13,3);
+insert into t (id,a) values (13,4);
+insert into t (id,a) values (13,5);
+insert into t (id,a) values (13,6);
+insert into t (id,a) values (13,7);
+insert into t (id,a) values (13,8);
+insert into t (id,a) values (13,9);
+insert into t (id,a) values (13,10);
+insert into t (id,a) values (13,11);
+insert into t (id,a) values (13,12);
+insert into t (id,a) values (13,13);
+insert into t (id,a) values (13,14);
+insert into t (id,a) values (13,15);
+insert into t (id,a) values (13,16);
+insert into t (id,a) values (13,17);
+insert into t (id,a) values (13,18);
+insert into t (id,a) values (13,19);
+insert into t (id,a) values (13,20);
+insert into t (id,a) values (13,21);
+insert into t (id,a) values (13,22);
+insert into t (id,a) values (13,23);
+insert into t (id,a) values (13,24);
+insert into t (id,a) values (13,25);
+insert into t (id,a) values (13,26);
+insert into t (id,a) values (13,27);
+insert into t (id,a) values (13,28);
+insert into t (id,a) values (13,29);
+insert into t (id,a) values (13,30);
+insert into t (id,a) values (13,31);
+insert into t (id,a) values (13,32);
+insert into t (id,a) values (13,33);
+insert into t (id,a) values (13,34);
+insert into t (id,a) values (13,35);
+insert into t (id,a) values (13,36);
+insert into t (id,a) values (13,37);
+insert into t (id,a) values (13,38);
+insert into t (id,a) values (13,39);
+insert into t (id,a) values (13,40);
+insert into t (id,a) values (13,41);
+insert into t (id,a) values (13,42);
+insert into t (id,a) values (13,43);
+insert into t (id,a) values (13,44);
+insert into t (id,a) values (13,45);
+insert into t (id,a) values (13,46);
+insert into t (id,a) values (13,47);
+insert into t (id,a) values (13,48);
+insert into t (id,a) values (13,49);
+insert into t (id,a) values (13,50);
+insert into t (id,a) values (13,51);
+insert into t (id,a) values (13,52);
+insert into t (id,a) values (13,53);
+insert into t (id,a) values (13,54);
+insert into t (id,a) values (13,55);
+insert into t (id,a) values (13,56);
+insert into t (id,a) values (13,57);
+insert into t (id,a) values (13,58);
+insert into t (id,a) values (13,59);
+insert into t (id,a) values (13,60);
+insert into t (id,a) values (13,61);
+insert into t (id,a) values (13,62);
+insert into t (id,a) values (13,63);
+insert into t (id,a) values (13,64);
+insert into t (id,a) values (13,65);
+insert into t (id,a) values (13,66);
+insert into t (id,a) values (13,67);
+insert into t (id,a) values (13,68);
+insert into t (id,a) values (13,69);
+insert into t (id,a) values (13,70);
+insert into t (id,a) values (13,71);
+insert into t (id,a) values (13,72);
+insert into t (id,a) values (13,73);
+insert into t (id,a) values (13,74);
+insert into t (id,a) values (13,75);
+insert into t (id,a) values (13,76);
+insert into t (id,a) values (13,77);
+insert into t (id,a) values (13,78);
+insert into t (id,a) values (13,79);
+insert into t (id,a) values (13,80);
+insert into t (id,a) values (13,81);
+insert into t (id,a) values (13,82);
+insert into t (id,a) values (13,83);
+insert into t (id,a) values (13,84);
+insert into t (id,a) values (13,85);
+insert into t (id,a) values (13,86);
+insert into t (id,a) values (13,87);
+insert into t (id,a) values (13,88);
+insert into t (id,a) values (13,89);
+insert into t (id,a) values (13,90);
+insert into t (id,a) values (13,91);
+insert into t (id,a) values (13,92);
+insert into t (id,a) values (13,93);
+insert into t (id,a) values (13,94);
+insert into t (id,a) values (13,95);
+insert into t (id,a) values (13,96);
+insert into t (id,a) values (13,97);
+insert into t (id,a) values (13,98);
+insert into t (id,a) values (13,99);
+insert into t (id,a) values (14,0);
+insert into t (id,a) values (14,1);
+insert into t (id,a) values (14,2);
+insert into t (id,a) values (14,3);
+insert into t (id,a) values (14,4);
+insert into t (id,a) values (14,5);
+insert into t (id,a) values (14,6);
+insert into t (id,a) values (14,7);
+insert into t (id,a) values (14,8);
+insert into t (id,a) values (14,9);
+insert into t (id,a) values (14,10);
+insert into t (id,a) values (14,11);
+insert into t (id,a) values (14,12);
+insert into t (id,a) values (14,13);
+insert into t (id,a) values (14,14);
+insert into t (id,a) values (14,15);
+insert into t (id,a) values (14,16);
+insert into t (id,a) values (14,17);
+insert into t (id,a) values (14,18);
+insert into t (id,a) values (14,19);
+insert into t (id,a) values (14,20);
+insert into t (id,a) values (14,21);
+insert into t (id,a) values (14,22);
+insert into t (id,a) values (14,23);
+insert into t (id,a) values (14,24);
+insert into t (id,a) values (14,25);
+insert into t (id,a) values (14,26);
+insert into t (id,a) values (14,27);
+insert into t (id,a) values (14,28);
+insert into t (id,a) values (14,29);
+insert into t (id,a) values (14,30);
+insert into t (id,a) values (14,31);
+insert into t (id,a) values (14,32);
+insert into t (id,a) values (14,33);
+insert into t (id,a) values (14,34);
+insert into t (id,a) values (14,35);
+insert into t (id,a) values (14,36);
+insert into t (id,a) values (14,37);
+insert into t (id,a) values (14,38);
+insert into t (id,a) values (14,39);
+insert into t (id,a) values (14,40);
+insert into t (id,a) values (14,41);
+insert into t (id,a) values (14,42);
+insert into t (id,a) values (14,43);
+insert into t (id,a) values (14,44);
+insert into t (id,a) values (14,45);
+insert into t (id,a) values (14,46);
+insert into t (id,a) values (14,47);
+insert into t (id,a) values (14,48);
+insert into t (id,a) values (14,49);
+insert into t (id,a) values (14,50);
+insert into t (id,a) values (14,51);
+insert into t (id,a) values (14,52);
+insert into t (id,a) values (14,53);
+insert into t (id,a) values (14,54);
+insert into t (id,a) values (14,55);
+insert into t (id,a) values (14,56);
+insert into t (id,a) values (14,57);
+insert into t (id,a) values (14,58);
+insert into t (id,a) values (14,59);
+insert into t (id,a) values (14,60);
+insert into t (id,a) values (14,61);
+insert into t (id,a) values (14,62);
+insert into t (id,a) values (14,63);
+insert into t (id,a) values (14,64);
+insert into t (id,a) values (14,65);
+insert into t (id,a) values (14,66);
+insert into t (id,a) values (14,67);
+insert into t (id,a) values (14,68);
+insert into t (id,a) values (14,69);
+insert into t (id,a) values (14,70);
+insert into t (id,a) values (14,71);
+insert into t (id,a) values (14,72);
+insert into t (id,a) values (14,73);
+insert into t (id,a) values (14,74);
+insert into t (id,a) values (14,75);
+insert into t (id,a) values (14,76);
+insert into t (id,a) values (14,77);
+insert into t (id,a) values (14,78);
+insert into t (id,a) values (14,79);
+insert into t (id,a) values (14,80);
+insert into t (id,a) values (14,81);
+insert into t (id,a) values (14,82);
+insert into t (id,a) values (14,83);
+insert into t (id,a) values (14,84);
+insert into t (id,a) values (14,85);
+insert into t (id,a) values (14,86);
+insert into t (id,a) values (14,87);
+insert into t (id,a) values (14,88);
+insert into t (id,a) values (14,89);
+insert into t (id,a) values (14,90);
+insert into t (id,a) values (14,91);
+insert into t (id,a) values (14,92);
+insert into t (id,a) values (14,93);
+insert into t (id,a) values (14,94);
+insert into t (id,a) values (14,95);
+insert into t (id,a) values (14,96);
+insert into t (id,a) values (14,97);
+insert into t (id,a) values (14,98);
+insert into t (id,a) values (14,99);
+insert into t (id,a) values (15,0);
+insert into t (id,a) values (15,1);
+insert into t (id,a) values (15,2);
+insert into t (id,a) values (15,3);
+insert into t (id,a) values (15,4);
+insert into t (id,a) values (15,5);
+insert into t (id,a) values (15,6);
+insert into t (id,a) values (15,7);
+insert into t (id,a) values (15,8);
+insert into t (id,a) values (15,9);
+insert into t (id,a) values (15,10);
+insert into t (id,a) values (15,11);
+insert into t (id,a) values (15,12);
+insert into t (id,a) values (15,13);
+insert into t (id,a) values (15,14);
+insert into t (id,a) values (15,15);
+insert into t (id,a) values (15,16);
+insert into t (id,a) values (15,17);
+insert into t (id,a) values (15,18);
+insert into t (id,a) values (15,19);
+insert into t (id,a) values (15,20);
+insert into t (id,a) values (15,21);
+insert into t (id,a) values (15,22);
+insert into t (id,a) values (15,23);
+insert into t (id,a) values (15,24);
+insert into t (id,a) values (15,25);
+insert into t (id,a) values (15,26);
+insert into t (id,a) values (15,27);
+insert into t (id,a) values (15,28);
+insert into t (id,a) values (15,29);
+insert into t (id,a) values (15,30);
+insert into t (id,a) values (15,31);
+insert into t (id,a) values (15,32);
+insert into t (id,a) values (15,33);
+insert into t (id,a) values (15,34);
+insert into t (id,a) values (15,35);
+insert into t (id,a) values (15,36);
+insert into t (id,a) values (15,37);
+insert into t (id,a) values (15,38);
+insert into t (id,a) values (15,39);
+insert into t (id,a) values (15,40);
+insert into t (id,a) values (15,41);
+insert into t (id,a) values (15,42);
+insert into t (id,a) values (15,43);
+insert into t (id,a) values (15,44);
+insert into t (id,a) values (15,45);
+insert into t (id,a) values (15,46);
+insert into t (id,a) values (15,47);
+insert into t (id,a) values (15,48);
+insert into t (id,a) values (15,49);
+insert into t (id,a) values (15,50);
+insert into t (id,a) values (15,51);
+insert into t (id,a) values (15,52);
+insert into t (id,a) values (15,53);
+insert into t (id,a) values (15,54);
+insert into t (id,a) values (15,55);
+insert into t (id,a) values (15,56);
+insert into t (id,a) values (15,57);
+insert into t (id,a) values (15,58);
+insert into t (id,a) values (15,59);
+insert into t (id,a) values (15,60);
+insert into t (id,a) values (15,61);
+insert into t (id,a) values (15,62);
+insert into t (id,a) values (15,63);
+insert into t (id,a) values (15,64);
+insert into t (id,a) values (15,65);
+insert into t (id,a) values (15,66);
+insert into t (id,a) values (15,67);
+insert into t (id,a) values (15,68);
+insert into t (id,a) values (15,69);
+insert into t (id,a) values (15,70);
+insert into t (id,a) values (15,71);
+insert into t (id,a) values (15,72);
+insert into t (id,a) values (15,73);
+insert into t (id,a) values (15,74);
+insert into t (id,a) values (15,75);
+insert into t (id,a) values (15,76);
+insert into t (id,a) values (15,77);
+insert into t (id,a) values (15,78);
+insert into t (id,a) values (15,79);
+insert into t (id,a) values (15,80);
+insert into t (id,a) values (15,81);
+insert into t (id,a) values (15,82);
+insert into t (id,a) values (15,83);
+insert into t (id,a) values (15,84);
+insert into t (id,a) values (15,85);
+insert into t (id,a) values (15,86);
+insert into t (id,a) values (15,87);
+insert into t (id,a) values (15,88);
+insert into t (id,a) values (15,89);
+insert into t (id,a) values (15,90);
+insert into t (id,a) values (15,91);
+insert into t (id,a) values (15,92);
+insert into t (id,a) values (15,93);
+insert into t (id,a) values (15,94);
+insert into t (id,a) values (15,95);
+insert into t (id,a) values (15,96);
+insert into t (id,a) values (15,97);
+insert into t (id,a) values (15,98);
+insert into t (id,a) values (15,99);
+insert into t (id,a) values (16,0);
+insert into t (id,a) values (16,1);
+insert into t (id,a) values (16,2);
+insert into t (id,a) values (16,3);
+insert into t (id,a) values (16,4);
+insert into t (id,a) values (16,5);
+insert into t (id,a) values (16,6);
+insert into t (id,a) values (16,7);
+insert into t (id,a) values (16,8);
+insert into t (id,a) values (16,9);
+insert into t (id,a) values (16,10);
+insert into t (id,a) values (16,11);
+insert into t (id,a) values (16,12);
+insert into t (id,a) values (16,13);
+insert into t (id,a) values (16,14);
+insert into t (id,a) values (16,15);
+insert into t (id,a) values (16,16);
+insert into t (id,a) values (16,17);
+insert into t (id,a) values (16,18);
+insert into t (id,a) values (16,19);
+insert into t (id,a) values (16,20);
+insert into t (id,a) values (16,21);
+insert into t (id,a) values (16,22);
+insert into t (id,a) values (16,23);
+insert into t (id,a) values (16,24);
+insert into t (id,a) values (16,25);
+insert into t (id,a) values (16,26);
+insert into t (id,a) values (16,27);
+insert into t (id,a) values (16,28);
+insert into t (id,a) values (16,29);
+insert into t (id,a) values (16,30);
+insert into t (id,a) values (16,31);
+insert into t (id,a) values (16,32);
+insert into t (id,a) values (16,33);
+insert into t (id,a) values (16,34);
+insert into t (id,a) values (16,35);
+insert into t (id,a) values (16,36);
+insert into t (id,a) values (16,37);
+insert into t (id,a) values (16,38);
+insert into t (id,a) values (16,39);
+insert into t (id,a) values (16,40);
+insert into t (id,a) values (16,41);
+insert into t (id,a) values (16,42);
+insert into t (id,a) values (16,43);
+insert into t (id,a) values (16,44);
+insert into t (id,a) values (16,45);
+insert into t (id,a) values (16,46);
+insert into t (id,a) values (16,47);
+insert into t (id,a) values (16,48);
+insert into t (id,a) values (16,49);
+insert into t (id,a) values (16,50);
+insert into t (id,a) values (16,51);
+insert into t (id,a) values (16,52);
+insert into t (id,a) values (16,53);
+insert into t (id,a) values (16,54);
+insert into t (id,a) values (16,55);
+insert into t (id,a) values (16,56);
+insert into t (id,a) values (16,57);
+insert into t (id,a) values (16,58);
+insert into t (id,a) values (16,59);
+insert into t (id,a) values (16,60);
+insert into t (id,a) values (16,61);
+insert into t (id,a) values (16,62);
+insert into t (id,a) values (16,63);
+insert into t (id,a) values (16,64);
+insert into t (id,a) values (16,65);
+insert into t (id,a) values (16,66);
+insert into t (id,a) values (16,67);
+insert into t (id,a) values (16,68);
+insert into t (id,a) values (16,69);
+insert into t (id,a) values (16,70);
+insert into t (id,a) values (16,71);
+insert into t (id,a) values (16,72);
+insert into t (id,a) values (16,73);
+insert into t (id,a) values (16,74);
+insert into t (id,a) values (16,75);
+insert into t (id,a) values (16,76);
+insert into t (id,a) values (16,77);
+insert into t (id,a) values (16,78);
+insert into t (id,a) values (16,79);
+insert into t (id,a) values (16,80);
+insert into t (id,a) values (16,81);
+insert into t (id,a) values (16,82);
+insert into t (id,a) values (16,83);
+insert into t (id,a) values (16,84);
+insert into t (id,a) values (16,85);
+insert into t (id,a) values (16,86);
+insert into t (id,a) values (16,87);
+insert into t (id,a) values (16,88);
+insert into t (id,a) values (16,89);
+insert into t (id,a) values (16,90);
+insert into t (id,a) values (16,91);
+insert into t (id,a) values (16,92);
+insert into t (id,a) values (16,93);
+insert into t (id,a) values (16,94);
+insert into t (id,a) values (16,95);
+insert into t (id,a) values (16,96);
+insert into t (id,a) values (16,97);
+insert into t (id,a) values (16,98);
+insert into t (id,a) values (16,99);
+insert into t (id,a) values (17,0);
+insert into t (id,a) values (17,1);
+insert into t (id,a) values (17,2);
+insert into t (id,a) values (17,3);
+insert into t (id,a) values (17,4);
+insert into t (id,a) values (17,5);
+insert into t (id,a) values (17,6);
+insert into t (id,a) values (17,7);
+insert into t (id,a) values (17,8);
+insert into t (id,a) values (17,9);
+insert into t (id,a) values (17,10);
+insert into t (id,a) values (17,11);
+insert into t (id,a) values (17,12);
+insert into t (id,a) values (17,13);
+insert into t (id,a) values (17,14);
+insert into t (id,a) values (17,15);
+insert into t (id,a) values (17,16);
+insert into t (id,a) values (17,17);
+insert into t (id,a) values (17,18);
+insert into t (id,a) values (17,19);
+insert into t (id,a) values (17,20);
+insert into t (id,a) values (17,21);
+insert into t (id,a) values (17,22);
+insert into t (id,a) values (17,23);
+insert into t (id,a) values (17,24);
+insert into t (id,a) values (17,25);
+insert into t (id,a) values (17,26);
+insert into t (id,a) values (17,27);
+insert into t (id,a) values (17,28);
+insert into t (id,a) values (17,29);
+insert into t (id,a) values (17,30);
+insert into t (id,a) values (17,31);
+insert into t (id,a) values (17,32);
+insert into t (id,a) values (17,33);
+insert into t (id,a) values (17,34);
+insert into t (id,a) values (17,35);
+insert into t (id,a) values (17,36);
+insert into t (id,a) values (17,37);
+insert into t (id,a) values (17,38);
+insert into t (id,a) values (17,39);
+insert into t (id,a) values (17,40);
+insert into t (id,a) values (17,41);
+insert into t (id,a) values (17,42);
+insert into t (id,a) values (17,43);
+insert into t (id,a) values (17,44);
+insert into t (id,a) values (17,45);
+insert into t (id,a) values (17,46);
+insert into t (id,a) values (17,47);
+insert into t (id,a) values (17,48);
+insert into t (id,a) values (17,49);
+insert into t (id,a) values (17,50);
+insert into t (id,a) values (17,51);
+insert into t (id,a) values (17,52);
+insert into t (id,a) values (17,53);
+insert into t (id,a) values (17,54);
+insert into t (id,a) values (17,55);
+insert into t (id,a) values (17,56);
+insert into t (id,a) values (17,57);
+insert into t (id,a) values (17,58);
+insert into t (id,a) values (17,59);
+insert into t (id,a) values (17,60);
+insert into t (id,a) values (17,61);
+insert into t (id,a) values (17,62);
+insert into t (id,a) values (17,63);
+insert into t (id,a) values (17,64);
+insert into t (id,a) values (17,65);
+insert into t (id,a) values (17,66);
+insert into t (id,a) values (17,67);
+insert into t (id,a) values (17,68);
+insert into t (id,a) values (17,69);
+insert into t (id,a) values (17,70);
+insert into t (id,a) values (17,71);
+insert into t (id,a) values (17,72);
+insert into t (id,a) values (17,73);
+insert into t (id,a) values (17,74);
+insert into t (id,a) values (17,75);
+insert into t (id,a) values (17,76);
+insert into t (id,a) values (17,77);
+insert into t (id,a) values (17,78);
+insert into t (id,a) values (17,79);
+insert into t (id,a) values (17,80);
+insert into t (id,a) values (17,81);
+insert into t (id,a) values (17,82);
+insert into t (id,a) values (17,83);
+insert into t (id,a) values (17,84);
+insert into t (id,a) values (17,85);
+insert into t (id,a) values (17,86);
+insert into t (id,a) values (17,87);
+insert into t (id,a) values (17,88);
+insert into t (id,a) values (17,89);
+insert into t (id,a) values (17,90);
+insert into t (id,a) values (17,91);
+insert into t (id,a) values (17,92);
+insert into t (id,a) values (17,93);
+insert into t (id,a) values (17,94);
+insert into t (id,a) values (17,95);
+insert into t (id,a) values (17,96);
+insert into t (id,a) values (17,97);
+insert into t (id,a) values (17,98);
+insert into t (id,a) values (17,99);
+insert into t (id,a) values (18,0);
+insert into t (id,a) values (18,1);
+insert into t (id,a) values (18,2);
+insert into t (id,a) values (18,3);
+insert into t (id,a) values (18,4);
+insert into t (id,a) values (18,5);
+insert into t (id,a) values (18,6);
+insert into t (id,a) values (18,7);
+insert into t (id,a) values (18,8);
+insert into t (id,a) values (18,9);
+insert into t (id,a) values (18,10);
+insert into t (id,a) values (18,11);
+insert into t (id,a) values (18,12);
+insert into t (id,a) values (18,13);
+insert into t (id,a) values (18,14);
+insert into t (id,a) values (18,15);
+insert into t (id,a) values (18,16);
+insert into t (id,a) values (18,17);
+insert into t (id,a) values (18,18);
+insert into t (id,a) values (18,19);
+insert into t (id,a) values (18,20);
+insert into t (id,a) values (18,21);
+insert into t (id,a) values (18,22);
+insert into t (id,a) values (18,23);
+insert into t (id,a) values (18,24);
+insert into t (id,a) values (18,25);
+insert into t (id,a) values (18,26);
+insert into t (id,a) values (18,27);
+insert into t (id,a) values (18,28);
+insert into t (id,a) values (18,29);
+insert into t (id,a) values (18,30);
+insert into t (id,a) values (18,31);
+insert into t (id,a) values (18,32);
+insert into t (id,a) values (18,33);
+insert into t (id,a) values (18,34);
+insert into t (id,a) values (18,35);
+insert into t (id,a) values (18,36);
+insert into t (id,a) values (18,37);
+insert into t (id,a) values (18,38);
+insert into t (id,a) values (18,39);
+insert into t (id,a) values (18,40);
+insert into t (id,a) values (18,41);
+insert into t (id,a) values (18,42);
+insert into t (id,a) values (18,43);
+insert into t (id,a) values (18,44);
+insert into t (id,a) values (18,45);
+insert into t (id,a) values (18,46);
+insert into t (id,a) values (18,47);
+insert into t (id,a) values (18,48);
+insert into t (id,a) values (18,49);
+insert into t (id,a) values (18,50);
+insert into t (id,a) values (18,51);
+insert into t (id,a) values (18,52);
+insert into t (id,a) values (18,53);
+insert into t (id,a) values (18,54);
+insert into t (id,a) values (18,55);
+insert into t (id,a) values (18,56);
+insert into t (id,a) values (18,57);
+insert into t (id,a) values (18,58);
+insert into t (id,a) values (18,59);
+insert into t (id,a) values (18,60);
+insert into t (id,a) values (18,61);
+insert into t (id,a) values (18,62);
+insert into t (id,a) values (18,63);
+insert into t (id,a) values (18,64);
+insert into t (id,a) values (18,65);
+insert into t (id,a) values (18,66);
+insert into t (id,a) values (18,67);
+insert into t (id,a) values (18,68);
+insert into t (id,a) values (18,69);
+insert into t (id,a) values (18,70);
+insert into t (id,a) values (18,71);
+insert into t (id,a) values (18,72);
+insert into t (id,a) values (18,73);
+insert into t (id,a) values (18,74);
+insert into t (id,a) values (18,75);
+insert into t (id,a) values (18,76);
+insert into t (id,a) values (18,77);
+insert into t (id,a) values (18,78);
+insert into t (id,a) values (18,79);
+insert into t (id,a) values (18,80);
+insert into t (id,a) values (18,81);
+insert into t (id,a) values (18,82);
+insert into t (id,a) values (18,83);
+insert into t (id,a) values (18,84);
+insert into t (id,a) values (18,85);
+insert into t (id,a) values (18,86);
+insert into t (id,a) values (18,87);
+insert into t (id,a) values (18,88);
+insert into t (id,a) values (18,89);
+insert into t (id,a) values (18,90);
+insert into t (id,a) values (18,91);
+insert into t (id,a) values (18,92);
+insert into t (id,a) values (18,93);
+insert into t (id,a) values (18,94);
+insert into t (id,a) values (18,95);
+insert into t (id,a) values (18,96);
+insert into t (id,a) values (18,97);
+insert into t (id,a) values (18,98);
+insert into t (id,a) values (18,99);
+insert into t (id,a) values (19,0);
+insert into t (id,a) values (19,1);
+insert into t (id,a) values (19,2);
+insert into t (id,a) values (19,3);
+insert into t (id,a) values (19,4);
+insert into t (id,a) values (19,5);
+insert into t (id,a) values (19,6);
+insert into t (id,a) values (19,7);
+insert into t (id,a) values (19,8);
+insert into t (id,a) values (19,9);
+insert into t (id,a) values (19,10);
+insert into t (id,a) values (19,11);
+insert into t (id,a) values (19,12);
+insert into t (id,a) values (19,13);
+insert into t (id,a) values (19,14);
+insert into t (id,a) values (19,15);
+insert into t (id,a) values (19,16);
+insert into t (id,a) values (19,17);
+insert into t (id,a) values (19,18);
+insert into t (id,a) values (19,19);
+insert into t (id,a) values (19,20);
+insert into t (id,a) values (19,21);
+insert into t (id,a) values (19,22);
+insert into t (id,a) values (19,23);
+insert into t (id,a) values (19,24);
+insert into t (id,a) values (19,25);
+insert into t (id,a) values (19,26);
+insert into t (id,a) values (19,27);
+insert into t (id,a) values (19,28);
+insert into t (id,a) values (19,29);
+insert into t (id,a) values (19,30);
+insert into t (id,a) values (19,31);
+insert into t (id,a) values (19,32);
+insert into t (id,a) values (19,33);
+insert into t (id,a) values (19,34);
+insert into t (id,a) values (19,35);
+insert into t (id,a) values (19,36);
+insert into t (id,a) values (19,37);
+insert into t (id,a) values (19,38);
+insert into t (id,a) values (19,39);
+insert into t (id,a) values (19,40);
+insert into t (id,a) values (19,41);
+insert into t (id,a) values (19,42);
+insert into t (id,a) values (19,43);
+insert into t (id,a) values (19,44);
+insert into t (id,a) values (19,45);
+insert into t (id,a) values (19,46);
+insert into t (id,a) values (19,47);
+insert into t (id,a) values (19,48);
+insert into t (id,a) values (19,49);
+insert into t (id,a) values (19,50);
+insert into t (id,a) values (19,51);
+insert into t (id,a) values (19,52);
+insert into t (id,a) values (19,53);
+insert into t (id,a) values (19,54);
+insert into t (id,a) values (19,55);
+insert into t (id,a) values (19,56);
+insert into t (id,a) values (19,57);
+insert into t (id,a) values (19,58);
+insert into t (id,a) values (19,59);
+insert into t (id,a) values (19,60);
+insert into t (id,a) values (19,61);
+insert into t (id,a) values (19,62);
+insert into t (id,a) values (19,63);
+insert into t (id,a) values (19,64);
+insert into t (id,a) values (19,65);
+insert into t (id,a) values (19,66);
+insert into t (id,a) values (19,67);
+insert into t (id,a) values (19,68);
+insert into t (id,a) values (19,69);
+insert into t (id,a) values (19,70);
+insert into t (id,a) values (19,71);
+insert into t (id,a) values (19,72);
+insert into t (id,a) values (19,73);
+insert into t (id,a) values (19,74);
+insert into t (id,a) values (19,75);
+insert into t (id,a) values (19,76);
+insert into t (id,a) values (19,77);
+insert into t (id,a) values (19,78);
+insert into t (id,a) values (19,79);
+insert into t (id,a) values (19,80);
+insert into t (id,a) values (19,81);
+insert into t (id,a) values (19,82);
+insert into t (id,a) values (19,83);
+insert into t (id,a) values (19,84);
+insert into t (id,a) values (19,85);
+insert into t (id,a) values (19,86);
+insert into t (id,a) values (19,87);
+insert into t (id,a) values (19,88);
+insert into t (id,a) values (19,89);
+insert into t (id,a) values (19,90);
+insert into t (id,a) values (19,91);
+insert into t (id,a) values (19,92);
+insert into t (id,a) values (19,93);
+insert into t (id,a) values (19,94);
+insert into t (id,a) values (19,95);
+insert into t (id,a) values (19,96);
+insert into t (id,a) values (19,97);
+insert into t (id,a) values (19,98);
+insert into t (id,a) values (19,99);
+insert into t (id,a) values (20,0);
+insert into t (id,a) values (20,1);
+insert into t (id,a) values (20,2);
+insert into t (id,a) values (20,3);
+insert into t (id,a) values (20,4);
+insert into t (id,a) values (20,5);
+insert into t (id,a) values (20,6);
+insert into t (id,a) values (20,7);
+insert into t (id,a) values (20,8);
+insert into t (id,a) values (20,9);
+insert into t (id,a) values (20,10);
+insert into t (id,a) values (20,11);
+insert into t (id,a) values (20,12);
+insert into t (id,a) values (20,13);
+insert into t (id,a) values (20,14);
+insert into t (id,a) values (20,15);
+insert into t (id,a) values (20,16);
+insert into t (id,a) values (20,17);
+insert into t (id,a) values (20,18);
+insert into t (id,a) values (20,19);
+insert into t (id,a) values (20,20);
+insert into t (id,a) values (20,21);
+insert into t (id,a) values (20,22);
+insert into t (id,a) values (20,23);
+insert into t (id,a) values (20,24);
+insert into t (id,a) values (20,25);
+insert into t (id,a) values (20,26);
+insert into t (id,a) values (20,27);
+insert into t (id,a) values (20,28);
+insert into t (id,a) values (20,29);
+insert into t (id,a) values (20,30);
+insert into t (id,a) values (20,31);
+insert into t (id,a) values (20,32);
+insert into t (id,a) values (20,33);
+insert into t (id,a) values (20,34);
+insert into t (id,a) values (20,35);
+insert into t (id,a) values (20,36);
+insert into t (id,a) values (20,37);
+insert into t (id,a) values (20,38);
+insert into t (id,a) values (20,39);
+insert into t (id,a) values (20,40);
+insert into t (id,a) values (20,41);
+insert into t (id,a) values (20,42);
+insert into t (id,a) values (20,43);
+insert into t (id,a) values (20,44);
+insert into t (id,a) values (20,45);
+insert into t (id,a) values (20,46);
+insert into t (id,a) values (20,47);
+insert into t (id,a) values (20,48);
+insert into t (id,a) values (20,49);
+insert into t (id,a) values (20,50);
+insert into t (id,a) values (20,51);
+insert into t (id,a) values (20,52);
+insert into t (id,a) values (20,53);
+insert into t (id,a) values (20,54);
+insert into t (id,a) values (20,55);
+insert into t (id,a) values (20,56);
+insert into t (id,a) values (20,57);
+insert into t (id,a) values (20,58);
+insert into t (id,a) values (20,59);
+insert into t (id,a) values (20,60);
+insert into t (id,a) values (20,61);
+insert into t (id,a) values (20,62);
+insert into t (id,a) values (20,63);
+insert into t (id,a) values (20,64);
+insert into t (id,a) values (20,65);
+insert into t (id,a) values (20,66);
+insert into t (id,a) values (20,67);
+insert into t (id,a) values (20,68);
+insert into t (id,a) values (20,69);
+insert into t (id,a) values (20,70);
+insert into t (id,a) values (20,71);
+insert into t (id,a) values (20,72);
+insert into t (id,a) values (20,73);
+insert into t (id,a) values (20,74);
+insert into t (id,a) values (20,75);
+insert into t (id,a) values (20,76);
+insert into t (id,a) values (20,77);
+insert into t (id,a) values (20,78);
+insert into t (id,a) values (20,79);
+insert into t (id,a) values (20,80);
+insert into t (id,a) values (20,81);
+insert into t (id,a) values (20,82);
+insert into t (id,a) values (20,83);
+insert into t (id,a) values (20,84);
+insert into t (id,a) values (20,85);
+insert into t (id,a) values (20,86);
+insert into t (id,a) values (20,87);
+insert into t (id,a) values (20,88);
+insert into t (id,a) values (20,89);
+insert into t (id,a) values (20,90);
+insert into t (id,a) values (20,91);
+insert into t (id,a) values (20,92);
+insert into t (id,a) values (20,93);
+insert into t (id,a) values (20,94);
+insert into t (id,a) values (20,95);
+insert into t (id,a) values (20,96);
+insert into t (id,a) values (20,97);
+insert into t (id,a) values (20,98);
+insert into t (id,a) values (20,99);
+insert into t (id,a) values (21,0);
+insert into t (id,a) values (21,1);
+insert into t (id,a) values (21,2);
+insert into t (id,a) values (21,3);
+insert into t (id,a) values (21,4);
+insert into t (id,a) values (21,5);
+insert into t (id,a) values (21,6);
+insert into t (id,a) values (21,7);
+insert into t (id,a) values (21,8);
+insert into t (id,a) values (21,9);
+insert into t (id,a) values (21,10);
+insert into t (id,a) values (21,11);
+insert into t (id,a) values (21,12);
+insert into t (id,a) values (21,13);
+insert into t (id,a) values (21,14);
+insert into t (id,a) values (21,15);
+insert into t (id,a) values (21,16);
+insert into t (id,a) values (21,17);
+insert into t (id,a) values (21,18);
+insert into t (id,a) values (21,19);
+insert into t (id,a) values (21,20);
+insert into t (id,a) values (21,21);
+insert into t (id,a) values (21,22);
+insert into t (id,a) values (21,23);
+insert into t (id,a) values (21,24);
+insert into t (id,a) values (21,25);
+insert into t (id,a) values (21,26);
+insert into t (id,a) values (21,27);
+insert into t (id,a) values (21,28);
+insert into t (id,a) values (21,29);
+insert into t (id,a) values (21,30);
+insert into t (id,a) values (21,31);
+insert into t (id,a) values (21,32);
+insert into t (id,a) values (21,33);
+insert into t (id,a) values (21,34);
+insert into t (id,a) values (21,35);
+insert into t (id,a) values (21,36);
+insert into t (id,a) values (21,37);
+insert into t (id,a) values (21,38);
+insert into t (id,a) values (21,39);
+insert into t (id,a) values (21,40);
+insert into t (id,a) values (21,41);
+insert into t (id,a) values (21,42);
+insert into t (id,a) values (21,43);
+insert into t (id,a) values (21,44);
+insert into t (id,a) values (21,45);
+insert into t (id,a) values (21,46);
+insert into t (id,a) values (21,47);
+insert into t (id,a) values (21,48);
+insert into t (id,a) values (21,49);
+insert into t (id,a) values (21,50);
+insert into t (id,a) values (21,51);
+insert into t (id,a) values (21,52);
+insert into t (id,a) values (21,53);
+insert into t (id,a) values (21,54);
+insert into t (id,a) values (21,55);
+insert into t (id,a) values (21,56);
+insert into t (id,a) values (21,57);
+insert into t (id,a) values (21,58);
+insert into t (id,a) values (21,59);
+insert into t (id,a) values (21,60);
+insert into t (id,a) values (21,61);
+insert into t (id,a) values (21,62);
+insert into t (id,a) values (21,63);
+insert into t (id,a) values (21,64);
+insert into t (id,a) values (21,65);
+insert into t (id,a) values (21,66);
+insert into t (id,a) values (21,67);
+insert into t (id,a) values (21,68);
+insert into t (id,a) values (21,69);
+insert into t (id,a) values (21,70);
+insert into t (id,a) values (21,71);
+insert into t (id,a) values (21,72);
+insert into t (id,a) values (21,73);
+insert into t (id,a) values (21,74);
+insert into t (id,a) values (21,75);
+insert into t (id,a) values (21,76);
+insert into t (id,a) values (21,77);
+insert into t (id,a) values (21,78);
+insert into t (id,a) values (21,79);
+insert into t (id,a) values (21,80);
+insert into t (id,a) values (21,81);
+insert into t (id,a) values (21,82);
+insert into t (id,a) values (21,83);
+insert into t (id,a) values (21,84);
+insert into t (id,a) values (21,85);
+insert into t (id,a) values (21,86);
+insert into t (id,a) values (21,87);
+insert into t (id,a) values (21,88);
+insert into t (id,a) values (21,89);
+insert into t (id,a) values (21,90);
+insert into t (id,a) values (21,91);
+insert into t (id,a) values (21,92);
+insert into t (id,a) values (21,93);
+insert into t (id,a) values (21,94);
+insert into t (id,a) values (21,95);
+insert into t (id,a) values (21,96);
+insert into t (id,a) values (21,97);
+insert into t (id,a) values (21,98);
+insert into t (id,a) values (21,99);
+insert into t (id,a) values (22,0);
+insert into t (id,a) values (22,1);
+insert into t (id,a) values (22,2);
+insert into t (id,a) values (22,3);
+insert into t (id,a) values (22,4);
+insert into t (id,a) values (22,5);
+insert into t (id,a) values (22,6);
+insert into t (id,a) values (22,7);
+insert into t (id,a) values (22,8);
+insert into t (id,a) values (22,9);
+insert into t (id,a) values (22,10);
+insert into t (id,a) values (22,11);
+insert into t (id,a) values (22,12);
+insert into t (id,a) values (22,13);
+insert into t (id,a) values (22,14);
+insert into t (id,a) values (22,15);
+insert into t (id,a) values (22,16);
+insert into t (id,a) values (22,17);
+insert into t (id,a) values (22,18);
+insert into t (id,a) values (22,19);
+insert into t (id,a) values (22,20);
+insert into t (id,a) values (22,21);
+insert into t (id,a) values (22,22);
+insert into t (id,a) values (22,23);
+insert into t (id,a) values (22,24);
+insert into t (id,a) values (22,25);
+insert into t (id,a) values (22,26);
+insert into t (id,a) values (22,27);
+insert into t (id,a) values (22,28);
+insert into t (id,a) values (22,29);
+insert into t (id,a) values (22,30);
+insert into t (id,a) values (22,31);
+insert into t (id,a) values (22,32);
+insert into t (id,a) values (22,33);
+insert into t (id,a) values (22,34);
+insert into t (id,a) values (22,35);
+insert into t (id,a) values (22,36);
+insert into t (id,a) values (22,37);
+insert into t (id,a) values (22,38);
+insert into t (id,a) values (22,39);
+insert into t (id,a) values (22,40);
+insert into t (id,a) values (22,41);
+insert into t (id,a) values (22,42);
+insert into t (id,a) values (22,43);
+insert into t (id,a) values (22,44);
+insert into t (id,a) values (22,45);
+insert into t (id,a) values (22,46);
+insert into t (id,a) values (22,47);
+insert into t (id,a) values (22,48);
+insert into t (id,a) values (22,49);
+insert into t (id,a) values (22,50);
+insert into t (id,a) values (22,51);
+insert into t (id,a) values (22,52);
+insert into t (id,a) values (22,53);
+insert into t (id,a) values (22,54);
+insert into t (id,a) values (22,55);
+insert into t (id,a) values (22,56);
+insert into t (id,a) values (22,57);
+insert into t (id,a) values (22,58);
+insert into t (id,a) values (22,59);
+insert into t (id,a) values (22,60);
+insert into t (id,a) values (22,61);
+insert into t (id,a) values (22,62);
+insert into t (id,a) values (22,63);
+insert into t (id,a) values (22,64);
+insert into t (id,a) values (22,65);
+insert into t (id,a) values (22,66);
+insert into t (id,a) values (22,67);
+insert into t (id,a) values (22,68);
+insert into t (id,a) values (22,69);
+insert into t (id,a) values (22,70);
+insert into t (id,a) values (22,71);
+insert into t (id,a) values (22,72);
+insert into t (id,a) values (22,73);
+insert into t (id,a) values (22,74);
+insert into t (id,a) values (22,75);
+insert into t (id,a) values (22,76);
+insert into t (id,a) values (22,77);
+insert into t (id,a) values (22,78);
+insert into t (id,a) values (22,79);
+insert into t (id,a) values (22,80);
+insert into t (id,a) values (22,81);
+insert into t (id,a) values (22,82);
+insert into t (id,a) values (22,83);
+insert into t (id,a) values (22,84);
+insert into t (id,a) values (22,85);
+insert into t (id,a) values (22,86);
+insert into t (id,a) values (22,87);
+insert into t (id,a) values (22,88);
+insert into t (id,a) values (22,89);
+insert into t (id,a) values (22,90);
+insert into t (id,a) values (22,91);
+insert into t (id,a) values (22,92);
+insert into t (id,a) values (22,93);
+insert into t (id,a) values (22,94);
+insert into t (id,a) values (22,95);
+insert into t (id,a) values (22,96);
+insert into t (id,a) values (22,97);
+insert into t (id,a) values (22,98);
+insert into t (id,a) values (22,99);
+insert into t (id,a) values (23,0);
+insert into t (id,a) values (23,1);
+insert into t (id,a) values (23,2);
+insert into t (id,a) values (23,3);
+insert into t (id,a) values (23,4);
+insert into t (id,a) values (23,5);
+insert into t (id,a) values (23,6);
+insert into t (id,a) values (23,7);
+insert into t (id,a) values (23,8);
+insert into t (id,a) values (23,9);
+insert into t (id,a) values (23,10);
+insert into t (id,a) values (23,11);
+insert into t (id,a) values (23,12);
+insert into t (id,a) values (23,13);
+insert into t (id,a) values (23,14);
+insert into t (id,a) values (23,15);
+insert into t (id,a) values (23,16);
+insert into t (id,a) values (23,17);
+insert into t (id,a) values (23,18);
+insert into t (id,a) values (23,19);
+insert into t (id,a) values (23,20);
+insert into t (id,a) values (23,21);
+insert into t (id,a) values (23,22);
+insert into t (id,a) values (23,23);
+insert into t (id,a) values (23,24);
+insert into t (id,a) values (23,25);
+insert into t (id,a) values (23,26);
+insert into t (id,a) values (23,27);
+insert into t (id,a) values (23,28);
+insert into t (id,a) values (23,29);
+insert into t (id,a) values (23,30);
+insert into t (id,a) values (23,31);
+insert into t (id,a) values (23,32);
+insert into t (id,a) values (23,33);
+insert into t (id,a) values (23,34);
+insert into t (id,a) values (23,35);
+insert into t (id,a) values (23,36);
+insert into t (id,a) values (23,37);
+insert into t (id,a) values (23,38);
+insert into t (id,a) values (23,39);
+insert into t (id,a) values (23,40);
+insert into t (id,a) values (23,41);
+insert into t (id,a) values (23,42);
+insert into t (id,a) values (23,43);
+insert into t (id,a) values (23,44);
+insert into t (id,a) values (23,45);
+insert into t (id,a) values (23,46);
+insert into t (id,a) values (23,47);
+insert into t (id,a) values (23,48);
+insert into t (id,a) values (23,49);
+insert into t (id,a) values (23,50);
+insert into t (id,a) values (23,51);
+insert into t (id,a) values (23,52);
+insert into t (id,a) values (23,53);
+insert into t (id,a) values (23,54);
+insert into t (id,a) values (23,55);
+insert into t (id,a) values (23,56);
+insert into t (id,a) values (23,57);
+insert into t (id,a) values (23,58);
+insert into t (id,a) values (23,59);
+insert into t (id,a) values (23,60);
+insert into t (id,a) values (23,61);
+insert into t (id,a) values (23,62);
+insert into t (id,a) values (23,63);
+insert into t (id,a) values (23,64);
+insert into t (id,a) values (23,65);
+insert into t (id,a) values (23,66);
+insert into t (id,a) values (23,67);
+insert into t (id,a) values (23,68);
+insert into t (id,a) values (23,69);
+insert into t (id,a) values (23,70);
+insert into t (id,a) values (23,71);
+insert into t (id,a) values (23,72);
+insert into t (id,a) values (23,73);
+insert into t (id,a) values (23,74);
+insert into t (id,a) values (23,75);
+insert into t (id,a) values (23,76);
+insert into t (id,a) values (23,77);
+insert into t (id,a) values (23,78);
+insert into t (id,a) values (23,79);
+insert into t (id,a) values (23,80);
+insert into t (id,a) values (23,81);
+insert into t (id,a) values (23,82);
+insert into t (id,a) values (23,83);
+insert into t (id,a) values (23,84);
+insert into t (id,a) values (23,85);
+insert into t (id,a) values (23,86);
+insert into t (id,a) values (23,87);
+insert into t (id,a) values (23,88);
+insert into t (id,a) values (23,89);
+insert into t (id,a) values (23,90);
+insert into t (id,a) values (23,91);
+insert into t (id,a) values (23,92);
+insert into t (id,a) values (23,93);
+insert into t (id,a) values (23,94);
+insert into t (id,a) values (23,95);
+insert into t (id,a) values (23,96);
+insert into t (id,a) values (23,97);
+insert into t (id,a) values (23,98);
+insert into t (id,a) values (23,99);
+insert into t (id,a) values (24,0);
+insert into t (id,a) values (24,1);
+insert into t (id,a) values (24,2);
+insert into t (id,a) values (24,3);
+insert into t (id,a) values (24,4);
+insert into t (id,a) values (24,5);
+insert into t (id,a) values (24,6);
+insert into t (id,a) values (24,7);
+insert into t (id,a) values (24,8);
+insert into t (id,a) values (24,9);
+insert into t (id,a) values (24,10);
+insert into t (id,a) values (24,11);
+insert into t (id,a) values (24,12);
+insert into t (id,a) values (24,13);
+insert into t (id,a) values (24,14);
+insert into t (id,a) values (24,15);
+insert into t (id,a) values (24,16);
+insert into t (id,a) values (24,17);
+insert into t (id,a) values (24,18);
+insert into t (id,a) values (24,19);
+insert into t (id,a) values (24,20);
+insert into t (id,a) values (24,21);
+insert into t (id,a) values (24,22);
+insert into t (id,a) values (24,23);
+insert into t (id,a) values (24,24);
+insert into t (id,a) values (24,25);
+insert into t (id,a) values (24,26);
+insert into t (id,a) values (24,27);
+insert into t (id,a) values (24,28);
+insert into t (id,a) values (24,29);
+insert into t (id,a) values (24,30);
+insert into t (id,a) values (24,31);
+insert into t (id,a) values (24,32);
+insert into t (id,a) values (24,33);
+insert into t (id,a) values (24,34);
+insert into t (id,a) values (24,35);
+insert into t (id,a) values (24,36);
+insert into t (id,a) values (24,37);
+insert into t (id,a) values (24,38);
+insert into t (id,a) values (24,39);
+insert into t (id,a) values (24,40);
+insert into t (id,a) values (24,41);
+insert into t (id,a) values (24,42);
+insert into t (id,a) values (24,43);
+insert into t (id,a) values (24,44);
+insert into t (id,a) values (24,45);
+insert into t (id,a) values (24,46);
+insert into t (id,a) values (24,47);
+insert into t (id,a) values (24,48);
+insert into t (id,a) values (24,49);
+insert into t (id,a) values (24,50);
+insert into t (id,a) values (24,51);
+insert into t (id,a) values (24,52);
+insert into t (id,a) values (24,53);
+insert into t (id,a) values (24,54);
+insert into t (id,a) values (24,55);
+insert into t (id,a) values (24,56);
+insert into t (id,a) values (24,57);
+insert into t (id,a) values (24,58);
+insert into t (id,a) values (24,59);
+insert into t (id,a) values (24,60);
+insert into t (id,a) values (24,61);
+insert into t (id,a) values (24,62);
+insert into t (id,a) values (24,63);
+insert into t (id,a) values (24,64);
+insert into t (id,a) values (24,65);
+insert into t (id,a) values (24,66);
+insert into t (id,a) values (24,67);
+insert into t (id,a) values (24,68);
+insert into t (id,a) values (24,69);
+insert into t (id,a) values (24,70);
+insert into t (id,a) values (24,71);
+insert into t (id,a) values (24,72);
+insert into t (id,a) values (24,73);
+insert into t (id,a) values (24,74);
+insert into t (id,a) values (24,75);
+insert into t (id,a) values (24,76);
+insert into t (id,a) values (24,77);
+insert into t (id,a) values (24,78);
+insert into t (id,a) values (24,79);
+insert into t (id,a) values (24,80);
+insert into t (id,a) values (24,81);
+insert into t (id,a) values (24,82);
+insert into t (id,a) values (24,83);
+insert into t (id,a) values (24,84);
+insert into t (id,a) values (24,85);
+insert into t (id,a) values (24,86);
+insert into t (id,a) values (24,87);
+insert into t (id,a) values (24,88);
+insert into t (id,a) values (24,89);
+insert into t (id,a) values (24,90);
+insert into t (id,a) values (24,91);
+insert into t (id,a) values (24,92);
+insert into t (id,a) values (24,93);
+insert into t (id,a) values (24,94);
+insert into t (id,a) values (24,95);
+insert into t (id,a) values (24,96);
+insert into t (id,a) values (24,97);
+insert into t (id,a) values (24,98);
+insert into t (id,a) values (24,99);
+insert into t (id,a) values (25,0);
+insert into t (id,a) values (25,1);
+insert into t (id,a) values (25,2);
+insert into t (id,a) values (25,3);
+insert into t (id,a) values (25,4);
+insert into t (id,a) values (25,5);
+insert into t (id,a) values (25,6);
+insert into t (id,a) values (25,7);
+insert into t (id,a) values (25,8);
+insert into t (id,a) values (25,9);
+insert into t (id,a) values (25,10);
+insert into t (id,a) values (25,11);
+insert into t (id,a) values (25,12);
+insert into t (id,a) values (25,13);
+insert into t (id,a) values (25,14);
+insert into t (id,a) values (25,15);
+insert into t (id,a) values (25,16);
+insert into t (id,a) values (25,17);
+insert into t (id,a) values (25,18);
+insert into t (id,a) values (25,19);
+insert into t (id,a) values (25,20);
+insert into t (id,a) values (25,21);
+insert into t (id,a) values (25,22);
+insert into t (id,a) values (25,23);
+insert into t (id,a) values (25,24);
+insert into t (id,a) values (25,25);
+insert into t (id,a) values (25,26);
+insert into t (id,a) values (25,27);
+insert into t (id,a) values (25,28);
+insert into t (id,a) values (25,29);
+insert into t (id,a) values (25,30);
+insert into t (id,a) values (25,31);
+insert into t (id,a) values (25,32);
+insert into t (id,a) values (25,33);
+insert into t (id,a) values (25,34);
+insert into t (id,a) values (25,35);
+insert into t (id,a) values (25,36);
+insert into t (id,a) values (25,37);
+insert into t (id,a) values (25,38);
+insert into t (id,a) values (25,39);
+insert into t (id,a) values (25,40);
+insert into t (id,a) values (25,41);
+insert into t (id,a) values (25,42);
+insert into t (id,a) values (25,43);
+insert into t (id,a) values (25,44);
+insert into t (id,a) values (25,45);
+insert into t (id,a) values (25,46);
+insert into t (id,a) values (25,47);
+insert into t (id,a) values (25,48);
+insert into t (id,a) values (25,49);
+insert into t (id,a) values (25,50);
+insert into t (id,a) values (25,51);
+insert into t (id,a) values (25,52);
+insert into t (id,a) values (25,53);
+insert into t (id,a) values (25,54);
+insert into t (id,a) values (25,55);
+insert into t (id,a) values (25,56);
+insert into t (id,a) values (25,57);
+insert into t (id,a) values (25,58);
+insert into t (id,a) values (25,59);
+insert into t (id,a) values (25,60);
+insert into t (id,a) values (25,61);
+insert into t (id,a) values (25,62);
+insert into t (id,a) values (25,63);
+insert into t (id,a) values (25,64);
+insert into t (id,a) values (25,65);
+insert into t (id,a) values (25,66);
+insert into t (id,a) values (25,67);
+insert into t (id,a) values (25,68);
+insert into t (id,a) values (25,69);
+insert into t (id,a) values (25,70);
+insert into t (id,a) values (25,71);
+insert into t (id,a) values (25,72);
+insert into t (id,a) values (25,73);
+insert into t (id,a) values (25,74);
+insert into t (id,a) values (25,75);
+insert into t (id,a) values (25,76);
+insert into t (id,a) values (25,77);
+insert into t (id,a) values (25,78);
+insert into t (id,a) values (25,79);
+insert into t (id,a) values (25,80);
+insert into t (id,a) values (25,81);
+insert into t (id,a) values (25,82);
+insert into t (id,a) values (25,83);
+insert into t (id,a) values (25,84);
+insert into t (id,a) values (25,85);
+insert into t (id,a) values (25,86);
+insert into t (id,a) values (25,87);
+insert into t (id,a) values (25,88);
+insert into t (id,a) values (25,89);
+insert into t (id,a) values (25,90);
+insert into t (id,a) values (25,91);
+insert into t (id,a) values (25,92);
+insert into t (id,a) values (25,93);
+insert into t (id,a) values (25,94);
+insert into t (id,a) values (25,95);
+insert into t (id,a) values (25,96);
+insert into t (id,a) values (25,97);
+insert into t (id,a) values (25,98);
+insert into t (id,a) values (25,99);
+insert into t (id,a) values (26,0);
+insert into t (id,a) values (26,1);
+insert into t (id,a) values (26,2);
+insert into t (id,a) values (26,3);
+insert into t (id,a) values (26,4);
+insert into t (id,a) values (26,5);
+insert into t (id,a) values (26,6);
+insert into t (id,a) values (26,7);
+insert into t (id,a) values (26,8);
+insert into t (id,a) values (26,9);
+insert into t (id,a) values (26,10);
+insert into t (id,a) values (26,11);
+insert into t (id,a) values (26,12);
+insert into t (id,a) values (26,13);
+insert into t (id,a) values (26,14);
+insert into t (id,a) values (26,15);
+insert into t (id,a) values (26,16);
+insert into t (id,a) values (26,17);
+insert into t (id,a) values (26,18);
+insert into t (id,a) values (26,19);
+insert into t (id,a) values (26,20);
+insert into t (id,a) values (26,21);
+insert into t (id,a) values (26,22);
+insert into t (id,a) values (26,23);
+insert into t (id,a) values (26,24);
+insert into t (id,a) values (26,25);
+insert into t (id,a) values (26,26);
+insert into t (id,a) values (26,27);
+insert into t (id,a) values (26,28);
+insert into t (id,a) values (26,29);
+insert into t (id,a) values (26,30);
+insert into t (id,a) values (26,31);
+insert into t (id,a) values (26,32);
+insert into t (id,a) values (26,33);
+insert into t (id,a) values (26,34);
+insert into t (id,a) values (26,35);
+insert into t (id,a) values (26,36);
+insert into t (id,a) values (26,37);
+insert into t (id,a) values (26,38);
+insert into t (id,a) values (26,39);
+insert into t (id,a) values (26,40);
+insert into t (id,a) values (26,41);
+insert into t (id,a) values (26,42);
+insert into t (id,a) values (26,43);
+insert into t (id,a) values (26,44);
+insert into t (id,a) values (26,45);
+insert into t (id,a) values (26,46);
+insert into t (id,a) values (26,47);
+insert into t (id,a) values (26,48);
+insert into t (id,a) values (26,49);
+insert into t (id,a) values (26,50);
+insert into t (id,a) values (26,51);
+insert into t (id,a) values (26,52);
+insert into t (id,a) values (26,53);
+insert into t (id,a) values (26,54);
+insert into t (id,a) values (26,55);
+insert into t (id,a) values (26,56);
+insert into t (id,a) values (26,57);
+insert into t (id,a) values (26,58);
+insert into t (id,a) values (26,59);
+insert into t (id,a) values (26,60);
+insert into t (id,a) values (26,61);
+insert into t (id,a) values (26,62);
+insert into t (id,a) values (26,63);
+insert into t (id,a) values (26,64);
+insert into t (id,a) values (26,65);
+insert into t (id,a) values (26,66);
+insert into t (id,a) values (26,67);
+insert into t (id,a) values (26,68);
+insert into t (id,a) values (26,69);
+insert into t (id,a) values (26,70);
+insert into t (id,a) values (26,71);
+insert into t (id,a) values (26,72);
+insert into t (id,a) values (26,73);
+insert into t (id,a) values (26,74);
+insert into t (id,a) values (26,75);
+insert into t (id,a) values (26,76);
+insert into t (id,a) values (26,77);
+insert into t (id,a) values (26,78);
+insert into t (id,a) values (26,79);
+insert into t (id,a) values (26,80);
+insert into t (id,a) values (26,81);
+insert into t (id,a) values (26,82);
+insert into t (id,a) values (26,83);
+insert into t (id,a) values (26,84);
+insert into t (id,a) values (26,85);
+insert into t (id,a) values (26,86);
+insert into t (id,a) values (26,87);
+insert into t (id,a) values (26,88);
+insert into t (id,a) values (26,89);
+insert into t (id,a) values (26,90);
+insert into t (id,a) values (26,91);
+insert into t (id,a) values (26,92);
+insert into t (id,a) values (26,93);
+insert into t (id,a) values (26,94);
+insert into t (id,a) values (26,95);
+insert into t (id,a) values (26,96);
+insert into t (id,a) values (26,97);
+insert into t (id,a) values (26,98);
+insert into t (id,a) values (26,99);
+insert into t (id,a) values (27,0);
+insert into t (id,a) values (27,1);
+insert into t (id,a) values (27,2);
+insert into t (id,a) values (27,3);
+insert into t (id,a) values (27,4);
+insert into t (id,a) values (27,5);
+insert into t (id,a) values (27,6);
+insert into t (id,a) values (27,7);
+insert into t (id,a) values (27,8);
+insert into t (id,a) values (27,9);
+insert into t (id,a) values (27,10);
+insert into t (id,a) values (27,11);
+insert into t (id,a) values (27,12);
+insert into t (id,a) values (27,13);
+insert into t (id,a) values (27,14);
+insert into t (id,a) values (27,15);
+insert into t (id,a) values (27,16);
+insert into t (id,a) values (27,17);
+insert into t (id,a) values (27,18);
+insert into t (id,a) values (27,19);
+insert into t (id,a) values (27,20);
+insert into t (id,a) values (27,21);
+insert into t (id,a) values (27,22);
+insert into t (id,a) values (27,23);
+insert into t (id,a) values (27,24);
+insert into t (id,a) values (27,25);
+insert into t (id,a) values (27,26);
+insert into t (id,a) values (27,27);
+insert into t (id,a) values (27,28);
+insert into t (id,a) values (27,29);
+insert into t (id,a) values (27,30);
+insert into t (id,a) values (27,31);
+insert into t (id,a) values (27,32);
+insert into t (id,a) values (27,33);
+insert into t (id,a) values (27,34);
+insert into t (id,a) values (27,35);
+insert into t (id,a) values (27,36);
+insert into t (id,a) values (27,37);
+insert into t (id,a) values (27,38);
+insert into t (id,a) values (27,39);
+insert into t (id,a) values (27,40);
+insert into t (id,a) values (27,41);
+insert into t (id,a) values (27,42);
+insert into t (id,a) values (27,43);
+insert into t (id,a) values (27,44);
+insert into t (id,a) values (27,45);
+insert into t (id,a) values (27,46);
+insert into t (id,a) values (27,47);
+insert into t (id,a) values (27,48);
+insert into t (id,a) values (27,49);
+insert into t (id,a) values (27,50);
+insert into t (id,a) values (27,51);
+insert into t (id,a) values (27,52);
+insert into t (id,a) values (27,53);
+insert into t (id,a) values (27,54);
+insert into t (id,a) values (27,55);
+insert into t (id,a) values (27,56);
+insert into t (id,a) values (27,57);
+insert into t (id,a) values (27,58);
+insert into t (id,a) values (27,59);
+insert into t (id,a) values (27,60);
+insert into t (id,a) values (27,61);
+insert into t (id,a) values (27,62);
+insert into t (id,a) values (27,63);
+insert into t (id,a) values (27,64);
+insert into t (id,a) values (27,65);
+insert into t (id,a) values (27,66);
+insert into t (id,a) values (27,67);
+insert into t (id,a) values (27,68);
+insert into t (id,a) values (27,69);
+insert into t (id,a) values (27,70);
+insert into t (id,a) values (27,71);
+insert into t (id,a) values (27,72);
+insert into t (id,a) values (27,73);
+insert into t (id,a) values (27,74);
+insert into t (id,a) values (27,75);
+insert into t (id,a) values (27,76);
+insert into t (id,a) values (27,77);
+insert into t (id,a) values (27,78);
+insert into t (id,a) values (27,79);
+insert into t (id,a) values (27,80);
+insert into t (id,a) values (27,81);
+insert into t (id,a) values (27,82);
+insert into t (id,a) values (27,83);
+insert into t (id,a) values (27,84);
+insert into t (id,a) values (27,85);
+insert into t (id,a) values (27,86);
+insert into t (id,a) values (27,87);
+insert into t (id,a) values (27,88);
+insert into t (id,a) values (27,89);
+insert into t (id,a) values (27,90);
+insert into t (id,a) values (27,91);
+insert into t (id,a) values (27,92);
+insert into t (id,a) values (27,93);
+insert into t (id,a) values (27,94);
+insert into t (id,a) values (27,95);
+insert into t (id,a) values (27,96);
+insert into t (id,a) values (27,97);
+insert into t (id,a) values (27,98);
+insert into t (id,a) values (27,99);
+insert into t (id,a) values (28,0);
+insert into t (id,a) values (28,1);
+insert into t (id,a) values (28,2);
+insert into t (id,a) values (28,3);
+insert into t (id,a) values (28,4);
+insert into t (id,a) values (28,5);
+insert into t (id,a) values (28,6);
+insert into t (id,a) values (28,7);
+insert into t (id,a) values (28,8);
+insert into t (id,a) values (28,9);
+insert into t (id,a) values (28,10);
+insert into t (id,a) values (28,11);
+insert into t (id,a) values (28,12);
+insert into t (id,a) values (28,13);
+insert into t (id,a) values (28,14);
+insert into t (id,a) values (28,15);
+insert into t (id,a) values (28,16);
+insert into t (id,a) values (28,17);
+insert into t (id,a) values (28,18);
+insert into t (id,a) values (28,19);
+insert into t (id,a) values (28,20);
+insert into t (id,a) values (28,21);
+insert into t (id,a) values (28,22);
+insert into t (id,a) values (28,23);
+insert into t (id,a) values (28,24);
+insert into t (id,a) values (28,25);
+insert into t (id,a) values (28,26);
+insert into t (id,a) values (28,27);
+insert into t (id,a) values (28,28);
+insert into t (id,a) values (28,29);
+insert into t (id,a) values (28,30);
+insert into t (id,a) values (28,31);
+insert into t (id,a) values (28,32);
+insert into t (id,a) values (28,33);
+insert into t (id,a) values (28,34);
+insert into t (id,a) values (28,35);
+insert into t (id,a) values (28,36);
+insert into t (id,a) values (28,37);
+insert into t (id,a) values (28,38);
+insert into t (id,a) values (28,39);
+insert into t (id,a) values (28,40);
+insert into t (id,a) values (28,41);
+insert into t (id,a) values (28,42);
+insert into t (id,a) values (28,43);
+insert into t (id,a) values (28,44);
+insert into t (id,a) values (28,45);
+insert into t (id,a) values (28,46);
+insert into t (id,a) values (28,47);
+insert into t (id,a) values (28,48);
+insert into t (id,a) values (28,49);
+insert into t (id,a) values (28,50);
+insert into t (id,a) values (28,51);
+insert into t (id,a) values (28,52);
+insert into t (id,a) values (28,53);
+insert into t (id,a) values (28,54);
+insert into t (id,a) values (28,55);
+insert into t (id,a) values (28,56);
+insert into t (id,a) values (28,57);
+insert into t (id,a) values (28,58);
+insert into t (id,a) values (28,59);
+insert into t (id,a) values (28,60);
+insert into t (id,a) values (28,61);
+insert into t (id,a) values (28,62);
+insert into t (id,a) values (28,63);
+insert into t (id,a) values (28,64);
+insert into t (id,a) values (28,65);
+insert into t (id,a) values (28,66);
+insert into t (id,a) values (28,67);
+insert into t (id,a) values (28,68);
+insert into t (id,a) values (28,69);
+insert into t (id,a) values (28,70);
+insert into t (id,a) values (28,71);
+insert into t (id,a) values (28,72);
+insert into t (id,a) values (28,73);
+insert into t (id,a) values (28,74);
+insert into t (id,a) values (28,75);
+insert into t (id,a) values (28,76);
+insert into t (id,a) values (28,77);
+insert into t (id,a) values (28,78);
+insert into t (id,a) values (28,79);
+insert into t (id,a) values (28,80);
+insert into t (id,a) values (28,81);
+insert into t (id,a) values (28,82);
+insert into t (id,a) values (28,83);
+insert into t (id,a) values (28,84);
+insert into t (id,a) values (28,85);
+insert into t (id,a) values (28,86);
+insert into t (id,a) values (28,87);
+insert into t (id,a) values (28,88);
+insert into t (id,a) values (28,89);
+insert into t (id,a) values (28,90);
+insert into t (id,a) values (28,91);
+insert into t (id,a) values (28,92);
+insert into t (id,a) values (28,93);
+insert into t (id,a) values (28,94);
+insert into t (id,a) values (28,95);
+insert into t (id,a) values (28,96);
+insert into t (id,a) values (28,97);
+insert into t (id,a) values (28,98);
+insert into t (id,a) values (28,99);
+insert into t (id,a) values (29,0);
+insert into t (id,a) values (29,1);
+insert into t (id,a) values (29,2);
+insert into t (id,a) values (29,3);
+insert into t (id,a) values (29,4);
+insert into t (id,a) values (29,5);
+insert into t (id,a) values (29,6);
+insert into t (id,a) values (29,7);
+insert into t (id,a) values (29,8);
+insert into t (id,a) values (29,9);
+insert into t (id,a) values (29,10);
+insert into t (id,a) values (29,11);
+insert into t (id,a) values (29,12);
+insert into t (id,a) values (29,13);
+insert into t (id,a) values (29,14);
+insert into t (id,a) values (29,15);
+insert into t (id,a) values (29,16);
+insert into t (id,a) values (29,17);
+insert into t (id,a) values (29,18);
+insert into t (id,a) values (29,19);
+insert into t (id,a) values (29,20);
+insert into t (id,a) values (29,21);
+insert into t (id,a) values (29,22);
+insert into t (id,a) values (29,23);
+insert into t (id,a) values (29,24);
+insert into t (id,a) values (29,25);
+insert into t (id,a) values (29,26);
+insert into t (id,a) values (29,27);
+insert into t (id,a) values (29,28);
+insert into t (id,a) values (29,29);
+insert into t (id,a) values (29,30);
+insert into t (id,a) values (29,31);
+insert into t (id,a) values (29,32);
+insert into t (id,a) values (29,33);
+insert into t (id,a) values (29,34);
+insert into t (id,a) values (29,35);
+insert into t (id,a) values (29,36);
+insert into t (id,a) values (29,37);
+insert into t (id,a) values (29,38);
+insert into t (id,a) values (29,39);
+insert into t (id,a) values (29,40);
+insert into t (id,a) values (29,41);
+insert into t (id,a) values (29,42);
+insert into t (id,a) values (29,43);
+insert into t (id,a) values (29,44);
+insert into t (id,a) values (29,45);
+insert into t (id,a) values (29,46);
+insert into t (id,a) values (29,47);
+insert into t (id,a) values (29,48);
+insert into t (id,a) values (29,49);
+insert into t (id,a) values (29,50);
+insert into t (id,a) values (29,51);
+insert into t (id,a) values (29,52);
+insert into t (id,a) values (29,53);
+insert into t (id,a) values (29,54);
+insert into t (id,a) values (29,55);
+insert into t (id,a) values (29,56);
+insert into t (id,a) values (29,57);
+insert into t (id,a) values (29,58);
+insert into t (id,a) values (29,59);
+insert into t (id,a) values (29,60);
+insert into t (id,a) values (29,61);
+insert into t (id,a) values (29,62);
+insert into t (id,a) values (29,63);
+insert into t (id,a) values (29,64);
+insert into t (id,a) values (29,65);
+insert into t (id,a) values (29,66);
+insert into t (id,a) values (29,67);
+insert into t (id,a) values (29,68);
+insert into t (id,a) values (29,69);
+insert into t (id,a) values (29,70);
+insert into t (id,a) values (29,71);
+insert into t (id,a) values (29,72);
+insert into t (id,a) values (29,73);
+insert into t (id,a) values (29,74);
+insert into t (id,a) values (29,75);
+insert into t (id,a) values (29,76);
+insert into t (id,a) values (29,77);
+insert into t (id,a) values (29,78);
+insert into t (id,a) values (29,79);
+insert into t (id,a) values (29,80);
+insert into t (id,a) values (29,81);
+insert into t (id,a) values (29,82);
+insert into t (id,a) values (29,83);
+insert into t (id,a) values (29,84);
+insert into t (id,a) values (29,85);
+insert into t (id,a) values (29,86);
+insert into t (id,a) values (29,87);
+insert into t (id,a) values (29,88);
+insert into t (id,a) values (29,89);
+insert into t (id,a) values (29,90);
+insert into t (id,a) values (29,91);
+insert into t (id,a) values (29,92);
+insert into t (id,a) values (29,93);
+insert into t (id,a) values (29,94);
+insert into t (id,a) values (29,95);
+insert into t (id,a) values (29,96);
+insert into t (id,a) values (29,97);
+insert into t (id,a) values (29,98);
+insert into t (id,a) values (29,99);
+insert into t (id,a) values (30,0);
+insert into t (id,a) values (30,1);
+insert into t (id,a) values (30,2);
+insert into t (id,a) values (30,3);
+insert into t (id,a) values (30,4);
+insert into t (id,a) values (30,5);
+insert into t (id,a) values (30,6);
+insert into t (id,a) values (30,7);
+insert into t (id,a) values (30,8);
+insert into t (id,a) values (30,9);
+insert into t (id,a) values (30,10);
+insert into t (id,a) values (30,11);
+insert into t (id,a) values (30,12);
+insert into t (id,a) values (30,13);
+insert into t (id,a) values (30,14);
+insert into t (id,a) values (30,15);
+insert into t (id,a) values (30,16);
+insert into t (id,a) values (30,17);
+insert into t (id,a) values (30,18);
+insert into t (id,a) values (30,19);
+insert into t (id,a) values (30,20);
+insert into t (id,a) values (30,21);
+insert into t (id,a) values (30,22);
+insert into t (id,a) values (30,23);
+insert into t (id,a) values (30,24);
+insert into t (id,a) values (30,25);
+insert into t (id,a) values (30,26);
+insert into t (id,a) values (30,27);
+insert into t (id,a) values (30,28);
+insert into t (id,a) values (30,29);
+insert into t (id,a) values (30,30);
+insert into t (id,a) values (30,31);
+insert into t (id,a) values (30,32);
+insert into t (id,a) values (30,33);
+insert into t (id,a) values (30,34);
+insert into t (id,a) values (30,35);
+insert into t (id,a) values (30,36);
+insert into t (id,a) values (30,37);
+insert into t (id,a) values (30,38);
+insert into t (id,a) values (30,39);
+insert into t (id,a) values (30,40);
+insert into t (id,a) values (30,41);
+insert into t (id,a) values (30,42);
+insert into t (id,a) values (30,43);
+insert into t (id,a) values (30,44);
+insert into t (id,a) values (30,45);
+insert into t (id,a) values (30,46);
+insert into t (id,a) values (30,47);
+insert into t (id,a) values (30,48);
+insert into t (id,a) values (30,49);
+insert into t (id,a) values (30,50);
+insert into t (id,a) values (30,51);
+insert into t (id,a) values (30,52);
+insert into t (id,a) values (30,53);
+insert into t (id,a) values (30,54);
+insert into t (id,a) values (30,55);
+insert into t (id,a) values (30,56);
+insert into t (id,a) values (30,57);
+insert into t (id,a) values (30,58);
+insert into t (id,a) values (30,59);
+insert into t (id,a) values (30,60);
+insert into t (id,a) values (30,61);
+insert into t (id,a) values (30,62);
+insert into t (id,a) values (30,63);
+insert into t (id,a) values (30,64);
+insert into t (id,a) values (30,65);
+insert into t (id,a) values (30,66);
+insert into t (id,a) values (30,67);
+insert into t (id,a) values (30,68);
+insert into t (id,a) values (30,69);
+insert into t (id,a) values (30,70);
+insert into t (id,a) values (30,71);
+insert into t (id,a) values (30,72);
+insert into t (id,a) values (30,73);
+insert into t (id,a) values (30,74);
+insert into t (id,a) values (30,75);
+insert into t (id,a) values (30,76);
+insert into t (id,a) values (30,77);
+insert into t (id,a) values (30,78);
+insert into t (id,a) values (30,79);
+insert into t (id,a) values (30,80);
+insert into t (id,a) values (30,81);
+insert into t (id,a) values (30,82);
+insert into t (id,a) values (30,83);
+insert into t (id,a) values (30,84);
+insert into t (id,a) values (30,85);
+insert into t (id,a) values (30,86);
+insert into t (id,a) values (30,87);
+insert into t (id,a) values (30,88);
+insert into t (id,a) values (30,89);
+insert into t (id,a) values (30,90);
+insert into t (id,a) values (30,91);
+insert into t (id,a) values (30,92);
+insert into t (id,a) values (30,93);
+insert into t (id,a) values (30,94);
+insert into t (id,a) values (30,95);
+insert into t (id,a) values (30,96);
+insert into t (id,a) values (30,97);
+insert into t (id,a) values (30,98);
+insert into t (id,a) values (30,99);
+insert into t (id,a) values (31,0);
+insert into t (id,a) values (31,1);
+insert into t (id,a) values (31,2);
+insert into t (id,a) values (31,3);
+insert into t (id,a) values (31,4);
+insert into t (id,a) values (31,5);
+insert into t (id,a) values (31,6);
+insert into t (id,a) values (31,7);
+insert into t (id,a) values (31,8);
+insert into t (id,a) values (31,9);
+insert into t (id,a) values (31,10);
+insert into t (id,a) values (31,11);
+insert into t (id,a) values (31,12);
+insert into t (id,a) values (31,13);
+insert into t (id,a) values (31,14);
+insert into t (id,a) values (31,15);
+insert into t (id,a) values (31,16);
+insert into t (id,a) values (31,17);
+insert into t (id,a) values (31,18);
+insert into t (id,a) values (31,19);
+insert into t (id,a) values (31,20);
+insert into t (id,a) values (31,21);
+insert into t (id,a) values (31,22);
+insert into t (id,a) values (31,23);
+insert into t (id,a) values (31,24);
+insert into t (id,a) values (31,25);
+insert into t (id,a) values (31,26);
+insert into t (id,a) values (31,27);
+insert into t (id,a) values (31,28);
+insert into t (id,a) values (31,29);
+insert into t (id,a) values (31,30);
+insert into t (id,a) values (31,31);
+insert into t (id,a) values (31,32);
+insert into t (id,a) values (31,33);
+insert into t (id,a) values (31,34);
+insert into t (id,a) values (31,35);
+insert into t (id,a) values (31,36);
+insert into t (id,a) values (31,37);
+insert into t (id,a) values (31,38);
+insert into t (id,a) values (31,39);
+insert into t (id,a) values (31,40);
+insert into t (id,a) values (31,41);
+insert into t (id,a) values (31,42);
+insert into t (id,a) values (31,43);
+insert into t (id,a) values (31,44);
+insert into t (id,a) values (31,45);
+insert into t (id,a) values (31,46);
+insert into t (id,a) values (31,47);
+insert into t (id,a) values (31,48);
+insert into t (id,a) values (31,49);
+insert into t (id,a) values (31,50);
+insert into t (id,a) values (31,51);
+insert into t (id,a) values (31,52);
+insert into t (id,a) values (31,53);
+insert into t (id,a) values (31,54);
+insert into t (id,a) values (31,55);
+insert into t (id,a) values (31,56);
+insert into t (id,a) values (31,57);
+insert into t (id,a) values (31,58);
+insert into t (id,a) values (31,59);
+insert into t (id,a) values (31,60);
+insert into t (id,a) values (31,61);
+insert into t (id,a) values (31,62);
+insert into t (id,a) values (31,63);
+insert into t (id,a) values (31,64);
+insert into t (id,a) values (31,65);
+insert into t (id,a) values (31,66);
+insert into t (id,a) values (31,67);
+insert into t (id,a) values (31,68);
+insert into t (id,a) values (31,69);
+insert into t (id,a) values (31,70);
+insert into t (id,a) values (31,71);
+insert into t (id,a) values (31,72);
+insert into t (id,a) values (31,73);
+insert into t (id,a) values (31,74);
+insert into t (id,a) values (31,75);
+insert into t (id,a) values (31,76);
+insert into t (id,a) values (31,77);
+insert into t (id,a) values (31,78);
+insert into t (id,a) values (31,79);
+insert into t (id,a) values (31,80);
+insert into t (id,a) values (31,81);
+insert into t (id,a) values (31,82);
+insert into t (id,a) values (31,83);
+insert into t (id,a) values (31,84);
+insert into t (id,a) values (31,85);
+insert into t (id,a) values (31,86);
+insert into t (id,a) values (31,87);
+insert into t (id,a) values (31,88);
+insert into t (id,a) values (31,89);
+insert into t (id,a) values (31,90);
+insert into t (id,a) values (31,91);
+insert into t (id,a) values (31,92);
+insert into t (id,a) values (31,93);
+insert into t (id,a) values (31,94);
+insert into t (id,a) values (31,95);
+insert into t (id,a) values (31,96);
+insert into t (id,a) values (31,97);
+insert into t (id,a) values (31,98);
+insert into t (id,a) values (31,99);
+insert into t (id,a) values (32,0);
+insert into t (id,a) values (32,1);
+insert into t (id,a) values (32,2);
+insert into t (id,a) values (32,3);
+insert into t (id,a) values (32,4);
+insert into t (id,a) values (32,5);
+insert into t (id,a) values (32,6);
+insert into t (id,a) values (32,7);
+insert into t (id,a) values (32,8);
+insert into t (id,a) values (32,9);
+insert into t (id,a) values (32,10);
+insert into t (id,a) values (32,11);
+insert into t (id,a) values (32,12);
+insert into t (id,a) values (32,13);
+insert into t (id,a) values (32,14);
+insert into t (id,a) values (32,15);
+insert into t (id,a) values (32,16);
+insert into t (id,a) values (32,17);
+insert into t (id,a) values (32,18);
+insert into t (id,a) values (32,19);
+insert into t (id,a) values (32,20);
+insert into t (id,a) values (32,21);
+insert into t (id,a) values (32,22);
+insert into t (id,a) values (32,23);
+insert into t (id,a) values (32,24);
+insert into t (id,a) values (32,25);
+insert into t (id,a) values (32,26);
+insert into t (id,a) values (32,27);
+insert into t (id,a) values (32,28);
+insert into t (id,a) values (32,29);
+insert into t (id,a) values (32,30);
+insert into t (id,a) values (32,31);
+insert into t (id,a) values (32,32);
+insert into t (id,a) values (32,33);
+insert into t (id,a) values (32,34);
+insert into t (id,a) values (32,35);
+insert into t (id,a) values (32,36);
+insert into t (id,a) values (32,37);
+insert into t (id,a) values (32,38);
+insert into t (id,a) values (32,39);
+insert into t (id,a) values (32,40);
+insert into t (id,a) values (32,41);
+insert into t (id,a) values (32,42);
+insert into t (id,a) values (32,43);
+insert into t (id,a) values (32,44);
+insert into t (id,a) values (32,45);
+insert into t (id,a) values (32,46);
+insert into t (id,a) values (32,47);
+insert into t (id,a) values (32,48);
+insert into t (id,a) values (32,49);
+insert into t (id,a) values (32,50);
+insert into t (id,a) values (32,51);
+insert into t (id,a) values (32,52);
+insert into t (id,a) values (32,53);
+insert into t (id,a) values (32,54);
+insert into t (id,a) values (32,55);
+insert into t (id,a) values (32,56);
+insert into t (id,a) values (32,57);
+insert into t (id,a) values (32,58);
+insert into t (id,a) values (32,59);
+insert into t (id,a) values (32,60);
+insert into t (id,a) values (32,61);
+insert into t (id,a) values (32,62);
+insert into t (id,a) values (32,63);
+insert into t (id,a) values (32,64);
+insert into t (id,a) values (32,65);
+insert into t (id,a) values (32,66);
+insert into t (id,a) values (32,67);
+insert into t (id,a) values (32,68);
+insert into t (id,a) values (32,69);
+insert into t (id,a) values (32,70);
+insert into t (id,a) values (32,71);
+insert into t (id,a) values (32,72);
+insert into t (id,a) values (32,73);
+insert into t (id,a) values (32,74);
+insert into t (id,a) values (32,75);
+insert into t (id,a) values (32,76);
+insert into t (id,a) values (32,77);
+insert into t (id,a) values (32,78);
+insert into t (id,a) values (32,79);
+insert into t (id,a) values (32,80);
+insert into t (id,a) values (32,81);
+insert into t (id,a) values (32,82);
+insert into t (id,a) values (32,83);
+insert into t (id,a) values (32,84);
+insert into t (id,a) values (32,85);
+insert into t (id,a) values (32,86);
+insert into t (id,a) values (32,87);
+insert into t (id,a) values (32,88);
+insert into t (id,a) values (32,89);
+insert into t (id,a) values (32,90);
+insert into t (id,a) values (32,91);
+insert into t (id,a) values (32,92);
+insert into t (id,a) values (32,93);
+insert into t (id,a) values (32,94);
+insert into t (id,a) values (32,95);
+insert into t (id,a) values (32,96);
+insert into t (id,a) values (32,97);
+insert into t (id,a) values (32,98);
+insert into t (id,a) values (32,99);
+insert into t (id,a) values (33,0);
+insert into t (id,a) values (33,1);
+insert into t (id,a) values (33,2);
+insert into t (id,a) values (33,3);
+insert into t (id,a) values (33,4);
+insert into t (id,a) values (33,5);
+insert into t (id,a) values (33,6);
+insert into t (id,a) values (33,7);
+insert into t (id,a) values (33,8);
+insert into t (id,a) values (33,9);
+insert into t (id,a) values (33,10);
+insert into t (id,a) values (33,11);
+insert into t (id,a) values (33,12);
+insert into t (id,a) values (33,13);
+insert into t (id,a) values (33,14);
+insert into t (id,a) values (33,15);
+insert into t (id,a) values (33,16);
+insert into t (id,a) values (33,17);
+insert into t (id,a) values (33,18);
+insert into t (id,a) values (33,19);
+insert into t (id,a) values (33,20);
+insert into t (id,a) values (33,21);
+insert into t (id,a) values (33,22);
+insert into t (id,a) values (33,23);
+insert into t (id,a) values (33,24);
+insert into t (id,a) values (33,25);
+insert into t (id,a) values (33,26);
+insert into t (id,a) values (33,27);
+insert into t (id,a) values (33,28);
+insert into t (id,a) values (33,29);
+insert into t (id,a) values (33,30);
+insert into t (id,a) values (33,31);
+insert into t (id,a) values (33,32);
+insert into t (id,a) values (33,33);
+insert into t (id,a) values (33,34);
+insert into t (id,a) values (33,35);
+insert into t (id,a) values (33,36);
+insert into t (id,a) values (33,37);
+insert into t (id,a) values (33,38);
+insert into t (id,a) values (33,39);
+insert into t (id,a) values (33,40);
+insert into t (id,a) values (33,41);
+insert into t (id,a) values (33,42);
+insert into t (id,a) values (33,43);
+insert into t (id,a) values (33,44);
+insert into t (id,a) values (33,45);
+insert into t (id,a) values (33,46);
+insert into t (id,a) values (33,47);
+insert into t (id,a) values (33,48);
+insert into t (id,a) values (33,49);
+insert into t (id,a) values (33,50);
+insert into t (id,a) values (33,51);
+insert into t (id,a) values (33,52);
+insert into t (id,a) values (33,53);
+insert into t (id,a) values (33,54);
+insert into t (id,a) values (33,55);
+insert into t (id,a) values (33,56);
+insert into t (id,a) values (33,57);
+insert into t (id,a) values (33,58);
+insert into t (id,a) values (33,59);
+insert into t (id,a) values (33,60);
+insert into t (id,a) values (33,61);
+insert into t (id,a) values (33,62);
+insert into t (id,a) values (33,63);
+insert into t (id,a) values (33,64);
+insert into t (id,a) values (33,65);
+insert into t (id,a) values (33,66);
+insert into t (id,a) values (33,67);
+insert into t (id,a) values (33,68);
+insert into t (id,a) values (33,69);
+insert into t (id,a) values (33,70);
+insert into t (id,a) values (33,71);
+insert into t (id,a) values (33,72);
+insert into t (id,a) values (33,73);
+insert into t (id,a) values (33,74);
+insert into t (id,a) values (33,75);
+insert into t (id,a) values (33,76);
+insert into t (id,a) values (33,77);
+insert into t (id,a) values (33,78);
+insert into t (id,a) values (33,79);
+insert into t (id,a) values (33,80);
+insert into t (id,a) values (33,81);
+insert into t (id,a) values (33,82);
+insert into t (id,a) values (33,83);
+insert into t (id,a) values (33,84);
+insert into t (id,a) values (33,85);
+insert into t (id,a) values (33,86);
+insert into t (id,a) values (33,87);
+insert into t (id,a) values (33,88);
+insert into t (id,a) values (33,89);
+insert into t (id,a) values (33,90);
+insert into t (id,a) values (33,91);
+insert into t (id,a) values (33,92);
+insert into t (id,a) values (33,93);
+insert into t (id,a) values (33,94);
+insert into t (id,a) values (33,95);
+insert into t (id,a) values (33,96);
+insert into t (id,a) values (33,97);
+insert into t (id,a) values (33,98);
+insert into t (id,a) values (33,99);
+insert into t (id,a) values (34,0);
+insert into t (id,a) values (34,1);
+insert into t (id,a) values (34,2);
+insert into t (id,a) values (34,3);
+insert into t (id,a) values (34,4);
+insert into t (id,a) values (34,5);
+insert into t (id,a) values (34,6);
+insert into t (id,a) values (34,7);
+insert into t (id,a) values (34,8);
+insert into t (id,a) values (34,9);
+insert into t (id,a) values (34,10);
+insert into t (id,a) values (34,11);
+insert into t (id,a) values (34,12);
+insert into t (id,a) values (34,13);
+insert into t (id,a) values (34,14);
+insert into t (id,a) values (34,15);
+insert into t (id,a) values (34,16);
+insert into t (id,a) values (34,17);
+insert into t (id,a) values (34,18);
+insert into t (id,a) values (34,19);
+insert into t (id,a) values (34,20);
+insert into t (id,a) values (34,21);
+insert into t (id,a) values (34,22);
+insert into t (id,a) values (34,23);
+insert into t (id,a) values (34,24);
+insert into t (id,a) values (34,25);
+insert into t (id,a) values (34,26);
+insert into t (id,a) values (34,27);
+insert into t (id,a) values (34,28);
+insert into t (id,a) values (34,29);
+insert into t (id,a) values (34,30);
+insert into t (id,a) values (34,31);
+insert into t (id,a) values (34,32);
+insert into t (id,a) values (34,33);
+insert into t (id,a) values (34,34);
+insert into t (id,a) values (34,35);
+insert into t (id,a) values (34,36);
+insert into t (id,a) values (34,37);
+insert into t (id,a) values (34,38);
+insert into t (id,a) values (34,39);
+insert into t (id,a) values (34,40);
+insert into t (id,a) values (34,41);
+insert into t (id,a) values (34,42);
+insert into t (id,a) values (34,43);
+insert into t (id,a) values (34,44);
+insert into t (id,a) values (34,45);
+insert into t (id,a) values (34,46);
+insert into t (id,a) values (34,47);
+insert into t (id,a) values (34,48);
+insert into t (id,a) values (34,49);
+insert into t (id,a) values (34,50);
+insert into t (id,a) values (34,51);
+insert into t (id,a) values (34,52);
+insert into t (id,a) values (34,53);
+insert into t (id,a) values (34,54);
+insert into t (id,a) values (34,55);
+insert into t (id,a) values (34,56);
+insert into t (id,a) values (34,57);
+insert into t (id,a) values (34,58);
+insert into t (id,a) values (34,59);
+insert into t (id,a) values (34,60);
+insert into t (id,a) values (34,61);
+insert into t (id,a) values (34,62);
+insert into t (id,a) values (34,63);
+insert into t (id,a) values (34,64);
+insert into t (id,a) values (34,65);
+insert into t (id,a) values (34,66);
+insert into t (id,a) values (34,67);
+insert into t (id,a) values (34,68);
+insert into t (id,a) values (34,69);
+insert into t (id,a) values (34,70);
+insert into t (id,a) values (34,71);
+insert into t (id,a) values (34,72);
+insert into t (id,a) values (34,73);
+insert into t (id,a) values (34,74);
+insert into t (id,a) values (34,75);
+insert into t (id,a) values (34,76);
+insert into t (id,a) values (34,77);
+insert into t (id,a) values (34,78);
+insert into t (id,a) values (34,79);
+insert into t (id,a) values (34,80);
+insert into t (id,a) values (34,81);
+insert into t (id,a) values (34,82);
+insert into t (id,a) values (34,83);
+insert into t (id,a) values (34,84);
+insert into t (id,a) values (34,85);
+insert into t (id,a) values (34,86);
+insert into t (id,a) values (34,87);
+insert into t (id,a) values (34,88);
+insert into t (id,a) values (34,89);
+insert into t (id,a) values (34,90);
+insert into t (id,a) values (34,91);
+insert into t (id,a) values (34,92);
+insert into t (id,a) values (34,93);
+insert into t (id,a) values (34,94);
+insert into t (id,a) values (34,95);
+insert into t (id,a) values (34,96);
+insert into t (id,a) values (34,97);
+insert into t (id,a) values (34,98);
+insert into t (id,a) values (34,99);
+insert into t (id,a) values (35,0);
+insert into t (id,a) values (35,1);
+insert into t (id,a) values (35,2);
+insert into t (id,a) values (35,3);
+insert into t (id,a) values (35,4);
+insert into t (id,a) values (35,5);
+insert into t (id,a) values (35,6);
+insert into t (id,a) values (35,7);
+insert into t (id,a) values (35,8);
+insert into t (id,a) values (35,9);
+insert into t (id,a) values (35,10);
+insert into t (id,a) values (35,11);
+insert into t (id,a) values (35,12);
+insert into t (id,a) values (35,13);
+insert into t (id,a) values (35,14);
+insert into t (id,a) values (35,15);
+insert into t (id,a) values (35,16);
+insert into t (id,a) values (35,17);
+insert into t (id,a) values (35,18);
+insert into t (id,a) values (35,19);
+insert into t (id,a) values (35,20);
+insert into t (id,a) values (35,21);
+insert into t (id,a) values (35,22);
+insert into t (id,a) values (35,23);
+insert into t (id,a) values (35,24);
+insert into t (id,a) values (35,25);
+insert into t (id,a) values (35,26);
+insert into t (id,a) values (35,27);
+insert into t (id,a) values (35,28);
+insert into t (id,a) values (35,29);
+insert into t (id,a) values (35,30);
+insert into t (id,a) values (35,31);
+insert into t (id,a) values (35,32);
+insert into t (id,a) values (35,33);
+insert into t (id,a) values (35,34);
+insert into t (id,a) values (35,35);
+insert into t (id,a) values (35,36);
+insert into t (id,a) values (35,37);
+insert into t (id,a) values (35,38);
+insert into t (id,a) values (35,39);
+insert into t (id,a) values (35,40);
+insert into t (id,a) values (35,41);
+insert into t (id,a) values (35,42);
+insert into t (id,a) values (35,43);
+insert into t (id,a) values (35,44);
+insert into t (id,a) values (35,45);
+insert into t (id,a) values (35,46);
+insert into t (id,a) values (35,47);
+insert into t (id,a) values (35,48);
+insert into t (id,a) values (35,49);
+insert into t (id,a) values (35,50);
+insert into t (id,a) values (35,51);
+insert into t (id,a) values (35,52);
+insert into t (id,a) values (35,53);
+insert into t (id,a) values (35,54);
+insert into t (id,a) values (35,55);
+insert into t (id,a) values (35,56);
+insert into t (id,a) values (35,57);
+insert into t (id,a) values (35,58);
+insert into t (id,a) values (35,59);
+insert into t (id,a) values (35,60);
+insert into t (id,a) values (35,61);
+insert into t (id,a) values (35,62);
+insert into t (id,a) values (35,63);
+insert into t (id,a) values (35,64);
+insert into t (id,a) values (35,65);
+insert into t (id,a) values (35,66);
+insert into t (id,a) values (35,67);
+insert into t (id,a) values (35,68);
+insert into t (id,a) values (35,69);
+insert into t (id,a) values (35,70);
+insert into t (id,a) values (35,71);
+insert into t (id,a) values (35,72);
+insert into t (id,a) values (35,73);
+insert into t (id,a) values (35,74);
+insert into t (id,a) values (35,75);
+insert into t (id,a) values (35,76);
+insert into t (id,a) values (35,77);
+insert into t (id,a) values (35,78);
+insert into t (id,a) values (35,79);
+insert into t (id,a) values (35,80);
+insert into t (id,a) values (35,81);
+insert into t (id,a) values (35,82);
+insert into t (id,a) values (35,83);
+insert into t (id,a) values (35,84);
+insert into t (id,a) values (35,85);
+insert into t (id,a) values (35,86);
+insert into t (id,a) values (35,87);
+insert into t (id,a) values (35,88);
+insert into t (id,a) values (35,89);
+insert into t (id,a) values (35,90);
+insert into t (id,a) values (35,91);
+insert into t (id,a) values (35,92);
+insert into t (id,a) values (35,93);
+insert into t (id,a) values (35,94);
+insert into t (id,a) values (35,95);
+insert into t (id,a) values (35,96);
+insert into t (id,a) values (35,97);
+insert into t (id,a) values (35,98);
+insert into t (id,a) values (35,99);
+insert into t (id,a) values (36,0);
+insert into t (id,a) values (36,1);
+insert into t (id,a) values (36,2);
+insert into t (id,a) values (36,3);
+insert into t (id,a) values (36,4);
+insert into t (id,a) values (36,5);
+insert into t (id,a) values (36,6);
+insert into t (id,a) values (36,7);
+insert into t (id,a) values (36,8);
+insert into t (id,a) values (36,9);
+insert into t (id,a) values (36,10);
+insert into t (id,a) values (36,11);
+insert into t (id,a) values (36,12);
+insert into t (id,a) values (36,13);
+insert into t (id,a) values (36,14);
+insert into t (id,a) values (36,15);
+insert into t (id,a) values (36,16);
+insert into t (id,a) values (36,17);
+insert into t (id,a) values (36,18);
+insert into t (id,a) values (36,19);
+insert into t (id,a) values (36,20);
+insert into t (id,a) values (36,21);
+insert into t (id,a) values (36,22);
+insert into t (id,a) values (36,23);
+insert into t (id,a) values (36,24);
+insert into t (id,a) values (36,25);
+insert into t (id,a) values (36,26);
+insert into t (id,a) values (36,27);
+insert into t (id,a) values (36,28);
+insert into t (id,a) values (36,29);
+insert into t (id,a) values (36,30);
+insert into t (id,a) values (36,31);
+insert into t (id,a) values (36,32);
+insert into t (id,a) values (36,33);
+insert into t (id,a) values (36,34);
+insert into t (id,a) values (36,35);
+insert into t (id,a) values (36,36);
+insert into t (id,a) values (36,37);
+insert into t (id,a) values (36,38);
+insert into t (id,a) values (36,39);
+insert into t (id,a) values (36,40);
+insert into t (id,a) values (36,41);
+insert into t (id,a) values (36,42);
+insert into t (id,a) values (36,43);
+insert into t (id,a) values (36,44);
+insert into t (id,a) values (36,45);
+insert into t (id,a) values (36,46);
+insert into t (id,a) values (36,47);
+insert into t (id,a) values (36,48);
+insert into t (id,a) values (36,49);
+insert into t (id,a) values (36,50);
+insert into t (id,a) values (36,51);
+insert into t (id,a) values (36,52);
+insert into t (id,a) values (36,53);
+insert into t (id,a) values (36,54);
+insert into t (id,a) values (36,55);
+insert into t (id,a) values (36,56);
+insert into t (id,a) values (36,57);
+insert into t (id,a) values (36,58);
+insert into t (id,a) values (36,59);
+insert into t (id,a) values (36,60);
+insert into t (id,a) values (36,61);
+insert into t (id,a) values (36,62);
+insert into t (id,a) values (36,63);
+insert into t (id,a) values (36,64);
+insert into t (id,a) values (36,65);
+insert into t (id,a) values (36,66);
+insert into t (id,a) values (36,67);
+insert into t (id,a) values (36,68);
+insert into t (id,a) values (36,69);
+insert into t (id,a) values (36,70);
+insert into t (id,a) values (36,71);
+insert into t (id,a) values (36,72);
+insert into t (id,a) values (36,73);
+insert into t (id,a) values (36,74);
+insert into t (id,a) values (36,75);
+insert into t (id,a) values (36,76);
+insert into t (id,a) values (36,77);
+insert into t (id,a) values (36,78);
+insert into t (id,a) values (36,79);
+insert into t (id,a) values (36,80);
+insert into t (id,a) values (36,81);
+insert into t (id,a) values (36,82);
+insert into t (id,a) values (36,83);
+insert into t (id,a) values (36,84);
+insert into t (id,a) values (36,85);
+insert into t (id,a) values (36,86);
+insert into t (id,a) values (36,87);
+insert into t (id,a) values (36,88);
+insert into t (id,a) values (36,89);
+insert into t (id,a) values (36,90);
+insert into t (id,a) values (36,91);
+insert into t (id,a) values (36,92);
+insert into t (id,a) values (36,93);
+insert into t (id,a) values (36,94);
+insert into t (id,a) values (36,95);
+insert into t (id,a) values (36,96);
+insert into t (id,a) values (36,97);
+insert into t (id,a) values (36,98);
+insert into t (id,a) values (36,99);
+insert into t (id,a) values (37,0);
+insert into t (id,a) values (37,1);
+insert into t (id,a) values (37,2);
+insert into t (id,a) values (37,3);
+insert into t (id,a) values (37,4);
+insert into t (id,a) values (37,5);
+insert into t (id,a) values (37,6);
+insert into t (id,a) values (37,7);
+insert into t (id,a) values (37,8);
+insert into t (id,a) values (37,9);
+insert into t (id,a) values (37,10);
+insert into t (id,a) values (37,11);
+insert into t (id,a) values (37,12);
+insert into t (id,a) values (37,13);
+insert into t (id,a) values (37,14);
+insert into t (id,a) values (37,15);
+insert into t (id,a) values (37,16);
+insert into t (id,a) values (37,17);
+insert into t (id,a) values (37,18);
+insert into t (id,a) values (37,19);
+insert into t (id,a) values (37,20);
+insert into t (id,a) values (37,21);
+insert into t (id,a) values (37,22);
+insert into t (id,a) values (37,23);
+insert into t (id,a) values (37,24);
+insert into t (id,a) values (37,25);
+insert into t (id,a) values (37,26);
+insert into t (id,a) values (37,27);
+insert into t (id,a) values (37,28);
+insert into t (id,a) values (37,29);
+insert into t (id,a) values (37,30);
+insert into t (id,a) values (37,31);
+insert into t (id,a) values (37,32);
+insert into t (id,a) values (37,33);
+insert into t (id,a) values (37,34);
+insert into t (id,a) values (37,35);
+insert into t (id,a) values (37,36);
+insert into t (id,a) values (37,37);
+insert into t (id,a) values (37,38);
+insert into t (id,a) values (37,39);
+insert into t (id,a) values (37,40);
+insert into t (id,a) values (37,41);
+insert into t (id,a) values (37,42);
+insert into t (id,a) values (37,43);
+insert into t (id,a) values (37,44);
+insert into t (id,a) values (37,45);
+insert into t (id,a) values (37,46);
+insert into t (id,a) values (37,47);
+insert into t (id,a) values (37,48);
+insert into t (id,a) values (37,49);
+insert into t (id,a) values (37,50);
+insert into t (id,a) values (37,51);
+insert into t (id,a) values (37,52);
+insert into t (id,a) values (37,53);
+insert into t (id,a) values (37,54);
+insert into t (id,a) values (37,55);
+insert into t (id,a) values (37,56);
+insert into t (id,a) values (37,57);
+insert into t (id,a) values (37,58);
+insert into t (id,a) values (37,59);
+insert into t (id,a) values (37,60);
+insert into t (id,a) values (37,61);
+insert into t (id,a) values (37,62);
+insert into t (id,a) values (37,63);
+insert into t (id,a) values (37,64);
+insert into t (id,a) values (37,65);
+insert into t (id,a) values (37,66);
+insert into t (id,a) values (37,67);
+insert into t (id,a) values (37,68);
+insert into t (id,a) values (37,69);
+insert into t (id,a) values (37,70);
+insert into t (id,a) values (37,71);
+insert into t (id,a) values (37,72);
+insert into t (id,a) values (37,73);
+insert into t (id,a) values (37,74);
+insert into t (id,a) values (37,75);
+insert into t (id,a) values (37,76);
+insert into t (id,a) values (37,77);
+insert into t (id,a) values (37,78);
+insert into t (id,a) values (37,79);
+insert into t (id,a) values (37,80);
+insert into t (id,a) values (37,81);
+insert into t (id,a) values (37,82);
+insert into t (id,a) values (37,83);
+insert into t (id,a) values (37,84);
+insert into t (id,a) values (37,85);
+insert into t (id,a) values (37,86);
+insert into t (id,a) values (37,87);
+insert into t (id,a) values (37,88);
+insert into t (id,a) values (37,89);
+insert into t (id,a) values (37,90);
+insert into t (id,a) values (37,91);
+insert into t (id,a) values (37,92);
+insert into t (id,a) values (37,93);
+insert into t (id,a) values (37,94);
+insert into t (id,a) values (37,95);
+insert into t (id,a) values (37,96);
+insert into t (id,a) values (37,97);
+insert into t (id,a) values (37,98);
+insert into t (id,a) values (37,99);
+insert into t (id,a) values (38,0);
+insert into t (id,a) values (38,1);
+insert into t (id,a) values (38,2);
+insert into t (id,a) values (38,3);
+insert into t (id,a) values (38,4);
+insert into t (id,a) values (38,5);
+insert into t (id,a) values (38,6);
+insert into t (id,a) values (38,7);
+insert into t (id,a) values (38,8);
+insert into t (id,a) values (38,9);
+insert into t (id,a) values (38,10);
+insert into t (id,a) values (38,11);
+insert into t (id,a) values (38,12);
+insert into t (id,a) values (38,13);
+insert into t (id,a) values (38,14);
+insert into t (id,a) values (38,15);
+insert into t (id,a) values (38,16);
+insert into t (id,a) values (38,17);
+insert into t (id,a) values (38,18);
+insert into t (id,a) values (38,19);
+insert into t (id,a) values (38,20);
+insert into t (id,a) values (38,21);
+insert into t (id,a) values (38,22);
+insert into t (id,a) values (38,23);
+insert into t (id,a) values (38,24);
+insert into t (id,a) values (38,25);
+insert into t (id,a) values (38,26);
+insert into t (id,a) values (38,27);
+insert into t (id,a) values (38,28);
+insert into t (id,a) values (38,29);
+insert into t (id,a) values (38,30);
+insert into t (id,a) values (38,31);
+insert into t (id,a) values (38,32);
+insert into t (id,a) values (38,33);
+insert into t (id,a) values (38,34);
+insert into t (id,a) values (38,35);
+insert into t (id,a) values (38,36);
+insert into t (id,a) values (38,37);
+insert into t (id,a) values (38,38);
+insert into t (id,a) values (38,39);
+insert into t (id,a) values (38,40);
+insert into t (id,a) values (38,41);
+insert into t (id,a) values (38,42);
+insert into t (id,a) values (38,43);
+insert into t (id,a) values (38,44);
+insert into t (id,a) values (38,45);
+insert into t (id,a) values (38,46);
+insert into t (id,a) values (38,47);
+insert into t (id,a) values (38,48);
+insert into t (id,a) values (38,49);
+insert into t (id,a) values (38,50);
+insert into t (id,a) values (38,51);
+insert into t (id,a) values (38,52);
+insert into t (id,a) values (38,53);
+insert into t (id,a) values (38,54);
+insert into t (id,a) values (38,55);
+insert into t (id,a) values (38,56);
+insert into t (id,a) values (38,57);
+insert into t (id,a) values (38,58);
+insert into t (id,a) values (38,59);
+insert into t (id,a) values (38,60);
+insert into t (id,a) values (38,61);
+insert into t (id,a) values (38,62);
+insert into t (id,a) values (38,63);
+insert into t (id,a) values (38,64);
+insert into t (id,a) values (38,65);
+insert into t (id,a) values (38,66);
+insert into t (id,a) values (38,67);
+insert into t (id,a) values (38,68);
+insert into t (id,a) values (38,69);
+insert into t (id,a) values (38,70);
+insert into t (id,a) values (38,71);
+insert into t (id,a) values (38,72);
+insert into t (id,a) values (38,73);
+insert into t (id,a) values (38,74);
+insert into t (id,a) values (38,75);
+insert into t (id,a) values (38,76);
+insert into t (id,a) values (38,77);
+insert into t (id,a) values (38,78);
+insert into t (id,a) values (38,79);
+insert into t (id,a) values (38,80);
+insert into t (id,a) values (38,81);
+insert into t (id,a) values (38,82);
+insert into t (id,a) values (38,83);
+insert into t (id,a) values (38,84);
+insert into t (id,a) values (38,85);
+insert into t (id,a) values (38,86);
+insert into t (id,a) values (38,87);
+insert into t (id,a) values (38,88);
+insert into t (id,a) values (38,89);
+insert into t (id,a) values (38,90);
+insert into t (id,a) values (38,91);
+insert into t (id,a) values (38,92);
+insert into t (id,a) values (38,93);
+insert into t (id,a) values (38,94);
+insert into t (id,a) values (38,95);
+insert into t (id,a) values (38,96);
+insert into t (id,a) values (38,97);
+insert into t (id,a) values (38,98);
+insert into t (id,a) values (38,99);
+insert into t (id,a) values (39,0);
+insert into t (id,a) values (39,1);
+insert into t (id,a) values (39,2);
+insert into t (id,a) values (39,3);
+insert into t (id,a) values (39,4);
+insert into t (id,a) values (39,5);
+insert into t (id,a) values (39,6);
+insert into t (id,a) values (39,7);
+insert into t (id,a) values (39,8);
+insert into t (id,a) values (39,9);
+insert into t (id,a) values (39,10);
+insert into t (id,a) values (39,11);
+insert into t (id,a) values (39,12);
+insert into t (id,a) values (39,13);
+insert into t (id,a) values (39,14);
+insert into t (id,a) values (39,15);
+insert into t (id,a) values (39,16);
+insert into t (id,a) values (39,17);
+insert into t (id,a) values (39,18);
+insert into t (id,a) values (39,19);
+insert into t (id,a) values (39,20);
+insert into t (id,a) values (39,21);
+insert into t (id,a) values (39,22);
+insert into t (id,a) values (39,23);
+insert into t (id,a) values (39,24);
+insert into t (id,a) values (39,25);
+insert into t (id,a) values (39,26);
+insert into t (id,a) values (39,27);
+insert into t (id,a) values (39,28);
+insert into t (id,a) values (39,29);
+insert into t (id,a) values (39,30);
+insert into t (id,a) values (39,31);
+insert into t (id,a) values (39,32);
+insert into t (id,a) values (39,33);
+insert into t (id,a) values (39,34);
+insert into t (id,a) values (39,35);
+insert into t (id,a) values (39,36);
+insert into t (id,a) values (39,37);
+insert into t (id,a) values (39,38);
+insert into t (id,a) values (39,39);
+insert into t (id,a) values (39,40);
+insert into t (id,a) values (39,41);
+insert into t (id,a) values (39,42);
+insert into t (id,a) values (39,43);
+insert into t (id,a) values (39,44);
+insert into t (id,a) values (39,45);
+insert into t (id,a) values (39,46);
+insert into t (id,a) values (39,47);
+insert into t (id,a) values (39,48);
+insert into t (id,a) values (39,49);
+insert into t (id,a) values (39,50);
+insert into t (id,a) values (39,51);
+insert into t (id,a) values (39,52);
+insert into t (id,a) values (39,53);
+insert into t (id,a) values (39,54);
+insert into t (id,a) values (39,55);
+insert into t (id,a) values (39,56);
+insert into t (id,a) values (39,57);
+insert into t (id,a) values (39,58);
+insert into t (id,a) values (39,59);
+insert into t (id,a) values (39,60);
+insert into t (id,a) values (39,61);
+insert into t (id,a) values (39,62);
+insert into t (id,a) values (39,63);
+insert into t (id,a) values (39,64);
+insert into t (id,a) values (39,65);
+insert into t (id,a) values (39,66);
+insert into t (id,a) values (39,67);
+insert into t (id,a) values (39,68);
+insert into t (id,a) values (39,69);
+insert into t (id,a) values (39,70);
+insert into t (id,a) values (39,71);
+insert into t (id,a) values (39,72);
+insert into t (id,a) values (39,73);
+insert into t (id,a) values (39,74);
+insert into t (id,a) values (39,75);
+insert into t (id,a) values (39,76);
+insert into t (id,a) values (39,77);
+insert into t (id,a) values (39,78);
+insert into t (id,a) values (39,79);
+insert into t (id,a) values (39,80);
+insert into t (id,a) values (39,81);
+insert into t (id,a) values (39,82);
+insert into t (id,a) values (39,83);
+insert into t (id,a) values (39,84);
+insert into t (id,a) values (39,85);
+insert into t (id,a) values (39,86);
+insert into t (id,a) values (39,87);
+insert into t (id,a) values (39,88);
+insert into t (id,a) values (39,89);
+insert into t (id,a) values (39,90);
+insert into t (id,a) values (39,91);
+insert into t (id,a) values (39,92);
+insert into t (id,a) values (39,93);
+insert into t (id,a) values (39,94);
+insert into t (id,a) values (39,95);
+insert into t (id,a) values (39,96);
+insert into t (id,a) values (39,97);
+insert into t (id,a) values (39,98);
+insert into t (id,a) values (39,99);
+insert into t (id,a) values (40,0);
+insert into t (id,a) values (40,1);
+insert into t (id,a) values (40,2);
+insert into t (id,a) values (40,3);
+insert into t (id,a) values (40,4);
+insert into t (id,a) values (40,5);
+insert into t (id,a) values (40,6);
+insert into t (id,a) values (40,7);
+insert into t (id,a) values (40,8);
+insert into t (id,a) values (40,9);
+insert into t (id,a) values (40,10);
+insert into t (id,a) values (40,11);
+insert into t (id,a) values (40,12);
+insert into t (id,a) values (40,13);
+insert into t (id,a) values (40,14);
+insert into t (id,a) values (40,15);
+insert into t (id,a) values (40,16);
+insert into t (id,a) values (40,17);
+insert into t (id,a) values (40,18);
+insert into t (id,a) values (40,19);
+insert into t (id,a) values (40,20);
+insert into t (id,a) values (40,21);
+insert into t (id,a) values (40,22);
+insert into t (id,a) values (40,23);
+insert into t (id,a) values (40,24);
+insert into t (id,a) values (40,25);
+insert into t (id,a) values (40,26);
+insert into t (id,a) values (40,27);
+insert into t (id,a) values (40,28);
+insert into t (id,a) values (40,29);
+insert into t (id,a) values (40,30);
+insert into t (id,a) values (40,31);
+insert into t (id,a) values (40,32);
+insert into t (id,a) values (40,33);
+insert into t (id,a) values (40,34);
+insert into t (id,a) values (40,35);
+insert into t (id,a) values (40,36);
+insert into t (id,a) values (40,37);
+insert into t (id,a) values (40,38);
+insert into t (id,a) values (40,39);
+insert into t (id,a) values (40,40);
+insert into t (id,a) values (40,41);
+insert into t (id,a) values (40,42);
+insert into t (id,a) values (40,43);
+insert into t (id,a) values (40,44);
+insert into t (id,a) values (40,45);
+insert into t (id,a) values (40,46);
+insert into t (id,a) values (40,47);
+insert into t (id,a) values (40,48);
+insert into t (id,a) values (40,49);
+insert into t (id,a) values (40,50);
+insert into t (id,a) values (40,51);
+insert into t (id,a) values (40,52);
+insert into t (id,a) values (40,53);
+insert into t (id,a) values (40,54);
+insert into t (id,a) values (40,55);
+insert into t (id,a) values (40,56);
+insert into t (id,a) values (40,57);
+insert into t (id,a) values (40,58);
+insert into t (id,a) values (40,59);
+insert into t (id,a) values (40,60);
+insert into t (id,a) values (40,61);
+insert into t (id,a) values (40,62);
+insert into t (id,a) values (40,63);
+insert into t (id,a) values (40,64);
+insert into t (id,a) values (40,65);
+insert into t (id,a) values (40,66);
+insert into t (id,a) values (40,67);
+insert into t (id,a) values (40,68);
+insert into t (id,a) values (40,69);
+insert into t (id,a) values (40,70);
+insert into t (id,a) values (40,71);
+insert into t (id,a) values (40,72);
+insert into t (id,a) values (40,73);
+insert into t (id,a) values (40,74);
+insert into t (id,a) values (40,75);
+insert into t (id,a) values (40,76);
+insert into t (id,a) values (40,77);
+insert into t (id,a) values (40,78);
+insert into t (id,a) values (40,79);
+insert into t (id,a) values (40,80);
+insert into t (id,a) values (40,81);
+insert into t (id,a) values (40,82);
+insert into t (id,a) values (40,83);
+insert into t (id,a) values (40,84);
+insert into t (id,a) values (40,85);
+insert into t (id,a) values (40,86);
+insert into t (id,a) values (40,87);
+insert into t (id,a) values (40,88);
+insert into t (id,a) values (40,89);
+insert into t (id,a) values (40,90);
+insert into t (id,a) values (40,91);
+insert into t (id,a) values (40,92);
+insert into t (id,a) values (40,93);
+insert into t (id,a) values (40,94);
+insert into t (id,a) values (40,95);
+insert into t (id,a) values (40,96);
+insert into t (id,a) values (40,97);
+insert into t (id,a) values (40,98);
+insert into t (id,a) values (40,99);
+insert into t (id,a) values (41,0);
+insert into t (id,a) values (41,1);
+insert into t (id,a) values (41,2);
+insert into t (id,a) values (41,3);
+insert into t (id,a) values (41,4);
+insert into t (id,a) values (41,5);
+insert into t (id,a) values (41,6);
+insert into t (id,a) values (41,7);
+insert into t (id,a) values (41,8);
+insert into t (id,a) values (41,9);
+insert into t (id,a) values (41,10);
+insert into t (id,a) values (41,11);
+insert into t (id,a) values (41,12);
+insert into t (id,a) values (41,13);
+insert into t (id,a) values (41,14);
+insert into t (id,a) values (41,15);
+insert into t (id,a) values (41,16);
+insert into t (id,a) values (41,17);
+insert into t (id,a) values (41,18);
+insert into t (id,a) values (41,19);
+insert into t (id,a) values (41,20);
+insert into t (id,a) values (41,21);
+insert into t (id,a) values (41,22);
+insert into t (id,a) values (41,23);
+insert into t (id,a) values (41,24);
+insert into t (id,a) values (41,25);
+insert into t (id,a) values (41,26);
+insert into t (id,a) values (41,27);
+insert into t (id,a) values (41,28);
+insert into t (id,a) values (41,29);
+insert into t (id,a) values (41,30);
+insert into t (id,a) values (41,31);
+insert into t (id,a) values (41,32);
+insert into t (id,a) values (41,33);
+insert into t (id,a) values (41,34);
+insert into t (id,a) values (41,35);
+insert into t (id,a) values (41,36);
+insert into t (id,a) values (41,37);
+insert into t (id,a) values (41,38);
+insert into t (id,a) values (41,39);
+insert into t (id,a) values (41,40);
+insert into t (id,a) values (41,41);
+insert into t (id,a) values (41,42);
+insert into t (id,a) values (41,43);
+insert into t (id,a) values (41,44);
+insert into t (id,a) values (41,45);
+insert into t (id,a) values (41,46);
+insert into t (id,a) values (41,47);
+insert into t (id,a) values (41,48);
+insert into t (id,a) values (41,49);
+insert into t (id,a) values (41,50);
+insert into t (id,a) values (41,51);
+insert into t (id,a) values (41,52);
+insert into t (id,a) values (41,53);
+insert into t (id,a) values (41,54);
+insert into t (id,a) values (41,55);
+insert into t (id,a) values (41,56);
+insert into t (id,a) values (41,57);
+insert into t (id,a) values (41,58);
+insert into t (id,a) values (41,59);
+insert into t (id,a) values (41,60);
+insert into t (id,a) values (41,61);
+insert into t (id,a) values (41,62);
+insert into t (id,a) values (41,63);
+insert into t (id,a) values (41,64);
+insert into t (id,a) values (41,65);
+insert into t (id,a) values (41,66);
+insert into t (id,a) values (41,67);
+insert into t (id,a) values (41,68);
+insert into t (id,a) values (41,69);
+insert into t (id,a) values (41,70);
+insert into t (id,a) values (41,71);
+insert into t (id,a) values (41,72);
+insert into t (id,a) values (41,73);
+insert into t (id,a) values (41,74);
+insert into t (id,a) values (41,75);
+insert into t (id,a) values (41,76);
+insert into t (id,a) values (41,77);
+insert into t (id,a) values (41,78);
+insert into t (id,a) values (41,79);
+insert into t (id,a) values (41,80);
+insert into t (id,a) values (41,81);
+insert into t (id,a) values (41,82);
+insert into t (id,a) values (41,83);
+insert into t (id,a) values (41,84);
+insert into t (id,a) values (41,85);
+insert into t (id,a) values (41,86);
+insert into t (id,a) values (41,87);
+insert into t (id,a) values (41,88);
+insert into t (id,a) values (41,89);
+insert into t (id,a) values (41,90);
+insert into t (id,a) values (41,91);
+insert into t (id,a) values (41,92);
+insert into t (id,a) values (41,93);
+insert into t (id,a) values (41,94);
+insert into t (id,a) values (41,95);
+insert into t (id,a) values (41,96);
+insert into t (id,a) values (41,97);
+insert into t (id,a) values (41,98);
+insert into t (id,a) values (41,99);
+insert into t (id,a) values (42,0);
+insert into t (id,a) values (42,1);
+insert into t (id,a) values (42,2);
+insert into t (id,a) values (42,3);
+insert into t (id,a) values (42,4);
+insert into t (id,a) values (42,5);
+insert into t (id,a) values (42,6);
+insert into t (id,a) values (42,7);
+insert into t (id,a) values (42,8);
+insert into t (id,a) values (42,9);
+insert into t (id,a) values (42,10);
+insert into t (id,a) values (42,11);
+insert into t (id,a) values (42,12);
+insert into t (id,a) values (42,13);
+insert into t (id,a) values (42,14);
+insert into t (id,a) values (42,15);
+insert into t (id,a) values (42,16);
+insert into t (id,a) values (42,17);
+insert into t (id,a) values (42,18);
+insert into t (id,a) values (42,19);
+insert into t (id,a) values (42,20);
+insert into t (id,a) values (42,21);
+insert into t (id,a) values (42,22);
+insert into t (id,a) values (42,23);
+insert into t (id,a) values (42,24);
+insert into t (id,a) values (42,25);
+insert into t (id,a) values (42,26);
+insert into t (id,a) values (42,27);
+insert into t (id,a) values (42,28);
+insert into t (id,a) values (42,29);
+insert into t (id,a) values (42,30);
+insert into t (id,a) values (42,31);
+insert into t (id,a) values (42,32);
+insert into t (id,a) values (42,33);
+insert into t (id,a) values (42,34);
+insert into t (id,a) values (42,35);
+insert into t (id,a) values (42,36);
+insert into t (id,a) values (42,37);
+insert into t (id,a) values (42,38);
+insert into t (id,a) values (42,39);
+insert into t (id,a) values (42,40);
+insert into t (id,a) values (42,41);
+insert into t (id,a) values (42,42);
+insert into t (id,a) values (42,43);
+insert into t (id,a) values (42,44);
+insert into t (id,a) values (42,45);
+insert into t (id,a) values (42,46);
+insert into t (id,a) values (42,47);
+insert into t (id,a) values (42,48);
+insert into t (id,a) values (42,49);
+insert into t (id,a) values (42,50);
+insert into t (id,a) values (42,51);
+insert into t (id,a) values (42,52);
+insert into t (id,a) values (42,53);
+insert into t (id,a) values (42,54);
+insert into t (id,a) values (42,55);
+insert into t (id,a) values (42,56);
+insert into t (id,a) values (42,57);
+insert into t (id,a) values (42,58);
+insert into t (id,a) values (42,59);
+insert into t (id,a) values (42,60);
+insert into t (id,a) values (42,61);
+insert into t (id,a) values (42,62);
+insert into t (id,a) values (42,63);
+insert into t (id,a) values (42,64);
+insert into t (id,a) values (42,65);
+insert into t (id,a) values (42,66);
+insert into t (id,a) values (42,67);
+insert into t (id,a) values (42,68);
+insert into t (id,a) values (42,69);
+insert into t (id,a) values (42,70);
+insert into t (id,a) values (42,71);
+insert into t (id,a) values (42,72);
+insert into t (id,a) values (42,73);
+insert into t (id,a) values (42,74);
+insert into t (id,a) values (42,75);
+insert into t (id,a) values (42,76);
+insert into t (id,a) values (42,77);
+insert into t (id,a) values (42,78);
+insert into t (id,a) values (42,79);
+insert into t (id,a) values (42,80);
+insert into t (id,a) values (42,81);
+insert into t (id,a) values (42,82);
+insert into t (id,a) values (42,83);
+insert into t (id,a) values (42,84);
+insert into t (id,a) values (42,85);
+insert into t (id,a) values (42,86);
+insert into t (id,a) values (42,87);
+insert into t (id,a) values (42,88);
+insert into t (id,a) values (42,89);
+insert into t (id,a) values (42,90);
+insert into t (id,a) values (42,91);
+insert into t (id,a) values (42,92);
+insert into t (id,a) values (42,93);
+insert into t (id,a) values (42,94);
+insert into t (id,a) values (42,95);
+insert into t (id,a) values (42,96);
+insert into t (id,a) values (42,97);
+insert into t (id,a) values (42,98);
+insert into t (id,a) values (42,99);
+insert into t (id,a) values (43,0);
+insert into t (id,a) values (43,1);
+insert into t (id,a) values (43,2);
+insert into t (id,a) values (43,3);
+insert into t (id,a) values (43,4);
+insert into t (id,a) values (43,5);
+insert into t (id,a) values (43,6);
+insert into t (id,a) values (43,7);
+insert into t (id,a) values (43,8);
+insert into t (id,a) values (43,9);
+insert into t (id,a) values (43,10);
+insert into t (id,a) values (43,11);
+insert into t (id,a) values (43,12);
+insert into t (id,a) values (43,13);
+insert into t (id,a) values (43,14);
+insert into t (id,a) values (43,15);
+insert into t (id,a) values (43,16);
+insert into t (id,a) values (43,17);
+insert into t (id,a) values (43,18);
+insert into t (id,a) values (43,19);
+insert into t (id,a) values (43,20);
+insert into t (id,a) values (43,21);
+insert into t (id,a) values (43,22);
+insert into t (id,a) values (43,23);
+insert into t (id,a) values (43,24);
+insert into t (id,a) values (43,25);
+insert into t (id,a) values (43,26);
+insert into t (id,a) values (43,27);
+insert into t (id,a) values (43,28);
+insert into t (id,a) values (43,29);
+insert into t (id,a) values (43,30);
+insert into t (id,a) values (43,31);
+insert into t (id,a) values (43,32);
+insert into t (id,a) values (43,33);
+insert into t (id,a) values (43,34);
+insert into t (id,a) values (43,35);
+insert into t (id,a) values (43,36);
+insert into t (id,a) values (43,37);
+insert into t (id,a) values (43,38);
+insert into t (id,a) values (43,39);
+insert into t (id,a) values (43,40);
+insert into t (id,a) values (43,41);
+insert into t (id,a) values (43,42);
+insert into t (id,a) values (43,43);
+insert into t (id,a) values (43,44);
+insert into t (id,a) values (43,45);
+insert into t (id,a) values (43,46);
+insert into t (id,a) values (43,47);
+insert into t (id,a) values (43,48);
+insert into t (id,a) values (43,49);
+insert into t (id,a) values (43,50);
+insert into t (id,a) values (43,51);
+insert into t (id,a) values (43,52);
+insert into t (id,a) values (43,53);
+insert into t (id,a) values (43,54);
+insert into t (id,a) values (43,55);
+insert into t (id,a) values (43,56);
+insert into t (id,a) values (43,57);
+insert into t (id,a) values (43,58);
+insert into t (id,a) values (43,59);
+insert into t (id,a) values (43,60);
+insert into t (id,a) values (43,61);
+insert into t (id,a) values (43,62);
+insert into t (id,a) values (43,63);
+insert into t (id,a) values (43,64);
+insert into t (id,a) values (43,65);
+insert into t (id,a) values (43,66);
+insert into t (id,a) values (43,67);
+insert into t (id,a) values (43,68);
+insert into t (id,a) values (43,69);
+insert into t (id,a) values (43,70);
+insert into t (id,a) values (43,71);
+insert into t (id,a) values (43,72);
+insert into t (id,a) values (43,73);
+insert into t (id,a) values (43,74);
+insert into t (id,a) values (43,75);
+insert into t (id,a) values (43,76);
+insert into t (id,a) values (43,77);
+insert into t (id,a) values (43,78);
+insert into t (id,a) values (43,79);
+insert into t (id,a) values (43,80);
+insert into t (id,a) values (43,81);
+insert into t (id,a) values (43,82);
+insert into t (id,a) values (43,83);
+insert into t (id,a) values (43,84);
+insert into t (id,a) values (43,85);
+insert into t (id,a) values (43,86);
+insert into t (id,a) values (43,87);
+insert into t (id,a) values (43,88);
+insert into t (id,a) values (43,89);
+insert into t (id,a) values (43,90);
+insert into t (id,a) values (43,91);
+insert into t (id,a) values (43,92);
+insert into t (id,a) values (43,93);
+insert into t (id,a) values (43,94);
+insert into t (id,a) values (43,95);
+insert into t (id,a) values (43,96);
+insert into t (id,a) values (43,97);
+insert into t (id,a) values (43,98);
+insert into t (id,a) values (43,99);
+insert into t (id,a) values (44,0);
+insert into t (id,a) values (44,1);
+insert into t (id,a) values (44,2);
+insert into t (id,a) values (44,3);
+insert into t (id,a) values (44,4);
+insert into t (id,a) values (44,5);
+insert into t (id,a) values (44,6);
+insert into t (id,a) values (44,7);
+insert into t (id,a) values (44,8);
+insert into t (id,a) values (44,9);
+insert into t (id,a) values (44,10);
+insert into t (id,a) values (44,11);
+insert into t (id,a) values (44,12);
+insert into t (id,a) values (44,13);
+insert into t (id,a) values (44,14);
+insert into t (id,a) values (44,15);
+insert into t (id,a) values (44,16);
+insert into t (id,a) values (44,17);
+insert into t (id,a) values (44,18);
+insert into t (id,a) values (44,19);
+insert into t (id,a) values (44,20);
+insert into t (id,a) values (44,21);
+insert into t (id,a) values (44,22);
+insert into t (id,a) values (44,23);
+insert into t (id,a) values (44,24);
+insert into t (id,a) values (44,25);
+insert into t (id,a) values (44,26);
+insert into t (id,a) values (44,27);
+insert into t (id,a) values (44,28);
+insert into t (id,a) values (44,29);
+insert into t (id,a) values (44,30);
+insert into t (id,a) values (44,31);
+insert into t (id,a) values (44,32);
+insert into t (id,a) values (44,33);
+insert into t (id,a) values (44,34);
+insert into t (id,a) values (44,35);
+insert into t (id,a) values (44,36);
+insert into t (id,a) values (44,37);
+insert into t (id,a) values (44,38);
+insert into t (id,a) values (44,39);
+insert into t (id,a) values (44,40);
+insert into t (id,a) values (44,41);
+insert into t (id,a) values (44,42);
+insert into t (id,a) values (44,43);
+insert into t (id,a) values (44,44);
+insert into t (id,a) values (44,45);
+insert into t (id,a) values (44,46);
+insert into t (id,a) values (44,47);
+insert into t (id,a) values (44,48);
+insert into t (id,a) values (44,49);
+insert into t (id,a) values (44,50);
+insert into t (id,a) values (44,51);
+insert into t (id,a) values (44,52);
+insert into t (id,a) values (44,53);
+insert into t (id,a) values (44,54);
+insert into t (id,a) values (44,55);
+insert into t (id,a) values (44,56);
+insert into t (id,a) values (44,57);
+insert into t (id,a) values (44,58);
+insert into t (id,a) values (44,59);
+insert into t (id,a) values (44,60);
+insert into t (id,a) values (44,61);
+insert into t (id,a) values (44,62);
+insert into t (id,a) values (44,63);
+insert into t (id,a) values (44,64);
+insert into t (id,a) values (44,65);
+insert into t (id,a) values (44,66);
+insert into t (id,a) values (44,67);
+insert into t (id,a) values (44,68);
+insert into t (id,a) values (44,69);
+insert into t (id,a) values (44,70);
+insert into t (id,a) values (44,71);
+insert into t (id,a) values (44,72);
+insert into t (id,a) values (44,73);
+insert into t (id,a) values (44,74);
+insert into t (id,a) values (44,75);
+insert into t (id,a) values (44,76);
+insert into t (id,a) values (44,77);
+insert into t (id,a) values (44,78);
+insert into t (id,a) values (44,79);
+insert into t (id,a) values (44,80);
+insert into t (id,a) values (44,81);
+insert into t (id,a) values (44,82);
+insert into t (id,a) values (44,83);
+insert into t (id,a) values (44,84);
+insert into t (id,a) values (44,85);
+insert into t (id,a) values (44,86);
+insert into t (id,a) values (44,87);
+insert into t (id,a) values (44,88);
+insert into t (id,a) values (44,89);
+insert into t (id,a) values (44,90);
+insert into t (id,a) values (44,91);
+insert into t (id,a) values (44,92);
+insert into t (id,a) values (44,93);
+insert into t (id,a) values (44,94);
+insert into t (id,a) values (44,95);
+insert into t (id,a) values (44,96);
+insert into t (id,a) values (44,97);
+insert into t (id,a) values (44,98);
+insert into t (id,a) values (44,99);
+insert into t (id,a) values (45,0);
+insert into t (id,a) values (45,1);
+insert into t (id,a) values (45,2);
+insert into t (id,a) values (45,3);
+insert into t (id,a) values (45,4);
+insert into t (id,a) values (45,5);
+insert into t (id,a) values (45,6);
+insert into t (id,a) values (45,7);
+insert into t (id,a) values (45,8);
+insert into t (id,a) values (45,9);
+insert into t (id,a) values (45,10);
+insert into t (id,a) values (45,11);
+insert into t (id,a) values (45,12);
+insert into t (id,a) values (45,13);
+insert into t (id,a) values (45,14);
+insert into t (id,a) values (45,15);
+insert into t (id,a) values (45,16);
+insert into t (id,a) values (45,17);
+insert into t (id,a) values (45,18);
+insert into t (id,a) values (45,19);
+insert into t (id,a) values (45,20);
+insert into t (id,a) values (45,21);
+insert into t (id,a) values (45,22);
+insert into t (id,a) values (45,23);
+insert into t (id,a) values (45,24);
+insert into t (id,a) values (45,25);
+insert into t (id,a) values (45,26);
+insert into t (id,a) values (45,27);
+insert into t (id,a) values (45,28);
+insert into t (id,a) values (45,29);
+insert into t (id,a) values (45,30);
+insert into t (id,a) values (45,31);
+insert into t (id,a) values (45,32);
+insert into t (id,a) values (45,33);
+insert into t (id,a) values (45,34);
+insert into t (id,a) values (45,35);
+insert into t (id,a) values (45,36);
+insert into t (id,a) values (45,37);
+insert into t (id,a) values (45,38);
+insert into t (id,a) values (45,39);
+insert into t (id,a) values (45,40);
+insert into t (id,a) values (45,41);
+insert into t (id,a) values (45,42);
+insert into t (id,a) values (45,43);
+insert into t (id,a) values (45,44);
+insert into t (id,a) values (45,45);
+insert into t (id,a) values (45,46);
+insert into t (id,a) values (45,47);
+insert into t (id,a) values (45,48);
+insert into t (id,a) values (45,49);
+insert into t (id,a) values (45,50);
+insert into t (id,a) values (45,51);
+insert into t (id,a) values (45,52);
+insert into t (id,a) values (45,53);
+insert into t (id,a) values (45,54);
+insert into t (id,a) values (45,55);
+insert into t (id,a) values (45,56);
+insert into t (id,a) values (45,57);
+insert into t (id,a) values (45,58);
+insert into t (id,a) values (45,59);
+insert into t (id,a) values (45,60);
+insert into t (id,a) values (45,61);
+insert into t (id,a) values (45,62);
+insert into t (id,a) values (45,63);
+insert into t (id,a) values (45,64);
+insert into t (id,a) values (45,65);
+insert into t (id,a) values (45,66);
+insert into t (id,a) values (45,67);
+insert into t (id,a) values (45,68);
+insert into t (id,a) values (45,69);
+insert into t (id,a) values (45,70);
+insert into t (id,a) values (45,71);
+insert into t (id,a) values (45,72);
+insert into t (id,a) values (45,73);
+insert into t (id,a) values (45,74);
+insert into t (id,a) values (45,75);
+insert into t (id,a) values (45,76);
+insert into t (id,a) values (45,77);
+insert into t (id,a) values (45,78);
+insert into t (id,a) values (45,79);
+insert into t (id,a) values (45,80);
+insert into t (id,a) values (45,81);
+insert into t (id,a) values (45,82);
+insert into t (id,a) values (45,83);
+insert into t (id,a) values (45,84);
+insert into t (id,a) values (45,85);
+insert into t (id,a) values (45,86);
+insert into t (id,a) values (45,87);
+insert into t (id,a) values (45,88);
+insert into t (id,a) values (45,89);
+insert into t (id,a) values (45,90);
+insert into t (id,a) values (45,91);
+insert into t (id,a) values (45,92);
+insert into t (id,a) values (45,93);
+insert into t (id,a) values (45,94);
+insert into t (id,a) values (45,95);
+insert into t (id,a) values (45,96);
+insert into t (id,a) values (45,97);
+insert into t (id,a) values (45,98);
+insert into t (id,a) values (45,99);
+insert into t (id,a) values (46,0);
+insert into t (id,a) values (46,1);
+insert into t (id,a) values (46,2);
+insert into t (id,a) values (46,3);
+insert into t (id,a) values (46,4);
+insert into t (id,a) values (46,5);
+insert into t (id,a) values (46,6);
+insert into t (id,a) values (46,7);
+insert into t (id,a) values (46,8);
+insert into t (id,a) values (46,9);
+insert into t (id,a) values (46,10);
+insert into t (id,a) values (46,11);
+insert into t (id,a) values (46,12);
+insert into t (id,a) values (46,13);
+insert into t (id,a) values (46,14);
+insert into t (id,a) values (46,15);
+insert into t (id,a) values (46,16);
+insert into t (id,a) values (46,17);
+insert into t (id,a) values (46,18);
+insert into t (id,a) values (46,19);
+insert into t (id,a) values (46,20);
+insert into t (id,a) values (46,21);
+insert into t (id,a) values (46,22);
+insert into t (id,a) values (46,23);
+insert into t (id,a) values (46,24);
+insert into t (id,a) values (46,25);
+insert into t (id,a) values (46,26);
+insert into t (id,a) values (46,27);
+insert into t (id,a) values (46,28);
+insert into t (id,a) values (46,29);
+insert into t (id,a) values (46,30);
+insert into t (id,a) values (46,31);
+insert into t (id,a) values (46,32);
+insert into t (id,a) values (46,33);
+insert into t (id,a) values (46,34);
+insert into t (id,a) values (46,35);
+insert into t (id,a) values (46,36);
+insert into t (id,a) values (46,37);
+insert into t (id,a) values (46,38);
+insert into t (id,a) values (46,39);
+insert into t (id,a) values (46,40);
+insert into t (id,a) values (46,41);
+insert into t (id,a) values (46,42);
+insert into t (id,a) values (46,43);
+insert into t (id,a) values (46,44);
+insert into t (id,a) values (46,45);
+insert into t (id,a) values (46,46);
+insert into t (id,a) values (46,47);
+insert into t (id,a) values (46,48);
+insert into t (id,a) values (46,49);
+insert into t (id,a) values (46,50);
+insert into t (id,a) values (46,51);
+insert into t (id,a) values (46,52);
+insert into t (id,a) values (46,53);
+insert into t (id,a) values (46,54);
+insert into t (id,a) values (46,55);
+insert into t (id,a) values (46,56);
+insert into t (id,a) values (46,57);
+insert into t (id,a) values (46,58);
+insert into t (id,a) values (46,59);
+insert into t (id,a) values (46,60);
+insert into t (id,a) values (46,61);
+insert into t (id,a) values (46,62);
+insert into t (id,a) values (46,63);
+insert into t (id,a) values (46,64);
+insert into t (id,a) values (46,65);
+insert into t (id,a) values (46,66);
+insert into t (id,a) values (46,67);
+insert into t (id,a) values (46,68);
+insert into t (id,a) values (46,69);
+insert into t (id,a) values (46,70);
+insert into t (id,a) values (46,71);
+insert into t (id,a) values (46,72);
+insert into t (id,a) values (46,73);
+insert into t (id,a) values (46,74);
+insert into t (id,a) values (46,75);
+insert into t (id,a) values (46,76);
+insert into t (id,a) values (46,77);
+insert into t (id,a) values (46,78);
+insert into t (id,a) values (46,79);
+insert into t (id,a) values (46,80);
+insert into t (id,a) values (46,81);
+insert into t (id,a) values (46,82);
+insert into t (id,a) values (46,83);
+insert into t (id,a) values (46,84);
+insert into t (id,a) values (46,85);
+insert into t (id,a) values (46,86);
+insert into t (id,a) values (46,87);
+insert into t (id,a) values (46,88);
+insert into t (id,a) values (46,89);
+insert into t (id,a) values (46,90);
+insert into t (id,a) values (46,91);
+insert into t (id,a) values (46,92);
+insert into t (id,a) values (46,93);
+insert into t (id,a) values (46,94);
+insert into t (id,a) values (46,95);
+insert into t (id,a) values (46,96);
+insert into t (id,a) values (46,97);
+insert into t (id,a) values (46,98);
+insert into t (id,a) values (46,99);
+insert into t (id,a) values (47,0);
+insert into t (id,a) values (47,1);
+insert into t (id,a) values (47,2);
+insert into t (id,a) values (47,3);
+insert into t (id,a) values (47,4);
+insert into t (id,a) values (47,5);
+insert into t (id,a) values (47,6);
+insert into t (id,a) values (47,7);
+insert into t (id,a) values (47,8);
+insert into t (id,a) values (47,9);
+insert into t (id,a) values (47,10);
+insert into t (id,a) values (47,11);
+insert into t (id,a) values (47,12);
+insert into t (id,a) values (47,13);
+insert into t (id,a) values (47,14);
+insert into t (id,a) values (47,15);
+insert into t (id,a) values (47,16);
+insert into t (id,a) values (47,17);
+insert into t (id,a) values (47,18);
+insert into t (id,a) values (47,19);
+insert into t (id,a) values (47,20);
+insert into t (id,a) values (47,21);
+insert into t (id,a) values (47,22);
+insert into t (id,a) values (47,23);
+insert into t (id,a) values (47,24);
+insert into t (id,a) values (47,25);
+insert into t (id,a) values (47,26);
+insert into t (id,a) values (47,27);
+insert into t (id,a) values (47,28);
+insert into t (id,a) values (47,29);
+insert into t (id,a) values (47,30);
+insert into t (id,a) values (47,31);
+insert into t (id,a) values (47,32);
+insert into t (id,a) values (47,33);
+insert into t (id,a) values (47,34);
+insert into t (id,a) values (47,35);
+insert into t (id,a) values (47,36);
+insert into t (id,a) values (47,37);
+insert into t (id,a) values (47,38);
+insert into t (id,a) values (47,39);
+insert into t (id,a) values (47,40);
+insert into t (id,a) values (47,41);
+insert into t (id,a) values (47,42);
+insert into t (id,a) values (47,43);
+insert into t (id,a) values (47,44);
+insert into t (id,a) values (47,45);
+insert into t (id,a) values (47,46);
+insert into t (id,a) values (47,47);
+insert into t (id,a) values (47,48);
+insert into t (id,a) values (47,49);
+insert into t (id,a) values (47,50);
+insert into t (id,a) values (47,51);
+insert into t (id,a) values (47,52);
+insert into t (id,a) values (47,53);
+insert into t (id,a) values (47,54);
+insert into t (id,a) values (47,55);
+insert into t (id,a) values (47,56);
+insert into t (id,a) values (47,57);
+insert into t (id,a) values (47,58);
+insert into t (id,a) values (47,59);
+insert into t (id,a) values (47,60);
+insert into t (id,a) values (47,61);
+insert into t (id,a) values (47,62);
+insert into t (id,a) values (47,63);
+insert into t (id,a) values (47,64);
+insert into t (id,a) values (47,65);
+insert into t (id,a) values (47,66);
+insert into t (id,a) values (47,67);
+insert into t (id,a) values (47,68);
+insert into t (id,a) values (47,69);
+insert into t (id,a) values (47,70);
+insert into t (id,a) values (47,71);
+insert into t (id,a) values (47,72);
+insert into t (id,a) values (47,73);
+insert into t (id,a) values (47,74);
+insert into t (id,a) values (47,75);
+insert into t (id,a) values (47,76);
+insert into t (id,a) values (47,77);
+insert into t (id,a) values (47,78);
+insert into t (id,a) values (47,79);
+insert into t (id,a) values (47,80);
+insert into t (id,a) values (47,81);
+insert into t (id,a) values (47,82);
+insert into t (id,a) values (47,83);
+insert into t (id,a) values (47,84);
+insert into t (id,a) values (47,85);
+insert into t (id,a) values (47,86);
+insert into t (id,a) values (47,87);
+insert into t (id,a) values (47,88);
+insert into t (id,a) values (47,89);
+insert into t (id,a) values (47,90);
+insert into t (id,a) values (47,91);
+insert into t (id,a) values (47,92);
+insert into t (id,a) values (47,93);
+insert into t (id,a) values (47,94);
+insert into t (id,a) values (47,95);
+insert into t (id,a) values (47,96);
+insert into t (id,a) values (47,97);
+insert into t (id,a) values (47,98);
+insert into t (id,a) values (47,99);
+insert into t (id,a) values (48,0);
+insert into t (id,a) values (48,1);
+insert into t (id,a) values (48,2);
+insert into t (id,a) values (48,3);
+insert into t (id,a) values (48,4);
+insert into t (id,a) values (48,5);
+insert into t (id,a) values (48,6);
+insert into t (id,a) values (48,7);
+insert into t (id,a) values (48,8);
+insert into t (id,a) values (48,9);
+insert into t (id,a) values (48,10);
+insert into t (id,a) values (48,11);
+insert into t (id,a) values (48,12);
+insert into t (id,a) values (48,13);
+insert into t (id,a) values (48,14);
+insert into t (id,a) values (48,15);
+insert into t (id,a) values (48,16);
+insert into t (id,a) values (48,17);
+insert into t (id,a) values (48,18);
+insert into t (id,a) values (48,19);
+insert into t (id,a) values (48,20);
+insert into t (id,a) values (48,21);
+insert into t (id,a) values (48,22);
+insert into t (id,a) values (48,23);
+insert into t (id,a) values (48,24);
+insert into t (id,a) values (48,25);
+insert into t (id,a) values (48,26);
+insert into t (id,a) values (48,27);
+insert into t (id,a) values (48,28);
+insert into t (id,a) values (48,29);
+insert into t (id,a) values (48,30);
+insert into t (id,a) values (48,31);
+insert into t (id,a) values (48,32);
+insert into t (id,a) values (48,33);
+insert into t (id,a) values (48,34);
+insert into t (id,a) values (48,35);
+insert into t (id,a) values (48,36);
+insert into t (id,a) values (48,37);
+insert into t (id,a) values (48,38);
+insert into t (id,a) values (48,39);
+insert into t (id,a) values (48,40);
+insert into t (id,a) values (48,41);
+insert into t (id,a) values (48,42);
+insert into t (id,a) values (48,43);
+insert into t (id,a) values (48,44);
+insert into t (id,a) values (48,45);
+insert into t (id,a) values (48,46);
+insert into t (id,a) values (48,47);
+insert into t (id,a) values (48,48);
+insert into t (id,a) values (48,49);
+insert into t (id,a) values (48,50);
+insert into t (id,a) values (48,51);
+insert into t (id,a) values (48,52);
+insert into t (id,a) values (48,53);
+insert into t (id,a) values (48,54);
+insert into t (id,a) values (48,55);
+insert into t (id,a) values (48,56);
+insert into t (id,a) values (48,57);
+insert into t (id,a) values (48,58);
+insert into t (id,a) values (48,59);
+insert into t (id,a) values (48,60);
+insert into t (id,a) values (48,61);
+insert into t (id,a) values (48,62);
+insert into t (id,a) values (48,63);
+insert into t (id,a) values (48,64);
+insert into t (id,a) values (48,65);
+insert into t (id,a) values (48,66);
+insert into t (id,a) values (48,67);
+insert into t (id,a) values (48,68);
+insert into t (id,a) values (48,69);
+insert into t (id,a) values (48,70);
+insert into t (id,a) values (48,71);
+insert into t (id,a) values (48,72);
+insert into t (id,a) values (48,73);
+insert into t (id,a) values (48,74);
+insert into t (id,a) values (48,75);
+insert into t (id,a) values (48,76);
+insert into t (id,a) values (48,77);
+insert into t (id,a) values (48,78);
+insert into t (id,a) values (48,79);
+insert into t (id,a) values (48,80);
+insert into t (id,a) values (48,81);
+insert into t (id,a) values (48,82);
+insert into t (id,a) values (48,83);
+insert into t (id,a) values (48,84);
+insert into t (id,a) values (48,85);
+insert into t (id,a) values (48,86);
+insert into t (id,a) values (48,87);
+insert into t (id,a) values (48,88);
+insert into t (id,a) values (48,89);
+insert into t (id,a) values (48,90);
+insert into t (id,a) values (48,91);
+insert into t (id,a) values (48,92);
+insert into t (id,a) values (48,93);
+insert into t (id,a) values (48,94);
+insert into t (id,a) values (48,95);
+insert into t (id,a) values (48,96);
+insert into t (id,a) values (48,97);
+insert into t (id,a) values (48,98);
+insert into t (id,a) values (48,99);
+insert into t (id,a) values (49,0);
+insert into t (id,a) values (49,1);
+insert into t (id,a) values (49,2);
+insert into t (id,a) values (49,3);
+insert into t (id,a) values (49,4);
+insert into t (id,a) values (49,5);
+insert into t (id,a) values (49,6);
+insert into t (id,a) values (49,7);
+insert into t (id,a) values (49,8);
+insert into t (id,a) values (49,9);
+insert into t (id,a) values (49,10);
+insert into t (id,a) values (49,11);
+insert into t (id,a) values (49,12);
+insert into t (id,a) values (49,13);
+insert into t (id,a) values (49,14);
+insert into t (id,a) values (49,15);
+insert into t (id,a) values (49,16);
+insert into t (id,a) values (49,17);
+insert into t (id,a) values (49,18);
+insert into t (id,a) values (49,19);
+insert into t (id,a) values (49,20);
+insert into t (id,a) values (49,21);
+insert into t (id,a) values (49,22);
+insert into t (id,a) values (49,23);
+insert into t (id,a) values (49,24);
+insert into t (id,a) values (49,25);
+insert into t (id,a) values (49,26);
+insert into t (id,a) values (49,27);
+insert into t (id,a) values (49,28);
+insert into t (id,a) values (49,29);
+insert into t (id,a) values (49,30);
+insert into t (id,a) values (49,31);
+insert into t (id,a) values (49,32);
+insert into t (id,a) values (49,33);
+insert into t (id,a) values (49,34);
+insert into t (id,a) values (49,35);
+insert into t (id,a) values (49,36);
+insert into t (id,a) values (49,37);
+insert into t (id,a) values (49,38);
+insert into t (id,a) values (49,39);
+insert into t (id,a) values (49,40);
+insert into t (id,a) values (49,41);
+insert into t (id,a) values (49,42);
+insert into t (id,a) values (49,43);
+insert into t (id,a) values (49,44);
+insert into t (id,a) values (49,45);
+insert into t (id,a) values (49,46);
+insert into t (id,a) values (49,47);
+insert into t (id,a) values (49,48);
+insert into t (id,a) values (49,49);
+insert into t (id,a) values (49,50);
+insert into t (id,a) values (49,51);
+insert into t (id,a) values (49,52);
+insert into t (id,a) values (49,53);
+insert into t (id,a) values (49,54);
+insert into t (id,a) values (49,55);
+insert into t (id,a) values (49,56);
+insert into t (id,a) values (49,57);
+insert into t (id,a) values (49,58);
+insert into t (id,a) values (49,59);
+insert into t (id,a) values (49,60);
+insert into t (id,a) values (49,61);
+insert into t (id,a) values (49,62);
+insert into t (id,a) values (49,63);
+insert into t (id,a) values (49,64);
+insert into t (id,a) values (49,65);
+insert into t (id,a) values (49,66);
+insert into t (id,a) values (49,67);
+insert into t (id,a) values (49,68);
+insert into t (id,a) values (49,69);
+insert into t (id,a) values (49,70);
+insert into t (id,a) values (49,71);
+insert into t (id,a) values (49,72);
+insert into t (id,a) values (49,73);
+insert into t (id,a) values (49,74);
+insert into t (id,a) values (49,75);
+insert into t (id,a) values (49,76);
+insert into t (id,a) values (49,77);
+insert into t (id,a) values (49,78);
+insert into t (id,a) values (49,79);
+insert into t (id,a) values (49,80);
+insert into t (id,a) values (49,81);
+insert into t (id,a) values (49,82);
+insert into t (id,a) values (49,83);
+insert into t (id,a) values (49,84);
+insert into t (id,a) values (49,85);
+insert into t (id,a) values (49,86);
+insert into t (id,a) values (49,87);
+insert into t (id,a) values (49,88);
+insert into t (id,a) values (49,89);
+insert into t (id,a) values (49,90);
+insert into t (id,a) values (49,91);
+insert into t (id,a) values (49,92);
+insert into t (id,a) values (49,93);
+insert into t (id,a) values (49,94);
+insert into t (id,a) values (49,95);
+insert into t (id,a) values (49,96);
+insert into t (id,a) values (49,97);
+insert into t (id,a) values (49,98);
+insert into t (id,a) values (49,99);
+insert into t (id,a) values (50,0);
+insert into t (id,a) values (50,1);
+insert into t (id,a) values (50,2);
+insert into t (id,a) values (50,3);
+insert into t (id,a) values (50,4);
+insert into t (id,a) values (50,5);
+insert into t (id,a) values (50,6);
+insert into t (id,a) values (50,7);
+insert into t (id,a) values (50,8);
+insert into t (id,a) values (50,9);
+insert into t (id,a) values (50,10);
+insert into t (id,a) values (50,11);
+insert into t (id,a) values (50,12);
+insert into t (id,a) values (50,13);
+insert into t (id,a) values (50,14);
+insert into t (id,a) values (50,15);
+insert into t (id,a) values (50,16);
+insert into t (id,a) values (50,17);
+insert into t (id,a) values (50,18);
+insert into t (id,a) values (50,19);
+insert into t (id,a) values (50,20);
+insert into t (id,a) values (50,21);
+insert into t (id,a) values (50,22);
+insert into t (id,a) values (50,23);
+insert into t (id,a) values (50,24);
+insert into t (id,a) values (50,25);
+insert into t (id,a) values (50,26);
+insert into t (id,a) values (50,27);
+insert into t (id,a) values (50,28);
+insert into t (id,a) values (50,29);
+insert into t (id,a) values (50,30);
+insert into t (id,a) values (50,31);
+insert into t (id,a) values (50,32);
+insert into t (id,a) values (50,33);
+insert into t (id,a) values (50,34);
+insert into t (id,a) values (50,35);
+insert into t (id,a) values (50,36);
+insert into t (id,a) values (50,37);
+insert into t (id,a) values (50,38);
+insert into t (id,a) values (50,39);
+insert into t (id,a) values (50,40);
+insert into t (id,a) values (50,41);
+insert into t (id,a) values (50,42);
+insert into t (id,a) values (50,43);
+insert into t (id,a) values (50,44);
+insert into t (id,a) values (50,45);
+insert into t (id,a) values (50,46);
+insert into t (id,a) values (50,47);
+insert into t (id,a) values (50,48);
+insert into t (id,a) values (50,49);
+insert into t (id,a) values (50,50);
+insert into t (id,a) values (50,51);
+insert into t (id,a) values (50,52);
+insert into t (id,a) values (50,53);
+insert into t (id,a) values (50,54);
+insert into t (id,a) values (50,55);
+insert into t (id,a) values (50,56);
+insert into t (id,a) values (50,57);
+insert into t (id,a) values (50,58);
+insert into t (id,a) values (50,59);
+insert into t (id,a) values (50,60);
+insert into t (id,a) values (50,61);
+insert into t (id,a) values (50,62);
+insert into t (id,a) values (50,63);
+insert into t (id,a) values (50,64);
+insert into t (id,a) values (50,65);
+insert into t (id,a) values (50,66);
+insert into t (id,a) values (50,67);
+insert into t (id,a) values (50,68);
+insert into t (id,a) values (50,69);
+insert into t (id,a) values (50,70);
+insert into t (id,a) values (50,71);
+insert into t (id,a) values (50,72);
+insert into t (id,a) values (50,73);
+insert into t (id,a) values (50,74);
+insert into t (id,a) values (50,75);
+insert into t (id,a) values (50,76);
+insert into t (id,a) values (50,77);
+insert into t (id,a) values (50,78);
+insert into t (id,a) values (50,79);
+insert into t (id,a) values (50,80);
+insert into t (id,a) values (50,81);
+insert into t (id,a) values (50,82);
+insert into t (id,a) values (50,83);
+insert into t (id,a) values (50,84);
+insert into t (id,a) values (50,85);
+insert into t (id,a) values (50,86);
+insert into t (id,a) values (50,87);
+insert into t (id,a) values (50,88);
+insert into t (id,a) values (50,89);
+insert into t (id,a) values (50,90);
+insert into t (id,a) values (50,91);
+insert into t (id,a) values (50,92);
+insert into t (id,a) values (50,93);
+insert into t (id,a) values (50,94);
+insert into t (id,a) values (50,95);
+insert into t (id,a) values (50,96);
+insert into t (id,a) values (50,97);
+insert into t (id,a) values (50,98);
+insert into t (id,a) values (50,99);
+insert into t (id,a) values (51,0);
+insert into t (id,a) values (51,1);
+insert into t (id,a) values (51,2);
+insert into t (id,a) values (51,3);
+insert into t (id,a) values (51,4);
+insert into t (id,a) values (51,5);
+insert into t (id,a) values (51,6);
+insert into t (id,a) values (51,7);
+insert into t (id,a) values (51,8);
+insert into t (id,a) values (51,9);
+insert into t (id,a) values (51,10);
+insert into t (id,a) values (51,11);
+insert into t (id,a) values (51,12);
+insert into t (id,a) values (51,13);
+insert into t (id,a) values (51,14);
+insert into t (id,a) values (51,15);
+insert into t (id,a) values (51,16);
+insert into t (id,a) values (51,17);
+insert into t (id,a) values (51,18);
+insert into t (id,a) values (51,19);
+insert into t (id,a) values (51,20);
+insert into t (id,a) values (51,21);
+insert into t (id,a) values (51,22);
+insert into t (id,a) values (51,23);
+insert into t (id,a) values (51,24);
+insert into t (id,a) values (51,25);
+insert into t (id,a) values (51,26);
+insert into t (id,a) values (51,27);
+insert into t (id,a) values (51,28);
+insert into t (id,a) values (51,29);
+insert into t (id,a) values (51,30);
+insert into t (id,a) values (51,31);
+insert into t (id,a) values (51,32);
+insert into t (id,a) values (51,33);
+insert into t (id,a) values (51,34);
+insert into t (id,a) values (51,35);
+insert into t (id,a) values (51,36);
+insert into t (id,a) values (51,37);
+insert into t (id,a) values (51,38);
+insert into t (id,a) values (51,39);
+insert into t (id,a) values (51,40);
+insert into t (id,a) values (51,41);
+insert into t (id,a) values (51,42);
+insert into t (id,a) values (51,43);
+insert into t (id,a) values (51,44);
+insert into t (id,a) values (51,45);
+insert into t (id,a) values (51,46);
+insert into t (id,a) values (51,47);
+insert into t (id,a) values (51,48);
+insert into t (id,a) values (51,49);
+insert into t (id,a) values (51,50);
+insert into t (id,a) values (51,51);
+insert into t (id,a) values (51,52);
+insert into t (id,a) values (51,53);
+insert into t (id,a) values (51,54);
+insert into t (id,a) values (51,55);
+insert into t (id,a) values (51,56);
+insert into t (id,a) values (51,57);
+insert into t (id,a) values (51,58);
+insert into t (id,a) values (51,59);
+insert into t (id,a) values (51,60);
+insert into t (id,a) values (51,61);
+insert into t (id,a) values (51,62);
+insert into t (id,a) values (51,63);
+insert into t (id,a) values (51,64);
+insert into t (id,a) values (51,65);
+insert into t (id,a) values (51,66);
+insert into t (id,a) values (51,67);
+insert into t (id,a) values (51,68);
+insert into t (id,a) values (51,69);
+insert into t (id,a) values (51,70);
+insert into t (id,a) values (51,71);
+insert into t (id,a) values (51,72);
+insert into t (id,a) values (51,73);
+insert into t (id,a) values (51,74);
+insert into t (id,a) values (51,75);
+insert into t (id,a) values (51,76);
+insert into t (id,a) values (51,77);
+insert into t (id,a) values (51,78);
+insert into t (id,a) values (51,79);
+insert into t (id,a) values (51,80);
+insert into t (id,a) values (51,81);
+insert into t (id,a) values (51,82);
+insert into t (id,a) values (51,83);
+insert into t (id,a) values (51,84);
+insert into t (id,a) values (51,85);
+insert into t (id,a) values (51,86);
+insert into t (id,a) values (51,87);
+insert into t (id,a) values (51,88);
+insert into t (id,a) values (51,89);
+insert into t (id,a) values (51,90);
+insert into t (id,a) values (51,91);
+insert into t (id,a) values (51,92);
+insert into t (id,a) values (51,93);
+insert into t (id,a) values (51,94);
+insert into t (id,a) values (51,95);
+insert into t (id,a) values (51,96);
+insert into t (id,a) values (51,97);
+insert into t (id,a) values (51,98);
+insert into t (id,a) values (51,99);
+insert into t (id,a) values (52,0);
+insert into t (id,a) values (52,1);
+insert into t (id,a) values (52,2);
+insert into t (id,a) values (52,3);
+insert into t (id,a) values (52,4);
+insert into t (id,a) values (52,5);
+insert into t (id,a) values (52,6);
+insert into t (id,a) values (52,7);
+insert into t (id,a) values (52,8);
+insert into t (id,a) values (52,9);
+insert into t (id,a) values (52,10);
+insert into t (id,a) values (52,11);
+insert into t (id,a) values (52,12);
+insert into t (id,a) values (52,13);
+insert into t (id,a) values (52,14);
+insert into t (id,a) values (52,15);
+insert into t (id,a) values (52,16);
+insert into t (id,a) values (52,17);
+insert into t (id,a) values (52,18);
+insert into t (id,a) values (52,19);
+insert into t (id,a) values (52,20);
+insert into t (id,a) values (52,21);
+insert into t (id,a) values (52,22);
+insert into t (id,a) values (52,23);
+insert into t (id,a) values (52,24);
+insert into t (id,a) values (52,25);
+insert into t (id,a) values (52,26);
+insert into t (id,a) values (52,27);
+insert into t (id,a) values (52,28);
+insert into t (id,a) values (52,29);
+insert into t (id,a) values (52,30);
+insert into t (id,a) values (52,31);
+insert into t (id,a) values (52,32);
+insert into t (id,a) values (52,33);
+insert into t (id,a) values (52,34);
+insert into t (id,a) values (52,35);
+insert into t (id,a) values (52,36);
+insert into t (id,a) values (52,37);
+insert into t (id,a) values (52,38);
+insert into t (id,a) values (52,39);
+insert into t (id,a) values (52,40);
+insert into t (id,a) values (52,41);
+insert into t (id,a) values (52,42);
+insert into t (id,a) values (52,43);
+insert into t (id,a) values (52,44);
+insert into t (id,a) values (52,45);
+insert into t (id,a) values (52,46);
+insert into t (id,a) values (52,47);
+insert into t (id,a) values (52,48);
+insert into t (id,a) values (52,49);
+insert into t (id,a) values (52,50);
+insert into t (id,a) values (52,51);
+insert into t (id,a) values (52,52);
+insert into t (id,a) values (52,53);
+insert into t (id,a) values (52,54);
+insert into t (id,a) values (52,55);
+insert into t (id,a) values (52,56);
+insert into t (id,a) values (52,57);
+insert into t (id,a) values (52,58);
+insert into t (id,a) values (52,59);
+insert into t (id,a) values (52,60);
+insert into t (id,a) values (52,61);
+insert into t (id,a) values (52,62);
+insert into t (id,a) values (52,63);
+insert into t (id,a) values (52,64);
+insert into t (id,a) values (52,65);
+insert into t (id,a) values (52,66);
+insert into t (id,a) values (52,67);
+insert into t (id,a) values (52,68);
+insert into t (id,a) values (52,69);
+insert into t (id,a) values (52,70);
+insert into t (id,a) values (52,71);
+insert into t (id,a) values (52,72);
+insert into t (id,a) values (52,73);
+insert into t (id,a) values (52,74);
+insert into t (id,a) values (52,75);
+insert into t (id,a) values (52,76);
+insert into t (id,a) values (52,77);
+insert into t (id,a) values (52,78);
+insert into t (id,a) values (52,79);
+insert into t (id,a) values (52,80);
+insert into t (id,a) values (52,81);
+insert into t (id,a) values (52,82);
+insert into t (id,a) values (52,83);
+insert into t (id,a) values (52,84);
+insert into t (id,a) values (52,85);
+insert into t (id,a) values (52,86);
+insert into t (id,a) values (52,87);
+insert into t (id,a) values (52,88);
+insert into t (id,a) values (52,89);
+insert into t (id,a) values (52,90);
+insert into t (id,a) values (52,91);
+insert into t (id,a) values (52,92);
+insert into t (id,a) values (52,93);
+insert into t (id,a) values (52,94);
+insert into t (id,a) values (52,95);
+insert into t (id,a) values (52,96);
+insert into t (id,a) values (52,97);
+insert into t (id,a) values (52,98);
+insert into t (id,a) values (52,99);
+insert into t (id,a) values (53,0);
+insert into t (id,a) values (53,1);
+insert into t (id,a) values (53,2);
+insert into t (id,a) values (53,3);
+insert into t (id,a) values (53,4);
+insert into t (id,a) values (53,5);
+insert into t (id,a) values (53,6);
+insert into t (id,a) values (53,7);
+insert into t (id,a) values (53,8);
+insert into t (id,a) values (53,9);
+insert into t (id,a) values (53,10);
+insert into t (id,a) values (53,11);
+insert into t (id,a) values (53,12);
+insert into t (id,a) values (53,13);
+insert into t (id,a) values (53,14);
+insert into t (id,a) values (53,15);
+insert into t (id,a) values (53,16);
+insert into t (id,a) values (53,17);
+insert into t (id,a) values (53,18);
+insert into t (id,a) values (53,19);
+insert into t (id,a) values (53,20);
+insert into t (id,a) values (53,21);
+insert into t (id,a) values (53,22);
+insert into t (id,a) values (53,23);
+insert into t (id,a) values (53,24);
+insert into t (id,a) values (53,25);
+insert into t (id,a) values (53,26);
+insert into t (id,a) values (53,27);
+insert into t (id,a) values (53,28);
+insert into t (id,a) values (53,29);
+insert into t (id,a) values (53,30);
+insert into t (id,a) values (53,31);
+insert into t (id,a) values (53,32);
+insert into t (id,a) values (53,33);
+insert into t (id,a) values (53,34);
+insert into t (id,a) values (53,35);
+insert into t (id,a) values (53,36);
+insert into t (id,a) values (53,37);
+insert into t (id,a) values (53,38);
+insert into t (id,a) values (53,39);
+insert into t (id,a) values (53,40);
+insert into t (id,a) values (53,41);
+insert into t (id,a) values (53,42);
+insert into t (id,a) values (53,43);
+insert into t (id,a) values (53,44);
+insert into t (id,a) values (53,45);
+insert into t (id,a) values (53,46);
+insert into t (id,a) values (53,47);
+insert into t (id,a) values (53,48);
+insert into t (id,a) values (53,49);
+insert into t (id,a) values (53,50);
+insert into t (id,a) values (53,51);
+insert into t (id,a) values (53,52);
+insert into t (id,a) values (53,53);
+insert into t (id,a) values (53,54);
+insert into t (id,a) values (53,55);
+insert into t (id,a) values (53,56);
+insert into t (id,a) values (53,57);
+insert into t (id,a) values (53,58);
+insert into t (id,a) values (53,59);
+insert into t (id,a) values (53,60);
+insert into t (id,a) values (53,61);
+insert into t (id,a) values (53,62);
+insert into t (id,a) values (53,63);
+insert into t (id,a) values (53,64);
+insert into t (id,a) values (53,65);
+insert into t (id,a) values (53,66);
+insert into t (id,a) values (53,67);
+insert into t (id,a) values (53,68);
+insert into t (id,a) values (53,69);
+insert into t (id,a) values (53,70);
+insert into t (id,a) values (53,71);
+insert into t (id,a) values (53,72);
+insert into t (id,a) values (53,73);
+insert into t (id,a) values (53,74);
+insert into t (id,a) values (53,75);
+insert into t (id,a) values (53,76);
+insert into t (id,a) values (53,77);
+insert into t (id,a) values (53,78);
+insert into t (id,a) values (53,79);
+insert into t (id,a) values (53,80);
+insert into t (id,a) values (53,81);
+insert into t (id,a) values (53,82);
+insert into t (id,a) values (53,83);
+insert into t (id,a) values (53,84);
+insert into t (id,a) values (53,85);
+insert into t (id,a) values (53,86);
+insert into t (id,a) values (53,87);
+insert into t (id,a) values (53,88);
+insert into t (id,a) values (53,89);
+insert into t (id,a) values (53,90);
+insert into t (id,a) values (53,91);
+insert into t (id,a) values (53,92);
+insert into t (id,a) values (53,93);
+insert into t (id,a) values (53,94);
+insert into t (id,a) values (53,95);
+insert into t (id,a) values (53,96);
+insert into t (id,a) values (53,97);
+insert into t (id,a) values (53,98);
+insert into t (id,a) values (53,99);
+insert into t (id,a) values (54,0);
+insert into t (id,a) values (54,1);
+insert into t (id,a) values (54,2);
+insert into t (id,a) values (54,3);
+insert into t (id,a) values (54,4);
+insert into t (id,a) values (54,5);
+insert into t (id,a) values (54,6);
+insert into t (id,a) values (54,7);
+insert into t (id,a) values (54,8);
+insert into t (id,a) values (54,9);
+insert into t (id,a) values (54,10);
+insert into t (id,a) values (54,11);
+insert into t (id,a) values (54,12);
+insert into t (id,a) values (54,13);
+insert into t (id,a) values (54,14);
+insert into t (id,a) values (54,15);
+insert into t (id,a) values (54,16);
+insert into t (id,a) values (54,17);
+insert into t (id,a) values (54,18);
+insert into t (id,a) values (54,19);
+insert into t (id,a) values (54,20);
+insert into t (id,a) values (54,21);
+insert into t (id,a) values (54,22);
+insert into t (id,a) values (54,23);
+insert into t (id,a) values (54,24);
+insert into t (id,a) values (54,25);
+insert into t (id,a) values (54,26);
+insert into t (id,a) values (54,27);
+insert into t (id,a) values (54,28);
+insert into t (id,a) values (54,29);
+insert into t (id,a) values (54,30);
+insert into t (id,a) values (54,31);
+insert into t (id,a) values (54,32);
+insert into t (id,a) values (54,33);
+insert into t (id,a) values (54,34);
+insert into t (id,a) values (54,35);
+insert into t (id,a) values (54,36);
+insert into t (id,a) values (54,37);
+insert into t (id,a) values (54,38);
+insert into t (id,a) values (54,39);
+insert into t (id,a) values (54,40);
+insert into t (id,a) values (54,41);
+insert into t (id,a) values (54,42);
+insert into t (id,a) values (54,43);
+insert into t (id,a) values (54,44);
+insert into t (id,a) values (54,45);
+insert into t (id,a) values (54,46);
+insert into t (id,a) values (54,47);
+insert into t (id,a) values (54,48);
+insert into t (id,a) values (54,49);
+insert into t (id,a) values (54,50);
+insert into t (id,a) values (54,51);
+insert into t (id,a) values (54,52);
+insert into t (id,a) values (54,53);
+insert into t (id,a) values (54,54);
+insert into t (id,a) values (54,55);
+insert into t (id,a) values (54,56);
+insert into t (id,a) values (54,57);
+insert into t (id,a) values (54,58);
+insert into t (id,a) values (54,59);
+insert into t (id,a) values (54,60);
+insert into t (id,a) values (54,61);
+insert into t (id,a) values (54,62);
+insert into t (id,a) values (54,63);
+insert into t (id,a) values (54,64);
+insert into t (id,a) values (54,65);
+insert into t (id,a) values (54,66);
+insert into t (id,a) values (54,67);
+insert into t (id,a) values (54,68);
+insert into t (id,a) values (54,69);
+insert into t (id,a) values (54,70);
+insert into t (id,a) values (54,71);
+insert into t (id,a) values (54,72);
+insert into t (id,a) values (54,73);
+insert into t (id,a) values (54,74);
+insert into t (id,a) values (54,75);
+insert into t (id,a) values (54,76);
+insert into t (id,a) values (54,77);
+insert into t (id,a) values (54,78);
+insert into t (id,a) values (54,79);
+insert into t (id,a) values (54,80);
+insert into t (id,a) values (54,81);
+insert into t (id,a) values (54,82);
+insert into t (id,a) values (54,83);
+insert into t (id,a) values (54,84);
+insert into t (id,a) values (54,85);
+insert into t (id,a) values (54,86);
+insert into t (id,a) values (54,87);
+insert into t (id,a) values (54,88);
+insert into t (id,a) values (54,89);
+insert into t (id,a) values (54,90);
+insert into t (id,a) values (54,91);
+insert into t (id,a) values (54,92);
+insert into t (id,a) values (54,93);
+insert into t (id,a) values (54,94);
+insert into t (id,a) values (54,95);
+insert into t (id,a) values (54,96);
+insert into t (id,a) values (54,97);
+insert into t (id,a) values (54,98);
+insert into t (id,a) values (54,99);
+insert into t (id,a) values (55,0);
+insert into t (id,a) values (55,1);
+insert into t (id,a) values (55,2);
+insert into t (id,a) values (55,3);
+insert into t (id,a) values (55,4);
+insert into t (id,a) values (55,5);
+insert into t (id,a) values (55,6);
+insert into t (id,a) values (55,7);
+insert into t (id,a) values (55,8);
+insert into t (id,a) values (55,9);
+insert into t (id,a) values (55,10);
+insert into t (id,a) values (55,11);
+insert into t (id,a) values (55,12);
+insert into t (id,a) values (55,13);
+insert into t (id,a) values (55,14);
+insert into t (id,a) values (55,15);
+insert into t (id,a) values (55,16);
+insert into t (id,a) values (55,17);
+insert into t (id,a) values (55,18);
+insert into t (id,a) values (55,19);
+insert into t (id,a) values (55,20);
+insert into t (id,a) values (55,21);
+insert into t (id,a) values (55,22);
+insert into t (id,a) values (55,23);
+insert into t (id,a) values (55,24);
+insert into t (id,a) values (55,25);
+insert into t (id,a) values (55,26);
+insert into t (id,a) values (55,27);
+insert into t (id,a) values (55,28);
+insert into t (id,a) values (55,29);
+insert into t (id,a) values (55,30);
+insert into t (id,a) values (55,31);
+insert into t (id,a) values (55,32);
+insert into t (id,a) values (55,33);
+insert into t (id,a) values (55,34);
+insert into t (id,a) values (55,35);
+insert into t (id,a) values (55,36);
+insert into t (id,a) values (55,37);
+insert into t (id,a) values (55,38);
+insert into t (id,a) values (55,39);
+insert into t (id,a) values (55,40);
+insert into t (id,a) values (55,41);
+insert into t (id,a) values (55,42);
+insert into t (id,a) values (55,43);
+insert into t (id,a) values (55,44);
+insert into t (id,a) values (55,45);
+insert into t (id,a) values (55,46);
+insert into t (id,a) values (55,47);
+insert into t (id,a) values (55,48);
+insert into t (id,a) values (55,49);
+insert into t (id,a) values (55,50);
+insert into t (id,a) values (55,51);
+insert into t (id,a) values (55,52);
+insert into t (id,a) values (55,53);
+insert into t (id,a) values (55,54);
+insert into t (id,a) values (55,55);
+insert into t (id,a) values (55,56);
+insert into t (id,a) values (55,57);
+insert into t (id,a) values (55,58);
+insert into t (id,a) values (55,59);
+insert into t (id,a) values (55,60);
+insert into t (id,a) values (55,61);
+insert into t (id,a) values (55,62);
+insert into t (id,a) values (55,63);
+insert into t (id,a) values (55,64);
+insert into t (id,a) values (55,65);
+insert into t (id,a) values (55,66);
+insert into t (id,a) values (55,67);
+insert into t (id,a) values (55,68);
+insert into t (id,a) values (55,69);
+insert into t (id,a) values (55,70);
+insert into t (id,a) values (55,71);
+insert into t (id,a) values (55,72);
+insert into t (id,a) values (55,73);
+insert into t (id,a) values (55,74);
+insert into t (id,a) values (55,75);
+insert into t (id,a) values (55,76);
+insert into t (id,a) values (55,77);
+insert into t (id,a) values (55,78);
+insert into t (id,a) values (55,79);
+insert into t (id,a) values (55,80);
+insert into t (id,a) values (55,81);
+insert into t (id,a) values (55,82);
+insert into t (id,a) values (55,83);
+insert into t (id,a) values (55,84);
+insert into t (id,a) values (55,85);
+insert into t (id,a) values (55,86);
+insert into t (id,a) values (55,87);
+insert into t (id,a) values (55,88);
+insert into t (id,a) values (55,89);
+insert into t (id,a) values (55,90);
+insert into t (id,a) values (55,91);
+insert into t (id,a) values (55,92);
+insert into t (id,a) values (55,93);
+insert into t (id,a) values (55,94);
+insert into t (id,a) values (55,95);
+insert into t (id,a) values (55,96);
+insert into t (id,a) values (55,97);
+insert into t (id,a) values (55,98);
+insert into t (id,a) values (55,99);
+insert into t (id,a) values (56,0);
+insert into t (id,a) values (56,1);
+insert into t (id,a) values (56,2);
+insert into t (id,a) values (56,3);
+insert into t (id,a) values (56,4);
+insert into t (id,a) values (56,5);
+insert into t (id,a) values (56,6);
+insert into t (id,a) values (56,7);
+insert into t (id,a) values (56,8);
+insert into t (id,a) values (56,9);
+insert into t (id,a) values (56,10);
+insert into t (id,a) values (56,11);
+insert into t (id,a) values (56,12);
+insert into t (id,a) values (56,13);
+insert into t (id,a) values (56,14);
+insert into t (id,a) values (56,15);
+insert into t (id,a) values (56,16);
+insert into t (id,a) values (56,17);
+insert into t (id,a) values (56,18);
+insert into t (id,a) values (56,19);
+insert into t (id,a) values (56,20);
+insert into t (id,a) values (56,21);
+insert into t (id,a) values (56,22);
+insert into t (id,a) values (56,23);
+insert into t (id,a) values (56,24);
+insert into t (id,a) values (56,25);
+insert into t (id,a) values (56,26);
+insert into t (id,a) values (56,27);
+insert into t (id,a) values (56,28);
+insert into t (id,a) values (56,29);
+insert into t (id,a) values (56,30);
+insert into t (id,a) values (56,31);
+insert into t (id,a) values (56,32);
+insert into t (id,a) values (56,33);
+insert into t (id,a) values (56,34);
+insert into t (id,a) values (56,35);
+insert into t (id,a) values (56,36);
+insert into t (id,a) values (56,37);
+insert into t (id,a) values (56,38);
+insert into t (id,a) values (56,39);
+insert into t (id,a) values (56,40);
+insert into t (id,a) values (56,41);
+insert into t (id,a) values (56,42);
+insert into t (id,a) values (56,43);
+insert into t (id,a) values (56,44);
+insert into t (id,a) values (56,45);
+insert into t (id,a) values (56,46);
+insert into t (id,a) values (56,47);
+insert into t (id,a) values (56,48);
+insert into t (id,a) values (56,49);
+insert into t (id,a) values (56,50);
+insert into t (id,a) values (56,51);
+insert into t (id,a) values (56,52);
+insert into t (id,a) values (56,53);
+insert into t (id,a) values (56,54);
+insert into t (id,a) values (56,55);
+insert into t (id,a) values (56,56);
+insert into t (id,a) values (56,57);
+insert into t (id,a) values (56,58);
+insert into t (id,a) values (56,59);
+insert into t (id,a) values (56,60);
+insert into t (id,a) values (56,61);
+insert into t (id,a) values (56,62);
+insert into t (id,a) values (56,63);
+insert into t (id,a) values (56,64);
+insert into t (id,a) values (56,65);
+insert into t (id,a) values (56,66);
+insert into t (id,a) values (56,67);
+insert into t (id,a) values (56,68);
+insert into t (id,a) values (56,69);
+insert into t (id,a) values (56,70);
+insert into t (id,a) values (56,71);
+insert into t (id,a) values (56,72);
+insert into t (id,a) values (56,73);
+insert into t (id,a) values (56,74);
+insert into t (id,a) values (56,75);
+insert into t (id,a) values (56,76);
+insert into t (id,a) values (56,77);
+insert into t (id,a) values (56,78);
+insert into t (id,a) values (56,79);
+insert into t (id,a) values (56,80);
+insert into t (id,a) values (56,81);
+insert into t (id,a) values (56,82);
+insert into t (id,a) values (56,83);
+insert into t (id,a) values (56,84);
+insert into t (id,a) values (56,85);
+insert into t (id,a) values (56,86);
+insert into t (id,a) values (56,87);
+insert into t (id,a) values (56,88);
+insert into t (id,a) values (56,89);
+insert into t (id,a) values (56,90);
+insert into t (id,a) values (56,91);
+insert into t (id,a) values (56,92);
+insert into t (id,a) values (56,93);
+insert into t (id,a) values (56,94);
+insert into t (id,a) values (56,95);
+insert into t (id,a) values (56,96);
+insert into t (id,a) values (56,97);
+insert into t (id,a) values (56,98);
+insert into t (id,a) values (56,99);
+insert into t (id,a) values (57,0);
+insert into t (id,a) values (57,1);
+insert into t (id,a) values (57,2);
+insert into t (id,a) values (57,3);
+insert into t (id,a) values (57,4);
+insert into t (id,a) values (57,5);
+insert into t (id,a) values (57,6);
+insert into t (id,a) values (57,7);
+insert into t (id,a) values (57,8);
+insert into t (id,a) values (57,9);
+insert into t (id,a) values (57,10);
+insert into t (id,a) values (57,11);
+insert into t (id,a) values (57,12);
+insert into t (id,a) values (57,13);
+insert into t (id,a) values (57,14);
+insert into t (id,a) values (57,15);
+insert into t (id,a) values (57,16);
+insert into t (id,a) values (57,17);
+insert into t (id,a) values (57,18);
+insert into t (id,a) values (57,19);
+insert into t (id,a) values (57,20);
+insert into t (id,a) values (57,21);
+insert into t (id,a) values (57,22);
+insert into t (id,a) values (57,23);
+insert into t (id,a) values (57,24);
+insert into t (id,a) values (57,25);
+insert into t (id,a) values (57,26);
+insert into t (id,a) values (57,27);
+insert into t (id,a) values (57,28);
+insert into t (id,a) values (57,29);
+insert into t (id,a) values (57,30);
+insert into t (id,a) values (57,31);
+insert into t (id,a) values (57,32);
+insert into t (id,a) values (57,33);
+insert into t (id,a) values (57,34);
+insert into t (id,a) values (57,35);
+insert into t (id,a) values (57,36);
+insert into t (id,a) values (57,37);
+insert into t (id,a) values (57,38);
+insert into t (id,a) values (57,39);
+insert into t (id,a) values (57,40);
+insert into t (id,a) values (57,41);
+insert into t (id,a) values (57,42);
+insert into t (id,a) values (57,43);
+insert into t (id,a) values (57,44);
+insert into t (id,a) values (57,45);
+insert into t (id,a) values (57,46);
+insert into t (id,a) values (57,47);
+insert into t (id,a) values (57,48);
+insert into t (id,a) values (57,49);
+insert into t (id,a) values (57,50);
+insert into t (id,a) values (57,51);
+insert into t (id,a) values (57,52);
+insert into t (id,a) values (57,53);
+insert into t (id,a) values (57,54);
+insert into t (id,a) values (57,55);
+insert into t (id,a) values (57,56);
+insert into t (id,a) values (57,57);
+insert into t (id,a) values (57,58);
+insert into t (id,a) values (57,59);
+insert into t (id,a) values (57,60);
+insert into t (id,a) values (57,61);
+insert into t (id,a) values (57,62);
+insert into t (id,a) values (57,63);
+insert into t (id,a) values (57,64);
+insert into t (id,a) values (57,65);
+insert into t (id,a) values (57,66);
+insert into t (id,a) values (57,67);
+insert into t (id,a) values (57,68);
+insert into t (id,a) values (57,69);
+insert into t (id,a) values (57,70);
+insert into t (id,a) values (57,71);
+insert into t (id,a) values (57,72);
+insert into t (id,a) values (57,73);
+insert into t (id,a) values (57,74);
+insert into t (id,a) values (57,75);
+insert into t (id,a) values (57,76);
+insert into t (id,a) values (57,77);
+insert into t (id,a) values (57,78);
+insert into t (id,a) values (57,79);
+insert into t (id,a) values (57,80);
+insert into t (id,a) values (57,81);
+insert into t (id,a) values (57,82);
+insert into t (id,a) values (57,83);
+insert into t (id,a) values (57,84);
+insert into t (id,a) values (57,85);
+insert into t (id,a) values (57,86);
+insert into t (id,a) values (57,87);
+insert into t (id,a) values (57,88);
+insert into t (id,a) values (57,89);
+insert into t (id,a) values (57,90);
+insert into t (id,a) values (57,91);
+insert into t (id,a) values (57,92);
+insert into t (id,a) values (57,93);
+insert into t (id,a) values (57,94);
+insert into t (id,a) values (57,95);
+insert into t (id,a) values (57,96);
+insert into t (id,a) values (57,97);
+insert into t (id,a) values (57,98);
+insert into t (id,a) values (57,99);
+insert into t (id,a) values (58,0);
+insert into t (id,a) values (58,1);
+insert into t (id,a) values (58,2);
+insert into t (id,a) values (58,3);
+insert into t (id,a) values (58,4);
+insert into t (id,a) values (58,5);
+insert into t (id,a) values (58,6);
+insert into t (id,a) values (58,7);
+insert into t (id,a) values (58,8);
+insert into t (id,a) values (58,9);
+insert into t (id,a) values (58,10);
+insert into t (id,a) values (58,11);
+insert into t (id,a) values (58,12);
+insert into t (id,a) values (58,13);
+insert into t (id,a) values (58,14);
+insert into t (id,a) values (58,15);
+insert into t (id,a) values (58,16);
+insert into t (id,a) values (58,17);
+insert into t (id,a) values (58,18);
+insert into t (id,a) values (58,19);
+insert into t (id,a) values (58,20);
+insert into t (id,a) values (58,21);
+insert into t (id,a) values (58,22);
+insert into t (id,a) values (58,23);
+insert into t (id,a) values (58,24);
+insert into t (id,a) values (58,25);
+insert into t (id,a) values (58,26);
+insert into t (id,a) values (58,27);
+insert into t (id,a) values (58,28);
+insert into t (id,a) values (58,29);
+insert into t (id,a) values (58,30);
+insert into t (id,a) values (58,31);
+insert into t (id,a) values (58,32);
+insert into t (id,a) values (58,33);
+insert into t (id,a) values (58,34);
+insert into t (id,a) values (58,35);
+insert into t (id,a) values (58,36);
+insert into t (id,a) values (58,37);
+insert into t (id,a) values (58,38);
+insert into t (id,a) values (58,39);
+insert into t (id,a) values (58,40);
+insert into t (id,a) values (58,41);
+insert into t (id,a) values (58,42);
+insert into t (id,a) values (58,43);
+insert into t (id,a) values (58,44);
+insert into t (id,a) values (58,45);
+insert into t (id,a) values (58,46);
+insert into t (id,a) values (58,47);
+insert into t (id,a) values (58,48);
+insert into t (id,a) values (58,49);
+insert into t (id,a) values (58,50);
+insert into t (id,a) values (58,51);
+insert into t (id,a) values (58,52);
+insert into t (id,a) values (58,53);
+insert into t (id,a) values (58,54);
+insert into t (id,a) values (58,55);
+insert into t (id,a) values (58,56);
+insert into t (id,a) values (58,57);
+insert into t (id,a) values (58,58);
+insert into t (id,a) values (58,59);
+insert into t (id,a) values (58,60);
+insert into t (id,a) values (58,61);
+insert into t (id,a) values (58,62);
+insert into t (id,a) values (58,63);
+insert into t (id,a) values (58,64);
+insert into t (id,a) values (58,65);
+insert into t (id,a) values (58,66);
+insert into t (id,a) values (58,67);
+insert into t (id,a) values (58,68);
+insert into t (id,a) values (58,69);
+insert into t (id,a) values (58,70);
+insert into t (id,a) values (58,71);
+insert into t (id,a) values (58,72);
+insert into t (id,a) values (58,73);
+insert into t (id,a) values (58,74);
+insert into t (id,a) values (58,75);
+insert into t (id,a) values (58,76);
+insert into t (id,a) values (58,77);
+insert into t (id,a) values (58,78);
+insert into t (id,a) values (58,79);
+insert into t (id,a) values (58,80);
+insert into t (id,a) values (58,81);
+insert into t (id,a) values (58,82);
+insert into t (id,a) values (58,83);
+insert into t (id,a) values (58,84);
+insert into t (id,a) values (58,85);
+insert into t (id,a) values (58,86);
+insert into t (id,a) values (58,87);
+insert into t (id,a) values (58,88);
+insert into t (id,a) values (58,89);
+insert into t (id,a) values (58,90);
+insert into t (id,a) values (58,91);
+insert into t (id,a) values (58,92);
+insert into t (id,a) values (58,93);
+insert into t (id,a) values (58,94);
+insert into t (id,a) values (58,95);
+insert into t (id,a) values (58,96);
+insert into t (id,a) values (58,97);
+insert into t (id,a) values (58,98);
+insert into t (id,a) values (58,99);
+insert into t (id,a) values (59,0);
+insert into t (id,a) values (59,1);
+insert into t (id,a) values (59,2);
+insert into t (id,a) values (59,3);
+insert into t (id,a) values (59,4);
+insert into t (id,a) values (59,5);
+insert into t (id,a) values (59,6);
+insert into t (id,a) values (59,7);
+insert into t (id,a) values (59,8);
+insert into t (id,a) values (59,9);
+insert into t (id,a) values (59,10);
+insert into t (id,a) values (59,11);
+insert into t (id,a) values (59,12);
+insert into t (id,a) values (59,13);
+insert into t (id,a) values (59,14);
+insert into t (id,a) values (59,15);
+insert into t (id,a) values (59,16);
+insert into t (id,a) values (59,17);
+insert into t (id,a) values (59,18);
+insert into t (id,a) values (59,19);
+insert into t (id,a) values (59,20);
+insert into t (id,a) values (59,21);
+insert into t (id,a) values (59,22);
+insert into t (id,a) values (59,23);
+insert into t (id,a) values (59,24);
+insert into t (id,a) values (59,25);
+insert into t (id,a) values (59,26);
+insert into t (id,a) values (59,27);
+insert into t (id,a) values (59,28);
+insert into t (id,a) values (59,29);
+insert into t (id,a) values (59,30);
+insert into t (id,a) values (59,31);
+insert into t (id,a) values (59,32);
+insert into t (id,a) values (59,33);
+insert into t (id,a) values (59,34);
+insert into t (id,a) values (59,35);
+insert into t (id,a) values (59,36);
+insert into t (id,a) values (59,37);
+insert into t (id,a) values (59,38);
+insert into t (id,a) values (59,39);
+insert into t (id,a) values (59,40);
+insert into t (id,a) values (59,41);
+insert into t (id,a) values (59,42);
+insert into t (id,a) values (59,43);
+insert into t (id,a) values (59,44);
+insert into t (id,a) values (59,45);
+insert into t (id,a) values (59,46);
+insert into t (id,a) values (59,47);
+insert into t (id,a) values (59,48);
+insert into t (id,a) values (59,49);
+insert into t (id,a) values (59,50);
+insert into t (id,a) values (59,51);
+insert into t (id,a) values (59,52);
+insert into t (id,a) values (59,53);
+insert into t (id,a) values (59,54);
+insert into t (id,a) values (59,55);
+insert into t (id,a) values (59,56);
+insert into t (id,a) values (59,57);
+insert into t (id,a) values (59,58);
+insert into t (id,a) values (59,59);
+insert into t (id,a) values (59,60);
+insert into t (id,a) values (59,61);
+insert into t (id,a) values (59,62);
+insert into t (id,a) values (59,63);
+insert into t (id,a) values (59,64);
+insert into t (id,a) values (59,65);
+insert into t (id,a) values (59,66);
+insert into t (id,a) values (59,67);
+insert into t (id,a) values (59,68);
+insert into t (id,a) values (59,69);
+insert into t (id,a) values (59,70);
+insert into t (id,a) values (59,71);
+insert into t (id,a) values (59,72);
+insert into t (id,a) values (59,73);
+insert into t (id,a) values (59,74);
+insert into t (id,a) values (59,75);
+insert into t (id,a) values (59,76);
+insert into t (id,a) values (59,77);
+insert into t (id,a) values (59,78);
+insert into t (id,a) values (59,79);
+insert into t (id,a) values (59,80);
+insert into t (id,a) values (59,81);
+insert into t (id,a) values (59,82);
+insert into t (id,a) values (59,83);
+insert into t (id,a) values (59,84);
+insert into t (id,a) values (59,85);
+insert into t (id,a) values (59,86);
+insert into t (id,a) values (59,87);
+insert into t (id,a) values (59,88);
+insert into t (id,a) values (59,89);
+insert into t (id,a) values (59,90);
+insert into t (id,a) values (59,91);
+insert into t (id,a) values (59,92);
+insert into t (id,a) values (59,93);
+insert into t (id,a) values (59,94);
+insert into t (id,a) values (59,95);
+insert into t (id,a) values (59,96);
+insert into t (id,a) values (59,97);
+insert into t (id,a) values (59,98);
+insert into t (id,a) values (59,99);
+insert into t (id,a) values (60,0);
+insert into t (id,a) values (60,1);
+insert into t (id,a) values (60,2);
+insert into t (id,a) values (60,3);
+insert into t (id,a) values (60,4);
+insert into t (id,a) values (60,5);
+insert into t (id,a) values (60,6);
+insert into t (id,a) values (60,7);
+insert into t (id,a) values (60,8);
+insert into t (id,a) values (60,9);
+insert into t (id,a) values (60,10);
+insert into t (id,a) values (60,11);
+insert into t (id,a) values (60,12);
+insert into t (id,a) values (60,13);
+insert into t (id,a) values (60,14);
+insert into t (id,a) values (60,15);
+insert into t (id,a) values (60,16);
+insert into t (id,a) values (60,17);
+insert into t (id,a) values (60,18);
+insert into t (id,a) values (60,19);
+insert into t (id,a) values (60,20);
+insert into t (id,a) values (60,21);
+insert into t (id,a) values (60,22);
+insert into t (id,a) values (60,23);
+insert into t (id,a) values (60,24);
+insert into t (id,a) values (60,25);
+insert into t (id,a) values (60,26);
+insert into t (id,a) values (60,27);
+insert into t (id,a) values (60,28);
+insert into t (id,a) values (60,29);
+insert into t (id,a) values (60,30);
+insert into t (id,a) values (60,31);
+insert into t (id,a) values (60,32);
+insert into t (id,a) values (60,33);
+insert into t (id,a) values (60,34);
+insert into t (id,a) values (60,35);
+insert into t (id,a) values (60,36);
+insert into t (id,a) values (60,37);
+insert into t (id,a) values (60,38);
+insert into t (id,a) values (60,39);
+insert into t (id,a) values (60,40);
+insert into t (id,a) values (60,41);
+insert into t (id,a) values (60,42);
+insert into t (id,a) values (60,43);
+insert into t (id,a) values (60,44);
+insert into t (id,a) values (60,45);
+insert into t (id,a) values (60,46);
+insert into t (id,a) values (60,47);
+insert into t (id,a) values (60,48);
+insert into t (id,a) values (60,49);
+insert into t (id,a) values (60,50);
+insert into t (id,a) values (60,51);
+insert into t (id,a) values (60,52);
+insert into t (id,a) values (60,53);
+insert into t (id,a) values (60,54);
+insert into t (id,a) values (60,55);
+insert into t (id,a) values (60,56);
+insert into t (id,a) values (60,57);
+insert into t (id,a) values (60,58);
+insert into t (id,a) values (60,59);
+insert into t (id,a) values (60,60);
+insert into t (id,a) values (60,61);
+insert into t (id,a) values (60,62);
+insert into t (id,a) values (60,63);
+insert into t (id,a) values (60,64);
+insert into t (id,a) values (60,65);
+insert into t (id,a) values (60,66);
+insert into t (id,a) values (60,67);
+insert into t (id,a) values (60,68);
+insert into t (id,a) values (60,69);
+insert into t (id,a) values (60,70);
+insert into t (id,a) values (60,71);
+insert into t (id,a) values (60,72);
+insert into t (id,a) values (60,73);
+insert into t (id,a) values (60,74);
+insert into t (id,a) values (60,75);
+insert into t (id,a) values (60,76);
+insert into t (id,a) values (60,77);
+insert into t (id,a) values (60,78);
+insert into t (id,a) values (60,79);
+insert into t (id,a) values (60,80);
+insert into t (id,a) values (60,81);
+insert into t (id,a) values (60,82);
+insert into t (id,a) values (60,83);
+insert into t (id,a) values (60,84);
+insert into t (id,a) values (60,85);
+insert into t (id,a) values (60,86);
+insert into t (id,a) values (60,87);
+insert into t (id,a) values (60,88);
+insert into t (id,a) values (60,89);
+insert into t (id,a) values (60,90);
+insert into t (id,a) values (60,91);
+insert into t (id,a) values (60,92);
+insert into t (id,a) values (60,93);
+insert into t (id,a) values (60,94);
+insert into t (id,a) values (60,95);
+insert into t (id,a) values (60,96);
+insert into t (id,a) values (60,97);
+insert into t (id,a) values (60,98);
+insert into t (id,a) values (60,99);
+insert into t (id,a) values (61,0);
+insert into t (id,a) values (61,1);
+insert into t (id,a) values (61,2);
+insert into t (id,a) values (61,3);
+insert into t (id,a) values (61,4);
+insert into t (id,a) values (61,5);
+insert into t (id,a) values (61,6);
+insert into t (id,a) values (61,7);
+insert into t (id,a) values (61,8);
+insert into t (id,a) values (61,9);
+insert into t (id,a) values (61,10);
+insert into t (id,a) values (61,11);
+insert into t (id,a) values (61,12);
+insert into t (id,a) values (61,13);
+insert into t (id,a) values (61,14);
+insert into t (id,a) values (61,15);
+insert into t (id,a) values (61,16);
+insert into t (id,a) values (61,17);
+insert into t (id,a) values (61,18);
+insert into t (id,a) values (61,19);
+insert into t (id,a) values (61,20);
+insert into t (id,a) values (61,21);
+insert into t (id,a) values (61,22);
+insert into t (id,a) values (61,23);
+insert into t (id,a) values (61,24);
+insert into t (id,a) values (61,25);
+insert into t (id,a) values (61,26);
+insert into t (id,a) values (61,27);
+insert into t (id,a) values (61,28);
+insert into t (id,a) values (61,29);
+insert into t (id,a) values (61,30);
+insert into t (id,a) values (61,31);
+insert into t (id,a) values (61,32);
+insert into t (id,a) values (61,33);
+insert into t (id,a) values (61,34);
+insert into t (id,a) values (61,35);
+insert into t (id,a) values (61,36);
+insert into t (id,a) values (61,37);
+insert into t (id,a) values (61,38);
+insert into t (id,a) values (61,39);
+insert into t (id,a) values (61,40);
+insert into t (id,a) values (61,41);
+insert into t (id,a) values (61,42);
+insert into t (id,a) values (61,43);
+insert into t (id,a) values (61,44);
+insert into t (id,a) values (61,45);
+insert into t (id,a) values (61,46);
+insert into t (id,a) values (61,47);
+insert into t (id,a) values (61,48);
+insert into t (id,a) values (61,49);
+insert into t (id,a) values (61,50);
+insert into t (id,a) values (61,51);
+insert into t (id,a) values (61,52);
+insert into t (id,a) values (61,53);
+insert into t (id,a) values (61,54);
+insert into t (id,a) values (61,55);
+insert into t (id,a) values (61,56);
+insert into t (id,a) values (61,57);
+insert into t (id,a) values (61,58);
+insert into t (id,a) values (61,59);
+insert into t (id,a) values (61,60);
+insert into t (id,a) values (61,61);
+insert into t (id,a) values (61,62);
+insert into t (id,a) values (61,63);
+insert into t (id,a) values (61,64);
+insert into t (id,a) values (61,65);
+insert into t (id,a) values (61,66);
+insert into t (id,a) values (61,67);
+insert into t (id,a) values (61,68);
+insert into t (id,a) values (61,69);
+insert into t (id,a) values (61,70);
+insert into t (id,a) values (61,71);
+insert into t (id,a) values (61,72);
+insert into t (id,a) values (61,73);
+insert into t (id,a) values (61,74);
+insert into t (id,a) values (61,75);
+insert into t (id,a) values (61,76);
+insert into t (id,a) values (61,77);
+insert into t (id,a) values (61,78);
+insert into t (id,a) values (61,79);
+insert into t (id,a) values (61,80);
+insert into t (id,a) values (61,81);
+insert into t (id,a) values (61,82);
+insert into t (id,a) values (61,83);
+insert into t (id,a) values (61,84);
+insert into t (id,a) values (61,85);
+insert into t (id,a) values (61,86);
+insert into t (id,a) values (61,87);
+insert into t (id,a) values (61,88);
+insert into t (id,a) values (61,89);
+insert into t (id,a) values (61,90);
+insert into t (id,a) values (61,91);
+insert into t (id,a) values (61,92);
+insert into t (id,a) values (61,93);
+insert into t (id,a) values (61,94);
+insert into t (id,a) values (61,95);
+insert into t (id,a) values (61,96);
+insert into t (id,a) values (61,97);
+insert into t (id,a) values (61,98);
+insert into t (id,a) values (61,99);
+insert into t (id,a) values (62,0);
+insert into t (id,a) values (62,1);
+insert into t (id,a) values (62,2);
+insert into t (id,a) values (62,3);
+insert into t (id,a) values (62,4);
+insert into t (id,a) values (62,5);
+insert into t (id,a) values (62,6);
+insert into t (id,a) values (62,7);
+insert into t (id,a) values (62,8);
+insert into t (id,a) values (62,9);
+insert into t (id,a) values (62,10);
+insert into t (id,a) values (62,11);
+insert into t (id,a) values (62,12);
+insert into t (id,a) values (62,13);
+insert into t (id,a) values (62,14);
+insert into t (id,a) values (62,15);
+insert into t (id,a) values (62,16);
+insert into t (id,a) values (62,17);
+insert into t (id,a) values (62,18);
+insert into t (id,a) values (62,19);
+insert into t (id,a) values (62,20);
+insert into t (id,a) values (62,21);
+insert into t (id,a) values (62,22);
+insert into t (id,a) values (62,23);
+insert into t (id,a) values (62,24);
+insert into t (id,a) values (62,25);
+insert into t (id,a) values (62,26);
+insert into t (id,a) values (62,27);
+insert into t (id,a) values (62,28);
+insert into t (id,a) values (62,29);
+insert into t (id,a) values (62,30);
+insert into t (id,a) values (62,31);
+insert into t (id,a) values (62,32);
+insert into t (id,a) values (62,33);
+insert into t (id,a) values (62,34);
+insert into t (id,a) values (62,35);
+insert into t (id,a) values (62,36);
+insert into t (id,a) values (62,37);
+insert into t (id,a) values (62,38);
+insert into t (id,a) values (62,39);
+insert into t (id,a) values (62,40);
+insert into t (id,a) values (62,41);
+insert into t (id,a) values (62,42);
+insert into t (id,a) values (62,43);
+insert into t (id,a) values (62,44);
+insert into t (id,a) values (62,45);
+insert into t (id,a) values (62,46);
+insert into t (id,a) values (62,47);
+insert into t (id,a) values (62,48);
+insert into t (id,a) values (62,49);
+insert into t (id,a) values (62,50);
+insert into t (id,a) values (62,51);
+insert into t (id,a) values (62,52);
+insert into t (id,a) values (62,53);
+insert into t (id,a) values (62,54);
+insert into t (id,a) values (62,55);
+insert into t (id,a) values (62,56);
+insert into t (id,a) values (62,57);
+insert into t (id,a) values (62,58);
+insert into t (id,a) values (62,59);
+insert into t (id,a) values (62,60);
+insert into t (id,a) values (62,61);
+insert into t (id,a) values (62,62);
+insert into t (id,a) values (62,63);
+insert into t (id,a) values (62,64);
+insert into t (id,a) values (62,65);
+insert into t (id,a) values (62,66);
+insert into t (id,a) values (62,67);
+insert into t (id,a) values (62,68);
+insert into t (id,a) values (62,69);
+insert into t (id,a) values (62,70);
+insert into t (id,a) values (62,71);
+insert into t (id,a) values (62,72);
+insert into t (id,a) values (62,73);
+insert into t (id,a) values (62,74);
+insert into t (id,a) values (62,75);
+insert into t (id,a) values (62,76);
+insert into t (id,a) values (62,77);
+insert into t (id,a) values (62,78);
+insert into t (id,a) values (62,79);
+insert into t (id,a) values (62,80);
+insert into t (id,a) values (62,81);
+insert into t (id,a) values (62,82);
+insert into t (id,a) values (62,83);
+insert into t (id,a) values (62,84);
+insert into t (id,a) values (62,85);
+insert into t (id,a) values (62,86);
+insert into t (id,a) values (62,87);
+insert into t (id,a) values (62,88);
+insert into t (id,a) values (62,89);
+insert into t (id,a) values (62,90);
+insert into t (id,a) values (62,91);
+insert into t (id,a) values (62,92);
+insert into t (id,a) values (62,93);
+insert into t (id,a) values (62,94);
+insert into t (id,a) values (62,95);
+insert into t (id,a) values (62,96);
+insert into t (id,a) values (62,97);
+insert into t (id,a) values (62,98);
+insert into t (id,a) values (62,99);
+insert into t (id,a) values (63,0);
+insert into t (id,a) values (63,1);
+insert into t (id,a) values (63,2);
+insert into t (id,a) values (63,3);
+insert into t (id,a) values (63,4);
+insert into t (id,a) values (63,5);
+insert into t (id,a) values (63,6);
+insert into t (id,a) values (63,7);
+insert into t (id,a) values (63,8);
+insert into t (id,a) values (63,9);
+insert into t (id,a) values (63,10);
+insert into t (id,a) values (63,11);
+insert into t (id,a) values (63,12);
+insert into t (id,a) values (63,13);
+insert into t (id,a) values (63,14);
+insert into t (id,a) values (63,15);
+insert into t (id,a) values (63,16);
+insert into t (id,a) values (63,17);
+insert into t (id,a) values (63,18);
+insert into t (id,a) values (63,19);
+insert into t (id,a) values (63,20);
+insert into t (id,a) values (63,21);
+insert into t (id,a) values (63,22);
+insert into t (id,a) values (63,23);
+insert into t (id,a) values (63,24);
+insert into t (id,a) values (63,25);
+insert into t (id,a) values (63,26);
+insert into t (id,a) values (63,27);
+insert into t (id,a) values (63,28);
+insert into t (id,a) values (63,29);
+insert into t (id,a) values (63,30);
+insert into t (id,a) values (63,31);
+insert into t (id,a) values (63,32);
+insert into t (id,a) values (63,33);
+insert into t (id,a) values (63,34);
+insert into t (id,a) values (63,35);
+insert into t (id,a) values (63,36);
+insert into t (id,a) values (63,37);
+insert into t (id,a) values (63,38);
+insert into t (id,a) values (63,39);
+insert into t (id,a) values (63,40);
+insert into t (id,a) values (63,41);
+insert into t (id,a) values (63,42);
+insert into t (id,a) values (63,43);
+insert into t (id,a) values (63,44);
+insert into t (id,a) values (63,45);
+insert into t (id,a) values (63,46);
+insert into t (id,a) values (63,47);
+insert into t (id,a) values (63,48);
+insert into t (id,a) values (63,49);
+insert into t (id,a) values (63,50);
+insert into t (id,a) values (63,51);
+insert into t (id,a) values (63,52);
+insert into t (id,a) values (63,53);
+insert into t (id,a) values (63,54);
+insert into t (id,a) values (63,55);
+insert into t (id,a) values (63,56);
+insert into t (id,a) values (63,57);
+insert into t (id,a) values (63,58);
+insert into t (id,a) values (63,59);
+insert into t (id,a) values (63,60);
+insert into t (id,a) values (63,61);
+insert into t (id,a) values (63,62);
+insert into t (id,a) values (63,63);
+insert into t (id,a) values (63,64);
+insert into t (id,a) values (63,65);
+insert into t (id,a) values (63,66);
+insert into t (id,a) values (63,67);
+insert into t (id,a) values (63,68);
+insert into t (id,a) values (63,69);
+insert into t (id,a) values (63,70);
+insert into t (id,a) values (63,71);
+insert into t (id,a) values (63,72);
+insert into t (id,a) values (63,73);
+insert into t (id,a) values (63,74);
+insert into t (id,a) values (63,75);
+insert into t (id,a) values (63,76);
+insert into t (id,a) values (63,77);
+insert into t (id,a) values (63,78);
+insert into t (id,a) values (63,79);
+insert into t (id,a) values (63,80);
+insert into t (id,a) values (63,81);
+insert into t (id,a) values (63,82);
+insert into t (id,a) values (63,83);
+insert into t (id,a) values (63,84);
+insert into t (id,a) values (63,85);
+insert into t (id,a) values (63,86);
+insert into t (id,a) values (63,87);
+insert into t (id,a) values (63,88);
+insert into t (id,a) values (63,89);
+insert into t (id,a) values (63,90);
+insert into t (id,a) values (63,91);
+insert into t (id,a) values (63,92);
+insert into t (id,a) values (63,93);
+insert into t (id,a) values (63,94);
+insert into t (id,a) values (63,95);
+insert into t (id,a) values (63,96);
+insert into t (id,a) values (63,97);
+insert into t (id,a) values (63,98);
+insert into t (id,a) values (63,99);
+insert into t (id,a) values (64,0);
+insert into t (id,a) values (64,1);
+insert into t (id,a) values (64,2);
+insert into t (id,a) values (64,3);
+insert into t (id,a) values (64,4);
+insert into t (id,a) values (64,5);
+insert into t (id,a) values (64,6);
+insert into t (id,a) values (64,7);
+insert into t (id,a) values (64,8);
+insert into t (id,a) values (64,9);
+insert into t (id,a) values (64,10);
+insert into t (id,a) values (64,11);
+insert into t (id,a) values (64,12);
+insert into t (id,a) values (64,13);
+insert into t (id,a) values (64,14);
+insert into t (id,a) values (64,15);
+insert into t (id,a) values (64,16);
+insert into t (id,a) values (64,17);
+insert into t (id,a) values (64,18);
+insert into t (id,a) values (64,19);
+insert into t (id,a) values (64,20);
+insert into t (id,a) values (64,21);
+insert into t (id,a) values (64,22);
+insert into t (id,a) values (64,23);
+insert into t (id,a) values (64,24);
+insert into t (id,a) values (64,25);
+insert into t (id,a) values (64,26);
+insert into t (id,a) values (64,27);
+insert into t (id,a) values (64,28);
+insert into t (id,a) values (64,29);
+insert into t (id,a) values (64,30);
+insert into t (id,a) values (64,31);
+insert into t (id,a) values (64,32);
+insert into t (id,a) values (64,33);
+insert into t (id,a) values (64,34);
+insert into t (id,a) values (64,35);
+insert into t (id,a) values (64,36);
+insert into t (id,a) values (64,37);
+insert into t (id,a) values (64,38);
+insert into t (id,a) values (64,39);
+insert into t (id,a) values (64,40);
+insert into t (id,a) values (64,41);
+insert into t (id,a) values (64,42);
+insert into t (id,a) values (64,43);
+insert into t (id,a) values (64,44);
+insert into t (id,a) values (64,45);
+insert into t (id,a) values (64,46);
+insert into t (id,a) values (64,47);
+insert into t (id,a) values (64,48);
+insert into t (id,a) values (64,49);
+insert into t (id,a) values (64,50);
+insert into t (id,a) values (64,51);
+insert into t (id,a) values (64,52);
+insert into t (id,a) values (64,53);
+insert into t (id,a) values (64,54);
+insert into t (id,a) values (64,55);
+insert into t (id,a) values (64,56);
+insert into t (id,a) values (64,57);
+insert into t (id,a) values (64,58);
+insert into t (id,a) values (64,59);
+insert into t (id,a) values (64,60);
+insert into t (id,a) values (64,61);
+insert into t (id,a) values (64,62);
+insert into t (id,a) values (64,63);
+insert into t (id,a) values (64,64);
+insert into t (id,a) values (64,65);
+insert into t (id,a) values (64,66);
+insert into t (id,a) values (64,67);
+insert into t (id,a) values (64,68);
+insert into t (id,a) values (64,69);
+insert into t (id,a) values (64,70);
+insert into t (id,a) values (64,71);
+insert into t (id,a) values (64,72);
+insert into t (id,a) values (64,73);
+insert into t (id,a) values (64,74);
+insert into t (id,a) values (64,75);
+insert into t (id,a) values (64,76);
+insert into t (id,a) values (64,77);
+insert into t (id,a) values (64,78);
+insert into t (id,a) values (64,79);
+insert into t (id,a) values (64,80);
+insert into t (id,a) values (64,81);
+insert into t (id,a) values (64,82);
+insert into t (id,a) values (64,83);
+insert into t (id,a) values (64,84);
+insert into t (id,a) values (64,85);
+insert into t (id,a) values (64,86);
+insert into t (id,a) values (64,87);
+insert into t (id,a) values (64,88);
+insert into t (id,a) values (64,89);
+insert into t (id,a) values (64,90);
+insert into t (id,a) values (64,91);
+insert into t (id,a) values (64,92);
+insert into t (id,a) values (64,93);
+insert into t (id,a) values (64,94);
+insert into t (id,a) values (64,95);
+insert into t (id,a) values (64,96);
+insert into t (id,a) values (64,97);
+insert into t (id,a) values (64,98);
+insert into t (id,a) values (64,99);
+insert into t (id,a) values (65,0);
+insert into t (id,a) values (65,1);
+insert into t (id,a) values (65,2);
+insert into t (id,a) values (65,3);
+insert into t (id,a) values (65,4);
+insert into t (id,a) values (65,5);
+insert into t (id,a) values (65,6);
+insert into t (id,a) values (65,7);
+insert into t (id,a) values (65,8);
+insert into t (id,a) values (65,9);
+insert into t (id,a) values (65,10);
+insert into t (id,a) values (65,11);
+insert into t (id,a) values (65,12);
+insert into t (id,a) values (65,13);
+insert into t (id,a) values (65,14);
+insert into t (id,a) values (65,15);
+insert into t (id,a) values (65,16);
+insert into t (id,a) values (65,17);
+insert into t (id,a) values (65,18);
+insert into t (id,a) values (65,19);
+insert into t (id,a) values (65,20);
+insert into t (id,a) values (65,21);
+insert into t (id,a) values (65,22);
+insert into t (id,a) values (65,23);
+insert into t (id,a) values (65,24);
+insert into t (id,a) values (65,25);
+insert into t (id,a) values (65,26);
+insert into t (id,a) values (65,27);
+insert into t (id,a) values (65,28);
+insert into t (id,a) values (65,29);
+insert into t (id,a) values (65,30);
+insert into t (id,a) values (65,31);
+insert into t (id,a) values (65,32);
+insert into t (id,a) values (65,33);
+insert into t (id,a) values (65,34);
+insert into t (id,a) values (65,35);
+insert into t (id,a) values (65,36);
+insert into t (id,a) values (65,37);
+insert into t (id,a) values (65,38);
+insert into t (id,a) values (65,39);
+insert into t (id,a) values (65,40);
+insert into t (id,a) values (65,41);
+insert into t (id,a) values (65,42);
+insert into t (id,a) values (65,43);
+insert into t (id,a) values (65,44);
+insert into t (id,a) values (65,45);
+insert into t (id,a) values (65,46);
+insert into t (id,a) values (65,47);
+insert into t (id,a) values (65,48);
+insert into t (id,a) values (65,49);
+insert into t (id,a) values (65,50);
+insert into t (id,a) values (65,51);
+insert into t (id,a) values (65,52);
+insert into t (id,a) values (65,53);
+insert into t (id,a) values (65,54);
+insert into t (id,a) values (65,55);
+insert into t (id,a) values (65,56);
+insert into t (id,a) values (65,57);
+insert into t (id,a) values (65,58);
+insert into t (id,a) values (65,59);
+insert into t (id,a) values (65,60);
+insert into t (id,a) values (65,61);
+insert into t (id,a) values (65,62);
+insert into t (id,a) values (65,63);
+insert into t (id,a) values (65,64);
+insert into t (id,a) values (65,65);
+insert into t (id,a) values (65,66);
+insert into t (id,a) values (65,67);
+insert into t (id,a) values (65,68);
+insert into t (id,a) values (65,69);
+insert into t (id,a) values (65,70);
+insert into t (id,a) values (65,71);
+insert into t (id,a) values (65,72);
+insert into t (id,a) values (65,73);
+insert into t (id,a) values (65,74);
+insert into t (id,a) values (65,75);
+insert into t (id,a) values (65,76);
+insert into t (id,a) values (65,77);
+insert into t (id,a) values (65,78);
+insert into t (id,a) values (65,79);
+insert into t (id,a) values (65,80);
+insert into t (id,a) values (65,81);
+insert into t (id,a) values (65,82);
+insert into t (id,a) values (65,83);
+insert into t (id,a) values (65,84);
+insert into t (id,a) values (65,85);
+insert into t (id,a) values (65,86);
+insert into t (id,a) values (65,87);
+insert into t (id,a) values (65,88);
+insert into t (id,a) values (65,89);
+insert into t (id,a) values (65,90);
+insert into t (id,a) values (65,91);
+insert into t (id,a) values (65,92);
+insert into t (id,a) values (65,93);
+insert into t (id,a) values (65,94);
+insert into t (id,a) values (65,95);
+insert into t (id,a) values (65,96);
+insert into t (id,a) values (65,97);
+insert into t (id,a) values (65,98);
+insert into t (id,a) values (65,99);
+insert into t (id,a) values (66,0);
+insert into t (id,a) values (66,1);
+insert into t (id,a) values (66,2);
+insert into t (id,a) values (66,3);
+insert into t (id,a) values (66,4);
+insert into t (id,a) values (66,5);
+insert into t (id,a) values (66,6);
+insert into t (id,a) values (66,7);
+insert into t (id,a) values (66,8);
+insert into t (id,a) values (66,9);
+insert into t (id,a) values (66,10);
+insert into t (id,a) values (66,11);
+insert into t (id,a) values (66,12);
+insert into t (id,a) values (66,13);
+insert into t (id,a) values (66,14);
+insert into t (id,a) values (66,15);
+insert into t (id,a) values (66,16);
+insert into t (id,a) values (66,17);
+insert into t (id,a) values (66,18);
+insert into t (id,a) values (66,19);
+insert into t (id,a) values (66,20);
+insert into t (id,a) values (66,21);
+insert into t (id,a) values (66,22);
+insert into t (id,a) values (66,23);
+insert into t (id,a) values (66,24);
+insert into t (id,a) values (66,25);
+insert into t (id,a) values (66,26);
+insert into t (id,a) values (66,27);
+insert into t (id,a) values (66,28);
+insert into t (id,a) values (66,29);
+insert into t (id,a) values (66,30);
+insert into t (id,a) values (66,31);
+insert into t (id,a) values (66,32);
+insert into t (id,a) values (66,33);
+insert into t (id,a) values (66,34);
+insert into t (id,a) values (66,35);
+insert into t (id,a) values (66,36);
+insert into t (id,a) values (66,37);
+insert into t (id,a) values (66,38);
+insert into t (id,a) values (66,39);
+insert into t (id,a) values (66,40);
+insert into t (id,a) values (66,41);
+insert into t (id,a) values (66,42);
+insert into t (id,a) values (66,43);
+insert into t (id,a) values (66,44);
+insert into t (id,a) values (66,45);
+insert into t (id,a) values (66,46);
+insert into t (id,a) values (66,47);
+insert into t (id,a) values (66,48);
+insert into t (id,a) values (66,49);
+insert into t (id,a) values (66,50);
+insert into t (id,a) values (66,51);
+insert into t (id,a) values (66,52);
+insert into t (id,a) values (66,53);
+insert into t (id,a) values (66,54);
+insert into t (id,a) values (66,55);
+insert into t (id,a) values (66,56);
+insert into t (id,a) values (66,57);
+insert into t (id,a) values (66,58);
+insert into t (id,a) values (66,59);
+insert into t (id,a) values (66,60);
+insert into t (id,a) values (66,61);
+insert into t (id,a) values (66,62);
+insert into t (id,a) values (66,63);
+insert into t (id,a) values (66,64);
+insert into t (id,a) values (66,65);
+insert into t (id,a) values (66,66);
+insert into t (id,a) values (66,67);
+insert into t (id,a) values (66,68);
+insert into t (id,a) values (66,69);
+insert into t (id,a) values (66,70);
+insert into t (id,a) values (66,71);
+insert into t (id,a) values (66,72);
+insert into t (id,a) values (66,73);
+insert into t (id,a) values (66,74);
+insert into t (id,a) values (66,75);
+insert into t (id,a) values (66,76);
+insert into t (id,a) values (66,77);
+insert into t (id,a) values (66,78);
+insert into t (id,a) values (66,79);
+insert into t (id,a) values (66,80);
+insert into t (id,a) values (66,81);
+insert into t (id,a) values (66,82);
+insert into t (id,a) values (66,83);
+insert into t (id,a) values (66,84);
+insert into t (id,a) values (66,85);
+insert into t (id,a) values (66,86);
+insert into t (id,a) values (66,87);
+insert into t (id,a) values (66,88);
+insert into t (id,a) values (66,89);
+insert into t (id,a) values (66,90);
+insert into t (id,a) values (66,91);
+insert into t (id,a) values (66,92);
+insert into t (id,a) values (66,93);
+insert into t (id,a) values (66,94);
+insert into t (id,a) values (66,95);
+insert into t (id,a) values (66,96);
+insert into t (id,a) values (66,97);
+insert into t (id,a) values (66,98);
+insert into t (id,a) values (66,99);
+insert into t (id,a) values (67,0);
+insert into t (id,a) values (67,1);
+insert into t (id,a) values (67,2);
+insert into t (id,a) values (67,3);
+insert into t (id,a) values (67,4);
+insert into t (id,a) values (67,5);
+insert into t (id,a) values (67,6);
+insert into t (id,a) values (67,7);
+insert into t (id,a) values (67,8);
+insert into t (id,a) values (67,9);
+insert into t (id,a) values (67,10);
+insert into t (id,a) values (67,11);
+insert into t (id,a) values (67,12);
+insert into t (id,a) values (67,13);
+insert into t (id,a) values (67,14);
+insert into t (id,a) values (67,15);
+insert into t (id,a) values (67,16);
+insert into t (id,a) values (67,17);
+insert into t (id,a) values (67,18);
+insert into t (id,a) values (67,19);
+insert into t (id,a) values (67,20);
+insert into t (id,a) values (67,21);
+insert into t (id,a) values (67,22);
+insert into t (id,a) values (67,23);
+insert into t (id,a) values (67,24);
+insert into t (id,a) values (67,25);
+insert into t (id,a) values (67,26);
+insert into t (id,a) values (67,27);
+insert into t (id,a) values (67,28);
+insert into t (id,a) values (67,29);
+insert into t (id,a) values (67,30);
+insert into t (id,a) values (67,31);
+insert into t (id,a) values (67,32);
+insert into t (id,a) values (67,33);
+insert into t (id,a) values (67,34);
+insert into t (id,a) values (67,35);
+insert into t (id,a) values (67,36);
+insert into t (id,a) values (67,37);
+insert into t (id,a) values (67,38);
+insert into t (id,a) values (67,39);
+insert into t (id,a) values (67,40);
+insert into t (id,a) values (67,41);
+insert into t (id,a) values (67,42);
+insert into t (id,a) values (67,43);
+insert into t (id,a) values (67,44);
+insert into t (id,a) values (67,45);
+insert into t (id,a) values (67,46);
+insert into t (id,a) values (67,47);
+insert into t (id,a) values (67,48);
+insert into t (id,a) values (67,49);
+insert into t (id,a) values (67,50);
+insert into t (id,a) values (67,51);
+insert into t (id,a) values (67,52);
+insert into t (id,a) values (67,53);
+insert into t (id,a) values (67,54);
+insert into t (id,a) values (67,55);
+insert into t (id,a) values (67,56);
+insert into t (id,a) values (67,57);
+insert into t (id,a) values (67,58);
+insert into t (id,a) values (67,59);
+insert into t (id,a) values (67,60);
+insert into t (id,a) values (67,61);
+insert into t (id,a) values (67,62);
+insert into t (id,a) values (67,63);
+insert into t (id,a) values (67,64);
+insert into t (id,a) values (67,65);
+insert into t (id,a) values (67,66);
+insert into t (id,a) values (67,67);
+insert into t (id,a) values (67,68);
+insert into t (id,a) values (67,69);
+insert into t (id,a) values (67,70);
+insert into t (id,a) values (67,71);
+insert into t (id,a) values (67,72);
+insert into t (id,a) values (67,73);
+insert into t (id,a) values (67,74);
+insert into t (id,a) values (67,75);
+insert into t (id,a) values (67,76);
+insert into t (id,a) values (67,77);
+insert into t (id,a) values (67,78);
+insert into t (id,a) values (67,79);
+insert into t (id,a) values (67,80);
+insert into t (id,a) values (67,81);
+insert into t (id,a) values (67,82);
+insert into t (id,a) values (67,83);
+insert into t (id,a) values (67,84);
+insert into t (id,a) values (67,85);
+insert into t (id,a) values (67,86);
+insert into t (id,a) values (67,87);
+insert into t (id,a) values (67,88);
+insert into t (id,a) values (67,89);
+insert into t (id,a) values (67,90);
+insert into t (id,a) values (67,91);
+insert into t (id,a) values (67,92);
+insert into t (id,a) values (67,93);
+insert into t (id,a) values (67,94);
+insert into t (id,a) values (67,95);
+insert into t (id,a) values (67,96);
+insert into t (id,a) values (67,97);
+insert into t (id,a) values (67,98);
+insert into t (id,a) values (67,99);
+insert into t (id,a) values (68,0);
+insert into t (id,a) values (68,1);
+insert into t (id,a) values (68,2);
+insert into t (id,a) values (68,3);
+insert into t (id,a) values (68,4);
+insert into t (id,a) values (68,5);
+insert into t (id,a) values (68,6);
+insert into t (id,a) values (68,7);
+insert into t (id,a) values (68,8);
+insert into t (id,a) values (68,9);
+insert into t (id,a) values (68,10);
+insert into t (id,a) values (68,11);
+insert into t (id,a) values (68,12);
+insert into t (id,a) values (68,13);
+insert into t (id,a) values (68,14);
+insert into t (id,a) values (68,15);
+insert into t (id,a) values (68,16);
+insert into t (id,a) values (68,17);
+insert into t (id,a) values (68,18);
+insert into t (id,a) values (68,19);
+insert into t (id,a) values (68,20);
+insert into t (id,a) values (68,21);
+insert into t (id,a) values (68,22);
+insert into t (id,a) values (68,23);
+insert into t (id,a) values (68,24);
+insert into t (id,a) values (68,25);
+insert into t (id,a) values (68,26);
+insert into t (id,a) values (68,27);
+insert into t (id,a) values (68,28);
+insert into t (id,a) values (68,29);
+insert into t (id,a) values (68,30);
+insert into t (id,a) values (68,31);
+insert into t (id,a) values (68,32);
+insert into t (id,a) values (68,33);
+insert into t (id,a) values (68,34);
+insert into t (id,a) values (68,35);
+insert into t (id,a) values (68,36);
+insert into t (id,a) values (68,37);
+insert into t (id,a) values (68,38);
+insert into t (id,a) values (68,39);
+insert into t (id,a) values (68,40);
+insert into t (id,a) values (68,41);
+insert into t (id,a) values (68,42);
+insert into t (id,a) values (68,43);
+insert into t (id,a) values (68,44);
+insert into t (id,a) values (68,45);
+insert into t (id,a) values (68,46);
+insert into t (id,a) values (68,47);
+insert into t (id,a) values (68,48);
+insert into t (id,a) values (68,49);
+insert into t (id,a) values (68,50);
+insert into t (id,a) values (68,51);
+insert into t (id,a) values (68,52);
+insert into t (id,a) values (68,53);
+insert into t (id,a) values (68,54);
+insert into t (id,a) values (68,55);
+insert into t (id,a) values (68,56);
+insert into t (id,a) values (68,57);
+insert into t (id,a) values (68,58);
+insert into t (id,a) values (68,59);
+insert into t (id,a) values (68,60);
+insert into t (id,a) values (68,61);
+insert into t (id,a) values (68,62);
+insert into t (id,a) values (68,63);
+insert into t (id,a) values (68,64);
+insert into t (id,a) values (68,65);
+insert into t (id,a) values (68,66);
+insert into t (id,a) values (68,67);
+insert into t (id,a) values (68,68);
+insert into t (id,a) values (68,69);
+insert into t (id,a) values (68,70);
+insert into t (id,a) values (68,71);
+insert into t (id,a) values (68,72);
+insert into t (id,a) values (68,73);
+insert into t (id,a) values (68,74);
+insert into t (id,a) values (68,75);
+insert into t (id,a) values (68,76);
+insert into t (id,a) values (68,77);
+insert into t (id,a) values (68,78);
+insert into t (id,a) values (68,79);
+insert into t (id,a) values (68,80);
+insert into t (id,a) values (68,81);
+insert into t (id,a) values (68,82);
+insert into t (id,a) values (68,83);
+insert into t (id,a) values (68,84);
+insert into t (id,a) values (68,85);
+insert into t (id,a) values (68,86);
+insert into t (id,a) values (68,87);
+insert into t (id,a) values (68,88);
+insert into t (id,a) values (68,89);
+insert into t (id,a) values (68,90);
+insert into t (id,a) values (68,91);
+insert into t (id,a) values (68,92);
+insert into t (id,a) values (68,93);
+insert into t (id,a) values (68,94);
+insert into t (id,a) values (68,95);
+insert into t (id,a) values (68,96);
+insert into t (id,a) values (68,97);
+insert into t (id,a) values (68,98);
+insert into t (id,a) values (68,99);
+insert into t (id,a) values (69,0);
+insert into t (id,a) values (69,1);
+insert into t (id,a) values (69,2);
+insert into t (id,a) values (69,3);
+insert into t (id,a) values (69,4);
+insert into t (id,a) values (69,5);
+insert into t (id,a) values (69,6);
+insert into t (id,a) values (69,7);
+insert into t (id,a) values (69,8);
+insert into t (id,a) values (69,9);
+insert into t (id,a) values (69,10);
+insert into t (id,a) values (69,11);
+insert into t (id,a) values (69,12);
+insert into t (id,a) values (69,13);
+insert into t (id,a) values (69,14);
+insert into t (id,a) values (69,15);
+insert into t (id,a) values (69,16);
+insert into t (id,a) values (69,17);
+insert into t (id,a) values (69,18);
+insert into t (id,a) values (69,19);
+insert into t (id,a) values (69,20);
+insert into t (id,a) values (69,21);
+insert into t (id,a) values (69,22);
+insert into t (id,a) values (69,23);
+insert into t (id,a) values (69,24);
+insert into t (id,a) values (69,25);
+insert into t (id,a) values (69,26);
+insert into t (id,a) values (69,27);
+insert into t (id,a) values (69,28);
+insert into t (id,a) values (69,29);
+insert into t (id,a) values (69,30);
+insert into t (id,a) values (69,31);
+insert into t (id,a) values (69,32);
+insert into t (id,a) values (69,33);
+insert into t (id,a) values (69,34);
+insert into t (id,a) values (69,35);
+insert into t (id,a) values (69,36);
+insert into t (id,a) values (69,37);
+insert into t (id,a) values (69,38);
+insert into t (id,a) values (69,39);
+insert into t (id,a) values (69,40);
+insert into t (id,a) values (69,41);
+insert into t (id,a) values (69,42);
+insert into t (id,a) values (69,43);
+insert into t (id,a) values (69,44);
+insert into t (id,a) values (69,45);
+insert into t (id,a) values (69,46);
+insert into t (id,a) values (69,47);
+insert into t (id,a) values (69,48);
+insert into t (id,a) values (69,49);
+insert into t (id,a) values (69,50);
+insert into t (id,a) values (69,51);
+insert into t (id,a) values (69,52);
+insert into t (id,a) values (69,53);
+insert into t (id,a) values (69,54);
+insert into t (id,a) values (69,55);
+insert into t (id,a) values (69,56);
+insert into t (id,a) values (69,57);
+insert into t (id,a) values (69,58);
+insert into t (id,a) values (69,59);
+insert into t (id,a) values (69,60);
+insert into t (id,a) values (69,61);
+insert into t (id,a) values (69,62);
+insert into t (id,a) values (69,63);
+insert into t (id,a) values (69,64);
+insert into t (id,a) values (69,65);
+insert into t (id,a) values (69,66);
+insert into t (id,a) values (69,67);
+insert into t (id,a) values (69,68);
+insert into t (id,a) values (69,69);
+insert into t (id,a) values (69,70);
+insert into t (id,a) values (69,71);
+insert into t (id,a) values (69,72);
+insert into t (id,a) values (69,73);
+insert into t (id,a) values (69,74);
+insert into t (id,a) values (69,75);
+insert into t (id,a) values (69,76);
+insert into t (id,a) values (69,77);
+insert into t (id,a) values (69,78);
+insert into t (id,a) values (69,79);
+insert into t (id,a) values (69,80);
+insert into t (id,a) values (69,81);
+insert into t (id,a) values (69,82);
+insert into t (id,a) values (69,83);
+insert into t (id,a) values (69,84);
+insert into t (id,a) values (69,85);
+insert into t (id,a) values (69,86);
+insert into t (id,a) values (69,87);
+insert into t (id,a) values (69,88);
+insert into t (id,a) values (69,89);
+insert into t (id,a) values (69,90);
+insert into t (id,a) values (69,91);
+insert into t (id,a) values (69,92);
+insert into t (id,a) values (69,93);
+insert into t (id,a) values (69,94);
+insert into t (id,a) values (69,95);
+insert into t (id,a) values (69,96);
+insert into t (id,a) values (69,97);
+insert into t (id,a) values (69,98);
+insert into t (id,a) values (69,99);
+insert into t (id,a) values (70,0);
+insert into t (id,a) values (70,1);
+insert into t (id,a) values (70,2);
+insert into t (id,a) values (70,3);
+insert into t (id,a) values (70,4);
+insert into t (id,a) values (70,5);
+insert into t (id,a) values (70,6);
+insert into t (id,a) values (70,7);
+insert into t (id,a) values (70,8);
+insert into t (id,a) values (70,9);
+insert into t (id,a) values (70,10);
+insert into t (id,a) values (70,11);
+insert into t (id,a) values (70,12);
+insert into t (id,a) values (70,13);
+insert into t (id,a) values (70,14);
+insert into t (id,a) values (70,15);
+insert into t (id,a) values (70,16);
+insert into t (id,a) values (70,17);
+insert into t (id,a) values (70,18);
+insert into t (id,a) values (70,19);
+insert into t (id,a) values (70,20);
+insert into t (id,a) values (70,21);
+insert into t (id,a) values (70,22);
+insert into t (id,a) values (70,23);
+insert into t (id,a) values (70,24);
+insert into t (id,a) values (70,25);
+insert into t (id,a) values (70,26);
+insert into t (id,a) values (70,27);
+insert into t (id,a) values (70,28);
+insert into t (id,a) values (70,29);
+insert into t (id,a) values (70,30);
+insert into t (id,a) values (70,31);
+insert into t (id,a) values (70,32);
+insert into t (id,a) values (70,33);
+insert into t (id,a) values (70,34);
+insert into t (id,a) values (70,35);
+insert into t (id,a) values (70,36);
+insert into t (id,a) values (70,37);
+insert into t (id,a) values (70,38);
+insert into t (id,a) values (70,39);
+insert into t (id,a) values (70,40);
+insert into t (id,a) values (70,41);
+insert into t (id,a) values (70,42);
+insert into t (id,a) values (70,43);
+insert into t (id,a) values (70,44);
+insert into t (id,a) values (70,45);
+insert into t (id,a) values (70,46);
+insert into t (id,a) values (70,47);
+insert into t (id,a) values (70,48);
+insert into t (id,a) values (70,49);
+insert into t (id,a) values (70,50);
+insert into t (id,a) values (70,51);
+insert into t (id,a) values (70,52);
+insert into t (id,a) values (70,53);
+insert into t (id,a) values (70,54);
+insert into t (id,a) values (70,55);
+insert into t (id,a) values (70,56);
+insert into t (id,a) values (70,57);
+insert into t (id,a) values (70,58);
+insert into t (id,a) values (70,59);
+insert into t (id,a) values (70,60);
+insert into t (id,a) values (70,61);
+insert into t (id,a) values (70,62);
+insert into t (id,a) values (70,63);
+insert into t (id,a) values (70,64);
+insert into t (id,a) values (70,65);
+insert into t (id,a) values (70,66);
+insert into t (id,a) values (70,67);
+insert into t (id,a) values (70,68);
+insert into t (id,a) values (70,69);
+insert into t (id,a) values (70,70);
+insert into t (id,a) values (70,71);
+insert into t (id,a) values (70,72);
+insert into t (id,a) values (70,73);
+insert into t (id,a) values (70,74);
+insert into t (id,a) values (70,75);
+insert into t (id,a) values (70,76);
+insert into t (id,a) values (70,77);
+insert into t (id,a) values (70,78);
+insert into t (id,a) values (70,79);
+insert into t (id,a) values (70,80);
+insert into t (id,a) values (70,81);
+insert into t (id,a) values (70,82);
+insert into t (id,a) values (70,83);
+insert into t (id,a) values (70,84);
+insert into t (id,a) values (70,85);
+insert into t (id,a) values (70,86);
+insert into t (id,a) values (70,87);
+insert into t (id,a) values (70,88);
+insert into t (id,a) values (70,89);
+insert into t (id,a) values (70,90);
+insert into t (id,a) values (70,91);
+insert into t (id,a) values (70,92);
+insert into t (id,a) values (70,93);
+insert into t (id,a) values (70,94);
+insert into t (id,a) values (70,95);
+insert into t (id,a) values (70,96);
+insert into t (id,a) values (70,97);
+insert into t (id,a) values (70,98);
+insert into t (id,a) values (70,99);
+insert into t (id,a) values (71,0);
+insert into t (id,a) values (71,1);
+insert into t (id,a) values (71,2);
+insert into t (id,a) values (71,3);
+insert into t (id,a) values (71,4);
+insert into t (id,a) values (71,5);
+insert into t (id,a) values (71,6);
+insert into t (id,a) values (71,7);
+insert into t (id,a) values (71,8);
+insert into t (id,a) values (71,9);
+insert into t (id,a) values (71,10);
+insert into t (id,a) values (71,11);
+insert into t (id,a) values (71,12);
+insert into t (id,a) values (71,13);
+insert into t (id,a) values (71,14);
+insert into t (id,a) values (71,15);
+insert into t (id,a) values (71,16);
+insert into t (id,a) values (71,17);
+insert into t (id,a) values (71,18);
+insert into t (id,a) values (71,19);
+insert into t (id,a) values (71,20);
+insert into t (id,a) values (71,21);
+insert into t (id,a) values (71,22);
+insert into t (id,a) values (71,23);
+insert into t (id,a) values (71,24);
+insert into t (id,a) values (71,25);
+insert into t (id,a) values (71,26);
+insert into t (id,a) values (71,27);
+insert into t (id,a) values (71,28);
+insert into t (id,a) values (71,29);
+insert into t (id,a) values (71,30);
+insert into t (id,a) values (71,31);
+insert into t (id,a) values (71,32);
+insert into t (id,a) values (71,33);
+insert into t (id,a) values (71,34);
+insert into t (id,a) values (71,35);
+insert into t (id,a) values (71,36);
+insert into t (id,a) values (71,37);
+insert into t (id,a) values (71,38);
+insert into t (id,a) values (71,39);
+insert into t (id,a) values (71,40);
+insert into t (id,a) values (71,41);
+insert into t (id,a) values (71,42);
+insert into t (id,a) values (71,43);
+insert into t (id,a) values (71,44);
+insert into t (id,a) values (71,45);
+insert into t (id,a) values (71,46);
+insert into t (id,a) values (71,47);
+insert into t (id,a) values (71,48);
+insert into t (id,a) values (71,49);
+insert into t (id,a) values (71,50);
+insert into t (id,a) values (71,51);
+insert into t (id,a) values (71,52);
+insert into t (id,a) values (71,53);
+insert into t (id,a) values (71,54);
+insert into t (id,a) values (71,55);
+insert into t (id,a) values (71,56);
+insert into t (id,a) values (71,57);
+insert into t (id,a) values (71,58);
+insert into t (id,a) values (71,59);
+insert into t (id,a) values (71,60);
+insert into t (id,a) values (71,61);
+insert into t (id,a) values (71,62);
+insert into t (id,a) values (71,63);
+insert into t (id,a) values (71,64);
+insert into t (id,a) values (71,65);
+insert into t (id,a) values (71,66);
+insert into t (id,a) values (71,67);
+insert into t (id,a) values (71,68);
+insert into t (id,a) values (71,69);
+insert into t (id,a) values (71,70);
+insert into t (id,a) values (71,71);
+insert into t (id,a) values (71,72);
+insert into t (id,a) values (71,73);
+insert into t (id,a) values (71,74);
+insert into t (id,a) values (71,75);
+insert into t (id,a) values (71,76);
+insert into t (id,a) values (71,77);
+insert into t (id,a) values (71,78);
+insert into t (id,a) values (71,79);
+insert into t (id,a) values (71,80);
+insert into t (id,a) values (71,81);
+insert into t (id,a) values (71,82);
+insert into t (id,a) values (71,83);
+insert into t (id,a) values (71,84);
+insert into t (id,a) values (71,85);
+insert into t (id,a) values (71,86);
+insert into t (id,a) values (71,87);
+insert into t (id,a) values (71,88);
+insert into t (id,a) values (71,89);
+insert into t (id,a) values (71,90);
+insert into t (id,a) values (71,91);
+insert into t (id,a) values (71,92);
+insert into t (id,a) values (71,93);
+insert into t (id,a) values (71,94);
+insert into t (id,a) values (71,95);
+insert into t (id,a) values (71,96);
+insert into t (id,a) values (71,97);
+insert into t (id,a) values (71,98);
+insert into t (id,a) values (71,99);
+insert into t (id,a) values (72,0);
+insert into t (id,a) values (72,1);
+insert into t (id,a) values (72,2);
+insert into t (id,a) values (72,3);
+insert into t (id,a) values (72,4);
+insert into t (id,a) values (72,5);
+insert into t (id,a) values (72,6);
+insert into t (id,a) values (72,7);
+insert into t (id,a) values (72,8);
+insert into t (id,a) values (72,9);
+insert into t (id,a) values (72,10);
+insert into t (id,a) values (72,11);
+insert into t (id,a) values (72,12);
+insert into t (id,a) values (72,13);
+insert into t (id,a) values (72,14);
+insert into t (id,a) values (72,15);
+insert into t (id,a) values (72,16);
+insert into t (id,a) values (72,17);
+insert into t (id,a) values (72,18);
+insert into t (id,a) values (72,19);
+insert into t (id,a) values (72,20);
+insert into t (id,a) values (72,21);
+insert into t (id,a) values (72,22);
+insert into t (id,a) values (72,23);
+insert into t (id,a) values (72,24);
+insert into t (id,a) values (72,25);
+insert into t (id,a) values (72,26);
+insert into t (id,a) values (72,27);
+insert into t (id,a) values (72,28);
+insert into t (id,a) values (72,29);
+insert into t (id,a) values (72,30);
+insert into t (id,a) values (72,31);
+insert into t (id,a) values (72,32);
+insert into t (id,a) values (72,33);
+insert into t (id,a) values (72,34);
+insert into t (id,a) values (72,35);
+insert into t (id,a) values (72,36);
+insert into t (id,a) values (72,37);
+insert into t (id,a) values (72,38);
+insert into t (id,a) values (72,39);
+insert into t (id,a) values (72,40);
+insert into t (id,a) values (72,41);
+insert into t (id,a) values (72,42);
+insert into t (id,a) values (72,43);
+insert into t (id,a) values (72,44);
+insert into t (id,a) values (72,45);
+insert into t (id,a) values (72,46);
+insert into t (id,a) values (72,47);
+insert into t (id,a) values (72,48);
+insert into t (id,a) values (72,49);
+insert into t (id,a) values (72,50);
+insert into t (id,a) values (72,51);
+insert into t (id,a) values (72,52);
+insert into t (id,a) values (72,53);
+insert into t (id,a) values (72,54);
+insert into t (id,a) values (72,55);
+insert into t (id,a) values (72,56);
+insert into t (id,a) values (72,57);
+insert into t (id,a) values (72,58);
+insert into t (id,a) values (72,59);
+insert into t (id,a) values (72,60);
+insert into t (id,a) values (72,61);
+insert into t (id,a) values (72,62);
+insert into t (id,a) values (72,63);
+insert into t (id,a) values (72,64);
+insert into t (id,a) values (72,65);
+insert into t (id,a) values (72,66);
+insert into t (id,a) values (72,67);
+insert into t (id,a) values (72,68);
+insert into t (id,a) values (72,69);
+insert into t (id,a) values (72,70);
+insert into t (id,a) values (72,71);
+insert into t (id,a) values (72,72);
+insert into t (id,a) values (72,73);
+insert into t (id,a) values (72,74);
+insert into t (id,a) values (72,75);
+insert into t (id,a) values (72,76);
+insert into t (id,a) values (72,77);
+insert into t (id,a) values (72,78);
+insert into t (id,a) values (72,79);
+insert into t (id,a) values (72,80);
+insert into t (id,a) values (72,81);
+insert into t (id,a) values (72,82);
+insert into t (id,a) values (72,83);
+insert into t (id,a) values (72,84);
+insert into t (id,a) values (72,85);
+insert into t (id,a) values (72,86);
+insert into t (id,a) values (72,87);
+insert into t (id,a) values (72,88);
+insert into t (id,a) values (72,89);
+insert into t (id,a) values (72,90);
+insert into t (id,a) values (72,91);
+insert into t (id,a) values (72,92);
+insert into t (id,a) values (72,93);
+insert into t (id,a) values (72,94);
+insert into t (id,a) values (72,95);
+insert into t (id,a) values (72,96);
+insert into t (id,a) values (72,97);
+insert into t (id,a) values (72,98);
+insert into t (id,a) values (72,99);
+insert into t (id,a) values (73,0);
+insert into t (id,a) values (73,1);
+insert into t (id,a) values (73,2);
+insert into t (id,a) values (73,3);
+insert into t (id,a) values (73,4);
+insert into t (id,a) values (73,5);
+insert into t (id,a) values (73,6);
+insert into t (id,a) values (73,7);
+insert into t (id,a) values (73,8);
+insert into t (id,a) values (73,9);
+insert into t (id,a) values (73,10);
+insert into t (id,a) values (73,11);
+insert into t (id,a) values (73,12);
+insert into t (id,a) values (73,13);
+insert into t (id,a) values (73,14);
+insert into t (id,a) values (73,15);
+insert into t (id,a) values (73,16);
+insert into t (id,a) values (73,17);
+insert into t (id,a) values (73,18);
+insert into t (id,a) values (73,19);
+insert into t (id,a) values (73,20);
+insert into t (id,a) values (73,21);
+insert into t (id,a) values (73,22);
+insert into t (id,a) values (73,23);
+insert into t (id,a) values (73,24);
+insert into t (id,a) values (73,25);
+insert into t (id,a) values (73,26);
+insert into t (id,a) values (73,27);
+insert into t (id,a) values (73,28);
+insert into t (id,a) values (73,29);
+insert into t (id,a) values (73,30);
+insert into t (id,a) values (73,31);
+insert into t (id,a) values (73,32);
+insert into t (id,a) values (73,33);
+insert into t (id,a) values (73,34);
+insert into t (id,a) values (73,35);
+insert into t (id,a) values (73,36);
+insert into t (id,a) values (73,37);
+insert into t (id,a) values (73,38);
+insert into t (id,a) values (73,39);
+insert into t (id,a) values (73,40);
+insert into t (id,a) values (73,41);
+insert into t (id,a) values (73,42);
+insert into t (id,a) values (73,43);
+insert into t (id,a) values (73,44);
+insert into t (id,a) values (73,45);
+insert into t (id,a) values (73,46);
+insert into t (id,a) values (73,47);
+insert into t (id,a) values (73,48);
+insert into t (id,a) values (73,49);
+insert into t (id,a) values (73,50);
+insert into t (id,a) values (73,51);
+insert into t (id,a) values (73,52);
+insert into t (id,a) values (73,53);
+insert into t (id,a) values (73,54);
+insert into t (id,a) values (73,55);
+insert into t (id,a) values (73,56);
+insert into t (id,a) values (73,57);
+insert into t (id,a) values (73,58);
+insert into t (id,a) values (73,59);
+insert into t (id,a) values (73,60);
+insert into t (id,a) values (73,61);
+insert into t (id,a) values (73,62);
+insert into t (id,a) values (73,63);
+insert into t (id,a) values (73,64);
+insert into t (id,a) values (73,65);
+insert into t (id,a) values (73,66);
+insert into t (id,a) values (73,67);
+insert into t (id,a) values (73,68);
+insert into t (id,a) values (73,69);
+insert into t (id,a) values (73,70);
+insert into t (id,a) values (73,71);
+insert into t (id,a) values (73,72);
+insert into t (id,a) values (73,73);
+insert into t (id,a) values (73,74);
+insert into t (id,a) values (73,75);
+insert into t (id,a) values (73,76);
+insert into t (id,a) values (73,77);
+insert into t (id,a) values (73,78);
+insert into t (id,a) values (73,79);
+insert into t (id,a) values (73,80);
+insert into t (id,a) values (73,81);
+insert into t (id,a) values (73,82);
+insert into t (id,a) values (73,83);
+insert into t (id,a) values (73,84);
+insert into t (id,a) values (73,85);
+insert into t (id,a) values (73,86);
+insert into t (id,a) values (73,87);
+insert into t (id,a) values (73,88);
+insert into t (id,a) values (73,89);
+insert into t (id,a) values (73,90);
+insert into t (id,a) values (73,91);
+insert into t (id,a) values (73,92);
+insert into t (id,a) values (73,93);
+insert into t (id,a) values (73,94);
+insert into t (id,a) values (73,95);
+insert into t (id,a) values (73,96);
+insert into t (id,a) values (73,97);
+insert into t (id,a) values (73,98);
+insert into t (id,a) values (73,99);
+insert into t (id,a) values (74,0);
+insert into t (id,a) values (74,1);
+insert into t (id,a) values (74,2);
+insert into t (id,a) values (74,3);
+insert into t (id,a) values (74,4);
+insert into t (id,a) values (74,5);
+insert into t (id,a) values (74,6);
+insert into t (id,a) values (74,7);
+insert into t (id,a) values (74,8);
+insert into t (id,a) values (74,9);
+insert into t (id,a) values (74,10);
+insert into t (id,a) values (74,11);
+insert into t (id,a) values (74,12);
+insert into t (id,a) values (74,13);
+insert into t (id,a) values (74,14);
+insert into t (id,a) values (74,15);
+insert into t (id,a) values (74,16);
+insert into t (id,a) values (74,17);
+insert into t (id,a) values (74,18);
+insert into t (id,a) values (74,19);
+insert into t (id,a) values (74,20);
+insert into t (id,a) values (74,21);
+insert into t (id,a) values (74,22);
+insert into t (id,a) values (74,23);
+insert into t (id,a) values (74,24);
+insert into t (id,a) values (74,25);
+insert into t (id,a) values (74,26);
+insert into t (id,a) values (74,27);
+insert into t (id,a) values (74,28);
+insert into t (id,a) values (74,29);
+insert into t (id,a) values (74,30);
+insert into t (id,a) values (74,31);
+insert into t (id,a) values (74,32);
+insert into t (id,a) values (74,33);
+insert into t (id,a) values (74,34);
+insert into t (id,a) values (74,35);
+insert into t (id,a) values (74,36);
+insert into t (id,a) values (74,37);
+insert into t (id,a) values (74,38);
+insert into t (id,a) values (74,39);
+insert into t (id,a) values (74,40);
+insert into t (id,a) values (74,41);
+insert into t (id,a) values (74,42);
+insert into t (id,a) values (74,43);
+insert into t (id,a) values (74,44);
+insert into t (id,a) values (74,45);
+insert into t (id,a) values (74,46);
+insert into t (id,a) values (74,47);
+insert into t (id,a) values (74,48);
+insert into t (id,a) values (74,49);
+insert into t (id,a) values (74,50);
+insert into t (id,a) values (74,51);
+insert into t (id,a) values (74,52);
+insert into t (id,a) values (74,53);
+insert into t (id,a) values (74,54);
+insert into t (id,a) values (74,55);
+insert into t (id,a) values (74,56);
+insert into t (id,a) values (74,57);
+insert into t (id,a) values (74,58);
+insert into t (id,a) values (74,59);
+insert into t (id,a) values (74,60);
+insert into t (id,a) values (74,61);
+insert into t (id,a) values (74,62);
+insert into t (id,a) values (74,63);
+insert into t (id,a) values (74,64);
+insert into t (id,a) values (74,65);
+insert into t (id,a) values (74,66);
+insert into t (id,a) values (74,67);
+insert into t (id,a) values (74,68);
+insert into t (id,a) values (74,69);
+insert into t (id,a) values (74,70);
+insert into t (id,a) values (74,71);
+insert into t (id,a) values (74,72);
+insert into t (id,a) values (74,73);
+insert into t (id,a) values (74,74);
+insert into t (id,a) values (74,75);
+insert into t (id,a) values (74,76);
+insert into t (id,a) values (74,77);
+insert into t (id,a) values (74,78);
+insert into t (id,a) values (74,79);
+insert into t (id,a) values (74,80);
+insert into t (id,a) values (74,81);
+insert into t (id,a) values (74,82);
+insert into t (id,a) values (74,83);
+insert into t (id,a) values (74,84);
+insert into t (id,a) values (74,85);
+insert into t (id,a) values (74,86);
+insert into t (id,a) values (74,87);
+insert into t (id,a) values (74,88);
+insert into t (id,a) values (74,89);
+insert into t (id,a) values (74,90);
+insert into t (id,a) values (74,91);
+insert into t (id,a) values (74,92);
+insert into t (id,a) values (74,93);
+insert into t (id,a) values (74,94);
+insert into t (id,a) values (74,95);
+insert into t (id,a) values (74,96);
+insert into t (id,a) values (74,97);
+insert into t (id,a) values (74,98);
+insert into t (id,a) values (74,99);
+insert into t (id,a) values (75,0);
+insert into t (id,a) values (75,1);
+insert into t (id,a) values (75,2);
+insert into t (id,a) values (75,3);
+insert into t (id,a) values (75,4);
+insert into t (id,a) values (75,5);
+insert into t (id,a) values (75,6);
+insert into t (id,a) values (75,7);
+insert into t (id,a) values (75,8);
+insert into t (id,a) values (75,9);
+insert into t (id,a) values (75,10);
+insert into t (id,a) values (75,11);
+insert into t (id,a) values (75,12);
+insert into t (id,a) values (75,13);
+insert into t (id,a) values (75,14);
+insert into t (id,a) values (75,15);
+insert into t (id,a) values (75,16);
+insert into t (id,a) values (75,17);
+insert into t (id,a) values (75,18);
+insert into t (id,a) values (75,19);
+insert into t (id,a) values (75,20);
+insert into t (id,a) values (75,21);
+insert into t (id,a) values (75,22);
+insert into t (id,a) values (75,23);
+insert into t (id,a) values (75,24);
+insert into t (id,a) values (75,25);
+insert into t (id,a) values (75,26);
+insert into t (id,a) values (75,27);
+insert into t (id,a) values (75,28);
+insert into t (id,a) values (75,29);
+insert into t (id,a) values (75,30);
+insert into t (id,a) values (75,31);
+insert into t (id,a) values (75,32);
+insert into t (id,a) values (75,33);
+insert into t (id,a) values (75,34);
+insert into t (id,a) values (75,35);
+insert into t (id,a) values (75,36);
+insert into t (id,a) values (75,37);
+insert into t (id,a) values (75,38);
+insert into t (id,a) values (75,39);
+insert into t (id,a) values (75,40);
+insert into t (id,a) values (75,41);
+insert into t (id,a) values (75,42);
+insert into t (id,a) values (75,43);
+insert into t (id,a) values (75,44);
+insert into t (id,a) values (75,45);
+insert into t (id,a) values (75,46);
+insert into t (id,a) values (75,47);
+insert into t (id,a) values (75,48);
+insert into t (id,a) values (75,49);
+insert into t (id,a) values (75,50);
+insert into t (id,a) values (75,51);
+insert into t (id,a) values (75,52);
+insert into t (id,a) values (75,53);
+insert into t (id,a) values (75,54);
+insert into t (id,a) values (75,55);
+insert into t (id,a) values (75,56);
+insert into t (id,a) values (75,57);
+insert into t (id,a) values (75,58);
+insert into t (id,a) values (75,59);
+insert into t (id,a) values (75,60);
+insert into t (id,a) values (75,61);
+insert into t (id,a) values (75,62);
+insert into t (id,a) values (75,63);
+insert into t (id,a) values (75,64);
+insert into t (id,a) values (75,65);
+insert into t (id,a) values (75,66);
+insert into t (id,a) values (75,67);
+insert into t (id,a) values (75,68);
+insert into t (id,a) values (75,69);
+insert into t (id,a) values (75,70);
+insert into t (id,a) values (75,71);
+insert into t (id,a) values (75,72);
+insert into t (id,a) values (75,73);
+insert into t (id,a) values (75,74);
+insert into t (id,a) values (75,75);
+insert into t (id,a) values (75,76);
+insert into t (id,a) values (75,77);
+insert into t (id,a) values (75,78);
+insert into t (id,a) values (75,79);
+insert into t (id,a) values (75,80);
+insert into t (id,a) values (75,81);
+insert into t (id,a) values (75,82);
+insert into t (id,a) values (75,83);
+insert into t (id,a) values (75,84);
+insert into t (id,a) values (75,85);
+insert into t (id,a) values (75,86);
+insert into t (id,a) values (75,87);
+insert into t (id,a) values (75,88);
+insert into t (id,a) values (75,89);
+insert into t (id,a) values (75,90);
+insert into t (id,a) values (75,91);
+insert into t (id,a) values (75,92);
+insert into t (id,a) values (75,93);
+insert into t (id,a) values (75,94);
+insert into t (id,a) values (75,95);
+insert into t (id,a) values (75,96);
+insert into t (id,a) values (75,97);
+insert into t (id,a) values (75,98);
+insert into t (id,a) values (75,99);
+insert into t (id,a) values (76,0);
+insert into t (id,a) values (76,1);
+insert into t (id,a) values (76,2);
+insert into t (id,a) values (76,3);
+insert into t (id,a) values (76,4);
+insert into t (id,a) values (76,5);
+insert into t (id,a) values (76,6);
+insert into t (id,a) values (76,7);
+insert into t (id,a) values (76,8);
+insert into t (id,a) values (76,9);
+insert into t (id,a) values (76,10);
+insert into t (id,a) values (76,11);
+insert into t (id,a) values (76,12);
+insert into t (id,a) values (76,13);
+insert into t (id,a) values (76,14);
+insert into t (id,a) values (76,15);
+insert into t (id,a) values (76,16);
+insert into t (id,a) values (76,17);
+insert into t (id,a) values (76,18);
+insert into t (id,a) values (76,19);
+insert into t (id,a) values (76,20);
+insert into t (id,a) values (76,21);
+insert into t (id,a) values (76,22);
+insert into t (id,a) values (76,23);
+insert into t (id,a) values (76,24);
+insert into t (id,a) values (76,25);
+insert into t (id,a) values (76,26);
+insert into t (id,a) values (76,27);
+insert into t (id,a) values (76,28);
+insert into t (id,a) values (76,29);
+insert into t (id,a) values (76,30);
+insert into t (id,a) values (76,31);
+insert into t (id,a) values (76,32);
+insert into t (id,a) values (76,33);
+insert into t (id,a) values (76,34);
+insert into t (id,a) values (76,35);
+insert into t (id,a) values (76,36);
+insert into t (id,a) values (76,37);
+insert into t (id,a) values (76,38);
+insert into t (id,a) values (76,39);
+insert into t (id,a) values (76,40);
+insert into t (id,a) values (76,41);
+insert into t (id,a) values (76,42);
+insert into t (id,a) values (76,43);
+insert into t (id,a) values (76,44);
+insert into t (id,a) values (76,45);
+insert into t (id,a) values (76,46);
+insert into t (id,a) values (76,47);
+insert into t (id,a) values (76,48);
+insert into t (id,a) values (76,49);
+insert into t (id,a) values (76,50);
+insert into t (id,a) values (76,51);
+insert into t (id,a) values (76,52);
+insert into t (id,a) values (76,53);
+insert into t (id,a) values (76,54);
+insert into t (id,a) values (76,55);
+insert into t (id,a) values (76,56);
+insert into t (id,a) values (76,57);
+insert into t (id,a) values (76,58);
+insert into t (id,a) values (76,59);
+insert into t (id,a) values (76,60);
+insert into t (id,a) values (76,61);
+insert into t (id,a) values (76,62);
+insert into t (id,a) values (76,63);
+insert into t (id,a) values (76,64);
+insert into t (id,a) values (76,65);
+insert into t (id,a) values (76,66);
+insert into t (id,a) values (76,67);
+insert into t (id,a) values (76,68);
+insert into t (id,a) values (76,69);
+insert into t (id,a) values (76,70);
+insert into t (id,a) values (76,71);
+insert into t (id,a) values (76,72);
+insert into t (id,a) values (76,73);
+insert into t (id,a) values (76,74);
+insert into t (id,a) values (76,75);
+insert into t (id,a) values (76,76);
+insert into t (id,a) values (76,77);
+insert into t (id,a) values (76,78);
+insert into t (id,a) values (76,79);
+insert into t (id,a) values (76,80);
+insert into t (id,a) values (76,81);
+insert into t (id,a) values (76,82);
+insert into t (id,a) values (76,83);
+insert into t (id,a) values (76,84);
+insert into t (id,a) values (76,85);
+insert into t (id,a) values (76,86);
+insert into t (id,a) values (76,87);
+insert into t (id,a) values (76,88);
+insert into t (id,a) values (76,89);
+insert into t (id,a) values (76,90);
+insert into t (id,a) values (76,91);
+insert into t (id,a) values (76,92);
+insert into t (id,a) values (76,93);
+insert into t (id,a) values (76,94);
+insert into t (id,a) values (76,95);
+insert into t (id,a) values (76,96);
+insert into t (id,a) values (76,97);
+insert into t (id,a) values (76,98);
+insert into t (id,a) values (76,99);
+insert into t (id,a) values (77,0);
+insert into t (id,a) values (77,1);
+insert into t (id,a) values (77,2);
+insert into t (id,a) values (77,3);
+insert into t (id,a) values (77,4);
+insert into t (id,a) values (77,5);
+insert into t (id,a) values (77,6);
+insert into t (id,a) values (77,7);
+insert into t (id,a) values (77,8);
+insert into t (id,a) values (77,9);
+insert into t (id,a) values (77,10);
+insert into t (id,a) values (77,11);
+insert into t (id,a) values (77,12);
+insert into t (id,a) values (77,13);
+insert into t (id,a) values (77,14);
+insert into t (id,a) values (77,15);
+insert into t (id,a) values (77,16);
+insert into t (id,a) values (77,17);
+insert into t (id,a) values (77,18);
+insert into t (id,a) values (77,19);
+insert into t (id,a) values (77,20);
+insert into t (id,a) values (77,21);
+insert into t (id,a) values (77,22);
+insert into t (id,a) values (77,23);
+insert into t (id,a) values (77,24);
+insert into t (id,a) values (77,25);
+insert into t (id,a) values (77,26);
+insert into t (id,a) values (77,27);
+insert into t (id,a) values (77,28);
+insert into t (id,a) values (77,29);
+insert into t (id,a) values (77,30);
+insert into t (id,a) values (77,31);
+insert into t (id,a) values (77,32);
+insert into t (id,a) values (77,33);
+insert into t (id,a) values (77,34);
+insert into t (id,a) values (77,35);
+insert into t (id,a) values (77,36);
+insert into t (id,a) values (77,37);
+insert into t (id,a) values (77,38);
+insert into t (id,a) values (77,39);
+insert into t (id,a) values (77,40);
+insert into t (id,a) values (77,41);
+insert into t (id,a) values (77,42);
+insert into t (id,a) values (77,43);
+insert into t (id,a) values (77,44);
+insert into t (id,a) values (77,45);
+insert into t (id,a) values (77,46);
+insert into t (id,a) values (77,47);
+insert into t (id,a) values (77,48);
+insert into t (id,a) values (77,49);
+insert into t (id,a) values (77,50);
+insert into t (id,a) values (77,51);
+insert into t (id,a) values (77,52);
+insert into t (id,a) values (77,53);
+insert into t (id,a) values (77,54);
+insert into t (id,a) values (77,55);
+insert into t (id,a) values (77,56);
+insert into t (id,a) values (77,57);
+insert into t (id,a) values (77,58);
+insert into t (id,a) values (77,59);
+insert into t (id,a) values (77,60);
+insert into t (id,a) values (77,61);
+insert into t (id,a) values (77,62);
+insert into t (id,a) values (77,63);
+insert into t (id,a) values (77,64);
+insert into t (id,a) values (77,65);
+insert into t (id,a) values (77,66);
+insert into t (id,a) values (77,67);
+insert into t (id,a) values (77,68);
+insert into t (id,a) values (77,69);
+insert into t (id,a) values (77,70);
+insert into t (id,a) values (77,71);
+insert into t (id,a) values (77,72);
+insert into t (id,a) values (77,73);
+insert into t (id,a) values (77,74);
+insert into t (id,a) values (77,75);
+insert into t (id,a) values (77,76);
+insert into t (id,a) values (77,77);
+insert into t (id,a) values (77,78);
+insert into t (id,a) values (77,79);
+insert into t (id,a) values (77,80);
+insert into t (id,a) values (77,81);
+insert into t (id,a) values (77,82);
+insert into t (id,a) values (77,83);
+insert into t (id,a) values (77,84);
+insert into t (id,a) values (77,85);
+insert into t (id,a) values (77,86);
+insert into t (id,a) values (77,87);
+insert into t (id,a) values (77,88);
+insert into t (id,a) values (77,89);
+insert into t (id,a) values (77,90);
+insert into t (id,a) values (77,91);
+insert into t (id,a) values (77,92);
+insert into t (id,a) values (77,93);
+insert into t (id,a) values (77,94);
+insert into t (id,a) values (77,95);
+insert into t (id,a) values (77,96);
+insert into t (id,a) values (77,97);
+insert into t (id,a) values (77,98);
+insert into t (id,a) values (77,99);
+insert into t (id,a) values (78,0);
+insert into t (id,a) values (78,1);
+insert into t (id,a) values (78,2);
+insert into t (id,a) values (78,3);
+insert into t (id,a) values (78,4);
+insert into t (id,a) values (78,5);
+insert into t (id,a) values (78,6);
+insert into t (id,a) values (78,7);
+insert into t (id,a) values (78,8);
+insert into t (id,a) values (78,9);
+insert into t (id,a) values (78,10);
+insert into t (id,a) values (78,11);
+insert into t (id,a) values (78,12);
+insert into t (id,a) values (78,13);
+insert into t (id,a) values (78,14);
+insert into t (id,a) values (78,15);
+insert into t (id,a) values (78,16);
+insert into t (id,a) values (78,17);
+insert into t (id,a) values (78,18);
+insert into t (id,a) values (78,19);
+insert into t (id,a) values (78,20);
+insert into t (id,a) values (78,21);
+insert into t (id,a) values (78,22);
+insert into t (id,a) values (78,23);
+insert into t (id,a) values (78,24);
+insert into t (id,a) values (78,25);
+insert into t (id,a) values (78,26);
+insert into t (id,a) values (78,27);
+insert into t (id,a) values (78,28);
+insert into t (id,a) values (78,29);
+insert into t (id,a) values (78,30);
+insert into t (id,a) values (78,31);
+insert into t (id,a) values (78,32);
+insert into t (id,a) values (78,33);
+insert into t (id,a) values (78,34);
+insert into t (id,a) values (78,35);
+insert into t (id,a) values (78,36);
+insert into t (id,a) values (78,37);
+insert into t (id,a) values (78,38);
+insert into t (id,a) values (78,39);
+insert into t (id,a) values (78,40);
+insert into t (id,a) values (78,41);
+insert into t (id,a) values (78,42);
+insert into t (id,a) values (78,43);
+insert into t (id,a) values (78,44);
+insert into t (id,a) values (78,45);
+insert into t (id,a) values (78,46);
+insert into t (id,a) values (78,47);
+insert into t (id,a) values (78,48);
+insert into t (id,a) values (78,49);
+insert into t (id,a) values (78,50);
+insert into t (id,a) values (78,51);
+insert into t (id,a) values (78,52);
+insert into t (id,a) values (78,53);
+insert into t (id,a) values (78,54);
+insert into t (id,a) values (78,55);
+insert into t (id,a) values (78,56);
+insert into t (id,a) values (78,57);
+insert into t (id,a) values (78,58);
+insert into t (id,a) values (78,59);
+insert into t (id,a) values (78,60);
+insert into t (id,a) values (78,61);
+insert into t (id,a) values (78,62);
+insert into t (id,a) values (78,63);
+insert into t (id,a) values (78,64);
+insert into t (id,a) values (78,65);
+insert into t (id,a) values (78,66);
+insert into t (id,a) values (78,67);
+insert into t (id,a) values (78,68);
+insert into t (id,a) values (78,69);
+insert into t (id,a) values (78,70);
+insert into t (id,a) values (78,71);
+insert into t (id,a) values (78,72);
+insert into t (id,a) values (78,73);
+insert into t (id,a) values (78,74);
+insert into t (id,a) values (78,75);
+insert into t (id,a) values (78,76);
+insert into t (id,a) values (78,77);
+insert into t (id,a) values (78,78);
+insert into t (id,a) values (78,79);
+insert into t (id,a) values (78,80);
+insert into t (id,a) values (78,81);
+insert into t (id,a) values (78,82);
+insert into t (id,a) values (78,83);
+insert into t (id,a) values (78,84);
+insert into t (id,a) values (78,85);
+insert into t (id,a) values (78,86);
+insert into t (id,a) values (78,87);
+insert into t (id,a) values (78,88);
+insert into t (id,a) values (78,89);
+insert into t (id,a) values (78,90);
+insert into t (id,a) values (78,91);
+insert into t (id,a) values (78,92);
+insert into t (id,a) values (78,93);
+insert into t (id,a) values (78,94);
+insert into t (id,a) values (78,95);
+insert into t (id,a) values (78,96);
+insert into t (id,a) values (78,97);
+insert into t (id,a) values (78,98);
+insert into t (id,a) values (78,99);
+insert into t (id,a) values (79,0);
+insert into t (id,a) values (79,1);
+insert into t (id,a) values (79,2);
+insert into t (id,a) values (79,3);
+insert into t (id,a) values (79,4);
+insert into t (id,a) values (79,5);
+insert into t (id,a) values (79,6);
+insert into t (id,a) values (79,7);
+insert into t (id,a) values (79,8);
+insert into t (id,a) values (79,9);
+insert into t (id,a) values (79,10);
+insert into t (id,a) values (79,11);
+insert into t (id,a) values (79,12);
+insert into t (id,a) values (79,13);
+insert into t (id,a) values (79,14);
+insert into t (id,a) values (79,15);
+insert into t (id,a) values (79,16);
+insert into t (id,a) values (79,17);
+insert into t (id,a) values (79,18);
+insert into t (id,a) values (79,19);
+insert into t (id,a) values (79,20);
+insert into t (id,a) values (79,21);
+insert into t (id,a) values (79,22);
+insert into t (id,a) values (79,23);
+insert into t (id,a) values (79,24);
+insert into t (id,a) values (79,25);
+insert into t (id,a) values (79,26);
+insert into t (id,a) values (79,27);
+insert into t (id,a) values (79,28);
+insert into t (id,a) values (79,29);
+insert into t (id,a) values (79,30);
+insert into t (id,a) values (79,31);
+insert into t (id,a) values (79,32);
+insert into t (id,a) values (79,33);
+insert into t (id,a) values (79,34);
+insert into t (id,a) values (79,35);
+insert into t (id,a) values (79,36);
+insert into t (id,a) values (79,37);
+insert into t (id,a) values (79,38);
+insert into t (id,a) values (79,39);
+insert into t (id,a) values (79,40);
+insert into t (id,a) values (79,41);
+insert into t (id,a) values (79,42);
+insert into t (id,a) values (79,43);
+insert into t (id,a) values (79,44);
+insert into t (id,a) values (79,45);
+insert into t (id,a) values (79,46);
+insert into t (id,a) values (79,47);
+insert into t (id,a) values (79,48);
+insert into t (id,a) values (79,49);
+insert into t (id,a) values (79,50);
+insert into t (id,a) values (79,51);
+insert into t (id,a) values (79,52);
+insert into t (id,a) values (79,53);
+insert into t (id,a) values (79,54);
+insert into t (id,a) values (79,55);
+insert into t (id,a) values (79,56);
+insert into t (id,a) values (79,57);
+insert into t (id,a) values (79,58);
+insert into t (id,a) values (79,59);
+insert into t (id,a) values (79,60);
+insert into t (id,a) values (79,61);
+insert into t (id,a) values (79,62);
+insert into t (id,a) values (79,63);
+insert into t (id,a) values (79,64);
+insert into t (id,a) values (79,65);
+insert into t (id,a) values (79,66);
+insert into t (id,a) values (79,67);
+insert into t (id,a) values (79,68);
+insert into t (id,a) values (79,69);
+insert into t (id,a) values (79,70);
+insert into t (id,a) values (79,71);
+insert into t (id,a) values (79,72);
+insert into t (id,a) values (79,73);
+insert into t (id,a) values (79,74);
+insert into t (id,a) values (79,75);
+insert into t (id,a) values (79,76);
+insert into t (id,a) values (79,77);
+insert into t (id,a) values (79,78);
+insert into t (id,a) values (79,79);
+insert into t (id,a) values (79,80);
+insert into t (id,a) values (79,81);
+insert into t (id,a) values (79,82);
+insert into t (id,a) values (79,83);
+insert into t (id,a) values (79,84);
+insert into t (id,a) values (79,85);
+insert into t (id,a) values (79,86);
+insert into t (id,a) values (79,87);
+insert into t (id,a) values (79,88);
+insert into t (id,a) values (79,89);
+insert into t (id,a) values (79,90);
+insert into t (id,a) values (79,91);
+insert into t (id,a) values (79,92);
+insert into t (id,a) values (79,93);
+insert into t (id,a) values (79,94);
+insert into t (id,a) values (79,95);
+insert into t (id,a) values (79,96);
+insert into t (id,a) values (79,97);
+insert into t (id,a) values (79,98);
+insert into t (id,a) values (79,99);
+insert into t (id,a) values (80,0);
+insert into t (id,a) values (80,1);
+insert into t (id,a) values (80,2);
+insert into t (id,a) values (80,3);
+insert into t (id,a) values (80,4);
+insert into t (id,a) values (80,5);
+insert into t (id,a) values (80,6);
+insert into t (id,a) values (80,7);
+insert into t (id,a) values (80,8);
+insert into t (id,a) values (80,9);
+insert into t (id,a) values (80,10);
+insert into t (id,a) values (80,11);
+insert into t (id,a) values (80,12);
+insert into t (id,a) values (80,13);
+insert into t (id,a) values (80,14);
+insert into t (id,a) values (80,15);
+insert into t (id,a) values (80,16);
+insert into t (id,a) values (80,17);
+insert into t (id,a) values (80,18);
+insert into t (id,a) values (80,19);
+insert into t (id,a) values (80,20);
+insert into t (id,a) values (80,21);
+insert into t (id,a) values (80,22);
+insert into t (id,a) values (80,23);
+insert into t (id,a) values (80,24);
+insert into t (id,a) values (80,25);
+insert into t (id,a) values (80,26);
+insert into t (id,a) values (80,27);
+insert into t (id,a) values (80,28);
+insert into t (id,a) values (80,29);
+insert into t (id,a) values (80,30);
+insert into t (id,a) values (80,31);
+insert into t (id,a) values (80,32);
+insert into t (id,a) values (80,33);
+insert into t (id,a) values (80,34);
+insert into t (id,a) values (80,35);
+insert into t (id,a) values (80,36);
+insert into t (id,a) values (80,37);
+insert into t (id,a) values (80,38);
+insert into t (id,a) values (80,39);
+insert into t (id,a) values (80,40);
+insert into t (id,a) values (80,41);
+insert into t (id,a) values (80,42);
+insert into t (id,a) values (80,43);
+insert into t (id,a) values (80,44);
+insert into t (id,a) values (80,45);
+insert into t (id,a) values (80,46);
+insert into t (id,a) values (80,47);
+insert into t (id,a) values (80,48);
+insert into t (id,a) values (80,49);
+insert into t (id,a) values (80,50);
+insert into t (id,a) values (80,51);
+insert into t (id,a) values (80,52);
+insert into t (id,a) values (80,53);
+insert into t (id,a) values (80,54);
+insert into t (id,a) values (80,55);
+insert into t (id,a) values (80,56);
+insert into t (id,a) values (80,57);
+insert into t (id,a) values (80,58);
+insert into t (id,a) values (80,59);
+insert into t (id,a) values (80,60);
+insert into t (id,a) values (80,61);
+insert into t (id,a) values (80,62);
+insert into t (id,a) values (80,63);
+insert into t (id,a) values (80,64);
+insert into t (id,a) values (80,65);
+insert into t (id,a) values (80,66);
+insert into t (id,a) values (80,67);
+insert into t (id,a) values (80,68);
+insert into t (id,a) values (80,69);
+insert into t (id,a) values (80,70);
+insert into t (id,a) values (80,71);
+insert into t (id,a) values (80,72);
+insert into t (id,a) values (80,73);
+insert into t (id,a) values (80,74);
+insert into t (id,a) values (80,75);
+insert into t (id,a) values (80,76);
+insert into t (id,a) values (80,77);
+insert into t (id,a) values (80,78);
+insert into t (id,a) values (80,79);
+insert into t (id,a) values (80,80);
+insert into t (id,a) values (80,81);
+insert into t (id,a) values (80,82);
+insert into t (id,a) values (80,83);
+insert into t (id,a) values (80,84);
+insert into t (id,a) values (80,85);
+insert into t (id,a) values (80,86);
+insert into t (id,a) values (80,87);
+insert into t (id,a) values (80,88);
+insert into t (id,a) values (80,89);
+insert into t (id,a) values (80,90);
+insert into t (id,a) values (80,91);
+insert into t (id,a) values (80,92);
+insert into t (id,a) values (80,93);
+insert into t (id,a) values (80,94);
+insert into t (id,a) values (80,95);
+insert into t (id,a) values (80,96);
+insert into t (id,a) values (80,97);
+insert into t (id,a) values (80,98);
+insert into t (id,a) values (80,99);
+insert into t (id,a) values (81,0);
+insert into t (id,a) values (81,1);
+insert into t (id,a) values (81,2);
+insert into t (id,a) values (81,3);
+insert into t (id,a) values (81,4);
+insert into t (id,a) values (81,5);
+insert into t (id,a) values (81,6);
+insert into t (id,a) values (81,7);
+insert into t (id,a) values (81,8);
+insert into t (id,a) values (81,9);
+insert into t (id,a) values (81,10);
+insert into t (id,a) values (81,11);
+insert into t (id,a) values (81,12);
+insert into t (id,a) values (81,13);
+insert into t (id,a) values (81,14);
+insert into t (id,a) values (81,15);
+insert into t (id,a) values (81,16);
+insert into t (id,a) values (81,17);
+insert into t (id,a) values (81,18);
+insert into t (id,a) values (81,19);
+insert into t (id,a) values (81,20);
+insert into t (id,a) values (81,21);
+insert into t (id,a) values (81,22);
+insert into t (id,a) values (81,23);
+insert into t (id,a) values (81,24);
+insert into t (id,a) values (81,25);
+insert into t (id,a) values (81,26);
+insert into t (id,a) values (81,27);
+insert into t (id,a) values (81,28);
+insert into t (id,a) values (81,29);
+insert into t (id,a) values (81,30);
+insert into t (id,a) values (81,31);
+insert into t (id,a) values (81,32);
+insert into t (id,a) values (81,33);
+insert into t (id,a) values (81,34);
+insert into t (id,a) values (81,35);
+insert into t (id,a) values (81,36);
+insert into t (id,a) values (81,37);
+insert into t (id,a) values (81,38);
+insert into t (id,a) values (81,39);
+insert into t (id,a) values (81,40);
+insert into t (id,a) values (81,41);
+insert into t (id,a) values (81,42);
+insert into t (id,a) values (81,43);
+insert into t (id,a) values (81,44);
+insert into t (id,a) values (81,45);
+insert into t (id,a) values (81,46);
+insert into t (id,a) values (81,47);
+insert into t (id,a) values (81,48);
+insert into t (id,a) values (81,49);
+insert into t (id,a) values (81,50);
+insert into t (id,a) values (81,51);
+insert into t (id,a) values (81,52);
+insert into t (id,a) values (81,53);
+insert into t (id,a) values (81,54);
+insert into t (id,a) values (81,55);
+insert into t (id,a) values (81,56);
+insert into t (id,a) values (81,57);
+insert into t (id,a) values (81,58);
+insert into t (id,a) values (81,59);
+insert into t (id,a) values (81,60);
+insert into t (id,a) values (81,61);
+insert into t (id,a) values (81,62);
+insert into t (id,a) values (81,63);
+insert into t (id,a) values (81,64);
+insert into t (id,a) values (81,65);
+insert into t (id,a) values (81,66);
+insert into t (id,a) values (81,67);
+insert into t (id,a) values (81,68);
+insert into t (id,a) values (81,69);
+insert into t (id,a) values (81,70);
+insert into t (id,a) values (81,71);
+insert into t (id,a) values (81,72);
+insert into t (id,a) values (81,73);
+insert into t (id,a) values (81,74);
+insert into t (id,a) values (81,75);
+insert into t (id,a) values (81,76);
+insert into t (id,a) values (81,77);
+insert into t (id,a) values (81,78);
+insert into t (id,a) values (81,79);
+insert into t (id,a) values (81,80);
+insert into t (id,a) values (81,81);
+insert into t (id,a) values (81,82);
+insert into t (id,a) values (81,83);
+insert into t (id,a) values (81,84);
+insert into t (id,a) values (81,85);
+insert into t (id,a) values (81,86);
+insert into t (id,a) values (81,87);
+insert into t (id,a) values (81,88);
+insert into t (id,a) values (81,89);
+insert into t (id,a) values (81,90);
+insert into t (id,a) values (81,91);
+insert into t (id,a) values (81,92);
+insert into t (id,a) values (81,93);
+insert into t (id,a) values (81,94);
+insert into t (id,a) values (81,95);
+insert into t (id,a) values (81,96);
+insert into t (id,a) values (81,97);
+insert into t (id,a) values (81,98);
+insert into t (id,a) values (81,99);
+insert into t (id,a) values (82,0);
+insert into t (id,a) values (82,1);
+insert into t (id,a) values (82,2);
+insert into t (id,a) values (82,3);
+insert into t (id,a) values (82,4);
+insert into t (id,a) values (82,5);
+insert into t (id,a) values (82,6);
+insert into t (id,a) values (82,7);
+insert into t (id,a) values (82,8);
+insert into t (id,a) values (82,9);
+insert into t (id,a) values (82,10);
+insert into t (id,a) values (82,11);
+insert into t (id,a) values (82,12);
+insert into t (id,a) values (82,13);
+insert into t (id,a) values (82,14);
+insert into t (id,a) values (82,15);
+insert into t (id,a) values (82,16);
+insert into t (id,a) values (82,17);
+insert into t (id,a) values (82,18);
+insert into t (id,a) values (82,19);
+insert into t (id,a) values (82,20);
+insert into t (id,a) values (82,21);
+insert into t (id,a) values (82,22);
+insert into t (id,a) values (82,23);
+insert into t (id,a) values (82,24);
+insert into t (id,a) values (82,25);
+insert into t (id,a) values (82,26);
+insert into t (id,a) values (82,27);
+insert into t (id,a) values (82,28);
+insert into t (id,a) values (82,29);
+insert into t (id,a) values (82,30);
+insert into t (id,a) values (82,31);
+insert into t (id,a) values (82,32);
+insert into t (id,a) values (82,33);
+insert into t (id,a) values (82,34);
+insert into t (id,a) values (82,35);
+insert into t (id,a) values (82,36);
+insert into t (id,a) values (82,37);
+insert into t (id,a) values (82,38);
+insert into t (id,a) values (82,39);
+insert into t (id,a) values (82,40);
+insert into t (id,a) values (82,41);
+insert into t (id,a) values (82,42);
+insert into t (id,a) values (82,43);
+insert into t (id,a) values (82,44);
+insert into t (id,a) values (82,45);
+insert into t (id,a) values (82,46);
+insert into t (id,a) values (82,47);
+insert into t (id,a) values (82,48);
+insert into t (id,a) values (82,49);
+insert into t (id,a) values (82,50);
+insert into t (id,a) values (82,51);
+insert into t (id,a) values (82,52);
+insert into t (id,a) values (82,53);
+insert into t (id,a) values (82,54);
+insert into t (id,a) values (82,55);
+insert into t (id,a) values (82,56);
+insert into t (id,a) values (82,57);
+insert into t (id,a) values (82,58);
+insert into t (id,a) values (82,59);
+insert into t (id,a) values (82,60);
+insert into t (id,a) values (82,61);
+insert into t (id,a) values (82,62);
+insert into t (id,a) values (82,63);
+insert into t (id,a) values (82,64);
+insert into t (id,a) values (82,65);
+insert into t (id,a) values (82,66);
+insert into t (id,a) values (82,67);
+insert into t (id,a) values (82,68);
+insert into t (id,a) values (82,69);
+insert into t (id,a) values (82,70);
+insert into t (id,a) values (82,71);
+insert into t (id,a) values (82,72);
+insert into t (id,a) values (82,73);
+insert into t (id,a) values (82,74);
+insert into t (id,a) values (82,75);
+insert into t (id,a) values (82,76);
+insert into t (id,a) values (82,77);
+insert into t (id,a) values (82,78);
+insert into t (id,a) values (82,79);
+insert into t (id,a) values (82,80);
+insert into t (id,a) values (82,81);
+insert into t (id,a) values (82,82);
+insert into t (id,a) values (82,83);
+insert into t (id,a) values (82,84);
+insert into t (id,a) values (82,85);
+insert into t (id,a) values (82,86);
+insert into t (id,a) values (82,87);
+insert into t (id,a) values (82,88);
+insert into t (id,a) values (82,89);
+insert into t (id,a) values (82,90);
+insert into t (id,a) values (82,91);
+insert into t (id,a) values (82,92);
+insert into t (id,a) values (82,93);
+insert into t (id,a) values (82,94);
+insert into t (id,a) values (82,95);
+insert into t (id,a) values (82,96);
+insert into t (id,a) values (82,97);
+insert into t (id,a) values (82,98);
+insert into t (id,a) values (82,99);
+insert into t (id,a) values (83,0);
+insert into t (id,a) values (83,1);
+insert into t (id,a) values (83,2);
+insert into t (id,a) values (83,3);
+insert into t (id,a) values (83,4);
+insert into t (id,a) values (83,5);
+insert into t (id,a) values (83,6);
+insert into t (id,a) values (83,7);
+insert into t (id,a) values (83,8);
+insert into t (id,a) values (83,9);
+insert into t (id,a) values (83,10);
+insert into t (id,a) values (83,11);
+insert into t (id,a) values (83,12);
+insert into t (id,a) values (83,13);
+insert into t (id,a) values (83,14);
+insert into t (id,a) values (83,15);
+insert into t (id,a) values (83,16);
+insert into t (id,a) values (83,17);
+insert into t (id,a) values (83,18);
+insert into t (id,a) values (83,19);
+insert into t (id,a) values (83,20);
+insert into t (id,a) values (83,21);
+insert into t (id,a) values (83,22);
+insert into t (id,a) values (83,23);
+insert into t (id,a) values (83,24);
+insert into t (id,a) values (83,25);
+insert into t (id,a) values (83,26);
+insert into t (id,a) values (83,27);
+insert into t (id,a) values (83,28);
+insert into t (id,a) values (83,29);
+insert into t (id,a) values (83,30);
+insert into t (id,a) values (83,31);
+insert into t (id,a) values (83,32);
+insert into t (id,a) values (83,33);
+insert into t (id,a) values (83,34);
+insert into t (id,a) values (83,35);
+insert into t (id,a) values (83,36);
+insert into t (id,a) values (83,37);
+insert into t (id,a) values (83,38);
+insert into t (id,a) values (83,39);
+insert into t (id,a) values (83,40);
+insert into t (id,a) values (83,41);
+insert into t (id,a) values (83,42);
+insert into t (id,a) values (83,43);
+insert into t (id,a) values (83,44);
+insert into t (id,a) values (83,45);
+insert into t (id,a) values (83,46);
+insert into t (id,a) values (83,47);
+insert into t (id,a) values (83,48);
+insert into t (id,a) values (83,49);
+insert into t (id,a) values (83,50);
+insert into t (id,a) values (83,51);
+insert into t (id,a) values (83,52);
+insert into t (id,a) values (83,53);
+insert into t (id,a) values (83,54);
+insert into t (id,a) values (83,55);
+insert into t (id,a) values (83,56);
+insert into t (id,a) values (83,57);
+insert into t (id,a) values (83,58);
+insert into t (id,a) values (83,59);
+insert into t (id,a) values (83,60);
+insert into t (id,a) values (83,61);
+insert into t (id,a) values (83,62);
+insert into t (id,a) values (83,63);
+insert into t (id,a) values (83,64);
+insert into t (id,a) values (83,65);
+insert into t (id,a) values (83,66);
+insert into t (id,a) values (83,67);
+insert into t (id,a) values (83,68);
+insert into t (id,a) values (83,69);
+insert into t (id,a) values (83,70);
+insert into t (id,a) values (83,71);
+insert into t (id,a) values (83,72);
+insert into t (id,a) values (83,73);
+insert into t (id,a) values (83,74);
+insert into t (id,a) values (83,75);
+insert into t (id,a) values (83,76);
+insert into t (id,a) values (83,77);
+insert into t (id,a) values (83,78);
+insert into t (id,a) values (83,79);
+insert into t (id,a) values (83,80);
+insert into t (id,a) values (83,81);
+insert into t (id,a) values (83,82);
+insert into t (id,a) values (83,83);
+insert into t (id,a) values (83,84);
+insert into t (id,a) values (83,85);
+insert into t (id,a) values (83,86);
+insert into t (id,a) values (83,87);
+insert into t (id,a) values (83,88);
+insert into t (id,a) values (83,89);
+insert into t (id,a) values (83,90);
+insert into t (id,a) values (83,91);
+insert into t (id,a) values (83,92);
+insert into t (id,a) values (83,93);
+insert into t (id,a) values (83,94);
+insert into t (id,a) values (83,95);
+insert into t (id,a) values (83,96);
+insert into t (id,a) values (83,97);
+insert into t (id,a) values (83,98);
+insert into t (id,a) values (83,99);
+insert into t (id,a) values (84,0);
+insert into t (id,a) values (84,1);
+insert into t (id,a) values (84,2);
+insert into t (id,a) values (84,3);
+insert into t (id,a) values (84,4);
+insert into t (id,a) values (84,5);
+insert into t (id,a) values (84,6);
+insert into t (id,a) values (84,7);
+insert into t (id,a) values (84,8);
+insert into t (id,a) values (84,9);
+insert into t (id,a) values (84,10);
+insert into t (id,a) values (84,11);
+insert into t (id,a) values (84,12);
+insert into t (id,a) values (84,13);
+insert into t (id,a) values (84,14);
+insert into t (id,a) values (84,15);
+insert into t (id,a) values (84,16);
+insert into t (id,a) values (84,17);
+insert into t (id,a) values (84,18);
+insert into t (id,a) values (84,19);
+insert into t (id,a) values (84,20);
+insert into t (id,a) values (84,21);
+insert into t (id,a) values (84,22);
+insert into t (id,a) values (84,23);
+insert into t (id,a) values (84,24);
+insert into t (id,a) values (84,25);
+insert into t (id,a) values (84,26);
+insert into t (id,a) values (84,27);
+insert into t (id,a) values (84,28);
+insert into t (id,a) values (84,29);
+insert into t (id,a) values (84,30);
+insert into t (id,a) values (84,31);
+insert into t (id,a) values (84,32);
+insert into t (id,a) values (84,33);
+insert into t (id,a) values (84,34);
+insert into t (id,a) values (84,35);
+insert into t (id,a) values (84,36);
+insert into t (id,a) values (84,37);
+insert into t (id,a) values (84,38);
+insert into t (id,a) values (84,39);
+insert into t (id,a) values (84,40);
+insert into t (id,a) values (84,41);
+insert into t (id,a) values (84,42);
+insert into t (id,a) values (84,43);
+insert into t (id,a) values (84,44);
+insert into t (id,a) values (84,45);
+insert into t (id,a) values (84,46);
+insert into t (id,a) values (84,47);
+insert into t (id,a) values (84,48);
+insert into t (id,a) values (84,49);
+insert into t (id,a) values (84,50);
+insert into t (id,a) values (84,51);
+insert into t (id,a) values (84,52);
+insert into t (id,a) values (84,53);
+insert into t (id,a) values (84,54);
+insert into t (id,a) values (84,55);
+insert into t (id,a) values (84,56);
+insert into t (id,a) values (84,57);
+insert into t (id,a) values (84,58);
+insert into t (id,a) values (84,59);
+insert into t (id,a) values (84,60);
+insert into t (id,a) values (84,61);
+insert into t (id,a) values (84,62);
+insert into t (id,a) values (84,63);
+insert into t (id,a) values (84,64);
+insert into t (id,a) values (84,65);
+insert into t (id,a) values (84,66);
+insert into t (id,a) values (84,67);
+insert into t (id,a) values (84,68);
+insert into t (id,a) values (84,69);
+insert into t (id,a) values (84,70);
+insert into t (id,a) values (84,71);
+insert into t (id,a) values (84,72);
+insert into t (id,a) values (84,73);
+insert into t (id,a) values (84,74);
+insert into t (id,a) values (84,75);
+insert into t (id,a) values (84,76);
+insert into t (id,a) values (84,77);
+insert into t (id,a) values (84,78);
+insert into t (id,a) values (84,79);
+insert into t (id,a) values (84,80);
+insert into t (id,a) values (84,81);
+insert into t (id,a) values (84,82);
+insert into t (id,a) values (84,83);
+insert into t (id,a) values (84,84);
+insert into t (id,a) values (84,85);
+insert into t (id,a) values (84,86);
+insert into t (id,a) values (84,87);
+insert into t (id,a) values (84,88);
+insert into t (id,a) values (84,89);
+insert into t (id,a) values (84,90);
+insert into t (id,a) values (84,91);
+insert into t (id,a) values (84,92);
+insert into t (id,a) values (84,93);
+insert into t (id,a) values (84,94);
+insert into t (id,a) values (84,95);
+insert into t (id,a) values (84,96);
+insert into t (id,a) values (84,97);
+insert into t (id,a) values (84,98);
+insert into t (id,a) values (84,99);
+insert into t (id,a) values (85,0);
+insert into t (id,a) values (85,1);
+insert into t (id,a) values (85,2);
+insert into t (id,a) values (85,3);
+insert into t (id,a) values (85,4);
+insert into t (id,a) values (85,5);
+insert into t (id,a) values (85,6);
+insert into t (id,a) values (85,7);
+insert into t (id,a) values (85,8);
+insert into t (id,a) values (85,9);
+insert into t (id,a) values (85,10);
+insert into t (id,a) values (85,11);
+insert into t (id,a) values (85,12);
+insert into t (id,a) values (85,13);
+insert into t (id,a) values (85,14);
+insert into t (id,a) values (85,15);
+insert into t (id,a) values (85,16);
+insert into t (id,a) values (85,17);
+insert into t (id,a) values (85,18);
+insert into t (id,a) values (85,19);
+insert into t (id,a) values (85,20);
+insert into t (id,a) values (85,21);
+insert into t (id,a) values (85,22);
+insert into t (id,a) values (85,23);
+insert into t (id,a) values (85,24);
+insert into t (id,a) values (85,25);
+insert into t (id,a) values (85,26);
+insert into t (id,a) values (85,27);
+insert into t (id,a) values (85,28);
+insert into t (id,a) values (85,29);
+insert into t (id,a) values (85,30);
+insert into t (id,a) values (85,31);
+insert into t (id,a) values (85,32);
+insert into t (id,a) values (85,33);
+insert into t (id,a) values (85,34);
+insert into t (id,a) values (85,35);
+insert into t (id,a) values (85,36);
+insert into t (id,a) values (85,37);
+insert into t (id,a) values (85,38);
+insert into t (id,a) values (85,39);
+insert into t (id,a) values (85,40);
+insert into t (id,a) values (85,41);
+insert into t (id,a) values (85,42);
+insert into t (id,a) values (85,43);
+insert into t (id,a) values (85,44);
+insert into t (id,a) values (85,45);
+insert into t (id,a) values (85,46);
+insert into t (id,a) values (85,47);
+insert into t (id,a) values (85,48);
+insert into t (id,a) values (85,49);
+insert into t (id,a) values (85,50);
+insert into t (id,a) values (85,51);
+insert into t (id,a) values (85,52);
+insert into t (id,a) values (85,53);
+insert into t (id,a) values (85,54);
+insert into t (id,a) values (85,55);
+insert into t (id,a) values (85,56);
+insert into t (id,a) values (85,57);
+insert into t (id,a) values (85,58);
+insert into t (id,a) values (85,59);
+insert into t (id,a) values (85,60);
+insert into t (id,a) values (85,61);
+insert into t (id,a) values (85,62);
+insert into t (id,a) values (85,63);
+insert into t (id,a) values (85,64);
+insert into t (id,a) values (85,65);
+insert into t (id,a) values (85,66);
+insert into t (id,a) values (85,67);
+insert into t (id,a) values (85,68);
+insert into t (id,a) values (85,69);
+insert into t (id,a) values (85,70);
+insert into t (id,a) values (85,71);
+insert into t (id,a) values (85,72);
+insert into t (id,a) values (85,73);
+insert into t (id,a) values (85,74);
+insert into t (id,a) values (85,75);
+insert into t (id,a) values (85,76);
+insert into t (id,a) values (85,77);
+insert into t (id,a) values (85,78);
+insert into t (id,a) values (85,79);
+insert into t (id,a) values (85,80);
+insert into t (id,a) values (85,81);
+insert into t (id,a) values (85,82);
+insert into t (id,a) values (85,83);
+insert into t (id,a) values (85,84);
+insert into t (id,a) values (85,85);
+insert into t (id,a) values (85,86);
+insert into t (id,a) values (85,87);
+insert into t (id,a) values (85,88);
+insert into t (id,a) values (85,89);
+insert into t (id,a) values (85,90);
+insert into t (id,a) values (85,91);
+insert into t (id,a) values (85,92);
+insert into t (id,a) values (85,93);
+insert into t (id,a) values (85,94);
+insert into t (id,a) values (85,95);
+insert into t (id,a) values (85,96);
+insert into t (id,a) values (85,97);
+insert into t (id,a) values (85,98);
+insert into t (id,a) values (85,99);
+insert into t (id,a) values (86,0);
+insert into t (id,a) values (86,1);
+insert into t (id,a) values (86,2);
+insert into t (id,a) values (86,3);
+insert into t (id,a) values (86,4);
+insert into t (id,a) values (86,5);
+insert into t (id,a) values (86,6);
+insert into t (id,a) values (86,7);
+insert into t (id,a) values (86,8);
+insert into t (id,a) values (86,9);
+insert into t (id,a) values (86,10);
+insert into t (id,a) values (86,11);
+insert into t (id,a) values (86,12);
+insert into t (id,a) values (86,13);
+insert into t (id,a) values (86,14);
+insert into t (id,a) values (86,15);
+insert into t (id,a) values (86,16);
+insert into t (id,a) values (86,17);
+insert into t (id,a) values (86,18);
+insert into t (id,a) values (86,19);
+insert into t (id,a) values (86,20);
+insert into t (id,a) values (86,21);
+insert into t (id,a) values (86,22);
+insert into t (id,a) values (86,23);
+insert into t (id,a) values (86,24);
+insert into t (id,a) values (86,25);
+insert into t (id,a) values (86,26);
+insert into t (id,a) values (86,27);
+insert into t (id,a) values (86,28);
+insert into t (id,a) values (86,29);
+insert into t (id,a) values (86,30);
+insert into t (id,a) values (86,31);
+insert into t (id,a) values (86,32);
+insert into t (id,a) values (86,33);
+insert into t (id,a) values (86,34);
+insert into t (id,a) values (86,35);
+insert into t (id,a) values (86,36);
+insert into t (id,a) values (86,37);
+insert into t (id,a) values (86,38);
+insert into t (id,a) values (86,39);
+insert into t (id,a) values (86,40);
+insert into t (id,a) values (86,41);
+insert into t (id,a) values (86,42);
+insert into t (id,a) values (86,43);
+insert into t (id,a) values (86,44);
+insert into t (id,a) values (86,45);
+insert into t (id,a) values (86,46);
+insert into t (id,a) values (86,47);
+insert into t (id,a) values (86,48);
+insert into t (id,a) values (86,49);
+insert into t (id,a) values (86,50);
+insert into t (id,a) values (86,51);
+insert into t (id,a) values (86,52);
+insert into t (id,a) values (86,53);
+insert into t (id,a) values (86,54);
+insert into t (id,a) values (86,55);
+insert into t (id,a) values (86,56);
+insert into t (id,a) values (86,57);
+insert into t (id,a) values (86,58);
+insert into t (id,a) values (86,59);
+insert into t (id,a) values (86,60);
+insert into t (id,a) values (86,61);
+insert into t (id,a) values (86,62);
+insert into t (id,a) values (86,63);
+insert into t (id,a) values (86,64);
+insert into t (id,a) values (86,65);
+insert into t (id,a) values (86,66);
+insert into t (id,a) values (86,67);
+insert into t (id,a) values (86,68);
+insert into t (id,a) values (86,69);
+insert into t (id,a) values (86,70);
+insert into t (id,a) values (86,71);
+insert into t (id,a) values (86,72);
+insert into t (id,a) values (86,73);
+insert into t (id,a) values (86,74);
+insert into t (id,a) values (86,75);
+insert into t (id,a) values (86,76);
+insert into t (id,a) values (86,77);
+insert into t (id,a) values (86,78);
+insert into t (id,a) values (86,79);
+insert into t (id,a) values (86,80);
+insert into t (id,a) values (86,81);
+insert into t (id,a) values (86,82);
+insert into t (id,a) values (86,83);
+insert into t (id,a) values (86,84);
+insert into t (id,a) values (86,85);
+insert into t (id,a) values (86,86);
+insert into t (id,a) values (86,87);
+insert into t (id,a) values (86,88);
+insert into t (id,a) values (86,89);
+insert into t (id,a) values (86,90);
+insert into t (id,a) values (86,91);
+insert into t (id,a) values (86,92);
+insert into t (id,a) values (86,93);
+insert into t (id,a) values (86,94);
+insert into t (id,a) values (86,95);
+insert into t (id,a) values (86,96);
+insert into t (id,a) values (86,97);
+insert into t (id,a) values (86,98);
+insert into t (id,a) values (86,99);
+insert into t (id,a) values (87,0);
+insert into t (id,a) values (87,1);
+insert into t (id,a) values (87,2);
+insert into t (id,a) values (87,3);
+insert into t (id,a) values (87,4);
+insert into t (id,a) values (87,5);
+insert into t (id,a) values (87,6);
+insert into t (id,a) values (87,7);
+insert into t (id,a) values (87,8);
+insert into t (id,a) values (87,9);
+insert into t (id,a) values (87,10);
+insert into t (id,a) values (87,11);
+insert into t (id,a) values (87,12);
+insert into t (id,a) values (87,13);
+insert into t (id,a) values (87,14);
+insert into t (id,a) values (87,15);
+insert into t (id,a) values (87,16);
+insert into t (id,a) values (87,17);
+insert into t (id,a) values (87,18);
+insert into t (id,a) values (87,19);
+insert into t (id,a) values (87,20);
+insert into t (id,a) values (87,21);
+insert into t (id,a) values (87,22);
+insert into t (id,a) values (87,23);
+insert into t (id,a) values (87,24);
+insert into t (id,a) values (87,25);
+insert into t (id,a) values (87,26);
+insert into t (id,a) values (87,27);
+insert into t (id,a) values (87,28);
+insert into t (id,a) values (87,29);
+insert into t (id,a) values (87,30);
+insert into t (id,a) values (87,31);
+insert into t (id,a) values (87,32);
+insert into t (id,a) values (87,33);
+insert into t (id,a) values (87,34);
+insert into t (id,a) values (87,35);
+insert into t (id,a) values (87,36);
+insert into t (id,a) values (87,37);
+insert into t (id,a) values (87,38);
+insert into t (id,a) values (87,39);
+insert into t (id,a) values (87,40);
+insert into t (id,a) values (87,41);
+insert into t (id,a) values (87,42);
+insert into t (id,a) values (87,43);
+insert into t (id,a) values (87,44);
+insert into t (id,a) values (87,45);
+insert into t (id,a) values (87,46);
+insert into t (id,a) values (87,47);
+insert into t (id,a) values (87,48);
+insert into t (id,a) values (87,49);
+insert into t (id,a) values (87,50);
+insert into t (id,a) values (87,51);
+insert into t (id,a) values (87,52);
+insert into t (id,a) values (87,53);
+insert into t (id,a) values (87,54);
+insert into t (id,a) values (87,55);
+insert into t (id,a) values (87,56);
+insert into t (id,a) values (87,57);
+insert into t (id,a) values (87,58);
+insert into t (id,a) values (87,59);
+insert into t (id,a) values (87,60);
+insert into t (id,a) values (87,61);
+insert into t (id,a) values (87,62);
+insert into t (id,a) values (87,63);
+insert into t (id,a) values (87,64);
+insert into t (id,a) values (87,65);
+insert into t (id,a) values (87,66);
+insert into t (id,a) values (87,67);
+insert into t (id,a) values (87,68);
+insert into t (id,a) values (87,69);
+insert into t (id,a) values (87,70);
+insert into t (id,a) values (87,71);
+insert into t (id,a) values (87,72);
+insert into t (id,a) values (87,73);
+insert into t (id,a) values (87,74);
+insert into t (id,a) values (87,75);
+insert into t (id,a) values (87,76);
+insert into t (id,a) values (87,77);
+insert into t (id,a) values (87,78);
+insert into t (id,a) values (87,79);
+insert into t (id,a) values (87,80);
+insert into t (id,a) values (87,81);
+insert into t (id,a) values (87,82);
+insert into t (id,a) values (87,83);
+insert into t (id,a) values (87,84);
+insert into t (id,a) values (87,85);
+insert into t (id,a) values (87,86);
+insert into t (id,a) values (87,87);
+insert into t (id,a) values (87,88);
+insert into t (id,a) values (87,89);
+insert into t (id,a) values (87,90);
+insert into t (id,a) values (87,91);
+insert into t (id,a) values (87,92);
+insert into t (id,a) values (87,93);
+insert into t (id,a) values (87,94);
+insert into t (id,a) values (87,95);
+insert into t (id,a) values (87,96);
+insert into t (id,a) values (87,97);
+insert into t (id,a) values (87,98);
+insert into t (id,a) values (87,99);
+insert into t (id,a) values (88,0);
+insert into t (id,a) values (88,1);
+insert into t (id,a) values (88,2);
+insert into t (id,a) values (88,3);
+insert into t (id,a) values (88,4);
+insert into t (id,a) values (88,5);
+insert into t (id,a) values (88,6);
+insert into t (id,a) values (88,7);
+insert into t (id,a) values (88,8);
+insert into t (id,a) values (88,9);
+insert into t (id,a) values (88,10);
+insert into t (id,a) values (88,11);
+insert into t (id,a) values (88,12);
+insert into t (id,a) values (88,13);
+insert into t (id,a) values (88,14);
+insert into t (id,a) values (88,15);
+insert into t (id,a) values (88,16);
+insert into t (id,a) values (88,17);
+insert into t (id,a) values (88,18);
+insert into t (id,a) values (88,19);
+insert into t (id,a) values (88,20);
+insert into t (id,a) values (88,21);
+insert into t (id,a) values (88,22);
+insert into t (id,a) values (88,23);
+insert into t (id,a) values (88,24);
+insert into t (id,a) values (88,25);
+insert into t (id,a) values (88,26);
+insert into t (id,a) values (88,27);
+insert into t (id,a) values (88,28);
+insert into t (id,a) values (88,29);
+insert into t (id,a) values (88,30);
+insert into t (id,a) values (88,31);
+insert into t (id,a) values (88,32);
+insert into t (id,a) values (88,33);
+insert into t (id,a) values (88,34);
+insert into t (id,a) values (88,35);
+insert into t (id,a) values (88,36);
+insert into t (id,a) values (88,37);
+insert into t (id,a) values (88,38);
+insert into t (id,a) values (88,39);
+insert into t (id,a) values (88,40);
+insert into t (id,a) values (88,41);
+insert into t (id,a) values (88,42);
+insert into t (id,a) values (88,43);
+insert into t (id,a) values (88,44);
+insert into t (id,a) values (88,45);
+insert into t (id,a) values (88,46);
+insert into t (id,a) values (88,47);
+insert into t (id,a) values (88,48);
+insert into t (id,a) values (88,49);
+insert into t (id,a) values (88,50);
+insert into t (id,a) values (88,51);
+insert into t (id,a) values (88,52);
+insert into t (id,a) values (88,53);
+insert into t (id,a) values (88,54);
+insert into t (id,a) values (88,55);
+insert into t (id,a) values (88,56);
+insert into t (id,a) values (88,57);
+insert into t (id,a) values (88,58);
+insert into t (id,a) values (88,59);
+insert into t (id,a) values (88,60);
+insert into t (id,a) values (88,61);
+insert into t (id,a) values (88,62);
+insert into t (id,a) values (88,63);
+insert into t (id,a) values (88,64);
+insert into t (id,a) values (88,65);
+insert into t (id,a) values (88,66);
+insert into t (id,a) values (88,67);
+insert into t (id,a) values (88,68);
+insert into t (id,a) values (88,69);
+insert into t (id,a) values (88,70);
+insert into t (id,a) values (88,71);
+insert into t (id,a) values (88,72);
+insert into t (id,a) values (88,73);
+insert into t (id,a) values (88,74);
+insert into t (id,a) values (88,75);
+insert into t (id,a) values (88,76);
+insert into t (id,a) values (88,77);
+insert into t (id,a) values (88,78);
+insert into t (id,a) values (88,79);
+insert into t (id,a) values (88,80);
+insert into t (id,a) values (88,81);
+insert into t (id,a) values (88,82);
+insert into t (id,a) values (88,83);
+insert into t (id,a) values (88,84);
+insert into t (id,a) values (88,85);
+insert into t (id,a) values (88,86);
+insert into t (id,a) values (88,87);
+insert into t (id,a) values (88,88);
+insert into t (id,a) values (88,89);
+insert into t (id,a) values (88,90);
+insert into t (id,a) values (88,91);
+insert into t (id,a) values (88,92);
+insert into t (id,a) values (88,93);
+insert into t (id,a) values (88,94);
+insert into t (id,a) values (88,95);
+insert into t (id,a) values (88,96);
+insert into t (id,a) values (88,97);
+insert into t (id,a) values (88,98);
+insert into t (id,a) values (88,99);
+insert into t (id,a) values (89,0);
+insert into t (id,a) values (89,1);
+insert into t (id,a) values (89,2);
+insert into t (id,a) values (89,3);
+insert into t (id,a) values (89,4);
+insert into t (id,a) values (89,5);
+insert into t (id,a) values (89,6);
+insert into t (id,a) values (89,7);
+insert into t (id,a) values (89,8);
+insert into t (id,a) values (89,9);
+insert into t (id,a) values (89,10);
+insert into t (id,a) values (89,11);
+insert into t (id,a) values (89,12);
+insert into t (id,a) values (89,13);
+insert into t (id,a) values (89,14);
+insert into t (id,a) values (89,15);
+insert into t (id,a) values (89,16);
+insert into t (id,a) values (89,17);
+insert into t (id,a) values (89,18);
+insert into t (id,a) values (89,19);
+insert into t (id,a) values (89,20);
+insert into t (id,a) values (89,21);
+insert into t (id,a) values (89,22);
+insert into t (id,a) values (89,23);
+insert into t (id,a) values (89,24);
+insert into t (id,a) values (89,25);
+insert into t (id,a) values (89,26);
+insert into t (id,a) values (89,27);
+insert into t (id,a) values (89,28);
+insert into t (id,a) values (89,29);
+insert into t (id,a) values (89,30);
+insert into t (id,a) values (89,31);
+insert into t (id,a) values (89,32);
+insert into t (id,a) values (89,33);
+insert into t (id,a) values (89,34);
+insert into t (id,a) values (89,35);
+insert into t (id,a) values (89,36);
+insert into t (id,a) values (89,37);
+insert into t (id,a) values (89,38);
+insert into t (id,a) values (89,39);
+insert into t (id,a) values (89,40);
+insert into t (id,a) values (89,41);
+insert into t (id,a) values (89,42);
+insert into t (id,a) values (89,43);
+insert into t (id,a) values (89,44);
+insert into t (id,a) values (89,45);
+insert into t (id,a) values (89,46);
+insert into t (id,a) values (89,47);
+insert into t (id,a) values (89,48);
+insert into t (id,a) values (89,49);
+insert into t (id,a) values (89,50);
+insert into t (id,a) values (89,51);
+insert into t (id,a) values (89,52);
+insert into t (id,a) values (89,53);
+insert into t (id,a) values (89,54);
+insert into t (id,a) values (89,55);
+insert into t (id,a) values (89,56);
+insert into t (id,a) values (89,57);
+insert into t (id,a) values (89,58);
+insert into t (id,a) values (89,59);
+insert into t (id,a) values (89,60);
+insert into t (id,a) values (89,61);
+insert into t (id,a) values (89,62);
+insert into t (id,a) values (89,63);
+insert into t (id,a) values (89,64);
+insert into t (id,a) values (89,65);
+insert into t (id,a) values (89,66);
+insert into t (id,a) values (89,67);
+insert into t (id,a) values (89,68);
+insert into t (id,a) values (89,69);
+insert into t (id,a) values (89,70);
+insert into t (id,a) values (89,71);
+insert into t (id,a) values (89,72);
+insert into t (id,a) values (89,73);
+insert into t (id,a) values (89,74);
+insert into t (id,a) values (89,75);
+insert into t (id,a) values (89,76);
+insert into t (id,a) values (89,77);
+insert into t (id,a) values (89,78);
+insert into t (id,a) values (89,79);
+insert into t (id,a) values (89,80);
+insert into t (id,a) values (89,81);
+insert into t (id,a) values (89,82);
+insert into t (id,a) values (89,83);
+insert into t (id,a) values (89,84);
+insert into t (id,a) values (89,85);
+insert into t (id,a) values (89,86);
+insert into t (id,a) values (89,87);
+insert into t (id,a) values (89,88);
+insert into t (id,a) values (89,89);
+insert into t (id,a) values (89,90);
+insert into t (id,a) values (89,91);
+insert into t (id,a) values (89,92);
+insert into t (id,a) values (89,93);
+insert into t (id,a) values (89,94);
+insert into t (id,a) values (89,95);
+insert into t (id,a) values (89,96);
+insert into t (id,a) values (89,97);
+insert into t (id,a) values (89,98);
+insert into t (id,a) values (89,99);
+insert into t (id,a) values (90,0);
+insert into t (id,a) values (90,1);
+insert into t (id,a) values (90,2);
+insert into t (id,a) values (90,3);
+insert into t (id,a) values (90,4);
+insert into t (id,a) values (90,5);
+insert into t (id,a) values (90,6);
+insert into t (id,a) values (90,7);
+insert into t (id,a) values (90,8);
+insert into t (id,a) values (90,9);
+insert into t (id,a) values (90,10);
+insert into t (id,a) values (90,11);
+insert into t (id,a) values (90,12);
+insert into t (id,a) values (90,13);
+insert into t (id,a) values (90,14);
+insert into t (id,a) values (90,15);
+insert into t (id,a) values (90,16);
+insert into t (id,a) values (90,17);
+insert into t (id,a) values (90,18);
+insert into t (id,a) values (90,19);
+insert into t (id,a) values (90,20);
+insert into t (id,a) values (90,21);
+insert into t (id,a) values (90,22);
+insert into t (id,a) values (90,23);
+insert into t (id,a) values (90,24);
+insert into t (id,a) values (90,25);
+insert into t (id,a) values (90,26);
+insert into t (id,a) values (90,27);
+insert into t (id,a) values (90,28);
+insert into t (id,a) values (90,29);
+insert into t (id,a) values (90,30);
+insert into t (id,a) values (90,31);
+insert into t (id,a) values (90,32);
+insert into t (id,a) values (90,33);
+insert into t (id,a) values (90,34);
+insert into t (id,a) values (90,35);
+insert into t (id,a) values (90,36);
+insert into t (id,a) values (90,37);
+insert into t (id,a) values (90,38);
+insert into t (id,a) values (90,39);
+insert into t (id,a) values (90,40);
+insert into t (id,a) values (90,41);
+insert into t (id,a) values (90,42);
+insert into t (id,a) values (90,43);
+insert into t (id,a) values (90,44);
+insert into t (id,a) values (90,45);
+insert into t (id,a) values (90,46);
+insert into t (id,a) values (90,47);
+insert into t (id,a) values (90,48);
+insert into t (id,a) values (90,49);
+insert into t (id,a) values (90,50);
+insert into t (id,a) values (90,51);
+insert into t (id,a) values (90,52);
+insert into t (id,a) values (90,53);
+insert into t (id,a) values (90,54);
+insert into t (id,a) values (90,55);
+insert into t (id,a) values (90,56);
+insert into t (id,a) values (90,57);
+insert into t (id,a) values (90,58);
+insert into t (id,a) values (90,59);
+insert into t (id,a) values (90,60);
+insert into t (id,a) values (90,61);
+insert into t (id,a) values (90,62);
+insert into t (id,a) values (90,63);
+insert into t (id,a) values (90,64);
+insert into t (id,a) values (90,65);
+insert into t (id,a) values (90,66);
+insert into t (id,a) values (90,67);
+insert into t (id,a) values (90,68);
+insert into t (id,a) values (90,69);
+insert into t (id,a) values (90,70);
+insert into t (id,a) values (90,71);
+insert into t (id,a) values (90,72);
+insert into t (id,a) values (90,73);
+insert into t (id,a) values (90,74);
+insert into t (id,a) values (90,75);
+insert into t (id,a) values (90,76);
+insert into t (id,a) values (90,77);
+insert into t (id,a) values (90,78);
+insert into t (id,a) values (90,79);
+insert into t (id,a) values (90,80);
+insert into t (id,a) values (90,81);
+insert into t (id,a) values (90,82);
+insert into t (id,a) values (90,83);
+insert into t (id,a) values (90,84);
+insert into t (id,a) values (90,85);
+insert into t (id,a) values (90,86);
+insert into t (id,a) values (90,87);
+insert into t (id,a) values (90,88);
+insert into t (id,a) values (90,89);
+insert into t (id,a) values (90,90);
+insert into t (id,a) values (90,91);
+insert into t (id,a) values (90,92);
+insert into t (id,a) values (90,93);
+insert into t (id,a) values (90,94);
+insert into t (id,a) values (90,95);
+insert into t (id,a) values (90,96);
+insert into t (id,a) values (90,97);
+insert into t (id,a) values (90,98);
+insert into t (id,a) values (90,99);
+insert into t (id,a) values (91,0);
+insert into t (id,a) values (91,1);
+insert into t (id,a) values (91,2);
+insert into t (id,a) values (91,3);
+insert into t (id,a) values (91,4);
+insert into t (id,a) values (91,5);
+insert into t (id,a) values (91,6);
+insert into t (id,a) values (91,7);
+insert into t (id,a) values (91,8);
+insert into t (id,a) values (91,9);
+insert into t (id,a) values (91,10);
+insert into t (id,a) values (91,11);
+insert into t (id,a) values (91,12);
+insert into t (id,a) values (91,13);
+insert into t (id,a) values (91,14);
+insert into t (id,a) values (91,15);
+insert into t (id,a) values (91,16);
+insert into t (id,a) values (91,17);
+insert into t (id,a) values (91,18);
+insert into t (id,a) values (91,19);
+insert into t (id,a) values (91,20);
+insert into t (id,a) values (91,21);
+insert into t (id,a) values (91,22);
+insert into t (id,a) values (91,23);
+insert into t (id,a) values (91,24);
+insert into t (id,a) values (91,25);
+insert into t (id,a) values (91,26);
+insert into t (id,a) values (91,27);
+insert into t (id,a) values (91,28);
+insert into t (id,a) values (91,29);
+insert into t (id,a) values (91,30);
+insert into t (id,a) values (91,31);
+insert into t (id,a) values (91,32);
+insert into t (id,a) values (91,33);
+insert into t (id,a) values (91,34);
+insert into t (id,a) values (91,35);
+insert into t (id,a) values (91,36);
+insert into t (id,a) values (91,37);
+insert into t (id,a) values (91,38);
+insert into t (id,a) values (91,39);
+insert into t (id,a) values (91,40);
+insert into t (id,a) values (91,41);
+insert into t (id,a) values (91,42);
+insert into t (id,a) values (91,43);
+insert into t (id,a) values (91,44);
+insert into t (id,a) values (91,45);
+insert into t (id,a) values (91,46);
+insert into t (id,a) values (91,47);
+insert into t (id,a) values (91,48);
+insert into t (id,a) values (91,49);
+insert into t (id,a) values (91,50);
+insert into t (id,a) values (91,51);
+insert into t (id,a) values (91,52);
+insert into t (id,a) values (91,53);
+insert into t (id,a) values (91,54);
+insert into t (id,a) values (91,55);
+insert into t (id,a) values (91,56);
+insert into t (id,a) values (91,57);
+insert into t (id,a) values (91,58);
+insert into t (id,a) values (91,59);
+insert into t (id,a) values (91,60);
+insert into t (id,a) values (91,61);
+insert into t (id,a) values (91,62);
+insert into t (id,a) values (91,63);
+insert into t (id,a) values (91,64);
+insert into t (id,a) values (91,65);
+insert into t (id,a) values (91,66);
+insert into t (id,a) values (91,67);
+insert into t (id,a) values (91,68);
+insert into t (id,a) values (91,69);
+insert into t (id,a) values (91,70);
+insert into t (id,a) values (91,71);
+insert into t (id,a) values (91,72);
+insert into t (id,a) values (91,73);
+insert into t (id,a) values (91,74);
+insert into t (id,a) values (91,75);
+insert into t (id,a) values (91,76);
+insert into t (id,a) values (91,77);
+insert into t (id,a) values (91,78);
+insert into t (id,a) values (91,79);
+insert into t (id,a) values (91,80);
+insert into t (id,a) values (91,81);
+insert into t (id,a) values (91,82);
+insert into t (id,a) values (91,83);
+insert into t (id,a) values (91,84);
+insert into t (id,a) values (91,85);
+insert into t (id,a) values (91,86);
+insert into t (id,a) values (91,87);
+insert into t (id,a) values (91,88);
+insert into t (id,a) values (91,89);
+insert into t (id,a) values (91,90);
+insert into t (id,a) values (91,91);
+insert into t (id,a) values (91,92);
+insert into t (id,a) values (91,93);
+insert into t (id,a) values (91,94);
+insert into t (id,a) values (91,95);
+insert into t (id,a) values (91,96);
+insert into t (id,a) values (91,97);
+insert into t (id,a) values (91,98);
+insert into t (id,a) values (91,99);
+insert into t (id,a) values (92,0);
+insert into t (id,a) values (92,1);
+insert into t (id,a) values (92,2);
+insert into t (id,a) values (92,3);
+insert into t (id,a) values (92,4);
+insert into t (id,a) values (92,5);
+insert into t (id,a) values (92,6);
+insert into t (id,a) values (92,7);
+insert into t (id,a) values (92,8);
+insert into t (id,a) values (92,9);
+insert into t (id,a) values (92,10);
+insert into t (id,a) values (92,11);
+insert into t (id,a) values (92,12);
+insert into t (id,a) values (92,13);
+insert into t (id,a) values (92,14);
+insert into t (id,a) values (92,15);
+insert into t (id,a) values (92,16);
+insert into t (id,a) values (92,17);
+insert into t (id,a) values (92,18);
+insert into t (id,a) values (92,19);
+insert into t (id,a) values (92,20);
+insert into t (id,a) values (92,21);
+insert into t (id,a) values (92,22);
+insert into t (id,a) values (92,23);
+insert into t (id,a) values (92,24);
+insert into t (id,a) values (92,25);
+insert into t (id,a) values (92,26);
+insert into t (id,a) values (92,27);
+insert into t (id,a) values (92,28);
+insert into t (id,a) values (92,29);
+insert into t (id,a) values (92,30);
+insert into t (id,a) values (92,31);
+insert into t (id,a) values (92,32);
+insert into t (id,a) values (92,33);
+insert into t (id,a) values (92,34);
+insert into t (id,a) values (92,35);
+insert into t (id,a) values (92,36);
+insert into t (id,a) values (92,37);
+insert into t (id,a) values (92,38);
+insert into t (id,a) values (92,39);
+insert into t (id,a) values (92,40);
+insert into t (id,a) values (92,41);
+insert into t (id,a) values (92,42);
+insert into t (id,a) values (92,43);
+insert into t (id,a) values (92,44);
+insert into t (id,a) values (92,45);
+insert into t (id,a) values (92,46);
+insert into t (id,a) values (92,47);
+insert into t (id,a) values (92,48);
+insert into t (id,a) values (92,49);
+insert into t (id,a) values (92,50);
+insert into t (id,a) values (92,51);
+insert into t (id,a) values (92,52);
+insert into t (id,a) values (92,53);
+insert into t (id,a) values (92,54);
+insert into t (id,a) values (92,55);
+insert into t (id,a) values (92,56);
+insert into t (id,a) values (92,57);
+insert into t (id,a) values (92,58);
+insert into t (id,a) values (92,59);
+insert into t (id,a) values (92,60);
+insert into t (id,a) values (92,61);
+insert into t (id,a) values (92,62);
+insert into t (id,a) values (92,63);
+insert into t (id,a) values (92,64);
+insert into t (id,a) values (92,65);
+insert into t (id,a) values (92,66);
+insert into t (id,a) values (92,67);
+insert into t (id,a) values (92,68);
+insert into t (id,a) values (92,69);
+insert into t (id,a) values (92,70);
+insert into t (id,a) values (92,71);
+insert into t (id,a) values (92,72);
+insert into t (id,a) values (92,73);
+insert into t (id,a) values (92,74);
+insert into t (id,a) values (92,75);
+insert into t (id,a) values (92,76);
+insert into t (id,a) values (92,77);
+insert into t (id,a) values (92,78);
+insert into t (id,a) values (92,79);
+insert into t (id,a) values (92,80);
+insert into t (id,a) values (92,81);
+insert into t (id,a) values (92,82);
+insert into t (id,a) values (92,83);
+insert into t (id,a) values (92,84);
+insert into t (id,a) values (92,85);
+insert into t (id,a) values (92,86);
+insert into t (id,a) values (92,87);
+insert into t (id,a) values (92,88);
+insert into t (id,a) values (92,89);
+insert into t (id,a) values (92,90);
+insert into t (id,a) values (92,91);
+insert into t (id,a) values (92,92);
+insert into t (id,a) values (92,93);
+insert into t (id,a) values (92,94);
+insert into t (id,a) values (92,95);
+insert into t (id,a) values (92,96);
+insert into t (id,a) values (92,97);
+insert into t (id,a) values (92,98);
+insert into t (id,a) values (92,99);
+insert into t (id,a) values (93,0);
+insert into t (id,a) values (93,1);
+insert into t (id,a) values (93,2);
+insert into t (id,a) values (93,3);
+insert into t (id,a) values (93,4);
+insert into t (id,a) values (93,5);
+insert into t (id,a) values (93,6);
+insert into t (id,a) values (93,7);
+insert into t (id,a) values (93,8);
+insert into t (id,a) values (93,9);
+insert into t (id,a) values (93,10);
+insert into t (id,a) values (93,11);
+insert into t (id,a) values (93,12);
+insert into t (id,a) values (93,13);
+insert into t (id,a) values (93,14);
+insert into t (id,a) values (93,15);
+insert into t (id,a) values (93,16);
+insert into t (id,a) values (93,17);
+insert into t (id,a) values (93,18);
+insert into t (id,a) values (93,19);
+insert into t (id,a) values (93,20);
+insert into t (id,a) values (93,21);
+insert into t (id,a) values (93,22);
+insert into t (id,a) values (93,23);
+insert into t (id,a) values (93,24);
+insert into t (id,a) values (93,25);
+insert into t (id,a) values (93,26);
+insert into t (id,a) values (93,27);
+insert into t (id,a) values (93,28);
+insert into t (id,a) values (93,29);
+insert into t (id,a) values (93,30);
+insert into t (id,a) values (93,31);
+insert into t (id,a) values (93,32);
+insert into t (id,a) values (93,33);
+insert into t (id,a) values (93,34);
+insert into t (id,a) values (93,35);
+insert into t (id,a) values (93,36);
+insert into t (id,a) values (93,37);
+insert into t (id,a) values (93,38);
+insert into t (id,a) values (93,39);
+insert into t (id,a) values (93,40);
+insert into t (id,a) values (93,41);
+insert into t (id,a) values (93,42);
+insert into t (id,a) values (93,43);
+insert into t (id,a) values (93,44);
+insert into t (id,a) values (93,45);
+insert into t (id,a) values (93,46);
+insert into t (id,a) values (93,47);
+insert into t (id,a) values (93,48);
+insert into t (id,a) values (93,49);
+insert into t (id,a) values (93,50);
+insert into t (id,a) values (93,51);
+insert into t (id,a) values (93,52);
+insert into t (id,a) values (93,53);
+insert into t (id,a) values (93,54);
+insert into t (id,a) values (93,55);
+insert into t (id,a) values (93,56);
+insert into t (id,a) values (93,57);
+insert into t (id,a) values (93,58);
+insert into t (id,a) values (93,59);
+insert into t (id,a) values (93,60);
+insert into t (id,a) values (93,61);
+insert into t (id,a) values (93,62);
+insert into t (id,a) values (93,63);
+insert into t (id,a) values (93,64);
+insert into t (id,a) values (93,65);
+insert into t (id,a) values (93,66);
+insert into t (id,a) values (93,67);
+insert into t (id,a) values (93,68);
+insert into t (id,a) values (93,69);
+insert into t (id,a) values (93,70);
+insert into t (id,a) values (93,71);
+insert into t (id,a) values (93,72);
+insert into t (id,a) values (93,73);
+insert into t (id,a) values (93,74);
+insert into t (id,a) values (93,75);
+insert into t (id,a) values (93,76);
+insert into t (id,a) values (93,77);
+insert into t (id,a) values (93,78);
+insert into t (id,a) values (93,79);
+insert into t (id,a) values (93,80);
+insert into t (id,a) values (93,81);
+insert into t (id,a) values (93,82);
+insert into t (id,a) values (93,83);
+insert into t (id,a) values (93,84);
+insert into t (id,a) values (93,85);
+insert into t (id,a) values (93,86);
+insert into t (id,a) values (93,87);
+insert into t (id,a) values (93,88);
+insert into t (id,a) values (93,89);
+insert into t (id,a) values (93,90);
+insert into t (id,a) values (93,91);
+insert into t (id,a) values (93,92);
+insert into t (id,a) values (93,93);
+insert into t (id,a) values (93,94);
+insert into t (id,a) values (93,95);
+insert into t (id,a) values (93,96);
+insert into t (id,a) values (93,97);
+insert into t (id,a) values (93,98);
+insert into t (id,a) values (93,99);
+insert into t (id,a) values (94,0);
+insert into t (id,a) values (94,1);
+insert into t (id,a) values (94,2);
+insert into t (id,a) values (94,3);
+insert into t (id,a) values (94,4);
+insert into t (id,a) values (94,5);
+insert into t (id,a) values (94,6);
+insert into t (id,a) values (94,7);
+insert into t (id,a) values (94,8);
+insert into t (id,a) values (94,9);
+insert into t (id,a) values (94,10);
+insert into t (id,a) values (94,11);
+insert into t (id,a) values (94,12);
+insert into t (id,a) values (94,13);
+insert into t (id,a) values (94,14);
+insert into t (id,a) values (94,15);
+insert into t (id,a) values (94,16);
+insert into t (id,a) values (94,17);
+insert into t (id,a) values (94,18);
+insert into t (id,a) values (94,19);
+insert into t (id,a) values (94,20);
+insert into t (id,a) values (94,21);
+insert into t (id,a) values (94,22);
+insert into t (id,a) values (94,23);
+insert into t (id,a) values (94,24);
+insert into t (id,a) values (94,25);
+insert into t (id,a) values (94,26);
+insert into t (id,a) values (94,27);
+insert into t (id,a) values (94,28);
+insert into t (id,a) values (94,29);
+insert into t (id,a) values (94,30);
+insert into t (id,a) values (94,31);
+insert into t (id,a) values (94,32);
+insert into t (id,a) values (94,33);
+insert into t (id,a) values (94,34);
+insert into t (id,a) values (94,35);
+insert into t (id,a) values (94,36);
+insert into t (id,a) values (94,37);
+insert into t (id,a) values (94,38);
+insert into t (id,a) values (94,39);
+insert into t (id,a) values (94,40);
+insert into t (id,a) values (94,41);
+insert into t (id,a) values (94,42);
+insert into t (id,a) values (94,43);
+insert into t (id,a) values (94,44);
+insert into t (id,a) values (94,45);
+insert into t (id,a) values (94,46);
+insert into t (id,a) values (94,47);
+insert into t (id,a) values (94,48);
+insert into t (id,a) values (94,49);
+insert into t (id,a) values (94,50);
+insert into t (id,a) values (94,51);
+insert into t (id,a) values (94,52);
+insert into t (id,a) values (94,53);
+insert into t (id,a) values (94,54);
+insert into t (id,a) values (94,55);
+insert into t (id,a) values (94,56);
+insert into t (id,a) values (94,57);
+insert into t (id,a) values (94,58);
+insert into t (id,a) values (94,59);
+insert into t (id,a) values (94,60);
+insert into t (id,a) values (94,61);
+insert into t (id,a) values (94,62);
+insert into t (id,a) values (94,63);
+insert into t (id,a) values (94,64);
+insert into t (id,a) values (94,65);
+insert into t (id,a) values (94,66);
+insert into t (id,a) values (94,67);
+insert into t (id,a) values (94,68);
+insert into t (id,a) values (94,69);
+insert into t (id,a) values (94,70);
+insert into t (id,a) values (94,71);
+insert into t (id,a) values (94,72);
+insert into t (id,a) values (94,73);
+insert into t (id,a) values (94,74);
+insert into t (id,a) values (94,75);
+insert into t (id,a) values (94,76);
+insert into t (id,a) values (94,77);
+insert into t (id,a) values (94,78);
+insert into t (id,a) values (94,79);
+insert into t (id,a) values (94,80);
+insert into t (id,a) values (94,81);
+insert into t (id,a) values (94,82);
+insert into t (id,a) values (94,83);
+insert into t (id,a) values (94,84);
+insert into t (id,a) values (94,85);
+insert into t (id,a) values (94,86);
+insert into t (id,a) values (94,87);
+insert into t (id,a) values (94,88);
+insert into t (id,a) values (94,89);
+insert into t (id,a) values (94,90);
+insert into t (id,a) values (94,91);
+insert into t (id,a) values (94,92);
+insert into t (id,a) values (94,93);
+insert into t (id,a) values (94,94);
+insert into t (id,a) values (94,95);
+insert into t (id,a) values (94,96);
+insert into t (id,a) values (94,97);
+insert into t (id,a) values (94,98);
+insert into t (id,a) values (94,99);
+insert into t (id,a) values (95,0);
+insert into t (id,a) values (95,1);
+insert into t (id,a) values (95,2);
+insert into t (id,a) values (95,3);
+insert into t (id,a) values (95,4);
+insert into t (id,a) values (95,5);
+insert into t (id,a) values (95,6);
+insert into t (id,a) values (95,7);
+insert into t (id,a) values (95,8);
+insert into t (id,a) values (95,9);
+insert into t (id,a) values (95,10);
+insert into t (id,a) values (95,11);
+insert into t (id,a) values (95,12);
+insert into t (id,a) values (95,13);
+insert into t (id,a) values (95,14);
+insert into t (id,a) values (95,15);
+insert into t (id,a) values (95,16);
+insert into t (id,a) values (95,17);
+insert into t (id,a) values (95,18);
+insert into t (id,a) values (95,19);
+insert into t (id,a) values (95,20);
+insert into t (id,a) values (95,21);
+insert into t (id,a) values (95,22);
+insert into t (id,a) values (95,23);
+insert into t (id,a) values (95,24);
+insert into t (id,a) values (95,25);
+insert into t (id,a) values (95,26);
+insert into t (id,a) values (95,27);
+insert into t (id,a) values (95,28);
+insert into t (id,a) values (95,29);
+insert into t (id,a) values (95,30);
+insert into t (id,a) values (95,31);
+insert into t (id,a) values (95,32);
+insert into t (id,a) values (95,33);
+insert into t (id,a) values (95,34);
+insert into t (id,a) values (95,35);
+insert into t (id,a) values (95,36);
+insert into t (id,a) values (95,37);
+insert into t (id,a) values (95,38);
+insert into t (id,a) values (95,39);
+insert into t (id,a) values (95,40);
+insert into t (id,a) values (95,41);
+insert into t (id,a) values (95,42);
+insert into t (id,a) values (95,43);
+insert into t (id,a) values (95,44);
+insert into t (id,a) values (95,45);
+insert into t (id,a) values (95,46);
+insert into t (id,a) values (95,47);
+insert into t (id,a) values (95,48);
+insert into t (id,a) values (95,49);
+insert into t (id,a) values (95,50);
+insert into t (id,a) values (95,51);
+insert into t (id,a) values (95,52);
+insert into t (id,a) values (95,53);
+insert into t (id,a) values (95,54);
+insert into t (id,a) values (95,55);
+insert into t (id,a) values (95,56);
+insert into t (id,a) values (95,57);
+insert into t (id,a) values (95,58);
+insert into t (id,a) values (95,59);
+insert into t (id,a) values (95,60);
+insert into t (id,a) values (95,61);
+insert into t (id,a) values (95,62);
+insert into t (id,a) values (95,63);
+insert into t (id,a) values (95,64);
+insert into t (id,a) values (95,65);
+insert into t (id,a) values (95,66);
+insert into t (id,a) values (95,67);
+insert into t (id,a) values (95,68);
+insert into t (id,a) values (95,69);
+insert into t (id,a) values (95,70);
+insert into t (id,a) values (95,71);
+insert into t (id,a) values (95,72);
+insert into t (id,a) values (95,73);
+insert into t (id,a) values (95,74);
+insert into t (id,a) values (95,75);
+insert into t (id,a) values (95,76);
+insert into t (id,a) values (95,77);
+insert into t (id,a) values (95,78);
+insert into t (id,a) values (95,79);
+insert into t (id,a) values (95,80);
+insert into t (id,a) values (95,81);
+insert into t (id,a) values (95,82);
+insert into t (id,a) values (95,83);
+insert into t (id,a) values (95,84);
+insert into t (id,a) values (95,85);
+insert into t (id,a) values (95,86);
+insert into t (id,a) values (95,87);
+insert into t (id,a) values (95,88);
+insert into t (id,a) values (95,89);
+insert into t (id,a) values (95,90);
+insert into t (id,a) values (95,91);
+insert into t (id,a) values (95,92);
+insert into t (id,a) values (95,93);
+insert into t (id,a) values (95,94);
+insert into t (id,a) values (95,95);
+insert into t (id,a) values (95,96);
+insert into t (id,a) values (95,97);
+insert into t (id,a) values (95,98);
+insert into t (id,a) values (95,99);
+insert into t (id,a) values (96,0);
+insert into t (id,a) values (96,1);
+insert into t (id,a) values (96,2);
+insert into t (id,a) values (96,3);
+insert into t (id,a) values (96,4);
+insert into t (id,a) values (96,5);
+insert into t (id,a) values (96,6);
+insert into t (id,a) values (96,7);
+insert into t (id,a) values (96,8);
+insert into t (id,a) values (96,9);
+insert into t (id,a) values (96,10);
+insert into t (id,a) values (96,11);
+insert into t (id,a) values (96,12);
+insert into t (id,a) values (96,13);
+insert into t (id,a) values (96,14);
+insert into t (id,a) values (96,15);
+insert into t (id,a) values (96,16);
+insert into t (id,a) values (96,17);
+insert into t (id,a) values (96,18);
+insert into t (id,a) values (96,19);
+insert into t (id,a) values (96,20);
+insert into t (id,a) values (96,21);
+insert into t (id,a) values (96,22);
+insert into t (id,a) values (96,23);
+insert into t (id,a) values (96,24);
+insert into t (id,a) values (96,25);
+insert into t (id,a) values (96,26);
+insert into t (id,a) values (96,27);
+insert into t (id,a) values (96,28);
+insert into t (id,a) values (96,29);
+insert into t (id,a) values (96,30);
+insert into t (id,a) values (96,31);
+insert into t (id,a) values (96,32);
+insert into t (id,a) values (96,33);
+insert into t (id,a) values (96,34);
+insert into t (id,a) values (96,35);
+insert into t (id,a) values (96,36);
+insert into t (id,a) values (96,37);
+insert into t (id,a) values (96,38);
+insert into t (id,a) values (96,39);
+insert into t (id,a) values (96,40);
+insert into t (id,a) values (96,41);
+insert into t (id,a) values (96,42);
+insert into t (id,a) values (96,43);
+insert into t (id,a) values (96,44);
+insert into t (id,a) values (96,45);
+insert into t (id,a) values (96,46);
+insert into t (id,a) values (96,47);
+insert into t (id,a) values (96,48);
+insert into t (id,a) values (96,49);
+insert into t (id,a) values (96,50);
+insert into t (id,a) values (96,51);
+insert into t (id,a) values (96,52);
+insert into t (id,a) values (96,53);
+insert into t (id,a) values (96,54);
+insert into t (id,a) values (96,55);
+insert into t (id,a) values (96,56);
+insert into t (id,a) values (96,57);
+insert into t (id,a) values (96,58);
+insert into t (id,a) values (96,59);
+insert into t (id,a) values (96,60);
+insert into t (id,a) values (96,61);
+insert into t (id,a) values (96,62);
+insert into t (id,a) values (96,63);
+insert into t (id,a) values (96,64);
+insert into t (id,a) values (96,65);
+insert into t (id,a) values (96,66);
+insert into t (id,a) values (96,67);
+insert into t (id,a) values (96,68);
+insert into t (id,a) values (96,69);
+insert into t (id,a) values (96,70);
+insert into t (id,a) values (96,71);
+insert into t (id,a) values (96,72);
+insert into t (id,a) values (96,73);
+insert into t (id,a) values (96,74);
+insert into t (id,a) values (96,75);
+insert into t (id,a) values (96,76);
+insert into t (id,a) values (96,77);
+insert into t (id,a) values (96,78);
+insert into t (id,a) values (96,79);
+insert into t (id,a) values (96,80);
+insert into t (id,a) values (96,81);
+insert into t (id,a) values (96,82);
+insert into t (id,a) values (96,83);
+insert into t (id,a) values (96,84);
+insert into t (id,a) values (96,85);
+insert into t (id,a) values (96,86);
+insert into t (id,a) values (96,87);
+insert into t (id,a) values (96,88);
+insert into t (id,a) values (96,89);
+insert into t (id,a) values (96,90);
+insert into t (id,a) values (96,91);
+insert into t (id,a) values (96,92);
+insert into t (id,a) values (96,93);
+insert into t (id,a) values (96,94);
+insert into t (id,a) values (96,95);
+insert into t (id,a) values (96,96);
+insert into t (id,a) values (96,97);
+insert into t (id,a) values (96,98);
+insert into t (id,a) values (96,99);
+insert into t (id,a) values (97,0);
+insert into t (id,a) values (97,1);
+insert into t (id,a) values (97,2);
+insert into t (id,a) values (97,3);
+insert into t (id,a) values (97,4);
+insert into t (id,a) values (97,5);
+insert into t (id,a) values (97,6);
+insert into t (id,a) values (97,7);
+insert into t (id,a) values (97,8);
+insert into t (id,a) values (97,9);
+insert into t (id,a) values (97,10);
+insert into t (id,a) values (97,11);
+insert into t (id,a) values (97,12);
+insert into t (id,a) values (97,13);
+insert into t (id,a) values (97,14);
+insert into t (id,a) values (97,15);
+insert into t (id,a) values (97,16);
+insert into t (id,a) values (97,17);
+insert into t (id,a) values (97,18);
+insert into t (id,a) values (97,19);
+insert into t (id,a) values (97,20);
+insert into t (id,a) values (97,21);
+insert into t (id,a) values (97,22);
+insert into t (id,a) values (97,23);
+insert into t (id,a) values (97,24);
+insert into t (id,a) values (97,25);
+insert into t (id,a) values (97,26);
+insert into t (id,a) values (97,27);
+insert into t (id,a) values (97,28);
+insert into t (id,a) values (97,29);
+insert into t (id,a) values (97,30);
+insert into t (id,a) values (97,31);
+insert into t (id,a) values (97,32);
+insert into t (id,a) values (97,33);
+insert into t (id,a) values (97,34);
+insert into t (id,a) values (97,35);
+insert into t (id,a) values (97,36);
+insert into t (id,a) values (97,37);
+insert into t (id,a) values (97,38);
+insert into t (id,a) values (97,39);
+insert into t (id,a) values (97,40);
+insert into t (id,a) values (97,41);
+insert into t (id,a) values (97,42);
+insert into t (id,a) values (97,43);
+insert into t (id,a) values (97,44);
+insert into t (id,a) values (97,45);
+insert into t (id,a) values (97,46);
+insert into t (id,a) values (97,47);
+insert into t (id,a) values (97,48);
+insert into t (id,a) values (97,49);
+insert into t (id,a) values (97,50);
+insert into t (id,a) values (97,51);
+insert into t (id,a) values (97,52);
+insert into t (id,a) values (97,53);
+insert into t (id,a) values (97,54);
+insert into t (id,a) values (97,55);
+insert into t (id,a) values (97,56);
+insert into t (id,a) values (97,57);
+insert into t (id,a) values (97,58);
+insert into t (id,a) values (97,59);
+insert into t (id,a) values (97,60);
+insert into t (id,a) values (97,61);
+insert into t (id,a) values (97,62);
+insert into t (id,a) values (97,63);
+insert into t (id,a) values (97,64);
+insert into t (id,a) values (97,65);
+insert into t (id,a) values (97,66);
+insert into t (id,a) values (97,67);
+insert into t (id,a) values (97,68);
+insert into t (id,a) values (97,69);
+insert into t (id,a) values (97,70);
+insert into t (id,a) values (97,71);
+insert into t (id,a) values (97,72);
+insert into t (id,a) values (97,73);
+insert into t (id,a) values (97,74);
+insert into t (id,a) values (97,75);
+insert into t (id,a) values (97,76);
+insert into t (id,a) values (97,77);
+insert into t (id,a) values (97,78);
+insert into t (id,a) values (97,79);
+insert into t (id,a) values (97,80);
+insert into t (id,a) values (97,81);
+insert into t (id,a) values (97,82);
+insert into t (id,a) values (97,83);
+insert into t (id,a) values (97,84);
+insert into t (id,a) values (97,85);
+insert into t (id,a) values (97,86);
+insert into t (id,a) values (97,87);
+insert into t (id,a) values (97,88);
+insert into t (id,a) values (97,89);
+insert into t (id,a) values (97,90);
+insert into t (id,a) values (97,91);
+insert into t (id,a) values (97,92);
+insert into t (id,a) values (97,93);
+insert into t (id,a) values (97,94);
+insert into t (id,a) values (97,95);
+insert into t (id,a) values (97,96);
+insert into t (id,a) values (97,97);
+insert into t (id,a) values (97,98);
+insert into t (id,a) values (97,99);
+insert into t (id,a) values (98,0);
+insert into t (id,a) values (98,1);
+insert into t (id,a) values (98,2);
+insert into t (id,a) values (98,3);
+insert into t (id,a) values (98,4);
+insert into t (id,a) values (98,5);
+insert into t (id,a) values (98,6);
+insert into t (id,a) values (98,7);
+insert into t (id,a) values (98,8);
+insert into t (id,a) values (98,9);
+insert into t (id,a) values (98,10);
+insert into t (id,a) values (98,11);
+insert into t (id,a) values (98,12);
+insert into t (id,a) values (98,13);
+insert into t (id,a) values (98,14);
+insert into t (id,a) values (98,15);
+insert into t (id,a) values (98,16);
+insert into t (id,a) values (98,17);
+insert into t (id,a) values (98,18);
+insert into t (id,a) values (98,19);
+insert into t (id,a) values (98,20);
+insert into t (id,a) values (98,21);
+insert into t (id,a) values (98,22);
+insert into t (id,a) values (98,23);
+insert into t (id,a) values (98,24);
+insert into t (id,a) values (98,25);
+insert into t (id,a) values (98,26);
+insert into t (id,a) values (98,27);
+insert into t (id,a) values (98,28);
+insert into t (id,a) values (98,29);
+insert into t (id,a) values (98,30);
+insert into t (id,a) values (98,31);
+insert into t (id,a) values (98,32);
+insert into t (id,a) values (98,33);
+insert into t (id,a) values (98,34);
+insert into t (id,a) values (98,35);
+insert into t (id,a) values (98,36);
+insert into t (id,a) values (98,37);
+insert into t (id,a) values (98,38);
+insert into t (id,a) values (98,39);
+insert into t (id,a) values (98,40);
+insert into t (id,a) values (98,41);
+insert into t (id,a) values (98,42);
+insert into t (id,a) values (98,43);
+insert into t (id,a) values (98,44);
+insert into t (id,a) values (98,45);
+insert into t (id,a) values (98,46);
+insert into t (id,a) values (98,47);
+insert into t (id,a) values (98,48);
+insert into t (id,a) values (98,49);
+insert into t (id,a) values (98,50);
+insert into t (id,a) values (98,51);
+insert into t (id,a) values (98,52);
+insert into t (id,a) values (98,53);
+insert into t (id,a) values (98,54);
+insert into t (id,a) values (98,55);
+insert into t (id,a) values (98,56);
+insert into t (id,a) values (98,57);
+insert into t (id,a) values (98,58);
+insert into t (id,a) values (98,59);
+insert into t (id,a) values (98,60);
+insert into t (id,a) values (98,61);
+insert into t (id,a) values (98,62);
+insert into t (id,a) values (98,63);
+insert into t (id,a) values (98,64);
+insert into t (id,a) values (98,65);
+insert into t (id,a) values (98,66);
+insert into t (id,a) values (98,67);
+insert into t (id,a) values (98,68);
+insert into t (id,a) values (98,69);
+insert into t (id,a) values (98,70);
+insert into t (id,a) values (98,71);
+insert into t (id,a) values (98,72);
+insert into t (id,a) values (98,73);
+insert into t (id,a) values (98,74);
+insert into t (id,a) values (98,75);
+insert into t (id,a) values (98,76);
+insert into t (id,a) values (98,77);
+insert into t (id,a) values (98,78);
+insert into t (id,a) values (98,79);
+insert into t (id,a) values (98,80);
+insert into t (id,a) values (98,81);
+insert into t (id,a) values (98,82);
+insert into t (id,a) values (98,83);
+insert into t (id,a) values (98,84);
+insert into t (id,a) values (98,85);
+insert into t (id,a) values (98,86);
+insert into t (id,a) values (98,87);
+insert into t (id,a) values (98,88);
+insert into t (id,a) values (98,89);
+insert into t (id,a) values (98,90);
+insert into t (id,a) values (98,91);
+insert into t (id,a) values (98,92);
+insert into t (id,a) values (98,93);
+insert into t (id,a) values (98,94);
+insert into t (id,a) values (98,95);
+insert into t (id,a) values (98,96);
+insert into t (id,a) values (98,97);
+insert into t (id,a) values (98,98);
+insert into t (id,a) values (98,99);
+insert into t (id,a) values (99,0);
+insert into t (id,a) values (99,1);
+insert into t (id,a) values (99,2);
+insert into t (id,a) values (99,3);
+insert into t (id,a) values (99,4);
+insert into t (id,a) values (99,5);
+insert into t (id,a) values (99,6);
+insert into t (id,a) values (99,7);
+insert into t (id,a) values (99,8);
+insert into t (id,a) values (99,9);
+insert into t (id,a) values (99,10);
+insert into t (id,a) values (99,11);
+insert into t (id,a) values (99,12);
+insert into t (id,a) values (99,13);
+insert into t (id,a) values (99,14);
+insert into t (id,a) values (99,15);
+insert into t (id,a) values (99,16);
+insert into t (id,a) values (99,17);
+insert into t (id,a) values (99,18);
+insert into t (id,a) values (99,19);
+insert into t (id,a) values (99,20);
+insert into t (id,a) values (99,21);
+insert into t (id,a) values (99,22);
+insert into t (id,a) values (99,23);
+insert into t (id,a) values (99,24);
+insert into t (id,a) values (99,25);
+insert into t (id,a) values (99,26);
+insert into t (id,a) values (99,27);
+insert into t (id,a) values (99,28);
+insert into t (id,a) values (99,29);
+insert into t (id,a) values (99,30);
+insert into t (id,a) values (99,31);
+insert into t (id,a) values (99,32);
+insert into t (id,a) values (99,33);
+insert into t (id,a) values (99,34);
+insert into t (id,a) values (99,35);
+insert into t (id,a) values (99,36);
+insert into t (id,a) values (99,37);
+insert into t (id,a) values (99,38);
+insert into t (id,a) values (99,39);
+insert into t (id,a) values (99,40);
+insert into t (id,a) values (99,41);
+insert into t (id,a) values (99,42);
+insert into t (id,a) values (99,43);
+insert into t (id,a) values (99,44);
+insert into t (id,a) values (99,45);
+insert into t (id,a) values (99,46);
+insert into t (id,a) values (99,47);
+insert into t (id,a) values (99,48);
+insert into t (id,a) values (99,49);
+insert into t (id,a) values (99,50);
+insert into t (id,a) values (99,51);
+insert into t (id,a) values (99,52);
+insert into t (id,a) values (99,53);
+insert into t (id,a) values (99,54);
+insert into t (id,a) values (99,55);
+insert into t (id,a) values (99,56);
+insert into t (id,a) values (99,57);
+insert into t (id,a) values (99,58);
+insert into t (id,a) values (99,59);
+insert into t (id,a) values (99,60);
+insert into t (id,a) values (99,61);
+insert into t (id,a) values (99,62);
+insert into t (id,a) values (99,63);
+insert into t (id,a) values (99,64);
+insert into t (id,a) values (99,65);
+insert into t (id,a) values (99,66);
+insert into t (id,a) values (99,67);
+insert into t (id,a) values (99,68);
+insert into t (id,a) values (99,69);
+insert into t (id,a) values (99,70);
+insert into t (id,a) values (99,71);
+insert into t (id,a) values (99,72);
+insert into t (id,a) values (99,73);
+insert into t (id,a) values (99,74);
+insert into t (id,a) values (99,75);
+insert into t (id,a) values (99,76);
+insert into t (id,a) values (99,77);
+insert into t (id,a) values (99,78);
+insert into t (id,a) values (99,79);
+insert into t (id,a) values (99,80);
+insert into t (id,a) values (99,81);
+insert into t (id,a) values (99,82);
+insert into t (id,a) values (99,83);
+insert into t (id,a) values (99,84);
+insert into t (id,a) values (99,85);
+insert into t (id,a) values (99,86);
+insert into t (id,a) values (99,87);
+insert into t (id,a) values (99,88);
+insert into t (id,a) values (99,89);
+insert into t (id,a) values (99,90);
+insert into t (id,a) values (99,91);
+insert into t (id,a) values (99,92);
+insert into t (id,a) values (99,93);
+insert into t (id,a) values (99,94);
+insert into t (id,a) values (99,95);
+insert into t (id,a) values (99,96);
+insert into t (id,a) values (99,97);
+insert into t (id,a) values (99,98);
+insert into t (id,a) values (99,99);
+insert into t (id,a) values (100,0);
+insert into t (id,a) values (100,1);
+insert into t (id,a) values (100,2);
+insert into t (id,a) values (100,3);
+insert into t (id,a) values (100,4);
+insert into t (id,a) values (100,5);
+insert into t (id,a) values (100,6);
+insert into t (id,a) values (100,7);
+insert into t (id,a) values (100,8);
+insert into t (id,a) values (100,9);
+insert into t (id,a) values (100,10);
+insert into t (id,a) values (100,11);
+insert into t (id,a) values (100,12);
+insert into t (id,a) values (100,13);
+insert into t (id,a) values (100,14);
+insert into t (id,a) values (100,15);
+insert into t (id,a) values (100,16);
+insert into t (id,a) values (100,17);
+insert into t (id,a) values (100,18);
+insert into t (id,a) values (100,19);
+insert into t (id,a) values (100,20);
+insert into t (id,a) values (100,21);
+insert into t (id,a) values (100,22);
+insert into t (id,a) values (100,23);
+insert into t (id,a) values (100,24);
+insert into t (id,a) values (100,25);
+insert into t (id,a) values (100,26);
+insert into t (id,a) values (100,27);
+insert into t (id,a) values (100,28);
+insert into t (id,a) values (100,29);
+insert into t (id,a) values (100,30);
+insert into t (id,a) values (100,31);
+insert into t (id,a) values (100,32);
+insert into t (id,a) values (100,33);
+insert into t (id,a) values (100,34);
+insert into t (id,a) values (100,35);
+insert into t (id,a) values (100,36);
+insert into t (id,a) values (100,37);
+insert into t (id,a) values (100,38);
+insert into t (id,a) values (100,39);
+insert into t (id,a) values (100,40);
+insert into t (id,a) values (100,41);
+insert into t (id,a) values (100,42);
+insert into t (id,a) values (100,43);
+insert into t (id,a) values (100,44);
+insert into t (id,a) values (100,45);
+insert into t (id,a) values (100,46);
+insert into t (id,a) values (100,47);
+insert into t (id,a) values (100,48);
+insert into t (id,a) values (100,49);
+insert into t (id,a) values (100,50);
+insert into t (id,a) values (100,51);
+insert into t (id,a) values (100,52);
+insert into t (id,a) values (100,53);
+insert into t (id,a) values (100,54);
+insert into t (id,a) values (100,55);
+insert into t (id,a) values (100,56);
+insert into t (id,a) values (100,57);
+insert into t (id,a) values (100,58);
+insert into t (id,a) values (100,59);
+insert into t (id,a) values (100,60);
+insert into t (id,a) values (100,61);
+insert into t (id,a) values (100,62);
+insert into t (id,a) values (100,63);
+insert into t (id,a) values (100,64);
+insert into t (id,a) values (100,65);
+insert into t (id,a) values (100,66);
+insert into t (id,a) values (100,67);
+insert into t (id,a) values (100,68);
+insert into t (id,a) values (100,69);
+insert into t (id,a) values (100,70);
+insert into t (id,a) values (100,71);
+insert into t (id,a) values (100,72);
+insert into t (id,a) values (100,73);
+insert into t (id,a) values (100,74);
+insert into t (id,a) values (100,75);
+insert into t (id,a) values (100,76);
+insert into t (id,a) values (100,77);
+insert into t (id,a) values (100,78);
+insert into t (id,a) values (100,79);
+insert into t (id,a) values (100,80);
+insert into t (id,a) values (100,81);
+insert into t (id,a) values (100,82);
+insert into t (id,a) values (100,83);
+insert into t (id,a) values (100,84);
+insert into t (id,a) values (100,85);
+insert into t (id,a) values (100,86);
+insert into t (id,a) values (100,87);
+insert into t (id,a) values (100,88);
+insert into t (id,a) values (100,89);
+insert into t (id,a) values (100,90);
+insert into t (id,a) values (100,91);
+insert into t (id,a) values (100,92);
+insert into t (id,a) values (100,93);
+insert into t (id,a) values (100,94);
+insert into t (id,a) values (100,95);
+insert into t (id,a) values (100,96);
+insert into t (id,a) values (100,97);
+insert into t (id,a) values (100,98);
+insert into t (id,a) values (100,99);
+insert into t (id,a) values (101,0);
+insert into t (id,a) values (101,1);
+insert into t (id,a) values (101,2);
+insert into t (id,a) values (101,3);
+insert into t (id,a) values (101,4);
+insert into t (id,a) values (101,5);
+insert into t (id,a) values (101,6);
+insert into t (id,a) values (101,7);
+insert into t (id,a) values (101,8);
+insert into t (id,a) values (101,9);
+insert into t (id,a) values (101,10);
+insert into t (id,a) values (101,11);
+insert into t (id,a) values (101,12);
+insert into t (id,a) values (101,13);
+insert into t (id,a) values (101,14);
+insert into t (id,a) values (101,15);
+insert into t (id,a) values (101,16);
+insert into t (id,a) values (101,17);
+insert into t (id,a) values (101,18);
+insert into t (id,a) values (101,19);
+insert into t (id,a) values (101,20);
+insert into t (id,a) values (101,21);
+insert into t (id,a) values (101,22);
+insert into t (id,a) values (101,23);
+insert into t (id,a) values (101,24);
+insert into t (id,a) values (101,25);
+insert into t (id,a) values (101,26);
+insert into t (id,a) values (101,27);
+insert into t (id,a) values (101,28);
+insert into t (id,a) values (101,29);
+insert into t (id,a) values (101,30);
+insert into t (id,a) values (101,31);
+insert into t (id,a) values (101,32);
+insert into t (id,a) values (101,33);
+insert into t (id,a) values (101,34);
+insert into t (id,a) values (101,35);
+insert into t (id,a) values (101,36);
+insert into t (id,a) values (101,37);
+insert into t (id,a) values (101,38);
+insert into t (id,a) values (101,39);
+insert into t (id,a) values (101,40);
+insert into t (id,a) values (101,41);
+insert into t (id,a) values (101,42);
+insert into t (id,a) values (101,43);
+insert into t (id,a) values (101,44);
+insert into t (id,a) values (101,45);
+insert into t (id,a) values (101,46);
+insert into t (id,a) values (101,47);
+insert into t (id,a) values (101,48);
+insert into t (id,a) values (101,49);
+insert into t (id,a) values (101,50);
+insert into t (id,a) values (101,51);
+insert into t (id,a) values (101,52);
+insert into t (id,a) values (101,53);
+insert into t (id,a) values (101,54);
+insert into t (id,a) values (101,55);
+insert into t (id,a) values (101,56);
+insert into t (id,a) values (101,57);
+insert into t (id,a) values (101,58);
+insert into t (id,a) values (101,59);
+insert into t (id,a) values (101,60);
+insert into t (id,a) values (101,61);
+insert into t (id,a) values (101,62);
+insert into t (id,a) values (101,63);
+insert into t (id,a) values (101,64);
+insert into t (id,a) values (101,65);
+insert into t (id,a) values (101,66);
+insert into t (id,a) values (101,67);
+insert into t (id,a) values (101,68);
+insert into t (id,a) values (101,69);
+insert into t (id,a) values (101,70);
+insert into t (id,a) values (101,71);
+insert into t (id,a) values (101,72);
+insert into t (id,a) values (101,73);
+insert into t (id,a) values (101,74);
+insert into t (id,a) values (101,75);
+insert into t (id,a) values (101,76);
+insert into t (id,a) values (101,77);
+insert into t (id,a) values (101,78);
+insert into t (id,a) values (101,79);
+insert into t (id,a) values (101,80);
+insert into t (id,a) values (101,81);
+insert into t (id,a) values (101,82);
+insert into t (id,a) values (101,83);
+insert into t (id,a) values (101,84);
+insert into t (id,a) values (101,85);
+insert into t (id,a) values (101,86);
+insert into t (id,a) values (101,87);
+insert into t (id,a) values (101,88);
+insert into t (id,a) values (101,89);
+insert into t (id,a) values (101,90);
+insert into t (id,a) values (101,91);
+insert into t (id,a) values (101,92);
+insert into t (id,a) values (101,93);
+insert into t (id,a) values (101,94);
+insert into t (id,a) values (101,95);
+insert into t (id,a) values (101,96);
+insert into t (id,a) values (101,97);
+insert into t (id,a) values (101,98);
+insert into t (id,a) values (101,99);
+insert into t (id,a) values (102,0);
+insert into t (id,a) values (102,1);
+insert into t (id,a) values (102,2);
+insert into t (id,a) values (102,3);
+insert into t (id,a) values (102,4);
+insert into t (id,a) values (102,5);
+insert into t (id,a) values (102,6);
+insert into t (id,a) values (102,7);
+insert into t (id,a) values (102,8);
+insert into t (id,a) values (102,9);
+insert into t (id,a) values (102,10);
+insert into t (id,a) values (102,11);
+insert into t (id,a) values (102,12);
+insert into t (id,a) values (102,13);
+insert into t (id,a) values (102,14);
+insert into t (id,a) values (102,15);
+insert into t (id,a) values (102,16);
+insert into t (id,a) values (102,17);
+insert into t (id,a) values (102,18);
+insert into t (id,a) values (102,19);
+insert into t (id,a) values (102,20);
+insert into t (id,a) values (102,21);
+insert into t (id,a) values (102,22);
+insert into t (id,a) values (102,23);
+insert into t (id,a) values (102,24);
+insert into t (id,a) values (102,25);
+insert into t (id,a) values (102,26);
+insert into t (id,a) values (102,27);
+insert into t (id,a) values (102,28);
+insert into t (id,a) values (102,29);
+insert into t (id,a) values (102,30);
+insert into t (id,a) values (102,31);
+insert into t (id,a) values (102,32);
+insert into t (id,a) values (102,33);
+insert into t (id,a) values (102,34);
+insert into t (id,a) values (102,35);
+insert into t (id,a) values (102,36);
+insert into t (id,a) values (102,37);
+insert into t (id,a) values (102,38);
+insert into t (id,a) values (102,39);
+insert into t (id,a) values (102,40);
+insert into t (id,a) values (102,41);
+insert into t (id,a) values (102,42);
+insert into t (id,a) values (102,43);
+insert into t (id,a) values (102,44);
+insert into t (id,a) values (102,45);
+insert into t (id,a) values (102,46);
+insert into t (id,a) values (102,47);
+insert into t (id,a) values (102,48);
+insert into t (id,a) values (102,49);
+insert into t (id,a) values (102,50);
+insert into t (id,a) values (102,51);
+insert into t (id,a) values (102,52);
+insert into t (id,a) values (102,53);
+insert into t (id,a) values (102,54);
+insert into t (id,a) values (102,55);
+insert into t (id,a) values (102,56);
+insert into t (id,a) values (102,57);
+insert into t (id,a) values (102,58);
+insert into t (id,a) values (102,59);
+insert into t (id,a) values (102,60);
+insert into t (id,a) values (102,61);
+insert into t (id,a) values (102,62);
+insert into t (id,a) values (102,63);
+insert into t (id,a) values (102,64);
+insert into t (id,a) values (102,65);
+insert into t (id,a) values (102,66);
+insert into t (id,a) values (102,67);
+insert into t (id,a) values (102,68);
+insert into t (id,a) values (102,69);
+insert into t (id,a) values (102,70);
+insert into t (id,a) values (102,71);
+insert into t (id,a) values (102,72);
+insert into t (id,a) values (102,73);
+insert into t (id,a) values (102,74);
+insert into t (id,a) values (102,75);
+insert into t (id,a) values (102,76);
+insert into t (id,a) values (102,77);
+insert into t (id,a) values (102,78);
+insert into t (id,a) values (102,79);
+insert into t (id,a) values (102,80);
+insert into t (id,a) values (102,81);
+insert into t (id,a) values (102,82);
+insert into t (id,a) values (102,83);
+insert into t (id,a) values (102,84);
+insert into t (id,a) values (102,85);
+insert into t (id,a) values (102,86);
+insert into t (id,a) values (102,87);
+insert into t (id,a) values (102,88);
+insert into t (id,a) values (102,89);
+insert into t (id,a) values (102,90);
+insert into t (id,a) values (102,91);
+insert into t (id,a) values (102,92);
+insert into t (id,a) values (102,93);
+insert into t (id,a) values (102,94);
+insert into t (id,a) values (102,95);
+insert into t (id,a) values (102,96);
+insert into t (id,a) values (102,97);
+insert into t (id,a) values (102,98);
+insert into t (id,a) values (102,99);
+insert into t (id,a) values (103,0);
+insert into t (id,a) values (103,1);
+insert into t (id,a) values (103,2);
+insert into t (id,a) values (103,3);
+insert into t (id,a) values (103,4);
+insert into t (id,a) values (103,5);
+insert into t (id,a) values (103,6);
+insert into t (id,a) values (103,7);
+insert into t (id,a) values (103,8);
+insert into t (id,a) values (103,9);
+insert into t (id,a) values (103,10);
+insert into t (id,a) values (103,11);
+insert into t (id,a) values (103,12);
+insert into t (id,a) values (103,13);
+insert into t (id,a) values (103,14);
+insert into t (id,a) values (103,15);
+insert into t (id,a) values (103,16);
+insert into t (id,a) values (103,17);
+insert into t (id,a) values (103,18);
+insert into t (id,a) values (103,19);
+insert into t (id,a) values (103,20);
+insert into t (id,a) values (103,21);
+insert into t (id,a) values (103,22);
+insert into t (id,a) values (103,23);
+insert into t (id,a) values (103,24);
+insert into t (id,a) values (103,25);
+insert into t (id,a) values (103,26);
+insert into t (id,a) values (103,27);
+insert into t (id,a) values (103,28);
+insert into t (id,a) values (103,29);
+insert into t (id,a) values (103,30);
+insert into t (id,a) values (103,31);
+insert into t (id,a) values (103,32);
+insert into t (id,a) values (103,33);
+insert into t (id,a) values (103,34);
+insert into t (id,a) values (103,35);
+insert into t (id,a) values (103,36);
+insert into t (id,a) values (103,37);
+insert into t (id,a) values (103,38);
+insert into t (id,a) values (103,39);
+insert into t (id,a) values (103,40);
+insert into t (id,a) values (103,41);
+insert into t (id,a) values (103,42);
+insert into t (id,a) values (103,43);
+insert into t (id,a) values (103,44);
+insert into t (id,a) values (103,45);
+insert into t (id,a) values (103,46);
+insert into t (id,a) values (103,47);
+insert into t (id,a) values (103,48);
+insert into t (id,a) values (103,49);
+insert into t (id,a) values (103,50);
+insert into t (id,a) values (103,51);
+insert into t (id,a) values (103,52);
+insert into t (id,a) values (103,53);
+insert into t (id,a) values (103,54);
+insert into t (id,a) values (103,55);
+insert into t (id,a) values (103,56);
+insert into t (id,a) values (103,57);
+insert into t (id,a) values (103,58);
+insert into t (id,a) values (103,59);
+insert into t (id,a) values (103,60);
+insert into t (id,a) values (103,61);
+insert into t (id,a) values (103,62);
+insert into t (id,a) values (103,63);
+insert into t (id,a) values (103,64);
+insert into t (id,a) values (103,65);
+insert into t (id,a) values (103,66);
+insert into t (id,a) values (103,67);
+insert into t (id,a) values (103,68);
+insert into t (id,a) values (103,69);
+insert into t (id,a) values (103,70);
+insert into t (id,a) values (103,71);
+insert into t (id,a) values (103,72);
+insert into t (id,a) values (103,73);
+insert into t (id,a) values (103,74);
+insert into t (id,a) values (103,75);
+insert into t (id,a) values (103,76);
+insert into t (id,a) values (103,77);
+insert into t (id,a) values (103,78);
+insert into t (id,a) values (103,79);
+insert into t (id,a) values (103,80);
+insert into t (id,a) values (103,81);
+insert into t (id,a) values (103,82);
+insert into t (id,a) values (103,83);
+insert into t (id,a) values (103,84);
+insert into t (id,a) values (103,85);
+insert into t (id,a) values (103,86);
+insert into t (id,a) values (103,87);
+insert into t (id,a) values (103,88);
+insert into t (id,a) values (103,89);
+insert into t (id,a) values (103,90);
+insert into t (id,a) values (103,91);
+insert into t (id,a) values (103,92);
+insert into t (id,a) values (103,93);
+insert into t (id,a) values (103,94);
+insert into t (id,a) values (103,95);
+insert into t (id,a) values (103,96);
+insert into t (id,a) values (103,97);
+insert into t (id,a) values (103,98);
+insert into t (id,a) values (103,99);
+insert into t (id,a) values (104,0);
+insert into t (id,a) values (104,1);
+insert into t (id,a) values (104,2);
+insert into t (id,a) values (104,3);
+insert into t (id,a) values (104,4);
+insert into t (id,a) values (104,5);
+insert into t (id,a) values (104,6);
+insert into t (id,a) values (104,7);
+insert into t (id,a) values (104,8);
+insert into t (id,a) values (104,9);
+insert into t (id,a) values (104,10);
+insert into t (id,a) values (104,11);
+insert into t (id,a) values (104,12);
+insert into t (id,a) values (104,13);
+insert into t (id,a) values (104,14);
+insert into t (id,a) values (104,15);
+insert into t (id,a) values (104,16);
+insert into t (id,a) values (104,17);
+insert into t (id,a) values (104,18);
+insert into t (id,a) values (104,19);
+insert into t (id,a) values (104,20);
+insert into t (id,a) values (104,21);
+insert into t (id,a) values (104,22);
+insert into t (id,a) values (104,23);
+insert into t (id,a) values (104,24);
+insert into t (id,a) values (104,25);
+insert into t (id,a) values (104,26);
+insert into t (id,a) values (104,27);
+insert into t (id,a) values (104,28);
+insert into t (id,a) values (104,29);
+insert into t (id,a) values (104,30);
+insert into t (id,a) values (104,31);
+insert into t (id,a) values (104,32);
+insert into t (id,a) values (104,33);
+insert into t (id,a) values (104,34);
+insert into t (id,a) values (104,35);
+insert into t (id,a) values (104,36);
+insert into t (id,a) values (104,37);
+insert into t (id,a) values (104,38);
+insert into t (id,a) values (104,39);
+insert into t (id,a) values (104,40);
+insert into t (id,a) values (104,41);
+insert into t (id,a) values (104,42);
+insert into t (id,a) values (104,43);
+insert into t (id,a) values (104,44);
+insert into t (id,a) values (104,45);
+insert into t (id,a) values (104,46);
+insert into t (id,a) values (104,47);
+insert into t (id,a) values (104,48);
+insert into t (id,a) values (104,49);
+insert into t (id,a) values (104,50);
+insert into t (id,a) values (104,51);
+insert into t (id,a) values (104,52);
+insert into t (id,a) values (104,53);
+insert into t (id,a) values (104,54);
+insert into t (id,a) values (104,55);
+insert into t (id,a) values (104,56);
+insert into t (id,a) values (104,57);
+insert into t (id,a) values (104,58);
+insert into t (id,a) values (104,59);
+insert into t (id,a) values (104,60);
+insert into t (id,a) values (104,61);
+insert into t (id,a) values (104,62);
+insert into t (id,a) values (104,63);
+insert into t (id,a) values (104,64);
+insert into t (id,a) values (104,65);
+insert into t (id,a) values (104,66);
+insert into t (id,a) values (104,67);
+insert into t (id,a) values (104,68);
+insert into t (id,a) values (104,69);
+insert into t (id,a) values (104,70);
+insert into t (id,a) values (104,71);
+insert into t (id,a) values (104,72);
+insert into t (id,a) values (104,73);
+insert into t (id,a) values (104,74);
+insert into t (id,a) values (104,75);
+insert into t (id,a) values (104,76);
+insert into t (id,a) values (104,77);
+insert into t (id,a) values (104,78);
+insert into t (id,a) values (104,79);
+insert into t (id,a) values (104,80);
+insert into t (id,a) values (104,81);
+insert into t (id,a) values (104,82);
+insert into t (id,a) values (104,83);
+insert into t (id,a) values (104,84);
+insert into t (id,a) values (104,85);
+insert into t (id,a) values (104,86);
+insert into t (id,a) values (104,87);
+insert into t (id,a) values (104,88);
+insert into t (id,a) values (104,89);
+insert into t (id,a) values (104,90);
+insert into t (id,a) values (104,91);
+insert into t (id,a) values (104,92);
+insert into t (id,a) values (104,93);
+insert into t (id,a) values (104,94);
+insert into t (id,a) values (104,95);
+insert into t (id,a) values (104,96);
+insert into t (id,a) values (104,97);
+insert into t (id,a) values (104,98);
+insert into t (id,a) values (104,99);
+insert into t (id,a) values (105,0);
+insert into t (id,a) values (105,1);
+insert into t (id,a) values (105,2);
+insert into t (id,a) values (105,3);
+insert into t (id,a) values (105,4);
+insert into t (id,a) values (105,5);
+insert into t (id,a) values (105,6);
+insert into t (id,a) values (105,7);
+insert into t (id,a) values (105,8);
+insert into t (id,a) values (105,9);
+insert into t (id,a) values (105,10);
+insert into t (id,a) values (105,11);
+insert into t (id,a) values (105,12);
+insert into t (id,a) values (105,13);
+insert into t (id,a) values (105,14);
+insert into t (id,a) values (105,15);
+insert into t (id,a) values (105,16);
+insert into t (id,a) values (105,17);
+insert into t (id,a) values (105,18);
+insert into t (id,a) values (105,19);
+insert into t (id,a) values (105,20);
+insert into t (id,a) values (105,21);
+insert into t (id,a) values (105,22);
+insert into t (id,a) values (105,23);
+insert into t (id,a) values (105,24);
+insert into t (id,a) values (105,25);
+insert into t (id,a) values (105,26);
+insert into t (id,a) values (105,27);
+insert into t (id,a) values (105,28);
+insert into t (id,a) values (105,29);
+insert into t (id,a) values (105,30);
+insert into t (id,a) values (105,31);
+insert into t (id,a) values (105,32);
+insert into t (id,a) values (105,33);
+insert into t (id,a) values (105,34);
+insert into t (id,a) values (105,35);
+insert into t (id,a) values (105,36);
+insert into t (id,a) values (105,37);
+insert into t (id,a) values (105,38);
+insert into t (id,a) values (105,39);
+insert into t (id,a) values (105,40);
+insert into t (id,a) values (105,41);
+insert into t (id,a) values (105,42);
+insert into t (id,a) values (105,43);
+insert into t (id,a) values (105,44);
+insert into t (id,a) values (105,45);
+insert into t (id,a) values (105,46);
+insert into t (id,a) values (105,47);
+insert into t (id,a) values (105,48);
+insert into t (id,a) values (105,49);
+insert into t (id,a) values (105,50);
+insert into t (id,a) values (105,51);
+insert into t (id,a) values (105,52);
+insert into t (id,a) values (105,53);
+insert into t (id,a) values (105,54);
+insert into t (id,a) values (105,55);
+insert into t (id,a) values (105,56);
+insert into t (id,a) values (105,57);
+insert into t (id,a) values (105,58);
+insert into t (id,a) values (105,59);
+insert into t (id,a) values (105,60);
+insert into t (id,a) values (105,61);
+insert into t (id,a) values (105,62);
+insert into t (id,a) values (105,63);
+insert into t (id,a) values (105,64);
+insert into t (id,a) values (105,65);
+insert into t (id,a) values (105,66);
+insert into t (id,a) values (105,67);
+insert into t (id,a) values (105,68);
+insert into t (id,a) values (105,69);
+insert into t (id,a) values (105,70);
+insert into t (id,a) values (105,71);
+insert into t (id,a) values (105,72);
+insert into t (id,a) values (105,73);
+insert into t (id,a) values (105,74);
+insert into t (id,a) values (105,75);
+insert into t (id,a) values (105,76);
+insert into t (id,a) values (105,77);
+insert into t (id,a) values (105,78);
+insert into t (id,a) values (105,79);
+insert into t (id,a) values (105,80);
+insert into t (id,a) values (105,81);
+insert into t (id,a) values (105,82);
+insert into t (id,a) values (105,83);
+insert into t (id,a) values (105,84);
+insert into t (id,a) values (105,85);
+insert into t (id,a) values (105,86);
+insert into t (id,a) values (105,87);
+insert into t (id,a) values (105,88);
+insert into t (id,a) values (105,89);
+insert into t (id,a) values (105,90);
+insert into t (id,a) values (105,91);
+insert into t (id,a) values (105,92);
+insert into t (id,a) values (105,93);
+insert into t (id,a) values (105,94);
+insert into t (id,a) values (105,95);
+insert into t (id,a) values (105,96);
+insert into t (id,a) values (105,97);
+insert into t (id,a) values (105,98);
+insert into t (id,a) values (105,99);
+insert into t (id,a) values (106,0);
+insert into t (id,a) values (106,1);
+insert into t (id,a) values (106,2);
+insert into t (id,a) values (106,3);
+insert into t (id,a) values (106,4);
+insert into t (id,a) values (106,5);
+insert into t (id,a) values (106,6);
+insert into t (id,a) values (106,7);
+insert into t (id,a) values (106,8);
+insert into t (id,a) values (106,9);
+insert into t (id,a) values (106,10);
+insert into t (id,a) values (106,11);
+insert into t (id,a) values (106,12);
+insert into t (id,a) values (106,13);
+insert into t (id,a) values (106,14);
+insert into t (id,a) values (106,15);
+insert into t (id,a) values (106,16);
+insert into t (id,a) values (106,17);
+insert into t (id,a) values (106,18);
+insert into t (id,a) values (106,19);
+insert into t (id,a) values (106,20);
+insert into t (id,a) values (106,21);
+insert into t (id,a) values (106,22);
+insert into t (id,a) values (106,23);
+insert into t (id,a) values (106,24);
+insert into t (id,a) values (106,25);
+insert into t (id,a) values (106,26);
+insert into t (id,a) values (106,27);
+insert into t (id,a) values (106,28);
+insert into t (id,a) values (106,29);
+insert into t (id,a) values (106,30);
+insert into t (id,a) values (106,31);
+insert into t (id,a) values (106,32);
+insert into t (id,a) values (106,33);
+insert into t (id,a) values (106,34);
+insert into t (id,a) values (106,35);
+insert into t (id,a) values (106,36);
+insert into t (id,a) values (106,37);
+insert into t (id,a) values (106,38);
+insert into t (id,a) values (106,39);
+insert into t (id,a) values (106,40);
+insert into t (id,a) values (106,41);
+insert into t (id,a) values (106,42);
+insert into t (id,a) values (106,43);
+insert into t (id,a) values (106,44);
+insert into t (id,a) values (106,45);
+insert into t (id,a) values (106,46);
+insert into t (id,a) values (106,47);
+insert into t (id,a) values (106,48);
+insert into t (id,a) values (106,49);
+insert into t (id,a) values (106,50);
+insert into t (id,a) values (106,51);
+insert into t (id,a) values (106,52);
+insert into t (id,a) values (106,53);
+insert into t (id,a) values (106,54);
+insert into t (id,a) values (106,55);
+insert into t (id,a) values (106,56);
+insert into t (id,a) values (106,57);
+insert into t (id,a) values (106,58);
+insert into t (id,a) values (106,59);
+insert into t (id,a) values (106,60);
+insert into t (id,a) values (106,61);
+insert into t (id,a) values (106,62);
+insert into t (id,a) values (106,63);
+insert into t (id,a) values (106,64);
+insert into t (id,a) values (106,65);
+insert into t (id,a) values (106,66);
+insert into t (id,a) values (106,67);
+insert into t (id,a) values (106,68);
+insert into t (id,a) values (106,69);
+insert into t (id,a) values (106,70);
+insert into t (id,a) values (106,71);
+insert into t (id,a) values (106,72);
+insert into t (id,a) values (106,73);
+insert into t (id,a) values (106,74);
+insert into t (id,a) values (106,75);
+insert into t (id,a) values (106,76);
+insert into t (id,a) values (106,77);
+insert into t (id,a) values (106,78);
+insert into t (id,a) values (106,79);
+insert into t (id,a) values (106,80);
+insert into t (id,a) values (106,81);
+insert into t (id,a) values (106,82);
+insert into t (id,a) values (106,83);
+insert into t (id,a) values (106,84);
+insert into t (id,a) values (106,85);
+insert into t (id,a) values (106,86);
+insert into t (id,a) values (106,87);
+insert into t (id,a) values (106,88);
+insert into t (id,a) values (106,89);
+insert into t (id,a) values (106,90);
+insert into t (id,a) values (106,91);
+insert into t (id,a) values (106,92);
+insert into t (id,a) values (106,93);
+insert into t (id,a) values (106,94);
+insert into t (id,a) values (106,95);
+insert into t (id,a) values (106,96);
+insert into t (id,a) values (106,97);
+insert into t (id,a) values (106,98);
+insert into t (id,a) values (106,99);
+insert into t (id,a) values (107,0);
+insert into t (id,a) values (107,1);
+insert into t (id,a) values (107,2);
+insert into t (id,a) values (107,3);
+insert into t (id,a) values (107,4);
+insert into t (id,a) values (107,5);
+insert into t (id,a) values (107,6);
+insert into t (id,a) values (107,7);
+insert into t (id,a) values (107,8);
+insert into t (id,a) values (107,9);
+insert into t (id,a) values (107,10);
+insert into t (id,a) values (107,11);
+insert into t (id,a) values (107,12);
+insert into t (id,a) values (107,13);
+insert into t (id,a) values (107,14);
+insert into t (id,a) values (107,15);
+insert into t (id,a) values (107,16);
+insert into t (id,a) values (107,17);
+insert into t (id,a) values (107,18);
+insert into t (id,a) values (107,19);
+insert into t (id,a) values (107,20);
+insert into t (id,a) values (107,21);
+insert into t (id,a) values (107,22);
+insert into t (id,a) values (107,23);
+insert into t (id,a) values (107,24);
+insert into t (id,a) values (107,25);
+insert into t (id,a) values (107,26);
+insert into t (id,a) values (107,27);
+insert into t (id,a) values (107,28);
+insert into t (id,a) values (107,29);
+insert into t (id,a) values (107,30);
+insert into t (id,a) values (107,31);
+insert into t (id,a) values (107,32);
+insert into t (id,a) values (107,33);
+insert into t (id,a) values (107,34);
+insert into t (id,a) values (107,35);
+insert into t (id,a) values (107,36);
+insert into t (id,a) values (107,37);
+insert into t (id,a) values (107,38);
+insert into t (id,a) values (107,39);
+insert into t (id,a) values (107,40);
+insert into t (id,a) values (107,41);
+insert into t (id,a) values (107,42);
+insert into t (id,a) values (107,43);
+insert into t (id,a) values (107,44);
+insert into t (id,a) values (107,45);
+insert into t (id,a) values (107,46);
+insert into t (id,a) values (107,47);
+insert into t (id,a) values (107,48);
+insert into t (id,a) values (107,49);
+insert into t (id,a) values (107,50);
+insert into t (id,a) values (107,51);
+insert into t (id,a) values (107,52);
+insert into t (id,a) values (107,53);
+insert into t (id,a) values (107,54);
+insert into t (id,a) values (107,55);
+insert into t (id,a) values (107,56);
+insert into t (id,a) values (107,57);
+insert into t (id,a) values (107,58);
+insert into t (id,a) values (107,59);
+insert into t (id,a) values (107,60);
+insert into t (id,a) values (107,61);
+insert into t (id,a) values (107,62);
+insert into t (id,a) values (107,63);
+insert into t (id,a) values (107,64);
+insert into t (id,a) values (107,65);
+insert into t (id,a) values (107,66);
+insert into t (id,a) values (107,67);
+insert into t (id,a) values (107,68);
+insert into t (id,a) values (107,69);
+insert into t (id,a) values (107,70);
+insert into t (id,a) values (107,71);
+insert into t (id,a) values (107,72);
+insert into t (id,a) values (107,73);
+insert into t (id,a) values (107,74);
+insert into t (id,a) values (107,75);
+insert into t (id,a) values (107,76);
+insert into t (id,a) values (107,77);
+insert into t (id,a) values (107,78);
+insert into t (id,a) values (107,79);
+insert into t (id,a) values (107,80);
+insert into t (id,a) values (107,81);
+insert into t (id,a) values (107,82);
+insert into t (id,a) values (107,83);
+insert into t (id,a) values (107,84);
+insert into t (id,a) values (107,85);
+insert into t (id,a) values (107,86);
+insert into t (id,a) values (107,87);
+insert into t (id,a) values (107,88);
+insert into t (id,a) values (107,89);
+insert into t (id,a) values (107,90);
+insert into t (id,a) values (107,91);
+insert into t (id,a) values (107,92);
+insert into t (id,a) values (107,93);
+insert into t (id,a) values (107,94);
+insert into t (id,a) values (107,95);
+insert into t (id,a) values (107,96);
+insert into t (id,a) values (107,97);
+insert into t (id,a) values (107,98);
+insert into t (id,a) values (107,99);
+insert into t (id,a) values (108,0);
+insert into t (id,a) values (108,1);
+insert into t (id,a) values (108,2);
+insert into t (id,a) values (108,3);
+insert into t (id,a) values (108,4);
+insert into t (id,a) values (108,5);
+insert into t (id,a) values (108,6);
+insert into t (id,a) values (108,7);
+insert into t (id,a) values (108,8);
+insert into t (id,a) values (108,9);
+insert into t (id,a) values (108,10);
+insert into t (id,a) values (108,11);
+insert into t (id,a) values (108,12);
+insert into t (id,a) values (108,13);
+insert into t (id,a) values (108,14);
+insert into t (id,a) values (108,15);
+insert into t (id,a) values (108,16);
+insert into t (id,a) values (108,17);
+insert into t (id,a) values (108,18);
+insert into t (id,a) values (108,19);
+insert into t (id,a) values (108,20);
+insert into t (id,a) values (108,21);
+insert into t (id,a) values (108,22);
+insert into t (id,a) values (108,23);
+insert into t (id,a) values (108,24);
+insert into t (id,a) values (108,25);
+insert into t (id,a) values (108,26);
+insert into t (id,a) values (108,27);
+insert into t (id,a) values (108,28);
+insert into t (id,a) values (108,29);
+insert into t (id,a) values (108,30);
+insert into t (id,a) values (108,31);
+insert into t (id,a) values (108,32);
+insert into t (id,a) values (108,33);
+insert into t (id,a) values (108,34);
+insert into t (id,a) values (108,35);
+insert into t (id,a) values (108,36);
+insert into t (id,a) values (108,37);
+insert into t (id,a) values (108,38);
+insert into t (id,a) values (108,39);
+insert into t (id,a) values (108,40);
+insert into t (id,a) values (108,41);
+insert into t (id,a) values (108,42);
+insert into t (id,a) values (108,43);
+insert into t (id,a) values (108,44);
+insert into t (id,a) values (108,45);
+insert into t (id,a) values (108,46);
+insert into t (id,a) values (108,47);
+insert into t (id,a) values (108,48);
+insert into t (id,a) values (108,49);
+insert into t (id,a) values (108,50);
+insert into t (id,a) values (108,51);
+insert into t (id,a) values (108,52);
+insert into t (id,a) values (108,53);
+insert into t (id,a) values (108,54);
+insert into t (id,a) values (108,55);
+insert into t (id,a) values (108,56);
+insert into t (id,a) values (108,57);
+insert into t (id,a) values (108,58);
+insert into t (id,a) values (108,59);
+insert into t (id,a) values (108,60);
+insert into t (id,a) values (108,61);
+insert into t (id,a) values (108,62);
+insert into t (id,a) values (108,63);
+insert into t (id,a) values (108,64);
+insert into t (id,a) values (108,65);
+insert into t (id,a) values (108,66);
+insert into t (id,a) values (108,67);
+insert into t (id,a) values (108,68);
+insert into t (id,a) values (108,69);
+insert into t (id,a) values (108,70);
+insert into t (id,a) values (108,71);
+insert into t (id,a) values (108,72);
+insert into t (id,a) values (108,73);
+insert into t (id,a) values (108,74);
+insert into t (id,a) values (108,75);
+insert into t (id,a) values (108,76);
+insert into t (id,a) values (108,77);
+insert into t (id,a) values (108,78);
+insert into t (id,a) values (108,79);
+insert into t (id,a) values (108,80);
+insert into t (id,a) values (108,81);
+insert into t (id,a) values (108,82);
+insert into t (id,a) values (108,83);
+insert into t (id,a) values (108,84);
+insert into t (id,a) values (108,85);
+insert into t (id,a) values (108,86);
+insert into t (id,a) values (108,87);
+insert into t (id,a) values (108,88);
+insert into t (id,a) values (108,89);
+insert into t (id,a) values (108,90);
+insert into t (id,a) values (108,91);
+insert into t (id,a) values (108,92);
+insert into t (id,a) values (108,93);
+insert into t (id,a) values (108,94);
+insert into t (id,a) values (108,95);
+insert into t (id,a) values (108,96);
+insert into t (id,a) values (108,97);
+insert into t (id,a) values (108,98);
+insert into t (id,a) values (108,99);
+insert into t (id,a) values (109,0);
+insert into t (id,a) values (109,1);
+insert into t (id,a) values (109,2);
+insert into t (id,a) values (109,3);
+insert into t (id,a) values (109,4);
+insert into t (id,a) values (109,5);
+insert into t (id,a) values (109,6);
+insert into t (id,a) values (109,7);
+insert into t (id,a) values (109,8);
+insert into t (id,a) values (109,9);
+insert into t (id,a) values (109,10);
+insert into t (id,a) values (109,11);
+insert into t (id,a) values (109,12);
+insert into t (id,a) values (109,13);
+insert into t (id,a) values (109,14);
+insert into t (id,a) values (109,15);
+insert into t (id,a) values (109,16);
+insert into t (id,a) values (109,17);
+insert into t (id,a) values (109,18);
+insert into t (id,a) values (109,19);
+insert into t (id,a) values (109,20);
+insert into t (id,a) values (109,21);
+insert into t (id,a) values (109,22);
+insert into t (id,a) values (109,23);
+insert into t (id,a) values (109,24);
+insert into t (id,a) values (109,25);
+insert into t (id,a) values (109,26);
+insert into t (id,a) values (109,27);
+insert into t (id,a) values (109,28);
+insert into t (id,a) values (109,29);
+insert into t (id,a) values (109,30);
+insert into t (id,a) values (109,31);
+insert into t (id,a) values (109,32);
+insert into t (id,a) values (109,33);
+insert into t (id,a) values (109,34);
+insert into t (id,a) values (109,35);
+insert into t (id,a) values (109,36);
+insert into t (id,a) values (109,37);
+insert into t (id,a) values (109,38);
+insert into t (id,a) values (109,39);
+insert into t (id,a) values (109,40);
+insert into t (id,a) values (109,41);
+insert into t (id,a) values (109,42);
+insert into t (id,a) values (109,43);
+insert into t (id,a) values (109,44);
+insert into t (id,a) values (109,45);
+insert into t (id,a) values (109,46);
+insert into t (id,a) values (109,47);
+insert into t (id,a) values (109,48);
+insert into t (id,a) values (109,49);
+insert into t (id,a) values (109,50);
+insert into t (id,a) values (109,51);
+insert into t (id,a) values (109,52);
+insert into t (id,a) values (109,53);
+insert into t (id,a) values (109,54);
+insert into t (id,a) values (109,55);
+insert into t (id,a) values (109,56);
+insert into t (id,a) values (109,57);
+insert into t (id,a) values (109,58);
+insert into t (id,a) values (109,59);
+insert into t (id,a) values (109,60);
+insert into t (id,a) values (109,61);
+insert into t (id,a) values (109,62);
+insert into t (id,a) values (109,63);
+insert into t (id,a) values (109,64);
+insert into t (id,a) values (109,65);
+insert into t (id,a) values (109,66);
+insert into t (id,a) values (109,67);
+insert into t (id,a) values (109,68);
+insert into t (id,a) values (109,69);
+insert into t (id,a) values (109,70);
+insert into t (id,a) values (109,71);
+insert into t (id,a) values (109,72);
+insert into t (id,a) values (109,73);
+insert into t (id,a) values (109,74);
+insert into t (id,a) values (109,75);
+insert into t (id,a) values (109,76);
+insert into t (id,a) values (109,77);
+insert into t (id,a) values (109,78);
+insert into t (id,a) values (109,79);
+insert into t (id,a) values (109,80);
+insert into t (id,a) values (109,81);
+insert into t (id,a) values (109,82);
+insert into t (id,a) values (109,83);
+insert into t (id,a) values (109,84);
+insert into t (id,a) values (109,85);
+insert into t (id,a) values (109,86);
+insert into t (id,a) values (109,87);
+insert into t (id,a) values (109,88);
+insert into t (id,a) values (109,89);
+insert into t (id,a) values (109,90);
+insert into t (id,a) values (109,91);
+insert into t (id,a) values (109,92);
+insert into t (id,a) values (109,93);
+insert into t (id,a) values (109,94);
+insert into t (id,a) values (109,95);
+insert into t (id,a) values (109,96);
+insert into t (id,a) values (109,97);
+insert into t (id,a) values (109,98);
+insert into t (id,a) values (109,99);
+insert into t (id,a) values (110,0);
+insert into t (id,a) values (110,1);
+insert into t (id,a) values (110,2);
+insert into t (id,a) values (110,3);
+insert into t (id,a) values (110,4);
+insert into t (id,a) values (110,5);
+insert into t (id,a) values (110,6);
+insert into t (id,a) values (110,7);
+insert into t (id,a) values (110,8);
+insert into t (id,a) values (110,9);
+insert into t (id,a) values (110,10);
+insert into t (id,a) values (110,11);
+insert into t (id,a) values (110,12);
+insert into t (id,a) values (110,13);
+insert into t (id,a) values (110,14);
+insert into t (id,a) values (110,15);
+insert into t (id,a) values (110,16);
+insert into t (id,a) values (110,17);
+insert into t (id,a) values (110,18);
+insert into t (id,a) values (110,19);
+insert into t (id,a) values (110,20);
+insert into t (id,a) values (110,21);
+insert into t (id,a) values (110,22);
+insert into t (id,a) values (110,23);
+insert into t (id,a) values (110,24);
+insert into t (id,a) values (110,25);
+insert into t (id,a) values (110,26);
+insert into t (id,a) values (110,27);
+insert into t (id,a) values (110,28);
+insert into t (id,a) values (110,29);
+insert into t (id,a) values (110,30);
+insert into t (id,a) values (110,31);
+insert into t (id,a) values (110,32);
+insert into t (id,a) values (110,33);
+insert into t (id,a) values (110,34);
+insert into t (id,a) values (110,35);
+insert into t (id,a) values (110,36);
+insert into t (id,a) values (110,37);
+insert into t (id,a) values (110,38);
+insert into t (id,a) values (110,39);
+insert into t (id,a) values (110,40);
+insert into t (id,a) values (110,41);
+insert into t (id,a) values (110,42);
+insert into t (id,a) values (110,43);
+insert into t (id,a) values (110,44);
+insert into t (id,a) values (110,45);
+insert into t (id,a) values (110,46);
+insert into t (id,a) values (110,47);
+insert into t (id,a) values (110,48);
+insert into t (id,a) values (110,49);
+insert into t (id,a) values (110,50);
+insert into t (id,a) values (110,51);
+insert into t (id,a) values (110,52);
+insert into t (id,a) values (110,53);
+insert into t (id,a) values (110,54);
+insert into t (id,a) values (110,55);
+insert into t (id,a) values (110,56);
+insert into t (id,a) values (110,57);
+insert into t (id,a) values (110,58);
+insert into t (id,a) values (110,59);
+insert into t (id,a) values (110,60);
+insert into t (id,a) values (110,61);
+insert into t (id,a) values (110,62);
+insert into t (id,a) values (110,63);
+insert into t (id,a) values (110,64);
+insert into t (id,a) values (110,65);
+insert into t (id,a) values (110,66);
+insert into t (id,a) values (110,67);
+insert into t (id,a) values (110,68);
+insert into t (id,a) values (110,69);
+insert into t (id,a) values (110,70);
+insert into t (id,a) values (110,71);
+insert into t (id,a) values (110,72);
+insert into t (id,a) values (110,73);
+insert into t (id,a) values (110,74);
+insert into t (id,a) values (110,75);
+insert into t (id,a) values (110,76);
+insert into t (id,a) values (110,77);
+insert into t (id,a) values (110,78);
+insert into t (id,a) values (110,79);
+insert into t (id,a) values (110,80);
+insert into t (id,a) values (110,81);
+insert into t (id,a) values (110,82);
+insert into t (id,a) values (110,83);
+insert into t (id,a) values (110,84);
+insert into t (id,a) values (110,85);
+insert into t (id,a) values (110,86);
+insert into t (id,a) values (110,87);
+insert into t (id,a) values (110,88);
+insert into t (id,a) values (110,89);
+insert into t (id,a) values (110,90);
+insert into t (id,a) values (110,91);
+insert into t (id,a) values (110,92);
+insert into t (id,a) values (110,93);
+insert into t (id,a) values (110,94);
+insert into t (id,a) values (110,95);
+insert into t (id,a) values (110,96);
+insert into t (id,a) values (110,97);
+insert into t (id,a) values (110,98);
+insert into t (id,a) values (110,99);
+insert into t (id,a) values (111,0);
+insert into t (id,a) values (111,1);
+insert into t (id,a) values (111,2);
+insert into t (id,a) values (111,3);
+insert into t (id,a) values (111,4);
+insert into t (id,a) values (111,5);
+insert into t (id,a) values (111,6);
+insert into t (id,a) values (111,7);
+insert into t (id,a) values (111,8);
+insert into t (id,a) values (111,9);
+insert into t (id,a) values (111,10);
+insert into t (id,a) values (111,11);
+insert into t (id,a) values (111,12);
+insert into t (id,a) values (111,13);
+insert into t (id,a) values (111,14);
+insert into t (id,a) values (111,15);
+insert into t (id,a) values (111,16);
+insert into t (id,a) values (111,17);
+insert into t (id,a) values (111,18);
+insert into t (id,a) values (111,19);
+insert into t (id,a) values (111,20);
+insert into t (id,a) values (111,21);
+insert into t (id,a) values (111,22);
+insert into t (id,a) values (111,23);
+insert into t (id,a) values (111,24);
+insert into t (id,a) values (111,25);
+insert into t (id,a) values (111,26);
+insert into t (id,a) values (111,27);
+insert into t (id,a) values (111,28);
+insert into t (id,a) values (111,29);
+insert into t (id,a) values (111,30);
+insert into t (id,a) values (111,31);
+insert into t (id,a) values (111,32);
+insert into t (id,a) values (111,33);
+insert into t (id,a) values (111,34);
+insert into t (id,a) values (111,35);
+insert into t (id,a) values (111,36);
+insert into t (id,a) values (111,37);
+insert into t (id,a) values (111,38);
+insert into t (id,a) values (111,39);
+insert into t (id,a) values (111,40);
+insert into t (id,a) values (111,41);
+insert into t (id,a) values (111,42);
+insert into t (id,a) values (111,43);
+insert into t (id,a) values (111,44);
+insert into t (id,a) values (111,45);
+insert into t (id,a) values (111,46);
+insert into t (id,a) values (111,47);
+insert into t (id,a) values (111,48);
+insert into t (id,a) values (111,49);
+insert into t (id,a) values (111,50);
+insert into t (id,a) values (111,51);
+insert into t (id,a) values (111,52);
+insert into t (id,a) values (111,53);
+insert into t (id,a) values (111,54);
+insert into t (id,a) values (111,55);
+insert into t (id,a) values (111,56);
+insert into t (id,a) values (111,57);
+insert into t (id,a) values (111,58);
+insert into t (id,a) values (111,59);
+insert into t (id,a) values (111,60);
+insert into t (id,a) values (111,61);
+insert into t (id,a) values (111,62);
+insert into t (id,a) values (111,63);
+insert into t (id,a) values (111,64);
+insert into t (id,a) values (111,65);
+insert into t (id,a) values (111,66);
+insert into t (id,a) values (111,67);
+insert into t (id,a) values (111,68);
+insert into t (id,a) values (111,69);
+insert into t (id,a) values (111,70);
+insert into t (id,a) values (111,71);
+insert into t (id,a) values (111,72);
+insert into t (id,a) values (111,73);
+insert into t (id,a) values (111,74);
+insert into t (id,a) values (111,75);
+insert into t (id,a) values (111,76);
+insert into t (id,a) values (111,77);
+insert into t (id,a) values (111,78);
+insert into t (id,a) values (111,79);
+insert into t (id,a) values (111,80);
+insert into t (id,a) values (111,81);
+insert into t (id,a) values (111,82);
+insert into t (id,a) values (111,83);
+insert into t (id,a) values (111,84);
+insert into t (id,a) values (111,85);
+insert into t (id,a) values (111,86);
+insert into t (id,a) values (111,87);
+insert into t (id,a) values (111,88);
+insert into t (id,a) values (111,89);
+insert into t (id,a) values (111,90);
+insert into t (id,a) values (111,91);
+insert into t (id,a) values (111,92);
+insert into t (id,a) values (111,93);
+insert into t (id,a) values (111,94);
+insert into t (id,a) values (111,95);
+insert into t (id,a) values (111,96);
+insert into t (id,a) values (111,97);
+insert into t (id,a) values (111,98);
+insert into t (id,a) values (111,99);
+insert into t (id,a) values (112,0);
+insert into t (id,a) values (112,1);
+insert into t (id,a) values (112,2);
+insert into t (id,a) values (112,3);
+insert into t (id,a) values (112,4);
+insert into t (id,a) values (112,5);
+insert into t (id,a) values (112,6);
+insert into t (id,a) values (112,7);
+insert into t (id,a) values (112,8);
+insert into t (id,a) values (112,9);
+insert into t (id,a) values (112,10);
+insert into t (id,a) values (112,11);
+insert into t (id,a) values (112,12);
+insert into t (id,a) values (112,13);
+insert into t (id,a) values (112,14);
+insert into t (id,a) values (112,15);
+insert into t (id,a) values (112,16);
+insert into t (id,a) values (112,17);
+insert into t (id,a) values (112,18);
+insert into t (id,a) values (112,19);
+insert into t (id,a) values (112,20);
+insert into t (id,a) values (112,21);
+insert into t (id,a) values (112,22);
+insert into t (id,a) values (112,23);
+insert into t (id,a) values (112,24);
+insert into t (id,a) values (112,25);
+insert into t (id,a) values (112,26);
+insert into t (id,a) values (112,27);
+insert into t (id,a) values (112,28);
+insert into t (id,a) values (112,29);
+insert into t (id,a) values (112,30);
+insert into t (id,a) values (112,31);
+insert into t (id,a) values (112,32);
+insert into t (id,a) values (112,33);
+insert into t (id,a) values (112,34);
+insert into t (id,a) values (112,35);
+insert into t (id,a) values (112,36);
+insert into t (id,a) values (112,37);
+insert into t (id,a) values (112,38);
+insert into t (id,a) values (112,39);
+insert into t (id,a) values (112,40);
+insert into t (id,a) values (112,41);
+insert into t (id,a) values (112,42);
+insert into t (id,a) values (112,43);
+insert into t (id,a) values (112,44);
+insert into t (id,a) values (112,45);
+insert into t (id,a) values (112,46);
+insert into t (id,a) values (112,47);
+insert into t (id,a) values (112,48);
+insert into t (id,a) values (112,49);
+insert into t (id,a) values (112,50);
+insert into t (id,a) values (112,51);
+insert into t (id,a) values (112,52);
+insert into t (id,a) values (112,53);
+insert into t (id,a) values (112,54);
+insert into t (id,a) values (112,55);
+insert into t (id,a) values (112,56);
+insert into t (id,a) values (112,57);
+insert into t (id,a) values (112,58);
+insert into t (id,a) values (112,59);
+insert into t (id,a) values (112,60);
+insert into t (id,a) values (112,61);
+insert into t (id,a) values (112,62);
+insert into t (id,a) values (112,63);
+insert into t (id,a) values (112,64);
+insert into t (id,a) values (112,65);
+insert into t (id,a) values (112,66);
+insert into t (id,a) values (112,67);
+insert into t (id,a) values (112,68);
+insert into t (id,a) values (112,69);
+insert into t (id,a) values (112,70);
+insert into t (id,a) values (112,71);
+insert into t (id,a) values (112,72);
+insert into t (id,a) values (112,73);
+insert into t (id,a) values (112,74);
+insert into t (id,a) values (112,75);
+insert into t (id,a) values (112,76);
+insert into t (id,a) values (112,77);
+insert into t (id,a) values (112,78);
+insert into t (id,a) values (112,79);
+insert into t (id,a) values (112,80);
+insert into t (id,a) values (112,81);
+insert into t (id,a) values (112,82);
+insert into t (id,a) values (112,83);
+insert into t (id,a) values (112,84);
+insert into t (id,a) values (112,85);
+insert into t (id,a) values (112,86);
+insert into t (id,a) values (112,87);
+insert into t (id,a) values (112,88);
+insert into t (id,a) values (112,89);
+insert into t (id,a) values (112,90);
+insert into t (id,a) values (112,91);
+insert into t (id,a) values (112,92);
+insert into t (id,a) values (112,93);
+insert into t (id,a) values (112,94);
+insert into t (id,a) values (112,95);
+insert into t (id,a) values (112,96);
+insert into t (id,a) values (112,97);
+insert into t (id,a) values (112,98);
+insert into t (id,a) values (112,99);
+insert into t (id,a) values (113,0);
+insert into t (id,a) values (113,1);
+insert into t (id,a) values (113,2);
+insert into t (id,a) values (113,3);
+insert into t (id,a) values (113,4);
+insert into t (id,a) values (113,5);
+insert into t (id,a) values (113,6);
+insert into t (id,a) values (113,7);
+insert into t (id,a) values (113,8);
+insert into t (id,a) values (113,9);
+insert into t (id,a) values (113,10);
+insert into t (id,a) values (113,11);
+insert into t (id,a) values (113,12);
+insert into t (id,a) values (113,13);
+insert into t (id,a) values (113,14);
+insert into t (id,a) values (113,15);
+insert into t (id,a) values (113,16);
+insert into t (id,a) values (113,17);
+insert into t (id,a) values (113,18);
+insert into t (id,a) values (113,19);
+insert into t (id,a) values (113,20);
+insert into t (id,a) values (113,21);
+insert into t (id,a) values (113,22);
+insert into t (id,a) values (113,23);
+insert into t (id,a) values (113,24);
+insert into t (id,a) values (113,25);
+insert into t (id,a) values (113,26);
+insert into t (id,a) values (113,27);
+insert into t (id,a) values (113,28);
+insert into t (id,a) values (113,29);
+insert into t (id,a) values (113,30);
+insert into t (id,a) values (113,31);
+insert into t (id,a) values (113,32);
+insert into t (id,a) values (113,33);
+insert into t (id,a) values (113,34);
+insert into t (id,a) values (113,35);
+insert into t (id,a) values (113,36);
+insert into t (id,a) values (113,37);
+insert into t (id,a) values (113,38);
+insert into t (id,a) values (113,39);
+insert into t (id,a) values (113,40);
+insert into t (id,a) values (113,41);
+insert into t (id,a) values (113,42);
+insert into t (id,a) values (113,43);
+insert into t (id,a) values (113,44);
+insert into t (id,a) values (113,45);
+insert into t (id,a) values (113,46);
+insert into t (id,a) values (113,47);
+insert into t (id,a) values (113,48);
+insert into t (id,a) values (113,49);
+insert into t (id,a) values (113,50);
+insert into t (id,a) values (113,51);
+insert into t (id,a) values (113,52);
+insert into t (id,a) values (113,53);
+insert into t (id,a) values (113,54);
+insert into t (id,a) values (113,55);
+insert into t (id,a) values (113,56);
+insert into t (id,a) values (113,57);
+insert into t (id,a) values (113,58);
+insert into t (id,a) values (113,59);
+insert into t (id,a) values (113,60);
+insert into t (id,a) values (113,61);
+insert into t (id,a) values (113,62);
+insert into t (id,a) values (113,63);
+insert into t (id,a) values (113,64);
+insert into t (id,a) values (113,65);
+insert into t (id,a) values (113,66);
+insert into t (id,a) values (113,67);
+insert into t (id,a) values (113,68);
+insert into t (id,a) values (113,69);
+insert into t (id,a) values (113,70);
+insert into t (id,a) values (113,71);
+insert into t (id,a) values (113,72);
+insert into t (id,a) values (113,73);
+insert into t (id,a) values (113,74);
+insert into t (id,a) values (113,75);
+insert into t (id,a) values (113,76);
+insert into t (id,a) values (113,77);
+insert into t (id,a) values (113,78);
+insert into t (id,a) values (113,79);
+insert into t (id,a) values (113,80);
+insert into t (id,a) values (113,81);
+insert into t (id,a) values (113,82);
+insert into t (id,a) values (113,83);
+insert into t (id,a) values (113,84);
+insert into t (id,a) values (113,85);
+insert into t (id,a) values (113,86);
+insert into t (id,a) values (113,87);
+insert into t (id,a) values (113,88);
+insert into t (id,a) values (113,89);
+insert into t (id,a) values (113,90);
+insert into t (id,a) values (113,91);
+insert into t (id,a) values (113,92);
+insert into t (id,a) values (113,93);
+insert into t (id,a) values (113,94);
+insert into t (id,a) values (113,95);
+insert into t (id,a) values (113,96);
+insert into t (id,a) values (113,97);
+insert into t (id,a) values (113,98);
+insert into t (id,a) values (113,99);
+insert into t (id,a) values (114,0);
+insert into t (id,a) values (114,1);
+insert into t (id,a) values (114,2);
+insert into t (id,a) values (114,3);
+insert into t (id,a) values (114,4);
+insert into t (id,a) values (114,5);
+insert into t (id,a) values (114,6);
+insert into t (id,a) values (114,7);
+insert into t (id,a) values (114,8);
+insert into t (id,a) values (114,9);
+insert into t (id,a) values (114,10);
+insert into t (id,a) values (114,11);
+insert into t (id,a) values (114,12);
+insert into t (id,a) values (114,13);
+insert into t (id,a) values (114,14);
+insert into t (id,a) values (114,15);
+insert into t (id,a) values (114,16);
+insert into t (id,a) values (114,17);
+insert into t (id,a) values (114,18);
+insert into t (id,a) values (114,19);
+insert into t (id,a) values (114,20);
+insert into t (id,a) values (114,21);
+insert into t (id,a) values (114,22);
+insert into t (id,a) values (114,23);
+insert into t (id,a) values (114,24);
+insert into t (id,a) values (114,25);
+insert into t (id,a) values (114,26);
+insert into t (id,a) values (114,27);
+insert into t (id,a) values (114,28);
+insert into t (id,a) values (114,29);
+insert into t (id,a) values (114,30);
+insert into t (id,a) values (114,31);
+insert into t (id,a) values (114,32);
+insert into t (id,a) values (114,33);
+insert into t (id,a) values (114,34);
+insert into t (id,a) values (114,35);
+insert into t (id,a) values (114,36);
+insert into t (id,a) values (114,37);
+insert into t (id,a) values (114,38);
+insert into t (id,a) values (114,39);
+insert into t (id,a) values (114,40);
+insert into t (id,a) values (114,41);
+insert into t (id,a) values (114,42);
+insert into t (id,a) values (114,43);
+insert into t (id,a) values (114,44);
+insert into t (id,a) values (114,45);
+insert into t (id,a) values (114,46);
+insert into t (id,a) values (114,47);
+insert into t (id,a) values (114,48);
+insert into t (id,a) values (114,49);
+insert into t (id,a) values (114,50);
+insert into t (id,a) values (114,51);
+insert into t (id,a) values (114,52);
+insert into t (id,a) values (114,53);
+insert into t (id,a) values (114,54);
+insert into t (id,a) values (114,55);
+insert into t (id,a) values (114,56);
+insert into t (id,a) values (114,57);
+insert into t (id,a) values (114,58);
+insert into t (id,a) values (114,59);
+insert into t (id,a) values (114,60);
+insert into t (id,a) values (114,61);
+insert into t (id,a) values (114,62);
+insert into t (id,a) values (114,63);
+insert into t (id,a) values (114,64);
+insert into t (id,a) values (114,65);
+insert into t (id,a) values (114,66);
+insert into t (id,a) values (114,67);
+insert into t (id,a) values (114,68);
+insert into t (id,a) values (114,69);
+insert into t (id,a) values (114,70);
+insert into t (id,a) values (114,71);
+insert into t (id,a) values (114,72);
+insert into t (id,a) values (114,73);
+insert into t (id,a) values (114,74);
+insert into t (id,a) values (114,75);
+insert into t (id,a) values (114,76);
+insert into t (id,a) values (114,77);
+insert into t (id,a) values (114,78);
+insert into t (id,a) values (114,79);
+insert into t (id,a) values (114,80);
+insert into t (id,a) values (114,81);
+insert into t (id,a) values (114,82);
+insert into t (id,a) values (114,83);
+insert into t (id,a) values (114,84);
+insert into t (id,a) values (114,85);
+insert into t (id,a) values (114,86);
+insert into t (id,a) values (114,87);
+insert into t (id,a) values (114,88);
+insert into t (id,a) values (114,89);
+insert into t (id,a) values (114,90);
+insert into t (id,a) values (114,91);
+insert into t (id,a) values (114,92);
+insert into t (id,a) values (114,93);
+insert into t (id,a) values (114,94);
+insert into t (id,a) values (114,95);
+insert into t (id,a) values (114,96);
+insert into t (id,a) values (114,97);
+insert into t (id,a) values (114,98);
+insert into t (id,a) values (114,99);
+insert into t (id,a) values (115,0);
+insert into t (id,a) values (115,1);
+insert into t (id,a) values (115,2);
+insert into t (id,a) values (115,3);
+insert into t (id,a) values (115,4);
+insert into t (id,a) values (115,5);
+insert into t (id,a) values (115,6);
+insert into t (id,a) values (115,7);
+insert into t (id,a) values (115,8);
+insert into t (id,a) values (115,9);
+insert into t (id,a) values (115,10);
+insert into t (id,a) values (115,11);
+insert into t (id,a) values (115,12);
+insert into t (id,a) values (115,13);
+insert into t (id,a) values (115,14);
+insert into t (id,a) values (115,15);
+insert into t (id,a) values (115,16);
+insert into t (id,a) values (115,17);
+insert into t (id,a) values (115,18);
+insert into t (id,a) values (115,19);
+insert into t (id,a) values (115,20);
+insert into t (id,a) values (115,21);
+insert into t (id,a) values (115,22);
+insert into t (id,a) values (115,23);
+insert into t (id,a) values (115,24);
+insert into t (id,a) values (115,25);
+insert into t (id,a) values (115,26);
+insert into t (id,a) values (115,27);
+insert into t (id,a) values (115,28);
+insert into t (id,a) values (115,29);
+insert into t (id,a) values (115,30);
+insert into t (id,a) values (115,31);
+insert into t (id,a) values (115,32);
+insert into t (id,a) values (115,33);
+insert into t (id,a) values (115,34);
+insert into t (id,a) values (115,35);
+insert into t (id,a) values (115,36);
+insert into t (id,a) values (115,37);
+insert into t (id,a) values (115,38);
+insert into t (id,a) values (115,39);
+insert into t (id,a) values (115,40);
+insert into t (id,a) values (115,41);
+insert into t (id,a) values (115,42);
+insert into t (id,a) values (115,43);
+insert into t (id,a) values (115,44);
+insert into t (id,a) values (115,45);
+insert into t (id,a) values (115,46);
+insert into t (id,a) values (115,47);
+insert into t (id,a) values (115,48);
+insert into t (id,a) values (115,49);
+insert into t (id,a) values (115,50);
+insert into t (id,a) values (115,51);
+insert into t (id,a) values (115,52);
+insert into t (id,a) values (115,53);
+insert into t (id,a) values (115,54);
+insert into t (id,a) values (115,55);
+insert into t (id,a) values (115,56);
+insert into t (id,a) values (115,57);
+insert into t (id,a) values (115,58);
+insert into t (id,a) values (115,59);
+insert into t (id,a) values (115,60);
+insert into t (id,a) values (115,61);
+insert into t (id,a) values (115,62);
+insert into t (id,a) values (115,63);
+insert into t (id,a) values (115,64);
+insert into t (id,a) values (115,65);
+insert into t (id,a) values (115,66);
+insert into t (id,a) values (115,67);
+insert into t (id,a) values (115,68);
+insert into t (id,a) values (115,69);
+insert into t (id,a) values (115,70);
+insert into t (id,a) values (115,71);
+insert into t (id,a) values (115,72);
+insert into t (id,a) values (115,73);
+insert into t (id,a) values (115,74);
+insert into t (id,a) values (115,75);
+insert into t (id,a) values (115,76);
+insert into t (id,a) values (115,77);
+insert into t (id,a) values (115,78);
+insert into t (id,a) values (115,79);
+insert into t (id,a) values (115,80);
+insert into t (id,a) values (115,81);
+insert into t (id,a) values (115,82);
+insert into t (id,a) values (115,83);
+insert into t (id,a) values (115,84);
+insert into t (id,a) values (115,85);
+insert into t (id,a) values (115,86);
+insert into t (id,a) values (115,87);
+insert into t (id,a) values (115,88);
+insert into t (id,a) values (115,89);
+insert into t (id,a) values (115,90);
+insert into t (id,a) values (115,91);
+insert into t (id,a) values (115,92);
+insert into t (id,a) values (115,93);
+insert into t (id,a) values (115,94);
+insert into t (id,a) values (115,95);
+insert into t (id,a) values (115,96);
+insert into t (id,a) values (115,97);
+insert into t (id,a) values (115,98);
+insert into t (id,a) values (115,99);
+insert into t (id,a) values (116,0);
+insert into t (id,a) values (116,1);
+insert into t (id,a) values (116,2);
+insert into t (id,a) values (116,3);
+insert into t (id,a) values (116,4);
+insert into t (id,a) values (116,5);
+insert into t (id,a) values (116,6);
+insert into t (id,a) values (116,7);
+insert into t (id,a) values (116,8);
+insert into t (id,a) values (116,9);
+insert into t (id,a) values (116,10);
+insert into t (id,a) values (116,11);
+insert into t (id,a) values (116,12);
+insert into t (id,a) values (116,13);
+insert into t (id,a) values (116,14);
+insert into t (id,a) values (116,15);
+insert into t (id,a) values (116,16);
+insert into t (id,a) values (116,17);
+insert into t (id,a) values (116,18);
+insert into t (id,a) values (116,19);
+insert into t (id,a) values (116,20);
+insert into t (id,a) values (116,21);
+insert into t (id,a) values (116,22);
+insert into t (id,a) values (116,23);
+insert into t (id,a) values (116,24);
+insert into t (id,a) values (116,25);
+insert into t (id,a) values (116,26);
+insert into t (id,a) values (116,27);
+insert into t (id,a) values (116,28);
+insert into t (id,a) values (116,29);
+insert into t (id,a) values (116,30);
+insert into t (id,a) values (116,31);
+insert into t (id,a) values (116,32);
+insert into t (id,a) values (116,33);
+insert into t (id,a) values (116,34);
+insert into t (id,a) values (116,35);
+insert into t (id,a) values (116,36);
+insert into t (id,a) values (116,37);
+insert into t (id,a) values (116,38);
+insert into t (id,a) values (116,39);
+insert into t (id,a) values (116,40);
+insert into t (id,a) values (116,41);
+insert into t (id,a) values (116,42);
+insert into t (id,a) values (116,43);
+insert into t (id,a) values (116,44);
+insert into t (id,a) values (116,45);
+insert into t (id,a) values (116,46);
+insert into t (id,a) values (116,47);
+insert into t (id,a) values (116,48);
+insert into t (id,a) values (116,49);
+insert into t (id,a) values (116,50);
+insert into t (id,a) values (116,51);
+insert into t (id,a) values (116,52);
+insert into t (id,a) values (116,53);
+insert into t (id,a) values (116,54);
+insert into t (id,a) values (116,55);
+insert into t (id,a) values (116,56);
+insert into t (id,a) values (116,57);
+insert into t (id,a) values (116,58);
+insert into t (id,a) values (116,59);
+insert into t (id,a) values (116,60);
+insert into t (id,a) values (116,61);
+insert into t (id,a) values (116,62);
+insert into t (id,a) values (116,63);
+insert into t (id,a) values (116,64);
+insert into t (id,a) values (116,65);
+insert into t (id,a) values (116,66);
+insert into t (id,a) values (116,67);
+insert into t (id,a) values (116,68);
+insert into t (id,a) values (116,69);
+insert into t (id,a) values (116,70);
+insert into t (id,a) values (116,71);
+insert into t (id,a) values (116,72);
+insert into t (id,a) values (116,73);
+insert into t (id,a) values (116,74);
+insert into t (id,a) values (116,75);
+insert into t (id,a) values (116,76);
+insert into t (id,a) values (116,77);
+insert into t (id,a) values (116,78);
+insert into t (id,a) values (116,79);
+insert into t (id,a) values (116,80);
+insert into t (id,a) values (116,81);
+insert into t (id,a) values (116,82);
+insert into t (id,a) values (116,83);
+insert into t (id,a) values (116,84);
+insert into t (id,a) values (116,85);
+insert into t (id,a) values (116,86);
+insert into t (id,a) values (116,87);
+insert into t (id,a) values (116,88);
+insert into t (id,a) values (116,89);
+insert into t (id,a) values (116,90);
+insert into t (id,a) values (116,91);
+insert into t (id,a) values (116,92);
+insert into t (id,a) values (116,93);
+insert into t (id,a) values (116,94);
+insert into t (id,a) values (116,95);
+insert into t (id,a) values (116,96);
+insert into t (id,a) values (116,97);
+insert into t (id,a) values (116,98);
+insert into t (id,a) values (116,99);
+insert into t (id,a) values (117,0);
+insert into t (id,a) values (117,1);
+insert into t (id,a) values (117,2);
+insert into t (id,a) values (117,3);
+insert into t (id,a) values (117,4);
+insert into t (id,a) values (117,5);
+insert into t (id,a) values (117,6);
+insert into t (id,a) values (117,7);
+insert into t (id,a) values (117,8);
+insert into t (id,a) values (117,9);
+insert into t (id,a) values (117,10);
+insert into t (id,a) values (117,11);
+insert into t (id,a) values (117,12);
+insert into t (id,a) values (117,13);
+insert into t (id,a) values (117,14);
+insert into t (id,a) values (117,15);
+insert into t (id,a) values (117,16);
+insert into t (id,a) values (117,17);
+insert into t (id,a) values (117,18);
+insert into t (id,a) values (117,19);
+insert into t (id,a) values (117,20);
+insert into t (id,a) values (117,21);
+insert into t (id,a) values (117,22);
+insert into t (id,a) values (117,23);
+insert into t (id,a) values (117,24);
+insert into t (id,a) values (117,25);
+insert into t (id,a) values (117,26);
+insert into t (id,a) values (117,27);
+insert into t (id,a) values (117,28);
+insert into t (id,a) values (117,29);
+insert into t (id,a) values (117,30);
+insert into t (id,a) values (117,31);
+insert into t (id,a) values (117,32);
+insert into t (id,a) values (117,33);
+insert into t (id,a) values (117,34);
+insert into t (id,a) values (117,35);
+insert into t (id,a) values (117,36);
+insert into t (id,a) values (117,37);
+insert into t (id,a) values (117,38);
+insert into t (id,a) values (117,39);
+insert into t (id,a) values (117,40);
+insert into t (id,a) values (117,41);
+insert into t (id,a) values (117,42);
+insert into t (id,a) values (117,43);
+insert into t (id,a) values (117,44);
+insert into t (id,a) values (117,45);
+insert into t (id,a) values (117,46);
+insert into t (id,a) values (117,47);
+insert into t (id,a) values (117,48);
+insert into t (id,a) values (117,49);
+insert into t (id,a) values (117,50);
+insert into t (id,a) values (117,51);
+insert into t (id,a) values (117,52);
+insert into t (id,a) values (117,53);
+insert into t (id,a) values (117,54);
+insert into t (id,a) values (117,55);
+insert into t (id,a) values (117,56);
+insert into t (id,a) values (117,57);
+insert into t (id,a) values (117,58);
+insert into t (id,a) values (117,59);
+insert into t (id,a) values (117,60);
+insert into t (id,a) values (117,61);
+insert into t (id,a) values (117,62);
+insert into t (id,a) values (117,63);
+insert into t (id,a) values (117,64);
+insert into t (id,a) values (117,65);
+insert into t (id,a) values (117,66);
+insert into t (id,a) values (117,67);
+insert into t (id,a) values (117,68);
+insert into t (id,a) values (117,69);
+insert into t (id,a) values (117,70);
+insert into t (id,a) values (117,71);
+insert into t (id,a) values (117,72);
+insert into t (id,a) values (117,73);
+insert into t (id,a) values (117,74);
+insert into t (id,a) values (117,75);
+insert into t (id,a) values (117,76);
+insert into t (id,a) values (117,77);
+insert into t (id,a) values (117,78);
+insert into t (id,a) values (117,79);
+insert into t (id,a) values (117,80);
+insert into t (id,a) values (117,81);
+insert into t (id,a) values (117,82);
+insert into t (id,a) values (117,83);
+insert into t (id,a) values (117,84);
+insert into t (id,a) values (117,85);
+insert into t (id,a) values (117,86);
+insert into t (id,a) values (117,87);
+insert into t (id,a) values (117,88);
+insert into t (id,a) values (117,89);
+insert into t (id,a) values (117,90);
+insert into t (id,a) values (117,91);
+insert into t (id,a) values (117,92);
+insert into t (id,a) values (117,93);
+insert into t (id,a) values (117,94);
+insert into t (id,a) values (117,95);
+insert into t (id,a) values (117,96);
+insert into t (id,a) values (117,97);
+insert into t (id,a) values (117,98);
+insert into t (id,a) values (117,99);
+insert into t (id,a) values (118,0);
+insert into t (id,a) values (118,1);
+insert into t (id,a) values (118,2);
+insert into t (id,a) values (118,3);
+insert into t (id,a) values (118,4);
+insert into t (id,a) values (118,5);
+insert into t (id,a) values (118,6);
+insert into t (id,a) values (118,7);
+insert into t (id,a) values (118,8);
+insert into t (id,a) values (118,9);
+insert into t (id,a) values (118,10);
+insert into t (id,a) values (118,11);
+insert into t (id,a) values (118,12);
+insert into t (id,a) values (118,13);
+insert into t (id,a) values (118,14);
+insert into t (id,a) values (118,15);
+insert into t (id,a) values (118,16);
+insert into t (id,a) values (118,17);
+insert into t (id,a) values (118,18);
+insert into t (id,a) values (118,19);
+insert into t (id,a) values (118,20);
+insert into t (id,a) values (118,21);
+insert into t (id,a) values (118,22);
+insert into t (id,a) values (118,23);
+insert into t (id,a) values (118,24);
+insert into t (id,a) values (118,25);
+insert into t (id,a) values (118,26);
+insert into t (id,a) values (118,27);
+insert into t (id,a) values (118,28);
+insert into t (id,a) values (118,29);
+insert into t (id,a) values (118,30);
+insert into t (id,a) values (118,31);
+insert into t (id,a) values (118,32);
+insert into t (id,a) values (118,33);
+insert into t (id,a) values (118,34);
+insert into t (id,a) values (118,35);
+insert into t (id,a) values (118,36);
+insert into t (id,a) values (118,37);
+insert into t (id,a) values (118,38);
+insert into t (id,a) values (118,39);
+insert into t (id,a) values (118,40);
+insert into t (id,a) values (118,41);
+insert into t (id,a) values (118,42);
+insert into t (id,a) values (118,43);
+insert into t (id,a) values (118,44);
+insert into t (id,a) values (118,45);
+insert into t (id,a) values (118,46);
+insert into t (id,a) values (118,47);
+insert into t (id,a) values (118,48);
+insert into t (id,a) values (118,49);
+insert into t (id,a) values (118,50);
+insert into t (id,a) values (118,51);
+insert into t (id,a) values (118,52);
+insert into t (id,a) values (118,53);
+insert into t (id,a) values (118,54);
+insert into t (id,a) values (118,55);
+insert into t (id,a) values (118,56);
+insert into t (id,a) values (118,57);
+insert into t (id,a) values (118,58);
+insert into t (id,a) values (118,59);
+insert into t (id,a) values (118,60);
+insert into t (id,a) values (118,61);
+insert into t (id,a) values (118,62);
+insert into t (id,a) values (118,63);
+insert into t (id,a) values (118,64);
+insert into t (id,a) values (118,65);
+insert into t (id,a) values (118,66);
+insert into t (id,a) values (118,67);
+insert into t (id,a) values (118,68);
+insert into t (id,a) values (118,69);
+insert into t (id,a) values (118,70);
+insert into t (id,a) values (118,71);
+insert into t (id,a) values (118,72);
+insert into t (id,a) values (118,73);
+insert into t (id,a) values (118,74);
+insert into t (id,a) values (118,75);
+insert into t (id,a) values (118,76);
+insert into t (id,a) values (118,77);
+insert into t (id,a) values (118,78);
+insert into t (id,a) values (118,79);
+insert into t (id,a) values (118,80);
+insert into t (id,a) values (118,81);
+insert into t (id,a) values (118,82);
+insert into t (id,a) values (118,83);
+insert into t (id,a) values (118,84);
+insert into t (id,a) values (118,85);
+insert into t (id,a) values (118,86);
+insert into t (id,a) values (118,87);
+insert into t (id,a) values (118,88);
+insert into t (id,a) values (118,89);
+insert into t (id,a) values (118,90);
+insert into t (id,a) values (118,91);
+insert into t (id,a) values (118,92);
+insert into t (id,a) values (118,93);
+insert into t (id,a) values (118,94);
+insert into t (id,a) values (118,95);
+insert into t (id,a) values (118,96);
+insert into t (id,a) values (118,97);
+insert into t (id,a) values (118,98);
+insert into t (id,a) values (118,99);
+insert into t (id,a) values (119,0);
+insert into t (id,a) values (119,1);
+insert into t (id,a) values (119,2);
+insert into t (id,a) values (119,3);
+insert into t (id,a) values (119,4);
+insert into t (id,a) values (119,5);
+insert into t (id,a) values (119,6);
+insert into t (id,a) values (119,7);
+insert into t (id,a) values (119,8);
+insert into t (id,a) values (119,9);
+insert into t (id,a) values (119,10);
+insert into t (id,a) values (119,11);
+insert into t (id,a) values (119,12);
+insert into t (id,a) values (119,13);
+insert into t (id,a) values (119,14);
+insert into t (id,a) values (119,15);
+insert into t (id,a) values (119,16);
+insert into t (id,a) values (119,17);
+insert into t (id,a) values (119,18);
+insert into t (id,a) values (119,19);
+insert into t (id,a) values (119,20);
+insert into t (id,a) values (119,21);
+insert into t (id,a) values (119,22);
+insert into t (id,a) values (119,23);
+insert into t (id,a) values (119,24);
+insert into t (id,a) values (119,25);
+insert into t (id,a) values (119,26);
+insert into t (id,a) values (119,27);
+insert into t (id,a) values (119,28);
+insert into t (id,a) values (119,29);
+insert into t (id,a) values (119,30);
+insert into t (id,a) values (119,31);
+insert into t (id,a) values (119,32);
+insert into t (id,a) values (119,33);
+insert into t (id,a) values (119,34);
+insert into t (id,a) values (119,35);
+insert into t (id,a) values (119,36);
+insert into t (id,a) values (119,37);
+insert into t (id,a) values (119,38);
+insert into t (id,a) values (119,39);
+insert into t (id,a) values (119,40);
+insert into t (id,a) values (119,41);
+insert into t (id,a) values (119,42);
+insert into t (id,a) values (119,43);
+insert into t (id,a) values (119,44);
+insert into t (id,a) values (119,45);
+insert into t (id,a) values (119,46);
+insert into t (id,a) values (119,47);
+insert into t (id,a) values (119,48);
+insert into t (id,a) values (119,49);
+insert into t (id,a) values (119,50);
+insert into t (id,a) values (119,51);
+insert into t (id,a) values (119,52);
+insert into t (id,a) values (119,53);
+insert into t (id,a) values (119,54);
+insert into t (id,a) values (119,55);
+insert into t (id,a) values (119,56);
+insert into t (id,a) values (119,57);
+insert into t (id,a) values (119,58);
+insert into t (id,a) values (119,59);
+insert into t (id,a) values (119,60);
+insert into t (id,a) values (119,61);
+insert into t (id,a) values (119,62);
+insert into t (id,a) values (119,63);
+insert into t (id,a) values (119,64);
+insert into t (id,a) values (119,65);
+insert into t (id,a) values (119,66);
+insert into t (id,a) values (119,67);
+insert into t (id,a) values (119,68);
+insert into t (id,a) values (119,69);
+insert into t (id,a) values (119,70);
+insert into t (id,a) values (119,71);
+insert into t (id,a) values (119,72);
+insert into t (id,a) values (119,73);
+insert into t (id,a) values (119,74);
+insert into t (id,a) values (119,75);
+insert into t (id,a) values (119,76);
+insert into t (id,a) values (119,77);
+insert into t (id,a) values (119,78);
+insert into t (id,a) values (119,79);
+insert into t (id,a) values (119,80);
+insert into t (id,a) values (119,81);
+insert into t (id,a) values (119,82);
+insert into t (id,a) values (119,83);
+insert into t (id,a) values (119,84);
+insert into t (id,a) values (119,85);
+insert into t (id,a) values (119,86);
+insert into t (id,a) values (119,87);
+insert into t (id,a) values (119,88);
+insert into t (id,a) values (119,89);
+insert into t (id,a) values (119,90);
+insert into t (id,a) values (119,91);
+insert into t (id,a) values (119,92);
+insert into t (id,a) values (119,93);
+insert into t (id,a) values (119,94);
+insert into t (id,a) values (119,95);
+insert into t (id,a) values (119,96);
+insert into t (id,a) values (119,97);
+insert into t (id,a) values (119,98);
+insert into t (id,a) values (119,99);
+insert into t (id,a) values (120,0);
+insert into t (id,a) values (120,1);
+insert into t (id,a) values (120,2);
+insert into t (id,a) values (120,3);
+insert into t (id,a) values (120,4);
+insert into t (id,a) values (120,5);
+insert into t (id,a) values (120,6);
+insert into t (id,a) values (120,7);
+insert into t (id,a) values (120,8);
+insert into t (id,a) values (120,9);
+insert into t (id,a) values (120,10);
+insert into t (id,a) values (120,11);
+insert into t (id,a) values (120,12);
+insert into t (id,a) values (120,13);
+insert into t (id,a) values (120,14);
+insert into t (id,a) values (120,15);
+insert into t (id,a) values (120,16);
+insert into t (id,a) values (120,17);
+insert into t (id,a) values (120,18);
+insert into t (id,a) values (120,19);
+insert into t (id,a) values (120,20);
+insert into t (id,a) values (120,21);
+insert into t (id,a) values (120,22);
+insert into t (id,a) values (120,23);
+insert into t (id,a) values (120,24);
+insert into t (id,a) values (120,25);
+insert into t (id,a) values (120,26);
+insert into t (id,a) values (120,27);
+insert into t (id,a) values (120,28);
+insert into t (id,a) values (120,29);
+insert into t (id,a) values (120,30);
+insert into t (id,a) values (120,31);
+insert into t (id,a) values (120,32);
+insert into t (id,a) values (120,33);
+insert into t (id,a) values (120,34);
+insert into t (id,a) values (120,35);
+insert into t (id,a) values (120,36);
+insert into t (id,a) values (120,37);
+insert into t (id,a) values (120,38);
+insert into t (id,a) values (120,39);
+insert into t (id,a) values (120,40);
+insert into t (id,a) values (120,41);
+insert into t (id,a) values (120,42);
+insert into t (id,a) values (120,43);
+insert into t (id,a) values (120,44);
+insert into t (id,a) values (120,45);
+insert into t (id,a) values (120,46);
+insert into t (id,a) values (120,47);
+insert into t (id,a) values (120,48);
+insert into t (id,a) values (120,49);
+insert into t (id,a) values (120,50);
+insert into t (id,a) values (120,51);
+insert into t (id,a) values (120,52);
+insert into t (id,a) values (120,53);
+insert into t (id,a) values (120,54);
+insert into t (id,a) values (120,55);
+insert into t (id,a) values (120,56);
+insert into t (id,a) values (120,57);
+insert into t (id,a) values (120,58);
+insert into t (id,a) values (120,59);
+insert into t (id,a) values (120,60);
+insert into t (id,a) values (120,61);
+insert into t (id,a) values (120,62);
+insert into t (id,a) values (120,63);
+insert into t (id,a) values (120,64);
+insert into t (id,a) values (120,65);
+insert into t (id,a) values (120,66);
+insert into t (id,a) values (120,67);
+insert into t (id,a) values (120,68);
+insert into t (id,a) values (120,69);
+insert into t (id,a) values (120,70);
+insert into t (id,a) values (120,71);
+insert into t (id,a) values (120,72);
+insert into t (id,a) values (120,73);
+insert into t (id,a) values (120,74);
+insert into t (id,a) values (120,75);
+insert into t (id,a) values (120,76);
+insert into t (id,a) values (120,77);
+insert into t (id,a) values (120,78);
+insert into t (id,a) values (120,79);
+insert into t (id,a) values (120,80);
+insert into t (id,a) values (120,81);
+insert into t (id,a) values (120,82);
+insert into t (id,a) values (120,83);
+insert into t (id,a) values (120,84);
+insert into t (id,a) values (120,85);
+insert into t (id,a) values (120,86);
+insert into t (id,a) values (120,87);
+insert into t (id,a) values (120,88);
+insert into t (id,a) values (120,89);
+insert into t (id,a) values (120,90);
+insert into t (id,a) values (120,91);
+insert into t (id,a) values (120,92);
+insert into t (id,a) values (120,93);
+insert into t (id,a) values (120,94);
+insert into t (id,a) values (120,95);
+insert into t (id,a) values (120,96);
+insert into t (id,a) values (120,97);
+insert into t (id,a) values (120,98);
+insert into t (id,a) values (120,99);
+insert into t (id,a) values (121,0);
+insert into t (id,a) values (121,1);
+insert into t (id,a) values (121,2);
+insert into t (id,a) values (121,3);
+insert into t (id,a) values (121,4);
+insert into t (id,a) values (121,5);
+insert into t (id,a) values (121,6);
+insert into t (id,a) values (121,7);
+insert into t (id,a) values (121,8);
+insert into t (id,a) values (121,9);
+insert into t (id,a) values (121,10);
+insert into t (id,a) values (121,11);
+insert into t (id,a) values (121,12);
+insert into t (id,a) values (121,13);
+insert into t (id,a) values (121,14);
+insert into t (id,a) values (121,15);
+insert into t (id,a) values (121,16);
+insert into t (id,a) values (121,17);
+insert into t (id,a) values (121,18);
+insert into t (id,a) values (121,19);
+insert into t (id,a) values (121,20);
+insert into t (id,a) values (121,21);
+insert into t (id,a) values (121,22);
+insert into t (id,a) values (121,23);
+insert into t (id,a) values (121,24);
+insert into t (id,a) values (121,25);
+insert into t (id,a) values (121,26);
+insert into t (id,a) values (121,27);
+insert into t (id,a) values (121,28);
+insert into t (id,a) values (121,29);
+insert into t (id,a) values (121,30);
+insert into t (id,a) values (121,31);
+insert into t (id,a) values (121,32);
+insert into t (id,a) values (121,33);
+insert into t (id,a) values (121,34);
+insert into t (id,a) values (121,35);
+insert into t (id,a) values (121,36);
+insert into t (id,a) values (121,37);
+insert into t (id,a) values (121,38);
+insert into t (id,a) values (121,39);
+insert into t (id,a) values (121,40);
+insert into t (id,a) values (121,41);
+insert into t (id,a) values (121,42);
+insert into t (id,a) values (121,43);
+insert into t (id,a) values (121,44);
+insert into t (id,a) values (121,45);
+insert into t (id,a) values (121,46);
+insert into t (id,a) values (121,47);
+insert into t (id,a) values (121,48);
+insert into t (id,a) values (121,49);
+insert into t (id,a) values (121,50);
+insert into t (id,a) values (121,51);
+insert into t (id,a) values (121,52);
+insert into t (id,a) values (121,53);
+insert into t (id,a) values (121,54);
+insert into t (id,a) values (121,55);
+insert into t (id,a) values (121,56);
+insert into t (id,a) values (121,57);
+insert into t (id,a) values (121,58);
+insert into t (id,a) values (121,59);
+insert into t (id,a) values (121,60);
+insert into t (id,a) values (121,61);
+insert into t (id,a) values (121,62);
+insert into t (id,a) values (121,63);
+insert into t (id,a) values (121,64);
+insert into t (id,a) values (121,65);
+insert into t (id,a) values (121,66);
+insert into t (id,a) values (121,67);
+insert into t (id,a) values (121,68);
+insert into t (id,a) values (121,69);
+insert into t (id,a) values (121,70);
+insert into t (id,a) values (121,71);
+insert into t (id,a) values (121,72);
+insert into t (id,a) values (121,73);
+insert into t (id,a) values (121,74);
+insert into t (id,a) values (121,75);
+insert into t (id,a) values (121,76);
+insert into t (id,a) values (121,77);
+insert into t (id,a) values (121,78);
+insert into t (id,a) values (121,79);
+insert into t (id,a) values (121,80);
+insert into t (id,a) values (121,81);
+insert into t (id,a) values (121,82);
+insert into t (id,a) values (121,83);
+insert into t (id,a) values (121,84);
+insert into t (id,a) values (121,85);
+insert into t (id,a) values (121,86);
+insert into t (id,a) values (121,87);
+insert into t (id,a) values (121,88);
+insert into t (id,a) values (121,89);
+insert into t (id,a) values (121,90);
+insert into t (id,a) values (121,91);
+insert into t (id,a) values (121,92);
+insert into t (id,a) values (121,93);
+insert into t (id,a) values (121,94);
+insert into t (id,a) values (121,95);
+insert into t (id,a) values (121,96);
+insert into t (id,a) values (121,97);
+insert into t (id,a) values (121,98);
+insert into t (id,a) values (121,99);
+insert into t (id,a) values (122,0);
+insert into t (id,a) values (122,1);
+insert into t (id,a) values (122,2);
+insert into t (id,a) values (122,3);
+insert into t (id,a) values (122,4);
+insert into t (id,a) values (122,5);
+insert into t (id,a) values (122,6);
+insert into t (id,a) values (122,7);
+insert into t (id,a) values (122,8);
+insert into t (id,a) values (122,9);
+insert into t (id,a) values (122,10);
+insert into t (id,a) values (122,11);
+insert into t (id,a) values (122,12);
+insert into t (id,a) values (122,13);
+insert into t (id,a) values (122,14);
+insert into t (id,a) values (122,15);
+insert into t (id,a) values (122,16);
+insert into t (id,a) values (122,17);
+insert into t (id,a) values (122,18);
+insert into t (id,a) values (122,19);
+insert into t (id,a) values (122,20);
+insert into t (id,a) values (122,21);
+insert into t (id,a) values (122,22);
+insert into t (id,a) values (122,23);
+insert into t (id,a) values (122,24);
+insert into t (id,a) values (122,25);
+insert into t (id,a) values (122,26);
+insert into t (id,a) values (122,27);
+insert into t (id,a) values (122,28);
+insert into t (id,a) values (122,29);
+insert into t (id,a) values (122,30);
+insert into t (id,a) values (122,31);
+insert into t (id,a) values (122,32);
+insert into t (id,a) values (122,33);
+insert into t (id,a) values (122,34);
+insert into t (id,a) values (122,35);
+insert into t (id,a) values (122,36);
+insert into t (id,a) values (122,37);
+insert into t (id,a) values (122,38);
+insert into t (id,a) values (122,39);
+insert into t (id,a) values (122,40);
+insert into t (id,a) values (122,41);
+insert into t (id,a) values (122,42);
+insert into t (id,a) values (122,43);
+insert into t (id,a) values (122,44);
+insert into t (id,a) values (122,45);
+insert into t (id,a) values (122,46);
+insert into t (id,a) values (122,47);
+insert into t (id,a) values (122,48);
+insert into t (id,a) values (122,49);
+insert into t (id,a) values (122,50);
+insert into t (id,a) values (122,51);
+insert into t (id,a) values (122,52);
+insert into t (id,a) values (122,53);
+insert into t (id,a) values (122,54);
+insert into t (id,a) values (122,55);
+insert into t (id,a) values (122,56);
+insert into t (id,a) values (122,57);
+insert into t (id,a) values (122,58);
+insert into t (id,a) values (122,59);
+insert into t (id,a) values (122,60);
+insert into t (id,a) values (122,61);
+insert into t (id,a) values (122,62);
+insert into t (id,a) values (122,63);
+insert into t (id,a) values (122,64);
+insert into t (id,a) values (122,65);
+insert into t (id,a) values (122,66);
+insert into t (id,a) values (122,67);
+insert into t (id,a) values (122,68);
+insert into t (id,a) values (122,69);
+insert into t (id,a) values (122,70);
+insert into t (id,a) values (122,71);
+insert into t (id,a) values (122,72);
+insert into t (id,a) values (122,73);
+insert into t (id,a) values (122,74);
+insert into t (id,a) values (122,75);
+insert into t (id,a) values (122,76);
+insert into t (id,a) values (122,77);
+insert into t (id,a) values (122,78);
+insert into t (id,a) values (122,79);
+insert into t (id,a) values (122,80);
+insert into t (id,a) values (122,81);
+insert into t (id,a) values (122,82);
+insert into t (id,a) values (122,83);
+insert into t (id,a) values (122,84);
+insert into t (id,a) values (122,85);
+insert into t (id,a) values (122,86);
+insert into t (id,a) values (122,87);
+insert into t (id,a) values (122,88);
+insert into t (id,a) values (122,89);
+insert into t (id,a) values (122,90);
+insert into t (id,a) values (122,91);
+insert into t (id,a) values (122,92);
+insert into t (id,a) values (122,93);
+insert into t (id,a) values (122,94);
+insert into t (id,a) values (122,95);
+insert into t (id,a) values (122,96);
+insert into t (id,a) values (122,97);
+insert into t (id,a) values (122,98);
+insert into t (id,a) values (122,99);
+insert into t (id,a) values (123,0);
+insert into t (id,a) values (123,1);
+insert into t (id,a) values (123,2);
+insert into t (id,a) values (123,3);
+insert into t (id,a) values (123,4);
+insert into t (id,a) values (123,5);
+insert into t (id,a) values (123,6);
+insert into t (id,a) values (123,7);
+insert into t (id,a) values (123,8);
+insert into t (id,a) values (123,9);
+insert into t (id,a) values (123,10);
+insert into t (id,a) values (123,11);
+insert into t (id,a) values (123,12);
+insert into t (id,a) values (123,13);
+insert into t (id,a) values (123,14);
+insert into t (id,a) values (123,15);
+insert into t (id,a) values (123,16);
+insert into t (id,a) values (123,17);
+insert into t (id,a) values (123,18);
+insert into t (id,a) values (123,19);
+insert into t (id,a) values (123,20);
+insert into t (id,a) values (123,21);
+insert into t (id,a) values (123,22);
+insert into t (id,a) values (123,23);
+insert into t (id,a) values (123,24);
+insert into t (id,a) values (123,25);
+insert into t (id,a) values (123,26);
+insert into t (id,a) values (123,27);
+insert into t (id,a) values (123,28);
+insert into t (id,a) values (123,29);
+insert into t (id,a) values (123,30);
+insert into t (id,a) values (123,31);
+insert into t (id,a) values (123,32);
+insert into t (id,a) values (123,33);
+insert into t (id,a) values (123,34);
+insert into t (id,a) values (123,35);
+insert into t (id,a) values (123,36);
+insert into t (id,a) values (123,37);
+insert into t (id,a) values (123,38);
+insert into t (id,a) values (123,39);
+insert into t (id,a) values (123,40);
+insert into t (id,a) values (123,41);
+insert into t (id,a) values (123,42);
+insert into t (id,a) values (123,43);
+insert into t (id,a) values (123,44);
+insert into t (id,a) values (123,45);
+insert into t (id,a) values (123,46);
+insert into t (id,a) values (123,47);
+insert into t (id,a) values (123,48);
+insert into t (id,a) values (123,49);
+insert into t (id,a) values (123,50);
+insert into t (id,a) values (123,51);
+insert into t (id,a) values (123,52);
+insert into t (id,a) values (123,53);
+insert into t (id,a) values (123,54);
+insert into t (id,a) values (123,55);
+insert into t (id,a) values (123,56);
+insert into t (id,a) values (123,57);
+insert into t (id,a) values (123,58);
+insert into t (id,a) values (123,59);
+insert into t (id,a) values (123,60);
+insert into t (id,a) values (123,61);
+insert into t (id,a) values (123,62);
+insert into t (id,a) values (123,63);
+insert into t (id,a) values (123,64);
+insert into t (id,a) values (123,65);
+insert into t (id,a) values (123,66);
+insert into t (id,a) values (123,67);
+insert into t (id,a) values (123,68);
+insert into t (id,a) values (123,69);
+insert into t (id,a) values (123,70);
+insert into t (id,a) values (123,71);
+insert into t (id,a) values (123,72);
+insert into t (id,a) values (123,73);
+insert into t (id,a) values (123,74);
+insert into t (id,a) values (123,75);
+insert into t (id,a) values (123,76);
+insert into t (id,a) values (123,77);
+insert into t (id,a) values (123,78);
+insert into t (id,a) values (123,79);
+insert into t (id,a) values (123,80);
+insert into t (id,a) values (123,81);
+insert into t (id,a) values (123,82);
+insert into t (id,a) values (123,83);
+insert into t (id,a) values (123,84);
+insert into t (id,a) values (123,85);
+insert into t (id,a) values (123,86);
+insert into t (id,a) values (123,87);
+insert into t (id,a) values (123,88);
+insert into t (id,a) values (123,89);
+insert into t (id,a) values (123,90);
+insert into t (id,a) values (123,91);
+insert into t (id,a) values (123,92);
+insert into t (id,a) values (123,93);
+insert into t (id,a) values (123,94);
+insert into t (id,a) values (123,95);
+insert into t (id,a) values (123,96);
+insert into t (id,a) values (123,97);
+insert into t (id,a) values (123,98);
+insert into t (id,a) values (123,99);
+insert into t (id,a) values (124,0);
+insert into t (id,a) values (124,1);
+insert into t (id,a) values (124,2);
+insert into t (id,a) values (124,3);
+insert into t (id,a) values (124,4);
+insert into t (id,a) values (124,5);
+insert into t (id,a) values (124,6);
+insert into t (id,a) values (124,7);
+insert into t (id,a) values (124,8);
+insert into t (id,a) values (124,9);
+insert into t (id,a) values (124,10);
+insert into t (id,a) values (124,11);
+insert into t (id,a) values (124,12);
+insert into t (id,a) values (124,13);
+insert into t (id,a) values (124,14);
+insert into t (id,a) values (124,15);
+insert into t (id,a) values (124,16);
+insert into t (id,a) values (124,17);
+insert into t (id,a) values (124,18);
+insert into t (id,a) values (124,19);
+insert into t (id,a) values (124,20);
+insert into t (id,a) values (124,21);
+insert into t (id,a) values (124,22);
+insert into t (id,a) values (124,23);
+insert into t (id,a) values (124,24);
+insert into t (id,a) values (124,25);
+insert into t (id,a) values (124,26);
+insert into t (id,a) values (124,27);
+insert into t (id,a) values (124,28);
+insert into t (id,a) values (124,29);
+insert into t (id,a) values (124,30);
+insert into t (id,a) values (124,31);
+insert into t (id,a) values (124,32);
+insert into t (id,a) values (124,33);
+insert into t (id,a) values (124,34);
+insert into t (id,a) values (124,35);
+insert into t (id,a) values (124,36);
+insert into t (id,a) values (124,37);
+insert into t (id,a) values (124,38);
+insert into t (id,a) values (124,39);
+insert into t (id,a) values (124,40);
+insert into t (id,a) values (124,41);
+insert into t (id,a) values (124,42);
+insert into t (id,a) values (124,43);
+insert into t (id,a) values (124,44);
+insert into t (id,a) values (124,45);
+insert into t (id,a) values (124,46);
+insert into t (id,a) values (124,47);
+insert into t (id,a) values (124,48);
+insert into t (id,a) values (124,49);
+insert into t (id,a) values (124,50);
+insert into t (id,a) values (124,51);
+insert into t (id,a) values (124,52);
+insert into t (id,a) values (124,53);
+insert into t (id,a) values (124,54);
+insert into t (id,a) values (124,55);
+insert into t (id,a) values (124,56);
+insert into t (id,a) values (124,57);
+insert into t (id,a) values (124,58);
+insert into t (id,a) values (124,59);
+insert into t (id,a) values (124,60);
+insert into t (id,a) values (124,61);
+insert into t (id,a) values (124,62);
+insert into t (id,a) values (124,63);
+insert into t (id,a) values (124,64);
+insert into t (id,a) values (124,65);
+insert into t (id,a) values (124,66);
+insert into t (id,a) values (124,67);
+insert into t (id,a) values (124,68);
+insert into t (id,a) values (124,69);
+insert into t (id,a) values (124,70);
+insert into t (id,a) values (124,71);
+insert into t (id,a) values (124,72);
+insert into t (id,a) values (124,73);
+insert into t (id,a) values (124,74);
+insert into t (id,a) values (124,75);
+insert into t (id,a) values (124,76);
+insert into t (id,a) values (124,77);
+insert into t (id,a) values (124,78);
+insert into t (id,a) values (124,79);
+insert into t (id,a) values (124,80);
+insert into t (id,a) values (124,81);
+insert into t (id,a) values (124,82);
+insert into t (id,a) values (124,83);
+insert into t (id,a) values (124,84);
+insert into t (id,a) values (124,85);
+insert into t (id,a) values (124,86);
+insert into t (id,a) values (124,87);
+insert into t (id,a) values (124,88);
+insert into t (id,a) values (124,89);
+insert into t (id,a) values (124,90);
+insert into t (id,a) values (124,91);
+insert into t (id,a) values (124,92);
+insert into t (id,a) values (124,93);
+insert into t (id,a) values (124,94);
+insert into t (id,a) values (124,95);
+insert into t (id,a) values (124,96);
+insert into t (id,a) values (124,97);
+insert into t (id,a) values (124,98);
+insert into t (id,a) values (124,99);
+insert into t (id,a) values (125,0);
+insert into t (id,a) values (125,1);
+insert into t (id,a) values (125,2);
+insert into t (id,a) values (125,3);
+insert into t (id,a) values (125,4);
+insert into t (id,a) values (125,5);
+insert into t (id,a) values (125,6);
+insert into t (id,a) values (125,7);
+insert into t (id,a) values (125,8);
+insert into t (id,a) values (125,9);
+insert into t (id,a) values (125,10);
+insert into t (id,a) values (125,11);
+insert into t (id,a) values (125,12);
+insert into t (id,a) values (125,13);
+insert into t (id,a) values (125,14);
+insert into t (id,a) values (125,15);
+insert into t (id,a) values (125,16);
+insert into t (id,a) values (125,17);
+insert into t (id,a) values (125,18);
+insert into t (id,a) values (125,19);
+insert into t (id,a) values (125,20);
+insert into t (id,a) values (125,21);
+insert into t (id,a) values (125,22);
+insert into t (id,a) values (125,23);
+insert into t (id,a) values (125,24);
+insert into t (id,a) values (125,25);
+insert into t (id,a) values (125,26);
+insert into t (id,a) values (125,27);
+insert into t (id,a) values (125,28);
+insert into t (id,a) values (125,29);
+insert into t (id,a) values (125,30);
+insert into t (id,a) values (125,31);
+insert into t (id,a) values (125,32);
+insert into t (id,a) values (125,33);
+insert into t (id,a) values (125,34);
+insert into t (id,a) values (125,35);
+insert into t (id,a) values (125,36);
+insert into t (id,a) values (125,37);
+insert into t (id,a) values (125,38);
+insert into t (id,a) values (125,39);
+insert into t (id,a) values (125,40);
+insert into t (id,a) values (125,41);
+insert into t (id,a) values (125,42);
+insert into t (id,a) values (125,43);
+insert into t (id,a) values (125,44);
+insert into t (id,a) values (125,45);
+insert into t (id,a) values (125,46);
+insert into t (id,a) values (125,47);
+insert into t (id,a) values (125,48);
+insert into t (id,a) values (125,49);
+insert into t (id,a) values (125,50);
+insert into t (id,a) values (125,51);
+insert into t (id,a) values (125,52);
+insert into t (id,a) values (125,53);
+insert into t (id,a) values (125,54);
+insert into t (id,a) values (125,55);
+insert into t (id,a) values (125,56);
+insert into t (id,a) values (125,57);
+insert into t (id,a) values (125,58);
+insert into t (id,a) values (125,59);
+insert into t (id,a) values (125,60);
+insert into t (id,a) values (125,61);
+insert into t (id,a) values (125,62);
+insert into t (id,a) values (125,63);
+insert into t (id,a) values (125,64);
+insert into t (id,a) values (125,65);
+insert into t (id,a) values (125,66);
+insert into t (id,a) values (125,67);
+insert into t (id,a) values (125,68);
+insert into t (id,a) values (125,69);
+insert into t (id,a) values (125,70);
+insert into t (id,a) values (125,71);
+insert into t (id,a) values (125,72);
+insert into t (id,a) values (125,73);
+insert into t (id,a) values (125,74);
+insert into t (id,a) values (125,75);
+insert into t (id,a) values (125,76);
+insert into t (id,a) values (125,77);
+insert into t (id,a) values (125,78);
+insert into t (id,a) values (125,79);
+insert into t (id,a) values (125,80);
+insert into t (id,a) values (125,81);
+insert into t (id,a) values (125,82);
+insert into t (id,a) values (125,83);
+insert into t (id,a) values (125,84);
+insert into t (id,a) values (125,85);
+insert into t (id,a) values (125,86);
+insert into t (id,a) values (125,87);
+insert into t (id,a) values (125,88);
+insert into t (id,a) values (125,89);
+insert into t (id,a) values (125,90);
+insert into t (id,a) values (125,91);
+insert into t (id,a) values (125,92);
+insert into t (id,a) values (125,93);
+insert into t (id,a) values (125,94);
+insert into t (id,a) values (125,95);
+insert into t (id,a) values (125,96);
+insert into t (id,a) values (125,97);
+insert into t (id,a) values (125,98);
+insert into t (id,a) values (125,99);
+insert into t (id,a) values (126,0);
+insert into t (id,a) values (126,1);
+insert into t (id,a) values (126,2);
+insert into t (id,a) values (126,3);
+insert into t (id,a) values (126,4);
+insert into t (id,a) values (126,5);
+insert into t (id,a) values (126,6);
+insert into t (id,a) values (126,7);
+insert into t (id,a) values (126,8);
+insert into t (id,a) values (126,9);
+insert into t (id,a) values (126,10);
+insert into t (id,a) values (126,11);
+insert into t (id,a) values (126,12);
+insert into t (id,a) values (126,13);
+insert into t (id,a) values (126,14);
+insert into t (id,a) values (126,15);
+insert into t (id,a) values (126,16);
+insert into t (id,a) values (126,17);
+insert into t (id,a) values (126,18);
+insert into t (id,a) values (126,19);
+insert into t (id,a) values (126,20);
+insert into t (id,a) values (126,21);
+insert into t (id,a) values (126,22);
+insert into t (id,a) values (126,23);
+insert into t (id,a) values (126,24);
+insert into t (id,a) values (126,25);
+insert into t (id,a) values (126,26);
+insert into t (id,a) values (126,27);
+insert into t (id,a) values (126,28);
+insert into t (id,a) values (126,29);
+insert into t (id,a) values (126,30);
+insert into t (id,a) values (126,31);
+insert into t (id,a) values (126,32);
+insert into t (id,a) values (126,33);
+insert into t (id,a) values (126,34);
+insert into t (id,a) values (126,35);
+insert into t (id,a) values (126,36);
+insert into t (id,a) values (126,37);
+insert into t (id,a) values (126,38);
+insert into t (id,a) values (126,39);
+insert into t (id,a) values (126,40);
+insert into t (id,a) values (126,41);
+insert into t (id,a) values (126,42);
+insert into t (id,a) values (126,43);
+insert into t (id,a) values (126,44);
+insert into t (id,a) values (126,45);
+insert into t (id,a) values (126,46);
+insert into t (id,a) values (126,47);
+insert into t (id,a) values (126,48);
+insert into t (id,a) values (126,49);
+insert into t (id,a) values (126,50);
+insert into t (id,a) values (126,51);
+insert into t (id,a) values (126,52);
+insert into t (id,a) values (126,53);
+insert into t (id,a) values (126,54);
+insert into t (id,a) values (126,55);
+insert into t (id,a) values (126,56);
+insert into t (id,a) values (126,57);
+insert into t (id,a) values (126,58);
+insert into t (id,a) values (126,59);
+insert into t (id,a) values (126,60);
+insert into t (id,a) values (126,61);
+insert into t (id,a) values (126,62);
+insert into t (id,a) values (126,63);
+insert into t (id,a) values (126,64);
+insert into t (id,a) values (126,65);
+insert into t (id,a) values (126,66);
+insert into t (id,a) values (126,67);
+insert into t (id,a) values (126,68);
+insert into t (id,a) values (126,69);
+insert into t (id,a) values (126,70);
+insert into t (id,a) values (126,71);
+insert into t (id,a) values (126,72);
+insert into t (id,a) values (126,73);
+insert into t (id,a) values (126,74);
+insert into t (id,a) values (126,75);
+insert into t (id,a) values (126,76);
+insert into t (id,a) values (126,77);
+insert into t (id,a) values (126,78);
+insert into t (id,a) values (126,79);
+insert into t (id,a) values (126,80);
+insert into t (id,a) values (126,81);
+insert into t (id,a) values (126,82);
+insert into t (id,a) values (126,83);
+insert into t (id,a) values (126,84);
+insert into t (id,a) values (126,85);
+insert into t (id,a) values (126,86);
+insert into t (id,a) values (126,87);
+insert into t (id,a) values (126,88);
+insert into t (id,a) values (126,89);
+insert into t (id,a) values (126,90);
+insert into t (id,a) values (126,91);
+insert into t (id,a) values (126,92);
+insert into t (id,a) values (126,93);
+insert into t (id,a) values (126,94);
+insert into t (id,a) values (126,95);
+insert into t (id,a) values (126,96);
+insert into t (id,a) values (126,97);
+insert into t (id,a) values (126,98);
+insert into t (id,a) values (126,99);
+insert into t (id,a) values (127,0);
+insert into t (id,a) values (127,1);
+insert into t (id,a) values (127,2);
+insert into t (id,a) values (127,3);
+insert into t (id,a) values (127,4);
+insert into t (id,a) values (127,5);
+insert into t (id,a) values (127,6);
+insert into t (id,a) values (127,7);
+insert into t (id,a) values (127,8);
+insert into t (id,a) values (127,9);
+insert into t (id,a) values (127,10);
+insert into t (id,a) values (127,11);
+insert into t (id,a) values (127,12);
+insert into t (id,a) values (127,13);
+insert into t (id,a) values (127,14);
+insert into t (id,a) values (127,15);
+insert into t (id,a) values (127,16);
+insert into t (id,a) values (127,17);
+insert into t (id,a) values (127,18);
+insert into t (id,a) values (127,19);
+insert into t (id,a) values (127,20);
+insert into t (id,a) values (127,21);
+insert into t (id,a) values (127,22);
+insert into t (id,a) values (127,23);
+insert into t (id,a) values (127,24);
+insert into t (id,a) values (127,25);
+insert into t (id,a) values (127,26);
+insert into t (id,a) values (127,27);
+insert into t (id,a) values (127,28);
+insert into t (id,a) values (127,29);
+insert into t (id,a) values (127,30);
+insert into t (id,a) values (127,31);
+insert into t (id,a) values (127,32);
+insert into t (id,a) values (127,33);
+insert into t (id,a) values (127,34);
+insert into t (id,a) values (127,35);
+insert into t (id,a) values (127,36);
+insert into t (id,a) values (127,37);
+insert into t (id,a) values (127,38);
+insert into t (id,a) values (127,39);
+insert into t (id,a) values (127,40);
+insert into t (id,a) values (127,41);
+insert into t (id,a) values (127,42);
+insert into t (id,a) values (127,43);
+insert into t (id,a) values (127,44);
+insert into t (id,a) values (127,45);
+insert into t (id,a) values (127,46);
+insert into t (id,a) values (127,47);
+insert into t (id,a) values (127,48);
+insert into t (id,a) values (127,49);
+insert into t (id,a) values (127,50);
+insert into t (id,a) values (127,51);
+insert into t (id,a) values (127,52);
+insert into t (id,a) values (127,53);
+insert into t (id,a) values (127,54);
+insert into t (id,a) values (127,55);
+insert into t (id,a) values (127,56);
+insert into t (id,a) values (127,57);
+insert into t (id,a) values (127,58);
+insert into t (id,a) values (127,59);
+insert into t (id,a) values (127,60);
+insert into t (id,a) values (127,61);
+insert into t (id,a) values (127,62);
+insert into t (id,a) values (127,63);
+insert into t (id,a) values (127,64);
+insert into t (id,a) values (127,65);
+insert into t (id,a) values (127,66);
+insert into t (id,a) values (127,67);
+insert into t (id,a) values (127,68);
+insert into t (id,a) values (127,69);
+insert into t (id,a) values (127,70);
+insert into t (id,a) values (127,71);
+insert into t (id,a) values (127,72);
+insert into t (id,a) values (127,73);
+insert into t (id,a) values (127,74);
+insert into t (id,a) values (127,75);
+insert into t (id,a) values (127,76);
+insert into t (id,a) values (127,77);
+insert into t (id,a) values (127,78);
+insert into t (id,a) values (127,79);
+insert into t (id,a) values (127,80);
+insert into t (id,a) values (127,81);
+insert into t (id,a) values (127,82);
+insert into t (id,a) values (127,83);
+insert into t (id,a) values (127,84);
+insert into t (id,a) values (127,85);
+insert into t (id,a) values (127,86);
+insert into t (id,a) values (127,87);
+insert into t (id,a) values (127,88);
+insert into t (id,a) values (127,89);
+insert into t (id,a) values (127,90);
+insert into t (id,a) values (127,91);
+insert into t (id,a) values (127,92);
+insert into t (id,a) values (127,93);
+insert into t (id,a) values (127,94);
+insert into t (id,a) values (127,95);
+insert into t (id,a) values (127,96);
+insert into t (id,a) values (127,97);
+insert into t (id,a) values (127,98);
+insert into t (id,a) values (127,99);
+insert into t (id,a) values (128,0);
+insert into t (id,a) values (128,1);
+insert into t (id,a) values (128,2);
+insert into t (id,a) values (128,3);
+insert into t (id,a) values (128,4);
+insert into t (id,a) values (128,5);
+insert into t (id,a) values (128,6);
+insert into t (id,a) values (128,7);
+insert into t (id,a) values (128,8);
+insert into t (id,a) values (128,9);
+insert into t (id,a) values (128,10);
+insert into t (id,a) values (128,11);
+insert into t (id,a) values (128,12);
+insert into t (id,a) values (128,13);
+insert into t (id,a) values (128,14);
+insert into t (id,a) values (128,15);
+insert into t (id,a) values (128,16);
+insert into t (id,a) values (128,17);
+insert into t (id,a) values (128,18);
+insert into t (id,a) values (128,19);
+insert into t (id,a) values (128,20);
+insert into t (id,a) values (128,21);
+insert into t (id,a) values (128,22);
+insert into t (id,a) values (128,23);
+insert into t (id,a) values (128,24);
+insert into t (id,a) values (128,25);
+insert into t (id,a) values (128,26);
+insert into t (id,a) values (128,27);
+insert into t (id,a) values (128,28);
+insert into t (id,a) values (128,29);
+insert into t (id,a) values (128,30);
+insert into t (id,a) values (128,31);
+insert into t (id,a) values (128,32);
+insert into t (id,a) values (128,33);
+insert into t (id,a) values (128,34);
+insert into t (id,a) values (128,35);
+insert into t (id,a) values (128,36);
+insert into t (id,a) values (128,37);
+insert into t (id,a) values (128,38);
+insert into t (id,a) values (128,39);
+insert into t (id,a) values (128,40);
+insert into t (id,a) values (128,41);
+insert into t (id,a) values (128,42);
+insert into t (id,a) values (128,43);
+insert into t (id,a) values (128,44);
+insert into t (id,a) values (128,45);
+insert into t (id,a) values (128,46);
+insert into t (id,a) values (128,47);
+insert into t (id,a) values (128,48);
+insert into t (id,a) values (128,49);
+insert into t (id,a) values (128,50);
+insert into t (id,a) values (128,51);
+insert into t (id,a) values (128,52);
+insert into t (id,a) values (128,53);
+insert into t (id,a) values (128,54);
+insert into t (id,a) values (128,55);
+insert into t (id,a) values (128,56);
+insert into t (id,a) values (128,57);
+insert into t (id,a) values (128,58);
+insert into t (id,a) values (128,59);
+insert into t (id,a) values (128,60);
+insert into t (id,a) values (128,61);
+insert into t (id,a) values (128,62);
+insert into t (id,a) values (128,63);
+insert into t (id,a) values (128,64);
+insert into t (id,a) values (128,65);
+insert into t (id,a) values (128,66);
+insert into t (id,a) values (128,67);
+insert into t (id,a) values (128,68);
+insert into t (id,a) values (128,69);
+insert into t (id,a) values (128,70);
+insert into t (id,a) values (128,71);
+insert into t (id,a) values (128,72);
+insert into t (id,a) values (128,73);
+insert into t (id,a) values (128,74);
+insert into t (id,a) values (128,75);
+insert into t (id,a) values (128,76);
+insert into t (id,a) values (128,77);
+insert into t (id,a) values (128,78);
+insert into t (id,a) values (128,79);
+insert into t (id,a) values (128,80);
+insert into t (id,a) values (128,81);
+insert into t (id,a) values (128,82);
+insert into t (id,a) values (128,83);
+insert into t (id,a) values (128,84);
+insert into t (id,a) values (128,85);
+insert into t (id,a) values (128,86);
+insert into t (id,a) values (128,87);
+insert into t (id,a) values (128,88);
+insert into t (id,a) values (128,89);
+insert into t (id,a) values (128,90);
+insert into t (id,a) values (128,91);
+insert into t (id,a) values (128,92);
+insert into t (id,a) values (128,93);
+insert into t (id,a) values (128,94);
+insert into t (id,a) values (128,95);
+insert into t (id,a) values (128,96);
+insert into t (id,a) values (128,97);
+insert into t (id,a) values (128,98);
+insert into t (id,a) values (128,99);
+insert into t (id,a) values (129,0);
+insert into t (id,a) values (129,1);
+insert into t (id,a) values (129,2);
+insert into t (id,a) values (129,3);
+insert into t (id,a) values (129,4);
+insert into t (id,a) values (129,5);
+insert into t (id,a) values (129,6);
+insert into t (id,a) values (129,7);
+insert into t (id,a) values (129,8);
+insert into t (id,a) values (129,9);
+insert into t (id,a) values (129,10);
+insert into t (id,a) values (129,11);
+insert into t (id,a) values (129,12);
+insert into t (id,a) values (129,13);
+insert into t (id,a) values (129,14);
+insert into t (id,a) values (129,15);
+insert into t (id,a) values (129,16);
+insert into t (id,a) values (129,17);
+insert into t (id,a) values (129,18);
+insert into t (id,a) values (129,19);
+insert into t (id,a) values (129,20);
+insert into t (id,a) values (129,21);
+insert into t (id,a) values (129,22);
+insert into t (id,a) values (129,23);
+insert into t (id,a) values (129,24);
+insert into t (id,a) values (129,25);
+insert into t (id,a) values (129,26);
+insert into t (id,a) values (129,27);
+insert into t (id,a) values (129,28);
+insert into t (id,a) values (129,29);
+insert into t (id,a) values (129,30);
+insert into t (id,a) values (129,31);
+insert into t (id,a) values (129,32);
+insert into t (id,a) values (129,33);
+insert into t (id,a) values (129,34);
+insert into t (id,a) values (129,35);
+insert into t (id,a) values (129,36);
+insert into t (id,a) values (129,37);
+insert into t (id,a) values (129,38);
+insert into t (id,a) values (129,39);
+insert into t (id,a) values (129,40);
+insert into t (id,a) values (129,41);
+insert into t (id,a) values (129,42);
+insert into t (id,a) values (129,43);
+insert into t (id,a) values (129,44);
+insert into t (id,a) values (129,45);
+insert into t (id,a) values (129,46);
+insert into t (id,a) values (129,47);
+insert into t (id,a) values (129,48);
+insert into t (id,a) values (129,49);
+insert into t (id,a) values (129,50);
+insert into t (id,a) values (129,51);
+insert into t (id,a) values (129,52);
+insert into t (id,a) values (129,53);
+insert into t (id,a) values (129,54);
+insert into t (id,a) values (129,55);
+insert into t (id,a) values (129,56);
+insert into t (id,a) values (129,57);
+insert into t (id,a) values (129,58);
+insert into t (id,a) values (129,59);
+insert into t (id,a) values (129,60);
+insert into t (id,a) values (129,61);
+insert into t (id,a) values (129,62);
+insert into t (id,a) values (129,63);
+insert into t (id,a) values (129,64);
+insert into t (id,a) values (129,65);
+insert into t (id,a) values (129,66);
+insert into t (id,a) values (129,67);
+insert into t (id,a) values (129,68);
+insert into t (id,a) values (129,69);
+insert into t (id,a) values (129,70);
+insert into t (id,a) values (129,71);
+insert into t (id,a) values (129,72);
+insert into t (id,a) values (129,73);
+insert into t (id,a) values (129,74);
+insert into t (id,a) values (129,75);
+insert into t (id,a) values (129,76);
+insert into t (id,a) values (129,77);
+insert into t (id,a) values (129,78);
+insert into t (id,a) values (129,79);
+insert into t (id,a) values (129,80);
+insert into t (id,a) values (129,81);
+insert into t (id,a) values (129,82);
+insert into t (id,a) values (129,83);
+insert into t (id,a) values (129,84);
+insert into t (id,a) values (129,85);
+insert into t (id,a) values (129,86);
+insert into t (id,a) values (129,87);
+insert into t (id,a) values (129,88);
+insert into t (id,a) values (129,89);
+insert into t (id,a) values (129,90);
+insert into t (id,a) values (129,91);
+insert into t (id,a) values (129,92);
+insert into t (id,a) values (129,93);
+insert into t (id,a) values (129,94);
+insert into t (id,a) values (129,95);
+insert into t (id,a) values (129,96);
+insert into t (id,a) values (129,97);
+insert into t (id,a) values (129,98);
+insert into t (id,a) values (129,99);
+insert into t (id,a) values (130,0);
+insert into t (id,a) values (130,1);
+insert into t (id,a) values (130,2);
+insert into t (id,a) values (130,3);
+insert into t (id,a) values (130,4);
+insert into t (id,a) values (130,5);
+insert into t (id,a) values (130,6);
+insert into t (id,a) values (130,7);
+insert into t (id,a) values (130,8);
+insert into t (id,a) values (130,9);
+insert into t (id,a) values (130,10);
+insert into t (id,a) values (130,11);
+insert into t (id,a) values (130,12);
+insert into t (id,a) values (130,13);
+insert into t (id,a) values (130,14);
+insert into t (id,a) values (130,15);
+insert into t (id,a) values (130,16);
+insert into t (id,a) values (130,17);
+insert into t (id,a) values (130,18);
+insert into t (id,a) values (130,19);
+insert into t (id,a) values (130,20);
+insert into t (id,a) values (130,21);
+insert into t (id,a) values (130,22);
+insert into t (id,a) values (130,23);
+insert into t (id,a) values (130,24);
+insert into t (id,a) values (130,25);
+insert into t (id,a) values (130,26);
+insert into t (id,a) values (130,27);
+insert into t (id,a) values (130,28);
+insert into t (id,a) values (130,29);
+insert into t (id,a) values (130,30);
+insert into t (id,a) values (130,31);
+insert into t (id,a) values (130,32);
+insert into t (id,a) values (130,33);
+insert into t (id,a) values (130,34);
+insert into t (id,a) values (130,35);
+insert into t (id,a) values (130,36);
+insert into t (id,a) values (130,37);
+insert into t (id,a) values (130,38);
+insert into t (id,a) values (130,39);
+insert into t (id,a) values (130,40);
+insert into t (id,a) values (130,41);
+insert into t (id,a) values (130,42);
+insert into t (id,a) values (130,43);
+insert into t (id,a) values (130,44);
+insert into t (id,a) values (130,45);
+insert into t (id,a) values (130,46);
+insert into t (id,a) values (130,47);
+insert into t (id,a) values (130,48);
+insert into t (id,a) values (130,49);
+insert into t (id,a) values (130,50);
+insert into t (id,a) values (130,51);
+insert into t (id,a) values (130,52);
+insert into t (id,a) values (130,53);
+insert into t (id,a) values (130,54);
+insert into t (id,a) values (130,55);
+insert into t (id,a) values (130,56);
+insert into t (id,a) values (130,57);
+insert into t (id,a) values (130,58);
+insert into t (id,a) values (130,59);
+insert into t (id,a) values (130,60);
+insert into t (id,a) values (130,61);
+insert into t (id,a) values (130,62);
+insert into t (id,a) values (130,63);
+insert into t (id,a) values (130,64);
+insert into t (id,a) values (130,65);
+insert into t (id,a) values (130,66);
+insert into t (id,a) values (130,67);
+insert into t (id,a) values (130,68);
+insert into t (id,a) values (130,69);
+insert into t (id,a) values (130,70);
+insert into t (id,a) values (130,71);
+insert into t (id,a) values (130,72);
+insert into t (id,a) values (130,73);
+insert into t (id,a) values (130,74);
+insert into t (id,a) values (130,75);
+insert into t (id,a) values (130,76);
+insert into t (id,a) values (130,77);
+insert into t (id,a) values (130,78);
+insert into t (id,a) values (130,79);
+insert into t (id,a) values (130,80);
+insert into t (id,a) values (130,81);
+insert into t (id,a) values (130,82);
+insert into t (id,a) values (130,83);
+insert into t (id,a) values (130,84);
+insert into t (id,a) values (130,85);
+insert into t (id,a) values (130,86);
+insert into t (id,a) values (130,87);
+insert into t (id,a) values (130,88);
+insert into t (id,a) values (130,89);
+insert into t (id,a) values (130,90);
+insert into t (id,a) values (130,91);
+insert into t (id,a) values (130,92);
+insert into t (id,a) values (130,93);
+insert into t (id,a) values (130,94);
+insert into t (id,a) values (130,95);
+insert into t (id,a) values (130,96);
+insert into t (id,a) values (130,97);
+insert into t (id,a) values (130,98);
+insert into t (id,a) values (130,99);
+insert into t (id,a) values (131,0);
+insert into t (id,a) values (131,1);
+insert into t (id,a) values (131,2);
+insert into t (id,a) values (131,3);
+insert into t (id,a) values (131,4);
+insert into t (id,a) values (131,5);
+insert into t (id,a) values (131,6);
+insert into t (id,a) values (131,7);
+insert into t (id,a) values (131,8);
+insert into t (id,a) values (131,9);
+insert into t (id,a) values (131,10);
+insert into t (id,a) values (131,11);
+insert into t (id,a) values (131,12);
+insert into t (id,a) values (131,13);
+insert into t (id,a) values (131,14);
+insert into t (id,a) values (131,15);
+insert into t (id,a) values (131,16);
+insert into t (id,a) values (131,17);
+insert into t (id,a) values (131,18);
+insert into t (id,a) values (131,19);
+insert into t (id,a) values (131,20);
+insert into t (id,a) values (131,21);
+insert into t (id,a) values (131,22);
+insert into t (id,a) values (131,23);
+insert into t (id,a) values (131,24);
+insert into t (id,a) values (131,25);
+insert into t (id,a) values (131,26);
+insert into t (id,a) values (131,27);
+insert into t (id,a) values (131,28);
+insert into t (id,a) values (131,29);
+insert into t (id,a) values (131,30);
+insert into t (id,a) values (131,31);
+insert into t (id,a) values (131,32);
+insert into t (id,a) values (131,33);
+insert into t (id,a) values (131,34);
+insert into t (id,a) values (131,35);
+insert into t (id,a) values (131,36);
+insert into t (id,a) values (131,37);
+insert into t (id,a) values (131,38);
+insert into t (id,a) values (131,39);
+insert into t (id,a) values (131,40);
+insert into t (id,a) values (131,41);
+insert into t (id,a) values (131,42);
+insert into t (id,a) values (131,43);
+insert into t (id,a) values (131,44);
+insert into t (id,a) values (131,45);
+insert into t (id,a) values (131,46);
+insert into t (id,a) values (131,47);
+insert into t (id,a) values (131,48);
+insert into t (id,a) values (131,49);
+insert into t (id,a) values (131,50);
+insert into t (id,a) values (131,51);
+insert into t (id,a) values (131,52);
+insert into t (id,a) values (131,53);
+insert into t (id,a) values (131,54);
+insert into t (id,a) values (131,55);
+insert into t (id,a) values (131,56);
+insert into t (id,a) values (131,57);
+insert into t (id,a) values (131,58);
+insert into t (id,a) values (131,59);
+insert into t (id,a) values (131,60);
+insert into t (id,a) values (131,61);
+insert into t (id,a) values (131,62);
+insert into t (id,a) values (131,63);
+insert into t (id,a) values (131,64);
+insert into t (id,a) values (131,65);
+insert into t (id,a) values (131,66);
+insert into t (id,a) values (131,67);
+insert into t (id,a) values (131,68);
+insert into t (id,a) values (131,69);
+insert into t (id,a) values (131,70);
+insert into t (id,a) values (131,71);
+insert into t (id,a) values (131,72);
+insert into t (id,a) values (131,73);
+insert into t (id,a) values (131,74);
+insert into t (id,a) values (131,75);
+insert into t (id,a) values (131,76);
+insert into t (id,a) values (131,77);
+insert into t (id,a) values (131,78);
+insert into t (id,a) values (131,79);
+insert into t (id,a) values (131,80);
+insert into t (id,a) values (131,81);
+insert into t (id,a) values (131,82);
+insert into t (id,a) values (131,83);
+insert into t (id,a) values (131,84);
+insert into t (id,a) values (131,85);
+insert into t (id,a) values (131,86);
+insert into t (id,a) values (131,87);
+insert into t (id,a) values (131,88);
+insert into t (id,a) values (131,89);
+insert into t (id,a) values (131,90);
+insert into t (id,a) values (131,91);
+insert into t (id,a) values (131,92);
+insert into t (id,a) values (131,93);
+insert into t (id,a) values (131,94);
+insert into t (id,a) values (131,95);
+insert into t (id,a) values (131,96);
+insert into t (id,a) values (131,97);
+insert into t (id,a) values (131,98);
+insert into t (id,a) values (131,99);
+insert into t (id,a) values (132,0);
+insert into t (id,a) values (132,1);
+insert into t (id,a) values (132,2);
+insert into t (id,a) values (132,3);
+insert into t (id,a) values (132,4);
+insert into t (id,a) values (132,5);
+insert into t (id,a) values (132,6);
+insert into t (id,a) values (132,7);
+insert into t (id,a) values (132,8);
+insert into t (id,a) values (132,9);
+insert into t (id,a) values (132,10);
+insert into t (id,a) values (132,11);
+insert into t (id,a) values (132,12);
+insert into t (id,a) values (132,13);
+insert into t (id,a) values (132,14);
+insert into t (id,a) values (132,15);
+insert into t (id,a) values (132,16);
+insert into t (id,a) values (132,17);
+insert into t (id,a) values (132,18);
+insert into t (id,a) values (132,19);
+insert into t (id,a) values (132,20);
+insert into t (id,a) values (132,21);
+insert into t (id,a) values (132,22);
+insert into t (id,a) values (132,23);
+insert into t (id,a) values (132,24);
+insert into t (id,a) values (132,25);
+insert into t (id,a) values (132,26);
+insert into t (id,a) values (132,27);
+insert into t (id,a) values (132,28);
+insert into t (id,a) values (132,29);
+insert into t (id,a) values (132,30);
+insert into t (id,a) values (132,31);
+insert into t (id,a) values (132,32);
+insert into t (id,a) values (132,33);
+insert into t (id,a) values (132,34);
+insert into t (id,a) values (132,35);
+insert into t (id,a) values (132,36);
+insert into t (id,a) values (132,37);
+insert into t (id,a) values (132,38);
+insert into t (id,a) values (132,39);
+insert into t (id,a) values (132,40);
+insert into t (id,a) values (132,41);
+insert into t (id,a) values (132,42);
+insert into t (id,a) values (132,43);
+insert into t (id,a) values (132,44);
+insert into t (id,a) values (132,45);
+insert into t (id,a) values (132,46);
+insert into t (id,a) values (132,47);
+insert into t (id,a) values (132,48);
+insert into t (id,a) values (132,49);
+insert into t (id,a) values (132,50);
+insert into t (id,a) values (132,51);
+insert into t (id,a) values (132,52);
+insert into t (id,a) values (132,53);
+insert into t (id,a) values (132,54);
+insert into t (id,a) values (132,55);
+insert into t (id,a) values (132,56);
+insert into t (id,a) values (132,57);
+insert into t (id,a) values (132,58);
+insert into t (id,a) values (132,59);
+insert into t (id,a) values (132,60);
+insert into t (id,a) values (132,61);
+insert into t (id,a) values (132,62);
+insert into t (id,a) values (132,63);
+insert into t (id,a) values (132,64);
+insert into t (id,a) values (132,65);
+insert into t (id,a) values (132,66);
+insert into t (id,a) values (132,67);
+insert into t (id,a) values (132,68);
+insert into t (id,a) values (132,69);
+insert into t (id,a) values (132,70);
+insert into t (id,a) values (132,71);
+insert into t (id,a) values (132,72);
+insert into t (id,a) values (132,73);
+insert into t (id,a) values (132,74);
+insert into t (id,a) values (132,75);
+insert into t (id,a) values (132,76);
+insert into t (id,a) values (132,77);
+insert into t (id,a) values (132,78);
+insert into t (id,a) values (132,79);
+insert into t (id,a) values (132,80);
+insert into t (id,a) values (132,81);
+insert into t (id,a) values (132,82);
+insert into t (id,a) values (132,83);
+insert into t (id,a) values (132,84);
+insert into t (id,a) values (132,85);
+insert into t (id,a) values (132,86);
+insert into t (id,a) values (132,87);
+insert into t (id,a) values (132,88);
+insert into t (id,a) values (132,89);
+insert into t (id,a) values (132,90);
+insert into t (id,a) values (132,91);
+insert into t (id,a) values (132,92);
+insert into t (id,a) values (132,93);
+insert into t (id,a) values (132,94);
+insert into t (id,a) values (132,95);
+insert into t (id,a) values (132,96);
+insert into t (id,a) values (132,97);
+insert into t (id,a) values (132,98);
+insert into t (id,a) values (132,99);
+insert into t (id,a) values (133,0);
+insert into t (id,a) values (133,1);
+insert into t (id,a) values (133,2);
+insert into t (id,a) values (133,3);
+insert into t (id,a) values (133,4);
+insert into t (id,a) values (133,5);
+insert into t (id,a) values (133,6);
+insert into t (id,a) values (133,7);
+insert into t (id,a) values (133,8);
+insert into t (id,a) values (133,9);
+insert into t (id,a) values (133,10);
+insert into t (id,a) values (133,11);
+insert into t (id,a) values (133,12);
+insert into t (id,a) values (133,13);
+insert into t (id,a) values (133,14);
+insert into t (id,a) values (133,15);
+insert into t (id,a) values (133,16);
+insert into t (id,a) values (133,17);
+insert into t (id,a) values (133,18);
+insert into t (id,a) values (133,19);
+insert into t (id,a) values (133,20);
+insert into t (id,a) values (133,21);
+insert into t (id,a) values (133,22);
+insert into t (id,a) values (133,23);
+insert into t (id,a) values (133,24);
+insert into t (id,a) values (133,25);
+insert into t (id,a) values (133,26);
+insert into t (id,a) values (133,27);
+insert into t (id,a) values (133,28);
+insert into t (id,a) values (133,29);
+insert into t (id,a) values (133,30);
+insert into t (id,a) values (133,31);
+insert into t (id,a) values (133,32);
+insert into t (id,a) values (133,33);
+insert into t (id,a) values (133,34);
+insert into t (id,a) values (133,35);
+insert into t (id,a) values (133,36);
+insert into t (id,a) values (133,37);
+insert into t (id,a) values (133,38);
+insert into t (id,a) values (133,39);
+insert into t (id,a) values (133,40);
+insert into t (id,a) values (133,41);
+insert into t (id,a) values (133,42);
+insert into t (id,a) values (133,43);
+insert into t (id,a) values (133,44);
+insert into t (id,a) values (133,45);
+insert into t (id,a) values (133,46);
+insert into t (id,a) values (133,47);
+insert into t (id,a) values (133,48);
+insert into t (id,a) values (133,49);
+insert into t (id,a) values (133,50);
+insert into t (id,a) values (133,51);
+insert into t (id,a) values (133,52);
+insert into t (id,a) values (133,53);
+insert into t (id,a) values (133,54);
+insert into t (id,a) values (133,55);
+insert into t (id,a) values (133,56);
+insert into t (id,a) values (133,57);
+insert into t (id,a) values (133,58);
+insert into t (id,a) values (133,59);
+insert into t (id,a) values (133,60);
+insert into t (id,a) values (133,61);
+insert into t (id,a) values (133,62);
+insert into t (id,a) values (133,63);
+insert into t (id,a) values (133,64);
+insert into t (id,a) values (133,65);
+insert into t (id,a) values (133,66);
+insert into t (id,a) values (133,67);
+insert into t (id,a) values (133,68);
+insert into t (id,a) values (133,69);
+insert into t (id,a) values (133,70);
+insert into t (id,a) values (133,71);
+insert into t (id,a) values (133,72);
+insert into t (id,a) values (133,73);
+insert into t (id,a) values (133,74);
+insert into t (id,a) values (133,75);
+insert into t (id,a) values (133,76);
+insert into t (id,a) values (133,77);
+insert into t (id,a) values (133,78);
+insert into t (id,a) values (133,79);
+insert into t (id,a) values (133,80);
+insert into t (id,a) values (133,81);
+insert into t (id,a) values (133,82);
+insert into t (id,a) values (133,83);
+insert into t (id,a) values (133,84);
+insert into t (id,a) values (133,85);
+insert into t (id,a) values (133,86);
+insert into t (id,a) values (133,87);
+insert into t (id,a) values (133,88);
+insert into t (id,a) values (133,89);
+insert into t (id,a) values (133,90);
+insert into t (id,a) values (133,91);
+insert into t (id,a) values (133,92);
+insert into t (id,a) values (133,93);
+insert into t (id,a) values (133,94);
+insert into t (id,a) values (133,95);
+insert into t (id,a) values (133,96);
+insert into t (id,a) values (133,97);
+insert into t (id,a) values (133,98);
+insert into t (id,a) values (133,99);
+insert into t (id,a) values (134,0);
+insert into t (id,a) values (134,1);
+insert into t (id,a) values (134,2);
+insert into t (id,a) values (134,3);
+insert into t (id,a) values (134,4);
+insert into t (id,a) values (134,5);
+insert into t (id,a) values (134,6);
+insert into t (id,a) values (134,7);
+insert into t (id,a) values (134,8);
+insert into t (id,a) values (134,9);
+insert into t (id,a) values (134,10);
+insert into t (id,a) values (134,11);
+insert into t (id,a) values (134,12);
+insert into t (id,a) values (134,13);
+insert into t (id,a) values (134,14);
+insert into t (id,a) values (134,15);
+insert into t (id,a) values (134,16);
+insert into t (id,a) values (134,17);
+insert into t (id,a) values (134,18);
+insert into t (id,a) values (134,19);
+insert into t (id,a) values (134,20);
+insert into t (id,a) values (134,21);
+insert into t (id,a) values (134,22);
+insert into t (id,a) values (134,23);
+insert into t (id,a) values (134,24);
+insert into t (id,a) values (134,25);
+insert into t (id,a) values (134,26);
+insert into t (id,a) values (134,27);
+insert into t (id,a) values (134,28);
+insert into t (id,a) values (134,29);
+insert into t (id,a) values (134,30);
+insert into t (id,a) values (134,31);
+insert into t (id,a) values (134,32);
+insert into t (id,a) values (134,33);
+insert into t (id,a) values (134,34);
+insert into t (id,a) values (134,35);
+insert into t (id,a) values (134,36);
+insert into t (id,a) values (134,37);
+insert into t (id,a) values (134,38);
+insert into t (id,a) values (134,39);
+insert into t (id,a) values (134,40);
+insert into t (id,a) values (134,41);
+insert into t (id,a) values (134,42);
+insert into t (id,a) values (134,43);
+insert into t (id,a) values (134,44);
+insert into t (id,a) values (134,45);
+insert into t (id,a) values (134,46);
+insert into t (id,a) values (134,47);
+insert into t (id,a) values (134,48);
+insert into t (id,a) values (134,49);
+insert into t (id,a) values (134,50);
+insert into t (id,a) values (134,51);
+insert into t (id,a) values (134,52);
+insert into t (id,a) values (134,53);
+insert into t (id,a) values (134,54);
+insert into t (id,a) values (134,55);
+insert into t (id,a) values (134,56);
+insert into t (id,a) values (134,57);
+insert into t (id,a) values (134,58);
+insert into t (id,a) values (134,59);
+insert into t (id,a) values (134,60);
+insert into t (id,a) values (134,61);
+insert into t (id,a) values (134,62);
+insert into t (id,a) values (134,63);
+insert into t (id,a) values (134,64);
+insert into t (id,a) values (134,65);
+insert into t (id,a) values (134,66);
+insert into t (id,a) values (134,67);
+insert into t (id,a) values (134,68);
+insert into t (id,a) values (134,69);
+insert into t (id,a) values (134,70);
+insert into t (id,a) values (134,71);
+insert into t (id,a) values (134,72);
+insert into t (id,a) values (134,73);
+insert into t (id,a) values (134,74);
+insert into t (id,a) values (134,75);
+insert into t (id,a) values (134,76);
+insert into t (id,a) values (134,77);
+insert into t (id,a) values (134,78);
+insert into t (id,a) values (134,79);
+insert into t (id,a) values (134,80);
+insert into t (id,a) values (134,81);
+insert into t (id,a) values (134,82);
+insert into t (id,a) values (134,83);
+insert into t (id,a) values (134,84);
+insert into t (id,a) values (134,85);
+insert into t (id,a) values (134,86);
+insert into t (id,a) values (134,87);
+insert into t (id,a) values (134,88);
+insert into t (id,a) values (134,89);
+insert into t (id,a) values (134,90);
+insert into t (id,a) values (134,91);
+insert into t (id,a) values (134,92);
+insert into t (id,a) values (134,93);
+insert into t (id,a) values (134,94);
+insert into t (id,a) values (134,95);
+insert into t (id,a) values (134,96);
+insert into t (id,a) values (134,97);
+insert into t (id,a) values (134,98);
+insert into t (id,a) values (134,99);
+insert into t (id,a) values (135,0);
+insert into t (id,a) values (135,1);
+insert into t (id,a) values (135,2);
+insert into t (id,a) values (135,3);
+insert into t (id,a) values (135,4);
+insert into t (id,a) values (135,5);
+insert into t (id,a) values (135,6);
+insert into t (id,a) values (135,7);
+insert into t (id,a) values (135,8);
+insert into t (id,a) values (135,9);
+insert into t (id,a) values (135,10);
+insert into t (id,a) values (135,11);
+insert into t (id,a) values (135,12);
+insert into t (id,a) values (135,13);
+insert into t (id,a) values (135,14);
+insert into t (id,a) values (135,15);
+insert into t (id,a) values (135,16);
+insert into t (id,a) values (135,17);
+insert into t (id,a) values (135,18);
+insert into t (id,a) values (135,19);
+insert into t (id,a) values (135,20);
+insert into t (id,a) values (135,21);
+insert into t (id,a) values (135,22);
+insert into t (id,a) values (135,23);
+insert into t (id,a) values (135,24);
+insert into t (id,a) values (135,25);
+insert into t (id,a) values (135,26);
+insert into t (id,a) values (135,27);
+insert into t (id,a) values (135,28);
+insert into t (id,a) values (135,29);
+insert into t (id,a) values (135,30);
+insert into t (id,a) values (135,31);
+insert into t (id,a) values (135,32);
+insert into t (id,a) values (135,33);
+insert into t (id,a) values (135,34);
+insert into t (id,a) values (135,35);
+insert into t (id,a) values (135,36);
+insert into t (id,a) values (135,37);
+insert into t (id,a) values (135,38);
+insert into t (id,a) values (135,39);
+insert into t (id,a) values (135,40);
+insert into t (id,a) values (135,41);
+insert into t (id,a) values (135,42);
+insert into t (id,a) values (135,43);
+insert into t (id,a) values (135,44);
+insert into t (id,a) values (135,45);
+insert into t (id,a) values (135,46);
+insert into t (id,a) values (135,47);
+insert into t (id,a) values (135,48);
+insert into t (id,a) values (135,49);
+insert into t (id,a) values (135,50);
+insert into t (id,a) values (135,51);
+insert into t (id,a) values (135,52);
+insert into t (id,a) values (135,53);
+insert into t (id,a) values (135,54);
+insert into t (id,a) values (135,55);
+insert into t (id,a) values (135,56);
+insert into t (id,a) values (135,57);
+insert into t (id,a) values (135,58);
+insert into t (id,a) values (135,59);
+insert into t (id,a) values (135,60);
+insert into t (id,a) values (135,61);
+insert into t (id,a) values (135,62);
+insert into t (id,a) values (135,63);
+insert into t (id,a) values (135,64);
+insert into t (id,a) values (135,65);
+insert into t (id,a) values (135,66);
+insert into t (id,a) values (135,67);
+insert into t (id,a) values (135,68);
+insert into t (id,a) values (135,69);
+insert into t (id,a) values (135,70);
+insert into t (id,a) values (135,71);
+insert into t (id,a) values (135,72);
+insert into t (id,a) values (135,73);
+insert into t (id,a) values (135,74);
+insert into t (id,a) values (135,75);
+insert into t (id,a) values (135,76);
+insert into t (id,a) values (135,77);
+insert into t (id,a) values (135,78);
+insert into t (id,a) values (135,79);
+insert into t (id,a) values (135,80);
+insert into t (id,a) values (135,81);
+insert into t (id,a) values (135,82);
+insert into t (id,a) values (135,83);
+insert into t (id,a) values (135,84);
+insert into t (id,a) values (135,85);
+insert into t (id,a) values (135,86);
+insert into t (id,a) values (135,87);
+insert into t (id,a) values (135,88);
+insert into t (id,a) values (135,89);
+insert into t (id,a) values (135,90);
+insert into t (id,a) values (135,91);
+insert into t (id,a) values (135,92);
+insert into t (id,a) values (135,93);
+insert into t (id,a) values (135,94);
+insert into t (id,a) values (135,95);
+insert into t (id,a) values (135,96);
+insert into t (id,a) values (135,97);
+insert into t (id,a) values (135,98);
+insert into t (id,a) values (135,99);
+insert into t (id,a) values (136,0);
+insert into t (id,a) values (136,1);
+insert into t (id,a) values (136,2);
+insert into t (id,a) values (136,3);
+insert into t (id,a) values (136,4);
+insert into t (id,a) values (136,5);
+insert into t (id,a) values (136,6);
+insert into t (id,a) values (136,7);
+insert into t (id,a) values (136,8);
+insert into t (id,a) values (136,9);
+insert into t (id,a) values (136,10);
+insert into t (id,a) values (136,11);
+insert into t (id,a) values (136,12);
+insert into t (id,a) values (136,13);
+insert into t (id,a) values (136,14);
+insert into t (id,a) values (136,15);
+insert into t (id,a) values (136,16);
+insert into t (id,a) values (136,17);
+insert into t (id,a) values (136,18);
+insert into t (id,a) values (136,19);
+insert into t (id,a) values (136,20);
+insert into t (id,a) values (136,21);
+insert into t (id,a) values (136,22);
+insert into t (id,a) values (136,23);
+insert into t (id,a) values (136,24);
+insert into t (id,a) values (136,25);
+insert into t (id,a) values (136,26);
+insert into t (id,a) values (136,27);
+insert into t (id,a) values (136,28);
+insert into t (id,a) values (136,29);
+insert into t (id,a) values (136,30);
+insert into t (id,a) values (136,31);
+insert into t (id,a) values (136,32);
+insert into t (id,a) values (136,33);
+insert into t (id,a) values (136,34);
+insert into t (id,a) values (136,35);
+insert into t (id,a) values (136,36);
+insert into t (id,a) values (136,37);
+insert into t (id,a) values (136,38);
+insert into t (id,a) values (136,39);
+insert into t (id,a) values (136,40);
+insert into t (id,a) values (136,41);
+insert into t (id,a) values (136,42);
+insert into t (id,a) values (136,43);
+insert into t (id,a) values (136,44);
+insert into t (id,a) values (136,45);
+insert into t (id,a) values (136,46);
+insert into t (id,a) values (136,47);
+insert into t (id,a) values (136,48);
+insert into t (id,a) values (136,49);
+insert into t (id,a) values (136,50);
+insert into t (id,a) values (136,51);
+insert into t (id,a) values (136,52);
+insert into t (id,a) values (136,53);
+insert into t (id,a) values (136,54);
+insert into t (id,a) values (136,55);
+insert into t (id,a) values (136,56);
+insert into t (id,a) values (136,57);
+insert into t (id,a) values (136,58);
+insert into t (id,a) values (136,59);
+insert into t (id,a) values (136,60);
+insert into t (id,a) values (136,61);
+insert into t (id,a) values (136,62);
+insert into t (id,a) values (136,63);
+insert into t (id,a) values (136,64);
+insert into t (id,a) values (136,65);
+insert into t (id,a) values (136,66);
+insert into t (id,a) values (136,67);
+insert into t (id,a) values (136,68);
+insert into t (id,a) values (136,69);
+insert into t (id,a) values (136,70);
+insert into t (id,a) values (136,71);
+insert into t (id,a) values (136,72);
+insert into t (id,a) values (136,73);
+insert into t (id,a) values (136,74);
+insert into t (id,a) values (136,75);
+insert into t (id,a) values (136,76);
+insert into t (id,a) values (136,77);
+insert into t (id,a) values (136,78);
+insert into t (id,a) values (136,79);
+insert into t (id,a) values (136,80);
+insert into t (id,a) values (136,81);
+insert into t (id,a) values (136,82);
+insert into t (id,a) values (136,83);
+insert into t (id,a) values (136,84);
+insert into t (id,a) values (136,85);
+insert into t (id,a) values (136,86);
+insert into t (id,a) values (136,87);
+insert into t (id,a) values (136,88);
+insert into t (id,a) values (136,89);
+insert into t (id,a) values (136,90);
+insert into t (id,a) values (136,91);
+insert into t (id,a) values (136,92);
+insert into t (id,a) values (136,93);
+insert into t (id,a) values (136,94);
+insert into t (id,a) values (136,95);
+insert into t (id,a) values (136,96);
+insert into t (id,a) values (136,97);
+insert into t (id,a) values (136,98);
+insert into t (id,a) values (136,99);
+insert into t (id,a) values (137,0);
+insert into t (id,a) values (137,1);
+insert into t (id,a) values (137,2);
+insert into t (id,a) values (137,3);
+insert into t (id,a) values (137,4);
+insert into t (id,a) values (137,5);
+insert into t (id,a) values (137,6);
+insert into t (id,a) values (137,7);
+insert into t (id,a) values (137,8);
+insert into t (id,a) values (137,9);
+insert into t (id,a) values (137,10);
+insert into t (id,a) values (137,11);
+insert into t (id,a) values (137,12);
+insert into t (id,a) values (137,13);
+insert into t (id,a) values (137,14);
+insert into t (id,a) values (137,15);
+insert into t (id,a) values (137,16);
+insert into t (id,a) values (137,17);
+insert into t (id,a) values (137,18);
+insert into t (id,a) values (137,19);
+insert into t (id,a) values (137,20);
+insert into t (id,a) values (137,21);
+insert into t (id,a) values (137,22);
+insert into t (id,a) values (137,23);
+insert into t (id,a) values (137,24);
+insert into t (id,a) values (137,25);
+insert into t (id,a) values (137,26);
+insert into t (id,a) values (137,27);
+insert into t (id,a) values (137,28);
+insert into t (id,a) values (137,29);
+insert into t (id,a) values (137,30);
+insert into t (id,a) values (137,31);
+insert into t (id,a) values (137,32);
+insert into t (id,a) values (137,33);
+insert into t (id,a) values (137,34);
+insert into t (id,a) values (137,35);
+insert into t (id,a) values (137,36);
+insert into t (id,a) values (137,37);
+insert into t (id,a) values (137,38);
+insert into t (id,a) values (137,39);
+insert into t (id,a) values (137,40);
+insert into t (id,a) values (137,41);
+insert into t (id,a) values (137,42);
+insert into t (id,a) values (137,43);
+insert into t (id,a) values (137,44);
+insert into t (id,a) values (137,45);
+insert into t (id,a) values (137,46);
+insert into t (id,a) values (137,47);
+insert into t (id,a) values (137,48);
+insert into t (id,a) values (137,49);
+insert into t (id,a) values (137,50);
+insert into t (id,a) values (137,51);
+insert into t (id,a) values (137,52);
+insert into t (id,a) values (137,53);
+insert into t (id,a) values (137,54);
+insert into t (id,a) values (137,55);
+insert into t (id,a) values (137,56);
+insert into t (id,a) values (137,57);
+insert into t (id,a) values (137,58);
+insert into t (id,a) values (137,59);
+insert into t (id,a) values (137,60);
+insert into t (id,a) values (137,61);
+insert into t (id,a) values (137,62);
+insert into t (id,a) values (137,63);
+insert into t (id,a) values (137,64);
+insert into t (id,a) values (137,65);
+insert into t (id,a) values (137,66);
+insert into t (id,a) values (137,67);
+insert into t (id,a) values (137,68);
+insert into t (id,a) values (137,69);
+insert into t (id,a) values (137,70);
+insert into t (id,a) values (137,71);
+insert into t (id,a) values (137,72);
+insert into t (id,a) values (137,73);
+insert into t (id,a) values (137,74);
+insert into t (id,a) values (137,75);
+insert into t (id,a) values (137,76);
+insert into t (id,a) values (137,77);
+insert into t (id,a) values (137,78);
+insert into t (id,a) values (137,79);
+insert into t (id,a) values (137,80);
+insert into t (id,a) values (137,81);
+insert into t (id,a) values (137,82);
+insert into t (id,a) values (137,83);
+insert into t (id,a) values (137,84);
+insert into t (id,a) values (137,85);
+insert into t (id,a) values (137,86);
+insert into t (id,a) values (137,87);
+insert into t (id,a) values (137,88);
+insert into t (id,a) values (137,89);
+insert into t (id,a) values (137,90);
+insert into t (id,a) values (137,91);
+insert into t (id,a) values (137,92);
+insert into t (id,a) values (137,93);
+insert into t (id,a) values (137,94);
+insert into t (id,a) values (137,95);
+insert into t (id,a) values (137,96);
+insert into t (id,a) values (137,97);
+insert into t (id,a) values (137,98);
+insert into t (id,a) values (137,99);
+insert into t (id,a) values (138,0);
+insert into t (id,a) values (138,1);
+insert into t (id,a) values (138,2);
+insert into t (id,a) values (138,3);
+insert into t (id,a) values (138,4);
+insert into t (id,a) values (138,5);
+insert into t (id,a) values (138,6);
+insert into t (id,a) values (138,7);
+insert into t (id,a) values (138,8);
+insert into t (id,a) values (138,9);
+insert into t (id,a) values (138,10);
+insert into t (id,a) values (138,11);
+insert into t (id,a) values (138,12);
+insert into t (id,a) values (138,13);
+insert into t (id,a) values (138,14);
+insert into t (id,a) values (138,15);
+insert into t (id,a) values (138,16);
+insert into t (id,a) values (138,17);
+insert into t (id,a) values (138,18);
+insert into t (id,a) values (138,19);
+insert into t (id,a) values (138,20);
+insert into t (id,a) values (138,21);
+insert into t (id,a) values (138,22);
+insert into t (id,a) values (138,23);
+insert into t (id,a) values (138,24);
+insert into t (id,a) values (138,25);
+insert into t (id,a) values (138,26);
+insert into t (id,a) values (138,27);
+insert into t (id,a) values (138,28);
+insert into t (id,a) values (138,29);
+insert into t (id,a) values (138,30);
+insert into t (id,a) values (138,31);
+insert into t (id,a) values (138,32);
+insert into t (id,a) values (138,33);
+insert into t (id,a) values (138,34);
+insert into t (id,a) values (138,35);
+insert into t (id,a) values (138,36);
+insert into t (id,a) values (138,37);
+insert into t (id,a) values (138,38);
+insert into t (id,a) values (138,39);
+insert into t (id,a) values (138,40);
+insert into t (id,a) values (138,41);
+insert into t (id,a) values (138,42);
+insert into t (id,a) values (138,43);
+insert into t (id,a) values (138,44);
+insert into t (id,a) values (138,45);
+insert into t (id,a) values (138,46);
+insert into t (id,a) values (138,47);
+insert into t (id,a) values (138,48);
+insert into t (id,a) values (138,49);
+insert into t (id,a) values (138,50);
+insert into t (id,a) values (138,51);
+insert into t (id,a) values (138,52);
+insert into t (id,a) values (138,53);
+insert into t (id,a) values (138,54);
+insert into t (id,a) values (138,55);
+insert into t (id,a) values (138,56);
+insert into t (id,a) values (138,57);
+insert into t (id,a) values (138,58);
+insert into t (id,a) values (138,59);
+insert into t (id,a) values (138,60);
+insert into t (id,a) values (138,61);
+insert into t (id,a) values (138,62);
+insert into t (id,a) values (138,63);
+insert into t (id,a) values (138,64);
+insert into t (id,a) values (138,65);
+insert into t (id,a) values (138,66);
+insert into t (id,a) values (138,67);
+insert into t (id,a) values (138,68);
+insert into t (id,a) values (138,69);
+insert into t (id,a) values (138,70);
+insert into t (id,a) values (138,71);
+insert into t (id,a) values (138,72);
+insert into t (id,a) values (138,73);
+insert into t (id,a) values (138,74);
+insert into t (id,a) values (138,75);
+insert into t (id,a) values (138,76);
+insert into t (id,a) values (138,77);
+insert into t (id,a) values (138,78);
+insert into t (id,a) values (138,79);
+insert into t (id,a) values (138,80);
+insert into t (id,a) values (138,81);
+insert into t (id,a) values (138,82);
+insert into t (id,a) values (138,83);
+insert into t (id,a) values (138,84);
+insert into t (id,a) values (138,85);
+insert into t (id,a) values (138,86);
+insert into t (id,a) values (138,87);
+insert into t (id,a) values (138,88);
+insert into t (id,a) values (138,89);
+insert into t (id,a) values (138,90);
+insert into t (id,a) values (138,91);
+insert into t (id,a) values (138,92);
+insert into t (id,a) values (138,93);
+insert into t (id,a) values (138,94);
+insert into t (id,a) values (138,95);
+insert into t (id,a) values (138,96);
+insert into t (id,a) values (138,97);
+insert into t (id,a) values (138,98);
+insert into t (id,a) values (138,99);
+insert into t (id,a) values (139,0);
+insert into t (id,a) values (139,1);
+insert into t (id,a) values (139,2);
+insert into t (id,a) values (139,3);
+insert into t (id,a) values (139,4);
+insert into t (id,a) values (139,5);
+insert into t (id,a) values (139,6);
+insert into t (id,a) values (139,7);
+insert into t (id,a) values (139,8);
+insert into t (id,a) values (139,9);
+insert into t (id,a) values (139,10);
+insert into t (id,a) values (139,11);
+insert into t (id,a) values (139,12);
+insert into t (id,a) values (139,13);
+insert into t (id,a) values (139,14);
+insert into t (id,a) values (139,15);
+insert into t (id,a) values (139,16);
+insert into t (id,a) values (139,17);
+insert into t (id,a) values (139,18);
+insert into t (id,a) values (139,19);
+insert into t (id,a) values (139,20);
+insert into t (id,a) values (139,21);
+insert into t (id,a) values (139,22);
+insert into t (id,a) values (139,23);
+insert into t (id,a) values (139,24);
+insert into t (id,a) values (139,25);
+insert into t (id,a) values (139,26);
+insert into t (id,a) values (139,27);
+insert into t (id,a) values (139,28);
+insert into t (id,a) values (139,29);
+insert into t (id,a) values (139,30);
+insert into t (id,a) values (139,31);
+insert into t (id,a) values (139,32);
+insert into t (id,a) values (139,33);
+insert into t (id,a) values (139,34);
+insert into t (id,a) values (139,35);
+insert into t (id,a) values (139,36);
+insert into t (id,a) values (139,37);
+insert into t (id,a) values (139,38);
+insert into t (id,a) values (139,39);
+insert into t (id,a) values (139,40);
+insert into t (id,a) values (139,41);
+insert into t (id,a) values (139,42);
+insert into t (id,a) values (139,43);
+insert into t (id,a) values (139,44);
+insert into t (id,a) values (139,45);
+insert into t (id,a) values (139,46);
+insert into t (id,a) values (139,47);
+insert into t (id,a) values (139,48);
+insert into t (id,a) values (139,49);
+insert into t (id,a) values (139,50);
+insert into t (id,a) values (139,51);
+insert into t (id,a) values (139,52);
+insert into t (id,a) values (139,53);
+insert into t (id,a) values (139,54);
+insert into t (id,a) values (139,55);
+insert into t (id,a) values (139,56);
+insert into t (id,a) values (139,57);
+insert into t (id,a) values (139,58);
+insert into t (id,a) values (139,59);
+insert into t (id,a) values (139,60);
+insert into t (id,a) values (139,61);
+insert into t (id,a) values (139,62);
+insert into t (id,a) values (139,63);
+insert into t (id,a) values (139,64);
+insert into t (id,a) values (139,65);
+insert into t (id,a) values (139,66);
+insert into t (id,a) values (139,67);
+insert into t (id,a) values (139,68);
+insert into t (id,a) values (139,69);
+insert into t (id,a) values (139,70);
+insert into t (id,a) values (139,71);
+insert into t (id,a) values (139,72);
+insert into t (id,a) values (139,73);
+insert into t (id,a) values (139,74);
+insert into t (id,a) values (139,75);
+insert into t (id,a) values (139,76);
+insert into t (id,a) values (139,77);
+insert into t (id,a) values (139,78);
+insert into t (id,a) values (139,79);
+insert into t (id,a) values (139,80);
+insert into t (id,a) values (139,81);
+insert into t (id,a) values (139,82);
+insert into t (id,a) values (139,83);
+insert into t (id,a) values (139,84);
+insert into t (id,a) values (139,85);
+insert into t (id,a) values (139,86);
+insert into t (id,a) values (139,87);
+insert into t (id,a) values (139,88);
+insert into t (id,a) values (139,89);
+insert into t (id,a) values (139,90);
+insert into t (id,a) values (139,91);
+insert into t (id,a) values (139,92);
+insert into t (id,a) values (139,93);
+insert into t (id,a) values (139,94);
+insert into t (id,a) values (139,95);
+insert into t (id,a) values (139,96);
+insert into t (id,a) values (139,97);
+insert into t (id,a) values (139,98);
+insert into t (id,a) values (139,99);
+insert into t (id,a) values (140,0);
+insert into t (id,a) values (140,1);
+insert into t (id,a) values (140,2);
+insert into t (id,a) values (140,3);
+insert into t (id,a) values (140,4);
+insert into t (id,a) values (140,5);
+insert into t (id,a) values (140,6);
+insert into t (id,a) values (140,7);
+insert into t (id,a) values (140,8);
+insert into t (id,a) values (140,9);
+insert into t (id,a) values (140,10);
+insert into t (id,a) values (140,11);
+insert into t (id,a) values (140,12);
+insert into t (id,a) values (140,13);
+insert into t (id,a) values (140,14);
+insert into t (id,a) values (140,15);
+insert into t (id,a) values (140,16);
+insert into t (id,a) values (140,17);
+insert into t (id,a) values (140,18);
+insert into t (id,a) values (140,19);
+insert into t (id,a) values (140,20);
+insert into t (id,a) values (140,21);
+insert into t (id,a) values (140,22);
+insert into t (id,a) values (140,23);
+insert into t (id,a) values (140,24);
+insert into t (id,a) values (140,25);
+insert into t (id,a) values (140,26);
+insert into t (id,a) values (140,27);
+insert into t (id,a) values (140,28);
+insert into t (id,a) values (140,29);
+insert into t (id,a) values (140,30);
+insert into t (id,a) values (140,31);
+insert into t (id,a) values (140,32);
+insert into t (id,a) values (140,33);
+insert into t (id,a) values (140,34);
+insert into t (id,a) values (140,35);
+insert into t (id,a) values (140,36);
+insert into t (id,a) values (140,37);
+insert into t (id,a) values (140,38);
+insert into t (id,a) values (140,39);
+insert into t (id,a) values (140,40);
+insert into t (id,a) values (140,41);
+insert into t (id,a) values (140,42);
+insert into t (id,a) values (140,43);
+insert into t (id,a) values (140,44);
+insert into t (id,a) values (140,45);
+insert into t (id,a) values (140,46);
+insert into t (id,a) values (140,47);
+insert into t (id,a) values (140,48);
+insert into t (id,a) values (140,49);
+insert into t (id,a) values (140,50);
+insert into t (id,a) values (140,51);
+insert into t (id,a) values (140,52);
+insert into t (id,a) values (140,53);
+insert into t (id,a) values (140,54);
+insert into t (id,a) values (140,55);
+insert into t (id,a) values (140,56);
+insert into t (id,a) values (140,57);
+insert into t (id,a) values (140,58);
+insert into t (id,a) values (140,59);
+insert into t (id,a) values (140,60);
+insert into t (id,a) values (140,61);
+insert into t (id,a) values (140,62);
+insert into t (id,a) values (140,63);
+insert into t (id,a) values (140,64);
+insert into t (id,a) values (140,65);
+insert into t (id,a) values (140,66);
+insert into t (id,a) values (140,67);
+insert into t (id,a) values (140,68);
+insert into t (id,a) values (140,69);
+insert into t (id,a) values (140,70);
+insert into t (id,a) values (140,71);
+insert into t (id,a) values (140,72);
+insert into t (id,a) values (140,73);
+insert into t (id,a) values (140,74);
+insert into t (id,a) values (140,75);
+insert into t (id,a) values (140,76);
+insert into t (id,a) values (140,77);
+insert into t (id,a) values (140,78);
+insert into t (id,a) values (140,79);
+insert into t (id,a) values (140,80);
+insert into t (id,a) values (140,81);
+insert into t (id,a) values (140,82);
+insert into t (id,a) values (140,83);
+insert into t (id,a) values (140,84);
+insert into t (id,a) values (140,85);
+insert into t (id,a) values (140,86);
+insert into t (id,a) values (140,87);
+insert into t (id,a) values (140,88);
+insert into t (id,a) values (140,89);
+insert into t (id,a) values (140,90);
+insert into t (id,a) values (140,91);
+insert into t (id,a) values (140,92);
+insert into t (id,a) values (140,93);
+insert into t (id,a) values (140,94);
+insert into t (id,a) values (140,95);
+insert into t (id,a) values (140,96);
+insert into t (id,a) values (140,97);
+insert into t (id,a) values (140,98);
+insert into t (id,a) values (140,99);
+insert into t (id,a) values (141,0);
+insert into t (id,a) values (141,1);
+insert into t (id,a) values (141,2);
+insert into t (id,a) values (141,3);
+insert into t (id,a) values (141,4);
+insert into t (id,a) values (141,5);
+insert into t (id,a) values (141,6);
+insert into t (id,a) values (141,7);
+insert into t (id,a) values (141,8);
+insert into t (id,a) values (141,9);
+insert into t (id,a) values (141,10);
+insert into t (id,a) values (141,11);
+insert into t (id,a) values (141,12);
+insert into t (id,a) values (141,13);
+insert into t (id,a) values (141,14);
+insert into t (id,a) values (141,15);
+insert into t (id,a) values (141,16);
+insert into t (id,a) values (141,17);
+insert into t (id,a) values (141,18);
+insert into t (id,a) values (141,19);
+insert into t (id,a) values (141,20);
+insert into t (id,a) values (141,21);
+insert into t (id,a) values (141,22);
+insert into t (id,a) values (141,23);
+insert into t (id,a) values (141,24);
+insert into t (id,a) values (141,25);
+insert into t (id,a) values (141,26);
+insert into t (id,a) values (141,27);
+insert into t (id,a) values (141,28);
+insert into t (id,a) values (141,29);
+insert into t (id,a) values (141,30);
+insert into t (id,a) values (141,31);
+insert into t (id,a) values (141,32);
+insert into t (id,a) values (141,33);
+insert into t (id,a) values (141,34);
+insert into t (id,a) values (141,35);
+insert into t (id,a) values (141,36);
+insert into t (id,a) values (141,37);
+insert into t (id,a) values (141,38);
+insert into t (id,a) values (141,39);
+insert into t (id,a) values (141,40);
+insert into t (id,a) values (141,41);
+insert into t (id,a) values (141,42);
+insert into t (id,a) values (141,43);
+insert into t (id,a) values (141,44);
+insert into t (id,a) values (141,45);
+insert into t (id,a) values (141,46);
+insert into t (id,a) values (141,47);
+insert into t (id,a) values (141,48);
+insert into t (id,a) values (141,49);
+insert into t (id,a) values (141,50);
+insert into t (id,a) values (141,51);
+insert into t (id,a) values (141,52);
+insert into t (id,a) values (141,53);
+insert into t (id,a) values (141,54);
+insert into t (id,a) values (141,55);
+insert into t (id,a) values (141,56);
+insert into t (id,a) values (141,57);
+insert into t (id,a) values (141,58);
+insert into t (id,a) values (141,59);
+insert into t (id,a) values (141,60);
+insert into t (id,a) values (141,61);
+insert into t (id,a) values (141,62);
+insert into t (id,a) values (141,63);
+insert into t (id,a) values (141,64);
+insert into t (id,a) values (141,65);
+insert into t (id,a) values (141,66);
+insert into t (id,a) values (141,67);
+insert into t (id,a) values (141,68);
+insert into t (id,a) values (141,69);
+insert into t (id,a) values (141,70);
+insert into t (id,a) values (141,71);
+insert into t (id,a) values (141,72);
+insert into t (id,a) values (141,73);
+insert into t (id,a) values (141,74);
+insert into t (id,a) values (141,75);
+insert into t (id,a) values (141,76);
+insert into t (id,a) values (141,77);
+insert into t (id,a) values (141,78);
+insert into t (id,a) values (141,79);
+insert into t (id,a) values (141,80);
+insert into t (id,a) values (141,81);
+insert into t (id,a) values (141,82);
+insert into t (id,a) values (141,83);
+insert into t (id,a) values (141,84);
+insert into t (id,a) values (141,85);
+insert into t (id,a) values (141,86);
+insert into t (id,a) values (141,87);
+insert into t (id,a) values (141,88);
+insert into t (id,a) values (141,89);
+insert into t (id,a) values (141,90);
+insert into t (id,a) values (141,91);
+insert into t (id,a) values (141,92);
+insert into t (id,a) values (141,93);
+insert into t (id,a) values (141,94);
+insert into t (id,a) values (141,95);
+insert into t (id,a) values (141,96);
+insert into t (id,a) values (141,97);
+insert into t (id,a) values (141,98);
+insert into t (id,a) values (141,99);
+insert into t (id,a) values (142,0);
+insert into t (id,a) values (142,1);
+insert into t (id,a) values (142,2);
+insert into t (id,a) values (142,3);
+insert into t (id,a) values (142,4);
+insert into t (id,a) values (142,5);
+insert into t (id,a) values (142,6);
+insert into t (id,a) values (142,7);
+insert into t (id,a) values (142,8);
+insert into t (id,a) values (142,9);
+insert into t (id,a) values (142,10);
+insert into t (id,a) values (142,11);
+insert into t (id,a) values (142,12);
+insert into t (id,a) values (142,13);
+insert into t (id,a) values (142,14);
+insert into t (id,a) values (142,15);
+insert into t (id,a) values (142,16);
+insert into t (id,a) values (142,17);
+insert into t (id,a) values (142,18);
+insert into t (id,a) values (142,19);
+insert into t (id,a) values (142,20);
+insert into t (id,a) values (142,21);
+insert into t (id,a) values (142,22);
+insert into t (id,a) values (142,23);
+insert into t (id,a) values (142,24);
+insert into t (id,a) values (142,25);
+insert into t (id,a) values (142,26);
+insert into t (id,a) values (142,27);
+insert into t (id,a) values (142,28);
+insert into t (id,a) values (142,29);
+insert into t (id,a) values (142,30);
+insert into t (id,a) values (142,31);
+insert into t (id,a) values (142,32);
+insert into t (id,a) values (142,33);
+insert into t (id,a) values (142,34);
+insert into t (id,a) values (142,35);
+insert into t (id,a) values (142,36);
+insert into t (id,a) values (142,37);
+insert into t (id,a) values (142,38);
+insert into t (id,a) values (142,39);
+insert into t (id,a) values (142,40);
+insert into t (id,a) values (142,41);
+insert into t (id,a) values (142,42);
+insert into t (id,a) values (142,43);
+insert into t (id,a) values (142,44);
+insert into t (id,a) values (142,45);
+insert into t (id,a) values (142,46);
+insert into t (id,a) values (142,47);
+insert into t (id,a) values (142,48);
+insert into t (id,a) values (142,49);
+insert into t (id,a) values (142,50);
+insert into t (id,a) values (142,51);
+insert into t (id,a) values (142,52);
+insert into t (id,a) values (142,53);
+insert into t (id,a) values (142,54);
+insert into t (id,a) values (142,55);
+insert into t (id,a) values (142,56);
+insert into t (id,a) values (142,57);
+insert into t (id,a) values (142,58);
+insert into t (id,a) values (142,59);
+insert into t (id,a) values (142,60);
+insert into t (id,a) values (142,61);
+insert into t (id,a) values (142,62);
+insert into t (id,a) values (142,63);
+insert into t (id,a) values (142,64);
+insert into t (id,a) values (142,65);
+insert into t (id,a) values (142,66);
+insert into t (id,a) values (142,67);
+insert into t (id,a) values (142,68);
+insert into t (id,a) values (142,69);
+insert into t (id,a) values (142,70);
+insert into t (id,a) values (142,71);
+insert into t (id,a) values (142,72);
+insert into t (id,a) values (142,73);
+insert into t (id,a) values (142,74);
+insert into t (id,a) values (142,75);
+insert into t (id,a) values (142,76);
+insert into t (id,a) values (142,77);
+insert into t (id,a) values (142,78);
+insert into t (id,a) values (142,79);
+insert into t (id,a) values (142,80);
+insert into t (id,a) values (142,81);
+insert into t (id,a) values (142,82);
+insert into t (id,a) values (142,83);
+insert into t (id,a) values (142,84);
+insert into t (id,a) values (142,85);
+insert into t (id,a) values (142,86);
+insert into t (id,a) values (142,87);
+insert into t (id,a) values (142,88);
+insert into t (id,a) values (142,89);
+insert into t (id,a) values (142,90);
+insert into t (id,a) values (142,91);
+insert into t (id,a) values (142,92);
+insert into t (id,a) values (142,93);
+insert into t (id,a) values (142,94);
+insert into t (id,a) values (142,95);
+insert into t (id,a) values (142,96);
+insert into t (id,a) values (142,97);
+insert into t (id,a) values (142,98);
+insert into t (id,a) values (142,99);
+insert into t (id,a) values (143,0);
+insert into t (id,a) values (143,1);
+insert into t (id,a) values (143,2);
+insert into t (id,a) values (143,3);
+insert into t (id,a) values (143,4);
+insert into t (id,a) values (143,5);
+insert into t (id,a) values (143,6);
+insert into t (id,a) values (143,7);
+insert into t (id,a) values (143,8);
+insert into t (id,a) values (143,9);
+insert into t (id,a) values (143,10);
+insert into t (id,a) values (143,11);
+insert into t (id,a) values (143,12);
+insert into t (id,a) values (143,13);
+insert into t (id,a) values (143,14);
+insert into t (id,a) values (143,15);
+insert into t (id,a) values (143,16);
+insert into t (id,a) values (143,17);
+insert into t (id,a) values (143,18);
+insert into t (id,a) values (143,19);
+insert into t (id,a) values (143,20);
+insert into t (id,a) values (143,21);
+insert into t (id,a) values (143,22);
+insert into t (id,a) values (143,23);
+insert into t (id,a) values (143,24);
+insert into t (id,a) values (143,25);
+insert into t (id,a) values (143,26);
+insert into t (id,a) values (143,27);
+insert into t (id,a) values (143,28);
+insert into t (id,a) values (143,29);
+insert into t (id,a) values (143,30);
+insert into t (id,a) values (143,31);
+insert into t (id,a) values (143,32);
+insert into t (id,a) values (143,33);
+insert into t (id,a) values (143,34);
+insert into t (id,a) values (143,35);
+insert into t (id,a) values (143,36);
+insert into t (id,a) values (143,37);
+insert into t (id,a) values (143,38);
+insert into t (id,a) values (143,39);
+insert into t (id,a) values (143,40);
+insert into t (id,a) values (143,41);
+insert into t (id,a) values (143,42);
+insert into t (id,a) values (143,43);
+insert into t (id,a) values (143,44);
+insert into t (id,a) values (143,45);
+insert into t (id,a) values (143,46);
+insert into t (id,a) values (143,47);
+insert into t (id,a) values (143,48);
+insert into t (id,a) values (143,49);
+insert into t (id,a) values (143,50);
+insert into t (id,a) values (143,51);
+insert into t (id,a) values (143,52);
+insert into t (id,a) values (143,53);
+insert into t (id,a) values (143,54);
+insert into t (id,a) values (143,55);
+insert into t (id,a) values (143,56);
+insert into t (id,a) values (143,57);
+insert into t (id,a) values (143,58);
+insert into t (id,a) values (143,59);
+insert into t (id,a) values (143,60);
+insert into t (id,a) values (143,61);
+insert into t (id,a) values (143,62);
+insert into t (id,a) values (143,63);
+insert into t (id,a) values (143,64);
+insert into t (id,a) values (143,65);
+insert into t (id,a) values (143,66);
+insert into t (id,a) values (143,67);
+insert into t (id,a) values (143,68);
+insert into t (id,a) values (143,69);
+insert into t (id,a) values (143,70);
+insert into t (id,a) values (143,71);
+insert into t (id,a) values (143,72);
+insert into t (id,a) values (143,73);
+insert into t (id,a) values (143,74);
+insert into t (id,a) values (143,75);
+insert into t (id,a) values (143,76);
+insert into t (id,a) values (143,77);
+insert into t (id,a) values (143,78);
+insert into t (id,a) values (143,79);
+insert into t (id,a) values (143,80);
+insert into t (id,a) values (143,81);
+insert into t (id,a) values (143,82);
+insert into t (id,a) values (143,83);
+insert into t (id,a) values (143,84);
+insert into t (id,a) values (143,85);
+insert into t (id,a) values (143,86);
+insert into t (id,a) values (143,87);
+insert into t (id,a) values (143,88);
+insert into t (id,a) values (143,89);
+insert into t (id,a) values (143,90);
+insert into t (id,a) values (143,91);
+insert into t (id,a) values (143,92);
+insert into t (id,a) values (143,93);
+insert into t (id,a) values (143,94);
+insert into t (id,a) values (143,95);
+insert into t (id,a) values (143,96);
+insert into t (id,a) values (143,97);
+insert into t (id,a) values (143,98);
+insert into t (id,a) values (143,99);
+insert into t (id,a) values (144,0);
+insert into t (id,a) values (144,1);
+insert into t (id,a) values (144,2);
+insert into t (id,a) values (144,3);
+insert into t (id,a) values (144,4);
+insert into t (id,a) values (144,5);
+insert into t (id,a) values (144,6);
+insert into t (id,a) values (144,7);
+insert into t (id,a) values (144,8);
+insert into t (id,a) values (144,9);
+insert into t (id,a) values (144,10);
+insert into t (id,a) values (144,11);
+insert into t (id,a) values (144,12);
+insert into t (id,a) values (144,13);
+insert into t (id,a) values (144,14);
+insert into t (id,a) values (144,15);
+insert into t (id,a) values (144,16);
+insert into t (id,a) values (144,17);
+insert into t (id,a) values (144,18);
+insert into t (id,a) values (144,19);
+insert into t (id,a) values (144,20);
+insert into t (id,a) values (144,21);
+insert into t (id,a) values (144,22);
+insert into t (id,a) values (144,23);
+insert into t (id,a) values (144,24);
+insert into t (id,a) values (144,25);
+insert into t (id,a) values (144,26);
+insert into t (id,a) values (144,27);
+insert into t (id,a) values (144,28);
+insert into t (id,a) values (144,29);
+insert into t (id,a) values (144,30);
+insert into t (id,a) values (144,31);
+insert into t (id,a) values (144,32);
+insert into t (id,a) values (144,33);
+insert into t (id,a) values (144,34);
+insert into t (id,a) values (144,35);
+insert into t (id,a) values (144,36);
+insert into t (id,a) values (144,37);
+insert into t (id,a) values (144,38);
+insert into t (id,a) values (144,39);
+insert into t (id,a) values (144,40);
+insert into t (id,a) values (144,41);
+insert into t (id,a) values (144,42);
+insert into t (id,a) values (144,43);
+insert into t (id,a) values (144,44);
+insert into t (id,a) values (144,45);
+insert into t (id,a) values (144,46);
+insert into t (id,a) values (144,47);
+insert into t (id,a) values (144,48);
+insert into t (id,a) values (144,49);
+insert into t (id,a) values (144,50);
+insert into t (id,a) values (144,51);
+insert into t (id,a) values (144,52);
+insert into t (id,a) values (144,53);
+insert into t (id,a) values (144,54);
+insert into t (id,a) values (144,55);
+insert into t (id,a) values (144,56);
+insert into t (id,a) values (144,57);
+insert into t (id,a) values (144,58);
+insert into t (id,a) values (144,59);
+insert into t (id,a) values (144,60);
+insert into t (id,a) values (144,61);
+insert into t (id,a) values (144,62);
+insert into t (id,a) values (144,63);
+insert into t (id,a) values (144,64);
+insert into t (id,a) values (144,65);
+insert into t (id,a) values (144,66);
+insert into t (id,a) values (144,67);
+insert into t (id,a) values (144,68);
+insert into t (id,a) values (144,69);
+insert into t (id,a) values (144,70);
+insert into t (id,a) values (144,71);
+insert into t (id,a) values (144,72);
+insert into t (id,a) values (144,73);
+insert into t (id,a) values (144,74);
+insert into t (id,a) values (144,75);
+insert into t (id,a) values (144,76);
+insert into t (id,a) values (144,77);
+insert into t (id,a) values (144,78);
+insert into t (id,a) values (144,79);
+insert into t (id,a) values (144,80);
+insert into t (id,a) values (144,81);
+insert into t (id,a) values (144,82);
+insert into t (id,a) values (144,83);
+insert into t (id,a) values (144,84);
+insert into t (id,a) values (144,85);
+insert into t (id,a) values (144,86);
+insert into t (id,a) values (144,87);
+insert into t (id,a) values (144,88);
+insert into t (id,a) values (144,89);
+insert into t (id,a) values (144,90);
+insert into t (id,a) values (144,91);
+insert into t (id,a) values (144,92);
+insert into t (id,a) values (144,93);
+insert into t (id,a) values (144,94);
+insert into t (id,a) values (144,95);
+insert into t (id,a) values (144,96);
+insert into t (id,a) values (144,97);
+insert into t (id,a) values (144,98);
+insert into t (id,a) values (144,99);
+insert into t (id,a) values (145,0);
+insert into t (id,a) values (145,1);
+insert into t (id,a) values (145,2);
+insert into t (id,a) values (145,3);
+insert into t (id,a) values (145,4);
+insert into t (id,a) values (145,5);
+insert into t (id,a) values (145,6);
+insert into t (id,a) values (145,7);
+insert into t (id,a) values (145,8);
+insert into t (id,a) values (145,9);
+insert into t (id,a) values (145,10);
+insert into t (id,a) values (145,11);
+insert into t (id,a) values (145,12);
+insert into t (id,a) values (145,13);
+insert into t (id,a) values (145,14);
+insert into t (id,a) values (145,15);
+insert into t (id,a) values (145,16);
+insert into t (id,a) values (145,17);
+insert into t (id,a) values (145,18);
+insert into t (id,a) values (145,19);
+insert into t (id,a) values (145,20);
+insert into t (id,a) values (145,21);
+insert into t (id,a) values (145,22);
+insert into t (id,a) values (145,23);
+insert into t (id,a) values (145,24);
+insert into t (id,a) values (145,25);
+insert into t (id,a) values (145,26);
+insert into t (id,a) values (145,27);
+insert into t (id,a) values (145,28);
+insert into t (id,a) values (145,29);
+insert into t (id,a) values (145,30);
+insert into t (id,a) values (145,31);
+insert into t (id,a) values (145,32);
+insert into t (id,a) values (145,33);
+insert into t (id,a) values (145,34);
+insert into t (id,a) values (145,35);
+insert into t (id,a) values (145,36);
+insert into t (id,a) values (145,37);
+insert into t (id,a) values (145,38);
+insert into t (id,a) values (145,39);
+insert into t (id,a) values (145,40);
+insert into t (id,a) values (145,41);
+insert into t (id,a) values (145,42);
+insert into t (id,a) values (145,43);
+insert into t (id,a) values (145,44);
+insert into t (id,a) values (145,45);
+insert into t (id,a) values (145,46);
+insert into t (id,a) values (145,47);
+insert into t (id,a) values (145,48);
+insert into t (id,a) values (145,49);
+insert into t (id,a) values (145,50);
+insert into t (id,a) values (145,51);
+insert into t (id,a) values (145,52);
+insert into t (id,a) values (145,53);
+insert into t (id,a) values (145,54);
+insert into t (id,a) values (145,55);
+insert into t (id,a) values (145,56);
+insert into t (id,a) values (145,57);
+insert into t (id,a) values (145,58);
+insert into t (id,a) values (145,59);
+insert into t (id,a) values (145,60);
+insert into t (id,a) values (145,61);
+insert into t (id,a) values (145,62);
+insert into t (id,a) values (145,63);
+insert into t (id,a) values (145,64);
+insert into t (id,a) values (145,65);
+insert into t (id,a) values (145,66);
+insert into t (id,a) values (145,67);
+insert into t (id,a) values (145,68);
+insert into t (id,a) values (145,69);
+insert into t (id,a) values (145,70);
+insert into t (id,a) values (145,71);
+insert into t (id,a) values (145,72);
+insert into t (id,a) values (145,73);
+insert into t (id,a) values (145,74);
+insert into t (id,a) values (145,75);
+insert into t (id,a) values (145,76);
+insert into t (id,a) values (145,77);
+insert into t (id,a) values (145,78);
+insert into t (id,a) values (145,79);
+insert into t (id,a) values (145,80);
+insert into t (id,a) values (145,81);
+insert into t (id,a) values (145,82);
+insert into t (id,a) values (145,83);
+insert into t (id,a) values (145,84);
+insert into t (id,a) values (145,85);
+insert into t (id,a) values (145,86);
+insert into t (id,a) values (145,87);
+insert into t (id,a) values (145,88);
+insert into t (id,a) values (145,89);
+insert into t (id,a) values (145,90);
+insert into t (id,a) values (145,91);
+insert into t (id,a) values (145,92);
+insert into t (id,a) values (145,93);
+insert into t (id,a) values (145,94);
+insert into t (id,a) values (145,95);
+insert into t (id,a) values (145,96);
+insert into t (id,a) values (145,97);
+insert into t (id,a) values (145,98);
+insert into t (id,a) values (145,99);
+insert into t (id,a) values (146,0);
+insert into t (id,a) values (146,1);
+insert into t (id,a) values (146,2);
+insert into t (id,a) values (146,3);
+insert into t (id,a) values (146,4);
+insert into t (id,a) values (146,5);
+insert into t (id,a) values (146,6);
+insert into t (id,a) values (146,7);
+insert into t (id,a) values (146,8);
+insert into t (id,a) values (146,9);
+insert into t (id,a) values (146,10);
+insert into t (id,a) values (146,11);
+insert into t (id,a) values (146,12);
+insert into t (id,a) values (146,13);
+insert into t (id,a) values (146,14);
+insert into t (id,a) values (146,15);
+insert into t (id,a) values (146,16);
+insert into t (id,a) values (146,17);
+insert into t (id,a) values (146,18);
+insert into t (id,a) values (146,19);
+insert into t (id,a) values (146,20);
+insert into t (id,a) values (146,21);
+insert into t (id,a) values (146,22);
+insert into t (id,a) values (146,23);
+insert into t (id,a) values (146,24);
+insert into t (id,a) values (146,25);
+insert into t (id,a) values (146,26);
+insert into t (id,a) values (146,27);
+insert into t (id,a) values (146,28);
+insert into t (id,a) values (146,29);
+insert into t (id,a) values (146,30);
+insert into t (id,a) values (146,31);
+insert into t (id,a) values (146,32);
+insert into t (id,a) values (146,33);
+insert into t (id,a) values (146,34);
+insert into t (id,a) values (146,35);
+insert into t (id,a) values (146,36);
+insert into t (id,a) values (146,37);
+insert into t (id,a) values (146,38);
+insert into t (id,a) values (146,39);
+insert into t (id,a) values (146,40);
+insert into t (id,a) values (146,41);
+insert into t (id,a) values (146,42);
+insert into t (id,a) values (146,43);
+insert into t (id,a) values (146,44);
+insert into t (id,a) values (146,45);
+insert into t (id,a) values (146,46);
+insert into t (id,a) values (146,47);
+insert into t (id,a) values (146,48);
+insert into t (id,a) values (146,49);
+insert into t (id,a) values (146,50);
+insert into t (id,a) values (146,51);
+insert into t (id,a) values (146,52);
+insert into t (id,a) values (146,53);
+insert into t (id,a) values (146,54);
+insert into t (id,a) values (146,55);
+insert into t (id,a) values (146,56);
+insert into t (id,a) values (146,57);
+insert into t (id,a) values (146,58);
+insert into t (id,a) values (146,59);
+insert into t (id,a) values (146,60);
+insert into t (id,a) values (146,61);
+insert into t (id,a) values (146,62);
+insert into t (id,a) values (146,63);
+insert into t (id,a) values (146,64);
+insert into t (id,a) values (146,65);
+insert into t (id,a) values (146,66);
+insert into t (id,a) values (146,67);
+insert into t (id,a) values (146,68);
+insert into t (id,a) values (146,69);
+insert into t (id,a) values (146,70);
+insert into t (id,a) values (146,71);
+insert into t (id,a) values (146,72);
+insert into t (id,a) values (146,73);
+insert into t (id,a) values (146,74);
+insert into t (id,a) values (146,75);
+insert into t (id,a) values (146,76);
+insert into t (id,a) values (146,77);
+insert into t (id,a) values (146,78);
+insert into t (id,a) values (146,79);
+insert into t (id,a) values (146,80);
+insert into t (id,a) values (146,81);
+insert into t (id,a) values (146,82);
+insert into t (id,a) values (146,83);
+insert into t (id,a) values (146,84);
+insert into t (id,a) values (146,85);
+insert into t (id,a) values (146,86);
+insert into t (id,a) values (146,87);
+insert into t (id,a) values (146,88);
+insert into t (id,a) values (146,89);
+insert into t (id,a) values (146,90);
+insert into t (id,a) values (146,91);
+insert into t (id,a) values (146,92);
+insert into t (id,a) values (146,93);
+insert into t (id,a) values (146,94);
+insert into t (id,a) values (146,95);
+insert into t (id,a) values (146,96);
+insert into t (id,a) values (146,97);
+insert into t (id,a) values (146,98);
+insert into t (id,a) values (146,99);
+insert into t (id,a) values (147,0);
+insert into t (id,a) values (147,1);
+insert into t (id,a) values (147,2);
+insert into t (id,a) values (147,3);
+insert into t (id,a) values (147,4);
+insert into t (id,a) values (147,5);
+insert into t (id,a) values (147,6);
+insert into t (id,a) values (147,7);
+insert into t (id,a) values (147,8);
+insert into t (id,a) values (147,9);
+insert into t (id,a) values (147,10);
+insert into t (id,a) values (147,11);
+insert into t (id,a) values (147,12);
+insert into t (id,a) values (147,13);
+insert into t (id,a) values (147,14);
+insert into t (id,a) values (147,15);
+insert into t (id,a) values (147,16);
+insert into t (id,a) values (147,17);
+insert into t (id,a) values (147,18);
+insert into t (id,a) values (147,19);
+insert into t (id,a) values (147,20);
+insert into t (id,a) values (147,21);
+insert into t (id,a) values (147,22);
+insert into t (id,a) values (147,23);
+insert into t (id,a) values (147,24);
+insert into t (id,a) values (147,25);
+insert into t (id,a) values (147,26);
+insert into t (id,a) values (147,27);
+insert into t (id,a) values (147,28);
+insert into t (id,a) values (147,29);
+insert into t (id,a) values (147,30);
+insert into t (id,a) values (147,31);
+insert into t (id,a) values (147,32);
+insert into t (id,a) values (147,33);
+insert into t (id,a) values (147,34);
+insert into t (id,a) values (147,35);
+insert into t (id,a) values (147,36);
+insert into t (id,a) values (147,37);
+insert into t (id,a) values (147,38);
+insert into t (id,a) values (147,39);
+insert into t (id,a) values (147,40);
+insert into t (id,a) values (147,41);
+insert into t (id,a) values (147,42);
+insert into t (id,a) values (147,43);
+insert into t (id,a) values (147,44);
+insert into t (id,a) values (147,45);
+insert into t (id,a) values (147,46);
+insert into t (id,a) values (147,47);
+insert into t (id,a) values (147,48);
+insert into t (id,a) values (147,49);
+insert into t (id,a) values (147,50);
+insert into t (id,a) values (147,51);
+insert into t (id,a) values (147,52);
+insert into t (id,a) values (147,53);
+insert into t (id,a) values (147,54);
+insert into t (id,a) values (147,55);
+insert into t (id,a) values (147,56);
+insert into t (id,a) values (147,57);
+insert into t (id,a) values (147,58);
+insert into t (id,a) values (147,59);
+insert into t (id,a) values (147,60);
+insert into t (id,a) values (147,61);
+insert into t (id,a) values (147,62);
+insert into t (id,a) values (147,63);
+insert into t (id,a) values (147,64);
+insert into t (id,a) values (147,65);
+insert into t (id,a) values (147,66);
+insert into t (id,a) values (147,67);
+insert into t (id,a) values (147,68);
+insert into t (id,a) values (147,69);
+insert into t (id,a) values (147,70);
+insert into t (id,a) values (147,71);
+insert into t (id,a) values (147,72);
+insert into t (id,a) values (147,73);
+insert into t (id,a) values (147,74);
+insert into t (id,a) values (147,75);
+insert into t (id,a) values (147,76);
+insert into t (id,a) values (147,77);
+insert into t (id,a) values (147,78);
+insert into t (id,a) values (147,79);
+insert into t (id,a) values (147,80);
+insert into t (id,a) values (147,81);
+insert into t (id,a) values (147,82);
+insert into t (id,a) values (147,83);
+insert into t (id,a) values (147,84);
+insert into t (id,a) values (147,85);
+insert into t (id,a) values (147,86);
+insert into t (id,a) values (147,87);
+insert into t (id,a) values (147,88);
+insert into t (id,a) values (147,89);
+insert into t (id,a) values (147,90);
+insert into t (id,a) values (147,91);
+insert into t (id,a) values (147,92);
+insert into t (id,a) values (147,93);
+insert into t (id,a) values (147,94);
+insert into t (id,a) values (147,95);
+insert into t (id,a) values (147,96);
+insert into t (id,a) values (147,97);
+insert into t (id,a) values (147,98);
+insert into t (id,a) values (147,99);
+insert into t (id,a) values (148,0);
+insert into t (id,a) values (148,1);
+insert into t (id,a) values (148,2);
+insert into t (id,a) values (148,3);
+insert into t (id,a) values (148,4);
+insert into t (id,a) values (148,5);
+insert into t (id,a) values (148,6);
+insert into t (id,a) values (148,7);
+insert into t (id,a) values (148,8);
+insert into t (id,a) values (148,9);
+insert into t (id,a) values (148,10);
+insert into t (id,a) values (148,11);
+insert into t (id,a) values (148,12);
+insert into t (id,a) values (148,13);
+insert into t (id,a) values (148,14);
+insert into t (id,a) values (148,15);
+insert into t (id,a) values (148,16);
+insert into t (id,a) values (148,17);
+insert into t (id,a) values (148,18);
+insert into t (id,a) values (148,19);
+insert into t (id,a) values (148,20);
+insert into t (id,a) values (148,21);
+insert into t (id,a) values (148,22);
+insert into t (id,a) values (148,23);
+insert into t (id,a) values (148,24);
+insert into t (id,a) values (148,25);
+insert into t (id,a) values (148,26);
+insert into t (id,a) values (148,27);
+insert into t (id,a) values (148,28);
+insert into t (id,a) values (148,29);
+insert into t (id,a) values (148,30);
+insert into t (id,a) values (148,31);
+insert into t (id,a) values (148,32);
+insert into t (id,a) values (148,33);
+insert into t (id,a) values (148,34);
+insert into t (id,a) values (148,35);
+insert into t (id,a) values (148,36);
+insert into t (id,a) values (148,37);
+insert into t (id,a) values (148,38);
+insert into t (id,a) values (148,39);
+insert into t (id,a) values (148,40);
+insert into t (id,a) values (148,41);
+insert into t (id,a) values (148,42);
+insert into t (id,a) values (148,43);
+insert into t (id,a) values (148,44);
+insert into t (id,a) values (148,45);
+insert into t (id,a) values (148,46);
+insert into t (id,a) values (148,47);
+insert into t (id,a) values (148,48);
+insert into t (id,a) values (148,49);
+insert into t (id,a) values (148,50);
+insert into t (id,a) values (148,51);
+insert into t (id,a) values (148,52);
+insert into t (id,a) values (148,53);
+insert into t (id,a) values (148,54);
+insert into t (id,a) values (148,55);
+insert into t (id,a) values (148,56);
+insert into t (id,a) values (148,57);
+insert into t (id,a) values (148,58);
+insert into t (id,a) values (148,59);
+insert into t (id,a) values (148,60);
+insert into t (id,a) values (148,61);
+insert into t (id,a) values (148,62);
+insert into t (id,a) values (148,63);
+insert into t (id,a) values (148,64);
+insert into t (id,a) values (148,65);
+insert into t (id,a) values (148,66);
+insert into t (id,a) values (148,67);
+insert into t (id,a) values (148,68);
+insert into t (id,a) values (148,69);
+insert into t (id,a) values (148,70);
+insert into t (id,a) values (148,71);
+insert into t (id,a) values (148,72);
+insert into t (id,a) values (148,73);
+insert into t (id,a) values (148,74);
+insert into t (id,a) values (148,75);
+insert into t (id,a) values (148,76);
+insert into t (id,a) values (148,77);
+insert into t (id,a) values (148,78);
+insert into t (id,a) values (148,79);
+insert into t (id,a) values (148,80);
+insert into t (id,a) values (148,81);
+insert into t (id,a) values (148,82);
+insert into t (id,a) values (148,83);
+insert into t (id,a) values (148,84);
+insert into t (id,a) values (148,85);
+insert into t (id,a) values (148,86);
+insert into t (id,a) values (148,87);
+insert into t (id,a) values (148,88);
+insert into t (id,a) values (148,89);
+insert into t (id,a) values (148,90);
+insert into t (id,a) values (148,91);
+insert into t (id,a) values (148,92);
+insert into t (id,a) values (148,93);
+insert into t (id,a) values (148,94);
+insert into t (id,a) values (148,95);
+insert into t (id,a) values (148,96);
+insert into t (id,a) values (148,97);
+insert into t (id,a) values (148,98);
+insert into t (id,a) values (148,99);
+insert into t (id,a) values (149,0);
+insert into t (id,a) values (149,1);
+insert into t (id,a) values (149,2);
+insert into t (id,a) values (149,3);
+insert into t (id,a) values (149,4);
+insert into t (id,a) values (149,5);
+insert into t (id,a) values (149,6);
+insert into t (id,a) values (149,7);
+insert into t (id,a) values (149,8);
+insert into t (id,a) values (149,9);
+insert into t (id,a) values (149,10);
+insert into t (id,a) values (149,11);
+insert into t (id,a) values (149,12);
+insert into t (id,a) values (149,13);
+insert into t (id,a) values (149,14);
+insert into t (id,a) values (149,15);
+insert into t (id,a) values (149,16);
+insert into t (id,a) values (149,17);
+insert into t (id,a) values (149,18);
+insert into t (id,a) values (149,19);
+insert into t (id,a) values (149,20);
+insert into t (id,a) values (149,21);
+insert into t (id,a) values (149,22);
+insert into t (id,a) values (149,23);
+insert into t (id,a) values (149,24);
+insert into t (id,a) values (149,25);
+insert into t (id,a) values (149,26);
+insert into t (id,a) values (149,27);
+insert into t (id,a) values (149,28);
+insert into t (id,a) values (149,29);
+insert into t (id,a) values (149,30);
+insert into t (id,a) values (149,31);
+insert into t (id,a) values (149,32);
+insert into t (id,a) values (149,33);
+insert into t (id,a) values (149,34);
+insert into t (id,a) values (149,35);
+insert into t (id,a) values (149,36);
+insert into t (id,a) values (149,37);
+insert into t (id,a) values (149,38);
+insert into t (id,a) values (149,39);
+insert into t (id,a) values (149,40);
+insert into t (id,a) values (149,41);
+insert into t (id,a) values (149,42);
+insert into t (id,a) values (149,43);
+insert into t (id,a) values (149,44);
+insert into t (id,a) values (149,45);
+insert into t (id,a) values (149,46);
+insert into t (id,a) values (149,47);
+insert into t (id,a) values (149,48);
+insert into t (id,a) values (149,49);
+insert into t (id,a) values (149,50);
+insert into t (id,a) values (149,51);
+insert into t (id,a) values (149,52);
+insert into t (id,a) values (149,53);
+insert into t (id,a) values (149,54);
+insert into t (id,a) values (149,55);
+insert into t (id,a) values (149,56);
+insert into t (id,a) values (149,57);
+insert into t (id,a) values (149,58);
+insert into t (id,a) values (149,59);
+insert into t (id,a) values (149,60);
+insert into t (id,a) values (149,61);
+insert into t (id,a) values (149,62);
+insert into t (id,a) values (149,63);
+insert into t (id,a) values (149,64);
+insert into t (id,a) values (149,65);
+insert into t (id,a) values (149,66);
+insert into t (id,a) values (149,67);
+insert into t (id,a) values (149,68);
+insert into t (id,a) values (149,69);
+insert into t (id,a) values (149,70);
+insert into t (id,a) values (149,71);
+insert into t (id,a) values (149,72);
+insert into t (id,a) values (149,73);
+insert into t (id,a) values (149,74);
+insert into t (id,a) values (149,75);
+insert into t (id,a) values (149,76);
+insert into t (id,a) values (149,77);
+insert into t (id,a) values (149,78);
+insert into t (id,a) values (149,79);
+insert into t (id,a) values (149,80);
+insert into t (id,a) values (149,81);
+insert into t (id,a) values (149,82);
+insert into t (id,a) values (149,83);
+insert into t (id,a) values (149,84);
+insert into t (id,a) values (149,85);
+insert into t (id,a) values (149,86);
+insert into t (id,a) values (149,87);
+insert into t (id,a) values (149,88);
+insert into t (id,a) values (149,89);
+insert into t (id,a) values (149,90);
+insert into t (id,a) values (149,91);
+insert into t (id,a) values (149,92);
+insert into t (id,a) values (149,93);
+insert into t (id,a) values (149,94);
+insert into t (id,a) values (149,95);
+insert into t (id,a) values (149,96);
+insert into t (id,a) values (149,97);
+insert into t (id,a) values (149,98);
+insert into t (id,a) values (149,99);
+insert into t (id,a) values (150,0);
+insert into t (id,a) values (150,1);
+insert into t (id,a) values (150,2);
+insert into t (id,a) values (150,3);
+insert into t (id,a) values (150,4);
+insert into t (id,a) values (150,5);
+insert into t (id,a) values (150,6);
+insert into t (id,a) values (150,7);
+insert into t (id,a) values (150,8);
+insert into t (id,a) values (150,9);
+insert into t (id,a) values (150,10);
+insert into t (id,a) values (150,11);
+insert into t (id,a) values (150,12);
+insert into t (id,a) values (150,13);
+insert into t (id,a) values (150,14);
+insert into t (id,a) values (150,15);
+insert into t (id,a) values (150,16);
+insert into t (id,a) values (150,17);
+insert into t (id,a) values (150,18);
+insert into t (id,a) values (150,19);
+insert into t (id,a) values (150,20);
+insert into t (id,a) values (150,21);
+insert into t (id,a) values (150,22);
+insert into t (id,a) values (150,23);
+insert into t (id,a) values (150,24);
+insert into t (id,a) values (150,25);
+insert into t (id,a) values (150,26);
+insert into t (id,a) values (150,27);
+insert into t (id,a) values (150,28);
+insert into t (id,a) values (150,29);
+insert into t (id,a) values (150,30);
+insert into t (id,a) values (150,31);
+insert into t (id,a) values (150,32);
+insert into t (id,a) values (150,33);
+insert into t (id,a) values (150,34);
+insert into t (id,a) values (150,35);
+insert into t (id,a) values (150,36);
+insert into t (id,a) values (150,37);
+insert into t (id,a) values (150,38);
+insert into t (id,a) values (150,39);
+insert into t (id,a) values (150,40);
+insert into t (id,a) values (150,41);
+insert into t (id,a) values (150,42);
+insert into t (id,a) values (150,43);
+insert into t (id,a) values (150,44);
+insert into t (id,a) values (150,45);
+insert into t (id,a) values (150,46);
+insert into t (id,a) values (150,47);
+insert into t (id,a) values (150,48);
+insert into t (id,a) values (150,49);
+insert into t (id,a) values (150,50);
+insert into t (id,a) values (150,51);
+insert into t (id,a) values (150,52);
+insert into t (id,a) values (150,53);
+insert into t (id,a) values (150,54);
+insert into t (id,a) values (150,55);
+insert into t (id,a) values (150,56);
+insert into t (id,a) values (150,57);
+insert into t (id,a) values (150,58);
+insert into t (id,a) values (150,59);
+insert into t (id,a) values (150,60);
+insert into t (id,a) values (150,61);
+insert into t (id,a) values (150,62);
+insert into t (id,a) values (150,63);
+insert into t (id,a) values (150,64);
+insert into t (id,a) values (150,65);
+insert into t (id,a) values (150,66);
+insert into t (id,a) values (150,67);
+insert into t (id,a) values (150,68);
+insert into t (id,a) values (150,69);
+insert into t (id,a) values (150,70);
+insert into t (id,a) values (150,71);
+insert into t (id,a) values (150,72);
+insert into t (id,a) values (150,73);
+insert into t (id,a) values (150,74);
+insert into t (id,a) values (150,75);
+insert into t (id,a) values (150,76);
+insert into t (id,a) values (150,77);
+insert into t (id,a) values (150,78);
+insert into t (id,a) values (150,79);
+insert into t (id,a) values (150,80);
+insert into t (id,a) values (150,81);
+insert into t (id,a) values (150,82);
+insert into t (id,a) values (150,83);
+insert into t (id,a) values (150,84);
+insert into t (id,a) values (150,85);
+insert into t (id,a) values (150,86);
+insert into t (id,a) values (150,87);
+insert into t (id,a) values (150,88);
+insert into t (id,a) values (150,89);
+insert into t (id,a) values (150,90);
+insert into t (id,a) values (150,91);
+insert into t (id,a) values (150,92);
+insert into t (id,a) values (150,93);
+insert into t (id,a) values (150,94);
+insert into t (id,a) values (150,95);
+insert into t (id,a) values (150,96);
+insert into t (id,a) values (150,97);
+insert into t (id,a) values (150,98);
+insert into t (id,a) values (150,99);
+insert into t (id,a) values (151,0);
+insert into t (id,a) values (151,1);
+insert into t (id,a) values (151,2);
+insert into t (id,a) values (151,3);
+insert into t (id,a) values (151,4);
+insert into t (id,a) values (151,5);
+insert into t (id,a) values (151,6);
+insert into t (id,a) values (151,7);
+insert into t (id,a) values (151,8);
+insert into t (id,a) values (151,9);
+insert into t (id,a) values (151,10);
+insert into t (id,a) values (151,11);
+insert into t (id,a) values (151,12);
+insert into t (id,a) values (151,13);
+insert into t (id,a) values (151,14);
+insert into t (id,a) values (151,15);
+insert into t (id,a) values (151,16);
+insert into t (id,a) values (151,17);
+insert into t (id,a) values (151,18);
+insert into t (id,a) values (151,19);
+insert into t (id,a) values (151,20);
+insert into t (id,a) values (151,21);
+insert into t (id,a) values (151,22);
+insert into t (id,a) values (151,23);
+insert into t (id,a) values (151,24);
+insert into t (id,a) values (151,25);
+insert into t (id,a) values (151,26);
+insert into t (id,a) values (151,27);
+insert into t (id,a) values (151,28);
+insert into t (id,a) values (151,29);
+insert into t (id,a) values (151,30);
+insert into t (id,a) values (151,31);
+insert into t (id,a) values (151,32);
+insert into t (id,a) values (151,33);
+insert into t (id,a) values (151,34);
+insert into t (id,a) values (151,35);
+insert into t (id,a) values (151,36);
+insert into t (id,a) values (151,37);
+insert into t (id,a) values (151,38);
+insert into t (id,a) values (151,39);
+insert into t (id,a) values (151,40);
+insert into t (id,a) values (151,41);
+insert into t (id,a) values (151,42);
+insert into t (id,a) values (151,43);
+insert into t (id,a) values (151,44);
+insert into t (id,a) values (151,45);
+insert into t (id,a) values (151,46);
+insert into t (id,a) values (151,47);
+insert into t (id,a) values (151,48);
+insert into t (id,a) values (151,49);
+insert into t (id,a) values (151,50);
+insert into t (id,a) values (151,51);
+insert into t (id,a) values (151,52);
+insert into t (id,a) values (151,53);
+insert into t (id,a) values (151,54);
+insert into t (id,a) values (151,55);
+insert into t (id,a) values (151,56);
+insert into t (id,a) values (151,57);
+insert into t (id,a) values (151,58);
+insert into t (id,a) values (151,59);
+insert into t (id,a) values (151,60);
+insert into t (id,a) values (151,61);
+insert into t (id,a) values (151,62);
+insert into t (id,a) values (151,63);
+insert into t (id,a) values (151,64);
+insert into t (id,a) values (151,65);
+insert into t (id,a) values (151,66);
+insert into t (id,a) values (151,67);
+insert into t (id,a) values (151,68);
+insert into t (id,a) values (151,69);
+insert into t (id,a) values (151,70);
+insert into t (id,a) values (151,71);
+insert into t (id,a) values (151,72);
+insert into t (id,a) values (151,73);
+insert into t (id,a) values (151,74);
+insert into t (id,a) values (151,75);
+insert into t (id,a) values (151,76);
+insert into t (id,a) values (151,77);
+insert into t (id,a) values (151,78);
+insert into t (id,a) values (151,79);
+insert into t (id,a) values (151,80);
+insert into t (id,a) values (151,81);
+insert into t (id,a) values (151,82);
+insert into t (id,a) values (151,83);
+insert into t (id,a) values (151,84);
+insert into t (id,a) values (151,85);
+insert into t (id,a) values (151,86);
+insert into t (id,a) values (151,87);
+insert into t (id,a) values (151,88);
+insert into t (id,a) values (151,89);
+insert into t (id,a) values (151,90);
+insert into t (id,a) values (151,91);
+insert into t (id,a) values (151,92);
+insert into t (id,a) values (151,93);
+insert into t (id,a) values (151,94);
+insert into t (id,a) values (151,95);
+insert into t (id,a) values (151,96);
+insert into t (id,a) values (151,97);
+insert into t (id,a) values (151,98);
+insert into t (id,a) values (151,99);
+insert into t (id,a) values (152,0);
+insert into t (id,a) values (152,1);
+insert into t (id,a) values (152,2);
+insert into t (id,a) values (152,3);
+insert into t (id,a) values (152,4);
+insert into t (id,a) values (152,5);
+insert into t (id,a) values (152,6);
+insert into t (id,a) values (152,7);
+insert into t (id,a) values (152,8);
+insert into t (id,a) values (152,9);
+insert into t (id,a) values (152,10);
+insert into t (id,a) values (152,11);
+insert into t (id,a) values (152,12);
+insert into t (id,a) values (152,13);
+insert into t (id,a) values (152,14);
+insert into t (id,a) values (152,15);
+insert into t (id,a) values (152,16);
+insert into t (id,a) values (152,17);
+insert into t (id,a) values (152,18);
+insert into t (id,a) values (152,19);
+insert into t (id,a) values (152,20);
+insert into t (id,a) values (152,21);
+insert into t (id,a) values (152,22);
+insert into t (id,a) values (152,23);
+insert into t (id,a) values (152,24);
+insert into t (id,a) values (152,25);
+insert into t (id,a) values (152,26);
+insert into t (id,a) values (152,27);
+insert into t (id,a) values (152,28);
+insert into t (id,a) values (152,29);
+insert into t (id,a) values (152,30);
+insert into t (id,a) values (152,31);
+insert into t (id,a) values (152,32);
+insert into t (id,a) values (152,33);
+insert into t (id,a) values (152,34);
+insert into t (id,a) values (152,35);
+insert into t (id,a) values (152,36);
+insert into t (id,a) values (152,37);
+insert into t (id,a) values (152,38);
+insert into t (id,a) values (152,39);
+insert into t (id,a) values (152,40);
+insert into t (id,a) values (152,41);
+insert into t (id,a) values (152,42);
+insert into t (id,a) values (152,43);
+insert into t (id,a) values (152,44);
+insert into t (id,a) values (152,45);
+insert into t (id,a) values (152,46);
+insert into t (id,a) values (152,47);
+insert into t (id,a) values (152,48);
+insert into t (id,a) values (152,49);
+insert into t (id,a) values (152,50);
+insert into t (id,a) values (152,51);
+insert into t (id,a) values (152,52);
+insert into t (id,a) values (152,53);
+insert into t (id,a) values (152,54);
+insert into t (id,a) values (152,55);
+insert into t (id,a) values (152,56);
+insert into t (id,a) values (152,57);
+insert into t (id,a) values (152,58);
+insert into t (id,a) values (152,59);
+insert into t (id,a) values (152,60);
+insert into t (id,a) values (152,61);
+insert into t (id,a) values (152,62);
+insert into t (id,a) values (152,63);
+insert into t (id,a) values (152,64);
+insert into t (id,a) values (152,65);
+insert into t (id,a) values (152,66);
+insert into t (id,a) values (152,67);
+insert into t (id,a) values (152,68);
+insert into t (id,a) values (152,69);
+insert into t (id,a) values (152,70);
+insert into t (id,a) values (152,71);
+insert into t (id,a) values (152,72);
+insert into t (id,a) values (152,73);
+insert into t (id,a) values (152,74);
+insert into t (id,a) values (152,75);
+insert into t (id,a) values (152,76);
+insert into t (id,a) values (152,77);
+insert into t (id,a) values (152,78);
+insert into t (id,a) values (152,79);
+insert into t (id,a) values (152,80);
+insert into t (id,a) values (152,81);
+insert into t (id,a) values (152,82);
+insert into t (id,a) values (152,83);
+insert into t (id,a) values (152,84);
+insert into t (id,a) values (152,85);
+insert into t (id,a) values (152,86);
+insert into t (id,a) values (152,87);
+insert into t (id,a) values (152,88);
+insert into t (id,a) values (152,89);
+insert into t (id,a) values (152,90);
+insert into t (id,a) values (152,91);
+insert into t (id,a) values (152,92);
+insert into t (id,a) values (152,93);
+insert into t (id,a) values (152,94);
+insert into t (id,a) values (152,95);
+insert into t (id,a) values (152,96);
+insert into t (id,a) values (152,97);
+insert into t (id,a) values (152,98);
+insert into t (id,a) values (152,99);
+insert into t (id,a) values (153,0);
+insert into t (id,a) values (153,1);
+insert into t (id,a) values (153,2);
+insert into t (id,a) values (153,3);
+insert into t (id,a) values (153,4);
+insert into t (id,a) values (153,5);
+insert into t (id,a) values (153,6);
+insert into t (id,a) values (153,7);
+insert into t (id,a) values (153,8);
+insert into t (id,a) values (153,9);
+insert into t (id,a) values (153,10);
+insert into t (id,a) values (153,11);
+insert into t (id,a) values (153,12);
+insert into t (id,a) values (153,13);
+insert into t (id,a) values (153,14);
+insert into t (id,a) values (153,15);
+insert into t (id,a) values (153,16);
+insert into t (id,a) values (153,17);
+insert into t (id,a) values (153,18);
+insert into t (id,a) values (153,19);
+insert into t (id,a) values (153,20);
+insert into t (id,a) values (153,21);
+insert into t (id,a) values (153,22);
+insert into t (id,a) values (153,23);
+insert into t (id,a) values (153,24);
+insert into t (id,a) values (153,25);
+insert into t (id,a) values (153,26);
+insert into t (id,a) values (153,27);
+insert into t (id,a) values (153,28);
+insert into t (id,a) values (153,29);
+insert into t (id,a) values (153,30);
+insert into t (id,a) values (153,31);
+insert into t (id,a) values (153,32);
+insert into t (id,a) values (153,33);
+insert into t (id,a) values (153,34);
+insert into t (id,a) values (153,35);
+insert into t (id,a) values (153,36);
+insert into t (id,a) values (153,37);
+insert into t (id,a) values (153,38);
+insert into t (id,a) values (153,39);
+insert into t (id,a) values (153,40);
+insert into t (id,a) values (153,41);
+insert into t (id,a) values (153,42);
+insert into t (id,a) values (153,43);
+insert into t (id,a) values (153,44);
+insert into t (id,a) values (153,45);
+insert into t (id,a) values (153,46);
+insert into t (id,a) values (153,47);
+insert into t (id,a) values (153,48);
+insert into t (id,a) values (153,49);
+insert into t (id,a) values (153,50);
+insert into t (id,a) values (153,51);
+insert into t (id,a) values (153,52);
+insert into t (id,a) values (153,53);
+insert into t (id,a) values (153,54);
+insert into t (id,a) values (153,55);
+insert into t (id,a) values (153,56);
+insert into t (id,a) values (153,57);
+insert into t (id,a) values (153,58);
+insert into t (id,a) values (153,59);
+insert into t (id,a) values (153,60);
+insert into t (id,a) values (153,61);
+insert into t (id,a) values (153,62);
+insert into t (id,a) values (153,63);
+insert into t (id,a) values (153,64);
+insert into t (id,a) values (153,65);
+insert into t (id,a) values (153,66);
+insert into t (id,a) values (153,67);
+insert into t (id,a) values (153,68);
+insert into t (id,a) values (153,69);
+insert into t (id,a) values (153,70);
+insert into t (id,a) values (153,71);
+insert into t (id,a) values (153,72);
+insert into t (id,a) values (153,73);
+insert into t (id,a) values (153,74);
+insert into t (id,a) values (153,75);
+insert into t (id,a) values (153,76);
+insert into t (id,a) values (153,77);
+insert into t (id,a) values (153,78);
+insert into t (id,a) values (153,79);
+insert into t (id,a) values (153,80);
+insert into t (id,a) values (153,81);
+insert into t (id,a) values (153,82);
+insert into t (id,a) values (153,83);
+insert into t (id,a) values (153,84);
+insert into t (id,a) values (153,85);
+insert into t (id,a) values (153,86);
+insert into t (id,a) values (153,87);
+insert into t (id,a) values (153,88);
+insert into t (id,a) values (153,89);
+insert into t (id,a) values (153,90);
+insert into t (id,a) values (153,91);
+insert into t (id,a) values (153,92);
+insert into t (id,a) values (153,93);
+insert into t (id,a) values (153,94);
+insert into t (id,a) values (153,95);
+insert into t (id,a) values (153,96);
+insert into t (id,a) values (153,97);
+insert into t (id,a) values (153,98);
+insert into t (id,a) values (153,99);
+insert into t (id,a) values (154,0);
+insert into t (id,a) values (154,1);
+insert into t (id,a) values (154,2);
+insert into t (id,a) values (154,3);
+insert into t (id,a) values (154,4);
+insert into t (id,a) values (154,5);
+insert into t (id,a) values (154,6);
+insert into t (id,a) values (154,7);
+insert into t (id,a) values (154,8);
+insert into t (id,a) values (154,9);
+insert into t (id,a) values (154,10);
+insert into t (id,a) values (154,11);
+insert into t (id,a) values (154,12);
+insert into t (id,a) values (154,13);
+insert into t (id,a) values (154,14);
+insert into t (id,a) values (154,15);
+insert into t (id,a) values (154,16);
+insert into t (id,a) values (154,17);
+insert into t (id,a) values (154,18);
+insert into t (id,a) values (154,19);
+insert into t (id,a) values (154,20);
+insert into t (id,a) values (154,21);
+insert into t (id,a) values (154,22);
+insert into t (id,a) values (154,23);
+insert into t (id,a) values (154,24);
+insert into t (id,a) values (154,25);
+insert into t (id,a) values (154,26);
+insert into t (id,a) values (154,27);
+insert into t (id,a) values (154,28);
+insert into t (id,a) values (154,29);
+insert into t (id,a) values (154,30);
+insert into t (id,a) values (154,31);
+insert into t (id,a) values (154,32);
+insert into t (id,a) values (154,33);
+insert into t (id,a) values (154,34);
+insert into t (id,a) values (154,35);
+insert into t (id,a) values (154,36);
+insert into t (id,a) values (154,37);
+insert into t (id,a) values (154,38);
+insert into t (id,a) values (154,39);
+insert into t (id,a) values (154,40);
+insert into t (id,a) values (154,41);
+insert into t (id,a) values (154,42);
+insert into t (id,a) values (154,43);
+insert into t (id,a) values (154,44);
+insert into t (id,a) values (154,45);
+insert into t (id,a) values (154,46);
+insert into t (id,a) values (154,47);
+insert into t (id,a) values (154,48);
+insert into t (id,a) values (154,49);
+insert into t (id,a) values (154,50);
+insert into t (id,a) values (154,51);
+insert into t (id,a) values (154,52);
+insert into t (id,a) values (154,53);
+insert into t (id,a) values (154,54);
+insert into t (id,a) values (154,55);
+insert into t (id,a) values (154,56);
+insert into t (id,a) values (154,57);
+insert into t (id,a) values (154,58);
+insert into t (id,a) values (154,59);
+insert into t (id,a) values (154,60);
+insert into t (id,a) values (154,61);
+insert into t (id,a) values (154,62);
+insert into t (id,a) values (154,63);
+insert into t (id,a) values (154,64);
+insert into t (id,a) values (154,65);
+insert into t (id,a) values (154,66);
+insert into t (id,a) values (154,67);
+insert into t (id,a) values (154,68);
+insert into t (id,a) values (154,69);
+insert into t (id,a) values (154,70);
+insert into t (id,a) values (154,71);
+insert into t (id,a) values (154,72);
+insert into t (id,a) values (154,73);
+insert into t (id,a) values (154,74);
+insert into t (id,a) values (154,75);
+insert into t (id,a) values (154,76);
+insert into t (id,a) values (154,77);
+insert into t (id,a) values (154,78);
+insert into t (id,a) values (154,79);
+insert into t (id,a) values (154,80);
+insert into t (id,a) values (154,81);
+insert into t (id,a) values (154,82);
+insert into t (id,a) values (154,83);
+insert into t (id,a) values (154,84);
+insert into t (id,a) values (154,85);
+insert into t (id,a) values (154,86);
+insert into t (id,a) values (154,87);
+insert into t (id,a) values (154,88);
+insert into t (id,a) values (154,89);
+insert into t (id,a) values (154,90);
+insert into t (id,a) values (154,91);
+insert into t (id,a) values (154,92);
+insert into t (id,a) values (154,93);
+insert into t (id,a) values (154,94);
+insert into t (id,a) values (154,95);
+insert into t (id,a) values (154,96);
+insert into t (id,a) values (154,97);
+insert into t (id,a) values (154,98);
+insert into t (id,a) values (154,99);
+insert into t (id,a) values (155,0);
+insert into t (id,a) values (155,1);
+insert into t (id,a) values (155,2);
+insert into t (id,a) values (155,3);
+insert into t (id,a) values (155,4);
+insert into t (id,a) values (155,5);
+insert into t (id,a) values (155,6);
+insert into t (id,a) values (155,7);
+insert into t (id,a) values (155,8);
+insert into t (id,a) values (155,9);
+insert into t (id,a) values (155,10);
+insert into t (id,a) values (155,11);
+insert into t (id,a) values (155,12);
+insert into t (id,a) values (155,13);
+insert into t (id,a) values (155,14);
+insert into t (id,a) values (155,15);
+insert into t (id,a) values (155,16);
+insert into t (id,a) values (155,17);
+insert into t (id,a) values (155,18);
+insert into t (id,a) values (155,19);
+insert into t (id,a) values (155,20);
+insert into t (id,a) values (155,21);
+insert into t (id,a) values (155,22);
+insert into t (id,a) values (155,23);
+insert into t (id,a) values (155,24);
+insert into t (id,a) values (155,25);
+insert into t (id,a) values (155,26);
+insert into t (id,a) values (155,27);
+insert into t (id,a) values (155,28);
+insert into t (id,a) values (155,29);
+insert into t (id,a) values (155,30);
+insert into t (id,a) values (155,31);
+insert into t (id,a) values (155,32);
+insert into t (id,a) values (155,33);
+insert into t (id,a) values (155,34);
+insert into t (id,a) values (155,35);
+insert into t (id,a) values (155,36);
+insert into t (id,a) values (155,37);
+insert into t (id,a) values (155,38);
+insert into t (id,a) values (155,39);
+insert into t (id,a) values (155,40);
+insert into t (id,a) values (155,41);
+insert into t (id,a) values (155,42);
+insert into t (id,a) values (155,43);
+insert into t (id,a) values (155,44);
+insert into t (id,a) values (155,45);
+insert into t (id,a) values (155,46);
+insert into t (id,a) values (155,47);
+insert into t (id,a) values (155,48);
+insert into t (id,a) values (155,49);
+insert into t (id,a) values (155,50);
+insert into t (id,a) values (155,51);
+insert into t (id,a) values (155,52);
+insert into t (id,a) values (155,53);
+insert into t (id,a) values (155,54);
+insert into t (id,a) values (155,55);
+insert into t (id,a) values (155,56);
+insert into t (id,a) values (155,57);
+insert into t (id,a) values (155,58);
+insert into t (id,a) values (155,59);
+insert into t (id,a) values (155,60);
+insert into t (id,a) values (155,61);
+insert into t (id,a) values (155,62);
+insert into t (id,a) values (155,63);
+insert into t (id,a) values (155,64);
+insert into t (id,a) values (155,65);
+insert into t (id,a) values (155,66);
+insert into t (id,a) values (155,67);
+insert into t (id,a) values (155,68);
+insert into t (id,a) values (155,69);
+insert into t (id,a) values (155,70);
+insert into t (id,a) values (155,71);
+insert into t (id,a) values (155,72);
+insert into t (id,a) values (155,73);
+insert into t (id,a) values (155,74);
+insert into t (id,a) values (155,75);
+insert into t (id,a) values (155,76);
+insert into t (id,a) values (155,77);
+insert into t (id,a) values (155,78);
+insert into t (id,a) values (155,79);
+insert into t (id,a) values (155,80);
+insert into t (id,a) values (155,81);
+insert into t (id,a) values (155,82);
+insert into t (id,a) values (155,83);
+insert into t (id,a) values (155,84);
+insert into t (id,a) values (155,85);
+insert into t (id,a) values (155,86);
+insert into t (id,a) values (155,87);
+insert into t (id,a) values (155,88);
+insert into t (id,a) values (155,89);
+insert into t (id,a) values (155,90);
+insert into t (id,a) values (155,91);
+insert into t (id,a) values (155,92);
+insert into t (id,a) values (155,93);
+insert into t (id,a) values (155,94);
+insert into t (id,a) values (155,95);
+insert into t (id,a) values (155,96);
+insert into t (id,a) values (155,97);
+insert into t (id,a) values (155,98);
+insert into t (id,a) values (155,99);
+insert into t (id,a) values (156,0);
+insert into t (id,a) values (156,1);
+insert into t (id,a) values (156,2);
+insert into t (id,a) values (156,3);
+insert into t (id,a) values (156,4);
+insert into t (id,a) values (156,5);
+insert into t (id,a) values (156,6);
+insert into t (id,a) values (156,7);
+insert into t (id,a) values (156,8);
+insert into t (id,a) values (156,9);
+insert into t (id,a) values (156,10);
+insert into t (id,a) values (156,11);
+insert into t (id,a) values (156,12);
+insert into t (id,a) values (156,13);
+insert into t (id,a) values (156,14);
+insert into t (id,a) values (156,15);
+insert into t (id,a) values (156,16);
+insert into t (id,a) values (156,17);
+insert into t (id,a) values (156,18);
+insert into t (id,a) values (156,19);
+insert into t (id,a) values (156,20);
+insert into t (id,a) values (156,21);
+insert into t (id,a) values (156,22);
+insert into t (id,a) values (156,23);
+insert into t (id,a) values (156,24);
+insert into t (id,a) values (156,25);
+insert into t (id,a) values (156,26);
+insert into t (id,a) values (156,27);
+insert into t (id,a) values (156,28);
+insert into t (id,a) values (156,29);
+insert into t (id,a) values (156,30);
+insert into t (id,a) values (156,31);
+insert into t (id,a) values (156,32);
+insert into t (id,a) values (156,33);
+insert into t (id,a) values (156,34);
+insert into t (id,a) values (156,35);
+insert into t (id,a) values (156,36);
+insert into t (id,a) values (156,37);
+insert into t (id,a) values (156,38);
+insert into t (id,a) values (156,39);
+insert into t (id,a) values (156,40);
+insert into t (id,a) values (156,41);
+insert into t (id,a) values (156,42);
+insert into t (id,a) values (156,43);
+insert into t (id,a) values (156,44);
+insert into t (id,a) values (156,45);
+insert into t (id,a) values (156,46);
+insert into t (id,a) values (156,47);
+insert into t (id,a) values (156,48);
+insert into t (id,a) values (156,49);
+insert into t (id,a) values (156,50);
+insert into t (id,a) values (156,51);
+insert into t (id,a) values (156,52);
+insert into t (id,a) values (156,53);
+insert into t (id,a) values (156,54);
+insert into t (id,a) values (156,55);
+insert into t (id,a) values (156,56);
+insert into t (id,a) values (156,57);
+insert into t (id,a) values (156,58);
+insert into t (id,a) values (156,59);
+insert into t (id,a) values (156,60);
+insert into t (id,a) values (156,61);
+insert into t (id,a) values (156,62);
+insert into t (id,a) values (156,63);
+insert into t (id,a) values (156,64);
+insert into t (id,a) values (156,65);
+insert into t (id,a) values (156,66);
+insert into t (id,a) values (156,67);
+insert into t (id,a) values (156,68);
+insert into t (id,a) values (156,69);
+insert into t (id,a) values (156,70);
+insert into t (id,a) values (156,71);
+insert into t (id,a) values (156,72);
+insert into t (id,a) values (156,73);
+insert into t (id,a) values (156,74);
+insert into t (id,a) values (156,75);
+insert into t (id,a) values (156,76);
+insert into t (id,a) values (156,77);
+insert into t (id,a) values (156,78);
+insert into t (id,a) values (156,79);
+insert into t (id,a) values (156,80);
+insert into t (id,a) values (156,81);
+insert into t (id,a) values (156,82);
+insert into t (id,a) values (156,83);
+insert into t (id,a) values (156,84);
+insert into t (id,a) values (156,85);
+insert into t (id,a) values (156,86);
+insert into t (id,a) values (156,87);
+insert into t (id,a) values (156,88);
+insert into t (id,a) values (156,89);
+insert into t (id,a) values (156,90);
+insert into t (id,a) values (156,91);
+insert into t (id,a) values (156,92);
+insert into t (id,a) values (156,93);
+insert into t (id,a) values (156,94);
+insert into t (id,a) values (156,95);
+insert into t (id,a) values (156,96);
+insert into t (id,a) values (156,97);
+insert into t (id,a) values (156,98);
+insert into t (id,a) values (156,99);
+insert into t (id,a) values (157,0);
+insert into t (id,a) values (157,1);
+insert into t (id,a) values (157,2);
+insert into t (id,a) values (157,3);
+insert into t (id,a) values (157,4);
+insert into t (id,a) values (157,5);
+insert into t (id,a) values (157,6);
+insert into t (id,a) values (157,7);
+insert into t (id,a) values (157,8);
+insert into t (id,a) values (157,9);
+insert into t (id,a) values (157,10);
+insert into t (id,a) values (157,11);
+insert into t (id,a) values (157,12);
+insert into t (id,a) values (157,13);
+insert into t (id,a) values (157,14);
+insert into t (id,a) values (157,15);
+insert into t (id,a) values (157,16);
+insert into t (id,a) values (157,17);
+insert into t (id,a) values (157,18);
+insert into t (id,a) values (157,19);
+insert into t (id,a) values (157,20);
+insert into t (id,a) values (157,21);
+insert into t (id,a) values (157,22);
+insert into t (id,a) values (157,23);
+insert into t (id,a) values (157,24);
+insert into t (id,a) values (157,25);
+insert into t (id,a) values (157,26);
+insert into t (id,a) values (157,27);
+insert into t (id,a) values (157,28);
+insert into t (id,a) values (157,29);
+insert into t (id,a) values (157,30);
+insert into t (id,a) values (157,31);
+insert into t (id,a) values (157,32);
+insert into t (id,a) values (157,33);
+insert into t (id,a) values (157,34);
+insert into t (id,a) values (157,35);
+insert into t (id,a) values (157,36);
+insert into t (id,a) values (157,37);
+insert into t (id,a) values (157,38);
+insert into t (id,a) values (157,39);
+insert into t (id,a) values (157,40);
+insert into t (id,a) values (157,41);
+insert into t (id,a) values (157,42);
+insert into t (id,a) values (157,43);
+insert into t (id,a) values (157,44);
+insert into t (id,a) values (157,45);
+insert into t (id,a) values (157,46);
+insert into t (id,a) values (157,47);
+insert into t (id,a) values (157,48);
+insert into t (id,a) values (157,49);
+insert into t (id,a) values (157,50);
+insert into t (id,a) values (157,51);
+insert into t (id,a) values (157,52);
+insert into t (id,a) values (157,53);
+insert into t (id,a) values (157,54);
+insert into t (id,a) values (157,55);
+insert into t (id,a) values (157,56);
+insert into t (id,a) values (157,57);
+insert into t (id,a) values (157,58);
+insert into t (id,a) values (157,59);
+insert into t (id,a) values (157,60);
+insert into t (id,a) values (157,61);
+insert into t (id,a) values (157,62);
+insert into t (id,a) values (157,63);
+insert into t (id,a) values (157,64);
+insert into t (id,a) values (157,65);
+insert into t (id,a) values (157,66);
+insert into t (id,a) values (157,67);
+insert into t (id,a) values (157,68);
+insert into t (id,a) values (157,69);
+insert into t (id,a) values (157,70);
+insert into t (id,a) values (157,71);
+insert into t (id,a) values (157,72);
+insert into t (id,a) values (157,73);
+insert into t (id,a) values (157,74);
+insert into t (id,a) values (157,75);
+insert into t (id,a) values (157,76);
+insert into t (id,a) values (157,77);
+insert into t (id,a) values (157,78);
+insert into t (id,a) values (157,79);
+insert into t (id,a) values (157,80);
+insert into t (id,a) values (157,81);
+insert into t (id,a) values (157,82);
+insert into t (id,a) values (157,83);
+insert into t (id,a) values (157,84);
+insert into t (id,a) values (157,85);
+insert into t (id,a) values (157,86);
+insert into t (id,a) values (157,87);
+insert into t (id,a) values (157,88);
+insert into t (id,a) values (157,89);
+insert into t (id,a) values (157,90);
+insert into t (id,a) values (157,91);
+insert into t (id,a) values (157,92);
+insert into t (id,a) values (157,93);
+insert into t (id,a) values (157,94);
+insert into t (id,a) values (157,95);
+insert into t (id,a) values (157,96);
+insert into t (id,a) values (157,97);
+insert into t (id,a) values (157,98);
+insert into t (id,a) values (157,99);
+insert into t (id,a) values (158,0);
+insert into t (id,a) values (158,1);
+insert into t (id,a) values (158,2);
+insert into t (id,a) values (158,3);
+insert into t (id,a) values (158,4);
+insert into t (id,a) values (158,5);
+insert into t (id,a) values (158,6);
+insert into t (id,a) values (158,7);
+insert into t (id,a) values (158,8);
+insert into t (id,a) values (158,9);
+insert into t (id,a) values (158,10);
+insert into t (id,a) values (158,11);
+insert into t (id,a) values (158,12);
+insert into t (id,a) values (158,13);
+insert into t (id,a) values (158,14);
+insert into t (id,a) values (158,15);
+insert into t (id,a) values (158,16);
+insert into t (id,a) values (158,17);
+insert into t (id,a) values (158,18);
+insert into t (id,a) values (158,19);
+insert into t (id,a) values (158,20);
+insert into t (id,a) values (158,21);
+insert into t (id,a) values (158,22);
+insert into t (id,a) values (158,23);
+insert into t (id,a) values (158,24);
+insert into t (id,a) values (158,25);
+insert into t (id,a) values (158,26);
+insert into t (id,a) values (158,27);
+insert into t (id,a) values (158,28);
+insert into t (id,a) values (158,29);
+insert into t (id,a) values (158,30);
+insert into t (id,a) values (158,31);
+insert into t (id,a) values (158,32);
+insert into t (id,a) values (158,33);
+insert into t (id,a) values (158,34);
+insert into t (id,a) values (158,35);
+insert into t (id,a) values (158,36);
+insert into t (id,a) values (158,37);
+insert into t (id,a) values (158,38);
+insert into t (id,a) values (158,39);
+insert into t (id,a) values (158,40);
+insert into t (id,a) values (158,41);
+insert into t (id,a) values (158,42);
+insert into t (id,a) values (158,43);
+insert into t (id,a) values (158,44);
+insert into t (id,a) values (158,45);
+insert into t (id,a) values (158,46);
+insert into t (id,a) values (158,47);
+insert into t (id,a) values (158,48);
+insert into t (id,a) values (158,49);
+insert into t (id,a) values (158,50);
+insert into t (id,a) values (158,51);
+insert into t (id,a) values (158,52);
+insert into t (id,a) values (158,53);
+insert into t (id,a) values (158,54);
+insert into t (id,a) values (158,55);
+insert into t (id,a) values (158,56);
+insert into t (id,a) values (158,57);
+insert into t (id,a) values (158,58);
+insert into t (id,a) values (158,59);
+insert into t (id,a) values (158,60);
+insert into t (id,a) values (158,61);
+insert into t (id,a) values (158,62);
+insert into t (id,a) values (158,63);
+insert into t (id,a) values (158,64);
+insert into t (id,a) values (158,65);
+insert into t (id,a) values (158,66);
+insert into t (id,a) values (158,67);
+insert into t (id,a) values (158,68);
+insert into t (id,a) values (158,69);
+insert into t (id,a) values (158,70);
+insert into t (id,a) values (158,71);
+insert into t (id,a) values (158,72);
+insert into t (id,a) values (158,73);
+insert into t (id,a) values (158,74);
+insert into t (id,a) values (158,75);
+insert into t (id,a) values (158,76);
+insert into t (id,a) values (158,77);
+insert into t (id,a) values (158,78);
+insert into t (id,a) values (158,79);
+insert into t (id,a) values (158,80);
+insert into t (id,a) values (158,81);
+insert into t (id,a) values (158,82);
+insert into t (id,a) values (158,83);
+insert into t (id,a) values (158,84);
+insert into t (id,a) values (158,85);
+insert into t (id,a) values (158,86);
+insert into t (id,a) values (158,87);
+insert into t (id,a) values (158,88);
+insert into t (id,a) values (158,89);
+insert into t (id,a) values (158,90);
+insert into t (id,a) values (158,91);
+insert into t (id,a) values (158,92);
+insert into t (id,a) values (158,93);
+insert into t (id,a) values (158,94);
+insert into t (id,a) values (158,95);
+insert into t (id,a) values (158,96);
+insert into t (id,a) values (158,97);
+insert into t (id,a) values (158,98);
+insert into t (id,a) values (158,99);
+insert into t (id,a) values (159,0);
+insert into t (id,a) values (159,1);
+insert into t (id,a) values (159,2);
+insert into t (id,a) values (159,3);
+insert into t (id,a) values (159,4);
+insert into t (id,a) values (159,5);
+insert into t (id,a) values (159,6);
+insert into t (id,a) values (159,7);
+insert into t (id,a) values (159,8);
+insert into t (id,a) values (159,9);
+insert into t (id,a) values (159,10);
+insert into t (id,a) values (159,11);
+insert into t (id,a) values (159,12);
+insert into t (id,a) values (159,13);
+insert into t (id,a) values (159,14);
+insert into t (id,a) values (159,15);
+insert into t (id,a) values (159,16);
+insert into t (id,a) values (159,17);
+insert into t (id,a) values (159,18);
+insert into t (id,a) values (159,19);
+insert into t (id,a) values (159,20);
+insert into t (id,a) values (159,21);
+insert into t (id,a) values (159,22);
+insert into t (id,a) values (159,23);
+insert into t (id,a) values (159,24);
+insert into t (id,a) values (159,25);
+insert into t (id,a) values (159,26);
+insert into t (id,a) values (159,27);
+insert into t (id,a) values (159,28);
+insert into t (id,a) values (159,29);
+insert into t (id,a) values (159,30);
+insert into t (id,a) values (159,31);
+insert into t (id,a) values (159,32);
+insert into t (id,a) values (159,33);
+insert into t (id,a) values (159,34);
+insert into t (id,a) values (159,35);
+insert into t (id,a) values (159,36);
+insert into t (id,a) values (159,37);
+insert into t (id,a) values (159,38);
+insert into t (id,a) values (159,39);
+insert into t (id,a) values (159,40);
+insert into t (id,a) values (159,41);
+insert into t (id,a) values (159,42);
+insert into t (id,a) values (159,43);
+insert into t (id,a) values (159,44);
+insert into t (id,a) values (159,45);
+insert into t (id,a) values (159,46);
+insert into t (id,a) values (159,47);
+insert into t (id,a) values (159,48);
+insert into t (id,a) values (159,49);
+insert into t (id,a) values (159,50);
+insert into t (id,a) values (159,51);
+insert into t (id,a) values (159,52);
+insert into t (id,a) values (159,53);
+insert into t (id,a) values (159,54);
+insert into t (id,a) values (159,55);
+insert into t (id,a) values (159,56);
+insert into t (id,a) values (159,57);
+insert into t (id,a) values (159,58);
+insert into t (id,a) values (159,59);
+insert into t (id,a) values (159,60);
+insert into t (id,a) values (159,61);
+insert into t (id,a) values (159,62);
+insert into t (id,a) values (159,63);
+insert into t (id,a) values (159,64);
+insert into t (id,a) values (159,65);
+insert into t (id,a) values (159,66);
+insert into t (id,a) values (159,67);
+insert into t (id,a) values (159,68);
+insert into t (id,a) values (159,69);
+insert into t (id,a) values (159,70);
+insert into t (id,a) values (159,71);
+insert into t (id,a) values (159,72);
+insert into t (id,a) values (159,73);
+insert into t (id,a) values (159,74);
+insert into t (id,a) values (159,75);
+insert into t (id,a) values (159,76);
+insert into t (id,a) values (159,77);
+insert into t (id,a) values (159,78);
+insert into t (id,a) values (159,79);
+insert into t (id,a) values (159,80);
+insert into t (id,a) values (159,81);
+insert into t (id,a) values (159,82);
+insert into t (id,a) values (159,83);
+insert into t (id,a) values (159,84);
+insert into t (id,a) values (159,85);
+insert into t (id,a) values (159,86);
+insert into t (id,a) values (159,87);
+insert into t (id,a) values (159,88);
+insert into t (id,a) values (159,89);
+insert into t (id,a) values (159,90);
+insert into t (id,a) values (159,91);
+insert into t (id,a) values (159,92);
+insert into t (id,a) values (159,93);
+insert into t (id,a) values (159,94);
+insert into t (id,a) values (159,95);
+insert into t (id,a) values (159,96);
+insert into t (id,a) values (159,97);
+insert into t (id,a) values (159,98);
+insert into t (id,a) values (159,99);
+insert into t (id,a) values (160,0);
+insert into t (id,a) values (160,1);
+insert into t (id,a) values (160,2);
+insert into t (id,a) values (160,3);
+insert into t (id,a) values (160,4);
+insert into t (id,a) values (160,5);
+insert into t (id,a) values (160,6);
+insert into t (id,a) values (160,7);
+insert into t (id,a) values (160,8);
+insert into t (id,a) values (160,9);
+insert into t (id,a) values (160,10);
+insert into t (id,a) values (160,11);
+insert into t (id,a) values (160,12);
+insert into t (id,a) values (160,13);
+insert into t (id,a) values (160,14);
+insert into t (id,a) values (160,15);
+insert into t (id,a) values (160,16);
+insert into t (id,a) values (160,17);
+insert into t (id,a) values (160,18);
+insert into t (id,a) values (160,19);
+insert into t (id,a) values (160,20);
+insert into t (id,a) values (160,21);
+insert into t (id,a) values (160,22);
+insert into t (id,a) values (160,23);
+insert into t (id,a) values (160,24);
+insert into t (id,a) values (160,25);
+insert into t (id,a) values (160,26);
+insert into t (id,a) values (160,27);
+insert into t (id,a) values (160,28);
+insert into t (id,a) values (160,29);
+insert into t (id,a) values (160,30);
+insert into t (id,a) values (160,31);
+insert into t (id,a) values (160,32);
+insert into t (id,a) values (160,33);
+insert into t (id,a) values (160,34);
+insert into t (id,a) values (160,35);
+insert into t (id,a) values (160,36);
+insert into t (id,a) values (160,37);
+insert into t (id,a) values (160,38);
+insert into t (id,a) values (160,39);
+insert into t (id,a) values (160,40);
+insert into t (id,a) values (160,41);
+insert into t (id,a) values (160,42);
+insert into t (id,a) values (160,43);
+insert into t (id,a) values (160,44);
+insert into t (id,a) values (160,45);
+insert into t (id,a) values (160,46);
+insert into t (id,a) values (160,47);
+insert into t (id,a) values (160,48);
+insert into t (id,a) values (160,49);
+insert into t (id,a) values (160,50);
+insert into t (id,a) values (160,51);
+insert into t (id,a) values (160,52);
+insert into t (id,a) values (160,53);
+insert into t (id,a) values (160,54);
+insert into t (id,a) values (160,55);
+insert into t (id,a) values (160,56);
+insert into t (id,a) values (160,57);
+insert into t (id,a) values (160,58);
+insert into t (id,a) values (160,59);
+insert into t (id,a) values (160,60);
+insert into t (id,a) values (160,61);
+insert into t (id,a) values (160,62);
+insert into t (id,a) values (160,63);
+insert into t (id,a) values (160,64);
+insert into t (id,a) values (160,65);
+insert into t (id,a) values (160,66);
+insert into t (id,a) values (160,67);
+insert into t (id,a) values (160,68);
+insert into t (id,a) values (160,69);
+insert into t (id,a) values (160,70);
+insert into t (id,a) values (160,71);
+insert into t (id,a) values (160,72);
+insert into t (id,a) values (160,73);
+insert into t (id,a) values (160,74);
+insert into t (id,a) values (160,75);
+insert into t (id,a) values (160,76);
+insert into t (id,a) values (160,77);
+insert into t (id,a) values (160,78);
+insert into t (id,a) values (160,79);
+insert into t (id,a) values (160,80);
+insert into t (id,a) values (160,81);
+insert into t (id,a) values (160,82);
+insert into t (id,a) values (160,83);
+insert into t (id,a) values (160,84);
+insert into t (id,a) values (160,85);
+insert into t (id,a) values (160,86);
+insert into t (id,a) values (160,87);
+insert into t (id,a) values (160,88);
+insert into t (id,a) values (160,89);
+insert into t (id,a) values (160,90);
+insert into t (id,a) values (160,91);
+insert into t (id,a) values (160,92);
+insert into t (id,a) values (160,93);
+insert into t (id,a) values (160,94);
+insert into t (id,a) values (160,95);
+insert into t (id,a) values (160,96);
+insert into t (id,a) values (160,97);
+insert into t (id,a) values (160,98);
+insert into t (id,a) values (160,99);
+insert into t (id,a) values (161,0);
+insert into t (id,a) values (161,1);
+insert into t (id,a) values (161,2);
+insert into t (id,a) values (161,3);
+insert into t (id,a) values (161,4);
+insert into t (id,a) values (161,5);
+insert into t (id,a) values (161,6);
+insert into t (id,a) values (161,7);
+insert into t (id,a) values (161,8);
+insert into t (id,a) values (161,9);
+insert into t (id,a) values (161,10);
+insert into t (id,a) values (161,11);
+insert into t (id,a) values (161,12);
+insert into t (id,a) values (161,13);
+insert into t (id,a) values (161,14);
+insert into t (id,a) values (161,15);
+insert into t (id,a) values (161,16);
+insert into t (id,a) values (161,17);
+insert into t (id,a) values (161,18);
+insert into t (id,a) values (161,19);
+insert into t (id,a) values (161,20);
+insert into t (id,a) values (161,21);
+insert into t (id,a) values (161,22);
+insert into t (id,a) values (161,23);
+insert into t (id,a) values (161,24);
+insert into t (id,a) values (161,25);
+insert into t (id,a) values (161,26);
+insert into t (id,a) values (161,27);
+insert into t (id,a) values (161,28);
+insert into t (id,a) values (161,29);
+insert into t (id,a) values (161,30);
+insert into t (id,a) values (161,31);
+insert into t (id,a) values (161,32);
+insert into t (id,a) values (161,33);
+insert into t (id,a) values (161,34);
+insert into t (id,a) values (161,35);
+insert into t (id,a) values (161,36);
+insert into t (id,a) values (161,37);
+insert into t (id,a) values (161,38);
+insert into t (id,a) values (161,39);
+insert into t (id,a) values (161,40);
+insert into t (id,a) values (161,41);
+insert into t (id,a) values (161,42);
+insert into t (id,a) values (161,43);
+insert into t (id,a) values (161,44);
+insert into t (id,a) values (161,45);
+insert into t (id,a) values (161,46);
+insert into t (id,a) values (161,47);
+insert into t (id,a) values (161,48);
+insert into t (id,a) values (161,49);
+insert into t (id,a) values (161,50);
+insert into t (id,a) values (161,51);
+insert into t (id,a) values (161,52);
+insert into t (id,a) values (161,53);
+insert into t (id,a) values (161,54);
+insert into t (id,a) values (161,55);
+insert into t (id,a) values (161,56);
+insert into t (id,a) values (161,57);
+insert into t (id,a) values (161,58);
+insert into t (id,a) values (161,59);
+insert into t (id,a) values (161,60);
+insert into t (id,a) values (161,61);
+insert into t (id,a) values (161,62);
+insert into t (id,a) values (161,63);
+insert into t (id,a) values (161,64);
+insert into t (id,a) values (161,65);
+insert into t (id,a) values (161,66);
+insert into t (id,a) values (161,67);
+insert into t (id,a) values (161,68);
+insert into t (id,a) values (161,69);
+insert into t (id,a) values (161,70);
+insert into t (id,a) values (161,71);
+insert into t (id,a) values (161,72);
+insert into t (id,a) values (161,73);
+insert into t (id,a) values (161,74);
+insert into t (id,a) values (161,75);
+insert into t (id,a) values (161,76);
+insert into t (id,a) values (161,77);
+insert into t (id,a) values (161,78);
+insert into t (id,a) values (161,79);
+insert into t (id,a) values (161,80);
+insert into t (id,a) values (161,81);
+insert into t (id,a) values (161,82);
+insert into t (id,a) values (161,83);
+insert into t (id,a) values (161,84);
+insert into t (id,a) values (161,85);
+insert into t (id,a) values (161,86);
+insert into t (id,a) values (161,87);
+insert into t (id,a) values (161,88);
+insert into t (id,a) values (161,89);
+insert into t (id,a) values (161,90);
+insert into t (id,a) values (161,91);
+insert into t (id,a) values (161,92);
+insert into t (id,a) values (161,93);
+insert into t (id,a) values (161,94);
+insert into t (id,a) values (161,95);
+insert into t (id,a) values (161,96);
+insert into t (id,a) values (161,97);
+insert into t (id,a) values (161,98);
+insert into t (id,a) values (161,99);
+insert into t (id,a) values (162,0);
+insert into t (id,a) values (162,1);
+insert into t (id,a) values (162,2);
+insert into t (id,a) values (162,3);
+insert into t (id,a) values (162,4);
+insert into t (id,a) values (162,5);
+insert into t (id,a) values (162,6);
+insert into t (id,a) values (162,7);
+insert into t (id,a) values (162,8);
+insert into t (id,a) values (162,9);
+insert into t (id,a) values (162,10);
+insert into t (id,a) values (162,11);
+insert into t (id,a) values (162,12);
+insert into t (id,a) values (162,13);
+insert into t (id,a) values (162,14);
+insert into t (id,a) values (162,15);
+insert into t (id,a) values (162,16);
+insert into t (id,a) values (162,17);
+insert into t (id,a) values (162,18);
+insert into t (id,a) values (162,19);
+insert into t (id,a) values (162,20);
+insert into t (id,a) values (162,21);
+insert into t (id,a) values (162,22);
+insert into t (id,a) values (162,23);
+insert into t (id,a) values (162,24);
+insert into t (id,a) values (162,25);
+insert into t (id,a) values (162,26);
+insert into t (id,a) values (162,27);
+insert into t (id,a) values (162,28);
+insert into t (id,a) values (162,29);
+insert into t (id,a) values (162,30);
+insert into t (id,a) values (162,31);
+insert into t (id,a) values (162,32);
+insert into t (id,a) values (162,33);
+insert into t (id,a) values (162,34);
+insert into t (id,a) values (162,35);
+insert into t (id,a) values (162,36);
+insert into t (id,a) values (162,37);
+insert into t (id,a) values (162,38);
+insert into t (id,a) values (162,39);
+insert into t (id,a) values (162,40);
+insert into t (id,a) values (162,41);
+insert into t (id,a) values (162,42);
+insert into t (id,a) values (162,43);
+insert into t (id,a) values (162,44);
+insert into t (id,a) values (162,45);
+insert into t (id,a) values (162,46);
+insert into t (id,a) values (162,47);
+insert into t (id,a) values (162,48);
+insert into t (id,a) values (162,49);
+insert into t (id,a) values (162,50);
+insert into t (id,a) values (162,51);
+insert into t (id,a) values (162,52);
+insert into t (id,a) values (162,53);
+insert into t (id,a) values (162,54);
+insert into t (id,a) values (162,55);
+insert into t (id,a) values (162,56);
+insert into t (id,a) values (162,57);
+insert into t (id,a) values (162,58);
+insert into t (id,a) values (162,59);
+insert into t (id,a) values (162,60);
+insert into t (id,a) values (162,61);
+insert into t (id,a) values (162,62);
+insert into t (id,a) values (162,63);
+insert into t (id,a) values (162,64);
+insert into t (id,a) values (162,65);
+insert into t (id,a) values (162,66);
+insert into t (id,a) values (162,67);
+insert into t (id,a) values (162,68);
+insert into t (id,a) values (162,69);
+insert into t (id,a) values (162,70);
+insert into t (id,a) values (162,71);
+insert into t (id,a) values (162,72);
+insert into t (id,a) values (162,73);
+insert into t (id,a) values (162,74);
+insert into t (id,a) values (162,75);
+insert into t (id,a) values (162,76);
+insert into t (id,a) values (162,77);
+insert into t (id,a) values (162,78);
+insert into t (id,a) values (162,79);
+insert into t (id,a) values (162,80);
+insert into t (id,a) values (162,81);
+insert into t (id,a) values (162,82);
+insert into t (id,a) values (162,83);
+insert into t (id,a) values (162,84);
+insert into t (id,a) values (162,85);
+insert into t (id,a) values (162,86);
+insert into t (id,a) values (162,87);
+insert into t (id,a) values (162,88);
+insert into t (id,a) values (162,89);
+insert into t (id,a) values (162,90);
+insert into t (id,a) values (162,91);
+insert into t (id,a) values (162,92);
+insert into t (id,a) values (162,93);
+insert into t (id,a) values (162,94);
+insert into t (id,a) values (162,95);
+insert into t (id,a) values (162,96);
+insert into t (id,a) values (162,97);
+insert into t (id,a) values (162,98);
+insert into t (id,a) values (162,99);
+insert into t (id,a) values (163,0);
+insert into t (id,a) values (163,1);
+insert into t (id,a) values (163,2);
+insert into t (id,a) values (163,3);
+insert into t (id,a) values (163,4);
+insert into t (id,a) values (163,5);
+insert into t (id,a) values (163,6);
+insert into t (id,a) values (163,7);
+insert into t (id,a) values (163,8);
+insert into t (id,a) values (163,9);
+insert into t (id,a) values (163,10);
+insert into t (id,a) values (163,11);
+insert into t (id,a) values (163,12);
+insert into t (id,a) values (163,13);
+insert into t (id,a) values (163,14);
+insert into t (id,a) values (163,15);
+insert into t (id,a) values (163,16);
+insert into t (id,a) values (163,17);
+insert into t (id,a) values (163,18);
+insert into t (id,a) values (163,19);
+insert into t (id,a) values (163,20);
+insert into t (id,a) values (163,21);
+insert into t (id,a) values (163,22);
+insert into t (id,a) values (163,23);
+insert into t (id,a) values (163,24);
+insert into t (id,a) values (163,25);
+insert into t (id,a) values (163,26);
+insert into t (id,a) values (163,27);
+insert into t (id,a) values (163,28);
+insert into t (id,a) values (163,29);
+insert into t (id,a) values (163,30);
+insert into t (id,a) values (163,31);
+insert into t (id,a) values (163,32);
+insert into t (id,a) values (163,33);
+insert into t (id,a) values (163,34);
+insert into t (id,a) values (163,35);
+insert into t (id,a) values (163,36);
+insert into t (id,a) values (163,37);
+insert into t (id,a) values (163,38);
+insert into t (id,a) values (163,39);
+insert into t (id,a) values (163,40);
+insert into t (id,a) values (163,41);
+insert into t (id,a) values (163,42);
+insert into t (id,a) values (163,43);
+insert into t (id,a) values (163,44);
+insert into t (id,a) values (163,45);
+insert into t (id,a) values (163,46);
+insert into t (id,a) values (163,47);
+insert into t (id,a) values (163,48);
+insert into t (id,a) values (163,49);
+insert into t (id,a) values (163,50);
+insert into t (id,a) values (163,51);
+insert into t (id,a) values (163,52);
+insert into t (id,a) values (163,53);
+insert into t (id,a) values (163,54);
+insert into t (id,a) values (163,55);
+insert into t (id,a) values (163,56);
+insert into t (id,a) values (163,57);
+insert into t (id,a) values (163,58);
+insert into t (id,a) values (163,59);
+insert into t (id,a) values (163,60);
+insert into t (id,a) values (163,61);
+insert into t (id,a) values (163,62);
+insert into t (id,a) values (163,63);
+insert into t (id,a) values (163,64);
+insert into t (id,a) values (163,65);
+insert into t (id,a) values (163,66);
+insert into t (id,a) values (163,67);
+insert into t (id,a) values (163,68);
+insert into t (id,a) values (163,69);
+insert into t (id,a) values (163,70);
+insert into t (id,a) values (163,71);
+insert into t (id,a) values (163,72);
+insert into t (id,a) values (163,73);
+insert into t (id,a) values (163,74);
+insert into t (id,a) values (163,75);
+insert into t (id,a) values (163,76);
+insert into t (id,a) values (163,77);
+insert into t (id,a) values (163,78);
+insert into t (id,a) values (163,79);
+insert into t (id,a) values (163,80);
+insert into t (id,a) values (163,81);
+insert into t (id,a) values (163,82);
+insert into t (id,a) values (163,83);
+insert into t (id,a) values (163,84);
+insert into t (id,a) values (163,85);
+insert into t (id,a) values (163,86);
+insert into t (id,a) values (163,87);
+insert into t (id,a) values (163,88);
+insert into t (id,a) values (163,89);
+insert into t (id,a) values (163,90);
+insert into t (id,a) values (163,91);
+insert into t (id,a) values (163,92);
+insert into t (id,a) values (163,93);
+insert into t (id,a) values (163,94);
+insert into t (id,a) values (163,95);
+insert into t (id,a) values (163,96);
+insert into t (id,a) values (163,97);
+insert into t (id,a) values (163,98);
+insert into t (id,a) values (163,99);
+insert into t (id,a) values (164,0);
+insert into t (id,a) values (164,1);
+insert into t (id,a) values (164,2);
+insert into t (id,a) values (164,3);
+insert into t (id,a) values (164,4);
+insert into t (id,a) values (164,5);
+insert into t (id,a) values (164,6);
+insert into t (id,a) values (164,7);
+insert into t (id,a) values (164,8);
+insert into t (id,a) values (164,9);
+insert into t (id,a) values (164,10);
+insert into t (id,a) values (164,11);
+insert into t (id,a) values (164,12);
+insert into t (id,a) values (164,13);
+insert into t (id,a) values (164,14);
+insert into t (id,a) values (164,15);
+insert into t (id,a) values (164,16);
+insert into t (id,a) values (164,17);
+insert into t (id,a) values (164,18);
+insert into t (id,a) values (164,19);
+insert into t (id,a) values (164,20);
+insert into t (id,a) values (164,21);
+insert into t (id,a) values (164,22);
+insert into t (id,a) values (164,23);
+insert into t (id,a) values (164,24);
+insert into t (id,a) values (164,25);
+insert into t (id,a) values (164,26);
+insert into t (id,a) values (164,27);
+insert into t (id,a) values (164,28);
+insert into t (id,a) values (164,29);
+insert into t (id,a) values (164,30);
+insert into t (id,a) values (164,31);
+insert into t (id,a) values (164,32);
+insert into t (id,a) values (164,33);
+insert into t (id,a) values (164,34);
+insert into t (id,a) values (164,35);
+insert into t (id,a) values (164,36);
+insert into t (id,a) values (164,37);
+insert into t (id,a) values (164,38);
+insert into t (id,a) values (164,39);
+insert into t (id,a) values (164,40);
+insert into t (id,a) values (164,41);
+insert into t (id,a) values (164,42);
+insert into t (id,a) values (164,43);
+insert into t (id,a) values (164,44);
+insert into t (id,a) values (164,45);
+insert into t (id,a) values (164,46);
+insert into t (id,a) values (164,47);
+insert into t (id,a) values (164,48);
+insert into t (id,a) values (164,49);
+insert into t (id,a) values (164,50);
+insert into t (id,a) values (164,51);
+insert into t (id,a) values (164,52);
+insert into t (id,a) values (164,53);
+insert into t (id,a) values (164,54);
+insert into t (id,a) values (164,55);
+insert into t (id,a) values (164,56);
+insert into t (id,a) values (164,57);
+insert into t (id,a) values (164,58);
+insert into t (id,a) values (164,59);
+insert into t (id,a) values (164,60);
+insert into t (id,a) values (164,61);
+insert into t (id,a) values (164,62);
+insert into t (id,a) values (164,63);
+insert into t (id,a) values (164,64);
+insert into t (id,a) values (164,65);
+insert into t (id,a) values (164,66);
+insert into t (id,a) values (164,67);
+insert into t (id,a) values (164,68);
+insert into t (id,a) values (164,69);
+insert into t (id,a) values (164,70);
+insert into t (id,a) values (164,71);
+insert into t (id,a) values (164,72);
+insert into t (id,a) values (164,73);
+insert into t (id,a) values (164,74);
+insert into t (id,a) values (164,75);
+insert into t (id,a) values (164,76);
+insert into t (id,a) values (164,77);
+insert into t (id,a) values (164,78);
+insert into t (id,a) values (164,79);
+insert into t (id,a) values (164,80);
+insert into t (id,a) values (164,81);
+insert into t (id,a) values (164,82);
+insert into t (id,a) values (164,83);
+insert into t (id,a) values (164,84);
+insert into t (id,a) values (164,85);
+insert into t (id,a) values (164,86);
+insert into t (id,a) values (164,87);
+insert into t (id,a) values (164,88);
+insert into t (id,a) values (164,89);
+insert into t (id,a) values (164,90);
+insert into t (id,a) values (164,91);
+insert into t (id,a) values (164,92);
+insert into t (id,a) values (164,93);
+insert into t (id,a) values (164,94);
+insert into t (id,a) values (164,95);
+insert into t (id,a) values (164,96);
+insert into t (id,a) values (164,97);
+insert into t (id,a) values (164,98);
+insert into t (id,a) values (164,99);
+insert into t (id,a) values (165,0);
+insert into t (id,a) values (165,1);
+insert into t (id,a) values (165,2);
+insert into t (id,a) values (165,3);
+insert into t (id,a) values (165,4);
+insert into t (id,a) values (165,5);
+insert into t (id,a) values (165,6);
+insert into t (id,a) values (165,7);
+insert into t (id,a) values (165,8);
+insert into t (id,a) values (165,9);
+insert into t (id,a) values (165,10);
+insert into t (id,a) values (165,11);
+insert into t (id,a) values (165,12);
+insert into t (id,a) values (165,13);
+insert into t (id,a) values (165,14);
+insert into t (id,a) values (165,15);
+insert into t (id,a) values (165,16);
+insert into t (id,a) values (165,17);
+insert into t (id,a) values (165,18);
+insert into t (id,a) values (165,19);
+insert into t (id,a) values (165,20);
+insert into t (id,a) values (165,21);
+insert into t (id,a) values (165,22);
+insert into t (id,a) values (165,23);
+insert into t (id,a) values (165,24);
+insert into t (id,a) values (165,25);
+insert into t (id,a) values (165,26);
+insert into t (id,a) values (165,27);
+insert into t (id,a) values (165,28);
+insert into t (id,a) values (165,29);
+insert into t (id,a) values (165,30);
+insert into t (id,a) values (165,31);
+insert into t (id,a) values (165,32);
+insert into t (id,a) values (165,33);
+insert into t (id,a) values (165,34);
+insert into t (id,a) values (165,35);
+insert into t (id,a) values (165,36);
+insert into t (id,a) values (165,37);
+insert into t (id,a) values (165,38);
+insert into t (id,a) values (165,39);
+insert into t (id,a) values (165,40);
+insert into t (id,a) values (165,41);
+insert into t (id,a) values (165,42);
+insert into t (id,a) values (165,43);
+insert into t (id,a) values (165,44);
+insert into t (id,a) values (165,45);
+insert into t (id,a) values (165,46);
+insert into t (id,a) values (165,47);
+insert into t (id,a) values (165,48);
+insert into t (id,a) values (165,49);
+insert into t (id,a) values (165,50);
+insert into t (id,a) values (165,51);
+insert into t (id,a) values (165,52);
+insert into t (id,a) values (165,53);
+insert into t (id,a) values (165,54);
+insert into t (id,a) values (165,55);
+insert into t (id,a) values (165,56);
+insert into t (id,a) values (165,57);
+insert into t (id,a) values (165,58);
+insert into t (id,a) values (165,59);
+insert into t (id,a) values (165,60);
+insert into t (id,a) values (165,61);
+insert into t (id,a) values (165,62);
+insert into t (id,a) values (165,63);
+insert into t (id,a) values (165,64);
+insert into t (id,a) values (165,65);
+insert into t (id,a) values (165,66);
+insert into t (id,a) values (165,67);
+insert into t (id,a) values (165,68);
+insert into t (id,a) values (165,69);
+insert into t (id,a) values (165,70);
+insert into t (id,a) values (165,71);
+insert into t (id,a) values (165,72);
+insert into t (id,a) values (165,73);
+insert into t (id,a) values (165,74);
+insert into t (id,a) values (165,75);
+insert into t (id,a) values (165,76);
+insert into t (id,a) values (165,77);
+insert into t (id,a) values (165,78);
+insert into t (id,a) values (165,79);
+insert into t (id,a) values (165,80);
+insert into t (id,a) values (165,81);
+insert into t (id,a) values (165,82);
+insert into t (id,a) values (165,83);
+insert into t (id,a) values (165,84);
+insert into t (id,a) values (165,85);
+insert into t (id,a) values (165,86);
+insert into t (id,a) values (165,87);
+insert into t (id,a) values (165,88);
+insert into t (id,a) values (165,89);
+insert into t (id,a) values (165,90);
+insert into t (id,a) values (165,91);
+insert into t (id,a) values (165,92);
+insert into t (id,a) values (165,93);
+insert into t (id,a) values (165,94);
+insert into t (id,a) values (165,95);
+insert into t (id,a) values (165,96);
+insert into t (id,a) values (165,97);
+insert into t (id,a) values (165,98);
+insert into t (id,a) values (165,99);
+insert into t (id,a) values (166,0);
+insert into t (id,a) values (166,1);
+insert into t (id,a) values (166,2);
+insert into t (id,a) values (166,3);
+insert into t (id,a) values (166,4);
+insert into t (id,a) values (166,5);
+insert into t (id,a) values (166,6);
+insert into t (id,a) values (166,7);
+insert into t (id,a) values (166,8);
+insert into t (id,a) values (166,9);
+insert into t (id,a) values (166,10);
+insert into t (id,a) values (166,11);
+insert into t (id,a) values (166,12);
+insert into t (id,a) values (166,13);
+insert into t (id,a) values (166,14);
+insert into t (id,a) values (166,15);
+insert into t (id,a) values (166,16);
+insert into t (id,a) values (166,17);
+insert into t (id,a) values (166,18);
+insert into t (id,a) values (166,19);
+insert into t (id,a) values (166,20);
+insert into t (id,a) values (166,21);
+insert into t (id,a) values (166,22);
+insert into t (id,a) values (166,23);
+insert into t (id,a) values (166,24);
+insert into t (id,a) values (166,25);
+insert into t (id,a) values (166,26);
+insert into t (id,a) values (166,27);
+insert into t (id,a) values (166,28);
+insert into t (id,a) values (166,29);
+insert into t (id,a) values (166,30);
+insert into t (id,a) values (166,31);
+insert into t (id,a) values (166,32);
+insert into t (id,a) values (166,33);
+insert into t (id,a) values (166,34);
+insert into t (id,a) values (166,35);
+insert into t (id,a) values (166,36);
+insert into t (id,a) values (166,37);
+insert into t (id,a) values (166,38);
+insert into t (id,a) values (166,39);
+insert into t (id,a) values (166,40);
+insert into t (id,a) values (166,41);
+insert into t (id,a) values (166,42);
+insert into t (id,a) values (166,43);
+insert into t (id,a) values (166,44);
+insert into t (id,a) values (166,45);
+insert into t (id,a) values (166,46);
+insert into t (id,a) values (166,47);
+insert into t (id,a) values (166,48);
+insert into t (id,a) values (166,49);
+insert into t (id,a) values (166,50);
+insert into t (id,a) values (166,51);
+insert into t (id,a) values (166,52);
+insert into t (id,a) values (166,53);
+insert into t (id,a) values (166,54);
+insert into t (id,a) values (166,55);
+insert into t (id,a) values (166,56);
+insert into t (id,a) values (166,57);
+insert into t (id,a) values (166,58);
+insert into t (id,a) values (166,59);
+insert into t (id,a) values (166,60);
+insert into t (id,a) values (166,61);
+insert into t (id,a) values (166,62);
+insert into t (id,a) values (166,63);
+insert into t (id,a) values (166,64);
+insert into t (id,a) values (166,65);
+insert into t (id,a) values (166,66);
+insert into t (id,a) values (166,67);
+insert into t (id,a) values (166,68);
+insert into t (id,a) values (166,69);
+insert into t (id,a) values (166,70);
+insert into t (id,a) values (166,71);
+insert into t (id,a) values (166,72);
+insert into t (id,a) values (166,73);
+insert into t (id,a) values (166,74);
+insert into t (id,a) values (166,75);
+insert into t (id,a) values (166,76);
+insert into t (id,a) values (166,77);
+insert into t (id,a) values (166,78);
+insert into t (id,a) values (166,79);
+insert into t (id,a) values (166,80);
+insert into t (id,a) values (166,81);
+insert into t (id,a) values (166,82);
+insert into t (id,a) values (166,83);
+insert into t (id,a) values (166,84);
+insert into t (id,a) values (166,85);
+insert into t (id,a) values (166,86);
+insert into t (id,a) values (166,87);
+insert into t (id,a) values (166,88);
+insert into t (id,a) values (166,89);
+insert into t (id,a) values (166,90);
+insert into t (id,a) values (166,91);
+insert into t (id,a) values (166,92);
+insert into t (id,a) values (166,93);
+insert into t (id,a) values (166,94);
+insert into t (id,a) values (166,95);
+insert into t (id,a) values (166,96);
+insert into t (id,a) values (166,97);
+insert into t (id,a) values (166,98);
+insert into t (id,a) values (166,99);
+insert into t (id,a) values (167,0);
+insert into t (id,a) values (167,1);
+insert into t (id,a) values (167,2);
+insert into t (id,a) values (167,3);
+insert into t (id,a) values (167,4);
+insert into t (id,a) values (167,5);
+insert into t (id,a) values (167,6);
+insert into t (id,a) values (167,7);
+insert into t (id,a) values (167,8);
+insert into t (id,a) values (167,9);
+insert into t (id,a) values (167,10);
+insert into t (id,a) values (167,11);
+insert into t (id,a) values (167,12);
+insert into t (id,a) values (167,13);
+insert into t (id,a) values (167,14);
+insert into t (id,a) values (167,15);
+insert into t (id,a) values (167,16);
+insert into t (id,a) values (167,17);
+insert into t (id,a) values (167,18);
+insert into t (id,a) values (167,19);
+insert into t (id,a) values (167,20);
+insert into t (id,a) values (167,21);
+insert into t (id,a) values (167,22);
+insert into t (id,a) values (167,23);
+insert into t (id,a) values (167,24);
+insert into t (id,a) values (167,25);
+insert into t (id,a) values (167,26);
+insert into t (id,a) values (167,27);
+insert into t (id,a) values (167,28);
+insert into t (id,a) values (167,29);
+insert into t (id,a) values (167,30);
+insert into t (id,a) values (167,31);
+insert into t (id,a) values (167,32);
+insert into t (id,a) values (167,33);
+insert into t (id,a) values (167,34);
+insert into t (id,a) values (167,35);
+insert into t (id,a) values (167,36);
+insert into t (id,a) values (167,37);
+insert into t (id,a) values (167,38);
+insert into t (id,a) values (167,39);
+insert into t (id,a) values (167,40);
+insert into t (id,a) values (167,41);
+insert into t (id,a) values (167,42);
+insert into t (id,a) values (167,43);
+insert into t (id,a) values (167,44);
+insert into t (id,a) values (167,45);
+insert into t (id,a) values (167,46);
+insert into t (id,a) values (167,47);
+insert into t (id,a) values (167,48);
+insert into t (id,a) values (167,49);
+insert into t (id,a) values (167,50);
+insert into t (id,a) values (167,51);
+insert into t (id,a) values (167,52);
+insert into t (id,a) values (167,53);
+insert into t (id,a) values (167,54);
+insert into t (id,a) values (167,55);
+insert into t (id,a) values (167,56);
+insert into t (id,a) values (167,57);
+insert into t (id,a) values (167,58);
+insert into t (id,a) values (167,59);
+insert into t (id,a) values (167,60);
+insert into t (id,a) values (167,61);
+insert into t (id,a) values (167,62);
+insert into t (id,a) values (167,63);
+insert into t (id,a) values (167,64);
+insert into t (id,a) values (167,65);
+insert into t (id,a) values (167,66);
+insert into t (id,a) values (167,67);
+insert into t (id,a) values (167,68);
+insert into t (id,a) values (167,69);
+insert into t (id,a) values (167,70);
+insert into t (id,a) values (167,71);
+insert into t (id,a) values (167,72);
+insert into t (id,a) values (167,73);
+insert into t (id,a) values (167,74);
+insert into t (id,a) values (167,75);
+insert into t (id,a) values (167,76);
+insert into t (id,a) values (167,77);
+insert into t (id,a) values (167,78);
+insert into t (id,a) values (167,79);
+insert into t (id,a) values (167,80);
+insert into t (id,a) values (167,81);
+insert into t (id,a) values (167,82);
+insert into t (id,a) values (167,83);
+insert into t (id,a) values (167,84);
+insert into t (id,a) values (167,85);
+insert into t (id,a) values (167,86);
+insert into t (id,a) values (167,87);
+insert into t (id,a) values (167,88);
+insert into t (id,a) values (167,89);
+insert into t (id,a) values (167,90);
+insert into t (id,a) values (167,91);
+insert into t (id,a) values (167,92);
+insert into t (id,a) values (167,93);
+insert into t (id,a) values (167,94);
+insert into t (id,a) values (167,95);
+insert into t (id,a) values (167,96);
+insert into t (id,a) values (167,97);
+insert into t (id,a) values (167,98);
+insert into t (id,a) values (167,99);
+insert into t (id,a) values (168,0);
+insert into t (id,a) values (168,1);
+insert into t (id,a) values (168,2);
+insert into t (id,a) values (168,3);
+insert into t (id,a) values (168,4);
+insert into t (id,a) values (168,5);
+insert into t (id,a) values (168,6);
+insert into t (id,a) values (168,7);
+insert into t (id,a) values (168,8);
+insert into t (id,a) values (168,9);
+insert into t (id,a) values (168,10);
+insert into t (id,a) values (168,11);
+insert into t (id,a) values (168,12);
+insert into t (id,a) values (168,13);
+insert into t (id,a) values (168,14);
+insert into t (id,a) values (168,15);
+insert into t (id,a) values (168,16);
+insert into t (id,a) values (168,17);
+insert into t (id,a) values (168,18);
+insert into t (id,a) values (168,19);
+insert into t (id,a) values (168,20);
+insert into t (id,a) values (168,21);
+insert into t (id,a) values (168,22);
+insert into t (id,a) values (168,23);
+insert into t (id,a) values (168,24);
+insert into t (id,a) values (168,25);
+insert into t (id,a) values (168,26);
+insert into t (id,a) values (168,27);
+insert into t (id,a) values (168,28);
+insert into t (id,a) values (168,29);
+insert into t (id,a) values (168,30);
+insert into t (id,a) values (168,31);
+insert into t (id,a) values (168,32);
+insert into t (id,a) values (168,33);
+insert into t (id,a) values (168,34);
+insert into t (id,a) values (168,35);
+insert into t (id,a) values (168,36);
+insert into t (id,a) values (168,37);
+insert into t (id,a) values (168,38);
+insert into t (id,a) values (168,39);
+insert into t (id,a) values (168,40);
+insert into t (id,a) values (168,41);
+insert into t (id,a) values (168,42);
+insert into t (id,a) values (168,43);
+insert into t (id,a) values (168,44);
+insert into t (id,a) values (168,45);
+insert into t (id,a) values (168,46);
+insert into t (id,a) values (168,47);
+insert into t (id,a) values (168,48);
+insert into t (id,a) values (168,49);
+insert into t (id,a) values (168,50);
+insert into t (id,a) values (168,51);
+insert into t (id,a) values (168,52);
+insert into t (id,a) values (168,53);
+insert into t (id,a) values (168,54);
+insert into t (id,a) values (168,55);
+insert into t (id,a) values (168,56);
+insert into t (id,a) values (168,57);
+insert into t (id,a) values (168,58);
+insert into t (id,a) values (168,59);
+insert into t (id,a) values (168,60);
+insert into t (id,a) values (168,61);
+insert into t (id,a) values (168,62);
+insert into t (id,a) values (168,63);
+insert into t (id,a) values (168,64);
+insert into t (id,a) values (168,65);
+insert into t (id,a) values (168,66);
+insert into t (id,a) values (168,67);
+insert into t (id,a) values (168,68);
+insert into t (id,a) values (168,69);
+insert into t (id,a) values (168,70);
+insert into t (id,a) values (168,71);
+insert into t (id,a) values (168,72);
+insert into t (id,a) values (168,73);
+insert into t (id,a) values (168,74);
+insert into t (id,a) values (168,75);
+insert into t (id,a) values (168,76);
+insert into t (id,a) values (168,77);
+insert into t (id,a) values (168,78);
+insert into t (id,a) values (168,79);
+insert into t (id,a) values (168,80);
+insert into t (id,a) values (168,81);
+insert into t (id,a) values (168,82);
+insert into t (id,a) values (168,83);
+insert into t (id,a) values (168,84);
+insert into t (id,a) values (168,85);
+insert into t (id,a) values (168,86);
+insert into t (id,a) values (168,87);
+insert into t (id,a) values (168,88);
+insert into t (id,a) values (168,89);
+insert into t (id,a) values (168,90);
+insert into t (id,a) values (168,91);
+insert into t (id,a) values (168,92);
+insert into t (id,a) values (168,93);
+insert into t (id,a) values (168,94);
+insert into t (id,a) values (168,95);
+insert into t (id,a) values (168,96);
+insert into t (id,a) values (168,97);
+insert into t (id,a) values (168,98);
+insert into t (id,a) values (168,99);
+insert into t (id,a) values (169,0);
+insert into t (id,a) values (169,1);
+insert into t (id,a) values (169,2);
+insert into t (id,a) values (169,3);
+insert into t (id,a) values (169,4);
+insert into t (id,a) values (169,5);
+insert into t (id,a) values (169,6);
+insert into t (id,a) values (169,7);
+insert into t (id,a) values (169,8);
+insert into t (id,a) values (169,9);
+insert into t (id,a) values (169,10);
+insert into t (id,a) values (169,11);
+insert into t (id,a) values (169,12);
+insert into t (id,a) values (169,13);
+insert into t (id,a) values (169,14);
+insert into t (id,a) values (169,15);
+insert into t (id,a) values (169,16);
+insert into t (id,a) values (169,17);
+insert into t (id,a) values (169,18);
+insert into t (id,a) values (169,19);
+insert into t (id,a) values (169,20);
+insert into t (id,a) values (169,21);
+insert into t (id,a) values (169,22);
+insert into t (id,a) values (169,23);
+insert into t (id,a) values (169,24);
+insert into t (id,a) values (169,25);
+insert into t (id,a) values (169,26);
+insert into t (id,a) values (169,27);
+insert into t (id,a) values (169,28);
+insert into t (id,a) values (169,29);
+insert into t (id,a) values (169,30);
+insert into t (id,a) values (169,31);
+insert into t (id,a) values (169,32);
+insert into t (id,a) values (169,33);
+insert into t (id,a) values (169,34);
+insert into t (id,a) values (169,35);
+insert into t (id,a) values (169,36);
+insert into t (id,a) values (169,37);
+insert into t (id,a) values (169,38);
+insert into t (id,a) values (169,39);
+insert into t (id,a) values (169,40);
+insert into t (id,a) values (169,41);
+insert into t (id,a) values (169,42);
+insert into t (id,a) values (169,43);
+insert into t (id,a) values (169,44);
+insert into t (id,a) values (169,45);
+insert into t (id,a) values (169,46);
+insert into t (id,a) values (169,47);
+insert into t (id,a) values (169,48);
+insert into t (id,a) values (169,49);
+insert into t (id,a) values (169,50);
+insert into t (id,a) values (169,51);
+insert into t (id,a) values (169,52);
+insert into t (id,a) values (169,53);
+insert into t (id,a) values (169,54);
+insert into t (id,a) values (169,55);
+insert into t (id,a) values (169,56);
+insert into t (id,a) values (169,57);
+insert into t (id,a) values (169,58);
+insert into t (id,a) values (169,59);
+insert into t (id,a) values (169,60);
+insert into t (id,a) values (169,61);
+insert into t (id,a) values (169,62);
+insert into t (id,a) values (169,63);
+insert into t (id,a) values (169,64);
+insert into t (id,a) values (169,65);
+insert into t (id,a) values (169,66);
+insert into t (id,a) values (169,67);
+insert into t (id,a) values (169,68);
+insert into t (id,a) values (169,69);
+insert into t (id,a) values (169,70);
+insert into t (id,a) values (169,71);
+insert into t (id,a) values (169,72);
+insert into t (id,a) values (169,73);
+insert into t (id,a) values (169,74);
+insert into t (id,a) values (169,75);
+insert into t (id,a) values (169,76);
+insert into t (id,a) values (169,77);
+insert into t (id,a) values (169,78);
+insert into t (id,a) values (169,79);
+insert into t (id,a) values (169,80);
+insert into t (id,a) values (169,81);
+insert into t (id,a) values (169,82);
+insert into t (id,a) values (169,83);
+insert into t (id,a) values (169,84);
+insert into t (id,a) values (169,85);
+insert into t (id,a) values (169,86);
+insert into t (id,a) values (169,87);
+insert into t (id,a) values (169,88);
+insert into t (id,a) values (169,89);
+insert into t (id,a) values (169,90);
+insert into t (id,a) values (169,91);
+insert into t (id,a) values (169,92);
+insert into t (id,a) values (169,93);
+insert into t (id,a) values (169,94);
+insert into t (id,a) values (169,95);
+insert into t (id,a) values (169,96);
+insert into t (id,a) values (169,97);
+insert into t (id,a) values (169,98);
+insert into t (id,a) values (169,99);
+insert into t (id,a) values (170,0);
+insert into t (id,a) values (170,1);
+insert into t (id,a) values (170,2);
+insert into t (id,a) values (170,3);
+insert into t (id,a) values (170,4);
+insert into t (id,a) values (170,5);
+insert into t (id,a) values (170,6);
+insert into t (id,a) values (170,7);
+insert into t (id,a) values (170,8);
+insert into t (id,a) values (170,9);
+insert into t (id,a) values (170,10);
+insert into t (id,a) values (170,11);
+insert into t (id,a) values (170,12);
+insert into t (id,a) values (170,13);
+insert into t (id,a) values (170,14);
+insert into t (id,a) values (170,15);
+insert into t (id,a) values (170,16);
+insert into t (id,a) values (170,17);
+insert into t (id,a) values (170,18);
+insert into t (id,a) values (170,19);
+insert into t (id,a) values (170,20);
+insert into t (id,a) values (170,21);
+insert into t (id,a) values (170,22);
+insert into t (id,a) values (170,23);
+insert into t (id,a) values (170,24);
+insert into t (id,a) values (170,25);
+insert into t (id,a) values (170,26);
+insert into t (id,a) values (170,27);
+insert into t (id,a) values (170,28);
+insert into t (id,a) values (170,29);
+insert into t (id,a) values (170,30);
+insert into t (id,a) values (170,31);
+insert into t (id,a) values (170,32);
+insert into t (id,a) values (170,33);
+insert into t (id,a) values (170,34);
+insert into t (id,a) values (170,35);
+insert into t (id,a) values (170,36);
+insert into t (id,a) values (170,37);
+insert into t (id,a) values (170,38);
+insert into t (id,a) values (170,39);
+insert into t (id,a) values (170,40);
+insert into t (id,a) values (170,41);
+insert into t (id,a) values (170,42);
+insert into t (id,a) values (170,43);
+insert into t (id,a) values (170,44);
+insert into t (id,a) values (170,45);
+insert into t (id,a) values (170,46);
+insert into t (id,a) values (170,47);
+insert into t (id,a) values (170,48);
+insert into t (id,a) values (170,49);
+insert into t (id,a) values (170,50);
+insert into t (id,a) values (170,51);
+insert into t (id,a) values (170,52);
+insert into t (id,a) values (170,53);
+insert into t (id,a) values (170,54);
+insert into t (id,a) values (170,55);
+insert into t (id,a) values (170,56);
+insert into t (id,a) values (170,57);
+insert into t (id,a) values (170,58);
+insert into t (id,a) values (170,59);
+insert into t (id,a) values (170,60);
+insert into t (id,a) values (170,61);
+insert into t (id,a) values (170,62);
+insert into t (id,a) values (170,63);
+insert into t (id,a) values (170,64);
+insert into t (id,a) values (170,65);
+insert into t (id,a) values (170,66);
+insert into t (id,a) values (170,67);
+insert into t (id,a) values (170,68);
+insert into t (id,a) values (170,69);
+insert into t (id,a) values (170,70);
+insert into t (id,a) values (170,71);
+insert into t (id,a) values (170,72);
+insert into t (id,a) values (170,73);
+insert into t (id,a) values (170,74);
+insert into t (id,a) values (170,75);
+insert into t (id,a) values (170,76);
+insert into t (id,a) values (170,77);
+insert into t (id,a) values (170,78);
+insert into t (id,a) values (170,79);
+insert into t (id,a) values (170,80);
+insert into t (id,a) values (170,81);
+insert into t (id,a) values (170,82);
+insert into t (id,a) values (170,83);
+insert into t (id,a) values (170,84);
+insert into t (id,a) values (170,85);
+insert into t (id,a) values (170,86);
+insert into t (id,a) values (170,87);
+insert into t (id,a) values (170,88);
+insert into t (id,a) values (170,89);
+insert into t (id,a) values (170,90);
+insert into t (id,a) values (170,91);
+insert into t (id,a) values (170,92);
+insert into t (id,a) values (170,93);
+insert into t (id,a) values (170,94);
+insert into t (id,a) values (170,95);
+insert into t (id,a) values (170,96);
+insert into t (id,a) values (170,97);
+insert into t (id,a) values (170,98);
+insert into t (id,a) values (170,99);
+insert into t (id,a) values (171,0);
+insert into t (id,a) values (171,1);
+insert into t (id,a) values (171,2);
+insert into t (id,a) values (171,3);
+insert into t (id,a) values (171,4);
+insert into t (id,a) values (171,5);
+insert into t (id,a) values (171,6);
+insert into t (id,a) values (171,7);
+insert into t (id,a) values (171,8);
+insert into t (id,a) values (171,9);
+insert into t (id,a) values (171,10);
+insert into t (id,a) values (171,11);
+insert into t (id,a) values (171,12);
+insert into t (id,a) values (171,13);
+insert into t (id,a) values (171,14);
+insert into t (id,a) values (171,15);
+insert into t (id,a) values (171,16);
+insert into t (id,a) values (171,17);
+insert into t (id,a) values (171,18);
+insert into t (id,a) values (171,19);
+insert into t (id,a) values (171,20);
+insert into t (id,a) values (171,21);
+insert into t (id,a) values (171,22);
+insert into t (id,a) values (171,23);
+insert into t (id,a) values (171,24);
+insert into t (id,a) values (171,25);
+insert into t (id,a) values (171,26);
+insert into t (id,a) values (171,27);
+insert into t (id,a) values (171,28);
+insert into t (id,a) values (171,29);
+insert into t (id,a) values (171,30);
+insert into t (id,a) values (171,31);
+insert into t (id,a) values (171,32);
+insert into t (id,a) values (171,33);
+insert into t (id,a) values (171,34);
+insert into t (id,a) values (171,35);
+insert into t (id,a) values (171,36);
+insert into t (id,a) values (171,37);
+insert into t (id,a) values (171,38);
+insert into t (id,a) values (171,39);
+insert into t (id,a) values (171,40);
+insert into t (id,a) values (171,41);
+insert into t (id,a) values (171,42);
+insert into t (id,a) values (171,43);
+insert into t (id,a) values (171,44);
+insert into t (id,a) values (171,45);
+insert into t (id,a) values (171,46);
+insert into t (id,a) values (171,47);
+insert into t (id,a) values (171,48);
+insert into t (id,a) values (171,49);
+insert into t (id,a) values (171,50);
+insert into t (id,a) values (171,51);
+insert into t (id,a) values (171,52);
+insert into t (id,a) values (171,53);
+insert into t (id,a) values (171,54);
+insert into t (id,a) values (171,55);
+insert into t (id,a) values (171,56);
+insert into t (id,a) values (171,57);
+insert into t (id,a) values (171,58);
+insert into t (id,a) values (171,59);
+insert into t (id,a) values (171,60);
+insert into t (id,a) values (171,61);
+insert into t (id,a) values (171,62);
+insert into t (id,a) values (171,63);
+insert into t (id,a) values (171,64);
+insert into t (id,a) values (171,65);
+insert into t (id,a) values (171,66);
+insert into t (id,a) values (171,67);
+insert into t (id,a) values (171,68);
+insert into t (id,a) values (171,69);
+insert into t (id,a) values (171,70);
+insert into t (id,a) values (171,71);
+insert into t (id,a) values (171,72);
+insert into t (id,a) values (171,73);
+insert into t (id,a) values (171,74);
+insert into t (id,a) values (171,75);
+insert into t (id,a) values (171,76);
+insert into t (id,a) values (171,77);
+insert into t (id,a) values (171,78);
+insert into t (id,a) values (171,79);
+insert into t (id,a) values (171,80);
+insert into t (id,a) values (171,81);
+insert into t (id,a) values (171,82);
+insert into t (id,a) values (171,83);
+insert into t (id,a) values (171,84);
+insert into t (id,a) values (171,85);
+insert into t (id,a) values (171,86);
+insert into t (id,a) values (171,87);
+insert into t (id,a) values (171,88);
+insert into t (id,a) values (171,89);
+insert into t (id,a) values (171,90);
+insert into t (id,a) values (171,91);
+insert into t (id,a) values (171,92);
+insert into t (id,a) values (171,93);
+insert into t (id,a) values (171,94);
+insert into t (id,a) values (171,95);
+insert into t (id,a) values (171,96);
+insert into t (id,a) values (171,97);
+insert into t (id,a) values (171,98);
+insert into t (id,a) values (171,99);
+insert into t (id,a) values (172,0);
+insert into t (id,a) values (172,1);
+insert into t (id,a) values (172,2);
+insert into t (id,a) values (172,3);
+insert into t (id,a) values (172,4);
+insert into t (id,a) values (172,5);
+insert into t (id,a) values (172,6);
+insert into t (id,a) values (172,7);
+insert into t (id,a) values (172,8);
+insert into t (id,a) values (172,9);
+insert into t (id,a) values (172,10);
+insert into t (id,a) values (172,11);
+insert into t (id,a) values (172,12);
+insert into t (id,a) values (172,13);
+insert into t (id,a) values (172,14);
+insert into t (id,a) values (172,15);
+insert into t (id,a) values (172,16);
+insert into t (id,a) values (172,17);
+insert into t (id,a) values (172,18);
+insert into t (id,a) values (172,19);
+insert into t (id,a) values (172,20);
+insert into t (id,a) values (172,21);
+insert into t (id,a) values (172,22);
+insert into t (id,a) values (172,23);
+insert into t (id,a) values (172,24);
+insert into t (id,a) values (172,25);
+insert into t (id,a) values (172,26);
+insert into t (id,a) values (172,27);
+insert into t (id,a) values (172,28);
+insert into t (id,a) values (172,29);
+insert into t (id,a) values (172,30);
+insert into t (id,a) values (172,31);
+insert into t (id,a) values (172,32);
+insert into t (id,a) values (172,33);
+insert into t (id,a) values (172,34);
+insert into t (id,a) values (172,35);
+insert into t (id,a) values (172,36);
+insert into t (id,a) values (172,37);
+insert into t (id,a) values (172,38);
+insert into t (id,a) values (172,39);
+insert into t (id,a) values (172,40);
+insert into t (id,a) values (172,41);
+insert into t (id,a) values (172,42);
+insert into t (id,a) values (172,43);
+insert into t (id,a) values (172,44);
+insert into t (id,a) values (172,45);
+insert into t (id,a) values (172,46);
+insert into t (id,a) values (172,47);
+insert into t (id,a) values (172,48);
+insert into t (id,a) values (172,49);
+insert into t (id,a) values (172,50);
+insert into t (id,a) values (172,51);
+insert into t (id,a) values (172,52);
+insert into t (id,a) values (172,53);
+insert into t (id,a) values (172,54);
+insert into t (id,a) values (172,55);
+insert into t (id,a) values (172,56);
+insert into t (id,a) values (172,57);
+insert into t (id,a) values (172,58);
+insert into t (id,a) values (172,59);
+insert into t (id,a) values (172,60);
+insert into t (id,a) values (172,61);
+insert into t (id,a) values (172,62);
+insert into t (id,a) values (172,63);
+insert into t (id,a) values (172,64);
+insert into t (id,a) values (172,65);
+insert into t (id,a) values (172,66);
+insert into t (id,a) values (172,67);
+insert into t (id,a) values (172,68);
+insert into t (id,a) values (172,69);
+insert into t (id,a) values (172,70);
+insert into t (id,a) values (172,71);
+insert into t (id,a) values (172,72);
+insert into t (id,a) values (172,73);
+insert into t (id,a) values (172,74);
+insert into t (id,a) values (172,75);
+insert into t (id,a) values (172,76);
+insert into t (id,a) values (172,77);
+insert into t (id,a) values (172,78);
+insert into t (id,a) values (172,79);
+insert into t (id,a) values (172,80);
+insert into t (id,a) values (172,81);
+insert into t (id,a) values (172,82);
+insert into t (id,a) values (172,83);
+insert into t (id,a) values (172,84);
+insert into t (id,a) values (172,85);
+insert into t (id,a) values (172,86);
+insert into t (id,a) values (172,87);
+insert into t (id,a) values (172,88);
+insert into t (id,a) values (172,89);
+insert into t (id,a) values (172,90);
+insert into t (id,a) values (172,91);
+insert into t (id,a) values (172,92);
+insert into t (id,a) values (172,93);
+insert into t (id,a) values (172,94);
+insert into t (id,a) values (172,95);
+insert into t (id,a) values (172,96);
+insert into t (id,a) values (172,97);
+insert into t (id,a) values (172,98);
+insert into t (id,a) values (172,99);
+insert into t (id,a) values (173,0);
+insert into t (id,a) values (173,1);
+insert into t (id,a) values (173,2);
+insert into t (id,a) values (173,3);
+insert into t (id,a) values (173,4);
+insert into t (id,a) values (173,5);
+insert into t (id,a) values (173,6);
+insert into t (id,a) values (173,7);
+insert into t (id,a) values (173,8);
+insert into t (id,a) values (173,9);
+insert into t (id,a) values (173,10);
+insert into t (id,a) values (173,11);
+insert into t (id,a) values (173,12);
+insert into t (id,a) values (173,13);
+insert into t (id,a) values (173,14);
+insert into t (id,a) values (173,15);
+insert into t (id,a) values (173,16);
+insert into t (id,a) values (173,17);
+insert into t (id,a) values (173,18);
+insert into t (id,a) values (173,19);
+insert into t (id,a) values (173,20);
+insert into t (id,a) values (173,21);
+insert into t (id,a) values (173,22);
+insert into t (id,a) values (173,23);
+insert into t (id,a) values (173,24);
+insert into t (id,a) values (173,25);
+insert into t (id,a) values (173,26);
+insert into t (id,a) values (173,27);
+insert into t (id,a) values (173,28);
+insert into t (id,a) values (173,29);
+insert into t (id,a) values (173,30);
+insert into t (id,a) values (173,31);
+insert into t (id,a) values (173,32);
+insert into t (id,a) values (173,33);
+insert into t (id,a) values (173,34);
+insert into t (id,a) values (173,35);
+insert into t (id,a) values (173,36);
+insert into t (id,a) values (173,37);
+insert into t (id,a) values (173,38);
+insert into t (id,a) values (173,39);
+insert into t (id,a) values (173,40);
+insert into t (id,a) values (173,41);
+insert into t (id,a) values (173,42);
+insert into t (id,a) values (173,43);
+insert into t (id,a) values (173,44);
+insert into t (id,a) values (173,45);
+insert into t (id,a) values (173,46);
+insert into t (id,a) values (173,47);
+insert into t (id,a) values (173,48);
+insert into t (id,a) values (173,49);
+insert into t (id,a) values (173,50);
+insert into t (id,a) values (173,51);
+insert into t (id,a) values (173,52);
+insert into t (id,a) values (173,53);
+insert into t (id,a) values (173,54);
+insert into t (id,a) values (173,55);
+insert into t (id,a) values (173,56);
+insert into t (id,a) values (173,57);
+insert into t (id,a) values (173,58);
+insert into t (id,a) values (173,59);
+insert into t (id,a) values (173,60);
+insert into t (id,a) values (173,61);
+insert into t (id,a) values (173,62);
+insert into t (id,a) values (173,63);
+insert into t (id,a) values (173,64);
+insert into t (id,a) values (173,65);
+insert into t (id,a) values (173,66);
+insert into t (id,a) values (173,67);
+insert into t (id,a) values (173,68);
+insert into t (id,a) values (173,69);
+insert into t (id,a) values (173,70);
+insert into t (id,a) values (173,71);
+insert into t (id,a) values (173,72);
+insert into t (id,a) values (173,73);
+insert into t (id,a) values (173,74);
+insert into t (id,a) values (173,75);
+insert into t (id,a) values (173,76);
+insert into t (id,a) values (173,77);
+insert into t (id,a) values (173,78);
+insert into t (id,a) values (173,79);
+insert into t (id,a) values (173,80);
+insert into t (id,a) values (173,81);
+insert into t (id,a) values (173,82);
+insert into t (id,a) values (173,83);
+insert into t (id,a) values (173,84);
+insert into t (id,a) values (173,85);
+insert into t (id,a) values (173,86);
+insert into t (id,a) values (173,87);
+insert into t (id,a) values (173,88);
+insert into t (id,a) values (173,89);
+insert into t (id,a) values (173,90);
+insert into t (id,a) values (173,91);
+insert into t (id,a) values (173,92);
+insert into t (id,a) values (173,93);
+insert into t (id,a) values (173,94);
+insert into t (id,a) values (173,95);
+insert into t (id,a) values (173,96);
+insert into t (id,a) values (173,97);
+insert into t (id,a) values (173,98);
+insert into t (id,a) values (173,99);
+insert into t (id,a) values (174,0);
+insert into t (id,a) values (174,1);
+insert into t (id,a) values (174,2);
+insert into t (id,a) values (174,3);
+insert into t (id,a) values (174,4);
+insert into t (id,a) values (174,5);
+insert into t (id,a) values (174,6);
+insert into t (id,a) values (174,7);
+insert into t (id,a) values (174,8);
+insert into t (id,a) values (174,9);
+insert into t (id,a) values (174,10);
+insert into t (id,a) values (174,11);
+insert into t (id,a) values (174,12);
+insert into t (id,a) values (174,13);
+insert into t (id,a) values (174,14);
+insert into t (id,a) values (174,15);
+insert into t (id,a) values (174,16);
+insert into t (id,a) values (174,17);
+insert into t (id,a) values (174,18);
+insert into t (id,a) values (174,19);
+insert into t (id,a) values (174,20);
+insert into t (id,a) values (174,21);
+insert into t (id,a) values (174,22);
+insert into t (id,a) values (174,23);
+insert into t (id,a) values (174,24);
+insert into t (id,a) values (174,25);
+insert into t (id,a) values (174,26);
+insert into t (id,a) values (174,27);
+insert into t (id,a) values (174,28);
+insert into t (id,a) values (174,29);
+insert into t (id,a) values (174,30);
+insert into t (id,a) values (174,31);
+insert into t (id,a) values (174,32);
+insert into t (id,a) values (174,33);
+insert into t (id,a) values (174,34);
+insert into t (id,a) values (174,35);
+insert into t (id,a) values (174,36);
+insert into t (id,a) values (174,37);
+insert into t (id,a) values (174,38);
+insert into t (id,a) values (174,39);
+insert into t (id,a) values (174,40);
+insert into t (id,a) values (174,41);
+insert into t (id,a) values (174,42);
+insert into t (id,a) values (174,43);
+insert into t (id,a) values (174,44);
+insert into t (id,a) values (174,45);
+insert into t (id,a) values (174,46);
+insert into t (id,a) values (174,47);
+insert into t (id,a) values (174,48);
+insert into t (id,a) values (174,49);
+insert into t (id,a) values (174,50);
+insert into t (id,a) values (174,51);
+insert into t (id,a) values (174,52);
+insert into t (id,a) values (174,53);
+insert into t (id,a) values (174,54);
+insert into t (id,a) values (174,55);
+insert into t (id,a) values (174,56);
+insert into t (id,a) values (174,57);
+insert into t (id,a) values (174,58);
+insert into t (id,a) values (174,59);
+insert into t (id,a) values (174,60);
+insert into t (id,a) values (174,61);
+insert into t (id,a) values (174,62);
+insert into t (id,a) values (174,63);
+insert into t (id,a) values (174,64);
+insert into t (id,a) values (174,65);
+insert into t (id,a) values (174,66);
+insert into t (id,a) values (174,67);
+insert into t (id,a) values (174,68);
+insert into t (id,a) values (174,69);
+insert into t (id,a) values (174,70);
+insert into t (id,a) values (174,71);
+insert into t (id,a) values (174,72);
+insert into t (id,a) values (174,73);
+insert into t (id,a) values (174,74);
+insert into t (id,a) values (174,75);
+insert into t (id,a) values (174,76);
+insert into t (id,a) values (174,77);
+insert into t (id,a) values (174,78);
+insert into t (id,a) values (174,79);
+insert into t (id,a) values (174,80);
+insert into t (id,a) values (174,81);
+insert into t (id,a) values (174,82);
+insert into t (id,a) values (174,83);
+insert into t (id,a) values (174,84);
+insert into t (id,a) values (174,85);
+insert into t (id,a) values (174,86);
+insert into t (id,a) values (174,87);
+insert into t (id,a) values (174,88);
+insert into t (id,a) values (174,89);
+insert into t (id,a) values (174,90);
+insert into t (id,a) values (174,91);
+insert into t (id,a) values (174,92);
+insert into t (id,a) values (174,93);
+insert into t (id,a) values (174,94);
+insert into t (id,a) values (174,95);
+insert into t (id,a) values (174,96);
+insert into t (id,a) values (174,97);
+insert into t (id,a) values (174,98);
+insert into t (id,a) values (174,99);
+insert into t (id,a) values (175,0);
+insert into t (id,a) values (175,1);
+insert into t (id,a) values (175,2);
+insert into t (id,a) values (175,3);
+insert into t (id,a) values (175,4);
+insert into t (id,a) values (175,5);
+insert into t (id,a) values (175,6);
+insert into t (id,a) values (175,7);
+insert into t (id,a) values (175,8);
+insert into t (id,a) values (175,9);
+insert into t (id,a) values (175,10);
+insert into t (id,a) values (175,11);
+insert into t (id,a) values (175,12);
+insert into t (id,a) values (175,13);
+insert into t (id,a) values (175,14);
+insert into t (id,a) values (175,15);
+insert into t (id,a) values (175,16);
+insert into t (id,a) values (175,17);
+insert into t (id,a) values (175,18);
+insert into t (id,a) values (175,19);
+insert into t (id,a) values (175,20);
+insert into t (id,a) values (175,21);
+insert into t (id,a) values (175,22);
+insert into t (id,a) values (175,23);
+insert into t (id,a) values (175,24);
+insert into t (id,a) values (175,25);
+insert into t (id,a) values (175,26);
+insert into t (id,a) values (175,27);
+insert into t (id,a) values (175,28);
+insert into t (id,a) values (175,29);
+insert into t (id,a) values (175,30);
+insert into t (id,a) values (175,31);
+insert into t (id,a) values (175,32);
+insert into t (id,a) values (175,33);
+insert into t (id,a) values (175,34);
+insert into t (id,a) values (175,35);
+insert into t (id,a) values (175,36);
+insert into t (id,a) values (175,37);
+insert into t (id,a) values (175,38);
+insert into t (id,a) values (175,39);
+insert into t (id,a) values (175,40);
+insert into t (id,a) values (175,41);
+insert into t (id,a) values (175,42);
+insert into t (id,a) values (175,43);
+insert into t (id,a) values (175,44);
+insert into t (id,a) values (175,45);
+insert into t (id,a) values (175,46);
+insert into t (id,a) values (175,47);
+insert into t (id,a) values (175,48);
+insert into t (id,a) values (175,49);
+insert into t (id,a) values (175,50);
+insert into t (id,a) values (175,51);
+insert into t (id,a) values (175,52);
+insert into t (id,a) values (175,53);
+insert into t (id,a) values (175,54);
+insert into t (id,a) values (175,55);
+insert into t (id,a) values (175,56);
+insert into t (id,a) values (175,57);
+insert into t (id,a) values (175,58);
+insert into t (id,a) values (175,59);
+insert into t (id,a) values (175,60);
+insert into t (id,a) values (175,61);
+insert into t (id,a) values (175,62);
+insert into t (id,a) values (175,63);
+insert into t (id,a) values (175,64);
+insert into t (id,a) values (175,65);
+insert into t (id,a) values (175,66);
+insert into t (id,a) values (175,67);
+insert into t (id,a) values (175,68);
+insert into t (id,a) values (175,69);
+insert into t (id,a) values (175,70);
+insert into t (id,a) values (175,71);
+insert into t (id,a) values (175,72);
+insert into t (id,a) values (175,73);
+insert into t (id,a) values (175,74);
+insert into t (id,a) values (175,75);
+insert into t (id,a) values (175,76);
+insert into t (id,a) values (175,77);
+insert into t (id,a) values (175,78);
+insert into t (id,a) values (175,79);
+insert into t (id,a) values (175,80);
+insert into t (id,a) values (175,81);
+insert into t (id,a) values (175,82);
+insert into t (id,a) values (175,83);
+insert into t (id,a) values (175,84);
+insert into t (id,a) values (175,85);
+insert into t (id,a) values (175,86);
+insert into t (id,a) values (175,87);
+insert into t (id,a) values (175,88);
+insert into t (id,a) values (175,89);
+insert into t (id,a) values (175,90);
+insert into t (id,a) values (175,91);
+insert into t (id,a) values (175,92);
+insert into t (id,a) values (175,93);
+insert into t (id,a) values (175,94);
+insert into t (id,a) values (175,95);
+insert into t (id,a) values (175,96);
+insert into t (id,a) values (175,97);
+insert into t (id,a) values (175,98);
+insert into t (id,a) values (175,99);
+insert into t (id,a) values (176,0);
+insert into t (id,a) values (176,1);
+insert into t (id,a) values (176,2);
+insert into t (id,a) values (176,3);
+insert into t (id,a) values (176,4);
+insert into t (id,a) values (176,5);
+insert into t (id,a) values (176,6);
+insert into t (id,a) values (176,7);
+insert into t (id,a) values (176,8);
+insert into t (id,a) values (176,9);
+insert into t (id,a) values (176,10);
+insert into t (id,a) values (176,11);
+insert into t (id,a) values (176,12);
+insert into t (id,a) values (176,13);
+insert into t (id,a) values (176,14);
+insert into t (id,a) values (176,15);
+insert into t (id,a) values (176,16);
+insert into t (id,a) values (176,17);
+insert into t (id,a) values (176,18);
+insert into t (id,a) values (176,19);
+insert into t (id,a) values (176,20);
+insert into t (id,a) values (176,21);
+insert into t (id,a) values (176,22);
+insert into t (id,a) values (176,23);
+insert into t (id,a) values (176,24);
+insert into t (id,a) values (176,25);
+insert into t (id,a) values (176,26);
+insert into t (id,a) values (176,27);
+insert into t (id,a) values (176,28);
+insert into t (id,a) values (176,29);
+insert into t (id,a) values (176,30);
+insert into t (id,a) values (176,31);
+insert into t (id,a) values (176,32);
+insert into t (id,a) values (176,33);
+insert into t (id,a) values (176,34);
+insert into t (id,a) values (176,35);
+insert into t (id,a) values (176,36);
+insert into t (id,a) values (176,37);
+insert into t (id,a) values (176,38);
+insert into t (id,a) values (176,39);
+insert into t (id,a) values (176,40);
+insert into t (id,a) values (176,41);
+insert into t (id,a) values (176,42);
+insert into t (id,a) values (176,43);
+insert into t (id,a) values (176,44);
+insert into t (id,a) values (176,45);
+insert into t (id,a) values (176,46);
+insert into t (id,a) values (176,47);
+insert into t (id,a) values (176,48);
+insert into t (id,a) values (176,49);
+insert into t (id,a) values (176,50);
+insert into t (id,a) values (176,51);
+insert into t (id,a) values (176,52);
+insert into t (id,a) values (176,53);
+insert into t (id,a) values (176,54);
+insert into t (id,a) values (176,55);
+insert into t (id,a) values (176,56);
+insert into t (id,a) values (176,57);
+insert into t (id,a) values (176,58);
+insert into t (id,a) values (176,59);
+insert into t (id,a) values (176,60);
+insert into t (id,a) values (176,61);
+insert into t (id,a) values (176,62);
+insert into t (id,a) values (176,63);
+insert into t (id,a) values (176,64);
+insert into t (id,a) values (176,65);
+insert into t (id,a) values (176,66);
+insert into t (id,a) values (176,67);
+insert into t (id,a) values (176,68);
+insert into t (id,a) values (176,69);
+insert into t (id,a) values (176,70);
+insert into t (id,a) values (176,71);
+insert into t (id,a) values (176,72);
+insert into t (id,a) values (176,73);
+insert into t (id,a) values (176,74);
+insert into t (id,a) values (176,75);
+insert into t (id,a) values (176,76);
+insert into t (id,a) values (176,77);
+insert into t (id,a) values (176,78);
+insert into t (id,a) values (176,79);
+insert into t (id,a) values (176,80);
+insert into t (id,a) values (176,81);
+insert into t (id,a) values (176,82);
+insert into t (id,a) values (176,83);
+insert into t (id,a) values (176,84);
+insert into t (id,a) values (176,85);
+insert into t (id,a) values (176,86);
+insert into t (id,a) values (176,87);
+insert into t (id,a) values (176,88);
+insert into t (id,a) values (176,89);
+insert into t (id,a) values (176,90);
+insert into t (id,a) values (176,91);
+insert into t (id,a) values (176,92);
+insert into t (id,a) values (176,93);
+insert into t (id,a) values (176,94);
+insert into t (id,a) values (176,95);
+insert into t (id,a) values (176,96);
+insert into t (id,a) values (176,97);
+insert into t (id,a) values (176,98);
+insert into t (id,a) values (176,99);
+insert into t (id,a) values (177,0);
+insert into t (id,a) values (177,1);
+insert into t (id,a) values (177,2);
+insert into t (id,a) values (177,3);
+insert into t (id,a) values (177,4);
+insert into t (id,a) values (177,5);
+insert into t (id,a) values (177,6);
+insert into t (id,a) values (177,7);
+insert into t (id,a) values (177,8);
+insert into t (id,a) values (177,9);
+insert into t (id,a) values (177,10);
+insert into t (id,a) values (177,11);
+insert into t (id,a) values (177,12);
+insert into t (id,a) values (177,13);
+insert into t (id,a) values (177,14);
+insert into t (id,a) values (177,15);
+insert into t (id,a) values (177,16);
+insert into t (id,a) values (177,17);
+insert into t (id,a) values (177,18);
+insert into t (id,a) values (177,19);
+insert into t (id,a) values (177,20);
+insert into t (id,a) values (177,21);
+insert into t (id,a) values (177,22);
+insert into t (id,a) values (177,23);
+insert into t (id,a) values (177,24);
+insert into t (id,a) values (177,25);
+insert into t (id,a) values (177,26);
+insert into t (id,a) values (177,27);
+insert into t (id,a) values (177,28);
+insert into t (id,a) values (177,29);
+insert into t (id,a) values (177,30);
+insert into t (id,a) values (177,31);
+insert into t (id,a) values (177,32);
+insert into t (id,a) values (177,33);
+insert into t (id,a) values (177,34);
+insert into t (id,a) values (177,35);
+insert into t (id,a) values (177,36);
+insert into t (id,a) values (177,37);
+insert into t (id,a) values (177,38);
+insert into t (id,a) values (177,39);
+insert into t (id,a) values (177,40);
+insert into t (id,a) values (177,41);
+insert into t (id,a) values (177,42);
+insert into t (id,a) values (177,43);
+insert into t (id,a) values (177,44);
+insert into t (id,a) values (177,45);
+insert into t (id,a) values (177,46);
+insert into t (id,a) values (177,47);
+insert into t (id,a) values (177,48);
+insert into t (id,a) values (177,49);
+insert into t (id,a) values (177,50);
+insert into t (id,a) values (177,51);
+insert into t (id,a) values (177,52);
+insert into t (id,a) values (177,53);
+insert into t (id,a) values (177,54);
+insert into t (id,a) values (177,55);
+insert into t (id,a) values (177,56);
+insert into t (id,a) values (177,57);
+insert into t (id,a) values (177,58);
+insert into t (id,a) values (177,59);
+insert into t (id,a) values (177,60);
+insert into t (id,a) values (177,61);
+insert into t (id,a) values (177,62);
+insert into t (id,a) values (177,63);
+insert into t (id,a) values (177,64);
+insert into t (id,a) values (177,65);
+insert into t (id,a) values (177,66);
+insert into t (id,a) values (177,67);
+insert into t (id,a) values (177,68);
+insert into t (id,a) values (177,69);
+insert into t (id,a) values (177,70);
+insert into t (id,a) values (177,71);
+insert into t (id,a) values (177,72);
+insert into t (id,a) values (177,73);
+insert into t (id,a) values (177,74);
+insert into t (id,a) values (177,75);
+insert into t (id,a) values (177,76);
+insert into t (id,a) values (177,77);
+insert into t (id,a) values (177,78);
+insert into t (id,a) values (177,79);
+insert into t (id,a) values (177,80);
+insert into t (id,a) values (177,81);
+insert into t (id,a) values (177,82);
+insert into t (id,a) values (177,83);
+insert into t (id,a) values (177,84);
+insert into t (id,a) values (177,85);
+insert into t (id,a) values (177,86);
+insert into t (id,a) values (177,87);
+insert into t (id,a) values (177,88);
+insert into t (id,a) values (177,89);
+insert into t (id,a) values (177,90);
+insert into t (id,a) values (177,91);
+insert into t (id,a) values (177,92);
+insert into t (id,a) values (177,93);
+insert into t (id,a) values (177,94);
+insert into t (id,a) values (177,95);
+insert into t (id,a) values (177,96);
+insert into t (id,a) values (177,97);
+insert into t (id,a) values (177,98);
+insert into t (id,a) values (177,99);
+insert into t (id,a) values (178,0);
+insert into t (id,a) values (178,1);
+insert into t (id,a) values (178,2);
+insert into t (id,a) values (178,3);
+insert into t (id,a) values (178,4);
+insert into t (id,a) values (178,5);
+insert into t (id,a) values (178,6);
+insert into t (id,a) values (178,7);
+insert into t (id,a) values (178,8);
+insert into t (id,a) values (178,9);
+insert into t (id,a) values (178,10);
+insert into t (id,a) values (178,11);
+insert into t (id,a) values (178,12);
+insert into t (id,a) values (178,13);
+insert into t (id,a) values (178,14);
+insert into t (id,a) values (178,15);
+insert into t (id,a) values (178,16);
+insert into t (id,a) values (178,17);
+insert into t (id,a) values (178,18);
+insert into t (id,a) values (178,19);
+insert into t (id,a) values (178,20);
+insert into t (id,a) values (178,21);
+insert into t (id,a) values (178,22);
+insert into t (id,a) values (178,23);
+insert into t (id,a) values (178,24);
+insert into t (id,a) values (178,25);
+insert into t (id,a) values (178,26);
+insert into t (id,a) values (178,27);
+insert into t (id,a) values (178,28);
+insert into t (id,a) values (178,29);
+insert into t (id,a) values (178,30);
+insert into t (id,a) values (178,31);
+insert into t (id,a) values (178,32);
+insert into t (id,a) values (178,33);
+insert into t (id,a) values (178,34);
+insert into t (id,a) values (178,35);
+insert into t (id,a) values (178,36);
+insert into t (id,a) values (178,37);
+insert into t (id,a) values (178,38);
+insert into t (id,a) values (178,39);
+insert into t (id,a) values (178,40);
+insert into t (id,a) values (178,41);
+insert into t (id,a) values (178,42);
+insert into t (id,a) values (178,43);
+insert into t (id,a) values (178,44);
+insert into t (id,a) values (178,45);
+insert into t (id,a) values (178,46);
+insert into t (id,a) values (178,47);
+insert into t (id,a) values (178,48);
+insert into t (id,a) values (178,49);
+insert into t (id,a) values (178,50);
+insert into t (id,a) values (178,51);
+insert into t (id,a) values (178,52);
+insert into t (id,a) values (178,53);
+insert into t (id,a) values (178,54);
+insert into t (id,a) values (178,55);
+insert into t (id,a) values (178,56);
+insert into t (id,a) values (178,57);
+insert into t (id,a) values (178,58);
+insert into t (id,a) values (178,59);
+insert into t (id,a) values (178,60);
+insert into t (id,a) values (178,61);
+insert into t (id,a) values (178,62);
+insert into t (id,a) values (178,63);
+insert into t (id,a) values (178,64);
+insert into t (id,a) values (178,65);
+insert into t (id,a) values (178,66);
+insert into t (id,a) values (178,67);
+insert into t (id,a) values (178,68);
+insert into t (id,a) values (178,69);
+insert into t (id,a) values (178,70);
+insert into t (id,a) values (178,71);
+insert into t (id,a) values (178,72);
+insert into t (id,a) values (178,73);
+insert into t (id,a) values (178,74);
+insert into t (id,a) values (178,75);
+insert into t (id,a) values (178,76);
+insert into t (id,a) values (178,77);
+insert into t (id,a) values (178,78);
+insert into t (id,a) values (178,79);
+insert into t (id,a) values (178,80);
+insert into t (id,a) values (178,81);
+insert into t (id,a) values (178,82);
+insert into t (id,a) values (178,83);
+insert into t (id,a) values (178,84);
+insert into t (id,a) values (178,85);
+insert into t (id,a) values (178,86);
+insert into t (id,a) values (178,87);
+insert into t (id,a) values (178,88);
+insert into t (id,a) values (178,89);
+insert into t (id,a) values (178,90);
+insert into t (id,a) values (178,91);
+insert into t (id,a) values (178,92);
+insert into t (id,a) values (178,93);
+insert into t (id,a) values (178,94);
+insert into t (id,a) values (178,95);
+insert into t (id,a) values (178,96);
+insert into t (id,a) values (178,97);
+insert into t (id,a) values (178,98);
+insert into t (id,a) values (178,99);
+insert into t (id,a) values (179,0);
+insert into t (id,a) values (179,1);
+insert into t (id,a) values (179,2);
+insert into t (id,a) values (179,3);
+insert into t (id,a) values (179,4);
+insert into t (id,a) values (179,5);
+insert into t (id,a) values (179,6);
+insert into t (id,a) values (179,7);
+insert into t (id,a) values (179,8);
+insert into t (id,a) values (179,9);
+insert into t (id,a) values (179,10);
+insert into t (id,a) values (179,11);
+insert into t (id,a) values (179,12);
+insert into t (id,a) values (179,13);
+insert into t (id,a) values (179,14);
+insert into t (id,a) values (179,15);
+insert into t (id,a) values (179,16);
+insert into t (id,a) values (179,17);
+insert into t (id,a) values (179,18);
+insert into t (id,a) values (179,19);
+insert into t (id,a) values (179,20);
+insert into t (id,a) values (179,21);
+insert into t (id,a) values (179,22);
+insert into t (id,a) values (179,23);
+insert into t (id,a) values (179,24);
+insert into t (id,a) values (179,25);
+insert into t (id,a) values (179,26);
+insert into t (id,a) values (179,27);
+insert into t (id,a) values (179,28);
+insert into t (id,a) values (179,29);
+insert into t (id,a) values (179,30);
+insert into t (id,a) values (179,31);
+insert into t (id,a) values (179,32);
+insert into t (id,a) values (179,33);
+insert into t (id,a) values (179,34);
+insert into t (id,a) values (179,35);
+insert into t (id,a) values (179,36);
+insert into t (id,a) values (179,37);
+insert into t (id,a) values (179,38);
+insert into t (id,a) values (179,39);
+insert into t (id,a) values (179,40);
+insert into t (id,a) values (179,41);
+insert into t (id,a) values (179,42);
+insert into t (id,a) values (179,43);
+insert into t (id,a) values (179,44);
+insert into t (id,a) values (179,45);
+insert into t (id,a) values (179,46);
+insert into t (id,a) values (179,47);
+insert into t (id,a) values (179,48);
+insert into t (id,a) values (179,49);
+insert into t (id,a) values (179,50);
+insert into t (id,a) values (179,51);
+insert into t (id,a) values (179,52);
+insert into t (id,a) values (179,53);
+insert into t (id,a) values (179,54);
+insert into t (id,a) values (179,55);
+insert into t (id,a) values (179,56);
+insert into t (id,a) values (179,57);
+insert into t (id,a) values (179,58);
+insert into t (id,a) values (179,59);
+insert into t (id,a) values (179,60);
+insert into t (id,a) values (179,61);
+insert into t (id,a) values (179,62);
+insert into t (id,a) values (179,63);
+insert into t (id,a) values (179,64);
+insert into t (id,a) values (179,65);
+insert into t (id,a) values (179,66);
+insert into t (id,a) values (179,67);
+insert into t (id,a) values (179,68);
+insert into t (id,a) values (179,69);
+insert into t (id,a) values (179,70);
+insert into t (id,a) values (179,71);
+insert into t (id,a) values (179,72);
+insert into t (id,a) values (179,73);
+insert into t (id,a) values (179,74);
+insert into t (id,a) values (179,75);
+insert into t (id,a) values (179,76);
+insert into t (id,a) values (179,77);
+insert into t (id,a) values (179,78);
+insert into t (id,a) values (179,79);
+insert into t (id,a) values (179,80);
+insert into t (id,a) values (179,81);
+insert into t (id,a) values (179,82);
+insert into t (id,a) values (179,83);
+insert into t (id,a) values (179,84);
+insert into t (id,a) values (179,85);
+insert into t (id,a) values (179,86);
+insert into t (id,a) values (179,87);
+insert into t (id,a) values (179,88);
+insert into t (id,a) values (179,89);
+insert into t (id,a) values (179,90);
+insert into t (id,a) values (179,91);
+insert into t (id,a) values (179,92);
+insert into t (id,a) values (179,93);
+insert into t (id,a) values (179,94);
+insert into t (id,a) values (179,95);
+insert into t (id,a) values (179,96);
+insert into t (id,a) values (179,97);
+insert into t (id,a) values (179,98);
+insert into t (id,a) values (179,99);
+insert into t (id,a) values (180,0);
+insert into t (id,a) values (180,1);
+insert into t (id,a) values (180,2);
+insert into t (id,a) values (180,3);
+insert into t (id,a) values (180,4);
+insert into t (id,a) values (180,5);
+insert into t (id,a) values (180,6);
+insert into t (id,a) values (180,7);
+insert into t (id,a) values (180,8);
+insert into t (id,a) values (180,9);
+insert into t (id,a) values (180,10);
+insert into t (id,a) values (180,11);
+insert into t (id,a) values (180,12);
+insert into t (id,a) values (180,13);
+insert into t (id,a) values (180,14);
+insert into t (id,a) values (180,15);
+insert into t (id,a) values (180,16);
+insert into t (id,a) values (180,17);
+insert into t (id,a) values (180,18);
+insert into t (id,a) values (180,19);
+insert into t (id,a) values (180,20);
+insert into t (id,a) values (180,21);
+insert into t (id,a) values (180,22);
+insert into t (id,a) values (180,23);
+insert into t (id,a) values (180,24);
+insert into t (id,a) values (180,25);
+insert into t (id,a) values (180,26);
+insert into t (id,a) values (180,27);
+insert into t (id,a) values (180,28);
+insert into t (id,a) values (180,29);
+insert into t (id,a) values (180,30);
+insert into t (id,a) values (180,31);
+insert into t (id,a) values (180,32);
+insert into t (id,a) values (180,33);
+insert into t (id,a) values (180,34);
+insert into t (id,a) values (180,35);
+insert into t (id,a) values (180,36);
+insert into t (id,a) values (180,37);
+insert into t (id,a) values (180,38);
+insert into t (id,a) values (180,39);
+insert into t (id,a) values (180,40);
+insert into t (id,a) values (180,41);
+insert into t (id,a) values (180,42);
+insert into t (id,a) values (180,43);
+insert into t (id,a) values (180,44);
+insert into t (id,a) values (180,45);
+insert into t (id,a) values (180,46);
+insert into t (id,a) values (180,47);
+insert into t (id,a) values (180,48);
+insert into t (id,a) values (180,49);
+insert into t (id,a) values (180,50);
+insert into t (id,a) values (180,51);
+insert into t (id,a) values (180,52);
+insert into t (id,a) values (180,53);
+insert into t (id,a) values (180,54);
+insert into t (id,a) values (180,55);
+insert into t (id,a) values (180,56);
+insert into t (id,a) values (180,57);
+insert into t (id,a) values (180,58);
+insert into t (id,a) values (180,59);
+insert into t (id,a) values (180,60);
+insert into t (id,a) values (180,61);
+insert into t (id,a) values (180,62);
+insert into t (id,a) values (180,63);
+insert into t (id,a) values (180,64);
+insert into t (id,a) values (180,65);
+insert into t (id,a) values (180,66);
+insert into t (id,a) values (180,67);
+insert into t (id,a) values (180,68);
+insert into t (id,a) values (180,69);
+insert into t (id,a) values (180,70);
+insert into t (id,a) values (180,71);
+insert into t (id,a) values (180,72);
+insert into t (id,a) values (180,73);
+insert into t (id,a) values (180,74);
+insert into t (id,a) values (180,75);
+insert into t (id,a) values (180,76);
+insert into t (id,a) values (180,77);
+insert into t (id,a) values (180,78);
+insert into t (id,a) values (180,79);
+insert into t (id,a) values (180,80);
+insert into t (id,a) values (180,81);
+insert into t (id,a) values (180,82);
+insert into t (id,a) values (180,83);
+insert into t (id,a) values (180,84);
+insert into t (id,a) values (180,85);
+insert into t (id,a) values (180,86);
+insert into t (id,a) values (180,87);
+insert into t (id,a) values (180,88);
+insert into t (id,a) values (180,89);
+insert into t (id,a) values (180,90);
+insert into t (id,a) values (180,91);
+insert into t (id,a) values (180,92);
+insert into t (id,a) values (180,93);
+insert into t (id,a) values (180,94);
+insert into t (id,a) values (180,95);
+insert into t (id,a) values (180,96);
+insert into t (id,a) values (180,97);
+insert into t (id,a) values (180,98);
+insert into t (id,a) values (180,99);
+insert into t (id,a) values (181,0);
+insert into t (id,a) values (181,1);
+insert into t (id,a) values (181,2);
+insert into t (id,a) values (181,3);
+insert into t (id,a) values (181,4);
+insert into t (id,a) values (181,5);
+insert into t (id,a) values (181,6);
+insert into t (id,a) values (181,7);
+insert into t (id,a) values (181,8);
+insert into t (id,a) values (181,9);
+insert into t (id,a) values (181,10);
+insert into t (id,a) values (181,11);
+insert into t (id,a) values (181,12);
+insert into t (id,a) values (181,13);
+insert into t (id,a) values (181,14);
+insert into t (id,a) values (181,15);
+insert into t (id,a) values (181,16);
+insert into t (id,a) values (181,17);
+insert into t (id,a) values (181,18);
+insert into t (id,a) values (181,19);
+insert into t (id,a) values (181,20);
+insert into t (id,a) values (181,21);
+insert into t (id,a) values (181,22);
+insert into t (id,a) values (181,23);
+insert into t (id,a) values (181,24);
+insert into t (id,a) values (181,25);
+insert into t (id,a) values (181,26);
+insert into t (id,a) values (181,27);
+insert into t (id,a) values (181,28);
+insert into t (id,a) values (181,29);
+insert into t (id,a) values (181,30);
+insert into t (id,a) values (181,31);
+insert into t (id,a) values (181,32);
+insert into t (id,a) values (181,33);
+insert into t (id,a) values (181,34);
+insert into t (id,a) values (181,35);
+insert into t (id,a) values (181,36);
+insert into t (id,a) values (181,37);
+insert into t (id,a) values (181,38);
+insert into t (id,a) values (181,39);
+insert into t (id,a) values (181,40);
+insert into t (id,a) values (181,41);
+insert into t (id,a) values (181,42);
+insert into t (id,a) values (181,43);
+insert into t (id,a) values (181,44);
+insert into t (id,a) values (181,45);
+insert into t (id,a) values (181,46);
+insert into t (id,a) values (181,47);
+insert into t (id,a) values (181,48);
+insert into t (id,a) values (181,49);
+insert into t (id,a) values (181,50);
+insert into t (id,a) values (181,51);
+insert into t (id,a) values (181,52);
+insert into t (id,a) values (181,53);
+insert into t (id,a) values (181,54);
+insert into t (id,a) values (181,55);
+insert into t (id,a) values (181,56);
+insert into t (id,a) values (181,57);
+insert into t (id,a) values (181,58);
+insert into t (id,a) values (181,59);
+insert into t (id,a) values (181,60);
+insert into t (id,a) values (181,61);
+insert into t (id,a) values (181,62);
+insert into t (id,a) values (181,63);
+insert into t (id,a) values (181,64);
+insert into t (id,a) values (181,65);
+insert into t (id,a) values (181,66);
+insert into t (id,a) values (181,67);
+insert into t (id,a) values (181,68);
+insert into t (id,a) values (181,69);
+insert into t (id,a) values (181,70);
+insert into t (id,a) values (181,71);
+insert into t (id,a) values (181,72);
+insert into t (id,a) values (181,73);
+insert into t (id,a) values (181,74);
+insert into t (id,a) values (181,75);
+insert into t (id,a) values (181,76);
+insert into t (id,a) values (181,77);
+insert into t (id,a) values (181,78);
+insert into t (id,a) values (181,79);
+insert into t (id,a) values (181,80);
+insert into t (id,a) values (181,81);
+insert into t (id,a) values (181,82);
+insert into t (id,a) values (181,83);
+insert into t (id,a) values (181,84);
+insert into t (id,a) values (181,85);
+insert into t (id,a) values (181,86);
+insert into t (id,a) values (181,87);
+insert into t (id,a) values (181,88);
+insert into t (id,a) values (181,89);
+insert into t (id,a) values (181,90);
+insert into t (id,a) values (181,91);
+insert into t (id,a) values (181,92);
+insert into t (id,a) values (181,93);
+insert into t (id,a) values (181,94);
+insert into t (id,a) values (181,95);
+insert into t (id,a) values (181,96);
+insert into t (id,a) values (181,97);
+insert into t (id,a) values (181,98);
+insert into t (id,a) values (181,99);
+insert into t (id,a) values (182,0);
+insert into t (id,a) values (182,1);
+insert into t (id,a) values (182,2);
+insert into t (id,a) values (182,3);
+insert into t (id,a) values (182,4);
+insert into t (id,a) values (182,5);
+insert into t (id,a) values (182,6);
+insert into t (id,a) values (182,7);
+insert into t (id,a) values (182,8);
+insert into t (id,a) values (182,9);
+insert into t (id,a) values (182,10);
+insert into t (id,a) values (182,11);
+insert into t (id,a) values (182,12);
+insert into t (id,a) values (182,13);
+insert into t (id,a) values (182,14);
+insert into t (id,a) values (182,15);
+insert into t (id,a) values (182,16);
+insert into t (id,a) values (182,17);
+insert into t (id,a) values (182,18);
+insert into t (id,a) values (182,19);
+insert into t (id,a) values (182,20);
+insert into t (id,a) values (182,21);
+insert into t (id,a) values (182,22);
+insert into t (id,a) values (182,23);
+insert into t (id,a) values (182,24);
+insert into t (id,a) values (182,25);
+insert into t (id,a) values (182,26);
+insert into t (id,a) values (182,27);
+insert into t (id,a) values (182,28);
+insert into t (id,a) values (182,29);
+insert into t (id,a) values (182,30);
+insert into t (id,a) values (182,31);
+insert into t (id,a) values (182,32);
+insert into t (id,a) values (182,33);
+insert into t (id,a) values (182,34);
+insert into t (id,a) values (182,35);
+insert into t (id,a) values (182,36);
+insert into t (id,a) values (182,37);
+insert into t (id,a) values (182,38);
+insert into t (id,a) values (182,39);
+insert into t (id,a) values (182,40);
+insert into t (id,a) values (182,41);
+insert into t (id,a) values (182,42);
+insert into t (id,a) values (182,43);
+insert into t (id,a) values (182,44);
+insert into t (id,a) values (182,45);
+insert into t (id,a) values (182,46);
+insert into t (id,a) values (182,47);
+insert into t (id,a) values (182,48);
+insert into t (id,a) values (182,49);
+insert into t (id,a) values (182,50);
+insert into t (id,a) values (182,51);
+insert into t (id,a) values (182,52);
+insert into t (id,a) values (182,53);
+insert into t (id,a) values (182,54);
+insert into t (id,a) values (182,55);
+insert into t (id,a) values (182,56);
+insert into t (id,a) values (182,57);
+insert into t (id,a) values (182,58);
+insert into t (id,a) values (182,59);
+insert into t (id,a) values (182,60);
+insert into t (id,a) values (182,61);
+insert into t (id,a) values (182,62);
+insert into t (id,a) values (182,63);
+insert into t (id,a) values (182,64);
+insert into t (id,a) values (182,65);
+insert into t (id,a) values (182,66);
+insert into t (id,a) values (182,67);
+insert into t (id,a) values (182,68);
+insert into t (id,a) values (182,69);
+insert into t (id,a) values (182,70);
+insert into t (id,a) values (182,71);
+insert into t (id,a) values (182,72);
+insert into t (id,a) values (182,73);
+insert into t (id,a) values (182,74);
+insert into t (id,a) values (182,75);
+insert into t (id,a) values (182,76);
+insert into t (id,a) values (182,77);
+insert into t (id,a) values (182,78);
+insert into t (id,a) values (182,79);
+insert into t (id,a) values (182,80);
+insert into t (id,a) values (182,81);
+insert into t (id,a) values (182,82);
+insert into t (id,a) values (182,83);
+insert into t (id,a) values (182,84);
+insert into t (id,a) values (182,85);
+insert into t (id,a) values (182,86);
+insert into t (id,a) values (182,87);
+insert into t (id,a) values (182,88);
+insert into t (id,a) values (182,89);
+insert into t (id,a) values (182,90);
+insert into t (id,a) values (182,91);
+insert into t (id,a) values (182,92);
+insert into t (id,a) values (182,93);
+insert into t (id,a) values (182,94);
+insert into t (id,a) values (182,95);
+insert into t (id,a) values (182,96);
+insert into t (id,a) values (182,97);
+insert into t (id,a) values (182,98);
+insert into t (id,a) values (182,99);
+insert into t (id,a) values (183,0);
+insert into t (id,a) values (183,1);
+insert into t (id,a) values (183,2);
+insert into t (id,a) values (183,3);
+insert into t (id,a) values (183,4);
+insert into t (id,a) values (183,5);
+insert into t (id,a) values (183,6);
+insert into t (id,a) values (183,7);
+insert into t (id,a) values (183,8);
+insert into t (id,a) values (183,9);
+insert into t (id,a) values (183,10);
+insert into t (id,a) values (183,11);
+insert into t (id,a) values (183,12);
+insert into t (id,a) values (183,13);
+insert into t (id,a) values (183,14);
+insert into t (id,a) values (183,15);
+insert into t (id,a) values (183,16);
+insert into t (id,a) values (183,17);
+insert into t (id,a) values (183,18);
+insert into t (id,a) values (183,19);
+insert into t (id,a) values (183,20);
+insert into t (id,a) values (183,21);
+insert into t (id,a) values (183,22);
+insert into t (id,a) values (183,23);
+insert into t (id,a) values (183,24);
+insert into t (id,a) values (183,25);
+insert into t (id,a) values (183,26);
+insert into t (id,a) values (183,27);
+insert into t (id,a) values (183,28);
+insert into t (id,a) values (183,29);
+insert into t (id,a) values (183,30);
+insert into t (id,a) values (183,31);
+insert into t (id,a) values (183,32);
+insert into t (id,a) values (183,33);
+insert into t (id,a) values (183,34);
+insert into t (id,a) values (183,35);
+insert into t (id,a) values (183,36);
+insert into t (id,a) values (183,37);
+insert into t (id,a) values (183,38);
+insert into t (id,a) values (183,39);
+insert into t (id,a) values (183,40);
+insert into t (id,a) values (183,41);
+insert into t (id,a) values (183,42);
+insert into t (id,a) values (183,43);
+insert into t (id,a) values (183,44);
+insert into t (id,a) values (183,45);
+insert into t (id,a) values (183,46);
+insert into t (id,a) values (183,47);
+insert into t (id,a) values (183,48);
+insert into t (id,a) values (183,49);
+insert into t (id,a) values (183,50);
+insert into t (id,a) values (183,51);
+insert into t (id,a) values (183,52);
+insert into t (id,a) values (183,53);
+insert into t (id,a) values (183,54);
+insert into t (id,a) values (183,55);
+insert into t (id,a) values (183,56);
+insert into t (id,a) values (183,57);
+insert into t (id,a) values (183,58);
+insert into t (id,a) values (183,59);
+insert into t (id,a) values (183,60);
+insert into t (id,a) values (183,61);
+insert into t (id,a) values (183,62);
+insert into t (id,a) values (183,63);
+insert into t (id,a) values (183,64);
+insert into t (id,a) values (183,65);
+insert into t (id,a) values (183,66);
+insert into t (id,a) values (183,67);
+insert into t (id,a) values (183,68);
+insert into t (id,a) values (183,69);
+insert into t (id,a) values (183,70);
+insert into t (id,a) values (183,71);
+insert into t (id,a) values (183,72);
+insert into t (id,a) values (183,73);
+insert into t (id,a) values (183,74);
+insert into t (id,a) values (183,75);
+insert into t (id,a) values (183,76);
+insert into t (id,a) values (183,77);
+insert into t (id,a) values (183,78);
+insert into t (id,a) values (183,79);
+insert into t (id,a) values (183,80);
+insert into t (id,a) values (183,81);
+insert into t (id,a) values (183,82);
+insert into t (id,a) values (183,83);
+insert into t (id,a) values (183,84);
+insert into t (id,a) values (183,85);
+insert into t (id,a) values (183,86);
+insert into t (id,a) values (183,87);
+insert into t (id,a) values (183,88);
+insert into t (id,a) values (183,89);
+insert into t (id,a) values (183,90);
+insert into t (id,a) values (183,91);
+insert into t (id,a) values (183,92);
+insert into t (id,a) values (183,93);
+insert into t (id,a) values (183,94);
+insert into t (id,a) values (183,95);
+insert into t (id,a) values (183,96);
+insert into t (id,a) values (183,97);
+insert into t (id,a) values (183,98);
+insert into t (id,a) values (183,99);
+insert into t (id,a) values (184,0);
+insert into t (id,a) values (184,1);
+insert into t (id,a) values (184,2);
+insert into t (id,a) values (184,3);
+insert into t (id,a) values (184,4);
+insert into t (id,a) values (184,5);
+insert into t (id,a) values (184,6);
+insert into t (id,a) values (184,7);
+insert into t (id,a) values (184,8);
+insert into t (id,a) values (184,9);
+insert into t (id,a) values (184,10);
+insert into t (id,a) values (184,11);
+insert into t (id,a) values (184,12);
+insert into t (id,a) values (184,13);
+insert into t (id,a) values (184,14);
+insert into t (id,a) values (184,15);
+insert into t (id,a) values (184,16);
+insert into t (id,a) values (184,17);
+insert into t (id,a) values (184,18);
+insert into t (id,a) values (184,19);
+insert into t (id,a) values (184,20);
+insert into t (id,a) values (184,21);
+insert into t (id,a) values (184,22);
+insert into t (id,a) values (184,23);
+insert into t (id,a) values (184,24);
+insert into t (id,a) values (184,25);
+insert into t (id,a) values (184,26);
+insert into t (id,a) values (184,27);
+insert into t (id,a) values (184,28);
+insert into t (id,a) values (184,29);
+insert into t (id,a) values (184,30);
+insert into t (id,a) values (184,31);
+insert into t (id,a) values (184,32);
+insert into t (id,a) values (184,33);
+insert into t (id,a) values (184,34);
+insert into t (id,a) values (184,35);
+insert into t (id,a) values (184,36);
+insert into t (id,a) values (184,37);
+insert into t (id,a) values (184,38);
+insert into t (id,a) values (184,39);
+insert into t (id,a) values (184,40);
+insert into t (id,a) values (184,41);
+insert into t (id,a) values (184,42);
+insert into t (id,a) values (184,43);
+insert into t (id,a) values (184,44);
+insert into t (id,a) values (184,45);
+insert into t (id,a) values (184,46);
+insert into t (id,a) values (184,47);
+insert into t (id,a) values (184,48);
+insert into t (id,a) values (184,49);
+insert into t (id,a) values (184,50);
+insert into t (id,a) values (184,51);
+insert into t (id,a) values (184,52);
+insert into t (id,a) values (184,53);
+insert into t (id,a) values (184,54);
+insert into t (id,a) values (184,55);
+insert into t (id,a) values (184,56);
+insert into t (id,a) values (184,57);
+insert into t (id,a) values (184,58);
+insert into t (id,a) values (184,59);
+insert into t (id,a) values (184,60);
+insert into t (id,a) values (184,61);
+insert into t (id,a) values (184,62);
+insert into t (id,a) values (184,63);
+insert into t (id,a) values (184,64);
+insert into t (id,a) values (184,65);
+insert into t (id,a) values (184,66);
+insert into t (id,a) values (184,67);
+insert into t (id,a) values (184,68);
+insert into t (id,a) values (184,69);
+insert into t (id,a) values (184,70);
+insert into t (id,a) values (184,71);
+insert into t (id,a) values (184,72);
+insert into t (id,a) values (184,73);
+insert into t (id,a) values (184,74);
+insert into t (id,a) values (184,75);
+insert into t (id,a) values (184,76);
+insert into t (id,a) values (184,77);
+insert into t (id,a) values (184,78);
+insert into t (id,a) values (184,79);
+insert into t (id,a) values (184,80);
+insert into t (id,a) values (184,81);
+insert into t (id,a) values (184,82);
+insert into t (id,a) values (184,83);
+insert into t (id,a) values (184,84);
+insert into t (id,a) values (184,85);
+insert into t (id,a) values (184,86);
+insert into t (id,a) values (184,87);
+insert into t (id,a) values (184,88);
+insert into t (id,a) values (184,89);
+insert into t (id,a) values (184,90);
+insert into t (id,a) values (184,91);
+insert into t (id,a) values (184,92);
+insert into t (id,a) values (184,93);
+insert into t (id,a) values (184,94);
+insert into t (id,a) values (184,95);
+insert into t (id,a) values (184,96);
+insert into t (id,a) values (184,97);
+insert into t (id,a) values (184,98);
+insert into t (id,a) values (184,99);
+insert into t (id,a) values (185,0);
+insert into t (id,a) values (185,1);
+insert into t (id,a) values (185,2);
+insert into t (id,a) values (185,3);
+insert into t (id,a) values (185,4);
+insert into t (id,a) values (185,5);
+insert into t (id,a) values (185,6);
+insert into t (id,a) values (185,7);
+insert into t (id,a) values (185,8);
+insert into t (id,a) values (185,9);
+insert into t (id,a) values (185,10);
+insert into t (id,a) values (185,11);
+insert into t (id,a) values (185,12);
+insert into t (id,a) values (185,13);
+insert into t (id,a) values (185,14);
+insert into t (id,a) values (185,15);
+insert into t (id,a) values (185,16);
+insert into t (id,a) values (185,17);
+insert into t (id,a) values (185,18);
+insert into t (id,a) values (185,19);
+insert into t (id,a) values (185,20);
+insert into t (id,a) values (185,21);
+insert into t (id,a) values (185,22);
+insert into t (id,a) values (185,23);
+insert into t (id,a) values (185,24);
+insert into t (id,a) values (185,25);
+insert into t (id,a) values (185,26);
+insert into t (id,a) values (185,27);
+insert into t (id,a) values (185,28);
+insert into t (id,a) values (185,29);
+insert into t (id,a) values (185,30);
+insert into t (id,a) values (185,31);
+insert into t (id,a) values (185,32);
+insert into t (id,a) values (185,33);
+insert into t (id,a) values (185,34);
+insert into t (id,a) values (185,35);
+insert into t (id,a) values (185,36);
+insert into t (id,a) values (185,37);
+insert into t (id,a) values (185,38);
+insert into t (id,a) values (185,39);
+insert into t (id,a) values (185,40);
+insert into t (id,a) values (185,41);
+insert into t (id,a) values (185,42);
+insert into t (id,a) values (185,43);
+insert into t (id,a) values (185,44);
+insert into t (id,a) values (185,45);
+insert into t (id,a) values (185,46);
+insert into t (id,a) values (185,47);
+insert into t (id,a) values (185,48);
+insert into t (id,a) values (185,49);
+insert into t (id,a) values (185,50);
+insert into t (id,a) values (185,51);
+insert into t (id,a) values (185,52);
+insert into t (id,a) values (185,53);
+insert into t (id,a) values (185,54);
+insert into t (id,a) values (185,55);
+insert into t (id,a) values (185,56);
+insert into t (id,a) values (185,57);
+insert into t (id,a) values (185,58);
+insert into t (id,a) values (185,59);
+insert into t (id,a) values (185,60);
+insert into t (id,a) values (185,61);
+insert into t (id,a) values (185,62);
+insert into t (id,a) values (185,63);
+insert into t (id,a) values (185,64);
+insert into t (id,a) values (185,65);
+insert into t (id,a) values (185,66);
+insert into t (id,a) values (185,67);
+insert into t (id,a) values (185,68);
+insert into t (id,a) values (185,69);
+insert into t (id,a) values (185,70);
+insert into t (id,a) values (185,71);
+insert into t (id,a) values (185,72);
+insert into t (id,a) values (185,73);
+insert into t (id,a) values (185,74);
+insert into t (id,a) values (185,75);
+insert into t (id,a) values (185,76);
+insert into t (id,a) values (185,77);
+insert into t (id,a) values (185,78);
+insert into t (id,a) values (185,79);
+insert into t (id,a) values (185,80);
+insert into t (id,a) values (185,81);
+insert into t (id,a) values (185,82);
+insert into t (id,a) values (185,83);
+insert into t (id,a) values (185,84);
+insert into t (id,a) values (185,85);
+insert into t (id,a) values (185,86);
+insert into t (id,a) values (185,87);
+insert into t (id,a) values (185,88);
+insert into t (id,a) values (185,89);
+insert into t (id,a) values (185,90);
+insert into t (id,a) values (185,91);
+insert into t (id,a) values (185,92);
+insert into t (id,a) values (185,93);
+insert into t (id,a) values (185,94);
+insert into t (id,a) values (185,95);
+insert into t (id,a) values (185,96);
+insert into t (id,a) values (185,97);
+insert into t (id,a) values (185,98);
+insert into t (id,a) values (185,99);
+insert into t (id,a) values (186,0);
+insert into t (id,a) values (186,1);
+insert into t (id,a) values (186,2);
+insert into t (id,a) values (186,3);
+insert into t (id,a) values (186,4);
+insert into t (id,a) values (186,5);
+insert into t (id,a) values (186,6);
+insert into t (id,a) values (186,7);
+insert into t (id,a) values (186,8);
+insert into t (id,a) values (186,9);
+insert into t (id,a) values (186,10);
+insert into t (id,a) values (186,11);
+insert into t (id,a) values (186,12);
+insert into t (id,a) values (186,13);
+insert into t (id,a) values (186,14);
+insert into t (id,a) values (186,15);
+insert into t (id,a) values (186,16);
+insert into t (id,a) values (186,17);
+insert into t (id,a) values (186,18);
+insert into t (id,a) values (186,19);
+insert into t (id,a) values (186,20);
+insert into t (id,a) values (186,21);
+insert into t (id,a) values (186,22);
+insert into t (id,a) values (186,23);
+insert into t (id,a) values (186,24);
+insert into t (id,a) values (186,25);
+insert into t (id,a) values (186,26);
+insert into t (id,a) values (186,27);
+insert into t (id,a) values (186,28);
+insert into t (id,a) values (186,29);
+insert into t (id,a) values (186,30);
+insert into t (id,a) values (186,31);
+insert into t (id,a) values (186,32);
+insert into t (id,a) values (186,33);
+insert into t (id,a) values (186,34);
+insert into t (id,a) values (186,35);
+insert into t (id,a) values (186,36);
+insert into t (id,a) values (186,37);
+insert into t (id,a) values (186,38);
+insert into t (id,a) values (186,39);
+insert into t (id,a) values (186,40);
+insert into t (id,a) values (186,41);
+insert into t (id,a) values (186,42);
+insert into t (id,a) values (186,43);
+insert into t (id,a) values (186,44);
+insert into t (id,a) values (186,45);
+insert into t (id,a) values (186,46);
+insert into t (id,a) values (186,47);
+insert into t (id,a) values (186,48);
+insert into t (id,a) values (186,49);
+insert into t (id,a) values (186,50);
+insert into t (id,a) values (186,51);
+insert into t (id,a) values (186,52);
+insert into t (id,a) values (186,53);
+insert into t (id,a) values (186,54);
+insert into t (id,a) values (186,55);
+insert into t (id,a) values (186,56);
+insert into t (id,a) values (186,57);
+insert into t (id,a) values (186,58);
+insert into t (id,a) values (186,59);
+insert into t (id,a) values (186,60);
+insert into t (id,a) values (186,61);
+insert into t (id,a) values (186,62);
+insert into t (id,a) values (186,63);
+insert into t (id,a) values (186,64);
+insert into t (id,a) values (186,65);
+insert into t (id,a) values (186,66);
+insert into t (id,a) values (186,67);
+insert into t (id,a) values (186,68);
+insert into t (id,a) values (186,69);
+insert into t (id,a) values (186,70);
+insert into t (id,a) values (186,71);
+insert into t (id,a) values (186,72);
+insert into t (id,a) values (186,73);
+insert into t (id,a) values (186,74);
+insert into t (id,a) values (186,75);
+insert into t (id,a) values (186,76);
+insert into t (id,a) values (186,77);
+insert into t (id,a) values (186,78);
+insert into t (id,a) values (186,79);
+insert into t (id,a) values (186,80);
+insert into t (id,a) values (186,81);
+insert into t (id,a) values (186,82);
+insert into t (id,a) values (186,83);
+insert into t (id,a) values (186,84);
+insert into t (id,a) values (186,85);
+insert into t (id,a) values (186,86);
+insert into t (id,a) values (186,87);
+insert into t (id,a) values (186,88);
+insert into t (id,a) values (186,89);
+insert into t (id,a) values (186,90);
+insert into t (id,a) values (186,91);
+insert into t (id,a) values (186,92);
+insert into t (id,a) values (186,93);
+insert into t (id,a) values (186,94);
+insert into t (id,a) values (186,95);
+insert into t (id,a) values (186,96);
+insert into t (id,a) values (186,97);
+insert into t (id,a) values (186,98);
+insert into t (id,a) values (186,99);
+insert into t (id,a) values (187,0);
+insert into t (id,a) values (187,1);
+insert into t (id,a) values (187,2);
+insert into t (id,a) values (187,3);
+insert into t (id,a) values (187,4);
+insert into t (id,a) values (187,5);
+insert into t (id,a) values (187,6);
+insert into t (id,a) values (187,7);
+insert into t (id,a) values (187,8);
+insert into t (id,a) values (187,9);
+insert into t (id,a) values (187,10);
+insert into t (id,a) values (187,11);
+insert into t (id,a) values (187,12);
+insert into t (id,a) values (187,13);
+insert into t (id,a) values (187,14);
+insert into t (id,a) values (187,15);
+insert into t (id,a) values (187,16);
+insert into t (id,a) values (187,17);
+insert into t (id,a) values (187,18);
+insert into t (id,a) values (187,19);
+insert into t (id,a) values (187,20);
+insert into t (id,a) values (187,21);
+insert into t (id,a) values (187,22);
+insert into t (id,a) values (187,23);
+insert into t (id,a) values (187,24);
+insert into t (id,a) values (187,25);
+insert into t (id,a) values (187,26);
+insert into t (id,a) values (187,27);
+insert into t (id,a) values (187,28);
+insert into t (id,a) values (187,29);
+insert into t (id,a) values (187,30);
+insert into t (id,a) values (187,31);
+insert into t (id,a) values (187,32);
+insert into t (id,a) values (187,33);
+insert into t (id,a) values (187,34);
+insert into t (id,a) values (187,35);
+insert into t (id,a) values (187,36);
+insert into t (id,a) values (187,37);
+insert into t (id,a) values (187,38);
+insert into t (id,a) values (187,39);
+insert into t (id,a) values (187,40);
+insert into t (id,a) values (187,41);
+insert into t (id,a) values (187,42);
+insert into t (id,a) values (187,43);
+insert into t (id,a) values (187,44);
+insert into t (id,a) values (187,45);
+insert into t (id,a) values (187,46);
+insert into t (id,a) values (187,47);
+insert into t (id,a) values (187,48);
+insert into t (id,a) values (187,49);
+insert into t (id,a) values (187,50);
+insert into t (id,a) values (187,51);
+insert into t (id,a) values (187,52);
+insert into t (id,a) values (187,53);
+insert into t (id,a) values (187,54);
+insert into t (id,a) values (187,55);
+insert into t (id,a) values (187,56);
+insert into t (id,a) values (187,57);
+insert into t (id,a) values (187,58);
+insert into t (id,a) values (187,59);
+insert into t (id,a) values (187,60);
+insert into t (id,a) values (187,61);
+insert into t (id,a) values (187,62);
+insert into t (id,a) values (187,63);
+insert into t (id,a) values (187,64);
+insert into t (id,a) values (187,65);
+insert into t (id,a) values (187,66);
+insert into t (id,a) values (187,67);
+insert into t (id,a) values (187,68);
+insert into t (id,a) values (187,69);
+insert into t (id,a) values (187,70);
+insert into t (id,a) values (187,71);
+insert into t (id,a) values (187,72);
+insert into t (id,a) values (187,73);
+insert into t (id,a) values (187,74);
+insert into t (id,a) values (187,75);
+insert into t (id,a) values (187,76);
+insert into t (id,a) values (187,77);
+insert into t (id,a) values (187,78);
+insert into t (id,a) values (187,79);
+insert into t (id,a) values (187,80);
+insert into t (id,a) values (187,81);
+insert into t (id,a) values (187,82);
+insert into t (id,a) values (187,83);
+insert into t (id,a) values (187,84);
+insert into t (id,a) values (187,85);
+insert into t (id,a) values (187,86);
+insert into t (id,a) values (187,87);
+insert into t (id,a) values (187,88);
+insert into t (id,a) values (187,89);
+insert into t (id,a) values (187,90);
+insert into t (id,a) values (187,91);
+insert into t (id,a) values (187,92);
+insert into t (id,a) values (187,93);
+insert into t (id,a) values (187,94);
+insert into t (id,a) values (187,95);
+insert into t (id,a) values (187,96);
+insert into t (id,a) values (187,97);
+insert into t (id,a) values (187,98);
+insert into t (id,a) values (187,99);
+insert into t (id,a) values (188,0);
+insert into t (id,a) values (188,1);
+insert into t (id,a) values (188,2);
+insert into t (id,a) values (188,3);
+insert into t (id,a) values (188,4);
+insert into t (id,a) values (188,5);
+insert into t (id,a) values (188,6);
+insert into t (id,a) values (188,7);
+insert into t (id,a) values (188,8);
+insert into t (id,a) values (188,9);
+insert into t (id,a) values (188,10);
+insert into t (id,a) values (188,11);
+insert into t (id,a) values (188,12);
+insert into t (id,a) values (188,13);
+insert into t (id,a) values (188,14);
+insert into t (id,a) values (188,15);
+insert into t (id,a) values (188,16);
+insert into t (id,a) values (188,17);
+insert into t (id,a) values (188,18);
+insert into t (id,a) values (188,19);
+insert into t (id,a) values (188,20);
+insert into t (id,a) values (188,21);
+insert into t (id,a) values (188,22);
+insert into t (id,a) values (188,23);
+insert into t (id,a) values (188,24);
+insert into t (id,a) values (188,25);
+insert into t (id,a) values (188,26);
+insert into t (id,a) values (188,27);
+insert into t (id,a) values (188,28);
+insert into t (id,a) values (188,29);
+insert into t (id,a) values (188,30);
+insert into t (id,a) values (188,31);
+insert into t (id,a) values (188,32);
+insert into t (id,a) values (188,33);
+insert into t (id,a) values (188,34);
+insert into t (id,a) values (188,35);
+insert into t (id,a) values (188,36);
+insert into t (id,a) values (188,37);
+insert into t (id,a) values (188,38);
+insert into t (id,a) values (188,39);
+insert into t (id,a) values (188,40);
+insert into t (id,a) values (188,41);
+insert into t (id,a) values (188,42);
+insert into t (id,a) values (188,43);
+insert into t (id,a) values (188,44);
+insert into t (id,a) values (188,45);
+insert into t (id,a) values (188,46);
+insert into t (id,a) values (188,47);
+insert into t (id,a) values (188,48);
+insert into t (id,a) values (188,49);
+insert into t (id,a) values (188,50);
+insert into t (id,a) values (188,51);
+insert into t (id,a) values (188,52);
+insert into t (id,a) values (188,53);
+insert into t (id,a) values (188,54);
+insert into t (id,a) values (188,55);
+insert into t (id,a) values (188,56);
+insert into t (id,a) values (188,57);
+insert into t (id,a) values (188,58);
+insert into t (id,a) values (188,59);
+insert into t (id,a) values (188,60);
+insert into t (id,a) values (188,61);
+insert into t (id,a) values (188,62);
+insert into t (id,a) values (188,63);
+insert into t (id,a) values (188,64);
+insert into t (id,a) values (188,65);
+insert into t (id,a) values (188,66);
+insert into t (id,a) values (188,67);
+insert into t (id,a) values (188,68);
+insert into t (id,a) values (188,69);
+insert into t (id,a) values (188,70);
+insert into t (id,a) values (188,71);
+insert into t (id,a) values (188,72);
+insert into t (id,a) values (188,73);
+insert into t (id,a) values (188,74);
+insert into t (id,a) values (188,75);
+insert into t (id,a) values (188,76);
+insert into t (id,a) values (188,77);
+insert into t (id,a) values (188,78);
+insert into t (id,a) values (188,79);
+insert into t (id,a) values (188,80);
+insert into t (id,a) values (188,81);
+insert into t (id,a) values (188,82);
+insert into t (id,a) values (188,83);
+insert into t (id,a) values (188,84);
+insert into t (id,a) values (188,85);
+insert into t (id,a) values (188,86);
+insert into t (id,a) values (188,87);
+insert into t (id,a) values (188,88);
+insert into t (id,a) values (188,89);
+insert into t (id,a) values (188,90);
+insert into t (id,a) values (188,91);
+insert into t (id,a) values (188,92);
+insert into t (id,a) values (188,93);
+insert into t (id,a) values (188,94);
+insert into t (id,a) values (188,95);
+insert into t (id,a) values (188,96);
+insert into t (id,a) values (188,97);
+insert into t (id,a) values (188,98);
+insert into t (id,a) values (188,99);
+insert into t (id,a) values (189,0);
+insert into t (id,a) values (189,1);
+insert into t (id,a) values (189,2);
+insert into t (id,a) values (189,3);
+insert into t (id,a) values (189,4);
+insert into t (id,a) values (189,5);
+insert into t (id,a) values (189,6);
+insert into t (id,a) values (189,7);
+insert into t (id,a) values (189,8);
+insert into t (id,a) values (189,9);
+insert into t (id,a) values (189,10);
+insert into t (id,a) values (189,11);
+insert into t (id,a) values (189,12);
+insert into t (id,a) values (189,13);
+insert into t (id,a) values (189,14);
+insert into t (id,a) values (189,15);
+insert into t (id,a) values (189,16);
+insert into t (id,a) values (189,17);
+insert into t (id,a) values (189,18);
+insert into t (id,a) values (189,19);
+insert into t (id,a) values (189,20);
+insert into t (id,a) values (189,21);
+insert into t (id,a) values (189,22);
+insert into t (id,a) values (189,23);
+insert into t (id,a) values (189,24);
+insert into t (id,a) values (189,25);
+insert into t (id,a) values (189,26);
+insert into t (id,a) values (189,27);
+insert into t (id,a) values (189,28);
+insert into t (id,a) values (189,29);
+insert into t (id,a) values (189,30);
+insert into t (id,a) values (189,31);
+insert into t (id,a) values (189,32);
+insert into t (id,a) values (189,33);
+insert into t (id,a) values (189,34);
+insert into t (id,a) values (189,35);
+insert into t (id,a) values (189,36);
+insert into t (id,a) values (189,37);
+insert into t (id,a) values (189,38);
+insert into t (id,a) values (189,39);
+insert into t (id,a) values (189,40);
+insert into t (id,a) values (189,41);
+insert into t (id,a) values (189,42);
+insert into t (id,a) values (189,43);
+insert into t (id,a) values (189,44);
+insert into t (id,a) values (189,45);
+insert into t (id,a) values (189,46);
+insert into t (id,a) values (189,47);
+insert into t (id,a) values (189,48);
+insert into t (id,a) values (189,49);
+insert into t (id,a) values (189,50);
+insert into t (id,a) values (189,51);
+insert into t (id,a) values (189,52);
+insert into t (id,a) values (189,53);
+insert into t (id,a) values (189,54);
+insert into t (id,a) values (189,55);
+insert into t (id,a) values (189,56);
+insert into t (id,a) values (189,57);
+insert into t (id,a) values (189,58);
+insert into t (id,a) values (189,59);
+insert into t (id,a) values (189,60);
+insert into t (id,a) values (189,61);
+insert into t (id,a) values (189,62);
+insert into t (id,a) values (189,63);
+insert into t (id,a) values (189,64);
+insert into t (id,a) values (189,65);
+insert into t (id,a) values (189,66);
+insert into t (id,a) values (189,67);
+insert into t (id,a) values (189,68);
+insert into t (id,a) values (189,69);
+insert into t (id,a) values (189,70);
+insert into t (id,a) values (189,71);
+insert into t (id,a) values (189,72);
+insert into t (id,a) values (189,73);
+insert into t (id,a) values (189,74);
+insert into t (id,a) values (189,75);
+insert into t (id,a) values (189,76);
+insert into t (id,a) values (189,77);
+insert into t (id,a) values (189,78);
+insert into t (id,a) values (189,79);
+insert into t (id,a) values (189,80);
+insert into t (id,a) values (189,81);
+insert into t (id,a) values (189,82);
+insert into t (id,a) values (189,83);
+insert into t (id,a) values (189,84);
+insert into t (id,a) values (189,85);
+insert into t (id,a) values (189,86);
+insert into t (id,a) values (189,87);
+insert into t (id,a) values (189,88);
+insert into t (id,a) values (189,89);
+insert into t (id,a) values (189,90);
+insert into t (id,a) values (189,91);
+insert into t (id,a) values (189,92);
+insert into t (id,a) values (189,93);
+insert into t (id,a) values (189,94);
+insert into t (id,a) values (189,95);
+insert into t (id,a) values (189,96);
+insert into t (id,a) values (189,97);
+insert into t (id,a) values (189,98);
+insert into t (id,a) values (189,99);
+insert into t (id,a) values (190,0);
+insert into t (id,a) values (190,1);
+insert into t (id,a) values (190,2);
+insert into t (id,a) values (190,3);
+insert into t (id,a) values (190,4);
+insert into t (id,a) values (190,5);
+insert into t (id,a) values (190,6);
+insert into t (id,a) values (190,7);
+insert into t (id,a) values (190,8);
+insert into t (id,a) values (190,9);
+insert into t (id,a) values (190,10);
+insert into t (id,a) values (190,11);
+insert into t (id,a) values (190,12);
+insert into t (id,a) values (190,13);
+insert into t (id,a) values (190,14);
+insert into t (id,a) values (190,15);
+insert into t (id,a) values (190,16);
+insert into t (id,a) values (190,17);
+insert into t (id,a) values (190,18);
+insert into t (id,a) values (190,19);
+insert into t (id,a) values (190,20);
+insert into t (id,a) values (190,21);
+insert into t (id,a) values (190,22);
+insert into t (id,a) values (190,23);
+insert into t (id,a) values (190,24);
+insert into t (id,a) values (190,25);
+insert into t (id,a) values (190,26);
+insert into t (id,a) values (190,27);
+insert into t (id,a) values (190,28);
+insert into t (id,a) values (190,29);
+insert into t (id,a) values (190,30);
+insert into t (id,a) values (190,31);
+insert into t (id,a) values (190,32);
+insert into t (id,a) values (190,33);
+insert into t (id,a) values (190,34);
+insert into t (id,a) values (190,35);
+insert into t (id,a) values (190,36);
+insert into t (id,a) values (190,37);
+insert into t (id,a) values (190,38);
+insert into t (id,a) values (190,39);
+insert into t (id,a) values (190,40);
+insert into t (id,a) values (190,41);
+insert into t (id,a) values (190,42);
+insert into t (id,a) values (190,43);
+insert into t (id,a) values (190,44);
+insert into t (id,a) values (190,45);
+insert into t (id,a) values (190,46);
+insert into t (id,a) values (190,47);
+insert into t (id,a) values (190,48);
+insert into t (id,a) values (190,49);
+insert into t (id,a) values (190,50);
+insert into t (id,a) values (190,51);
+insert into t (id,a) values (190,52);
+insert into t (id,a) values (190,53);
+insert into t (id,a) values (190,54);
+insert into t (id,a) values (190,55);
+insert into t (id,a) values (190,56);
+insert into t (id,a) values (190,57);
+insert into t (id,a) values (190,58);
+insert into t (id,a) values (190,59);
+insert into t (id,a) values (190,60);
+insert into t (id,a) values (190,61);
+insert into t (id,a) values (190,62);
+insert into t (id,a) values (190,63);
+insert into t (id,a) values (190,64);
+insert into t (id,a) values (190,65);
+insert into t (id,a) values (190,66);
+insert into t (id,a) values (190,67);
+insert into t (id,a) values (190,68);
+insert into t (id,a) values (190,69);
+insert into t (id,a) values (190,70);
+insert into t (id,a) values (190,71);
+insert into t (id,a) values (190,72);
+insert into t (id,a) values (190,73);
+insert into t (id,a) values (190,74);
+insert into t (id,a) values (190,75);
+insert into t (id,a) values (190,76);
+insert into t (id,a) values (190,77);
+insert into t (id,a) values (190,78);
+insert into t (id,a) values (190,79);
+insert into t (id,a) values (190,80);
+insert into t (id,a) values (190,81);
+insert into t (id,a) values (190,82);
+insert into t (id,a) values (190,83);
+insert into t (id,a) values (190,84);
+insert into t (id,a) values (190,85);
+insert into t (id,a) values (190,86);
+insert into t (id,a) values (190,87);
+insert into t (id,a) values (190,88);
+insert into t (id,a) values (190,89);
+insert into t (id,a) values (190,90);
+insert into t (id,a) values (190,91);
+insert into t (id,a) values (190,92);
+insert into t (id,a) values (190,93);
+insert into t (id,a) values (190,94);
+insert into t (id,a) values (190,95);
+insert into t (id,a) values (190,96);
+insert into t (id,a) values (190,97);
+insert into t (id,a) values (190,98);
+insert into t (id,a) values (190,99);
+insert into t (id,a) values (191,0);
+insert into t (id,a) values (191,1);
+insert into t (id,a) values (191,2);
+insert into t (id,a) values (191,3);
+insert into t (id,a) values (191,4);
+insert into t (id,a) values (191,5);
+insert into t (id,a) values (191,6);
+insert into t (id,a) values (191,7);
+insert into t (id,a) values (191,8);
+insert into t (id,a) values (191,9);
+insert into t (id,a) values (191,10);
+insert into t (id,a) values (191,11);
+insert into t (id,a) values (191,12);
+insert into t (id,a) values (191,13);
+insert into t (id,a) values (191,14);
+insert into t (id,a) values (191,15);
+insert into t (id,a) values (191,16);
+insert into t (id,a) values (191,17);
+insert into t (id,a) values (191,18);
+insert into t (id,a) values (191,19);
+insert into t (id,a) values (191,20);
+insert into t (id,a) values (191,21);
+insert into t (id,a) values (191,22);
+insert into t (id,a) values (191,23);
+insert into t (id,a) values (191,24);
+insert into t (id,a) values (191,25);
+insert into t (id,a) values (191,26);
+insert into t (id,a) values (191,27);
+insert into t (id,a) values (191,28);
+insert into t (id,a) values (191,29);
+insert into t (id,a) values (191,30);
+insert into t (id,a) values (191,31);
+insert into t (id,a) values (191,32);
+insert into t (id,a) values (191,33);
+insert into t (id,a) values (191,34);
+insert into t (id,a) values (191,35);
+insert into t (id,a) values (191,36);
+insert into t (id,a) values (191,37);
+insert into t (id,a) values (191,38);
+insert into t (id,a) values (191,39);
+insert into t (id,a) values (191,40);
+insert into t (id,a) values (191,41);
+insert into t (id,a) values (191,42);
+insert into t (id,a) values (191,43);
+insert into t (id,a) values (191,44);
+insert into t (id,a) values (191,45);
+insert into t (id,a) values (191,46);
+insert into t (id,a) values (191,47);
+insert into t (id,a) values (191,48);
+insert into t (id,a) values (191,49);
+insert into t (id,a) values (191,50);
+insert into t (id,a) values (191,51);
+insert into t (id,a) values (191,52);
+insert into t (id,a) values (191,53);
+insert into t (id,a) values (191,54);
+insert into t (id,a) values (191,55);
+insert into t (id,a) values (191,56);
+insert into t (id,a) values (191,57);
+insert into t (id,a) values (191,58);
+insert into t (id,a) values (191,59);
+insert into t (id,a) values (191,60);
+insert into t (id,a) values (191,61);
+insert into t (id,a) values (191,62);
+insert into t (id,a) values (191,63);
+insert into t (id,a) values (191,64);
+insert into t (id,a) values (191,65);
+insert into t (id,a) values (191,66);
+insert into t (id,a) values (191,67);
+insert into t (id,a) values (191,68);
+insert into t (id,a) values (191,69);
+insert into t (id,a) values (191,70);
+insert into t (id,a) values (191,71);
+insert into t (id,a) values (191,72);
+insert into t (id,a) values (191,73);
+insert into t (id,a) values (191,74);
+insert into t (id,a) values (191,75);
+insert into t (id,a) values (191,76);
+insert into t (id,a) values (191,77);
+insert into t (id,a) values (191,78);
+insert into t (id,a) values (191,79);
+insert into t (id,a) values (191,80);
+insert into t (id,a) values (191,81);
+insert into t (id,a) values (191,82);
+insert into t (id,a) values (191,83);
+insert into t (id,a) values (191,84);
+insert into t (id,a) values (191,85);
+insert into t (id,a) values (191,86);
+insert into t (id,a) values (191,87);
+insert into t (id,a) values (191,88);
+insert into t (id,a) values (191,89);
+insert into t (id,a) values (191,90);
+insert into t (id,a) values (191,91);
+insert into t (id,a) values (191,92);
+insert into t (id,a) values (191,93);
+insert into t (id,a) values (191,94);
+insert into t (id,a) values (191,95);
+insert into t (id,a) values (191,96);
+insert into t (id,a) values (191,97);
+insert into t (id,a) values (191,98);
+insert into t (id,a) values (191,99);
+insert into t (id,a) values (192,0);
+insert into t (id,a) values (192,1);
+insert into t (id,a) values (192,2);
+insert into t (id,a) values (192,3);
+insert into t (id,a) values (192,4);
+insert into t (id,a) values (192,5);
+insert into t (id,a) values (192,6);
+insert into t (id,a) values (192,7);
+insert into t (id,a) values (192,8);
+insert into t (id,a) values (192,9);
+insert into t (id,a) values (192,10);
+insert into t (id,a) values (192,11);
+insert into t (id,a) values (192,12);
+insert into t (id,a) values (192,13);
+insert into t (id,a) values (192,14);
+insert into t (id,a) values (192,15);
+insert into t (id,a) values (192,16);
+insert into t (id,a) values (192,17);
+insert into t (id,a) values (192,18);
+insert into t (id,a) values (192,19);
+insert into t (id,a) values (192,20);
+insert into t (id,a) values (192,21);
+insert into t (id,a) values (192,22);
+insert into t (id,a) values (192,23);
+insert into t (id,a) values (192,24);
+insert into t (id,a) values (192,25);
+insert into t (id,a) values (192,26);
+insert into t (id,a) values (192,27);
+insert into t (id,a) values (192,28);
+insert into t (id,a) values (192,29);
+insert into t (id,a) values (192,30);
+insert into t (id,a) values (192,31);
+insert into t (id,a) values (192,32);
+insert into t (id,a) values (192,33);
+insert into t (id,a) values (192,34);
+insert into t (id,a) values (192,35);
+insert into t (id,a) values (192,36);
+insert into t (id,a) values (192,37);
+insert into t (id,a) values (192,38);
+insert into t (id,a) values (192,39);
+insert into t (id,a) values (192,40);
+insert into t (id,a) values (192,41);
+insert into t (id,a) values (192,42);
+insert into t (id,a) values (192,43);
+insert into t (id,a) values (192,44);
+insert into t (id,a) values (192,45);
+insert into t (id,a) values (192,46);
+insert into t (id,a) values (192,47);
+insert into t (id,a) values (192,48);
+insert into t (id,a) values (192,49);
+insert into t (id,a) values (192,50);
+insert into t (id,a) values (192,51);
+insert into t (id,a) values (192,52);
+insert into t (id,a) values (192,53);
+insert into t (id,a) values (192,54);
+insert into t (id,a) values (192,55);
+insert into t (id,a) values (192,56);
+insert into t (id,a) values (192,57);
+insert into t (id,a) values (192,58);
+insert into t (id,a) values (192,59);
+insert into t (id,a) values (192,60);
+insert into t (id,a) values (192,61);
+insert into t (id,a) values (192,62);
+insert into t (id,a) values (192,63);
+insert into t (id,a) values (192,64);
+insert into t (id,a) values (192,65);
+insert into t (id,a) values (192,66);
+insert into t (id,a) values (192,67);
+insert into t (id,a) values (192,68);
+insert into t (id,a) values (192,69);
+insert into t (id,a) values (192,70);
+insert into t (id,a) values (192,71);
+insert into t (id,a) values (192,72);
+insert into t (id,a) values (192,73);
+insert into t (id,a) values (192,74);
+insert into t (id,a) values (192,75);
+insert into t (id,a) values (192,76);
+insert into t (id,a) values (192,77);
+insert into t (id,a) values (192,78);
+insert into t (id,a) values (192,79);
+insert into t (id,a) values (192,80);
+insert into t (id,a) values (192,81);
+insert into t (id,a) values (192,82);
+insert into t (id,a) values (192,83);
+insert into t (id,a) values (192,84);
+insert into t (id,a) values (192,85);
+insert into t (id,a) values (192,86);
+insert into t (id,a) values (192,87);
+insert into t (id,a) values (192,88);
+insert into t (id,a) values (192,89);
+insert into t (id,a) values (192,90);
+insert into t (id,a) values (192,91);
+insert into t (id,a) values (192,92);
+insert into t (id,a) values (192,93);
+insert into t (id,a) values (192,94);
+insert into t (id,a) values (192,95);
+insert into t (id,a) values (192,96);
+insert into t (id,a) values (192,97);
+insert into t (id,a) values (192,98);
+insert into t (id,a) values (192,99);
+insert into t (id,a) values (193,0);
+insert into t (id,a) values (193,1);
+insert into t (id,a) values (193,2);
+insert into t (id,a) values (193,3);
+insert into t (id,a) values (193,4);
+insert into t (id,a) values (193,5);
+insert into t (id,a) values (193,6);
+insert into t (id,a) values (193,7);
+insert into t (id,a) values (193,8);
+insert into t (id,a) values (193,9);
+insert into t (id,a) values (193,10);
+insert into t (id,a) values (193,11);
+insert into t (id,a) values (193,12);
+insert into t (id,a) values (193,13);
+insert into t (id,a) values (193,14);
+insert into t (id,a) values (193,15);
+insert into t (id,a) values (193,16);
+insert into t (id,a) values (193,17);
+insert into t (id,a) values (193,18);
+insert into t (id,a) values (193,19);
+insert into t (id,a) values (193,20);
+insert into t (id,a) values (193,21);
+insert into t (id,a) values (193,22);
+insert into t (id,a) values (193,23);
+insert into t (id,a) values (193,24);
+insert into t (id,a) values (193,25);
+insert into t (id,a) values (193,26);
+insert into t (id,a) values (193,27);
+insert into t (id,a) values (193,28);
+insert into t (id,a) values (193,29);
+insert into t (id,a) values (193,30);
+insert into t (id,a) values (193,31);
+insert into t (id,a) values (193,32);
+insert into t (id,a) values (193,33);
+insert into t (id,a) values (193,34);
+insert into t (id,a) values (193,35);
+insert into t (id,a) values (193,36);
+insert into t (id,a) values (193,37);
+insert into t (id,a) values (193,38);
+insert into t (id,a) values (193,39);
+insert into t (id,a) values (193,40);
+insert into t (id,a) values (193,41);
+insert into t (id,a) values (193,42);
+insert into t (id,a) values (193,43);
+insert into t (id,a) values (193,44);
+insert into t (id,a) values (193,45);
+insert into t (id,a) values (193,46);
+insert into t (id,a) values (193,47);
+insert into t (id,a) values (193,48);
+insert into t (id,a) values (193,49);
+insert into t (id,a) values (193,50);
+insert into t (id,a) values (193,51);
+insert into t (id,a) values (193,52);
+insert into t (id,a) values (193,53);
+insert into t (id,a) values (193,54);
+insert into t (id,a) values (193,55);
+insert into t (id,a) values (193,56);
+insert into t (id,a) values (193,57);
+insert into t (id,a) values (193,58);
+insert into t (id,a) values (193,59);
+insert into t (id,a) values (193,60);
+insert into t (id,a) values (193,61);
+insert into t (id,a) values (193,62);
+insert into t (id,a) values (193,63);
+insert into t (id,a) values (193,64);
+insert into t (id,a) values (193,65);
+insert into t (id,a) values (193,66);
+insert into t (id,a) values (193,67);
+insert into t (id,a) values (193,68);
+insert into t (id,a) values (193,69);
+insert into t (id,a) values (193,70);
+insert into t (id,a) values (193,71);
+insert into t (id,a) values (193,72);
+insert into t (id,a) values (193,73);
+insert into t (id,a) values (193,74);
+insert into t (id,a) values (193,75);
+insert into t (id,a) values (193,76);
+insert into t (id,a) values (193,77);
+insert into t (id,a) values (193,78);
+insert into t (id,a) values (193,79);
+insert into t (id,a) values (193,80);
+insert into t (id,a) values (193,81);
+insert into t (id,a) values (193,82);
+insert into t (id,a) values (193,83);
+insert into t (id,a) values (193,84);
+insert into t (id,a) values (193,85);
+insert into t (id,a) values (193,86);
+insert into t (id,a) values (193,87);
+insert into t (id,a) values (193,88);
+insert into t (id,a) values (193,89);
+insert into t (id,a) values (193,90);
+insert into t (id,a) values (193,91);
+insert into t (id,a) values (193,92);
+insert into t (id,a) values (193,93);
+insert into t (id,a) values (193,94);
+insert into t (id,a) values (193,95);
+insert into t (id,a) values (193,96);
+insert into t (id,a) values (193,97);
+insert into t (id,a) values (193,98);
+insert into t (id,a) values (193,99);
+insert into t (id,a) values (194,0);
+insert into t (id,a) values (194,1);
+insert into t (id,a) values (194,2);
+insert into t (id,a) values (194,3);
+insert into t (id,a) values (194,4);
+insert into t (id,a) values (194,5);
+insert into t (id,a) values (194,6);
+insert into t (id,a) values (194,7);
+insert into t (id,a) values (194,8);
+insert into t (id,a) values (194,9);
+insert into t (id,a) values (194,10);
+insert into t (id,a) values (194,11);
+insert into t (id,a) values (194,12);
+insert into t (id,a) values (194,13);
+insert into t (id,a) values (194,14);
+insert into t (id,a) values (194,15);
+insert into t (id,a) values (194,16);
+insert into t (id,a) values (194,17);
+insert into t (id,a) values (194,18);
+insert into t (id,a) values (194,19);
+insert into t (id,a) values (194,20);
+insert into t (id,a) values (194,21);
+insert into t (id,a) values (194,22);
+insert into t (id,a) values (194,23);
+insert into t (id,a) values (194,24);
+insert into t (id,a) values (194,25);
+insert into t (id,a) values (194,26);
+insert into t (id,a) values (194,27);
+insert into t (id,a) values (194,28);
+insert into t (id,a) values (194,29);
+insert into t (id,a) values (194,30);
+insert into t (id,a) values (194,31);
+insert into t (id,a) values (194,32);
+insert into t (id,a) values (194,33);
+insert into t (id,a) values (194,34);
+insert into t (id,a) values (194,35);
+insert into t (id,a) values (194,36);
+insert into t (id,a) values (194,37);
+insert into t (id,a) values (194,38);
+insert into t (id,a) values (194,39);
+insert into t (id,a) values (194,40);
+insert into t (id,a) values (194,41);
+insert into t (id,a) values (194,42);
+insert into t (id,a) values (194,43);
+insert into t (id,a) values (194,44);
+insert into t (id,a) values (194,45);
+insert into t (id,a) values (194,46);
+insert into t (id,a) values (194,47);
+insert into t (id,a) values (194,48);
+insert into t (id,a) values (194,49);
+insert into t (id,a) values (194,50);
+insert into t (id,a) values (194,51);
+insert into t (id,a) values (194,52);
+insert into t (id,a) values (194,53);
+insert into t (id,a) values (194,54);
+insert into t (id,a) values (194,55);
+insert into t (id,a) values (194,56);
+insert into t (id,a) values (194,57);
+insert into t (id,a) values (194,58);
+insert into t (id,a) values (194,59);
+insert into t (id,a) values (194,60);
+insert into t (id,a) values (194,61);
+insert into t (id,a) values (194,62);
+insert into t (id,a) values (194,63);
+insert into t (id,a) values (194,64);
+insert into t (id,a) values (194,65);
+insert into t (id,a) values (194,66);
+insert into t (id,a) values (194,67);
+insert into t (id,a) values (194,68);
+insert into t (id,a) values (194,69);
+insert into t (id,a) values (194,70);
+insert into t (id,a) values (194,71);
+insert into t (id,a) values (194,72);
+insert into t (id,a) values (194,73);
+insert into t (id,a) values (194,74);
+insert into t (id,a) values (194,75);
+insert into t (id,a) values (194,76);
+insert into t (id,a) values (194,77);
+insert into t (id,a) values (194,78);
+insert into t (id,a) values (194,79);
+insert into t (id,a) values (194,80);
+insert into t (id,a) values (194,81);
+insert into t (id,a) values (194,82);
+insert into t (id,a) values (194,83);
+insert into t (id,a) values (194,84);
+insert into t (id,a) values (194,85);
+insert into t (id,a) values (194,86);
+insert into t (id,a) values (194,87);
+insert into t (id,a) values (194,88);
+insert into t (id,a) values (194,89);
+insert into t (id,a) values (194,90);
+insert into t (id,a) values (194,91);
+insert into t (id,a) values (194,92);
+insert into t (id,a) values (194,93);
+insert into t (id,a) values (194,94);
+insert into t (id,a) values (194,95);
+insert into t (id,a) values (194,96);
+insert into t (id,a) values (194,97);
+insert into t (id,a) values (194,98);
+insert into t (id,a) values (194,99);
+insert into t (id,a) values (195,0);
+insert into t (id,a) values (195,1);
+insert into t (id,a) values (195,2);
+insert into t (id,a) values (195,3);
+insert into t (id,a) values (195,4);
+insert into t (id,a) values (195,5);
+insert into t (id,a) values (195,6);
+insert into t (id,a) values (195,7);
+insert into t (id,a) values (195,8);
+insert into t (id,a) values (195,9);
+insert into t (id,a) values (195,10);
+insert into t (id,a) values (195,11);
+insert into t (id,a) values (195,12);
+insert into t (id,a) values (195,13);
+insert into t (id,a) values (195,14);
+insert into t (id,a) values (195,15);
+insert into t (id,a) values (195,16);
+insert into t (id,a) values (195,17);
+insert into t (id,a) values (195,18);
+insert into t (id,a) values (195,19);
+insert into t (id,a) values (195,20);
+insert into t (id,a) values (195,21);
+insert into t (id,a) values (195,22);
+insert into t (id,a) values (195,23);
+insert into t (id,a) values (195,24);
+insert into t (id,a) values (195,25);
+insert into t (id,a) values (195,26);
+insert into t (id,a) values (195,27);
+insert into t (id,a) values (195,28);
+insert into t (id,a) values (195,29);
+insert into t (id,a) values (195,30);
+insert into t (id,a) values (195,31);
+insert into t (id,a) values (195,32);
+insert into t (id,a) values (195,33);
+insert into t (id,a) values (195,34);
+insert into t (id,a) values (195,35);
+insert into t (id,a) values (195,36);
+insert into t (id,a) values (195,37);
+insert into t (id,a) values (195,38);
+insert into t (id,a) values (195,39);
+insert into t (id,a) values (195,40);
+insert into t (id,a) values (195,41);
+insert into t (id,a) values (195,42);
+insert into t (id,a) values (195,43);
+insert into t (id,a) values (195,44);
+insert into t (id,a) values (195,45);
+insert into t (id,a) values (195,46);
+insert into t (id,a) values (195,47);
+insert into t (id,a) values (195,48);
+insert into t (id,a) values (195,49);
+insert into t (id,a) values (195,50);
+insert into t (id,a) values (195,51);
+insert into t (id,a) values (195,52);
+insert into t (id,a) values (195,53);
+insert into t (id,a) values (195,54);
+insert into t (id,a) values (195,55);
+insert into t (id,a) values (195,56);
+insert into t (id,a) values (195,57);
+insert into t (id,a) values (195,58);
+insert into t (id,a) values (195,59);
+insert into t (id,a) values (195,60);
+insert into t (id,a) values (195,61);
+insert into t (id,a) values (195,62);
+insert into t (id,a) values (195,63);
+insert into t (id,a) values (195,64);
+insert into t (id,a) values (195,65);
+insert into t (id,a) values (195,66);
+insert into t (id,a) values (195,67);
+insert into t (id,a) values (195,68);
+insert into t (id,a) values (195,69);
+insert into t (id,a) values (195,70);
+insert into t (id,a) values (195,71);
+insert into t (id,a) values (195,72);
+insert into t (id,a) values (195,73);
+insert into t (id,a) values (195,74);
+insert into t (id,a) values (195,75);
+insert into t (id,a) values (195,76);
+insert into t (id,a) values (195,77);
+insert into t (id,a) values (195,78);
+insert into t (id,a) values (195,79);
+insert into t (id,a) values (195,80);
+insert into t (id,a) values (195,81);
+insert into t (id,a) values (195,82);
+insert into t (id,a) values (195,83);
+insert into t (id,a) values (195,84);
+insert into t (id,a) values (195,85);
+insert into t (id,a) values (195,86);
+insert into t (id,a) values (195,87);
+insert into t (id,a) values (195,88);
+insert into t (id,a) values (195,89);
+insert into t (id,a) values (195,90);
+insert into t (id,a) values (195,91);
+insert into t (id,a) values (195,92);
+insert into t (id,a) values (195,93);
+insert into t (id,a) values (195,94);
+insert into t (id,a) values (195,95);
+insert into t (id,a) values (195,96);
+insert into t (id,a) values (195,97);
+insert into t (id,a) values (195,98);
+insert into t (id,a) values (195,99);
+insert into t (id,a) values (196,0);
+insert into t (id,a) values (196,1);
+insert into t (id,a) values (196,2);
+insert into t (id,a) values (196,3);
+insert into t (id,a) values (196,4);
+insert into t (id,a) values (196,5);
+insert into t (id,a) values (196,6);
+insert into t (id,a) values (196,7);
+insert into t (id,a) values (196,8);
+insert into t (id,a) values (196,9);
+insert into t (id,a) values (196,10);
+insert into t (id,a) values (196,11);
+insert into t (id,a) values (196,12);
+insert into t (id,a) values (196,13);
+insert into t (id,a) values (196,14);
+insert into t (id,a) values (196,15);
+insert into t (id,a) values (196,16);
+insert into t (id,a) values (196,17);
+insert into t (id,a) values (196,18);
+insert into t (id,a) values (196,19);
+insert into t (id,a) values (196,20);
+insert into t (id,a) values (196,21);
+insert into t (id,a) values (196,22);
+insert into t (id,a) values (196,23);
+insert into t (id,a) values (196,24);
+insert into t (id,a) values (196,25);
+insert into t (id,a) values (196,26);
+insert into t (id,a) values (196,27);
+insert into t (id,a) values (196,28);
+insert into t (id,a) values (196,29);
+insert into t (id,a) values (196,30);
+insert into t (id,a) values (196,31);
+insert into t (id,a) values (196,32);
+insert into t (id,a) values (196,33);
+insert into t (id,a) values (196,34);
+insert into t (id,a) values (196,35);
+insert into t (id,a) values (196,36);
+insert into t (id,a) values (196,37);
+insert into t (id,a) values (196,38);
+insert into t (id,a) values (196,39);
+insert into t (id,a) values (196,40);
+insert into t (id,a) values (196,41);
+insert into t (id,a) values (196,42);
+insert into t (id,a) values (196,43);
+insert into t (id,a) values (196,44);
+insert into t (id,a) values (196,45);
+insert into t (id,a) values (196,46);
+insert into t (id,a) values (196,47);
+insert into t (id,a) values (196,48);
+insert into t (id,a) values (196,49);
+insert into t (id,a) values (196,50);
+insert into t (id,a) values (196,51);
+insert into t (id,a) values (196,52);
+insert into t (id,a) values (196,53);
+insert into t (id,a) values (196,54);
+insert into t (id,a) values (196,55);
+insert into t (id,a) values (196,56);
+insert into t (id,a) values (196,57);
+insert into t (id,a) values (196,58);
+insert into t (id,a) values (196,59);
+insert into t (id,a) values (196,60);
+insert into t (id,a) values (196,61);
+insert into t (id,a) values (196,62);
+insert into t (id,a) values (196,63);
+insert into t (id,a) values (196,64);
+insert into t (id,a) values (196,65);
+insert into t (id,a) values (196,66);
+insert into t (id,a) values (196,67);
+insert into t (id,a) values (196,68);
+insert into t (id,a) values (196,69);
+insert into t (id,a) values (196,70);
+insert into t (id,a) values (196,71);
+insert into t (id,a) values (196,72);
+insert into t (id,a) values (196,73);
+insert into t (id,a) values (196,74);
+insert into t (id,a) values (196,75);
+insert into t (id,a) values (196,76);
+insert into t (id,a) values (196,77);
+insert into t (id,a) values (196,78);
+insert into t (id,a) values (196,79);
+insert into t (id,a) values (196,80);
+insert into t (id,a) values (196,81);
+insert into t (id,a) values (196,82);
+insert into t (id,a) values (196,83);
+insert into t (id,a) values (196,84);
+insert into t (id,a) values (196,85);
+insert into t (id,a) values (196,86);
+insert into t (id,a) values (196,87);
+insert into t (id,a) values (196,88);
+insert into t (id,a) values (196,89);
+insert into t (id,a) values (196,90);
+insert into t (id,a) values (196,91);
+insert into t (id,a) values (196,92);
+insert into t (id,a) values (196,93);
+insert into t (id,a) values (196,94);
+insert into t (id,a) values (196,95);
+insert into t (id,a) values (196,96);
+insert into t (id,a) values (196,97);
+insert into t (id,a) values (196,98);
+insert into t (id,a) values (196,99);
+insert into t (id,a) values (197,0);
+insert into t (id,a) values (197,1);
+insert into t (id,a) values (197,2);
+insert into t (id,a) values (197,3);
+insert into t (id,a) values (197,4);
+insert into t (id,a) values (197,5);
+insert into t (id,a) values (197,6);
+insert into t (id,a) values (197,7);
+insert into t (id,a) values (197,8);
+insert into t (id,a) values (197,9);
+insert into t (id,a) values (197,10);
+insert into t (id,a) values (197,11);
+insert into t (id,a) values (197,12);
+insert into t (id,a) values (197,13);
+insert into t (id,a) values (197,14);
+insert into t (id,a) values (197,15);
+insert into t (id,a) values (197,16);
+insert into t (id,a) values (197,17);
+insert into t (id,a) values (197,18);
+insert into t (id,a) values (197,19);
+insert into t (id,a) values (197,20);
+insert into t (id,a) values (197,21);
+insert into t (id,a) values (197,22);
+insert into t (id,a) values (197,23);
+insert into t (id,a) values (197,24);
+insert into t (id,a) values (197,25);
+insert into t (id,a) values (197,26);
+insert into t (id,a) values (197,27);
+insert into t (id,a) values (197,28);
+insert into t (id,a) values (197,29);
+insert into t (id,a) values (197,30);
+insert into t (id,a) values (197,31);
+insert into t (id,a) values (197,32);
+insert into t (id,a) values (197,33);
+insert into t (id,a) values (197,34);
+insert into t (id,a) values (197,35);
+insert into t (id,a) values (197,36);
+insert into t (id,a) values (197,37);
+insert into t (id,a) values (197,38);
+insert into t (id,a) values (197,39);
+insert into t (id,a) values (197,40);
+insert into t (id,a) values (197,41);
+insert into t (id,a) values (197,42);
+insert into t (id,a) values (197,43);
+insert into t (id,a) values (197,44);
+insert into t (id,a) values (197,45);
+insert into t (id,a) values (197,46);
+insert into t (id,a) values (197,47);
+insert into t (id,a) values (197,48);
+insert into t (id,a) values (197,49);
+insert into t (id,a) values (197,50);
+insert into t (id,a) values (197,51);
+insert into t (id,a) values (197,52);
+insert into t (id,a) values (197,53);
+insert into t (id,a) values (197,54);
+insert into t (id,a) values (197,55);
+insert into t (id,a) values (197,56);
+insert into t (id,a) values (197,57);
+insert into t (id,a) values (197,58);
+insert into t (id,a) values (197,59);
+insert into t (id,a) values (197,60);
+insert into t (id,a) values (197,61);
+insert into t (id,a) values (197,62);
+insert into t (id,a) values (197,63);
+insert into t (id,a) values (197,64);
+insert into t (id,a) values (197,65);
+insert into t (id,a) values (197,66);
+insert into t (id,a) values (197,67);
+insert into t (id,a) values (197,68);
+insert into t (id,a) values (197,69);
+insert into t (id,a) values (197,70);
+insert into t (id,a) values (197,71);
+insert into t (id,a) values (197,72);
+insert into t (id,a) values (197,73);
+insert into t (id,a) values (197,74);
+insert into t (id,a) values (197,75);
+insert into t (id,a) values (197,76);
+insert into t (id,a) values (197,77);
+insert into t (id,a) values (197,78);
+insert into t (id,a) values (197,79);
+insert into t (id,a) values (197,80);
+insert into t (id,a) values (197,81);
+insert into t (id,a) values (197,82);
+insert into t (id,a) values (197,83);
+insert into t (id,a) values (197,84);
+insert into t (id,a) values (197,85);
+insert into t (id,a) values (197,86);
+insert into t (id,a) values (197,87);
+insert into t (id,a) values (197,88);
+insert into t (id,a) values (197,89);
+insert into t (id,a) values (197,90);
+insert into t (id,a) values (197,91);
+insert into t (id,a) values (197,92);
+insert into t (id,a) values (197,93);
+insert into t (id,a) values (197,94);
+insert into t (id,a) values (197,95);
+insert into t (id,a) values (197,96);
+insert into t (id,a) values (197,97);
+insert into t (id,a) values (197,98);
+insert into t (id,a) values (197,99);
+insert into t (id,a) values (198,0);
+insert into t (id,a) values (198,1);
+insert into t (id,a) values (198,2);
+insert into t (id,a) values (198,3);
+insert into t (id,a) values (198,4);
+insert into t (id,a) values (198,5);
+insert into t (id,a) values (198,6);
+insert into t (id,a) values (198,7);
+insert into t (id,a) values (198,8);
+insert into t (id,a) values (198,9);
+insert into t (id,a) values (198,10);
+insert into t (id,a) values (198,11);
+insert into t (id,a) values (198,12);
+insert into t (id,a) values (198,13);
+insert into t (id,a) values (198,14);
+insert into t (id,a) values (198,15);
+insert into t (id,a) values (198,16);
+insert into t (id,a) values (198,17);
+insert into t (id,a) values (198,18);
+insert into t (id,a) values (198,19);
+insert into t (id,a) values (198,20);
+insert into t (id,a) values (198,21);
+insert into t (id,a) values (198,22);
+insert into t (id,a) values (198,23);
+insert into t (id,a) values (198,24);
+insert into t (id,a) values (198,25);
+insert into t (id,a) values (198,26);
+insert into t (id,a) values (198,27);
+insert into t (id,a) values (198,28);
+insert into t (id,a) values (198,29);
+insert into t (id,a) values (198,30);
+insert into t (id,a) values (198,31);
+insert into t (id,a) values (198,32);
+insert into t (id,a) values (198,33);
+insert into t (id,a) values (198,34);
+insert into t (id,a) values (198,35);
+insert into t (id,a) values (198,36);
+insert into t (id,a) values (198,37);
+insert into t (id,a) values (198,38);
+insert into t (id,a) values (198,39);
+insert into t (id,a) values (198,40);
+insert into t (id,a) values (198,41);
+insert into t (id,a) values (198,42);
+insert into t (id,a) values (198,43);
+insert into t (id,a) values (198,44);
+insert into t (id,a) values (198,45);
+insert into t (id,a) values (198,46);
+insert into t (id,a) values (198,47);
+insert into t (id,a) values (198,48);
+insert into t (id,a) values (198,49);
+insert into t (id,a) values (198,50);
+insert into t (id,a) values (198,51);
+insert into t (id,a) values (198,52);
+insert into t (id,a) values (198,53);
+insert into t (id,a) values (198,54);
+insert into t (id,a) values (198,55);
+insert into t (id,a) values (198,56);
+insert into t (id,a) values (198,57);
+insert into t (id,a) values (198,58);
+insert into t (id,a) values (198,59);
+insert into t (id,a) values (198,60);
+insert into t (id,a) values (198,61);
+insert into t (id,a) values (198,62);
+insert into t (id,a) values (198,63);
+insert into t (id,a) values (198,64);
+insert into t (id,a) values (198,65);
+insert into t (id,a) values (198,66);
+insert into t (id,a) values (198,67);
+insert into t (id,a) values (198,68);
+insert into t (id,a) values (198,69);
+insert into t (id,a) values (198,70);
+insert into t (id,a) values (198,71);
+insert into t (id,a) values (198,72);
+insert into t (id,a) values (198,73);
+insert into t (id,a) values (198,74);
+insert into t (id,a) values (198,75);
+insert into t (id,a) values (198,76);
+insert into t (id,a) values (198,77);
+insert into t (id,a) values (198,78);
+insert into t (id,a) values (198,79);
+insert into t (id,a) values (198,80);
+insert into t (id,a) values (198,81);
+insert into t (id,a) values (198,82);
+insert into t (id,a) values (198,83);
+insert into t (id,a) values (198,84);
+insert into t (id,a) values (198,85);
+insert into t (id,a) values (198,86);
+insert into t (id,a) values (198,87);
+insert into t (id,a) values (198,88);
+insert into t (id,a) values (198,89);
+insert into t (id,a) values (198,90);
+insert into t (id,a) values (198,91);
+insert into t (id,a) values (198,92);
+insert into t (id,a) values (198,93);
+insert into t (id,a) values (198,94);
+insert into t (id,a) values (198,95);
+insert into t (id,a) values (198,96);
+insert into t (id,a) values (198,97);
+insert into t (id,a) values (198,98);
+insert into t (id,a) values (198,99);
+insert into t (id,a) values (199,0);
+insert into t (id,a) values (199,1);
+insert into t (id,a) values (199,2);
+insert into t (id,a) values (199,3);
+insert into t (id,a) values (199,4);
+insert into t (id,a) values (199,5);
+insert into t (id,a) values (199,6);
+insert into t (id,a) values (199,7);
+insert into t (id,a) values (199,8);
+insert into t (id,a) values (199,9);
+insert into t (id,a) values (199,10);
+insert into t (id,a) values (199,11);
+insert into t (id,a) values (199,12);
+insert into t (id,a) values (199,13);
+insert into t (id,a) values (199,14);
+insert into t (id,a) values (199,15);
+insert into t (id,a) values (199,16);
+insert into t (id,a) values (199,17);
+insert into t (id,a) values (199,18);
+insert into t (id,a) values (199,19);
+insert into t (id,a) values (199,20);
+insert into t (id,a) values (199,21);
+insert into t (id,a) values (199,22);
+insert into t (id,a) values (199,23);
+insert into t (id,a) values (199,24);
+insert into t (id,a) values (199,25);
+insert into t (id,a) values (199,26);
+insert into t (id,a) values (199,27);
+insert into t (id,a) values (199,28);
+insert into t (id,a) values (199,29);
+insert into t (id,a) values (199,30);
+insert into t (id,a) values (199,31);
+insert into t (id,a) values (199,32);
+insert into t (id,a) values (199,33);
+insert into t (id,a) values (199,34);
+insert into t (id,a) values (199,35);
+insert into t (id,a) values (199,36);
+insert into t (id,a) values (199,37);
+insert into t (id,a) values (199,38);
+insert into t (id,a) values (199,39);
+insert into t (id,a) values (199,40);
+insert into t (id,a) values (199,41);
+insert into t (id,a) values (199,42);
+insert into t (id,a) values (199,43);
+insert into t (id,a) values (199,44);
+insert into t (id,a) values (199,45);
+insert into t (id,a) values (199,46);
+insert into t (id,a) values (199,47);
+insert into t (id,a) values (199,48);
+insert into t (id,a) values (199,49);
+insert into t (id,a) values (199,50);
+insert into t (id,a) values (199,51);
+insert into t (id,a) values (199,52);
+insert into t (id,a) values (199,53);
+insert into t (id,a) values (199,54);
+insert into t (id,a) values (199,55);
+insert into t (id,a) values (199,56);
+insert into t (id,a) values (199,57);
+insert into t (id,a) values (199,58);
+insert into t (id,a) values (199,59);
+insert into t (id,a) values (199,60);
+insert into t (id,a) values (199,61);
+insert into t (id,a) values (199,62);
+insert into t (id,a) values (199,63);
+insert into t (id,a) values (199,64);
+insert into t (id,a) values (199,65);
+insert into t (id,a) values (199,66);
+insert into t (id,a) values (199,67);
+insert into t (id,a) values (199,68);
+insert into t (id,a) values (199,69);
+insert into t (id,a) values (199,70);
+insert into t (id,a) values (199,71);
+insert into t (id,a) values (199,72);
+insert into t (id,a) values (199,73);
+insert into t (id,a) values (199,74);
+insert into t (id,a) values (199,75);
+insert into t (id,a) values (199,76);
+insert into t (id,a) values (199,77);
+insert into t (id,a) values (199,78);
+insert into t (id,a) values (199,79);
+insert into t (id,a) values (199,80);
+insert into t (id,a) values (199,81);
+insert into t (id,a) values (199,82);
+insert into t (id,a) values (199,83);
+insert into t (id,a) values (199,84);
+insert into t (id,a) values (199,85);
+insert into t (id,a) values (199,86);
+insert into t (id,a) values (199,87);
+insert into t (id,a) values (199,88);
+insert into t (id,a) values (199,89);
+insert into t (id,a) values (199,90);
+insert into t (id,a) values (199,91);
+insert into t (id,a) values (199,92);
+insert into t (id,a) values (199,93);
+insert into t (id,a) values (199,94);
+insert into t (id,a) values (199,95);
+insert into t (id,a) values (199,96);
+insert into t (id,a) values (199,97);
+insert into t (id,a) values (199,98);
+insert into t (id,a) values (199,99);
+insert into t (id,a) values (200,0);
+insert into t (id,a) values (200,1);
+insert into t (id,a) values (200,2);
+insert into t (id,a) values (200,3);
+insert into t (id,a) values (200,4);
+insert into t (id,a) values (200,5);
+insert into t (id,a) values (200,6);
+insert into t (id,a) values (200,7);
+insert into t (id,a) values (200,8);
+insert into t (id,a) values (200,9);
+insert into t (id,a) values (200,10);
+insert into t (id,a) values (200,11);
+insert into t (id,a) values (200,12);
+insert into t (id,a) values (200,13);
+insert into t (id,a) values (200,14);
+insert into t (id,a) values (200,15);
+insert into t (id,a) values (200,16);
+insert into t (id,a) values (200,17);
+insert into t (id,a) values (200,18);
+insert into t (id,a) values (200,19);
+insert into t (id,a) values (200,20);
+insert into t (id,a) values (200,21);
+insert into t (id,a) values (200,22);
+insert into t (id,a) values (200,23);
+insert into t (id,a) values (200,24);
+insert into t (id,a) values (200,25);
+insert into t (id,a) values (200,26);
+insert into t (id,a) values (200,27);
+insert into t (id,a) values (200,28);
+insert into t (id,a) values (200,29);
+insert into t (id,a) values (200,30);
+insert into t (id,a) values (200,31);
+insert into t (id,a) values (200,32);
+insert into t (id,a) values (200,33);
+insert into t (id,a) values (200,34);
+insert into t (id,a) values (200,35);
+insert into t (id,a) values (200,36);
+insert into t (id,a) values (200,37);
+insert into t (id,a) values (200,38);
+insert into t (id,a) values (200,39);
+insert into t (id,a) values (200,40);
+insert into t (id,a) values (200,41);
+insert into t (id,a) values (200,42);
+insert into t (id,a) values (200,43);
+insert into t (id,a) values (200,44);
+insert into t (id,a) values (200,45);
+insert into t (id,a) values (200,46);
+insert into t (id,a) values (200,47);
+insert into t (id,a) values (200,48);
+insert into t (id,a) values (200,49);
+insert into t (id,a) values (200,50);
+insert into t (id,a) values (200,51);
+insert into t (id,a) values (200,52);
+insert into t (id,a) values (200,53);
+insert into t (id,a) values (200,54);
+insert into t (id,a) values (200,55);
+insert into t (id,a) values (200,56);
+insert into t (id,a) values (200,57);
+insert into t (id,a) values (200,58);
+insert into t (id,a) values (200,59);
+insert into t (id,a) values (200,60);
+insert into t (id,a) values (200,61);
+insert into t (id,a) values (200,62);
+insert into t (id,a) values (200,63);
+insert into t (id,a) values (200,64);
+insert into t (id,a) values (200,65);
+insert into t (id,a) values (200,66);
+insert into t (id,a) values (200,67);
+insert into t (id,a) values (200,68);
+insert into t (id,a) values (200,69);
+insert into t (id,a) values (200,70);
+insert into t (id,a) values (200,71);
+insert into t (id,a) values (200,72);
+insert into t (id,a) values (200,73);
+insert into t (id,a) values (200,74);
+insert into t (id,a) values (200,75);
+insert into t (id,a) values (200,76);
+insert into t (id,a) values (200,77);
+insert into t (id,a) values (200,78);
+insert into t (id,a) values (200,79);
+insert into t (id,a) values (200,80);
+insert into t (id,a) values (200,81);
+insert into t (id,a) values (200,82);
+insert into t (id,a) values (200,83);
+insert into t (id,a) values (200,84);
+insert into t (id,a) values (200,85);
+insert into t (id,a) values (200,86);
+insert into t (id,a) values (200,87);
+insert into t (id,a) values (200,88);
+insert into t (id,a) values (200,89);
+insert into t (id,a) values (200,90);
+insert into t (id,a) values (200,91);
+insert into t (id,a) values (200,92);
+insert into t (id,a) values (200,93);
+insert into t (id,a) values (200,94);
+insert into t (id,a) values (200,95);
+insert into t (id,a) values (200,96);
+insert into t (id,a) values (200,97);
+insert into t (id,a) values (200,98);
+insert into t (id,a) values (200,99);
+insert into t (id,a) values (201,0);
+insert into t (id,a) values (201,1);
+insert into t (id,a) values (201,2);
+insert into t (id,a) values (201,3);
+insert into t (id,a) values (201,4);
+insert into t (id,a) values (201,5);
+insert into t (id,a) values (201,6);
+insert into t (id,a) values (201,7);
+insert into t (id,a) values (201,8);
+insert into t (id,a) values (201,9);
+insert into t (id,a) values (201,10);
+insert into t (id,a) values (201,11);
+insert into t (id,a) values (201,12);
+insert into t (id,a) values (201,13);
+insert into t (id,a) values (201,14);
+insert into t (id,a) values (201,15);
+insert into t (id,a) values (201,16);
+insert into t (id,a) values (201,17);
+insert into t (id,a) values (201,18);
+insert into t (id,a) values (201,19);
+insert into t (id,a) values (201,20);
+insert into t (id,a) values (201,21);
+insert into t (id,a) values (201,22);
+insert into t (id,a) values (201,23);
+insert into t (id,a) values (201,24);
+insert into t (id,a) values (201,25);
+insert into t (id,a) values (201,26);
+insert into t (id,a) values (201,27);
+insert into t (id,a) values (201,28);
+insert into t (id,a) values (201,29);
+insert into t (id,a) values (201,30);
+insert into t (id,a) values (201,31);
+insert into t (id,a) values (201,32);
+insert into t (id,a) values (201,33);
+insert into t (id,a) values (201,34);
+insert into t (id,a) values (201,35);
+insert into t (id,a) values (201,36);
+insert into t (id,a) values (201,37);
+insert into t (id,a) values (201,38);
+insert into t (id,a) values (201,39);
+insert into t (id,a) values (201,40);
+insert into t (id,a) values (201,41);
+insert into t (id,a) values (201,42);
+insert into t (id,a) values (201,43);
+insert into t (id,a) values (201,44);
+insert into t (id,a) values (201,45);
+insert into t (id,a) values (201,46);
+insert into t (id,a) values (201,47);
+insert into t (id,a) values (201,48);
+insert into t (id,a) values (201,49);
+insert into t (id,a) values (201,50);
+insert into t (id,a) values (201,51);
+insert into t (id,a) values (201,52);
+insert into t (id,a) values (201,53);
+insert into t (id,a) values (201,54);
+insert into t (id,a) values (201,55);
+insert into t (id,a) values (201,56);
+insert into t (id,a) values (201,57);
+insert into t (id,a) values (201,58);
+insert into t (id,a) values (201,59);
+insert into t (id,a) values (201,60);
+insert into t (id,a) values (201,61);
+insert into t (id,a) values (201,62);
+insert into t (id,a) values (201,63);
+insert into t (id,a) values (201,64);
+insert into t (id,a) values (201,65);
+insert into t (id,a) values (201,66);
+insert into t (id,a) values (201,67);
+insert into t (id,a) values (201,68);
+insert into t (id,a) values (201,69);
+insert into t (id,a) values (201,70);
+insert into t (id,a) values (201,71);
+insert into t (id,a) values (201,72);
+insert into t (id,a) values (201,73);
+insert into t (id,a) values (201,74);
+insert into t (id,a) values (201,75);
+insert into t (id,a) values (201,76);
+insert into t (id,a) values (201,77);
+insert into t (id,a) values (201,78);
+insert into t (id,a) values (201,79);
+insert into t (id,a) values (201,80);
+insert into t (id,a) values (201,81);
+insert into t (id,a) values (201,82);
+insert into t (id,a) values (201,83);
+insert into t (id,a) values (201,84);
+insert into t (id,a) values (201,85);
+insert into t (id,a) values (201,86);
+insert into t (id,a) values (201,87);
+insert into t (id,a) values (201,88);
+insert into t (id,a) values (201,89);
+insert into t (id,a) values (201,90);
+insert into t (id,a) values (201,91);
+insert into t (id,a) values (201,92);
+insert into t (id,a) values (201,93);
+insert into t (id,a) values (201,94);
+insert into t (id,a) values (201,95);
+insert into t (id,a) values (201,96);
+insert into t (id,a) values (201,97);
+insert into t (id,a) values (201,98);
+insert into t (id,a) values (201,99);
+insert into t (id,a) values (202,0);
+insert into t (id,a) values (202,1);
+insert into t (id,a) values (202,2);
+insert into t (id,a) values (202,3);
+insert into t (id,a) values (202,4);
+insert into t (id,a) values (202,5);
+insert into t (id,a) values (202,6);
+insert into t (id,a) values (202,7);
+insert into t (id,a) values (202,8);
+insert into t (id,a) values (202,9);
+insert into t (id,a) values (202,10);
+insert into t (id,a) values (202,11);
+insert into t (id,a) values (202,12);
+insert into t (id,a) values (202,13);
+insert into t (id,a) values (202,14);
+insert into t (id,a) values (202,15);
+insert into t (id,a) values (202,16);
+insert into t (id,a) values (202,17);
+insert into t (id,a) values (202,18);
+insert into t (id,a) values (202,19);
+insert into t (id,a) values (202,20);
+insert into t (id,a) values (202,21);
+insert into t (id,a) values (202,22);
+insert into t (id,a) values (202,23);
+insert into t (id,a) values (202,24);
+insert into t (id,a) values (202,25);
+insert into t (id,a) values (202,26);
+insert into t (id,a) values (202,27);
+insert into t (id,a) values (202,28);
+insert into t (id,a) values (202,29);
+insert into t (id,a) values (202,30);
+insert into t (id,a) values (202,31);
+insert into t (id,a) values (202,32);
+insert into t (id,a) values (202,33);
+insert into t (id,a) values (202,34);
+insert into t (id,a) values (202,35);
+insert into t (id,a) values (202,36);
+insert into t (id,a) values (202,37);
+insert into t (id,a) values (202,38);
+insert into t (id,a) values (202,39);
+insert into t (id,a) values (202,40);
+insert into t (id,a) values (202,41);
+insert into t (id,a) values (202,42);
+insert into t (id,a) values (202,43);
+insert into t (id,a) values (202,44);
+insert into t (id,a) values (202,45);
+insert into t (id,a) values (202,46);
+insert into t (id,a) values (202,47);
+insert into t (id,a) values (202,48);
+insert into t (id,a) values (202,49);
+insert into t (id,a) values (202,50);
+insert into t (id,a) values (202,51);
+insert into t (id,a) values (202,52);
+insert into t (id,a) values (202,53);
+insert into t (id,a) values (202,54);
+insert into t (id,a) values (202,55);
+insert into t (id,a) values (202,56);
+insert into t (id,a) values (202,57);
+insert into t (id,a) values (202,58);
+insert into t (id,a) values (202,59);
+insert into t (id,a) values (202,60);
+insert into t (id,a) values (202,61);
+insert into t (id,a) values (202,62);
+insert into t (id,a) values (202,63);
+insert into t (id,a) values (202,64);
+insert into t (id,a) values (202,65);
+insert into t (id,a) values (202,66);
+insert into t (id,a) values (202,67);
+insert into t (id,a) values (202,68);
+insert into t (id,a) values (202,69);
+insert into t (id,a) values (202,70);
+insert into t (id,a) values (202,71);
+insert into t (id,a) values (202,72);
+insert into t (id,a) values (202,73);
+insert into t (id,a) values (202,74);
+insert into t (id,a) values (202,75);
+insert into t (id,a) values (202,76);
+insert into t (id,a) values (202,77);
+insert into t (id,a) values (202,78);
+insert into t (id,a) values (202,79);
+insert into t (id,a) values (202,80);
+insert into t (id,a) values (202,81);
+insert into t (id,a) values (202,82);
+insert into t (id,a) values (202,83);
+insert into t (id,a) values (202,84);
+insert into t (id,a) values (202,85);
+insert into t (id,a) values (202,86);
+insert into t (id,a) values (202,87);
+insert into t (id,a) values (202,88);
+insert into t (id,a) values (202,89);
+insert into t (id,a) values (202,90);
+insert into t (id,a) values (202,91);
+insert into t (id,a) values (202,92);
+insert into t (id,a) values (202,93);
+insert into t (id,a) values (202,94);
+insert into t (id,a) values (202,95);
+insert into t (id,a) values (202,96);
+insert into t (id,a) values (202,97);
+insert into t (id,a) values (202,98);
+insert into t (id,a) values (202,99);
+insert into t (id,a) values (203,0);
+insert into t (id,a) values (203,1);
+insert into t (id,a) values (203,2);
+insert into t (id,a) values (203,3);
+insert into t (id,a) values (203,4);
+insert into t (id,a) values (203,5);
+insert into t (id,a) values (203,6);
+insert into t (id,a) values (203,7);
+insert into t (id,a) values (203,8);
+insert into t (id,a) values (203,9);
+insert into t (id,a) values (203,10);
+insert into t (id,a) values (203,11);
+insert into t (id,a) values (203,12);
+insert into t (id,a) values (203,13);
+insert into t (id,a) values (203,14);
+insert into t (id,a) values (203,15);
+insert into t (id,a) values (203,16);
+insert into t (id,a) values (203,17);
+insert into t (id,a) values (203,18);
+insert into t (id,a) values (203,19);
+insert into t (id,a) values (203,20);
+insert into t (id,a) values (203,21);
+insert into t (id,a) values (203,22);
+insert into t (id,a) values (203,23);
+insert into t (id,a) values (203,24);
+insert into t (id,a) values (203,25);
+insert into t (id,a) values (203,26);
+insert into t (id,a) values (203,27);
+insert into t (id,a) values (203,28);
+insert into t (id,a) values (203,29);
+insert into t (id,a) values (203,30);
+insert into t (id,a) values (203,31);
+insert into t (id,a) values (203,32);
+insert into t (id,a) values (203,33);
+insert into t (id,a) values (203,34);
+insert into t (id,a) values (203,35);
+insert into t (id,a) values (203,36);
+insert into t (id,a) values (203,37);
+insert into t (id,a) values (203,38);
+insert into t (id,a) values (203,39);
+insert into t (id,a) values (203,40);
+insert into t (id,a) values (203,41);
+insert into t (id,a) values (203,42);
+insert into t (id,a) values (203,43);
+insert into t (id,a) values (203,44);
+insert into t (id,a) values (203,45);
+insert into t (id,a) values (203,46);
+insert into t (id,a) values (203,47);
+insert into t (id,a) values (203,48);
+insert into t (id,a) values (203,49);
+insert into t (id,a) values (203,50);
+insert into t (id,a) values (203,51);
+insert into t (id,a) values (203,52);
+insert into t (id,a) values (203,53);
+insert into t (id,a) values (203,54);
+insert into t (id,a) values (203,55);
+insert into t (id,a) values (203,56);
+insert into t (id,a) values (203,57);
+insert into t (id,a) values (203,58);
+insert into t (id,a) values (203,59);
+insert into t (id,a) values (203,60);
+insert into t (id,a) values (203,61);
+insert into t (id,a) values (203,62);
+insert into t (id,a) values (203,63);
+insert into t (id,a) values (203,64);
+insert into t (id,a) values (203,65);
+insert into t (id,a) values (203,66);
+insert into t (id,a) values (203,67);
+insert into t (id,a) values (203,68);
+insert into t (id,a) values (203,69);
+insert into t (id,a) values (203,70);
+insert into t (id,a) values (203,71);
+insert into t (id,a) values (203,72);
+insert into t (id,a) values (203,73);
+insert into t (id,a) values (203,74);
+insert into t (id,a) values (203,75);
+insert into t (id,a) values (203,76);
+insert into t (id,a) values (203,77);
+insert into t (id,a) values (203,78);
+insert into t (id,a) values (203,79);
+insert into t (id,a) values (203,80);
+insert into t (id,a) values (203,81);
+insert into t (id,a) values (203,82);
+insert into t (id,a) values (203,83);
+insert into t (id,a) values (203,84);
+insert into t (id,a) values (203,85);
+insert into t (id,a) values (203,86);
+insert into t (id,a) values (203,87);
+insert into t (id,a) values (203,88);
+insert into t (id,a) values (203,89);
+insert into t (id,a) values (203,90);
+insert into t (id,a) values (203,91);
+insert into t (id,a) values (203,92);
+insert into t (id,a) values (203,93);
+insert into t (id,a) values (203,94);
+insert into t (id,a) values (203,95);
+insert into t (id,a) values (203,96);
+insert into t (id,a) values (203,97);
+insert into t (id,a) values (203,98);
+insert into t (id,a) values (203,99);
+insert into t (id,a) values (204,0);
+insert into t (id,a) values (204,1);
+insert into t (id,a) values (204,2);
+insert into t (id,a) values (204,3);
+insert into t (id,a) values (204,4);
+insert into t (id,a) values (204,5);
+insert into t (id,a) values (204,6);
+insert into t (id,a) values (204,7);
+insert into t (id,a) values (204,8);
+insert into t (id,a) values (204,9);
+insert into t (id,a) values (204,10);
+insert into t (id,a) values (204,11);
+insert into t (id,a) values (204,12);
+insert into t (id,a) values (204,13);
+insert into t (id,a) values (204,14);
+insert into t (id,a) values (204,15);
+insert into t (id,a) values (204,16);
+insert into t (id,a) values (204,17);
+insert into t (id,a) values (204,18);
+insert into t (id,a) values (204,19);
+insert into t (id,a) values (204,20);
+insert into t (id,a) values (204,21);
+insert into t (id,a) values (204,22);
+insert into t (id,a) values (204,23);
+insert into t (id,a) values (204,24);
+insert into t (id,a) values (204,25);
+insert into t (id,a) values (204,26);
+insert into t (id,a) values (204,27);
+insert into t (id,a) values (204,28);
+insert into t (id,a) values (204,29);
+insert into t (id,a) values (204,30);
+insert into t (id,a) values (204,31);
+insert into t (id,a) values (204,32);
+insert into t (id,a) values (204,33);
+insert into t (id,a) values (204,34);
+insert into t (id,a) values (204,35);
+insert into t (id,a) values (204,36);
+insert into t (id,a) values (204,37);
+insert into t (id,a) values (204,38);
+insert into t (id,a) values (204,39);
+insert into t (id,a) values (204,40);
+insert into t (id,a) values (204,41);
+insert into t (id,a) values (204,42);
+insert into t (id,a) values (204,43);
+insert into t (id,a) values (204,44);
+insert into t (id,a) values (204,45);
+insert into t (id,a) values (204,46);
+insert into t (id,a) values (204,47);
+insert into t (id,a) values (204,48);
+insert into t (id,a) values (204,49);
+insert into t (id,a) values (204,50);
+insert into t (id,a) values (204,51);
+insert into t (id,a) values (204,52);
+insert into t (id,a) values (204,53);
+insert into t (id,a) values (204,54);
+insert into t (id,a) values (204,55);
+insert into t (id,a) values (204,56);
+insert into t (id,a) values (204,57);
+insert into t (id,a) values (204,58);
+insert into t (id,a) values (204,59);
+insert into t (id,a) values (204,60);
+insert into t (id,a) values (204,61);
+insert into t (id,a) values (204,62);
+insert into t (id,a) values (204,63);
+insert into t (id,a) values (204,64);
+insert into t (id,a) values (204,65);
+insert into t (id,a) values (204,66);
+insert into t (id,a) values (204,67);
+insert into t (id,a) values (204,68);
+insert into t (id,a) values (204,69);
+insert into t (id,a) values (204,70);
+insert into t (id,a) values (204,71);
+insert into t (id,a) values (204,72);
+insert into t (id,a) values (204,73);
+insert into t (id,a) values (204,74);
+insert into t (id,a) values (204,75);
+insert into t (id,a) values (204,76);
+insert into t (id,a) values (204,77);
+insert into t (id,a) values (204,78);
+insert into t (id,a) values (204,79);
+insert into t (id,a) values (204,80);
+insert into t (id,a) values (204,81);
+insert into t (id,a) values (204,82);
+insert into t (id,a) values (204,83);
+insert into t (id,a) values (204,84);
+insert into t (id,a) values (204,85);
+insert into t (id,a) values (204,86);
+insert into t (id,a) values (204,87);
+insert into t (id,a) values (204,88);
+insert into t (id,a) values (204,89);
+insert into t (id,a) values (204,90);
+insert into t (id,a) values (204,91);
+insert into t (id,a) values (204,92);
+insert into t (id,a) values (204,93);
+insert into t (id,a) values (204,94);
+insert into t (id,a) values (204,95);
+insert into t (id,a) values (204,96);
+insert into t (id,a) values (204,97);
+insert into t (id,a) values (204,98);
+insert into t (id,a) values (204,99);
+insert into t (id,a) values (205,0);
+insert into t (id,a) values (205,1);
+insert into t (id,a) values (205,2);
+insert into t (id,a) values (205,3);
+insert into t (id,a) values (205,4);
+insert into t (id,a) values (205,5);
+insert into t (id,a) values (205,6);
+insert into t (id,a) values (205,7);
+insert into t (id,a) values (205,8);
+insert into t (id,a) values (205,9);
+insert into t (id,a) values (205,10);
+insert into t (id,a) values (205,11);
+insert into t (id,a) values (205,12);
+insert into t (id,a) values (205,13);
+insert into t (id,a) values (205,14);
+insert into t (id,a) values (205,15);
+insert into t (id,a) values (205,16);
+insert into t (id,a) values (205,17);
+insert into t (id,a) values (205,18);
+insert into t (id,a) values (205,19);
+insert into t (id,a) values (205,20);
+insert into t (id,a) values (205,21);
+insert into t (id,a) values (205,22);
+insert into t (id,a) values (205,23);
+insert into t (id,a) values (205,24);
+insert into t (id,a) values (205,25);
+insert into t (id,a) values (205,26);
+insert into t (id,a) values (205,27);
+insert into t (id,a) values (205,28);
+insert into t (id,a) values (205,29);
+insert into t (id,a) values (205,30);
+insert into t (id,a) values (205,31);
+insert into t (id,a) values (205,32);
+insert into t (id,a) values (205,33);
+insert into t (id,a) values (205,34);
+insert into t (id,a) values (205,35);
+insert into t (id,a) values (205,36);
+insert into t (id,a) values (205,37);
+insert into t (id,a) values (205,38);
+insert into t (id,a) values (205,39);
+insert into t (id,a) values (205,40);
+insert into t (id,a) values (205,41);
+insert into t (id,a) values (205,42);
+insert into t (id,a) values (205,43);
+insert into t (id,a) values (205,44);
+insert into t (id,a) values (205,45);
+insert into t (id,a) values (205,46);
+insert into t (id,a) values (205,47);
+insert into t (id,a) values (205,48);
+insert into t (id,a) values (205,49);
+insert into t (id,a) values (205,50);
+insert into t (id,a) values (205,51);
+insert into t (id,a) values (205,52);
+insert into t (id,a) values (205,53);
+insert into t (id,a) values (205,54);
+insert into t (id,a) values (205,55);
+insert into t (id,a) values (205,56);
+insert into t (id,a) values (205,57);
+insert into t (id,a) values (205,58);
+insert into t (id,a) values (205,59);
+insert into t (id,a) values (205,60);
+insert into t (id,a) values (205,61);
+insert into t (id,a) values (205,62);
+insert into t (id,a) values (205,63);
+insert into t (id,a) values (205,64);
+insert into t (id,a) values (205,65);
+insert into t (id,a) values (205,66);
+insert into t (id,a) values (205,67);
+insert into t (id,a) values (205,68);
+insert into t (id,a) values (205,69);
+insert into t (id,a) values (205,70);
+insert into t (id,a) values (205,71);
+insert into t (id,a) values (205,72);
+insert into t (id,a) values (205,73);
+insert into t (id,a) values (205,74);
+insert into t (id,a) values (205,75);
+insert into t (id,a) values (205,76);
+insert into t (id,a) values (205,77);
+insert into t (id,a) values (205,78);
+insert into t (id,a) values (205,79);
+insert into t (id,a) values (205,80);
+insert into t (id,a) values (205,81);
+insert into t (id,a) values (205,82);
+insert into t (id,a) values (205,83);
+insert into t (id,a) values (205,84);
+insert into t (id,a) values (205,85);
+insert into t (id,a) values (205,86);
+insert into t (id,a) values (205,87);
+insert into t (id,a) values (205,88);
+insert into t (id,a) values (205,89);
+insert into t (id,a) values (205,90);
+insert into t (id,a) values (205,91);
+insert into t (id,a) values (205,92);
+insert into t (id,a) values (205,93);
+insert into t (id,a) values (205,94);
+insert into t (id,a) values (205,95);
+insert into t (id,a) values (205,96);
+insert into t (id,a) values (205,97);
+insert into t (id,a) values (205,98);
+insert into t (id,a) values (205,99);
+insert into t (id,a) values (206,0);
+insert into t (id,a) values (206,1);
+insert into t (id,a) values (206,2);
+insert into t (id,a) values (206,3);
+insert into t (id,a) values (206,4);
+insert into t (id,a) values (206,5);
+insert into t (id,a) values (206,6);
+insert into t (id,a) values (206,7);
+insert into t (id,a) values (206,8);
+insert into t (id,a) values (206,9);
+insert into t (id,a) values (206,10);
+insert into t (id,a) values (206,11);
+insert into t (id,a) values (206,12);
+insert into t (id,a) values (206,13);
+insert into t (id,a) values (206,14);
+insert into t (id,a) values (206,15);
+insert into t (id,a) values (206,16);
+insert into t (id,a) values (206,17);
+insert into t (id,a) values (206,18);
+insert into t (id,a) values (206,19);
+insert into t (id,a) values (206,20);
+insert into t (id,a) values (206,21);
+insert into t (id,a) values (206,22);
+insert into t (id,a) values (206,23);
+insert into t (id,a) values (206,24);
+insert into t (id,a) values (206,25);
+insert into t (id,a) values (206,26);
+insert into t (id,a) values (206,27);
+insert into t (id,a) values (206,28);
+insert into t (id,a) values (206,29);
+insert into t (id,a) values (206,30);
+insert into t (id,a) values (206,31);
+insert into t (id,a) values (206,32);
+insert into t (id,a) values (206,33);
+insert into t (id,a) values (206,34);
+insert into t (id,a) values (206,35);
+insert into t (id,a) values (206,36);
+insert into t (id,a) values (206,37);
+insert into t (id,a) values (206,38);
+insert into t (id,a) values (206,39);
+insert into t (id,a) values (206,40);
+insert into t (id,a) values (206,41);
+insert into t (id,a) values (206,42);
+insert into t (id,a) values (206,43);
+insert into t (id,a) values (206,44);
+insert into t (id,a) values (206,45);
+insert into t (id,a) values (206,46);
+insert into t (id,a) values (206,47);
+insert into t (id,a) values (206,48);
+insert into t (id,a) values (206,49);
+insert into t (id,a) values (206,50);
+insert into t (id,a) values (206,51);
+insert into t (id,a) values (206,52);
+insert into t (id,a) values (206,53);
+insert into t (id,a) values (206,54);
+insert into t (id,a) values (206,55);
+insert into t (id,a) values (206,56);
+insert into t (id,a) values (206,57);
+insert into t (id,a) values (206,58);
+insert into t (id,a) values (206,59);
+insert into t (id,a) values (206,60);
+insert into t (id,a) values (206,61);
+insert into t (id,a) values (206,62);
+insert into t (id,a) values (206,63);
+insert into t (id,a) values (206,64);
+insert into t (id,a) values (206,65);
+insert into t (id,a) values (206,66);
+insert into t (id,a) values (206,67);
+insert into t (id,a) values (206,68);
+insert into t (id,a) values (206,69);
+insert into t (id,a) values (206,70);
+insert into t (id,a) values (206,71);
+insert into t (id,a) values (206,72);
+insert into t (id,a) values (206,73);
+insert into t (id,a) values (206,74);
+insert into t (id,a) values (206,75);
+insert into t (id,a) values (206,76);
+insert into t (id,a) values (206,77);
+insert into t (id,a) values (206,78);
+insert into t (id,a) values (206,79);
+insert into t (id,a) values (206,80);
+insert into t (id,a) values (206,81);
+insert into t (id,a) values (206,82);
+insert into t (id,a) values (206,83);
+insert into t (id,a) values (206,84);
+insert into t (id,a) values (206,85);
+insert into t (id,a) values (206,86);
+insert into t (id,a) values (206,87);
+insert into t (id,a) values (206,88);
+insert into t (id,a) values (206,89);
+insert into t (id,a) values (206,90);
+insert into t (id,a) values (206,91);
+insert into t (id,a) values (206,92);
+insert into t (id,a) values (206,93);
+insert into t (id,a) values (206,94);
+insert into t (id,a) values (206,95);
+insert into t (id,a) values (206,96);
+insert into t (id,a) values (206,97);
+insert into t (id,a) values (206,98);
+insert into t (id,a) values (206,99);
+insert into t (id,a) values (207,0);
+insert into t (id,a) values (207,1);
+insert into t (id,a) values (207,2);
+insert into t (id,a) values (207,3);
+insert into t (id,a) values (207,4);
+insert into t (id,a) values (207,5);
+insert into t (id,a) values (207,6);
+insert into t (id,a) values (207,7);
+insert into t (id,a) values (207,8);
+insert into t (id,a) values (207,9);
+insert into t (id,a) values (207,10);
+insert into t (id,a) values (207,11);
+insert into t (id,a) values (207,12);
+insert into t (id,a) values (207,13);
+insert into t (id,a) values (207,14);
+insert into t (id,a) values (207,15);
+insert into t (id,a) values (207,16);
+insert into t (id,a) values (207,17);
+insert into t (id,a) values (207,18);
+insert into t (id,a) values (207,19);
+insert into t (id,a) values (207,20);
+insert into t (id,a) values (207,21);
+insert into t (id,a) values (207,22);
+insert into t (id,a) values (207,23);
+insert into t (id,a) values (207,24);
+insert into t (id,a) values (207,25);
+insert into t (id,a) values (207,26);
+insert into t (id,a) values (207,27);
+insert into t (id,a) values (207,28);
+insert into t (id,a) values (207,29);
+insert into t (id,a) values (207,30);
+insert into t (id,a) values (207,31);
+insert into t (id,a) values (207,32);
+insert into t (id,a) values (207,33);
+insert into t (id,a) values (207,34);
+insert into t (id,a) values (207,35);
+insert into t (id,a) values (207,36);
+insert into t (id,a) values (207,37);
+insert into t (id,a) values (207,38);
+insert into t (id,a) values (207,39);
+insert into t (id,a) values (207,40);
+insert into t (id,a) values (207,41);
+insert into t (id,a) values (207,42);
+insert into t (id,a) values (207,43);
+insert into t (id,a) values (207,44);
+insert into t (id,a) values (207,45);
+insert into t (id,a) values (207,46);
+insert into t (id,a) values (207,47);
+insert into t (id,a) values (207,48);
+insert into t (id,a) values (207,49);
+insert into t (id,a) values (207,50);
+insert into t (id,a) values (207,51);
+insert into t (id,a) values (207,52);
+insert into t (id,a) values (207,53);
+insert into t (id,a) values (207,54);
+insert into t (id,a) values (207,55);
+insert into t (id,a) values (207,56);
+insert into t (id,a) values (207,57);
+insert into t (id,a) values (207,58);
+insert into t (id,a) values (207,59);
+insert into t (id,a) values (207,60);
+insert into t (id,a) values (207,61);
+insert into t (id,a) values (207,62);
+insert into t (id,a) values (207,63);
+insert into t (id,a) values (207,64);
+insert into t (id,a) values (207,65);
+insert into t (id,a) values (207,66);
+insert into t (id,a) values (207,67);
+insert into t (id,a) values (207,68);
+insert into t (id,a) values (207,69);
+insert into t (id,a) values (207,70);
+insert into t (id,a) values (207,71);
+insert into t (id,a) values (207,72);
+insert into t (id,a) values (207,73);
+insert into t (id,a) values (207,74);
+insert into t (id,a) values (207,75);
+insert into t (id,a) values (207,76);
+insert into t (id,a) values (207,77);
+insert into t (id,a) values (207,78);
+insert into t (id,a) values (207,79);
+insert into t (id,a) values (207,80);
+insert into t (id,a) values (207,81);
+insert into t (id,a) values (207,82);
+insert into t (id,a) values (207,83);
+insert into t (id,a) values (207,84);
+insert into t (id,a) values (207,85);
+insert into t (id,a) values (207,86);
+insert into t (id,a) values (207,87);
+insert into t (id,a) values (207,88);
+insert into t (id,a) values (207,89);
+insert into t (id,a) values (207,90);
+insert into t (id,a) values (207,91);
+insert into t (id,a) values (207,92);
+insert into t (id,a) values (207,93);
+insert into t (id,a) values (207,94);
+insert into t (id,a) values (207,95);
+insert into t (id,a) values (207,96);
+insert into t (id,a) values (207,97);
+insert into t (id,a) values (207,98);
+insert into t (id,a) values (207,99);
+insert into t (id,a) values (208,0);
+insert into t (id,a) values (208,1);
+insert into t (id,a) values (208,2);
+insert into t (id,a) values (208,3);
+insert into t (id,a) values (208,4);
+insert into t (id,a) values (208,5);
+insert into t (id,a) values (208,6);
+insert into t (id,a) values (208,7);
+insert into t (id,a) values (208,8);
+insert into t (id,a) values (208,9);
+insert into t (id,a) values (208,10);
+insert into t (id,a) values (208,11);
+insert into t (id,a) values (208,12);
+insert into t (id,a) values (208,13);
+insert into t (id,a) values (208,14);
+insert into t (id,a) values (208,15);
+insert into t (id,a) values (208,16);
+insert into t (id,a) values (208,17);
+insert into t (id,a) values (208,18);
+insert into t (id,a) values (208,19);
+insert into t (id,a) values (208,20);
+insert into t (id,a) values (208,21);
+insert into t (id,a) values (208,22);
+insert into t (id,a) values (208,23);
+insert into t (id,a) values (208,24);
+insert into t (id,a) values (208,25);
+insert into t (id,a) values (208,26);
+insert into t (id,a) values (208,27);
+insert into t (id,a) values (208,28);
+insert into t (id,a) values (208,29);
+insert into t (id,a) values (208,30);
+insert into t (id,a) values (208,31);
+insert into t (id,a) values (208,32);
+insert into t (id,a) values (208,33);
+insert into t (id,a) values (208,34);
+insert into t (id,a) values (208,35);
+insert into t (id,a) values (208,36);
+insert into t (id,a) values (208,37);
+insert into t (id,a) values (208,38);
+insert into t (id,a) values (208,39);
+insert into t (id,a) values (208,40);
+insert into t (id,a) values (208,41);
+insert into t (id,a) values (208,42);
+insert into t (id,a) values (208,43);
+insert into t (id,a) values (208,44);
+insert into t (id,a) values (208,45);
+insert into t (id,a) values (208,46);
+insert into t (id,a) values (208,47);
+insert into t (id,a) values (208,48);
+insert into t (id,a) values (208,49);
+insert into t (id,a) values (208,50);
+insert into t (id,a) values (208,51);
+insert into t (id,a) values (208,52);
+insert into t (id,a) values (208,53);
+insert into t (id,a) values (208,54);
+insert into t (id,a) values (208,55);
+insert into t (id,a) values (208,56);
+insert into t (id,a) values (208,57);
+insert into t (id,a) values (208,58);
+insert into t (id,a) values (208,59);
+insert into t (id,a) values (208,60);
+insert into t (id,a) values (208,61);
+insert into t (id,a) values (208,62);
+insert into t (id,a) values (208,63);
+insert into t (id,a) values (208,64);
+insert into t (id,a) values (208,65);
+insert into t (id,a) values (208,66);
+insert into t (id,a) values (208,67);
+insert into t (id,a) values (208,68);
+insert into t (id,a) values (208,69);
+insert into t (id,a) values (208,70);
+insert into t (id,a) values (208,71);
+insert into t (id,a) values (208,72);
+insert into t (id,a) values (208,73);
+insert into t (id,a) values (208,74);
+insert into t (id,a) values (208,75);
+insert into t (id,a) values (208,76);
+insert into t (id,a) values (208,77);
+insert into t (id,a) values (208,78);
+insert into t (id,a) values (208,79);
+insert into t (id,a) values (208,80);
+insert into t (id,a) values (208,81);
+insert into t (id,a) values (208,82);
+insert into t (id,a) values (208,83);
+insert into t (id,a) values (208,84);
+insert into t (id,a) values (208,85);
+insert into t (id,a) values (208,86);
+insert into t (id,a) values (208,87);
+insert into t (id,a) values (208,88);
+insert into t (id,a) values (208,89);
+insert into t (id,a) values (208,90);
+insert into t (id,a) values (208,91);
+insert into t (id,a) values (208,92);
+insert into t (id,a) values (208,93);
+insert into t (id,a) values (208,94);
+insert into t (id,a) values (208,95);
+insert into t (id,a) values (208,96);
+insert into t (id,a) values (208,97);
+insert into t (id,a) values (208,98);
+insert into t (id,a) values (208,99);
+insert into t (id,a) values (209,0);
+insert into t (id,a) values (209,1);
+insert into t (id,a) values (209,2);
+insert into t (id,a) values (209,3);
+insert into t (id,a) values (209,4);
+insert into t (id,a) values (209,5);
+insert into t (id,a) values (209,6);
+insert into t (id,a) values (209,7);
+insert into t (id,a) values (209,8);
+insert into t (id,a) values (209,9);
+insert into t (id,a) values (209,10);
+insert into t (id,a) values (209,11);
+insert into t (id,a) values (209,12);
+insert into t (id,a) values (209,13);
+insert into t (id,a) values (209,14);
+insert into t (id,a) values (209,15);
+insert into t (id,a) values (209,16);
+insert into t (id,a) values (209,17);
+insert into t (id,a) values (209,18);
+insert into t (id,a) values (209,19);
+insert into t (id,a) values (209,20);
+insert into t (id,a) values (209,21);
+insert into t (id,a) values (209,22);
+insert into t (id,a) values (209,23);
+insert into t (id,a) values (209,24);
+insert into t (id,a) values (209,25);
+insert into t (id,a) values (209,26);
+insert into t (id,a) values (209,27);
+insert into t (id,a) values (209,28);
+insert into t (id,a) values (209,29);
+insert into t (id,a) values (209,30);
+insert into t (id,a) values (209,31);
+insert into t (id,a) values (209,32);
+insert into t (id,a) values (209,33);
+insert into t (id,a) values (209,34);
+insert into t (id,a) values (209,35);
+insert into t (id,a) values (209,36);
+insert into t (id,a) values (209,37);
+insert into t (id,a) values (209,38);
+insert into t (id,a) values (209,39);
+insert into t (id,a) values (209,40);
+insert into t (id,a) values (209,41);
+insert into t (id,a) values (209,42);
+insert into t (id,a) values (209,43);
+insert into t (id,a) values (209,44);
+insert into t (id,a) values (209,45);
+insert into t (id,a) values (209,46);
+insert into t (id,a) values (209,47);
+insert into t (id,a) values (209,48);
+insert into t (id,a) values (209,49);
+insert into t (id,a) values (209,50);
+insert into t (id,a) values (209,51);
+insert into t (id,a) values (209,52);
+insert into t (id,a) values (209,53);
+insert into t (id,a) values (209,54);
+insert into t (id,a) values (209,55);
+insert into t (id,a) values (209,56);
+insert into t (id,a) values (209,57);
+insert into t (id,a) values (209,58);
+insert into t (id,a) values (209,59);
+insert into t (id,a) values (209,60);
+insert into t (id,a) values (209,61);
+insert into t (id,a) values (209,62);
+insert into t (id,a) values (209,63);
+insert into t (id,a) values (209,64);
+insert into t (id,a) values (209,65);
+insert into t (id,a) values (209,66);
+insert into t (id,a) values (209,67);
+insert into t (id,a) values (209,68);
+insert into t (id,a) values (209,69);
+insert into t (id,a) values (209,70);
+insert into t (id,a) values (209,71);
+insert into t (id,a) values (209,72);
+insert into t (id,a) values (209,73);
+insert into t (id,a) values (209,74);
+insert into t (id,a) values (209,75);
+insert into t (id,a) values (209,76);
+insert into t (id,a) values (209,77);
+insert into t (id,a) values (209,78);
+insert into t (id,a) values (209,79);
+insert into t (id,a) values (209,80);
+insert into t (id,a) values (209,81);
+insert into t (id,a) values (209,82);
+insert into t (id,a) values (209,83);
+insert into t (id,a) values (209,84);
+insert into t (id,a) values (209,85);
+insert into t (id,a) values (209,86);
+insert into t (id,a) values (209,87);
+insert into t (id,a) values (209,88);
+insert into t (id,a) values (209,89);
+insert into t (id,a) values (209,90);
+insert into t (id,a) values (209,91);
+insert into t (id,a) values (209,92);
+insert into t (id,a) values (209,93);
+insert into t (id,a) values (209,94);
+insert into t (id,a) values (209,95);
+insert into t (id,a) values (209,96);
+insert into t (id,a) values (209,97);
+insert into t (id,a) values (209,98);
+insert into t (id,a) values (209,99);
+insert into t (id,a) values (210,0);
+insert into t (id,a) values (210,1);
+insert into t (id,a) values (210,2);
+insert into t (id,a) values (210,3);
+insert into t (id,a) values (210,4);
+insert into t (id,a) values (210,5);
+insert into t (id,a) values (210,6);
+insert into t (id,a) values (210,7);
+insert into t (id,a) values (210,8);
+insert into t (id,a) values (210,9);
+insert into t (id,a) values (210,10);
+insert into t (id,a) values (210,11);
+insert into t (id,a) values (210,12);
+insert into t (id,a) values (210,13);
+insert into t (id,a) values (210,14);
+insert into t (id,a) values (210,15);
+insert into t (id,a) values (210,16);
+insert into t (id,a) values (210,17);
+insert into t (id,a) values (210,18);
+insert into t (id,a) values (210,19);
+insert into t (id,a) values (210,20);
+insert into t (id,a) values (210,21);
+insert into t (id,a) values (210,22);
+insert into t (id,a) values (210,23);
+insert into t (id,a) values (210,24);
+insert into t (id,a) values (210,25);
+insert into t (id,a) values (210,26);
+insert into t (id,a) values (210,27);
+insert into t (id,a) values (210,28);
+insert into t (id,a) values (210,29);
+insert into t (id,a) values (210,30);
+insert into t (id,a) values (210,31);
+insert into t (id,a) values (210,32);
+insert into t (id,a) values (210,33);
+insert into t (id,a) values (210,34);
+insert into t (id,a) values (210,35);
+insert into t (id,a) values (210,36);
+insert into t (id,a) values (210,37);
+insert into t (id,a) values (210,38);
+insert into t (id,a) values (210,39);
+insert into t (id,a) values (210,40);
+insert into t (id,a) values (210,41);
+insert into t (id,a) values (210,42);
+insert into t (id,a) values (210,43);
+insert into t (id,a) values (210,44);
+insert into t (id,a) values (210,45);
+insert into t (id,a) values (210,46);
+insert into t (id,a) values (210,47);
+insert into t (id,a) values (210,48);
+insert into t (id,a) values (210,49);
+insert into t (id,a) values (210,50);
+insert into t (id,a) values (210,51);
+insert into t (id,a) values (210,52);
+insert into t (id,a) values (210,53);
+insert into t (id,a) values (210,54);
+insert into t (id,a) values (210,55);
+insert into t (id,a) values (210,56);
+insert into t (id,a) values (210,57);
+insert into t (id,a) values (210,58);
+insert into t (id,a) values (210,59);
+insert into t (id,a) values (210,60);
+insert into t (id,a) values (210,61);
+insert into t (id,a) values (210,62);
+insert into t (id,a) values (210,63);
+insert into t (id,a) values (210,64);
+insert into t (id,a) values (210,65);
+insert into t (id,a) values (210,66);
+insert into t (id,a) values (210,67);
+insert into t (id,a) values (210,68);
+insert into t (id,a) values (210,69);
+insert into t (id,a) values (210,70);
+insert into t (id,a) values (210,71);
+insert into t (id,a) values (210,72);
+insert into t (id,a) values (210,73);
+insert into t (id,a) values (210,74);
+insert into t (id,a) values (210,75);
+insert into t (id,a) values (210,76);
+insert into t (id,a) values (210,77);
+insert into t (id,a) values (210,78);
+insert into t (id,a) values (210,79);
+insert into t (id,a) values (210,80);
+insert into t (id,a) values (210,81);
+insert into t (id,a) values (210,82);
+insert into t (id,a) values (210,83);
+insert into t (id,a) values (210,84);
+insert into t (id,a) values (210,85);
+insert into t (id,a) values (210,86);
+insert into t (id,a) values (210,87);
+insert into t (id,a) values (210,88);
+insert into t (id,a) values (210,89);
+insert into t (id,a) values (210,90);
+insert into t (id,a) values (210,91);
+insert into t (id,a) values (210,92);
+insert into t (id,a) values (210,93);
+insert into t (id,a) values (210,94);
+insert into t (id,a) values (210,95);
+insert into t (id,a) values (210,96);
+insert into t (id,a) values (210,97);
+insert into t (id,a) values (210,98);
+insert into t (id,a) values (210,99);
+insert into t (id,a) values (211,0);
+insert into t (id,a) values (211,1);
+insert into t (id,a) values (211,2);
+insert into t (id,a) values (211,3);
+insert into t (id,a) values (211,4);
+insert into t (id,a) values (211,5);
+insert into t (id,a) values (211,6);
+insert into t (id,a) values (211,7);
+insert into t (id,a) values (211,8);
+insert into t (id,a) values (211,9);
+insert into t (id,a) values (211,10);
+insert into t (id,a) values (211,11);
+insert into t (id,a) values (211,12);
+insert into t (id,a) values (211,13);
+insert into t (id,a) values (211,14);
+insert into t (id,a) values (211,15);
+insert into t (id,a) values (211,16);
+insert into t (id,a) values (211,17);
+insert into t (id,a) values (211,18);
+insert into t (id,a) values (211,19);
+insert into t (id,a) values (211,20);
+insert into t (id,a) values (211,21);
+insert into t (id,a) values (211,22);
+insert into t (id,a) values (211,23);
+insert into t (id,a) values (211,24);
+insert into t (id,a) values (211,25);
+insert into t (id,a) values (211,26);
+insert into t (id,a) values (211,27);
+insert into t (id,a) values (211,28);
+insert into t (id,a) values (211,29);
+insert into t (id,a) values (211,30);
+insert into t (id,a) values (211,31);
+insert into t (id,a) values (211,32);
+insert into t (id,a) values (211,33);
+insert into t (id,a) values (211,34);
+insert into t (id,a) values (211,35);
+insert into t (id,a) values (211,36);
+insert into t (id,a) values (211,37);
+insert into t (id,a) values (211,38);
+insert into t (id,a) values (211,39);
+insert into t (id,a) values (211,40);
+insert into t (id,a) values (211,41);
+insert into t (id,a) values (211,42);
+insert into t (id,a) values (211,43);
+insert into t (id,a) values (211,44);
+insert into t (id,a) values (211,45);
+insert into t (id,a) values (211,46);
+insert into t (id,a) values (211,47);
+insert into t (id,a) values (211,48);
+insert into t (id,a) values (211,49);
+insert into t (id,a) values (211,50);
+insert into t (id,a) values (211,51);
+insert into t (id,a) values (211,52);
+insert into t (id,a) values (211,53);
+insert into t (id,a) values (211,54);
+insert into t (id,a) values (211,55);
+insert into t (id,a) values (211,56);
+insert into t (id,a) values (211,57);
+insert into t (id,a) values (211,58);
+insert into t (id,a) values (211,59);
+insert into t (id,a) values (211,60);
+insert into t (id,a) values (211,61);
+insert into t (id,a) values (211,62);
+insert into t (id,a) values (211,63);
+insert into t (id,a) values (211,64);
+insert into t (id,a) values (211,65);
+insert into t (id,a) values (211,66);
+insert into t (id,a) values (211,67);
+insert into t (id,a) values (211,68);
+insert into t (id,a) values (211,69);
+insert into t (id,a) values (211,70);
+insert into t (id,a) values (211,71);
+insert into t (id,a) values (211,72);
+insert into t (id,a) values (211,73);
+insert into t (id,a) values (211,74);
+insert into t (id,a) values (211,75);
+insert into t (id,a) values (211,76);
+insert into t (id,a) values (211,77);
+insert into t (id,a) values (211,78);
+insert into t (id,a) values (211,79);
+insert into t (id,a) values (211,80);
+insert into t (id,a) values (211,81);
+insert into t (id,a) values (211,82);
+insert into t (id,a) values (211,83);
+insert into t (id,a) values (211,84);
+insert into t (id,a) values (211,85);
+insert into t (id,a) values (211,86);
+insert into t (id,a) values (211,87);
+insert into t (id,a) values (211,88);
+insert into t (id,a) values (211,89);
+insert into t (id,a) values (211,90);
+insert into t (id,a) values (211,91);
+insert into t (id,a) values (211,92);
+insert into t (id,a) values (211,93);
+insert into t (id,a) values (211,94);
+insert into t (id,a) values (211,95);
+insert into t (id,a) values (211,96);
+insert into t (id,a) values (211,97);
+insert into t (id,a) values (211,98);
+insert into t (id,a) values (211,99);
+insert into t (id,a) values (212,0);
+insert into t (id,a) values (212,1);
+insert into t (id,a) values (212,2);
+insert into t (id,a) values (212,3);
+insert into t (id,a) values (212,4);
+insert into t (id,a) values (212,5);
+insert into t (id,a) values (212,6);
+insert into t (id,a) values (212,7);
+insert into t (id,a) values (212,8);
+insert into t (id,a) values (212,9);
+insert into t (id,a) values (212,10);
+insert into t (id,a) values (212,11);
+insert into t (id,a) values (212,12);
+insert into t (id,a) values (212,13);
+insert into t (id,a) values (212,14);
+insert into t (id,a) values (212,15);
+insert into t (id,a) values (212,16);
+insert into t (id,a) values (212,17);
+insert into t (id,a) values (212,18);
+insert into t (id,a) values (212,19);
+insert into t (id,a) values (212,20);
+insert into t (id,a) values (212,21);
+insert into t (id,a) values (212,22);
+insert into t (id,a) values (212,23);
+insert into t (id,a) values (212,24);
+insert into t (id,a) values (212,25);
+insert into t (id,a) values (212,26);
+insert into t (id,a) values (212,27);
+insert into t (id,a) values (212,28);
+insert into t (id,a) values (212,29);
+insert into t (id,a) values (212,30);
+insert into t (id,a) values (212,31);
+insert into t (id,a) values (212,32);
+insert into t (id,a) values (212,33);
+insert into t (id,a) values (212,34);
+insert into t (id,a) values (212,35);
+insert into t (id,a) values (212,36);
+insert into t (id,a) values (212,37);
+insert into t (id,a) values (212,38);
+insert into t (id,a) values (212,39);
+insert into t (id,a) values (212,40);
+insert into t (id,a) values (212,41);
+insert into t (id,a) values (212,42);
+insert into t (id,a) values (212,43);
+insert into t (id,a) values (212,44);
+insert into t (id,a) values (212,45);
+insert into t (id,a) values (212,46);
+insert into t (id,a) values (212,47);
+insert into t (id,a) values (212,48);
+insert into t (id,a) values (212,49);
+insert into t (id,a) values (212,50);
+insert into t (id,a) values (212,51);
+insert into t (id,a) values (212,52);
+insert into t (id,a) values (212,53);
+insert into t (id,a) values (212,54);
+insert into t (id,a) values (212,55);
+insert into t (id,a) values (212,56);
+insert into t (id,a) values (212,57);
+insert into t (id,a) values (212,58);
+insert into t (id,a) values (212,59);
+insert into t (id,a) values (212,60);
+insert into t (id,a) values (212,61);
+insert into t (id,a) values (212,62);
+insert into t (id,a) values (212,63);
+insert into t (id,a) values (212,64);
+insert into t (id,a) values (212,65);
+insert into t (id,a) values (212,66);
+insert into t (id,a) values (212,67);
+insert into t (id,a) values (212,68);
+insert into t (id,a) values (212,69);
+insert into t (id,a) values (212,70);
+insert into t (id,a) values (212,71);
+insert into t (id,a) values (212,72);
+insert into t (id,a) values (212,73);
+insert into t (id,a) values (212,74);
+insert into t (id,a) values (212,75);
+insert into t (id,a) values (212,76);
+insert into t (id,a) values (212,77);
+insert into t (id,a) values (212,78);
+insert into t (id,a) values (212,79);
+insert into t (id,a) values (212,80);
+insert into t (id,a) values (212,81);
+insert into t (id,a) values (212,82);
+insert into t (id,a) values (212,83);
+insert into t (id,a) values (212,84);
+insert into t (id,a) values (212,85);
+insert into t (id,a) values (212,86);
+insert into t (id,a) values (212,87);
+insert into t (id,a) values (212,88);
+insert into t (id,a) values (212,89);
+insert into t (id,a) values (212,90);
+insert into t (id,a) values (212,91);
+insert into t (id,a) values (212,92);
+insert into t (id,a) values (212,93);
+insert into t (id,a) values (212,94);
+insert into t (id,a) values (212,95);
+insert into t (id,a) values (212,96);
+insert into t (id,a) values (212,97);
+insert into t (id,a) values (212,98);
+insert into t (id,a) values (212,99);
+insert into t (id,a) values (213,0);
+insert into t (id,a) values (213,1);
+insert into t (id,a) values (213,2);
+insert into t (id,a) values (213,3);
+insert into t (id,a) values (213,4);
+insert into t (id,a) values (213,5);
+insert into t (id,a) values (213,6);
+insert into t (id,a) values (213,7);
+insert into t (id,a) values (213,8);
+insert into t (id,a) values (213,9);
+insert into t (id,a) values (213,10);
+insert into t (id,a) values (213,11);
+insert into t (id,a) values (213,12);
+insert into t (id,a) values (213,13);
+insert into t (id,a) values (213,14);
+insert into t (id,a) values (213,15);
+insert into t (id,a) values (213,16);
+insert into t (id,a) values (213,17);
+insert into t (id,a) values (213,18);
+insert into t (id,a) values (213,19);
+insert into t (id,a) values (213,20);
+insert into t (id,a) values (213,21);
+insert into t (id,a) values (213,22);
+insert into t (id,a) values (213,23);
+insert into t (id,a) values (213,24);
+insert into t (id,a) values (213,25);
+insert into t (id,a) values (213,26);
+insert into t (id,a) values (213,27);
+insert into t (id,a) values (213,28);
+insert into t (id,a) values (213,29);
+insert into t (id,a) values (213,30);
+insert into t (id,a) values (213,31);
+insert into t (id,a) values (213,32);
+insert into t (id,a) values (213,33);
+insert into t (id,a) values (213,34);
+insert into t (id,a) values (213,35);
+insert into t (id,a) values (213,36);
+insert into t (id,a) values (213,37);
+insert into t (id,a) values (213,38);
+insert into t (id,a) values (213,39);
+insert into t (id,a) values (213,40);
+insert into t (id,a) values (213,41);
+insert into t (id,a) values (213,42);
+insert into t (id,a) values (213,43);
+insert into t (id,a) values (213,44);
+insert into t (id,a) values (213,45);
+insert into t (id,a) values (213,46);
+insert into t (id,a) values (213,47);
+insert into t (id,a) values (213,48);
+insert into t (id,a) values (213,49);
+insert into t (id,a) values (213,50);
+insert into t (id,a) values (213,51);
+insert into t (id,a) values (213,52);
+insert into t (id,a) values (213,53);
+insert into t (id,a) values (213,54);
+insert into t (id,a) values (213,55);
+insert into t (id,a) values (213,56);
+insert into t (id,a) values (213,57);
+insert into t (id,a) values (213,58);
+insert into t (id,a) values (213,59);
+insert into t (id,a) values (213,60);
+insert into t (id,a) values (213,61);
+insert into t (id,a) values (213,62);
+insert into t (id,a) values (213,63);
+insert into t (id,a) values (213,64);
+insert into t (id,a) values (213,65);
+insert into t (id,a) values (213,66);
+insert into t (id,a) values (213,67);
+insert into t (id,a) values (213,68);
+insert into t (id,a) values (213,69);
+insert into t (id,a) values (213,70);
+insert into t (id,a) values (213,71);
+insert into t (id,a) values (213,72);
+insert into t (id,a) values (213,73);
+insert into t (id,a) values (213,74);
+insert into t (id,a) values (213,75);
+insert into t (id,a) values (213,76);
+insert into t (id,a) values (213,77);
+insert into t (id,a) values (213,78);
+insert into t (id,a) values (213,79);
+insert into t (id,a) values (213,80);
+insert into t (id,a) values (213,81);
+insert into t (id,a) values (213,82);
+insert into t (id,a) values (213,83);
+insert into t (id,a) values (213,84);
+insert into t (id,a) values (213,85);
+insert into t (id,a) values (213,86);
+insert into t (id,a) values (213,87);
+insert into t (id,a) values (213,88);
+insert into t (id,a) values (213,89);
+insert into t (id,a) values (213,90);
+insert into t (id,a) values (213,91);
+insert into t (id,a) values (213,92);
+insert into t (id,a) values (213,93);
+insert into t (id,a) values (213,94);
+insert into t (id,a) values (213,95);
+insert into t (id,a) values (213,96);
+insert into t (id,a) values (213,97);
+insert into t (id,a) values (213,98);
+insert into t (id,a) values (213,99);
+insert into t (id,a) values (214,0);
+insert into t (id,a) values (214,1);
+insert into t (id,a) values (214,2);
+insert into t (id,a) values (214,3);
+insert into t (id,a) values (214,4);
+insert into t (id,a) values (214,5);
+insert into t (id,a) values (214,6);
+insert into t (id,a) values (214,7);
+insert into t (id,a) values (214,8);
+insert into t (id,a) values (214,9);
+insert into t (id,a) values (214,10);
+insert into t (id,a) values (214,11);
+insert into t (id,a) values (214,12);
+insert into t (id,a) values (214,13);
+insert into t (id,a) values (214,14);
+insert into t (id,a) values (214,15);
+insert into t (id,a) values (214,16);
+insert into t (id,a) values (214,17);
+insert into t (id,a) values (214,18);
+insert into t (id,a) values (214,19);
+insert into t (id,a) values (214,20);
+insert into t (id,a) values (214,21);
+insert into t (id,a) values (214,22);
+insert into t (id,a) values (214,23);
+insert into t (id,a) values (214,24);
+insert into t (id,a) values (214,25);
+insert into t (id,a) values (214,26);
+insert into t (id,a) values (214,27);
+insert into t (id,a) values (214,28);
+insert into t (id,a) values (214,29);
+insert into t (id,a) values (214,30);
+insert into t (id,a) values (214,31);
+insert into t (id,a) values (214,32);
+insert into t (id,a) values (214,33);
+insert into t (id,a) values (214,34);
+insert into t (id,a) values (214,35);
+insert into t (id,a) values (214,36);
+insert into t (id,a) values (214,37);
+insert into t (id,a) values (214,38);
+insert into t (id,a) values (214,39);
+insert into t (id,a) values (214,40);
+insert into t (id,a) values (214,41);
+insert into t (id,a) values (214,42);
+insert into t (id,a) values (214,43);
+insert into t (id,a) values (214,44);
+insert into t (id,a) values (214,45);
+insert into t (id,a) values (214,46);
+insert into t (id,a) values (214,47);
+insert into t (id,a) values (214,48);
+insert into t (id,a) values (214,49);
+insert into t (id,a) values (214,50);
+insert into t (id,a) values (214,51);
+insert into t (id,a) values (214,52);
+insert into t (id,a) values (214,53);
+insert into t (id,a) values (214,54);
+insert into t (id,a) values (214,55);
+insert into t (id,a) values (214,56);
+insert into t (id,a) values (214,57);
+insert into t (id,a) values (214,58);
+insert into t (id,a) values (214,59);
+insert into t (id,a) values (214,60);
+insert into t (id,a) values (214,61);
+insert into t (id,a) values (214,62);
+insert into t (id,a) values (214,63);
+insert into t (id,a) values (214,64);
+insert into t (id,a) values (214,65);
+insert into t (id,a) values (214,66);
+insert into t (id,a) values (214,67);
+insert into t (id,a) values (214,68);
+insert into t (id,a) values (214,69);
+insert into t (id,a) values (214,70);
+insert into t (id,a) values (214,71);
+insert into t (id,a) values (214,72);
+insert into t (id,a) values (214,73);
+insert into t (id,a) values (214,74);
+insert into t (id,a) values (214,75);
+insert into t (id,a) values (214,76);
+insert into t (id,a) values (214,77);
+insert into t (id,a) values (214,78);
+insert into t (id,a) values (214,79);
+insert into t (id,a) values (214,80);
+insert into t (id,a) values (214,81);
+insert into t (id,a) values (214,82);
+insert into t (id,a) values (214,83);
+insert into t (id,a) values (214,84);
+insert into t (id,a) values (214,85);
+insert into t (id,a) values (214,86);
+insert into t (id,a) values (214,87);
+insert into t (id,a) values (214,88);
+insert into t (id,a) values (214,89);
+insert into t (id,a) values (214,90);
+insert into t (id,a) values (214,91);
+insert into t (id,a) values (214,92);
+insert into t (id,a) values (214,93);
+insert into t (id,a) values (214,94);
+insert into t (id,a) values (214,95);
+insert into t (id,a) values (214,96);
+insert into t (id,a) values (214,97);
+insert into t (id,a) values (214,98);
+insert into t (id,a) values (214,99);
+insert into t (id,a) values (215,0);
+insert into t (id,a) values (215,1);
+insert into t (id,a) values (215,2);
+insert into t (id,a) values (215,3);
+insert into t (id,a) values (215,4);
+insert into t (id,a) values (215,5);
+insert into t (id,a) values (215,6);
+insert into t (id,a) values (215,7);
+insert into t (id,a) values (215,8);
+insert into t (id,a) values (215,9);
+insert into t (id,a) values (215,10);
+insert into t (id,a) values (215,11);
+insert into t (id,a) values (215,12);
+insert into t (id,a) values (215,13);
+insert into t (id,a) values (215,14);
+insert into t (id,a) values (215,15);
+insert into t (id,a) values (215,16);
+insert into t (id,a) values (215,17);
+insert into t (id,a) values (215,18);
+insert into t (id,a) values (215,19);
+insert into t (id,a) values (215,20);
+insert into t (id,a) values (215,21);
+insert into t (id,a) values (215,22);
+insert into t (id,a) values (215,23);
+insert into t (id,a) values (215,24);
+insert into t (id,a) values (215,25);
+insert into t (id,a) values (215,26);
+insert into t (id,a) values (215,27);
+insert into t (id,a) values (215,28);
+insert into t (id,a) values (215,29);
+insert into t (id,a) values (215,30);
+insert into t (id,a) values (215,31);
+insert into t (id,a) values (215,32);
+insert into t (id,a) values (215,33);
+insert into t (id,a) values (215,34);
+insert into t (id,a) values (215,35);
+insert into t (id,a) values (215,36);
+insert into t (id,a) values (215,37);
+insert into t (id,a) values (215,38);
+insert into t (id,a) values (215,39);
+insert into t (id,a) values (215,40);
+insert into t (id,a) values (215,41);
+insert into t (id,a) values (215,42);
+insert into t (id,a) values (215,43);
+insert into t (id,a) values (215,44);
+insert into t (id,a) values (215,45);
+insert into t (id,a) values (215,46);
+insert into t (id,a) values (215,47);
+insert into t (id,a) values (215,48);
+insert into t (id,a) values (215,49);
+insert into t (id,a) values (215,50);
+insert into t (id,a) values (215,51);
+insert into t (id,a) values (215,52);
+insert into t (id,a) values (215,53);
+insert into t (id,a) values (215,54);
+insert into t (id,a) values (215,55);
+insert into t (id,a) values (215,56);
+insert into t (id,a) values (215,57);
+insert into t (id,a) values (215,58);
+insert into t (id,a) values (215,59);
+insert into t (id,a) values (215,60);
+insert into t (id,a) values (215,61);
+insert into t (id,a) values (215,62);
+insert into t (id,a) values (215,63);
+insert into t (id,a) values (215,64);
+insert into t (id,a) values (215,65);
+insert into t (id,a) values (215,66);
+insert into t (id,a) values (215,67);
+insert into t (id,a) values (215,68);
+insert into t (id,a) values (215,69);
+insert into t (id,a) values (215,70);
+insert into t (id,a) values (215,71);
+insert into t (id,a) values (215,72);
+insert into t (id,a) values (215,73);
+insert into t (id,a) values (215,74);
+insert into t (id,a) values (215,75);
+insert into t (id,a) values (215,76);
+insert into t (id,a) values (215,77);
+insert into t (id,a) values (215,78);
+insert into t (id,a) values (215,79);
+insert into t (id,a) values (215,80);
+insert into t (id,a) values (215,81);
+insert into t (id,a) values (215,82);
+insert into t (id,a) values (215,83);
+insert into t (id,a) values (215,84);
+insert into t (id,a) values (215,85);
+insert into t (id,a) values (215,86);
+insert into t (id,a) values (215,87);
+insert into t (id,a) values (215,88);
+insert into t (id,a) values (215,89);
+insert into t (id,a) values (215,90);
+insert into t (id,a) values (215,91);
+insert into t (id,a) values (215,92);
+insert into t (id,a) values (215,93);
+insert into t (id,a) values (215,94);
+insert into t (id,a) values (215,95);
+insert into t (id,a) values (215,96);
+insert into t (id,a) values (215,97);
+insert into t (id,a) values (215,98);
+insert into t (id,a) values (215,99);
+insert into t (id,a) values (216,0);
+insert into t (id,a) values (216,1);
+insert into t (id,a) values (216,2);
+insert into t (id,a) values (216,3);
+insert into t (id,a) values (216,4);
+insert into t (id,a) values (216,5);
+insert into t (id,a) values (216,6);
+insert into t (id,a) values (216,7);
+insert into t (id,a) values (216,8);
+insert into t (id,a) values (216,9);
+insert into t (id,a) values (216,10);
+insert into t (id,a) values (216,11);
+insert into t (id,a) values (216,12);
+insert into t (id,a) values (216,13);
+insert into t (id,a) values (216,14);
+insert into t (id,a) values (216,15);
+insert into t (id,a) values (216,16);
+insert into t (id,a) values (216,17);
+insert into t (id,a) values (216,18);
+insert into t (id,a) values (216,19);
+insert into t (id,a) values (216,20);
+insert into t (id,a) values (216,21);
+insert into t (id,a) values (216,22);
+insert into t (id,a) values (216,23);
+insert into t (id,a) values (216,24);
+insert into t (id,a) values (216,25);
+insert into t (id,a) values (216,26);
+insert into t (id,a) values (216,27);
+insert into t (id,a) values (216,28);
+insert into t (id,a) values (216,29);
+insert into t (id,a) values (216,30);
+insert into t (id,a) values (216,31);
+insert into t (id,a) values (216,32);
+insert into t (id,a) values (216,33);
+insert into t (id,a) values (216,34);
+insert into t (id,a) values (216,35);
+insert into t (id,a) values (216,36);
+insert into t (id,a) values (216,37);
+insert into t (id,a) values (216,38);
+insert into t (id,a) values (216,39);
+insert into t (id,a) values (216,40);
+insert into t (id,a) values (216,41);
+insert into t (id,a) values (216,42);
+insert into t (id,a) values (216,43);
+insert into t (id,a) values (216,44);
+insert into t (id,a) values (216,45);
+insert into t (id,a) values (216,46);
+insert into t (id,a) values (216,47);
+insert into t (id,a) values (216,48);
+insert into t (id,a) values (216,49);
+insert into t (id,a) values (216,50);
+insert into t (id,a) values (216,51);
+insert into t (id,a) values (216,52);
+insert into t (id,a) values (216,53);
+insert into t (id,a) values (216,54);
+insert into t (id,a) values (216,55);
+insert into t (id,a) values (216,56);
+insert into t (id,a) values (216,57);
+insert into t (id,a) values (216,58);
+insert into t (id,a) values (216,59);
+insert into t (id,a) values (216,60);
+insert into t (id,a) values (216,61);
+insert into t (id,a) values (216,62);
+insert into t (id,a) values (216,63);
+insert into t (id,a) values (216,64);
+insert into t (id,a) values (216,65);
+insert into t (id,a) values (216,66);
+insert into t (id,a) values (216,67);
+insert into t (id,a) values (216,68);
+insert into t (id,a) values (216,69);
+insert into t (id,a) values (216,70);
+insert into t (id,a) values (216,71);
+insert into t (id,a) values (216,72);
+insert into t (id,a) values (216,73);
+insert into t (id,a) values (216,74);
+insert into t (id,a) values (216,75);
+insert into t (id,a) values (216,76);
+insert into t (id,a) values (216,77);
+insert into t (id,a) values (216,78);
+insert into t (id,a) values (216,79);
+insert into t (id,a) values (216,80);
+insert into t (id,a) values (216,81);
+insert into t (id,a) values (216,82);
+insert into t (id,a) values (216,83);
+insert into t (id,a) values (216,84);
+insert into t (id,a) values (216,85);
+insert into t (id,a) values (216,86);
+insert into t (id,a) values (216,87);
+insert into t (id,a) values (216,88);
+insert into t (id,a) values (216,89);
+insert into t (id,a) values (216,90);
+insert into t (id,a) values (216,91);
+insert into t (id,a) values (216,92);
+insert into t (id,a) values (216,93);
+insert into t (id,a) values (216,94);
+insert into t (id,a) values (216,95);
+insert into t (id,a) values (216,96);
+insert into t (id,a) values (216,97);
+insert into t (id,a) values (216,98);
+insert into t (id,a) values (216,99);
+insert into t (id,a) values (217,0);
+insert into t (id,a) values (217,1);
+insert into t (id,a) values (217,2);
+insert into t (id,a) values (217,3);
+insert into t (id,a) values (217,4);
+insert into t (id,a) values (217,5);
+insert into t (id,a) values (217,6);
+insert into t (id,a) values (217,7);
+insert into t (id,a) values (217,8);
+insert into t (id,a) values (217,9);
+insert into t (id,a) values (217,10);
+insert into t (id,a) values (217,11);
+insert into t (id,a) values (217,12);
+insert into t (id,a) values (217,13);
+insert into t (id,a) values (217,14);
+insert into t (id,a) values (217,15);
+insert into t (id,a) values (217,16);
+insert into t (id,a) values (217,17);
+insert into t (id,a) values (217,18);
+insert into t (id,a) values (217,19);
+insert into t (id,a) values (217,20);
+insert into t (id,a) values (217,21);
+insert into t (id,a) values (217,22);
+insert into t (id,a) values (217,23);
+insert into t (id,a) values (217,24);
+insert into t (id,a) values (217,25);
+insert into t (id,a) values (217,26);
+insert into t (id,a) values (217,27);
+insert into t (id,a) values (217,28);
+insert into t (id,a) values (217,29);
+insert into t (id,a) values (217,30);
+insert into t (id,a) values (217,31);
+insert into t (id,a) values (217,32);
+insert into t (id,a) values (217,33);
+insert into t (id,a) values (217,34);
+insert into t (id,a) values (217,35);
+insert into t (id,a) values (217,36);
+insert into t (id,a) values (217,37);
+insert into t (id,a) values (217,38);
+insert into t (id,a) values (217,39);
+insert into t (id,a) values (217,40);
+insert into t (id,a) values (217,41);
+insert into t (id,a) values (217,42);
+insert into t (id,a) values (217,43);
+insert into t (id,a) values (217,44);
+insert into t (id,a) values (217,45);
+insert into t (id,a) values (217,46);
+insert into t (id,a) values (217,47);
+insert into t (id,a) values (217,48);
+insert into t (id,a) values (217,49);
+insert into t (id,a) values (217,50);
+insert into t (id,a) values (217,51);
+insert into t (id,a) values (217,52);
+insert into t (id,a) values (217,53);
+insert into t (id,a) values (217,54);
+insert into t (id,a) values (217,55);
+insert into t (id,a) values (217,56);
+insert into t (id,a) values (217,57);
+insert into t (id,a) values (217,58);
+insert into t (id,a) values (217,59);
+insert into t (id,a) values (217,60);
+insert into t (id,a) values (217,61);
+insert into t (id,a) values (217,62);
+insert into t (id,a) values (217,63);
+insert into t (id,a) values (217,64);
+insert into t (id,a) values (217,65);
+insert into t (id,a) values (217,66);
+insert into t (id,a) values (217,67);
+insert into t (id,a) values (217,68);
+insert into t (id,a) values (217,69);
+insert into t (id,a) values (217,70);
+insert into t (id,a) values (217,71);
+insert into t (id,a) values (217,72);
+insert into t (id,a) values (217,73);
+insert into t (id,a) values (217,74);
+insert into t (id,a) values (217,75);
+insert into t (id,a) values (217,76);
+insert into t (id,a) values (217,77);
+insert into t (id,a) values (217,78);
+insert into t (id,a) values (217,79);
+insert into t (id,a) values (217,80);
+insert into t (id,a) values (217,81);
+insert into t (id,a) values (217,82);
+insert into t (id,a) values (217,83);
+insert into t (id,a) values (217,84);
+insert into t (id,a) values (217,85);
+insert into t (id,a) values (217,86);
+insert into t (id,a) values (217,87);
+insert into t (id,a) values (217,88);
+insert into t (id,a) values (217,89);
+insert into t (id,a) values (217,90);
+insert into t (id,a) values (217,91);
+insert into t (id,a) values (217,92);
+insert into t (id,a) values (217,93);
+insert into t (id,a) values (217,94);
+insert into t (id,a) values (217,95);
+insert into t (id,a) values (217,96);
+insert into t (id,a) values (217,97);
+insert into t (id,a) values (217,98);
+insert into t (id,a) values (217,99);
+insert into t (id,a) values (218,0);
+insert into t (id,a) values (218,1);
+insert into t (id,a) values (218,2);
+insert into t (id,a) values (218,3);
+insert into t (id,a) values (218,4);
+insert into t (id,a) values (218,5);
+insert into t (id,a) values (218,6);
+insert into t (id,a) values (218,7);
+insert into t (id,a) values (218,8);
+insert into t (id,a) values (218,9);
+insert into t (id,a) values (218,10);
+insert into t (id,a) values (218,11);
+insert into t (id,a) values (218,12);
+insert into t (id,a) values (218,13);
+insert into t (id,a) values (218,14);
+insert into t (id,a) values (218,15);
+insert into t (id,a) values (218,16);
+insert into t (id,a) values (218,17);
+insert into t (id,a) values (218,18);
+insert into t (id,a) values (218,19);
+insert into t (id,a) values (218,20);
+insert into t (id,a) values (218,21);
+insert into t (id,a) values (218,22);
+insert into t (id,a) values (218,23);
+insert into t (id,a) values (218,24);
+insert into t (id,a) values (218,25);
+insert into t (id,a) values (218,26);
+insert into t (id,a) values (218,27);
+insert into t (id,a) values (218,28);
+insert into t (id,a) values (218,29);
+insert into t (id,a) values (218,30);
+insert into t (id,a) values (218,31);
+insert into t (id,a) values (218,32);
+insert into t (id,a) values (218,33);
+insert into t (id,a) values (218,34);
+insert into t (id,a) values (218,35);
+insert into t (id,a) values (218,36);
+insert into t (id,a) values (218,37);
+insert into t (id,a) values (218,38);
+insert into t (id,a) values (218,39);
+insert into t (id,a) values (218,40);
+insert into t (id,a) values (218,41);
+insert into t (id,a) values (218,42);
+insert into t (id,a) values (218,43);
+insert into t (id,a) values (218,44);
+insert into t (id,a) values (218,45);
+insert into t (id,a) values (218,46);
+insert into t (id,a) values (218,47);
+insert into t (id,a) values (218,48);
+insert into t (id,a) values (218,49);
+insert into t (id,a) values (218,50);
+insert into t (id,a) values (218,51);
+insert into t (id,a) values (218,52);
+insert into t (id,a) values (218,53);
+insert into t (id,a) values (218,54);
+insert into t (id,a) values (218,55);
+insert into t (id,a) values (218,56);
+insert into t (id,a) values (218,57);
+insert into t (id,a) values (218,58);
+insert into t (id,a) values (218,59);
+insert into t (id,a) values (218,60);
+insert into t (id,a) values (218,61);
+insert into t (id,a) values (218,62);
+insert into t (id,a) values (218,63);
+insert into t (id,a) values (218,64);
+insert into t (id,a) values (218,65);
+insert into t (id,a) values (218,66);
+insert into t (id,a) values (218,67);
+insert into t (id,a) values (218,68);
+insert into t (id,a) values (218,69);
+insert into t (id,a) values (218,70);
+insert into t (id,a) values (218,71);
+insert into t (id,a) values (218,72);
+insert into t (id,a) values (218,73);
+insert into t (id,a) values (218,74);
+insert into t (id,a) values (218,75);
+insert into t (id,a) values (218,76);
+insert into t (id,a) values (218,77);
+insert into t (id,a) values (218,78);
+insert into t (id,a) values (218,79);
+insert into t (id,a) values (218,80);
+insert into t (id,a) values (218,81);
+insert into t (id,a) values (218,82);
+insert into t (id,a) values (218,83);
+insert into t (id,a) values (218,84);
+insert into t (id,a) values (218,85);
+insert into t (id,a) values (218,86);
+insert into t (id,a) values (218,87);
+insert into t (id,a) values (218,88);
+insert into t (id,a) values (218,89);
+insert into t (id,a) values (218,90);
+insert into t (id,a) values (218,91);
+insert into t (id,a) values (218,92);
+insert into t (id,a) values (218,93);
+insert into t (id,a) values (218,94);
+insert into t (id,a) values (218,95);
+insert into t (id,a) values (218,96);
+insert into t (id,a) values (218,97);
+insert into t (id,a) values (218,98);
+insert into t (id,a) values (218,99);
+insert into t (id,a) values (219,0);
+insert into t (id,a) values (219,1);
+insert into t (id,a) values (219,2);
+insert into t (id,a) values (219,3);
+insert into t (id,a) values (219,4);
+insert into t (id,a) values (219,5);
+insert into t (id,a) values (219,6);
+insert into t (id,a) values (219,7);
+insert into t (id,a) values (219,8);
+insert into t (id,a) values (219,9);
+insert into t (id,a) values (219,10);
+insert into t (id,a) values (219,11);
+insert into t (id,a) values (219,12);
+insert into t (id,a) values (219,13);
+insert into t (id,a) values (219,14);
+insert into t (id,a) values (219,15);
+insert into t (id,a) values (219,16);
+insert into t (id,a) values (219,17);
+insert into t (id,a) values (219,18);
+insert into t (id,a) values (219,19);
+insert into t (id,a) values (219,20);
+insert into t (id,a) values (219,21);
+insert into t (id,a) values (219,22);
+insert into t (id,a) values (219,23);
+insert into t (id,a) values (219,24);
+insert into t (id,a) values (219,25);
+insert into t (id,a) values (219,26);
+insert into t (id,a) values (219,27);
+insert into t (id,a) values (219,28);
+insert into t (id,a) values (219,29);
+insert into t (id,a) values (219,30);
+insert into t (id,a) values (219,31);
+insert into t (id,a) values (219,32);
+insert into t (id,a) values (219,33);
+insert into t (id,a) values (219,34);
+insert into t (id,a) values (219,35);
+insert into t (id,a) values (219,36);
+insert into t (id,a) values (219,37);
+insert into t (id,a) values (219,38);
+insert into t (id,a) values (219,39);
+insert into t (id,a) values (219,40);
+insert into t (id,a) values (219,41);
+insert into t (id,a) values (219,42);
+insert into t (id,a) values (219,43);
+insert into t (id,a) values (219,44);
+insert into t (id,a) values (219,45);
+insert into t (id,a) values (219,46);
+insert into t (id,a) values (219,47);
+insert into t (id,a) values (219,48);
+insert into t (id,a) values (219,49);
+insert into t (id,a) values (219,50);
+insert into t (id,a) values (219,51);
+insert into t (id,a) values (219,52);
+insert into t (id,a) values (219,53);
+insert into t (id,a) values (219,54);
+insert into t (id,a) values (219,55);
+insert into t (id,a) values (219,56);
+insert into t (id,a) values (219,57);
+insert into t (id,a) values (219,58);
+insert into t (id,a) values (219,59);
+insert into t (id,a) values (219,60);
+insert into t (id,a) values (219,61);
+insert into t (id,a) values (219,62);
+insert into t (id,a) values (219,63);
+insert into t (id,a) values (219,64);
+insert into t (id,a) values (219,65);
+insert into t (id,a) values (219,66);
+insert into t (id,a) values (219,67);
+insert into t (id,a) values (219,68);
+insert into t (id,a) values (219,69);
+insert into t (id,a) values (219,70);
+insert into t (id,a) values (219,71);
+insert into t (id,a) values (219,72);
+insert into t (id,a) values (219,73);
+insert into t (id,a) values (219,74);
+insert into t (id,a) values (219,75);
+insert into t (id,a) values (219,76);
+insert into t (id,a) values (219,77);
+insert into t (id,a) values (219,78);
+insert into t (id,a) values (219,79);
+insert into t (id,a) values (219,80);
+insert into t (id,a) values (219,81);
+insert into t (id,a) values (219,82);
+insert into t (id,a) values (219,83);
+insert into t (id,a) values (219,84);
+insert into t (id,a) values (219,85);
+insert into t (id,a) values (219,86);
+insert into t (id,a) values (219,87);
+insert into t (id,a) values (219,88);
+insert into t (id,a) values (219,89);
+insert into t (id,a) values (219,90);
+insert into t (id,a) values (219,91);
+insert into t (id,a) values (219,92);
+insert into t (id,a) values (219,93);
+insert into t (id,a) values (219,94);
+insert into t (id,a) values (219,95);
+insert into t (id,a) values (219,96);
+insert into t (id,a) values (219,97);
+insert into t (id,a) values (219,98);
+insert into t (id,a) values (219,99);
+insert into t (id,a) values (220,0);
+insert into t (id,a) values (220,1);
+insert into t (id,a) values (220,2);
+insert into t (id,a) values (220,3);
+insert into t (id,a) values (220,4);
+insert into t (id,a) values (220,5);
+insert into t (id,a) values (220,6);
+insert into t (id,a) values (220,7);
+insert into t (id,a) values (220,8);
+insert into t (id,a) values (220,9);
+insert into t (id,a) values (220,10);
+insert into t (id,a) values (220,11);
+insert into t (id,a) values (220,12);
+insert into t (id,a) values (220,13);
+insert into t (id,a) values (220,14);
+insert into t (id,a) values (220,15);
+insert into t (id,a) values (220,16);
+insert into t (id,a) values (220,17);
+insert into t (id,a) values (220,18);
+insert into t (id,a) values (220,19);
+insert into t (id,a) values (220,20);
+insert into t (id,a) values (220,21);
+insert into t (id,a) values (220,22);
+insert into t (id,a) values (220,23);
+insert into t (id,a) values (220,24);
+insert into t (id,a) values (220,25);
+insert into t (id,a) values (220,26);
+insert into t (id,a) values (220,27);
+insert into t (id,a) values (220,28);
+insert into t (id,a) values (220,29);
+insert into t (id,a) values (220,30);
+insert into t (id,a) values (220,31);
+insert into t (id,a) values (220,32);
+insert into t (id,a) values (220,33);
+insert into t (id,a) values (220,34);
+insert into t (id,a) values (220,35);
+insert into t (id,a) values (220,36);
+insert into t (id,a) values (220,37);
+insert into t (id,a) values (220,38);
+insert into t (id,a) values (220,39);
+insert into t (id,a) values (220,40);
+insert into t (id,a) values (220,41);
+insert into t (id,a) values (220,42);
+insert into t (id,a) values (220,43);
+insert into t (id,a) values (220,44);
+insert into t (id,a) values (220,45);
+insert into t (id,a) values (220,46);
+insert into t (id,a) values (220,47);
+insert into t (id,a) values (220,48);
+insert into t (id,a) values (220,49);
+insert into t (id,a) values (220,50);
+insert into t (id,a) values (220,51);
+insert into t (id,a) values (220,52);
+insert into t (id,a) values (220,53);
+insert into t (id,a) values (220,54);
+insert into t (id,a) values (220,55);
+insert into t (id,a) values (220,56);
+insert into t (id,a) values (220,57);
+insert into t (id,a) values (220,58);
+insert into t (id,a) values (220,59);
+insert into t (id,a) values (220,60);
+insert into t (id,a) values (220,61);
+insert into t (id,a) values (220,62);
+insert into t (id,a) values (220,63);
+insert into t (id,a) values (220,64);
+insert into t (id,a) values (220,65);
+insert into t (id,a) values (220,66);
+insert into t (id,a) values (220,67);
+insert into t (id,a) values (220,68);
+insert into t (id,a) values (220,69);
+insert into t (id,a) values (220,70);
+insert into t (id,a) values (220,71);
+insert into t (id,a) values (220,72);
+insert into t (id,a) values (220,73);
+insert into t (id,a) values (220,74);
+insert into t (id,a) values (220,75);
+insert into t (id,a) values (220,76);
+insert into t (id,a) values (220,77);
+insert into t (id,a) values (220,78);
+insert into t (id,a) values (220,79);
+insert into t (id,a) values (220,80);
+insert into t (id,a) values (220,81);
+insert into t (id,a) values (220,82);
+insert into t (id,a) values (220,83);
+insert into t (id,a) values (220,84);
+insert into t (id,a) values (220,85);
+insert into t (id,a) values (220,86);
+insert into t (id,a) values (220,87);
+insert into t (id,a) values (220,88);
+insert into t (id,a) values (220,89);
+insert into t (id,a) values (220,90);
+insert into t (id,a) values (220,91);
+insert into t (id,a) values (220,92);
+insert into t (id,a) values (220,93);
+insert into t (id,a) values (220,94);
+insert into t (id,a) values (220,95);
+insert into t (id,a) values (220,96);
+insert into t (id,a) values (220,97);
+insert into t (id,a) values (220,98);
+insert into t (id,a) values (220,99);
+insert into t (id,a) values (221,0);
+insert into t (id,a) values (221,1);
+insert into t (id,a) values (221,2);
+insert into t (id,a) values (221,3);
+insert into t (id,a) values (221,4);
+insert into t (id,a) values (221,5);
+insert into t (id,a) values (221,6);
+insert into t (id,a) values (221,7);
+insert into t (id,a) values (221,8);
+insert into t (id,a) values (221,9);
+insert into t (id,a) values (221,10);
+insert into t (id,a) values (221,11);
+insert into t (id,a) values (221,12);
+insert into t (id,a) values (221,13);
+insert into t (id,a) values (221,14);
+insert into t (id,a) values (221,15);
+insert into t (id,a) values (221,16);
+insert into t (id,a) values (221,17);
+insert into t (id,a) values (221,18);
+insert into t (id,a) values (221,19);
+insert into t (id,a) values (221,20);
+insert into t (id,a) values (221,21);
+insert into t (id,a) values (221,22);
+insert into t (id,a) values (221,23);
+insert into t (id,a) values (221,24);
+insert into t (id,a) values (221,25);
+insert into t (id,a) values (221,26);
+insert into t (id,a) values (221,27);
+insert into t (id,a) values (221,28);
+insert into t (id,a) values (221,29);
+insert into t (id,a) values (221,30);
+insert into t (id,a) values (221,31);
+insert into t (id,a) values (221,32);
+insert into t (id,a) values (221,33);
+insert into t (id,a) values (221,34);
+insert into t (id,a) values (221,35);
+insert into t (id,a) values (221,36);
+insert into t (id,a) values (221,37);
+insert into t (id,a) values (221,38);
+insert into t (id,a) values (221,39);
+insert into t (id,a) values (221,40);
+insert into t (id,a) values (221,41);
+insert into t (id,a) values (221,42);
+insert into t (id,a) values (221,43);
+insert into t (id,a) values (221,44);
+insert into t (id,a) values (221,45);
+insert into t (id,a) values (221,46);
+insert into t (id,a) values (221,47);
+insert into t (id,a) values (221,48);
+insert into t (id,a) values (221,49);
+insert into t (id,a) values (221,50);
+insert into t (id,a) values (221,51);
+insert into t (id,a) values (221,52);
+insert into t (id,a) values (221,53);
+insert into t (id,a) values (221,54);
+insert into t (id,a) values (221,55);
+insert into t (id,a) values (221,56);
+insert into t (id,a) values (221,57);
+insert into t (id,a) values (221,58);
+insert into t (id,a) values (221,59);
+insert into t (id,a) values (221,60);
+insert into t (id,a) values (221,61);
+insert into t (id,a) values (221,62);
+insert into t (id,a) values (221,63);
+insert into t (id,a) values (221,64);
+insert into t (id,a) values (221,65);
+insert into t (id,a) values (221,66);
+insert into t (id,a) values (221,67);
+insert into t (id,a) values (221,68);
+insert into t (id,a) values (221,69);
+insert into t (id,a) values (221,70);
+insert into t (id,a) values (221,71);
+insert into t (id,a) values (221,72);
+insert into t (id,a) values (221,73);
+insert into t (id,a) values (221,74);
+insert into t (id,a) values (221,75);
+insert into t (id,a) values (221,76);
+insert into t (id,a) values (221,77);
+insert into t (id,a) values (221,78);
+insert into t (id,a) values (221,79);
+insert into t (id,a) values (221,80);
+insert into t (id,a) values (221,81);
+insert into t (id,a) values (221,82);
+insert into t (id,a) values (221,83);
+insert into t (id,a) values (221,84);
+insert into t (id,a) values (221,85);
+insert into t (id,a) values (221,86);
+insert into t (id,a) values (221,87);
+insert into t (id,a) values (221,88);
+insert into t (id,a) values (221,89);
+insert into t (id,a) values (221,90);
+insert into t (id,a) values (221,91);
+insert into t (id,a) values (221,92);
+insert into t (id,a) values (221,93);
+insert into t (id,a) values (221,94);
+insert into t (id,a) values (221,95);
+insert into t (id,a) values (221,96);
+insert into t (id,a) values (221,97);
+insert into t (id,a) values (221,98);
+insert into t (id,a) values (221,99);
+insert into t (id,a) values (222,0);
+insert into t (id,a) values (222,1);
+insert into t (id,a) values (222,2);
+insert into t (id,a) values (222,3);
+insert into t (id,a) values (222,4);
+insert into t (id,a) values (222,5);
+insert into t (id,a) values (222,6);
+insert into t (id,a) values (222,7);
+insert into t (id,a) values (222,8);
+insert into t (id,a) values (222,9);
+insert into t (id,a) values (222,10);
+insert into t (id,a) values (222,11);
+insert into t (id,a) values (222,12);
+insert into t (id,a) values (222,13);
+insert into t (id,a) values (222,14);
+insert into t (id,a) values (222,15);
+insert into t (id,a) values (222,16);
+insert into t (id,a) values (222,17);
+insert into t (id,a) values (222,18);
+insert into t (id,a) values (222,19);
+insert into t (id,a) values (222,20);
+insert into t (id,a) values (222,21);
+insert into t (id,a) values (222,22);
+insert into t (id,a) values (222,23);
+insert into t (id,a) values (222,24);
+insert into t (id,a) values (222,25);
+insert into t (id,a) values (222,26);
+insert into t (id,a) values (222,27);
+insert into t (id,a) values (222,28);
+insert into t (id,a) values (222,29);
+insert into t (id,a) values (222,30);
+insert into t (id,a) values (222,31);
+insert into t (id,a) values (222,32);
+insert into t (id,a) values (222,33);
+insert into t (id,a) values (222,34);
+insert into t (id,a) values (222,35);
+insert into t (id,a) values (222,36);
+insert into t (id,a) values (222,37);
+insert into t (id,a) values (222,38);
+insert into t (id,a) values (222,39);
+insert into t (id,a) values (222,40);
+insert into t (id,a) values (222,41);
+insert into t (id,a) values (222,42);
+insert into t (id,a) values (222,43);
+insert into t (id,a) values (222,44);
+insert into t (id,a) values (222,45);
+insert into t (id,a) values (222,46);
+insert into t (id,a) values (222,47);
+insert into t (id,a) values (222,48);
+insert into t (id,a) values (222,49);
+insert into t (id,a) values (222,50);
+insert into t (id,a) values (222,51);
+insert into t (id,a) values (222,52);
+insert into t (id,a) values (222,53);
+insert into t (id,a) values (222,54);
+insert into t (id,a) values (222,55);
+insert into t (id,a) values (222,56);
+insert into t (id,a) values (222,57);
+insert into t (id,a) values (222,58);
+insert into t (id,a) values (222,59);
+insert into t (id,a) values (222,60);
+insert into t (id,a) values (222,61);
+insert into t (id,a) values (222,62);
+insert into t (id,a) values (222,63);
+insert into t (id,a) values (222,64);
+insert into t (id,a) values (222,65);
+insert into t (id,a) values (222,66);
+insert into t (id,a) values (222,67);
+insert into t (id,a) values (222,68);
+insert into t (id,a) values (222,69);
+insert into t (id,a) values (222,70);
+insert into t (id,a) values (222,71);
+insert into t (id,a) values (222,72);
+insert into t (id,a) values (222,73);
+insert into t (id,a) values (222,74);
+insert into t (id,a) values (222,75);
+insert into t (id,a) values (222,76);
+insert into t (id,a) values (222,77);
+insert into t (id,a) values (222,78);
+insert into t (id,a) values (222,79);
+insert into t (id,a) values (222,80);
+insert into t (id,a) values (222,81);
+insert into t (id,a) values (222,82);
+insert into t (id,a) values (222,83);
+insert into t (id,a) values (222,84);
+insert into t (id,a) values (222,85);
+insert into t (id,a) values (222,86);
+insert into t (id,a) values (222,87);
+insert into t (id,a) values (222,88);
+insert into t (id,a) values (222,89);
+insert into t (id,a) values (222,90);
+insert into t (id,a) values (222,91);
+insert into t (id,a) values (222,92);
+insert into t (id,a) values (222,93);
+insert into t (id,a) values (222,94);
+insert into t (id,a) values (222,95);
+insert into t (id,a) values (222,96);
+insert into t (id,a) values (222,97);
+insert into t (id,a) values (222,98);
+insert into t (id,a) values (222,99);
+insert into t (id,a) values (223,0);
+insert into t (id,a) values (223,1);
+insert into t (id,a) values (223,2);
+insert into t (id,a) values (223,3);
+insert into t (id,a) values (223,4);
+insert into t (id,a) values (223,5);
+insert into t (id,a) values (223,6);
+insert into t (id,a) values (223,7);
+insert into t (id,a) values (223,8);
+insert into t (id,a) values (223,9);
+insert into t (id,a) values (223,10);
+insert into t (id,a) values (223,11);
+insert into t (id,a) values (223,12);
+insert into t (id,a) values (223,13);
+insert into t (id,a) values (223,14);
+insert into t (id,a) values (223,15);
+insert into t (id,a) values (223,16);
+insert into t (id,a) values (223,17);
+insert into t (id,a) values (223,18);
+insert into t (id,a) values (223,19);
+insert into t (id,a) values (223,20);
+insert into t (id,a) values (223,21);
+insert into t (id,a) values (223,22);
+insert into t (id,a) values (223,23);
+insert into t (id,a) values (223,24);
+insert into t (id,a) values (223,25);
+insert into t (id,a) values (223,26);
+insert into t (id,a) values (223,27);
+insert into t (id,a) values (223,28);
+insert into t (id,a) values (223,29);
+insert into t (id,a) values (223,30);
+insert into t (id,a) values (223,31);
+insert into t (id,a) values (223,32);
+insert into t (id,a) values (223,33);
+insert into t (id,a) values (223,34);
+insert into t (id,a) values (223,35);
+insert into t (id,a) values (223,36);
+insert into t (id,a) values (223,37);
+insert into t (id,a) values (223,38);
+insert into t (id,a) values (223,39);
+insert into t (id,a) values (223,40);
+insert into t (id,a) values (223,41);
+insert into t (id,a) values (223,42);
+insert into t (id,a) values (223,43);
+insert into t (id,a) values (223,44);
+insert into t (id,a) values (223,45);
+insert into t (id,a) values (223,46);
+insert into t (id,a) values (223,47);
+insert into t (id,a) values (223,48);
+insert into t (id,a) values (223,49);
+insert into t (id,a) values (223,50);
+insert into t (id,a) values (223,51);
+insert into t (id,a) values (223,52);
+insert into t (id,a) values (223,53);
+insert into t (id,a) values (223,54);
+insert into t (id,a) values (223,55);
+insert into t (id,a) values (223,56);
+insert into t (id,a) values (223,57);
+insert into t (id,a) values (223,58);
+insert into t (id,a) values (223,59);
+insert into t (id,a) values (223,60);
+insert into t (id,a) values (223,61);
+insert into t (id,a) values (223,62);
+insert into t (id,a) values (223,63);
+insert into t (id,a) values (223,64);
+insert into t (id,a) values (223,65);
+insert into t (id,a) values (223,66);
+insert into t (id,a) values (223,67);
+insert into t (id,a) values (223,68);
+insert into t (id,a) values (223,69);
+insert into t (id,a) values (223,70);
+insert into t (id,a) values (223,71);
+insert into t (id,a) values (223,72);
+insert into t (id,a) values (223,73);
+insert into t (id,a) values (223,74);
+insert into t (id,a) values (223,75);
+insert into t (id,a) values (223,76);
+insert into t (id,a) values (223,77);
+insert into t (id,a) values (223,78);
+insert into t (id,a) values (223,79);
+insert into t (id,a) values (223,80);
+insert into t (id,a) values (223,81);
+insert into t (id,a) values (223,82);
+insert into t (id,a) values (223,83);
+insert into t (id,a) values (223,84);
+insert into t (id,a) values (223,85);
+insert into t (id,a) values (223,86);
+insert into t (id,a) values (223,87);
+insert into t (id,a) values (223,88);
+insert into t (id,a) values (223,89);
+insert into t (id,a) values (223,90);
+insert into t (id,a) values (223,91);
+insert into t (id,a) values (223,92);
+insert into t (id,a) values (223,93);
+insert into t (id,a) values (223,94);
+insert into t (id,a) values (223,95);
+insert into t (id,a) values (223,96);
+insert into t (id,a) values (223,97);
+insert into t (id,a) values (223,98);
+insert into t (id,a) values (223,99);
+insert into t (id,a) values (224,0);
+insert into t (id,a) values (224,1);
+insert into t (id,a) values (224,2);
+insert into t (id,a) values (224,3);
+insert into t (id,a) values (224,4);
+insert into t (id,a) values (224,5);
+insert into t (id,a) values (224,6);
+insert into t (id,a) values (224,7);
+insert into t (id,a) values (224,8);
+insert into t (id,a) values (224,9);
+insert into t (id,a) values (224,10);
+insert into t (id,a) values (224,11);
+insert into t (id,a) values (224,12);
+insert into t (id,a) values (224,13);
+insert into t (id,a) values (224,14);
+insert into t (id,a) values (224,15);
+insert into t (id,a) values (224,16);
+insert into t (id,a) values (224,17);
+insert into t (id,a) values (224,18);
+insert into t (id,a) values (224,19);
+insert into t (id,a) values (224,20);
+insert into t (id,a) values (224,21);
+insert into t (id,a) values (224,22);
+insert into t (id,a) values (224,23);
+insert into t (id,a) values (224,24);
+insert into t (id,a) values (224,25);
+insert into t (id,a) values (224,26);
+insert into t (id,a) values (224,27);
+insert into t (id,a) values (224,28);
+insert into t (id,a) values (224,29);
+insert into t (id,a) values (224,30);
+insert into t (id,a) values (224,31);
+insert into t (id,a) values (224,32);
+insert into t (id,a) values (224,33);
+insert into t (id,a) values (224,34);
+insert into t (id,a) values (224,35);
+insert into t (id,a) values (224,36);
+insert into t (id,a) values (224,37);
+insert into t (id,a) values (224,38);
+insert into t (id,a) values (224,39);
+insert into t (id,a) values (224,40);
+insert into t (id,a) values (224,41);
+insert into t (id,a) values (224,42);
+insert into t (id,a) values (224,43);
+insert into t (id,a) values (224,44);
+insert into t (id,a) values (224,45);
+insert into t (id,a) values (224,46);
+insert into t (id,a) values (224,47);
+insert into t (id,a) values (224,48);
+insert into t (id,a) values (224,49);
+insert into t (id,a) values (224,50);
+insert into t (id,a) values (224,51);
+insert into t (id,a) values (224,52);
+insert into t (id,a) values (224,53);
+insert into t (id,a) values (224,54);
+insert into t (id,a) values (224,55);
+insert into t (id,a) values (224,56);
+insert into t (id,a) values (224,57);
+insert into t (id,a) values (224,58);
+insert into t (id,a) values (224,59);
+insert into t (id,a) values (224,60);
+insert into t (id,a) values (224,61);
+insert into t (id,a) values (224,62);
+insert into t (id,a) values (224,63);
+insert into t (id,a) values (224,64);
+insert into t (id,a) values (224,65);
+insert into t (id,a) values (224,66);
+insert into t (id,a) values (224,67);
+insert into t (id,a) values (224,68);
+insert into t (id,a) values (224,69);
+insert into t (id,a) values (224,70);
+insert into t (id,a) values (224,71);
+insert into t (id,a) values (224,72);
+insert into t (id,a) values (224,73);
+insert into t (id,a) values (224,74);
+insert into t (id,a) values (224,75);
+insert into t (id,a) values (224,76);
+insert into t (id,a) values (224,77);
+insert into t (id,a) values (224,78);
+insert into t (id,a) values (224,79);
+insert into t (id,a) values (224,80);
+insert into t (id,a) values (224,81);
+insert into t (id,a) values (224,82);
+insert into t (id,a) values (224,83);
+insert into t (id,a) values (224,84);
+insert into t (id,a) values (224,85);
+insert into t (id,a) values (224,86);
+insert into t (id,a) values (224,87);
+insert into t (id,a) values (224,88);
+insert into t (id,a) values (224,89);
+insert into t (id,a) values (224,90);
+insert into t (id,a) values (224,91);
+insert into t (id,a) values (224,92);
+insert into t (id,a) values (224,93);
+insert into t (id,a) values (224,94);
+insert into t (id,a) values (224,95);
+insert into t (id,a) values (224,96);
+insert into t (id,a) values (224,97);
+insert into t (id,a) values (224,98);
+insert into t (id,a) values (224,99);
+insert into t (id,a) values (225,0);
+insert into t (id,a) values (225,1);
+insert into t (id,a) values (225,2);
+insert into t (id,a) values (225,3);
+insert into t (id,a) values (225,4);
+insert into t (id,a) values (225,5);
+insert into t (id,a) values (225,6);
+insert into t (id,a) values (225,7);
+insert into t (id,a) values (225,8);
+insert into t (id,a) values (225,9);
+insert into t (id,a) values (225,10);
+insert into t (id,a) values (225,11);
+insert into t (id,a) values (225,12);
+insert into t (id,a) values (225,13);
+insert into t (id,a) values (225,14);
+insert into t (id,a) values (225,15);
+insert into t (id,a) values (225,16);
+insert into t (id,a) values (225,17);
+insert into t (id,a) values (225,18);
+insert into t (id,a) values (225,19);
+insert into t (id,a) values (225,20);
+insert into t (id,a) values (225,21);
+insert into t (id,a) values (225,22);
+insert into t (id,a) values (225,23);
+insert into t (id,a) values (225,24);
+insert into t (id,a) values (225,25);
+insert into t (id,a) values (225,26);
+insert into t (id,a) values (225,27);
+insert into t (id,a) values (225,28);
+insert into t (id,a) values (225,29);
+insert into t (id,a) values (225,30);
+insert into t (id,a) values (225,31);
+insert into t (id,a) values (225,32);
+insert into t (id,a) values (225,33);
+insert into t (id,a) values (225,34);
+insert into t (id,a) values (225,35);
+insert into t (id,a) values (225,36);
+insert into t (id,a) values (225,37);
+insert into t (id,a) values (225,38);
+insert into t (id,a) values (225,39);
+insert into t (id,a) values (225,40);
+insert into t (id,a) values (225,41);
+insert into t (id,a) values (225,42);
+insert into t (id,a) values (225,43);
+insert into t (id,a) values (225,44);
+insert into t (id,a) values (225,45);
+insert into t (id,a) values (225,46);
+insert into t (id,a) values (225,47);
+insert into t (id,a) values (225,48);
+insert into t (id,a) values (225,49);
+insert into t (id,a) values (225,50);
+insert into t (id,a) values (225,51);
+insert into t (id,a) values (225,52);
+insert into t (id,a) values (225,53);
+insert into t (id,a) values (225,54);
+insert into t (id,a) values (225,55);
+insert into t (id,a) values (225,56);
+insert into t (id,a) values (225,57);
+insert into t (id,a) values (225,58);
+insert into t (id,a) values (225,59);
+insert into t (id,a) values (225,60);
+insert into t (id,a) values (225,61);
+insert into t (id,a) values (225,62);
+insert into t (id,a) values (225,63);
+insert into t (id,a) values (225,64);
+insert into t (id,a) values (225,65);
+insert into t (id,a) values (225,66);
+insert into t (id,a) values (225,67);
+insert into t (id,a) values (225,68);
+insert into t (id,a) values (225,69);
+insert into t (id,a) values (225,70);
+insert into t (id,a) values (225,71);
+insert into t (id,a) values (225,72);
+insert into t (id,a) values (225,73);
+insert into t (id,a) values (225,74);
+insert into t (id,a) values (225,75);
+insert into t (id,a) values (225,76);
+insert into t (id,a) values (225,77);
+insert into t (id,a) values (225,78);
+insert into t (id,a) values (225,79);
+insert into t (id,a) values (225,80);
+insert into t (id,a) values (225,81);
+insert into t (id,a) values (225,82);
+insert into t (id,a) values (225,83);
+insert into t (id,a) values (225,84);
+insert into t (id,a) values (225,85);
+insert into t (id,a) values (225,86);
+insert into t (id,a) values (225,87);
+insert into t (id,a) values (225,88);
+insert into t (id,a) values (225,89);
+insert into t (id,a) values (225,90);
+insert into t (id,a) values (225,91);
+insert into t (id,a) values (225,92);
+insert into t (id,a) values (225,93);
+insert into t (id,a) values (225,94);
+insert into t (id,a) values (225,95);
+insert into t (id,a) values (225,96);
+insert into t (id,a) values (225,97);
+insert into t (id,a) values (225,98);
+insert into t (id,a) values (225,99);
+insert into t (id,a) values (226,0);
+insert into t (id,a) values (226,1);
+insert into t (id,a) values (226,2);
+insert into t (id,a) values (226,3);
+insert into t (id,a) values (226,4);
+insert into t (id,a) values (226,5);
+insert into t (id,a) values (226,6);
+insert into t (id,a) values (226,7);
+insert into t (id,a) values (226,8);
+insert into t (id,a) values (226,9);
+insert into t (id,a) values (226,10);
+insert into t (id,a) values (226,11);
+insert into t (id,a) values (226,12);
+insert into t (id,a) values (226,13);
+insert into t (id,a) values (226,14);
+insert into t (id,a) values (226,15);
+insert into t (id,a) values (226,16);
+insert into t (id,a) values (226,17);
+insert into t (id,a) values (226,18);
+insert into t (id,a) values (226,19);
+insert into t (id,a) values (226,20);
+insert into t (id,a) values (226,21);
+insert into t (id,a) values (226,22);
+insert into t (id,a) values (226,23);
+insert into t (id,a) values (226,24);
+insert into t (id,a) values (226,25);
+insert into t (id,a) values (226,26);
+insert into t (id,a) values (226,27);
+insert into t (id,a) values (226,28);
+insert into t (id,a) values (226,29);
+insert into t (id,a) values (226,30);
+insert into t (id,a) values (226,31);
+insert into t (id,a) values (226,32);
+insert into t (id,a) values (226,33);
+insert into t (id,a) values (226,34);
+insert into t (id,a) values (226,35);
+insert into t (id,a) values (226,36);
+insert into t (id,a) values (226,37);
+insert into t (id,a) values (226,38);
+insert into t (id,a) values (226,39);
+insert into t (id,a) values (226,40);
+insert into t (id,a) values (226,41);
+insert into t (id,a) values (226,42);
+insert into t (id,a) values (226,43);
+insert into t (id,a) values (226,44);
+insert into t (id,a) values (226,45);
+insert into t (id,a) values (226,46);
+insert into t (id,a) values (226,47);
+insert into t (id,a) values (226,48);
+insert into t (id,a) values (226,49);
+insert into t (id,a) values (226,50);
+insert into t (id,a) values (226,51);
+insert into t (id,a) values (226,52);
+insert into t (id,a) values (226,53);
+insert into t (id,a) values (226,54);
+insert into t (id,a) values (226,55);
+insert into t (id,a) values (226,56);
+insert into t (id,a) values (226,57);
+insert into t (id,a) values (226,58);
+insert into t (id,a) values (226,59);
+insert into t (id,a) values (226,60);
+insert into t (id,a) values (226,61);
+insert into t (id,a) values (226,62);
+insert into t (id,a) values (226,63);
+insert into t (id,a) values (226,64);
+insert into t (id,a) values (226,65);
+insert into t (id,a) values (226,66);
+insert into t (id,a) values (226,67);
+insert into t (id,a) values (226,68);
+insert into t (id,a) values (226,69);
+insert into t (id,a) values (226,70);
+insert into t (id,a) values (226,71);
+insert into t (id,a) values (226,72);
+insert into t (id,a) values (226,73);
+insert into t (id,a) values (226,74);
+insert into t (id,a) values (226,75);
+insert into t (id,a) values (226,76);
+insert into t (id,a) values (226,77);
+insert into t (id,a) values (226,78);
+insert into t (id,a) values (226,79);
+insert into t (id,a) values (226,80);
+insert into t (id,a) values (226,81);
+insert into t (id,a) values (226,82);
+insert into t (id,a) values (226,83);
+insert into t (id,a) values (226,84);
+insert into t (id,a) values (226,85);
+insert into t (id,a) values (226,86);
+insert into t (id,a) values (226,87);
+insert into t (id,a) values (226,88);
+insert into t (id,a) values (226,89);
+insert into t (id,a) values (226,90);
+insert into t (id,a) values (226,91);
+insert into t (id,a) values (226,92);
+insert into t (id,a) values (226,93);
+insert into t (id,a) values (226,94);
+insert into t (id,a) values (226,95);
+insert into t (id,a) values (226,96);
+insert into t (id,a) values (226,97);
+insert into t (id,a) values (226,98);
+insert into t (id,a) values (226,99);
+insert into t (id,a) values (227,0);
+insert into t (id,a) values (227,1);
+insert into t (id,a) values (227,2);
+insert into t (id,a) values (227,3);
+insert into t (id,a) values (227,4);
+insert into t (id,a) values (227,5);
+insert into t (id,a) values (227,6);
+insert into t (id,a) values (227,7);
+insert into t (id,a) values (227,8);
+insert into t (id,a) values (227,9);
+insert into t (id,a) values (227,10);
+insert into t (id,a) values (227,11);
+insert into t (id,a) values (227,12);
+insert into t (id,a) values (227,13);
+insert into t (id,a) values (227,14);
+insert into t (id,a) values (227,15);
+insert into t (id,a) values (227,16);
+insert into t (id,a) values (227,17);
+insert into t (id,a) values (227,18);
+insert into t (id,a) values (227,19);
+insert into t (id,a) values (227,20);
+insert into t (id,a) values (227,21);
+insert into t (id,a) values (227,22);
+insert into t (id,a) values (227,23);
+insert into t (id,a) values (227,24);
+insert into t (id,a) values (227,25);
+insert into t (id,a) values (227,26);
+insert into t (id,a) values (227,27);
+insert into t (id,a) values (227,28);
+insert into t (id,a) values (227,29);
+insert into t (id,a) values (227,30);
+insert into t (id,a) values (227,31);
+insert into t (id,a) values (227,32);
+insert into t (id,a) values (227,33);
+insert into t (id,a) values (227,34);
+insert into t (id,a) values (227,35);
+insert into t (id,a) values (227,36);
+insert into t (id,a) values (227,37);
+insert into t (id,a) values (227,38);
+insert into t (id,a) values (227,39);
+insert into t (id,a) values (227,40);
+insert into t (id,a) values (227,41);
+insert into t (id,a) values (227,42);
+insert into t (id,a) values (227,43);
+insert into t (id,a) values (227,44);
+insert into t (id,a) values (227,45);
+insert into t (id,a) values (227,46);
+insert into t (id,a) values (227,47);
+insert into t (id,a) values (227,48);
+insert into t (id,a) values (227,49);
+insert into t (id,a) values (227,50);
+insert into t (id,a) values (227,51);
+insert into t (id,a) values (227,52);
+insert into t (id,a) values (227,53);
+insert into t (id,a) values (227,54);
+insert into t (id,a) values (227,55);
+insert into t (id,a) values (227,56);
+insert into t (id,a) values (227,57);
+insert into t (id,a) values (227,58);
+insert into t (id,a) values (227,59);
+insert into t (id,a) values (227,60);
+insert into t (id,a) values (227,61);
+insert into t (id,a) values (227,62);
+insert into t (id,a) values (227,63);
+insert into t (id,a) values (227,64);
+insert into t (id,a) values (227,65);
+insert into t (id,a) values (227,66);
+insert into t (id,a) values (227,67);
+insert into t (id,a) values (227,68);
+insert into t (id,a) values (227,69);
+insert into t (id,a) values (227,70);
+insert into t (id,a) values (227,71);
+insert into t (id,a) values (227,72);
+insert into t (id,a) values (227,73);
+insert into t (id,a) values (227,74);
+insert into t (id,a) values (227,75);
+insert into t (id,a) values (227,76);
+insert into t (id,a) values (227,77);
+insert into t (id,a) values (227,78);
+insert into t (id,a) values (227,79);
+insert into t (id,a) values (227,80);
+insert into t (id,a) values (227,81);
+insert into t (id,a) values (227,82);
+insert into t (id,a) values (227,83);
+insert into t (id,a) values (227,84);
+insert into t (id,a) values (227,85);
+insert into t (id,a) values (227,86);
+insert into t (id,a) values (227,87);
+insert into t (id,a) values (227,88);
+insert into t (id,a) values (227,89);
+insert into t (id,a) values (227,90);
+insert into t (id,a) values (227,91);
+insert into t (id,a) values (227,92);
+insert into t (id,a) values (227,93);
+insert into t (id,a) values (227,94);
+insert into t (id,a) values (227,95);
+insert into t (id,a) values (227,96);
+insert into t (id,a) values (227,97);
+insert into t (id,a) values (227,98);
+insert into t (id,a) values (227,99);
+insert into t (id,a) values (228,0);
+insert into t (id,a) values (228,1);
+insert into t (id,a) values (228,2);
+insert into t (id,a) values (228,3);
+insert into t (id,a) values (228,4);
+insert into t (id,a) values (228,5);
+insert into t (id,a) values (228,6);
+insert into t (id,a) values (228,7);
+insert into t (id,a) values (228,8);
+insert into t (id,a) values (228,9);
+insert into t (id,a) values (228,10);
+insert into t (id,a) values (228,11);
+insert into t (id,a) values (228,12);
+insert into t (id,a) values (228,13);
+insert into t (id,a) values (228,14);
+insert into t (id,a) values (228,15);
+insert into t (id,a) values (228,16);
+insert into t (id,a) values (228,17);
+insert into t (id,a) values (228,18);
+insert into t (id,a) values (228,19);
+insert into t (id,a) values (228,20);
+insert into t (id,a) values (228,21);
+insert into t (id,a) values (228,22);
+insert into t (id,a) values (228,23);
+insert into t (id,a) values (228,24);
+insert into t (id,a) values (228,25);
+insert into t (id,a) values (228,26);
+insert into t (id,a) values (228,27);
+insert into t (id,a) values (228,28);
+insert into t (id,a) values (228,29);
+insert into t (id,a) values (228,30);
+insert into t (id,a) values (228,31);
+insert into t (id,a) values (228,32);
+insert into t (id,a) values (228,33);
+insert into t (id,a) values (228,34);
+insert into t (id,a) values (228,35);
+insert into t (id,a) values (228,36);
+insert into t (id,a) values (228,37);
+insert into t (id,a) values (228,38);
+insert into t (id,a) values (228,39);
+insert into t (id,a) values (228,40);
+insert into t (id,a) values (228,41);
+insert into t (id,a) values (228,42);
+insert into t (id,a) values (228,43);
+insert into t (id,a) values (228,44);
+insert into t (id,a) values (228,45);
+insert into t (id,a) values (228,46);
+insert into t (id,a) values (228,47);
+insert into t (id,a) values (228,48);
+insert into t (id,a) values (228,49);
+insert into t (id,a) values (228,50);
+insert into t (id,a) values (228,51);
+insert into t (id,a) values (228,52);
+insert into t (id,a) values (228,53);
+insert into t (id,a) values (228,54);
+insert into t (id,a) values (228,55);
+insert into t (id,a) values (228,56);
+insert into t (id,a) values (228,57);
+insert into t (id,a) values (228,58);
+insert into t (id,a) values (228,59);
+insert into t (id,a) values (228,60);
+insert into t (id,a) values (228,61);
+insert into t (id,a) values (228,62);
+insert into t (id,a) values (228,63);
+insert into t (id,a) values (228,64);
+insert into t (id,a) values (228,65);
+insert into t (id,a) values (228,66);
+insert into t (id,a) values (228,67);
+insert into t (id,a) values (228,68);
+insert into t (id,a) values (228,69);
+insert into t (id,a) values (228,70);
+insert into t (id,a) values (228,71);
+insert into t (id,a) values (228,72);
+insert into t (id,a) values (228,73);
+insert into t (id,a) values (228,74);
+insert into t (id,a) values (228,75);
+insert into t (id,a) values (228,76);
+insert into t (id,a) values (228,77);
+insert into t (id,a) values (228,78);
+insert into t (id,a) values (228,79);
+insert into t (id,a) values (228,80);
+insert into t (id,a) values (228,81);
+insert into t (id,a) values (228,82);
+insert into t (id,a) values (228,83);
+insert into t (id,a) values (228,84);
+insert into t (id,a) values (228,85);
+insert into t (id,a) values (228,86);
+insert into t (id,a) values (228,87);
+insert into t (id,a) values (228,88);
+insert into t (id,a) values (228,89);
+insert into t (id,a) values (228,90);
+insert into t (id,a) values (228,91);
+insert into t (id,a) values (228,92);
+insert into t (id,a) values (228,93);
+insert into t (id,a) values (228,94);
+insert into t (id,a) values (228,95);
+insert into t (id,a) values (228,96);
+insert into t (id,a) values (228,97);
+insert into t (id,a) values (228,98);
+insert into t (id,a) values (228,99);
+insert into t (id,a) values (229,0);
+insert into t (id,a) values (229,1);
+insert into t (id,a) values (229,2);
+insert into t (id,a) values (229,3);
+insert into t (id,a) values (229,4);
+insert into t (id,a) values (229,5);
+insert into t (id,a) values (229,6);
+insert into t (id,a) values (229,7);
+insert into t (id,a) values (229,8);
+insert into t (id,a) values (229,9);
+insert into t (id,a) values (229,10);
+insert into t (id,a) values (229,11);
+insert into t (id,a) values (229,12);
+insert into t (id,a) values (229,13);
+insert into t (id,a) values (229,14);
+insert into t (id,a) values (229,15);
+insert into t (id,a) values (229,16);
+insert into t (id,a) values (229,17);
+insert into t (id,a) values (229,18);
+insert into t (id,a) values (229,19);
+insert into t (id,a) values (229,20);
+insert into t (id,a) values (229,21);
+insert into t (id,a) values (229,22);
+insert into t (id,a) values (229,23);
+insert into t (id,a) values (229,24);
+insert into t (id,a) values (229,25);
+insert into t (id,a) values (229,26);
+insert into t (id,a) values (229,27);
+insert into t (id,a) values (229,28);
+insert into t (id,a) values (229,29);
+insert into t (id,a) values (229,30);
+insert into t (id,a) values (229,31);
+insert into t (id,a) values (229,32);
+insert into t (id,a) values (229,33);
+insert into t (id,a) values (229,34);
+insert into t (id,a) values (229,35);
+insert into t (id,a) values (229,36);
+insert into t (id,a) values (229,37);
+insert into t (id,a) values (229,38);
+insert into t (id,a) values (229,39);
+insert into t (id,a) values (229,40);
+insert into t (id,a) values (229,41);
+insert into t (id,a) values (229,42);
+insert into t (id,a) values (229,43);
+insert into t (id,a) values (229,44);
+insert into t (id,a) values (229,45);
+insert into t (id,a) values (229,46);
+insert into t (id,a) values (229,47);
+insert into t (id,a) values (229,48);
+insert into t (id,a) values (229,49);
+insert into t (id,a) values (229,50);
+insert into t (id,a) values (229,51);
+insert into t (id,a) values (229,52);
+insert into t (id,a) values (229,53);
+insert into t (id,a) values (229,54);
+insert into t (id,a) values (229,55);
+insert into t (id,a) values (229,56);
+insert into t (id,a) values (229,57);
+insert into t (id,a) values (229,58);
+insert into t (id,a) values (229,59);
+insert into t (id,a) values (229,60);
+insert into t (id,a) values (229,61);
+insert into t (id,a) values (229,62);
+insert into t (id,a) values (229,63);
+insert into t (id,a) values (229,64);
+insert into t (id,a) values (229,65);
+insert into t (id,a) values (229,66);
+insert into t (id,a) values (229,67);
+insert into t (id,a) values (229,68);
+insert into t (id,a) values (229,69);
+insert into t (id,a) values (229,70);
+insert into t (id,a) values (229,71);
+insert into t (id,a) values (229,72);
+insert into t (id,a) values (229,73);
+insert into t (id,a) values (229,74);
+insert into t (id,a) values (229,75);
+insert into t (id,a) values (229,76);
+insert into t (id,a) values (229,77);
+insert into t (id,a) values (229,78);
+insert into t (id,a) values (229,79);
+insert into t (id,a) values (229,80);
+insert into t (id,a) values (229,81);
+insert into t (id,a) values (229,82);
+insert into t (id,a) values (229,83);
+insert into t (id,a) values (229,84);
+insert into t (id,a) values (229,85);
+insert into t (id,a) values (229,86);
+insert into t (id,a) values (229,87);
+insert into t (id,a) values (229,88);
+insert into t (id,a) values (229,89);
+insert into t (id,a) values (229,90);
+insert into t (id,a) values (229,91);
+insert into t (id,a) values (229,92);
+insert into t (id,a) values (229,93);
+insert into t (id,a) values (229,94);
+insert into t (id,a) values (229,95);
+insert into t (id,a) values (229,96);
+insert into t (id,a) values (229,97);
+insert into t (id,a) values (229,98);
+insert into t (id,a) values (229,99);
+insert into t (id,a) values (230,0);
+insert into t (id,a) values (230,1);
+insert into t (id,a) values (230,2);
+insert into t (id,a) values (230,3);
+insert into t (id,a) values (230,4);
+insert into t (id,a) values (230,5);
+insert into t (id,a) values (230,6);
+insert into t (id,a) values (230,7);
+insert into t (id,a) values (230,8);
+insert into t (id,a) values (230,9);
+insert into t (id,a) values (230,10);
+insert into t (id,a) values (230,11);
+insert into t (id,a) values (230,12);
+insert into t (id,a) values (230,13);
+insert into t (id,a) values (230,14);
+insert into t (id,a) values (230,15);
+insert into t (id,a) values (230,16);
+insert into t (id,a) values (230,17);
+insert into t (id,a) values (230,18);
+insert into t (id,a) values (230,19);
+insert into t (id,a) values (230,20);
+insert into t (id,a) values (230,21);
+insert into t (id,a) values (230,22);
+insert into t (id,a) values (230,23);
+insert into t (id,a) values (230,24);
+insert into t (id,a) values (230,25);
+insert into t (id,a) values (230,26);
+insert into t (id,a) values (230,27);
+insert into t (id,a) values (230,28);
+insert into t (id,a) values (230,29);
+insert into t (id,a) values (230,30);
+insert into t (id,a) values (230,31);
+insert into t (id,a) values (230,32);
+insert into t (id,a) values (230,33);
+insert into t (id,a) values (230,34);
+insert into t (id,a) values (230,35);
+insert into t (id,a) values (230,36);
+insert into t (id,a) values (230,37);
+insert into t (id,a) values (230,38);
+insert into t (id,a) values (230,39);
+insert into t (id,a) values (230,40);
+insert into t (id,a) values (230,41);
+insert into t (id,a) values (230,42);
+insert into t (id,a) values (230,43);
+insert into t (id,a) values (230,44);
+insert into t (id,a) values (230,45);
+insert into t (id,a) values (230,46);
+insert into t (id,a) values (230,47);
+insert into t (id,a) values (230,48);
+insert into t (id,a) values (230,49);
+insert into t (id,a) values (230,50);
+insert into t (id,a) values (230,51);
+insert into t (id,a) values (230,52);
+insert into t (id,a) values (230,53);
+insert into t (id,a) values (230,54);
+insert into t (id,a) values (230,55);
+insert into t (id,a) values (230,56);
+insert into t (id,a) values (230,57);
+insert into t (id,a) values (230,58);
+insert into t (id,a) values (230,59);
+insert into t (id,a) values (230,60);
+insert into t (id,a) values (230,61);
+insert into t (id,a) values (230,62);
+insert into t (id,a) values (230,63);
+insert into t (id,a) values (230,64);
+insert into t (id,a) values (230,65);
+insert into t (id,a) values (230,66);
+insert into t (id,a) values (230,67);
+insert into t (id,a) values (230,68);
+insert into t (id,a) values (230,69);
+insert into t (id,a) values (230,70);
+insert into t (id,a) values (230,71);
+insert into t (id,a) values (230,72);
+insert into t (id,a) values (230,73);
+insert into t (id,a) values (230,74);
+insert into t (id,a) values (230,75);
+insert into t (id,a) values (230,76);
+insert into t (id,a) values (230,77);
+insert into t (id,a) values (230,78);
+insert into t (id,a) values (230,79);
+insert into t (id,a) values (230,80);
+insert into t (id,a) values (230,81);
+insert into t (id,a) values (230,82);
+insert into t (id,a) values (230,83);
+insert into t (id,a) values (230,84);
+insert into t (id,a) values (230,85);
+insert into t (id,a) values (230,86);
+insert into t (id,a) values (230,87);
+insert into t (id,a) values (230,88);
+insert into t (id,a) values (230,89);
+insert into t (id,a) values (230,90);
+insert into t (id,a) values (230,91);
+insert into t (id,a) values (230,92);
+insert into t (id,a) values (230,93);
+insert into t (id,a) values (230,94);
+insert into t (id,a) values (230,95);
+insert into t (id,a) values (230,96);
+insert into t (id,a) values (230,97);
+insert into t (id,a) values (230,98);
+insert into t (id,a) values (230,99);
+insert into t (id,a) values (231,0);
+insert into t (id,a) values (231,1);
+insert into t (id,a) values (231,2);
+insert into t (id,a) values (231,3);
+insert into t (id,a) values (231,4);
+insert into t (id,a) values (231,5);
+insert into t (id,a) values (231,6);
+insert into t (id,a) values (231,7);
+insert into t (id,a) values (231,8);
+insert into t (id,a) values (231,9);
+insert into t (id,a) values (231,10);
+insert into t (id,a) values (231,11);
+insert into t (id,a) values (231,12);
+insert into t (id,a) values (231,13);
+insert into t (id,a) values (231,14);
+insert into t (id,a) values (231,15);
+insert into t (id,a) values (231,16);
+insert into t (id,a) values (231,17);
+insert into t (id,a) values (231,18);
+insert into t (id,a) values (231,19);
+insert into t (id,a) values (231,20);
+insert into t (id,a) values (231,21);
+insert into t (id,a) values (231,22);
+insert into t (id,a) values (231,23);
+insert into t (id,a) values (231,24);
+insert into t (id,a) values (231,25);
+insert into t (id,a) values (231,26);
+insert into t (id,a) values (231,27);
+insert into t (id,a) values (231,28);
+insert into t (id,a) values (231,29);
+insert into t (id,a) values (231,30);
+insert into t (id,a) values (231,31);
+insert into t (id,a) values (231,32);
+insert into t (id,a) values (231,33);
+insert into t (id,a) values (231,34);
+insert into t (id,a) values (231,35);
+insert into t (id,a) values (231,36);
+insert into t (id,a) values (231,37);
+insert into t (id,a) values (231,38);
+insert into t (id,a) values (231,39);
+insert into t (id,a) values (231,40);
+insert into t (id,a) values (231,41);
+insert into t (id,a) values (231,42);
+insert into t (id,a) values (231,43);
+insert into t (id,a) values (231,44);
+insert into t (id,a) values (231,45);
+insert into t (id,a) values (231,46);
+insert into t (id,a) values (231,47);
+insert into t (id,a) values (231,48);
+insert into t (id,a) values (231,49);
+insert into t (id,a) values (231,50);
+insert into t (id,a) values (231,51);
+insert into t (id,a) values (231,52);
+insert into t (id,a) values (231,53);
+insert into t (id,a) values (231,54);
+insert into t (id,a) values (231,55);
+insert into t (id,a) values (231,56);
+insert into t (id,a) values (231,57);
+insert into t (id,a) values (231,58);
+insert into t (id,a) values (231,59);
+insert into t (id,a) values (231,60);
+insert into t (id,a) values (231,61);
+insert into t (id,a) values (231,62);
+insert into t (id,a) values (231,63);
+insert into t (id,a) values (231,64);
+insert into t (id,a) values (231,65);
+insert into t (id,a) values (231,66);
+insert into t (id,a) values (231,67);
+insert into t (id,a) values (231,68);
+insert into t (id,a) values (231,69);
+insert into t (id,a) values (231,70);
+insert into t (id,a) values (231,71);
+insert into t (id,a) values (231,72);
+insert into t (id,a) values (231,73);
+insert into t (id,a) values (231,74);
+insert into t (id,a) values (231,75);
+insert into t (id,a) values (231,76);
+insert into t (id,a) values (231,77);
+insert into t (id,a) values (231,78);
+insert into t (id,a) values (231,79);
+insert into t (id,a) values (231,80);
+insert into t (id,a) values (231,81);
+insert into t (id,a) values (231,82);
+insert into t (id,a) values (231,83);
+insert into t (id,a) values (231,84);
+insert into t (id,a) values (231,85);
+insert into t (id,a) values (231,86);
+insert into t (id,a) values (231,87);
+insert into t (id,a) values (231,88);
+insert into t (id,a) values (231,89);
+insert into t (id,a) values (231,90);
+insert into t (id,a) values (231,91);
+insert into t (id,a) values (231,92);
+insert into t (id,a) values (231,93);
+insert into t (id,a) values (231,94);
+insert into t (id,a) values (231,95);
+insert into t (id,a) values (231,96);
+insert into t (id,a) values (231,97);
+insert into t (id,a) values (231,98);
+insert into t (id,a) values (231,99);
+insert into t (id,a) values (232,0);
+insert into t (id,a) values (232,1);
+insert into t (id,a) values (232,2);
+insert into t (id,a) values (232,3);
+insert into t (id,a) values (232,4);
+insert into t (id,a) values (232,5);
+insert into t (id,a) values (232,6);
+insert into t (id,a) values (232,7);
+insert into t (id,a) values (232,8);
+insert into t (id,a) values (232,9);
+insert into t (id,a) values (232,10);
+insert into t (id,a) values (232,11);
+insert into t (id,a) values (232,12);
+insert into t (id,a) values (232,13);
+insert into t (id,a) values (232,14);
+insert into t (id,a) values (232,15);
+insert into t (id,a) values (232,16);
+insert into t (id,a) values (232,17);
+insert into t (id,a) values (232,18);
+insert into t (id,a) values (232,19);
+insert into t (id,a) values (232,20);
+insert into t (id,a) values (232,21);
+insert into t (id,a) values (232,22);
+insert into t (id,a) values (232,23);
+insert into t (id,a) values (232,24);
+insert into t (id,a) values (232,25);
+insert into t (id,a) values (232,26);
+insert into t (id,a) values (232,27);
+insert into t (id,a) values (232,28);
+insert into t (id,a) values (232,29);
+insert into t (id,a) values (232,30);
+insert into t (id,a) values (232,31);
+insert into t (id,a) values (232,32);
+insert into t (id,a) values (232,33);
+insert into t (id,a) values (232,34);
+insert into t (id,a) values (232,35);
+insert into t (id,a) values (232,36);
+insert into t (id,a) values (232,37);
+insert into t (id,a) values (232,38);
+insert into t (id,a) values (232,39);
+insert into t (id,a) values (232,40);
+insert into t (id,a) values (232,41);
+insert into t (id,a) values (232,42);
+insert into t (id,a) values (232,43);
+insert into t (id,a) values (232,44);
+insert into t (id,a) values (232,45);
+insert into t (id,a) values (232,46);
+insert into t (id,a) values (232,47);
+insert into t (id,a) values (232,48);
+insert into t (id,a) values (232,49);
+insert into t (id,a) values (232,50);
+insert into t (id,a) values (232,51);
+insert into t (id,a) values (232,52);
+insert into t (id,a) values (232,53);
+insert into t (id,a) values (232,54);
+insert into t (id,a) values (232,55);
+insert into t (id,a) values (232,56);
+insert into t (id,a) values (232,57);
+insert into t (id,a) values (232,58);
+insert into t (id,a) values (232,59);
+insert into t (id,a) values (232,60);
+insert into t (id,a) values (232,61);
+insert into t (id,a) values (232,62);
+insert into t (id,a) values (232,63);
+insert into t (id,a) values (232,64);
+insert into t (id,a) values (232,65);
+insert into t (id,a) values (232,66);
+insert into t (id,a) values (232,67);
+insert into t (id,a) values (232,68);
+insert into t (id,a) values (232,69);
+insert into t (id,a) values (232,70);
+insert into t (id,a) values (232,71);
+insert into t (id,a) values (232,72);
+insert into t (id,a) values (232,73);
+insert into t (id,a) values (232,74);
+insert into t (id,a) values (232,75);
+insert into t (id,a) values (232,76);
+insert into t (id,a) values (232,77);
+insert into t (id,a) values (232,78);
+insert into t (id,a) values (232,79);
+insert into t (id,a) values (232,80);
+insert into t (id,a) values (232,81);
+insert into t (id,a) values (232,82);
+insert into t (id,a) values (232,83);
+insert into t (id,a) values (232,84);
+insert into t (id,a) values (232,85);
+insert into t (id,a) values (232,86);
+insert into t (id,a) values (232,87);
+insert into t (id,a) values (232,88);
+insert into t (id,a) values (232,89);
+insert into t (id,a) values (232,90);
+insert into t (id,a) values (232,91);
+insert into t (id,a) values (232,92);
+insert into t (id,a) values (232,93);
+insert into t (id,a) values (232,94);
+insert into t (id,a) values (232,95);
+insert into t (id,a) values (232,96);
+insert into t (id,a) values (232,97);
+insert into t (id,a) values (232,98);
+insert into t (id,a) values (232,99);
+insert into t (id,a) values (233,0);
+insert into t (id,a) values (233,1);
+insert into t (id,a) values (233,2);
+insert into t (id,a) values (233,3);
+insert into t (id,a) values (233,4);
+insert into t (id,a) values (233,5);
+insert into t (id,a) values (233,6);
+insert into t (id,a) values (233,7);
+insert into t (id,a) values (233,8);
+insert into t (id,a) values (233,9);
+insert into t (id,a) values (233,10);
+insert into t (id,a) values (233,11);
+insert into t (id,a) values (233,12);
+insert into t (id,a) values (233,13);
+insert into t (id,a) values (233,14);
+insert into t (id,a) values (233,15);
+insert into t (id,a) values (233,16);
+insert into t (id,a) values (233,17);
+insert into t (id,a) values (233,18);
+insert into t (id,a) values (233,19);
+insert into t (id,a) values (233,20);
+insert into t (id,a) values (233,21);
+insert into t (id,a) values (233,22);
+insert into t (id,a) values (233,23);
+insert into t (id,a) values (233,24);
+insert into t (id,a) values (233,25);
+insert into t (id,a) values (233,26);
+insert into t (id,a) values (233,27);
+insert into t (id,a) values (233,28);
+insert into t (id,a) values (233,29);
+insert into t (id,a) values (233,30);
+insert into t (id,a) values (233,31);
+insert into t (id,a) values (233,32);
+insert into t (id,a) values (233,33);
+insert into t (id,a) values (233,34);
+insert into t (id,a) values (233,35);
+insert into t (id,a) values (233,36);
+insert into t (id,a) values (233,37);
+insert into t (id,a) values (233,38);
+insert into t (id,a) values (233,39);
+insert into t (id,a) values (233,40);
+insert into t (id,a) values (233,41);
+insert into t (id,a) values (233,42);
+insert into t (id,a) values (233,43);
+insert into t (id,a) values (233,44);
+insert into t (id,a) values (233,45);
+insert into t (id,a) values (233,46);
+insert into t (id,a) values (233,47);
+insert into t (id,a) values (233,48);
+insert into t (id,a) values (233,49);
+insert into t (id,a) values (233,50);
+insert into t (id,a) values (233,51);
+insert into t (id,a) values (233,52);
+insert into t (id,a) values (233,53);
+insert into t (id,a) values (233,54);
+insert into t (id,a) values (233,55);
+insert into t (id,a) values (233,56);
+insert into t (id,a) values (233,57);
+insert into t (id,a) values (233,58);
+insert into t (id,a) values (233,59);
+insert into t (id,a) values (233,60);
+insert into t (id,a) values (233,61);
+insert into t (id,a) values (233,62);
+insert into t (id,a) values (233,63);
+insert into t (id,a) values (233,64);
+insert into t (id,a) values (233,65);
+insert into t (id,a) values (233,66);
+insert into t (id,a) values (233,67);
+insert into t (id,a) values (233,68);
+insert into t (id,a) values (233,69);
+insert into t (id,a) values (233,70);
+insert into t (id,a) values (233,71);
+insert into t (id,a) values (233,72);
+insert into t (id,a) values (233,73);
+insert into t (id,a) values (233,74);
+insert into t (id,a) values (233,75);
+insert into t (id,a) values (233,76);
+insert into t (id,a) values (233,77);
+insert into t (id,a) values (233,78);
+insert into t (id,a) values (233,79);
+insert into t (id,a) values (233,80);
+insert into t (id,a) values (233,81);
+insert into t (id,a) values (233,82);
+insert into t (id,a) values (233,83);
+insert into t (id,a) values (233,84);
+insert into t (id,a) values (233,85);
+insert into t (id,a) values (233,86);
+insert into t (id,a) values (233,87);
+insert into t (id,a) values (233,88);
+insert into t (id,a) values (233,89);
+insert into t (id,a) values (233,90);
+insert into t (id,a) values (233,91);
+insert into t (id,a) values (233,92);
+insert into t (id,a) values (233,93);
+insert into t (id,a) values (233,94);
+insert into t (id,a) values (233,95);
+insert into t (id,a) values (233,96);
+insert into t (id,a) values (233,97);
+insert into t (id,a) values (233,98);
+insert into t (id,a) values (233,99);
+insert into t (id,a) values (234,0);
+insert into t (id,a) values (234,1);
+insert into t (id,a) values (234,2);
+insert into t (id,a) values (234,3);
+insert into t (id,a) values (234,4);
+insert into t (id,a) values (234,5);
+insert into t (id,a) values (234,6);
+insert into t (id,a) values (234,7);
+insert into t (id,a) values (234,8);
+insert into t (id,a) values (234,9);
+insert into t (id,a) values (234,10);
+insert into t (id,a) values (234,11);
+insert into t (id,a) values (234,12);
+insert into t (id,a) values (234,13);
+insert into t (id,a) values (234,14);
+insert into t (id,a) values (234,15);
+insert into t (id,a) values (234,16);
+insert into t (id,a) values (234,17);
+insert into t (id,a) values (234,18);
+insert into t (id,a) values (234,19);
+insert into t (id,a) values (234,20);
+insert into t (id,a) values (234,21);
+insert into t (id,a) values (234,22);
+insert into t (id,a) values (234,23);
+insert into t (id,a) values (234,24);
+insert into t (id,a) values (234,25);
+insert into t (id,a) values (234,26);
+insert into t (id,a) values (234,27);
+insert into t (id,a) values (234,28);
+insert into t (id,a) values (234,29);
+insert into t (id,a) values (234,30);
+insert into t (id,a) values (234,31);
+insert into t (id,a) values (234,32);
+insert into t (id,a) values (234,33);
+insert into t (id,a) values (234,34);
+insert into t (id,a) values (234,35);
+insert into t (id,a) values (234,36);
+insert into t (id,a) values (234,37);
+insert into t (id,a) values (234,38);
+insert into t (id,a) values (234,39);
+insert into t (id,a) values (234,40);
+insert into t (id,a) values (234,41);
+insert into t (id,a) values (234,42);
+insert into t (id,a) values (234,43);
+insert into t (id,a) values (234,44);
+insert into t (id,a) values (234,45);
+insert into t (id,a) values (234,46);
+insert into t (id,a) values (234,47);
+insert into t (id,a) values (234,48);
+insert into t (id,a) values (234,49);
+insert into t (id,a) values (234,50);
+insert into t (id,a) values (234,51);
+insert into t (id,a) values (234,52);
+insert into t (id,a) values (234,53);
+insert into t (id,a) values (234,54);
+insert into t (id,a) values (234,55);
+insert into t (id,a) values (234,56);
+insert into t (id,a) values (234,57);
+insert into t (id,a) values (234,58);
+insert into t (id,a) values (234,59);
+insert into t (id,a) values (234,60);
+insert into t (id,a) values (234,61);
+insert into t (id,a) values (234,62);
+insert into t (id,a) values (234,63);
+insert into t (id,a) values (234,64);
+insert into t (id,a) values (234,65);
+insert into t (id,a) values (234,66);
+insert into t (id,a) values (234,67);
+insert into t (id,a) values (234,68);
+insert into t (id,a) values (234,69);
+insert into t (id,a) values (234,70);
+insert into t (id,a) values (234,71);
+insert into t (id,a) values (234,72);
+insert into t (id,a) values (234,73);
+insert into t (id,a) values (234,74);
+insert into t (id,a) values (234,75);
+insert into t (id,a) values (234,76);
+insert into t (id,a) values (234,77);
+insert into t (id,a) values (234,78);
+insert into t (id,a) values (234,79);
+insert into t (id,a) values (234,80);
+insert into t (id,a) values (234,81);
+insert into t (id,a) values (234,82);
+insert into t (id,a) values (234,83);
+insert into t (id,a) values (234,84);
+insert into t (id,a) values (234,85);
+insert into t (id,a) values (234,86);
+insert into t (id,a) values (234,87);
+insert into t (id,a) values (234,88);
+insert into t (id,a) values (234,89);
+insert into t (id,a) values (234,90);
+insert into t (id,a) values (234,91);
+insert into t (id,a) values (234,92);
+insert into t (id,a) values (234,93);
+insert into t (id,a) values (234,94);
+insert into t (id,a) values (234,95);
+insert into t (id,a) values (234,96);
+insert into t (id,a) values (234,97);
+insert into t (id,a) values (234,98);
+insert into t (id,a) values (234,99);
+insert into t (id,a) values (235,0);
+insert into t (id,a) values (235,1);
+insert into t (id,a) values (235,2);
+insert into t (id,a) values (235,3);
+insert into t (id,a) values (235,4);
+insert into t (id,a) values (235,5);
+insert into t (id,a) values (235,6);
+insert into t (id,a) values (235,7);
+insert into t (id,a) values (235,8);
+insert into t (id,a) values (235,9);
+insert into t (id,a) values (235,10);
+insert into t (id,a) values (235,11);
+insert into t (id,a) values (235,12);
+insert into t (id,a) values (235,13);
+insert into t (id,a) values (235,14);
+insert into t (id,a) values (235,15);
+insert into t (id,a) values (235,16);
+insert into t (id,a) values (235,17);
+insert into t (id,a) values (235,18);
+insert into t (id,a) values (235,19);
+insert into t (id,a) values (235,20);
+insert into t (id,a) values (235,21);
+insert into t (id,a) values (235,22);
+insert into t (id,a) values (235,23);
+insert into t (id,a) values (235,24);
+insert into t (id,a) values (235,25);
+insert into t (id,a) values (235,26);
+insert into t (id,a) values (235,27);
+insert into t (id,a) values (235,28);
+insert into t (id,a) values (235,29);
+insert into t (id,a) values (235,30);
+insert into t (id,a) values (235,31);
+insert into t (id,a) values (235,32);
+insert into t (id,a) values (235,33);
+insert into t (id,a) values (235,34);
+insert into t (id,a) values (235,35);
+insert into t (id,a) values (235,36);
+insert into t (id,a) values (235,37);
+insert into t (id,a) values (235,38);
+insert into t (id,a) values (235,39);
+insert into t (id,a) values (235,40);
+insert into t (id,a) values (235,41);
+insert into t (id,a) values (235,42);
+insert into t (id,a) values (235,43);
+insert into t (id,a) values (235,44);
+insert into t (id,a) values (235,45);
+insert into t (id,a) values (235,46);
+insert into t (id,a) values (235,47);
+insert into t (id,a) values (235,48);
+insert into t (id,a) values (235,49);
+insert into t (id,a) values (235,50);
+insert into t (id,a) values (235,51);
+insert into t (id,a) values (235,52);
+insert into t (id,a) values (235,53);
+insert into t (id,a) values (235,54);
+insert into t (id,a) values (235,55);
+insert into t (id,a) values (235,56);
+insert into t (id,a) values (235,57);
+insert into t (id,a) values (235,58);
+insert into t (id,a) values (235,59);
+insert into t (id,a) values (235,60);
+insert into t (id,a) values (235,61);
+insert into t (id,a) values (235,62);
+insert into t (id,a) values (235,63);
+insert into t (id,a) values (235,64);
+insert into t (id,a) values (235,65);
+insert into t (id,a) values (235,66);
+insert into t (id,a) values (235,67);
+insert into t (id,a) values (235,68);
+insert into t (id,a) values (235,69);
+insert into t (id,a) values (235,70);
+insert into t (id,a) values (235,71);
+insert into t (id,a) values (235,72);
+insert into t (id,a) values (235,73);
+insert into t (id,a) values (235,74);
+insert into t (id,a) values (235,75);
+insert into t (id,a) values (235,76);
+insert into t (id,a) values (235,77);
+insert into t (id,a) values (235,78);
+insert into t (id,a) values (235,79);
+insert into t (id,a) values (235,80);
+insert into t (id,a) values (235,81);
+insert into t (id,a) values (235,82);
+insert into t (id,a) values (235,83);
+insert into t (id,a) values (235,84);
+insert into t (id,a) values (235,85);
+insert into t (id,a) values (235,86);
+insert into t (id,a) values (235,87);
+insert into t (id,a) values (235,88);
+insert into t (id,a) values (235,89);
+insert into t (id,a) values (235,90);
+insert into t (id,a) values (235,91);
+insert into t (id,a) values (235,92);
+insert into t (id,a) values (235,93);
+insert into t (id,a) values (235,94);
+insert into t (id,a) values (235,95);
+insert into t (id,a) values (235,96);
+insert into t (id,a) values (235,97);
+insert into t (id,a) values (235,98);
+insert into t (id,a) values (235,99);
+insert into t (id,a) values (236,0);
+insert into t (id,a) values (236,1);
+insert into t (id,a) values (236,2);
+insert into t (id,a) values (236,3);
+insert into t (id,a) values (236,4);
+insert into t (id,a) values (236,5);
+insert into t (id,a) values (236,6);
+insert into t (id,a) values (236,7);
+insert into t (id,a) values (236,8);
+insert into t (id,a) values (236,9);
+insert into t (id,a) values (236,10);
+insert into t (id,a) values (236,11);
+insert into t (id,a) values (236,12);
+insert into t (id,a) values (236,13);
+insert into t (id,a) values (236,14);
+insert into t (id,a) values (236,15);
+insert into t (id,a) values (236,16);
+insert into t (id,a) values (236,17);
+insert into t (id,a) values (236,18);
+insert into t (id,a) values (236,19);
+insert into t (id,a) values (236,20);
+insert into t (id,a) values (236,21);
+insert into t (id,a) values (236,22);
+insert into t (id,a) values (236,23);
+insert into t (id,a) values (236,24);
+insert into t (id,a) values (236,25);
+insert into t (id,a) values (236,26);
+insert into t (id,a) values (236,27);
+insert into t (id,a) values (236,28);
+insert into t (id,a) values (236,29);
+insert into t (id,a) values (236,30);
+insert into t (id,a) values (236,31);
+insert into t (id,a) values (236,32);
+insert into t (id,a) values (236,33);
+insert into t (id,a) values (236,34);
+insert into t (id,a) values (236,35);
+insert into t (id,a) values (236,36);
+insert into t (id,a) values (236,37);
+insert into t (id,a) values (236,38);
+insert into t (id,a) values (236,39);
+insert into t (id,a) values (236,40);
+insert into t (id,a) values (236,41);
+insert into t (id,a) values (236,42);
+insert into t (id,a) values (236,43);
+insert into t (id,a) values (236,44);
+insert into t (id,a) values (236,45);
+insert into t (id,a) values (236,46);
+insert into t (id,a) values (236,47);
+insert into t (id,a) values (236,48);
+insert into t (id,a) values (236,49);
+insert into t (id,a) values (236,50);
+insert into t (id,a) values (236,51);
+insert into t (id,a) values (236,52);
+insert into t (id,a) values (236,53);
+insert into t (id,a) values (236,54);
+insert into t (id,a) values (236,55);
+insert into t (id,a) values (236,56);
+insert into t (id,a) values (236,57);
+insert into t (id,a) values (236,58);
+insert into t (id,a) values (236,59);
+insert into t (id,a) values (236,60);
+insert into t (id,a) values (236,61);
+insert into t (id,a) values (236,62);
+insert into t (id,a) values (236,63);
+insert into t (id,a) values (236,64);
+insert into t (id,a) values (236,65);
+insert into t (id,a) values (236,66);
+insert into t (id,a) values (236,67);
+insert into t (id,a) values (236,68);
+insert into t (id,a) values (236,69);
+insert into t (id,a) values (236,70);
+insert into t (id,a) values (236,71);
+insert into t (id,a) values (236,72);
+insert into t (id,a) values (236,73);
+insert into t (id,a) values (236,74);
+insert into t (id,a) values (236,75);
+insert into t (id,a) values (236,76);
+insert into t (id,a) values (236,77);
+insert into t (id,a) values (236,78);
+insert into t (id,a) values (236,79);
+insert into t (id,a) values (236,80);
+insert into t (id,a) values (236,81);
+insert into t (id,a) values (236,82);
+insert into t (id,a) values (236,83);
+insert into t (id,a) values (236,84);
+insert into t (id,a) values (236,85);
+insert into t (id,a) values (236,86);
+insert into t (id,a) values (236,87);
+insert into t (id,a) values (236,88);
+insert into t (id,a) values (236,89);
+insert into t (id,a) values (236,90);
+insert into t (id,a) values (236,91);
+insert into t (id,a) values (236,92);
+insert into t (id,a) values (236,93);
+insert into t (id,a) values (236,94);
+insert into t (id,a) values (236,95);
+insert into t (id,a) values (236,96);
+insert into t (id,a) values (236,97);
+insert into t (id,a) values (236,98);
+insert into t (id,a) values (236,99);
+insert into t (id,a) values (237,0);
+insert into t (id,a) values (237,1);
+insert into t (id,a) values (237,2);
+insert into t (id,a) values (237,3);
+insert into t (id,a) values (237,4);
+insert into t (id,a) values (237,5);
+insert into t (id,a) values (237,6);
+insert into t (id,a) values (237,7);
+insert into t (id,a) values (237,8);
+insert into t (id,a) values (237,9);
+insert into t (id,a) values (237,10);
+insert into t (id,a) values (237,11);
+insert into t (id,a) values (237,12);
+insert into t (id,a) values (237,13);
+insert into t (id,a) values (237,14);
+insert into t (id,a) values (237,15);
+insert into t (id,a) values (237,16);
+insert into t (id,a) values (237,17);
+insert into t (id,a) values (237,18);
+insert into t (id,a) values (237,19);
+insert into t (id,a) values (237,20);
+insert into t (id,a) values (237,21);
+insert into t (id,a) values (237,22);
+insert into t (id,a) values (237,23);
+insert into t (id,a) values (237,24);
+insert into t (id,a) values (237,25);
+insert into t (id,a) values (237,26);
+insert into t (id,a) values (237,27);
+insert into t (id,a) values (237,28);
+insert into t (id,a) values (237,29);
+insert into t (id,a) values (237,30);
+insert into t (id,a) values (237,31);
+insert into t (id,a) values (237,32);
+insert into t (id,a) values (237,33);
+insert into t (id,a) values (237,34);
+insert into t (id,a) values (237,35);
+insert into t (id,a) values (237,36);
+insert into t (id,a) values (237,37);
+insert into t (id,a) values (237,38);
+insert into t (id,a) values (237,39);
+insert into t (id,a) values (237,40);
+insert into t (id,a) values (237,41);
+insert into t (id,a) values (237,42);
+insert into t (id,a) values (237,43);
+insert into t (id,a) values (237,44);
+insert into t (id,a) values (237,45);
+insert into t (id,a) values (237,46);
+insert into t (id,a) values (237,47);
+insert into t (id,a) values (237,48);
+insert into t (id,a) values (237,49);
+insert into t (id,a) values (237,50);
+insert into t (id,a) values (237,51);
+insert into t (id,a) values (237,52);
+insert into t (id,a) values (237,53);
+insert into t (id,a) values (237,54);
+insert into t (id,a) values (237,55);
+insert into t (id,a) values (237,56);
+insert into t (id,a) values (237,57);
+insert into t (id,a) values (237,58);
+insert into t (id,a) values (237,59);
+insert into t (id,a) values (237,60);
+insert into t (id,a) values (237,61);
+insert into t (id,a) values (237,62);
+insert into t (id,a) values (237,63);
+insert into t (id,a) values (237,64);
+insert into t (id,a) values (237,65);
+insert into t (id,a) values (237,66);
+insert into t (id,a) values (237,67);
+insert into t (id,a) values (237,68);
+insert into t (id,a) values (237,69);
+insert into t (id,a) values (237,70);
+insert into t (id,a) values (237,71);
+insert into t (id,a) values (237,72);
+insert into t (id,a) values (237,73);
+insert into t (id,a) values (237,74);
+insert into t (id,a) values (237,75);
+insert into t (id,a) values (237,76);
+insert into t (id,a) values (237,77);
+insert into t (id,a) values (237,78);
+insert into t (id,a) values (237,79);
+insert into t (id,a) values (237,80);
+insert into t (id,a) values (237,81);
+insert into t (id,a) values (237,82);
+insert into t (id,a) values (237,83);
+insert into t (id,a) values (237,84);
+insert into t (id,a) values (237,85);
+insert into t (id,a) values (237,86);
+insert into t (id,a) values (237,87);
+insert into t (id,a) values (237,88);
+insert into t (id,a) values (237,89);
+insert into t (id,a) values (237,90);
+insert into t (id,a) values (237,91);
+insert into t (id,a) values (237,92);
+insert into t (id,a) values (237,93);
+insert into t (id,a) values (237,94);
+insert into t (id,a) values (237,95);
+insert into t (id,a) values (237,96);
+insert into t (id,a) values (237,97);
+insert into t (id,a) values (237,98);
+insert into t (id,a) values (237,99);
+insert into t (id,a) values (238,0);
+insert into t (id,a) values (238,1);
+insert into t (id,a) values (238,2);
+insert into t (id,a) values (238,3);
+insert into t (id,a) values (238,4);
+insert into t (id,a) values (238,5);
+insert into t (id,a) values (238,6);
+insert into t (id,a) values (238,7);
+insert into t (id,a) values (238,8);
+insert into t (id,a) values (238,9);
+insert into t (id,a) values (238,10);
+insert into t (id,a) values (238,11);
+insert into t (id,a) values (238,12);
+insert into t (id,a) values (238,13);
+insert into t (id,a) values (238,14);
+insert into t (id,a) values (238,15);
+insert into t (id,a) values (238,16);
+insert into t (id,a) values (238,17);
+insert into t (id,a) values (238,18);
+insert into t (id,a) values (238,19);
+insert into t (id,a) values (238,20);
+insert into t (id,a) values (238,21);
+insert into t (id,a) values (238,22);
+insert into t (id,a) values (238,23);
+insert into t (id,a) values (238,24);
+insert into t (id,a) values (238,25);
+insert into t (id,a) values (238,26);
+insert into t (id,a) values (238,27);
+insert into t (id,a) values (238,28);
+insert into t (id,a) values (238,29);
+insert into t (id,a) values (238,30);
+insert into t (id,a) values (238,31);
+insert into t (id,a) values (238,32);
+insert into t (id,a) values (238,33);
+insert into t (id,a) values (238,34);
+insert into t (id,a) values (238,35);
+insert into t (id,a) values (238,36);
+insert into t (id,a) values (238,37);
+insert into t (id,a) values (238,38);
+insert into t (id,a) values (238,39);
+insert into t (id,a) values (238,40);
+insert into t (id,a) values (238,41);
+insert into t (id,a) values (238,42);
+insert into t (id,a) values (238,43);
+insert into t (id,a) values (238,44);
+insert into t (id,a) values (238,45);
+insert into t (id,a) values (238,46);
+insert into t (id,a) values (238,47);
+insert into t (id,a) values (238,48);
+insert into t (id,a) values (238,49);
+insert into t (id,a) values (238,50);
+insert into t (id,a) values (238,51);
+insert into t (id,a) values (238,52);
+insert into t (id,a) values (238,53);
+insert into t (id,a) values (238,54);
+insert into t (id,a) values (238,55);
+insert into t (id,a) values (238,56);
+insert into t (id,a) values (238,57);
+insert into t (id,a) values (238,58);
+insert into t (id,a) values (238,59);
+insert into t (id,a) values (238,60);
+insert into t (id,a) values (238,61);
+insert into t (id,a) values (238,62);
+insert into t (id,a) values (238,63);
+insert into t (id,a) values (238,64);
+insert into t (id,a) values (238,65);
+insert into t (id,a) values (238,66);
+insert into t (id,a) values (238,67);
+insert into t (id,a) values (238,68);
+insert into t (id,a) values (238,69);
+insert into t (id,a) values (238,70);
+insert into t (id,a) values (238,71);
+insert into t (id,a) values (238,72);
+insert into t (id,a) values (238,73);
+insert into t (id,a) values (238,74);
+insert into t (id,a) values (238,75);
+insert into t (id,a) values (238,76);
+insert into t (id,a) values (238,77);
+insert into t (id,a) values (238,78);
+insert into t (id,a) values (238,79);
+insert into t (id,a) values (238,80);
+insert into t (id,a) values (238,81);
+insert into t (id,a) values (238,82);
+insert into t (id,a) values (238,83);
+insert into t (id,a) values (238,84);
+insert into t (id,a) values (238,85);
+insert into t (id,a) values (238,86);
+insert into t (id,a) values (238,87);
+insert into t (id,a) values (238,88);
+insert into t (id,a) values (238,89);
+insert into t (id,a) values (238,90);
+insert into t (id,a) values (238,91);
+insert into t (id,a) values (238,92);
+insert into t (id,a) values (238,93);
+insert into t (id,a) values (238,94);
+insert into t (id,a) values (238,95);
+insert into t (id,a) values (238,96);
+insert into t (id,a) values (238,97);
+insert into t (id,a) values (238,98);
+insert into t (id,a) values (238,99);
+insert into t (id,a) values (239,0);
+insert into t (id,a) values (239,1);
+insert into t (id,a) values (239,2);
+insert into t (id,a) values (239,3);
+insert into t (id,a) values (239,4);
+insert into t (id,a) values (239,5);
+insert into t (id,a) values (239,6);
+insert into t (id,a) values (239,7);
+insert into t (id,a) values (239,8);
+insert into t (id,a) values (239,9);
+insert into t (id,a) values (239,10);
+insert into t (id,a) values (239,11);
+insert into t (id,a) values (239,12);
+insert into t (id,a) values (239,13);
+insert into t (id,a) values (239,14);
+insert into t (id,a) values (239,15);
+insert into t (id,a) values (239,16);
+insert into t (id,a) values (239,17);
+insert into t (id,a) values (239,18);
+insert into t (id,a) values (239,19);
+insert into t (id,a) values (239,20);
+insert into t (id,a) values (239,21);
+insert into t (id,a) values (239,22);
+insert into t (id,a) values (239,23);
+insert into t (id,a) values (239,24);
+insert into t (id,a) values (239,25);
+insert into t (id,a) values (239,26);
+insert into t (id,a) values (239,27);
+insert into t (id,a) values (239,28);
+insert into t (id,a) values (239,29);
+insert into t (id,a) values (239,30);
+insert into t (id,a) values (239,31);
+insert into t (id,a) values (239,32);
+insert into t (id,a) values (239,33);
+insert into t (id,a) values (239,34);
+insert into t (id,a) values (239,35);
+insert into t (id,a) values (239,36);
+insert into t (id,a) values (239,37);
+insert into t (id,a) values (239,38);
+insert into t (id,a) values (239,39);
+insert into t (id,a) values (239,40);
+insert into t (id,a) values (239,41);
+insert into t (id,a) values (239,42);
+insert into t (id,a) values (239,43);
+insert into t (id,a) values (239,44);
+insert into t (id,a) values (239,45);
+insert into t (id,a) values (239,46);
+insert into t (id,a) values (239,47);
+insert into t (id,a) values (239,48);
+insert into t (id,a) values (239,49);
+insert into t (id,a) values (239,50);
+insert into t (id,a) values (239,51);
+insert into t (id,a) values (239,52);
+insert into t (id,a) values (239,53);
+insert into t (id,a) values (239,54);
+insert into t (id,a) values (239,55);
+insert into t (id,a) values (239,56);
+insert into t (id,a) values (239,57);
+insert into t (id,a) values (239,58);
+insert into t (id,a) values (239,59);
+insert into t (id,a) values (239,60);
+insert into t (id,a) values (239,61);
+insert into t (id,a) values (239,62);
+insert into t (id,a) values (239,63);
+insert into t (id,a) values (239,64);
+insert into t (id,a) values (239,65);
+insert into t (id,a) values (239,66);
+insert into t (id,a) values (239,67);
+insert into t (id,a) values (239,68);
+insert into t (id,a) values (239,69);
+insert into t (id,a) values (239,70);
+insert into t (id,a) values (239,71);
+insert into t (id,a) values (239,72);
+insert into t (id,a) values (239,73);
+insert into t (id,a) values (239,74);
+insert into t (id,a) values (239,75);
+insert into t (id,a) values (239,76);
+insert into t (id,a) values (239,77);
+insert into t (id,a) values (239,78);
+insert into t (id,a) values (239,79);
+insert into t (id,a) values (239,80);
+insert into t (id,a) values (239,81);
+insert into t (id,a) values (239,82);
+insert into t (id,a) values (239,83);
+insert into t (id,a) values (239,84);
+insert into t (id,a) values (239,85);
+insert into t (id,a) values (239,86);
+insert into t (id,a) values (239,87);
+insert into t (id,a) values (239,88);
+insert into t (id,a) values (239,89);
+insert into t (id,a) values (239,90);
+insert into t (id,a) values (239,91);
+insert into t (id,a) values (239,92);
+insert into t (id,a) values (239,93);
+insert into t (id,a) values (239,94);
+insert into t (id,a) values (239,95);
+insert into t (id,a) values (239,96);
+insert into t (id,a) values (239,97);
+insert into t (id,a) values (239,98);
+insert into t (id,a) values (239,99);
+insert into t (id,a) values (240,0);
+insert into t (id,a) values (240,1);
+insert into t (id,a) values (240,2);
+insert into t (id,a) values (240,3);
+insert into t (id,a) values (240,4);
+insert into t (id,a) values (240,5);
+insert into t (id,a) values (240,6);
+insert into t (id,a) values (240,7);
+insert into t (id,a) values (240,8);
+insert into t (id,a) values (240,9);
+insert into t (id,a) values (240,10);
+insert into t (id,a) values (240,11);
+insert into t (id,a) values (240,12);
+insert into t (id,a) values (240,13);
+insert into t (id,a) values (240,14);
+insert into t (id,a) values (240,15);
+insert into t (id,a) values (240,16);
+insert into t (id,a) values (240,17);
+insert into t (id,a) values (240,18);
+insert into t (id,a) values (240,19);
+insert into t (id,a) values (240,20);
+insert into t (id,a) values (240,21);
+insert into t (id,a) values (240,22);
+insert into t (id,a) values (240,23);
+insert into t (id,a) values (240,24);
+insert into t (id,a) values (240,25);
+insert into t (id,a) values (240,26);
+insert into t (id,a) values (240,27);
+insert into t (id,a) values (240,28);
+insert into t (id,a) values (240,29);
+insert into t (id,a) values (240,30);
+insert into t (id,a) values (240,31);
+insert into t (id,a) values (240,32);
+insert into t (id,a) values (240,33);
+insert into t (id,a) values (240,34);
+insert into t (id,a) values (240,35);
+insert into t (id,a) values (240,36);
+insert into t (id,a) values (240,37);
+insert into t (id,a) values (240,38);
+insert into t (id,a) values (240,39);
+insert into t (id,a) values (240,40);
+insert into t (id,a) values (240,41);
+insert into t (id,a) values (240,42);
+insert into t (id,a) values (240,43);
+insert into t (id,a) values (240,44);
+insert into t (id,a) values (240,45);
+insert into t (id,a) values (240,46);
+insert into t (id,a) values (240,47);
+insert into t (id,a) values (240,48);
+insert into t (id,a) values (240,49);
+insert into t (id,a) values (240,50);
+insert into t (id,a) values (240,51);
+insert into t (id,a) values (240,52);
+insert into t (id,a) values (240,53);
+insert into t (id,a) values (240,54);
+insert into t (id,a) values (240,55);
+insert into t (id,a) values (240,56);
+insert into t (id,a) values (240,57);
+insert into t (id,a) values (240,58);
+insert into t (id,a) values (240,59);
+insert into t (id,a) values (240,60);
+insert into t (id,a) values (240,61);
+insert into t (id,a) values (240,62);
+insert into t (id,a) values (240,63);
+insert into t (id,a) values (240,64);
+insert into t (id,a) values (240,65);
+insert into t (id,a) values (240,66);
+insert into t (id,a) values (240,67);
+insert into t (id,a) values (240,68);
+insert into t (id,a) values (240,69);
+insert into t (id,a) values (240,70);
+insert into t (id,a) values (240,71);
+insert into t (id,a) values (240,72);
+insert into t (id,a) values (240,73);
+insert into t (id,a) values (240,74);
+insert into t (id,a) values (240,75);
+insert into t (id,a) values (240,76);
+insert into t (id,a) values (240,77);
+insert into t (id,a) values (240,78);
+insert into t (id,a) values (240,79);
+insert into t (id,a) values (240,80);
+insert into t (id,a) values (240,81);
+insert into t (id,a) values (240,82);
+insert into t (id,a) values (240,83);
+insert into t (id,a) values (240,84);
+insert into t (id,a) values (240,85);
+insert into t (id,a) values (240,86);
+insert into t (id,a) values (240,87);
+insert into t (id,a) values (240,88);
+insert into t (id,a) values (240,89);
+insert into t (id,a) values (240,90);
+insert into t (id,a) values (240,91);
+insert into t (id,a) values (240,92);
+insert into t (id,a) values (240,93);
+insert into t (id,a) values (240,94);
+insert into t (id,a) values (240,95);
+insert into t (id,a) values (240,96);
+insert into t (id,a) values (240,97);
+insert into t (id,a) values (240,98);
+insert into t (id,a) values (240,99);
+insert into t (id,a) values (241,0);
+insert into t (id,a) values (241,1);
+insert into t (id,a) values (241,2);
+insert into t (id,a) values (241,3);
+insert into t (id,a) values (241,4);
+insert into t (id,a) values (241,5);
+insert into t (id,a) values (241,6);
+insert into t (id,a) values (241,7);
+insert into t (id,a) values (241,8);
+insert into t (id,a) values (241,9);
+insert into t (id,a) values (241,10);
+insert into t (id,a) values (241,11);
+insert into t (id,a) values (241,12);
+insert into t (id,a) values (241,13);
+insert into t (id,a) values (241,14);
+insert into t (id,a) values (241,15);
+insert into t (id,a) values (241,16);
+insert into t (id,a) values (241,17);
+insert into t (id,a) values (241,18);
+insert into t (id,a) values (241,19);
+insert into t (id,a) values (241,20);
+insert into t (id,a) values (241,21);
+insert into t (id,a) values (241,22);
+insert into t (id,a) values (241,23);
+insert into t (id,a) values (241,24);
+insert into t (id,a) values (241,25);
+insert into t (id,a) values (241,26);
+insert into t (id,a) values (241,27);
+insert into t (id,a) values (241,28);
+insert into t (id,a) values (241,29);
+insert into t (id,a) values (241,30);
+insert into t (id,a) values (241,31);
+insert into t (id,a) values (241,32);
+insert into t (id,a) values (241,33);
+insert into t (id,a) values (241,34);
+insert into t (id,a) values (241,35);
+insert into t (id,a) values (241,36);
+insert into t (id,a) values (241,37);
+insert into t (id,a) values (241,38);
+insert into t (id,a) values (241,39);
+insert into t (id,a) values (241,40);
+insert into t (id,a) values (241,41);
+insert into t (id,a) values (241,42);
+insert into t (id,a) values (241,43);
+insert into t (id,a) values (241,44);
+insert into t (id,a) values (241,45);
+insert into t (id,a) values (241,46);
+insert into t (id,a) values (241,47);
+insert into t (id,a) values (241,48);
+insert into t (id,a) values (241,49);
+insert into t (id,a) values (241,50);
+insert into t (id,a) values (241,51);
+insert into t (id,a) values (241,52);
+insert into t (id,a) values (241,53);
+insert into t (id,a) values (241,54);
+insert into t (id,a) values (241,55);
+insert into t (id,a) values (241,56);
+insert into t (id,a) values (241,57);
+insert into t (id,a) values (241,58);
+insert into t (id,a) values (241,59);
+insert into t (id,a) values (241,60);
+insert into t (id,a) values (241,61);
+insert into t (id,a) values (241,62);
+insert into t (id,a) values (241,63);
+insert into t (id,a) values (241,64);
+insert into t (id,a) values (241,65);
+insert into t (id,a) values (241,66);
+insert into t (id,a) values (241,67);
+insert into t (id,a) values (241,68);
+insert into t (id,a) values (241,69);
+insert into t (id,a) values (241,70);
+insert into t (id,a) values (241,71);
+insert into t (id,a) values (241,72);
+insert into t (id,a) values (241,73);
+insert into t (id,a) values (241,74);
+insert into t (id,a) values (241,75);
+insert into t (id,a) values (241,76);
+insert into t (id,a) values (241,77);
+insert into t (id,a) values (241,78);
+insert into t (id,a) values (241,79);
+insert into t (id,a) values (241,80);
+insert into t (id,a) values (241,81);
+insert into t (id,a) values (241,82);
+insert into t (id,a) values (241,83);
+insert into t (id,a) values (241,84);
+insert into t (id,a) values (241,85);
+insert into t (id,a) values (241,86);
+insert into t (id,a) values (241,87);
+insert into t (id,a) values (241,88);
+insert into t (id,a) values (241,89);
+insert into t (id,a) values (241,90);
+insert into t (id,a) values (241,91);
+insert into t (id,a) values (241,92);
+insert into t (id,a) values (241,93);
+insert into t (id,a) values (241,94);
+insert into t (id,a) values (241,95);
+insert into t (id,a) values (241,96);
+insert into t (id,a) values (241,97);
+insert into t (id,a) values (241,98);
+insert into t (id,a) values (241,99);
+insert into t (id,a) values (242,0);
+insert into t (id,a) values (242,1);
+insert into t (id,a) values (242,2);
+insert into t (id,a) values (242,3);
+insert into t (id,a) values (242,4);
+insert into t (id,a) values (242,5);
+insert into t (id,a) values (242,6);
+insert into t (id,a) values (242,7);
+insert into t (id,a) values (242,8);
+insert into t (id,a) values (242,9);
+insert into t (id,a) values (242,10);
+insert into t (id,a) values (242,11);
+insert into t (id,a) values (242,12);
+insert into t (id,a) values (242,13);
+insert into t (id,a) values (242,14);
+insert into t (id,a) values (242,15);
+insert into t (id,a) values (242,16);
+insert into t (id,a) values (242,17);
+insert into t (id,a) values (242,18);
+insert into t (id,a) values (242,19);
+insert into t (id,a) values (242,20);
+insert into t (id,a) values (242,21);
+insert into t (id,a) values (242,22);
+insert into t (id,a) values (242,23);
+insert into t (id,a) values (242,24);
+insert into t (id,a) values (242,25);
+insert into t (id,a) values (242,26);
+insert into t (id,a) values (242,27);
+insert into t (id,a) values (242,28);
+insert into t (id,a) values (242,29);
+insert into t (id,a) values (242,30);
+insert into t (id,a) values (242,31);
+insert into t (id,a) values (242,32);
+insert into t (id,a) values (242,33);
+insert into t (id,a) values (242,34);
+insert into t (id,a) values (242,35);
+insert into t (id,a) values (242,36);
+insert into t (id,a) values (242,37);
+insert into t (id,a) values (242,38);
+insert into t (id,a) values (242,39);
+insert into t (id,a) values (242,40);
+insert into t (id,a) values (242,41);
+insert into t (id,a) values (242,42);
+insert into t (id,a) values (242,43);
+insert into t (id,a) values (242,44);
+insert into t (id,a) values (242,45);
+insert into t (id,a) values (242,46);
+insert into t (id,a) values (242,47);
+insert into t (id,a) values (242,48);
+insert into t (id,a) values (242,49);
+insert into t (id,a) values (242,50);
+insert into t (id,a) values (242,51);
+insert into t (id,a) values (242,52);
+insert into t (id,a) values (242,53);
+insert into t (id,a) values (242,54);
+insert into t (id,a) values (242,55);
+insert into t (id,a) values (242,56);
+insert into t (id,a) values (242,57);
+insert into t (id,a) values (242,58);
+insert into t (id,a) values (242,59);
+insert into t (id,a) values (242,60);
+insert into t (id,a) values (242,61);
+insert into t (id,a) values (242,62);
+insert into t (id,a) values (242,63);
+insert into t (id,a) values (242,64);
+insert into t (id,a) values (242,65);
+insert into t (id,a) values (242,66);
+insert into t (id,a) values (242,67);
+insert into t (id,a) values (242,68);
+insert into t (id,a) values (242,69);
+insert into t (id,a) values (242,70);
+insert into t (id,a) values (242,71);
+insert into t (id,a) values (242,72);
+insert into t (id,a) values (242,73);
+insert into t (id,a) values (242,74);
+insert into t (id,a) values (242,75);
+insert into t (id,a) values (242,76);
+insert into t (id,a) values (242,77);
+insert into t (id,a) values (242,78);
+insert into t (id,a) values (242,79);
+insert into t (id,a) values (242,80);
+insert into t (id,a) values (242,81);
+insert into t (id,a) values (242,82);
+insert into t (id,a) values (242,83);
+insert into t (id,a) values (242,84);
+insert into t (id,a) values (242,85);
+insert into t (id,a) values (242,86);
+insert into t (id,a) values (242,87);
+insert into t (id,a) values (242,88);
+insert into t (id,a) values (242,89);
+insert into t (id,a) values (242,90);
+insert into t (id,a) values (242,91);
+insert into t (id,a) values (242,92);
+insert into t (id,a) values (242,93);
+insert into t (id,a) values (242,94);
+insert into t (id,a) values (242,95);
+insert into t (id,a) values (242,96);
+insert into t (id,a) values (242,97);
+insert into t (id,a) values (242,98);
+insert into t (id,a) values (242,99);
+insert into t (id,a) values (243,0);
+insert into t (id,a) values (243,1);
+insert into t (id,a) values (243,2);
+insert into t (id,a) values (243,3);
+insert into t (id,a) values (243,4);
+insert into t (id,a) values (243,5);
+insert into t (id,a) values (243,6);
+insert into t (id,a) values (243,7);
+insert into t (id,a) values (243,8);
+insert into t (id,a) values (243,9);
+insert into t (id,a) values (243,10);
+insert into t (id,a) values (243,11);
+insert into t (id,a) values (243,12);
+insert into t (id,a) values (243,13);
+insert into t (id,a) values (243,14);
+insert into t (id,a) values (243,15);
+insert into t (id,a) values (243,16);
+insert into t (id,a) values (243,17);
+insert into t (id,a) values (243,18);
+insert into t (id,a) values (243,19);
+insert into t (id,a) values (243,20);
+insert into t (id,a) values (243,21);
+insert into t (id,a) values (243,22);
+insert into t (id,a) values (243,23);
+insert into t (id,a) values (243,24);
+insert into t (id,a) values (243,25);
+insert into t (id,a) values (243,26);
+insert into t (id,a) values (243,27);
+insert into t (id,a) values (243,28);
+insert into t (id,a) values (243,29);
+insert into t (id,a) values (243,30);
+insert into t (id,a) values (243,31);
+insert into t (id,a) values (243,32);
+insert into t (id,a) values (243,33);
+insert into t (id,a) values (243,34);
+insert into t (id,a) values (243,35);
+insert into t (id,a) values (243,36);
+insert into t (id,a) values (243,37);
+insert into t (id,a) values (243,38);
+insert into t (id,a) values (243,39);
+insert into t (id,a) values (243,40);
+insert into t (id,a) values (243,41);
+insert into t (id,a) values (243,42);
+insert into t (id,a) values (243,43);
+insert into t (id,a) values (243,44);
+insert into t (id,a) values (243,45);
+insert into t (id,a) values (243,46);
+insert into t (id,a) values (243,47);
+insert into t (id,a) values (243,48);
+insert into t (id,a) values (243,49);
+insert into t (id,a) values (243,50);
+insert into t (id,a) values (243,51);
+insert into t (id,a) values (243,52);
+insert into t (id,a) values (243,53);
+insert into t (id,a) values (243,54);
+insert into t (id,a) values (243,55);
+insert into t (id,a) values (243,56);
+insert into t (id,a) values (243,57);
+insert into t (id,a) values (243,58);
+insert into t (id,a) values (243,59);
+insert into t (id,a) values (243,60);
+insert into t (id,a) values (243,61);
+insert into t (id,a) values (243,62);
+insert into t (id,a) values (243,63);
+insert into t (id,a) values (243,64);
+insert into t (id,a) values (243,65);
+insert into t (id,a) values (243,66);
+insert into t (id,a) values (243,67);
+insert into t (id,a) values (243,68);
+insert into t (id,a) values (243,69);
+insert into t (id,a) values (243,70);
+insert into t (id,a) values (243,71);
+insert into t (id,a) values (243,72);
+insert into t (id,a) values (243,73);
+insert into t (id,a) values (243,74);
+insert into t (id,a) values (243,75);
+insert into t (id,a) values (243,76);
+insert into t (id,a) values (243,77);
+insert into t (id,a) values (243,78);
+insert into t (id,a) values (243,79);
+insert into t (id,a) values (243,80);
+insert into t (id,a) values (243,81);
+insert into t (id,a) values (243,82);
+insert into t (id,a) values (243,83);
+insert into t (id,a) values (243,84);
+insert into t (id,a) values (243,85);
+insert into t (id,a) values (243,86);
+insert into t (id,a) values (243,87);
+insert into t (id,a) values (243,88);
+insert into t (id,a) values (243,89);
+insert into t (id,a) values (243,90);
+insert into t (id,a) values (243,91);
+insert into t (id,a) values (243,92);
+insert into t (id,a) values (243,93);
+insert into t (id,a) values (243,94);
+insert into t (id,a) values (243,95);
+insert into t (id,a) values (243,96);
+insert into t (id,a) values (243,97);
+insert into t (id,a) values (243,98);
+insert into t (id,a) values (243,99);
+insert into t (id,a) values (244,0);
+insert into t (id,a) values (244,1);
+insert into t (id,a) values (244,2);
+insert into t (id,a) values (244,3);
+insert into t (id,a) values (244,4);
+insert into t (id,a) values (244,5);
+insert into t (id,a) values (244,6);
+insert into t (id,a) values (244,7);
+insert into t (id,a) values (244,8);
+insert into t (id,a) values (244,9);
+insert into t (id,a) values (244,10);
+insert into t (id,a) values (244,11);
+insert into t (id,a) values (244,12);
+insert into t (id,a) values (244,13);
+insert into t (id,a) values (244,14);
+insert into t (id,a) values (244,15);
+insert into t (id,a) values (244,16);
+insert into t (id,a) values (244,17);
+insert into t (id,a) values (244,18);
+insert into t (id,a) values (244,19);
+insert into t (id,a) values (244,20);
+insert into t (id,a) values (244,21);
+insert into t (id,a) values (244,22);
+insert into t (id,a) values (244,23);
+insert into t (id,a) values (244,24);
+insert into t (id,a) values (244,25);
+insert into t (id,a) values (244,26);
+insert into t (id,a) values (244,27);
+insert into t (id,a) values (244,28);
+insert into t (id,a) values (244,29);
+insert into t (id,a) values (244,30);
+insert into t (id,a) values (244,31);
+insert into t (id,a) values (244,32);
+insert into t (id,a) values (244,33);
+insert into t (id,a) values (244,34);
+insert into t (id,a) values (244,35);
+insert into t (id,a) values (244,36);
+insert into t (id,a) values (244,37);
+insert into t (id,a) values (244,38);
+insert into t (id,a) values (244,39);
+insert into t (id,a) values (244,40);
+insert into t (id,a) values (244,41);
+insert into t (id,a) values (244,42);
+insert into t (id,a) values (244,43);
+insert into t (id,a) values (244,44);
+insert into t (id,a) values (244,45);
+insert into t (id,a) values (244,46);
+insert into t (id,a) values (244,47);
+insert into t (id,a) values (244,48);
+insert into t (id,a) values (244,49);
+insert into t (id,a) values (244,50);
+insert into t (id,a) values (244,51);
+insert into t (id,a) values (244,52);
+insert into t (id,a) values (244,53);
+insert into t (id,a) values (244,54);
+insert into t (id,a) values (244,55);
+insert into t (id,a) values (244,56);
+insert into t (id,a) values (244,57);
+insert into t (id,a) values (244,58);
+insert into t (id,a) values (244,59);
+insert into t (id,a) values (244,60);
+insert into t (id,a) values (244,61);
+insert into t (id,a) values (244,62);
+insert into t (id,a) values (244,63);
+insert into t (id,a) values (244,64);
+insert into t (id,a) values (244,65);
+insert into t (id,a) values (244,66);
+insert into t (id,a) values (244,67);
+insert into t (id,a) values (244,68);
+insert into t (id,a) values (244,69);
+insert into t (id,a) values (244,70);
+insert into t (id,a) values (244,71);
+insert into t (id,a) values (244,72);
+insert into t (id,a) values (244,73);
+insert into t (id,a) values (244,74);
+insert into t (id,a) values (244,75);
+insert into t (id,a) values (244,76);
+insert into t (id,a) values (244,77);
+insert into t (id,a) values (244,78);
+insert into t (id,a) values (244,79);
+insert into t (id,a) values (244,80);
+insert into t (id,a) values (244,81);
+insert into t (id,a) values (244,82);
+insert into t (id,a) values (244,83);
+insert into t (id,a) values (244,84);
+insert into t (id,a) values (244,85);
+insert into t (id,a) values (244,86);
+insert into t (id,a) values (244,87);
+insert into t (id,a) values (244,88);
+insert into t (id,a) values (244,89);
+insert into t (id,a) values (244,90);
+insert into t (id,a) values (244,91);
+insert into t (id,a) values (244,92);
+insert into t (id,a) values (244,93);
+insert into t (id,a) values (244,94);
+insert into t (id,a) values (244,95);
+insert into t (id,a) values (244,96);
+insert into t (id,a) values (244,97);
+insert into t (id,a) values (244,98);
+insert into t (id,a) values (244,99);
+insert into t (id,a) values (245,0);
+insert into t (id,a) values (245,1);
+insert into t (id,a) values (245,2);
+insert into t (id,a) values (245,3);
+insert into t (id,a) values (245,4);
+insert into t (id,a) values (245,5);
+insert into t (id,a) values (245,6);
+insert into t (id,a) values (245,7);
+insert into t (id,a) values (245,8);
+insert into t (id,a) values (245,9);
+insert into t (id,a) values (245,10);
+insert into t (id,a) values (245,11);
+insert into t (id,a) values (245,12);
+insert into t (id,a) values (245,13);
+insert into t (id,a) values (245,14);
+insert into t (id,a) values (245,15);
+insert into t (id,a) values (245,16);
+insert into t (id,a) values (245,17);
+insert into t (id,a) values (245,18);
+insert into t (id,a) values (245,19);
+insert into t (id,a) values (245,20);
+insert into t (id,a) values (245,21);
+insert into t (id,a) values (245,22);
+insert into t (id,a) values (245,23);
+insert into t (id,a) values (245,24);
+insert into t (id,a) values (245,25);
+insert into t (id,a) values (245,26);
+insert into t (id,a) values (245,27);
+insert into t (id,a) values (245,28);
+insert into t (id,a) values (245,29);
+insert into t (id,a) values (245,30);
+insert into t (id,a) values (245,31);
+insert into t (id,a) values (245,32);
+insert into t (id,a) values (245,33);
+insert into t (id,a) values (245,34);
+insert into t (id,a) values (245,35);
+insert into t (id,a) values (245,36);
+insert into t (id,a) values (245,37);
+insert into t (id,a) values (245,38);
+insert into t (id,a) values (245,39);
+insert into t (id,a) values (245,40);
+insert into t (id,a) values (245,41);
+insert into t (id,a) values (245,42);
+insert into t (id,a) values (245,43);
+insert into t (id,a) values (245,44);
+insert into t (id,a) values (245,45);
+insert into t (id,a) values (245,46);
+insert into t (id,a) values (245,47);
+insert into t (id,a) values (245,48);
+insert into t (id,a) values (245,49);
+insert into t (id,a) values (245,50);
+insert into t (id,a) values (245,51);
+insert into t (id,a) values (245,52);
+insert into t (id,a) values (245,53);
+insert into t (id,a) values (245,54);
+insert into t (id,a) values (245,55);
+insert into t (id,a) values (245,56);
+insert into t (id,a) values (245,57);
+insert into t (id,a) values (245,58);
+insert into t (id,a) values (245,59);
+insert into t (id,a) values (245,60);
+insert into t (id,a) values (245,61);
+insert into t (id,a) values (245,62);
+insert into t (id,a) values (245,63);
+insert into t (id,a) values (245,64);
+insert into t (id,a) values (245,65);
+insert into t (id,a) values (245,66);
+insert into t (id,a) values (245,67);
+insert into t (id,a) values (245,68);
+insert into t (id,a) values (245,69);
+insert into t (id,a) values (245,70);
+insert into t (id,a) values (245,71);
+insert into t (id,a) values (245,72);
+insert into t (id,a) values (245,73);
+insert into t (id,a) values (245,74);
+insert into t (id,a) values (245,75);
+insert into t (id,a) values (245,76);
+insert into t (id,a) values (245,77);
+insert into t (id,a) values (245,78);
+insert into t (id,a) values (245,79);
+insert into t (id,a) values (245,80);
+insert into t (id,a) values (245,81);
+insert into t (id,a) values (245,82);
+insert into t (id,a) values (245,83);
+insert into t (id,a) values (245,84);
+insert into t (id,a) values (245,85);
+insert into t (id,a) values (245,86);
+insert into t (id,a) values (245,87);
+insert into t (id,a) values (245,88);
+insert into t (id,a) values (245,89);
+insert into t (id,a) values (245,90);
+insert into t (id,a) values (245,91);
+insert into t (id,a) values (245,92);
+insert into t (id,a) values (245,93);
+insert into t (id,a) values (245,94);
+insert into t (id,a) values (245,95);
+insert into t (id,a) values (245,96);
+insert into t (id,a) values (245,97);
+insert into t (id,a) values (245,98);
+insert into t (id,a) values (245,99);
+insert into t (id,a) values (246,0);
+insert into t (id,a) values (246,1);
+insert into t (id,a) values (246,2);
+insert into t (id,a) values (246,3);
+insert into t (id,a) values (246,4);
+insert into t (id,a) values (246,5);
+insert into t (id,a) values (246,6);
+insert into t (id,a) values (246,7);
+insert into t (id,a) values (246,8);
+insert into t (id,a) values (246,9);
+insert into t (id,a) values (246,10);
+insert into t (id,a) values (246,11);
+insert into t (id,a) values (246,12);
+insert into t (id,a) values (246,13);
+insert into t (id,a) values (246,14);
+insert into t (id,a) values (246,15);
+insert into t (id,a) values (246,16);
+insert into t (id,a) values (246,17);
+insert into t (id,a) values (246,18);
+insert into t (id,a) values (246,19);
+insert into t (id,a) values (246,20);
+insert into t (id,a) values (246,21);
+insert into t (id,a) values (246,22);
+insert into t (id,a) values (246,23);
+insert into t (id,a) values (246,24);
+insert into t (id,a) values (246,25);
+insert into t (id,a) values (246,26);
+insert into t (id,a) values (246,27);
+insert into t (id,a) values (246,28);
+insert into t (id,a) values (246,29);
+insert into t (id,a) values (246,30);
+insert into t (id,a) values (246,31);
+insert into t (id,a) values (246,32);
+insert into t (id,a) values (246,33);
+insert into t (id,a) values (246,34);
+insert into t (id,a) values (246,35);
+insert into t (id,a) values (246,36);
+insert into t (id,a) values (246,37);
+insert into t (id,a) values (246,38);
+insert into t (id,a) values (246,39);
+insert into t (id,a) values (246,40);
+insert into t (id,a) values (246,41);
+insert into t (id,a) values (246,42);
+insert into t (id,a) values (246,43);
+insert into t (id,a) values (246,44);
+insert into t (id,a) values (246,45);
+insert into t (id,a) values (246,46);
+insert into t (id,a) values (246,47);
+insert into t (id,a) values (246,48);
+insert into t (id,a) values (246,49);
+insert into t (id,a) values (246,50);
+insert into t (id,a) values (246,51);
+insert into t (id,a) values (246,52);
+insert into t (id,a) values (246,53);
+insert into t (id,a) values (246,54);
+insert into t (id,a) values (246,55);
+insert into t (id,a) values (246,56);
+insert into t (id,a) values (246,57);
+insert into t (id,a) values (246,58);
+insert into t (id,a) values (246,59);
+insert into t (id,a) values (246,60);
+insert into t (id,a) values (246,61);
+insert into t (id,a) values (246,62);
+insert into t (id,a) values (246,63);
+insert into t (id,a) values (246,64);
+insert into t (id,a) values (246,65);
+insert into t (id,a) values (246,66);
+insert into t (id,a) values (246,67);
+insert into t (id,a) values (246,68);
+insert into t (id,a) values (246,69);
+insert into t (id,a) values (246,70);
+insert into t (id,a) values (246,71);
+insert into t (id,a) values (246,72);
+insert into t (id,a) values (246,73);
+insert into t (id,a) values (246,74);
+insert into t (id,a) values (246,75);
+insert into t (id,a) values (246,76);
+insert into t (id,a) values (246,77);
+insert into t (id,a) values (246,78);
+insert into t (id,a) values (246,79);
+insert into t (id,a) values (246,80);
+insert into t (id,a) values (246,81);
+insert into t (id,a) values (246,82);
+insert into t (id,a) values (246,83);
+insert into t (id,a) values (246,84);
+insert into t (id,a) values (246,85);
+insert into t (id,a) values (246,86);
+insert into t (id,a) values (246,87);
+insert into t (id,a) values (246,88);
+insert into t (id,a) values (246,89);
+insert into t (id,a) values (246,90);
+insert into t (id,a) values (246,91);
+insert into t (id,a) values (246,92);
+insert into t (id,a) values (246,93);
+insert into t (id,a) values (246,94);
+insert into t (id,a) values (246,95);
+insert into t (id,a) values (246,96);
+insert into t (id,a) values (246,97);
+insert into t (id,a) values (246,98);
+insert into t (id,a) values (246,99);
+insert into t (id,a) values (247,0);
+insert into t (id,a) values (247,1);
+insert into t (id,a) values (247,2);
+insert into t (id,a) values (247,3);
+insert into t (id,a) values (247,4);
+insert into t (id,a) values (247,5);
+insert into t (id,a) values (247,6);
+insert into t (id,a) values (247,7);
+insert into t (id,a) values (247,8);
+insert into t (id,a) values (247,9);
+insert into t (id,a) values (247,10);
+insert into t (id,a) values (247,11);
+insert into t (id,a) values (247,12);
+insert into t (id,a) values (247,13);
+insert into t (id,a) values (247,14);
+insert into t (id,a) values (247,15);
+insert into t (id,a) values (247,16);
+insert into t (id,a) values (247,17);
+insert into t (id,a) values (247,18);
+insert into t (id,a) values (247,19);
+insert into t (id,a) values (247,20);
+insert into t (id,a) values (247,21);
+insert into t (id,a) values (247,22);
+insert into t (id,a) values (247,23);
+insert into t (id,a) values (247,24);
+insert into t (id,a) values (247,25);
+insert into t (id,a) values (247,26);
+insert into t (id,a) values (247,27);
+insert into t (id,a) values (247,28);
+insert into t (id,a) values (247,29);
+insert into t (id,a) values (247,30);
+insert into t (id,a) values (247,31);
+insert into t (id,a) values (247,32);
+insert into t (id,a) values (247,33);
+insert into t (id,a) values (247,34);
+insert into t (id,a) values (247,35);
+insert into t (id,a) values (247,36);
+insert into t (id,a) values (247,37);
+insert into t (id,a) values (247,38);
+insert into t (id,a) values (247,39);
+insert into t (id,a) values (247,40);
+insert into t (id,a) values (247,41);
+insert into t (id,a) values (247,42);
+insert into t (id,a) values (247,43);
+insert into t (id,a) values (247,44);
+insert into t (id,a) values (247,45);
+insert into t (id,a) values (247,46);
+insert into t (id,a) values (247,47);
+insert into t (id,a) values (247,48);
+insert into t (id,a) values (247,49);
+insert into t (id,a) values (247,50);
+insert into t (id,a) values (247,51);
+insert into t (id,a) values (247,52);
+insert into t (id,a) values (247,53);
+insert into t (id,a) values (247,54);
+insert into t (id,a) values (247,55);
+insert into t (id,a) values (247,56);
+insert into t (id,a) values (247,57);
+insert into t (id,a) values (247,58);
+insert into t (id,a) values (247,59);
+insert into t (id,a) values (247,60);
+insert into t (id,a) values (247,61);
+insert into t (id,a) values (247,62);
+insert into t (id,a) values (247,63);
+insert into t (id,a) values (247,64);
+insert into t (id,a) values (247,65);
+insert into t (id,a) values (247,66);
+insert into t (id,a) values (247,67);
+insert into t (id,a) values (247,68);
+insert into t (id,a) values (247,69);
+insert into t (id,a) values (247,70);
+insert into t (id,a) values (247,71);
+insert into t (id,a) values (247,72);
+insert into t (id,a) values (247,73);
+insert into t (id,a) values (247,74);
+insert into t (id,a) values (247,75);
+insert into t (id,a) values (247,76);
+insert into t (id,a) values (247,77);
+insert into t (id,a) values (247,78);
+insert into t (id,a) values (247,79);
+insert into t (id,a) values (247,80);
+insert into t (id,a) values (247,81);
+insert into t (id,a) values (247,82);
+insert into t (id,a) values (247,83);
+insert into t (id,a) values (247,84);
+insert into t (id,a) values (247,85);
+insert into t (id,a) values (247,86);
+insert into t (id,a) values (247,87);
+insert into t (id,a) values (247,88);
+insert into t (id,a) values (247,89);
+insert into t (id,a) values (247,90);
+insert into t (id,a) values (247,91);
+insert into t (id,a) values (247,92);
+insert into t (id,a) values (247,93);
+insert into t (id,a) values (247,94);
+insert into t (id,a) values (247,95);
+insert into t (id,a) values (247,96);
+insert into t (id,a) values (247,97);
+insert into t (id,a) values (247,98);
+insert into t (id,a) values (247,99);
+insert into t (id,a) values (248,0);
+insert into t (id,a) values (248,1);
+insert into t (id,a) values (248,2);
+insert into t (id,a) values (248,3);
+insert into t (id,a) values (248,4);
+insert into t (id,a) values (248,5);
+insert into t (id,a) values (248,6);
+insert into t (id,a) values (248,7);
+insert into t (id,a) values (248,8);
+insert into t (id,a) values (248,9);
+insert into t (id,a) values (248,10);
+insert into t (id,a) values (248,11);
+insert into t (id,a) values (248,12);
+insert into t (id,a) values (248,13);
+insert into t (id,a) values (248,14);
+insert into t (id,a) values (248,15);
+insert into t (id,a) values (248,16);
+insert into t (id,a) values (248,17);
+insert into t (id,a) values (248,18);
+insert into t (id,a) values (248,19);
+insert into t (id,a) values (248,20);
+insert into t (id,a) values (248,21);
+insert into t (id,a) values (248,22);
+insert into t (id,a) values (248,23);
+insert into t (id,a) values (248,24);
+insert into t (id,a) values (248,25);
+insert into t (id,a) values (248,26);
+insert into t (id,a) values (248,27);
+insert into t (id,a) values (248,28);
+insert into t (id,a) values (248,29);
+insert into t (id,a) values (248,30);
+insert into t (id,a) values (248,31);
+insert into t (id,a) values (248,32);
+insert into t (id,a) values (248,33);
+insert into t (id,a) values (248,34);
+insert into t (id,a) values (248,35);
+insert into t (id,a) values (248,36);
+insert into t (id,a) values (248,37);
+insert into t (id,a) values (248,38);
+insert into t (id,a) values (248,39);
+insert into t (id,a) values (248,40);
+insert into t (id,a) values (248,41);
+insert into t (id,a) values (248,42);
+insert into t (id,a) values (248,43);
+insert into t (id,a) values (248,44);
+insert into t (id,a) values (248,45);
+insert into t (id,a) values (248,46);
+insert into t (id,a) values (248,47);
+insert into t (id,a) values (248,48);
+insert into t (id,a) values (248,49);
+insert into t (id,a) values (248,50);
+insert into t (id,a) values (248,51);
+insert into t (id,a) values (248,52);
+insert into t (id,a) values (248,53);
+insert into t (id,a) values (248,54);
+insert into t (id,a) values (248,55);
+insert into t (id,a) values (248,56);
+insert into t (id,a) values (248,57);
+insert into t (id,a) values (248,58);
+insert into t (id,a) values (248,59);
+insert into t (id,a) values (248,60);
+insert into t (id,a) values (248,61);
+insert into t (id,a) values (248,62);
+insert into t (id,a) values (248,63);
+insert into t (id,a) values (248,64);
+insert into t (id,a) values (248,65);
+insert into t (id,a) values (248,66);
+insert into t (id,a) values (248,67);
+insert into t (id,a) values (248,68);
+insert into t (id,a) values (248,69);
+insert into t (id,a) values (248,70);
+insert into t (id,a) values (248,71);
+insert into t (id,a) values (248,72);
+insert into t (id,a) values (248,73);
+insert into t (id,a) values (248,74);
+insert into t (id,a) values (248,75);
+insert into t (id,a) values (248,76);
+insert into t (id,a) values (248,77);
+insert into t (id,a) values (248,78);
+insert into t (id,a) values (248,79);
+insert into t (id,a) values (248,80);
+insert into t (id,a) values (248,81);
+insert into t (id,a) values (248,82);
+insert into t (id,a) values (248,83);
+insert into t (id,a) values (248,84);
+insert into t (id,a) values (248,85);
+insert into t (id,a) values (248,86);
+insert into t (id,a) values (248,87);
+insert into t (id,a) values (248,88);
+insert into t (id,a) values (248,89);
+insert into t (id,a) values (248,90);
+insert into t (id,a) values (248,91);
+insert into t (id,a) values (248,92);
+insert into t (id,a) values (248,93);
+insert into t (id,a) values (248,94);
+insert into t (id,a) values (248,95);
+insert into t (id,a) values (248,96);
+insert into t (id,a) values (248,97);
+insert into t (id,a) values (248,98);
+insert into t (id,a) values (248,99);
+insert into t (id,a) values (249,0);
+insert into t (id,a) values (249,1);
+insert into t (id,a) values (249,2);
+insert into t (id,a) values (249,3);
+insert into t (id,a) values (249,4);
+insert into t (id,a) values (249,5);
+insert into t (id,a) values (249,6);
+insert into t (id,a) values (249,7);
+insert into t (id,a) values (249,8);
+insert into t (id,a) values (249,9);
+insert into t (id,a) values (249,10);
+insert into t (id,a) values (249,11);
+insert into t (id,a) values (249,12);
+insert into t (id,a) values (249,13);
+insert into t (id,a) values (249,14);
+insert into t (id,a) values (249,15);
+insert into t (id,a) values (249,16);
+insert into t (id,a) values (249,17);
+insert into t (id,a) values (249,18);
+insert into t (id,a) values (249,19);
+insert into t (id,a) values (249,20);
+insert into t (id,a) values (249,21);
+insert into t (id,a) values (249,22);
+insert into t (id,a) values (249,23);
+insert into t (id,a) values (249,24);
+insert into t (id,a) values (249,25);
+insert into t (id,a) values (249,26);
+insert into t (id,a) values (249,27);
+insert into t (id,a) values (249,28);
+insert into t (id,a) values (249,29);
+insert into t (id,a) values (249,30);
+insert into t (id,a) values (249,31);
+insert into t (id,a) values (249,32);
+insert into t (id,a) values (249,33);
+insert into t (id,a) values (249,34);
+insert into t (id,a) values (249,35);
+insert into t (id,a) values (249,36);
+insert into t (id,a) values (249,37);
+insert into t (id,a) values (249,38);
+insert into t (id,a) values (249,39);
+insert into t (id,a) values (249,40);
+insert into t (id,a) values (249,41);
+insert into t (id,a) values (249,42);
+insert into t (id,a) values (249,43);
+insert into t (id,a) values (249,44);
+insert into t (id,a) values (249,45);
+insert into t (id,a) values (249,46);
+insert into t (id,a) values (249,47);
+insert into t (id,a) values (249,48);
+insert into t (id,a) values (249,49);
+insert into t (id,a) values (249,50);
+insert into t (id,a) values (249,51);
+insert into t (id,a) values (249,52);
+insert into t (id,a) values (249,53);
+insert into t (id,a) values (249,54);
+insert into t (id,a) values (249,55);
+insert into t (id,a) values (249,56);
+insert into t (id,a) values (249,57);
+insert into t (id,a) values (249,58);
+insert into t (id,a) values (249,59);
+insert into t (id,a) values (249,60);
+insert into t (id,a) values (249,61);
+insert into t (id,a) values (249,62);
+insert into t (id,a) values (249,63);
+insert into t (id,a) values (249,64);
+insert into t (id,a) values (249,65);
+insert into t (id,a) values (249,66);
+insert into t (id,a) values (249,67);
+insert into t (id,a) values (249,68);
+insert into t (id,a) values (249,69);
+insert into t (id,a) values (249,70);
+insert into t (id,a) values (249,71);
+insert into t (id,a) values (249,72);
+insert into t (id,a) values (249,73);
+insert into t (id,a) values (249,74);
+insert into t (id,a) values (249,75);
+insert into t (id,a) values (249,76);
+insert into t (id,a) values (249,77);
+insert into t (id,a) values (249,78);
+insert into t (id,a) values (249,79);
+insert into t (id,a) values (249,80);
+insert into t (id,a) values (249,81);
+insert into t (id,a) values (249,82);
+insert into t (id,a) values (249,83);
+insert into t (id,a) values (249,84);
+insert into t (id,a) values (249,85);
+insert into t (id,a) values (249,86);
+insert into t (id,a) values (249,87);
+insert into t (id,a) values (249,88);
+insert into t (id,a) values (249,89);
+insert into t (id,a) values (249,90);
+insert into t (id,a) values (249,91);
+insert into t (id,a) values (249,92);
+insert into t (id,a) values (249,93);
+insert into t (id,a) values (249,94);
+insert into t (id,a) values (249,95);
+insert into t (id,a) values (249,96);
+insert into t (id,a) values (249,97);
+insert into t (id,a) values (249,98);
+insert into t (id,a) values (249,99);
+insert into t (id,a) values (250,0);
+insert into t (id,a) values (250,1);
+insert into t (id,a) values (250,2);
+insert into t (id,a) values (250,3);
+insert into t (id,a) values (250,4);
+insert into t (id,a) values (250,5);
+insert into t (id,a) values (250,6);
+insert into t (id,a) values (250,7);
+insert into t (id,a) values (250,8);
+insert into t (id,a) values (250,9);
+insert into t (id,a) values (250,10);
+insert into t (id,a) values (250,11);
+insert into t (id,a) values (250,12);
+insert into t (id,a) values (250,13);
+insert into t (id,a) values (250,14);
+insert into t (id,a) values (250,15);
+insert into t (id,a) values (250,16);
+insert into t (id,a) values (250,17);
+insert into t (id,a) values (250,18);
+insert into t (id,a) values (250,19);
+insert into t (id,a) values (250,20);
+insert into t (id,a) values (250,21);
+insert into t (id,a) values (250,22);
+insert into t (id,a) values (250,23);
+insert into t (id,a) values (250,24);
+insert into t (id,a) values (250,25);
+insert into t (id,a) values (250,26);
+insert into t (id,a) values (250,27);
+insert into t (id,a) values (250,28);
+insert into t (id,a) values (250,29);
+insert into t (id,a) values (250,30);
+insert into t (id,a) values (250,31);
+insert into t (id,a) values (250,32);
+insert into t (id,a) values (250,33);
+insert into t (id,a) values (250,34);
+insert into t (id,a) values (250,35);
+insert into t (id,a) values (250,36);
+insert into t (id,a) values (250,37);
+insert into t (id,a) values (250,38);
+insert into t (id,a) values (250,39);
+insert into t (id,a) values (250,40);
+insert into t (id,a) values (250,41);
+insert into t (id,a) values (250,42);
+insert into t (id,a) values (250,43);
+insert into t (id,a) values (250,44);
+insert into t (id,a) values (250,45);
+insert into t (id,a) values (250,46);
+insert into t (id,a) values (250,47);
+insert into t (id,a) values (250,48);
+insert into t (id,a) values (250,49);
+insert into t (id,a) values (250,50);
+insert into t (id,a) values (250,51);
+insert into t (id,a) values (250,52);
+insert into t (id,a) values (250,53);
+insert into t (id,a) values (250,54);
+insert into t (id,a) values (250,55);
+insert into t (id,a) values (250,56);
+insert into t (id,a) values (250,57);
+insert into t (id,a) values (250,58);
+insert into t (id,a) values (250,59);
+insert into t (id,a) values (250,60);
+insert into t (id,a) values (250,61);
+insert into t (id,a) values (250,62);
+insert into t (id,a) values (250,63);
+insert into t (id,a) values (250,64);
+insert into t (id,a) values (250,65);
+insert into t (id,a) values (250,66);
+insert into t (id,a) values (250,67);
+insert into t (id,a) values (250,68);
+insert into t (id,a) values (250,69);
+insert into t (id,a) values (250,70);
+insert into t (id,a) values (250,71);
+insert into t (id,a) values (250,72);
+insert into t (id,a) values (250,73);
+insert into t (id,a) values (250,74);
+insert into t (id,a) values (250,75);
+insert into t (id,a) values (250,76);
+insert into t (id,a) values (250,77);
+insert into t (id,a) values (250,78);
+insert into t (id,a) values (250,79);
+insert into t (id,a) values (250,80);
+insert into t (id,a) values (250,81);
+insert into t (id,a) values (250,82);
+insert into t (id,a) values (250,83);
+insert into t (id,a) values (250,84);
+insert into t (id,a) values (250,85);
+insert into t (id,a) values (250,86);
+insert into t (id,a) values (250,87);
+insert into t (id,a) values (250,88);
+insert into t (id,a) values (250,89);
+insert into t (id,a) values (250,90);
+insert into t (id,a) values (250,91);
+insert into t (id,a) values (250,92);
+insert into t (id,a) values (250,93);
+insert into t (id,a) values (250,94);
+insert into t (id,a) values (250,95);
+insert into t (id,a) values (250,96);
+insert into t (id,a) values (250,97);
+insert into t (id,a) values (250,98);
+insert into t (id,a) values (250,99);
+insert into t (id,a) values (251,0);
+insert into t (id,a) values (251,1);
+insert into t (id,a) values (251,2);
+insert into t (id,a) values (251,3);
+insert into t (id,a) values (251,4);
+insert into t (id,a) values (251,5);
+insert into t (id,a) values (251,6);
+insert into t (id,a) values (251,7);
+insert into t (id,a) values (251,8);
+insert into t (id,a) values (251,9);
+insert into t (id,a) values (251,10);
+insert into t (id,a) values (251,11);
+insert into t (id,a) values (251,12);
+insert into t (id,a) values (251,13);
+insert into t (id,a) values (251,14);
+insert into t (id,a) values (251,15);
+insert into t (id,a) values (251,16);
+insert into t (id,a) values (251,17);
+insert into t (id,a) values (251,18);
+insert into t (id,a) values (251,19);
+insert into t (id,a) values (251,20);
+insert into t (id,a) values (251,21);
+insert into t (id,a) values (251,22);
+insert into t (id,a) values (251,23);
+insert into t (id,a) values (251,24);
+insert into t (id,a) values (251,25);
+insert into t (id,a) values (251,26);
+insert into t (id,a) values (251,27);
+insert into t (id,a) values (251,28);
+insert into t (id,a) values (251,29);
+insert into t (id,a) values (251,30);
+insert into t (id,a) values (251,31);
+insert into t (id,a) values (251,32);
+insert into t (id,a) values (251,33);
+insert into t (id,a) values (251,34);
+insert into t (id,a) values (251,35);
+insert into t (id,a) values (251,36);
+insert into t (id,a) values (251,37);
+insert into t (id,a) values (251,38);
+insert into t (id,a) values (251,39);
+insert into t (id,a) values (251,40);
+insert into t (id,a) values (251,41);
+insert into t (id,a) values (251,42);
+insert into t (id,a) values (251,43);
+insert into t (id,a) values (251,44);
+insert into t (id,a) values (251,45);
+insert into t (id,a) values (251,46);
+insert into t (id,a) values (251,47);
+insert into t (id,a) values (251,48);
+insert into t (id,a) values (251,49);
+insert into t (id,a) values (251,50);
+insert into t (id,a) values (251,51);
+insert into t (id,a) values (251,52);
+insert into t (id,a) values (251,53);
+insert into t (id,a) values (251,54);
+insert into t (id,a) values (251,55);
+insert into t (id,a) values (251,56);
+insert into t (id,a) values (251,57);
+insert into t (id,a) values (251,58);
+insert into t (id,a) values (251,59);
+insert into t (id,a) values (251,60);
+insert into t (id,a) values (251,61);
+insert into t (id,a) values (251,62);
+insert into t (id,a) values (251,63);
+insert into t (id,a) values (251,64);
+insert into t (id,a) values (251,65);
+insert into t (id,a) values (251,66);
+insert into t (id,a) values (251,67);
+insert into t (id,a) values (251,68);
+insert into t (id,a) values (251,69);
+insert into t (id,a) values (251,70);
+insert into t (id,a) values (251,71);
+insert into t (id,a) values (251,72);
+insert into t (id,a) values (251,73);
+insert into t (id,a) values (251,74);
+insert into t (id,a) values (251,75);
+insert into t (id,a) values (251,76);
+insert into t (id,a) values (251,77);
+insert into t (id,a) values (251,78);
+insert into t (id,a) values (251,79);
+insert into t (id,a) values (251,80);
+insert into t (id,a) values (251,81);
+insert into t (id,a) values (251,82);
+insert into t (id,a) values (251,83);
+insert into t (id,a) values (251,84);
+insert into t (id,a) values (251,85);
+insert into t (id,a) values (251,86);
+insert into t (id,a) values (251,87);
+insert into t (id,a) values (251,88);
+insert into t (id,a) values (251,89);
+insert into t (id,a) values (251,90);
+insert into t (id,a) values (251,91);
+insert into t (id,a) values (251,92);
+insert into t (id,a) values (251,93);
+insert into t (id,a) values (251,94);
+insert into t (id,a) values (251,95);
+insert into t (id,a) values (251,96);
+insert into t (id,a) values (251,97);
+insert into t (id,a) values (251,98);
+insert into t (id,a) values (251,99);
+insert into t (id,a) values (252,0);
+insert into t (id,a) values (252,1);
+insert into t (id,a) values (252,2);
+insert into t (id,a) values (252,3);
+insert into t (id,a) values (252,4);
+insert into t (id,a) values (252,5);
+insert into t (id,a) values (252,6);
+insert into t (id,a) values (252,7);
+insert into t (id,a) values (252,8);
+insert into t (id,a) values (252,9);
+insert into t (id,a) values (252,10);
+insert into t (id,a) values (252,11);
+insert into t (id,a) values (252,12);
+insert into t (id,a) values (252,13);
+insert into t (id,a) values (252,14);
+insert into t (id,a) values (252,15);
+insert into t (id,a) values (252,16);
+insert into t (id,a) values (252,17);
+insert into t (id,a) values (252,18);
+insert into t (id,a) values (252,19);
+insert into t (id,a) values (252,20);
+insert into t (id,a) values (252,21);
+insert into t (id,a) values (252,22);
+insert into t (id,a) values (252,23);
+insert into t (id,a) values (252,24);
+insert into t (id,a) values (252,25);
+insert into t (id,a) values (252,26);
+insert into t (id,a) values (252,27);
+insert into t (id,a) values (252,28);
+insert into t (id,a) values (252,29);
+insert into t (id,a) values (252,30);
+insert into t (id,a) values (252,31);
+insert into t (id,a) values (252,32);
+insert into t (id,a) values (252,33);
+insert into t (id,a) values (252,34);
+insert into t (id,a) values (252,35);
+insert into t (id,a) values (252,36);
+insert into t (id,a) values (252,37);
+insert into t (id,a) values (252,38);
+insert into t (id,a) values (252,39);
+insert into t (id,a) values (252,40);
+insert into t (id,a) values (252,41);
+insert into t (id,a) values (252,42);
+insert into t (id,a) values (252,43);
+insert into t (id,a) values (252,44);
+insert into t (id,a) values (252,45);
+insert into t (id,a) values (252,46);
+insert into t (id,a) values (252,47);
+insert into t (id,a) values (252,48);
+insert into t (id,a) values (252,49);
+insert into t (id,a) values (252,50);
+insert into t (id,a) values (252,51);
+insert into t (id,a) values (252,52);
+insert into t (id,a) values (252,53);
+insert into t (id,a) values (252,54);
+insert into t (id,a) values (252,55);
+insert into t (id,a) values (252,56);
+insert into t (id,a) values (252,57);
+insert into t (id,a) values (252,58);
+insert into t (id,a) values (252,59);
+insert into t (id,a) values (252,60);
+insert into t (id,a) values (252,61);
+insert into t (id,a) values (252,62);
+insert into t (id,a) values (252,63);
+insert into t (id,a) values (252,64);
+insert into t (id,a) values (252,65);
+insert into t (id,a) values (252,66);
+insert into t (id,a) values (252,67);
+insert into t (id,a) values (252,68);
+insert into t (id,a) values (252,69);
+insert into t (id,a) values (252,70);
+insert into t (id,a) values (252,71);
+insert into t (id,a) values (252,72);
+insert into t (id,a) values (252,73);
+insert into t (id,a) values (252,74);
+insert into t (id,a) values (252,75);
+insert into t (id,a) values (252,76);
+insert into t (id,a) values (252,77);
+insert into t (id,a) values (252,78);
+insert into t (id,a) values (252,79);
+insert into t (id,a) values (252,80);
+insert into t (id,a) values (252,81);
+insert into t (id,a) values (252,82);
+insert into t (id,a) values (252,83);
+insert into t (id,a) values (252,84);
+insert into t (id,a) values (252,85);
+insert into t (id,a) values (252,86);
+insert into t (id,a) values (252,87);
+insert into t (id,a) values (252,88);
+insert into t (id,a) values (252,89);
+insert into t (id,a) values (252,90);
+insert into t (id,a) values (252,91);
+insert into t (id,a) values (252,92);
+insert into t (id,a) values (252,93);
+insert into t (id,a) values (252,94);
+insert into t (id,a) values (252,95);
+insert into t (id,a) values (252,96);
+insert into t (id,a) values (252,97);
+insert into t (id,a) values (252,98);
+insert into t (id,a) values (252,99);
+insert into t (id,a) values (253,0);
+insert into t (id,a) values (253,1);
+insert into t (id,a) values (253,2);
+insert into t (id,a) values (253,3);
+insert into t (id,a) values (253,4);
+insert into t (id,a) values (253,5);
+insert into t (id,a) values (253,6);
+insert into t (id,a) values (253,7);
+insert into t (id,a) values (253,8);
+insert into t (id,a) values (253,9);
+insert into t (id,a) values (253,10);
+insert into t (id,a) values (253,11);
+insert into t (id,a) values (253,12);
+insert into t (id,a) values (253,13);
+insert into t (id,a) values (253,14);
+insert into t (id,a) values (253,15);
+insert into t (id,a) values (253,16);
+insert into t (id,a) values (253,17);
+insert into t (id,a) values (253,18);
+insert into t (id,a) values (253,19);
+insert into t (id,a) values (253,20);
+insert into t (id,a) values (253,21);
+insert into t (id,a) values (253,22);
+insert into t (id,a) values (253,23);
+insert into t (id,a) values (253,24);
+insert into t (id,a) values (253,25);
+insert into t (id,a) values (253,26);
+insert into t (id,a) values (253,27);
+insert into t (id,a) values (253,28);
+insert into t (id,a) values (253,29);
+insert into t (id,a) values (253,30);
+insert into t (id,a) values (253,31);
+insert into t (id,a) values (253,32);
+insert into t (id,a) values (253,33);
+insert into t (id,a) values (253,34);
+insert into t (id,a) values (253,35);
+insert into t (id,a) values (253,36);
+insert into t (id,a) values (253,37);
+insert into t (id,a) values (253,38);
+insert into t (id,a) values (253,39);
+insert into t (id,a) values (253,40);
+insert into t (id,a) values (253,41);
+insert into t (id,a) values (253,42);
+insert into t (id,a) values (253,43);
+insert into t (id,a) values (253,44);
+insert into t (id,a) values (253,45);
+insert into t (id,a) values (253,46);
+insert into t (id,a) values (253,47);
+insert into t (id,a) values (253,48);
+insert into t (id,a) values (253,49);
+insert into t (id,a) values (253,50);
+insert into t (id,a) values (253,51);
+insert into t (id,a) values (253,52);
+insert into t (id,a) values (253,53);
+insert into t (id,a) values (253,54);
+insert into t (id,a) values (253,55);
+insert into t (id,a) values (253,56);
+insert into t (id,a) values (253,57);
+insert into t (id,a) values (253,58);
+insert into t (id,a) values (253,59);
+insert into t (id,a) values (253,60);
+insert into t (id,a) values (253,61);
+insert into t (id,a) values (253,62);
+insert into t (id,a) values (253,63);
+insert into t (id,a) values (253,64);
+insert into t (id,a) values (253,65);
+insert into t (id,a) values (253,66);
+insert into t (id,a) values (253,67);
+insert into t (id,a) values (253,68);
+insert into t (id,a) values (253,69);
+insert into t (id,a) values (253,70);
+insert into t (id,a) values (253,71);
+insert into t (id,a) values (253,72);
+insert into t (id,a) values (253,73);
+insert into t (id,a) values (253,74);
+insert into t (id,a) values (253,75);
+insert into t (id,a) values (253,76);
+insert into t (id,a) values (253,77);
+insert into t (id,a) values (253,78);
+insert into t (id,a) values (253,79);
+insert into t (id,a) values (253,80);
+insert into t (id,a) values (253,81);
+insert into t (id,a) values (253,82);
+insert into t (id,a) values (253,83);
+insert into t (id,a) values (253,84);
+insert into t (id,a) values (253,85);
+insert into t (id,a) values (253,86);
+insert into t (id,a) values (253,87);
+insert into t (id,a) values (253,88);
+insert into t (id,a) values (253,89);
+insert into t (id,a) values (253,90);
+insert into t (id,a) values (253,91);
+insert into t (id,a) values (253,92);
+insert into t (id,a) values (253,93);
+insert into t (id,a) values (253,94);
+insert into t (id,a) values (253,95);
+insert into t (id,a) values (253,96);
+insert into t (id,a) values (253,97);
+insert into t (id,a) values (253,98);
+insert into t (id,a) values (253,99);
+insert into t (id,a) values (254,0);
+insert into t (id,a) values (254,1);
+insert into t (id,a) values (254,2);
+insert into t (id,a) values (254,3);
+insert into t (id,a) values (254,4);
+insert into t (id,a) values (254,5);
+insert into t (id,a) values (254,6);
+insert into t (id,a) values (254,7);
+insert into t (id,a) values (254,8);
+insert into t (id,a) values (254,9);
+insert into t (id,a) values (254,10);
+insert into t (id,a) values (254,11);
+insert into t (id,a) values (254,12);
+insert into t (id,a) values (254,13);
+insert into t (id,a) values (254,14);
+insert into t (id,a) values (254,15);
+insert into t (id,a) values (254,16);
+insert into t (id,a) values (254,17);
+insert into t (id,a) values (254,18);
+insert into t (id,a) values (254,19);
+insert into t (id,a) values (254,20);
+insert into t (id,a) values (254,21);
+insert into t (id,a) values (254,22);
+insert into t (id,a) values (254,23);
+insert into t (id,a) values (254,24);
+insert into t (id,a) values (254,25);
+insert into t (id,a) values (254,26);
+insert into t (id,a) values (254,27);
+insert into t (id,a) values (254,28);
+insert into t (id,a) values (254,29);
+insert into t (id,a) values (254,30);
+insert into t (id,a) values (254,31);
+insert into t (id,a) values (254,32);
+insert into t (id,a) values (254,33);
+insert into t (id,a) values (254,34);
+insert into t (id,a) values (254,35);
+insert into t (id,a) values (254,36);
+insert into t (id,a) values (254,37);
+insert into t (id,a) values (254,38);
+insert into t (id,a) values (254,39);
+insert into t (id,a) values (254,40);
+insert into t (id,a) values (254,41);
+insert into t (id,a) values (254,42);
+insert into t (id,a) values (254,43);
+insert into t (id,a) values (254,44);
+insert into t (id,a) values (254,45);
+insert into t (id,a) values (254,46);
+insert into t (id,a) values (254,47);
+insert into t (id,a) values (254,48);
+insert into t (id,a) values (254,49);
+insert into t (id,a) values (254,50);
+insert into t (id,a) values (254,51);
+insert into t (id,a) values (254,52);
+insert into t (id,a) values (254,53);
+insert into t (id,a) values (254,54);
+insert into t (id,a) values (254,55);
+insert into t (id,a) values (254,56);
+insert into t (id,a) values (254,57);
+insert into t (id,a) values (254,58);
+insert into t (id,a) values (254,59);
+insert into t (id,a) values (254,60);
+insert into t (id,a) values (254,61);
+insert into t (id,a) values (254,62);
+insert into t (id,a) values (254,63);
+insert into t (id,a) values (254,64);
+insert into t (id,a) values (254,65);
+insert into t (id,a) values (254,66);
+insert into t (id,a) values (254,67);
+insert into t (id,a) values (254,68);
+insert into t (id,a) values (254,69);
+insert into t (id,a) values (254,70);
+insert into t (id,a) values (254,71);
+insert into t (id,a) values (254,72);
+insert into t (id,a) values (254,73);
+insert into t (id,a) values (254,74);
+insert into t (id,a) values (254,75);
+insert into t (id,a) values (254,76);
+insert into t (id,a) values (254,77);
+insert into t (id,a) values (254,78);
+insert into t (id,a) values (254,79);
+insert into t (id,a) values (254,80);
+insert into t (id,a) values (254,81);
+insert into t (id,a) values (254,82);
+insert into t (id,a) values (254,83);
+insert into t (id,a) values (254,84);
+insert into t (id,a) values (254,85);
+insert into t (id,a) values (254,86);
+insert into t (id,a) values (254,87);
+insert into t (id,a) values (254,88);
+insert into t (id,a) values (254,89);
+insert into t (id,a) values (254,90);
+insert into t (id,a) values (254,91);
+insert into t (id,a) values (254,92);
+insert into t (id,a) values (254,93);
+insert into t (id,a) values (254,94);
+insert into t (id,a) values (254,95);
+insert into t (id,a) values (254,96);
+insert into t (id,a) values (254,97);
+insert into t (id,a) values (254,98);
+insert into t (id,a) values (254,99);
+insert into t (id,a) values (255,0);
+insert into t (id,a) values (255,1);
+insert into t (id,a) values (255,2);
+insert into t (id,a) values (255,3);
+insert into t (id,a) values (255,4);
+insert into t (id,a) values (255,5);
+insert into t (id,a) values (255,6);
+insert into t (id,a) values (255,7);
+insert into t (id,a) values (255,8);
+insert into t (id,a) values (255,9);
+insert into t (id,a) values (255,10);
+insert into t (id,a) values (255,11);
+insert into t (id,a) values (255,12);
+insert into t (id,a) values (255,13);
+insert into t (id,a) values (255,14);
+insert into t (id,a) values (255,15);
+insert into t (id,a) values (255,16);
+insert into t (id,a) values (255,17);
+insert into t (id,a) values (255,18);
+insert into t (id,a) values (255,19);
+insert into t (id,a) values (255,20);
+insert into t (id,a) values (255,21);
+insert into t (id,a) values (255,22);
+insert into t (id,a) values (255,23);
+insert into t (id,a) values (255,24);
+insert into t (id,a) values (255,25);
+insert into t (id,a) values (255,26);
+insert into t (id,a) values (255,27);
+insert into t (id,a) values (255,28);
+insert into t (id,a) values (255,29);
+insert into t (id,a) values (255,30);
+insert into t (id,a) values (255,31);
+insert into t (id,a) values (255,32);
+insert into t (id,a) values (255,33);
+insert into t (id,a) values (255,34);
+insert into t (id,a) values (255,35);
+insert into t (id,a) values (255,36);
+insert into t (id,a) values (255,37);
+insert into t (id,a) values (255,38);
+insert into t (id,a) values (255,39);
+insert into t (id,a) values (255,40);
+insert into t (id,a) values (255,41);
+insert into t (id,a) values (255,42);
+insert into t (id,a) values (255,43);
+insert into t (id,a) values (255,44);
+insert into t (id,a) values (255,45);
+insert into t (id,a) values (255,46);
+insert into t (id,a) values (255,47);
+insert into t (id,a) values (255,48);
+insert into t (id,a) values (255,49);
+insert into t (id,a) values (255,50);
+insert into t (id,a) values (255,51);
+insert into t (id,a) values (255,52);
+insert into t (id,a) values (255,53);
+insert into t (id,a) values (255,54);
+insert into t (id,a) values (255,55);
+insert into t (id,a) values (255,56);
+insert into t (id,a) values (255,57);
+insert into t (id,a) values (255,58);
+insert into t (id,a) values (255,59);
+insert into t (id,a) values (255,60);
+insert into t (id,a) values (255,61);
+insert into t (id,a) values (255,62);
+insert into t (id,a) values (255,63);
+insert into t (id,a) values (255,64);
+insert into t (id,a) values (255,65);
+insert into t (id,a) values (255,66);
+insert into t (id,a) values (255,67);
+insert into t (id,a) values (255,68);
+insert into t (id,a) values (255,69);
+insert into t (id,a) values (255,70);
+insert into t (id,a) values (255,71);
+insert into t (id,a) values (255,72);
+insert into t (id,a) values (255,73);
+insert into t (id,a) values (255,74);
+insert into t (id,a) values (255,75);
+insert into t (id,a) values (255,76);
+insert into t (id,a) values (255,77);
+insert into t (id,a) values (255,78);
+insert into t (id,a) values (255,79);
+insert into t (id,a) values (255,80);
+insert into t (id,a) values (255,81);
+insert into t (id,a) values (255,82);
+insert into t (id,a) values (255,83);
+insert into t (id,a) values (255,84);
+insert into t (id,a) values (255,85);
+insert into t (id,a) values (255,86);
+insert into t (id,a) values (255,87);
+insert into t (id,a) values (255,88);
+insert into t (id,a) values (255,89);
+insert into t (id,a) values (255,90);
+insert into t (id,a) values (255,91);
+insert into t (id,a) values (255,92);
+insert into t (id,a) values (255,93);
+insert into t (id,a) values (255,94);
+insert into t (id,a) values (255,95);
+insert into t (id,a) values (255,96);
+insert into t (id,a) values (255,97);
+insert into t (id,a) values (255,98);
+insert into t (id,a) values (255,99);
+insert into t (id,a) values (256,0);
+insert into t (id,a) values (256,1);
+insert into t (id,a) values (256,2);
+insert into t (id,a) values (256,3);
+insert into t (id,a) values (256,4);
+insert into t (id,a) values (256,5);
+insert into t (id,a) values (256,6);
+insert into t (id,a) values (256,7);
+insert into t (id,a) values (256,8);
+insert into t (id,a) values (256,9);
+insert into t (id,a) values (256,10);
+insert into t (id,a) values (256,11);
+insert into t (id,a) values (256,12);
+insert into t (id,a) values (256,13);
+insert into t (id,a) values (256,14);
+insert into t (id,a) values (256,15);
+insert into t (id,a) values (256,16);
+insert into t (id,a) values (256,17);
+insert into t (id,a) values (256,18);
+insert into t (id,a) values (256,19);
+insert into t (id,a) values (256,20);
+insert into t (id,a) values (256,21);
+insert into t (id,a) values (256,22);
+insert into t (id,a) values (256,23);
+insert into t (id,a) values (256,24);
+insert into t (id,a) values (256,25);
+insert into t (id,a) values (256,26);
+insert into t (id,a) values (256,27);
+insert into t (id,a) values (256,28);
+insert into t (id,a) values (256,29);
+insert into t (id,a) values (256,30);
+insert into t (id,a) values (256,31);
+insert into t (id,a) values (256,32);
+insert into t (id,a) values (256,33);
+insert into t (id,a) values (256,34);
+insert into t (id,a) values (256,35);
+insert into t (id,a) values (256,36);
+insert into t (id,a) values (256,37);
+insert into t (id,a) values (256,38);
+insert into t (id,a) values (256,39);
+insert into t (id,a) values (256,40);
+insert into t (id,a) values (256,41);
+insert into t (id,a) values (256,42);
+insert into t (id,a) values (256,43);
+insert into t (id,a) values (256,44);
+insert into t (id,a) values (256,45);
+insert into t (id,a) values (256,46);
+insert into t (id,a) values (256,47);
+insert into t (id,a) values (256,48);
+insert into t (id,a) values (256,49);
+insert into t (id,a) values (256,50);
+insert into t (id,a) values (256,51);
+insert into t (id,a) values (256,52);
+insert into t (id,a) values (256,53);
+insert into t (id,a) values (256,54);
+insert into t (id,a) values (256,55);
+insert into t (id,a) values (256,56);
+insert into t (id,a) values (256,57);
+insert into t (id,a) values (256,58);
+insert into t (id,a) values (256,59);
+insert into t (id,a) values (256,60);
+insert into t (id,a) values (256,61);
+insert into t (id,a) values (256,62);
+insert into t (id,a) values (256,63);
+insert into t (id,a) values (256,64);
+insert into t (id,a) values (256,65);
+insert into t (id,a) values (256,66);
+insert into t (id,a) values (256,67);
+insert into t (id,a) values (256,68);
+insert into t (id,a) values (256,69);
+insert into t (id,a) values (256,70);
+insert into t (id,a) values (256,71);
+insert into t (id,a) values (256,72);
+insert into t (id,a) values (256,73);
+insert into t (id,a) values (256,74);
+insert into t (id,a) values (256,75);
+insert into t (id,a) values (256,76);
+insert into t (id,a) values (256,77);
+insert into t (id,a) values (256,78);
+insert into t (id,a) values (256,79);
+insert into t (id,a) values (256,80);
+insert into t (id,a) values (256,81);
+insert into t (id,a) values (256,82);
+insert into t (id,a) values (256,83);
+insert into t (id,a) values (256,84);
+insert into t (id,a) values (256,85);
+insert into t (id,a) values (256,86);
+insert into t (id,a) values (256,87);
+insert into t (id,a) values (256,88);
+insert into t (id,a) values (256,89);
+insert into t (id,a) values (256,90);
+insert into t (id,a) values (256,91);
+insert into t (id,a) values (256,92);
+insert into t (id,a) values (256,93);
+insert into t (id,a) values (256,94);
+insert into t (id,a) values (256,95);
+insert into t (id,a) values (256,96);
+insert into t (id,a) values (256,97);
+insert into t (id,a) values (256,98);
+insert into t (id,a) values (256,99);
+insert into t (id,a) values (257,0);
+insert into t (id,a) values (257,1);
+insert into t (id,a) values (257,2);
+insert into t (id,a) values (257,3);
+insert into t (id,a) values (257,4);
+insert into t (id,a) values (257,5);
+insert into t (id,a) values (257,6);
+insert into t (id,a) values (257,7);
+insert into t (id,a) values (257,8);
+insert into t (id,a) values (257,9);
+insert into t (id,a) values (257,10);
+insert into t (id,a) values (257,11);
+insert into t (id,a) values (257,12);
+insert into t (id,a) values (257,13);
+insert into t (id,a) values (257,14);
+insert into t (id,a) values (257,15);
+insert into t (id,a) values (257,16);
+insert into t (id,a) values (257,17);
+insert into t (id,a) values (257,18);
+insert into t (id,a) values (257,19);
+insert into t (id,a) values (257,20);
+insert into t (id,a) values (257,21);
+insert into t (id,a) values (257,22);
+insert into t (id,a) values (257,23);
+insert into t (id,a) values (257,24);
+insert into t (id,a) values (257,25);
+insert into t (id,a) values (257,26);
+insert into t (id,a) values (257,27);
+insert into t (id,a) values (257,28);
+insert into t (id,a) values (257,29);
+insert into t (id,a) values (257,30);
+insert into t (id,a) values (257,31);
+insert into t (id,a) values (257,32);
+insert into t (id,a) values (257,33);
+insert into t (id,a) values (257,34);
+insert into t (id,a) values (257,35);
+insert into t (id,a) values (257,36);
+insert into t (id,a) values (257,37);
+insert into t (id,a) values (257,38);
+insert into t (id,a) values (257,39);
+insert into t (id,a) values (257,40);
+insert into t (id,a) values (257,41);
+insert into t (id,a) values (257,42);
+insert into t (id,a) values (257,43);
+insert into t (id,a) values (257,44);
+insert into t (id,a) values (257,45);
+insert into t (id,a) values (257,46);
+insert into t (id,a) values (257,47);
+insert into t (id,a) values (257,48);
+insert into t (id,a) values (257,49);
+insert into t (id,a) values (257,50);
+insert into t (id,a) values (257,51);
+insert into t (id,a) values (257,52);
+insert into t (id,a) values (257,53);
+insert into t (id,a) values (257,54);
+insert into t (id,a) values (257,55);
+insert into t (id,a) values (257,56);
+insert into t (id,a) values (257,57);
+insert into t (id,a) values (257,58);
+insert into t (id,a) values (257,59);
+insert into t (id,a) values (257,60);
+insert into t (id,a) values (257,61);
+insert into t (id,a) values (257,62);
+insert into t (id,a) values (257,63);
+insert into t (id,a) values (257,64);
+insert into t (id,a) values (257,65);
+insert into t (id,a) values (257,66);
+insert into t (id,a) values (257,67);
+insert into t (id,a) values (257,68);
+insert into t (id,a) values (257,69);
+insert into t (id,a) values (257,70);
+insert into t (id,a) values (257,71);
+insert into t (id,a) values (257,72);
+insert into t (id,a) values (257,73);
+insert into t (id,a) values (257,74);
+insert into t (id,a) values (257,75);
+insert into t (id,a) values (257,76);
+insert into t (id,a) values (257,77);
+insert into t (id,a) values (257,78);
+insert into t (id,a) values (257,79);
+insert into t (id,a) values (257,80);
+insert into t (id,a) values (257,81);
+insert into t (id,a) values (257,82);
+insert into t (id,a) values (257,83);
+insert into t (id,a) values (257,84);
+insert into t (id,a) values (257,85);
+insert into t (id,a) values (257,86);
+insert into t (id,a) values (257,87);
+insert into t (id,a) values (257,88);
+insert into t (id,a) values (257,89);
+insert into t (id,a) values (257,90);
+insert into t (id,a) values (257,91);
+insert into t (id,a) values (257,92);
+insert into t (id,a) values (257,93);
+insert into t (id,a) values (257,94);
+insert into t (id,a) values (257,95);
+insert into t (id,a) values (257,96);
+insert into t (id,a) values (257,97);
+insert into t (id,a) values (257,98);
+insert into t (id,a) values (257,99);
+insert into t (id,a) values (258,0);
+insert into t (id,a) values (258,1);
+insert into t (id,a) values (258,2);
+insert into t (id,a) values (258,3);
+insert into t (id,a) values (258,4);
+insert into t (id,a) values (258,5);
+insert into t (id,a) values (258,6);
+insert into t (id,a) values (258,7);
+insert into t (id,a) values (258,8);
+insert into t (id,a) values (258,9);
+insert into t (id,a) values (258,10);
+insert into t (id,a) values (258,11);
+insert into t (id,a) values (258,12);
+insert into t (id,a) values (258,13);
+insert into t (id,a) values (258,14);
+insert into t (id,a) values (258,15);
+insert into t (id,a) values (258,16);
+insert into t (id,a) values (258,17);
+insert into t (id,a) values (258,18);
+insert into t (id,a) values (258,19);
+insert into t (id,a) values (258,20);
+insert into t (id,a) values (258,21);
+insert into t (id,a) values (258,22);
+insert into t (id,a) values (258,23);
+insert into t (id,a) values (258,24);
+insert into t (id,a) values (258,25);
+insert into t (id,a) values (258,26);
+insert into t (id,a) values (258,27);
+insert into t (id,a) values (258,28);
+insert into t (id,a) values (258,29);
+insert into t (id,a) values (258,30);
+insert into t (id,a) values (258,31);
+insert into t (id,a) values (258,32);
+insert into t (id,a) values (258,33);
+insert into t (id,a) values (258,34);
+insert into t (id,a) values (258,35);
+insert into t (id,a) values (258,36);
+insert into t (id,a) values (258,37);
+insert into t (id,a) values (258,38);
+insert into t (id,a) values (258,39);
+insert into t (id,a) values (258,40);
+insert into t (id,a) values (258,41);
+insert into t (id,a) values (258,42);
+insert into t (id,a) values (258,43);
+insert into t (id,a) values (258,44);
+insert into t (id,a) values (258,45);
+insert into t (id,a) values (258,46);
+insert into t (id,a) values (258,47);
+insert into t (id,a) values (258,48);
+insert into t (id,a) values (258,49);
+insert into t (id,a) values (258,50);
+insert into t (id,a) values (258,51);
+insert into t (id,a) values (258,52);
+insert into t (id,a) values (258,53);
+insert into t (id,a) values (258,54);
+insert into t (id,a) values (258,55);
+insert into t (id,a) values (258,56);
+insert into t (id,a) values (258,57);
+insert into t (id,a) values (258,58);
+insert into t (id,a) values (258,59);
+insert into t (id,a) values (258,60);
+insert into t (id,a) values (258,61);
+insert into t (id,a) values (258,62);
+insert into t (id,a) values (258,63);
+insert into t (id,a) values (258,64);
+insert into t (id,a) values (258,65);
+insert into t (id,a) values (258,66);
+insert into t (id,a) values (258,67);
+insert into t (id,a) values (258,68);
+insert into t (id,a) values (258,69);
+insert into t (id,a) values (258,70);
+insert into t (id,a) values (258,71);
+insert into t (id,a) values (258,72);
+insert into t (id,a) values (258,73);
+insert into t (id,a) values (258,74);
+insert into t (id,a) values (258,75);
+insert into t (id,a) values (258,76);
+insert into t (id,a) values (258,77);
+insert into t (id,a) values (258,78);
+insert into t (id,a) values (258,79);
+insert into t (id,a) values (258,80);
+insert into t (id,a) values (258,81);
+insert into t (id,a) values (258,82);
+insert into t (id,a) values (258,83);
+insert into t (id,a) values (258,84);
+insert into t (id,a) values (258,85);
+insert into t (id,a) values (258,86);
+insert into t (id,a) values (258,87);
+insert into t (id,a) values (258,88);
+insert into t (id,a) values (258,89);
+insert into t (id,a) values (258,90);
+insert into t (id,a) values (258,91);
+insert into t (id,a) values (258,92);
+insert into t (id,a) values (258,93);
+insert into t (id,a) values (258,94);
+insert into t (id,a) values (258,95);
+insert into t (id,a) values (258,96);
+insert into t (id,a) values (258,97);
+insert into t (id,a) values (258,98);
+insert into t (id,a) values (258,99);
+insert into t (id,a) values (259,0);
+insert into t (id,a) values (259,1);
+insert into t (id,a) values (259,2);
+insert into t (id,a) values (259,3);
+insert into t (id,a) values (259,4);
+insert into t (id,a) values (259,5);
+insert into t (id,a) values (259,6);
+insert into t (id,a) values (259,7);
+insert into t (id,a) values (259,8);
+insert into t (id,a) values (259,9);
+insert into t (id,a) values (259,10);
+insert into t (id,a) values (259,11);
+insert into t (id,a) values (259,12);
+insert into t (id,a) values (259,13);
+insert into t (id,a) values (259,14);
+insert into t (id,a) values (259,15);
+insert into t (id,a) values (259,16);
+insert into t (id,a) values (259,17);
+insert into t (id,a) values (259,18);
+insert into t (id,a) values (259,19);
+insert into t (id,a) values (259,20);
+insert into t (id,a) values (259,21);
+insert into t (id,a) values (259,22);
+insert into t (id,a) values (259,23);
+insert into t (id,a) values (259,24);
+insert into t (id,a) values (259,25);
+insert into t (id,a) values (259,26);
+insert into t (id,a) values (259,27);
+insert into t (id,a) values (259,28);
+insert into t (id,a) values (259,29);
+insert into t (id,a) values (259,30);
+insert into t (id,a) values (259,31);
+insert into t (id,a) values (259,32);
+insert into t (id,a) values (259,33);
+insert into t (id,a) values (259,34);
+insert into t (id,a) values (259,35);
+insert into t (id,a) values (259,36);
+insert into t (id,a) values (259,37);
+insert into t (id,a) values (259,38);
+insert into t (id,a) values (259,39);
+insert into t (id,a) values (259,40);
+insert into t (id,a) values (259,41);
+insert into t (id,a) values (259,42);
+insert into t (id,a) values (259,43);
+insert into t (id,a) values (259,44);
+insert into t (id,a) values (259,45);
+insert into t (id,a) values (259,46);
+insert into t (id,a) values (259,47);
+insert into t (id,a) values (259,48);
+insert into t (id,a) values (259,49);
+insert into t (id,a) values (259,50);
+insert into t (id,a) values (259,51);
+insert into t (id,a) values (259,52);
+insert into t (id,a) values (259,53);
+insert into t (id,a) values (259,54);
+insert into t (id,a) values (259,55);
+insert into t (id,a) values (259,56);
+insert into t (id,a) values (259,57);
+insert into t (id,a) values (259,58);
+insert into t (id,a) values (259,59);
+insert into t (id,a) values (259,60);
+insert into t (id,a) values (259,61);
+insert into t (id,a) values (259,62);
+insert into t (id,a) values (259,63);
+insert into t (id,a) values (259,64);
+insert into t (id,a) values (259,65);
+insert into t (id,a) values (259,66);
+insert into t (id,a) values (259,67);
+insert into t (id,a) values (259,68);
+insert into t (id,a) values (259,69);
+insert into t (id,a) values (259,70);
+insert into t (id,a) values (259,71);
+insert into t (id,a) values (259,72);
+insert into t (id,a) values (259,73);
+insert into t (id,a) values (259,74);
+insert into t (id,a) values (259,75);
+insert into t (id,a) values (259,76);
+insert into t (id,a) values (259,77);
+insert into t (id,a) values (259,78);
+insert into t (id,a) values (259,79);
+insert into t (id,a) values (259,80);
+insert into t (id,a) values (259,81);
+insert into t (id,a) values (259,82);
+insert into t (id,a) values (259,83);
+insert into t (id,a) values (259,84);
+insert into t (id,a) values (259,85);
+insert into t (id,a) values (259,86);
+insert into t (id,a) values (259,87);
+insert into t (id,a) values (259,88);
+insert into t (id,a) values (259,89);
+insert into t (id,a) values (259,90);
+insert into t (id,a) values (259,91);
+insert into t (id,a) values (259,92);
+insert into t (id,a) values (259,93);
+insert into t (id,a) values (259,94);
+insert into t (id,a) values (259,95);
+insert into t (id,a) values (259,96);
+insert into t (id,a) values (259,97);
+insert into t (id,a) values (259,98);
+insert into t (id,a) values (259,99);
+insert into t (id,a) values (260,0);
+insert into t (id,a) values (260,1);
+insert into t (id,a) values (260,2);
+insert into t (id,a) values (260,3);
+insert into t (id,a) values (260,4);
+insert into t (id,a) values (260,5);
+insert into t (id,a) values (260,6);
+insert into t (id,a) values (260,7);
+insert into t (id,a) values (260,8);
+insert into t (id,a) values (260,9);
+insert into t (id,a) values (260,10);
+insert into t (id,a) values (260,11);
+insert into t (id,a) values (260,12);
+insert into t (id,a) values (260,13);
+insert into t (id,a) values (260,14);
+insert into t (id,a) values (260,15);
+insert into t (id,a) values (260,16);
+insert into t (id,a) values (260,17);
+insert into t (id,a) values (260,18);
+insert into t (id,a) values (260,19);
+insert into t (id,a) values (260,20);
+insert into t (id,a) values (260,21);
+insert into t (id,a) values (260,22);
+insert into t (id,a) values (260,23);
+insert into t (id,a) values (260,24);
+insert into t (id,a) values (260,25);
+insert into t (id,a) values (260,26);
+insert into t (id,a) values (260,27);
+insert into t (id,a) values (260,28);
+insert into t (id,a) values (260,29);
+insert into t (id,a) values (260,30);
+insert into t (id,a) values (260,31);
+insert into t (id,a) values (260,32);
+insert into t (id,a) values (260,33);
+insert into t (id,a) values (260,34);
+insert into t (id,a) values (260,35);
+insert into t (id,a) values (260,36);
+insert into t (id,a) values (260,37);
+insert into t (id,a) values (260,38);
+insert into t (id,a) values (260,39);
+insert into t (id,a) values (260,40);
+insert into t (id,a) values (260,41);
+insert into t (id,a) values (260,42);
+insert into t (id,a) values (260,43);
+insert into t (id,a) values (260,44);
+insert into t (id,a) values (260,45);
+insert into t (id,a) values (260,46);
+insert into t (id,a) values (260,47);
+insert into t (id,a) values (260,48);
+insert into t (id,a) values (260,49);
+insert into t (id,a) values (260,50);
+insert into t (id,a) values (260,51);
+insert into t (id,a) values (260,52);
+insert into t (id,a) values (260,53);
+insert into t (id,a) values (260,54);
+insert into t (id,a) values (260,55);
+insert into t (id,a) values (260,56);
+insert into t (id,a) values (260,57);
+insert into t (id,a) values (260,58);
+insert into t (id,a) values (260,59);
+insert into t (id,a) values (260,60);
+insert into t (id,a) values (260,61);
+insert into t (id,a) values (260,62);
+insert into t (id,a) values (260,63);
+insert into t (id,a) values (260,64);
+insert into t (id,a) values (260,65);
+insert into t (id,a) values (260,66);
+insert into t (id,a) values (260,67);
+insert into t (id,a) values (260,68);
+insert into t (id,a) values (260,69);
+insert into t (id,a) values (260,70);
+insert into t (id,a) values (260,71);
+insert into t (id,a) values (260,72);
+insert into t (id,a) values (260,73);
+insert into t (id,a) values (260,74);
+insert into t (id,a) values (260,75);
+insert into t (id,a) values (260,76);
+insert into t (id,a) values (260,77);
+insert into t (id,a) values (260,78);
+insert into t (id,a) values (260,79);
+insert into t (id,a) values (260,80);
+insert into t (id,a) values (260,81);
+insert into t (id,a) values (260,82);
+insert into t (id,a) values (260,83);
+insert into t (id,a) values (260,84);
+insert into t (id,a) values (260,85);
+insert into t (id,a) values (260,86);
+insert into t (id,a) values (260,87);
+insert into t (id,a) values (260,88);
+insert into t (id,a) values (260,89);
+insert into t (id,a) values (260,90);
+insert into t (id,a) values (260,91);
+insert into t (id,a) values (260,92);
+insert into t (id,a) values (260,93);
+insert into t (id,a) values (260,94);
+insert into t (id,a) values (260,95);
+insert into t (id,a) values (260,96);
+insert into t (id,a) values (260,97);
+insert into t (id,a) values (260,98);
+insert into t (id,a) values (260,99);
+insert into t (id,a) values (261,0);
+insert into t (id,a) values (261,1);
+insert into t (id,a) values (261,2);
+insert into t (id,a) values (261,3);
+insert into t (id,a) values (261,4);
+insert into t (id,a) values (261,5);
+insert into t (id,a) values (261,6);
+insert into t (id,a) values (261,7);
+insert into t (id,a) values (261,8);
+insert into t (id,a) values (261,9);
+insert into t (id,a) values (261,10);
+insert into t (id,a) values (261,11);
+insert into t (id,a) values (261,12);
+insert into t (id,a) values (261,13);
+insert into t (id,a) values (261,14);
+insert into t (id,a) values (261,15);
+insert into t (id,a) values (261,16);
+insert into t (id,a) values (261,17);
+insert into t (id,a) values (261,18);
+insert into t (id,a) values (261,19);
+insert into t (id,a) values (261,20);
+insert into t (id,a) values (261,21);
+insert into t (id,a) values (261,22);
+insert into t (id,a) values (261,23);
+insert into t (id,a) values (261,24);
+insert into t (id,a) values (261,25);
+insert into t (id,a) values (261,26);
+insert into t (id,a) values (261,27);
+insert into t (id,a) values (261,28);
+insert into t (id,a) values (261,29);
+insert into t (id,a) values (261,30);
+insert into t (id,a) values (261,31);
+insert into t (id,a) values (261,32);
+insert into t (id,a) values (261,33);
+insert into t (id,a) values (261,34);
+insert into t (id,a) values (261,35);
+insert into t (id,a) values (261,36);
+insert into t (id,a) values (261,37);
+insert into t (id,a) values (261,38);
+insert into t (id,a) values (261,39);
+insert into t (id,a) values (261,40);
+insert into t (id,a) values (261,41);
+insert into t (id,a) values (261,42);
+insert into t (id,a) values (261,43);
+insert into t (id,a) values (261,44);
+insert into t (id,a) values (261,45);
+insert into t (id,a) values (261,46);
+insert into t (id,a) values (261,47);
+insert into t (id,a) values (261,48);
+insert into t (id,a) values (261,49);
+insert into t (id,a) values (261,50);
+insert into t (id,a) values (261,51);
+insert into t (id,a) values (261,52);
+insert into t (id,a) values (261,53);
+insert into t (id,a) values (261,54);
+insert into t (id,a) values (261,55);
+insert into t (id,a) values (261,56);
+insert into t (id,a) values (261,57);
+insert into t (id,a) values (261,58);
+insert into t (id,a) values (261,59);
+insert into t (id,a) values (261,60);
+insert into t (id,a) values (261,61);
+insert into t (id,a) values (261,62);
+insert into t (id,a) values (261,63);
+insert into t (id,a) values (261,64);
+insert into t (id,a) values (261,65);
+insert into t (id,a) values (261,66);
+insert into t (id,a) values (261,67);
+insert into t (id,a) values (261,68);
+insert into t (id,a) values (261,69);
+insert into t (id,a) values (261,70);
+insert into t (id,a) values (261,71);
+insert into t (id,a) values (261,72);
+insert into t (id,a) values (261,73);
+insert into t (id,a) values (261,74);
+insert into t (id,a) values (261,75);
+insert into t (id,a) values (261,76);
+insert into t (id,a) values (261,77);
+insert into t (id,a) values (261,78);
+insert into t (id,a) values (261,79);
+insert into t (id,a) values (261,80);
+insert into t (id,a) values (261,81);
+insert into t (id,a) values (261,82);
+insert into t (id,a) values (261,83);
+insert into t (id,a) values (261,84);
+insert into t (id,a) values (261,85);
+insert into t (id,a) values (261,86);
+insert into t (id,a) values (261,87);
+insert into t (id,a) values (261,88);
+insert into t (id,a) values (261,89);
+insert into t (id,a) values (261,90);
+insert into t (id,a) values (261,91);
+insert into t (id,a) values (261,92);
+insert into t (id,a) values (261,93);
+insert into t (id,a) values (261,94);
+insert into t (id,a) values (261,95);
+insert into t (id,a) values (261,96);
+insert into t (id,a) values (261,97);
+insert into t (id,a) values (261,98);
+insert into t (id,a) values (261,99);
+insert into t (id,a) values (262,0);
+insert into t (id,a) values (262,1);
+insert into t (id,a) values (262,2);
+insert into t (id,a) values (262,3);
+insert into t (id,a) values (262,4);
+insert into t (id,a) values (262,5);
+insert into t (id,a) values (262,6);
+insert into t (id,a) values (262,7);
+insert into t (id,a) values (262,8);
+insert into t (id,a) values (262,9);
+insert into t (id,a) values (262,10);
+insert into t (id,a) values (262,11);
+insert into t (id,a) values (262,12);
+insert into t (id,a) values (262,13);
+insert into t (id,a) values (262,14);
+insert into t (id,a) values (262,15);
+insert into t (id,a) values (262,16);
+insert into t (id,a) values (262,17);
+insert into t (id,a) values (262,18);
+insert into t (id,a) values (262,19);
+insert into t (id,a) values (262,20);
+insert into t (id,a) values (262,21);
+insert into t (id,a) values (262,22);
+insert into t (id,a) values (262,23);
+insert into t (id,a) values (262,24);
+insert into t (id,a) values (262,25);
+insert into t (id,a) values (262,26);
+insert into t (id,a) values (262,27);
+insert into t (id,a) values (262,28);
+insert into t (id,a) values (262,29);
+insert into t (id,a) values (262,30);
+insert into t (id,a) values (262,31);
+insert into t (id,a) values (262,32);
+insert into t (id,a) values (262,33);
+insert into t (id,a) values (262,34);
+insert into t (id,a) values (262,35);
+insert into t (id,a) values (262,36);
+insert into t (id,a) values (262,37);
+insert into t (id,a) values (262,38);
+insert into t (id,a) values (262,39);
+insert into t (id,a) values (262,40);
+insert into t (id,a) values (262,41);
+insert into t (id,a) values (262,42);
+insert into t (id,a) values (262,43);
+insert into t (id,a) values (262,44);
+insert into t (id,a) values (262,45);
+insert into t (id,a) values (262,46);
+insert into t (id,a) values (262,47);
+insert into t (id,a) values (262,48);
+insert into t (id,a) values (262,49);
+insert into t (id,a) values (262,50);
+insert into t (id,a) values (262,51);
+insert into t (id,a) values (262,52);
+insert into t (id,a) values (262,53);
+insert into t (id,a) values (262,54);
+insert into t (id,a) values (262,55);
+insert into t (id,a) values (262,56);
+insert into t (id,a) values (262,57);
+insert into t (id,a) values (262,58);
+insert into t (id,a) values (262,59);
+insert into t (id,a) values (262,60);
+insert into t (id,a) values (262,61);
+insert into t (id,a) values (262,62);
+insert into t (id,a) values (262,63);
+insert into t (id,a) values (262,64);
+insert into t (id,a) values (262,65);
+insert into t (id,a) values (262,66);
+insert into t (id,a) values (262,67);
+insert into t (id,a) values (262,68);
+insert into t (id,a) values (262,69);
+insert into t (id,a) values (262,70);
+insert into t (id,a) values (262,71);
+insert into t (id,a) values (262,72);
+insert into t (id,a) values (262,73);
+insert into t (id,a) values (262,74);
+insert into t (id,a) values (262,75);
+insert into t (id,a) values (262,76);
+insert into t (id,a) values (262,77);
+insert into t (id,a) values (262,78);
+insert into t (id,a) values (262,79);
+insert into t (id,a) values (262,80);
+insert into t (id,a) values (262,81);
+insert into t (id,a) values (262,82);
+insert into t (id,a) values (262,83);
+insert into t (id,a) values (262,84);
+insert into t (id,a) values (262,85);
+insert into t (id,a) values (262,86);
+insert into t (id,a) values (262,87);
+insert into t (id,a) values (262,88);
+insert into t (id,a) values (262,89);
+insert into t (id,a) values (262,90);
+insert into t (id,a) values (262,91);
+insert into t (id,a) values (262,92);
+insert into t (id,a) values (262,93);
+insert into t (id,a) values (262,94);
+insert into t (id,a) values (262,95);
+insert into t (id,a) values (262,96);
+insert into t (id,a) values (262,97);
+insert into t (id,a) values (262,98);
+insert into t (id,a) values (262,99);
+insert into t (id,a) values (263,0);
+insert into t (id,a) values (263,1);
+insert into t (id,a) values (263,2);
+insert into t (id,a) values (263,3);
+insert into t (id,a) values (263,4);
+insert into t (id,a) values (263,5);
+insert into t (id,a) values (263,6);
+insert into t (id,a) values (263,7);
+insert into t (id,a) values (263,8);
+insert into t (id,a) values (263,9);
+insert into t (id,a) values (263,10);
+insert into t (id,a) values (263,11);
+insert into t (id,a) values (263,12);
+insert into t (id,a) values (263,13);
+insert into t (id,a) values (263,14);
+insert into t (id,a) values (263,15);
+insert into t (id,a) values (263,16);
+insert into t (id,a) values (263,17);
+insert into t (id,a) values (263,18);
+insert into t (id,a) values (263,19);
+insert into t (id,a) values (263,20);
+insert into t (id,a) values (263,21);
+insert into t (id,a) values (263,22);
+insert into t (id,a) values (263,23);
+insert into t (id,a) values (263,24);
+insert into t (id,a) values (263,25);
+insert into t (id,a) values (263,26);
+insert into t (id,a) values (263,27);
+insert into t (id,a) values (263,28);
+insert into t (id,a) values (263,29);
+insert into t (id,a) values (263,30);
+insert into t (id,a) values (263,31);
+insert into t (id,a) values (263,32);
+insert into t (id,a) values (263,33);
+insert into t (id,a) values (263,34);
+insert into t (id,a) values (263,35);
+insert into t (id,a) values (263,36);
+insert into t (id,a) values (263,37);
+insert into t (id,a) values (263,38);
+insert into t (id,a) values (263,39);
+insert into t (id,a) values (263,40);
+insert into t (id,a) values (263,41);
+insert into t (id,a) values (263,42);
+insert into t (id,a) values (263,43);
+insert into t (id,a) values (263,44);
+insert into t (id,a) values (263,45);
+insert into t (id,a) values (263,46);
+insert into t (id,a) values (263,47);
+insert into t (id,a) values (263,48);
+insert into t (id,a) values (263,49);
+insert into t (id,a) values (263,50);
+insert into t (id,a) values (263,51);
+insert into t (id,a) values (263,52);
+insert into t (id,a) values (263,53);
+insert into t (id,a) values (263,54);
+insert into t (id,a) values (263,55);
+insert into t (id,a) values (263,56);
+insert into t (id,a) values (263,57);
+insert into t (id,a) values (263,58);
+insert into t (id,a) values (263,59);
+insert into t (id,a) values (263,60);
+insert into t (id,a) values (263,61);
+insert into t (id,a) values (263,62);
+insert into t (id,a) values (263,63);
+insert into t (id,a) values (263,64);
+insert into t (id,a) values (263,65);
+insert into t (id,a) values (263,66);
+insert into t (id,a) values (263,67);
+insert into t (id,a) values (263,68);
+insert into t (id,a) values (263,69);
+insert into t (id,a) values (263,70);
+insert into t (id,a) values (263,71);
+insert into t (id,a) values (263,72);
+insert into t (id,a) values (263,73);
+insert into t (id,a) values (263,74);
+insert into t (id,a) values (263,75);
+insert into t (id,a) values (263,76);
+insert into t (id,a) values (263,77);
+insert into t (id,a) values (263,78);
+insert into t (id,a) values (263,79);
+insert into t (id,a) values (263,80);
+insert into t (id,a) values (263,81);
+insert into t (id,a) values (263,82);
+insert into t (id,a) values (263,83);
+insert into t (id,a) values (263,84);
+insert into t (id,a) values (263,85);
+insert into t (id,a) values (263,86);
+insert into t (id,a) values (263,87);
+insert into t (id,a) values (263,88);
+insert into t (id,a) values (263,89);
+insert into t (id,a) values (263,90);
+insert into t (id,a) values (263,91);
+insert into t (id,a) values (263,92);
+insert into t (id,a) values (263,93);
+insert into t (id,a) values (263,94);
+insert into t (id,a) values (263,95);
+insert into t (id,a) values (263,96);
+insert into t (id,a) values (263,97);
+insert into t (id,a) values (263,98);
+insert into t (id,a) values (263,99);
+insert into t (id,a) values (264,0);
+insert into t (id,a) values (264,1);
+insert into t (id,a) values (264,2);
+insert into t (id,a) values (264,3);
+insert into t (id,a) values (264,4);
+insert into t (id,a) values (264,5);
+insert into t (id,a) values (264,6);
+insert into t (id,a) values (264,7);
+insert into t (id,a) values (264,8);
+insert into t (id,a) values (264,9);
+insert into t (id,a) values (264,10);
+insert into t (id,a) values (264,11);
+insert into t (id,a) values (264,12);
+insert into t (id,a) values (264,13);
+insert into t (id,a) values (264,14);
+insert into t (id,a) values (264,15);
+insert into t (id,a) values (264,16);
+insert into t (id,a) values (264,17);
+insert into t (id,a) values (264,18);
+insert into t (id,a) values (264,19);
+insert into t (id,a) values (264,20);
+insert into t (id,a) values (264,21);
+insert into t (id,a) values (264,22);
+insert into t (id,a) values (264,23);
+insert into t (id,a) values (264,24);
+insert into t (id,a) values (264,25);
+insert into t (id,a) values (264,26);
+insert into t (id,a) values (264,27);
+insert into t (id,a) values (264,28);
+insert into t (id,a) values (264,29);
+insert into t (id,a) values (264,30);
+insert into t (id,a) values (264,31);
+insert into t (id,a) values (264,32);
+insert into t (id,a) values (264,33);
+insert into t (id,a) values (264,34);
+insert into t (id,a) values (264,35);
+insert into t (id,a) values (264,36);
+insert into t (id,a) values (264,37);
+insert into t (id,a) values (264,38);
+insert into t (id,a) values (264,39);
+insert into t (id,a) values (264,40);
+insert into t (id,a) values (264,41);
+insert into t (id,a) values (264,42);
+insert into t (id,a) values (264,43);
+insert into t (id,a) values (264,44);
+insert into t (id,a) values (264,45);
+insert into t (id,a) values (264,46);
+insert into t (id,a) values (264,47);
+insert into t (id,a) values (264,48);
+insert into t (id,a) values (264,49);
+insert into t (id,a) values (264,50);
+insert into t (id,a) values (264,51);
+insert into t (id,a) values (264,52);
+insert into t (id,a) values (264,53);
+insert into t (id,a) values (264,54);
+insert into t (id,a) values (264,55);
+insert into t (id,a) values (264,56);
+insert into t (id,a) values (264,57);
+insert into t (id,a) values (264,58);
+insert into t (id,a) values (264,59);
+insert into t (id,a) values (264,60);
+insert into t (id,a) values (264,61);
+insert into t (id,a) values (264,62);
+insert into t (id,a) values (264,63);
+insert into t (id,a) values (264,64);
+insert into t (id,a) values (264,65);
+insert into t (id,a) values (264,66);
+insert into t (id,a) values (264,67);
+insert into t (id,a) values (264,68);
+insert into t (id,a) values (264,69);
+insert into t (id,a) values (264,70);
+insert into t (id,a) values (264,71);
+insert into t (id,a) values (264,72);
+insert into t (id,a) values (264,73);
+insert into t (id,a) values (264,74);
+insert into t (id,a) values (264,75);
+insert into t (id,a) values (264,76);
+insert into t (id,a) values (264,77);
+insert into t (id,a) values (264,78);
+insert into t (id,a) values (264,79);
+insert into t (id,a) values (264,80);
+insert into t (id,a) values (264,81);
+insert into t (id,a) values (264,82);
+insert into t (id,a) values (264,83);
+insert into t (id,a) values (264,84);
+insert into t (id,a) values (264,85);
+insert into t (id,a) values (264,86);
+insert into t (id,a) values (264,87);
+insert into t (id,a) values (264,88);
+insert into t (id,a) values (264,89);
+insert into t (id,a) values (264,90);
+insert into t (id,a) values (264,91);
+insert into t (id,a) values (264,92);
+insert into t (id,a) values (264,93);
+insert into t (id,a) values (264,94);
+insert into t (id,a) values (264,95);
+insert into t (id,a) values (264,96);
+insert into t (id,a) values (264,97);
+insert into t (id,a) values (264,98);
+insert into t (id,a) values (264,99);
+insert into t (id,a) values (265,0);
+insert into t (id,a) values (265,1);
+insert into t (id,a) values (265,2);
+insert into t (id,a) values (265,3);
+insert into t (id,a) values (265,4);
+insert into t (id,a) values (265,5);
+insert into t (id,a) values (265,6);
+insert into t (id,a) values (265,7);
+insert into t (id,a) values (265,8);
+insert into t (id,a) values (265,9);
+insert into t (id,a) values (265,10);
+insert into t (id,a) values (265,11);
+insert into t (id,a) values (265,12);
+insert into t (id,a) values (265,13);
+insert into t (id,a) values (265,14);
+insert into t (id,a) values (265,15);
+insert into t (id,a) values (265,16);
+insert into t (id,a) values (265,17);
+insert into t (id,a) values (265,18);
+insert into t (id,a) values (265,19);
+insert into t (id,a) values (265,20);
+insert into t (id,a) values (265,21);
+insert into t (id,a) values (265,22);
+insert into t (id,a) values (265,23);
+insert into t (id,a) values (265,24);
+insert into t (id,a) values (265,25);
+insert into t (id,a) values (265,26);
+insert into t (id,a) values (265,27);
+insert into t (id,a) values (265,28);
+insert into t (id,a) values (265,29);
+insert into t (id,a) values (265,30);
+insert into t (id,a) values (265,31);
+insert into t (id,a) values (265,32);
+insert into t (id,a) values (265,33);
+insert into t (id,a) values (265,34);
+insert into t (id,a) values (265,35);
+insert into t (id,a) values (265,36);
+insert into t (id,a) values (265,37);
+insert into t (id,a) values (265,38);
+insert into t (id,a) values (265,39);
+insert into t (id,a) values (265,40);
+insert into t (id,a) values (265,41);
+insert into t (id,a) values (265,42);
+insert into t (id,a) values (265,43);
+insert into t (id,a) values (265,44);
+insert into t (id,a) values (265,45);
+insert into t (id,a) values (265,46);
+insert into t (id,a) values (265,47);
+insert into t (id,a) values (265,48);
+insert into t (id,a) values (265,49);
+insert into t (id,a) values (265,50);
+insert into t (id,a) values (265,51);
+insert into t (id,a) values (265,52);
+insert into t (id,a) values (265,53);
+insert into t (id,a) values (265,54);
+insert into t (id,a) values (265,55);
+insert into t (id,a) values (265,56);
+insert into t (id,a) values (265,57);
+insert into t (id,a) values (265,58);
+insert into t (id,a) values (265,59);
+insert into t (id,a) values (265,60);
+insert into t (id,a) values (265,61);
+insert into t (id,a) values (265,62);
+insert into t (id,a) values (265,63);
+insert into t (id,a) values (265,64);
+insert into t (id,a) values (265,65);
+insert into t (id,a) values (265,66);
+insert into t (id,a) values (265,67);
+insert into t (id,a) values (265,68);
+insert into t (id,a) values (265,69);
+insert into t (id,a) values (265,70);
+insert into t (id,a) values (265,71);
+insert into t (id,a) values (265,72);
+insert into t (id,a) values (265,73);
+insert into t (id,a) values (265,74);
+insert into t (id,a) values (265,75);
+insert into t (id,a) values (265,76);
+insert into t (id,a) values (265,77);
+insert into t (id,a) values (265,78);
+insert into t (id,a) values (265,79);
+insert into t (id,a) values (265,80);
+insert into t (id,a) values (265,81);
+insert into t (id,a) values (265,82);
+insert into t (id,a) values (265,83);
+insert into t (id,a) values (265,84);
+insert into t (id,a) values (265,85);
+insert into t (id,a) values (265,86);
+insert into t (id,a) values (265,87);
+insert into t (id,a) values (265,88);
+insert into t (id,a) values (265,89);
+insert into t (id,a) values (265,90);
+insert into t (id,a) values (265,91);
+insert into t (id,a) values (265,92);
+insert into t (id,a) values (265,93);
+insert into t (id,a) values (265,94);
+insert into t (id,a) values (265,95);
+insert into t (id,a) values (265,96);
+insert into t (id,a) values (265,97);
+insert into t (id,a) values (265,98);
+insert into t (id,a) values (265,99);
+insert into t (id,a) values (266,0);
+insert into t (id,a) values (266,1);
+insert into t (id,a) values (266,2);
+insert into t (id,a) values (266,3);
+insert into t (id,a) values (266,4);
+insert into t (id,a) values (266,5);
+insert into t (id,a) values (266,6);
+insert into t (id,a) values (266,7);
+insert into t (id,a) values (266,8);
+insert into t (id,a) values (266,9);
+insert into t (id,a) values (266,10);
+insert into t (id,a) values (266,11);
+insert into t (id,a) values (266,12);
+insert into t (id,a) values (266,13);
+insert into t (id,a) values (266,14);
+insert into t (id,a) values (266,15);
+insert into t (id,a) values (266,16);
+insert into t (id,a) values (266,17);
+insert into t (id,a) values (266,18);
+insert into t (id,a) values (266,19);
+insert into t (id,a) values (266,20);
+insert into t (id,a) values (266,21);
+insert into t (id,a) values (266,22);
+insert into t (id,a) values (266,23);
+insert into t (id,a) values (266,24);
+insert into t (id,a) values (266,25);
+insert into t (id,a) values (266,26);
+insert into t (id,a) values (266,27);
+insert into t (id,a) values (266,28);
+insert into t (id,a) values (266,29);
+insert into t (id,a) values (266,30);
+insert into t (id,a) values (266,31);
+insert into t (id,a) values (266,32);
+insert into t (id,a) values (266,33);
+insert into t (id,a) values (266,34);
+insert into t (id,a) values (266,35);
+insert into t (id,a) values (266,36);
+insert into t (id,a) values (266,37);
+insert into t (id,a) values (266,38);
+insert into t (id,a) values (266,39);
+insert into t (id,a) values (266,40);
+insert into t (id,a) values (266,41);
+insert into t (id,a) values (266,42);
+insert into t (id,a) values (266,43);
+insert into t (id,a) values (266,44);
+insert into t (id,a) values (266,45);
+insert into t (id,a) values (266,46);
+insert into t (id,a) values (266,47);
+insert into t (id,a) values (266,48);
+insert into t (id,a) values (266,49);
+insert into t (id,a) values (266,50);
+insert into t (id,a) values (266,51);
+insert into t (id,a) values (266,52);
+insert into t (id,a) values (266,53);
+insert into t (id,a) values (266,54);
+insert into t (id,a) values (266,55);
+insert into t (id,a) values (266,56);
+insert into t (id,a) values (266,57);
+insert into t (id,a) values (266,58);
+insert into t (id,a) values (266,59);
+insert into t (id,a) values (266,60);
+insert into t (id,a) values (266,61);
+insert into t (id,a) values (266,62);
+insert into t (id,a) values (266,63);
+insert into t (id,a) values (266,64);
+insert into t (id,a) values (266,65);
+insert into t (id,a) values (266,66);
+insert into t (id,a) values (266,67);
+insert into t (id,a) values (266,68);
+insert into t (id,a) values (266,69);
+insert into t (id,a) values (266,70);
+insert into t (id,a) values (266,71);
+insert into t (id,a) values (266,72);
+insert into t (id,a) values (266,73);
+insert into t (id,a) values (266,74);
+insert into t (id,a) values (266,75);
+insert into t (id,a) values (266,76);
+insert into t (id,a) values (266,77);
+insert into t (id,a) values (266,78);
+insert into t (id,a) values (266,79);
+insert into t (id,a) values (266,80);
+insert into t (id,a) values (266,81);
+insert into t (id,a) values (266,82);
+insert into t (id,a) values (266,83);
+insert into t (id,a) values (266,84);
+insert into t (id,a) values (266,85);
+insert into t (id,a) values (266,86);
+insert into t (id,a) values (266,87);
+insert into t (id,a) values (266,88);
+insert into t (id,a) values (266,89);
+insert into t (id,a) values (266,90);
+insert into t (id,a) values (266,91);
+insert into t (id,a) values (266,92);
+insert into t (id,a) values (266,93);
+insert into t (id,a) values (266,94);
+insert into t (id,a) values (266,95);
+insert into t (id,a) values (266,96);
+insert into t (id,a) values (266,97);
+insert into t (id,a) values (266,98);
+insert into t (id,a) values (266,99);
+insert into t (id,a) values (267,0);
+insert into t (id,a) values (267,1);
+insert into t (id,a) values (267,2);
+insert into t (id,a) values (267,3);
+insert into t (id,a) values (267,4);
+insert into t (id,a) values (267,5);
+insert into t (id,a) values (267,6);
+insert into t (id,a) values (267,7);
+insert into t (id,a) values (267,8);
+insert into t (id,a) values (267,9);
+insert into t (id,a) values (267,10);
+insert into t (id,a) values (267,11);
+insert into t (id,a) values (267,12);
+insert into t (id,a) values (267,13);
+insert into t (id,a) values (267,14);
+insert into t (id,a) values (267,15);
+insert into t (id,a) values (267,16);
+insert into t (id,a) values (267,17);
+insert into t (id,a) values (267,18);
+insert into t (id,a) values (267,19);
+insert into t (id,a) values (267,20);
+insert into t (id,a) values (267,21);
+insert into t (id,a) values (267,22);
+insert into t (id,a) values (267,23);
+insert into t (id,a) values (267,24);
+insert into t (id,a) values (267,25);
+insert into t (id,a) values (267,26);
+insert into t (id,a) values (267,27);
+insert into t (id,a) values (267,28);
+insert into t (id,a) values (267,29);
+insert into t (id,a) values (267,30);
+insert into t (id,a) values (267,31);
+insert into t (id,a) values (267,32);
+insert into t (id,a) values (267,33);
+insert into t (id,a) values (267,34);
+insert into t (id,a) values (267,35);
+insert into t (id,a) values (267,36);
+insert into t (id,a) values (267,37);
+insert into t (id,a) values (267,38);
+insert into t (id,a) values (267,39);
+insert into t (id,a) values (267,40);
+insert into t (id,a) values (267,41);
+insert into t (id,a) values (267,42);
+insert into t (id,a) values (267,43);
+insert into t (id,a) values (267,44);
+insert into t (id,a) values (267,45);
+insert into t (id,a) values (267,46);
+insert into t (id,a) values (267,47);
+insert into t (id,a) values (267,48);
+insert into t (id,a) values (267,49);
+insert into t (id,a) values (267,50);
+insert into t (id,a) values (267,51);
+insert into t (id,a) values (267,52);
+insert into t (id,a) values (267,53);
+insert into t (id,a) values (267,54);
+insert into t (id,a) values (267,55);
+insert into t (id,a) values (267,56);
+insert into t (id,a) values (267,57);
+insert into t (id,a) values (267,58);
+insert into t (id,a) values (267,59);
+insert into t (id,a) values (267,60);
+insert into t (id,a) values (267,61);
+insert into t (id,a) values (267,62);
+insert into t (id,a) values (267,63);
+insert into t (id,a) values (267,64);
+insert into t (id,a) values (267,65);
+insert into t (id,a) values (267,66);
+insert into t (id,a) values (267,67);
+insert into t (id,a) values (267,68);
+insert into t (id,a) values (267,69);
+insert into t (id,a) values (267,70);
+insert into t (id,a) values (267,71);
+insert into t (id,a) values (267,72);
+insert into t (id,a) values (267,73);
+insert into t (id,a) values (267,74);
+insert into t (id,a) values (267,75);
+insert into t (id,a) values (267,76);
+insert into t (id,a) values (267,77);
+insert into t (id,a) values (267,78);
+insert into t (id,a) values (267,79);
+insert into t (id,a) values (267,80);
+insert into t (id,a) values (267,81);
+insert into t (id,a) values (267,82);
+insert into t (id,a) values (267,83);
+insert into t (id,a) values (267,84);
+insert into t (id,a) values (267,85);
+insert into t (id,a) values (267,86);
+insert into t (id,a) values (267,87);
+insert into t (id,a) values (267,88);
+insert into t (id,a) values (267,89);
+insert into t (id,a) values (267,90);
+insert into t (id,a) values (267,91);
+insert into t (id,a) values (267,92);
+insert into t (id,a) values (267,93);
+insert into t (id,a) values (267,94);
+insert into t (id,a) values (267,95);
+insert into t (id,a) values (267,96);
+insert into t (id,a) values (267,97);
+insert into t (id,a) values (267,98);
+insert into t (id,a) values (267,99);
+insert into t (id,a) values (268,0);
+insert into t (id,a) values (268,1);
+insert into t (id,a) values (268,2);
+insert into t (id,a) values (268,3);
+insert into t (id,a) values (268,4);
+insert into t (id,a) values (268,5);
+insert into t (id,a) values (268,6);
+insert into t (id,a) values (268,7);
+insert into t (id,a) values (268,8);
+insert into t (id,a) values (268,9);
+insert into t (id,a) values (268,10);
+insert into t (id,a) values (268,11);
+insert into t (id,a) values (268,12);
+insert into t (id,a) values (268,13);
+insert into t (id,a) values (268,14);
+insert into t (id,a) values (268,15);
+insert into t (id,a) values (268,16);
+insert into t (id,a) values (268,17);
+insert into t (id,a) values (268,18);
+insert into t (id,a) values (268,19);
+insert into t (id,a) values (268,20);
+insert into t (id,a) values (268,21);
+insert into t (id,a) values (268,22);
+insert into t (id,a) values (268,23);
+insert into t (id,a) values (268,24);
+insert into t (id,a) values (268,25);
+insert into t (id,a) values (268,26);
+insert into t (id,a) values (268,27);
+insert into t (id,a) values (268,28);
+insert into t (id,a) values (268,29);
+insert into t (id,a) values (268,30);
+insert into t (id,a) values (268,31);
+insert into t (id,a) values (268,32);
+insert into t (id,a) values (268,33);
+insert into t (id,a) values (268,34);
+insert into t (id,a) values (268,35);
+insert into t (id,a) values (268,36);
+insert into t (id,a) values (268,37);
+insert into t (id,a) values (268,38);
+insert into t (id,a) values (268,39);
+insert into t (id,a) values (268,40);
+insert into t (id,a) values (268,41);
+insert into t (id,a) values (268,42);
+insert into t (id,a) values (268,43);
+insert into t (id,a) values (268,44);
+insert into t (id,a) values (268,45);
+insert into t (id,a) values (268,46);
+insert into t (id,a) values (268,47);
+insert into t (id,a) values (268,48);
+insert into t (id,a) values (268,49);
+insert into t (id,a) values (268,50);
+insert into t (id,a) values (268,51);
+insert into t (id,a) values (268,52);
+insert into t (id,a) values (268,53);
+insert into t (id,a) values (268,54);
+insert into t (id,a) values (268,55);
+insert into t (id,a) values (268,56);
+insert into t (id,a) values (268,57);
+insert into t (id,a) values (268,58);
+insert into t (id,a) values (268,59);
+insert into t (id,a) values (268,60);
+insert into t (id,a) values (268,61);
+insert into t (id,a) values (268,62);
+insert into t (id,a) values (268,63);
+insert into t (id,a) values (268,64);
+insert into t (id,a) values (268,65);
+insert into t (id,a) values (268,66);
+insert into t (id,a) values (268,67);
+insert into t (id,a) values (268,68);
+insert into t (id,a) values (268,69);
+insert into t (id,a) values (268,70);
+insert into t (id,a) values (268,71);
+insert into t (id,a) values (268,72);
+insert into t (id,a) values (268,73);
+insert into t (id,a) values (268,74);
+insert into t (id,a) values (268,75);
+insert into t (id,a) values (268,76);
+insert into t (id,a) values (268,77);
+insert into t (id,a) values (268,78);
+insert into t (id,a) values (268,79);
+insert into t (id,a) values (268,80);
+insert into t (id,a) values (268,81);
+insert into t (id,a) values (268,82);
+insert into t (id,a) values (268,83);
+insert into t (id,a) values (268,84);
+insert into t (id,a) values (268,85);
+insert into t (id,a) values (268,86);
+insert into t (id,a) values (268,87);
+insert into t (id,a) values (268,88);
+insert into t (id,a) values (268,89);
+insert into t (id,a) values (268,90);
+insert into t (id,a) values (268,91);
+insert into t (id,a) values (268,92);
+insert into t (id,a) values (268,93);
+insert into t (id,a) values (268,94);
+insert into t (id,a) values (268,95);
+insert into t (id,a) values (268,96);
+insert into t (id,a) values (268,97);
+insert into t (id,a) values (268,98);
+insert into t (id,a) values (268,99);
+insert into t (id,a) values (269,0);
+insert into t (id,a) values (269,1);
+insert into t (id,a) values (269,2);
+insert into t (id,a) values (269,3);
+insert into t (id,a) values (269,4);
+insert into t (id,a) values (269,5);
+insert into t (id,a) values (269,6);
+insert into t (id,a) values (269,7);
+insert into t (id,a) values (269,8);
+insert into t (id,a) values (269,9);
+insert into t (id,a) values (269,10);
+insert into t (id,a) values (269,11);
+insert into t (id,a) values (269,12);
+insert into t (id,a) values (269,13);
+insert into t (id,a) values (269,14);
+insert into t (id,a) values (269,15);
+insert into t (id,a) values (269,16);
+insert into t (id,a) values (269,17);
+insert into t (id,a) values (269,18);
+insert into t (id,a) values (269,19);
+insert into t (id,a) values (269,20);
+insert into t (id,a) values (269,21);
+insert into t (id,a) values (269,22);
+insert into t (id,a) values (269,23);
+insert into t (id,a) values (269,24);
+insert into t (id,a) values (269,25);
+insert into t (id,a) values (269,26);
+insert into t (id,a) values (269,27);
+insert into t (id,a) values (269,28);
+insert into t (id,a) values (269,29);
+insert into t (id,a) values (269,30);
+insert into t (id,a) values (269,31);
+insert into t (id,a) values (269,32);
+insert into t (id,a) values (269,33);
+insert into t (id,a) values (269,34);
+insert into t (id,a) values (269,35);
+insert into t (id,a) values (269,36);
+insert into t (id,a) values (269,37);
+insert into t (id,a) values (269,38);
+insert into t (id,a) values (269,39);
+insert into t (id,a) values (269,40);
+insert into t (id,a) values (269,41);
+insert into t (id,a) values (269,42);
+insert into t (id,a) values (269,43);
+insert into t (id,a) values (269,44);
+insert into t (id,a) values (269,45);
+insert into t (id,a) values (269,46);
+insert into t (id,a) values (269,47);
+insert into t (id,a) values (269,48);
+insert into t (id,a) values (269,49);
+insert into t (id,a) values (269,50);
+insert into t (id,a) values (269,51);
+insert into t (id,a) values (269,52);
+insert into t (id,a) values (269,53);
+insert into t (id,a) values (269,54);
+insert into t (id,a) values (269,55);
+insert into t (id,a) values (269,56);
+insert into t (id,a) values (269,57);
+insert into t (id,a) values (269,58);
+insert into t (id,a) values (269,59);
+insert into t (id,a) values (269,60);
+insert into t (id,a) values (269,61);
+insert into t (id,a) values (269,62);
+insert into t (id,a) values (269,63);
+insert into t (id,a) values (269,64);
+insert into t (id,a) values (269,65);
+insert into t (id,a) values (269,66);
+insert into t (id,a) values (269,67);
+insert into t (id,a) values (269,68);
+insert into t (id,a) values (269,69);
+insert into t (id,a) values (269,70);
+insert into t (id,a) values (269,71);
+insert into t (id,a) values (269,72);
+insert into t (id,a) values (269,73);
+insert into t (id,a) values (269,74);
+insert into t (id,a) values (269,75);
+insert into t (id,a) values (269,76);
+insert into t (id,a) values (269,77);
+insert into t (id,a) values (269,78);
+insert into t (id,a) values (269,79);
+insert into t (id,a) values (269,80);
+insert into t (id,a) values (269,81);
+insert into t (id,a) values (269,82);
+insert into t (id,a) values (269,83);
+insert into t (id,a) values (269,84);
+insert into t (id,a) values (269,85);
+insert into t (id,a) values (269,86);
+insert into t (id,a) values (269,87);
+insert into t (id,a) values (269,88);
+insert into t (id,a) values (269,89);
+insert into t (id,a) values (269,90);
+insert into t (id,a) values (269,91);
+insert into t (id,a) values (269,92);
+insert into t (id,a) values (269,93);
+insert into t (id,a) values (269,94);
+insert into t (id,a) values (269,95);
+insert into t (id,a) values (269,96);
+insert into t (id,a) values (269,97);
+insert into t (id,a) values (269,98);
+insert into t (id,a) values (269,99);
+insert into t (id,a) values (270,0);
+insert into t (id,a) values (270,1);
+insert into t (id,a) values (270,2);
+insert into t (id,a) values (270,3);
+insert into t (id,a) values (270,4);
+insert into t (id,a) values (270,5);
+insert into t (id,a) values (270,6);
+insert into t (id,a) values (270,7);
+insert into t (id,a) values (270,8);
+insert into t (id,a) values (270,9);
+insert into t (id,a) values (270,10);
+insert into t (id,a) values (270,11);
+insert into t (id,a) values (270,12);
+insert into t (id,a) values (270,13);
+insert into t (id,a) values (270,14);
+insert into t (id,a) values (270,15);
+insert into t (id,a) values (270,16);
+insert into t (id,a) values (270,17);
+insert into t (id,a) values (270,18);
+insert into t (id,a) values (270,19);
+insert into t (id,a) values (270,20);
+insert into t (id,a) values (270,21);
+insert into t (id,a) values (270,22);
+insert into t (id,a) values (270,23);
+insert into t (id,a) values (270,24);
+insert into t (id,a) values (270,25);
+insert into t (id,a) values (270,26);
+insert into t (id,a) values (270,27);
+insert into t (id,a) values (270,28);
+insert into t (id,a) values (270,29);
+insert into t (id,a) values (270,30);
+insert into t (id,a) values (270,31);
+insert into t (id,a) values (270,32);
+insert into t (id,a) values (270,33);
+insert into t (id,a) values (270,34);
+insert into t (id,a) values (270,35);
+insert into t (id,a) values (270,36);
+insert into t (id,a) values (270,37);
+insert into t (id,a) values (270,38);
+insert into t (id,a) values (270,39);
+insert into t (id,a) values (270,40);
+insert into t (id,a) values (270,41);
+insert into t (id,a) values (270,42);
+insert into t (id,a) values (270,43);
+insert into t (id,a) values (270,44);
+insert into t (id,a) values (270,45);
+insert into t (id,a) values (270,46);
+insert into t (id,a) values (270,47);
+insert into t (id,a) values (270,48);
+insert into t (id,a) values (270,49);
+insert into t (id,a) values (270,50);
+insert into t (id,a) values (270,51);
+insert into t (id,a) values (270,52);
+insert into t (id,a) values (270,53);
+insert into t (id,a) values (270,54);
+insert into t (id,a) values (270,55);
+insert into t (id,a) values (270,56);
+insert into t (id,a) values (270,57);
+insert into t (id,a) values (270,58);
+insert into t (id,a) values (270,59);
+insert into t (id,a) values (270,60);
+insert into t (id,a) values (270,61);
+insert into t (id,a) values (270,62);
+insert into t (id,a) values (270,63);
+insert into t (id,a) values (270,64);
+insert into t (id,a) values (270,65);
+insert into t (id,a) values (270,66);
+insert into t (id,a) values (270,67);
+insert into t (id,a) values (270,68);
+insert into t (id,a) values (270,69);
+insert into t (id,a) values (270,70);
+insert into t (id,a) values (270,71);
+insert into t (id,a) values (270,72);
+insert into t (id,a) values (270,73);
+insert into t (id,a) values (270,74);
+insert into t (id,a) values (270,75);
+insert into t (id,a) values (270,76);
+insert into t (id,a) values (270,77);
+insert into t (id,a) values (270,78);
+insert into t (id,a) values (270,79);
+insert into t (id,a) values (270,80);
+insert into t (id,a) values (270,81);
+insert into t (id,a) values (270,82);
+insert into t (id,a) values (270,83);
+insert into t (id,a) values (270,84);
+insert into t (id,a) values (270,85);
+insert into t (id,a) values (270,86);
+insert into t (id,a) values (270,87);
+insert into t (id,a) values (270,88);
+insert into t (id,a) values (270,89);
+insert into t (id,a) values (270,90);
+insert into t (id,a) values (270,91);
+insert into t (id,a) values (270,92);
+insert into t (id,a) values (270,93);
+insert into t (id,a) values (270,94);
+insert into t (id,a) values (270,95);
+insert into t (id,a) values (270,96);
+insert into t (id,a) values (270,97);
+insert into t (id,a) values (270,98);
+insert into t (id,a) values (270,99);
+insert into t (id,a) values (271,0);
+insert into t (id,a) values (271,1);
+insert into t (id,a) values (271,2);
+insert into t (id,a) values (271,3);
+insert into t (id,a) values (271,4);
+insert into t (id,a) values (271,5);
+insert into t (id,a) values (271,6);
+insert into t (id,a) values (271,7);
+insert into t (id,a) values (271,8);
+insert into t (id,a) values (271,9);
+insert into t (id,a) values (271,10);
+insert into t (id,a) values (271,11);
+insert into t (id,a) values (271,12);
+insert into t (id,a) values (271,13);
+insert into t (id,a) values (271,14);
+insert into t (id,a) values (271,15);
+insert into t (id,a) values (271,16);
+insert into t (id,a) values (271,17);
+insert into t (id,a) values (271,18);
+insert into t (id,a) values (271,19);
+insert into t (id,a) values (271,20);
+insert into t (id,a) values (271,21);
+insert into t (id,a) values (271,22);
+insert into t (id,a) values (271,23);
+insert into t (id,a) values (271,24);
+insert into t (id,a) values (271,25);
+insert into t (id,a) values (271,26);
+insert into t (id,a) values (271,27);
+insert into t (id,a) values (271,28);
+insert into t (id,a) values (271,29);
+insert into t (id,a) values (271,30);
+insert into t (id,a) values (271,31);
+insert into t (id,a) values (271,32);
+insert into t (id,a) values (271,33);
+insert into t (id,a) values (271,34);
+insert into t (id,a) values (271,35);
+insert into t (id,a) values (271,36);
+insert into t (id,a) values (271,37);
+insert into t (id,a) values (271,38);
+insert into t (id,a) values (271,39);
+insert into t (id,a) values (271,40);
+insert into t (id,a) values (271,41);
+insert into t (id,a) values (271,42);
+insert into t (id,a) values (271,43);
+insert into t (id,a) values (271,44);
+insert into t (id,a) values (271,45);
+insert into t (id,a) values (271,46);
+insert into t (id,a) values (271,47);
+insert into t (id,a) values (271,48);
+insert into t (id,a) values (271,49);
+insert into t (id,a) values (271,50);
+insert into t (id,a) values (271,51);
+insert into t (id,a) values (271,52);
+insert into t (id,a) values (271,53);
+insert into t (id,a) values (271,54);
+insert into t (id,a) values (271,55);
+insert into t (id,a) values (271,56);
+insert into t (id,a) values (271,57);
+insert into t (id,a) values (271,58);
+insert into t (id,a) values (271,59);
+insert into t (id,a) values (271,60);
+insert into t (id,a) values (271,61);
+insert into t (id,a) values (271,62);
+insert into t (id,a) values (271,63);
+insert into t (id,a) values (271,64);
+insert into t (id,a) values (271,65);
+insert into t (id,a) values (271,66);
+insert into t (id,a) values (271,67);
+insert into t (id,a) values (271,68);
+insert into t (id,a) values (271,69);
+insert into t (id,a) values (271,70);
+insert into t (id,a) values (271,71);
+insert into t (id,a) values (271,72);
+insert into t (id,a) values (271,73);
+insert into t (id,a) values (271,74);
+insert into t (id,a) values (271,75);
+insert into t (id,a) values (271,76);
+insert into t (id,a) values (271,77);
+insert into t (id,a) values (271,78);
+insert into t (id,a) values (271,79);
+insert into t (id,a) values (271,80);
+insert into t (id,a) values (271,81);
+insert into t (id,a) values (271,82);
+insert into t (id,a) values (271,83);
+insert into t (id,a) values (271,84);
+insert into t (id,a) values (271,85);
+insert into t (id,a) values (271,86);
+insert into t (id,a) values (271,87);
+insert into t (id,a) values (271,88);
+insert into t (id,a) values (271,89);
+insert into t (id,a) values (271,90);
+insert into t (id,a) values (271,91);
+insert into t (id,a) values (271,92);
+insert into t (id,a) values (271,93);
+insert into t (id,a) values (271,94);
+insert into t (id,a) values (271,95);
+insert into t (id,a) values (271,96);
+insert into t (id,a) values (271,97);
+insert into t (id,a) values (271,98);
+insert into t (id,a) values (271,99);
+insert into t (id,a) values (272,0);
+insert into t (id,a) values (272,1);
+insert into t (id,a) values (272,2);
+insert into t (id,a) values (272,3);
+insert into t (id,a) values (272,4);
+insert into t (id,a) values (272,5);
+insert into t (id,a) values (272,6);
+insert into t (id,a) values (272,7);
+insert into t (id,a) values (272,8);
+insert into t (id,a) values (272,9);
+insert into t (id,a) values (272,10);
+insert into t (id,a) values (272,11);
+insert into t (id,a) values (272,12);
+insert into t (id,a) values (272,13);
+insert into t (id,a) values (272,14);
+insert into t (id,a) values (272,15);
+insert into t (id,a) values (272,16);
+insert into t (id,a) values (272,17);
+insert into t (id,a) values (272,18);
+insert into t (id,a) values (272,19);
+insert into t (id,a) values (272,20);
+insert into t (id,a) values (272,21);
+insert into t (id,a) values (272,22);
+insert into t (id,a) values (272,23);
+insert into t (id,a) values (272,24);
+insert into t (id,a) values (272,25);
+insert into t (id,a) values (272,26);
+insert into t (id,a) values (272,27);
+insert into t (id,a) values (272,28);
+insert into t (id,a) values (272,29);
+insert into t (id,a) values (272,30);
+insert into t (id,a) values (272,31);
+insert into t (id,a) values (272,32);
+insert into t (id,a) values (272,33);
+insert into t (id,a) values (272,34);
+insert into t (id,a) values (272,35);
+insert into t (id,a) values (272,36);
+insert into t (id,a) values (272,37);
+insert into t (id,a) values (272,38);
+insert into t (id,a) values (272,39);
+insert into t (id,a) values (272,40);
+insert into t (id,a) values (272,41);
+insert into t (id,a) values (272,42);
+insert into t (id,a) values (272,43);
+insert into t (id,a) values (272,44);
+insert into t (id,a) values (272,45);
+insert into t (id,a) values (272,46);
+insert into t (id,a) values (272,47);
+insert into t (id,a) values (272,48);
+insert into t (id,a) values (272,49);
+insert into t (id,a) values (272,50);
+insert into t (id,a) values (272,51);
+insert into t (id,a) values (272,52);
+insert into t (id,a) values (272,53);
+insert into t (id,a) values (272,54);
+insert into t (id,a) values (272,55);
+insert into t (id,a) values (272,56);
+insert into t (id,a) values (272,57);
+insert into t (id,a) values (272,58);
+insert into t (id,a) values (272,59);
+insert into t (id,a) values (272,60);
+insert into t (id,a) values (272,61);
+insert into t (id,a) values (272,62);
+insert into t (id,a) values (272,63);
+insert into t (id,a) values (272,64);
+insert into t (id,a) values (272,65);
+insert into t (id,a) values (272,66);
+insert into t (id,a) values (272,67);
+insert into t (id,a) values (272,68);
+insert into t (id,a) values (272,69);
+insert into t (id,a) values (272,70);
+insert into t (id,a) values (272,71);
+insert into t (id,a) values (272,72);
+insert into t (id,a) values (272,73);
+insert into t (id,a) values (272,74);
+insert into t (id,a) values (272,75);
+insert into t (id,a) values (272,76);
+insert into t (id,a) values (272,77);
+insert into t (id,a) values (272,78);
+insert into t (id,a) values (272,79);
+insert into t (id,a) values (272,80);
+insert into t (id,a) values (272,81);
+insert into t (id,a) values (272,82);
+insert into t (id,a) values (272,83);
+insert into t (id,a) values (272,84);
+insert into t (id,a) values (272,85);
+insert into t (id,a) values (272,86);
+insert into t (id,a) values (272,87);
+insert into t (id,a) values (272,88);
+insert into t (id,a) values (272,89);
+insert into t (id,a) values (272,90);
+insert into t (id,a) values (272,91);
+insert into t (id,a) values (272,92);
+insert into t (id,a) values (272,93);
+insert into t (id,a) values (272,94);
+insert into t (id,a) values (272,95);
+insert into t (id,a) values (272,96);
+insert into t (id,a) values (272,97);
+insert into t (id,a) values (272,98);
+insert into t (id,a) values (272,99);
+insert into t (id,a) values (273,0);
+insert into t (id,a) values (273,1);
+insert into t (id,a) values (273,2);
+insert into t (id,a) values (273,3);
+insert into t (id,a) values (273,4);
+insert into t (id,a) values (273,5);
+insert into t (id,a) values (273,6);
+insert into t (id,a) values (273,7);
+insert into t (id,a) values (273,8);
+insert into t (id,a) values (273,9);
+insert into t (id,a) values (273,10);
+insert into t (id,a) values (273,11);
+insert into t (id,a) values (273,12);
+insert into t (id,a) values (273,13);
+insert into t (id,a) values (273,14);
+insert into t (id,a) values (273,15);
+insert into t (id,a) values (273,16);
+insert into t (id,a) values (273,17);
+insert into t (id,a) values (273,18);
+insert into t (id,a) values (273,19);
+insert into t (id,a) values (273,20);
+insert into t (id,a) values (273,21);
+insert into t (id,a) values (273,22);
+insert into t (id,a) values (273,23);
+insert into t (id,a) values (273,24);
+insert into t (id,a) values (273,25);
+insert into t (id,a) values (273,26);
+insert into t (id,a) values (273,27);
+insert into t (id,a) values (273,28);
+insert into t (id,a) values (273,29);
+insert into t (id,a) values (273,30);
+insert into t (id,a) values (273,31);
+insert into t (id,a) values (273,32);
+insert into t (id,a) values (273,33);
+insert into t (id,a) values (273,34);
+insert into t (id,a) values (273,35);
+insert into t (id,a) values (273,36);
+insert into t (id,a) values (273,37);
+insert into t (id,a) values (273,38);
+insert into t (id,a) values (273,39);
+insert into t (id,a) values (273,40);
+insert into t (id,a) values (273,41);
+insert into t (id,a) values (273,42);
+insert into t (id,a) values (273,43);
+insert into t (id,a) values (273,44);
+insert into t (id,a) values (273,45);
+insert into t (id,a) values (273,46);
+insert into t (id,a) values (273,47);
+insert into t (id,a) values (273,48);
+insert into t (id,a) values (273,49);
+insert into t (id,a) values (273,50);
+insert into t (id,a) values (273,51);
+insert into t (id,a) values (273,52);
+insert into t (id,a) values (273,53);
+insert into t (id,a) values (273,54);
+insert into t (id,a) values (273,55);
+insert into t (id,a) values (273,56);
+insert into t (id,a) values (273,57);
+insert into t (id,a) values (273,58);
+insert into t (id,a) values (273,59);
+insert into t (id,a) values (273,60);
+insert into t (id,a) values (273,61);
+insert into t (id,a) values (273,62);
+insert into t (id,a) values (273,63);
+insert into t (id,a) values (273,64);
+insert into t (id,a) values (273,65);
+insert into t (id,a) values (273,66);
+insert into t (id,a) values (273,67);
+insert into t (id,a) values (273,68);
+insert into t (id,a) values (273,69);
+insert into t (id,a) values (273,70);
+insert into t (id,a) values (273,71);
+insert into t (id,a) values (273,72);
+insert into t (id,a) values (273,73);
+insert into t (id,a) values (273,74);
+insert into t (id,a) values (273,75);
+insert into t (id,a) values (273,76);
+insert into t (id,a) values (273,77);
+insert into t (id,a) values (273,78);
+insert into t (id,a) values (273,79);
+insert into t (id,a) values (273,80);
+insert into t (id,a) values (273,81);
+insert into t (id,a) values (273,82);
+insert into t (id,a) values (273,83);
+insert into t (id,a) values (273,84);
+insert into t (id,a) values (273,85);
+insert into t (id,a) values (273,86);
+insert into t (id,a) values (273,87);
+insert into t (id,a) values (273,88);
+insert into t (id,a) values (273,89);
+insert into t (id,a) values (273,90);
+insert into t (id,a) values (273,91);
+insert into t (id,a) values (273,92);
+insert into t (id,a) values (273,93);
+insert into t (id,a) values (273,94);
+insert into t (id,a) values (273,95);
+insert into t (id,a) values (273,96);
+insert into t (id,a) values (273,97);
+insert into t (id,a) values (273,98);
+insert into t (id,a) values (273,99);
+insert into t (id,a) values (274,0);
+insert into t (id,a) values (274,1);
+insert into t (id,a) values (274,2);
+insert into t (id,a) values (274,3);
+insert into t (id,a) values (274,4);
+insert into t (id,a) values (274,5);
+insert into t (id,a) values (274,6);
+insert into t (id,a) values (274,7);
+insert into t (id,a) values (274,8);
+insert into t (id,a) values (274,9);
+insert into t (id,a) values (274,10);
+insert into t (id,a) values (274,11);
+insert into t (id,a) values (274,12);
+insert into t (id,a) values (274,13);
+insert into t (id,a) values (274,14);
+insert into t (id,a) values (274,15);
+insert into t (id,a) values (274,16);
+insert into t (id,a) values (274,17);
+insert into t (id,a) values (274,18);
+insert into t (id,a) values (274,19);
+insert into t (id,a) values (274,20);
+insert into t (id,a) values (274,21);
+insert into t (id,a) values (274,22);
+insert into t (id,a) values (274,23);
+insert into t (id,a) values (274,24);
+insert into t (id,a) values (274,25);
+insert into t (id,a) values (274,26);
+insert into t (id,a) values (274,27);
+insert into t (id,a) values (274,28);
+insert into t (id,a) values (274,29);
+insert into t (id,a) values (274,30);
+insert into t (id,a) values (274,31);
+insert into t (id,a) values (274,32);
+insert into t (id,a) values (274,33);
+insert into t (id,a) values (274,34);
+insert into t (id,a) values (274,35);
+insert into t (id,a) values (274,36);
+insert into t (id,a) values (274,37);
+insert into t (id,a) values (274,38);
+insert into t (id,a) values (274,39);
+insert into t (id,a) values (274,40);
+insert into t (id,a) values (274,41);
+insert into t (id,a) values (274,42);
+insert into t (id,a) values (274,43);
+insert into t (id,a) values (274,44);
+insert into t (id,a) values (274,45);
+insert into t (id,a) values (274,46);
+insert into t (id,a) values (274,47);
+insert into t (id,a) values (274,48);
+insert into t (id,a) values (274,49);
+insert into t (id,a) values (274,50);
+insert into t (id,a) values (274,51);
+insert into t (id,a) values (274,52);
+insert into t (id,a) values (274,53);
+insert into t (id,a) values (274,54);
+insert into t (id,a) values (274,55);
+insert into t (id,a) values (274,56);
+insert into t (id,a) values (274,57);
+insert into t (id,a) values (274,58);
+insert into t (id,a) values (274,59);
+insert into t (id,a) values (274,60);
+insert into t (id,a) values (274,61);
+insert into t (id,a) values (274,62);
+insert into t (id,a) values (274,63);
+insert into t (id,a) values (274,64);
+insert into t (id,a) values (274,65);
+insert into t (id,a) values (274,66);
+insert into t (id,a) values (274,67);
+insert into t (id,a) values (274,68);
+insert into t (id,a) values (274,69);
+insert into t (id,a) values (274,70);
+insert into t (id,a) values (274,71);
+insert into t (id,a) values (274,72);
+insert into t (id,a) values (274,73);
+insert into t (id,a) values (274,74);
+insert into t (id,a) values (274,75);
+insert into t (id,a) values (274,76);
+insert into t (id,a) values (274,77);
+insert into t (id,a) values (274,78);
+insert into t (id,a) values (274,79);
+insert into t (id,a) values (274,80);
+insert into t (id,a) values (274,81);
+insert into t (id,a) values (274,82);
+insert into t (id,a) values (274,83);
+insert into t (id,a) values (274,84);
+insert into t (id,a) values (274,85);
+insert into t (id,a) values (274,86);
+insert into t (id,a) values (274,87);
+insert into t (id,a) values (274,88);
+insert into t (id,a) values (274,89);
+insert into t (id,a) values (274,90);
+insert into t (id,a) values (274,91);
+insert into t (id,a) values (274,92);
+insert into t (id,a) values (274,93);
+insert into t (id,a) values (274,94);
+insert into t (id,a) values (274,95);
+insert into t (id,a) values (274,96);
+insert into t (id,a) values (274,97);
+insert into t (id,a) values (274,98);
+insert into t (id,a) values (274,99);
+insert into t (id,a) values (275,0);
+insert into t (id,a) values (275,1);
+insert into t (id,a) values (275,2);
+insert into t (id,a) values (275,3);
+insert into t (id,a) values (275,4);
+insert into t (id,a) values (275,5);
+insert into t (id,a) values (275,6);
+insert into t (id,a) values (275,7);
+insert into t (id,a) values (275,8);
+insert into t (id,a) values (275,9);
+insert into t (id,a) values (275,10);
+insert into t (id,a) values (275,11);
+insert into t (id,a) values (275,12);
+insert into t (id,a) values (275,13);
+insert into t (id,a) values (275,14);
+insert into t (id,a) values (275,15);
+insert into t (id,a) values (275,16);
+insert into t (id,a) values (275,17);
+insert into t (id,a) values (275,18);
+insert into t (id,a) values (275,19);
+insert into t (id,a) values (275,20);
+insert into t (id,a) values (275,21);
+insert into t (id,a) values (275,22);
+insert into t (id,a) values (275,23);
+insert into t (id,a) values (275,24);
+insert into t (id,a) values (275,25);
+insert into t (id,a) values (275,26);
+insert into t (id,a) values (275,27);
+insert into t (id,a) values (275,28);
+insert into t (id,a) values (275,29);
+insert into t (id,a) values (275,30);
+insert into t (id,a) values (275,31);
+insert into t (id,a) values (275,32);
+insert into t (id,a) values (275,33);
+insert into t (id,a) values (275,34);
+insert into t (id,a) values (275,35);
+insert into t (id,a) values (275,36);
+insert into t (id,a) values (275,37);
+insert into t (id,a) values (275,38);
+insert into t (id,a) values (275,39);
+insert into t (id,a) values (275,40);
+insert into t (id,a) values (275,41);
+insert into t (id,a) values (275,42);
+insert into t (id,a) values (275,43);
+insert into t (id,a) values (275,44);
+insert into t (id,a) values (275,45);
+insert into t (id,a) values (275,46);
+insert into t (id,a) values (275,47);
+insert into t (id,a) values (275,48);
+insert into t (id,a) values (275,49);
+insert into t (id,a) values (275,50);
+insert into t (id,a) values (275,51);
+insert into t (id,a) values (275,52);
+insert into t (id,a) values (275,53);
+insert into t (id,a) values (275,54);
+insert into t (id,a) values (275,55);
+insert into t (id,a) values (275,56);
+insert into t (id,a) values (275,57);
+insert into t (id,a) values (275,58);
+insert into t (id,a) values (275,59);
+insert into t (id,a) values (275,60);
+insert into t (id,a) values (275,61);
+insert into t (id,a) values (275,62);
+insert into t (id,a) values (275,63);
+insert into t (id,a) values (275,64);
+insert into t (id,a) values (275,65);
+insert into t (id,a) values (275,66);
+insert into t (id,a) values (275,67);
+insert into t (id,a) values (275,68);
+insert into t (id,a) values (275,69);
+insert into t (id,a) values (275,70);
+insert into t (id,a) values (275,71);
+insert into t (id,a) values (275,72);
+insert into t (id,a) values (275,73);
+insert into t (id,a) values (275,74);
+insert into t (id,a) values (275,75);
+insert into t (id,a) values (275,76);
+insert into t (id,a) values (275,77);
+insert into t (id,a) values (275,78);
+insert into t (id,a) values (275,79);
+insert into t (id,a) values (275,80);
+insert into t (id,a) values (275,81);
+insert into t (id,a) values (275,82);
+insert into t (id,a) values (275,83);
+insert into t (id,a) values (275,84);
+insert into t (id,a) values (275,85);
+insert into t (id,a) values (275,86);
+insert into t (id,a) values (275,87);
+insert into t (id,a) values (275,88);
+insert into t (id,a) values (275,89);
+insert into t (id,a) values (275,90);
+insert into t (id,a) values (275,91);
+insert into t (id,a) values (275,92);
+insert into t (id,a) values (275,93);
+insert into t (id,a) values (275,94);
+insert into t (id,a) values (275,95);
+insert into t (id,a) values (275,96);
+insert into t (id,a) values (275,97);
+insert into t (id,a) values (275,98);
+insert into t (id,a) values (275,99);
+insert into t (id,a) values (276,0);
+insert into t (id,a) values (276,1);
+insert into t (id,a) values (276,2);
+insert into t (id,a) values (276,3);
+insert into t (id,a) values (276,4);
+insert into t (id,a) values (276,5);
+insert into t (id,a) values (276,6);
+insert into t (id,a) values (276,7);
+insert into t (id,a) values (276,8);
+insert into t (id,a) values (276,9);
+insert into t (id,a) values (276,10);
+insert into t (id,a) values (276,11);
+insert into t (id,a) values (276,12);
+insert into t (id,a) values (276,13);
+insert into t (id,a) values (276,14);
+insert into t (id,a) values (276,15);
+insert into t (id,a) values (276,16);
+insert into t (id,a) values (276,17);
+insert into t (id,a) values (276,18);
+insert into t (id,a) values (276,19);
+insert into t (id,a) values (276,20);
+insert into t (id,a) values (276,21);
+insert into t (id,a) values (276,22);
+insert into t (id,a) values (276,23);
+insert into t (id,a) values (276,24);
+insert into t (id,a) values (276,25);
+insert into t (id,a) values (276,26);
+insert into t (id,a) values (276,27);
+insert into t (id,a) values (276,28);
+insert into t (id,a) values (276,29);
+insert into t (id,a) values (276,30);
+insert into t (id,a) values (276,31);
+insert into t (id,a) values (276,32);
+insert into t (id,a) values (276,33);
+insert into t (id,a) values (276,34);
+insert into t (id,a) values (276,35);
+insert into t (id,a) values (276,36);
+insert into t (id,a) values (276,37);
+insert into t (id,a) values (276,38);
+insert into t (id,a) values (276,39);
+insert into t (id,a) values (276,40);
+insert into t (id,a) values (276,41);
+insert into t (id,a) values (276,42);
+insert into t (id,a) values (276,43);
+insert into t (id,a) values (276,44);
+insert into t (id,a) values (276,45);
+insert into t (id,a) values (276,46);
+insert into t (id,a) values (276,47);
+insert into t (id,a) values (276,48);
+insert into t (id,a) values (276,49);
+insert into t (id,a) values (276,50);
+insert into t (id,a) values (276,51);
+insert into t (id,a) values (276,52);
+insert into t (id,a) values (276,53);
+insert into t (id,a) values (276,54);
+insert into t (id,a) values (276,55);
+insert into t (id,a) values (276,56);
+insert into t (id,a) values (276,57);
+insert into t (id,a) values (276,58);
+insert into t (id,a) values (276,59);
+insert into t (id,a) values (276,60);
+insert into t (id,a) values (276,61);
+insert into t (id,a) values (276,62);
+insert into t (id,a) values (276,63);
+insert into t (id,a) values (276,64);
+insert into t (id,a) values (276,65);
+insert into t (id,a) values (276,66);
+insert into t (id,a) values (276,67);
+insert into t (id,a) values (276,68);
+insert into t (id,a) values (276,69);
+insert into t (id,a) values (276,70);
+insert into t (id,a) values (276,71);
+insert into t (id,a) values (276,72);
+insert into t (id,a) values (276,73);
+insert into t (id,a) values (276,74);
+insert into t (id,a) values (276,75);
+insert into t (id,a) values (276,76);
+insert into t (id,a) values (276,77);
+insert into t (id,a) values (276,78);
+insert into t (id,a) values (276,79);
+insert into t (id,a) values (276,80);
+insert into t (id,a) values (276,81);
+insert into t (id,a) values (276,82);
+insert into t (id,a) values (276,83);
+insert into t (id,a) values (276,84);
+insert into t (id,a) values (276,85);
+insert into t (id,a) values (276,86);
+insert into t (id,a) values (276,87);
+insert into t (id,a) values (276,88);
+insert into t (id,a) values (276,89);
+insert into t (id,a) values (276,90);
+insert into t (id,a) values (276,91);
+insert into t (id,a) values (276,92);
+insert into t (id,a) values (276,93);
+insert into t (id,a) values (276,94);
+insert into t (id,a) values (276,95);
+insert into t (id,a) values (276,96);
+insert into t (id,a) values (276,97);
+insert into t (id,a) values (276,98);
+insert into t (id,a) values (276,99);
+insert into t (id,a) values (277,0);
+insert into t (id,a) values (277,1);
+insert into t (id,a) values (277,2);
+insert into t (id,a) values (277,3);
+insert into t (id,a) values (277,4);
+insert into t (id,a) values (277,5);
+insert into t (id,a) values (277,6);
+insert into t (id,a) values (277,7);
+insert into t (id,a) values (277,8);
+insert into t (id,a) values (277,9);
+insert into t (id,a) values (277,10);
+insert into t (id,a) values (277,11);
+insert into t (id,a) values (277,12);
+insert into t (id,a) values (277,13);
+insert into t (id,a) values (277,14);
+insert into t (id,a) values (277,15);
+insert into t (id,a) values (277,16);
+insert into t (id,a) values (277,17);
+insert into t (id,a) values (277,18);
+insert into t (id,a) values (277,19);
+insert into t (id,a) values (277,20);
+insert into t (id,a) values (277,21);
+insert into t (id,a) values (277,22);
+insert into t (id,a) values (277,23);
+insert into t (id,a) values (277,24);
+insert into t (id,a) values (277,25);
+insert into t (id,a) values (277,26);
+insert into t (id,a) values (277,27);
+insert into t (id,a) values (277,28);
+insert into t (id,a) values (277,29);
+insert into t (id,a) values (277,30);
+insert into t (id,a) values (277,31);
+insert into t (id,a) values (277,32);
+insert into t (id,a) values (277,33);
+insert into t (id,a) values (277,34);
+insert into t (id,a) values (277,35);
+insert into t (id,a) values (277,36);
+insert into t (id,a) values (277,37);
+insert into t (id,a) values (277,38);
+insert into t (id,a) values (277,39);
+insert into t (id,a) values (277,40);
+insert into t (id,a) values (277,41);
+insert into t (id,a) values (277,42);
+insert into t (id,a) values (277,43);
+insert into t (id,a) values (277,44);
+insert into t (id,a) values (277,45);
+insert into t (id,a) values (277,46);
+insert into t (id,a) values (277,47);
+insert into t (id,a) values (277,48);
+insert into t (id,a) values (277,49);
+insert into t (id,a) values (277,50);
+insert into t (id,a) values (277,51);
+insert into t (id,a) values (277,52);
+insert into t (id,a) values (277,53);
+insert into t (id,a) values (277,54);
+insert into t (id,a) values (277,55);
+insert into t (id,a) values (277,56);
+insert into t (id,a) values (277,57);
+insert into t (id,a) values (277,58);
+insert into t (id,a) values (277,59);
+insert into t (id,a) values (277,60);
+insert into t (id,a) values (277,61);
+insert into t (id,a) values (277,62);
+insert into t (id,a) values (277,63);
+insert into t (id,a) values (277,64);
+insert into t (id,a) values (277,65);
+insert into t (id,a) values (277,66);
+insert into t (id,a) values (277,67);
+insert into t (id,a) values (277,68);
+insert into t (id,a) values (277,69);
+insert into t (id,a) values (277,70);
+insert into t (id,a) values (277,71);
+insert into t (id,a) values (277,72);
+insert into t (id,a) values (277,73);
+insert into t (id,a) values (277,74);
+insert into t (id,a) values (277,75);
+insert into t (id,a) values (277,76);
+insert into t (id,a) values (277,77);
+insert into t (id,a) values (277,78);
+insert into t (id,a) values (277,79);
+insert into t (id,a) values (277,80);
+insert into t (id,a) values (277,81);
+insert into t (id,a) values (277,82);
+insert into t (id,a) values (277,83);
+insert into t (id,a) values (277,84);
+insert into t (id,a) values (277,85);
+insert into t (id,a) values (277,86);
+insert into t (id,a) values (277,87);
+insert into t (id,a) values (277,88);
+insert into t (id,a) values (277,89);
+insert into t (id,a) values (277,90);
+insert into t (id,a) values (277,91);
+insert into t (id,a) values (277,92);
+insert into t (id,a) values (277,93);
+insert into t (id,a) values (277,94);
+insert into t (id,a) values (277,95);
+insert into t (id,a) values (277,96);
+insert into t (id,a) values (277,97);
+insert into t (id,a) values (277,98);
+insert into t (id,a) values (277,99);
+insert into t (id,a) values (278,0);
+insert into t (id,a) values (278,1);
+insert into t (id,a) values (278,2);
+insert into t (id,a) values (278,3);
+insert into t (id,a) values (278,4);
+insert into t (id,a) values (278,5);
+insert into t (id,a) values (278,6);
+insert into t (id,a) values (278,7);
+insert into t (id,a) values (278,8);
+insert into t (id,a) values (278,9);
+insert into t (id,a) values (278,10);
+insert into t (id,a) values (278,11);
+insert into t (id,a) values (278,12);
+insert into t (id,a) values (278,13);
+insert into t (id,a) values (278,14);
+insert into t (id,a) values (278,15);
+insert into t (id,a) values (278,16);
+insert into t (id,a) values (278,17);
+insert into t (id,a) values (278,18);
+insert into t (id,a) values (278,19);
+insert into t (id,a) values (278,20);
+insert into t (id,a) values (278,21);
+insert into t (id,a) values (278,22);
+insert into t (id,a) values (278,23);
+insert into t (id,a) values (278,24);
+insert into t (id,a) values (278,25);
+insert into t (id,a) values (278,26);
+insert into t (id,a) values (278,27);
+insert into t (id,a) values (278,28);
+insert into t (id,a) values (278,29);
+insert into t (id,a) values (278,30);
+insert into t (id,a) values (278,31);
+insert into t (id,a) values (278,32);
+insert into t (id,a) values (278,33);
+insert into t (id,a) values (278,34);
+insert into t (id,a) values (278,35);
+insert into t (id,a) values (278,36);
+insert into t (id,a) values (278,37);
+insert into t (id,a) values (278,38);
+insert into t (id,a) values (278,39);
+insert into t (id,a) values (278,40);
+insert into t (id,a) values (278,41);
+insert into t (id,a) values (278,42);
+insert into t (id,a) values (278,43);
+insert into t (id,a) values (278,44);
+insert into t (id,a) values (278,45);
+insert into t (id,a) values (278,46);
+insert into t (id,a) values (278,47);
+insert into t (id,a) values (278,48);
+insert into t (id,a) values (278,49);
+insert into t (id,a) values (278,50);
+insert into t (id,a) values (278,51);
+insert into t (id,a) values (278,52);
+insert into t (id,a) values (278,53);
+insert into t (id,a) values (278,54);
+insert into t (id,a) values (278,55);
+insert into t (id,a) values (278,56);
+insert into t (id,a) values (278,57);
+insert into t (id,a) values (278,58);
+insert into t (id,a) values (278,59);
+insert into t (id,a) values (278,60);
+insert into t (id,a) values (278,61);
+insert into t (id,a) values (278,62);
+insert into t (id,a) values (278,63);
+insert into t (id,a) values (278,64);
+insert into t (id,a) values (278,65);
+insert into t (id,a) values (278,66);
+insert into t (id,a) values (278,67);
+insert into t (id,a) values (278,68);
+insert into t (id,a) values (278,69);
+insert into t (id,a) values (278,70);
+insert into t (id,a) values (278,71);
+insert into t (id,a) values (278,72);
+insert into t (id,a) values (278,73);
+insert into t (id,a) values (278,74);
+insert into t (id,a) values (278,75);
+insert into t (id,a) values (278,76);
+insert into t (id,a) values (278,77);
+insert into t (id,a) values (278,78);
+insert into t (id,a) values (278,79);
+insert into t (id,a) values (278,80);
+insert into t (id,a) values (278,81);
+insert into t (id,a) values (278,82);
+insert into t (id,a) values (278,83);
+insert into t (id,a) values (278,84);
+insert into t (id,a) values (278,85);
+insert into t (id,a) values (278,86);
+insert into t (id,a) values (278,87);
+insert into t (id,a) values (278,88);
+insert into t (id,a) values (278,89);
+insert into t (id,a) values (278,90);
+insert into t (id,a) values (278,91);
+insert into t (id,a) values (278,92);
+insert into t (id,a) values (278,93);
+insert into t (id,a) values (278,94);
+insert into t (id,a) values (278,95);
+insert into t (id,a) values (278,96);
+insert into t (id,a) values (278,97);
+insert into t (id,a) values (278,98);
+insert into t (id,a) values (278,99);
+insert into t (id,a) values (279,0);
+insert into t (id,a) values (279,1);
+insert into t (id,a) values (279,2);
+insert into t (id,a) values (279,3);
+insert into t (id,a) values (279,4);
+insert into t (id,a) values (279,5);
+insert into t (id,a) values (279,6);
+insert into t (id,a) values (279,7);
+insert into t (id,a) values (279,8);
+insert into t (id,a) values (279,9);
+insert into t (id,a) values (279,10);
+insert into t (id,a) values (279,11);
+insert into t (id,a) values (279,12);
+insert into t (id,a) values (279,13);
+insert into t (id,a) values (279,14);
+insert into t (id,a) values (279,15);
+insert into t (id,a) values (279,16);
+insert into t (id,a) values (279,17);
+insert into t (id,a) values (279,18);
+insert into t (id,a) values (279,19);
+insert into t (id,a) values (279,20);
+insert into t (id,a) values (279,21);
+insert into t (id,a) values (279,22);
+insert into t (id,a) values (279,23);
+insert into t (id,a) values (279,24);
+insert into t (id,a) values (279,25);
+insert into t (id,a) values (279,26);
+insert into t (id,a) values (279,27);
+insert into t (id,a) values (279,28);
+insert into t (id,a) values (279,29);
+insert into t (id,a) values (279,30);
+insert into t (id,a) values (279,31);
+insert into t (id,a) values (279,32);
+insert into t (id,a) values (279,33);
+insert into t (id,a) values (279,34);
+insert into t (id,a) values (279,35);
+insert into t (id,a) values (279,36);
+insert into t (id,a) values (279,37);
+insert into t (id,a) values (279,38);
+insert into t (id,a) values (279,39);
+insert into t (id,a) values (279,40);
+insert into t (id,a) values (279,41);
+insert into t (id,a) values (279,42);
+insert into t (id,a) values (279,43);
+insert into t (id,a) values (279,44);
+insert into t (id,a) values (279,45);
+insert into t (id,a) values (279,46);
+insert into t (id,a) values (279,47);
+insert into t (id,a) values (279,48);
+insert into t (id,a) values (279,49);
+insert into t (id,a) values (279,50);
+insert into t (id,a) values (279,51);
+insert into t (id,a) values (279,52);
+insert into t (id,a) values (279,53);
+insert into t (id,a) values (279,54);
+insert into t (id,a) values (279,55);
+insert into t (id,a) values (279,56);
+insert into t (id,a) values (279,57);
+insert into t (id,a) values (279,58);
+insert into t (id,a) values (279,59);
+insert into t (id,a) values (279,60);
+insert into t (id,a) values (279,61);
+insert into t (id,a) values (279,62);
+insert into t (id,a) values (279,63);
+insert into t (id,a) values (279,64);
+insert into t (id,a) values (279,65);
+insert into t (id,a) values (279,66);
+insert into t (id,a) values (279,67);
+insert into t (id,a) values (279,68);
+insert into t (id,a) values (279,69);
+insert into t (id,a) values (279,70);
+insert into t (id,a) values (279,71);
+insert into t (id,a) values (279,72);
+insert into t (id,a) values (279,73);
+insert into t (id,a) values (279,74);
+insert into t (id,a) values (279,75);
+insert into t (id,a) values (279,76);
+insert into t (id,a) values (279,77);
+insert into t (id,a) values (279,78);
+insert into t (id,a) values (279,79);
+insert into t (id,a) values (279,80);
+insert into t (id,a) values (279,81);
+insert into t (id,a) values (279,82);
+insert into t (id,a) values (279,83);
+insert into t (id,a) values (279,84);
+insert into t (id,a) values (279,85);
+insert into t (id,a) values (279,86);
+insert into t (id,a) values (279,87);
+insert into t (id,a) values (279,88);
+insert into t (id,a) values (279,89);
+insert into t (id,a) values (279,90);
+insert into t (id,a) values (279,91);
+insert into t (id,a) values (279,92);
+insert into t (id,a) values (279,93);
+insert into t (id,a) values (279,94);
+insert into t (id,a) values (279,95);
+insert into t (id,a) values (279,96);
+insert into t (id,a) values (279,97);
+insert into t (id,a) values (279,98);
+insert into t (id,a) values (279,99);
+insert into t (id,a) values (280,0);
+insert into t (id,a) values (280,1);
+insert into t (id,a) values (280,2);
+insert into t (id,a) values (280,3);
+insert into t (id,a) values (280,4);
+insert into t (id,a) values (280,5);
+insert into t (id,a) values (280,6);
+insert into t (id,a) values (280,7);
+insert into t (id,a) values (280,8);
+insert into t (id,a) values (280,9);
+insert into t (id,a) values (280,10);
+insert into t (id,a) values (280,11);
+insert into t (id,a) values (280,12);
+insert into t (id,a) values (280,13);
+insert into t (id,a) values (280,14);
+insert into t (id,a) values (280,15);
+insert into t (id,a) values (280,16);
+insert into t (id,a) values (280,17);
+insert into t (id,a) values (280,18);
+insert into t (id,a) values (280,19);
+insert into t (id,a) values (280,20);
+insert into t (id,a) values (280,21);
+insert into t (id,a) values (280,22);
+insert into t (id,a) values (280,23);
+insert into t (id,a) values (280,24);
+insert into t (id,a) values (280,25);
+insert into t (id,a) values (280,26);
+insert into t (id,a) values (280,27);
+insert into t (id,a) values (280,28);
+insert into t (id,a) values (280,29);
+insert into t (id,a) values (280,30);
+insert into t (id,a) values (280,31);
+insert into t (id,a) values (280,32);
+insert into t (id,a) values (280,33);
+insert into t (id,a) values (280,34);
+insert into t (id,a) values (280,35);
+insert into t (id,a) values (280,36);
+insert into t (id,a) values (280,37);
+insert into t (id,a) values (280,38);
+insert into t (id,a) values (280,39);
+insert into t (id,a) values (280,40);
+insert into t (id,a) values (280,41);
+insert into t (id,a) values (280,42);
+insert into t (id,a) values (280,43);
+insert into t (id,a) values (280,44);
+insert into t (id,a) values (280,45);
+insert into t (id,a) values (280,46);
+insert into t (id,a) values (280,47);
+insert into t (id,a) values (280,48);
+insert into t (id,a) values (280,49);
+insert into t (id,a) values (280,50);
+insert into t (id,a) values (280,51);
+insert into t (id,a) values (280,52);
+insert into t (id,a) values (280,53);
+insert into t (id,a) values (280,54);
+insert into t (id,a) values (280,55);
+insert into t (id,a) values (280,56);
+insert into t (id,a) values (280,57);
+insert into t (id,a) values (280,58);
+insert into t (id,a) values (280,59);
+insert into t (id,a) values (280,60);
+insert into t (id,a) values (280,61);
+insert into t (id,a) values (280,62);
+insert into t (id,a) values (280,63);
+insert into t (id,a) values (280,64);
+insert into t (id,a) values (280,65);
+insert into t (id,a) values (280,66);
+insert into t (id,a) values (280,67);
+insert into t (id,a) values (280,68);
+insert into t (id,a) values (280,69);
+insert into t (id,a) values (280,70);
+insert into t (id,a) values (280,71);
+insert into t (id,a) values (280,72);
+insert into t (id,a) values (280,73);
+insert into t (id,a) values (280,74);
+insert into t (id,a) values (280,75);
+insert into t (id,a) values (280,76);
+insert into t (id,a) values (280,77);
+insert into t (id,a) values (280,78);
+insert into t (id,a) values (280,79);
+insert into t (id,a) values (280,80);
+insert into t (id,a) values (280,81);
+insert into t (id,a) values (280,82);
+insert into t (id,a) values (280,83);
+insert into t (id,a) values (280,84);
+insert into t (id,a) values (280,85);
+insert into t (id,a) values (280,86);
+insert into t (id,a) values (280,87);
+insert into t (id,a) values (280,88);
+insert into t (id,a) values (280,89);
+insert into t (id,a) values (280,90);
+insert into t (id,a) values (280,91);
+insert into t (id,a) values (280,92);
+insert into t (id,a) values (280,93);
+insert into t (id,a) values (280,94);
+insert into t (id,a) values (280,95);
+insert into t (id,a) values (280,96);
+insert into t (id,a) values (280,97);
+insert into t (id,a) values (280,98);
+insert into t (id,a) values (280,99);
+insert into t (id,a) values (281,0);
+insert into t (id,a) values (281,1);
+insert into t (id,a) values (281,2);
+insert into t (id,a) values (281,3);
+insert into t (id,a) values (281,4);
+insert into t (id,a) values (281,5);
+insert into t (id,a) values (281,6);
+insert into t (id,a) values (281,7);
+insert into t (id,a) values (281,8);
+insert into t (id,a) values (281,9);
+insert into t (id,a) values (281,10);
+insert into t (id,a) values (281,11);
+insert into t (id,a) values (281,12);
+insert into t (id,a) values (281,13);
+insert into t (id,a) values (281,14);
+insert into t (id,a) values (281,15);
+insert into t (id,a) values (281,16);
+insert into t (id,a) values (281,17);
+insert into t (id,a) values (281,18);
+insert into t (id,a) values (281,19);
+insert into t (id,a) values (281,20);
+insert into t (id,a) values (281,21);
+insert into t (id,a) values (281,22);
+insert into t (id,a) values (281,23);
+insert into t (id,a) values (281,24);
+insert into t (id,a) values (281,25);
+insert into t (id,a) values (281,26);
+insert into t (id,a) values (281,27);
+insert into t (id,a) values (281,28);
+insert into t (id,a) values (281,29);
+insert into t (id,a) values (281,30);
+insert into t (id,a) values (281,31);
+insert into t (id,a) values (281,32);
+insert into t (id,a) values (281,33);
+insert into t (id,a) values (281,34);
+insert into t (id,a) values (281,35);
+insert into t (id,a) values (281,36);
+insert into t (id,a) values (281,37);
+insert into t (id,a) values (281,38);
+insert into t (id,a) values (281,39);
+insert into t (id,a) values (281,40);
+insert into t (id,a) values (281,41);
+insert into t (id,a) values (281,42);
+insert into t (id,a) values (281,43);
+insert into t (id,a) values (281,44);
+insert into t (id,a) values (281,45);
+insert into t (id,a) values (281,46);
+insert into t (id,a) values (281,47);
+insert into t (id,a) values (281,48);
+insert into t (id,a) values (281,49);
+insert into t (id,a) values (281,50);
+insert into t (id,a) values (281,51);
+insert into t (id,a) values (281,52);
+insert into t (id,a) values (281,53);
+insert into t (id,a) values (281,54);
+insert into t (id,a) values (281,55);
+insert into t (id,a) values (281,56);
+insert into t (id,a) values (281,57);
+insert into t (id,a) values (281,58);
+insert into t (id,a) values (281,59);
+insert into t (id,a) values (281,60);
+insert into t (id,a) values (281,61);
+insert into t (id,a) values (281,62);
+insert into t (id,a) values (281,63);
+insert into t (id,a) values (281,64);
+insert into t (id,a) values (281,65);
+insert into t (id,a) values (281,66);
+insert into t (id,a) values (281,67);
+insert into t (id,a) values (281,68);
+insert into t (id,a) values (281,69);
+insert into t (id,a) values (281,70);
+insert into t (id,a) values (281,71);
+insert into t (id,a) values (281,72);
+insert into t (id,a) values (281,73);
+insert into t (id,a) values (281,74);
+insert into t (id,a) values (281,75);
+insert into t (id,a) values (281,76);
+insert into t (id,a) values (281,77);
+insert into t (id,a) values (281,78);
+insert into t (id,a) values (281,79);
+insert into t (id,a) values (281,80);
+insert into t (id,a) values (281,81);
+insert into t (id,a) values (281,82);
+insert into t (id,a) values (281,83);
+insert into t (id,a) values (281,84);
+insert into t (id,a) values (281,85);
+insert into t (id,a) values (281,86);
+insert into t (id,a) values (281,87);
+insert into t (id,a) values (281,88);
+insert into t (id,a) values (281,89);
+insert into t (id,a) values (281,90);
+insert into t (id,a) values (281,91);
+insert into t (id,a) values (281,92);
+insert into t (id,a) values (281,93);
+insert into t (id,a) values (281,94);
+insert into t (id,a) values (281,95);
+insert into t (id,a) values (281,96);
+insert into t (id,a) values (281,97);
+insert into t (id,a) values (281,98);
+insert into t (id,a) values (281,99);
+insert into t (id,a) values (282,0);
+insert into t (id,a) values (282,1);
+insert into t (id,a) values (282,2);
+insert into t (id,a) values (282,3);
+insert into t (id,a) values (282,4);
+insert into t (id,a) values (282,5);
+insert into t (id,a) values (282,6);
+insert into t (id,a) values (282,7);
+insert into t (id,a) values (282,8);
+insert into t (id,a) values (282,9);
+insert into t (id,a) values (282,10);
+insert into t (id,a) values (282,11);
+insert into t (id,a) values (282,12);
+insert into t (id,a) values (282,13);
+insert into t (id,a) values (282,14);
+insert into t (id,a) values (282,15);
+insert into t (id,a) values (282,16);
+insert into t (id,a) values (282,17);
+insert into t (id,a) values (282,18);
+insert into t (id,a) values (282,19);
+insert into t (id,a) values (282,20);
+insert into t (id,a) values (282,21);
+insert into t (id,a) values (282,22);
+insert into t (id,a) values (282,23);
+insert into t (id,a) values (282,24);
+insert into t (id,a) values (282,25);
+insert into t (id,a) values (282,26);
+insert into t (id,a) values (282,27);
+insert into t (id,a) values (282,28);
+insert into t (id,a) values (282,29);
+insert into t (id,a) values (282,30);
+insert into t (id,a) values (282,31);
+insert into t (id,a) values (282,32);
+insert into t (id,a) values (282,33);
+insert into t (id,a) values (282,34);
+insert into t (id,a) values (282,35);
+insert into t (id,a) values (282,36);
+insert into t (id,a) values (282,37);
+insert into t (id,a) values (282,38);
+insert into t (id,a) values (282,39);
+insert into t (id,a) values (282,40);
+insert into t (id,a) values (282,41);
+insert into t (id,a) values (282,42);
+insert into t (id,a) values (282,43);
+insert into t (id,a) values (282,44);
+insert into t (id,a) values (282,45);
+insert into t (id,a) values (282,46);
+insert into t (id,a) values (282,47);
+insert into t (id,a) values (282,48);
+insert into t (id,a) values (282,49);
+insert into t (id,a) values (282,50);
+insert into t (id,a) values (282,51);
+insert into t (id,a) values (282,52);
+insert into t (id,a) values (282,53);
+insert into t (id,a) values (282,54);
+insert into t (id,a) values (282,55);
+insert into t (id,a) values (282,56);
+insert into t (id,a) values (282,57);
+insert into t (id,a) values (282,58);
+insert into t (id,a) values (282,59);
+insert into t (id,a) values (282,60);
+insert into t (id,a) values (282,61);
+insert into t (id,a) values (282,62);
+insert into t (id,a) values (282,63);
+insert into t (id,a) values (282,64);
+insert into t (id,a) values (282,65);
+insert into t (id,a) values (282,66);
+insert into t (id,a) values (282,67);
+insert into t (id,a) values (282,68);
+insert into t (id,a) values (282,69);
+insert into t (id,a) values (282,70);
+insert into t (id,a) values (282,71);
+insert into t (id,a) values (282,72);
+insert into t (id,a) values (282,73);
+insert into t (id,a) values (282,74);
+insert into t (id,a) values (282,75);
+insert into t (id,a) values (282,76);
+insert into t (id,a) values (282,77);
+insert into t (id,a) values (282,78);
+insert into t (id,a) values (282,79);
+insert into t (id,a) values (282,80);
+insert into t (id,a) values (282,81);
+insert into t (id,a) values (282,82);
+insert into t (id,a) values (282,83);
+insert into t (id,a) values (282,84);
+insert into t (id,a) values (282,85);
+insert into t (id,a) values (282,86);
+insert into t (id,a) values (282,87);
+insert into t (id,a) values (282,88);
+insert into t (id,a) values (282,89);
+insert into t (id,a) values (282,90);
+insert into t (id,a) values (282,91);
+insert into t (id,a) values (282,92);
+insert into t (id,a) values (282,93);
+insert into t (id,a) values (282,94);
+insert into t (id,a) values (282,95);
+insert into t (id,a) values (282,96);
+insert into t (id,a) values (282,97);
+insert into t (id,a) values (282,98);
+insert into t (id,a) values (282,99);
+insert into t (id,a) values (283,0);
+insert into t (id,a) values (283,1);
+insert into t (id,a) values (283,2);
+insert into t (id,a) values (283,3);
+insert into t (id,a) values (283,4);
+insert into t (id,a) values (283,5);
+insert into t (id,a) values (283,6);
+insert into t (id,a) values (283,7);
+insert into t (id,a) values (283,8);
+insert into t (id,a) values (283,9);
+insert into t (id,a) values (283,10);
+insert into t (id,a) values (283,11);
+insert into t (id,a) values (283,12);
+insert into t (id,a) values (283,13);
+insert into t (id,a) values (283,14);
+insert into t (id,a) values (283,15);
+insert into t (id,a) values (283,16);
+insert into t (id,a) values (283,17);
+insert into t (id,a) values (283,18);
+insert into t (id,a) values (283,19);
+insert into t (id,a) values (283,20);
+insert into t (id,a) values (283,21);
+insert into t (id,a) values (283,22);
+insert into t (id,a) values (283,23);
+insert into t (id,a) values (283,24);
+insert into t (id,a) values (283,25);
+insert into t (id,a) values (283,26);
+insert into t (id,a) values (283,27);
+insert into t (id,a) values (283,28);
+insert into t (id,a) values (283,29);
+insert into t (id,a) values (283,30);
+insert into t (id,a) values (283,31);
+insert into t (id,a) values (283,32);
+insert into t (id,a) values (283,33);
+insert into t (id,a) values (283,34);
+insert into t (id,a) values (283,35);
+insert into t (id,a) values (283,36);
+insert into t (id,a) values (283,37);
+insert into t (id,a) values (283,38);
+insert into t (id,a) values (283,39);
+insert into t (id,a) values (283,40);
+insert into t (id,a) values (283,41);
+insert into t (id,a) values (283,42);
+insert into t (id,a) values (283,43);
+insert into t (id,a) values (283,44);
+insert into t (id,a) values (283,45);
+insert into t (id,a) values (283,46);
+insert into t (id,a) values (283,47);
+insert into t (id,a) values (283,48);
+insert into t (id,a) values (283,49);
+insert into t (id,a) values (283,50);
+insert into t (id,a) values (283,51);
+insert into t (id,a) values (283,52);
+insert into t (id,a) values (283,53);
+insert into t (id,a) values (283,54);
+insert into t (id,a) values (283,55);
+insert into t (id,a) values (283,56);
+insert into t (id,a) values (283,57);
+insert into t (id,a) values (283,58);
+insert into t (id,a) values (283,59);
+insert into t (id,a) values (283,60);
+insert into t (id,a) values (283,61);
+insert into t (id,a) values (283,62);
+insert into t (id,a) values (283,63);
+insert into t (id,a) values (283,64);
+insert into t (id,a) values (283,65);
+insert into t (id,a) values (283,66);
+insert into t (id,a) values (283,67);
+insert into t (id,a) values (283,68);
+insert into t (id,a) values (283,69);
+insert into t (id,a) values (283,70);
+insert into t (id,a) values (283,71);
+insert into t (id,a) values (283,72);
+insert into t (id,a) values (283,73);
+insert into t (id,a) values (283,74);
+insert into t (id,a) values (283,75);
+insert into t (id,a) values (283,76);
+insert into t (id,a) values (283,77);
+insert into t (id,a) values (283,78);
+insert into t (id,a) values (283,79);
+insert into t (id,a) values (283,80);
+insert into t (id,a) values (283,81);
+insert into t (id,a) values (283,82);
+insert into t (id,a) values (283,83);
+insert into t (id,a) values (283,84);
+insert into t (id,a) values (283,85);
+insert into t (id,a) values (283,86);
+insert into t (id,a) values (283,87);
+insert into t (id,a) values (283,88);
+insert into t (id,a) values (283,89);
+insert into t (id,a) values (283,90);
+insert into t (id,a) values (283,91);
+insert into t (id,a) values (283,92);
+insert into t (id,a) values (283,93);
+insert into t (id,a) values (283,94);
+insert into t (id,a) values (283,95);
+insert into t (id,a) values (283,96);
+insert into t (id,a) values (283,97);
+insert into t (id,a) values (283,98);
+insert into t (id,a) values (283,99);
+insert into t (id,a) values (284,0);
+insert into t (id,a) values (284,1);
+insert into t (id,a) values (284,2);
+insert into t (id,a) values (284,3);
+insert into t (id,a) values (284,4);
+insert into t (id,a) values (284,5);
+insert into t (id,a) values (284,6);
+insert into t (id,a) values (284,7);
+insert into t (id,a) values (284,8);
+insert into t (id,a) values (284,9);
+insert into t (id,a) values (284,10);
+insert into t (id,a) values (284,11);
+insert into t (id,a) values (284,12);
+insert into t (id,a) values (284,13);
+insert into t (id,a) values (284,14);
+insert into t (id,a) values (284,15);
+insert into t (id,a) values (284,16);
+insert into t (id,a) values (284,17);
+insert into t (id,a) values (284,18);
+insert into t (id,a) values (284,19);
+insert into t (id,a) values (284,20);
+insert into t (id,a) values (284,21);
+insert into t (id,a) values (284,22);
+insert into t (id,a) values (284,23);
+insert into t (id,a) values (284,24);
+insert into t (id,a) values (284,25);
+insert into t (id,a) values (284,26);
+insert into t (id,a) values (284,27);
+insert into t (id,a) values (284,28);
+insert into t (id,a) values (284,29);
+insert into t (id,a) values (284,30);
+insert into t (id,a) values (284,31);
+insert into t (id,a) values (284,32);
+insert into t (id,a) values (284,33);
+insert into t (id,a) values (284,34);
+insert into t (id,a) values (284,35);
+insert into t (id,a) values (284,36);
+insert into t (id,a) values (284,37);
+insert into t (id,a) values (284,38);
+insert into t (id,a) values (284,39);
+insert into t (id,a) values (284,40);
+insert into t (id,a) values (284,41);
+insert into t (id,a) values (284,42);
+insert into t (id,a) values (284,43);
+insert into t (id,a) values (284,44);
+insert into t (id,a) values (284,45);
+insert into t (id,a) values (284,46);
+insert into t (id,a) values (284,47);
+insert into t (id,a) values (284,48);
+insert into t (id,a) values (284,49);
+insert into t (id,a) values (284,50);
+insert into t (id,a) values (284,51);
+insert into t (id,a) values (284,52);
+insert into t (id,a) values (284,53);
+insert into t (id,a) values (284,54);
+insert into t (id,a) values (284,55);
+insert into t (id,a) values (284,56);
+insert into t (id,a) values (284,57);
+insert into t (id,a) values (284,58);
+insert into t (id,a) values (284,59);
+insert into t (id,a) values (284,60);
+insert into t (id,a) values (284,61);
+insert into t (id,a) values (284,62);
+insert into t (id,a) values (284,63);
+insert into t (id,a) values (284,64);
+insert into t (id,a) values (284,65);
+insert into t (id,a) values (284,66);
+insert into t (id,a) values (284,67);
+insert into t (id,a) values (284,68);
+insert into t (id,a) values (284,69);
+insert into t (id,a) values (284,70);
+insert into t (id,a) values (284,71);
+insert into t (id,a) values (284,72);
+insert into t (id,a) values (284,73);
+insert into t (id,a) values (284,74);
+insert into t (id,a) values (284,75);
+insert into t (id,a) values (284,76);
+insert into t (id,a) values (284,77);
+insert into t (id,a) values (284,78);
+insert into t (id,a) values (284,79);
+insert into t (id,a) values (284,80);
+insert into t (id,a) values (284,81);
+insert into t (id,a) values (284,82);
+insert into t (id,a) values (284,83);
+insert into t (id,a) values (284,84);
+insert into t (id,a) values (284,85);
+insert into t (id,a) values (284,86);
+insert into t (id,a) values (284,87);
+insert into t (id,a) values (284,88);
+insert into t (id,a) values (284,89);
+insert into t (id,a) values (284,90);
+insert into t (id,a) values (284,91);
+insert into t (id,a) values (284,92);
+insert into t (id,a) values (284,93);
+insert into t (id,a) values (284,94);
+insert into t (id,a) values (284,95);
+insert into t (id,a) values (284,96);
+insert into t (id,a) values (284,97);
+insert into t (id,a) values (284,98);
+insert into t (id,a) values (284,99);
+insert into t (id,a) values (285,0);
+insert into t (id,a) values (285,1);
+insert into t (id,a) values (285,2);
+insert into t (id,a) values (285,3);
+insert into t (id,a) values (285,4);
+insert into t (id,a) values (285,5);
+insert into t (id,a) values (285,6);
+insert into t (id,a) values (285,7);
+insert into t (id,a) values (285,8);
+insert into t (id,a) values (285,9);
+insert into t (id,a) values (285,10);
+insert into t (id,a) values (285,11);
+insert into t (id,a) values (285,12);
+insert into t (id,a) values (285,13);
+insert into t (id,a) values (285,14);
+insert into t (id,a) values (285,15);
+insert into t (id,a) values (285,16);
+insert into t (id,a) values (285,17);
+insert into t (id,a) values (285,18);
+insert into t (id,a) values (285,19);
+insert into t (id,a) values (285,20);
+insert into t (id,a) values (285,21);
+insert into t (id,a) values (285,22);
+insert into t (id,a) values (285,23);
+insert into t (id,a) values (285,24);
+insert into t (id,a) values (285,25);
+insert into t (id,a) values (285,26);
+insert into t (id,a) values (285,27);
+insert into t (id,a) values (285,28);
+insert into t (id,a) values (285,29);
+insert into t (id,a) values (285,30);
+insert into t (id,a) values (285,31);
+insert into t (id,a) values (285,32);
+insert into t (id,a) values (285,33);
+insert into t (id,a) values (285,34);
+insert into t (id,a) values (285,35);
+insert into t (id,a) values (285,36);
+insert into t (id,a) values (285,37);
+insert into t (id,a) values (285,38);
+insert into t (id,a) values (285,39);
+insert into t (id,a) values (285,40);
+insert into t (id,a) values (285,41);
+insert into t (id,a) values (285,42);
+insert into t (id,a) values (285,43);
+insert into t (id,a) values (285,44);
+insert into t (id,a) values (285,45);
+insert into t (id,a) values (285,46);
+insert into t (id,a) values (285,47);
+insert into t (id,a) values (285,48);
+insert into t (id,a) values (285,49);
+insert into t (id,a) values (285,50);
+insert into t (id,a) values (285,51);
+insert into t (id,a) values (285,52);
+insert into t (id,a) values (285,53);
+insert into t (id,a) values (285,54);
+insert into t (id,a) values (285,55);
+insert into t (id,a) values (285,56);
+insert into t (id,a) values (285,57);
+insert into t (id,a) values (285,58);
+insert into t (id,a) values (285,59);
+insert into t (id,a) values (285,60);
+insert into t (id,a) values (285,61);
+insert into t (id,a) values (285,62);
+insert into t (id,a) values (285,63);
+insert into t (id,a) values (285,64);
+insert into t (id,a) values (285,65);
+insert into t (id,a) values (285,66);
+insert into t (id,a) values (285,67);
+insert into t (id,a) values (285,68);
+insert into t (id,a) values (285,69);
+insert into t (id,a) values (285,70);
+insert into t (id,a) values (285,71);
+insert into t (id,a) values (285,72);
+insert into t (id,a) values (285,73);
+insert into t (id,a) values (285,74);
+insert into t (id,a) values (285,75);
+insert into t (id,a) values (285,76);
+insert into t (id,a) values (285,77);
+insert into t (id,a) values (285,78);
+insert into t (id,a) values (285,79);
+insert into t (id,a) values (285,80);
+insert into t (id,a) values (285,81);
+insert into t (id,a) values (285,82);
+insert into t (id,a) values (285,83);
+insert into t (id,a) values (285,84);
+insert into t (id,a) values (285,85);
+insert into t (id,a) values (285,86);
+insert into t (id,a) values (285,87);
+insert into t (id,a) values (285,88);
+insert into t (id,a) values (285,89);
+insert into t (id,a) values (285,90);
+insert into t (id,a) values (285,91);
+insert into t (id,a) values (285,92);
+insert into t (id,a) values (285,93);
+insert into t (id,a) values (285,94);
+insert into t (id,a) values (285,95);
+insert into t (id,a) values (285,96);
+insert into t (id,a) values (285,97);
+insert into t (id,a) values (285,98);
+insert into t (id,a) values (285,99);
+insert into t (id,a) values (286,0);
+insert into t (id,a) values (286,1);
+insert into t (id,a) values (286,2);
+insert into t (id,a) values (286,3);
+insert into t (id,a) values (286,4);
+insert into t (id,a) values (286,5);
+insert into t (id,a) values (286,6);
+insert into t (id,a) values (286,7);
+insert into t (id,a) values (286,8);
+insert into t (id,a) values (286,9);
+insert into t (id,a) values (286,10);
+insert into t (id,a) values (286,11);
+insert into t (id,a) values (286,12);
+insert into t (id,a) values (286,13);
+insert into t (id,a) values (286,14);
+insert into t (id,a) values (286,15);
+insert into t (id,a) values (286,16);
+insert into t (id,a) values (286,17);
+insert into t (id,a) values (286,18);
+insert into t (id,a) values (286,19);
+insert into t (id,a) values (286,20);
+insert into t (id,a) values (286,21);
+insert into t (id,a) values (286,22);
+insert into t (id,a) values (286,23);
+insert into t (id,a) values (286,24);
+insert into t (id,a) values (286,25);
+insert into t (id,a) values (286,26);
+insert into t (id,a) values (286,27);
+insert into t (id,a) values (286,28);
+insert into t (id,a) values (286,29);
+insert into t (id,a) values (286,30);
+insert into t (id,a) values (286,31);
+insert into t (id,a) values (286,32);
+insert into t (id,a) values (286,33);
+insert into t (id,a) values (286,34);
+insert into t (id,a) values (286,35);
+insert into t (id,a) values (286,36);
+insert into t (id,a) values (286,37);
+insert into t (id,a) values (286,38);
+insert into t (id,a) values (286,39);
+insert into t (id,a) values (286,40);
+insert into t (id,a) values (286,41);
+insert into t (id,a) values (286,42);
+insert into t (id,a) values (286,43);
+insert into t (id,a) values (286,44);
+insert into t (id,a) values (286,45);
+insert into t (id,a) values (286,46);
+insert into t (id,a) values (286,47);
+insert into t (id,a) values (286,48);
+insert into t (id,a) values (286,49);
+insert into t (id,a) values (286,50);
+insert into t (id,a) values (286,51);
+insert into t (id,a) values (286,52);
+insert into t (id,a) values (286,53);
+insert into t (id,a) values (286,54);
+insert into t (id,a) values (286,55);
+insert into t (id,a) values (286,56);
+insert into t (id,a) values (286,57);
+insert into t (id,a) values (286,58);
+insert into t (id,a) values (286,59);
+insert into t (id,a) values (286,60);
+insert into t (id,a) values (286,61);
+insert into t (id,a) values (286,62);
+insert into t (id,a) values (286,63);
+insert into t (id,a) values (286,64);
+insert into t (id,a) values (286,65);
+insert into t (id,a) values (286,66);
+insert into t (id,a) values (286,67);
+insert into t (id,a) values (286,68);
+insert into t (id,a) values (286,69);
+insert into t (id,a) values (286,70);
+insert into t (id,a) values (286,71);
+insert into t (id,a) values (286,72);
+insert into t (id,a) values (286,73);
+insert into t (id,a) values (286,74);
+insert into t (id,a) values (286,75);
+insert into t (id,a) values (286,76);
+insert into t (id,a) values (286,77);
+insert into t (id,a) values (286,78);
+insert into t (id,a) values (286,79);
+insert into t (id,a) values (286,80);
+insert into t (id,a) values (286,81);
+insert into t (id,a) values (286,82);
+insert into t (id,a) values (286,83);
+insert into t (id,a) values (286,84);
+insert into t (id,a) values (286,85);
+insert into t (id,a) values (286,86);
+insert into t (id,a) values (286,87);
+insert into t (id,a) values (286,88);
+insert into t (id,a) values (286,89);
+insert into t (id,a) values (286,90);
+insert into t (id,a) values (286,91);
+insert into t (id,a) values (286,92);
+insert into t (id,a) values (286,93);
+insert into t (id,a) values (286,94);
+insert into t (id,a) values (286,95);
+insert into t (id,a) values (286,96);
+insert into t (id,a) values (286,97);
+insert into t (id,a) values (286,98);
+insert into t (id,a) values (286,99);
+insert into t (id,a) values (287,0);
+insert into t (id,a) values (287,1);
+insert into t (id,a) values (287,2);
+insert into t (id,a) values (287,3);
+insert into t (id,a) values (287,4);
+insert into t (id,a) values (287,5);
+insert into t (id,a) values (287,6);
+insert into t (id,a) values (287,7);
+insert into t (id,a) values (287,8);
+insert into t (id,a) values (287,9);
+insert into t (id,a) values (287,10);
+insert into t (id,a) values (287,11);
+insert into t (id,a) values (287,12);
+insert into t (id,a) values (287,13);
+insert into t (id,a) values (287,14);
+insert into t (id,a) values (287,15);
+insert into t (id,a) values (287,16);
+insert into t (id,a) values (287,17);
+insert into t (id,a) values (287,18);
+insert into t (id,a) values (287,19);
+insert into t (id,a) values (287,20);
+insert into t (id,a) values (287,21);
+insert into t (id,a) values (287,22);
+insert into t (id,a) values (287,23);
+insert into t (id,a) values (287,24);
+insert into t (id,a) values (287,25);
+insert into t (id,a) values (287,26);
+insert into t (id,a) values (287,27);
+insert into t (id,a) values (287,28);
+insert into t (id,a) values (287,29);
+insert into t (id,a) values (287,30);
+insert into t (id,a) values (287,31);
+insert into t (id,a) values (287,32);
+insert into t (id,a) values (287,33);
+insert into t (id,a) values (287,34);
+insert into t (id,a) values (287,35);
+insert into t (id,a) values (287,36);
+insert into t (id,a) values (287,37);
+insert into t (id,a) values (287,38);
+insert into t (id,a) values (287,39);
+insert into t (id,a) values (287,40);
+insert into t (id,a) values (287,41);
+insert into t (id,a) values (287,42);
+insert into t (id,a) values (287,43);
+insert into t (id,a) values (287,44);
+insert into t (id,a) values (287,45);
+insert into t (id,a) values (287,46);
+insert into t (id,a) values (287,47);
+insert into t (id,a) values (287,48);
+insert into t (id,a) values (287,49);
+insert into t (id,a) values (287,50);
+insert into t (id,a) values (287,51);
+insert into t (id,a) values (287,52);
+insert into t (id,a) values (287,53);
+insert into t (id,a) values (287,54);
+insert into t (id,a) values (287,55);
+insert into t (id,a) values (287,56);
+insert into t (id,a) values (287,57);
+insert into t (id,a) values (287,58);
+insert into t (id,a) values (287,59);
+insert into t (id,a) values (287,60);
+insert into t (id,a) values (287,61);
+insert into t (id,a) values (287,62);
+insert into t (id,a) values (287,63);
+insert into t (id,a) values (287,64);
+insert into t (id,a) values (287,65);
+insert into t (id,a) values (287,66);
+insert into t (id,a) values (287,67);
+insert into t (id,a) values (287,68);
+insert into t (id,a) values (287,69);
+insert into t (id,a) values (287,70);
+insert into t (id,a) values (287,71);
+insert into t (id,a) values (287,72);
+insert into t (id,a) values (287,73);
+insert into t (id,a) values (287,74);
+insert into t (id,a) values (287,75);
+insert into t (id,a) values (287,76);
+insert into t (id,a) values (287,77);
+insert into t (id,a) values (287,78);
+insert into t (id,a) values (287,79);
+insert into t (id,a) values (287,80);
+insert into t (id,a) values (287,81);
+insert into t (id,a) values (287,82);
+insert into t (id,a) values (287,83);
+insert into t (id,a) values (287,84);
+insert into t (id,a) values (287,85);
+insert into t (id,a) values (287,86);
+insert into t (id,a) values (287,87);
+insert into t (id,a) values (287,88);
+insert into t (id,a) values (287,89);
+insert into t (id,a) values (287,90);
+insert into t (id,a) values (287,91);
+insert into t (id,a) values (287,92);
+insert into t (id,a) values (287,93);
+insert into t (id,a) values (287,94);
+insert into t (id,a) values (287,95);
+insert into t (id,a) values (287,96);
+insert into t (id,a) values (287,97);
+insert into t (id,a) values (287,98);
+insert into t (id,a) values (287,99);
+insert into t (id,a) values (288,0);
+insert into t (id,a) values (288,1);
+insert into t (id,a) values (288,2);
+insert into t (id,a) values (288,3);
+insert into t (id,a) values (288,4);
+insert into t (id,a) values (288,5);
+insert into t (id,a) values (288,6);
+insert into t (id,a) values (288,7);
+insert into t (id,a) values (288,8);
+insert into t (id,a) values (288,9);
+insert into t (id,a) values (288,10);
+insert into t (id,a) values (288,11);
+insert into t (id,a) values (288,12);
+insert into t (id,a) values (288,13);
+insert into t (id,a) values (288,14);
+insert into t (id,a) values (288,15);
+insert into t (id,a) values (288,16);
+insert into t (id,a) values (288,17);
+insert into t (id,a) values (288,18);
+insert into t (id,a) values (288,19);
+insert into t (id,a) values (288,20);
+insert into t (id,a) values (288,21);
+insert into t (id,a) values (288,22);
+insert into t (id,a) values (288,23);
+insert into t (id,a) values (288,24);
+insert into t (id,a) values (288,25);
+insert into t (id,a) values (288,26);
+insert into t (id,a) values (288,27);
+insert into t (id,a) values (288,28);
+insert into t (id,a) values (288,29);
+insert into t (id,a) values (288,30);
+insert into t (id,a) values (288,31);
+insert into t (id,a) values (288,32);
+insert into t (id,a) values (288,33);
+insert into t (id,a) values (288,34);
+insert into t (id,a) values (288,35);
+insert into t (id,a) values (288,36);
+insert into t (id,a) values (288,37);
+insert into t (id,a) values (288,38);
+insert into t (id,a) values (288,39);
+insert into t (id,a) values (288,40);
+insert into t (id,a) values (288,41);
+insert into t (id,a) values (288,42);
+insert into t (id,a) values (288,43);
+insert into t (id,a) values (288,44);
+insert into t (id,a) values (288,45);
+insert into t (id,a) values (288,46);
+insert into t (id,a) values (288,47);
+insert into t (id,a) values (288,48);
+insert into t (id,a) values (288,49);
+insert into t (id,a) values (288,50);
+insert into t (id,a) values (288,51);
+insert into t (id,a) values (288,52);
+insert into t (id,a) values (288,53);
+insert into t (id,a) values (288,54);
+insert into t (id,a) values (288,55);
+insert into t (id,a) values (288,56);
+insert into t (id,a) values (288,57);
+insert into t (id,a) values (288,58);
+insert into t (id,a) values (288,59);
+insert into t (id,a) values (288,60);
+insert into t (id,a) values (288,61);
+insert into t (id,a) values (288,62);
+insert into t (id,a) values (288,63);
+insert into t (id,a) values (288,64);
+insert into t (id,a) values (288,65);
+insert into t (id,a) values (288,66);
+insert into t (id,a) values (288,67);
+insert into t (id,a) values (288,68);
+insert into t (id,a) values (288,69);
+insert into t (id,a) values (288,70);
+insert into t (id,a) values (288,71);
+insert into t (id,a) values (288,72);
+insert into t (id,a) values (288,73);
+insert into t (id,a) values (288,74);
+insert into t (id,a) values (288,75);
+insert into t (id,a) values (288,76);
+insert into t (id,a) values (288,77);
+insert into t (id,a) values (288,78);
+insert into t (id,a) values (288,79);
+insert into t (id,a) values (288,80);
+insert into t (id,a) values (288,81);
+insert into t (id,a) values (288,82);
+insert into t (id,a) values (288,83);
+insert into t (id,a) values (288,84);
+insert into t (id,a) values (288,85);
+insert into t (id,a) values (288,86);
+insert into t (id,a) values (288,87);
+insert into t (id,a) values (288,88);
+insert into t (id,a) values (288,89);
+insert into t (id,a) values (288,90);
+insert into t (id,a) values (288,91);
+insert into t (id,a) values (288,92);
+insert into t (id,a) values (288,93);
+insert into t (id,a) values (288,94);
+insert into t (id,a) values (288,95);
+insert into t (id,a) values (288,96);
+insert into t (id,a) values (288,97);
+insert into t (id,a) values (288,98);
+insert into t (id,a) values (288,99);
+insert into t (id,a) values (289,0);
+insert into t (id,a) values (289,1);
+insert into t (id,a) values (289,2);
+insert into t (id,a) values (289,3);
+insert into t (id,a) values (289,4);
+insert into t (id,a) values (289,5);
+insert into t (id,a) values (289,6);
+insert into t (id,a) values (289,7);
+insert into t (id,a) values (289,8);
+insert into t (id,a) values (289,9);
+insert into t (id,a) values (289,10);
+insert into t (id,a) values (289,11);
+insert into t (id,a) values (289,12);
+insert into t (id,a) values (289,13);
+insert into t (id,a) values (289,14);
+insert into t (id,a) values (289,15);
+insert into t (id,a) values (289,16);
+insert into t (id,a) values (289,17);
+insert into t (id,a) values (289,18);
+insert into t (id,a) values (289,19);
+insert into t (id,a) values (289,20);
+insert into t (id,a) values (289,21);
+insert into t (id,a) values (289,22);
+insert into t (id,a) values (289,23);
+insert into t (id,a) values (289,24);
+insert into t (id,a) values (289,25);
+insert into t (id,a) values (289,26);
+insert into t (id,a) values (289,27);
+insert into t (id,a) values (289,28);
+insert into t (id,a) values (289,29);
+insert into t (id,a) values (289,30);
+insert into t (id,a) values (289,31);
+insert into t (id,a) values (289,32);
+insert into t (id,a) values (289,33);
+insert into t (id,a) values (289,34);
+insert into t (id,a) values (289,35);
+insert into t (id,a) values (289,36);
+insert into t (id,a) values (289,37);
+insert into t (id,a) values (289,38);
+insert into t (id,a) values (289,39);
+insert into t (id,a) values (289,40);
+insert into t (id,a) values (289,41);
+insert into t (id,a) values (289,42);
+insert into t (id,a) values (289,43);
+insert into t (id,a) values (289,44);
+insert into t (id,a) values (289,45);
+insert into t (id,a) values (289,46);
+insert into t (id,a) values (289,47);
+insert into t (id,a) values (289,48);
+insert into t (id,a) values (289,49);
+insert into t (id,a) values (289,50);
+insert into t (id,a) values (289,51);
+insert into t (id,a) values (289,52);
+insert into t (id,a) values (289,53);
+insert into t (id,a) values (289,54);
+insert into t (id,a) values (289,55);
+insert into t (id,a) values (289,56);
+insert into t (id,a) values (289,57);
+insert into t (id,a) values (289,58);
+insert into t (id,a) values (289,59);
+insert into t (id,a) values (289,60);
+insert into t (id,a) values (289,61);
+insert into t (id,a) values (289,62);
+insert into t (id,a) values (289,63);
+insert into t (id,a) values (289,64);
+insert into t (id,a) values (289,65);
+insert into t (id,a) values (289,66);
+insert into t (id,a) values (289,67);
+insert into t (id,a) values (289,68);
+insert into t (id,a) values (289,69);
+insert into t (id,a) values (289,70);
+insert into t (id,a) values (289,71);
+insert into t (id,a) values (289,72);
+insert into t (id,a) values (289,73);
+insert into t (id,a) values (289,74);
+insert into t (id,a) values (289,75);
+insert into t (id,a) values (289,76);
+insert into t (id,a) values (289,77);
+insert into t (id,a) values (289,78);
+insert into t (id,a) values (289,79);
+insert into t (id,a) values (289,80);
+insert into t (id,a) values (289,81);
+insert into t (id,a) values (289,82);
+insert into t (id,a) values (289,83);
+insert into t (id,a) values (289,84);
+insert into t (id,a) values (289,85);
+insert into t (id,a) values (289,86);
+insert into t (id,a) values (289,87);
+insert into t (id,a) values (289,88);
+insert into t (id,a) values (289,89);
+insert into t (id,a) values (289,90);
+insert into t (id,a) values (289,91);
+insert into t (id,a) values (289,92);
+insert into t (id,a) values (289,93);
+insert into t (id,a) values (289,94);
+insert into t (id,a) values (289,95);
+insert into t (id,a) values (289,96);
+insert into t (id,a) values (289,97);
+insert into t (id,a) values (289,98);
+insert into t (id,a) values (289,99);
+insert into t (id,a) values (290,0);
+insert into t (id,a) values (290,1);
+insert into t (id,a) values (290,2);
+insert into t (id,a) values (290,3);
+insert into t (id,a) values (290,4);
+insert into t (id,a) values (290,5);
+insert into t (id,a) values (290,6);
+insert into t (id,a) values (290,7);
+insert into t (id,a) values (290,8);
+insert into t (id,a) values (290,9);
+insert into t (id,a) values (290,10);
+insert into t (id,a) values (290,11);
+insert into t (id,a) values (290,12);
+insert into t (id,a) values (290,13);
+insert into t (id,a) values (290,14);
+insert into t (id,a) values (290,15);
+insert into t (id,a) values (290,16);
+insert into t (id,a) values (290,17);
+insert into t (id,a) values (290,18);
+insert into t (id,a) values (290,19);
+insert into t (id,a) values (290,20);
+insert into t (id,a) values (290,21);
+insert into t (id,a) values (290,22);
+insert into t (id,a) values (290,23);
+insert into t (id,a) values (290,24);
+insert into t (id,a) values (290,25);
+insert into t (id,a) values (290,26);
+insert into t (id,a) values (290,27);
+insert into t (id,a) values (290,28);
+insert into t (id,a) values (290,29);
+insert into t (id,a) values (290,30);
+insert into t (id,a) values (290,31);
+insert into t (id,a) values (290,32);
+insert into t (id,a) values (290,33);
+insert into t (id,a) values (290,34);
+insert into t (id,a) values (290,35);
+insert into t (id,a) values (290,36);
+insert into t (id,a) values (290,37);
+insert into t (id,a) values (290,38);
+insert into t (id,a) values (290,39);
+insert into t (id,a) values (290,40);
+insert into t (id,a) values (290,41);
+insert into t (id,a) values (290,42);
+insert into t (id,a) values (290,43);
+insert into t (id,a) values (290,44);
+insert into t (id,a) values (290,45);
+insert into t (id,a) values (290,46);
+insert into t (id,a) values (290,47);
+insert into t (id,a) values (290,48);
+insert into t (id,a) values (290,49);
+insert into t (id,a) values (290,50);
+insert into t (id,a) values (290,51);
+insert into t (id,a) values (290,52);
+insert into t (id,a) values (290,53);
+insert into t (id,a) values (290,54);
+insert into t (id,a) values (290,55);
+insert into t (id,a) values (290,56);
+insert into t (id,a) values (290,57);
+insert into t (id,a) values (290,58);
+insert into t (id,a) values (290,59);
+insert into t (id,a) values (290,60);
+insert into t (id,a) values (290,61);
+insert into t (id,a) values (290,62);
+insert into t (id,a) values (290,63);
+insert into t (id,a) values (290,64);
+insert into t (id,a) values (290,65);
+insert into t (id,a) values (290,66);
+insert into t (id,a) values (290,67);
+insert into t (id,a) values (290,68);
+insert into t (id,a) values (290,69);
+insert into t (id,a) values (290,70);
+insert into t (id,a) values (290,71);
+insert into t (id,a) values (290,72);
+insert into t (id,a) values (290,73);
+insert into t (id,a) values (290,74);
+insert into t (id,a) values (290,75);
+insert into t (id,a) values (290,76);
+insert into t (id,a) values (290,77);
+insert into t (id,a) values (290,78);
+insert into t (id,a) values (290,79);
+insert into t (id,a) values (290,80);
+insert into t (id,a) values (290,81);
+insert into t (id,a) values (290,82);
+insert into t (id,a) values (290,83);
+insert into t (id,a) values (290,84);
+insert into t (id,a) values (290,85);
+insert into t (id,a) values (290,86);
+insert into t (id,a) values (290,87);
+insert into t (id,a) values (290,88);
+insert into t (id,a) values (290,89);
+insert into t (id,a) values (290,90);
+insert into t (id,a) values (290,91);
+insert into t (id,a) values (290,92);
+insert into t (id,a) values (290,93);
+insert into t (id,a) values (290,94);
+insert into t (id,a) values (290,95);
+insert into t (id,a) values (290,96);
+insert into t (id,a) values (290,97);
+insert into t (id,a) values (290,98);
+insert into t (id,a) values (290,99);
+insert into t (id,a) values (291,0);
+insert into t (id,a) values (291,1);
+insert into t (id,a) values (291,2);
+insert into t (id,a) values (291,3);
+insert into t (id,a) values (291,4);
+insert into t (id,a) values (291,5);
+insert into t (id,a) values (291,6);
+insert into t (id,a) values (291,7);
+insert into t (id,a) values (291,8);
+insert into t (id,a) values (291,9);
+insert into t (id,a) values (291,10);
+insert into t (id,a) values (291,11);
+insert into t (id,a) values (291,12);
+insert into t (id,a) values (291,13);
+insert into t (id,a) values (291,14);
+insert into t (id,a) values (291,15);
+insert into t (id,a) values (291,16);
+insert into t (id,a) values (291,17);
+insert into t (id,a) values (291,18);
+insert into t (id,a) values (291,19);
+insert into t (id,a) values (291,20);
+insert into t (id,a) values (291,21);
+insert into t (id,a) values (291,22);
+insert into t (id,a) values (291,23);
+insert into t (id,a) values (291,24);
+insert into t (id,a) values (291,25);
+insert into t (id,a) values (291,26);
+insert into t (id,a) values (291,27);
+insert into t (id,a) values (291,28);
+insert into t (id,a) values (291,29);
+insert into t (id,a) values (291,30);
+insert into t (id,a) values (291,31);
+insert into t (id,a) values (291,32);
+insert into t (id,a) values (291,33);
+insert into t (id,a) values (291,34);
+insert into t (id,a) values (291,35);
+insert into t (id,a) values (291,36);
+insert into t (id,a) values (291,37);
+insert into t (id,a) values (291,38);
+insert into t (id,a) values (291,39);
+insert into t (id,a) values (291,40);
+insert into t (id,a) values (291,41);
+insert into t (id,a) values (291,42);
+insert into t (id,a) values (291,43);
+insert into t (id,a) values (291,44);
+insert into t (id,a) values (291,45);
+insert into t (id,a) values (291,46);
+insert into t (id,a) values (291,47);
+insert into t (id,a) values (291,48);
+insert into t (id,a) values (291,49);
+insert into t (id,a) values (291,50);
+insert into t (id,a) values (291,51);
+insert into t (id,a) values (291,52);
+insert into t (id,a) values (291,53);
+insert into t (id,a) values (291,54);
+insert into t (id,a) values (291,55);
+insert into t (id,a) values (291,56);
+insert into t (id,a) values (291,57);
+insert into t (id,a) values (291,58);
+insert into t (id,a) values (291,59);
+insert into t (id,a) values (291,60);
+insert into t (id,a) values (291,61);
+insert into t (id,a) values (291,62);
+insert into t (id,a) values (291,63);
+insert into t (id,a) values (291,64);
+insert into t (id,a) values (291,65);
+insert into t (id,a) values (291,66);
+insert into t (id,a) values (291,67);
+insert into t (id,a) values (291,68);
+insert into t (id,a) values (291,69);
+insert into t (id,a) values (291,70);
+insert into t (id,a) values (291,71);
+insert into t (id,a) values (291,72);
+insert into t (id,a) values (291,73);
+insert into t (id,a) values (291,74);
+insert into t (id,a) values (291,75);
+insert into t (id,a) values (291,76);
+insert into t (id,a) values (291,77);
+insert into t (id,a) values (291,78);
+insert into t (id,a) values (291,79);
+insert into t (id,a) values (291,80);
+insert into t (id,a) values (291,81);
+insert into t (id,a) values (291,82);
+insert into t (id,a) values (291,83);
+insert into t (id,a) values (291,84);
+insert into t (id,a) values (291,85);
+insert into t (id,a) values (291,86);
+insert into t (id,a) values (291,87);
+insert into t (id,a) values (291,88);
+insert into t (id,a) values (291,89);
+insert into t (id,a) values (291,90);
+insert into t (id,a) values (291,91);
+insert into t (id,a) values (291,92);
+insert into t (id,a) values (291,93);
+insert into t (id,a) values (291,94);
+insert into t (id,a) values (291,95);
+insert into t (id,a) values (291,96);
+insert into t (id,a) values (291,97);
+insert into t (id,a) values (291,98);
+insert into t (id,a) values (291,99);
+insert into t (id,a) values (292,0);
+insert into t (id,a) values (292,1);
+insert into t (id,a) values (292,2);
+insert into t (id,a) values (292,3);
+insert into t (id,a) values (292,4);
+insert into t (id,a) values (292,5);
+insert into t (id,a) values (292,6);
+insert into t (id,a) values (292,7);
+insert into t (id,a) values (292,8);
+insert into t (id,a) values (292,9);
+insert into t (id,a) values (292,10);
+insert into t (id,a) values (292,11);
+insert into t (id,a) values (292,12);
+insert into t (id,a) values (292,13);
+insert into t (id,a) values (292,14);
+insert into t (id,a) values (292,15);
+insert into t (id,a) values (292,16);
+insert into t (id,a) values (292,17);
+insert into t (id,a) values (292,18);
+insert into t (id,a) values (292,19);
+insert into t (id,a) values (292,20);
+insert into t (id,a) values (292,21);
+insert into t (id,a) values (292,22);
+insert into t (id,a) values (292,23);
+insert into t (id,a) values (292,24);
+insert into t (id,a) values (292,25);
+insert into t (id,a) values (292,26);
+insert into t (id,a) values (292,27);
+insert into t (id,a) values (292,28);
+insert into t (id,a) values (292,29);
+insert into t (id,a) values (292,30);
+insert into t (id,a) values (292,31);
+insert into t (id,a) values (292,32);
+insert into t (id,a) values (292,33);
+insert into t (id,a) values (292,34);
+insert into t (id,a) values (292,35);
+insert into t (id,a) values (292,36);
+insert into t (id,a) values (292,37);
+insert into t (id,a) values (292,38);
+insert into t (id,a) values (292,39);
+insert into t (id,a) values (292,40);
+insert into t (id,a) values (292,41);
+insert into t (id,a) values (292,42);
+insert into t (id,a) values (292,43);
+insert into t (id,a) values (292,44);
+insert into t (id,a) values (292,45);
+insert into t (id,a) values (292,46);
+insert into t (id,a) values (292,47);
+insert into t (id,a) values (292,48);
+insert into t (id,a) values (292,49);
+insert into t (id,a) values (292,50);
+insert into t (id,a) values (292,51);
+insert into t (id,a) values (292,52);
+insert into t (id,a) values (292,53);
+insert into t (id,a) values (292,54);
+insert into t (id,a) values (292,55);
+insert into t (id,a) values (292,56);
+insert into t (id,a) values (292,57);
+insert into t (id,a) values (292,58);
+insert into t (id,a) values (292,59);
+insert into t (id,a) values (292,60);
+insert into t (id,a) values (292,61);
+insert into t (id,a) values (292,62);
+insert into t (id,a) values (292,63);
+insert into t (id,a) values (292,64);
+insert into t (id,a) values (292,65);
+insert into t (id,a) values (292,66);
+insert into t (id,a) values (292,67);
+insert into t (id,a) values (292,68);
+insert into t (id,a) values (292,69);
+insert into t (id,a) values (292,70);
+insert into t (id,a) values (292,71);
+insert into t (id,a) values (292,72);
+insert into t (id,a) values (292,73);
+insert into t (id,a) values (292,74);
+insert into t (id,a) values (292,75);
+insert into t (id,a) values (292,76);
+insert into t (id,a) values (292,77);
+insert into t (id,a) values (292,78);
+insert into t (id,a) values (292,79);
+insert into t (id,a) values (292,80);
+insert into t (id,a) values (292,81);
+insert into t (id,a) values (292,82);
+insert into t (id,a) values (292,83);
+insert into t (id,a) values (292,84);
+insert into t (id,a) values (292,85);
+insert into t (id,a) values (292,86);
+insert into t (id,a) values (292,87);
+insert into t (id,a) values (292,88);
+insert into t (id,a) values (292,89);
+insert into t (id,a) values (292,90);
+insert into t (id,a) values (292,91);
+insert into t (id,a) values (292,92);
+insert into t (id,a) values (292,93);
+insert into t (id,a) values (292,94);
+insert into t (id,a) values (292,95);
+insert into t (id,a) values (292,96);
+insert into t (id,a) values (292,97);
+insert into t (id,a) values (292,98);
+insert into t (id,a) values (292,99);
+insert into t (id,a) values (293,0);
+insert into t (id,a) values (293,1);
+insert into t (id,a) values (293,2);
+insert into t (id,a) values (293,3);
+insert into t (id,a) values (293,4);
+insert into t (id,a) values (293,5);
+insert into t (id,a) values (293,6);
+insert into t (id,a) values (293,7);
+insert into t (id,a) values (293,8);
+insert into t (id,a) values (293,9);
+insert into t (id,a) values (293,10);
+insert into t (id,a) values (293,11);
+insert into t (id,a) values (293,12);
+insert into t (id,a) values (293,13);
+insert into t (id,a) values (293,14);
+insert into t (id,a) values (293,15);
+insert into t (id,a) values (293,16);
+insert into t (id,a) values (293,17);
+insert into t (id,a) values (293,18);
+insert into t (id,a) values (293,19);
+insert into t (id,a) values (293,20);
+insert into t (id,a) values (293,21);
+insert into t (id,a) values (293,22);
+insert into t (id,a) values (293,23);
+insert into t (id,a) values (293,24);
+insert into t (id,a) values (293,25);
+insert into t (id,a) values (293,26);
+insert into t (id,a) values (293,27);
+insert into t (id,a) values (293,28);
+insert into t (id,a) values (293,29);
+insert into t (id,a) values (293,30);
+insert into t (id,a) values (293,31);
+insert into t (id,a) values (293,32);
+insert into t (id,a) values (293,33);
+insert into t (id,a) values (293,34);
+insert into t (id,a) values (293,35);
+insert into t (id,a) values (293,36);
+insert into t (id,a) values (293,37);
+insert into t (id,a) values (293,38);
+insert into t (id,a) values (293,39);
+insert into t (id,a) values (293,40);
+insert into t (id,a) values (293,41);
+insert into t (id,a) values (293,42);
+insert into t (id,a) values (293,43);
+insert into t (id,a) values (293,44);
+insert into t (id,a) values (293,45);
+insert into t (id,a) values (293,46);
+insert into t (id,a) values (293,47);
+insert into t (id,a) values (293,48);
+insert into t (id,a) values (293,49);
+insert into t (id,a) values (293,50);
+insert into t (id,a) values (293,51);
+insert into t (id,a) values (293,52);
+insert into t (id,a) values (293,53);
+insert into t (id,a) values (293,54);
+insert into t (id,a) values (293,55);
+insert into t (id,a) values (293,56);
+insert into t (id,a) values (293,57);
+insert into t (id,a) values (293,58);
+insert into t (id,a) values (293,59);
+insert into t (id,a) values (293,60);
+insert into t (id,a) values (293,61);
+insert into t (id,a) values (293,62);
+insert into t (id,a) values (293,63);
+insert into t (id,a) values (293,64);
+insert into t (id,a) values (293,65);
+insert into t (id,a) values (293,66);
+insert into t (id,a) values (293,67);
+insert into t (id,a) values (293,68);
+insert into t (id,a) values (293,69);
+insert into t (id,a) values (293,70);
+insert into t (id,a) values (293,71);
+insert into t (id,a) values (293,72);
+insert into t (id,a) values (293,73);
+insert into t (id,a) values (293,74);
+insert into t (id,a) values (293,75);
+insert into t (id,a) values (293,76);
+insert into t (id,a) values (293,77);
+insert into t (id,a) values (293,78);
+insert into t (id,a) values (293,79);
+insert into t (id,a) values (293,80);
+insert into t (id,a) values (293,81);
+insert into t (id,a) values (293,82);
+insert into t (id,a) values (293,83);
+insert into t (id,a) values (293,84);
+insert into t (id,a) values (293,85);
+insert into t (id,a) values (293,86);
+insert into t (id,a) values (293,87);
+insert into t (id,a) values (293,88);
+insert into t (id,a) values (293,89);
+insert into t (id,a) values (293,90);
+insert into t (id,a) values (293,91);
+insert into t (id,a) values (293,92);
+insert into t (id,a) values (293,93);
+insert into t (id,a) values (293,94);
+insert into t (id,a) values (293,95);
+insert into t (id,a) values (293,96);
+insert into t (id,a) values (293,97);
+insert into t (id,a) values (293,98);
+insert into t (id,a) values (293,99);
+insert into t (id,a) values (294,0);
+insert into t (id,a) values (294,1);
+insert into t (id,a) values (294,2);
+insert into t (id,a) values (294,3);
+insert into t (id,a) values (294,4);
+insert into t (id,a) values (294,5);
+insert into t (id,a) values (294,6);
+insert into t (id,a) values (294,7);
+insert into t (id,a) values (294,8);
+insert into t (id,a) values (294,9);
+insert into t (id,a) values (294,10);
+insert into t (id,a) values (294,11);
+insert into t (id,a) values (294,12);
+insert into t (id,a) values (294,13);
+insert into t (id,a) values (294,14);
+insert into t (id,a) values (294,15);
+insert into t (id,a) values (294,16);
+insert into t (id,a) values (294,17);
+insert into t (id,a) values (294,18);
+insert into t (id,a) values (294,19);
+insert into t (id,a) values (294,20);
+insert into t (id,a) values (294,21);
+insert into t (id,a) values (294,22);
+insert into t (id,a) values (294,23);
+insert into t (id,a) values (294,24);
+insert into t (id,a) values (294,25);
+insert into t (id,a) values (294,26);
+insert into t (id,a) values (294,27);
+insert into t (id,a) values (294,28);
+insert into t (id,a) values (294,29);
+insert into t (id,a) values (294,30);
+insert into t (id,a) values (294,31);
+insert into t (id,a) values (294,32);
+insert into t (id,a) values (294,33);
+insert into t (id,a) values (294,34);
+insert into t (id,a) values (294,35);
+insert into t (id,a) values (294,36);
+insert into t (id,a) values (294,37);
+insert into t (id,a) values (294,38);
+insert into t (id,a) values (294,39);
+insert into t (id,a) values (294,40);
+insert into t (id,a) values (294,41);
+insert into t (id,a) values (294,42);
+insert into t (id,a) values (294,43);
+insert into t (id,a) values (294,44);
+insert into t (id,a) values (294,45);
+insert into t (id,a) values (294,46);
+insert into t (id,a) values (294,47);
+insert into t (id,a) values (294,48);
+insert into t (id,a) values (294,49);
+insert into t (id,a) values (294,50);
+insert into t (id,a) values (294,51);
+insert into t (id,a) values (294,52);
+insert into t (id,a) values (294,53);
+insert into t (id,a) values (294,54);
+insert into t (id,a) values (294,55);
+insert into t (id,a) values (294,56);
+insert into t (id,a) values (294,57);
+insert into t (id,a) values (294,58);
+insert into t (id,a) values (294,59);
+insert into t (id,a) values (294,60);
+insert into t (id,a) values (294,61);
+insert into t (id,a) values (294,62);
+insert into t (id,a) values (294,63);
+insert into t (id,a) values (294,64);
+insert into t (id,a) values (294,65);
+insert into t (id,a) values (294,66);
+insert into t (id,a) values (294,67);
+insert into t (id,a) values (294,68);
+insert into t (id,a) values (294,69);
+insert into t (id,a) values (294,70);
+insert into t (id,a) values (294,71);
+insert into t (id,a) values (294,72);
+insert into t (id,a) values (294,73);
+insert into t (id,a) values (294,74);
+insert into t (id,a) values (294,75);
+insert into t (id,a) values (294,76);
+insert into t (id,a) values (294,77);
+insert into t (id,a) values (294,78);
+insert into t (id,a) values (294,79);
+insert into t (id,a) values (294,80);
+insert into t (id,a) values (294,81);
+insert into t (id,a) values (294,82);
+insert into t (id,a) values (294,83);
+insert into t (id,a) values (294,84);
+insert into t (id,a) values (294,85);
+insert into t (id,a) values (294,86);
+insert into t (id,a) values (294,87);
+insert into t (id,a) values (294,88);
+insert into t (id,a) values (294,89);
+insert into t (id,a) values (294,90);
+insert into t (id,a) values (294,91);
+insert into t (id,a) values (294,92);
+insert into t (id,a) values (294,93);
+insert into t (id,a) values (294,94);
+insert into t (id,a) values (294,95);
+insert into t (id,a) values (294,96);
+insert into t (id,a) values (294,97);
+insert into t (id,a) values (294,98);
+insert into t (id,a) values (294,99);
+insert into t (id,a) values (295,0);
+insert into t (id,a) values (295,1);
+insert into t (id,a) values (295,2);
+insert into t (id,a) values (295,3);
+insert into t (id,a) values (295,4);
+insert into t (id,a) values (295,5);
+insert into t (id,a) values (295,6);
+insert into t (id,a) values (295,7);
+insert into t (id,a) values (295,8);
+insert into t (id,a) values (295,9);
+insert into t (id,a) values (295,10);
+insert into t (id,a) values (295,11);
+insert into t (id,a) values (295,12);
+insert into t (id,a) values (295,13);
+insert into t (id,a) values (295,14);
+insert into t (id,a) values (295,15);
+insert into t (id,a) values (295,16);
+insert into t (id,a) values (295,17);
+insert into t (id,a) values (295,18);
+insert into t (id,a) values (295,19);
+insert into t (id,a) values (295,20);
+insert into t (id,a) values (295,21);
+insert into t (id,a) values (295,22);
+insert into t (id,a) values (295,23);
+insert into t (id,a) values (295,24);
+insert into t (id,a) values (295,25);
+insert into t (id,a) values (295,26);
+insert into t (id,a) values (295,27);
+insert into t (id,a) values (295,28);
+insert into t (id,a) values (295,29);
+insert into t (id,a) values (295,30);
+insert into t (id,a) values (295,31);
+insert into t (id,a) values (295,32);
+insert into t (id,a) values (295,33);
+insert into t (id,a) values (295,34);
+insert into t (id,a) values (295,35);
+insert into t (id,a) values (295,36);
+insert into t (id,a) values (295,37);
+insert into t (id,a) values (295,38);
+insert into t (id,a) values (295,39);
+insert into t (id,a) values (295,40);
+insert into t (id,a) values (295,41);
+insert into t (id,a) values (295,42);
+insert into t (id,a) values (295,43);
+insert into t (id,a) values (295,44);
+insert into t (id,a) values (295,45);
+insert into t (id,a) values (295,46);
+insert into t (id,a) values (295,47);
+insert into t (id,a) values (295,48);
+insert into t (id,a) values (295,49);
+insert into t (id,a) values (295,50);
+insert into t (id,a) values (295,51);
+insert into t (id,a) values (295,52);
+insert into t (id,a) values (295,53);
+insert into t (id,a) values (295,54);
+insert into t (id,a) values (295,55);
+insert into t (id,a) values (295,56);
+insert into t (id,a) values (295,57);
+insert into t (id,a) values (295,58);
+insert into t (id,a) values (295,59);
+insert into t (id,a) values (295,60);
+insert into t (id,a) values (295,61);
+insert into t (id,a) values (295,62);
+insert into t (id,a) values (295,63);
+insert into t (id,a) values (295,64);
+insert into t (id,a) values (295,65);
+insert into t (id,a) values (295,66);
+insert into t (id,a) values (295,67);
+insert into t (id,a) values (295,68);
+insert into t (id,a) values (295,69);
+insert into t (id,a) values (295,70);
+insert into t (id,a) values (295,71);
+insert into t (id,a) values (295,72);
+insert into t (id,a) values (295,73);
+insert into t (id,a) values (295,74);
+insert into t (id,a) values (295,75);
+insert into t (id,a) values (295,76);
+insert into t (id,a) values (295,77);
+insert into t (id,a) values (295,78);
+insert into t (id,a) values (295,79);
+insert into t (id,a) values (295,80);
+insert into t (id,a) values (295,81);
+insert into t (id,a) values (295,82);
+insert into t (id,a) values (295,83);
+insert into t (id,a) values (295,84);
+insert into t (id,a) values (295,85);
+insert into t (id,a) values (295,86);
+insert into t (id,a) values (295,87);
+insert into t (id,a) values (295,88);
+insert into t (id,a) values (295,89);
+insert into t (id,a) values (295,90);
+insert into t (id,a) values (295,91);
+insert into t (id,a) values (295,92);
+insert into t (id,a) values (295,93);
+insert into t (id,a) values (295,94);
+insert into t (id,a) values (295,95);
+insert into t (id,a) values (295,96);
+insert into t (id,a) values (295,97);
+insert into t (id,a) values (295,98);
+insert into t (id,a) values (295,99);
+insert into t (id,a) values (296,0);
+insert into t (id,a) values (296,1);
+insert into t (id,a) values (296,2);
+insert into t (id,a) values (296,3);
+insert into t (id,a) values (296,4);
+insert into t (id,a) values (296,5);
+insert into t (id,a) values (296,6);
+insert into t (id,a) values (296,7);
+insert into t (id,a) values (296,8);
+insert into t (id,a) values (296,9);
+insert into t (id,a) values (296,10);
+insert into t (id,a) values (296,11);
+insert into t (id,a) values (296,12);
+insert into t (id,a) values (296,13);
+insert into t (id,a) values (296,14);
+insert into t (id,a) values (296,15);
+insert into t (id,a) values (296,16);
+insert into t (id,a) values (296,17);
+insert into t (id,a) values (296,18);
+insert into t (id,a) values (296,19);
+insert into t (id,a) values (296,20);
+insert into t (id,a) values (296,21);
+insert into t (id,a) values (296,22);
+insert into t (id,a) values (296,23);
+insert into t (id,a) values (296,24);
+insert into t (id,a) values (296,25);
+insert into t (id,a) values (296,26);
+insert into t (id,a) values (296,27);
+insert into t (id,a) values (296,28);
+insert into t (id,a) values (296,29);
+insert into t (id,a) values (296,30);
+insert into t (id,a) values (296,31);
+insert into t (id,a) values (296,32);
+insert into t (id,a) values (296,33);
+insert into t (id,a) values (296,34);
+insert into t (id,a) values (296,35);
+insert into t (id,a) values (296,36);
+insert into t (id,a) values (296,37);
+insert into t (id,a) values (296,38);
+insert into t (id,a) values (296,39);
+insert into t (id,a) values (296,40);
+insert into t (id,a) values (296,41);
+insert into t (id,a) values (296,42);
+insert into t (id,a) values (296,43);
+insert into t (id,a) values (296,44);
+insert into t (id,a) values (296,45);
+insert into t (id,a) values (296,46);
+insert into t (id,a) values (296,47);
+insert into t (id,a) values (296,48);
+insert into t (id,a) values (296,49);
+insert into t (id,a) values (296,50);
+insert into t (id,a) values (296,51);
+insert into t (id,a) values (296,52);
+insert into t (id,a) values (296,53);
+insert into t (id,a) values (296,54);
+insert into t (id,a) values (296,55);
+insert into t (id,a) values (296,56);
+insert into t (id,a) values (296,57);
+insert into t (id,a) values (296,58);
+insert into t (id,a) values (296,59);
+insert into t (id,a) values (296,60);
+insert into t (id,a) values (296,61);
+insert into t (id,a) values (296,62);
+insert into t (id,a) values (296,63);
+insert into t (id,a) values (296,64);
+insert into t (id,a) values (296,65);
+insert into t (id,a) values (296,66);
+insert into t (id,a) values (296,67);
+insert into t (id,a) values (296,68);
+insert into t (id,a) values (296,69);
+insert into t (id,a) values (296,70);
+insert into t (id,a) values (296,71);
+insert into t (id,a) values (296,72);
+insert into t (id,a) values (296,73);
+insert into t (id,a) values (296,74);
+insert into t (id,a) values (296,75);
+insert into t (id,a) values (296,76);
+insert into t (id,a) values (296,77);
+insert into t (id,a) values (296,78);
+insert into t (id,a) values (296,79);
+insert into t (id,a) values (296,80);
+insert into t (id,a) values (296,81);
+insert into t (id,a) values (296,82);
+insert into t (id,a) values (296,83);
+insert into t (id,a) values (296,84);
+insert into t (id,a) values (296,85);
+insert into t (id,a) values (296,86);
+insert into t (id,a) values (296,87);
+insert into t (id,a) values (296,88);
+insert into t (id,a) values (296,89);
+insert into t (id,a) values (296,90);
+insert into t (id,a) values (296,91);
+insert into t (id,a) values (296,92);
+insert into t (id,a) values (296,93);
+insert into t (id,a) values (296,94);
+insert into t (id,a) values (296,95);
+insert into t (id,a) values (296,96);
+insert into t (id,a) values (296,97);
+insert into t (id,a) values (296,98);
+insert into t (id,a) values (296,99);
+insert into t (id,a) values (297,0);
+insert into t (id,a) values (297,1);
+insert into t (id,a) values (297,2);
+insert into t (id,a) values (297,3);
+insert into t (id,a) values (297,4);
+insert into t (id,a) values (297,5);
+insert into t (id,a) values (297,6);
+insert into t (id,a) values (297,7);
+insert into t (id,a) values (297,8);
+insert into t (id,a) values (297,9);
+insert into t (id,a) values (297,10);
+insert into t (id,a) values (297,11);
+insert into t (id,a) values (297,12);
+insert into t (id,a) values (297,13);
+insert into t (id,a) values (297,14);
+insert into t (id,a) values (297,15);
+insert into t (id,a) values (297,16);
+insert into t (id,a) values (297,17);
+insert into t (id,a) values (297,18);
+insert into t (id,a) values (297,19);
+insert into t (id,a) values (297,20);
+insert into t (id,a) values (297,21);
+insert into t (id,a) values (297,22);
+insert into t (id,a) values (297,23);
+insert into t (id,a) values (297,24);
+insert into t (id,a) values (297,25);
+insert into t (id,a) values (297,26);
+insert into t (id,a) values (297,27);
+insert into t (id,a) values (297,28);
+insert into t (id,a) values (297,29);
+insert into t (id,a) values (297,30);
+insert into t (id,a) values (297,31);
+insert into t (id,a) values (297,32);
+insert into t (id,a) values (297,33);
+insert into t (id,a) values (297,34);
+insert into t (id,a) values (297,35);
+insert into t (id,a) values (297,36);
+insert into t (id,a) values (297,37);
+insert into t (id,a) values (297,38);
+insert into t (id,a) values (297,39);
+insert into t (id,a) values (297,40);
+insert into t (id,a) values (297,41);
+insert into t (id,a) values (297,42);
+insert into t (id,a) values (297,43);
+insert into t (id,a) values (297,44);
+insert into t (id,a) values (297,45);
+insert into t (id,a) values (297,46);
+insert into t (id,a) values (297,47);
+insert into t (id,a) values (297,48);
+insert into t (id,a) values (297,49);
+insert into t (id,a) values (297,50);
+insert into t (id,a) values (297,51);
+insert into t (id,a) values (297,52);
+insert into t (id,a) values (297,53);
+insert into t (id,a) values (297,54);
+insert into t (id,a) values (297,55);
+insert into t (id,a) values (297,56);
+insert into t (id,a) values (297,57);
+insert into t (id,a) values (297,58);
+insert into t (id,a) values (297,59);
+insert into t (id,a) values (297,60);
+insert into t (id,a) values (297,61);
+insert into t (id,a) values (297,62);
+insert into t (id,a) values (297,63);
+insert into t (id,a) values (297,64);
+insert into t (id,a) values (297,65);
+insert into t (id,a) values (297,66);
+insert into t (id,a) values (297,67);
+insert into t (id,a) values (297,68);
+insert into t (id,a) values (297,69);
+insert into t (id,a) values (297,70);
+insert into t (id,a) values (297,71);
+insert into t (id,a) values (297,72);
+insert into t (id,a) values (297,73);
+insert into t (id,a) values (297,74);
+insert into t (id,a) values (297,75);
+insert into t (id,a) values (297,76);
+insert into t (id,a) values (297,77);
+insert into t (id,a) values (297,78);
+insert into t (id,a) values (297,79);
+insert into t (id,a) values (297,80);
+insert into t (id,a) values (297,81);
+insert into t (id,a) values (297,82);
+insert into t (id,a) values (297,83);
+insert into t (id,a) values (297,84);
+insert into t (id,a) values (297,85);
+insert into t (id,a) values (297,86);
+insert into t (id,a) values (297,87);
+insert into t (id,a) values (297,88);
+insert into t (id,a) values (297,89);
+insert into t (id,a) values (297,90);
+insert into t (id,a) values (297,91);
+insert into t (id,a) values (297,92);
+insert into t (id,a) values (297,93);
+insert into t (id,a) values (297,94);
+insert into t (id,a) values (297,95);
+insert into t (id,a) values (297,96);
+insert into t (id,a) values (297,97);
+insert into t (id,a) values (297,98);
+insert into t (id,a) values (297,99);
+insert into t (id,a) values (298,0);
+insert into t (id,a) values (298,1);
+insert into t (id,a) values (298,2);
+insert into t (id,a) values (298,3);
+insert into t (id,a) values (298,4);
+insert into t (id,a) values (298,5);
+insert into t (id,a) values (298,6);
+insert into t (id,a) values (298,7);
+insert into t (id,a) values (298,8);
+insert into t (id,a) values (298,9);
+insert into t (id,a) values (298,10);
+insert into t (id,a) values (298,11);
+insert into t (id,a) values (298,12);
+insert into t (id,a) values (298,13);
+insert into t (id,a) values (298,14);
+insert into t (id,a) values (298,15);
+insert into t (id,a) values (298,16);
+insert into t (id,a) values (298,17);
+insert into t (id,a) values (298,18);
+insert into t (id,a) values (298,19);
+insert into t (id,a) values (298,20);
+insert into t (id,a) values (298,21);
+insert into t (id,a) values (298,22);
+insert into t (id,a) values (298,23);
+insert into t (id,a) values (298,24);
+insert into t (id,a) values (298,25);
+insert into t (id,a) values (298,26);
+insert into t (id,a) values (298,27);
+insert into t (id,a) values (298,28);
+insert into t (id,a) values (298,29);
+insert into t (id,a) values (298,30);
+insert into t (id,a) values (298,31);
+insert into t (id,a) values (298,32);
+insert into t (id,a) values (298,33);
+insert into t (id,a) values (298,34);
+insert into t (id,a) values (298,35);
+insert into t (id,a) values (298,36);
+insert into t (id,a) values (298,37);
+insert into t (id,a) values (298,38);
+insert into t (id,a) values (298,39);
+insert into t (id,a) values (298,40);
+insert into t (id,a) values (298,41);
+insert into t (id,a) values (298,42);
+insert into t (id,a) values (298,43);
+insert into t (id,a) values (298,44);
+insert into t (id,a) values (298,45);
+insert into t (id,a) values (298,46);
+insert into t (id,a) values (298,47);
+insert into t (id,a) values (298,48);
+insert into t (id,a) values (298,49);
+insert into t (id,a) values (298,50);
+insert into t (id,a) values (298,51);
+insert into t (id,a) values (298,52);
+insert into t (id,a) values (298,53);
+insert into t (id,a) values (298,54);
+insert into t (id,a) values (298,55);
+insert into t (id,a) values (298,56);
+insert into t (id,a) values (298,57);
+insert into t (id,a) values (298,58);
+insert into t (id,a) values (298,59);
+insert into t (id,a) values (298,60);
+insert into t (id,a) values (298,61);
+insert into t (id,a) values (298,62);
+insert into t (id,a) values (298,63);
+insert into t (id,a) values (298,64);
+insert into t (id,a) values (298,65);
+insert into t (id,a) values (298,66);
+insert into t (id,a) values (298,67);
+insert into t (id,a) values (298,68);
+insert into t (id,a) values (298,69);
+insert into t (id,a) values (298,70);
+insert into t (id,a) values (298,71);
+insert into t (id,a) values (298,72);
+insert into t (id,a) values (298,73);
+insert into t (id,a) values (298,74);
+insert into t (id,a) values (298,75);
+insert into t (id,a) values (298,76);
+insert into t (id,a) values (298,77);
+insert into t (id,a) values (298,78);
+insert into t (id,a) values (298,79);
+insert into t (id,a) values (298,80);
+insert into t (id,a) values (298,81);
+insert into t (id,a) values (298,82);
+insert into t (id,a) values (298,83);
+insert into t (id,a) values (298,84);
+insert into t (id,a) values (298,85);
+insert into t (id,a) values (298,86);
+insert into t (id,a) values (298,87);
+insert into t (id,a) values (298,88);
+insert into t (id,a) values (298,89);
+insert into t (id,a) values (298,90);
+insert into t (id,a) values (298,91);
+insert into t (id,a) values (298,92);
+insert into t (id,a) values (298,93);
+insert into t (id,a) values (298,94);
+insert into t (id,a) values (298,95);
+insert into t (id,a) values (298,96);
+insert into t (id,a) values (298,97);
+insert into t (id,a) values (298,98);
+insert into t (id,a) values (298,99);
+insert into t (id,a) values (299,0);
+insert into t (id,a) values (299,1);
+insert into t (id,a) values (299,2);
+insert into t (id,a) values (299,3);
+insert into t (id,a) values (299,4);
+insert into t (id,a) values (299,5);
+insert into t (id,a) values (299,6);
+insert into t (id,a) values (299,7);
+insert into t (id,a) values (299,8);
+insert into t (id,a) values (299,9);
+insert into t (id,a) values (299,10);
+insert into t (id,a) values (299,11);
+insert into t (id,a) values (299,12);
+insert into t (id,a) values (299,13);
+insert into t (id,a) values (299,14);
+insert into t (id,a) values (299,15);
+insert into t (id,a) values (299,16);
+insert into t (id,a) values (299,17);
+insert into t (id,a) values (299,18);
+insert into t (id,a) values (299,19);
+insert into t (id,a) values (299,20);
+insert into t (id,a) values (299,21);
+insert into t (id,a) values (299,22);
+insert into t (id,a) values (299,23);
+insert into t (id,a) values (299,24);
+insert into t (id,a) values (299,25);
+insert into t (id,a) values (299,26);
+insert into t (id,a) values (299,27);
+insert into t (id,a) values (299,28);
+insert into t (id,a) values (299,29);
+insert into t (id,a) values (299,30);
+insert into t (id,a) values (299,31);
+insert into t (id,a) values (299,32);
+insert into t (id,a) values (299,33);
+insert into t (id,a) values (299,34);
+insert into t (id,a) values (299,35);
+insert into t (id,a) values (299,36);
+insert into t (id,a) values (299,37);
+insert into t (id,a) values (299,38);
+insert into t (id,a) values (299,39);
+insert into t (id,a) values (299,40);
+insert into t (id,a) values (299,41);
+insert into t (id,a) values (299,42);
+insert into t (id,a) values (299,43);
+insert into t (id,a) values (299,44);
+insert into t (id,a) values (299,45);
+insert into t (id,a) values (299,46);
+insert into t (id,a) values (299,47);
+insert into t (id,a) values (299,48);
+insert into t (id,a) values (299,49);
+insert into t (id,a) values (299,50);
+insert into t (id,a) values (299,51);
+insert into t (id,a) values (299,52);
+insert into t (id,a) values (299,53);
+insert into t (id,a) values (299,54);
+insert into t (id,a) values (299,55);
+insert into t (id,a) values (299,56);
+insert into t (id,a) values (299,57);
+insert into t (id,a) values (299,58);
+insert into t (id,a) values (299,59);
+insert into t (id,a) values (299,60);
+insert into t (id,a) values (299,61);
+insert into t (id,a) values (299,62);
+insert into t (id,a) values (299,63);
+insert into t (id,a) values (299,64);
+insert into t (id,a) values (299,65);
+insert into t (id,a) values (299,66);
+insert into t (id,a) values (299,67);
+insert into t (id,a) values (299,68);
+insert into t (id,a) values (299,69);
+insert into t (id,a) values (299,70);
+insert into t (id,a) values (299,71);
+insert into t (id,a) values (299,72);
+insert into t (id,a) values (299,73);
+insert into t (id,a) values (299,74);
+insert into t (id,a) values (299,75);
+insert into t (id,a) values (299,76);
+insert into t (id,a) values (299,77);
+insert into t (id,a) values (299,78);
+insert into t (id,a) values (299,79);
+insert into t (id,a) values (299,80);
+insert into t (id,a) values (299,81);
+insert into t (id,a) values (299,82);
+insert into t (id,a) values (299,83);
+insert into t (id,a) values (299,84);
+insert into t (id,a) values (299,85);
+insert into t (id,a) values (299,86);
+insert into t (id,a) values (299,87);
+insert into t (id,a) values (299,88);
+insert into t (id,a) values (299,89);
+insert into t (id,a) values (299,90);
+insert into t (id,a) values (299,91);
+insert into t (id,a) values (299,92);
+insert into t (id,a) values (299,93);
+insert into t (id,a) values (299,94);
+insert into t (id,a) values (299,95);
+insert into t (id,a) values (299,96);
+insert into t (id,a) values (299,97);
+insert into t (id,a) values (299,98);
+insert into t (id,a) values (299,99);
+insert into t (id,a) values (300,0);
+insert into t (id,a) values (300,1);
+insert into t (id,a) values (300,2);
+insert into t (id,a) values (300,3);
+insert into t (id,a) values (300,4);
+insert into t (id,a) values (300,5);
+insert into t (id,a) values (300,6);
+insert into t (id,a) values (300,7);
+insert into t (id,a) values (300,8);
+insert into t (id,a) values (300,9);
+insert into t (id,a) values (300,10);
+insert into t (id,a) values (300,11);
+insert into t (id,a) values (300,12);
+insert into t (id,a) values (300,13);
+insert into t (id,a) values (300,14);
+insert into t (id,a) values (300,15);
+insert into t (id,a) values (300,16);
+insert into t (id,a) values (300,17);
+insert into t (id,a) values (300,18);
+insert into t (id,a) values (300,19);
+insert into t (id,a) values (300,20);
+insert into t (id,a) values (300,21);
+insert into t (id,a) values (300,22);
+insert into t (id,a) values (300,23);
+insert into t (id,a) values (300,24);
+insert into t (id,a) values (300,25);
+insert into t (id,a) values (300,26);
+insert into t (id,a) values (300,27);
+insert into t (id,a) values (300,28);
+insert into t (id,a) values (300,29);
+insert into t (id,a) values (300,30);
+insert into t (id,a) values (300,31);
+insert into t (id,a) values (300,32);
+insert into t (id,a) values (300,33);
+insert into t (id,a) values (300,34);
+insert into t (id,a) values (300,35);
+insert into t (id,a) values (300,36);
+insert into t (id,a) values (300,37);
+insert into t (id,a) values (300,38);
+insert into t (id,a) values (300,39);
+insert into t (id,a) values (300,40);
+insert into t (id,a) values (300,41);
+insert into t (id,a) values (300,42);
+insert into t (id,a) values (300,43);
+insert into t (id,a) values (300,44);
+insert into t (id,a) values (300,45);
+insert into t (id,a) values (300,46);
+insert into t (id,a) values (300,47);
+insert into t (id,a) values (300,48);
+insert into t (id,a) values (300,49);
+insert into t (id,a) values (300,50);
+insert into t (id,a) values (300,51);
+insert into t (id,a) values (300,52);
+insert into t (id,a) values (300,53);
+insert into t (id,a) values (300,54);
+insert into t (id,a) values (300,55);
+insert into t (id,a) values (300,56);
+insert into t (id,a) values (300,57);
+insert into t (id,a) values (300,58);
+insert into t (id,a) values (300,59);
+insert into t (id,a) values (300,60);
+insert into t (id,a) values (300,61);
+insert into t (id,a) values (300,62);
+insert into t (id,a) values (300,63);
+insert into t (id,a) values (300,64);
+insert into t (id,a) values (300,65);
+insert into t (id,a) values (300,66);
+insert into t (id,a) values (300,67);
+insert into t (id,a) values (300,68);
+insert into t (id,a) values (300,69);
+insert into t (id,a) values (300,70);
+insert into t (id,a) values (300,71);
+insert into t (id,a) values (300,72);
+insert into t (id,a) values (300,73);
+insert into t (id,a) values (300,74);
+insert into t (id,a) values (300,75);
+insert into t (id,a) values (300,76);
+insert into t (id,a) values (300,77);
+insert into t (id,a) values (300,78);
+insert into t (id,a) values (300,79);
+insert into t (id,a) values (300,80);
+insert into t (id,a) values (300,81);
+insert into t (id,a) values (300,82);
+insert into t (id,a) values (300,83);
+insert into t (id,a) values (300,84);
+insert into t (id,a) values (300,85);
+insert into t (id,a) values (300,86);
+insert into t (id,a) values (300,87);
+insert into t (id,a) values (300,88);
+insert into t (id,a) values (300,89);
+insert into t (id,a) values (300,90);
+insert into t (id,a) values (300,91);
+insert into t (id,a) values (300,92);
+insert into t (id,a) values (300,93);
+insert into t (id,a) values (300,94);
+insert into t (id,a) values (300,95);
+insert into t (id,a) values (300,96);
+insert into t (id,a) values (300,97);
+insert into t (id,a) values (300,98);
+insert into t (id,a) values (300,99);
+insert into t (id,a) values (301,0);
+insert into t (id,a) values (301,1);
+insert into t (id,a) values (301,2);
+insert into t (id,a) values (301,3);
+insert into t (id,a) values (301,4);
+insert into t (id,a) values (301,5);
+insert into t (id,a) values (301,6);
+insert into t (id,a) values (301,7);
+insert into t (id,a) values (301,8);
+insert into t (id,a) values (301,9);
+insert into t (id,a) values (301,10);
+insert into t (id,a) values (301,11);
+insert into t (id,a) values (301,12);
+insert into t (id,a) values (301,13);
+insert into t (id,a) values (301,14);
+insert into t (id,a) values (301,15);
+insert into t (id,a) values (301,16);
+insert into t (id,a) values (301,17);
+insert into t (id,a) values (301,18);
+insert into t (id,a) values (301,19);
+insert into t (id,a) values (301,20);
+insert into t (id,a) values (301,21);
+insert into t (id,a) values (301,22);
+insert into t (id,a) values (301,23);
+insert into t (id,a) values (301,24);
+insert into t (id,a) values (301,25);
+insert into t (id,a) values (301,26);
+insert into t (id,a) values (301,27);
+insert into t (id,a) values (301,28);
+insert into t (id,a) values (301,29);
+insert into t (id,a) values (301,30);
+insert into t (id,a) values (301,31);
+insert into t (id,a) values (301,32);
+insert into t (id,a) values (301,33);
+insert into t (id,a) values (301,34);
+insert into t (id,a) values (301,35);
+insert into t (id,a) values (301,36);
+insert into t (id,a) values (301,37);
+insert into t (id,a) values (301,38);
+insert into t (id,a) values (301,39);
+insert into t (id,a) values (301,40);
+insert into t (id,a) values (301,41);
+insert into t (id,a) values (301,42);
+insert into t (id,a) values (301,43);
+insert into t (id,a) values (301,44);
+insert into t (id,a) values (301,45);
+insert into t (id,a) values (301,46);
+insert into t (id,a) values (301,47);
+insert into t (id,a) values (301,48);
+insert into t (id,a) values (301,49);
+insert into t (id,a) values (301,50);
+insert into t (id,a) values (301,51);
+insert into t (id,a) values (301,52);
+insert into t (id,a) values (301,53);
+insert into t (id,a) values (301,54);
+insert into t (id,a) values (301,55);
+insert into t (id,a) values (301,56);
+insert into t (id,a) values (301,57);
+insert into t (id,a) values (301,58);
+insert into t (id,a) values (301,59);
+insert into t (id,a) values (301,60);
+insert into t (id,a) values (301,61);
+insert into t (id,a) values (301,62);
+insert into t (id,a) values (301,63);
+insert into t (id,a) values (301,64);
+insert into t (id,a) values (301,65);
+insert into t (id,a) values (301,66);
+insert into t (id,a) values (301,67);
+insert into t (id,a) values (301,68);
+insert into t (id,a) values (301,69);
+insert into t (id,a) values (301,70);
+insert into t (id,a) values (301,71);
+insert into t (id,a) values (301,72);
+insert into t (id,a) values (301,73);
+insert into t (id,a) values (301,74);
+insert into t (id,a) values (301,75);
+insert into t (id,a) values (301,76);
+insert into t (id,a) values (301,77);
+insert into t (id,a) values (301,78);
+insert into t (id,a) values (301,79);
+insert into t (id,a) values (301,80);
+insert into t (id,a) values (301,81);
+insert into t (id,a) values (301,82);
+insert into t (id,a) values (301,83);
+insert into t (id,a) values (301,84);
+insert into t (id,a) values (301,85);
+insert into t (id,a) values (301,86);
+insert into t (id,a) values (301,87);
+insert into t (id,a) values (301,88);
+insert into t (id,a) values (301,89);
+insert into t (id,a) values (301,90);
+insert into t (id,a) values (301,91);
+insert into t (id,a) values (301,92);
+insert into t (id,a) values (301,93);
+insert into t (id,a) values (301,94);
+insert into t (id,a) values (301,95);
+insert into t (id,a) values (301,96);
+insert into t (id,a) values (301,97);
+insert into t (id,a) values (301,98);
+insert into t (id,a) values (301,99);
+insert into t (id,a) values (302,0);
+insert into t (id,a) values (302,1);
+insert into t (id,a) values (302,2);
+insert into t (id,a) values (302,3);
+insert into t (id,a) values (302,4);
+insert into t (id,a) values (302,5);
+insert into t (id,a) values (302,6);
+insert into t (id,a) values (302,7);
+insert into t (id,a) values (302,8);
+insert into t (id,a) values (302,9);
+insert into t (id,a) values (302,10);
+insert into t (id,a) values (302,11);
+insert into t (id,a) values (302,12);
+insert into t (id,a) values (302,13);
+insert into t (id,a) values (302,14);
+insert into t (id,a) values (302,15);
+insert into t (id,a) values (302,16);
+insert into t (id,a) values (302,17);
+insert into t (id,a) values (302,18);
+insert into t (id,a) values (302,19);
+insert into t (id,a) values (302,20);
+insert into t (id,a) values (302,21);
+insert into t (id,a) values (302,22);
+insert into t (id,a) values (302,23);
+insert into t (id,a) values (302,24);
+insert into t (id,a) values (302,25);
+insert into t (id,a) values (302,26);
+insert into t (id,a) values (302,27);
+insert into t (id,a) values (302,28);
+insert into t (id,a) values (302,29);
+insert into t (id,a) values (302,30);
+insert into t (id,a) values (302,31);
+insert into t (id,a) values (302,32);
+insert into t (id,a) values (302,33);
+insert into t (id,a) values (302,34);
+insert into t (id,a) values (302,35);
+insert into t (id,a) values (302,36);
+insert into t (id,a) values (302,37);
+insert into t (id,a) values (302,38);
+insert into t (id,a) values (302,39);
+insert into t (id,a) values (302,40);
+insert into t (id,a) values (302,41);
+insert into t (id,a) values (302,42);
+insert into t (id,a) values (302,43);
+insert into t (id,a) values (302,44);
+insert into t (id,a) values (302,45);
+insert into t (id,a) values (302,46);
+insert into t (id,a) values (302,47);
+insert into t (id,a) values (302,48);
+insert into t (id,a) values (302,49);
+insert into t (id,a) values (302,50);
+insert into t (id,a) values (302,51);
+insert into t (id,a) values (302,52);
+insert into t (id,a) values (302,53);
+insert into t (id,a) values (302,54);
+insert into t (id,a) values (302,55);
+insert into t (id,a) values (302,56);
+insert into t (id,a) values (302,57);
+insert into t (id,a) values (302,58);
+insert into t (id,a) values (302,59);
+insert into t (id,a) values (302,60);
+insert into t (id,a) values (302,61);
+insert into t (id,a) values (302,62);
+insert into t (id,a) values (302,63);
+insert into t (id,a) values (302,64);
+insert into t (id,a) values (302,65);
+insert into t (id,a) values (302,66);
+insert into t (id,a) values (302,67);
+insert into t (id,a) values (302,68);
+insert into t (id,a) values (302,69);
+insert into t (id,a) values (302,70);
+insert into t (id,a) values (302,71);
+insert into t (id,a) values (302,72);
+insert into t (id,a) values (302,73);
+insert into t (id,a) values (302,74);
+insert into t (id,a) values (302,75);
+insert into t (id,a) values (302,76);
+insert into t (id,a) values (302,77);
+insert into t (id,a) values (302,78);
+insert into t (id,a) values (302,79);
+insert into t (id,a) values (302,80);
+insert into t (id,a) values (302,81);
+insert into t (id,a) values (302,82);
+insert into t (id,a) values (302,83);
+insert into t (id,a) values (302,84);
+insert into t (id,a) values (302,85);
+insert into t (id,a) values (302,86);
+insert into t (id,a) values (302,87);
+insert into t (id,a) values (302,88);
+insert into t (id,a) values (302,89);
+insert into t (id,a) values (302,90);
+insert into t (id,a) values (302,91);
+insert into t (id,a) values (302,92);
+insert into t (id,a) values (302,93);
+insert into t (id,a) values (302,94);
+insert into t (id,a) values (302,95);
+insert into t (id,a) values (302,96);
+insert into t (id,a) values (302,97);
+insert into t (id,a) values (302,98);
+insert into t (id,a) values (302,99);
+insert into t (id,a) values (303,0);
+insert into t (id,a) values (303,1);
+insert into t (id,a) values (303,2);
+insert into t (id,a) values (303,3);
+insert into t (id,a) values (303,4);
+insert into t (id,a) values (303,5);
+insert into t (id,a) values (303,6);
+insert into t (id,a) values (303,7);
+insert into t (id,a) values (303,8);
+insert into t (id,a) values (303,9);
+insert into t (id,a) values (303,10);
+insert into t (id,a) values (303,11);
+insert into t (id,a) values (303,12);
+insert into t (id,a) values (303,13);
+insert into t (id,a) values (303,14);
+insert into t (id,a) values (303,15);
+insert into t (id,a) values (303,16);
+insert into t (id,a) values (303,17);
+insert into t (id,a) values (303,18);
+insert into t (id,a) values (303,19);
+insert into t (id,a) values (303,20);
+insert into t (id,a) values (303,21);
+insert into t (id,a) values (303,22);
+insert into t (id,a) values (303,23);
+insert into t (id,a) values (303,24);
+insert into t (id,a) values (303,25);
+insert into t (id,a) values (303,26);
+insert into t (id,a) values (303,27);
+insert into t (id,a) values (303,28);
+insert into t (id,a) values (303,29);
+insert into t (id,a) values (303,30);
+insert into t (id,a) values (303,31);
+insert into t (id,a) values (303,32);
+insert into t (id,a) values (303,33);
+insert into t (id,a) values (303,34);
+insert into t (id,a) values (303,35);
+insert into t (id,a) values (303,36);
+insert into t (id,a) values (303,37);
+insert into t (id,a) values (303,38);
+insert into t (id,a) values (303,39);
+insert into t (id,a) values (303,40);
+insert into t (id,a) values (303,41);
+insert into t (id,a) values (303,42);
+insert into t (id,a) values (303,43);
+insert into t (id,a) values (303,44);
+insert into t (id,a) values (303,45);
+insert into t (id,a) values (303,46);
+insert into t (id,a) values (303,47);
+insert into t (id,a) values (303,48);
+insert into t (id,a) values (303,49);
+insert into t (id,a) values (303,50);
+insert into t (id,a) values (303,51);
+insert into t (id,a) values (303,52);
+insert into t (id,a) values (303,53);
+insert into t (id,a) values (303,54);
+insert into t (id,a) values (303,55);
+insert into t (id,a) values (303,56);
+insert into t (id,a) values (303,57);
+insert into t (id,a) values (303,58);
+insert into t (id,a) values (303,59);
+insert into t (id,a) values (303,60);
+insert into t (id,a) values (303,61);
+insert into t (id,a) values (303,62);
+insert into t (id,a) values (303,63);
+insert into t (id,a) values (303,64);
+insert into t (id,a) values (303,65);
+insert into t (id,a) values (303,66);
+insert into t (id,a) values (303,67);
+insert into t (id,a) values (303,68);
+insert into t (id,a) values (303,69);
+insert into t (id,a) values (303,70);
+insert into t (id,a) values (303,71);
+insert into t (id,a) values (303,72);
+insert into t (id,a) values (303,73);
+insert into t (id,a) values (303,74);
+insert into t (id,a) values (303,75);
+insert into t (id,a) values (303,76);
+insert into t (id,a) values (303,77);
+insert into t (id,a) values (303,78);
+insert into t (id,a) values (303,79);
+insert into t (id,a) values (303,80);
+insert into t (id,a) values (303,81);
+insert into t (id,a) values (303,82);
+insert into t (id,a) values (303,83);
+insert into t (id,a) values (303,84);
+insert into t (id,a) values (303,85);
+insert into t (id,a) values (303,86);
+insert into t (id,a) values (303,87);
+insert into t (id,a) values (303,88);
+insert into t (id,a) values (303,89);
+insert into t (id,a) values (303,90);
+insert into t (id,a) values (303,91);
+insert into t (id,a) values (303,92);
+insert into t (id,a) values (303,93);
+insert into t (id,a) values (303,94);
+insert into t (id,a) values (303,95);
+insert into t (id,a) values (303,96);
+insert into t (id,a) values (303,97);
+insert into t (id,a) values (303,98);
+insert into t (id,a) values (303,99);
+insert into t (id,a) values (304,0);
+insert into t (id,a) values (304,1);
+insert into t (id,a) values (304,2);
+insert into t (id,a) values (304,3);
+insert into t (id,a) values (304,4);
+insert into t (id,a) values (304,5);
+insert into t (id,a) values (304,6);
+insert into t (id,a) values (304,7);
+insert into t (id,a) values (304,8);
+insert into t (id,a) values (304,9);
+insert into t (id,a) values (304,10);
+insert into t (id,a) values (304,11);
+insert into t (id,a) values (304,12);
+insert into t (id,a) values (304,13);
+insert into t (id,a) values (304,14);
+insert into t (id,a) values (304,15);
+insert into t (id,a) values (304,16);
+insert into t (id,a) values (304,17);
+insert into t (id,a) values (304,18);
+insert into t (id,a) values (304,19);
+insert into t (id,a) values (304,20);
+insert into t (id,a) values (304,21);
+insert into t (id,a) values (304,22);
+insert into t (id,a) values (304,23);
+insert into t (id,a) values (304,24);
+insert into t (id,a) values (304,25);
+insert into t (id,a) values (304,26);
+insert into t (id,a) values (304,27);
+insert into t (id,a) values (304,28);
+insert into t (id,a) values (304,29);
+insert into t (id,a) values (304,30);
+insert into t (id,a) values (304,31);
+insert into t (id,a) values (304,32);
+insert into t (id,a) values (304,33);
+insert into t (id,a) values (304,34);
+insert into t (id,a) values (304,35);
+insert into t (id,a) values (304,36);
+insert into t (id,a) values (304,37);
+insert into t (id,a) values (304,38);
+insert into t (id,a) values (304,39);
+insert into t (id,a) values (304,40);
+insert into t (id,a) values (304,41);
+insert into t (id,a) values (304,42);
+insert into t (id,a) values (304,43);
+insert into t (id,a) values (304,44);
+insert into t (id,a) values (304,45);
+insert into t (id,a) values (304,46);
+insert into t (id,a) values (304,47);
+insert into t (id,a) values (304,48);
+insert into t (id,a) values (304,49);
+insert into t (id,a) values (304,50);
+insert into t (id,a) values (304,51);
+insert into t (id,a) values (304,52);
+insert into t (id,a) values (304,53);
+insert into t (id,a) values (304,54);
+insert into t (id,a) values (304,55);
+insert into t (id,a) values (304,56);
+insert into t (id,a) values (304,57);
+insert into t (id,a) values (304,58);
+insert into t (id,a) values (304,59);
+insert into t (id,a) values (304,60);
+insert into t (id,a) values (304,61);
+insert into t (id,a) values (304,62);
+insert into t (id,a) values (304,63);
+insert into t (id,a) values (304,64);
+insert into t (id,a) values (304,65);
+insert into t (id,a) values (304,66);
+insert into t (id,a) values (304,67);
+insert into t (id,a) values (304,68);
+insert into t (id,a) values (304,69);
+insert into t (id,a) values (304,70);
+insert into t (id,a) values (304,71);
+insert into t (id,a) values (304,72);
+insert into t (id,a) values (304,73);
+insert into t (id,a) values (304,74);
+insert into t (id,a) values (304,75);
+insert into t (id,a) values (304,76);
+insert into t (id,a) values (304,77);
+insert into t (id,a) values (304,78);
+insert into t (id,a) values (304,79);
+insert into t (id,a) values (304,80);
+insert into t (id,a) values (304,81);
+insert into t (id,a) values (304,82);
+insert into t (id,a) values (304,83);
+insert into t (id,a) values (304,84);
+insert into t (id,a) values (304,85);
+insert into t (id,a) values (304,86);
+insert into t (id,a) values (304,87);
+insert into t (id,a) values (304,88);
+insert into t (id,a) values (304,89);
+insert into t (id,a) values (304,90);
+insert into t (id,a) values (304,91);
+insert into t (id,a) values (304,92);
+insert into t (id,a) values (304,93);
+insert into t (id,a) values (304,94);
+insert into t (id,a) values (304,95);
+insert into t (id,a) values (304,96);
+insert into t (id,a) values (304,97);
+insert into t (id,a) values (304,98);
+insert into t (id,a) values (304,99);
+insert into t (id,a) values (305,0);
+insert into t (id,a) values (305,1);
+insert into t (id,a) values (305,2);
+insert into t (id,a) values (305,3);
+insert into t (id,a) values (305,4);
+insert into t (id,a) values (305,5);
+insert into t (id,a) values (305,6);
+insert into t (id,a) values (305,7);
+insert into t (id,a) values (305,8);
+insert into t (id,a) values (305,9);
+insert into t (id,a) values (305,10);
+insert into t (id,a) values (305,11);
+insert into t (id,a) values (305,12);
+insert into t (id,a) values (305,13);
+insert into t (id,a) values (305,14);
+insert into t (id,a) values (305,15);
+insert into t (id,a) values (305,16);
+insert into t (id,a) values (305,17);
+insert into t (id,a) values (305,18);
+insert into t (id,a) values (305,19);
+insert into t (id,a) values (305,20);
+insert into t (id,a) values (305,21);
+insert into t (id,a) values (305,22);
+insert into t (id,a) values (305,23);
+insert into t (id,a) values (305,24);
+insert into t (id,a) values (305,25);
+insert into t (id,a) values (305,26);
+insert into t (id,a) values (305,27);
+insert into t (id,a) values (305,28);
+insert into t (id,a) values (305,29);
+insert into t (id,a) values (305,30);
+insert into t (id,a) values (305,31);
+insert into t (id,a) values (305,32);
+insert into t (id,a) values (305,33);
+insert into t (id,a) values (305,34);
+insert into t (id,a) values (305,35);
+insert into t (id,a) values (305,36);
+insert into t (id,a) values (305,37);
+insert into t (id,a) values (305,38);
+insert into t (id,a) values (305,39);
+insert into t (id,a) values (305,40);
+insert into t (id,a) values (305,41);
+insert into t (id,a) values (305,42);
+insert into t (id,a) values (305,43);
+insert into t (id,a) values (305,44);
+insert into t (id,a) values (305,45);
+insert into t (id,a) values (305,46);
+insert into t (id,a) values (305,47);
+insert into t (id,a) values (305,48);
+insert into t (id,a) values (305,49);
+insert into t (id,a) values (305,50);
+insert into t (id,a) values (305,51);
+insert into t (id,a) values (305,52);
+insert into t (id,a) values (305,53);
+insert into t (id,a) values (305,54);
+insert into t (id,a) values (305,55);
+insert into t (id,a) values (305,56);
+insert into t (id,a) values (305,57);
+insert into t (id,a) values (305,58);
+insert into t (id,a) values (305,59);
+insert into t (id,a) values (305,60);
+insert into t (id,a) values (305,61);
+insert into t (id,a) values (305,62);
+insert into t (id,a) values (305,63);
+insert into t (id,a) values (305,64);
+insert into t (id,a) values (305,65);
+insert into t (id,a) values (305,66);
+insert into t (id,a) values (305,67);
+insert into t (id,a) values (305,68);
+insert into t (id,a) values (305,69);
+insert into t (id,a) values (305,70);
+insert into t (id,a) values (305,71);
+insert into t (id,a) values (305,72);
+insert into t (id,a) values (305,73);
+insert into t (id,a) values (305,74);
+insert into t (id,a) values (305,75);
+insert into t (id,a) values (305,76);
+insert into t (id,a) values (305,77);
+insert into t (id,a) values (305,78);
+insert into t (id,a) values (305,79);
+insert into t (id,a) values (305,80);
+insert into t (id,a) values (305,81);
+insert into t (id,a) values (305,82);
+insert into t (id,a) values (305,83);
+insert into t (id,a) values (305,84);
+insert into t (id,a) values (305,85);
+insert into t (id,a) values (305,86);
+insert into t (id,a) values (305,87);
+insert into t (id,a) values (305,88);
+insert into t (id,a) values (305,89);
+insert into t (id,a) values (305,90);
+insert into t (id,a) values (305,91);
+insert into t (id,a) values (305,92);
+insert into t (id,a) values (305,93);
+insert into t (id,a) values (305,94);
+insert into t (id,a) values (305,95);
+insert into t (id,a) values (305,96);
+insert into t (id,a) values (305,97);
+insert into t (id,a) values (305,98);
+insert into t (id,a) values (305,99);
+insert into t (id,a) values (306,0);
+insert into t (id,a) values (306,1);
+insert into t (id,a) values (306,2);
+insert into t (id,a) values (306,3);
+insert into t (id,a) values (306,4);
+insert into t (id,a) values (306,5);
+insert into t (id,a) values (306,6);
+insert into t (id,a) values (306,7);
+insert into t (id,a) values (306,8);
+insert into t (id,a) values (306,9);
+insert into t (id,a) values (306,10);
+insert into t (id,a) values (306,11);
+insert into t (id,a) values (306,12);
+insert into t (id,a) values (306,13);
+insert into t (id,a) values (306,14);
+insert into t (id,a) values (306,15);
+insert into t (id,a) values (306,16);
+insert into t (id,a) values (306,17);
+insert into t (id,a) values (306,18);
+insert into t (id,a) values (306,19);
+insert into t (id,a) values (306,20);
+insert into t (id,a) values (306,21);
+insert into t (id,a) values (306,22);
+insert into t (id,a) values (306,23);
+insert into t (id,a) values (306,24);
+insert into t (id,a) values (306,25);
+insert into t (id,a) values (306,26);
+insert into t (id,a) values (306,27);
+insert into t (id,a) values (306,28);
+insert into t (id,a) values (306,29);
+insert into t (id,a) values (306,30);
+insert into t (id,a) values (306,31);
+insert into t (id,a) values (306,32);
+insert into t (id,a) values (306,33);
+insert into t (id,a) values (306,34);
+insert into t (id,a) values (306,35);
+insert into t (id,a) values (306,36);
+insert into t (id,a) values (306,37);
+insert into t (id,a) values (306,38);
+insert into t (id,a) values (306,39);
+insert into t (id,a) values (306,40);
+insert into t (id,a) values (306,41);
+insert into t (id,a) values (306,42);
+insert into t (id,a) values (306,43);
+insert into t (id,a) values (306,44);
+insert into t (id,a) values (306,45);
+insert into t (id,a) values (306,46);
+insert into t (id,a) values (306,47);
+insert into t (id,a) values (306,48);
+insert into t (id,a) values (306,49);
+insert into t (id,a) values (306,50);
+insert into t (id,a) values (306,51);
+insert into t (id,a) values (306,52);
+insert into t (id,a) values (306,53);
+insert into t (id,a) values (306,54);
+insert into t (id,a) values (306,55);
+insert into t (id,a) values (306,56);
+insert into t (id,a) values (306,57);
+insert into t (id,a) values (306,58);
+insert into t (id,a) values (306,59);
+insert into t (id,a) values (306,60);
+insert into t (id,a) values (306,61);
+insert into t (id,a) values (306,62);
+insert into t (id,a) values (306,63);
+insert into t (id,a) values (306,64);
+insert into t (id,a) values (306,65);
+insert into t (id,a) values (306,66);
+insert into t (id,a) values (306,67);
+insert into t (id,a) values (306,68);
+insert into t (id,a) values (306,69);
+insert into t (id,a) values (306,70);
+insert into t (id,a) values (306,71);
+insert into t (id,a) values (306,72);
+insert into t (id,a) values (306,73);
+insert into t (id,a) values (306,74);
+insert into t (id,a) values (306,75);
+insert into t (id,a) values (306,76);
+insert into t (id,a) values (306,77);
+insert into t (id,a) values (306,78);
+insert into t (id,a) values (306,79);
+insert into t (id,a) values (306,80);
+insert into t (id,a) values (306,81);
+insert into t (id,a) values (306,82);
+insert into t (id,a) values (306,83);
+insert into t (id,a) values (306,84);
+insert into t (id,a) values (306,85);
+insert into t (id,a) values (306,86);
+insert into t (id,a) values (306,87);
+insert into t (id,a) values (306,88);
+insert into t (id,a) values (306,89);
+insert into t (id,a) values (306,90);
+insert into t (id,a) values (306,91);
+insert into t (id,a) values (306,92);
+insert into t (id,a) values (306,93);
+insert into t (id,a) values (306,94);
+insert into t (id,a) values (306,95);
+insert into t (id,a) values (306,96);
+insert into t (id,a) values (306,97);
+insert into t (id,a) values (306,98);
+insert into t (id,a) values (306,99);
+insert into t (id,a) values (307,0);
+insert into t (id,a) values (307,1);
+insert into t (id,a) values (307,2);
+insert into t (id,a) values (307,3);
+insert into t (id,a) values (307,4);
+insert into t (id,a) values (307,5);
+insert into t (id,a) values (307,6);
+insert into t (id,a) values (307,7);
+insert into t (id,a) values (307,8);
+insert into t (id,a) values (307,9);
+insert into t (id,a) values (307,10);
+insert into t (id,a) values (307,11);
+insert into t (id,a) values (307,12);
+insert into t (id,a) values (307,13);
+insert into t (id,a) values (307,14);
+insert into t (id,a) values (307,15);
+insert into t (id,a) values (307,16);
+insert into t (id,a) values (307,17);
+insert into t (id,a) values (307,18);
+insert into t (id,a) values (307,19);
+insert into t (id,a) values (307,20);
+insert into t (id,a) values (307,21);
+insert into t (id,a) values (307,22);
+insert into t (id,a) values (307,23);
+insert into t (id,a) values (307,24);
+insert into t (id,a) values (307,25);
+insert into t (id,a) values (307,26);
+insert into t (id,a) values (307,27);
+insert into t (id,a) values (307,28);
+insert into t (id,a) values (307,29);
+insert into t (id,a) values (307,30);
+insert into t (id,a) values (307,31);
+insert into t (id,a) values (307,32);
+insert into t (id,a) values (307,33);
+insert into t (id,a) values (307,34);
+insert into t (id,a) values (307,35);
+insert into t (id,a) values (307,36);
+insert into t (id,a) values (307,37);
+insert into t (id,a) values (307,38);
+insert into t (id,a) values (307,39);
+insert into t (id,a) values (307,40);
+insert into t (id,a) values (307,41);
+insert into t (id,a) values (307,42);
+insert into t (id,a) values (307,43);
+insert into t (id,a) values (307,44);
+insert into t (id,a) values (307,45);
+insert into t (id,a) values (307,46);
+insert into t (id,a) values (307,47);
+insert into t (id,a) values (307,48);
+insert into t (id,a) values (307,49);
+insert into t (id,a) values (307,50);
+insert into t (id,a) values (307,51);
+insert into t (id,a) values (307,52);
+insert into t (id,a) values (307,53);
+insert into t (id,a) values (307,54);
+insert into t (id,a) values (307,55);
+insert into t (id,a) values (307,56);
+insert into t (id,a) values (307,57);
+insert into t (id,a) values (307,58);
+insert into t (id,a) values (307,59);
+insert into t (id,a) values (307,60);
+insert into t (id,a) values (307,61);
+insert into t (id,a) values (307,62);
+insert into t (id,a) values (307,63);
+insert into t (id,a) values (307,64);
+insert into t (id,a) values (307,65);
+insert into t (id,a) values (307,66);
+insert into t (id,a) values (307,67);
+insert into t (id,a) values (307,68);
+insert into t (id,a) values (307,69);
+insert into t (id,a) values (307,70);
+insert into t (id,a) values (307,71);
+insert into t (id,a) values (307,72);
+insert into t (id,a) values (307,73);
+insert into t (id,a) values (307,74);
+insert into t (id,a) values (307,75);
+insert into t (id,a) values (307,76);
+insert into t (id,a) values (307,77);
+insert into t (id,a) values (307,78);
+insert into t (id,a) values (307,79);
+insert into t (id,a) values (307,80);
+insert into t (id,a) values (307,81);
+insert into t (id,a) values (307,82);
+insert into t (id,a) values (307,83);
+insert into t (id,a) values (307,84);
+insert into t (id,a) values (307,85);
+insert into t (id,a) values (307,86);
+insert into t (id,a) values (307,87);
+insert into t (id,a) values (307,88);
+insert into t (id,a) values (307,89);
+insert into t (id,a) values (307,90);
+insert into t (id,a) values (307,91);
+insert into t (id,a) values (307,92);
+insert into t (id,a) values (307,93);
+insert into t (id,a) values (307,94);
+insert into t (id,a) values (307,95);
+insert into t (id,a) values (307,96);
+insert into t (id,a) values (307,97);
+insert into t (id,a) values (307,98);
+insert into t (id,a) values (307,99);
+insert into t (id,a) values (308,0);
+insert into t (id,a) values (308,1);
+insert into t (id,a) values (308,2);
+insert into t (id,a) values (308,3);
+insert into t (id,a) values (308,4);
+insert into t (id,a) values (308,5);
+insert into t (id,a) values (308,6);
+insert into t (id,a) values (308,7);
+insert into t (id,a) values (308,8);
+insert into t (id,a) values (308,9);
+insert into t (id,a) values (308,10);
+insert into t (id,a) values (308,11);
+insert into t (id,a) values (308,12);
+insert into t (id,a) values (308,13);
+insert into t (id,a) values (308,14);
+insert into t (id,a) values (308,15);
+insert into t (id,a) values (308,16);
+insert into t (id,a) values (308,17);
+insert into t (id,a) values (308,18);
+insert into t (id,a) values (308,19);
+insert into t (id,a) values (308,20);
+insert into t (id,a) values (308,21);
+insert into t (id,a) values (308,22);
+insert into t (id,a) values (308,23);
+insert into t (id,a) values (308,24);
+insert into t (id,a) values (308,25);
+insert into t (id,a) values (308,26);
+insert into t (id,a) values (308,27);
+insert into t (id,a) values (308,28);
+insert into t (id,a) values (308,29);
+insert into t (id,a) values (308,30);
+insert into t (id,a) values (308,31);
+insert into t (id,a) values (308,32);
+insert into t (id,a) values (308,33);
+insert into t (id,a) values (308,34);
+insert into t (id,a) values (308,35);
+insert into t (id,a) values (308,36);
+insert into t (id,a) values (308,37);
+insert into t (id,a) values (308,38);
+insert into t (id,a) values (308,39);
+insert into t (id,a) values (308,40);
+insert into t (id,a) values (308,41);
+insert into t (id,a) values (308,42);
+insert into t (id,a) values (308,43);
+insert into t (id,a) values (308,44);
+insert into t (id,a) values (308,45);
+insert into t (id,a) values (308,46);
+insert into t (id,a) values (308,47);
+insert into t (id,a) values (308,48);
+insert into t (id,a) values (308,49);
+insert into t (id,a) values (308,50);
+insert into t (id,a) values (308,51);
+insert into t (id,a) values (308,52);
+insert into t (id,a) values (308,53);
+insert into t (id,a) values (308,54);
+insert into t (id,a) values (308,55);
+insert into t (id,a) values (308,56);
+insert into t (id,a) values (308,57);
+insert into t (id,a) values (308,58);
+insert into t (id,a) values (308,59);
+insert into t (id,a) values (308,60);
+insert into t (id,a) values (308,61);
+insert into t (id,a) values (308,62);
+insert into t (id,a) values (308,63);
+insert into t (id,a) values (308,64);
+insert into t (id,a) values (308,65);
+insert into t (id,a) values (308,66);
+insert into t (id,a) values (308,67);
+insert into t (id,a) values (308,68);
+insert into t (id,a) values (308,69);
+insert into t (id,a) values (308,70);
+insert into t (id,a) values (308,71);
+insert into t (id,a) values (308,72);
+insert into t (id,a) values (308,73);
+insert into t (id,a) values (308,74);
+insert into t (id,a) values (308,75);
+insert into t (id,a) values (308,76);
+insert into t (id,a) values (308,77);
+insert into t (id,a) values (308,78);
+insert into t (id,a) values (308,79);
+insert into t (id,a) values (308,80);
+insert into t (id,a) values (308,81);
+insert into t (id,a) values (308,82);
+insert into t (id,a) values (308,83);
+insert into t (id,a) values (308,84);
+insert into t (id,a) values (308,85);
+insert into t (id,a) values (308,86);
+insert into t (id,a) values (308,87);
+insert into t (id,a) values (308,88);
+insert into t (id,a) values (308,89);
+insert into t (id,a) values (308,90);
+insert into t (id,a) values (308,91);
+insert into t (id,a) values (308,92);
+insert into t (id,a) values (308,93);
+insert into t (id,a) values (308,94);
+insert into t (id,a) values (308,95);
+insert into t (id,a) values (308,96);
+insert into t (id,a) values (308,97);
+insert into t (id,a) values (308,98);
+insert into t (id,a) values (308,99);
+insert into t (id,a) values (309,0);
+insert into t (id,a) values (309,1);
+insert into t (id,a) values (309,2);
+insert into t (id,a) values (309,3);
+insert into t (id,a) values (309,4);
+insert into t (id,a) values (309,5);
+insert into t (id,a) values (309,6);
+insert into t (id,a) values (309,7);
+insert into t (id,a) values (309,8);
+insert into t (id,a) values (309,9);
+insert into t (id,a) values (309,10);
+insert into t (id,a) values (309,11);
+insert into t (id,a) values (309,12);
+insert into t (id,a) values (309,13);
+insert into t (id,a) values (309,14);
+insert into t (id,a) values (309,15);
+insert into t (id,a) values (309,16);
+insert into t (id,a) values (309,17);
+insert into t (id,a) values (309,18);
+insert into t (id,a) values (309,19);
+insert into t (id,a) values (309,20);
+insert into t (id,a) values (309,21);
+insert into t (id,a) values (309,22);
+insert into t (id,a) values (309,23);
+insert into t (id,a) values (309,24);
+insert into t (id,a) values (309,25);
+insert into t (id,a) values (309,26);
+insert into t (id,a) values (309,27);
+insert into t (id,a) values (309,28);
+insert into t (id,a) values (309,29);
+insert into t (id,a) values (309,30);
+insert into t (id,a) values (309,31);
+insert into t (id,a) values (309,32);
+insert into t (id,a) values (309,33);
+insert into t (id,a) values (309,34);
+insert into t (id,a) values (309,35);
+insert into t (id,a) values (309,36);
+insert into t (id,a) values (309,37);
+insert into t (id,a) values (309,38);
+insert into t (id,a) values (309,39);
+insert into t (id,a) values (309,40);
+insert into t (id,a) values (309,41);
+insert into t (id,a) values (309,42);
+insert into t (id,a) values (309,43);
+insert into t (id,a) values (309,44);
+insert into t (id,a) values (309,45);
+insert into t (id,a) values (309,46);
+insert into t (id,a) values (309,47);
+insert into t (id,a) values (309,48);
+insert into t (id,a) values (309,49);
+insert into t (id,a) values (309,50);
+insert into t (id,a) values (309,51);
+insert into t (id,a) values (309,52);
+insert into t (id,a) values (309,53);
+insert into t (id,a) values (309,54);
+insert into t (id,a) values (309,55);
+insert into t (id,a) values (309,56);
+insert into t (id,a) values (309,57);
+insert into t (id,a) values (309,58);
+insert into t (id,a) values (309,59);
+insert into t (id,a) values (309,60);
+insert into t (id,a) values (309,61);
+insert into t (id,a) values (309,62);
+insert into t (id,a) values (309,63);
+insert into t (id,a) values (309,64);
+insert into t (id,a) values (309,65);
+insert into t (id,a) values (309,66);
+insert into t (id,a) values (309,67);
+insert into t (id,a) values (309,68);
+insert into t (id,a) values (309,69);
+insert into t (id,a) values (309,70);
+insert into t (id,a) values (309,71);
+insert into t (id,a) values (309,72);
+insert into t (id,a) values (309,73);
+insert into t (id,a) values (309,74);
+insert into t (id,a) values (309,75);
+insert into t (id,a) values (309,76);
+insert into t (id,a) values (309,77);
+insert into t (id,a) values (309,78);
+insert into t (id,a) values (309,79);
+insert into t (id,a) values (309,80);
+insert into t (id,a) values (309,81);
+insert into t (id,a) values (309,82);
+insert into t (id,a) values (309,83);
+insert into t (id,a) values (309,84);
+insert into t (id,a) values (309,85);
+insert into t (id,a) values (309,86);
+insert into t (id,a) values (309,87);
+insert into t (id,a) values (309,88);
+insert into t (id,a) values (309,89);
+insert into t (id,a) values (309,90);
+insert into t (id,a) values (309,91);
+insert into t (id,a) values (309,92);
+insert into t (id,a) values (309,93);
+insert into t (id,a) values (309,94);
+insert into t (id,a) values (309,95);
+insert into t (id,a) values (309,96);
+insert into t (id,a) values (309,97);
+insert into t (id,a) values (309,98);
+insert into t (id,a) values (309,99);
+insert into t (id,a) values (310,0);
+insert into t (id,a) values (310,1);
+insert into t (id,a) values (310,2);
+insert into t (id,a) values (310,3);
+insert into t (id,a) values (310,4);
+insert into t (id,a) values (310,5);
+insert into t (id,a) values (310,6);
+insert into t (id,a) values (310,7);
+insert into t (id,a) values (310,8);
+insert into t (id,a) values (310,9);
+insert into t (id,a) values (310,10);
+insert into t (id,a) values (310,11);
+insert into t (id,a) values (310,12);
+insert into t (id,a) values (310,13);
+insert into t (id,a) values (310,14);
+insert into t (id,a) values (310,15);
+insert into t (id,a) values (310,16);
+insert into t (id,a) values (310,17);
+insert into t (id,a) values (310,18);
+insert into t (id,a) values (310,19);
+insert into t (id,a) values (310,20);
+insert into t (id,a) values (310,21);
+insert into t (id,a) values (310,22);
+insert into t (id,a) values (310,23);
+insert into t (id,a) values (310,24);
+insert into t (id,a) values (310,25);
+insert into t (id,a) values (310,26);
+insert into t (id,a) values (310,27);
+insert into t (id,a) values (310,28);
+insert into t (id,a) values (310,29);
+insert into t (id,a) values (310,30);
+insert into t (id,a) values (310,31);
+insert into t (id,a) values (310,32);
+insert into t (id,a) values (310,33);
+insert into t (id,a) values (310,34);
+insert into t (id,a) values (310,35);
+insert into t (id,a) values (310,36);
+insert into t (id,a) values (310,37);
+insert into t (id,a) values (310,38);
+insert into t (id,a) values (310,39);
+insert into t (id,a) values (310,40);
+insert into t (id,a) values (310,41);
+insert into t (id,a) values (310,42);
+insert into t (id,a) values (310,43);
+insert into t (id,a) values (310,44);
+insert into t (id,a) values (310,45);
+insert into t (id,a) values (310,46);
+insert into t (id,a) values (310,47);
+insert into t (id,a) values (310,48);
+insert into t (id,a) values (310,49);
+insert into t (id,a) values (310,50);
+insert into t (id,a) values (310,51);
+insert into t (id,a) values (310,52);
+insert into t (id,a) values (310,53);
+insert into t (id,a) values (310,54);
+insert into t (id,a) values (310,55);
+insert into t (id,a) values (310,56);
+insert into t (id,a) values (310,57);
+insert into t (id,a) values (310,58);
+insert into t (id,a) values (310,59);
+insert into t (id,a) values (310,60);
+insert into t (id,a) values (310,61);
+insert into t (id,a) values (310,62);
+insert into t (id,a) values (310,63);
+insert into t (id,a) values (310,64);
+insert into t (id,a) values (310,65);
+insert into t (id,a) values (310,66);
+insert into t (id,a) values (310,67);
+insert into t (id,a) values (310,68);
+insert into t (id,a) values (310,69);
+insert into t (id,a) values (310,70);
+insert into t (id,a) values (310,71);
+insert into t (id,a) values (310,72);
+insert into t (id,a) values (310,73);
+insert into t (id,a) values (310,74);
+insert into t (id,a) values (310,75);
+insert into t (id,a) values (310,76);
+insert into t (id,a) values (310,77);
+insert into t (id,a) values (310,78);
+insert into t (id,a) values (310,79);
+insert into t (id,a) values (310,80);
+insert into t (id,a) values (310,81);
+insert into t (id,a) values (310,82);
+insert into t (id,a) values (310,83);
+insert into t (id,a) values (310,84);
+insert into t (id,a) values (310,85);
+insert into t (id,a) values (310,86);
+insert into t (id,a) values (310,87);
+insert into t (id,a) values (310,88);
+insert into t (id,a) values (310,89);
+insert into t (id,a) values (310,90);
+insert into t (id,a) values (310,91);
+insert into t (id,a) values (310,92);
+insert into t (id,a) values (310,93);
+insert into t (id,a) values (310,94);
+insert into t (id,a) values (310,95);
+insert into t (id,a) values (310,96);
+insert into t (id,a) values (310,97);
+insert into t (id,a) values (310,98);
+insert into t (id,a) values (310,99);
+insert into t (id,a) values (311,0);
+insert into t (id,a) values (311,1);
+insert into t (id,a) values (311,2);
+insert into t (id,a) values (311,3);
+insert into t (id,a) values (311,4);
+insert into t (id,a) values (311,5);
+insert into t (id,a) values (311,6);
+insert into t (id,a) values (311,7);
+insert into t (id,a) values (311,8);
+insert into t (id,a) values (311,9);
+insert into t (id,a) values (311,10);
+insert into t (id,a) values (311,11);
+insert into t (id,a) values (311,12);
+insert into t (id,a) values (311,13);
+insert into t (id,a) values (311,14);
+insert into t (id,a) values (311,15);
+insert into t (id,a) values (311,16);
+insert into t (id,a) values (311,17);
+insert into t (id,a) values (311,18);
+insert into t (id,a) values (311,19);
+insert into t (id,a) values (311,20);
+insert into t (id,a) values (311,21);
+insert into t (id,a) values (311,22);
+insert into t (id,a) values (311,23);
+insert into t (id,a) values (311,24);
+insert into t (id,a) values (311,25);
+insert into t (id,a) values (311,26);
+insert into t (id,a) values (311,27);
+insert into t (id,a) values (311,28);
+insert into t (id,a) values (311,29);
+insert into t (id,a) values (311,30);
+insert into t (id,a) values (311,31);
+insert into t (id,a) values (311,32);
+insert into t (id,a) values (311,33);
+insert into t (id,a) values (311,34);
+insert into t (id,a) values (311,35);
+insert into t (id,a) values (311,36);
+insert into t (id,a) values (311,37);
+insert into t (id,a) values (311,38);
+insert into t (id,a) values (311,39);
+insert into t (id,a) values (311,40);
+insert into t (id,a) values (311,41);
+insert into t (id,a) values (311,42);
+insert into t (id,a) values (311,43);
+insert into t (id,a) values (311,44);
+insert into t (id,a) values (311,45);
+insert into t (id,a) values (311,46);
+insert into t (id,a) values (311,47);
+insert into t (id,a) values (311,48);
+insert into t (id,a) values (311,49);
+insert into t (id,a) values (311,50);
+insert into t (id,a) values (311,51);
+insert into t (id,a) values (311,52);
+insert into t (id,a) values (311,53);
+insert into t (id,a) values (311,54);
+insert into t (id,a) values (311,55);
+insert into t (id,a) values (311,56);
+insert into t (id,a) values (311,57);
+insert into t (id,a) values (311,58);
+insert into t (id,a) values (311,59);
+insert into t (id,a) values (311,60);
+insert into t (id,a) values (311,61);
+insert into t (id,a) values (311,62);
+insert into t (id,a) values (311,63);
+insert into t (id,a) values (311,64);
+insert into t (id,a) values (311,65);
+insert into t (id,a) values (311,66);
+insert into t (id,a) values (311,67);
+insert into t (id,a) values (311,68);
+insert into t (id,a) values (311,69);
+insert into t (id,a) values (311,70);
+insert into t (id,a) values (311,71);
+insert into t (id,a) values (311,72);
+insert into t (id,a) values (311,73);
+insert into t (id,a) values (311,74);
+insert into t (id,a) values (311,75);
+insert into t (id,a) values (311,76);
+insert into t (id,a) values (311,77);
+insert into t (id,a) values (311,78);
+insert into t (id,a) values (311,79);
+insert into t (id,a) values (311,80);
+insert into t (id,a) values (311,81);
+insert into t (id,a) values (311,82);
+insert into t (id,a) values (311,83);
+insert into t (id,a) values (311,84);
+insert into t (id,a) values (311,85);
+insert into t (id,a) values (311,86);
+insert into t (id,a) values (311,87);
+insert into t (id,a) values (311,88);
+insert into t (id,a) values (311,89);
+insert into t (id,a) values (311,90);
+insert into t (id,a) values (311,91);
+insert into t (id,a) values (311,92);
+insert into t (id,a) values (311,93);
+insert into t (id,a) values (311,94);
+insert into t (id,a) values (311,95);
+insert into t (id,a) values (311,96);
+insert into t (id,a) values (311,97);
+insert into t (id,a) values (311,98);
+insert into t (id,a) values (311,99);
+insert into t (id,a) values (312,0);
+insert into t (id,a) values (312,1);
+insert into t (id,a) values (312,2);
+insert into t (id,a) values (312,3);
+insert into t (id,a) values (312,4);
+insert into t (id,a) values (312,5);
+insert into t (id,a) values (312,6);
+insert into t (id,a) values (312,7);
+insert into t (id,a) values (312,8);
+insert into t (id,a) values (312,9);
+insert into t (id,a) values (312,10);
+insert into t (id,a) values (312,11);
+insert into t (id,a) values (312,12);
+insert into t (id,a) values (312,13);
+insert into t (id,a) values (312,14);
+insert into t (id,a) values (312,15);
+insert into t (id,a) values (312,16);
+insert into t (id,a) values (312,17);
+insert into t (id,a) values (312,18);
+insert into t (id,a) values (312,19);
+insert into t (id,a) values (312,20);
+insert into t (id,a) values (312,21);
+insert into t (id,a) values (312,22);
+insert into t (id,a) values (312,23);
+insert into t (id,a) values (312,24);
+insert into t (id,a) values (312,25);
+insert into t (id,a) values (312,26);
+insert into t (id,a) values (312,27);
+insert into t (id,a) values (312,28);
+insert into t (id,a) values (312,29);
+insert into t (id,a) values (312,30);
+insert into t (id,a) values (312,31);
+insert into t (id,a) values (312,32);
+insert into t (id,a) values (312,33);
+insert into t (id,a) values (312,34);
+insert into t (id,a) values (312,35);
+insert into t (id,a) values (312,36);
+insert into t (id,a) values (312,37);
+insert into t (id,a) values (312,38);
+insert into t (id,a) values (312,39);
+insert into t (id,a) values (312,40);
+insert into t (id,a) values (312,41);
+insert into t (id,a) values (312,42);
+insert into t (id,a) values (312,43);
+insert into t (id,a) values (312,44);
+insert into t (id,a) values (312,45);
+insert into t (id,a) values (312,46);
+insert into t (id,a) values (312,47);
+insert into t (id,a) values (312,48);
+insert into t (id,a) values (312,49);
+insert into t (id,a) values (312,50);
+insert into t (id,a) values (312,51);
+insert into t (id,a) values (312,52);
+insert into t (id,a) values (312,53);
+insert into t (id,a) values (312,54);
+insert into t (id,a) values (312,55);
+insert into t (id,a) values (312,56);
+insert into t (id,a) values (312,57);
+insert into t (id,a) values (312,58);
+insert into t (id,a) values (312,59);
+insert into t (id,a) values (312,60);
+insert into t (id,a) values (312,61);
+insert into t (id,a) values (312,62);
+insert into t (id,a) values (312,63);
+insert into t (id,a) values (312,64);
+insert into t (id,a) values (312,65);
+insert into t (id,a) values (312,66);
+insert into t (id,a) values (312,67);
+insert into t (id,a) values (312,68);
+insert into t (id,a) values (312,69);
+insert into t (id,a) values (312,70);
+insert into t (id,a) values (312,71);
+insert into t (id,a) values (312,72);
+insert into t (id,a) values (312,73);
+insert into t (id,a) values (312,74);
+insert into t (id,a) values (312,75);
+insert into t (id,a) values (312,76);
+insert into t (id,a) values (312,77);
+insert into t (id,a) values (312,78);
+insert into t (id,a) values (312,79);
+insert into t (id,a) values (312,80);
+insert into t (id,a) values (312,81);
+insert into t (id,a) values (312,82);
+insert into t (id,a) values (312,83);
+insert into t (id,a) values (312,84);
+insert into t (id,a) values (312,85);
+insert into t (id,a) values (312,86);
+insert into t (id,a) values (312,87);
+insert into t (id,a) values (312,88);
+insert into t (id,a) values (312,89);
+insert into t (id,a) values (312,90);
+insert into t (id,a) values (312,91);
+insert into t (id,a) values (312,92);
+insert into t (id,a) values (312,93);
+insert into t (id,a) values (312,94);
+insert into t (id,a) values (312,95);
+insert into t (id,a) values (312,96);
+insert into t (id,a) values (312,97);
+insert into t (id,a) values (312,98);
+insert into t (id,a) values (312,99);
+insert into t (id,a) values (313,0);
+insert into t (id,a) values (313,1);
+insert into t (id,a) values (313,2);
+insert into t (id,a) values (313,3);
+insert into t (id,a) values (313,4);
+insert into t (id,a) values (313,5);
+insert into t (id,a) values (313,6);
+insert into t (id,a) values (313,7);
+insert into t (id,a) values (313,8);
+insert into t (id,a) values (313,9);
+insert into t (id,a) values (313,10);
+insert into t (id,a) values (313,11);
+insert into t (id,a) values (313,12);
+insert into t (id,a) values (313,13);
+insert into t (id,a) values (313,14);
+insert into t (id,a) values (313,15);
+insert into t (id,a) values (313,16);
+insert into t (id,a) values (313,17);
+insert into t (id,a) values (313,18);
+insert into t (id,a) values (313,19);
+insert into t (id,a) values (313,20);
+insert into t (id,a) values (313,21);
+insert into t (id,a) values (313,22);
+insert into t (id,a) values (313,23);
+insert into t (id,a) values (313,24);
+insert into t (id,a) values (313,25);
+insert into t (id,a) values (313,26);
+insert into t (id,a) values (313,27);
+insert into t (id,a) values (313,28);
+insert into t (id,a) values (313,29);
+insert into t (id,a) values (313,30);
+insert into t (id,a) values (313,31);
+insert into t (id,a) values (313,32);
+insert into t (id,a) values (313,33);
+insert into t (id,a) values (313,34);
+insert into t (id,a) values (313,35);
+insert into t (id,a) values (313,36);
+insert into t (id,a) values (313,37);
+insert into t (id,a) values (313,38);
+insert into t (id,a) values (313,39);
+insert into t (id,a) values (313,40);
+insert into t (id,a) values (313,41);
+insert into t (id,a) values (313,42);
+insert into t (id,a) values (313,43);
+insert into t (id,a) values (313,44);
+insert into t (id,a) values (313,45);
+insert into t (id,a) values (313,46);
+insert into t (id,a) values (313,47);
+insert into t (id,a) values (313,48);
+insert into t (id,a) values (313,49);
+insert into t (id,a) values (313,50);
+insert into t (id,a) values (313,51);
+insert into t (id,a) values (313,52);
+insert into t (id,a) values (313,53);
+insert into t (id,a) values (313,54);
+insert into t (id,a) values (313,55);
+insert into t (id,a) values (313,56);
+insert into t (id,a) values (313,57);
+insert into t (id,a) values (313,58);
+insert into t (id,a) values (313,59);
+insert into t (id,a) values (313,60);
+insert into t (id,a) values (313,61);
+insert into t (id,a) values (313,62);
+insert into t (id,a) values (313,63);
+insert into t (id,a) values (313,64);
+insert into t (id,a) values (313,65);
+insert into t (id,a) values (313,66);
+insert into t (id,a) values (313,67);
+insert into t (id,a) values (313,68);
+insert into t (id,a) values (313,69);
+insert into t (id,a) values (313,70);
+insert into t (id,a) values (313,71);
+insert into t (id,a) values (313,72);
+insert into t (id,a) values (313,73);
+insert into t (id,a) values (313,74);
+insert into t (id,a) values (313,75);
+insert into t (id,a) values (313,76);
+insert into t (id,a) values (313,77);
+insert into t (id,a) values (313,78);
+insert into t (id,a) values (313,79);
+insert into t (id,a) values (313,80);
+insert into t (id,a) values (313,81);
+insert into t (id,a) values (313,82);
+insert into t (id,a) values (313,83);
+insert into t (id,a) values (313,84);
+insert into t (id,a) values (313,85);
+insert into t (id,a) values (313,86);
+insert into t (id,a) values (313,87);
+insert into t (id,a) values (313,88);
+insert into t (id,a) values (313,89);
+insert into t (id,a) values (313,90);
+insert into t (id,a) values (313,91);
+insert into t (id,a) values (313,92);
+insert into t (id,a) values (313,93);
+insert into t (id,a) values (313,94);
+insert into t (id,a) values (313,95);
+insert into t (id,a) values (313,96);
+insert into t (id,a) values (313,97);
+insert into t (id,a) values (313,98);
+insert into t (id,a) values (313,99);
+insert into t (id,a) values (314,0);
+insert into t (id,a) values (314,1);
+insert into t (id,a) values (314,2);
+insert into t (id,a) values (314,3);
+insert into t (id,a) values (314,4);
+insert into t (id,a) values (314,5);
+insert into t (id,a) values (314,6);
+insert into t (id,a) values (314,7);
+insert into t (id,a) values (314,8);
+insert into t (id,a) values (314,9);
+insert into t (id,a) values (314,10);
+insert into t (id,a) values (314,11);
+insert into t (id,a) values (314,12);
+insert into t (id,a) values (314,13);
+insert into t (id,a) values (314,14);
+insert into t (id,a) values (314,15);
+insert into t (id,a) values (314,16);
+insert into t (id,a) values (314,17);
+insert into t (id,a) values (314,18);
+insert into t (id,a) values (314,19);
+insert into t (id,a) values (314,20);
+insert into t (id,a) values (314,21);
+insert into t (id,a) values (314,22);
+insert into t (id,a) values (314,23);
+insert into t (id,a) values (314,24);
+insert into t (id,a) values (314,25);
+insert into t (id,a) values (314,26);
+insert into t (id,a) values (314,27);
+insert into t (id,a) values (314,28);
+insert into t (id,a) values (314,29);
+insert into t (id,a) values (314,30);
+insert into t (id,a) values (314,31);
+insert into t (id,a) values (314,32);
+insert into t (id,a) values (314,33);
+insert into t (id,a) values (314,34);
+insert into t (id,a) values (314,35);
+insert into t (id,a) values (314,36);
+insert into t (id,a) values (314,37);
+insert into t (id,a) values (314,38);
+insert into t (id,a) values (314,39);
+insert into t (id,a) values (314,40);
+insert into t (id,a) values (314,41);
+insert into t (id,a) values (314,42);
+insert into t (id,a) values (314,43);
+insert into t (id,a) values (314,44);
+insert into t (id,a) values (314,45);
+insert into t (id,a) values (314,46);
+insert into t (id,a) values (314,47);
+insert into t (id,a) values (314,48);
+insert into t (id,a) values (314,49);
+insert into t (id,a) values (314,50);
+insert into t (id,a) values (314,51);
+insert into t (id,a) values (314,52);
+insert into t (id,a) values (314,53);
+insert into t (id,a) values (314,54);
+insert into t (id,a) values (314,55);
+insert into t (id,a) values (314,56);
+insert into t (id,a) values (314,57);
+insert into t (id,a) values (314,58);
+insert into t (id,a) values (314,59);
+insert into t (id,a) values (314,60);
+insert into t (id,a) values (314,61);
+insert into t (id,a) values (314,62);
+insert into t (id,a) values (314,63);
+insert into t (id,a) values (314,64);
+insert into t (id,a) values (314,65);
+insert into t (id,a) values (314,66);
+insert into t (id,a) values (314,67);
+insert into t (id,a) values (314,68);
+insert into t (id,a) values (314,69);
+insert into t (id,a) values (314,70);
+insert into t (id,a) values (314,71);
+insert into t (id,a) values (314,72);
+insert into t (id,a) values (314,73);
+insert into t (id,a) values (314,74);
+insert into t (id,a) values (314,75);
+insert into t (id,a) values (314,76);
+insert into t (id,a) values (314,77);
+insert into t (id,a) values (314,78);
+insert into t (id,a) values (314,79);
+insert into t (id,a) values (314,80);
+insert into t (id,a) values (314,81);
+insert into t (id,a) values (314,82);
+insert into t (id,a) values (314,83);
+insert into t (id,a) values (314,84);
+insert into t (id,a) values (314,85);
+insert into t (id,a) values (314,86);
+insert into t (id,a) values (314,87);
+insert into t (id,a) values (314,88);
+insert into t (id,a) values (314,89);
+insert into t (id,a) values (314,90);
+insert into t (id,a) values (314,91);
+insert into t (id,a) values (314,92);
+insert into t (id,a) values (314,93);
+insert into t (id,a) values (314,94);
+insert into t (id,a) values (314,95);
+insert into t (id,a) values (314,96);
+insert into t (id,a) values (314,97);
+insert into t (id,a) values (314,98);
+insert into t (id,a) values (314,99);
+insert into t (id,a) values (315,0);
+insert into t (id,a) values (315,1);
+insert into t (id,a) values (315,2);
+insert into t (id,a) values (315,3);
+insert into t (id,a) values (315,4);
+insert into t (id,a) values (315,5);
+insert into t (id,a) values (315,6);
+insert into t (id,a) values (315,7);
+insert into t (id,a) values (315,8);
+insert into t (id,a) values (315,9);
+insert into t (id,a) values (315,10);
+insert into t (id,a) values (315,11);
+insert into t (id,a) values (315,12);
+insert into t (id,a) values (315,13);
+insert into t (id,a) values (315,14);
+insert into t (id,a) values (315,15);
+insert into t (id,a) values (315,16);
+insert into t (id,a) values (315,17);
+insert into t (id,a) values (315,18);
+insert into t (id,a) values (315,19);
+insert into t (id,a) values (315,20);
+insert into t (id,a) values (315,21);
+insert into t (id,a) values (315,22);
+insert into t (id,a) values (315,23);
+insert into t (id,a) values (315,24);
+insert into t (id,a) values (315,25);
+insert into t (id,a) values (315,26);
+insert into t (id,a) values (315,27);
+insert into t (id,a) values (315,28);
+insert into t (id,a) values (315,29);
+insert into t (id,a) values (315,30);
+insert into t (id,a) values (315,31);
+insert into t (id,a) values (315,32);
+insert into t (id,a) values (315,33);
+insert into t (id,a) values (315,34);
+insert into t (id,a) values (315,35);
+insert into t (id,a) values (315,36);
+insert into t (id,a) values (315,37);
+insert into t (id,a) values (315,38);
+insert into t (id,a) values (315,39);
+insert into t (id,a) values (315,40);
+insert into t (id,a) values (315,41);
+insert into t (id,a) values (315,42);
+insert into t (id,a) values (315,43);
+insert into t (id,a) values (315,44);
+insert into t (id,a) values (315,45);
+insert into t (id,a) values (315,46);
+insert into t (id,a) values (315,47);
+insert into t (id,a) values (315,48);
+insert into t (id,a) values (315,49);
+insert into t (id,a) values (315,50);
+insert into t (id,a) values (315,51);
+insert into t (id,a) values (315,52);
+insert into t (id,a) values (315,53);
+insert into t (id,a) values (315,54);
+insert into t (id,a) values (315,55);
+insert into t (id,a) values (315,56);
+insert into t (id,a) values (315,57);
+insert into t (id,a) values (315,58);
+insert into t (id,a) values (315,59);
+insert into t (id,a) values (315,60);
+insert into t (id,a) values (315,61);
+insert into t (id,a) values (315,62);
+insert into t (id,a) values (315,63);
+insert into t (id,a) values (315,64);
+insert into t (id,a) values (315,65);
+insert into t (id,a) values (315,66);
+insert into t (id,a) values (315,67);
+insert into t (id,a) values (315,68);
+insert into t (id,a) values (315,69);
+insert into t (id,a) values (315,70);
+insert into t (id,a) values (315,71);
+insert into t (id,a) values (315,72);
+insert into t (id,a) values (315,73);
+insert into t (id,a) values (315,74);
+insert into t (id,a) values (315,75);
+insert into t (id,a) values (315,76);
+insert into t (id,a) values (315,77);
+insert into t (id,a) values (315,78);
+insert into t (id,a) values (315,79);
+insert into t (id,a) values (315,80);
+insert into t (id,a) values (315,81);
+insert into t (id,a) values (315,82);
+insert into t (id,a) values (315,83);
+insert into t (id,a) values (315,84);
+insert into t (id,a) values (315,85);
+insert into t (id,a) values (315,86);
+insert into t (id,a) values (315,87);
+insert into t (id,a) values (315,88);
+insert into t (id,a) values (315,89);
+insert into t (id,a) values (315,90);
+insert into t (id,a) values (315,91);
+insert into t (id,a) values (315,92);
+insert into t (id,a) values (315,93);
+insert into t (id,a) values (315,94);
+insert into t (id,a) values (315,95);
+insert into t (id,a) values (315,96);
+insert into t (id,a) values (315,97);
+insert into t (id,a) values (315,98);
+insert into t (id,a) values (315,99);
+insert into t (id,a) values (316,0);
+insert into t (id,a) values (316,1);
+insert into t (id,a) values (316,2);
+insert into t (id,a) values (316,3);
+insert into t (id,a) values (316,4);
+insert into t (id,a) values (316,5);
+insert into t (id,a) values (316,6);
+insert into t (id,a) values (316,7);
+insert into t (id,a) values (316,8);
+insert into t (id,a) values (316,9);
+insert into t (id,a) values (316,10);
+insert into t (id,a) values (316,11);
+insert into t (id,a) values (316,12);
+insert into t (id,a) values (316,13);
+insert into t (id,a) values (316,14);
+insert into t (id,a) values (316,15);
+insert into t (id,a) values (316,16);
+insert into t (id,a) values (316,17);
+insert into t (id,a) values (316,18);
+insert into t (id,a) values (316,19);
+insert into t (id,a) values (316,20);
+insert into t (id,a) values (316,21);
+insert into t (id,a) values (316,22);
+insert into t (id,a) values (316,23);
+insert into t (id,a) values (316,24);
+insert into t (id,a) values (316,25);
+insert into t (id,a) values (316,26);
+insert into t (id,a) values (316,27);
+insert into t (id,a) values (316,28);
+insert into t (id,a) values (316,29);
+insert into t (id,a) values (316,30);
+insert into t (id,a) values (316,31);
+insert into t (id,a) values (316,32);
+insert into t (id,a) values (316,33);
+insert into t (id,a) values (316,34);
+insert into t (id,a) values (316,35);
+insert into t (id,a) values (316,36);
+insert into t (id,a) values (316,37);
+insert into t (id,a) values (316,38);
+insert into t (id,a) values (316,39);
+insert into t (id,a) values (316,40);
+insert into t (id,a) values (316,41);
+insert into t (id,a) values (316,42);
+insert into t (id,a) values (316,43);
+insert into t (id,a) values (316,44);
+insert into t (id,a) values (316,45);
+insert into t (id,a) values (316,46);
+insert into t (id,a) values (316,47);
+insert into t (id,a) values (316,48);
+insert into t (id,a) values (316,49);
+insert into t (id,a) values (316,50);
+insert into t (id,a) values (316,51);
+insert into t (id,a) values (316,52);
+insert into t (id,a) values (316,53);
+insert into t (id,a) values (316,54);
+insert into t (id,a) values (316,55);
+insert into t (id,a) values (316,56);
+insert into t (id,a) values (316,57);
+insert into t (id,a) values (316,58);
+insert into t (id,a) values (316,59);
+insert into t (id,a) values (316,60);
+insert into t (id,a) values (316,61);
+insert into t (id,a) values (316,62);
+insert into t (id,a) values (316,63);
+insert into t (id,a) values (316,64);
+insert into t (id,a) values (316,65);
+insert into t (id,a) values (316,66);
+insert into t (id,a) values (316,67);
+insert into t (id,a) values (316,68);
+insert into t (id,a) values (316,69);
+insert into t (id,a) values (316,70);
+insert into t (id,a) values (316,71);
+insert into t (id,a) values (316,72);
+insert into t (id,a) values (316,73);
+insert into t (id,a) values (316,74);
+insert into t (id,a) values (316,75);
+insert into t (id,a) values (316,76);
+insert into t (id,a) values (316,77);
+insert into t (id,a) values (316,78);
+insert into t (id,a) values (316,79);
+insert into t (id,a) values (316,80);
+insert into t (id,a) values (316,81);
+insert into t (id,a) values (316,82);
+insert into t (id,a) values (316,83);
+insert into t (id,a) values (316,84);
+insert into t (id,a) values (316,85);
+insert into t (id,a) values (316,86);
+insert into t (id,a) values (316,87);
+insert into t (id,a) values (316,88);
+insert into t (id,a) values (316,89);
+insert into t (id,a) values (316,90);
+insert into t (id,a) values (316,91);
+insert into t (id,a) values (316,92);
+insert into t (id,a) values (316,93);
+insert into t (id,a) values (316,94);
+insert into t (id,a) values (316,95);
+insert into t (id,a) values (316,96);
+insert into t (id,a) values (316,97);
+insert into t (id,a) values (316,98);
+insert into t (id,a) values (316,99);
+insert into t (id,a) values (317,0);
+insert into t (id,a) values (317,1);
+insert into t (id,a) values (317,2);
+insert into t (id,a) values (317,3);
+insert into t (id,a) values (317,4);
+insert into t (id,a) values (317,5);
+insert into t (id,a) values (317,6);
+insert into t (id,a) values (317,7);
+insert into t (id,a) values (317,8);
+insert into t (id,a) values (317,9);
+insert into t (id,a) values (317,10);
+insert into t (id,a) values (317,11);
+insert into t (id,a) values (317,12);
+insert into t (id,a) values (317,13);
+insert into t (id,a) values (317,14);
+insert into t (id,a) values (317,15);
+insert into t (id,a) values (317,16);
+insert into t (id,a) values (317,17);
+insert into t (id,a) values (317,18);
+insert into t (id,a) values (317,19);
+insert into t (id,a) values (317,20);
+insert into t (id,a) values (317,21);
+insert into t (id,a) values (317,22);
+insert into t (id,a) values (317,23);
+insert into t (id,a) values (317,24);
+insert into t (id,a) values (317,25);
+insert into t (id,a) values (317,26);
+insert into t (id,a) values (317,27);
+insert into t (id,a) values (317,28);
+insert into t (id,a) values (317,29);
+insert into t (id,a) values (317,30);
+insert into t (id,a) values (317,31);
+insert into t (id,a) values (317,32);
+insert into t (id,a) values (317,33);
+insert into t (id,a) values (317,34);
+insert into t (id,a) values (317,35);
+insert into t (id,a) values (317,36);
+insert into t (id,a) values (317,37);
+insert into t (id,a) values (317,38);
+insert into t (id,a) values (317,39);
+insert into t (id,a) values (317,40);
+insert into t (id,a) values (317,41);
+insert into t (id,a) values (317,42);
+insert into t (id,a) values (317,43);
+insert into t (id,a) values (317,44);
+insert into t (id,a) values (317,45);
+insert into t (id,a) values (317,46);
+insert into t (id,a) values (317,47);
+insert into t (id,a) values (317,48);
+insert into t (id,a) values (317,49);
+insert into t (id,a) values (317,50);
+insert into t (id,a) values (317,51);
+insert into t (id,a) values (317,52);
+insert into t (id,a) values (317,53);
+insert into t (id,a) values (317,54);
+insert into t (id,a) values (317,55);
+insert into t (id,a) values (317,56);
+insert into t (id,a) values (317,57);
+insert into t (id,a) values (317,58);
+insert into t (id,a) values (317,59);
+insert into t (id,a) values (317,60);
+insert into t (id,a) values (317,61);
+insert into t (id,a) values (317,62);
+insert into t (id,a) values (317,63);
+insert into t (id,a) values (317,64);
+insert into t (id,a) values (317,65);
+insert into t (id,a) values (317,66);
+insert into t (id,a) values (317,67);
+insert into t (id,a) values (317,68);
+insert into t (id,a) values (317,69);
+insert into t (id,a) values (317,70);
+insert into t (id,a) values (317,71);
+insert into t (id,a) values (317,72);
+insert into t (id,a) values (317,73);
+insert into t (id,a) values (317,74);
+insert into t (id,a) values (317,75);
+insert into t (id,a) values (317,76);
+insert into t (id,a) values (317,77);
+insert into t (id,a) values (317,78);
+insert into t (id,a) values (317,79);
+insert into t (id,a) values (317,80);
+insert into t (id,a) values (317,81);
+insert into t (id,a) values (317,82);
+insert into t (id,a) values (317,83);
+insert into t (id,a) values (317,84);
+insert into t (id,a) values (317,85);
+insert into t (id,a) values (317,86);
+insert into t (id,a) values (317,87);
+insert into t (id,a) values (317,88);
+insert into t (id,a) values (317,89);
+insert into t (id,a) values (317,90);
+insert into t (id,a) values (317,91);
+insert into t (id,a) values (317,92);
+insert into t (id,a) values (317,93);
+insert into t (id,a) values (317,94);
+insert into t (id,a) values (317,95);
+insert into t (id,a) values (317,96);
+insert into t (id,a) values (317,97);
+insert into t (id,a) values (317,98);
+insert into t (id,a) values (317,99);
+insert into t (id,a) values (318,0);
+insert into t (id,a) values (318,1);
+insert into t (id,a) values (318,2);
+insert into t (id,a) values (318,3);
+insert into t (id,a) values (318,4);
+insert into t (id,a) values (318,5);
+insert into t (id,a) values (318,6);
+insert into t (id,a) values (318,7);
+insert into t (id,a) values (318,8);
+insert into t (id,a) values (318,9);
+insert into t (id,a) values (318,10);
+insert into t (id,a) values (318,11);
+insert into t (id,a) values (318,12);
+insert into t (id,a) values (318,13);
+insert into t (id,a) values (318,14);
+insert into t (id,a) values (318,15);
+insert into t (id,a) values (318,16);
+insert into t (id,a) values (318,17);
+insert into t (id,a) values (318,18);
+insert into t (id,a) values (318,19);
+insert into t (id,a) values (318,20);
+insert into t (id,a) values (318,21);
+insert into t (id,a) values (318,22);
+insert into t (id,a) values (318,23);
+insert into t (id,a) values (318,24);
+insert into t (id,a) values (318,25);
+insert into t (id,a) values (318,26);
+insert into t (id,a) values (318,27);
+insert into t (id,a) values (318,28);
+insert into t (id,a) values (318,29);
+insert into t (id,a) values (318,30);
+insert into t (id,a) values (318,31);
+insert into t (id,a) values (318,32);
+insert into t (id,a) values (318,33);
+insert into t (id,a) values (318,34);
+insert into t (id,a) values (318,35);
+insert into t (id,a) values (318,36);
+insert into t (id,a) values (318,37);
+insert into t (id,a) values (318,38);
+insert into t (id,a) values (318,39);
+insert into t (id,a) values (318,40);
+insert into t (id,a) values (318,41);
+insert into t (id,a) values (318,42);
+insert into t (id,a) values (318,43);
+insert into t (id,a) values (318,44);
+insert into t (id,a) values (318,45);
+insert into t (id,a) values (318,46);
+insert into t (id,a) values (318,47);
+insert into t (id,a) values (318,48);
+insert into t (id,a) values (318,49);
+insert into t (id,a) values (318,50);
+insert into t (id,a) values (318,51);
+insert into t (id,a) values (318,52);
+insert into t (id,a) values (318,53);
+insert into t (id,a) values (318,54);
+insert into t (id,a) values (318,55);
+insert into t (id,a) values (318,56);
+insert into t (id,a) values (318,57);
+insert into t (id,a) values (318,58);
+insert into t (id,a) values (318,59);
+insert into t (id,a) values (318,60);
+insert into t (id,a) values (318,61);
+insert into t (id,a) values (318,62);
+insert into t (id,a) values (318,63);
+insert into t (id,a) values (318,64);
+insert into t (id,a) values (318,65);
+insert into t (id,a) values (318,66);
+insert into t (id,a) values (318,67);
+insert into t (id,a) values (318,68);
+insert into t (id,a) values (318,69);
+insert into t (id,a) values (318,70);
+insert into t (id,a) values (318,71);
+insert into t (id,a) values (318,72);
+insert into t (id,a) values (318,73);
+insert into t (id,a) values (318,74);
+insert into t (id,a) values (318,75);
+insert into t (id,a) values (318,76);
+insert into t (id,a) values (318,77);
+insert into t (id,a) values (318,78);
+insert into t (id,a) values (318,79);
+insert into t (id,a) values (318,80);
+insert into t (id,a) values (318,81);
+insert into t (id,a) values (318,82);
+insert into t (id,a) values (318,83);
+insert into t (id,a) values (318,84);
+insert into t (id,a) values (318,85);
+insert into t (id,a) values (318,86);
+insert into t (id,a) values (318,87);
+insert into t (id,a) values (318,88);
+insert into t (id,a) values (318,89);
+insert into t (id,a) values (318,90);
+insert into t (id,a) values (318,91);
+insert into t (id,a) values (318,92);
+insert into t (id,a) values (318,93);
+insert into t (id,a) values (318,94);
+insert into t (id,a) values (318,95);
+insert into t (id,a) values (318,96);
+insert into t (id,a) values (318,97);
+insert into t (id,a) values (318,98);
+insert into t (id,a) values (318,99);
+insert into t (id,a) values (319,0);
+insert into t (id,a) values (319,1);
+insert into t (id,a) values (319,2);
+insert into t (id,a) values (319,3);
+insert into t (id,a) values (319,4);
+insert into t (id,a) values (319,5);
+insert into t (id,a) values (319,6);
+insert into t (id,a) values (319,7);
+insert into t (id,a) values (319,8);
+insert into t (id,a) values (319,9);
+insert into t (id,a) values (319,10);
+insert into t (id,a) values (319,11);
+insert into t (id,a) values (319,12);
+insert into t (id,a) values (319,13);
+insert into t (id,a) values (319,14);
+insert into t (id,a) values (319,15);
+insert into t (id,a) values (319,16);
+insert into t (id,a) values (319,17);
+insert into t (id,a) values (319,18);
+insert into t (id,a) values (319,19);
+insert into t (id,a) values (319,20);
+insert into t (id,a) values (319,21);
+insert into t (id,a) values (319,22);
+insert into t (id,a) values (319,23);
+insert into t (id,a) values (319,24);
+insert into t (id,a) values (319,25);
+insert into t (id,a) values (319,26);
+insert into t (id,a) values (319,27);
+insert into t (id,a) values (319,28);
+insert into t (id,a) values (319,29);
+insert into t (id,a) values (319,30);
+insert into t (id,a) values (319,31);
+insert into t (id,a) values (319,32);
+insert into t (id,a) values (319,33);
+insert into t (id,a) values (319,34);
+insert into t (id,a) values (319,35);
+insert into t (id,a) values (319,36);
+insert into t (id,a) values (319,37);
+insert into t (id,a) values (319,38);
+insert into t (id,a) values (319,39);
+insert into t (id,a) values (319,40);
+insert into t (id,a) values (319,41);
+insert into t (id,a) values (319,42);
+insert into t (id,a) values (319,43);
+insert into t (id,a) values (319,44);
+insert into t (id,a) values (319,45);
+insert into t (id,a) values (319,46);
+insert into t (id,a) values (319,47);
+insert into t (id,a) values (319,48);
+insert into t (id,a) values (319,49);
+insert into t (id,a) values (319,50);
+insert into t (id,a) values (319,51);
+insert into t (id,a) values (319,52);
+insert into t (id,a) values (319,53);
+insert into t (id,a) values (319,54);
+insert into t (id,a) values (319,55);
+insert into t (id,a) values (319,56);
+insert into t (id,a) values (319,57);
+insert into t (id,a) values (319,58);
+insert into t (id,a) values (319,59);
+insert into t (id,a) values (319,60);
+insert into t (id,a) values (319,61);
+insert into t (id,a) values (319,62);
+insert into t (id,a) values (319,63);
+insert into t (id,a) values (319,64);
+insert into t (id,a) values (319,65);
+insert into t (id,a) values (319,66);
+insert into t (id,a) values (319,67);
+insert into t (id,a) values (319,68);
+insert into t (id,a) values (319,69);
+insert into t (id,a) values (319,70);
+insert into t (id,a) values (319,71);
+insert into t (id,a) values (319,72);
+insert into t (id,a) values (319,73);
+insert into t (id,a) values (319,74);
+insert into t (id,a) values (319,75);
+insert into t (id,a) values (319,76);
+insert into t (id,a) values (319,77);
+insert into t (id,a) values (319,78);
+insert into t (id,a) values (319,79);
+insert into t (id,a) values (319,80);
+insert into t (id,a) values (319,81);
+insert into t (id,a) values (319,82);
+insert into t (id,a) values (319,83);
+insert into t (id,a) values (319,84);
+insert into t (id,a) values (319,85);
+insert into t (id,a) values (319,86);
+insert into t (id,a) values (319,87);
+insert into t (id,a) values (319,88);
+insert into t (id,a) values (319,89);
+insert into t (id,a) values (319,90);
+insert into t (id,a) values (319,91);
+insert into t (id,a) values (319,92);
+insert into t (id,a) values (319,93);
+insert into t (id,a) values (319,94);
+insert into t (id,a) values (319,95);
+insert into t (id,a) values (319,96);
+insert into t (id,a) values (319,97);
+insert into t (id,a) values (319,98);
+insert into t (id,a) values (319,99);
+insert into t (id,a) values (320,0);
+insert into t (id,a) values (320,1);
+insert into t (id,a) values (320,2);
+insert into t (id,a) values (320,3);
+insert into t (id,a) values (320,4);
+insert into t (id,a) values (320,5);
+insert into t (id,a) values (320,6);
+insert into t (id,a) values (320,7);
+insert into t (id,a) values (320,8);
+insert into t (id,a) values (320,9);
+insert into t (id,a) values (320,10);
+insert into t (id,a) values (320,11);
+insert into t (id,a) values (320,12);
+insert into t (id,a) values (320,13);
+insert into t (id,a) values (320,14);
+insert into t (id,a) values (320,15);
+insert into t (id,a) values (320,16);
+insert into t (id,a) values (320,17);
+insert into t (id,a) values (320,18);
+insert into t (id,a) values (320,19);
+insert into t (id,a) values (320,20);
+insert into t (id,a) values (320,21);
+insert into t (id,a) values (320,22);
+insert into t (id,a) values (320,23);
+insert into t (id,a) values (320,24);
+insert into t (id,a) values (320,25);
+insert into t (id,a) values (320,26);
+insert into t (id,a) values (320,27);
+insert into t (id,a) values (320,28);
+insert into t (id,a) values (320,29);
+insert into t (id,a) values (320,30);
+insert into t (id,a) values (320,31);
+insert into t (id,a) values (320,32);
+insert into t (id,a) values (320,33);
+insert into t (id,a) values (320,34);
+insert into t (id,a) values (320,35);
+insert into t (id,a) values (320,36);
+insert into t (id,a) values (320,37);
+insert into t (id,a) values (320,38);
+insert into t (id,a) values (320,39);
+insert into t (id,a) values (320,40);
+insert into t (id,a) values (320,41);
+insert into t (id,a) values (320,42);
+insert into t (id,a) values (320,43);
+insert into t (id,a) values (320,44);
+insert into t (id,a) values (320,45);
+insert into t (id,a) values (320,46);
+insert into t (id,a) values (320,47);
+insert into t (id,a) values (320,48);
+insert into t (id,a) values (320,49);
+insert into t (id,a) values (320,50);
+insert into t (id,a) values (320,51);
+insert into t (id,a) values (320,52);
+insert into t (id,a) values (320,53);
+insert into t (id,a) values (320,54);
+insert into t (id,a) values (320,55);
+insert into t (id,a) values (320,56);
+insert into t (id,a) values (320,57);
+insert into t (id,a) values (320,58);
+insert into t (id,a) values (320,59);
+insert into t (id,a) values (320,60);
+insert into t (id,a) values (320,61);
+insert into t (id,a) values (320,62);
+insert into t (id,a) values (320,63);
+insert into t (id,a) values (320,64);
+insert into t (id,a) values (320,65);
+insert into t (id,a) values (320,66);
+insert into t (id,a) values (320,67);
+insert into t (id,a) values (320,68);
+insert into t (id,a) values (320,69);
+insert into t (id,a) values (320,70);
+insert into t (id,a) values (320,71);
+insert into t (id,a) values (320,72);
+insert into t (id,a) values (320,73);
+insert into t (id,a) values (320,74);
+insert into t (id,a) values (320,75);
+insert into t (id,a) values (320,76);
+insert into t (id,a) values (320,77);
+insert into t (id,a) values (320,78);
+insert into t (id,a) values (320,79);
+insert into t (id,a) values (320,80);
+insert into t (id,a) values (320,81);
+insert into t (id,a) values (320,82);
+insert into t (id,a) values (320,83);
+insert into t (id,a) values (320,84);
+insert into t (id,a) values (320,85);
+insert into t (id,a) values (320,86);
+insert into t (id,a) values (320,87);
+insert into t (id,a) values (320,88);
+insert into t (id,a) values (320,89);
+insert into t (id,a) values (320,90);
+insert into t (id,a) values (320,91);
+insert into t (id,a) values (320,92);
+insert into t (id,a) values (320,93);
+insert into t (id,a) values (320,94);
+insert into t (id,a) values (320,95);
+insert into t (id,a) values (320,96);
+insert into t (id,a) values (320,97);
+insert into t (id,a) values (320,98);
+insert into t (id,a) values (320,99);
+insert into t (id,a) values (321,0);
+insert into t (id,a) values (321,1);
+insert into t (id,a) values (321,2);
+insert into t (id,a) values (321,3);
+insert into t (id,a) values (321,4);
+insert into t (id,a) values (321,5);
+insert into t (id,a) values (321,6);
+insert into t (id,a) values (321,7);
+insert into t (id,a) values (321,8);
+insert into t (id,a) values (321,9);
+insert into t (id,a) values (321,10);
+insert into t (id,a) values (321,11);
+insert into t (id,a) values (321,12);
+insert into t (id,a) values (321,13);
+insert into t (id,a) values (321,14);
+insert into t (id,a) values (321,15);
+insert into t (id,a) values (321,16);
+insert into t (id,a) values (321,17);
+insert into t (id,a) values (321,18);
+insert into t (id,a) values (321,19);
+insert into t (id,a) values (321,20);
+insert into t (id,a) values (321,21);
+insert into t (id,a) values (321,22);
+insert into t (id,a) values (321,23);
+insert into t (id,a) values (321,24);
+insert into t (id,a) values (321,25);
+insert into t (id,a) values (321,26);
+insert into t (id,a) values (321,27);
+insert into t (id,a) values (321,28);
+insert into t (id,a) values (321,29);
+insert into t (id,a) values (321,30);
+insert into t (id,a) values (321,31);
+insert into t (id,a) values (321,32);
+insert into t (id,a) values (321,33);
+insert into t (id,a) values (321,34);
+insert into t (id,a) values (321,35);
+insert into t (id,a) values (321,36);
+insert into t (id,a) values (321,37);
+insert into t (id,a) values (321,38);
+insert into t (id,a) values (321,39);
+insert into t (id,a) values (321,40);
+insert into t (id,a) values (321,41);
+insert into t (id,a) values (321,42);
+insert into t (id,a) values (321,43);
+insert into t (id,a) values (321,44);
+insert into t (id,a) values (321,45);
+insert into t (id,a) values (321,46);
+insert into t (id,a) values (321,47);
+insert into t (id,a) values (321,48);
+insert into t (id,a) values (321,49);
+insert into t (id,a) values (321,50);
+insert into t (id,a) values (321,51);
+insert into t (id,a) values (321,52);
+insert into t (id,a) values (321,53);
+insert into t (id,a) values (321,54);
+insert into t (id,a) values (321,55);
+insert into t (id,a) values (321,56);
+insert into t (id,a) values (321,57);
+insert into t (id,a) values (321,58);
+insert into t (id,a) values (321,59);
+insert into t (id,a) values (321,60);
+insert into t (id,a) values (321,61);
+insert into t (id,a) values (321,62);
+insert into t (id,a) values (321,63);
+insert into t (id,a) values (321,64);
+insert into t (id,a) values (321,65);
+insert into t (id,a) values (321,66);
+insert into t (id,a) values (321,67);
+insert into t (id,a) values (321,68);
+insert into t (id,a) values (321,69);
+insert into t (id,a) values (321,70);
+insert into t (id,a) values (321,71);
+insert into t (id,a) values (321,72);
+insert into t (id,a) values (321,73);
+insert into t (id,a) values (321,74);
+insert into t (id,a) values (321,75);
+insert into t (id,a) values (321,76);
+insert into t (id,a) values (321,77);
+insert into t (id,a) values (321,78);
+insert into t (id,a) values (321,79);
+insert into t (id,a) values (321,80);
+insert into t (id,a) values (321,81);
+insert into t (id,a) values (321,82);
+insert into t (id,a) values (321,83);
+insert into t (id,a) values (321,84);
+insert into t (id,a) values (321,85);
+insert into t (id,a) values (321,86);
+insert into t (id,a) values (321,87);
+insert into t (id,a) values (321,88);
+insert into t (id,a) values (321,89);
+insert into t (id,a) values (321,90);
+insert into t (id,a) values (321,91);
+insert into t (id,a) values (321,92);
+insert into t (id,a) values (321,93);
+insert into t (id,a) values (321,94);
+insert into t (id,a) values (321,95);
+insert into t (id,a) values (321,96);
+insert into t (id,a) values (321,97);
+insert into t (id,a) values (321,98);
+insert into t (id,a) values (321,99);
+insert into t (id,a) values (322,0);
+insert into t (id,a) values (322,1);
+insert into t (id,a) values (322,2);
+insert into t (id,a) values (322,3);
+insert into t (id,a) values (322,4);
+insert into t (id,a) values (322,5);
+insert into t (id,a) values (322,6);
+insert into t (id,a) values (322,7);
+insert into t (id,a) values (322,8);
+insert into t (id,a) values (322,9);
+insert into t (id,a) values (322,10);
+insert into t (id,a) values (322,11);
+insert into t (id,a) values (322,12);
+insert into t (id,a) values (322,13);
+insert into t (id,a) values (322,14);
+insert into t (id,a) values (322,15);
+insert into t (id,a) values (322,16);
+insert into t (id,a) values (322,17);
+insert into t (id,a) values (322,18);
+insert into t (id,a) values (322,19);
+insert into t (id,a) values (322,20);
+insert into t (id,a) values (322,21);
+insert into t (id,a) values (322,22);
+insert into t (id,a) values (322,23);
+insert into t (id,a) values (322,24);
+insert into t (id,a) values (322,25);
+insert into t (id,a) values (322,26);
+insert into t (id,a) values (322,27);
+insert into t (id,a) values (322,28);
+insert into t (id,a) values (322,29);
+insert into t (id,a) values (322,30);
+insert into t (id,a) values (322,31);
+insert into t (id,a) values (322,32);
+insert into t (id,a) values (322,33);
+insert into t (id,a) values (322,34);
+insert into t (id,a) values (322,35);
+insert into t (id,a) values (322,36);
+insert into t (id,a) values (322,37);
+insert into t (id,a) values (322,38);
+insert into t (id,a) values (322,39);
+insert into t (id,a) values (322,40);
+insert into t (id,a) values (322,41);
+insert into t (id,a) values (322,42);
+insert into t (id,a) values (322,43);
+insert into t (id,a) values (322,44);
+insert into t (id,a) values (322,45);
+insert into t (id,a) values (322,46);
+insert into t (id,a) values (322,47);
+insert into t (id,a) values (322,48);
+insert into t (id,a) values (322,49);
+insert into t (id,a) values (322,50);
+insert into t (id,a) values (322,51);
+insert into t (id,a) values (322,52);
+insert into t (id,a) values (322,53);
+insert into t (id,a) values (322,54);
+insert into t (id,a) values (322,55);
+insert into t (id,a) values (322,56);
+insert into t (id,a) values (322,57);
+insert into t (id,a) values (322,58);
+insert into t (id,a) values (322,59);
+insert into t (id,a) values (322,60);
+insert into t (id,a) values (322,61);
+insert into t (id,a) values (322,62);
+insert into t (id,a) values (322,63);
+insert into t (id,a) values (322,64);
+insert into t (id,a) values (322,65);
+insert into t (id,a) values (322,66);
+insert into t (id,a) values (322,67);
+insert into t (id,a) values (322,68);
+insert into t (id,a) values (322,69);
+insert into t (id,a) values (322,70);
+insert into t (id,a) values (322,71);
+insert into t (id,a) values (322,72);
+insert into t (id,a) values (322,73);
+insert into t (id,a) values (322,74);
+insert into t (id,a) values (322,75);
+insert into t (id,a) values (322,76);
+insert into t (id,a) values (322,77);
+insert into t (id,a) values (322,78);
+insert into t (id,a) values (322,79);
+insert into t (id,a) values (322,80);
+insert into t (id,a) values (322,81);
+insert into t (id,a) values (322,82);
+insert into t (id,a) values (322,83);
+insert into t (id,a) values (322,84);
+insert into t (id,a) values (322,85);
+insert into t (id,a) values (322,86);
+insert into t (id,a) values (322,87);
+insert into t (id,a) values (322,88);
+insert into t (id,a) values (322,89);
+insert into t (id,a) values (322,90);
+insert into t (id,a) values (322,91);
+insert into t (id,a) values (322,92);
+insert into t (id,a) values (322,93);
+insert into t (id,a) values (322,94);
+insert into t (id,a) values (322,95);
+insert into t (id,a) values (322,96);
+insert into t (id,a) values (322,97);
+insert into t (id,a) values (322,98);
+insert into t (id,a) values (322,99);
+insert into t (id,a) values (323,0);
+insert into t (id,a) values (323,1);
+insert into t (id,a) values (323,2);
+insert into t (id,a) values (323,3);
+insert into t (id,a) values (323,4);
+insert into t (id,a) values (323,5);
+insert into t (id,a) values (323,6);
+insert into t (id,a) values (323,7);
+insert into t (id,a) values (323,8);
+insert into t (id,a) values (323,9);
+insert into t (id,a) values (323,10);
+insert into t (id,a) values (323,11);
+insert into t (id,a) values (323,12);
+insert into t (id,a) values (323,13);
+insert into t (id,a) values (323,14);
+insert into t (id,a) values (323,15);
+insert into t (id,a) values (323,16);
+insert into t (id,a) values (323,17);
+insert into t (id,a) values (323,18);
+insert into t (id,a) values (323,19);
+insert into t (id,a) values (323,20);
+insert into t (id,a) values (323,21);
+insert into t (id,a) values (323,22);
+insert into t (id,a) values (323,23);
+insert into t (id,a) values (323,24);
+insert into t (id,a) values (323,25);
+insert into t (id,a) values (323,26);
+insert into t (id,a) values (323,27);
+insert into t (id,a) values (323,28);
+insert into t (id,a) values (323,29);
+insert into t (id,a) values (323,30);
+insert into t (id,a) values (323,31);
+insert into t (id,a) values (323,32);
+insert into t (id,a) values (323,33);
+insert into t (id,a) values (323,34);
+insert into t (id,a) values (323,35);
+insert into t (id,a) values (323,36);
+insert into t (id,a) values (323,37);
+insert into t (id,a) values (323,38);
+insert into t (id,a) values (323,39);
+insert into t (id,a) values (323,40);
+insert into t (id,a) values (323,41);
+insert into t (id,a) values (323,42);
+insert into t (id,a) values (323,43);
+insert into t (id,a) values (323,44);
+insert into t (id,a) values (323,45);
+insert into t (id,a) values (323,46);
+insert into t (id,a) values (323,47);
+insert into t (id,a) values (323,48);
+insert into t (id,a) values (323,49);
+insert into t (id,a) values (323,50);
+insert into t (id,a) values (323,51);
+insert into t (id,a) values (323,52);
+insert into t (id,a) values (323,53);
+insert into t (id,a) values (323,54);
+insert into t (id,a) values (323,55);
+insert into t (id,a) values (323,56);
+insert into t (id,a) values (323,57);
+insert into t (id,a) values (323,58);
+insert into t (id,a) values (323,59);
+insert into t (id,a) values (323,60);
+insert into t (id,a) values (323,61);
+insert into t (id,a) values (323,62);
+insert into t (id,a) values (323,63);
+insert into t (id,a) values (323,64);
+insert into t (id,a) values (323,65);
+insert into t (id,a) values (323,66);
+insert into t (id,a) values (323,67);
+insert into t (id,a) values (323,68);
+insert into t (id,a) values (323,69);
+insert into t (id,a) values (323,70);
+insert into t (id,a) values (323,71);
+insert into t (id,a) values (323,72);
+insert into t (id,a) values (323,73);
+insert into t (id,a) values (323,74);
+insert into t (id,a) values (323,75);
+insert into t (id,a) values (323,76);
+insert into t (id,a) values (323,77);
+insert into t (id,a) values (323,78);
+insert into t (id,a) values (323,79);
+insert into t (id,a) values (323,80);
+insert into t (id,a) values (323,81);
+insert into t (id,a) values (323,82);
+insert into t (id,a) values (323,83);
+insert into t (id,a) values (323,84);
+insert into t (id,a) values (323,85);
+insert into t (id,a) values (323,86);
+insert into t (id,a) values (323,87);
+insert into t (id,a) values (323,88);
+insert into t (id,a) values (323,89);
+insert into t (id,a) values (323,90);
+insert into t (id,a) values (323,91);
+insert into t (id,a) values (323,92);
+insert into t (id,a) values (323,93);
+insert into t (id,a) values (323,94);
+insert into t (id,a) values (323,95);
+insert into t (id,a) values (323,96);
+insert into t (id,a) values (323,97);
+insert into t (id,a) values (323,98);
+insert into t (id,a) values (323,99);
+insert into t (id,a) values (324,0);
+insert into t (id,a) values (324,1);
+insert into t (id,a) values (324,2);
+insert into t (id,a) values (324,3);
+insert into t (id,a) values (324,4);
+insert into t (id,a) values (324,5);
+insert into t (id,a) values (324,6);
+insert into t (id,a) values (324,7);
+insert into t (id,a) values (324,8);
+insert into t (id,a) values (324,9);
+insert into t (id,a) values (324,10);
+insert into t (id,a) values (324,11);
+insert into t (id,a) values (324,12);
+insert into t (id,a) values (324,13);
+insert into t (id,a) values (324,14);
+insert into t (id,a) values (324,15);
+insert into t (id,a) values (324,16);
+insert into t (id,a) values (324,17);
+insert into t (id,a) values (324,18);
+insert into t (id,a) values (324,19);
+insert into t (id,a) values (324,20);
+insert into t (id,a) values (324,21);
+insert into t (id,a) values (324,22);
+insert into t (id,a) values (324,23);
+insert into t (id,a) values (324,24);
+insert into t (id,a) values (324,25);
+insert into t (id,a) values (324,26);
+insert into t (id,a) values (324,27);
+insert into t (id,a) values (324,28);
+insert into t (id,a) values (324,29);
+insert into t (id,a) values (324,30);
+insert into t (id,a) values (324,31);
+insert into t (id,a) values (324,32);
+insert into t (id,a) values (324,33);
+insert into t (id,a) values (324,34);
+insert into t (id,a) values (324,35);
+insert into t (id,a) values (324,36);
+insert into t (id,a) values (324,37);
+insert into t (id,a) values (324,38);
+insert into t (id,a) values (324,39);
+insert into t (id,a) values (324,40);
+insert into t (id,a) values (324,41);
+insert into t (id,a) values (324,42);
+insert into t (id,a) values (324,43);
+insert into t (id,a) values (324,44);
+insert into t (id,a) values (324,45);
+insert into t (id,a) values (324,46);
+insert into t (id,a) values (324,47);
+insert into t (id,a) values (324,48);
+insert into t (id,a) values (324,49);
+insert into t (id,a) values (324,50);
+insert into t (id,a) values (324,51);
+insert into t (id,a) values (324,52);
+insert into t (id,a) values (324,53);
+insert into t (id,a) values (324,54);
+insert into t (id,a) values (324,55);
+insert into t (id,a) values (324,56);
+insert into t (id,a) values (324,57);
+insert into t (id,a) values (324,58);
+insert into t (id,a) values (324,59);
+insert into t (id,a) values (324,60);
+insert into t (id,a) values (324,61);
+insert into t (id,a) values (324,62);
+insert into t (id,a) values (324,63);
+insert into t (id,a) values (324,64);
+insert into t (id,a) values (324,65);
+insert into t (id,a) values (324,66);
+insert into t (id,a) values (324,67);
+insert into t (id,a) values (324,68);
+insert into t (id,a) values (324,69);
+insert into t (id,a) values (324,70);
+insert into t (id,a) values (324,71);
+insert into t (id,a) values (324,72);
+insert into t (id,a) values (324,73);
+insert into t (id,a) values (324,74);
+insert into t (id,a) values (324,75);
+insert into t (id,a) values (324,76);
+insert into t (id,a) values (324,77);
+insert into t (id,a) values (324,78);
+insert into t (id,a) values (324,79);
+insert into t (id,a) values (324,80);
+insert into t (id,a) values (324,81);
+insert into t (id,a) values (324,82);
+insert into t (id,a) values (324,83);
+insert into t (id,a) values (324,84);
+insert into t (id,a) values (324,85);
+insert into t (id,a) values (324,86);
+insert into t (id,a) values (324,87);
+insert into t (id,a) values (324,88);
+insert into t (id,a) values (324,89);
+insert into t (id,a) values (324,90);
+insert into t (id,a) values (324,91);
+insert into t (id,a) values (324,92);
+insert into t (id,a) values (324,93);
+insert into t (id,a) values (324,94);
+insert into t (id,a) values (324,95);
+insert into t (id,a) values (324,96);
+insert into t (id,a) values (324,97);
+insert into t (id,a) values (324,98);
+insert into t (id,a) values (324,99);
+insert into t (id,a) values (325,0);
+insert into t (id,a) values (325,1);
+insert into t (id,a) values (325,2);
+insert into t (id,a) values (325,3);
+insert into t (id,a) values (325,4);
+insert into t (id,a) values (325,5);
+insert into t (id,a) values (325,6);
+insert into t (id,a) values (325,7);
+insert into t (id,a) values (325,8);
+insert into t (id,a) values (325,9);
+insert into t (id,a) values (325,10);
+insert into t (id,a) values (325,11);
+insert into t (id,a) values (325,12);
+insert into t (id,a) values (325,13);
+insert into t (id,a) values (325,14);
+insert into t (id,a) values (325,15);
+insert into t (id,a) values (325,16);
+insert into t (id,a) values (325,17);
+insert into t (id,a) values (325,18);
+insert into t (id,a) values (325,19);
+insert into t (id,a) values (325,20);
+insert into t (id,a) values (325,21);
+insert into t (id,a) values (325,22);
+insert into t (id,a) values (325,23);
+insert into t (id,a) values (325,24);
+insert into t (id,a) values (325,25);
+insert into t (id,a) values (325,26);
+insert into t (id,a) values (325,27);
+insert into t (id,a) values (325,28);
+insert into t (id,a) values (325,29);
+insert into t (id,a) values (325,30);
+insert into t (id,a) values (325,31);
+insert into t (id,a) values (325,32);
+insert into t (id,a) values (325,33);
+insert into t (id,a) values (325,34);
+insert into t (id,a) values (325,35);
+insert into t (id,a) values (325,36);
+insert into t (id,a) values (325,37);
+insert into t (id,a) values (325,38);
+insert into t (id,a) values (325,39);
+insert into t (id,a) values (325,40);
+insert into t (id,a) values (325,41);
+insert into t (id,a) values (325,42);
+insert into t (id,a) values (325,43);
+insert into t (id,a) values (325,44);
+insert into t (id,a) values (325,45);
+insert into t (id,a) values (325,46);
+insert into t (id,a) values (325,47);
+insert into t (id,a) values (325,48);
+insert into t (id,a) values (325,49);
+insert into t (id,a) values (325,50);
+insert into t (id,a) values (325,51);
+insert into t (id,a) values (325,52);
+insert into t (id,a) values (325,53);
+insert into t (id,a) values (325,54);
+insert into t (id,a) values (325,55);
+insert into t (id,a) values (325,56);
+insert into t (id,a) values (325,57);
+insert into t (id,a) values (325,58);
+insert into t (id,a) values (325,59);
+insert into t (id,a) values (325,60);
+insert into t (id,a) values (325,61);
+insert into t (id,a) values (325,62);
+insert into t (id,a) values (325,63);
+insert into t (id,a) values (325,64);
+insert into t (id,a) values (325,65);
+insert into t (id,a) values (325,66);
+insert into t (id,a) values (325,67);
+insert into t (id,a) values (325,68);
+insert into t (id,a) values (325,69);
+insert into t (id,a) values (325,70);
+insert into t (id,a) values (325,71);
+insert into t (id,a) values (325,72);
+insert into t (id,a) values (325,73);
+insert into t (id,a) values (325,74);
+insert into t (id,a) values (325,75);
+insert into t (id,a) values (325,76);
+insert into t (id,a) values (325,77);
+insert into t (id,a) values (325,78);
+insert into t (id,a) values (325,79);
+insert into t (id,a) values (325,80);
+insert into t (id,a) values (325,81);
+insert into t (id,a) values (325,82);
+insert into t (id,a) values (325,83);
+insert into t (id,a) values (325,84);
+insert into t (id,a) values (325,85);
+insert into t (id,a) values (325,86);
+insert into t (id,a) values (325,87);
+insert into t (id,a) values (325,88);
+insert into t (id,a) values (325,89);
+insert into t (id,a) values (325,90);
+insert into t (id,a) values (325,91);
+insert into t (id,a) values (325,92);
+insert into t (id,a) values (325,93);
+insert into t (id,a) values (325,94);
+insert into t (id,a) values (325,95);
+insert into t (id,a) values (325,96);
+insert into t (id,a) values (325,97);
+insert into t (id,a) values (325,98);
+insert into t (id,a) values (325,99);
+insert into t (id,a) values (326,0);
+insert into t (id,a) values (326,1);
+insert into t (id,a) values (326,2);
+insert into t (id,a) values (326,3);
+insert into t (id,a) values (326,4);
+insert into t (id,a) values (326,5);
+insert into t (id,a) values (326,6);
+insert into t (id,a) values (326,7);
+insert into t (id,a) values (326,8);
+insert into t (id,a) values (326,9);
+insert into t (id,a) values (326,10);
+insert into t (id,a) values (326,11);
+insert into t (id,a) values (326,12);
+insert into t (id,a) values (326,13);
+insert into t (id,a) values (326,14);
+insert into t (id,a) values (326,15);
+insert into t (id,a) values (326,16);
+insert into t (id,a) values (326,17);
+insert into t (id,a) values (326,18);
+insert into t (id,a) values (326,19);
+insert into t (id,a) values (326,20);
+insert into t (id,a) values (326,21);
+insert into t (id,a) values (326,22);
+insert into t (id,a) values (326,23);
+insert into t (id,a) values (326,24);
+insert into t (id,a) values (326,25);
+insert into t (id,a) values (326,26);
+insert into t (id,a) values (326,27);
+insert into t (id,a) values (326,28);
+insert into t (id,a) values (326,29);
+insert into t (id,a) values (326,30);
+insert into t (id,a) values (326,31);
+insert into t (id,a) values (326,32);
+insert into t (id,a) values (326,33);
+insert into t (id,a) values (326,34);
+insert into t (id,a) values (326,35);
+insert into t (id,a) values (326,36);
+insert into t (id,a) values (326,37);
+insert into t (id,a) values (326,38);
+insert into t (id,a) values (326,39);
+insert into t (id,a) values (326,40);
+insert into t (id,a) values (326,41);
+insert into t (id,a) values (326,42);
+insert into t (id,a) values (326,43);
+insert into t (id,a) values (326,44);
+insert into t (id,a) values (326,45);
+insert into t (id,a) values (326,46);
+insert into t (id,a) values (326,47);
+insert into t (id,a) values (326,48);
+insert into t (id,a) values (326,49);
+insert into t (id,a) values (326,50);
+insert into t (id,a) values (326,51);
+insert into t (id,a) values (326,52);
+insert into t (id,a) values (326,53);
+insert into t (id,a) values (326,54);
+insert into t (id,a) values (326,55);
+insert into t (id,a) values (326,56);
+insert into t (id,a) values (326,57);
+insert into t (id,a) values (326,58);
+insert into t (id,a) values (326,59);
+insert into t (id,a) values (326,60);
+insert into t (id,a) values (326,61);
+insert into t (id,a) values (326,62);
+insert into t (id,a) values (326,63);
+insert into t (id,a) values (326,64);
+insert into t (id,a) values (326,65);
+insert into t (id,a) values (326,66);
+insert into t (id,a) values (326,67);
+insert into t (id,a) values (326,68);
+insert into t (id,a) values (326,69);
+insert into t (id,a) values (326,70);
+insert into t (id,a) values (326,71);
+insert into t (id,a) values (326,72);
+insert into t (id,a) values (326,73);
+insert into t (id,a) values (326,74);
+insert into t (id,a) values (326,75);
+insert into t (id,a) values (326,76);
+insert into t (id,a) values (326,77);
+insert into t (id,a) values (326,78);
+insert into t (id,a) values (326,79);
+insert into t (id,a) values (326,80);
+insert into t (id,a) values (326,81);
+insert into t (id,a) values (326,82);
+insert into t (id,a) values (326,83);
+insert into t (id,a) values (326,84);
+insert into t (id,a) values (326,85);
+insert into t (id,a) values (326,86);
+insert into t (id,a) values (326,87);
+insert into t (id,a) values (326,88);
+insert into t (id,a) values (326,89);
+insert into t (id,a) values (326,90);
+insert into t (id,a) values (326,91);
+insert into t (id,a) values (326,92);
+insert into t (id,a) values (326,93);
+insert into t (id,a) values (326,94);
+insert into t (id,a) values (326,95);
+insert into t (id,a) values (326,96);
+insert into t (id,a) values (326,97);
+insert into t (id,a) values (326,98);
+insert into t (id,a) values (326,99);
+insert into t (id,a) values (327,0);
+insert into t (id,a) values (327,1);
+insert into t (id,a) values (327,2);
+insert into t (id,a) values (327,3);
+insert into t (id,a) values (327,4);
+insert into t (id,a) values (327,5);
+insert into t (id,a) values (327,6);
+insert into t (id,a) values (327,7);
+insert into t (id,a) values (327,8);
+insert into t (id,a) values (327,9);
+insert into t (id,a) values (327,10);
+insert into t (id,a) values (327,11);
+insert into t (id,a) values (327,12);
+insert into t (id,a) values (327,13);
+insert into t (id,a) values (327,14);
+insert into t (id,a) values (327,15);
+insert into t (id,a) values (327,16);
+insert into t (id,a) values (327,17);
+insert into t (id,a) values (327,18);
+insert into t (id,a) values (327,19);
+insert into t (id,a) values (327,20);
+insert into t (id,a) values (327,21);
+insert into t (id,a) values (327,22);
+insert into t (id,a) values (327,23);
+insert into t (id,a) values (327,24);
+insert into t (id,a) values (327,25);
+insert into t (id,a) values (327,26);
+insert into t (id,a) values (327,27);
+insert into t (id,a) values (327,28);
+insert into t (id,a) values (327,29);
+insert into t (id,a) values (327,30);
+insert into t (id,a) values (327,31);
+insert into t (id,a) values (327,32);
+insert into t (id,a) values (327,33);
+insert into t (id,a) values (327,34);
+insert into t (id,a) values (327,35);
+insert into t (id,a) values (327,36);
+insert into t (id,a) values (327,37);
+insert into t (id,a) values (327,38);
+insert into t (id,a) values (327,39);
+insert into t (id,a) values (327,40);
+insert into t (id,a) values (327,41);
+insert into t (id,a) values (327,42);
+insert into t (id,a) values (327,43);
+insert into t (id,a) values (327,44);
+insert into t (id,a) values (327,45);
+insert into t (id,a) values (327,46);
+insert into t (id,a) values (327,47);
+insert into t (id,a) values (327,48);
+insert into t (id,a) values (327,49);
+insert into t (id,a) values (327,50);
+insert into t (id,a) values (327,51);
+insert into t (id,a) values (327,52);
+insert into t (id,a) values (327,53);
+insert into t (id,a) values (327,54);
+insert into t (id,a) values (327,55);
+insert into t (id,a) values (327,56);
+insert into t (id,a) values (327,57);
+insert into t (id,a) values (327,58);
+insert into t (id,a) values (327,59);
+insert into t (id,a) values (327,60);
+insert into t (id,a) values (327,61);
+insert into t (id,a) values (327,62);
+insert into t (id,a) values (327,63);
+insert into t (id,a) values (327,64);
+insert into t (id,a) values (327,65);
+insert into t (id,a) values (327,66);
+insert into t (id,a) values (327,67);
+insert into t (id,a) values (327,68);
+insert into t (id,a) values (327,69);
+insert into t (id,a) values (327,70);
+insert into t (id,a) values (327,71);
+insert into t (id,a) values (327,72);
+insert into t (id,a) values (327,73);
+insert into t (id,a) values (327,74);
+insert into t (id,a) values (327,75);
+insert into t (id,a) values (327,76);
+insert into t (id,a) values (327,77);
+insert into t (id,a) values (327,78);
+insert into t (id,a) values (327,79);
+insert into t (id,a) values (327,80);
+insert into t (id,a) values (327,81);
+insert into t (id,a) values (327,82);
+insert into t (id,a) values (327,83);
+insert into t (id,a) values (327,84);
+insert into t (id,a) values (327,85);
+insert into t (id,a) values (327,86);
+insert into t (id,a) values (327,87);
+insert into t (id,a) values (327,88);
+insert into t (id,a) values (327,89);
+insert into t (id,a) values (327,90);
+insert into t (id,a) values (327,91);
+insert into t (id,a) values (327,92);
+insert into t (id,a) values (327,93);
+insert into t (id,a) values (327,94);
+insert into t (id,a) values (327,95);
+insert into t (id,a) values (327,96);
+insert into t (id,a) values (327,97);
+insert into t (id,a) values (327,98);
+insert into t (id,a) values (327,99);
+insert into t (id,a) values (328,0);
+insert into t (id,a) values (328,1);
+insert into t (id,a) values (328,2);
+insert into t (id,a) values (328,3);
+insert into t (id,a) values (328,4);
+insert into t (id,a) values (328,5);
+insert into t (id,a) values (328,6);
+insert into t (id,a) values (328,7);
+insert into t (id,a) values (328,8);
+insert into t (id,a) values (328,9);
+insert into t (id,a) values (328,10);
+insert into t (id,a) values (328,11);
+insert into t (id,a) values (328,12);
+insert into t (id,a) values (328,13);
+insert into t (id,a) values (328,14);
+insert into t (id,a) values (328,15);
+insert into t (id,a) values (328,16);
+insert into t (id,a) values (328,17);
+insert into t (id,a) values (328,18);
+insert into t (id,a) values (328,19);
+insert into t (id,a) values (328,20);
+insert into t (id,a) values (328,21);
+insert into t (id,a) values (328,22);
+insert into t (id,a) values (328,23);
+insert into t (id,a) values (328,24);
+insert into t (id,a) values (328,25);
+insert into t (id,a) values (328,26);
+insert into t (id,a) values (328,27);
+insert into t (id,a) values (328,28);
+insert into t (id,a) values (328,29);
+insert into t (id,a) values (328,30);
+insert into t (id,a) values (328,31);
+insert into t (id,a) values (328,32);
+insert into t (id,a) values (328,33);
+insert into t (id,a) values (328,34);
+insert into t (id,a) values (328,35);
+insert into t (id,a) values (328,36);
+insert into t (id,a) values (328,37);
+insert into t (id,a) values (328,38);
+insert into t (id,a) values (328,39);
+insert into t (id,a) values (328,40);
+insert into t (id,a) values (328,41);
+insert into t (id,a) values (328,42);
+insert into t (id,a) values (328,43);
+insert into t (id,a) values (328,44);
+insert into t (id,a) values (328,45);
+insert into t (id,a) values (328,46);
+insert into t (id,a) values (328,47);
+insert into t (id,a) values (328,48);
+insert into t (id,a) values (328,49);
+insert into t (id,a) values (328,50);
+insert into t (id,a) values (328,51);
+insert into t (id,a) values (328,52);
+insert into t (id,a) values (328,53);
+insert into t (id,a) values (328,54);
+insert into t (id,a) values (328,55);
+insert into t (id,a) values (328,56);
+insert into t (id,a) values (328,57);
+insert into t (id,a) values (328,58);
+insert into t (id,a) values (328,59);
+insert into t (id,a) values (328,60);
+insert into t (id,a) values (328,61);
+insert into t (id,a) values (328,62);
+insert into t (id,a) values (328,63);
+insert into t (id,a) values (328,64);
+insert into t (id,a) values (328,65);
+insert into t (id,a) values (328,66);
+insert into t (id,a) values (328,67);
+insert into t (id,a) values (328,68);
+insert into t (id,a) values (328,69);
+insert into t (id,a) values (328,70);
+insert into t (id,a) values (328,71);
+insert into t (id,a) values (328,72);
+insert into t (id,a) values (328,73);
+insert into t (id,a) values (328,74);
+insert into t (id,a) values (328,75);
+insert into t (id,a) values (328,76);
+insert into t (id,a) values (328,77);
+insert into t (id,a) values (328,78);
+insert into t (id,a) values (328,79);
+insert into t (id,a) values (328,80);
+insert into t (id,a) values (328,81);
+insert into t (id,a) values (328,82);
+insert into t (id,a) values (328,83);
+insert into t (id,a) values (328,84);
+insert into t (id,a) values (328,85);
+insert into t (id,a) values (328,86);
+insert into t (id,a) values (328,87);
+insert into t (id,a) values (328,88);
+insert into t (id,a) values (328,89);
+insert into t (id,a) values (328,90);
+insert into t (id,a) values (328,91);
+insert into t (id,a) values (328,92);
+insert into t (id,a) values (328,93);
+insert into t (id,a) values (328,94);
+insert into t (id,a) values (328,95);
+insert into t (id,a) values (328,96);
+insert into t (id,a) values (328,97);
+insert into t (id,a) values (328,98);
+insert into t (id,a) values (328,99);
+insert into t (id,a) values (329,0);
+insert into t (id,a) values (329,1);
+insert into t (id,a) values (329,2);
+insert into t (id,a) values (329,3);
+insert into t (id,a) values (329,4);
+insert into t (id,a) values (329,5);
+insert into t (id,a) values (329,6);
+insert into t (id,a) values (329,7);
+insert into t (id,a) values (329,8);
+insert into t (id,a) values (329,9);
+insert into t (id,a) values (329,10);
+insert into t (id,a) values (329,11);
+insert into t (id,a) values (329,12);
+insert into t (id,a) values (329,13);
+insert into t (id,a) values (329,14);
+insert into t (id,a) values (329,15);
+insert into t (id,a) values (329,16);
+insert into t (id,a) values (329,17);
+insert into t (id,a) values (329,18);
+insert into t (id,a) values (329,19);
+insert into t (id,a) values (329,20);
+insert into t (id,a) values (329,21);
+insert into t (id,a) values (329,22);
+insert into t (id,a) values (329,23);
+insert into t (id,a) values (329,24);
+insert into t (id,a) values (329,25);
+insert into t (id,a) values (329,26);
+insert into t (id,a) values (329,27);
+insert into t (id,a) values (329,28);
+insert into t (id,a) values (329,29);
+insert into t (id,a) values (329,30);
+insert into t (id,a) values (329,31);
+insert into t (id,a) values (329,32);
+insert into t (id,a) values (329,33);
+insert into t (id,a) values (329,34);
+insert into t (id,a) values (329,35);
+insert into t (id,a) values (329,36);
+insert into t (id,a) values (329,37);
+insert into t (id,a) values (329,38);
+insert into t (id,a) values (329,39);
+insert into t (id,a) values (329,40);
+insert into t (id,a) values (329,41);
+insert into t (id,a) values (329,42);
+insert into t (id,a) values (329,43);
+insert into t (id,a) values (329,44);
+insert into t (id,a) values (329,45);
+insert into t (id,a) values (329,46);
+insert into t (id,a) values (329,47);
+insert into t (id,a) values (329,48);
+insert into t (id,a) values (329,49);
+insert into t (id,a) values (329,50);
+insert into t (id,a) values (329,51);
+insert into t (id,a) values (329,52);
+insert into t (id,a) values (329,53);
+insert into t (id,a) values (329,54);
+insert into t (id,a) values (329,55);
+insert into t (id,a) values (329,56);
+insert into t (id,a) values (329,57);
+insert into t (id,a) values (329,58);
+insert into t (id,a) values (329,59);
+insert into t (id,a) values (329,60);
+insert into t (id,a) values (329,61);
+insert into t (id,a) values (329,62);
+insert into t (id,a) values (329,63);
+insert into t (id,a) values (329,64);
+insert into t (id,a) values (329,65);
+insert into t (id,a) values (329,66);
+insert into t (id,a) values (329,67);
+insert into t (id,a) values (329,68);
+insert into t (id,a) values (329,69);
+insert into t (id,a) values (329,70);
+insert into t (id,a) values (329,71);
+insert into t (id,a) values (329,72);
+insert into t (id,a) values (329,73);
+insert into t (id,a) values (329,74);
+insert into t (id,a) values (329,75);
+insert into t (id,a) values (329,76);
+insert into t (id,a) values (329,77);
+insert into t (id,a) values (329,78);
+insert into t (id,a) values (329,79);
+insert into t (id,a) values (329,80);
+insert into t (id,a) values (329,81);
+insert into t (id,a) values (329,82);
+insert into t (id,a) values (329,83);
+insert into t (id,a) values (329,84);
+insert into t (id,a) values (329,85);
+insert into t (id,a) values (329,86);
+insert into t (id,a) values (329,87);
+insert into t (id,a) values (329,88);
+insert into t (id,a) values (329,89);
+insert into t (id,a) values (329,90);
+insert into t (id,a) values (329,91);
+insert into t (id,a) values (329,92);
+insert into t (id,a) values (329,93);
+insert into t (id,a) values (329,94);
+insert into t (id,a) values (329,95);
+insert into t (id,a) values (329,96);
+insert into t (id,a) values (329,97);
+insert into t (id,a) values (329,98);
+insert into t (id,a) values (329,99);
+insert into t (id,a) values (330,0);
+insert into t (id,a) values (330,1);
+insert into t (id,a) values (330,2);
+insert into t (id,a) values (330,3);
+insert into t (id,a) values (330,4);
+insert into t (id,a) values (330,5);
+insert into t (id,a) values (330,6);
+insert into t (id,a) values (330,7);
+insert into t (id,a) values (330,8);
+insert into t (id,a) values (330,9);
+insert into t (id,a) values (330,10);
+insert into t (id,a) values (330,11);
+insert into t (id,a) values (330,12);
+insert into t (id,a) values (330,13);
+insert into t (id,a) values (330,14);
+insert into t (id,a) values (330,15);
+insert into t (id,a) values (330,16);
+insert into t (id,a) values (330,17);
+insert into t (id,a) values (330,18);
+insert into t (id,a) values (330,19);
+insert into t (id,a) values (330,20);
+insert into t (id,a) values (330,21);
+insert into t (id,a) values (330,22);
+insert into t (id,a) values (330,23);
+insert into t (id,a) values (330,24);
+insert into t (id,a) values (330,25);
+insert into t (id,a) values (330,26);
+insert into t (id,a) values (330,27);
+insert into t (id,a) values (330,28);
+insert into t (id,a) values (330,29);
+insert into t (id,a) values (330,30);
+insert into t (id,a) values (330,31);
+insert into t (id,a) values (330,32);
+insert into t (id,a) values (330,33);
+insert into t (id,a) values (330,34);
+insert into t (id,a) values (330,35);
+insert into t (id,a) values (330,36);
+insert into t (id,a) values (330,37);
+insert into t (id,a) values (330,38);
+insert into t (id,a) values (330,39);
+insert into t (id,a) values (330,40);
+insert into t (id,a) values (330,41);
+insert into t (id,a) values (330,42);
+insert into t (id,a) values (330,43);
+insert into t (id,a) values (330,44);
+insert into t (id,a) values (330,45);
+insert into t (id,a) values (330,46);
+insert into t (id,a) values (330,47);
+insert into t (id,a) values (330,48);
+insert into t (id,a) values (330,49);
+insert into t (id,a) values (330,50);
+insert into t (id,a) values (330,51);
+insert into t (id,a) values (330,52);
+insert into t (id,a) values (330,53);
+insert into t (id,a) values (330,54);
+insert into t (id,a) values (330,55);
+insert into t (id,a) values (330,56);
+insert into t (id,a) values (330,57);
+insert into t (id,a) values (330,58);
+insert into t (id,a) values (330,59);
+insert into t (id,a) values (330,60);
+insert into t (id,a) values (330,61);
+insert into t (id,a) values (330,62);
+insert into t (id,a) values (330,63);
+insert into t (id,a) values (330,64);
+insert into t (id,a) values (330,65);
+insert into t (id,a) values (330,66);
+insert into t (id,a) values (330,67);
+insert into t (id,a) values (330,68);
+insert into t (id,a) values (330,69);
+insert into t (id,a) values (330,70);
+insert into t (id,a) values (330,71);
+insert into t (id,a) values (330,72);
+insert into t (id,a) values (330,73);
+insert into t (id,a) values (330,74);
+insert into t (id,a) values (330,75);
+insert into t (id,a) values (330,76);
+insert into t (id,a) values (330,77);
+insert into t (id,a) values (330,78);
+insert into t (id,a) values (330,79);
+insert into t (id,a) values (330,80);
+insert into t (id,a) values (330,81);
+insert into t (id,a) values (330,82);
+insert into t (id,a) values (330,83);
+insert into t (id,a) values (330,84);
+insert into t (id,a) values (330,85);
+insert into t (id,a) values (330,86);
+insert into t (id,a) values (330,87);
+insert into t (id,a) values (330,88);
+insert into t (id,a) values (330,89);
+insert into t (id,a) values (330,90);
+insert into t (id,a) values (330,91);
+insert into t (id,a) values (330,92);
+insert into t (id,a) values (330,93);
+insert into t (id,a) values (330,94);
+insert into t (id,a) values (330,95);
+insert into t (id,a) values (330,96);
+insert into t (id,a) values (330,97);
+insert into t (id,a) values (330,98);
+insert into t (id,a) values (330,99);
+insert into t (id,a) values (331,0);
+insert into t (id,a) values (331,1);
+insert into t (id,a) values (331,2);
+insert into t (id,a) values (331,3);
+insert into t (id,a) values (331,4);
+insert into t (id,a) values (331,5);
+insert into t (id,a) values (331,6);
+insert into t (id,a) values (331,7);
+insert into t (id,a) values (331,8);
+insert into t (id,a) values (331,9);
+insert into t (id,a) values (331,10);
+insert into t (id,a) values (331,11);
+insert into t (id,a) values (331,12);
+insert into t (id,a) values (331,13);
+insert into t (id,a) values (331,14);
+insert into t (id,a) values (331,15);
+insert into t (id,a) values (331,16);
+insert into t (id,a) values (331,17);
+insert into t (id,a) values (331,18);
+insert into t (id,a) values (331,19);
+insert into t (id,a) values (331,20);
+insert into t (id,a) values (331,21);
+insert into t (id,a) values (331,22);
+insert into t (id,a) values (331,23);
+insert into t (id,a) values (331,24);
+insert into t (id,a) values (331,25);
+insert into t (id,a) values (331,26);
+insert into t (id,a) values (331,27);
+insert into t (id,a) values (331,28);
+insert into t (id,a) values (331,29);
+insert into t (id,a) values (331,30);
+insert into t (id,a) values (331,31);
+insert into t (id,a) values (331,32);
+insert into t (id,a) values (331,33);
+insert into t (id,a) values (331,34);
+insert into t (id,a) values (331,35);
+insert into t (id,a) values (331,36);
+insert into t (id,a) values (331,37);
+insert into t (id,a) values (331,38);
+insert into t (id,a) values (331,39);
+insert into t (id,a) values (331,40);
+insert into t (id,a) values (331,41);
+insert into t (id,a) values (331,42);
+insert into t (id,a) values (331,43);
+insert into t (id,a) values (331,44);
+insert into t (id,a) values (331,45);
+insert into t (id,a) values (331,46);
+insert into t (id,a) values (331,47);
+insert into t (id,a) values (331,48);
+insert into t (id,a) values (331,49);
+insert into t (id,a) values (331,50);
+insert into t (id,a) values (331,51);
+insert into t (id,a) values (331,52);
+insert into t (id,a) values (331,53);
+insert into t (id,a) values (331,54);
+insert into t (id,a) values (331,55);
+insert into t (id,a) values (331,56);
+insert into t (id,a) values (331,57);
+insert into t (id,a) values (331,58);
+insert into t (id,a) values (331,59);
+insert into t (id,a) values (331,60);
+insert into t (id,a) values (331,61);
+insert into t (id,a) values (331,62);
+insert into t (id,a) values (331,63);
+insert into t (id,a) values (331,64);
+insert into t (id,a) values (331,65);
+insert into t (id,a) values (331,66);
+insert into t (id,a) values (331,67);
+insert into t (id,a) values (331,68);
+insert into t (id,a) values (331,69);
+insert into t (id,a) values (331,70);
+insert into t (id,a) values (331,71);
+insert into t (id,a) values (331,72);
+insert into t (id,a) values (331,73);
+insert into t (id,a) values (331,74);
+insert into t (id,a) values (331,75);
+insert into t (id,a) values (331,76);
+insert into t (id,a) values (331,77);
+insert into t (id,a) values (331,78);
+insert into t (id,a) values (331,79);
+insert into t (id,a) values (331,80);
+insert into t (id,a) values (331,81);
+insert into t (id,a) values (331,82);
+insert into t (id,a) values (331,83);
+insert into t (id,a) values (331,84);
+insert into t (id,a) values (331,85);
+insert into t (id,a) values (331,86);
+insert into t (id,a) values (331,87);
+insert into t (id,a) values (331,88);
+insert into t (id,a) values (331,89);
+insert into t (id,a) values (331,90);
+insert into t (id,a) values (331,91);
+insert into t (id,a) values (331,92);
+insert into t (id,a) values (331,93);
+insert into t (id,a) values (331,94);
+insert into t (id,a) values (331,95);
+insert into t (id,a) values (331,96);
+insert into t (id,a) values (331,97);
+insert into t (id,a) values (331,98);
+insert into t (id,a) values (331,99);
+insert into t (id,a) values (332,0);
+insert into t (id,a) values (332,1);
+insert into t (id,a) values (332,2);
+insert into t (id,a) values (332,3);
+insert into t (id,a) values (332,4);
+insert into t (id,a) values (332,5);
+insert into t (id,a) values (332,6);
+insert into t (id,a) values (332,7);
+insert into t (id,a) values (332,8);
+insert into t (id,a) values (332,9);
+insert into t (id,a) values (332,10);
+insert into t (id,a) values (332,11);
+insert into t (id,a) values (332,12);
+insert into t (id,a) values (332,13);
+insert into t (id,a) values (332,14);
+insert into t (id,a) values (332,15);
+insert into t (id,a) values (332,16);
+insert into t (id,a) values (332,17);
+insert into t (id,a) values (332,18);
+insert into t (id,a) values (332,19);
+insert into t (id,a) values (332,20);
+insert into t (id,a) values (332,21);
+insert into t (id,a) values (332,22);
+insert into t (id,a) values (332,23);
+insert into t (id,a) values (332,24);
+insert into t (id,a) values (332,25);
+insert into t (id,a) values (332,26);
+insert into t (id,a) values (332,27);
+insert into t (id,a) values (332,28);
+insert into t (id,a) values (332,29);
+insert into t (id,a) values (332,30);
+insert into t (id,a) values (332,31);
+insert into t (id,a) values (332,32);
+insert into t (id,a) values (332,33);
+insert into t (id,a) values (332,34);
+insert into t (id,a) values (332,35);
+insert into t (id,a) values (332,36);
+insert into t (id,a) values (332,37);
+insert into t (id,a) values (332,38);
+insert into t (id,a) values (332,39);
+insert into t (id,a) values (332,40);
+insert into t (id,a) values (332,41);
+insert into t (id,a) values (332,42);
+insert into t (id,a) values (332,43);
+insert into t (id,a) values (332,44);
+insert into t (id,a) values (332,45);
+insert into t (id,a) values (332,46);
+insert into t (id,a) values (332,47);
+insert into t (id,a) values (332,48);
+insert into t (id,a) values (332,49);
+insert into t (id,a) values (332,50);
+insert into t (id,a) values (332,51);
+insert into t (id,a) values (332,52);
+insert into t (id,a) values (332,53);
+insert into t (id,a) values (332,54);
+insert into t (id,a) values (332,55);
+insert into t (id,a) values (332,56);
+insert into t (id,a) values (332,57);
+insert into t (id,a) values (332,58);
+insert into t (id,a) values (332,59);
+insert into t (id,a) values (332,60);
+insert into t (id,a) values (332,61);
+insert into t (id,a) values (332,62);
+insert into t (id,a) values (332,63);
+insert into t (id,a) values (332,64);
+insert into t (id,a) values (332,65);
+insert into t (id,a) values (332,66);
+insert into t (id,a) values (332,67);
+insert into t (id,a) values (332,68);
+insert into t (id,a) values (332,69);
+insert into t (id,a) values (332,70);
+insert into t (id,a) values (332,71);
+insert into t (id,a) values (332,72);
+insert into t (id,a) values (332,73);
+insert into t (id,a) values (332,74);
+insert into t (id,a) values (332,75);
+insert into t (id,a) values (332,76);
+insert into t (id,a) values (332,77);
+insert into t (id,a) values (332,78);
+insert into t (id,a) values (332,79);
+insert into t (id,a) values (332,80);
+insert into t (id,a) values (332,81);
+insert into t (id,a) values (332,82);
+insert into t (id,a) values (332,83);
+insert into t (id,a) values (332,84);
+insert into t (id,a) values (332,85);
+insert into t (id,a) values (332,86);
+insert into t (id,a) values (332,87);
+insert into t (id,a) values (332,88);
+insert into t (id,a) values (332,89);
+insert into t (id,a) values (332,90);
+insert into t (id,a) values (332,91);
+insert into t (id,a) values (332,92);
+insert into t (id,a) values (332,93);
+insert into t (id,a) values (332,94);
+insert into t (id,a) values (332,95);
+insert into t (id,a) values (332,96);
+insert into t (id,a) values (332,97);
+insert into t (id,a) values (332,98);
+insert into t (id,a) values (332,99);
+insert into t (id,a) values (333,0);
+insert into t (id,a) values (333,1);
+insert into t (id,a) values (333,2);
+insert into t (id,a) values (333,3);
+insert into t (id,a) values (333,4);
+insert into t (id,a) values (333,5);
+insert into t (id,a) values (333,6);
+insert into t (id,a) values (333,7);
+insert into t (id,a) values (333,8);
+insert into t (id,a) values (333,9);
+insert into t (id,a) values (333,10);
+insert into t (id,a) values (333,11);
+insert into t (id,a) values (333,12);
+insert into t (id,a) values (333,13);
+insert into t (id,a) values (333,14);
+insert into t (id,a) values (333,15);
+insert into t (id,a) values (333,16);
+insert into t (id,a) values (333,17);
+insert into t (id,a) values (333,18);
+insert into t (id,a) values (333,19);
+insert into t (id,a) values (333,20);
+insert into t (id,a) values (333,21);
+insert into t (id,a) values (333,22);
+insert into t (id,a) values (333,23);
+insert into t (id,a) values (333,24);
+insert into t (id,a) values (333,25);
+insert into t (id,a) values (333,26);
+insert into t (id,a) values (333,27);
+insert into t (id,a) values (333,28);
+insert into t (id,a) values (333,29);
+insert into t (id,a) values (333,30);
+insert into t (id,a) values (333,31);
+insert into t (id,a) values (333,32);
+insert into t (id,a) values (333,33);
+insert into t (id,a) values (333,34);
+insert into t (id,a) values (333,35);
+insert into t (id,a) values (333,36);
+insert into t (id,a) values (333,37);
+insert into t (id,a) values (333,38);
+insert into t (id,a) values (333,39);
+insert into t (id,a) values (333,40);
+insert into t (id,a) values (333,41);
+insert into t (id,a) values (333,42);
+insert into t (id,a) values (333,43);
+insert into t (id,a) values (333,44);
+insert into t (id,a) values (333,45);
+insert into t (id,a) values (333,46);
+insert into t (id,a) values (333,47);
+insert into t (id,a) values (333,48);
+insert into t (id,a) values (333,49);
+insert into t (id,a) values (333,50);
+insert into t (id,a) values (333,51);
+insert into t (id,a) values (333,52);
+insert into t (id,a) values (333,53);
+insert into t (id,a) values (333,54);
+insert into t (id,a) values (333,55);
+insert into t (id,a) values (333,56);
+insert into t (id,a) values (333,57);
+insert into t (id,a) values (333,58);
+insert into t (id,a) values (333,59);
+insert into t (id,a) values (333,60);
+insert into t (id,a) values (333,61);
+insert into t (id,a) values (333,62);
+insert into t (id,a) values (333,63);
+insert into t (id,a) values (333,64);
+insert into t (id,a) values (333,65);
+insert into t (id,a) values (333,66);
+insert into t (id,a) values (333,67);
+insert into t (id,a) values (333,68);
+insert into t (id,a) values (333,69);
+insert into t (id,a) values (333,70);
+insert into t (id,a) values (333,71);
+insert into t (id,a) values (333,72);
+insert into t (id,a) values (333,73);
+insert into t (id,a) values (333,74);
+insert into t (id,a) values (333,75);
+insert into t (id,a) values (333,76);
+insert into t (id,a) values (333,77);
+insert into t (id,a) values (333,78);
+insert into t (id,a) values (333,79);
+insert into t (id,a) values (333,80);
+insert into t (id,a) values (333,81);
+insert into t (id,a) values (333,82);
+insert into t (id,a) values (333,83);
+insert into t (id,a) values (333,84);
+insert into t (id,a) values (333,85);
+insert into t (id,a) values (333,86);
+insert into t (id,a) values (333,87);
+insert into t (id,a) values (333,88);
+insert into t (id,a) values (333,89);
+insert into t (id,a) values (333,90);
+insert into t (id,a) values (333,91);
+insert into t (id,a) values (333,92);
+insert into t (id,a) values (333,93);
+insert into t (id,a) values (333,94);
+insert into t (id,a) values (333,95);
+insert into t (id,a) values (333,96);
+insert into t (id,a) values (333,97);
+insert into t (id,a) values (333,98);
+insert into t (id,a) values (333,99);
+insert into t (id,a) values (334,0);
+insert into t (id,a) values (334,1);
+insert into t (id,a) values (334,2);
+insert into t (id,a) values (334,3);
+insert into t (id,a) values (334,4);
+insert into t (id,a) values (334,5);
+insert into t (id,a) values (334,6);
+insert into t (id,a) values (334,7);
+insert into t (id,a) values (334,8);
+insert into t (id,a) values (334,9);
+insert into t (id,a) values (334,10);
+insert into t (id,a) values (334,11);
+insert into t (id,a) values (334,12);
+insert into t (id,a) values (334,13);
+insert into t (id,a) values (334,14);
+insert into t (id,a) values (334,15);
+insert into t (id,a) values (334,16);
+insert into t (id,a) values (334,17);
+insert into t (id,a) values (334,18);
+insert into t (id,a) values (334,19);
+insert into t (id,a) values (334,20);
+insert into t (id,a) values (334,21);
+insert into t (id,a) values (334,22);
+insert into t (id,a) values (334,23);
+insert into t (id,a) values (334,24);
+insert into t (id,a) values (334,25);
+insert into t (id,a) values (334,26);
+insert into t (id,a) values (334,27);
+insert into t (id,a) values (334,28);
+insert into t (id,a) values (334,29);
+insert into t (id,a) values (334,30);
+insert into t (id,a) values (334,31);
+insert into t (id,a) values (334,32);
+insert into t (id,a) values (334,33);
+insert into t (id,a) values (334,34);
+insert into t (id,a) values (334,35);
+insert into t (id,a) values (334,36);
+insert into t (id,a) values (334,37);
+insert into t (id,a) values (334,38);
+insert into t (id,a) values (334,39);
+insert into t (id,a) values (334,40);
+insert into t (id,a) values (334,41);
+insert into t (id,a) values (334,42);
+insert into t (id,a) values (334,43);
+insert into t (id,a) values (334,44);
+insert into t (id,a) values (334,45);
+insert into t (id,a) values (334,46);
+insert into t (id,a) values (334,47);
+insert into t (id,a) values (334,48);
+insert into t (id,a) values (334,49);
+insert into t (id,a) values (334,50);
+insert into t (id,a) values (334,51);
+insert into t (id,a) values (334,52);
+insert into t (id,a) values (334,53);
+insert into t (id,a) values (334,54);
+insert into t (id,a) values (334,55);
+insert into t (id,a) values (334,56);
+insert into t (id,a) values (334,57);
+insert into t (id,a) values (334,58);
+insert into t (id,a) values (334,59);
+insert into t (id,a) values (334,60);
+insert into t (id,a) values (334,61);
+insert into t (id,a) values (334,62);
+insert into t (id,a) values (334,63);
+insert into t (id,a) values (334,64);
+insert into t (id,a) values (334,65);
+insert into t (id,a) values (334,66);
+insert into t (id,a) values (334,67);
+insert into t (id,a) values (334,68);
+insert into t (id,a) values (334,69);
+insert into t (id,a) values (334,70);
+insert into t (id,a) values (334,71);
+insert into t (id,a) values (334,72);
+insert into t (id,a) values (334,73);
+insert into t (id,a) values (334,74);
+insert into t (id,a) values (334,75);
+insert into t (id,a) values (334,76);
+insert into t (id,a) values (334,77);
+insert into t (id,a) values (334,78);
+insert into t (id,a) values (334,79);
+insert into t (id,a) values (334,80);
+insert into t (id,a) values (334,81);
+insert into t (id,a) values (334,82);
+insert into t (id,a) values (334,83);
+insert into t (id,a) values (334,84);
+insert into t (id,a) values (334,85);
+insert into t (id,a) values (334,86);
+insert into t (id,a) values (334,87);
+insert into t (id,a) values (334,88);
+insert into t (id,a) values (334,89);
+insert into t (id,a) values (334,90);
+insert into t (id,a) values (334,91);
+insert into t (id,a) values (334,92);
+insert into t (id,a) values (334,93);
+insert into t (id,a) values (334,94);
+insert into t (id,a) values (334,95);
+insert into t (id,a) values (334,96);
+insert into t (id,a) values (334,97);
+insert into t (id,a) values (334,98);
+insert into t (id,a) values (334,99);
+insert into t (id,a) values (335,0);
+insert into t (id,a) values (335,1);
+insert into t (id,a) values (335,2);
+insert into t (id,a) values (335,3);
+insert into t (id,a) values (335,4);
+insert into t (id,a) values (335,5);
+insert into t (id,a) values (335,6);
+insert into t (id,a) values (335,7);
+insert into t (id,a) values (335,8);
+insert into t (id,a) values (335,9);
+insert into t (id,a) values (335,10);
+insert into t (id,a) values (335,11);
+insert into t (id,a) values (335,12);
+insert into t (id,a) values (335,13);
+insert into t (id,a) values (335,14);
+insert into t (id,a) values (335,15);
+insert into t (id,a) values (335,16);
+insert into t (id,a) values (335,17);
+insert into t (id,a) values (335,18);
+insert into t (id,a) values (335,19);
+insert into t (id,a) values (335,20);
+insert into t (id,a) values (335,21);
+insert into t (id,a) values (335,22);
+insert into t (id,a) values (335,23);
+insert into t (id,a) values (335,24);
+insert into t (id,a) values (335,25);
+insert into t (id,a) values (335,26);
+insert into t (id,a) values (335,27);
+insert into t (id,a) values (335,28);
+insert into t (id,a) values (335,29);
+insert into t (id,a) values (335,30);
+insert into t (id,a) values (335,31);
+insert into t (id,a) values (335,32);
+insert into t (id,a) values (335,33);
+insert into t (id,a) values (335,34);
+insert into t (id,a) values (335,35);
+insert into t (id,a) values (335,36);
+insert into t (id,a) values (335,37);
+insert into t (id,a) values (335,38);
+insert into t (id,a) values (335,39);
+insert into t (id,a) values (335,40);
+insert into t (id,a) values (335,41);
+insert into t (id,a) values (335,42);
+insert into t (id,a) values (335,43);
+insert into t (id,a) values (335,44);
+insert into t (id,a) values (335,45);
+insert into t (id,a) values (335,46);
+insert into t (id,a) values (335,47);
+insert into t (id,a) values (335,48);
+insert into t (id,a) values (335,49);
+insert into t (id,a) values (335,50);
+insert into t (id,a) values (335,51);
+insert into t (id,a) values (335,52);
+insert into t (id,a) values (335,53);
+insert into t (id,a) values (335,54);
+insert into t (id,a) values (335,55);
+insert into t (id,a) values (335,56);
+insert into t (id,a) values (335,57);
+insert into t (id,a) values (335,58);
+insert into t (id,a) values (335,59);
+insert into t (id,a) values (335,60);
+insert into t (id,a) values (335,61);
+insert into t (id,a) values (335,62);
+insert into t (id,a) values (335,63);
+insert into t (id,a) values (335,64);
+insert into t (id,a) values (335,65);
+insert into t (id,a) values (335,66);
+insert into t (id,a) values (335,67);
+insert into t (id,a) values (335,68);
+insert into t (id,a) values (335,69);
+insert into t (id,a) values (335,70);
+insert into t (id,a) values (335,71);
+insert into t (id,a) values (335,72);
+insert into t (id,a) values (335,73);
+insert into t (id,a) values (335,74);
+insert into t (id,a) values (335,75);
+insert into t (id,a) values (335,76);
+insert into t (id,a) values (335,77);
+insert into t (id,a) values (335,78);
+insert into t (id,a) values (335,79);
+insert into t (id,a) values (335,80);
+insert into t (id,a) values (335,81);
+insert into t (id,a) values (335,82);
+insert into t (id,a) values (335,83);
+insert into t (id,a) values (335,84);
+insert into t (id,a) values (335,85);
+insert into t (id,a) values (335,86);
+insert into t (id,a) values (335,87);
+insert into t (id,a) values (335,88);
+insert into t (id,a) values (335,89);
+insert into t (id,a) values (335,90);
+insert into t (id,a) values (335,91);
+insert into t (id,a) values (335,92);
+insert into t (id,a) values (335,93);
+insert into t (id,a) values (335,94);
+insert into t (id,a) values (335,95);
+insert into t (id,a) values (335,96);
+insert into t (id,a) values (335,97);
+insert into t (id,a) values (335,98);
+insert into t (id,a) values (335,99);
+insert into t (id,a) values (336,0);
+insert into t (id,a) values (336,1);
+insert into t (id,a) values (336,2);
+insert into t (id,a) values (336,3);
+insert into t (id,a) values (336,4);
+insert into t (id,a) values (336,5);
+insert into t (id,a) values (336,6);
+insert into t (id,a) values (336,7);
+insert into t (id,a) values (336,8);
+insert into t (id,a) values (336,9);
+insert into t (id,a) values (336,10);
+insert into t (id,a) values (336,11);
+insert into t (id,a) values (336,12);
+insert into t (id,a) values (336,13);
+insert into t (id,a) values (336,14);
+insert into t (id,a) values (336,15);
+insert into t (id,a) values (336,16);
+insert into t (id,a) values (336,17);
+insert into t (id,a) values (336,18);
+insert into t (id,a) values (336,19);
+insert into t (id,a) values (336,20);
+insert into t (id,a) values (336,21);
+insert into t (id,a) values (336,22);
+insert into t (id,a) values (336,23);
+insert into t (id,a) values (336,24);
+insert into t (id,a) values (336,25);
+insert into t (id,a) values (336,26);
+insert into t (id,a) values (336,27);
+insert into t (id,a) values (336,28);
+insert into t (id,a) values (336,29);
+insert into t (id,a) values (336,30);
+insert into t (id,a) values (336,31);
+insert into t (id,a) values (336,32);
+insert into t (id,a) values (336,33);
+insert into t (id,a) values (336,34);
+insert into t (id,a) values (336,35);
+insert into t (id,a) values (336,36);
+insert into t (id,a) values (336,37);
+insert into t (id,a) values (336,38);
+insert into t (id,a) values (336,39);
+insert into t (id,a) values (336,40);
+insert into t (id,a) values (336,41);
+insert into t (id,a) values (336,42);
+insert into t (id,a) values (336,43);
+insert into t (id,a) values (336,44);
+insert into t (id,a) values (336,45);
+insert into t (id,a) values (336,46);
+insert into t (id,a) values (336,47);
+insert into t (id,a) values (336,48);
+insert into t (id,a) values (336,49);
+insert into t (id,a) values (336,50);
+insert into t (id,a) values (336,51);
+insert into t (id,a) values (336,52);
+insert into t (id,a) values (336,53);
+insert into t (id,a) values (336,54);
+insert into t (id,a) values (336,55);
+insert into t (id,a) values (336,56);
+insert into t (id,a) values (336,57);
+insert into t (id,a) values (336,58);
+insert into t (id,a) values (336,59);
+insert into t (id,a) values (336,60);
+insert into t (id,a) values (336,61);
+insert into t (id,a) values (336,62);
+insert into t (id,a) values (336,63);
+insert into t (id,a) values (336,64);
+insert into t (id,a) values (336,65);
+insert into t (id,a) values (336,66);
+insert into t (id,a) values (336,67);
+insert into t (id,a) values (336,68);
+insert into t (id,a) values (336,69);
+insert into t (id,a) values (336,70);
+insert into t (id,a) values (336,71);
+insert into t (id,a) values (336,72);
+insert into t (id,a) values (336,73);
+insert into t (id,a) values (336,74);
+insert into t (id,a) values (336,75);
+insert into t (id,a) values (336,76);
+insert into t (id,a) values (336,77);
+insert into t (id,a) values (336,78);
+insert into t (id,a) values (336,79);
+insert into t (id,a) values (336,80);
+insert into t (id,a) values (336,81);
+insert into t (id,a) values (336,82);
+insert into t (id,a) values (336,83);
+insert into t (id,a) values (336,84);
+insert into t (id,a) values (336,85);
+insert into t (id,a) values (336,86);
+insert into t (id,a) values (336,87);
+insert into t (id,a) values (336,88);
+insert into t (id,a) values (336,89);
+insert into t (id,a) values (336,90);
+insert into t (id,a) values (336,91);
+insert into t (id,a) values (336,92);
+insert into t (id,a) values (336,93);
+insert into t (id,a) values (336,94);
+insert into t (id,a) values (336,95);
+insert into t (id,a) values (336,96);
+insert into t (id,a) values (336,97);
+insert into t (id,a) values (336,98);
+insert into t (id,a) values (336,99);
+insert into t (id,a) values (337,0);
+insert into t (id,a) values (337,1);
+insert into t (id,a) values (337,2);
+insert into t (id,a) values (337,3);
+insert into t (id,a) values (337,4);
+insert into t (id,a) values (337,5);
+insert into t (id,a) values (337,6);
+insert into t (id,a) values (337,7);
+insert into t (id,a) values (337,8);
+insert into t (id,a) values (337,9);
+insert into t (id,a) values (337,10);
+insert into t (id,a) values (337,11);
+insert into t (id,a) values (337,12);
+insert into t (id,a) values (337,13);
+insert into t (id,a) values (337,14);
+insert into t (id,a) values (337,15);
+insert into t (id,a) values (337,16);
+insert into t (id,a) values (337,17);
+insert into t (id,a) values (337,18);
+insert into t (id,a) values (337,19);
+insert into t (id,a) values (337,20);
+insert into t (id,a) values (337,21);
+insert into t (id,a) values (337,22);
+insert into t (id,a) values (337,23);
+insert into t (id,a) values (337,24);
+insert into t (id,a) values (337,25);
+insert into t (id,a) values (337,26);
+insert into t (id,a) values (337,27);
+insert into t (id,a) values (337,28);
+insert into t (id,a) values (337,29);
+insert into t (id,a) values (337,30);
+insert into t (id,a) values (337,31);
+insert into t (id,a) values (337,32);
+insert into t (id,a) values (337,33);
+insert into t (id,a) values (337,34);
+insert into t (id,a) values (337,35);
+insert into t (id,a) values (337,36);
+insert into t (id,a) values (337,37);
+insert into t (id,a) values (337,38);
+insert into t (id,a) values (337,39);
+insert into t (id,a) values (337,40);
+insert into t (id,a) values (337,41);
+insert into t (id,a) values (337,42);
+insert into t (id,a) values (337,43);
+insert into t (id,a) values (337,44);
+insert into t (id,a) values (337,45);
+insert into t (id,a) values (337,46);
+insert into t (id,a) values (337,47);
+insert into t (id,a) values (337,48);
+insert into t (id,a) values (337,49);
+insert into t (id,a) values (337,50);
+insert into t (id,a) values (337,51);
+insert into t (id,a) values (337,52);
+insert into t (id,a) values (337,53);
+insert into t (id,a) values (337,54);
+insert into t (id,a) values (337,55);
+insert into t (id,a) values (337,56);
+insert into t (id,a) values (337,57);
+insert into t (id,a) values (337,58);
+insert into t (id,a) values (337,59);
+insert into t (id,a) values (337,60);
+insert into t (id,a) values (337,61);
+insert into t (id,a) values (337,62);
+insert into t (id,a) values (337,63);
+insert into t (id,a) values (337,64);
+insert into t (id,a) values (337,65);
+insert into t (id,a) values (337,66);
+insert into t (id,a) values (337,67);
+insert into t (id,a) values (337,68);
+insert into t (id,a) values (337,69);
+insert into t (id,a) values (337,70);
+insert into t (id,a) values (337,71);
+insert into t (id,a) values (337,72);
+insert into t (id,a) values (337,73);
+insert into t (id,a) values (337,74);
+insert into t (id,a) values (337,75);
+insert into t (id,a) values (337,76);
+insert into t (id,a) values (337,77);
+insert into t (id,a) values (337,78);
+insert into t (id,a) values (337,79);
+insert into t (id,a) values (337,80);
+insert into t (id,a) values (337,81);
+insert into t (id,a) values (337,82);
+insert into t (id,a) values (337,83);
+insert into t (id,a) values (337,84);
+insert into t (id,a) values (337,85);
+insert into t (id,a) values (337,86);
+insert into t (id,a) values (337,87);
+insert into t (id,a) values (337,88);
+insert into t (id,a) values (337,89);
+insert into t (id,a) values (337,90);
+insert into t (id,a) values (337,91);
+insert into t (id,a) values (337,92);
+insert into t (id,a) values (337,93);
+insert into t (id,a) values (337,94);
+insert into t (id,a) values (337,95);
+insert into t (id,a) values (337,96);
+insert into t (id,a) values (337,97);
+insert into t (id,a) values (337,98);
+insert into t (id,a) values (337,99);
+insert into t (id,a) values (338,0);
+insert into t (id,a) values (338,1);
+insert into t (id,a) values (338,2);
+insert into t (id,a) values (338,3);
+insert into t (id,a) values (338,4);
+insert into t (id,a) values (338,5);
+insert into t (id,a) values (338,6);
+insert into t (id,a) values (338,7);
+insert into t (id,a) values (338,8);
+insert into t (id,a) values (338,9);
+insert into t (id,a) values (338,10);
+insert into t (id,a) values (338,11);
+insert into t (id,a) values (338,12);
+insert into t (id,a) values (338,13);
+insert into t (id,a) values (338,14);
+insert into t (id,a) values (338,15);
+insert into t (id,a) values (338,16);
+insert into t (id,a) values (338,17);
+insert into t (id,a) values (338,18);
+insert into t (id,a) values (338,19);
+insert into t (id,a) values (338,20);
+insert into t (id,a) values (338,21);
+insert into t (id,a) values (338,22);
+insert into t (id,a) values (338,23);
+insert into t (id,a) values (338,24);
+insert into t (id,a) values (338,25);
+insert into t (id,a) values (338,26);
+insert into t (id,a) values (338,27);
+insert into t (id,a) values (338,28);
+insert into t (id,a) values (338,29);
+insert into t (id,a) values (338,30);
+insert into t (id,a) values (338,31);
+insert into t (id,a) values (338,32);
+insert into t (id,a) values (338,33);
+insert into t (id,a) values (338,34);
+insert into t (id,a) values (338,35);
+insert into t (id,a) values (338,36);
+insert into t (id,a) values (338,37);
+insert into t (id,a) values (338,38);
+insert into t (id,a) values (338,39);
+insert into t (id,a) values (338,40);
+insert into t (id,a) values (338,41);
+insert into t (id,a) values (338,42);
+insert into t (id,a) values (338,43);
+insert into t (id,a) values (338,44);
+insert into t (id,a) values (338,45);
+insert into t (id,a) values (338,46);
+insert into t (id,a) values (338,47);
+insert into t (id,a) values (338,48);
+insert into t (id,a) values (338,49);
+insert into t (id,a) values (338,50);
+insert into t (id,a) values (338,51);
+insert into t (id,a) values (338,52);
+insert into t (id,a) values (338,53);
+insert into t (id,a) values (338,54);
+insert into t (id,a) values (338,55);
+insert into t (id,a) values (338,56);
+insert into t (id,a) values (338,57);
+insert into t (id,a) values (338,58);
+insert into t (id,a) values (338,59);
+insert into t (id,a) values (338,60);
+insert into t (id,a) values (338,61);
+insert into t (id,a) values (338,62);
+insert into t (id,a) values (338,63);
+insert into t (id,a) values (338,64);
+insert into t (id,a) values (338,65);
+insert into t (id,a) values (338,66);
+insert into t (id,a) values (338,67);
+insert into t (id,a) values (338,68);
+insert into t (id,a) values (338,69);
+insert into t (id,a) values (338,70);
+insert into t (id,a) values (338,71);
+insert into t (id,a) values (338,72);
+insert into t (id,a) values (338,73);
+insert into t (id,a) values (338,74);
+insert into t (id,a) values (338,75);
+insert into t (id,a) values (338,76);
+insert into t (id,a) values (338,77);
+insert into t (id,a) values (338,78);
+insert into t (id,a) values (338,79);
+insert into t (id,a) values (338,80);
+insert into t (id,a) values (338,81);
+insert into t (id,a) values (338,82);
+insert into t (id,a) values (338,83);
+insert into t (id,a) values (338,84);
+insert into t (id,a) values (338,85);
+insert into t (id,a) values (338,86);
+insert into t (id,a) values (338,87);
+insert into t (id,a) values (338,88);
+insert into t (id,a) values (338,89);
+insert into t (id,a) values (338,90);
+insert into t (id,a) values (338,91);
+insert into t (id,a) values (338,92);
+insert into t (id,a) values (338,93);
+insert into t (id,a) values (338,94);
+insert into t (id,a) values (338,95);
+insert into t (id,a) values (338,96);
+insert into t (id,a) values (338,97);
+insert into t (id,a) values (338,98);
+insert into t (id,a) values (338,99);
+insert into t (id,a) values (339,0);
+insert into t (id,a) values (339,1);
+insert into t (id,a) values (339,2);
+insert into t (id,a) values (339,3);
+insert into t (id,a) values (339,4);
+insert into t (id,a) values (339,5);
+insert into t (id,a) values (339,6);
+insert into t (id,a) values (339,7);
+insert into t (id,a) values (339,8);
+insert into t (id,a) values (339,9);
+insert into t (id,a) values (339,10);
+insert into t (id,a) values (339,11);
+insert into t (id,a) values (339,12);
+insert into t (id,a) values (339,13);
+insert into t (id,a) values (339,14);
+insert into t (id,a) values (339,15);
+insert into t (id,a) values (339,16);
+insert into t (id,a) values (339,17);
+insert into t (id,a) values (339,18);
+insert into t (id,a) values (339,19);
+insert into t (id,a) values (339,20);
+insert into t (id,a) values (339,21);
+insert into t (id,a) values (339,22);
+insert into t (id,a) values (339,23);
+insert into t (id,a) values (339,24);
+insert into t (id,a) values (339,25);
+insert into t (id,a) values (339,26);
+insert into t (id,a) values (339,27);
+insert into t (id,a) values (339,28);
+insert into t (id,a) values (339,29);
+insert into t (id,a) values (339,30);
+insert into t (id,a) values (339,31);
+insert into t (id,a) values (339,32);
+insert into t (id,a) values (339,33);
+insert into t (id,a) values (339,34);
+insert into t (id,a) values (339,35);
+insert into t (id,a) values (339,36);
+insert into t (id,a) values (339,37);
+insert into t (id,a) values (339,38);
+insert into t (id,a) values (339,39);
+insert into t (id,a) values (339,40);
+insert into t (id,a) values (339,41);
+insert into t (id,a) values (339,42);
+insert into t (id,a) values (339,43);
+insert into t (id,a) values (339,44);
+insert into t (id,a) values (339,45);
+insert into t (id,a) values (339,46);
+insert into t (id,a) values (339,47);
+insert into t (id,a) values (339,48);
+insert into t (id,a) values (339,49);
+insert into t (id,a) values (339,50);
+insert into t (id,a) values (339,51);
+insert into t (id,a) values (339,52);
+insert into t (id,a) values (339,53);
+insert into t (id,a) values (339,54);
+insert into t (id,a) values (339,55);
+insert into t (id,a) values (339,56);
+insert into t (id,a) values (339,57);
+insert into t (id,a) values (339,58);
+insert into t (id,a) values (339,59);
+insert into t (id,a) values (339,60);
+insert into t (id,a) values (339,61);
+insert into t (id,a) values (339,62);
+insert into t (id,a) values (339,63);
+insert into t (id,a) values (339,64);
+insert into t (id,a) values (339,65);
+insert into t (id,a) values (339,66);
+insert into t (id,a) values (339,67);
+insert into t (id,a) values (339,68);
+insert into t (id,a) values (339,69);
+insert into t (id,a) values (339,70);
+insert into t (id,a) values (339,71);
+insert into t (id,a) values (339,72);
+insert into t (id,a) values (339,73);
+insert into t (id,a) values (339,74);
+insert into t (id,a) values (339,75);
+insert into t (id,a) values (339,76);
+insert into t (id,a) values (339,77);
+insert into t (id,a) values (339,78);
+insert into t (id,a) values (339,79);
+insert into t (id,a) values (339,80);
+insert into t (id,a) values (339,81);
+insert into t (id,a) values (339,82);
+insert into t (id,a) values (339,83);
+insert into t (id,a) values (339,84);
+insert into t (id,a) values (339,85);
+insert into t (id,a) values (339,86);
+insert into t (id,a) values (339,87);
+insert into t (id,a) values (339,88);
+insert into t (id,a) values (339,89);
+insert into t (id,a) values (339,90);
+insert into t (id,a) values (339,91);
+insert into t (id,a) values (339,92);
+insert into t (id,a) values (339,93);
+insert into t (id,a) values (339,94);
+insert into t (id,a) values (339,95);
+insert into t (id,a) values (339,96);
+insert into t (id,a) values (339,97);
+insert into t (id,a) values (339,98);
+insert into t (id,a) values (339,99);
+insert into t (id,a) values (340,0);
+insert into t (id,a) values (340,1);
+insert into t (id,a) values (340,2);
+insert into t (id,a) values (340,3);
+insert into t (id,a) values (340,4);
+insert into t (id,a) values (340,5);
+insert into t (id,a) values (340,6);
+insert into t (id,a) values (340,7);
+insert into t (id,a) values (340,8);
+insert into t (id,a) values (340,9);
+insert into t (id,a) values (340,10);
+insert into t (id,a) values (340,11);
+insert into t (id,a) values (340,12);
+insert into t (id,a) values (340,13);
+insert into t (id,a) values (340,14);
+insert into t (id,a) values (340,15);
+insert into t (id,a) values (340,16);
+insert into t (id,a) values (340,17);
+insert into t (id,a) values (340,18);
+insert into t (id,a) values (340,19);
+insert into t (id,a) values (340,20);
+insert into t (id,a) values (340,21);
+insert into t (id,a) values (340,22);
+insert into t (id,a) values (340,23);
+insert into t (id,a) values (340,24);
+insert into t (id,a) values (340,25);
+insert into t (id,a) values (340,26);
+insert into t (id,a) values (340,27);
+insert into t (id,a) values (340,28);
+insert into t (id,a) values (340,29);
+insert into t (id,a) values (340,30);
+insert into t (id,a) values (340,31);
+insert into t (id,a) values (340,32);
+insert into t (id,a) values (340,33);
+insert into t (id,a) values (340,34);
+insert into t (id,a) values (340,35);
+insert into t (id,a) values (340,36);
+insert into t (id,a) values (340,37);
+insert into t (id,a) values (340,38);
+insert into t (id,a) values (340,39);
+insert into t (id,a) values (340,40);
+insert into t (id,a) values (340,41);
+insert into t (id,a) values (340,42);
+insert into t (id,a) values (340,43);
+insert into t (id,a) values (340,44);
+insert into t (id,a) values (340,45);
+insert into t (id,a) values (340,46);
+insert into t (id,a) values (340,47);
+insert into t (id,a) values (340,48);
+insert into t (id,a) values (340,49);
+insert into t (id,a) values (340,50);
+insert into t (id,a) values (340,51);
+insert into t (id,a) values (340,52);
+insert into t (id,a) values (340,53);
+insert into t (id,a) values (340,54);
+insert into t (id,a) values (340,55);
+insert into t (id,a) values (340,56);
+insert into t (id,a) values (340,57);
+insert into t (id,a) values (340,58);
+insert into t (id,a) values (340,59);
+insert into t (id,a) values (340,60);
+insert into t (id,a) values (340,61);
+insert into t (id,a) values (340,62);
+insert into t (id,a) values (340,63);
+insert into t (id,a) values (340,64);
+insert into t (id,a) values (340,65);
+insert into t (id,a) values (340,66);
+insert into t (id,a) values (340,67);
+insert into t (id,a) values (340,68);
+insert into t (id,a) values (340,69);
+insert into t (id,a) values (340,70);
+insert into t (id,a) values (340,71);
+insert into t (id,a) values (340,72);
+insert into t (id,a) values (340,73);
+insert into t (id,a) values (340,74);
+insert into t (id,a) values (340,75);
+insert into t (id,a) values (340,76);
+insert into t (id,a) values (340,77);
+insert into t (id,a) values (340,78);
+insert into t (id,a) values (340,79);
+insert into t (id,a) values (340,80);
+insert into t (id,a) values (340,81);
+insert into t (id,a) values (340,82);
+insert into t (id,a) values (340,83);
+insert into t (id,a) values (340,84);
+insert into t (id,a) values (340,85);
+insert into t (id,a) values (340,86);
+insert into t (id,a) values (340,87);
+insert into t (id,a) values (340,88);
+insert into t (id,a) values (340,89);
+insert into t (id,a) values (340,90);
+insert into t (id,a) values (340,91);
+insert into t (id,a) values (340,92);
+insert into t (id,a) values (340,93);
+insert into t (id,a) values (340,94);
+insert into t (id,a) values (340,95);
+insert into t (id,a) values (340,96);
+insert into t (id,a) values (340,97);
+insert into t (id,a) values (340,98);
+insert into t (id,a) values (340,99);
+insert into t (id,a) values (341,0);
+insert into t (id,a) values (341,1);
+insert into t (id,a) values (341,2);
+insert into t (id,a) values (341,3);
+insert into t (id,a) values (341,4);
+insert into t (id,a) values (341,5);
+insert into t (id,a) values (341,6);
+insert into t (id,a) values (341,7);
+insert into t (id,a) values (341,8);
+insert into t (id,a) values (341,9);
+insert into t (id,a) values (341,10);
+insert into t (id,a) values (341,11);
+insert into t (id,a) values (341,12);
+insert into t (id,a) values (341,13);
+insert into t (id,a) values (341,14);
+insert into t (id,a) values (341,15);
+insert into t (id,a) values (341,16);
+insert into t (id,a) values (341,17);
+insert into t (id,a) values (341,18);
+insert into t (id,a) values (341,19);
+insert into t (id,a) values (341,20);
+insert into t (id,a) values (341,21);
+insert into t (id,a) values (341,22);
+insert into t (id,a) values (341,23);
+insert into t (id,a) values (341,24);
+insert into t (id,a) values (341,25);
+insert into t (id,a) values (341,26);
+insert into t (id,a) values (341,27);
+insert into t (id,a) values (341,28);
+insert into t (id,a) values (341,29);
+insert into t (id,a) values (341,30);
+insert into t (id,a) values (341,31);
+insert into t (id,a) values (341,32);
+insert into t (id,a) values (341,33);
+insert into t (id,a) values (341,34);
+insert into t (id,a) values (341,35);
+insert into t (id,a) values (341,36);
+insert into t (id,a) values (341,37);
+insert into t (id,a) values (341,38);
+insert into t (id,a) values (341,39);
+insert into t (id,a) values (341,40);
+insert into t (id,a) values (341,41);
+insert into t (id,a) values (341,42);
+insert into t (id,a) values (341,43);
+insert into t (id,a) values (341,44);
+insert into t (id,a) values (341,45);
+insert into t (id,a) values (341,46);
+insert into t (id,a) values (341,47);
+insert into t (id,a) values (341,48);
+insert into t (id,a) values (341,49);
+insert into t (id,a) values (341,50);
+insert into t (id,a) values (341,51);
+insert into t (id,a) values (341,52);
+insert into t (id,a) values (341,53);
+insert into t (id,a) values (341,54);
+insert into t (id,a) values (341,55);
+insert into t (id,a) values (341,56);
+insert into t (id,a) values (341,57);
+insert into t (id,a) values (341,58);
+insert into t (id,a) values (341,59);
+insert into t (id,a) values (341,60);
+insert into t (id,a) values (341,61);
+insert into t (id,a) values (341,62);
+insert into t (id,a) values (341,63);
+insert into t (id,a) values (341,64);
+insert into t (id,a) values (341,65);
+insert into t (id,a) values (341,66);
+insert into t (id,a) values (341,67);
+insert into t (id,a) values (341,68);
+insert into t (id,a) values (341,69);
+insert into t (id,a) values (341,70);
+insert into t (id,a) values (341,71);
+insert into t (id,a) values (341,72);
+insert into t (id,a) values (341,73);
+insert into t (id,a) values (341,74);
+insert into t (id,a) values (341,75);
+insert into t (id,a) values (341,76);
+insert into t (id,a) values (341,77);
+insert into t (id,a) values (341,78);
+insert into t (id,a) values (341,79);
+insert into t (id,a) values (341,80);
+insert into t (id,a) values (341,81);
+insert into t (id,a) values (341,82);
+insert into t (id,a) values (341,83);
+insert into t (id,a) values (341,84);
+insert into t (id,a) values (341,85);
+insert into t (id,a) values (341,86);
+insert into t (id,a) values (341,87);
+insert into t (id,a) values (341,88);
+insert into t (id,a) values (341,89);
+insert into t (id,a) values (341,90);
+insert into t (id,a) values (341,91);
+insert into t (id,a) values (341,92);
+insert into t (id,a) values (341,93);
+insert into t (id,a) values (341,94);
+insert into t (id,a) values (341,95);
+insert into t (id,a) values (341,96);
+insert into t (id,a) values (341,97);
+insert into t (id,a) values (341,98);
+insert into t (id,a) values (341,99);
+insert into t (id,a) values (342,0);
+insert into t (id,a) values (342,1);
+insert into t (id,a) values (342,2);
+insert into t (id,a) values (342,3);
+insert into t (id,a) values (342,4);
+insert into t (id,a) values (342,5);
+insert into t (id,a) values (342,6);
+insert into t (id,a) values (342,7);
+insert into t (id,a) values (342,8);
+insert into t (id,a) values (342,9);
+insert into t (id,a) values (342,10);
+insert into t (id,a) values (342,11);
+insert into t (id,a) values (342,12);
+insert into t (id,a) values (342,13);
+insert into t (id,a) values (342,14);
+insert into t (id,a) values (342,15);
+insert into t (id,a) values (342,16);
+insert into t (id,a) values (342,17);
+insert into t (id,a) values (342,18);
+insert into t (id,a) values (342,19);
+insert into t (id,a) values (342,20);
+insert into t (id,a) values (342,21);
+insert into t (id,a) values (342,22);
+insert into t (id,a) values (342,23);
+insert into t (id,a) values (342,24);
+insert into t (id,a) values (342,25);
+insert into t (id,a) values (342,26);
+insert into t (id,a) values (342,27);
+insert into t (id,a) values (342,28);
+insert into t (id,a) values (342,29);
+insert into t (id,a) values (342,30);
+insert into t (id,a) values (342,31);
+insert into t (id,a) values (342,32);
+insert into t (id,a) values (342,33);
+insert into t (id,a) values (342,34);
+insert into t (id,a) values (342,35);
+insert into t (id,a) values (342,36);
+insert into t (id,a) values (342,37);
+insert into t (id,a) values (342,38);
+insert into t (id,a) values (342,39);
+insert into t (id,a) values (342,40);
+insert into t (id,a) values (342,41);
+insert into t (id,a) values (342,42);
+insert into t (id,a) values (342,43);
+insert into t (id,a) values (342,44);
+insert into t (id,a) values (342,45);
+insert into t (id,a) values (342,46);
+insert into t (id,a) values (342,47);
+insert into t (id,a) values (342,48);
+insert into t (id,a) values (342,49);
+insert into t (id,a) values (342,50);
+insert into t (id,a) values (342,51);
+insert into t (id,a) values (342,52);
+insert into t (id,a) values (342,53);
+insert into t (id,a) values (342,54);
+insert into t (id,a) values (342,55);
+insert into t (id,a) values (342,56);
+insert into t (id,a) values (342,57);
+insert into t (id,a) values (342,58);
+insert into t (id,a) values (342,59);
+insert into t (id,a) values (342,60);
+insert into t (id,a) values (342,61);
+insert into t (id,a) values (342,62);
+insert into t (id,a) values (342,63);
+insert into t (id,a) values (342,64);
+insert into t (id,a) values (342,65);
+insert into t (id,a) values (342,66);
+insert into t (id,a) values (342,67);
+insert into t (id,a) values (342,68);
+insert into t (id,a) values (342,69);
+insert into t (id,a) values (342,70);
+insert into t (id,a) values (342,71);
+insert into t (id,a) values (342,72);
+insert into t (id,a) values (342,73);
+insert into t (id,a) values (342,74);
+insert into t (id,a) values (342,75);
+insert into t (id,a) values (342,76);
+insert into t (id,a) values (342,77);
+insert into t (id,a) values (342,78);
+insert into t (id,a) values (342,79);
+insert into t (id,a) values (342,80);
+insert into t (id,a) values (342,81);
+insert into t (id,a) values (342,82);
+insert into t (id,a) values (342,83);
+insert into t (id,a) values (342,84);
+insert into t (id,a) values (342,85);
+insert into t (id,a) values (342,86);
+insert into t (id,a) values (342,87);
+insert into t (id,a) values (342,88);
+insert into t (id,a) values (342,89);
+insert into t (id,a) values (342,90);
+insert into t (id,a) values (342,91);
+insert into t (id,a) values (342,92);
+insert into t (id,a) values (342,93);
+insert into t (id,a) values (342,94);
+insert into t (id,a) values (342,95);
+insert into t (id,a) values (342,96);
+insert into t (id,a) values (342,97);
+insert into t (id,a) values (342,98);
+insert into t (id,a) values (342,99);
+insert into t (id,a) values (343,0);
+insert into t (id,a) values (343,1);
+insert into t (id,a) values (343,2);
+insert into t (id,a) values (343,3);
+insert into t (id,a) values (343,4);
+insert into t (id,a) values (343,5);
+insert into t (id,a) values (343,6);
+insert into t (id,a) values (343,7);
+insert into t (id,a) values (343,8);
+insert into t (id,a) values (343,9);
+insert into t (id,a) values (343,10);
+insert into t (id,a) values (343,11);
+insert into t (id,a) values (343,12);
+insert into t (id,a) values (343,13);
+insert into t (id,a) values (343,14);
+insert into t (id,a) values (343,15);
+insert into t (id,a) values (343,16);
+insert into t (id,a) values (343,17);
+insert into t (id,a) values (343,18);
+insert into t (id,a) values (343,19);
+insert into t (id,a) values (343,20);
+insert into t (id,a) values (343,21);
+insert into t (id,a) values (343,22);
+insert into t (id,a) values (343,23);
+insert into t (id,a) values (343,24);
+insert into t (id,a) values (343,25);
+insert into t (id,a) values (343,26);
+insert into t (id,a) values (343,27);
+insert into t (id,a) values (343,28);
+insert into t (id,a) values (343,29);
+insert into t (id,a) values (343,30);
+insert into t (id,a) values (343,31);
+insert into t (id,a) values (343,32);
+insert into t (id,a) values (343,33);
+insert into t (id,a) values (343,34);
+insert into t (id,a) values (343,35);
+insert into t (id,a) values (343,36);
+insert into t (id,a) values (343,37);
+insert into t (id,a) values (343,38);
+insert into t (id,a) values (343,39);
+insert into t (id,a) values (343,40);
+insert into t (id,a) values (343,41);
+insert into t (id,a) values (343,42);
+insert into t (id,a) values (343,43);
+insert into t (id,a) values (343,44);
+insert into t (id,a) values (343,45);
+insert into t (id,a) values (343,46);
+insert into t (id,a) values (343,47);
+insert into t (id,a) values (343,48);
+insert into t (id,a) values (343,49);
+insert into t (id,a) values (343,50);
+insert into t (id,a) values (343,51);
+insert into t (id,a) values (343,52);
+insert into t (id,a) values (343,53);
+insert into t (id,a) values (343,54);
+insert into t (id,a) values (343,55);
+insert into t (id,a) values (343,56);
+insert into t (id,a) values (343,57);
+insert into t (id,a) values (343,58);
+insert into t (id,a) values (343,59);
+insert into t (id,a) values (343,60);
+insert into t (id,a) values (343,61);
+insert into t (id,a) values (343,62);
+insert into t (id,a) values (343,63);
+insert into t (id,a) values (343,64);
+insert into t (id,a) values (343,65);
+insert into t (id,a) values (343,66);
+insert into t (id,a) values (343,67);
+insert into t (id,a) values (343,68);
+insert into t (id,a) values (343,69);
+insert into t (id,a) values (343,70);
+insert into t (id,a) values (343,71);
+insert into t (id,a) values (343,72);
+insert into t (id,a) values (343,73);
+insert into t (id,a) values (343,74);
+insert into t (id,a) values (343,75);
+insert into t (id,a) values (343,76);
+insert into t (id,a) values (343,77);
+insert into t (id,a) values (343,78);
+insert into t (id,a) values (343,79);
+insert into t (id,a) values (343,80);
+insert into t (id,a) values (343,81);
+insert into t (id,a) values (343,82);
+insert into t (id,a) values (343,83);
+insert into t (id,a) values (343,84);
+insert into t (id,a) values (343,85);
+insert into t (id,a) values (343,86);
+insert into t (id,a) values (343,87);
+insert into t (id,a) values (343,88);
+insert into t (id,a) values (343,89);
+insert into t (id,a) values (343,90);
+insert into t (id,a) values (343,91);
+insert into t (id,a) values (343,92);
+insert into t (id,a) values (343,93);
+insert into t (id,a) values (343,94);
+insert into t (id,a) values (343,95);
+insert into t (id,a) values (343,96);
+insert into t (id,a) values (343,97);
+insert into t (id,a) values (343,98);
+insert into t (id,a) values (343,99);
+insert into t (id,a) values (344,0);
+insert into t (id,a) values (344,1);
+insert into t (id,a) values (344,2);
+insert into t (id,a) values (344,3);
+insert into t (id,a) values (344,4);
+insert into t (id,a) values (344,5);
+insert into t (id,a) values (344,6);
+insert into t (id,a) values (344,7);
+insert into t (id,a) values (344,8);
+insert into t (id,a) values (344,9);
+insert into t (id,a) values (344,10);
+insert into t (id,a) values (344,11);
+insert into t (id,a) values (344,12);
+insert into t (id,a) values (344,13);
+insert into t (id,a) values (344,14);
+insert into t (id,a) values (344,15);
+insert into t (id,a) values (344,16);
+insert into t (id,a) values (344,17);
+insert into t (id,a) values (344,18);
+insert into t (id,a) values (344,19);
+insert into t (id,a) values (344,20);
+insert into t (id,a) values (344,21);
+insert into t (id,a) values (344,22);
+insert into t (id,a) values (344,23);
+insert into t (id,a) values (344,24);
+insert into t (id,a) values (344,25);
+insert into t (id,a) values (344,26);
+insert into t (id,a) values (344,27);
+insert into t (id,a) values (344,28);
+insert into t (id,a) values (344,29);
+insert into t (id,a) values (344,30);
+insert into t (id,a) values (344,31);
+insert into t (id,a) values (344,32);
+insert into t (id,a) values (344,33);
+insert into t (id,a) values (344,34);
+insert into t (id,a) values (344,35);
+insert into t (id,a) values (344,36);
+insert into t (id,a) values (344,37);
+insert into t (id,a) values (344,38);
+insert into t (id,a) values (344,39);
+insert into t (id,a) values (344,40);
+insert into t (id,a) values (344,41);
+insert into t (id,a) values (344,42);
+insert into t (id,a) values (344,43);
+insert into t (id,a) values (344,44);
+insert into t (id,a) values (344,45);
+insert into t (id,a) values (344,46);
+insert into t (id,a) values (344,47);
+insert into t (id,a) values (344,48);
+insert into t (id,a) values (344,49);
+insert into t (id,a) values (344,50);
+insert into t (id,a) values (344,51);
+insert into t (id,a) values (344,52);
+insert into t (id,a) values (344,53);
+insert into t (id,a) values (344,54);
+insert into t (id,a) values (344,55);
+insert into t (id,a) values (344,56);
+insert into t (id,a) values (344,57);
+insert into t (id,a) values (344,58);
+insert into t (id,a) values (344,59);
+insert into t (id,a) values (344,60);
+insert into t (id,a) values (344,61);
+insert into t (id,a) values (344,62);
+insert into t (id,a) values (344,63);
+insert into t (id,a) values (344,64);
+insert into t (id,a) values (344,65);
+insert into t (id,a) values (344,66);
+insert into t (id,a) values (344,67);
+insert into t (id,a) values (344,68);
+insert into t (id,a) values (344,69);
+insert into t (id,a) values (344,70);
+insert into t (id,a) values (344,71);
+insert into t (id,a) values (344,72);
+insert into t (id,a) values (344,73);
+insert into t (id,a) values (344,74);
+insert into t (id,a) values (344,75);
+insert into t (id,a) values (344,76);
+insert into t (id,a) values (344,77);
+insert into t (id,a) values (344,78);
+insert into t (id,a) values (344,79);
+insert into t (id,a) values (344,80);
+insert into t (id,a) values (344,81);
+insert into t (id,a) values (344,82);
+insert into t (id,a) values (344,83);
+insert into t (id,a) values (344,84);
+insert into t (id,a) values (344,85);
+insert into t (id,a) values (344,86);
+insert into t (id,a) values (344,87);
+insert into t (id,a) values (344,88);
+insert into t (id,a) values (344,89);
+insert into t (id,a) values (344,90);
+insert into t (id,a) values (344,91);
+insert into t (id,a) values (344,92);
+insert into t (id,a) values (344,93);
+insert into t (id,a) values (344,94);
+insert into t (id,a) values (344,95);
+insert into t (id,a) values (344,96);
+insert into t (id,a) values (344,97);
+insert into t (id,a) values (344,98);
+insert into t (id,a) values (344,99);
+insert into t (id,a) values (345,0);
+insert into t (id,a) values (345,1);
+insert into t (id,a) values (345,2);
+insert into t (id,a) values (345,3);
+insert into t (id,a) values (345,4);
+insert into t (id,a) values (345,5);
+insert into t (id,a) values (345,6);
+insert into t (id,a) values (345,7);
+insert into t (id,a) values (345,8);
+insert into t (id,a) values (345,9);
+insert into t (id,a) values (345,10);
+insert into t (id,a) values (345,11);
+insert into t (id,a) values (345,12);
+insert into t (id,a) values (345,13);
+insert into t (id,a) values (345,14);
+insert into t (id,a) values (345,15);
+insert into t (id,a) values (345,16);
+insert into t (id,a) values (345,17);
+insert into t (id,a) values (345,18);
+insert into t (id,a) values (345,19);
+insert into t (id,a) values (345,20);
+insert into t (id,a) values (345,21);
+insert into t (id,a) values (345,22);
+insert into t (id,a) values (345,23);
+insert into t (id,a) values (345,24);
+insert into t (id,a) values (345,25);
+insert into t (id,a) values (345,26);
+insert into t (id,a) values (345,27);
+insert into t (id,a) values (345,28);
+insert into t (id,a) values (345,29);
+insert into t (id,a) values (345,30);
+insert into t (id,a) values (345,31);
+insert into t (id,a) values (345,32);
+insert into t (id,a) values (345,33);
+insert into t (id,a) values (345,34);
+insert into t (id,a) values (345,35);
+insert into t (id,a) values (345,36);
+insert into t (id,a) values (345,37);
+insert into t (id,a) values (345,38);
+insert into t (id,a) values (345,39);
+insert into t (id,a) values (345,40);
+insert into t (id,a) values (345,41);
+insert into t (id,a) values (345,42);
+insert into t (id,a) values (345,43);
+insert into t (id,a) values (345,44);
+insert into t (id,a) values (345,45);
+insert into t (id,a) values (345,46);
+insert into t (id,a) values (345,47);
+insert into t (id,a) values (345,48);
+insert into t (id,a) values (345,49);
+insert into t (id,a) values (345,50);
+insert into t (id,a) values (345,51);
+insert into t (id,a) values (345,52);
+insert into t (id,a) values (345,53);
+insert into t (id,a) values (345,54);
+insert into t (id,a) values (345,55);
+insert into t (id,a) values (345,56);
+insert into t (id,a) values (345,57);
+insert into t (id,a) values (345,58);
+insert into t (id,a) values (345,59);
+insert into t (id,a) values (345,60);
+insert into t (id,a) values (345,61);
+insert into t (id,a) values (345,62);
+insert into t (id,a) values (345,63);
+insert into t (id,a) values (345,64);
+insert into t (id,a) values (345,65);
+insert into t (id,a) values (345,66);
+insert into t (id,a) values (345,67);
+insert into t (id,a) values (345,68);
+insert into t (id,a) values (345,69);
+insert into t (id,a) values (345,70);
+insert into t (id,a) values (345,71);
+insert into t (id,a) values (345,72);
+insert into t (id,a) values (345,73);
+insert into t (id,a) values (345,74);
+insert into t (id,a) values (345,75);
+insert into t (id,a) values (345,76);
+insert into t (id,a) values (345,77);
+insert into t (id,a) values (345,78);
+insert into t (id,a) values (345,79);
+insert into t (id,a) values (345,80);
+insert into t (id,a) values (345,81);
+insert into t (id,a) values (345,82);
+insert into t (id,a) values (345,83);
+insert into t (id,a) values (345,84);
+insert into t (id,a) values (345,85);
+insert into t (id,a) values (345,86);
+insert into t (id,a) values (345,87);
+insert into t (id,a) values (345,88);
+insert into t (id,a) values (345,89);
+insert into t (id,a) values (345,90);
+insert into t (id,a) values (345,91);
+insert into t (id,a) values (345,92);
+insert into t (id,a) values (345,93);
+insert into t (id,a) values (345,94);
+insert into t (id,a) values (345,95);
+insert into t (id,a) values (345,96);
+insert into t (id,a) values (345,97);
+insert into t (id,a) values (345,98);
+insert into t (id,a) values (345,99);
+insert into t (id,a) values (346,0);
+insert into t (id,a) values (346,1);
+insert into t (id,a) values (346,2);
+insert into t (id,a) values (346,3);
+insert into t (id,a) values (346,4);
+insert into t (id,a) values (346,5);
+insert into t (id,a) values (346,6);
+insert into t (id,a) values (346,7);
+insert into t (id,a) values (346,8);
+insert into t (id,a) values (346,9);
+insert into t (id,a) values (346,10);
+insert into t (id,a) values (346,11);
+insert into t (id,a) values (346,12);
+insert into t (id,a) values (346,13);
+insert into t (id,a) values (346,14);
+insert into t (id,a) values (346,15);
+insert into t (id,a) values (346,16);
+insert into t (id,a) values (346,17);
+insert into t (id,a) values (346,18);
+insert into t (id,a) values (346,19);
+insert into t (id,a) values (346,20);
+insert into t (id,a) values (346,21);
+insert into t (id,a) values (346,22);
+insert into t (id,a) values (346,23);
+insert into t (id,a) values (346,24);
+insert into t (id,a) values (346,25);
+insert into t (id,a) values (346,26);
+insert into t (id,a) values (346,27);
+insert into t (id,a) values (346,28);
+insert into t (id,a) values (346,29);
+insert into t (id,a) values (346,30);
+insert into t (id,a) values (346,31);
+insert into t (id,a) values (346,32);
+insert into t (id,a) values (346,33);
+insert into t (id,a) values (346,34);
+insert into t (id,a) values (346,35);
+insert into t (id,a) values (346,36);
+insert into t (id,a) values (346,37);
+insert into t (id,a) values (346,38);
+insert into t (id,a) values (346,39);
+insert into t (id,a) values (346,40);
+insert into t (id,a) values (346,41);
+insert into t (id,a) values (346,42);
+insert into t (id,a) values (346,43);
+insert into t (id,a) values (346,44);
+insert into t (id,a) values (346,45);
+insert into t (id,a) values (346,46);
+insert into t (id,a) values (346,47);
+insert into t (id,a) values (346,48);
+insert into t (id,a) values (346,49);
+insert into t (id,a) values (346,50);
+insert into t (id,a) values (346,51);
+insert into t (id,a) values (346,52);
+insert into t (id,a) values (346,53);
+insert into t (id,a) values (346,54);
+insert into t (id,a) values (346,55);
+insert into t (id,a) values (346,56);
+insert into t (id,a) values (346,57);
+insert into t (id,a) values (346,58);
+insert into t (id,a) values (346,59);
+insert into t (id,a) values (346,60);
+insert into t (id,a) values (346,61);
+insert into t (id,a) values (346,62);
+insert into t (id,a) values (346,63);
+insert into t (id,a) values (346,64);
+insert into t (id,a) values (346,65);
+insert into t (id,a) values (346,66);
+insert into t (id,a) values (346,67);
+insert into t (id,a) values (346,68);
+insert into t (id,a) values (346,69);
+insert into t (id,a) values (346,70);
+insert into t (id,a) values (346,71);
+insert into t (id,a) values (346,72);
+insert into t (id,a) values (346,73);
+insert into t (id,a) values (346,74);
+insert into t (id,a) values (346,75);
+insert into t (id,a) values (346,76);
+insert into t (id,a) values (346,77);
+insert into t (id,a) values (346,78);
+insert into t (id,a) values (346,79);
+insert into t (id,a) values (346,80);
+insert into t (id,a) values (346,81);
+insert into t (id,a) values (346,82);
+insert into t (id,a) values (346,83);
+insert into t (id,a) values (346,84);
+insert into t (id,a) values (346,85);
+insert into t (id,a) values (346,86);
+insert into t (id,a) values (346,87);
+insert into t (id,a) values (346,88);
+insert into t (id,a) values (346,89);
+insert into t (id,a) values (346,90);
+insert into t (id,a) values (346,91);
+insert into t (id,a) values (346,92);
+insert into t (id,a) values (346,93);
+insert into t (id,a) values (346,94);
+insert into t (id,a) values (346,95);
+insert into t (id,a) values (346,96);
+insert into t (id,a) values (346,97);
+insert into t (id,a) values (346,98);
+insert into t (id,a) values (346,99);
+insert into t (id,a) values (347,0);
+insert into t (id,a) values (347,1);
+insert into t (id,a) values (347,2);
+insert into t (id,a) values (347,3);
+insert into t (id,a) values (347,4);
+insert into t (id,a) values (347,5);
+insert into t (id,a) values (347,6);
+insert into t (id,a) values (347,7);
+insert into t (id,a) values (347,8);
+insert into t (id,a) values (347,9);
+insert into t (id,a) values (347,10);
+insert into t (id,a) values (347,11);
+insert into t (id,a) values (347,12);
+insert into t (id,a) values (347,13);
+insert into t (id,a) values (347,14);
+insert into t (id,a) values (347,15);
+insert into t (id,a) values (347,16);
+insert into t (id,a) values (347,17);
+insert into t (id,a) values (347,18);
+insert into t (id,a) values (347,19);
+insert into t (id,a) values (347,20);
+insert into t (id,a) values (347,21);
+insert into t (id,a) values (347,22);
+insert into t (id,a) values (347,23);
+insert into t (id,a) values (347,24);
+insert into t (id,a) values (347,25);
+insert into t (id,a) values (347,26);
+insert into t (id,a) values (347,27);
+insert into t (id,a) values (347,28);
+insert into t (id,a) values (347,29);
+insert into t (id,a) values (347,30);
+insert into t (id,a) values (347,31);
+insert into t (id,a) values (347,32);
+insert into t (id,a) values (347,33);
+insert into t (id,a) values (347,34);
+insert into t (id,a) values (347,35);
+insert into t (id,a) values (347,36);
+insert into t (id,a) values (347,37);
+insert into t (id,a) values (347,38);
+insert into t (id,a) values (347,39);
+insert into t (id,a) values (347,40);
+insert into t (id,a) values (347,41);
+insert into t (id,a) values (347,42);
+insert into t (id,a) values (347,43);
+insert into t (id,a) values (347,44);
+insert into t (id,a) values (347,45);
+insert into t (id,a) values (347,46);
+insert into t (id,a) values (347,47);
+insert into t (id,a) values (347,48);
+insert into t (id,a) values (347,49);
+insert into t (id,a) values (347,50);
+insert into t (id,a) values (347,51);
+insert into t (id,a) values (347,52);
+insert into t (id,a) values (347,53);
+insert into t (id,a) values (347,54);
+insert into t (id,a) values (347,55);
+insert into t (id,a) values (347,56);
+insert into t (id,a) values (347,57);
+insert into t (id,a) values (347,58);
+insert into t (id,a) values (347,59);
+insert into t (id,a) values (347,60);
+insert into t (id,a) values (347,61);
+insert into t (id,a) values (347,62);
+insert into t (id,a) values (347,63);
+insert into t (id,a) values (347,64);
+insert into t (id,a) values (347,65);
+insert into t (id,a) values (347,66);
+insert into t (id,a) values (347,67);
+insert into t (id,a) values (347,68);
+insert into t (id,a) values (347,69);
+insert into t (id,a) values (347,70);
+insert into t (id,a) values (347,71);
+insert into t (id,a) values (347,72);
+insert into t (id,a) values (347,73);
+insert into t (id,a) values (347,74);
+insert into t (id,a) values (347,75);
+insert into t (id,a) values (347,76);
+insert into t (id,a) values (347,77);
+insert into t (id,a) values (347,78);
+insert into t (id,a) values (347,79);
+insert into t (id,a) values (347,80);
+insert into t (id,a) values (347,81);
+insert into t (id,a) values (347,82);
+insert into t (id,a) values (347,83);
+insert into t (id,a) values (347,84);
+insert into t (id,a) values (347,85);
+insert into t (id,a) values (347,86);
+insert into t (id,a) values (347,87);
+insert into t (id,a) values (347,88);
+insert into t (id,a) values (347,89);
+insert into t (id,a) values (347,90);
+insert into t (id,a) values (347,91);
+insert into t (id,a) values (347,92);
+insert into t (id,a) values (347,93);
+insert into t (id,a) values (347,94);
+insert into t (id,a) values (347,95);
+insert into t (id,a) values (347,96);
+insert into t (id,a) values (347,97);
+insert into t (id,a) values (347,98);
+insert into t (id,a) values (347,99);
+insert into t (id,a) values (348,0);
+insert into t (id,a) values (348,1);
+insert into t (id,a) values (348,2);
+insert into t (id,a) values (348,3);
+insert into t (id,a) values (348,4);
+insert into t (id,a) values (348,5);
+insert into t (id,a) values (348,6);
+insert into t (id,a) values (348,7);
+insert into t (id,a) values (348,8);
+insert into t (id,a) values (348,9);
+insert into t (id,a) values (348,10);
+insert into t (id,a) values (348,11);
+insert into t (id,a) values (348,12);
+insert into t (id,a) values (348,13);
+insert into t (id,a) values (348,14);
+insert into t (id,a) values (348,15);
+insert into t (id,a) values (348,16);
+insert into t (id,a) values (348,17);
+insert into t (id,a) values (348,18);
+insert into t (id,a) values (348,19);
+insert into t (id,a) values (348,20);
+insert into t (id,a) values (348,21);
+insert into t (id,a) values (348,22);
+insert into t (id,a) values (348,23);
+insert into t (id,a) values (348,24);
+insert into t (id,a) values (348,25);
+insert into t (id,a) values (348,26);
+insert into t (id,a) values (348,27);
+insert into t (id,a) values (348,28);
+insert into t (id,a) values (348,29);
+insert into t (id,a) values (348,30);
+insert into t (id,a) values (348,31);
+insert into t (id,a) values (348,32);
+insert into t (id,a) values (348,33);
+insert into t (id,a) values (348,34);
+insert into t (id,a) values (348,35);
+insert into t (id,a) values (348,36);
+insert into t (id,a) values (348,37);
+insert into t (id,a) values (348,38);
+insert into t (id,a) values (348,39);
+insert into t (id,a) values (348,40);
+insert into t (id,a) values (348,41);
+insert into t (id,a) values (348,42);
+insert into t (id,a) values (348,43);
+insert into t (id,a) values (348,44);
+insert into t (id,a) values (348,45);
+insert into t (id,a) values (348,46);
+insert into t (id,a) values (348,47);
+insert into t (id,a) values (348,48);
+insert into t (id,a) values (348,49);
+insert into t (id,a) values (348,50);
+insert into t (id,a) values (348,51);
+insert into t (id,a) values (348,52);
+insert into t (id,a) values (348,53);
+insert into t (id,a) values (348,54);
+insert into t (id,a) values (348,55);
+insert into t (id,a) values (348,56);
+insert into t (id,a) values (348,57);
+insert into t (id,a) values (348,58);
+insert into t (id,a) values (348,59);
+insert into t (id,a) values (348,60);
+insert into t (id,a) values (348,61);
+insert into t (id,a) values (348,62);
+insert into t (id,a) values (348,63);
+insert into t (id,a) values (348,64);
+insert into t (id,a) values (348,65);
+insert into t (id,a) values (348,66);
+insert into t (id,a) values (348,67);
+insert into t (id,a) values (348,68);
+insert into t (id,a) values (348,69);
+insert into t (id,a) values (348,70);
+insert into t (id,a) values (348,71);
+insert into t (id,a) values (348,72);
+insert into t (id,a) values (348,73);
+insert into t (id,a) values (348,74);
+insert into t (id,a) values (348,75);
+insert into t (id,a) values (348,76);
+insert into t (id,a) values (348,77);
+insert into t (id,a) values (348,78);
+insert into t (id,a) values (348,79);
+insert into t (id,a) values (348,80);
+insert into t (id,a) values (348,81);
+insert into t (id,a) values (348,82);
+insert into t (id,a) values (348,83);
+insert into t (id,a) values (348,84);
+insert into t (id,a) values (348,85);
+insert into t (id,a) values (348,86);
+insert into t (id,a) values (348,87);
+insert into t (id,a) values (348,88);
+insert into t (id,a) values (348,89);
+insert into t (id,a) values (348,90);
+insert into t (id,a) values (348,91);
+insert into t (id,a) values (348,92);
+insert into t (id,a) values (348,93);
+insert into t (id,a) values (348,94);
+insert into t (id,a) values (348,95);
+insert into t (id,a) values (348,96);
+insert into t (id,a) values (348,97);
+insert into t (id,a) values (348,98);
+insert into t (id,a) values (348,99);
+insert into t (id,a) values (349,0);
+insert into t (id,a) values (349,1);
+insert into t (id,a) values (349,2);
+insert into t (id,a) values (349,3);
+insert into t (id,a) values (349,4);
+insert into t (id,a) values (349,5);
+insert into t (id,a) values (349,6);
+insert into t (id,a) values (349,7);
+insert into t (id,a) values (349,8);
+insert into t (id,a) values (349,9);
+insert into t (id,a) values (349,10);
+insert into t (id,a) values (349,11);
+insert into t (id,a) values (349,12);
+insert into t (id,a) values (349,13);
+insert into t (id,a) values (349,14);
+insert into t (id,a) values (349,15);
+insert into t (id,a) values (349,16);
+insert into t (id,a) values (349,17);
+insert into t (id,a) values (349,18);
+insert into t (id,a) values (349,19);
+insert into t (id,a) values (349,20);
+insert into t (id,a) values (349,21);
+insert into t (id,a) values (349,22);
+insert into t (id,a) values (349,23);
+insert into t (id,a) values (349,24);
+insert into t (id,a) values (349,25);
+insert into t (id,a) values (349,26);
+insert into t (id,a) values (349,27);
+insert into t (id,a) values (349,28);
+insert into t (id,a) values (349,29);
+insert into t (id,a) values (349,30);
+insert into t (id,a) values (349,31);
+insert into t (id,a) values (349,32);
+insert into t (id,a) values (349,33);
+insert into t (id,a) values (349,34);
+insert into t (id,a) values (349,35);
+insert into t (id,a) values (349,36);
+insert into t (id,a) values (349,37);
+insert into t (id,a) values (349,38);
+insert into t (id,a) values (349,39);
+insert into t (id,a) values (349,40);
+insert into t (id,a) values (349,41);
+insert into t (id,a) values (349,42);
+insert into t (id,a) values (349,43);
+insert into t (id,a) values (349,44);
+insert into t (id,a) values (349,45);
+insert into t (id,a) values (349,46);
+insert into t (id,a) values (349,47);
+insert into t (id,a) values (349,48);
+insert into t (id,a) values (349,49);
+insert into t (id,a) values (349,50);
+insert into t (id,a) values (349,51);
+insert into t (id,a) values (349,52);
+insert into t (id,a) values (349,53);
+insert into t (id,a) values (349,54);
+insert into t (id,a) values (349,55);
+insert into t (id,a) values (349,56);
+insert into t (id,a) values (349,57);
+insert into t (id,a) values (349,58);
+insert into t (id,a) values (349,59);
+insert into t (id,a) values (349,60);
+insert into t (id,a) values (349,61);
+insert into t (id,a) values (349,62);
+insert into t (id,a) values (349,63);
+insert into t (id,a) values (349,64);
+insert into t (id,a) values (349,65);
+insert into t (id,a) values (349,66);
+insert into t (id,a) values (349,67);
+insert into t (id,a) values (349,68);
+insert into t (id,a) values (349,69);
+insert into t (id,a) values (349,70);
+insert into t (id,a) values (349,71);
+insert into t (id,a) values (349,72);
+insert into t (id,a) values (349,73);
+insert into t (id,a) values (349,74);
+insert into t (id,a) values (349,75);
+insert into t (id,a) values (349,76);
+insert into t (id,a) values (349,77);
+insert into t (id,a) values (349,78);
+insert into t (id,a) values (349,79);
+insert into t (id,a) values (349,80);
+insert into t (id,a) values (349,81);
+insert into t (id,a) values (349,82);
+insert into t (id,a) values (349,83);
+insert into t (id,a) values (349,84);
+insert into t (id,a) values (349,85);
+insert into t (id,a) values (349,86);
+insert into t (id,a) values (349,87);
+insert into t (id,a) values (349,88);
+insert into t (id,a) values (349,89);
+insert into t (id,a) values (349,90);
+insert into t (id,a) values (349,91);
+insert into t (id,a) values (349,92);
+insert into t (id,a) values (349,93);
+insert into t (id,a) values (349,94);
+insert into t (id,a) values (349,95);
+insert into t (id,a) values (349,96);
+insert into t (id,a) values (349,97);
+insert into t (id,a) values (349,98);
+insert into t (id,a) values (349,99);
+insert into t (id,a) values (350,0);
+insert into t (id,a) values (350,1);
+insert into t (id,a) values (350,2);
+insert into t (id,a) values (350,3);
+insert into t (id,a) values (350,4);
+insert into t (id,a) values (350,5);
+insert into t (id,a) values (350,6);
+insert into t (id,a) values (350,7);
+insert into t (id,a) values (350,8);
+insert into t (id,a) values (350,9);
+insert into t (id,a) values (350,10);
+insert into t (id,a) values (350,11);
+insert into t (id,a) values (350,12);
+insert into t (id,a) values (350,13);
+insert into t (id,a) values (350,14);
+insert into t (id,a) values (350,15);
+insert into t (id,a) values (350,16);
+insert into t (id,a) values (350,17);
+insert into t (id,a) values (350,18);
+insert into t (id,a) values (350,19);
+insert into t (id,a) values (350,20);
+insert into t (id,a) values (350,21);
+insert into t (id,a) values (350,22);
+insert into t (id,a) values (350,23);
+insert into t (id,a) values (350,24);
+insert into t (id,a) values (350,25);
+insert into t (id,a) values (350,26);
+insert into t (id,a) values (350,27);
+insert into t (id,a) values (350,28);
+insert into t (id,a) values (350,29);
+insert into t (id,a) values (350,30);
+insert into t (id,a) values (350,31);
+insert into t (id,a) values (350,32);
+insert into t (id,a) values (350,33);
+insert into t (id,a) values (350,34);
+insert into t (id,a) values (350,35);
+insert into t (id,a) values (350,36);
+insert into t (id,a) values (350,37);
+insert into t (id,a) values (350,38);
+insert into t (id,a) values (350,39);
+insert into t (id,a) values (350,40);
+insert into t (id,a) values (350,41);
+insert into t (id,a) values (350,42);
+insert into t (id,a) values (350,43);
+insert into t (id,a) values (350,44);
+insert into t (id,a) values (350,45);
+insert into t (id,a) values (350,46);
+insert into t (id,a) values (350,47);
+insert into t (id,a) values (350,48);
+insert into t (id,a) values (350,49);
+insert into t (id,a) values (350,50);
+insert into t (id,a) values (350,51);
+insert into t (id,a) values (350,52);
+insert into t (id,a) values (350,53);
+insert into t (id,a) values (350,54);
+insert into t (id,a) values (350,55);
+insert into t (id,a) values (350,56);
+insert into t (id,a) values (350,57);
+insert into t (id,a) values (350,58);
+insert into t (id,a) values (350,59);
+insert into t (id,a) values (350,60);
+insert into t (id,a) values (350,61);
+insert into t (id,a) values (350,62);
+insert into t (id,a) values (350,63);
+insert into t (id,a) values (350,64);
+insert into t (id,a) values (350,65);
+insert into t (id,a) values (350,66);
+insert into t (id,a) values (350,67);
+insert into t (id,a) values (350,68);
+insert into t (id,a) values (350,69);
+insert into t (id,a) values (350,70);
+insert into t (id,a) values (350,71);
+insert into t (id,a) values (350,72);
+insert into t (id,a) values (350,73);
+insert into t (id,a) values (350,74);
+insert into t (id,a) values (350,75);
+insert into t (id,a) values (350,76);
+insert into t (id,a) values (350,77);
+insert into t (id,a) values (350,78);
+insert into t (id,a) values (350,79);
+insert into t (id,a) values (350,80);
+insert into t (id,a) values (350,81);
+insert into t (id,a) values (350,82);
+insert into t (id,a) values (350,83);
+insert into t (id,a) values (350,84);
+insert into t (id,a) values (350,85);
+insert into t (id,a) values (350,86);
+insert into t (id,a) values (350,87);
+insert into t (id,a) values (350,88);
+insert into t (id,a) values (350,89);
+insert into t (id,a) values (350,90);
+insert into t (id,a) values (350,91);
+insert into t (id,a) values (350,92);
+insert into t (id,a) values (350,93);
+insert into t (id,a) values (350,94);
+insert into t (id,a) values (350,95);
+insert into t (id,a) values (350,96);
+insert into t (id,a) values (350,97);
+insert into t (id,a) values (350,98);
+insert into t (id,a) values (350,99);
+insert into t (id,a) values (351,0);
+insert into t (id,a) values (351,1);
+insert into t (id,a) values (351,2);
+insert into t (id,a) values (351,3);
+insert into t (id,a) values (351,4);
+insert into t (id,a) values (351,5);
+insert into t (id,a) values (351,6);
+insert into t (id,a) values (351,7);
+insert into t (id,a) values (351,8);
+insert into t (id,a) values (351,9);
+insert into t (id,a) values (351,10);
+insert into t (id,a) values (351,11);
+insert into t (id,a) values (351,12);
+insert into t (id,a) values (351,13);
+insert into t (id,a) values (351,14);
+insert into t (id,a) values (351,15);
+insert into t (id,a) values (351,16);
+insert into t (id,a) values (351,17);
+insert into t (id,a) values (351,18);
+insert into t (id,a) values (351,19);
+insert into t (id,a) values (351,20);
+insert into t (id,a) values (351,21);
+insert into t (id,a) values (351,22);
+insert into t (id,a) values (351,23);
+insert into t (id,a) values (351,24);
+insert into t (id,a) values (351,25);
+insert into t (id,a) values (351,26);
+insert into t (id,a) values (351,27);
+insert into t (id,a) values (351,28);
+insert into t (id,a) values (351,29);
+insert into t (id,a) values (351,30);
+insert into t (id,a) values (351,31);
+insert into t (id,a) values (351,32);
+insert into t (id,a) values (351,33);
+insert into t (id,a) values (351,34);
+insert into t (id,a) values (351,35);
+insert into t (id,a) values (351,36);
+insert into t (id,a) values (351,37);
+insert into t (id,a) values (351,38);
+insert into t (id,a) values (351,39);
+insert into t (id,a) values (351,40);
+insert into t (id,a) values (351,41);
+insert into t (id,a) values (351,42);
+insert into t (id,a) values (351,43);
+insert into t (id,a) values (351,44);
+insert into t (id,a) values (351,45);
+insert into t (id,a) values (351,46);
+insert into t (id,a) values (351,47);
+insert into t (id,a) values (351,48);
+insert into t (id,a) values (351,49);
+insert into t (id,a) values (351,50);
+insert into t (id,a) values (351,51);
+insert into t (id,a) values (351,52);
+insert into t (id,a) values (351,53);
+insert into t (id,a) values (351,54);
+insert into t (id,a) values (351,55);
+insert into t (id,a) values (351,56);
+insert into t (id,a) values (351,57);
+insert into t (id,a) values (351,58);
+insert into t (id,a) values (351,59);
+insert into t (id,a) values (351,60);
+insert into t (id,a) values (351,61);
+insert into t (id,a) values (351,62);
+insert into t (id,a) values (351,63);
+insert into t (id,a) values (351,64);
+insert into t (id,a) values (351,65);
+insert into t (id,a) values (351,66);
+insert into t (id,a) values (351,67);
+insert into t (id,a) values (351,68);
+insert into t (id,a) values (351,69);
+insert into t (id,a) values (351,70);
+insert into t (id,a) values (351,71);
+insert into t (id,a) values (351,72);
+insert into t (id,a) values (351,73);
+insert into t (id,a) values (351,74);
+insert into t (id,a) values (351,75);
+insert into t (id,a) values (351,76);
+insert into t (id,a) values (351,77);
+insert into t (id,a) values (351,78);
+insert into t (id,a) values (351,79);
+insert into t (id,a) values (351,80);
+insert into t (id,a) values (351,81);
+insert into t (id,a) values (351,82);
+insert into t (id,a) values (351,83);
+insert into t (id,a) values (351,84);
+insert into t (id,a) values (351,85);
+insert into t (id,a) values (351,86);
+insert into t (id,a) values (351,87);
+insert into t (id,a) values (351,88);
+insert into t (id,a) values (351,89);
+insert into t (id,a) values (351,90);
+insert into t (id,a) values (351,91);
+insert into t (id,a) values (351,92);
+insert into t (id,a) values (351,93);
+insert into t (id,a) values (351,94);
+insert into t (id,a) values (351,95);
+insert into t (id,a) values (351,96);
+insert into t (id,a) values (351,97);
+insert into t (id,a) values (351,98);
+insert into t (id,a) values (351,99);
+insert into t (id,a) values (352,0);
+insert into t (id,a) values (352,1);
+insert into t (id,a) values (352,2);
+insert into t (id,a) values (352,3);
+insert into t (id,a) values (352,4);
+insert into t (id,a) values (352,5);
+insert into t (id,a) values (352,6);
+insert into t (id,a) values (352,7);
+insert into t (id,a) values (352,8);
+insert into t (id,a) values (352,9);
+insert into t (id,a) values (352,10);
+insert into t (id,a) values (352,11);
+insert into t (id,a) values (352,12);
+insert into t (id,a) values (352,13);
+insert into t (id,a) values (352,14);
+insert into t (id,a) values (352,15);
+insert into t (id,a) values (352,16);
+insert into t (id,a) values (352,17);
+insert into t (id,a) values (352,18);
+insert into t (id,a) values (352,19);
+insert into t (id,a) values (352,20);
+insert into t (id,a) values (352,21);
+insert into t (id,a) values (352,22);
+insert into t (id,a) values (352,23);
+insert into t (id,a) values (352,24);
+insert into t (id,a) values (352,25);
+insert into t (id,a) values (352,26);
+insert into t (id,a) values (352,27);
+insert into t (id,a) values (352,28);
+insert into t (id,a) values (352,29);
+insert into t (id,a) values (352,30);
+insert into t (id,a) values (352,31);
+insert into t (id,a) values (352,32);
+insert into t (id,a) values (352,33);
+insert into t (id,a) values (352,34);
+insert into t (id,a) values (352,35);
+insert into t (id,a) values (352,36);
+insert into t (id,a) values (352,37);
+insert into t (id,a) values (352,38);
+insert into t (id,a) values (352,39);
+insert into t (id,a) values (352,40);
+insert into t (id,a) values (352,41);
+insert into t (id,a) values (352,42);
+insert into t (id,a) values (352,43);
+insert into t (id,a) values (352,44);
+insert into t (id,a) values (352,45);
+insert into t (id,a) values (352,46);
+insert into t (id,a) values (352,47);
+insert into t (id,a) values (352,48);
+insert into t (id,a) values (352,49);
+insert into t (id,a) values (352,50);
+insert into t (id,a) values (352,51);
+insert into t (id,a) values (352,52);
+insert into t (id,a) values (352,53);
+insert into t (id,a) values (352,54);
+insert into t (id,a) values (352,55);
+insert into t (id,a) values (352,56);
+insert into t (id,a) values (352,57);
+insert into t (id,a) values (352,58);
+insert into t (id,a) values (352,59);
+insert into t (id,a) values (352,60);
+insert into t (id,a) values (352,61);
+insert into t (id,a) values (352,62);
+insert into t (id,a) values (352,63);
+insert into t (id,a) values (352,64);
+insert into t (id,a) values (352,65);
+insert into t (id,a) values (352,66);
+insert into t (id,a) values (352,67);
+insert into t (id,a) values (352,68);
+insert into t (id,a) values (352,69);
+insert into t (id,a) values (352,70);
+insert into t (id,a) values (352,71);
+insert into t (id,a) values (352,72);
+insert into t (id,a) values (352,73);
+insert into t (id,a) values (352,74);
+insert into t (id,a) values (352,75);
+insert into t (id,a) values (352,76);
+insert into t (id,a) values (352,77);
+insert into t (id,a) values (352,78);
+insert into t (id,a) values (352,79);
+insert into t (id,a) values (352,80);
+insert into t (id,a) values (352,81);
+insert into t (id,a) values (352,82);
+insert into t (id,a) values (352,83);
+insert into t (id,a) values (352,84);
+insert into t (id,a) values (352,85);
+insert into t (id,a) values (352,86);
+insert into t (id,a) values (352,87);
+insert into t (id,a) values (352,88);
+insert into t (id,a) values (352,89);
+insert into t (id,a) values (352,90);
+insert into t (id,a) values (352,91);
+insert into t (id,a) values (352,92);
+insert into t (id,a) values (352,93);
+insert into t (id,a) values (352,94);
+insert into t (id,a) values (352,95);
+insert into t (id,a) values (352,96);
+insert into t (id,a) values (352,97);
+insert into t (id,a) values (352,98);
+insert into t (id,a) values (352,99);
+insert into t (id,a) values (353,0);
+insert into t (id,a) values (353,1);
+insert into t (id,a) values (353,2);
+insert into t (id,a) values (353,3);
+insert into t (id,a) values (353,4);
+insert into t (id,a) values (353,5);
+insert into t (id,a) values (353,6);
+insert into t (id,a) values (353,7);
+insert into t (id,a) values (353,8);
+insert into t (id,a) values (353,9);
+insert into t (id,a) values (353,10);
+insert into t (id,a) values (353,11);
+insert into t (id,a) values (353,12);
+insert into t (id,a) values (353,13);
+insert into t (id,a) values (353,14);
+insert into t (id,a) values (353,15);
+insert into t (id,a) values (353,16);
+insert into t (id,a) values (353,17);
+insert into t (id,a) values (353,18);
+insert into t (id,a) values (353,19);
+insert into t (id,a) values (353,20);
+insert into t (id,a) values (353,21);
+insert into t (id,a) values (353,22);
+insert into t (id,a) values (353,23);
+insert into t (id,a) values (353,24);
+insert into t (id,a) values (353,25);
+insert into t (id,a) values (353,26);
+insert into t (id,a) values (353,27);
+insert into t (id,a) values (353,28);
+insert into t (id,a) values (353,29);
+insert into t (id,a) values (353,30);
+insert into t (id,a) values (353,31);
+insert into t (id,a) values (353,32);
+insert into t (id,a) values (353,33);
+insert into t (id,a) values (353,34);
+insert into t (id,a) values (353,35);
+insert into t (id,a) values (353,36);
+insert into t (id,a) values (353,37);
+insert into t (id,a) values (353,38);
+insert into t (id,a) values (353,39);
+insert into t (id,a) values (353,40);
+insert into t (id,a) values (353,41);
+insert into t (id,a) values (353,42);
+insert into t (id,a) values (353,43);
+insert into t (id,a) values (353,44);
+insert into t (id,a) values (353,45);
+insert into t (id,a) values (353,46);
+insert into t (id,a) values (353,47);
+insert into t (id,a) values (353,48);
+insert into t (id,a) values (353,49);
+insert into t (id,a) values (353,50);
+insert into t (id,a) values (353,51);
+insert into t (id,a) values (353,52);
+insert into t (id,a) values (353,53);
+insert into t (id,a) values (353,54);
+insert into t (id,a) values (353,55);
+insert into t (id,a) values (353,56);
+insert into t (id,a) values (353,57);
+insert into t (id,a) values (353,58);
+insert into t (id,a) values (353,59);
+insert into t (id,a) values (353,60);
+insert into t (id,a) values (353,61);
+insert into t (id,a) values (353,62);
+insert into t (id,a) values (353,63);
+insert into t (id,a) values (353,64);
+insert into t (id,a) values (353,65);
+insert into t (id,a) values (353,66);
+insert into t (id,a) values (353,67);
+insert into t (id,a) values (353,68);
+insert into t (id,a) values (353,69);
+insert into t (id,a) values (353,70);
+insert into t (id,a) values (353,71);
+insert into t (id,a) values (353,72);
+insert into t (id,a) values (353,73);
+insert into t (id,a) values (353,74);
+insert into t (id,a) values (353,75);
+insert into t (id,a) values (353,76);
+insert into t (id,a) values (353,77);
+insert into t (id,a) values (353,78);
+insert into t (id,a) values (353,79);
+insert into t (id,a) values (353,80);
+insert into t (id,a) values (353,81);
+insert into t (id,a) values (353,82);
+insert into t (id,a) values (353,83);
+insert into t (id,a) values (353,84);
+insert into t (id,a) values (353,85);
+insert into t (id,a) values (353,86);
+insert into t (id,a) values (353,87);
+insert into t (id,a) values (353,88);
+insert into t (id,a) values (353,89);
+insert into t (id,a) values (353,90);
+insert into t (id,a) values (353,91);
+insert into t (id,a) values (353,92);
+insert into t (id,a) values (353,93);
+insert into t (id,a) values (353,94);
+insert into t (id,a) values (353,95);
+insert into t (id,a) values (353,96);
+insert into t (id,a) values (353,97);
+insert into t (id,a) values (353,98);
+insert into t (id,a) values (353,99);
+insert into t (id,a) values (354,0);
+insert into t (id,a) values (354,1);
+insert into t (id,a) values (354,2);
+insert into t (id,a) values (354,3);
+insert into t (id,a) values (354,4);
+insert into t (id,a) values (354,5);
+insert into t (id,a) values (354,6);
+insert into t (id,a) values (354,7);
+insert into t (id,a) values (354,8);
+insert into t (id,a) values (354,9);
+insert into t (id,a) values (354,10);
+insert into t (id,a) values (354,11);
+insert into t (id,a) values (354,12);
+insert into t (id,a) values (354,13);
+insert into t (id,a) values (354,14);
+insert into t (id,a) values (354,15);
+insert into t (id,a) values (354,16);
+insert into t (id,a) values (354,17);
+insert into t (id,a) values (354,18);
+insert into t (id,a) values (354,19);
+insert into t (id,a) values (354,20);
+insert into t (id,a) values (354,21);
+insert into t (id,a) values (354,22);
+insert into t (id,a) values (354,23);
+insert into t (id,a) values (354,24);
+insert into t (id,a) values (354,25);
+insert into t (id,a) values (354,26);
+insert into t (id,a) values (354,27);
+insert into t (id,a) values (354,28);
+insert into t (id,a) values (354,29);
+insert into t (id,a) values (354,30);
+insert into t (id,a) values (354,31);
+insert into t (id,a) values (354,32);
+insert into t (id,a) values (354,33);
+insert into t (id,a) values (354,34);
+insert into t (id,a) values (354,35);
+insert into t (id,a) values (354,36);
+insert into t (id,a) values (354,37);
+insert into t (id,a) values (354,38);
+insert into t (id,a) values (354,39);
+insert into t (id,a) values (354,40);
+insert into t (id,a) values (354,41);
+insert into t (id,a) values (354,42);
+insert into t (id,a) values (354,43);
+insert into t (id,a) values (354,44);
+insert into t (id,a) values (354,45);
+insert into t (id,a) values (354,46);
+insert into t (id,a) values (354,47);
+insert into t (id,a) values (354,48);
+insert into t (id,a) values (354,49);
+insert into t (id,a) values (354,50);
+insert into t (id,a) values (354,51);
+insert into t (id,a) values (354,52);
+insert into t (id,a) values (354,53);
+insert into t (id,a) values (354,54);
+insert into t (id,a) values (354,55);
+insert into t (id,a) values (354,56);
+insert into t (id,a) values (354,57);
+insert into t (id,a) values (354,58);
+insert into t (id,a) values (354,59);
+insert into t (id,a) values (354,60);
+insert into t (id,a) values (354,61);
+insert into t (id,a) values (354,62);
+insert into t (id,a) values (354,63);
+insert into t (id,a) values (354,64);
+insert into t (id,a) values (354,65);
+insert into t (id,a) values (354,66);
+insert into t (id,a) values (354,67);
+insert into t (id,a) values (354,68);
+insert into t (id,a) values (354,69);
+insert into t (id,a) values (354,70);
+insert into t (id,a) values (354,71);
+insert into t (id,a) values (354,72);
+insert into t (id,a) values (354,73);
+insert into t (id,a) values (354,74);
+insert into t (id,a) values (354,75);
+insert into t (id,a) values (354,76);
+insert into t (id,a) values (354,77);
+insert into t (id,a) values (354,78);
+insert into t (id,a) values (354,79);
+insert into t (id,a) values (354,80);
+insert into t (id,a) values (354,81);
+insert into t (id,a) values (354,82);
+insert into t (id,a) values (354,83);
+insert into t (id,a) values (354,84);
+insert into t (id,a) values (354,85);
+insert into t (id,a) values (354,86);
+insert into t (id,a) values (354,87);
+insert into t (id,a) values (354,88);
+insert into t (id,a) values (354,89);
+insert into t (id,a) values (354,90);
+insert into t (id,a) values (354,91);
+insert into t (id,a) values (354,92);
+insert into t (id,a) values (354,93);
+insert into t (id,a) values (354,94);
+insert into t (id,a) values (354,95);
+insert into t (id,a) values (354,96);
+insert into t (id,a) values (354,97);
+insert into t (id,a) values (354,98);
+insert into t (id,a) values (354,99);
+insert into t (id,a) values (355,0);
+insert into t (id,a) values (355,1);
+insert into t (id,a) values (355,2);
+insert into t (id,a) values (355,3);
+insert into t (id,a) values (355,4);
+insert into t (id,a) values (355,5);
+insert into t (id,a) values (355,6);
+insert into t (id,a) values (355,7);
+insert into t (id,a) values (355,8);
+insert into t (id,a) values (355,9);
+insert into t (id,a) values (355,10);
+insert into t (id,a) values (355,11);
+insert into t (id,a) values (355,12);
+insert into t (id,a) values (355,13);
+insert into t (id,a) values (355,14);
+insert into t (id,a) values (355,15);
+insert into t (id,a) values (355,16);
+insert into t (id,a) values (355,17);
+insert into t (id,a) values (355,18);
+insert into t (id,a) values (355,19);
+insert into t (id,a) values (355,20);
+insert into t (id,a) values (355,21);
+insert into t (id,a) values (355,22);
+insert into t (id,a) values (355,23);
+insert into t (id,a) values (355,24);
+insert into t (id,a) values (355,25);
+insert into t (id,a) values (355,26);
+insert into t (id,a) values (355,27);
+insert into t (id,a) values (355,28);
+insert into t (id,a) values (355,29);
+insert into t (id,a) values (355,30);
+insert into t (id,a) values (355,31);
+insert into t (id,a) values (355,32);
+insert into t (id,a) values (355,33);
+insert into t (id,a) values (355,34);
+insert into t (id,a) values (355,35);
+insert into t (id,a) values (355,36);
+insert into t (id,a) values (355,37);
+insert into t (id,a) values (355,38);
+insert into t (id,a) values (355,39);
+insert into t (id,a) values (355,40);
+insert into t (id,a) values (355,41);
+insert into t (id,a) values (355,42);
+insert into t (id,a) values (355,43);
+insert into t (id,a) values (355,44);
+insert into t (id,a) values (355,45);
+insert into t (id,a) values (355,46);
+insert into t (id,a) values (355,47);
+insert into t (id,a) values (355,48);
+insert into t (id,a) values (355,49);
+insert into t (id,a) values (355,50);
+insert into t (id,a) values (355,51);
+insert into t (id,a) values (355,52);
+insert into t (id,a) values (355,53);
+insert into t (id,a) values (355,54);
+insert into t (id,a) values (355,55);
+insert into t (id,a) values (355,56);
+insert into t (id,a) values (355,57);
+insert into t (id,a) values (355,58);
+insert into t (id,a) values (355,59);
+insert into t (id,a) values (355,60);
+insert into t (id,a) values (355,61);
+insert into t (id,a) values (355,62);
+insert into t (id,a) values (355,63);
+insert into t (id,a) values (355,64);
+insert into t (id,a) values (355,65);
+insert into t (id,a) values (355,66);
+insert into t (id,a) values (355,67);
+insert into t (id,a) values (355,68);
+insert into t (id,a) values (355,69);
+insert into t (id,a) values (355,70);
+insert into t (id,a) values (355,71);
+insert into t (id,a) values (355,72);
+insert into t (id,a) values (355,73);
+insert into t (id,a) values (355,74);
+insert into t (id,a) values (355,75);
+insert into t (id,a) values (355,76);
+insert into t (id,a) values (355,77);
+insert into t (id,a) values (355,78);
+insert into t (id,a) values (355,79);
+insert into t (id,a) values (355,80);
+insert into t (id,a) values (355,81);
+insert into t (id,a) values (355,82);
+insert into t (id,a) values (355,83);
+insert into t (id,a) values (355,84);
+insert into t (id,a) values (355,85);
+insert into t (id,a) values (355,86);
+insert into t (id,a) values (355,87);
+insert into t (id,a) values (355,88);
+insert into t (id,a) values (355,89);
+insert into t (id,a) values (355,90);
+insert into t (id,a) values (355,91);
+insert into t (id,a) values (355,92);
+insert into t (id,a) values (355,93);
+insert into t (id,a) values (355,94);
+insert into t (id,a) values (355,95);
+insert into t (id,a) values (355,96);
+insert into t (id,a) values (355,97);
+insert into t (id,a) values (355,98);
+insert into t (id,a) values (355,99);
+insert into t (id,a) values (356,0);
+insert into t (id,a) values (356,1);
+insert into t (id,a) values (356,2);
+insert into t (id,a) values (356,3);
+insert into t (id,a) values (356,4);
+insert into t (id,a) values (356,5);
+insert into t (id,a) values (356,6);
+insert into t (id,a) values (356,7);
+insert into t (id,a) values (356,8);
+insert into t (id,a) values (356,9);
+insert into t (id,a) values (356,10);
+insert into t (id,a) values (356,11);
+insert into t (id,a) values (356,12);
+insert into t (id,a) values (356,13);
+insert into t (id,a) values (356,14);
+insert into t (id,a) values (356,15);
+insert into t (id,a) values (356,16);
+insert into t (id,a) values (356,17);
+insert into t (id,a) values (356,18);
+insert into t (id,a) values (356,19);
+insert into t (id,a) values (356,20);
+insert into t (id,a) values (356,21);
+insert into t (id,a) values (356,22);
+insert into t (id,a) values (356,23);
+insert into t (id,a) values (356,24);
+insert into t (id,a) values (356,25);
+insert into t (id,a) values (356,26);
+insert into t (id,a) values (356,27);
+insert into t (id,a) values (356,28);
+insert into t (id,a) values (356,29);
+insert into t (id,a) values (356,30);
+insert into t (id,a) values (356,31);
+insert into t (id,a) values (356,32);
+insert into t (id,a) values (356,33);
+insert into t (id,a) values (356,34);
+insert into t (id,a) values (356,35);
+insert into t (id,a) values (356,36);
+insert into t (id,a) values (356,37);
+insert into t (id,a) values (356,38);
+insert into t (id,a) values (356,39);
+insert into t (id,a) values (356,40);
+insert into t (id,a) values (356,41);
+insert into t (id,a) values (356,42);
+insert into t (id,a) values (356,43);
+insert into t (id,a) values (356,44);
+insert into t (id,a) values (356,45);
+insert into t (id,a) values (356,46);
+insert into t (id,a) values (356,47);
+insert into t (id,a) values (356,48);
+insert into t (id,a) values (356,49);
+insert into t (id,a) values (356,50);
+insert into t (id,a) values (356,51);
+insert into t (id,a) values (356,52);
+insert into t (id,a) values (356,53);
+insert into t (id,a) values (356,54);
+insert into t (id,a) values (356,55);
+insert into t (id,a) values (356,56);
+insert into t (id,a) values (356,57);
+insert into t (id,a) values (356,58);
+insert into t (id,a) values (356,59);
+insert into t (id,a) values (356,60);
+insert into t (id,a) values (356,61);
+insert into t (id,a) values (356,62);
+insert into t (id,a) values (356,63);
+insert into t (id,a) values (356,64);
+insert into t (id,a) values (356,65);
+insert into t (id,a) values (356,66);
+insert into t (id,a) values (356,67);
+insert into t (id,a) values (356,68);
+insert into t (id,a) values (356,69);
+insert into t (id,a) values (356,70);
+insert into t (id,a) values (356,71);
+insert into t (id,a) values (356,72);
+insert into t (id,a) values (356,73);
+insert into t (id,a) values (356,74);
+insert into t (id,a) values (356,75);
+insert into t (id,a) values (356,76);
+insert into t (id,a) values (356,77);
+insert into t (id,a) values (356,78);
+insert into t (id,a) values (356,79);
+insert into t (id,a) values (356,80);
+insert into t (id,a) values (356,81);
+insert into t (id,a) values (356,82);
+insert into t (id,a) values (356,83);
+insert into t (id,a) values (356,84);
+insert into t (id,a) values (356,85);
+insert into t (id,a) values (356,86);
+insert into t (id,a) values (356,87);
+insert into t (id,a) values (356,88);
+insert into t (id,a) values (356,89);
+insert into t (id,a) values (356,90);
+insert into t (id,a) values (356,91);
+insert into t (id,a) values (356,92);
+insert into t (id,a) values (356,93);
+insert into t (id,a) values (356,94);
+insert into t (id,a) values (356,95);
+insert into t (id,a) values (356,96);
+insert into t (id,a) values (356,97);
+insert into t (id,a) values (356,98);
+insert into t (id,a) values (356,99);
+insert into t (id,a) values (357,0);
+insert into t (id,a) values (357,1);
+insert into t (id,a) values (357,2);
+insert into t (id,a) values (357,3);
+insert into t (id,a) values (357,4);
+insert into t (id,a) values (357,5);
+insert into t (id,a) values (357,6);
+insert into t (id,a) values (357,7);
+insert into t (id,a) values (357,8);
+insert into t (id,a) values (357,9);
+insert into t (id,a) values (357,10);
+insert into t (id,a) values (357,11);
+insert into t (id,a) values (357,12);
+insert into t (id,a) values (357,13);
+insert into t (id,a) values (357,14);
+insert into t (id,a) values (357,15);
+insert into t (id,a) values (357,16);
+insert into t (id,a) values (357,17);
+insert into t (id,a) values (357,18);
+insert into t (id,a) values (357,19);
+insert into t (id,a) values (357,20);
+insert into t (id,a) values (357,21);
+insert into t (id,a) values (357,22);
+insert into t (id,a) values (357,23);
+insert into t (id,a) values (357,24);
+insert into t (id,a) values (357,25);
+insert into t (id,a) values (357,26);
+insert into t (id,a) values (357,27);
+insert into t (id,a) values (357,28);
+insert into t (id,a) values (357,29);
+insert into t (id,a) values (357,30);
+insert into t (id,a) values (357,31);
+insert into t (id,a) values (357,32);
+insert into t (id,a) values (357,33);
+insert into t (id,a) values (357,34);
+insert into t (id,a) values (357,35);
+insert into t (id,a) values (357,36);
+insert into t (id,a) values (357,37);
+insert into t (id,a) values (357,38);
+insert into t (id,a) values (357,39);
+insert into t (id,a) values (357,40);
+insert into t (id,a) values (357,41);
+insert into t (id,a) values (357,42);
+insert into t (id,a) values (357,43);
+insert into t (id,a) values (357,44);
+insert into t (id,a) values (357,45);
+insert into t (id,a) values (357,46);
+insert into t (id,a) values (357,47);
+insert into t (id,a) values (357,48);
+insert into t (id,a) values (357,49);
+insert into t (id,a) values (357,50);
+insert into t (id,a) values (357,51);
+insert into t (id,a) values (357,52);
+insert into t (id,a) values (357,53);
+insert into t (id,a) values (357,54);
+insert into t (id,a) values (357,55);
+insert into t (id,a) values (357,56);
+insert into t (id,a) values (357,57);
+insert into t (id,a) values (357,58);
+insert into t (id,a) values (357,59);
+insert into t (id,a) values (357,60);
+insert into t (id,a) values (357,61);
+insert into t (id,a) values (357,62);
+insert into t (id,a) values (357,63);
+insert into t (id,a) values (357,64);
+insert into t (id,a) values (357,65);
+insert into t (id,a) values (357,66);
+insert into t (id,a) values (357,67);
+insert into t (id,a) values (357,68);
+insert into t (id,a) values (357,69);
+insert into t (id,a) values (357,70);
+insert into t (id,a) values (357,71);
+insert into t (id,a) values (357,72);
+insert into t (id,a) values (357,73);
+insert into t (id,a) values (357,74);
+insert into t (id,a) values (357,75);
+insert into t (id,a) values (357,76);
+insert into t (id,a) values (357,77);
+insert into t (id,a) values (357,78);
+insert into t (id,a) values (357,79);
+insert into t (id,a) values (357,80);
+insert into t (id,a) values (357,81);
+insert into t (id,a) values (357,82);
+insert into t (id,a) values (357,83);
+insert into t (id,a) values (357,84);
+insert into t (id,a) values (357,85);
+insert into t (id,a) values (357,86);
+insert into t (id,a) values (357,87);
+insert into t (id,a) values (357,88);
+insert into t (id,a) values (357,89);
+insert into t (id,a) values (357,90);
+insert into t (id,a) values (357,91);
+insert into t (id,a) values (357,92);
+insert into t (id,a) values (357,93);
+insert into t (id,a) values (357,94);
+insert into t (id,a) values (357,95);
+insert into t (id,a) values (357,96);
+insert into t (id,a) values (357,97);
+insert into t (id,a) values (357,98);
+insert into t (id,a) values (357,99);
+insert into t (id,a) values (358,0);
+insert into t (id,a) values (358,1);
+insert into t (id,a) values (358,2);
+insert into t (id,a) values (358,3);
+insert into t (id,a) values (358,4);
+insert into t (id,a) values (358,5);
+insert into t (id,a) values (358,6);
+insert into t (id,a) values (358,7);
+insert into t (id,a) values (358,8);
+insert into t (id,a) values (358,9);
+insert into t (id,a) values (358,10);
+insert into t (id,a) values (358,11);
+insert into t (id,a) values (358,12);
+insert into t (id,a) values (358,13);
+insert into t (id,a) values (358,14);
+insert into t (id,a) values (358,15);
+insert into t (id,a) values (358,16);
+insert into t (id,a) values (358,17);
+insert into t (id,a) values (358,18);
+insert into t (id,a) values (358,19);
+insert into t (id,a) values (358,20);
+insert into t (id,a) values (358,21);
+insert into t (id,a) values (358,22);
+insert into t (id,a) values (358,23);
+insert into t (id,a) values (358,24);
+insert into t (id,a) values (358,25);
+insert into t (id,a) values (358,26);
+insert into t (id,a) values (358,27);
+insert into t (id,a) values (358,28);
+insert into t (id,a) values (358,29);
+insert into t (id,a) values (358,30);
+insert into t (id,a) values (358,31);
+insert into t (id,a) values (358,32);
+insert into t (id,a) values (358,33);
+insert into t (id,a) values (358,34);
+insert into t (id,a) values (358,35);
+insert into t (id,a) values (358,36);
+insert into t (id,a) values (358,37);
+insert into t (id,a) values (358,38);
+insert into t (id,a) values (358,39);
+insert into t (id,a) values (358,40);
+insert into t (id,a) values (358,41);
+insert into t (id,a) values (358,42);
+insert into t (id,a) values (358,43);
+insert into t (id,a) values (358,44);
+insert into t (id,a) values (358,45);
+insert into t (id,a) values (358,46);
+insert into t (id,a) values (358,47);
+insert into t (id,a) values (358,48);
+insert into t (id,a) values (358,49);
+insert into t (id,a) values (358,50);
+insert into t (id,a) values (358,51);
+insert into t (id,a) values (358,52);
+insert into t (id,a) values (358,53);
+insert into t (id,a) values (358,54);
+insert into t (id,a) values (358,55);
+insert into t (id,a) values (358,56);
+insert into t (id,a) values (358,57);
+insert into t (id,a) values (358,58);
+insert into t (id,a) values (358,59);
+insert into t (id,a) values (358,60);
+insert into t (id,a) values (358,61);
+insert into t (id,a) values (358,62);
+insert into t (id,a) values (358,63);
+insert into t (id,a) values (358,64);
+insert into t (id,a) values (358,65);
+insert into t (id,a) values (358,66);
+insert into t (id,a) values (358,67);
+insert into t (id,a) values (358,68);
+insert into t (id,a) values (358,69);
+insert into t (id,a) values (358,70);
+insert into t (id,a) values (358,71);
+insert into t (id,a) values (358,72);
+insert into t (id,a) values (358,73);
+insert into t (id,a) values (358,74);
+insert into t (id,a) values (358,75);
+insert into t (id,a) values (358,76);
+insert into t (id,a) values (358,77);
+insert into t (id,a) values (358,78);
+insert into t (id,a) values (358,79);
+insert into t (id,a) values (358,80);
+insert into t (id,a) values (358,81);
+insert into t (id,a) values (358,82);
+insert into t (id,a) values (358,83);
+insert into t (id,a) values (358,84);
+insert into t (id,a) values (358,85);
+insert into t (id,a) values (358,86);
+insert into t (id,a) values (358,87);
+insert into t (id,a) values (358,88);
+insert into t (id,a) values (358,89);
+insert into t (id,a) values (358,90);
+insert into t (id,a) values (358,91);
+insert into t (id,a) values (358,92);
+insert into t (id,a) values (358,93);
+insert into t (id,a) values (358,94);
+insert into t (id,a) values (358,95);
+insert into t (id,a) values (358,96);
+insert into t (id,a) values (358,97);
+insert into t (id,a) values (358,98);
+insert into t (id,a) values (358,99);
+insert into t (id,a) values (359,0);
+insert into t (id,a) values (359,1);
+insert into t (id,a) values (359,2);
+insert into t (id,a) values (359,3);
+insert into t (id,a) values (359,4);
+insert into t (id,a) values (359,5);
+insert into t (id,a) values (359,6);
+insert into t (id,a) values (359,7);
+insert into t (id,a) values (359,8);
+insert into t (id,a) values (359,9);
+insert into t (id,a) values (359,10);
+insert into t (id,a) values (359,11);
+insert into t (id,a) values (359,12);
+insert into t (id,a) values (359,13);
+insert into t (id,a) values (359,14);
+insert into t (id,a) values (359,15);
+insert into t (id,a) values (359,16);
+insert into t (id,a) values (359,17);
+insert into t (id,a) values (359,18);
+insert into t (id,a) values (359,19);
+insert into t (id,a) values (359,20);
+insert into t (id,a) values (359,21);
+insert into t (id,a) values (359,22);
+insert into t (id,a) values (359,23);
+insert into t (id,a) values (359,24);
+insert into t (id,a) values (359,25);
+insert into t (id,a) values (359,26);
+insert into t (id,a) values (359,27);
+insert into t (id,a) values (359,28);
+insert into t (id,a) values (359,29);
+insert into t (id,a) values (359,30);
+insert into t (id,a) values (359,31);
+insert into t (id,a) values (359,32);
+insert into t (id,a) values (359,33);
+insert into t (id,a) values (359,34);
+insert into t (id,a) values (359,35);
+insert into t (id,a) values (359,36);
+insert into t (id,a) values (359,37);
+insert into t (id,a) values (359,38);
+insert into t (id,a) values (359,39);
+insert into t (id,a) values (359,40);
+insert into t (id,a) values (359,41);
+insert into t (id,a) values (359,42);
+insert into t (id,a) values (359,43);
+insert into t (id,a) values (359,44);
+insert into t (id,a) values (359,45);
+insert into t (id,a) values (359,46);
+insert into t (id,a) values (359,47);
+insert into t (id,a) values (359,48);
+insert into t (id,a) values (359,49);
+insert into t (id,a) values (359,50);
+insert into t (id,a) values (359,51);
+insert into t (id,a) values (359,52);
+insert into t (id,a) values (359,53);
+insert into t (id,a) values (359,54);
+insert into t (id,a) values (359,55);
+insert into t (id,a) values (359,56);
+insert into t (id,a) values (359,57);
+insert into t (id,a) values (359,58);
+insert into t (id,a) values (359,59);
+insert into t (id,a) values (359,60);
+insert into t (id,a) values (359,61);
+insert into t (id,a) values (359,62);
+insert into t (id,a) values (359,63);
+insert into t (id,a) values (359,64);
+insert into t (id,a) values (359,65);
+insert into t (id,a) values (359,66);
+insert into t (id,a) values (359,67);
+insert into t (id,a) values (359,68);
+insert into t (id,a) values (359,69);
+insert into t (id,a) values (359,70);
+insert into t (id,a) values (359,71);
+insert into t (id,a) values (359,72);
+insert into t (id,a) values (359,73);
+insert into t (id,a) values (359,74);
+insert into t (id,a) values (359,75);
+insert into t (id,a) values (359,76);
+insert into t (id,a) values (359,77);
+insert into t (id,a) values (359,78);
+insert into t (id,a) values (359,79);
+insert into t (id,a) values (359,80);
+insert into t (id,a) values (359,81);
+insert into t (id,a) values (359,82);
+insert into t (id,a) values (359,83);
+insert into t (id,a) values (359,84);
+insert into t (id,a) values (359,85);
+insert into t (id,a) values (359,86);
+insert into t (id,a) values (359,87);
+insert into t (id,a) values (359,88);
+insert into t (id,a) values (359,89);
+insert into t (id,a) values (359,90);
+insert into t (id,a) values (359,91);
+insert into t (id,a) values (359,92);
+insert into t (id,a) values (359,93);
+insert into t (id,a) values (359,94);
+insert into t (id,a) values (359,95);
+insert into t (id,a) values (359,96);
+insert into t (id,a) values (359,97);
+insert into t (id,a) values (359,98);
+insert into t (id,a) values (359,99);
+insert into t (id,a) values (360,0);
+insert into t (id,a) values (360,1);
+insert into t (id,a) values (360,2);
+insert into t (id,a) values (360,3);
+insert into t (id,a) values (360,4);
+insert into t (id,a) values (360,5);
+insert into t (id,a) values (360,6);
+insert into t (id,a) values (360,7);
+insert into t (id,a) values (360,8);
+insert into t (id,a) values (360,9);
+insert into t (id,a) values (360,10);
+insert into t (id,a) values (360,11);
+insert into t (id,a) values (360,12);
+insert into t (id,a) values (360,13);
+insert into t (id,a) values (360,14);
+insert into t (id,a) values (360,15);
+insert into t (id,a) values (360,16);
+insert into t (id,a) values (360,17);
+insert into t (id,a) values (360,18);
+insert into t (id,a) values (360,19);
+insert into t (id,a) values (360,20);
+insert into t (id,a) values (360,21);
+insert into t (id,a) values (360,22);
+insert into t (id,a) values (360,23);
+insert into t (id,a) values (360,24);
+insert into t (id,a) values (360,25);
+insert into t (id,a) values (360,26);
+insert into t (id,a) values (360,27);
+insert into t (id,a) values (360,28);
+insert into t (id,a) values (360,29);
+insert into t (id,a) values (360,30);
+insert into t (id,a) values (360,31);
+insert into t (id,a) values (360,32);
+insert into t (id,a) values (360,33);
+insert into t (id,a) values (360,34);
+insert into t (id,a) values (360,35);
+insert into t (id,a) values (360,36);
+insert into t (id,a) values (360,37);
+insert into t (id,a) values (360,38);
+insert into t (id,a) values (360,39);
+insert into t (id,a) values (360,40);
+insert into t (id,a) values (360,41);
+insert into t (id,a) values (360,42);
+insert into t (id,a) values (360,43);
+insert into t (id,a) values (360,44);
+insert into t (id,a) values (360,45);
+insert into t (id,a) values (360,46);
+insert into t (id,a) values (360,47);
+insert into t (id,a) values (360,48);
+insert into t (id,a) values (360,49);
+insert into t (id,a) values (360,50);
+insert into t (id,a) values (360,51);
+insert into t (id,a) values (360,52);
+insert into t (id,a) values (360,53);
+insert into t (id,a) values (360,54);
+insert into t (id,a) values (360,55);
+insert into t (id,a) values (360,56);
+insert into t (id,a) values (360,57);
+insert into t (id,a) values (360,58);
+insert into t (id,a) values (360,59);
+insert into t (id,a) values (360,60);
+insert into t (id,a) values (360,61);
+insert into t (id,a) values (360,62);
+insert into t (id,a) values (360,63);
+insert into t (id,a) values (360,64);
+insert into t (id,a) values (360,65);
+insert into t (id,a) values (360,66);
+insert into t (id,a) values (360,67);
+insert into t (id,a) values (360,68);
+insert into t (id,a) values (360,69);
+insert into t (id,a) values (360,70);
+insert into t (id,a) values (360,71);
+insert into t (id,a) values (360,72);
+insert into t (id,a) values (360,73);
+insert into t (id,a) values (360,74);
+insert into t (id,a) values (360,75);
+insert into t (id,a) values (360,76);
+insert into t (id,a) values (360,77);
+insert into t (id,a) values (360,78);
+insert into t (id,a) values (360,79);
+insert into t (id,a) values (360,80);
+insert into t (id,a) values (360,81);
+insert into t (id,a) values (360,82);
+insert into t (id,a) values (360,83);
+insert into t (id,a) values (360,84);
+insert into t (id,a) values (360,85);
+insert into t (id,a) values (360,86);
+insert into t (id,a) values (360,87);
+insert into t (id,a) values (360,88);
+insert into t (id,a) values (360,89);
+insert into t (id,a) values (360,90);
+insert into t (id,a) values (360,91);
+insert into t (id,a) values (360,92);
+insert into t (id,a) values (360,93);
+insert into t (id,a) values (360,94);
+insert into t (id,a) values (360,95);
+insert into t (id,a) values (360,96);
+insert into t (id,a) values (360,97);
+insert into t (id,a) values (360,98);
+insert into t (id,a) values (360,99);
+insert into t (id,a) values (361,0);
+insert into t (id,a) values (361,1);
+insert into t (id,a) values (361,2);
+insert into t (id,a) values (361,3);
+insert into t (id,a) values (361,4);
+insert into t (id,a) values (361,5);
+insert into t (id,a) values (361,6);
+insert into t (id,a) values (361,7);
+insert into t (id,a) values (361,8);
+insert into t (id,a) values (361,9);
+insert into t (id,a) values (361,10);
+insert into t (id,a) values (361,11);
+insert into t (id,a) values (361,12);
+insert into t (id,a) values (361,13);
+insert into t (id,a) values (361,14);
+insert into t (id,a) values (361,15);
+insert into t (id,a) values (361,16);
+insert into t (id,a) values (361,17);
+insert into t (id,a) values (361,18);
+insert into t (id,a) values (361,19);
+insert into t (id,a) values (361,20);
+insert into t (id,a) values (361,21);
+insert into t (id,a) values (361,22);
+insert into t (id,a) values (361,23);
+insert into t (id,a) values (361,24);
+insert into t (id,a) values (361,25);
+insert into t (id,a) values (361,26);
+insert into t (id,a) values (361,27);
+insert into t (id,a) values (361,28);
+insert into t (id,a) values (361,29);
+insert into t (id,a) values (361,30);
+insert into t (id,a) values (361,31);
+insert into t (id,a) values (361,32);
+insert into t (id,a) values (361,33);
+insert into t (id,a) values (361,34);
+insert into t (id,a) values (361,35);
+insert into t (id,a) values (361,36);
+insert into t (id,a) values (361,37);
+insert into t (id,a) values (361,38);
+insert into t (id,a) values (361,39);
+insert into t (id,a) values (361,40);
+insert into t (id,a) values (361,41);
+insert into t (id,a) values (361,42);
+insert into t (id,a) values (361,43);
+insert into t (id,a) values (361,44);
+insert into t (id,a) values (361,45);
+insert into t (id,a) values (361,46);
+insert into t (id,a) values (361,47);
+insert into t (id,a) values (361,48);
+insert into t (id,a) values (361,49);
+insert into t (id,a) values (361,50);
+insert into t (id,a) values (361,51);
+insert into t (id,a) values (361,52);
+insert into t (id,a) values (361,53);
+insert into t (id,a) values (361,54);
+insert into t (id,a) values (361,55);
+insert into t (id,a) values (361,56);
+insert into t (id,a) values (361,57);
+insert into t (id,a) values (361,58);
+insert into t (id,a) values (361,59);
+insert into t (id,a) values (361,60);
+insert into t (id,a) values (361,61);
+insert into t (id,a) values (361,62);
+insert into t (id,a) values (361,63);
+insert into t (id,a) values (361,64);
+insert into t (id,a) values (361,65);
+insert into t (id,a) values (361,66);
+insert into t (id,a) values (361,67);
+insert into t (id,a) values (361,68);
+insert into t (id,a) values (361,69);
+insert into t (id,a) values (361,70);
+insert into t (id,a) values (361,71);
+insert into t (id,a) values (361,72);
+insert into t (id,a) values (361,73);
+insert into t (id,a) values (361,74);
+insert into t (id,a) values (361,75);
+insert into t (id,a) values (361,76);
+insert into t (id,a) values (361,77);
+insert into t (id,a) values (361,78);
+insert into t (id,a) values (361,79);
+insert into t (id,a) values (361,80);
+insert into t (id,a) values (361,81);
+insert into t (id,a) values (361,82);
+insert into t (id,a) values (361,83);
+insert into t (id,a) values (361,84);
+insert into t (id,a) values (361,85);
+insert into t (id,a) values (361,86);
+insert into t (id,a) values (361,87);
+insert into t (id,a) values (361,88);
+insert into t (id,a) values (361,89);
+insert into t (id,a) values (361,90);
+insert into t (id,a) values (361,91);
+insert into t (id,a) values (361,92);
+insert into t (id,a) values (361,93);
+insert into t (id,a) values (361,94);
+insert into t (id,a) values (361,95);
+insert into t (id,a) values (361,96);
+insert into t (id,a) values (361,97);
+insert into t (id,a) values (361,98);
+insert into t (id,a) values (361,99);
+insert into t (id,a) values (362,0);
+insert into t (id,a) values (362,1);
+insert into t (id,a) values (362,2);
+insert into t (id,a) values (362,3);
+insert into t (id,a) values (362,4);
+insert into t (id,a) values (362,5);
+insert into t (id,a) values (362,6);
+insert into t (id,a) values (362,7);
+insert into t (id,a) values (362,8);
+insert into t (id,a) values (362,9);
+insert into t (id,a) values (362,10);
+insert into t (id,a) values (362,11);
+insert into t (id,a) values (362,12);
+insert into t (id,a) values (362,13);
+insert into t (id,a) values (362,14);
+insert into t (id,a) values (362,15);
+insert into t (id,a) values (362,16);
+insert into t (id,a) values (362,17);
+insert into t (id,a) values (362,18);
+insert into t (id,a) values (362,19);
+insert into t (id,a) values (362,20);
+insert into t (id,a) values (362,21);
+insert into t (id,a) values (362,22);
+insert into t (id,a) values (362,23);
+insert into t (id,a) values (362,24);
+insert into t (id,a) values (362,25);
+insert into t (id,a) values (362,26);
+insert into t (id,a) values (362,27);
+insert into t (id,a) values (362,28);
+insert into t (id,a) values (362,29);
+insert into t (id,a) values (362,30);
+insert into t (id,a) values (362,31);
+insert into t (id,a) values (362,32);
+insert into t (id,a) values (362,33);
+insert into t (id,a) values (362,34);
+insert into t (id,a) values (362,35);
+insert into t (id,a) values (362,36);
+insert into t (id,a) values (362,37);
+insert into t (id,a) values (362,38);
+insert into t (id,a) values (362,39);
+insert into t (id,a) values (362,40);
+insert into t (id,a) values (362,41);
+insert into t (id,a) values (362,42);
+insert into t (id,a) values (362,43);
+insert into t (id,a) values (362,44);
+insert into t (id,a) values (362,45);
+insert into t (id,a) values (362,46);
+insert into t (id,a) values (362,47);
+insert into t (id,a) values (362,48);
+insert into t (id,a) values (362,49);
+insert into t (id,a) values (362,50);
+insert into t (id,a) values (362,51);
+insert into t (id,a) values (362,52);
+insert into t (id,a) values (362,53);
+insert into t (id,a) values (362,54);
+insert into t (id,a) values (362,55);
+insert into t (id,a) values (362,56);
+insert into t (id,a) values (362,57);
+insert into t (id,a) values (362,58);
+insert into t (id,a) values (362,59);
+insert into t (id,a) values (362,60);
+insert into t (id,a) values (362,61);
+insert into t (id,a) values (362,62);
+insert into t (id,a) values (362,63);
+insert into t (id,a) values (362,64);
+insert into t (id,a) values (362,65);
+insert into t (id,a) values (362,66);
+insert into t (id,a) values (362,67);
+insert into t (id,a) values (362,68);
+insert into t (id,a) values (362,69);
+insert into t (id,a) values (362,70);
+insert into t (id,a) values (362,71);
+insert into t (id,a) values (362,72);
+insert into t (id,a) values (362,73);
+insert into t (id,a) values (362,74);
+insert into t (id,a) values (362,75);
+insert into t (id,a) values (362,76);
+insert into t (id,a) values (362,77);
+insert into t (id,a) values (362,78);
+insert into t (id,a) values (362,79);
+insert into t (id,a) values (362,80);
+insert into t (id,a) values (362,81);
+insert into t (id,a) values (362,82);
+insert into t (id,a) values (362,83);
+insert into t (id,a) values (362,84);
+insert into t (id,a) values (362,85);
+insert into t (id,a) values (362,86);
+insert into t (id,a) values (362,87);
+insert into t (id,a) values (362,88);
+insert into t (id,a) values (362,89);
+insert into t (id,a) values (362,90);
+insert into t (id,a) values (362,91);
+insert into t (id,a) values (362,92);
+insert into t (id,a) values (362,93);
+insert into t (id,a) values (362,94);
+insert into t (id,a) values (362,95);
+insert into t (id,a) values (362,96);
+insert into t (id,a) values (362,97);
+insert into t (id,a) values (362,98);
+insert into t (id,a) values (362,99);
+insert into t (id,a) values (363,0);
+insert into t (id,a) values (363,1);
+insert into t (id,a) values (363,2);
+insert into t (id,a) values (363,3);
+insert into t (id,a) values (363,4);
+insert into t (id,a) values (363,5);
+insert into t (id,a) values (363,6);
+insert into t (id,a) values (363,7);
+insert into t (id,a) values (363,8);
+insert into t (id,a) values (363,9);
+insert into t (id,a) values (363,10);
+insert into t (id,a) values (363,11);
+insert into t (id,a) values (363,12);
+insert into t (id,a) values (363,13);
+insert into t (id,a) values (363,14);
+insert into t (id,a) values (363,15);
+insert into t (id,a) values (363,16);
+insert into t (id,a) values (363,17);
+insert into t (id,a) values (363,18);
+insert into t (id,a) values (363,19);
+insert into t (id,a) values (363,20);
+insert into t (id,a) values (363,21);
+insert into t (id,a) values (363,22);
+insert into t (id,a) values (363,23);
+insert into t (id,a) values (363,24);
+insert into t (id,a) values (363,25);
+insert into t (id,a) values (363,26);
+insert into t (id,a) values (363,27);
+insert into t (id,a) values (363,28);
+insert into t (id,a) values (363,29);
+insert into t (id,a) values (363,30);
+insert into t (id,a) values (363,31);
+insert into t (id,a) values (363,32);
+insert into t (id,a) values (363,33);
+insert into t (id,a) values (363,34);
+insert into t (id,a) values (363,35);
+insert into t (id,a) values (363,36);
+insert into t (id,a) values (363,37);
+insert into t (id,a) values (363,38);
+insert into t (id,a) values (363,39);
+insert into t (id,a) values (363,40);
+insert into t (id,a) values (363,41);
+insert into t (id,a) values (363,42);
+insert into t (id,a) values (363,43);
+insert into t (id,a) values (363,44);
+insert into t (id,a) values (363,45);
+insert into t (id,a) values (363,46);
+insert into t (id,a) values (363,47);
+insert into t (id,a) values (363,48);
+insert into t (id,a) values (363,49);
+insert into t (id,a) values (363,50);
+insert into t (id,a) values (363,51);
+insert into t (id,a) values (363,52);
+insert into t (id,a) values (363,53);
+insert into t (id,a) values (363,54);
+insert into t (id,a) values (363,55);
+insert into t (id,a) values (363,56);
+insert into t (id,a) values (363,57);
+insert into t (id,a) values (363,58);
+insert into t (id,a) values (363,59);
+insert into t (id,a) values (363,60);
+insert into t (id,a) values (363,61);
+insert into t (id,a) values (363,62);
+insert into t (id,a) values (363,63);
+insert into t (id,a) values (363,64);
+insert into t (id,a) values (363,65);
+insert into t (id,a) values (363,66);
+insert into t (id,a) values (363,67);
+insert into t (id,a) values (363,68);
+insert into t (id,a) values (363,69);
+insert into t (id,a) values (363,70);
+insert into t (id,a) values (363,71);
+insert into t (id,a) values (363,72);
+insert into t (id,a) values (363,73);
+insert into t (id,a) values (363,74);
+insert into t (id,a) values (363,75);
+insert into t (id,a) values (363,76);
+insert into t (id,a) values (363,77);
+insert into t (id,a) values (363,78);
+insert into t (id,a) values (363,79);
+insert into t (id,a) values (363,80);
+insert into t (id,a) values (363,81);
+insert into t (id,a) values (363,82);
+insert into t (id,a) values (363,83);
+insert into t (id,a) values (363,84);
+insert into t (id,a) values (363,85);
+insert into t (id,a) values (363,86);
+insert into t (id,a) values (363,87);
+insert into t (id,a) values (363,88);
+insert into t (id,a) values (363,89);
+insert into t (id,a) values (363,90);
+insert into t (id,a) values (363,91);
+insert into t (id,a) values (363,92);
+insert into t (id,a) values (363,93);
+insert into t (id,a) values (363,94);
+insert into t (id,a) values (363,95);
+insert into t (id,a) values (363,96);
+insert into t (id,a) values (363,97);
+insert into t (id,a) values (363,98);
+insert into t (id,a) values (363,99);
+insert into t (id,a) values (364,0);
+insert into t (id,a) values (364,1);
+insert into t (id,a) values (364,2);
+insert into t (id,a) values (364,3);
+insert into t (id,a) values (364,4);
+insert into t (id,a) values (364,5);
+insert into t (id,a) values (364,6);
+insert into t (id,a) values (364,7);
+insert into t (id,a) values (364,8);
+insert into t (id,a) values (364,9);
+insert into t (id,a) values (364,10);
+insert into t (id,a) values (364,11);
+insert into t (id,a) values (364,12);
+insert into t (id,a) values (364,13);
+insert into t (id,a) values (364,14);
+insert into t (id,a) values (364,15);
+insert into t (id,a) values (364,16);
+insert into t (id,a) values (364,17);
+insert into t (id,a) values (364,18);
+insert into t (id,a) values (364,19);
+insert into t (id,a) values (364,20);
+insert into t (id,a) values (364,21);
+insert into t (id,a) values (364,22);
+insert into t (id,a) values (364,23);
+insert into t (id,a) values (364,24);
+insert into t (id,a) values (364,25);
+insert into t (id,a) values (364,26);
+insert into t (id,a) values (364,27);
+insert into t (id,a) values (364,28);
+insert into t (id,a) values (364,29);
+insert into t (id,a) values (364,30);
+insert into t (id,a) values (364,31);
+insert into t (id,a) values (364,32);
+insert into t (id,a) values (364,33);
+insert into t (id,a) values (364,34);
+insert into t (id,a) values (364,35);
+insert into t (id,a) values (364,36);
+insert into t (id,a) values (364,37);
+insert into t (id,a) values (364,38);
+insert into t (id,a) values (364,39);
+insert into t (id,a) values (364,40);
+insert into t (id,a) values (364,41);
+insert into t (id,a) values (364,42);
+insert into t (id,a) values (364,43);
+insert into t (id,a) values (364,44);
+insert into t (id,a) values (364,45);
+insert into t (id,a) values (364,46);
+insert into t (id,a) values (364,47);
+insert into t (id,a) values (364,48);
+insert into t (id,a) values (364,49);
+insert into t (id,a) values (364,50);
+insert into t (id,a) values (364,51);
+insert into t (id,a) values (364,52);
+insert into t (id,a) values (364,53);
+insert into t (id,a) values (364,54);
+insert into t (id,a) values (364,55);
+insert into t (id,a) values (364,56);
+insert into t (id,a) values (364,57);
+insert into t (id,a) values (364,58);
+insert into t (id,a) values (364,59);
+insert into t (id,a) values (364,60);
+insert into t (id,a) values (364,61);
+insert into t (id,a) values (364,62);
+insert into t (id,a) values (364,63);
+insert into t (id,a) values (364,64);
+insert into t (id,a) values (364,65);
+insert into t (id,a) values (364,66);
+insert into t (id,a) values (364,67);
+insert into t (id,a) values (364,68);
+insert into t (id,a) values (364,69);
+insert into t (id,a) values (364,70);
+insert into t (id,a) values (364,71);
+insert into t (id,a) values (364,72);
+insert into t (id,a) values (364,73);
+insert into t (id,a) values (364,74);
+insert into t (id,a) values (364,75);
+insert into t (id,a) values (364,76);
+insert into t (id,a) values (364,77);
+insert into t (id,a) values (364,78);
+insert into t (id,a) values (364,79);
+insert into t (id,a) values (364,80);
+insert into t (id,a) values (364,81);
+insert into t (id,a) values (364,82);
+insert into t (id,a) values (364,83);
+insert into t (id,a) values (364,84);
+insert into t (id,a) values (364,85);
+insert into t (id,a) values (364,86);
+insert into t (id,a) values (364,87);
+insert into t (id,a) values (364,88);
+insert into t (id,a) values (364,89);
+insert into t (id,a) values (364,90);
+insert into t (id,a) values (364,91);
+insert into t (id,a) values (364,92);
+insert into t (id,a) values (364,93);
+insert into t (id,a) values (364,94);
+insert into t (id,a) values (364,95);
+insert into t (id,a) values (364,96);
+insert into t (id,a) values (364,97);
+insert into t (id,a) values (364,98);
+insert into t (id,a) values (364,99);
+insert into t (id,a) values (365,0);
+insert into t (id,a) values (365,1);
+insert into t (id,a) values (365,2);
+insert into t (id,a) values (365,3);
+insert into t (id,a) values (365,4);
+insert into t (id,a) values (365,5);
+insert into t (id,a) values (365,6);
+insert into t (id,a) values (365,7);
+insert into t (id,a) values (365,8);
+insert into t (id,a) values (365,9);
+insert into t (id,a) values (365,10);
+insert into t (id,a) values (365,11);
+insert into t (id,a) values (365,12);
+insert into t (id,a) values (365,13);
+insert into t (id,a) values (365,14);
+insert into t (id,a) values (365,15);
+insert into t (id,a) values (365,16);
+insert into t (id,a) values (365,17);
+insert into t (id,a) values (365,18);
+insert into t (id,a) values (365,19);
+insert into t (id,a) values (365,20);
+insert into t (id,a) values (365,21);
+insert into t (id,a) values (365,22);
+insert into t (id,a) values (365,23);
+insert into t (id,a) values (365,24);
+insert into t (id,a) values (365,25);
+insert into t (id,a) values (365,26);
+insert into t (id,a) values (365,27);
+insert into t (id,a) values (365,28);
+insert into t (id,a) values (365,29);
+insert into t (id,a) values (365,30);
+insert into t (id,a) values (365,31);
+insert into t (id,a) values (365,32);
+insert into t (id,a) values (365,33);
+insert into t (id,a) values (365,34);
+insert into t (id,a) values (365,35);
+insert into t (id,a) values (365,36);
+insert into t (id,a) values (365,37);
+insert into t (id,a) values (365,38);
+insert into t (id,a) values (365,39);
+insert into t (id,a) values (365,40);
+insert into t (id,a) values (365,41);
+insert into t (id,a) values (365,42);
+insert into t (id,a) values (365,43);
+insert into t (id,a) values (365,44);
+insert into t (id,a) values (365,45);
+insert into t (id,a) values (365,46);
+insert into t (id,a) values (365,47);
+insert into t (id,a) values (365,48);
+insert into t (id,a) values (365,49);
+insert into t (id,a) values (365,50);
+insert into t (id,a) values (365,51);
+insert into t (id,a) values (365,52);
+insert into t (id,a) values (365,53);
+insert into t (id,a) values (365,54);
+insert into t (id,a) values (365,55);
+insert into t (id,a) values (365,56);
+insert into t (id,a) values (365,57);
+insert into t (id,a) values (365,58);
+insert into t (id,a) values (365,59);
+insert into t (id,a) values (365,60);
+insert into t (id,a) values (365,61);
+insert into t (id,a) values (365,62);
+insert into t (id,a) values (365,63);
+insert into t (id,a) values (365,64);
+insert into t (id,a) values (365,65);
+insert into t (id,a) values (365,66);
+insert into t (id,a) values (365,67);
+insert into t (id,a) values (365,68);
+insert into t (id,a) values (365,69);
+insert into t (id,a) values (365,70);
+insert into t (id,a) values (365,71);
+insert into t (id,a) values (365,72);
+insert into t (id,a) values (365,73);
+insert into t (id,a) values (365,74);
+insert into t (id,a) values (365,75);
+insert into t (id,a) values (365,76);
+insert into t (id,a) values (365,77);
+insert into t (id,a) values (365,78);
+insert into t (id,a) values (365,79);
+insert into t (id,a) values (365,80);
+insert into t (id,a) values (365,81);
+insert into t (id,a) values (365,82);
+insert into t (id,a) values (365,83);
+insert into t (id,a) values (365,84);
+insert into t (id,a) values (365,85);
+insert into t (id,a) values (365,86);
+insert into t (id,a) values (365,87);
+insert into t (id,a) values (365,88);
+insert into t (id,a) values (365,89);
+insert into t (id,a) values (365,90);
+insert into t (id,a) values (365,91);
+insert into t (id,a) values (365,92);
+insert into t (id,a) values (365,93);
+insert into t (id,a) values (365,94);
+insert into t (id,a) values (365,95);
+insert into t (id,a) values (365,96);
+insert into t (id,a) values (365,97);
+insert into t (id,a) values (365,98);
+insert into t (id,a) values (365,99);
+insert into t (id,a) values (366,0);
+insert into t (id,a) values (366,1);
+insert into t (id,a) values (366,2);
+insert into t (id,a) values (366,3);
+insert into t (id,a) values (366,4);
+insert into t (id,a) values (366,5);
+insert into t (id,a) values (366,6);
+insert into t (id,a) values (366,7);
+insert into t (id,a) values (366,8);
+insert into t (id,a) values (366,9);
+insert into t (id,a) values (366,10);
+insert into t (id,a) values (366,11);
+insert into t (id,a) values (366,12);
+insert into t (id,a) values (366,13);
+insert into t (id,a) values (366,14);
+insert into t (id,a) values (366,15);
+insert into t (id,a) values (366,16);
+insert into t (id,a) values (366,17);
+insert into t (id,a) values (366,18);
+insert into t (id,a) values (366,19);
+insert into t (id,a) values (366,20);
+insert into t (id,a) values (366,21);
+insert into t (id,a) values (366,22);
+insert into t (id,a) values (366,23);
+insert into t (id,a) values (366,24);
+insert into t (id,a) values (366,25);
+insert into t (id,a) values (366,26);
+insert into t (id,a) values (366,27);
+insert into t (id,a) values (366,28);
+insert into t (id,a) values (366,29);
+insert into t (id,a) values (366,30);
+insert into t (id,a) values (366,31);
+insert into t (id,a) values (366,32);
+insert into t (id,a) values (366,33);
+insert into t (id,a) values (366,34);
+insert into t (id,a) values (366,35);
+insert into t (id,a) values (366,36);
+insert into t (id,a) values (366,37);
+insert into t (id,a) values (366,38);
+insert into t (id,a) values (366,39);
+insert into t (id,a) values (366,40);
+insert into t (id,a) values (366,41);
+insert into t (id,a) values (366,42);
+insert into t (id,a) values (366,43);
+insert into t (id,a) values (366,44);
+insert into t (id,a) values (366,45);
+insert into t (id,a) values (366,46);
+insert into t (id,a) values (366,47);
+insert into t (id,a) values (366,48);
+insert into t (id,a) values (366,49);
+insert into t (id,a) values (366,50);
+insert into t (id,a) values (366,51);
+insert into t (id,a) values (366,52);
+insert into t (id,a) values (366,53);
+insert into t (id,a) values (366,54);
+insert into t (id,a) values (366,55);
+insert into t (id,a) values (366,56);
+insert into t (id,a) values (366,57);
+insert into t (id,a) values (366,58);
+insert into t (id,a) values (366,59);
+insert into t (id,a) values (366,60);
+insert into t (id,a) values (366,61);
+insert into t (id,a) values (366,62);
+insert into t (id,a) values (366,63);
+insert into t (id,a) values (366,64);
+insert into t (id,a) values (366,65);
+insert into t (id,a) values (366,66);
+insert into t (id,a) values (366,67);
+insert into t (id,a) values (366,68);
+insert into t (id,a) values (366,69);
+insert into t (id,a) values (366,70);
+insert into t (id,a) values (366,71);
+insert into t (id,a) values (366,72);
+insert into t (id,a) values (366,73);
+insert into t (id,a) values (366,74);
+insert into t (id,a) values (366,75);
+insert into t (id,a) values (366,76);
+insert into t (id,a) values (366,77);
+insert into t (id,a) values (366,78);
+insert into t (id,a) values (366,79);
+insert into t (id,a) values (366,80);
+insert into t (id,a) values (366,81);
+insert into t (id,a) values (366,82);
+insert into t (id,a) values (366,83);
+insert into t (id,a) values (366,84);
+insert into t (id,a) values (366,85);
+insert into t (id,a) values (366,86);
+insert into t (id,a) values (366,87);
+insert into t (id,a) values (366,88);
+insert into t (id,a) values (366,89);
+insert into t (id,a) values (366,90);
+insert into t (id,a) values (366,91);
+insert into t (id,a) values (366,92);
+insert into t (id,a) values (366,93);
+insert into t (id,a) values (366,94);
+insert into t (id,a) values (366,95);
+insert into t (id,a) values (366,96);
+insert into t (id,a) values (366,97);
+insert into t (id,a) values (366,98);
+insert into t (id,a) values (366,99);
+insert into t (id,a) values (367,0);
+insert into t (id,a) values (367,1);
+insert into t (id,a) values (367,2);
+insert into t (id,a) values (367,3);
+insert into t (id,a) values (367,4);
+insert into t (id,a) values (367,5);
+insert into t (id,a) values (367,6);
+insert into t (id,a) values (367,7);
+insert into t (id,a) values (367,8);
+insert into t (id,a) values (367,9);
+insert into t (id,a) values (367,10);
+insert into t (id,a) values (367,11);
+insert into t (id,a) values (367,12);
+insert into t (id,a) values (367,13);
+insert into t (id,a) values (367,14);
+insert into t (id,a) values (367,15);
+insert into t (id,a) values (367,16);
+insert into t (id,a) values (367,17);
+insert into t (id,a) values (367,18);
+insert into t (id,a) values (367,19);
+insert into t (id,a) values (367,20);
+insert into t (id,a) values (367,21);
+insert into t (id,a) values (367,22);
+insert into t (id,a) values (367,23);
+insert into t (id,a) values (367,24);
+insert into t (id,a) values (367,25);
+insert into t (id,a) values (367,26);
+insert into t (id,a) values (367,27);
+insert into t (id,a) values (367,28);
+insert into t (id,a) values (367,29);
+insert into t (id,a) values (367,30);
+insert into t (id,a) values (367,31);
+insert into t (id,a) values (367,32);
+insert into t (id,a) values (367,33);
+insert into t (id,a) values (367,34);
+insert into t (id,a) values (367,35);
+insert into t (id,a) values (367,36);
+insert into t (id,a) values (367,37);
+insert into t (id,a) values (367,38);
+insert into t (id,a) values (367,39);
+insert into t (id,a) values (367,40);
+insert into t (id,a) values (367,41);
+insert into t (id,a) values (367,42);
+insert into t (id,a) values (367,43);
+insert into t (id,a) values (367,44);
+insert into t (id,a) values (367,45);
+insert into t (id,a) values (367,46);
+insert into t (id,a) values (367,47);
+insert into t (id,a) values (367,48);
+insert into t (id,a) values (367,49);
+insert into t (id,a) values (367,50);
+insert into t (id,a) values (367,51);
+insert into t (id,a) values (367,52);
+insert into t (id,a) values (367,53);
+insert into t (id,a) values (367,54);
+insert into t (id,a) values (367,55);
+insert into t (id,a) values (367,56);
+insert into t (id,a) values (367,57);
+insert into t (id,a) values (367,58);
+insert into t (id,a) values (367,59);
+insert into t (id,a) values (367,60);
+insert into t (id,a) values (367,61);
+insert into t (id,a) values (367,62);
+insert into t (id,a) values (367,63);
+insert into t (id,a) values (367,64);
+insert into t (id,a) values (367,65);
+insert into t (id,a) values (367,66);
+insert into t (id,a) values (367,67);
+insert into t (id,a) values (367,68);
+insert into t (id,a) values (367,69);
+insert into t (id,a) values (367,70);
+insert into t (id,a) values (367,71);
+insert into t (id,a) values (367,72);
+insert into t (id,a) values (367,73);
+insert into t (id,a) values (367,74);
+insert into t (id,a) values (367,75);
+insert into t (id,a) values (367,76);
+insert into t (id,a) values (367,77);
+insert into t (id,a) values (367,78);
+insert into t (id,a) values (367,79);
+insert into t (id,a) values (367,80);
+insert into t (id,a) values (367,81);
+insert into t (id,a) values (367,82);
+insert into t (id,a) values (367,83);
+insert into t (id,a) values (367,84);
+insert into t (id,a) values (367,85);
+insert into t (id,a) values (367,86);
+insert into t (id,a) values (367,87);
+insert into t (id,a) values (367,88);
+insert into t (id,a) values (367,89);
+insert into t (id,a) values (367,90);
+insert into t (id,a) values (367,91);
+insert into t (id,a) values (367,92);
+insert into t (id,a) values (367,93);
+insert into t (id,a) values (367,94);
+insert into t (id,a) values (367,95);
+insert into t (id,a) values (367,96);
+insert into t (id,a) values (367,97);
+insert into t (id,a) values (367,98);
+insert into t (id,a) values (367,99);
+insert into t (id,a) values (368,0);
+insert into t (id,a) values (368,1);
+insert into t (id,a) values (368,2);
+insert into t (id,a) values (368,3);
+insert into t (id,a) values (368,4);
+insert into t (id,a) values (368,5);
+insert into t (id,a) values (368,6);
+insert into t (id,a) values (368,7);
+insert into t (id,a) values (368,8);
+insert into t (id,a) values (368,9);
+insert into t (id,a) values (368,10);
+insert into t (id,a) values (368,11);
+insert into t (id,a) values (368,12);
+insert into t (id,a) values (368,13);
+insert into t (id,a) values (368,14);
+insert into t (id,a) values (368,15);
+insert into t (id,a) values (368,16);
+insert into t (id,a) values (368,17);
+insert into t (id,a) values (368,18);
+insert into t (id,a) values (368,19);
+insert into t (id,a) values (368,20);
+insert into t (id,a) values (368,21);
+insert into t (id,a) values (368,22);
+insert into t (id,a) values (368,23);
+insert into t (id,a) values (368,24);
+insert into t (id,a) values (368,25);
+insert into t (id,a) values (368,26);
+insert into t (id,a) values (368,27);
+insert into t (id,a) values (368,28);
+insert into t (id,a) values (368,29);
+insert into t (id,a) values (368,30);
+insert into t (id,a) values (368,31);
+insert into t (id,a) values (368,32);
+insert into t (id,a) values (368,33);
+insert into t (id,a) values (368,34);
+insert into t (id,a) values (368,35);
+insert into t (id,a) values (368,36);
+insert into t (id,a) values (368,37);
+insert into t (id,a) values (368,38);
+insert into t (id,a) values (368,39);
+insert into t (id,a) values (368,40);
+insert into t (id,a) values (368,41);
+insert into t (id,a) values (368,42);
+insert into t (id,a) values (368,43);
+insert into t (id,a) values (368,44);
+insert into t (id,a) values (368,45);
+insert into t (id,a) values (368,46);
+insert into t (id,a) values (368,47);
+insert into t (id,a) values (368,48);
+insert into t (id,a) values (368,49);
+insert into t (id,a) values (368,50);
+insert into t (id,a) values (368,51);
+insert into t (id,a) values (368,52);
+insert into t (id,a) values (368,53);
+insert into t (id,a) values (368,54);
+insert into t (id,a) values (368,55);
+insert into t (id,a) values (368,56);
+insert into t (id,a) values (368,57);
+insert into t (id,a) values (368,58);
+insert into t (id,a) values (368,59);
+insert into t (id,a) values (368,60);
+insert into t (id,a) values (368,61);
+insert into t (id,a) values (368,62);
+insert into t (id,a) values (368,63);
+insert into t (id,a) values (368,64);
+insert into t (id,a) values (368,65);
+insert into t (id,a) values (368,66);
+insert into t (id,a) values (368,67);
+insert into t (id,a) values (368,68);
+insert into t (id,a) values (368,69);
+insert into t (id,a) values (368,70);
+insert into t (id,a) values (368,71);
+insert into t (id,a) values (368,72);
+insert into t (id,a) values (368,73);
+insert into t (id,a) values (368,74);
+insert into t (id,a) values (368,75);
+insert into t (id,a) values (368,76);
+insert into t (id,a) values (368,77);
+insert into t (id,a) values (368,78);
+insert into t (id,a) values (368,79);
+insert into t (id,a) values (368,80);
+insert into t (id,a) values (368,81);
+insert into t (id,a) values (368,82);
+insert into t (id,a) values (368,83);
+insert into t (id,a) values (368,84);
+insert into t (id,a) values (368,85);
+insert into t (id,a) values (368,86);
+insert into t (id,a) values (368,87);
+insert into t (id,a) values (368,88);
+insert into t (id,a) values (368,89);
+insert into t (id,a) values (368,90);
+insert into t (id,a) values (368,91);
+insert into t (id,a) values (368,92);
+insert into t (id,a) values (368,93);
+insert into t (id,a) values (368,94);
+insert into t (id,a) values (368,95);
+insert into t (id,a) values (368,96);
+insert into t (id,a) values (368,97);
+insert into t (id,a) values (368,98);
+insert into t (id,a) values (368,99);
+insert into t (id,a) values (369,0);
+insert into t (id,a) values (369,1);
+insert into t (id,a) values (369,2);
+insert into t (id,a) values (369,3);
+insert into t (id,a) values (369,4);
+insert into t (id,a) values (369,5);
+insert into t (id,a) values (369,6);
+insert into t (id,a) values (369,7);
+insert into t (id,a) values (369,8);
+insert into t (id,a) values (369,9);
+insert into t (id,a) values (369,10);
+insert into t (id,a) values (369,11);
+insert into t (id,a) values (369,12);
+insert into t (id,a) values (369,13);
+insert into t (id,a) values (369,14);
+insert into t (id,a) values (369,15);
+insert into t (id,a) values (369,16);
+insert into t (id,a) values (369,17);
+insert into t (id,a) values (369,18);
+insert into t (id,a) values (369,19);
+insert into t (id,a) values (369,20);
+insert into t (id,a) values (369,21);
+insert into t (id,a) values (369,22);
+insert into t (id,a) values (369,23);
+insert into t (id,a) values (369,24);
+insert into t (id,a) values (369,25);
+insert into t (id,a) values (369,26);
+insert into t (id,a) values (369,27);
+insert into t (id,a) values (369,28);
+insert into t (id,a) values (369,29);
+insert into t (id,a) values (369,30);
+insert into t (id,a) values (369,31);
+insert into t (id,a) values (369,32);
+insert into t (id,a) values (369,33);
+insert into t (id,a) values (369,34);
+insert into t (id,a) values (369,35);
+insert into t (id,a) values (369,36);
+insert into t (id,a) values (369,37);
+insert into t (id,a) values (369,38);
+insert into t (id,a) values (369,39);
+insert into t (id,a) values (369,40);
+insert into t (id,a) values (369,41);
+insert into t (id,a) values (369,42);
+insert into t (id,a) values (369,43);
+insert into t (id,a) values (369,44);
+insert into t (id,a) values (369,45);
+insert into t (id,a) values (369,46);
+insert into t (id,a) values (369,47);
+insert into t (id,a) values (369,48);
+insert into t (id,a) values (369,49);
+insert into t (id,a) values (369,50);
+insert into t (id,a) values (369,51);
+insert into t (id,a) values (369,52);
+insert into t (id,a) values (369,53);
+insert into t (id,a) values (369,54);
+insert into t (id,a) values (369,55);
+insert into t (id,a) values (369,56);
+insert into t (id,a) values (369,57);
+insert into t (id,a) values (369,58);
+insert into t (id,a) values (369,59);
+insert into t (id,a) values (369,60);
+insert into t (id,a) values (369,61);
+insert into t (id,a) values (369,62);
+insert into t (id,a) values (369,63);
+insert into t (id,a) values (369,64);
+insert into t (id,a) values (369,65);
+insert into t (id,a) values (369,66);
+insert into t (id,a) values (369,67);
+insert into t (id,a) values (369,68);
+insert into t (id,a) values (369,69);
+insert into t (id,a) values (369,70);
+insert into t (id,a) values (369,71);
+insert into t (id,a) values (369,72);
+insert into t (id,a) values (369,73);
+insert into t (id,a) values (369,74);
+insert into t (id,a) values (369,75);
+insert into t (id,a) values (369,76);
+insert into t (id,a) values (369,77);
+insert into t (id,a) values (369,78);
+insert into t (id,a) values (369,79);
+insert into t (id,a) values (369,80);
+insert into t (id,a) values (369,81);
+insert into t (id,a) values (369,82);
+insert into t (id,a) values (369,83);
+insert into t (id,a) values (369,84);
+insert into t (id,a) values (369,85);
+insert into t (id,a) values (369,86);
+insert into t (id,a) values (369,87);
+insert into t (id,a) values (369,88);
+insert into t (id,a) values (369,89);
+insert into t (id,a) values (369,90);
+insert into t (id,a) values (369,91);
+insert into t (id,a) values (369,92);
+insert into t (id,a) values (369,93);
+insert into t (id,a) values (369,94);
+insert into t (id,a) values (369,95);
+insert into t (id,a) values (369,96);
+insert into t (id,a) values (369,97);
+insert into t (id,a) values (369,98);
+insert into t (id,a) values (369,99);
+insert into t (id,a) values (370,0);
+insert into t (id,a) values (370,1);
+insert into t (id,a) values (370,2);
+insert into t (id,a) values (370,3);
+insert into t (id,a) values (370,4);
+insert into t (id,a) values (370,5);
+insert into t (id,a) values (370,6);
+insert into t (id,a) values (370,7);
+insert into t (id,a) values (370,8);
+insert into t (id,a) values (370,9);
+insert into t (id,a) values (370,10);
+insert into t (id,a) values (370,11);
+insert into t (id,a) values (370,12);
+insert into t (id,a) values (370,13);
+insert into t (id,a) values (370,14);
+insert into t (id,a) values (370,15);
+insert into t (id,a) values (370,16);
+insert into t (id,a) values (370,17);
+insert into t (id,a) values (370,18);
+insert into t (id,a) values (370,19);
+insert into t (id,a) values (370,20);
+insert into t (id,a) values (370,21);
+insert into t (id,a) values (370,22);
+insert into t (id,a) values (370,23);
+insert into t (id,a) values (370,24);
+insert into t (id,a) values (370,25);
+insert into t (id,a) values (370,26);
+insert into t (id,a) values (370,27);
+insert into t (id,a) values (370,28);
+insert into t (id,a) values (370,29);
+insert into t (id,a) values (370,30);
+insert into t (id,a) values (370,31);
+insert into t (id,a) values (370,32);
+insert into t (id,a) values (370,33);
+insert into t (id,a) values (370,34);
+insert into t (id,a) values (370,35);
+insert into t (id,a) values (370,36);
+insert into t (id,a) values (370,37);
+insert into t (id,a) values (370,38);
+insert into t (id,a) values (370,39);
+insert into t (id,a) values (370,40);
+insert into t (id,a) values (370,41);
+insert into t (id,a) values (370,42);
+insert into t (id,a) values (370,43);
+insert into t (id,a) values (370,44);
+insert into t (id,a) values (370,45);
+insert into t (id,a) values (370,46);
+insert into t (id,a) values (370,47);
+insert into t (id,a) values (370,48);
+insert into t (id,a) values (370,49);
+insert into t (id,a) values (370,50);
+insert into t (id,a) values (370,51);
+insert into t (id,a) values (370,52);
+insert into t (id,a) values (370,53);
+insert into t (id,a) values (370,54);
+insert into t (id,a) values (370,55);
+insert into t (id,a) values (370,56);
+insert into t (id,a) values (370,57);
+insert into t (id,a) values (370,58);
+insert into t (id,a) values (370,59);
+insert into t (id,a) values (370,60);
+insert into t (id,a) values (370,61);
+insert into t (id,a) values (370,62);
+insert into t (id,a) values (370,63);
+insert into t (id,a) values (370,64);
+insert into t (id,a) values (370,65);
+insert into t (id,a) values (370,66);
+insert into t (id,a) values (370,67);
+insert into t (id,a) values (370,68);
+insert into t (id,a) values (370,69);
+insert into t (id,a) values (370,70);
+insert into t (id,a) values (370,71);
+insert into t (id,a) values (370,72);
+insert into t (id,a) values (370,73);
+insert into t (id,a) values (370,74);
+insert into t (id,a) values (370,75);
+insert into t (id,a) values (370,76);
+insert into t (id,a) values (370,77);
+insert into t (id,a) values (370,78);
+insert into t (id,a) values (370,79);
+insert into t (id,a) values (370,80);
+insert into t (id,a) values (370,81);
+insert into t (id,a) values (370,82);
+insert into t (id,a) values (370,83);
+insert into t (id,a) values (370,84);
+insert into t (id,a) values (370,85);
+insert into t (id,a) values (370,86);
+insert into t (id,a) values (370,87);
+insert into t (id,a) values (370,88);
+insert into t (id,a) values (370,89);
+insert into t (id,a) values (370,90);
+insert into t (id,a) values (370,91);
+insert into t (id,a) values (370,92);
+insert into t (id,a) values (370,93);
+insert into t (id,a) values (370,94);
+insert into t (id,a) values (370,95);
+insert into t (id,a) values (370,96);
+insert into t (id,a) values (370,97);
+insert into t (id,a) values (370,98);
+insert into t (id,a) values (370,99);
+insert into t (id,a) values (371,0);
+insert into t (id,a) values (371,1);
+insert into t (id,a) values (371,2);
+insert into t (id,a) values (371,3);
+insert into t (id,a) values (371,4);
+insert into t (id,a) values (371,5);
+insert into t (id,a) values (371,6);
+insert into t (id,a) values (371,7);
+insert into t (id,a) values (371,8);
+insert into t (id,a) values (371,9);
+insert into t (id,a) values (371,10);
+insert into t (id,a) values (371,11);
+insert into t (id,a) values (371,12);
+insert into t (id,a) values (371,13);
+insert into t (id,a) values (371,14);
+insert into t (id,a) values (371,15);
+insert into t (id,a) values (371,16);
+insert into t (id,a) values (371,17);
+insert into t (id,a) values (371,18);
+insert into t (id,a) values (371,19);
+insert into t (id,a) values (371,20);
+insert into t (id,a) values (371,21);
+insert into t (id,a) values (371,22);
+insert into t (id,a) values (371,23);
+insert into t (id,a) values (371,24);
+insert into t (id,a) values (371,25);
+insert into t (id,a) values (371,26);
+insert into t (id,a) values (371,27);
+insert into t (id,a) values (371,28);
+insert into t (id,a) values (371,29);
+insert into t (id,a) values (371,30);
+insert into t (id,a) values (371,31);
+insert into t (id,a) values (371,32);
+insert into t (id,a) values (371,33);
+insert into t (id,a) values (371,34);
+insert into t (id,a) values (371,35);
+insert into t (id,a) values (371,36);
+insert into t (id,a) values (371,37);
+insert into t (id,a) values (371,38);
+insert into t (id,a) values (371,39);
+insert into t (id,a) values (371,40);
+insert into t (id,a) values (371,41);
+insert into t (id,a) values (371,42);
+insert into t (id,a) values (371,43);
+insert into t (id,a) values (371,44);
+insert into t (id,a) values (371,45);
+insert into t (id,a) values (371,46);
+insert into t (id,a) values (371,47);
+insert into t (id,a) values (371,48);
+insert into t (id,a) values (371,49);
+insert into t (id,a) values (371,50);
+insert into t (id,a) values (371,51);
+insert into t (id,a) values (371,52);
+insert into t (id,a) values (371,53);
+insert into t (id,a) values (371,54);
+insert into t (id,a) values (371,55);
+insert into t (id,a) values (371,56);
+insert into t (id,a) values (371,57);
+insert into t (id,a) values (371,58);
+insert into t (id,a) values (371,59);
+insert into t (id,a) values (371,60);
+insert into t (id,a) values (371,61);
+insert into t (id,a) values (371,62);
+insert into t (id,a) values (371,63);
+insert into t (id,a) values (371,64);
+insert into t (id,a) values (371,65);
+insert into t (id,a) values (371,66);
+insert into t (id,a) values (371,67);
+insert into t (id,a) values (371,68);
+insert into t (id,a) values (371,69);
+insert into t (id,a) values (371,70);
+insert into t (id,a) values (371,71);
+insert into t (id,a) values (371,72);
+insert into t (id,a) values (371,73);
+insert into t (id,a) values (371,74);
+insert into t (id,a) values (371,75);
+insert into t (id,a) values (371,76);
+insert into t (id,a) values (371,77);
+insert into t (id,a) values (371,78);
+insert into t (id,a) values (371,79);
+insert into t (id,a) values (371,80);
+insert into t (id,a) values (371,81);
+insert into t (id,a) values (371,82);
+insert into t (id,a) values (371,83);
+insert into t (id,a) values (371,84);
+insert into t (id,a) values (371,85);
+insert into t (id,a) values (371,86);
+insert into t (id,a) values (371,87);
+insert into t (id,a) values (371,88);
+insert into t (id,a) values (371,89);
+insert into t (id,a) values (371,90);
+insert into t (id,a) values (371,91);
+insert into t (id,a) values (371,92);
+insert into t (id,a) values (371,93);
+insert into t (id,a) values (371,94);
+insert into t (id,a) values (371,95);
+insert into t (id,a) values (371,96);
+insert into t (id,a) values (371,97);
+insert into t (id,a) values (371,98);
+insert into t (id,a) values (371,99);
+insert into t (id,a) values (372,0);
+insert into t (id,a) values (372,1);
+insert into t (id,a) values (372,2);
+insert into t (id,a) values (372,3);
+insert into t (id,a) values (372,4);
+insert into t (id,a) values (372,5);
+insert into t (id,a) values (372,6);
+insert into t (id,a) values (372,7);
+insert into t (id,a) values (372,8);
+insert into t (id,a) values (372,9);
+insert into t (id,a) values (372,10);
+insert into t (id,a) values (372,11);
+insert into t (id,a) values (372,12);
+insert into t (id,a) values (372,13);
+insert into t (id,a) values (372,14);
+insert into t (id,a) values (372,15);
+insert into t (id,a) values (372,16);
+insert into t (id,a) values (372,17);
+insert into t (id,a) values (372,18);
+insert into t (id,a) values (372,19);
+insert into t (id,a) values (372,20);
+insert into t (id,a) values (372,21);
+insert into t (id,a) values (372,22);
+insert into t (id,a) values (372,23);
+insert into t (id,a) values (372,24);
+insert into t (id,a) values (372,25);
+insert into t (id,a) values (372,26);
+insert into t (id,a) values (372,27);
+insert into t (id,a) values (372,28);
+insert into t (id,a) values (372,29);
+insert into t (id,a) values (372,30);
+insert into t (id,a) values (372,31);
+insert into t (id,a) values (372,32);
+insert into t (id,a) values (372,33);
+insert into t (id,a) values (372,34);
+insert into t (id,a) values (372,35);
+insert into t (id,a) values (372,36);
+insert into t (id,a) values (372,37);
+insert into t (id,a) values (372,38);
+insert into t (id,a) values (372,39);
+insert into t (id,a) values (372,40);
+insert into t (id,a) values (372,41);
+insert into t (id,a) values (372,42);
+insert into t (id,a) values (372,43);
+insert into t (id,a) values (372,44);
+insert into t (id,a) values (372,45);
+insert into t (id,a) values (372,46);
+insert into t (id,a) values (372,47);
+insert into t (id,a) values (372,48);
+insert into t (id,a) values (372,49);
+insert into t (id,a) values (372,50);
+insert into t (id,a) values (372,51);
+insert into t (id,a) values (372,52);
+insert into t (id,a) values (372,53);
+insert into t (id,a) values (372,54);
+insert into t (id,a) values (372,55);
+insert into t (id,a) values (372,56);
+insert into t (id,a) values (372,57);
+insert into t (id,a) values (372,58);
+insert into t (id,a) values (372,59);
+insert into t (id,a) values (372,60);
+insert into t (id,a) values (372,61);
+insert into t (id,a) values (372,62);
+insert into t (id,a) values (372,63);
+insert into t (id,a) values (372,64);
+insert into t (id,a) values (372,65);
+insert into t (id,a) values (372,66);
+insert into t (id,a) values (372,67);
+insert into t (id,a) values (372,68);
+insert into t (id,a) values (372,69);
+insert into t (id,a) values (372,70);
+insert into t (id,a) values (372,71);
+insert into t (id,a) values (372,72);
+insert into t (id,a) values (372,73);
+insert into t (id,a) values (372,74);
+insert into t (id,a) values (372,75);
+insert into t (id,a) values (372,76);
+insert into t (id,a) values (372,77);
+insert into t (id,a) values (372,78);
+insert into t (id,a) values (372,79);
+insert into t (id,a) values (372,80);
+insert into t (id,a) values (372,81);
+insert into t (id,a) values (372,82);
+insert into t (id,a) values (372,83);
+insert into t (id,a) values (372,84);
+insert into t (id,a) values (372,85);
+insert into t (id,a) values (372,86);
+insert into t (id,a) values (372,87);
+insert into t (id,a) values (372,88);
+insert into t (id,a) values (372,89);
+insert into t (id,a) values (372,90);
+insert into t (id,a) values (372,91);
+insert into t (id,a) values (372,92);
+insert into t (id,a) values (372,93);
+insert into t (id,a) values (372,94);
+insert into t (id,a) values (372,95);
+insert into t (id,a) values (372,96);
+insert into t (id,a) values (372,97);
+insert into t (id,a) values (372,98);
+insert into t (id,a) values (372,99);
+insert into t (id,a) values (373,0);
+insert into t (id,a) values (373,1);
+insert into t (id,a) values (373,2);
+insert into t (id,a) values (373,3);
+insert into t (id,a) values (373,4);
+insert into t (id,a) values (373,5);
+insert into t (id,a) values (373,6);
+insert into t (id,a) values (373,7);
+insert into t (id,a) values (373,8);
+insert into t (id,a) values (373,9);
+insert into t (id,a) values (373,10);
+insert into t (id,a) values (373,11);
+insert into t (id,a) values (373,12);
+insert into t (id,a) values (373,13);
+insert into t (id,a) values (373,14);
+insert into t (id,a) values (373,15);
+insert into t (id,a) values (373,16);
+insert into t (id,a) values (373,17);
+insert into t (id,a) values (373,18);
+insert into t (id,a) values (373,19);
+insert into t (id,a) values (373,20);
+insert into t (id,a) values (373,21);
+insert into t (id,a) values (373,22);
+insert into t (id,a) values (373,23);
+insert into t (id,a) values (373,24);
+insert into t (id,a) values (373,25);
+insert into t (id,a) values (373,26);
+insert into t (id,a) values (373,27);
+insert into t (id,a) values (373,28);
+insert into t (id,a) values (373,29);
+insert into t (id,a) values (373,30);
+insert into t (id,a) values (373,31);
+insert into t (id,a) values (373,32);
+insert into t (id,a) values (373,33);
+insert into t (id,a) values (373,34);
+insert into t (id,a) values (373,35);
+insert into t (id,a) values (373,36);
+insert into t (id,a) values (373,37);
+insert into t (id,a) values (373,38);
+insert into t (id,a) values (373,39);
+insert into t (id,a) values (373,40);
+insert into t (id,a) values (373,41);
+insert into t (id,a) values (373,42);
+insert into t (id,a) values (373,43);
+insert into t (id,a) values (373,44);
+insert into t (id,a) values (373,45);
+insert into t (id,a) values (373,46);
+insert into t (id,a) values (373,47);
+insert into t (id,a) values (373,48);
+insert into t (id,a) values (373,49);
+insert into t (id,a) values (373,50);
+insert into t (id,a) values (373,51);
+insert into t (id,a) values (373,52);
+insert into t (id,a) values (373,53);
+insert into t (id,a) values (373,54);
+insert into t (id,a) values (373,55);
+insert into t (id,a) values (373,56);
+insert into t (id,a) values (373,57);
+insert into t (id,a) values (373,58);
+insert into t (id,a) values (373,59);
+insert into t (id,a) values (373,60);
+insert into t (id,a) values (373,61);
+insert into t (id,a) values (373,62);
+insert into t (id,a) values (373,63);
+insert into t (id,a) values (373,64);
+insert into t (id,a) values (373,65);
+insert into t (id,a) values (373,66);
+insert into t (id,a) values (373,67);
+insert into t (id,a) values (373,68);
+insert into t (id,a) values (373,69);
+insert into t (id,a) values (373,70);
+insert into t (id,a) values (373,71);
+insert into t (id,a) values (373,72);
+insert into t (id,a) values (373,73);
+insert into t (id,a) values (373,74);
+insert into t (id,a) values (373,75);
+insert into t (id,a) values (373,76);
+insert into t (id,a) values (373,77);
+insert into t (id,a) values (373,78);
+insert into t (id,a) values (373,79);
+insert into t (id,a) values (373,80);
+insert into t (id,a) values (373,81);
+insert into t (id,a) values (373,82);
+insert into t (id,a) values (373,83);
+insert into t (id,a) values (373,84);
+insert into t (id,a) values (373,85);
+insert into t (id,a) values (373,86);
+insert into t (id,a) values (373,87);
+insert into t (id,a) values (373,88);
+insert into t (id,a) values (373,89);
+insert into t (id,a) values (373,90);
+insert into t (id,a) values (373,91);
+insert into t (id,a) values (373,92);
+insert into t (id,a) values (373,93);
+insert into t (id,a) values (373,94);
+insert into t (id,a) values (373,95);
+insert into t (id,a) values (373,96);
+insert into t (id,a) values (373,97);
+insert into t (id,a) values (373,98);
+insert into t (id,a) values (373,99);
+insert into t (id,a) values (374,0);
+insert into t (id,a) values (374,1);
+insert into t (id,a) values (374,2);
+insert into t (id,a) values (374,3);
+insert into t (id,a) values (374,4);
+insert into t (id,a) values (374,5);
+insert into t (id,a) values (374,6);
+insert into t (id,a) values (374,7);
+insert into t (id,a) values (374,8);
+insert into t (id,a) values (374,9);
+insert into t (id,a) values (374,10);
+insert into t (id,a) values (374,11);
+insert into t (id,a) values (374,12);
+insert into t (id,a) values (374,13);
+insert into t (id,a) values (374,14);
+insert into t (id,a) values (374,15);
+insert into t (id,a) values (374,16);
+insert into t (id,a) values (374,17);
+insert into t (id,a) values (374,18);
+insert into t (id,a) values (374,19);
+insert into t (id,a) values (374,20);
+insert into t (id,a) values (374,21);
+insert into t (id,a) values (374,22);
+insert into t (id,a) values (374,23);
+insert into t (id,a) values (374,24);
+insert into t (id,a) values (374,25);
+insert into t (id,a) values (374,26);
+insert into t (id,a) values (374,27);
+insert into t (id,a) values (374,28);
+insert into t (id,a) values (374,29);
+insert into t (id,a) values (374,30);
+insert into t (id,a) values (374,31);
+insert into t (id,a) values (374,32);
+insert into t (id,a) values (374,33);
+insert into t (id,a) values (374,34);
+insert into t (id,a) values (374,35);
+insert into t (id,a) values (374,36);
+insert into t (id,a) values (374,37);
+insert into t (id,a) values (374,38);
+insert into t (id,a) values (374,39);
+insert into t (id,a) values (374,40);
+insert into t (id,a) values (374,41);
+insert into t (id,a) values (374,42);
+insert into t (id,a) values (374,43);
+insert into t (id,a) values (374,44);
+insert into t (id,a) values (374,45);
+insert into t (id,a) values (374,46);
+insert into t (id,a) values (374,47);
+insert into t (id,a) values (374,48);
+insert into t (id,a) values (374,49);
+insert into t (id,a) values (374,50);
+insert into t (id,a) values (374,51);
+insert into t (id,a) values (374,52);
+insert into t (id,a) values (374,53);
+insert into t (id,a) values (374,54);
+insert into t (id,a) values (374,55);
+insert into t (id,a) values (374,56);
+insert into t (id,a) values (374,57);
+insert into t (id,a) values (374,58);
+insert into t (id,a) values (374,59);
+insert into t (id,a) values (374,60);
+insert into t (id,a) values (374,61);
+insert into t (id,a) values (374,62);
+insert into t (id,a) values (374,63);
+insert into t (id,a) values (374,64);
+insert into t (id,a) values (374,65);
+insert into t (id,a) values (374,66);
+insert into t (id,a) values (374,67);
+insert into t (id,a) values (374,68);
+insert into t (id,a) values (374,69);
+insert into t (id,a) values (374,70);
+insert into t (id,a) values (374,71);
+insert into t (id,a) values (374,72);
+insert into t (id,a) values (374,73);
+insert into t (id,a) values (374,74);
+insert into t (id,a) values (374,75);
+insert into t (id,a) values (374,76);
+insert into t (id,a) values (374,77);
+insert into t (id,a) values (374,78);
+insert into t (id,a) values (374,79);
+insert into t (id,a) values (374,80);
+insert into t (id,a) values (374,81);
+insert into t (id,a) values (374,82);
+insert into t (id,a) values (374,83);
+insert into t (id,a) values (374,84);
+insert into t (id,a) values (374,85);
+insert into t (id,a) values (374,86);
+insert into t (id,a) values (374,87);
+insert into t (id,a) values (374,88);
+insert into t (id,a) values (374,89);
+insert into t (id,a) values (374,90);
+insert into t (id,a) values (374,91);
+insert into t (id,a) values (374,92);
+insert into t (id,a) values (374,93);
+insert into t (id,a) values (374,94);
+insert into t (id,a) values (374,95);
+insert into t (id,a) values (374,96);
+insert into t (id,a) values (374,97);
+insert into t (id,a) values (374,98);
+insert into t (id,a) values (374,99);
+insert into t (id,a) values (375,0);
+insert into t (id,a) values (375,1);
+insert into t (id,a) values (375,2);
+insert into t (id,a) values (375,3);
+insert into t (id,a) values (375,4);
+insert into t (id,a) values (375,5);
+insert into t (id,a) values (375,6);
+insert into t (id,a) values (375,7);
+insert into t (id,a) values (375,8);
+insert into t (id,a) values (375,9);
+insert into t (id,a) values (375,10);
+insert into t (id,a) values (375,11);
+insert into t (id,a) values (375,12);
+insert into t (id,a) values (375,13);
+insert into t (id,a) values (375,14);
+insert into t (id,a) values (375,15);
+insert into t (id,a) values (375,16);
+insert into t (id,a) values (375,17);
+insert into t (id,a) values (375,18);
+insert into t (id,a) values (375,19);
+insert into t (id,a) values (375,20);
+insert into t (id,a) values (375,21);
+insert into t (id,a) values (375,22);
+insert into t (id,a) values (375,23);
+insert into t (id,a) values (375,24);
+insert into t (id,a) values (375,25);
+insert into t (id,a) values (375,26);
+insert into t (id,a) values (375,27);
+insert into t (id,a) values (375,28);
+insert into t (id,a) values (375,29);
+insert into t (id,a) values (375,30);
+insert into t (id,a) values (375,31);
+insert into t (id,a) values (375,32);
+insert into t (id,a) values (375,33);
+insert into t (id,a) values (375,34);
+insert into t (id,a) values (375,35);
+insert into t (id,a) values (375,36);
+insert into t (id,a) values (375,37);
+insert into t (id,a) values (375,38);
+insert into t (id,a) values (375,39);
+insert into t (id,a) values (375,40);
+insert into t (id,a) values (375,41);
+insert into t (id,a) values (375,42);
+insert into t (id,a) values (375,43);
+insert into t (id,a) values (375,44);
+insert into t (id,a) values (375,45);
+insert into t (id,a) values (375,46);
+insert into t (id,a) values (375,47);
+insert into t (id,a) values (375,48);
+insert into t (id,a) values (375,49);
+insert into t (id,a) values (375,50);
+insert into t (id,a) values (375,51);
+insert into t (id,a) values (375,52);
+insert into t (id,a) values (375,53);
+insert into t (id,a) values (375,54);
+insert into t (id,a) values (375,55);
+insert into t (id,a) values (375,56);
+insert into t (id,a) values (375,57);
+insert into t (id,a) values (375,58);
+insert into t (id,a) values (375,59);
+insert into t (id,a) values (375,60);
+insert into t (id,a) values (375,61);
+insert into t (id,a) values (375,62);
+insert into t (id,a) values (375,63);
+insert into t (id,a) values (375,64);
+insert into t (id,a) values (375,65);
+insert into t (id,a) values (375,66);
+insert into t (id,a) values (375,67);
+insert into t (id,a) values (375,68);
+insert into t (id,a) values (375,69);
+insert into t (id,a) values (375,70);
+insert into t (id,a) values (375,71);
+insert into t (id,a) values (375,72);
+insert into t (id,a) values (375,73);
+insert into t (id,a) values (375,74);
+insert into t (id,a) values (375,75);
+insert into t (id,a) values (375,76);
+insert into t (id,a) values (375,77);
+insert into t (id,a) values (375,78);
+insert into t (id,a) values (375,79);
+insert into t (id,a) values (375,80);
+insert into t (id,a) values (375,81);
+insert into t (id,a) values (375,82);
+insert into t (id,a) values (375,83);
+insert into t (id,a) values (375,84);
+insert into t (id,a) values (375,85);
+insert into t (id,a) values (375,86);
+insert into t (id,a) values (375,87);
+insert into t (id,a) values (375,88);
+insert into t (id,a) values (375,89);
+insert into t (id,a) values (375,90);
+insert into t (id,a) values (375,91);
+insert into t (id,a) values (375,92);
+insert into t (id,a) values (375,93);
+insert into t (id,a) values (375,94);
+insert into t (id,a) values (375,95);
+insert into t (id,a) values (375,96);
+insert into t (id,a) values (375,97);
+insert into t (id,a) values (375,98);
+insert into t (id,a) values (375,99);
+insert into t (id,a) values (376,0);
+insert into t (id,a) values (376,1);
+insert into t (id,a) values (376,2);
+insert into t (id,a) values (376,3);
+insert into t (id,a) values (376,4);
+insert into t (id,a) values (376,5);
+insert into t (id,a) values (376,6);
+insert into t (id,a) values (376,7);
+insert into t (id,a) values (376,8);
+insert into t (id,a) values (376,9);
+insert into t (id,a) values (376,10);
+insert into t (id,a) values (376,11);
+insert into t (id,a) values (376,12);
+insert into t (id,a) values (376,13);
+insert into t (id,a) values (376,14);
+insert into t (id,a) values (376,15);
+insert into t (id,a) values (376,16);
+insert into t (id,a) values (376,17);
+insert into t (id,a) values (376,18);
+insert into t (id,a) values (376,19);
+insert into t (id,a) values (376,20);
+insert into t (id,a) values (376,21);
+insert into t (id,a) values (376,22);
+insert into t (id,a) values (376,23);
+insert into t (id,a) values (376,24);
+insert into t (id,a) values (376,25);
+insert into t (id,a) values (376,26);
+insert into t (id,a) values (376,27);
+insert into t (id,a) values (376,28);
+insert into t (id,a) values (376,29);
+insert into t (id,a) values (376,30);
+insert into t (id,a) values (376,31);
+insert into t (id,a) values (376,32);
+insert into t (id,a) values (376,33);
+insert into t (id,a) values (376,34);
+insert into t (id,a) values (376,35);
+insert into t (id,a) values (376,36);
+insert into t (id,a) values (376,37);
+insert into t (id,a) values (376,38);
+insert into t (id,a) values (376,39);
+insert into t (id,a) values (376,40);
+insert into t (id,a) values (376,41);
+insert into t (id,a) values (376,42);
+insert into t (id,a) values (376,43);
+insert into t (id,a) values (376,44);
+insert into t (id,a) values (376,45);
+insert into t (id,a) values (376,46);
+insert into t (id,a) values (376,47);
+insert into t (id,a) values (376,48);
+insert into t (id,a) values (376,49);
+insert into t (id,a) values (376,50);
+insert into t (id,a) values (376,51);
+insert into t (id,a) values (376,52);
+insert into t (id,a) values (376,53);
+insert into t (id,a) values (376,54);
+insert into t (id,a) values (376,55);
+insert into t (id,a) values (376,56);
+insert into t (id,a) values (376,57);
+insert into t (id,a) values (376,58);
+insert into t (id,a) values (376,59);
+insert into t (id,a) values (376,60);
+insert into t (id,a) values (376,61);
+insert into t (id,a) values (376,62);
+insert into t (id,a) values (376,63);
+insert into t (id,a) values (376,64);
+insert into t (id,a) values (376,65);
+insert into t (id,a) values (376,66);
+insert into t (id,a) values (376,67);
+insert into t (id,a) values (376,68);
+insert into t (id,a) values (376,69);
+insert into t (id,a) values (376,70);
+insert into t (id,a) values (376,71);
+insert into t (id,a) values (376,72);
+insert into t (id,a) values (376,73);
+insert into t (id,a) values (376,74);
+insert into t (id,a) values (376,75);
+insert into t (id,a) values (376,76);
+insert into t (id,a) values (376,77);
+insert into t (id,a) values (376,78);
+insert into t (id,a) values (376,79);
+insert into t (id,a) values (376,80);
+insert into t (id,a) values (376,81);
+insert into t (id,a) values (376,82);
+insert into t (id,a) values (376,83);
+insert into t (id,a) values (376,84);
+insert into t (id,a) values (376,85);
+insert into t (id,a) values (376,86);
+insert into t (id,a) values (376,87);
+insert into t (id,a) values (376,88);
+insert into t (id,a) values (376,89);
+insert into t (id,a) values (376,90);
+insert into t (id,a) values (376,91);
+insert into t (id,a) values (376,92);
+insert into t (id,a) values (376,93);
+insert into t (id,a) values (376,94);
+insert into t (id,a) values (376,95);
+insert into t (id,a) values (376,96);
+insert into t (id,a) values (376,97);
+insert into t (id,a) values (376,98);
+insert into t (id,a) values (376,99);
+insert into t (id,a) values (377,0);
+insert into t (id,a) values (377,1);
+insert into t (id,a) values (377,2);
+insert into t (id,a) values (377,3);
+insert into t (id,a) values (377,4);
+insert into t (id,a) values (377,5);
+insert into t (id,a) values (377,6);
+insert into t (id,a) values (377,7);
+insert into t (id,a) values (377,8);
+insert into t (id,a) values (377,9);
+insert into t (id,a) values (377,10);
+insert into t (id,a) values (377,11);
+insert into t (id,a) values (377,12);
+insert into t (id,a) values (377,13);
+insert into t (id,a) values (377,14);
+insert into t (id,a) values (377,15);
+insert into t (id,a) values (377,16);
+insert into t (id,a) values (377,17);
+insert into t (id,a) values (377,18);
+insert into t (id,a) values (377,19);
+insert into t (id,a) values (377,20);
+insert into t (id,a) values (377,21);
+insert into t (id,a) values (377,22);
+insert into t (id,a) values (377,23);
+insert into t (id,a) values (377,24);
+insert into t (id,a) values (377,25);
+insert into t (id,a) values (377,26);
+insert into t (id,a) values (377,27);
+insert into t (id,a) values (377,28);
+insert into t (id,a) values (377,29);
+insert into t (id,a) values (377,30);
+insert into t (id,a) values (377,31);
+insert into t (id,a) values (377,32);
+insert into t (id,a) values (377,33);
+insert into t (id,a) values (377,34);
+insert into t (id,a) values (377,35);
+insert into t (id,a) values (377,36);
+insert into t (id,a) values (377,37);
+insert into t (id,a) values (377,38);
+insert into t (id,a) values (377,39);
+insert into t (id,a) values (377,40);
+insert into t (id,a) values (377,41);
+insert into t (id,a) values (377,42);
+insert into t (id,a) values (377,43);
+insert into t (id,a) values (377,44);
+insert into t (id,a) values (377,45);
+insert into t (id,a) values (377,46);
+insert into t (id,a) values (377,47);
+insert into t (id,a) values (377,48);
+insert into t (id,a) values (377,49);
+insert into t (id,a) values (377,50);
+insert into t (id,a) values (377,51);
+insert into t (id,a) values (377,52);
+insert into t (id,a) values (377,53);
+insert into t (id,a) values (377,54);
+insert into t (id,a) values (377,55);
+insert into t (id,a) values (377,56);
+insert into t (id,a) values (377,57);
+insert into t (id,a) values (377,58);
+insert into t (id,a) values (377,59);
+insert into t (id,a) values (377,60);
+insert into t (id,a) values (377,61);
+insert into t (id,a) values (377,62);
+insert into t (id,a) values (377,63);
+insert into t (id,a) values (377,64);
+insert into t (id,a) values (377,65);
+insert into t (id,a) values (377,66);
+insert into t (id,a) values (377,67);
+insert into t (id,a) values (377,68);
+insert into t (id,a) values (377,69);
+insert into t (id,a) values (377,70);
+insert into t (id,a) values (377,71);
+insert into t (id,a) values (377,72);
+insert into t (id,a) values (377,73);
+insert into t (id,a) values (377,74);
+insert into t (id,a) values (377,75);
+insert into t (id,a) values (377,76);
+insert into t (id,a) values (377,77);
+insert into t (id,a) values (377,78);
+insert into t (id,a) values (377,79);
+insert into t (id,a) values (377,80);
+insert into t (id,a) values (377,81);
+insert into t (id,a) values (377,82);
+insert into t (id,a) values (377,83);
+insert into t (id,a) values (377,84);
+insert into t (id,a) values (377,85);
+insert into t (id,a) values (377,86);
+insert into t (id,a) values (377,87);
+insert into t (id,a) values (377,88);
+insert into t (id,a) values (377,89);
+insert into t (id,a) values (377,90);
+insert into t (id,a) values (377,91);
+insert into t (id,a) values (377,92);
+insert into t (id,a) values (377,93);
+insert into t (id,a) values (377,94);
+insert into t (id,a) values (377,95);
+insert into t (id,a) values (377,96);
+insert into t (id,a) values (377,97);
+insert into t (id,a) values (377,98);
+insert into t (id,a) values (377,99);
+insert into t (id,a) values (378,0);
+insert into t (id,a) values (378,1);
+insert into t (id,a) values (378,2);
+insert into t (id,a) values (378,3);
+insert into t (id,a) values (378,4);
+insert into t (id,a) values (378,5);
+insert into t (id,a) values (378,6);
+insert into t (id,a) values (378,7);
+insert into t (id,a) values (378,8);
+insert into t (id,a) values (378,9);
+insert into t (id,a) values (378,10);
+insert into t (id,a) values (378,11);
+insert into t (id,a) values (378,12);
+insert into t (id,a) values (378,13);
+insert into t (id,a) values (378,14);
+insert into t (id,a) values (378,15);
+insert into t (id,a) values (378,16);
+insert into t (id,a) values (378,17);
+insert into t (id,a) values (378,18);
+insert into t (id,a) values (378,19);
+insert into t (id,a) values (378,20);
+insert into t (id,a) values (378,21);
+insert into t (id,a) values (378,22);
+insert into t (id,a) values (378,23);
+insert into t (id,a) values (378,24);
+insert into t (id,a) values (378,25);
+insert into t (id,a) values (378,26);
+insert into t (id,a) values (378,27);
+insert into t (id,a) values (378,28);
+insert into t (id,a) values (378,29);
+insert into t (id,a) values (378,30);
+insert into t (id,a) values (378,31);
+insert into t (id,a) values (378,32);
+insert into t (id,a) values (378,33);
+insert into t (id,a) values (378,34);
+insert into t (id,a) values (378,35);
+insert into t (id,a) values (378,36);
+insert into t (id,a) values (378,37);
+insert into t (id,a) values (378,38);
+insert into t (id,a) values (378,39);
+insert into t (id,a) values (378,40);
+insert into t (id,a) values (378,41);
+insert into t (id,a) values (378,42);
+insert into t (id,a) values (378,43);
+insert into t (id,a) values (378,44);
+insert into t (id,a) values (378,45);
+insert into t (id,a) values (378,46);
+insert into t (id,a) values (378,47);
+insert into t (id,a) values (378,48);
+insert into t (id,a) values (378,49);
+insert into t (id,a) values (378,50);
+insert into t (id,a) values (378,51);
+insert into t (id,a) values (378,52);
+insert into t (id,a) values (378,53);
+insert into t (id,a) values (378,54);
+insert into t (id,a) values (378,55);
+insert into t (id,a) values (378,56);
+insert into t (id,a) values (378,57);
+insert into t (id,a) values (378,58);
+insert into t (id,a) values (378,59);
+insert into t (id,a) values (378,60);
+insert into t (id,a) values (378,61);
+insert into t (id,a) values (378,62);
+insert into t (id,a) values (378,63);
+insert into t (id,a) values (378,64);
+insert into t (id,a) values (378,65);
+insert into t (id,a) values (378,66);
+insert into t (id,a) values (378,67);
+insert into t (id,a) values (378,68);
+insert into t (id,a) values (378,69);
+insert into t (id,a) values (378,70);
+insert into t (id,a) values (378,71);
+insert into t (id,a) values (378,72);
+insert into t (id,a) values (378,73);
+insert into t (id,a) values (378,74);
+insert into t (id,a) values (378,75);
+insert into t (id,a) values (378,76);
+insert into t (id,a) values (378,77);
+insert into t (id,a) values (378,78);
+insert into t (id,a) values (378,79);
+insert into t (id,a) values (378,80);
+insert into t (id,a) values (378,81);
+insert into t (id,a) values (378,82);
+insert into t (id,a) values (378,83);
+insert into t (id,a) values (378,84);
+insert into t (id,a) values (378,85);
+insert into t (id,a) values (378,86);
+insert into t (id,a) values (378,87);
+insert into t (id,a) values (378,88);
+insert into t (id,a) values (378,89);
+insert into t (id,a) values (378,90);
+insert into t (id,a) values (378,91);
+insert into t (id,a) values (378,92);
+insert into t (id,a) values (378,93);
+insert into t (id,a) values (378,94);
+insert into t (id,a) values (378,95);
+insert into t (id,a) values (378,96);
+insert into t (id,a) values (378,97);
+insert into t (id,a) values (378,98);
+insert into t (id,a) values (378,99);
+insert into t (id,a) values (379,0);
+insert into t (id,a) values (379,1);
+insert into t (id,a) values (379,2);
+insert into t (id,a) values (379,3);
+insert into t (id,a) values (379,4);
+insert into t (id,a) values (379,5);
+insert into t (id,a) values (379,6);
+insert into t (id,a) values (379,7);
+insert into t (id,a) values (379,8);
+insert into t (id,a) values (379,9);
+insert into t (id,a) values (379,10);
+insert into t (id,a) values (379,11);
+insert into t (id,a) values (379,12);
+insert into t (id,a) values (379,13);
+insert into t (id,a) values (379,14);
+insert into t (id,a) values (379,15);
+insert into t (id,a) values (379,16);
+insert into t (id,a) values (379,17);
+insert into t (id,a) values (379,18);
+insert into t (id,a) values (379,19);
+insert into t (id,a) values (379,20);
+insert into t (id,a) values (379,21);
+insert into t (id,a) values (379,22);
+insert into t (id,a) values (379,23);
+insert into t (id,a) values (379,24);
+insert into t (id,a) values (379,25);
+insert into t (id,a) values (379,26);
+insert into t (id,a) values (379,27);
+insert into t (id,a) values (379,28);
+insert into t (id,a) values (379,29);
+insert into t (id,a) values (379,30);
+insert into t (id,a) values (379,31);
+insert into t (id,a) values (379,32);
+insert into t (id,a) values (379,33);
+insert into t (id,a) values (379,34);
+insert into t (id,a) values (379,35);
+insert into t (id,a) values (379,36);
+insert into t (id,a) values (379,37);
+insert into t (id,a) values (379,38);
+insert into t (id,a) values (379,39);
+insert into t (id,a) values (379,40);
+insert into t (id,a) values (379,41);
+insert into t (id,a) values (379,42);
+insert into t (id,a) values (379,43);
+insert into t (id,a) values (379,44);
+insert into t (id,a) values (379,45);
+insert into t (id,a) values (379,46);
+insert into t (id,a) values (379,47);
+insert into t (id,a) values (379,48);
+insert into t (id,a) values (379,49);
+insert into t (id,a) values (379,50);
+insert into t (id,a) values (379,51);
+insert into t (id,a) values (379,52);
+insert into t (id,a) values (379,53);
+insert into t (id,a) values (379,54);
+insert into t (id,a) values (379,55);
+insert into t (id,a) values (379,56);
+insert into t (id,a) values (379,57);
+insert into t (id,a) values (379,58);
+insert into t (id,a) values (379,59);
+insert into t (id,a) values (379,60);
+insert into t (id,a) values (379,61);
+insert into t (id,a) values (379,62);
+insert into t (id,a) values (379,63);
+insert into t (id,a) values (379,64);
+insert into t (id,a) values (379,65);
+insert into t (id,a) values (379,66);
+insert into t (id,a) values (379,67);
+insert into t (id,a) values (379,68);
+insert into t (id,a) values (379,69);
+insert into t (id,a) values (379,70);
+insert into t (id,a) values (379,71);
+insert into t (id,a) values (379,72);
+insert into t (id,a) values (379,73);
+insert into t (id,a) values (379,74);
+insert into t (id,a) values (379,75);
+insert into t (id,a) values (379,76);
+insert into t (id,a) values (379,77);
+insert into t (id,a) values (379,78);
+insert into t (id,a) values (379,79);
+insert into t (id,a) values (379,80);
+insert into t (id,a) values (379,81);
+insert into t (id,a) values (379,82);
+insert into t (id,a) values (379,83);
+insert into t (id,a) values (379,84);
+insert into t (id,a) values (379,85);
+insert into t (id,a) values (379,86);
+insert into t (id,a) values (379,87);
+insert into t (id,a) values (379,88);
+insert into t (id,a) values (379,89);
+insert into t (id,a) values (379,90);
+insert into t (id,a) values (379,91);
+insert into t (id,a) values (379,92);
+insert into t (id,a) values (379,93);
+insert into t (id,a) values (379,94);
+insert into t (id,a) values (379,95);
+insert into t (id,a) values (379,96);
+insert into t (id,a) values (379,97);
+insert into t (id,a) values (379,98);
+insert into t (id,a) values (379,99);
+insert into t (id,a) values (380,0);
+insert into t (id,a) values (380,1);
+insert into t (id,a) values (380,2);
+insert into t (id,a) values (380,3);
+insert into t (id,a) values (380,4);
+insert into t (id,a) values (380,5);
+insert into t (id,a) values (380,6);
+insert into t (id,a) values (380,7);
+insert into t (id,a) values (380,8);
+insert into t (id,a) values (380,9);
+insert into t (id,a) values (380,10);
+insert into t (id,a) values (380,11);
+insert into t (id,a) values (380,12);
+insert into t (id,a) values (380,13);
+insert into t (id,a) values (380,14);
+insert into t (id,a) values (380,15);
+insert into t (id,a) values (380,16);
+insert into t (id,a) values (380,17);
+insert into t (id,a) values (380,18);
+insert into t (id,a) values (380,19);
+insert into t (id,a) values (380,20);
+insert into t (id,a) values (380,21);
+insert into t (id,a) values (380,22);
+insert into t (id,a) values (380,23);
+insert into t (id,a) values (380,24);
+insert into t (id,a) values (380,25);
+insert into t (id,a) values (380,26);
+insert into t (id,a) values (380,27);
+insert into t (id,a) values (380,28);
+insert into t (id,a) values (380,29);
+insert into t (id,a) values (380,30);
+insert into t (id,a) values (380,31);
+insert into t (id,a) values (380,32);
+insert into t (id,a) values (380,33);
+insert into t (id,a) values (380,34);
+insert into t (id,a) values (380,35);
+insert into t (id,a) values (380,36);
+insert into t (id,a) values (380,37);
+insert into t (id,a) values (380,38);
+insert into t (id,a) values (380,39);
+insert into t (id,a) values (380,40);
+insert into t (id,a) values (380,41);
+insert into t (id,a) values (380,42);
+insert into t (id,a) values (380,43);
+insert into t (id,a) values (380,44);
+insert into t (id,a) values (380,45);
+insert into t (id,a) values (380,46);
+insert into t (id,a) values (380,47);
+insert into t (id,a) values (380,48);
+insert into t (id,a) values (380,49);
+insert into t (id,a) values (380,50);
+insert into t (id,a) values (380,51);
+insert into t (id,a) values (380,52);
+insert into t (id,a) values (380,53);
+insert into t (id,a) values (380,54);
+insert into t (id,a) values (380,55);
+insert into t (id,a) values (380,56);
+insert into t (id,a) values (380,57);
+insert into t (id,a) values (380,58);
+insert into t (id,a) values (380,59);
+insert into t (id,a) values (380,60);
+insert into t (id,a) values (380,61);
+insert into t (id,a) values (380,62);
+insert into t (id,a) values (380,63);
+insert into t (id,a) values (380,64);
+insert into t (id,a) values (380,65);
+insert into t (id,a) values (380,66);
+insert into t (id,a) values (380,67);
+insert into t (id,a) values (380,68);
+insert into t (id,a) values (380,69);
+insert into t (id,a) values (380,70);
+insert into t (id,a) values (380,71);
+insert into t (id,a) values (380,72);
+insert into t (id,a) values (380,73);
+insert into t (id,a) values (380,74);
+insert into t (id,a) values (380,75);
+insert into t (id,a) values (380,76);
+insert into t (id,a) values (380,77);
+insert into t (id,a) values (380,78);
+insert into t (id,a) values (380,79);
+insert into t (id,a) values (380,80);
+insert into t (id,a) values (380,81);
+insert into t (id,a) values (380,82);
+insert into t (id,a) values (380,83);
+insert into t (id,a) values (380,84);
+insert into t (id,a) values (380,85);
+insert into t (id,a) values (380,86);
+insert into t (id,a) values (380,87);
+insert into t (id,a) values (380,88);
+insert into t (id,a) values (380,89);
+insert into t (id,a) values (380,90);
+insert into t (id,a) values (380,91);
+insert into t (id,a) values (380,92);
+insert into t (id,a) values (380,93);
+insert into t (id,a) values (380,94);
+insert into t (id,a) values (380,95);
+insert into t (id,a) values (380,96);
+insert into t (id,a) values (380,97);
+insert into t (id,a) values (380,98);
+insert into t (id,a) values (380,99);
+insert into t (id,a) values (381,0);
+insert into t (id,a) values (381,1);
+insert into t (id,a) values (381,2);
+insert into t (id,a) values (381,3);
+insert into t (id,a) values (381,4);
+insert into t (id,a) values (381,5);
+insert into t (id,a) values (381,6);
+insert into t (id,a) values (381,7);
+insert into t (id,a) values (381,8);
+insert into t (id,a) values (381,9);
+insert into t (id,a) values (381,10);
+insert into t (id,a) values (381,11);
+insert into t (id,a) values (381,12);
+insert into t (id,a) values (381,13);
+insert into t (id,a) values (381,14);
+insert into t (id,a) values (381,15);
+insert into t (id,a) values (381,16);
+insert into t (id,a) values (381,17);
+insert into t (id,a) values (381,18);
+insert into t (id,a) values (381,19);
+insert into t (id,a) values (381,20);
+insert into t (id,a) values (381,21);
+insert into t (id,a) values (381,22);
+insert into t (id,a) values (381,23);
+insert into t (id,a) values (381,24);
+insert into t (id,a) values (381,25);
+insert into t (id,a) values (381,26);
+insert into t (id,a) values (381,27);
+insert into t (id,a) values (381,28);
+insert into t (id,a) values (381,29);
+insert into t (id,a) values (381,30);
+insert into t (id,a) values (381,31);
+insert into t (id,a) values (381,32);
+insert into t (id,a) values (381,33);
+insert into t (id,a) values (381,34);
+insert into t (id,a) values (381,35);
+insert into t (id,a) values (381,36);
+insert into t (id,a) values (381,37);
+insert into t (id,a) values (381,38);
+insert into t (id,a) values (381,39);
+insert into t (id,a) values (381,40);
+insert into t (id,a) values (381,41);
+insert into t (id,a) values (381,42);
+insert into t (id,a) values (381,43);
+insert into t (id,a) values (381,44);
+insert into t (id,a) values (381,45);
+insert into t (id,a) values (381,46);
+insert into t (id,a) values (381,47);
+insert into t (id,a) values (381,48);
+insert into t (id,a) values (381,49);
+insert into t (id,a) values (381,50);
+insert into t (id,a) values (381,51);
+insert into t (id,a) values (381,52);
+insert into t (id,a) values (381,53);
+insert into t (id,a) values (381,54);
+insert into t (id,a) values (381,55);
+insert into t (id,a) values (381,56);
+insert into t (id,a) values (381,57);
+insert into t (id,a) values (381,58);
+insert into t (id,a) values (381,59);
+insert into t (id,a) values (381,60);
+insert into t (id,a) values (381,61);
+insert into t (id,a) values (381,62);
+insert into t (id,a) values (381,63);
+insert into t (id,a) values (381,64);
+insert into t (id,a) values (381,65);
+insert into t (id,a) values (381,66);
+insert into t (id,a) values (381,67);
+insert into t (id,a) values (381,68);
+insert into t (id,a) values (381,69);
+insert into t (id,a) values (381,70);
+insert into t (id,a) values (381,71);
+insert into t (id,a) values (381,72);
+insert into t (id,a) values (381,73);
+insert into t (id,a) values (381,74);
+insert into t (id,a) values (381,75);
+insert into t (id,a) values (381,76);
+insert into t (id,a) values (381,77);
+insert into t (id,a) values (381,78);
+insert into t (id,a) values (381,79);
+insert into t (id,a) values (381,80);
+insert into t (id,a) values (381,81);
+insert into t (id,a) values (381,82);
+insert into t (id,a) values (381,83);
+insert into t (id,a) values (381,84);
+insert into t (id,a) values (381,85);
+insert into t (id,a) values (381,86);
+insert into t (id,a) values (381,87);
+insert into t (id,a) values (381,88);
+insert into t (id,a) values (381,89);
+insert into t (id,a) values (381,90);
+insert into t (id,a) values (381,91);
+insert into t (id,a) values (381,92);
+insert into t (id,a) values (381,93);
+insert into t (id,a) values (381,94);
+insert into t (id,a) values (381,95);
+insert into t (id,a) values (381,96);
+insert into t (id,a) values (381,97);
+insert into t (id,a) values (381,98);
+insert into t (id,a) values (381,99);
+insert into t (id,a) values (382,0);
+insert into t (id,a) values (382,1);
+insert into t (id,a) values (382,2);
+insert into t (id,a) values (382,3);
+insert into t (id,a) values (382,4);
+insert into t (id,a) values (382,5);
+insert into t (id,a) values (382,6);
+insert into t (id,a) values (382,7);
+insert into t (id,a) values (382,8);
+insert into t (id,a) values (382,9);
+insert into t (id,a) values (382,10);
+insert into t (id,a) values (382,11);
+insert into t (id,a) values (382,12);
+insert into t (id,a) values (382,13);
+insert into t (id,a) values (382,14);
+insert into t (id,a) values (382,15);
+insert into t (id,a) values (382,16);
+insert into t (id,a) values (382,17);
+insert into t (id,a) values (382,18);
+insert into t (id,a) values (382,19);
+insert into t (id,a) values (382,20);
+insert into t (id,a) values (382,21);
+insert into t (id,a) values (382,22);
+insert into t (id,a) values (382,23);
+insert into t (id,a) values (382,24);
+insert into t (id,a) values (382,25);
+insert into t (id,a) values (382,26);
+insert into t (id,a) values (382,27);
+insert into t (id,a) values (382,28);
+insert into t (id,a) values (382,29);
+insert into t (id,a) values (382,30);
+insert into t (id,a) values (382,31);
+insert into t (id,a) values (382,32);
+insert into t (id,a) values (382,33);
+insert into t (id,a) values (382,34);
+insert into t (id,a) values (382,35);
+insert into t (id,a) values (382,36);
+insert into t (id,a) values (382,37);
+insert into t (id,a) values (382,38);
+insert into t (id,a) values (382,39);
+insert into t (id,a) values (382,40);
+insert into t (id,a) values (382,41);
+insert into t (id,a) values (382,42);
+insert into t (id,a) values (382,43);
+insert into t (id,a) values (382,44);
+insert into t (id,a) values (382,45);
+insert into t (id,a) values (382,46);
+insert into t (id,a) values (382,47);
+insert into t (id,a) values (382,48);
+insert into t (id,a) values (382,49);
+insert into t (id,a) values (382,50);
+insert into t (id,a) values (382,51);
+insert into t (id,a) values (382,52);
+insert into t (id,a) values (382,53);
+insert into t (id,a) values (382,54);
+insert into t (id,a) values (382,55);
+insert into t (id,a) values (382,56);
+insert into t (id,a) values (382,57);
+insert into t (id,a) values (382,58);
+insert into t (id,a) values (382,59);
+insert into t (id,a) values (382,60);
+insert into t (id,a) values (382,61);
+insert into t (id,a) values (382,62);
+insert into t (id,a) values (382,63);
+insert into t (id,a) values (382,64);
+insert into t (id,a) values (382,65);
+insert into t (id,a) values (382,66);
+insert into t (id,a) values (382,67);
+insert into t (id,a) values (382,68);
+insert into t (id,a) values (382,69);
+insert into t (id,a) values (382,70);
+insert into t (id,a) values (382,71);
+insert into t (id,a) values (382,72);
+insert into t (id,a) values (382,73);
+insert into t (id,a) values (382,74);
+insert into t (id,a) values (382,75);
+insert into t (id,a) values (382,76);
+insert into t (id,a) values (382,77);
+insert into t (id,a) values (382,78);
+insert into t (id,a) values (382,79);
+insert into t (id,a) values (382,80);
+insert into t (id,a) values (382,81);
+insert into t (id,a) values (382,82);
+insert into t (id,a) values (382,83);
+insert into t (id,a) values (382,84);
+insert into t (id,a) values (382,85);
+insert into t (id,a) values (382,86);
+insert into t (id,a) values (382,87);
+insert into t (id,a) values (382,88);
+insert into t (id,a) values (382,89);
+insert into t (id,a) values (382,90);
+insert into t (id,a) values (382,91);
+insert into t (id,a) values (382,92);
+insert into t (id,a) values (382,93);
+insert into t (id,a) values (382,94);
+insert into t (id,a) values (382,95);
+insert into t (id,a) values (382,96);
+insert into t (id,a) values (382,97);
+insert into t (id,a) values (382,98);
+insert into t (id,a) values (382,99);
+insert into t (id,a) values (383,0);
+insert into t (id,a) values (383,1);
+insert into t (id,a) values (383,2);
+insert into t (id,a) values (383,3);
+insert into t (id,a) values (383,4);
+insert into t (id,a) values (383,5);
+insert into t (id,a) values (383,6);
+insert into t (id,a) values (383,7);
+insert into t (id,a) values (383,8);
+insert into t (id,a) values (383,9);
+insert into t (id,a) values (383,10);
+insert into t (id,a) values (383,11);
+insert into t (id,a) values (383,12);
+insert into t (id,a) values (383,13);
+insert into t (id,a) values (383,14);
+insert into t (id,a) values (383,15);
+insert into t (id,a) values (383,16);
+insert into t (id,a) values (383,17);
+insert into t (id,a) values (383,18);
+insert into t (id,a) values (383,19);
+insert into t (id,a) values (383,20);
+insert into t (id,a) values (383,21);
+insert into t (id,a) values (383,22);
+insert into t (id,a) values (383,23);
+insert into t (id,a) values (383,24);
+insert into t (id,a) values (383,25);
+insert into t (id,a) values (383,26);
+insert into t (id,a) values (383,27);
+insert into t (id,a) values (383,28);
+insert into t (id,a) values (383,29);
+insert into t (id,a) values (383,30);
+insert into t (id,a) values (383,31);
+insert into t (id,a) values (383,32);
+insert into t (id,a) values (383,33);
+insert into t (id,a) values (383,34);
+insert into t (id,a) values (383,35);
+insert into t (id,a) values (383,36);
+insert into t (id,a) values (383,37);
+insert into t (id,a) values (383,38);
+insert into t (id,a) values (383,39);
+insert into t (id,a) values (383,40);
+insert into t (id,a) values (383,41);
+insert into t (id,a) values (383,42);
+insert into t (id,a) values (383,43);
+insert into t (id,a) values (383,44);
+insert into t (id,a) values (383,45);
+insert into t (id,a) values (383,46);
+insert into t (id,a) values (383,47);
+insert into t (id,a) values (383,48);
+insert into t (id,a) values (383,49);
+insert into t (id,a) values (383,50);
+insert into t (id,a) values (383,51);
+insert into t (id,a) values (383,52);
+insert into t (id,a) values (383,53);
+insert into t (id,a) values (383,54);
+insert into t (id,a) values (383,55);
+insert into t (id,a) values (383,56);
+insert into t (id,a) values (383,57);
+insert into t (id,a) values (383,58);
+insert into t (id,a) values (383,59);
+insert into t (id,a) values (383,60);
+insert into t (id,a) values (383,61);
+insert into t (id,a) values (383,62);
+insert into t (id,a) values (383,63);
+insert into t (id,a) values (383,64);
+insert into t (id,a) values (383,65);
+insert into t (id,a) values (383,66);
+insert into t (id,a) values (383,67);
+insert into t (id,a) values (383,68);
+insert into t (id,a) values (383,69);
+insert into t (id,a) values (383,70);
+insert into t (id,a) values (383,71);
+insert into t (id,a) values (383,72);
+insert into t (id,a) values (383,73);
+insert into t (id,a) values (383,74);
+insert into t (id,a) values (383,75);
+insert into t (id,a) values (383,76);
+insert into t (id,a) values (383,77);
+insert into t (id,a) values (383,78);
+insert into t (id,a) values (383,79);
+insert into t (id,a) values (383,80);
+insert into t (id,a) values (383,81);
+insert into t (id,a) values (383,82);
+insert into t (id,a) values (383,83);
+insert into t (id,a) values (383,84);
+insert into t (id,a) values (383,85);
+insert into t (id,a) values (383,86);
+insert into t (id,a) values (383,87);
+insert into t (id,a) values (383,88);
+insert into t (id,a) values (383,89);
+insert into t (id,a) values (383,90);
+insert into t (id,a) values (383,91);
+insert into t (id,a) values (383,92);
+insert into t (id,a) values (383,93);
+insert into t (id,a) values (383,94);
+insert into t (id,a) values (383,95);
+insert into t (id,a) values (383,96);
+insert into t (id,a) values (383,97);
+insert into t (id,a) values (383,98);
+insert into t (id,a) values (383,99);
+insert into t (id,a) values (384,0);
+insert into t (id,a) values (384,1);
+insert into t (id,a) values (384,2);
+insert into t (id,a) values (384,3);
+insert into t (id,a) values (384,4);
+insert into t (id,a) values (384,5);
+insert into t (id,a) values (384,6);
+insert into t (id,a) values (384,7);
+insert into t (id,a) values (384,8);
+insert into t (id,a) values (384,9);
+insert into t (id,a) values (384,10);
+insert into t (id,a) values (384,11);
+insert into t (id,a) values (384,12);
+insert into t (id,a) values (384,13);
+insert into t (id,a) values (384,14);
+insert into t (id,a) values (384,15);
+insert into t (id,a) values (384,16);
+insert into t (id,a) values (384,17);
+insert into t (id,a) values (384,18);
+insert into t (id,a) values (384,19);
+insert into t (id,a) values (384,20);
+insert into t (id,a) values (384,21);
+insert into t (id,a) values (384,22);
+insert into t (id,a) values (384,23);
+insert into t (id,a) values (384,24);
+insert into t (id,a) values (384,25);
+insert into t (id,a) values (384,26);
+insert into t (id,a) values (384,27);
+insert into t (id,a) values (384,28);
+insert into t (id,a) values (384,29);
+insert into t (id,a) values (384,30);
+insert into t (id,a) values (384,31);
+insert into t (id,a) values (384,32);
+insert into t (id,a) values (384,33);
+insert into t (id,a) values (384,34);
+insert into t (id,a) values (384,35);
+insert into t (id,a) values (384,36);
+insert into t (id,a) values (384,37);
+insert into t (id,a) values (384,38);
+insert into t (id,a) values (384,39);
+insert into t (id,a) values (384,40);
+insert into t (id,a) values (384,41);
+insert into t (id,a) values (384,42);
+insert into t (id,a) values (384,43);
+insert into t (id,a) values (384,44);
+insert into t (id,a) values (384,45);
+insert into t (id,a) values (384,46);
+insert into t (id,a) values (384,47);
+insert into t (id,a) values (384,48);
+insert into t (id,a) values (384,49);
+insert into t (id,a) values (384,50);
+insert into t (id,a) values (384,51);
+insert into t (id,a) values (384,52);
+insert into t (id,a) values (384,53);
+insert into t (id,a) values (384,54);
+insert into t (id,a) values (384,55);
+insert into t (id,a) values (384,56);
+insert into t (id,a) values (384,57);
+insert into t (id,a) values (384,58);
+insert into t (id,a) values (384,59);
+insert into t (id,a) values (384,60);
+insert into t (id,a) values (384,61);
+insert into t (id,a) values (384,62);
+insert into t (id,a) values (384,63);
+insert into t (id,a) values (384,64);
+insert into t (id,a) values (384,65);
+insert into t (id,a) values (384,66);
+insert into t (id,a) values (384,67);
+insert into t (id,a) values (384,68);
+insert into t (id,a) values (384,69);
+insert into t (id,a) values (384,70);
+insert into t (id,a) values (384,71);
+insert into t (id,a) values (384,72);
+insert into t (id,a) values (384,73);
+insert into t (id,a) values (384,74);
+insert into t (id,a) values (384,75);
+insert into t (id,a) values (384,76);
+insert into t (id,a) values (384,77);
+insert into t (id,a) values (384,78);
+insert into t (id,a) values (384,79);
+insert into t (id,a) values (384,80);
+insert into t (id,a) values (384,81);
+insert into t (id,a) values (384,82);
+insert into t (id,a) values (384,83);
+insert into t (id,a) values (384,84);
+insert into t (id,a) values (384,85);
+insert into t (id,a) values (384,86);
+insert into t (id,a) values (384,87);
+insert into t (id,a) values (384,88);
+insert into t (id,a) values (384,89);
+insert into t (id,a) values (384,90);
+insert into t (id,a) values (384,91);
+insert into t (id,a) values (384,92);
+insert into t (id,a) values (384,93);
+insert into t (id,a) values (384,94);
+insert into t (id,a) values (384,95);
+insert into t (id,a) values (384,96);
+insert into t (id,a) values (384,97);
+insert into t (id,a) values (384,98);
+insert into t (id,a) values (384,99);
+insert into t (id,a) values (385,0);
+insert into t (id,a) values (385,1);
+insert into t (id,a) values (385,2);
+insert into t (id,a) values (385,3);
+insert into t (id,a) values (385,4);
+insert into t (id,a) values (385,5);
+insert into t (id,a) values (385,6);
+insert into t (id,a) values (385,7);
+insert into t (id,a) values (385,8);
+insert into t (id,a) values (385,9);
+insert into t (id,a) values (385,10);
+insert into t (id,a) values (385,11);
+insert into t (id,a) values (385,12);
+insert into t (id,a) values (385,13);
+insert into t (id,a) values (385,14);
+insert into t (id,a) values (385,15);
+insert into t (id,a) values (385,16);
+insert into t (id,a) values (385,17);
+insert into t (id,a) values (385,18);
+insert into t (id,a) values (385,19);
+insert into t (id,a) values (385,20);
+insert into t (id,a) values (385,21);
+insert into t (id,a) values (385,22);
+insert into t (id,a) values (385,23);
+insert into t (id,a) values (385,24);
+insert into t (id,a) values (385,25);
+insert into t (id,a) values (385,26);
+insert into t (id,a) values (385,27);
+insert into t (id,a) values (385,28);
+insert into t (id,a) values (385,29);
+insert into t (id,a) values (385,30);
+insert into t (id,a) values (385,31);
+insert into t (id,a) values (385,32);
+insert into t (id,a) values (385,33);
+insert into t (id,a) values (385,34);
+insert into t (id,a) values (385,35);
+insert into t (id,a) values (385,36);
+insert into t (id,a) values (385,37);
+insert into t (id,a) values (385,38);
+insert into t (id,a) values (385,39);
+insert into t (id,a) values (385,40);
+insert into t (id,a) values (385,41);
+insert into t (id,a) values (385,42);
+insert into t (id,a) values (385,43);
+insert into t (id,a) values (385,44);
+insert into t (id,a) values (385,45);
+insert into t (id,a) values (385,46);
+insert into t (id,a) values (385,47);
+insert into t (id,a) values (385,48);
+insert into t (id,a) values (385,49);
+insert into t (id,a) values (385,50);
+insert into t (id,a) values (385,51);
+insert into t (id,a) values (385,52);
+insert into t (id,a) values (385,53);
+insert into t (id,a) values (385,54);
+insert into t (id,a) values (385,55);
+insert into t (id,a) values (385,56);
+insert into t (id,a) values (385,57);
+insert into t (id,a) values (385,58);
+insert into t (id,a) values (385,59);
+insert into t (id,a) values (385,60);
+insert into t (id,a) values (385,61);
+insert into t (id,a) values (385,62);
+insert into t (id,a) values (385,63);
+insert into t (id,a) values (385,64);
+insert into t (id,a) values (385,65);
+insert into t (id,a) values (385,66);
+insert into t (id,a) values (385,67);
+insert into t (id,a) values (385,68);
+insert into t (id,a) values (385,69);
+insert into t (id,a) values (385,70);
+insert into t (id,a) values (385,71);
+insert into t (id,a) values (385,72);
+insert into t (id,a) values (385,73);
+insert into t (id,a) values (385,74);
+insert into t (id,a) values (385,75);
+insert into t (id,a) values (385,76);
+insert into t (id,a) values (385,77);
+insert into t (id,a) values (385,78);
+insert into t (id,a) values (385,79);
+insert into t (id,a) values (385,80);
+insert into t (id,a) values (385,81);
+insert into t (id,a) values (385,82);
+insert into t (id,a) values (385,83);
+insert into t (id,a) values (385,84);
+insert into t (id,a) values (385,85);
+insert into t (id,a) values (385,86);
+insert into t (id,a) values (385,87);
+insert into t (id,a) values (385,88);
+insert into t (id,a) values (385,89);
+insert into t (id,a) values (385,90);
+insert into t (id,a) values (385,91);
+insert into t (id,a) values (385,92);
+insert into t (id,a) values (385,93);
+insert into t (id,a) values (385,94);
+insert into t (id,a) values (385,95);
+insert into t (id,a) values (385,96);
+insert into t (id,a) values (385,97);
+insert into t (id,a) values (385,98);
+insert into t (id,a) values (385,99);
+insert into t (id,a) values (386,0);
+insert into t (id,a) values (386,1);
+insert into t (id,a) values (386,2);
+insert into t (id,a) values (386,3);
+insert into t (id,a) values (386,4);
+insert into t (id,a) values (386,5);
+insert into t (id,a) values (386,6);
+insert into t (id,a) values (386,7);
+insert into t (id,a) values (386,8);
+insert into t (id,a) values (386,9);
+insert into t (id,a) values (386,10);
+insert into t (id,a) values (386,11);
+insert into t (id,a) values (386,12);
+insert into t (id,a) values (386,13);
+insert into t (id,a) values (386,14);
+insert into t (id,a) values (386,15);
+insert into t (id,a) values (386,16);
+insert into t (id,a) values (386,17);
+insert into t (id,a) values (386,18);
+insert into t (id,a) values (386,19);
+insert into t (id,a) values (386,20);
+insert into t (id,a) values (386,21);
+insert into t (id,a) values (386,22);
+insert into t (id,a) values (386,23);
+insert into t (id,a) values (386,24);
+insert into t (id,a) values (386,25);
+insert into t (id,a) values (386,26);
+insert into t (id,a) values (386,27);
+insert into t (id,a) values (386,28);
+insert into t (id,a) values (386,29);
+insert into t (id,a) values (386,30);
+insert into t (id,a) values (386,31);
+insert into t (id,a) values (386,32);
+insert into t (id,a) values (386,33);
+insert into t (id,a) values (386,34);
+insert into t (id,a) values (386,35);
+insert into t (id,a) values (386,36);
+insert into t (id,a) values (386,37);
+insert into t (id,a) values (386,38);
+insert into t (id,a) values (386,39);
+insert into t (id,a) values (386,40);
+insert into t (id,a) values (386,41);
+insert into t (id,a) values (386,42);
+insert into t (id,a) values (386,43);
+insert into t (id,a) values (386,44);
+insert into t (id,a) values (386,45);
+insert into t (id,a) values (386,46);
+insert into t (id,a) values (386,47);
+insert into t (id,a) values (386,48);
+insert into t (id,a) values (386,49);
+insert into t (id,a) values (386,50);
+insert into t (id,a) values (386,51);
+insert into t (id,a) values (386,52);
+insert into t (id,a) values (386,53);
+insert into t (id,a) values (386,54);
+insert into t (id,a) values (386,55);
+insert into t (id,a) values (386,56);
+insert into t (id,a) values (386,57);
+insert into t (id,a) values (386,58);
+insert into t (id,a) values (386,59);
+insert into t (id,a) values (386,60);
+insert into t (id,a) values (386,61);
+insert into t (id,a) values (386,62);
+insert into t (id,a) values (386,63);
+insert into t (id,a) values (386,64);
+insert into t (id,a) values (386,65);
+insert into t (id,a) values (386,66);
+insert into t (id,a) values (386,67);
+insert into t (id,a) values (386,68);
+insert into t (id,a) values (386,69);
+insert into t (id,a) values (386,70);
+insert into t (id,a) values (386,71);
+insert into t (id,a) values (386,72);
+insert into t (id,a) values (386,73);
+insert into t (id,a) values (386,74);
+insert into t (id,a) values (386,75);
+insert into t (id,a) values (386,76);
+insert into t (id,a) values (386,77);
+insert into t (id,a) values (386,78);
+insert into t (id,a) values (386,79);
+insert into t (id,a) values (386,80);
+insert into t (id,a) values (386,81);
+insert into t (id,a) values (386,82);
+insert into t (id,a) values (386,83);
+insert into t (id,a) values (386,84);
+insert into t (id,a) values (386,85);
+insert into t (id,a) values (386,86);
+insert into t (id,a) values (386,87);
+insert into t (id,a) values (386,88);
+insert into t (id,a) values (386,89);
+insert into t (id,a) values (386,90);
+insert into t (id,a) values (386,91);
+insert into t (id,a) values (386,92);
+insert into t (id,a) values (386,93);
+insert into t (id,a) values (386,94);
+insert into t (id,a) values (386,95);
+insert into t (id,a) values (386,96);
+insert into t (id,a) values (386,97);
+insert into t (id,a) values (386,98);
+insert into t (id,a) values (386,99);
+insert into t (id,a) values (387,0);
+insert into t (id,a) values (387,1);
+insert into t (id,a) values (387,2);
+insert into t (id,a) values (387,3);
+insert into t (id,a) values (387,4);
+insert into t (id,a) values (387,5);
+insert into t (id,a) values (387,6);
+insert into t (id,a) values (387,7);
+insert into t (id,a) values (387,8);
+insert into t (id,a) values (387,9);
+insert into t (id,a) values (387,10);
+insert into t (id,a) values (387,11);
+insert into t (id,a) values (387,12);
+insert into t (id,a) values (387,13);
+insert into t (id,a) values (387,14);
+insert into t (id,a) values (387,15);
+insert into t (id,a) values (387,16);
+insert into t (id,a) values (387,17);
+insert into t (id,a) values (387,18);
+insert into t (id,a) values (387,19);
+insert into t (id,a) values (387,20);
+insert into t (id,a) values (387,21);
+insert into t (id,a) values (387,22);
+insert into t (id,a) values (387,23);
+insert into t (id,a) values (387,24);
+insert into t (id,a) values (387,25);
+insert into t (id,a) values (387,26);
+insert into t (id,a) values (387,27);
+insert into t (id,a) values (387,28);
+insert into t (id,a) values (387,29);
+insert into t (id,a) values (387,30);
+insert into t (id,a) values (387,31);
+insert into t (id,a) values (387,32);
+insert into t (id,a) values (387,33);
+insert into t (id,a) values (387,34);
+insert into t (id,a) values (387,35);
+insert into t (id,a) values (387,36);
+insert into t (id,a) values (387,37);
+insert into t (id,a) values (387,38);
+insert into t (id,a) values (387,39);
+insert into t (id,a) values (387,40);
+insert into t (id,a) values (387,41);
+insert into t (id,a) values (387,42);
+insert into t (id,a) values (387,43);
+insert into t (id,a) values (387,44);
+insert into t (id,a) values (387,45);
+insert into t (id,a) values (387,46);
+insert into t (id,a) values (387,47);
+insert into t (id,a) values (387,48);
+insert into t (id,a) values (387,49);
+insert into t (id,a) values (387,50);
+insert into t (id,a) values (387,51);
+insert into t (id,a) values (387,52);
+insert into t (id,a) values (387,53);
+insert into t (id,a) values (387,54);
+insert into t (id,a) values (387,55);
+insert into t (id,a) values (387,56);
+insert into t (id,a) values (387,57);
+insert into t (id,a) values (387,58);
+insert into t (id,a) values (387,59);
+insert into t (id,a) values (387,60);
+insert into t (id,a) values (387,61);
+insert into t (id,a) values (387,62);
+insert into t (id,a) values (387,63);
+insert into t (id,a) values (387,64);
+insert into t (id,a) values (387,65);
+insert into t (id,a) values (387,66);
+insert into t (id,a) values (387,67);
+insert into t (id,a) values (387,68);
+insert into t (id,a) values (387,69);
+insert into t (id,a) values (387,70);
+insert into t (id,a) values (387,71);
+insert into t (id,a) values (387,72);
+insert into t (id,a) values (387,73);
+insert into t (id,a) values (387,74);
+insert into t (id,a) values (387,75);
+insert into t (id,a) values (387,76);
+insert into t (id,a) values (387,77);
+insert into t (id,a) values (387,78);
+insert into t (id,a) values (387,79);
+insert into t (id,a) values (387,80);
+insert into t (id,a) values (387,81);
+insert into t (id,a) values (387,82);
+insert into t (id,a) values (387,83);
+insert into t (id,a) values (387,84);
+insert into t (id,a) values (387,85);
+insert into t (id,a) values (387,86);
+insert into t (id,a) values (387,87);
+insert into t (id,a) values (387,88);
+insert into t (id,a) values (387,89);
+insert into t (id,a) values (387,90);
+insert into t (id,a) values (387,91);
+insert into t (id,a) values (387,92);
+insert into t (id,a) values (387,93);
+insert into t (id,a) values (387,94);
+insert into t (id,a) values (387,95);
+insert into t (id,a) values (387,96);
+insert into t (id,a) values (387,97);
+insert into t (id,a) values (387,98);
+insert into t (id,a) values (387,99);
+insert into t (id,a) values (388,0);
+insert into t (id,a) values (388,1);
+insert into t (id,a) values (388,2);
+insert into t (id,a) values (388,3);
+insert into t (id,a) values (388,4);
+insert into t (id,a) values (388,5);
+insert into t (id,a) values (388,6);
+insert into t (id,a) values (388,7);
+insert into t (id,a) values (388,8);
+insert into t (id,a) values (388,9);
+insert into t (id,a) values (388,10);
+insert into t (id,a) values (388,11);
+insert into t (id,a) values (388,12);
+insert into t (id,a) values (388,13);
+insert into t (id,a) values (388,14);
+insert into t (id,a) values (388,15);
+insert into t (id,a) values (388,16);
+insert into t (id,a) values (388,17);
+insert into t (id,a) values (388,18);
+insert into t (id,a) values (388,19);
+insert into t (id,a) values (388,20);
+insert into t (id,a) values (388,21);
+insert into t (id,a) values (388,22);
+insert into t (id,a) values (388,23);
+insert into t (id,a) values (388,24);
+insert into t (id,a) values (388,25);
+insert into t (id,a) values (388,26);
+insert into t (id,a) values (388,27);
+insert into t (id,a) values (388,28);
+insert into t (id,a) values (388,29);
+insert into t (id,a) values (388,30);
+insert into t (id,a) values (388,31);
+insert into t (id,a) values (388,32);
+insert into t (id,a) values (388,33);
+insert into t (id,a) values (388,34);
+insert into t (id,a) values (388,35);
+insert into t (id,a) values (388,36);
+insert into t (id,a) values (388,37);
+insert into t (id,a) values (388,38);
+insert into t (id,a) values (388,39);
+insert into t (id,a) values (388,40);
+insert into t (id,a) values (388,41);
+insert into t (id,a) values (388,42);
+insert into t (id,a) values (388,43);
+insert into t (id,a) values (388,44);
+insert into t (id,a) values (388,45);
+insert into t (id,a) values (388,46);
+insert into t (id,a) values (388,47);
+insert into t (id,a) values (388,48);
+insert into t (id,a) values (388,49);
+insert into t (id,a) values (388,50);
+insert into t (id,a) values (388,51);
+insert into t (id,a) values (388,52);
+insert into t (id,a) values (388,53);
+insert into t (id,a) values (388,54);
+insert into t (id,a) values (388,55);
+insert into t (id,a) values (388,56);
+insert into t (id,a) values (388,57);
+insert into t (id,a) values (388,58);
+insert into t (id,a) values (388,59);
+insert into t (id,a) values (388,60);
+insert into t (id,a) values (388,61);
+insert into t (id,a) values (388,62);
+insert into t (id,a) values (388,63);
+insert into t (id,a) values (388,64);
+insert into t (id,a) values (388,65);
+insert into t (id,a) values (388,66);
+insert into t (id,a) values (388,67);
+insert into t (id,a) values (388,68);
+insert into t (id,a) values (388,69);
+insert into t (id,a) values (388,70);
+insert into t (id,a) values (388,71);
+insert into t (id,a) values (388,72);
+insert into t (id,a) values (388,73);
+insert into t (id,a) values (388,74);
+insert into t (id,a) values (388,75);
+insert into t (id,a) values (388,76);
+insert into t (id,a) values (388,77);
+insert into t (id,a) values (388,78);
+insert into t (id,a) values (388,79);
+insert into t (id,a) values (388,80);
+insert into t (id,a) values (388,81);
+insert into t (id,a) values (388,82);
+insert into t (id,a) values (388,83);
+insert into t (id,a) values (388,84);
+insert into t (id,a) values (388,85);
+insert into t (id,a) values (388,86);
+insert into t (id,a) values (388,87);
+insert into t (id,a) values (388,88);
+insert into t (id,a) values (388,89);
+insert into t (id,a) values (388,90);
+insert into t (id,a) values (388,91);
+insert into t (id,a) values (388,92);
+insert into t (id,a) values (388,93);
+insert into t (id,a) values (388,94);
+insert into t (id,a) values (388,95);
+insert into t (id,a) values (388,96);
+insert into t (id,a) values (388,97);
+insert into t (id,a) values (388,98);
+insert into t (id,a) values (388,99);
+insert into t (id,a) values (389,0);
+insert into t (id,a) values (389,1);
+insert into t (id,a) values (389,2);
+insert into t (id,a) values (389,3);
+insert into t (id,a) values (389,4);
+insert into t (id,a) values (389,5);
+insert into t (id,a) values (389,6);
+insert into t (id,a) values (389,7);
+insert into t (id,a) values (389,8);
+insert into t (id,a) values (389,9);
+insert into t (id,a) values (389,10);
+insert into t (id,a) values (389,11);
+insert into t (id,a) values (389,12);
+insert into t (id,a) values (389,13);
+insert into t (id,a) values (389,14);
+insert into t (id,a) values (389,15);
+insert into t (id,a) values (389,16);
+insert into t (id,a) values (389,17);
+insert into t (id,a) values (389,18);
+insert into t (id,a) values (389,19);
+insert into t (id,a) values (389,20);
+insert into t (id,a) values (389,21);
+insert into t (id,a) values (389,22);
+insert into t (id,a) values (389,23);
+insert into t (id,a) values (389,24);
+insert into t (id,a) values (389,25);
+insert into t (id,a) values (389,26);
+insert into t (id,a) values (389,27);
+insert into t (id,a) values (389,28);
+insert into t (id,a) values (389,29);
+insert into t (id,a) values (389,30);
+insert into t (id,a) values (389,31);
+insert into t (id,a) values (389,32);
+insert into t (id,a) values (389,33);
+insert into t (id,a) values (389,34);
+insert into t (id,a) values (389,35);
+insert into t (id,a) values (389,36);
+insert into t (id,a) values (389,37);
+insert into t (id,a) values (389,38);
+insert into t (id,a) values (389,39);
+insert into t (id,a) values (389,40);
+insert into t (id,a) values (389,41);
+insert into t (id,a) values (389,42);
+insert into t (id,a) values (389,43);
+insert into t (id,a) values (389,44);
+insert into t (id,a) values (389,45);
+insert into t (id,a) values (389,46);
+insert into t (id,a) values (389,47);
+insert into t (id,a) values (389,48);
+insert into t (id,a) values (389,49);
+insert into t (id,a) values (389,50);
+insert into t (id,a) values (389,51);
+insert into t (id,a) values (389,52);
+insert into t (id,a) values (389,53);
+insert into t (id,a) values (389,54);
+insert into t (id,a) values (389,55);
+insert into t (id,a) values (389,56);
+insert into t (id,a) values (389,57);
+insert into t (id,a) values (389,58);
+insert into t (id,a) values (389,59);
+insert into t (id,a) values (389,60);
+insert into t (id,a) values (389,61);
+insert into t (id,a) values (389,62);
+insert into t (id,a) values (389,63);
+insert into t (id,a) values (389,64);
+insert into t (id,a) values (389,65);
+insert into t (id,a) values (389,66);
+insert into t (id,a) values (389,67);
+insert into t (id,a) values (389,68);
+insert into t (id,a) values (389,69);
+insert into t (id,a) values (389,70);
+insert into t (id,a) values (389,71);
+insert into t (id,a) values (389,72);
+insert into t (id,a) values (389,73);
+insert into t (id,a) values (389,74);
+insert into t (id,a) values (389,75);
+insert into t (id,a) values (389,76);
+insert into t (id,a) values (389,77);
+insert into t (id,a) values (389,78);
+insert into t (id,a) values (389,79);
+insert into t (id,a) values (389,80);
+insert into t (id,a) values (389,81);
+insert into t (id,a) values (389,82);
+insert into t (id,a) values (389,83);
+insert into t (id,a) values (389,84);
+insert into t (id,a) values (389,85);
+insert into t (id,a) values (389,86);
+insert into t (id,a) values (389,87);
+insert into t (id,a) values (389,88);
+insert into t (id,a) values (389,89);
+insert into t (id,a) values (389,90);
+insert into t (id,a) values (389,91);
+insert into t (id,a) values (389,92);
+insert into t (id,a) values (389,93);
+insert into t (id,a) values (389,94);
+insert into t (id,a) values (389,95);
+insert into t (id,a) values (389,96);
+insert into t (id,a) values (389,97);
+insert into t (id,a) values (389,98);
+insert into t (id,a) values (389,99);
+insert into t (id,a) values (390,0);
+insert into t (id,a) values (390,1);
+insert into t (id,a) values (390,2);
+insert into t (id,a) values (390,3);
+insert into t (id,a) values (390,4);
+insert into t (id,a) values (390,5);
+insert into t (id,a) values (390,6);
+insert into t (id,a) values (390,7);
+insert into t (id,a) values (390,8);
+insert into t (id,a) values (390,9);
+insert into t (id,a) values (390,10);
+insert into t (id,a) values (390,11);
+insert into t (id,a) values (390,12);
+insert into t (id,a) values (390,13);
+insert into t (id,a) values (390,14);
+insert into t (id,a) values (390,15);
+insert into t (id,a) values (390,16);
+insert into t (id,a) values (390,17);
+insert into t (id,a) values (390,18);
+insert into t (id,a) values (390,19);
+insert into t (id,a) values (390,20);
+insert into t (id,a) values (390,21);
+insert into t (id,a) values (390,22);
+insert into t (id,a) values (390,23);
+insert into t (id,a) values (390,24);
+insert into t (id,a) values (390,25);
+insert into t (id,a) values (390,26);
+insert into t (id,a) values (390,27);
+insert into t (id,a) values (390,28);
+insert into t (id,a) values (390,29);
+insert into t (id,a) values (390,30);
+insert into t (id,a) values (390,31);
+insert into t (id,a) values (390,32);
+insert into t (id,a) values (390,33);
+insert into t (id,a) values (390,34);
+insert into t (id,a) values (390,35);
+insert into t (id,a) values (390,36);
+insert into t (id,a) values (390,37);
+insert into t (id,a) values (390,38);
+insert into t (id,a) values (390,39);
+insert into t (id,a) values (390,40);
+insert into t (id,a) values (390,41);
+insert into t (id,a) values (390,42);
+insert into t (id,a) values (390,43);
+insert into t (id,a) values (390,44);
+insert into t (id,a) values (390,45);
+insert into t (id,a) values (390,46);
+insert into t (id,a) values (390,47);
+insert into t (id,a) values (390,48);
+insert into t (id,a) values (390,49);
+insert into t (id,a) values (390,50);
+insert into t (id,a) values (390,51);
+insert into t (id,a) values (390,52);
+insert into t (id,a) values (390,53);
+insert into t (id,a) values (390,54);
+insert into t (id,a) values (390,55);
+insert into t (id,a) values (390,56);
+insert into t (id,a) values (390,57);
+insert into t (id,a) values (390,58);
+insert into t (id,a) values (390,59);
+insert into t (id,a) values (390,60);
+insert into t (id,a) values (390,61);
+insert into t (id,a) values (390,62);
+insert into t (id,a) values (390,63);
+insert into t (id,a) values (390,64);
+insert into t (id,a) values (390,65);
+insert into t (id,a) values (390,66);
+insert into t (id,a) values (390,67);
+insert into t (id,a) values (390,68);
+insert into t (id,a) values (390,69);
+insert into t (id,a) values (390,70);
+insert into t (id,a) values (390,71);
+insert into t (id,a) values (390,72);
+insert into t (id,a) values (390,73);
+insert into t (id,a) values (390,74);
+insert into t (id,a) values (390,75);
+insert into t (id,a) values (390,76);
+insert into t (id,a) values (390,77);
+insert into t (id,a) values (390,78);
+insert into t (id,a) values (390,79);
+insert into t (id,a) values (390,80);
+insert into t (id,a) values (390,81);
+insert into t (id,a) values (390,82);
+insert into t (id,a) values (390,83);
+insert into t (id,a) values (390,84);
+insert into t (id,a) values (390,85);
+insert into t (id,a) values (390,86);
+insert into t (id,a) values (390,87);
+insert into t (id,a) values (390,88);
+insert into t (id,a) values (390,89);
+insert into t (id,a) values (390,90);
+insert into t (id,a) values (390,91);
+insert into t (id,a) values (390,92);
+insert into t (id,a) values (390,93);
+insert into t (id,a) values (390,94);
+insert into t (id,a) values (390,95);
+insert into t (id,a) values (390,96);
+insert into t (id,a) values (390,97);
+insert into t (id,a) values (390,98);
+insert into t (id,a) values (390,99);
+insert into t (id,a) values (391,0);
+insert into t (id,a) values (391,1);
+insert into t (id,a) values (391,2);
+insert into t (id,a) values (391,3);
+insert into t (id,a) values (391,4);
+insert into t (id,a) values (391,5);
+insert into t (id,a) values (391,6);
+insert into t (id,a) values (391,7);
+insert into t (id,a) values (391,8);
+insert into t (id,a) values (391,9);
+insert into t (id,a) values (391,10);
+insert into t (id,a) values (391,11);
+insert into t (id,a) values (391,12);
+insert into t (id,a) values (391,13);
+insert into t (id,a) values (391,14);
+insert into t (id,a) values (391,15);
+insert into t (id,a) values (391,16);
+insert into t (id,a) values (391,17);
+insert into t (id,a) values (391,18);
+insert into t (id,a) values (391,19);
+insert into t (id,a) values (391,20);
+insert into t (id,a) values (391,21);
+insert into t (id,a) values (391,22);
+insert into t (id,a) values (391,23);
+insert into t (id,a) values (391,24);
+insert into t (id,a) values (391,25);
+insert into t (id,a) values (391,26);
+insert into t (id,a) values (391,27);
+insert into t (id,a) values (391,28);
+insert into t (id,a) values (391,29);
+insert into t (id,a) values (391,30);
+insert into t (id,a) values (391,31);
+insert into t (id,a) values (391,32);
+insert into t (id,a) values (391,33);
+insert into t (id,a) values (391,34);
+insert into t (id,a) values (391,35);
+insert into t (id,a) values (391,36);
+insert into t (id,a) values (391,37);
+insert into t (id,a) values (391,38);
+insert into t (id,a) values (391,39);
+insert into t (id,a) values (391,40);
+insert into t (id,a) values (391,41);
+insert into t (id,a) values (391,42);
+insert into t (id,a) values (391,43);
+insert into t (id,a) values (391,44);
+insert into t (id,a) values (391,45);
+insert into t (id,a) values (391,46);
+insert into t (id,a) values (391,47);
+insert into t (id,a) values (391,48);
+insert into t (id,a) values (391,49);
+insert into t (id,a) values (391,50);
+insert into t (id,a) values (391,51);
+insert into t (id,a) values (391,52);
+insert into t (id,a) values (391,53);
+insert into t (id,a) values (391,54);
+insert into t (id,a) values (391,55);
+insert into t (id,a) values (391,56);
+insert into t (id,a) values (391,57);
+insert into t (id,a) values (391,58);
+insert into t (id,a) values (391,59);
+insert into t (id,a) values (391,60);
+insert into t (id,a) values (391,61);
+insert into t (id,a) values (391,62);
+insert into t (id,a) values (391,63);
+insert into t (id,a) values (391,64);
+insert into t (id,a) values (391,65);
+insert into t (id,a) values (391,66);
+insert into t (id,a) values (391,67);
+insert into t (id,a) values (391,68);
+insert into t (id,a) values (391,69);
+insert into t (id,a) values (391,70);
+insert into t (id,a) values (391,71);
+insert into t (id,a) values (391,72);
+insert into t (id,a) values (391,73);
+insert into t (id,a) values (391,74);
+insert into t (id,a) values (391,75);
+insert into t (id,a) values (391,76);
+insert into t (id,a) values (391,77);
+insert into t (id,a) values (391,78);
+insert into t (id,a) values (391,79);
+insert into t (id,a) values (391,80);
+insert into t (id,a) values (391,81);
+insert into t (id,a) values (391,82);
+insert into t (id,a) values (391,83);
+insert into t (id,a) values (391,84);
+insert into t (id,a) values (391,85);
+insert into t (id,a) values (391,86);
+insert into t (id,a) values (391,87);
+insert into t (id,a) values (391,88);
+insert into t (id,a) values (391,89);
+insert into t (id,a) values (391,90);
+insert into t (id,a) values (391,91);
+insert into t (id,a) values (391,92);
+insert into t (id,a) values (391,93);
+insert into t (id,a) values (391,94);
+insert into t (id,a) values (391,95);
+insert into t (id,a) values (391,96);
+insert into t (id,a) values (391,97);
+insert into t (id,a) values (391,98);
+insert into t (id,a) values (391,99);
+insert into t (id,a) values (392,0);
+insert into t (id,a) values (392,1);
+insert into t (id,a) values (392,2);
+insert into t (id,a) values (392,3);
+insert into t (id,a) values (392,4);
+insert into t (id,a) values (392,5);
+insert into t (id,a) values (392,6);
+insert into t (id,a) values (392,7);
+insert into t (id,a) values (392,8);
+insert into t (id,a) values (392,9);
+insert into t (id,a) values (392,10);
+insert into t (id,a) values (392,11);
+insert into t (id,a) values (392,12);
+insert into t (id,a) values (392,13);
+insert into t (id,a) values (392,14);
+insert into t (id,a) values (392,15);
+insert into t (id,a) values (392,16);
+insert into t (id,a) values (392,17);
+insert into t (id,a) values (392,18);
+insert into t (id,a) values (392,19);
+insert into t (id,a) values (392,20);
+insert into t (id,a) values (392,21);
+insert into t (id,a) values (392,22);
+insert into t (id,a) values (392,23);
+insert into t (id,a) values (392,24);
+insert into t (id,a) values (392,25);
+insert into t (id,a) values (392,26);
+insert into t (id,a) values (392,27);
+insert into t (id,a) values (392,28);
+insert into t (id,a) values (392,29);
+insert into t (id,a) values (392,30);
+insert into t (id,a) values (392,31);
+insert into t (id,a) values (392,32);
+insert into t (id,a) values (392,33);
+insert into t (id,a) values (392,34);
+insert into t (id,a) values (392,35);
+insert into t (id,a) values (392,36);
+insert into t (id,a) values (392,37);
+insert into t (id,a) values (392,38);
+insert into t (id,a) values (392,39);
+insert into t (id,a) values (392,40);
+insert into t (id,a) values (392,41);
+insert into t (id,a) values (392,42);
+insert into t (id,a) values (392,43);
+insert into t (id,a) values (392,44);
+insert into t (id,a) values (392,45);
+insert into t (id,a) values (392,46);
+insert into t (id,a) values (392,47);
+insert into t (id,a) values (392,48);
+insert into t (id,a) values (392,49);
+insert into t (id,a) values (392,50);
+insert into t (id,a) values (392,51);
+insert into t (id,a) values (392,52);
+insert into t (id,a) values (392,53);
+insert into t (id,a) values (392,54);
+insert into t (id,a) values (392,55);
+insert into t (id,a) values (392,56);
+insert into t (id,a) values (392,57);
+insert into t (id,a) values (392,58);
+insert into t (id,a) values (392,59);
+insert into t (id,a) values (392,60);
+insert into t (id,a) values (392,61);
+insert into t (id,a) values (392,62);
+insert into t (id,a) values (392,63);
+insert into t (id,a) values (392,64);
+insert into t (id,a) values (392,65);
+insert into t (id,a) values (392,66);
+insert into t (id,a) values (392,67);
+insert into t (id,a) values (392,68);
+insert into t (id,a) values (392,69);
+insert into t (id,a) values (392,70);
+insert into t (id,a) values (392,71);
+insert into t (id,a) values (392,72);
+insert into t (id,a) values (392,73);
+insert into t (id,a) values (392,74);
+insert into t (id,a) values (392,75);
+insert into t (id,a) values (392,76);
+insert into t (id,a) values (392,77);
+insert into t (id,a) values (392,78);
+insert into t (id,a) values (392,79);
+insert into t (id,a) values (392,80);
+insert into t (id,a) values (392,81);
+insert into t (id,a) values (392,82);
+insert into t (id,a) values (392,83);
+insert into t (id,a) values (392,84);
+insert into t (id,a) values (392,85);
+insert into t (id,a) values (392,86);
+insert into t (id,a) values (392,87);
+insert into t (id,a) values (392,88);
+insert into t (id,a) values (392,89);
+insert into t (id,a) values (392,90);
+insert into t (id,a) values (392,91);
+insert into t (id,a) values (392,92);
+insert into t (id,a) values (392,93);
+insert into t (id,a) values (392,94);
+insert into t (id,a) values (392,95);
+insert into t (id,a) values (392,96);
+insert into t (id,a) values (392,97);
+insert into t (id,a) values (392,98);
+insert into t (id,a) values (392,99);
+insert into t (id,a) values (393,0);
+insert into t (id,a) values (393,1);
+insert into t (id,a) values (393,2);
+insert into t (id,a) values (393,3);
+insert into t (id,a) values (393,4);
+insert into t (id,a) values (393,5);
+insert into t (id,a) values (393,6);
+insert into t (id,a) values (393,7);
+insert into t (id,a) values (393,8);
+insert into t (id,a) values (393,9);
+insert into t (id,a) values (393,10);
+insert into t (id,a) values (393,11);
+insert into t (id,a) values (393,12);
+insert into t (id,a) values (393,13);
+insert into t (id,a) values (393,14);
+insert into t (id,a) values (393,15);
+insert into t (id,a) values (393,16);
+insert into t (id,a) values (393,17);
+insert into t (id,a) values (393,18);
+insert into t (id,a) values (393,19);
+insert into t (id,a) values (393,20);
+insert into t (id,a) values (393,21);
+insert into t (id,a) values (393,22);
+insert into t (id,a) values (393,23);
+insert into t (id,a) values (393,24);
+insert into t (id,a) values (393,25);
+insert into t (id,a) values (393,26);
+insert into t (id,a) values (393,27);
+insert into t (id,a) values (393,28);
+insert into t (id,a) values (393,29);
+insert into t (id,a) values (393,30);
+insert into t (id,a) values (393,31);
+insert into t (id,a) values (393,32);
+insert into t (id,a) values (393,33);
+insert into t (id,a) values (393,34);
+insert into t (id,a) values (393,35);
+insert into t (id,a) values (393,36);
+insert into t (id,a) values (393,37);
+insert into t (id,a) values (393,38);
+insert into t (id,a) values (393,39);
+insert into t (id,a) values (393,40);
+insert into t (id,a) values (393,41);
+insert into t (id,a) values (393,42);
+insert into t (id,a) values (393,43);
+insert into t (id,a) values (393,44);
+insert into t (id,a) values (393,45);
+insert into t (id,a) values (393,46);
+insert into t (id,a) values (393,47);
+insert into t (id,a) values (393,48);
+insert into t (id,a) values (393,49);
+insert into t (id,a) values (393,50);
+insert into t (id,a) values (393,51);
+insert into t (id,a) values (393,52);
+insert into t (id,a) values (393,53);
+insert into t (id,a) values (393,54);
+insert into t (id,a) values (393,55);
+insert into t (id,a) values (393,56);
+insert into t (id,a) values (393,57);
+insert into t (id,a) values (393,58);
+insert into t (id,a) values (393,59);
+insert into t (id,a) values (393,60);
+insert into t (id,a) values (393,61);
+insert into t (id,a) values (393,62);
+insert into t (id,a) values (393,63);
+insert into t (id,a) values (393,64);
+insert into t (id,a) values (393,65);
+insert into t (id,a) values (393,66);
+insert into t (id,a) values (393,67);
+insert into t (id,a) values (393,68);
+insert into t (id,a) values (393,69);
+insert into t (id,a) values (393,70);
+insert into t (id,a) values (393,71);
+insert into t (id,a) values (393,72);
+insert into t (id,a) values (393,73);
+insert into t (id,a) values (393,74);
+insert into t (id,a) values (393,75);
+insert into t (id,a) values (393,76);
+insert into t (id,a) values (393,77);
+insert into t (id,a) values (393,78);
+insert into t (id,a) values (393,79);
+insert into t (id,a) values (393,80);
+insert into t (id,a) values (393,81);
+insert into t (id,a) values (393,82);
+insert into t (id,a) values (393,83);
+insert into t (id,a) values (393,84);
+insert into t (id,a) values (393,85);
+insert into t (id,a) values (393,86);
+insert into t (id,a) values (393,87);
+insert into t (id,a) values (393,88);
+insert into t (id,a) values (393,89);
+insert into t (id,a) values (393,90);
+insert into t (id,a) values (393,91);
+insert into t (id,a) values (393,92);
+insert into t (id,a) values (393,93);
+insert into t (id,a) values (393,94);
+insert into t (id,a) values (393,95);
+insert into t (id,a) values (393,96);
+insert into t (id,a) values (393,97);
+insert into t (id,a) values (393,98);
+insert into t (id,a) values (393,99);
+insert into t (id,a) values (394,0);
+insert into t (id,a) values (394,1);
+insert into t (id,a) values (394,2);
+insert into t (id,a) values (394,3);
+insert into t (id,a) values (394,4);
+insert into t (id,a) values (394,5);
+insert into t (id,a) values (394,6);
+insert into t (id,a) values (394,7);
+insert into t (id,a) values (394,8);
+insert into t (id,a) values (394,9);
+insert into t (id,a) values (394,10);
+insert into t (id,a) values (394,11);
+insert into t (id,a) values (394,12);
+insert into t (id,a) values (394,13);
+insert into t (id,a) values (394,14);
+insert into t (id,a) values (394,15);
+insert into t (id,a) values (394,16);
+insert into t (id,a) values (394,17);
+insert into t (id,a) values (394,18);
+insert into t (id,a) values (394,19);
+insert into t (id,a) values (394,20);
+insert into t (id,a) values (394,21);
+insert into t (id,a) values (394,22);
+insert into t (id,a) values (394,23);
+insert into t (id,a) values (394,24);
+insert into t (id,a) values (394,25);
+insert into t (id,a) values (394,26);
+insert into t (id,a) values (394,27);
+insert into t (id,a) values (394,28);
+insert into t (id,a) values (394,29);
+insert into t (id,a) values (394,30);
+insert into t (id,a) values (394,31);
+insert into t (id,a) values (394,32);
+insert into t (id,a) values (394,33);
+insert into t (id,a) values (394,34);
+insert into t (id,a) values (394,35);
+insert into t (id,a) values (394,36);
+insert into t (id,a) values (394,37);
+insert into t (id,a) values (394,38);
+insert into t (id,a) values (394,39);
+insert into t (id,a) values (394,40);
+insert into t (id,a) values (394,41);
+insert into t (id,a) values (394,42);
+insert into t (id,a) values (394,43);
+insert into t (id,a) values (394,44);
+insert into t (id,a) values (394,45);
+insert into t (id,a) values (394,46);
+insert into t (id,a) values (394,47);
+insert into t (id,a) values (394,48);
+insert into t (id,a) values (394,49);
+insert into t (id,a) values (394,50);
+insert into t (id,a) values (394,51);
+insert into t (id,a) values (394,52);
+insert into t (id,a) values (394,53);
+insert into t (id,a) values (394,54);
+insert into t (id,a) values (394,55);
+insert into t (id,a) values (394,56);
+insert into t (id,a) values (394,57);
+insert into t (id,a) values (394,58);
+insert into t (id,a) values (394,59);
+insert into t (id,a) values (394,60);
+insert into t (id,a) values (394,61);
+insert into t (id,a) values (394,62);
+insert into t (id,a) values (394,63);
+insert into t (id,a) values (394,64);
+insert into t (id,a) values (394,65);
+insert into t (id,a) values (394,66);
+insert into t (id,a) values (394,67);
+insert into t (id,a) values (394,68);
+insert into t (id,a) values (394,69);
+insert into t (id,a) values (394,70);
+insert into t (id,a) values (394,71);
+insert into t (id,a) values (394,72);
+insert into t (id,a) values (394,73);
+insert into t (id,a) values (394,74);
+insert into t (id,a) values (394,75);
+insert into t (id,a) values (394,76);
+insert into t (id,a) values (394,77);
+insert into t (id,a) values (394,78);
+insert into t (id,a) values (394,79);
+insert into t (id,a) values (394,80);
+insert into t (id,a) values (394,81);
+insert into t (id,a) values (394,82);
+insert into t (id,a) values (394,83);
+insert into t (id,a) values (394,84);
+insert into t (id,a) values (394,85);
+insert into t (id,a) values (394,86);
+insert into t (id,a) values (394,87);
+insert into t (id,a) values (394,88);
+insert into t (id,a) values (394,89);
+insert into t (id,a) values (394,90);
+insert into t (id,a) values (394,91);
+insert into t (id,a) values (394,92);
+insert into t (id,a) values (394,93);
+insert into t (id,a) values (394,94);
+insert into t (id,a) values (394,95);
+insert into t (id,a) values (394,96);
+insert into t (id,a) values (394,97);
+insert into t (id,a) values (394,98);
+insert into t (id,a) values (394,99);
+insert into t (id,a) values (395,0);
+insert into t (id,a) values (395,1);
+insert into t (id,a) values (395,2);
+insert into t (id,a) values (395,3);
+insert into t (id,a) values (395,4);
+insert into t (id,a) values (395,5);
+insert into t (id,a) values (395,6);
+insert into t (id,a) values (395,7);
+insert into t (id,a) values (395,8);
+insert into t (id,a) values (395,9);
+insert into t (id,a) values (395,10);
+insert into t (id,a) values (395,11);
+insert into t (id,a) values (395,12);
+insert into t (id,a) values (395,13);
+insert into t (id,a) values (395,14);
+insert into t (id,a) values (395,15);
+insert into t (id,a) values (395,16);
+insert into t (id,a) values (395,17);
+insert into t (id,a) values (395,18);
+insert into t (id,a) values (395,19);
+insert into t (id,a) values (395,20);
+insert into t (id,a) values (395,21);
+insert into t (id,a) values (395,22);
+insert into t (id,a) values (395,23);
+insert into t (id,a) values (395,24);
+insert into t (id,a) values (395,25);
+insert into t (id,a) values (395,26);
+insert into t (id,a) values (395,27);
+insert into t (id,a) values (395,28);
+insert into t (id,a) values (395,29);
+insert into t (id,a) values (395,30);
+insert into t (id,a) values (395,31);
+insert into t (id,a) values (395,32);
+insert into t (id,a) values (395,33);
+insert into t (id,a) values (395,34);
+insert into t (id,a) values (395,35);
+insert into t (id,a) values (395,36);
+insert into t (id,a) values (395,37);
+insert into t (id,a) values (395,38);
+insert into t (id,a) values (395,39);
+insert into t (id,a) values (395,40);
+insert into t (id,a) values (395,41);
+insert into t (id,a) values (395,42);
+insert into t (id,a) values (395,43);
+insert into t (id,a) values (395,44);
+insert into t (id,a) values (395,45);
+insert into t (id,a) values (395,46);
+insert into t (id,a) values (395,47);
+insert into t (id,a) values (395,48);
+insert into t (id,a) values (395,49);
+insert into t (id,a) values (395,50);
+insert into t (id,a) values (395,51);
+insert into t (id,a) values (395,52);
+insert into t (id,a) values (395,53);
+insert into t (id,a) values (395,54);
+insert into t (id,a) values (395,55);
+insert into t (id,a) values (395,56);
+insert into t (id,a) values (395,57);
+insert into t (id,a) values (395,58);
+insert into t (id,a) values (395,59);
+insert into t (id,a) values (395,60);
+insert into t (id,a) values (395,61);
+insert into t (id,a) values (395,62);
+insert into t (id,a) values (395,63);
+insert into t (id,a) values (395,64);
+insert into t (id,a) values (395,65);
+insert into t (id,a) values (395,66);
+insert into t (id,a) values (395,67);
+insert into t (id,a) values (395,68);
+insert into t (id,a) values (395,69);
+insert into t (id,a) values (395,70);
+insert into t (id,a) values (395,71);
+insert into t (id,a) values (395,72);
+insert into t (id,a) values (395,73);
+insert into t (id,a) values (395,74);
+insert into t (id,a) values (395,75);
+insert into t (id,a) values (395,76);
+insert into t (id,a) values (395,77);
+insert into t (id,a) values (395,78);
+insert into t (id,a) values (395,79);
+insert into t (id,a) values (395,80);
+insert into t (id,a) values (395,81);
+insert into t (id,a) values (395,82);
+insert into t (id,a) values (395,83);
+insert into t (id,a) values (395,84);
+insert into t (id,a) values (395,85);
+insert into t (id,a) values (395,86);
+insert into t (id,a) values (395,87);
+insert into t (id,a) values (395,88);
+insert into t (id,a) values (395,89);
+insert into t (id,a) values (395,90);
+insert into t (id,a) values (395,91);
+insert into t (id,a) values (395,92);
+insert into t (id,a) values (395,93);
+insert into t (id,a) values (395,94);
+insert into t (id,a) values (395,95);
+insert into t (id,a) values (395,96);
+insert into t (id,a) values (395,97);
+insert into t (id,a) values (395,98);
+insert into t (id,a) values (395,99);
+insert into t (id,a) values (396,0);
+insert into t (id,a) values (396,1);
+insert into t (id,a) values (396,2);
+insert into t (id,a) values (396,3);
+insert into t (id,a) values (396,4);
+insert into t (id,a) values (396,5);
+insert into t (id,a) values (396,6);
+insert into t (id,a) values (396,7);
+insert into t (id,a) values (396,8);
+insert into t (id,a) values (396,9);
+insert into t (id,a) values (396,10);
+insert into t (id,a) values (396,11);
+insert into t (id,a) values (396,12);
+insert into t (id,a) values (396,13);
+insert into t (id,a) values (396,14);
+insert into t (id,a) values (396,15);
+insert into t (id,a) values (396,16);
+insert into t (id,a) values (396,17);
+insert into t (id,a) values (396,18);
+insert into t (id,a) values (396,19);
+insert into t (id,a) values (396,20);
+insert into t (id,a) values (396,21);
+insert into t (id,a) values (396,22);
+insert into t (id,a) values (396,23);
+insert into t (id,a) values (396,24);
+insert into t (id,a) values (396,25);
+insert into t (id,a) values (396,26);
+insert into t (id,a) values (396,27);
+insert into t (id,a) values (396,28);
+insert into t (id,a) values (396,29);
+insert into t (id,a) values (396,30);
+insert into t (id,a) values (396,31);
+insert into t (id,a) values (396,32);
+insert into t (id,a) values (396,33);
+insert into t (id,a) values (396,34);
+insert into t (id,a) values (396,35);
+insert into t (id,a) values (396,36);
+insert into t (id,a) values (396,37);
+insert into t (id,a) values (396,38);
+insert into t (id,a) values (396,39);
+insert into t (id,a) values (396,40);
+insert into t (id,a) values (396,41);
+insert into t (id,a) values (396,42);
+insert into t (id,a) values (396,43);
+insert into t (id,a) values (396,44);
+insert into t (id,a) values (396,45);
+insert into t (id,a) values (396,46);
+insert into t (id,a) values (396,47);
+insert into t (id,a) values (396,48);
+insert into t (id,a) values (396,49);
+insert into t (id,a) values (396,50);
+insert into t (id,a) values (396,51);
+insert into t (id,a) values (396,52);
+insert into t (id,a) values (396,53);
+insert into t (id,a) values (396,54);
+insert into t (id,a) values (396,55);
+insert into t (id,a) values (396,56);
+insert into t (id,a) values (396,57);
+insert into t (id,a) values (396,58);
+insert into t (id,a) values (396,59);
+insert into t (id,a) values (396,60);
+insert into t (id,a) values (396,61);
+insert into t (id,a) values (396,62);
+insert into t (id,a) values (396,63);
+insert into t (id,a) values (396,64);
+insert into t (id,a) values (396,65);
+insert into t (id,a) values (396,66);
+insert into t (id,a) values (396,67);
+insert into t (id,a) values (396,68);
+insert into t (id,a) values (396,69);
+insert into t (id,a) values (396,70);
+insert into t (id,a) values (396,71);
+insert into t (id,a) values (396,72);
+insert into t (id,a) values (396,73);
+insert into t (id,a) values (396,74);
+insert into t (id,a) values (396,75);
+insert into t (id,a) values (396,76);
+insert into t (id,a) values (396,77);
+insert into t (id,a) values (396,78);
+insert into t (id,a) values (396,79);
+insert into t (id,a) values (396,80);
+insert into t (id,a) values (396,81);
+insert into t (id,a) values (396,82);
+insert into t (id,a) values (396,83);
+insert into t (id,a) values (396,84);
+insert into t (id,a) values (396,85);
+insert into t (id,a) values (396,86);
+insert into t (id,a) values (396,87);
+insert into t (id,a) values (396,88);
+insert into t (id,a) values (396,89);
+insert into t (id,a) values (396,90);
+insert into t (id,a) values (396,91);
+insert into t (id,a) values (396,92);
+insert into t (id,a) values (396,93);
+insert into t (id,a) values (396,94);
+insert into t (id,a) values (396,95);
+insert into t (id,a) values (396,96);
+insert into t (id,a) values (396,97);
+insert into t (id,a) values (396,98);
+insert into t (id,a) values (396,99);
+insert into t (id,a) values (397,0);
+insert into t (id,a) values (397,1);
+insert into t (id,a) values (397,2);
+insert into t (id,a) values (397,3);
+insert into t (id,a) values (397,4);
+insert into t (id,a) values (397,5);
+insert into t (id,a) values (397,6);
+insert into t (id,a) values (397,7);
+insert into t (id,a) values (397,8);
+insert into t (id,a) values (397,9);
+insert into t (id,a) values (397,10);
+insert into t (id,a) values (397,11);
+insert into t (id,a) values (397,12);
+insert into t (id,a) values (397,13);
+insert into t (id,a) values (397,14);
+insert into t (id,a) values (397,15);
+insert into t (id,a) values (397,16);
+insert into t (id,a) values (397,17);
+insert into t (id,a) values (397,18);
+insert into t (id,a) values (397,19);
+insert into t (id,a) values (397,20);
+insert into t (id,a) values (397,21);
+insert into t (id,a) values (397,22);
+insert into t (id,a) values (397,23);
+insert into t (id,a) values (397,24);
+insert into t (id,a) values (397,25);
+insert into t (id,a) values (397,26);
+insert into t (id,a) values (397,27);
+insert into t (id,a) values (397,28);
+insert into t (id,a) values (397,29);
+insert into t (id,a) values (397,30);
+insert into t (id,a) values (397,31);
+insert into t (id,a) values (397,32);
+insert into t (id,a) values (397,33);
+insert into t (id,a) values (397,34);
+insert into t (id,a) values (397,35);
+insert into t (id,a) values (397,36);
+insert into t (id,a) values (397,37);
+insert into t (id,a) values (397,38);
+insert into t (id,a) values (397,39);
+insert into t (id,a) values (397,40);
+insert into t (id,a) values (397,41);
+insert into t (id,a) values (397,42);
+insert into t (id,a) values (397,43);
+insert into t (id,a) values (397,44);
+insert into t (id,a) values (397,45);
+insert into t (id,a) values (397,46);
+insert into t (id,a) values (397,47);
+insert into t (id,a) values (397,48);
+insert into t (id,a) values (397,49);
+insert into t (id,a) values (397,50);
+insert into t (id,a) values (397,51);
+insert into t (id,a) values (397,52);
+insert into t (id,a) values (397,53);
+insert into t (id,a) values (397,54);
+insert into t (id,a) values (397,55);
+insert into t (id,a) values (397,56);
+insert into t (id,a) values (397,57);
+insert into t (id,a) values (397,58);
+insert into t (id,a) values (397,59);
+insert into t (id,a) values (397,60);
+insert into t (id,a) values (397,61);
+insert into t (id,a) values (397,62);
+insert into t (id,a) values (397,63);
+insert into t (id,a) values (397,64);
+insert into t (id,a) values (397,65);
+insert into t (id,a) values (397,66);
+insert into t (id,a) values (397,67);
+insert into t (id,a) values (397,68);
+insert into t (id,a) values (397,69);
+insert into t (id,a) values (397,70);
+insert into t (id,a) values (397,71);
+insert into t (id,a) values (397,72);
+insert into t (id,a) values (397,73);
+insert into t (id,a) values (397,74);
+insert into t (id,a) values (397,75);
+insert into t (id,a) values (397,76);
+insert into t (id,a) values (397,77);
+insert into t (id,a) values (397,78);
+insert into t (id,a) values (397,79);
+insert into t (id,a) values (397,80);
+insert into t (id,a) values (397,81);
+insert into t (id,a) values (397,82);
+insert into t (id,a) values (397,83);
+insert into t (id,a) values (397,84);
+insert into t (id,a) values (397,85);
+insert into t (id,a) values (397,86);
+insert into t (id,a) values (397,87);
+insert into t (id,a) values (397,88);
+insert into t (id,a) values (397,89);
+insert into t (id,a) values (397,90);
+insert into t (id,a) values (397,91);
+insert into t (id,a) values (397,92);
+insert into t (id,a) values (397,93);
+insert into t (id,a) values (397,94);
+insert into t (id,a) values (397,95);
+insert into t (id,a) values (397,96);
+insert into t (id,a) values (397,97);
+insert into t (id,a) values (397,98);
+insert into t (id,a) values (397,99);
+insert into t (id,a) values (398,0);
+insert into t (id,a) values (398,1);
+insert into t (id,a) values (398,2);
+insert into t (id,a) values (398,3);
+insert into t (id,a) values (398,4);
+insert into t (id,a) values (398,5);
+insert into t (id,a) values (398,6);
+insert into t (id,a) values (398,7);
+insert into t (id,a) values (398,8);
+insert into t (id,a) values (398,9);
+insert into t (id,a) values (398,10);
+insert into t (id,a) values (398,11);
+insert into t (id,a) values (398,12);
+insert into t (id,a) values (398,13);
+insert into t (id,a) values (398,14);
+insert into t (id,a) values (398,15);
+insert into t (id,a) values (398,16);
+insert into t (id,a) values (398,17);
+insert into t (id,a) values (398,18);
+insert into t (id,a) values (398,19);
+insert into t (id,a) values (398,20);
+insert into t (id,a) values (398,21);
+insert into t (id,a) values (398,22);
+insert into t (id,a) values (398,23);
+insert into t (id,a) values (398,24);
+insert into t (id,a) values (398,25);
+insert into t (id,a) values (398,26);
+insert into t (id,a) values (398,27);
+insert into t (id,a) values (398,28);
+insert into t (id,a) values (398,29);
+insert into t (id,a) values (398,30);
+insert into t (id,a) values (398,31);
+insert into t (id,a) values (398,32);
+insert into t (id,a) values (398,33);
+insert into t (id,a) values (398,34);
+insert into t (id,a) values (398,35);
+insert into t (id,a) values (398,36);
+insert into t (id,a) values (398,37);
+insert into t (id,a) values (398,38);
+insert into t (id,a) values (398,39);
+insert into t (id,a) values (398,40);
+insert into t (id,a) values (398,41);
+insert into t (id,a) values (398,42);
+insert into t (id,a) values (398,43);
+insert into t (id,a) values (398,44);
+insert into t (id,a) values (398,45);
+insert into t (id,a) values (398,46);
+insert into t (id,a) values (398,47);
+insert into t (id,a) values (398,48);
+insert into t (id,a) values (398,49);
+insert into t (id,a) values (398,50);
+insert into t (id,a) values (398,51);
+insert into t (id,a) values (398,52);
+insert into t (id,a) values (398,53);
+insert into t (id,a) values (398,54);
+insert into t (id,a) values (398,55);
+insert into t (id,a) values (398,56);
+insert into t (id,a) values (398,57);
+insert into t (id,a) values (398,58);
+insert into t (id,a) values (398,59);
+insert into t (id,a) values (398,60);
+insert into t (id,a) values (398,61);
+insert into t (id,a) values (398,62);
+insert into t (id,a) values (398,63);
+insert into t (id,a) values (398,64);
+insert into t (id,a) values (398,65);
+insert into t (id,a) values (398,66);
+insert into t (id,a) values (398,67);
+insert into t (id,a) values (398,68);
+insert into t (id,a) values (398,69);
+insert into t (id,a) values (398,70);
+insert into t (id,a) values (398,71);
+insert into t (id,a) values (398,72);
+insert into t (id,a) values (398,73);
+insert into t (id,a) values (398,74);
+insert into t (id,a) values (398,75);
+insert into t (id,a) values (398,76);
+insert into t (id,a) values (398,77);
+insert into t (id,a) values (398,78);
+insert into t (id,a) values (398,79);
+insert into t (id,a) values (398,80);
+insert into t (id,a) values (398,81);
+insert into t (id,a) values (398,82);
+insert into t (id,a) values (398,83);
+insert into t (id,a) values (398,84);
+insert into t (id,a) values (398,85);
+insert into t (id,a) values (398,86);
+insert into t (id,a) values (398,87);
+insert into t (id,a) values (398,88);
+insert into t (id,a) values (398,89);
+insert into t (id,a) values (398,90);
+insert into t (id,a) values (398,91);
+insert into t (id,a) values (398,92);
+insert into t (id,a) values (398,93);
+insert into t (id,a) values (398,94);
+insert into t (id,a) values (398,95);
+insert into t (id,a) values (398,96);
+insert into t (id,a) values (398,97);
+insert into t (id,a) values (398,98);
+insert into t (id,a) values (398,99);
+insert into t (id,a) values (399,0);
+insert into t (id,a) values (399,1);
+insert into t (id,a) values (399,2);
+insert into t (id,a) values (399,3);
+insert into t (id,a) values (399,4);
+insert into t (id,a) values (399,5);
+insert into t (id,a) values (399,6);
+insert into t (id,a) values (399,7);
+insert into t (id,a) values (399,8);
+insert into t (id,a) values (399,9);
+insert into t (id,a) values (399,10);
+insert into t (id,a) values (399,11);
+insert into t (id,a) values (399,12);
+insert into t (id,a) values (399,13);
+insert into t (id,a) values (399,14);
+insert into t (id,a) values (399,15);
+insert into t (id,a) values (399,16);
+insert into t (id,a) values (399,17);
+insert into t (id,a) values (399,18);
+insert into t (id,a) values (399,19);
+insert into t (id,a) values (399,20);
+insert into t (id,a) values (399,21);
+insert into t (id,a) values (399,22);
+insert into t (id,a) values (399,23);
+insert into t (id,a) values (399,24);
+insert into t (id,a) values (399,25);
+insert into t (id,a) values (399,26);
+insert into t (id,a) values (399,27);
+insert into t (id,a) values (399,28);
+insert into t (id,a) values (399,29);
+insert into t (id,a) values (399,30);
+insert into t (id,a) values (399,31);
+insert into t (id,a) values (399,32);
+insert into t (id,a) values (399,33);
+insert into t (id,a) values (399,34);
+insert into t (id,a) values (399,35);
+insert into t (id,a) values (399,36);
+insert into t (id,a) values (399,37);
+insert into t (id,a) values (399,38);
+insert into t (id,a) values (399,39);
+insert into t (id,a) values (399,40);
+insert into t (id,a) values (399,41);
+insert into t (id,a) values (399,42);
+insert into t (id,a) values (399,43);
+insert into t (id,a) values (399,44);
+insert into t (id,a) values (399,45);
+insert into t (id,a) values (399,46);
+insert into t (id,a) values (399,47);
+insert into t (id,a) values (399,48);
+insert into t (id,a) values (399,49);
+insert into t (id,a) values (399,50);
+insert into t (id,a) values (399,51);
+insert into t (id,a) values (399,52);
+insert into t (id,a) values (399,53);
+insert into t (id,a) values (399,54);
+insert into t (id,a) values (399,55);
+insert into t (id,a) values (399,56);
+insert into t (id,a) values (399,57);
+insert into t (id,a) values (399,58);
+insert into t (id,a) values (399,59);
+insert into t (id,a) values (399,60);
+insert into t (id,a) values (399,61);
+insert into t (id,a) values (399,62);
+insert into t (id,a) values (399,63);
+insert into t (id,a) values (399,64);
+insert into t (id,a) values (399,65);
+insert into t (id,a) values (399,66);
+insert into t (id,a) values (399,67);
+insert into t (id,a) values (399,68);
+insert into t (id,a) values (399,69);
+insert into t (id,a) values (399,70);
+insert into t (id,a) values (399,71);
+insert into t (id,a) values (399,72);
+insert into t (id,a) values (399,73);
+insert into t (id,a) values (399,74);
+insert into t (id,a) values (399,75);
+insert into t (id,a) values (399,76);
+insert into t (id,a) values (399,77);
+insert into t (id,a) values (399,78);
+insert into t (id,a) values (399,79);
+insert into t (id,a) values (399,80);
+insert into t (id,a) values (399,81);
+insert into t (id,a) values (399,82);
+insert into t (id,a) values (399,83);
+insert into t (id,a) values (399,84);
+insert into t (id,a) values (399,85);
+insert into t (id,a) values (399,86);
+insert into t (id,a) values (399,87);
+insert into t (id,a) values (399,88);
+insert into t (id,a) values (399,89);
+insert into t (id,a) values (399,90);
+insert into t (id,a) values (399,91);
+insert into t (id,a) values (399,92);
+insert into t (id,a) values (399,93);
+insert into t (id,a) values (399,94);
+insert into t (id,a) values (399,95);
+insert into t (id,a) values (399,96);
+insert into t (id,a) values (399,97);
+insert into t (id,a) values (399,98);
+insert into t (id,a) values (399,99);
+insert into t (id,a) values (400,0);
+insert into t (id,a) values (400,1);
+insert into t (id,a) values (400,2);
+insert into t (id,a) values (400,3);
+insert into t (id,a) values (400,4);
+insert into t (id,a) values (400,5);
+insert into t (id,a) values (400,6);
+insert into t (id,a) values (400,7);
+insert into t (id,a) values (400,8);
+insert into t (id,a) values (400,9);
+insert into t (id,a) values (400,10);
+insert into t (id,a) values (400,11);
+insert into t (id,a) values (400,12);
+insert into t (id,a) values (400,13);
+insert into t (id,a) values (400,14);
+insert into t (id,a) values (400,15);
+insert into t (id,a) values (400,16);
+insert into t (id,a) values (400,17);
+insert into t (id,a) values (400,18);
+insert into t (id,a) values (400,19);
+insert into t (id,a) values (400,20);
+insert into t (id,a) values (400,21);
+insert into t (id,a) values (400,22);
+insert into t (id,a) values (400,23);
+insert into t (id,a) values (400,24);
+insert into t (id,a) values (400,25);
+insert into t (id,a) values (400,26);
+insert into t (id,a) values (400,27);
+insert into t (id,a) values (400,28);
+insert into t (id,a) values (400,29);
+insert into t (id,a) values (400,30);
+insert into t (id,a) values (400,31);
+insert into t (id,a) values (400,32);
+insert into t (id,a) values (400,33);
+insert into t (id,a) values (400,34);
+insert into t (id,a) values (400,35);
+insert into t (id,a) values (400,36);
+insert into t (id,a) values (400,37);
+insert into t (id,a) values (400,38);
+insert into t (id,a) values (400,39);
+insert into t (id,a) values (400,40);
+insert into t (id,a) values (400,41);
+insert into t (id,a) values (400,42);
+insert into t (id,a) values (400,43);
+insert into t (id,a) values (400,44);
+insert into t (id,a) values (400,45);
+insert into t (id,a) values (400,46);
+insert into t (id,a) values (400,47);
+insert into t (id,a) values (400,48);
+insert into t (id,a) values (400,49);
+insert into t (id,a) values (400,50);
+insert into t (id,a) values (400,51);
+insert into t (id,a) values (400,52);
+insert into t (id,a) values (400,53);
+insert into t (id,a) values (400,54);
+insert into t (id,a) values (400,55);
+insert into t (id,a) values (400,56);
+insert into t (id,a) values (400,57);
+insert into t (id,a) values (400,58);
+insert into t (id,a) values (400,59);
+insert into t (id,a) values (400,60);
+insert into t (id,a) values (400,61);
+insert into t (id,a) values (400,62);
+insert into t (id,a) values (400,63);
+insert into t (id,a) values (400,64);
+insert into t (id,a) values (400,65);
+insert into t (id,a) values (400,66);
+insert into t (id,a) values (400,67);
+insert into t (id,a) values (400,68);
+insert into t (id,a) values (400,69);
+insert into t (id,a) values (400,70);
+insert into t (id,a) values (400,71);
+insert into t (id,a) values (400,72);
+insert into t (id,a) values (400,73);
+insert into t (id,a) values (400,74);
+insert into t (id,a) values (400,75);
+insert into t (id,a) values (400,76);
+insert into t (id,a) values (400,77);
+insert into t (id,a) values (400,78);
+insert into t (id,a) values (400,79);
+insert into t (id,a) values (400,80);
+insert into t (id,a) values (400,81);
+insert into t (id,a) values (400,82);
+insert into t (id,a) values (400,83);
+insert into t (id,a) values (400,84);
+insert into t (id,a) values (400,85);
+insert into t (id,a) values (400,86);
+insert into t (id,a) values (400,87);
+insert into t (id,a) values (400,88);
+insert into t (id,a) values (400,89);
+insert into t (id,a) values (400,90);
+insert into t (id,a) values (400,91);
+insert into t (id,a) values (400,92);
+insert into t (id,a) values (400,93);
+insert into t (id,a) values (400,94);
+insert into t (id,a) values (400,95);
+insert into t (id,a) values (400,96);
+insert into t (id,a) values (400,97);
+insert into t (id,a) values (400,98);
+insert into t (id,a) values (400,99);
+insert into t (id,a) values (401,0);
+insert into t (id,a) values (401,1);
+insert into t (id,a) values (401,2);
+insert into t (id,a) values (401,3);
+insert into t (id,a) values (401,4);
+insert into t (id,a) values (401,5);
+insert into t (id,a) values (401,6);
+insert into t (id,a) values (401,7);
+insert into t (id,a) values (401,8);
+insert into t (id,a) values (401,9);
+insert into t (id,a) values (401,10);
+insert into t (id,a) values (401,11);
+insert into t (id,a) values (401,12);
+insert into t (id,a) values (401,13);
+insert into t (id,a) values (401,14);
+insert into t (id,a) values (401,15);
+insert into t (id,a) values (401,16);
+insert into t (id,a) values (401,17);
+insert into t (id,a) values (401,18);
+insert into t (id,a) values (401,19);
+insert into t (id,a) values (401,20);
+insert into t (id,a) values (401,21);
+insert into t (id,a) values (401,22);
+insert into t (id,a) values (401,23);
+insert into t (id,a) values (401,24);
+insert into t (id,a) values (401,25);
+insert into t (id,a) values (401,26);
+insert into t (id,a) values (401,27);
+insert into t (id,a) values (401,28);
+insert into t (id,a) values (401,29);
+insert into t (id,a) values (401,30);
+insert into t (id,a) values (401,31);
+insert into t (id,a) values (401,32);
+insert into t (id,a) values (401,33);
+insert into t (id,a) values (401,34);
+insert into t (id,a) values (401,35);
+insert into t (id,a) values (401,36);
+insert into t (id,a) values (401,37);
+insert into t (id,a) values (401,38);
+insert into t (id,a) values (401,39);
+insert into t (id,a) values (401,40);
+insert into t (id,a) values (401,41);
+insert into t (id,a) values (401,42);
+insert into t (id,a) values (401,43);
+insert into t (id,a) values (401,44);
+insert into t (id,a) values (401,45);
+insert into t (id,a) values (401,46);
+insert into t (id,a) values (401,47);
+insert into t (id,a) values (401,48);
+insert into t (id,a) values (401,49);
+insert into t (id,a) values (401,50);
+insert into t (id,a) values (401,51);
+insert into t (id,a) values (401,52);
+insert into t (id,a) values (401,53);
+insert into t (id,a) values (401,54);
+insert into t (id,a) values (401,55);
+insert into t (id,a) values (401,56);
+insert into t (id,a) values (401,57);
+insert into t (id,a) values (401,58);
+insert into t (id,a) values (401,59);
+insert into t (id,a) values (401,60);
+insert into t (id,a) values (401,61);
+insert into t (id,a) values (401,62);
+insert into t (id,a) values (401,63);
+insert into t (id,a) values (401,64);
+insert into t (id,a) values (401,65);
+insert into t (id,a) values (401,66);
+insert into t (id,a) values (401,67);
+insert into t (id,a) values (401,68);
+insert into t (id,a) values (401,69);
+insert into t (id,a) values (401,70);
+insert into t (id,a) values (401,71);
+insert into t (id,a) values (401,72);
+insert into t (id,a) values (401,73);
+insert into t (id,a) values (401,74);
+insert into t (id,a) values (401,75);
+insert into t (id,a) values (401,76);
+insert into t (id,a) values (401,77);
+insert into t (id,a) values (401,78);
+insert into t (id,a) values (401,79);
+insert into t (id,a) values (401,80);
+insert into t (id,a) values (401,81);
+insert into t (id,a) values (401,82);
+insert into t (id,a) values (401,83);
+insert into t (id,a) values (401,84);
+insert into t (id,a) values (401,85);
+insert into t (id,a) values (401,86);
+insert into t (id,a) values (401,87);
+insert into t (id,a) values (401,88);
+insert into t (id,a) values (401,89);
+insert into t (id,a) values (401,90);
+insert into t (id,a) values (401,91);
+insert into t (id,a) values (401,92);
+insert into t (id,a) values (401,93);
+insert into t (id,a) values (401,94);
+insert into t (id,a) values (401,95);
+insert into t (id,a) values (401,96);
+insert into t (id,a) values (401,97);
+insert into t (id,a) values (401,98);
+insert into t (id,a) values (401,99);
+insert into t (id,a) values (402,0);
+insert into t (id,a) values (402,1);
+insert into t (id,a) values (402,2);
+insert into t (id,a) values (402,3);
+insert into t (id,a) values (402,4);
+insert into t (id,a) values (402,5);
+insert into t (id,a) values (402,6);
+insert into t (id,a) values (402,7);
+insert into t (id,a) values (402,8);
+insert into t (id,a) values (402,9);
+insert into t (id,a) values (402,10);
+insert into t (id,a) values (402,11);
+insert into t (id,a) values (402,12);
+insert into t (id,a) values (402,13);
+insert into t (id,a) values (402,14);
+insert into t (id,a) values (402,15);
+insert into t (id,a) values (402,16);
+insert into t (id,a) values (402,17);
+insert into t (id,a) values (402,18);
+insert into t (id,a) values (402,19);
+insert into t (id,a) values (402,20);
+insert into t (id,a) values (402,21);
+insert into t (id,a) values (402,22);
+insert into t (id,a) values (402,23);
+insert into t (id,a) values (402,24);
+insert into t (id,a) values (402,25);
+insert into t (id,a) values (402,26);
+insert into t (id,a) values (402,27);
+insert into t (id,a) values (402,28);
+insert into t (id,a) values (402,29);
+insert into t (id,a) values (402,30);
+insert into t (id,a) values (402,31);
+insert into t (id,a) values (402,32);
+insert into t (id,a) values (402,33);
+insert into t (id,a) values (402,34);
+insert into t (id,a) values (402,35);
+insert into t (id,a) values (402,36);
+insert into t (id,a) values (402,37);
+insert into t (id,a) values (402,38);
+insert into t (id,a) values (402,39);
+insert into t (id,a) values (402,40);
+insert into t (id,a) values (402,41);
+insert into t (id,a) values (402,42);
+insert into t (id,a) values (402,43);
+insert into t (id,a) values (402,44);
+insert into t (id,a) values (402,45);
+insert into t (id,a) values (402,46);
+insert into t (id,a) values (402,47);
+insert into t (id,a) values (402,48);
+insert into t (id,a) values (402,49);
+insert into t (id,a) values (402,50);
+insert into t (id,a) values (402,51);
+insert into t (id,a) values (402,52);
+insert into t (id,a) values (402,53);
+insert into t (id,a) values (402,54);
+insert into t (id,a) values (402,55);
+insert into t (id,a) values (402,56);
+insert into t (id,a) values (402,57);
+insert into t (id,a) values (402,58);
+insert into t (id,a) values (402,59);
+insert into t (id,a) values (402,60);
+insert into t (id,a) values (402,61);
+insert into t (id,a) values (402,62);
+insert into t (id,a) values (402,63);
+insert into t (id,a) values (402,64);
+insert into t (id,a) values (402,65);
+insert into t (id,a) values (402,66);
+insert into t (id,a) values (402,67);
+insert into t (id,a) values (402,68);
+insert into t (id,a) values (402,69);
+insert into t (id,a) values (402,70);
+insert into t (id,a) values (402,71);
+insert into t (id,a) values (402,72);
+insert into t (id,a) values (402,73);
+insert into t (id,a) values (402,74);
+insert into t (id,a) values (402,75);
+insert into t (id,a) values (402,76);
+insert into t (id,a) values (402,77);
+insert into t (id,a) values (402,78);
+insert into t (id,a) values (402,79);
+insert into t (id,a) values (402,80);
+insert into t (id,a) values (402,81);
+insert into t (id,a) values (402,82);
+insert into t (id,a) values (402,83);
+insert into t (id,a) values (402,84);
+insert into t (id,a) values (402,85);
+insert into t (id,a) values (402,86);
+insert into t (id,a) values (402,87);
+insert into t (id,a) values (402,88);
+insert into t (id,a) values (402,89);
+insert into t (id,a) values (402,90);
+insert into t (id,a) values (402,91);
+insert into t (id,a) values (402,92);
+insert into t (id,a) values (402,93);
+insert into t (id,a) values (402,94);
+insert into t (id,a) values (402,95);
+insert into t (id,a) values (402,96);
+insert into t (id,a) values (402,97);
+insert into t (id,a) values (402,98);
+insert into t (id,a) values (402,99);
+insert into t (id,a) values (403,0);
+insert into t (id,a) values (403,1);
+insert into t (id,a) values (403,2);
+insert into t (id,a) values (403,3);
+insert into t (id,a) values (403,4);
+insert into t (id,a) values (403,5);
+insert into t (id,a) values (403,6);
+insert into t (id,a) values (403,7);
+insert into t (id,a) values (403,8);
+insert into t (id,a) values (403,9);
+insert into t (id,a) values (403,10);
+insert into t (id,a) values (403,11);
+insert into t (id,a) values (403,12);
+insert into t (id,a) values (403,13);
+insert into t (id,a) values (403,14);
+insert into t (id,a) values (403,15);
+insert into t (id,a) values (403,16);
+insert into t (id,a) values (403,17);
+insert into t (id,a) values (403,18);
+insert into t (id,a) values (403,19);
+insert into t (id,a) values (403,20);
+insert into t (id,a) values (403,21);
+insert into t (id,a) values (403,22);
+insert into t (id,a) values (403,23);
+insert into t (id,a) values (403,24);
+insert into t (id,a) values (403,25);
+insert into t (id,a) values (403,26);
+insert into t (id,a) values (403,27);
+insert into t (id,a) values (403,28);
+insert into t (id,a) values (403,29);
+insert into t (id,a) values (403,30);
+insert into t (id,a) values (403,31);
+insert into t (id,a) values (403,32);
+insert into t (id,a) values (403,33);
+insert into t (id,a) values (403,34);
+insert into t (id,a) values (403,35);
+insert into t (id,a) values (403,36);
+insert into t (id,a) values (403,37);
+insert into t (id,a) values (403,38);
+insert into t (id,a) values (403,39);
+insert into t (id,a) values (403,40);
+insert into t (id,a) values (403,41);
+insert into t (id,a) values (403,42);
+insert into t (id,a) values (403,43);
+insert into t (id,a) values (403,44);
+insert into t (id,a) values (403,45);
+insert into t (id,a) values (403,46);
+insert into t (id,a) values (403,47);
+insert into t (id,a) values (403,48);
+insert into t (id,a) values (403,49);
+insert into t (id,a) values (403,50);
+insert into t (id,a) values (403,51);
+insert into t (id,a) values (403,52);
+insert into t (id,a) values (403,53);
+insert into t (id,a) values (403,54);
+insert into t (id,a) values (403,55);
+insert into t (id,a) values (403,56);
+insert into t (id,a) values (403,57);
+insert into t (id,a) values (403,58);
+insert into t (id,a) values (403,59);
+insert into t (id,a) values (403,60);
+insert into t (id,a) values (403,61);
+insert into t (id,a) values (403,62);
+insert into t (id,a) values (403,63);
+insert into t (id,a) values (403,64);
+insert into t (id,a) values (403,65);
+insert into t (id,a) values (403,66);
+insert into t (id,a) values (403,67);
+insert into t (id,a) values (403,68);
+insert into t (id,a) values (403,69);
+insert into t (id,a) values (403,70);
+insert into t (id,a) values (403,71);
+insert into t (id,a) values (403,72);
+insert into t (id,a) values (403,73);
+insert into t (id,a) values (403,74);
+insert into t (id,a) values (403,75);
+insert into t (id,a) values (403,76);
+insert into t (id,a) values (403,77);
+insert into t (id,a) values (403,78);
+insert into t (id,a) values (403,79);
+insert into t (id,a) values (403,80);
+insert into t (id,a) values (403,81);
+insert into t (id,a) values (403,82);
+insert into t (id,a) values (403,83);
+insert into t (id,a) values (403,84);
+insert into t (id,a) values (403,85);
+insert into t (id,a) values (403,86);
+insert into t (id,a) values (403,87);
+insert into t (id,a) values (403,88);
+insert into t (id,a) values (403,89);
+insert into t (id,a) values (403,90);
+insert into t (id,a) values (403,91);
+insert into t (id,a) values (403,92);
+insert into t (id,a) values (403,93);
+insert into t (id,a) values (403,94);
+insert into t (id,a) values (403,95);
+insert into t (id,a) values (403,96);
+insert into t (id,a) values (403,97);
+insert into t (id,a) values (403,98);
+insert into t (id,a) values (403,99);
+insert into t (id,a) values (404,0);
+insert into t (id,a) values (404,1);
+insert into t (id,a) values (404,2);
+insert into t (id,a) values (404,3);
+insert into t (id,a) values (404,4);
+insert into t (id,a) values (404,5);
+insert into t (id,a) values (404,6);
+insert into t (id,a) values (404,7);
+insert into t (id,a) values (404,8);
+insert into t (id,a) values (404,9);
+insert into t (id,a) values (404,10);
+insert into t (id,a) values (404,11);
+insert into t (id,a) values (404,12);
+insert into t (id,a) values (404,13);
+insert into t (id,a) values (404,14);
+insert into t (id,a) values (404,15);
+insert into t (id,a) values (404,16);
+insert into t (id,a) values (404,17);
+insert into t (id,a) values (404,18);
+insert into t (id,a) values (404,19);
+insert into t (id,a) values (404,20);
+insert into t (id,a) values (404,21);
+insert into t (id,a) values (404,22);
+insert into t (id,a) values (404,23);
+insert into t (id,a) values (404,24);
+insert into t (id,a) values (404,25);
+insert into t (id,a) values (404,26);
+insert into t (id,a) values (404,27);
+insert into t (id,a) values (404,28);
+insert into t (id,a) values (404,29);
+insert into t (id,a) values (404,30);
+insert into t (id,a) values (404,31);
+insert into t (id,a) values (404,32);
+insert into t (id,a) values (404,33);
+insert into t (id,a) values (404,34);
+insert into t (id,a) values (404,35);
+insert into t (id,a) values (404,36);
+insert into t (id,a) values (404,37);
+insert into t (id,a) values (404,38);
+insert into t (id,a) values (404,39);
+insert into t (id,a) values (404,40);
+insert into t (id,a) values (404,41);
+insert into t (id,a) values (404,42);
+insert into t (id,a) values (404,43);
+insert into t (id,a) values (404,44);
+insert into t (id,a) values (404,45);
+insert into t (id,a) values (404,46);
+insert into t (id,a) values (404,47);
+insert into t (id,a) values (404,48);
+insert into t (id,a) values (404,49);
+insert into t (id,a) values (404,50);
+insert into t (id,a) values (404,51);
+insert into t (id,a) values (404,52);
+insert into t (id,a) values (404,53);
+insert into t (id,a) values (404,54);
+insert into t (id,a) values (404,55);
+insert into t (id,a) values (404,56);
+insert into t (id,a) values (404,57);
+insert into t (id,a) values (404,58);
+insert into t (id,a) values (404,59);
+insert into t (id,a) values (404,60);
+insert into t (id,a) values (404,61);
+insert into t (id,a) values (404,62);
+insert into t (id,a) values (404,63);
+insert into t (id,a) values (404,64);
+insert into t (id,a) values (404,65);
+insert into t (id,a) values (404,66);
+insert into t (id,a) values (404,67);
+insert into t (id,a) values (404,68);
+insert into t (id,a) values (404,69);
+insert into t (id,a) values (404,70);
+insert into t (id,a) values (404,71);
+insert into t (id,a) values (404,72);
+insert into t (id,a) values (404,73);
+insert into t (id,a) values (404,74);
+insert into t (id,a) values (404,75);
+insert into t (id,a) values (404,76);
+insert into t (id,a) values (404,77);
+insert into t (id,a) values (404,78);
+insert into t (id,a) values (404,79);
+insert into t (id,a) values (404,80);
+insert into t (id,a) values (404,81);
+insert into t (id,a) values (404,82);
+insert into t (id,a) values (404,83);
+insert into t (id,a) values (404,84);
+insert into t (id,a) values (404,85);
+insert into t (id,a) values (404,86);
+insert into t (id,a) values (404,87);
+insert into t (id,a) values (404,88);
+insert into t (id,a) values (404,89);
+insert into t (id,a) values (404,90);
+insert into t (id,a) values (404,91);
+insert into t (id,a) values (404,92);
+insert into t (id,a) values (404,93);
+insert into t (id,a) values (404,94);
+insert into t (id,a) values (404,95);
+insert into t (id,a) values (404,96);
+insert into t (id,a) values (404,97);
+insert into t (id,a) values (404,98);
+insert into t (id,a) values (404,99);
+insert into t (id,a) values (405,0);
+insert into t (id,a) values (405,1);
+insert into t (id,a) values (405,2);
+insert into t (id,a) values (405,3);
+insert into t (id,a) values (405,4);
+insert into t (id,a) values (405,5);
+insert into t (id,a) values (405,6);
+insert into t (id,a) values (405,7);
+insert into t (id,a) values (405,8);
+insert into t (id,a) values (405,9);
+insert into t (id,a) values (405,10);
+insert into t (id,a) values (405,11);
+insert into t (id,a) values (405,12);
+insert into t (id,a) values (405,13);
+insert into t (id,a) values (405,14);
+insert into t (id,a) values (405,15);
+insert into t (id,a) values (405,16);
+insert into t (id,a) values (405,17);
+insert into t (id,a) values (405,18);
+insert into t (id,a) values (405,19);
+insert into t (id,a) values (405,20);
+insert into t (id,a) values (405,21);
+insert into t (id,a) values (405,22);
+insert into t (id,a) values (405,23);
+insert into t (id,a) values (405,24);
+insert into t (id,a) values (405,25);
+insert into t (id,a) values (405,26);
+insert into t (id,a) values (405,27);
+insert into t (id,a) values (405,28);
+insert into t (id,a) values (405,29);
+insert into t (id,a) values (405,30);
+insert into t (id,a) values (405,31);
+insert into t (id,a) values (405,32);
+insert into t (id,a) values (405,33);
+insert into t (id,a) values (405,34);
+insert into t (id,a) values (405,35);
+insert into t (id,a) values (405,36);
+insert into t (id,a) values (405,37);
+insert into t (id,a) values (405,38);
+insert into t (id,a) values (405,39);
+insert into t (id,a) values (405,40);
+insert into t (id,a) values (405,41);
+insert into t (id,a) values (405,42);
+insert into t (id,a) values (405,43);
+insert into t (id,a) values (405,44);
+insert into t (id,a) values (405,45);
+insert into t (id,a) values (405,46);
+insert into t (id,a) values (405,47);
+insert into t (id,a) values (405,48);
+insert into t (id,a) values (405,49);
+insert into t (id,a) values (405,50);
+insert into t (id,a) values (405,51);
+insert into t (id,a) values (405,52);
+insert into t (id,a) values (405,53);
+insert into t (id,a) values (405,54);
+insert into t (id,a) values (405,55);
+insert into t (id,a) values (405,56);
+insert into t (id,a) values (405,57);
+insert into t (id,a) values (405,58);
+insert into t (id,a) values (405,59);
+insert into t (id,a) values (405,60);
+insert into t (id,a) values (405,61);
+insert into t (id,a) values (405,62);
+insert into t (id,a) values (405,63);
+insert into t (id,a) values (405,64);
+insert into t (id,a) values (405,65);
+insert into t (id,a) values (405,66);
+insert into t (id,a) values (405,67);
+insert into t (id,a) values (405,68);
+insert into t (id,a) values (405,69);
+insert into t (id,a) values (405,70);
+insert into t (id,a) values (405,71);
+insert into t (id,a) values (405,72);
+insert into t (id,a) values (405,73);
+insert into t (id,a) values (405,74);
+insert into t (id,a) values (405,75);
+insert into t (id,a) values (405,76);
+insert into t (id,a) values (405,77);
+insert into t (id,a) values (405,78);
+insert into t (id,a) values (405,79);
+insert into t (id,a) values (405,80);
+insert into t (id,a) values (405,81);
+insert into t (id,a) values (405,82);
+insert into t (id,a) values (405,83);
+insert into t (id,a) values (405,84);
+insert into t (id,a) values (405,85);
+insert into t (id,a) values (405,86);
+insert into t (id,a) values (405,87);
+insert into t (id,a) values (405,88);
+insert into t (id,a) values (405,89);
+insert into t (id,a) values (405,90);
+insert into t (id,a) values (405,91);
+insert into t (id,a) values (405,92);
+insert into t (id,a) values (405,93);
+insert into t (id,a) values (405,94);
+insert into t (id,a) values (405,95);
+insert into t (id,a) values (405,96);
+insert into t (id,a) values (405,97);
+insert into t (id,a) values (405,98);
+insert into t (id,a) values (405,99);
+insert into t (id,a) values (406,0);
+insert into t (id,a) values (406,1);
+insert into t (id,a) values (406,2);
+insert into t (id,a) values (406,3);
+insert into t (id,a) values (406,4);
+insert into t (id,a) values (406,5);
+insert into t (id,a) values (406,6);
+insert into t (id,a) values (406,7);
+insert into t (id,a) values (406,8);
+insert into t (id,a) values (406,9);
+insert into t (id,a) values (406,10);
+insert into t (id,a) values (406,11);
+insert into t (id,a) values (406,12);
+insert into t (id,a) values (406,13);
+insert into t (id,a) values (406,14);
+insert into t (id,a) values (406,15);
+insert into t (id,a) values (406,16);
+insert into t (id,a) values (406,17);
+insert into t (id,a) values (406,18);
+insert into t (id,a) values (406,19);
+insert into t (id,a) values (406,20);
+insert into t (id,a) values (406,21);
+insert into t (id,a) values (406,22);
+insert into t (id,a) values (406,23);
+insert into t (id,a) values (406,24);
+insert into t (id,a) values (406,25);
+insert into t (id,a) values (406,26);
+insert into t (id,a) values (406,27);
+insert into t (id,a) values (406,28);
+insert into t (id,a) values (406,29);
+insert into t (id,a) values (406,30);
+insert into t (id,a) values (406,31);
+insert into t (id,a) values (406,32);
+insert into t (id,a) values (406,33);
+insert into t (id,a) values (406,34);
+insert into t (id,a) values (406,35);
+insert into t (id,a) values (406,36);
+insert into t (id,a) values (406,37);
+insert into t (id,a) values (406,38);
+insert into t (id,a) values (406,39);
+insert into t (id,a) values (406,40);
+insert into t (id,a) values (406,41);
+insert into t (id,a) values (406,42);
+insert into t (id,a) values (406,43);
+insert into t (id,a) values (406,44);
+insert into t (id,a) values (406,45);
+insert into t (id,a) values (406,46);
+insert into t (id,a) values (406,47);
+insert into t (id,a) values (406,48);
+insert into t (id,a) values (406,49);
+insert into t (id,a) values (406,50);
+insert into t (id,a) values (406,51);
+insert into t (id,a) values (406,52);
+insert into t (id,a) values (406,53);
+insert into t (id,a) values (406,54);
+insert into t (id,a) values (406,55);
+insert into t (id,a) values (406,56);
+insert into t (id,a) values (406,57);
+insert into t (id,a) values (406,58);
+insert into t (id,a) values (406,59);
+insert into t (id,a) values (406,60);
+insert into t (id,a) values (406,61);
+insert into t (id,a) values (406,62);
+insert into t (id,a) values (406,63);
+insert into t (id,a) values (406,64);
+insert into t (id,a) values (406,65);
+insert into t (id,a) values (406,66);
+insert into t (id,a) values (406,67);
+insert into t (id,a) values (406,68);
+insert into t (id,a) values (406,69);
+insert into t (id,a) values (406,70);
+insert into t (id,a) values (406,71);
+insert into t (id,a) values (406,72);
+insert into t (id,a) values (406,73);
+insert into t (id,a) values (406,74);
+insert into t (id,a) values (406,75);
+insert into t (id,a) values (406,76);
+insert into t (id,a) values (406,77);
+insert into t (id,a) values (406,78);
+insert into t (id,a) values (406,79);
+insert into t (id,a) values (406,80);
+insert into t (id,a) values (406,81);
+insert into t (id,a) values (406,82);
+insert into t (id,a) values (406,83);
+insert into t (id,a) values (406,84);
+insert into t (id,a) values (406,85);
+insert into t (id,a) values (406,86);
+insert into t (id,a) values (406,87);
+insert into t (id,a) values (406,88);
+insert into t (id,a) values (406,89);
+insert into t (id,a) values (406,90);
+insert into t (id,a) values (406,91);
+insert into t (id,a) values (406,92);
+insert into t (id,a) values (406,93);
+insert into t (id,a) values (406,94);
+insert into t (id,a) values (406,95);
+insert into t (id,a) values (406,96);
+insert into t (id,a) values (406,97);
+insert into t (id,a) values (406,98);
+insert into t (id,a) values (406,99);
+insert into t (id,a) values (407,0);
+insert into t (id,a) values (407,1);
+insert into t (id,a) values (407,2);
+insert into t (id,a) values (407,3);
+insert into t (id,a) values (407,4);
+insert into t (id,a) values (407,5);
+insert into t (id,a) values (407,6);
+insert into t (id,a) values (407,7);
+insert into t (id,a) values (407,8);
+insert into t (id,a) values (407,9);
+insert into t (id,a) values (407,10);
+insert into t (id,a) values (407,11);
+insert into t (id,a) values (407,12);
+insert into t (id,a) values (407,13);
+insert into t (id,a) values (407,14);
+insert into t (id,a) values (407,15);
+insert into t (id,a) values (407,16);
+insert into t (id,a) values (407,17);
+insert into t (id,a) values (407,18);
+insert into t (id,a) values (407,19);
+insert into t (id,a) values (407,20);
+insert into t (id,a) values (407,21);
+insert into t (id,a) values (407,22);
+insert into t (id,a) values (407,23);
+insert into t (id,a) values (407,24);
+insert into t (id,a) values (407,25);
+insert into t (id,a) values (407,26);
+insert into t (id,a) values (407,27);
+insert into t (id,a) values (407,28);
+insert into t (id,a) values (407,29);
+insert into t (id,a) values (407,30);
+insert into t (id,a) values (407,31);
+insert into t (id,a) values (407,32);
+insert into t (id,a) values (407,33);
+insert into t (id,a) values (407,34);
+insert into t (id,a) values (407,35);
+insert into t (id,a) values (407,36);
+insert into t (id,a) values (407,37);
+insert into t (id,a) values (407,38);
+insert into t (id,a) values (407,39);
+insert into t (id,a) values (407,40);
+insert into t (id,a) values (407,41);
+insert into t (id,a) values (407,42);
+insert into t (id,a) values (407,43);
+insert into t (id,a) values (407,44);
+insert into t (id,a) values (407,45);
+insert into t (id,a) values (407,46);
+insert into t (id,a) values (407,47);
+insert into t (id,a) values (407,48);
+insert into t (id,a) values (407,49);
+insert into t (id,a) values (407,50);
+insert into t (id,a) values (407,51);
+insert into t (id,a) values (407,52);
+insert into t (id,a) values (407,53);
+insert into t (id,a) values (407,54);
+insert into t (id,a) values (407,55);
+insert into t (id,a) values (407,56);
+insert into t (id,a) values (407,57);
+insert into t (id,a) values (407,58);
+insert into t (id,a) values (407,59);
+insert into t (id,a) values (407,60);
+insert into t (id,a) values (407,61);
+insert into t (id,a) values (407,62);
+insert into t (id,a) values (407,63);
+insert into t (id,a) values (407,64);
+insert into t (id,a) values (407,65);
+insert into t (id,a) values (407,66);
+insert into t (id,a) values (407,67);
+insert into t (id,a) values (407,68);
+insert into t (id,a) values (407,69);
+insert into t (id,a) values (407,70);
+insert into t (id,a) values (407,71);
+insert into t (id,a) values (407,72);
+insert into t (id,a) values (407,73);
+insert into t (id,a) values (407,74);
+insert into t (id,a) values (407,75);
+insert into t (id,a) values (407,76);
+insert into t (id,a) values (407,77);
+insert into t (id,a) values (407,78);
+insert into t (id,a) values (407,79);
+insert into t (id,a) values (407,80);
+insert into t (id,a) values (407,81);
+insert into t (id,a) values (407,82);
+insert into t (id,a) values (407,83);
+insert into t (id,a) values (407,84);
+insert into t (id,a) values (407,85);
+insert into t (id,a) values (407,86);
+insert into t (id,a) values (407,87);
+insert into t (id,a) values (407,88);
+insert into t (id,a) values (407,89);
+insert into t (id,a) values (407,90);
+insert into t (id,a) values (407,91);
+insert into t (id,a) values (407,92);
+insert into t (id,a) values (407,93);
+insert into t (id,a) values (407,94);
+insert into t (id,a) values (407,95);
+insert into t (id,a) values (407,96);
+insert into t (id,a) values (407,97);
+insert into t (id,a) values (407,98);
+insert into t (id,a) values (407,99);
+insert into t (id,a) values (408,0);
+insert into t (id,a) values (408,1);
+insert into t (id,a) values (408,2);
+insert into t (id,a) values (408,3);
+insert into t (id,a) values (408,4);
+insert into t (id,a) values (408,5);
+insert into t (id,a) values (408,6);
+insert into t (id,a) values (408,7);
+insert into t (id,a) values (408,8);
+insert into t (id,a) values (408,9);
+insert into t (id,a) values (408,10);
+insert into t (id,a) values (408,11);
+insert into t (id,a) values (408,12);
+insert into t (id,a) values (408,13);
+insert into t (id,a) values (408,14);
+insert into t (id,a) values (408,15);
+insert into t (id,a) values (408,16);
+insert into t (id,a) values (408,17);
+insert into t (id,a) values (408,18);
+insert into t (id,a) values (408,19);
+insert into t (id,a) values (408,20);
+insert into t (id,a) values (408,21);
+insert into t (id,a) values (408,22);
+insert into t (id,a) values (408,23);
+insert into t (id,a) values (408,24);
+insert into t (id,a) values (408,25);
+insert into t (id,a) values (408,26);
+insert into t (id,a) values (408,27);
+insert into t (id,a) values (408,28);
+insert into t (id,a) values (408,29);
+insert into t (id,a) values (408,30);
+insert into t (id,a) values (408,31);
+insert into t (id,a) values (408,32);
+insert into t (id,a) values (408,33);
+insert into t (id,a) values (408,34);
+insert into t (id,a) values (408,35);
+insert into t (id,a) values (408,36);
+insert into t (id,a) values (408,37);
+insert into t (id,a) values (408,38);
+insert into t (id,a) values (408,39);
+insert into t (id,a) values (408,40);
+insert into t (id,a) values (408,41);
+insert into t (id,a) values (408,42);
+insert into t (id,a) values (408,43);
+insert into t (id,a) values (408,44);
+insert into t (id,a) values (408,45);
+insert into t (id,a) values (408,46);
+insert into t (id,a) values (408,47);
+insert into t (id,a) values (408,48);
+insert into t (id,a) values (408,49);
+insert into t (id,a) values (408,50);
+insert into t (id,a) values (408,51);
+insert into t (id,a) values (408,52);
+insert into t (id,a) values (408,53);
+insert into t (id,a) values (408,54);
+insert into t (id,a) values (408,55);
+insert into t (id,a) values (408,56);
+insert into t (id,a) values (408,57);
+insert into t (id,a) values (408,58);
+insert into t (id,a) values (408,59);
+insert into t (id,a) values (408,60);
+insert into t (id,a) values (408,61);
+insert into t (id,a) values (408,62);
+insert into t (id,a) values (408,63);
+insert into t (id,a) values (408,64);
+insert into t (id,a) values (408,65);
+insert into t (id,a) values (408,66);
+insert into t (id,a) values (408,67);
+insert into t (id,a) values (408,68);
+insert into t (id,a) values (408,69);
+insert into t (id,a) values (408,70);
+insert into t (id,a) values (408,71);
+insert into t (id,a) values (408,72);
+insert into t (id,a) values (408,73);
+insert into t (id,a) values (408,74);
+insert into t (id,a) values (408,75);
+insert into t (id,a) values (408,76);
+insert into t (id,a) values (408,77);
+insert into t (id,a) values (408,78);
+insert into t (id,a) values (408,79);
+insert into t (id,a) values (408,80);
+insert into t (id,a) values (408,81);
+insert into t (id,a) values (408,82);
+insert into t (id,a) values (408,83);
+insert into t (id,a) values (408,84);
+insert into t (id,a) values (408,85);
+insert into t (id,a) values (408,86);
+insert into t (id,a) values (408,87);
+insert into t (id,a) values (408,88);
+insert into t (id,a) values (408,89);
+insert into t (id,a) values (408,90);
+insert into t (id,a) values (408,91);
+insert into t (id,a) values (408,92);
+insert into t (id,a) values (408,93);
+insert into t (id,a) values (408,94);
+insert into t (id,a) values (408,95);
+insert into t (id,a) values (408,96);
+insert into t (id,a) values (408,97);
+insert into t (id,a) values (408,98);
+insert into t (id,a) values (408,99);
+insert into t (id,a) values (409,0);
+insert into t (id,a) values (409,1);
+insert into t (id,a) values (409,2);
+insert into t (id,a) values (409,3);
+insert into t (id,a) values (409,4);
+insert into t (id,a) values (409,5);
+insert into t (id,a) values (409,6);
+insert into t (id,a) values (409,7);
+insert into t (id,a) values (409,8);
+insert into t (id,a) values (409,9);
+insert into t (id,a) values (409,10);
+insert into t (id,a) values (409,11);
+insert into t (id,a) values (409,12);
+insert into t (id,a) values (409,13);
+insert into t (id,a) values (409,14);
+insert into t (id,a) values (409,15);
+insert into t (id,a) values (409,16);
+insert into t (id,a) values (409,17);
+insert into t (id,a) values (409,18);
+insert into t (id,a) values (409,19);
+insert into t (id,a) values (409,20);
+insert into t (id,a) values (409,21);
+insert into t (id,a) values (409,22);
+insert into t (id,a) values (409,23);
+insert into t (id,a) values (409,24);
+insert into t (id,a) values (409,25);
+insert into t (id,a) values (409,26);
+insert into t (id,a) values (409,27);
+insert into t (id,a) values (409,28);
+insert into t (id,a) values (409,29);
+insert into t (id,a) values (409,30);
+insert into t (id,a) values (409,31);
+insert into t (id,a) values (409,32);
+insert into t (id,a) values (409,33);
+insert into t (id,a) values (409,34);
+insert into t (id,a) values (409,35);
+insert into t (id,a) values (409,36);
+insert into t (id,a) values (409,37);
+insert into t (id,a) values (409,38);
+insert into t (id,a) values (409,39);
+insert into t (id,a) values (409,40);
+insert into t (id,a) values (409,41);
+insert into t (id,a) values (409,42);
+insert into t (id,a) values (409,43);
+insert into t (id,a) values (409,44);
+insert into t (id,a) values (409,45);
+insert into t (id,a) values (409,46);
+insert into t (id,a) values (409,47);
+insert into t (id,a) values (409,48);
+insert into t (id,a) values (409,49);
+insert into t (id,a) values (409,50);
+insert into t (id,a) values (409,51);
+insert into t (id,a) values (409,52);
+insert into t (id,a) values (409,53);
+insert into t (id,a) values (409,54);
+insert into t (id,a) values (409,55);
+insert into t (id,a) values (409,56);
+insert into t (id,a) values (409,57);
+insert into t (id,a) values (409,58);
+insert into t (id,a) values (409,59);
+insert into t (id,a) values (409,60);
+insert into t (id,a) values (409,61);
+insert into t (id,a) values (409,62);
+insert into t (id,a) values (409,63);
+insert into t (id,a) values (409,64);
+insert into t (id,a) values (409,65);
+insert into t (id,a) values (409,66);
+insert into t (id,a) values (409,67);
+insert into t (id,a) values (409,68);
+insert into t (id,a) values (409,69);
+insert into t (id,a) values (409,70);
+insert into t (id,a) values (409,71);
+insert into t (id,a) values (409,72);
+insert into t (id,a) values (409,73);
+insert into t (id,a) values (409,74);
+insert into t (id,a) values (409,75);
+insert into t (id,a) values (409,76);
+insert into t (id,a) values (409,77);
+insert into t (id,a) values (409,78);
+insert into t (id,a) values (409,79);
+insert into t (id,a) values (409,80);
+insert into t (id,a) values (409,81);
+insert into t (id,a) values (409,82);
+insert into t (id,a) values (409,83);
+insert into t (id,a) values (409,84);
+insert into t (id,a) values (409,85);
+insert into t (id,a) values (409,86);
+insert into t (id,a) values (409,87);
+insert into t (id,a) values (409,88);
+insert into t (id,a) values (409,89);
+insert into t (id,a) values (409,90);
+insert into t (id,a) values (409,91);
+insert into t (id,a) values (409,92);
+insert into t (id,a) values (409,93);
+insert into t (id,a) values (409,94);
+insert into t (id,a) values (409,95);
+insert into t (id,a) values (409,96);
+insert into t (id,a) values (409,97);
+insert into t (id,a) values (409,98);
+insert into t (id,a) values (409,99);
+insert into t (id,a) values (410,0);
+insert into t (id,a) values (410,1);
+insert into t (id,a) values (410,2);
+insert into t (id,a) values (410,3);
+insert into t (id,a) values (410,4);
+insert into t (id,a) values (410,5);
+insert into t (id,a) values (410,6);
+insert into t (id,a) values (410,7);
+insert into t (id,a) values (410,8);
+insert into t (id,a) values (410,9);
+insert into t (id,a) values (410,10);
+insert into t (id,a) values (410,11);
+insert into t (id,a) values (410,12);
+insert into t (id,a) values (410,13);
+insert into t (id,a) values (410,14);
+insert into t (id,a) values (410,15);
+insert into t (id,a) values (410,16);
+insert into t (id,a) values (410,17);
+insert into t (id,a) values (410,18);
+insert into t (id,a) values (410,19);
+insert into t (id,a) values (410,20);
+insert into t (id,a) values (410,21);
+insert into t (id,a) values (410,22);
+insert into t (id,a) values (410,23);
+insert into t (id,a) values (410,24);
+insert into t (id,a) values (410,25);
+insert into t (id,a) values (410,26);
+insert into t (id,a) values (410,27);
+insert into t (id,a) values (410,28);
+insert into t (id,a) values (410,29);
+insert into t (id,a) values (410,30);
+insert into t (id,a) values (410,31);
+insert into t (id,a) values (410,32);
+insert into t (id,a) values (410,33);
+insert into t (id,a) values (410,34);
+insert into t (id,a) values (410,35);
+insert into t (id,a) values (410,36);
+insert into t (id,a) values (410,37);
+insert into t (id,a) values (410,38);
+insert into t (id,a) values (410,39);
+insert into t (id,a) values (410,40);
+insert into t (id,a) values (410,41);
+insert into t (id,a) values (410,42);
+insert into t (id,a) values (410,43);
+insert into t (id,a) values (410,44);
+insert into t (id,a) values (410,45);
+insert into t (id,a) values (410,46);
+insert into t (id,a) values (410,47);
+insert into t (id,a) values (410,48);
+insert into t (id,a) values (410,49);
+insert into t (id,a) values (410,50);
+insert into t (id,a) values (410,51);
+insert into t (id,a) values (410,52);
+insert into t (id,a) values (410,53);
+insert into t (id,a) values (410,54);
+insert into t (id,a) values (410,55);
+insert into t (id,a) values (410,56);
+insert into t (id,a) values (410,57);
+insert into t (id,a) values (410,58);
+insert into t (id,a) values (410,59);
+insert into t (id,a) values (410,60);
+insert into t (id,a) values (410,61);
+insert into t (id,a) values (410,62);
+insert into t (id,a) values (410,63);
+insert into t (id,a) values (410,64);
+insert into t (id,a) values (410,65);
+insert into t (id,a) values (410,66);
+insert into t (id,a) values (410,67);
+insert into t (id,a) values (410,68);
+insert into t (id,a) values (410,69);
+insert into t (id,a) values (410,70);
+insert into t (id,a) values (410,71);
+insert into t (id,a) values (410,72);
+insert into t (id,a) values (410,73);
+insert into t (id,a) values (410,74);
+insert into t (id,a) values (410,75);
+insert into t (id,a) values (410,76);
+insert into t (id,a) values (410,77);
+insert into t (id,a) values (410,78);
+insert into t (id,a) values (410,79);
+insert into t (id,a) values (410,80);
+insert into t (id,a) values (410,81);
+insert into t (id,a) values (410,82);
+insert into t (id,a) values (410,83);
+insert into t (id,a) values (410,84);
+insert into t (id,a) values (410,85);
+insert into t (id,a) values (410,86);
+insert into t (id,a) values (410,87);
+insert into t (id,a) values (410,88);
+insert into t (id,a) values (410,89);
+insert into t (id,a) values (410,90);
+insert into t (id,a) values (410,91);
+insert into t (id,a) values (410,92);
+insert into t (id,a) values (410,93);
+insert into t (id,a) values (410,94);
+insert into t (id,a) values (410,95);
+insert into t (id,a) values (410,96);
+insert into t (id,a) values (410,97);
+insert into t (id,a) values (410,98);
+insert into t (id,a) values (410,99);
+insert into t (id,a) values (411,0);
+insert into t (id,a) values (411,1);
+insert into t (id,a) values (411,2);
+insert into t (id,a) values (411,3);
+insert into t (id,a) values (411,4);
+insert into t (id,a) values (411,5);
+insert into t (id,a) values (411,6);
+insert into t (id,a) values (411,7);
+insert into t (id,a) values (411,8);
+insert into t (id,a) values (411,9);
+insert into t (id,a) values (411,10);
+insert into t (id,a) values (411,11);
+insert into t (id,a) values (411,12);
+insert into t (id,a) values (411,13);
+insert into t (id,a) values (411,14);
+insert into t (id,a) values (411,15);
+insert into t (id,a) values (411,16);
+insert into t (id,a) values (411,17);
+insert into t (id,a) values (411,18);
+insert into t (id,a) values (411,19);
+insert into t (id,a) values (411,20);
+insert into t (id,a) values (411,21);
+insert into t (id,a) values (411,22);
+insert into t (id,a) values (411,23);
+insert into t (id,a) values (411,24);
+insert into t (id,a) values (411,25);
+insert into t (id,a) values (411,26);
+insert into t (id,a) values (411,27);
+insert into t (id,a) values (411,28);
+insert into t (id,a) values (411,29);
+insert into t (id,a) values (411,30);
+insert into t (id,a) values (411,31);
+insert into t (id,a) values (411,32);
+insert into t (id,a) values (411,33);
+insert into t (id,a) values (411,34);
+insert into t (id,a) values (411,35);
+insert into t (id,a) values (411,36);
+insert into t (id,a) values (411,37);
+insert into t (id,a) values (411,38);
+insert into t (id,a) values (411,39);
+insert into t (id,a) values (411,40);
+insert into t (id,a) values (411,41);
+insert into t (id,a) values (411,42);
+insert into t (id,a) values (411,43);
+insert into t (id,a) values (411,44);
+insert into t (id,a) values (411,45);
+insert into t (id,a) values (411,46);
+insert into t (id,a) values (411,47);
+insert into t (id,a) values (411,48);
+insert into t (id,a) values (411,49);
+insert into t (id,a) values (411,50);
+insert into t (id,a) values (411,51);
+insert into t (id,a) values (411,52);
+insert into t (id,a) values (411,53);
+insert into t (id,a) values (411,54);
+insert into t (id,a) values (411,55);
+insert into t (id,a) values (411,56);
+insert into t (id,a) values (411,57);
+insert into t (id,a) values (411,58);
+insert into t (id,a) values (411,59);
+insert into t (id,a) values (411,60);
+insert into t (id,a) values (411,61);
+insert into t (id,a) values (411,62);
+insert into t (id,a) values (411,63);
+insert into t (id,a) values (411,64);
+insert into t (id,a) values (411,65);
+insert into t (id,a) values (411,66);
+insert into t (id,a) values (411,67);
+insert into t (id,a) values (411,68);
+insert into t (id,a) values (411,69);
+insert into t (id,a) values (411,70);
+insert into t (id,a) values (411,71);
+insert into t (id,a) values (411,72);
+insert into t (id,a) values (411,73);
+insert into t (id,a) values (411,74);
+insert into t (id,a) values (411,75);
+insert into t (id,a) values (411,76);
+insert into t (id,a) values (411,77);
+insert into t (id,a) values (411,78);
+insert into t (id,a) values (411,79);
+insert into t (id,a) values (411,80);
+insert into t (id,a) values (411,81);
+insert into t (id,a) values (411,82);
+insert into t (id,a) values (411,83);
+insert into t (id,a) values (411,84);
+insert into t (id,a) values (411,85);
+insert into t (id,a) values (411,86);
+insert into t (id,a) values (411,87);
+insert into t (id,a) values (411,88);
+insert into t (id,a) values (411,89);
+insert into t (id,a) values (411,90);
+insert into t (id,a) values (411,91);
+insert into t (id,a) values (411,92);
+insert into t (id,a) values (411,93);
+insert into t (id,a) values (411,94);
+insert into t (id,a) values (411,95);
+insert into t (id,a) values (411,96);
+insert into t (id,a) values (411,97);
+insert into t (id,a) values (411,98);
+insert into t (id,a) values (411,99);
+insert into t (id,a) values (412,0);
+insert into t (id,a) values (412,1);
+insert into t (id,a) values (412,2);
+insert into t (id,a) values (412,3);
+insert into t (id,a) values (412,4);
+insert into t (id,a) values (412,5);
+insert into t (id,a) values (412,6);
+insert into t (id,a) values (412,7);
+insert into t (id,a) values (412,8);
+insert into t (id,a) values (412,9);
+insert into t (id,a) values (412,10);
+insert into t (id,a) values (412,11);
+insert into t (id,a) values (412,12);
+insert into t (id,a) values (412,13);
+insert into t (id,a) values (412,14);
+insert into t (id,a) values (412,15);
+insert into t (id,a) values (412,16);
+insert into t (id,a) values (412,17);
+insert into t (id,a) values (412,18);
+insert into t (id,a) values (412,19);
+insert into t (id,a) values (412,20);
+insert into t (id,a) values (412,21);
+insert into t (id,a) values (412,22);
+insert into t (id,a) values (412,23);
+insert into t (id,a) values (412,24);
+insert into t (id,a) values (412,25);
+insert into t (id,a) values (412,26);
+insert into t (id,a) values (412,27);
+insert into t (id,a) values (412,28);
+insert into t (id,a) values (412,29);
+insert into t (id,a) values (412,30);
+insert into t (id,a) values (412,31);
+insert into t (id,a) values (412,32);
+insert into t (id,a) values (412,33);
+insert into t (id,a) values (412,34);
+insert into t (id,a) values (412,35);
+insert into t (id,a) values (412,36);
+insert into t (id,a) values (412,37);
+insert into t (id,a) values (412,38);
+insert into t (id,a) values (412,39);
+insert into t (id,a) values (412,40);
+insert into t (id,a) values (412,41);
+insert into t (id,a) values (412,42);
+insert into t (id,a) values (412,43);
+insert into t (id,a) values (412,44);
+insert into t (id,a) values (412,45);
+insert into t (id,a) values (412,46);
+insert into t (id,a) values (412,47);
+insert into t (id,a) values (412,48);
+insert into t (id,a) values (412,49);
+insert into t (id,a) values (412,50);
+insert into t (id,a) values (412,51);
+insert into t (id,a) values (412,52);
+insert into t (id,a) values (412,53);
+insert into t (id,a) values (412,54);
+insert into t (id,a) values (412,55);
+insert into t (id,a) values (412,56);
+insert into t (id,a) values (412,57);
+insert into t (id,a) values (412,58);
+insert into t (id,a) values (412,59);
+insert into t (id,a) values (412,60);
+insert into t (id,a) values (412,61);
+insert into t (id,a) values (412,62);
+insert into t (id,a) values (412,63);
+insert into t (id,a) values (412,64);
+insert into t (id,a) values (412,65);
+insert into t (id,a) values (412,66);
+insert into t (id,a) values (412,67);
+insert into t (id,a) values (412,68);
+insert into t (id,a) values (412,69);
+insert into t (id,a) values (412,70);
+insert into t (id,a) values (412,71);
+insert into t (id,a) values (412,72);
+insert into t (id,a) values (412,73);
+insert into t (id,a) values (412,74);
+insert into t (id,a) values (412,75);
+insert into t (id,a) values (412,76);
+insert into t (id,a) values (412,77);
+insert into t (id,a) values (412,78);
+insert into t (id,a) values (412,79);
+insert into t (id,a) values (412,80);
+insert into t (id,a) values (412,81);
+insert into t (id,a) values (412,82);
+insert into t (id,a) values (412,83);
+insert into t (id,a) values (412,84);
+insert into t (id,a) values (412,85);
+insert into t (id,a) values (412,86);
+insert into t (id,a) values (412,87);
+insert into t (id,a) values (412,88);
+insert into t (id,a) values (412,89);
+insert into t (id,a) values (412,90);
+insert into t (id,a) values (412,91);
+insert into t (id,a) values (412,92);
+insert into t (id,a) values (412,93);
+insert into t (id,a) values (412,94);
+insert into t (id,a) values (412,95);
+insert into t (id,a) values (412,96);
+insert into t (id,a) values (412,97);
+insert into t (id,a) values (412,98);
+insert into t (id,a) values (412,99);
+insert into t (id,a) values (413,0);
+insert into t (id,a) values (413,1);
+insert into t (id,a) values (413,2);
+insert into t (id,a) values (413,3);
+insert into t (id,a) values (413,4);
+insert into t (id,a) values (413,5);
+insert into t (id,a) values (413,6);
+insert into t (id,a) values (413,7);
+insert into t (id,a) values (413,8);
+insert into t (id,a) values (413,9);
+insert into t (id,a) values (413,10);
+insert into t (id,a) values (413,11);
+insert into t (id,a) values (413,12);
+insert into t (id,a) values (413,13);
+insert into t (id,a) values (413,14);
+insert into t (id,a) values (413,15);
+insert into t (id,a) values (413,16);
+insert into t (id,a) values (413,17);
+insert into t (id,a) values (413,18);
+insert into t (id,a) values (413,19);
+insert into t (id,a) values (413,20);
+insert into t (id,a) values (413,21);
+insert into t (id,a) values (413,22);
+insert into t (id,a) values (413,23);
+insert into t (id,a) values (413,24);
+insert into t (id,a) values (413,25);
+insert into t (id,a) values (413,26);
+insert into t (id,a) values (413,27);
+insert into t (id,a) values (413,28);
+insert into t (id,a) values (413,29);
+insert into t (id,a) values (413,30);
+insert into t (id,a) values (413,31);
+insert into t (id,a) values (413,32);
+insert into t (id,a) values (413,33);
+insert into t (id,a) values (413,34);
+insert into t (id,a) values (413,35);
+insert into t (id,a) values (413,36);
+insert into t (id,a) values (413,37);
+insert into t (id,a) values (413,38);
+insert into t (id,a) values (413,39);
+insert into t (id,a) values (413,40);
+insert into t (id,a) values (413,41);
+insert into t (id,a) values (413,42);
+insert into t (id,a) values (413,43);
+insert into t (id,a) values (413,44);
+insert into t (id,a) values (413,45);
+insert into t (id,a) values (413,46);
+insert into t (id,a) values (413,47);
+insert into t (id,a) values (413,48);
+insert into t (id,a) values (413,49);
+insert into t (id,a) values (413,50);
+insert into t (id,a) values (413,51);
+insert into t (id,a) values (413,52);
+insert into t (id,a) values (413,53);
+insert into t (id,a) values (413,54);
+insert into t (id,a) values (413,55);
+insert into t (id,a) values (413,56);
+insert into t (id,a) values (413,57);
+insert into t (id,a) values (413,58);
+insert into t (id,a) values (413,59);
+insert into t (id,a) values (413,60);
+insert into t (id,a) values (413,61);
+insert into t (id,a) values (413,62);
+insert into t (id,a) values (413,63);
+insert into t (id,a) values (413,64);
+insert into t (id,a) values (413,65);
+insert into t (id,a) values (413,66);
+insert into t (id,a) values (413,67);
+insert into t (id,a) values (413,68);
+insert into t (id,a) values (413,69);
+insert into t (id,a) values (413,70);
+insert into t (id,a) values (413,71);
+insert into t (id,a) values (413,72);
+insert into t (id,a) values (413,73);
+insert into t (id,a) values (413,74);
+insert into t (id,a) values (413,75);
+insert into t (id,a) values (413,76);
+insert into t (id,a) values (413,77);
+insert into t (id,a) values (413,78);
+insert into t (id,a) values (413,79);
+insert into t (id,a) values (413,80);
+insert into t (id,a) values (413,81);
+insert into t (id,a) values (413,82);
+insert into t (id,a) values (413,83);
+insert into t (id,a) values (413,84);
+insert into t (id,a) values (413,85);
+insert into t (id,a) values (413,86);
+insert into t (id,a) values (413,87);
+insert into t (id,a) values (413,88);
+insert into t (id,a) values (413,89);
+insert into t (id,a) values (413,90);
+insert into t (id,a) values (413,91);
+insert into t (id,a) values (413,92);
+insert into t (id,a) values (413,93);
+insert into t (id,a) values (413,94);
+insert into t (id,a) values (413,95);
+insert into t (id,a) values (413,96);
+insert into t (id,a) values (413,97);
+insert into t (id,a) values (413,98);
+insert into t (id,a) values (413,99);
+insert into t (id,a) values (414,0);
+insert into t (id,a) values (414,1);
+insert into t (id,a) values (414,2);
+insert into t (id,a) values (414,3);
+insert into t (id,a) values (414,4);
+insert into t (id,a) values (414,5);
+insert into t (id,a) values (414,6);
+insert into t (id,a) values (414,7);
+insert into t (id,a) values (414,8);
+insert into t (id,a) values (414,9);
+insert into t (id,a) values (414,10);
+insert into t (id,a) values (414,11);
+insert into t (id,a) values (414,12);
+insert into t (id,a) values (414,13);
+insert into t (id,a) values (414,14);
+insert into t (id,a) values (414,15);
+insert into t (id,a) values (414,16);
+insert into t (id,a) values (414,17);
+insert into t (id,a) values (414,18);
+insert into t (id,a) values (414,19);
+insert into t (id,a) values (414,20);
+insert into t (id,a) values (414,21);
+insert into t (id,a) values (414,22);
+insert into t (id,a) values (414,23);
+insert into t (id,a) values (414,24);
+insert into t (id,a) values (414,25);
+insert into t (id,a) values (414,26);
+insert into t (id,a) values (414,27);
+insert into t (id,a) values (414,28);
+insert into t (id,a) values (414,29);
+insert into t (id,a) values (414,30);
+insert into t (id,a) values (414,31);
+insert into t (id,a) values (414,32);
+insert into t (id,a) values (414,33);
+insert into t (id,a) values (414,34);
+insert into t (id,a) values (414,35);
+insert into t (id,a) values (414,36);
+insert into t (id,a) values (414,37);
+insert into t (id,a) values (414,38);
+insert into t (id,a) values (414,39);
+insert into t (id,a) values (414,40);
+insert into t (id,a) values (414,41);
+insert into t (id,a) values (414,42);
+insert into t (id,a) values (414,43);
+insert into t (id,a) values (414,44);
+insert into t (id,a) values (414,45);
+insert into t (id,a) values (414,46);
+insert into t (id,a) values (414,47);
+insert into t (id,a) values (414,48);
+insert into t (id,a) values (414,49);
+insert into t (id,a) values (414,50);
+insert into t (id,a) values (414,51);
+insert into t (id,a) values (414,52);
+insert into t (id,a) values (414,53);
+insert into t (id,a) values (414,54);
+insert into t (id,a) values (414,55);
+insert into t (id,a) values (414,56);
+insert into t (id,a) values (414,57);
+insert into t (id,a) values (414,58);
+insert into t (id,a) values (414,59);
+insert into t (id,a) values (414,60);
+insert into t (id,a) values (414,61);
+insert into t (id,a) values (414,62);
+insert into t (id,a) values (414,63);
+insert into t (id,a) values (414,64);
+insert into t (id,a) values (414,65);
+insert into t (id,a) values (414,66);
+insert into t (id,a) values (414,67);
+insert into t (id,a) values (414,68);
+insert into t (id,a) values (414,69);
+insert into t (id,a) values (414,70);
+insert into t (id,a) values (414,71);
+insert into t (id,a) values (414,72);
+insert into t (id,a) values (414,73);
+insert into t (id,a) values (414,74);
+insert into t (id,a) values (414,75);
+insert into t (id,a) values (414,76);
+insert into t (id,a) values (414,77);
+insert into t (id,a) values (414,78);
+insert into t (id,a) values (414,79);
+insert into t (id,a) values (414,80);
+insert into t (id,a) values (414,81);
+insert into t (id,a) values (414,82);
+insert into t (id,a) values (414,83);
+insert into t (id,a) values (414,84);
+insert into t (id,a) values (414,85);
+insert into t (id,a) values (414,86);
+insert into t (id,a) values (414,87);
+insert into t (id,a) values (414,88);
+insert into t (id,a) values (414,89);
+insert into t (id,a) values (414,90);
+insert into t (id,a) values (414,91);
+insert into t (id,a) values (414,92);
+insert into t (id,a) values (414,93);
+insert into t (id,a) values (414,94);
+insert into t (id,a) values (414,95);
+insert into t (id,a) values (414,96);
+insert into t (id,a) values (414,97);
+insert into t (id,a) values (414,98);
+insert into t (id,a) values (414,99);
+insert into t (id,a) values (415,0);
+insert into t (id,a) values (415,1);
+insert into t (id,a) values (415,2);
+insert into t (id,a) values (415,3);
+insert into t (id,a) values (415,4);
+insert into t (id,a) values (415,5);
+insert into t (id,a) values (415,6);
+insert into t (id,a) values (415,7);
+insert into t (id,a) values (415,8);
+insert into t (id,a) values (415,9);
+insert into t (id,a) values (415,10);
+insert into t (id,a) values (415,11);
+insert into t (id,a) values (415,12);
+insert into t (id,a) values (415,13);
+insert into t (id,a) values (415,14);
+insert into t (id,a) values (415,15);
+insert into t (id,a) values (415,16);
+insert into t (id,a) values (415,17);
+insert into t (id,a) values (415,18);
+insert into t (id,a) values (415,19);
+insert into t (id,a) values (415,20);
+insert into t (id,a) values (415,21);
+insert into t (id,a) values (415,22);
+insert into t (id,a) values (415,23);
+insert into t (id,a) values (415,24);
+insert into t (id,a) values (415,25);
+insert into t (id,a) values (415,26);
+insert into t (id,a) values (415,27);
+insert into t (id,a) values (415,28);
+insert into t (id,a) values (415,29);
+insert into t (id,a) values (415,30);
+insert into t (id,a) values (415,31);
+insert into t (id,a) values (415,32);
+insert into t (id,a) values (415,33);
+insert into t (id,a) values (415,34);
+insert into t (id,a) values (415,35);
+insert into t (id,a) values (415,36);
+insert into t (id,a) values (415,37);
+insert into t (id,a) values (415,38);
+insert into t (id,a) values (415,39);
+insert into t (id,a) values (415,40);
+insert into t (id,a) values (415,41);
+insert into t (id,a) values (415,42);
+insert into t (id,a) values (415,43);
+insert into t (id,a) values (415,44);
+insert into t (id,a) values (415,45);
+insert into t (id,a) values (415,46);
+insert into t (id,a) values (415,47);
+insert into t (id,a) values (415,48);
+insert into t (id,a) values (415,49);
+insert into t (id,a) values (415,50);
+insert into t (id,a) values (415,51);
+insert into t (id,a) values (415,52);
+insert into t (id,a) values (415,53);
+insert into t (id,a) values (415,54);
+insert into t (id,a) values (415,55);
+insert into t (id,a) values (415,56);
+insert into t (id,a) values (415,57);
+insert into t (id,a) values (415,58);
+insert into t (id,a) values (415,59);
+insert into t (id,a) values (415,60);
+insert into t (id,a) values (415,61);
+insert into t (id,a) values (415,62);
+insert into t (id,a) values (415,63);
+insert into t (id,a) values (415,64);
+insert into t (id,a) values (415,65);
+insert into t (id,a) values (415,66);
+insert into t (id,a) values (415,67);
+insert into t (id,a) values (415,68);
+insert into t (id,a) values (415,69);
+insert into t (id,a) values (415,70);
+insert into t (id,a) values (415,71);
+insert into t (id,a) values (415,72);
+insert into t (id,a) values (415,73);
+insert into t (id,a) values (415,74);
+insert into t (id,a) values (415,75);
+insert into t (id,a) values (415,76);
+insert into t (id,a) values (415,77);
+insert into t (id,a) values (415,78);
+insert into t (id,a) values (415,79);
+insert into t (id,a) values (415,80);
+insert into t (id,a) values (415,81);
+insert into t (id,a) values (415,82);
+insert into t (id,a) values (415,83);
+insert into t (id,a) values (415,84);
+insert into t (id,a) values (415,85);
+insert into t (id,a) values (415,86);
+insert into t (id,a) values (415,87);
+insert into t (id,a) values (415,88);
+insert into t (id,a) values (415,89);
+insert into t (id,a) values (415,90);
+insert into t (id,a) values (415,91);
+insert into t (id,a) values (415,92);
+insert into t (id,a) values (415,93);
+insert into t (id,a) values (415,94);
+insert into t (id,a) values (415,95);
+insert into t (id,a) values (415,96);
+insert into t (id,a) values (415,97);
+insert into t (id,a) values (415,98);
+insert into t (id,a) values (415,99);
+insert into t (id,a) values (416,0);
+insert into t (id,a) values (416,1);
+insert into t (id,a) values (416,2);
+insert into t (id,a) values (416,3);
+insert into t (id,a) values (416,4);
+insert into t (id,a) values (416,5);
+insert into t (id,a) values (416,6);
+insert into t (id,a) values (416,7);
+insert into t (id,a) values (416,8);
+insert into t (id,a) values (416,9);
+insert into t (id,a) values (416,10);
+insert into t (id,a) values (416,11);
+insert into t (id,a) values (416,12);
+insert into t (id,a) values (416,13);
+insert into t (id,a) values (416,14);
+insert into t (id,a) values (416,15);
+insert into t (id,a) values (416,16);
+insert into t (id,a) values (416,17);
+insert into t (id,a) values (416,18);
+insert into t (id,a) values (416,19);
+insert into t (id,a) values (416,20);
+insert into t (id,a) values (416,21);
+insert into t (id,a) values (416,22);
+insert into t (id,a) values (416,23);
+insert into t (id,a) values (416,24);
+insert into t (id,a) values (416,25);
+insert into t (id,a) values (416,26);
+insert into t (id,a) values (416,27);
+insert into t (id,a) values (416,28);
+insert into t (id,a) values (416,29);
+insert into t (id,a) values (416,30);
+insert into t (id,a) values (416,31);
+insert into t (id,a) values (416,32);
+insert into t (id,a) values (416,33);
+insert into t (id,a) values (416,34);
+insert into t (id,a) values (416,35);
+insert into t (id,a) values (416,36);
+insert into t (id,a) values (416,37);
+insert into t (id,a) values (416,38);
+insert into t (id,a) values (416,39);
+insert into t (id,a) values (416,40);
+insert into t (id,a) values (416,41);
+insert into t (id,a) values (416,42);
+insert into t (id,a) values (416,43);
+insert into t (id,a) values (416,44);
+insert into t (id,a) values (416,45);
+insert into t (id,a) values (416,46);
+insert into t (id,a) values (416,47);
+insert into t (id,a) values (416,48);
+insert into t (id,a) values (416,49);
+insert into t (id,a) values (416,50);
+insert into t (id,a) values (416,51);
+insert into t (id,a) values (416,52);
+insert into t (id,a) values (416,53);
+insert into t (id,a) values (416,54);
+insert into t (id,a) values (416,55);
+insert into t (id,a) values (416,56);
+insert into t (id,a) values (416,57);
+insert into t (id,a) values (416,58);
+insert into t (id,a) values (416,59);
+insert into t (id,a) values (416,60);
+insert into t (id,a) values (416,61);
+insert into t (id,a) values (416,62);
+insert into t (id,a) values (416,63);
+insert into t (id,a) values (416,64);
+insert into t (id,a) values (416,65);
+insert into t (id,a) values (416,66);
+insert into t (id,a) values (416,67);
+insert into t (id,a) values (416,68);
+insert into t (id,a) values (416,69);
+insert into t (id,a) values (416,70);
+insert into t (id,a) values (416,71);
+insert into t (id,a) values (416,72);
+insert into t (id,a) values (416,73);
+insert into t (id,a) values (416,74);
+insert into t (id,a) values (416,75);
+insert into t (id,a) values (416,76);
+insert into t (id,a) values (416,77);
+insert into t (id,a) values (416,78);
+insert into t (id,a) values (416,79);
+insert into t (id,a) values (416,80);
+insert into t (id,a) values (416,81);
+insert into t (id,a) values (416,82);
+insert into t (id,a) values (416,83);
+insert into t (id,a) values (416,84);
+insert into t (id,a) values (416,85);
+insert into t (id,a) values (416,86);
+insert into t (id,a) values (416,87);
+insert into t (id,a) values (416,88);
+insert into t (id,a) values (416,89);
+insert into t (id,a) values (416,90);
+insert into t (id,a) values (416,91);
+insert into t (id,a) values (416,92);
+insert into t (id,a) values (416,93);
+insert into t (id,a) values (416,94);
+insert into t (id,a) values (416,95);
+insert into t (id,a) values (416,96);
+insert into t (id,a) values (416,97);
+insert into t (id,a) values (416,98);
+insert into t (id,a) values (416,99);
+insert into t (id,a) values (417,0);
+insert into t (id,a) values (417,1);
+insert into t (id,a) values (417,2);
+insert into t (id,a) values (417,3);
+insert into t (id,a) values (417,4);
+insert into t (id,a) values (417,5);
+insert into t (id,a) values (417,6);
+insert into t (id,a) values (417,7);
+insert into t (id,a) values (417,8);
+insert into t (id,a) values (417,9);
+insert into t (id,a) values (417,10);
+insert into t (id,a) values (417,11);
+insert into t (id,a) values (417,12);
+insert into t (id,a) values (417,13);
+insert into t (id,a) values (417,14);
+insert into t (id,a) values (417,15);
+insert into t (id,a) values (417,16);
+insert into t (id,a) values (417,17);
+insert into t (id,a) values (417,18);
+insert into t (id,a) values (417,19);
+insert into t (id,a) values (417,20);
+insert into t (id,a) values (417,21);
+insert into t (id,a) values (417,22);
+insert into t (id,a) values (417,23);
+insert into t (id,a) values (417,24);
+insert into t (id,a) values (417,25);
+insert into t (id,a) values (417,26);
+insert into t (id,a) values (417,27);
+insert into t (id,a) values (417,28);
+insert into t (id,a) values (417,29);
+insert into t (id,a) values (417,30);
+insert into t (id,a) values (417,31);
+insert into t (id,a) values (417,32);
+insert into t (id,a) values (417,33);
+insert into t (id,a) values (417,34);
+insert into t (id,a) values (417,35);
+insert into t (id,a) values (417,36);
+insert into t (id,a) values (417,37);
+insert into t (id,a) values (417,38);
+insert into t (id,a) values (417,39);
+insert into t (id,a) values (417,40);
+insert into t (id,a) values (417,41);
+insert into t (id,a) values (417,42);
+insert into t (id,a) values (417,43);
+insert into t (id,a) values (417,44);
+insert into t (id,a) values (417,45);
+insert into t (id,a) values (417,46);
+insert into t (id,a) values (417,47);
+insert into t (id,a) values (417,48);
+insert into t (id,a) values (417,49);
+insert into t (id,a) values (417,50);
+insert into t (id,a) values (417,51);
+insert into t (id,a) values (417,52);
+insert into t (id,a) values (417,53);
+insert into t (id,a) values (417,54);
+insert into t (id,a) values (417,55);
+insert into t (id,a) values (417,56);
+insert into t (id,a) values (417,57);
+insert into t (id,a) values (417,58);
+insert into t (id,a) values (417,59);
+insert into t (id,a) values (417,60);
+insert into t (id,a) values (417,61);
+insert into t (id,a) values (417,62);
+insert into t (id,a) values (417,63);
+insert into t (id,a) values (417,64);
+insert into t (id,a) values (417,65);
+insert into t (id,a) values (417,66);
+insert into t (id,a) values (417,67);
+insert into t (id,a) values (417,68);
+insert into t (id,a) values (417,69);
+insert into t (id,a) values (417,70);
+insert into t (id,a) values (417,71);
+insert into t (id,a) values (417,72);
+insert into t (id,a) values (417,73);
+insert into t (id,a) values (417,74);
+insert into t (id,a) values (417,75);
+insert into t (id,a) values (417,76);
+insert into t (id,a) values (417,77);
+insert into t (id,a) values (417,78);
+insert into t (id,a) values (417,79);
+insert into t (id,a) values (417,80);
+insert into t (id,a) values (417,81);
+insert into t (id,a) values (417,82);
+insert into t (id,a) values (417,83);
+insert into t (id,a) values (417,84);
+insert into t (id,a) values (417,85);
+insert into t (id,a) values (417,86);
+insert into t (id,a) values (417,87);
+insert into t (id,a) values (417,88);
+insert into t (id,a) values (417,89);
+insert into t (id,a) values (417,90);
+insert into t (id,a) values (417,91);
+insert into t (id,a) values (417,92);
+insert into t (id,a) values (417,93);
+insert into t (id,a) values (417,94);
+insert into t (id,a) values (417,95);
+insert into t (id,a) values (417,96);
+insert into t (id,a) values (417,97);
+insert into t (id,a) values (417,98);
+insert into t (id,a) values (417,99);
+insert into t (id,a) values (418,0);
+insert into t (id,a) values (418,1);
+insert into t (id,a) values (418,2);
+insert into t (id,a) values (418,3);
+insert into t (id,a) values (418,4);
+insert into t (id,a) values (418,5);
+insert into t (id,a) values (418,6);
+insert into t (id,a) values (418,7);
+insert into t (id,a) values (418,8);
+insert into t (id,a) values (418,9);
+insert into t (id,a) values (418,10);
+insert into t (id,a) values (418,11);
+insert into t (id,a) values (418,12);
+insert into t (id,a) values (418,13);
+insert into t (id,a) values (418,14);
+insert into t (id,a) values (418,15);
+insert into t (id,a) values (418,16);
+insert into t (id,a) values (418,17);
+insert into t (id,a) values (418,18);
+insert into t (id,a) values (418,19);
+insert into t (id,a) values (418,20);
+insert into t (id,a) values (418,21);
+insert into t (id,a) values (418,22);
+insert into t (id,a) values (418,23);
+insert into t (id,a) values (418,24);
+insert into t (id,a) values (418,25);
+insert into t (id,a) values (418,26);
+insert into t (id,a) values (418,27);
+insert into t (id,a) values (418,28);
+insert into t (id,a) values (418,29);
+insert into t (id,a) values (418,30);
+insert into t (id,a) values (418,31);
+insert into t (id,a) values (418,32);
+insert into t (id,a) values (418,33);
+insert into t (id,a) values (418,34);
+insert into t (id,a) values (418,35);
+insert into t (id,a) values (418,36);
+insert into t (id,a) values (418,37);
+insert into t (id,a) values (418,38);
+insert into t (id,a) values (418,39);
+insert into t (id,a) values (418,40);
+insert into t (id,a) values (418,41);
+insert into t (id,a) values (418,42);
+insert into t (id,a) values (418,43);
+insert into t (id,a) values (418,44);
+insert into t (id,a) values (418,45);
+insert into t (id,a) values (418,46);
+insert into t (id,a) values (418,47);
+insert into t (id,a) values (418,48);
+insert into t (id,a) values (418,49);
+insert into t (id,a) values (418,50);
+insert into t (id,a) values (418,51);
+insert into t (id,a) values (418,52);
+insert into t (id,a) values (418,53);
+insert into t (id,a) values (418,54);
+insert into t (id,a) values (418,55);
+insert into t (id,a) values (418,56);
+insert into t (id,a) values (418,57);
+insert into t (id,a) values (418,58);
+insert into t (id,a) values (418,59);
+insert into t (id,a) values (418,60);
+insert into t (id,a) values (418,61);
+insert into t (id,a) values (418,62);
+insert into t (id,a) values (418,63);
+insert into t (id,a) values (418,64);
+insert into t (id,a) values (418,65);
+insert into t (id,a) values (418,66);
+insert into t (id,a) values (418,67);
+insert into t (id,a) values (418,68);
+insert into t (id,a) values (418,69);
+insert into t (id,a) values (418,70);
+insert into t (id,a) values (418,71);
+insert into t (id,a) values (418,72);
+insert into t (id,a) values (418,73);
+insert into t (id,a) values (418,74);
+insert into t (id,a) values (418,75);
+insert into t (id,a) values (418,76);
+insert into t (id,a) values (418,77);
+insert into t (id,a) values (418,78);
+insert into t (id,a) values (418,79);
+insert into t (id,a) values (418,80);
+insert into t (id,a) values (418,81);
+insert into t (id,a) values (418,82);
+insert into t (id,a) values (418,83);
+insert into t (id,a) values (418,84);
+insert into t (id,a) values (418,85);
+insert into t (id,a) values (418,86);
+insert into t (id,a) values (418,87);
+insert into t (id,a) values (418,88);
+insert into t (id,a) values (418,89);
+insert into t (id,a) values (418,90);
+insert into t (id,a) values (418,91);
+insert into t (id,a) values (418,92);
+insert into t (id,a) values (418,93);
+insert into t (id,a) values (418,94);
+insert into t (id,a) values (418,95);
+insert into t (id,a) values (418,96);
+insert into t (id,a) values (418,97);
+insert into t (id,a) values (418,98);
+insert into t (id,a) values (418,99);
+insert into t (id,a) values (419,0);
+insert into t (id,a) values (419,1);
+insert into t (id,a) values (419,2);
+insert into t (id,a) values (419,3);
+insert into t (id,a) values (419,4);
+insert into t (id,a) values (419,5);
+insert into t (id,a) values (419,6);
+insert into t (id,a) values (419,7);
+insert into t (id,a) values (419,8);
+insert into t (id,a) values (419,9);
+insert into t (id,a) values (419,10);
+insert into t (id,a) values (419,11);
+insert into t (id,a) values (419,12);
+insert into t (id,a) values (419,13);
+insert into t (id,a) values (419,14);
+insert into t (id,a) values (419,15);
+insert into t (id,a) values (419,16);
+insert into t (id,a) values (419,17);
+insert into t (id,a) values (419,18);
+insert into t (id,a) values (419,19);
+insert into t (id,a) values (419,20);
+insert into t (id,a) values (419,21);
+insert into t (id,a) values (419,22);
+insert into t (id,a) values (419,23);
+insert into t (id,a) values (419,24);
+insert into t (id,a) values (419,25);
+insert into t (id,a) values (419,26);
+insert into t (id,a) values (419,27);
+insert into t (id,a) values (419,28);
+insert into t (id,a) values (419,29);
+insert into t (id,a) values (419,30);
+insert into t (id,a) values (419,31);
+insert into t (id,a) values (419,32);
+insert into t (id,a) values (419,33);
+insert into t (id,a) values (419,34);
+insert into t (id,a) values (419,35);
+insert into t (id,a) values (419,36);
+insert into t (id,a) values (419,37);
+insert into t (id,a) values (419,38);
+insert into t (id,a) values (419,39);
+insert into t (id,a) values (419,40);
+insert into t (id,a) values (419,41);
+insert into t (id,a) values (419,42);
+insert into t (id,a) values (419,43);
+insert into t (id,a) values (419,44);
+insert into t (id,a) values (419,45);
+insert into t (id,a) values (419,46);
+insert into t (id,a) values (419,47);
+insert into t (id,a) values (419,48);
+insert into t (id,a) values (419,49);
+insert into t (id,a) values (419,50);
+insert into t (id,a) values (419,51);
+insert into t (id,a) values (419,52);
+insert into t (id,a) values (419,53);
+insert into t (id,a) values (419,54);
+insert into t (id,a) values (419,55);
+insert into t (id,a) values (419,56);
+insert into t (id,a) values (419,57);
+insert into t (id,a) values (419,58);
+insert into t (id,a) values (419,59);
+insert into t (id,a) values (419,60);
+insert into t (id,a) values (419,61);
+insert into t (id,a) values (419,62);
+insert into t (id,a) values (419,63);
+insert into t (id,a) values (419,64);
+insert into t (id,a) values (419,65);
+insert into t (id,a) values (419,66);
+insert into t (id,a) values (419,67);
+insert into t (id,a) values (419,68);
+insert into t (id,a) values (419,69);
+insert into t (id,a) values (419,70);
+insert into t (id,a) values (419,71);
+insert into t (id,a) values (419,72);
+insert into t (id,a) values (419,73);
+insert into t (id,a) values (419,74);
+insert into t (id,a) values (419,75);
+insert into t (id,a) values (419,76);
+insert into t (id,a) values (419,77);
+insert into t (id,a) values (419,78);
+insert into t (id,a) values (419,79);
+insert into t (id,a) values (419,80);
+insert into t (id,a) values (419,81);
+insert into t (id,a) values (419,82);
+insert into t (id,a) values (419,83);
+insert into t (id,a) values (419,84);
+insert into t (id,a) values (419,85);
+insert into t (id,a) values (419,86);
+insert into t (id,a) values (419,87);
+insert into t (id,a) values (419,88);
+insert into t (id,a) values (419,89);
+insert into t (id,a) values (419,90);
+insert into t (id,a) values (419,91);
+insert into t (id,a) values (419,92);
+insert into t (id,a) values (419,93);
+insert into t (id,a) values (419,94);
+insert into t (id,a) values (419,95);
+insert into t (id,a) values (419,96);
+insert into t (id,a) values (419,97);
+insert into t (id,a) values (419,98);
+insert into t (id,a) values (419,99);
+insert into t (id,a) values (420,0);
+insert into t (id,a) values (420,1);
+insert into t (id,a) values (420,2);
+insert into t (id,a) values (420,3);
+insert into t (id,a) values (420,4);
+insert into t (id,a) values (420,5);
+insert into t (id,a) values (420,6);
+insert into t (id,a) values (420,7);
+insert into t (id,a) values (420,8);
+insert into t (id,a) values (420,9);
+insert into t (id,a) values (420,10);
+insert into t (id,a) values (420,11);
+insert into t (id,a) values (420,12);
+insert into t (id,a) values (420,13);
+insert into t (id,a) values (420,14);
+insert into t (id,a) values (420,15);
+insert into t (id,a) values (420,16);
+insert into t (id,a) values (420,17);
+insert into t (id,a) values (420,18);
+insert into t (id,a) values (420,19);
+insert into t (id,a) values (420,20);
+insert into t (id,a) values (420,21);
+insert into t (id,a) values (420,22);
+insert into t (id,a) values (420,23);
+insert into t (id,a) values (420,24);
+insert into t (id,a) values (420,25);
+insert into t (id,a) values (420,26);
+insert into t (id,a) values (420,27);
+insert into t (id,a) values (420,28);
+insert into t (id,a) values (420,29);
+insert into t (id,a) values (420,30);
+insert into t (id,a) values (420,31);
+insert into t (id,a) values (420,32);
+insert into t (id,a) values (420,33);
+insert into t (id,a) values (420,34);
+insert into t (id,a) values (420,35);
+insert into t (id,a) values (420,36);
+insert into t (id,a) values (420,37);
+insert into t (id,a) values (420,38);
+insert into t (id,a) values (420,39);
+insert into t (id,a) values (420,40);
+insert into t (id,a) values (420,41);
+insert into t (id,a) values (420,42);
+insert into t (id,a) values (420,43);
+insert into t (id,a) values (420,44);
+insert into t (id,a) values (420,45);
+insert into t (id,a) values (420,46);
+insert into t (id,a) values (420,47);
+insert into t (id,a) values (420,48);
+insert into t (id,a) values (420,49);
+insert into t (id,a) values (420,50);
+insert into t (id,a) values (420,51);
+insert into t (id,a) values (420,52);
+insert into t (id,a) values (420,53);
+insert into t (id,a) values (420,54);
+insert into t (id,a) values (420,55);
+insert into t (id,a) values (420,56);
+insert into t (id,a) values (420,57);
+insert into t (id,a) values (420,58);
+insert into t (id,a) values (420,59);
+insert into t (id,a) values (420,60);
+insert into t (id,a) values (420,61);
+insert into t (id,a) values (420,62);
+insert into t (id,a) values (420,63);
+insert into t (id,a) values (420,64);
+insert into t (id,a) values (420,65);
+insert into t (id,a) values (420,66);
+insert into t (id,a) values (420,67);
+insert into t (id,a) values (420,68);
+insert into t (id,a) values (420,69);
+insert into t (id,a) values (420,70);
+insert into t (id,a) values (420,71);
+insert into t (id,a) values (420,72);
+insert into t (id,a) values (420,73);
+insert into t (id,a) values (420,74);
+insert into t (id,a) values (420,75);
+insert into t (id,a) values (420,76);
+insert into t (id,a) values (420,77);
+insert into t (id,a) values (420,78);
+insert into t (id,a) values (420,79);
+insert into t (id,a) values (420,80);
+insert into t (id,a) values (420,81);
+insert into t (id,a) values (420,82);
+insert into t (id,a) values (420,83);
+insert into t (id,a) values (420,84);
+insert into t (id,a) values (420,85);
+insert into t (id,a) values (420,86);
+insert into t (id,a) values (420,87);
+insert into t (id,a) values (420,88);
+insert into t (id,a) values (420,89);
+insert into t (id,a) values (420,90);
+insert into t (id,a) values (420,91);
+insert into t (id,a) values (420,92);
+insert into t (id,a) values (420,93);
+insert into t (id,a) values (420,94);
+insert into t (id,a) values (420,95);
+insert into t (id,a) values (420,96);
+insert into t (id,a) values (420,97);
+insert into t (id,a) values (420,98);
+insert into t (id,a) values (420,99);
+insert into t (id,a) values (421,0);
+insert into t (id,a) values (421,1);
+insert into t (id,a) values (421,2);
+insert into t (id,a) values (421,3);
+insert into t (id,a) values (421,4);
+insert into t (id,a) values (421,5);
+insert into t (id,a) values (421,6);
+insert into t (id,a) values (421,7);
+insert into t (id,a) values (421,8);
+insert into t (id,a) values (421,9);
+insert into t (id,a) values (421,10);
+insert into t (id,a) values (421,11);
+insert into t (id,a) values (421,12);
+insert into t (id,a) values (421,13);
+insert into t (id,a) values (421,14);
+insert into t (id,a) values (421,15);
+insert into t (id,a) values (421,16);
+insert into t (id,a) values (421,17);
+insert into t (id,a) values (421,18);
+insert into t (id,a) values (421,19);
+insert into t (id,a) values (421,20);
+insert into t (id,a) values (421,21);
+insert into t (id,a) values (421,22);
+insert into t (id,a) values (421,23);
+insert into t (id,a) values (421,24);
+insert into t (id,a) values (421,25);
+insert into t (id,a) values (421,26);
+insert into t (id,a) values (421,27);
+insert into t (id,a) values (421,28);
+insert into t (id,a) values (421,29);
+insert into t (id,a) values (421,30);
+insert into t (id,a) values (421,31);
+insert into t (id,a) values (421,32);
+insert into t (id,a) values (421,33);
+insert into t (id,a) values (421,34);
+insert into t (id,a) values (421,35);
+insert into t (id,a) values (421,36);
+insert into t (id,a) values (421,37);
+insert into t (id,a) values (421,38);
+insert into t (id,a) values (421,39);
+insert into t (id,a) values (421,40);
+insert into t (id,a) values (421,41);
+insert into t (id,a) values (421,42);
+insert into t (id,a) values (421,43);
+insert into t (id,a) values (421,44);
+insert into t (id,a) values (421,45);
+insert into t (id,a) values (421,46);
+insert into t (id,a) values (421,47);
+insert into t (id,a) values (421,48);
+insert into t (id,a) values (421,49);
+insert into t (id,a) values (421,50);
+insert into t (id,a) values (421,51);
+insert into t (id,a) values (421,52);
+insert into t (id,a) values (421,53);
+insert into t (id,a) values (421,54);
+insert into t (id,a) values (421,55);
+insert into t (id,a) values (421,56);
+insert into t (id,a) values (421,57);
+insert into t (id,a) values (421,58);
+insert into t (id,a) values (421,59);
+insert into t (id,a) values (421,60);
+insert into t (id,a) values (421,61);
+insert into t (id,a) values (421,62);
+insert into t (id,a) values (421,63);
+insert into t (id,a) values (421,64);
+insert into t (id,a) values (421,65);
+insert into t (id,a) values (421,66);
+insert into t (id,a) values (421,67);
+insert into t (id,a) values (421,68);
+insert into t (id,a) values (421,69);
+insert into t (id,a) values (421,70);
+insert into t (id,a) values (421,71);
+insert into t (id,a) values (421,72);
+insert into t (id,a) values (421,73);
+insert into t (id,a) values (421,74);
+insert into t (id,a) values (421,75);
+insert into t (id,a) values (421,76);
+insert into t (id,a) values (421,77);
+insert into t (id,a) values (421,78);
+insert into t (id,a) values (421,79);
+insert into t (id,a) values (421,80);
+insert into t (id,a) values (421,81);
+insert into t (id,a) values (421,82);
+insert into t (id,a) values (421,83);
+insert into t (id,a) values (421,84);
+insert into t (id,a) values (421,85);
+insert into t (id,a) values (421,86);
+insert into t (id,a) values (421,87);
+insert into t (id,a) values (421,88);
+insert into t (id,a) values (421,89);
+insert into t (id,a) values (421,90);
+insert into t (id,a) values (421,91);
+insert into t (id,a) values (421,92);
+insert into t (id,a) values (421,93);
+insert into t (id,a) values (421,94);
+insert into t (id,a) values (421,95);
+insert into t (id,a) values (421,96);
+insert into t (id,a) values (421,97);
+insert into t (id,a) values (421,98);
+insert into t (id,a) values (421,99);
+insert into t (id,a) values (422,0);
+insert into t (id,a) values (422,1);
+insert into t (id,a) values (422,2);
+insert into t (id,a) values (422,3);
+insert into t (id,a) values (422,4);
+insert into t (id,a) values (422,5);
+insert into t (id,a) values (422,6);
+insert into t (id,a) values (422,7);
+insert into t (id,a) values (422,8);
+insert into t (id,a) values (422,9);
+insert into t (id,a) values (422,10);
+insert into t (id,a) values (422,11);
+insert into t (id,a) values (422,12);
+insert into t (id,a) values (422,13);
+insert into t (id,a) values (422,14);
+insert into t (id,a) values (422,15);
+insert into t (id,a) values (422,16);
+insert into t (id,a) values (422,17);
+insert into t (id,a) values (422,18);
+insert into t (id,a) values (422,19);
+insert into t (id,a) values (422,20);
+insert into t (id,a) values (422,21);
+insert into t (id,a) values (422,22);
+insert into t (id,a) values (422,23);
+insert into t (id,a) values (422,24);
+insert into t (id,a) values (422,25);
+insert into t (id,a) values (422,26);
+insert into t (id,a) values (422,27);
+insert into t (id,a) values (422,28);
+insert into t (id,a) values (422,29);
+insert into t (id,a) values (422,30);
+insert into t (id,a) values (422,31);
+insert into t (id,a) values (422,32);
+insert into t (id,a) values (422,33);
+insert into t (id,a) values (422,34);
+insert into t (id,a) values (422,35);
+insert into t (id,a) values (422,36);
+insert into t (id,a) values (422,37);
+insert into t (id,a) values (422,38);
+insert into t (id,a) values (422,39);
+insert into t (id,a) values (422,40);
+insert into t (id,a) values (422,41);
+insert into t (id,a) values (422,42);
+insert into t (id,a) values (422,43);
+insert into t (id,a) values (422,44);
+insert into t (id,a) values (422,45);
+insert into t (id,a) values (422,46);
+insert into t (id,a) values (422,47);
+insert into t (id,a) values (422,48);
+insert into t (id,a) values (422,49);
+insert into t (id,a) values (422,50);
+insert into t (id,a) values (422,51);
+insert into t (id,a) values (422,52);
+insert into t (id,a) values (422,53);
+insert into t (id,a) values (422,54);
+insert into t (id,a) values (422,55);
+insert into t (id,a) values (422,56);
+insert into t (id,a) values (422,57);
+insert into t (id,a) values (422,58);
+insert into t (id,a) values (422,59);
+insert into t (id,a) values (422,60);
+insert into t (id,a) values (422,61);
+insert into t (id,a) values (422,62);
+insert into t (id,a) values (422,63);
+insert into t (id,a) values (422,64);
+insert into t (id,a) values (422,65);
+insert into t (id,a) values (422,66);
+insert into t (id,a) values (422,67);
+insert into t (id,a) values (422,68);
+insert into t (id,a) values (422,69);
+insert into t (id,a) values (422,70);
+insert into t (id,a) values (422,71);
+insert into t (id,a) values (422,72);
+insert into t (id,a) values (422,73);
+insert into t (id,a) values (422,74);
+insert into t (id,a) values (422,75);
+insert into t (id,a) values (422,76);
+insert into t (id,a) values (422,77);
+insert into t (id,a) values (422,78);
+insert into t (id,a) values (422,79);
+insert into t (id,a) values (422,80);
+insert into t (id,a) values (422,81);
+insert into t (id,a) values (422,82);
+insert into t (id,a) values (422,83);
+insert into t (id,a) values (422,84);
+insert into t (id,a) values (422,85);
+insert into t (id,a) values (422,86);
+insert into t (id,a) values (422,87);
+insert into t (id,a) values (422,88);
+insert into t (id,a) values (422,89);
+insert into t (id,a) values (422,90);
+insert into t (id,a) values (422,91);
+insert into t (id,a) values (422,92);
+insert into t (id,a) values (422,93);
+insert into t (id,a) values (422,94);
+insert into t (id,a) values (422,95);
+insert into t (id,a) values (422,96);
+insert into t (id,a) values (422,97);
+insert into t (id,a) values (422,98);
+insert into t (id,a) values (422,99);
+insert into t (id,a) values (423,0);
+insert into t (id,a) values (423,1);
+insert into t (id,a) values (423,2);
+insert into t (id,a) values (423,3);
+insert into t (id,a) values (423,4);
+insert into t (id,a) values (423,5);
+insert into t (id,a) values (423,6);
+insert into t (id,a) values (423,7);
+insert into t (id,a) values (423,8);
+insert into t (id,a) values (423,9);
+insert into t (id,a) values (423,10);
+insert into t (id,a) values (423,11);
+insert into t (id,a) values (423,12);
+insert into t (id,a) values (423,13);
+insert into t (id,a) values (423,14);
+insert into t (id,a) values (423,15);
+insert into t (id,a) values (423,16);
+insert into t (id,a) values (423,17);
+insert into t (id,a) values (423,18);
+insert into t (id,a) values (423,19);
+insert into t (id,a) values (423,20);
+insert into t (id,a) values (423,21);
+insert into t (id,a) values (423,22);
+insert into t (id,a) values (423,23);
+insert into t (id,a) values (423,24);
+insert into t (id,a) values (423,25);
+insert into t (id,a) values (423,26);
+insert into t (id,a) values (423,27);
+insert into t (id,a) values (423,28);
+insert into t (id,a) values (423,29);
+insert into t (id,a) values (423,30);
+insert into t (id,a) values (423,31);
+insert into t (id,a) values (423,32);
+insert into t (id,a) values (423,33);
+insert into t (id,a) values (423,34);
+insert into t (id,a) values (423,35);
+insert into t (id,a) values (423,36);
+insert into t (id,a) values (423,37);
+insert into t (id,a) values (423,38);
+insert into t (id,a) values (423,39);
+insert into t (id,a) values (423,40);
+insert into t (id,a) values (423,41);
+insert into t (id,a) values (423,42);
+insert into t (id,a) values (423,43);
+insert into t (id,a) values (423,44);
+insert into t (id,a) values (423,45);
+insert into t (id,a) values (423,46);
+insert into t (id,a) values (423,47);
+insert into t (id,a) values (423,48);
+insert into t (id,a) values (423,49);
+insert into t (id,a) values (423,50);
+insert into t (id,a) values (423,51);
+insert into t (id,a) values (423,52);
+insert into t (id,a) values (423,53);
+insert into t (id,a) values (423,54);
+insert into t (id,a) values (423,55);
+insert into t (id,a) values (423,56);
+insert into t (id,a) values (423,57);
+insert into t (id,a) values (423,58);
+insert into t (id,a) values (423,59);
+insert into t (id,a) values (423,60);
+insert into t (id,a) values (423,61);
+insert into t (id,a) values (423,62);
+insert into t (id,a) values (423,63);
+insert into t (id,a) values (423,64);
+insert into t (id,a) values (423,65);
+insert into t (id,a) values (423,66);
+insert into t (id,a) values (423,67);
+insert into t (id,a) values (423,68);
+insert into t (id,a) values (423,69);
+insert into t (id,a) values (423,70);
+insert into t (id,a) values (423,71);
+insert into t (id,a) values (423,72);
+insert into t (id,a) values (423,73);
+insert into t (id,a) values (423,74);
+insert into t (id,a) values (423,75);
+insert into t (id,a) values (423,76);
+insert into t (id,a) values (423,77);
+insert into t (id,a) values (423,78);
+insert into t (id,a) values (423,79);
+insert into t (id,a) values (423,80);
+insert into t (id,a) values (423,81);
+insert into t (id,a) values (423,82);
+insert into t (id,a) values (423,83);
+insert into t (id,a) values (423,84);
+insert into t (id,a) values (423,85);
+insert into t (id,a) values (423,86);
+insert into t (id,a) values (423,87);
+insert into t (id,a) values (423,88);
+insert into t (id,a) values (423,89);
+insert into t (id,a) values (423,90);
+insert into t (id,a) values (423,91);
+insert into t (id,a) values (423,92);
+insert into t (id,a) values (423,93);
+insert into t (id,a) values (423,94);
+insert into t (id,a) values (423,95);
+insert into t (id,a) values (423,96);
+insert into t (id,a) values (423,97);
+insert into t (id,a) values (423,98);
+insert into t (id,a) values (423,99);
+insert into t (id,a) values (424,0);
+insert into t (id,a) values (424,1);
+insert into t (id,a) values (424,2);
+insert into t (id,a) values (424,3);
+insert into t (id,a) values (424,4);
+insert into t (id,a) values (424,5);
+insert into t (id,a) values (424,6);
+insert into t (id,a) values (424,7);
+insert into t (id,a) values (424,8);
+insert into t (id,a) values (424,9);
+insert into t (id,a) values (424,10);
+insert into t (id,a) values (424,11);
+insert into t (id,a) values (424,12);
+insert into t (id,a) values (424,13);
+insert into t (id,a) values (424,14);
+insert into t (id,a) values (424,15);
+insert into t (id,a) values (424,16);
+insert into t (id,a) values (424,17);
+insert into t (id,a) values (424,18);
+insert into t (id,a) values (424,19);
+insert into t (id,a) values (424,20);
+insert into t (id,a) values (424,21);
+insert into t (id,a) values (424,22);
+insert into t (id,a) values (424,23);
+insert into t (id,a) values (424,24);
+insert into t (id,a) values (424,25);
+insert into t (id,a) values (424,26);
+insert into t (id,a) values (424,27);
+insert into t (id,a) values (424,28);
+insert into t (id,a) values (424,29);
+insert into t (id,a) values (424,30);
+insert into t (id,a) values (424,31);
+insert into t (id,a) values (424,32);
+insert into t (id,a) values (424,33);
+insert into t (id,a) values (424,34);
+insert into t (id,a) values (424,35);
+insert into t (id,a) values (424,36);
+insert into t (id,a) values (424,37);
+insert into t (id,a) values (424,38);
+insert into t (id,a) values (424,39);
+insert into t (id,a) values (424,40);
+insert into t (id,a) values (424,41);
+insert into t (id,a) values (424,42);
+insert into t (id,a) values (424,43);
+insert into t (id,a) values (424,44);
+insert into t (id,a) values (424,45);
+insert into t (id,a) values (424,46);
+insert into t (id,a) values (424,47);
+insert into t (id,a) values (424,48);
+insert into t (id,a) values (424,49);
+insert into t (id,a) values (424,50);
+insert into t (id,a) values (424,51);
+insert into t (id,a) values (424,52);
+insert into t (id,a) values (424,53);
+insert into t (id,a) values (424,54);
+insert into t (id,a) values (424,55);
+insert into t (id,a) values (424,56);
+insert into t (id,a) values (424,57);
+insert into t (id,a) values (424,58);
+insert into t (id,a) values (424,59);
+insert into t (id,a) values (424,60);
+insert into t (id,a) values (424,61);
+insert into t (id,a) values (424,62);
+insert into t (id,a) values (424,63);
+insert into t (id,a) values (424,64);
+insert into t (id,a) values (424,65);
+insert into t (id,a) values (424,66);
+insert into t (id,a) values (424,67);
+insert into t (id,a) values (424,68);
+insert into t (id,a) values (424,69);
+insert into t (id,a) values (424,70);
+insert into t (id,a) values (424,71);
+insert into t (id,a) values (424,72);
+insert into t (id,a) values (424,73);
+insert into t (id,a) values (424,74);
+insert into t (id,a) values (424,75);
+insert into t (id,a) values (424,76);
+insert into t (id,a) values (424,77);
+insert into t (id,a) values (424,78);
+insert into t (id,a) values (424,79);
+insert into t (id,a) values (424,80);
+insert into t (id,a) values (424,81);
+insert into t (id,a) values (424,82);
+insert into t (id,a) values (424,83);
+insert into t (id,a) values (424,84);
+insert into t (id,a) values (424,85);
+insert into t (id,a) values (424,86);
+insert into t (id,a) values (424,87);
+insert into t (id,a) values (424,88);
+insert into t (id,a) values (424,89);
+insert into t (id,a) values (424,90);
+insert into t (id,a) values (424,91);
+insert into t (id,a) values (424,92);
+insert into t (id,a) values (424,93);
+insert into t (id,a) values (424,94);
+insert into t (id,a) values (424,95);
+insert into t (id,a) values (424,96);
+insert into t (id,a) values (424,97);
+insert into t (id,a) values (424,98);
+insert into t (id,a) values (424,99);
+insert into t (id,a) values (425,0);
+insert into t (id,a) values (425,1);
+insert into t (id,a) values (425,2);
+insert into t (id,a) values (425,3);
+insert into t (id,a) values (425,4);
+insert into t (id,a) values (425,5);
+insert into t (id,a) values (425,6);
+insert into t (id,a) values (425,7);
+insert into t (id,a) values (425,8);
+insert into t (id,a) values (425,9);
+insert into t (id,a) values (425,10);
+insert into t (id,a) values (425,11);
+insert into t (id,a) values (425,12);
+insert into t (id,a) values (425,13);
+insert into t (id,a) values (425,14);
+insert into t (id,a) values (425,15);
+insert into t (id,a) values (425,16);
+insert into t (id,a) values (425,17);
+insert into t (id,a) values (425,18);
+insert into t (id,a) values (425,19);
+insert into t (id,a) values (425,20);
+insert into t (id,a) values (425,21);
+insert into t (id,a) values (425,22);
+insert into t (id,a) values (425,23);
+insert into t (id,a) values (425,24);
+insert into t (id,a) values (425,25);
+insert into t (id,a) values (425,26);
+insert into t (id,a) values (425,27);
+insert into t (id,a) values (425,28);
+insert into t (id,a) values (425,29);
+insert into t (id,a) values (425,30);
+insert into t (id,a) values (425,31);
+insert into t (id,a) values (425,32);
+insert into t (id,a) values (425,33);
+insert into t (id,a) values (425,34);
+insert into t (id,a) values (425,35);
+insert into t (id,a) values (425,36);
+insert into t (id,a) values (425,37);
+insert into t (id,a) values (425,38);
+insert into t (id,a) values (425,39);
+insert into t (id,a) values (425,40);
+insert into t (id,a) values (425,41);
+insert into t (id,a) values (425,42);
+insert into t (id,a) values (425,43);
+insert into t (id,a) values (425,44);
+insert into t (id,a) values (425,45);
+insert into t (id,a) values (425,46);
+insert into t (id,a) values (425,47);
+insert into t (id,a) values (425,48);
+insert into t (id,a) values (425,49);
+insert into t (id,a) values (425,50);
+insert into t (id,a) values (425,51);
+insert into t (id,a) values (425,52);
+insert into t (id,a) values (425,53);
+insert into t (id,a) values (425,54);
+insert into t (id,a) values (425,55);
+insert into t (id,a) values (425,56);
+insert into t (id,a) values (425,57);
+insert into t (id,a) values (425,58);
+insert into t (id,a) values (425,59);
+insert into t (id,a) values (425,60);
+insert into t (id,a) values (425,61);
+insert into t (id,a) values (425,62);
+insert into t (id,a) values (425,63);
+insert into t (id,a) values (425,64);
+insert into t (id,a) values (425,65);
+insert into t (id,a) values (425,66);
+insert into t (id,a) values (425,67);
+insert into t (id,a) values (425,68);
+insert into t (id,a) values (425,69);
+insert into t (id,a) values (425,70);
+insert into t (id,a) values (425,71);
+insert into t (id,a) values (425,72);
+insert into t (id,a) values (425,73);
+insert into t (id,a) values (425,74);
+insert into t (id,a) values (425,75);
+insert into t (id,a) values (425,76);
+insert into t (id,a) values (425,77);
+insert into t (id,a) values (425,78);
+insert into t (id,a) values (425,79);
+insert into t (id,a) values (425,80);
+insert into t (id,a) values (425,81);
+insert into t (id,a) values (425,82);
+insert into t (id,a) values (425,83);
+insert into t (id,a) values (425,84);
+insert into t (id,a) values (425,85);
+insert into t (id,a) values (425,86);
+insert into t (id,a) values (425,87);
+insert into t (id,a) values (425,88);
+insert into t (id,a) values (425,89);
+insert into t (id,a) values (425,90);
+insert into t (id,a) values (425,91);
+insert into t (id,a) values (425,92);
+insert into t (id,a) values (425,93);
+insert into t (id,a) values (425,94);
+insert into t (id,a) values (425,95);
+insert into t (id,a) values (425,96);
+insert into t (id,a) values (425,97);
+insert into t (id,a) values (425,98);
+insert into t (id,a) values (425,99);
+insert into t (id,a) values (426,0);
+insert into t (id,a) values (426,1);
+insert into t (id,a) values (426,2);
+insert into t (id,a) values (426,3);
+insert into t (id,a) values (426,4);
+insert into t (id,a) values (426,5);
+insert into t (id,a) values (426,6);
+insert into t (id,a) values (426,7);
+insert into t (id,a) values (426,8);
+insert into t (id,a) values (426,9);
+insert into t (id,a) values (426,10);
+insert into t (id,a) values (426,11);
+insert into t (id,a) values (426,12);
+insert into t (id,a) values (426,13);
+insert into t (id,a) values (426,14);
+insert into t (id,a) values (426,15);
+insert into t (id,a) values (426,16);
+insert into t (id,a) values (426,17);
+insert into t (id,a) values (426,18);
+insert into t (id,a) values (426,19);
+insert into t (id,a) values (426,20);
+insert into t (id,a) values (426,21);
+insert into t (id,a) values (426,22);
+insert into t (id,a) values (426,23);
+insert into t (id,a) values (426,24);
+insert into t (id,a) values (426,25);
+insert into t (id,a) values (426,26);
+insert into t (id,a) values (426,27);
+insert into t (id,a) values (426,28);
+insert into t (id,a) values (426,29);
+insert into t (id,a) values (426,30);
+insert into t (id,a) values (426,31);
+insert into t (id,a) values (426,32);
+insert into t (id,a) values (426,33);
+insert into t (id,a) values (426,34);
+insert into t (id,a) values (426,35);
+insert into t (id,a) values (426,36);
+insert into t (id,a) values (426,37);
+insert into t (id,a) values (426,38);
+insert into t (id,a) values (426,39);
+insert into t (id,a) values (426,40);
+insert into t (id,a) values (426,41);
+insert into t (id,a) values (426,42);
+insert into t (id,a) values (426,43);
+insert into t (id,a) values (426,44);
+insert into t (id,a) values (426,45);
+insert into t (id,a) values (426,46);
+insert into t (id,a) values (426,47);
+insert into t (id,a) values (426,48);
+insert into t (id,a) values (426,49);
+insert into t (id,a) values (426,50);
+insert into t (id,a) values (426,51);
+insert into t (id,a) values (426,52);
+insert into t (id,a) values (426,53);
+insert into t (id,a) values (426,54);
+insert into t (id,a) values (426,55);
+insert into t (id,a) values (426,56);
+insert into t (id,a) values (426,57);
+insert into t (id,a) values (426,58);
+insert into t (id,a) values (426,59);
+insert into t (id,a) values (426,60);
+insert into t (id,a) values (426,61);
+insert into t (id,a) values (426,62);
+insert into t (id,a) values (426,63);
+insert into t (id,a) values (426,64);
+insert into t (id,a) values (426,65);
+insert into t (id,a) values (426,66);
+insert into t (id,a) values (426,67);
+insert into t (id,a) values (426,68);
+insert into t (id,a) values (426,69);
+insert into t (id,a) values (426,70);
+insert into t (id,a) values (426,71);
+insert into t (id,a) values (426,72);
+insert into t (id,a) values (426,73);
+insert into t (id,a) values (426,74);
+insert into t (id,a) values (426,75);
+insert into t (id,a) values (426,76);
+insert into t (id,a) values (426,77);
+insert into t (id,a) values (426,78);
+insert into t (id,a) values (426,79);
+insert into t (id,a) values (426,80);
+insert into t (id,a) values (426,81);
+insert into t (id,a) values (426,82);
+insert into t (id,a) values (426,83);
+insert into t (id,a) values (426,84);
+insert into t (id,a) values (426,85);
+insert into t (id,a) values (426,86);
+insert into t (id,a) values (426,87);
+insert into t (id,a) values (426,88);
+insert into t (id,a) values (426,89);
+insert into t (id,a) values (426,90);
+insert into t (id,a) values (426,91);
+insert into t (id,a) values (426,92);
+insert into t (id,a) values (426,93);
+insert into t (id,a) values (426,94);
+insert into t (id,a) values (426,95);
+insert into t (id,a) values (426,96);
+insert into t (id,a) values (426,97);
+insert into t (id,a) values (426,98);
+insert into t (id,a) values (426,99);
+insert into t (id,a) values (427,0);
+insert into t (id,a) values (427,1);
+insert into t (id,a) values (427,2);
+insert into t (id,a) values (427,3);
+insert into t (id,a) values (427,4);
+insert into t (id,a) values (427,5);
+insert into t (id,a) values (427,6);
+insert into t (id,a) values (427,7);
+insert into t (id,a) values (427,8);
+insert into t (id,a) values (427,9);
+insert into t (id,a) values (427,10);
+insert into t (id,a) values (427,11);
+insert into t (id,a) values (427,12);
+insert into t (id,a) values (427,13);
+insert into t (id,a) values (427,14);
+insert into t (id,a) values (427,15);
+insert into t (id,a) values (427,16);
+insert into t (id,a) values (427,17);
+insert into t (id,a) values (427,18);
+insert into t (id,a) values (427,19);
+insert into t (id,a) values (427,20);
+insert into t (id,a) values (427,21);
+insert into t (id,a) values (427,22);
+insert into t (id,a) values (427,23);
+insert into t (id,a) values (427,24);
+insert into t (id,a) values (427,25);
+insert into t (id,a) values (427,26);
+insert into t (id,a) values (427,27);
+insert into t (id,a) values (427,28);
+insert into t (id,a) values (427,29);
+insert into t (id,a) values (427,30);
+insert into t (id,a) values (427,31);
+insert into t (id,a) values (427,32);
+insert into t (id,a) values (427,33);
+insert into t (id,a) values (427,34);
+insert into t (id,a) values (427,35);
+insert into t (id,a) values (427,36);
+insert into t (id,a) values (427,37);
+insert into t (id,a) values (427,38);
+insert into t (id,a) values (427,39);
+insert into t (id,a) values (427,40);
+insert into t (id,a) values (427,41);
+insert into t (id,a) values (427,42);
+insert into t (id,a) values (427,43);
+insert into t (id,a) values (427,44);
+insert into t (id,a) values (427,45);
+insert into t (id,a) values (427,46);
+insert into t (id,a) values (427,47);
+insert into t (id,a) values (427,48);
+insert into t (id,a) values (427,49);
+insert into t (id,a) values (427,50);
+insert into t (id,a) values (427,51);
+insert into t (id,a) values (427,52);
+insert into t (id,a) values (427,53);
+insert into t (id,a) values (427,54);
+insert into t (id,a) values (427,55);
+insert into t (id,a) values (427,56);
+insert into t (id,a) values (427,57);
+insert into t (id,a) values (427,58);
+insert into t (id,a) values (427,59);
+insert into t (id,a) values (427,60);
+insert into t (id,a) values (427,61);
+insert into t (id,a) values (427,62);
+insert into t (id,a) values (427,63);
+insert into t (id,a) values (427,64);
+insert into t (id,a) values (427,65);
+insert into t (id,a) values (427,66);
+insert into t (id,a) values (427,67);
+insert into t (id,a) values (427,68);
+insert into t (id,a) values (427,69);
+insert into t (id,a) values (427,70);
+insert into t (id,a) values (427,71);
+insert into t (id,a) values (427,72);
+insert into t (id,a) values (427,73);
+insert into t (id,a) values (427,74);
+insert into t (id,a) values (427,75);
+insert into t (id,a) values (427,76);
+insert into t (id,a) values (427,77);
+insert into t (id,a) values (427,78);
+insert into t (id,a) values (427,79);
+insert into t (id,a) values (427,80);
+insert into t (id,a) values (427,81);
+insert into t (id,a) values (427,82);
+insert into t (id,a) values (427,83);
+insert into t (id,a) values (427,84);
+insert into t (id,a) values (427,85);
+insert into t (id,a) values (427,86);
+insert into t (id,a) values (427,87);
+insert into t (id,a) values (427,88);
+insert into t (id,a) values (427,89);
+insert into t (id,a) values (427,90);
+insert into t (id,a) values (427,91);
+insert into t (id,a) values (427,92);
+insert into t (id,a) values (427,93);
+insert into t (id,a) values (427,94);
+insert into t (id,a) values (427,95);
+insert into t (id,a) values (427,96);
+insert into t (id,a) values (427,97);
+insert into t (id,a) values (427,98);
+insert into t (id,a) values (427,99);
+insert into t (id,a) values (428,0);
+insert into t (id,a) values (428,1);
+insert into t (id,a) values (428,2);
+insert into t (id,a) values (428,3);
+insert into t (id,a) values (428,4);
+insert into t (id,a) values (428,5);
+insert into t (id,a) values (428,6);
+insert into t (id,a) values (428,7);
+insert into t (id,a) values (428,8);
+insert into t (id,a) values (428,9);
+insert into t (id,a) values (428,10);
+insert into t (id,a) values (428,11);
+insert into t (id,a) values (428,12);
+insert into t (id,a) values (428,13);
+insert into t (id,a) values (428,14);
+insert into t (id,a) values (428,15);
+insert into t (id,a) values (428,16);
+insert into t (id,a) values (428,17);
+insert into t (id,a) values (428,18);
+insert into t (id,a) values (428,19);
+insert into t (id,a) values (428,20);
+insert into t (id,a) values (428,21);
+insert into t (id,a) values (428,22);
+insert into t (id,a) values (428,23);
+insert into t (id,a) values (428,24);
+insert into t (id,a) values (428,25);
+insert into t (id,a) values (428,26);
+insert into t (id,a) values (428,27);
+insert into t (id,a) values (428,28);
+insert into t (id,a) values (428,29);
+insert into t (id,a) values (428,30);
+insert into t (id,a) values (428,31);
+insert into t (id,a) values (428,32);
+insert into t (id,a) values (428,33);
+insert into t (id,a) values (428,34);
+insert into t (id,a) values (428,35);
+insert into t (id,a) values (428,36);
+insert into t (id,a) values (428,37);
+insert into t (id,a) values (428,38);
+insert into t (id,a) values (428,39);
+insert into t (id,a) values (428,40);
+insert into t (id,a) values (428,41);
+insert into t (id,a) values (428,42);
+insert into t (id,a) values (428,43);
+insert into t (id,a) values (428,44);
+insert into t (id,a) values (428,45);
+insert into t (id,a) values (428,46);
+insert into t (id,a) values (428,47);
+insert into t (id,a) values (428,48);
+insert into t (id,a) values (428,49);
+insert into t (id,a) values (428,50);
+insert into t (id,a) values (428,51);
+insert into t (id,a) values (428,52);
+insert into t (id,a) values (428,53);
+insert into t (id,a) values (428,54);
+insert into t (id,a) values (428,55);
+insert into t (id,a) values (428,56);
+insert into t (id,a) values (428,57);
+insert into t (id,a) values (428,58);
+insert into t (id,a) values (428,59);
+insert into t (id,a) values (428,60);
+insert into t (id,a) values (428,61);
+insert into t (id,a) values (428,62);
+insert into t (id,a) values (428,63);
+insert into t (id,a) values (428,64);
+insert into t (id,a) values (428,65);
+insert into t (id,a) values (428,66);
+insert into t (id,a) values (428,67);
+insert into t (id,a) values (428,68);
+insert into t (id,a) values (428,69);
+insert into t (id,a) values (428,70);
+insert into t (id,a) values (428,71);
+insert into t (id,a) values (428,72);
+insert into t (id,a) values (428,73);
+insert into t (id,a) values (428,74);
+insert into t (id,a) values (428,75);
+insert into t (id,a) values (428,76);
+insert into t (id,a) values (428,77);
+insert into t (id,a) values (428,78);
+insert into t (id,a) values (428,79);
+insert into t (id,a) values (428,80);
+insert into t (id,a) values (428,81);
+insert into t (id,a) values (428,82);
+insert into t (id,a) values (428,83);
+insert into t (id,a) values (428,84);
+insert into t (id,a) values (428,85);
+insert into t (id,a) values (428,86);
+insert into t (id,a) values (428,87);
+insert into t (id,a) values (428,88);
+insert into t (id,a) values (428,89);
+insert into t (id,a) values (428,90);
+insert into t (id,a) values (428,91);
+insert into t (id,a) values (428,92);
+insert into t (id,a) values (428,93);
+insert into t (id,a) values (428,94);
+insert into t (id,a) values (428,95);
+insert into t (id,a) values (428,96);
+insert into t (id,a) values (428,97);
+insert into t (id,a) values (428,98);
+insert into t (id,a) values (428,99);
+insert into t (id,a) values (429,0);
+insert into t (id,a) values (429,1);
+insert into t (id,a) values (429,2);
+insert into t (id,a) values (429,3);
+insert into t (id,a) values (429,4);
+insert into t (id,a) values (429,5);
+insert into t (id,a) values (429,6);
+insert into t (id,a) values (429,7);
+insert into t (id,a) values (429,8);
+insert into t (id,a) values (429,9);
+insert into t (id,a) values (429,10);
+insert into t (id,a) values (429,11);
+insert into t (id,a) values (429,12);
+insert into t (id,a) values (429,13);
+insert into t (id,a) values (429,14);
+insert into t (id,a) values (429,15);
+insert into t (id,a) values (429,16);
+insert into t (id,a) values (429,17);
+insert into t (id,a) values (429,18);
+insert into t (id,a) values (429,19);
+insert into t (id,a) values (429,20);
+insert into t (id,a) values (429,21);
+insert into t (id,a) values (429,22);
+insert into t (id,a) values (429,23);
+insert into t (id,a) values (429,24);
+insert into t (id,a) values (429,25);
+insert into t (id,a) values (429,26);
+insert into t (id,a) values (429,27);
+insert into t (id,a) values (429,28);
+insert into t (id,a) values (429,29);
+insert into t (id,a) values (429,30);
+insert into t (id,a) values (429,31);
+insert into t (id,a) values (429,32);
+insert into t (id,a) values (429,33);
+insert into t (id,a) values (429,34);
+insert into t (id,a) values (429,35);
+insert into t (id,a) values (429,36);
+insert into t (id,a) values (429,37);
+insert into t (id,a) values (429,38);
+insert into t (id,a) values (429,39);
+insert into t (id,a) values (429,40);
+insert into t (id,a) values (429,41);
+insert into t (id,a) values (429,42);
+insert into t (id,a) values (429,43);
+insert into t (id,a) values (429,44);
+insert into t (id,a) values (429,45);
+insert into t (id,a) values (429,46);
+insert into t (id,a) values (429,47);
+insert into t (id,a) values (429,48);
+insert into t (id,a) values (429,49);
+insert into t (id,a) values (429,50);
+insert into t (id,a) values (429,51);
+insert into t (id,a) values (429,52);
+insert into t (id,a) values (429,53);
+insert into t (id,a) values (429,54);
+insert into t (id,a) values (429,55);
+insert into t (id,a) values (429,56);
+insert into t (id,a) values (429,57);
+insert into t (id,a) values (429,58);
+insert into t (id,a) values (429,59);
+insert into t (id,a) values (429,60);
+insert into t (id,a) values (429,61);
+insert into t (id,a) values (429,62);
+insert into t (id,a) values (429,63);
+insert into t (id,a) values (429,64);
+insert into t (id,a) values (429,65);
+insert into t (id,a) values (429,66);
+insert into t (id,a) values (429,67);
+insert into t (id,a) values (429,68);
+insert into t (id,a) values (429,69);
+insert into t (id,a) values (429,70);
+insert into t (id,a) values (429,71);
+insert into t (id,a) values (429,72);
+insert into t (id,a) values (429,73);
+insert into t (id,a) values (429,74);
+insert into t (id,a) values (429,75);
+insert into t (id,a) values (429,76);
+insert into t (id,a) values (429,77);
+insert into t (id,a) values (429,78);
+insert into t (id,a) values (429,79);
+insert into t (id,a) values (429,80);
+insert into t (id,a) values (429,81);
+insert into t (id,a) values (429,82);
+insert into t (id,a) values (429,83);
+insert into t (id,a) values (429,84);
+insert into t (id,a) values (429,85);
+insert into t (id,a) values (429,86);
+insert into t (id,a) values (429,87);
+insert into t (id,a) values (429,88);
+insert into t (id,a) values (429,89);
+insert into t (id,a) values (429,90);
+insert into t (id,a) values (429,91);
+insert into t (id,a) values (429,92);
+insert into t (id,a) values (429,93);
+insert into t (id,a) values (429,94);
+insert into t (id,a) values (429,95);
+insert into t (id,a) values (429,96);
+insert into t (id,a) values (429,97);
+insert into t (id,a) values (429,98);
+insert into t (id,a) values (429,99);
+insert into t (id,a) values (430,0);
+insert into t (id,a) values (430,1);
+insert into t (id,a) values (430,2);
+insert into t (id,a) values (430,3);
+insert into t (id,a) values (430,4);
+insert into t (id,a) values (430,5);
+insert into t (id,a) values (430,6);
+insert into t (id,a) values (430,7);
+insert into t (id,a) values (430,8);
+insert into t (id,a) values (430,9);
+insert into t (id,a) values (430,10);
+insert into t (id,a) values (430,11);
+insert into t (id,a) values (430,12);
+insert into t (id,a) values (430,13);
+insert into t (id,a) values (430,14);
+insert into t (id,a) values (430,15);
+insert into t (id,a) values (430,16);
+insert into t (id,a) values (430,17);
+insert into t (id,a) values (430,18);
+insert into t (id,a) values (430,19);
+insert into t (id,a) values (430,20);
+insert into t (id,a) values (430,21);
+insert into t (id,a) values (430,22);
+insert into t (id,a) values (430,23);
+insert into t (id,a) values (430,24);
+insert into t (id,a) values (430,25);
+insert into t (id,a) values (430,26);
+insert into t (id,a) values (430,27);
+insert into t (id,a) values (430,28);
+insert into t (id,a) values (430,29);
+insert into t (id,a) values (430,30);
+insert into t (id,a) values (430,31);
+insert into t (id,a) values (430,32);
+insert into t (id,a) values (430,33);
+insert into t (id,a) values (430,34);
+insert into t (id,a) values (430,35);
+insert into t (id,a) values (430,36);
+insert into t (id,a) values (430,37);
+insert into t (id,a) values (430,38);
+insert into t (id,a) values (430,39);
+insert into t (id,a) values (430,40);
+insert into t (id,a) values (430,41);
+insert into t (id,a) values (430,42);
+insert into t (id,a) values (430,43);
+insert into t (id,a) values (430,44);
+insert into t (id,a) values (430,45);
+insert into t (id,a) values (430,46);
+insert into t (id,a) values (430,47);
+insert into t (id,a) values (430,48);
+insert into t (id,a) values (430,49);
+insert into t (id,a) values (430,50);
+insert into t (id,a) values (430,51);
+insert into t (id,a) values (430,52);
+insert into t (id,a) values (430,53);
+insert into t (id,a) values (430,54);
+insert into t (id,a) values (430,55);
+insert into t (id,a) values (430,56);
+insert into t (id,a) values (430,57);
+insert into t (id,a) values (430,58);
+insert into t (id,a) values (430,59);
+insert into t (id,a) values (430,60);
+insert into t (id,a) values (430,61);
+insert into t (id,a) values (430,62);
+insert into t (id,a) values (430,63);
+insert into t (id,a) values (430,64);
+insert into t (id,a) values (430,65);
+insert into t (id,a) values (430,66);
+insert into t (id,a) values (430,67);
+insert into t (id,a) values (430,68);
+insert into t (id,a) values (430,69);
+insert into t (id,a) values (430,70);
+insert into t (id,a) values (430,71);
+insert into t (id,a) values (430,72);
+insert into t (id,a) values (430,73);
+insert into t (id,a) values (430,74);
+insert into t (id,a) values (430,75);
+insert into t (id,a) values (430,76);
+insert into t (id,a) values (430,77);
+insert into t (id,a) values (430,78);
+insert into t (id,a) values (430,79);
+insert into t (id,a) values (430,80);
+insert into t (id,a) values (430,81);
+insert into t (id,a) values (430,82);
+insert into t (id,a) values (430,83);
+insert into t (id,a) values (430,84);
+insert into t (id,a) values (430,85);
+insert into t (id,a) values (430,86);
+insert into t (id,a) values (430,87);
+insert into t (id,a) values (430,88);
+insert into t (id,a) values (430,89);
+insert into t (id,a) values (430,90);
+insert into t (id,a) values (430,91);
+insert into t (id,a) values (430,92);
+insert into t (id,a) values (430,93);
+insert into t (id,a) values (430,94);
+insert into t (id,a) values (430,95);
+insert into t (id,a) values (430,96);
+insert into t (id,a) values (430,97);
+insert into t (id,a) values (430,98);
+insert into t (id,a) values (430,99);
+insert into t (id,a) values (431,0);
+insert into t (id,a) values (431,1);
+insert into t (id,a) values (431,2);
+insert into t (id,a) values (431,3);
+insert into t (id,a) values (431,4);
+insert into t (id,a) values (431,5);
+insert into t (id,a) values (431,6);
+insert into t (id,a) values (431,7);
+insert into t (id,a) values (431,8);
+insert into t (id,a) values (431,9);
+insert into t (id,a) values (431,10);
+insert into t (id,a) values (431,11);
+insert into t (id,a) values (431,12);
+insert into t (id,a) values (431,13);
+insert into t (id,a) values (431,14);
+insert into t (id,a) values (431,15);
+insert into t (id,a) values (431,16);
+insert into t (id,a) values (431,17);
+insert into t (id,a) values (431,18);
+insert into t (id,a) values (431,19);
+insert into t (id,a) values (431,20);
+insert into t (id,a) values (431,21);
+insert into t (id,a) values (431,22);
+insert into t (id,a) values (431,23);
+insert into t (id,a) values (431,24);
+insert into t (id,a) values (431,25);
+insert into t (id,a) values (431,26);
+insert into t (id,a) values (431,27);
+insert into t (id,a) values (431,28);
+insert into t (id,a) values (431,29);
+insert into t (id,a) values (431,30);
+insert into t (id,a) values (431,31);
+insert into t (id,a) values (431,32);
+insert into t (id,a) values (431,33);
+insert into t (id,a) values (431,34);
+insert into t (id,a) values (431,35);
+insert into t (id,a) values (431,36);
+insert into t (id,a) values (431,37);
+insert into t (id,a) values (431,38);
+insert into t (id,a) values (431,39);
+insert into t (id,a) values (431,40);
+insert into t (id,a) values (431,41);
+insert into t (id,a) values (431,42);
+insert into t (id,a) values (431,43);
+insert into t (id,a) values (431,44);
+insert into t (id,a) values (431,45);
+insert into t (id,a) values (431,46);
+insert into t (id,a) values (431,47);
+insert into t (id,a) values (431,48);
+insert into t (id,a) values (431,49);
+insert into t (id,a) values (431,50);
+insert into t (id,a) values (431,51);
+insert into t (id,a) values (431,52);
+insert into t (id,a) values (431,53);
+insert into t (id,a) values (431,54);
+insert into t (id,a) values (431,55);
+insert into t (id,a) values (431,56);
+insert into t (id,a) values (431,57);
+insert into t (id,a) values (431,58);
+insert into t (id,a) values (431,59);
+insert into t (id,a) values (431,60);
+insert into t (id,a) values (431,61);
+insert into t (id,a) values (431,62);
+insert into t (id,a) values (431,63);
+insert into t (id,a) values (431,64);
+insert into t (id,a) values (431,65);
+insert into t (id,a) values (431,66);
+insert into t (id,a) values (431,67);
+insert into t (id,a) values (431,68);
+insert into t (id,a) values (431,69);
+insert into t (id,a) values (431,70);
+insert into t (id,a) values (431,71);
+insert into t (id,a) values (431,72);
+insert into t (id,a) values (431,73);
+insert into t (id,a) values (431,74);
+insert into t (id,a) values (431,75);
+insert into t (id,a) values (431,76);
+insert into t (id,a) values (431,77);
+insert into t (id,a) values (431,78);
+insert into t (id,a) values (431,79);
+insert into t (id,a) values (431,80);
+insert into t (id,a) values (431,81);
+insert into t (id,a) values (431,82);
+insert into t (id,a) values (431,83);
+insert into t (id,a) values (431,84);
+insert into t (id,a) values (431,85);
+insert into t (id,a) values (431,86);
+insert into t (id,a) values (431,87);
+insert into t (id,a) values (431,88);
+insert into t (id,a) values (431,89);
+insert into t (id,a) values (431,90);
+insert into t (id,a) values (431,91);
+insert into t (id,a) values (431,92);
+insert into t (id,a) values (431,93);
+insert into t (id,a) values (431,94);
+insert into t (id,a) values (431,95);
+insert into t (id,a) values (431,96);
+insert into t (id,a) values (431,97);
+insert into t (id,a) values (431,98);
+insert into t (id,a) values (431,99);
+insert into t (id,a) values (432,0);
+insert into t (id,a) values (432,1);
+insert into t (id,a) values (432,2);
+insert into t (id,a) values (432,3);
+insert into t (id,a) values (432,4);
+insert into t (id,a) values (432,5);
+insert into t (id,a) values (432,6);
+insert into t (id,a) values (432,7);
+insert into t (id,a) values (432,8);
+insert into t (id,a) values (432,9);
+insert into t (id,a) values (432,10);
+insert into t (id,a) values (432,11);
+insert into t (id,a) values (432,12);
+insert into t (id,a) values (432,13);
+insert into t (id,a) values (432,14);
+insert into t (id,a) values (432,15);
+insert into t (id,a) values (432,16);
+insert into t (id,a) values (432,17);
+insert into t (id,a) values (432,18);
+insert into t (id,a) values (432,19);
+insert into t (id,a) values (432,20);
+insert into t (id,a) values (432,21);
+insert into t (id,a) values (432,22);
+insert into t (id,a) values (432,23);
+insert into t (id,a) values (432,24);
+insert into t (id,a) values (432,25);
+insert into t (id,a) values (432,26);
+insert into t (id,a) values (432,27);
+insert into t (id,a) values (432,28);
+insert into t (id,a) values (432,29);
+insert into t (id,a) values (432,30);
+insert into t (id,a) values (432,31);
+insert into t (id,a) values (432,32);
+insert into t (id,a) values (432,33);
+insert into t (id,a) values (432,34);
+insert into t (id,a) values (432,35);
+insert into t (id,a) values (432,36);
+insert into t (id,a) values (432,37);
+insert into t (id,a) values (432,38);
+insert into t (id,a) values (432,39);
+insert into t (id,a) values (432,40);
+insert into t (id,a) values (432,41);
+insert into t (id,a) values (432,42);
+insert into t (id,a) values (432,43);
+insert into t (id,a) values (432,44);
+insert into t (id,a) values (432,45);
+insert into t (id,a) values (432,46);
+insert into t (id,a) values (432,47);
+insert into t (id,a) values (432,48);
+insert into t (id,a) values (432,49);
+insert into t (id,a) values (432,50);
+insert into t (id,a) values (432,51);
+insert into t (id,a) values (432,52);
+insert into t (id,a) values (432,53);
+insert into t (id,a) values (432,54);
+insert into t (id,a) values (432,55);
+insert into t (id,a) values (432,56);
+insert into t (id,a) values (432,57);
+insert into t (id,a) values (432,58);
+insert into t (id,a) values (432,59);
+insert into t (id,a) values (432,60);
+insert into t (id,a) values (432,61);
+insert into t (id,a) values (432,62);
+insert into t (id,a) values (432,63);
+insert into t (id,a) values (432,64);
+insert into t (id,a) values (432,65);
+insert into t (id,a) values (432,66);
+insert into t (id,a) values (432,67);
+insert into t (id,a) values (432,68);
+insert into t (id,a) values (432,69);
+insert into t (id,a) values (432,70);
+insert into t (id,a) values (432,71);
+insert into t (id,a) values (432,72);
+insert into t (id,a) values (432,73);
+insert into t (id,a) values (432,74);
+insert into t (id,a) values (432,75);
+insert into t (id,a) values (432,76);
+insert into t (id,a) values (432,77);
+insert into t (id,a) values (432,78);
+insert into t (id,a) values (432,79);
+insert into t (id,a) values (432,80);
+insert into t (id,a) values (432,81);
+insert into t (id,a) values (432,82);
+insert into t (id,a) values (432,83);
+insert into t (id,a) values (432,84);
+insert into t (id,a) values (432,85);
+insert into t (id,a) values (432,86);
+insert into t (id,a) values (432,87);
+insert into t (id,a) values (432,88);
+insert into t (id,a) values (432,89);
+insert into t (id,a) values (432,90);
+insert into t (id,a) values (432,91);
+insert into t (id,a) values (432,92);
+insert into t (id,a) values (432,93);
+insert into t (id,a) values (432,94);
+insert into t (id,a) values (432,95);
+insert into t (id,a) values (432,96);
+insert into t (id,a) values (432,97);
+insert into t (id,a) values (432,98);
+insert into t (id,a) values (432,99);
+insert into t (id,a) values (433,0);
+insert into t (id,a) values (433,1);
+insert into t (id,a) values (433,2);
+insert into t (id,a) values (433,3);
+insert into t (id,a) values (433,4);
+insert into t (id,a) values (433,5);
+insert into t (id,a) values (433,6);
+insert into t (id,a) values (433,7);
+insert into t (id,a) values (433,8);
+insert into t (id,a) values (433,9);
+insert into t (id,a) values (433,10);
+insert into t (id,a) values (433,11);
+insert into t (id,a) values (433,12);
+insert into t (id,a) values (433,13);
+insert into t (id,a) values (433,14);
+insert into t (id,a) values (433,15);
+insert into t (id,a) values (433,16);
+insert into t (id,a) values (433,17);
+insert into t (id,a) values (433,18);
+insert into t (id,a) values (433,19);
+insert into t (id,a) values (433,20);
+insert into t (id,a) values (433,21);
+insert into t (id,a) values (433,22);
+insert into t (id,a) values (433,23);
+insert into t (id,a) values (433,24);
+insert into t (id,a) values (433,25);
+insert into t (id,a) values (433,26);
+insert into t (id,a) values (433,27);
+insert into t (id,a) values (433,28);
+insert into t (id,a) values (433,29);
+insert into t (id,a) values (433,30);
+insert into t (id,a) values (433,31);
+insert into t (id,a) values (433,32);
+insert into t (id,a) values (433,33);
+insert into t (id,a) values (433,34);
+insert into t (id,a) values (433,35);
+insert into t (id,a) values (433,36);
+insert into t (id,a) values (433,37);
+insert into t (id,a) values (433,38);
+insert into t (id,a) values (433,39);
+insert into t (id,a) values (433,40);
+insert into t (id,a) values (433,41);
+insert into t (id,a) values (433,42);
+insert into t (id,a) values (433,43);
+insert into t (id,a) values (433,44);
+insert into t (id,a) values (433,45);
+insert into t (id,a) values (433,46);
+insert into t (id,a) values (433,47);
+insert into t (id,a) values (433,48);
+insert into t (id,a) values (433,49);
+insert into t (id,a) values (433,50);
+insert into t (id,a) values (433,51);
+insert into t (id,a) values (433,52);
+insert into t (id,a) values (433,53);
+insert into t (id,a) values (433,54);
+insert into t (id,a) values (433,55);
+insert into t (id,a) values (433,56);
+insert into t (id,a) values (433,57);
+insert into t (id,a) values (433,58);
+insert into t (id,a) values (433,59);
+insert into t (id,a) values (433,60);
+insert into t (id,a) values (433,61);
+insert into t (id,a) values (433,62);
+insert into t (id,a) values (433,63);
+insert into t (id,a) values (433,64);
+insert into t (id,a) values (433,65);
+insert into t (id,a) values (433,66);
+insert into t (id,a) values (433,67);
+insert into t (id,a) values (433,68);
+insert into t (id,a) values (433,69);
+insert into t (id,a) values (433,70);
+insert into t (id,a) values (433,71);
+insert into t (id,a) values (433,72);
+insert into t (id,a) values (433,73);
+insert into t (id,a) values (433,74);
+insert into t (id,a) values (433,75);
+insert into t (id,a) values (433,76);
+insert into t (id,a) values (433,77);
+insert into t (id,a) values (433,78);
+insert into t (id,a) values (433,79);
+insert into t (id,a) values (433,80);
+insert into t (id,a) values (433,81);
+insert into t (id,a) values (433,82);
+insert into t (id,a) values (433,83);
+insert into t (id,a) values (433,84);
+insert into t (id,a) values (433,85);
+insert into t (id,a) values (433,86);
+insert into t (id,a) values (433,87);
+insert into t (id,a) values (433,88);
+insert into t (id,a) values (433,89);
+insert into t (id,a) values (433,90);
+insert into t (id,a) values (433,91);
+insert into t (id,a) values (433,92);
+insert into t (id,a) values (433,93);
+insert into t (id,a) values (433,94);
+insert into t (id,a) values (433,95);
+insert into t (id,a) values (433,96);
+insert into t (id,a) values (433,97);
+insert into t (id,a) values (433,98);
+insert into t (id,a) values (433,99);
+insert into t (id,a) values (434,0);
+insert into t (id,a) values (434,1);
+insert into t (id,a) values (434,2);
+insert into t (id,a) values (434,3);
+insert into t (id,a) values (434,4);
+insert into t (id,a) values (434,5);
+insert into t (id,a) values (434,6);
+insert into t (id,a) values (434,7);
+insert into t (id,a) values (434,8);
+insert into t (id,a) values (434,9);
+insert into t (id,a) values (434,10);
+insert into t (id,a) values (434,11);
+insert into t (id,a) values (434,12);
+insert into t (id,a) values (434,13);
+insert into t (id,a) values (434,14);
+insert into t (id,a) values (434,15);
+insert into t (id,a) values (434,16);
+insert into t (id,a) values (434,17);
+insert into t (id,a) values (434,18);
+insert into t (id,a) values (434,19);
+insert into t (id,a) values (434,20);
+insert into t (id,a) values (434,21);
+insert into t (id,a) values (434,22);
+insert into t (id,a) values (434,23);
+insert into t (id,a) values (434,24);
+insert into t (id,a) values (434,25);
+insert into t (id,a) values (434,26);
+insert into t (id,a) values (434,27);
+insert into t (id,a) values (434,28);
+insert into t (id,a) values (434,29);
+insert into t (id,a) values (434,30);
+insert into t (id,a) values (434,31);
+insert into t (id,a) values (434,32);
+insert into t (id,a) values (434,33);
+insert into t (id,a) values (434,34);
+insert into t (id,a) values (434,35);
+insert into t (id,a) values (434,36);
+insert into t (id,a) values (434,37);
+insert into t (id,a) values (434,38);
+insert into t (id,a) values (434,39);
+insert into t (id,a) values (434,40);
+insert into t (id,a) values (434,41);
+insert into t (id,a) values (434,42);
+insert into t (id,a) values (434,43);
+insert into t (id,a) values (434,44);
+insert into t (id,a) values (434,45);
+insert into t (id,a) values (434,46);
+insert into t (id,a) values (434,47);
+insert into t (id,a) values (434,48);
+insert into t (id,a) values (434,49);
+insert into t (id,a) values (434,50);
+insert into t (id,a) values (434,51);
+insert into t (id,a) values (434,52);
+insert into t (id,a) values (434,53);
+insert into t (id,a) values (434,54);
+insert into t (id,a) values (434,55);
+insert into t (id,a) values (434,56);
+insert into t (id,a) values (434,57);
+insert into t (id,a) values (434,58);
+insert into t (id,a) values (434,59);
+insert into t (id,a) values (434,60);
+insert into t (id,a) values (434,61);
+insert into t (id,a) values (434,62);
+insert into t (id,a) values (434,63);
+insert into t (id,a) values (434,64);
+insert into t (id,a) values (434,65);
+insert into t (id,a) values (434,66);
+insert into t (id,a) values (434,67);
+insert into t (id,a) values (434,68);
+insert into t (id,a) values (434,69);
+insert into t (id,a) values (434,70);
+insert into t (id,a) values (434,71);
+insert into t (id,a) values (434,72);
+insert into t (id,a) values (434,73);
+insert into t (id,a) values (434,74);
+insert into t (id,a) values (434,75);
+insert into t (id,a) values (434,76);
+insert into t (id,a) values (434,77);
+insert into t (id,a) values (434,78);
+insert into t (id,a) values (434,79);
+insert into t (id,a) values (434,80);
+insert into t (id,a) values (434,81);
+insert into t (id,a) values (434,82);
+insert into t (id,a) values (434,83);
+insert into t (id,a) values (434,84);
+insert into t (id,a) values (434,85);
+insert into t (id,a) values (434,86);
+insert into t (id,a) values (434,87);
+insert into t (id,a) values (434,88);
+insert into t (id,a) values (434,89);
+insert into t (id,a) values (434,90);
+insert into t (id,a) values (434,91);
+insert into t (id,a) values (434,92);
+insert into t (id,a) values (434,93);
+insert into t (id,a) values (434,94);
+insert into t (id,a) values (434,95);
+insert into t (id,a) values (434,96);
+insert into t (id,a) values (434,97);
+insert into t (id,a) values (434,98);
+insert into t (id,a) values (434,99);
+insert into t (id,a) values (435,0);
+insert into t (id,a) values (435,1);
+insert into t (id,a) values (435,2);
+insert into t (id,a) values (435,3);
+insert into t (id,a) values (435,4);
+insert into t (id,a) values (435,5);
+insert into t (id,a) values (435,6);
+insert into t (id,a) values (435,7);
+insert into t (id,a) values (435,8);
+insert into t (id,a) values (435,9);
+insert into t (id,a) values (435,10);
+insert into t (id,a) values (435,11);
+insert into t (id,a) values (435,12);
+insert into t (id,a) values (435,13);
+insert into t (id,a) values (435,14);
+insert into t (id,a) values (435,15);
+insert into t (id,a) values (435,16);
+insert into t (id,a) values (435,17);
+insert into t (id,a) values (435,18);
+insert into t (id,a) values (435,19);
+insert into t (id,a) values (435,20);
+insert into t (id,a) values (435,21);
+insert into t (id,a) values (435,22);
+insert into t (id,a) values (435,23);
+insert into t (id,a) values (435,24);
+insert into t (id,a) values (435,25);
+insert into t (id,a) values (435,26);
+insert into t (id,a) values (435,27);
+insert into t (id,a) values (435,28);
+insert into t (id,a) values (435,29);
+insert into t (id,a) values (435,30);
+insert into t (id,a) values (435,31);
+insert into t (id,a) values (435,32);
+insert into t (id,a) values (435,33);
+insert into t (id,a) values (435,34);
+insert into t (id,a) values (435,35);
+insert into t (id,a) values (435,36);
+insert into t (id,a) values (435,37);
+insert into t (id,a) values (435,38);
+insert into t (id,a) values (435,39);
+insert into t (id,a) values (435,40);
+insert into t (id,a) values (435,41);
+insert into t (id,a) values (435,42);
+insert into t (id,a) values (435,43);
+insert into t (id,a) values (435,44);
+insert into t (id,a) values (435,45);
+insert into t (id,a) values (435,46);
+insert into t (id,a) values (435,47);
+insert into t (id,a) values (435,48);
+insert into t (id,a) values (435,49);
+insert into t (id,a) values (435,50);
+insert into t (id,a) values (435,51);
+insert into t (id,a) values (435,52);
+insert into t (id,a) values (435,53);
+insert into t (id,a) values (435,54);
+insert into t (id,a) values (435,55);
+insert into t (id,a) values (435,56);
+insert into t (id,a) values (435,57);
+insert into t (id,a) values (435,58);
+insert into t (id,a) values (435,59);
+insert into t (id,a) values (435,60);
+insert into t (id,a) values (435,61);
+insert into t (id,a) values (435,62);
+insert into t (id,a) values (435,63);
+insert into t (id,a) values (435,64);
+insert into t (id,a) values (435,65);
+insert into t (id,a) values (435,66);
+insert into t (id,a) values (435,67);
+insert into t (id,a) values (435,68);
+insert into t (id,a) values (435,69);
+insert into t (id,a) values (435,70);
+insert into t (id,a) values (435,71);
+insert into t (id,a) values (435,72);
+insert into t (id,a) values (435,73);
+insert into t (id,a) values (435,74);
+insert into t (id,a) values (435,75);
+insert into t (id,a) values (435,76);
+insert into t (id,a) values (435,77);
+insert into t (id,a) values (435,78);
+insert into t (id,a) values (435,79);
+insert into t (id,a) values (435,80);
+insert into t (id,a) values (435,81);
+insert into t (id,a) values (435,82);
+insert into t (id,a) values (435,83);
+insert into t (id,a) values (435,84);
+insert into t (id,a) values (435,85);
+insert into t (id,a) values (435,86);
+insert into t (id,a) values (435,87);
+insert into t (id,a) values (435,88);
+insert into t (id,a) values (435,89);
+insert into t (id,a) values (435,90);
+insert into t (id,a) values (435,91);
+insert into t (id,a) values (435,92);
+insert into t (id,a) values (435,93);
+insert into t (id,a) values (435,94);
+insert into t (id,a) values (435,95);
+insert into t (id,a) values (435,96);
+insert into t (id,a) values (435,97);
+insert into t (id,a) values (435,98);
+insert into t (id,a) values (435,99);
+insert into t (id,a) values (436,0);
+insert into t (id,a) values (436,1);
+insert into t (id,a) values (436,2);
+insert into t (id,a) values (436,3);
+insert into t (id,a) values (436,4);
+insert into t (id,a) values (436,5);
+insert into t (id,a) values (436,6);
+insert into t (id,a) values (436,7);
+insert into t (id,a) values (436,8);
+insert into t (id,a) values (436,9);
+insert into t (id,a) values (436,10);
+insert into t (id,a) values (436,11);
+insert into t (id,a) values (436,12);
+insert into t (id,a) values (436,13);
+insert into t (id,a) values (436,14);
+insert into t (id,a) values (436,15);
+insert into t (id,a) values (436,16);
+insert into t (id,a) values (436,17);
+insert into t (id,a) values (436,18);
+insert into t (id,a) values (436,19);
+insert into t (id,a) values (436,20);
+insert into t (id,a) values (436,21);
+insert into t (id,a) values (436,22);
+insert into t (id,a) values (436,23);
+insert into t (id,a) values (436,24);
+insert into t (id,a) values (436,25);
+insert into t (id,a) values (436,26);
+insert into t (id,a) values (436,27);
+insert into t (id,a) values (436,28);
+insert into t (id,a) values (436,29);
+insert into t (id,a) values (436,30);
+insert into t (id,a) values (436,31);
+insert into t (id,a) values (436,32);
+insert into t (id,a) values (436,33);
+insert into t (id,a) values (436,34);
+insert into t (id,a) values (436,35);
+insert into t (id,a) values (436,36);
+insert into t (id,a) values (436,37);
+insert into t (id,a) values (436,38);
+insert into t (id,a) values (436,39);
+insert into t (id,a) values (436,40);
+insert into t (id,a) values (436,41);
+insert into t (id,a) values (436,42);
+insert into t (id,a) values (436,43);
+insert into t (id,a) values (436,44);
+insert into t (id,a) values (436,45);
+insert into t (id,a) values (436,46);
+insert into t (id,a) values (436,47);
+insert into t (id,a) values (436,48);
+insert into t (id,a) values (436,49);
+insert into t (id,a) values (436,50);
+insert into t (id,a) values (436,51);
+insert into t (id,a) values (436,52);
+insert into t (id,a) values (436,53);
+insert into t (id,a) values (436,54);
+insert into t (id,a) values (436,55);
+insert into t (id,a) values (436,56);
+insert into t (id,a) values (436,57);
+insert into t (id,a) values (436,58);
+insert into t (id,a) values (436,59);
+insert into t (id,a) values (436,60);
+insert into t (id,a) values (436,61);
+insert into t (id,a) values (436,62);
+insert into t (id,a) values (436,63);
+insert into t (id,a) values (436,64);
+insert into t (id,a) values (436,65);
+insert into t (id,a) values (436,66);
+insert into t (id,a) values (436,67);
+insert into t (id,a) values (436,68);
+insert into t (id,a) values (436,69);
+insert into t (id,a) values (436,70);
+insert into t (id,a) values (436,71);
+insert into t (id,a) values (436,72);
+insert into t (id,a) values (436,73);
+insert into t (id,a) values (436,74);
+insert into t (id,a) values (436,75);
+insert into t (id,a) values (436,76);
+insert into t (id,a) values (436,77);
+insert into t (id,a) values (436,78);
+insert into t (id,a) values (436,79);
+insert into t (id,a) values (436,80);
+insert into t (id,a) values (436,81);
+insert into t (id,a) values (436,82);
+insert into t (id,a) values (436,83);
+insert into t (id,a) values (436,84);
+insert into t (id,a) values (436,85);
+insert into t (id,a) values (436,86);
+insert into t (id,a) values (436,87);
+insert into t (id,a) values (436,88);
+insert into t (id,a) values (436,89);
+insert into t (id,a) values (436,90);
+insert into t (id,a) values (436,91);
+insert into t (id,a) values (436,92);
+insert into t (id,a) values (436,93);
+insert into t (id,a) values (436,94);
+insert into t (id,a) values (436,95);
+insert into t (id,a) values (436,96);
+insert into t (id,a) values (436,97);
+insert into t (id,a) values (436,98);
+insert into t (id,a) values (436,99);
+insert into t (id,a) values (437,0);
+insert into t (id,a) values (437,1);
+insert into t (id,a) values (437,2);
+insert into t (id,a) values (437,3);
+insert into t (id,a) values (437,4);
+insert into t (id,a) values (437,5);
+insert into t (id,a) values (437,6);
+insert into t (id,a) values (437,7);
+insert into t (id,a) values (437,8);
+insert into t (id,a) values (437,9);
+insert into t (id,a) values (437,10);
+insert into t (id,a) values (437,11);
+insert into t (id,a) values (437,12);
+insert into t (id,a) values (437,13);
+insert into t (id,a) values (437,14);
+insert into t (id,a) values (437,15);
+insert into t (id,a) values (437,16);
+insert into t (id,a) values (437,17);
+insert into t (id,a) values (437,18);
+insert into t (id,a) values (437,19);
+insert into t (id,a) values (437,20);
+insert into t (id,a) values (437,21);
+insert into t (id,a) values (437,22);
+insert into t (id,a) values (437,23);
+insert into t (id,a) values (437,24);
+insert into t (id,a) values (437,25);
+insert into t (id,a) values (437,26);
+insert into t (id,a) values (437,27);
+insert into t (id,a) values (437,28);
+insert into t (id,a) values (437,29);
+insert into t (id,a) values (437,30);
+insert into t (id,a) values (437,31);
+insert into t (id,a) values (437,32);
+insert into t (id,a) values (437,33);
+insert into t (id,a) values (437,34);
+insert into t (id,a) values (437,35);
+insert into t (id,a) values (437,36);
+insert into t (id,a) values (437,37);
+insert into t (id,a) values (437,38);
+insert into t (id,a) values (437,39);
+insert into t (id,a) values (437,40);
+insert into t (id,a) values (437,41);
+insert into t (id,a) values (437,42);
+insert into t (id,a) values (437,43);
+insert into t (id,a) values (437,44);
+insert into t (id,a) values (437,45);
+insert into t (id,a) values (437,46);
+insert into t (id,a) values (437,47);
+insert into t (id,a) values (437,48);
+insert into t (id,a) values (437,49);
+insert into t (id,a) values (437,50);
+insert into t (id,a) values (437,51);
+insert into t (id,a) values (437,52);
+insert into t (id,a) values (437,53);
+insert into t (id,a) values (437,54);
+insert into t (id,a) values (437,55);
+insert into t (id,a) values (437,56);
+insert into t (id,a) values (437,57);
+insert into t (id,a) values (437,58);
+insert into t (id,a) values (437,59);
+insert into t (id,a) values (437,60);
+insert into t (id,a) values (437,61);
+insert into t (id,a) values (437,62);
+insert into t (id,a) values (437,63);
+insert into t (id,a) values (437,64);
+insert into t (id,a) values (437,65);
+insert into t (id,a) values (437,66);
+insert into t (id,a) values (437,67);
+insert into t (id,a) values (437,68);
+insert into t (id,a) values (437,69);
+insert into t (id,a) values (437,70);
+insert into t (id,a) values (437,71);
+insert into t (id,a) values (437,72);
+insert into t (id,a) values (437,73);
+insert into t (id,a) values (437,74);
+insert into t (id,a) values (437,75);
+insert into t (id,a) values (437,76);
+insert into t (id,a) values (437,77);
+insert into t (id,a) values (437,78);
+insert into t (id,a) values (437,79);
+insert into t (id,a) values (437,80);
+insert into t (id,a) values (437,81);
+insert into t (id,a) values (437,82);
+insert into t (id,a) values (437,83);
+insert into t (id,a) values (437,84);
+insert into t (id,a) values (437,85);
+insert into t (id,a) values (437,86);
+insert into t (id,a) values (437,87);
+insert into t (id,a) values (437,88);
+insert into t (id,a) values (437,89);
+insert into t (id,a) values (437,90);
+insert into t (id,a) values (437,91);
+insert into t (id,a) values (437,92);
+insert into t (id,a) values (437,93);
+insert into t (id,a) values (437,94);
+insert into t (id,a) values (437,95);
+insert into t (id,a) values (437,96);
+insert into t (id,a) values (437,97);
+insert into t (id,a) values (437,98);
+insert into t (id,a) values (437,99);
+insert into t (id,a) values (438,0);
+insert into t (id,a) values (438,1);
+insert into t (id,a) values (438,2);
+insert into t (id,a) values (438,3);
+insert into t (id,a) values (438,4);
+insert into t (id,a) values (438,5);
+insert into t (id,a) values (438,6);
+insert into t (id,a) values (438,7);
+insert into t (id,a) values (438,8);
+insert into t (id,a) values (438,9);
+insert into t (id,a) values (438,10);
+insert into t (id,a) values (438,11);
+insert into t (id,a) values (438,12);
+insert into t (id,a) values (438,13);
+insert into t (id,a) values (438,14);
+insert into t (id,a) values (438,15);
+insert into t (id,a) values (438,16);
+insert into t (id,a) values (438,17);
+insert into t (id,a) values (438,18);
+insert into t (id,a) values (438,19);
+insert into t (id,a) values (438,20);
+insert into t (id,a) values (438,21);
+insert into t (id,a) values (438,22);
+insert into t (id,a) values (438,23);
+insert into t (id,a) values (438,24);
+insert into t (id,a) values (438,25);
+insert into t (id,a) values (438,26);
+insert into t (id,a) values (438,27);
+insert into t (id,a) values (438,28);
+insert into t (id,a) values (438,29);
+insert into t (id,a) values (438,30);
+insert into t (id,a) values (438,31);
+insert into t (id,a) values (438,32);
+insert into t (id,a) values (438,33);
+insert into t (id,a) values (438,34);
+insert into t (id,a) values (438,35);
+insert into t (id,a) values (438,36);
+insert into t (id,a) values (438,37);
+insert into t (id,a) values (438,38);
+insert into t (id,a) values (438,39);
+insert into t (id,a) values (438,40);
+insert into t (id,a) values (438,41);
+insert into t (id,a) values (438,42);
+insert into t (id,a) values (438,43);
+insert into t (id,a) values (438,44);
+insert into t (id,a) values (438,45);
+insert into t (id,a) values (438,46);
+insert into t (id,a) values (438,47);
+insert into t (id,a) values (438,48);
+insert into t (id,a) values (438,49);
+insert into t (id,a) values (438,50);
+insert into t (id,a) values (438,51);
+insert into t (id,a) values (438,52);
+insert into t (id,a) values (438,53);
+insert into t (id,a) values (438,54);
+insert into t (id,a) values (438,55);
+insert into t (id,a) values (438,56);
+insert into t (id,a) values (438,57);
+insert into t (id,a) values (438,58);
+insert into t (id,a) values (438,59);
+insert into t (id,a) values (438,60);
+insert into t (id,a) values (438,61);
+insert into t (id,a) values (438,62);
+insert into t (id,a) values (438,63);
+insert into t (id,a) values (438,64);
+insert into t (id,a) values (438,65);
+insert into t (id,a) values (438,66);
+insert into t (id,a) values (438,67);
+insert into t (id,a) values (438,68);
+insert into t (id,a) values (438,69);
+insert into t (id,a) values (438,70);
+insert into t (id,a) values (438,71);
+insert into t (id,a) values (438,72);
+insert into t (id,a) values (438,73);
+insert into t (id,a) values (438,74);
+insert into t (id,a) values (438,75);
+insert into t (id,a) values (438,76);
+insert into t (id,a) values (438,77);
+insert into t (id,a) values (438,78);
+insert into t (id,a) values (438,79);
+insert into t (id,a) values (438,80);
+insert into t (id,a) values (438,81);
+insert into t (id,a) values (438,82);
+insert into t (id,a) values (438,83);
+insert into t (id,a) values (438,84);
+insert into t (id,a) values (438,85);
+insert into t (id,a) values (438,86);
+insert into t (id,a) values (438,87);
+insert into t (id,a) values (438,88);
+insert into t (id,a) values (438,89);
+insert into t (id,a) values (438,90);
+insert into t (id,a) values (438,91);
+insert into t (id,a) values (438,92);
+insert into t (id,a) values (438,93);
+insert into t (id,a) values (438,94);
+insert into t (id,a) values (438,95);
+insert into t (id,a) values (438,96);
+insert into t (id,a) values (438,97);
+insert into t (id,a) values (438,98);
+insert into t (id,a) values (438,99);
+insert into t (id,a) values (439,0);
+insert into t (id,a) values (439,1);
+insert into t (id,a) values (439,2);
+insert into t (id,a) values (439,3);
+insert into t (id,a) values (439,4);
+insert into t (id,a) values (439,5);
+insert into t (id,a) values (439,6);
+insert into t (id,a) values (439,7);
+insert into t (id,a) values (439,8);
+insert into t (id,a) values (439,9);
+insert into t (id,a) values (439,10);
+insert into t (id,a) values (439,11);
+insert into t (id,a) values (439,12);
+insert into t (id,a) values (439,13);
+insert into t (id,a) values (439,14);
+insert into t (id,a) values (439,15);
+insert into t (id,a) values (439,16);
+insert into t (id,a) values (439,17);
+insert into t (id,a) values (439,18);
+insert into t (id,a) values (439,19);
+insert into t (id,a) values (439,20);
+insert into t (id,a) values (439,21);
+insert into t (id,a) values (439,22);
+insert into t (id,a) values (439,23);
+insert into t (id,a) values (439,24);
+insert into t (id,a) values (439,25);
+insert into t (id,a) values (439,26);
+insert into t (id,a) values (439,27);
+insert into t (id,a) values (439,28);
+insert into t (id,a) values (439,29);
+insert into t (id,a) values (439,30);
+insert into t (id,a) values (439,31);
+insert into t (id,a) values (439,32);
+insert into t (id,a) values (439,33);
+insert into t (id,a) values (439,34);
+insert into t (id,a) values (439,35);
+insert into t (id,a) values (439,36);
+insert into t (id,a) values (439,37);
+insert into t (id,a) values (439,38);
+insert into t (id,a) values (439,39);
+insert into t (id,a) values (439,40);
+insert into t (id,a) values (439,41);
+insert into t (id,a) values (439,42);
+insert into t (id,a) values (439,43);
+insert into t (id,a) values (439,44);
+insert into t (id,a) values (439,45);
+insert into t (id,a) values (439,46);
+insert into t (id,a) values (439,47);
+insert into t (id,a) values (439,48);
+insert into t (id,a) values (439,49);
+insert into t (id,a) values (439,50);
+insert into t (id,a) values (439,51);
+insert into t (id,a) values (439,52);
+insert into t (id,a) values (439,53);
+insert into t (id,a) values (439,54);
+insert into t (id,a) values (439,55);
+insert into t (id,a) values (439,56);
+insert into t (id,a) values (439,57);
+insert into t (id,a) values (439,58);
+insert into t (id,a) values (439,59);
+insert into t (id,a) values (439,60);
+insert into t (id,a) values (439,61);
+insert into t (id,a) values (439,62);
+insert into t (id,a) values (439,63);
+insert into t (id,a) values (439,64);
+insert into t (id,a) values (439,65);
+insert into t (id,a) values (439,66);
+insert into t (id,a) values (439,67);
+insert into t (id,a) values (439,68);
+insert into t (id,a) values (439,69);
+insert into t (id,a) values (439,70);
+insert into t (id,a) values (439,71);
+insert into t (id,a) values (439,72);
+insert into t (id,a) values (439,73);
+insert into t (id,a) values (439,74);
+insert into t (id,a) values (439,75);
+insert into t (id,a) values (439,76);
+insert into t (id,a) values (439,77);
+insert into t (id,a) values (439,78);
+insert into t (id,a) values (439,79);
+insert into t (id,a) values (439,80);
+insert into t (id,a) values (439,81);
+insert into t (id,a) values (439,82);
+insert into t (id,a) values (439,83);
+insert into t (id,a) values (439,84);
+insert into t (id,a) values (439,85);
+insert into t (id,a) values (439,86);
+insert into t (id,a) values (439,87);
+insert into t (id,a) values (439,88);
+insert into t (id,a) values (439,89);
+insert into t (id,a) values (439,90);
+insert into t (id,a) values (439,91);
+insert into t (id,a) values (439,92);
+insert into t (id,a) values (439,93);
+insert into t (id,a) values (439,94);
+insert into t (id,a) values (439,95);
+insert into t (id,a) values (439,96);
+insert into t (id,a) values (439,97);
+insert into t (id,a) values (439,98);
+insert into t (id,a) values (439,99);
+insert into t (id,a) values (440,0);
+insert into t (id,a) values (440,1);
+insert into t (id,a) values (440,2);
+insert into t (id,a) values (440,3);
+insert into t (id,a) values (440,4);
+insert into t (id,a) values (440,5);
+insert into t (id,a) values (440,6);
+insert into t (id,a) values (440,7);
+insert into t (id,a) values (440,8);
+insert into t (id,a) values (440,9);
+insert into t (id,a) values (440,10);
+insert into t (id,a) values (440,11);
+insert into t (id,a) values (440,12);
+insert into t (id,a) values (440,13);
+insert into t (id,a) values (440,14);
+insert into t (id,a) values (440,15);
+insert into t (id,a) values (440,16);
+insert into t (id,a) values (440,17);
+insert into t (id,a) values (440,18);
+insert into t (id,a) values (440,19);
+insert into t (id,a) values (440,20);
+insert into t (id,a) values (440,21);
+insert into t (id,a) values (440,22);
+insert into t (id,a) values (440,23);
+insert into t (id,a) values (440,24);
+insert into t (id,a) values (440,25);
+insert into t (id,a) values (440,26);
+insert into t (id,a) values (440,27);
+insert into t (id,a) values (440,28);
+insert into t (id,a) values (440,29);
+insert into t (id,a) values (440,30);
+insert into t (id,a) values (440,31);
+insert into t (id,a) values (440,32);
+insert into t (id,a) values (440,33);
+insert into t (id,a) values (440,34);
+insert into t (id,a) values (440,35);
+insert into t (id,a) values (440,36);
+insert into t (id,a) values (440,37);
+insert into t (id,a) values (440,38);
+insert into t (id,a) values (440,39);
+insert into t (id,a) values (440,40);
+insert into t (id,a) values (440,41);
+insert into t (id,a) values (440,42);
+insert into t (id,a) values (440,43);
+insert into t (id,a) values (440,44);
+insert into t (id,a) values (440,45);
+insert into t (id,a) values (440,46);
+insert into t (id,a) values (440,47);
+insert into t (id,a) values (440,48);
+insert into t (id,a) values (440,49);
+insert into t (id,a) values (440,50);
+insert into t (id,a) values (440,51);
+insert into t (id,a) values (440,52);
+insert into t (id,a) values (440,53);
+insert into t (id,a) values (440,54);
+insert into t (id,a) values (440,55);
+insert into t (id,a) values (440,56);
+insert into t (id,a) values (440,57);
+insert into t (id,a) values (440,58);
+insert into t (id,a) values (440,59);
+insert into t (id,a) values (440,60);
+insert into t (id,a) values (440,61);
+insert into t (id,a) values (440,62);
+insert into t (id,a) values (440,63);
+insert into t (id,a) values (440,64);
+insert into t (id,a) values (440,65);
+insert into t (id,a) values (440,66);
+insert into t (id,a) values (440,67);
+insert into t (id,a) values (440,68);
+insert into t (id,a) values (440,69);
+insert into t (id,a) values (440,70);
+insert into t (id,a) values (440,71);
+insert into t (id,a) values (440,72);
+insert into t (id,a) values (440,73);
+insert into t (id,a) values (440,74);
+insert into t (id,a) values (440,75);
+insert into t (id,a) values (440,76);
+insert into t (id,a) values (440,77);
+insert into t (id,a) values (440,78);
+insert into t (id,a) values (440,79);
+insert into t (id,a) values (440,80);
+insert into t (id,a) values (440,81);
+insert into t (id,a) values (440,82);
+insert into t (id,a) values (440,83);
+insert into t (id,a) values (440,84);
+insert into t (id,a) values (440,85);
+insert into t (id,a) values (440,86);
+insert into t (id,a) values (440,87);
+insert into t (id,a) values (440,88);
+insert into t (id,a) values (440,89);
+insert into t (id,a) values (440,90);
+insert into t (id,a) values (440,91);
+insert into t (id,a) values (440,92);
+insert into t (id,a) values (440,93);
+insert into t (id,a) values (440,94);
+insert into t (id,a) values (440,95);
+insert into t (id,a) values (440,96);
+insert into t (id,a) values (440,97);
+insert into t (id,a) values (440,98);
+insert into t (id,a) values (440,99);
+insert into t (id,a) values (441,0);
+insert into t (id,a) values (441,1);
+insert into t (id,a) values (441,2);
+insert into t (id,a) values (441,3);
+insert into t (id,a) values (441,4);
+insert into t (id,a) values (441,5);
+insert into t (id,a) values (441,6);
+insert into t (id,a) values (441,7);
+insert into t (id,a) values (441,8);
+insert into t (id,a) values (441,9);
+insert into t (id,a) values (441,10);
+insert into t (id,a) values (441,11);
+insert into t (id,a) values (441,12);
+insert into t (id,a) values (441,13);
+insert into t (id,a) values (441,14);
+insert into t (id,a) values (441,15);
+insert into t (id,a) values (441,16);
+insert into t (id,a) values (441,17);
+insert into t (id,a) values (441,18);
+insert into t (id,a) values (441,19);
+insert into t (id,a) values (441,20);
+insert into t (id,a) values (441,21);
+insert into t (id,a) values (441,22);
+insert into t (id,a) values (441,23);
+insert into t (id,a) values (441,24);
+insert into t (id,a) values (441,25);
+insert into t (id,a) values (441,26);
+insert into t (id,a) values (441,27);
+insert into t (id,a) values (441,28);
+insert into t (id,a) values (441,29);
+insert into t (id,a) values (441,30);
+insert into t (id,a) values (441,31);
+insert into t (id,a) values (441,32);
+insert into t (id,a) values (441,33);
+insert into t (id,a) values (441,34);
+insert into t (id,a) values (441,35);
+insert into t (id,a) values (441,36);
+insert into t (id,a) values (441,37);
+insert into t (id,a) values (441,38);
+insert into t (id,a) values (441,39);
+insert into t (id,a) values (441,40);
+insert into t (id,a) values (441,41);
+insert into t (id,a) values (441,42);
+insert into t (id,a) values (441,43);
+insert into t (id,a) values (441,44);
+insert into t (id,a) values (441,45);
+insert into t (id,a) values (441,46);
+insert into t (id,a) values (441,47);
+insert into t (id,a) values (441,48);
+insert into t (id,a) values (441,49);
+insert into t (id,a) values (441,50);
+insert into t (id,a) values (441,51);
+insert into t (id,a) values (441,52);
+insert into t (id,a) values (441,53);
+insert into t (id,a) values (441,54);
+insert into t (id,a) values (441,55);
+insert into t (id,a) values (441,56);
+insert into t (id,a) values (441,57);
+insert into t (id,a) values (441,58);
+insert into t (id,a) values (441,59);
+insert into t (id,a) values (441,60);
+insert into t (id,a) values (441,61);
+insert into t (id,a) values (441,62);
+insert into t (id,a) values (441,63);
+insert into t (id,a) values (441,64);
+insert into t (id,a) values (441,65);
+insert into t (id,a) values (441,66);
+insert into t (id,a) values (441,67);
+insert into t (id,a) values (441,68);
+insert into t (id,a) values (441,69);
+insert into t (id,a) values (441,70);
+insert into t (id,a) values (441,71);
+insert into t (id,a) values (441,72);
+insert into t (id,a) values (441,73);
+insert into t (id,a) values (441,74);
+insert into t (id,a) values (441,75);
+insert into t (id,a) values (441,76);
+insert into t (id,a) values (441,77);
+insert into t (id,a) values (441,78);
+insert into t (id,a) values (441,79);
+insert into t (id,a) values (441,80);
+insert into t (id,a) values (441,81);
+insert into t (id,a) values (441,82);
+insert into t (id,a) values (441,83);
+insert into t (id,a) values (441,84);
+insert into t (id,a) values (441,85);
+insert into t (id,a) values (441,86);
+insert into t (id,a) values (441,87);
+insert into t (id,a) values (441,88);
+insert into t (id,a) values (441,89);
+insert into t (id,a) values (441,90);
+insert into t (id,a) values (441,91);
+insert into t (id,a) values (441,92);
+insert into t (id,a) values (441,93);
+insert into t (id,a) values (441,94);
+insert into t (id,a) values (441,95);
+insert into t (id,a) values (441,96);
+insert into t (id,a) values (441,97);
+insert into t (id,a) values (441,98);
+insert into t (id,a) values (441,99);
+insert into t (id,a) values (442,0);
+insert into t (id,a) values (442,1);
+insert into t (id,a) values (442,2);
+insert into t (id,a) values (442,3);
+insert into t (id,a) values (442,4);
+insert into t (id,a) values (442,5);
+insert into t (id,a) values (442,6);
+insert into t (id,a) values (442,7);
+insert into t (id,a) values (442,8);
+insert into t (id,a) values (442,9);
+insert into t (id,a) values (442,10);
+insert into t (id,a) values (442,11);
+insert into t (id,a) values (442,12);
+insert into t (id,a) values (442,13);
+insert into t (id,a) values (442,14);
+insert into t (id,a) values (442,15);
+insert into t (id,a) values (442,16);
+insert into t (id,a) values (442,17);
+insert into t (id,a) values (442,18);
+insert into t (id,a) values (442,19);
+insert into t (id,a) values (442,20);
+insert into t (id,a) values (442,21);
+insert into t (id,a) values (442,22);
+insert into t (id,a) values (442,23);
+insert into t (id,a) values (442,24);
+insert into t (id,a) values (442,25);
+insert into t (id,a) values (442,26);
+insert into t (id,a) values (442,27);
+insert into t (id,a) values (442,28);
+insert into t (id,a) values (442,29);
+insert into t (id,a) values (442,30);
+insert into t (id,a) values (442,31);
+insert into t (id,a) values (442,32);
+insert into t (id,a) values (442,33);
+insert into t (id,a) values (442,34);
+insert into t (id,a) values (442,35);
+insert into t (id,a) values (442,36);
+insert into t (id,a) values (442,37);
+insert into t (id,a) values (442,38);
+insert into t (id,a) values (442,39);
+insert into t (id,a) values (442,40);
+insert into t (id,a) values (442,41);
+insert into t (id,a) values (442,42);
+insert into t (id,a) values (442,43);
+insert into t (id,a) values (442,44);
+insert into t (id,a) values (442,45);
+insert into t (id,a) values (442,46);
+insert into t (id,a) values (442,47);
+insert into t (id,a) values (442,48);
+insert into t (id,a) values (442,49);
+insert into t (id,a) values (442,50);
+insert into t (id,a) values (442,51);
+insert into t (id,a) values (442,52);
+insert into t (id,a) values (442,53);
+insert into t (id,a) values (442,54);
+insert into t (id,a) values (442,55);
+insert into t (id,a) values (442,56);
+insert into t (id,a) values (442,57);
+insert into t (id,a) values (442,58);
+insert into t (id,a) values (442,59);
+insert into t (id,a) values (442,60);
+insert into t (id,a) values (442,61);
+insert into t (id,a) values (442,62);
+insert into t (id,a) values (442,63);
+insert into t (id,a) values (442,64);
+insert into t (id,a) values (442,65);
+insert into t (id,a) values (442,66);
+insert into t (id,a) values (442,67);
+insert into t (id,a) values (442,68);
+insert into t (id,a) values (442,69);
+insert into t (id,a) values (442,70);
+insert into t (id,a) values (442,71);
+insert into t (id,a) values (442,72);
+insert into t (id,a) values (442,73);
+insert into t (id,a) values (442,74);
+insert into t (id,a) values (442,75);
+insert into t (id,a) values (442,76);
+insert into t (id,a) values (442,77);
+insert into t (id,a) values (442,78);
+insert into t (id,a) values (442,79);
+insert into t (id,a) values (442,80);
+insert into t (id,a) values (442,81);
+insert into t (id,a) values (442,82);
+insert into t (id,a) values (442,83);
+insert into t (id,a) values (442,84);
+insert into t (id,a) values (442,85);
+insert into t (id,a) values (442,86);
+insert into t (id,a) values (442,87);
+insert into t (id,a) values (442,88);
+insert into t (id,a) values (442,89);
+insert into t (id,a) values (442,90);
+insert into t (id,a) values (442,91);
+insert into t (id,a) values (442,92);
+insert into t (id,a) values (442,93);
+insert into t (id,a) values (442,94);
+insert into t (id,a) values (442,95);
+insert into t (id,a) values (442,96);
+insert into t (id,a) values (442,97);
+insert into t (id,a) values (442,98);
+insert into t (id,a) values (442,99);
+insert into t (id,a) values (443,0);
+insert into t (id,a) values (443,1);
+insert into t (id,a) values (443,2);
+insert into t (id,a) values (443,3);
+insert into t (id,a) values (443,4);
+insert into t (id,a) values (443,5);
+insert into t (id,a) values (443,6);
+insert into t (id,a) values (443,7);
+insert into t (id,a) values (443,8);
+insert into t (id,a) values (443,9);
+insert into t (id,a) values (443,10);
+insert into t (id,a) values (443,11);
+insert into t (id,a) values (443,12);
+insert into t (id,a) values (443,13);
+insert into t (id,a) values (443,14);
+insert into t (id,a) values (443,15);
+insert into t (id,a) values (443,16);
+insert into t (id,a) values (443,17);
+insert into t (id,a) values (443,18);
+insert into t (id,a) values (443,19);
+insert into t (id,a) values (443,20);
+insert into t (id,a) values (443,21);
+insert into t (id,a) values (443,22);
+insert into t (id,a) values (443,23);
+insert into t (id,a) values (443,24);
+insert into t (id,a) values (443,25);
+insert into t (id,a) values (443,26);
+insert into t (id,a) values (443,27);
+insert into t (id,a) values (443,28);
+insert into t (id,a) values (443,29);
+insert into t (id,a) values (443,30);
+insert into t (id,a) values (443,31);
+insert into t (id,a) values (443,32);
+insert into t (id,a) values (443,33);
+insert into t (id,a) values (443,34);
+insert into t (id,a) values (443,35);
+insert into t (id,a) values (443,36);
+insert into t (id,a) values (443,37);
+insert into t (id,a) values (443,38);
+insert into t (id,a) values (443,39);
+insert into t (id,a) values (443,40);
+insert into t (id,a) values (443,41);
+insert into t (id,a) values (443,42);
+insert into t (id,a) values (443,43);
+insert into t (id,a) values (443,44);
+insert into t (id,a) values (443,45);
+insert into t (id,a) values (443,46);
+insert into t (id,a) values (443,47);
+insert into t (id,a) values (443,48);
+insert into t (id,a) values (443,49);
+insert into t (id,a) values (443,50);
+insert into t (id,a) values (443,51);
+insert into t (id,a) values (443,52);
+insert into t (id,a) values (443,53);
+insert into t (id,a) values (443,54);
+insert into t (id,a) values (443,55);
+insert into t (id,a) values (443,56);
+insert into t (id,a) values (443,57);
+insert into t (id,a) values (443,58);
+insert into t (id,a) values (443,59);
+insert into t (id,a) values (443,60);
+insert into t (id,a) values (443,61);
+insert into t (id,a) values (443,62);
+insert into t (id,a) values (443,63);
+insert into t (id,a) values (443,64);
+insert into t (id,a) values (443,65);
+insert into t (id,a) values (443,66);
+insert into t (id,a) values (443,67);
+insert into t (id,a) values (443,68);
+insert into t (id,a) values (443,69);
+insert into t (id,a) values (443,70);
+insert into t (id,a) values (443,71);
+insert into t (id,a) values (443,72);
+insert into t (id,a) values (443,73);
+insert into t (id,a) values (443,74);
+insert into t (id,a) values (443,75);
+insert into t (id,a) values (443,76);
+insert into t (id,a) values (443,77);
+insert into t (id,a) values (443,78);
+insert into t (id,a) values (443,79);
+insert into t (id,a) values (443,80);
+insert into t (id,a) values (443,81);
+insert into t (id,a) values (443,82);
+insert into t (id,a) values (443,83);
+insert into t (id,a) values (443,84);
+insert into t (id,a) values (443,85);
+insert into t (id,a) values (443,86);
+insert into t (id,a) values (443,87);
+insert into t (id,a) values (443,88);
+insert into t (id,a) values (443,89);
+insert into t (id,a) values (443,90);
+insert into t (id,a) values (443,91);
+insert into t (id,a) values (443,92);
+insert into t (id,a) values (443,93);
+insert into t (id,a) values (443,94);
+insert into t (id,a) values (443,95);
+insert into t (id,a) values (443,96);
+insert into t (id,a) values (443,97);
+insert into t (id,a) values (443,98);
+insert into t (id,a) values (443,99);
+insert into t (id,a) values (444,0);
+insert into t (id,a) values (444,1);
+insert into t (id,a) values (444,2);
+insert into t (id,a) values (444,3);
+insert into t (id,a) values (444,4);
+insert into t (id,a) values (444,5);
+insert into t (id,a) values (444,6);
+insert into t (id,a) values (444,7);
+insert into t (id,a) values (444,8);
+insert into t (id,a) values (444,9);
+insert into t (id,a) values (444,10);
+insert into t (id,a) values (444,11);
+insert into t (id,a) values (444,12);
+insert into t (id,a) values (444,13);
+insert into t (id,a) values (444,14);
+insert into t (id,a) values (444,15);
+insert into t (id,a) values (444,16);
+insert into t (id,a) values (444,17);
+insert into t (id,a) values (444,18);
+insert into t (id,a) values (444,19);
+insert into t (id,a) values (444,20);
+insert into t (id,a) values (444,21);
+insert into t (id,a) values (444,22);
+insert into t (id,a) values (444,23);
+insert into t (id,a) values (444,24);
+insert into t (id,a) values (444,25);
+insert into t (id,a) values (444,26);
+insert into t (id,a) values (444,27);
+insert into t (id,a) values (444,28);
+insert into t (id,a) values (444,29);
+insert into t (id,a) values (444,30);
+insert into t (id,a) values (444,31);
+insert into t (id,a) values (444,32);
+insert into t (id,a) values (444,33);
+insert into t (id,a) values (444,34);
+insert into t (id,a) values (444,35);
+insert into t (id,a) values (444,36);
+insert into t (id,a) values (444,37);
+insert into t (id,a) values (444,38);
+insert into t (id,a) values (444,39);
+insert into t (id,a) values (444,40);
+insert into t (id,a) values (444,41);
+insert into t (id,a) values (444,42);
+insert into t (id,a) values (444,43);
+insert into t (id,a) values (444,44);
+insert into t (id,a) values (444,45);
+insert into t (id,a) values (444,46);
+insert into t (id,a) values (444,47);
+insert into t (id,a) values (444,48);
+insert into t (id,a) values (444,49);
+insert into t (id,a) values (444,50);
+insert into t (id,a) values (444,51);
+insert into t (id,a) values (444,52);
+insert into t (id,a) values (444,53);
+insert into t (id,a) values (444,54);
+insert into t (id,a) values (444,55);
+insert into t (id,a) values (444,56);
+insert into t (id,a) values (444,57);
+insert into t (id,a) values (444,58);
+insert into t (id,a) values (444,59);
+insert into t (id,a) values (444,60);
+insert into t (id,a) values (444,61);
+insert into t (id,a) values (444,62);
+insert into t (id,a) values (444,63);
+insert into t (id,a) values (444,64);
+insert into t (id,a) values (444,65);
+insert into t (id,a) values (444,66);
+insert into t (id,a) values (444,67);
+insert into t (id,a) values (444,68);
+insert into t (id,a) values (444,69);
+insert into t (id,a) values (444,70);
+insert into t (id,a) values (444,71);
+insert into t (id,a) values (444,72);
+insert into t (id,a) values (444,73);
+insert into t (id,a) values (444,74);
+insert into t (id,a) values (444,75);
+insert into t (id,a) values (444,76);
+insert into t (id,a) values (444,77);
+insert into t (id,a) values (444,78);
+insert into t (id,a) values (444,79);
+insert into t (id,a) values (444,80);
+insert into t (id,a) values (444,81);
+insert into t (id,a) values (444,82);
+insert into t (id,a) values (444,83);
+insert into t (id,a) values (444,84);
+insert into t (id,a) values (444,85);
+insert into t (id,a) values (444,86);
+insert into t (id,a) values (444,87);
+insert into t (id,a) values (444,88);
+insert into t (id,a) values (444,89);
+insert into t (id,a) values (444,90);
+insert into t (id,a) values (444,91);
+insert into t (id,a) values (444,92);
+insert into t (id,a) values (444,93);
+insert into t (id,a) values (444,94);
+insert into t (id,a) values (444,95);
+insert into t (id,a) values (444,96);
+insert into t (id,a) values (444,97);
+insert into t (id,a) values (444,98);
+insert into t (id,a) values (444,99);
+insert into t (id,a) values (445,0);
+insert into t (id,a) values (445,1);
+insert into t (id,a) values (445,2);
+insert into t (id,a) values (445,3);
+insert into t (id,a) values (445,4);
+insert into t (id,a) values (445,5);
+insert into t (id,a) values (445,6);
+insert into t (id,a) values (445,7);
+insert into t (id,a) values (445,8);
+insert into t (id,a) values (445,9);
+insert into t (id,a) values (445,10);
+insert into t (id,a) values (445,11);
+insert into t (id,a) values (445,12);
+insert into t (id,a) values (445,13);
+insert into t (id,a) values (445,14);
+insert into t (id,a) values (445,15);
+insert into t (id,a) values (445,16);
+insert into t (id,a) values (445,17);
+insert into t (id,a) values (445,18);
+insert into t (id,a) values (445,19);
+insert into t (id,a) values (445,20);
+insert into t (id,a) values (445,21);
+insert into t (id,a) values (445,22);
+insert into t (id,a) values (445,23);
+insert into t (id,a) values (445,24);
+insert into t (id,a) values (445,25);
+insert into t (id,a) values (445,26);
+insert into t (id,a) values (445,27);
+insert into t (id,a) values (445,28);
+insert into t (id,a) values (445,29);
+insert into t (id,a) values (445,30);
+insert into t (id,a) values (445,31);
+insert into t (id,a) values (445,32);
+insert into t (id,a) values (445,33);
+insert into t (id,a) values (445,34);
+insert into t (id,a) values (445,35);
+insert into t (id,a) values (445,36);
+insert into t (id,a) values (445,37);
+insert into t (id,a) values (445,38);
+insert into t (id,a) values (445,39);
+insert into t (id,a) values (445,40);
+insert into t (id,a) values (445,41);
+insert into t (id,a) values (445,42);
+insert into t (id,a) values (445,43);
+insert into t (id,a) values (445,44);
+insert into t (id,a) values (445,45);
+insert into t (id,a) values (445,46);
+insert into t (id,a) values (445,47);
+insert into t (id,a) values (445,48);
+insert into t (id,a) values (445,49);
+insert into t (id,a) values (445,50);
+insert into t (id,a) values (445,51);
+insert into t (id,a) values (445,52);
+insert into t (id,a) values (445,53);
+insert into t (id,a) values (445,54);
+insert into t (id,a) values (445,55);
+insert into t (id,a) values (445,56);
+insert into t (id,a) values (445,57);
+insert into t (id,a) values (445,58);
+insert into t (id,a) values (445,59);
+insert into t (id,a) values (445,60);
+insert into t (id,a) values (445,61);
+insert into t (id,a) values (445,62);
+insert into t (id,a) values (445,63);
+insert into t (id,a) values (445,64);
+insert into t (id,a) values (445,65);
+insert into t (id,a) values (445,66);
+insert into t (id,a) values (445,67);
+insert into t (id,a) values (445,68);
+insert into t (id,a) values (445,69);
+insert into t (id,a) values (445,70);
+insert into t (id,a) values (445,71);
+insert into t (id,a) values (445,72);
+insert into t (id,a) values (445,73);
+insert into t (id,a) values (445,74);
+insert into t (id,a) values (445,75);
+insert into t (id,a) values (445,76);
+insert into t (id,a) values (445,77);
+insert into t (id,a) values (445,78);
+insert into t (id,a) values (445,79);
+insert into t (id,a) values (445,80);
+insert into t (id,a) values (445,81);
+insert into t (id,a) values (445,82);
+insert into t (id,a) values (445,83);
+insert into t (id,a) values (445,84);
+insert into t (id,a) values (445,85);
+insert into t (id,a) values (445,86);
+insert into t (id,a) values (445,87);
+insert into t (id,a) values (445,88);
+insert into t (id,a) values (445,89);
+insert into t (id,a) values (445,90);
+insert into t (id,a) values (445,91);
+insert into t (id,a) values (445,92);
+insert into t (id,a) values (445,93);
+insert into t (id,a) values (445,94);
+insert into t (id,a) values (445,95);
+insert into t (id,a) values (445,96);
+insert into t (id,a) values (445,97);
+insert into t (id,a) values (445,98);
+insert into t (id,a) values (445,99);
+insert into t (id,a) values (446,0);
+insert into t (id,a) values (446,1);
+insert into t (id,a) values (446,2);
+insert into t (id,a) values (446,3);
+insert into t (id,a) values (446,4);
+insert into t (id,a) values (446,5);
+insert into t (id,a) values (446,6);
+insert into t (id,a) values (446,7);
+insert into t (id,a) values (446,8);
+insert into t (id,a) values (446,9);
+insert into t (id,a) values (446,10);
+insert into t (id,a) values (446,11);
+insert into t (id,a) values (446,12);
+insert into t (id,a) values (446,13);
+insert into t (id,a) values (446,14);
+insert into t (id,a) values (446,15);
+insert into t (id,a) values (446,16);
+insert into t (id,a) values (446,17);
+insert into t (id,a) values (446,18);
+insert into t (id,a) values (446,19);
+insert into t (id,a) values (446,20);
+insert into t (id,a) values (446,21);
+insert into t (id,a) values (446,22);
+insert into t (id,a) values (446,23);
+insert into t (id,a) values (446,24);
+insert into t (id,a) values (446,25);
+insert into t (id,a) values (446,26);
+insert into t (id,a) values (446,27);
+insert into t (id,a) values (446,28);
+insert into t (id,a) values (446,29);
+insert into t (id,a) values (446,30);
+insert into t (id,a) values (446,31);
+insert into t (id,a) values (446,32);
+insert into t (id,a) values (446,33);
+insert into t (id,a) values (446,34);
+insert into t (id,a) values (446,35);
+insert into t (id,a) values (446,36);
+insert into t (id,a) values (446,37);
+insert into t (id,a) values (446,38);
+insert into t (id,a) values (446,39);
+insert into t (id,a) values (446,40);
+insert into t (id,a) values (446,41);
+insert into t (id,a) values (446,42);
+insert into t (id,a) values (446,43);
+insert into t (id,a) values (446,44);
+insert into t (id,a) values (446,45);
+insert into t (id,a) values (446,46);
+insert into t (id,a) values (446,47);
+insert into t (id,a) values (446,48);
+insert into t (id,a) values (446,49);
+insert into t (id,a) values (446,50);
+insert into t (id,a) values (446,51);
+insert into t (id,a) values (446,52);
+insert into t (id,a) values (446,53);
+insert into t (id,a) values (446,54);
+insert into t (id,a) values (446,55);
+insert into t (id,a) values (446,56);
+insert into t (id,a) values (446,57);
+insert into t (id,a) values (446,58);
+insert into t (id,a) values (446,59);
+insert into t (id,a) values (446,60);
+insert into t (id,a) values (446,61);
+insert into t (id,a) values (446,62);
+insert into t (id,a) values (446,63);
+insert into t (id,a) values (446,64);
+insert into t (id,a) values (446,65);
+insert into t (id,a) values (446,66);
+insert into t (id,a) values (446,67);
+insert into t (id,a) values (446,68);
+insert into t (id,a) values (446,69);
+insert into t (id,a) values (446,70);
+insert into t (id,a) values (446,71);
+insert into t (id,a) values (446,72);
+insert into t (id,a) values (446,73);
+insert into t (id,a) values (446,74);
+insert into t (id,a) values (446,75);
+insert into t (id,a) values (446,76);
+insert into t (id,a) values (446,77);
+insert into t (id,a) values (446,78);
+insert into t (id,a) values (446,79);
+insert into t (id,a) values (446,80);
+insert into t (id,a) values (446,81);
+insert into t (id,a) values (446,82);
+insert into t (id,a) values (446,83);
+insert into t (id,a) values (446,84);
+insert into t (id,a) values (446,85);
+insert into t (id,a) values (446,86);
+insert into t (id,a) values (446,87);
+insert into t (id,a) values (446,88);
+insert into t (id,a) values (446,89);
+insert into t (id,a) values (446,90);
+insert into t (id,a) values (446,91);
+insert into t (id,a) values (446,92);
+insert into t (id,a) values (446,93);
+insert into t (id,a) values (446,94);
+insert into t (id,a) values (446,95);
+insert into t (id,a) values (446,96);
+insert into t (id,a) values (446,97);
+insert into t (id,a) values (446,98);
+insert into t (id,a) values (446,99);
+insert into t (id,a) values (447,0);
+insert into t (id,a) values (447,1);
+insert into t (id,a) values (447,2);
+insert into t (id,a) values (447,3);
+insert into t (id,a) values (447,4);
+insert into t (id,a) values (447,5);
+insert into t (id,a) values (447,6);
+insert into t (id,a) values (447,7);
+insert into t (id,a) values (447,8);
+insert into t (id,a) values (447,9);
+insert into t (id,a) values (447,10);
+insert into t (id,a) values (447,11);
+insert into t (id,a) values (447,12);
+insert into t (id,a) values (447,13);
+insert into t (id,a) values (447,14);
+insert into t (id,a) values (447,15);
+insert into t (id,a) values (447,16);
+insert into t (id,a) values (447,17);
+insert into t (id,a) values (447,18);
+insert into t (id,a) values (447,19);
+insert into t (id,a) values (447,20);
+insert into t (id,a) values (447,21);
+insert into t (id,a) values (447,22);
+insert into t (id,a) values (447,23);
+insert into t (id,a) values (447,24);
+insert into t (id,a) values (447,25);
+insert into t (id,a) values (447,26);
+insert into t (id,a) values (447,27);
+insert into t (id,a) values (447,28);
+insert into t (id,a) values (447,29);
+insert into t (id,a) values (447,30);
+insert into t (id,a) values (447,31);
+insert into t (id,a) values (447,32);
+insert into t (id,a) values (447,33);
+insert into t (id,a) values (447,34);
+insert into t (id,a) values (447,35);
+insert into t (id,a) values (447,36);
+insert into t (id,a) values (447,37);
+insert into t (id,a) values (447,38);
+insert into t (id,a) values (447,39);
+insert into t (id,a) values (447,40);
+insert into t (id,a) values (447,41);
+insert into t (id,a) values (447,42);
+insert into t (id,a) values (447,43);
+insert into t (id,a) values (447,44);
+insert into t (id,a) values (447,45);
+insert into t (id,a) values (447,46);
+insert into t (id,a) values (447,47);
+insert into t (id,a) values (447,48);
+insert into t (id,a) values (447,49);
+insert into t (id,a) values (447,50);
+insert into t (id,a) values (447,51);
+insert into t (id,a) values (447,52);
+insert into t (id,a) values (447,53);
+insert into t (id,a) values (447,54);
+insert into t (id,a) values (447,55);
+insert into t (id,a) values (447,56);
+insert into t (id,a) values (447,57);
+insert into t (id,a) values (447,58);
+insert into t (id,a) values (447,59);
+insert into t (id,a) values (447,60);
+insert into t (id,a) values (447,61);
+insert into t (id,a) values (447,62);
+insert into t (id,a) values (447,63);
+insert into t (id,a) values (447,64);
+insert into t (id,a) values (447,65);
+insert into t (id,a) values (447,66);
+insert into t (id,a) values (447,67);
+insert into t (id,a) values (447,68);
+insert into t (id,a) values (447,69);
+insert into t (id,a) values (447,70);
+insert into t (id,a) values (447,71);
+insert into t (id,a) values (447,72);
+insert into t (id,a) values (447,73);
+insert into t (id,a) values (447,74);
+insert into t (id,a) values (447,75);
+insert into t (id,a) values (447,76);
+insert into t (id,a) values (447,77);
+insert into t (id,a) values (447,78);
+insert into t (id,a) values (447,79);
+insert into t (id,a) values (447,80);
+insert into t (id,a) values (447,81);
+insert into t (id,a) values (447,82);
+insert into t (id,a) values (447,83);
+insert into t (id,a) values (447,84);
+insert into t (id,a) values (447,85);
+insert into t (id,a) values (447,86);
+insert into t (id,a) values (447,87);
+insert into t (id,a) values (447,88);
+insert into t (id,a) values (447,89);
+insert into t (id,a) values (447,90);
+insert into t (id,a) values (447,91);
+insert into t (id,a) values (447,92);
+insert into t (id,a) values (447,93);
+insert into t (id,a) values (447,94);
+insert into t (id,a) values (447,95);
+insert into t (id,a) values (447,96);
+insert into t (id,a) values (447,97);
+insert into t (id,a) values (447,98);
+insert into t (id,a) values (447,99);
+insert into t (id,a) values (448,0);
+insert into t (id,a) values (448,1);
+insert into t (id,a) values (448,2);
+insert into t (id,a) values (448,3);
+insert into t (id,a) values (448,4);
+insert into t (id,a) values (448,5);
+insert into t (id,a) values (448,6);
+insert into t (id,a) values (448,7);
+insert into t (id,a) values (448,8);
+insert into t (id,a) values (448,9);
+insert into t (id,a) values (448,10);
+insert into t (id,a) values (448,11);
+insert into t (id,a) values (448,12);
+insert into t (id,a) values (448,13);
+insert into t (id,a) values (448,14);
+insert into t (id,a) values (448,15);
+insert into t (id,a) values (448,16);
+insert into t (id,a) values (448,17);
+insert into t (id,a) values (448,18);
+insert into t (id,a) values (448,19);
+insert into t (id,a) values (448,20);
+insert into t (id,a) values (448,21);
+insert into t (id,a) values (448,22);
+insert into t (id,a) values (448,23);
+insert into t (id,a) values (448,24);
+insert into t (id,a) values (448,25);
+insert into t (id,a) values (448,26);
+insert into t (id,a) values (448,27);
+insert into t (id,a) values (448,28);
+insert into t (id,a) values (448,29);
+insert into t (id,a) values (448,30);
+insert into t (id,a) values (448,31);
+insert into t (id,a) values (448,32);
+insert into t (id,a) values (448,33);
+insert into t (id,a) values (448,34);
+insert into t (id,a) values (448,35);
+insert into t (id,a) values (448,36);
+insert into t (id,a) values (448,37);
+insert into t (id,a) values (448,38);
+insert into t (id,a) values (448,39);
+insert into t (id,a) values (448,40);
+insert into t (id,a) values (448,41);
+insert into t (id,a) values (448,42);
+insert into t (id,a) values (448,43);
+insert into t (id,a) values (448,44);
+insert into t (id,a) values (448,45);
+insert into t (id,a) values (448,46);
+insert into t (id,a) values (448,47);
+insert into t (id,a) values (448,48);
+insert into t (id,a) values (448,49);
+insert into t (id,a) values (448,50);
+insert into t (id,a) values (448,51);
+insert into t (id,a) values (448,52);
+insert into t (id,a) values (448,53);
+insert into t (id,a) values (448,54);
+insert into t (id,a) values (448,55);
+insert into t (id,a) values (448,56);
+insert into t (id,a) values (448,57);
+insert into t (id,a) values (448,58);
+insert into t (id,a) values (448,59);
+insert into t (id,a) values (448,60);
+insert into t (id,a) values (448,61);
+insert into t (id,a) values (448,62);
+insert into t (id,a) values (448,63);
+insert into t (id,a) values (448,64);
+insert into t (id,a) values (448,65);
+insert into t (id,a) values (448,66);
+insert into t (id,a) values (448,67);
+insert into t (id,a) values (448,68);
+insert into t (id,a) values (448,69);
+insert into t (id,a) values (448,70);
+insert into t (id,a) values (448,71);
+insert into t (id,a) values (448,72);
+insert into t (id,a) values (448,73);
+insert into t (id,a) values (448,74);
+insert into t (id,a) values (448,75);
+insert into t (id,a) values (448,76);
+insert into t (id,a) values (448,77);
+insert into t (id,a) values (448,78);
+insert into t (id,a) values (448,79);
+insert into t (id,a) values (448,80);
+insert into t (id,a) values (448,81);
+insert into t (id,a) values (448,82);
+insert into t (id,a) values (448,83);
+insert into t (id,a) values (448,84);
+insert into t (id,a) values (448,85);
+insert into t (id,a) values (448,86);
+insert into t (id,a) values (448,87);
+insert into t (id,a) values (448,88);
+insert into t (id,a) values (448,89);
+insert into t (id,a) values (448,90);
+insert into t (id,a) values (448,91);
+insert into t (id,a) values (448,92);
+insert into t (id,a) values (448,93);
+insert into t (id,a) values (448,94);
+insert into t (id,a) values (448,95);
+insert into t (id,a) values (448,96);
+insert into t (id,a) values (448,97);
+insert into t (id,a) values (448,98);
+insert into t (id,a) values (448,99);
+insert into t (id,a) values (449,0);
+insert into t (id,a) values (449,1);
+insert into t (id,a) values (449,2);
+insert into t (id,a) values (449,3);
+insert into t (id,a) values (449,4);
+insert into t (id,a) values (449,5);
+insert into t (id,a) values (449,6);
+insert into t (id,a) values (449,7);
+insert into t (id,a) values (449,8);
+insert into t (id,a) values (449,9);
+insert into t (id,a) values (449,10);
+insert into t (id,a) values (449,11);
+insert into t (id,a) values (449,12);
+insert into t (id,a) values (449,13);
+insert into t (id,a) values (449,14);
+insert into t (id,a) values (449,15);
+insert into t (id,a) values (449,16);
+insert into t (id,a) values (449,17);
+insert into t (id,a) values (449,18);
+insert into t (id,a) values (449,19);
+insert into t (id,a) values (449,20);
+insert into t (id,a) values (449,21);
+insert into t (id,a) values (449,22);
+insert into t (id,a) values (449,23);
+insert into t (id,a) values (449,24);
+insert into t (id,a) values (449,25);
+insert into t (id,a) values (449,26);
+insert into t (id,a) values (449,27);
+insert into t (id,a) values (449,28);
+insert into t (id,a) values (449,29);
+insert into t (id,a) values (449,30);
+insert into t (id,a) values (449,31);
+insert into t (id,a) values (449,32);
+insert into t (id,a) values (449,33);
+insert into t (id,a) values (449,34);
+insert into t (id,a) values (449,35);
+insert into t (id,a) values (449,36);
+insert into t (id,a) values (449,37);
+insert into t (id,a) values (449,38);
+insert into t (id,a) values (449,39);
+insert into t (id,a) values (449,40);
+insert into t (id,a) values (449,41);
+insert into t (id,a) values (449,42);
+insert into t (id,a) values (449,43);
+insert into t (id,a) values (449,44);
+insert into t (id,a) values (449,45);
+insert into t (id,a) values (449,46);
+insert into t (id,a) values (449,47);
+insert into t (id,a) values (449,48);
+insert into t (id,a) values (449,49);
+insert into t (id,a) values (449,50);
+insert into t (id,a) values (449,51);
+insert into t (id,a) values (449,52);
+insert into t (id,a) values (449,53);
+insert into t (id,a) values (449,54);
+insert into t (id,a) values (449,55);
+insert into t (id,a) values (449,56);
+insert into t (id,a) values (449,57);
+insert into t (id,a) values (449,58);
+insert into t (id,a) values (449,59);
+insert into t (id,a) values (449,60);
+insert into t (id,a) values (449,61);
+insert into t (id,a) values (449,62);
+insert into t (id,a) values (449,63);
+insert into t (id,a) values (449,64);
+insert into t (id,a) values (449,65);
+insert into t (id,a) values (449,66);
+insert into t (id,a) values (449,67);
+insert into t (id,a) values (449,68);
+insert into t (id,a) values (449,69);
+insert into t (id,a) values (449,70);
+insert into t (id,a) values (449,71);
+insert into t (id,a) values (449,72);
+insert into t (id,a) values (449,73);
+insert into t (id,a) values (449,74);
+insert into t (id,a) values (449,75);
+insert into t (id,a) values (449,76);
+insert into t (id,a) values (449,77);
+insert into t (id,a) values (449,78);
+insert into t (id,a) values (449,79);
+insert into t (id,a) values (449,80);
+insert into t (id,a) values (449,81);
+insert into t (id,a) values (449,82);
+insert into t (id,a) values (449,83);
+insert into t (id,a) values (449,84);
+insert into t (id,a) values (449,85);
+insert into t (id,a) values (449,86);
+insert into t (id,a) values (449,87);
+insert into t (id,a) values (449,88);
+insert into t (id,a) values (449,89);
+insert into t (id,a) values (449,90);
+insert into t (id,a) values (449,91);
+insert into t (id,a) values (449,92);
+insert into t (id,a) values (449,93);
+insert into t (id,a) values (449,94);
+insert into t (id,a) values (449,95);
+insert into t (id,a) values (449,96);
+insert into t (id,a) values (449,97);
+insert into t (id,a) values (449,98);
+insert into t (id,a) values (449,99);
+insert into t (id,a) values (450,0);
+insert into t (id,a) values (450,1);
+insert into t (id,a) values (450,2);
+insert into t (id,a) values (450,3);
+insert into t (id,a) values (450,4);
+insert into t (id,a) values (450,5);
+insert into t (id,a) values (450,6);
+insert into t (id,a) values (450,7);
+insert into t (id,a) values (450,8);
+insert into t (id,a) values (450,9);
+insert into t (id,a) values (450,10);
+insert into t (id,a) values (450,11);
+insert into t (id,a) values (450,12);
+insert into t (id,a) values (450,13);
+insert into t (id,a) values (450,14);
+insert into t (id,a) values (450,15);
+insert into t (id,a) values (450,16);
+insert into t (id,a) values (450,17);
+insert into t (id,a) values (450,18);
+insert into t (id,a) values (450,19);
+insert into t (id,a) values (450,20);
+insert into t (id,a) values (450,21);
+insert into t (id,a) values (450,22);
+insert into t (id,a) values (450,23);
+insert into t (id,a) values (450,24);
+insert into t (id,a) values (450,25);
+insert into t (id,a) values (450,26);
+insert into t (id,a) values (450,27);
+insert into t (id,a) values (450,28);
+insert into t (id,a) values (450,29);
+insert into t (id,a) values (450,30);
+insert into t (id,a) values (450,31);
+insert into t (id,a) values (450,32);
+insert into t (id,a) values (450,33);
+insert into t (id,a) values (450,34);
+insert into t (id,a) values (450,35);
+insert into t (id,a) values (450,36);
+insert into t (id,a) values (450,37);
+insert into t (id,a) values (450,38);
+insert into t (id,a) values (450,39);
+insert into t (id,a) values (450,40);
+insert into t (id,a) values (450,41);
+insert into t (id,a) values (450,42);
+insert into t (id,a) values (450,43);
+insert into t (id,a) values (450,44);
+insert into t (id,a) values (450,45);
+insert into t (id,a) values (450,46);
+insert into t (id,a) values (450,47);
+insert into t (id,a) values (450,48);
+insert into t (id,a) values (450,49);
+insert into t (id,a) values (450,50);
+insert into t (id,a) values (450,51);
+insert into t (id,a) values (450,52);
+insert into t (id,a) values (450,53);
+insert into t (id,a) values (450,54);
+insert into t (id,a) values (450,55);
+insert into t (id,a) values (450,56);
+insert into t (id,a) values (450,57);
+insert into t (id,a) values (450,58);
+insert into t (id,a) values (450,59);
+insert into t (id,a) values (450,60);
+insert into t (id,a) values (450,61);
+insert into t (id,a) values (450,62);
+insert into t (id,a) values (450,63);
+insert into t (id,a) values (450,64);
+insert into t (id,a) values (450,65);
+insert into t (id,a) values (450,66);
+insert into t (id,a) values (450,67);
+insert into t (id,a) values (450,68);
+insert into t (id,a) values (450,69);
+insert into t (id,a) values (450,70);
+insert into t (id,a) values (450,71);
+insert into t (id,a) values (450,72);
+insert into t (id,a) values (450,73);
+insert into t (id,a) values (450,74);
+insert into t (id,a) values (450,75);
+insert into t (id,a) values (450,76);
+insert into t (id,a) values (450,77);
+insert into t (id,a) values (450,78);
+insert into t (id,a) values (450,79);
+insert into t (id,a) values (450,80);
+insert into t (id,a) values (450,81);
+insert into t (id,a) values (450,82);
+insert into t (id,a) values (450,83);
+insert into t (id,a) values (450,84);
+insert into t (id,a) values (450,85);
+insert into t (id,a) values (450,86);
+insert into t (id,a) values (450,87);
+insert into t (id,a) values (450,88);
+insert into t (id,a) values (450,89);
+insert into t (id,a) values (450,90);
+insert into t (id,a) values (450,91);
+insert into t (id,a) values (450,92);
+insert into t (id,a) values (450,93);
+insert into t (id,a) values (450,94);
+insert into t (id,a) values (450,95);
+insert into t (id,a) values (450,96);
+insert into t (id,a) values (450,97);
+insert into t (id,a) values (450,98);
+insert into t (id,a) values (450,99);
+insert into t (id,a) values (451,0);
+insert into t (id,a) values (451,1);
+insert into t (id,a) values (451,2);
+insert into t (id,a) values (451,3);
+insert into t (id,a) values (451,4);
+insert into t (id,a) values (451,5);
+insert into t (id,a) values (451,6);
+insert into t (id,a) values (451,7);
+insert into t (id,a) values (451,8);
+insert into t (id,a) values (451,9);
+insert into t (id,a) values (451,10);
+insert into t (id,a) values (451,11);
+insert into t (id,a) values (451,12);
+insert into t (id,a) values (451,13);
+insert into t (id,a) values (451,14);
+insert into t (id,a) values (451,15);
+insert into t (id,a) values (451,16);
+insert into t (id,a) values (451,17);
+insert into t (id,a) values (451,18);
+insert into t (id,a) values (451,19);
+insert into t (id,a) values (451,20);
+insert into t (id,a) values (451,21);
+insert into t (id,a) values (451,22);
+insert into t (id,a) values (451,23);
+insert into t (id,a) values (451,24);
+insert into t (id,a) values (451,25);
+insert into t (id,a) values (451,26);
+insert into t (id,a) values (451,27);
+insert into t (id,a) values (451,28);
+insert into t (id,a) values (451,29);
+insert into t (id,a) values (451,30);
+insert into t (id,a) values (451,31);
+insert into t (id,a) values (451,32);
+insert into t (id,a) values (451,33);
+insert into t (id,a) values (451,34);
+insert into t (id,a) values (451,35);
+insert into t (id,a) values (451,36);
+insert into t (id,a) values (451,37);
+insert into t (id,a) values (451,38);
+insert into t (id,a) values (451,39);
+insert into t (id,a) values (451,40);
+insert into t (id,a) values (451,41);
+insert into t (id,a) values (451,42);
+insert into t (id,a) values (451,43);
+insert into t (id,a) values (451,44);
+insert into t (id,a) values (451,45);
+insert into t (id,a) values (451,46);
+insert into t (id,a) values (451,47);
+insert into t (id,a) values (451,48);
+insert into t (id,a) values (451,49);
+insert into t (id,a) values (451,50);
+insert into t (id,a) values (451,51);
+insert into t (id,a) values (451,52);
+insert into t (id,a) values (451,53);
+insert into t (id,a) values (451,54);
+insert into t (id,a) values (451,55);
+insert into t (id,a) values (451,56);
+insert into t (id,a) values (451,57);
+insert into t (id,a) values (451,58);
+insert into t (id,a) values (451,59);
+insert into t (id,a) values (451,60);
+insert into t (id,a) values (451,61);
+insert into t (id,a) values (451,62);
+insert into t (id,a) values (451,63);
+insert into t (id,a) values (451,64);
+insert into t (id,a) values (451,65);
+insert into t (id,a) values (451,66);
+insert into t (id,a) values (451,67);
+insert into t (id,a) values (451,68);
+insert into t (id,a) values (451,69);
+insert into t (id,a) values (451,70);
+insert into t (id,a) values (451,71);
+insert into t (id,a) values (451,72);
+insert into t (id,a) values (451,73);
+insert into t (id,a) values (451,74);
+insert into t (id,a) values (451,75);
+insert into t (id,a) values (451,76);
+insert into t (id,a) values (451,77);
+insert into t (id,a) values (451,78);
+insert into t (id,a) values (451,79);
+insert into t (id,a) values (451,80);
+insert into t (id,a) values (451,81);
+insert into t (id,a) values (451,82);
+insert into t (id,a) values (451,83);
+insert into t (id,a) values (451,84);
+insert into t (id,a) values (451,85);
+insert into t (id,a) values (451,86);
+insert into t (id,a) values (451,87);
+insert into t (id,a) values (451,88);
+insert into t (id,a) values (451,89);
+insert into t (id,a) values (451,90);
+insert into t (id,a) values (451,91);
+insert into t (id,a) values (451,92);
+insert into t (id,a) values (451,93);
+insert into t (id,a) values (451,94);
+insert into t (id,a) values (451,95);
+insert into t (id,a) values (451,96);
+insert into t (id,a) values (451,97);
+insert into t (id,a) values (451,98);
+insert into t (id,a) values (451,99);
+insert into t (id,a) values (452,0);
+insert into t (id,a) values (452,1);
+insert into t (id,a) values (452,2);
+insert into t (id,a) values (452,3);
+insert into t (id,a) values (452,4);
+insert into t (id,a) values (452,5);
+insert into t (id,a) values (452,6);
+insert into t (id,a) values (452,7);
+insert into t (id,a) values (452,8);
+insert into t (id,a) values (452,9);
+insert into t (id,a) values (452,10);
+insert into t (id,a) values (452,11);
+insert into t (id,a) values (452,12);
+insert into t (id,a) values (452,13);
+insert into t (id,a) values (452,14);
+insert into t (id,a) values (452,15);
+insert into t (id,a) values (452,16);
+insert into t (id,a) values (452,17);
+insert into t (id,a) values (452,18);
+insert into t (id,a) values (452,19);
+insert into t (id,a) values (452,20);
+insert into t (id,a) values (452,21);
+insert into t (id,a) values (452,22);
+insert into t (id,a) values (452,23);
+insert into t (id,a) values (452,24);
+insert into t (id,a) values (452,25);
+insert into t (id,a) values (452,26);
+insert into t (id,a) values (452,27);
+insert into t (id,a) values (452,28);
+insert into t (id,a) values (452,29);
+insert into t (id,a) values (452,30);
+insert into t (id,a) values (452,31);
+insert into t (id,a) values (452,32);
+insert into t (id,a) values (452,33);
+insert into t (id,a) values (452,34);
+insert into t (id,a) values (452,35);
+insert into t (id,a) values (452,36);
+insert into t (id,a) values (452,37);
+insert into t (id,a) values (452,38);
+insert into t (id,a) values (452,39);
+insert into t (id,a) values (452,40);
+insert into t (id,a) values (452,41);
+insert into t (id,a) values (452,42);
+insert into t (id,a) values (452,43);
+insert into t (id,a) values (452,44);
+insert into t (id,a) values (452,45);
+insert into t (id,a) values (452,46);
+insert into t (id,a) values (452,47);
+insert into t (id,a) values (452,48);
+insert into t (id,a) values (452,49);
+insert into t (id,a) values (452,50);
+insert into t (id,a) values (452,51);
+insert into t (id,a) values (452,52);
+insert into t (id,a) values (452,53);
+insert into t (id,a) values (452,54);
+insert into t (id,a) values (452,55);
+insert into t (id,a) values (452,56);
+insert into t (id,a) values (452,57);
+insert into t (id,a) values (452,58);
+insert into t (id,a) values (452,59);
+insert into t (id,a) values (452,60);
+insert into t (id,a) values (452,61);
+insert into t (id,a) values (452,62);
+insert into t (id,a) values (452,63);
+insert into t (id,a) values (452,64);
+insert into t (id,a) values (452,65);
+insert into t (id,a) values (452,66);
+insert into t (id,a) values (452,67);
+insert into t (id,a) values (452,68);
+insert into t (id,a) values (452,69);
+insert into t (id,a) values (452,70);
+insert into t (id,a) values (452,71);
+insert into t (id,a) values (452,72);
+insert into t (id,a) values (452,73);
+insert into t (id,a) values (452,74);
+insert into t (id,a) values (452,75);
+insert into t (id,a) values (452,76);
+insert into t (id,a) values (452,77);
+insert into t (id,a) values (452,78);
+insert into t (id,a) values (452,79);
+insert into t (id,a) values (452,80);
+insert into t (id,a) values (452,81);
+insert into t (id,a) values (452,82);
+insert into t (id,a) values (452,83);
+insert into t (id,a) values (452,84);
+insert into t (id,a) values (452,85);
+insert into t (id,a) values (452,86);
+insert into t (id,a) values (452,87);
+insert into t (id,a) values (452,88);
+insert into t (id,a) values (452,89);
+insert into t (id,a) values (452,90);
+insert into t (id,a) values (452,91);
+insert into t (id,a) values (452,92);
+insert into t (id,a) values (452,93);
+insert into t (id,a) values (452,94);
+insert into t (id,a) values (452,95);
+insert into t (id,a) values (452,96);
+insert into t (id,a) values (452,97);
+insert into t (id,a) values (452,98);
+insert into t (id,a) values (452,99);
+insert into t (id,a) values (453,0);
+insert into t (id,a) values (453,1);
+insert into t (id,a) values (453,2);
+insert into t (id,a) values (453,3);
+insert into t (id,a) values (453,4);
+insert into t (id,a) values (453,5);
+insert into t (id,a) values (453,6);
+insert into t (id,a) values (453,7);
+insert into t (id,a) values (453,8);
+insert into t (id,a) values (453,9);
+insert into t (id,a) values (453,10);
+insert into t (id,a) values (453,11);
+insert into t (id,a) values (453,12);
+insert into t (id,a) values (453,13);
+insert into t (id,a) values (453,14);
+insert into t (id,a) values (453,15);
+insert into t (id,a) values (453,16);
+insert into t (id,a) values (453,17);
+insert into t (id,a) values (453,18);
+insert into t (id,a) values (453,19);
+insert into t (id,a) values (453,20);
+insert into t (id,a) values (453,21);
+insert into t (id,a) values (453,22);
+insert into t (id,a) values (453,23);
+insert into t (id,a) values (453,24);
+insert into t (id,a) values (453,25);
+insert into t (id,a) values (453,26);
+insert into t (id,a) values (453,27);
+insert into t (id,a) values (453,28);
+insert into t (id,a) values (453,29);
+insert into t (id,a) values (453,30);
+insert into t (id,a) values (453,31);
+insert into t (id,a) values (453,32);
+insert into t (id,a) values (453,33);
+insert into t (id,a) values (453,34);
+insert into t (id,a) values (453,35);
+insert into t (id,a) values (453,36);
+insert into t (id,a) values (453,37);
+insert into t (id,a) values (453,38);
+insert into t (id,a) values (453,39);
+insert into t (id,a) values (453,40);
+insert into t (id,a) values (453,41);
+insert into t (id,a) values (453,42);
+insert into t (id,a) values (453,43);
+insert into t (id,a) values (453,44);
+insert into t (id,a) values (453,45);
+insert into t (id,a) values (453,46);
+insert into t (id,a) values (453,47);
+insert into t (id,a) values (453,48);
+insert into t (id,a) values (453,49);
+insert into t (id,a) values (453,50);
+insert into t (id,a) values (453,51);
+insert into t (id,a) values (453,52);
+insert into t (id,a) values (453,53);
+insert into t (id,a) values (453,54);
+insert into t (id,a) values (453,55);
+insert into t (id,a) values (453,56);
+insert into t (id,a) values (453,57);
+insert into t (id,a) values (453,58);
+insert into t (id,a) values (453,59);
+insert into t (id,a) values (453,60);
+insert into t (id,a) values (453,61);
+insert into t (id,a) values (453,62);
+insert into t (id,a) values (453,63);
+insert into t (id,a) values (453,64);
+insert into t (id,a) values (453,65);
+insert into t (id,a) values (453,66);
+insert into t (id,a) values (453,67);
+insert into t (id,a) values (453,68);
+insert into t (id,a) values (453,69);
+insert into t (id,a) values (453,70);
+insert into t (id,a) values (453,71);
+insert into t (id,a) values (453,72);
+insert into t (id,a) values (453,73);
+insert into t (id,a) values (453,74);
+insert into t (id,a) values (453,75);
+insert into t (id,a) values (453,76);
+insert into t (id,a) values (453,77);
+insert into t (id,a) values (453,78);
+insert into t (id,a) values (453,79);
+insert into t (id,a) values (453,80);
+insert into t (id,a) values (453,81);
+insert into t (id,a) values (453,82);
+insert into t (id,a) values (453,83);
+insert into t (id,a) values (453,84);
+insert into t (id,a) values (453,85);
+insert into t (id,a) values (453,86);
+insert into t (id,a) values (453,87);
+insert into t (id,a) values (453,88);
+insert into t (id,a) values (453,89);
+insert into t (id,a) values (453,90);
+insert into t (id,a) values (453,91);
+insert into t (id,a) values (453,92);
+insert into t (id,a) values (453,93);
+insert into t (id,a) values (453,94);
+insert into t (id,a) values (453,95);
+insert into t (id,a) values (453,96);
+insert into t (id,a) values (453,97);
+insert into t (id,a) values (453,98);
+insert into t (id,a) values (453,99);
+insert into t (id,a) values (454,0);
+insert into t (id,a) values (454,1);
+insert into t (id,a) values (454,2);
+insert into t (id,a) values (454,3);
+insert into t (id,a) values (454,4);
+insert into t (id,a) values (454,5);
+insert into t (id,a) values (454,6);
+insert into t (id,a) values (454,7);
+insert into t (id,a) values (454,8);
+insert into t (id,a) values (454,9);
+insert into t (id,a) values (454,10);
+insert into t (id,a) values (454,11);
+insert into t (id,a) values (454,12);
+insert into t (id,a) values (454,13);
+insert into t (id,a) values (454,14);
+insert into t (id,a) values (454,15);
+insert into t (id,a) values (454,16);
+insert into t (id,a) values (454,17);
+insert into t (id,a) values (454,18);
+insert into t (id,a) values (454,19);
+insert into t (id,a) values (454,20);
+insert into t (id,a) values (454,21);
+insert into t (id,a) values (454,22);
+insert into t (id,a) values (454,23);
+insert into t (id,a) values (454,24);
+insert into t (id,a) values (454,25);
+insert into t (id,a) values (454,26);
+insert into t (id,a) values (454,27);
+insert into t (id,a) values (454,28);
+insert into t (id,a) values (454,29);
+insert into t (id,a) values (454,30);
+insert into t (id,a) values (454,31);
+insert into t (id,a) values (454,32);
+insert into t (id,a) values (454,33);
+insert into t (id,a) values (454,34);
+insert into t (id,a) values (454,35);
+insert into t (id,a) values (454,36);
+insert into t (id,a) values (454,37);
+insert into t (id,a) values (454,38);
+insert into t (id,a) values (454,39);
+insert into t (id,a) values (454,40);
+insert into t (id,a) values (454,41);
+insert into t (id,a) values (454,42);
+insert into t (id,a) values (454,43);
+insert into t (id,a) values (454,44);
+insert into t (id,a) values (454,45);
+insert into t (id,a) values (454,46);
+insert into t (id,a) values (454,47);
+insert into t (id,a) values (454,48);
+insert into t (id,a) values (454,49);
+insert into t (id,a) values (454,50);
+insert into t (id,a) values (454,51);
+insert into t (id,a) values (454,52);
+insert into t (id,a) values (454,53);
+insert into t (id,a) values (454,54);
+insert into t (id,a) values (454,55);
+insert into t (id,a) values (454,56);
+insert into t (id,a) values (454,57);
+insert into t (id,a) values (454,58);
+insert into t (id,a) values (454,59);
+insert into t (id,a) values (454,60);
+insert into t (id,a) values (454,61);
+insert into t (id,a) values (454,62);
+insert into t (id,a) values (454,63);
+insert into t (id,a) values (454,64);
+insert into t (id,a) values (454,65);
+insert into t (id,a) values (454,66);
+insert into t (id,a) values (454,67);
+insert into t (id,a) values (454,68);
+insert into t (id,a) values (454,69);
+insert into t (id,a) values (454,70);
+insert into t (id,a) values (454,71);
+insert into t (id,a) values (454,72);
+insert into t (id,a) values (454,73);
+insert into t (id,a) values (454,74);
+insert into t (id,a) values (454,75);
+insert into t (id,a) values (454,76);
+insert into t (id,a) values (454,77);
+insert into t (id,a) values (454,78);
+insert into t (id,a) values (454,79);
+insert into t (id,a) values (454,80);
+insert into t (id,a) values (454,81);
+insert into t (id,a) values (454,82);
+insert into t (id,a) values (454,83);
+insert into t (id,a) values (454,84);
+insert into t (id,a) values (454,85);
+insert into t (id,a) values (454,86);
+insert into t (id,a) values (454,87);
+insert into t (id,a) values (454,88);
+insert into t (id,a) values (454,89);
+insert into t (id,a) values (454,90);
+insert into t (id,a) values (454,91);
+insert into t (id,a) values (454,92);
+insert into t (id,a) values (454,93);
+insert into t (id,a) values (454,94);
+insert into t (id,a) values (454,95);
+insert into t (id,a) values (454,96);
+insert into t (id,a) values (454,97);
+insert into t (id,a) values (454,98);
+insert into t (id,a) values (454,99);
+insert into t (id,a) values (455,0);
+insert into t (id,a) values (455,1);
+insert into t (id,a) values (455,2);
+insert into t (id,a) values (455,3);
+insert into t (id,a) values (455,4);
+insert into t (id,a) values (455,5);
+insert into t (id,a) values (455,6);
+insert into t (id,a) values (455,7);
+insert into t (id,a) values (455,8);
+insert into t (id,a) values (455,9);
+insert into t (id,a) values (455,10);
+insert into t (id,a) values (455,11);
+insert into t (id,a) values (455,12);
+insert into t (id,a) values (455,13);
+insert into t (id,a) values (455,14);
+insert into t (id,a) values (455,15);
+insert into t (id,a) values (455,16);
+insert into t (id,a) values (455,17);
+insert into t (id,a) values (455,18);
+insert into t (id,a) values (455,19);
+insert into t (id,a) values (455,20);
+insert into t (id,a) values (455,21);
+insert into t (id,a) values (455,22);
+insert into t (id,a) values (455,23);
+insert into t (id,a) values (455,24);
+insert into t (id,a) values (455,25);
+insert into t (id,a) values (455,26);
+insert into t (id,a) values (455,27);
+insert into t (id,a) values (455,28);
+insert into t (id,a) values (455,29);
+insert into t (id,a) values (455,30);
+insert into t (id,a) values (455,31);
+insert into t (id,a) values (455,32);
+insert into t (id,a) values (455,33);
+insert into t (id,a) values (455,34);
+insert into t (id,a) values (455,35);
+insert into t (id,a) values (455,36);
+insert into t (id,a) values (455,37);
+insert into t (id,a) values (455,38);
+insert into t (id,a) values (455,39);
+insert into t (id,a) values (455,40);
+insert into t (id,a) values (455,41);
+insert into t (id,a) values (455,42);
+insert into t (id,a) values (455,43);
+insert into t (id,a) values (455,44);
+insert into t (id,a) values (455,45);
+insert into t (id,a) values (455,46);
+insert into t (id,a) values (455,47);
+insert into t (id,a) values (455,48);
+insert into t (id,a) values (455,49);
+insert into t (id,a) values (455,50);
+insert into t (id,a) values (455,51);
+insert into t (id,a) values (455,52);
+insert into t (id,a) values (455,53);
+insert into t (id,a) values (455,54);
+insert into t (id,a) values (455,55);
+insert into t (id,a) values (455,56);
+insert into t (id,a) values (455,57);
+insert into t (id,a) values (455,58);
+insert into t (id,a) values (455,59);
+insert into t (id,a) values (455,60);
+insert into t (id,a) values (455,61);
+insert into t (id,a) values (455,62);
+insert into t (id,a) values (455,63);
+insert into t (id,a) values (455,64);
+insert into t (id,a) values (455,65);
+insert into t (id,a) values (455,66);
+insert into t (id,a) values (455,67);
+insert into t (id,a) values (455,68);
+insert into t (id,a) values (455,69);
+insert into t (id,a) values (455,70);
+insert into t (id,a) values (455,71);
+insert into t (id,a) values (455,72);
+insert into t (id,a) values (455,73);
+insert into t (id,a) values (455,74);
+insert into t (id,a) values (455,75);
+insert into t (id,a) values (455,76);
+insert into t (id,a) values (455,77);
+insert into t (id,a) values (455,78);
+insert into t (id,a) values (455,79);
+insert into t (id,a) values (455,80);
+insert into t (id,a) values (455,81);
+insert into t (id,a) values (455,82);
+insert into t (id,a) values (455,83);
+insert into t (id,a) values (455,84);
+insert into t (id,a) values (455,85);
+insert into t (id,a) values (455,86);
+insert into t (id,a) values (455,87);
+insert into t (id,a) values (455,88);
+insert into t (id,a) values (455,89);
+insert into t (id,a) values (455,90);
+insert into t (id,a) values (455,91);
+insert into t (id,a) values (455,92);
+insert into t (id,a) values (455,93);
+insert into t (id,a) values (455,94);
+insert into t (id,a) values (455,95);
+insert into t (id,a) values (455,96);
+insert into t (id,a) values (455,97);
+insert into t (id,a) values (455,98);
+insert into t (id,a) values (455,99);
+insert into t (id,a) values (456,0);
+insert into t (id,a) values (456,1);
+insert into t (id,a) values (456,2);
+insert into t (id,a) values (456,3);
+insert into t (id,a) values (456,4);
+insert into t (id,a) values (456,5);
+insert into t (id,a) values (456,6);
+insert into t (id,a) values (456,7);
+insert into t (id,a) values (456,8);
+insert into t (id,a) values (456,9);
+insert into t (id,a) values (456,10);
+insert into t (id,a) values (456,11);
+insert into t (id,a) values (456,12);
+insert into t (id,a) values (456,13);
+insert into t (id,a) values (456,14);
+insert into t (id,a) values (456,15);
+insert into t (id,a) values (456,16);
+insert into t (id,a) values (456,17);
+insert into t (id,a) values (456,18);
+insert into t (id,a) values (456,19);
+insert into t (id,a) values (456,20);
+insert into t (id,a) values (456,21);
+insert into t (id,a) values (456,22);
+insert into t (id,a) values (456,23);
+insert into t (id,a) values (456,24);
+insert into t (id,a) values (456,25);
+insert into t (id,a) values (456,26);
+insert into t (id,a) values (456,27);
+insert into t (id,a) values (456,28);
+insert into t (id,a) values (456,29);
+insert into t (id,a) values (456,30);
+insert into t (id,a) values (456,31);
+insert into t (id,a) values (456,32);
+insert into t (id,a) values (456,33);
+insert into t (id,a) values (456,34);
+insert into t (id,a) values (456,35);
+insert into t (id,a) values (456,36);
+insert into t (id,a) values (456,37);
+insert into t (id,a) values (456,38);
+insert into t (id,a) values (456,39);
+insert into t (id,a) values (456,40);
+insert into t (id,a) values (456,41);
+insert into t (id,a) values (456,42);
+insert into t (id,a) values (456,43);
+insert into t (id,a) values (456,44);
+insert into t (id,a) values (456,45);
+insert into t (id,a) values (456,46);
+insert into t (id,a) values (456,47);
+insert into t (id,a) values (456,48);
+insert into t (id,a) values (456,49);
+insert into t (id,a) values (456,50);
+insert into t (id,a) values (456,51);
+insert into t (id,a) values (456,52);
+insert into t (id,a) values (456,53);
+insert into t (id,a) values (456,54);
+insert into t (id,a) values (456,55);
+insert into t (id,a) values (456,56);
+insert into t (id,a) values (456,57);
+insert into t (id,a) values (456,58);
+insert into t (id,a) values (456,59);
+insert into t (id,a) values (456,60);
+insert into t (id,a) values (456,61);
+insert into t (id,a) values (456,62);
+insert into t (id,a) values (456,63);
+insert into t (id,a) values (456,64);
+insert into t (id,a) values (456,65);
+insert into t (id,a) values (456,66);
+insert into t (id,a) values (456,67);
+insert into t (id,a) values (456,68);
+insert into t (id,a) values (456,69);
+insert into t (id,a) values (456,70);
+insert into t (id,a) values (456,71);
+insert into t (id,a) values (456,72);
+insert into t (id,a) values (456,73);
+insert into t (id,a) values (456,74);
+insert into t (id,a) values (456,75);
+insert into t (id,a) values (456,76);
+insert into t (id,a) values (456,77);
+insert into t (id,a) values (456,78);
+insert into t (id,a) values (456,79);
+insert into t (id,a) values (456,80);
+insert into t (id,a) values (456,81);
+insert into t (id,a) values (456,82);
+insert into t (id,a) values (456,83);
+insert into t (id,a) values (456,84);
+insert into t (id,a) values (456,85);
+insert into t (id,a) values (456,86);
+insert into t (id,a) values (456,87);
+insert into t (id,a) values (456,88);
+insert into t (id,a) values (456,89);
+insert into t (id,a) values (456,90);
+insert into t (id,a) values (456,91);
+insert into t (id,a) values (456,92);
+insert into t (id,a) values (456,93);
+insert into t (id,a) values (456,94);
+insert into t (id,a) values (456,95);
+insert into t (id,a) values (456,96);
+insert into t (id,a) values (456,97);
+insert into t (id,a) values (456,98);
+insert into t (id,a) values (456,99);
+insert into t (id,a) values (457,0);
+insert into t (id,a) values (457,1);
+insert into t (id,a) values (457,2);
+insert into t (id,a) values (457,3);
+insert into t (id,a) values (457,4);
+insert into t (id,a) values (457,5);
+insert into t (id,a) values (457,6);
+insert into t (id,a) values (457,7);
+insert into t (id,a) values (457,8);
+insert into t (id,a) values (457,9);
+insert into t (id,a) values (457,10);
+insert into t (id,a) values (457,11);
+insert into t (id,a) values (457,12);
+insert into t (id,a) values (457,13);
+insert into t (id,a) values (457,14);
+insert into t (id,a) values (457,15);
+insert into t (id,a) values (457,16);
+insert into t (id,a) values (457,17);
+insert into t (id,a) values (457,18);
+insert into t (id,a) values (457,19);
+insert into t (id,a) values (457,20);
+insert into t (id,a) values (457,21);
+insert into t (id,a) values (457,22);
+insert into t (id,a) values (457,23);
+insert into t (id,a) values (457,24);
+insert into t (id,a) values (457,25);
+insert into t (id,a) values (457,26);
+insert into t (id,a) values (457,27);
+insert into t (id,a) values (457,28);
+insert into t (id,a) values (457,29);
+insert into t (id,a) values (457,30);
+insert into t (id,a) values (457,31);
+insert into t (id,a) values (457,32);
+insert into t (id,a) values (457,33);
+insert into t (id,a) values (457,34);
+insert into t (id,a) values (457,35);
+insert into t (id,a) values (457,36);
+insert into t (id,a) values (457,37);
+insert into t (id,a) values (457,38);
+insert into t (id,a) values (457,39);
+insert into t (id,a) values (457,40);
+insert into t (id,a) values (457,41);
+insert into t (id,a) values (457,42);
+insert into t (id,a) values (457,43);
+insert into t (id,a) values (457,44);
+insert into t (id,a) values (457,45);
+insert into t (id,a) values (457,46);
+insert into t (id,a) values (457,47);
+insert into t (id,a) values (457,48);
+insert into t (id,a) values (457,49);
+insert into t (id,a) values (457,50);
+insert into t (id,a) values (457,51);
+insert into t (id,a) values (457,52);
+insert into t (id,a) values (457,53);
+insert into t (id,a) values (457,54);
+insert into t (id,a) values (457,55);
+insert into t (id,a) values (457,56);
+insert into t (id,a) values (457,57);
+insert into t (id,a) values (457,58);
+insert into t (id,a) values (457,59);
+insert into t (id,a) values (457,60);
+insert into t (id,a) values (457,61);
+insert into t (id,a) values (457,62);
+insert into t (id,a) values (457,63);
+insert into t (id,a) values (457,64);
+insert into t (id,a) values (457,65);
+insert into t (id,a) values (457,66);
+insert into t (id,a) values (457,67);
+insert into t (id,a) values (457,68);
+insert into t (id,a) values (457,69);
+insert into t (id,a) values (457,70);
+insert into t (id,a) values (457,71);
+insert into t (id,a) values (457,72);
+insert into t (id,a) values (457,73);
+insert into t (id,a) values (457,74);
+insert into t (id,a) values (457,75);
+insert into t (id,a) values (457,76);
+insert into t (id,a) values (457,77);
+insert into t (id,a) values (457,78);
+insert into t (id,a) values (457,79);
+insert into t (id,a) values (457,80);
+insert into t (id,a) values (457,81);
+insert into t (id,a) values (457,82);
+insert into t (id,a) values (457,83);
+insert into t (id,a) values (457,84);
+insert into t (id,a) values (457,85);
+insert into t (id,a) values (457,86);
+insert into t (id,a) values (457,87);
+insert into t (id,a) values (457,88);
+insert into t (id,a) values (457,89);
+insert into t (id,a) values (457,90);
+insert into t (id,a) values (457,91);
+insert into t (id,a) values (457,92);
+insert into t (id,a) values (457,93);
+insert into t (id,a) values (457,94);
+insert into t (id,a) values (457,95);
+insert into t (id,a) values (457,96);
+insert into t (id,a) values (457,97);
+insert into t (id,a) values (457,98);
+insert into t (id,a) values (457,99);
+insert into t (id,a) values (458,0);
+insert into t (id,a) values (458,1);
+insert into t (id,a) values (458,2);
+insert into t (id,a) values (458,3);
+insert into t (id,a) values (458,4);
+insert into t (id,a) values (458,5);
+insert into t (id,a) values (458,6);
+insert into t (id,a) values (458,7);
+insert into t (id,a) values (458,8);
+insert into t (id,a) values (458,9);
+insert into t (id,a) values (458,10);
+insert into t (id,a) values (458,11);
+insert into t (id,a) values (458,12);
+insert into t (id,a) values (458,13);
+insert into t (id,a) values (458,14);
+insert into t (id,a) values (458,15);
+insert into t (id,a) values (458,16);
+insert into t (id,a) values (458,17);
+insert into t (id,a) values (458,18);
+insert into t (id,a) values (458,19);
+insert into t (id,a) values (458,20);
+insert into t (id,a) values (458,21);
+insert into t (id,a) values (458,22);
+insert into t (id,a) values (458,23);
+insert into t (id,a) values (458,24);
+insert into t (id,a) values (458,25);
+insert into t (id,a) values (458,26);
+insert into t (id,a) values (458,27);
+insert into t (id,a) values (458,28);
+insert into t (id,a) values (458,29);
+insert into t (id,a) values (458,30);
+insert into t (id,a) values (458,31);
+insert into t (id,a) values (458,32);
+insert into t (id,a) values (458,33);
+insert into t (id,a) values (458,34);
+insert into t (id,a) values (458,35);
+insert into t (id,a) values (458,36);
+insert into t (id,a) values (458,37);
+insert into t (id,a) values (458,38);
+insert into t (id,a) values (458,39);
+insert into t (id,a) values (458,40);
+insert into t (id,a) values (458,41);
+insert into t (id,a) values (458,42);
+insert into t (id,a) values (458,43);
+insert into t (id,a) values (458,44);
+insert into t (id,a) values (458,45);
+insert into t (id,a) values (458,46);
+insert into t (id,a) values (458,47);
+insert into t (id,a) values (458,48);
+insert into t (id,a) values (458,49);
+insert into t (id,a) values (458,50);
+insert into t (id,a) values (458,51);
+insert into t (id,a) values (458,52);
+insert into t (id,a) values (458,53);
+insert into t (id,a) values (458,54);
+insert into t (id,a) values (458,55);
+insert into t (id,a) values (458,56);
+insert into t (id,a) values (458,57);
+insert into t (id,a) values (458,58);
+insert into t (id,a) values (458,59);
+insert into t (id,a) values (458,60);
+insert into t (id,a) values (458,61);
+insert into t (id,a) values (458,62);
+insert into t (id,a) values (458,63);
+insert into t (id,a) values (458,64);
+insert into t (id,a) values (458,65);
+insert into t (id,a) values (458,66);
+insert into t (id,a) values (458,67);
+insert into t (id,a) values (458,68);
+insert into t (id,a) values (458,69);
+insert into t (id,a) values (458,70);
+insert into t (id,a) values (458,71);
+insert into t (id,a) values (458,72);
+insert into t (id,a) values (458,73);
+insert into t (id,a) values (458,74);
+insert into t (id,a) values (458,75);
+insert into t (id,a) values (458,76);
+insert into t (id,a) values (458,77);
+insert into t (id,a) values (458,78);
+insert into t (id,a) values (458,79);
+insert into t (id,a) values (458,80);
+insert into t (id,a) values (458,81);
+insert into t (id,a) values (458,82);
+insert into t (id,a) values (458,83);
+insert into t (id,a) values (458,84);
+insert into t (id,a) values (458,85);
+insert into t (id,a) values (458,86);
+insert into t (id,a) values (458,87);
+insert into t (id,a) values (458,88);
+insert into t (id,a) values (458,89);
+insert into t (id,a) values (458,90);
+insert into t (id,a) values (458,91);
+insert into t (id,a) values (458,92);
+insert into t (id,a) values (458,93);
+insert into t (id,a) values (458,94);
+insert into t (id,a) values (458,95);
+insert into t (id,a) values (458,96);
+insert into t (id,a) values (458,97);
+insert into t (id,a) values (458,98);
+insert into t (id,a) values (458,99);
+insert into t (id,a) values (459,0);
+insert into t (id,a) values (459,1);
+insert into t (id,a) values (459,2);
+insert into t (id,a) values (459,3);
+insert into t (id,a) values (459,4);
+insert into t (id,a) values (459,5);
+insert into t (id,a) values (459,6);
+insert into t (id,a) values (459,7);
+insert into t (id,a) values (459,8);
+insert into t (id,a) values (459,9);
+insert into t (id,a) values (459,10);
+insert into t (id,a) values (459,11);
+insert into t (id,a) values (459,12);
+insert into t (id,a) values (459,13);
+insert into t (id,a) values (459,14);
+insert into t (id,a) values (459,15);
+insert into t (id,a) values (459,16);
+insert into t (id,a) values (459,17);
+insert into t (id,a) values (459,18);
+insert into t (id,a) values (459,19);
+insert into t (id,a) values (459,20);
+insert into t (id,a) values (459,21);
+insert into t (id,a) values (459,22);
+insert into t (id,a) values (459,23);
+insert into t (id,a) values (459,24);
+insert into t (id,a) values (459,25);
+insert into t (id,a) values (459,26);
+insert into t (id,a) values (459,27);
+insert into t (id,a) values (459,28);
+insert into t (id,a) values (459,29);
+insert into t (id,a) values (459,30);
+insert into t (id,a) values (459,31);
+insert into t (id,a) values (459,32);
+insert into t (id,a) values (459,33);
+insert into t (id,a) values (459,34);
+insert into t (id,a) values (459,35);
+insert into t (id,a) values (459,36);
+insert into t (id,a) values (459,37);
+insert into t (id,a) values (459,38);
+insert into t (id,a) values (459,39);
+insert into t (id,a) values (459,40);
+insert into t (id,a) values (459,41);
+insert into t (id,a) values (459,42);
+insert into t (id,a) values (459,43);
+insert into t (id,a) values (459,44);
+insert into t (id,a) values (459,45);
+insert into t (id,a) values (459,46);
+insert into t (id,a) values (459,47);
+insert into t (id,a) values (459,48);
+insert into t (id,a) values (459,49);
+insert into t (id,a) values (459,50);
+insert into t (id,a) values (459,51);
+insert into t (id,a) values (459,52);
+insert into t (id,a) values (459,53);
+insert into t (id,a) values (459,54);
+insert into t (id,a) values (459,55);
+insert into t (id,a) values (459,56);
+insert into t (id,a) values (459,57);
+insert into t (id,a) values (459,58);
+insert into t (id,a) values (459,59);
+insert into t (id,a) values (459,60);
+insert into t (id,a) values (459,61);
+insert into t (id,a) values (459,62);
+insert into t (id,a) values (459,63);
+insert into t (id,a) values (459,64);
+insert into t (id,a) values (459,65);
+insert into t (id,a) values (459,66);
+insert into t (id,a) values (459,67);
+insert into t (id,a) values (459,68);
+insert into t (id,a) values (459,69);
+insert into t (id,a) values (459,70);
+insert into t (id,a) values (459,71);
+insert into t (id,a) values (459,72);
+insert into t (id,a) values (459,73);
+insert into t (id,a) values (459,74);
+insert into t (id,a) values (459,75);
+insert into t (id,a) values (459,76);
+insert into t (id,a) values (459,77);
+insert into t (id,a) values (459,78);
+insert into t (id,a) values (459,79);
+insert into t (id,a) values (459,80);
+insert into t (id,a) values (459,81);
+insert into t (id,a) values (459,82);
+insert into t (id,a) values (459,83);
+insert into t (id,a) values (459,84);
+insert into t (id,a) values (459,85);
+insert into t (id,a) values (459,86);
+insert into t (id,a) values (459,87);
+insert into t (id,a) values (459,88);
+insert into t (id,a) values (459,89);
+insert into t (id,a) values (459,90);
+insert into t (id,a) values (459,91);
+insert into t (id,a) values (459,92);
+insert into t (id,a) values (459,93);
+insert into t (id,a) values (459,94);
+insert into t (id,a) values (459,95);
+insert into t (id,a) values (459,96);
+insert into t (id,a) values (459,97);
+insert into t (id,a) values (459,98);
+insert into t (id,a) values (459,99);
+insert into t (id,a) values (460,0);
+insert into t (id,a) values (460,1);
+insert into t (id,a) values (460,2);
+insert into t (id,a) values (460,3);
+insert into t (id,a) values (460,4);
+insert into t (id,a) values (460,5);
+insert into t (id,a) values (460,6);
+insert into t (id,a) values (460,7);
+insert into t (id,a) values (460,8);
+insert into t (id,a) values (460,9);
+insert into t (id,a) values (460,10);
+insert into t (id,a) values (460,11);
+insert into t (id,a) values (460,12);
+insert into t (id,a) values (460,13);
+insert into t (id,a) values (460,14);
+insert into t (id,a) values (460,15);
+insert into t (id,a) values (460,16);
+insert into t (id,a) values (460,17);
+insert into t (id,a) values (460,18);
+insert into t (id,a) values (460,19);
+insert into t (id,a) values (460,20);
+insert into t (id,a) values (460,21);
+insert into t (id,a) values (460,22);
+insert into t (id,a) values (460,23);
+insert into t (id,a) values (460,24);
+insert into t (id,a) values (460,25);
+insert into t (id,a) values (460,26);
+insert into t (id,a) values (460,27);
+insert into t (id,a) values (460,28);
+insert into t (id,a) values (460,29);
+insert into t (id,a) values (460,30);
+insert into t (id,a) values (460,31);
+insert into t (id,a) values (460,32);
+insert into t (id,a) values (460,33);
+insert into t (id,a) values (460,34);
+insert into t (id,a) values (460,35);
+insert into t (id,a) values (460,36);
+insert into t (id,a) values (460,37);
+insert into t (id,a) values (460,38);
+insert into t (id,a) values (460,39);
+insert into t (id,a) values (460,40);
+insert into t (id,a) values (460,41);
+insert into t (id,a) values (460,42);
+insert into t (id,a) values (460,43);
+insert into t (id,a) values (460,44);
+insert into t (id,a) values (460,45);
+insert into t (id,a) values (460,46);
+insert into t (id,a) values (460,47);
+insert into t (id,a) values (460,48);
+insert into t (id,a) values (460,49);
+insert into t (id,a) values (460,50);
+insert into t (id,a) values (460,51);
+insert into t (id,a) values (460,52);
+insert into t (id,a) values (460,53);
+insert into t (id,a) values (460,54);
+insert into t (id,a) values (460,55);
+insert into t (id,a) values (460,56);
+insert into t (id,a) values (460,57);
+insert into t (id,a) values (460,58);
+insert into t (id,a) values (460,59);
+insert into t (id,a) values (460,60);
+insert into t (id,a) values (460,61);
+insert into t (id,a) values (460,62);
+insert into t (id,a) values (460,63);
+insert into t (id,a) values (460,64);
+insert into t (id,a) values (460,65);
+insert into t (id,a) values (460,66);
+insert into t (id,a) values (460,67);
+insert into t (id,a) values (460,68);
+insert into t (id,a) values (460,69);
+insert into t (id,a) values (460,70);
+insert into t (id,a) values (460,71);
+insert into t (id,a) values (460,72);
+insert into t (id,a) values (460,73);
+insert into t (id,a) values (460,74);
+insert into t (id,a) values (460,75);
+insert into t (id,a) values (460,76);
+insert into t (id,a) values (460,77);
+insert into t (id,a) values (460,78);
+insert into t (id,a) values (460,79);
+insert into t (id,a) values (460,80);
+insert into t (id,a) values (460,81);
+insert into t (id,a) values (460,82);
+insert into t (id,a) values (460,83);
+insert into t (id,a) values (460,84);
+insert into t (id,a) values (460,85);
+insert into t (id,a) values (460,86);
+insert into t (id,a) values (460,87);
+insert into t (id,a) values (460,88);
+insert into t (id,a) values (460,89);
+insert into t (id,a) values (460,90);
+insert into t (id,a) values (460,91);
+insert into t (id,a) values (460,92);
+insert into t (id,a) values (460,93);
+insert into t (id,a) values (460,94);
+insert into t (id,a) values (460,95);
+insert into t (id,a) values (460,96);
+insert into t (id,a) values (460,97);
+insert into t (id,a) values (460,98);
+insert into t (id,a) values (460,99);
+insert into t (id,a) values (461,0);
+insert into t (id,a) values (461,1);
+insert into t (id,a) values (461,2);
+insert into t (id,a) values (461,3);
+insert into t (id,a) values (461,4);
+insert into t (id,a) values (461,5);
+insert into t (id,a) values (461,6);
+insert into t (id,a) values (461,7);
+insert into t (id,a) values (461,8);
+insert into t (id,a) values (461,9);
+insert into t (id,a) values (461,10);
+insert into t (id,a) values (461,11);
+insert into t (id,a) values (461,12);
+insert into t (id,a) values (461,13);
+insert into t (id,a) values (461,14);
+insert into t (id,a) values (461,15);
+insert into t (id,a) values (461,16);
+insert into t (id,a) values (461,17);
+insert into t (id,a) values (461,18);
+insert into t (id,a) values (461,19);
+insert into t (id,a) values (461,20);
+insert into t (id,a) values (461,21);
+insert into t (id,a) values (461,22);
+insert into t (id,a) values (461,23);
+insert into t (id,a) values (461,24);
+insert into t (id,a) values (461,25);
+insert into t (id,a) values (461,26);
+insert into t (id,a) values (461,27);
+insert into t (id,a) values (461,28);
+insert into t (id,a) values (461,29);
+insert into t (id,a) values (461,30);
+insert into t (id,a) values (461,31);
+insert into t (id,a) values (461,32);
+insert into t (id,a) values (461,33);
+insert into t (id,a) values (461,34);
+insert into t (id,a) values (461,35);
+insert into t (id,a) values (461,36);
+insert into t (id,a) values (461,37);
+insert into t (id,a) values (461,38);
+insert into t (id,a) values (461,39);
+insert into t (id,a) values (461,40);
+insert into t (id,a) values (461,41);
+insert into t (id,a) values (461,42);
+insert into t (id,a) values (461,43);
+insert into t (id,a) values (461,44);
+insert into t (id,a) values (461,45);
+insert into t (id,a) values (461,46);
+insert into t (id,a) values (461,47);
+insert into t (id,a) values (461,48);
+insert into t (id,a) values (461,49);
+insert into t (id,a) values (461,50);
+insert into t (id,a) values (461,51);
+insert into t (id,a) values (461,52);
+insert into t (id,a) values (461,53);
+insert into t (id,a) values (461,54);
+insert into t (id,a) values (461,55);
+insert into t (id,a) values (461,56);
+insert into t (id,a) values (461,57);
+insert into t (id,a) values (461,58);
+insert into t (id,a) values (461,59);
+insert into t (id,a) values (461,60);
+insert into t (id,a) values (461,61);
+insert into t (id,a) values (461,62);
+insert into t (id,a) values (461,63);
+insert into t (id,a) values (461,64);
+insert into t (id,a) values (461,65);
+insert into t (id,a) values (461,66);
+insert into t (id,a) values (461,67);
+insert into t (id,a) values (461,68);
+insert into t (id,a) values (461,69);
+insert into t (id,a) values (461,70);
+insert into t (id,a) values (461,71);
+insert into t (id,a) values (461,72);
+insert into t (id,a) values (461,73);
+insert into t (id,a) values (461,74);
+insert into t (id,a) values (461,75);
+insert into t (id,a) values (461,76);
+insert into t (id,a) values (461,77);
+insert into t (id,a) values (461,78);
+insert into t (id,a) values (461,79);
+insert into t (id,a) values (461,80);
+insert into t (id,a) values (461,81);
+insert into t (id,a) values (461,82);
+insert into t (id,a) values (461,83);
+insert into t (id,a) values (461,84);
+insert into t (id,a) values (461,85);
+insert into t (id,a) values (461,86);
+insert into t (id,a) values (461,87);
+insert into t (id,a) values (461,88);
+insert into t (id,a) values (461,89);
+insert into t (id,a) values (461,90);
+insert into t (id,a) values (461,91);
+insert into t (id,a) values (461,92);
+insert into t (id,a) values (461,93);
+insert into t (id,a) values (461,94);
+insert into t (id,a) values (461,95);
+insert into t (id,a) values (461,96);
+insert into t (id,a) values (461,97);
+insert into t (id,a) values (461,98);
+insert into t (id,a) values (461,99);
+insert into t (id,a) values (462,0);
+insert into t (id,a) values (462,1);
+insert into t (id,a) values (462,2);
+insert into t (id,a) values (462,3);
+insert into t (id,a) values (462,4);
+insert into t (id,a) values (462,5);
+insert into t (id,a) values (462,6);
+insert into t (id,a) values (462,7);
+insert into t (id,a) values (462,8);
+insert into t (id,a) values (462,9);
+insert into t (id,a) values (462,10);
+insert into t (id,a) values (462,11);
+insert into t (id,a) values (462,12);
+insert into t (id,a) values (462,13);
+insert into t (id,a) values (462,14);
+insert into t (id,a) values (462,15);
+insert into t (id,a) values (462,16);
+insert into t (id,a) values (462,17);
+insert into t (id,a) values (462,18);
+insert into t (id,a) values (462,19);
+insert into t (id,a) values (462,20);
+insert into t (id,a) values (462,21);
+insert into t (id,a) values (462,22);
+insert into t (id,a) values (462,23);
+insert into t (id,a) values (462,24);
+insert into t (id,a) values (462,25);
+insert into t (id,a) values (462,26);
+insert into t (id,a) values (462,27);
+insert into t (id,a) values (462,28);
+insert into t (id,a) values (462,29);
+insert into t (id,a) values (462,30);
+insert into t (id,a) values (462,31);
+insert into t (id,a) values (462,32);
+insert into t (id,a) values (462,33);
+insert into t (id,a) values (462,34);
+insert into t (id,a) values (462,35);
+insert into t (id,a) values (462,36);
+insert into t (id,a) values (462,37);
+insert into t (id,a) values (462,38);
+insert into t (id,a) values (462,39);
+insert into t (id,a) values (462,40);
+insert into t (id,a) values (462,41);
+insert into t (id,a) values (462,42);
+insert into t (id,a) values (462,43);
+insert into t (id,a) values (462,44);
+insert into t (id,a) values (462,45);
+insert into t (id,a) values (462,46);
+insert into t (id,a) values (462,47);
+insert into t (id,a) values (462,48);
+insert into t (id,a) values (462,49);
+insert into t (id,a) values (462,50);
+insert into t (id,a) values (462,51);
+insert into t (id,a) values (462,52);
+insert into t (id,a) values (462,53);
+insert into t (id,a) values (462,54);
+insert into t (id,a) values (462,55);
+insert into t (id,a) values (462,56);
+insert into t (id,a) values (462,57);
+insert into t (id,a) values (462,58);
+insert into t (id,a) values (462,59);
+insert into t (id,a) values (462,60);
+insert into t (id,a) values (462,61);
+insert into t (id,a) values (462,62);
+insert into t (id,a) values (462,63);
+insert into t (id,a) values (462,64);
+insert into t (id,a) values (462,65);
+insert into t (id,a) values (462,66);
+insert into t (id,a) values (462,67);
+insert into t (id,a) values (462,68);
+insert into t (id,a) values (462,69);
+insert into t (id,a) values (462,70);
+insert into t (id,a) values (462,71);
+insert into t (id,a) values (462,72);
+insert into t (id,a) values (462,73);
+insert into t (id,a) values (462,74);
+insert into t (id,a) values (462,75);
+insert into t (id,a) values (462,76);
+insert into t (id,a) values (462,77);
+insert into t (id,a) values (462,78);
+insert into t (id,a) values (462,79);
+insert into t (id,a) values (462,80);
+insert into t (id,a) values (462,81);
+insert into t (id,a) values (462,82);
+insert into t (id,a) values (462,83);
+insert into t (id,a) values (462,84);
+insert into t (id,a) values (462,85);
+insert into t (id,a) values (462,86);
+insert into t (id,a) values (462,87);
+insert into t (id,a) values (462,88);
+insert into t (id,a) values (462,89);
+insert into t (id,a) values (462,90);
+insert into t (id,a) values (462,91);
+insert into t (id,a) values (462,92);
+insert into t (id,a) values (462,93);
+insert into t (id,a) values (462,94);
+insert into t (id,a) values (462,95);
+insert into t (id,a) values (462,96);
+insert into t (id,a) values (462,97);
+insert into t (id,a) values (462,98);
+insert into t (id,a) values (462,99);
+insert into t (id,a) values (463,0);
+insert into t (id,a) values (463,1);
+insert into t (id,a) values (463,2);
+insert into t (id,a) values (463,3);
+insert into t (id,a) values (463,4);
+insert into t (id,a) values (463,5);
+insert into t (id,a) values (463,6);
+insert into t (id,a) values (463,7);
+insert into t (id,a) values (463,8);
+insert into t (id,a) values (463,9);
+insert into t (id,a) values (463,10);
+insert into t (id,a) values (463,11);
+insert into t (id,a) values (463,12);
+insert into t (id,a) values (463,13);
+insert into t (id,a) values (463,14);
+insert into t (id,a) values (463,15);
+insert into t (id,a) values (463,16);
+insert into t (id,a) values (463,17);
+insert into t (id,a) values (463,18);
+insert into t (id,a) values (463,19);
+insert into t (id,a) values (463,20);
+insert into t (id,a) values (463,21);
+insert into t (id,a) values (463,22);
+insert into t (id,a) values (463,23);
+insert into t (id,a) values (463,24);
+insert into t (id,a) values (463,25);
+insert into t (id,a) values (463,26);
+insert into t (id,a) values (463,27);
+insert into t (id,a) values (463,28);
+insert into t (id,a) values (463,29);
+insert into t (id,a) values (463,30);
+insert into t (id,a) values (463,31);
+insert into t (id,a) values (463,32);
+insert into t (id,a) values (463,33);
+insert into t (id,a) values (463,34);
+insert into t (id,a) values (463,35);
+insert into t (id,a) values (463,36);
+insert into t (id,a) values (463,37);
+insert into t (id,a) values (463,38);
+insert into t (id,a) values (463,39);
+insert into t (id,a) values (463,40);
+insert into t (id,a) values (463,41);
+insert into t (id,a) values (463,42);
+insert into t (id,a) values (463,43);
+insert into t (id,a) values (463,44);
+insert into t (id,a) values (463,45);
+insert into t (id,a) values (463,46);
+insert into t (id,a) values (463,47);
+insert into t (id,a) values (463,48);
+insert into t (id,a) values (463,49);
+insert into t (id,a) values (463,50);
+insert into t (id,a) values (463,51);
+insert into t (id,a) values (463,52);
+insert into t (id,a) values (463,53);
+insert into t (id,a) values (463,54);
+insert into t (id,a) values (463,55);
+insert into t (id,a) values (463,56);
+insert into t (id,a) values (463,57);
+insert into t (id,a) values (463,58);
+insert into t (id,a) values (463,59);
+insert into t (id,a) values (463,60);
+insert into t (id,a) values (463,61);
+insert into t (id,a) values (463,62);
+insert into t (id,a) values (463,63);
+insert into t (id,a) values (463,64);
+insert into t (id,a) values (463,65);
+insert into t (id,a) values (463,66);
+insert into t (id,a) values (463,67);
+insert into t (id,a) values (463,68);
+insert into t (id,a) values (463,69);
+insert into t (id,a) values (463,70);
+insert into t (id,a) values (463,71);
+insert into t (id,a) values (463,72);
+insert into t (id,a) values (463,73);
+insert into t (id,a) values (463,74);
+insert into t (id,a) values (463,75);
+insert into t (id,a) values (463,76);
+insert into t (id,a) values (463,77);
+insert into t (id,a) values (463,78);
+insert into t (id,a) values (463,79);
+insert into t (id,a) values (463,80);
+insert into t (id,a) values (463,81);
+insert into t (id,a) values (463,82);
+insert into t (id,a) values (463,83);
+insert into t (id,a) values (463,84);
+insert into t (id,a) values (463,85);
+insert into t (id,a) values (463,86);
+insert into t (id,a) values (463,87);
+insert into t (id,a) values (463,88);
+insert into t (id,a) values (463,89);
+insert into t (id,a) values (463,90);
+insert into t (id,a) values (463,91);
+insert into t (id,a) values (463,92);
+insert into t (id,a) values (463,93);
+insert into t (id,a) values (463,94);
+insert into t (id,a) values (463,95);
+insert into t (id,a) values (463,96);
+insert into t (id,a) values (463,97);
+insert into t (id,a) values (463,98);
+insert into t (id,a) values (463,99);
+insert into t (id,a) values (464,0);
+insert into t (id,a) values (464,1);
+insert into t (id,a) values (464,2);
+insert into t (id,a) values (464,3);
+insert into t (id,a) values (464,4);
+insert into t (id,a) values (464,5);
+insert into t (id,a) values (464,6);
+insert into t (id,a) values (464,7);
+insert into t (id,a) values (464,8);
+insert into t (id,a) values (464,9);
+insert into t (id,a) values (464,10);
+insert into t (id,a) values (464,11);
+insert into t (id,a) values (464,12);
+insert into t (id,a) values (464,13);
+insert into t (id,a) values (464,14);
+insert into t (id,a) values (464,15);
+insert into t (id,a) values (464,16);
+insert into t (id,a) values (464,17);
+insert into t (id,a) values (464,18);
+insert into t (id,a) values (464,19);
+insert into t (id,a) values (464,20);
+insert into t (id,a) values (464,21);
+insert into t (id,a) values (464,22);
+insert into t (id,a) values (464,23);
+insert into t (id,a) values (464,24);
+insert into t (id,a) values (464,25);
+insert into t (id,a) values (464,26);
+insert into t (id,a) values (464,27);
+insert into t (id,a) values (464,28);
+insert into t (id,a) values (464,29);
+insert into t (id,a) values (464,30);
+insert into t (id,a) values (464,31);
+insert into t (id,a) values (464,32);
+insert into t (id,a) values (464,33);
+insert into t (id,a) values (464,34);
+insert into t (id,a) values (464,35);
+insert into t (id,a) values (464,36);
+insert into t (id,a) values (464,37);
+insert into t (id,a) values (464,38);
+insert into t (id,a) values (464,39);
+insert into t (id,a) values (464,40);
+insert into t (id,a) values (464,41);
+insert into t (id,a) values (464,42);
+insert into t (id,a) values (464,43);
+insert into t (id,a) values (464,44);
+insert into t (id,a) values (464,45);
+insert into t (id,a) values (464,46);
+insert into t (id,a) values (464,47);
+insert into t (id,a) values (464,48);
+insert into t (id,a) values (464,49);
+insert into t (id,a) values (464,50);
+insert into t (id,a) values (464,51);
+insert into t (id,a) values (464,52);
+insert into t (id,a) values (464,53);
+insert into t (id,a) values (464,54);
+insert into t (id,a) values (464,55);
+insert into t (id,a) values (464,56);
+insert into t (id,a) values (464,57);
+insert into t (id,a) values (464,58);
+insert into t (id,a) values (464,59);
+insert into t (id,a) values (464,60);
+insert into t (id,a) values (464,61);
+insert into t (id,a) values (464,62);
+insert into t (id,a) values (464,63);
+insert into t (id,a) values (464,64);
+insert into t (id,a) values (464,65);
+insert into t (id,a) values (464,66);
+insert into t (id,a) values (464,67);
+insert into t (id,a) values (464,68);
+insert into t (id,a) values (464,69);
+insert into t (id,a) values (464,70);
+insert into t (id,a) values (464,71);
+insert into t (id,a) values (464,72);
+insert into t (id,a) values (464,73);
+insert into t (id,a) values (464,74);
+insert into t (id,a) values (464,75);
+insert into t (id,a) values (464,76);
+insert into t (id,a) values (464,77);
+insert into t (id,a) values (464,78);
+insert into t (id,a) values (464,79);
+insert into t (id,a) values (464,80);
+insert into t (id,a) values (464,81);
+insert into t (id,a) values (464,82);
+insert into t (id,a) values (464,83);
+insert into t (id,a) values (464,84);
+insert into t (id,a) values (464,85);
+insert into t (id,a) values (464,86);
+insert into t (id,a) values (464,87);
+insert into t (id,a) values (464,88);
+insert into t (id,a) values (464,89);
+insert into t (id,a) values (464,90);
+insert into t (id,a) values (464,91);
+insert into t (id,a) values (464,92);
+insert into t (id,a) values (464,93);
+insert into t (id,a) values (464,94);
+insert into t (id,a) values (464,95);
+insert into t (id,a) values (464,96);
+insert into t (id,a) values (464,97);
+insert into t (id,a) values (464,98);
+insert into t (id,a) values (464,99);
+insert into t (id,a) values (465,0);
+insert into t (id,a) values (465,1);
+insert into t (id,a) values (465,2);
+insert into t (id,a) values (465,3);
+insert into t (id,a) values (465,4);
+insert into t (id,a) values (465,5);
+insert into t (id,a) values (465,6);
+insert into t (id,a) values (465,7);
+insert into t (id,a) values (465,8);
+insert into t (id,a) values (465,9);
+insert into t (id,a) values (465,10);
+insert into t (id,a) values (465,11);
+insert into t (id,a) values (465,12);
+insert into t (id,a) values (465,13);
+insert into t (id,a) values (465,14);
+insert into t (id,a) values (465,15);
+insert into t (id,a) values (465,16);
+insert into t (id,a) values (465,17);
+insert into t (id,a) values (465,18);
+insert into t (id,a) values (465,19);
+insert into t (id,a) values (465,20);
+insert into t (id,a) values (465,21);
+insert into t (id,a) values (465,22);
+insert into t (id,a) values (465,23);
+insert into t (id,a) values (465,24);
+insert into t (id,a) values (465,25);
+insert into t (id,a) values (465,26);
+insert into t (id,a) values (465,27);
+insert into t (id,a) values (465,28);
+insert into t (id,a) values (465,29);
+insert into t (id,a) values (465,30);
+insert into t (id,a) values (465,31);
+insert into t (id,a) values (465,32);
+insert into t (id,a) values (465,33);
+insert into t (id,a) values (465,34);
+insert into t (id,a) values (465,35);
+insert into t (id,a) values (465,36);
+insert into t (id,a) values (465,37);
+insert into t (id,a) values (465,38);
+insert into t (id,a) values (465,39);
+insert into t (id,a) values (465,40);
+insert into t (id,a) values (465,41);
+insert into t (id,a) values (465,42);
+insert into t (id,a) values (465,43);
+insert into t (id,a) values (465,44);
+insert into t (id,a) values (465,45);
+insert into t (id,a) values (465,46);
+insert into t (id,a) values (465,47);
+insert into t (id,a) values (465,48);
+insert into t (id,a) values (465,49);
+insert into t (id,a) values (465,50);
+insert into t (id,a) values (465,51);
+insert into t (id,a) values (465,52);
+insert into t (id,a) values (465,53);
+insert into t (id,a) values (465,54);
+insert into t (id,a) values (465,55);
+insert into t (id,a) values (465,56);
+insert into t (id,a) values (465,57);
+insert into t (id,a) values (465,58);
+insert into t (id,a) values (465,59);
+insert into t (id,a) values (465,60);
+insert into t (id,a) values (465,61);
+insert into t (id,a) values (465,62);
+insert into t (id,a) values (465,63);
+insert into t (id,a) values (465,64);
+insert into t (id,a) values (465,65);
+insert into t (id,a) values (465,66);
+insert into t (id,a) values (465,67);
+insert into t (id,a) values (465,68);
+insert into t (id,a) values (465,69);
+insert into t (id,a) values (465,70);
+insert into t (id,a) values (465,71);
+insert into t (id,a) values (465,72);
+insert into t (id,a) values (465,73);
+insert into t (id,a) values (465,74);
+insert into t (id,a) values (465,75);
+insert into t (id,a) values (465,76);
+insert into t (id,a) values (465,77);
+insert into t (id,a) values (465,78);
+insert into t (id,a) values (465,79);
+insert into t (id,a) values (465,80);
+insert into t (id,a) values (465,81);
+insert into t (id,a) values (465,82);
+insert into t (id,a) values (465,83);
+insert into t (id,a) values (465,84);
+insert into t (id,a) values (465,85);
+insert into t (id,a) values (465,86);
+insert into t (id,a) values (465,87);
+insert into t (id,a) values (465,88);
+insert into t (id,a) values (465,89);
+insert into t (id,a) values (465,90);
+insert into t (id,a) values (465,91);
+insert into t (id,a) values (465,92);
+insert into t (id,a) values (465,93);
+insert into t (id,a) values (465,94);
+insert into t (id,a) values (465,95);
+insert into t (id,a) values (465,96);
+insert into t (id,a) values (465,97);
+insert into t (id,a) values (465,98);
+insert into t (id,a) values (465,99);
+insert into t (id,a) values (466,0);
+insert into t (id,a) values (466,1);
+insert into t (id,a) values (466,2);
+insert into t (id,a) values (466,3);
+insert into t (id,a) values (466,4);
+insert into t (id,a) values (466,5);
+insert into t (id,a) values (466,6);
+insert into t (id,a) values (466,7);
+insert into t (id,a) values (466,8);
+insert into t (id,a) values (466,9);
+insert into t (id,a) values (466,10);
+insert into t (id,a) values (466,11);
+insert into t (id,a) values (466,12);
+insert into t (id,a) values (466,13);
+insert into t (id,a) values (466,14);
+insert into t (id,a) values (466,15);
+insert into t (id,a) values (466,16);
+insert into t (id,a) values (466,17);
+insert into t (id,a) values (466,18);
+insert into t (id,a) values (466,19);
+insert into t (id,a) values (466,20);
+insert into t (id,a) values (466,21);
+insert into t (id,a) values (466,22);
+insert into t (id,a) values (466,23);
+insert into t (id,a) values (466,24);
+insert into t (id,a) values (466,25);
+insert into t (id,a) values (466,26);
+insert into t (id,a) values (466,27);
+insert into t (id,a) values (466,28);
+insert into t (id,a) values (466,29);
+insert into t (id,a) values (466,30);
+insert into t (id,a) values (466,31);
+insert into t (id,a) values (466,32);
+insert into t (id,a) values (466,33);
+insert into t (id,a) values (466,34);
+insert into t (id,a) values (466,35);
+insert into t (id,a) values (466,36);
+insert into t (id,a) values (466,37);
+insert into t (id,a) values (466,38);
+insert into t (id,a) values (466,39);
+insert into t (id,a) values (466,40);
+insert into t (id,a) values (466,41);
+insert into t (id,a) values (466,42);
+insert into t (id,a) values (466,43);
+insert into t (id,a) values (466,44);
+insert into t (id,a) values (466,45);
+insert into t (id,a) values (466,46);
+insert into t (id,a) values (466,47);
+insert into t (id,a) values (466,48);
+insert into t (id,a) values (466,49);
+insert into t (id,a) values (466,50);
+insert into t (id,a) values (466,51);
+insert into t (id,a) values (466,52);
+insert into t (id,a) values (466,53);
+insert into t (id,a) values (466,54);
+insert into t (id,a) values (466,55);
+insert into t (id,a) values (466,56);
+insert into t (id,a) values (466,57);
+insert into t (id,a) values (466,58);
+insert into t (id,a) values (466,59);
+insert into t (id,a) values (466,60);
+insert into t (id,a) values (466,61);
+insert into t (id,a) values (466,62);
+insert into t (id,a) values (466,63);
+insert into t (id,a) values (466,64);
+insert into t (id,a) values (466,65);
+insert into t (id,a) values (466,66);
+insert into t (id,a) values (466,67);
+insert into t (id,a) values (466,68);
+insert into t (id,a) values (466,69);
+insert into t (id,a) values (466,70);
+insert into t (id,a) values (466,71);
+insert into t (id,a) values (466,72);
+insert into t (id,a) values (466,73);
+insert into t (id,a) values (466,74);
+insert into t (id,a) values (466,75);
+insert into t (id,a) values (466,76);
+insert into t (id,a) values (466,77);
+insert into t (id,a) values (466,78);
+insert into t (id,a) values (466,79);
+insert into t (id,a) values (466,80);
+insert into t (id,a) values (466,81);
+insert into t (id,a) values (466,82);
+insert into t (id,a) values (466,83);
+insert into t (id,a) values (466,84);
+insert into t (id,a) values (466,85);
+insert into t (id,a) values (466,86);
+insert into t (id,a) values (466,87);
+insert into t (id,a) values (466,88);
+insert into t (id,a) values (466,89);
+insert into t (id,a) values (466,90);
+insert into t (id,a) values (466,91);
+insert into t (id,a) values (466,92);
+insert into t (id,a) values (466,93);
+insert into t (id,a) values (466,94);
+insert into t (id,a) values (466,95);
+insert into t (id,a) values (466,96);
+insert into t (id,a) values (466,97);
+insert into t (id,a) values (466,98);
+insert into t (id,a) values (466,99);
+insert into t (id,a) values (467,0);
+insert into t (id,a) values (467,1);
+insert into t (id,a) values (467,2);
+insert into t (id,a) values (467,3);
+insert into t (id,a) values (467,4);
+insert into t (id,a) values (467,5);
+insert into t (id,a) values (467,6);
+insert into t (id,a) values (467,7);
+insert into t (id,a) values (467,8);
+insert into t (id,a) values (467,9);
+insert into t (id,a) values (467,10);
+insert into t (id,a) values (467,11);
+insert into t (id,a) values (467,12);
+insert into t (id,a) values (467,13);
+insert into t (id,a) values (467,14);
+insert into t (id,a) values (467,15);
+insert into t (id,a) values (467,16);
+insert into t (id,a) values (467,17);
+insert into t (id,a) values (467,18);
+insert into t (id,a) values (467,19);
+insert into t (id,a) values (467,20);
+insert into t (id,a) values (467,21);
+insert into t (id,a) values (467,22);
+insert into t (id,a) values (467,23);
+insert into t (id,a) values (467,24);
+insert into t (id,a) values (467,25);
+insert into t (id,a) values (467,26);
+insert into t (id,a) values (467,27);
+insert into t (id,a) values (467,28);
+insert into t (id,a) values (467,29);
+insert into t (id,a) values (467,30);
+insert into t (id,a) values (467,31);
+insert into t (id,a) values (467,32);
+insert into t (id,a) values (467,33);
+insert into t (id,a) values (467,34);
+insert into t (id,a) values (467,35);
+insert into t (id,a) values (467,36);
+insert into t (id,a) values (467,37);
+insert into t (id,a) values (467,38);
+insert into t (id,a) values (467,39);
+insert into t (id,a) values (467,40);
+insert into t (id,a) values (467,41);
+insert into t (id,a) values (467,42);
+insert into t (id,a) values (467,43);
+insert into t (id,a) values (467,44);
+insert into t (id,a) values (467,45);
+insert into t (id,a) values (467,46);
+insert into t (id,a) values (467,47);
+insert into t (id,a) values (467,48);
+insert into t (id,a) values (467,49);
+insert into t (id,a) values (467,50);
+insert into t (id,a) values (467,51);
+insert into t (id,a) values (467,52);
+insert into t (id,a) values (467,53);
+insert into t (id,a) values (467,54);
+insert into t (id,a) values (467,55);
+insert into t (id,a) values (467,56);
+insert into t (id,a) values (467,57);
+insert into t (id,a) values (467,58);
+insert into t (id,a) values (467,59);
+insert into t (id,a) values (467,60);
+insert into t (id,a) values (467,61);
+insert into t (id,a) values (467,62);
+insert into t (id,a) values (467,63);
+insert into t (id,a) values (467,64);
+insert into t (id,a) values (467,65);
+insert into t (id,a) values (467,66);
+insert into t (id,a) values (467,67);
+insert into t (id,a) values (467,68);
+insert into t (id,a) values (467,69);
+insert into t (id,a) values (467,70);
+insert into t (id,a) values (467,71);
+insert into t (id,a) values (467,72);
+insert into t (id,a) values (467,73);
+insert into t (id,a) values (467,74);
+insert into t (id,a) values (467,75);
+insert into t (id,a) values (467,76);
+insert into t (id,a) values (467,77);
+insert into t (id,a) values (467,78);
+insert into t (id,a) values (467,79);
+insert into t (id,a) values (467,80);
+insert into t (id,a) values (467,81);
+insert into t (id,a) values (467,82);
+insert into t (id,a) values (467,83);
+insert into t (id,a) values (467,84);
+insert into t (id,a) values (467,85);
+insert into t (id,a) values (467,86);
+insert into t (id,a) values (467,87);
+insert into t (id,a) values (467,88);
+insert into t (id,a) values (467,89);
+insert into t (id,a) values (467,90);
+insert into t (id,a) values (467,91);
+insert into t (id,a) values (467,92);
+insert into t (id,a) values (467,93);
+insert into t (id,a) values (467,94);
+insert into t (id,a) values (467,95);
+insert into t (id,a) values (467,96);
+insert into t (id,a) values (467,97);
+insert into t (id,a) values (467,98);
+insert into t (id,a) values (467,99);
+insert into t (id,a) values (468,0);
+insert into t (id,a) values (468,1);
+insert into t (id,a) values (468,2);
+insert into t (id,a) values (468,3);
+insert into t (id,a) values (468,4);
+insert into t (id,a) values (468,5);
+insert into t (id,a) values (468,6);
+insert into t (id,a) values (468,7);
+insert into t (id,a) values (468,8);
+insert into t (id,a) values (468,9);
+insert into t (id,a) values (468,10);
+insert into t (id,a) values (468,11);
+insert into t (id,a) values (468,12);
+insert into t (id,a) values (468,13);
+insert into t (id,a) values (468,14);
+insert into t (id,a) values (468,15);
+insert into t (id,a) values (468,16);
+insert into t (id,a) values (468,17);
+insert into t (id,a) values (468,18);
+insert into t (id,a) values (468,19);
+insert into t (id,a) values (468,20);
+insert into t (id,a) values (468,21);
+insert into t (id,a) values (468,22);
+insert into t (id,a) values (468,23);
+insert into t (id,a) values (468,24);
+insert into t (id,a) values (468,25);
+insert into t (id,a) values (468,26);
+insert into t (id,a) values (468,27);
+insert into t (id,a) values (468,28);
+insert into t (id,a) values (468,29);
+insert into t (id,a) values (468,30);
+insert into t (id,a) values (468,31);
+insert into t (id,a) values (468,32);
+insert into t (id,a) values (468,33);
+insert into t (id,a) values (468,34);
+insert into t (id,a) values (468,35);
+insert into t (id,a) values (468,36);
+insert into t (id,a) values (468,37);
+insert into t (id,a) values (468,38);
+insert into t (id,a) values (468,39);
+insert into t (id,a) values (468,40);
+insert into t (id,a) values (468,41);
+insert into t (id,a) values (468,42);
+insert into t (id,a) values (468,43);
+insert into t (id,a) values (468,44);
+insert into t (id,a) values (468,45);
+insert into t (id,a) values (468,46);
+insert into t (id,a) values (468,47);
+insert into t (id,a) values (468,48);
+insert into t (id,a) values (468,49);
+insert into t (id,a) values (468,50);
+insert into t (id,a) values (468,51);
+insert into t (id,a) values (468,52);
+insert into t (id,a) values (468,53);
+insert into t (id,a) values (468,54);
+insert into t (id,a) values (468,55);
+insert into t (id,a) values (468,56);
+insert into t (id,a) values (468,57);
+insert into t (id,a) values (468,58);
+insert into t (id,a) values (468,59);
+insert into t (id,a) values (468,60);
+insert into t (id,a) values (468,61);
+insert into t (id,a) values (468,62);
+insert into t (id,a) values (468,63);
+insert into t (id,a) values (468,64);
+insert into t (id,a) values (468,65);
+insert into t (id,a) values (468,66);
+insert into t (id,a) values (468,67);
+insert into t (id,a) values (468,68);
+insert into t (id,a) values (468,69);
+insert into t (id,a) values (468,70);
+insert into t (id,a) values (468,71);
+insert into t (id,a) values (468,72);
+insert into t (id,a) values (468,73);
+insert into t (id,a) values (468,74);
+insert into t (id,a) values (468,75);
+insert into t (id,a) values (468,76);
+insert into t (id,a) values (468,77);
+insert into t (id,a) values (468,78);
+insert into t (id,a) values (468,79);
+insert into t (id,a) values (468,80);
+insert into t (id,a) values (468,81);
+insert into t (id,a) values (468,82);
+insert into t (id,a) values (468,83);
+insert into t (id,a) values (468,84);
+insert into t (id,a) values (468,85);
+insert into t (id,a) values (468,86);
+insert into t (id,a) values (468,87);
+insert into t (id,a) values (468,88);
+insert into t (id,a) values (468,89);
+insert into t (id,a) values (468,90);
+insert into t (id,a) values (468,91);
+insert into t (id,a) values (468,92);
+insert into t (id,a) values (468,93);
+insert into t (id,a) values (468,94);
+insert into t (id,a) values (468,95);
+insert into t (id,a) values (468,96);
+insert into t (id,a) values (468,97);
+insert into t (id,a) values (468,98);
+insert into t (id,a) values (468,99);
+insert into t (id,a) values (469,0);
+insert into t (id,a) values (469,1);
+insert into t (id,a) values (469,2);
+insert into t (id,a) values (469,3);
+insert into t (id,a) values (469,4);
+insert into t (id,a) values (469,5);
+insert into t (id,a) values (469,6);
+insert into t (id,a) values (469,7);
+insert into t (id,a) values (469,8);
+insert into t (id,a) values (469,9);
+insert into t (id,a) values (469,10);
+insert into t (id,a) values (469,11);
+insert into t (id,a) values (469,12);
+insert into t (id,a) values (469,13);
+insert into t (id,a) values (469,14);
+insert into t (id,a) values (469,15);
+insert into t (id,a) values (469,16);
+insert into t (id,a) values (469,17);
+insert into t (id,a) values (469,18);
+insert into t (id,a) values (469,19);
+insert into t (id,a) values (469,20);
+insert into t (id,a) values (469,21);
+insert into t (id,a) values (469,22);
+insert into t (id,a) values (469,23);
+insert into t (id,a) values (469,24);
+insert into t (id,a) values (469,25);
+insert into t (id,a) values (469,26);
+insert into t (id,a) values (469,27);
+insert into t (id,a) values (469,28);
+insert into t (id,a) values (469,29);
+insert into t (id,a) values (469,30);
+insert into t (id,a) values (469,31);
+insert into t (id,a) values (469,32);
+insert into t (id,a) values (469,33);
+insert into t (id,a) values (469,34);
+insert into t (id,a) values (469,35);
+insert into t (id,a) values (469,36);
+insert into t (id,a) values (469,37);
+insert into t (id,a) values (469,38);
+insert into t (id,a) values (469,39);
+insert into t (id,a) values (469,40);
+insert into t (id,a) values (469,41);
+insert into t (id,a) values (469,42);
+insert into t (id,a) values (469,43);
+insert into t (id,a) values (469,44);
+insert into t (id,a) values (469,45);
+insert into t (id,a) values (469,46);
+insert into t (id,a) values (469,47);
+insert into t (id,a) values (469,48);
+insert into t (id,a) values (469,49);
+insert into t (id,a) values (469,50);
+insert into t (id,a) values (469,51);
+insert into t (id,a) values (469,52);
+insert into t (id,a) values (469,53);
+insert into t (id,a) values (469,54);
+insert into t (id,a) values (469,55);
+insert into t (id,a) values (469,56);
+insert into t (id,a) values (469,57);
+insert into t (id,a) values (469,58);
+insert into t (id,a) values (469,59);
+insert into t (id,a) values (469,60);
+insert into t (id,a) values (469,61);
+insert into t (id,a) values (469,62);
+insert into t (id,a) values (469,63);
+insert into t (id,a) values (469,64);
+insert into t (id,a) values (469,65);
+insert into t (id,a) values (469,66);
+insert into t (id,a) values (469,67);
+insert into t (id,a) values (469,68);
+insert into t (id,a) values (469,69);
+insert into t (id,a) values (469,70);
+insert into t (id,a) values (469,71);
+insert into t (id,a) values (469,72);
+insert into t (id,a) values (469,73);
+insert into t (id,a) values (469,74);
+insert into t (id,a) values (469,75);
+insert into t (id,a) values (469,76);
+insert into t (id,a) values (469,77);
+insert into t (id,a) values (469,78);
+insert into t (id,a) values (469,79);
+insert into t (id,a) values (469,80);
+insert into t (id,a) values (469,81);
+insert into t (id,a) values (469,82);
+insert into t (id,a) values (469,83);
+insert into t (id,a) values (469,84);
+insert into t (id,a) values (469,85);
+insert into t (id,a) values (469,86);
+insert into t (id,a) values (469,87);
+insert into t (id,a) values (469,88);
+insert into t (id,a) values (469,89);
+insert into t (id,a) values (469,90);
+insert into t (id,a) values (469,91);
+insert into t (id,a) values (469,92);
+insert into t (id,a) values (469,93);
+insert into t (id,a) values (469,94);
+insert into t (id,a) values (469,95);
+insert into t (id,a) values (469,96);
+insert into t (id,a) values (469,97);
+insert into t (id,a) values (469,98);
+insert into t (id,a) values (469,99);
+insert into t (id,a) values (470,0);
+insert into t (id,a) values (470,1);
+insert into t (id,a) values (470,2);
+insert into t (id,a) values (470,3);
+insert into t (id,a) values (470,4);
+insert into t (id,a) values (470,5);
+insert into t (id,a) values (470,6);
+insert into t (id,a) values (470,7);
+insert into t (id,a) values (470,8);
+insert into t (id,a) values (470,9);
+insert into t (id,a) values (470,10);
+insert into t (id,a) values (470,11);
+insert into t (id,a) values (470,12);
+insert into t (id,a) values (470,13);
+insert into t (id,a) values (470,14);
+insert into t (id,a) values (470,15);
+insert into t (id,a) values (470,16);
+insert into t (id,a) values (470,17);
+insert into t (id,a) values (470,18);
+insert into t (id,a) values (470,19);
+insert into t (id,a) values (470,20);
+insert into t (id,a) values (470,21);
+insert into t (id,a) values (470,22);
+insert into t (id,a) values (470,23);
+insert into t (id,a) values (470,24);
+insert into t (id,a) values (470,25);
+insert into t (id,a) values (470,26);
+insert into t (id,a) values (470,27);
+insert into t (id,a) values (470,28);
+insert into t (id,a) values (470,29);
+insert into t (id,a) values (470,30);
+insert into t (id,a) values (470,31);
+insert into t (id,a) values (470,32);
+insert into t (id,a) values (470,33);
+insert into t (id,a) values (470,34);
+insert into t (id,a) values (470,35);
+insert into t (id,a) values (470,36);
+insert into t (id,a) values (470,37);
+insert into t (id,a) values (470,38);
+insert into t (id,a) values (470,39);
+insert into t (id,a) values (470,40);
+insert into t (id,a) values (470,41);
+insert into t (id,a) values (470,42);
+insert into t (id,a) values (470,43);
+insert into t (id,a) values (470,44);
+insert into t (id,a) values (470,45);
+insert into t (id,a) values (470,46);
+insert into t (id,a) values (470,47);
+insert into t (id,a) values (470,48);
+insert into t (id,a) values (470,49);
+insert into t (id,a) values (470,50);
+insert into t (id,a) values (470,51);
+insert into t (id,a) values (470,52);
+insert into t (id,a) values (470,53);
+insert into t (id,a) values (470,54);
+insert into t (id,a) values (470,55);
+insert into t (id,a) values (470,56);
+insert into t (id,a) values (470,57);
+insert into t (id,a) values (470,58);
+insert into t (id,a) values (470,59);
+insert into t (id,a) values (470,60);
+insert into t (id,a) values (470,61);
+insert into t (id,a) values (470,62);
+insert into t (id,a) values (470,63);
+insert into t (id,a) values (470,64);
+insert into t (id,a) values (470,65);
+insert into t (id,a) values (470,66);
+insert into t (id,a) values (470,67);
+insert into t (id,a) values (470,68);
+insert into t (id,a) values (470,69);
+insert into t (id,a) values (470,70);
+insert into t (id,a) values (470,71);
+insert into t (id,a) values (470,72);
+insert into t (id,a) values (470,73);
+insert into t (id,a) values (470,74);
+insert into t (id,a) values (470,75);
+insert into t (id,a) values (470,76);
+insert into t (id,a) values (470,77);
+insert into t (id,a) values (470,78);
+insert into t (id,a) values (470,79);
+insert into t (id,a) values (470,80);
+insert into t (id,a) values (470,81);
+insert into t (id,a) values (470,82);
+insert into t (id,a) values (470,83);
+insert into t (id,a) values (470,84);
+insert into t (id,a) values (470,85);
+insert into t (id,a) values (470,86);
+insert into t (id,a) values (470,87);
+insert into t (id,a) values (470,88);
+insert into t (id,a) values (470,89);
+insert into t (id,a) values (470,90);
+insert into t (id,a) values (470,91);
+insert into t (id,a) values (470,92);
+insert into t (id,a) values (470,93);
+insert into t (id,a) values (470,94);
+insert into t (id,a) values (470,95);
+insert into t (id,a) values (470,96);
+insert into t (id,a) values (470,97);
+insert into t (id,a) values (470,98);
+insert into t (id,a) values (470,99);
+insert into t (id,a) values (471,0);
+insert into t (id,a) values (471,1);
+insert into t (id,a) values (471,2);
+insert into t (id,a) values (471,3);
+insert into t (id,a) values (471,4);
+insert into t (id,a) values (471,5);
+insert into t (id,a) values (471,6);
+insert into t (id,a) values (471,7);
+insert into t (id,a) values (471,8);
+insert into t (id,a) values (471,9);
+insert into t (id,a) values (471,10);
+insert into t (id,a) values (471,11);
+insert into t (id,a) values (471,12);
+insert into t (id,a) values (471,13);
+insert into t (id,a) values (471,14);
+insert into t (id,a) values (471,15);
+insert into t (id,a) values (471,16);
+insert into t (id,a) values (471,17);
+insert into t (id,a) values (471,18);
+insert into t (id,a) values (471,19);
+insert into t (id,a) values (471,20);
+insert into t (id,a) values (471,21);
+insert into t (id,a) values (471,22);
+insert into t (id,a) values (471,23);
+insert into t (id,a) values (471,24);
+insert into t (id,a) values (471,25);
+insert into t (id,a) values (471,26);
+insert into t (id,a) values (471,27);
+insert into t (id,a) values (471,28);
+insert into t (id,a) values (471,29);
+insert into t (id,a) values (471,30);
+insert into t (id,a) values (471,31);
+insert into t (id,a) values (471,32);
+insert into t (id,a) values (471,33);
+insert into t (id,a) values (471,34);
+insert into t (id,a) values (471,35);
+insert into t (id,a) values (471,36);
+insert into t (id,a) values (471,37);
+insert into t (id,a) values (471,38);
+insert into t (id,a) values (471,39);
+insert into t (id,a) values (471,40);
+insert into t (id,a) values (471,41);
+insert into t (id,a) values (471,42);
+insert into t (id,a) values (471,43);
+insert into t (id,a) values (471,44);
+insert into t (id,a) values (471,45);
+insert into t (id,a) values (471,46);
+insert into t (id,a) values (471,47);
+insert into t (id,a) values (471,48);
+insert into t (id,a) values (471,49);
+insert into t (id,a) values (471,50);
+insert into t (id,a) values (471,51);
+insert into t (id,a) values (471,52);
+insert into t (id,a) values (471,53);
+insert into t (id,a) values (471,54);
+insert into t (id,a) values (471,55);
+insert into t (id,a) values (471,56);
+insert into t (id,a) values (471,57);
+insert into t (id,a) values (471,58);
+insert into t (id,a) values (471,59);
+insert into t (id,a) values (471,60);
+insert into t (id,a) values (471,61);
+insert into t (id,a) values (471,62);
+insert into t (id,a) values (471,63);
+insert into t (id,a) values (471,64);
+insert into t (id,a) values (471,65);
+insert into t (id,a) values (471,66);
+insert into t (id,a) values (471,67);
+insert into t (id,a) values (471,68);
+insert into t (id,a) values (471,69);
+insert into t (id,a) values (471,70);
+insert into t (id,a) values (471,71);
+insert into t (id,a) values (471,72);
+insert into t (id,a) values (471,73);
+insert into t (id,a) values (471,74);
+insert into t (id,a) values (471,75);
+insert into t (id,a) values (471,76);
+insert into t (id,a) values (471,77);
+insert into t (id,a) values (471,78);
+insert into t (id,a) values (471,79);
+insert into t (id,a) values (471,80);
+insert into t (id,a) values (471,81);
+insert into t (id,a) values (471,82);
+insert into t (id,a) values (471,83);
+insert into t (id,a) values (471,84);
+insert into t (id,a) values (471,85);
+insert into t (id,a) values (471,86);
+insert into t (id,a) values (471,87);
+insert into t (id,a) values (471,88);
+insert into t (id,a) values (471,89);
+insert into t (id,a) values (471,90);
+insert into t (id,a) values (471,91);
+insert into t (id,a) values (471,92);
+insert into t (id,a) values (471,93);
+insert into t (id,a) values (471,94);
+insert into t (id,a) values (471,95);
+insert into t (id,a) values (471,96);
+insert into t (id,a) values (471,97);
+insert into t (id,a) values (471,98);
+insert into t (id,a) values (471,99);
+insert into t (id,a) values (472,0);
+insert into t (id,a) values (472,1);
+insert into t (id,a) values (472,2);
+insert into t (id,a) values (472,3);
+insert into t (id,a) values (472,4);
+insert into t (id,a) values (472,5);
+insert into t (id,a) values (472,6);
+insert into t (id,a) values (472,7);
+insert into t (id,a) values (472,8);
+insert into t (id,a) values (472,9);
+insert into t (id,a) values (472,10);
+insert into t (id,a) values (472,11);
+insert into t (id,a) values (472,12);
+insert into t (id,a) values (472,13);
+insert into t (id,a) values (472,14);
+insert into t (id,a) values (472,15);
+insert into t (id,a) values (472,16);
+insert into t (id,a) values (472,17);
+insert into t (id,a) values (472,18);
+insert into t (id,a) values (472,19);
+insert into t (id,a) values (472,20);
+insert into t (id,a) values (472,21);
+insert into t (id,a) values (472,22);
+insert into t (id,a) values (472,23);
+insert into t (id,a) values (472,24);
+insert into t (id,a) values (472,25);
+insert into t (id,a) values (472,26);
+insert into t (id,a) values (472,27);
+insert into t (id,a) values (472,28);
+insert into t (id,a) values (472,29);
+insert into t (id,a) values (472,30);
+insert into t (id,a) values (472,31);
+insert into t (id,a) values (472,32);
+insert into t (id,a) values (472,33);
+insert into t (id,a) values (472,34);
+insert into t (id,a) values (472,35);
+insert into t (id,a) values (472,36);
+insert into t (id,a) values (472,37);
+insert into t (id,a) values (472,38);
+insert into t (id,a) values (472,39);
+insert into t (id,a) values (472,40);
+insert into t (id,a) values (472,41);
+insert into t (id,a) values (472,42);
+insert into t (id,a) values (472,43);
+insert into t (id,a) values (472,44);
+insert into t (id,a) values (472,45);
+insert into t (id,a) values (472,46);
+insert into t (id,a) values (472,47);
+insert into t (id,a) values (472,48);
+insert into t (id,a) values (472,49);
+insert into t (id,a) values (472,50);
+insert into t (id,a) values (472,51);
+insert into t (id,a) values (472,52);
+insert into t (id,a) values (472,53);
+insert into t (id,a) values (472,54);
+insert into t (id,a) values (472,55);
+insert into t (id,a) values (472,56);
+insert into t (id,a) values (472,57);
+insert into t (id,a) values (472,58);
+insert into t (id,a) values (472,59);
+insert into t (id,a) values (472,60);
+insert into t (id,a) values (472,61);
+insert into t (id,a) values (472,62);
+insert into t (id,a) values (472,63);
+insert into t (id,a) values (472,64);
+insert into t (id,a) values (472,65);
+insert into t (id,a) values (472,66);
+insert into t (id,a) values (472,67);
+insert into t (id,a) values (472,68);
+insert into t (id,a) values (472,69);
+insert into t (id,a) values (472,70);
+insert into t (id,a) values (472,71);
+insert into t (id,a) values (472,72);
+insert into t (id,a) values (472,73);
+insert into t (id,a) values (472,74);
+insert into t (id,a) values (472,75);
+insert into t (id,a) values (472,76);
+insert into t (id,a) values (472,77);
+insert into t (id,a) values (472,78);
+insert into t (id,a) values (472,79);
+insert into t (id,a) values (472,80);
+insert into t (id,a) values (472,81);
+insert into t (id,a) values (472,82);
+insert into t (id,a) values (472,83);
+insert into t (id,a) values (472,84);
+insert into t (id,a) values (472,85);
+insert into t (id,a) values (472,86);
+insert into t (id,a) values (472,87);
+insert into t (id,a) values (472,88);
+insert into t (id,a) values (472,89);
+insert into t (id,a) values (472,90);
+insert into t (id,a) values (472,91);
+insert into t (id,a) values (472,92);
+insert into t (id,a) values (472,93);
+insert into t (id,a) values (472,94);
+insert into t (id,a) values (472,95);
+insert into t (id,a) values (472,96);
+insert into t (id,a) values (472,97);
+insert into t (id,a) values (472,98);
+insert into t (id,a) values (472,99);
+insert into t (id,a) values (473,0);
+insert into t (id,a) values (473,1);
+insert into t (id,a) values (473,2);
+insert into t (id,a) values (473,3);
+insert into t (id,a) values (473,4);
+insert into t (id,a) values (473,5);
+insert into t (id,a) values (473,6);
+insert into t (id,a) values (473,7);
+insert into t (id,a) values (473,8);
+insert into t (id,a) values (473,9);
+insert into t (id,a) values (473,10);
+insert into t (id,a) values (473,11);
+insert into t (id,a) values (473,12);
+insert into t (id,a) values (473,13);
+insert into t (id,a) values (473,14);
+insert into t (id,a) values (473,15);
+insert into t (id,a) values (473,16);
+insert into t (id,a) values (473,17);
+insert into t (id,a) values (473,18);
+insert into t (id,a) values (473,19);
+insert into t (id,a) values (473,20);
+insert into t (id,a) values (473,21);
+insert into t (id,a) values (473,22);
+insert into t (id,a) values (473,23);
+insert into t (id,a) values (473,24);
+insert into t (id,a) values (473,25);
+insert into t (id,a) values (473,26);
+insert into t (id,a) values (473,27);
+insert into t (id,a) values (473,28);
+insert into t (id,a) values (473,29);
+insert into t (id,a) values (473,30);
+insert into t (id,a) values (473,31);
+insert into t (id,a) values (473,32);
+insert into t (id,a) values (473,33);
+insert into t (id,a) values (473,34);
+insert into t (id,a) values (473,35);
+insert into t (id,a) values (473,36);
+insert into t (id,a) values (473,37);
+insert into t (id,a) values (473,38);
+insert into t (id,a) values (473,39);
+insert into t (id,a) values (473,40);
+insert into t (id,a) values (473,41);
+insert into t (id,a) values (473,42);
+insert into t (id,a) values (473,43);
+insert into t (id,a) values (473,44);
+insert into t (id,a) values (473,45);
+insert into t (id,a) values (473,46);
+insert into t (id,a) values (473,47);
+insert into t (id,a) values (473,48);
+insert into t (id,a) values (473,49);
+insert into t (id,a) values (473,50);
+insert into t (id,a) values (473,51);
+insert into t (id,a) values (473,52);
+insert into t (id,a) values (473,53);
+insert into t (id,a) values (473,54);
+insert into t (id,a) values (473,55);
+insert into t (id,a) values (473,56);
+insert into t (id,a) values (473,57);
+insert into t (id,a) values (473,58);
+insert into t (id,a) values (473,59);
+insert into t (id,a) values (473,60);
+insert into t (id,a) values (473,61);
+insert into t (id,a) values (473,62);
+insert into t (id,a) values (473,63);
+insert into t (id,a) values (473,64);
+insert into t (id,a) values (473,65);
+insert into t (id,a) values (473,66);
+insert into t (id,a) values (473,67);
+insert into t (id,a) values (473,68);
+insert into t (id,a) values (473,69);
+insert into t (id,a) values (473,70);
+insert into t (id,a) values (473,71);
+insert into t (id,a) values (473,72);
+insert into t (id,a) values (473,73);
+insert into t (id,a) values (473,74);
+insert into t (id,a) values (473,75);
+insert into t (id,a) values (473,76);
+insert into t (id,a) values (473,77);
+insert into t (id,a) values (473,78);
+insert into t (id,a) values (473,79);
+insert into t (id,a) values (473,80);
+insert into t (id,a) values (473,81);
+insert into t (id,a) values (473,82);
+insert into t (id,a) values (473,83);
+insert into t (id,a) values (473,84);
+insert into t (id,a) values (473,85);
+insert into t (id,a) values (473,86);
+insert into t (id,a) values (473,87);
+insert into t (id,a) values (473,88);
+insert into t (id,a) values (473,89);
+insert into t (id,a) values (473,90);
+insert into t (id,a) values (473,91);
+insert into t (id,a) values (473,92);
+insert into t (id,a) values (473,93);
+insert into t (id,a) values (473,94);
+insert into t (id,a) values (473,95);
+insert into t (id,a) values (473,96);
+insert into t (id,a) values (473,97);
+insert into t (id,a) values (473,98);
+insert into t (id,a) values (473,99);
+insert into t (id,a) values (474,0);
+insert into t (id,a) values (474,1);
+insert into t (id,a) values (474,2);
+insert into t (id,a) values (474,3);
+insert into t (id,a) values (474,4);
+insert into t (id,a) values (474,5);
+insert into t (id,a) values (474,6);
+insert into t (id,a) values (474,7);
+insert into t (id,a) values (474,8);
+insert into t (id,a) values (474,9);
+insert into t (id,a) values (474,10);
+insert into t (id,a) values (474,11);
+insert into t (id,a) values (474,12);
+insert into t (id,a) values (474,13);
+insert into t (id,a) values (474,14);
+insert into t (id,a) values (474,15);
+insert into t (id,a) values (474,16);
+insert into t (id,a) values (474,17);
+insert into t (id,a) values (474,18);
+insert into t (id,a) values (474,19);
+insert into t (id,a) values (474,20);
+insert into t (id,a) values (474,21);
+insert into t (id,a) values (474,22);
+insert into t (id,a) values (474,23);
+insert into t (id,a) values (474,24);
+insert into t (id,a) values (474,25);
+insert into t (id,a) values (474,26);
+insert into t (id,a) values (474,27);
+insert into t (id,a) values (474,28);
+insert into t (id,a) values (474,29);
+insert into t (id,a) values (474,30);
+insert into t (id,a) values (474,31);
+insert into t (id,a) values (474,32);
+insert into t (id,a) values (474,33);
+insert into t (id,a) values (474,34);
+insert into t (id,a) values (474,35);
+insert into t (id,a) values (474,36);
+insert into t (id,a) values (474,37);
+insert into t (id,a) values (474,38);
+insert into t (id,a) values (474,39);
+insert into t (id,a) values (474,40);
+insert into t (id,a) values (474,41);
+insert into t (id,a) values (474,42);
+insert into t (id,a) values (474,43);
+insert into t (id,a) values (474,44);
+insert into t (id,a) values (474,45);
+insert into t (id,a) values (474,46);
+insert into t (id,a) values (474,47);
+insert into t (id,a) values (474,48);
+insert into t (id,a) values (474,49);
+insert into t (id,a) values (474,50);
+insert into t (id,a) values (474,51);
+insert into t (id,a) values (474,52);
+insert into t (id,a) values (474,53);
+insert into t (id,a) values (474,54);
+insert into t (id,a) values (474,55);
+insert into t (id,a) values (474,56);
+insert into t (id,a) values (474,57);
+insert into t (id,a) values (474,58);
+insert into t (id,a) values (474,59);
+insert into t (id,a) values (474,60);
+insert into t (id,a) values (474,61);
+insert into t (id,a) values (474,62);
+insert into t (id,a) values (474,63);
+insert into t (id,a) values (474,64);
+insert into t (id,a) values (474,65);
+insert into t (id,a) values (474,66);
+insert into t (id,a) values (474,67);
+insert into t (id,a) values (474,68);
+insert into t (id,a) values (474,69);
+insert into t (id,a) values (474,70);
+insert into t (id,a) values (474,71);
+insert into t (id,a) values (474,72);
+insert into t (id,a) values (474,73);
+insert into t (id,a) values (474,74);
+insert into t (id,a) values (474,75);
+insert into t (id,a) values (474,76);
+insert into t (id,a) values (474,77);
+insert into t (id,a) values (474,78);
+insert into t (id,a) values (474,79);
+insert into t (id,a) values (474,80);
+insert into t (id,a) values (474,81);
+insert into t (id,a) values (474,82);
+insert into t (id,a) values (474,83);
+insert into t (id,a) values (474,84);
+insert into t (id,a) values (474,85);
+insert into t (id,a) values (474,86);
+insert into t (id,a) values (474,87);
+insert into t (id,a) values (474,88);
+insert into t (id,a) values (474,89);
+insert into t (id,a) values (474,90);
+insert into t (id,a) values (474,91);
+insert into t (id,a) values (474,92);
+insert into t (id,a) values (474,93);
+insert into t (id,a) values (474,94);
+insert into t (id,a) values (474,95);
+insert into t (id,a) values (474,96);
+insert into t (id,a) values (474,97);
+insert into t (id,a) values (474,98);
+insert into t (id,a) values (474,99);
+insert into t (id,a) values (475,0);
+insert into t (id,a) values (475,1);
+insert into t (id,a) values (475,2);
+insert into t (id,a) values (475,3);
+insert into t (id,a) values (475,4);
+insert into t (id,a) values (475,5);
+insert into t (id,a) values (475,6);
+insert into t (id,a) values (475,7);
+insert into t (id,a) values (475,8);
+insert into t (id,a) values (475,9);
+insert into t (id,a) values (475,10);
+insert into t (id,a) values (475,11);
+insert into t (id,a) values (475,12);
+insert into t (id,a) values (475,13);
+insert into t (id,a) values (475,14);
+insert into t (id,a) values (475,15);
+insert into t (id,a) values (475,16);
+insert into t (id,a) values (475,17);
+insert into t (id,a) values (475,18);
+insert into t (id,a) values (475,19);
+insert into t (id,a) values (475,20);
+insert into t (id,a) values (475,21);
+insert into t (id,a) values (475,22);
+insert into t (id,a) values (475,23);
+insert into t (id,a) values (475,24);
+insert into t (id,a) values (475,25);
+insert into t (id,a) values (475,26);
+insert into t (id,a) values (475,27);
+insert into t (id,a) values (475,28);
+insert into t (id,a) values (475,29);
+insert into t (id,a) values (475,30);
+insert into t (id,a) values (475,31);
+insert into t (id,a) values (475,32);
+insert into t (id,a) values (475,33);
+insert into t (id,a) values (475,34);
+insert into t (id,a) values (475,35);
+insert into t (id,a) values (475,36);
+insert into t (id,a) values (475,37);
+insert into t (id,a) values (475,38);
+insert into t (id,a) values (475,39);
+insert into t (id,a) values (475,40);
+insert into t (id,a) values (475,41);
+insert into t (id,a) values (475,42);
+insert into t (id,a) values (475,43);
+insert into t (id,a) values (475,44);
+insert into t (id,a) values (475,45);
+insert into t (id,a) values (475,46);
+insert into t (id,a) values (475,47);
+insert into t (id,a) values (475,48);
+insert into t (id,a) values (475,49);
+insert into t (id,a) values (475,50);
+insert into t (id,a) values (475,51);
+insert into t (id,a) values (475,52);
+insert into t (id,a) values (475,53);
+insert into t (id,a) values (475,54);
+insert into t (id,a) values (475,55);
+insert into t (id,a) values (475,56);
+insert into t (id,a) values (475,57);
+insert into t (id,a) values (475,58);
+insert into t (id,a) values (475,59);
+insert into t (id,a) values (475,60);
+insert into t (id,a) values (475,61);
+insert into t (id,a) values (475,62);
+insert into t (id,a) values (475,63);
+insert into t (id,a) values (475,64);
+insert into t (id,a) values (475,65);
+insert into t (id,a) values (475,66);
+insert into t (id,a) values (475,67);
+insert into t (id,a) values (475,68);
+insert into t (id,a) values (475,69);
+insert into t (id,a) values (475,70);
+insert into t (id,a) values (475,71);
+insert into t (id,a) values (475,72);
+insert into t (id,a) values (475,73);
+insert into t (id,a) values (475,74);
+insert into t (id,a) values (475,75);
+insert into t (id,a) values (475,76);
+insert into t (id,a) values (475,77);
+insert into t (id,a) values (475,78);
+insert into t (id,a) values (475,79);
+insert into t (id,a) values (475,80);
+insert into t (id,a) values (475,81);
+insert into t (id,a) values (475,82);
+insert into t (id,a) values (475,83);
+insert into t (id,a) values (475,84);
+insert into t (id,a) values (475,85);
+insert into t (id,a) values (475,86);
+insert into t (id,a) values (475,87);
+insert into t (id,a) values (475,88);
+insert into t (id,a) values (475,89);
+insert into t (id,a) values (475,90);
+insert into t (id,a) values (475,91);
+insert into t (id,a) values (475,92);
+insert into t (id,a) values (475,93);
+insert into t (id,a) values (475,94);
+insert into t (id,a) values (475,95);
+insert into t (id,a) values (475,96);
+insert into t (id,a) values (475,97);
+insert into t (id,a) values (475,98);
+insert into t (id,a) values (475,99);
+insert into t (id,a) values (476,0);
+insert into t (id,a) values (476,1);
+insert into t (id,a) values (476,2);
+insert into t (id,a) values (476,3);
+insert into t (id,a) values (476,4);
+insert into t (id,a) values (476,5);
+insert into t (id,a) values (476,6);
+insert into t (id,a) values (476,7);
+insert into t (id,a) values (476,8);
+insert into t (id,a) values (476,9);
+insert into t (id,a) values (476,10);
+insert into t (id,a) values (476,11);
+insert into t (id,a) values (476,12);
+insert into t (id,a) values (476,13);
+insert into t (id,a) values (476,14);
+insert into t (id,a) values (476,15);
+insert into t (id,a) values (476,16);
+insert into t (id,a) values (476,17);
+insert into t (id,a) values (476,18);
+insert into t (id,a) values (476,19);
+insert into t (id,a) values (476,20);
+insert into t (id,a) values (476,21);
+insert into t (id,a) values (476,22);
+insert into t (id,a) values (476,23);
+insert into t (id,a) values (476,24);
+insert into t (id,a) values (476,25);
+insert into t (id,a) values (476,26);
+insert into t (id,a) values (476,27);
+insert into t (id,a) values (476,28);
+insert into t (id,a) values (476,29);
+insert into t (id,a) values (476,30);
+insert into t (id,a) values (476,31);
+insert into t (id,a) values (476,32);
+insert into t (id,a) values (476,33);
+insert into t (id,a) values (476,34);
+insert into t (id,a) values (476,35);
+insert into t (id,a) values (476,36);
+insert into t (id,a) values (476,37);
+insert into t (id,a) values (476,38);
+insert into t (id,a) values (476,39);
+insert into t (id,a) values (476,40);
+insert into t (id,a) values (476,41);
+insert into t (id,a) values (476,42);
+insert into t (id,a) values (476,43);
+insert into t (id,a) values (476,44);
+insert into t (id,a) values (476,45);
+insert into t (id,a) values (476,46);
+insert into t (id,a) values (476,47);
+insert into t (id,a) values (476,48);
+insert into t (id,a) values (476,49);
+insert into t (id,a) values (476,50);
+insert into t (id,a) values (476,51);
+insert into t (id,a) values (476,52);
+insert into t (id,a) values (476,53);
+insert into t (id,a) values (476,54);
+insert into t (id,a) values (476,55);
+insert into t (id,a) values (476,56);
+insert into t (id,a) values (476,57);
+insert into t (id,a) values (476,58);
+insert into t (id,a) values (476,59);
+insert into t (id,a) values (476,60);
+insert into t (id,a) values (476,61);
+insert into t (id,a) values (476,62);
+insert into t (id,a) values (476,63);
+insert into t (id,a) values (476,64);
+insert into t (id,a) values (476,65);
+insert into t (id,a) values (476,66);
+insert into t (id,a) values (476,67);
+insert into t (id,a) values (476,68);
+insert into t (id,a) values (476,69);
+insert into t (id,a) values (476,70);
+insert into t (id,a) values (476,71);
+insert into t (id,a) values (476,72);
+insert into t (id,a) values (476,73);
+insert into t (id,a) values (476,74);
+insert into t (id,a) values (476,75);
+insert into t (id,a) values (476,76);
+insert into t (id,a) values (476,77);
+insert into t (id,a) values (476,78);
+insert into t (id,a) values (476,79);
+insert into t (id,a) values (476,80);
+insert into t (id,a) values (476,81);
+insert into t (id,a) values (476,82);
+insert into t (id,a) values (476,83);
+insert into t (id,a) values (476,84);
+insert into t (id,a) values (476,85);
+insert into t (id,a) values (476,86);
+insert into t (id,a) values (476,87);
+insert into t (id,a) values (476,88);
+insert into t (id,a) values (476,89);
+insert into t (id,a) values (476,90);
+insert into t (id,a) values (476,91);
+insert into t (id,a) values (476,92);
+insert into t (id,a) values (476,93);
+insert into t (id,a) values (476,94);
+insert into t (id,a) values (476,95);
+insert into t (id,a) values (476,96);
+insert into t (id,a) values (476,97);
+insert into t (id,a) values (476,98);
+insert into t (id,a) values (476,99);
+insert into t (id,a) values (477,0);
+insert into t (id,a) values (477,1);
+insert into t (id,a) values (477,2);
+insert into t (id,a) values (477,3);
+insert into t (id,a) values (477,4);
+insert into t (id,a) values (477,5);
+insert into t (id,a) values (477,6);
+insert into t (id,a) values (477,7);
+insert into t (id,a) values (477,8);
+insert into t (id,a) values (477,9);
+insert into t (id,a) values (477,10);
+insert into t (id,a) values (477,11);
+insert into t (id,a) values (477,12);
+insert into t (id,a) values (477,13);
+insert into t (id,a) values (477,14);
+insert into t (id,a) values (477,15);
+insert into t (id,a) values (477,16);
+insert into t (id,a) values (477,17);
+insert into t (id,a) values (477,18);
+insert into t (id,a) values (477,19);
+insert into t (id,a) values (477,20);
+insert into t (id,a) values (477,21);
+insert into t (id,a) values (477,22);
+insert into t (id,a) values (477,23);
+insert into t (id,a) values (477,24);
+insert into t (id,a) values (477,25);
+insert into t (id,a) values (477,26);
+insert into t (id,a) values (477,27);
+insert into t (id,a) values (477,28);
+insert into t (id,a) values (477,29);
+insert into t (id,a) values (477,30);
+insert into t (id,a) values (477,31);
+insert into t (id,a) values (477,32);
+insert into t (id,a) values (477,33);
+insert into t (id,a) values (477,34);
+insert into t (id,a) values (477,35);
+insert into t (id,a) values (477,36);
+insert into t (id,a) values (477,37);
+insert into t (id,a) values (477,38);
+insert into t (id,a) values (477,39);
+insert into t (id,a) values (477,40);
+insert into t (id,a) values (477,41);
+insert into t (id,a) values (477,42);
+insert into t (id,a) values (477,43);
+insert into t (id,a) values (477,44);
+insert into t (id,a) values (477,45);
+insert into t (id,a) values (477,46);
+insert into t (id,a) values (477,47);
+insert into t (id,a) values (477,48);
+insert into t (id,a) values (477,49);
+insert into t (id,a) values (477,50);
+insert into t (id,a) values (477,51);
+insert into t (id,a) values (477,52);
+insert into t (id,a) values (477,53);
+insert into t (id,a) values (477,54);
+insert into t (id,a) values (477,55);
+insert into t (id,a) values (477,56);
+insert into t (id,a) values (477,57);
+insert into t (id,a) values (477,58);
+insert into t (id,a) values (477,59);
+insert into t (id,a) values (477,60);
+insert into t (id,a) values (477,61);
+insert into t (id,a) values (477,62);
+insert into t (id,a) values (477,63);
+insert into t (id,a) values (477,64);
+insert into t (id,a) values (477,65);
+insert into t (id,a) values (477,66);
+insert into t (id,a) values (477,67);
+insert into t (id,a) values (477,68);
+insert into t (id,a) values (477,69);
+insert into t (id,a) values (477,70);
+insert into t (id,a) values (477,71);
+insert into t (id,a) values (477,72);
+insert into t (id,a) values (477,73);
+insert into t (id,a) values (477,74);
+insert into t (id,a) values (477,75);
+insert into t (id,a) values (477,76);
+insert into t (id,a) values (477,77);
+insert into t (id,a) values (477,78);
+insert into t (id,a) values (477,79);
+insert into t (id,a) values (477,80);
+insert into t (id,a) values (477,81);
+insert into t (id,a) values (477,82);
+insert into t (id,a) values (477,83);
+insert into t (id,a) values (477,84);
+insert into t (id,a) values (477,85);
+insert into t (id,a) values (477,86);
+insert into t (id,a) values (477,87);
+insert into t (id,a) values (477,88);
+insert into t (id,a) values (477,89);
+insert into t (id,a) values (477,90);
+insert into t (id,a) values (477,91);
+insert into t (id,a) values (477,92);
+insert into t (id,a) values (477,93);
+insert into t (id,a) values (477,94);
+insert into t (id,a) values (477,95);
+insert into t (id,a) values (477,96);
+insert into t (id,a) values (477,97);
+insert into t (id,a) values (477,98);
+insert into t (id,a) values (477,99);
+insert into t (id,a) values (478,0);
+insert into t (id,a) values (478,1);
+insert into t (id,a) values (478,2);
+insert into t (id,a) values (478,3);
+insert into t (id,a) values (478,4);
+insert into t (id,a) values (478,5);
+insert into t (id,a) values (478,6);
+insert into t (id,a) values (478,7);
+insert into t (id,a) values (478,8);
+insert into t (id,a) values (478,9);
+insert into t (id,a) values (478,10);
+insert into t (id,a) values (478,11);
+insert into t (id,a) values (478,12);
+insert into t (id,a) values (478,13);
+insert into t (id,a) values (478,14);
+insert into t (id,a) values (478,15);
+insert into t (id,a) values (478,16);
+insert into t (id,a) values (478,17);
+insert into t (id,a) values (478,18);
+insert into t (id,a) values (478,19);
+insert into t (id,a) values (478,20);
+insert into t (id,a) values (478,21);
+insert into t (id,a) values (478,22);
+insert into t (id,a) values (478,23);
+insert into t (id,a) values (478,24);
+insert into t (id,a) values (478,25);
+insert into t (id,a) values (478,26);
+insert into t (id,a) values (478,27);
+insert into t (id,a) values (478,28);
+insert into t (id,a) values (478,29);
+insert into t (id,a) values (478,30);
+insert into t (id,a) values (478,31);
+insert into t (id,a) values (478,32);
+insert into t (id,a) values (478,33);
+insert into t (id,a) values (478,34);
+insert into t (id,a) values (478,35);
+insert into t (id,a) values (478,36);
+insert into t (id,a) values (478,37);
+insert into t (id,a) values (478,38);
+insert into t (id,a) values (478,39);
+insert into t (id,a) values (478,40);
+insert into t (id,a) values (478,41);
+insert into t (id,a) values (478,42);
+insert into t (id,a) values (478,43);
+insert into t (id,a) values (478,44);
+insert into t (id,a) values (478,45);
+insert into t (id,a) values (478,46);
+insert into t (id,a) values (478,47);
+insert into t (id,a) values (478,48);
+insert into t (id,a) values (478,49);
+insert into t (id,a) values (478,50);
+insert into t (id,a) values (478,51);
+insert into t (id,a) values (478,52);
+insert into t (id,a) values (478,53);
+insert into t (id,a) values (478,54);
+insert into t (id,a) values (478,55);
+insert into t (id,a) values (478,56);
+insert into t (id,a) values (478,57);
+insert into t (id,a) values (478,58);
+insert into t (id,a) values (478,59);
+insert into t (id,a) values (478,60);
+insert into t (id,a) values (478,61);
+insert into t (id,a) values (478,62);
+insert into t (id,a) values (478,63);
+insert into t (id,a) values (478,64);
+insert into t (id,a) values (478,65);
+insert into t (id,a) values (478,66);
+insert into t (id,a) values (478,67);
+insert into t (id,a) values (478,68);
+insert into t (id,a) values (478,69);
+insert into t (id,a) values (478,70);
+insert into t (id,a) values (478,71);
+insert into t (id,a) values (478,72);
+insert into t (id,a) values (478,73);
+insert into t (id,a) values (478,74);
+insert into t (id,a) values (478,75);
+insert into t (id,a) values (478,76);
+insert into t (id,a) values (478,77);
+insert into t (id,a) values (478,78);
+insert into t (id,a) values (478,79);
+insert into t (id,a) values (478,80);
+insert into t (id,a) values (478,81);
+insert into t (id,a) values (478,82);
+insert into t (id,a) values (478,83);
+insert into t (id,a) values (478,84);
+insert into t (id,a) values (478,85);
+insert into t (id,a) values (478,86);
+insert into t (id,a) values (478,87);
+insert into t (id,a) values (478,88);
+insert into t (id,a) values (478,89);
+insert into t (id,a) values (478,90);
+insert into t (id,a) values (478,91);
+insert into t (id,a) values (478,92);
+insert into t (id,a) values (478,93);
+insert into t (id,a) values (478,94);
+insert into t (id,a) values (478,95);
+insert into t (id,a) values (478,96);
+insert into t (id,a) values (478,97);
+insert into t (id,a) values (478,98);
+insert into t (id,a) values (478,99);
+insert into t (id,a) values (479,0);
+insert into t (id,a) values (479,1);
+insert into t (id,a) values (479,2);
+insert into t (id,a) values (479,3);
+insert into t (id,a) values (479,4);
+insert into t (id,a) values (479,5);
+insert into t (id,a) values (479,6);
+insert into t (id,a) values (479,7);
+insert into t (id,a) values (479,8);
+insert into t (id,a) values (479,9);
+insert into t (id,a) values (479,10);
+insert into t (id,a) values (479,11);
+insert into t (id,a) values (479,12);
+insert into t (id,a) values (479,13);
+insert into t (id,a) values (479,14);
+insert into t (id,a) values (479,15);
+insert into t (id,a) values (479,16);
+insert into t (id,a) values (479,17);
+insert into t (id,a) values (479,18);
+insert into t (id,a) values (479,19);
+insert into t (id,a) values (479,20);
+insert into t (id,a) values (479,21);
+insert into t (id,a) values (479,22);
+insert into t (id,a) values (479,23);
+insert into t (id,a) values (479,24);
+insert into t (id,a) values (479,25);
+insert into t (id,a) values (479,26);
+insert into t (id,a) values (479,27);
+insert into t (id,a) values (479,28);
+insert into t (id,a) values (479,29);
+insert into t (id,a) values (479,30);
+insert into t (id,a) values (479,31);
+insert into t (id,a) values (479,32);
+insert into t (id,a) values (479,33);
+insert into t (id,a) values (479,34);
+insert into t (id,a) values (479,35);
+insert into t (id,a) values (479,36);
+insert into t (id,a) values (479,37);
+insert into t (id,a) values (479,38);
+insert into t (id,a) values (479,39);
+insert into t (id,a) values (479,40);
+insert into t (id,a) values (479,41);
+insert into t (id,a) values (479,42);
+insert into t (id,a) values (479,43);
+insert into t (id,a) values (479,44);
+insert into t (id,a) values (479,45);
+insert into t (id,a) values (479,46);
+insert into t (id,a) values (479,47);
+insert into t (id,a) values (479,48);
+insert into t (id,a) values (479,49);
+insert into t (id,a) values (479,50);
+insert into t (id,a) values (479,51);
+insert into t (id,a) values (479,52);
+insert into t (id,a) values (479,53);
+insert into t (id,a) values (479,54);
+insert into t (id,a) values (479,55);
+insert into t (id,a) values (479,56);
+insert into t (id,a) values (479,57);
+insert into t (id,a) values (479,58);
+insert into t (id,a) values (479,59);
+insert into t (id,a) values (479,60);
+insert into t (id,a) values (479,61);
+insert into t (id,a) values (479,62);
+insert into t (id,a) values (479,63);
+insert into t (id,a) values (479,64);
+insert into t (id,a) values (479,65);
+insert into t (id,a) values (479,66);
+insert into t (id,a) values (479,67);
+insert into t (id,a) values (479,68);
+insert into t (id,a) values (479,69);
+insert into t (id,a) values (479,70);
+insert into t (id,a) values (479,71);
+insert into t (id,a) values (479,72);
+insert into t (id,a) values (479,73);
+insert into t (id,a) values (479,74);
+insert into t (id,a) values (479,75);
+insert into t (id,a) values (479,76);
+insert into t (id,a) values (479,77);
+insert into t (id,a) values (479,78);
+insert into t (id,a) values (479,79);
+insert into t (id,a) values (479,80);
+insert into t (id,a) values (479,81);
+insert into t (id,a) values (479,82);
+insert into t (id,a) values (479,83);
+insert into t (id,a) values (479,84);
+insert into t (id,a) values (479,85);
+insert into t (id,a) values (479,86);
+insert into t (id,a) values (479,87);
+insert into t (id,a) values (479,88);
+insert into t (id,a) values (479,89);
+insert into t (id,a) values (479,90);
+insert into t (id,a) values (479,91);
+insert into t (id,a) values (479,92);
+insert into t (id,a) values (479,93);
+insert into t (id,a) values (479,94);
+insert into t (id,a) values (479,95);
+insert into t (id,a) values (479,96);
+insert into t (id,a) values (479,97);
+insert into t (id,a) values (479,98);
+insert into t (id,a) values (479,99);
+insert into t (id,a) values (480,0);
+insert into t (id,a) values (480,1);
+insert into t (id,a) values (480,2);
+insert into t (id,a) values (480,3);
+insert into t (id,a) values (480,4);
+insert into t (id,a) values (480,5);
+insert into t (id,a) values (480,6);
+insert into t (id,a) values (480,7);
+insert into t (id,a) values (480,8);
+insert into t (id,a) values (480,9);
+insert into t (id,a) values (480,10);
+insert into t (id,a) values (480,11);
+insert into t (id,a) values (480,12);
+insert into t (id,a) values (480,13);
+insert into t (id,a) values (480,14);
+insert into t (id,a) values (480,15);
+insert into t (id,a) values (480,16);
+insert into t (id,a) values (480,17);
+insert into t (id,a) values (480,18);
+insert into t (id,a) values (480,19);
+insert into t (id,a) values (480,20);
+insert into t (id,a) values (480,21);
+insert into t (id,a) values (480,22);
+insert into t (id,a) values (480,23);
+insert into t (id,a) values (480,24);
+insert into t (id,a) values (480,25);
+insert into t (id,a) values (480,26);
+insert into t (id,a) values (480,27);
+insert into t (id,a) values (480,28);
+insert into t (id,a) values (480,29);
+insert into t (id,a) values (480,30);
+insert into t (id,a) values (480,31);
+insert into t (id,a) values (480,32);
+insert into t (id,a) values (480,33);
+insert into t (id,a) values (480,34);
+insert into t (id,a) values (480,35);
+insert into t (id,a) values (480,36);
+insert into t (id,a) values (480,37);
+insert into t (id,a) values (480,38);
+insert into t (id,a) values (480,39);
+insert into t (id,a) values (480,40);
+insert into t (id,a) values (480,41);
+insert into t (id,a) values (480,42);
+insert into t (id,a) values (480,43);
+insert into t (id,a) values (480,44);
+insert into t (id,a) values (480,45);
+insert into t (id,a) values (480,46);
+insert into t (id,a) values (480,47);
+insert into t (id,a) values (480,48);
+insert into t (id,a) values (480,49);
+insert into t (id,a) values (480,50);
+insert into t (id,a) values (480,51);
+insert into t (id,a) values (480,52);
+insert into t (id,a) values (480,53);
+insert into t (id,a) values (480,54);
+insert into t (id,a) values (480,55);
+insert into t (id,a) values (480,56);
+insert into t (id,a) values (480,57);
+insert into t (id,a) values (480,58);
+insert into t (id,a) values (480,59);
+insert into t (id,a) values (480,60);
+insert into t (id,a) values (480,61);
+insert into t (id,a) values (480,62);
+insert into t (id,a) values (480,63);
+insert into t (id,a) values (480,64);
+insert into t (id,a) values (480,65);
+insert into t (id,a) values (480,66);
+insert into t (id,a) values (480,67);
+insert into t (id,a) values (480,68);
+insert into t (id,a) values (480,69);
+insert into t (id,a) values (480,70);
+insert into t (id,a) values (480,71);
+insert into t (id,a) values (480,72);
+insert into t (id,a) values (480,73);
+insert into t (id,a) values (480,74);
+insert into t (id,a) values (480,75);
+insert into t (id,a) values (480,76);
+insert into t (id,a) values (480,77);
+insert into t (id,a) values (480,78);
+insert into t (id,a) values (480,79);
+insert into t (id,a) values (480,80);
+insert into t (id,a) values (480,81);
+insert into t (id,a) values (480,82);
+insert into t (id,a) values (480,83);
+insert into t (id,a) values (480,84);
+insert into t (id,a) values (480,85);
+insert into t (id,a) values (480,86);
+insert into t (id,a) values (480,87);
+insert into t (id,a) values (480,88);
+insert into t (id,a) values (480,89);
+insert into t (id,a) values (480,90);
+insert into t (id,a) values (480,91);
+insert into t (id,a) values (480,92);
+insert into t (id,a) values (480,93);
+insert into t (id,a) values (480,94);
+insert into t (id,a) values (480,95);
+insert into t (id,a) values (480,96);
+insert into t (id,a) values (480,97);
+insert into t (id,a) values (480,98);
+insert into t (id,a) values (480,99);
+insert into t (id,a) values (481,0);
+insert into t (id,a) values (481,1);
+insert into t (id,a) values (481,2);
+insert into t (id,a) values (481,3);
+insert into t (id,a) values (481,4);
+insert into t (id,a) values (481,5);
+insert into t (id,a) values (481,6);
+insert into t (id,a) values (481,7);
+insert into t (id,a) values (481,8);
+insert into t (id,a) values (481,9);
+insert into t (id,a) values (481,10);
+insert into t (id,a) values (481,11);
+insert into t (id,a) values (481,12);
+insert into t (id,a) values (481,13);
+insert into t (id,a) values (481,14);
+insert into t (id,a) values (481,15);
+insert into t (id,a) values (481,16);
+insert into t (id,a) values (481,17);
+insert into t (id,a) values (481,18);
+insert into t (id,a) values (481,19);
+insert into t (id,a) values (481,20);
+insert into t (id,a) values (481,21);
+insert into t (id,a) values (481,22);
+insert into t (id,a) values (481,23);
+insert into t (id,a) values (481,24);
+insert into t (id,a) values (481,25);
+insert into t (id,a) values (481,26);
+insert into t (id,a) values (481,27);
+insert into t (id,a) values (481,28);
+insert into t (id,a) values (481,29);
+insert into t (id,a) values (481,30);
+insert into t (id,a) values (481,31);
+insert into t (id,a) values (481,32);
+insert into t (id,a) values (481,33);
+insert into t (id,a) values (481,34);
+insert into t (id,a) values (481,35);
+insert into t (id,a) values (481,36);
+insert into t (id,a) values (481,37);
+insert into t (id,a) values (481,38);
+insert into t (id,a) values (481,39);
+insert into t (id,a) values (481,40);
+insert into t (id,a) values (481,41);
+insert into t (id,a) values (481,42);
+insert into t (id,a) values (481,43);
+insert into t (id,a) values (481,44);
+insert into t (id,a) values (481,45);
+insert into t (id,a) values (481,46);
+insert into t (id,a) values (481,47);
+insert into t (id,a) values (481,48);
+insert into t (id,a) values (481,49);
+insert into t (id,a) values (481,50);
+insert into t (id,a) values (481,51);
+insert into t (id,a) values (481,52);
+insert into t (id,a) values (481,53);
+insert into t (id,a) values (481,54);
+insert into t (id,a) values (481,55);
+insert into t (id,a) values (481,56);
+insert into t (id,a) values (481,57);
+insert into t (id,a) values (481,58);
+insert into t (id,a) values (481,59);
+insert into t (id,a) values (481,60);
+insert into t (id,a) values (481,61);
+insert into t (id,a) values (481,62);
+insert into t (id,a) values (481,63);
+insert into t (id,a) values (481,64);
+insert into t (id,a) values (481,65);
+insert into t (id,a) values (481,66);
+insert into t (id,a) values (481,67);
+insert into t (id,a) values (481,68);
+insert into t (id,a) values (481,69);
+insert into t (id,a) values (481,70);
+insert into t (id,a) values (481,71);
+insert into t (id,a) values (481,72);
+insert into t (id,a) values (481,73);
+insert into t (id,a) values (481,74);
+insert into t (id,a) values (481,75);
+insert into t (id,a) values (481,76);
+insert into t (id,a) values (481,77);
+insert into t (id,a) values (481,78);
+insert into t (id,a) values (481,79);
+insert into t (id,a) values (481,80);
+insert into t (id,a) values (481,81);
+insert into t (id,a) values (481,82);
+insert into t (id,a) values (481,83);
+insert into t (id,a) values (481,84);
+insert into t (id,a) values (481,85);
+insert into t (id,a) values (481,86);
+insert into t (id,a) values (481,87);
+insert into t (id,a) values (481,88);
+insert into t (id,a) values (481,89);
+insert into t (id,a) values (481,90);
+insert into t (id,a) values (481,91);
+insert into t (id,a) values (481,92);
+insert into t (id,a) values (481,93);
+insert into t (id,a) values (481,94);
+insert into t (id,a) values (481,95);
+insert into t (id,a) values (481,96);
+insert into t (id,a) values (481,97);
+insert into t (id,a) values (481,98);
+insert into t (id,a) values (481,99);
+insert into t (id,a) values (482,0);
+insert into t (id,a) values (482,1);
+insert into t (id,a) values (482,2);
+insert into t (id,a) values (482,3);
+insert into t (id,a) values (482,4);
+insert into t (id,a) values (482,5);
+insert into t (id,a) values (482,6);
+insert into t (id,a) values (482,7);
+insert into t (id,a) values (482,8);
+insert into t (id,a) values (482,9);
+insert into t (id,a) values (482,10);
+insert into t (id,a) values (482,11);
+insert into t (id,a) values (482,12);
+insert into t (id,a) values (482,13);
+insert into t (id,a) values (482,14);
+insert into t (id,a) values (482,15);
+insert into t (id,a) values (482,16);
+insert into t (id,a) values (482,17);
+insert into t (id,a) values (482,18);
+insert into t (id,a) values (482,19);
+insert into t (id,a) values (482,20);
+insert into t (id,a) values (482,21);
+insert into t (id,a) values (482,22);
+insert into t (id,a) values (482,23);
+insert into t (id,a) values (482,24);
+insert into t (id,a) values (482,25);
+insert into t (id,a) values (482,26);
+insert into t (id,a) values (482,27);
+insert into t (id,a) values (482,28);
+insert into t (id,a) values (482,29);
+insert into t (id,a) values (482,30);
+insert into t (id,a) values (482,31);
+insert into t (id,a) values (482,32);
+insert into t (id,a) values (482,33);
+insert into t (id,a) values (482,34);
+insert into t (id,a) values (482,35);
+insert into t (id,a) values (482,36);
+insert into t (id,a) values (482,37);
+insert into t (id,a) values (482,38);
+insert into t (id,a) values (482,39);
+insert into t (id,a) values (482,40);
+insert into t (id,a) values (482,41);
+insert into t (id,a) values (482,42);
+insert into t (id,a) values (482,43);
+insert into t (id,a) values (482,44);
+insert into t (id,a) values (482,45);
+insert into t (id,a) values (482,46);
+insert into t (id,a) values (482,47);
+insert into t (id,a) values (482,48);
+insert into t (id,a) values (482,49);
+insert into t (id,a) values (482,50);
+insert into t (id,a) values (482,51);
+insert into t (id,a) values (482,52);
+insert into t (id,a) values (482,53);
+insert into t (id,a) values (482,54);
+insert into t (id,a) values (482,55);
+insert into t (id,a) values (482,56);
+insert into t (id,a) values (482,57);
+insert into t (id,a) values (482,58);
+insert into t (id,a) values (482,59);
+insert into t (id,a) values (482,60);
+insert into t (id,a) values (482,61);
+insert into t (id,a) values (482,62);
+insert into t (id,a) values (482,63);
+insert into t (id,a) values (482,64);
+insert into t (id,a) values (482,65);
+insert into t (id,a) values (482,66);
+insert into t (id,a) values (482,67);
+insert into t (id,a) values (482,68);
+insert into t (id,a) values (482,69);
+insert into t (id,a) values (482,70);
+insert into t (id,a) values (482,71);
+insert into t (id,a) values (482,72);
+insert into t (id,a) values (482,73);
+insert into t (id,a) values (482,74);
+insert into t (id,a) values (482,75);
+insert into t (id,a) values (482,76);
+insert into t (id,a) values (482,77);
+insert into t (id,a) values (482,78);
+insert into t (id,a) values (482,79);
+insert into t (id,a) values (482,80);
+insert into t (id,a) values (482,81);
+insert into t (id,a) values (482,82);
+insert into t (id,a) values (482,83);
+insert into t (id,a) values (482,84);
+insert into t (id,a) values (482,85);
+insert into t (id,a) values (482,86);
+insert into t (id,a) values (482,87);
+insert into t (id,a) values (482,88);
+insert into t (id,a) values (482,89);
+insert into t (id,a) values (482,90);
+insert into t (id,a) values (482,91);
+insert into t (id,a) values (482,92);
+insert into t (id,a) values (482,93);
+insert into t (id,a) values (482,94);
+insert into t (id,a) values (482,95);
+insert into t (id,a) values (482,96);
+insert into t (id,a) values (482,97);
+insert into t (id,a) values (482,98);
+insert into t (id,a) values (482,99);
+insert into t (id,a) values (483,0);
+insert into t (id,a) values (483,1);
+insert into t (id,a) values (483,2);
+insert into t (id,a) values (483,3);
+insert into t (id,a) values (483,4);
+insert into t (id,a) values (483,5);
+insert into t (id,a) values (483,6);
+insert into t (id,a) values (483,7);
+insert into t (id,a) values (483,8);
+insert into t (id,a) values (483,9);
+insert into t (id,a) values (483,10);
+insert into t (id,a) values (483,11);
+insert into t (id,a) values (483,12);
+insert into t (id,a) values (483,13);
+insert into t (id,a) values (483,14);
+insert into t (id,a) values (483,15);
+insert into t (id,a) values (483,16);
+insert into t (id,a) values (483,17);
+insert into t (id,a) values (483,18);
+insert into t (id,a) values (483,19);
+insert into t (id,a) values (483,20);
+insert into t (id,a) values (483,21);
+insert into t (id,a) values (483,22);
+insert into t (id,a) values (483,23);
+insert into t (id,a) values (483,24);
+insert into t (id,a) values (483,25);
+insert into t (id,a) values (483,26);
+insert into t (id,a) values (483,27);
+insert into t (id,a) values (483,28);
+insert into t (id,a) values (483,29);
+insert into t (id,a) values (483,30);
+insert into t (id,a) values (483,31);
+insert into t (id,a) values (483,32);
+insert into t (id,a) values (483,33);
+insert into t (id,a) values (483,34);
+insert into t (id,a) values (483,35);
+insert into t (id,a) values (483,36);
+insert into t (id,a) values (483,37);
+insert into t (id,a) values (483,38);
+insert into t (id,a) values (483,39);
+insert into t (id,a) values (483,40);
+insert into t (id,a) values (483,41);
+insert into t (id,a) values (483,42);
+insert into t (id,a) values (483,43);
+insert into t (id,a) values (483,44);
+insert into t (id,a) values (483,45);
+insert into t (id,a) values (483,46);
+insert into t (id,a) values (483,47);
+insert into t (id,a) values (483,48);
+insert into t (id,a) values (483,49);
+insert into t (id,a) values (483,50);
+insert into t (id,a) values (483,51);
+insert into t (id,a) values (483,52);
+insert into t (id,a) values (483,53);
+insert into t (id,a) values (483,54);
+insert into t (id,a) values (483,55);
+insert into t (id,a) values (483,56);
+insert into t (id,a) values (483,57);
+insert into t (id,a) values (483,58);
+insert into t (id,a) values (483,59);
+insert into t (id,a) values (483,60);
+insert into t (id,a) values (483,61);
+insert into t (id,a) values (483,62);
+insert into t (id,a) values (483,63);
+insert into t (id,a) values (483,64);
+insert into t (id,a) values (483,65);
+insert into t (id,a) values (483,66);
+insert into t (id,a) values (483,67);
+insert into t (id,a) values (483,68);
+insert into t (id,a) values (483,69);
+insert into t (id,a) values (483,70);
+insert into t (id,a) values (483,71);
+insert into t (id,a) values (483,72);
+insert into t (id,a) values (483,73);
+insert into t (id,a) values (483,74);
+insert into t (id,a) values (483,75);
+insert into t (id,a) values (483,76);
+insert into t (id,a) values (483,77);
+insert into t (id,a) values (483,78);
+insert into t (id,a) values (483,79);
+insert into t (id,a) values (483,80);
+insert into t (id,a) values (483,81);
+insert into t (id,a) values (483,82);
+insert into t (id,a) values (483,83);
+insert into t (id,a) values (483,84);
+insert into t (id,a) values (483,85);
+insert into t (id,a) values (483,86);
+insert into t (id,a) values (483,87);
+insert into t (id,a) values (483,88);
+insert into t (id,a) values (483,89);
+insert into t (id,a) values (483,90);
+insert into t (id,a) values (483,91);
+insert into t (id,a) values (483,92);
+insert into t (id,a) values (483,93);
+insert into t (id,a) values (483,94);
+insert into t (id,a) values (483,95);
+insert into t (id,a) values (483,96);
+insert into t (id,a) values (483,97);
+insert into t (id,a) values (483,98);
+insert into t (id,a) values (483,99);
+insert into t (id,a) values (484,0);
+insert into t (id,a) values (484,1);
+insert into t (id,a) values (484,2);
+insert into t (id,a) values (484,3);
+insert into t (id,a) values (484,4);
+insert into t (id,a) values (484,5);
+insert into t (id,a) values (484,6);
+insert into t (id,a) values (484,7);
+insert into t (id,a) values (484,8);
+insert into t (id,a) values (484,9);
+insert into t (id,a) values (484,10);
+insert into t (id,a) values (484,11);
+insert into t (id,a) values (484,12);
+insert into t (id,a) values (484,13);
+insert into t (id,a) values (484,14);
+insert into t (id,a) values (484,15);
+insert into t (id,a) values (484,16);
+insert into t (id,a) values (484,17);
+insert into t (id,a) values (484,18);
+insert into t (id,a) values (484,19);
+insert into t (id,a) values (484,20);
+insert into t (id,a) values (484,21);
+insert into t (id,a) values (484,22);
+insert into t (id,a) values (484,23);
+insert into t (id,a) values (484,24);
+insert into t (id,a) values (484,25);
+insert into t (id,a) values (484,26);
+insert into t (id,a) values (484,27);
+insert into t (id,a) values (484,28);
+insert into t (id,a) values (484,29);
+insert into t (id,a) values (484,30);
+insert into t (id,a) values (484,31);
+insert into t (id,a) values (484,32);
+insert into t (id,a) values (484,33);
+insert into t (id,a) values (484,34);
+insert into t (id,a) values (484,35);
+insert into t (id,a) values (484,36);
+insert into t (id,a) values (484,37);
+insert into t (id,a) values (484,38);
+insert into t (id,a) values (484,39);
+insert into t (id,a) values (484,40);
+insert into t (id,a) values (484,41);
+insert into t (id,a) values (484,42);
+insert into t (id,a) values (484,43);
+insert into t (id,a) values (484,44);
+insert into t (id,a) values (484,45);
+insert into t (id,a) values (484,46);
+insert into t (id,a) values (484,47);
+insert into t (id,a) values (484,48);
+insert into t (id,a) values (484,49);
+insert into t (id,a) values (484,50);
+insert into t (id,a) values (484,51);
+insert into t (id,a) values (484,52);
+insert into t (id,a) values (484,53);
+insert into t (id,a) values (484,54);
+insert into t (id,a) values (484,55);
+insert into t (id,a) values (484,56);
+insert into t (id,a) values (484,57);
+insert into t (id,a) values (484,58);
+insert into t (id,a) values (484,59);
+insert into t (id,a) values (484,60);
+insert into t (id,a) values (484,61);
+insert into t (id,a) values (484,62);
+insert into t (id,a) values (484,63);
+insert into t (id,a) values (484,64);
+insert into t (id,a) values (484,65);
+insert into t (id,a) values (484,66);
+insert into t (id,a) values (484,67);
+insert into t (id,a) values (484,68);
+insert into t (id,a) values (484,69);
+insert into t (id,a) values (484,70);
+insert into t (id,a) values (484,71);
+insert into t (id,a) values (484,72);
+insert into t (id,a) values (484,73);
+insert into t (id,a) values (484,74);
+insert into t (id,a) values (484,75);
+insert into t (id,a) values (484,76);
+insert into t (id,a) values (484,77);
+insert into t (id,a) values (484,78);
+insert into t (id,a) values (484,79);
+insert into t (id,a) values (484,80);
+insert into t (id,a) values (484,81);
+insert into t (id,a) values (484,82);
+insert into t (id,a) values (484,83);
+insert into t (id,a) values (484,84);
+insert into t (id,a) values (484,85);
+insert into t (id,a) values (484,86);
+insert into t (id,a) values (484,87);
+insert into t (id,a) values (484,88);
+insert into t (id,a) values (484,89);
+insert into t (id,a) values (484,90);
+insert into t (id,a) values (484,91);
+insert into t (id,a) values (484,92);
+insert into t (id,a) values (484,93);
+insert into t (id,a) values (484,94);
+insert into t (id,a) values (484,95);
+insert into t (id,a) values (484,96);
+insert into t (id,a) values (484,97);
+insert into t (id,a) values (484,98);
+insert into t (id,a) values (484,99);
+insert into t (id,a) values (485,0);
+insert into t (id,a) values (485,1);
+insert into t (id,a) values (485,2);
+insert into t (id,a) values (485,3);
+insert into t (id,a) values (485,4);
+insert into t (id,a) values (485,5);
+insert into t (id,a) values (485,6);
+insert into t (id,a) values (485,7);
+insert into t (id,a) values (485,8);
+insert into t (id,a) values (485,9);
+insert into t (id,a) values (485,10);
+insert into t (id,a) values (485,11);
+insert into t (id,a) values (485,12);
+insert into t (id,a) values (485,13);
+insert into t (id,a) values (485,14);
+insert into t (id,a) values (485,15);
+insert into t (id,a) values (485,16);
+insert into t (id,a) values (485,17);
+insert into t (id,a) values (485,18);
+insert into t (id,a) values (485,19);
+insert into t (id,a) values (485,20);
+insert into t (id,a) values (485,21);
+insert into t (id,a) values (485,22);
+insert into t (id,a) values (485,23);
+insert into t (id,a) values (485,24);
+insert into t (id,a) values (485,25);
+insert into t (id,a) values (485,26);
+insert into t (id,a) values (485,27);
+insert into t (id,a) values (485,28);
+insert into t (id,a) values (485,29);
+insert into t (id,a) values (485,30);
+insert into t (id,a) values (485,31);
+insert into t (id,a) values (485,32);
+insert into t (id,a) values (485,33);
+insert into t (id,a) values (485,34);
+insert into t (id,a) values (485,35);
+insert into t (id,a) values (485,36);
+insert into t (id,a) values (485,37);
+insert into t (id,a) values (485,38);
+insert into t (id,a) values (485,39);
+insert into t (id,a) values (485,40);
+insert into t (id,a) values (485,41);
+insert into t (id,a) values (485,42);
+insert into t (id,a) values (485,43);
+insert into t (id,a) values (485,44);
+insert into t (id,a) values (485,45);
+insert into t (id,a) values (485,46);
+insert into t (id,a) values (485,47);
+insert into t (id,a) values (485,48);
+insert into t (id,a) values (485,49);
+insert into t (id,a) values (485,50);
+insert into t (id,a) values (485,51);
+insert into t (id,a) values (485,52);
+insert into t (id,a) values (485,53);
+insert into t (id,a) values (485,54);
+insert into t (id,a) values (485,55);
+insert into t (id,a) values (485,56);
+insert into t (id,a) values (485,57);
+insert into t (id,a) values (485,58);
+insert into t (id,a) values (485,59);
+insert into t (id,a) values (485,60);
+insert into t (id,a) values (485,61);
+insert into t (id,a) values (485,62);
+insert into t (id,a) values (485,63);
+insert into t (id,a) values (485,64);
+insert into t (id,a) values (485,65);
+insert into t (id,a) values (485,66);
+insert into t (id,a) values (485,67);
+insert into t (id,a) values (485,68);
+insert into t (id,a) values (485,69);
+insert into t (id,a) values (485,70);
+insert into t (id,a) values (485,71);
+insert into t (id,a) values (485,72);
+insert into t (id,a) values (485,73);
+insert into t (id,a) values (485,74);
+insert into t (id,a) values (485,75);
+insert into t (id,a) values (485,76);
+insert into t (id,a) values (485,77);
+insert into t (id,a) values (485,78);
+insert into t (id,a) values (485,79);
+insert into t (id,a) values (485,80);
+insert into t (id,a) values (485,81);
+insert into t (id,a) values (485,82);
+insert into t (id,a) values (485,83);
+insert into t (id,a) values (485,84);
+insert into t (id,a) values (485,85);
+insert into t (id,a) values (485,86);
+insert into t (id,a) values (485,87);
+insert into t (id,a) values (485,88);
+insert into t (id,a) values (485,89);
+insert into t (id,a) values (485,90);
+insert into t (id,a) values (485,91);
+insert into t (id,a) values (485,92);
+insert into t (id,a) values (485,93);
+insert into t (id,a) values (485,94);
+insert into t (id,a) values (485,95);
+insert into t (id,a) values (485,96);
+insert into t (id,a) values (485,97);
+insert into t (id,a) values (485,98);
+insert into t (id,a) values (485,99);
+insert into t (id,a) values (486,0);
+insert into t (id,a) values (486,1);
+insert into t (id,a) values (486,2);
+insert into t (id,a) values (486,3);
+insert into t (id,a) values (486,4);
+insert into t (id,a) values (486,5);
+insert into t (id,a) values (486,6);
+insert into t (id,a) values (486,7);
+insert into t (id,a) values (486,8);
+insert into t (id,a) values (486,9);
+insert into t (id,a) values (486,10);
+insert into t (id,a) values (486,11);
+insert into t (id,a) values (486,12);
+insert into t (id,a) values (486,13);
+insert into t (id,a) values (486,14);
+insert into t (id,a) values (486,15);
+insert into t (id,a) values (486,16);
+insert into t (id,a) values (486,17);
+insert into t (id,a) values (486,18);
+insert into t (id,a) values (486,19);
+insert into t (id,a) values (486,20);
+insert into t (id,a) values (486,21);
+insert into t (id,a) values (486,22);
+insert into t (id,a) values (486,23);
+insert into t (id,a) values (486,24);
+insert into t (id,a) values (486,25);
+insert into t (id,a) values (486,26);
+insert into t (id,a) values (486,27);
+insert into t (id,a) values (486,28);
+insert into t (id,a) values (486,29);
+insert into t (id,a) values (486,30);
+insert into t (id,a) values (486,31);
+insert into t (id,a) values (486,32);
+insert into t (id,a) values (486,33);
+insert into t (id,a) values (486,34);
+insert into t (id,a) values (486,35);
+insert into t (id,a) values (486,36);
+insert into t (id,a) values (486,37);
+insert into t (id,a) values (486,38);
+insert into t (id,a) values (486,39);
+insert into t (id,a) values (486,40);
+insert into t (id,a) values (486,41);
+insert into t (id,a) values (486,42);
+insert into t (id,a) values (486,43);
+insert into t (id,a) values (486,44);
+insert into t (id,a) values (486,45);
+insert into t (id,a) values (486,46);
+insert into t (id,a) values (486,47);
+insert into t (id,a) values (486,48);
+insert into t (id,a) values (486,49);
+insert into t (id,a) values (486,50);
+insert into t (id,a) values (486,51);
+insert into t (id,a) values (486,52);
+insert into t (id,a) values (486,53);
+insert into t (id,a) values (486,54);
+insert into t (id,a) values (486,55);
+insert into t (id,a) values (486,56);
+insert into t (id,a) values (486,57);
+insert into t (id,a) values (486,58);
+insert into t (id,a) values (486,59);
+insert into t (id,a) values (486,60);
+insert into t (id,a) values (486,61);
+insert into t (id,a) values (486,62);
+insert into t (id,a) values (486,63);
+insert into t (id,a) values (486,64);
+insert into t (id,a) values (486,65);
+insert into t (id,a) values (486,66);
+insert into t (id,a) values (486,67);
+insert into t (id,a) values (486,68);
+insert into t (id,a) values (486,69);
+insert into t (id,a) values (486,70);
+insert into t (id,a) values (486,71);
+insert into t (id,a) values (486,72);
+insert into t (id,a) values (486,73);
+insert into t (id,a) values (486,74);
+insert into t (id,a) values (486,75);
+insert into t (id,a) values (486,76);
+insert into t (id,a) values (486,77);
+insert into t (id,a) values (486,78);
+insert into t (id,a) values (486,79);
+insert into t (id,a) values (486,80);
+insert into t (id,a) values (486,81);
+insert into t (id,a) values (486,82);
+insert into t (id,a) values (486,83);
+insert into t (id,a) values (486,84);
+insert into t (id,a) values (486,85);
+insert into t (id,a) values (486,86);
+insert into t (id,a) values (486,87);
+insert into t (id,a) values (486,88);
+insert into t (id,a) values (486,89);
+insert into t (id,a) values (486,90);
+insert into t (id,a) values (486,91);
+insert into t (id,a) values (486,92);
+insert into t (id,a) values (486,93);
+insert into t (id,a) values (486,94);
+insert into t (id,a) values (486,95);
+insert into t (id,a) values (486,96);
+insert into t (id,a) values (486,97);
+insert into t (id,a) values (486,98);
+insert into t (id,a) values (486,99);
+insert into t (id,a) values (487,0);
+insert into t (id,a) values (487,1);
+insert into t (id,a) values (487,2);
+insert into t (id,a) values (487,3);
+insert into t (id,a) values (487,4);
+insert into t (id,a) values (487,5);
+insert into t (id,a) values (487,6);
+insert into t (id,a) values (487,7);
+insert into t (id,a) values (487,8);
+insert into t (id,a) values (487,9);
+insert into t (id,a) values (487,10);
+insert into t (id,a) values (487,11);
+insert into t (id,a) values (487,12);
+insert into t (id,a) values (487,13);
+insert into t (id,a) values (487,14);
+insert into t (id,a) values (487,15);
+insert into t (id,a) values (487,16);
+insert into t (id,a) values (487,17);
+insert into t (id,a) values (487,18);
+insert into t (id,a) values (487,19);
+insert into t (id,a) values (487,20);
+insert into t (id,a) values (487,21);
+insert into t (id,a) values (487,22);
+insert into t (id,a) values (487,23);
+insert into t (id,a) values (487,24);
+insert into t (id,a) values (487,25);
+insert into t (id,a) values (487,26);
+insert into t (id,a) values (487,27);
+insert into t (id,a) values (487,28);
+insert into t (id,a) values (487,29);
+insert into t (id,a) values (487,30);
+insert into t (id,a) values (487,31);
+insert into t (id,a) values (487,32);
+insert into t (id,a) values (487,33);
+insert into t (id,a) values (487,34);
+insert into t (id,a) values (487,35);
+insert into t (id,a) values (487,36);
+insert into t (id,a) values (487,37);
+insert into t (id,a) values (487,38);
+insert into t (id,a) values (487,39);
+insert into t (id,a) values (487,40);
+insert into t (id,a) values (487,41);
+insert into t (id,a) values (487,42);
+insert into t (id,a) values (487,43);
+insert into t (id,a) values (487,44);
+insert into t (id,a) values (487,45);
+insert into t (id,a) values (487,46);
+insert into t (id,a) values (487,47);
+insert into t (id,a) values (487,48);
+insert into t (id,a) values (487,49);
+insert into t (id,a) values (487,50);
+insert into t (id,a) values (487,51);
+insert into t (id,a) values (487,52);
+insert into t (id,a) values (487,53);
+insert into t (id,a) values (487,54);
+insert into t (id,a) values (487,55);
+insert into t (id,a) values (487,56);
+insert into t (id,a) values (487,57);
+insert into t (id,a) values (487,58);
+insert into t (id,a) values (487,59);
+insert into t (id,a) values (487,60);
+insert into t (id,a) values (487,61);
+insert into t (id,a) values (487,62);
+insert into t (id,a) values (487,63);
+insert into t (id,a) values (487,64);
+insert into t (id,a) values (487,65);
+insert into t (id,a) values (487,66);
+insert into t (id,a) values (487,67);
+insert into t (id,a) values (487,68);
+insert into t (id,a) values (487,69);
+insert into t (id,a) values (487,70);
+insert into t (id,a) values (487,71);
+insert into t (id,a) values (487,72);
+insert into t (id,a) values (487,73);
+insert into t (id,a) values (487,74);
+insert into t (id,a) values (487,75);
+insert into t (id,a) values (487,76);
+insert into t (id,a) values (487,77);
+insert into t (id,a) values (487,78);
+insert into t (id,a) values (487,79);
+insert into t (id,a) values (487,80);
+insert into t (id,a) values (487,81);
+insert into t (id,a) values (487,82);
+insert into t (id,a) values (487,83);
+insert into t (id,a) values (487,84);
+insert into t (id,a) values (487,85);
+insert into t (id,a) values (487,86);
+insert into t (id,a) values (487,87);
+insert into t (id,a) values (487,88);
+insert into t (id,a) values (487,89);
+insert into t (id,a) values (487,90);
+insert into t (id,a) values (487,91);
+insert into t (id,a) values (487,92);
+insert into t (id,a) values (487,93);
+insert into t (id,a) values (487,94);
+insert into t (id,a) values (487,95);
+insert into t (id,a) values (487,96);
+insert into t (id,a) values (487,97);
+insert into t (id,a) values (487,98);
+insert into t (id,a) values (487,99);
+insert into t (id,a) values (488,0);
+insert into t (id,a) values (488,1);
+insert into t (id,a) values (488,2);
+insert into t (id,a) values (488,3);
+insert into t (id,a) values (488,4);
+insert into t (id,a) values (488,5);
+insert into t (id,a) values (488,6);
+insert into t (id,a) values (488,7);
+insert into t (id,a) values (488,8);
+insert into t (id,a) values (488,9);
+insert into t (id,a) values (488,10);
+insert into t (id,a) values (488,11);
+insert into t (id,a) values (488,12);
+insert into t (id,a) values (488,13);
+insert into t (id,a) values (488,14);
+insert into t (id,a) values (488,15);
+insert into t (id,a) values (488,16);
+insert into t (id,a) values (488,17);
+insert into t (id,a) values (488,18);
+insert into t (id,a) values (488,19);
+insert into t (id,a) values (488,20);
+insert into t (id,a) values (488,21);
+insert into t (id,a) values (488,22);
+insert into t (id,a) values (488,23);
+insert into t (id,a) values (488,24);
+insert into t (id,a) values (488,25);
+insert into t (id,a) values (488,26);
+insert into t (id,a) values (488,27);
+insert into t (id,a) values (488,28);
+insert into t (id,a) values (488,29);
+insert into t (id,a) values (488,30);
+insert into t (id,a) values (488,31);
+insert into t (id,a) values (488,32);
+insert into t (id,a) values (488,33);
+insert into t (id,a) values (488,34);
+insert into t (id,a) values (488,35);
+insert into t (id,a) values (488,36);
+insert into t (id,a) values (488,37);
+insert into t (id,a) values (488,38);
+insert into t (id,a) values (488,39);
+insert into t (id,a) values (488,40);
+insert into t (id,a) values (488,41);
+insert into t (id,a) values (488,42);
+insert into t (id,a) values (488,43);
+insert into t (id,a) values (488,44);
+insert into t (id,a) values (488,45);
+insert into t (id,a) values (488,46);
+insert into t (id,a) values (488,47);
+insert into t (id,a) values (488,48);
+insert into t (id,a) values (488,49);
+insert into t (id,a) values (488,50);
+insert into t (id,a) values (488,51);
+insert into t (id,a) values (488,52);
+insert into t (id,a) values (488,53);
+insert into t (id,a) values (488,54);
+insert into t (id,a) values (488,55);
+insert into t (id,a) values (488,56);
+insert into t (id,a) values (488,57);
+insert into t (id,a) values (488,58);
+insert into t (id,a) values (488,59);
+insert into t (id,a) values (488,60);
+insert into t (id,a) values (488,61);
+insert into t (id,a) values (488,62);
+insert into t (id,a) values (488,63);
+insert into t (id,a) values (488,64);
+insert into t (id,a) values (488,65);
+insert into t (id,a) values (488,66);
+insert into t (id,a) values (488,67);
+insert into t (id,a) values (488,68);
+insert into t (id,a) values (488,69);
+insert into t (id,a) values (488,70);
+insert into t (id,a) values (488,71);
+insert into t (id,a) values (488,72);
+insert into t (id,a) values (488,73);
+insert into t (id,a) values (488,74);
+insert into t (id,a) values (488,75);
+insert into t (id,a) values (488,76);
+insert into t (id,a) values (488,77);
+insert into t (id,a) values (488,78);
+insert into t (id,a) values (488,79);
+insert into t (id,a) values (488,80);
+insert into t (id,a) values (488,81);
+insert into t (id,a) values (488,82);
+insert into t (id,a) values (488,83);
+insert into t (id,a) values (488,84);
+insert into t (id,a) values (488,85);
+insert into t (id,a) values (488,86);
+insert into t (id,a) values (488,87);
+insert into t (id,a) values (488,88);
+insert into t (id,a) values (488,89);
+insert into t (id,a) values (488,90);
+insert into t (id,a) values (488,91);
+insert into t (id,a) values (488,92);
+insert into t (id,a) values (488,93);
+insert into t (id,a) values (488,94);
+insert into t (id,a) values (488,95);
+insert into t (id,a) values (488,96);
+insert into t (id,a) values (488,97);
+insert into t (id,a) values (488,98);
+insert into t (id,a) values (488,99);
+insert into t (id,a) values (489,0);
+insert into t (id,a) values (489,1);
+insert into t (id,a) values (489,2);
+insert into t (id,a) values (489,3);
+insert into t (id,a) values (489,4);
+insert into t (id,a) values (489,5);
+insert into t (id,a) values (489,6);
+insert into t (id,a) values (489,7);
+insert into t (id,a) values (489,8);
+insert into t (id,a) values (489,9);
+insert into t (id,a) values (489,10);
+insert into t (id,a) values (489,11);
+insert into t (id,a) values (489,12);
+insert into t (id,a) values (489,13);
+insert into t (id,a) values (489,14);
+insert into t (id,a) values (489,15);
+insert into t (id,a) values (489,16);
+insert into t (id,a) values (489,17);
+insert into t (id,a) values (489,18);
+insert into t (id,a) values (489,19);
+insert into t (id,a) values (489,20);
+insert into t (id,a) values (489,21);
+insert into t (id,a) values (489,22);
+insert into t (id,a) values (489,23);
+insert into t (id,a) values (489,24);
+insert into t (id,a) values (489,25);
+insert into t (id,a) values (489,26);
+insert into t (id,a) values (489,27);
+insert into t (id,a) values (489,28);
+insert into t (id,a) values (489,29);
+insert into t (id,a) values (489,30);
+insert into t (id,a) values (489,31);
+insert into t (id,a) values (489,32);
+insert into t (id,a) values (489,33);
+insert into t (id,a) values (489,34);
+insert into t (id,a) values (489,35);
+insert into t (id,a) values (489,36);
+insert into t (id,a) values (489,37);
+insert into t (id,a) values (489,38);
+insert into t (id,a) values (489,39);
+insert into t (id,a) values (489,40);
+insert into t (id,a) values (489,41);
+insert into t (id,a) values (489,42);
+insert into t (id,a) values (489,43);
+insert into t (id,a) values (489,44);
+insert into t (id,a) values (489,45);
+insert into t (id,a) values (489,46);
+insert into t (id,a) values (489,47);
+insert into t (id,a) values (489,48);
+insert into t (id,a) values (489,49);
+insert into t (id,a) values (489,50);
+insert into t (id,a) values (489,51);
+insert into t (id,a) values (489,52);
+insert into t (id,a) values (489,53);
+insert into t (id,a) values (489,54);
+insert into t (id,a) values (489,55);
+insert into t (id,a) values (489,56);
+insert into t (id,a) values (489,57);
+insert into t (id,a) values (489,58);
+insert into t (id,a) values (489,59);
+insert into t (id,a) values (489,60);
+insert into t (id,a) values (489,61);
+insert into t (id,a) values (489,62);
+insert into t (id,a) values (489,63);
+insert into t (id,a) values (489,64);
+insert into t (id,a) values (489,65);
+insert into t (id,a) values (489,66);
+insert into t (id,a) values (489,67);
+insert into t (id,a) values (489,68);
+insert into t (id,a) values (489,69);
+insert into t (id,a) values (489,70);
+insert into t (id,a) values (489,71);
+insert into t (id,a) values (489,72);
+insert into t (id,a) values (489,73);
+insert into t (id,a) values (489,74);
+insert into t (id,a) values (489,75);
+insert into t (id,a) values (489,76);
+insert into t (id,a) values (489,77);
+insert into t (id,a) values (489,78);
+insert into t (id,a) values (489,79);
+insert into t (id,a) values (489,80);
+insert into t (id,a) values (489,81);
+insert into t (id,a) values (489,82);
+insert into t (id,a) values (489,83);
+insert into t (id,a) values (489,84);
+insert into t (id,a) values (489,85);
+insert into t (id,a) values (489,86);
+insert into t (id,a) values (489,87);
+insert into t (id,a) values (489,88);
+insert into t (id,a) values (489,89);
+insert into t (id,a) values (489,90);
+insert into t (id,a) values (489,91);
+insert into t (id,a) values (489,92);
+insert into t (id,a) values (489,93);
+insert into t (id,a) values (489,94);
+insert into t (id,a) values (489,95);
+insert into t (id,a) values (489,96);
+insert into t (id,a) values (489,97);
+insert into t (id,a) values (489,98);
+insert into t (id,a) values (489,99);
+insert into t (id,a) values (490,0);
+insert into t (id,a) values (490,1);
+insert into t (id,a) values (490,2);
+insert into t (id,a) values (490,3);
+insert into t (id,a) values (490,4);
+insert into t (id,a) values (490,5);
+insert into t (id,a) values (490,6);
+insert into t (id,a) values (490,7);
+insert into t (id,a) values (490,8);
+insert into t (id,a) values (490,9);
+insert into t (id,a) values (490,10);
+insert into t (id,a) values (490,11);
+insert into t (id,a) values (490,12);
+insert into t (id,a) values (490,13);
+insert into t (id,a) values (490,14);
+insert into t (id,a) values (490,15);
+insert into t (id,a) values (490,16);
+insert into t (id,a) values (490,17);
+insert into t (id,a) values (490,18);
+insert into t (id,a) values (490,19);
+insert into t (id,a) values (490,20);
+insert into t (id,a) values (490,21);
+insert into t (id,a) values (490,22);
+insert into t (id,a) values (490,23);
+insert into t (id,a) values (490,24);
+insert into t (id,a) values (490,25);
+insert into t (id,a) values (490,26);
+insert into t (id,a) values (490,27);
+insert into t (id,a) values (490,28);
+insert into t (id,a) values (490,29);
+insert into t (id,a) values (490,30);
+insert into t (id,a) values (490,31);
+insert into t (id,a) values (490,32);
+insert into t (id,a) values (490,33);
+insert into t (id,a) values (490,34);
+insert into t (id,a) values (490,35);
+insert into t (id,a) values (490,36);
+insert into t (id,a) values (490,37);
+insert into t (id,a) values (490,38);
+insert into t (id,a) values (490,39);
+insert into t (id,a) values (490,40);
+insert into t (id,a) values (490,41);
+insert into t (id,a) values (490,42);
+insert into t (id,a) values (490,43);
+insert into t (id,a) values (490,44);
+insert into t (id,a) values (490,45);
+insert into t (id,a) values (490,46);
+insert into t (id,a) values (490,47);
+insert into t (id,a) values (490,48);
+insert into t (id,a) values (490,49);
+insert into t (id,a) values (490,50);
+insert into t (id,a) values (490,51);
+insert into t (id,a) values (490,52);
+insert into t (id,a) values (490,53);
+insert into t (id,a) values (490,54);
+insert into t (id,a) values (490,55);
+insert into t (id,a) values (490,56);
+insert into t (id,a) values (490,57);
+insert into t (id,a) values (490,58);
+insert into t (id,a) values (490,59);
+insert into t (id,a) values (490,60);
+insert into t (id,a) values (490,61);
+insert into t (id,a) values (490,62);
+insert into t (id,a) values (490,63);
+insert into t (id,a) values (490,64);
+insert into t (id,a) values (490,65);
+insert into t (id,a) values (490,66);
+insert into t (id,a) values (490,67);
+insert into t (id,a) values (490,68);
+insert into t (id,a) values (490,69);
+insert into t (id,a) values (490,70);
+insert into t (id,a) values (490,71);
+insert into t (id,a) values (490,72);
+insert into t (id,a) values (490,73);
+insert into t (id,a) values (490,74);
+insert into t (id,a) values (490,75);
+insert into t (id,a) values (490,76);
+insert into t (id,a) values (490,77);
+insert into t (id,a) values (490,78);
+insert into t (id,a) values (490,79);
+insert into t (id,a) values (490,80);
+insert into t (id,a) values (490,81);
+insert into t (id,a) values (490,82);
+insert into t (id,a) values (490,83);
+insert into t (id,a) values (490,84);
+insert into t (id,a) values (490,85);
+insert into t (id,a) values (490,86);
+insert into t (id,a) values (490,87);
+insert into t (id,a) values (490,88);
+insert into t (id,a) values (490,89);
+insert into t (id,a) values (490,90);
+insert into t (id,a) values (490,91);
+insert into t (id,a) values (490,92);
+insert into t (id,a) values (490,93);
+insert into t (id,a) values (490,94);
+insert into t (id,a) values (490,95);
+insert into t (id,a) values (490,96);
+insert into t (id,a) values (490,97);
+insert into t (id,a) values (490,98);
+insert into t (id,a) values (490,99);
+insert into t (id,a) values (491,0);
+insert into t (id,a) values (491,1);
+insert into t (id,a) values (491,2);
+insert into t (id,a) values (491,3);
+insert into t (id,a) values (491,4);
+insert into t (id,a) values (491,5);
+insert into t (id,a) values (491,6);
+insert into t (id,a) values (491,7);
+insert into t (id,a) values (491,8);
+insert into t (id,a) values (491,9);
+insert into t (id,a) values (491,10);
+insert into t (id,a) values (491,11);
+insert into t (id,a) values (491,12);
+insert into t (id,a) values (491,13);
+insert into t (id,a) values (491,14);
+insert into t (id,a) values (491,15);
+insert into t (id,a) values (491,16);
+insert into t (id,a) values (491,17);
+insert into t (id,a) values (491,18);
+insert into t (id,a) values (491,19);
+insert into t (id,a) values (491,20);
+insert into t (id,a) values (491,21);
+insert into t (id,a) values (491,22);
+insert into t (id,a) values (491,23);
+insert into t (id,a) values (491,24);
+insert into t (id,a) values (491,25);
+insert into t (id,a) values (491,26);
+insert into t (id,a) values (491,27);
+insert into t (id,a) values (491,28);
+insert into t (id,a) values (491,29);
+insert into t (id,a) values (491,30);
+insert into t (id,a) values (491,31);
+insert into t (id,a) values (491,32);
+insert into t (id,a) values (491,33);
+insert into t (id,a) values (491,34);
+insert into t (id,a) values (491,35);
+insert into t (id,a) values (491,36);
+insert into t (id,a) values (491,37);
+insert into t (id,a) values (491,38);
+insert into t (id,a) values (491,39);
+insert into t (id,a) values (491,40);
+insert into t (id,a) values (491,41);
+insert into t (id,a) values (491,42);
+insert into t (id,a) values (491,43);
+insert into t (id,a) values (491,44);
+insert into t (id,a) values (491,45);
+insert into t (id,a) values (491,46);
+insert into t (id,a) values (491,47);
+insert into t (id,a) values (491,48);
+insert into t (id,a) values (491,49);
+insert into t (id,a) values (491,50);
+insert into t (id,a) values (491,51);
+insert into t (id,a) values (491,52);
+insert into t (id,a) values (491,53);
+insert into t (id,a) values (491,54);
+insert into t (id,a) values (491,55);
+insert into t (id,a) values (491,56);
+insert into t (id,a) values (491,57);
+insert into t (id,a) values (491,58);
+insert into t (id,a) values (491,59);
+insert into t (id,a) values (491,60);
+insert into t (id,a) values (491,61);
+insert into t (id,a) values (491,62);
+insert into t (id,a) values (491,63);
+insert into t (id,a) values (491,64);
+insert into t (id,a) values (491,65);
+insert into t (id,a) values (491,66);
+insert into t (id,a) values (491,67);
+insert into t (id,a) values (491,68);
+insert into t (id,a) values (491,69);
+insert into t (id,a) values (491,70);
+insert into t (id,a) values (491,71);
+insert into t (id,a) values (491,72);
+insert into t (id,a) values (491,73);
+insert into t (id,a) values (491,74);
+insert into t (id,a) values (491,75);
+insert into t (id,a) values (491,76);
+insert into t (id,a) values (491,77);
+insert into t (id,a) values (491,78);
+insert into t (id,a) values (491,79);
+insert into t (id,a) values (491,80);
+insert into t (id,a) values (491,81);
+insert into t (id,a) values (491,82);
+insert into t (id,a) values (491,83);
+insert into t (id,a) values (491,84);
+insert into t (id,a) values (491,85);
+insert into t (id,a) values (491,86);
+insert into t (id,a) values (491,87);
+insert into t (id,a) values (491,88);
+insert into t (id,a) values (491,89);
+insert into t (id,a) values (491,90);
+insert into t (id,a) values (491,91);
+insert into t (id,a) values (491,92);
+insert into t (id,a) values (491,93);
+insert into t (id,a) values (491,94);
+insert into t (id,a) values (491,95);
+insert into t (id,a) values (491,96);
+insert into t (id,a) values (491,97);
+insert into t (id,a) values (491,98);
+insert into t (id,a) values (491,99);
+insert into t (id,a) values (492,0);
+insert into t (id,a) values (492,1);
+insert into t (id,a) values (492,2);
+insert into t (id,a) values (492,3);
+insert into t (id,a) values (492,4);
+insert into t (id,a) values (492,5);
+insert into t (id,a) values (492,6);
+insert into t (id,a) values (492,7);
+insert into t (id,a) values (492,8);
+insert into t (id,a) values (492,9);
+insert into t (id,a) values (492,10);
+insert into t (id,a) values (492,11);
+insert into t (id,a) values (492,12);
+insert into t (id,a) values (492,13);
+insert into t (id,a) values (492,14);
+insert into t (id,a) values (492,15);
+insert into t (id,a) values (492,16);
+insert into t (id,a) values (492,17);
+insert into t (id,a) values (492,18);
+insert into t (id,a) values (492,19);
+insert into t (id,a) values (492,20);
+insert into t (id,a) values (492,21);
+insert into t (id,a) values (492,22);
+insert into t (id,a) values (492,23);
+insert into t (id,a) values (492,24);
+insert into t (id,a) values (492,25);
+insert into t (id,a) values (492,26);
+insert into t (id,a) values (492,27);
+insert into t (id,a) values (492,28);
+insert into t (id,a) values (492,29);
+insert into t (id,a) values (492,30);
+insert into t (id,a) values (492,31);
+insert into t (id,a) values (492,32);
+insert into t (id,a) values (492,33);
+insert into t (id,a) values (492,34);
+insert into t (id,a) values (492,35);
+insert into t (id,a) values (492,36);
+insert into t (id,a) values (492,37);
+insert into t (id,a) values (492,38);
+insert into t (id,a) values (492,39);
+insert into t (id,a) values (492,40);
+insert into t (id,a) values (492,41);
+insert into t (id,a) values (492,42);
+insert into t (id,a) values (492,43);
+insert into t (id,a) values (492,44);
+insert into t (id,a) values (492,45);
+insert into t (id,a) values (492,46);
+insert into t (id,a) values (492,47);
+insert into t (id,a) values (492,48);
+insert into t (id,a) values (492,49);
+insert into t (id,a) values (492,50);
+insert into t (id,a) values (492,51);
+insert into t (id,a) values (492,52);
+insert into t (id,a) values (492,53);
+insert into t (id,a) values (492,54);
+insert into t (id,a) values (492,55);
+insert into t (id,a) values (492,56);
+insert into t (id,a) values (492,57);
+insert into t (id,a) values (492,58);
+insert into t (id,a) values (492,59);
+insert into t (id,a) values (492,60);
+insert into t (id,a) values (492,61);
+insert into t (id,a) values (492,62);
+insert into t (id,a) values (492,63);
+insert into t (id,a) values (492,64);
+insert into t (id,a) values (492,65);
+insert into t (id,a) values (492,66);
+insert into t (id,a) values (492,67);
+insert into t (id,a) values (492,68);
+insert into t (id,a) values (492,69);
+insert into t (id,a) values (492,70);
+insert into t (id,a) values (492,71);
+insert into t (id,a) values (492,72);
+insert into t (id,a) values (492,73);
+insert into t (id,a) values (492,74);
+insert into t (id,a) values (492,75);
+insert into t (id,a) values (492,76);
+insert into t (id,a) values (492,77);
+insert into t (id,a) values (492,78);
+insert into t (id,a) values (492,79);
+insert into t (id,a) values (492,80);
+insert into t (id,a) values (492,81);
+insert into t (id,a) values (492,82);
+insert into t (id,a) values (492,83);
+insert into t (id,a) values (492,84);
+insert into t (id,a) values (492,85);
+insert into t (id,a) values (492,86);
+insert into t (id,a) values (492,87);
+insert into t (id,a) values (492,88);
+insert into t (id,a) values (492,89);
+insert into t (id,a) values (492,90);
+insert into t (id,a) values (492,91);
+insert into t (id,a) values (492,92);
+insert into t (id,a) values (492,93);
+insert into t (id,a) values (492,94);
+insert into t (id,a) values (492,95);
+insert into t (id,a) values (492,96);
+insert into t (id,a) values (492,97);
+insert into t (id,a) values (492,98);
+insert into t (id,a) values (492,99);
+insert into t (id,a) values (493,0);
+insert into t (id,a) values (493,1);
+insert into t (id,a) values (493,2);
+insert into t (id,a) values (493,3);
+insert into t (id,a) values (493,4);
+insert into t (id,a) values (493,5);
+insert into t (id,a) values (493,6);
+insert into t (id,a) values (493,7);
+insert into t (id,a) values (493,8);
+insert into t (id,a) values (493,9);
+insert into t (id,a) values (493,10);
+insert into t (id,a) values (493,11);
+insert into t (id,a) values (493,12);
+insert into t (id,a) values (493,13);
+insert into t (id,a) values (493,14);
+insert into t (id,a) values (493,15);
+insert into t (id,a) values (493,16);
+insert into t (id,a) values (493,17);
+insert into t (id,a) values (493,18);
+insert into t (id,a) values (493,19);
+insert into t (id,a) values (493,20);
+insert into t (id,a) values (493,21);
+insert into t (id,a) values (493,22);
+insert into t (id,a) values (493,23);
+insert into t (id,a) values (493,24);
+insert into t (id,a) values (493,25);
+insert into t (id,a) values (493,26);
+insert into t (id,a) values (493,27);
+insert into t (id,a) values (493,28);
+insert into t (id,a) values (493,29);
+insert into t (id,a) values (493,30);
+insert into t (id,a) values (493,31);
+insert into t (id,a) values (493,32);
+insert into t (id,a) values (493,33);
+insert into t (id,a) values (493,34);
+insert into t (id,a) values (493,35);
+insert into t (id,a) values (493,36);
+insert into t (id,a) values (493,37);
+insert into t (id,a) values (493,38);
+insert into t (id,a) values (493,39);
+insert into t (id,a) values (493,40);
+insert into t (id,a) values (493,41);
+insert into t (id,a) values (493,42);
+insert into t (id,a) values (493,43);
+insert into t (id,a) values (493,44);
+insert into t (id,a) values (493,45);
+insert into t (id,a) values (493,46);
+insert into t (id,a) values (493,47);
+insert into t (id,a) values (493,48);
+insert into t (id,a) values (493,49);
+insert into t (id,a) values (493,50);
+insert into t (id,a) values (493,51);
+insert into t (id,a) values (493,52);
+insert into t (id,a) values (493,53);
+insert into t (id,a) values (493,54);
+insert into t (id,a) values (493,55);
+insert into t (id,a) values (493,56);
+insert into t (id,a) values (493,57);
+insert into t (id,a) values (493,58);
+insert into t (id,a) values (493,59);
+insert into t (id,a) values (493,60);
+insert into t (id,a) values (493,61);
+insert into t (id,a) values (493,62);
+insert into t (id,a) values (493,63);
+insert into t (id,a) values (493,64);
+insert into t (id,a) values (493,65);
+insert into t (id,a) values (493,66);
+insert into t (id,a) values (493,67);
+insert into t (id,a) values (493,68);
+insert into t (id,a) values (493,69);
+insert into t (id,a) values (493,70);
+insert into t (id,a) values (493,71);
+insert into t (id,a) values (493,72);
+insert into t (id,a) values (493,73);
+insert into t (id,a) values (493,74);
+insert into t (id,a) values (493,75);
+insert into t (id,a) values (493,76);
+insert into t (id,a) values (493,77);
+insert into t (id,a) values (493,78);
+insert into t (id,a) values (493,79);
+insert into t (id,a) values (493,80);
+insert into t (id,a) values (493,81);
+insert into t (id,a) values (493,82);
+insert into t (id,a) values (493,83);
+insert into t (id,a) values (493,84);
+insert into t (id,a) values (493,85);
+insert into t (id,a) values (493,86);
+insert into t (id,a) values (493,87);
+insert into t (id,a) values (493,88);
+insert into t (id,a) values (493,89);
+insert into t (id,a) values (493,90);
+insert into t (id,a) values (493,91);
+insert into t (id,a) values (493,92);
+insert into t (id,a) values (493,93);
+insert into t (id,a) values (493,94);
+insert into t (id,a) values (493,95);
+insert into t (id,a) values (493,96);
+insert into t (id,a) values (493,97);
+insert into t (id,a) values (493,98);
+insert into t (id,a) values (493,99);
+insert into t (id,a) values (494,0);
+insert into t (id,a) values (494,1);
+insert into t (id,a) values (494,2);
+insert into t (id,a) values (494,3);
+insert into t (id,a) values (494,4);
+insert into t (id,a) values (494,5);
+insert into t (id,a) values (494,6);
+insert into t (id,a) values (494,7);
+insert into t (id,a) values (494,8);
+insert into t (id,a) values (494,9);
+insert into t (id,a) values (494,10);
+insert into t (id,a) values (494,11);
+insert into t (id,a) values (494,12);
+insert into t (id,a) values (494,13);
+insert into t (id,a) values (494,14);
+insert into t (id,a) values (494,15);
+insert into t (id,a) values (494,16);
+insert into t (id,a) values (494,17);
+insert into t (id,a) values (494,18);
+insert into t (id,a) values (494,19);
+insert into t (id,a) values (494,20);
+insert into t (id,a) values (494,21);
+insert into t (id,a) values (494,22);
+insert into t (id,a) values (494,23);
+insert into t (id,a) values (494,24);
+insert into t (id,a) values (494,25);
+insert into t (id,a) values (494,26);
+insert into t (id,a) values (494,27);
+insert into t (id,a) values (494,28);
+insert into t (id,a) values (494,29);
+insert into t (id,a) values (494,30);
+insert into t (id,a) values (494,31);
+insert into t (id,a) values (494,32);
+insert into t (id,a) values (494,33);
+insert into t (id,a) values (494,34);
+insert into t (id,a) values (494,35);
+insert into t (id,a) values (494,36);
+insert into t (id,a) values (494,37);
+insert into t (id,a) values (494,38);
+insert into t (id,a) values (494,39);
+insert into t (id,a) values (494,40);
+insert into t (id,a) values (494,41);
+insert into t (id,a) values (494,42);
+insert into t (id,a) values (494,43);
+insert into t (id,a) values (494,44);
+insert into t (id,a) values (494,45);
+insert into t (id,a) values (494,46);
+insert into t (id,a) values (494,47);
+insert into t (id,a) values (494,48);
+insert into t (id,a) values (494,49);
+insert into t (id,a) values (494,50);
+insert into t (id,a) values (494,51);
+insert into t (id,a) values (494,52);
+insert into t (id,a) values (494,53);
+insert into t (id,a) values (494,54);
+insert into t (id,a) values (494,55);
+insert into t (id,a) values (494,56);
+insert into t (id,a) values (494,57);
+insert into t (id,a) values (494,58);
+insert into t (id,a) values (494,59);
+insert into t (id,a) values (494,60);
+insert into t (id,a) values (494,61);
+insert into t (id,a) values (494,62);
+insert into t (id,a) values (494,63);
+insert into t (id,a) values (494,64);
+insert into t (id,a) values (494,65);
+insert into t (id,a) values (494,66);
+insert into t (id,a) values (494,67);
+insert into t (id,a) values (494,68);
+insert into t (id,a) values (494,69);
+insert into t (id,a) values (494,70);
+insert into t (id,a) values (494,71);
+insert into t (id,a) values (494,72);
+insert into t (id,a) values (494,73);
+insert into t (id,a) values (494,74);
+insert into t (id,a) values (494,75);
+insert into t (id,a) values (494,76);
+insert into t (id,a) values (494,77);
+insert into t (id,a) values (494,78);
+insert into t (id,a) values (494,79);
+insert into t (id,a) values (494,80);
+insert into t (id,a) values (494,81);
+insert into t (id,a) values (494,82);
+insert into t (id,a) values (494,83);
+insert into t (id,a) values (494,84);
+insert into t (id,a) values (494,85);
+insert into t (id,a) values (494,86);
+insert into t (id,a) values (494,87);
+insert into t (id,a) values (494,88);
+insert into t (id,a) values (494,89);
+insert into t (id,a) values (494,90);
+insert into t (id,a) values (494,91);
+insert into t (id,a) values (494,92);
+insert into t (id,a) values (494,93);
+insert into t (id,a) values (494,94);
+insert into t (id,a) values (494,95);
+insert into t (id,a) values (494,96);
+insert into t (id,a) values (494,97);
+insert into t (id,a) values (494,98);
+insert into t (id,a) values (494,99);
+insert into t (id,a) values (495,0);
+insert into t (id,a) values (495,1);
+insert into t (id,a) values (495,2);
+insert into t (id,a) values (495,3);
+insert into t (id,a) values (495,4);
+insert into t (id,a) values (495,5);
+insert into t (id,a) values (495,6);
+insert into t (id,a) values (495,7);
+insert into t (id,a) values (495,8);
+insert into t (id,a) values (495,9);
+insert into t (id,a) values (495,10);
+insert into t (id,a) values (495,11);
+insert into t (id,a) values (495,12);
+insert into t (id,a) values (495,13);
+insert into t (id,a) values (495,14);
+insert into t (id,a) values (495,15);
+insert into t (id,a) values (495,16);
+insert into t (id,a) values (495,17);
+insert into t (id,a) values (495,18);
+insert into t (id,a) values (495,19);
+insert into t (id,a) values (495,20);
+insert into t (id,a) values (495,21);
+insert into t (id,a) values (495,22);
+insert into t (id,a) values (495,23);
+insert into t (id,a) values (495,24);
+insert into t (id,a) values (495,25);
+insert into t (id,a) values (495,26);
+insert into t (id,a) values (495,27);
+insert into t (id,a) values (495,28);
+insert into t (id,a) values (495,29);
+insert into t (id,a) values (495,30);
+insert into t (id,a) values (495,31);
+insert into t (id,a) values (495,32);
+insert into t (id,a) values (495,33);
+insert into t (id,a) values (495,34);
+insert into t (id,a) values (495,35);
+insert into t (id,a) values (495,36);
+insert into t (id,a) values (495,37);
+insert into t (id,a) values (495,38);
+insert into t (id,a) values (495,39);
+insert into t (id,a) values (495,40);
+insert into t (id,a) values (495,41);
+insert into t (id,a) values (495,42);
+insert into t (id,a) values (495,43);
+insert into t (id,a) values (495,44);
+insert into t (id,a) values (495,45);
+insert into t (id,a) values (495,46);
+insert into t (id,a) values (495,47);
+insert into t (id,a) values (495,48);
+insert into t (id,a) values (495,49);
+insert into t (id,a) values (495,50);
+insert into t (id,a) values (495,51);
+insert into t (id,a) values (495,52);
+insert into t (id,a) values (495,53);
+insert into t (id,a) values (495,54);
+insert into t (id,a) values (495,55);
+insert into t (id,a) values (495,56);
+insert into t (id,a) values (495,57);
+insert into t (id,a) values (495,58);
+insert into t (id,a) values (495,59);
+insert into t (id,a) values (495,60);
+insert into t (id,a) values (495,61);
+insert into t (id,a) values (495,62);
+insert into t (id,a) values (495,63);
+insert into t (id,a) values (495,64);
+insert into t (id,a) values (495,65);
+insert into t (id,a) values (495,66);
+insert into t (id,a) values (495,67);
+insert into t (id,a) values (495,68);
+insert into t (id,a) values (495,69);
+insert into t (id,a) values (495,70);
+insert into t (id,a) values (495,71);
+insert into t (id,a) values (495,72);
+insert into t (id,a) values (495,73);
+insert into t (id,a) values (495,74);
+insert into t (id,a) values (495,75);
+insert into t (id,a) values (495,76);
+insert into t (id,a) values (495,77);
+insert into t (id,a) values (495,78);
+insert into t (id,a) values (495,79);
+insert into t (id,a) values (495,80);
+insert into t (id,a) values (495,81);
+insert into t (id,a) values (495,82);
+insert into t (id,a) values (495,83);
+insert into t (id,a) values (495,84);
+insert into t (id,a) values (495,85);
+insert into t (id,a) values (495,86);
+insert into t (id,a) values (495,87);
+insert into t (id,a) values (495,88);
+insert into t (id,a) values (495,89);
+insert into t (id,a) values (495,90);
+insert into t (id,a) values (495,91);
+insert into t (id,a) values (495,92);
+insert into t (id,a) values (495,93);
+insert into t (id,a) values (495,94);
+insert into t (id,a) values (495,95);
+insert into t (id,a) values (495,96);
+insert into t (id,a) values (495,97);
+insert into t (id,a) values (495,98);
+insert into t (id,a) values (495,99);
+insert into t (id,a) values (496,0);
+insert into t (id,a) values (496,1);
+insert into t (id,a) values (496,2);
+insert into t (id,a) values (496,3);
+insert into t (id,a) values (496,4);
+insert into t (id,a) values (496,5);
+insert into t (id,a) values (496,6);
+insert into t (id,a) values (496,7);
+insert into t (id,a) values (496,8);
+insert into t (id,a) values (496,9);
+insert into t (id,a) values (496,10);
+insert into t (id,a) values (496,11);
+insert into t (id,a) values (496,12);
+insert into t (id,a) values (496,13);
+insert into t (id,a) values (496,14);
+insert into t (id,a) values (496,15);
+insert into t (id,a) values (496,16);
+insert into t (id,a) values (496,17);
+insert into t (id,a) values (496,18);
+insert into t (id,a) values (496,19);
+insert into t (id,a) values (496,20);
+insert into t (id,a) values (496,21);
+insert into t (id,a) values (496,22);
+insert into t (id,a) values (496,23);
+insert into t (id,a) values (496,24);
+insert into t (id,a) values (496,25);
+insert into t (id,a) values (496,26);
+insert into t (id,a) values (496,27);
+insert into t (id,a) values (496,28);
+insert into t (id,a) values (496,29);
+insert into t (id,a) values (496,30);
+insert into t (id,a) values (496,31);
+insert into t (id,a) values (496,32);
+insert into t (id,a) values (496,33);
+insert into t (id,a) values (496,34);
+insert into t (id,a) values (496,35);
+insert into t (id,a) values (496,36);
+insert into t (id,a) values (496,37);
+insert into t (id,a) values (496,38);
+insert into t (id,a) values (496,39);
+insert into t (id,a) values (496,40);
+insert into t (id,a) values (496,41);
+insert into t (id,a) values (496,42);
+insert into t (id,a) values (496,43);
+insert into t (id,a) values (496,44);
+insert into t (id,a) values (496,45);
+insert into t (id,a) values (496,46);
+insert into t (id,a) values (496,47);
+insert into t (id,a) values (496,48);
+insert into t (id,a) values (496,49);
+insert into t (id,a) values (496,50);
+insert into t (id,a) values (496,51);
+insert into t (id,a) values (496,52);
+insert into t (id,a) values (496,53);
+insert into t (id,a) values (496,54);
+insert into t (id,a) values (496,55);
+insert into t (id,a) values (496,56);
+insert into t (id,a) values (496,57);
+insert into t (id,a) values (496,58);
+insert into t (id,a) values (496,59);
+insert into t (id,a) values (496,60);
+insert into t (id,a) values (496,61);
+insert into t (id,a) values (496,62);
+insert into t (id,a) values (496,63);
+insert into t (id,a) values (496,64);
+insert into t (id,a) values (496,65);
+insert into t (id,a) values (496,66);
+insert into t (id,a) values (496,67);
+insert into t (id,a) values (496,68);
+insert into t (id,a) values (496,69);
+insert into t (id,a) values (496,70);
+insert into t (id,a) values (496,71);
+insert into t (id,a) values (496,72);
+insert into t (id,a) values (496,73);
+insert into t (id,a) values (496,74);
+insert into t (id,a) values (496,75);
+insert into t (id,a) values (496,76);
+insert into t (id,a) values (496,77);
+insert into t (id,a) values (496,78);
+insert into t (id,a) values (496,79);
+insert into t (id,a) values (496,80);
+insert into t (id,a) values (496,81);
+insert into t (id,a) values (496,82);
+insert into t (id,a) values (496,83);
+insert into t (id,a) values (496,84);
+insert into t (id,a) values (496,85);
+insert into t (id,a) values (496,86);
+insert into t (id,a) values (496,87);
+insert into t (id,a) values (496,88);
+insert into t (id,a) values (496,89);
+insert into t (id,a) values (496,90);
+insert into t (id,a) values (496,91);
+insert into t (id,a) values (496,92);
+insert into t (id,a) values (496,93);
+insert into t (id,a) values (496,94);
+insert into t (id,a) values (496,95);
+insert into t (id,a) values (496,96);
+insert into t (id,a) values (496,97);
+insert into t (id,a) values (496,98);
+insert into t (id,a) values (496,99);
+insert into t (id,a) values (497,0);
+insert into t (id,a) values (497,1);
+insert into t (id,a) values (497,2);
+insert into t (id,a) values (497,3);
+insert into t (id,a) values (497,4);
+insert into t (id,a) values (497,5);
+insert into t (id,a) values (497,6);
+insert into t (id,a) values (497,7);
+insert into t (id,a) values (497,8);
+insert into t (id,a) values (497,9);
+insert into t (id,a) values (497,10);
+insert into t (id,a) values (497,11);
+insert into t (id,a) values (497,12);
+insert into t (id,a) values (497,13);
+insert into t (id,a) values (497,14);
+insert into t (id,a) values (497,15);
+insert into t (id,a) values (497,16);
+insert into t (id,a) values (497,17);
+insert into t (id,a) values (497,18);
+insert into t (id,a) values (497,19);
+insert into t (id,a) values (497,20);
+insert into t (id,a) values (497,21);
+insert into t (id,a) values (497,22);
+insert into t (id,a) values (497,23);
+insert into t (id,a) values (497,24);
+insert into t (id,a) values (497,25);
+insert into t (id,a) values (497,26);
+insert into t (id,a) values (497,27);
+insert into t (id,a) values (497,28);
+insert into t (id,a) values (497,29);
+insert into t (id,a) values (497,30);
+insert into t (id,a) values (497,31);
+insert into t (id,a) values (497,32);
+insert into t (id,a) values (497,33);
+insert into t (id,a) values (497,34);
+insert into t (id,a) values (497,35);
+insert into t (id,a) values (497,36);
+insert into t (id,a) values (497,37);
+insert into t (id,a) values (497,38);
+insert into t (id,a) values (497,39);
+insert into t (id,a) values (497,40);
+insert into t (id,a) values (497,41);
+insert into t (id,a) values (497,42);
+insert into t (id,a) values (497,43);
+insert into t (id,a) values (497,44);
+insert into t (id,a) values (497,45);
+insert into t (id,a) values (497,46);
+insert into t (id,a) values (497,47);
+insert into t (id,a) values (497,48);
+insert into t (id,a) values (497,49);
+insert into t (id,a) values (497,50);
+insert into t (id,a) values (497,51);
+insert into t (id,a) values (497,52);
+insert into t (id,a) values (497,53);
+insert into t (id,a) values (497,54);
+insert into t (id,a) values (497,55);
+insert into t (id,a) values (497,56);
+insert into t (id,a) values (497,57);
+insert into t (id,a) values (497,58);
+insert into t (id,a) values (497,59);
+insert into t (id,a) values (497,60);
+insert into t (id,a) values (497,61);
+insert into t (id,a) values (497,62);
+insert into t (id,a) values (497,63);
+insert into t (id,a) values (497,64);
+insert into t (id,a) values (497,65);
+insert into t (id,a) values (497,66);
+insert into t (id,a) values (497,67);
+insert into t (id,a) values (497,68);
+insert into t (id,a) values (497,69);
+insert into t (id,a) values (497,70);
+insert into t (id,a) values (497,71);
+insert into t (id,a) values (497,72);
+insert into t (id,a) values (497,73);
+insert into t (id,a) values (497,74);
+insert into t (id,a) values (497,75);
+insert into t (id,a) values (497,76);
+insert into t (id,a) values (497,77);
+insert into t (id,a) values (497,78);
+insert into t (id,a) values (497,79);
+insert into t (id,a) values (497,80);
+insert into t (id,a) values (497,81);
+insert into t (id,a) values (497,82);
+insert into t (id,a) values (497,83);
+insert into t (id,a) values (497,84);
+insert into t (id,a) values (497,85);
+insert into t (id,a) values (497,86);
+insert into t (id,a) values (497,87);
+insert into t (id,a) values (497,88);
+insert into t (id,a) values (497,89);
+insert into t (id,a) values (497,90);
+insert into t (id,a) values (497,91);
+insert into t (id,a) values (497,92);
+insert into t (id,a) values (497,93);
+insert into t (id,a) values (497,94);
+insert into t (id,a) values (497,95);
+insert into t (id,a) values (497,96);
+insert into t (id,a) values (497,97);
+insert into t (id,a) values (497,98);
+insert into t (id,a) values (497,99);
+insert into t (id,a) values (498,0);
+insert into t (id,a) values (498,1);
+insert into t (id,a) values (498,2);
+insert into t (id,a) values (498,3);
+insert into t (id,a) values (498,4);
+insert into t (id,a) values (498,5);
+insert into t (id,a) values (498,6);
+insert into t (id,a) values (498,7);
+insert into t (id,a) values (498,8);
+insert into t (id,a) values (498,9);
+insert into t (id,a) values (498,10);
+insert into t (id,a) values (498,11);
+insert into t (id,a) values (498,12);
+insert into t (id,a) values (498,13);
+insert into t (id,a) values (498,14);
+insert into t (id,a) values (498,15);
+insert into t (id,a) values (498,16);
+insert into t (id,a) values (498,17);
+insert into t (id,a) values (498,18);
+insert into t (id,a) values (498,19);
+insert into t (id,a) values (498,20);
+insert into t (id,a) values (498,21);
+insert into t (id,a) values (498,22);
+insert into t (id,a) values (498,23);
+insert into t (id,a) values (498,24);
+insert into t (id,a) values (498,25);
+insert into t (id,a) values (498,26);
+insert into t (id,a) values (498,27);
+insert into t (id,a) values (498,28);
+insert into t (id,a) values (498,29);
+insert into t (id,a) values (498,30);
+insert into t (id,a) values (498,31);
+insert into t (id,a) values (498,32);
+insert into t (id,a) values (498,33);
+insert into t (id,a) values (498,34);
+insert into t (id,a) values (498,35);
+insert into t (id,a) values (498,36);
+insert into t (id,a) values (498,37);
+insert into t (id,a) values (498,38);
+insert into t (id,a) values (498,39);
+insert into t (id,a) values (498,40);
+insert into t (id,a) values (498,41);
+insert into t (id,a) values (498,42);
+insert into t (id,a) values (498,43);
+insert into t (id,a) values (498,44);
+insert into t (id,a) values (498,45);
+insert into t (id,a) values (498,46);
+insert into t (id,a) values (498,47);
+insert into t (id,a) values (498,48);
+insert into t (id,a) values (498,49);
+insert into t (id,a) values (498,50);
+insert into t (id,a) values (498,51);
+insert into t (id,a) values (498,52);
+insert into t (id,a) values (498,53);
+insert into t (id,a) values (498,54);
+insert into t (id,a) values (498,55);
+insert into t (id,a) values (498,56);
+insert into t (id,a) values (498,57);
+insert into t (id,a) values (498,58);
+insert into t (id,a) values (498,59);
+insert into t (id,a) values (498,60);
+insert into t (id,a) values (498,61);
+insert into t (id,a) values (498,62);
+insert into t (id,a) values (498,63);
+insert into t (id,a) values (498,64);
+insert into t (id,a) values (498,65);
+insert into t (id,a) values (498,66);
+insert into t (id,a) values (498,67);
+insert into t (id,a) values (498,68);
+insert into t (id,a) values (498,69);
+insert into t (id,a) values (498,70);
+insert into t (id,a) values (498,71);
+insert into t (id,a) values (498,72);
+insert into t (id,a) values (498,73);
+insert into t (id,a) values (498,74);
+insert into t (id,a) values (498,75);
+insert into t (id,a) values (498,76);
+insert into t (id,a) values (498,77);
+insert into t (id,a) values (498,78);
+insert into t (id,a) values (498,79);
+insert into t (id,a) values (498,80);
+insert into t (id,a) values (498,81);
+insert into t (id,a) values (498,82);
+insert into t (id,a) values (498,83);
+insert into t (id,a) values (498,84);
+insert into t (id,a) values (498,85);
+insert into t (id,a) values (498,86);
+insert into t (id,a) values (498,87);
+insert into t (id,a) values (498,88);
+insert into t (id,a) values (498,89);
+insert into t (id,a) values (498,90);
+insert into t (id,a) values (498,91);
+insert into t (id,a) values (498,92);
+insert into t (id,a) values (498,93);
+insert into t (id,a) values (498,94);
+insert into t (id,a) values (498,95);
+insert into t (id,a) values (498,96);
+insert into t (id,a) values (498,97);
+insert into t (id,a) values (498,98);
+insert into t (id,a) values (498,99);
+insert into t (id,a) values (499,0);
+insert into t (id,a) values (499,1);
+insert into t (id,a) values (499,2);
+insert into t (id,a) values (499,3);
+insert into t (id,a) values (499,4);
+insert into t (id,a) values (499,5);
+insert into t (id,a) values (499,6);
+insert into t (id,a) values (499,7);
+insert into t (id,a) values (499,8);
+insert into t (id,a) values (499,9);
+insert into t (id,a) values (499,10);
+insert into t (id,a) values (499,11);
+insert into t (id,a) values (499,12);
+insert into t (id,a) values (499,13);
+insert into t (id,a) values (499,14);
+insert into t (id,a) values (499,15);
+insert into t (id,a) values (499,16);
+insert into t (id,a) values (499,17);
+insert into t (id,a) values (499,18);
+insert into t (id,a) values (499,19);
+insert into t (id,a) values (499,20);
+insert into t (id,a) values (499,21);
+insert into t (id,a) values (499,22);
+insert into t (id,a) values (499,23);
+insert into t (id,a) values (499,24);
+insert into t (id,a) values (499,25);
+insert into t (id,a) values (499,26);
+insert into t (id,a) values (499,27);
+insert into t (id,a) values (499,28);
+insert into t (id,a) values (499,29);
+insert into t (id,a) values (499,30);
+insert into t (id,a) values (499,31);
+insert into t (id,a) values (499,32);
+insert into t (id,a) values (499,33);
+insert into t (id,a) values (499,34);
+insert into t (id,a) values (499,35);
+insert into t (id,a) values (499,36);
+insert into t (id,a) values (499,37);
+insert into t (id,a) values (499,38);
+insert into t (id,a) values (499,39);
+insert into t (id,a) values (499,40);
+insert into t (id,a) values (499,41);
+insert into t (id,a) values (499,42);
+insert into t (id,a) values (499,43);
+insert into t (id,a) values (499,44);
+insert into t (id,a) values (499,45);
+insert into t (id,a) values (499,46);
+insert into t (id,a) values (499,47);
+insert into t (id,a) values (499,48);
+insert into t (id,a) values (499,49);
+insert into t (id,a) values (499,50);
+insert into t (id,a) values (499,51);
+insert into t (id,a) values (499,52);
+insert into t (id,a) values (499,53);
+insert into t (id,a) values (499,54);
+insert into t (id,a) values (499,55);
+insert into t (id,a) values (499,56);
+insert into t (id,a) values (499,57);
+insert into t (id,a) values (499,58);
+insert into t (id,a) values (499,59);
+insert into t (id,a) values (499,60);
+insert into t (id,a) values (499,61);
+insert into t (id,a) values (499,62);
+insert into t (id,a) values (499,63);
+insert into t (id,a) values (499,64);
+insert into t (id,a) values (499,65);
+insert into t (id,a) values (499,66);
+insert into t (id,a) values (499,67);
+insert into t (id,a) values (499,68);
+insert into t (id,a) values (499,69);
+insert into t (id,a) values (499,70);
+insert into t (id,a) values (499,71);
+insert into t (id,a) values (499,72);
+insert into t (id,a) values (499,73);
+insert into t (id,a) values (499,74);
+insert into t (id,a) values (499,75);
+insert into t (id,a) values (499,76);
+insert into t (id,a) values (499,77);
+insert into t (id,a) values (499,78);
+insert into t (id,a) values (499,79);
+insert into t (id,a) values (499,80);
+insert into t (id,a) values (499,81);
+insert into t (id,a) values (499,82);
+insert into t (id,a) values (499,83);
+insert into t (id,a) values (499,84);
+insert into t (id,a) values (499,85);
+insert into t (id,a) values (499,86);
+insert into t (id,a) values (499,87);
+insert into t (id,a) values (499,88);
+insert into t (id,a) values (499,89);
+insert into t (id,a) values (499,90);
+insert into t (id,a) values (499,91);
+insert into t (id,a) values (499,92);
+insert into t (id,a) values (499,93);
+insert into t (id,a) values (499,94);
+insert into t (id,a) values (499,95);
+insert into t (id,a) values (499,96);
+insert into t (id,a) values (499,97);
+insert into t (id,a) values (499,98);
+insert into t (id,a) values (499,99);
+insert into t (id,a) values (500,0);
+insert into t (id,a) values (500,1);
+insert into t (id,a) values (500,2);
+insert into t (id,a) values (500,3);
+insert into t (id,a) values (500,4);
+insert into t (id,a) values (500,5);
+insert into t (id,a) values (500,6);
+insert into t (id,a) values (500,7);
+insert into t (id,a) values (500,8);
+insert into t (id,a) values (500,9);
+insert into t (id,a) values (500,10);
+insert into t (id,a) values (500,11);
+insert into t (id,a) values (500,12);
+insert into t (id,a) values (500,13);
+insert into t (id,a) values (500,14);
+insert into t (id,a) values (500,15);
+insert into t (id,a) values (500,16);
+insert into t (id,a) values (500,17);
+insert into t (id,a) values (500,18);
+insert into t (id,a) values (500,19);
+insert into t (id,a) values (500,20);
+insert into t (id,a) values (500,21);
+insert into t (id,a) values (500,22);
+insert into t (id,a) values (500,23);
+insert into t (id,a) values (500,24);
+insert into t (id,a) values (500,25);
+insert into t (id,a) values (500,26);
+insert into t (id,a) values (500,27);
+insert into t (id,a) values (500,28);
+insert into t (id,a) values (500,29);
+insert into t (id,a) values (500,30);
+insert into t (id,a) values (500,31);
+insert into t (id,a) values (500,32);
+insert into t (id,a) values (500,33);
+insert into t (id,a) values (500,34);
+insert into t (id,a) values (500,35);
+insert into t (id,a) values (500,36);
+insert into t (id,a) values (500,37);
+insert into t (id,a) values (500,38);
+insert into t (id,a) values (500,39);
+insert into t (id,a) values (500,40);
+insert into t (id,a) values (500,41);
+insert into t (id,a) values (500,42);
+insert into t (id,a) values (500,43);
+insert into t (id,a) values (500,44);
+insert into t (id,a) values (500,45);
+insert into t (id,a) values (500,46);
+insert into t (id,a) values (500,47);
+insert into t (id,a) values (500,48);
+insert into t (id,a) values (500,49);
+insert into t (id,a) values (500,50);
+insert into t (id,a) values (500,51);
+insert into t (id,a) values (500,52);
+insert into t (id,a) values (500,53);
+insert into t (id,a) values (500,54);
+insert into t (id,a) values (500,55);
+insert into t (id,a) values (500,56);
+insert into t (id,a) values (500,57);
+insert into t (id,a) values (500,58);
+insert into t (id,a) values (500,59);
+insert into t (id,a) values (500,60);
+insert into t (id,a) values (500,61);
+insert into t (id,a) values (500,62);
+insert into t (id,a) values (500,63);
+insert into t (id,a) values (500,64);
+insert into t (id,a) values (500,65);
+insert into t (id,a) values (500,66);
+insert into t (id,a) values (500,67);
+insert into t (id,a) values (500,68);
+insert into t (id,a) values (500,69);
+insert into t (id,a) values (500,70);
+insert into t (id,a) values (500,71);
+insert into t (id,a) values (500,72);
+insert into t (id,a) values (500,73);
+insert into t (id,a) values (500,74);
+insert into t (id,a) values (500,75);
+insert into t (id,a) values (500,76);
+insert into t (id,a) values (500,77);
+insert into t (id,a) values (500,78);
+insert into t (id,a) values (500,79);
+insert into t (id,a) values (500,80);
+insert into t (id,a) values (500,81);
+insert into t (id,a) values (500,82);
+insert into t (id,a) values (500,83);
+insert into t (id,a) values (500,84);
+insert into t (id,a) values (500,85);
+insert into t (id,a) values (500,86);
+insert into t (id,a) values (500,87);
+insert into t (id,a) values (500,88);
+insert into t (id,a) values (500,89);
+insert into t (id,a) values (500,90);
+insert into t (id,a) values (500,91);
+insert into t (id,a) values (500,92);
+insert into t (id,a) values (500,93);
+insert into t (id,a) values (500,94);
+insert into t (id,a) values (500,95);
+insert into t (id,a) values (500,96);
+insert into t (id,a) values (500,97);
+insert into t (id,a) values (500,98);
+insert into t (id,a) values (500,99);
+insert into t (id,a) values (501,0);
+insert into t (id,a) values (501,1);
+insert into t (id,a) values (501,2);
+insert into t (id,a) values (501,3);
+insert into t (id,a) values (501,4);
+insert into t (id,a) values (501,5);
+insert into t (id,a) values (501,6);
+insert into t (id,a) values (501,7);
+insert into t (id,a) values (501,8);
+insert into t (id,a) values (501,9);
+insert into t (id,a) values (501,10);
+insert into t (id,a) values (501,11);
+insert into t (id,a) values (501,12);
+insert into t (id,a) values (501,13);
+insert into t (id,a) values (501,14);
+insert into t (id,a) values (501,15);
+insert into t (id,a) values (501,16);
+insert into t (id,a) values (501,17);
+insert into t (id,a) values (501,18);
+insert into t (id,a) values (501,19);
+insert into t (id,a) values (501,20);
+insert into t (id,a) values (501,21);
+insert into t (id,a) values (501,22);
+insert into t (id,a) values (501,23);
+insert into t (id,a) values (501,24);
+insert into t (id,a) values (501,25);
+insert into t (id,a) values (501,26);
+insert into t (id,a) values (501,27);
+insert into t (id,a) values (501,28);
+insert into t (id,a) values (501,29);
+insert into t (id,a) values (501,30);
+insert into t (id,a) values (501,31);
+insert into t (id,a) values (501,32);
+insert into t (id,a) values (501,33);
+insert into t (id,a) values (501,34);
+insert into t (id,a) values (501,35);
+insert into t (id,a) values (501,36);
+insert into t (id,a) values (501,37);
+insert into t (id,a) values (501,38);
+insert into t (id,a) values (501,39);
+insert into t (id,a) values (501,40);
+insert into t (id,a) values (501,41);
+insert into t (id,a) values (501,42);
+insert into t (id,a) values (501,43);
+insert into t (id,a) values (501,44);
+insert into t (id,a) values (501,45);
+insert into t (id,a) values (501,46);
+insert into t (id,a) values (501,47);
+insert into t (id,a) values (501,48);
+insert into t (id,a) values (501,49);
+insert into t (id,a) values (501,50);
+insert into t (id,a) values (501,51);
+insert into t (id,a) values (501,52);
+insert into t (id,a) values (501,53);
+insert into t (id,a) values (501,54);
+insert into t (id,a) values (501,55);
+insert into t (id,a) values (501,56);
+insert into t (id,a) values (501,57);
+insert into t (id,a) values (501,58);
+insert into t (id,a) values (501,59);
+insert into t (id,a) values (501,60);
+insert into t (id,a) values (501,61);
+insert into t (id,a) values (501,62);
+insert into t (id,a) values (501,63);
+insert into t (id,a) values (501,64);
+insert into t (id,a) values (501,65);
+insert into t (id,a) values (501,66);
+insert into t (id,a) values (501,67);
+insert into t (id,a) values (501,68);
+insert into t (id,a) values (501,69);
+insert into t (id,a) values (501,70);
+insert into t (id,a) values (501,71);
+insert into t (id,a) values (501,72);
+insert into t (id,a) values (501,73);
+insert into t (id,a) values (501,74);
+insert into t (id,a) values (501,75);
+insert into t (id,a) values (501,76);
+insert into t (id,a) values (501,77);
+insert into t (id,a) values (501,78);
+insert into t (id,a) values (501,79);
+insert into t (id,a) values (501,80);
+insert into t (id,a) values (501,81);
+insert into t (id,a) values (501,82);
+insert into t (id,a) values (501,83);
+insert into t (id,a) values (501,84);
+insert into t (id,a) values (501,85);
+insert into t (id,a) values (501,86);
+insert into t (id,a) values (501,87);
+insert into t (id,a) values (501,88);
+insert into t (id,a) values (501,89);
+insert into t (id,a) values (501,90);
+insert into t (id,a) values (501,91);
+insert into t (id,a) values (501,92);
+insert into t (id,a) values (501,93);
+insert into t (id,a) values (501,94);
+insert into t (id,a) values (501,95);
+insert into t (id,a) values (501,96);
+insert into t (id,a) values (501,97);
+insert into t (id,a) values (501,98);
+insert into t (id,a) values (501,99);
+insert into t (id,a) values (502,0);
+insert into t (id,a) values (502,1);
+insert into t (id,a) values (502,2);
+insert into t (id,a) values (502,3);
+insert into t (id,a) values (502,4);
+insert into t (id,a) values (502,5);
+insert into t (id,a) values (502,6);
+insert into t (id,a) values (502,7);
+insert into t (id,a) values (502,8);
+insert into t (id,a) values (502,9);
+insert into t (id,a) values (502,10);
+insert into t (id,a) values (502,11);
+insert into t (id,a) values (502,12);
+insert into t (id,a) values (502,13);
+insert into t (id,a) values (502,14);
+insert into t (id,a) values (502,15);
+insert into t (id,a) values (502,16);
+insert into t (id,a) values (502,17);
+insert into t (id,a) values (502,18);
+insert into t (id,a) values (502,19);
+insert into t (id,a) values (502,20);
+insert into t (id,a) values (502,21);
+insert into t (id,a) values (502,22);
+insert into t (id,a) values (502,23);
+insert into t (id,a) values (502,24);
+insert into t (id,a) values (502,25);
+insert into t (id,a) values (502,26);
+insert into t (id,a) values (502,27);
+insert into t (id,a) values (502,28);
+insert into t (id,a) values (502,29);
+insert into t (id,a) values (502,30);
+insert into t (id,a) values (502,31);
+insert into t (id,a) values (502,32);
+insert into t (id,a) values (502,33);
+insert into t (id,a) values (502,34);
+insert into t (id,a) values (502,35);
+insert into t (id,a) values (502,36);
+insert into t (id,a) values (502,37);
+insert into t (id,a) values (502,38);
+insert into t (id,a) values (502,39);
+insert into t (id,a) values (502,40);
+insert into t (id,a) values (502,41);
+insert into t (id,a) values (502,42);
+insert into t (id,a) values (502,43);
+insert into t (id,a) values (502,44);
+insert into t (id,a) values (502,45);
+insert into t (id,a) values (502,46);
+insert into t (id,a) values (502,47);
+insert into t (id,a) values (502,48);
+insert into t (id,a) values (502,49);
+insert into t (id,a) values (502,50);
+insert into t (id,a) values (502,51);
+insert into t (id,a) values (502,52);
+insert into t (id,a) values (502,53);
+insert into t (id,a) values (502,54);
+insert into t (id,a) values (502,55);
+insert into t (id,a) values (502,56);
+insert into t (id,a) values (502,57);
+insert into t (id,a) values (502,58);
+insert into t (id,a) values (502,59);
+insert into t (id,a) values (502,60);
+insert into t (id,a) values (502,61);
+insert into t (id,a) values (502,62);
+insert into t (id,a) values (502,63);
+insert into t (id,a) values (502,64);
+insert into t (id,a) values (502,65);
+insert into t (id,a) values (502,66);
+insert into t (id,a) values (502,67);
+insert into t (id,a) values (502,68);
+insert into t (id,a) values (502,69);
+insert into t (id,a) values (502,70);
+insert into t (id,a) values (502,71);
+insert into t (id,a) values (502,72);
+insert into t (id,a) values (502,73);
+insert into t (id,a) values (502,74);
+insert into t (id,a) values (502,75);
+insert into t (id,a) values (502,76);
+insert into t (id,a) values (502,77);
+insert into t (id,a) values (502,78);
+insert into t (id,a) values (502,79);
+insert into t (id,a) values (502,80);
+insert into t (id,a) values (502,81);
+insert into t (id,a) values (502,82);
+insert into t (id,a) values (502,83);
+insert into t (id,a) values (502,84);
+insert into t (id,a) values (502,85);
+insert into t (id,a) values (502,86);
+insert into t (id,a) values (502,87);
+insert into t (id,a) values (502,88);
+insert into t (id,a) values (502,89);
+insert into t (id,a) values (502,90);
+insert into t (id,a) values (502,91);
+insert into t (id,a) values (502,92);
+insert into t (id,a) values (502,93);
+insert into t (id,a) values (502,94);
+insert into t (id,a) values (502,95);
+insert into t (id,a) values (502,96);
+insert into t (id,a) values (502,97);
+insert into t (id,a) values (502,98);
+insert into t (id,a) values (502,99);
+insert into t (id,a) values (503,0);
+insert into t (id,a) values (503,1);
+insert into t (id,a) values (503,2);
+insert into t (id,a) values (503,3);
+insert into t (id,a) values (503,4);
+insert into t (id,a) values (503,5);
+insert into t (id,a) values (503,6);
+insert into t (id,a) values (503,7);
+insert into t (id,a) values (503,8);
+insert into t (id,a) values (503,9);
+insert into t (id,a) values (503,10);
+insert into t (id,a) values (503,11);
+insert into t (id,a) values (503,12);
+insert into t (id,a) values (503,13);
+insert into t (id,a) values (503,14);
+insert into t (id,a) values (503,15);
+insert into t (id,a) values (503,16);
+insert into t (id,a) values (503,17);
+insert into t (id,a) values (503,18);
+insert into t (id,a) values (503,19);
+insert into t (id,a) values (503,20);
+insert into t (id,a) values (503,21);
+insert into t (id,a) values (503,22);
+insert into t (id,a) values (503,23);
+insert into t (id,a) values (503,24);
+insert into t (id,a) values (503,25);
+insert into t (id,a) values (503,26);
+insert into t (id,a) values (503,27);
+insert into t (id,a) values (503,28);
+insert into t (id,a) values (503,29);
+insert into t (id,a) values (503,30);
+insert into t (id,a) values (503,31);
+insert into t (id,a) values (503,32);
+insert into t (id,a) values (503,33);
+insert into t (id,a) values (503,34);
+insert into t (id,a) values (503,35);
+insert into t (id,a) values (503,36);
+insert into t (id,a) values (503,37);
+insert into t (id,a) values (503,38);
+insert into t (id,a) values (503,39);
+insert into t (id,a) values (503,40);
+insert into t (id,a) values (503,41);
+insert into t (id,a) values (503,42);
+insert into t (id,a) values (503,43);
+insert into t (id,a) values (503,44);
+insert into t (id,a) values (503,45);
+insert into t (id,a) values (503,46);
+insert into t (id,a) values (503,47);
+insert into t (id,a) values (503,48);
+insert into t (id,a) values (503,49);
+insert into t (id,a) values (503,50);
+insert into t (id,a) values (503,51);
+insert into t (id,a) values (503,52);
+insert into t (id,a) values (503,53);
+insert into t (id,a) values (503,54);
+insert into t (id,a) values (503,55);
+insert into t (id,a) values (503,56);
+insert into t (id,a) values (503,57);
+insert into t (id,a) values (503,58);
+insert into t (id,a) values (503,59);
+insert into t (id,a) values (503,60);
+insert into t (id,a) values (503,61);
+insert into t (id,a) values (503,62);
+insert into t (id,a) values (503,63);
+insert into t (id,a) values (503,64);
+insert into t (id,a) values (503,65);
+insert into t (id,a) values (503,66);
+insert into t (id,a) values (503,67);
+insert into t (id,a) values (503,68);
+insert into t (id,a) values (503,69);
+insert into t (id,a) values (503,70);
+insert into t (id,a) values (503,71);
+insert into t (id,a) values (503,72);
+insert into t (id,a) values (503,73);
+insert into t (id,a) values (503,74);
+insert into t (id,a) values (503,75);
+insert into t (id,a) values (503,76);
+insert into t (id,a) values (503,77);
+insert into t (id,a) values (503,78);
+insert into t (id,a) values (503,79);
+insert into t (id,a) values (503,80);
+insert into t (id,a) values (503,81);
+insert into t (id,a) values (503,82);
+insert into t (id,a) values (503,83);
+insert into t (id,a) values (503,84);
+insert into t (id,a) values (503,85);
+insert into t (id,a) values (503,86);
+insert into t (id,a) values (503,87);
+insert into t (id,a) values (503,88);
+insert into t (id,a) values (503,89);
+insert into t (id,a) values (503,90);
+insert into t (id,a) values (503,91);
+insert into t (id,a) values (503,92);
+insert into t (id,a) values (503,93);
+insert into t (id,a) values (503,94);
+insert into t (id,a) values (503,95);
+insert into t (id,a) values (503,96);
+insert into t (id,a) values (503,97);
+insert into t (id,a) values (503,98);
+insert into t (id,a) values (503,99);
+insert into t (id,a) values (504,0);
+insert into t (id,a) values (504,1);
+insert into t (id,a) values (504,2);
+insert into t (id,a) values (504,3);
+insert into t (id,a) values (504,4);
+insert into t (id,a) values (504,5);
+insert into t (id,a) values (504,6);
+insert into t (id,a) values (504,7);
+insert into t (id,a) values (504,8);
+insert into t (id,a) values (504,9);
+insert into t (id,a) values (504,10);
+insert into t (id,a) values (504,11);
+insert into t (id,a) values (504,12);
+insert into t (id,a) values (504,13);
+insert into t (id,a) values (504,14);
+insert into t (id,a) values (504,15);
+insert into t (id,a) values (504,16);
+insert into t (id,a) values (504,17);
+insert into t (id,a) values (504,18);
+insert into t (id,a) values (504,19);
+insert into t (id,a) values (504,20);
+insert into t (id,a) values (504,21);
+insert into t (id,a) values (504,22);
+insert into t (id,a) values (504,23);
+insert into t (id,a) values (504,24);
+insert into t (id,a) values (504,25);
+insert into t (id,a) values (504,26);
+insert into t (id,a) values (504,27);
+insert into t (id,a) values (504,28);
+insert into t (id,a) values (504,29);
+insert into t (id,a) values (504,30);
+insert into t (id,a) values (504,31);
+insert into t (id,a) values (504,32);
+insert into t (id,a) values (504,33);
+insert into t (id,a) values (504,34);
+insert into t (id,a) values (504,35);
+insert into t (id,a) values (504,36);
+insert into t (id,a) values (504,37);
+insert into t (id,a) values (504,38);
+insert into t (id,a) values (504,39);
+insert into t (id,a) values (504,40);
+insert into t (id,a) values (504,41);
+insert into t (id,a) values (504,42);
+insert into t (id,a) values (504,43);
+insert into t (id,a) values (504,44);
+insert into t (id,a) values (504,45);
+insert into t (id,a) values (504,46);
+insert into t (id,a) values (504,47);
+insert into t (id,a) values (504,48);
+insert into t (id,a) values (504,49);
+insert into t (id,a) values (504,50);
+insert into t (id,a) values (504,51);
+insert into t (id,a) values (504,52);
+insert into t (id,a) values (504,53);
+insert into t (id,a) values (504,54);
+insert into t (id,a) values (504,55);
+insert into t (id,a) values (504,56);
+insert into t (id,a) values (504,57);
+insert into t (id,a) values (504,58);
+insert into t (id,a) values (504,59);
+insert into t (id,a) values (504,60);
+insert into t (id,a) values (504,61);
+insert into t (id,a) values (504,62);
+insert into t (id,a) values (504,63);
+insert into t (id,a) values (504,64);
+insert into t (id,a) values (504,65);
+insert into t (id,a) values (504,66);
+insert into t (id,a) values (504,67);
+insert into t (id,a) values (504,68);
+insert into t (id,a) values (504,69);
+insert into t (id,a) values (504,70);
+insert into t (id,a) values (504,71);
+insert into t (id,a) values (504,72);
+insert into t (id,a) values (504,73);
+insert into t (id,a) values (504,74);
+insert into t (id,a) values (504,75);
+insert into t (id,a) values (504,76);
+insert into t (id,a) values (504,77);
+insert into t (id,a) values (504,78);
+insert into t (id,a) values (504,79);
+insert into t (id,a) values (504,80);
+insert into t (id,a) values (504,81);
+insert into t (id,a) values (504,82);
+insert into t (id,a) values (504,83);
+insert into t (id,a) values (504,84);
+insert into t (id,a) values (504,85);
+insert into t (id,a) values (504,86);
+insert into t (id,a) values (504,87);
+insert into t (id,a) values (504,88);
+insert into t (id,a) values (504,89);
+insert into t (id,a) values (504,90);
+insert into t (id,a) values (504,91);
+insert into t (id,a) values (504,92);
+insert into t (id,a) values (504,93);
+insert into t (id,a) values (504,94);
+insert into t (id,a) values (504,95);
+insert into t (id,a) values (504,96);
+insert into t (id,a) values (504,97);
+insert into t (id,a) values (504,98);
+insert into t (id,a) values (504,99);
+insert into t (id,a) values (505,0);
+insert into t (id,a) values (505,1);
+insert into t (id,a) values (505,2);
+insert into t (id,a) values (505,3);
+insert into t (id,a) values (505,4);
+insert into t (id,a) values (505,5);
+insert into t (id,a) values (505,6);
+insert into t (id,a) values (505,7);
+insert into t (id,a) values (505,8);
+insert into t (id,a) values (505,9);
+insert into t (id,a) values (505,10);
+insert into t (id,a) values (505,11);
+insert into t (id,a) values (505,12);
+insert into t (id,a) values (505,13);
+insert into t (id,a) values (505,14);
+insert into t (id,a) values (505,15);
+insert into t (id,a) values (505,16);
+insert into t (id,a) values (505,17);
+insert into t (id,a) values (505,18);
+insert into t (id,a) values (505,19);
+insert into t (id,a) values (505,20);
+insert into t (id,a) values (505,21);
+insert into t (id,a) values (505,22);
+insert into t (id,a) values (505,23);
+insert into t (id,a) values (505,24);
+insert into t (id,a) values (505,25);
+insert into t (id,a) values (505,26);
+insert into t (id,a) values (505,27);
+insert into t (id,a) values (505,28);
+insert into t (id,a) values (505,29);
+insert into t (id,a) values (505,30);
+insert into t (id,a) values (505,31);
+insert into t (id,a) values (505,32);
+insert into t (id,a) values (505,33);
+insert into t (id,a) values (505,34);
+insert into t (id,a) values (505,35);
+insert into t (id,a) values (505,36);
+insert into t (id,a) values (505,37);
+insert into t (id,a) values (505,38);
+insert into t (id,a) values (505,39);
+insert into t (id,a) values (505,40);
+insert into t (id,a) values (505,41);
+insert into t (id,a) values (505,42);
+insert into t (id,a) values (505,43);
+insert into t (id,a) values (505,44);
+insert into t (id,a) values (505,45);
+insert into t (id,a) values (505,46);
+insert into t (id,a) values (505,47);
+insert into t (id,a) values (505,48);
+insert into t (id,a) values (505,49);
+insert into t (id,a) values (505,50);
+insert into t (id,a) values (505,51);
+insert into t (id,a) values (505,52);
+insert into t (id,a) values (505,53);
+insert into t (id,a) values (505,54);
+insert into t (id,a) values (505,55);
+insert into t (id,a) values (505,56);
+insert into t (id,a) values (505,57);
+insert into t (id,a) values (505,58);
+insert into t (id,a) values (505,59);
+insert into t (id,a) values (505,60);
+insert into t (id,a) values (505,61);
+insert into t (id,a) values (505,62);
+insert into t (id,a) values (505,63);
+insert into t (id,a) values (505,64);
+insert into t (id,a) values (505,65);
+insert into t (id,a) values (505,66);
+insert into t (id,a) values (505,67);
+insert into t (id,a) values (505,68);
+insert into t (id,a) values (505,69);
+insert into t (id,a) values (505,70);
+insert into t (id,a) values (505,71);
+insert into t (id,a) values (505,72);
+insert into t (id,a) values (505,73);
+insert into t (id,a) values (505,74);
+insert into t (id,a) values (505,75);
+insert into t (id,a) values (505,76);
+insert into t (id,a) values (505,77);
+insert into t (id,a) values (505,78);
+insert into t (id,a) values (505,79);
+insert into t (id,a) values (505,80);
+insert into t (id,a) values (505,81);
+insert into t (id,a) values (505,82);
+insert into t (id,a) values (505,83);
+insert into t (id,a) values (505,84);
+insert into t (id,a) values (505,85);
+insert into t (id,a) values (505,86);
+insert into t (id,a) values (505,87);
+insert into t (id,a) values (505,88);
+insert into t (id,a) values (505,89);
+insert into t (id,a) values (505,90);
+insert into t (id,a) values (505,91);
+insert into t (id,a) values (505,92);
+insert into t (id,a) values (505,93);
+insert into t (id,a) values (505,94);
+insert into t (id,a) values (505,95);
+insert into t (id,a) values (505,96);
+insert into t (id,a) values (505,97);
+insert into t (id,a) values (505,98);
+insert into t (id,a) values (505,99);
+insert into t (id,a) values (506,0);
+insert into t (id,a) values (506,1);
+insert into t (id,a) values (506,2);
+insert into t (id,a) values (506,3);
+insert into t (id,a) values (506,4);
+insert into t (id,a) values (506,5);
+insert into t (id,a) values (506,6);
+insert into t (id,a) values (506,7);
+insert into t (id,a) values (506,8);
+insert into t (id,a) values (506,9);
+insert into t (id,a) values (506,10);
+insert into t (id,a) values (506,11);
+insert into t (id,a) values (506,12);
+insert into t (id,a) values (506,13);
+insert into t (id,a) values (506,14);
+insert into t (id,a) values (506,15);
+insert into t (id,a) values (506,16);
+insert into t (id,a) values (506,17);
+insert into t (id,a) values (506,18);
+insert into t (id,a) values (506,19);
+insert into t (id,a) values (506,20);
+insert into t (id,a) values (506,21);
+insert into t (id,a) values (506,22);
+insert into t (id,a) values (506,23);
+insert into t (id,a) values (506,24);
+insert into t (id,a) values (506,25);
+insert into t (id,a) values (506,26);
+insert into t (id,a) values (506,27);
+insert into t (id,a) values (506,28);
+insert into t (id,a) values (506,29);
+insert into t (id,a) values (506,30);
+insert into t (id,a) values (506,31);
+insert into t (id,a) values (506,32);
+insert into t (id,a) values (506,33);
+insert into t (id,a) values (506,34);
+insert into t (id,a) values (506,35);
+insert into t (id,a) values (506,36);
+insert into t (id,a) values (506,37);
+insert into t (id,a) values (506,38);
+insert into t (id,a) values (506,39);
+insert into t (id,a) values (506,40);
+insert into t (id,a) values (506,41);
+insert into t (id,a) values (506,42);
+insert into t (id,a) values (506,43);
+insert into t (id,a) values (506,44);
+insert into t (id,a) values (506,45);
+insert into t (id,a) values (506,46);
+insert into t (id,a) values (506,47);
+insert into t (id,a) values (506,48);
+insert into t (id,a) values (506,49);
+insert into t (id,a) values (506,50);
+insert into t (id,a) values (506,51);
+insert into t (id,a) values (506,52);
+insert into t (id,a) values (506,53);
+insert into t (id,a) values (506,54);
+insert into t (id,a) values (506,55);
+insert into t (id,a) values (506,56);
+insert into t (id,a) values (506,57);
+insert into t (id,a) values (506,58);
+insert into t (id,a) values (506,59);
+insert into t (id,a) values (506,60);
+insert into t (id,a) values (506,61);
+insert into t (id,a) values (506,62);
+insert into t (id,a) values (506,63);
+insert into t (id,a) values (506,64);
+insert into t (id,a) values (506,65);
+insert into t (id,a) values (506,66);
+insert into t (id,a) values (506,67);
+insert into t (id,a) values (506,68);
+insert into t (id,a) values (506,69);
+insert into t (id,a) values (506,70);
+insert into t (id,a) values (506,71);
+insert into t (id,a) values (506,72);
+insert into t (id,a) values (506,73);
+insert into t (id,a) values (506,74);
+insert into t (id,a) values (506,75);
+insert into t (id,a) values (506,76);
+insert into t (id,a) values (506,77);
+insert into t (id,a) values (506,78);
+insert into t (id,a) values (506,79);
+insert into t (id,a) values (506,80);
+insert into t (id,a) values (506,81);
+insert into t (id,a) values (506,82);
+insert into t (id,a) values (506,83);
+insert into t (id,a) values (506,84);
+insert into t (id,a) values (506,85);
+insert into t (id,a) values (506,86);
+insert into t (id,a) values (506,87);
+insert into t (id,a) values (506,88);
+insert into t (id,a) values (506,89);
+insert into t (id,a) values (506,90);
+insert into t (id,a) values (506,91);
+insert into t (id,a) values (506,92);
+insert into t (id,a) values (506,93);
+insert into t (id,a) values (506,94);
+insert into t (id,a) values (506,95);
+insert into t (id,a) values (506,96);
+insert into t (id,a) values (506,97);
+insert into t (id,a) values (506,98);
+insert into t (id,a) values (506,99);
+insert into t (id,a) values (507,0);
+insert into t (id,a) values (507,1);
+insert into t (id,a) values (507,2);
+insert into t (id,a) values (507,3);
+insert into t (id,a) values (507,4);
+insert into t (id,a) values (507,5);
+insert into t (id,a) values (507,6);
+insert into t (id,a) values (507,7);
+insert into t (id,a) values (507,8);
+insert into t (id,a) values (507,9);
+insert into t (id,a) values (507,10);
+insert into t (id,a) values (507,11);
+insert into t (id,a) values (507,12);
+insert into t (id,a) values (507,13);
+insert into t (id,a) values (507,14);
+insert into t (id,a) values (507,15);
+insert into t (id,a) values (507,16);
+insert into t (id,a) values (507,17);
+insert into t (id,a) values (507,18);
+insert into t (id,a) values (507,19);
+insert into t (id,a) values (507,20);
+insert into t (id,a) values (507,21);
+insert into t (id,a) values (507,22);
+insert into t (id,a) values (507,23);
+insert into t (id,a) values (507,24);
+insert into t (id,a) values (507,25);
+insert into t (id,a) values (507,26);
+insert into t (id,a) values (507,27);
+insert into t (id,a) values (507,28);
+insert into t (id,a) values (507,29);
+insert into t (id,a) values (507,30);
+insert into t (id,a) values (507,31);
+insert into t (id,a) values (507,32);
+insert into t (id,a) values (507,33);
+insert into t (id,a) values (507,34);
+insert into t (id,a) values (507,35);
+insert into t (id,a) values (507,36);
+insert into t (id,a) values (507,37);
+insert into t (id,a) values (507,38);
+insert into t (id,a) values (507,39);
+insert into t (id,a) values (507,40);
+insert into t (id,a) values (507,41);
+insert into t (id,a) values (507,42);
+insert into t (id,a) values (507,43);
+insert into t (id,a) values (507,44);
+insert into t (id,a) values (507,45);
+insert into t (id,a) values (507,46);
+insert into t (id,a) values (507,47);
+insert into t (id,a) values (507,48);
+insert into t (id,a) values (507,49);
+insert into t (id,a) values (507,50);
+insert into t (id,a) values (507,51);
+insert into t (id,a) values (507,52);
+insert into t (id,a) values (507,53);
+insert into t (id,a) values (507,54);
+insert into t (id,a) values (507,55);
+insert into t (id,a) values (507,56);
+insert into t (id,a) values (507,57);
+insert into t (id,a) values (507,58);
+insert into t (id,a) values (507,59);
+insert into t (id,a) values (507,60);
+insert into t (id,a) values (507,61);
+insert into t (id,a) values (507,62);
+insert into t (id,a) values (507,63);
+insert into t (id,a) values (507,64);
+insert into t (id,a) values (507,65);
+insert into t (id,a) values (507,66);
+insert into t (id,a) values (507,67);
+insert into t (id,a) values (507,68);
+insert into t (id,a) values (507,69);
+insert into t (id,a) values (507,70);
+insert into t (id,a) values (507,71);
+insert into t (id,a) values (507,72);
+insert into t (id,a) values (507,73);
+insert into t (id,a) values (507,74);
+insert into t (id,a) values (507,75);
+insert into t (id,a) values (507,76);
+insert into t (id,a) values (507,77);
+insert into t (id,a) values (507,78);
+insert into t (id,a) values (507,79);
+insert into t (id,a) values (507,80);
+insert into t (id,a) values (507,81);
+insert into t (id,a) values (507,82);
+insert into t (id,a) values (507,83);
+insert into t (id,a) values (507,84);
+insert into t (id,a) values (507,85);
+insert into t (id,a) values (507,86);
+insert into t (id,a) values (507,87);
+insert into t (id,a) values (507,88);
+insert into t (id,a) values (507,89);
+insert into t (id,a) values (507,90);
+insert into t (id,a) values (507,91);
+insert into t (id,a) values (507,92);
+insert into t (id,a) values (507,93);
+insert into t (id,a) values (507,94);
+insert into t (id,a) values (507,95);
+insert into t (id,a) values (507,96);
+insert into t (id,a) values (507,97);
+insert into t (id,a) values (507,98);
+insert into t (id,a) values (507,99);
+insert into t (id,a) values (508,0);
+insert into t (id,a) values (508,1);
+insert into t (id,a) values (508,2);
+insert into t (id,a) values (508,3);
+insert into t (id,a) values (508,4);
+insert into t (id,a) values (508,5);
+insert into t (id,a) values (508,6);
+insert into t (id,a) values (508,7);
+insert into t (id,a) values (508,8);
+insert into t (id,a) values (508,9);
+insert into t (id,a) values (508,10);
+insert into t (id,a) values (508,11);
+insert into t (id,a) values (508,12);
+insert into t (id,a) values (508,13);
+insert into t (id,a) values (508,14);
+insert into t (id,a) values (508,15);
+insert into t (id,a) values (508,16);
+insert into t (id,a) values (508,17);
+insert into t (id,a) values (508,18);
+insert into t (id,a) values (508,19);
+insert into t (id,a) values (508,20);
+insert into t (id,a) values (508,21);
+insert into t (id,a) values (508,22);
+insert into t (id,a) values (508,23);
+insert into t (id,a) values (508,24);
+insert into t (id,a) values (508,25);
+insert into t (id,a) values (508,26);
+insert into t (id,a) values (508,27);
+insert into t (id,a) values (508,28);
+insert into t (id,a) values (508,29);
+insert into t (id,a) values (508,30);
+insert into t (id,a) values (508,31);
+insert into t (id,a) values (508,32);
+insert into t (id,a) values (508,33);
+insert into t (id,a) values (508,34);
+insert into t (id,a) values (508,35);
+insert into t (id,a) values (508,36);
+insert into t (id,a) values (508,37);
+insert into t (id,a) values (508,38);
+insert into t (id,a) values (508,39);
+insert into t (id,a) values (508,40);
+insert into t (id,a) values (508,41);
+insert into t (id,a) values (508,42);
+insert into t (id,a) values (508,43);
+insert into t (id,a) values (508,44);
+insert into t (id,a) values (508,45);
+insert into t (id,a) values (508,46);
+insert into t (id,a) values (508,47);
+insert into t (id,a) values (508,48);
+insert into t (id,a) values (508,49);
+insert into t (id,a) values (508,50);
+insert into t (id,a) values (508,51);
+insert into t (id,a) values (508,52);
+insert into t (id,a) values (508,53);
+insert into t (id,a) values (508,54);
+insert into t (id,a) values (508,55);
+insert into t (id,a) values (508,56);
+insert into t (id,a) values (508,57);
+insert into t (id,a) values (508,58);
+insert into t (id,a) values (508,59);
+insert into t (id,a) values (508,60);
+insert into t (id,a) values (508,61);
+insert into t (id,a) values (508,62);
+insert into t (id,a) values (508,63);
+insert into t (id,a) values (508,64);
+insert into t (id,a) values (508,65);
+insert into t (id,a) values (508,66);
+insert into t (id,a) values (508,67);
+insert into t (id,a) values (508,68);
+insert into t (id,a) values (508,69);
+insert into t (id,a) values (508,70);
+insert into t (id,a) values (508,71);
+insert into t (id,a) values (508,72);
+insert into t (id,a) values (508,73);
+insert into t (id,a) values (508,74);
+insert into t (id,a) values (508,75);
+insert into t (id,a) values (508,76);
+insert into t (id,a) values (508,77);
+insert into t (id,a) values (508,78);
+insert into t (id,a) values (508,79);
+insert into t (id,a) values (508,80);
+insert into t (id,a) values (508,81);
+insert into t (id,a) values (508,82);
+insert into t (id,a) values (508,83);
+insert into t (id,a) values (508,84);
+insert into t (id,a) values (508,85);
+insert into t (id,a) values (508,86);
+insert into t (id,a) values (508,87);
+insert into t (id,a) values (508,88);
+insert into t (id,a) values (508,89);
+insert into t (id,a) values (508,90);
+insert into t (id,a) values (508,91);
+insert into t (id,a) values (508,92);
+insert into t (id,a) values (508,93);
+insert into t (id,a) values (508,94);
+insert into t (id,a) values (508,95);
+insert into t (id,a) values (508,96);
+insert into t (id,a) values (508,97);
+insert into t (id,a) values (508,98);
+insert into t (id,a) values (508,99);
+insert into t (id,a) values (509,0);
+insert into t (id,a) values (509,1);
+insert into t (id,a) values (509,2);
+insert into t (id,a) values (509,3);
+insert into t (id,a) values (509,4);
+insert into t (id,a) values (509,5);
+insert into t (id,a) values (509,6);
+insert into t (id,a) values (509,7);
+insert into t (id,a) values (509,8);
+insert into t (id,a) values (509,9);
+insert into t (id,a) values (509,10);
+insert into t (id,a) values (509,11);
+insert into t (id,a) values (509,12);
+insert into t (id,a) values (509,13);
+insert into t (id,a) values (509,14);
+insert into t (id,a) values (509,15);
+insert into t (id,a) values (509,16);
+insert into t (id,a) values (509,17);
+insert into t (id,a) values (509,18);
+insert into t (id,a) values (509,19);
+insert into t (id,a) values (509,20);
+insert into t (id,a) values (509,21);
+insert into t (id,a) values (509,22);
+insert into t (id,a) values (509,23);
+insert into t (id,a) values (509,24);
+insert into t (id,a) values (509,25);
+insert into t (id,a) values (509,26);
+insert into t (id,a) values (509,27);
+insert into t (id,a) values (509,28);
+insert into t (id,a) values (509,29);
+insert into t (id,a) values (509,30);
+insert into t (id,a) values (509,31);
+insert into t (id,a) values (509,32);
+insert into t (id,a) values (509,33);
+insert into t (id,a) values (509,34);
+insert into t (id,a) values (509,35);
+insert into t (id,a) values (509,36);
+insert into t (id,a) values (509,37);
+insert into t (id,a) values (509,38);
+insert into t (id,a) values (509,39);
+insert into t (id,a) values (509,40);
+insert into t (id,a) values (509,41);
+insert into t (id,a) values (509,42);
+insert into t (id,a) values (509,43);
+insert into t (id,a) values (509,44);
+insert into t (id,a) values (509,45);
+insert into t (id,a) values (509,46);
+insert into t (id,a) values (509,47);
+insert into t (id,a) values (509,48);
+insert into t (id,a) values (509,49);
+insert into t (id,a) values (509,50);
+insert into t (id,a) values (509,51);
+insert into t (id,a) values (509,52);
+insert into t (id,a) values (509,53);
+insert into t (id,a) values (509,54);
+insert into t (id,a) values (509,55);
+insert into t (id,a) values (509,56);
+insert into t (id,a) values (509,57);
+insert into t (id,a) values (509,58);
+insert into t (id,a) values (509,59);
+insert into t (id,a) values (509,60);
+insert into t (id,a) values (509,61);
+insert into t (id,a) values (509,62);
+insert into t (id,a) values (509,63);
+insert into t (id,a) values (509,64);
+insert into t (id,a) values (509,65);
+insert into t (id,a) values (509,66);
+insert into t (id,a) values (509,67);
+insert into t (id,a) values (509,68);
+insert into t (id,a) values (509,69);
+insert into t (id,a) values (509,70);
+insert into t (id,a) values (509,71);
+insert into t (id,a) values (509,72);
+insert into t (id,a) values (509,73);
+insert into t (id,a) values (509,74);
+insert into t (id,a) values (509,75);
+insert into t (id,a) values (509,76);
+insert into t (id,a) values (509,77);
+insert into t (id,a) values (509,78);
+insert into t (id,a) values (509,79);
+insert into t (id,a) values (509,80);
+insert into t (id,a) values (509,81);
+insert into t (id,a) values (509,82);
+insert into t (id,a) values (509,83);
+insert into t (id,a) values (509,84);
+insert into t (id,a) values (509,85);
+insert into t (id,a) values (509,86);
+insert into t (id,a) values (509,87);
+insert into t (id,a) values (509,88);
+insert into t (id,a) values (509,89);
+insert into t (id,a) values (509,90);
+insert into t (id,a) values (509,91);
+insert into t (id,a) values (509,92);
+insert into t (id,a) values (509,93);
+insert into t (id,a) values (509,94);
+insert into t (id,a) values (509,95);
+insert into t (id,a) values (509,96);
+insert into t (id,a) values (509,97);
+insert into t (id,a) values (509,98);
+insert into t (id,a) values (509,99);
+insert into t (id,a) values (510,0);
+insert into t (id,a) values (510,1);
+insert into t (id,a) values (510,2);
+insert into t (id,a) values (510,3);
+insert into t (id,a) values (510,4);
+insert into t (id,a) values (510,5);
+insert into t (id,a) values (510,6);
+insert into t (id,a) values (510,7);
+insert into t (id,a) values (510,8);
+insert into t (id,a) values (510,9);
+insert into t (id,a) values (510,10);
+insert into t (id,a) values (510,11);
+insert into t (id,a) values (510,12);
+insert into t (id,a) values (510,13);
+insert into t (id,a) values (510,14);
+insert into t (id,a) values (510,15);
+insert into t (id,a) values (510,16);
+insert into t (id,a) values (510,17);
+insert into t (id,a) values (510,18);
+insert into t (id,a) values (510,19);
+insert into t (id,a) values (510,20);
+insert into t (id,a) values (510,21);
+insert into t (id,a) values (510,22);
+insert into t (id,a) values (510,23);
+insert into t (id,a) values (510,24);
+insert into t (id,a) values (510,25);
+insert into t (id,a) values (510,26);
+insert into t (id,a) values (510,27);
+insert into t (id,a) values (510,28);
+insert into t (id,a) values (510,29);
+insert into t (id,a) values (510,30);
+insert into t (id,a) values (510,31);
+insert into t (id,a) values (510,32);
+insert into t (id,a) values (510,33);
+insert into t (id,a) values (510,34);
+insert into t (id,a) values (510,35);
+insert into t (id,a) values (510,36);
+insert into t (id,a) values (510,37);
+insert into t (id,a) values (510,38);
+insert into t (id,a) values (510,39);
+insert into t (id,a) values (510,40);
+insert into t (id,a) values (510,41);
+insert into t (id,a) values (510,42);
+insert into t (id,a) values (510,43);
+insert into t (id,a) values (510,44);
+insert into t (id,a) values (510,45);
+insert into t (id,a) values (510,46);
+insert into t (id,a) values (510,47);
+insert into t (id,a) values (510,48);
+insert into t (id,a) values (510,49);
+insert into t (id,a) values (510,50);
+insert into t (id,a) values (510,51);
+insert into t (id,a) values (510,52);
+insert into t (id,a) values (510,53);
+insert into t (id,a) values (510,54);
+insert into t (id,a) values (510,55);
+insert into t (id,a) values (510,56);
+insert into t (id,a) values (510,57);
+insert into t (id,a) values (510,58);
+insert into t (id,a) values (510,59);
+insert into t (id,a) values (510,60);
+insert into t (id,a) values (510,61);
+insert into t (id,a) values (510,62);
+insert into t (id,a) values (510,63);
+insert into t (id,a) values (510,64);
+insert into t (id,a) values (510,65);
+insert into t (id,a) values (510,66);
+insert into t (id,a) values (510,67);
+insert into t (id,a) values (510,68);
+insert into t (id,a) values (510,69);
+insert into t (id,a) values (510,70);
+insert into t (id,a) values (510,71);
+insert into t (id,a) values (510,72);
+insert into t (id,a) values (510,73);
+insert into t (id,a) values (510,74);
+insert into t (id,a) values (510,75);
+insert into t (id,a) values (510,76);
+insert into t (id,a) values (510,77);
+insert into t (id,a) values (510,78);
+insert into t (id,a) values (510,79);
+insert into t (id,a) values (510,80);
+insert into t (id,a) values (510,81);
+insert into t (id,a) values (510,82);
+insert into t (id,a) values (510,83);
+insert into t (id,a) values (510,84);
+insert into t (id,a) values (510,85);
+insert into t (id,a) values (510,86);
+insert into t (id,a) values (510,87);
+insert into t (id,a) values (510,88);
+insert into t (id,a) values (510,89);
+insert into t (id,a) values (510,90);
+insert into t (id,a) values (510,91);
+insert into t (id,a) values (510,92);
+insert into t (id,a) values (510,93);
+insert into t (id,a) values (510,94);
+insert into t (id,a) values (510,95);
+insert into t (id,a) values (510,96);
+insert into t (id,a) values (510,97);
+insert into t (id,a) values (510,98);
+insert into t (id,a) values (510,99);
+insert into t (id,a) values (511,0);
+insert into t (id,a) values (511,1);
+insert into t (id,a) values (511,2);
+insert into t (id,a) values (511,3);
+insert into t (id,a) values (511,4);
+insert into t (id,a) values (511,5);
+insert into t (id,a) values (511,6);
+insert into t (id,a) values (511,7);
+insert into t (id,a) values (511,8);
+insert into t (id,a) values (511,9);
+insert into t (id,a) values (511,10);
+insert into t (id,a) values (511,11);
+insert into t (id,a) values (511,12);
+insert into t (id,a) values (511,13);
+insert into t (id,a) values (511,14);
+insert into t (id,a) values (511,15);
+insert into t (id,a) values (511,16);
+insert into t (id,a) values (511,17);
+insert into t (id,a) values (511,18);
+insert into t (id,a) values (511,19);
+insert into t (id,a) values (511,20);
+insert into t (id,a) values (511,21);
+insert into t (id,a) values (511,22);
+insert into t (id,a) values (511,23);
+insert into t (id,a) values (511,24);
+insert into t (id,a) values (511,25);
+insert into t (id,a) values (511,26);
+insert into t (id,a) values (511,27);
+insert into t (id,a) values (511,28);
+insert into t (id,a) values (511,29);
+insert into t (id,a) values (511,30);
+insert into t (id,a) values (511,31);
+insert into t (id,a) values (511,32);
+insert into t (id,a) values (511,33);
+insert into t (id,a) values (511,34);
+insert into t (id,a) values (511,35);
+insert into t (id,a) values (511,36);
+insert into t (id,a) values (511,37);
+insert into t (id,a) values (511,38);
+insert into t (id,a) values (511,39);
+insert into t (id,a) values (511,40);
+insert into t (id,a) values (511,41);
+insert into t (id,a) values (511,42);
+insert into t (id,a) values (511,43);
+insert into t (id,a) values (511,44);
+insert into t (id,a) values (511,45);
+insert into t (id,a) values (511,46);
+insert into t (id,a) values (511,47);
+insert into t (id,a) values (511,48);
+insert into t (id,a) values (511,49);
+insert into t (id,a) values (511,50);
+insert into t (id,a) values (511,51);
+insert into t (id,a) values (511,52);
+insert into t (id,a) values (511,53);
+insert into t (id,a) values (511,54);
+insert into t (id,a) values (511,55);
+insert into t (id,a) values (511,56);
+insert into t (id,a) values (511,57);
+insert into t (id,a) values (511,58);
+insert into t (id,a) values (511,59);
+insert into t (id,a) values (511,60);
+insert into t (id,a) values (511,61);
+insert into t (id,a) values (511,62);
+insert into t (id,a) values (511,63);
+insert into t (id,a) values (511,64);
+insert into t (id,a) values (511,65);
+insert into t (id,a) values (511,66);
+insert into t (id,a) values (511,67);
+insert into t (id,a) values (511,68);
+insert into t (id,a) values (511,69);
+insert into t (id,a) values (511,70);
+insert into t (id,a) values (511,71);
+insert into t (id,a) values (511,72);
+insert into t (id,a) values (511,73);
+insert into t (id,a) values (511,74);
+insert into t (id,a) values (511,75);
+insert into t (id,a) values (511,76);
+insert into t (id,a) values (511,77);
+insert into t (id,a) values (511,78);
+insert into t (id,a) values (511,79);
+insert into t (id,a) values (511,80);
+insert into t (id,a) values (511,81);
+insert into t (id,a) values (511,82);
+insert into t (id,a) values (511,83);
+insert into t (id,a) values (511,84);
+insert into t (id,a) values (511,85);
+insert into t (id,a) values (511,86);
+insert into t (id,a) values (511,87);
+insert into t (id,a) values (511,88);
+insert into t (id,a) values (511,89);
+insert into t (id,a) values (511,90);
+insert into t (id,a) values (511,91);
+insert into t (id,a) values (511,92);
+insert into t (id,a) values (511,93);
+insert into t (id,a) values (511,94);
+insert into t (id,a) values (511,95);
+insert into t (id,a) values (511,96);
+insert into t (id,a) values (511,97);
+insert into t (id,a) values (511,98);
+insert into t (id,a) values (511,99);
+insert into t (id,a) values (512,0);
+insert into t (id,a) values (512,1);
+insert into t (id,a) values (512,2);
+insert into t (id,a) values (512,3);
+insert into t (id,a) values (512,4);
+insert into t (id,a) values (512,5);
+insert into t (id,a) values (512,6);
+insert into t (id,a) values (512,7);
+insert into t (id,a) values (512,8);
+insert into t (id,a) values (512,9);
+insert into t (id,a) values (512,10);
+insert into t (id,a) values (512,11);
+insert into t (id,a) values (512,12);
+insert into t (id,a) values (512,13);
+insert into t (id,a) values (512,14);
+insert into t (id,a) values (512,15);
+insert into t (id,a) values (512,16);
+insert into t (id,a) values (512,17);
+insert into t (id,a) values (512,18);
+insert into t (id,a) values (512,19);
+insert into t (id,a) values (512,20);
+insert into t (id,a) values (512,21);
+insert into t (id,a) values (512,22);
+insert into t (id,a) values (512,23);
+insert into t (id,a) values (512,24);
+insert into t (id,a) values (512,25);
+insert into t (id,a) values (512,26);
+insert into t (id,a) values (512,27);
+insert into t (id,a) values (512,28);
+insert into t (id,a) values (512,29);
+insert into t (id,a) values (512,30);
+insert into t (id,a) values (512,31);
+insert into t (id,a) values (512,32);
+insert into t (id,a) values (512,33);
+insert into t (id,a) values (512,34);
+insert into t (id,a) values (512,35);
+insert into t (id,a) values (512,36);
+insert into t (id,a) values (512,37);
+insert into t (id,a) values (512,38);
+insert into t (id,a) values (512,39);
+insert into t (id,a) values (512,40);
+insert into t (id,a) values (512,41);
+insert into t (id,a) values (512,42);
+insert into t (id,a) values (512,43);
+insert into t (id,a) values (512,44);
+insert into t (id,a) values (512,45);
+insert into t (id,a) values (512,46);
+insert into t (id,a) values (512,47);
+insert into t (id,a) values (512,48);
+insert into t (id,a) values (512,49);
+insert into t (id,a) values (512,50);
+insert into t (id,a) values (512,51);
+insert into t (id,a) values (512,52);
+insert into t (id,a) values (512,53);
+insert into t (id,a) values (512,54);
+insert into t (id,a) values (512,55);
+insert into t (id,a) values (512,56);
+insert into t (id,a) values (512,57);
+insert into t (id,a) values (512,58);
+insert into t (id,a) values (512,59);
+insert into t (id,a) values (512,60);
+insert into t (id,a) values (512,61);
+insert into t (id,a) values (512,62);
+insert into t (id,a) values (512,63);
+insert into t (id,a) values (512,64);
+insert into t (id,a) values (512,65);
+insert into t (id,a) values (512,66);
+insert into t (id,a) values (512,67);
+insert into t (id,a) values (512,68);
+insert into t (id,a) values (512,69);
+insert into t (id,a) values (512,70);
+insert into t (id,a) values (512,71);
+insert into t (id,a) values (512,72);
+insert into t (id,a) values (512,73);
+insert into t (id,a) values (512,74);
+insert into t (id,a) values (512,75);
+insert into t (id,a) values (512,76);
+insert into t (id,a) values (512,77);
+insert into t (id,a) values (512,78);
+insert into t (id,a) values (512,79);
+insert into t (id,a) values (512,80);
+insert into t (id,a) values (512,81);
+insert into t (id,a) values (512,82);
+insert into t (id,a) values (512,83);
+insert into t (id,a) values (512,84);
+insert into t (id,a) values (512,85);
+insert into t (id,a) values (512,86);
+insert into t (id,a) values (512,87);
+insert into t (id,a) values (512,88);
+insert into t (id,a) values (512,89);
+insert into t (id,a) values (512,90);
+insert into t (id,a) values (512,91);
+insert into t (id,a) values (512,92);
+insert into t (id,a) values (512,93);
+insert into t (id,a) values (512,94);
+insert into t (id,a) values (512,95);
+insert into t (id,a) values (512,96);
+insert into t (id,a) values (512,97);
+insert into t (id,a) values (512,98);
+insert into t (id,a) values (512,99);
+insert into t (id,a) values (513,0);
+insert into t (id,a) values (513,1);
+insert into t (id,a) values (513,2);
+insert into t (id,a) values (513,3);
+insert into t (id,a) values (513,4);
+insert into t (id,a) values (513,5);
+insert into t (id,a) values (513,6);
+insert into t (id,a) values (513,7);
+insert into t (id,a) values (513,8);
+insert into t (id,a) values (513,9);
+insert into t (id,a) values (513,10);
+insert into t (id,a) values (513,11);
+insert into t (id,a) values (513,12);
+insert into t (id,a) values (513,13);
+insert into t (id,a) values (513,14);
+insert into t (id,a) values (513,15);
+insert into t (id,a) values (513,16);
+insert into t (id,a) values (513,17);
+insert into t (id,a) values (513,18);
+insert into t (id,a) values (513,19);
+insert into t (id,a) values (513,20);
+insert into t (id,a) values (513,21);
+insert into t (id,a) values (513,22);
+insert into t (id,a) values (513,23);
+insert into t (id,a) values (513,24);
+insert into t (id,a) values (513,25);
+insert into t (id,a) values (513,26);
+insert into t (id,a) values (513,27);
+insert into t (id,a) values (513,28);
+insert into t (id,a) values (513,29);
+insert into t (id,a) values (513,30);
+insert into t (id,a) values (513,31);
+insert into t (id,a) values (513,32);
+insert into t (id,a) values (513,33);
+insert into t (id,a) values (513,34);
+insert into t (id,a) values (513,35);
+insert into t (id,a) values (513,36);
+insert into t (id,a) values (513,37);
+insert into t (id,a) values (513,38);
+insert into t (id,a) values (513,39);
+insert into t (id,a) values (513,40);
+insert into t (id,a) values (513,41);
+insert into t (id,a) values (513,42);
+insert into t (id,a) values (513,43);
+insert into t (id,a) values (513,44);
+insert into t (id,a) values (513,45);
+insert into t (id,a) values (513,46);
+insert into t (id,a) values (513,47);
+insert into t (id,a) values (513,48);
+insert into t (id,a) values (513,49);
+insert into t (id,a) values (513,50);
+insert into t (id,a) values (513,51);
+insert into t (id,a) values (513,52);
+insert into t (id,a) values (513,53);
+insert into t (id,a) values (513,54);
+insert into t (id,a) values (513,55);
+insert into t (id,a) values (513,56);
+insert into t (id,a) values (513,57);
+insert into t (id,a) values (513,58);
+insert into t (id,a) values (513,59);
+insert into t (id,a) values (513,60);
+insert into t (id,a) values (513,61);
+insert into t (id,a) values (513,62);
+insert into t (id,a) values (513,63);
+insert into t (id,a) values (513,64);
+insert into t (id,a) values (513,65);
+insert into t (id,a) values (513,66);
+insert into t (id,a) values (513,67);
+insert into t (id,a) values (513,68);
+insert into t (id,a) values (513,69);
+insert into t (id,a) values (513,70);
+insert into t (id,a) values (513,71);
+insert into t (id,a) values (513,72);
+insert into t (id,a) values (513,73);
+insert into t (id,a) values (513,74);
+insert into t (id,a) values (513,75);
+insert into t (id,a) values (513,76);
+insert into t (id,a) values (513,77);
+insert into t (id,a) values (513,78);
+insert into t (id,a) values (513,79);
+insert into t (id,a) values (513,80);
+insert into t (id,a) values (513,81);
+insert into t (id,a) values (513,82);
+insert into t (id,a) values (513,83);
+insert into t (id,a) values (513,84);
+insert into t (id,a) values (513,85);
+insert into t (id,a) values (513,86);
+insert into t (id,a) values (513,87);
+insert into t (id,a) values (513,88);
+insert into t (id,a) values (513,89);
+insert into t (id,a) values (513,90);
+insert into t (id,a) values (513,91);
+insert into t (id,a) values (513,92);
+insert into t (id,a) values (513,93);
+insert into t (id,a) values (513,94);
+insert into t (id,a) values (513,95);
+insert into t (id,a) values (513,96);
+insert into t (id,a) values (513,97);
+insert into t (id,a) values (513,98);
+insert into t (id,a) values (513,99);
+insert into t (id,a) values (514,0);
+insert into t (id,a) values (514,1);
+insert into t (id,a) values (514,2);
+insert into t (id,a) values (514,3);
+insert into t (id,a) values (514,4);
+insert into t (id,a) values (514,5);
+insert into t (id,a) values (514,6);
+insert into t (id,a) values (514,7);
+insert into t (id,a) values (514,8);
+insert into t (id,a) values (514,9);
+insert into t (id,a) values (514,10);
+insert into t (id,a) values (514,11);
+insert into t (id,a) values (514,12);
+insert into t (id,a) values (514,13);
+insert into t (id,a) values (514,14);
+insert into t (id,a) values (514,15);
+insert into t (id,a) values (514,16);
+insert into t (id,a) values (514,17);
+insert into t (id,a) values (514,18);
+insert into t (id,a) values (514,19);
+insert into t (id,a) values (514,20);
+insert into t (id,a) values (514,21);
+insert into t (id,a) values (514,22);
+insert into t (id,a) values (514,23);
+insert into t (id,a) values (514,24);
+insert into t (id,a) values (514,25);
+insert into t (id,a) values (514,26);
+insert into t (id,a) values (514,27);
+insert into t (id,a) values (514,28);
+insert into t (id,a) values (514,29);
+insert into t (id,a) values (514,30);
+insert into t (id,a) values (514,31);
+insert into t (id,a) values (514,32);
+insert into t (id,a) values (514,33);
+insert into t (id,a) values (514,34);
+insert into t (id,a) values (514,35);
+insert into t (id,a) values (514,36);
+insert into t (id,a) values (514,37);
+insert into t (id,a) values (514,38);
+insert into t (id,a) values (514,39);
+insert into t (id,a) values (514,40);
+insert into t (id,a) values (514,41);
+insert into t (id,a) values (514,42);
+insert into t (id,a) values (514,43);
+insert into t (id,a) values (514,44);
+insert into t (id,a) values (514,45);
+insert into t (id,a) values (514,46);
+insert into t (id,a) values (514,47);
+insert into t (id,a) values (514,48);
+insert into t (id,a) values (514,49);
+insert into t (id,a) values (514,50);
+insert into t (id,a) values (514,51);
+insert into t (id,a) values (514,52);
+insert into t (id,a) values (514,53);
+insert into t (id,a) values (514,54);
+insert into t (id,a) values (514,55);
+insert into t (id,a) values (514,56);
+insert into t (id,a) values (514,57);
+insert into t (id,a) values (514,58);
+insert into t (id,a) values (514,59);
+insert into t (id,a) values (514,60);
+insert into t (id,a) values (514,61);
+insert into t (id,a) values (514,62);
+insert into t (id,a) values (514,63);
+insert into t (id,a) values (514,64);
+insert into t (id,a) values (514,65);
+insert into t (id,a) values (514,66);
+insert into t (id,a) values (514,67);
+insert into t (id,a) values (514,68);
+insert into t (id,a) values (514,69);
+insert into t (id,a) values (514,70);
+insert into t (id,a) values (514,71);
+insert into t (id,a) values (514,72);
+insert into t (id,a) values (514,73);
+insert into t (id,a) values (514,74);
+insert into t (id,a) values (514,75);
+insert into t (id,a) values (514,76);
+insert into t (id,a) values (514,77);
+insert into t (id,a) values (514,78);
+insert into t (id,a) values (514,79);
+insert into t (id,a) values (514,80);
+insert into t (id,a) values (514,81);
+insert into t (id,a) values (514,82);
+insert into t (id,a) values (514,83);
+insert into t (id,a) values (514,84);
+insert into t (id,a) values (514,85);
+insert into t (id,a) values (514,86);
+insert into t (id,a) values (514,87);
+insert into t (id,a) values (514,88);
+insert into t (id,a) values (514,89);
+insert into t (id,a) values (514,90);
+insert into t (id,a) values (514,91);
+insert into t (id,a) values (514,92);
+insert into t (id,a) values (514,93);
+insert into t (id,a) values (514,94);
+insert into t (id,a) values (514,95);
+insert into t (id,a) values (514,96);
+insert into t (id,a) values (514,97);
+insert into t (id,a) values (514,98);
+insert into t (id,a) values (514,99);
+insert into t (id,a) values (515,0);
+insert into t (id,a) values (515,1);
+insert into t (id,a) values (515,2);
+insert into t (id,a) values (515,3);
+insert into t (id,a) values (515,4);
+insert into t (id,a) values (515,5);
+insert into t (id,a) values (515,6);
+insert into t (id,a) values (515,7);
+insert into t (id,a) values (515,8);
+insert into t (id,a) values (515,9);
+insert into t (id,a) values (515,10);
+insert into t (id,a) values (515,11);
+insert into t (id,a) values (515,12);
+insert into t (id,a) values (515,13);
+insert into t (id,a) values (515,14);
+insert into t (id,a) values (515,15);
+insert into t (id,a) values (515,16);
+insert into t (id,a) values (515,17);
+insert into t (id,a) values (515,18);
+insert into t (id,a) values (515,19);
+insert into t (id,a) values (515,20);
+insert into t (id,a) values (515,21);
+insert into t (id,a) values (515,22);
+insert into t (id,a) values (515,23);
+insert into t (id,a) values (515,24);
+insert into t (id,a) values (515,25);
+insert into t (id,a) values (515,26);
+insert into t (id,a) values (515,27);
+insert into t (id,a) values (515,28);
+insert into t (id,a) values (515,29);
+insert into t (id,a) values (515,30);
+insert into t (id,a) values (515,31);
+insert into t (id,a) values (515,32);
+insert into t (id,a) values (515,33);
+insert into t (id,a) values (515,34);
+insert into t (id,a) values (515,35);
+insert into t (id,a) values (515,36);
+insert into t (id,a) values (515,37);
+insert into t (id,a) values (515,38);
+insert into t (id,a) values (515,39);
+insert into t (id,a) values (515,40);
+insert into t (id,a) values (515,41);
+insert into t (id,a) values (515,42);
+insert into t (id,a) values (515,43);
+insert into t (id,a) values (515,44);
+insert into t (id,a) values (515,45);
+insert into t (id,a) values (515,46);
+insert into t (id,a) values (515,47);
+insert into t (id,a) values (515,48);
+insert into t (id,a) values (515,49);
+insert into t (id,a) values (515,50);
+insert into t (id,a) values (515,51);
+insert into t (id,a) values (515,52);
+insert into t (id,a) values (515,53);
+insert into t (id,a) values (515,54);
+insert into t (id,a) values (515,55);
+insert into t (id,a) values (515,56);
+insert into t (id,a) values (515,57);
+insert into t (id,a) values (515,58);
+insert into t (id,a) values (515,59);
+insert into t (id,a) values (515,60);
+insert into t (id,a) values (515,61);
+insert into t (id,a) values (515,62);
+insert into t (id,a) values (515,63);
+insert into t (id,a) values (515,64);
+insert into t (id,a) values (515,65);
+insert into t (id,a) values (515,66);
+insert into t (id,a) values (515,67);
+insert into t (id,a) values (515,68);
+insert into t (id,a) values (515,69);
+insert into t (id,a) values (515,70);
+insert into t (id,a) values (515,71);
+insert into t (id,a) values (515,72);
+insert into t (id,a) values (515,73);
+insert into t (id,a) values (515,74);
+insert into t (id,a) values (515,75);
+insert into t (id,a) values (515,76);
+insert into t (id,a) values (515,77);
+insert into t (id,a) values (515,78);
+insert into t (id,a) values (515,79);
+insert into t (id,a) values (515,80);
+insert into t (id,a) values (515,81);
+insert into t (id,a) values (515,82);
+insert into t (id,a) values (515,83);
+insert into t (id,a) values (515,84);
+insert into t (id,a) values (515,85);
+insert into t (id,a) values (515,86);
+insert into t (id,a) values (515,87);
+insert into t (id,a) values (515,88);
+insert into t (id,a) values (515,89);
+insert into t (id,a) values (515,90);
+insert into t (id,a) values (515,91);
+insert into t (id,a) values (515,92);
+insert into t (id,a) values (515,93);
+insert into t (id,a) values (515,94);
+insert into t (id,a) values (515,95);
+insert into t (id,a) values (515,96);
+insert into t (id,a) values (515,97);
+insert into t (id,a) values (515,98);
+insert into t (id,a) values (515,99);
+insert into t (id,a) values (516,0);
+insert into t (id,a) values (516,1);
+insert into t (id,a) values (516,2);
+insert into t (id,a) values (516,3);
+insert into t (id,a) values (516,4);
+insert into t (id,a) values (516,5);
+insert into t (id,a) values (516,6);
+insert into t (id,a) values (516,7);
+insert into t (id,a) values (516,8);
+insert into t (id,a) values (516,9);
+insert into t (id,a) values (516,10);
+insert into t (id,a) values (516,11);
+insert into t (id,a) values (516,12);
+insert into t (id,a) values (516,13);
+insert into t (id,a) values (516,14);
+insert into t (id,a) values (516,15);
+insert into t (id,a) values (516,16);
+insert into t (id,a) values (516,17);
+insert into t (id,a) values (516,18);
+insert into t (id,a) values (516,19);
+insert into t (id,a) values (516,20);
+insert into t (id,a) values (516,21);
+insert into t (id,a) values (516,22);
+insert into t (id,a) values (516,23);
+insert into t (id,a) values (516,24);
+insert into t (id,a) values (516,25);
+insert into t (id,a) values (516,26);
+insert into t (id,a) values (516,27);
+insert into t (id,a) values (516,28);
+insert into t (id,a) values (516,29);
+insert into t (id,a) values (516,30);
+insert into t (id,a) values (516,31);
+insert into t (id,a) values (516,32);
+insert into t (id,a) values (516,33);
+insert into t (id,a) values (516,34);
+insert into t (id,a) values (516,35);
+insert into t (id,a) values (516,36);
+insert into t (id,a) values (516,37);
+insert into t (id,a) values (516,38);
+insert into t (id,a) values (516,39);
+insert into t (id,a) values (516,40);
+insert into t (id,a) values (516,41);
+insert into t (id,a) values (516,42);
+insert into t (id,a) values (516,43);
+insert into t (id,a) values (516,44);
+insert into t (id,a) values (516,45);
+insert into t (id,a) values (516,46);
+insert into t (id,a) values (516,47);
+insert into t (id,a) values (516,48);
+insert into t (id,a) values (516,49);
+insert into t (id,a) values (516,50);
+insert into t (id,a) values (516,51);
+insert into t (id,a) values (516,52);
+insert into t (id,a) values (516,53);
+insert into t (id,a) values (516,54);
+insert into t (id,a) values (516,55);
+insert into t (id,a) values (516,56);
+insert into t (id,a) values (516,57);
+insert into t (id,a) values (516,58);
+insert into t (id,a) values (516,59);
+insert into t (id,a) values (516,60);
+insert into t (id,a) values (516,61);
+insert into t (id,a) values (516,62);
+insert into t (id,a) values (516,63);
+insert into t (id,a) values (516,64);
+insert into t (id,a) values (516,65);
+insert into t (id,a) values (516,66);
+insert into t (id,a) values (516,67);
+insert into t (id,a) values (516,68);
+insert into t (id,a) values (516,69);
+insert into t (id,a) values (516,70);
+insert into t (id,a) values (516,71);
+insert into t (id,a) values (516,72);
+insert into t (id,a) values (516,73);
+insert into t (id,a) values (516,74);
+insert into t (id,a) values (516,75);
+insert into t (id,a) values (516,76);
+insert into t (id,a) values (516,77);
+insert into t (id,a) values (516,78);
+insert into t (id,a) values (516,79);
+insert into t (id,a) values (516,80);
+insert into t (id,a) values (516,81);
+insert into t (id,a) values (516,82);
+insert into t (id,a) values (516,83);
+insert into t (id,a) values (516,84);
+insert into t (id,a) values (516,85);
+insert into t (id,a) values (516,86);
+insert into t (id,a) values (516,87);
+insert into t (id,a) values (516,88);
+insert into t (id,a) values (516,89);
+insert into t (id,a) values (516,90);
+insert into t (id,a) values (516,91);
+insert into t (id,a) values (516,92);
+insert into t (id,a) values (516,93);
+insert into t (id,a) values (516,94);
+insert into t (id,a) values (516,95);
+insert into t (id,a) values (516,96);
+insert into t (id,a) values (516,97);
+insert into t (id,a) values (516,98);
+insert into t (id,a) values (516,99);
+insert into t (id,a) values (517,0);
+insert into t (id,a) values (517,1);
+insert into t (id,a) values (517,2);
+insert into t (id,a) values (517,3);
+insert into t (id,a) values (517,4);
+insert into t (id,a) values (517,5);
+insert into t (id,a) values (517,6);
+insert into t (id,a) values (517,7);
+insert into t (id,a) values (517,8);
+insert into t (id,a) values (517,9);
+insert into t (id,a) values (517,10);
+insert into t (id,a) values (517,11);
+insert into t (id,a) values (517,12);
+insert into t (id,a) values (517,13);
+insert into t (id,a) values (517,14);
+insert into t (id,a) values (517,15);
+insert into t (id,a) values (517,16);
+insert into t (id,a) values (517,17);
+insert into t (id,a) values (517,18);
+insert into t (id,a) values (517,19);
+insert into t (id,a) values (517,20);
+insert into t (id,a) values (517,21);
+insert into t (id,a) values (517,22);
+insert into t (id,a) values (517,23);
+insert into t (id,a) values (517,24);
+insert into t (id,a) values (517,25);
+insert into t (id,a) values (517,26);
+insert into t (id,a) values (517,27);
+insert into t (id,a) values (517,28);
+insert into t (id,a) values (517,29);
+insert into t (id,a) values (517,30);
+insert into t (id,a) values (517,31);
+insert into t (id,a) values (517,32);
+insert into t (id,a) values (517,33);
+insert into t (id,a) values (517,34);
+insert into t (id,a) values (517,35);
+insert into t (id,a) values (517,36);
+insert into t (id,a) values (517,37);
+insert into t (id,a) values (517,38);
+insert into t (id,a) values (517,39);
+insert into t (id,a) values (517,40);
+insert into t (id,a) values (517,41);
+insert into t (id,a) values (517,42);
+insert into t (id,a) values (517,43);
+insert into t (id,a) values (517,44);
+insert into t (id,a) values (517,45);
+insert into t (id,a) values (517,46);
+insert into t (id,a) values (517,47);
+insert into t (id,a) values (517,48);
+insert into t (id,a) values (517,49);
+insert into t (id,a) values (517,50);
+insert into t (id,a) values (517,51);
+insert into t (id,a) values (517,52);
+insert into t (id,a) values (517,53);
+insert into t (id,a) values (517,54);
+insert into t (id,a) values (517,55);
+insert into t (id,a) values (517,56);
+insert into t (id,a) values (517,57);
+insert into t (id,a) values (517,58);
+insert into t (id,a) values (517,59);
+insert into t (id,a) values (517,60);
+insert into t (id,a) values (517,61);
+insert into t (id,a) values (517,62);
+insert into t (id,a) values (517,63);
+insert into t (id,a) values (517,64);
+insert into t (id,a) values (517,65);
+insert into t (id,a) values (517,66);
+insert into t (id,a) values (517,67);
+insert into t (id,a) values (517,68);
+insert into t (id,a) values (517,69);
+insert into t (id,a) values (517,70);
+insert into t (id,a) values (517,71);
+insert into t (id,a) values (517,72);
+insert into t (id,a) values (517,73);
+insert into t (id,a) values (517,74);
+insert into t (id,a) values (517,75);
+insert into t (id,a) values (517,76);
+insert into t (id,a) values (517,77);
+insert into t (id,a) values (517,78);
+insert into t (id,a) values (517,79);
+insert into t (id,a) values (517,80);
+insert into t (id,a) values (517,81);
+insert into t (id,a) values (517,82);
+insert into t (id,a) values (517,83);
+insert into t (id,a) values (517,84);
+insert into t (id,a) values (517,85);
+insert into t (id,a) values (517,86);
+insert into t (id,a) values (517,87);
+insert into t (id,a) values (517,88);
+insert into t (id,a) values (517,89);
+insert into t (id,a) values (517,90);
+insert into t (id,a) values (517,91);
+insert into t (id,a) values (517,92);
+insert into t (id,a) values (517,93);
+insert into t (id,a) values (517,94);
+insert into t (id,a) values (517,95);
+insert into t (id,a) values (517,96);
+insert into t (id,a) values (517,97);
+insert into t (id,a) values (517,98);
+insert into t (id,a) values (517,99);
+insert into t (id,a) values (518,0);
+insert into t (id,a) values (518,1);
+insert into t (id,a) values (518,2);
+insert into t (id,a) values (518,3);
+insert into t (id,a) values (518,4);
+insert into t (id,a) values (518,5);
+insert into t (id,a) values (518,6);
+insert into t (id,a) values (518,7);
+insert into t (id,a) values (518,8);
+insert into t (id,a) values (518,9);
+insert into t (id,a) values (518,10);
+insert into t (id,a) values (518,11);
+insert into t (id,a) values (518,12);
+insert into t (id,a) values (518,13);
+insert into t (id,a) values (518,14);
+insert into t (id,a) values (518,15);
+insert into t (id,a) values (518,16);
+insert into t (id,a) values (518,17);
+insert into t (id,a) values (518,18);
+insert into t (id,a) values (518,19);
+insert into t (id,a) values (518,20);
+insert into t (id,a) values (518,21);
+insert into t (id,a) values (518,22);
+insert into t (id,a) values (518,23);
+insert into t (id,a) values (518,24);
+insert into t (id,a) values (518,25);
+insert into t (id,a) values (518,26);
+insert into t (id,a) values (518,27);
+insert into t (id,a) values (518,28);
+insert into t (id,a) values (518,29);
+insert into t (id,a) values (518,30);
+insert into t (id,a) values (518,31);
+insert into t (id,a) values (518,32);
+insert into t (id,a) values (518,33);
+insert into t (id,a) values (518,34);
+insert into t (id,a) values (518,35);
+insert into t (id,a) values (518,36);
+insert into t (id,a) values (518,37);
+insert into t (id,a) values (518,38);
+insert into t (id,a) values (518,39);
+insert into t (id,a) values (518,40);
+insert into t (id,a) values (518,41);
+insert into t (id,a) values (518,42);
+insert into t (id,a) values (518,43);
+insert into t (id,a) values (518,44);
+insert into t (id,a) values (518,45);
+insert into t (id,a) values (518,46);
+insert into t (id,a) values (518,47);
+insert into t (id,a) values (518,48);
+insert into t (id,a) values (518,49);
+insert into t (id,a) values (518,50);
+insert into t (id,a) values (518,51);
+insert into t (id,a) values (518,52);
+insert into t (id,a) values (518,53);
+insert into t (id,a) values (518,54);
+insert into t (id,a) values (518,55);
+insert into t (id,a) values (518,56);
+insert into t (id,a) values (518,57);
+insert into t (id,a) values (518,58);
+insert into t (id,a) values (518,59);
+insert into t (id,a) values (518,60);
+insert into t (id,a) values (518,61);
+insert into t (id,a) values (518,62);
+insert into t (id,a) values (518,63);
+insert into t (id,a) values (518,64);
+insert into t (id,a) values (518,65);
+insert into t (id,a) values (518,66);
+insert into t (id,a) values (518,67);
+insert into t (id,a) values (518,68);
+insert into t (id,a) values (518,69);
+insert into t (id,a) values (518,70);
+insert into t (id,a) values (518,71);
+insert into t (id,a) values (518,72);
+insert into t (id,a) values (518,73);
+insert into t (id,a) values (518,74);
+insert into t (id,a) values (518,75);
+insert into t (id,a) values (518,76);
+insert into t (id,a) values (518,77);
+insert into t (id,a) values (518,78);
+insert into t (id,a) values (518,79);
+insert into t (id,a) values (518,80);
+insert into t (id,a) values (518,81);
+insert into t (id,a) values (518,82);
+insert into t (id,a) values (518,83);
+insert into t (id,a) values (518,84);
+insert into t (id,a) values (518,85);
+insert into t (id,a) values (518,86);
+insert into t (id,a) values (518,87);
+insert into t (id,a) values (518,88);
+insert into t (id,a) values (518,89);
+insert into t (id,a) values (518,90);
+insert into t (id,a) values (518,91);
+insert into t (id,a) values (518,92);
+insert into t (id,a) values (518,93);
+insert into t (id,a) values (518,94);
+insert into t (id,a) values (518,95);
+insert into t (id,a) values (518,96);
+insert into t (id,a) values (518,97);
+insert into t (id,a) values (518,98);
+insert into t (id,a) values (518,99);
+insert into t (id,a) values (519,0);
+insert into t (id,a) values (519,1);
+insert into t (id,a) values (519,2);
+insert into t (id,a) values (519,3);
+insert into t (id,a) values (519,4);
+insert into t (id,a) values (519,5);
+insert into t (id,a) values (519,6);
+insert into t (id,a) values (519,7);
+insert into t (id,a) values (519,8);
+insert into t (id,a) values (519,9);
+insert into t (id,a) values (519,10);
+insert into t (id,a) values (519,11);
+insert into t (id,a) values (519,12);
+insert into t (id,a) values (519,13);
+insert into t (id,a) values (519,14);
+insert into t (id,a) values (519,15);
+insert into t (id,a) values (519,16);
+insert into t (id,a) values (519,17);
+insert into t (id,a) values (519,18);
+insert into t (id,a) values (519,19);
+insert into t (id,a) values (519,20);
+insert into t (id,a) values (519,21);
+insert into t (id,a) values (519,22);
+insert into t (id,a) values (519,23);
+insert into t (id,a) values (519,24);
+insert into t (id,a) values (519,25);
+insert into t (id,a) values (519,26);
+insert into t (id,a) values (519,27);
+insert into t (id,a) values (519,28);
+insert into t (id,a) values (519,29);
+insert into t (id,a) values (519,30);
+insert into t (id,a) values (519,31);
+insert into t (id,a) values (519,32);
+insert into t (id,a) values (519,33);
+insert into t (id,a) values (519,34);
+insert into t (id,a) values (519,35);
+insert into t (id,a) values (519,36);
+insert into t (id,a) values (519,37);
+insert into t (id,a) values (519,38);
+insert into t (id,a) values (519,39);
+insert into t (id,a) values (519,40);
+insert into t (id,a) values (519,41);
+insert into t (id,a) values (519,42);
+insert into t (id,a) values (519,43);
+insert into t (id,a) values (519,44);
+insert into t (id,a) values (519,45);
+insert into t (id,a) values (519,46);
+insert into t (id,a) values (519,47);
+insert into t (id,a) values (519,48);
+insert into t (id,a) values (519,49);
+insert into t (id,a) values (519,50);
+insert into t (id,a) values (519,51);
+insert into t (id,a) values (519,52);
+insert into t (id,a) values (519,53);
+insert into t (id,a) values (519,54);
+insert into t (id,a) values (519,55);
+insert into t (id,a) values (519,56);
+insert into t (id,a) values (519,57);
+insert into t (id,a) values (519,58);
+insert into t (id,a) values (519,59);
+insert into t (id,a) values (519,60);
+insert into t (id,a) values (519,61);
+insert into t (id,a) values (519,62);
+insert into t (id,a) values (519,63);
+insert into t (id,a) values (519,64);
+insert into t (id,a) values (519,65);
+insert into t (id,a) values (519,66);
+insert into t (id,a) values (519,67);
+insert into t (id,a) values (519,68);
+insert into t (id,a) values (519,69);
+insert into t (id,a) values (519,70);
+insert into t (id,a) values (519,71);
+insert into t (id,a) values (519,72);
+insert into t (id,a) values (519,73);
+insert into t (id,a) values (519,74);
+insert into t (id,a) values (519,75);
+insert into t (id,a) values (519,76);
+insert into t (id,a) values (519,77);
+insert into t (id,a) values (519,78);
+insert into t (id,a) values (519,79);
+insert into t (id,a) values (519,80);
+insert into t (id,a) values (519,81);
+insert into t (id,a) values (519,82);
+insert into t (id,a) values (519,83);
+insert into t (id,a) values (519,84);
+insert into t (id,a) values (519,85);
+insert into t (id,a) values (519,86);
+insert into t (id,a) values (519,87);
+insert into t (id,a) values (519,88);
+insert into t (id,a) values (519,89);
+insert into t (id,a) values (519,90);
+insert into t (id,a) values (519,91);
+insert into t (id,a) values (519,92);
+insert into t (id,a) values (519,93);
+insert into t (id,a) values (519,94);
+insert into t (id,a) values (519,95);
+insert into t (id,a) values (519,96);
+insert into t (id,a) values (519,97);
+insert into t (id,a) values (519,98);
+insert into t (id,a) values (519,99);
+insert into t (id,a) values (520,0);
+insert into t (id,a) values (520,1);
+insert into t (id,a) values (520,2);
+insert into t (id,a) values (520,3);
+insert into t (id,a) values (520,4);
+insert into t (id,a) values (520,5);
+insert into t (id,a) values (520,6);
+insert into t (id,a) values (520,7);
+insert into t (id,a) values (520,8);
+insert into t (id,a) values (520,9);
+insert into t (id,a) values (520,10);
+insert into t (id,a) values (520,11);
+insert into t (id,a) values (520,12);
+insert into t (id,a) values (520,13);
+insert into t (id,a) values (520,14);
+insert into t (id,a) values (520,15);
+insert into t (id,a) values (520,16);
+insert into t (id,a) values (520,17);
+insert into t (id,a) values (520,18);
+insert into t (id,a) values (520,19);
+insert into t (id,a) values (520,20);
+insert into t (id,a) values (520,21);
+insert into t (id,a) values (520,22);
+insert into t (id,a) values (520,23);
+insert into t (id,a) values (520,24);
+insert into t (id,a) values (520,25);
+insert into t (id,a) values (520,26);
+insert into t (id,a) values (520,27);
+insert into t (id,a) values (520,28);
+insert into t (id,a) values (520,29);
+insert into t (id,a) values (520,30);
+insert into t (id,a) values (520,31);
+insert into t (id,a) values (520,32);
+insert into t (id,a) values (520,33);
+insert into t (id,a) values (520,34);
+insert into t (id,a) values (520,35);
+insert into t (id,a) values (520,36);
+insert into t (id,a) values (520,37);
+insert into t (id,a) values (520,38);
+insert into t (id,a) values (520,39);
+insert into t (id,a) values (520,40);
+insert into t (id,a) values (520,41);
+insert into t (id,a) values (520,42);
+insert into t (id,a) values (520,43);
+insert into t (id,a) values (520,44);
+insert into t (id,a) values (520,45);
+insert into t (id,a) values (520,46);
+insert into t (id,a) values (520,47);
+insert into t (id,a) values (520,48);
+insert into t (id,a) values (520,49);
+insert into t (id,a) values (520,50);
+insert into t (id,a) values (520,51);
+insert into t (id,a) values (520,52);
+insert into t (id,a) values (520,53);
+insert into t (id,a) values (520,54);
+insert into t (id,a) values (520,55);
+insert into t (id,a) values (520,56);
+insert into t (id,a) values (520,57);
+insert into t (id,a) values (520,58);
+insert into t (id,a) values (520,59);
+insert into t (id,a) values (520,60);
+insert into t (id,a) values (520,61);
+insert into t (id,a) values (520,62);
+insert into t (id,a) values (520,63);
+insert into t (id,a) values (520,64);
+insert into t (id,a) values (520,65);
+insert into t (id,a) values (520,66);
+insert into t (id,a) values (520,67);
+insert into t (id,a) values (520,68);
+insert into t (id,a) values (520,69);
+insert into t (id,a) values (520,70);
+insert into t (id,a) values (520,71);
+insert into t (id,a) values (520,72);
+insert into t (id,a) values (520,73);
+insert into t (id,a) values (520,74);
+insert into t (id,a) values (520,75);
+insert into t (id,a) values (520,76);
+insert into t (id,a) values (520,77);
+insert into t (id,a) values (520,78);
+insert into t (id,a) values (520,79);
+insert into t (id,a) values (520,80);
+insert into t (id,a) values (520,81);
+insert into t (id,a) values (520,82);
+insert into t (id,a) values (520,83);
+insert into t (id,a) values (520,84);
+insert into t (id,a) values (520,85);
+insert into t (id,a) values (520,86);
+insert into t (id,a) values (520,87);
+insert into t (id,a) values (520,88);
+insert into t (id,a) values (520,89);
+insert into t (id,a) values (520,90);
+insert into t (id,a) values (520,91);
+insert into t (id,a) values (520,92);
+insert into t (id,a) values (520,93);
+insert into t (id,a) values (520,94);
+insert into t (id,a) values (520,95);
+insert into t (id,a) values (520,96);
+insert into t (id,a) values (520,97);
+insert into t (id,a) values (520,98);
+insert into t (id,a) values (520,99);
+insert into t (id,a) values (521,0);
+insert into t (id,a) values (521,1);
+insert into t (id,a) values (521,2);
+insert into t (id,a) values (521,3);
+insert into t (id,a) values (521,4);
+insert into t (id,a) values (521,5);
+insert into t (id,a) values (521,6);
+insert into t (id,a) values (521,7);
+insert into t (id,a) values (521,8);
+insert into t (id,a) values (521,9);
+insert into t (id,a) values (521,10);
+insert into t (id,a) values (521,11);
+insert into t (id,a) values (521,12);
+insert into t (id,a) values (521,13);
+insert into t (id,a) values (521,14);
+insert into t (id,a) values (521,15);
+insert into t (id,a) values (521,16);
+insert into t (id,a) values (521,17);
+insert into t (id,a) values (521,18);
+insert into t (id,a) values (521,19);
+insert into t (id,a) values (521,20);
+insert into t (id,a) values (521,21);
+insert into t (id,a) values (521,22);
+insert into t (id,a) values (521,23);
+insert into t (id,a) values (521,24);
+insert into t (id,a) values (521,25);
+insert into t (id,a) values (521,26);
+insert into t (id,a) values (521,27);
+insert into t (id,a) values (521,28);
+insert into t (id,a) values (521,29);
+insert into t (id,a) values (521,30);
+insert into t (id,a) values (521,31);
+insert into t (id,a) values (521,32);
+insert into t (id,a) values (521,33);
+insert into t (id,a) values (521,34);
+insert into t (id,a) values (521,35);
+insert into t (id,a) values (521,36);
+insert into t (id,a) values (521,37);
+insert into t (id,a) values (521,38);
+insert into t (id,a) values (521,39);
+insert into t (id,a) values (521,40);
+insert into t (id,a) values (521,41);
+insert into t (id,a) values (521,42);
+insert into t (id,a) values (521,43);
+insert into t (id,a) values (521,44);
+insert into t (id,a) values (521,45);
+insert into t (id,a) values (521,46);
+insert into t (id,a) values (521,47);
+insert into t (id,a) values (521,48);
+insert into t (id,a) values (521,49);
+insert into t (id,a) values (521,50);
+insert into t (id,a) values (521,51);
+insert into t (id,a) values (521,52);
+insert into t (id,a) values (521,53);
+insert into t (id,a) values (521,54);
+insert into t (id,a) values (521,55);
+insert into t (id,a) values (521,56);
+insert into t (id,a) values (521,57);
+insert into t (id,a) values (521,58);
+insert into t (id,a) values (521,59);
+insert into t (id,a) values (521,60);
+insert into t (id,a) values (521,61);
+insert into t (id,a) values (521,62);
+insert into t (id,a) values (521,63);
+insert into t (id,a) values (521,64);
+insert into t (id,a) values (521,65);
+insert into t (id,a) values (521,66);
+insert into t (id,a) values (521,67);
+insert into t (id,a) values (521,68);
+insert into t (id,a) values (521,69);
+insert into t (id,a) values (521,70);
+insert into t (id,a) values (521,71);
+insert into t (id,a) values (521,72);
+insert into t (id,a) values (521,73);
+insert into t (id,a) values (521,74);
+insert into t (id,a) values (521,75);
+insert into t (id,a) values (521,76);
+insert into t (id,a) values (521,77);
+insert into t (id,a) values (521,78);
+insert into t (id,a) values (521,79);
+insert into t (id,a) values (521,80);
+insert into t (id,a) values (521,81);
+insert into t (id,a) values (521,82);
+insert into t (id,a) values (521,83);
+insert into t (id,a) values (521,84);
+insert into t (id,a) values (521,85);
+insert into t (id,a) values (521,86);
+insert into t (id,a) values (521,87);
+insert into t (id,a) values (521,88);
+insert into t (id,a) values (521,89);
+insert into t (id,a) values (521,90);
+insert into t (id,a) values (521,91);
+insert into t (id,a) values (521,92);
+insert into t (id,a) values (521,93);
+insert into t (id,a) values (521,94);
+insert into t (id,a) values (521,95);
+insert into t (id,a) values (521,96);
+insert into t (id,a) values (521,97);
+insert into t (id,a) values (521,98);
+insert into t (id,a) values (521,99);
+insert into t (id,a) values (522,0);
+insert into t (id,a) values (522,1);
+insert into t (id,a) values (522,2);
+insert into t (id,a) values (522,3);
+insert into t (id,a) values (522,4);
+insert into t (id,a) values (522,5);
+insert into t (id,a) values (522,6);
+insert into t (id,a) values (522,7);
+insert into t (id,a) values (522,8);
+insert into t (id,a) values (522,9);
+insert into t (id,a) values (522,10);
+insert into t (id,a) values (522,11);
+insert into t (id,a) values (522,12);
+insert into t (id,a) values (522,13);
+insert into t (id,a) values (522,14);
+insert into t (id,a) values (522,15);
+insert into t (id,a) values (522,16);
+insert into t (id,a) values (522,17);
+insert into t (id,a) values (522,18);
+insert into t (id,a) values (522,19);
+insert into t (id,a) values (522,20);
+insert into t (id,a) values (522,21);
+insert into t (id,a) values (522,22);
+insert into t (id,a) values (522,23);
+insert into t (id,a) values (522,24);
+insert into t (id,a) values (522,25);
+insert into t (id,a) values (522,26);
+insert into t (id,a) values (522,27);
+insert into t (id,a) values (522,28);
+insert into t (id,a) values (522,29);
+insert into t (id,a) values (522,30);
+insert into t (id,a) values (522,31);
+insert into t (id,a) values (522,32);
+insert into t (id,a) values (522,33);
+insert into t (id,a) values (522,34);
+insert into t (id,a) values (522,35);
+insert into t (id,a) values (522,36);
+insert into t (id,a) values (522,37);
+insert into t (id,a) values (522,38);
+insert into t (id,a) values (522,39);
+insert into t (id,a) values (522,40);
+insert into t (id,a) values (522,41);
+insert into t (id,a) values (522,42);
+insert into t (id,a) values (522,43);
+insert into t (id,a) values (522,44);
+insert into t (id,a) values (522,45);
+insert into t (id,a) values (522,46);
+insert into t (id,a) values (522,47);
+insert into t (id,a) values (522,48);
+insert into t (id,a) values (522,49);
+insert into t (id,a) values (522,50);
+insert into t (id,a) values (522,51);
+insert into t (id,a) values (522,52);
+insert into t (id,a) values (522,53);
+insert into t (id,a) values (522,54);
+insert into t (id,a) values (522,55);
+insert into t (id,a) values (522,56);
+insert into t (id,a) values (522,57);
+insert into t (id,a) values (522,58);
+insert into t (id,a) values (522,59);
+insert into t (id,a) values (522,60);
+insert into t (id,a) values (522,61);
+insert into t (id,a) values (522,62);
+insert into t (id,a) values (522,63);
+insert into t (id,a) values (522,64);
+insert into t (id,a) values (522,65);
+insert into t (id,a) values (522,66);
+insert into t (id,a) values (522,67);
+insert into t (id,a) values (522,68);
+insert into t (id,a) values (522,69);
+insert into t (id,a) values (522,70);
+insert into t (id,a) values (522,71);
+insert into t (id,a) values (522,72);
+insert into t (id,a) values (522,73);
+insert into t (id,a) values (522,74);
+insert into t (id,a) values (522,75);
+insert into t (id,a) values (522,76);
+insert into t (id,a) values (522,77);
+insert into t (id,a) values (522,78);
+insert into t (id,a) values (522,79);
+insert into t (id,a) values (522,80);
+insert into t (id,a) values (522,81);
+insert into t (id,a) values (522,82);
+insert into t (id,a) values (522,83);
+insert into t (id,a) values (522,84);
+insert into t (id,a) values (522,85);
+insert into t (id,a) values (522,86);
+insert into t (id,a) values (522,87);
+insert into t (id,a) values (522,88);
+insert into t (id,a) values (522,89);
+insert into t (id,a) values (522,90);
+insert into t (id,a) values (522,91);
+insert into t (id,a) values (522,92);
+insert into t (id,a) values (522,93);
+insert into t (id,a) values (522,94);
+insert into t (id,a) values (522,95);
+insert into t (id,a) values (522,96);
+insert into t (id,a) values (522,97);
+insert into t (id,a) values (522,98);
+insert into t (id,a) values (522,99);
+insert into t (id,a) values (523,0);
+insert into t (id,a) values (523,1);
+insert into t (id,a) values (523,2);
+insert into t (id,a) values (523,3);
+insert into t (id,a) values (523,4);
+insert into t (id,a) values (523,5);
+insert into t (id,a) values (523,6);
+insert into t (id,a) values (523,7);
+insert into t (id,a) values (523,8);
+insert into t (id,a) values (523,9);
+insert into t (id,a) values (523,10);
+insert into t (id,a) values (523,11);
+insert into t (id,a) values (523,12);
+insert into t (id,a) values (523,13);
+insert into t (id,a) values (523,14);
+insert into t (id,a) values (523,15);
+insert into t (id,a) values (523,16);
+insert into t (id,a) values (523,17);
+insert into t (id,a) values (523,18);
+insert into t (id,a) values (523,19);
+insert into t (id,a) values (523,20);
+insert into t (id,a) values (523,21);
+insert into t (id,a) values (523,22);
+insert into t (id,a) values (523,23);
+insert into t (id,a) values (523,24);
+insert into t (id,a) values (523,25);
+insert into t (id,a) values (523,26);
+insert into t (id,a) values (523,27);
+insert into t (id,a) values (523,28);
+insert into t (id,a) values (523,29);
+insert into t (id,a) values (523,30);
+insert into t (id,a) values (523,31);
+insert into t (id,a) values (523,32);
+insert into t (id,a) values (523,33);
+insert into t (id,a) values (523,34);
+insert into t (id,a) values (523,35);
+insert into t (id,a) values (523,36);
+insert into t (id,a) values (523,37);
+insert into t (id,a) values (523,38);
+insert into t (id,a) values (523,39);
+insert into t (id,a) values (523,40);
+insert into t (id,a) values (523,41);
+insert into t (id,a) values (523,42);
+insert into t (id,a) values (523,43);
+insert into t (id,a) values (523,44);
+insert into t (id,a) values (523,45);
+insert into t (id,a) values (523,46);
+insert into t (id,a) values (523,47);
+insert into t (id,a) values (523,48);
+insert into t (id,a) values (523,49);
+insert into t (id,a) values (523,50);
+insert into t (id,a) values (523,51);
+insert into t (id,a) values (523,52);
+insert into t (id,a) values (523,53);
+insert into t (id,a) values (523,54);
+insert into t (id,a) values (523,55);
+insert into t (id,a) values (523,56);
+insert into t (id,a) values (523,57);
+insert into t (id,a) values (523,58);
+insert into t (id,a) values (523,59);
+insert into t (id,a) values (523,60);
+insert into t (id,a) values (523,61);
+insert into t (id,a) values (523,62);
+insert into t (id,a) values (523,63);
+insert into t (id,a) values (523,64);
+insert into t (id,a) values (523,65);
+insert into t (id,a) values (523,66);
+insert into t (id,a) values (523,67);
+insert into t (id,a) values (523,68);
+insert into t (id,a) values (523,69);
+insert into t (id,a) values (523,70);
+insert into t (id,a) values (523,71);
+insert into t (id,a) values (523,72);
+insert into t (id,a) values (523,73);
+insert into t (id,a) values (523,74);
+insert into t (id,a) values (523,75);
+insert into t (id,a) values (523,76);
+insert into t (id,a) values (523,77);
+insert into t (id,a) values (523,78);
+insert into t (id,a) values (523,79);
+insert into t (id,a) values (523,80);
+insert into t (id,a) values (523,81);
+insert into t (id,a) values (523,82);
+insert into t (id,a) values (523,83);
+insert into t (id,a) values (523,84);
+insert into t (id,a) values (523,85);
+insert into t (id,a) values (523,86);
+insert into t (id,a) values (523,87);
+insert into t (id,a) values (523,88);
+insert into t (id,a) values (523,89);
+insert into t (id,a) values (523,90);
+insert into t (id,a) values (523,91);
+insert into t (id,a) values (523,92);
+insert into t (id,a) values (523,93);
+insert into t (id,a) values (523,94);
+insert into t (id,a) values (523,95);
+insert into t (id,a) values (523,96);
+insert into t (id,a) values (523,97);
+insert into t (id,a) values (523,98);
+insert into t (id,a) values (523,99);
+insert into t (id,a) values (524,0);
+insert into t (id,a) values (524,1);
+insert into t (id,a) values (524,2);
+insert into t (id,a) values (524,3);
+insert into t (id,a) values (524,4);
+insert into t (id,a) values (524,5);
+insert into t (id,a) values (524,6);
+insert into t (id,a) values (524,7);
+insert into t (id,a) values (524,8);
+insert into t (id,a) values (524,9);
+insert into t (id,a) values (524,10);
+insert into t (id,a) values (524,11);
+insert into t (id,a) values (524,12);
+insert into t (id,a) values (524,13);
+insert into t (id,a) values (524,14);
+insert into t (id,a) values (524,15);
+insert into t (id,a) values (524,16);
+insert into t (id,a) values (524,17);
+insert into t (id,a) values (524,18);
+insert into t (id,a) values (524,19);
+insert into t (id,a) values (524,20);
+insert into t (id,a) values (524,21);
+insert into t (id,a) values (524,22);
+insert into t (id,a) values (524,23);
+insert into t (id,a) values (524,24);
+insert into t (id,a) values (524,25);
+insert into t (id,a) values (524,26);
+insert into t (id,a) values (524,27);
+insert into t (id,a) values (524,28);
+insert into t (id,a) values (524,29);
+insert into t (id,a) values (524,30);
+insert into t (id,a) values (524,31);
+insert into t (id,a) values (524,32);
+insert into t (id,a) values (524,33);
+insert into t (id,a) values (524,34);
+insert into t (id,a) values (524,35);
+insert into t (id,a) values (524,36);
+insert into t (id,a) values (524,37);
+insert into t (id,a) values (524,38);
+insert into t (id,a) values (524,39);
+insert into t (id,a) values (524,40);
+insert into t (id,a) values (524,41);
+insert into t (id,a) values (524,42);
+insert into t (id,a) values (524,43);
+insert into t (id,a) values (524,44);
+insert into t (id,a) values (524,45);
+insert into t (id,a) values (524,46);
+insert into t (id,a) values (524,47);
+insert into t (id,a) values (524,48);
+insert into t (id,a) values (524,49);
+insert into t (id,a) values (524,50);
+insert into t (id,a) values (524,51);
+insert into t (id,a) values (524,52);
+insert into t (id,a) values (524,53);
+insert into t (id,a) values (524,54);
+insert into t (id,a) values (524,55);
+insert into t (id,a) values (524,56);
+insert into t (id,a) values (524,57);
+insert into t (id,a) values (524,58);
+insert into t (id,a) values (524,59);
+insert into t (id,a) values (524,60);
+insert into t (id,a) values (524,61);
+insert into t (id,a) values (524,62);
+insert into t (id,a) values (524,63);
+insert into t (id,a) values (524,64);
+insert into t (id,a) values (524,65);
+insert into t (id,a) values (524,66);
+insert into t (id,a) values (524,67);
+insert into t (id,a) values (524,68);
+insert into t (id,a) values (524,69);
+insert into t (id,a) values (524,70);
+insert into t (id,a) values (524,71);
+insert into t (id,a) values (524,72);
+insert into t (id,a) values (524,73);
+insert into t (id,a) values (524,74);
+insert into t (id,a) values (524,75);
+insert into t (id,a) values (524,76);
+insert into t (id,a) values (524,77);
+insert into t (id,a) values (524,78);
+insert into t (id,a) values (524,79);
+insert into t (id,a) values (524,80);
+insert into t (id,a) values (524,81);
+insert into t (id,a) values (524,82);
+insert into t (id,a) values (524,83);
+insert into t (id,a) values (524,84);
+insert into t (id,a) values (524,85);
+insert into t (id,a) values (524,86);
+insert into t (id,a) values (524,87);
+insert into t (id,a) values (524,88);
+insert into t (id,a) values (524,89);
+insert into t (id,a) values (524,90);
+insert into t (id,a) values (524,91);
+insert into t (id,a) values (524,92);
+insert into t (id,a) values (524,93);
+insert into t (id,a) values (524,94);
+insert into t (id,a) values (524,95);
+insert into t (id,a) values (524,96);
+insert into t (id,a) values (524,97);
+insert into t (id,a) values (524,98);
+insert into t (id,a) values (524,99);
+insert into t (id,a) values (525,0);
+insert into t (id,a) values (525,1);
+insert into t (id,a) values (525,2);
+insert into t (id,a) values (525,3);
+insert into t (id,a) values (525,4);
+insert into t (id,a) values (525,5);
+insert into t (id,a) values (525,6);
+insert into t (id,a) values (525,7);
+insert into t (id,a) values (525,8);
+insert into t (id,a) values (525,9);
+insert into t (id,a) values (525,10);
+insert into t (id,a) values (525,11);
+insert into t (id,a) values (525,12);
+insert into t (id,a) values (525,13);
+insert into t (id,a) values (525,14);
+insert into t (id,a) values (525,15);
+insert into t (id,a) values (525,16);
+insert into t (id,a) values (525,17);
+insert into t (id,a) values (525,18);
+insert into t (id,a) values (525,19);
+insert into t (id,a) values (525,20);
+insert into t (id,a) values (525,21);
+insert into t (id,a) values (525,22);
+insert into t (id,a) values (525,23);
+insert into t (id,a) values (525,24);
+insert into t (id,a) values (525,25);
+insert into t (id,a) values (525,26);
+insert into t (id,a) values (525,27);
+insert into t (id,a) values (525,28);
+insert into t (id,a) values (525,29);
+insert into t (id,a) values (525,30);
+insert into t (id,a) values (525,31);
+insert into t (id,a) values (525,32);
+insert into t (id,a) values (525,33);
+insert into t (id,a) values (525,34);
+insert into t (id,a) values (525,35);
+insert into t (id,a) values (525,36);
+insert into t (id,a) values (525,37);
+insert into t (id,a) values (525,38);
+insert into t (id,a) values (525,39);
+insert into t (id,a) values (525,40);
+insert into t (id,a) values (525,41);
+insert into t (id,a) values (525,42);
+insert into t (id,a) values (525,43);
+insert into t (id,a) values (525,44);
+insert into t (id,a) values (525,45);
+insert into t (id,a) values (525,46);
+insert into t (id,a) values (525,47);
+insert into t (id,a) values (525,48);
+insert into t (id,a) values (525,49);
+insert into t (id,a) values (525,50);
+insert into t (id,a) values (525,51);
+insert into t (id,a) values (525,52);
+insert into t (id,a) values (525,53);
+insert into t (id,a) values (525,54);
+insert into t (id,a) values (525,55);
+insert into t (id,a) values (525,56);
+insert into t (id,a) values (525,57);
+insert into t (id,a) values (525,58);
+insert into t (id,a) values (525,59);
+insert into t (id,a) values (525,60);
+insert into t (id,a) values (525,61);
+insert into t (id,a) values (525,62);
+insert into t (id,a) values (525,63);
+insert into t (id,a) values (525,64);
+insert into t (id,a) values (525,65);
+insert into t (id,a) values (525,66);
+insert into t (id,a) values (525,67);
+insert into t (id,a) values (525,68);
+insert into t (id,a) values (525,69);
+insert into t (id,a) values (525,70);
+insert into t (id,a) values (525,71);
+insert into t (id,a) values (525,72);
+insert into t (id,a) values (525,73);
+insert into t (id,a) values (525,74);
+insert into t (id,a) values (525,75);
+insert into t (id,a) values (525,76);
+insert into t (id,a) values (525,77);
+insert into t (id,a) values (525,78);
+insert into t (id,a) values (525,79);
+insert into t (id,a) values (525,80);
+insert into t (id,a) values (525,81);
+insert into t (id,a) values (525,82);
+insert into t (id,a) values (525,83);
+insert into t (id,a) values (525,84);
+insert into t (id,a) values (525,85);
+insert into t (id,a) values (525,86);
+insert into t (id,a) values (525,87);
+insert into t (id,a) values (525,88);
+insert into t (id,a) values (525,89);
+insert into t (id,a) values (525,90);
+insert into t (id,a) values (525,91);
+insert into t (id,a) values (525,92);
+insert into t (id,a) values (525,93);
+insert into t (id,a) values (525,94);
+insert into t (id,a) values (525,95);
+insert into t (id,a) values (525,96);
+insert into t (id,a) values (525,97);
+insert into t (id,a) values (525,98);
+insert into t (id,a) values (525,99);
+insert into t (id,a) values (526,0);
+insert into t (id,a) values (526,1);
+insert into t (id,a) values (526,2);
+insert into t (id,a) values (526,3);
+insert into t (id,a) values (526,4);
+insert into t (id,a) values (526,5);
+insert into t (id,a) values (526,6);
+insert into t (id,a) values (526,7);
+insert into t (id,a) values (526,8);
+insert into t (id,a) values (526,9);
+insert into t (id,a) values (526,10);
+insert into t (id,a) values (526,11);
+insert into t (id,a) values (526,12);
+insert into t (id,a) values (526,13);
+insert into t (id,a) values (526,14);
+insert into t (id,a) values (526,15);
+insert into t (id,a) values (526,16);
+insert into t (id,a) values (526,17);
+insert into t (id,a) values (526,18);
+insert into t (id,a) values (526,19);
+insert into t (id,a) values (526,20);
+insert into t (id,a) values (526,21);
+insert into t (id,a) values (526,22);
+insert into t (id,a) values (526,23);
+insert into t (id,a) values (526,24);
+insert into t (id,a) values (526,25);
+insert into t (id,a) values (526,26);
+insert into t (id,a) values (526,27);
+insert into t (id,a) values (526,28);
+insert into t (id,a) values (526,29);
+insert into t (id,a) values (526,30);
+insert into t (id,a) values (526,31);
+insert into t (id,a) values (526,32);
+insert into t (id,a) values (526,33);
+insert into t (id,a) values (526,34);
+insert into t (id,a) values (526,35);
+insert into t (id,a) values (526,36);
+insert into t (id,a) values (526,37);
+insert into t (id,a) values (526,38);
+insert into t (id,a) values (526,39);
+insert into t (id,a) values (526,40);
+insert into t (id,a) values (526,41);
+insert into t (id,a) values (526,42);
+insert into t (id,a) values (526,43);
+insert into t (id,a) values (526,44);
+insert into t (id,a) values (526,45);
+insert into t (id,a) values (526,46);
+insert into t (id,a) values (526,47);
+insert into t (id,a) values (526,48);
+insert into t (id,a) values (526,49);
+insert into t (id,a) values (526,50);
+insert into t (id,a) values (526,51);
+insert into t (id,a) values (526,52);
+insert into t (id,a) values (526,53);
+insert into t (id,a) values (526,54);
+insert into t (id,a) values (526,55);
+insert into t (id,a) values (526,56);
+insert into t (id,a) values (526,57);
+insert into t (id,a) values (526,58);
+insert into t (id,a) values (526,59);
+insert into t (id,a) values (526,60);
+insert into t (id,a) values (526,61);
+insert into t (id,a) values (526,62);
+insert into t (id,a) values (526,63);
+insert into t (id,a) values (526,64);
+insert into t (id,a) values (526,65);
+insert into t (id,a) values (526,66);
+insert into t (id,a) values (526,67);
+insert into t (id,a) values (526,68);
+insert into t (id,a) values (526,69);
+insert into t (id,a) values (526,70);
+insert into t (id,a) values (526,71);
+insert into t (id,a) values (526,72);
+insert into t (id,a) values (526,73);
+insert into t (id,a) values (526,74);
+insert into t (id,a) values (526,75);
+insert into t (id,a) values (526,76);
+insert into t (id,a) values (526,77);
+insert into t (id,a) values (526,78);
+insert into t (id,a) values (526,79);
+insert into t (id,a) values (526,80);
+insert into t (id,a) values (526,81);
+insert into t (id,a) values (526,82);
+insert into t (id,a) values (526,83);
+insert into t (id,a) values (526,84);
+insert into t (id,a) values (526,85);
+insert into t (id,a) values (526,86);
+insert into t (id,a) values (526,87);
+insert into t (id,a) values (526,88);
+insert into t (id,a) values (526,89);
+insert into t (id,a) values (526,90);
+insert into t (id,a) values (526,91);
+insert into t (id,a) values (526,92);
+insert into t (id,a) values (526,93);
+insert into t (id,a) values (526,94);
+insert into t (id,a) values (526,95);
+insert into t (id,a) values (526,96);
+insert into t (id,a) values (526,97);
+insert into t (id,a) values (526,98);
+insert into t (id,a) values (526,99);
+insert into t (id,a) values (527,0);
+insert into t (id,a) values (527,1);
+insert into t (id,a) values (527,2);
+insert into t (id,a) values (527,3);
+insert into t (id,a) values (527,4);
+insert into t (id,a) values (527,5);
+insert into t (id,a) values (527,6);
+insert into t (id,a) values (527,7);
+insert into t (id,a) values (527,8);
+insert into t (id,a) values (527,9);
+insert into t (id,a) values (527,10);
+insert into t (id,a) values (527,11);
+insert into t (id,a) values (527,12);
+insert into t (id,a) values (527,13);
+insert into t (id,a) values (527,14);
+insert into t (id,a) values (527,15);
+insert into t (id,a) values (527,16);
+insert into t (id,a) values (527,17);
+insert into t (id,a) values (527,18);
+insert into t (id,a) values (527,19);
+insert into t (id,a) values (527,20);
+insert into t (id,a) values (527,21);
+insert into t (id,a) values (527,22);
+insert into t (id,a) values (527,23);
+insert into t (id,a) values (527,24);
+insert into t (id,a) values (527,25);
+insert into t (id,a) values (527,26);
+insert into t (id,a) values (527,27);
+insert into t (id,a) values (527,28);
+insert into t (id,a) values (527,29);
+insert into t (id,a) values (527,30);
+insert into t (id,a) values (527,31);
+insert into t (id,a) values (527,32);
+insert into t (id,a) values (527,33);
+insert into t (id,a) values (527,34);
+insert into t (id,a) values (527,35);
+insert into t (id,a) values (527,36);
+insert into t (id,a) values (527,37);
+insert into t (id,a) values (527,38);
+insert into t (id,a) values (527,39);
+insert into t (id,a) values (527,40);
+insert into t (id,a) values (527,41);
+insert into t (id,a) values (527,42);
+insert into t (id,a) values (527,43);
+insert into t (id,a) values (527,44);
+insert into t (id,a) values (527,45);
+insert into t (id,a) values (527,46);
+insert into t (id,a) values (527,47);
+insert into t (id,a) values (527,48);
+insert into t (id,a) values (527,49);
+insert into t (id,a) values (527,50);
+insert into t (id,a) values (527,51);
+insert into t (id,a) values (527,52);
+insert into t (id,a) values (527,53);
+insert into t (id,a) values (527,54);
+insert into t (id,a) values (527,55);
+insert into t (id,a) values (527,56);
+insert into t (id,a) values (527,57);
+insert into t (id,a) values (527,58);
+insert into t (id,a) values (527,59);
+insert into t (id,a) values (527,60);
+insert into t (id,a) values (527,61);
+insert into t (id,a) values (527,62);
+insert into t (id,a) values (527,63);
+insert into t (id,a) values (527,64);
+insert into t (id,a) values (527,65);
+insert into t (id,a) values (527,66);
+insert into t (id,a) values (527,67);
+insert into t (id,a) values (527,68);
+insert into t (id,a) values (527,69);
+insert into t (id,a) values (527,70);
+insert into t (id,a) values (527,71);
+insert into t (id,a) values (527,72);
+insert into t (id,a) values (527,73);
+insert into t (id,a) values (527,74);
+insert into t (id,a) values (527,75);
+insert into t (id,a) values (527,76);
+insert into t (id,a) values (527,77);
+insert into t (id,a) values (527,78);
+insert into t (id,a) values (527,79);
+insert into t (id,a) values (527,80);
+insert into t (id,a) values (527,81);
+insert into t (id,a) values (527,82);
+insert into t (id,a) values (527,83);
+insert into t (id,a) values (527,84);
+insert into t (id,a) values (527,85);
+insert into t (id,a) values (527,86);
+insert into t (id,a) values (527,87);
+insert into t (id,a) values (527,88);
+insert into t (id,a) values (527,89);
+insert into t (id,a) values (527,90);
+insert into t (id,a) values (527,91);
+insert into t (id,a) values (527,92);
+insert into t (id,a) values (527,93);
+insert into t (id,a) values (527,94);
+insert into t (id,a) values (527,95);
+insert into t (id,a) values (527,96);
+insert into t (id,a) values (527,97);
+insert into t (id,a) values (527,98);
+insert into t (id,a) values (527,99);
+insert into t (id,a) values (528,0);
+insert into t (id,a) values (528,1);
+insert into t (id,a) values (528,2);
+insert into t (id,a) values (528,3);
+insert into t (id,a) values (528,4);
+insert into t (id,a) values (528,5);
+insert into t (id,a) values (528,6);
+insert into t (id,a) values (528,7);
+insert into t (id,a) values (528,8);
+insert into t (id,a) values (528,9);
+insert into t (id,a) values (528,10);
+insert into t (id,a) values (528,11);
+insert into t (id,a) values (528,12);
+insert into t (id,a) values (528,13);
+insert into t (id,a) values (528,14);
+insert into t (id,a) values (528,15);
+insert into t (id,a) values (528,16);
+insert into t (id,a) values (528,17);
+insert into t (id,a) values (528,18);
+insert into t (id,a) values (528,19);
+insert into t (id,a) values (528,20);
+insert into t (id,a) values (528,21);
+insert into t (id,a) values (528,22);
+insert into t (id,a) values (528,23);
+insert into t (id,a) values (528,24);
+insert into t (id,a) values (528,25);
+insert into t (id,a) values (528,26);
+insert into t (id,a) values (528,27);
+insert into t (id,a) values (528,28);
+insert into t (id,a) values (528,29);
+insert into t (id,a) values (528,30);
+insert into t (id,a) values (528,31);
+insert into t (id,a) values (528,32);
+insert into t (id,a) values (528,33);
+insert into t (id,a) values (528,34);
+insert into t (id,a) values (528,35);
+insert into t (id,a) values (528,36);
+insert into t (id,a) values (528,37);
+insert into t (id,a) values (528,38);
+insert into t (id,a) values (528,39);
+insert into t (id,a) values (528,40);
+insert into t (id,a) values (528,41);
+insert into t (id,a) values (528,42);
+insert into t (id,a) values (528,43);
+insert into t (id,a) values (528,44);
+insert into t (id,a) values (528,45);
+insert into t (id,a) values (528,46);
+insert into t (id,a) values (528,47);
+insert into t (id,a) values (528,48);
+insert into t (id,a) values (528,49);
+insert into t (id,a) values (528,50);
+insert into t (id,a) values (528,51);
+insert into t (id,a) values (528,52);
+insert into t (id,a) values (528,53);
+insert into t (id,a) values (528,54);
+insert into t (id,a) values (528,55);
+insert into t (id,a) values (528,56);
+insert into t (id,a) values (528,57);
+insert into t (id,a) values (528,58);
+insert into t (id,a) values (528,59);
+insert into t (id,a) values (528,60);
+insert into t (id,a) values (528,61);
+insert into t (id,a) values (528,62);
+insert into t (id,a) values (528,63);
+insert into t (id,a) values (528,64);
+insert into t (id,a) values (528,65);
+insert into t (id,a) values (528,66);
+insert into t (id,a) values (528,67);
+insert into t (id,a) values (528,68);
+insert into t (id,a) values (528,69);
+insert into t (id,a) values (528,70);
+insert into t (id,a) values (528,71);
+insert into t (id,a) values (528,72);
+insert into t (id,a) values (528,73);
+insert into t (id,a) values (528,74);
+insert into t (id,a) values (528,75);
+insert into t (id,a) values (528,76);
+insert into t (id,a) values (528,77);
+insert into t (id,a) values (528,78);
+insert into t (id,a) values (528,79);
+insert into t (id,a) values (528,80);
+insert into t (id,a) values (528,81);
+insert into t (id,a) values (528,82);
+insert into t (id,a) values (528,83);
+insert into t (id,a) values (528,84);
+insert into t (id,a) values (528,85);
+insert into t (id,a) values (528,86);
+insert into t (id,a) values (528,87);
+insert into t (id,a) values (528,88);
+insert into t (id,a) values (528,89);
+insert into t (id,a) values (528,90);
+insert into t (id,a) values (528,91);
+insert into t (id,a) values (528,92);
+insert into t (id,a) values (528,93);
+insert into t (id,a) values (528,94);
+insert into t (id,a) values (528,95);
+insert into t (id,a) values (528,96);
+insert into t (id,a) values (528,97);
+insert into t (id,a) values (528,98);
+insert into t (id,a) values (528,99);
+insert into t (id,a) values (529,0);
+insert into t (id,a) values (529,1);
+insert into t (id,a) values (529,2);
+insert into t (id,a) values (529,3);
+insert into t (id,a) values (529,4);
+insert into t (id,a) values (529,5);
+insert into t (id,a) values (529,6);
+insert into t (id,a) values (529,7);
+insert into t (id,a) values (529,8);
+insert into t (id,a) values (529,9);
+insert into t (id,a) values (529,10);
+insert into t (id,a) values (529,11);
+insert into t (id,a) values (529,12);
+insert into t (id,a) values (529,13);
+insert into t (id,a) values (529,14);
+insert into t (id,a) values (529,15);
+insert into t (id,a) values (529,16);
+insert into t (id,a) values (529,17);
+insert into t (id,a) values (529,18);
+insert into t (id,a) values (529,19);
+insert into t (id,a) values (529,20);
+insert into t (id,a) values (529,21);
+insert into t (id,a) values (529,22);
+insert into t (id,a) values (529,23);
+insert into t (id,a) values (529,24);
+insert into t (id,a) values (529,25);
+insert into t (id,a) values (529,26);
+insert into t (id,a) values (529,27);
+insert into t (id,a) values (529,28);
+insert into t (id,a) values (529,29);
+insert into t (id,a) values (529,30);
+insert into t (id,a) values (529,31);
+insert into t (id,a) values (529,32);
+insert into t (id,a) values (529,33);
+insert into t (id,a) values (529,34);
+insert into t (id,a) values (529,35);
+insert into t (id,a) values (529,36);
+insert into t (id,a) values (529,37);
+insert into t (id,a) values (529,38);
+insert into t (id,a) values (529,39);
+insert into t (id,a) values (529,40);
+insert into t (id,a) values (529,41);
+insert into t (id,a) values (529,42);
+insert into t (id,a) values (529,43);
+insert into t (id,a) values (529,44);
+insert into t (id,a) values (529,45);
+insert into t (id,a) values (529,46);
+insert into t (id,a) values (529,47);
+insert into t (id,a) values (529,48);
+insert into t (id,a) values (529,49);
+insert into t (id,a) values (529,50);
+insert into t (id,a) values (529,51);
+insert into t (id,a) values (529,52);
+insert into t (id,a) values (529,53);
+insert into t (id,a) values (529,54);
+insert into t (id,a) values (529,55);
+insert into t (id,a) values (529,56);
+insert into t (id,a) values (529,57);
+insert into t (id,a) values (529,58);
+insert into t (id,a) values (529,59);
+insert into t (id,a) values (529,60);
+insert into t (id,a) values (529,61);
+insert into t (id,a) values (529,62);
+insert into t (id,a) values (529,63);
+insert into t (id,a) values (529,64);
+insert into t (id,a) values (529,65);
+insert into t (id,a) values (529,66);
+insert into t (id,a) values (529,67);
+insert into t (id,a) values (529,68);
+insert into t (id,a) values (529,69);
+insert into t (id,a) values (529,70);
+insert into t (id,a) values (529,71);
+insert into t (id,a) values (529,72);
+insert into t (id,a) values (529,73);
+insert into t (id,a) values (529,74);
+insert into t (id,a) values (529,75);
+insert into t (id,a) values (529,76);
+insert into t (id,a) values (529,77);
+insert into t (id,a) values (529,78);
+insert into t (id,a) values (529,79);
+insert into t (id,a) values (529,80);
+insert into t (id,a) values (529,81);
+insert into t (id,a) values (529,82);
+insert into t (id,a) values (529,83);
+insert into t (id,a) values (529,84);
+insert into t (id,a) values (529,85);
+insert into t (id,a) values (529,86);
+insert into t (id,a) values (529,87);
+insert into t (id,a) values (529,88);
+insert into t (id,a) values (529,89);
+insert into t (id,a) values (529,90);
+insert into t (id,a) values (529,91);
+insert into t (id,a) values (529,92);
+insert into t (id,a) values (529,93);
+insert into t (id,a) values (529,94);
+insert into t (id,a) values (529,95);
+insert into t (id,a) values (529,96);
+insert into t (id,a) values (529,97);
+insert into t (id,a) values (529,98);
+insert into t (id,a) values (529,99);
+insert into t (id,a) values (530,0);
+insert into t (id,a) values (530,1);
+insert into t (id,a) values (530,2);
+insert into t (id,a) values (530,3);
+insert into t (id,a) values (530,4);
+insert into t (id,a) values (530,5);
+insert into t (id,a) values (530,6);
+insert into t (id,a) values (530,7);
+insert into t (id,a) values (530,8);
+insert into t (id,a) values (530,9);
+insert into t (id,a) values (530,10);
+insert into t (id,a) values (530,11);
+insert into t (id,a) values (530,12);
+insert into t (id,a) values (530,13);
+insert into t (id,a) values (530,14);
+insert into t (id,a) values (530,15);
+insert into t (id,a) values (530,16);
+insert into t (id,a) values (530,17);
+insert into t (id,a) values (530,18);
+insert into t (id,a) values (530,19);
+insert into t (id,a) values (530,20);
+insert into t (id,a) values (530,21);
+insert into t (id,a) values (530,22);
+insert into t (id,a) values (530,23);
+insert into t (id,a) values (530,24);
+insert into t (id,a) values (530,25);
+insert into t (id,a) values (530,26);
+insert into t (id,a) values (530,27);
+insert into t (id,a) values (530,28);
+insert into t (id,a) values (530,29);
+insert into t (id,a) values (530,30);
+insert into t (id,a) values (530,31);
+insert into t (id,a) values (530,32);
+insert into t (id,a) values (530,33);
+insert into t (id,a) values (530,34);
+insert into t (id,a) values (530,35);
+insert into t (id,a) values (530,36);
+insert into t (id,a) values (530,37);
+insert into t (id,a) values (530,38);
+insert into t (id,a) values (530,39);
+insert into t (id,a) values (530,40);
+insert into t (id,a) values (530,41);
+insert into t (id,a) values (530,42);
+insert into t (id,a) values (530,43);
+insert into t (id,a) values (530,44);
+insert into t (id,a) values (530,45);
+insert into t (id,a) values (530,46);
+insert into t (id,a) values (530,47);
+insert into t (id,a) values (530,48);
+insert into t (id,a) values (530,49);
+insert into t (id,a) values (530,50);
+insert into t (id,a) values (530,51);
+insert into t (id,a) values (530,52);
+insert into t (id,a) values (530,53);
+insert into t (id,a) values (530,54);
+insert into t (id,a) values (530,55);
+insert into t (id,a) values (530,56);
+insert into t (id,a) values (530,57);
+insert into t (id,a) values (530,58);
+insert into t (id,a) values (530,59);
+insert into t (id,a) values (530,60);
+insert into t (id,a) values (530,61);
+insert into t (id,a) values (530,62);
+insert into t (id,a) values (530,63);
+insert into t (id,a) values (530,64);
+insert into t (id,a) values (530,65);
+insert into t (id,a) values (530,66);
+insert into t (id,a) values (530,67);
+insert into t (id,a) values (530,68);
+insert into t (id,a) values (530,69);
+insert into t (id,a) values (530,70);
+insert into t (id,a) values (530,71);
+insert into t (id,a) values (530,72);
+insert into t (id,a) values (530,73);
+insert into t (id,a) values (530,74);
+insert into t (id,a) values (530,75);
+insert into t (id,a) values (530,76);
+insert into t (id,a) values (530,77);
+insert into t (id,a) values (530,78);
+insert into t (id,a) values (530,79);
+insert into t (id,a) values (530,80);
+insert into t (id,a) values (530,81);
+insert into t (id,a) values (530,82);
+insert into t (id,a) values (530,83);
+insert into t (id,a) values (530,84);
+insert into t (id,a) values (530,85);
+insert into t (id,a) values (530,86);
+insert into t (id,a) values (530,87);
+insert into t (id,a) values (530,88);
+insert into t (id,a) values (530,89);
+insert into t (id,a) values (530,90);
+insert into t (id,a) values (530,91);
+insert into t (id,a) values (530,92);
+insert into t (id,a) values (530,93);
+insert into t (id,a) values (530,94);
+insert into t (id,a) values (530,95);
+insert into t (id,a) values (530,96);
+insert into t (id,a) values (530,97);
+insert into t (id,a) values (530,98);
+insert into t (id,a) values (530,99);
+insert into t (id,a) values (531,0);
+insert into t (id,a) values (531,1);
+insert into t (id,a) values (531,2);
+insert into t (id,a) values (531,3);
+insert into t (id,a) values (531,4);
+insert into t (id,a) values (531,5);
+insert into t (id,a) values (531,6);
+insert into t (id,a) values (531,7);
+insert into t (id,a) values (531,8);
+insert into t (id,a) values (531,9);
+insert into t (id,a) values (531,10);
+insert into t (id,a) values (531,11);
+insert into t (id,a) values (531,12);
+insert into t (id,a) values (531,13);
+insert into t (id,a) values (531,14);
+insert into t (id,a) values (531,15);
+insert into t (id,a) values (531,16);
+insert into t (id,a) values (531,17);
+insert into t (id,a) values (531,18);
+insert into t (id,a) values (531,19);
+insert into t (id,a) values (531,20);
+insert into t (id,a) values (531,21);
+insert into t (id,a) values (531,22);
+insert into t (id,a) values (531,23);
+insert into t (id,a) values (531,24);
+insert into t (id,a) values (531,25);
+insert into t (id,a) values (531,26);
+insert into t (id,a) values (531,27);
+insert into t (id,a) values (531,28);
+insert into t (id,a) values (531,29);
+insert into t (id,a) values (531,30);
+insert into t (id,a) values (531,31);
+insert into t (id,a) values (531,32);
+insert into t (id,a) values (531,33);
+insert into t (id,a) values (531,34);
+insert into t (id,a) values (531,35);
+insert into t (id,a) values (531,36);
+insert into t (id,a) values (531,37);
+insert into t (id,a) values (531,38);
+insert into t (id,a) values (531,39);
+insert into t (id,a) values (531,40);
+insert into t (id,a) values (531,41);
+insert into t (id,a) values (531,42);
+insert into t (id,a) values (531,43);
+insert into t (id,a) values (531,44);
+insert into t (id,a) values (531,45);
+insert into t (id,a) values (531,46);
+insert into t (id,a) values (531,47);
+insert into t (id,a) values (531,48);
+insert into t (id,a) values (531,49);
+insert into t (id,a) values (531,50);
+insert into t (id,a) values (531,51);
+insert into t (id,a) values (531,52);
+insert into t (id,a) values (531,53);
+insert into t (id,a) values (531,54);
+insert into t (id,a) values (531,55);
+insert into t (id,a) values (531,56);
+insert into t (id,a) values (531,57);
+insert into t (id,a) values (531,58);
+insert into t (id,a) values (531,59);
+insert into t (id,a) values (531,60);
+insert into t (id,a) values (531,61);
+insert into t (id,a) values (531,62);
+insert into t (id,a) values (531,63);
+insert into t (id,a) values (531,64);
+insert into t (id,a) values (531,65);
+insert into t (id,a) values (531,66);
+insert into t (id,a) values (531,67);
+insert into t (id,a) values (531,68);
+insert into t (id,a) values (531,69);
+insert into t (id,a) values (531,70);
+insert into t (id,a) values (531,71);
+insert into t (id,a) values (531,72);
+insert into t (id,a) values (531,73);
+insert into t (id,a) values (531,74);
+insert into t (id,a) values (531,75);
+insert into t (id,a) values (531,76);
+insert into t (id,a) values (531,77);
+insert into t (id,a) values (531,78);
+insert into t (id,a) values (531,79);
+insert into t (id,a) values (531,80);
+insert into t (id,a) values (531,81);
+insert into t (id,a) values (531,82);
+insert into t (id,a) values (531,83);
+insert into t (id,a) values (531,84);
+insert into t (id,a) values (531,85);
+insert into t (id,a) values (531,86);
+insert into t (id,a) values (531,87);
+insert into t (id,a) values (531,88);
+insert into t (id,a) values (531,89);
+insert into t (id,a) values (531,90);
+insert into t (id,a) values (531,91);
+insert into t (id,a) values (531,92);
+insert into t (id,a) values (531,93);
+insert into t (id,a) values (531,94);
+insert into t (id,a) values (531,95);
+insert into t (id,a) values (531,96);
+insert into t (id,a) values (531,97);
+insert into t (id,a) values (531,98);
+insert into t (id,a) values (531,99);
+insert into t (id,a) values (532,0);
+insert into t (id,a) values (532,1);
+insert into t (id,a) values (532,2);
+insert into t (id,a) values (532,3);
+insert into t (id,a) values (532,4);
+insert into t (id,a) values (532,5);
+insert into t (id,a) values (532,6);
+insert into t (id,a) values (532,7);
+insert into t (id,a) values (532,8);
+insert into t (id,a) values (532,9);
+insert into t (id,a) values (532,10);
+insert into t (id,a) values (532,11);
+insert into t (id,a) values (532,12);
+insert into t (id,a) values (532,13);
+insert into t (id,a) values (532,14);
+insert into t (id,a) values (532,15);
+insert into t (id,a) values (532,16);
+insert into t (id,a) values (532,17);
+insert into t (id,a) values (532,18);
+insert into t (id,a) values (532,19);
+insert into t (id,a) values (532,20);
+insert into t (id,a) values (532,21);
+insert into t (id,a) values (532,22);
+insert into t (id,a) values (532,23);
+insert into t (id,a) values (532,24);
+insert into t (id,a) values (532,25);
+insert into t (id,a) values (532,26);
+insert into t (id,a) values (532,27);
+insert into t (id,a) values (532,28);
+insert into t (id,a) values (532,29);
+insert into t (id,a) values (532,30);
+insert into t (id,a) values (532,31);
+insert into t (id,a) values (532,32);
+insert into t (id,a) values (532,33);
+insert into t (id,a) values (532,34);
+insert into t (id,a) values (532,35);
+insert into t (id,a) values (532,36);
+insert into t (id,a) values (532,37);
+insert into t (id,a) values (532,38);
+insert into t (id,a) values (532,39);
+insert into t (id,a) values (532,40);
+insert into t (id,a) values (532,41);
+insert into t (id,a) values (532,42);
+insert into t (id,a) values (532,43);
+insert into t (id,a) values (532,44);
+insert into t (id,a) values (532,45);
+insert into t (id,a) values (532,46);
+insert into t (id,a) values (532,47);
+insert into t (id,a) values (532,48);
+insert into t (id,a) values (532,49);
+insert into t (id,a) values (532,50);
+insert into t (id,a) values (532,51);
+insert into t (id,a) values (532,52);
+insert into t (id,a) values (532,53);
+insert into t (id,a) values (532,54);
+insert into t (id,a) values (532,55);
+insert into t (id,a) values (532,56);
+insert into t (id,a) values (532,57);
+insert into t (id,a) values (532,58);
+insert into t (id,a) values (532,59);
+insert into t (id,a) values (532,60);
+insert into t (id,a) values (532,61);
+insert into t (id,a) values (532,62);
+insert into t (id,a) values (532,63);
+insert into t (id,a) values (532,64);
+insert into t (id,a) values (532,65);
+insert into t (id,a) values (532,66);
+insert into t (id,a) values (532,67);
+insert into t (id,a) values (532,68);
+insert into t (id,a) values (532,69);
+insert into t (id,a) values (532,70);
+insert into t (id,a) values (532,71);
+insert into t (id,a) values (532,72);
+insert into t (id,a) values (532,73);
+insert into t (id,a) values (532,74);
+insert into t (id,a) values (532,75);
+insert into t (id,a) values (532,76);
+insert into t (id,a) values (532,77);
+insert into t (id,a) values (532,78);
+insert into t (id,a) values (532,79);
+insert into t (id,a) values (532,80);
+insert into t (id,a) values (532,81);
+insert into t (id,a) values (532,82);
+insert into t (id,a) values (532,83);
+insert into t (id,a) values (532,84);
+insert into t (id,a) values (532,85);
+insert into t (id,a) values (532,86);
+insert into t (id,a) values (532,87);
+insert into t (id,a) values (532,88);
+insert into t (id,a) values (532,89);
+insert into t (id,a) values (532,90);
+insert into t (id,a) values (532,91);
+insert into t (id,a) values (532,92);
+insert into t (id,a) values (532,93);
+insert into t (id,a) values (532,94);
+insert into t (id,a) values (532,95);
+insert into t (id,a) values (532,96);
+insert into t (id,a) values (532,97);
+insert into t (id,a) values (532,98);
+insert into t (id,a) values (532,99);
+insert into t (id,a) values (533,0);
+insert into t (id,a) values (533,1);
+insert into t (id,a) values (533,2);
+insert into t (id,a) values (533,3);
+insert into t (id,a) values (533,4);
+insert into t (id,a) values (533,5);
+insert into t (id,a) values (533,6);
+insert into t (id,a) values (533,7);
+insert into t (id,a) values (533,8);
+insert into t (id,a) values (533,9);
+insert into t (id,a) values (533,10);
+insert into t (id,a) values (533,11);
+insert into t (id,a) values (533,12);
+insert into t (id,a) values (533,13);
+insert into t (id,a) values (533,14);
+insert into t (id,a) values (533,15);
+insert into t (id,a) values (533,16);
+insert into t (id,a) values (533,17);
+insert into t (id,a) values (533,18);
+insert into t (id,a) values (533,19);
+insert into t (id,a) values (533,20);
+insert into t (id,a) values (533,21);
+insert into t (id,a) values (533,22);
+insert into t (id,a) values (533,23);
+insert into t (id,a) values (533,24);
+insert into t (id,a) values (533,25);
+insert into t (id,a) values (533,26);
+insert into t (id,a) values (533,27);
+insert into t (id,a) values (533,28);
+insert into t (id,a) values (533,29);
+insert into t (id,a) values (533,30);
+insert into t (id,a) values (533,31);
+insert into t (id,a) values (533,32);
+insert into t (id,a) values (533,33);
+insert into t (id,a) values (533,34);
+insert into t (id,a) values (533,35);
+insert into t (id,a) values (533,36);
+insert into t (id,a) values (533,37);
+insert into t (id,a) values (533,38);
+insert into t (id,a) values (533,39);
+insert into t (id,a) values (533,40);
+insert into t (id,a) values (533,41);
+insert into t (id,a) values (533,42);
+insert into t (id,a) values (533,43);
+insert into t (id,a) values (533,44);
+insert into t (id,a) values (533,45);
+insert into t (id,a) values (533,46);
+insert into t (id,a) values (533,47);
+insert into t (id,a) values (533,48);
+insert into t (id,a) values (533,49);
+insert into t (id,a) values (533,50);
+insert into t (id,a) values (533,51);
+insert into t (id,a) values (533,52);
+insert into t (id,a) values (533,53);
+insert into t (id,a) values (533,54);
+insert into t (id,a) values (533,55);
+insert into t (id,a) values (533,56);
+insert into t (id,a) values (533,57);
+insert into t (id,a) values (533,58);
+insert into t (id,a) values (533,59);
+insert into t (id,a) values (533,60);
+insert into t (id,a) values (533,61);
+insert into t (id,a) values (533,62);
+insert into t (id,a) values (533,63);
+insert into t (id,a) values (533,64);
+insert into t (id,a) values (533,65);
+insert into t (id,a) values (533,66);
+insert into t (id,a) values (533,67);
+insert into t (id,a) values (533,68);
+insert into t (id,a) values (533,69);
+insert into t (id,a) values (533,70);
+insert into t (id,a) values (533,71);
+insert into t (id,a) values (533,72);
+insert into t (id,a) values (533,73);
+insert into t (id,a) values (533,74);
+insert into t (id,a) values (533,75);
+insert into t (id,a) values (533,76);
+insert into t (id,a) values (533,77);
+insert into t (id,a) values (533,78);
+insert into t (id,a) values (533,79);
+insert into t (id,a) values (533,80);
+insert into t (id,a) values (533,81);
+insert into t (id,a) values (533,82);
+insert into t (id,a) values (533,83);
+insert into t (id,a) values (533,84);
+insert into t (id,a) values (533,85);
+insert into t (id,a) values (533,86);
+insert into t (id,a) values (533,87);
+insert into t (id,a) values (533,88);
+insert into t (id,a) values (533,89);
+insert into t (id,a) values (533,90);
+insert into t (id,a) values (533,91);
+insert into t (id,a) values (533,92);
+insert into t (id,a) values (533,93);
+insert into t (id,a) values (533,94);
+insert into t (id,a) values (533,95);
+insert into t (id,a) values (533,96);
+insert into t (id,a) values (533,97);
+insert into t (id,a) values (533,98);
+insert into t (id,a) values (533,99);
+insert into t (id,a) values (534,0);
+insert into t (id,a) values (534,1);
+insert into t (id,a) values (534,2);
+insert into t (id,a) values (534,3);
+insert into t (id,a) values (534,4);
+insert into t (id,a) values (534,5);
+insert into t (id,a) values (534,6);
+insert into t (id,a) values (534,7);
+insert into t (id,a) values (534,8);
+insert into t (id,a) values (534,9);
+insert into t (id,a) values (534,10);
+insert into t (id,a) values (534,11);
+insert into t (id,a) values (534,12);
+insert into t (id,a) values (534,13);
+insert into t (id,a) values (534,14);
+insert into t (id,a) values (534,15);
+insert into t (id,a) values (534,16);
+insert into t (id,a) values (534,17);
+insert into t (id,a) values (534,18);
+insert into t (id,a) values (534,19);
+insert into t (id,a) values (534,20);
+insert into t (id,a) values (534,21);
+insert into t (id,a) values (534,22);
+insert into t (id,a) values (534,23);
+insert into t (id,a) values (534,24);
+insert into t (id,a) values (534,25);
+insert into t (id,a) values (534,26);
+insert into t (id,a) values (534,27);
+insert into t (id,a) values (534,28);
+insert into t (id,a) values (534,29);
+insert into t (id,a) values (534,30);
+insert into t (id,a) values (534,31);
+insert into t (id,a) values (534,32);
+insert into t (id,a) values (534,33);
+insert into t (id,a) values (534,34);
+insert into t (id,a) values (534,35);
+insert into t (id,a) values (534,36);
+insert into t (id,a) values (534,37);
+insert into t (id,a) values (534,38);
+insert into t (id,a) values (534,39);
+insert into t (id,a) values (534,40);
+insert into t (id,a) values (534,41);
+insert into t (id,a) values (534,42);
+insert into t (id,a) values (534,43);
+insert into t (id,a) values (534,44);
+insert into t (id,a) values (534,45);
+insert into t (id,a) values (534,46);
+insert into t (id,a) values (534,47);
+insert into t (id,a) values (534,48);
+insert into t (id,a) values (534,49);
+insert into t (id,a) values (534,50);
+insert into t (id,a) values (534,51);
+insert into t (id,a) values (534,52);
+insert into t (id,a) values (534,53);
+insert into t (id,a) values (534,54);
+insert into t (id,a) values (534,55);
+insert into t (id,a) values (534,56);
+insert into t (id,a) values (534,57);
+insert into t (id,a) values (534,58);
+insert into t (id,a) values (534,59);
+insert into t (id,a) values (534,60);
+insert into t (id,a) values (534,61);
+insert into t (id,a) values (534,62);
+insert into t (id,a) values (534,63);
+insert into t (id,a) values (534,64);
+insert into t (id,a) values (534,65);
+insert into t (id,a) values (534,66);
+insert into t (id,a) values (534,67);
+insert into t (id,a) values (534,68);
+insert into t (id,a) values (534,69);
+insert into t (id,a) values (534,70);
+insert into t (id,a) values (534,71);
+insert into t (id,a) values (534,72);
+insert into t (id,a) values (534,73);
+insert into t (id,a) values (534,74);
+insert into t (id,a) values (534,75);
+insert into t (id,a) values (534,76);
+insert into t (id,a) values (534,77);
+insert into t (id,a) values (534,78);
+insert into t (id,a) values (534,79);
+insert into t (id,a) values (534,80);
+insert into t (id,a) values (534,81);
+insert into t (id,a) values (534,82);
+insert into t (id,a) values (534,83);
+insert into t (id,a) values (534,84);
+insert into t (id,a) values (534,85);
+insert into t (id,a) values (534,86);
+insert into t (id,a) values (534,87);
+insert into t (id,a) values (534,88);
+insert into t (id,a) values (534,89);
+insert into t (id,a) values (534,90);
+insert into t (id,a) values (534,91);
+insert into t (id,a) values (534,92);
+insert into t (id,a) values (534,93);
+insert into t (id,a) values (534,94);
+insert into t (id,a) values (534,95);
+insert into t (id,a) values (534,96);
+insert into t (id,a) values (534,97);
+insert into t (id,a) values (534,98);
+insert into t (id,a) values (534,99);
+insert into t (id,a) values (535,0);
+insert into t (id,a) values (535,1);
+insert into t (id,a) values (535,2);
+insert into t (id,a) values (535,3);
+insert into t (id,a) values (535,4);
+insert into t (id,a) values (535,5);
+insert into t (id,a) values (535,6);
+insert into t (id,a) values (535,7);
+insert into t (id,a) values (535,8);
+insert into t (id,a) values (535,9);
+insert into t (id,a) values (535,10);
+insert into t (id,a) values (535,11);
+insert into t (id,a) values (535,12);
+insert into t (id,a) values (535,13);
+insert into t (id,a) values (535,14);
+insert into t (id,a) values (535,15);
+insert into t (id,a) values (535,16);
+insert into t (id,a) values (535,17);
+insert into t (id,a) values (535,18);
+insert into t (id,a) values (535,19);
+insert into t (id,a) values (535,20);
+insert into t (id,a) values (535,21);
+insert into t (id,a) values (535,22);
+insert into t (id,a) values (535,23);
+insert into t (id,a) values (535,24);
+insert into t (id,a) values (535,25);
+insert into t (id,a) values (535,26);
+insert into t (id,a) values (535,27);
+insert into t (id,a) values (535,28);
+insert into t (id,a) values (535,29);
+insert into t (id,a) values (535,30);
+insert into t (id,a) values (535,31);
+insert into t (id,a) values (535,32);
+insert into t (id,a) values (535,33);
+insert into t (id,a) values (535,34);
+insert into t (id,a) values (535,35);
+insert into t (id,a) values (535,36);
+insert into t (id,a) values (535,37);
+insert into t (id,a) values (535,38);
+insert into t (id,a) values (535,39);
+insert into t (id,a) values (535,40);
+insert into t (id,a) values (535,41);
+insert into t (id,a) values (535,42);
+insert into t (id,a) values (535,43);
+insert into t (id,a) values (535,44);
+insert into t (id,a) values (535,45);
+insert into t (id,a) values (535,46);
+insert into t (id,a) values (535,47);
+insert into t (id,a) values (535,48);
+insert into t (id,a) values (535,49);
+insert into t (id,a) values (535,50);
+insert into t (id,a) values (535,51);
+insert into t (id,a) values (535,52);
+insert into t (id,a) values (535,53);
+insert into t (id,a) values (535,54);
+insert into t (id,a) values (535,55);
+insert into t (id,a) values (535,56);
+insert into t (id,a) values (535,57);
+insert into t (id,a) values (535,58);
+insert into t (id,a) values (535,59);
+insert into t (id,a) values (535,60);
+insert into t (id,a) values (535,61);
+insert into t (id,a) values (535,62);
+insert into t (id,a) values (535,63);
+insert into t (id,a) values (535,64);
+insert into t (id,a) values (535,65);
+insert into t (id,a) values (535,66);
+insert into t (id,a) values (535,67);
+insert into t (id,a) values (535,68);
+insert into t (id,a) values (535,69);
+insert into t (id,a) values (535,70);
+insert into t (id,a) values (535,71);
+insert into t (id,a) values (535,72);
+insert into t (id,a) values (535,73);
+insert into t (id,a) values (535,74);
+insert into t (id,a) values (535,75);
+insert into t (id,a) values (535,76);
+insert into t (id,a) values (535,77);
+insert into t (id,a) values (535,78);
+insert into t (id,a) values (535,79);
+insert into t (id,a) values (535,80);
+insert into t (id,a) values (535,81);
+insert into t (id,a) values (535,82);
+insert into t (id,a) values (535,83);
+insert into t (id,a) values (535,84);
+insert into t (id,a) values (535,85);
+insert into t (id,a) values (535,86);
+insert into t (id,a) values (535,87);
+insert into t (id,a) values (535,88);
+insert into t (id,a) values (535,89);
+insert into t (id,a) values (535,90);
+insert into t (id,a) values (535,91);
+insert into t (id,a) values (535,92);
+insert into t (id,a) values (535,93);
+insert into t (id,a) values (535,94);
+insert into t (id,a) values (535,95);
+insert into t (id,a) values (535,96);
+insert into t (id,a) values (535,97);
+insert into t (id,a) values (535,98);
+insert into t (id,a) values (535,99);
+insert into t (id,a) values (536,0);
+insert into t (id,a) values (536,1);
+insert into t (id,a) values (536,2);
+insert into t (id,a) values (536,3);
+insert into t (id,a) values (536,4);
+insert into t (id,a) values (536,5);
+insert into t (id,a) values (536,6);
+insert into t (id,a) values (536,7);
+insert into t (id,a) values (536,8);
+insert into t (id,a) values (536,9);
+insert into t (id,a) values (536,10);
+insert into t (id,a) values (536,11);
+insert into t (id,a) values (536,12);
+insert into t (id,a) values (536,13);
+insert into t (id,a) values (536,14);
+insert into t (id,a) values (536,15);
+insert into t (id,a) values (536,16);
+insert into t (id,a) values (536,17);
+insert into t (id,a) values (536,18);
+insert into t (id,a) values (536,19);
+insert into t (id,a) values (536,20);
+insert into t (id,a) values (536,21);
+insert into t (id,a) values (536,22);
+insert into t (id,a) values (536,23);
+insert into t (id,a) values (536,24);
+insert into t (id,a) values (536,25);
+insert into t (id,a) values (536,26);
+insert into t (id,a) values (536,27);
+insert into t (id,a) values (536,28);
+insert into t (id,a) values (536,29);
+insert into t (id,a) values (536,30);
+insert into t (id,a) values (536,31);
+insert into t (id,a) values (536,32);
+insert into t (id,a) values (536,33);
+insert into t (id,a) values (536,34);
+insert into t (id,a) values (536,35);
+insert into t (id,a) values (536,36);
+insert into t (id,a) values (536,37);
+insert into t (id,a) values (536,38);
+insert into t (id,a) values (536,39);
+insert into t (id,a) values (536,40);
+insert into t (id,a) values (536,41);
+insert into t (id,a) values (536,42);
+insert into t (id,a) values (536,43);
+insert into t (id,a) values (536,44);
+insert into t (id,a) values (536,45);
+insert into t (id,a) values (536,46);
+insert into t (id,a) values (536,47);
+insert into t (id,a) values (536,48);
+insert into t (id,a) values (536,49);
+insert into t (id,a) values (536,50);
+insert into t (id,a) values (536,51);
+insert into t (id,a) values (536,52);
+insert into t (id,a) values (536,53);
+insert into t (id,a) values (536,54);
+insert into t (id,a) values (536,55);
+insert into t (id,a) values (536,56);
+insert into t (id,a) values (536,57);
+insert into t (id,a) values (536,58);
+insert into t (id,a) values (536,59);
+insert into t (id,a) values (536,60);
+insert into t (id,a) values (536,61);
+insert into t (id,a) values (536,62);
+insert into t (id,a) values (536,63);
+insert into t (id,a) values (536,64);
+insert into t (id,a) values (536,65);
+insert into t (id,a) values (536,66);
+insert into t (id,a) values (536,67);
+insert into t (id,a) values (536,68);
+insert into t (id,a) values (536,69);
+insert into t (id,a) values (536,70);
+insert into t (id,a) values (536,71);
+insert into t (id,a) values (536,72);
+insert into t (id,a) values (536,73);
+insert into t (id,a) values (536,74);
+insert into t (id,a) values (536,75);
+insert into t (id,a) values (536,76);
+insert into t (id,a) values (536,77);
+insert into t (id,a) values (536,78);
+insert into t (id,a) values (536,79);
+insert into t (id,a) values (536,80);
+insert into t (id,a) values (536,81);
+insert into t (id,a) values (536,82);
+insert into t (id,a) values (536,83);
+insert into t (id,a) values (536,84);
+insert into t (id,a) values (536,85);
+insert into t (id,a) values (536,86);
+insert into t (id,a) values (536,87);
+insert into t (id,a) values (536,88);
+insert into t (id,a) values (536,89);
+insert into t (id,a) values (536,90);
+insert into t (id,a) values (536,91);
+insert into t (id,a) values (536,92);
+insert into t (id,a) values (536,93);
+insert into t (id,a) values (536,94);
+insert into t (id,a) values (536,95);
+insert into t (id,a) values (536,96);
+insert into t (id,a) values (536,97);
+insert into t (id,a) values (536,98);
+insert into t (id,a) values (536,99);
+insert into t (id,a) values (537,0);
+insert into t (id,a) values (537,1);
+insert into t (id,a) values (537,2);
+insert into t (id,a) values (537,3);
+insert into t (id,a) values (537,4);
+insert into t (id,a) values (537,5);
+insert into t (id,a) values (537,6);
+insert into t (id,a) values (537,7);
+insert into t (id,a) values (537,8);
+insert into t (id,a) values (537,9);
+insert into t (id,a) values (537,10);
+insert into t (id,a) values (537,11);
+insert into t (id,a) values (537,12);
+insert into t (id,a) values (537,13);
+insert into t (id,a) values (537,14);
+insert into t (id,a) values (537,15);
+insert into t (id,a) values (537,16);
+insert into t (id,a) values (537,17);
+insert into t (id,a) values (537,18);
+insert into t (id,a) values (537,19);
+insert into t (id,a) values (537,20);
+insert into t (id,a) values (537,21);
+insert into t (id,a) values (537,22);
+insert into t (id,a) values (537,23);
+insert into t (id,a) values (537,24);
+insert into t (id,a) values (537,25);
+insert into t (id,a) values (537,26);
+insert into t (id,a) values (537,27);
+insert into t (id,a) values (537,28);
+insert into t (id,a) values (537,29);
+insert into t (id,a) values (537,30);
+insert into t (id,a) values (537,31);
+insert into t (id,a) values (537,32);
+insert into t (id,a) values (537,33);
+insert into t (id,a) values (537,34);
+insert into t (id,a) values (537,35);
+insert into t (id,a) values (537,36);
+insert into t (id,a) values (537,37);
+insert into t (id,a) values (537,38);
+insert into t (id,a) values (537,39);
+insert into t (id,a) values (537,40);
+insert into t (id,a) values (537,41);
+insert into t (id,a) values (537,42);
+insert into t (id,a) values (537,43);
+insert into t (id,a) values (537,44);
+insert into t (id,a) values (537,45);
+insert into t (id,a) values (537,46);
+insert into t (id,a) values (537,47);
+insert into t (id,a) values (537,48);
+insert into t (id,a) values (537,49);
+insert into t (id,a) values (537,50);
+insert into t (id,a) values (537,51);
+insert into t (id,a) values (537,52);
+insert into t (id,a) values (537,53);
+insert into t (id,a) values (537,54);
+insert into t (id,a) values (537,55);
+insert into t (id,a) values (537,56);
+insert into t (id,a) values (537,57);
+insert into t (id,a) values (537,58);
+insert into t (id,a) values (537,59);
+insert into t (id,a) values (537,60);
+insert into t (id,a) values (537,61);
+insert into t (id,a) values (537,62);
+insert into t (id,a) values (537,63);
+insert into t (id,a) values (537,64);
+insert into t (id,a) values (537,65);
+insert into t (id,a) values (537,66);
+insert into t (id,a) values (537,67);
+insert into t (id,a) values (537,68);
+insert into t (id,a) values (537,69);
+insert into t (id,a) values (537,70);
+insert into t (id,a) values (537,71);
+insert into t (id,a) values (537,72);
+insert into t (id,a) values (537,73);
+insert into t (id,a) values (537,74);
+insert into t (id,a) values (537,75);
+insert into t (id,a) values (537,76);
+insert into t (id,a) values (537,77);
+insert into t (id,a) values (537,78);
+insert into t (id,a) values (537,79);
+insert into t (id,a) values (537,80);
+insert into t (id,a) values (537,81);
+insert into t (id,a) values (537,82);
+insert into t (id,a) values (537,83);
+insert into t (id,a) values (537,84);
+insert into t (id,a) values (537,85);
+insert into t (id,a) values (537,86);
+insert into t (id,a) values (537,87);
+insert into t (id,a) values (537,88);
+insert into t (id,a) values (537,89);
+insert into t (id,a) values (537,90);
+insert into t (id,a) values (537,91);
+insert into t (id,a) values (537,92);
+insert into t (id,a) values (537,93);
+insert into t (id,a) values (537,94);
+insert into t (id,a) values (537,95);
+insert into t (id,a) values (537,96);
+insert into t (id,a) values (537,97);
+insert into t (id,a) values (537,98);
+insert into t (id,a) values (537,99);
+insert into t (id,a) values (538,0);
+insert into t (id,a) values (538,1);
+insert into t (id,a) values (538,2);
+insert into t (id,a) values (538,3);
+insert into t (id,a) values (538,4);
+insert into t (id,a) values (538,5);
+insert into t (id,a) values (538,6);
+insert into t (id,a) values (538,7);
+insert into t (id,a) values (538,8);
+insert into t (id,a) values (538,9);
+insert into t (id,a) values (538,10);
+insert into t (id,a) values (538,11);
+insert into t (id,a) values (538,12);
+insert into t (id,a) values (538,13);
+insert into t (id,a) values (538,14);
+insert into t (id,a) values (538,15);
+insert into t (id,a) values (538,16);
+insert into t (id,a) values (538,17);
+insert into t (id,a) values (538,18);
+insert into t (id,a) values (538,19);
+insert into t (id,a) values (538,20);
+insert into t (id,a) values (538,21);
+insert into t (id,a) values (538,22);
+insert into t (id,a) values (538,23);
+insert into t (id,a) values (538,24);
+insert into t (id,a) values (538,25);
+insert into t (id,a) values (538,26);
+insert into t (id,a) values (538,27);
+insert into t (id,a) values (538,28);
+insert into t (id,a) values (538,29);
+insert into t (id,a) values (538,30);
+insert into t (id,a) values (538,31);
+insert into t (id,a) values (538,32);
+insert into t (id,a) values (538,33);
+insert into t (id,a) values (538,34);
+insert into t (id,a) values (538,35);
+insert into t (id,a) values (538,36);
+insert into t (id,a) values (538,37);
+insert into t (id,a) values (538,38);
+insert into t (id,a) values (538,39);
+insert into t (id,a) values (538,40);
+insert into t (id,a) values (538,41);
+insert into t (id,a) values (538,42);
+insert into t (id,a) values (538,43);
+insert into t (id,a) values (538,44);
+insert into t (id,a) values (538,45);
+insert into t (id,a) values (538,46);
+insert into t (id,a) values (538,47);
+insert into t (id,a) values (538,48);
+insert into t (id,a) values (538,49);
+insert into t (id,a) values (538,50);
+insert into t (id,a) values (538,51);
+insert into t (id,a) values (538,52);
+insert into t (id,a) values (538,53);
+insert into t (id,a) values (538,54);
+insert into t (id,a) values (538,55);
+insert into t (id,a) values (538,56);
+insert into t (id,a) values (538,57);
+insert into t (id,a) values (538,58);
+insert into t (id,a) values (538,59);
+insert into t (id,a) values (538,60);
+insert into t (id,a) values (538,61);
+insert into t (id,a) values (538,62);
+insert into t (id,a) values (538,63);
+insert into t (id,a) values (538,64);
+insert into t (id,a) values (538,65);
+insert into t (id,a) values (538,66);
+insert into t (id,a) values (538,67);
+insert into t (id,a) values (538,68);
+insert into t (id,a) values (538,69);
+insert into t (id,a) values (538,70);
+insert into t (id,a) values (538,71);
+insert into t (id,a) values (538,72);
+insert into t (id,a) values (538,73);
+insert into t (id,a) values (538,74);
+insert into t (id,a) values (538,75);
+insert into t (id,a) values (538,76);
+insert into t (id,a) values (538,77);
+insert into t (id,a) values (538,78);
+insert into t (id,a) values (538,79);
+insert into t (id,a) values (538,80);
+insert into t (id,a) values (538,81);
+insert into t (id,a) values (538,82);
+insert into t (id,a) values (538,83);
+insert into t (id,a) values (538,84);
+insert into t (id,a) values (538,85);
+insert into t (id,a) values (538,86);
+insert into t (id,a) values (538,87);
+insert into t (id,a) values (538,88);
+insert into t (id,a) values (538,89);
+insert into t (id,a) values (538,90);
+insert into t (id,a) values (538,91);
+insert into t (id,a) values (538,92);
+insert into t (id,a) values (538,93);
+insert into t (id,a) values (538,94);
+insert into t (id,a) values (538,95);
+insert into t (id,a) values (538,96);
+insert into t (id,a) values (538,97);
+insert into t (id,a) values (538,98);
+insert into t (id,a) values (538,99);
+insert into t (id,a) values (539,0);
+insert into t (id,a) values (539,1);
+insert into t (id,a) values (539,2);
+insert into t (id,a) values (539,3);
+insert into t (id,a) values (539,4);
+insert into t (id,a) values (539,5);
+insert into t (id,a) values (539,6);
+insert into t (id,a) values (539,7);
+insert into t (id,a) values (539,8);
+insert into t (id,a) values (539,9);
+insert into t (id,a) values (539,10);
+insert into t (id,a) values (539,11);
+insert into t (id,a) values (539,12);
+insert into t (id,a) values (539,13);
+insert into t (id,a) values (539,14);
+insert into t (id,a) values (539,15);
+insert into t (id,a) values (539,16);
+insert into t (id,a) values (539,17);
+insert into t (id,a) values (539,18);
+insert into t (id,a) values (539,19);
+insert into t (id,a) values (539,20);
+insert into t (id,a) values (539,21);
+insert into t (id,a) values (539,22);
+insert into t (id,a) values (539,23);
+insert into t (id,a) values (539,24);
+insert into t (id,a) values (539,25);
+insert into t (id,a) values (539,26);
+insert into t (id,a) values (539,27);
+insert into t (id,a) values (539,28);
+insert into t (id,a) values (539,29);
+insert into t (id,a) values (539,30);
+insert into t (id,a) values (539,31);
+insert into t (id,a) values (539,32);
+insert into t (id,a) values (539,33);
+insert into t (id,a) values (539,34);
+insert into t (id,a) values (539,35);
+insert into t (id,a) values (539,36);
+insert into t (id,a) values (539,37);
+insert into t (id,a) values (539,38);
+insert into t (id,a) values (539,39);
+insert into t (id,a) values (539,40);
+insert into t (id,a) values (539,41);
+insert into t (id,a) values (539,42);
+insert into t (id,a) values (539,43);
+insert into t (id,a) values (539,44);
+insert into t (id,a) values (539,45);
+insert into t (id,a) values (539,46);
+insert into t (id,a) values (539,47);
+insert into t (id,a) values (539,48);
+insert into t (id,a) values (539,49);
+insert into t (id,a) values (539,50);
+insert into t (id,a) values (539,51);
+insert into t (id,a) values (539,52);
+insert into t (id,a) values (539,53);
+insert into t (id,a) values (539,54);
+insert into t (id,a) values (539,55);
+insert into t (id,a) values (539,56);
+insert into t (id,a) values (539,57);
+insert into t (id,a) values (539,58);
+insert into t (id,a) values (539,59);
+insert into t (id,a) values (539,60);
+insert into t (id,a) values (539,61);
+insert into t (id,a) values (539,62);
+insert into t (id,a) values (539,63);
+insert into t (id,a) values (539,64);
+insert into t (id,a) values (539,65);
+insert into t (id,a) values (539,66);
+insert into t (id,a) values (539,67);
+insert into t (id,a) values (539,68);
+insert into t (id,a) values (539,69);
+insert into t (id,a) values (539,70);
+insert into t (id,a) values (539,71);
+insert into t (id,a) values (539,72);
+insert into t (id,a) values (539,73);
+insert into t (id,a) values (539,74);
+insert into t (id,a) values (539,75);
+insert into t (id,a) values (539,76);
+insert into t (id,a) values (539,77);
+insert into t (id,a) values (539,78);
+insert into t (id,a) values (539,79);
+insert into t (id,a) values (539,80);
+insert into t (id,a) values (539,81);
+insert into t (id,a) values (539,82);
+insert into t (id,a) values (539,83);
+insert into t (id,a) values (539,84);
+insert into t (id,a) values (539,85);
+insert into t (id,a) values (539,86);
+insert into t (id,a) values (539,87);
+insert into t (id,a) values (539,88);
+insert into t (id,a) values (539,89);
+insert into t (id,a) values (539,90);
+insert into t (id,a) values (539,91);
+insert into t (id,a) values (539,92);
+insert into t (id,a) values (539,93);
+insert into t (id,a) values (539,94);
+insert into t (id,a) values (539,95);
+insert into t (id,a) values (539,96);
+insert into t (id,a) values (539,97);
+insert into t (id,a) values (539,98);
+insert into t (id,a) values (539,99);
+insert into t (id,a) values (540,0);
+insert into t (id,a) values (540,1);
+insert into t (id,a) values (540,2);
+insert into t (id,a) values (540,3);
+insert into t (id,a) values (540,4);
+insert into t (id,a) values (540,5);
+insert into t (id,a) values (540,6);
+insert into t (id,a) values (540,7);
+insert into t (id,a) values (540,8);
+insert into t (id,a) values (540,9);
+insert into t (id,a) values (540,10);
+insert into t (id,a) values (540,11);
+insert into t (id,a) values (540,12);
+insert into t (id,a) values (540,13);
+insert into t (id,a) values (540,14);
+insert into t (id,a) values (540,15);
+insert into t (id,a) values (540,16);
+insert into t (id,a) values (540,17);
+insert into t (id,a) values (540,18);
+insert into t (id,a) values (540,19);
+insert into t (id,a) values (540,20);
+insert into t (id,a) values (540,21);
+insert into t (id,a) values (540,22);
+insert into t (id,a) values (540,23);
+insert into t (id,a) values (540,24);
+insert into t (id,a) values (540,25);
+insert into t (id,a) values (540,26);
+insert into t (id,a) values (540,27);
+insert into t (id,a) values (540,28);
+insert into t (id,a) values (540,29);
+insert into t (id,a) values (540,30);
+insert into t (id,a) values (540,31);
+insert into t (id,a) values (540,32);
+insert into t (id,a) values (540,33);
+insert into t (id,a) values (540,34);
+insert into t (id,a) values (540,35);
+insert into t (id,a) values (540,36);
+insert into t (id,a) values (540,37);
+insert into t (id,a) values (540,38);
+insert into t (id,a) values (540,39);
+insert into t (id,a) values (540,40);
+insert into t (id,a) values (540,41);
+insert into t (id,a) values (540,42);
+insert into t (id,a) values (540,43);
+insert into t (id,a) values (540,44);
+insert into t (id,a) values (540,45);
+insert into t (id,a) values (540,46);
+insert into t (id,a) values (540,47);
+insert into t (id,a) values (540,48);
+insert into t (id,a) values (540,49);
+insert into t (id,a) values (540,50);
+insert into t (id,a) values (540,51);
+insert into t (id,a) values (540,52);
+insert into t (id,a) values (540,53);
+insert into t (id,a) values (540,54);
+insert into t (id,a) values (540,55);
+insert into t (id,a) values (540,56);
+insert into t (id,a) values (540,57);
+insert into t (id,a) values (540,58);
+insert into t (id,a) values (540,59);
+insert into t (id,a) values (540,60);
+insert into t (id,a) values (540,61);
+insert into t (id,a) values (540,62);
+insert into t (id,a) values (540,63);
+insert into t (id,a) values (540,64);
+insert into t (id,a) values (540,65);
+insert into t (id,a) values (540,66);
+insert into t (id,a) values (540,67);
+insert into t (id,a) values (540,68);
+insert into t (id,a) values (540,69);
+insert into t (id,a) values (540,70);
+insert into t (id,a) values (540,71);
+insert into t (id,a) values (540,72);
+insert into t (id,a) values (540,73);
+insert into t (id,a) values (540,74);
+insert into t (id,a) values (540,75);
+insert into t (id,a) values (540,76);
+insert into t (id,a) values (540,77);
+insert into t (id,a) values (540,78);
+insert into t (id,a) values (540,79);
+insert into t (id,a) values (540,80);
+insert into t (id,a) values (540,81);
+insert into t (id,a) values (540,82);
+insert into t (id,a) values (540,83);
+insert into t (id,a) values (540,84);
+insert into t (id,a) values (540,85);
+insert into t (id,a) values (540,86);
+insert into t (id,a) values (540,87);
+insert into t (id,a) values (540,88);
+insert into t (id,a) values (540,89);
+insert into t (id,a) values (540,90);
+insert into t (id,a) values (540,91);
+insert into t (id,a) values (540,92);
+insert into t (id,a) values (540,93);
+insert into t (id,a) values (540,94);
+insert into t (id,a) values (540,95);
+insert into t (id,a) values (540,96);
+insert into t (id,a) values (540,97);
+insert into t (id,a) values (540,98);
+insert into t (id,a) values (540,99);
+insert into t (id,a) values (541,0);
+insert into t (id,a) values (541,1);
+insert into t (id,a) values (541,2);
+insert into t (id,a) values (541,3);
+insert into t (id,a) values (541,4);
+insert into t (id,a) values (541,5);
+insert into t (id,a) values (541,6);
+insert into t (id,a) values (541,7);
+insert into t (id,a) values (541,8);
+insert into t (id,a) values (541,9);
+insert into t (id,a) values (541,10);
+insert into t (id,a) values (541,11);
+insert into t (id,a) values (541,12);
+insert into t (id,a) values (541,13);
+insert into t (id,a) values (541,14);
+insert into t (id,a) values (541,15);
+insert into t (id,a) values (541,16);
+insert into t (id,a) values (541,17);
+insert into t (id,a) values (541,18);
+insert into t (id,a) values (541,19);
+insert into t (id,a) values (541,20);
+insert into t (id,a) values (541,21);
+insert into t (id,a) values (541,22);
+insert into t (id,a) values (541,23);
+insert into t (id,a) values (541,24);
+insert into t (id,a) values (541,25);
+insert into t (id,a) values (541,26);
+insert into t (id,a) values (541,27);
+insert into t (id,a) values (541,28);
+insert into t (id,a) values (541,29);
+insert into t (id,a) values (541,30);
+insert into t (id,a) values (541,31);
+insert into t (id,a) values (541,32);
+insert into t (id,a) values (541,33);
+insert into t (id,a) values (541,34);
+insert into t (id,a) values (541,35);
+insert into t (id,a) values (541,36);
+insert into t (id,a) values (541,37);
+insert into t (id,a) values (541,38);
+insert into t (id,a) values (541,39);
+insert into t (id,a) values (541,40);
+insert into t (id,a) values (541,41);
+insert into t (id,a) values (541,42);
+insert into t (id,a) values (541,43);
+insert into t (id,a) values (541,44);
+insert into t (id,a) values (541,45);
+insert into t (id,a) values (541,46);
+insert into t (id,a) values (541,47);
+insert into t (id,a) values (541,48);
+insert into t (id,a) values (541,49);
+insert into t (id,a) values (541,50);
+insert into t (id,a) values (541,51);
+insert into t (id,a) values (541,52);
+insert into t (id,a) values (541,53);
+insert into t (id,a) values (541,54);
+insert into t (id,a) values (541,55);
+insert into t (id,a) values (541,56);
+insert into t (id,a) values (541,57);
+insert into t (id,a) values (541,58);
+insert into t (id,a) values (541,59);
+insert into t (id,a) values (541,60);
+insert into t (id,a) values (541,61);
+insert into t (id,a) values (541,62);
+insert into t (id,a) values (541,63);
+insert into t (id,a) values (541,64);
+insert into t (id,a) values (541,65);
+insert into t (id,a) values (541,66);
+insert into t (id,a) values (541,67);
+insert into t (id,a) values (541,68);
+insert into t (id,a) values (541,69);
+insert into t (id,a) values (541,70);
+insert into t (id,a) values (541,71);
+insert into t (id,a) values (541,72);
+insert into t (id,a) values (541,73);
+insert into t (id,a) values (541,74);
+insert into t (id,a) values (541,75);
+insert into t (id,a) values (541,76);
+insert into t (id,a) values (541,77);
+insert into t (id,a) values (541,78);
+insert into t (id,a) values (541,79);
+insert into t (id,a) values (541,80);
+insert into t (id,a) values (541,81);
+insert into t (id,a) values (541,82);
+insert into t (id,a) values (541,83);
+insert into t (id,a) values (541,84);
+insert into t (id,a) values (541,85);
+insert into t (id,a) values (541,86);
+insert into t (id,a) values (541,87);
+insert into t (id,a) values (541,88);
+insert into t (id,a) values (541,89);
+insert into t (id,a) values (541,90);
+insert into t (id,a) values (541,91);
+insert into t (id,a) values (541,92);
+insert into t (id,a) values (541,93);
+insert into t (id,a) values (541,94);
+insert into t (id,a) values (541,95);
+insert into t (id,a) values (541,96);
+insert into t (id,a) values (541,97);
+insert into t (id,a) values (541,98);
+insert into t (id,a) values (541,99);
+insert into t (id,a) values (542,0);
+insert into t (id,a) values (542,1);
+insert into t (id,a) values (542,2);
+insert into t (id,a) values (542,3);
+insert into t (id,a) values (542,4);
+insert into t (id,a) values (542,5);
+insert into t (id,a) values (542,6);
+insert into t (id,a) values (542,7);
+insert into t (id,a) values (542,8);
+insert into t (id,a) values (542,9);
+insert into t (id,a) values (542,10);
+insert into t (id,a) values (542,11);
+insert into t (id,a) values (542,12);
+insert into t (id,a) values (542,13);
+insert into t (id,a) values (542,14);
+insert into t (id,a) values (542,15);
+insert into t (id,a) values (542,16);
+insert into t (id,a) values (542,17);
+insert into t (id,a) values (542,18);
+insert into t (id,a) values (542,19);
+insert into t (id,a) values (542,20);
+insert into t (id,a) values (542,21);
+insert into t (id,a) values (542,22);
+insert into t (id,a) values (542,23);
+insert into t (id,a) values (542,24);
+insert into t (id,a) values (542,25);
+insert into t (id,a) values (542,26);
+insert into t (id,a) values (542,27);
+insert into t (id,a) values (542,28);
+insert into t (id,a) values (542,29);
+insert into t (id,a) values (542,30);
+insert into t (id,a) values (542,31);
+insert into t (id,a) values (542,32);
+insert into t (id,a) values (542,33);
+insert into t (id,a) values (542,34);
+insert into t (id,a) values (542,35);
+insert into t (id,a) values (542,36);
+insert into t (id,a) values (542,37);
+insert into t (id,a) values (542,38);
+insert into t (id,a) values (542,39);
+insert into t (id,a) values (542,40);
+insert into t (id,a) values (542,41);
+insert into t (id,a) values (542,42);
+insert into t (id,a) values (542,43);
+insert into t (id,a) values (542,44);
+insert into t (id,a) values (542,45);
+insert into t (id,a) values (542,46);
+insert into t (id,a) values (542,47);
+insert into t (id,a) values (542,48);
+insert into t (id,a) values (542,49);
+insert into t (id,a) values (542,50);
+insert into t (id,a) values (542,51);
+insert into t (id,a) values (542,52);
+insert into t (id,a) values (542,53);
+insert into t (id,a) values (542,54);
+insert into t (id,a) values (542,55);
+insert into t (id,a) values (542,56);
+insert into t (id,a) values (542,57);
+insert into t (id,a) values (542,58);
+insert into t (id,a) values (542,59);
+insert into t (id,a) values (542,60);
+insert into t (id,a) values (542,61);
+insert into t (id,a) values (542,62);
+insert into t (id,a) values (542,63);
+insert into t (id,a) values (542,64);
+insert into t (id,a) values (542,65);
+insert into t (id,a) values (542,66);
+insert into t (id,a) values (542,67);
+insert into t (id,a) values (542,68);
+insert into t (id,a) values (542,69);
+insert into t (id,a) values (542,70);
+insert into t (id,a) values (542,71);
+insert into t (id,a) values (542,72);
+insert into t (id,a) values (542,73);
+insert into t (id,a) values (542,74);
+insert into t (id,a) values (542,75);
+insert into t (id,a) values (542,76);
+insert into t (id,a) values (542,77);
+insert into t (id,a) values (542,78);
+insert into t (id,a) values (542,79);
+insert into t (id,a) values (542,80);
+insert into t (id,a) values (542,81);
+insert into t (id,a) values (542,82);
+insert into t (id,a) values (542,83);
+insert into t (id,a) values (542,84);
+insert into t (id,a) values (542,85);
+insert into t (id,a) values (542,86);
+insert into t (id,a) values (542,87);
+insert into t (id,a) values (542,88);
+insert into t (id,a) values (542,89);
+insert into t (id,a) values (542,90);
+insert into t (id,a) values (542,91);
+insert into t (id,a) values (542,92);
+insert into t (id,a) values (542,93);
+insert into t (id,a) values (542,94);
+insert into t (id,a) values (542,95);
+insert into t (id,a) values (542,96);
+insert into t (id,a) values (542,97);
+insert into t (id,a) values (542,98);
+insert into t (id,a) values (542,99);
+insert into t (id,a) values (543,0);
+insert into t (id,a) values (543,1);
+insert into t (id,a) values (543,2);
+insert into t (id,a) values (543,3);
+insert into t (id,a) values (543,4);
+insert into t (id,a) values (543,5);
+insert into t (id,a) values (543,6);
+insert into t (id,a) values (543,7);
+insert into t (id,a) values (543,8);
+insert into t (id,a) values (543,9);
+insert into t (id,a) values (543,10);
+insert into t (id,a) values (543,11);
+insert into t (id,a) values (543,12);
+insert into t (id,a) values (543,13);
+insert into t (id,a) values (543,14);
+insert into t (id,a) values (543,15);
+insert into t (id,a) values (543,16);
+insert into t (id,a) values (543,17);
+insert into t (id,a) values (543,18);
+insert into t (id,a) values (543,19);
+insert into t (id,a) values (543,20);
+insert into t (id,a) values (543,21);
+insert into t (id,a) values (543,22);
+insert into t (id,a) values (543,23);
+insert into t (id,a) values (543,24);
+insert into t (id,a) values (543,25);
+insert into t (id,a) values (543,26);
+insert into t (id,a) values (543,27);
+insert into t (id,a) values (543,28);
+insert into t (id,a) values (543,29);
+insert into t (id,a) values (543,30);
+insert into t (id,a) values (543,31);
+insert into t (id,a) values (543,32);
+insert into t (id,a) values (543,33);
+insert into t (id,a) values (543,34);
+insert into t (id,a) values (543,35);
+insert into t (id,a) values (543,36);
+insert into t (id,a) values (543,37);
+insert into t (id,a) values (543,38);
+insert into t (id,a) values (543,39);
+insert into t (id,a) values (543,40);
+insert into t (id,a) values (543,41);
+insert into t (id,a) values (543,42);
+insert into t (id,a) values (543,43);
+insert into t (id,a) values (543,44);
+insert into t (id,a) values (543,45);
+insert into t (id,a) values (543,46);
+insert into t (id,a) values (543,47);
+insert into t (id,a) values (543,48);
+insert into t (id,a) values (543,49);
+insert into t (id,a) values (543,50);
+insert into t (id,a) values (543,51);
+insert into t (id,a) values (543,52);
+insert into t (id,a) values (543,53);
+insert into t (id,a) values (543,54);
+insert into t (id,a) values (543,55);
+insert into t (id,a) values (543,56);
+insert into t (id,a) values (543,57);
+insert into t (id,a) values (543,58);
+insert into t (id,a) values (543,59);
+insert into t (id,a) values (543,60);
+insert into t (id,a) values (543,61);
+insert into t (id,a) values (543,62);
+insert into t (id,a) values (543,63);
+insert into t (id,a) values (543,64);
+insert into t (id,a) values (543,65);
+insert into t (id,a) values (543,66);
+insert into t (id,a) values (543,67);
+insert into t (id,a) values (543,68);
+insert into t (id,a) values (543,69);
+insert into t (id,a) values (543,70);
+insert into t (id,a) values (543,71);
+insert into t (id,a) values (543,72);
+insert into t (id,a) values (543,73);
+insert into t (id,a) values (543,74);
+insert into t (id,a) values (543,75);
+insert into t (id,a) values (543,76);
+insert into t (id,a) values (543,77);
+insert into t (id,a) values (543,78);
+insert into t (id,a) values (543,79);
+insert into t (id,a) values (543,80);
+insert into t (id,a) values (543,81);
+insert into t (id,a) values (543,82);
+insert into t (id,a) values (543,83);
+insert into t (id,a) values (543,84);
+insert into t (id,a) values (543,85);
+insert into t (id,a) values (543,86);
+insert into t (id,a) values (543,87);
+insert into t (id,a) values (543,88);
+insert into t (id,a) values (543,89);
+insert into t (id,a) values (543,90);
+insert into t (id,a) values (543,91);
+insert into t (id,a) values (543,92);
+insert into t (id,a) values (543,93);
+insert into t (id,a) values (543,94);
+insert into t (id,a) values (543,95);
+insert into t (id,a) values (543,96);
+insert into t (id,a) values (543,97);
+insert into t (id,a) values (543,98);
+insert into t (id,a) values (543,99);
+insert into t (id,a) values (544,0);
+insert into t (id,a) values (544,1);
+insert into t (id,a) values (544,2);
+insert into t (id,a) values (544,3);
+insert into t (id,a) values (544,4);
+insert into t (id,a) values (544,5);
+insert into t (id,a) values (544,6);
+insert into t (id,a) values (544,7);
+insert into t (id,a) values (544,8);
+insert into t (id,a) values (544,9);
+insert into t (id,a) values (544,10);
+insert into t (id,a) values (544,11);
+insert into t (id,a) values (544,12);
+insert into t (id,a) values (544,13);
+insert into t (id,a) values (544,14);
+insert into t (id,a) values (544,15);
+insert into t (id,a) values (544,16);
+insert into t (id,a) values (544,17);
+insert into t (id,a) values (544,18);
+insert into t (id,a) values (544,19);
+insert into t (id,a) values (544,20);
+insert into t (id,a) values (544,21);
+insert into t (id,a) values (544,22);
+insert into t (id,a) values (544,23);
+insert into t (id,a) values (544,24);
+insert into t (id,a) values (544,25);
+insert into t (id,a) values (544,26);
+insert into t (id,a) values (544,27);
+insert into t (id,a) values (544,28);
+insert into t (id,a) values (544,29);
+insert into t (id,a) values (544,30);
+insert into t (id,a) values (544,31);
+insert into t (id,a) values (544,32);
+insert into t (id,a) values (544,33);
+insert into t (id,a) values (544,34);
+insert into t (id,a) values (544,35);
+insert into t (id,a) values (544,36);
+insert into t (id,a) values (544,37);
+insert into t (id,a) values (544,38);
+insert into t (id,a) values (544,39);
+insert into t (id,a) values (544,40);
+insert into t (id,a) values (544,41);
+insert into t (id,a) values (544,42);
+insert into t (id,a) values (544,43);
+insert into t (id,a) values (544,44);
+insert into t (id,a) values (544,45);
+insert into t (id,a) values (544,46);
+insert into t (id,a) values (544,47);
+insert into t (id,a) values (544,48);
+insert into t (id,a) values (544,49);
+insert into t (id,a) values (544,50);
+insert into t (id,a) values (544,51);
+insert into t (id,a) values (544,52);
+insert into t (id,a) values (544,53);
+insert into t (id,a) values (544,54);
+insert into t (id,a) values (544,55);
+insert into t (id,a) values (544,56);
+insert into t (id,a) values (544,57);
+insert into t (id,a) values (544,58);
+insert into t (id,a) values (544,59);
+insert into t (id,a) values (544,60);
+insert into t (id,a) values (544,61);
+insert into t (id,a) values (544,62);
+insert into t (id,a) values (544,63);
+insert into t (id,a) values (544,64);
+insert into t (id,a) values (544,65);
+insert into t (id,a) values (544,66);
+insert into t (id,a) values (544,67);
+insert into t (id,a) values (544,68);
+insert into t (id,a) values (544,69);
+insert into t (id,a) values (544,70);
+insert into t (id,a) values (544,71);
+insert into t (id,a) values (544,72);
+insert into t (id,a) values (544,73);
+insert into t (id,a) values (544,74);
+insert into t (id,a) values (544,75);
+insert into t (id,a) values (544,76);
+insert into t (id,a) values (544,77);
+insert into t (id,a) values (544,78);
+insert into t (id,a) values (544,79);
+insert into t (id,a) values (544,80);
+insert into t (id,a) values (544,81);
+insert into t (id,a) values (544,82);
+insert into t (id,a) values (544,83);
+insert into t (id,a) values (544,84);
+insert into t (id,a) values (544,85);
+insert into t (id,a) values (544,86);
+insert into t (id,a) values (544,87);
+insert into t (id,a) values (544,88);
+insert into t (id,a) values (544,89);
+insert into t (id,a) values (544,90);
+insert into t (id,a) values (544,91);
+insert into t (id,a) values (544,92);
+insert into t (id,a) values (544,93);
+insert into t (id,a) values (544,94);
+insert into t (id,a) values (544,95);
+insert into t (id,a) values (544,96);
+insert into t (id,a) values (544,97);
+insert into t (id,a) values (544,98);
+insert into t (id,a) values (544,99);
+insert into t (id,a) values (545,0);
+insert into t (id,a) values (545,1);
+insert into t (id,a) values (545,2);
+insert into t (id,a) values (545,3);
+insert into t (id,a) values (545,4);
+insert into t (id,a) values (545,5);
+insert into t (id,a) values (545,6);
+insert into t (id,a) values (545,7);
+insert into t (id,a) values (545,8);
+insert into t (id,a) values (545,9);
+insert into t (id,a) values (545,10);
+insert into t (id,a) values (545,11);
+insert into t (id,a) values (545,12);
+insert into t (id,a) values (545,13);
+insert into t (id,a) values (545,14);
+insert into t (id,a) values (545,15);
+insert into t (id,a) values (545,16);
+insert into t (id,a) values (545,17);
+insert into t (id,a) values (545,18);
+insert into t (id,a) values (545,19);
+insert into t (id,a) values (545,20);
+insert into t (id,a) values (545,21);
+insert into t (id,a) values (545,22);
+insert into t (id,a) values (545,23);
+insert into t (id,a) values (545,24);
+insert into t (id,a) values (545,25);
+insert into t (id,a) values (545,26);
+insert into t (id,a) values (545,27);
+insert into t (id,a) values (545,28);
+insert into t (id,a) values (545,29);
+insert into t (id,a) values (545,30);
+insert into t (id,a) values (545,31);
+insert into t (id,a) values (545,32);
+insert into t (id,a) values (545,33);
+insert into t (id,a) values (545,34);
+insert into t (id,a) values (545,35);
+insert into t (id,a) values (545,36);
+insert into t (id,a) values (545,37);
+insert into t (id,a) values (545,38);
+insert into t (id,a) values (545,39);
+insert into t (id,a) values (545,40);
+insert into t (id,a) values (545,41);
+insert into t (id,a) values (545,42);
+insert into t (id,a) values (545,43);
+insert into t (id,a) values (545,44);
+insert into t (id,a) values (545,45);
+insert into t (id,a) values (545,46);
+insert into t (id,a) values (545,47);
+insert into t (id,a) values (545,48);
+insert into t (id,a) values (545,49);
+insert into t (id,a) values (545,50);
+insert into t (id,a) values (545,51);
+insert into t (id,a) values (545,52);
+insert into t (id,a) values (545,53);
+insert into t (id,a) values (545,54);
+insert into t (id,a) values (545,55);
+insert into t (id,a) values (545,56);
+insert into t (id,a) values (545,57);
+insert into t (id,a) values (545,58);
+insert into t (id,a) values (545,59);
+insert into t (id,a) values (545,60);
+insert into t (id,a) values (545,61);
+insert into t (id,a) values (545,62);
+insert into t (id,a) values (545,63);
+insert into t (id,a) values (545,64);
+insert into t (id,a) values (545,65);
+insert into t (id,a) values (545,66);
+insert into t (id,a) values (545,67);
+insert into t (id,a) values (545,68);
+insert into t (id,a) values (545,69);
+insert into t (id,a) values (545,70);
+insert into t (id,a) values (545,71);
+insert into t (id,a) values (545,72);
+insert into t (id,a) values (545,73);
+insert into t (id,a) values (545,74);
+insert into t (id,a) values (545,75);
+insert into t (id,a) values (545,76);
+insert into t (id,a) values (545,77);
+insert into t (id,a) values (545,78);
+insert into t (id,a) values (545,79);
+insert into t (id,a) values (545,80);
+insert into t (id,a) values (545,81);
+insert into t (id,a) values (545,82);
+insert into t (id,a) values (545,83);
+insert into t (id,a) values (545,84);
+insert into t (id,a) values (545,85);
+insert into t (id,a) values (545,86);
+insert into t (id,a) values (545,87);
+insert into t (id,a) values (545,88);
+insert into t (id,a) values (545,89);
+insert into t (id,a) values (545,90);
+insert into t (id,a) values (545,91);
+insert into t (id,a) values (545,92);
+insert into t (id,a) values (545,93);
+insert into t (id,a) values (545,94);
+insert into t (id,a) values (545,95);
+insert into t (id,a) values (545,96);
+insert into t (id,a) values (545,97);
+insert into t (id,a) values (545,98);
+insert into t (id,a) values (545,99);
+insert into t (id,a) values (546,0);
+insert into t (id,a) values (546,1);
+insert into t (id,a) values (546,2);
+insert into t (id,a) values (546,3);
+insert into t (id,a) values (546,4);
+insert into t (id,a) values (546,5);
+insert into t (id,a) values (546,6);
+insert into t (id,a) values (546,7);
+insert into t (id,a) values (546,8);
+insert into t (id,a) values (546,9);
+insert into t (id,a) values (546,10);
+insert into t (id,a) values (546,11);
+insert into t (id,a) values (546,12);
+insert into t (id,a) values (546,13);
+insert into t (id,a) values (546,14);
+insert into t (id,a) values (546,15);
+insert into t (id,a) values (546,16);
+insert into t (id,a) values (546,17);
+insert into t (id,a) values (546,18);
+insert into t (id,a) values (546,19);
+insert into t (id,a) values (546,20);
+insert into t (id,a) values (546,21);
+insert into t (id,a) values (546,22);
+insert into t (id,a) values (546,23);
+insert into t (id,a) values (546,24);
+insert into t (id,a) values (546,25);
+insert into t (id,a) values (546,26);
+insert into t (id,a) values (546,27);
+insert into t (id,a) values (546,28);
+insert into t (id,a) values (546,29);
+insert into t (id,a) values (546,30);
+insert into t (id,a) values (546,31);
+insert into t (id,a) values (546,32);
+insert into t (id,a) values (546,33);
+insert into t (id,a) values (546,34);
+insert into t (id,a) values (546,35);
+insert into t (id,a) values (546,36);
+insert into t (id,a) values (546,37);
+insert into t (id,a) values (546,38);
+insert into t (id,a) values (546,39);
+insert into t (id,a) values (546,40);
+insert into t (id,a) values (546,41);
+insert into t (id,a) values (546,42);
+insert into t (id,a) values (546,43);
+insert into t (id,a) values (546,44);
+insert into t (id,a) values (546,45);
+insert into t (id,a) values (546,46);
+insert into t (id,a) values (546,47);
+insert into t (id,a) values (546,48);
+insert into t (id,a) values (546,49);
+insert into t (id,a) values (546,50);
+insert into t (id,a) values (546,51);
+insert into t (id,a) values (546,52);
+insert into t (id,a) values (546,53);
+insert into t (id,a) values (546,54);
+insert into t (id,a) values (546,55);
+insert into t (id,a) values (546,56);
+insert into t (id,a) values (546,57);
+insert into t (id,a) values (546,58);
+insert into t (id,a) values (546,59);
+insert into t (id,a) values (546,60);
+insert into t (id,a) values (546,61);
+insert into t (id,a) values (546,62);
+insert into t (id,a) values (546,63);
+insert into t (id,a) values (546,64);
+insert into t (id,a) values (546,65);
+insert into t (id,a) values (546,66);
+insert into t (id,a) values (546,67);
+insert into t (id,a) values (546,68);
+insert into t (id,a) values (546,69);
+insert into t (id,a) values (546,70);
+insert into t (id,a) values (546,71);
+insert into t (id,a) values (546,72);
+insert into t (id,a) values (546,73);
+insert into t (id,a) values (546,74);
+insert into t (id,a) values (546,75);
+insert into t (id,a) values (546,76);
+insert into t (id,a) values (546,77);
+insert into t (id,a) values (546,78);
+insert into t (id,a) values (546,79);
+insert into t (id,a) values (546,80);
+insert into t (id,a) values (546,81);
+insert into t (id,a) values (546,82);
+insert into t (id,a) values (546,83);
+insert into t (id,a) values (546,84);
+insert into t (id,a) values (546,85);
+insert into t (id,a) values (546,86);
+insert into t (id,a) values (546,87);
+insert into t (id,a) values (546,88);
+insert into t (id,a) values (546,89);
+insert into t (id,a) values (546,90);
+insert into t (id,a) values (546,91);
+insert into t (id,a) values (546,92);
+insert into t (id,a) values (546,93);
+insert into t (id,a) values (546,94);
+insert into t (id,a) values (546,95);
+insert into t (id,a) values (546,96);
+insert into t (id,a) values (546,97);
+insert into t (id,a) values (546,98);
+insert into t (id,a) values (546,99);
+insert into t (id,a) values (547,0);
+insert into t (id,a) values (547,1);
+insert into t (id,a) values (547,2);
+insert into t (id,a) values (547,3);
+insert into t (id,a) values (547,4);
+insert into t (id,a) values (547,5);
+insert into t (id,a) values (547,6);
+insert into t (id,a) values (547,7);
+insert into t (id,a) values (547,8);
+insert into t (id,a) values (547,9);
+insert into t (id,a) values (547,10);
+insert into t (id,a) values (547,11);
+insert into t (id,a) values (547,12);
+insert into t (id,a) values (547,13);
+insert into t (id,a) values (547,14);
+insert into t (id,a) values (547,15);
+insert into t (id,a) values (547,16);
+insert into t (id,a) values (547,17);
+insert into t (id,a) values (547,18);
+insert into t (id,a) values (547,19);
+insert into t (id,a) values (547,20);
+insert into t (id,a) values (547,21);
+insert into t (id,a) values (547,22);
+insert into t (id,a) values (547,23);
+insert into t (id,a) values (547,24);
+insert into t (id,a) values (547,25);
+insert into t (id,a) values (547,26);
+insert into t (id,a) values (547,27);
+insert into t (id,a) values (547,28);
+insert into t (id,a) values (547,29);
+insert into t (id,a) values (547,30);
+insert into t (id,a) values (547,31);
+insert into t (id,a) values (547,32);
+insert into t (id,a) values (547,33);
+insert into t (id,a) values (547,34);
+insert into t (id,a) values (547,35);
+insert into t (id,a) values (547,36);
+insert into t (id,a) values (547,37);
+insert into t (id,a) values (547,38);
+insert into t (id,a) values (547,39);
+insert into t (id,a) values (547,40);
+insert into t (id,a) values (547,41);
+insert into t (id,a) values (547,42);
+insert into t (id,a) values (547,43);
+insert into t (id,a) values (547,44);
+insert into t (id,a) values (547,45);
+insert into t (id,a) values (547,46);
+insert into t (id,a) values (547,47);
+insert into t (id,a) values (547,48);
+insert into t (id,a) values (547,49);
+insert into t (id,a) values (547,50);
+insert into t (id,a) values (547,51);
+insert into t (id,a) values (547,52);
+insert into t (id,a) values (547,53);
+insert into t (id,a) values (547,54);
+insert into t (id,a) values (547,55);
+insert into t (id,a) values (547,56);
+insert into t (id,a) values (547,57);
+insert into t (id,a) values (547,58);
+insert into t (id,a) values (547,59);
+insert into t (id,a) values (547,60);
+insert into t (id,a) values (547,61);
+insert into t (id,a) values (547,62);
+insert into t (id,a) values (547,63);
+insert into t (id,a) values (547,64);
+insert into t (id,a) values (547,65);
+insert into t (id,a) values (547,66);
+insert into t (id,a) values (547,67);
+insert into t (id,a) values (547,68);
+insert into t (id,a) values (547,69);
+insert into t (id,a) values (547,70);
+insert into t (id,a) values (547,71);
+insert into t (id,a) values (547,72);
+insert into t (id,a) values (547,73);
+insert into t (id,a) values (547,74);
+insert into t (id,a) values (547,75);
+insert into t (id,a) values (547,76);
+insert into t (id,a) values (547,77);
+insert into t (id,a) values (547,78);
+insert into t (id,a) values (547,79);
+insert into t (id,a) values (547,80);
+insert into t (id,a) values (547,81);
+insert into t (id,a) values (547,82);
+insert into t (id,a) values (547,83);
+insert into t (id,a) values (547,84);
+insert into t (id,a) values (547,85);
+insert into t (id,a) values (547,86);
+insert into t (id,a) values (547,87);
+insert into t (id,a) values (547,88);
+insert into t (id,a) values (547,89);
+insert into t (id,a) values (547,90);
+insert into t (id,a) values (547,91);
+insert into t (id,a) values (547,92);
+insert into t (id,a) values (547,93);
+insert into t (id,a) values (547,94);
+insert into t (id,a) values (547,95);
+insert into t (id,a) values (547,96);
+insert into t (id,a) values (547,97);
+insert into t (id,a) values (547,98);
+insert into t (id,a) values (547,99);
+insert into t (id,a) values (548,0);
+insert into t (id,a) values (548,1);
+insert into t (id,a) values (548,2);
+insert into t (id,a) values (548,3);
+insert into t (id,a) values (548,4);
+insert into t (id,a) values (548,5);
+insert into t (id,a) values (548,6);
+insert into t (id,a) values (548,7);
+insert into t (id,a) values (548,8);
+insert into t (id,a) values (548,9);
+insert into t (id,a) values (548,10);
+insert into t (id,a) values (548,11);
+insert into t (id,a) values (548,12);
+insert into t (id,a) values (548,13);
+insert into t (id,a) values (548,14);
+insert into t (id,a) values (548,15);
+insert into t (id,a) values (548,16);
+insert into t (id,a) values (548,17);
+insert into t (id,a) values (548,18);
+insert into t (id,a) values (548,19);
+insert into t (id,a) values (548,20);
+insert into t (id,a) values (548,21);
+insert into t (id,a) values (548,22);
+insert into t (id,a) values (548,23);
+insert into t (id,a) values (548,24);
+insert into t (id,a) values (548,25);
+insert into t (id,a) values (548,26);
+insert into t (id,a) values (548,27);
+insert into t (id,a) values (548,28);
+insert into t (id,a) values (548,29);
+insert into t (id,a) values (548,30);
+insert into t (id,a) values (548,31);
+insert into t (id,a) values (548,32);
+insert into t (id,a) values (548,33);
+insert into t (id,a) values (548,34);
+insert into t (id,a) values (548,35);
+insert into t (id,a) values (548,36);
+insert into t (id,a) values (548,37);
+insert into t (id,a) values (548,38);
+insert into t (id,a) values (548,39);
+insert into t (id,a) values (548,40);
+insert into t (id,a) values (548,41);
+insert into t (id,a) values (548,42);
+insert into t (id,a) values (548,43);
+insert into t (id,a) values (548,44);
+insert into t (id,a) values (548,45);
+insert into t (id,a) values (548,46);
+insert into t (id,a) values (548,47);
+insert into t (id,a) values (548,48);
+insert into t (id,a) values (548,49);
+insert into t (id,a) values (548,50);
+insert into t (id,a) values (548,51);
+insert into t (id,a) values (548,52);
+insert into t (id,a) values (548,53);
+insert into t (id,a) values (548,54);
+insert into t (id,a) values (548,55);
+insert into t (id,a) values (548,56);
+insert into t (id,a) values (548,57);
+insert into t (id,a) values (548,58);
+insert into t (id,a) values (548,59);
+insert into t (id,a) values (548,60);
+insert into t (id,a) values (548,61);
+insert into t (id,a) values (548,62);
+insert into t (id,a) values (548,63);
+insert into t (id,a) values (548,64);
+insert into t (id,a) values (548,65);
+insert into t (id,a) values (548,66);
+insert into t (id,a) values (548,67);
+insert into t (id,a) values (548,68);
+insert into t (id,a) values (548,69);
+insert into t (id,a) values (548,70);
+insert into t (id,a) values (548,71);
+insert into t (id,a) values (548,72);
+insert into t (id,a) values (548,73);
+insert into t (id,a) values (548,74);
+insert into t (id,a) values (548,75);
+insert into t (id,a) values (548,76);
+insert into t (id,a) values (548,77);
+insert into t (id,a) values (548,78);
+insert into t (id,a) values (548,79);
+insert into t (id,a) values (548,80);
+insert into t (id,a) values (548,81);
+insert into t (id,a) values (548,82);
+insert into t (id,a) values (548,83);
+insert into t (id,a) values (548,84);
+insert into t (id,a) values (548,85);
+insert into t (id,a) values (548,86);
+insert into t (id,a) values (548,87);
+insert into t (id,a) values (548,88);
+insert into t (id,a) values (548,89);
+insert into t (id,a) values (548,90);
+insert into t (id,a) values (548,91);
+insert into t (id,a) values (548,92);
+insert into t (id,a) values (548,93);
+insert into t (id,a) values (548,94);
+insert into t (id,a) values (548,95);
+insert into t (id,a) values (548,96);
+insert into t (id,a) values (548,97);
+insert into t (id,a) values (548,98);
+insert into t (id,a) values (548,99);
+insert into t (id,a) values (549,0);
+insert into t (id,a) values (549,1);
+insert into t (id,a) values (549,2);
+insert into t (id,a) values (549,3);
+insert into t (id,a) values (549,4);
+insert into t (id,a) values (549,5);
+insert into t (id,a) values (549,6);
+insert into t (id,a) values (549,7);
+insert into t (id,a) values (549,8);
+insert into t (id,a) values (549,9);
+insert into t (id,a) values (549,10);
+insert into t (id,a) values (549,11);
+insert into t (id,a) values (549,12);
+insert into t (id,a) values (549,13);
+insert into t (id,a) values (549,14);
+insert into t (id,a) values (549,15);
+insert into t (id,a) values (549,16);
+insert into t (id,a) values (549,17);
+insert into t (id,a) values (549,18);
+insert into t (id,a) values (549,19);
+insert into t (id,a) values (549,20);
+insert into t (id,a) values (549,21);
+insert into t (id,a) values (549,22);
+insert into t (id,a) values (549,23);
+insert into t (id,a) values (549,24);
+insert into t (id,a) values (549,25);
+insert into t (id,a) values (549,26);
+insert into t (id,a) values (549,27);
+insert into t (id,a) values (549,28);
+insert into t (id,a) values (549,29);
+insert into t (id,a) values (549,30);
+insert into t (id,a) values (549,31);
+insert into t (id,a) values (549,32);
+insert into t (id,a) values (549,33);
+insert into t (id,a) values (549,34);
+insert into t (id,a) values (549,35);
+insert into t (id,a) values (549,36);
+insert into t (id,a) values (549,37);
+insert into t (id,a) values (549,38);
+insert into t (id,a) values (549,39);
+insert into t (id,a) values (549,40);
+insert into t (id,a) values (549,41);
+insert into t (id,a) values (549,42);
+insert into t (id,a) values (549,43);
+insert into t (id,a) values (549,44);
+insert into t (id,a) values (549,45);
+insert into t (id,a) values (549,46);
+insert into t (id,a) values (549,47);
+insert into t (id,a) values (549,48);
+insert into t (id,a) values (549,49);
+insert into t (id,a) values (549,50);
+insert into t (id,a) values (549,51);
+insert into t (id,a) values (549,52);
+insert into t (id,a) values (549,53);
+insert into t (id,a) values (549,54);
+insert into t (id,a) values (549,55);
+insert into t (id,a) values (549,56);
+insert into t (id,a) values (549,57);
+insert into t (id,a) values (549,58);
+insert into t (id,a) values (549,59);
+insert into t (id,a) values (549,60);
+insert into t (id,a) values (549,61);
+insert into t (id,a) values (549,62);
+insert into t (id,a) values (549,63);
+insert into t (id,a) values (549,64);
+insert into t (id,a) values (549,65);
+insert into t (id,a) values (549,66);
+insert into t (id,a) values (549,67);
+insert into t (id,a) values (549,68);
+insert into t (id,a) values (549,69);
+insert into t (id,a) values (549,70);
+insert into t (id,a) values (549,71);
+insert into t (id,a) values (549,72);
+insert into t (id,a) values (549,73);
+insert into t (id,a) values (549,74);
+insert into t (id,a) values (549,75);
+insert into t (id,a) values (549,76);
+insert into t (id,a) values (549,77);
+insert into t (id,a) values (549,78);
+insert into t (id,a) values (549,79);
+insert into t (id,a) values (549,80);
+insert into t (id,a) values (549,81);
+insert into t (id,a) values (549,82);
+insert into t (id,a) values (549,83);
+insert into t (id,a) values (549,84);
+insert into t (id,a) values (549,85);
+insert into t (id,a) values (549,86);
+insert into t (id,a) values (549,87);
+insert into t (id,a) values (549,88);
+insert into t (id,a) values (549,89);
+insert into t (id,a) values (549,90);
+insert into t (id,a) values (549,91);
+insert into t (id,a) values (549,92);
+insert into t (id,a) values (549,93);
+insert into t (id,a) values (549,94);
+insert into t (id,a) values (549,95);
+insert into t (id,a) values (549,96);
+insert into t (id,a) values (549,97);
+insert into t (id,a) values (549,98);
+insert into t (id,a) values (549,99);
+insert into t (id,a) values (550,0);
+insert into t (id,a) values (550,1);
+insert into t (id,a) values (550,2);
+insert into t (id,a) values (550,3);
+insert into t (id,a) values (550,4);
+insert into t (id,a) values (550,5);
+insert into t (id,a) values (550,6);
+insert into t (id,a) values (550,7);
+insert into t (id,a) values (550,8);
+insert into t (id,a) values (550,9);
+insert into t (id,a) values (550,10);
+insert into t (id,a) values (550,11);
+insert into t (id,a) values (550,12);
+insert into t (id,a) values (550,13);
+insert into t (id,a) values (550,14);
+insert into t (id,a) values (550,15);
+insert into t (id,a) values (550,16);
+insert into t (id,a) values (550,17);
+insert into t (id,a) values (550,18);
+insert into t (id,a) values (550,19);
+insert into t (id,a) values (550,20);
+insert into t (id,a) values (550,21);
+insert into t (id,a) values (550,22);
+insert into t (id,a) values (550,23);
+insert into t (id,a) values (550,24);
+insert into t (id,a) values (550,25);
+insert into t (id,a) values (550,26);
+insert into t (id,a) values (550,27);
+insert into t (id,a) values (550,28);
+insert into t (id,a) values (550,29);
+insert into t (id,a) values (550,30);
+insert into t (id,a) values (550,31);
+insert into t (id,a) values (550,32);
+insert into t (id,a) values (550,33);
+insert into t (id,a) values (550,34);
+insert into t (id,a) values (550,35);
+insert into t (id,a) values (550,36);
+insert into t (id,a) values (550,37);
+insert into t (id,a) values (550,38);
+insert into t (id,a) values (550,39);
+insert into t (id,a) values (550,40);
+insert into t (id,a) values (550,41);
+insert into t (id,a) values (550,42);
+insert into t (id,a) values (550,43);
+insert into t (id,a) values (550,44);
+insert into t (id,a) values (550,45);
+insert into t (id,a) values (550,46);
+insert into t (id,a) values (550,47);
+insert into t (id,a) values (550,48);
+insert into t (id,a) values (550,49);
+insert into t (id,a) values (550,50);
+insert into t (id,a) values (550,51);
+insert into t (id,a) values (550,52);
+insert into t (id,a) values (550,53);
+insert into t (id,a) values (550,54);
+insert into t (id,a) values (550,55);
+insert into t (id,a) values (550,56);
+insert into t (id,a) values (550,57);
+insert into t (id,a) values (550,58);
+insert into t (id,a) values (550,59);
+insert into t (id,a) values (550,60);
+insert into t (id,a) values (550,61);
+insert into t (id,a) values (550,62);
+insert into t (id,a) values (550,63);
+insert into t (id,a) values (550,64);
+insert into t (id,a) values (550,65);
+insert into t (id,a) values (550,66);
+insert into t (id,a) values (550,67);
+insert into t (id,a) values (550,68);
+insert into t (id,a) values (550,69);
+insert into t (id,a) values (550,70);
+insert into t (id,a) values (550,71);
+insert into t (id,a) values (550,72);
+insert into t (id,a) values (550,73);
+insert into t (id,a) values (550,74);
+insert into t (id,a) values (550,75);
+insert into t (id,a) values (550,76);
+insert into t (id,a) values (550,77);
+insert into t (id,a) values (550,78);
+insert into t (id,a) values (550,79);
+insert into t (id,a) values (550,80);
+insert into t (id,a) values (550,81);
+insert into t (id,a) values (550,82);
+insert into t (id,a) values (550,83);
+insert into t (id,a) values (550,84);
+insert into t (id,a) values (550,85);
+insert into t (id,a) values (550,86);
+insert into t (id,a) values (550,87);
+insert into t (id,a) values (550,88);
+insert into t (id,a) values (550,89);
+insert into t (id,a) values (550,90);
+insert into t (id,a) values (550,91);
+insert into t (id,a) values (550,92);
+insert into t (id,a) values (550,93);
+insert into t (id,a) values (550,94);
+insert into t (id,a) values (550,95);
+insert into t (id,a) values (550,96);
+insert into t (id,a) values (550,97);
+insert into t (id,a) values (550,98);
+insert into t (id,a) values (550,99);
+insert into t (id,a) values (551,0);
+insert into t (id,a) values (551,1);
+insert into t (id,a) values (551,2);
+insert into t (id,a) values (551,3);
+insert into t (id,a) values (551,4);
+insert into t (id,a) values (551,5);
+insert into t (id,a) values (551,6);
+insert into t (id,a) values (551,7);
+insert into t (id,a) values (551,8);
+insert into t (id,a) values (551,9);
+insert into t (id,a) values (551,10);
+insert into t (id,a) values (551,11);
+insert into t (id,a) values (551,12);
+insert into t (id,a) values (551,13);
+insert into t (id,a) values (551,14);
+insert into t (id,a) values (551,15);
+insert into t (id,a) values (551,16);
+insert into t (id,a) values (551,17);
+insert into t (id,a) values (551,18);
+insert into t (id,a) values (551,19);
+insert into t (id,a) values (551,20);
+insert into t (id,a) values (551,21);
+insert into t (id,a) values (551,22);
+insert into t (id,a) values (551,23);
+insert into t (id,a) values (551,24);
+insert into t (id,a) values (551,25);
+insert into t (id,a) values (551,26);
+insert into t (id,a) values (551,27);
+insert into t (id,a) values (551,28);
+insert into t (id,a) values (551,29);
+insert into t (id,a) values (551,30);
+insert into t (id,a) values (551,31);
+insert into t (id,a) values (551,32);
+insert into t (id,a) values (551,33);
+insert into t (id,a) values (551,34);
+insert into t (id,a) values (551,35);
+insert into t (id,a) values (551,36);
+insert into t (id,a) values (551,37);
+insert into t (id,a) values (551,38);
+insert into t (id,a) values (551,39);
+insert into t (id,a) values (551,40);
+insert into t (id,a) values (551,41);
+insert into t (id,a) values (551,42);
+insert into t (id,a) values (551,43);
+insert into t (id,a) values (551,44);
+insert into t (id,a) values (551,45);
+insert into t (id,a) values (551,46);
+insert into t (id,a) values (551,47);
+insert into t (id,a) values (551,48);
+insert into t (id,a) values (551,49);
+insert into t (id,a) values (551,50);
+insert into t (id,a) values (551,51);
+insert into t (id,a) values (551,52);
+insert into t (id,a) values (551,53);
+insert into t (id,a) values (551,54);
+insert into t (id,a) values (551,55);
+insert into t (id,a) values (551,56);
+insert into t (id,a) values (551,57);
+insert into t (id,a) values (551,58);
+insert into t (id,a) values (551,59);
+insert into t (id,a) values (551,60);
+insert into t (id,a) values (551,61);
+insert into t (id,a) values (551,62);
+insert into t (id,a) values (551,63);
+insert into t (id,a) values (551,64);
+insert into t (id,a) values (551,65);
+insert into t (id,a) values (551,66);
+insert into t (id,a) values (551,67);
+insert into t (id,a) values (551,68);
+insert into t (id,a) values (551,69);
+insert into t (id,a) values (551,70);
+insert into t (id,a) values (551,71);
+insert into t (id,a) values (551,72);
+insert into t (id,a) values (551,73);
+insert into t (id,a) values (551,74);
+insert into t (id,a) values (551,75);
+insert into t (id,a) values (551,76);
+insert into t (id,a) values (551,77);
+insert into t (id,a) values (551,78);
+insert into t (id,a) values (551,79);
+insert into t (id,a) values (551,80);
+insert into t (id,a) values (551,81);
+insert into t (id,a) values (551,82);
+insert into t (id,a) values (551,83);
+insert into t (id,a) values (551,84);
+insert into t (id,a) values (551,85);
+insert into t (id,a) values (551,86);
+insert into t (id,a) values (551,87);
+insert into t (id,a) values (551,88);
+insert into t (id,a) values (551,89);
+insert into t (id,a) values (551,90);
+insert into t (id,a) values (551,91);
+insert into t (id,a) values (551,92);
+insert into t (id,a) values (551,93);
+insert into t (id,a) values (551,94);
+insert into t (id,a) values (551,95);
+insert into t (id,a) values (551,96);
+insert into t (id,a) values (551,97);
+insert into t (id,a) values (551,98);
+insert into t (id,a) values (551,99);
+insert into t (id,a) values (552,0);
+insert into t (id,a) values (552,1);
+insert into t (id,a) values (552,2);
+insert into t (id,a) values (552,3);
+insert into t (id,a) values (552,4);
+insert into t (id,a) values (552,5);
+insert into t (id,a) values (552,6);
+insert into t (id,a) values (552,7);
+insert into t (id,a) values (552,8);
+insert into t (id,a) values (552,9);
+insert into t (id,a) values (552,10);
+insert into t (id,a) values (552,11);
+insert into t (id,a) values (552,12);
+insert into t (id,a) values (552,13);
+insert into t (id,a) values (552,14);
+insert into t (id,a) values (552,15);
+insert into t (id,a) values (552,16);
+insert into t (id,a) values (552,17);
+insert into t (id,a) values (552,18);
+insert into t (id,a) values (552,19);
+insert into t (id,a) values (552,20);
+insert into t (id,a) values (552,21);
+insert into t (id,a) values (552,22);
+insert into t (id,a) values (552,23);
+insert into t (id,a) values (552,24);
+insert into t (id,a) values (552,25);
+insert into t (id,a) values (552,26);
+insert into t (id,a) values (552,27);
+insert into t (id,a) values (552,28);
+insert into t (id,a) values (552,29);
+insert into t (id,a) values (552,30);
+insert into t (id,a) values (552,31);
+insert into t (id,a) values (552,32);
+insert into t (id,a) values (552,33);
+insert into t (id,a) values (552,34);
+insert into t (id,a) values (552,35);
+insert into t (id,a) values (552,36);
+insert into t (id,a) values (552,37);
+insert into t (id,a) values (552,38);
+insert into t (id,a) values (552,39);
+insert into t (id,a) values (552,40);
+insert into t (id,a) values (552,41);
+insert into t (id,a) values (552,42);
+insert into t (id,a) values (552,43);
+insert into t (id,a) values (552,44);
+insert into t (id,a) values (552,45);
+insert into t (id,a) values (552,46);
+insert into t (id,a) values (552,47);
+insert into t (id,a) values (552,48);
+insert into t (id,a) values (552,49);
+insert into t (id,a) values (552,50);
+insert into t (id,a) values (552,51);
+insert into t (id,a) values (552,52);
+insert into t (id,a) values (552,53);
+insert into t (id,a) values (552,54);
+insert into t (id,a) values (552,55);
+insert into t (id,a) values (552,56);
+insert into t (id,a) values (552,57);
+insert into t (id,a) values (552,58);
+insert into t (id,a) values (552,59);
+insert into t (id,a) values (552,60);
+insert into t (id,a) values (552,61);
+insert into t (id,a) values (552,62);
+insert into t (id,a) values (552,63);
+insert into t (id,a) values (552,64);
+insert into t (id,a) values (552,65);
+insert into t (id,a) values (552,66);
+insert into t (id,a) values (552,67);
+insert into t (id,a) values (552,68);
+insert into t (id,a) values (552,69);
+insert into t (id,a) values (552,70);
+insert into t (id,a) values (552,71);
+insert into t (id,a) values (552,72);
+insert into t (id,a) values (552,73);
+insert into t (id,a) values (552,74);
+insert into t (id,a) values (552,75);
+insert into t (id,a) values (552,76);
+insert into t (id,a) values (552,77);
+insert into t (id,a) values (552,78);
+insert into t (id,a) values (552,79);
+insert into t (id,a) values (552,80);
+insert into t (id,a) values (552,81);
+insert into t (id,a) values (552,82);
+insert into t (id,a) values (552,83);
+insert into t (id,a) values (552,84);
+insert into t (id,a) values (552,85);
+insert into t (id,a) values (552,86);
+insert into t (id,a) values (552,87);
+insert into t (id,a) values (552,88);
+insert into t (id,a) values (552,89);
+insert into t (id,a) values (552,90);
+insert into t (id,a) values (552,91);
+insert into t (id,a) values (552,92);
+insert into t (id,a) values (552,93);
+insert into t (id,a) values (552,94);
+insert into t (id,a) values (552,95);
+insert into t (id,a) values (552,96);
+insert into t (id,a) values (552,97);
+insert into t (id,a) values (552,98);
+insert into t (id,a) values (552,99);
+insert into t (id,a) values (553,0);
+insert into t (id,a) values (553,1);
+insert into t (id,a) values (553,2);
+insert into t (id,a) values (553,3);
+insert into t (id,a) values (553,4);
+insert into t (id,a) values (553,5);
+insert into t (id,a) values (553,6);
+insert into t (id,a) values (553,7);
+insert into t (id,a) values (553,8);
+insert into t (id,a) values (553,9);
+insert into t (id,a) values (553,10);
+insert into t (id,a) values (553,11);
+insert into t (id,a) values (553,12);
+insert into t (id,a) values (553,13);
+insert into t (id,a) values (553,14);
+insert into t (id,a) values (553,15);
+insert into t (id,a) values (553,16);
+insert into t (id,a) values (553,17);
+insert into t (id,a) values (553,18);
+insert into t (id,a) values (553,19);
+insert into t (id,a) values (553,20);
+insert into t (id,a) values (553,21);
+insert into t (id,a) values (553,22);
+insert into t (id,a) values (553,23);
+insert into t (id,a) values (553,24);
+insert into t (id,a) values (553,25);
+insert into t (id,a) values (553,26);
+insert into t (id,a) values (553,27);
+insert into t (id,a) values (553,28);
+insert into t (id,a) values (553,29);
+insert into t (id,a) values (553,30);
+insert into t (id,a) values (553,31);
+insert into t (id,a) values (553,32);
+insert into t (id,a) values (553,33);
+insert into t (id,a) values (553,34);
+insert into t (id,a) values (553,35);
+insert into t (id,a) values (553,36);
+insert into t (id,a) values (553,37);
+insert into t (id,a) values (553,38);
+insert into t (id,a) values (553,39);
+insert into t (id,a) values (553,40);
+insert into t (id,a) values (553,41);
+insert into t (id,a) values (553,42);
+insert into t (id,a) values (553,43);
+insert into t (id,a) values (553,44);
+insert into t (id,a) values (553,45);
+insert into t (id,a) values (553,46);
+insert into t (id,a) values (553,47);
+insert into t (id,a) values (553,48);
+insert into t (id,a) values (553,49);
+insert into t (id,a) values (553,50);
+insert into t (id,a) values (553,51);
+insert into t (id,a) values (553,52);
+insert into t (id,a) values (553,53);
+insert into t (id,a) values (553,54);
+insert into t (id,a) values (553,55);
+insert into t (id,a) values (553,56);
+insert into t (id,a) values (553,57);
+insert into t (id,a) values (553,58);
+insert into t (id,a) values (553,59);
+insert into t (id,a) values (553,60);
+insert into t (id,a) values (553,61);
+insert into t (id,a) values (553,62);
+insert into t (id,a) values (553,63);
+insert into t (id,a) values (553,64);
+insert into t (id,a) values (553,65);
+insert into t (id,a) values (553,66);
+insert into t (id,a) values (553,67);
+insert into t (id,a) values (553,68);
+insert into t (id,a) values (553,69);
+insert into t (id,a) values (553,70);
+insert into t (id,a) values (553,71);
+insert into t (id,a) values (553,72);
+insert into t (id,a) values (553,73);
+insert into t (id,a) values (553,74);
+insert into t (id,a) values (553,75);
+insert into t (id,a) values (553,76);
+insert into t (id,a) values (553,77);
+insert into t (id,a) values (553,78);
+insert into t (id,a) values (553,79);
+insert into t (id,a) values (553,80);
+insert into t (id,a) values (553,81);
+insert into t (id,a) values (553,82);
+insert into t (id,a) values (553,83);
+insert into t (id,a) values (553,84);
+insert into t (id,a) values (553,85);
+insert into t (id,a) values (553,86);
+insert into t (id,a) values (553,87);
+insert into t (id,a) values (553,88);
+insert into t (id,a) values (553,89);
+insert into t (id,a) values (553,90);
+insert into t (id,a) values (553,91);
+insert into t (id,a) values (553,92);
+insert into t (id,a) values (553,93);
+insert into t (id,a) values (553,94);
+insert into t (id,a) values (553,95);
+insert into t (id,a) values (553,96);
+insert into t (id,a) values (553,97);
+insert into t (id,a) values (553,98);
+insert into t (id,a) values (553,99);
+insert into t (id,a) values (554,0);
+insert into t (id,a) values (554,1);
+insert into t (id,a) values (554,2);
+insert into t (id,a) values (554,3);
+insert into t (id,a) values (554,4);
+insert into t (id,a) values (554,5);
+insert into t (id,a) values (554,6);
+insert into t (id,a) values (554,7);
+insert into t (id,a) values (554,8);
+insert into t (id,a) values (554,9);
+insert into t (id,a) values (554,10);
+insert into t (id,a) values (554,11);
+insert into t (id,a) values (554,12);
+insert into t (id,a) values (554,13);
+insert into t (id,a) values (554,14);
+insert into t (id,a) values (554,15);
+insert into t (id,a) values (554,16);
+insert into t (id,a) values (554,17);
+insert into t (id,a) values (554,18);
+insert into t (id,a) values (554,19);
+insert into t (id,a) values (554,20);
+insert into t (id,a) values (554,21);
+insert into t (id,a) values (554,22);
+insert into t (id,a) values (554,23);
+insert into t (id,a) values (554,24);
+insert into t (id,a) values (554,25);
+insert into t (id,a) values (554,26);
+insert into t (id,a) values (554,27);
+insert into t (id,a) values (554,28);
+insert into t (id,a) values (554,29);
+insert into t (id,a) values (554,30);
+insert into t (id,a) values (554,31);
+insert into t (id,a) values (554,32);
+insert into t (id,a) values (554,33);
+insert into t (id,a) values (554,34);
+insert into t (id,a) values (554,35);
+insert into t (id,a) values (554,36);
+insert into t (id,a) values (554,37);
+insert into t (id,a) values (554,38);
+insert into t (id,a) values (554,39);
+insert into t (id,a) values (554,40);
+insert into t (id,a) values (554,41);
+insert into t (id,a) values (554,42);
+insert into t (id,a) values (554,43);
+insert into t (id,a) values (554,44);
+insert into t (id,a) values (554,45);
+insert into t (id,a) values (554,46);
+insert into t (id,a) values (554,47);
+insert into t (id,a) values (554,48);
+insert into t (id,a) values (554,49);
+insert into t (id,a) values (554,50);
+insert into t (id,a) values (554,51);
+insert into t (id,a) values (554,52);
+insert into t (id,a) values (554,53);
+insert into t (id,a) values (554,54);
+insert into t (id,a) values (554,55);
+insert into t (id,a) values (554,56);
+insert into t (id,a) values (554,57);
+insert into t (id,a) values (554,58);
+insert into t (id,a) values (554,59);
+insert into t (id,a) values (554,60);
+insert into t (id,a) values (554,61);
+insert into t (id,a) values (554,62);
+insert into t (id,a) values (554,63);
+insert into t (id,a) values (554,64);
+insert into t (id,a) values (554,65);
+insert into t (id,a) values (554,66);
+insert into t (id,a) values (554,67);
+insert into t (id,a) values (554,68);
+insert into t (id,a) values (554,69);
+insert into t (id,a) values (554,70);
+insert into t (id,a) values (554,71);
+insert into t (id,a) values (554,72);
+insert into t (id,a) values (554,73);
+insert into t (id,a) values (554,74);
+insert into t (id,a) values (554,75);
+insert into t (id,a) values (554,76);
+insert into t (id,a) values (554,77);
+insert into t (id,a) values (554,78);
+insert into t (id,a) values (554,79);
+insert into t (id,a) values (554,80);
+insert into t (id,a) values (554,81);
+insert into t (id,a) values (554,82);
+insert into t (id,a) values (554,83);
+insert into t (id,a) values (554,84);
+insert into t (id,a) values (554,85);
+insert into t (id,a) values (554,86);
+insert into t (id,a) values (554,87);
+insert into t (id,a) values (554,88);
+insert into t (id,a) values (554,89);
+insert into t (id,a) values (554,90);
+insert into t (id,a) values (554,91);
+insert into t (id,a) values (554,92);
+insert into t (id,a) values (554,93);
+insert into t (id,a) values (554,94);
+insert into t (id,a) values (554,95);
+insert into t (id,a) values (554,96);
+insert into t (id,a) values (554,97);
+insert into t (id,a) values (554,98);
+insert into t (id,a) values (554,99);
+insert into t (id,a) values (555,0);
+insert into t (id,a) values (555,1);
+insert into t (id,a) values (555,2);
+insert into t (id,a) values (555,3);
+insert into t (id,a) values (555,4);
+insert into t (id,a) values (555,5);
+insert into t (id,a) values (555,6);
+insert into t (id,a) values (555,7);
+insert into t (id,a) values (555,8);
+insert into t (id,a) values (555,9);
+insert into t (id,a) values (555,10);
+insert into t (id,a) values (555,11);
+insert into t (id,a) values (555,12);
+insert into t (id,a) values (555,13);
+insert into t (id,a) values (555,14);
+insert into t (id,a) values (555,15);
+insert into t (id,a) values (555,16);
+insert into t (id,a) values (555,17);
+insert into t (id,a) values (555,18);
+insert into t (id,a) values (555,19);
+insert into t (id,a) values (555,20);
+insert into t (id,a) values (555,21);
+insert into t (id,a) values (555,22);
+insert into t (id,a) values (555,23);
+insert into t (id,a) values (555,24);
+insert into t (id,a) values (555,25);
+insert into t (id,a) values (555,26);
+insert into t (id,a) values (555,27);
+insert into t (id,a) values (555,28);
+insert into t (id,a) values (555,29);
+insert into t (id,a) values (555,30);
+insert into t (id,a) values (555,31);
+insert into t (id,a) values (555,32);
+insert into t (id,a) values (555,33);
+insert into t (id,a) values (555,34);
+insert into t (id,a) values (555,35);
+insert into t (id,a) values (555,36);
+insert into t (id,a) values (555,37);
+insert into t (id,a) values (555,38);
+insert into t (id,a) values (555,39);
+insert into t (id,a) values (555,40);
+insert into t (id,a) values (555,41);
+insert into t (id,a) values (555,42);
+insert into t (id,a) values (555,43);
+insert into t (id,a) values (555,44);
+insert into t (id,a) values (555,45);
+insert into t (id,a) values (555,46);
+insert into t (id,a) values (555,47);
+insert into t (id,a) values (555,48);
+insert into t (id,a) values (555,49);
+insert into t (id,a) values (555,50);
+insert into t (id,a) values (555,51);
+insert into t (id,a) values (555,52);
+insert into t (id,a) values (555,53);
+insert into t (id,a) values (555,54);
+insert into t (id,a) values (555,55);
+insert into t (id,a) values (555,56);
+insert into t (id,a) values (555,57);
+insert into t (id,a) values (555,58);
+insert into t (id,a) values (555,59);
+insert into t (id,a) values (555,60);
+insert into t (id,a) values (555,61);
+insert into t (id,a) values (555,62);
+insert into t (id,a) values (555,63);
+insert into t (id,a) values (555,64);
+insert into t (id,a) values (555,65);
+insert into t (id,a) values (555,66);
+insert into t (id,a) values (555,67);
+insert into t (id,a) values (555,68);
+insert into t (id,a) values (555,69);
+insert into t (id,a) values (555,70);
+insert into t (id,a) values (555,71);
+insert into t (id,a) values (555,72);
+insert into t (id,a) values (555,73);
+insert into t (id,a) values (555,74);
+insert into t (id,a) values (555,75);
+insert into t (id,a) values (555,76);
+insert into t (id,a) values (555,77);
+insert into t (id,a) values (555,78);
+insert into t (id,a) values (555,79);
+insert into t (id,a) values (555,80);
+insert into t (id,a) values (555,81);
+insert into t (id,a) values (555,82);
+insert into t (id,a) values (555,83);
+insert into t (id,a) values (555,84);
+insert into t (id,a) values (555,85);
+insert into t (id,a) values (555,86);
+insert into t (id,a) values (555,87);
+insert into t (id,a) values (555,88);
+insert into t (id,a) values (555,89);
+insert into t (id,a) values (555,90);
+insert into t (id,a) values (555,91);
+insert into t (id,a) values (555,92);
+insert into t (id,a) values (555,93);
+insert into t (id,a) values (555,94);
+insert into t (id,a) values (555,95);
+insert into t (id,a) values (555,96);
+insert into t (id,a) values (555,97);
+insert into t (id,a) values (555,98);
+insert into t (id,a) values (555,99);
+insert into t (id,a) values (556,0);
+insert into t (id,a) values (556,1);
+insert into t (id,a) values (556,2);
+insert into t (id,a) values (556,3);
+insert into t (id,a) values (556,4);
+insert into t (id,a) values (556,5);
+insert into t (id,a) values (556,6);
+insert into t (id,a) values (556,7);
+insert into t (id,a) values (556,8);
+insert into t (id,a) values (556,9);
+insert into t (id,a) values (556,10);
+insert into t (id,a) values (556,11);
+insert into t (id,a) values (556,12);
+insert into t (id,a) values (556,13);
+insert into t (id,a) values (556,14);
+insert into t (id,a) values (556,15);
+insert into t (id,a) values (556,16);
+insert into t (id,a) values (556,17);
+insert into t (id,a) values (556,18);
+insert into t (id,a) values (556,19);
+insert into t (id,a) values (556,20);
+insert into t (id,a) values (556,21);
+insert into t (id,a) values (556,22);
+insert into t (id,a) values (556,23);
+insert into t (id,a) values (556,24);
+insert into t (id,a) values (556,25);
+insert into t (id,a) values (556,26);
+insert into t (id,a) values (556,27);
+insert into t (id,a) values (556,28);
+insert into t (id,a) values (556,29);
+insert into t (id,a) values (556,30);
+insert into t (id,a) values (556,31);
+insert into t (id,a) values (556,32);
+insert into t (id,a) values (556,33);
+insert into t (id,a) values (556,34);
+insert into t (id,a) values (556,35);
+insert into t (id,a) values (556,36);
+insert into t (id,a) values (556,37);
+insert into t (id,a) values (556,38);
+insert into t (id,a) values (556,39);
+insert into t (id,a) values (556,40);
+insert into t (id,a) values (556,41);
+insert into t (id,a) values (556,42);
+insert into t (id,a) values (556,43);
+insert into t (id,a) values (556,44);
+insert into t (id,a) values (556,45);
+insert into t (id,a) values (556,46);
+insert into t (id,a) values (556,47);
+insert into t (id,a) values (556,48);
+insert into t (id,a) values (556,49);
+insert into t (id,a) values (556,50);
+insert into t (id,a) values (556,51);
+insert into t (id,a) values (556,52);
+insert into t (id,a) values (556,53);
+insert into t (id,a) values (556,54);
+insert into t (id,a) values (556,55);
+insert into t (id,a) values (556,56);
+insert into t (id,a) values (556,57);
+insert into t (id,a) values (556,58);
+insert into t (id,a) values (556,59);
+insert into t (id,a) values (556,60);
+insert into t (id,a) values (556,61);
+insert into t (id,a) values (556,62);
+insert into t (id,a) values (556,63);
+insert into t (id,a) values (556,64);
+insert into t (id,a) values (556,65);
+insert into t (id,a) values (556,66);
+insert into t (id,a) values (556,67);
+insert into t (id,a) values (556,68);
+insert into t (id,a) values (556,69);
+insert into t (id,a) values (556,70);
+insert into t (id,a) values (556,71);
+insert into t (id,a) values (556,72);
+insert into t (id,a) values (556,73);
+insert into t (id,a) values (556,74);
+insert into t (id,a) values (556,75);
+insert into t (id,a) values (556,76);
+insert into t (id,a) values (556,77);
+insert into t (id,a) values (556,78);
+insert into t (id,a) values (556,79);
+insert into t (id,a) values (556,80);
+insert into t (id,a) values (556,81);
+insert into t (id,a) values (556,82);
+insert into t (id,a) values (556,83);
+insert into t (id,a) values (556,84);
+insert into t (id,a) values (556,85);
+insert into t (id,a) values (556,86);
+insert into t (id,a) values (556,87);
+insert into t (id,a) values (556,88);
+insert into t (id,a) values (556,89);
+insert into t (id,a) values (556,90);
+insert into t (id,a) values (556,91);
+insert into t (id,a) values (556,92);
+insert into t (id,a) values (556,93);
+insert into t (id,a) values (556,94);
+insert into t (id,a) values (556,95);
+insert into t (id,a) values (556,96);
+insert into t (id,a) values (556,97);
+insert into t (id,a) values (556,98);
+insert into t (id,a) values (556,99);
+insert into t (id,a) values (557,0);
+insert into t (id,a) values (557,1);
+insert into t (id,a) values (557,2);
+insert into t (id,a) values (557,3);
+insert into t (id,a) values (557,4);
+insert into t (id,a) values (557,5);
+insert into t (id,a) values (557,6);
+insert into t (id,a) values (557,7);
+insert into t (id,a) values (557,8);
+insert into t (id,a) values (557,9);
+insert into t (id,a) values (557,10);
+insert into t (id,a) values (557,11);
+insert into t (id,a) values (557,12);
+insert into t (id,a) values (557,13);
+insert into t (id,a) values (557,14);
+insert into t (id,a) values (557,15);
+insert into t (id,a) values (557,16);
+insert into t (id,a) values (557,17);
+insert into t (id,a) values (557,18);
+insert into t (id,a) values (557,19);
+insert into t (id,a) values (557,20);
+insert into t (id,a) values (557,21);
+insert into t (id,a) values (557,22);
+insert into t (id,a) values (557,23);
+insert into t (id,a) values (557,24);
+insert into t (id,a) values (557,25);
+insert into t (id,a) values (557,26);
+insert into t (id,a) values (557,27);
+insert into t (id,a) values (557,28);
+insert into t (id,a) values (557,29);
+insert into t (id,a) values (557,30);
+insert into t (id,a) values (557,31);
+insert into t (id,a) values (557,32);
+insert into t (id,a) values (557,33);
+insert into t (id,a) values (557,34);
+insert into t (id,a) values (557,35);
+insert into t (id,a) values (557,36);
+insert into t (id,a) values (557,37);
+insert into t (id,a) values (557,38);
+insert into t (id,a) values (557,39);
+insert into t (id,a) values (557,40);
+insert into t (id,a) values (557,41);
+insert into t (id,a) values (557,42);
+insert into t (id,a) values (557,43);
+insert into t (id,a) values (557,44);
+insert into t (id,a) values (557,45);
+insert into t (id,a) values (557,46);
+insert into t (id,a) values (557,47);
+insert into t (id,a) values (557,48);
+insert into t (id,a) values (557,49);
+insert into t (id,a) values (557,50);
+insert into t (id,a) values (557,51);
+insert into t (id,a) values (557,52);
+insert into t (id,a) values (557,53);
+insert into t (id,a) values (557,54);
+insert into t (id,a) values (557,55);
+insert into t (id,a) values (557,56);
+insert into t (id,a) values (557,57);
+insert into t (id,a) values (557,58);
+insert into t (id,a) values (557,59);
+insert into t (id,a) values (557,60);
+insert into t (id,a) values (557,61);
+insert into t (id,a) values (557,62);
+insert into t (id,a) values (557,63);
+insert into t (id,a) values (557,64);
+insert into t (id,a) values (557,65);
+insert into t (id,a) values (557,66);
+insert into t (id,a) values (557,67);
+insert into t (id,a) values (557,68);
+insert into t (id,a) values (557,69);
+insert into t (id,a) values (557,70);
+insert into t (id,a) values (557,71);
+insert into t (id,a) values (557,72);
+insert into t (id,a) values (557,73);
+insert into t (id,a) values (557,74);
+insert into t (id,a) values (557,75);
+insert into t (id,a) values (557,76);
+insert into t (id,a) values (557,77);
+insert into t (id,a) values (557,78);
+insert into t (id,a) values (557,79);
+insert into t (id,a) values (557,80);
+insert into t (id,a) values (557,81);
+insert into t (id,a) values (557,82);
+insert into t (id,a) values (557,83);
+insert into t (id,a) values (557,84);
+insert into t (id,a) values (557,85);
+insert into t (id,a) values (557,86);
+insert into t (id,a) values (557,87);
+insert into t (id,a) values (557,88);
+insert into t (id,a) values (557,89);
+insert into t (id,a) values (557,90);
+insert into t (id,a) values (557,91);
+insert into t (id,a) values (557,92);
+insert into t (id,a) values (557,93);
+insert into t (id,a) values (557,94);
+insert into t (id,a) values (557,95);
+insert into t (id,a) values (557,96);
+insert into t (id,a) values (557,97);
+insert into t (id,a) values (557,98);
+insert into t (id,a) values (557,99);
+insert into t (id,a) values (558,0);
+insert into t (id,a) values (558,1);
+insert into t (id,a) values (558,2);
+insert into t (id,a) values (558,3);
+insert into t (id,a) values (558,4);
+insert into t (id,a) values (558,5);
+insert into t (id,a) values (558,6);
+insert into t (id,a) values (558,7);
+insert into t (id,a) values (558,8);
+insert into t (id,a) values (558,9);
+insert into t (id,a) values (558,10);
+insert into t (id,a) values (558,11);
+insert into t (id,a) values (558,12);
+insert into t (id,a) values (558,13);
+insert into t (id,a) values (558,14);
+insert into t (id,a) values (558,15);
+insert into t (id,a) values (558,16);
+insert into t (id,a) values (558,17);
+insert into t (id,a) values (558,18);
+insert into t (id,a) values (558,19);
+insert into t (id,a) values (558,20);
+insert into t (id,a) values (558,21);
+insert into t (id,a) values (558,22);
+insert into t (id,a) values (558,23);
+insert into t (id,a) values (558,24);
+insert into t (id,a) values (558,25);
+insert into t (id,a) values (558,26);
+insert into t (id,a) values (558,27);
+insert into t (id,a) values (558,28);
+insert into t (id,a) values (558,29);
+insert into t (id,a) values (558,30);
+insert into t (id,a) values (558,31);
+insert into t (id,a) values (558,32);
+insert into t (id,a) values (558,33);
+insert into t (id,a) values (558,34);
+insert into t (id,a) values (558,35);
+insert into t (id,a) values (558,36);
+insert into t (id,a) values (558,37);
+insert into t (id,a) values (558,38);
+insert into t (id,a) values (558,39);
+insert into t (id,a) values (558,40);
+insert into t (id,a) values (558,41);
+insert into t (id,a) values (558,42);
+insert into t (id,a) values (558,43);
+insert into t (id,a) values (558,44);
+insert into t (id,a) values (558,45);
+insert into t (id,a) values (558,46);
+insert into t (id,a) values (558,47);
+insert into t (id,a) values (558,48);
+insert into t (id,a) values (558,49);
+insert into t (id,a) values (558,50);
+insert into t (id,a) values (558,51);
+insert into t (id,a) values (558,52);
+insert into t (id,a) values (558,53);
+insert into t (id,a) values (558,54);
+insert into t (id,a) values (558,55);
+insert into t (id,a) values (558,56);
+insert into t (id,a) values (558,57);
+insert into t (id,a) values (558,58);
+insert into t (id,a) values (558,59);
+insert into t (id,a) values (558,60);
+insert into t (id,a) values (558,61);
+insert into t (id,a) values (558,62);
+insert into t (id,a) values (558,63);
+insert into t (id,a) values (558,64);
+insert into t (id,a) values (558,65);
+insert into t (id,a) values (558,66);
+insert into t (id,a) values (558,67);
+insert into t (id,a) values (558,68);
+insert into t (id,a) values (558,69);
+insert into t (id,a) values (558,70);
+insert into t (id,a) values (558,71);
+insert into t (id,a) values (558,72);
+insert into t (id,a) values (558,73);
+insert into t (id,a) values (558,74);
+insert into t (id,a) values (558,75);
+insert into t (id,a) values (558,76);
+insert into t (id,a) values (558,77);
+insert into t (id,a) values (558,78);
+insert into t (id,a) values (558,79);
+insert into t (id,a) values (558,80);
+insert into t (id,a) values (558,81);
+insert into t (id,a) values (558,82);
+insert into t (id,a) values (558,83);
+insert into t (id,a) values (558,84);
+insert into t (id,a) values (558,85);
+insert into t (id,a) values (558,86);
+insert into t (id,a) values (558,87);
+insert into t (id,a) values (558,88);
+insert into t (id,a) values (558,89);
+insert into t (id,a) values (558,90);
+insert into t (id,a) values (558,91);
+insert into t (id,a) values (558,92);
+insert into t (id,a) values (558,93);
+insert into t (id,a) values (558,94);
+insert into t (id,a) values (558,95);
+insert into t (id,a) values (558,96);
+insert into t (id,a) values (558,97);
+insert into t (id,a) values (558,98);
+insert into t (id,a) values (558,99);
+insert into t (id,a) values (559,0);
+insert into t (id,a) values (559,1);
+insert into t (id,a) values (559,2);
+insert into t (id,a) values (559,3);
+insert into t (id,a) values (559,4);
+insert into t (id,a) values (559,5);
+insert into t (id,a) values (559,6);
+insert into t (id,a) values (559,7);
+insert into t (id,a) values (559,8);
+insert into t (id,a) values (559,9);
+insert into t (id,a) values (559,10);
+insert into t (id,a) values (559,11);
+insert into t (id,a) values (559,12);
+insert into t (id,a) values (559,13);
+insert into t (id,a) values (559,14);
+insert into t (id,a) values (559,15);
+insert into t (id,a) values (559,16);
+insert into t (id,a) values (559,17);
+insert into t (id,a) values (559,18);
+insert into t (id,a) values (559,19);
+insert into t (id,a) values (559,20);
+insert into t (id,a) values (559,21);
+insert into t (id,a) values (559,22);
+insert into t (id,a) values (559,23);
+insert into t (id,a) values (559,24);
+insert into t (id,a) values (559,25);
+insert into t (id,a) values (559,26);
+insert into t (id,a) values (559,27);
+insert into t (id,a) values (559,28);
+insert into t (id,a) values (559,29);
+insert into t (id,a) values (559,30);
+insert into t (id,a) values (559,31);
+insert into t (id,a) values (559,32);
+insert into t (id,a) values (559,33);
+insert into t (id,a) values (559,34);
+insert into t (id,a) values (559,35);
+insert into t (id,a) values (559,36);
+insert into t (id,a) values (559,37);
+insert into t (id,a) values (559,38);
+insert into t (id,a) values (559,39);
+insert into t (id,a) values (559,40);
+insert into t (id,a) values (559,41);
+insert into t (id,a) values (559,42);
+insert into t (id,a) values (559,43);
+insert into t (id,a) values (559,44);
+insert into t (id,a) values (559,45);
+insert into t (id,a) values (559,46);
+insert into t (id,a) values (559,47);
+insert into t (id,a) values (559,48);
+insert into t (id,a) values (559,49);
+insert into t (id,a) values (559,50);
+insert into t (id,a) values (559,51);
+insert into t (id,a) values (559,52);
+insert into t (id,a) values (559,53);
+insert into t (id,a) values (559,54);
+insert into t (id,a) values (559,55);
+insert into t (id,a) values (559,56);
+insert into t (id,a) values (559,57);
+insert into t (id,a) values (559,58);
+insert into t (id,a) values (559,59);
+insert into t (id,a) values (559,60);
+insert into t (id,a) values (559,61);
+insert into t (id,a) values (559,62);
+insert into t (id,a) values (559,63);
+insert into t (id,a) values (559,64);
+insert into t (id,a) values (559,65);
+insert into t (id,a) values (559,66);
+insert into t (id,a) values (559,67);
+insert into t (id,a) values (559,68);
+insert into t (id,a) values (559,69);
+insert into t (id,a) values (559,70);
+insert into t (id,a) values (559,71);
+insert into t (id,a) values (559,72);
+insert into t (id,a) values (559,73);
+insert into t (id,a) values (559,74);
+insert into t (id,a) values (559,75);
+insert into t (id,a) values (559,76);
+insert into t (id,a) values (559,77);
+insert into t (id,a) values (559,78);
+insert into t (id,a) values (559,79);
+insert into t (id,a) values (559,80);
+insert into t (id,a) values (559,81);
+insert into t (id,a) values (559,82);
+insert into t (id,a) values (559,83);
+insert into t (id,a) values (559,84);
+insert into t (id,a) values (559,85);
+insert into t (id,a) values (559,86);
+insert into t (id,a) values (559,87);
+insert into t (id,a) values (559,88);
+insert into t (id,a) values (559,89);
+insert into t (id,a) values (559,90);
+insert into t (id,a) values (559,91);
+insert into t (id,a) values (559,92);
+insert into t (id,a) values (559,93);
+insert into t (id,a) values (559,94);
+insert into t (id,a) values (559,95);
+insert into t (id,a) values (559,96);
+insert into t (id,a) values (559,97);
+insert into t (id,a) values (559,98);
+insert into t (id,a) values (559,99);
+insert into t (id,a) values (560,0);
+insert into t (id,a) values (560,1);
+insert into t (id,a) values (560,2);
+insert into t (id,a) values (560,3);
+insert into t (id,a) values (560,4);
+insert into t (id,a) values (560,5);
+insert into t (id,a) values (560,6);
+insert into t (id,a) values (560,7);
+insert into t (id,a) values (560,8);
+insert into t (id,a) values (560,9);
+insert into t (id,a) values (560,10);
+insert into t (id,a) values (560,11);
+insert into t (id,a) values (560,12);
+insert into t (id,a) values (560,13);
+insert into t (id,a) values (560,14);
+insert into t (id,a) values (560,15);
+insert into t (id,a) values (560,16);
+insert into t (id,a) values (560,17);
+insert into t (id,a) values (560,18);
+insert into t (id,a) values (560,19);
+insert into t (id,a) values (560,20);
+insert into t (id,a) values (560,21);
+insert into t (id,a) values (560,22);
+insert into t (id,a) values (560,23);
+insert into t (id,a) values (560,24);
+insert into t (id,a) values (560,25);
+insert into t (id,a) values (560,26);
+insert into t (id,a) values (560,27);
+insert into t (id,a) values (560,28);
+insert into t (id,a) values (560,29);
+insert into t (id,a) values (560,30);
+insert into t (id,a) values (560,31);
+insert into t (id,a) values (560,32);
+insert into t (id,a) values (560,33);
+insert into t (id,a) values (560,34);
+insert into t (id,a) values (560,35);
+insert into t (id,a) values (560,36);
+insert into t (id,a) values (560,37);
+insert into t (id,a) values (560,38);
+insert into t (id,a) values (560,39);
+insert into t (id,a) values (560,40);
+insert into t (id,a) values (560,41);
+insert into t (id,a) values (560,42);
+insert into t (id,a) values (560,43);
+insert into t (id,a) values (560,44);
+insert into t (id,a) values (560,45);
+insert into t (id,a) values (560,46);
+insert into t (id,a) values (560,47);
+insert into t (id,a) values (560,48);
+insert into t (id,a) values (560,49);
+insert into t (id,a) values (560,50);
+insert into t (id,a) values (560,51);
+insert into t (id,a) values (560,52);
+insert into t (id,a) values (560,53);
+insert into t (id,a) values (560,54);
+insert into t (id,a) values (560,55);
+insert into t (id,a) values (560,56);
+insert into t (id,a) values (560,57);
+insert into t (id,a) values (560,58);
+insert into t (id,a) values (560,59);
+insert into t (id,a) values (560,60);
+insert into t (id,a) values (560,61);
+insert into t (id,a) values (560,62);
+insert into t (id,a) values (560,63);
+insert into t (id,a) values (560,64);
+insert into t (id,a) values (560,65);
+insert into t (id,a) values (560,66);
+insert into t (id,a) values (560,67);
+insert into t (id,a) values (560,68);
+insert into t (id,a) values (560,69);
+insert into t (id,a) values (560,70);
+insert into t (id,a) values (560,71);
+insert into t (id,a) values (560,72);
+insert into t (id,a) values (560,73);
+insert into t (id,a) values (560,74);
+insert into t (id,a) values (560,75);
+insert into t (id,a) values (560,76);
+insert into t (id,a) values (560,77);
+insert into t (id,a) values (560,78);
+insert into t (id,a) values (560,79);
+insert into t (id,a) values (560,80);
+insert into t (id,a) values (560,81);
+insert into t (id,a) values (560,82);
+insert into t (id,a) values (560,83);
+insert into t (id,a) values (560,84);
+insert into t (id,a) values (560,85);
+insert into t (id,a) values (560,86);
+insert into t (id,a) values (560,87);
+insert into t (id,a) values (560,88);
+insert into t (id,a) values (560,89);
+insert into t (id,a) values (560,90);
+insert into t (id,a) values (560,91);
+insert into t (id,a) values (560,92);
+insert into t (id,a) values (560,93);
+insert into t (id,a) values (560,94);
+insert into t (id,a) values (560,95);
+insert into t (id,a) values (560,96);
+insert into t (id,a) values (560,97);
+insert into t (id,a) values (560,98);
+insert into t (id,a) values (560,99);
+insert into t (id,a) values (561,0);
+insert into t (id,a) values (561,1);
+insert into t (id,a) values (561,2);
+insert into t (id,a) values (561,3);
+insert into t (id,a) values (561,4);
+insert into t (id,a) values (561,5);
+insert into t (id,a) values (561,6);
+insert into t (id,a) values (561,7);
+insert into t (id,a) values (561,8);
+insert into t (id,a) values (561,9);
+insert into t (id,a) values (561,10);
+insert into t (id,a) values (561,11);
+insert into t (id,a) values (561,12);
+insert into t (id,a) values (561,13);
+insert into t (id,a) values (561,14);
+insert into t (id,a) values (561,15);
+insert into t (id,a) values (561,16);
+insert into t (id,a) values (561,17);
+insert into t (id,a) values (561,18);
+insert into t (id,a) values (561,19);
+insert into t (id,a) values (561,20);
+insert into t (id,a) values (561,21);
+insert into t (id,a) values (561,22);
+insert into t (id,a) values (561,23);
+insert into t (id,a) values (561,24);
+insert into t (id,a) values (561,25);
+insert into t (id,a) values (561,26);
+insert into t (id,a) values (561,27);
+insert into t (id,a) values (561,28);
+insert into t (id,a) values (561,29);
+insert into t (id,a) values (561,30);
+insert into t (id,a) values (561,31);
+insert into t (id,a) values (561,32);
+insert into t (id,a) values (561,33);
+insert into t (id,a) values (561,34);
+insert into t (id,a) values (561,35);
+insert into t (id,a) values (561,36);
+insert into t (id,a) values (561,37);
+insert into t (id,a) values (561,38);
+insert into t (id,a) values (561,39);
+insert into t (id,a) values (561,40);
+insert into t (id,a) values (561,41);
+insert into t (id,a) values (561,42);
+insert into t (id,a) values (561,43);
+insert into t (id,a) values (561,44);
+insert into t (id,a) values (561,45);
+insert into t (id,a) values (561,46);
+insert into t (id,a) values (561,47);
+insert into t (id,a) values (561,48);
+insert into t (id,a) values (561,49);
+insert into t (id,a) values (561,50);
+insert into t (id,a) values (561,51);
+insert into t (id,a) values (561,52);
+insert into t (id,a) values (561,53);
+insert into t (id,a) values (561,54);
+insert into t (id,a) values (561,55);
+insert into t (id,a) values (561,56);
+insert into t (id,a) values (561,57);
+insert into t (id,a) values (561,58);
+insert into t (id,a) values (561,59);
+insert into t (id,a) values (561,60);
+insert into t (id,a) values (561,61);
+insert into t (id,a) values (561,62);
+insert into t (id,a) values (561,63);
+insert into t (id,a) values (561,64);
+insert into t (id,a) values (561,65);
+insert into t (id,a) values (561,66);
+insert into t (id,a) values (561,67);
+insert into t (id,a) values (561,68);
+insert into t (id,a) values (561,69);
+insert into t (id,a) values (561,70);
+insert into t (id,a) values (561,71);
+insert into t (id,a) values (561,72);
+insert into t (id,a) values (561,73);
+insert into t (id,a) values (561,74);
+insert into t (id,a) values (561,75);
+insert into t (id,a) values (561,76);
+insert into t (id,a) values (561,77);
+insert into t (id,a) values (561,78);
+insert into t (id,a) values (561,79);
+insert into t (id,a) values (561,80);
+insert into t (id,a) values (561,81);
+insert into t (id,a) values (561,82);
+insert into t (id,a) values (561,83);
+insert into t (id,a) values (561,84);
+insert into t (id,a) values (561,85);
+insert into t (id,a) values (561,86);
+insert into t (id,a) values (561,87);
+insert into t (id,a) values (561,88);
+insert into t (id,a) values (561,89);
+insert into t (id,a) values (561,90);
+insert into t (id,a) values (561,91);
+insert into t (id,a) values (561,92);
+insert into t (id,a) values (561,93);
+insert into t (id,a) values (561,94);
+insert into t (id,a) values (561,95);
+insert into t (id,a) values (561,96);
+insert into t (id,a) values (561,97);
+insert into t (id,a) values (561,98);
+insert into t (id,a) values (561,99);
+insert into t (id,a) values (562,0);
+insert into t (id,a) values (562,1);
+insert into t (id,a) values (562,2);
+insert into t (id,a) values (562,3);
+insert into t (id,a) values (562,4);
+insert into t (id,a) values (562,5);
+insert into t (id,a) values (562,6);
+insert into t (id,a) values (562,7);
+insert into t (id,a) values (562,8);
+insert into t (id,a) values (562,9);
+insert into t (id,a) values (562,10);
+insert into t (id,a) values (562,11);
+insert into t (id,a) values (562,12);
+insert into t (id,a) values (562,13);
+insert into t (id,a) values (562,14);
+insert into t (id,a) values (562,15);
+insert into t (id,a) values (562,16);
+insert into t (id,a) values (562,17);
+insert into t (id,a) values (562,18);
+insert into t (id,a) values (562,19);
+insert into t (id,a) values (562,20);
+insert into t (id,a) values (562,21);
+insert into t (id,a) values (562,22);
+insert into t (id,a) values (562,23);
+insert into t (id,a) values (562,24);
+insert into t (id,a) values (562,25);
+insert into t (id,a) values (562,26);
+insert into t (id,a) values (562,27);
+insert into t (id,a) values (562,28);
+insert into t (id,a) values (562,29);
+insert into t (id,a) values (562,30);
+insert into t (id,a) values (562,31);
+insert into t (id,a) values (562,32);
+insert into t (id,a) values (562,33);
+insert into t (id,a) values (562,34);
+insert into t (id,a) values (562,35);
+insert into t (id,a) values (562,36);
+insert into t (id,a) values (562,37);
+insert into t (id,a) values (562,38);
+insert into t (id,a) values (562,39);
+insert into t (id,a) values (562,40);
+insert into t (id,a) values (562,41);
+insert into t (id,a) values (562,42);
+insert into t (id,a) values (562,43);
+insert into t (id,a) values (562,44);
+insert into t (id,a) values (562,45);
+insert into t (id,a) values (562,46);
+insert into t (id,a) values (562,47);
+insert into t (id,a) values (562,48);
+insert into t (id,a) values (562,49);
+insert into t (id,a) values (562,50);
+insert into t (id,a) values (562,51);
+insert into t (id,a) values (562,52);
+insert into t (id,a) values (562,53);
+insert into t (id,a) values (562,54);
+insert into t (id,a) values (562,55);
+insert into t (id,a) values (562,56);
+insert into t (id,a) values (562,57);
+insert into t (id,a) values (562,58);
+insert into t (id,a) values (562,59);
+insert into t (id,a) values (562,60);
+insert into t (id,a) values (562,61);
+insert into t (id,a) values (562,62);
+insert into t (id,a) values (562,63);
+insert into t (id,a) values (562,64);
+insert into t (id,a) values (562,65);
+insert into t (id,a) values (562,66);
+insert into t (id,a) values (562,67);
+insert into t (id,a) values (562,68);
+insert into t (id,a) values (562,69);
+insert into t (id,a) values (562,70);
+insert into t (id,a) values (562,71);
+insert into t (id,a) values (562,72);
+insert into t (id,a) values (562,73);
+insert into t (id,a) values (562,74);
+insert into t (id,a) values (562,75);
+insert into t (id,a) values (562,76);
+insert into t (id,a) values (562,77);
+insert into t (id,a) values (562,78);
+insert into t (id,a) values (562,79);
+insert into t (id,a) values (562,80);
+insert into t (id,a) values (562,81);
+insert into t (id,a) values (562,82);
+insert into t (id,a) values (562,83);
+insert into t (id,a) values (562,84);
+insert into t (id,a) values (562,85);
+insert into t (id,a) values (562,86);
+insert into t (id,a) values (562,87);
+insert into t (id,a) values (562,88);
+insert into t (id,a) values (562,89);
+insert into t (id,a) values (562,90);
+insert into t (id,a) values (562,91);
+insert into t (id,a) values (562,92);
+insert into t (id,a) values (562,93);
+insert into t (id,a) values (562,94);
+insert into t (id,a) values (562,95);
+insert into t (id,a) values (562,96);
+insert into t (id,a) values (562,97);
+insert into t (id,a) values (562,98);
+insert into t (id,a) values (562,99);
+insert into t (id,a) values (563,0);
+insert into t (id,a) values (563,1);
+insert into t (id,a) values (563,2);
+insert into t (id,a) values (563,3);
+insert into t (id,a) values (563,4);
+insert into t (id,a) values (563,5);
+insert into t (id,a) values (563,6);
+insert into t (id,a) values (563,7);
+insert into t (id,a) values (563,8);
+insert into t (id,a) values (563,9);
+insert into t (id,a) values (563,10);
+insert into t (id,a) values (563,11);
+insert into t (id,a) values (563,12);
+insert into t (id,a) values (563,13);
+insert into t (id,a) values (563,14);
+insert into t (id,a) values (563,15);
+insert into t (id,a) values (563,16);
+insert into t (id,a) values (563,17);
+insert into t (id,a) values (563,18);
+insert into t (id,a) values (563,19);
+insert into t (id,a) values (563,20);
+insert into t (id,a) values (563,21);
+insert into t (id,a) values (563,22);
+insert into t (id,a) values (563,23);
+insert into t (id,a) values (563,24);
+insert into t (id,a) values (563,25);
+insert into t (id,a) values (563,26);
+insert into t (id,a) values (563,27);
+insert into t (id,a) values (563,28);
+insert into t (id,a) values (563,29);
+insert into t (id,a) values (563,30);
+insert into t (id,a) values (563,31);
+insert into t (id,a) values (563,32);
+insert into t (id,a) values (563,33);
+insert into t (id,a) values (563,34);
+insert into t (id,a) values (563,35);
+insert into t (id,a) values (563,36);
+insert into t (id,a) values (563,37);
+insert into t (id,a) values (563,38);
+insert into t (id,a) values (563,39);
+insert into t (id,a) values (563,40);
+insert into t (id,a) values (563,41);
+insert into t (id,a) values (563,42);
+insert into t (id,a) values (563,43);
+insert into t (id,a) values (563,44);
+insert into t (id,a) values (563,45);
+insert into t (id,a) values (563,46);
+insert into t (id,a) values (563,47);
+insert into t (id,a) values (563,48);
+insert into t (id,a) values (563,49);
+insert into t (id,a) values (563,50);
+insert into t (id,a) values (563,51);
+insert into t (id,a) values (563,52);
+insert into t (id,a) values (563,53);
+insert into t (id,a) values (563,54);
+insert into t (id,a) values (563,55);
+insert into t (id,a) values (563,56);
+insert into t (id,a) values (563,57);
+insert into t (id,a) values (563,58);
+insert into t (id,a) values (563,59);
+insert into t (id,a) values (563,60);
+insert into t (id,a) values (563,61);
+insert into t (id,a) values (563,62);
+insert into t (id,a) values (563,63);
+insert into t (id,a) values (563,64);
+insert into t (id,a) values (563,65);
+insert into t (id,a) values (563,66);
+insert into t (id,a) values (563,67);
+insert into t (id,a) values (563,68);
+insert into t (id,a) values (563,69);
+insert into t (id,a) values (563,70);
+insert into t (id,a) values (563,71);
+insert into t (id,a) values (563,72);
+insert into t (id,a) values (563,73);
+insert into t (id,a) values (563,74);
+insert into t (id,a) values (563,75);
+insert into t (id,a) values (563,76);
+insert into t (id,a) values (563,77);
+insert into t (id,a) values (563,78);
+insert into t (id,a) values (563,79);
+insert into t (id,a) values (563,80);
+insert into t (id,a) values (563,81);
+insert into t (id,a) values (563,82);
+insert into t (id,a) values (563,83);
+insert into t (id,a) values (563,84);
+insert into t (id,a) values (563,85);
+insert into t (id,a) values (563,86);
+insert into t (id,a) values (563,87);
+insert into t (id,a) values (563,88);
+insert into t (id,a) values (563,89);
+insert into t (id,a) values (563,90);
+insert into t (id,a) values (563,91);
+insert into t (id,a) values (563,92);
+insert into t (id,a) values (563,93);
+insert into t (id,a) values (563,94);
+insert into t (id,a) values (563,95);
+insert into t (id,a) values (563,96);
+insert into t (id,a) values (563,97);
+insert into t (id,a) values (563,98);
+insert into t (id,a) values (563,99);
+insert into t (id,a) values (564,0);
+insert into t (id,a) values (564,1);
+insert into t (id,a) values (564,2);
+insert into t (id,a) values (564,3);
+insert into t (id,a) values (564,4);
+insert into t (id,a) values (564,5);
+insert into t (id,a) values (564,6);
+insert into t (id,a) values (564,7);
+insert into t (id,a) values (564,8);
+insert into t (id,a) values (564,9);
+insert into t (id,a) values (564,10);
+insert into t (id,a) values (564,11);
+insert into t (id,a) values (564,12);
+insert into t (id,a) values (564,13);
+insert into t (id,a) values (564,14);
+insert into t (id,a) values (564,15);
+insert into t (id,a) values (564,16);
+insert into t (id,a) values (564,17);
+insert into t (id,a) values (564,18);
+insert into t (id,a) values (564,19);
+insert into t (id,a) values (564,20);
+insert into t (id,a) values (564,21);
+insert into t (id,a) values (564,22);
+insert into t (id,a) values (564,23);
+insert into t (id,a) values (564,24);
+insert into t (id,a) values (564,25);
+insert into t (id,a) values (564,26);
+insert into t (id,a) values (564,27);
+insert into t (id,a) values (564,28);
+insert into t (id,a) values (564,29);
+insert into t (id,a) values (564,30);
+insert into t (id,a) values (564,31);
+insert into t (id,a) values (564,32);
+insert into t (id,a) values (564,33);
+insert into t (id,a) values (564,34);
+insert into t (id,a) values (564,35);
+insert into t (id,a) values (564,36);
+insert into t (id,a) values (564,37);
+insert into t (id,a) values (564,38);
+insert into t (id,a) values (564,39);
+insert into t (id,a) values (564,40);
+insert into t (id,a) values (564,41);
+insert into t (id,a) values (564,42);
+insert into t (id,a) values (564,43);
+insert into t (id,a) values (564,44);
+insert into t (id,a) values (564,45);
+insert into t (id,a) values (564,46);
+insert into t (id,a) values (564,47);
+insert into t (id,a) values (564,48);
+insert into t (id,a) values (564,49);
+insert into t (id,a) values (564,50);
+insert into t (id,a) values (564,51);
+insert into t (id,a) values (564,52);
+insert into t (id,a) values (564,53);
+insert into t (id,a) values (564,54);
+insert into t (id,a) values (564,55);
+insert into t (id,a) values (564,56);
+insert into t (id,a) values (564,57);
+insert into t (id,a) values (564,58);
+insert into t (id,a) values (564,59);
+insert into t (id,a) values (564,60);
+insert into t (id,a) values (564,61);
+insert into t (id,a) values (564,62);
+insert into t (id,a) values (564,63);
+insert into t (id,a) values (564,64);
+insert into t (id,a) values (564,65);
+insert into t (id,a) values (564,66);
+insert into t (id,a) values (564,67);
+insert into t (id,a) values (564,68);
+insert into t (id,a) values (564,69);
+insert into t (id,a) values (564,70);
+insert into t (id,a) values (564,71);
+insert into t (id,a) values (564,72);
+insert into t (id,a) values (564,73);
+insert into t (id,a) values (564,74);
+insert into t (id,a) values (564,75);
+insert into t (id,a) values (564,76);
+insert into t (id,a) values (564,77);
+insert into t (id,a) values (564,78);
+insert into t (id,a) values (564,79);
+insert into t (id,a) values (564,80);
+insert into t (id,a) values (564,81);
+insert into t (id,a) values (564,82);
+insert into t (id,a) values (564,83);
+insert into t (id,a) values (564,84);
+insert into t (id,a) values (564,85);
+insert into t (id,a) values (564,86);
+insert into t (id,a) values (564,87);
+insert into t (id,a) values (564,88);
+insert into t (id,a) values (564,89);
+insert into t (id,a) values (564,90);
+insert into t (id,a) values (564,91);
+insert into t (id,a) values (564,92);
+insert into t (id,a) values (564,93);
+insert into t (id,a) values (564,94);
+insert into t (id,a) values (564,95);
+insert into t (id,a) values (564,96);
+insert into t (id,a) values (564,97);
+insert into t (id,a) values (564,98);
+insert into t (id,a) values (564,99);
+insert into t (id,a) values (565,0);
+insert into t (id,a) values (565,1);
+insert into t (id,a) values (565,2);
+insert into t (id,a) values (565,3);
+insert into t (id,a) values (565,4);
+insert into t (id,a) values (565,5);
+insert into t (id,a) values (565,6);
+insert into t (id,a) values (565,7);
+insert into t (id,a) values (565,8);
+insert into t (id,a) values (565,9);
+insert into t (id,a) values (565,10);
+insert into t (id,a) values (565,11);
+insert into t (id,a) values (565,12);
+insert into t (id,a) values (565,13);
+insert into t (id,a) values (565,14);
+insert into t (id,a) values (565,15);
+insert into t (id,a) values (565,16);
+insert into t (id,a) values (565,17);
+insert into t (id,a) values (565,18);
+insert into t (id,a) values (565,19);
+insert into t (id,a) values (565,20);
+insert into t (id,a) values (565,21);
+insert into t (id,a) values (565,22);
+insert into t (id,a) values (565,23);
+insert into t (id,a) values (565,24);
+insert into t (id,a) values (565,25);
+insert into t (id,a) values (565,26);
+insert into t (id,a) values (565,27);
+insert into t (id,a) values (565,28);
+insert into t (id,a) values (565,29);
+insert into t (id,a) values (565,30);
+insert into t (id,a) values (565,31);
+insert into t (id,a) values (565,32);
+insert into t (id,a) values (565,33);
+insert into t (id,a) values (565,34);
+insert into t (id,a) values (565,35);
+insert into t (id,a) values (565,36);
+insert into t (id,a) values (565,37);
+insert into t (id,a) values (565,38);
+insert into t (id,a) values (565,39);
+insert into t (id,a) values (565,40);
+insert into t (id,a) values (565,41);
+insert into t (id,a) values (565,42);
+insert into t (id,a) values (565,43);
+insert into t (id,a) values (565,44);
+insert into t (id,a) values (565,45);
+insert into t (id,a) values (565,46);
+insert into t (id,a) values (565,47);
+insert into t (id,a) values (565,48);
+insert into t (id,a) values (565,49);
+insert into t (id,a) values (565,50);
+insert into t (id,a) values (565,51);
+insert into t (id,a) values (565,52);
+insert into t (id,a) values (565,53);
+insert into t (id,a) values (565,54);
+insert into t (id,a) values (565,55);
+insert into t (id,a) values (565,56);
+insert into t (id,a) values (565,57);
+insert into t (id,a) values (565,58);
+insert into t (id,a) values (565,59);
+insert into t (id,a) values (565,60);
+insert into t (id,a) values (565,61);
+insert into t (id,a) values (565,62);
+insert into t (id,a) values (565,63);
+insert into t (id,a) values (565,64);
+insert into t (id,a) values (565,65);
+insert into t (id,a) values (565,66);
+insert into t (id,a) values (565,67);
+insert into t (id,a) values (565,68);
+insert into t (id,a) values (565,69);
+insert into t (id,a) values (565,70);
+insert into t (id,a) values (565,71);
+insert into t (id,a) values (565,72);
+insert into t (id,a) values (565,73);
+insert into t (id,a) values (565,74);
+insert into t (id,a) values (565,75);
+insert into t (id,a) values (565,76);
+insert into t (id,a) values (565,77);
+insert into t (id,a) values (565,78);
+insert into t (id,a) values (565,79);
+insert into t (id,a) values (565,80);
+insert into t (id,a) values (565,81);
+insert into t (id,a) values (565,82);
+insert into t (id,a) values (565,83);
+insert into t (id,a) values (565,84);
+insert into t (id,a) values (565,85);
+insert into t (id,a) values (565,86);
+insert into t (id,a) values (565,87);
+insert into t (id,a) values (565,88);
+insert into t (id,a) values (565,89);
+insert into t (id,a) values (565,90);
+insert into t (id,a) values (565,91);
+insert into t (id,a) values (565,92);
+insert into t (id,a) values (565,93);
+insert into t (id,a) values (565,94);
+insert into t (id,a) values (565,95);
+insert into t (id,a) values (565,96);
+insert into t (id,a) values (565,97);
+insert into t (id,a) values (565,98);
+insert into t (id,a) values (565,99);
+insert into t (id,a) values (566,0);
+insert into t (id,a) values (566,1);
+insert into t (id,a) values (566,2);
+insert into t (id,a) values (566,3);
+insert into t (id,a) values (566,4);
+insert into t (id,a) values (566,5);
+insert into t (id,a) values (566,6);
+insert into t (id,a) values (566,7);
+insert into t (id,a) values (566,8);
+insert into t (id,a) values (566,9);
+insert into t (id,a) values (566,10);
+insert into t (id,a) values (566,11);
+insert into t (id,a) values (566,12);
+insert into t (id,a) values (566,13);
+insert into t (id,a) values (566,14);
+insert into t (id,a) values (566,15);
+insert into t (id,a) values (566,16);
+insert into t (id,a) values (566,17);
+insert into t (id,a) values (566,18);
+insert into t (id,a) values (566,19);
+insert into t (id,a) values (566,20);
+insert into t (id,a) values (566,21);
+insert into t (id,a) values (566,22);
+insert into t (id,a) values (566,23);
+insert into t (id,a) values (566,24);
+insert into t (id,a) values (566,25);
+insert into t (id,a) values (566,26);
+insert into t (id,a) values (566,27);
+insert into t (id,a) values (566,28);
+insert into t (id,a) values (566,29);
+insert into t (id,a) values (566,30);
+insert into t (id,a) values (566,31);
+insert into t (id,a) values (566,32);
+insert into t (id,a) values (566,33);
+insert into t (id,a) values (566,34);
+insert into t (id,a) values (566,35);
+insert into t (id,a) values (566,36);
+insert into t (id,a) values (566,37);
+insert into t (id,a) values (566,38);
+insert into t (id,a) values (566,39);
+insert into t (id,a) values (566,40);
+insert into t (id,a) values (566,41);
+insert into t (id,a) values (566,42);
+insert into t (id,a) values (566,43);
+insert into t (id,a) values (566,44);
+insert into t (id,a) values (566,45);
+insert into t (id,a) values (566,46);
+insert into t (id,a) values (566,47);
+insert into t (id,a) values (566,48);
+insert into t (id,a) values (566,49);
+insert into t (id,a) values (566,50);
+insert into t (id,a) values (566,51);
+insert into t (id,a) values (566,52);
+insert into t (id,a) values (566,53);
+insert into t (id,a) values (566,54);
+insert into t (id,a) values (566,55);
+insert into t (id,a) values (566,56);
+insert into t (id,a) values (566,57);
+insert into t (id,a) values (566,58);
+insert into t (id,a) values (566,59);
+insert into t (id,a) values (566,60);
+insert into t (id,a) values (566,61);
+insert into t (id,a) values (566,62);
+insert into t (id,a) values (566,63);
+insert into t (id,a) values (566,64);
+insert into t (id,a) values (566,65);
+insert into t (id,a) values (566,66);
+insert into t (id,a) values (566,67);
+insert into t (id,a) values (566,68);
+insert into t (id,a) values (566,69);
+insert into t (id,a) values (566,70);
+insert into t (id,a) values (566,71);
+insert into t (id,a) values (566,72);
+insert into t (id,a) values (566,73);
+insert into t (id,a) values (566,74);
+insert into t (id,a) values (566,75);
+insert into t (id,a) values (566,76);
+insert into t (id,a) values (566,77);
+insert into t (id,a) values (566,78);
+insert into t (id,a) values (566,79);
+insert into t (id,a) values (566,80);
+insert into t (id,a) values (566,81);
+insert into t (id,a) values (566,82);
+insert into t (id,a) values (566,83);
+insert into t (id,a) values (566,84);
+insert into t (id,a) values (566,85);
+insert into t (id,a) values (566,86);
+insert into t (id,a) values (566,87);
+insert into t (id,a) values (566,88);
+insert into t (id,a) values (566,89);
+insert into t (id,a) values (566,90);
+insert into t (id,a) values (566,91);
+insert into t (id,a) values (566,92);
+insert into t (id,a) values (566,93);
+insert into t (id,a) values (566,94);
+insert into t (id,a) values (566,95);
+insert into t (id,a) values (566,96);
+insert into t (id,a) values (566,97);
+insert into t (id,a) values (566,98);
+insert into t (id,a) values (566,99);
+insert into t (id,a) values (567,0);
+insert into t (id,a) values (567,1);
+insert into t (id,a) values (567,2);
+insert into t (id,a) values (567,3);
+insert into t (id,a) values (567,4);
+insert into t (id,a) values (567,5);
+insert into t (id,a) values (567,6);
+insert into t (id,a) values (567,7);
+insert into t (id,a) values (567,8);
+insert into t (id,a) values (567,9);
+insert into t (id,a) values (567,10);
+insert into t (id,a) values (567,11);
+insert into t (id,a) values (567,12);
+insert into t (id,a) values (567,13);
+insert into t (id,a) values (567,14);
+insert into t (id,a) values (567,15);
+insert into t (id,a) values (567,16);
+insert into t (id,a) values (567,17);
+insert into t (id,a) values (567,18);
+insert into t (id,a) values (567,19);
+insert into t (id,a) values (567,20);
+insert into t (id,a) values (567,21);
+insert into t (id,a) values (567,22);
+insert into t (id,a) values (567,23);
+insert into t (id,a) values (567,24);
+insert into t (id,a) values (567,25);
+insert into t (id,a) values (567,26);
+insert into t (id,a) values (567,27);
+insert into t (id,a) values (567,28);
+insert into t (id,a) values (567,29);
+insert into t (id,a) values (567,30);
+insert into t (id,a) values (567,31);
+insert into t (id,a) values (567,32);
+insert into t (id,a) values (567,33);
+insert into t (id,a) values (567,34);
+insert into t (id,a) values (567,35);
+insert into t (id,a) values (567,36);
+insert into t (id,a) values (567,37);
+insert into t (id,a) values (567,38);
+insert into t (id,a) values (567,39);
+insert into t (id,a) values (567,40);
+insert into t (id,a) values (567,41);
+insert into t (id,a) values (567,42);
+insert into t (id,a) values (567,43);
+insert into t (id,a) values (567,44);
+insert into t (id,a) values (567,45);
+insert into t (id,a) values (567,46);
+insert into t (id,a) values (567,47);
+insert into t (id,a) values (567,48);
+insert into t (id,a) values (567,49);
+insert into t (id,a) values (567,50);
+insert into t (id,a) values (567,51);
+insert into t (id,a) values (567,52);
+insert into t (id,a) values (567,53);
+insert into t (id,a) values (567,54);
+insert into t (id,a) values (567,55);
+insert into t (id,a) values (567,56);
+insert into t (id,a) values (567,57);
+insert into t (id,a) values (567,58);
+insert into t (id,a) values (567,59);
+insert into t (id,a) values (567,60);
+insert into t (id,a) values (567,61);
+insert into t (id,a) values (567,62);
+insert into t (id,a) values (567,63);
+insert into t (id,a) values (567,64);
+insert into t (id,a) values (567,65);
+insert into t (id,a) values (567,66);
+insert into t (id,a) values (567,67);
+insert into t (id,a) values (567,68);
+insert into t (id,a) values (567,69);
+insert into t (id,a) values (567,70);
+insert into t (id,a) values (567,71);
+insert into t (id,a) values (567,72);
+insert into t (id,a) values (567,73);
+insert into t (id,a) values (567,74);
+insert into t (id,a) values (567,75);
+insert into t (id,a) values (567,76);
+insert into t (id,a) values (567,77);
+insert into t (id,a) values (567,78);
+insert into t (id,a) values (567,79);
+insert into t (id,a) values (567,80);
+insert into t (id,a) values (567,81);
+insert into t (id,a) values (567,82);
+insert into t (id,a) values (567,83);
+insert into t (id,a) values (567,84);
+insert into t (id,a) values (567,85);
+insert into t (id,a) values (567,86);
+insert into t (id,a) values (567,87);
+insert into t (id,a) values (567,88);
+insert into t (id,a) values (567,89);
+insert into t (id,a) values (567,90);
+insert into t (id,a) values (567,91);
+insert into t (id,a) values (567,92);
+insert into t (id,a) values (567,93);
+insert into t (id,a) values (567,94);
+insert into t (id,a) values (567,95);
+insert into t (id,a) values (567,96);
+insert into t (id,a) values (567,97);
+insert into t (id,a) values (567,98);
+insert into t (id,a) values (567,99);
+insert into t (id,a) values (568,0);
+insert into t (id,a) values (568,1);
+insert into t (id,a) values (568,2);
+insert into t (id,a) values (568,3);
+insert into t (id,a) values (568,4);
+insert into t (id,a) values (568,5);
+insert into t (id,a) values (568,6);
+insert into t (id,a) values (568,7);
+insert into t (id,a) values (568,8);
+insert into t (id,a) values (568,9);
+insert into t (id,a) values (568,10);
+insert into t (id,a) values (568,11);
+insert into t (id,a) values (568,12);
+insert into t (id,a) values (568,13);
+insert into t (id,a) values (568,14);
+insert into t (id,a) values (568,15);
+insert into t (id,a) values (568,16);
+insert into t (id,a) values (568,17);
+insert into t (id,a) values (568,18);
+insert into t (id,a) values (568,19);
+insert into t (id,a) values (568,20);
+insert into t (id,a) values (568,21);
+insert into t (id,a) values (568,22);
+insert into t (id,a) values (568,23);
+insert into t (id,a) values (568,24);
+insert into t (id,a) values (568,25);
+insert into t (id,a) values (568,26);
+insert into t (id,a) values (568,27);
+insert into t (id,a) values (568,28);
+insert into t (id,a) values (568,29);
+insert into t (id,a) values (568,30);
+insert into t (id,a) values (568,31);
+insert into t (id,a) values (568,32);
+insert into t (id,a) values (568,33);
+insert into t (id,a) values (568,34);
+insert into t (id,a) values (568,35);
+insert into t (id,a) values (568,36);
+insert into t (id,a) values (568,37);
+insert into t (id,a) values (568,38);
+insert into t (id,a) values (568,39);
+insert into t (id,a) values (568,40);
+insert into t (id,a) values (568,41);
+insert into t (id,a) values (568,42);
+insert into t (id,a) values (568,43);
+insert into t (id,a) values (568,44);
+insert into t (id,a) values (568,45);
+insert into t (id,a) values (568,46);
+insert into t (id,a) values (568,47);
+insert into t (id,a) values (568,48);
+insert into t (id,a) values (568,49);
+insert into t (id,a) values (568,50);
+insert into t (id,a) values (568,51);
+insert into t (id,a) values (568,52);
+insert into t (id,a) values (568,53);
+insert into t (id,a) values (568,54);
+insert into t (id,a) values (568,55);
+insert into t (id,a) values (568,56);
+insert into t (id,a) values (568,57);
+insert into t (id,a) values (568,58);
+insert into t (id,a) values (568,59);
+insert into t (id,a) values (568,60);
+insert into t (id,a) values (568,61);
+insert into t (id,a) values (568,62);
+insert into t (id,a) values (568,63);
+insert into t (id,a) values (568,64);
+insert into t (id,a) values (568,65);
+insert into t (id,a) values (568,66);
+insert into t (id,a) values (568,67);
+insert into t (id,a) values (568,68);
+insert into t (id,a) values (568,69);
+insert into t (id,a) values (568,70);
+insert into t (id,a) values (568,71);
+insert into t (id,a) values (568,72);
+insert into t (id,a) values (568,73);
+insert into t (id,a) values (568,74);
+insert into t (id,a) values (568,75);
+insert into t (id,a) values (568,76);
+insert into t (id,a) values (568,77);
+insert into t (id,a) values (568,78);
+insert into t (id,a) values (568,79);
+insert into t (id,a) values (568,80);
+insert into t (id,a) values (568,81);
+insert into t (id,a) values (568,82);
+insert into t (id,a) values (568,83);
+insert into t (id,a) values (568,84);
+insert into t (id,a) values (568,85);
+insert into t (id,a) values (568,86);
+insert into t (id,a) values (568,87);
+insert into t (id,a) values (568,88);
+insert into t (id,a) values (568,89);
+insert into t (id,a) values (568,90);
+insert into t (id,a) values (568,91);
+insert into t (id,a) values (568,92);
+insert into t (id,a) values (568,93);
+insert into t (id,a) values (568,94);
+insert into t (id,a) values (568,95);
+insert into t (id,a) values (568,96);
+insert into t (id,a) values (568,97);
+insert into t (id,a) values (568,98);
+insert into t (id,a) values (568,99);
+insert into t (id,a) values (569,0);
+insert into t (id,a) values (569,1);
+insert into t (id,a) values (569,2);
+insert into t (id,a) values (569,3);
+insert into t (id,a) values (569,4);
+insert into t (id,a) values (569,5);
+insert into t (id,a) values (569,6);
+insert into t (id,a) values (569,7);
+insert into t (id,a) values (569,8);
+insert into t (id,a) values (569,9);
+insert into t (id,a) values (569,10);
+insert into t (id,a) values (569,11);
+insert into t (id,a) values (569,12);
+insert into t (id,a) values (569,13);
+insert into t (id,a) values (569,14);
+insert into t (id,a) values (569,15);
+insert into t (id,a) values (569,16);
+insert into t (id,a) values (569,17);
+insert into t (id,a) values (569,18);
+insert into t (id,a) values (569,19);
+insert into t (id,a) values (569,20);
+insert into t (id,a) values (569,21);
+insert into t (id,a) values (569,22);
+insert into t (id,a) values (569,23);
+insert into t (id,a) values (569,24);
+insert into t (id,a) values (569,25);
+insert into t (id,a) values (569,26);
+insert into t (id,a) values (569,27);
+insert into t (id,a) values (569,28);
+insert into t (id,a) values (569,29);
+insert into t (id,a) values (569,30);
+insert into t (id,a) values (569,31);
+insert into t (id,a) values (569,32);
+insert into t (id,a) values (569,33);
+insert into t (id,a) values (569,34);
+insert into t (id,a) values (569,35);
+insert into t (id,a) values (569,36);
+insert into t (id,a) values (569,37);
+insert into t (id,a) values (569,38);
+insert into t (id,a) values (569,39);
+insert into t (id,a) values (569,40);
+insert into t (id,a) values (569,41);
+insert into t (id,a) values (569,42);
+insert into t (id,a) values (569,43);
+insert into t (id,a) values (569,44);
+insert into t (id,a) values (569,45);
+insert into t (id,a) values (569,46);
+insert into t (id,a) values (569,47);
+insert into t (id,a) values (569,48);
+insert into t (id,a) values (569,49);
+insert into t (id,a) values (569,50);
+insert into t (id,a) values (569,51);
+insert into t (id,a) values (569,52);
+insert into t (id,a) values (569,53);
+insert into t (id,a) values (569,54);
+insert into t (id,a) values (569,55);
+insert into t (id,a) values (569,56);
+insert into t (id,a) values (569,57);
+insert into t (id,a) values (569,58);
+insert into t (id,a) values (569,59);
+insert into t (id,a) values (569,60);
+insert into t (id,a) values (569,61);
+insert into t (id,a) values (569,62);
+insert into t (id,a) values (569,63);
+insert into t (id,a) values (569,64);
+insert into t (id,a) values (569,65);
+insert into t (id,a) values (569,66);
+insert into t (id,a) values (569,67);
+insert into t (id,a) values (569,68);
+insert into t (id,a) values (569,69);
+insert into t (id,a) values (569,70);
+insert into t (id,a) values (569,71);
+insert into t (id,a) values (569,72);
+insert into t (id,a) values (569,73);
+insert into t (id,a) values (569,74);
+insert into t (id,a) values (569,75);
+insert into t (id,a) values (569,76);
+insert into t (id,a) values (569,77);
+insert into t (id,a) values (569,78);
+insert into t (id,a) values (569,79);
+insert into t (id,a) values (569,80);
+insert into t (id,a) values (569,81);
+insert into t (id,a) values (569,82);
+insert into t (id,a) values (569,83);
+insert into t (id,a) values (569,84);
+insert into t (id,a) values (569,85);
+insert into t (id,a) values (569,86);
+insert into t (id,a) values (569,87);
+insert into t (id,a) values (569,88);
+insert into t (id,a) values (569,89);
+insert into t (id,a) values (569,90);
+insert into t (id,a) values (569,91);
+insert into t (id,a) values (569,92);
+insert into t (id,a) values (569,93);
+insert into t (id,a) values (569,94);
+insert into t (id,a) values (569,95);
+insert into t (id,a) values (569,96);
+insert into t (id,a) values (569,97);
+insert into t (id,a) values (569,98);
+insert into t (id,a) values (569,99);
+insert into t (id,a) values (570,0);
+insert into t (id,a) values (570,1);
+insert into t (id,a) values (570,2);
+insert into t (id,a) values (570,3);
+insert into t (id,a) values (570,4);
+insert into t (id,a) values (570,5);
+insert into t (id,a) values (570,6);
+insert into t (id,a) values (570,7);
+insert into t (id,a) values (570,8);
+insert into t (id,a) values (570,9);
+insert into t (id,a) values (570,10);
+insert into t (id,a) values (570,11);
+insert into t (id,a) values (570,12);
+insert into t (id,a) values (570,13);
+insert into t (id,a) values (570,14);
+insert into t (id,a) values (570,15);
+insert into t (id,a) values (570,16);
+insert into t (id,a) values (570,17);
+insert into t (id,a) values (570,18);
+insert into t (id,a) values (570,19);
+insert into t (id,a) values (570,20);
+insert into t (id,a) values (570,21);
+insert into t (id,a) values (570,22);
+insert into t (id,a) values (570,23);
+insert into t (id,a) values (570,24);
+insert into t (id,a) values (570,25);
+insert into t (id,a) values (570,26);
+insert into t (id,a) values (570,27);
+insert into t (id,a) values (570,28);
+insert into t (id,a) values (570,29);
+insert into t (id,a) values (570,30);
+insert into t (id,a) values (570,31);
+insert into t (id,a) values (570,32);
+insert into t (id,a) values (570,33);
+insert into t (id,a) values (570,34);
+insert into t (id,a) values (570,35);
+insert into t (id,a) values (570,36);
+insert into t (id,a) values (570,37);
+insert into t (id,a) values (570,38);
+insert into t (id,a) values (570,39);
+insert into t (id,a) values (570,40);
+insert into t (id,a) values (570,41);
+insert into t (id,a) values (570,42);
+insert into t (id,a) values (570,43);
+insert into t (id,a) values (570,44);
+insert into t (id,a) values (570,45);
+insert into t (id,a) values (570,46);
+insert into t (id,a) values (570,47);
+insert into t (id,a) values (570,48);
+insert into t (id,a) values (570,49);
+insert into t (id,a) values (570,50);
+insert into t (id,a) values (570,51);
+insert into t (id,a) values (570,52);
+insert into t (id,a) values (570,53);
+insert into t (id,a) values (570,54);
+insert into t (id,a) values (570,55);
+insert into t (id,a) values (570,56);
+insert into t (id,a) values (570,57);
+insert into t (id,a) values (570,58);
+insert into t (id,a) values (570,59);
+insert into t (id,a) values (570,60);
+insert into t (id,a) values (570,61);
+insert into t (id,a) values (570,62);
+insert into t (id,a) values (570,63);
+insert into t (id,a) values (570,64);
+insert into t (id,a) values (570,65);
+insert into t (id,a) values (570,66);
+insert into t (id,a) values (570,67);
+insert into t (id,a) values (570,68);
+insert into t (id,a) values (570,69);
+insert into t (id,a) values (570,70);
+insert into t (id,a) values (570,71);
+insert into t (id,a) values (570,72);
+insert into t (id,a) values (570,73);
+insert into t (id,a) values (570,74);
+insert into t (id,a) values (570,75);
+insert into t (id,a) values (570,76);
+insert into t (id,a) values (570,77);
+insert into t (id,a) values (570,78);
+insert into t (id,a) values (570,79);
+insert into t (id,a) values (570,80);
+insert into t (id,a) values (570,81);
+insert into t (id,a) values (570,82);
+insert into t (id,a) values (570,83);
+insert into t (id,a) values (570,84);
+insert into t (id,a) values (570,85);
+insert into t (id,a) values (570,86);
+insert into t (id,a) values (570,87);
+insert into t (id,a) values (570,88);
+insert into t (id,a) values (570,89);
+insert into t (id,a) values (570,90);
+insert into t (id,a) values (570,91);
+insert into t (id,a) values (570,92);
+insert into t (id,a) values (570,93);
+insert into t (id,a) values (570,94);
+insert into t (id,a) values (570,95);
+insert into t (id,a) values (570,96);
+insert into t (id,a) values (570,97);
+insert into t (id,a) values (570,98);
+insert into t (id,a) values (570,99);
+insert into t (id,a) values (571,0);
+insert into t (id,a) values (571,1);
+insert into t (id,a) values (571,2);
+insert into t (id,a) values (571,3);
+insert into t (id,a) values (571,4);
+insert into t (id,a) values (571,5);
+insert into t (id,a) values (571,6);
+insert into t (id,a) values (571,7);
+insert into t (id,a) values (571,8);
+insert into t (id,a) values (571,9);
+insert into t (id,a) values (571,10);
+insert into t (id,a) values (571,11);
+insert into t (id,a) values (571,12);
+insert into t (id,a) values (571,13);
+insert into t (id,a) values (571,14);
+insert into t (id,a) values (571,15);
+insert into t (id,a) values (571,16);
+insert into t (id,a) values (571,17);
+insert into t (id,a) values (571,18);
+insert into t (id,a) values (571,19);
+insert into t (id,a) values (571,20);
+insert into t (id,a) values (571,21);
+insert into t (id,a) values (571,22);
+insert into t (id,a) values (571,23);
+insert into t (id,a) values (571,24);
+insert into t (id,a) values (571,25);
+insert into t (id,a) values (571,26);
+insert into t (id,a) values (571,27);
+insert into t (id,a) values (571,28);
+insert into t (id,a) values (571,29);
+insert into t (id,a) values (571,30);
+insert into t (id,a) values (571,31);
+insert into t (id,a) values (571,32);
+insert into t (id,a) values (571,33);
+insert into t (id,a) values (571,34);
+insert into t (id,a) values (571,35);
+insert into t (id,a) values (571,36);
+insert into t (id,a) values (571,37);
+insert into t (id,a) values (571,38);
+insert into t (id,a) values (571,39);
+insert into t (id,a) values (571,40);
+insert into t (id,a) values (571,41);
+insert into t (id,a) values (571,42);
+insert into t (id,a) values (571,43);
+insert into t (id,a) values (571,44);
+insert into t (id,a) values (571,45);
+insert into t (id,a) values (571,46);
+insert into t (id,a) values (571,47);
+insert into t (id,a) values (571,48);
+insert into t (id,a) values (571,49);
+insert into t (id,a) values (571,50);
+insert into t (id,a) values (571,51);
+insert into t (id,a) values (571,52);
+insert into t (id,a) values (571,53);
+insert into t (id,a) values (571,54);
+insert into t (id,a) values (571,55);
+insert into t (id,a) values (571,56);
+insert into t (id,a) values (571,57);
+insert into t (id,a) values (571,58);
+insert into t (id,a) values (571,59);
+insert into t (id,a) values (571,60);
+insert into t (id,a) values (571,61);
+insert into t (id,a) values (571,62);
+insert into t (id,a) values (571,63);
+insert into t (id,a) values (571,64);
+insert into t (id,a) values (571,65);
+insert into t (id,a) values (571,66);
+insert into t (id,a) values (571,67);
+insert into t (id,a) values (571,68);
+insert into t (id,a) values (571,69);
+insert into t (id,a) values (571,70);
+insert into t (id,a) values (571,71);
+insert into t (id,a) values (571,72);
+insert into t (id,a) values (571,73);
+insert into t (id,a) values (571,74);
+insert into t (id,a) values (571,75);
+insert into t (id,a) values (571,76);
+insert into t (id,a) values (571,77);
+insert into t (id,a) values (571,78);
+insert into t (id,a) values (571,79);
+insert into t (id,a) values (571,80);
+insert into t (id,a) values (571,81);
+insert into t (id,a) values (571,82);
+insert into t (id,a) values (571,83);
+insert into t (id,a) values (571,84);
+insert into t (id,a) values (571,85);
+insert into t (id,a) values (571,86);
+insert into t (id,a) values (571,87);
+insert into t (id,a) values (571,88);
+insert into t (id,a) values (571,89);
+insert into t (id,a) values (571,90);
+insert into t (id,a) values (571,91);
+insert into t (id,a) values (571,92);
+insert into t (id,a) values (571,93);
+insert into t (id,a) values (571,94);
+insert into t (id,a) values (571,95);
+insert into t (id,a) values (571,96);
+insert into t (id,a) values (571,97);
+insert into t (id,a) values (571,98);
+insert into t (id,a) values (571,99);
+insert into t (id,a) values (572,0);
+insert into t (id,a) values (572,1);
+insert into t (id,a) values (572,2);
+insert into t (id,a) values (572,3);
+insert into t (id,a) values (572,4);
+insert into t (id,a) values (572,5);
+insert into t (id,a) values (572,6);
+insert into t (id,a) values (572,7);
+insert into t (id,a) values (572,8);
+insert into t (id,a) values (572,9);
+insert into t (id,a) values (572,10);
+insert into t (id,a) values (572,11);
+insert into t (id,a) values (572,12);
+insert into t (id,a) values (572,13);
+insert into t (id,a) values (572,14);
+insert into t (id,a) values (572,15);
+insert into t (id,a) values (572,16);
+insert into t (id,a) values (572,17);
+insert into t (id,a) values (572,18);
+insert into t (id,a) values (572,19);
+insert into t (id,a) values (572,20);
+insert into t (id,a) values (572,21);
+insert into t (id,a) values (572,22);
+insert into t (id,a) values (572,23);
+insert into t (id,a) values (572,24);
+insert into t (id,a) values (572,25);
+insert into t (id,a) values (572,26);
+insert into t (id,a) values (572,27);
+insert into t (id,a) values (572,28);
+insert into t (id,a) values (572,29);
+insert into t (id,a) values (572,30);
+insert into t (id,a) values (572,31);
+insert into t (id,a) values (572,32);
+insert into t (id,a) values (572,33);
+insert into t (id,a) values (572,34);
+insert into t (id,a) values (572,35);
+insert into t (id,a) values (572,36);
+insert into t (id,a) values (572,37);
+insert into t (id,a) values (572,38);
+insert into t (id,a) values (572,39);
+insert into t (id,a) values (572,40);
+insert into t (id,a) values (572,41);
+insert into t (id,a) values (572,42);
+insert into t (id,a) values (572,43);
+insert into t (id,a) values (572,44);
+insert into t (id,a) values (572,45);
+insert into t (id,a) values (572,46);
+insert into t (id,a) values (572,47);
+insert into t (id,a) values (572,48);
+insert into t (id,a) values (572,49);
+insert into t (id,a) values (572,50);
+insert into t (id,a) values (572,51);
+insert into t (id,a) values (572,52);
+insert into t (id,a) values (572,53);
+insert into t (id,a) values (572,54);
+insert into t (id,a) values (572,55);
+insert into t (id,a) values (572,56);
+insert into t (id,a) values (572,57);
+insert into t (id,a) values (572,58);
+insert into t (id,a) values (572,59);
+insert into t (id,a) values (572,60);
+insert into t (id,a) values (572,61);
+insert into t (id,a) values (572,62);
+insert into t (id,a) values (572,63);
+insert into t (id,a) values (572,64);
+insert into t (id,a) values (572,65);
+insert into t (id,a) values (572,66);
+insert into t (id,a) values (572,67);
+insert into t (id,a) values (572,68);
+insert into t (id,a) values (572,69);
+insert into t (id,a) values (572,70);
+insert into t (id,a) values (572,71);
+insert into t (id,a) values (572,72);
+insert into t (id,a) values (572,73);
+insert into t (id,a) values (572,74);
+insert into t (id,a) values (572,75);
+insert into t (id,a) values (572,76);
+insert into t (id,a) values (572,77);
+insert into t (id,a) values (572,78);
+insert into t (id,a) values (572,79);
+insert into t (id,a) values (572,80);
+insert into t (id,a) values (572,81);
+insert into t (id,a) values (572,82);
+insert into t (id,a) values (572,83);
+insert into t (id,a) values (572,84);
+insert into t (id,a) values (572,85);
+insert into t (id,a) values (572,86);
+insert into t (id,a) values (572,87);
+insert into t (id,a) values (572,88);
+insert into t (id,a) values (572,89);
+insert into t (id,a) values (572,90);
+insert into t (id,a) values (572,91);
+insert into t (id,a) values (572,92);
+insert into t (id,a) values (572,93);
+insert into t (id,a) values (572,94);
+insert into t (id,a) values (572,95);
+insert into t (id,a) values (572,96);
+insert into t (id,a) values (572,97);
+insert into t (id,a) values (572,98);
+insert into t (id,a) values (572,99);
+insert into t (id,a) values (573,0);
+insert into t (id,a) values (573,1);
+insert into t (id,a) values (573,2);
+insert into t (id,a) values (573,3);
+insert into t (id,a) values (573,4);
+insert into t (id,a) values (573,5);
+insert into t (id,a) values (573,6);
+insert into t (id,a) values (573,7);
+insert into t (id,a) values (573,8);
+insert into t (id,a) values (573,9);
+insert into t (id,a) values (573,10);
+insert into t (id,a) values (573,11);
+insert into t (id,a) values (573,12);
+insert into t (id,a) values (573,13);
+insert into t (id,a) values (573,14);
+insert into t (id,a) values (573,15);
+insert into t (id,a) values (573,16);
+insert into t (id,a) values (573,17);
+insert into t (id,a) values (573,18);
+insert into t (id,a) values (573,19);
+insert into t (id,a) values (573,20);
+insert into t (id,a) values (573,21);
+insert into t (id,a) values (573,22);
+insert into t (id,a) values (573,23);
+insert into t (id,a) values (573,24);
+insert into t (id,a) values (573,25);
+insert into t (id,a) values (573,26);
+insert into t (id,a) values (573,27);
+insert into t (id,a) values (573,28);
+insert into t (id,a) values (573,29);
+insert into t (id,a) values (573,30);
+insert into t (id,a) values (573,31);
+insert into t (id,a) values (573,32);
+insert into t (id,a) values (573,33);
+insert into t (id,a) values (573,34);
+insert into t (id,a) values (573,35);
+insert into t (id,a) values (573,36);
+insert into t (id,a) values (573,37);
+insert into t (id,a) values (573,38);
+insert into t (id,a) values (573,39);
+insert into t (id,a) values (573,40);
+insert into t (id,a) values (573,41);
+insert into t (id,a) values (573,42);
+insert into t (id,a) values (573,43);
+insert into t (id,a) values (573,44);
+insert into t (id,a) values (573,45);
+insert into t (id,a) values (573,46);
+insert into t (id,a) values (573,47);
+insert into t (id,a) values (573,48);
+insert into t (id,a) values (573,49);
+insert into t (id,a) values (573,50);
+insert into t (id,a) values (573,51);
+insert into t (id,a) values (573,52);
+insert into t (id,a) values (573,53);
+insert into t (id,a) values (573,54);
+insert into t (id,a) values (573,55);
+insert into t (id,a) values (573,56);
+insert into t (id,a) values (573,57);
+insert into t (id,a) values (573,58);
+insert into t (id,a) values (573,59);
+insert into t (id,a) values (573,60);
+insert into t (id,a) values (573,61);
+insert into t (id,a) values (573,62);
+insert into t (id,a) values (573,63);
+insert into t (id,a) values (573,64);
+insert into t (id,a) values (573,65);
+insert into t (id,a) values (573,66);
+insert into t (id,a) values (573,67);
+insert into t (id,a) values (573,68);
+insert into t (id,a) values (573,69);
+insert into t (id,a) values (573,70);
+insert into t (id,a) values (573,71);
+insert into t (id,a) values (573,72);
+insert into t (id,a) values (573,73);
+insert into t (id,a) values (573,74);
+insert into t (id,a) values (573,75);
+insert into t (id,a) values (573,76);
+insert into t (id,a) values (573,77);
+insert into t (id,a) values (573,78);
+insert into t (id,a) values (573,79);
+insert into t (id,a) values (573,80);
+insert into t (id,a) values (573,81);
+insert into t (id,a) values (573,82);
+insert into t (id,a) values (573,83);
+insert into t (id,a) values (573,84);
+insert into t (id,a) values (573,85);
+insert into t (id,a) values (573,86);
+insert into t (id,a) values (573,87);
+insert into t (id,a) values (573,88);
+insert into t (id,a) values (573,89);
+insert into t (id,a) values (573,90);
+insert into t (id,a) values (573,91);
+insert into t (id,a) values (573,92);
+insert into t (id,a) values (573,93);
+insert into t (id,a) values (573,94);
+insert into t (id,a) values (573,95);
+insert into t (id,a) values (573,96);
+insert into t (id,a) values (573,97);
+insert into t (id,a) values (573,98);
+insert into t (id,a) values (573,99);
+insert into t (id,a) values (574,0);
+insert into t (id,a) values (574,1);
+insert into t (id,a) values (574,2);
+insert into t (id,a) values (574,3);
+insert into t (id,a) values (574,4);
+insert into t (id,a) values (574,5);
+insert into t (id,a) values (574,6);
+insert into t (id,a) values (574,7);
+insert into t (id,a) values (574,8);
+insert into t (id,a) values (574,9);
+insert into t (id,a) values (574,10);
+insert into t (id,a) values (574,11);
+insert into t (id,a) values (574,12);
+insert into t (id,a) values (574,13);
+insert into t (id,a) values (574,14);
+insert into t (id,a) values (574,15);
+insert into t (id,a) values (574,16);
+insert into t (id,a) values (574,17);
+insert into t (id,a) values (574,18);
+insert into t (id,a) values (574,19);
+insert into t (id,a) values (574,20);
+insert into t (id,a) values (574,21);
+insert into t (id,a) values (574,22);
+insert into t (id,a) values (574,23);
+insert into t (id,a) values (574,24);
+insert into t (id,a) values (574,25);
+insert into t (id,a) values (574,26);
+insert into t (id,a) values (574,27);
+insert into t (id,a) values (574,28);
+insert into t (id,a) values (574,29);
+insert into t (id,a) values (574,30);
+insert into t (id,a) values (574,31);
+insert into t (id,a) values (574,32);
+insert into t (id,a) values (574,33);
+insert into t (id,a) values (574,34);
+insert into t (id,a) values (574,35);
+insert into t (id,a) values (574,36);
+insert into t (id,a) values (574,37);
+insert into t (id,a) values (574,38);
+insert into t (id,a) values (574,39);
+insert into t (id,a) values (574,40);
+insert into t (id,a) values (574,41);
+insert into t (id,a) values (574,42);
+insert into t (id,a) values (574,43);
+insert into t (id,a) values (574,44);
+insert into t (id,a) values (574,45);
+insert into t (id,a) values (574,46);
+insert into t (id,a) values (574,47);
+insert into t (id,a) values (574,48);
+insert into t (id,a) values (574,49);
+insert into t (id,a) values (574,50);
+insert into t (id,a) values (574,51);
+insert into t (id,a) values (574,52);
+insert into t (id,a) values (574,53);
+insert into t (id,a) values (574,54);
+insert into t (id,a) values (574,55);
+insert into t (id,a) values (574,56);
+insert into t (id,a) values (574,57);
+insert into t (id,a) values (574,58);
+insert into t (id,a) values (574,59);
+insert into t (id,a) values (574,60);
+insert into t (id,a) values (574,61);
+insert into t (id,a) values (574,62);
+insert into t (id,a) values (574,63);
+insert into t (id,a) values (574,64);
+insert into t (id,a) values (574,65);
+insert into t (id,a) values (574,66);
+insert into t (id,a) values (574,67);
+insert into t (id,a) values (574,68);
+insert into t (id,a) values (574,69);
+insert into t (id,a) values (574,70);
+insert into t (id,a) values (574,71);
+insert into t (id,a) values (574,72);
+insert into t (id,a) values (574,73);
+insert into t (id,a) values (574,74);
+insert into t (id,a) values (574,75);
+insert into t (id,a) values (574,76);
+insert into t (id,a) values (574,77);
+insert into t (id,a) values (574,78);
+insert into t (id,a) values (574,79);
+insert into t (id,a) values (574,80);
+insert into t (id,a) values (574,81);
+insert into t (id,a) values (574,82);
+insert into t (id,a) values (574,83);
+insert into t (id,a) values (574,84);
+insert into t (id,a) values (574,85);
+insert into t (id,a) values (574,86);
+insert into t (id,a) values (574,87);
+insert into t (id,a) values (574,88);
+insert into t (id,a) values (574,89);
+insert into t (id,a) values (574,90);
+insert into t (id,a) values (574,91);
+insert into t (id,a) values (574,92);
+insert into t (id,a) values (574,93);
+insert into t (id,a) values (574,94);
+insert into t (id,a) values (574,95);
+insert into t (id,a) values (574,96);
+insert into t (id,a) values (574,97);
+insert into t (id,a) values (574,98);
+insert into t (id,a) values (574,99);
+insert into t (id,a) values (575,0);
+insert into t (id,a) values (575,1);
+insert into t (id,a) values (575,2);
+insert into t (id,a) values (575,3);
+insert into t (id,a) values (575,4);
+insert into t (id,a) values (575,5);
+insert into t (id,a) values (575,6);
+insert into t (id,a) values (575,7);
+insert into t (id,a) values (575,8);
+insert into t (id,a) values (575,9);
+insert into t (id,a) values (575,10);
+insert into t (id,a) values (575,11);
+insert into t (id,a) values (575,12);
+insert into t (id,a) values (575,13);
+insert into t (id,a) values (575,14);
+insert into t (id,a) values (575,15);
+insert into t (id,a) values (575,16);
+insert into t (id,a) values (575,17);
+insert into t (id,a) values (575,18);
+insert into t (id,a) values (575,19);
+insert into t (id,a) values (575,20);
+insert into t (id,a) values (575,21);
+insert into t (id,a) values (575,22);
+insert into t (id,a) values (575,23);
+insert into t (id,a) values (575,24);
+insert into t (id,a) values (575,25);
+insert into t (id,a) values (575,26);
+insert into t (id,a) values (575,27);
+insert into t (id,a) values (575,28);
+insert into t (id,a) values (575,29);
+insert into t (id,a) values (575,30);
+insert into t (id,a) values (575,31);
+insert into t (id,a) values (575,32);
+insert into t (id,a) values (575,33);
+insert into t (id,a) values (575,34);
+insert into t (id,a) values (575,35);
+insert into t (id,a) values (575,36);
+insert into t (id,a) values (575,37);
+insert into t (id,a) values (575,38);
+insert into t (id,a) values (575,39);
+insert into t (id,a) values (575,40);
+insert into t (id,a) values (575,41);
+insert into t (id,a) values (575,42);
+insert into t (id,a) values (575,43);
+insert into t (id,a) values (575,44);
+insert into t (id,a) values (575,45);
+insert into t (id,a) values (575,46);
+insert into t (id,a) values (575,47);
+insert into t (id,a) values (575,48);
+insert into t (id,a) values (575,49);
+insert into t (id,a) values (575,50);
+insert into t (id,a) values (575,51);
+insert into t (id,a) values (575,52);
+insert into t (id,a) values (575,53);
+insert into t (id,a) values (575,54);
+insert into t (id,a) values (575,55);
+insert into t (id,a) values (575,56);
+insert into t (id,a) values (575,57);
+insert into t (id,a) values (575,58);
+insert into t (id,a) values (575,59);
+insert into t (id,a) values (575,60);
+insert into t (id,a) values (575,61);
+insert into t (id,a) values (575,62);
+insert into t (id,a) values (575,63);
+insert into t (id,a) values (575,64);
+insert into t (id,a) values (575,65);
+insert into t (id,a) values (575,66);
+insert into t (id,a) values (575,67);
+insert into t (id,a) values (575,68);
+insert into t (id,a) values (575,69);
+insert into t (id,a) values (575,70);
+insert into t (id,a) values (575,71);
+insert into t (id,a) values (575,72);
+insert into t (id,a) values (575,73);
+insert into t (id,a) values (575,74);
+insert into t (id,a) values (575,75);
+insert into t (id,a) values (575,76);
+insert into t (id,a) values (575,77);
+insert into t (id,a) values (575,78);
+insert into t (id,a) values (575,79);
+insert into t (id,a) values (575,80);
+insert into t (id,a) values (575,81);
+insert into t (id,a) values (575,82);
+insert into t (id,a) values (575,83);
+insert into t (id,a) values (575,84);
+insert into t (id,a) values (575,85);
+insert into t (id,a) values (575,86);
+insert into t (id,a) values (575,87);
+insert into t (id,a) values (575,88);
+insert into t (id,a) values (575,89);
+insert into t (id,a) values (575,90);
+insert into t (id,a) values (575,91);
+insert into t (id,a) values (575,92);
+insert into t (id,a) values (575,93);
+insert into t (id,a) values (575,94);
+insert into t (id,a) values (575,95);
+insert into t (id,a) values (575,96);
+insert into t (id,a) values (575,97);
+insert into t (id,a) values (575,98);
+insert into t (id,a) values (575,99);
+insert into t (id,a) values (576,0);
+insert into t (id,a) values (576,1);
+insert into t (id,a) values (576,2);
+insert into t (id,a) values (576,3);
+insert into t (id,a) values (576,4);
+insert into t (id,a) values (576,5);
+insert into t (id,a) values (576,6);
+insert into t (id,a) values (576,7);
+insert into t (id,a) values (576,8);
+insert into t (id,a) values (576,9);
+insert into t (id,a) values (576,10);
+insert into t (id,a) values (576,11);
+insert into t (id,a) values (576,12);
+insert into t (id,a) values (576,13);
+insert into t (id,a) values (576,14);
+insert into t (id,a) values (576,15);
+insert into t (id,a) values (576,16);
+insert into t (id,a) values (576,17);
+insert into t (id,a) values (576,18);
+insert into t (id,a) values (576,19);
+insert into t (id,a) values (576,20);
+insert into t (id,a) values (576,21);
+insert into t (id,a) values (576,22);
+insert into t (id,a) values (576,23);
+insert into t (id,a) values (576,24);
+insert into t (id,a) values (576,25);
+insert into t (id,a) values (576,26);
+insert into t (id,a) values (576,27);
+insert into t (id,a) values (576,28);
+insert into t (id,a) values (576,29);
+insert into t (id,a) values (576,30);
+insert into t (id,a) values (576,31);
+insert into t (id,a) values (576,32);
+insert into t (id,a) values (576,33);
+insert into t (id,a) values (576,34);
+insert into t (id,a) values (576,35);
+insert into t (id,a) values (576,36);
+insert into t (id,a) values (576,37);
+insert into t (id,a) values (576,38);
+insert into t (id,a) values (576,39);
+insert into t (id,a) values (576,40);
+insert into t (id,a) values (576,41);
+insert into t (id,a) values (576,42);
+insert into t (id,a) values (576,43);
+insert into t (id,a) values (576,44);
+insert into t (id,a) values (576,45);
+insert into t (id,a) values (576,46);
+insert into t (id,a) values (576,47);
+insert into t (id,a) values (576,48);
+insert into t (id,a) values (576,49);
+insert into t (id,a) values (576,50);
+insert into t (id,a) values (576,51);
+insert into t (id,a) values (576,52);
+insert into t (id,a) values (576,53);
+insert into t (id,a) values (576,54);
+insert into t (id,a) values (576,55);
+insert into t (id,a) values (576,56);
+insert into t (id,a) values (576,57);
+insert into t (id,a) values (576,58);
+insert into t (id,a) values (576,59);
+insert into t (id,a) values (576,60);
+insert into t (id,a) values (576,61);
+insert into t (id,a) values (576,62);
+insert into t (id,a) values (576,63);
+insert into t (id,a) values (576,64);
+insert into t (id,a) values (576,65);
+insert into t (id,a) values (576,66);
+insert into t (id,a) values (576,67);
+insert into t (id,a) values (576,68);
+insert into t (id,a) values (576,69);
+insert into t (id,a) values (576,70);
+insert into t (id,a) values (576,71);
+insert into t (id,a) values (576,72);
+insert into t (id,a) values (576,73);
+insert into t (id,a) values (576,74);
+insert into t (id,a) values (576,75);
+insert into t (id,a) values (576,76);
+insert into t (id,a) values (576,77);
+insert into t (id,a) values (576,78);
+insert into t (id,a) values (576,79);
+insert into t (id,a) values (576,80);
+insert into t (id,a) values (576,81);
+insert into t (id,a) values (576,82);
+insert into t (id,a) values (576,83);
+insert into t (id,a) values (576,84);
+insert into t (id,a) values (576,85);
+insert into t (id,a) values (576,86);
+insert into t (id,a) values (576,87);
+insert into t (id,a) values (576,88);
+insert into t (id,a) values (576,89);
+insert into t (id,a) values (576,90);
+insert into t (id,a) values (576,91);
+insert into t (id,a) values (576,92);
+insert into t (id,a) values (576,93);
+insert into t (id,a) values (576,94);
+insert into t (id,a) values (576,95);
+insert into t (id,a) values (576,96);
+insert into t (id,a) values (576,97);
+insert into t (id,a) values (576,98);
+insert into t (id,a) values (576,99);
+insert into t (id,a) values (577,0);
+insert into t (id,a) values (577,1);
+insert into t (id,a) values (577,2);
+insert into t (id,a) values (577,3);
+insert into t (id,a) values (577,4);
+insert into t (id,a) values (577,5);
+insert into t (id,a) values (577,6);
+insert into t (id,a) values (577,7);
+insert into t (id,a) values (577,8);
+insert into t (id,a) values (577,9);
+insert into t (id,a) values (577,10);
+insert into t (id,a) values (577,11);
+insert into t (id,a) values (577,12);
+insert into t (id,a) values (577,13);
+insert into t (id,a) values (577,14);
+insert into t (id,a) values (577,15);
+insert into t (id,a) values (577,16);
+insert into t (id,a) values (577,17);
+insert into t (id,a) values (577,18);
+insert into t (id,a) values (577,19);
+insert into t (id,a) values (577,20);
+insert into t (id,a) values (577,21);
+insert into t (id,a) values (577,22);
+insert into t (id,a) values (577,23);
+insert into t (id,a) values (577,24);
+insert into t (id,a) values (577,25);
+insert into t (id,a) values (577,26);
+insert into t (id,a) values (577,27);
+insert into t (id,a) values (577,28);
+insert into t (id,a) values (577,29);
+insert into t (id,a) values (577,30);
+insert into t (id,a) values (577,31);
+insert into t (id,a) values (577,32);
+insert into t (id,a) values (577,33);
+insert into t (id,a) values (577,34);
+insert into t (id,a) values (577,35);
+insert into t (id,a) values (577,36);
+insert into t (id,a) values (577,37);
+insert into t (id,a) values (577,38);
+insert into t (id,a) values (577,39);
+insert into t (id,a) values (577,40);
+insert into t (id,a) values (577,41);
+insert into t (id,a) values (577,42);
+insert into t (id,a) values (577,43);
+insert into t (id,a) values (577,44);
+insert into t (id,a) values (577,45);
+insert into t (id,a) values (577,46);
+insert into t (id,a) values (577,47);
+insert into t (id,a) values (577,48);
+insert into t (id,a) values (577,49);
+insert into t (id,a) values (577,50);
+insert into t (id,a) values (577,51);
+insert into t (id,a) values (577,52);
+insert into t (id,a) values (577,53);
+insert into t (id,a) values (577,54);
+insert into t (id,a) values (577,55);
+insert into t (id,a) values (577,56);
+insert into t (id,a) values (577,57);
+insert into t (id,a) values (577,58);
+insert into t (id,a) values (577,59);
+insert into t (id,a) values (577,60);
+insert into t (id,a) values (577,61);
+insert into t (id,a) values (577,62);
+insert into t (id,a) values (577,63);
+insert into t (id,a) values (577,64);
+insert into t (id,a) values (577,65);
+insert into t (id,a) values (577,66);
+insert into t (id,a) values (577,67);
+insert into t (id,a) values (577,68);
+insert into t (id,a) values (577,69);
+insert into t (id,a) values (577,70);
+insert into t (id,a) values (577,71);
+insert into t (id,a) values (577,72);
+insert into t (id,a) values (577,73);
+insert into t (id,a) values (577,74);
+insert into t (id,a) values (577,75);
+insert into t (id,a) values (577,76);
+insert into t (id,a) values (577,77);
+insert into t (id,a) values (577,78);
+insert into t (id,a) values (577,79);
+insert into t (id,a) values (577,80);
+insert into t (id,a) values (577,81);
+insert into t (id,a) values (577,82);
+insert into t (id,a) values (577,83);
+insert into t (id,a) values (577,84);
+insert into t (id,a) values (577,85);
+insert into t (id,a) values (577,86);
+insert into t (id,a) values (577,87);
+insert into t (id,a) values (577,88);
+insert into t (id,a) values (577,89);
+insert into t (id,a) values (577,90);
+insert into t (id,a) values (577,91);
+insert into t (id,a) values (577,92);
+insert into t (id,a) values (577,93);
+insert into t (id,a) values (577,94);
+insert into t (id,a) values (577,95);
+insert into t (id,a) values (577,96);
+insert into t (id,a) values (577,97);
+insert into t (id,a) values (577,98);
+insert into t (id,a) values (577,99);
+insert into t (id,a) values (578,0);
+insert into t (id,a) values (578,1);
+insert into t (id,a) values (578,2);
+insert into t (id,a) values (578,3);
+insert into t (id,a) values (578,4);
+insert into t (id,a) values (578,5);
+insert into t (id,a) values (578,6);
+insert into t (id,a) values (578,7);
+insert into t (id,a) values (578,8);
+insert into t (id,a) values (578,9);
+insert into t (id,a) values (578,10);
+insert into t (id,a) values (578,11);
+insert into t (id,a) values (578,12);
+insert into t (id,a) values (578,13);
+insert into t (id,a) values (578,14);
+insert into t (id,a) values (578,15);
+insert into t (id,a) values (578,16);
+insert into t (id,a) values (578,17);
+insert into t (id,a) values (578,18);
+insert into t (id,a) values (578,19);
+insert into t (id,a) values (578,20);
+insert into t (id,a) values (578,21);
+insert into t (id,a) values (578,22);
+insert into t (id,a) values (578,23);
+insert into t (id,a) values (578,24);
+insert into t (id,a) values (578,25);
+insert into t (id,a) values (578,26);
+insert into t (id,a) values (578,27);
+insert into t (id,a) values (578,28);
+insert into t (id,a) values (578,29);
+insert into t (id,a) values (578,30);
+insert into t (id,a) values (578,31);
+insert into t (id,a) values (578,32);
+insert into t (id,a) values (578,33);
+insert into t (id,a) values (578,34);
+insert into t (id,a) values (578,35);
+insert into t (id,a) values (578,36);
+insert into t (id,a) values (578,37);
+insert into t (id,a) values (578,38);
+insert into t (id,a) values (578,39);
+insert into t (id,a) values (578,40);
+insert into t (id,a) values (578,41);
+insert into t (id,a) values (578,42);
+insert into t (id,a) values (578,43);
+insert into t (id,a) values (578,44);
+insert into t (id,a) values (578,45);
+insert into t (id,a) values (578,46);
+insert into t (id,a) values (578,47);
+insert into t (id,a) values (578,48);
+insert into t (id,a) values (578,49);
+insert into t (id,a) values (578,50);
+insert into t (id,a) values (578,51);
+insert into t (id,a) values (578,52);
+insert into t (id,a) values (578,53);
+insert into t (id,a) values (578,54);
+insert into t (id,a) values (578,55);
+insert into t (id,a) values (578,56);
+insert into t (id,a) values (578,57);
+insert into t (id,a) values (578,58);
+insert into t (id,a) values (578,59);
+insert into t (id,a) values (578,60);
+insert into t (id,a) values (578,61);
+insert into t (id,a) values (578,62);
+insert into t (id,a) values (578,63);
+insert into t (id,a) values (578,64);
+insert into t (id,a) values (578,65);
+insert into t (id,a) values (578,66);
+insert into t (id,a) values (578,67);
+insert into t (id,a) values (578,68);
+insert into t (id,a) values (578,69);
+insert into t (id,a) values (578,70);
+insert into t (id,a) values (578,71);
+insert into t (id,a) values (578,72);
+insert into t (id,a) values (578,73);
+insert into t (id,a) values (578,74);
+insert into t (id,a) values (578,75);
+insert into t (id,a) values (578,76);
+insert into t (id,a) values (578,77);
+insert into t (id,a) values (578,78);
+insert into t (id,a) values (578,79);
+insert into t (id,a) values (578,80);
+insert into t (id,a) values (578,81);
+insert into t (id,a) values (578,82);
+insert into t (id,a) values (578,83);
+insert into t (id,a) values (578,84);
+insert into t (id,a) values (578,85);
+insert into t (id,a) values (578,86);
+insert into t (id,a) values (578,87);
+insert into t (id,a) values (578,88);
+insert into t (id,a) values (578,89);
+insert into t (id,a) values (578,90);
+insert into t (id,a) values (578,91);
+insert into t (id,a) values (578,92);
+insert into t (id,a) values (578,93);
+insert into t (id,a) values (578,94);
+insert into t (id,a) values (578,95);
+insert into t (id,a) values (578,96);
+insert into t (id,a) values (578,97);
+insert into t (id,a) values (578,98);
+insert into t (id,a) values (578,99);
+insert into t (id,a) values (579,0);
+insert into t (id,a) values (579,1);
+insert into t (id,a) values (579,2);
+insert into t (id,a) values (579,3);
+insert into t (id,a) values (579,4);
+insert into t (id,a) values (579,5);
+insert into t (id,a) values (579,6);
+insert into t (id,a) values (579,7);
+insert into t (id,a) values (579,8);
+insert into t (id,a) values (579,9);
+insert into t (id,a) values (579,10);
+insert into t (id,a) values (579,11);
+insert into t (id,a) values (579,12);
+insert into t (id,a) values (579,13);
+insert into t (id,a) values (579,14);
+insert into t (id,a) values (579,15);
+insert into t (id,a) values (579,16);
+insert into t (id,a) values (579,17);
+insert into t (id,a) values (579,18);
+insert into t (id,a) values (579,19);
+insert into t (id,a) values (579,20);
+insert into t (id,a) values (579,21);
+insert into t (id,a) values (579,22);
+insert into t (id,a) values (579,23);
+insert into t (id,a) values (579,24);
+insert into t (id,a) values (579,25);
+insert into t (id,a) values (579,26);
+insert into t (id,a) values (579,27);
+insert into t (id,a) values (579,28);
+insert into t (id,a) values (579,29);
+insert into t (id,a) values (579,30);
+insert into t (id,a) values (579,31);
+insert into t (id,a) values (579,32);
+insert into t (id,a) values (579,33);
+insert into t (id,a) values (579,34);
+insert into t (id,a) values (579,35);
+insert into t (id,a) values (579,36);
+insert into t (id,a) values (579,37);
+insert into t (id,a) values (579,38);
+insert into t (id,a) values (579,39);
+insert into t (id,a) values (579,40);
+insert into t (id,a) values (579,41);
+insert into t (id,a) values (579,42);
+insert into t (id,a) values (579,43);
+insert into t (id,a) values (579,44);
+insert into t (id,a) values (579,45);
+insert into t (id,a) values (579,46);
+insert into t (id,a) values (579,47);
+insert into t (id,a) values (579,48);
+insert into t (id,a) values (579,49);
+insert into t (id,a) values (579,50);
+insert into t (id,a) values (579,51);
+insert into t (id,a) values (579,52);
+insert into t (id,a) values (579,53);
+insert into t (id,a) values (579,54);
+insert into t (id,a) values (579,55);
+insert into t (id,a) values (579,56);
+insert into t (id,a) values (579,57);
+insert into t (id,a) values (579,58);
+insert into t (id,a) values (579,59);
+insert into t (id,a) values (579,60);
+insert into t (id,a) values (579,61);
+insert into t (id,a) values (579,62);
+insert into t (id,a) values (579,63);
+insert into t (id,a) values (579,64);
+insert into t (id,a) values (579,65);
+insert into t (id,a) values (579,66);
+insert into t (id,a) values (579,67);
+insert into t (id,a) values (579,68);
+insert into t (id,a) values (579,69);
+insert into t (id,a) values (579,70);
+insert into t (id,a) values (579,71);
+insert into t (id,a) values (579,72);
+insert into t (id,a) values (579,73);
+insert into t (id,a) values (579,74);
+insert into t (id,a) values (579,75);
+insert into t (id,a) values (579,76);
+insert into t (id,a) values (579,77);
+insert into t (id,a) values (579,78);
+insert into t (id,a) values (579,79);
+insert into t (id,a) values (579,80);
+insert into t (id,a) values (579,81);
+insert into t (id,a) values (579,82);
+insert into t (id,a) values (579,83);
+insert into t (id,a) values (579,84);
+insert into t (id,a) values (579,85);
+insert into t (id,a) values (579,86);
+insert into t (id,a) values (579,87);
+insert into t (id,a) values (579,88);
+insert into t (id,a) values (579,89);
+insert into t (id,a) values (579,90);
+insert into t (id,a) values (579,91);
+insert into t (id,a) values (579,92);
+insert into t (id,a) values (579,93);
+insert into t (id,a) values (579,94);
+insert into t (id,a) values (579,95);
+insert into t (id,a) values (579,96);
+insert into t (id,a) values (579,97);
+insert into t (id,a) values (579,98);
+insert into t (id,a) values (579,99);
+insert into t (id,a) values (580,0);
+insert into t (id,a) values (580,1);
+insert into t (id,a) values (580,2);
+insert into t (id,a) values (580,3);
+insert into t (id,a) values (580,4);
+insert into t (id,a) values (580,5);
+insert into t (id,a) values (580,6);
+insert into t (id,a) values (580,7);
+insert into t (id,a) values (580,8);
+insert into t (id,a) values (580,9);
+insert into t (id,a) values (580,10);
+insert into t (id,a) values (580,11);
+insert into t (id,a) values (580,12);
+insert into t (id,a) values (580,13);
+insert into t (id,a) values (580,14);
+insert into t (id,a) values (580,15);
+insert into t (id,a) values (580,16);
+insert into t (id,a) values (580,17);
+insert into t (id,a) values (580,18);
+insert into t (id,a) values (580,19);
+insert into t (id,a) values (580,20);
+insert into t (id,a) values (580,21);
+insert into t (id,a) values (580,22);
+insert into t (id,a) values (580,23);
+insert into t (id,a) values (580,24);
+insert into t (id,a) values (580,25);
+insert into t (id,a) values (580,26);
+insert into t (id,a) values (580,27);
+insert into t (id,a) values (580,28);
+insert into t (id,a) values (580,29);
+insert into t (id,a) values (580,30);
+insert into t (id,a) values (580,31);
+insert into t (id,a) values (580,32);
+insert into t (id,a) values (580,33);
+insert into t (id,a) values (580,34);
+insert into t (id,a) values (580,35);
+insert into t (id,a) values (580,36);
+insert into t (id,a) values (580,37);
+insert into t (id,a) values (580,38);
+insert into t (id,a) values (580,39);
+insert into t (id,a) values (580,40);
+insert into t (id,a) values (580,41);
+insert into t (id,a) values (580,42);
+insert into t (id,a) values (580,43);
+insert into t (id,a) values (580,44);
+insert into t (id,a) values (580,45);
+insert into t (id,a) values (580,46);
+insert into t (id,a) values (580,47);
+insert into t (id,a) values (580,48);
+insert into t (id,a) values (580,49);
+insert into t (id,a) values (580,50);
+insert into t (id,a) values (580,51);
+insert into t (id,a) values (580,52);
+insert into t (id,a) values (580,53);
+insert into t (id,a) values (580,54);
+insert into t (id,a) values (580,55);
+insert into t (id,a) values (580,56);
+insert into t (id,a) values (580,57);
+insert into t (id,a) values (580,58);
+insert into t (id,a) values (580,59);
+insert into t (id,a) values (580,60);
+insert into t (id,a) values (580,61);
+insert into t (id,a) values (580,62);
+insert into t (id,a) values (580,63);
+insert into t (id,a) values (580,64);
+insert into t (id,a) values (580,65);
+insert into t (id,a) values (580,66);
+insert into t (id,a) values (580,67);
+insert into t (id,a) values (580,68);
+insert into t (id,a) values (580,69);
+insert into t (id,a) values (580,70);
+insert into t (id,a) values (580,71);
+insert into t (id,a) values (580,72);
+insert into t (id,a) values (580,73);
+insert into t (id,a) values (580,74);
+insert into t (id,a) values (580,75);
+insert into t (id,a) values (580,76);
+insert into t (id,a) values (580,77);
+insert into t (id,a) values (580,78);
+insert into t (id,a) values (580,79);
+insert into t (id,a) values (580,80);
+insert into t (id,a) values (580,81);
+insert into t (id,a) values (580,82);
+insert into t (id,a) values (580,83);
+insert into t (id,a) values (580,84);
+insert into t (id,a) values (580,85);
+insert into t (id,a) values (580,86);
+insert into t (id,a) values (580,87);
+insert into t (id,a) values (580,88);
+insert into t (id,a) values (580,89);
+insert into t (id,a) values (580,90);
+insert into t (id,a) values (580,91);
+insert into t (id,a) values (580,92);
+insert into t (id,a) values (580,93);
+insert into t (id,a) values (580,94);
+insert into t (id,a) values (580,95);
+insert into t (id,a) values (580,96);
+insert into t (id,a) values (580,97);
+insert into t (id,a) values (580,98);
+insert into t (id,a) values (580,99);
+insert into t (id,a) values (581,0);
+insert into t (id,a) values (581,1);
+insert into t (id,a) values (581,2);
+insert into t (id,a) values (581,3);
+insert into t (id,a) values (581,4);
+insert into t (id,a) values (581,5);
+insert into t (id,a) values (581,6);
+insert into t (id,a) values (581,7);
+insert into t (id,a) values (581,8);
+insert into t (id,a) values (581,9);
+insert into t (id,a) values (581,10);
+insert into t (id,a) values (581,11);
+insert into t (id,a) values (581,12);
+insert into t (id,a) values (581,13);
+insert into t (id,a) values (581,14);
+insert into t (id,a) values (581,15);
+insert into t (id,a) values (581,16);
+insert into t (id,a) values (581,17);
+insert into t (id,a) values (581,18);
+insert into t (id,a) values (581,19);
+insert into t (id,a) values (581,20);
+insert into t (id,a) values (581,21);
+insert into t (id,a) values (581,22);
+insert into t (id,a) values (581,23);
+insert into t (id,a) values (581,24);
+insert into t (id,a) values (581,25);
+insert into t (id,a) values (581,26);
+insert into t (id,a) values (581,27);
+insert into t (id,a) values (581,28);
+insert into t (id,a) values (581,29);
+insert into t (id,a) values (581,30);
+insert into t (id,a) values (581,31);
+insert into t (id,a) values (581,32);
+insert into t (id,a) values (581,33);
+insert into t (id,a) values (581,34);
+insert into t (id,a) values (581,35);
+insert into t (id,a) values (581,36);
+insert into t (id,a) values (581,37);
+insert into t (id,a) values (581,38);
+insert into t (id,a) values (581,39);
+insert into t (id,a) values (581,40);
+insert into t (id,a) values (581,41);
+insert into t (id,a) values (581,42);
+insert into t (id,a) values (581,43);
+insert into t (id,a) values (581,44);
+insert into t (id,a) values (581,45);
+insert into t (id,a) values (581,46);
+insert into t (id,a) values (581,47);
+insert into t (id,a) values (581,48);
+insert into t (id,a) values (581,49);
+insert into t (id,a) values (581,50);
+insert into t (id,a) values (581,51);
+insert into t (id,a) values (581,52);
+insert into t (id,a) values (581,53);
+insert into t (id,a) values (581,54);
+insert into t (id,a) values (581,55);
+insert into t (id,a) values (581,56);
+insert into t (id,a) values (581,57);
+insert into t (id,a) values (581,58);
+insert into t (id,a) values (581,59);
+insert into t (id,a) values (581,60);
+insert into t (id,a) values (581,61);
+insert into t (id,a) values (581,62);
+insert into t (id,a) values (581,63);
+insert into t (id,a) values (581,64);
+insert into t (id,a) values (581,65);
+insert into t (id,a) values (581,66);
+insert into t (id,a) values (581,67);
+insert into t (id,a) values (581,68);
+insert into t (id,a) values (581,69);
+insert into t (id,a) values (581,70);
+insert into t (id,a) values (581,71);
+insert into t (id,a) values (581,72);
+insert into t (id,a) values (581,73);
+insert into t (id,a) values (581,74);
+insert into t (id,a) values (581,75);
+insert into t (id,a) values (581,76);
+insert into t (id,a) values (581,77);
+insert into t (id,a) values (581,78);
+insert into t (id,a) values (581,79);
+insert into t (id,a) values (581,80);
+insert into t (id,a) values (581,81);
+insert into t (id,a) values (581,82);
+insert into t (id,a) values (581,83);
+insert into t (id,a) values (581,84);
+insert into t (id,a) values (581,85);
+insert into t (id,a) values (581,86);
+insert into t (id,a) values (581,87);
+insert into t (id,a) values (581,88);
+insert into t (id,a) values (581,89);
+insert into t (id,a) values (581,90);
+insert into t (id,a) values (581,91);
+insert into t (id,a) values (581,92);
+insert into t (id,a) values (581,93);
+insert into t (id,a) values (581,94);
+insert into t (id,a) values (581,95);
+insert into t (id,a) values (581,96);
+insert into t (id,a) values (581,97);
+insert into t (id,a) values (581,98);
+insert into t (id,a) values (581,99);
+insert into t (id,a) values (582,0);
+insert into t (id,a) values (582,1);
+insert into t (id,a) values (582,2);
+insert into t (id,a) values (582,3);
+insert into t (id,a) values (582,4);
+insert into t (id,a) values (582,5);
+insert into t (id,a) values (582,6);
+insert into t (id,a) values (582,7);
+insert into t (id,a) values (582,8);
+insert into t (id,a) values (582,9);
+insert into t (id,a) values (582,10);
+insert into t (id,a) values (582,11);
+insert into t (id,a) values (582,12);
+insert into t (id,a) values (582,13);
+insert into t (id,a) values (582,14);
+insert into t (id,a) values (582,15);
+insert into t (id,a) values (582,16);
+insert into t (id,a) values (582,17);
+insert into t (id,a) values (582,18);
+insert into t (id,a) values (582,19);
+insert into t (id,a) values (582,20);
+insert into t (id,a) values (582,21);
+insert into t (id,a) values (582,22);
+insert into t (id,a) values (582,23);
+insert into t (id,a) values (582,24);
+insert into t (id,a) values (582,25);
+insert into t (id,a) values (582,26);
+insert into t (id,a) values (582,27);
+insert into t (id,a) values (582,28);
+insert into t (id,a) values (582,29);
+insert into t (id,a) values (582,30);
+insert into t (id,a) values (582,31);
+insert into t (id,a) values (582,32);
+insert into t (id,a) values (582,33);
+insert into t (id,a) values (582,34);
+insert into t (id,a) values (582,35);
+insert into t (id,a) values (582,36);
+insert into t (id,a) values (582,37);
+insert into t (id,a) values (582,38);
+insert into t (id,a) values (582,39);
+insert into t (id,a) values (582,40);
+insert into t (id,a) values (582,41);
+insert into t (id,a) values (582,42);
+insert into t (id,a) values (582,43);
+insert into t (id,a) values (582,44);
+insert into t (id,a) values (582,45);
+insert into t (id,a) values (582,46);
+insert into t (id,a) values (582,47);
+insert into t (id,a) values (582,48);
+insert into t (id,a) values (582,49);
+insert into t (id,a) values (582,50);
+insert into t (id,a) values (582,51);
+insert into t (id,a) values (582,52);
+insert into t (id,a) values (582,53);
+insert into t (id,a) values (582,54);
+insert into t (id,a) values (582,55);
+insert into t (id,a) values (582,56);
+insert into t (id,a) values (582,57);
+insert into t (id,a) values (582,58);
+insert into t (id,a) values (582,59);
+insert into t (id,a) values (582,60);
+insert into t (id,a) values (582,61);
+insert into t (id,a) values (582,62);
+insert into t (id,a) values (582,63);
+insert into t (id,a) values (582,64);
+insert into t (id,a) values (582,65);
+insert into t (id,a) values (582,66);
+insert into t (id,a) values (582,67);
+insert into t (id,a) values (582,68);
+insert into t (id,a) values (582,69);
+insert into t (id,a) values (582,70);
+insert into t (id,a) values (582,71);
+insert into t (id,a) values (582,72);
+insert into t (id,a) values (582,73);
+insert into t (id,a) values (582,74);
+insert into t (id,a) values (582,75);
+insert into t (id,a) values (582,76);
+insert into t (id,a) values (582,77);
+insert into t (id,a) values (582,78);
+insert into t (id,a) values (582,79);
+insert into t (id,a) values (582,80);
+insert into t (id,a) values (582,81);
+insert into t (id,a) values (582,82);
+insert into t (id,a) values (582,83);
+insert into t (id,a) values (582,84);
+insert into t (id,a) values (582,85);
+insert into t (id,a) values (582,86);
+insert into t (id,a) values (582,87);
+insert into t (id,a) values (582,88);
+insert into t (id,a) values (582,89);
+insert into t (id,a) values (582,90);
+insert into t (id,a) values (582,91);
+insert into t (id,a) values (582,92);
+insert into t (id,a) values (582,93);
+insert into t (id,a) values (582,94);
+insert into t (id,a) values (582,95);
+insert into t (id,a) values (582,96);
+insert into t (id,a) values (582,97);
+insert into t (id,a) values (582,98);
+insert into t (id,a) values (582,99);
+insert into t (id,a) values (583,0);
+insert into t (id,a) values (583,1);
+insert into t (id,a) values (583,2);
+insert into t (id,a) values (583,3);
+insert into t (id,a) values (583,4);
+insert into t (id,a) values (583,5);
+insert into t (id,a) values (583,6);
+insert into t (id,a) values (583,7);
+insert into t (id,a) values (583,8);
+insert into t (id,a) values (583,9);
+insert into t (id,a) values (583,10);
+insert into t (id,a) values (583,11);
+insert into t (id,a) values (583,12);
+insert into t (id,a) values (583,13);
+insert into t (id,a) values (583,14);
+insert into t (id,a) values (583,15);
+insert into t (id,a) values (583,16);
+insert into t (id,a) values (583,17);
+insert into t (id,a) values (583,18);
+insert into t (id,a) values (583,19);
+insert into t (id,a) values (583,20);
+insert into t (id,a) values (583,21);
+insert into t (id,a) values (583,22);
+insert into t (id,a) values (583,23);
+insert into t (id,a) values (583,24);
+insert into t (id,a) values (583,25);
+insert into t (id,a) values (583,26);
+insert into t (id,a) values (583,27);
+insert into t (id,a) values (583,28);
+insert into t (id,a) values (583,29);
+insert into t (id,a) values (583,30);
+insert into t (id,a) values (583,31);
+insert into t (id,a) values (583,32);
+insert into t (id,a) values (583,33);
+insert into t (id,a) values (583,34);
+insert into t (id,a) values (583,35);
+insert into t (id,a) values (583,36);
+insert into t (id,a) values (583,37);
+insert into t (id,a) values (583,38);
+insert into t (id,a) values (583,39);
+insert into t (id,a) values (583,40);
+insert into t (id,a) values (583,41);
+insert into t (id,a) values (583,42);
+insert into t (id,a) values (583,43);
+insert into t (id,a) values (583,44);
+insert into t (id,a) values (583,45);
+insert into t (id,a) values (583,46);
+insert into t (id,a) values (583,47);
+insert into t (id,a) values (583,48);
+insert into t (id,a) values (583,49);
+insert into t (id,a) values (583,50);
+insert into t (id,a) values (583,51);
+insert into t (id,a) values (583,52);
+insert into t (id,a) values (583,53);
+insert into t (id,a) values (583,54);
+insert into t (id,a) values (583,55);
+insert into t (id,a) values (583,56);
+insert into t (id,a) values (583,57);
+insert into t (id,a) values (583,58);
+insert into t (id,a) values (583,59);
+insert into t (id,a) values (583,60);
+insert into t (id,a) values (583,61);
+insert into t (id,a) values (583,62);
+insert into t (id,a) values (583,63);
+insert into t (id,a) values (583,64);
+insert into t (id,a) values (583,65);
+insert into t (id,a) values (583,66);
+insert into t (id,a) values (583,67);
+insert into t (id,a) values (583,68);
+insert into t (id,a) values (583,69);
+insert into t (id,a) values (583,70);
+insert into t (id,a) values (583,71);
+insert into t (id,a) values (583,72);
+insert into t (id,a) values (583,73);
+insert into t (id,a) values (583,74);
+insert into t (id,a) values (583,75);
+insert into t (id,a) values (583,76);
+insert into t (id,a) values (583,77);
+insert into t (id,a) values (583,78);
+insert into t (id,a) values (583,79);
+insert into t (id,a) values (583,80);
+insert into t (id,a) values (583,81);
+insert into t (id,a) values (583,82);
+insert into t (id,a) values (583,83);
+insert into t (id,a) values (583,84);
+insert into t (id,a) values (583,85);
+insert into t (id,a) values (583,86);
+insert into t (id,a) values (583,87);
+insert into t (id,a) values (583,88);
+insert into t (id,a) values (583,89);
+insert into t (id,a) values (583,90);
+insert into t (id,a) values (583,91);
+insert into t (id,a) values (583,92);
+insert into t (id,a) values (583,93);
+insert into t (id,a) values (583,94);
+insert into t (id,a) values (583,95);
+insert into t (id,a) values (583,96);
+insert into t (id,a) values (583,97);
+insert into t (id,a) values (583,98);
+insert into t (id,a) values (583,99);
+insert into t (id,a) values (584,0);
+insert into t (id,a) values (584,1);
+insert into t (id,a) values (584,2);
+insert into t (id,a) values (584,3);
+insert into t (id,a) values (584,4);
+insert into t (id,a) values (584,5);
+insert into t (id,a) values (584,6);
+insert into t (id,a) values (584,7);
+insert into t (id,a) values (584,8);
+insert into t (id,a) values (584,9);
+insert into t (id,a) values (584,10);
+insert into t (id,a) values (584,11);
+insert into t (id,a) values (584,12);
+insert into t (id,a) values (584,13);
+insert into t (id,a) values (584,14);
+insert into t (id,a) values (584,15);
+insert into t (id,a) values (584,16);
+insert into t (id,a) values (584,17);
+insert into t (id,a) values (584,18);
+insert into t (id,a) values (584,19);
+insert into t (id,a) values (584,20);
+insert into t (id,a) values (584,21);
+insert into t (id,a) values (584,22);
+insert into t (id,a) values (584,23);
+insert into t (id,a) values (584,24);
+insert into t (id,a) values (584,25);
+insert into t (id,a) values (584,26);
+insert into t (id,a) values (584,27);
+insert into t (id,a) values (584,28);
+insert into t (id,a) values (584,29);
+insert into t (id,a) values (584,30);
+insert into t (id,a) values (584,31);
+insert into t (id,a) values (584,32);
+insert into t (id,a) values (584,33);
+insert into t (id,a) values (584,34);
+insert into t (id,a) values (584,35);
+insert into t (id,a) values (584,36);
+insert into t (id,a) values (584,37);
+insert into t (id,a) values (584,38);
+insert into t (id,a) values (584,39);
+insert into t (id,a) values (584,40);
+insert into t (id,a) values (584,41);
+insert into t (id,a) values (584,42);
+insert into t (id,a) values (584,43);
+insert into t (id,a) values (584,44);
+insert into t (id,a) values (584,45);
+insert into t (id,a) values (584,46);
+insert into t (id,a) values (584,47);
+insert into t (id,a) values (584,48);
+insert into t (id,a) values (584,49);
+insert into t (id,a) values (584,50);
+insert into t (id,a) values (584,51);
+insert into t (id,a) values (584,52);
+insert into t (id,a) values (584,53);
+insert into t (id,a) values (584,54);
+insert into t (id,a) values (584,55);
+insert into t (id,a) values (584,56);
+insert into t (id,a) values (584,57);
+insert into t (id,a) values (584,58);
+insert into t (id,a) values (584,59);
+insert into t (id,a) values (584,60);
+insert into t (id,a) values (584,61);
+insert into t (id,a) values (584,62);
+insert into t (id,a) values (584,63);
+insert into t (id,a) values (584,64);
+insert into t (id,a) values (584,65);
+insert into t (id,a) values (584,66);
+insert into t (id,a) values (584,67);
+insert into t (id,a) values (584,68);
+insert into t (id,a) values (584,69);
+insert into t (id,a) values (584,70);
+insert into t (id,a) values (584,71);
+insert into t (id,a) values (584,72);
+insert into t (id,a) values (584,73);
+insert into t (id,a) values (584,74);
+insert into t (id,a) values (584,75);
+insert into t (id,a) values (584,76);
+insert into t (id,a) values (584,77);
+insert into t (id,a) values (584,78);
+insert into t (id,a) values (584,79);
+insert into t (id,a) values (584,80);
+insert into t (id,a) values (584,81);
+insert into t (id,a) values (584,82);
+insert into t (id,a) values (584,83);
+insert into t (id,a) values (584,84);
+insert into t (id,a) values (584,85);
+insert into t (id,a) values (584,86);
+insert into t (id,a) values (584,87);
+insert into t (id,a) values (584,88);
+insert into t (id,a) values (584,89);
+insert into t (id,a) values (584,90);
+insert into t (id,a) values (584,91);
+insert into t (id,a) values (584,92);
+insert into t (id,a) values (584,93);
+insert into t (id,a) values (584,94);
+insert into t (id,a) values (584,95);
+insert into t (id,a) values (584,96);
+insert into t (id,a) values (584,97);
+insert into t (id,a) values (584,98);
+insert into t (id,a) values (584,99);
+insert into t (id,a) values (585,0);
+insert into t (id,a) values (585,1);
+insert into t (id,a) values (585,2);
+insert into t (id,a) values (585,3);
+insert into t (id,a) values (585,4);
+insert into t (id,a) values (585,5);
+insert into t (id,a) values (585,6);
+insert into t (id,a) values (585,7);
+insert into t (id,a) values (585,8);
+insert into t (id,a) values (585,9);
+insert into t (id,a) values (585,10);
+insert into t (id,a) values (585,11);
+insert into t (id,a) values (585,12);
+insert into t (id,a) values (585,13);
+insert into t (id,a) values (585,14);
+insert into t (id,a) values (585,15);
+insert into t (id,a) values (585,16);
+insert into t (id,a) values (585,17);
+insert into t (id,a) values (585,18);
+insert into t (id,a) values (585,19);
+insert into t (id,a) values (585,20);
+insert into t (id,a) values (585,21);
+insert into t (id,a) values (585,22);
+insert into t (id,a) values (585,23);
+insert into t (id,a) values (585,24);
+insert into t (id,a) values (585,25);
+insert into t (id,a) values (585,26);
+insert into t (id,a) values (585,27);
+insert into t (id,a) values (585,28);
+insert into t (id,a) values (585,29);
+insert into t (id,a) values (585,30);
+insert into t (id,a) values (585,31);
+insert into t (id,a) values (585,32);
+insert into t (id,a) values (585,33);
+insert into t (id,a) values (585,34);
+insert into t (id,a) values (585,35);
+insert into t (id,a) values (585,36);
+insert into t (id,a) values (585,37);
+insert into t (id,a) values (585,38);
+insert into t (id,a) values (585,39);
+insert into t (id,a) values (585,40);
+insert into t (id,a) values (585,41);
+insert into t (id,a) values (585,42);
+insert into t (id,a) values (585,43);
+insert into t (id,a) values (585,44);
+insert into t (id,a) values (585,45);
+insert into t (id,a) values (585,46);
+insert into t (id,a) values (585,47);
+insert into t (id,a) values (585,48);
+insert into t (id,a) values (585,49);
+insert into t (id,a) values (585,50);
+insert into t (id,a) values (585,51);
+insert into t (id,a) values (585,52);
+insert into t (id,a) values (585,53);
+insert into t (id,a) values (585,54);
+insert into t (id,a) values (585,55);
+insert into t (id,a) values (585,56);
+insert into t (id,a) values (585,57);
+insert into t (id,a) values (585,58);
+insert into t (id,a) values (585,59);
+insert into t (id,a) values (585,60);
+insert into t (id,a) values (585,61);
+insert into t (id,a) values (585,62);
+insert into t (id,a) values (585,63);
+insert into t (id,a) values (585,64);
+insert into t (id,a) values (585,65);
+insert into t (id,a) values (585,66);
+insert into t (id,a) values (585,67);
+insert into t (id,a) values (585,68);
+insert into t (id,a) values (585,69);
+insert into t (id,a) values (585,70);
+insert into t (id,a) values (585,71);
+insert into t (id,a) values (585,72);
+insert into t (id,a) values (585,73);
+insert into t (id,a) values (585,74);
+insert into t (id,a) values (585,75);
+insert into t (id,a) values (585,76);
+insert into t (id,a) values (585,77);
+insert into t (id,a) values (585,78);
+insert into t (id,a) values (585,79);
+insert into t (id,a) values (585,80);
+insert into t (id,a) values (585,81);
+insert into t (id,a) values (585,82);
+insert into t (id,a) values (585,83);
+insert into t (id,a) values (585,84);
+insert into t (id,a) values (585,85);
+insert into t (id,a) values (585,86);
+insert into t (id,a) values (585,87);
+insert into t (id,a) values (585,88);
+insert into t (id,a) values (585,89);
+insert into t (id,a) values (585,90);
+insert into t (id,a) values (585,91);
+insert into t (id,a) values (585,92);
+insert into t (id,a) values (585,93);
+insert into t (id,a) values (585,94);
+insert into t (id,a) values (585,95);
+insert into t (id,a) values (585,96);
+insert into t (id,a) values (585,97);
+insert into t (id,a) values (585,98);
+insert into t (id,a) values (585,99);
+insert into t (id,a) values (586,0);
+insert into t (id,a) values (586,1);
+insert into t (id,a) values (586,2);
+insert into t (id,a) values (586,3);
+insert into t (id,a) values (586,4);
+insert into t (id,a) values (586,5);
+insert into t (id,a) values (586,6);
+insert into t (id,a) values (586,7);
+insert into t (id,a) values (586,8);
+insert into t (id,a) values (586,9);
+insert into t (id,a) values (586,10);
+insert into t (id,a) values (586,11);
+insert into t (id,a) values (586,12);
+insert into t (id,a) values (586,13);
+insert into t (id,a) values (586,14);
+insert into t (id,a) values (586,15);
+insert into t (id,a) values (586,16);
+insert into t (id,a) values (586,17);
+insert into t (id,a) values (586,18);
+insert into t (id,a) values (586,19);
+insert into t (id,a) values (586,20);
+insert into t (id,a) values (586,21);
+insert into t (id,a) values (586,22);
+insert into t (id,a) values (586,23);
+insert into t (id,a) values (586,24);
+insert into t (id,a) values (586,25);
+insert into t (id,a) values (586,26);
+insert into t (id,a) values (586,27);
+insert into t (id,a) values (586,28);
+insert into t (id,a) values (586,29);
+insert into t (id,a) values (586,30);
+insert into t (id,a) values (586,31);
+insert into t (id,a) values (586,32);
+insert into t (id,a) values (586,33);
+insert into t (id,a) values (586,34);
+insert into t (id,a) values (586,35);
+insert into t (id,a) values (586,36);
+insert into t (id,a) values (586,37);
+insert into t (id,a) values (586,38);
+insert into t (id,a) values (586,39);
+insert into t (id,a) values (586,40);
+insert into t (id,a) values (586,41);
+insert into t (id,a) values (586,42);
+insert into t (id,a) values (586,43);
+insert into t (id,a) values (586,44);
+insert into t (id,a) values (586,45);
+insert into t (id,a) values (586,46);
+insert into t (id,a) values (586,47);
+insert into t (id,a) values (586,48);
+insert into t (id,a) values (586,49);
+insert into t (id,a) values (586,50);
+insert into t (id,a) values (586,51);
+insert into t (id,a) values (586,52);
+insert into t (id,a) values (586,53);
+insert into t (id,a) values (586,54);
+insert into t (id,a) values (586,55);
+insert into t (id,a) values (586,56);
+insert into t (id,a) values (586,57);
+insert into t (id,a) values (586,58);
+insert into t (id,a) values (586,59);
+insert into t (id,a) values (586,60);
+insert into t (id,a) values (586,61);
+insert into t (id,a) values (586,62);
+insert into t (id,a) values (586,63);
+insert into t (id,a) values (586,64);
+insert into t (id,a) values (586,65);
+insert into t (id,a) values (586,66);
+insert into t (id,a) values (586,67);
+insert into t (id,a) values (586,68);
+insert into t (id,a) values (586,69);
+insert into t (id,a) values (586,70);
+insert into t (id,a) values (586,71);
+insert into t (id,a) values (586,72);
+insert into t (id,a) values (586,73);
+insert into t (id,a) values (586,74);
+insert into t (id,a) values (586,75);
+insert into t (id,a) values (586,76);
+insert into t (id,a) values (586,77);
+insert into t (id,a) values (586,78);
+insert into t (id,a) values (586,79);
+insert into t (id,a) values (586,80);
+insert into t (id,a) values (586,81);
+insert into t (id,a) values (586,82);
+insert into t (id,a) values (586,83);
+insert into t (id,a) values (586,84);
+insert into t (id,a) values (586,85);
+insert into t (id,a) values (586,86);
+insert into t (id,a) values (586,87);
+insert into t (id,a) values (586,88);
+insert into t (id,a) values (586,89);
+insert into t (id,a) values (586,90);
+insert into t (id,a) values (586,91);
+insert into t (id,a) values (586,92);
+insert into t (id,a) values (586,93);
+insert into t (id,a) values (586,94);
+insert into t (id,a) values (586,95);
+insert into t (id,a) values (586,96);
+insert into t (id,a) values (586,97);
+insert into t (id,a) values (586,98);
+insert into t (id,a) values (586,99);
+insert into t (id,a) values (587,0);
+insert into t (id,a) values (587,1);
+insert into t (id,a) values (587,2);
+insert into t (id,a) values (587,3);
+insert into t (id,a) values (587,4);
+insert into t (id,a) values (587,5);
+insert into t (id,a) values (587,6);
+insert into t (id,a) values (587,7);
+insert into t (id,a) values (587,8);
+insert into t (id,a) values (587,9);
+insert into t (id,a) values (587,10);
+insert into t (id,a) values (587,11);
+insert into t (id,a) values (587,12);
+insert into t (id,a) values (587,13);
+insert into t (id,a) values (587,14);
+insert into t (id,a) values (587,15);
+insert into t (id,a) values (587,16);
+insert into t (id,a) values (587,17);
+insert into t (id,a) values (587,18);
+insert into t (id,a) values (587,19);
+insert into t (id,a) values (587,20);
+insert into t (id,a) values (587,21);
+insert into t (id,a) values (587,22);
+insert into t (id,a) values (587,23);
+insert into t (id,a) values (587,24);
+insert into t (id,a) values (587,25);
+insert into t (id,a) values (587,26);
+insert into t (id,a) values (587,27);
+insert into t (id,a) values (587,28);
+insert into t (id,a) values (587,29);
+insert into t (id,a) values (587,30);
+insert into t (id,a) values (587,31);
+insert into t (id,a) values (587,32);
+insert into t (id,a) values (587,33);
+insert into t (id,a) values (587,34);
+insert into t (id,a) values (587,35);
+insert into t (id,a) values (587,36);
+insert into t (id,a) values (587,37);
+insert into t (id,a) values (587,38);
+insert into t (id,a) values (587,39);
+insert into t (id,a) values (587,40);
+insert into t (id,a) values (587,41);
+insert into t (id,a) values (587,42);
+insert into t (id,a) values (587,43);
+insert into t (id,a) values (587,44);
+insert into t (id,a) values (587,45);
+insert into t (id,a) values (587,46);
+insert into t (id,a) values (587,47);
+insert into t (id,a) values (587,48);
+insert into t (id,a) values (587,49);
+insert into t (id,a) values (587,50);
+insert into t (id,a) values (587,51);
+insert into t (id,a) values (587,52);
+insert into t (id,a) values (587,53);
+insert into t (id,a) values (587,54);
+insert into t (id,a) values (587,55);
+insert into t (id,a) values (587,56);
+insert into t (id,a) values (587,57);
+insert into t (id,a) values (587,58);
+insert into t (id,a) values (587,59);
+insert into t (id,a) values (587,60);
+insert into t (id,a) values (587,61);
+insert into t (id,a) values (587,62);
+insert into t (id,a) values (587,63);
+insert into t (id,a) values (587,64);
+insert into t (id,a) values (587,65);
+insert into t (id,a) values (587,66);
+insert into t (id,a) values (587,67);
+insert into t (id,a) values (587,68);
+insert into t (id,a) values (587,69);
+insert into t (id,a) values (587,70);
+insert into t (id,a) values (587,71);
+insert into t (id,a) values (587,72);
+insert into t (id,a) values (587,73);
+insert into t (id,a) values (587,74);
+insert into t (id,a) values (587,75);
+insert into t (id,a) values (587,76);
+insert into t (id,a) values (587,77);
+insert into t (id,a) values (587,78);
+insert into t (id,a) values (587,79);
+insert into t (id,a) values (587,80);
+insert into t (id,a) values (587,81);
+insert into t (id,a) values (587,82);
+insert into t (id,a) values (587,83);
+insert into t (id,a) values (587,84);
+insert into t (id,a) values (587,85);
+insert into t (id,a) values (587,86);
+insert into t (id,a) values (587,87);
+insert into t (id,a) values (587,88);
+insert into t (id,a) values (587,89);
+insert into t (id,a) values (587,90);
+insert into t (id,a) values (587,91);
+insert into t (id,a) values (587,92);
+insert into t (id,a) values (587,93);
+insert into t (id,a) values (587,94);
+insert into t (id,a) values (587,95);
+insert into t (id,a) values (587,96);
+insert into t (id,a) values (587,97);
+insert into t (id,a) values (587,98);
+insert into t (id,a) values (587,99);
+insert into t (id,a) values (588,0);
+insert into t (id,a) values (588,1);
+insert into t (id,a) values (588,2);
+insert into t (id,a) values (588,3);
+insert into t (id,a) values (588,4);
+insert into t (id,a) values (588,5);
+insert into t (id,a) values (588,6);
+insert into t (id,a) values (588,7);
+insert into t (id,a) values (588,8);
+insert into t (id,a) values (588,9);
+insert into t (id,a) values (588,10);
+insert into t (id,a) values (588,11);
+insert into t (id,a) values (588,12);
+insert into t (id,a) values (588,13);
+insert into t (id,a) values (588,14);
+insert into t (id,a) values (588,15);
+insert into t (id,a) values (588,16);
+insert into t (id,a) values (588,17);
+insert into t (id,a) values (588,18);
+insert into t (id,a) values (588,19);
+insert into t (id,a) values (588,20);
+insert into t (id,a) values (588,21);
+insert into t (id,a) values (588,22);
+insert into t (id,a) values (588,23);
+insert into t (id,a) values (588,24);
+insert into t (id,a) values (588,25);
+insert into t (id,a) values (588,26);
+insert into t (id,a) values (588,27);
+insert into t (id,a) values (588,28);
+insert into t (id,a) values (588,29);
+insert into t (id,a) values (588,30);
+insert into t (id,a) values (588,31);
+insert into t (id,a) values (588,32);
+insert into t (id,a) values (588,33);
+insert into t (id,a) values (588,34);
+insert into t (id,a) values (588,35);
+insert into t (id,a) values (588,36);
+insert into t (id,a) values (588,37);
+insert into t (id,a) values (588,38);
+insert into t (id,a) values (588,39);
+insert into t (id,a) values (588,40);
+insert into t (id,a) values (588,41);
+insert into t (id,a) values (588,42);
+insert into t (id,a) values (588,43);
+insert into t (id,a) values (588,44);
+insert into t (id,a) values (588,45);
+insert into t (id,a) values (588,46);
+insert into t (id,a) values (588,47);
+insert into t (id,a) values (588,48);
+insert into t (id,a) values (588,49);
+insert into t (id,a) values (588,50);
+insert into t (id,a) values (588,51);
+insert into t (id,a) values (588,52);
+insert into t (id,a) values (588,53);
+insert into t (id,a) values (588,54);
+insert into t (id,a) values (588,55);
+insert into t (id,a) values (588,56);
+insert into t (id,a) values (588,57);
+insert into t (id,a) values (588,58);
+insert into t (id,a) values (588,59);
+insert into t (id,a) values (588,60);
+insert into t (id,a) values (588,61);
+insert into t (id,a) values (588,62);
+insert into t (id,a) values (588,63);
+insert into t (id,a) values (588,64);
+insert into t (id,a) values (588,65);
+insert into t (id,a) values (588,66);
+insert into t (id,a) values (588,67);
+insert into t (id,a) values (588,68);
+insert into t (id,a) values (588,69);
+insert into t (id,a) values (588,70);
+insert into t (id,a) values (588,71);
+insert into t (id,a) values (588,72);
+insert into t (id,a) values (588,73);
+insert into t (id,a) values (588,74);
+insert into t (id,a) values (588,75);
+insert into t (id,a) values (588,76);
+insert into t (id,a) values (588,77);
+insert into t (id,a) values (588,78);
+insert into t (id,a) values (588,79);
+insert into t (id,a) values (588,80);
+insert into t (id,a) values (588,81);
+insert into t (id,a) values (588,82);
+insert into t (id,a) values (588,83);
+insert into t (id,a) values (588,84);
+insert into t (id,a) values (588,85);
+insert into t (id,a) values (588,86);
+insert into t (id,a) values (588,87);
+insert into t (id,a) values (588,88);
+insert into t (id,a) values (588,89);
+insert into t (id,a) values (588,90);
+insert into t (id,a) values (588,91);
+insert into t (id,a) values (588,92);
+insert into t (id,a) values (588,93);
+insert into t (id,a) values (588,94);
+insert into t (id,a) values (588,95);
+insert into t (id,a) values (588,96);
+insert into t (id,a) values (588,97);
+insert into t (id,a) values (588,98);
+insert into t (id,a) values (588,99);
+insert into t (id,a) values (589,0);
+insert into t (id,a) values (589,1);
+insert into t (id,a) values (589,2);
+insert into t (id,a) values (589,3);
+insert into t (id,a) values (589,4);
+insert into t (id,a) values (589,5);
+insert into t (id,a) values (589,6);
+insert into t (id,a) values (589,7);
+insert into t (id,a) values (589,8);
+insert into t (id,a) values (589,9);
+insert into t (id,a) values (589,10);
+insert into t (id,a) values (589,11);
+insert into t (id,a) values (589,12);
+insert into t (id,a) values (589,13);
+insert into t (id,a) values (589,14);
+insert into t (id,a) values (589,15);
+insert into t (id,a) values (589,16);
+insert into t (id,a) values (589,17);
+insert into t (id,a) values (589,18);
+insert into t (id,a) values (589,19);
+insert into t (id,a) values (589,20);
+insert into t (id,a) values (589,21);
+insert into t (id,a) values (589,22);
+insert into t (id,a) values (589,23);
+insert into t (id,a) values (589,24);
+insert into t (id,a) values (589,25);
+insert into t (id,a) values (589,26);
+insert into t (id,a) values (589,27);
+insert into t (id,a) values (589,28);
+insert into t (id,a) values (589,29);
+insert into t (id,a) values (589,30);
+insert into t (id,a) values (589,31);
+insert into t (id,a) values (589,32);
+insert into t (id,a) values (589,33);
+insert into t (id,a) values (589,34);
+insert into t (id,a) values (589,35);
+insert into t (id,a) values (589,36);
+insert into t (id,a) values (589,37);
+insert into t (id,a) values (589,38);
+insert into t (id,a) values (589,39);
+insert into t (id,a) values (589,40);
+insert into t (id,a) values (589,41);
+insert into t (id,a) values (589,42);
+insert into t (id,a) values (589,43);
+insert into t (id,a) values (589,44);
+insert into t (id,a) values (589,45);
+insert into t (id,a) values (589,46);
+insert into t (id,a) values (589,47);
+insert into t (id,a) values (589,48);
+insert into t (id,a) values (589,49);
+insert into t (id,a) values (589,50);
+insert into t (id,a) values (589,51);
+insert into t (id,a) values (589,52);
+insert into t (id,a) values (589,53);
+insert into t (id,a) values (589,54);
+insert into t (id,a) values (589,55);
+insert into t (id,a) values (589,56);
+insert into t (id,a) values (589,57);
+insert into t (id,a) values (589,58);
+insert into t (id,a) values (589,59);
+insert into t (id,a) values (589,60);
+insert into t (id,a) values (589,61);
+insert into t (id,a) values (589,62);
+insert into t (id,a) values (589,63);
+insert into t (id,a) values (589,64);
+insert into t (id,a) values (589,65);
+insert into t (id,a) values (589,66);
+insert into t (id,a) values (589,67);
+insert into t (id,a) values (589,68);
+insert into t (id,a) values (589,69);
+insert into t (id,a) values (589,70);
+insert into t (id,a) values (589,71);
+insert into t (id,a) values (589,72);
+insert into t (id,a) values (589,73);
+insert into t (id,a) values (589,74);
+insert into t (id,a) values (589,75);
+insert into t (id,a) values (589,76);
+insert into t (id,a) values (589,77);
+insert into t (id,a) values (589,78);
+insert into t (id,a) values (589,79);
+insert into t (id,a) values (589,80);
+insert into t (id,a) values (589,81);
+insert into t (id,a) values (589,82);
+insert into t (id,a) values (589,83);
+insert into t (id,a) values (589,84);
+insert into t (id,a) values (589,85);
+insert into t (id,a) values (589,86);
+insert into t (id,a) values (589,87);
+insert into t (id,a) values (589,88);
+insert into t (id,a) values (589,89);
+insert into t (id,a) values (589,90);
+insert into t (id,a) values (589,91);
+insert into t (id,a) values (589,92);
+insert into t (id,a) values (589,93);
+insert into t (id,a) values (589,94);
+insert into t (id,a) values (589,95);
+insert into t (id,a) values (589,96);
+insert into t (id,a) values (589,97);
+insert into t (id,a) values (589,98);
+insert into t (id,a) values (589,99);
+insert into t (id,a) values (590,0);
+insert into t (id,a) values (590,1);
+insert into t (id,a) values (590,2);
+insert into t (id,a) values (590,3);
+insert into t (id,a) values (590,4);
+insert into t (id,a) values (590,5);
+insert into t (id,a) values (590,6);
+insert into t (id,a) values (590,7);
+insert into t (id,a) values (590,8);
+insert into t (id,a) values (590,9);
+insert into t (id,a) values (590,10);
+insert into t (id,a) values (590,11);
+insert into t (id,a) values (590,12);
+insert into t (id,a) values (590,13);
+insert into t (id,a) values (590,14);
+insert into t (id,a) values (590,15);
+insert into t (id,a) values (590,16);
+insert into t (id,a) values (590,17);
+insert into t (id,a) values (590,18);
+insert into t (id,a) values (590,19);
+insert into t (id,a) values (590,20);
+insert into t (id,a) values (590,21);
+insert into t (id,a) values (590,22);
+insert into t (id,a) values (590,23);
+insert into t (id,a) values (590,24);
+insert into t (id,a) values (590,25);
+insert into t (id,a) values (590,26);
+insert into t (id,a) values (590,27);
+insert into t (id,a) values (590,28);
+insert into t (id,a) values (590,29);
+insert into t (id,a) values (590,30);
+insert into t (id,a) values (590,31);
+insert into t (id,a) values (590,32);
+insert into t (id,a) values (590,33);
+insert into t (id,a) values (590,34);
+insert into t (id,a) values (590,35);
+insert into t (id,a) values (590,36);
+insert into t (id,a) values (590,37);
+insert into t (id,a) values (590,38);
+insert into t (id,a) values (590,39);
+insert into t (id,a) values (590,40);
+insert into t (id,a) values (590,41);
+insert into t (id,a) values (590,42);
+insert into t (id,a) values (590,43);
+insert into t (id,a) values (590,44);
+insert into t (id,a) values (590,45);
+insert into t (id,a) values (590,46);
+insert into t (id,a) values (590,47);
+insert into t (id,a) values (590,48);
+insert into t (id,a) values (590,49);
+insert into t (id,a) values (590,50);
+insert into t (id,a) values (590,51);
+insert into t (id,a) values (590,52);
+insert into t (id,a) values (590,53);
+insert into t (id,a) values (590,54);
+insert into t (id,a) values (590,55);
+insert into t (id,a) values (590,56);
+insert into t (id,a) values (590,57);
+insert into t (id,a) values (590,58);
+insert into t (id,a) values (590,59);
+insert into t (id,a) values (590,60);
+insert into t (id,a) values (590,61);
+insert into t (id,a) values (590,62);
+insert into t (id,a) values (590,63);
+insert into t (id,a) values (590,64);
+insert into t (id,a) values (590,65);
+insert into t (id,a) values (590,66);
+insert into t (id,a) values (590,67);
+insert into t (id,a) values (590,68);
+insert into t (id,a) values (590,69);
+insert into t (id,a) values (590,70);
+insert into t (id,a) values (590,71);
+insert into t (id,a) values (590,72);
+insert into t (id,a) values (590,73);
+insert into t (id,a) values (590,74);
+insert into t (id,a) values (590,75);
+insert into t (id,a) values (590,76);
+insert into t (id,a) values (590,77);
+insert into t (id,a) values (590,78);
+insert into t (id,a) values (590,79);
+insert into t (id,a) values (590,80);
+insert into t (id,a) values (590,81);
+insert into t (id,a) values (590,82);
+insert into t (id,a) values (590,83);
+insert into t (id,a) values (590,84);
+insert into t (id,a) values (590,85);
+insert into t (id,a) values (590,86);
+insert into t (id,a) values (590,87);
+insert into t (id,a) values (590,88);
+insert into t (id,a) values (590,89);
+insert into t (id,a) values (590,90);
+insert into t (id,a) values (590,91);
+insert into t (id,a) values (590,92);
+insert into t (id,a) values (590,93);
+insert into t (id,a) values (590,94);
+insert into t (id,a) values (590,95);
+insert into t (id,a) values (590,96);
+insert into t (id,a) values (590,97);
+insert into t (id,a) values (590,98);
+insert into t (id,a) values (590,99);
+insert into t (id,a) values (591,0);
+insert into t (id,a) values (591,1);
+insert into t (id,a) values (591,2);
+insert into t (id,a) values (591,3);
+insert into t (id,a) values (591,4);
+insert into t (id,a) values (591,5);
+insert into t (id,a) values (591,6);
+insert into t (id,a) values (591,7);
+insert into t (id,a) values (591,8);
+insert into t (id,a) values (591,9);
+insert into t (id,a) values (591,10);
+insert into t (id,a) values (591,11);
+insert into t (id,a) values (591,12);
+insert into t (id,a) values (591,13);
+insert into t (id,a) values (591,14);
+insert into t (id,a) values (591,15);
+insert into t (id,a) values (591,16);
+insert into t (id,a) values (591,17);
+insert into t (id,a) values (591,18);
+insert into t (id,a) values (591,19);
+insert into t (id,a) values (591,20);
+insert into t (id,a) values (591,21);
+insert into t (id,a) values (591,22);
+insert into t (id,a) values (591,23);
+insert into t (id,a) values (591,24);
+insert into t (id,a) values (591,25);
+insert into t (id,a) values (591,26);
+insert into t (id,a) values (591,27);
+insert into t (id,a) values (591,28);
+insert into t (id,a) values (591,29);
+insert into t (id,a) values (591,30);
+insert into t (id,a) values (591,31);
+insert into t (id,a) values (591,32);
+insert into t (id,a) values (591,33);
+insert into t (id,a) values (591,34);
+insert into t (id,a) values (591,35);
+insert into t (id,a) values (591,36);
+insert into t (id,a) values (591,37);
+insert into t (id,a) values (591,38);
+insert into t (id,a) values (591,39);
+insert into t (id,a) values (591,40);
+insert into t (id,a) values (591,41);
+insert into t (id,a) values (591,42);
+insert into t (id,a) values (591,43);
+insert into t (id,a) values (591,44);
+insert into t (id,a) values (591,45);
+insert into t (id,a) values (591,46);
+insert into t (id,a) values (591,47);
+insert into t (id,a) values (591,48);
+insert into t (id,a) values (591,49);
+insert into t (id,a) values (591,50);
+insert into t (id,a) values (591,51);
+insert into t (id,a) values (591,52);
+insert into t (id,a) values (591,53);
+insert into t (id,a) values (591,54);
+insert into t (id,a) values (591,55);
+insert into t (id,a) values (591,56);
+insert into t (id,a) values (591,57);
+insert into t (id,a) values (591,58);
+insert into t (id,a) values (591,59);
+insert into t (id,a) values (591,60);
+insert into t (id,a) values (591,61);
+insert into t (id,a) values (591,62);
+insert into t (id,a) values (591,63);
+insert into t (id,a) values (591,64);
+insert into t (id,a) values (591,65);
+insert into t (id,a) values (591,66);
+insert into t (id,a) values (591,67);
+insert into t (id,a) values (591,68);
+insert into t (id,a) values (591,69);
+insert into t (id,a) values (591,70);
+insert into t (id,a) values (591,71);
+insert into t (id,a) values (591,72);
+insert into t (id,a) values (591,73);
+insert into t (id,a) values (591,74);
+insert into t (id,a) values (591,75);
+insert into t (id,a) values (591,76);
+insert into t (id,a) values (591,77);
+insert into t (id,a) values (591,78);
+insert into t (id,a) values (591,79);
+insert into t (id,a) values (591,80);
+insert into t (id,a) values (591,81);
+insert into t (id,a) values (591,82);
+insert into t (id,a) values (591,83);
+insert into t (id,a) values (591,84);
+insert into t (id,a) values (591,85);
+insert into t (id,a) values (591,86);
+insert into t (id,a) values (591,87);
+insert into t (id,a) values (591,88);
+insert into t (id,a) values (591,89);
+insert into t (id,a) values (591,90);
+insert into t (id,a) values (591,91);
+insert into t (id,a) values (591,92);
+insert into t (id,a) values (591,93);
+insert into t (id,a) values (591,94);
+insert into t (id,a) values (591,95);
+insert into t (id,a) values (591,96);
+insert into t (id,a) values (591,97);
+insert into t (id,a) values (591,98);
+insert into t (id,a) values (591,99);
+insert into t (id,a) values (592,0);
+insert into t (id,a) values (592,1);
+insert into t (id,a) values (592,2);
+insert into t (id,a) values (592,3);
+insert into t (id,a) values (592,4);
+insert into t (id,a) values (592,5);
+insert into t (id,a) values (592,6);
+insert into t (id,a) values (592,7);
+insert into t (id,a) values (592,8);
+insert into t (id,a) values (592,9);
+insert into t (id,a) values (592,10);
+insert into t (id,a) values (592,11);
+insert into t (id,a) values (592,12);
+insert into t (id,a) values (592,13);
+insert into t (id,a) values (592,14);
+insert into t (id,a) values (592,15);
+insert into t (id,a) values (592,16);
+insert into t (id,a) values (592,17);
+insert into t (id,a) values (592,18);
+insert into t (id,a) values (592,19);
+insert into t (id,a) values (592,20);
+insert into t (id,a) values (592,21);
+insert into t (id,a) values (592,22);
+insert into t (id,a) values (592,23);
+insert into t (id,a) values (592,24);
+insert into t (id,a) values (592,25);
+insert into t (id,a) values (592,26);
+insert into t (id,a) values (592,27);
+insert into t (id,a) values (592,28);
+insert into t (id,a) values (592,29);
+insert into t (id,a) values (592,30);
+insert into t (id,a) values (592,31);
+insert into t (id,a) values (592,32);
+insert into t (id,a) values (592,33);
+insert into t (id,a) values (592,34);
+insert into t (id,a) values (592,35);
+insert into t (id,a) values (592,36);
+insert into t (id,a) values (592,37);
+insert into t (id,a) values (592,38);
+insert into t (id,a) values (592,39);
+insert into t (id,a) values (592,40);
+insert into t (id,a) values (592,41);
+insert into t (id,a) values (592,42);
+insert into t (id,a) values (592,43);
+insert into t (id,a) values (592,44);
+insert into t (id,a) values (592,45);
+insert into t (id,a) values (592,46);
+insert into t (id,a) values (592,47);
+insert into t (id,a) values (592,48);
+insert into t (id,a) values (592,49);
+insert into t (id,a) values (592,50);
+insert into t (id,a) values (592,51);
+insert into t (id,a) values (592,52);
+insert into t (id,a) values (592,53);
+insert into t (id,a) values (592,54);
+insert into t (id,a) values (592,55);
+insert into t (id,a) values (592,56);
+insert into t (id,a) values (592,57);
+insert into t (id,a) values (592,58);
+insert into t (id,a) values (592,59);
+insert into t (id,a) values (592,60);
+insert into t (id,a) values (592,61);
+insert into t (id,a) values (592,62);
+insert into t (id,a) values (592,63);
+insert into t (id,a) values (592,64);
+insert into t (id,a) values (592,65);
+insert into t (id,a) values (592,66);
+insert into t (id,a) values (592,67);
+insert into t (id,a) values (592,68);
+insert into t (id,a) values (592,69);
+insert into t (id,a) values (592,70);
+insert into t (id,a) values (592,71);
+insert into t (id,a) values (592,72);
+insert into t (id,a) values (592,73);
+insert into t (id,a) values (592,74);
+insert into t (id,a) values (592,75);
+insert into t (id,a) values (592,76);
+insert into t (id,a) values (592,77);
+insert into t (id,a) values (592,78);
+insert into t (id,a) values (592,79);
+insert into t (id,a) values (592,80);
+insert into t (id,a) values (592,81);
+insert into t (id,a) values (592,82);
+insert into t (id,a) values (592,83);
+insert into t (id,a) values (592,84);
+insert into t (id,a) values (592,85);
+insert into t (id,a) values (592,86);
+insert into t (id,a) values (592,87);
+insert into t (id,a) values (592,88);
+insert into t (id,a) values (592,89);
+insert into t (id,a) values (592,90);
+insert into t (id,a) values (592,91);
+insert into t (id,a) values (592,92);
+insert into t (id,a) values (592,93);
+insert into t (id,a) values (592,94);
+insert into t (id,a) values (592,95);
+insert into t (id,a) values (592,96);
+insert into t (id,a) values (592,97);
+insert into t (id,a) values (592,98);
+insert into t (id,a) values (592,99);
+insert into t (id,a) values (593,0);
+insert into t (id,a) values (593,1);
+insert into t (id,a) values (593,2);
+insert into t (id,a) values (593,3);
+insert into t (id,a) values (593,4);
+insert into t (id,a) values (593,5);
+insert into t (id,a) values (593,6);
+insert into t (id,a) values (593,7);
+insert into t (id,a) values (593,8);
+insert into t (id,a) values (593,9);
+insert into t (id,a) values (593,10);
+insert into t (id,a) values (593,11);
+insert into t (id,a) values (593,12);
+insert into t (id,a) values (593,13);
+insert into t (id,a) values (593,14);
+insert into t (id,a) values (593,15);
+insert into t (id,a) values (593,16);
+insert into t (id,a) values (593,17);
+insert into t (id,a) values (593,18);
+insert into t (id,a) values (593,19);
+insert into t (id,a) values (593,20);
+insert into t (id,a) values (593,21);
+insert into t (id,a) values (593,22);
+insert into t (id,a) values (593,23);
+insert into t (id,a) values (593,24);
+insert into t (id,a) values (593,25);
+insert into t (id,a) values (593,26);
+insert into t (id,a) values (593,27);
+insert into t (id,a) values (593,28);
+insert into t (id,a) values (593,29);
+insert into t (id,a) values (593,30);
+insert into t (id,a) values (593,31);
+insert into t (id,a) values (593,32);
+insert into t (id,a) values (593,33);
+insert into t (id,a) values (593,34);
+insert into t (id,a) values (593,35);
+insert into t (id,a) values (593,36);
+insert into t (id,a) values (593,37);
+insert into t (id,a) values (593,38);
+insert into t (id,a) values (593,39);
+insert into t (id,a) values (593,40);
+insert into t (id,a) values (593,41);
+insert into t (id,a) values (593,42);
+insert into t (id,a) values (593,43);
+insert into t (id,a) values (593,44);
+insert into t (id,a) values (593,45);
+insert into t (id,a) values (593,46);
+insert into t (id,a) values (593,47);
+insert into t (id,a) values (593,48);
+insert into t (id,a) values (593,49);
+insert into t (id,a) values (593,50);
+insert into t (id,a) values (593,51);
+insert into t (id,a) values (593,52);
+insert into t (id,a) values (593,53);
+insert into t (id,a) values (593,54);
+insert into t (id,a) values (593,55);
+insert into t (id,a) values (593,56);
+insert into t (id,a) values (593,57);
+insert into t (id,a) values (593,58);
+insert into t (id,a) values (593,59);
+insert into t (id,a) values (593,60);
+insert into t (id,a) values (593,61);
+insert into t (id,a) values (593,62);
+insert into t (id,a) values (593,63);
+insert into t (id,a) values (593,64);
+insert into t (id,a) values (593,65);
+insert into t (id,a) values (593,66);
+insert into t (id,a) values (593,67);
+insert into t (id,a) values (593,68);
+insert into t (id,a) values (593,69);
+insert into t (id,a) values (593,70);
+insert into t (id,a) values (593,71);
+insert into t (id,a) values (593,72);
+insert into t (id,a) values (593,73);
+insert into t (id,a) values (593,74);
+insert into t (id,a) values (593,75);
+insert into t (id,a) values (593,76);
+insert into t (id,a) values (593,77);
+insert into t (id,a) values (593,78);
+insert into t (id,a) values (593,79);
+insert into t (id,a) values (593,80);
+insert into t (id,a) values (593,81);
+insert into t (id,a) values (593,82);
+insert into t (id,a) values (593,83);
+insert into t (id,a) values (593,84);
+insert into t (id,a) values (593,85);
+insert into t (id,a) values (593,86);
+insert into t (id,a) values (593,87);
+insert into t (id,a) values (593,88);
+insert into t (id,a) values (593,89);
+insert into t (id,a) values (593,90);
+insert into t (id,a) values (593,91);
+insert into t (id,a) values (593,92);
+insert into t (id,a) values (593,93);
+insert into t (id,a) values (593,94);
+insert into t (id,a) values (593,95);
+insert into t (id,a) values (593,96);
+insert into t (id,a) values (593,97);
+insert into t (id,a) values (593,98);
+insert into t (id,a) values (593,99);
+insert into t (id,a) values (594,0);
+insert into t (id,a) values (594,1);
+insert into t (id,a) values (594,2);
+insert into t (id,a) values (594,3);
+insert into t (id,a) values (594,4);
+insert into t (id,a) values (594,5);
+insert into t (id,a) values (594,6);
+insert into t (id,a) values (594,7);
+insert into t (id,a) values (594,8);
+insert into t (id,a) values (594,9);
+insert into t (id,a) values (594,10);
+insert into t (id,a) values (594,11);
+insert into t (id,a) values (594,12);
+insert into t (id,a) values (594,13);
+insert into t (id,a) values (594,14);
+insert into t (id,a) values (594,15);
+insert into t (id,a) values (594,16);
+insert into t (id,a) values (594,17);
+insert into t (id,a) values (594,18);
+insert into t (id,a) values (594,19);
+insert into t (id,a) values (594,20);
+insert into t (id,a) values (594,21);
+insert into t (id,a) values (594,22);
+insert into t (id,a) values (594,23);
+insert into t (id,a) values (594,24);
+insert into t (id,a) values (594,25);
+insert into t (id,a) values (594,26);
+insert into t (id,a) values (594,27);
+insert into t (id,a) values (594,28);
+insert into t (id,a) values (594,29);
+insert into t (id,a) values (594,30);
+insert into t (id,a) values (594,31);
+insert into t (id,a) values (594,32);
+insert into t (id,a) values (594,33);
+insert into t (id,a) values (594,34);
+insert into t (id,a) values (594,35);
+insert into t (id,a) values (594,36);
+insert into t (id,a) values (594,37);
+insert into t (id,a) values (594,38);
+insert into t (id,a) values (594,39);
+insert into t (id,a) values (594,40);
+insert into t (id,a) values (594,41);
+insert into t (id,a) values (594,42);
+insert into t (id,a) values (594,43);
+insert into t (id,a) values (594,44);
+insert into t (id,a) values (594,45);
+insert into t (id,a) values (594,46);
+insert into t (id,a) values (594,47);
+insert into t (id,a) values (594,48);
+insert into t (id,a) values (594,49);
+insert into t (id,a) values (594,50);
+insert into t (id,a) values (594,51);
+insert into t (id,a) values (594,52);
+insert into t (id,a) values (594,53);
+insert into t (id,a) values (594,54);
+insert into t (id,a) values (594,55);
+insert into t (id,a) values (594,56);
+insert into t (id,a) values (594,57);
+insert into t (id,a) values (594,58);
+insert into t (id,a) values (594,59);
+insert into t (id,a) values (594,60);
+insert into t (id,a) values (594,61);
+insert into t (id,a) values (594,62);
+insert into t (id,a) values (594,63);
+insert into t (id,a) values (594,64);
+insert into t (id,a) values (594,65);
+insert into t (id,a) values (594,66);
+insert into t (id,a) values (594,67);
+insert into t (id,a) values (594,68);
+insert into t (id,a) values (594,69);
+insert into t (id,a) values (594,70);
+insert into t (id,a) values (594,71);
+insert into t (id,a) values (594,72);
+insert into t (id,a) values (594,73);
+insert into t (id,a) values (594,74);
+insert into t (id,a) values (594,75);
+insert into t (id,a) values (594,76);
+insert into t (id,a) values (594,77);
+insert into t (id,a) values (594,78);
+insert into t (id,a) values (594,79);
+insert into t (id,a) values (594,80);
+insert into t (id,a) values (594,81);
+insert into t (id,a) values (594,82);
+insert into t (id,a) values (594,83);
+insert into t (id,a) values (594,84);
+insert into t (id,a) values (594,85);
+insert into t (id,a) values (594,86);
+insert into t (id,a) values (594,87);
+insert into t (id,a) values (594,88);
+insert into t (id,a) values (594,89);
+insert into t (id,a) values (594,90);
+insert into t (id,a) values (594,91);
+insert into t (id,a) values (594,92);
+insert into t (id,a) values (594,93);
+insert into t (id,a) values (594,94);
+insert into t (id,a) values (594,95);
+insert into t (id,a) values (594,96);
+insert into t (id,a) values (594,97);
+insert into t (id,a) values (594,98);
+insert into t (id,a) values (594,99);
+insert into t (id,a) values (595,0);
+insert into t (id,a) values (595,1);
+insert into t (id,a) values (595,2);
+insert into t (id,a) values (595,3);
+insert into t (id,a) values (595,4);
+insert into t (id,a) values (595,5);
+insert into t (id,a) values (595,6);
+insert into t (id,a) values (595,7);
+insert into t (id,a) values (595,8);
+insert into t (id,a) values (595,9);
+insert into t (id,a) values (595,10);
+insert into t (id,a) values (595,11);
+insert into t (id,a) values (595,12);
+insert into t (id,a) values (595,13);
+insert into t (id,a) values (595,14);
+insert into t (id,a) values (595,15);
+insert into t (id,a) values (595,16);
+insert into t (id,a) values (595,17);
+insert into t (id,a) values (595,18);
+insert into t (id,a) values (595,19);
+insert into t (id,a) values (595,20);
+insert into t (id,a) values (595,21);
+insert into t (id,a) values (595,22);
+insert into t (id,a) values (595,23);
+insert into t (id,a) values (595,24);
+insert into t (id,a) values (595,25);
+insert into t (id,a) values (595,26);
+insert into t (id,a) values (595,27);
+insert into t (id,a) values (595,28);
+insert into t (id,a) values (595,29);
+insert into t (id,a) values (595,30);
+insert into t (id,a) values (595,31);
+insert into t (id,a) values (595,32);
+insert into t (id,a) values (595,33);
+insert into t (id,a) values (595,34);
+insert into t (id,a) values (595,35);
+insert into t (id,a) values (595,36);
+insert into t (id,a) values (595,37);
+insert into t (id,a) values (595,38);
+insert into t (id,a) values (595,39);
+insert into t (id,a) values (595,40);
+insert into t (id,a) values (595,41);
+insert into t (id,a) values (595,42);
+insert into t (id,a) values (595,43);
+insert into t (id,a) values (595,44);
+insert into t (id,a) values (595,45);
+insert into t (id,a) values (595,46);
+insert into t (id,a) values (595,47);
+insert into t (id,a) values (595,48);
+insert into t (id,a) values (595,49);
+insert into t (id,a) values (595,50);
+insert into t (id,a) values (595,51);
+insert into t (id,a) values (595,52);
+insert into t (id,a) values (595,53);
+insert into t (id,a) values (595,54);
+insert into t (id,a) values (595,55);
+insert into t (id,a) values (595,56);
+insert into t (id,a) values (595,57);
+insert into t (id,a) values (595,58);
+insert into t (id,a) values (595,59);
+insert into t (id,a) values (595,60);
+insert into t (id,a) values (595,61);
+insert into t (id,a) values (595,62);
+insert into t (id,a) values (595,63);
+insert into t (id,a) values (595,64);
+insert into t (id,a) values (595,65);
+insert into t (id,a) values (595,66);
+insert into t (id,a) values (595,67);
+insert into t (id,a) values (595,68);
+insert into t (id,a) values (595,69);
+insert into t (id,a) values (595,70);
+insert into t (id,a) values (595,71);
+insert into t (id,a) values (595,72);
+insert into t (id,a) values (595,73);
+insert into t (id,a) values (595,74);
+insert into t (id,a) values (595,75);
+insert into t (id,a) values (595,76);
+insert into t (id,a) values (595,77);
+insert into t (id,a) values (595,78);
+insert into t (id,a) values (595,79);
+insert into t (id,a) values (595,80);
+insert into t (id,a) values (595,81);
+insert into t (id,a) values (595,82);
+insert into t (id,a) values (595,83);
+insert into t (id,a) values (595,84);
+insert into t (id,a) values (595,85);
+insert into t (id,a) values (595,86);
+insert into t (id,a) values (595,87);
+insert into t (id,a) values (595,88);
+insert into t (id,a) values (595,89);
+insert into t (id,a) values (595,90);
+insert into t (id,a) values (595,91);
+insert into t (id,a) values (595,92);
+insert into t (id,a) values (595,93);
+insert into t (id,a) values (595,94);
+insert into t (id,a) values (595,95);
+insert into t (id,a) values (595,96);
+insert into t (id,a) values (595,97);
+insert into t (id,a) values (595,98);
+insert into t (id,a) values (595,99);
+insert into t (id,a) values (596,0);
+insert into t (id,a) values (596,1);
+insert into t (id,a) values (596,2);
+insert into t (id,a) values (596,3);
+insert into t (id,a) values (596,4);
+insert into t (id,a) values (596,5);
+insert into t (id,a) values (596,6);
+insert into t (id,a) values (596,7);
+insert into t (id,a) values (596,8);
+insert into t (id,a) values (596,9);
+insert into t (id,a) values (596,10);
+insert into t (id,a) values (596,11);
+insert into t (id,a) values (596,12);
+insert into t (id,a) values (596,13);
+insert into t (id,a) values (596,14);
+insert into t (id,a) values (596,15);
+insert into t (id,a) values (596,16);
+insert into t (id,a) values (596,17);
+insert into t (id,a) values (596,18);
+insert into t (id,a) values (596,19);
+insert into t (id,a) values (596,20);
+insert into t (id,a) values (596,21);
+insert into t (id,a) values (596,22);
+insert into t (id,a) values (596,23);
+insert into t (id,a) values (596,24);
+insert into t (id,a) values (596,25);
+insert into t (id,a) values (596,26);
+insert into t (id,a) values (596,27);
+insert into t (id,a) values (596,28);
+insert into t (id,a) values (596,29);
+insert into t (id,a) values (596,30);
+insert into t (id,a) values (596,31);
+insert into t (id,a) values (596,32);
+insert into t (id,a) values (596,33);
+insert into t (id,a) values (596,34);
+insert into t (id,a) values (596,35);
+insert into t (id,a) values (596,36);
+insert into t (id,a) values (596,37);
+insert into t (id,a) values (596,38);
+insert into t (id,a) values (596,39);
+insert into t (id,a) values (596,40);
+insert into t (id,a) values (596,41);
+insert into t (id,a) values (596,42);
+insert into t (id,a) values (596,43);
+insert into t (id,a) values (596,44);
+insert into t (id,a) values (596,45);
+insert into t (id,a) values (596,46);
+insert into t (id,a) values (596,47);
+insert into t (id,a) values (596,48);
+insert into t (id,a) values (596,49);
+insert into t (id,a) values (596,50);
+insert into t (id,a) values (596,51);
+insert into t (id,a) values (596,52);
+insert into t (id,a) values (596,53);
+insert into t (id,a) values (596,54);
+insert into t (id,a) values (596,55);
+insert into t (id,a) values (596,56);
+insert into t (id,a) values (596,57);
+insert into t (id,a) values (596,58);
+insert into t (id,a) values (596,59);
+insert into t (id,a) values (596,60);
+insert into t (id,a) values (596,61);
+insert into t (id,a) values (596,62);
+insert into t (id,a) values (596,63);
+insert into t (id,a) values (596,64);
+insert into t (id,a) values (596,65);
+insert into t (id,a) values (596,66);
+insert into t (id,a) values (596,67);
+insert into t (id,a) values (596,68);
+insert into t (id,a) values (596,69);
+insert into t (id,a) values (596,70);
+insert into t (id,a) values (596,71);
+insert into t (id,a) values (596,72);
+insert into t (id,a) values (596,73);
+insert into t (id,a) values (596,74);
+insert into t (id,a) values (596,75);
+insert into t (id,a) values (596,76);
+insert into t (id,a) values (596,77);
+insert into t (id,a) values (596,78);
+insert into t (id,a) values (596,79);
+insert into t (id,a) values (596,80);
+insert into t (id,a) values (596,81);
+insert into t (id,a) values (596,82);
+insert into t (id,a) values (596,83);
+insert into t (id,a) values (596,84);
+insert into t (id,a) values (596,85);
+insert into t (id,a) values (596,86);
+insert into t (id,a) values (596,87);
+insert into t (id,a) values (596,88);
+insert into t (id,a) values (596,89);
+insert into t (id,a) values (596,90);
+insert into t (id,a) values (596,91);
+insert into t (id,a) values (596,92);
+insert into t (id,a) values (596,93);
+insert into t (id,a) values (596,94);
+insert into t (id,a) values (596,95);
+insert into t (id,a) values (596,96);
+insert into t (id,a) values (596,97);
+insert into t (id,a) values (596,98);
+insert into t (id,a) values (596,99);
+insert into t (id,a) values (597,0);
+insert into t (id,a) values (597,1);
+insert into t (id,a) values (597,2);
+insert into t (id,a) values (597,3);
+insert into t (id,a) values (597,4);
+insert into t (id,a) values (597,5);
+insert into t (id,a) values (597,6);
+insert into t (id,a) values (597,7);
+insert into t (id,a) values (597,8);
+insert into t (id,a) values (597,9);
+insert into t (id,a) values (597,10);
+insert into t (id,a) values (597,11);
+insert into t (id,a) values (597,12);
+insert into t (id,a) values (597,13);
+insert into t (id,a) values (597,14);
+insert into t (id,a) values (597,15);
+insert into t (id,a) values (597,16);
+insert into t (id,a) values (597,17);
+insert into t (id,a) values (597,18);
+insert into t (id,a) values (597,19);
+insert into t (id,a) values (597,20);
+insert into t (id,a) values (597,21);
+insert into t (id,a) values (597,22);
+insert into t (id,a) values (597,23);
+insert into t (id,a) values (597,24);
+insert into t (id,a) values (597,25);
+insert into t (id,a) values (597,26);
+insert into t (id,a) values (597,27);
+insert into t (id,a) values (597,28);
+insert into t (id,a) values (597,29);
+insert into t (id,a) values (597,30);
+insert into t (id,a) values (597,31);
+insert into t (id,a) values (597,32);
+insert into t (id,a) values (597,33);
+insert into t (id,a) values (597,34);
+insert into t (id,a) values (597,35);
+insert into t (id,a) values (597,36);
+insert into t (id,a) values (597,37);
+insert into t (id,a) values (597,38);
+insert into t (id,a) values (597,39);
+insert into t (id,a) values (597,40);
+insert into t (id,a) values (597,41);
+insert into t (id,a) values (597,42);
+insert into t (id,a) values (597,43);
+insert into t (id,a) values (597,44);
+insert into t (id,a) values (597,45);
+insert into t (id,a) values (597,46);
+insert into t (id,a) values (597,47);
+insert into t (id,a) values (597,48);
+insert into t (id,a) values (597,49);
+insert into t (id,a) values (597,50);
+insert into t (id,a) values (597,51);
+insert into t (id,a) values (597,52);
+insert into t (id,a) values (597,53);
+insert into t (id,a) values (597,54);
+insert into t (id,a) values (597,55);
+insert into t (id,a) values (597,56);
+insert into t (id,a) values (597,57);
+insert into t (id,a) values (597,58);
+insert into t (id,a) values (597,59);
+insert into t (id,a) values (597,60);
+insert into t (id,a) values (597,61);
+insert into t (id,a) values (597,62);
+insert into t (id,a) values (597,63);
+insert into t (id,a) values (597,64);
+insert into t (id,a) values (597,65);
+insert into t (id,a) values (597,66);
+insert into t (id,a) values (597,67);
+insert into t (id,a) values (597,68);
+insert into t (id,a) values (597,69);
+insert into t (id,a) values (597,70);
+insert into t (id,a) values (597,71);
+insert into t (id,a) values (597,72);
+insert into t (id,a) values (597,73);
+insert into t (id,a) values (597,74);
+insert into t (id,a) values (597,75);
+insert into t (id,a) values (597,76);
+insert into t (id,a) values (597,77);
+insert into t (id,a) values (597,78);
+insert into t (id,a) values (597,79);
+insert into t (id,a) values (597,80);
+insert into t (id,a) values (597,81);
+insert into t (id,a) values (597,82);
+insert into t (id,a) values (597,83);
+insert into t (id,a) values (597,84);
+insert into t (id,a) values (597,85);
+insert into t (id,a) values (597,86);
+insert into t (id,a) values (597,87);
+insert into t (id,a) values (597,88);
+insert into t (id,a) values (597,89);
+insert into t (id,a) values (597,90);
+insert into t (id,a) values (597,91);
+insert into t (id,a) values (597,92);
+insert into t (id,a) values (597,93);
+insert into t (id,a) values (597,94);
+insert into t (id,a) values (597,95);
+insert into t (id,a) values (597,96);
+insert into t (id,a) values (597,97);
+insert into t (id,a) values (597,98);
+insert into t (id,a) values (597,99);
+insert into t (id,a) values (598,0);
+insert into t (id,a) values (598,1);
+insert into t (id,a) values (598,2);
+insert into t (id,a) values (598,3);
+insert into t (id,a) values (598,4);
+insert into t (id,a) values (598,5);
+insert into t (id,a) values (598,6);
+insert into t (id,a) values (598,7);
+insert into t (id,a) values (598,8);
+insert into t (id,a) values (598,9);
+insert into t (id,a) values (598,10);
+insert into t (id,a) values (598,11);
+insert into t (id,a) values (598,12);
+insert into t (id,a) values (598,13);
+insert into t (id,a) values (598,14);
+insert into t (id,a) values (598,15);
+insert into t (id,a) values (598,16);
+insert into t (id,a) values (598,17);
+insert into t (id,a) values (598,18);
+insert into t (id,a) values (598,19);
+insert into t (id,a) values (598,20);
+insert into t (id,a) values (598,21);
+insert into t (id,a) values (598,22);
+insert into t (id,a) values (598,23);
+insert into t (id,a) values (598,24);
+insert into t (id,a) values (598,25);
+insert into t (id,a) values (598,26);
+insert into t (id,a) values (598,27);
+insert into t (id,a) values (598,28);
+insert into t (id,a) values (598,29);
+insert into t (id,a) values (598,30);
+insert into t (id,a) values (598,31);
+insert into t (id,a) values (598,32);
+insert into t (id,a) values (598,33);
+insert into t (id,a) values (598,34);
+insert into t (id,a) values (598,35);
+insert into t (id,a) values (598,36);
+insert into t (id,a) values (598,37);
+insert into t (id,a) values (598,38);
+insert into t (id,a) values (598,39);
+insert into t (id,a) values (598,40);
+insert into t (id,a) values (598,41);
+insert into t (id,a) values (598,42);
+insert into t (id,a) values (598,43);
+insert into t (id,a) values (598,44);
+insert into t (id,a) values (598,45);
+insert into t (id,a) values (598,46);
+insert into t (id,a) values (598,47);
+insert into t (id,a) values (598,48);
+insert into t (id,a) values (598,49);
+insert into t (id,a) values (598,50);
+insert into t (id,a) values (598,51);
+insert into t (id,a) values (598,52);
+insert into t (id,a) values (598,53);
+insert into t (id,a) values (598,54);
+insert into t (id,a) values (598,55);
+insert into t (id,a) values (598,56);
+insert into t (id,a) values (598,57);
+insert into t (id,a) values (598,58);
+insert into t (id,a) values (598,59);
+insert into t (id,a) values (598,60);
+insert into t (id,a) values (598,61);
+insert into t (id,a) values (598,62);
+insert into t (id,a) values (598,63);
+insert into t (id,a) values (598,64);
+insert into t (id,a) values (598,65);
+insert into t (id,a) values (598,66);
+insert into t (id,a) values (598,67);
+insert into t (id,a) values (598,68);
+insert into t (id,a) values (598,69);
+insert into t (id,a) values (598,70);
+insert into t (id,a) values (598,71);
+insert into t (id,a) values (598,72);
+insert into t (id,a) values (598,73);
+insert into t (id,a) values (598,74);
+insert into t (id,a) values (598,75);
+insert into t (id,a) values (598,76);
+insert into t (id,a) values (598,77);
+insert into t (id,a) values (598,78);
+insert into t (id,a) values (598,79);
+insert into t (id,a) values (598,80);
+insert into t (id,a) values (598,81);
+insert into t (id,a) values (598,82);
+insert into t (id,a) values (598,83);
+insert into t (id,a) values (598,84);
+insert into t (id,a) values (598,85);
+insert into t (id,a) values (598,86);
+insert into t (id,a) values (598,87);
+insert into t (id,a) values (598,88);
+insert into t (id,a) values (598,89);
+insert into t (id,a) values (598,90);
+insert into t (id,a) values (598,91);
+insert into t (id,a) values (598,92);
+insert into t (id,a) values (598,93);
+insert into t (id,a) values (598,94);
+insert into t (id,a) values (598,95);
+insert into t (id,a) values (598,96);
+insert into t (id,a) values (598,97);
+insert into t (id,a) values (598,98);
+insert into t (id,a) values (598,99);
+insert into t (id,a) values (599,0);
+insert into t (id,a) values (599,1);
+insert into t (id,a) values (599,2);
+insert into t (id,a) values (599,3);
+insert into t (id,a) values (599,4);
+insert into t (id,a) values (599,5);
+insert into t (id,a) values (599,6);
+insert into t (id,a) values (599,7);
+insert into t (id,a) values (599,8);
+insert into t (id,a) values (599,9);
+insert into t (id,a) values (599,10);
+insert into t (id,a) values (599,11);
+insert into t (id,a) values (599,12);
+insert into t (id,a) values (599,13);
+insert into t (id,a) values (599,14);
+insert into t (id,a) values (599,15);
+insert into t (id,a) values (599,16);
+insert into t (id,a) values (599,17);
+insert into t (id,a) values (599,18);
+insert into t (id,a) values (599,19);
+insert into t (id,a) values (599,20);
+insert into t (id,a) values (599,21);
+insert into t (id,a) values (599,22);
+insert into t (id,a) values (599,23);
+insert into t (id,a) values (599,24);
+insert into t (id,a) values (599,25);
+insert into t (id,a) values (599,26);
+insert into t (id,a) values (599,27);
+insert into t (id,a) values (599,28);
+insert into t (id,a) values (599,29);
+insert into t (id,a) values (599,30);
+insert into t (id,a) values (599,31);
+insert into t (id,a) values (599,32);
+insert into t (id,a) values (599,33);
+insert into t (id,a) values (599,34);
+insert into t (id,a) values (599,35);
+insert into t (id,a) values (599,36);
+insert into t (id,a) values (599,37);
+insert into t (id,a) values (599,38);
+insert into t (id,a) values (599,39);
+insert into t (id,a) values (599,40);
+insert into t (id,a) values (599,41);
+insert into t (id,a) values (599,42);
+insert into t (id,a) values (599,43);
+insert into t (id,a) values (599,44);
+insert into t (id,a) values (599,45);
+insert into t (id,a) values (599,46);
+insert into t (id,a) values (599,47);
+insert into t (id,a) values (599,48);
+insert into t (id,a) values (599,49);
+insert into t (id,a) values (599,50);
+insert into t (id,a) values (599,51);
+insert into t (id,a) values (599,52);
+insert into t (id,a) values (599,53);
+insert into t (id,a) values (599,54);
+insert into t (id,a) values (599,55);
+insert into t (id,a) values (599,56);
+insert into t (id,a) values (599,57);
+insert into t (id,a) values (599,58);
+insert into t (id,a) values (599,59);
+insert into t (id,a) values (599,60);
+insert into t (id,a) values (599,61);
+insert into t (id,a) values (599,62);
+insert into t (id,a) values (599,63);
+insert into t (id,a) values (599,64);
+insert into t (id,a) values (599,65);
+insert into t (id,a) values (599,66);
+insert into t (id,a) values (599,67);
+insert into t (id,a) values (599,68);
+insert into t (id,a) values (599,69);
+insert into t (id,a) values (599,70);
+insert into t (id,a) values (599,71);
+insert into t (id,a) values (599,72);
+insert into t (id,a) values (599,73);
+insert into t (id,a) values (599,74);
+insert into t (id,a) values (599,75);
+insert into t (id,a) values (599,76);
+insert into t (id,a) values (599,77);
+insert into t (id,a) values (599,78);
+insert into t (id,a) values (599,79);
+insert into t (id,a) values (599,80);
+insert into t (id,a) values (599,81);
+insert into t (id,a) values (599,82);
+insert into t (id,a) values (599,83);
+insert into t (id,a) values (599,84);
+insert into t (id,a) values (599,85);
+insert into t (id,a) values (599,86);
+insert into t (id,a) values (599,87);
+insert into t (id,a) values (599,88);
+insert into t (id,a) values (599,89);
+insert into t (id,a) values (599,90);
+insert into t (id,a) values (599,91);
+insert into t (id,a) values (599,92);
+insert into t (id,a) values (599,93);
+insert into t (id,a) values (599,94);
+insert into t (id,a) values (599,95);
+insert into t (id,a) values (599,96);
+insert into t (id,a) values (599,97);
+insert into t (id,a) values (599,98);
+insert into t (id,a) values (599,99);
+insert into t (id,a) values (600,0);
+insert into t (id,a) values (600,1);
+insert into t (id,a) values (600,2);
+insert into t (id,a) values (600,3);
+insert into t (id,a) values (600,4);
+insert into t (id,a) values (600,5);
+insert into t (id,a) values (600,6);
+insert into t (id,a) values (600,7);
+insert into t (id,a) values (600,8);
+insert into t (id,a) values (600,9);
+insert into t (id,a) values (600,10);
+insert into t (id,a) values (600,11);
+insert into t (id,a) values (600,12);
+insert into t (id,a) values (600,13);
+insert into t (id,a) values (600,14);
+insert into t (id,a) values (600,15);
+insert into t (id,a) values (600,16);
+insert into t (id,a) values (600,17);
+insert into t (id,a) values (600,18);
+insert into t (id,a) values (600,19);
+insert into t (id,a) values (600,20);
+insert into t (id,a) values (600,21);
+insert into t (id,a) values (600,22);
+insert into t (id,a) values (600,23);
+insert into t (id,a) values (600,24);
+insert into t (id,a) values (600,25);
+insert into t (id,a) values (600,26);
+insert into t (id,a) values (600,27);
+insert into t (id,a) values (600,28);
+insert into t (id,a) values (600,29);
+insert into t (id,a) values (600,30);
+insert into t (id,a) values (600,31);
+insert into t (id,a) values (600,32);
+insert into t (id,a) values (600,33);
+insert into t (id,a) values (600,34);
+insert into t (id,a) values (600,35);
+insert into t (id,a) values (600,36);
+insert into t (id,a) values (600,37);
+insert into t (id,a) values (600,38);
+insert into t (id,a) values (600,39);
+insert into t (id,a) values (600,40);
+insert into t (id,a) values (600,41);
+insert into t (id,a) values (600,42);
+insert into t (id,a) values (600,43);
+insert into t (id,a) values (600,44);
+insert into t (id,a) values (600,45);
+insert into t (id,a) values (600,46);
+insert into t (id,a) values (600,47);
+insert into t (id,a) values (600,48);
+insert into t (id,a) values (600,49);
+insert into t (id,a) values (600,50);
+insert into t (id,a) values (600,51);
+insert into t (id,a) values (600,52);
+insert into t (id,a) values (600,53);
+insert into t (id,a) values (600,54);
+insert into t (id,a) values (600,55);
+insert into t (id,a) values (600,56);
+insert into t (id,a) values (600,57);
+insert into t (id,a) values (600,58);
+insert into t (id,a) values (600,59);
+insert into t (id,a) values (600,60);
+insert into t (id,a) values (600,61);
+insert into t (id,a) values (600,62);
+insert into t (id,a) values (600,63);
+insert into t (id,a) values (600,64);
+insert into t (id,a) values (600,65);
+insert into t (id,a) values (600,66);
+insert into t (id,a) values (600,67);
+insert into t (id,a) values (600,68);
+insert into t (id,a) values (600,69);
+insert into t (id,a) values (600,70);
+insert into t (id,a) values (600,71);
+insert into t (id,a) values (600,72);
+insert into t (id,a) values (600,73);
+insert into t (id,a) values (600,74);
+insert into t (id,a) values (600,75);
+insert into t (id,a) values (600,76);
+insert into t (id,a) values (600,77);
+insert into t (id,a) values (600,78);
+insert into t (id,a) values (600,79);
+insert into t (id,a) values (600,80);
+insert into t (id,a) values (600,81);
+insert into t (id,a) values (600,82);
+insert into t (id,a) values (600,83);
+insert into t (id,a) values (600,84);
+insert into t (id,a) values (600,85);
+insert into t (id,a) values (600,86);
+insert into t (id,a) values (600,87);
+insert into t (id,a) values (600,88);
+insert into t (id,a) values (600,89);
+insert into t (id,a) values (600,90);
+insert into t (id,a) values (600,91);
+insert into t (id,a) values (600,92);
+insert into t (id,a) values (600,93);
+insert into t (id,a) values (600,94);
+insert into t (id,a) values (600,95);
+insert into t (id,a) values (600,96);
+insert into t (id,a) values (600,97);
+insert into t (id,a) values (600,98);
+insert into t (id,a) values (600,99);
+insert into t (id,a) values (601,0);
+insert into t (id,a) values (601,1);
+insert into t (id,a) values (601,2);
+insert into t (id,a) values (601,3);
+insert into t (id,a) values (601,4);
+insert into t (id,a) values (601,5);
+insert into t (id,a) values (601,6);
+insert into t (id,a) values (601,7);
+insert into t (id,a) values (601,8);
+insert into t (id,a) values (601,9);
+insert into t (id,a) values (601,10);
+insert into t (id,a) values (601,11);
+insert into t (id,a) values (601,12);
+insert into t (id,a) values (601,13);
+insert into t (id,a) values (601,14);
+insert into t (id,a) values (601,15);
+insert into t (id,a) values (601,16);
+insert into t (id,a) values (601,17);
+insert into t (id,a) values (601,18);
+insert into t (id,a) values (601,19);
+insert into t (id,a) values (601,20);
+insert into t (id,a) values (601,21);
+insert into t (id,a) values (601,22);
+insert into t (id,a) values (601,23);
+insert into t (id,a) values (601,24);
+insert into t (id,a) values (601,25);
+insert into t (id,a) values (601,26);
+insert into t (id,a) values (601,27);
+insert into t (id,a) values (601,28);
+insert into t (id,a) values (601,29);
+insert into t (id,a) values (601,30);
+insert into t (id,a) values (601,31);
+insert into t (id,a) values (601,32);
+insert into t (id,a) values (601,33);
+insert into t (id,a) values (601,34);
+insert into t (id,a) values (601,35);
+insert into t (id,a) values (601,36);
+insert into t (id,a) values (601,37);
+insert into t (id,a) values (601,38);
+insert into t (id,a) values (601,39);
+insert into t (id,a) values (601,40);
+insert into t (id,a) values (601,41);
+insert into t (id,a) values (601,42);
+insert into t (id,a) values (601,43);
+insert into t (id,a) values (601,44);
+insert into t (id,a) values (601,45);
+insert into t (id,a) values (601,46);
+insert into t (id,a) values (601,47);
+insert into t (id,a) values (601,48);
+insert into t (id,a) values (601,49);
+insert into t (id,a) values (601,50);
+insert into t (id,a) values (601,51);
+insert into t (id,a) values (601,52);
+insert into t (id,a) values (601,53);
+insert into t (id,a) values (601,54);
+insert into t (id,a) values (601,55);
+insert into t (id,a) values (601,56);
+insert into t (id,a) values (601,57);
+insert into t (id,a) values (601,58);
+insert into t (id,a) values (601,59);
+insert into t (id,a) values (601,60);
+insert into t (id,a) values (601,61);
+insert into t (id,a) values (601,62);
+insert into t (id,a) values (601,63);
+insert into t (id,a) values (601,64);
+insert into t (id,a) values (601,65);
+insert into t (id,a) values (601,66);
+insert into t (id,a) values (601,67);
+insert into t (id,a) values (601,68);
+insert into t (id,a) values (601,69);
+insert into t (id,a) values (601,70);
+insert into t (id,a) values (601,71);
+insert into t (id,a) values (601,72);
+insert into t (id,a) values (601,73);
+insert into t (id,a) values (601,74);
+insert into t (id,a) values (601,75);
+insert into t (id,a) values (601,76);
+insert into t (id,a) values (601,77);
+insert into t (id,a) values (601,78);
+insert into t (id,a) values (601,79);
+insert into t (id,a) values (601,80);
+insert into t (id,a) values (601,81);
+insert into t (id,a) values (601,82);
+insert into t (id,a) values (601,83);
+insert into t (id,a) values (601,84);
+insert into t (id,a) values (601,85);
+insert into t (id,a) values (601,86);
+insert into t (id,a) values (601,87);
+insert into t (id,a) values (601,88);
+insert into t (id,a) values (601,89);
+insert into t (id,a) values (601,90);
+insert into t (id,a) values (601,91);
+insert into t (id,a) values (601,92);
+insert into t (id,a) values (601,93);
+insert into t (id,a) values (601,94);
+insert into t (id,a) values (601,95);
+insert into t (id,a) values (601,96);
+insert into t (id,a) values (601,97);
+insert into t (id,a) values (601,98);
+insert into t (id,a) values (601,99);
+insert into t (id,a) values (602,0);
+insert into t (id,a) values (602,1);
+insert into t (id,a) values (602,2);
+insert into t (id,a) values (602,3);
+insert into t (id,a) values (602,4);
+insert into t (id,a) values (602,5);
+insert into t (id,a) values (602,6);
+insert into t (id,a) values (602,7);
+insert into t (id,a) values (602,8);
+insert into t (id,a) values (602,9);
+insert into t (id,a) values (602,10);
+insert into t (id,a) values (602,11);
+insert into t (id,a) values (602,12);
+insert into t (id,a) values (602,13);
+insert into t (id,a) values (602,14);
+insert into t (id,a) values (602,15);
+insert into t (id,a) values (602,16);
+insert into t (id,a) values (602,17);
+insert into t (id,a) values (602,18);
+insert into t (id,a) values (602,19);
+insert into t (id,a) values (602,20);
+insert into t (id,a) values (602,21);
+insert into t (id,a) values (602,22);
+insert into t (id,a) values (602,23);
+insert into t (id,a) values (602,24);
+insert into t (id,a) values (602,25);
+insert into t (id,a) values (602,26);
+insert into t (id,a) values (602,27);
+insert into t (id,a) values (602,28);
+insert into t (id,a) values (602,29);
+insert into t (id,a) values (602,30);
+insert into t (id,a) values (602,31);
+insert into t (id,a) values (602,32);
+insert into t (id,a) values (602,33);
+insert into t (id,a) values (602,34);
+insert into t (id,a) values (602,35);
+insert into t (id,a) values (602,36);
+insert into t (id,a) values (602,37);
+insert into t (id,a) values (602,38);
+insert into t (id,a) values (602,39);
+insert into t (id,a) values (602,40);
+insert into t (id,a) values (602,41);
+insert into t (id,a) values (602,42);
+insert into t (id,a) values (602,43);
+insert into t (id,a) values (602,44);
+insert into t (id,a) values (602,45);
+insert into t (id,a) values (602,46);
+insert into t (id,a) values (602,47);
+insert into t (id,a) values (602,48);
+insert into t (id,a) values (602,49);
+insert into t (id,a) values (602,50);
+insert into t (id,a) values (602,51);
+insert into t (id,a) values (602,52);
+insert into t (id,a) values (602,53);
+insert into t (id,a) values (602,54);
+insert into t (id,a) values (602,55);
+insert into t (id,a) values (602,56);
+insert into t (id,a) values (602,57);
+insert into t (id,a) values (602,58);
+insert into t (id,a) values (602,59);
+insert into t (id,a) values (602,60);
+insert into t (id,a) values (602,61);
+insert into t (id,a) values (602,62);
+insert into t (id,a) values (602,63);
+insert into t (id,a) values (602,64);
+insert into t (id,a) values (602,65);
+insert into t (id,a) values (602,66);
+insert into t (id,a) values (602,67);
+insert into t (id,a) values (602,68);
+insert into t (id,a) values (602,69);
+insert into t (id,a) values (602,70);
+insert into t (id,a) values (602,71);
+insert into t (id,a) values (602,72);
+insert into t (id,a) values (602,73);
+insert into t (id,a) values (602,74);
+insert into t (id,a) values (602,75);
+insert into t (id,a) values (602,76);
+insert into t (id,a) values (602,77);
+insert into t (id,a) values (602,78);
+insert into t (id,a) values (602,79);
+insert into t (id,a) values (602,80);
+insert into t (id,a) values (602,81);
+insert into t (id,a) values (602,82);
+insert into t (id,a) values (602,83);
+insert into t (id,a) values (602,84);
+insert into t (id,a) values (602,85);
+insert into t (id,a) values (602,86);
+insert into t (id,a) values (602,87);
+insert into t (id,a) values (602,88);
+insert into t (id,a) values (602,89);
+insert into t (id,a) values (602,90);
+insert into t (id,a) values (602,91);
+insert into t (id,a) values (602,92);
+insert into t (id,a) values (602,93);
+insert into t (id,a) values (602,94);
+insert into t (id,a) values (602,95);
+insert into t (id,a) values (602,96);
+insert into t (id,a) values (602,97);
+insert into t (id,a) values (602,98);
+insert into t (id,a) values (602,99);
+insert into t (id,a) values (603,0);
+insert into t (id,a) values (603,1);
+insert into t (id,a) values (603,2);
+insert into t (id,a) values (603,3);
+insert into t (id,a) values (603,4);
+insert into t (id,a) values (603,5);
+insert into t (id,a) values (603,6);
+insert into t (id,a) values (603,7);
+insert into t (id,a) values (603,8);
+insert into t (id,a) values (603,9);
+insert into t (id,a) values (603,10);
+insert into t (id,a) values (603,11);
+insert into t (id,a) values (603,12);
+insert into t (id,a) values (603,13);
+insert into t (id,a) values (603,14);
+insert into t (id,a) values (603,15);
+insert into t (id,a) values (603,16);
+insert into t (id,a) values (603,17);
+insert into t (id,a) values (603,18);
+insert into t (id,a) values (603,19);
+insert into t (id,a) values (603,20);
+insert into t (id,a) values (603,21);
+insert into t (id,a) values (603,22);
+insert into t (id,a) values (603,23);
+insert into t (id,a) values (603,24);
+insert into t (id,a) values (603,25);
+insert into t (id,a) values (603,26);
+insert into t (id,a) values (603,27);
+insert into t (id,a) values (603,28);
+insert into t (id,a) values (603,29);
+insert into t (id,a) values (603,30);
+insert into t (id,a) values (603,31);
+insert into t (id,a) values (603,32);
+insert into t (id,a) values (603,33);
+insert into t (id,a) values (603,34);
+insert into t (id,a) values (603,35);
+insert into t (id,a) values (603,36);
+insert into t (id,a) values (603,37);
+insert into t (id,a) values (603,38);
+insert into t (id,a) values (603,39);
+insert into t (id,a) values (603,40);
+insert into t (id,a) values (603,41);
+insert into t (id,a) values (603,42);
+insert into t (id,a) values (603,43);
+insert into t (id,a) values (603,44);
+insert into t (id,a) values (603,45);
+insert into t (id,a) values (603,46);
+insert into t (id,a) values (603,47);
+insert into t (id,a) values (603,48);
+insert into t (id,a) values (603,49);
+insert into t (id,a) values (603,50);
+insert into t (id,a) values (603,51);
+insert into t (id,a) values (603,52);
+insert into t (id,a) values (603,53);
+insert into t (id,a) values (603,54);
+insert into t (id,a) values (603,55);
+insert into t (id,a) values (603,56);
+insert into t (id,a) values (603,57);
+insert into t (id,a) values (603,58);
+insert into t (id,a) values (603,59);
+insert into t (id,a) values (603,60);
+insert into t (id,a) values (603,61);
+insert into t (id,a) values (603,62);
+insert into t (id,a) values (603,63);
+insert into t (id,a) values (603,64);
+insert into t (id,a) values (603,65);
+insert into t (id,a) values (603,66);
+insert into t (id,a) values (603,67);
+insert into t (id,a) values (603,68);
+insert into t (id,a) values (603,69);
+insert into t (id,a) values (603,70);
+insert into t (id,a) values (603,71);
+insert into t (id,a) values (603,72);
+insert into t (id,a) values (603,73);
+insert into t (id,a) values (603,74);
+insert into t (id,a) values (603,75);
+insert into t (id,a) values (603,76);
+insert into t (id,a) values (603,77);
+insert into t (id,a) values (603,78);
+insert into t (id,a) values (603,79);
+insert into t (id,a) values (603,80);
+insert into t (id,a) values (603,81);
+insert into t (id,a) values (603,82);
+insert into t (id,a) values (603,83);
+insert into t (id,a) values (603,84);
+insert into t (id,a) values (603,85);
+insert into t (id,a) values (603,86);
+insert into t (id,a) values (603,87);
+insert into t (id,a) values (603,88);
+insert into t (id,a) values (603,89);
+insert into t (id,a) values (603,90);
+insert into t (id,a) values (603,91);
+insert into t (id,a) values (603,92);
+insert into t (id,a) values (603,93);
+insert into t (id,a) values (603,94);
+insert into t (id,a) values (603,95);
+insert into t (id,a) values (603,96);
+insert into t (id,a) values (603,97);
+insert into t (id,a) values (603,98);
+insert into t (id,a) values (603,99);
+insert into t (id,a) values (604,0);
+insert into t (id,a) values (604,1);
+insert into t (id,a) values (604,2);
+insert into t (id,a) values (604,3);
+insert into t (id,a) values (604,4);
+insert into t (id,a) values (604,5);
+insert into t (id,a) values (604,6);
+insert into t (id,a) values (604,7);
+insert into t (id,a) values (604,8);
+insert into t (id,a) values (604,9);
+insert into t (id,a) values (604,10);
+insert into t (id,a) values (604,11);
+insert into t (id,a) values (604,12);
+insert into t (id,a) values (604,13);
+insert into t (id,a) values (604,14);
+insert into t (id,a) values (604,15);
+insert into t (id,a) values (604,16);
+insert into t (id,a) values (604,17);
+insert into t (id,a) values (604,18);
+insert into t (id,a) values (604,19);
+insert into t (id,a) values (604,20);
+insert into t (id,a) values (604,21);
+insert into t (id,a) values (604,22);
+insert into t (id,a) values (604,23);
+insert into t (id,a) values (604,24);
+insert into t (id,a) values (604,25);
+insert into t (id,a) values (604,26);
+insert into t (id,a) values (604,27);
+insert into t (id,a) values (604,28);
+insert into t (id,a) values (604,29);
+insert into t (id,a) values (604,30);
+insert into t (id,a) values (604,31);
+insert into t (id,a) values (604,32);
+insert into t (id,a) values (604,33);
+insert into t (id,a) values (604,34);
+insert into t (id,a) values (604,35);
+insert into t (id,a) values (604,36);
+insert into t (id,a) values (604,37);
+insert into t (id,a) values (604,38);
+insert into t (id,a) values (604,39);
+insert into t (id,a) values (604,40);
+insert into t (id,a) values (604,41);
+insert into t (id,a) values (604,42);
+insert into t (id,a) values (604,43);
+insert into t (id,a) values (604,44);
+insert into t (id,a) values (604,45);
+insert into t (id,a) values (604,46);
+insert into t (id,a) values (604,47);
+insert into t (id,a) values (604,48);
+insert into t (id,a) values (604,49);
+insert into t (id,a) values (604,50);
+insert into t (id,a) values (604,51);
+insert into t (id,a) values (604,52);
+insert into t (id,a) values (604,53);
+insert into t (id,a) values (604,54);
+insert into t (id,a) values (604,55);
+insert into t (id,a) values (604,56);
+insert into t (id,a) values (604,57);
+insert into t (id,a) values (604,58);
+insert into t (id,a) values (604,59);
+insert into t (id,a) values (604,60);
+insert into t (id,a) values (604,61);
+insert into t (id,a) values (604,62);
+insert into t (id,a) values (604,63);
+insert into t (id,a) values (604,64);
+insert into t (id,a) values (604,65);
+insert into t (id,a) values (604,66);
+insert into t (id,a) values (604,67);
+insert into t (id,a) values (604,68);
+insert into t (id,a) values (604,69);
+insert into t (id,a) values (604,70);
+insert into t (id,a) values (604,71);
+insert into t (id,a) values (604,72);
+insert into t (id,a) values (604,73);
+insert into t (id,a) values (604,74);
+insert into t (id,a) values (604,75);
+insert into t (id,a) values (604,76);
+insert into t (id,a) values (604,77);
+insert into t (id,a) values (604,78);
+insert into t (id,a) values (604,79);
+insert into t (id,a) values (604,80);
+insert into t (id,a) values (604,81);
+insert into t (id,a) values (604,82);
+insert into t (id,a) values (604,83);
+insert into t (id,a) values (604,84);
+insert into t (id,a) values (604,85);
+insert into t (id,a) values (604,86);
+insert into t (id,a) values (604,87);
+insert into t (id,a) values (604,88);
+insert into t (id,a) values (604,89);
+insert into t (id,a) values (604,90);
+insert into t (id,a) values (604,91);
+insert into t (id,a) values (604,92);
+insert into t (id,a) values (604,93);
+insert into t (id,a) values (604,94);
+insert into t (id,a) values (604,95);
+insert into t (id,a) values (604,96);
+insert into t (id,a) values (604,97);
+insert into t (id,a) values (604,98);
+insert into t (id,a) values (604,99);
+insert into t (id,a) values (605,0);
+insert into t (id,a) values (605,1);
+insert into t (id,a) values (605,2);
+insert into t (id,a) values (605,3);
+insert into t (id,a) values (605,4);
+insert into t (id,a) values (605,5);
+insert into t (id,a) values (605,6);
+insert into t (id,a) values (605,7);
+insert into t (id,a) values (605,8);
+insert into t (id,a) values (605,9);
+insert into t (id,a) values (605,10);
+insert into t (id,a) values (605,11);
+insert into t (id,a) values (605,12);
+insert into t (id,a) values (605,13);
+insert into t (id,a) values (605,14);
+insert into t (id,a) values (605,15);
+insert into t (id,a) values (605,16);
+insert into t (id,a) values (605,17);
+insert into t (id,a) values (605,18);
+insert into t (id,a) values (605,19);
+insert into t (id,a) values (605,20);
+insert into t (id,a) values (605,21);
+insert into t (id,a) values (605,22);
+insert into t (id,a) values (605,23);
+insert into t (id,a) values (605,24);
+insert into t (id,a) values (605,25);
+insert into t (id,a) values (605,26);
+insert into t (id,a) values (605,27);
+insert into t (id,a) values (605,28);
+insert into t (id,a) values (605,29);
+insert into t (id,a) values (605,30);
+insert into t (id,a) values (605,31);
+insert into t (id,a) values (605,32);
+insert into t (id,a) values (605,33);
+insert into t (id,a) values (605,34);
+insert into t (id,a) values (605,35);
+insert into t (id,a) values (605,36);
+insert into t (id,a) values (605,37);
+insert into t (id,a) values (605,38);
+insert into t (id,a) values (605,39);
+insert into t (id,a) values (605,40);
+insert into t (id,a) values (605,41);
+insert into t (id,a) values (605,42);
+insert into t (id,a) values (605,43);
+insert into t (id,a) values (605,44);
+insert into t (id,a) values (605,45);
+insert into t (id,a) values (605,46);
+insert into t (id,a) values (605,47);
+insert into t (id,a) values (605,48);
+insert into t (id,a) values (605,49);
+insert into t (id,a) values (605,50);
+insert into t (id,a) values (605,51);
+insert into t (id,a) values (605,52);
+insert into t (id,a) values (605,53);
+insert into t (id,a) values (605,54);
+insert into t (id,a) values (605,55);
+insert into t (id,a) values (605,56);
+insert into t (id,a) values (605,57);
+insert into t (id,a) values (605,58);
+insert into t (id,a) values (605,59);
+insert into t (id,a) values (605,60);
+insert into t (id,a) values (605,61);
+insert into t (id,a) values (605,62);
+insert into t (id,a) values (605,63);
+insert into t (id,a) values (605,64);
+insert into t (id,a) values (605,65);
+insert into t (id,a) values (605,66);
+insert into t (id,a) values (605,67);
+insert into t (id,a) values (605,68);
+insert into t (id,a) values (605,69);
+insert into t (id,a) values (605,70);
+insert into t (id,a) values (605,71);
+insert into t (id,a) values (605,72);
+insert into t (id,a) values (605,73);
+insert into t (id,a) values (605,74);
+insert into t (id,a) values (605,75);
+insert into t (id,a) values (605,76);
+insert into t (id,a) values (605,77);
+insert into t (id,a) values (605,78);
+insert into t (id,a) values (605,79);
+insert into t (id,a) values (605,80);
+insert into t (id,a) values (605,81);
+insert into t (id,a) values (605,82);
+insert into t (id,a) values (605,83);
+insert into t (id,a) values (605,84);
+insert into t (id,a) values (605,85);
+insert into t (id,a) values (605,86);
+insert into t (id,a) values (605,87);
+insert into t (id,a) values (605,88);
+insert into t (id,a) values (605,89);
+insert into t (id,a) values (605,90);
+insert into t (id,a) values (605,91);
+insert into t (id,a) values (605,92);
+insert into t (id,a) values (605,93);
+insert into t (id,a) values (605,94);
+insert into t (id,a) values (605,95);
+insert into t (id,a) values (605,96);
+insert into t (id,a) values (605,97);
+insert into t (id,a) values (605,98);
+insert into t (id,a) values (605,99);
+insert into t (id,a) values (606,0);
+insert into t (id,a) values (606,1);
+insert into t (id,a) values (606,2);
+insert into t (id,a) values (606,3);
+insert into t (id,a) values (606,4);
+insert into t (id,a) values (606,5);
+insert into t (id,a) values (606,6);
+insert into t (id,a) values (606,7);
+insert into t (id,a) values (606,8);
+insert into t (id,a) values (606,9);
+insert into t (id,a) values (606,10);
+insert into t (id,a) values (606,11);
+insert into t (id,a) values (606,12);
+insert into t (id,a) values (606,13);
+insert into t (id,a) values (606,14);
+insert into t (id,a) values (606,15);
+insert into t (id,a) values (606,16);
+insert into t (id,a) values (606,17);
+insert into t (id,a) values (606,18);
+insert into t (id,a) values (606,19);
+insert into t (id,a) values (606,20);
+insert into t (id,a) values (606,21);
+insert into t (id,a) values (606,22);
+insert into t (id,a) values (606,23);
+insert into t (id,a) values (606,24);
+insert into t (id,a) values (606,25);
+insert into t (id,a) values (606,26);
+insert into t (id,a) values (606,27);
+insert into t (id,a) values (606,28);
+insert into t (id,a) values (606,29);
+insert into t (id,a) values (606,30);
+insert into t (id,a) values (606,31);
+insert into t (id,a) values (606,32);
+insert into t (id,a) values (606,33);
+insert into t (id,a) values (606,34);
+insert into t (id,a) values (606,35);
+insert into t (id,a) values (606,36);
+insert into t (id,a) values (606,37);
+insert into t (id,a) values (606,38);
+insert into t (id,a) values (606,39);
+insert into t (id,a) values (606,40);
+insert into t (id,a) values (606,41);
+insert into t (id,a) values (606,42);
+insert into t (id,a) values (606,43);
+insert into t (id,a) values (606,44);
+insert into t (id,a) values (606,45);
+insert into t (id,a) values (606,46);
+insert into t (id,a) values (606,47);
+insert into t (id,a) values (606,48);
+insert into t (id,a) values (606,49);
+insert into t (id,a) values (606,50);
+insert into t (id,a) values (606,51);
+insert into t (id,a) values (606,52);
+insert into t (id,a) values (606,53);
+insert into t (id,a) values (606,54);
+insert into t (id,a) values (606,55);
+insert into t (id,a) values (606,56);
+insert into t (id,a) values (606,57);
+insert into t (id,a) values (606,58);
+insert into t (id,a) values (606,59);
+insert into t (id,a) values (606,60);
+insert into t (id,a) values (606,61);
+insert into t (id,a) values (606,62);
+insert into t (id,a) values (606,63);
+insert into t (id,a) values (606,64);
+insert into t (id,a) values (606,65);
+insert into t (id,a) values (606,66);
+insert into t (id,a) values (606,67);
+insert into t (id,a) values (606,68);
+insert into t (id,a) values (606,69);
+insert into t (id,a) values (606,70);
+insert into t (id,a) values (606,71);
+insert into t (id,a) values (606,72);
+insert into t (id,a) values (606,73);
+insert into t (id,a) values (606,74);
+insert into t (id,a) values (606,75);
+insert into t (id,a) values (606,76);
+insert into t (id,a) values (606,77);
+insert into t (id,a) values (606,78);
+insert into t (id,a) values (606,79);
+insert into t (id,a) values (606,80);
+insert into t (id,a) values (606,81);
+insert into t (id,a) values (606,82);
+insert into t (id,a) values (606,83);
+insert into t (id,a) values (606,84);
+insert into t (id,a) values (606,85);
+insert into t (id,a) values (606,86);
+insert into t (id,a) values (606,87);
+insert into t (id,a) values (606,88);
+insert into t (id,a) values (606,89);
+insert into t (id,a) values (606,90);
+insert into t (id,a) values (606,91);
+insert into t (id,a) values (606,92);
+insert into t (id,a) values (606,93);
+insert into t (id,a) values (606,94);
+insert into t (id,a) values (606,95);
+insert into t (id,a) values (606,96);
+insert into t (id,a) values (606,97);
+insert into t (id,a) values (606,98);
+insert into t (id,a) values (606,99);
+insert into t (id,a) values (607,0);
+insert into t (id,a) values (607,1);
+insert into t (id,a) values (607,2);
+insert into t (id,a) values (607,3);
+insert into t (id,a) values (607,4);
+insert into t (id,a) values (607,5);
+insert into t (id,a) values (607,6);
+insert into t (id,a) values (607,7);
+insert into t (id,a) values (607,8);
+insert into t (id,a) values (607,9);
+insert into t (id,a) values (607,10);
+insert into t (id,a) values (607,11);
+insert into t (id,a) values (607,12);
+insert into t (id,a) values (607,13);
+insert into t (id,a) values (607,14);
+insert into t (id,a) values (607,15);
+insert into t (id,a) values (607,16);
+insert into t (id,a) values (607,17);
+insert into t (id,a) values (607,18);
+insert into t (id,a) values (607,19);
+insert into t (id,a) values (607,20);
+insert into t (id,a) values (607,21);
+insert into t (id,a) values (607,22);
+insert into t (id,a) values (607,23);
+insert into t (id,a) values (607,24);
+insert into t (id,a) values (607,25);
+insert into t (id,a) values (607,26);
+insert into t (id,a) values (607,27);
+insert into t (id,a) values (607,28);
+insert into t (id,a) values (607,29);
+insert into t (id,a) values (607,30);
+insert into t (id,a) values (607,31);
+insert into t (id,a) values (607,32);
+insert into t (id,a) values (607,33);
+insert into t (id,a) values (607,34);
+insert into t (id,a) values (607,35);
+insert into t (id,a) values (607,36);
+insert into t (id,a) values (607,37);
+insert into t (id,a) values (607,38);
+insert into t (id,a) values (607,39);
+insert into t (id,a) values (607,40);
+insert into t (id,a) values (607,41);
+insert into t (id,a) values (607,42);
+insert into t (id,a) values (607,43);
+insert into t (id,a) values (607,44);
+insert into t (id,a) values (607,45);
+insert into t (id,a) values (607,46);
+insert into t (id,a) values (607,47);
+insert into t (id,a) values (607,48);
+insert into t (id,a) values (607,49);
+insert into t (id,a) values (607,50);
+insert into t (id,a) values (607,51);
+insert into t (id,a) values (607,52);
+insert into t (id,a) values (607,53);
+insert into t (id,a) values (607,54);
+insert into t (id,a) values (607,55);
+insert into t (id,a) values (607,56);
+insert into t (id,a) values (607,57);
+insert into t (id,a) values (607,58);
+insert into t (id,a) values (607,59);
+insert into t (id,a) values (607,60);
+insert into t (id,a) values (607,61);
+insert into t (id,a) values (607,62);
+insert into t (id,a) values (607,63);
+insert into t (id,a) values (607,64);
+insert into t (id,a) values (607,65);
+insert into t (id,a) values (607,66);
+insert into t (id,a) values (607,67);
+insert into t (id,a) values (607,68);
+insert into t (id,a) values (607,69);
+insert into t (id,a) values (607,70);
+insert into t (id,a) values (607,71);
+insert into t (id,a) values (607,72);
+insert into t (id,a) values (607,73);
+insert into t (id,a) values (607,74);
+insert into t (id,a) values (607,75);
+insert into t (id,a) values (607,76);
+insert into t (id,a) values (607,77);
+insert into t (id,a) values (607,78);
+insert into t (id,a) values (607,79);
+insert into t (id,a) values (607,80);
+insert into t (id,a) values (607,81);
+insert into t (id,a) values (607,82);
+insert into t (id,a) values (607,83);
+insert into t (id,a) values (607,84);
+insert into t (id,a) values (607,85);
+insert into t (id,a) values (607,86);
+insert into t (id,a) values (607,87);
+insert into t (id,a) values (607,88);
+insert into t (id,a) values (607,89);
+insert into t (id,a) values (607,90);
+insert into t (id,a) values (607,91);
+insert into t (id,a) values (607,92);
+insert into t (id,a) values (607,93);
+insert into t (id,a) values (607,94);
+insert into t (id,a) values (607,95);
+insert into t (id,a) values (607,96);
+insert into t (id,a) values (607,97);
+insert into t (id,a) values (607,98);
+insert into t (id,a) values (607,99);
+insert into t (id,a) values (608,0);
+insert into t (id,a) values (608,1);
+insert into t (id,a) values (608,2);
+insert into t (id,a) values (608,3);
+insert into t (id,a) values (608,4);
+insert into t (id,a) values (608,5);
+insert into t (id,a) values (608,6);
+insert into t (id,a) values (608,7);
+insert into t (id,a) values (608,8);
+insert into t (id,a) values (608,9);
+insert into t (id,a) values (608,10);
+insert into t (id,a) values (608,11);
+insert into t (id,a) values (608,12);
+insert into t (id,a) values (608,13);
+insert into t (id,a) values (608,14);
+insert into t (id,a) values (608,15);
+insert into t (id,a) values (608,16);
+insert into t (id,a) values (608,17);
+insert into t (id,a) values (608,18);
+insert into t (id,a) values (608,19);
+insert into t (id,a) values (608,20);
+insert into t (id,a) values (608,21);
+insert into t (id,a) values (608,22);
+insert into t (id,a) values (608,23);
+insert into t (id,a) values (608,24);
+insert into t (id,a) values (608,25);
+insert into t (id,a) values (608,26);
+insert into t (id,a) values (608,27);
+insert into t (id,a) values (608,28);
+insert into t (id,a) values (608,29);
+insert into t (id,a) values (608,30);
+insert into t (id,a) values (608,31);
+insert into t (id,a) values (608,32);
+insert into t (id,a) values (608,33);
+insert into t (id,a) values (608,34);
+insert into t (id,a) values (608,35);
+insert into t (id,a) values (608,36);
+insert into t (id,a) values (608,37);
+insert into t (id,a) values (608,38);
+insert into t (id,a) values (608,39);
+insert into t (id,a) values (608,40);
+insert into t (id,a) values (608,41);
+insert into t (id,a) values (608,42);
+insert into t (id,a) values (608,43);
+insert into t (id,a) values (608,44);
+insert into t (id,a) values (608,45);
+insert into t (id,a) values (608,46);
+insert into t (id,a) values (608,47);
+insert into t (id,a) values (608,48);
+insert into t (id,a) values (608,49);
+insert into t (id,a) values (608,50);
+insert into t (id,a) values (608,51);
+insert into t (id,a) values (608,52);
+insert into t (id,a) values (608,53);
+insert into t (id,a) values (608,54);
+insert into t (id,a) values (608,55);
+insert into t (id,a) values (608,56);
+insert into t (id,a) values (608,57);
+insert into t (id,a) values (608,58);
+insert into t (id,a) values (608,59);
+insert into t (id,a) values (608,60);
+insert into t (id,a) values (608,61);
+insert into t (id,a) values (608,62);
+insert into t (id,a) values (608,63);
+insert into t (id,a) values (608,64);
+insert into t (id,a) values (608,65);
+insert into t (id,a) values (608,66);
+insert into t (id,a) values (608,67);
+insert into t (id,a) values (608,68);
+insert into t (id,a) values (608,69);
+insert into t (id,a) values (608,70);
+insert into t (id,a) values (608,71);
+insert into t (id,a) values (608,72);
+insert into t (id,a) values (608,73);
+insert into t (id,a) values (608,74);
+insert into t (id,a) values (608,75);
+insert into t (id,a) values (608,76);
+insert into t (id,a) values (608,77);
+insert into t (id,a) values (608,78);
+insert into t (id,a) values (608,79);
+insert into t (id,a) values (608,80);
+insert into t (id,a) values (608,81);
+insert into t (id,a) values (608,82);
+insert into t (id,a) values (608,83);
+insert into t (id,a) values (608,84);
+insert into t (id,a) values (608,85);
+insert into t (id,a) values (608,86);
+insert into t (id,a) values (608,87);
+insert into t (id,a) values (608,88);
+insert into t (id,a) values (608,89);
+insert into t (id,a) values (608,90);
+insert into t (id,a) values (608,91);
+insert into t (id,a) values (608,92);
+insert into t (id,a) values (608,93);
+insert into t (id,a) values (608,94);
+insert into t (id,a) values (608,95);
+insert into t (id,a) values (608,96);
+insert into t (id,a) values (608,97);
+insert into t (id,a) values (608,98);
+insert into t (id,a) values (608,99);
+insert into t (id,a) values (609,0);
+insert into t (id,a) values (609,1);
+insert into t (id,a) values (609,2);
+insert into t (id,a) values (609,3);
+insert into t (id,a) values (609,4);
+insert into t (id,a) values (609,5);
+insert into t (id,a) values (609,6);
+insert into t (id,a) values (609,7);
+insert into t (id,a) values (609,8);
+insert into t (id,a) values (609,9);
+insert into t (id,a) values (609,10);
+insert into t (id,a) values (609,11);
+insert into t (id,a) values (609,12);
+insert into t (id,a) values (609,13);
+insert into t (id,a) values (609,14);
+insert into t (id,a) values (609,15);
+insert into t (id,a) values (609,16);
+insert into t (id,a) values (609,17);
+insert into t (id,a) values (609,18);
+insert into t (id,a) values (609,19);
+insert into t (id,a) values (609,20);
+insert into t (id,a) values (609,21);
+insert into t (id,a) values (609,22);
+insert into t (id,a) values (609,23);
+insert into t (id,a) values (609,24);
+insert into t (id,a) values (609,25);
+insert into t (id,a) values (609,26);
+insert into t (id,a) values (609,27);
+insert into t (id,a) values (609,28);
+insert into t (id,a) values (609,29);
+insert into t (id,a) values (609,30);
+insert into t (id,a) values (609,31);
+insert into t (id,a) values (609,32);
+insert into t (id,a) values (609,33);
+insert into t (id,a) values (609,34);
+insert into t (id,a) values (609,35);
+insert into t (id,a) values (609,36);
+insert into t (id,a) values (609,37);
+insert into t (id,a) values (609,38);
+insert into t (id,a) values (609,39);
+insert into t (id,a) values (609,40);
+insert into t (id,a) values (609,41);
+insert into t (id,a) values (609,42);
+insert into t (id,a) values (609,43);
+insert into t (id,a) values (609,44);
+insert into t (id,a) values (609,45);
+insert into t (id,a) values (609,46);
+insert into t (id,a) values (609,47);
+insert into t (id,a) values (609,48);
+insert into t (id,a) values (609,49);
+insert into t (id,a) values (609,50);
+insert into t (id,a) values (609,51);
+insert into t (id,a) values (609,52);
+insert into t (id,a) values (609,53);
+insert into t (id,a) values (609,54);
+insert into t (id,a) values (609,55);
+insert into t (id,a) values (609,56);
+insert into t (id,a) values (609,57);
+insert into t (id,a) values (609,58);
+insert into t (id,a) values (609,59);
+insert into t (id,a) values (609,60);
+insert into t (id,a) values (609,61);
+insert into t (id,a) values (609,62);
+insert into t (id,a) values (609,63);
+insert into t (id,a) values (609,64);
+insert into t (id,a) values (609,65);
+insert into t (id,a) values (609,66);
+insert into t (id,a) values (609,67);
+insert into t (id,a) values (609,68);
+insert into t (id,a) values (609,69);
+insert into t (id,a) values (609,70);
+insert into t (id,a) values (609,71);
+insert into t (id,a) values (609,72);
+insert into t (id,a) values (609,73);
+insert into t (id,a) values (609,74);
+insert into t (id,a) values (609,75);
+insert into t (id,a) values (609,76);
+insert into t (id,a) values (609,77);
+insert into t (id,a) values (609,78);
+insert into t (id,a) values (609,79);
+insert into t (id,a) values (609,80);
+insert into t (id,a) values (609,81);
+insert into t (id,a) values (609,82);
+insert into t (id,a) values (609,83);
+insert into t (id,a) values (609,84);
+insert into t (id,a) values (609,85);
+insert into t (id,a) values (609,86);
+insert into t (id,a) values (609,87);
+insert into t (id,a) values (609,88);
+insert into t (id,a) values (609,89);
+insert into t (id,a) values (609,90);
+insert into t (id,a) values (609,91);
+insert into t (id,a) values (609,92);
+insert into t (id,a) values (609,93);
+insert into t (id,a) values (609,94);
+insert into t (id,a) values (609,95);
+insert into t (id,a) values (609,96);
+insert into t (id,a) values (609,97);
+insert into t (id,a) values (609,98);
+insert into t (id,a) values (609,99);
+insert into t (id,a) values (610,0);
+insert into t (id,a) values (610,1);
+insert into t (id,a) values (610,2);
+insert into t (id,a) values (610,3);
+insert into t (id,a) values (610,4);
+insert into t (id,a) values (610,5);
+insert into t (id,a) values (610,6);
+insert into t (id,a) values (610,7);
+insert into t (id,a) values (610,8);
+insert into t (id,a) values (610,9);
+insert into t (id,a) values (610,10);
+insert into t (id,a) values (610,11);
+insert into t (id,a) values (610,12);
+insert into t (id,a) values (610,13);
+insert into t (id,a) values (610,14);
+insert into t (id,a) values (610,15);
+insert into t (id,a) values (610,16);
+insert into t (id,a) values (610,17);
+insert into t (id,a) values (610,18);
+insert into t (id,a) values (610,19);
+insert into t (id,a) values (610,20);
+insert into t (id,a) values (610,21);
+insert into t (id,a) values (610,22);
+insert into t (id,a) values (610,23);
+insert into t (id,a) values (610,24);
+insert into t (id,a) values (610,25);
+insert into t (id,a) values (610,26);
+insert into t (id,a) values (610,27);
+insert into t (id,a) values (610,28);
+insert into t (id,a) values (610,29);
+insert into t (id,a) values (610,30);
+insert into t (id,a) values (610,31);
+insert into t (id,a) values (610,32);
+insert into t (id,a) values (610,33);
+insert into t (id,a) values (610,34);
+insert into t (id,a) values (610,35);
+insert into t (id,a) values (610,36);
+insert into t (id,a) values (610,37);
+insert into t (id,a) values (610,38);
+insert into t (id,a) values (610,39);
+insert into t (id,a) values (610,40);
+insert into t (id,a) values (610,41);
+insert into t (id,a) values (610,42);
+insert into t (id,a) values (610,43);
+insert into t (id,a) values (610,44);
+insert into t (id,a) values (610,45);
+insert into t (id,a) values (610,46);
+insert into t (id,a) values (610,47);
+insert into t (id,a) values (610,48);
+insert into t (id,a) values (610,49);
+insert into t (id,a) values (610,50);
+insert into t (id,a) values (610,51);
+insert into t (id,a) values (610,52);
+insert into t (id,a) values (610,53);
+insert into t (id,a) values (610,54);
+insert into t (id,a) values (610,55);
+insert into t (id,a) values (610,56);
+insert into t (id,a) values (610,57);
+insert into t (id,a) values (610,58);
+insert into t (id,a) values (610,59);
+insert into t (id,a) values (610,60);
+insert into t (id,a) values (610,61);
+insert into t (id,a) values (610,62);
+insert into t (id,a) values (610,63);
+insert into t (id,a) values (610,64);
+insert into t (id,a) values (610,65);
+insert into t (id,a) values (610,66);
+insert into t (id,a) values (610,67);
+insert into t (id,a) values (610,68);
+insert into t (id,a) values (610,69);
+insert into t (id,a) values (610,70);
+insert into t (id,a) values (610,71);
+insert into t (id,a) values (610,72);
+insert into t (id,a) values (610,73);
+insert into t (id,a) values (610,74);
+insert into t (id,a) values (610,75);
+insert into t (id,a) values (610,76);
+insert into t (id,a) values (610,77);
+insert into t (id,a) values (610,78);
+insert into t (id,a) values (610,79);
+insert into t (id,a) values (610,80);
+insert into t (id,a) values (610,81);
+insert into t (id,a) values (610,82);
+insert into t (id,a) values (610,83);
+insert into t (id,a) values (610,84);
+insert into t (id,a) values (610,85);
+insert into t (id,a) values (610,86);
+insert into t (id,a) values (610,87);
+insert into t (id,a) values (610,88);
+insert into t (id,a) values (610,89);
+insert into t (id,a) values (610,90);
+insert into t (id,a) values (610,91);
+insert into t (id,a) values (610,92);
+insert into t (id,a) values (610,93);
+insert into t (id,a) values (610,94);
+insert into t (id,a) values (610,95);
+insert into t (id,a) values (610,96);
+insert into t (id,a) values (610,97);
+insert into t (id,a) values (610,98);
+insert into t (id,a) values (610,99);
+insert into t (id,a) values (611,0);
+insert into t (id,a) values (611,1);
+insert into t (id,a) values (611,2);
+insert into t (id,a) values (611,3);
+insert into t (id,a) values (611,4);
+insert into t (id,a) values (611,5);
+insert into t (id,a) values (611,6);
+insert into t (id,a) values (611,7);
+insert into t (id,a) values (611,8);
+insert into t (id,a) values (611,9);
+insert into t (id,a) values (611,10);
+insert into t (id,a) values (611,11);
+insert into t (id,a) values (611,12);
+insert into t (id,a) values (611,13);
+insert into t (id,a) values (611,14);
+insert into t (id,a) values (611,15);
+insert into t (id,a) values (611,16);
+insert into t (id,a) values (611,17);
+insert into t (id,a) values (611,18);
+insert into t (id,a) values (611,19);
+insert into t (id,a) values (611,20);
+insert into t (id,a) values (611,21);
+insert into t (id,a) values (611,22);
+insert into t (id,a) values (611,23);
+insert into t (id,a) values (611,24);
+insert into t (id,a) values (611,25);
+insert into t (id,a) values (611,26);
+insert into t (id,a) values (611,27);
+insert into t (id,a) values (611,28);
+insert into t (id,a) values (611,29);
+insert into t (id,a) values (611,30);
+insert into t (id,a) values (611,31);
+insert into t (id,a) values (611,32);
+insert into t (id,a) values (611,33);
+insert into t (id,a) values (611,34);
+insert into t (id,a) values (611,35);
+insert into t (id,a) values (611,36);
+insert into t (id,a) values (611,37);
+insert into t (id,a) values (611,38);
+insert into t (id,a) values (611,39);
+insert into t (id,a) values (611,40);
+insert into t (id,a) values (611,41);
+insert into t (id,a) values (611,42);
+insert into t (id,a) values (611,43);
+insert into t (id,a) values (611,44);
+insert into t (id,a) values (611,45);
+insert into t (id,a) values (611,46);
+insert into t (id,a) values (611,47);
+insert into t (id,a) values (611,48);
+insert into t (id,a) values (611,49);
+insert into t (id,a) values (611,50);
+insert into t (id,a) values (611,51);
+insert into t (id,a) values (611,52);
+insert into t (id,a) values (611,53);
+insert into t (id,a) values (611,54);
+insert into t (id,a) values (611,55);
+insert into t (id,a) values (611,56);
+insert into t (id,a) values (611,57);
+insert into t (id,a) values (611,58);
+insert into t (id,a) values (611,59);
+insert into t (id,a) values (611,60);
+insert into t (id,a) values (611,61);
+insert into t (id,a) values (611,62);
+insert into t (id,a) values (611,63);
+insert into t (id,a) values (611,64);
+insert into t (id,a) values (611,65);
+insert into t (id,a) values (611,66);
+insert into t (id,a) values (611,67);
+insert into t (id,a) values (611,68);
+insert into t (id,a) values (611,69);
+insert into t (id,a) values (611,70);
+insert into t (id,a) values (611,71);
+insert into t (id,a) values (611,72);
+insert into t (id,a) values (611,73);
+insert into t (id,a) values (611,74);
+insert into t (id,a) values (611,75);
+insert into t (id,a) values (611,76);
+insert into t (id,a) values (611,77);
+insert into t (id,a) values (611,78);
+insert into t (id,a) values (611,79);
+insert into t (id,a) values (611,80);
+insert into t (id,a) values (611,81);
+insert into t (id,a) values (611,82);
+insert into t (id,a) values (611,83);
+insert into t (id,a) values (611,84);
+insert into t (id,a) values (611,85);
+insert into t (id,a) values (611,86);
+insert into t (id,a) values (611,87);
+insert into t (id,a) values (611,88);
+insert into t (id,a) values (611,89);
+insert into t (id,a) values (611,90);
+insert into t (id,a) values (611,91);
+insert into t (id,a) values (611,92);
+insert into t (id,a) values (611,93);
+insert into t (id,a) values (611,94);
+insert into t (id,a) values (611,95);
+insert into t (id,a) values (611,96);
+insert into t (id,a) values (611,97);
+insert into t (id,a) values (611,98);
+insert into t (id,a) values (611,99);
+insert into t (id,a) values (612,0);
+insert into t (id,a) values (612,1);
+insert into t (id,a) values (612,2);
+insert into t (id,a) values (612,3);
+insert into t (id,a) values (612,4);
+insert into t (id,a) values (612,5);
+insert into t (id,a) values (612,6);
+insert into t (id,a) values (612,7);
+insert into t (id,a) values (612,8);
+insert into t (id,a) values (612,9);
+insert into t (id,a) values (612,10);
+insert into t (id,a) values (612,11);
+insert into t (id,a) values (612,12);
+insert into t (id,a) values (612,13);
+insert into t (id,a) values (612,14);
+insert into t (id,a) values (612,15);
+insert into t (id,a) values (612,16);
+insert into t (id,a) values (612,17);
+insert into t (id,a) values (612,18);
+insert into t (id,a) values (612,19);
+insert into t (id,a) values (612,20);
+insert into t (id,a) values (612,21);
+insert into t (id,a) values (612,22);
+insert into t (id,a) values (612,23);
+insert into t (id,a) values (612,24);
+insert into t (id,a) values (612,25);
+insert into t (id,a) values (612,26);
+insert into t (id,a) values (612,27);
+insert into t (id,a) values (612,28);
+insert into t (id,a) values (612,29);
+insert into t (id,a) values (612,30);
+insert into t (id,a) values (612,31);
+insert into t (id,a) values (612,32);
+insert into t (id,a) values (612,33);
+insert into t (id,a) values (612,34);
+insert into t (id,a) values (612,35);
+insert into t (id,a) values (612,36);
+insert into t (id,a) values (612,37);
+insert into t (id,a) values (612,38);
+insert into t (id,a) values (612,39);
+insert into t (id,a) values (612,40);
+insert into t (id,a) values (612,41);
+insert into t (id,a) values (612,42);
+insert into t (id,a) values (612,43);
+insert into t (id,a) values (612,44);
+insert into t (id,a) values (612,45);
+insert into t (id,a) values (612,46);
+insert into t (id,a) values (612,47);
+insert into t (id,a) values (612,48);
+insert into t (id,a) values (612,49);
+insert into t (id,a) values (612,50);
+insert into t (id,a) values (612,51);
+insert into t (id,a) values (612,52);
+insert into t (id,a) values (612,53);
+insert into t (id,a) values (612,54);
+insert into t (id,a) values (612,55);
+insert into t (id,a) values (612,56);
+insert into t (id,a) values (612,57);
+insert into t (id,a) values (612,58);
+insert into t (id,a) values (612,59);
+insert into t (id,a) values (612,60);
+insert into t (id,a) values (612,61);
+insert into t (id,a) values (612,62);
+insert into t (id,a) values (612,63);
+insert into t (id,a) values (612,64);
+insert into t (id,a) values (612,65);
+insert into t (id,a) values (612,66);
+insert into t (id,a) values (612,67);
+insert into t (id,a) values (612,68);
+insert into t (id,a) values (612,69);
+insert into t (id,a) values (612,70);
+insert into t (id,a) values (612,71);
+insert into t (id,a) values (612,72);
+insert into t (id,a) values (612,73);
+insert into t (id,a) values (612,74);
+insert into t (id,a) values (612,75);
+insert into t (id,a) values (612,76);
+insert into t (id,a) values (612,77);
+insert into t (id,a) values (612,78);
+insert into t (id,a) values (612,79);
+insert into t (id,a) values (612,80);
+insert into t (id,a) values (612,81);
+insert into t (id,a) values (612,82);
+insert into t (id,a) values (612,83);
+insert into t (id,a) values (612,84);
+insert into t (id,a) values (612,85);
+insert into t (id,a) values (612,86);
+insert into t (id,a) values (612,87);
+insert into t (id,a) values (612,88);
+insert into t (id,a) values (612,89);
+insert into t (id,a) values (612,90);
+insert into t (id,a) values (612,91);
+insert into t (id,a) values (612,92);
+insert into t (id,a) values (612,93);
+insert into t (id,a) values (612,94);
+insert into t (id,a) values (612,95);
+insert into t (id,a) values (612,96);
+insert into t (id,a) values (612,97);
+insert into t (id,a) values (612,98);
+insert into t (id,a) values (612,99);
+insert into t (id,a) values (613,0);
+insert into t (id,a) values (613,1);
+insert into t (id,a) values (613,2);
+insert into t (id,a) values (613,3);
+insert into t (id,a) values (613,4);
+insert into t (id,a) values (613,5);
+insert into t (id,a) values (613,6);
+insert into t (id,a) values (613,7);
+insert into t (id,a) values (613,8);
+insert into t (id,a) values (613,9);
+insert into t (id,a) values (613,10);
+insert into t (id,a) values (613,11);
+insert into t (id,a) values (613,12);
+insert into t (id,a) values (613,13);
+insert into t (id,a) values (613,14);
+insert into t (id,a) values (613,15);
+insert into t (id,a) values (613,16);
+insert into t (id,a) values (613,17);
+insert into t (id,a) values (613,18);
+insert into t (id,a) values (613,19);
+insert into t (id,a) values (613,20);
+insert into t (id,a) values (613,21);
+insert into t (id,a) values (613,22);
+insert into t (id,a) values (613,23);
+insert into t (id,a) values (613,24);
+insert into t (id,a) values (613,25);
+insert into t (id,a) values (613,26);
+insert into t (id,a) values (613,27);
+insert into t (id,a) values (613,28);
+insert into t (id,a) values (613,29);
+insert into t (id,a) values (613,30);
+insert into t (id,a) values (613,31);
+insert into t (id,a) values (613,32);
+insert into t (id,a) values (613,33);
+insert into t (id,a) values (613,34);
+insert into t (id,a) values (613,35);
+insert into t (id,a) values (613,36);
+insert into t (id,a) values (613,37);
+insert into t (id,a) values (613,38);
+insert into t (id,a) values (613,39);
+insert into t (id,a) values (613,40);
+insert into t (id,a) values (613,41);
+insert into t (id,a) values (613,42);
+insert into t (id,a) values (613,43);
+insert into t (id,a) values (613,44);
+insert into t (id,a) values (613,45);
+insert into t (id,a) values (613,46);
+insert into t (id,a) values (613,47);
+insert into t (id,a) values (613,48);
+insert into t (id,a) values (613,49);
+insert into t (id,a) values (613,50);
+insert into t (id,a) values (613,51);
+insert into t (id,a) values (613,52);
+insert into t (id,a) values (613,53);
+insert into t (id,a) values (613,54);
+insert into t (id,a) values (613,55);
+insert into t (id,a) values (613,56);
+insert into t (id,a) values (613,57);
+insert into t (id,a) values (613,58);
+insert into t (id,a) values (613,59);
+insert into t (id,a) values (613,60);
+insert into t (id,a) values (613,61);
+insert into t (id,a) values (613,62);
+insert into t (id,a) values (613,63);
+insert into t (id,a) values (613,64);
+insert into t (id,a) values (613,65);
+insert into t (id,a) values (613,66);
+insert into t (id,a) values (613,67);
+insert into t (id,a) values (613,68);
+insert into t (id,a) values (613,69);
+insert into t (id,a) values (613,70);
+insert into t (id,a) values (613,71);
+insert into t (id,a) values (613,72);
+insert into t (id,a) values (613,73);
+insert into t (id,a) values (613,74);
+insert into t (id,a) values (613,75);
+insert into t (id,a) values (613,76);
+insert into t (id,a) values (613,77);
+insert into t (id,a) values (613,78);
+insert into t (id,a) values (613,79);
+insert into t (id,a) values (613,80);
+insert into t (id,a) values (613,81);
+insert into t (id,a) values (613,82);
+insert into t (id,a) values (613,83);
+insert into t (id,a) values (613,84);
+insert into t (id,a) values (613,85);
+insert into t (id,a) values (613,86);
+insert into t (id,a) values (613,87);
+insert into t (id,a) values (613,88);
+insert into t (id,a) values (613,89);
+insert into t (id,a) values (613,90);
+insert into t (id,a) values (613,91);
+insert into t (id,a) values (613,92);
+insert into t (id,a) values (613,93);
+insert into t (id,a) values (613,94);
+insert into t (id,a) values (613,95);
+insert into t (id,a) values (613,96);
+insert into t (id,a) values (613,97);
+insert into t (id,a) values (613,98);
+insert into t (id,a) values (613,99);
+insert into t (id,a) values (614,0);
+insert into t (id,a) values (614,1);
+insert into t (id,a) values (614,2);
+insert into t (id,a) values (614,3);
+insert into t (id,a) values (614,4);
+insert into t (id,a) values (614,5);
+insert into t (id,a) values (614,6);
+insert into t (id,a) values (614,7);
+insert into t (id,a) values (614,8);
+insert into t (id,a) values (614,9);
+insert into t (id,a) values (614,10);
+insert into t (id,a) values (614,11);
+insert into t (id,a) values (614,12);
+insert into t (id,a) values (614,13);
+insert into t (id,a) values (614,14);
+insert into t (id,a) values (614,15);
+insert into t (id,a) values (614,16);
+insert into t (id,a) values (614,17);
+insert into t (id,a) values (614,18);
+insert into t (id,a) values (614,19);
+insert into t (id,a) values (614,20);
+insert into t (id,a) values (614,21);
+insert into t (id,a) values (614,22);
+insert into t (id,a) values (614,23);
+insert into t (id,a) values (614,24);
+insert into t (id,a) values (614,25);
+insert into t (id,a) values (614,26);
+insert into t (id,a) values (614,27);
+insert into t (id,a) values (614,28);
+insert into t (id,a) values (614,29);
+insert into t (id,a) values (614,30);
+insert into t (id,a) values (614,31);
+insert into t (id,a) values (614,32);
+insert into t (id,a) values (614,33);
+insert into t (id,a) values (614,34);
+insert into t (id,a) values (614,35);
+insert into t (id,a) values (614,36);
+insert into t (id,a) values (614,37);
+insert into t (id,a) values (614,38);
+insert into t (id,a) values (614,39);
+insert into t (id,a) values (614,40);
+insert into t (id,a) values (614,41);
+insert into t (id,a) values (614,42);
+insert into t (id,a) values (614,43);
+insert into t (id,a) values (614,44);
+insert into t (id,a) values (614,45);
+insert into t (id,a) values (614,46);
+insert into t (id,a) values (614,47);
+insert into t (id,a) values (614,48);
+insert into t (id,a) values (614,49);
+insert into t (id,a) values (614,50);
+insert into t (id,a) values (614,51);
+insert into t (id,a) values (614,52);
+insert into t (id,a) values (614,53);
+insert into t (id,a) values (614,54);
+insert into t (id,a) values (614,55);
+insert into t (id,a) values (614,56);
+insert into t (id,a) values (614,57);
+insert into t (id,a) values (614,58);
+insert into t (id,a) values (614,59);
+insert into t (id,a) values (614,60);
+insert into t (id,a) values (614,61);
+insert into t (id,a) values (614,62);
+insert into t (id,a) values (614,63);
+insert into t (id,a) values (614,64);
+insert into t (id,a) values (614,65);
+insert into t (id,a) values (614,66);
+insert into t (id,a) values (614,67);
+insert into t (id,a) values (614,68);
+insert into t (id,a) values (614,69);
+insert into t (id,a) values (614,70);
+insert into t (id,a) values (614,71);
+insert into t (id,a) values (614,72);
+insert into t (id,a) values (614,73);
+insert into t (id,a) values (614,74);
+insert into t (id,a) values (614,75);
+insert into t (id,a) values (614,76);
+insert into t (id,a) values (614,77);
+insert into t (id,a) values (614,78);
+insert into t (id,a) values (614,79);
+insert into t (id,a) values (614,80);
+insert into t (id,a) values (614,81);
+insert into t (id,a) values (614,82);
+insert into t (id,a) values (614,83);
+insert into t (id,a) values (614,84);
+insert into t (id,a) values (614,85);
+insert into t (id,a) values (614,86);
+insert into t (id,a) values (614,87);
+insert into t (id,a) values (614,88);
+insert into t (id,a) values (614,89);
+insert into t (id,a) values (614,90);
+insert into t (id,a) values (614,91);
+insert into t (id,a) values (614,92);
+insert into t (id,a) values (614,93);
+insert into t (id,a) values (614,94);
+insert into t (id,a) values (614,95);
+insert into t (id,a) values (614,96);
+insert into t (id,a) values (614,97);
+insert into t (id,a) values (614,98);
+insert into t (id,a) values (614,99);
+insert into t (id,a) values (615,0);
+insert into t (id,a) values (615,1);
+insert into t (id,a) values (615,2);
+insert into t (id,a) values (615,3);
+insert into t (id,a) values (615,4);
+insert into t (id,a) values (615,5);
+insert into t (id,a) values (615,6);
+insert into t (id,a) values (615,7);
+insert into t (id,a) values (615,8);
+insert into t (id,a) values (615,9);
+insert into t (id,a) values (615,10);
+insert into t (id,a) values (615,11);
+insert into t (id,a) values (615,12);
+insert into t (id,a) values (615,13);
+insert into t (id,a) values (615,14);
+insert into t (id,a) values (615,15);
+insert into t (id,a) values (615,16);
+insert into t (id,a) values (615,17);
+insert into t (id,a) values (615,18);
+insert into t (id,a) values (615,19);
+insert into t (id,a) values (615,20);
+insert into t (id,a) values (615,21);
+insert into t (id,a) values (615,22);
+insert into t (id,a) values (615,23);
+insert into t (id,a) values (615,24);
+insert into t (id,a) values (615,25);
+insert into t (id,a) values (615,26);
+insert into t (id,a) values (615,27);
+insert into t (id,a) values (615,28);
+insert into t (id,a) values (615,29);
+insert into t (id,a) values (615,30);
+insert into t (id,a) values (615,31);
+insert into t (id,a) values (615,32);
+insert into t (id,a) values (615,33);
+insert into t (id,a) values (615,34);
+insert into t (id,a) values (615,35);
+insert into t (id,a) values (615,36);
+insert into t (id,a) values (615,37);
+insert into t (id,a) values (615,38);
+insert into t (id,a) values (615,39);
+insert into t (id,a) values (615,40);
+insert into t (id,a) values (615,41);
+insert into t (id,a) values (615,42);
+insert into t (id,a) values (615,43);
+insert into t (id,a) values (615,44);
+insert into t (id,a) values (615,45);
+insert into t (id,a) values (615,46);
+insert into t (id,a) values (615,47);
+insert into t (id,a) values (615,48);
+insert into t (id,a) values (615,49);
+insert into t (id,a) values (615,50);
+insert into t (id,a) values (615,51);
+insert into t (id,a) values (615,52);
+insert into t (id,a) values (615,53);
+insert into t (id,a) values (615,54);
+insert into t (id,a) values (615,55);
+insert into t (id,a) values (615,56);
+insert into t (id,a) values (615,57);
+insert into t (id,a) values (615,58);
+insert into t (id,a) values (615,59);
+insert into t (id,a) values (615,60);
+insert into t (id,a) values (615,61);
+insert into t (id,a) values (615,62);
+insert into t (id,a) values (615,63);
+insert into t (id,a) values (615,64);
+insert into t (id,a) values (615,65);
+insert into t (id,a) values (615,66);
+insert into t (id,a) values (615,67);
+insert into t (id,a) values (615,68);
+insert into t (id,a) values (615,69);
+insert into t (id,a) values (615,70);
+insert into t (id,a) values (615,71);
+insert into t (id,a) values (615,72);
+insert into t (id,a) values (615,73);
+insert into t (id,a) values (615,74);
+insert into t (id,a) values (615,75);
+insert into t (id,a) values (615,76);
+insert into t (id,a) values (615,77);
+insert into t (id,a) values (615,78);
+insert into t (id,a) values (615,79);
+insert into t (id,a) values (615,80);
+insert into t (id,a) values (615,81);
+insert into t (id,a) values (615,82);
+insert into t (id,a) values (615,83);
+insert into t (id,a) values (615,84);
+insert into t (id,a) values (615,85);
+insert into t (id,a) values (615,86);
+insert into t (id,a) values (615,87);
+insert into t (id,a) values (615,88);
+insert into t (id,a) values (615,89);
+insert into t (id,a) values (615,90);
+insert into t (id,a) values (615,91);
+insert into t (id,a) values (615,92);
+insert into t (id,a) values (615,93);
+insert into t (id,a) values (615,94);
+insert into t (id,a) values (615,95);
+insert into t (id,a) values (615,96);
+insert into t (id,a) values (615,97);
+insert into t (id,a) values (615,98);
+insert into t (id,a) values (615,99);
+insert into t (id,a) values (616,0);
+insert into t (id,a) values (616,1);
+insert into t (id,a) values (616,2);
+insert into t (id,a) values (616,3);
+insert into t (id,a) values (616,4);
+insert into t (id,a) values (616,5);
+insert into t (id,a) values (616,6);
+insert into t (id,a) values (616,7);
+insert into t (id,a) values (616,8);
+insert into t (id,a) values (616,9);
+insert into t (id,a) values (616,10);
+insert into t (id,a) values (616,11);
+insert into t (id,a) values (616,12);
+insert into t (id,a) values (616,13);
+insert into t (id,a) values (616,14);
+insert into t (id,a) values (616,15);
+insert into t (id,a) values (616,16);
+insert into t (id,a) values (616,17);
+insert into t (id,a) values (616,18);
+insert into t (id,a) values (616,19);
+insert into t (id,a) values (616,20);
+insert into t (id,a) values (616,21);
+insert into t (id,a) values (616,22);
+insert into t (id,a) values (616,23);
+insert into t (id,a) values (616,24);
+insert into t (id,a) values (616,25);
+insert into t (id,a) values (616,26);
+insert into t (id,a) values (616,27);
+insert into t (id,a) values (616,28);
+insert into t (id,a) values (616,29);
+insert into t (id,a) values (616,30);
+insert into t (id,a) values (616,31);
+insert into t (id,a) values (616,32);
+insert into t (id,a) values (616,33);
+insert into t (id,a) values (616,34);
+insert into t (id,a) values (616,35);
+insert into t (id,a) values (616,36);
+insert into t (id,a) values (616,37);
+insert into t (id,a) values (616,38);
+insert into t (id,a) values (616,39);
+insert into t (id,a) values (616,40);
+insert into t (id,a) values (616,41);
+insert into t (id,a) values (616,42);
+insert into t (id,a) values (616,43);
+insert into t (id,a) values (616,44);
+insert into t (id,a) values (616,45);
+insert into t (id,a) values (616,46);
+insert into t (id,a) values (616,47);
+insert into t (id,a) values (616,48);
+insert into t (id,a) values (616,49);
+insert into t (id,a) values (616,50);
+insert into t (id,a) values (616,51);
+insert into t (id,a) values (616,52);
+insert into t (id,a) values (616,53);
+insert into t (id,a) values (616,54);
+insert into t (id,a) values (616,55);
+insert into t (id,a) values (616,56);
+insert into t (id,a) values (616,57);
+insert into t (id,a) values (616,58);
+insert into t (id,a) values (616,59);
+insert into t (id,a) values (616,60);
+insert into t (id,a) values (616,61);
+insert into t (id,a) values (616,62);
+insert into t (id,a) values (616,63);
+insert into t (id,a) values (616,64);
+insert into t (id,a) values (616,65);
+insert into t (id,a) values (616,66);
+insert into t (id,a) values (616,67);
+insert into t (id,a) values (616,68);
+insert into t (id,a) values (616,69);
+insert into t (id,a) values (616,70);
+insert into t (id,a) values (616,71);
+insert into t (id,a) values (616,72);
+insert into t (id,a) values (616,73);
+insert into t (id,a) values (616,74);
+insert into t (id,a) values (616,75);
+insert into t (id,a) values (616,76);
+insert into t (id,a) values (616,77);
+insert into t (id,a) values (616,78);
+insert into t (id,a) values (616,79);
+insert into t (id,a) values (616,80);
+insert into t (id,a) values (616,81);
+insert into t (id,a) values (616,82);
+insert into t (id,a) values (616,83);
+insert into t (id,a) values (616,84);
+insert into t (id,a) values (616,85);
+insert into t (id,a) values (616,86);
+insert into t (id,a) values (616,87);
+insert into t (id,a) values (616,88);
+insert into t (id,a) values (616,89);
+insert into t (id,a) values (616,90);
+insert into t (id,a) values (616,91);
+insert into t (id,a) values (616,92);
+insert into t (id,a) values (616,93);
+insert into t (id,a) values (616,94);
+insert into t (id,a) values (616,95);
+insert into t (id,a) values (616,96);
+insert into t (id,a) values (616,97);
+insert into t (id,a) values (616,98);
+insert into t (id,a) values (616,99);
+insert into t (id,a) values (617,0);
+insert into t (id,a) values (617,1);
+insert into t (id,a) values (617,2);
+insert into t (id,a) values (617,3);
+insert into t (id,a) values (617,4);
+insert into t (id,a) values (617,5);
+insert into t (id,a) values (617,6);
+insert into t (id,a) values (617,7);
+insert into t (id,a) values (617,8);
+insert into t (id,a) values (617,9);
+insert into t (id,a) values (617,10);
+insert into t (id,a) values (617,11);
+insert into t (id,a) values (617,12);
+insert into t (id,a) values (617,13);
+insert into t (id,a) values (617,14);
+insert into t (id,a) values (617,15);
+insert into t (id,a) values (617,16);
+insert into t (id,a) values (617,17);
+insert into t (id,a) values (617,18);
+insert into t (id,a) values (617,19);
+insert into t (id,a) values (617,20);
+insert into t (id,a) values (617,21);
+insert into t (id,a) values (617,22);
+insert into t (id,a) values (617,23);
+insert into t (id,a) values (617,24);
+insert into t (id,a) values (617,25);
+insert into t (id,a) values (617,26);
+insert into t (id,a) values (617,27);
+insert into t (id,a) values (617,28);
+insert into t (id,a) values (617,29);
+insert into t (id,a) values (617,30);
+insert into t (id,a) values (617,31);
+insert into t (id,a) values (617,32);
+insert into t (id,a) values (617,33);
+insert into t (id,a) values (617,34);
+insert into t (id,a) values (617,35);
+insert into t (id,a) values (617,36);
+insert into t (id,a) values (617,37);
+insert into t (id,a) values (617,38);
+insert into t (id,a) values (617,39);
+insert into t (id,a) values (617,40);
+insert into t (id,a) values (617,41);
+insert into t (id,a) values (617,42);
+insert into t (id,a) values (617,43);
+insert into t (id,a) values (617,44);
+insert into t (id,a) values (617,45);
+insert into t (id,a) values (617,46);
+insert into t (id,a) values (617,47);
+insert into t (id,a) values (617,48);
+insert into t (id,a) values (617,49);
+insert into t (id,a) values (617,50);
+insert into t (id,a) values (617,51);
+insert into t (id,a) values (617,52);
+insert into t (id,a) values (617,53);
+insert into t (id,a) values (617,54);
+insert into t (id,a) values (617,55);
+insert into t (id,a) values (617,56);
+insert into t (id,a) values (617,57);
+insert into t (id,a) values (617,58);
+insert into t (id,a) values (617,59);
+insert into t (id,a) values (617,60);
+insert into t (id,a) values (617,61);
+insert into t (id,a) values (617,62);
+insert into t (id,a) values (617,63);
+insert into t (id,a) values (617,64);
+insert into t (id,a) values (617,65);
+insert into t (id,a) values (617,66);
+insert into t (id,a) values (617,67);
+insert into t (id,a) values (617,68);
+insert into t (id,a) values (617,69);
+insert into t (id,a) values (617,70);
+insert into t (id,a) values (617,71);
+insert into t (id,a) values (617,72);
+insert into t (id,a) values (617,73);
+insert into t (id,a) values (617,74);
+insert into t (id,a) values (617,75);
+insert into t (id,a) values (617,76);
+insert into t (id,a) values (617,77);
+insert into t (id,a) values (617,78);
+insert into t (id,a) values (617,79);
+insert into t (id,a) values (617,80);
+insert into t (id,a) values (617,81);
+insert into t (id,a) values (617,82);
+insert into t (id,a) values (617,83);
+insert into t (id,a) values (617,84);
+insert into t (id,a) values (617,85);
+insert into t (id,a) values (617,86);
+insert into t (id,a) values (617,87);
+insert into t (id,a) values (617,88);
+insert into t (id,a) values (617,89);
+insert into t (id,a) values (617,90);
+insert into t (id,a) values (617,91);
+insert into t (id,a) values (617,92);
+insert into t (id,a) values (617,93);
+insert into t (id,a) values (617,94);
+insert into t (id,a) values (617,95);
+insert into t (id,a) values (617,96);
+insert into t (id,a) values (617,97);
+insert into t (id,a) values (617,98);
+insert into t (id,a) values (617,99);
+insert into t (id,a) values (618,0);
+insert into t (id,a) values (618,1);
+insert into t (id,a) values (618,2);
+insert into t (id,a) values (618,3);
+insert into t (id,a) values (618,4);
+insert into t (id,a) values (618,5);
+insert into t (id,a) values (618,6);
+insert into t (id,a) values (618,7);
+insert into t (id,a) values (618,8);
+insert into t (id,a) values (618,9);
+insert into t (id,a) values (618,10);
+insert into t (id,a) values (618,11);
+insert into t (id,a) values (618,12);
+insert into t (id,a) values (618,13);
+insert into t (id,a) values (618,14);
+insert into t (id,a) values (618,15);
+insert into t (id,a) values (618,16);
+insert into t (id,a) values (618,17);
+insert into t (id,a) values (618,18);
+insert into t (id,a) values (618,19);
+insert into t (id,a) values (618,20);
+insert into t (id,a) values (618,21);
+insert into t (id,a) values (618,22);
+insert into t (id,a) values (618,23);
+insert into t (id,a) values (618,24);
+insert into t (id,a) values (618,25);
+insert into t (id,a) values (618,26);
+insert into t (id,a) values (618,27);
+insert into t (id,a) values (618,28);
+insert into t (id,a) values (618,29);
+insert into t (id,a) values (618,30);
+insert into t (id,a) values (618,31);
+insert into t (id,a) values (618,32);
+insert into t (id,a) values (618,33);
+insert into t (id,a) values (618,34);
+insert into t (id,a) values (618,35);
+insert into t (id,a) values (618,36);
+insert into t (id,a) values (618,37);
+insert into t (id,a) values (618,38);
+insert into t (id,a) values (618,39);
+insert into t (id,a) values (618,40);
+insert into t (id,a) values (618,41);
+insert into t (id,a) values (618,42);
+insert into t (id,a) values (618,43);
+insert into t (id,a) values (618,44);
+insert into t (id,a) values (618,45);
+insert into t (id,a) values (618,46);
+insert into t (id,a) values (618,47);
+insert into t (id,a) values (618,48);
+insert into t (id,a) values (618,49);
+insert into t (id,a) values (618,50);
+insert into t (id,a) values (618,51);
+insert into t (id,a) values (618,52);
+insert into t (id,a) values (618,53);
+insert into t (id,a) values (618,54);
+insert into t (id,a) values (618,55);
+insert into t (id,a) values (618,56);
+insert into t (id,a) values (618,57);
+insert into t (id,a) values (618,58);
+insert into t (id,a) values (618,59);
+insert into t (id,a) values (618,60);
+insert into t (id,a) values (618,61);
+insert into t (id,a) values (618,62);
+insert into t (id,a) values (618,63);
+insert into t (id,a) values (618,64);
+insert into t (id,a) values (618,65);
+insert into t (id,a) values (618,66);
+insert into t (id,a) values (618,67);
+insert into t (id,a) values (618,68);
+insert into t (id,a) values (618,69);
+insert into t (id,a) values (618,70);
+insert into t (id,a) values (618,71);
+insert into t (id,a) values (618,72);
+insert into t (id,a) values (618,73);
+insert into t (id,a) values (618,74);
+insert into t (id,a) values (618,75);
+insert into t (id,a) values (618,76);
+insert into t (id,a) values (618,77);
+insert into t (id,a) values (618,78);
+insert into t (id,a) values (618,79);
+insert into t (id,a) values (618,80);
+insert into t (id,a) values (618,81);
+insert into t (id,a) values (618,82);
+insert into t (id,a) values (618,83);
+insert into t (id,a) values (618,84);
+insert into t (id,a) values (618,85);
+insert into t (id,a) values (618,86);
+insert into t (id,a) values (618,87);
+insert into t (id,a) values (618,88);
+insert into t (id,a) values (618,89);
+insert into t (id,a) values (618,90);
+insert into t (id,a) values (618,91);
+insert into t (id,a) values (618,92);
+insert into t (id,a) values (618,93);
+insert into t (id,a) values (618,94);
+insert into t (id,a) values (618,95);
+insert into t (id,a) values (618,96);
+insert into t (id,a) values (618,97);
+insert into t (id,a) values (618,98);
+insert into t (id,a) values (618,99);
+insert into t (id,a) values (619,0);
+insert into t (id,a) values (619,1);
+insert into t (id,a) values (619,2);
+insert into t (id,a) values (619,3);
+insert into t (id,a) values (619,4);
+insert into t (id,a) values (619,5);
+insert into t (id,a) values (619,6);
+insert into t (id,a) values (619,7);
+insert into t (id,a) values (619,8);
+insert into t (id,a) values (619,9);
+insert into t (id,a) values (619,10);
+insert into t (id,a) values (619,11);
+insert into t (id,a) values (619,12);
+insert into t (id,a) values (619,13);
+insert into t (id,a) values (619,14);
+insert into t (id,a) values (619,15);
+insert into t (id,a) values (619,16);
+insert into t (id,a) values (619,17);
+insert into t (id,a) values (619,18);
+insert into t (id,a) values (619,19);
+insert into t (id,a) values (619,20);
+insert into t (id,a) values (619,21);
+insert into t (id,a) values (619,22);
+insert into t (id,a) values (619,23);
+insert into t (id,a) values (619,24);
+insert into t (id,a) values (619,25);
+insert into t (id,a) values (619,26);
+insert into t (id,a) values (619,27);
+insert into t (id,a) values (619,28);
+insert into t (id,a) values (619,29);
+insert into t (id,a) values (619,30);
+insert into t (id,a) values (619,31);
+insert into t (id,a) values (619,32);
+insert into t (id,a) values (619,33);
+insert into t (id,a) values (619,34);
+insert into t (id,a) values (619,35);
+insert into t (id,a) values (619,36);
+insert into t (id,a) values (619,37);
+insert into t (id,a) values (619,38);
+insert into t (id,a) values (619,39);
+insert into t (id,a) values (619,40);
+insert into t (id,a) values (619,41);
+insert into t (id,a) values (619,42);
+insert into t (id,a) values (619,43);
+insert into t (id,a) values (619,44);
+insert into t (id,a) values (619,45);
+insert into t (id,a) values (619,46);
+insert into t (id,a) values (619,47);
+insert into t (id,a) values (619,48);
+insert into t (id,a) values (619,49);
+insert into t (id,a) values (619,50);
+insert into t (id,a) values (619,51);
+insert into t (id,a) values (619,52);
+insert into t (id,a) values (619,53);
+insert into t (id,a) values (619,54);
+insert into t (id,a) values (619,55);
+insert into t (id,a) values (619,56);
+insert into t (id,a) values (619,57);
+insert into t (id,a) values (619,58);
+insert into t (id,a) values (619,59);
+insert into t (id,a) values (619,60);
+insert into t (id,a) values (619,61);
+insert into t (id,a) values (619,62);
+insert into t (id,a) values (619,63);
+insert into t (id,a) values (619,64);
+insert into t (id,a) values (619,65);
+insert into t (id,a) values (619,66);
+insert into t (id,a) values (619,67);
+insert into t (id,a) values (619,68);
+insert into t (id,a) values (619,69);
+insert into t (id,a) values (619,70);
+insert into t (id,a) values (619,71);
+insert into t (id,a) values (619,72);
+insert into t (id,a) values (619,73);
+insert into t (id,a) values (619,74);
+insert into t (id,a) values (619,75);
+insert into t (id,a) values (619,76);
+insert into t (id,a) values (619,77);
+insert into t (id,a) values (619,78);
+insert into t (id,a) values (619,79);
+insert into t (id,a) values (619,80);
+insert into t (id,a) values (619,81);
+insert into t (id,a) values (619,82);
+insert into t (id,a) values (619,83);
+insert into t (id,a) values (619,84);
+insert into t (id,a) values (619,85);
+insert into t (id,a) values (619,86);
+insert into t (id,a) values (619,87);
+insert into t (id,a) values (619,88);
+insert into t (id,a) values (619,89);
+insert into t (id,a) values (619,90);
+insert into t (id,a) values (619,91);
+insert into t (id,a) values (619,92);
+insert into t (id,a) values (619,93);
+insert into t (id,a) values (619,94);
+insert into t (id,a) values (619,95);
+insert into t (id,a) values (619,96);
+insert into t (id,a) values (619,97);
+insert into t (id,a) values (619,98);
+insert into t (id,a) values (619,99);
+insert into t (id,a) values (620,0);
+insert into t (id,a) values (620,1);
+insert into t (id,a) values (620,2);
+insert into t (id,a) values (620,3);
+insert into t (id,a) values (620,4);
+insert into t (id,a) values (620,5);
+insert into t (id,a) values (620,6);
+insert into t (id,a) values (620,7);
+insert into t (id,a) values (620,8);
+insert into t (id,a) values (620,9);
+insert into t (id,a) values (620,10);
+insert into t (id,a) values (620,11);
+insert into t (id,a) values (620,12);
+insert into t (id,a) values (620,13);
+insert into t (id,a) values (620,14);
+insert into t (id,a) values (620,15);
+insert into t (id,a) values (620,16);
+insert into t (id,a) values (620,17);
+insert into t (id,a) values (620,18);
+insert into t (id,a) values (620,19);
+insert into t (id,a) values (620,20);
+insert into t (id,a) values (620,21);
+insert into t (id,a) values (620,22);
+insert into t (id,a) values (620,23);
+insert into t (id,a) values (620,24);
+insert into t (id,a) values (620,25);
+insert into t (id,a) values (620,26);
+insert into t (id,a) values (620,27);
+insert into t (id,a) values (620,28);
+insert into t (id,a) values (620,29);
+insert into t (id,a) values (620,30);
+insert into t (id,a) values (620,31);
+insert into t (id,a) values (620,32);
+insert into t (id,a) values (620,33);
+insert into t (id,a) values (620,34);
+insert into t (id,a) values (620,35);
+insert into t (id,a) values (620,36);
+insert into t (id,a) values (620,37);
+insert into t (id,a) values (620,38);
+insert into t (id,a) values (620,39);
+insert into t (id,a) values (620,40);
+insert into t (id,a) values (620,41);
+insert into t (id,a) values (620,42);
+insert into t (id,a) values (620,43);
+insert into t (id,a) values (620,44);
+insert into t (id,a) values (620,45);
+insert into t (id,a) values (620,46);
+insert into t (id,a) values (620,47);
+insert into t (id,a) values (620,48);
+insert into t (id,a) values (620,49);
+insert into t (id,a) values (620,50);
+insert into t (id,a) values (620,51);
+insert into t (id,a) values (620,52);
+insert into t (id,a) values (620,53);
+insert into t (id,a) values (620,54);
+insert into t (id,a) values (620,55);
+insert into t (id,a) values (620,56);
+insert into t (id,a) values (620,57);
+insert into t (id,a) values (620,58);
+insert into t (id,a) values (620,59);
+insert into t (id,a) values (620,60);
+insert into t (id,a) values (620,61);
+insert into t (id,a) values (620,62);
+insert into t (id,a) values (620,63);
+insert into t (id,a) values (620,64);
+insert into t (id,a) values (620,65);
+insert into t (id,a) values (620,66);
+insert into t (id,a) values (620,67);
+insert into t (id,a) values (620,68);
+insert into t (id,a) values (620,69);
+insert into t (id,a) values (620,70);
+insert into t (id,a) values (620,71);
+insert into t (id,a) values (620,72);
+insert into t (id,a) values (620,73);
+insert into t (id,a) values (620,74);
+insert into t (id,a) values (620,75);
+insert into t (id,a) values (620,76);
+insert into t (id,a) values (620,77);
+insert into t (id,a) values (620,78);
+insert into t (id,a) values (620,79);
+insert into t (id,a) values (620,80);
+insert into t (id,a) values (620,81);
+insert into t (id,a) values (620,82);
+insert into t (id,a) values (620,83);
+insert into t (id,a) values (620,84);
+insert into t (id,a) values (620,85);
+insert into t (id,a) values (620,86);
+insert into t (id,a) values (620,87);
+insert into t (id,a) values (620,88);
+insert into t (id,a) values (620,89);
+insert into t (id,a) values (620,90);
+insert into t (id,a) values (620,91);
+insert into t (id,a) values (620,92);
+insert into t (id,a) values (620,93);
+insert into t (id,a) values (620,94);
+insert into t (id,a) values (620,95);
+insert into t (id,a) values (620,96);
+insert into t (id,a) values (620,97);
+insert into t (id,a) values (620,98);
+insert into t (id,a) values (620,99);
+insert into t (id,a) values (621,0);
+insert into t (id,a) values (621,1);
+insert into t (id,a) values (621,2);
+insert into t (id,a) values (621,3);
+insert into t (id,a) values (621,4);
+insert into t (id,a) values (621,5);
+insert into t (id,a) values (621,6);
+insert into t (id,a) values (621,7);
+insert into t (id,a) values (621,8);
+insert into t (id,a) values (621,9);
+insert into t (id,a) values (621,10);
+insert into t (id,a) values (621,11);
+insert into t (id,a) values (621,12);
+insert into t (id,a) values (621,13);
+insert into t (id,a) values (621,14);
+insert into t (id,a) values (621,15);
+insert into t (id,a) values (621,16);
+insert into t (id,a) values (621,17);
+insert into t (id,a) values (621,18);
+insert into t (id,a) values (621,19);
+insert into t (id,a) values (621,20);
+insert into t (id,a) values (621,21);
+insert into t (id,a) values (621,22);
+insert into t (id,a) values (621,23);
+insert into t (id,a) values (621,24);
+insert into t (id,a) values (621,25);
+insert into t (id,a) values (621,26);
+insert into t (id,a) values (621,27);
+insert into t (id,a) values (621,28);
+insert into t (id,a) values (621,29);
+insert into t (id,a) values (621,30);
+insert into t (id,a) values (621,31);
+insert into t (id,a) values (621,32);
+insert into t (id,a) values (621,33);
+insert into t (id,a) values (621,34);
+insert into t (id,a) values (621,35);
+insert into t (id,a) values (621,36);
+insert into t (id,a) values (621,37);
+insert into t (id,a) values (621,38);
+insert into t (id,a) values (621,39);
+insert into t (id,a) values (621,40);
+insert into t (id,a) values (621,41);
+insert into t (id,a) values (621,42);
+insert into t (id,a) values (621,43);
+insert into t (id,a) values (621,44);
+insert into t (id,a) values (621,45);
+insert into t (id,a) values (621,46);
+insert into t (id,a) values (621,47);
+insert into t (id,a) values (621,48);
+insert into t (id,a) values (621,49);
+insert into t (id,a) values (621,50);
+insert into t (id,a) values (621,51);
+insert into t (id,a) values (621,52);
+insert into t (id,a) values (621,53);
+insert into t (id,a) values (621,54);
+insert into t (id,a) values (621,55);
+insert into t (id,a) values (621,56);
+insert into t (id,a) values (621,57);
+insert into t (id,a) values (621,58);
+insert into t (id,a) values (621,59);
+insert into t (id,a) values (621,60);
+insert into t (id,a) values (621,61);
+insert into t (id,a) values (621,62);
+insert into t (id,a) values (621,63);
+insert into t (id,a) values (621,64);
+insert into t (id,a) values (621,65);
+insert into t (id,a) values (621,66);
+insert into t (id,a) values (621,67);
+insert into t (id,a) values (621,68);
+insert into t (id,a) values (621,69);
+insert into t (id,a) values (621,70);
+insert into t (id,a) values (621,71);
+insert into t (id,a) values (621,72);
+insert into t (id,a) values (621,73);
+insert into t (id,a) values (621,74);
+insert into t (id,a) values (621,75);
+insert into t (id,a) values (621,76);
+insert into t (id,a) values (621,77);
+insert into t (id,a) values (621,78);
+insert into t (id,a) values (621,79);
+insert into t (id,a) values (621,80);
+insert into t (id,a) values (621,81);
+insert into t (id,a) values (621,82);
+insert into t (id,a) values (621,83);
+insert into t (id,a) values (621,84);
+insert into t (id,a) values (621,85);
+insert into t (id,a) values (621,86);
+insert into t (id,a) values (621,87);
+insert into t (id,a) values (621,88);
+insert into t (id,a) values (621,89);
+insert into t (id,a) values (621,90);
+insert into t (id,a) values (621,91);
+insert into t (id,a) values (621,92);
+insert into t (id,a) values (621,93);
+insert into t (id,a) values (621,94);
+insert into t (id,a) values (621,95);
+insert into t (id,a) values (621,96);
+insert into t (id,a) values (621,97);
+insert into t (id,a) values (621,98);
+insert into t (id,a) values (621,99);
+insert into t (id,a) values (622,0);
+insert into t (id,a) values (622,1);
+insert into t (id,a) values (622,2);
+insert into t (id,a) values (622,3);
+insert into t (id,a) values (622,4);
+insert into t (id,a) values (622,5);
+insert into t (id,a) values (622,6);
+insert into t (id,a) values (622,7);
+insert into t (id,a) values (622,8);
+insert into t (id,a) values (622,9);
+insert into t (id,a) values (622,10);
+insert into t (id,a) values (622,11);
+insert into t (id,a) values (622,12);
+insert into t (id,a) values (622,13);
+insert into t (id,a) values (622,14);
+insert into t (id,a) values (622,15);
+insert into t (id,a) values (622,16);
+insert into t (id,a) values (622,17);
+insert into t (id,a) values (622,18);
+insert into t (id,a) values (622,19);
+insert into t (id,a) values (622,20);
+insert into t (id,a) values (622,21);
+insert into t (id,a) values (622,22);
+insert into t (id,a) values (622,23);
+insert into t (id,a) values (622,24);
+insert into t (id,a) values (622,25);
+insert into t (id,a) values (622,26);
+insert into t (id,a) values (622,27);
+insert into t (id,a) values (622,28);
+insert into t (id,a) values (622,29);
+insert into t (id,a) values (622,30);
+insert into t (id,a) values (622,31);
+insert into t (id,a) values (622,32);
+insert into t (id,a) values (622,33);
+insert into t (id,a) values (622,34);
+insert into t (id,a) values (622,35);
+insert into t (id,a) values (622,36);
+insert into t (id,a) values (622,37);
+insert into t (id,a) values (622,38);
+insert into t (id,a) values (622,39);
+insert into t (id,a) values (622,40);
+insert into t (id,a) values (622,41);
+insert into t (id,a) values (622,42);
+insert into t (id,a) values (622,43);
+insert into t (id,a) values (622,44);
+insert into t (id,a) values (622,45);
+insert into t (id,a) values (622,46);
+insert into t (id,a) values (622,47);
+insert into t (id,a) values (622,48);
+insert into t (id,a) values (622,49);
+insert into t (id,a) values (622,50);
+insert into t (id,a) values (622,51);
+insert into t (id,a) values (622,52);
+insert into t (id,a) values (622,53);
+insert into t (id,a) values (622,54);
+insert into t (id,a) values (622,55);
+insert into t (id,a) values (622,56);
+insert into t (id,a) values (622,57);
+insert into t (id,a) values (622,58);
+insert into t (id,a) values (622,59);
+insert into t (id,a) values (622,60);
+insert into t (id,a) values (622,61);
+insert into t (id,a) values (622,62);
+insert into t (id,a) values (622,63);
+insert into t (id,a) values (622,64);
+insert into t (id,a) values (622,65);
+insert into t (id,a) values (622,66);
+insert into t (id,a) values (622,67);
+insert into t (id,a) values (622,68);
+insert into t (id,a) values (622,69);
+insert into t (id,a) values (622,70);
+insert into t (id,a) values (622,71);
+insert into t (id,a) values (622,72);
+insert into t (id,a) values (622,73);
+insert into t (id,a) values (622,74);
+insert into t (id,a) values (622,75);
+insert into t (id,a) values (622,76);
+insert into t (id,a) values (622,77);
+insert into t (id,a) values (622,78);
+insert into t (id,a) values (622,79);
+insert into t (id,a) values (622,80);
+insert into t (id,a) values (622,81);
+insert into t (id,a) values (622,82);
+insert into t (id,a) values (622,83);
+insert into t (id,a) values (622,84);
+insert into t (id,a) values (622,85);
+insert into t (id,a) values (622,86);
+insert into t (id,a) values (622,87);
+insert into t (id,a) values (622,88);
+insert into t (id,a) values (622,89);
+insert into t (id,a) values (622,90);
+insert into t (id,a) values (622,91);
+insert into t (id,a) values (622,92);
+insert into t (id,a) values (622,93);
+insert into t (id,a) values (622,94);
+insert into t (id,a) values (622,95);
+insert into t (id,a) values (622,96);
+insert into t (id,a) values (622,97);
+insert into t (id,a) values (622,98);
+insert into t (id,a) values (622,99);
+insert into t (id,a) values (623,0);
+insert into t (id,a) values (623,1);
+insert into t (id,a) values (623,2);
+insert into t (id,a) values (623,3);
+insert into t (id,a) values (623,4);
+insert into t (id,a) values (623,5);
+insert into t (id,a) values (623,6);
+insert into t (id,a) values (623,7);
+insert into t (id,a) values (623,8);
+insert into t (id,a) values (623,9);
+insert into t (id,a) values (623,10);
+insert into t (id,a) values (623,11);
+insert into t (id,a) values (623,12);
+insert into t (id,a) values (623,13);
+insert into t (id,a) values (623,14);
+insert into t (id,a) values (623,15);
+insert into t (id,a) values (623,16);
+insert into t (id,a) values (623,17);
+insert into t (id,a) values (623,18);
+insert into t (id,a) values (623,19);
+insert into t (id,a) values (623,20);
+insert into t (id,a) values (623,21);
+insert into t (id,a) values (623,22);
+insert into t (id,a) values (623,23);
+insert into t (id,a) values (623,24);
+insert into t (id,a) values (623,25);
+insert into t (id,a) values (623,26);
+insert into t (id,a) values (623,27);
+insert into t (id,a) values (623,28);
+insert into t (id,a) values (623,29);
+insert into t (id,a) values (623,30);
+insert into t (id,a) values (623,31);
+insert into t (id,a) values (623,32);
+insert into t (id,a) values (623,33);
+insert into t (id,a) values (623,34);
+insert into t (id,a) values (623,35);
+insert into t (id,a) values (623,36);
+insert into t (id,a) values (623,37);
+insert into t (id,a) values (623,38);
+insert into t (id,a) values (623,39);
+insert into t (id,a) values (623,40);
+insert into t (id,a) values (623,41);
+insert into t (id,a) values (623,42);
+insert into t (id,a) values (623,43);
+insert into t (id,a) values (623,44);
+insert into t (id,a) values (623,45);
+insert into t (id,a) values (623,46);
+insert into t (id,a) values (623,47);
+insert into t (id,a) values (623,48);
+insert into t (id,a) values (623,49);
+insert into t (id,a) values (623,50);
+insert into t (id,a) values (623,51);
+insert into t (id,a) values (623,52);
+insert into t (id,a) values (623,53);
+insert into t (id,a) values (623,54);
+insert into t (id,a) values (623,55);
+insert into t (id,a) values (623,56);
+insert into t (id,a) values (623,57);
+insert into t (id,a) values (623,58);
+insert into t (id,a) values (623,59);
+insert into t (id,a) values (623,60);
+insert into t (id,a) values (623,61);
+insert into t (id,a) values (623,62);
+insert into t (id,a) values (623,63);
+insert into t (id,a) values (623,64);
+insert into t (id,a) values (623,65);
+insert into t (id,a) values (623,66);
+insert into t (id,a) values (623,67);
+insert into t (id,a) values (623,68);
+insert into t (id,a) values (623,69);
+insert into t (id,a) values (623,70);
+insert into t (id,a) values (623,71);
+insert into t (id,a) values (623,72);
+insert into t (id,a) values (623,73);
+insert into t (id,a) values (623,74);
+insert into t (id,a) values (623,75);
+insert into t (id,a) values (623,76);
+insert into t (id,a) values (623,77);
+insert into t (id,a) values (623,78);
+insert into t (id,a) values (623,79);
+insert into t (id,a) values (623,80);
+insert into t (id,a) values (623,81);
+insert into t (id,a) values (623,82);
+insert into t (id,a) values (623,83);
+insert into t (id,a) values (623,84);
+insert into t (id,a) values (623,85);
+insert into t (id,a) values (623,86);
+insert into t (id,a) values (623,87);
+insert into t (id,a) values (623,88);
+insert into t (id,a) values (623,89);
+insert into t (id,a) values (623,90);
+insert into t (id,a) values (623,91);
+insert into t (id,a) values (623,92);
+insert into t (id,a) values (623,93);
+insert into t (id,a) values (623,94);
+insert into t (id,a) values (623,95);
+insert into t (id,a) values (623,96);
+insert into t (id,a) values (623,97);
+insert into t (id,a) values (623,98);
+insert into t (id,a) values (623,99);
+insert into t (id,a) values (624,0);
+insert into t (id,a) values (624,1);
+insert into t (id,a) values (624,2);
+insert into t (id,a) values (624,3);
+insert into t (id,a) values (624,4);
+insert into t (id,a) values (624,5);
+insert into t (id,a) values (624,6);
+insert into t (id,a) values (624,7);
+insert into t (id,a) values (624,8);
+insert into t (id,a) values (624,9);
+insert into t (id,a) values (624,10);
+insert into t (id,a) values (624,11);
+insert into t (id,a) values (624,12);
+insert into t (id,a) values (624,13);
+insert into t (id,a) values (624,14);
+insert into t (id,a) values (624,15);
+insert into t (id,a) values (624,16);
+insert into t (id,a) values (624,17);
+insert into t (id,a) values (624,18);
+insert into t (id,a) values (624,19);
+insert into t (id,a) values (624,20);
+insert into t (id,a) values (624,21);
+insert into t (id,a) values (624,22);
+insert into t (id,a) values (624,23);
+insert into t (id,a) values (624,24);
+insert into t (id,a) values (624,25);
+insert into t (id,a) values (624,26);
+insert into t (id,a) values (624,27);
+insert into t (id,a) values (624,28);
+insert into t (id,a) values (624,29);
+insert into t (id,a) values (624,30);
+insert into t (id,a) values (624,31);
+insert into t (id,a) values (624,32);
+insert into t (id,a) values (624,33);
+insert into t (id,a) values (624,34);
+insert into t (id,a) values (624,35);
+insert into t (id,a) values (624,36);
+insert into t (id,a) values (624,37);
+insert into t (id,a) values (624,38);
+insert into t (id,a) values (624,39);
+insert into t (id,a) values (624,40);
+insert into t (id,a) values (624,41);
+insert into t (id,a) values (624,42);
+insert into t (id,a) values (624,43);
+insert into t (id,a) values (624,44);
+insert into t (id,a) values (624,45);
+insert into t (id,a) values (624,46);
+insert into t (id,a) values (624,47);
+insert into t (id,a) values (624,48);
+insert into t (id,a) values (624,49);
+insert into t (id,a) values (624,50);
+insert into t (id,a) values (624,51);
+insert into t (id,a) values (624,52);
+insert into t (id,a) values (624,53);
+insert into t (id,a) values (624,54);
+insert into t (id,a) values (624,55);
+insert into t (id,a) values (624,56);
+insert into t (id,a) values (624,57);
+insert into t (id,a) values (624,58);
+insert into t (id,a) values (624,59);
+insert into t (id,a) values (624,60);
+insert into t (id,a) values (624,61);
+insert into t (id,a) values (624,62);
+insert into t (id,a) values (624,63);
+insert into t (id,a) values (624,64);
+insert into t (id,a) values (624,65);
+insert into t (id,a) values (624,66);
+insert into t (id,a) values (624,67);
+insert into t (id,a) values (624,68);
+insert into t (id,a) values (624,69);
+insert into t (id,a) values (624,70);
+insert into t (id,a) values (624,71);
+insert into t (id,a) values (624,72);
+insert into t (id,a) values (624,73);
+insert into t (id,a) values (624,74);
+insert into t (id,a) values (624,75);
+insert into t (id,a) values (624,76);
+insert into t (id,a) values (624,77);
+insert into t (id,a) values (624,78);
+insert into t (id,a) values (624,79);
+insert into t (id,a) values (624,80);
+insert into t (id,a) values (624,81);
+insert into t (id,a) values (624,82);
+insert into t (id,a) values (624,83);
+insert into t (id,a) values (624,84);
+insert into t (id,a) values (624,85);
+insert into t (id,a) values (624,86);
+insert into t (id,a) values (624,87);
+insert into t (id,a) values (624,88);
+insert into t (id,a) values (624,89);
+insert into t (id,a) values (624,90);
+insert into t (id,a) values (624,91);
+insert into t (id,a) values (624,92);
+insert into t (id,a) values (624,93);
+insert into t (id,a) values (624,94);
+insert into t (id,a) values (624,95);
+insert into t (id,a) values (624,96);
+insert into t (id,a) values (624,97);
+insert into t (id,a) values (624,98);
+insert into t (id,a) values (624,99);
+insert into t (id,a) values (625,0);
+insert into t (id,a) values (625,1);
+insert into t (id,a) values (625,2);
+insert into t (id,a) values (625,3);
+insert into t (id,a) values (625,4);
+insert into t (id,a) values (625,5);
+insert into t (id,a) values (625,6);
+insert into t (id,a) values (625,7);
+insert into t (id,a) values (625,8);
+insert into t (id,a) values (625,9);
+insert into t (id,a) values (625,10);
+insert into t (id,a) values (625,11);
+insert into t (id,a) values (625,12);
+insert into t (id,a) values (625,13);
+insert into t (id,a) values (625,14);
+insert into t (id,a) values (625,15);
+insert into t (id,a) values (625,16);
+insert into t (id,a) values (625,17);
+insert into t (id,a) values (625,18);
+insert into t (id,a) values (625,19);
+insert into t (id,a) values (625,20);
+insert into t (id,a) values (625,21);
+insert into t (id,a) values (625,22);
+insert into t (id,a) values (625,23);
+insert into t (id,a) values (625,24);
+insert into t (id,a) values (625,25);
+insert into t (id,a) values (625,26);
+insert into t (id,a) values (625,27);
+insert into t (id,a) values (625,28);
+insert into t (id,a) values (625,29);
+insert into t (id,a) values (625,30);
+insert into t (id,a) values (625,31);
+insert into t (id,a) values (625,32);
+insert into t (id,a) values (625,33);
+insert into t (id,a) values (625,34);
+insert into t (id,a) values (625,35);
+insert into t (id,a) values (625,36);
+insert into t (id,a) values (625,37);
+insert into t (id,a) values (625,38);
+insert into t (id,a) values (625,39);
+insert into t (id,a) values (625,40);
+insert into t (id,a) values (625,41);
+insert into t (id,a) values (625,42);
+insert into t (id,a) values (625,43);
+insert into t (id,a) values (625,44);
+insert into t (id,a) values (625,45);
+insert into t (id,a) values (625,46);
+insert into t (id,a) values (625,47);
+insert into t (id,a) values (625,48);
+insert into t (id,a) values (625,49);
+insert into t (id,a) values (625,50);
+insert into t (id,a) values (625,51);
+insert into t (id,a) values (625,52);
+insert into t (id,a) values (625,53);
+insert into t (id,a) values (625,54);
+insert into t (id,a) values (625,55);
+insert into t (id,a) values (625,56);
+insert into t (id,a) values (625,57);
+insert into t (id,a) values (625,58);
+insert into t (id,a) values (625,59);
+insert into t (id,a) values (625,60);
+insert into t (id,a) values (625,61);
+insert into t (id,a) values (625,62);
+insert into t (id,a) values (625,63);
+insert into t (id,a) values (625,64);
+insert into t (id,a) values (625,65);
+insert into t (id,a) values (625,66);
+insert into t (id,a) values (625,67);
+insert into t (id,a) values (625,68);
+insert into t (id,a) values (625,69);
+insert into t (id,a) values (625,70);
+insert into t (id,a) values (625,71);
+insert into t (id,a) values (625,72);
+insert into t (id,a) values (625,73);
+insert into t (id,a) values (625,74);
+insert into t (id,a) values (625,75);
+insert into t (id,a) values (625,76);
+insert into t (id,a) values (625,77);
+insert into t (id,a) values (625,78);
+insert into t (id,a) values (625,79);
+insert into t (id,a) values (625,80);
+insert into t (id,a) values (625,81);
+insert into t (id,a) values (625,82);
+insert into t (id,a) values (625,83);
+insert into t (id,a) values (625,84);
+insert into t (id,a) values (625,85);
+insert into t (id,a) values (625,86);
+insert into t (id,a) values (625,87);
+insert into t (id,a) values (625,88);
+insert into t (id,a) values (625,89);
+insert into t (id,a) values (625,90);
+insert into t (id,a) values (625,91);
+insert into t (id,a) values (625,92);
+insert into t (id,a) values (625,93);
+insert into t (id,a) values (625,94);
+insert into t (id,a) values (625,95);
+insert into t (id,a) values (625,96);
+insert into t (id,a) values (625,97);
+insert into t (id,a) values (625,98);
+insert into t (id,a) values (625,99);
+insert into t (id,a) values (626,0);
+insert into t (id,a) values (626,1);
+insert into t (id,a) values (626,2);
+insert into t (id,a) values (626,3);
+insert into t (id,a) values (626,4);
+insert into t (id,a) values (626,5);
+insert into t (id,a) values (626,6);
+insert into t (id,a) values (626,7);
+insert into t (id,a) values (626,8);
+insert into t (id,a) values (626,9);
+insert into t (id,a) values (626,10);
+insert into t (id,a) values (626,11);
+insert into t (id,a) values (626,12);
+insert into t (id,a) values (626,13);
+insert into t (id,a) values (626,14);
+insert into t (id,a) values (626,15);
+insert into t (id,a) values (626,16);
+insert into t (id,a) values (626,17);
+insert into t (id,a) values (626,18);
+insert into t (id,a) values (626,19);
+insert into t (id,a) values (626,20);
+insert into t (id,a) values (626,21);
+insert into t (id,a) values (626,22);
+insert into t (id,a) values (626,23);
+insert into t (id,a) values (626,24);
+insert into t (id,a) values (626,25);
+insert into t (id,a) values (626,26);
+insert into t (id,a) values (626,27);
+insert into t (id,a) values (626,28);
+insert into t (id,a) values (626,29);
+insert into t (id,a) values (626,30);
+insert into t (id,a) values (626,31);
+insert into t (id,a) values (626,32);
+insert into t (id,a) values (626,33);
+insert into t (id,a) values (626,34);
+insert into t (id,a) values (626,35);
+insert into t (id,a) values (626,36);
+insert into t (id,a) values (626,37);
+insert into t (id,a) values (626,38);
+insert into t (id,a) values (626,39);
+insert into t (id,a) values (626,40);
+insert into t (id,a) values (626,41);
+insert into t (id,a) values (626,42);
+insert into t (id,a) values (626,43);
+insert into t (id,a) values (626,44);
+insert into t (id,a) values (626,45);
+insert into t (id,a) values (626,46);
+insert into t (id,a) values (626,47);
+insert into t (id,a) values (626,48);
+insert into t (id,a) values (626,49);
+insert into t (id,a) values (626,50);
+insert into t (id,a) values (626,51);
+insert into t (id,a) values (626,52);
+insert into t (id,a) values (626,53);
+insert into t (id,a) values (626,54);
+insert into t (id,a) values (626,55);
+insert into t (id,a) values (626,56);
+insert into t (id,a) values (626,57);
+insert into t (id,a) values (626,58);
+insert into t (id,a) values (626,59);
+insert into t (id,a) values (626,60);
+insert into t (id,a) values (626,61);
+insert into t (id,a) values (626,62);
+insert into t (id,a) values (626,63);
+insert into t (id,a) values (626,64);
+insert into t (id,a) values (626,65);
+insert into t (id,a) values (626,66);
+insert into t (id,a) values (626,67);
+insert into t (id,a) values (626,68);
+insert into t (id,a) values (626,69);
+insert into t (id,a) values (626,70);
+insert into t (id,a) values (626,71);
+insert into t (id,a) values (626,72);
+insert into t (id,a) values (626,73);
+insert into t (id,a) values (626,74);
+insert into t (id,a) values (626,75);
+insert into t (id,a) values (626,76);
+insert into t (id,a) values (626,77);
+insert into t (id,a) values (626,78);
+insert into t (id,a) values (626,79);
+insert into t (id,a) values (626,80);
+insert into t (id,a) values (626,81);
+insert into t (id,a) values (626,82);
+insert into t (id,a) values (626,83);
+insert into t (id,a) values (626,84);
+insert into t (id,a) values (626,85);
+insert into t (id,a) values (626,86);
+insert into t (id,a) values (626,87);
+insert into t (id,a) values (626,88);
+insert into t (id,a) values (626,89);
+insert into t (id,a) values (626,90);
+insert into t (id,a) values (626,91);
+insert into t (id,a) values (626,92);
+insert into t (id,a) values (626,93);
+insert into t (id,a) values (626,94);
+insert into t (id,a) values (626,95);
+insert into t (id,a) values (626,96);
+insert into t (id,a) values (626,97);
+insert into t (id,a) values (626,98);
+insert into t (id,a) values (626,99);
+insert into t (id,a) values (627,0);
+insert into t (id,a) values (627,1);
+insert into t (id,a) values (627,2);
+insert into t (id,a) values (627,3);
+insert into t (id,a) values (627,4);
+insert into t (id,a) values (627,5);
+insert into t (id,a) values (627,6);
+insert into t (id,a) values (627,7);
+insert into t (id,a) values (627,8);
+insert into t (id,a) values (627,9);
+insert into t (id,a) values (627,10);
+insert into t (id,a) values (627,11);
+insert into t (id,a) values (627,12);
+insert into t (id,a) values (627,13);
+insert into t (id,a) values (627,14);
+insert into t (id,a) values (627,15);
+insert into t (id,a) values (627,16);
+insert into t (id,a) values (627,17);
+insert into t (id,a) values (627,18);
+insert into t (id,a) values (627,19);
+insert into t (id,a) values (627,20);
+insert into t (id,a) values (627,21);
+insert into t (id,a) values (627,22);
+insert into t (id,a) values (627,23);
+insert into t (id,a) values (627,24);
+insert into t (id,a) values (627,25);
+insert into t (id,a) values (627,26);
+insert into t (id,a) values (627,27);
+insert into t (id,a) values (627,28);
+insert into t (id,a) values (627,29);
+insert into t (id,a) values (627,30);
+insert into t (id,a) values (627,31);
+insert into t (id,a) values (627,32);
+insert into t (id,a) values (627,33);
+insert into t (id,a) values (627,34);
+insert into t (id,a) values (627,35);
+insert into t (id,a) values (627,36);
+insert into t (id,a) values (627,37);
+insert into t (id,a) values (627,38);
+insert into t (id,a) values (627,39);
+insert into t (id,a) values (627,40);
+insert into t (id,a) values (627,41);
+insert into t (id,a) values (627,42);
+insert into t (id,a) values (627,43);
+insert into t (id,a) values (627,44);
+insert into t (id,a) values (627,45);
+insert into t (id,a) values (627,46);
+insert into t (id,a) values (627,47);
+insert into t (id,a) values (627,48);
+insert into t (id,a) values (627,49);
+insert into t (id,a) values (627,50);
+insert into t (id,a) values (627,51);
+insert into t (id,a) values (627,52);
+insert into t (id,a) values (627,53);
+insert into t (id,a) values (627,54);
+insert into t (id,a) values (627,55);
+insert into t (id,a) values (627,56);
+insert into t (id,a) values (627,57);
+insert into t (id,a) values (627,58);
+insert into t (id,a) values (627,59);
+insert into t (id,a) values (627,60);
+insert into t (id,a) values (627,61);
+insert into t (id,a) values (627,62);
+insert into t (id,a) values (627,63);
+insert into t (id,a) values (627,64);
+insert into t (id,a) values (627,65);
+insert into t (id,a) values (627,66);
+insert into t (id,a) values (627,67);
+insert into t (id,a) values (627,68);
+insert into t (id,a) values (627,69);
+insert into t (id,a) values (627,70);
+insert into t (id,a) values (627,71);
+insert into t (id,a) values (627,72);
+insert into t (id,a) values (627,73);
+insert into t (id,a) values (627,74);
+insert into t (id,a) values (627,75);
+insert into t (id,a) values (627,76);
+insert into t (id,a) values (627,77);
+insert into t (id,a) values (627,78);
+insert into t (id,a) values (627,79);
+insert into t (id,a) values (627,80);
+insert into t (id,a) values (627,81);
+insert into t (id,a) values (627,82);
+insert into t (id,a) values (627,83);
+insert into t (id,a) values (627,84);
+insert into t (id,a) values (627,85);
+insert into t (id,a) values (627,86);
+insert into t (id,a) values (627,87);
+insert into t (id,a) values (627,88);
+insert into t (id,a) values (627,89);
+insert into t (id,a) values (627,90);
+insert into t (id,a) values (627,91);
+insert into t (id,a) values (627,92);
+insert into t (id,a) values (627,93);
+insert into t (id,a) values (627,94);
+insert into t (id,a) values (627,95);
+insert into t (id,a) values (627,96);
+insert into t (id,a) values (627,97);
+insert into t (id,a) values (627,98);
+insert into t (id,a) values (627,99);
+insert into t (id,a) values (628,0);
+insert into t (id,a) values (628,1);
+insert into t (id,a) values (628,2);
+insert into t (id,a) values (628,3);
+insert into t (id,a) values (628,4);
+insert into t (id,a) values (628,5);
+insert into t (id,a) values (628,6);
+insert into t (id,a) values (628,7);
+insert into t (id,a) values (628,8);
+insert into t (id,a) values (628,9);
+insert into t (id,a) values (628,10);
+insert into t (id,a) values (628,11);
+insert into t (id,a) values (628,12);
+insert into t (id,a) values (628,13);
+insert into t (id,a) values (628,14);
+insert into t (id,a) values (628,15);
+insert into t (id,a) values (628,16);
+insert into t (id,a) values (628,17);
+insert into t (id,a) values (628,18);
+insert into t (id,a) values (628,19);
+insert into t (id,a) values (628,20);
+insert into t (id,a) values (628,21);
+insert into t (id,a) values (628,22);
+insert into t (id,a) values (628,23);
+insert into t (id,a) values (628,24);
+insert into t (id,a) values (628,25);
+insert into t (id,a) values (628,26);
+insert into t (id,a) values (628,27);
+insert into t (id,a) values (628,28);
+insert into t (id,a) values (628,29);
+insert into t (id,a) values (628,30);
+insert into t (id,a) values (628,31);
+insert into t (id,a) values (628,32);
+insert into t (id,a) values (628,33);
+insert into t (id,a) values (628,34);
+insert into t (id,a) values (628,35);
+insert into t (id,a) values (628,36);
+insert into t (id,a) values (628,37);
+insert into t (id,a) values (628,38);
+insert into t (id,a) values (628,39);
+insert into t (id,a) values (628,40);
+insert into t (id,a) values (628,41);
+insert into t (id,a) values (628,42);
+insert into t (id,a) values (628,43);
+insert into t (id,a) values (628,44);
+insert into t (id,a) values (628,45);
+insert into t (id,a) values (628,46);
+insert into t (id,a) values (628,47);
+insert into t (id,a) values (628,48);
+insert into t (id,a) values (628,49);
+insert into t (id,a) values (628,50);
+insert into t (id,a) values (628,51);
+insert into t (id,a) values (628,52);
+insert into t (id,a) values (628,53);
+insert into t (id,a) values (628,54);
+insert into t (id,a) values (628,55);
+insert into t (id,a) values (628,56);
+insert into t (id,a) values (628,57);
+insert into t (id,a) values (628,58);
+insert into t (id,a) values (628,59);
+insert into t (id,a) values (628,60);
+insert into t (id,a) values (628,61);
+insert into t (id,a) values (628,62);
+insert into t (id,a) values (628,63);
+insert into t (id,a) values (628,64);
+insert into t (id,a) values (628,65);
+insert into t (id,a) values (628,66);
+insert into t (id,a) values (628,67);
+insert into t (id,a) values (628,68);
+insert into t (id,a) values (628,69);
+insert into t (id,a) values (628,70);
+insert into t (id,a) values (628,71);
+insert into t (id,a) values (628,72);
+insert into t (id,a) values (628,73);
+insert into t (id,a) values (628,74);
+insert into t (id,a) values (628,75);
+insert into t (id,a) values (628,76);
+insert into t (id,a) values (628,77);
+insert into t (id,a) values (628,78);
+insert into t (id,a) values (628,79);
+insert into t (id,a) values (628,80);
+insert into t (id,a) values (628,81);
+insert into t (id,a) values (628,82);
+insert into t (id,a) values (628,83);
+insert into t (id,a) values (628,84);
+insert into t (id,a) values (628,85);
+insert into t (id,a) values (628,86);
+insert into t (id,a) values (628,87);
+insert into t (id,a) values (628,88);
+insert into t (id,a) values (628,89);
+insert into t (id,a) values (628,90);
+insert into t (id,a) values (628,91);
+insert into t (id,a) values (628,92);
+insert into t (id,a) values (628,93);
+insert into t (id,a) values (628,94);
+insert into t (id,a) values (628,95);
+insert into t (id,a) values (628,96);
+insert into t (id,a) values (628,97);
+insert into t (id,a) values (628,98);
+insert into t (id,a) values (628,99);
+insert into t (id,a) values (629,0);
+insert into t (id,a) values (629,1);
+insert into t (id,a) values (629,2);
+insert into t (id,a) values (629,3);
+insert into t (id,a) values (629,4);
+insert into t (id,a) values (629,5);
+insert into t (id,a) values (629,6);
+insert into t (id,a) values (629,7);
+insert into t (id,a) values (629,8);
+insert into t (id,a) values (629,9);
+insert into t (id,a) values (629,10);
+insert into t (id,a) values (629,11);
+insert into t (id,a) values (629,12);
+insert into t (id,a) values (629,13);
+insert into t (id,a) values (629,14);
+insert into t (id,a) values (629,15);
+insert into t (id,a) values (629,16);
+insert into t (id,a) values (629,17);
+insert into t (id,a) values (629,18);
+insert into t (id,a) values (629,19);
+insert into t (id,a) values (629,20);
+insert into t (id,a) values (629,21);
+insert into t (id,a) values (629,22);
+insert into t (id,a) values (629,23);
+insert into t (id,a) values (629,24);
+insert into t (id,a) values (629,25);
+insert into t (id,a) values (629,26);
+insert into t (id,a) values (629,27);
+insert into t (id,a) values (629,28);
+insert into t (id,a) values (629,29);
+insert into t (id,a) values (629,30);
+insert into t (id,a) values (629,31);
+insert into t (id,a) values (629,32);
+insert into t (id,a) values (629,33);
+insert into t (id,a) values (629,34);
+insert into t (id,a) values (629,35);
+insert into t (id,a) values (629,36);
+insert into t (id,a) values (629,37);
+insert into t (id,a) values (629,38);
+insert into t (id,a) values (629,39);
+insert into t (id,a) values (629,40);
+insert into t (id,a) values (629,41);
+insert into t (id,a) values (629,42);
+insert into t (id,a) values (629,43);
+insert into t (id,a) values (629,44);
+insert into t (id,a) values (629,45);
+insert into t (id,a) values (629,46);
+insert into t (id,a) values (629,47);
+insert into t (id,a) values (629,48);
+insert into t (id,a) values (629,49);
+insert into t (id,a) values (629,50);
+insert into t (id,a) values (629,51);
+insert into t (id,a) values (629,52);
+insert into t (id,a) values (629,53);
+insert into t (id,a) values (629,54);
+insert into t (id,a) values (629,55);
+insert into t (id,a) values (629,56);
+insert into t (id,a) values (629,57);
+insert into t (id,a) values (629,58);
+insert into t (id,a) values (629,59);
+insert into t (id,a) values (629,60);
+insert into t (id,a) values (629,61);
+insert into t (id,a) values (629,62);
+insert into t (id,a) values (629,63);
+insert into t (id,a) values (629,64);
+insert into t (id,a) values (629,65);
+insert into t (id,a) values (629,66);
+insert into t (id,a) values (629,67);
+insert into t (id,a) values (629,68);
+insert into t (id,a) values (629,69);
+insert into t (id,a) values (629,70);
+insert into t (id,a) values (629,71);
+insert into t (id,a) values (629,72);
+insert into t (id,a) values (629,73);
+insert into t (id,a) values (629,74);
+insert into t (id,a) values (629,75);
+insert into t (id,a) values (629,76);
+insert into t (id,a) values (629,77);
+insert into t (id,a) values (629,78);
+insert into t (id,a) values (629,79);
+insert into t (id,a) values (629,80);
+insert into t (id,a) values (629,81);
+insert into t (id,a) values (629,82);
+insert into t (id,a) values (629,83);
+insert into t (id,a) values (629,84);
+insert into t (id,a) values (629,85);
+insert into t (id,a) values (629,86);
+insert into t (id,a) values (629,87);
+insert into t (id,a) values (629,88);
+insert into t (id,a) values (629,89);
+insert into t (id,a) values (629,90);
+insert into t (id,a) values (629,91);
+insert into t (id,a) values (629,92);
+insert into t (id,a) values (629,93);
+insert into t (id,a) values (629,94);
+insert into t (id,a) values (629,95);
+insert into t (id,a) values (629,96);
+insert into t (id,a) values (629,97);
+insert into t (id,a) values (629,98);
+insert into t (id,a) values (629,99);
+insert into t (id,a) values (630,0);
+insert into t (id,a) values (630,1);
+insert into t (id,a) values (630,2);
+insert into t (id,a) values (630,3);
+insert into t (id,a) values (630,4);
+insert into t (id,a) values (630,5);
+insert into t (id,a) values (630,6);
+insert into t (id,a) values (630,7);
+insert into t (id,a) values (630,8);
+insert into t (id,a) values (630,9);
+insert into t (id,a) values (630,10);
+insert into t (id,a) values (630,11);
+insert into t (id,a) values (630,12);
+insert into t (id,a) values (630,13);
+insert into t (id,a) values (630,14);
+insert into t (id,a) values (630,15);
+insert into t (id,a) values (630,16);
+insert into t (id,a) values (630,17);
+insert into t (id,a) values (630,18);
+insert into t (id,a) values (630,19);
+insert into t (id,a) values (630,20);
+insert into t (id,a) values (630,21);
+insert into t (id,a) values (630,22);
+insert into t (id,a) values (630,23);
+insert into t (id,a) values (630,24);
+insert into t (id,a) values (630,25);
+insert into t (id,a) values (630,26);
+insert into t (id,a) values (630,27);
+insert into t (id,a) values (630,28);
+insert into t (id,a) values (630,29);
+insert into t (id,a) values (630,30);
+insert into t (id,a) values (630,31);
+insert into t (id,a) values (630,32);
+insert into t (id,a) values (630,33);
+insert into t (id,a) values (630,34);
+insert into t (id,a) values (630,35);
+insert into t (id,a) values (630,36);
+insert into t (id,a) values (630,37);
+insert into t (id,a) values (630,38);
+insert into t (id,a) values (630,39);
+insert into t (id,a) values (630,40);
+insert into t (id,a) values (630,41);
+insert into t (id,a) values (630,42);
+insert into t (id,a) values (630,43);
+insert into t (id,a) values (630,44);
+insert into t (id,a) values (630,45);
+insert into t (id,a) values (630,46);
+insert into t (id,a) values (630,47);
+insert into t (id,a) values (630,48);
+insert into t (id,a) values (630,49);
+insert into t (id,a) values (630,50);
+insert into t (id,a) values (630,51);
+insert into t (id,a) values (630,52);
+insert into t (id,a) values (630,53);
+insert into t (id,a) values (630,54);
+insert into t (id,a) values (630,55);
+insert into t (id,a) values (630,56);
+insert into t (id,a) values (630,57);
+insert into t (id,a) values (630,58);
+insert into t (id,a) values (630,59);
+insert into t (id,a) values (630,60);
+insert into t (id,a) values (630,61);
+insert into t (id,a) values (630,62);
+insert into t (id,a) values (630,63);
+insert into t (id,a) values (630,64);
+insert into t (id,a) values (630,65);
+insert into t (id,a) values (630,66);
+insert into t (id,a) values (630,67);
+insert into t (id,a) values (630,68);
+insert into t (id,a) values (630,69);
+insert into t (id,a) values (630,70);
+insert into t (id,a) values (630,71);
+insert into t (id,a) values (630,72);
+insert into t (id,a) values (630,73);
+insert into t (id,a) values (630,74);
+insert into t (id,a) values (630,75);
+insert into t (id,a) values (630,76);
+insert into t (id,a) values (630,77);
+insert into t (id,a) values (630,78);
+insert into t (id,a) values (630,79);
+insert into t (id,a) values (630,80);
+insert into t (id,a) values (630,81);
+insert into t (id,a) values (630,82);
+insert into t (id,a) values (630,83);
+insert into t (id,a) values (630,84);
+insert into t (id,a) values (630,85);
+insert into t (id,a) values (630,86);
+insert into t (id,a) values (630,87);
+insert into t (id,a) values (630,88);
+insert into t (id,a) values (630,89);
+insert into t (id,a) values (630,90);
+insert into t (id,a) values (630,91);
+insert into t (id,a) values (630,92);
+insert into t (id,a) values (630,93);
+insert into t (id,a) values (630,94);
+insert into t (id,a) values (630,95);
+insert into t (id,a) values (630,96);
+insert into t (id,a) values (630,97);
+insert into t (id,a) values (630,98);
+insert into t (id,a) values (630,99);
+insert into t (id,a) values (631,0);
+insert into t (id,a) values (631,1);
+insert into t (id,a) values (631,2);
+insert into t (id,a) values (631,3);
+insert into t (id,a) values (631,4);
+insert into t (id,a) values (631,5);
+insert into t (id,a) values (631,6);
+insert into t (id,a) values (631,7);
+insert into t (id,a) values (631,8);
+insert into t (id,a) values (631,9);
+insert into t (id,a) values (631,10);
+insert into t (id,a) values (631,11);
+insert into t (id,a) values (631,12);
+insert into t (id,a) values (631,13);
+insert into t (id,a) values (631,14);
+insert into t (id,a) values (631,15);
+insert into t (id,a) values (631,16);
+insert into t (id,a) values (631,17);
+insert into t (id,a) values (631,18);
+insert into t (id,a) values (631,19);
+insert into t (id,a) values (631,20);
+insert into t (id,a) values (631,21);
+insert into t (id,a) values (631,22);
+insert into t (id,a) values (631,23);
+insert into t (id,a) values (631,24);
+insert into t (id,a) values (631,25);
+insert into t (id,a) values (631,26);
+insert into t (id,a) values (631,27);
+insert into t (id,a) values (631,28);
+insert into t (id,a) values (631,29);
+insert into t (id,a) values (631,30);
+insert into t (id,a) values (631,31);
+insert into t (id,a) values (631,32);
+insert into t (id,a) values (631,33);
+insert into t (id,a) values (631,34);
+insert into t (id,a) values (631,35);
+insert into t (id,a) values (631,36);
+insert into t (id,a) values (631,37);
+insert into t (id,a) values (631,38);
+insert into t (id,a) values (631,39);
+insert into t (id,a) values (631,40);
+insert into t (id,a) values (631,41);
+insert into t (id,a) values (631,42);
+insert into t (id,a) values (631,43);
+insert into t (id,a) values (631,44);
+insert into t (id,a) values (631,45);
+insert into t (id,a) values (631,46);
+insert into t (id,a) values (631,47);
+insert into t (id,a) values (631,48);
+insert into t (id,a) values (631,49);
+insert into t (id,a) values (631,50);
+insert into t (id,a) values (631,51);
+insert into t (id,a) values (631,52);
+insert into t (id,a) values (631,53);
+insert into t (id,a) values (631,54);
+insert into t (id,a) values (631,55);
+insert into t (id,a) values (631,56);
+insert into t (id,a) values (631,57);
+insert into t (id,a) values (631,58);
+insert into t (id,a) values (631,59);
+insert into t (id,a) values (631,60);
+insert into t (id,a) values (631,61);
+insert into t (id,a) values (631,62);
+insert into t (id,a) values (631,63);
+insert into t (id,a) values (631,64);
+insert into t (id,a) values (631,65);
+insert into t (id,a) values (631,66);
+insert into t (id,a) values (631,67);
+insert into t (id,a) values (631,68);
+insert into t (id,a) values (631,69);
+insert into t (id,a) values (631,70);
+insert into t (id,a) values (631,71);
+insert into t (id,a) values (631,72);
+insert into t (id,a) values (631,73);
+insert into t (id,a) values (631,74);
+insert into t (id,a) values (631,75);
+insert into t (id,a) values (631,76);
+insert into t (id,a) values (631,77);
+insert into t (id,a) values (631,78);
+insert into t (id,a) values (631,79);
+insert into t (id,a) values (631,80);
+insert into t (id,a) values (631,81);
+insert into t (id,a) values (631,82);
+insert into t (id,a) values (631,83);
+insert into t (id,a) values (631,84);
+insert into t (id,a) values (631,85);
+insert into t (id,a) values (631,86);
+insert into t (id,a) values (631,87);
+insert into t (id,a) values (631,88);
+insert into t (id,a) values (631,89);
+insert into t (id,a) values (631,90);
+insert into t (id,a) values (631,91);
+insert into t (id,a) values (631,92);
+insert into t (id,a) values (631,93);
+insert into t (id,a) values (631,94);
+insert into t (id,a) values (631,95);
+insert into t (id,a) values (631,96);
+insert into t (id,a) values (631,97);
+insert into t (id,a) values (631,98);
+insert into t (id,a) values (631,99);
+insert into t (id,a) values (632,0);
+insert into t (id,a) values (632,1);
+insert into t (id,a) values (632,2);
+insert into t (id,a) values (632,3);
+insert into t (id,a) values (632,4);
+insert into t (id,a) values (632,5);
+insert into t (id,a) values (632,6);
+insert into t (id,a) values (632,7);
+insert into t (id,a) values (632,8);
+insert into t (id,a) values (632,9);
+insert into t (id,a) values (632,10);
+insert into t (id,a) values (632,11);
+insert into t (id,a) values (632,12);
+insert into t (id,a) values (632,13);
+insert into t (id,a) values (632,14);
+insert into t (id,a) values (632,15);
+insert into t (id,a) values (632,16);
+insert into t (id,a) values (632,17);
+insert into t (id,a) values (632,18);
+insert into t (id,a) values (632,19);
+insert into t (id,a) values (632,20);
+insert into t (id,a) values (632,21);
+insert into t (id,a) values (632,22);
+insert into t (id,a) values (632,23);
+insert into t (id,a) values (632,24);
+insert into t (id,a) values (632,25);
+insert into t (id,a) values (632,26);
+insert into t (id,a) values (632,27);
+insert into t (id,a) values (632,28);
+insert into t (id,a) values (632,29);
+insert into t (id,a) values (632,30);
+insert into t (id,a) values (632,31);
+insert into t (id,a) values (632,32);
+insert into t (id,a) values (632,33);
+insert into t (id,a) values (632,34);
+insert into t (id,a) values (632,35);
+insert into t (id,a) values (632,36);
+insert into t (id,a) values (632,37);
+insert into t (id,a) values (632,38);
+insert into t (id,a) values (632,39);
+insert into t (id,a) values (632,40);
+insert into t (id,a) values (632,41);
+insert into t (id,a) values (632,42);
+insert into t (id,a) values (632,43);
+insert into t (id,a) values (632,44);
+insert into t (id,a) values (632,45);
+insert into t (id,a) values (632,46);
+insert into t (id,a) values (632,47);
+insert into t (id,a) values (632,48);
+insert into t (id,a) values (632,49);
+insert into t (id,a) values (632,50);
+insert into t (id,a) values (632,51);
+insert into t (id,a) values (632,52);
+insert into t (id,a) values (632,53);
+insert into t (id,a) values (632,54);
+insert into t (id,a) values (632,55);
+insert into t (id,a) values (632,56);
+insert into t (id,a) values (632,57);
+insert into t (id,a) values (632,58);
+insert into t (id,a) values (632,59);
+insert into t (id,a) values (632,60);
+insert into t (id,a) values (632,61);
+insert into t (id,a) values (632,62);
+insert into t (id,a) values (632,63);
+insert into t (id,a) values (632,64);
+insert into t (id,a) values (632,65);
+insert into t (id,a) values (632,66);
+insert into t (id,a) values (632,67);
+insert into t (id,a) values (632,68);
+insert into t (id,a) values (632,69);
+insert into t (id,a) values (632,70);
+insert into t (id,a) values (632,71);
+insert into t (id,a) values (632,72);
+insert into t (id,a) values (632,73);
+insert into t (id,a) values (632,74);
+insert into t (id,a) values (632,75);
+insert into t (id,a) values (632,76);
+insert into t (id,a) values (632,77);
+insert into t (id,a) values (632,78);
+insert into t (id,a) values (632,79);
+insert into t (id,a) values (632,80);
+insert into t (id,a) values (632,81);
+insert into t (id,a) values (632,82);
+insert into t (id,a) values (632,83);
+insert into t (id,a) values (632,84);
+insert into t (id,a) values (632,85);
+insert into t (id,a) values (632,86);
+insert into t (id,a) values (632,87);
+insert into t (id,a) values (632,88);
+insert into t (id,a) values (632,89);
+insert into t (id,a) values (632,90);
+insert into t (id,a) values (632,91);
+insert into t (id,a) values (632,92);
+insert into t (id,a) values (632,93);
+insert into t (id,a) values (632,94);
+insert into t (id,a) values (632,95);
+insert into t (id,a) values (632,96);
+insert into t (id,a) values (632,97);
+insert into t (id,a) values (632,98);
+insert into t (id,a) values (632,99);
+insert into t (id,a) values (633,0);
+insert into t (id,a) values (633,1);
+insert into t (id,a) values (633,2);
+insert into t (id,a) values (633,3);
+insert into t (id,a) values (633,4);
+insert into t (id,a) values (633,5);
+insert into t (id,a) values (633,6);
+insert into t (id,a) values (633,7);
+insert into t (id,a) values (633,8);
+insert into t (id,a) values (633,9);
+insert into t (id,a) values (633,10);
+insert into t (id,a) values (633,11);
+insert into t (id,a) values (633,12);
+insert into t (id,a) values (633,13);
+insert into t (id,a) values (633,14);
+insert into t (id,a) values (633,15);
+insert into t (id,a) values (633,16);
+insert into t (id,a) values (633,17);
+insert into t (id,a) values (633,18);
+insert into t (id,a) values (633,19);
+insert into t (id,a) values (633,20);
+insert into t (id,a) values (633,21);
+insert into t (id,a) values (633,22);
+insert into t (id,a) values (633,23);
+insert into t (id,a) values (633,24);
+insert into t (id,a) values (633,25);
+insert into t (id,a) values (633,26);
+insert into t (id,a) values (633,27);
+insert into t (id,a) values (633,28);
+insert into t (id,a) values (633,29);
+insert into t (id,a) values (633,30);
+insert into t (id,a) values (633,31);
+insert into t (id,a) values (633,32);
+insert into t (id,a) values (633,33);
+insert into t (id,a) values (633,34);
+insert into t (id,a) values (633,35);
+insert into t (id,a) values (633,36);
+insert into t (id,a) values (633,37);
+insert into t (id,a) values (633,38);
+insert into t (id,a) values (633,39);
+insert into t (id,a) values (633,40);
+insert into t (id,a) values (633,41);
+insert into t (id,a) values (633,42);
+insert into t (id,a) values (633,43);
+insert into t (id,a) values (633,44);
+insert into t (id,a) values (633,45);
+insert into t (id,a) values (633,46);
+insert into t (id,a) values (633,47);
+insert into t (id,a) values (633,48);
+insert into t (id,a) values (633,49);
+insert into t (id,a) values (633,50);
+insert into t (id,a) values (633,51);
+insert into t (id,a) values (633,52);
+insert into t (id,a) values (633,53);
+insert into t (id,a) values (633,54);
+insert into t (id,a) values (633,55);
+insert into t (id,a) values (633,56);
+insert into t (id,a) values (633,57);
+insert into t (id,a) values (633,58);
+insert into t (id,a) values (633,59);
+insert into t (id,a) values (633,60);
+insert into t (id,a) values (633,61);
+insert into t (id,a) values (633,62);
+insert into t (id,a) values (633,63);
+insert into t (id,a) values (633,64);
+insert into t (id,a) values (633,65);
+insert into t (id,a) values (633,66);
+insert into t (id,a) values (633,67);
+insert into t (id,a) values (633,68);
+insert into t (id,a) values (633,69);
+insert into t (id,a) values (633,70);
+insert into t (id,a) values (633,71);
+insert into t (id,a) values (633,72);
+insert into t (id,a) values (633,73);
+insert into t (id,a) values (633,74);
+insert into t (id,a) values (633,75);
+insert into t (id,a) values (633,76);
+insert into t (id,a) values (633,77);
+insert into t (id,a) values (633,78);
+insert into t (id,a) values (633,79);
+insert into t (id,a) values (633,80);
+insert into t (id,a) values (633,81);
+insert into t (id,a) values (633,82);
+insert into t (id,a) values (633,83);
+insert into t (id,a) values (633,84);
+insert into t (id,a) values (633,85);
+insert into t (id,a) values (633,86);
+insert into t (id,a) values (633,87);
+insert into t (id,a) values (633,88);
+insert into t (id,a) values (633,89);
+insert into t (id,a) values (633,90);
+insert into t (id,a) values (633,91);
+insert into t (id,a) values (633,92);
+insert into t (id,a) values (633,93);
+insert into t (id,a) values (633,94);
+insert into t (id,a) values (633,95);
+insert into t (id,a) values (633,96);
+insert into t (id,a) values (633,97);
+insert into t (id,a) values (633,98);
+insert into t (id,a) values (633,99);
+insert into t (id,a) values (634,0);
+insert into t (id,a) values (634,1);
+insert into t (id,a) values (634,2);
+insert into t (id,a) values (634,3);
+insert into t (id,a) values (634,4);
+insert into t (id,a) values (634,5);
+insert into t (id,a) values (634,6);
+insert into t (id,a) values (634,7);
+insert into t (id,a) values (634,8);
+insert into t (id,a) values (634,9);
+insert into t (id,a) values (634,10);
+insert into t (id,a) values (634,11);
+insert into t (id,a) values (634,12);
+insert into t (id,a) values (634,13);
+insert into t (id,a) values (634,14);
+insert into t (id,a) values (634,15);
+insert into t (id,a) values (634,16);
+insert into t (id,a) values (634,17);
+insert into t (id,a) values (634,18);
+insert into t (id,a) values (634,19);
+insert into t (id,a) values (634,20);
+insert into t (id,a) values (634,21);
+insert into t (id,a) values (634,22);
+insert into t (id,a) values (634,23);
+insert into t (id,a) values (634,24);
+insert into t (id,a) values (634,25);
+insert into t (id,a) values (634,26);
+insert into t (id,a) values (634,27);
+insert into t (id,a) values (634,28);
+insert into t (id,a) values (634,29);
+insert into t (id,a) values (634,30);
+insert into t (id,a) values (634,31);
+insert into t (id,a) values (634,32);
+insert into t (id,a) values (634,33);
+insert into t (id,a) values (634,34);
+insert into t (id,a) values (634,35);
+insert into t (id,a) values (634,36);
+insert into t (id,a) values (634,37);
+insert into t (id,a) values (634,38);
+insert into t (id,a) values (634,39);
+insert into t (id,a) values (634,40);
+insert into t (id,a) values (634,41);
+insert into t (id,a) values (634,42);
+insert into t (id,a) values (634,43);
+insert into t (id,a) values (634,44);
+insert into t (id,a) values (634,45);
+insert into t (id,a) values (634,46);
+insert into t (id,a) values (634,47);
+insert into t (id,a) values (634,48);
+insert into t (id,a) values (634,49);
+insert into t (id,a) values (634,50);
+insert into t (id,a) values (634,51);
+insert into t (id,a) values (634,52);
+insert into t (id,a) values (634,53);
+insert into t (id,a) values (634,54);
+insert into t (id,a) values (634,55);
+insert into t (id,a) values (634,56);
+insert into t (id,a) values (634,57);
+insert into t (id,a) values (634,58);
+insert into t (id,a) values (634,59);
+insert into t (id,a) values (634,60);
+insert into t (id,a) values (634,61);
+insert into t (id,a) values (634,62);
+insert into t (id,a) values (634,63);
+insert into t (id,a) values (634,64);
+insert into t (id,a) values (634,65);
+insert into t (id,a) values (634,66);
+insert into t (id,a) values (634,67);
+insert into t (id,a) values (634,68);
+insert into t (id,a) values (634,69);
+insert into t (id,a) values (634,70);
+insert into t (id,a) values (634,71);
+insert into t (id,a) values (634,72);
+insert into t (id,a) values (634,73);
+insert into t (id,a) values (634,74);
+insert into t (id,a) values (634,75);
+insert into t (id,a) values (634,76);
+insert into t (id,a) values (634,77);
+insert into t (id,a) values (634,78);
+insert into t (id,a) values (634,79);
+insert into t (id,a) values (634,80);
+insert into t (id,a) values (634,81);
+insert into t (id,a) values (634,82);
+insert into t (id,a) values (634,83);
+insert into t (id,a) values (634,84);
+insert into t (id,a) values (634,85);
+insert into t (id,a) values (634,86);
+insert into t (id,a) values (634,87);
+insert into t (id,a) values (634,88);
+insert into t (id,a) values (634,89);
+insert into t (id,a) values (634,90);
+insert into t (id,a) values (634,91);
+insert into t (id,a) values (634,92);
+insert into t (id,a) values (634,93);
+insert into t (id,a) values (634,94);
+insert into t (id,a) values (634,95);
+insert into t (id,a) values (634,96);
+insert into t (id,a) values (634,97);
+insert into t (id,a) values (634,98);
+insert into t (id,a) values (634,99);
+insert into t (id,a) values (635,0);
+insert into t (id,a) values (635,1);
+insert into t (id,a) values (635,2);
+insert into t (id,a) values (635,3);
+insert into t (id,a) values (635,4);
+insert into t (id,a) values (635,5);
+insert into t (id,a) values (635,6);
+insert into t (id,a) values (635,7);
+insert into t (id,a) values (635,8);
+insert into t (id,a) values (635,9);
+insert into t (id,a) values (635,10);
+insert into t (id,a) values (635,11);
+insert into t (id,a) values (635,12);
+insert into t (id,a) values (635,13);
+insert into t (id,a) values (635,14);
+insert into t (id,a) values (635,15);
+insert into t (id,a) values (635,16);
+insert into t (id,a) values (635,17);
+insert into t (id,a) values (635,18);
+insert into t (id,a) values (635,19);
+insert into t (id,a) values (635,20);
+insert into t (id,a) values (635,21);
+insert into t (id,a) values (635,22);
+insert into t (id,a) values (635,23);
+insert into t (id,a) values (635,24);
+insert into t (id,a) values (635,25);
+insert into t (id,a) values (635,26);
+insert into t (id,a) values (635,27);
+insert into t (id,a) values (635,28);
+insert into t (id,a) values (635,29);
+insert into t (id,a) values (635,30);
+insert into t (id,a) values (635,31);
+insert into t (id,a) values (635,32);
+insert into t (id,a) values (635,33);
+insert into t (id,a) values (635,34);
+insert into t (id,a) values (635,35);
+insert into t (id,a) values (635,36);
+insert into t (id,a) values (635,37);
+insert into t (id,a) values (635,38);
+insert into t (id,a) values (635,39);
+insert into t (id,a) values (635,40);
+insert into t (id,a) values (635,41);
+insert into t (id,a) values (635,42);
+insert into t (id,a) values (635,43);
+insert into t (id,a) values (635,44);
+insert into t (id,a) values (635,45);
+insert into t (id,a) values (635,46);
+insert into t (id,a) values (635,47);
+insert into t (id,a) values (635,48);
+insert into t (id,a) values (635,49);
+insert into t (id,a) values (635,50);
+insert into t (id,a) values (635,51);
+insert into t (id,a) values (635,52);
+insert into t (id,a) values (635,53);
+insert into t (id,a) values (635,54);
+insert into t (id,a) values (635,55);
+insert into t (id,a) values (635,56);
+insert into t (id,a) values (635,57);
+insert into t (id,a) values (635,58);
+insert into t (id,a) values (635,59);
+insert into t (id,a) values (635,60);
+insert into t (id,a) values (635,61);
+insert into t (id,a) values (635,62);
+insert into t (id,a) values (635,63);
+insert into t (id,a) values (635,64);
+insert into t (id,a) values (635,65);
+insert into t (id,a) values (635,66);
+insert into t (id,a) values (635,67);
+insert into t (id,a) values (635,68);
+insert into t (id,a) values (635,69);
+insert into t (id,a) values (635,70);
+insert into t (id,a) values (635,71);
+insert into t (id,a) values (635,72);
+insert into t (id,a) values (635,73);
+insert into t (id,a) values (635,74);
+insert into t (id,a) values (635,75);
+insert into t (id,a) values (635,76);
+insert into t (id,a) values (635,77);
+insert into t (id,a) values (635,78);
+insert into t (id,a) values (635,79);
+insert into t (id,a) values (635,80);
+insert into t (id,a) values (635,81);
+insert into t (id,a) values (635,82);
+insert into t (id,a) values (635,83);
+insert into t (id,a) values (635,84);
+insert into t (id,a) values (635,85);
+insert into t (id,a) values (635,86);
+insert into t (id,a) values (635,87);
+insert into t (id,a) values (635,88);
+insert into t (id,a) values (635,89);
+insert into t (id,a) values (635,90);
+insert into t (id,a) values (635,91);
+insert into t (id,a) values (635,92);
+insert into t (id,a) values (635,93);
+insert into t (id,a) values (635,94);
+insert into t (id,a) values (635,95);
+insert into t (id,a) values (635,96);
+insert into t (id,a) values (635,97);
+insert into t (id,a) values (635,98);
+insert into t (id,a) values (635,99);
+insert into t (id,a) values (636,0);
+insert into t (id,a) values (636,1);
+insert into t (id,a) values (636,2);
+insert into t (id,a) values (636,3);
+insert into t (id,a) values (636,4);
+insert into t (id,a) values (636,5);
+insert into t (id,a) values (636,6);
+insert into t (id,a) values (636,7);
+insert into t (id,a) values (636,8);
+insert into t (id,a) values (636,9);
+insert into t (id,a) values (636,10);
+insert into t (id,a) values (636,11);
+insert into t (id,a) values (636,12);
+insert into t (id,a) values (636,13);
+insert into t (id,a) values (636,14);
+insert into t (id,a) values (636,15);
+insert into t (id,a) values (636,16);
+insert into t (id,a) values (636,17);
+insert into t (id,a) values (636,18);
+insert into t (id,a) values (636,19);
+insert into t (id,a) values (636,20);
+insert into t (id,a) values (636,21);
+insert into t (id,a) values (636,22);
+insert into t (id,a) values (636,23);
+insert into t (id,a) values (636,24);
+insert into t (id,a) values (636,25);
+insert into t (id,a) values (636,26);
+insert into t (id,a) values (636,27);
+insert into t (id,a) values (636,28);
+insert into t (id,a) values (636,29);
+insert into t (id,a) values (636,30);
+insert into t (id,a) values (636,31);
+insert into t (id,a) values (636,32);
+insert into t (id,a) values (636,33);
+insert into t (id,a) values (636,34);
+insert into t (id,a) values (636,35);
+insert into t (id,a) values (636,36);
+insert into t (id,a) values (636,37);
+insert into t (id,a) values (636,38);
+insert into t (id,a) values (636,39);
+insert into t (id,a) values (636,40);
+insert into t (id,a) values (636,41);
+insert into t (id,a) values (636,42);
+insert into t (id,a) values (636,43);
+insert into t (id,a) values (636,44);
+insert into t (id,a) values (636,45);
+insert into t (id,a) values (636,46);
+insert into t (id,a) values (636,47);
+insert into t (id,a) values (636,48);
+insert into t (id,a) values (636,49);
+insert into t (id,a) values (636,50);
+insert into t (id,a) values (636,51);
+insert into t (id,a) values (636,52);
+insert into t (id,a) values (636,53);
+insert into t (id,a) values (636,54);
+insert into t (id,a) values (636,55);
+insert into t (id,a) values (636,56);
+insert into t (id,a) values (636,57);
+insert into t (id,a) values (636,58);
+insert into t (id,a) values (636,59);
+insert into t (id,a) values (636,60);
+insert into t (id,a) values (636,61);
+insert into t (id,a) values (636,62);
+insert into t (id,a) values (636,63);
+insert into t (id,a) values (636,64);
+insert into t (id,a) values (636,65);
+insert into t (id,a) values (636,66);
+insert into t (id,a) values (636,67);
+insert into t (id,a) values (636,68);
+insert into t (id,a) values (636,69);
+insert into t (id,a) values (636,70);
+insert into t (id,a) values (636,71);
+insert into t (id,a) values (636,72);
+insert into t (id,a) values (636,73);
+insert into t (id,a) values (636,74);
+insert into t (id,a) values (636,75);
+insert into t (id,a) values (636,76);
+insert into t (id,a) values (636,77);
+insert into t (id,a) values (636,78);
+insert into t (id,a) values (636,79);
+insert into t (id,a) values (636,80);
+insert into t (id,a) values (636,81);
+insert into t (id,a) values (636,82);
+insert into t (id,a) values (636,83);
+insert into t (id,a) values (636,84);
+insert into t (id,a) values (636,85);
+insert into t (id,a) values (636,86);
+insert into t (id,a) values (636,87);
+insert into t (id,a) values (636,88);
+insert into t (id,a) values (636,89);
+insert into t (id,a) values (636,90);
+insert into t (id,a) values (636,91);
+insert into t (id,a) values (636,92);
+insert into t (id,a) values (636,93);
+insert into t (id,a) values (636,94);
+insert into t (id,a) values (636,95);
+insert into t (id,a) values (636,96);
+insert into t (id,a) values (636,97);
+insert into t (id,a) values (636,98);
+insert into t (id,a) values (636,99);
+insert into t (id,a) values (637,0);
+insert into t (id,a) values (637,1);
+insert into t (id,a) values (637,2);
+insert into t (id,a) values (637,3);
+insert into t (id,a) values (637,4);
+insert into t (id,a) values (637,5);
+insert into t (id,a) values (637,6);
+insert into t (id,a) values (637,7);
+insert into t (id,a) values (637,8);
+insert into t (id,a) values (637,9);
+insert into t (id,a) values (637,10);
+insert into t (id,a) values (637,11);
+insert into t (id,a) values (637,12);
+insert into t (id,a) values (637,13);
+insert into t (id,a) values (637,14);
+insert into t (id,a) values (637,15);
+insert into t (id,a) values (637,16);
+insert into t (id,a) values (637,17);
+insert into t (id,a) values (637,18);
+insert into t (id,a) values (637,19);
+insert into t (id,a) values (637,20);
+insert into t (id,a) values (637,21);
+insert into t (id,a) values (637,22);
+insert into t (id,a) values (637,23);
+insert into t (id,a) values (637,24);
+insert into t (id,a) values (637,25);
+insert into t (id,a) values (637,26);
+insert into t (id,a) values (637,27);
+insert into t (id,a) values (637,28);
+insert into t (id,a) values (637,29);
+insert into t (id,a) values (637,30);
+insert into t (id,a) values (637,31);
+insert into t (id,a) values (637,32);
+insert into t (id,a) values (637,33);
+insert into t (id,a) values (637,34);
+insert into t (id,a) values (637,35);
+insert into t (id,a) values (637,36);
+insert into t (id,a) values (637,37);
+insert into t (id,a) values (637,38);
+insert into t (id,a) values (637,39);
+insert into t (id,a) values (637,40);
+insert into t (id,a) values (637,41);
+insert into t (id,a) values (637,42);
+insert into t (id,a) values (637,43);
+insert into t (id,a) values (637,44);
+insert into t (id,a) values (637,45);
+insert into t (id,a) values (637,46);
+insert into t (id,a) values (637,47);
+insert into t (id,a) values (637,48);
+insert into t (id,a) values (637,49);
+insert into t (id,a) values (637,50);
+insert into t (id,a) values (637,51);
+insert into t (id,a) values (637,52);
+insert into t (id,a) values (637,53);
+insert into t (id,a) values (637,54);
+insert into t (id,a) values (637,55);
+insert into t (id,a) values (637,56);
+insert into t (id,a) values (637,57);
+insert into t (id,a) values (637,58);
+insert into t (id,a) values (637,59);
+insert into t (id,a) values (637,60);
+insert into t (id,a) values (637,61);
+insert into t (id,a) values (637,62);
+insert into t (id,a) values (637,63);
+insert into t (id,a) values (637,64);
+insert into t (id,a) values (637,65);
+insert into t (id,a) values (637,66);
+insert into t (id,a) values (637,67);
+insert into t (id,a) values (637,68);
+insert into t (id,a) values (637,69);
+insert into t (id,a) values (637,70);
+insert into t (id,a) values (637,71);
+insert into t (id,a) values (637,72);
+insert into t (id,a) values (637,73);
+insert into t (id,a) values (637,74);
+insert into t (id,a) values (637,75);
+insert into t (id,a) values (637,76);
+insert into t (id,a) values (637,77);
+insert into t (id,a) values (637,78);
+insert into t (id,a) values (637,79);
+insert into t (id,a) values (637,80);
+insert into t (id,a) values (637,81);
+insert into t (id,a) values (637,82);
+insert into t (id,a) values (637,83);
+insert into t (id,a) values (637,84);
+insert into t (id,a) values (637,85);
+insert into t (id,a) values (637,86);
+insert into t (id,a) values (637,87);
+insert into t (id,a) values (637,88);
+insert into t (id,a) values (637,89);
+insert into t (id,a) values (637,90);
+insert into t (id,a) values (637,91);
+insert into t (id,a) values (637,92);
+insert into t (id,a) values (637,93);
+insert into t (id,a) values (637,94);
+insert into t (id,a) values (637,95);
+insert into t (id,a) values (637,96);
+insert into t (id,a) values (637,97);
+insert into t (id,a) values (637,98);
+insert into t (id,a) values (637,99);
+insert into t (id,a) values (638,0);
+insert into t (id,a) values (638,1);
+insert into t (id,a) values (638,2);
+insert into t (id,a) values (638,3);
+insert into t (id,a) values (638,4);
+insert into t (id,a) values (638,5);
+insert into t (id,a) values (638,6);
+insert into t (id,a) values (638,7);
+insert into t (id,a) values (638,8);
+insert into t (id,a) values (638,9);
+insert into t (id,a) values (638,10);
+insert into t (id,a) values (638,11);
+insert into t (id,a) values (638,12);
+insert into t (id,a) values (638,13);
+insert into t (id,a) values (638,14);
+insert into t (id,a) values (638,15);
+insert into t (id,a) values (638,16);
+insert into t (id,a) values (638,17);
+insert into t (id,a) values (638,18);
+insert into t (id,a) values (638,19);
+insert into t (id,a) values (638,20);
+insert into t (id,a) values (638,21);
+insert into t (id,a) values (638,22);
+insert into t (id,a) values (638,23);
+insert into t (id,a) values (638,24);
+insert into t (id,a) values (638,25);
+insert into t (id,a) values (638,26);
+insert into t (id,a) values (638,27);
+insert into t (id,a) values (638,28);
+insert into t (id,a) values (638,29);
+insert into t (id,a) values (638,30);
+insert into t (id,a) values (638,31);
+insert into t (id,a) values (638,32);
+insert into t (id,a) values (638,33);
+insert into t (id,a) values (638,34);
+insert into t (id,a) values (638,35);
+insert into t (id,a) values (638,36);
+insert into t (id,a) values (638,37);
+insert into t (id,a) values (638,38);
+insert into t (id,a) values (638,39);
+insert into t (id,a) values (638,40);
+insert into t (id,a) values (638,41);
+insert into t (id,a) values (638,42);
+insert into t (id,a) values (638,43);
+insert into t (id,a) values (638,44);
+insert into t (id,a) values (638,45);
+insert into t (id,a) values (638,46);
+insert into t (id,a) values (638,47);
+insert into t (id,a) values (638,48);
+insert into t (id,a) values (638,49);
+insert into t (id,a) values (638,50);
+insert into t (id,a) values (638,51);
+insert into t (id,a) values (638,52);
+insert into t (id,a) values (638,53);
+insert into t (id,a) values (638,54);
+insert into t (id,a) values (638,55);
+insert into t (id,a) values (638,56);
+insert into t (id,a) values (638,57);
+insert into t (id,a) values (638,58);
+insert into t (id,a) values (638,59);
+insert into t (id,a) values (638,60);
+insert into t (id,a) values (638,61);
+insert into t (id,a) values (638,62);
+insert into t (id,a) values (638,63);
+insert into t (id,a) values (638,64);
+insert into t (id,a) values (638,65);
+insert into t (id,a) values (638,66);
+insert into t (id,a) values (638,67);
+insert into t (id,a) values (638,68);
+insert into t (id,a) values (638,69);
+insert into t (id,a) values (638,70);
+insert into t (id,a) values (638,71);
+insert into t (id,a) values (638,72);
+insert into t (id,a) values (638,73);
+insert into t (id,a) values (638,74);
+insert into t (id,a) values (638,75);
+insert into t (id,a) values (638,76);
+insert into t (id,a) values (638,77);
+insert into t (id,a) values (638,78);
+insert into t (id,a) values (638,79);
+insert into t (id,a) values (638,80);
+insert into t (id,a) values (638,81);
+insert into t (id,a) values (638,82);
+insert into t (id,a) values (638,83);
+insert into t (id,a) values (638,84);
+insert into t (id,a) values (638,85);
+insert into t (id,a) values (638,86);
+insert into t (id,a) values (638,87);
+insert into t (id,a) values (638,88);
+insert into t (id,a) values (638,89);
+insert into t (id,a) values (638,90);
+insert into t (id,a) values (638,91);
+insert into t (id,a) values (638,92);
+insert into t (id,a) values (638,93);
+insert into t (id,a) values (638,94);
+insert into t (id,a) values (638,95);
+insert into t (id,a) values (638,96);
+insert into t (id,a) values (638,97);
+insert into t (id,a) values (638,98);
+insert into t (id,a) values (638,99);
+insert into t (id,a) values (639,0);
+insert into t (id,a) values (639,1);
+insert into t (id,a) values (639,2);
+insert into t (id,a) values (639,3);
+insert into t (id,a) values (639,4);
+insert into t (id,a) values (639,5);
+insert into t (id,a) values (639,6);
+insert into t (id,a) values (639,7);
+insert into t (id,a) values (639,8);
+insert into t (id,a) values (639,9);
+insert into t (id,a) values (639,10);
+insert into t (id,a) values (639,11);
+insert into t (id,a) values (639,12);
+insert into t (id,a) values (639,13);
+insert into t (id,a) values (639,14);
+insert into t (id,a) values (639,15);
+insert into t (id,a) values (639,16);
+insert into t (id,a) values (639,17);
+insert into t (id,a) values (639,18);
+insert into t (id,a) values (639,19);
+insert into t (id,a) values (639,20);
+insert into t (id,a) values (639,21);
+insert into t (id,a) values (639,22);
+insert into t (id,a) values (639,23);
+insert into t (id,a) values (639,24);
+insert into t (id,a) values (639,25);
+insert into t (id,a) values (639,26);
+insert into t (id,a) values (639,27);
+insert into t (id,a) values (639,28);
+insert into t (id,a) values (639,29);
+insert into t (id,a) values (639,30);
+insert into t (id,a) values (639,31);
+insert into t (id,a) values (639,32);
+insert into t (id,a) values (639,33);
+insert into t (id,a) values (639,34);
+insert into t (id,a) values (639,35);
+insert into t (id,a) values (639,36);
+insert into t (id,a) values (639,37);
+insert into t (id,a) values (639,38);
+insert into t (id,a) values (639,39);
+insert into t (id,a) values (639,40);
+insert into t (id,a) values (639,41);
+insert into t (id,a) values (639,42);
+insert into t (id,a) values (639,43);
+insert into t (id,a) values (639,44);
+insert into t (id,a) values (639,45);
+insert into t (id,a) values (639,46);
+insert into t (id,a) values (639,47);
+insert into t (id,a) values (639,48);
+insert into t (id,a) values (639,49);
+insert into t (id,a) values (639,50);
+insert into t (id,a) values (639,51);
+insert into t (id,a) values (639,52);
+insert into t (id,a) values (639,53);
+insert into t (id,a) values (639,54);
+insert into t (id,a) values (639,55);
+insert into t (id,a) values (639,56);
+insert into t (id,a) values (639,57);
+insert into t (id,a) values (639,58);
+insert into t (id,a) values (639,59);
+insert into t (id,a) values (639,60);
+insert into t (id,a) values (639,61);
+insert into t (id,a) values (639,62);
+insert into t (id,a) values (639,63);
+insert into t (id,a) values (639,64);
+insert into t (id,a) values (639,65);
+insert into t (id,a) values (639,66);
+insert into t (id,a) values (639,67);
+insert into t (id,a) values (639,68);
+insert into t (id,a) values (639,69);
+insert into t (id,a) values (639,70);
+insert into t (id,a) values (639,71);
+insert into t (id,a) values (639,72);
+insert into t (id,a) values (639,73);
+insert into t (id,a) values (639,74);
+insert into t (id,a) values (639,75);
+insert into t (id,a) values (639,76);
+insert into t (id,a) values (639,77);
+insert into t (id,a) values (639,78);
+insert into t (id,a) values (639,79);
+insert into t (id,a) values (639,80);
+insert into t (id,a) values (639,81);
+insert into t (id,a) values (639,82);
+insert into t (id,a) values (639,83);
+insert into t (id,a) values (639,84);
+insert into t (id,a) values (639,85);
+insert into t (id,a) values (639,86);
+insert into t (id,a) values (639,87);
+insert into t (id,a) values (639,88);
+insert into t (id,a) values (639,89);
+insert into t (id,a) values (639,90);
+insert into t (id,a) values (639,91);
+insert into t (id,a) values (639,92);
+insert into t (id,a) values (639,93);
+insert into t (id,a) values (639,94);
+insert into t (id,a) values (639,95);
+insert into t (id,a) values (639,96);
+insert into t (id,a) values (639,97);
+insert into t (id,a) values (639,98);
+insert into t (id,a) values (639,99);
+insert into t (id,a) values (640,0);
+insert into t (id,a) values (640,1);
+insert into t (id,a) values (640,2);
+insert into t (id,a) values (640,3);
+insert into t (id,a) values (640,4);
+insert into t (id,a) values (640,5);
+insert into t (id,a) values (640,6);
+insert into t (id,a) values (640,7);
+insert into t (id,a) values (640,8);
+insert into t (id,a) values (640,9);
+insert into t (id,a) values (640,10);
+insert into t (id,a) values (640,11);
+insert into t (id,a) values (640,12);
+insert into t (id,a) values (640,13);
+insert into t (id,a) values (640,14);
+insert into t (id,a) values (640,15);
+insert into t (id,a) values (640,16);
+insert into t (id,a) values (640,17);
+insert into t (id,a) values (640,18);
+insert into t (id,a) values (640,19);
+insert into t (id,a) values (640,20);
+insert into t (id,a) values (640,21);
+insert into t (id,a) values (640,22);
+insert into t (id,a) values (640,23);
+insert into t (id,a) values (640,24);
+insert into t (id,a) values (640,25);
+insert into t (id,a) values (640,26);
+insert into t (id,a) values (640,27);
+insert into t (id,a) values (640,28);
+insert into t (id,a) values (640,29);
+insert into t (id,a) values (640,30);
+insert into t (id,a) values (640,31);
+insert into t (id,a) values (640,32);
+insert into t (id,a) values (640,33);
+insert into t (id,a) values (640,34);
+insert into t (id,a) values (640,35);
+insert into t (id,a) values (640,36);
+insert into t (id,a) values (640,37);
+insert into t (id,a) values (640,38);
+insert into t (id,a) values (640,39);
+insert into t (id,a) values (640,40);
+insert into t (id,a) values (640,41);
+insert into t (id,a) values (640,42);
+insert into t (id,a) values (640,43);
+insert into t (id,a) values (640,44);
+insert into t (id,a) values (640,45);
+insert into t (id,a) values (640,46);
+insert into t (id,a) values (640,47);
+insert into t (id,a) values (640,48);
+insert into t (id,a) values (640,49);
+insert into t (id,a) values (640,50);
+insert into t (id,a) values (640,51);
+insert into t (id,a) values (640,52);
+insert into t (id,a) values (640,53);
+insert into t (id,a) values (640,54);
+insert into t (id,a) values (640,55);
+insert into t (id,a) values (640,56);
+insert into t (id,a) values (640,57);
+insert into t (id,a) values (640,58);
+insert into t (id,a) values (640,59);
+insert into t (id,a) values (640,60);
+insert into t (id,a) values (640,61);
+insert into t (id,a) values (640,62);
+insert into t (id,a) values (640,63);
+insert into t (id,a) values (640,64);
+insert into t (id,a) values (640,65);
+insert into t (id,a) values (640,66);
+insert into t (id,a) values (640,67);
+insert into t (id,a) values (640,68);
+insert into t (id,a) values (640,69);
+insert into t (id,a) values (640,70);
+insert into t (id,a) values (640,71);
+insert into t (id,a) values (640,72);
+insert into t (id,a) values (640,73);
+insert into t (id,a) values (640,74);
+insert into t (id,a) values (640,75);
+insert into t (id,a) values (640,76);
+insert into t (id,a) values (640,77);
+insert into t (id,a) values (640,78);
+insert into t (id,a) values (640,79);
+insert into t (id,a) values (640,80);
+insert into t (id,a) values (640,81);
+insert into t (id,a) values (640,82);
+insert into t (id,a) values (640,83);
+insert into t (id,a) values (640,84);
+insert into t (id,a) values (640,85);
+insert into t (id,a) values (640,86);
+insert into t (id,a) values (640,87);
+insert into t (id,a) values (640,88);
+insert into t (id,a) values (640,89);
+insert into t (id,a) values (640,90);
+insert into t (id,a) values (640,91);
+insert into t (id,a) values (640,92);
+insert into t (id,a) values (640,93);
+insert into t (id,a) values (640,94);
+insert into t (id,a) values (640,95);
+insert into t (id,a) values (640,96);
+insert into t (id,a) values (640,97);
+insert into t (id,a) values (640,98);
+insert into t (id,a) values (640,99);
+insert into t (id,a) values (641,0);
+insert into t (id,a) values (641,1);
+insert into t (id,a) values (641,2);
+insert into t (id,a) values (641,3);
+insert into t (id,a) values (641,4);
+insert into t (id,a) values (641,5);
+insert into t (id,a) values (641,6);
+insert into t (id,a) values (641,7);
+insert into t (id,a) values (641,8);
+insert into t (id,a) values (641,9);
+insert into t (id,a) values (641,10);
+insert into t (id,a) values (641,11);
+insert into t (id,a) values (641,12);
+insert into t (id,a) values (641,13);
+insert into t (id,a) values (641,14);
+insert into t (id,a) values (641,15);
+insert into t (id,a) values (641,16);
+insert into t (id,a) values (641,17);
+insert into t (id,a) values (641,18);
+insert into t (id,a) values (641,19);
+insert into t (id,a) values (641,20);
+insert into t (id,a) values (641,21);
+insert into t (id,a) values (641,22);
+insert into t (id,a) values (641,23);
+insert into t (id,a) values (641,24);
+insert into t (id,a) values (641,25);
+insert into t (id,a) values (641,26);
+insert into t (id,a) values (641,27);
+insert into t (id,a) values (641,28);
+insert into t (id,a) values (641,29);
+insert into t (id,a) values (641,30);
+insert into t (id,a) values (641,31);
+insert into t (id,a) values (641,32);
+insert into t (id,a) values (641,33);
+insert into t (id,a) values (641,34);
+insert into t (id,a) values (641,35);
+insert into t (id,a) values (641,36);
+insert into t (id,a) values (641,37);
+insert into t (id,a) values (641,38);
+insert into t (id,a) values (641,39);
+insert into t (id,a) values (641,40);
+insert into t (id,a) values (641,41);
+insert into t (id,a) values (641,42);
+insert into t (id,a) values (641,43);
+insert into t (id,a) values (641,44);
+insert into t (id,a) values (641,45);
+insert into t (id,a) values (641,46);
+insert into t (id,a) values (641,47);
+insert into t (id,a) values (641,48);
+insert into t (id,a) values (641,49);
+insert into t (id,a) values (641,50);
+insert into t (id,a) values (641,51);
+insert into t (id,a) values (641,52);
+insert into t (id,a) values (641,53);
+insert into t (id,a) values (641,54);
+insert into t (id,a) values (641,55);
+insert into t (id,a) values (641,56);
+insert into t (id,a) values (641,57);
+insert into t (id,a) values (641,58);
+insert into t (id,a) values (641,59);
+insert into t (id,a) values (641,60);
+insert into t (id,a) values (641,61);
+insert into t (id,a) values (641,62);
+insert into t (id,a) values (641,63);
+insert into t (id,a) values (641,64);
+insert into t (id,a) values (641,65);
+insert into t (id,a) values (641,66);
+insert into t (id,a) values (641,67);
+insert into t (id,a) values (641,68);
+insert into t (id,a) values (641,69);
+insert into t (id,a) values (641,70);
+insert into t (id,a) values (641,71);
+insert into t (id,a) values (641,72);
+insert into t (id,a) values (641,73);
+insert into t (id,a) values (641,74);
+insert into t (id,a) values (641,75);
+insert into t (id,a) values (641,76);
+insert into t (id,a) values (641,77);
+insert into t (id,a) values (641,78);
+insert into t (id,a) values (641,79);
+insert into t (id,a) values (641,80);
+insert into t (id,a) values (641,81);
+insert into t (id,a) values (641,82);
+insert into t (id,a) values (641,83);
+insert into t (id,a) values (641,84);
+insert into t (id,a) values (641,85);
+insert into t (id,a) values (641,86);
+insert into t (id,a) values (641,87);
+insert into t (id,a) values (641,88);
+insert into t (id,a) values (641,89);
+insert into t (id,a) values (641,90);
+insert into t (id,a) values (641,91);
+insert into t (id,a) values (641,92);
+insert into t (id,a) values (641,93);
+insert into t (id,a) values (641,94);
+insert into t (id,a) values (641,95);
+insert into t (id,a) values (641,96);
+insert into t (id,a) values (641,97);
+insert into t (id,a) values (641,98);
+insert into t (id,a) values (641,99);
+insert into t (id,a) values (642,0);
+insert into t (id,a) values (642,1);
+insert into t (id,a) values (642,2);
+insert into t (id,a) values (642,3);
+insert into t (id,a) values (642,4);
+insert into t (id,a) values (642,5);
+insert into t (id,a) values (642,6);
+insert into t (id,a) values (642,7);
+insert into t (id,a) values (642,8);
+insert into t (id,a) values (642,9);
+insert into t (id,a) values (642,10);
+insert into t (id,a) values (642,11);
+insert into t (id,a) values (642,12);
+insert into t (id,a) values (642,13);
+insert into t (id,a) values (642,14);
+insert into t (id,a) values (642,15);
+insert into t (id,a) values (642,16);
+insert into t (id,a) values (642,17);
+insert into t (id,a) values (642,18);
+insert into t (id,a) values (642,19);
+insert into t (id,a) values (642,20);
+insert into t (id,a) values (642,21);
+insert into t (id,a) values (642,22);
+insert into t (id,a) values (642,23);
+insert into t (id,a) values (642,24);
+insert into t (id,a) values (642,25);
+insert into t (id,a) values (642,26);
+insert into t (id,a) values (642,27);
+insert into t (id,a) values (642,28);
+insert into t (id,a) values (642,29);
+insert into t (id,a) values (642,30);
+insert into t (id,a) values (642,31);
+insert into t (id,a) values (642,32);
+insert into t (id,a) values (642,33);
+insert into t (id,a) values (642,34);
+insert into t (id,a) values (642,35);
+insert into t (id,a) values (642,36);
+insert into t (id,a) values (642,37);
+insert into t (id,a) values (642,38);
+insert into t (id,a) values (642,39);
+insert into t (id,a) values (642,40);
+insert into t (id,a) values (642,41);
+insert into t (id,a) values (642,42);
+insert into t (id,a) values (642,43);
+insert into t (id,a) values (642,44);
+insert into t (id,a) values (642,45);
+insert into t (id,a) values (642,46);
+insert into t (id,a) values (642,47);
+insert into t (id,a) values (642,48);
+insert into t (id,a) values (642,49);
+insert into t (id,a) values (642,50);
+insert into t (id,a) values (642,51);
+insert into t (id,a) values (642,52);
+insert into t (id,a) values (642,53);
+insert into t (id,a) values (642,54);
+insert into t (id,a) values (642,55);
+insert into t (id,a) values (642,56);
+insert into t (id,a) values (642,57);
+insert into t (id,a) values (642,58);
+insert into t (id,a) values (642,59);
+insert into t (id,a) values (642,60);
+insert into t (id,a) values (642,61);
+insert into t (id,a) values (642,62);
+insert into t (id,a) values (642,63);
+insert into t (id,a) values (642,64);
+insert into t (id,a) values (642,65);
+insert into t (id,a) values (642,66);
+insert into t (id,a) values (642,67);
+insert into t (id,a) values (642,68);
+insert into t (id,a) values (642,69);
+insert into t (id,a) values (642,70);
+insert into t (id,a) values (642,71);
+insert into t (id,a) values (642,72);
+insert into t (id,a) values (642,73);
+insert into t (id,a) values (642,74);
+insert into t (id,a) values (642,75);
+insert into t (id,a) values (642,76);
+insert into t (id,a) values (642,77);
+insert into t (id,a) values (642,78);
+insert into t (id,a) values (642,79);
+insert into t (id,a) values (642,80);
+insert into t (id,a) values (642,81);
+insert into t (id,a) values (642,82);
+insert into t (id,a) values (642,83);
+insert into t (id,a) values (642,84);
+insert into t (id,a) values (642,85);
+insert into t (id,a) values (642,86);
+insert into t (id,a) values (642,87);
+insert into t (id,a) values (642,88);
+insert into t (id,a) values (642,89);
+insert into t (id,a) values (642,90);
+insert into t (id,a) values (642,91);
+insert into t (id,a) values (642,92);
+insert into t (id,a) values (642,93);
+insert into t (id,a) values (642,94);
+insert into t (id,a) values (642,95);
+insert into t (id,a) values (642,96);
+insert into t (id,a) values (642,97);
+insert into t (id,a) values (642,98);
+insert into t (id,a) values (642,99);
+insert into t (id,a) values (643,0);
+insert into t (id,a) values (643,1);
+insert into t (id,a) values (643,2);
+insert into t (id,a) values (643,3);
+insert into t (id,a) values (643,4);
+insert into t (id,a) values (643,5);
+insert into t (id,a) values (643,6);
+insert into t (id,a) values (643,7);
+insert into t (id,a) values (643,8);
+insert into t (id,a) values (643,9);
+insert into t (id,a) values (643,10);
+insert into t (id,a) values (643,11);
+insert into t (id,a) values (643,12);
+insert into t (id,a) values (643,13);
+insert into t (id,a) values (643,14);
+insert into t (id,a) values (643,15);
+insert into t (id,a) values (643,16);
+insert into t (id,a) values (643,17);
+insert into t (id,a) values (643,18);
+insert into t (id,a) values (643,19);
+insert into t (id,a) values (643,20);
+insert into t (id,a) values (643,21);
+insert into t (id,a) values (643,22);
+insert into t (id,a) values (643,23);
+insert into t (id,a) values (643,24);
+insert into t (id,a) values (643,25);
+insert into t (id,a) values (643,26);
+insert into t (id,a) values (643,27);
+insert into t (id,a) values (643,28);
+insert into t (id,a) values (643,29);
+insert into t (id,a) values (643,30);
+insert into t (id,a) values (643,31);
+insert into t (id,a) values (643,32);
+insert into t (id,a) values (643,33);
+insert into t (id,a) values (643,34);
+insert into t (id,a) values (643,35);
+insert into t (id,a) values (643,36);
+insert into t (id,a) values (643,37);
+insert into t (id,a) values (643,38);
+insert into t (id,a) values (643,39);
+insert into t (id,a) values (643,40);
+insert into t (id,a) values (643,41);
+insert into t (id,a) values (643,42);
+insert into t (id,a) values (643,43);
+insert into t (id,a) values (643,44);
+insert into t (id,a) values (643,45);
+insert into t (id,a) values (643,46);
+insert into t (id,a) values (643,47);
+insert into t (id,a) values (643,48);
+insert into t (id,a) values (643,49);
+insert into t (id,a) values (643,50);
+insert into t (id,a) values (643,51);
+insert into t (id,a) values (643,52);
+insert into t (id,a) values (643,53);
+insert into t (id,a) values (643,54);
+insert into t (id,a) values (643,55);
+insert into t (id,a) values (643,56);
+insert into t (id,a) values (643,57);
+insert into t (id,a) values (643,58);
+insert into t (id,a) values (643,59);
+insert into t (id,a) values (643,60);
+insert into t (id,a) values (643,61);
+insert into t (id,a) values (643,62);
+insert into t (id,a) values (643,63);
+insert into t (id,a) values (643,64);
+insert into t (id,a) values (643,65);
+insert into t (id,a) values (643,66);
+insert into t (id,a) values (643,67);
+insert into t (id,a) values (643,68);
+insert into t (id,a) values (643,69);
+insert into t (id,a) values (643,70);
+insert into t (id,a) values (643,71);
+insert into t (id,a) values (643,72);
+insert into t (id,a) values (643,73);
+insert into t (id,a) values (643,74);
+insert into t (id,a) values (643,75);
+insert into t (id,a) values (643,76);
+insert into t (id,a) values (643,77);
+insert into t (id,a) values (643,78);
+insert into t (id,a) values (643,79);
+insert into t (id,a) values (643,80);
+insert into t (id,a) values (643,81);
+insert into t (id,a) values (643,82);
+insert into t (id,a) values (643,83);
+insert into t (id,a) values (643,84);
+insert into t (id,a) values (643,85);
+insert into t (id,a) values (643,86);
+insert into t (id,a) values (643,87);
+insert into t (id,a) values (643,88);
+insert into t (id,a) values (643,89);
+insert into t (id,a) values (643,90);
+insert into t (id,a) values (643,91);
+insert into t (id,a) values (643,92);
+insert into t (id,a) values (643,93);
+insert into t (id,a) values (643,94);
+insert into t (id,a) values (643,95);
+insert into t (id,a) values (643,96);
+insert into t (id,a) values (643,97);
+insert into t (id,a) values (643,98);
+insert into t (id,a) values (643,99);
+insert into t (id,a) values (644,0);
+insert into t (id,a) values (644,1);
+insert into t (id,a) values (644,2);
+insert into t (id,a) values (644,3);
+insert into t (id,a) values (644,4);
+insert into t (id,a) values (644,5);
+insert into t (id,a) values (644,6);
+insert into t (id,a) values (644,7);
+insert into t (id,a) values (644,8);
+insert into t (id,a) values (644,9);
+insert into t (id,a) values (644,10);
+insert into t (id,a) values (644,11);
+insert into t (id,a) values (644,12);
+insert into t (id,a) values (644,13);
+insert into t (id,a) values (644,14);
+insert into t (id,a) values (644,15);
+insert into t (id,a) values (644,16);
+insert into t (id,a) values (644,17);
+insert into t (id,a) values (644,18);
+insert into t (id,a) values (644,19);
+insert into t (id,a) values (644,20);
+insert into t (id,a) values (644,21);
+insert into t (id,a) values (644,22);
+insert into t (id,a) values (644,23);
+insert into t (id,a) values (644,24);
+insert into t (id,a) values (644,25);
+insert into t (id,a) values (644,26);
+insert into t (id,a) values (644,27);
+insert into t (id,a) values (644,28);
+insert into t (id,a) values (644,29);
+insert into t (id,a) values (644,30);
+insert into t (id,a) values (644,31);
+insert into t (id,a) values (644,32);
+insert into t (id,a) values (644,33);
+insert into t (id,a) values (644,34);
+insert into t (id,a) values (644,35);
+insert into t (id,a) values (644,36);
+insert into t (id,a) values (644,37);
+insert into t (id,a) values (644,38);
+insert into t (id,a) values (644,39);
+insert into t (id,a) values (644,40);
+insert into t (id,a) values (644,41);
+insert into t (id,a) values (644,42);
+insert into t (id,a) values (644,43);
+insert into t (id,a) values (644,44);
+insert into t (id,a) values (644,45);
+insert into t (id,a) values (644,46);
+insert into t (id,a) values (644,47);
+insert into t (id,a) values (644,48);
+insert into t (id,a) values (644,49);
+insert into t (id,a) values (644,50);
+insert into t (id,a) values (644,51);
+insert into t (id,a) values (644,52);
+insert into t (id,a) values (644,53);
+insert into t (id,a) values (644,54);
+insert into t (id,a) values (644,55);
+insert into t (id,a) values (644,56);
+insert into t (id,a) values (644,57);
+insert into t (id,a) values (644,58);
+insert into t (id,a) values (644,59);
+insert into t (id,a) values (644,60);
+insert into t (id,a) values (644,61);
+insert into t (id,a) values (644,62);
+insert into t (id,a) values (644,63);
+insert into t (id,a) values (644,64);
+insert into t (id,a) values (644,65);
+insert into t (id,a) values (644,66);
+insert into t (id,a) values (644,67);
+insert into t (id,a) values (644,68);
+insert into t (id,a) values (644,69);
+insert into t (id,a) values (644,70);
+insert into t (id,a) values (644,71);
+insert into t (id,a) values (644,72);
+insert into t (id,a) values (644,73);
+insert into t (id,a) values (644,74);
+insert into t (id,a) values (644,75);
+insert into t (id,a) values (644,76);
+insert into t (id,a) values (644,77);
+insert into t (id,a) values (644,78);
+insert into t (id,a) values (644,79);
+insert into t (id,a) values (644,80);
+insert into t (id,a) values (644,81);
+insert into t (id,a) values (644,82);
+insert into t (id,a) values (644,83);
+insert into t (id,a) values (644,84);
+insert into t (id,a) values (644,85);
+insert into t (id,a) values (644,86);
+insert into t (id,a) values (644,87);
+insert into t (id,a) values (644,88);
+insert into t (id,a) values (644,89);
+insert into t (id,a) values (644,90);
+insert into t (id,a) values (644,91);
+insert into t (id,a) values (644,92);
+insert into t (id,a) values (644,93);
+insert into t (id,a) values (644,94);
+insert into t (id,a) values (644,95);
+insert into t (id,a) values (644,96);
+insert into t (id,a) values (644,97);
+insert into t (id,a) values (644,98);
+insert into t (id,a) values (644,99);
+insert into t (id,a) values (645,0);
+insert into t (id,a) values (645,1);
+insert into t (id,a) values (645,2);
+insert into t (id,a) values (645,3);
+insert into t (id,a) values (645,4);
+insert into t (id,a) values (645,5);
+insert into t (id,a) values (645,6);
+insert into t (id,a) values (645,7);
+insert into t (id,a) values (645,8);
+insert into t (id,a) values (645,9);
+insert into t (id,a) values (645,10);
+insert into t (id,a) values (645,11);
+insert into t (id,a) values (645,12);
+insert into t (id,a) values (645,13);
+insert into t (id,a) values (645,14);
+insert into t (id,a) values (645,15);
+insert into t (id,a) values (645,16);
+insert into t (id,a) values (645,17);
+insert into t (id,a) values (645,18);
+insert into t (id,a) values (645,19);
+insert into t (id,a) values (645,20);
+insert into t (id,a) values (645,21);
+insert into t (id,a) values (645,22);
+insert into t (id,a) values (645,23);
+insert into t (id,a) values (645,24);
+insert into t (id,a) values (645,25);
+insert into t (id,a) values (645,26);
+insert into t (id,a) values (645,27);
+insert into t (id,a) values (645,28);
+insert into t (id,a) values (645,29);
+insert into t (id,a) values (645,30);
+insert into t (id,a) values (645,31);
+insert into t (id,a) values (645,32);
+insert into t (id,a) values (645,33);
+insert into t (id,a) values (645,34);
+insert into t (id,a) values (645,35);
+insert into t (id,a) values (645,36);
+insert into t (id,a) values (645,37);
+insert into t (id,a) values (645,38);
+insert into t (id,a) values (645,39);
+insert into t (id,a) values (645,40);
+insert into t (id,a) values (645,41);
+insert into t (id,a) values (645,42);
+insert into t (id,a) values (645,43);
+insert into t (id,a) values (645,44);
+insert into t (id,a) values (645,45);
+insert into t (id,a) values (645,46);
+insert into t (id,a) values (645,47);
+insert into t (id,a) values (645,48);
+insert into t (id,a) values (645,49);
+insert into t (id,a) values (645,50);
+insert into t (id,a) values (645,51);
+insert into t (id,a) values (645,52);
+insert into t (id,a) values (645,53);
+insert into t (id,a) values (645,54);
+insert into t (id,a) values (645,55);
+insert into t (id,a) values (645,56);
+insert into t (id,a) values (645,57);
+insert into t (id,a) values (645,58);
+insert into t (id,a) values (645,59);
+insert into t (id,a) values (645,60);
+insert into t (id,a) values (645,61);
+insert into t (id,a) values (645,62);
+insert into t (id,a) values (645,63);
+insert into t (id,a) values (645,64);
+insert into t (id,a) values (645,65);
+insert into t (id,a) values (645,66);
+insert into t (id,a) values (645,67);
+insert into t (id,a) values (645,68);
+insert into t (id,a) values (645,69);
+insert into t (id,a) values (645,70);
+insert into t (id,a) values (645,71);
+insert into t (id,a) values (645,72);
+insert into t (id,a) values (645,73);
+insert into t (id,a) values (645,74);
+insert into t (id,a) values (645,75);
+insert into t (id,a) values (645,76);
+insert into t (id,a) values (645,77);
+insert into t (id,a) values (645,78);
+insert into t (id,a) values (645,79);
+insert into t (id,a) values (645,80);
+insert into t (id,a) values (645,81);
+insert into t (id,a) values (645,82);
+insert into t (id,a) values (645,83);
+insert into t (id,a) values (645,84);
+insert into t (id,a) values (645,85);
+insert into t (id,a) values (645,86);
+insert into t (id,a) values (645,87);
+insert into t (id,a) values (645,88);
+insert into t (id,a) values (645,89);
+insert into t (id,a) values (645,90);
+insert into t (id,a) values (645,91);
+insert into t (id,a) values (645,92);
+insert into t (id,a) values (645,93);
+insert into t (id,a) values (645,94);
+insert into t (id,a) values (645,95);
+insert into t (id,a) values (645,96);
+insert into t (id,a) values (645,97);
+insert into t (id,a) values (645,98);
+insert into t (id,a) values (645,99);
+insert into t (id,a) values (646,0);
+insert into t (id,a) values (646,1);
+insert into t (id,a) values (646,2);
+insert into t (id,a) values (646,3);
+insert into t (id,a) values (646,4);
+insert into t (id,a) values (646,5);
+insert into t (id,a) values (646,6);
+insert into t (id,a) values (646,7);
+insert into t (id,a) values (646,8);
+insert into t (id,a) values (646,9);
+insert into t (id,a) values (646,10);
+insert into t (id,a) values (646,11);
+insert into t (id,a) values (646,12);
+insert into t (id,a) values (646,13);
+insert into t (id,a) values (646,14);
+insert into t (id,a) values (646,15);
+insert into t (id,a) values (646,16);
+insert into t (id,a) values (646,17);
+insert into t (id,a) values (646,18);
+insert into t (id,a) values (646,19);
+insert into t (id,a) values (646,20);
+insert into t (id,a) values (646,21);
+insert into t (id,a) values (646,22);
+insert into t (id,a) values (646,23);
+insert into t (id,a) values (646,24);
+insert into t (id,a) values (646,25);
+insert into t (id,a) values (646,26);
+insert into t (id,a) values (646,27);
+insert into t (id,a) values (646,28);
+insert into t (id,a) values (646,29);
+insert into t (id,a) values (646,30);
+insert into t (id,a) values (646,31);
+insert into t (id,a) values (646,32);
+insert into t (id,a) values (646,33);
+insert into t (id,a) values (646,34);
+insert into t (id,a) values (646,35);
+insert into t (id,a) values (646,36);
+insert into t (id,a) values (646,37);
+insert into t (id,a) values (646,38);
+insert into t (id,a) values (646,39);
+insert into t (id,a) values (646,40);
+insert into t (id,a) values (646,41);
+insert into t (id,a) values (646,42);
+insert into t (id,a) values (646,43);
+insert into t (id,a) values (646,44);
+insert into t (id,a) values (646,45);
+insert into t (id,a) values (646,46);
+insert into t (id,a) values (646,47);
+insert into t (id,a) values (646,48);
+insert into t (id,a) values (646,49);
+insert into t (id,a) values (646,50);
+insert into t (id,a) values (646,51);
+insert into t (id,a) values (646,52);
+insert into t (id,a) values (646,53);
+insert into t (id,a) values (646,54);
+insert into t (id,a) values (646,55);
+insert into t (id,a) values (646,56);
+insert into t (id,a) values (646,57);
+insert into t (id,a) values (646,58);
+insert into t (id,a) values (646,59);
+insert into t (id,a) values (646,60);
+insert into t (id,a) values (646,61);
+insert into t (id,a) values (646,62);
+insert into t (id,a) values (646,63);
+insert into t (id,a) values (646,64);
+insert into t (id,a) values (646,65);
+insert into t (id,a) values (646,66);
+insert into t (id,a) values (646,67);
+insert into t (id,a) values (646,68);
+insert into t (id,a) values (646,69);
+insert into t (id,a) values (646,70);
+insert into t (id,a) values (646,71);
+insert into t (id,a) values (646,72);
+insert into t (id,a) values (646,73);
+insert into t (id,a) values (646,74);
+insert into t (id,a) values (646,75);
+insert into t (id,a) values (646,76);
+insert into t (id,a) values (646,77);
+insert into t (id,a) values (646,78);
+insert into t (id,a) values (646,79);
+insert into t (id,a) values (646,80);
+insert into t (id,a) values (646,81);
+insert into t (id,a) values (646,82);
+insert into t (id,a) values (646,83);
+insert into t (id,a) values (646,84);
+insert into t (id,a) values (646,85);
+insert into t (id,a) values (646,86);
+insert into t (id,a) values (646,87);
+insert into t (id,a) values (646,88);
+insert into t (id,a) values (646,89);
+insert into t (id,a) values (646,90);
+insert into t (id,a) values (646,91);
+insert into t (id,a) values (646,92);
+insert into t (id,a) values (646,93);
+insert into t (id,a) values (646,94);
+insert into t (id,a) values (646,95);
+insert into t (id,a) values (646,96);
+insert into t (id,a) values (646,97);
+insert into t (id,a) values (646,98);
+insert into t (id,a) values (646,99);
+insert into t (id,a) values (647,0);
+insert into t (id,a) values (647,1);
+insert into t (id,a) values (647,2);
+insert into t (id,a) values (647,3);
+insert into t (id,a) values (647,4);
+insert into t (id,a) values (647,5);
+insert into t (id,a) values (647,6);
+insert into t (id,a) values (647,7);
+insert into t (id,a) values (647,8);
+insert into t (id,a) values (647,9);
+insert into t (id,a) values (647,10);
+insert into t (id,a) values (647,11);
+insert into t (id,a) values (647,12);
+insert into t (id,a) values (647,13);
+insert into t (id,a) values (647,14);
+insert into t (id,a) values (647,15);
+insert into t (id,a) values (647,16);
+insert into t (id,a) values (647,17);
+insert into t (id,a) values (647,18);
+insert into t (id,a) values (647,19);
+insert into t (id,a) values (647,20);
+insert into t (id,a) values (647,21);
+insert into t (id,a) values (647,22);
+insert into t (id,a) values (647,23);
+insert into t (id,a) values (647,24);
+insert into t (id,a) values (647,25);
+insert into t (id,a) values (647,26);
+insert into t (id,a) values (647,27);
+insert into t (id,a) values (647,28);
+insert into t (id,a) values (647,29);
+insert into t (id,a) values (647,30);
+insert into t (id,a) values (647,31);
+insert into t (id,a) values (647,32);
+insert into t (id,a) values (647,33);
+insert into t (id,a) values (647,34);
+insert into t (id,a) values (647,35);
+insert into t (id,a) values (647,36);
+insert into t (id,a) values (647,37);
+insert into t (id,a) values (647,38);
+insert into t (id,a) values (647,39);
+insert into t (id,a) values (647,40);
+insert into t (id,a) values (647,41);
+insert into t (id,a) values (647,42);
+insert into t (id,a) values (647,43);
+insert into t (id,a) values (647,44);
+insert into t (id,a) values (647,45);
+insert into t (id,a) values (647,46);
+insert into t (id,a) values (647,47);
+insert into t (id,a) values (647,48);
+insert into t (id,a) values (647,49);
+insert into t (id,a) values (647,50);
+insert into t (id,a) values (647,51);
+insert into t (id,a) values (647,52);
+insert into t (id,a) values (647,53);
+insert into t (id,a) values (647,54);
+insert into t (id,a) values (647,55);
+insert into t (id,a) values (647,56);
+insert into t (id,a) values (647,57);
+insert into t (id,a) values (647,58);
+insert into t (id,a) values (647,59);
+insert into t (id,a) values (647,60);
+insert into t (id,a) values (647,61);
+insert into t (id,a) values (647,62);
+insert into t (id,a) values (647,63);
+insert into t (id,a) values (647,64);
+insert into t (id,a) values (647,65);
+insert into t (id,a) values (647,66);
+insert into t (id,a) values (647,67);
+insert into t (id,a) values (647,68);
+insert into t (id,a) values (647,69);
+insert into t (id,a) values (647,70);
+insert into t (id,a) values (647,71);
+insert into t (id,a) values (647,72);
+insert into t (id,a) values (647,73);
+insert into t (id,a) values (647,74);
+insert into t (id,a) values (647,75);
+insert into t (id,a) values (647,76);
+insert into t (id,a) values (647,77);
+insert into t (id,a) values (647,78);
+insert into t (id,a) values (647,79);
+insert into t (id,a) values (647,80);
+insert into t (id,a) values (647,81);
+insert into t (id,a) values (647,82);
+insert into t (id,a) values (647,83);
+insert into t (id,a) values (647,84);
+insert into t (id,a) values (647,85);
+insert into t (id,a) values (647,86);
+insert into t (id,a) values (647,87);
+insert into t (id,a) values (647,88);
+insert into t (id,a) values (647,89);
+insert into t (id,a) values (647,90);
+insert into t (id,a) values (647,91);
+insert into t (id,a) values (647,92);
+insert into t (id,a) values (647,93);
+insert into t (id,a) values (647,94);
+insert into t (id,a) values (647,95);
+insert into t (id,a) values (647,96);
+insert into t (id,a) values (647,97);
+insert into t (id,a) values (647,98);
+insert into t (id,a) values (647,99);
+insert into t (id,a) values (648,0);
+insert into t (id,a) values (648,1);
+insert into t (id,a) values (648,2);
+insert into t (id,a) values (648,3);
+insert into t (id,a) values (648,4);
+insert into t (id,a) values (648,5);
+insert into t (id,a) values (648,6);
+insert into t (id,a) values (648,7);
+insert into t (id,a) values (648,8);
+insert into t (id,a) values (648,9);
+insert into t (id,a) values (648,10);
+insert into t (id,a) values (648,11);
+insert into t (id,a) values (648,12);
+insert into t (id,a) values (648,13);
+insert into t (id,a) values (648,14);
+insert into t (id,a) values (648,15);
+insert into t (id,a) values (648,16);
+insert into t (id,a) values (648,17);
+insert into t (id,a) values (648,18);
+insert into t (id,a) values (648,19);
+insert into t (id,a) values (648,20);
+insert into t (id,a) values (648,21);
+insert into t (id,a) values (648,22);
+insert into t (id,a) values (648,23);
+insert into t (id,a) values (648,24);
+insert into t (id,a) values (648,25);
+insert into t (id,a) values (648,26);
+insert into t (id,a) values (648,27);
+insert into t (id,a) values (648,28);
+insert into t (id,a) values (648,29);
+insert into t (id,a) values (648,30);
+insert into t (id,a) values (648,31);
+insert into t (id,a) values (648,32);
+insert into t (id,a) values (648,33);
+insert into t (id,a) values (648,34);
+insert into t (id,a) values (648,35);
+insert into t (id,a) values (648,36);
+insert into t (id,a) values (648,37);
+insert into t (id,a) values (648,38);
+insert into t (id,a) values (648,39);
+insert into t (id,a) values (648,40);
+insert into t (id,a) values (648,41);
+insert into t (id,a) values (648,42);
+insert into t (id,a) values (648,43);
+insert into t (id,a) values (648,44);
+insert into t (id,a) values (648,45);
+insert into t (id,a) values (648,46);
+insert into t (id,a) values (648,47);
+insert into t (id,a) values (648,48);
+insert into t (id,a) values (648,49);
+insert into t (id,a) values (648,50);
+insert into t (id,a) values (648,51);
+insert into t (id,a) values (648,52);
+insert into t (id,a) values (648,53);
+insert into t (id,a) values (648,54);
+insert into t (id,a) values (648,55);
+insert into t (id,a) values (648,56);
+insert into t (id,a) values (648,57);
+insert into t (id,a) values (648,58);
+insert into t (id,a) values (648,59);
+insert into t (id,a) values (648,60);
+insert into t (id,a) values (648,61);
+insert into t (id,a) values (648,62);
+insert into t (id,a) values (648,63);
+insert into t (id,a) values (648,64);
+insert into t (id,a) values (648,65);
+insert into t (id,a) values (648,66);
+insert into t (id,a) values (648,67);
+insert into t (id,a) values (648,68);
+insert into t (id,a) values (648,69);
+insert into t (id,a) values (648,70);
+insert into t (id,a) values (648,71);
+insert into t (id,a) values (648,72);
+insert into t (id,a) values (648,73);
+insert into t (id,a) values (648,74);
+insert into t (id,a) values (648,75);
+insert into t (id,a) values (648,76);
+insert into t (id,a) values (648,77);
+insert into t (id,a) values (648,78);
+insert into t (id,a) values (648,79);
+insert into t (id,a) values (648,80);
+insert into t (id,a) values (648,81);
+insert into t (id,a) values (648,82);
+insert into t (id,a) values (648,83);
+insert into t (id,a) values (648,84);
+insert into t (id,a) values (648,85);
+insert into t (id,a) values (648,86);
+insert into t (id,a) values (648,87);
+insert into t (id,a) values (648,88);
+insert into t (id,a) values (648,89);
+insert into t (id,a) values (648,90);
+insert into t (id,a) values (648,91);
+insert into t (id,a) values (648,92);
+insert into t (id,a) values (648,93);
+insert into t (id,a) values (648,94);
+insert into t (id,a) values (648,95);
+insert into t (id,a) values (648,96);
+insert into t (id,a) values (648,97);
+insert into t (id,a) values (648,98);
+insert into t (id,a) values (648,99);
+insert into t (id,a) values (649,0);
+insert into t (id,a) values (649,1);
+insert into t (id,a) values (649,2);
+insert into t (id,a) values (649,3);
+insert into t (id,a) values (649,4);
+insert into t (id,a) values (649,5);
+insert into t (id,a) values (649,6);
+insert into t (id,a) values (649,7);
+insert into t (id,a) values (649,8);
+insert into t (id,a) values (649,9);
+insert into t (id,a) values (649,10);
+insert into t (id,a) values (649,11);
+insert into t (id,a) values (649,12);
+insert into t (id,a) values (649,13);
+insert into t (id,a) values (649,14);
+insert into t (id,a) values (649,15);
+insert into t (id,a) values (649,16);
+insert into t (id,a) values (649,17);
+insert into t (id,a) values (649,18);
+insert into t (id,a) values (649,19);
+insert into t (id,a) values (649,20);
+insert into t (id,a) values (649,21);
+insert into t (id,a) values (649,22);
+insert into t (id,a) values (649,23);
+insert into t (id,a) values (649,24);
+insert into t (id,a) values (649,25);
+insert into t (id,a) values (649,26);
+insert into t (id,a) values (649,27);
+insert into t (id,a) values (649,28);
+insert into t (id,a) values (649,29);
+insert into t (id,a) values (649,30);
+insert into t (id,a) values (649,31);
+insert into t (id,a) values (649,32);
+insert into t (id,a) values (649,33);
+insert into t (id,a) values (649,34);
+insert into t (id,a) values (649,35);
+insert into t (id,a) values (649,36);
+insert into t (id,a) values (649,37);
+insert into t (id,a) values (649,38);
+insert into t (id,a) values (649,39);
+insert into t (id,a) values (649,40);
+insert into t (id,a) values (649,41);
+insert into t (id,a) values (649,42);
+insert into t (id,a) values (649,43);
+insert into t (id,a) values (649,44);
+insert into t (id,a) values (649,45);
+insert into t (id,a) values (649,46);
+insert into t (id,a) values (649,47);
+insert into t (id,a) values (649,48);
+insert into t (id,a) values (649,49);
+insert into t (id,a) values (649,50);
+insert into t (id,a) values (649,51);
+insert into t (id,a) values (649,52);
+insert into t (id,a) values (649,53);
+insert into t (id,a) values (649,54);
+insert into t (id,a) values (649,55);
+insert into t (id,a) values (649,56);
+insert into t (id,a) values (649,57);
+insert into t (id,a) values (649,58);
+insert into t (id,a) values (649,59);
+insert into t (id,a) values (649,60);
+insert into t (id,a) values (649,61);
+insert into t (id,a) values (649,62);
+insert into t (id,a) values (649,63);
+insert into t (id,a) values (649,64);
+insert into t (id,a) values (649,65);
+insert into t (id,a) values (649,66);
+insert into t (id,a) values (649,67);
+insert into t (id,a) values (649,68);
+insert into t (id,a) values (649,69);
+insert into t (id,a) values (649,70);
+insert into t (id,a) values (649,71);
+insert into t (id,a) values (649,72);
+insert into t (id,a) values (649,73);
+insert into t (id,a) values (649,74);
+insert into t (id,a) values (649,75);
+insert into t (id,a) values (649,76);
+insert into t (id,a) values (649,77);
+insert into t (id,a) values (649,78);
+insert into t (id,a) values (649,79);
+insert into t (id,a) values (649,80);
+insert into t (id,a) values (649,81);
+insert into t (id,a) values (649,82);
+insert into t (id,a) values (649,83);
+insert into t (id,a) values (649,84);
+insert into t (id,a) values (649,85);
+insert into t (id,a) values (649,86);
+insert into t (id,a) values (649,87);
+insert into t (id,a) values (649,88);
+insert into t (id,a) values (649,89);
+insert into t (id,a) values (649,90);
+insert into t (id,a) values (649,91);
+insert into t (id,a) values (649,92);
+insert into t (id,a) values (649,93);
+insert into t (id,a) values (649,94);
+insert into t (id,a) values (649,95);
+insert into t (id,a) values (649,96);
+insert into t (id,a) values (649,97);
+insert into t (id,a) values (649,98);
+insert into t (id,a) values (649,99);
+insert into t (id,a) values (650,0);
+insert into t (id,a) values (650,1);
+insert into t (id,a) values (650,2);
+insert into t (id,a) values (650,3);
+insert into t (id,a) values (650,4);
+insert into t (id,a) values (650,5);
+insert into t (id,a) values (650,6);
+insert into t (id,a) values (650,7);
+insert into t (id,a) values (650,8);
+insert into t (id,a) values (650,9);
+insert into t (id,a) values (650,10);
+insert into t (id,a) values (650,11);
+insert into t (id,a) values (650,12);
+insert into t (id,a) values (650,13);
+insert into t (id,a) values (650,14);
+insert into t (id,a) values (650,15);
+insert into t (id,a) values (650,16);
+insert into t (id,a) values (650,17);
+insert into t (id,a) values (650,18);
+insert into t (id,a) values (650,19);
+insert into t (id,a) values (650,20);
+insert into t (id,a) values (650,21);
+insert into t (id,a) values (650,22);
+insert into t (id,a) values (650,23);
+insert into t (id,a) values (650,24);
+insert into t (id,a) values (650,25);
+insert into t (id,a) values (650,26);
+insert into t (id,a) values (650,27);
+insert into t (id,a) values (650,28);
+insert into t (id,a) values (650,29);
+insert into t (id,a) values (650,30);
+insert into t (id,a) values (650,31);
+insert into t (id,a) values (650,32);
+insert into t (id,a) values (650,33);
+insert into t (id,a) values (650,34);
+insert into t (id,a) values (650,35);
+insert into t (id,a) values (650,36);
+insert into t (id,a) values (650,37);
+insert into t (id,a) values (650,38);
+insert into t (id,a) values (650,39);
+insert into t (id,a) values (650,40);
+insert into t (id,a) values (650,41);
+insert into t (id,a) values (650,42);
+insert into t (id,a) values (650,43);
+insert into t (id,a) values (650,44);
+insert into t (id,a) values (650,45);
+insert into t (id,a) values (650,46);
+insert into t (id,a) values (650,47);
+insert into t (id,a) values (650,48);
+insert into t (id,a) values (650,49);
+insert into t (id,a) values (650,50);
+insert into t (id,a) values (650,51);
+insert into t (id,a) values (650,52);
+insert into t (id,a) values (650,53);
+insert into t (id,a) values (650,54);
+insert into t (id,a) values (650,55);
+insert into t (id,a) values (650,56);
+insert into t (id,a) values (650,57);
+insert into t (id,a) values (650,58);
+insert into t (id,a) values (650,59);
+insert into t (id,a) values (650,60);
+insert into t (id,a) values (650,61);
+insert into t (id,a) values (650,62);
+insert into t (id,a) values (650,63);
+insert into t (id,a) values (650,64);
+insert into t (id,a) values (650,65);
+insert into t (id,a) values (650,66);
+insert into t (id,a) values (650,67);
+insert into t (id,a) values (650,68);
+insert into t (id,a) values (650,69);
+insert into t (id,a) values (650,70);
+insert into t (id,a) values (650,71);
+insert into t (id,a) values (650,72);
+insert into t (id,a) values (650,73);
+insert into t (id,a) values (650,74);
+insert into t (id,a) values (650,75);
+insert into t (id,a) values (650,76);
+insert into t (id,a) values (650,77);
+insert into t (id,a) values (650,78);
+insert into t (id,a) values (650,79);
+insert into t (id,a) values (650,80);
+insert into t (id,a) values (650,81);
+insert into t (id,a) values (650,82);
+insert into t (id,a) values (650,83);
+insert into t (id,a) values (650,84);
+insert into t (id,a) values (650,85);
+insert into t (id,a) values (650,86);
+insert into t (id,a) values (650,87);
+insert into t (id,a) values (650,88);
+insert into t (id,a) values (650,89);
+insert into t (id,a) values (650,90);
+insert into t (id,a) values (650,91);
+insert into t (id,a) values (650,92);
+insert into t (id,a) values (650,93);
+insert into t (id,a) values (650,94);
+insert into t (id,a) values (650,95);
+insert into t (id,a) values (650,96);
+insert into t (id,a) values (650,97);
+insert into t (id,a) values (650,98);
+insert into t (id,a) values (650,99);
+insert into t (id,a) values (651,0);
+insert into t (id,a) values (651,1);
+insert into t (id,a) values (651,2);
+insert into t (id,a) values (651,3);
+insert into t (id,a) values (651,4);
+insert into t (id,a) values (651,5);
+insert into t (id,a) values (651,6);
+insert into t (id,a) values (651,7);
+insert into t (id,a) values (651,8);
+insert into t (id,a) values (651,9);
+insert into t (id,a) values (651,10);
+insert into t (id,a) values (651,11);
+insert into t (id,a) values (651,12);
+insert into t (id,a) values (651,13);
+insert into t (id,a) values (651,14);
+insert into t (id,a) values (651,15);
+insert into t (id,a) values (651,16);
+insert into t (id,a) values (651,17);
+insert into t (id,a) values (651,18);
+insert into t (id,a) values (651,19);
+insert into t (id,a) values (651,20);
+insert into t (id,a) values (651,21);
+insert into t (id,a) values (651,22);
+insert into t (id,a) values (651,23);
+insert into t (id,a) values (651,24);
+insert into t (id,a) values (651,25);
+insert into t (id,a) values (651,26);
+insert into t (id,a) values (651,27);
+insert into t (id,a) values (651,28);
+insert into t (id,a) values (651,29);
+insert into t (id,a) values (651,30);
+insert into t (id,a) values (651,31);
+insert into t (id,a) values (651,32);
+insert into t (id,a) values (651,33);
+insert into t (id,a) values (651,34);
+insert into t (id,a) values (651,35);
+insert into t (id,a) values (651,36);
+insert into t (id,a) values (651,37);
+insert into t (id,a) values (651,38);
+insert into t (id,a) values (651,39);
+insert into t (id,a) values (651,40);
+insert into t (id,a) values (651,41);
+insert into t (id,a) values (651,42);
+insert into t (id,a) values (651,43);
+insert into t (id,a) values (651,44);
+insert into t (id,a) values (651,45);
+insert into t (id,a) values (651,46);
+insert into t (id,a) values (651,47);
+insert into t (id,a) values (651,48);
+insert into t (id,a) values (651,49);
+insert into t (id,a) values (651,50);
+insert into t (id,a) values (651,51);
+insert into t (id,a) values (651,52);
+insert into t (id,a) values (651,53);
+insert into t (id,a) values (651,54);
+insert into t (id,a) values (651,55);
+insert into t (id,a) values (651,56);
+insert into t (id,a) values (651,57);
+insert into t (id,a) values (651,58);
+insert into t (id,a) values (651,59);
+insert into t (id,a) values (651,60);
+insert into t (id,a) values (651,61);
+insert into t (id,a) values (651,62);
+insert into t (id,a) values (651,63);
+insert into t (id,a) values (651,64);
+insert into t (id,a) values (651,65);
+insert into t (id,a) values (651,66);
+insert into t (id,a) values (651,67);
+insert into t (id,a) values (651,68);
+insert into t (id,a) values (651,69);
+insert into t (id,a) values (651,70);
+insert into t (id,a) values (651,71);
+insert into t (id,a) values (651,72);
+insert into t (id,a) values (651,73);
+insert into t (id,a) values (651,74);
+insert into t (id,a) values (651,75);
+insert into t (id,a) values (651,76);
+insert into t (id,a) values (651,77);
+insert into t (id,a) values (651,78);
+insert into t (id,a) values (651,79);
+insert into t (id,a) values (651,80);
+insert into t (id,a) values (651,81);
+insert into t (id,a) values (651,82);
+insert into t (id,a) values (651,83);
+insert into t (id,a) values (651,84);
+insert into t (id,a) values (651,85);
+insert into t (id,a) values (651,86);
+insert into t (id,a) values (651,87);
+insert into t (id,a) values (651,88);
+insert into t (id,a) values (651,89);
+insert into t (id,a) values (651,90);
+insert into t (id,a) values (651,91);
+insert into t (id,a) values (651,92);
+insert into t (id,a) values (651,93);
+insert into t (id,a) values (651,94);
+insert into t (id,a) values (651,95);
+insert into t (id,a) values (651,96);
+insert into t (id,a) values (651,97);
+insert into t (id,a) values (651,98);
+insert into t (id,a) values (651,99);
+insert into t (id,a) values (652,0);
+insert into t (id,a) values (652,1);
+insert into t (id,a) values (652,2);
+insert into t (id,a) values (652,3);
+insert into t (id,a) values (652,4);
+insert into t (id,a) values (652,5);
+insert into t (id,a) values (652,6);
+insert into t (id,a) values (652,7);
+insert into t (id,a) values (652,8);
+insert into t (id,a) values (652,9);
+insert into t (id,a) values (652,10);
+insert into t (id,a) values (652,11);
+insert into t (id,a) values (652,12);
+insert into t (id,a) values (652,13);
+insert into t (id,a) values (652,14);
+insert into t (id,a) values (652,15);
+insert into t (id,a) values (652,16);
+insert into t (id,a) values (652,17);
+insert into t (id,a) values (652,18);
+insert into t (id,a) values (652,19);
+insert into t (id,a) values (652,20);
+insert into t (id,a) values (652,21);
+insert into t (id,a) values (652,22);
+insert into t (id,a) values (652,23);
+insert into t (id,a) values (652,24);
+insert into t (id,a) values (652,25);
+insert into t (id,a) values (652,26);
+insert into t (id,a) values (652,27);
+insert into t (id,a) values (652,28);
+insert into t (id,a) values (652,29);
+insert into t (id,a) values (652,30);
+insert into t (id,a) values (652,31);
+insert into t (id,a) values (652,32);
+insert into t (id,a) values (652,33);
+insert into t (id,a) values (652,34);
+insert into t (id,a) values (652,35);
+insert into t (id,a) values (652,36);
+insert into t (id,a) values (652,37);
+insert into t (id,a) values (652,38);
+insert into t (id,a) values (652,39);
+insert into t (id,a) values (652,40);
+insert into t (id,a) values (652,41);
+insert into t (id,a) values (652,42);
+insert into t (id,a) values (652,43);
+insert into t (id,a) values (652,44);
+insert into t (id,a) values (652,45);
+insert into t (id,a) values (652,46);
+insert into t (id,a) values (652,47);
+insert into t (id,a) values (652,48);
+insert into t (id,a) values (652,49);
+insert into t (id,a) values (652,50);
+insert into t (id,a) values (652,51);
+insert into t (id,a) values (652,52);
+insert into t (id,a) values (652,53);
+insert into t (id,a) values (652,54);
+insert into t (id,a) values (652,55);
+insert into t (id,a) values (652,56);
+insert into t (id,a) values (652,57);
+insert into t (id,a) values (652,58);
+insert into t (id,a) values (652,59);
+insert into t (id,a) values (652,60);
+insert into t (id,a) values (652,61);
+insert into t (id,a) values (652,62);
+insert into t (id,a) values (652,63);
+insert into t (id,a) values (652,64);
+insert into t (id,a) values (652,65);
+insert into t (id,a) values (652,66);
+insert into t (id,a) values (652,67);
+insert into t (id,a) values (652,68);
+insert into t (id,a) values (652,69);
+insert into t (id,a) values (652,70);
+insert into t (id,a) values (652,71);
+insert into t (id,a) values (652,72);
+insert into t (id,a) values (652,73);
+insert into t (id,a) values (652,74);
+insert into t (id,a) values (652,75);
+insert into t (id,a) values (652,76);
+insert into t (id,a) values (652,77);
+insert into t (id,a) values (652,78);
+insert into t (id,a) values (652,79);
+insert into t (id,a) values (652,80);
+insert into t (id,a) values (652,81);
+insert into t (id,a) values (652,82);
+insert into t (id,a) values (652,83);
+insert into t (id,a) values (652,84);
+insert into t (id,a) values (652,85);
+insert into t (id,a) values (652,86);
+insert into t (id,a) values (652,87);
+insert into t (id,a) values (652,88);
+insert into t (id,a) values (652,89);
+insert into t (id,a) values (652,90);
+insert into t (id,a) values (652,91);
+insert into t (id,a) values (652,92);
+insert into t (id,a) values (652,93);
+insert into t (id,a) values (652,94);
+insert into t (id,a) values (652,95);
+insert into t (id,a) values (652,96);
+insert into t (id,a) values (652,97);
+insert into t (id,a) values (652,98);
+insert into t (id,a) values (652,99);
+insert into t (id,a) values (653,0);
+insert into t (id,a) values (653,1);
+insert into t (id,a) values (653,2);
+insert into t (id,a) values (653,3);
+insert into t (id,a) values (653,4);
+insert into t (id,a) values (653,5);
+insert into t (id,a) values (653,6);
+insert into t (id,a) values (653,7);
+insert into t (id,a) values (653,8);
+insert into t (id,a) values (653,9);
+insert into t (id,a) values (653,10);
+insert into t (id,a) values (653,11);
+insert into t (id,a) values (653,12);
+insert into t (id,a) values (653,13);
+insert into t (id,a) values (653,14);
+insert into t (id,a) values (653,15);
+insert into t (id,a) values (653,16);
+insert into t (id,a) values (653,17);
+insert into t (id,a) values (653,18);
+insert into t (id,a) values (653,19);
+insert into t (id,a) values (653,20);
+insert into t (id,a) values (653,21);
+insert into t (id,a) values (653,22);
+insert into t (id,a) values (653,23);
+insert into t (id,a) values (653,24);
+insert into t (id,a) values (653,25);
+insert into t (id,a) values (653,26);
+insert into t (id,a) values (653,27);
+insert into t (id,a) values (653,28);
+insert into t (id,a) values (653,29);
+insert into t (id,a) values (653,30);
+insert into t (id,a) values (653,31);
+insert into t (id,a) values (653,32);
+insert into t (id,a) values (653,33);
+insert into t (id,a) values (653,34);
+insert into t (id,a) values (653,35);
+insert into t (id,a) values (653,36);
+insert into t (id,a) values (653,37);
+insert into t (id,a) values (653,38);
+insert into t (id,a) values (653,39);
+insert into t (id,a) values (653,40);
+insert into t (id,a) values (653,41);
+insert into t (id,a) values (653,42);
+insert into t (id,a) values (653,43);
+insert into t (id,a) values (653,44);
+insert into t (id,a) values (653,45);
+insert into t (id,a) values (653,46);
+insert into t (id,a) values (653,47);
+insert into t (id,a) values (653,48);
+insert into t (id,a) values (653,49);
+insert into t (id,a) values (653,50);
+insert into t (id,a) values (653,51);
+insert into t (id,a) values (653,52);
+insert into t (id,a) values (653,53);
+insert into t (id,a) values (653,54);
+insert into t (id,a) values (653,55);
+insert into t (id,a) values (653,56);
+insert into t (id,a) values (653,57);
+insert into t (id,a) values (653,58);
+insert into t (id,a) values (653,59);
+insert into t (id,a) values (653,60);
+insert into t (id,a) values (653,61);
+insert into t (id,a) values (653,62);
+insert into t (id,a) values (653,63);
+insert into t (id,a) values (653,64);
+insert into t (id,a) values (653,65);
+insert into t (id,a) values (653,66);
+insert into t (id,a) values (653,67);
+insert into t (id,a) values (653,68);
+insert into t (id,a) values (653,69);
+insert into t (id,a) values (653,70);
+insert into t (id,a) values (653,71);
+insert into t (id,a) values (653,72);
+insert into t (id,a) values (653,73);
+insert into t (id,a) values (653,74);
+insert into t (id,a) values (653,75);
+insert into t (id,a) values (653,76);
+insert into t (id,a) values (653,77);
+insert into t (id,a) values (653,78);
+insert into t (id,a) values (653,79);
+insert into t (id,a) values (653,80);
+insert into t (id,a) values (653,81);
+insert into t (id,a) values (653,82);
+insert into t (id,a) values (653,83);
+insert into t (id,a) values (653,84);
+insert into t (id,a) values (653,85);
+insert into t (id,a) values (653,86);
+insert into t (id,a) values (653,87);
+insert into t (id,a) values (653,88);
+insert into t (id,a) values (653,89);
+insert into t (id,a) values (653,90);
+insert into t (id,a) values (653,91);
+insert into t (id,a) values (653,92);
+insert into t (id,a) values (653,93);
+insert into t (id,a) values (653,94);
+insert into t (id,a) values (653,95);
+insert into t (id,a) values (653,96);
+insert into t (id,a) values (653,97);
+insert into t (id,a) values (653,98);
+insert into t (id,a) values (653,99);
+insert into t (id,a) values (654,0);
+insert into t (id,a) values (654,1);
+insert into t (id,a) values (654,2);
+insert into t (id,a) values (654,3);
+insert into t (id,a) values (654,4);
+insert into t (id,a) values (654,5);
+insert into t (id,a) values (654,6);
+insert into t (id,a) values (654,7);
+insert into t (id,a) values (654,8);
+insert into t (id,a) values (654,9);
+insert into t (id,a) values (654,10);
+insert into t (id,a) values (654,11);
+insert into t (id,a) values (654,12);
+insert into t (id,a) values (654,13);
+insert into t (id,a) values (654,14);
+insert into t (id,a) values (654,15);
+insert into t (id,a) values (654,16);
+insert into t (id,a) values (654,17);
+insert into t (id,a) values (654,18);
+insert into t (id,a) values (654,19);
+insert into t (id,a) values (654,20);
+insert into t (id,a) values (654,21);
+insert into t (id,a) values (654,22);
+insert into t (id,a) values (654,23);
+insert into t (id,a) values (654,24);
+insert into t (id,a) values (654,25);
+insert into t (id,a) values (654,26);
+insert into t (id,a) values (654,27);
+insert into t (id,a) values (654,28);
+insert into t (id,a) values (654,29);
+insert into t (id,a) values (654,30);
+insert into t (id,a) values (654,31);
+insert into t (id,a) values (654,32);
+insert into t (id,a) values (654,33);
+insert into t (id,a) values (654,34);
+insert into t (id,a) values (654,35);
+insert into t (id,a) values (654,36);
+insert into t (id,a) values (654,37);
+insert into t (id,a) values (654,38);
+insert into t (id,a) values (654,39);
+insert into t (id,a) values (654,40);
+insert into t (id,a) values (654,41);
+insert into t (id,a) values (654,42);
+insert into t (id,a) values (654,43);
+insert into t (id,a) values (654,44);
+insert into t (id,a) values (654,45);
+insert into t (id,a) values (654,46);
+insert into t (id,a) values (654,47);
+insert into t (id,a) values (654,48);
+insert into t (id,a) values (654,49);
+insert into t (id,a) values (654,50);
+insert into t (id,a) values (654,51);
+insert into t (id,a) values (654,52);
+insert into t (id,a) values (654,53);
+insert into t (id,a) values (654,54);
+insert into t (id,a) values (654,55);
+insert into t (id,a) values (654,56);
+insert into t (id,a) values (654,57);
+insert into t (id,a) values (654,58);
+insert into t (id,a) values (654,59);
+insert into t (id,a) values (654,60);
+insert into t (id,a) values (654,61);
+insert into t (id,a) values (654,62);
+insert into t (id,a) values (654,63);
+insert into t (id,a) values (654,64);
+insert into t (id,a) values (654,65);
+insert into t (id,a) values (654,66);
+insert into t (id,a) values (654,67);
+insert into t (id,a) values (654,68);
+insert into t (id,a) values (654,69);
+insert into t (id,a) values (654,70);
+insert into t (id,a) values (654,71);
+insert into t (id,a) values (654,72);
+insert into t (id,a) values (654,73);
+insert into t (id,a) values (654,74);
+insert into t (id,a) values (654,75);
+insert into t (id,a) values (654,76);
+insert into t (id,a) values (654,77);
+insert into t (id,a) values (654,78);
+insert into t (id,a) values (654,79);
+insert into t (id,a) values (654,80);
+insert into t (id,a) values (654,81);
+insert into t (id,a) values (654,82);
+insert into t (id,a) values (654,83);
+insert into t (id,a) values (654,84);
+insert into t (id,a) values (654,85);
+insert into t (id,a) values (654,86);
+insert into t (id,a) values (654,87);
+insert into t (id,a) values (654,88);
+insert into t (id,a) values (654,89);
+insert into t (id,a) values (654,90);
+insert into t (id,a) values (654,91);
+insert into t (id,a) values (654,92);
+insert into t (id,a) values (654,93);
+insert into t (id,a) values (654,94);
+insert into t (id,a) values (654,95);
+insert into t (id,a) values (654,96);
+insert into t (id,a) values (654,97);
+insert into t (id,a) values (654,98);
+insert into t (id,a) values (654,99);
+insert into t (id,a) values (655,0);
+insert into t (id,a) values (655,1);
+insert into t (id,a) values (655,2);
+insert into t (id,a) values (655,3);
+insert into t (id,a) values (655,4);
+insert into t (id,a) values (655,5);
+insert into t (id,a) values (655,6);
+insert into t (id,a) values (655,7);
+insert into t (id,a) values (655,8);
+insert into t (id,a) values (655,9);
+insert into t (id,a) values (655,10);
+insert into t (id,a) values (655,11);
+insert into t (id,a) values (655,12);
+insert into t (id,a) values (655,13);
+insert into t (id,a) values (655,14);
+insert into t (id,a) values (655,15);
+insert into t (id,a) values (655,16);
+insert into t (id,a) values (655,17);
+insert into t (id,a) values (655,18);
+insert into t (id,a) values (655,19);
+insert into t (id,a) values (655,20);
+insert into t (id,a) values (655,21);
+insert into t (id,a) values (655,22);
+insert into t (id,a) values (655,23);
+insert into t (id,a) values (655,24);
+insert into t (id,a) values (655,25);
+insert into t (id,a) values (655,26);
+insert into t (id,a) values (655,27);
+insert into t (id,a) values (655,28);
+insert into t (id,a) values (655,29);
+insert into t (id,a) values (655,30);
+insert into t (id,a) values (655,31);
+insert into t (id,a) values (655,32);
+insert into t (id,a) values (655,33);
+insert into t (id,a) values (655,34);
+insert into t (id,a) values (655,35);
+insert into t (id,a) values (655,36);
+insert into t (id,a) values (655,37);
+insert into t (id,a) values (655,38);
+insert into t (id,a) values (655,39);
+insert into t (id,a) values (655,40);
+insert into t (id,a) values (655,41);
+insert into t (id,a) values (655,42);
+insert into t (id,a) values (655,43);
+insert into t (id,a) values (655,44);
+insert into t (id,a) values (655,45);
+insert into t (id,a) values (655,46);
+insert into t (id,a) values (655,47);
+insert into t (id,a) values (655,48);
+insert into t (id,a) values (655,49);
+insert into t (id,a) values (655,50);
+insert into t (id,a) values (655,51);
+insert into t (id,a) values (655,52);
+insert into t (id,a) values (655,53);
+insert into t (id,a) values (655,54);
+insert into t (id,a) values (655,55);
+insert into t (id,a) values (655,56);
+insert into t (id,a) values (655,57);
+insert into t (id,a) values (655,58);
+insert into t (id,a) values (655,59);
+insert into t (id,a) values (655,60);
+insert into t (id,a) values (655,61);
+insert into t (id,a) values (655,62);
+insert into t (id,a) values (655,63);
+insert into t (id,a) values (655,64);
+insert into t (id,a) values (655,65);
+insert into t (id,a) values (655,66);
+insert into t (id,a) values (655,67);
+insert into t (id,a) values (655,68);
+insert into t (id,a) values (655,69);
+insert into t (id,a) values (655,70);
+insert into t (id,a) values (655,71);
+insert into t (id,a) values (655,72);
+insert into t (id,a) values (655,73);
+insert into t (id,a) values (655,74);
+insert into t (id,a) values (655,75);
+insert into t (id,a) values (655,76);
+insert into t (id,a) values (655,77);
+insert into t (id,a) values (655,78);
+insert into t (id,a) values (655,79);
+insert into t (id,a) values (655,80);
+insert into t (id,a) values (655,81);
+insert into t (id,a) values (655,82);
+insert into t (id,a) values (655,83);
+insert into t (id,a) values (655,84);
+insert into t (id,a) values (655,85);
+insert into t (id,a) values (655,86);
+insert into t (id,a) values (655,87);
+insert into t (id,a) values (655,88);
+insert into t (id,a) values (655,89);
+insert into t (id,a) values (655,90);
+insert into t (id,a) values (655,91);
+insert into t (id,a) values (655,92);
+insert into t (id,a) values (655,93);
+insert into t (id,a) values (655,94);
+insert into t (id,a) values (655,95);
+insert into t (id,a) values (655,96);
+insert into t (id,a) values (655,97);
+insert into t (id,a) values (655,98);
+insert into t (id,a) values (655,99);
+insert into t (id,a) values (656,0);
+insert into t (id,a) values (656,1);
+insert into t (id,a) values (656,2);
+insert into t (id,a) values (656,3);
+insert into t (id,a) values (656,4);
+insert into t (id,a) values (656,5);
+insert into t (id,a) values (656,6);
+insert into t (id,a) values (656,7);
+insert into t (id,a) values (656,8);
+insert into t (id,a) values (656,9);
+insert into t (id,a) values (656,10);
+insert into t (id,a) values (656,11);
+insert into t (id,a) values (656,12);
+insert into t (id,a) values (656,13);
+insert into t (id,a) values (656,14);
+insert into t (id,a) values (656,15);
+insert into t (id,a) values (656,16);
+insert into t (id,a) values (656,17);
+insert into t (id,a) values (656,18);
+insert into t (id,a) values (656,19);
+insert into t (id,a) values (656,20);
+insert into t (id,a) values (656,21);
+insert into t (id,a) values (656,22);
+insert into t (id,a) values (656,23);
+insert into t (id,a) values (656,24);
+insert into t (id,a) values (656,25);
+insert into t (id,a) values (656,26);
+insert into t (id,a) values (656,27);
+insert into t (id,a) values (656,28);
+insert into t (id,a) values (656,29);
+insert into t (id,a) values (656,30);
+insert into t (id,a) values (656,31);
+insert into t (id,a) values (656,32);
+insert into t (id,a) values (656,33);
+insert into t (id,a) values (656,34);
+insert into t (id,a) values (656,35);
+insert into t (id,a) values (656,36);
+insert into t (id,a) values (656,37);
+insert into t (id,a) values (656,38);
+insert into t (id,a) values (656,39);
+insert into t (id,a) values (656,40);
+insert into t (id,a) values (656,41);
+insert into t (id,a) values (656,42);
+insert into t (id,a) values (656,43);
+insert into t (id,a) values (656,44);
+insert into t (id,a) values (656,45);
+insert into t (id,a) values (656,46);
+insert into t (id,a) values (656,47);
+insert into t (id,a) values (656,48);
+insert into t (id,a) values (656,49);
+insert into t (id,a) values (656,50);
+insert into t (id,a) values (656,51);
+insert into t (id,a) values (656,52);
+insert into t (id,a) values (656,53);
+insert into t (id,a) values (656,54);
+insert into t (id,a) values (656,55);
+insert into t (id,a) values (656,56);
+insert into t (id,a) values (656,57);
+insert into t (id,a) values (656,58);
+insert into t (id,a) values (656,59);
+insert into t (id,a) values (656,60);
+insert into t (id,a) values (656,61);
+insert into t (id,a) values (656,62);
+insert into t (id,a) values (656,63);
+insert into t (id,a) values (656,64);
+insert into t (id,a) values (656,65);
+insert into t (id,a) values (656,66);
+insert into t (id,a) values (656,67);
+insert into t (id,a) values (656,68);
+insert into t (id,a) values (656,69);
+insert into t (id,a) values (656,70);
+insert into t (id,a) values (656,71);
+insert into t (id,a) values (656,72);
+insert into t (id,a) values (656,73);
+insert into t (id,a) values (656,74);
+insert into t (id,a) values (656,75);
+insert into t (id,a) values (656,76);
+insert into t (id,a) values (656,77);
+insert into t (id,a) values (656,78);
+insert into t (id,a) values (656,79);
+insert into t (id,a) values (656,80);
+insert into t (id,a) values (656,81);
+insert into t (id,a) values (656,82);
+insert into t (id,a) values (656,83);
+insert into t (id,a) values (656,84);
+insert into t (id,a) values (656,85);
+insert into t (id,a) values (656,86);
+insert into t (id,a) values (656,87);
+insert into t (id,a) values (656,88);
+insert into t (id,a) values (656,89);
+insert into t (id,a) values (656,90);
+insert into t (id,a) values (656,91);
+insert into t (id,a) values (656,92);
+insert into t (id,a) values (656,93);
+insert into t (id,a) values (656,94);
+insert into t (id,a) values (656,95);
+insert into t (id,a) values (656,96);
+insert into t (id,a) values (656,97);
+insert into t (id,a) values (656,98);
+insert into t (id,a) values (656,99);
+insert into t (id,a) values (657,0);
+insert into t (id,a) values (657,1);
+insert into t (id,a) values (657,2);
+insert into t (id,a) values (657,3);
+insert into t (id,a) values (657,4);
+insert into t (id,a) values (657,5);
+insert into t (id,a) values (657,6);
+insert into t (id,a) values (657,7);
+insert into t (id,a) values (657,8);
+insert into t (id,a) values (657,9);
+insert into t (id,a) values (657,10);
+insert into t (id,a) values (657,11);
+insert into t (id,a) values (657,12);
+insert into t (id,a) values (657,13);
+insert into t (id,a) values (657,14);
+insert into t (id,a) values (657,15);
+insert into t (id,a) values (657,16);
+insert into t (id,a) values (657,17);
+insert into t (id,a) values (657,18);
+insert into t (id,a) values (657,19);
+insert into t (id,a) values (657,20);
+insert into t (id,a) values (657,21);
+insert into t (id,a) values (657,22);
+insert into t (id,a) values (657,23);
+insert into t (id,a) values (657,24);
+insert into t (id,a) values (657,25);
+insert into t (id,a) values (657,26);
+insert into t (id,a) values (657,27);
+insert into t (id,a) values (657,28);
+insert into t (id,a) values (657,29);
+insert into t (id,a) values (657,30);
+insert into t (id,a) values (657,31);
+insert into t (id,a) values (657,32);
+insert into t (id,a) values (657,33);
+insert into t (id,a) values (657,34);
+insert into t (id,a) values (657,35);
+insert into t (id,a) values (657,36);
+insert into t (id,a) values (657,37);
+insert into t (id,a) values (657,38);
+insert into t (id,a) values (657,39);
+insert into t (id,a) values (657,40);
+insert into t (id,a) values (657,41);
+insert into t (id,a) values (657,42);
+insert into t (id,a) values (657,43);
+insert into t (id,a) values (657,44);
+insert into t (id,a) values (657,45);
+insert into t (id,a) values (657,46);
+insert into t (id,a) values (657,47);
+insert into t (id,a) values (657,48);
+insert into t (id,a) values (657,49);
+insert into t (id,a) values (657,50);
+insert into t (id,a) values (657,51);
+insert into t (id,a) values (657,52);
+insert into t (id,a) values (657,53);
+insert into t (id,a) values (657,54);
+insert into t (id,a) values (657,55);
+insert into t (id,a) values (657,56);
+insert into t (id,a) values (657,57);
+insert into t (id,a) values (657,58);
+insert into t (id,a) values (657,59);
+insert into t (id,a) values (657,60);
+insert into t (id,a) values (657,61);
+insert into t (id,a) values (657,62);
+insert into t (id,a) values (657,63);
+insert into t (id,a) values (657,64);
+insert into t (id,a) values (657,65);
+insert into t (id,a) values (657,66);
+insert into t (id,a) values (657,67);
+insert into t (id,a) values (657,68);
+insert into t (id,a) values (657,69);
+insert into t (id,a) values (657,70);
+insert into t (id,a) values (657,71);
+insert into t (id,a) values (657,72);
+insert into t (id,a) values (657,73);
+insert into t (id,a) values (657,74);
+insert into t (id,a) values (657,75);
+insert into t (id,a) values (657,76);
+insert into t (id,a) values (657,77);
+insert into t (id,a) values (657,78);
+insert into t (id,a) values (657,79);
+insert into t (id,a) values (657,80);
+insert into t (id,a) values (657,81);
+insert into t (id,a) values (657,82);
+insert into t (id,a) values (657,83);
+insert into t (id,a) values (657,84);
+insert into t (id,a) values (657,85);
+insert into t (id,a) values (657,86);
+insert into t (id,a) values (657,87);
+insert into t (id,a) values (657,88);
+insert into t (id,a) values (657,89);
+insert into t (id,a) values (657,90);
+insert into t (id,a) values (657,91);
+insert into t (id,a) values (657,92);
+insert into t (id,a) values (657,93);
+insert into t (id,a) values (657,94);
+insert into t (id,a) values (657,95);
+insert into t (id,a) values (657,96);
+insert into t (id,a) values (657,97);
+insert into t (id,a) values (657,98);
+insert into t (id,a) values (657,99);
+insert into t (id,a) values (658,0);
+insert into t (id,a) values (658,1);
+insert into t (id,a) values (658,2);
+insert into t (id,a) values (658,3);
+insert into t (id,a) values (658,4);
+insert into t (id,a) values (658,5);
+insert into t (id,a) values (658,6);
+insert into t (id,a) values (658,7);
+insert into t (id,a) values (658,8);
+insert into t (id,a) values (658,9);
+insert into t (id,a) values (658,10);
+insert into t (id,a) values (658,11);
+insert into t (id,a) values (658,12);
+insert into t (id,a) values (658,13);
+insert into t (id,a) values (658,14);
+insert into t (id,a) values (658,15);
+insert into t (id,a) values (658,16);
+insert into t (id,a) values (658,17);
+insert into t (id,a) values (658,18);
+insert into t (id,a) values (658,19);
+insert into t (id,a) values (658,20);
+insert into t (id,a) values (658,21);
+insert into t (id,a) values (658,22);
+insert into t (id,a) values (658,23);
+insert into t (id,a) values (658,24);
+insert into t (id,a) values (658,25);
+insert into t (id,a) values (658,26);
+insert into t (id,a) values (658,27);
+insert into t (id,a) values (658,28);
+insert into t (id,a) values (658,29);
+insert into t (id,a) values (658,30);
+insert into t (id,a) values (658,31);
+insert into t (id,a) values (658,32);
+insert into t (id,a) values (658,33);
+insert into t (id,a) values (658,34);
+insert into t (id,a) values (658,35);
+insert into t (id,a) values (658,36);
+insert into t (id,a) values (658,37);
+insert into t (id,a) values (658,38);
+insert into t (id,a) values (658,39);
+insert into t (id,a) values (658,40);
+insert into t (id,a) values (658,41);
+insert into t (id,a) values (658,42);
+insert into t (id,a) values (658,43);
+insert into t (id,a) values (658,44);
+insert into t (id,a) values (658,45);
+insert into t (id,a) values (658,46);
+insert into t (id,a) values (658,47);
+insert into t (id,a) values (658,48);
+insert into t (id,a) values (658,49);
+insert into t (id,a) values (658,50);
+insert into t (id,a) values (658,51);
+insert into t (id,a) values (658,52);
+insert into t (id,a) values (658,53);
+insert into t (id,a) values (658,54);
+insert into t (id,a) values (658,55);
+insert into t (id,a) values (658,56);
+insert into t (id,a) values (658,57);
+insert into t (id,a) values (658,58);
+insert into t (id,a) values (658,59);
+insert into t (id,a) values (658,60);
+insert into t (id,a) values (658,61);
+insert into t (id,a) values (658,62);
+insert into t (id,a) values (658,63);
+insert into t (id,a) values (658,64);
+insert into t (id,a) values (658,65);
+insert into t (id,a) values (658,66);
+insert into t (id,a) values (658,67);
+insert into t (id,a) values (658,68);
+insert into t (id,a) values (658,69);
+insert into t (id,a) values (658,70);
+insert into t (id,a) values (658,71);
+insert into t (id,a) values (658,72);
+insert into t (id,a) values (658,73);
+insert into t (id,a) values (658,74);
+insert into t (id,a) values (658,75);
+insert into t (id,a) values (658,76);
+insert into t (id,a) values (658,77);
+insert into t (id,a) values (658,78);
+insert into t (id,a) values (658,79);
+insert into t (id,a) values (658,80);
+insert into t (id,a) values (658,81);
+insert into t (id,a) values (658,82);
+insert into t (id,a) values (658,83);
+insert into t (id,a) values (658,84);
+insert into t (id,a) values (658,85);
+insert into t (id,a) values (658,86);
+insert into t (id,a) values (658,87);
+insert into t (id,a) values (658,88);
+insert into t (id,a) values (658,89);
+insert into t (id,a) values (658,90);
+insert into t (id,a) values (658,91);
+insert into t (id,a) values (658,92);
+insert into t (id,a) values (658,93);
+insert into t (id,a) values (658,94);
+insert into t (id,a) values (658,95);
+insert into t (id,a) values (658,96);
+insert into t (id,a) values (658,97);
+insert into t (id,a) values (658,98);
+insert into t (id,a) values (658,99);
+insert into t (id,a) values (659,0);
+insert into t (id,a) values (659,1);
+insert into t (id,a) values (659,2);
+insert into t (id,a) values (659,3);
+insert into t (id,a) values (659,4);
+insert into t (id,a) values (659,5);
+insert into t (id,a) values (659,6);
+insert into t (id,a) values (659,7);
+insert into t (id,a) values (659,8);
+insert into t (id,a) values (659,9);
+insert into t (id,a) values (659,10);
+insert into t (id,a) values (659,11);
+insert into t (id,a) values (659,12);
+insert into t (id,a) values (659,13);
+insert into t (id,a) values (659,14);
+insert into t (id,a) values (659,15);
+insert into t (id,a) values (659,16);
+insert into t (id,a) values (659,17);
+insert into t (id,a) values (659,18);
+insert into t (id,a) values (659,19);
+insert into t (id,a) values (659,20);
+insert into t (id,a) values (659,21);
+insert into t (id,a) values (659,22);
+insert into t (id,a) values (659,23);
+insert into t (id,a) values (659,24);
+insert into t (id,a) values (659,25);
+insert into t (id,a) values (659,26);
+insert into t (id,a) values (659,27);
+insert into t (id,a) values (659,28);
+insert into t (id,a) values (659,29);
+insert into t (id,a) values (659,30);
+insert into t (id,a) values (659,31);
+insert into t (id,a) values (659,32);
+insert into t (id,a) values (659,33);
+insert into t (id,a) values (659,34);
+insert into t (id,a) values (659,35);
+insert into t (id,a) values (659,36);
+insert into t (id,a) values (659,37);
+insert into t (id,a) values (659,38);
+insert into t (id,a) values (659,39);
+insert into t (id,a) values (659,40);
+insert into t (id,a) values (659,41);
+insert into t (id,a) values (659,42);
+insert into t (id,a) values (659,43);
+insert into t (id,a) values (659,44);
+insert into t (id,a) values (659,45);
+insert into t (id,a) values (659,46);
+insert into t (id,a) values (659,47);
+insert into t (id,a) values (659,48);
+insert into t (id,a) values (659,49);
+insert into t (id,a) values (659,50);
+insert into t (id,a) values (659,51);
+insert into t (id,a) values (659,52);
+insert into t (id,a) values (659,53);
+insert into t (id,a) values (659,54);
+insert into t (id,a) values (659,55);
+insert into t (id,a) values (659,56);
+insert into t (id,a) values (659,57);
+insert into t (id,a) values (659,58);
+insert into t (id,a) values (659,59);
+insert into t (id,a) values (659,60);
+insert into t (id,a) values (659,61);
+insert into t (id,a) values (659,62);
+insert into t (id,a) values (659,63);
+insert into t (id,a) values (659,64);
+insert into t (id,a) values (659,65);
+insert into t (id,a) values (659,66);
+insert into t (id,a) values (659,67);
+insert into t (id,a) values (659,68);
+insert into t (id,a) values (659,69);
+insert into t (id,a) values (659,70);
+insert into t (id,a) values (659,71);
+insert into t (id,a) values (659,72);
+insert into t (id,a) values (659,73);
+insert into t (id,a) values (659,74);
+insert into t (id,a) values (659,75);
+insert into t (id,a) values (659,76);
+insert into t (id,a) values (659,77);
+insert into t (id,a) values (659,78);
+insert into t (id,a) values (659,79);
+insert into t (id,a) values (659,80);
+insert into t (id,a) values (659,81);
+insert into t (id,a) values (659,82);
+insert into t (id,a) values (659,83);
+insert into t (id,a) values (659,84);
+insert into t (id,a) values (659,85);
+insert into t (id,a) values (659,86);
+insert into t (id,a) values (659,87);
+insert into t (id,a) values (659,88);
+insert into t (id,a) values (659,89);
+insert into t (id,a) values (659,90);
+insert into t (id,a) values (659,91);
+insert into t (id,a) values (659,92);
+insert into t (id,a) values (659,93);
+insert into t (id,a) values (659,94);
+insert into t (id,a) values (659,95);
+insert into t (id,a) values (659,96);
+insert into t (id,a) values (659,97);
+insert into t (id,a) values (659,98);
+insert into t (id,a) values (659,99);
+insert into t (id,a) values (660,0);
+insert into t (id,a) values (660,1);
+insert into t (id,a) values (660,2);
+insert into t (id,a) values (660,3);
+insert into t (id,a) values (660,4);
+insert into t (id,a) values (660,5);
+insert into t (id,a) values (660,6);
+insert into t (id,a) values (660,7);
+insert into t (id,a) values (660,8);
+insert into t (id,a) values (660,9);
+insert into t (id,a) values (660,10);
+insert into t (id,a) values (660,11);
+insert into t (id,a) values (660,12);
+insert into t (id,a) values (660,13);
+insert into t (id,a) values (660,14);
+insert into t (id,a) values (660,15);
+insert into t (id,a) values (660,16);
+insert into t (id,a) values (660,17);
+insert into t (id,a) values (660,18);
+insert into t (id,a) values (660,19);
+insert into t (id,a) values (660,20);
+insert into t (id,a) values (660,21);
+insert into t (id,a) values (660,22);
+insert into t (id,a) values (660,23);
+insert into t (id,a) values (660,24);
+insert into t (id,a) values (660,25);
+insert into t (id,a) values (660,26);
+insert into t (id,a) values (660,27);
+insert into t (id,a) values (660,28);
+insert into t (id,a) values (660,29);
+insert into t (id,a) values (660,30);
+insert into t (id,a) values (660,31);
+insert into t (id,a) values (660,32);
+insert into t (id,a) values (660,33);
+insert into t (id,a) values (660,34);
+insert into t (id,a) values (660,35);
+insert into t (id,a) values (660,36);
+insert into t (id,a) values (660,37);
+insert into t (id,a) values (660,38);
+insert into t (id,a) values (660,39);
+insert into t (id,a) values (660,40);
+insert into t (id,a) values (660,41);
+insert into t (id,a) values (660,42);
+insert into t (id,a) values (660,43);
+insert into t (id,a) values (660,44);
+insert into t (id,a) values (660,45);
+insert into t (id,a) values (660,46);
+insert into t (id,a) values (660,47);
+insert into t (id,a) values (660,48);
+insert into t (id,a) values (660,49);
+insert into t (id,a) values (660,50);
+insert into t (id,a) values (660,51);
+insert into t (id,a) values (660,52);
+insert into t (id,a) values (660,53);
+insert into t (id,a) values (660,54);
+insert into t (id,a) values (660,55);
+insert into t (id,a) values (660,56);
+insert into t (id,a) values (660,57);
+insert into t (id,a) values (660,58);
+insert into t (id,a) values (660,59);
+insert into t (id,a) values (660,60);
+insert into t (id,a) values (660,61);
+insert into t (id,a) values (660,62);
+insert into t (id,a) values (660,63);
+insert into t (id,a) values (660,64);
+insert into t (id,a) values (660,65);
+insert into t (id,a) values (660,66);
+insert into t (id,a) values (660,67);
+insert into t (id,a) values (660,68);
+insert into t (id,a) values (660,69);
+insert into t (id,a) values (660,70);
+insert into t (id,a) values (660,71);
+insert into t (id,a) values (660,72);
+insert into t (id,a) values (660,73);
+insert into t (id,a) values (660,74);
+insert into t (id,a) values (660,75);
+insert into t (id,a) values (660,76);
+insert into t (id,a) values (660,77);
+insert into t (id,a) values (660,78);
+insert into t (id,a) values (660,79);
+insert into t (id,a) values (660,80);
+insert into t (id,a) values (660,81);
+insert into t (id,a) values (660,82);
+insert into t (id,a) values (660,83);
+insert into t (id,a) values (660,84);
+insert into t (id,a) values (660,85);
+insert into t (id,a) values (660,86);
+insert into t (id,a) values (660,87);
+insert into t (id,a) values (660,88);
+insert into t (id,a) values (660,89);
+insert into t (id,a) values (660,90);
+insert into t (id,a) values (660,91);
+insert into t (id,a) values (660,92);
+insert into t (id,a) values (660,93);
+insert into t (id,a) values (660,94);
+insert into t (id,a) values (660,95);
+insert into t (id,a) values (660,96);
+insert into t (id,a) values (660,97);
+insert into t (id,a) values (660,98);
+insert into t (id,a) values (660,99);
+insert into t (id,a) values (661,0);
+insert into t (id,a) values (661,1);
+insert into t (id,a) values (661,2);
+insert into t (id,a) values (661,3);
+insert into t (id,a) values (661,4);
+insert into t (id,a) values (661,5);
+insert into t (id,a) values (661,6);
+insert into t (id,a) values (661,7);
+insert into t (id,a) values (661,8);
+insert into t (id,a) values (661,9);
+insert into t (id,a) values (661,10);
+insert into t (id,a) values (661,11);
+insert into t (id,a) values (661,12);
+insert into t (id,a) values (661,13);
+insert into t (id,a) values (661,14);
+insert into t (id,a) values (661,15);
+insert into t (id,a) values (661,16);
+insert into t (id,a) values (661,17);
+insert into t (id,a) values (661,18);
+insert into t (id,a) values (661,19);
+insert into t (id,a) values (661,20);
+insert into t (id,a) values (661,21);
+insert into t (id,a) values (661,22);
+insert into t (id,a) values (661,23);
+insert into t (id,a) values (661,24);
+insert into t (id,a) values (661,25);
+insert into t (id,a) values (661,26);
+insert into t (id,a) values (661,27);
+insert into t (id,a) values (661,28);
+insert into t (id,a) values (661,29);
+insert into t (id,a) values (661,30);
+insert into t (id,a) values (661,31);
+insert into t (id,a) values (661,32);
+insert into t (id,a) values (661,33);
+insert into t (id,a) values (661,34);
+insert into t (id,a) values (661,35);
+insert into t (id,a) values (661,36);
+insert into t (id,a) values (661,37);
+insert into t (id,a) values (661,38);
+insert into t (id,a) values (661,39);
+insert into t (id,a) values (661,40);
+insert into t (id,a) values (661,41);
+insert into t (id,a) values (661,42);
+insert into t (id,a) values (661,43);
+insert into t (id,a) values (661,44);
+insert into t (id,a) values (661,45);
+insert into t (id,a) values (661,46);
+insert into t (id,a) values (661,47);
+insert into t (id,a) values (661,48);
+insert into t (id,a) values (661,49);
+insert into t (id,a) values (661,50);
+insert into t (id,a) values (661,51);
+insert into t (id,a) values (661,52);
+insert into t (id,a) values (661,53);
+insert into t (id,a) values (661,54);
+insert into t (id,a) values (661,55);
+insert into t (id,a) values (661,56);
+insert into t (id,a) values (661,57);
+insert into t (id,a) values (661,58);
+insert into t (id,a) values (661,59);
+insert into t (id,a) values (661,60);
+insert into t (id,a) values (661,61);
+insert into t (id,a) values (661,62);
+insert into t (id,a) values (661,63);
+insert into t (id,a) values (661,64);
+insert into t (id,a) values (661,65);
+insert into t (id,a) values (661,66);
+insert into t (id,a) values (661,67);
+insert into t (id,a) values (661,68);
+insert into t (id,a) values (661,69);
+insert into t (id,a) values (661,70);
+insert into t (id,a) values (661,71);
+insert into t (id,a) values (661,72);
+insert into t (id,a) values (661,73);
+insert into t (id,a) values (661,74);
+insert into t (id,a) values (661,75);
+insert into t (id,a) values (661,76);
+insert into t (id,a) values (661,77);
+insert into t (id,a) values (661,78);
+insert into t (id,a) values (661,79);
+insert into t (id,a) values (661,80);
+insert into t (id,a) values (661,81);
+insert into t (id,a) values (661,82);
+insert into t (id,a) values (661,83);
+insert into t (id,a) values (661,84);
+insert into t (id,a) values (661,85);
+insert into t (id,a) values (661,86);
+insert into t (id,a) values (661,87);
+insert into t (id,a) values (661,88);
+insert into t (id,a) values (661,89);
+insert into t (id,a) values (661,90);
+insert into t (id,a) values (661,91);
+insert into t (id,a) values (661,92);
+insert into t (id,a) values (661,93);
+insert into t (id,a) values (661,94);
+insert into t (id,a) values (661,95);
+insert into t (id,a) values (661,96);
+insert into t (id,a) values (661,97);
+insert into t (id,a) values (661,98);
+insert into t (id,a) values (661,99);
+insert into t (id,a) values (662,0);
+insert into t (id,a) values (662,1);
+insert into t (id,a) values (662,2);
+insert into t (id,a) values (662,3);
+insert into t (id,a) values (662,4);
+insert into t (id,a) values (662,5);
+insert into t (id,a) values (662,6);
+insert into t (id,a) values (662,7);
+insert into t (id,a) values (662,8);
+insert into t (id,a) values (662,9);
+insert into t (id,a) values (662,10);
+insert into t (id,a) values (662,11);
+insert into t (id,a) values (662,12);
+insert into t (id,a) values (662,13);
+insert into t (id,a) values (662,14);
+insert into t (id,a) values (662,15);
+insert into t (id,a) values (662,16);
+insert into t (id,a) values (662,17);
+insert into t (id,a) values (662,18);
+insert into t (id,a) values (662,19);
+insert into t (id,a) values (662,20);
+insert into t (id,a) values (662,21);
+insert into t (id,a) values (662,22);
+insert into t (id,a) values (662,23);
+insert into t (id,a) values (662,24);
+insert into t (id,a) values (662,25);
+insert into t (id,a) values (662,26);
+insert into t (id,a) values (662,27);
+insert into t (id,a) values (662,28);
+insert into t (id,a) values (662,29);
+insert into t (id,a) values (662,30);
+insert into t (id,a) values (662,31);
+insert into t (id,a) values (662,32);
+insert into t (id,a) values (662,33);
+insert into t (id,a) values (662,34);
+insert into t (id,a) values (662,35);
+insert into t (id,a) values (662,36);
+insert into t (id,a) values (662,37);
+insert into t (id,a) values (662,38);
+insert into t (id,a) values (662,39);
+insert into t (id,a) values (662,40);
+insert into t (id,a) values (662,41);
+insert into t (id,a) values (662,42);
+insert into t (id,a) values (662,43);
+insert into t (id,a) values (662,44);
+insert into t (id,a) values (662,45);
+insert into t (id,a) values (662,46);
+insert into t (id,a) values (662,47);
+insert into t (id,a) values (662,48);
+insert into t (id,a) values (662,49);
+insert into t (id,a) values (662,50);
+insert into t (id,a) values (662,51);
+insert into t (id,a) values (662,52);
+insert into t (id,a) values (662,53);
+insert into t (id,a) values (662,54);
+insert into t (id,a) values (662,55);
+insert into t (id,a) values (662,56);
+insert into t (id,a) values (662,57);
+insert into t (id,a) values (662,58);
+insert into t (id,a) values (662,59);
+insert into t (id,a) values (662,60);
+insert into t (id,a) values (662,61);
+insert into t (id,a) values (662,62);
+insert into t (id,a) values (662,63);
+insert into t (id,a) values (662,64);
+insert into t (id,a) values (662,65);
+insert into t (id,a) values (662,66);
+insert into t (id,a) values (662,67);
+insert into t (id,a) values (662,68);
+insert into t (id,a) values (662,69);
+insert into t (id,a) values (662,70);
+insert into t (id,a) values (662,71);
+insert into t (id,a) values (662,72);
+insert into t (id,a) values (662,73);
+insert into t (id,a) values (662,74);
+insert into t (id,a) values (662,75);
+insert into t (id,a) values (662,76);
+insert into t (id,a) values (662,77);
+insert into t (id,a) values (662,78);
+insert into t (id,a) values (662,79);
+insert into t (id,a) values (662,80);
+insert into t (id,a) values (662,81);
+insert into t (id,a) values (662,82);
+insert into t (id,a) values (662,83);
+insert into t (id,a) values (662,84);
+insert into t (id,a) values (662,85);
+insert into t (id,a) values (662,86);
+insert into t (id,a) values (662,87);
+insert into t (id,a) values (662,88);
+insert into t (id,a) values (662,89);
+insert into t (id,a) values (662,90);
+insert into t (id,a) values (662,91);
+insert into t (id,a) values (662,92);
+insert into t (id,a) values (662,93);
+insert into t (id,a) values (662,94);
+insert into t (id,a) values (662,95);
+insert into t (id,a) values (662,96);
+insert into t (id,a) values (662,97);
+insert into t (id,a) values (662,98);
+insert into t (id,a) values (662,99);
+insert into t (id,a) values (663,0);
+insert into t (id,a) values (663,1);
+insert into t (id,a) values (663,2);
+insert into t (id,a) values (663,3);
+insert into t (id,a) values (663,4);
+insert into t (id,a) values (663,5);
+insert into t (id,a) values (663,6);
+insert into t (id,a) values (663,7);
+insert into t (id,a) values (663,8);
+insert into t (id,a) values (663,9);
+insert into t (id,a) values (663,10);
+insert into t (id,a) values (663,11);
+insert into t (id,a) values (663,12);
+insert into t (id,a) values (663,13);
+insert into t (id,a) values (663,14);
+insert into t (id,a) values (663,15);
+insert into t (id,a) values (663,16);
+insert into t (id,a) values (663,17);
+insert into t (id,a) values (663,18);
+insert into t (id,a) values (663,19);
+insert into t (id,a) values (663,20);
+insert into t (id,a) values (663,21);
+insert into t (id,a) values (663,22);
+insert into t (id,a) values (663,23);
+insert into t (id,a) values (663,24);
+insert into t (id,a) values (663,25);
+insert into t (id,a) values (663,26);
+insert into t (id,a) values (663,27);
+insert into t (id,a) values (663,28);
+insert into t (id,a) values (663,29);
+insert into t (id,a) values (663,30);
+insert into t (id,a) values (663,31);
+insert into t (id,a) values (663,32);
+insert into t (id,a) values (663,33);
+insert into t (id,a) values (663,34);
+insert into t (id,a) values (663,35);
+insert into t (id,a) values (663,36);
+insert into t (id,a) values (663,37);
+insert into t (id,a) values (663,38);
+insert into t (id,a) values (663,39);
+insert into t (id,a) values (663,40);
+insert into t (id,a) values (663,41);
+insert into t (id,a) values (663,42);
+insert into t (id,a) values (663,43);
+insert into t (id,a) values (663,44);
+insert into t (id,a) values (663,45);
+insert into t (id,a) values (663,46);
+insert into t (id,a) values (663,47);
+insert into t (id,a) values (663,48);
+insert into t (id,a) values (663,49);
+insert into t (id,a) values (663,50);
+insert into t (id,a) values (663,51);
+insert into t (id,a) values (663,52);
+insert into t (id,a) values (663,53);
+insert into t (id,a) values (663,54);
+insert into t (id,a) values (663,55);
+insert into t (id,a) values (663,56);
+insert into t (id,a) values (663,57);
+insert into t (id,a) values (663,58);
+insert into t (id,a) values (663,59);
+insert into t (id,a) values (663,60);
+insert into t (id,a) values (663,61);
+insert into t (id,a) values (663,62);
+insert into t (id,a) values (663,63);
+insert into t (id,a) values (663,64);
+insert into t (id,a) values (663,65);
+insert into t (id,a) values (663,66);
+insert into t (id,a) values (663,67);
+insert into t (id,a) values (663,68);
+insert into t (id,a) values (663,69);
+insert into t (id,a) values (663,70);
+insert into t (id,a) values (663,71);
+insert into t (id,a) values (663,72);
+insert into t (id,a) values (663,73);
+insert into t (id,a) values (663,74);
+insert into t (id,a) values (663,75);
+insert into t (id,a) values (663,76);
+insert into t (id,a) values (663,77);
+insert into t (id,a) values (663,78);
+insert into t (id,a) values (663,79);
+insert into t (id,a) values (663,80);
+insert into t (id,a) values (663,81);
+insert into t (id,a) values (663,82);
+insert into t (id,a) values (663,83);
+insert into t (id,a) values (663,84);
+insert into t (id,a) values (663,85);
+insert into t (id,a) values (663,86);
+insert into t (id,a) values (663,87);
+insert into t (id,a) values (663,88);
+insert into t (id,a) values (663,89);
+insert into t (id,a) values (663,90);
+insert into t (id,a) values (663,91);
+insert into t (id,a) values (663,92);
+insert into t (id,a) values (663,93);
+insert into t (id,a) values (663,94);
+insert into t (id,a) values (663,95);
+insert into t (id,a) values (663,96);
+insert into t (id,a) values (663,97);
+insert into t (id,a) values (663,98);
+insert into t (id,a) values (663,99);
+insert into t (id,a) values (664,0);
+insert into t (id,a) values (664,1);
+insert into t (id,a) values (664,2);
+insert into t (id,a) values (664,3);
+insert into t (id,a) values (664,4);
+insert into t (id,a) values (664,5);
+insert into t (id,a) values (664,6);
+insert into t (id,a) values (664,7);
+insert into t (id,a) values (664,8);
+insert into t (id,a) values (664,9);
+insert into t (id,a) values (664,10);
+insert into t (id,a) values (664,11);
+insert into t (id,a) values (664,12);
+insert into t (id,a) values (664,13);
+insert into t (id,a) values (664,14);
+insert into t (id,a) values (664,15);
+insert into t (id,a) values (664,16);
+insert into t (id,a) values (664,17);
+insert into t (id,a) values (664,18);
+insert into t (id,a) values (664,19);
+insert into t (id,a) values (664,20);
+insert into t (id,a) values (664,21);
+insert into t (id,a) values (664,22);
+insert into t (id,a) values (664,23);
+insert into t (id,a) values (664,24);
+insert into t (id,a) values (664,25);
+insert into t (id,a) values (664,26);
+insert into t (id,a) values (664,27);
+insert into t (id,a) values (664,28);
+insert into t (id,a) values (664,29);
+insert into t (id,a) values (664,30);
+insert into t (id,a) values (664,31);
+insert into t (id,a) values (664,32);
+insert into t (id,a) values (664,33);
+insert into t (id,a) values (664,34);
+insert into t (id,a) values (664,35);
+insert into t (id,a) values (664,36);
+insert into t (id,a) values (664,37);
+insert into t (id,a) values (664,38);
+insert into t (id,a) values (664,39);
+insert into t (id,a) values (664,40);
+insert into t (id,a) values (664,41);
+insert into t (id,a) values (664,42);
+insert into t (id,a) values (664,43);
+insert into t (id,a) values (664,44);
+insert into t (id,a) values (664,45);
+insert into t (id,a) values (664,46);
+insert into t (id,a) values (664,47);
+insert into t (id,a) values (664,48);
+insert into t (id,a) values (664,49);
+insert into t (id,a) values (664,50);
+insert into t (id,a) values (664,51);
+insert into t (id,a) values (664,52);
+insert into t (id,a) values (664,53);
+insert into t (id,a) values (664,54);
+insert into t (id,a) values (664,55);
+insert into t (id,a) values (664,56);
+insert into t (id,a) values (664,57);
+insert into t (id,a) values (664,58);
+insert into t (id,a) values (664,59);
+insert into t (id,a) values (664,60);
+insert into t (id,a) values (664,61);
+insert into t (id,a) values (664,62);
+insert into t (id,a) values (664,63);
+insert into t (id,a) values (664,64);
+insert into t (id,a) values (664,65);
+insert into t (id,a) values (664,66);
+insert into t (id,a) values (664,67);
+insert into t (id,a) values (664,68);
+insert into t (id,a) values (664,69);
+insert into t (id,a) values (664,70);
+insert into t (id,a) values (664,71);
+insert into t (id,a) values (664,72);
+insert into t (id,a) values (664,73);
+insert into t (id,a) values (664,74);
+insert into t (id,a) values (664,75);
+insert into t (id,a) values (664,76);
+insert into t (id,a) values (664,77);
+insert into t (id,a) values (664,78);
+insert into t (id,a) values (664,79);
+insert into t (id,a) values (664,80);
+insert into t (id,a) values (664,81);
+insert into t (id,a) values (664,82);
+insert into t (id,a) values (664,83);
+insert into t (id,a) values (664,84);
+insert into t (id,a) values (664,85);
+insert into t (id,a) values (664,86);
+insert into t (id,a) values (664,87);
+insert into t (id,a) values (664,88);
+insert into t (id,a) values (664,89);
+insert into t (id,a) values (664,90);
+insert into t (id,a) values (664,91);
+insert into t (id,a) values (664,92);
+insert into t (id,a) values (664,93);
+insert into t (id,a) values (664,94);
+insert into t (id,a) values (664,95);
+insert into t (id,a) values (664,96);
+insert into t (id,a) values (664,97);
+insert into t (id,a) values (664,98);
+insert into t (id,a) values (664,99);
+insert into t (id,a) values (665,0);
+insert into t (id,a) values (665,1);
+insert into t (id,a) values (665,2);
+insert into t (id,a) values (665,3);
+insert into t (id,a) values (665,4);
+insert into t (id,a) values (665,5);
+insert into t (id,a) values (665,6);
+insert into t (id,a) values (665,7);
+insert into t (id,a) values (665,8);
+insert into t (id,a) values (665,9);
+insert into t (id,a) values (665,10);
+insert into t (id,a) values (665,11);
+insert into t (id,a) values (665,12);
+insert into t (id,a) values (665,13);
+insert into t (id,a) values (665,14);
+insert into t (id,a) values (665,15);
+insert into t (id,a) values (665,16);
+insert into t (id,a) values (665,17);
+insert into t (id,a) values (665,18);
+insert into t (id,a) values (665,19);
+insert into t (id,a) values (665,20);
+insert into t (id,a) values (665,21);
+insert into t (id,a) values (665,22);
+insert into t (id,a) values (665,23);
+insert into t (id,a) values (665,24);
+insert into t (id,a) values (665,25);
+insert into t (id,a) values (665,26);
+insert into t (id,a) values (665,27);
+insert into t (id,a) values (665,28);
+insert into t (id,a) values (665,29);
+insert into t (id,a) values (665,30);
+insert into t (id,a) values (665,31);
+insert into t (id,a) values (665,32);
+insert into t (id,a) values (665,33);
+insert into t (id,a) values (665,34);
+insert into t (id,a) values (665,35);
+insert into t (id,a) values (665,36);
+insert into t (id,a) values (665,37);
+insert into t (id,a) values (665,38);
+insert into t (id,a) values (665,39);
+insert into t (id,a) values (665,40);
+insert into t (id,a) values (665,41);
+insert into t (id,a) values (665,42);
+insert into t (id,a) values (665,43);
+insert into t (id,a) values (665,44);
+insert into t (id,a) values (665,45);
+insert into t (id,a) values (665,46);
+insert into t (id,a) values (665,47);
+insert into t (id,a) values (665,48);
+insert into t (id,a) values (665,49);
+insert into t (id,a) values (665,50);
+insert into t (id,a) values (665,51);
+insert into t (id,a) values (665,52);
+insert into t (id,a) values (665,53);
+insert into t (id,a) values (665,54);
+insert into t (id,a) values (665,55);
+insert into t (id,a) values (665,56);
+insert into t (id,a) values (665,57);
+insert into t (id,a) values (665,58);
+insert into t (id,a) values (665,59);
+insert into t (id,a) values (665,60);
+insert into t (id,a) values (665,61);
+insert into t (id,a) values (665,62);
+insert into t (id,a) values (665,63);
+insert into t (id,a) values (665,64);
+insert into t (id,a) values (665,65);
+insert into t (id,a) values (665,66);
+insert into t (id,a) values (665,67);
+insert into t (id,a) values (665,68);
+insert into t (id,a) values (665,69);
+insert into t (id,a) values (665,70);
+insert into t (id,a) values (665,71);
+insert into t (id,a) values (665,72);
+insert into t (id,a) values (665,73);
+insert into t (id,a) values (665,74);
+insert into t (id,a) values (665,75);
+insert into t (id,a) values (665,76);
+insert into t (id,a) values (665,77);
+insert into t (id,a) values (665,78);
+insert into t (id,a) values (665,79);
+insert into t (id,a) values (665,80);
+insert into t (id,a) values (665,81);
+insert into t (id,a) values (665,82);
+insert into t (id,a) values (665,83);
+insert into t (id,a) values (665,84);
+insert into t (id,a) values (665,85);
+insert into t (id,a) values (665,86);
+insert into t (id,a) values (665,87);
+insert into t (id,a) values (665,88);
+insert into t (id,a) values (665,89);
+insert into t (id,a) values (665,90);
+insert into t (id,a) values (665,91);
+insert into t (id,a) values (665,92);
+insert into t (id,a) values (665,93);
+insert into t (id,a) values (665,94);
+insert into t (id,a) values (665,95);
+insert into t (id,a) values (665,96);
+insert into t (id,a) values (665,97);
+insert into t (id,a) values (665,98);
+insert into t (id,a) values (665,99);
+insert into t (id,a) values (666,0);
+insert into t (id,a) values (666,1);
+insert into t (id,a) values (666,2);
+insert into t (id,a) values (666,3);
+insert into t (id,a) values (666,4);
+insert into t (id,a) values (666,5);
+insert into t (id,a) values (666,6);
+insert into t (id,a) values (666,7);
+insert into t (id,a) values (666,8);
+insert into t (id,a) values (666,9);
+insert into t (id,a) values (666,10);
+insert into t (id,a) values (666,11);
+insert into t (id,a) values (666,12);
+insert into t (id,a) values (666,13);
+insert into t (id,a) values (666,14);
+insert into t (id,a) values (666,15);
+insert into t (id,a) values (666,16);
+insert into t (id,a) values (666,17);
+insert into t (id,a) values (666,18);
+insert into t (id,a) values (666,19);
+insert into t (id,a) values (666,20);
+insert into t (id,a) values (666,21);
+insert into t (id,a) values (666,22);
+insert into t (id,a) values (666,23);
+insert into t (id,a) values (666,24);
+insert into t (id,a) values (666,25);
+insert into t (id,a) values (666,26);
+insert into t (id,a) values (666,27);
+insert into t (id,a) values (666,28);
+insert into t (id,a) values (666,29);
+insert into t (id,a) values (666,30);
+insert into t (id,a) values (666,31);
+insert into t (id,a) values (666,32);
+insert into t (id,a) values (666,33);
+insert into t (id,a) values (666,34);
+insert into t (id,a) values (666,35);
+insert into t (id,a) values (666,36);
+insert into t (id,a) values (666,37);
+insert into t (id,a) values (666,38);
+insert into t (id,a) values (666,39);
+insert into t (id,a) values (666,40);
+insert into t (id,a) values (666,41);
+insert into t (id,a) values (666,42);
+insert into t (id,a) values (666,43);
+insert into t (id,a) values (666,44);
+insert into t (id,a) values (666,45);
+insert into t (id,a) values (666,46);
+insert into t (id,a) values (666,47);
+insert into t (id,a) values (666,48);
+insert into t (id,a) values (666,49);
+insert into t (id,a) values (666,50);
+insert into t (id,a) values (666,51);
+insert into t (id,a) values (666,52);
+insert into t (id,a) values (666,53);
+insert into t (id,a) values (666,54);
+insert into t (id,a) values (666,55);
+insert into t (id,a) values (666,56);
+insert into t (id,a) values (666,57);
+insert into t (id,a) values (666,58);
+insert into t (id,a) values (666,59);
+insert into t (id,a) values (666,60);
+insert into t (id,a) values (666,61);
+insert into t (id,a) values (666,62);
+insert into t (id,a) values (666,63);
+insert into t (id,a) values (666,64);
+insert into t (id,a) values (666,65);
+insert into t (id,a) values (666,66);
+insert into t (id,a) values (666,67);
+insert into t (id,a) values (666,68);
+insert into t (id,a) values (666,69);
+insert into t (id,a) values (666,70);
+insert into t (id,a) values (666,71);
+insert into t (id,a) values (666,72);
+insert into t (id,a) values (666,73);
+insert into t (id,a) values (666,74);
+insert into t (id,a) values (666,75);
+insert into t (id,a) values (666,76);
+insert into t (id,a) values (666,77);
+insert into t (id,a) values (666,78);
+insert into t (id,a) values (666,79);
+insert into t (id,a) values (666,80);
+insert into t (id,a) values (666,81);
+insert into t (id,a) values (666,82);
+insert into t (id,a) values (666,83);
+insert into t (id,a) values (666,84);
+insert into t (id,a) values (666,85);
+insert into t (id,a) values (666,86);
+insert into t (id,a) values (666,87);
+insert into t (id,a) values (666,88);
+insert into t (id,a) values (666,89);
+insert into t (id,a) values (666,90);
+insert into t (id,a) values (666,91);
+insert into t (id,a) values (666,92);
+insert into t (id,a) values (666,93);
+insert into t (id,a) values (666,94);
+insert into t (id,a) values (666,95);
+insert into t (id,a) values (666,96);
+insert into t (id,a) values (666,97);
+insert into t (id,a) values (666,98);
+insert into t (id,a) values (666,99);
+insert into t (id,a) values (667,0);
+insert into t (id,a) values (667,1);
+insert into t (id,a) values (667,2);
+insert into t (id,a) values (667,3);
+insert into t (id,a) values (667,4);
+insert into t (id,a) values (667,5);
+insert into t (id,a) values (667,6);
+insert into t (id,a) values (667,7);
+insert into t (id,a) values (667,8);
+insert into t (id,a) values (667,9);
+insert into t (id,a) values (667,10);
+insert into t (id,a) values (667,11);
+insert into t (id,a) values (667,12);
+insert into t (id,a) values (667,13);
+insert into t (id,a) values (667,14);
+insert into t (id,a) values (667,15);
+insert into t (id,a) values (667,16);
+insert into t (id,a) values (667,17);
+insert into t (id,a) values (667,18);
+insert into t (id,a) values (667,19);
+insert into t (id,a) values (667,20);
+insert into t (id,a) values (667,21);
+insert into t (id,a) values (667,22);
+insert into t (id,a) values (667,23);
+insert into t (id,a) values (667,24);
+insert into t (id,a) values (667,25);
+insert into t (id,a) values (667,26);
+insert into t (id,a) values (667,27);
+insert into t (id,a) values (667,28);
+insert into t (id,a) values (667,29);
+insert into t (id,a) values (667,30);
+insert into t (id,a) values (667,31);
+insert into t (id,a) values (667,32);
+insert into t (id,a) values (667,33);
+insert into t (id,a) values (667,34);
+insert into t (id,a) values (667,35);
+insert into t (id,a) values (667,36);
+insert into t (id,a) values (667,37);
+insert into t (id,a) values (667,38);
+insert into t (id,a) values (667,39);
+insert into t (id,a) values (667,40);
+insert into t (id,a) values (667,41);
+insert into t (id,a) values (667,42);
+insert into t (id,a) values (667,43);
+insert into t (id,a) values (667,44);
+insert into t (id,a) values (667,45);
+insert into t (id,a) values (667,46);
+insert into t (id,a) values (667,47);
+insert into t (id,a) values (667,48);
+insert into t (id,a) values (667,49);
+insert into t (id,a) values (667,50);
+insert into t (id,a) values (667,51);
+insert into t (id,a) values (667,52);
+insert into t (id,a) values (667,53);
+insert into t (id,a) values (667,54);
+insert into t (id,a) values (667,55);
+insert into t (id,a) values (667,56);
+insert into t (id,a) values (667,57);
+insert into t (id,a) values (667,58);
+insert into t (id,a) values (667,59);
+insert into t (id,a) values (667,60);
+insert into t (id,a) values (667,61);
+insert into t (id,a) values (667,62);
+insert into t (id,a) values (667,63);
+insert into t (id,a) values (667,64);
+insert into t (id,a) values (667,65);
+insert into t (id,a) values (667,66);
+insert into t (id,a) values (667,67);
+insert into t (id,a) values (667,68);
+insert into t (id,a) values (667,69);
+insert into t (id,a) values (667,70);
+insert into t (id,a) values (667,71);
+insert into t (id,a) values (667,72);
+insert into t (id,a) values (667,73);
+insert into t (id,a) values (667,74);
+insert into t (id,a) values (667,75);
+insert into t (id,a) values (667,76);
+insert into t (id,a) values (667,77);
+insert into t (id,a) values (667,78);
+insert into t (id,a) values (667,79);
+insert into t (id,a) values (667,80);
+insert into t (id,a) values (667,81);
+insert into t (id,a) values (667,82);
+insert into t (id,a) values (667,83);
+insert into t (id,a) values (667,84);
+insert into t (id,a) values (667,85);
+insert into t (id,a) values (667,86);
+insert into t (id,a) values (667,87);
+insert into t (id,a) values (667,88);
+insert into t (id,a) values (667,89);
+insert into t (id,a) values (667,90);
+insert into t (id,a) values (667,91);
+insert into t (id,a) values (667,92);
+insert into t (id,a) values (667,93);
+insert into t (id,a) values (667,94);
+insert into t (id,a) values (667,95);
+insert into t (id,a) values (667,96);
+insert into t (id,a) values (667,97);
+insert into t (id,a) values (667,98);
+insert into t (id,a) values (667,99);
+insert into t (id,a) values (668,0);
+insert into t (id,a) values (668,1);
+insert into t (id,a) values (668,2);
+insert into t (id,a) values (668,3);
+insert into t (id,a) values (668,4);
+insert into t (id,a) values (668,5);
+insert into t (id,a) values (668,6);
+insert into t (id,a) values (668,7);
+insert into t (id,a) values (668,8);
+insert into t (id,a) values (668,9);
+insert into t (id,a) values (668,10);
+insert into t (id,a) values (668,11);
+insert into t (id,a) values (668,12);
+insert into t (id,a) values (668,13);
+insert into t (id,a) values (668,14);
+insert into t (id,a) values (668,15);
+insert into t (id,a) values (668,16);
+insert into t (id,a) values (668,17);
+insert into t (id,a) values (668,18);
+insert into t (id,a) values (668,19);
+insert into t (id,a) values (668,20);
+insert into t (id,a) values (668,21);
+insert into t (id,a) values (668,22);
+insert into t (id,a) values (668,23);
+insert into t (id,a) values (668,24);
+insert into t (id,a) values (668,25);
+insert into t (id,a) values (668,26);
+insert into t (id,a) values (668,27);
+insert into t (id,a) values (668,28);
+insert into t (id,a) values (668,29);
+insert into t (id,a) values (668,30);
+insert into t (id,a) values (668,31);
+insert into t (id,a) values (668,32);
+insert into t (id,a) values (668,33);
+insert into t (id,a) values (668,34);
+insert into t (id,a) values (668,35);
+insert into t (id,a) values (668,36);
+insert into t (id,a) values (668,37);
+insert into t (id,a) values (668,38);
+insert into t (id,a) values (668,39);
+insert into t (id,a) values (668,40);
+insert into t (id,a) values (668,41);
+insert into t (id,a) values (668,42);
+insert into t (id,a) values (668,43);
+insert into t (id,a) values (668,44);
+insert into t (id,a) values (668,45);
+insert into t (id,a) values (668,46);
+insert into t (id,a) values (668,47);
+insert into t (id,a) values (668,48);
+insert into t (id,a) values (668,49);
+insert into t (id,a) values (668,50);
+insert into t (id,a) values (668,51);
+insert into t (id,a) values (668,52);
+insert into t (id,a) values (668,53);
+insert into t (id,a) values (668,54);
+insert into t (id,a) values (668,55);
+insert into t (id,a) values (668,56);
+insert into t (id,a) values (668,57);
+insert into t (id,a) values (668,58);
+insert into t (id,a) values (668,59);
+insert into t (id,a) values (668,60);
+insert into t (id,a) values (668,61);
+insert into t (id,a) values (668,62);
+insert into t (id,a) values (668,63);
+insert into t (id,a) values (668,64);
+insert into t (id,a) values (668,65);
+insert into t (id,a) values (668,66);
+insert into t (id,a) values (668,67);
+insert into t (id,a) values (668,68);
+insert into t (id,a) values (668,69);
+insert into t (id,a) values (668,70);
+insert into t (id,a) values (668,71);
+insert into t (id,a) values (668,72);
+insert into t (id,a) values (668,73);
+insert into t (id,a) values (668,74);
+insert into t (id,a) values (668,75);
+insert into t (id,a) values (668,76);
+insert into t (id,a) values (668,77);
+insert into t (id,a) values (668,78);
+insert into t (id,a) values (668,79);
+insert into t (id,a) values (668,80);
+insert into t (id,a) values (668,81);
+insert into t (id,a) values (668,82);
+insert into t (id,a) values (668,83);
+insert into t (id,a) values (668,84);
+insert into t (id,a) values (668,85);
+insert into t (id,a) values (668,86);
+insert into t (id,a) values (668,87);
+insert into t (id,a) values (668,88);
+insert into t (id,a) values (668,89);
+insert into t (id,a) values (668,90);
+insert into t (id,a) values (668,91);
+insert into t (id,a) values (668,92);
+insert into t (id,a) values (668,93);
+insert into t (id,a) values (668,94);
+insert into t (id,a) values (668,95);
+insert into t (id,a) values (668,96);
+insert into t (id,a) values (668,97);
+insert into t (id,a) values (668,98);
+insert into t (id,a) values (668,99);
+insert into t (id,a) values (669,0);
+insert into t (id,a) values (669,1);
+insert into t (id,a) values (669,2);
+insert into t (id,a) values (669,3);
+insert into t (id,a) values (669,4);
+insert into t (id,a) values (669,5);
+insert into t (id,a) values (669,6);
+insert into t (id,a) values (669,7);
+insert into t (id,a) values (669,8);
+insert into t (id,a) values (669,9);
+insert into t (id,a) values (669,10);
+insert into t (id,a) values (669,11);
+insert into t (id,a) values (669,12);
+insert into t (id,a) values (669,13);
+insert into t (id,a) values (669,14);
+insert into t (id,a) values (669,15);
+insert into t (id,a) values (669,16);
+insert into t (id,a) values (669,17);
+insert into t (id,a) values (669,18);
+insert into t (id,a) values (669,19);
+insert into t (id,a) values (669,20);
+insert into t (id,a) values (669,21);
+insert into t (id,a) values (669,22);
+insert into t (id,a) values (669,23);
+insert into t (id,a) values (669,24);
+insert into t (id,a) values (669,25);
+insert into t (id,a) values (669,26);
+insert into t (id,a) values (669,27);
+insert into t (id,a) values (669,28);
+insert into t (id,a) values (669,29);
+insert into t (id,a) values (669,30);
+insert into t (id,a) values (669,31);
+insert into t (id,a) values (669,32);
+insert into t (id,a) values (669,33);
+insert into t (id,a) values (669,34);
+insert into t (id,a) values (669,35);
+insert into t (id,a) values (669,36);
+insert into t (id,a) values (669,37);
+insert into t (id,a) values (669,38);
+insert into t (id,a) values (669,39);
+insert into t (id,a) values (669,40);
+insert into t (id,a) values (669,41);
+insert into t (id,a) values (669,42);
+insert into t (id,a) values (669,43);
+insert into t (id,a) values (669,44);
+insert into t (id,a) values (669,45);
+insert into t (id,a) values (669,46);
+insert into t (id,a) values (669,47);
+insert into t (id,a) values (669,48);
+insert into t (id,a) values (669,49);
+insert into t (id,a) values (669,50);
+insert into t (id,a) values (669,51);
+insert into t (id,a) values (669,52);
+insert into t (id,a) values (669,53);
+insert into t (id,a) values (669,54);
+insert into t (id,a) values (669,55);
+insert into t (id,a) values (669,56);
+insert into t (id,a) values (669,57);
+insert into t (id,a) values (669,58);
+insert into t (id,a) values (669,59);
+insert into t (id,a) values (669,60);
+insert into t (id,a) values (669,61);
+insert into t (id,a) values (669,62);
+insert into t (id,a) values (669,63);
+insert into t (id,a) values (669,64);
+insert into t (id,a) values (669,65);
+insert into t (id,a) values (669,66);
+insert into t (id,a) values (669,67);
+insert into t (id,a) values (669,68);
+insert into t (id,a) values (669,69);
+insert into t (id,a) values (669,70);
+insert into t (id,a) values (669,71);
+insert into t (id,a) values (669,72);
+insert into t (id,a) values (669,73);
+insert into t (id,a) values (669,74);
+insert into t (id,a) values (669,75);
+insert into t (id,a) values (669,76);
+insert into t (id,a) values (669,77);
+insert into t (id,a) values (669,78);
+insert into t (id,a) values (669,79);
+insert into t (id,a) values (669,80);
+insert into t (id,a) values (669,81);
+insert into t (id,a) values (669,82);
+insert into t (id,a) values (669,83);
+insert into t (id,a) values (669,84);
+insert into t (id,a) values (669,85);
+insert into t (id,a) values (669,86);
+insert into t (id,a) values (669,87);
+insert into t (id,a) values (669,88);
+insert into t (id,a) values (669,89);
+insert into t (id,a) values (669,90);
+insert into t (id,a) values (669,91);
+insert into t (id,a) values (669,92);
+insert into t (id,a) values (669,93);
+insert into t (id,a) values (669,94);
+insert into t (id,a) values (669,95);
+insert into t (id,a) values (669,96);
+insert into t (id,a) values (669,97);
+insert into t (id,a) values (669,98);
+insert into t (id,a) values (669,99);
+insert into t (id,a) values (670,0);
+insert into t (id,a) values (670,1);
+insert into t (id,a) values (670,2);
+insert into t (id,a) values (670,3);
+insert into t (id,a) values (670,4);
+insert into t (id,a) values (670,5);
+insert into t (id,a) values (670,6);
+insert into t (id,a) values (670,7);
+insert into t (id,a) values (670,8);
+insert into t (id,a) values (670,9);
+insert into t (id,a) values (670,10);
+insert into t (id,a) values (670,11);
+insert into t (id,a) values (670,12);
+insert into t (id,a) values (670,13);
+insert into t (id,a) values (670,14);
+insert into t (id,a) values (670,15);
+insert into t (id,a) values (670,16);
+insert into t (id,a) values (670,17);
+insert into t (id,a) values (670,18);
+insert into t (id,a) values (670,19);
+insert into t (id,a) values (670,20);
+insert into t (id,a) values (670,21);
+insert into t (id,a) values (670,22);
+insert into t (id,a) values (670,23);
+insert into t (id,a) values (670,24);
+insert into t (id,a) values (670,25);
+insert into t (id,a) values (670,26);
+insert into t (id,a) values (670,27);
+insert into t (id,a) values (670,28);
+insert into t (id,a) values (670,29);
+insert into t (id,a) values (670,30);
+insert into t (id,a) values (670,31);
+insert into t (id,a) values (670,32);
+insert into t (id,a) values (670,33);
+insert into t (id,a) values (670,34);
+insert into t (id,a) values (670,35);
+insert into t (id,a) values (670,36);
+insert into t (id,a) values (670,37);
+insert into t (id,a) values (670,38);
+insert into t (id,a) values (670,39);
+insert into t (id,a) values (670,40);
+insert into t (id,a) values (670,41);
+insert into t (id,a) values (670,42);
+insert into t (id,a) values (670,43);
+insert into t (id,a) values (670,44);
+insert into t (id,a) values (670,45);
+insert into t (id,a) values (670,46);
+insert into t (id,a) values (670,47);
+insert into t (id,a) values (670,48);
+insert into t (id,a) values (670,49);
+insert into t (id,a) values (670,50);
+insert into t (id,a) values (670,51);
+insert into t (id,a) values (670,52);
+insert into t (id,a) values (670,53);
+insert into t (id,a) values (670,54);
+insert into t (id,a) values (670,55);
+insert into t (id,a) values (670,56);
+insert into t (id,a) values (670,57);
+insert into t (id,a) values (670,58);
+insert into t (id,a) values (670,59);
+insert into t (id,a) values (670,60);
+insert into t (id,a) values (670,61);
+insert into t (id,a) values (670,62);
+insert into t (id,a) values (670,63);
+insert into t (id,a) values (670,64);
+insert into t (id,a) values (670,65);
+insert into t (id,a) values (670,66);
+insert into t (id,a) values (670,67);
+insert into t (id,a) values (670,68);
+insert into t (id,a) values (670,69);
+insert into t (id,a) values (670,70);
+insert into t (id,a) values (670,71);
+insert into t (id,a) values (670,72);
+insert into t (id,a) values (670,73);
+insert into t (id,a) values (670,74);
+insert into t (id,a) values (670,75);
+insert into t (id,a) values (670,76);
+insert into t (id,a) values (670,77);
+insert into t (id,a) values (670,78);
+insert into t (id,a) values (670,79);
+insert into t (id,a) values (670,80);
+insert into t (id,a) values (670,81);
+insert into t (id,a) values (670,82);
+insert into t (id,a) values (670,83);
+insert into t (id,a) values (670,84);
+insert into t (id,a) values (670,85);
+insert into t (id,a) values (670,86);
+insert into t (id,a) values (670,87);
+insert into t (id,a) values (670,88);
+insert into t (id,a) values (670,89);
+insert into t (id,a) values (670,90);
+insert into t (id,a) values (670,91);
+insert into t (id,a) values (670,92);
+insert into t (id,a) values (670,93);
+insert into t (id,a) values (670,94);
+insert into t (id,a) values (670,95);
+insert into t (id,a) values (670,96);
+insert into t (id,a) values (670,97);
+insert into t (id,a) values (670,98);
+insert into t (id,a) values (670,99);
+insert into t (id,a) values (671,0);
+insert into t (id,a) values (671,1);
+insert into t (id,a) values (671,2);
+insert into t (id,a) values (671,3);
+insert into t (id,a) values (671,4);
+insert into t (id,a) values (671,5);
+insert into t (id,a) values (671,6);
+insert into t (id,a) values (671,7);
+insert into t (id,a) values (671,8);
+insert into t (id,a) values (671,9);
+insert into t (id,a) values (671,10);
+insert into t (id,a) values (671,11);
+insert into t (id,a) values (671,12);
+insert into t (id,a) values (671,13);
+insert into t (id,a) values (671,14);
+insert into t (id,a) values (671,15);
+insert into t (id,a) values (671,16);
+insert into t (id,a) values (671,17);
+insert into t (id,a) values (671,18);
+insert into t (id,a) values (671,19);
+insert into t (id,a) values (671,20);
+insert into t (id,a) values (671,21);
+insert into t (id,a) values (671,22);
+insert into t (id,a) values (671,23);
+insert into t (id,a) values (671,24);
+insert into t (id,a) values (671,25);
+insert into t (id,a) values (671,26);
+insert into t (id,a) values (671,27);
+insert into t (id,a) values (671,28);
+insert into t (id,a) values (671,29);
+insert into t (id,a) values (671,30);
+insert into t (id,a) values (671,31);
+insert into t (id,a) values (671,32);
+insert into t (id,a) values (671,33);
+insert into t (id,a) values (671,34);
+insert into t (id,a) values (671,35);
+insert into t (id,a) values (671,36);
+insert into t (id,a) values (671,37);
+insert into t (id,a) values (671,38);
+insert into t (id,a) values (671,39);
+insert into t (id,a) values (671,40);
+insert into t (id,a) values (671,41);
+insert into t (id,a) values (671,42);
+insert into t (id,a) values (671,43);
+insert into t (id,a) values (671,44);
+insert into t (id,a) values (671,45);
+insert into t (id,a) values (671,46);
+insert into t (id,a) values (671,47);
+insert into t (id,a) values (671,48);
+insert into t (id,a) values (671,49);
+insert into t (id,a) values (671,50);
+insert into t (id,a) values (671,51);
+insert into t (id,a) values (671,52);
+insert into t (id,a) values (671,53);
+insert into t (id,a) values (671,54);
+insert into t (id,a) values (671,55);
+insert into t (id,a) values (671,56);
+insert into t (id,a) values (671,57);
+insert into t (id,a) values (671,58);
+insert into t (id,a) values (671,59);
+insert into t (id,a) values (671,60);
+insert into t (id,a) values (671,61);
+insert into t (id,a) values (671,62);
+insert into t (id,a) values (671,63);
+insert into t (id,a) values (671,64);
+insert into t (id,a) values (671,65);
+insert into t (id,a) values (671,66);
+insert into t (id,a) values (671,67);
+insert into t (id,a) values (671,68);
+insert into t (id,a) values (671,69);
+insert into t (id,a) values (671,70);
+insert into t (id,a) values (671,71);
+insert into t (id,a) values (671,72);
+insert into t (id,a) values (671,73);
+insert into t (id,a) values (671,74);
+insert into t (id,a) values (671,75);
+insert into t (id,a) values (671,76);
+insert into t (id,a) values (671,77);
+insert into t (id,a) values (671,78);
+insert into t (id,a) values (671,79);
+insert into t (id,a) values (671,80);
+insert into t (id,a) values (671,81);
+insert into t (id,a) values (671,82);
+insert into t (id,a) values (671,83);
+insert into t (id,a) values (671,84);
+insert into t (id,a) values (671,85);
+insert into t (id,a) values (671,86);
+insert into t (id,a) values (671,87);
+insert into t (id,a) values (671,88);
+insert into t (id,a) values (671,89);
+insert into t (id,a) values (671,90);
+insert into t (id,a) values (671,91);
+insert into t (id,a) values (671,92);
+insert into t (id,a) values (671,93);
+insert into t (id,a) values (671,94);
+insert into t (id,a) values (671,95);
+insert into t (id,a) values (671,96);
+insert into t (id,a) values (671,97);
+insert into t (id,a) values (671,98);
+insert into t (id,a) values (671,99);
+insert into t (id,a) values (672,0);
+insert into t (id,a) values (672,1);
+insert into t (id,a) values (672,2);
+insert into t (id,a) values (672,3);
+insert into t (id,a) values (672,4);
+insert into t (id,a) values (672,5);
+insert into t (id,a) values (672,6);
+insert into t (id,a) values (672,7);
+insert into t (id,a) values (672,8);
+insert into t (id,a) values (672,9);
+insert into t (id,a) values (672,10);
+insert into t (id,a) values (672,11);
+insert into t (id,a) values (672,12);
+insert into t (id,a) values (672,13);
+insert into t (id,a) values (672,14);
+insert into t (id,a) values (672,15);
+insert into t (id,a) values (672,16);
+insert into t (id,a) values (672,17);
+insert into t (id,a) values (672,18);
+insert into t (id,a) values (672,19);
+insert into t (id,a) values (672,20);
+insert into t (id,a) values (672,21);
+insert into t (id,a) values (672,22);
+insert into t (id,a) values (672,23);
+insert into t (id,a) values (672,24);
+insert into t (id,a) values (672,25);
+insert into t (id,a) values (672,26);
+insert into t (id,a) values (672,27);
+insert into t (id,a) values (672,28);
+insert into t (id,a) values (672,29);
+insert into t (id,a) values (672,30);
+insert into t (id,a) values (672,31);
+insert into t (id,a) values (672,32);
+insert into t (id,a) values (672,33);
+insert into t (id,a) values (672,34);
+insert into t (id,a) values (672,35);
+insert into t (id,a) values (672,36);
+insert into t (id,a) values (672,37);
+insert into t (id,a) values (672,38);
+insert into t (id,a) values (672,39);
+insert into t (id,a) values (672,40);
+insert into t (id,a) values (672,41);
+insert into t (id,a) values (672,42);
+insert into t (id,a) values (672,43);
+insert into t (id,a) values (672,44);
+insert into t (id,a) values (672,45);
+insert into t (id,a) values (672,46);
+insert into t (id,a) values (672,47);
+insert into t (id,a) values (672,48);
+insert into t (id,a) values (672,49);
+insert into t (id,a) values (672,50);
+insert into t (id,a) values (672,51);
+insert into t (id,a) values (672,52);
+insert into t (id,a) values (672,53);
+insert into t (id,a) values (672,54);
+insert into t (id,a) values (672,55);
+insert into t (id,a) values (672,56);
+insert into t (id,a) values (672,57);
+insert into t (id,a) values (672,58);
+insert into t (id,a) values (672,59);
+insert into t (id,a) values (672,60);
+insert into t (id,a) values (672,61);
+insert into t (id,a) values (672,62);
+insert into t (id,a) values (672,63);
+insert into t (id,a) values (672,64);
+insert into t (id,a) values (672,65);
+insert into t (id,a) values (672,66);
+insert into t (id,a) values (672,67);
+insert into t (id,a) values (672,68);
+insert into t (id,a) values (672,69);
+insert into t (id,a) values (672,70);
+insert into t (id,a) values (672,71);
+insert into t (id,a) values (672,72);
+insert into t (id,a) values (672,73);
+insert into t (id,a) values (672,74);
+insert into t (id,a) values (672,75);
+insert into t (id,a) values (672,76);
+insert into t (id,a) values (672,77);
+insert into t (id,a) values (672,78);
+insert into t (id,a) values (672,79);
+insert into t (id,a) values (672,80);
+insert into t (id,a) values (672,81);
+insert into t (id,a) values (672,82);
+insert into t (id,a) values (672,83);
+insert into t (id,a) values (672,84);
+insert into t (id,a) values (672,85);
+insert into t (id,a) values (672,86);
+insert into t (id,a) values (672,87);
+insert into t (id,a) values (672,88);
+insert into t (id,a) values (672,89);
+insert into t (id,a) values (672,90);
+insert into t (id,a) values (672,91);
+insert into t (id,a) values (672,92);
+insert into t (id,a) values (672,93);
+insert into t (id,a) values (672,94);
+insert into t (id,a) values (672,95);
+insert into t (id,a) values (672,96);
+insert into t (id,a) values (672,97);
+insert into t (id,a) values (672,98);
+insert into t (id,a) values (672,99);
+insert into t (id,a) values (673,0);
+insert into t (id,a) values (673,1);
+insert into t (id,a) values (673,2);
+insert into t (id,a) values (673,3);
+insert into t (id,a) values (673,4);
+insert into t (id,a) values (673,5);
+insert into t (id,a) values (673,6);
+insert into t (id,a) values (673,7);
+insert into t (id,a) values (673,8);
+insert into t (id,a) values (673,9);
+insert into t (id,a) values (673,10);
+insert into t (id,a) values (673,11);
+insert into t (id,a) values (673,12);
+insert into t (id,a) values (673,13);
+insert into t (id,a) values (673,14);
+insert into t (id,a) values (673,15);
+insert into t (id,a) values (673,16);
+insert into t (id,a) values (673,17);
+insert into t (id,a) values (673,18);
+insert into t (id,a) values (673,19);
+insert into t (id,a) values (673,20);
+insert into t (id,a) values (673,21);
+insert into t (id,a) values (673,22);
+insert into t (id,a) values (673,23);
+insert into t (id,a) values (673,24);
+insert into t (id,a) values (673,25);
+insert into t (id,a) values (673,26);
+insert into t (id,a) values (673,27);
+insert into t (id,a) values (673,28);
+insert into t (id,a) values (673,29);
+insert into t (id,a) values (673,30);
+insert into t (id,a) values (673,31);
+insert into t (id,a) values (673,32);
+insert into t (id,a) values (673,33);
+insert into t (id,a) values (673,34);
+insert into t (id,a) values (673,35);
+insert into t (id,a) values (673,36);
+insert into t (id,a) values (673,37);
+insert into t (id,a) values (673,38);
+insert into t (id,a) values (673,39);
+insert into t (id,a) values (673,40);
+insert into t (id,a) values (673,41);
+insert into t (id,a) values (673,42);
+insert into t (id,a) values (673,43);
+insert into t (id,a) values (673,44);
+insert into t (id,a) values (673,45);
+insert into t (id,a) values (673,46);
+insert into t (id,a) values (673,47);
+insert into t (id,a) values (673,48);
+insert into t (id,a) values (673,49);
+insert into t (id,a) values (673,50);
+insert into t (id,a) values (673,51);
+insert into t (id,a) values (673,52);
+insert into t (id,a) values (673,53);
+insert into t (id,a) values (673,54);
+insert into t (id,a) values (673,55);
+insert into t (id,a) values (673,56);
+insert into t (id,a) values (673,57);
+insert into t (id,a) values (673,58);
+insert into t (id,a) values (673,59);
+insert into t (id,a) values (673,60);
+insert into t (id,a) values (673,61);
+insert into t (id,a) values (673,62);
+insert into t (id,a) values (673,63);
+insert into t (id,a) values (673,64);
+insert into t (id,a) values (673,65);
+insert into t (id,a) values (673,66);
+insert into t (id,a) values (673,67);
+insert into t (id,a) values (673,68);
+insert into t (id,a) values (673,69);
+insert into t (id,a) values (673,70);
+insert into t (id,a) values (673,71);
+insert into t (id,a) values (673,72);
+insert into t (id,a) values (673,73);
+insert into t (id,a) values (673,74);
+insert into t (id,a) values (673,75);
+insert into t (id,a) values (673,76);
+insert into t (id,a) values (673,77);
+insert into t (id,a) values (673,78);
+insert into t (id,a) values (673,79);
+insert into t (id,a) values (673,80);
+insert into t (id,a) values (673,81);
+insert into t (id,a) values (673,82);
+insert into t (id,a) values (673,83);
+insert into t (id,a) values (673,84);
+insert into t (id,a) values (673,85);
+insert into t (id,a) values (673,86);
+insert into t (id,a) values (673,87);
+insert into t (id,a) values (673,88);
+insert into t (id,a) values (673,89);
+insert into t (id,a) values (673,90);
+insert into t (id,a) values (673,91);
+insert into t (id,a) values (673,92);
+insert into t (id,a) values (673,93);
+insert into t (id,a) values (673,94);
+insert into t (id,a) values (673,95);
+insert into t (id,a) values (673,96);
+insert into t (id,a) values (673,97);
+insert into t (id,a) values (673,98);
+insert into t (id,a) values (673,99);
+insert into t (id,a) values (674,0);
+insert into t (id,a) values (674,1);
+insert into t (id,a) values (674,2);
+insert into t (id,a) values (674,3);
+insert into t (id,a) values (674,4);
+insert into t (id,a) values (674,5);
+insert into t (id,a) values (674,6);
+insert into t (id,a) values (674,7);
+insert into t (id,a) values (674,8);
+insert into t (id,a) values (674,9);
+insert into t (id,a) values (674,10);
+insert into t (id,a) values (674,11);
+insert into t (id,a) values (674,12);
+insert into t (id,a) values (674,13);
+insert into t (id,a) values (674,14);
+insert into t (id,a) values (674,15);
+insert into t (id,a) values (674,16);
+insert into t (id,a) values (674,17);
+insert into t (id,a) values (674,18);
+insert into t (id,a) values (674,19);
+insert into t (id,a) values (674,20);
+insert into t (id,a) values (674,21);
+insert into t (id,a) values (674,22);
+insert into t (id,a) values (674,23);
+insert into t (id,a) values (674,24);
+insert into t (id,a) values (674,25);
+insert into t (id,a) values (674,26);
+insert into t (id,a) values (674,27);
+insert into t (id,a) values (674,28);
+insert into t (id,a) values (674,29);
+insert into t (id,a) values (674,30);
+insert into t (id,a) values (674,31);
+insert into t (id,a) values (674,32);
+insert into t (id,a) values (674,33);
+insert into t (id,a) values (674,34);
+insert into t (id,a) values (674,35);
+insert into t (id,a) values (674,36);
+insert into t (id,a) values (674,37);
+insert into t (id,a) values (674,38);
+insert into t (id,a) values (674,39);
+insert into t (id,a) values (674,40);
+insert into t (id,a) values (674,41);
+insert into t (id,a) values (674,42);
+insert into t (id,a) values (674,43);
+insert into t (id,a) values (674,44);
+insert into t (id,a) values (674,45);
+insert into t (id,a) values (674,46);
+insert into t (id,a) values (674,47);
+insert into t (id,a) values (674,48);
+insert into t (id,a) values (674,49);
+insert into t (id,a) values (674,50);
+insert into t (id,a) values (674,51);
+insert into t (id,a) values (674,52);
+insert into t (id,a) values (674,53);
+insert into t (id,a) values (674,54);
+insert into t (id,a) values (674,55);
+insert into t (id,a) values (674,56);
+insert into t (id,a) values (674,57);
+insert into t (id,a) values (674,58);
+insert into t (id,a) values (674,59);
+insert into t (id,a) values (674,60);
+insert into t (id,a) values (674,61);
+insert into t (id,a) values (674,62);
+insert into t (id,a) values (674,63);
+insert into t (id,a) values (674,64);
+insert into t (id,a) values (674,65);
+insert into t (id,a) values (674,66);
+insert into t (id,a) values (674,67);
+insert into t (id,a) values (674,68);
+insert into t (id,a) values (674,69);
+insert into t (id,a) values (674,70);
+insert into t (id,a) values (674,71);
+insert into t (id,a) values (674,72);
+insert into t (id,a) values (674,73);
+insert into t (id,a) values (674,74);
+insert into t (id,a) values (674,75);
+insert into t (id,a) values (674,76);
+insert into t (id,a) values (674,77);
+insert into t (id,a) values (674,78);
+insert into t (id,a) values (674,79);
+insert into t (id,a) values (674,80);
+insert into t (id,a) values (674,81);
+insert into t (id,a) values (674,82);
+insert into t (id,a) values (674,83);
+insert into t (id,a) values (674,84);
+insert into t (id,a) values (674,85);
+insert into t (id,a) values (674,86);
+insert into t (id,a) values (674,87);
+insert into t (id,a) values (674,88);
+insert into t (id,a) values (674,89);
+insert into t (id,a) values (674,90);
+insert into t (id,a) values (674,91);
+insert into t (id,a) values (674,92);
+insert into t (id,a) values (674,93);
+insert into t (id,a) values (674,94);
+insert into t (id,a) values (674,95);
+insert into t (id,a) values (674,96);
+insert into t (id,a) values (674,97);
+insert into t (id,a) values (674,98);
+insert into t (id,a) values (674,99);
+insert into t (id,a) values (675,0);
+insert into t (id,a) values (675,1);
+insert into t (id,a) values (675,2);
+insert into t (id,a) values (675,3);
+insert into t (id,a) values (675,4);
+insert into t (id,a) values (675,5);
+insert into t (id,a) values (675,6);
+insert into t (id,a) values (675,7);
+insert into t (id,a) values (675,8);
+insert into t (id,a) values (675,9);
+insert into t (id,a) values (675,10);
+insert into t (id,a) values (675,11);
+insert into t (id,a) values (675,12);
+insert into t (id,a) values (675,13);
+insert into t (id,a) values (675,14);
+insert into t (id,a) values (675,15);
+insert into t (id,a) values (675,16);
+insert into t (id,a) values (675,17);
+insert into t (id,a) values (675,18);
+insert into t (id,a) values (675,19);
+insert into t (id,a) values (675,20);
+insert into t (id,a) values (675,21);
+insert into t (id,a) values (675,22);
+insert into t (id,a) values (675,23);
+insert into t (id,a) values (675,24);
+insert into t (id,a) values (675,25);
+insert into t (id,a) values (675,26);
+insert into t (id,a) values (675,27);
+insert into t (id,a) values (675,28);
+insert into t (id,a) values (675,29);
+insert into t (id,a) values (675,30);
+insert into t (id,a) values (675,31);
+insert into t (id,a) values (675,32);
+insert into t (id,a) values (675,33);
+insert into t (id,a) values (675,34);
+insert into t (id,a) values (675,35);
+insert into t (id,a) values (675,36);
+insert into t (id,a) values (675,37);
+insert into t (id,a) values (675,38);
+insert into t (id,a) values (675,39);
+insert into t (id,a) values (675,40);
+insert into t (id,a) values (675,41);
+insert into t (id,a) values (675,42);
+insert into t (id,a) values (675,43);
+insert into t (id,a) values (675,44);
+insert into t (id,a) values (675,45);
+insert into t (id,a) values (675,46);
+insert into t (id,a) values (675,47);
+insert into t (id,a) values (675,48);
+insert into t (id,a) values (675,49);
+insert into t (id,a) values (675,50);
+insert into t (id,a) values (675,51);
+insert into t (id,a) values (675,52);
+insert into t (id,a) values (675,53);
+insert into t (id,a) values (675,54);
+insert into t (id,a) values (675,55);
+insert into t (id,a) values (675,56);
+insert into t (id,a) values (675,57);
+insert into t (id,a) values (675,58);
+insert into t (id,a) values (675,59);
+insert into t (id,a) values (675,60);
+insert into t (id,a) values (675,61);
+insert into t (id,a) values (675,62);
+insert into t (id,a) values (675,63);
+insert into t (id,a) values (675,64);
+insert into t (id,a) values (675,65);
+insert into t (id,a) values (675,66);
+insert into t (id,a) values (675,67);
+insert into t (id,a) values (675,68);
+insert into t (id,a) values (675,69);
+insert into t (id,a) values (675,70);
+insert into t (id,a) values (675,71);
+insert into t (id,a) values (675,72);
+insert into t (id,a) values (675,73);
+insert into t (id,a) values (675,74);
+insert into t (id,a) values (675,75);
+insert into t (id,a) values (675,76);
+insert into t (id,a) values (675,77);
+insert into t (id,a) values (675,78);
+insert into t (id,a) values (675,79);
+insert into t (id,a) values (675,80);
+insert into t (id,a) values (675,81);
+insert into t (id,a) values (675,82);
+insert into t (id,a) values (675,83);
+insert into t (id,a) values (675,84);
+insert into t (id,a) values (675,85);
+insert into t (id,a) values (675,86);
+insert into t (id,a) values (675,87);
+insert into t (id,a) values (675,88);
+insert into t (id,a) values (675,89);
+insert into t (id,a) values (675,90);
+insert into t (id,a) values (675,91);
+insert into t (id,a) values (675,92);
+insert into t (id,a) values (675,93);
+insert into t (id,a) values (675,94);
+insert into t (id,a) values (675,95);
+insert into t (id,a) values (675,96);
+insert into t (id,a) values (675,97);
+insert into t (id,a) values (675,98);
+insert into t (id,a) values (675,99);
+insert into t (id,a) values (676,0);
+insert into t (id,a) values (676,1);
+insert into t (id,a) values (676,2);
+insert into t (id,a) values (676,3);
+insert into t (id,a) values (676,4);
+insert into t (id,a) values (676,5);
+insert into t (id,a) values (676,6);
+insert into t (id,a) values (676,7);
+insert into t (id,a) values (676,8);
+insert into t (id,a) values (676,9);
+insert into t (id,a) values (676,10);
+insert into t (id,a) values (676,11);
+insert into t (id,a) values (676,12);
+insert into t (id,a) values (676,13);
+insert into t (id,a) values (676,14);
+insert into t (id,a) values (676,15);
+insert into t (id,a) values (676,16);
+insert into t (id,a) values (676,17);
+insert into t (id,a) values (676,18);
+insert into t (id,a) values (676,19);
+insert into t (id,a) values (676,20);
+insert into t (id,a) values (676,21);
+insert into t (id,a) values (676,22);
+insert into t (id,a) values (676,23);
+insert into t (id,a) values (676,24);
+insert into t (id,a) values (676,25);
+insert into t (id,a) values (676,26);
+insert into t (id,a) values (676,27);
+insert into t (id,a) values (676,28);
+insert into t (id,a) values (676,29);
+insert into t (id,a) values (676,30);
+insert into t (id,a) values (676,31);
+insert into t (id,a) values (676,32);
+insert into t (id,a) values (676,33);
+insert into t (id,a) values (676,34);
+insert into t (id,a) values (676,35);
+insert into t (id,a) values (676,36);
+insert into t (id,a) values (676,37);
+insert into t (id,a) values (676,38);
+insert into t (id,a) values (676,39);
+insert into t (id,a) values (676,40);
+insert into t (id,a) values (676,41);
+insert into t (id,a) values (676,42);
+insert into t (id,a) values (676,43);
+insert into t (id,a) values (676,44);
+insert into t (id,a) values (676,45);
+insert into t (id,a) values (676,46);
+insert into t (id,a) values (676,47);
+insert into t (id,a) values (676,48);
+insert into t (id,a) values (676,49);
+insert into t (id,a) values (676,50);
+insert into t (id,a) values (676,51);
+insert into t (id,a) values (676,52);
+insert into t (id,a) values (676,53);
+insert into t (id,a) values (676,54);
+insert into t (id,a) values (676,55);
+insert into t (id,a) values (676,56);
+insert into t (id,a) values (676,57);
+insert into t (id,a) values (676,58);
+insert into t (id,a) values (676,59);
+insert into t (id,a) values (676,60);
+insert into t (id,a) values (676,61);
+insert into t (id,a) values (676,62);
+insert into t (id,a) values (676,63);
+insert into t (id,a) values (676,64);
+insert into t (id,a) values (676,65);
+insert into t (id,a) values (676,66);
+insert into t (id,a) values (676,67);
+insert into t (id,a) values (676,68);
+insert into t (id,a) values (676,69);
+insert into t (id,a) values (676,70);
+insert into t (id,a) values (676,71);
+insert into t (id,a) values (676,72);
+insert into t (id,a) values (676,73);
+insert into t (id,a) values (676,74);
+insert into t (id,a) values (676,75);
+insert into t (id,a) values (676,76);
+insert into t (id,a) values (676,77);
+insert into t (id,a) values (676,78);
+insert into t (id,a) values (676,79);
+insert into t (id,a) values (676,80);
+insert into t (id,a) values (676,81);
+insert into t (id,a) values (676,82);
+insert into t (id,a) values (676,83);
+insert into t (id,a) values (676,84);
+insert into t (id,a) values (676,85);
+insert into t (id,a) values (676,86);
+insert into t (id,a) values (676,87);
+insert into t (id,a) values (676,88);
+insert into t (id,a) values (676,89);
+insert into t (id,a) values (676,90);
+insert into t (id,a) values (676,91);
+insert into t (id,a) values (676,92);
+insert into t (id,a) values (676,93);
+insert into t (id,a) values (676,94);
+insert into t (id,a) values (676,95);
+insert into t (id,a) values (676,96);
+insert into t (id,a) values (676,97);
+insert into t (id,a) values (676,98);
+insert into t (id,a) values (676,99);
+insert into t (id,a) values (677,0);
+insert into t (id,a) values (677,1);
+insert into t (id,a) values (677,2);
+insert into t (id,a) values (677,3);
+insert into t (id,a) values (677,4);
+insert into t (id,a) values (677,5);
+insert into t (id,a) values (677,6);
+insert into t (id,a) values (677,7);
+insert into t (id,a) values (677,8);
+insert into t (id,a) values (677,9);
+insert into t (id,a) values (677,10);
+insert into t (id,a) values (677,11);
+insert into t (id,a) values (677,12);
+insert into t (id,a) values (677,13);
+insert into t (id,a) values (677,14);
+insert into t (id,a) values (677,15);
+insert into t (id,a) values (677,16);
+insert into t (id,a) values (677,17);
+insert into t (id,a) values (677,18);
+insert into t (id,a) values (677,19);
+insert into t (id,a) values (677,20);
+insert into t (id,a) values (677,21);
+insert into t (id,a) values (677,22);
+insert into t (id,a) values (677,23);
+insert into t (id,a) values (677,24);
+insert into t (id,a) values (677,25);
+insert into t (id,a) values (677,26);
+insert into t (id,a) values (677,27);
+insert into t (id,a) values (677,28);
+insert into t (id,a) values (677,29);
+insert into t (id,a) values (677,30);
+insert into t (id,a) values (677,31);
+insert into t (id,a) values (677,32);
+insert into t (id,a) values (677,33);
+insert into t (id,a) values (677,34);
+insert into t (id,a) values (677,35);
+insert into t (id,a) values (677,36);
+insert into t (id,a) values (677,37);
+insert into t (id,a) values (677,38);
+insert into t (id,a) values (677,39);
+insert into t (id,a) values (677,40);
+insert into t (id,a) values (677,41);
+insert into t (id,a) values (677,42);
+insert into t (id,a) values (677,43);
+insert into t (id,a) values (677,44);
+insert into t (id,a) values (677,45);
+insert into t (id,a) values (677,46);
+insert into t (id,a) values (677,47);
+insert into t (id,a) values (677,48);
+insert into t (id,a) values (677,49);
+insert into t (id,a) values (677,50);
+insert into t (id,a) values (677,51);
+insert into t (id,a) values (677,52);
+insert into t (id,a) values (677,53);
+insert into t (id,a) values (677,54);
+insert into t (id,a) values (677,55);
+insert into t (id,a) values (677,56);
+insert into t (id,a) values (677,57);
+insert into t (id,a) values (677,58);
+insert into t (id,a) values (677,59);
+insert into t (id,a) values (677,60);
+insert into t (id,a) values (677,61);
+insert into t (id,a) values (677,62);
+insert into t (id,a) values (677,63);
+insert into t (id,a) values (677,64);
+insert into t (id,a) values (677,65);
+insert into t (id,a) values (677,66);
+insert into t (id,a) values (677,67);
+insert into t (id,a) values (677,68);
+insert into t (id,a) values (677,69);
+insert into t (id,a) values (677,70);
+insert into t (id,a) values (677,71);
+insert into t (id,a) values (677,72);
+insert into t (id,a) values (677,73);
+insert into t (id,a) values (677,74);
+insert into t (id,a) values (677,75);
+insert into t (id,a) values (677,76);
+insert into t (id,a) values (677,77);
+insert into t (id,a) values (677,78);
+insert into t (id,a) values (677,79);
+insert into t (id,a) values (677,80);
+insert into t (id,a) values (677,81);
+insert into t (id,a) values (677,82);
+insert into t (id,a) values (677,83);
+insert into t (id,a) values (677,84);
+insert into t (id,a) values (677,85);
+insert into t (id,a) values (677,86);
+insert into t (id,a) values (677,87);
+insert into t (id,a) values (677,88);
+insert into t (id,a) values (677,89);
+insert into t (id,a) values (677,90);
+insert into t (id,a) values (677,91);
+insert into t (id,a) values (677,92);
+insert into t (id,a) values (677,93);
+insert into t (id,a) values (677,94);
+insert into t (id,a) values (677,95);
+insert into t (id,a) values (677,96);
+insert into t (id,a) values (677,97);
+insert into t (id,a) values (677,98);
+insert into t (id,a) values (677,99);
+insert into t (id,a) values (678,0);
+insert into t (id,a) values (678,1);
+insert into t (id,a) values (678,2);
+insert into t (id,a) values (678,3);
+insert into t (id,a) values (678,4);
+insert into t (id,a) values (678,5);
+insert into t (id,a) values (678,6);
+insert into t (id,a) values (678,7);
+insert into t (id,a) values (678,8);
+insert into t (id,a) values (678,9);
+insert into t (id,a) values (678,10);
+insert into t (id,a) values (678,11);
+insert into t (id,a) values (678,12);
+insert into t (id,a) values (678,13);
+insert into t (id,a) values (678,14);
+insert into t (id,a) values (678,15);
+insert into t (id,a) values (678,16);
+insert into t (id,a) values (678,17);
+insert into t (id,a) values (678,18);
+insert into t (id,a) values (678,19);
+insert into t (id,a) values (678,20);
+insert into t (id,a) values (678,21);
+insert into t (id,a) values (678,22);
+insert into t (id,a) values (678,23);
+insert into t (id,a) values (678,24);
+insert into t (id,a) values (678,25);
+insert into t (id,a) values (678,26);
+insert into t (id,a) values (678,27);
+insert into t (id,a) values (678,28);
+insert into t (id,a) values (678,29);
+insert into t (id,a) values (678,30);
+insert into t (id,a) values (678,31);
+insert into t (id,a) values (678,32);
+insert into t (id,a) values (678,33);
+insert into t (id,a) values (678,34);
+insert into t (id,a) values (678,35);
+insert into t (id,a) values (678,36);
+insert into t (id,a) values (678,37);
+insert into t (id,a) values (678,38);
+insert into t (id,a) values (678,39);
+insert into t (id,a) values (678,40);
+insert into t (id,a) values (678,41);
+insert into t (id,a) values (678,42);
+insert into t (id,a) values (678,43);
+insert into t (id,a) values (678,44);
+insert into t (id,a) values (678,45);
+insert into t (id,a) values (678,46);
+insert into t (id,a) values (678,47);
+insert into t (id,a) values (678,48);
+insert into t (id,a) values (678,49);
+insert into t (id,a) values (678,50);
+insert into t (id,a) values (678,51);
+insert into t (id,a) values (678,52);
+insert into t (id,a) values (678,53);
+insert into t (id,a) values (678,54);
+insert into t (id,a) values (678,55);
+insert into t (id,a) values (678,56);
+insert into t (id,a) values (678,57);
+insert into t (id,a) values (678,58);
+insert into t (id,a) values (678,59);
+insert into t (id,a) values (678,60);
+insert into t (id,a) values (678,61);
+insert into t (id,a) values (678,62);
+insert into t (id,a) values (678,63);
+insert into t (id,a) values (678,64);
+insert into t (id,a) values (678,65);
+insert into t (id,a) values (678,66);
+insert into t (id,a) values (678,67);
+insert into t (id,a) values (678,68);
+insert into t (id,a) values (678,69);
+insert into t (id,a) values (678,70);
+insert into t (id,a) values (678,71);
+insert into t (id,a) values (678,72);
+insert into t (id,a) values (678,73);
+insert into t (id,a) values (678,74);
+insert into t (id,a) values (678,75);
+insert into t (id,a) values (678,76);
+insert into t (id,a) values (678,77);
+insert into t (id,a) values (678,78);
+insert into t (id,a) values (678,79);
+insert into t (id,a) values (678,80);
+insert into t (id,a) values (678,81);
+insert into t (id,a) values (678,82);
+insert into t (id,a) values (678,83);
+insert into t (id,a) values (678,84);
+insert into t (id,a) values (678,85);
+insert into t (id,a) values (678,86);
+insert into t (id,a) values (678,87);
+insert into t (id,a) values (678,88);
+insert into t (id,a) values (678,89);
+insert into t (id,a) values (678,90);
+insert into t (id,a) values (678,91);
+insert into t (id,a) values (678,92);
+insert into t (id,a) values (678,93);
+insert into t (id,a) values (678,94);
+insert into t (id,a) values (678,95);
+insert into t (id,a) values (678,96);
+insert into t (id,a) values (678,97);
+insert into t (id,a) values (678,98);
+insert into t (id,a) values (678,99);
+insert into t (id,a) values (679,0);
+insert into t (id,a) values (679,1);
+insert into t (id,a) values (679,2);
+insert into t (id,a) values (679,3);
+insert into t (id,a) values (679,4);
+insert into t (id,a) values (679,5);
+insert into t (id,a) values (679,6);
+insert into t (id,a) values (679,7);
+insert into t (id,a) values (679,8);
+insert into t (id,a) values (679,9);
+insert into t (id,a) values (679,10);
+insert into t (id,a) values (679,11);
+insert into t (id,a) values (679,12);
+insert into t (id,a) values (679,13);
+insert into t (id,a) values (679,14);
+insert into t (id,a) values (679,15);
+insert into t (id,a) values (679,16);
+insert into t (id,a) values (679,17);
+insert into t (id,a) values (679,18);
+insert into t (id,a) values (679,19);
+insert into t (id,a) values (679,20);
+insert into t (id,a) values (679,21);
+insert into t (id,a) values (679,22);
+insert into t (id,a) values (679,23);
+insert into t (id,a) values (679,24);
+insert into t (id,a) values (679,25);
+insert into t (id,a) values (679,26);
+insert into t (id,a) values (679,27);
+insert into t (id,a) values (679,28);
+insert into t (id,a) values (679,29);
+insert into t (id,a) values (679,30);
+insert into t (id,a) values (679,31);
+insert into t (id,a) values (679,32);
+insert into t (id,a) values (679,33);
+insert into t (id,a) values (679,34);
+insert into t (id,a) values (679,35);
+insert into t (id,a) values (679,36);
+insert into t (id,a) values (679,37);
+insert into t (id,a) values (679,38);
+insert into t (id,a) values (679,39);
+insert into t (id,a) values (679,40);
+insert into t (id,a) values (679,41);
+insert into t (id,a) values (679,42);
+insert into t (id,a) values (679,43);
+insert into t (id,a) values (679,44);
+insert into t (id,a) values (679,45);
+insert into t (id,a) values (679,46);
+insert into t (id,a) values (679,47);
+insert into t (id,a) values (679,48);
+insert into t (id,a) values (679,49);
+insert into t (id,a) values (679,50);
+insert into t (id,a) values (679,51);
+insert into t (id,a) values (679,52);
+insert into t (id,a) values (679,53);
+insert into t (id,a) values (679,54);
+insert into t (id,a) values (679,55);
+insert into t (id,a) values (679,56);
+insert into t (id,a) values (679,57);
+insert into t (id,a) values (679,58);
+insert into t (id,a) values (679,59);
+insert into t (id,a) values (679,60);
+insert into t (id,a) values (679,61);
+insert into t (id,a) values (679,62);
+insert into t (id,a) values (679,63);
+insert into t (id,a) values (679,64);
+insert into t (id,a) values (679,65);
+insert into t (id,a) values (679,66);
+insert into t (id,a) values (679,67);
+insert into t (id,a) values (679,68);
+insert into t (id,a) values (679,69);
+insert into t (id,a) values (679,70);
+insert into t (id,a) values (679,71);
+insert into t (id,a) values (679,72);
+insert into t (id,a) values (679,73);
+insert into t (id,a) values (679,74);
+insert into t (id,a) values (679,75);
+insert into t (id,a) values (679,76);
+insert into t (id,a) values (679,77);
+insert into t (id,a) values (679,78);
+insert into t (id,a) values (679,79);
+insert into t (id,a) values (679,80);
+insert into t (id,a) values (679,81);
+insert into t (id,a) values (679,82);
+insert into t (id,a) values (679,83);
+insert into t (id,a) values (679,84);
+insert into t (id,a) values (679,85);
+insert into t (id,a) values (679,86);
+insert into t (id,a) values (679,87);
+insert into t (id,a) values (679,88);
+insert into t (id,a) values (679,89);
+insert into t (id,a) values (679,90);
+insert into t (id,a) values (679,91);
+insert into t (id,a) values (679,92);
+insert into t (id,a) values (679,93);
+insert into t (id,a) values (679,94);
+insert into t (id,a) values (679,95);
+insert into t (id,a) values (679,96);
+insert into t (id,a) values (679,97);
+insert into t (id,a) values (679,98);
+insert into t (id,a) values (679,99);
+insert into t (id,a) values (680,0);
+insert into t (id,a) values (680,1);
+insert into t (id,a) values (680,2);
+insert into t (id,a) values (680,3);
+insert into t (id,a) values (680,4);
+insert into t (id,a) values (680,5);
+insert into t (id,a) values (680,6);
+insert into t (id,a) values (680,7);
+insert into t (id,a) values (680,8);
+insert into t (id,a) values (680,9);
+insert into t (id,a) values (680,10);
+insert into t (id,a) values (680,11);
+insert into t (id,a) values (680,12);
+insert into t (id,a) values (680,13);
+insert into t (id,a) values (680,14);
+insert into t (id,a) values (680,15);
+insert into t (id,a) values (680,16);
+insert into t (id,a) values (680,17);
+insert into t (id,a) values (680,18);
+insert into t (id,a) values (680,19);
+insert into t (id,a) values (680,20);
+insert into t (id,a) values (680,21);
+insert into t (id,a) values (680,22);
+insert into t (id,a) values (680,23);
+insert into t (id,a) values (680,24);
+insert into t (id,a) values (680,25);
+insert into t (id,a) values (680,26);
+insert into t (id,a) values (680,27);
+insert into t (id,a) values (680,28);
+insert into t (id,a) values (680,29);
+insert into t (id,a) values (680,30);
+insert into t (id,a) values (680,31);
+insert into t (id,a) values (680,32);
+insert into t (id,a) values (680,33);
+insert into t (id,a) values (680,34);
+insert into t (id,a) values (680,35);
+insert into t (id,a) values (680,36);
+insert into t (id,a) values (680,37);
+insert into t (id,a) values (680,38);
+insert into t (id,a) values (680,39);
+insert into t (id,a) values (680,40);
+insert into t (id,a) values (680,41);
+insert into t (id,a) values (680,42);
+insert into t (id,a) values (680,43);
+insert into t (id,a) values (680,44);
+insert into t (id,a) values (680,45);
+insert into t (id,a) values (680,46);
+insert into t (id,a) values (680,47);
+insert into t (id,a) values (680,48);
+insert into t (id,a) values (680,49);
+insert into t (id,a) values (680,50);
+insert into t (id,a) values (680,51);
+insert into t (id,a) values (680,52);
+insert into t (id,a) values (680,53);
+insert into t (id,a) values (680,54);
+insert into t (id,a) values (680,55);
+insert into t (id,a) values (680,56);
+insert into t (id,a) values (680,57);
+insert into t (id,a) values (680,58);
+insert into t (id,a) values (680,59);
+insert into t (id,a) values (680,60);
+insert into t (id,a) values (680,61);
+insert into t (id,a) values (680,62);
+insert into t (id,a) values (680,63);
+insert into t (id,a) values (680,64);
+insert into t (id,a) values (680,65);
+insert into t (id,a) values (680,66);
+insert into t (id,a) values (680,67);
+insert into t (id,a) values (680,68);
+insert into t (id,a) values (680,69);
+insert into t (id,a) values (680,70);
+insert into t (id,a) values (680,71);
+insert into t (id,a) values (680,72);
+insert into t (id,a) values (680,73);
+insert into t (id,a) values (680,74);
+insert into t (id,a) values (680,75);
+insert into t (id,a) values (680,76);
+insert into t (id,a) values (680,77);
+insert into t (id,a) values (680,78);
+insert into t (id,a) values (680,79);
+insert into t (id,a) values (680,80);
+insert into t (id,a) values (680,81);
+insert into t (id,a) values (680,82);
+insert into t (id,a) values (680,83);
+insert into t (id,a) values (680,84);
+insert into t (id,a) values (680,85);
+insert into t (id,a) values (680,86);
+insert into t (id,a) values (680,87);
+insert into t (id,a) values (680,88);
+insert into t (id,a) values (680,89);
+insert into t (id,a) values (680,90);
+insert into t (id,a) values (680,91);
+insert into t (id,a) values (680,92);
+insert into t (id,a) values (680,93);
+insert into t (id,a) values (680,94);
+insert into t (id,a) values (680,95);
+insert into t (id,a) values (680,96);
+insert into t (id,a) values (680,97);
+insert into t (id,a) values (680,98);
+insert into t (id,a) values (680,99);
+insert into t (id,a) values (681,0);
+insert into t (id,a) values (681,1);
+insert into t (id,a) values (681,2);
+insert into t (id,a) values (681,3);
+insert into t (id,a) values (681,4);
+insert into t (id,a) values (681,5);
+insert into t (id,a) values (681,6);
+insert into t (id,a) values (681,7);
+insert into t (id,a) values (681,8);
+insert into t (id,a) values (681,9);
+insert into t (id,a) values (681,10);
+insert into t (id,a) values (681,11);
+insert into t (id,a) values (681,12);
+insert into t (id,a) values (681,13);
+insert into t (id,a) values (681,14);
+insert into t (id,a) values (681,15);
+insert into t (id,a) values (681,16);
+insert into t (id,a) values (681,17);
+insert into t (id,a) values (681,18);
+insert into t (id,a) values (681,19);
+insert into t (id,a) values (681,20);
+insert into t (id,a) values (681,21);
+insert into t (id,a) values (681,22);
+insert into t (id,a) values (681,23);
+insert into t (id,a) values (681,24);
+insert into t (id,a) values (681,25);
+insert into t (id,a) values (681,26);
+insert into t (id,a) values (681,27);
+insert into t (id,a) values (681,28);
+insert into t (id,a) values (681,29);
+insert into t (id,a) values (681,30);
+insert into t (id,a) values (681,31);
+insert into t (id,a) values (681,32);
+insert into t (id,a) values (681,33);
+insert into t (id,a) values (681,34);
+insert into t (id,a) values (681,35);
+insert into t (id,a) values (681,36);
+insert into t (id,a) values (681,37);
+insert into t (id,a) values (681,38);
+insert into t (id,a) values (681,39);
+insert into t (id,a) values (681,40);
+insert into t (id,a) values (681,41);
+insert into t (id,a) values (681,42);
+insert into t (id,a) values (681,43);
+insert into t (id,a) values (681,44);
+insert into t (id,a) values (681,45);
+insert into t (id,a) values (681,46);
+insert into t (id,a) values (681,47);
+insert into t (id,a) values (681,48);
+insert into t (id,a) values (681,49);
+insert into t (id,a) values (681,50);
+insert into t (id,a) values (681,51);
+insert into t (id,a) values (681,52);
+insert into t (id,a) values (681,53);
+insert into t (id,a) values (681,54);
+insert into t (id,a) values (681,55);
+insert into t (id,a) values (681,56);
+insert into t (id,a) values (681,57);
+insert into t (id,a) values (681,58);
+insert into t (id,a) values (681,59);
+insert into t (id,a) values (681,60);
+insert into t (id,a) values (681,61);
+insert into t (id,a) values (681,62);
+insert into t (id,a) values (681,63);
+insert into t (id,a) values (681,64);
+insert into t (id,a) values (681,65);
+insert into t (id,a) values (681,66);
+insert into t (id,a) values (681,67);
+insert into t (id,a) values (681,68);
+insert into t (id,a) values (681,69);
+insert into t (id,a) values (681,70);
+insert into t (id,a) values (681,71);
+insert into t (id,a) values (681,72);
+insert into t (id,a) values (681,73);
+insert into t (id,a) values (681,74);
+insert into t (id,a) values (681,75);
+insert into t (id,a) values (681,76);
+insert into t (id,a) values (681,77);
+insert into t (id,a) values (681,78);
+insert into t (id,a) values (681,79);
+insert into t (id,a) values (681,80);
+insert into t (id,a) values (681,81);
+insert into t (id,a) values (681,82);
+insert into t (id,a) values (681,83);
+insert into t (id,a) values (681,84);
+insert into t (id,a) values (681,85);
+insert into t (id,a) values (681,86);
+insert into t (id,a) values (681,87);
+insert into t (id,a) values (681,88);
+insert into t (id,a) values (681,89);
+insert into t (id,a) values (681,90);
+insert into t (id,a) values (681,91);
+insert into t (id,a) values (681,92);
+insert into t (id,a) values (681,93);
+insert into t (id,a) values (681,94);
+insert into t (id,a) values (681,95);
+insert into t (id,a) values (681,96);
+insert into t (id,a) values (681,97);
+insert into t (id,a) values (681,98);
+insert into t (id,a) values (681,99);
+insert into t (id,a) values (682,0);
+insert into t (id,a) values (682,1);
+insert into t (id,a) values (682,2);
+insert into t (id,a) values (682,3);
+insert into t (id,a) values (682,4);
+insert into t (id,a) values (682,5);
+insert into t (id,a) values (682,6);
+insert into t (id,a) values (682,7);
+insert into t (id,a) values (682,8);
+insert into t (id,a) values (682,9);
+insert into t (id,a) values (682,10);
+insert into t (id,a) values (682,11);
+insert into t (id,a) values (682,12);
+insert into t (id,a) values (682,13);
+insert into t (id,a) values (682,14);
+insert into t (id,a) values (682,15);
+insert into t (id,a) values (682,16);
+insert into t (id,a) values (682,17);
+insert into t (id,a) values (682,18);
+insert into t (id,a) values (682,19);
+insert into t (id,a) values (682,20);
+insert into t (id,a) values (682,21);
+insert into t (id,a) values (682,22);
+insert into t (id,a) values (682,23);
+insert into t (id,a) values (682,24);
+insert into t (id,a) values (682,25);
+insert into t (id,a) values (682,26);
+insert into t (id,a) values (682,27);
+insert into t (id,a) values (682,28);
+insert into t (id,a) values (682,29);
+insert into t (id,a) values (682,30);
+insert into t (id,a) values (682,31);
+insert into t (id,a) values (682,32);
+insert into t (id,a) values (682,33);
+insert into t (id,a) values (682,34);
+insert into t (id,a) values (682,35);
+insert into t (id,a) values (682,36);
+insert into t (id,a) values (682,37);
+insert into t (id,a) values (682,38);
+insert into t (id,a) values (682,39);
+insert into t (id,a) values (682,40);
+insert into t (id,a) values (682,41);
+insert into t (id,a) values (682,42);
+insert into t (id,a) values (682,43);
+insert into t (id,a) values (682,44);
+insert into t (id,a) values (682,45);
+insert into t (id,a) values (682,46);
+insert into t (id,a) values (682,47);
+insert into t (id,a) values (682,48);
+insert into t (id,a) values (682,49);
+insert into t (id,a) values (682,50);
+insert into t (id,a) values (682,51);
+insert into t (id,a) values (682,52);
+insert into t (id,a) values (682,53);
+insert into t (id,a) values (682,54);
+insert into t (id,a) values (682,55);
+insert into t (id,a) values (682,56);
+insert into t (id,a) values (682,57);
+insert into t (id,a) values (682,58);
+insert into t (id,a) values (682,59);
+insert into t (id,a) values (682,60);
+insert into t (id,a) values (682,61);
+insert into t (id,a) values (682,62);
+insert into t (id,a) values (682,63);
+insert into t (id,a) values (682,64);
+insert into t (id,a) values (682,65);
+insert into t (id,a) values (682,66);
+insert into t (id,a) values (682,67);
+insert into t (id,a) values (682,68);
+insert into t (id,a) values (682,69);
+insert into t (id,a) values (682,70);
+insert into t (id,a) values (682,71);
+insert into t (id,a) values (682,72);
+insert into t (id,a) values (682,73);
+insert into t (id,a) values (682,74);
+insert into t (id,a) values (682,75);
+insert into t (id,a) values (682,76);
+insert into t (id,a) values (682,77);
+insert into t (id,a) values (682,78);
+insert into t (id,a) values (682,79);
+insert into t (id,a) values (682,80);
+insert into t (id,a) values (682,81);
+insert into t (id,a) values (682,82);
+insert into t (id,a) values (682,83);
+insert into t (id,a) values (682,84);
+insert into t (id,a) values (682,85);
+insert into t (id,a) values (682,86);
+insert into t (id,a) values (682,87);
+insert into t (id,a) values (682,88);
+insert into t (id,a) values (682,89);
+insert into t (id,a) values (682,90);
+insert into t (id,a) values (682,91);
+insert into t (id,a) values (682,92);
+insert into t (id,a) values (682,93);
+insert into t (id,a) values (682,94);
+insert into t (id,a) values (682,95);
+insert into t (id,a) values (682,96);
+insert into t (id,a) values (682,97);
+insert into t (id,a) values (682,98);
+insert into t (id,a) values (682,99);
+insert into t (id,a) values (683,0);
+insert into t (id,a) values (683,1);
+insert into t (id,a) values (683,2);
+insert into t (id,a) values (683,3);
+insert into t (id,a) values (683,4);
+insert into t (id,a) values (683,5);
+insert into t (id,a) values (683,6);
+insert into t (id,a) values (683,7);
+insert into t (id,a) values (683,8);
+insert into t (id,a) values (683,9);
+insert into t (id,a) values (683,10);
+insert into t (id,a) values (683,11);
+insert into t (id,a) values (683,12);
+insert into t (id,a) values (683,13);
+insert into t (id,a) values (683,14);
+insert into t (id,a) values (683,15);
+insert into t (id,a) values (683,16);
+insert into t (id,a) values (683,17);
+insert into t (id,a) values (683,18);
+insert into t (id,a) values (683,19);
+insert into t (id,a) values (683,20);
+insert into t (id,a) values (683,21);
+insert into t (id,a) values (683,22);
+insert into t (id,a) values (683,23);
+insert into t (id,a) values (683,24);
+insert into t (id,a) values (683,25);
+insert into t (id,a) values (683,26);
+insert into t (id,a) values (683,27);
+insert into t (id,a) values (683,28);
+insert into t (id,a) values (683,29);
+insert into t (id,a) values (683,30);
+insert into t (id,a) values (683,31);
+insert into t (id,a) values (683,32);
+insert into t (id,a) values (683,33);
+insert into t (id,a) values (683,34);
+insert into t (id,a) values (683,35);
+insert into t (id,a) values (683,36);
+insert into t (id,a) values (683,37);
+insert into t (id,a) values (683,38);
+insert into t (id,a) values (683,39);
+insert into t (id,a) values (683,40);
+insert into t (id,a) values (683,41);
+insert into t (id,a) values (683,42);
+insert into t (id,a) values (683,43);
+insert into t (id,a) values (683,44);
+insert into t (id,a) values (683,45);
+insert into t (id,a) values (683,46);
+insert into t (id,a) values (683,47);
+insert into t (id,a) values (683,48);
+insert into t (id,a) values (683,49);
+insert into t (id,a) values (683,50);
+insert into t (id,a) values (683,51);
+insert into t (id,a) values (683,52);
+insert into t (id,a) values (683,53);
+insert into t (id,a) values (683,54);
+insert into t (id,a) values (683,55);
+insert into t (id,a) values (683,56);
+insert into t (id,a) values (683,57);
+insert into t (id,a) values (683,58);
+insert into t (id,a) values (683,59);
+insert into t (id,a) values (683,60);
+insert into t (id,a) values (683,61);
+insert into t (id,a) values (683,62);
+insert into t (id,a) values (683,63);
+insert into t (id,a) values (683,64);
+insert into t (id,a) values (683,65);
+insert into t (id,a) values (683,66);
+insert into t (id,a) values (683,67);
+insert into t (id,a) values (683,68);
+insert into t (id,a) values (683,69);
+insert into t (id,a) values (683,70);
+insert into t (id,a) values (683,71);
+insert into t (id,a) values (683,72);
+insert into t (id,a) values (683,73);
+insert into t (id,a) values (683,74);
+insert into t (id,a) values (683,75);
+insert into t (id,a) values (683,76);
+insert into t (id,a) values (683,77);
+insert into t (id,a) values (683,78);
+insert into t (id,a) values (683,79);
+insert into t (id,a) values (683,80);
+insert into t (id,a) values (683,81);
+insert into t (id,a) values (683,82);
+insert into t (id,a) values (683,83);
+insert into t (id,a) values (683,84);
+insert into t (id,a) values (683,85);
+insert into t (id,a) values (683,86);
+insert into t (id,a) values (683,87);
+insert into t (id,a) values (683,88);
+insert into t (id,a) values (683,89);
+insert into t (id,a) values (683,90);
+insert into t (id,a) values (683,91);
+insert into t (id,a) values (683,92);
+insert into t (id,a) values (683,93);
+insert into t (id,a) values (683,94);
+insert into t (id,a) values (683,95);
+insert into t (id,a) values (683,96);
+insert into t (id,a) values (683,97);
+insert into t (id,a) values (683,98);
+insert into t (id,a) values (683,99);
+insert into t (id,a) values (684,0);
+insert into t (id,a) values (684,1);
+insert into t (id,a) values (684,2);
+insert into t (id,a) values (684,3);
+insert into t (id,a) values (684,4);
+insert into t (id,a) values (684,5);
+insert into t (id,a) values (684,6);
+insert into t (id,a) values (684,7);
+insert into t (id,a) values (684,8);
+insert into t (id,a) values (684,9);
+insert into t (id,a) values (684,10);
+insert into t (id,a) values (684,11);
+insert into t (id,a) values (684,12);
+insert into t (id,a) values (684,13);
+insert into t (id,a) values (684,14);
+insert into t (id,a) values (684,15);
+insert into t (id,a) values (684,16);
+insert into t (id,a) values (684,17);
+insert into t (id,a) values (684,18);
+insert into t (id,a) values (684,19);
+insert into t (id,a) values (684,20);
+insert into t (id,a) values (684,21);
+insert into t (id,a) values (684,22);
+insert into t (id,a) values (684,23);
+insert into t (id,a) values (684,24);
+insert into t (id,a) values (684,25);
+insert into t (id,a) values (684,26);
+insert into t (id,a) values (684,27);
+insert into t (id,a) values (684,28);
+insert into t (id,a) values (684,29);
+insert into t (id,a) values (684,30);
+insert into t (id,a) values (684,31);
+insert into t (id,a) values (684,32);
+insert into t (id,a) values (684,33);
+insert into t (id,a) values (684,34);
+insert into t (id,a) values (684,35);
+insert into t (id,a) values (684,36);
+insert into t (id,a) values (684,37);
+insert into t (id,a) values (684,38);
+insert into t (id,a) values (684,39);
+insert into t (id,a) values (684,40);
+insert into t (id,a) values (684,41);
+insert into t (id,a) values (684,42);
+insert into t (id,a) values (684,43);
+insert into t (id,a) values (684,44);
+insert into t (id,a) values (684,45);
+insert into t (id,a) values (684,46);
+insert into t (id,a) values (684,47);
+insert into t (id,a) values (684,48);
+insert into t (id,a) values (684,49);
+insert into t (id,a) values (684,50);
+insert into t (id,a) values (684,51);
+insert into t (id,a) values (684,52);
+insert into t (id,a) values (684,53);
+insert into t (id,a) values (684,54);
+insert into t (id,a) values (684,55);
+insert into t (id,a) values (684,56);
+insert into t (id,a) values (684,57);
+insert into t (id,a) values (684,58);
+insert into t (id,a) values (684,59);
+insert into t (id,a) values (684,60);
+insert into t (id,a) values (684,61);
+insert into t (id,a) values (684,62);
+insert into t (id,a) values (684,63);
+insert into t (id,a) values (684,64);
+insert into t (id,a) values (684,65);
+insert into t (id,a) values (684,66);
+insert into t (id,a) values (684,67);
+insert into t (id,a) values (684,68);
+insert into t (id,a) values (684,69);
+insert into t (id,a) values (684,70);
+insert into t (id,a) values (684,71);
+insert into t (id,a) values (684,72);
+insert into t (id,a) values (684,73);
+insert into t (id,a) values (684,74);
+insert into t (id,a) values (684,75);
+insert into t (id,a) values (684,76);
+insert into t (id,a) values (684,77);
+insert into t (id,a) values (684,78);
+insert into t (id,a) values (684,79);
+insert into t (id,a) values (684,80);
+insert into t (id,a) values (684,81);
+insert into t (id,a) values (684,82);
+insert into t (id,a) values (684,83);
+insert into t (id,a) values (684,84);
+insert into t (id,a) values (684,85);
+insert into t (id,a) values (684,86);
+insert into t (id,a) values (684,87);
+insert into t (id,a) values (684,88);
+insert into t (id,a) values (684,89);
+insert into t (id,a) values (684,90);
+insert into t (id,a) values (684,91);
+insert into t (id,a) values (684,92);
+insert into t (id,a) values (684,93);
+insert into t (id,a) values (684,94);
+insert into t (id,a) values (684,95);
+insert into t (id,a) values (684,96);
+insert into t (id,a) values (684,97);
+insert into t (id,a) values (684,98);
+insert into t (id,a) values (684,99);
+insert into t (id,a) values (685,0);
+insert into t (id,a) values (685,1);
+insert into t (id,a) values (685,2);
+insert into t (id,a) values (685,3);
+insert into t (id,a) values (685,4);
+insert into t (id,a) values (685,5);
+insert into t (id,a) values (685,6);
+insert into t (id,a) values (685,7);
+insert into t (id,a) values (685,8);
+insert into t (id,a) values (685,9);
+insert into t (id,a) values (685,10);
+insert into t (id,a) values (685,11);
+insert into t (id,a) values (685,12);
+insert into t (id,a) values (685,13);
+insert into t (id,a) values (685,14);
+insert into t (id,a) values (685,15);
+insert into t (id,a) values (685,16);
+insert into t (id,a) values (685,17);
+insert into t (id,a) values (685,18);
+insert into t (id,a) values (685,19);
+insert into t (id,a) values (685,20);
+insert into t (id,a) values (685,21);
+insert into t (id,a) values (685,22);
+insert into t (id,a) values (685,23);
+insert into t (id,a) values (685,24);
+insert into t (id,a) values (685,25);
+insert into t (id,a) values (685,26);
+insert into t (id,a) values (685,27);
+insert into t (id,a) values (685,28);
+insert into t (id,a) values (685,29);
+insert into t (id,a) values (685,30);
+insert into t (id,a) values (685,31);
+insert into t (id,a) values (685,32);
+insert into t (id,a) values (685,33);
+insert into t (id,a) values (685,34);
+insert into t (id,a) values (685,35);
+insert into t (id,a) values (685,36);
+insert into t (id,a) values (685,37);
+insert into t (id,a) values (685,38);
+insert into t (id,a) values (685,39);
+insert into t (id,a) values (685,40);
+insert into t (id,a) values (685,41);
+insert into t (id,a) values (685,42);
+insert into t (id,a) values (685,43);
+insert into t (id,a) values (685,44);
+insert into t (id,a) values (685,45);
+insert into t (id,a) values (685,46);
+insert into t (id,a) values (685,47);
+insert into t (id,a) values (685,48);
+insert into t (id,a) values (685,49);
+insert into t (id,a) values (685,50);
+insert into t (id,a) values (685,51);
+insert into t (id,a) values (685,52);
+insert into t (id,a) values (685,53);
+insert into t (id,a) values (685,54);
+insert into t (id,a) values (685,55);
+insert into t (id,a) values (685,56);
+insert into t (id,a) values (685,57);
+insert into t (id,a) values (685,58);
+insert into t (id,a) values (685,59);
+insert into t (id,a) values (685,60);
+insert into t (id,a) values (685,61);
+insert into t (id,a) values (685,62);
+insert into t (id,a) values (685,63);
+insert into t (id,a) values (685,64);
+insert into t (id,a) values (685,65);
+insert into t (id,a) values (685,66);
+insert into t (id,a) values (685,67);
+insert into t (id,a) values (685,68);
+insert into t (id,a) values (685,69);
+insert into t (id,a) values (685,70);
+insert into t (id,a) values (685,71);
+insert into t (id,a) values (685,72);
+insert into t (id,a) values (685,73);
+insert into t (id,a) values (685,74);
+insert into t (id,a) values (685,75);
+insert into t (id,a) values (685,76);
+insert into t (id,a) values (685,77);
+insert into t (id,a) values (685,78);
+insert into t (id,a) values (685,79);
+insert into t (id,a) values (685,80);
+insert into t (id,a) values (685,81);
+insert into t (id,a) values (685,82);
+insert into t (id,a) values (685,83);
+insert into t (id,a) values (685,84);
+insert into t (id,a) values (685,85);
+insert into t (id,a) values (685,86);
+insert into t (id,a) values (685,87);
+insert into t (id,a) values (685,88);
+insert into t (id,a) values (685,89);
+insert into t (id,a) values (685,90);
+insert into t (id,a) values (685,91);
+insert into t (id,a) values (685,92);
+insert into t (id,a) values (685,93);
+insert into t (id,a) values (685,94);
+insert into t (id,a) values (685,95);
+insert into t (id,a) values (685,96);
+insert into t (id,a) values (685,97);
+insert into t (id,a) values (685,98);
+insert into t (id,a) values (685,99);
+insert into t (id,a) values (686,0);
+insert into t (id,a) values (686,1);
+insert into t (id,a) values (686,2);
+insert into t (id,a) values (686,3);
+insert into t (id,a) values (686,4);
+insert into t (id,a) values (686,5);
+insert into t (id,a) values (686,6);
+insert into t (id,a) values (686,7);
+insert into t (id,a) values (686,8);
+insert into t (id,a) values (686,9);
+insert into t (id,a) values (686,10);
+insert into t (id,a) values (686,11);
+insert into t (id,a) values (686,12);
+insert into t (id,a) values (686,13);
+insert into t (id,a) values (686,14);
+insert into t (id,a) values (686,15);
+insert into t (id,a) values (686,16);
+insert into t (id,a) values (686,17);
+insert into t (id,a) values (686,18);
+insert into t (id,a) values (686,19);
+insert into t (id,a) values (686,20);
+insert into t (id,a) values (686,21);
+insert into t (id,a) values (686,22);
+insert into t (id,a) values (686,23);
+insert into t (id,a) values (686,24);
+insert into t (id,a) values (686,25);
+insert into t (id,a) values (686,26);
+insert into t (id,a) values (686,27);
+insert into t (id,a) values (686,28);
+insert into t (id,a) values (686,29);
+insert into t (id,a) values (686,30);
+insert into t (id,a) values (686,31);
+insert into t (id,a) values (686,32);
+insert into t (id,a) values (686,33);
+insert into t (id,a) values (686,34);
+insert into t (id,a) values (686,35);
+insert into t (id,a) values (686,36);
+insert into t (id,a) values (686,37);
+insert into t (id,a) values (686,38);
+insert into t (id,a) values (686,39);
+insert into t (id,a) values (686,40);
+insert into t (id,a) values (686,41);
+insert into t (id,a) values (686,42);
+insert into t (id,a) values (686,43);
+insert into t (id,a) values (686,44);
+insert into t (id,a) values (686,45);
+insert into t (id,a) values (686,46);
+insert into t (id,a) values (686,47);
+insert into t (id,a) values (686,48);
+insert into t (id,a) values (686,49);
+insert into t (id,a) values (686,50);
+insert into t (id,a) values (686,51);
+insert into t (id,a) values (686,52);
+insert into t (id,a) values (686,53);
+insert into t (id,a) values (686,54);
+insert into t (id,a) values (686,55);
+insert into t (id,a) values (686,56);
+insert into t (id,a) values (686,57);
+insert into t (id,a) values (686,58);
+insert into t (id,a) values (686,59);
+insert into t (id,a) values (686,60);
+insert into t (id,a) values (686,61);
+insert into t (id,a) values (686,62);
+insert into t (id,a) values (686,63);
+insert into t (id,a) values (686,64);
+insert into t (id,a) values (686,65);
+insert into t (id,a) values (686,66);
+insert into t (id,a) values (686,67);
+insert into t (id,a) values (686,68);
+insert into t (id,a) values (686,69);
+insert into t (id,a) values (686,70);
+insert into t (id,a) values (686,71);
+insert into t (id,a) values (686,72);
+insert into t (id,a) values (686,73);
+insert into t (id,a) values (686,74);
+insert into t (id,a) values (686,75);
+insert into t (id,a) values (686,76);
+insert into t (id,a) values (686,77);
+insert into t (id,a) values (686,78);
+insert into t (id,a) values (686,79);
+insert into t (id,a) values (686,80);
+insert into t (id,a) values (686,81);
+insert into t (id,a) values (686,82);
+insert into t (id,a) values (686,83);
+insert into t (id,a) values (686,84);
+insert into t (id,a) values (686,85);
+insert into t (id,a) values (686,86);
+insert into t (id,a) values (686,87);
+insert into t (id,a) values (686,88);
+insert into t (id,a) values (686,89);
+insert into t (id,a) values (686,90);
+insert into t (id,a) values (686,91);
+insert into t (id,a) values (686,92);
+insert into t (id,a) values (686,93);
+insert into t (id,a) values (686,94);
+insert into t (id,a) values (686,95);
+insert into t (id,a) values (686,96);
+insert into t (id,a) values (686,97);
+insert into t (id,a) values (686,98);
+insert into t (id,a) values (686,99);
+insert into t (id,a) values (687,0);
+insert into t (id,a) values (687,1);
+insert into t (id,a) values (687,2);
+insert into t (id,a) values (687,3);
+insert into t (id,a) values (687,4);
+insert into t (id,a) values (687,5);
+insert into t (id,a) values (687,6);
+insert into t (id,a) values (687,7);
+insert into t (id,a) values (687,8);
+insert into t (id,a) values (687,9);
+insert into t (id,a) values (687,10);
+insert into t (id,a) values (687,11);
+insert into t (id,a) values (687,12);
+insert into t (id,a) values (687,13);
+insert into t (id,a) values (687,14);
+insert into t (id,a) values (687,15);
+insert into t (id,a) values (687,16);
+insert into t (id,a) values (687,17);
+insert into t (id,a) values (687,18);
+insert into t (id,a) values (687,19);
+insert into t (id,a) values (687,20);
+insert into t (id,a) values (687,21);
+insert into t (id,a) values (687,22);
+insert into t (id,a) values (687,23);
+insert into t (id,a) values (687,24);
+insert into t (id,a) values (687,25);
+insert into t (id,a) values (687,26);
+insert into t (id,a) values (687,27);
+insert into t (id,a) values (687,28);
+insert into t (id,a) values (687,29);
+insert into t (id,a) values (687,30);
+insert into t (id,a) values (687,31);
+insert into t (id,a) values (687,32);
+insert into t (id,a) values (687,33);
+insert into t (id,a) values (687,34);
+insert into t (id,a) values (687,35);
+insert into t (id,a) values (687,36);
+insert into t (id,a) values (687,37);
+insert into t (id,a) values (687,38);
+insert into t (id,a) values (687,39);
+insert into t (id,a) values (687,40);
+insert into t (id,a) values (687,41);
+insert into t (id,a) values (687,42);
+insert into t (id,a) values (687,43);
+insert into t (id,a) values (687,44);
+insert into t (id,a) values (687,45);
+insert into t (id,a) values (687,46);
+insert into t (id,a) values (687,47);
+insert into t (id,a) values (687,48);
+insert into t (id,a) values (687,49);
+insert into t (id,a) values (687,50);
+insert into t (id,a) values (687,51);
+insert into t (id,a) values (687,52);
+insert into t (id,a) values (687,53);
+insert into t (id,a) values (687,54);
+insert into t (id,a) values (687,55);
+insert into t (id,a) values (687,56);
+insert into t (id,a) values (687,57);
+insert into t (id,a) values (687,58);
+insert into t (id,a) values (687,59);
+insert into t (id,a) values (687,60);
+insert into t (id,a) values (687,61);
+insert into t (id,a) values (687,62);
+insert into t (id,a) values (687,63);
+insert into t (id,a) values (687,64);
+insert into t (id,a) values (687,65);
+insert into t (id,a) values (687,66);
+insert into t (id,a) values (687,67);
+insert into t (id,a) values (687,68);
+insert into t (id,a) values (687,69);
+insert into t (id,a) values (687,70);
+insert into t (id,a) values (687,71);
+insert into t (id,a) values (687,72);
+insert into t (id,a) values (687,73);
+insert into t (id,a) values (687,74);
+insert into t (id,a) values (687,75);
+insert into t (id,a) values (687,76);
+insert into t (id,a) values (687,77);
+insert into t (id,a) values (687,78);
+insert into t (id,a) values (687,79);
+insert into t (id,a) values (687,80);
+insert into t (id,a) values (687,81);
+insert into t (id,a) values (687,82);
+insert into t (id,a) values (687,83);
+insert into t (id,a) values (687,84);
+insert into t (id,a) values (687,85);
+insert into t (id,a) values (687,86);
+insert into t (id,a) values (687,87);
+insert into t (id,a) values (687,88);
+insert into t (id,a) values (687,89);
+insert into t (id,a) values (687,90);
+insert into t (id,a) values (687,91);
+insert into t (id,a) values (687,92);
+insert into t (id,a) values (687,93);
+insert into t (id,a) values (687,94);
+insert into t (id,a) values (687,95);
+insert into t (id,a) values (687,96);
+insert into t (id,a) values (687,97);
+insert into t (id,a) values (687,98);
+insert into t (id,a) values (687,99);
+insert into t (id,a) values (688,0);
+insert into t (id,a) values (688,1);
+insert into t (id,a) values (688,2);
+insert into t (id,a) values (688,3);
+insert into t (id,a) values (688,4);
+insert into t (id,a) values (688,5);
+insert into t (id,a) values (688,6);
+insert into t (id,a) values (688,7);
+insert into t (id,a) values (688,8);
+insert into t (id,a) values (688,9);
+insert into t (id,a) values (688,10);
+insert into t (id,a) values (688,11);
+insert into t (id,a) values (688,12);
+insert into t (id,a) values (688,13);
+insert into t (id,a) values (688,14);
+insert into t (id,a) values (688,15);
+insert into t (id,a) values (688,16);
+insert into t (id,a) values (688,17);
+insert into t (id,a) values (688,18);
+insert into t (id,a) values (688,19);
+insert into t (id,a) values (688,20);
+insert into t (id,a) values (688,21);
+insert into t (id,a) values (688,22);
+insert into t (id,a) values (688,23);
+insert into t (id,a) values (688,24);
+insert into t (id,a) values (688,25);
+insert into t (id,a) values (688,26);
+insert into t (id,a) values (688,27);
+insert into t (id,a) values (688,28);
+insert into t (id,a) values (688,29);
+insert into t (id,a) values (688,30);
+insert into t (id,a) values (688,31);
+insert into t (id,a) values (688,32);
+insert into t (id,a) values (688,33);
+insert into t (id,a) values (688,34);
+insert into t (id,a) values (688,35);
+insert into t (id,a) values (688,36);
+insert into t (id,a) values (688,37);
+insert into t (id,a) values (688,38);
+insert into t (id,a) values (688,39);
+insert into t (id,a) values (688,40);
+insert into t (id,a) values (688,41);
+insert into t (id,a) values (688,42);
+insert into t (id,a) values (688,43);
+insert into t (id,a) values (688,44);
+insert into t (id,a) values (688,45);
+insert into t (id,a) values (688,46);
+insert into t (id,a) values (688,47);
+insert into t (id,a) values (688,48);
+insert into t (id,a) values (688,49);
+insert into t (id,a) values (688,50);
+insert into t (id,a) values (688,51);
+insert into t (id,a) values (688,52);
+insert into t (id,a) values (688,53);
+insert into t (id,a) values (688,54);
+insert into t (id,a) values (688,55);
+insert into t (id,a) values (688,56);
+insert into t (id,a) values (688,57);
+insert into t (id,a) values (688,58);
+insert into t (id,a) values (688,59);
+insert into t (id,a) values (688,60);
+insert into t (id,a) values (688,61);
+insert into t (id,a) values (688,62);
+insert into t (id,a) values (688,63);
+insert into t (id,a) values (688,64);
+insert into t (id,a) values (688,65);
+insert into t (id,a) values (688,66);
+insert into t (id,a) values (688,67);
+insert into t (id,a) values (688,68);
+insert into t (id,a) values (688,69);
+insert into t (id,a) values (688,70);
+insert into t (id,a) values (688,71);
+insert into t (id,a) values (688,72);
+insert into t (id,a) values (688,73);
+insert into t (id,a) values (688,74);
+insert into t (id,a) values (688,75);
+insert into t (id,a) values (688,76);
+insert into t (id,a) values (688,77);
+insert into t (id,a) values (688,78);
+insert into t (id,a) values (688,79);
+insert into t (id,a) values (688,80);
+insert into t (id,a) values (688,81);
+insert into t (id,a) values (688,82);
+insert into t (id,a) values (688,83);
+insert into t (id,a) values (688,84);
+insert into t (id,a) values (688,85);
+insert into t (id,a) values (688,86);
+insert into t (id,a) values (688,87);
+insert into t (id,a) values (688,88);
+insert into t (id,a) values (688,89);
+insert into t (id,a) values (688,90);
+insert into t (id,a) values (688,91);
+insert into t (id,a) values (688,92);
+insert into t (id,a) values (688,93);
+insert into t (id,a) values (688,94);
+insert into t (id,a) values (688,95);
+insert into t (id,a) values (688,96);
+insert into t (id,a) values (688,97);
+insert into t (id,a) values (688,98);
+insert into t (id,a) values (688,99);
+insert into t (id,a) values (689,0);
+insert into t (id,a) values (689,1);
+insert into t (id,a) values (689,2);
+insert into t (id,a) values (689,3);
+insert into t (id,a) values (689,4);
+insert into t (id,a) values (689,5);
+insert into t (id,a) values (689,6);
+insert into t (id,a) values (689,7);
+insert into t (id,a) values (689,8);
+insert into t (id,a) values (689,9);
+insert into t (id,a) values (689,10);
+insert into t (id,a) values (689,11);
+insert into t (id,a) values (689,12);
+insert into t (id,a) values (689,13);
+insert into t (id,a) values (689,14);
+insert into t (id,a) values (689,15);
+insert into t (id,a) values (689,16);
+insert into t (id,a) values (689,17);
+insert into t (id,a) values (689,18);
+insert into t (id,a) values (689,19);
+insert into t (id,a) values (689,20);
+insert into t (id,a) values (689,21);
+insert into t (id,a) values (689,22);
+insert into t (id,a) values (689,23);
+insert into t (id,a) values (689,24);
+insert into t (id,a) values (689,25);
+insert into t (id,a) values (689,26);
+insert into t (id,a) values (689,27);
+insert into t (id,a) values (689,28);
+insert into t (id,a) values (689,29);
+insert into t (id,a) values (689,30);
+insert into t (id,a) values (689,31);
+insert into t (id,a) values (689,32);
+insert into t (id,a) values (689,33);
+insert into t (id,a) values (689,34);
+insert into t (id,a) values (689,35);
+insert into t (id,a) values (689,36);
+insert into t (id,a) values (689,37);
+insert into t (id,a) values (689,38);
+insert into t (id,a) values (689,39);
+insert into t (id,a) values (689,40);
+insert into t (id,a) values (689,41);
+insert into t (id,a) values (689,42);
+insert into t (id,a) values (689,43);
+insert into t (id,a) values (689,44);
+insert into t (id,a) values (689,45);
+insert into t (id,a) values (689,46);
+insert into t (id,a) values (689,47);
+insert into t (id,a) values (689,48);
+insert into t (id,a) values (689,49);
+insert into t (id,a) values (689,50);
+insert into t (id,a) values (689,51);
+insert into t (id,a) values (689,52);
+insert into t (id,a) values (689,53);
+insert into t (id,a) values (689,54);
+insert into t (id,a) values (689,55);
+insert into t (id,a) values (689,56);
+insert into t (id,a) values (689,57);
+insert into t (id,a) values (689,58);
+insert into t (id,a) values (689,59);
+insert into t (id,a) values (689,60);
+insert into t (id,a) values (689,61);
+insert into t (id,a) values (689,62);
+insert into t (id,a) values (689,63);
+insert into t (id,a) values (689,64);
+insert into t (id,a) values (689,65);
+insert into t (id,a) values (689,66);
+insert into t (id,a) values (689,67);
+insert into t (id,a) values (689,68);
+insert into t (id,a) values (689,69);
+insert into t (id,a) values (689,70);
+insert into t (id,a) values (689,71);
+insert into t (id,a) values (689,72);
+insert into t (id,a) values (689,73);
+insert into t (id,a) values (689,74);
+insert into t (id,a) values (689,75);
+insert into t (id,a) values (689,76);
+insert into t (id,a) values (689,77);
+insert into t (id,a) values (689,78);
+insert into t (id,a) values (689,79);
+insert into t (id,a) values (689,80);
+insert into t (id,a) values (689,81);
+insert into t (id,a) values (689,82);
+insert into t (id,a) values (689,83);
+insert into t (id,a) values (689,84);
+insert into t (id,a) values (689,85);
+insert into t (id,a) values (689,86);
+insert into t (id,a) values (689,87);
+insert into t (id,a) values (689,88);
+insert into t (id,a) values (689,89);
+insert into t (id,a) values (689,90);
+insert into t (id,a) values (689,91);
+insert into t (id,a) values (689,92);
+insert into t (id,a) values (689,93);
+insert into t (id,a) values (689,94);
+insert into t (id,a) values (689,95);
+insert into t (id,a) values (689,96);
+insert into t (id,a) values (689,97);
+insert into t (id,a) values (689,98);
+insert into t (id,a) values (689,99);
+insert into t (id,a) values (690,0);
+insert into t (id,a) values (690,1);
+insert into t (id,a) values (690,2);
+insert into t (id,a) values (690,3);
+insert into t (id,a) values (690,4);
+insert into t (id,a) values (690,5);
+insert into t (id,a) values (690,6);
+insert into t (id,a) values (690,7);
+insert into t (id,a) values (690,8);
+insert into t (id,a) values (690,9);
+insert into t (id,a) values (690,10);
+insert into t (id,a) values (690,11);
+insert into t (id,a) values (690,12);
+insert into t (id,a) values (690,13);
+insert into t (id,a) values (690,14);
+insert into t (id,a) values (690,15);
+insert into t (id,a) values (690,16);
+insert into t (id,a) values (690,17);
+insert into t (id,a) values (690,18);
+insert into t (id,a) values (690,19);
+insert into t (id,a) values (690,20);
+insert into t (id,a) values (690,21);
+insert into t (id,a) values (690,22);
+insert into t (id,a) values (690,23);
+insert into t (id,a) values (690,24);
+insert into t (id,a) values (690,25);
+insert into t (id,a) values (690,26);
+insert into t (id,a) values (690,27);
+insert into t (id,a) values (690,28);
+insert into t (id,a) values (690,29);
+insert into t (id,a) values (690,30);
+insert into t (id,a) values (690,31);
+insert into t (id,a) values (690,32);
+insert into t (id,a) values (690,33);
+insert into t (id,a) values (690,34);
+insert into t (id,a) values (690,35);
+insert into t (id,a) values (690,36);
+insert into t (id,a) values (690,37);
+insert into t (id,a) values (690,38);
+insert into t (id,a) values (690,39);
+insert into t (id,a) values (690,40);
+insert into t (id,a) values (690,41);
+insert into t (id,a) values (690,42);
+insert into t (id,a) values (690,43);
+insert into t (id,a) values (690,44);
+insert into t (id,a) values (690,45);
+insert into t (id,a) values (690,46);
+insert into t (id,a) values (690,47);
+insert into t (id,a) values (690,48);
+insert into t (id,a) values (690,49);
+insert into t (id,a) values (690,50);
+insert into t (id,a) values (690,51);
+insert into t (id,a) values (690,52);
+insert into t (id,a) values (690,53);
+insert into t (id,a) values (690,54);
+insert into t (id,a) values (690,55);
+insert into t (id,a) values (690,56);
+insert into t (id,a) values (690,57);
+insert into t (id,a) values (690,58);
+insert into t (id,a) values (690,59);
+insert into t (id,a) values (690,60);
+insert into t (id,a) values (690,61);
+insert into t (id,a) values (690,62);
+insert into t (id,a) values (690,63);
+insert into t (id,a) values (690,64);
+insert into t (id,a) values (690,65);
+insert into t (id,a) values (690,66);
+insert into t (id,a) values (690,67);
+insert into t (id,a) values (690,68);
+insert into t (id,a) values (690,69);
+insert into t (id,a) values (690,70);
+insert into t (id,a) values (690,71);
+insert into t (id,a) values (690,72);
+insert into t (id,a) values (690,73);
+insert into t (id,a) values (690,74);
+insert into t (id,a) values (690,75);
+insert into t (id,a) values (690,76);
+insert into t (id,a) values (690,77);
+insert into t (id,a) values (690,78);
+insert into t (id,a) values (690,79);
+insert into t (id,a) values (690,80);
+insert into t (id,a) values (690,81);
+insert into t (id,a) values (690,82);
+insert into t (id,a) values (690,83);
+insert into t (id,a) values (690,84);
+insert into t (id,a) values (690,85);
+insert into t (id,a) values (690,86);
+insert into t (id,a) values (690,87);
+insert into t (id,a) values (690,88);
+insert into t (id,a) values (690,89);
+insert into t (id,a) values (690,90);
+insert into t (id,a) values (690,91);
+insert into t (id,a) values (690,92);
+insert into t (id,a) values (690,93);
+insert into t (id,a) values (690,94);
+insert into t (id,a) values (690,95);
+insert into t (id,a) values (690,96);
+insert into t (id,a) values (690,97);
+insert into t (id,a) values (690,98);
+insert into t (id,a) values (690,99);
+insert into t (id,a) values (691,0);
+insert into t (id,a) values (691,1);
+insert into t (id,a) values (691,2);
+insert into t (id,a) values (691,3);
+insert into t (id,a) values (691,4);
+insert into t (id,a) values (691,5);
+insert into t (id,a) values (691,6);
+insert into t (id,a) values (691,7);
+insert into t (id,a) values (691,8);
+insert into t (id,a) values (691,9);
+insert into t (id,a) values (691,10);
+insert into t (id,a) values (691,11);
+insert into t (id,a) values (691,12);
+insert into t (id,a) values (691,13);
+insert into t (id,a) values (691,14);
+insert into t (id,a) values (691,15);
+insert into t (id,a) values (691,16);
+insert into t (id,a) values (691,17);
+insert into t (id,a) values (691,18);
+insert into t (id,a) values (691,19);
+insert into t (id,a) values (691,20);
+insert into t (id,a) values (691,21);
+insert into t (id,a) values (691,22);
+insert into t (id,a) values (691,23);
+insert into t (id,a) values (691,24);
+insert into t (id,a) values (691,25);
+insert into t (id,a) values (691,26);
+insert into t (id,a) values (691,27);
+insert into t (id,a) values (691,28);
+insert into t (id,a) values (691,29);
+insert into t (id,a) values (691,30);
+insert into t (id,a) values (691,31);
+insert into t (id,a) values (691,32);
+insert into t (id,a) values (691,33);
+insert into t (id,a) values (691,34);
+insert into t (id,a) values (691,35);
+insert into t (id,a) values (691,36);
+insert into t (id,a) values (691,37);
+insert into t (id,a) values (691,38);
+insert into t (id,a) values (691,39);
+insert into t (id,a) values (691,40);
+insert into t (id,a) values (691,41);
+insert into t (id,a) values (691,42);
+insert into t (id,a) values (691,43);
+insert into t (id,a) values (691,44);
+insert into t (id,a) values (691,45);
+insert into t (id,a) values (691,46);
+insert into t (id,a) values (691,47);
+insert into t (id,a) values (691,48);
+insert into t (id,a) values (691,49);
+insert into t (id,a) values (691,50);
+insert into t (id,a) values (691,51);
+insert into t (id,a) values (691,52);
+insert into t (id,a) values (691,53);
+insert into t (id,a) values (691,54);
+insert into t (id,a) values (691,55);
+insert into t (id,a) values (691,56);
+insert into t (id,a) values (691,57);
+insert into t (id,a) values (691,58);
+insert into t (id,a) values (691,59);
+insert into t (id,a) values (691,60);
+insert into t (id,a) values (691,61);
+insert into t (id,a) values (691,62);
+insert into t (id,a) values (691,63);
+insert into t (id,a) values (691,64);
+insert into t (id,a) values (691,65);
+insert into t (id,a) values (691,66);
+insert into t (id,a) values (691,67);
+insert into t (id,a) values (691,68);
+insert into t (id,a) values (691,69);
+insert into t (id,a) values (691,70);
+insert into t (id,a) values (691,71);
+insert into t (id,a) values (691,72);
+insert into t (id,a) values (691,73);
+insert into t (id,a) values (691,74);
+insert into t (id,a) values (691,75);
+insert into t (id,a) values (691,76);
+insert into t (id,a) values (691,77);
+insert into t (id,a) values (691,78);
+insert into t (id,a) values (691,79);
+insert into t (id,a) values (691,80);
+insert into t (id,a) values (691,81);
+insert into t (id,a) values (691,82);
+insert into t (id,a) values (691,83);
+insert into t (id,a) values (691,84);
+insert into t (id,a) values (691,85);
+insert into t (id,a) values (691,86);
+insert into t (id,a) values (691,87);
+insert into t (id,a) values (691,88);
+insert into t (id,a) values (691,89);
+insert into t (id,a) values (691,90);
+insert into t (id,a) values (691,91);
+insert into t (id,a) values (691,92);
+insert into t (id,a) values (691,93);
+insert into t (id,a) values (691,94);
+insert into t (id,a) values (691,95);
+insert into t (id,a) values (691,96);
+insert into t (id,a) values (691,97);
+insert into t (id,a) values (691,98);
+insert into t (id,a) values (691,99);
+insert into t (id,a) values (692,0);
+insert into t (id,a) values (692,1);
+insert into t (id,a) values (692,2);
+insert into t (id,a) values (692,3);
+insert into t (id,a) values (692,4);
+insert into t (id,a) values (692,5);
+insert into t (id,a) values (692,6);
+insert into t (id,a) values (692,7);
+insert into t (id,a) values (692,8);
+insert into t (id,a) values (692,9);
+insert into t (id,a) values (692,10);
+insert into t (id,a) values (692,11);
+insert into t (id,a) values (692,12);
+insert into t (id,a) values (692,13);
+insert into t (id,a) values (692,14);
+insert into t (id,a) values (692,15);
+insert into t (id,a) values (692,16);
+insert into t (id,a) values (692,17);
+insert into t (id,a) values (692,18);
+insert into t (id,a) values (692,19);
+insert into t (id,a) values (692,20);
+insert into t (id,a) values (692,21);
+insert into t (id,a) values (692,22);
+insert into t (id,a) values (692,23);
+insert into t (id,a) values (692,24);
+insert into t (id,a) values (692,25);
+insert into t (id,a) values (692,26);
+insert into t (id,a) values (692,27);
+insert into t (id,a) values (692,28);
+insert into t (id,a) values (692,29);
+insert into t (id,a) values (692,30);
+insert into t (id,a) values (692,31);
+insert into t (id,a) values (692,32);
+insert into t (id,a) values (692,33);
+insert into t (id,a) values (692,34);
+insert into t (id,a) values (692,35);
+insert into t (id,a) values (692,36);
+insert into t (id,a) values (692,37);
+insert into t (id,a) values (692,38);
+insert into t (id,a) values (692,39);
+insert into t (id,a) values (692,40);
+insert into t (id,a) values (692,41);
+insert into t (id,a) values (692,42);
+insert into t (id,a) values (692,43);
+insert into t (id,a) values (692,44);
+insert into t (id,a) values (692,45);
+insert into t (id,a) values (692,46);
+insert into t (id,a) values (692,47);
+insert into t (id,a) values (692,48);
+insert into t (id,a) values (692,49);
+insert into t (id,a) values (692,50);
+insert into t (id,a) values (692,51);
+insert into t (id,a) values (692,52);
+insert into t (id,a) values (692,53);
+insert into t (id,a) values (692,54);
+insert into t (id,a) values (692,55);
+insert into t (id,a) values (692,56);
+insert into t (id,a) values (692,57);
+insert into t (id,a) values (692,58);
+insert into t (id,a) values (692,59);
+insert into t (id,a) values (692,60);
+insert into t (id,a) values (692,61);
+insert into t (id,a) values (692,62);
+insert into t (id,a) values (692,63);
+insert into t (id,a) values (692,64);
+insert into t (id,a) values (692,65);
+insert into t (id,a) values (692,66);
+insert into t (id,a) values (692,67);
+insert into t (id,a) values (692,68);
+insert into t (id,a) values (692,69);
+insert into t (id,a) values (692,70);
+insert into t (id,a) values (692,71);
+insert into t (id,a) values (692,72);
+insert into t (id,a) values (692,73);
+insert into t (id,a) values (692,74);
+insert into t (id,a) values (692,75);
+insert into t (id,a) values (692,76);
+insert into t (id,a) values (692,77);
+insert into t (id,a) values (692,78);
+insert into t (id,a) values (692,79);
+insert into t (id,a) values (692,80);
+insert into t (id,a) values (692,81);
+insert into t (id,a) values (692,82);
+insert into t (id,a) values (692,83);
+insert into t (id,a) values (692,84);
+insert into t (id,a) values (692,85);
+insert into t (id,a) values (692,86);
+insert into t (id,a) values (692,87);
+insert into t (id,a) values (692,88);
+insert into t (id,a) values (692,89);
+insert into t (id,a) values (692,90);
+insert into t (id,a) values (692,91);
+insert into t (id,a) values (692,92);
+insert into t (id,a) values (692,93);
+insert into t (id,a) values (692,94);
+insert into t (id,a) values (692,95);
+insert into t (id,a) values (692,96);
+insert into t (id,a) values (692,97);
+insert into t (id,a) values (692,98);
+insert into t (id,a) values (692,99);
+insert into t (id,a) values (693,0);
+insert into t (id,a) values (693,1);
+insert into t (id,a) values (693,2);
+insert into t (id,a) values (693,3);
+insert into t (id,a) values (693,4);
+insert into t (id,a) values (693,5);
+insert into t (id,a) values (693,6);
+insert into t (id,a) values (693,7);
+insert into t (id,a) values (693,8);
+insert into t (id,a) values (693,9);
+insert into t (id,a) values (693,10);
+insert into t (id,a) values (693,11);
+insert into t (id,a) values (693,12);
+insert into t (id,a) values (693,13);
+insert into t (id,a) values (693,14);
+insert into t (id,a) values (693,15);
+insert into t (id,a) values (693,16);
+insert into t (id,a) values (693,17);
+insert into t (id,a) values (693,18);
+insert into t (id,a) values (693,19);
+insert into t (id,a) values (693,20);
+insert into t (id,a) values (693,21);
+insert into t (id,a) values (693,22);
+insert into t (id,a) values (693,23);
+insert into t (id,a) values (693,24);
+insert into t (id,a) values (693,25);
+insert into t (id,a) values (693,26);
+insert into t (id,a) values (693,27);
+insert into t (id,a) values (693,28);
+insert into t (id,a) values (693,29);
+insert into t (id,a) values (693,30);
+insert into t (id,a) values (693,31);
+insert into t (id,a) values (693,32);
+insert into t (id,a) values (693,33);
+insert into t (id,a) values (693,34);
+insert into t (id,a) values (693,35);
+insert into t (id,a) values (693,36);
+insert into t (id,a) values (693,37);
+insert into t (id,a) values (693,38);
+insert into t (id,a) values (693,39);
+insert into t (id,a) values (693,40);
+insert into t (id,a) values (693,41);
+insert into t (id,a) values (693,42);
+insert into t (id,a) values (693,43);
+insert into t (id,a) values (693,44);
+insert into t (id,a) values (693,45);
+insert into t (id,a) values (693,46);
+insert into t (id,a) values (693,47);
+insert into t (id,a) values (693,48);
+insert into t (id,a) values (693,49);
+insert into t (id,a) values (693,50);
+insert into t (id,a) values (693,51);
+insert into t (id,a) values (693,52);
+insert into t (id,a) values (693,53);
+insert into t (id,a) values (693,54);
+insert into t (id,a) values (693,55);
+insert into t (id,a) values (693,56);
+insert into t (id,a) values (693,57);
+insert into t (id,a) values (693,58);
+insert into t (id,a) values (693,59);
+insert into t (id,a) values (693,60);
+insert into t (id,a) values (693,61);
+insert into t (id,a) values (693,62);
+insert into t (id,a) values (693,63);
+insert into t (id,a) values (693,64);
+insert into t (id,a) values (693,65);
+insert into t (id,a) values (693,66);
+insert into t (id,a) values (693,67);
+insert into t (id,a) values (693,68);
+insert into t (id,a) values (693,69);
+insert into t (id,a) values (693,70);
+insert into t (id,a) values (693,71);
+insert into t (id,a) values (693,72);
+insert into t (id,a) values (693,73);
+insert into t (id,a) values (693,74);
+insert into t (id,a) values (693,75);
+insert into t (id,a) values (693,76);
+insert into t (id,a) values (693,77);
+insert into t (id,a) values (693,78);
+insert into t (id,a) values (693,79);
+insert into t (id,a) values (693,80);
+insert into t (id,a) values (693,81);
+insert into t (id,a) values (693,82);
+insert into t (id,a) values (693,83);
+insert into t (id,a) values (693,84);
+insert into t (id,a) values (693,85);
+insert into t (id,a) values (693,86);
+insert into t (id,a) values (693,87);
+insert into t (id,a) values (693,88);
+insert into t (id,a) values (693,89);
+insert into t (id,a) values (693,90);
+insert into t (id,a) values (693,91);
+insert into t (id,a) values (693,92);
+insert into t (id,a) values (693,93);
+insert into t (id,a) values (693,94);
+insert into t (id,a) values (693,95);
+insert into t (id,a) values (693,96);
+insert into t (id,a) values (693,97);
+insert into t (id,a) values (693,98);
+insert into t (id,a) values (693,99);
+insert into t (id,a) values (694,0);
+insert into t (id,a) values (694,1);
+insert into t (id,a) values (694,2);
+insert into t (id,a) values (694,3);
+insert into t (id,a) values (694,4);
+insert into t (id,a) values (694,5);
+insert into t (id,a) values (694,6);
+insert into t (id,a) values (694,7);
+insert into t (id,a) values (694,8);
+insert into t (id,a) values (694,9);
+insert into t (id,a) values (694,10);
+insert into t (id,a) values (694,11);
+insert into t (id,a) values (694,12);
+insert into t (id,a) values (694,13);
+insert into t (id,a) values (694,14);
+insert into t (id,a) values (694,15);
+insert into t (id,a) values (694,16);
+insert into t (id,a) values (694,17);
+insert into t (id,a) values (694,18);
+insert into t (id,a) values (694,19);
+insert into t (id,a) values (694,20);
+insert into t (id,a) values (694,21);
+insert into t (id,a) values (694,22);
+insert into t (id,a) values (694,23);
+insert into t (id,a) values (694,24);
+insert into t (id,a) values (694,25);
+insert into t (id,a) values (694,26);
+insert into t (id,a) values (694,27);
+insert into t (id,a) values (694,28);
+insert into t (id,a) values (694,29);
+insert into t (id,a) values (694,30);
+insert into t (id,a) values (694,31);
+insert into t (id,a) values (694,32);
+insert into t (id,a) values (694,33);
+insert into t (id,a) values (694,34);
+insert into t (id,a) values (694,35);
+insert into t (id,a) values (694,36);
+insert into t (id,a) values (694,37);
+insert into t (id,a) values (694,38);
+insert into t (id,a) values (694,39);
+insert into t (id,a) values (694,40);
+insert into t (id,a) values (694,41);
+insert into t (id,a) values (694,42);
+insert into t (id,a) values (694,43);
+insert into t (id,a) values (694,44);
+insert into t (id,a) values (694,45);
+insert into t (id,a) values (694,46);
+insert into t (id,a) values (694,47);
+insert into t (id,a) values (694,48);
+insert into t (id,a) values (694,49);
+insert into t (id,a) values (694,50);
+insert into t (id,a) values (694,51);
+insert into t (id,a) values (694,52);
+insert into t (id,a) values (694,53);
+insert into t (id,a) values (694,54);
+insert into t (id,a) values (694,55);
+insert into t (id,a) values (694,56);
+insert into t (id,a) values (694,57);
+insert into t (id,a) values (694,58);
+insert into t (id,a) values (694,59);
+insert into t (id,a) values (694,60);
+insert into t (id,a) values (694,61);
+insert into t (id,a) values (694,62);
+insert into t (id,a) values (694,63);
+insert into t (id,a) values (694,64);
+insert into t (id,a) values (694,65);
+insert into t (id,a) values (694,66);
+insert into t (id,a) values (694,67);
+insert into t (id,a) values (694,68);
+insert into t (id,a) values (694,69);
+insert into t (id,a) values (694,70);
+insert into t (id,a) values (694,71);
+insert into t (id,a) values (694,72);
+insert into t (id,a) values (694,73);
+insert into t (id,a) values (694,74);
+insert into t (id,a) values (694,75);
+insert into t (id,a) values (694,76);
+insert into t (id,a) values (694,77);
+insert into t (id,a) values (694,78);
+insert into t (id,a) values (694,79);
+insert into t (id,a) values (694,80);
+insert into t (id,a) values (694,81);
+insert into t (id,a) values (694,82);
+insert into t (id,a) values (694,83);
+insert into t (id,a) values (694,84);
+insert into t (id,a) values (694,85);
+insert into t (id,a) values (694,86);
+insert into t (id,a) values (694,87);
+insert into t (id,a) values (694,88);
+insert into t (id,a) values (694,89);
+insert into t (id,a) values (694,90);
+insert into t (id,a) values (694,91);
+insert into t (id,a) values (694,92);
+insert into t (id,a) values (694,93);
+insert into t (id,a) values (694,94);
+insert into t (id,a) values (694,95);
+insert into t (id,a) values (694,96);
+insert into t (id,a) values (694,97);
+insert into t (id,a) values (694,98);
+insert into t (id,a) values (694,99);
+insert into t (id,a) values (695,0);
+insert into t (id,a) values (695,1);
+insert into t (id,a) values (695,2);
+insert into t (id,a) values (695,3);
+insert into t (id,a) values (695,4);
+insert into t (id,a) values (695,5);
+insert into t (id,a) values (695,6);
+insert into t (id,a) values (695,7);
+insert into t (id,a) values (695,8);
+insert into t (id,a) values (695,9);
+insert into t (id,a) values (695,10);
+insert into t (id,a) values (695,11);
+insert into t (id,a) values (695,12);
+insert into t (id,a) values (695,13);
+insert into t (id,a) values (695,14);
+insert into t (id,a) values (695,15);
+insert into t (id,a) values (695,16);
+insert into t (id,a) values (695,17);
+insert into t (id,a) values (695,18);
+insert into t (id,a) values (695,19);
+insert into t (id,a) values (695,20);
+insert into t (id,a) values (695,21);
+insert into t (id,a) values (695,22);
+insert into t (id,a) values (695,23);
+insert into t (id,a) values (695,24);
+insert into t (id,a) values (695,25);
+insert into t (id,a) values (695,26);
+insert into t (id,a) values (695,27);
+insert into t (id,a) values (695,28);
+insert into t (id,a) values (695,29);
+insert into t (id,a) values (695,30);
+insert into t (id,a) values (695,31);
+insert into t (id,a) values (695,32);
+insert into t (id,a) values (695,33);
+insert into t (id,a) values (695,34);
+insert into t (id,a) values (695,35);
+insert into t (id,a) values (695,36);
+insert into t (id,a) values (695,37);
+insert into t (id,a) values (695,38);
+insert into t (id,a) values (695,39);
+insert into t (id,a) values (695,40);
+insert into t (id,a) values (695,41);
+insert into t (id,a) values (695,42);
+insert into t (id,a) values (695,43);
+insert into t (id,a) values (695,44);
+insert into t (id,a) values (695,45);
+insert into t (id,a) values (695,46);
+insert into t (id,a) values (695,47);
+insert into t (id,a) values (695,48);
+insert into t (id,a) values (695,49);
+insert into t (id,a) values (695,50);
+insert into t (id,a) values (695,51);
+insert into t (id,a) values (695,52);
+insert into t (id,a) values (695,53);
+insert into t (id,a) values (695,54);
+insert into t (id,a) values (695,55);
+insert into t (id,a) values (695,56);
+insert into t (id,a) values (695,57);
+insert into t (id,a) values (695,58);
+insert into t (id,a) values (695,59);
+insert into t (id,a) values (695,60);
+insert into t (id,a) values (695,61);
+insert into t (id,a) values (695,62);
+insert into t (id,a) values (695,63);
+insert into t (id,a) values (695,64);
+insert into t (id,a) values (695,65);
+insert into t (id,a) values (695,66);
+insert into t (id,a) values (695,67);
+insert into t (id,a) values (695,68);
+insert into t (id,a) values (695,69);
+insert into t (id,a) values (695,70);
+insert into t (id,a) values (695,71);
+insert into t (id,a) values (695,72);
+insert into t (id,a) values (695,73);
+insert into t (id,a) values (695,74);
+insert into t (id,a) values (695,75);
+insert into t (id,a) values (695,76);
+insert into t (id,a) values (695,77);
+insert into t (id,a) values (695,78);
+insert into t (id,a) values (695,79);
+insert into t (id,a) values (695,80);
+insert into t (id,a) values (695,81);
+insert into t (id,a) values (695,82);
+insert into t (id,a) values (695,83);
+insert into t (id,a) values (695,84);
+insert into t (id,a) values (695,85);
+insert into t (id,a) values (695,86);
+insert into t (id,a) values (695,87);
+insert into t (id,a) values (695,88);
+insert into t (id,a) values (695,89);
+insert into t (id,a) values (695,90);
+insert into t (id,a) values (695,91);
+insert into t (id,a) values (695,92);
+insert into t (id,a) values (695,93);
+insert into t (id,a) values (695,94);
+insert into t (id,a) values (695,95);
+insert into t (id,a) values (695,96);
+insert into t (id,a) values (695,97);
+insert into t (id,a) values (695,98);
+insert into t (id,a) values (695,99);
+insert into t (id,a) values (696,0);
+insert into t (id,a) values (696,1);
+insert into t (id,a) values (696,2);
+insert into t (id,a) values (696,3);
+insert into t (id,a) values (696,4);
+insert into t (id,a) values (696,5);
+insert into t (id,a) values (696,6);
+insert into t (id,a) values (696,7);
+insert into t (id,a) values (696,8);
+insert into t (id,a) values (696,9);
+insert into t (id,a) values (696,10);
+insert into t (id,a) values (696,11);
+insert into t (id,a) values (696,12);
+insert into t (id,a) values (696,13);
+insert into t (id,a) values (696,14);
+insert into t (id,a) values (696,15);
+insert into t (id,a) values (696,16);
+insert into t (id,a) values (696,17);
+insert into t (id,a) values (696,18);
+insert into t (id,a) values (696,19);
+insert into t (id,a) values (696,20);
+insert into t (id,a) values (696,21);
+insert into t (id,a) values (696,22);
+insert into t (id,a) values (696,23);
+insert into t (id,a) values (696,24);
+insert into t (id,a) values (696,25);
+insert into t (id,a) values (696,26);
+insert into t (id,a) values (696,27);
+insert into t (id,a) values (696,28);
+insert into t (id,a) values (696,29);
+insert into t (id,a) values (696,30);
+insert into t (id,a) values (696,31);
+insert into t (id,a) values (696,32);
+insert into t (id,a) values (696,33);
+insert into t (id,a) values (696,34);
+insert into t (id,a) values (696,35);
+insert into t (id,a) values (696,36);
+insert into t (id,a) values (696,37);
+insert into t (id,a) values (696,38);
+insert into t (id,a) values (696,39);
+insert into t (id,a) values (696,40);
+insert into t (id,a) values (696,41);
+insert into t (id,a) values (696,42);
+insert into t (id,a) values (696,43);
+insert into t (id,a) values (696,44);
+insert into t (id,a) values (696,45);
+insert into t (id,a) values (696,46);
+insert into t (id,a) values (696,47);
+insert into t (id,a) values (696,48);
+insert into t (id,a) values (696,49);
+insert into t (id,a) values (696,50);
+insert into t (id,a) values (696,51);
+insert into t (id,a) values (696,52);
+insert into t (id,a) values (696,53);
+insert into t (id,a) values (696,54);
+insert into t (id,a) values (696,55);
+insert into t (id,a) values (696,56);
+insert into t (id,a) values (696,57);
+insert into t (id,a) values (696,58);
+insert into t (id,a) values (696,59);
+insert into t (id,a) values (696,60);
+insert into t (id,a) values (696,61);
+insert into t (id,a) values (696,62);
+insert into t (id,a) values (696,63);
+insert into t (id,a) values (696,64);
+insert into t (id,a) values (696,65);
+insert into t (id,a) values (696,66);
+insert into t (id,a) values (696,67);
+insert into t (id,a) values (696,68);
+insert into t (id,a) values (696,69);
+insert into t (id,a) values (696,70);
+insert into t (id,a) values (696,71);
+insert into t (id,a) values (696,72);
+insert into t (id,a) values (696,73);
+insert into t (id,a) values (696,74);
+insert into t (id,a) values (696,75);
+insert into t (id,a) values (696,76);
+insert into t (id,a) values (696,77);
+insert into t (id,a) values (696,78);
+insert into t (id,a) values (696,79);
+insert into t (id,a) values (696,80);
+insert into t (id,a) values (696,81);
+insert into t (id,a) values (696,82);
+insert into t (id,a) values (696,83);
+insert into t (id,a) values (696,84);
+insert into t (id,a) values (696,85);
+insert into t (id,a) values (696,86);
+insert into t (id,a) values (696,87);
+insert into t (id,a) values (696,88);
+insert into t (id,a) values (696,89);
+insert into t (id,a) values (696,90);
+insert into t (id,a) values (696,91);
+insert into t (id,a) values (696,92);
+insert into t (id,a) values (696,93);
+insert into t (id,a) values (696,94);
+insert into t (id,a) values (696,95);
+insert into t (id,a) values (696,96);
+insert into t (id,a) values (696,97);
+insert into t (id,a) values (696,98);
+insert into t (id,a) values (696,99);
+insert into t (id,a) values (697,0);
+insert into t (id,a) values (697,1);
+insert into t (id,a) values (697,2);
+insert into t (id,a) values (697,3);
+insert into t (id,a) values (697,4);
+insert into t (id,a) values (697,5);
+insert into t (id,a) values (697,6);
+insert into t (id,a) values (697,7);
+insert into t (id,a) values (697,8);
+insert into t (id,a) values (697,9);
+insert into t (id,a) values (697,10);
+insert into t (id,a) values (697,11);
+insert into t (id,a) values (697,12);
+insert into t (id,a) values (697,13);
+insert into t (id,a) values (697,14);
+insert into t (id,a) values (697,15);
+insert into t (id,a) values (697,16);
+insert into t (id,a) values (697,17);
+insert into t (id,a) values (697,18);
+insert into t (id,a) values (697,19);
+insert into t (id,a) values (697,20);
+insert into t (id,a) values (697,21);
+insert into t (id,a) values (697,22);
+insert into t (id,a) values (697,23);
+insert into t (id,a) values (697,24);
+insert into t (id,a) values (697,25);
+insert into t (id,a) values (697,26);
+insert into t (id,a) values (697,27);
+insert into t (id,a) values (697,28);
+insert into t (id,a) values (697,29);
+insert into t (id,a) values (697,30);
+insert into t (id,a) values (697,31);
+insert into t (id,a) values (697,32);
+insert into t (id,a) values (697,33);
+insert into t (id,a) values (697,34);
+insert into t (id,a) values (697,35);
+insert into t (id,a) values (697,36);
+insert into t (id,a) values (697,37);
+insert into t (id,a) values (697,38);
+insert into t (id,a) values (697,39);
+insert into t (id,a) values (697,40);
+insert into t (id,a) values (697,41);
+insert into t (id,a) values (697,42);
+insert into t (id,a) values (697,43);
+insert into t (id,a) values (697,44);
+insert into t (id,a) values (697,45);
+insert into t (id,a) values (697,46);
+insert into t (id,a) values (697,47);
+insert into t (id,a) values (697,48);
+insert into t (id,a) values (697,49);
+insert into t (id,a) values (697,50);
+insert into t (id,a) values (697,51);
+insert into t (id,a) values (697,52);
+insert into t (id,a) values (697,53);
+insert into t (id,a) values (697,54);
+insert into t (id,a) values (697,55);
+insert into t (id,a) values (697,56);
+insert into t (id,a) values (697,57);
+insert into t (id,a) values (697,58);
+insert into t (id,a) values (697,59);
+insert into t (id,a) values (697,60);
+insert into t (id,a) values (697,61);
+insert into t (id,a) values (697,62);
+insert into t (id,a) values (697,63);
+insert into t (id,a) values (697,64);
+insert into t (id,a) values (697,65);
+insert into t (id,a) values (697,66);
+insert into t (id,a) values (697,67);
+insert into t (id,a) values (697,68);
+insert into t (id,a) values (697,69);
+insert into t (id,a) values (697,70);
+insert into t (id,a) values (697,71);
+insert into t (id,a) values (697,72);
+insert into t (id,a) values (697,73);
+insert into t (id,a) values (697,74);
+insert into t (id,a) values (697,75);
+insert into t (id,a) values (697,76);
+insert into t (id,a) values (697,77);
+insert into t (id,a) values (697,78);
+insert into t (id,a) values (697,79);
+insert into t (id,a) values (697,80);
+insert into t (id,a) values (697,81);
+insert into t (id,a) values (697,82);
+insert into t (id,a) values (697,83);
+insert into t (id,a) values (697,84);
+insert into t (id,a) values (697,85);
+insert into t (id,a) values (697,86);
+insert into t (id,a) values (697,87);
+insert into t (id,a) values (697,88);
+insert into t (id,a) values (697,89);
+insert into t (id,a) values (697,90);
+insert into t (id,a) values (697,91);
+insert into t (id,a) values (697,92);
+insert into t (id,a) values (697,93);
+insert into t (id,a) values (697,94);
+insert into t (id,a) values (697,95);
+insert into t (id,a) values (697,96);
+insert into t (id,a) values (697,97);
+insert into t (id,a) values (697,98);
+insert into t (id,a) values (697,99);
+insert into t (id,a) values (698,0);
+insert into t (id,a) values (698,1);
+insert into t (id,a) values (698,2);
+insert into t (id,a) values (698,3);
+insert into t (id,a) values (698,4);
+insert into t (id,a) values (698,5);
+insert into t (id,a) values (698,6);
+insert into t (id,a) values (698,7);
+insert into t (id,a) values (698,8);
+insert into t (id,a) values (698,9);
+insert into t (id,a) values (698,10);
+insert into t (id,a) values (698,11);
+insert into t (id,a) values (698,12);
+insert into t (id,a) values (698,13);
+insert into t (id,a) values (698,14);
+insert into t (id,a) values (698,15);
+insert into t (id,a) values (698,16);
+insert into t (id,a) values (698,17);
+insert into t (id,a) values (698,18);
+insert into t (id,a) values (698,19);
+insert into t (id,a) values (698,20);
+insert into t (id,a) values (698,21);
+insert into t (id,a) values (698,22);
+insert into t (id,a) values (698,23);
+insert into t (id,a) values (698,24);
+insert into t (id,a) values (698,25);
+insert into t (id,a) values (698,26);
+insert into t (id,a) values (698,27);
+insert into t (id,a) values (698,28);
+insert into t (id,a) values (698,29);
+insert into t (id,a) values (698,30);
+insert into t (id,a) values (698,31);
+insert into t (id,a) values (698,32);
+insert into t (id,a) values (698,33);
+insert into t (id,a) values (698,34);
+insert into t (id,a) values (698,35);
+insert into t (id,a) values (698,36);
+insert into t (id,a) values (698,37);
+insert into t (id,a) values (698,38);
+insert into t (id,a) values (698,39);
+insert into t (id,a) values (698,40);
+insert into t (id,a) values (698,41);
+insert into t (id,a) values (698,42);
+insert into t (id,a) values (698,43);
+insert into t (id,a) values (698,44);
+insert into t (id,a) values (698,45);
+insert into t (id,a) values (698,46);
+insert into t (id,a) values (698,47);
+insert into t (id,a) values (698,48);
+insert into t (id,a) values (698,49);
+insert into t (id,a) values (698,50);
+insert into t (id,a) values (698,51);
+insert into t (id,a) values (698,52);
+insert into t (id,a) values (698,53);
+insert into t (id,a) values (698,54);
+insert into t (id,a) values (698,55);
+insert into t (id,a) values (698,56);
+insert into t (id,a) values (698,57);
+insert into t (id,a) values (698,58);
+insert into t (id,a) values (698,59);
+insert into t (id,a) values (698,60);
+insert into t (id,a) values (698,61);
+insert into t (id,a) values (698,62);
+insert into t (id,a) values (698,63);
+insert into t (id,a) values (698,64);
+insert into t (id,a) values (698,65);
+insert into t (id,a) values (698,66);
+insert into t (id,a) values (698,67);
+insert into t (id,a) values (698,68);
+insert into t (id,a) values (698,69);
+insert into t (id,a) values (698,70);
+insert into t (id,a) values (698,71);
+insert into t (id,a) values (698,72);
+insert into t (id,a) values (698,73);
+insert into t (id,a) values (698,74);
+insert into t (id,a) values (698,75);
+insert into t (id,a) values (698,76);
+insert into t (id,a) values (698,77);
+insert into t (id,a) values (698,78);
+insert into t (id,a) values (698,79);
+insert into t (id,a) values (698,80);
+insert into t (id,a) values (698,81);
+insert into t (id,a) values (698,82);
+insert into t (id,a) values (698,83);
+insert into t (id,a) values (698,84);
+insert into t (id,a) values (698,85);
+insert into t (id,a) values (698,86);
+insert into t (id,a) values (698,87);
+insert into t (id,a) values (698,88);
+insert into t (id,a) values (698,89);
+insert into t (id,a) values (698,90);
+insert into t (id,a) values (698,91);
+insert into t (id,a) values (698,92);
+insert into t (id,a) values (698,93);
+insert into t (id,a) values (698,94);
+insert into t (id,a) values (698,95);
+insert into t (id,a) values (698,96);
+insert into t (id,a) values (698,97);
+insert into t (id,a) values (698,98);
+insert into t (id,a) values (698,99);
+insert into t (id,a) values (699,0);
+insert into t (id,a) values (699,1);
+insert into t (id,a) values (699,2);
+insert into t (id,a) values (699,3);
+insert into t (id,a) values (699,4);
+insert into t (id,a) values (699,5);
+insert into t (id,a) values (699,6);
+insert into t (id,a) values (699,7);
+insert into t (id,a) values (699,8);
+insert into t (id,a) values (699,9);
+insert into t (id,a) values (699,10);
+insert into t (id,a) values (699,11);
+insert into t (id,a) values (699,12);
+insert into t (id,a) values (699,13);
+insert into t (id,a) values (699,14);
+insert into t (id,a) values (699,15);
+insert into t (id,a) values (699,16);
+insert into t (id,a) values (699,17);
+insert into t (id,a) values (699,18);
+insert into t (id,a) values (699,19);
+insert into t (id,a) values (699,20);
+insert into t (id,a) values (699,21);
+insert into t (id,a) values (699,22);
+insert into t (id,a) values (699,23);
+insert into t (id,a) values (699,24);
+insert into t (id,a) values (699,25);
+insert into t (id,a) values (699,26);
+insert into t (id,a) values (699,27);
+insert into t (id,a) values (699,28);
+insert into t (id,a) values (699,29);
+insert into t (id,a) values (699,30);
+insert into t (id,a) values (699,31);
+insert into t (id,a) values (699,32);
+insert into t (id,a) values (699,33);
+insert into t (id,a) values (699,34);
+insert into t (id,a) values (699,35);
+insert into t (id,a) values (699,36);
+insert into t (id,a) values (699,37);
+insert into t (id,a) values (699,38);
+insert into t (id,a) values (699,39);
+insert into t (id,a) values (699,40);
+insert into t (id,a) values (699,41);
+insert into t (id,a) values (699,42);
+insert into t (id,a) values (699,43);
+insert into t (id,a) values (699,44);
+insert into t (id,a) values (699,45);
+insert into t (id,a) values (699,46);
+insert into t (id,a) values (699,47);
+insert into t (id,a) values (699,48);
+insert into t (id,a) values (699,49);
+insert into t (id,a) values (699,50);
+insert into t (id,a) values (699,51);
+insert into t (id,a) values (699,52);
+insert into t (id,a) values (699,53);
+insert into t (id,a) values (699,54);
+insert into t (id,a) values (699,55);
+insert into t (id,a) values (699,56);
+insert into t (id,a) values (699,57);
+insert into t (id,a) values (699,58);
+insert into t (id,a) values (699,59);
+insert into t (id,a) values (699,60);
+insert into t (id,a) values (699,61);
+insert into t (id,a) values (699,62);
+insert into t (id,a) values (699,63);
+insert into t (id,a) values (699,64);
+insert into t (id,a) values (699,65);
+insert into t (id,a) values (699,66);
+insert into t (id,a) values (699,67);
+insert into t (id,a) values (699,68);
+insert into t (id,a) values (699,69);
+insert into t (id,a) values (699,70);
+insert into t (id,a) values (699,71);
+insert into t (id,a) values (699,72);
+insert into t (id,a) values (699,73);
+insert into t (id,a) values (699,74);
+insert into t (id,a) values (699,75);
+insert into t (id,a) values (699,76);
+insert into t (id,a) values (699,77);
+insert into t (id,a) values (699,78);
+insert into t (id,a) values (699,79);
+insert into t (id,a) values (699,80);
+insert into t (id,a) values (699,81);
+insert into t (id,a) values (699,82);
+insert into t (id,a) values (699,83);
+insert into t (id,a) values (699,84);
+insert into t (id,a) values (699,85);
+insert into t (id,a) values (699,86);
+insert into t (id,a) values (699,87);
+insert into t (id,a) values (699,88);
+insert into t (id,a) values (699,89);
+insert into t (id,a) values (699,90);
+insert into t (id,a) values (699,91);
+insert into t (id,a) values (699,92);
+insert into t (id,a) values (699,93);
+insert into t (id,a) values (699,94);
+insert into t (id,a) values (699,95);
+insert into t (id,a) values (699,96);
+insert into t (id,a) values (699,97);
+insert into t (id,a) values (699,98);
+insert into t (id,a) values (699,99);
+insert into t (id,a) values (700,0);
+insert into t (id,a) values (700,1);
+insert into t (id,a) values (700,2);
+insert into t (id,a) values (700,3);
+insert into t (id,a) values (700,4);
+insert into t (id,a) values (700,5);
+insert into t (id,a) values (700,6);
+insert into t (id,a) values (700,7);
+insert into t (id,a) values (700,8);
+insert into t (id,a) values (700,9);
+insert into t (id,a) values (700,10);
+insert into t (id,a) values (700,11);
+insert into t (id,a) values (700,12);
+insert into t (id,a) values (700,13);
+insert into t (id,a) values (700,14);
+insert into t (id,a) values (700,15);
+insert into t (id,a) values (700,16);
+insert into t (id,a) values (700,17);
+insert into t (id,a) values (700,18);
+insert into t (id,a) values (700,19);
+insert into t (id,a) values (700,20);
+insert into t (id,a) values (700,21);
+insert into t (id,a) values (700,22);
+insert into t (id,a) values (700,23);
+insert into t (id,a) values (700,24);
+insert into t (id,a) values (700,25);
+insert into t (id,a) values (700,26);
+insert into t (id,a) values (700,27);
+insert into t (id,a) values (700,28);
+insert into t (id,a) values (700,29);
+insert into t (id,a) values (700,30);
+insert into t (id,a) values (700,31);
+insert into t (id,a) values (700,32);
+insert into t (id,a) values (700,33);
+insert into t (id,a) values (700,34);
+insert into t (id,a) values (700,35);
+insert into t (id,a) values (700,36);
+insert into t (id,a) values (700,37);
+insert into t (id,a) values (700,38);
+insert into t (id,a) values (700,39);
+insert into t (id,a) values (700,40);
+insert into t (id,a) values (700,41);
+insert into t (id,a) values (700,42);
+insert into t (id,a) values (700,43);
+insert into t (id,a) values (700,44);
+insert into t (id,a) values (700,45);
+insert into t (id,a) values (700,46);
+insert into t (id,a) values (700,47);
+insert into t (id,a) values (700,48);
+insert into t (id,a) values (700,49);
+insert into t (id,a) values (700,50);
+insert into t (id,a) values (700,51);
+insert into t (id,a) values (700,52);
+insert into t (id,a) values (700,53);
+insert into t (id,a) values (700,54);
+insert into t (id,a) values (700,55);
+insert into t (id,a) values (700,56);
+insert into t (id,a) values (700,57);
+insert into t (id,a) values (700,58);
+insert into t (id,a) values (700,59);
+insert into t (id,a) values (700,60);
+insert into t (id,a) values (700,61);
+insert into t (id,a) values (700,62);
+insert into t (id,a) values (700,63);
+insert into t (id,a) values (700,64);
+insert into t (id,a) values (700,65);
+insert into t (id,a) values (700,66);
+insert into t (id,a) values (700,67);
+insert into t (id,a) values (700,68);
+insert into t (id,a) values (700,69);
+insert into t (id,a) values (700,70);
+insert into t (id,a) values (700,71);
+insert into t (id,a) values (700,72);
+insert into t (id,a) values (700,73);
+insert into t (id,a) values (700,74);
+insert into t (id,a) values (700,75);
+insert into t (id,a) values (700,76);
+insert into t (id,a) values (700,77);
+insert into t (id,a) values (700,78);
+insert into t (id,a) values (700,79);
+insert into t (id,a) values (700,80);
+insert into t (id,a) values (700,81);
+insert into t (id,a) values (700,82);
+insert into t (id,a) values (700,83);
+insert into t (id,a) values (700,84);
+insert into t (id,a) values (700,85);
+insert into t (id,a) values (700,86);
+insert into t (id,a) values (700,87);
+insert into t (id,a) values (700,88);
+insert into t (id,a) values (700,89);
+insert into t (id,a) values (700,90);
+insert into t (id,a) values (700,91);
+insert into t (id,a) values (700,92);
+insert into t (id,a) values (700,93);
+insert into t (id,a) values (700,94);
+insert into t (id,a) values (700,95);
+insert into t (id,a) values (700,96);
+insert into t (id,a) values (700,97);
+insert into t (id,a) values (700,98);
+insert into t (id,a) values (700,99);
+insert into t (id,a) values (701,0);
+insert into t (id,a) values (701,1);
+insert into t (id,a) values (701,2);
+insert into t (id,a) values (701,3);
+insert into t (id,a) values (701,4);
+insert into t (id,a) values (701,5);
+insert into t (id,a) values (701,6);
+insert into t (id,a) values (701,7);
+insert into t (id,a) values (701,8);
+insert into t (id,a) values (701,9);
+insert into t (id,a) values (701,10);
+insert into t (id,a) values (701,11);
+insert into t (id,a) values (701,12);
+insert into t (id,a) values (701,13);
+insert into t (id,a) values (701,14);
+insert into t (id,a) values (701,15);
+insert into t (id,a) values (701,16);
+insert into t (id,a) values (701,17);
+insert into t (id,a) values (701,18);
+insert into t (id,a) values (701,19);
+insert into t (id,a) values (701,20);
+insert into t (id,a) values (701,21);
+insert into t (id,a) values (701,22);
+insert into t (id,a) values (701,23);
+insert into t (id,a) values (701,24);
+insert into t (id,a) values (701,25);
+insert into t (id,a) values (701,26);
+insert into t (id,a) values (701,27);
+insert into t (id,a) values (701,28);
+insert into t (id,a) values (701,29);
+insert into t (id,a) values (701,30);
+insert into t (id,a) values (701,31);
+insert into t (id,a) values (701,32);
+insert into t (id,a) values (701,33);
+insert into t (id,a) values (701,34);
+insert into t (id,a) values (701,35);
+insert into t (id,a) values (701,36);
+insert into t (id,a) values (701,37);
+insert into t (id,a) values (701,38);
+insert into t (id,a) values (701,39);
+insert into t (id,a) values (701,40);
+insert into t (id,a) values (701,41);
+insert into t (id,a) values (701,42);
+insert into t (id,a) values (701,43);
+insert into t (id,a) values (701,44);
+insert into t (id,a) values (701,45);
+insert into t (id,a) values (701,46);
+insert into t (id,a) values (701,47);
+insert into t (id,a) values (701,48);
+insert into t (id,a) values (701,49);
+insert into t (id,a) values (701,50);
+insert into t (id,a) values (701,51);
+insert into t (id,a) values (701,52);
+insert into t (id,a) values (701,53);
+insert into t (id,a) values (701,54);
+insert into t (id,a) values (701,55);
+insert into t (id,a) values (701,56);
+insert into t (id,a) values (701,57);
+insert into t (id,a) values (701,58);
+insert into t (id,a) values (701,59);
+insert into t (id,a) values (701,60);
+insert into t (id,a) values (701,61);
+insert into t (id,a) values (701,62);
+insert into t (id,a) values (701,63);
+insert into t (id,a) values (701,64);
+insert into t (id,a) values (701,65);
+insert into t (id,a) values (701,66);
+insert into t (id,a) values (701,67);
+insert into t (id,a) values (701,68);
+insert into t (id,a) values (701,69);
+insert into t (id,a) values (701,70);
+insert into t (id,a) values (701,71);
+insert into t (id,a) values (701,72);
+insert into t (id,a) values (701,73);
+insert into t (id,a) values (701,74);
+insert into t (id,a) values (701,75);
+insert into t (id,a) values (701,76);
+insert into t (id,a) values (701,77);
+insert into t (id,a) values (701,78);
+insert into t (id,a) values (701,79);
+insert into t (id,a) values (701,80);
+insert into t (id,a) values (701,81);
+insert into t (id,a) values (701,82);
+insert into t (id,a) values (701,83);
+insert into t (id,a) values (701,84);
+insert into t (id,a) values (701,85);
+insert into t (id,a) values (701,86);
+insert into t (id,a) values (701,87);
+insert into t (id,a) values (701,88);
+insert into t (id,a) values (701,89);
+insert into t (id,a) values (701,90);
+insert into t (id,a) values (701,91);
+insert into t (id,a) values (701,92);
+insert into t (id,a) values (701,93);
+insert into t (id,a) values (701,94);
+insert into t (id,a) values (701,95);
+insert into t (id,a) values (701,96);
+insert into t (id,a) values (701,97);
+insert into t (id,a) values (701,98);
+insert into t (id,a) values (701,99);
+insert into t (id,a) values (702,0);
+insert into t (id,a) values (702,1);
+insert into t (id,a) values (702,2);
+insert into t (id,a) values (702,3);
+insert into t (id,a) values (702,4);
+insert into t (id,a) values (702,5);
+insert into t (id,a) values (702,6);
+insert into t (id,a) values (702,7);
+insert into t (id,a) values (702,8);
+insert into t (id,a) values (702,9);
+insert into t (id,a) values (702,10);
+insert into t (id,a) values (702,11);
+insert into t (id,a) values (702,12);
+insert into t (id,a) values (702,13);
+insert into t (id,a) values (702,14);
+insert into t (id,a) values (702,15);
+insert into t (id,a) values (702,16);
+insert into t (id,a) values (702,17);
+insert into t (id,a) values (702,18);
+insert into t (id,a) values (702,19);
+insert into t (id,a) values (702,20);
+insert into t (id,a) values (702,21);
+insert into t (id,a) values (702,22);
+insert into t (id,a) values (702,23);
+insert into t (id,a) values (702,24);
+insert into t (id,a) values (702,25);
+insert into t (id,a) values (702,26);
+insert into t (id,a) values (702,27);
+insert into t (id,a) values (702,28);
+insert into t (id,a) values (702,29);
+insert into t (id,a) values (702,30);
+insert into t (id,a) values (702,31);
+insert into t (id,a) values (702,32);
+insert into t (id,a) values (702,33);
+insert into t (id,a) values (702,34);
+insert into t (id,a) values (702,35);
+insert into t (id,a) values (702,36);
+insert into t (id,a) values (702,37);
+insert into t (id,a) values (702,38);
+insert into t (id,a) values (702,39);
+insert into t (id,a) values (702,40);
+insert into t (id,a) values (702,41);
+insert into t (id,a) values (702,42);
+insert into t (id,a) values (702,43);
+insert into t (id,a) values (702,44);
+insert into t (id,a) values (702,45);
+insert into t (id,a) values (702,46);
+insert into t (id,a) values (702,47);
+insert into t (id,a) values (702,48);
+insert into t (id,a) values (702,49);
+insert into t (id,a) values (702,50);
+insert into t (id,a) values (702,51);
+insert into t (id,a) values (702,52);
+insert into t (id,a) values (702,53);
+insert into t (id,a) values (702,54);
+insert into t (id,a) values (702,55);
+insert into t (id,a) values (702,56);
+insert into t (id,a) values (702,57);
+insert into t (id,a) values (702,58);
+insert into t (id,a) values (702,59);
+insert into t (id,a) values (702,60);
+insert into t (id,a) values (702,61);
+insert into t (id,a) values (702,62);
+insert into t (id,a) values (702,63);
+insert into t (id,a) values (702,64);
+insert into t (id,a) values (702,65);
+insert into t (id,a) values (702,66);
+insert into t (id,a) values (702,67);
+insert into t (id,a) values (702,68);
+insert into t (id,a) values (702,69);
+insert into t (id,a) values (702,70);
+insert into t (id,a) values (702,71);
+insert into t (id,a) values (702,72);
+insert into t (id,a) values (702,73);
+insert into t (id,a) values (702,74);
+insert into t (id,a) values (702,75);
+insert into t (id,a) values (702,76);
+insert into t (id,a) values (702,77);
+insert into t (id,a) values (702,78);
+insert into t (id,a) values (702,79);
+insert into t (id,a) values (702,80);
+insert into t (id,a) values (702,81);
+insert into t (id,a) values (702,82);
+insert into t (id,a) values (702,83);
+insert into t (id,a) values (702,84);
+insert into t (id,a) values (702,85);
+insert into t (id,a) values (702,86);
+insert into t (id,a) values (702,87);
+insert into t (id,a) values (702,88);
+insert into t (id,a) values (702,89);
+insert into t (id,a) values (702,90);
+insert into t (id,a) values (702,91);
+insert into t (id,a) values (702,92);
+insert into t (id,a) values (702,93);
+insert into t (id,a) values (702,94);
+insert into t (id,a) values (702,95);
+insert into t (id,a) values (702,96);
+insert into t (id,a) values (702,97);
+insert into t (id,a) values (702,98);
+insert into t (id,a) values (702,99);
+insert into t (id,a) values (703,0);
+insert into t (id,a) values (703,1);
+insert into t (id,a) values (703,2);
+insert into t (id,a) values (703,3);
+insert into t (id,a) values (703,4);
+insert into t (id,a) values (703,5);
+insert into t (id,a) values (703,6);
+insert into t (id,a) values (703,7);
+insert into t (id,a) values (703,8);
+insert into t (id,a) values (703,9);
+insert into t (id,a) values (703,10);
+insert into t (id,a) values (703,11);
+insert into t (id,a) values (703,12);
+insert into t (id,a) values (703,13);
+insert into t (id,a) values (703,14);
+insert into t (id,a) values (703,15);
+insert into t (id,a) values (703,16);
+insert into t (id,a) values (703,17);
+insert into t (id,a) values (703,18);
+insert into t (id,a) values (703,19);
+insert into t (id,a) values (703,20);
+insert into t (id,a) values (703,21);
+insert into t (id,a) values (703,22);
+insert into t (id,a) values (703,23);
+insert into t (id,a) values (703,24);
+insert into t (id,a) values (703,25);
+insert into t (id,a) values (703,26);
+insert into t (id,a) values (703,27);
+insert into t (id,a) values (703,28);
+insert into t (id,a) values (703,29);
+insert into t (id,a) values (703,30);
+insert into t (id,a) values (703,31);
+insert into t (id,a) values (703,32);
+insert into t (id,a) values (703,33);
+insert into t (id,a) values (703,34);
+insert into t (id,a) values (703,35);
+insert into t (id,a) values (703,36);
+insert into t (id,a) values (703,37);
+insert into t (id,a) values (703,38);
+insert into t (id,a) values (703,39);
+insert into t (id,a) values (703,40);
+insert into t (id,a) values (703,41);
+insert into t (id,a) values (703,42);
+insert into t (id,a) values (703,43);
+insert into t (id,a) values (703,44);
+insert into t (id,a) values (703,45);
+insert into t (id,a) values (703,46);
+insert into t (id,a) values (703,47);
+insert into t (id,a) values (703,48);
+insert into t (id,a) values (703,49);
+insert into t (id,a) values (703,50);
+insert into t (id,a) values (703,51);
+insert into t (id,a) values (703,52);
+insert into t (id,a) values (703,53);
+insert into t (id,a) values (703,54);
+insert into t (id,a) values (703,55);
+insert into t (id,a) values (703,56);
+insert into t (id,a) values (703,57);
+insert into t (id,a) values (703,58);
+insert into t (id,a) values (703,59);
+insert into t (id,a) values (703,60);
+insert into t (id,a) values (703,61);
+insert into t (id,a) values (703,62);
+insert into t (id,a) values (703,63);
+insert into t (id,a) values (703,64);
+insert into t (id,a) values (703,65);
+insert into t (id,a) values (703,66);
+insert into t (id,a) values (703,67);
+insert into t (id,a) values (703,68);
+insert into t (id,a) values (703,69);
+insert into t (id,a) values (703,70);
+insert into t (id,a) values (703,71);
+insert into t (id,a) values (703,72);
+insert into t (id,a) values (703,73);
+insert into t (id,a) values (703,74);
+insert into t (id,a) values (703,75);
+insert into t (id,a) values (703,76);
+insert into t (id,a) values (703,77);
+insert into t (id,a) values (703,78);
+insert into t (id,a) values (703,79);
+insert into t (id,a) values (703,80);
+insert into t (id,a) values (703,81);
+insert into t (id,a) values (703,82);
+insert into t (id,a) values (703,83);
+insert into t (id,a) values (703,84);
+insert into t (id,a) values (703,85);
+insert into t (id,a) values (703,86);
+insert into t (id,a) values (703,87);
+insert into t (id,a) values (703,88);
+insert into t (id,a) values (703,89);
+insert into t (id,a) values (703,90);
+insert into t (id,a) values (703,91);
+insert into t (id,a) values (703,92);
+insert into t (id,a) values (703,93);
+insert into t (id,a) values (703,94);
+insert into t (id,a) values (703,95);
+insert into t (id,a) values (703,96);
+insert into t (id,a) values (703,97);
+insert into t (id,a) values (703,98);
+insert into t (id,a) values (703,99);
+insert into t (id,a) values (704,0);
+insert into t (id,a) values (704,1);
+insert into t (id,a) values (704,2);
+insert into t (id,a) values (704,3);
+insert into t (id,a) values (704,4);
+insert into t (id,a) values (704,5);
+insert into t (id,a) values (704,6);
+insert into t (id,a) values (704,7);
+insert into t (id,a) values (704,8);
+insert into t (id,a) values (704,9);
+insert into t (id,a) values (704,10);
+insert into t (id,a) values (704,11);
+insert into t (id,a) values (704,12);
+insert into t (id,a) values (704,13);
+insert into t (id,a) values (704,14);
+insert into t (id,a) values (704,15);
+insert into t (id,a) values (704,16);
+insert into t (id,a) values (704,17);
+insert into t (id,a) values (704,18);
+insert into t (id,a) values (704,19);
+insert into t (id,a) values (704,20);
+insert into t (id,a) values (704,21);
+insert into t (id,a) values (704,22);
+insert into t (id,a) values (704,23);
+insert into t (id,a) values (704,24);
+insert into t (id,a) values (704,25);
+insert into t (id,a) values (704,26);
+insert into t (id,a) values (704,27);
+insert into t (id,a) values (704,28);
+insert into t (id,a) values (704,29);
+insert into t (id,a) values (704,30);
+insert into t (id,a) values (704,31);
+insert into t (id,a) values (704,32);
+insert into t (id,a) values (704,33);
+insert into t (id,a) values (704,34);
+insert into t (id,a) values (704,35);
+insert into t (id,a) values (704,36);
+insert into t (id,a) values (704,37);
+insert into t (id,a) values (704,38);
+insert into t (id,a) values (704,39);
+insert into t (id,a) values (704,40);
+insert into t (id,a) values (704,41);
+insert into t (id,a) values (704,42);
+insert into t (id,a) values (704,43);
+insert into t (id,a) values (704,44);
+insert into t (id,a) values (704,45);
+insert into t (id,a) values (704,46);
+insert into t (id,a) values (704,47);
+insert into t (id,a) values (704,48);
+insert into t (id,a) values (704,49);
+insert into t (id,a) values (704,50);
+insert into t (id,a) values (704,51);
+insert into t (id,a) values (704,52);
+insert into t (id,a) values (704,53);
+insert into t (id,a) values (704,54);
+insert into t (id,a) values (704,55);
+insert into t (id,a) values (704,56);
+insert into t (id,a) values (704,57);
+insert into t (id,a) values (704,58);
+insert into t (id,a) values (704,59);
+insert into t (id,a) values (704,60);
+insert into t (id,a) values (704,61);
+insert into t (id,a) values (704,62);
+insert into t (id,a) values (704,63);
+insert into t (id,a) values (704,64);
+insert into t (id,a) values (704,65);
+insert into t (id,a) values (704,66);
+insert into t (id,a) values (704,67);
+insert into t (id,a) values (704,68);
+insert into t (id,a) values (704,69);
+insert into t (id,a) values (704,70);
+insert into t (id,a) values (704,71);
+insert into t (id,a) values (704,72);
+insert into t (id,a) values (704,73);
+insert into t (id,a) values (704,74);
+insert into t (id,a) values (704,75);
+insert into t (id,a) values (704,76);
+insert into t (id,a) values (704,77);
+insert into t (id,a) values (704,78);
+insert into t (id,a) values (704,79);
+insert into t (id,a) values (704,80);
+insert into t (id,a) values (704,81);
+insert into t (id,a) values (704,82);
+insert into t (id,a) values (704,83);
+insert into t (id,a) values (704,84);
+insert into t (id,a) values (704,85);
+insert into t (id,a) values (704,86);
+insert into t (id,a) values (704,87);
+insert into t (id,a) values (704,88);
+insert into t (id,a) values (704,89);
+insert into t (id,a) values (704,90);
+insert into t (id,a) values (704,91);
+insert into t (id,a) values (704,92);
+insert into t (id,a) values (704,93);
+insert into t (id,a) values (704,94);
+insert into t (id,a) values (704,95);
+insert into t (id,a) values (704,96);
+insert into t (id,a) values (704,97);
+insert into t (id,a) values (704,98);
+insert into t (id,a) values (704,99);
+insert into t (id,a) values (705,0);
+insert into t (id,a) values (705,1);
+insert into t (id,a) values (705,2);
+insert into t (id,a) values (705,3);
+insert into t (id,a) values (705,4);
+insert into t (id,a) values (705,5);
+insert into t (id,a) values (705,6);
+insert into t (id,a) values (705,7);
+insert into t (id,a) values (705,8);
+insert into t (id,a) values (705,9);
+insert into t (id,a) values (705,10);
+insert into t (id,a) values (705,11);
+insert into t (id,a) values (705,12);
+insert into t (id,a) values (705,13);
+insert into t (id,a) values (705,14);
+insert into t (id,a) values (705,15);
+insert into t (id,a) values (705,16);
+insert into t (id,a) values (705,17);
+insert into t (id,a) values (705,18);
+insert into t (id,a) values (705,19);
+insert into t (id,a) values (705,20);
+insert into t (id,a) values (705,21);
+insert into t (id,a) values (705,22);
+insert into t (id,a) values (705,23);
+insert into t (id,a) values (705,24);
+insert into t (id,a) values (705,25);
+insert into t (id,a) values (705,26);
+insert into t (id,a) values (705,27);
+insert into t (id,a) values (705,28);
+insert into t (id,a) values (705,29);
+insert into t (id,a) values (705,30);
+insert into t (id,a) values (705,31);
+insert into t (id,a) values (705,32);
+insert into t (id,a) values (705,33);
+insert into t (id,a) values (705,34);
+insert into t (id,a) values (705,35);
+insert into t (id,a) values (705,36);
+insert into t (id,a) values (705,37);
+insert into t (id,a) values (705,38);
+insert into t (id,a) values (705,39);
+insert into t (id,a) values (705,40);
+insert into t (id,a) values (705,41);
+insert into t (id,a) values (705,42);
+insert into t (id,a) values (705,43);
+insert into t (id,a) values (705,44);
+insert into t (id,a) values (705,45);
+insert into t (id,a) values (705,46);
+insert into t (id,a) values (705,47);
+insert into t (id,a) values (705,48);
+insert into t (id,a) values (705,49);
+insert into t (id,a) values (705,50);
+insert into t (id,a) values (705,51);
+insert into t (id,a) values (705,52);
+insert into t (id,a) values (705,53);
+insert into t (id,a) values (705,54);
+insert into t (id,a) values (705,55);
+insert into t (id,a) values (705,56);
+insert into t (id,a) values (705,57);
+insert into t (id,a) values (705,58);
+insert into t (id,a) values (705,59);
+insert into t (id,a) values (705,60);
+insert into t (id,a) values (705,61);
+insert into t (id,a) values (705,62);
+insert into t (id,a) values (705,63);
+insert into t (id,a) values (705,64);
+insert into t (id,a) values (705,65);
+insert into t (id,a) values (705,66);
+insert into t (id,a) values (705,67);
+insert into t (id,a) values (705,68);
+insert into t (id,a) values (705,69);
+insert into t (id,a) values (705,70);
+insert into t (id,a) values (705,71);
+insert into t (id,a) values (705,72);
+insert into t (id,a) values (705,73);
+insert into t (id,a) values (705,74);
+insert into t (id,a) values (705,75);
+insert into t (id,a) values (705,76);
+insert into t (id,a) values (705,77);
+insert into t (id,a) values (705,78);
+insert into t (id,a) values (705,79);
+insert into t (id,a) values (705,80);
+insert into t (id,a) values (705,81);
+insert into t (id,a) values (705,82);
+insert into t (id,a) values (705,83);
+insert into t (id,a) values (705,84);
+insert into t (id,a) values (705,85);
+insert into t (id,a) values (705,86);
+insert into t (id,a) values (705,87);
+insert into t (id,a) values (705,88);
+insert into t (id,a) values (705,89);
+insert into t (id,a) values (705,90);
+insert into t (id,a) values (705,91);
+insert into t (id,a) values (705,92);
+insert into t (id,a) values (705,93);
+insert into t (id,a) values (705,94);
+insert into t (id,a) values (705,95);
+insert into t (id,a) values (705,96);
+insert into t (id,a) values (705,97);
+insert into t (id,a) values (705,98);
+insert into t (id,a) values (705,99);
+insert into t (id,a) values (706,0);
+insert into t (id,a) values (706,1);
+insert into t (id,a) values (706,2);
+insert into t (id,a) values (706,3);
+insert into t (id,a) values (706,4);
+insert into t (id,a) values (706,5);
+insert into t (id,a) values (706,6);
+insert into t (id,a) values (706,7);
+insert into t (id,a) values (706,8);
+insert into t (id,a) values (706,9);
+insert into t (id,a) values (706,10);
+insert into t (id,a) values (706,11);
+insert into t (id,a) values (706,12);
+insert into t (id,a) values (706,13);
+insert into t (id,a) values (706,14);
+insert into t (id,a) values (706,15);
+insert into t (id,a) values (706,16);
+insert into t (id,a) values (706,17);
+insert into t (id,a) values (706,18);
+insert into t (id,a) values (706,19);
+insert into t (id,a) values (706,20);
+insert into t (id,a) values (706,21);
+insert into t (id,a) values (706,22);
+insert into t (id,a) values (706,23);
+insert into t (id,a) values (706,24);
+insert into t (id,a) values (706,25);
+insert into t (id,a) values (706,26);
+insert into t (id,a) values (706,27);
+insert into t (id,a) values (706,28);
+insert into t (id,a) values (706,29);
+insert into t (id,a) values (706,30);
+insert into t (id,a) values (706,31);
+insert into t (id,a) values (706,32);
+insert into t (id,a) values (706,33);
+insert into t (id,a) values (706,34);
+insert into t (id,a) values (706,35);
+insert into t (id,a) values (706,36);
+insert into t (id,a) values (706,37);
+insert into t (id,a) values (706,38);
+insert into t (id,a) values (706,39);
+insert into t (id,a) values (706,40);
+insert into t (id,a) values (706,41);
+insert into t (id,a) values (706,42);
+insert into t (id,a) values (706,43);
+insert into t (id,a) values (706,44);
+insert into t (id,a) values (706,45);
+insert into t (id,a) values (706,46);
+insert into t (id,a) values (706,47);
+insert into t (id,a) values (706,48);
+insert into t (id,a) values (706,49);
+insert into t (id,a) values (706,50);
+insert into t (id,a) values (706,51);
+insert into t (id,a) values (706,52);
+insert into t (id,a) values (706,53);
+insert into t (id,a) values (706,54);
+insert into t (id,a) values (706,55);
+insert into t (id,a) values (706,56);
+insert into t (id,a) values (706,57);
+insert into t (id,a) values (706,58);
+insert into t (id,a) values (706,59);
+insert into t (id,a) values (706,60);
+insert into t (id,a) values (706,61);
+insert into t (id,a) values (706,62);
+insert into t (id,a) values (706,63);
+insert into t (id,a) values (706,64);
+insert into t (id,a) values (706,65);
+insert into t (id,a) values (706,66);
+insert into t (id,a) values (706,67);
+insert into t (id,a) values (706,68);
+insert into t (id,a) values (706,69);
+insert into t (id,a) values (706,70);
+insert into t (id,a) values (706,71);
+insert into t (id,a) values (706,72);
+insert into t (id,a) values (706,73);
+insert into t (id,a) values (706,74);
+insert into t (id,a) values (706,75);
+insert into t (id,a) values (706,76);
+insert into t (id,a) values (706,77);
+insert into t (id,a) values (706,78);
+insert into t (id,a) values (706,79);
+insert into t (id,a) values (706,80);
+insert into t (id,a) values (706,81);
+insert into t (id,a) values (706,82);
+insert into t (id,a) values (706,83);
+insert into t (id,a) values (706,84);
+insert into t (id,a) values (706,85);
+insert into t (id,a) values (706,86);
+insert into t (id,a) values (706,87);
+insert into t (id,a) values (706,88);
+insert into t (id,a) values (706,89);
+insert into t (id,a) values (706,90);
+insert into t (id,a) values (706,91);
+insert into t (id,a) values (706,92);
+insert into t (id,a) values (706,93);
+insert into t (id,a) values (706,94);
+insert into t (id,a) values (706,95);
+insert into t (id,a) values (706,96);
+insert into t (id,a) values (706,97);
+insert into t (id,a) values (706,98);
+insert into t (id,a) values (706,99);
+insert into t (id,a) values (707,0);
+insert into t (id,a) values (707,1);
+insert into t (id,a) values (707,2);
+insert into t (id,a) values (707,3);
+insert into t (id,a) values (707,4);
+insert into t (id,a) values (707,5);
+insert into t (id,a) values (707,6);
+insert into t (id,a) values (707,7);
+insert into t (id,a) values (707,8);
+insert into t (id,a) values (707,9);
+insert into t (id,a) values (707,10);
+insert into t (id,a) values (707,11);
+insert into t (id,a) values (707,12);
+insert into t (id,a) values (707,13);
+insert into t (id,a) values (707,14);
+insert into t (id,a) values (707,15);
+insert into t (id,a) values (707,16);
+insert into t (id,a) values (707,17);
+insert into t (id,a) values (707,18);
+insert into t (id,a) values (707,19);
+insert into t (id,a) values (707,20);
+insert into t (id,a) values (707,21);
+insert into t (id,a) values (707,22);
+insert into t (id,a) values (707,23);
+insert into t (id,a) values (707,24);
+insert into t (id,a) values (707,25);
+insert into t (id,a) values (707,26);
+insert into t (id,a) values (707,27);
+insert into t (id,a) values (707,28);
+insert into t (id,a) values (707,29);
+insert into t (id,a) values (707,30);
+insert into t (id,a) values (707,31);
+insert into t (id,a) values (707,32);
+insert into t (id,a) values (707,33);
+insert into t (id,a) values (707,34);
+insert into t (id,a) values (707,35);
+insert into t (id,a) values (707,36);
+insert into t (id,a) values (707,37);
+insert into t (id,a) values (707,38);
+insert into t (id,a) values (707,39);
+insert into t (id,a) values (707,40);
+insert into t (id,a) values (707,41);
+insert into t (id,a) values (707,42);
+insert into t (id,a) values (707,43);
+insert into t (id,a) values (707,44);
+insert into t (id,a) values (707,45);
+insert into t (id,a) values (707,46);
+insert into t (id,a) values (707,47);
+insert into t (id,a) values (707,48);
+insert into t (id,a) values (707,49);
+insert into t (id,a) values (707,50);
+insert into t (id,a) values (707,51);
+insert into t (id,a) values (707,52);
+insert into t (id,a) values (707,53);
+insert into t (id,a) values (707,54);
+insert into t (id,a) values (707,55);
+insert into t (id,a) values (707,56);
+insert into t (id,a) values (707,57);
+insert into t (id,a) values (707,58);
+insert into t (id,a) values (707,59);
+insert into t (id,a) values (707,60);
+insert into t (id,a) values (707,61);
+insert into t (id,a) values (707,62);
+insert into t (id,a) values (707,63);
+insert into t (id,a) values (707,64);
+insert into t (id,a) values (707,65);
+insert into t (id,a) values (707,66);
+insert into t (id,a) values (707,67);
+insert into t (id,a) values (707,68);
+insert into t (id,a) values (707,69);
+insert into t (id,a) values (707,70);
+insert into t (id,a) values (707,71);
+insert into t (id,a) values (707,72);
+insert into t (id,a) values (707,73);
+insert into t (id,a) values (707,74);
+insert into t (id,a) values (707,75);
+insert into t (id,a) values (707,76);
+insert into t (id,a) values (707,77);
+insert into t (id,a) values (707,78);
+insert into t (id,a) values (707,79);
+insert into t (id,a) values (707,80);
+insert into t (id,a) values (707,81);
+insert into t (id,a) values (707,82);
+insert into t (id,a) values (707,83);
+insert into t (id,a) values (707,84);
+insert into t (id,a) values (707,85);
+insert into t (id,a) values (707,86);
+insert into t (id,a) values (707,87);
+insert into t (id,a) values (707,88);
+insert into t (id,a) values (707,89);
+insert into t (id,a) values (707,90);
+insert into t (id,a) values (707,91);
+insert into t (id,a) values (707,92);
+insert into t (id,a) values (707,93);
+insert into t (id,a) values (707,94);
+insert into t (id,a) values (707,95);
+insert into t (id,a) values (707,96);
+insert into t (id,a) values (707,97);
+insert into t (id,a) values (707,98);
+insert into t (id,a) values (707,99);
+insert into t (id,a) values (708,0);
+insert into t (id,a) values (708,1);
+insert into t (id,a) values (708,2);
+insert into t (id,a) values (708,3);
+insert into t (id,a) values (708,4);
+insert into t (id,a) values (708,5);
+insert into t (id,a) values (708,6);
+insert into t (id,a) values (708,7);
+insert into t (id,a) values (708,8);
+insert into t (id,a) values (708,9);
+insert into t (id,a) values (708,10);
+insert into t (id,a) values (708,11);
+insert into t (id,a) values (708,12);
+insert into t (id,a) values (708,13);
+insert into t (id,a) values (708,14);
+insert into t (id,a) values (708,15);
+insert into t (id,a) values (708,16);
+insert into t (id,a) values (708,17);
+insert into t (id,a) values (708,18);
+insert into t (id,a) values (708,19);
+insert into t (id,a) values (708,20);
+insert into t (id,a) values (708,21);
+insert into t (id,a) values (708,22);
+insert into t (id,a) values (708,23);
+insert into t (id,a) values (708,24);
+insert into t (id,a) values (708,25);
+insert into t (id,a) values (708,26);
+insert into t (id,a) values (708,27);
+insert into t (id,a) values (708,28);
+insert into t (id,a) values (708,29);
+insert into t (id,a) values (708,30);
+insert into t (id,a) values (708,31);
+insert into t (id,a) values (708,32);
+insert into t (id,a) values (708,33);
+insert into t (id,a) values (708,34);
+insert into t (id,a) values (708,35);
+insert into t (id,a) values (708,36);
+insert into t (id,a) values (708,37);
+insert into t (id,a) values (708,38);
+insert into t (id,a) values (708,39);
+insert into t (id,a) values (708,40);
+insert into t (id,a) values (708,41);
+insert into t (id,a) values (708,42);
+insert into t (id,a) values (708,43);
+insert into t (id,a) values (708,44);
+insert into t (id,a) values (708,45);
+insert into t (id,a) values (708,46);
+insert into t (id,a) values (708,47);
+insert into t (id,a) values (708,48);
+insert into t (id,a) values (708,49);
+insert into t (id,a) values (708,50);
+insert into t (id,a) values (708,51);
+insert into t (id,a) values (708,52);
+insert into t (id,a) values (708,53);
+insert into t (id,a) values (708,54);
+insert into t (id,a) values (708,55);
+insert into t (id,a) values (708,56);
+insert into t (id,a) values (708,57);
+insert into t (id,a) values (708,58);
+insert into t (id,a) values (708,59);
+insert into t (id,a) values (708,60);
+insert into t (id,a) values (708,61);
+insert into t (id,a) values (708,62);
+insert into t (id,a) values (708,63);
+insert into t (id,a) values (708,64);
+insert into t (id,a) values (708,65);
+insert into t (id,a) values (708,66);
+insert into t (id,a) values (708,67);
+insert into t (id,a) values (708,68);
+insert into t (id,a) values (708,69);
+insert into t (id,a) values (708,70);
+insert into t (id,a) values (708,71);
+insert into t (id,a) values (708,72);
+insert into t (id,a) values (708,73);
+insert into t (id,a) values (708,74);
+insert into t (id,a) values (708,75);
+insert into t (id,a) values (708,76);
+insert into t (id,a) values (708,77);
+insert into t (id,a) values (708,78);
+insert into t (id,a) values (708,79);
+insert into t (id,a) values (708,80);
+insert into t (id,a) values (708,81);
+insert into t (id,a) values (708,82);
+insert into t (id,a) values (708,83);
+insert into t (id,a) values (708,84);
+insert into t (id,a) values (708,85);
+insert into t (id,a) values (708,86);
+insert into t (id,a) values (708,87);
+insert into t (id,a) values (708,88);
+insert into t (id,a) values (708,89);
+insert into t (id,a) values (708,90);
+insert into t (id,a) values (708,91);
+insert into t (id,a) values (708,92);
+insert into t (id,a) values (708,93);
+insert into t (id,a) values (708,94);
+insert into t (id,a) values (708,95);
+insert into t (id,a) values (708,96);
+insert into t (id,a) values (708,97);
+insert into t (id,a) values (708,98);
+insert into t (id,a) values (708,99);
+insert into t (id,a) values (709,0);
+insert into t (id,a) values (709,1);
+insert into t (id,a) values (709,2);
+insert into t (id,a) values (709,3);
+insert into t (id,a) values (709,4);
+insert into t (id,a) values (709,5);
+insert into t (id,a) values (709,6);
+insert into t (id,a) values (709,7);
+insert into t (id,a) values (709,8);
+insert into t (id,a) values (709,9);
+insert into t (id,a) values (709,10);
+insert into t (id,a) values (709,11);
+insert into t (id,a) values (709,12);
+insert into t (id,a) values (709,13);
+insert into t (id,a) values (709,14);
+insert into t (id,a) values (709,15);
+insert into t (id,a) values (709,16);
+insert into t (id,a) values (709,17);
+insert into t (id,a) values (709,18);
+insert into t (id,a) values (709,19);
+insert into t (id,a) values (709,20);
+insert into t (id,a) values (709,21);
+insert into t (id,a) values (709,22);
+insert into t (id,a) values (709,23);
+insert into t (id,a) values (709,24);
+insert into t (id,a) values (709,25);
+insert into t (id,a) values (709,26);
+insert into t (id,a) values (709,27);
+insert into t (id,a) values (709,28);
+insert into t (id,a) values (709,29);
+insert into t (id,a) values (709,30);
+insert into t (id,a) values (709,31);
+insert into t (id,a) values (709,32);
+insert into t (id,a) values (709,33);
+insert into t (id,a) values (709,34);
+insert into t (id,a) values (709,35);
+insert into t (id,a) values (709,36);
+insert into t (id,a) values (709,37);
+insert into t (id,a) values (709,38);
+insert into t (id,a) values (709,39);
+insert into t (id,a) values (709,40);
+insert into t (id,a) values (709,41);
+insert into t (id,a) values (709,42);
+insert into t (id,a) values (709,43);
+insert into t (id,a) values (709,44);
+insert into t (id,a) values (709,45);
+insert into t (id,a) values (709,46);
+insert into t (id,a) values (709,47);
+insert into t (id,a) values (709,48);
+insert into t (id,a) values (709,49);
+insert into t (id,a) values (709,50);
+insert into t (id,a) values (709,51);
+insert into t (id,a) values (709,52);
+insert into t (id,a) values (709,53);
+insert into t (id,a) values (709,54);
+insert into t (id,a) values (709,55);
+insert into t (id,a) values (709,56);
+insert into t (id,a) values (709,57);
+insert into t (id,a) values (709,58);
+insert into t (id,a) values (709,59);
+insert into t (id,a) values (709,60);
+insert into t (id,a) values (709,61);
+insert into t (id,a) values (709,62);
+insert into t (id,a) values (709,63);
+insert into t (id,a) values (709,64);
+insert into t (id,a) values (709,65);
+insert into t (id,a) values (709,66);
+insert into t (id,a) values (709,67);
+insert into t (id,a) values (709,68);
+insert into t (id,a) values (709,69);
+insert into t (id,a) values (709,70);
+insert into t (id,a) values (709,71);
+insert into t (id,a) values (709,72);
+insert into t (id,a) values (709,73);
+insert into t (id,a) values (709,74);
+insert into t (id,a) values (709,75);
+insert into t (id,a) values (709,76);
+insert into t (id,a) values (709,77);
+insert into t (id,a) values (709,78);
+insert into t (id,a) values (709,79);
+insert into t (id,a) values (709,80);
+insert into t (id,a) values (709,81);
+insert into t (id,a) values (709,82);
+insert into t (id,a) values (709,83);
+insert into t (id,a) values (709,84);
+insert into t (id,a) values (709,85);
+insert into t (id,a) values (709,86);
+insert into t (id,a) values (709,87);
+insert into t (id,a) values (709,88);
+insert into t (id,a) values (709,89);
+insert into t (id,a) values (709,90);
+insert into t (id,a) values (709,91);
+insert into t (id,a) values (709,92);
+insert into t (id,a) values (709,93);
+insert into t (id,a) values (709,94);
+insert into t (id,a) values (709,95);
+insert into t (id,a) values (709,96);
+insert into t (id,a) values (709,97);
+insert into t (id,a) values (709,98);
+insert into t (id,a) values (709,99);
+insert into t (id,a) values (710,0);
+insert into t (id,a) values (710,1);
+insert into t (id,a) values (710,2);
+insert into t (id,a) values (710,3);
+insert into t (id,a) values (710,4);
+insert into t (id,a) values (710,5);
+insert into t (id,a) values (710,6);
+insert into t (id,a) values (710,7);
+insert into t (id,a) values (710,8);
+insert into t (id,a) values (710,9);
+insert into t (id,a) values (710,10);
+insert into t (id,a) values (710,11);
+insert into t (id,a) values (710,12);
+insert into t (id,a) values (710,13);
+insert into t (id,a) values (710,14);
+insert into t (id,a) values (710,15);
+insert into t (id,a) values (710,16);
+insert into t (id,a) values (710,17);
+insert into t (id,a) values (710,18);
+insert into t (id,a) values (710,19);
+insert into t (id,a) values (710,20);
+insert into t (id,a) values (710,21);
+insert into t (id,a) values (710,22);
+insert into t (id,a) values (710,23);
+insert into t (id,a) values (710,24);
+insert into t (id,a) values (710,25);
+insert into t (id,a) values (710,26);
+insert into t (id,a) values (710,27);
+insert into t (id,a) values (710,28);
+insert into t (id,a) values (710,29);
+insert into t (id,a) values (710,30);
+insert into t (id,a) values (710,31);
+insert into t (id,a) values (710,32);
+insert into t (id,a) values (710,33);
+insert into t (id,a) values (710,34);
+insert into t (id,a) values (710,35);
+insert into t (id,a) values (710,36);
+insert into t (id,a) values (710,37);
+insert into t (id,a) values (710,38);
+insert into t (id,a) values (710,39);
+insert into t (id,a) values (710,40);
+insert into t (id,a) values (710,41);
+insert into t (id,a) values (710,42);
+insert into t (id,a) values (710,43);
+insert into t (id,a) values (710,44);
+insert into t (id,a) values (710,45);
+insert into t (id,a) values (710,46);
+insert into t (id,a) values (710,47);
+insert into t (id,a) values (710,48);
+insert into t (id,a) values (710,49);
+insert into t (id,a) values (710,50);
+insert into t (id,a) values (710,51);
+insert into t (id,a) values (710,52);
+insert into t (id,a) values (710,53);
+insert into t (id,a) values (710,54);
+insert into t (id,a) values (710,55);
+insert into t (id,a) values (710,56);
+insert into t (id,a) values (710,57);
+insert into t (id,a) values (710,58);
+insert into t (id,a) values (710,59);
+insert into t (id,a) values (710,60);
+insert into t (id,a) values (710,61);
+insert into t (id,a) values (710,62);
+insert into t (id,a) values (710,63);
+insert into t (id,a) values (710,64);
+insert into t (id,a) values (710,65);
+insert into t (id,a) values (710,66);
+insert into t (id,a) values (710,67);
+insert into t (id,a) values (710,68);
+insert into t (id,a) values (710,69);
+insert into t (id,a) values (710,70);
+insert into t (id,a) values (710,71);
+insert into t (id,a) values (710,72);
+insert into t (id,a) values (710,73);
+insert into t (id,a) values (710,74);
+insert into t (id,a) values (710,75);
+insert into t (id,a) values (710,76);
+insert into t (id,a) values (710,77);
+insert into t (id,a) values (710,78);
+insert into t (id,a) values (710,79);
+insert into t (id,a) values (710,80);
+insert into t (id,a) values (710,81);
+insert into t (id,a) values (710,82);
+insert into t (id,a) values (710,83);
+insert into t (id,a) values (710,84);
+insert into t (id,a) values (710,85);
+insert into t (id,a) values (710,86);
+insert into t (id,a) values (710,87);
+insert into t (id,a) values (710,88);
+insert into t (id,a) values (710,89);
+insert into t (id,a) values (710,90);
+insert into t (id,a) values (710,91);
+insert into t (id,a) values (710,92);
+insert into t (id,a) values (710,93);
+insert into t (id,a) values (710,94);
+insert into t (id,a) values (710,95);
+insert into t (id,a) values (710,96);
+insert into t (id,a) values (710,97);
+insert into t (id,a) values (710,98);
+insert into t (id,a) values (710,99);
+insert into t (id,a) values (711,0);
+insert into t (id,a) values (711,1);
+insert into t (id,a) values (711,2);
+insert into t (id,a) values (711,3);
+insert into t (id,a) values (711,4);
+insert into t (id,a) values (711,5);
+insert into t (id,a) values (711,6);
+insert into t (id,a) values (711,7);
+insert into t (id,a) values (711,8);
+insert into t (id,a) values (711,9);
+insert into t (id,a) values (711,10);
+insert into t (id,a) values (711,11);
+insert into t (id,a) values (711,12);
+insert into t (id,a) values (711,13);
+insert into t (id,a) values (711,14);
+insert into t (id,a) values (711,15);
+insert into t (id,a) values (711,16);
+insert into t (id,a) values (711,17);
+insert into t (id,a) values (711,18);
+insert into t (id,a) values (711,19);
+insert into t (id,a) values (711,20);
+insert into t (id,a) values (711,21);
+insert into t (id,a) values (711,22);
+insert into t (id,a) values (711,23);
+insert into t (id,a) values (711,24);
+insert into t (id,a) values (711,25);
+insert into t (id,a) values (711,26);
+insert into t (id,a) values (711,27);
+insert into t (id,a) values (711,28);
+insert into t (id,a) values (711,29);
+insert into t (id,a) values (711,30);
+insert into t (id,a) values (711,31);
+insert into t (id,a) values (711,32);
+insert into t (id,a) values (711,33);
+insert into t (id,a) values (711,34);
+insert into t (id,a) values (711,35);
+insert into t (id,a) values (711,36);
+insert into t (id,a) values (711,37);
+insert into t (id,a) values (711,38);
+insert into t (id,a) values (711,39);
+insert into t (id,a) values (711,40);
+insert into t (id,a) values (711,41);
+insert into t (id,a) values (711,42);
+insert into t (id,a) values (711,43);
+insert into t (id,a) values (711,44);
+insert into t (id,a) values (711,45);
+insert into t (id,a) values (711,46);
+insert into t (id,a) values (711,47);
+insert into t (id,a) values (711,48);
+insert into t (id,a) values (711,49);
+insert into t (id,a) values (711,50);
+insert into t (id,a) values (711,51);
+insert into t (id,a) values (711,52);
+insert into t (id,a) values (711,53);
+insert into t (id,a) values (711,54);
+insert into t (id,a) values (711,55);
+insert into t (id,a) values (711,56);
+insert into t (id,a) values (711,57);
+insert into t (id,a) values (711,58);
+insert into t (id,a) values (711,59);
+insert into t (id,a) values (711,60);
+insert into t (id,a) values (711,61);
+insert into t (id,a) values (711,62);
+insert into t (id,a) values (711,63);
+insert into t (id,a) values (711,64);
+insert into t (id,a) values (711,65);
+insert into t (id,a) values (711,66);
+insert into t (id,a) values (711,67);
+insert into t (id,a) values (711,68);
+insert into t (id,a) values (711,69);
+insert into t (id,a) values (711,70);
+insert into t (id,a) values (711,71);
+insert into t (id,a) values (711,72);
+insert into t (id,a) values (711,73);
+insert into t (id,a) values (711,74);
+insert into t (id,a) values (711,75);
+insert into t (id,a) values (711,76);
+insert into t (id,a) values (711,77);
+insert into t (id,a) values (711,78);
+insert into t (id,a) values (711,79);
+insert into t (id,a) values (711,80);
+insert into t (id,a) values (711,81);
+insert into t (id,a) values (711,82);
+insert into t (id,a) values (711,83);
+insert into t (id,a) values (711,84);
+insert into t (id,a) values (711,85);
+insert into t (id,a) values (711,86);
+insert into t (id,a) values (711,87);
+insert into t (id,a) values (711,88);
+insert into t (id,a) values (711,89);
+insert into t (id,a) values (711,90);
+insert into t (id,a) values (711,91);
+insert into t (id,a) values (711,92);
+insert into t (id,a) values (711,93);
+insert into t (id,a) values (711,94);
+insert into t (id,a) values (711,95);
+insert into t (id,a) values (711,96);
+insert into t (id,a) values (711,97);
+insert into t (id,a) values (711,98);
+insert into t (id,a) values (711,99);
+insert into t (id,a) values (712,0);
+insert into t (id,a) values (712,1);
+insert into t (id,a) values (712,2);
+insert into t (id,a) values (712,3);
+insert into t (id,a) values (712,4);
+insert into t (id,a) values (712,5);
+insert into t (id,a) values (712,6);
+insert into t (id,a) values (712,7);
+insert into t (id,a) values (712,8);
+insert into t (id,a) values (712,9);
+insert into t (id,a) values (712,10);
+insert into t (id,a) values (712,11);
+insert into t (id,a) values (712,12);
+insert into t (id,a) values (712,13);
+insert into t (id,a) values (712,14);
+insert into t (id,a) values (712,15);
+insert into t (id,a) values (712,16);
+insert into t (id,a) values (712,17);
+insert into t (id,a) values (712,18);
+insert into t (id,a) values (712,19);
+insert into t (id,a) values (712,20);
+insert into t (id,a) values (712,21);
+insert into t (id,a) values (712,22);
+insert into t (id,a) values (712,23);
+insert into t (id,a) values (712,24);
+insert into t (id,a) values (712,25);
+insert into t (id,a) values (712,26);
+insert into t (id,a) values (712,27);
+insert into t (id,a) values (712,28);
+insert into t (id,a) values (712,29);
+insert into t (id,a) values (712,30);
+insert into t (id,a) values (712,31);
+insert into t (id,a) values (712,32);
+insert into t (id,a) values (712,33);
+insert into t (id,a) values (712,34);
+insert into t (id,a) values (712,35);
+insert into t (id,a) values (712,36);
+insert into t (id,a) values (712,37);
+insert into t (id,a) values (712,38);
+insert into t (id,a) values (712,39);
+insert into t (id,a) values (712,40);
+insert into t (id,a) values (712,41);
+insert into t (id,a) values (712,42);
+insert into t (id,a) values (712,43);
+insert into t (id,a) values (712,44);
+insert into t (id,a) values (712,45);
+insert into t (id,a) values (712,46);
+insert into t (id,a) values (712,47);
+insert into t (id,a) values (712,48);
+insert into t (id,a) values (712,49);
+insert into t (id,a) values (712,50);
+insert into t (id,a) values (712,51);
+insert into t (id,a) values (712,52);
+insert into t (id,a) values (712,53);
+insert into t (id,a) values (712,54);
+insert into t (id,a) values (712,55);
+insert into t (id,a) values (712,56);
+insert into t (id,a) values (712,57);
+insert into t (id,a) values (712,58);
+insert into t (id,a) values (712,59);
+insert into t (id,a) values (712,60);
+insert into t (id,a) values (712,61);
+insert into t (id,a) values (712,62);
+insert into t (id,a) values (712,63);
+insert into t (id,a) values (712,64);
+insert into t (id,a) values (712,65);
+insert into t (id,a) values (712,66);
+insert into t (id,a) values (712,67);
+insert into t (id,a) values (712,68);
+insert into t (id,a) values (712,69);
+insert into t (id,a) values (712,70);
+insert into t (id,a) values (712,71);
+insert into t (id,a) values (712,72);
+insert into t (id,a) values (712,73);
+insert into t (id,a) values (712,74);
+insert into t (id,a) values (712,75);
+insert into t (id,a) values (712,76);
+insert into t (id,a) values (712,77);
+insert into t (id,a) values (712,78);
+insert into t (id,a) values (712,79);
+insert into t (id,a) values (712,80);
+insert into t (id,a) values (712,81);
+insert into t (id,a) values (712,82);
+insert into t (id,a) values (712,83);
+insert into t (id,a) values (712,84);
+insert into t (id,a) values (712,85);
+insert into t (id,a) values (712,86);
+insert into t (id,a) values (712,87);
+insert into t (id,a) values (712,88);
+insert into t (id,a) values (712,89);
+insert into t (id,a) values (712,90);
+insert into t (id,a) values (712,91);
+insert into t (id,a) values (712,92);
+insert into t (id,a) values (712,93);
+insert into t (id,a) values (712,94);
+insert into t (id,a) values (712,95);
+insert into t (id,a) values (712,96);
+insert into t (id,a) values (712,97);
+insert into t (id,a) values (712,98);
+insert into t (id,a) values (712,99);
+insert into t (id,a) values (713,0);
+insert into t (id,a) values (713,1);
+insert into t (id,a) values (713,2);
+insert into t (id,a) values (713,3);
+insert into t (id,a) values (713,4);
+insert into t (id,a) values (713,5);
+insert into t (id,a) values (713,6);
+insert into t (id,a) values (713,7);
+insert into t (id,a) values (713,8);
+insert into t (id,a) values (713,9);
+insert into t (id,a) values (713,10);
+insert into t (id,a) values (713,11);
+insert into t (id,a) values (713,12);
+insert into t (id,a) values (713,13);
+insert into t (id,a) values (713,14);
+insert into t (id,a) values (713,15);
+insert into t (id,a) values (713,16);
+insert into t (id,a) values (713,17);
+insert into t (id,a) values (713,18);
+insert into t (id,a) values (713,19);
+insert into t (id,a) values (713,20);
+insert into t (id,a) values (713,21);
+insert into t (id,a) values (713,22);
+insert into t (id,a) values (713,23);
+insert into t (id,a) values (713,24);
+insert into t (id,a) values (713,25);
+insert into t (id,a) values (713,26);
+insert into t (id,a) values (713,27);
+insert into t (id,a) values (713,28);
+insert into t (id,a) values (713,29);
+insert into t (id,a) values (713,30);
+insert into t (id,a) values (713,31);
+insert into t (id,a) values (713,32);
+insert into t (id,a) values (713,33);
+insert into t (id,a) values (713,34);
+insert into t (id,a) values (713,35);
+insert into t (id,a) values (713,36);
+insert into t (id,a) values (713,37);
+insert into t (id,a) values (713,38);
+insert into t (id,a) values (713,39);
+insert into t (id,a) values (713,40);
+insert into t (id,a) values (713,41);
+insert into t (id,a) values (713,42);
+insert into t (id,a) values (713,43);
+insert into t (id,a) values (713,44);
+insert into t (id,a) values (713,45);
+insert into t (id,a) values (713,46);
+insert into t (id,a) values (713,47);
+insert into t (id,a) values (713,48);
+insert into t (id,a) values (713,49);
+insert into t (id,a) values (713,50);
+insert into t (id,a) values (713,51);
+insert into t (id,a) values (713,52);
+insert into t (id,a) values (713,53);
+insert into t (id,a) values (713,54);
+insert into t (id,a) values (713,55);
+insert into t (id,a) values (713,56);
+insert into t (id,a) values (713,57);
+insert into t (id,a) values (713,58);
+insert into t (id,a) values (713,59);
+insert into t (id,a) values (713,60);
+insert into t (id,a) values (713,61);
+insert into t (id,a) values (713,62);
+insert into t (id,a) values (713,63);
+insert into t (id,a) values (713,64);
+insert into t (id,a) values (713,65);
+insert into t (id,a) values (713,66);
+insert into t (id,a) values (713,67);
+insert into t (id,a) values (713,68);
+insert into t (id,a) values (713,69);
+insert into t (id,a) values (713,70);
+insert into t (id,a) values (713,71);
+insert into t (id,a) values (713,72);
+insert into t (id,a) values (713,73);
+insert into t (id,a) values (713,74);
+insert into t (id,a) values (713,75);
+insert into t (id,a) values (713,76);
+insert into t (id,a) values (713,77);
+insert into t (id,a) values (713,78);
+insert into t (id,a) values (713,79);
+insert into t (id,a) values (713,80);
+insert into t (id,a) values (713,81);
+insert into t (id,a) values (713,82);
+insert into t (id,a) values (713,83);
+insert into t (id,a) values (713,84);
+insert into t (id,a) values (713,85);
+insert into t (id,a) values (713,86);
+insert into t (id,a) values (713,87);
+insert into t (id,a) values (713,88);
+insert into t (id,a) values (713,89);
+insert into t (id,a) values (713,90);
+insert into t (id,a) values (713,91);
+insert into t (id,a) values (713,92);
+insert into t (id,a) values (713,93);
+insert into t (id,a) values (713,94);
+insert into t (id,a) values (713,95);
+insert into t (id,a) values (713,96);
+insert into t (id,a) values (713,97);
+insert into t (id,a) values (713,98);
+insert into t (id,a) values (713,99);
+insert into t (id,a) values (714,0);
+insert into t (id,a) values (714,1);
+insert into t (id,a) values (714,2);
+insert into t (id,a) values (714,3);
+insert into t (id,a) values (714,4);
+insert into t (id,a) values (714,5);
+insert into t (id,a) values (714,6);
+insert into t (id,a) values (714,7);
+insert into t (id,a) values (714,8);
+insert into t (id,a) values (714,9);
+insert into t (id,a) values (714,10);
+insert into t (id,a) values (714,11);
+insert into t (id,a) values (714,12);
+insert into t (id,a) values (714,13);
+insert into t (id,a) values (714,14);
+insert into t (id,a) values (714,15);
+insert into t (id,a) values (714,16);
+insert into t (id,a) values (714,17);
+insert into t (id,a) values (714,18);
+insert into t (id,a) values (714,19);
+insert into t (id,a) values (714,20);
+insert into t (id,a) values (714,21);
+insert into t (id,a) values (714,22);
+insert into t (id,a) values (714,23);
+insert into t (id,a) values (714,24);
+insert into t (id,a) values (714,25);
+insert into t (id,a) values (714,26);
+insert into t (id,a) values (714,27);
+insert into t (id,a) values (714,28);
+insert into t (id,a) values (714,29);
+insert into t (id,a) values (714,30);
+insert into t (id,a) values (714,31);
+insert into t (id,a) values (714,32);
+insert into t (id,a) values (714,33);
+insert into t (id,a) values (714,34);
+insert into t (id,a) values (714,35);
+insert into t (id,a) values (714,36);
+insert into t (id,a) values (714,37);
+insert into t (id,a) values (714,38);
+insert into t (id,a) values (714,39);
+insert into t (id,a) values (714,40);
+insert into t (id,a) values (714,41);
+insert into t (id,a) values (714,42);
+insert into t (id,a) values (714,43);
+insert into t (id,a) values (714,44);
+insert into t (id,a) values (714,45);
+insert into t (id,a) values (714,46);
+insert into t (id,a) values (714,47);
+insert into t (id,a) values (714,48);
+insert into t (id,a) values (714,49);
+insert into t (id,a) values (714,50);
+insert into t (id,a) values (714,51);
+insert into t (id,a) values (714,52);
+insert into t (id,a) values (714,53);
+insert into t (id,a) values (714,54);
+insert into t (id,a) values (714,55);
+insert into t (id,a) values (714,56);
+insert into t (id,a) values (714,57);
+insert into t (id,a) values (714,58);
+insert into t (id,a) values (714,59);
+insert into t (id,a) values (714,60);
+insert into t (id,a) values (714,61);
+insert into t (id,a) values (714,62);
+insert into t (id,a) values (714,63);
+insert into t (id,a) values (714,64);
+insert into t (id,a) values (714,65);
+insert into t (id,a) values (714,66);
+insert into t (id,a) values (714,67);
+insert into t (id,a) values (714,68);
+insert into t (id,a) values (714,69);
+insert into t (id,a) values (714,70);
+insert into t (id,a) values (714,71);
+insert into t (id,a) values (714,72);
+insert into t (id,a) values (714,73);
+insert into t (id,a) values (714,74);
+insert into t (id,a) values (714,75);
+insert into t (id,a) values (714,76);
+insert into t (id,a) values (714,77);
+insert into t (id,a) values (714,78);
+insert into t (id,a) values (714,79);
+insert into t (id,a) values (714,80);
+insert into t (id,a) values (714,81);
+insert into t (id,a) values (714,82);
+insert into t (id,a) values (714,83);
+insert into t (id,a) values (714,84);
+insert into t (id,a) values (714,85);
+insert into t (id,a) values (714,86);
+insert into t (id,a) values (714,87);
+insert into t (id,a) values (714,88);
+insert into t (id,a) values (714,89);
+insert into t (id,a) values (714,90);
+insert into t (id,a) values (714,91);
+insert into t (id,a) values (714,92);
+insert into t (id,a) values (714,93);
+insert into t (id,a) values (714,94);
+insert into t (id,a) values (714,95);
+insert into t (id,a) values (714,96);
+insert into t (id,a) values (714,97);
+insert into t (id,a) values (714,98);
+insert into t (id,a) values (714,99);
+insert into t (id,a) values (715,0);
+insert into t (id,a) values (715,1);
+insert into t (id,a) values (715,2);
+insert into t (id,a) values (715,3);
+insert into t (id,a) values (715,4);
+insert into t (id,a) values (715,5);
+insert into t (id,a) values (715,6);
+insert into t (id,a) values (715,7);
+insert into t (id,a) values (715,8);
+insert into t (id,a) values (715,9);
+insert into t (id,a) values (715,10);
+insert into t (id,a) values (715,11);
+insert into t (id,a) values (715,12);
+insert into t (id,a) values (715,13);
+insert into t (id,a) values (715,14);
+insert into t (id,a) values (715,15);
+insert into t (id,a) values (715,16);
+insert into t (id,a) values (715,17);
+insert into t (id,a) values (715,18);
+insert into t (id,a) values (715,19);
+insert into t (id,a) values (715,20);
+insert into t (id,a) values (715,21);
+insert into t (id,a) values (715,22);
+insert into t (id,a) values (715,23);
+insert into t (id,a) values (715,24);
+insert into t (id,a) values (715,25);
+insert into t (id,a) values (715,26);
+insert into t (id,a) values (715,27);
+insert into t (id,a) values (715,28);
+insert into t (id,a) values (715,29);
+insert into t (id,a) values (715,30);
+insert into t (id,a) values (715,31);
+insert into t (id,a) values (715,32);
+insert into t (id,a) values (715,33);
+insert into t (id,a) values (715,34);
+insert into t (id,a) values (715,35);
+insert into t (id,a) values (715,36);
+insert into t (id,a) values (715,37);
+insert into t (id,a) values (715,38);
+insert into t (id,a) values (715,39);
+insert into t (id,a) values (715,40);
+insert into t (id,a) values (715,41);
+insert into t (id,a) values (715,42);
+insert into t (id,a) values (715,43);
+insert into t (id,a) values (715,44);
+insert into t (id,a) values (715,45);
+insert into t (id,a) values (715,46);
+insert into t (id,a) values (715,47);
+insert into t (id,a) values (715,48);
+insert into t (id,a) values (715,49);
+insert into t (id,a) values (715,50);
+insert into t (id,a) values (715,51);
+insert into t (id,a) values (715,52);
+insert into t (id,a) values (715,53);
+insert into t (id,a) values (715,54);
+insert into t (id,a) values (715,55);
+insert into t (id,a) values (715,56);
+insert into t (id,a) values (715,57);
+insert into t (id,a) values (715,58);
+insert into t (id,a) values (715,59);
+insert into t (id,a) values (715,60);
+insert into t (id,a) values (715,61);
+insert into t (id,a) values (715,62);
+insert into t (id,a) values (715,63);
+insert into t (id,a) values (715,64);
+insert into t (id,a) values (715,65);
+insert into t (id,a) values (715,66);
+insert into t (id,a) values (715,67);
+insert into t (id,a) values (715,68);
+insert into t (id,a) values (715,69);
+insert into t (id,a) values (715,70);
+insert into t (id,a) values (715,71);
+insert into t (id,a) values (715,72);
+insert into t (id,a) values (715,73);
+insert into t (id,a) values (715,74);
+insert into t (id,a) values (715,75);
+insert into t (id,a) values (715,76);
+insert into t (id,a) values (715,77);
+insert into t (id,a) values (715,78);
+insert into t (id,a) values (715,79);
+insert into t (id,a) values (715,80);
+insert into t (id,a) values (715,81);
+insert into t (id,a) values (715,82);
+insert into t (id,a) values (715,83);
+insert into t (id,a) values (715,84);
+insert into t (id,a) values (715,85);
+insert into t (id,a) values (715,86);
+insert into t (id,a) values (715,87);
+insert into t (id,a) values (715,88);
+insert into t (id,a) values (715,89);
+insert into t (id,a) values (715,90);
+insert into t (id,a) values (715,91);
+insert into t (id,a) values (715,92);
+insert into t (id,a) values (715,93);
+insert into t (id,a) values (715,94);
+insert into t (id,a) values (715,95);
+insert into t (id,a) values (715,96);
+insert into t (id,a) values (715,97);
+insert into t (id,a) values (715,98);
+insert into t (id,a) values (715,99);
+insert into t (id,a) values (716,0);
+insert into t (id,a) values (716,1);
+insert into t (id,a) values (716,2);
+insert into t (id,a) values (716,3);
+insert into t (id,a) values (716,4);
+insert into t (id,a) values (716,5);
+insert into t (id,a) values (716,6);
+insert into t (id,a) values (716,7);
+insert into t (id,a) values (716,8);
+insert into t (id,a) values (716,9);
+insert into t (id,a) values (716,10);
+insert into t (id,a) values (716,11);
+insert into t (id,a) values (716,12);
+insert into t (id,a) values (716,13);
+insert into t (id,a) values (716,14);
+insert into t (id,a) values (716,15);
+insert into t (id,a) values (716,16);
+insert into t (id,a) values (716,17);
+insert into t (id,a) values (716,18);
+insert into t (id,a) values (716,19);
+insert into t (id,a) values (716,20);
+insert into t (id,a) values (716,21);
+insert into t (id,a) values (716,22);
+insert into t (id,a) values (716,23);
+insert into t (id,a) values (716,24);
+insert into t (id,a) values (716,25);
+insert into t (id,a) values (716,26);
+insert into t (id,a) values (716,27);
+insert into t (id,a) values (716,28);
+insert into t (id,a) values (716,29);
+insert into t (id,a) values (716,30);
+insert into t (id,a) values (716,31);
+insert into t (id,a) values (716,32);
+insert into t (id,a) values (716,33);
+insert into t (id,a) values (716,34);
+insert into t (id,a) values (716,35);
+insert into t (id,a) values (716,36);
+insert into t (id,a) values (716,37);
+insert into t (id,a) values (716,38);
+insert into t (id,a) values (716,39);
+insert into t (id,a) values (716,40);
+insert into t (id,a) values (716,41);
+insert into t (id,a) values (716,42);
+insert into t (id,a) values (716,43);
+insert into t (id,a) values (716,44);
+insert into t (id,a) values (716,45);
+insert into t (id,a) values (716,46);
+insert into t (id,a) values (716,47);
+insert into t (id,a) values (716,48);
+insert into t (id,a) values (716,49);
+insert into t (id,a) values (716,50);
+insert into t (id,a) values (716,51);
+insert into t (id,a) values (716,52);
+insert into t (id,a) values (716,53);
+insert into t (id,a) values (716,54);
+insert into t (id,a) values (716,55);
+insert into t (id,a) values (716,56);
+insert into t (id,a) values (716,57);
+insert into t (id,a) values (716,58);
+insert into t (id,a) values (716,59);
+insert into t (id,a) values (716,60);
+insert into t (id,a) values (716,61);
+insert into t (id,a) values (716,62);
+insert into t (id,a) values (716,63);
+insert into t (id,a) values (716,64);
+insert into t (id,a) values (716,65);
+insert into t (id,a) values (716,66);
+insert into t (id,a) values (716,67);
+insert into t (id,a) values (716,68);
+insert into t (id,a) values (716,69);
+insert into t (id,a) values (716,70);
+insert into t (id,a) values (716,71);
+insert into t (id,a) values (716,72);
+insert into t (id,a) values (716,73);
+insert into t (id,a) values (716,74);
+insert into t (id,a) values (716,75);
+insert into t (id,a) values (716,76);
+insert into t (id,a) values (716,77);
+insert into t (id,a) values (716,78);
+insert into t (id,a) values (716,79);
+insert into t (id,a) values (716,80);
+insert into t (id,a) values (716,81);
+insert into t (id,a) values (716,82);
+insert into t (id,a) values (716,83);
+insert into t (id,a) values (716,84);
+insert into t (id,a) values (716,85);
+insert into t (id,a) values (716,86);
+insert into t (id,a) values (716,87);
+insert into t (id,a) values (716,88);
+insert into t (id,a) values (716,89);
+insert into t (id,a) values (716,90);
+insert into t (id,a) values (716,91);
+insert into t (id,a) values (716,92);
+insert into t (id,a) values (716,93);
+insert into t (id,a) values (716,94);
+insert into t (id,a) values (716,95);
+insert into t (id,a) values (716,96);
+insert into t (id,a) values (716,97);
+insert into t (id,a) values (716,98);
+insert into t (id,a) values (716,99);
+insert into t (id,a) values (717,0);
+insert into t (id,a) values (717,1);
+insert into t (id,a) values (717,2);
+insert into t (id,a) values (717,3);
+insert into t (id,a) values (717,4);
+insert into t (id,a) values (717,5);
+insert into t (id,a) values (717,6);
+insert into t (id,a) values (717,7);
+insert into t (id,a) values (717,8);
+insert into t (id,a) values (717,9);
+insert into t (id,a) values (717,10);
+insert into t (id,a) values (717,11);
+insert into t (id,a) values (717,12);
+insert into t (id,a) values (717,13);
+insert into t (id,a) values (717,14);
+insert into t (id,a) values (717,15);
+insert into t (id,a) values (717,16);
+insert into t (id,a) values (717,17);
+insert into t (id,a) values (717,18);
+insert into t (id,a) values (717,19);
+insert into t (id,a) values (717,20);
+insert into t (id,a) values (717,21);
+insert into t (id,a) values (717,22);
+insert into t (id,a) values (717,23);
+insert into t (id,a) values (717,24);
+insert into t (id,a) values (717,25);
+insert into t (id,a) values (717,26);
+insert into t (id,a) values (717,27);
+insert into t (id,a) values (717,28);
+insert into t (id,a) values (717,29);
+insert into t (id,a) values (717,30);
+insert into t (id,a) values (717,31);
+insert into t (id,a) values (717,32);
+insert into t (id,a) values (717,33);
+insert into t (id,a) values (717,34);
+insert into t (id,a) values (717,35);
+insert into t (id,a) values (717,36);
+insert into t (id,a) values (717,37);
+insert into t (id,a) values (717,38);
+insert into t (id,a) values (717,39);
+insert into t (id,a) values (717,40);
+insert into t (id,a) values (717,41);
+insert into t (id,a) values (717,42);
+insert into t (id,a) values (717,43);
+insert into t (id,a) values (717,44);
+insert into t (id,a) values (717,45);
+insert into t (id,a) values (717,46);
+insert into t (id,a) values (717,47);
+insert into t (id,a) values (717,48);
+insert into t (id,a) values (717,49);
+insert into t (id,a) values (717,50);
+insert into t (id,a) values (717,51);
+insert into t (id,a) values (717,52);
+insert into t (id,a) values (717,53);
+insert into t (id,a) values (717,54);
+insert into t (id,a) values (717,55);
+insert into t (id,a) values (717,56);
+insert into t (id,a) values (717,57);
+insert into t (id,a) values (717,58);
+insert into t (id,a) values (717,59);
+insert into t (id,a) values (717,60);
+insert into t (id,a) values (717,61);
+insert into t (id,a) values (717,62);
+insert into t (id,a) values (717,63);
+insert into t (id,a) values (717,64);
+insert into t (id,a) values (717,65);
+insert into t (id,a) values (717,66);
+insert into t (id,a) values (717,67);
+insert into t (id,a) values (717,68);
+insert into t (id,a) values (717,69);
+insert into t (id,a) values (717,70);
+insert into t (id,a) values (717,71);
+insert into t (id,a) values (717,72);
+insert into t (id,a) values (717,73);
+insert into t (id,a) values (717,74);
+insert into t (id,a) values (717,75);
+insert into t (id,a) values (717,76);
+insert into t (id,a) values (717,77);
+insert into t (id,a) values (717,78);
+insert into t (id,a) values (717,79);
+insert into t (id,a) values (717,80);
+insert into t (id,a) values (717,81);
+insert into t (id,a) values (717,82);
+insert into t (id,a) values (717,83);
+insert into t (id,a) values (717,84);
+insert into t (id,a) values (717,85);
+insert into t (id,a) values (717,86);
+insert into t (id,a) values (717,87);
+insert into t (id,a) values (717,88);
+insert into t (id,a) values (717,89);
+insert into t (id,a) values (717,90);
+insert into t (id,a) values (717,91);
+insert into t (id,a) values (717,92);
+insert into t (id,a) values (717,93);
+insert into t (id,a) values (717,94);
+insert into t (id,a) values (717,95);
+insert into t (id,a) values (717,96);
+insert into t (id,a) values (717,97);
+insert into t (id,a) values (717,98);
+insert into t (id,a) values (717,99);
+insert into t (id,a) values (718,0);
+insert into t (id,a) values (718,1);
+insert into t (id,a) values (718,2);
+insert into t (id,a) values (718,3);
+insert into t (id,a) values (718,4);
+insert into t (id,a) values (718,5);
+insert into t (id,a) values (718,6);
+insert into t (id,a) values (718,7);
+insert into t (id,a) values (718,8);
+insert into t (id,a) values (718,9);
+insert into t (id,a) values (718,10);
+insert into t (id,a) values (718,11);
+insert into t (id,a) values (718,12);
+insert into t (id,a) values (718,13);
+insert into t (id,a) values (718,14);
+insert into t (id,a) values (718,15);
+insert into t (id,a) values (718,16);
+insert into t (id,a) values (718,17);
+insert into t (id,a) values (718,18);
+insert into t (id,a) values (718,19);
+insert into t (id,a) values (718,20);
+insert into t (id,a) values (718,21);
+insert into t (id,a) values (718,22);
+insert into t (id,a) values (718,23);
+insert into t (id,a) values (718,24);
+insert into t (id,a) values (718,25);
+insert into t (id,a) values (718,26);
+insert into t (id,a) values (718,27);
+insert into t (id,a) values (718,28);
+insert into t (id,a) values (718,29);
+insert into t (id,a) values (718,30);
+insert into t (id,a) values (718,31);
+insert into t (id,a) values (718,32);
+insert into t (id,a) values (718,33);
+insert into t (id,a) values (718,34);
+insert into t (id,a) values (718,35);
+insert into t (id,a) values (718,36);
+insert into t (id,a) values (718,37);
+insert into t (id,a) values (718,38);
+insert into t (id,a) values (718,39);
+insert into t (id,a) values (718,40);
+insert into t (id,a) values (718,41);
+insert into t (id,a) values (718,42);
+insert into t (id,a) values (718,43);
+insert into t (id,a) values (718,44);
+insert into t (id,a) values (718,45);
+insert into t (id,a) values (718,46);
+insert into t (id,a) values (718,47);
+insert into t (id,a) values (718,48);
+insert into t (id,a) values (718,49);
+insert into t (id,a) values (718,50);
+insert into t (id,a) values (718,51);
+insert into t (id,a) values (718,52);
+insert into t (id,a) values (718,53);
+insert into t (id,a) values (718,54);
+insert into t (id,a) values (718,55);
+insert into t (id,a) values (718,56);
+insert into t (id,a) values (718,57);
+insert into t (id,a) values (718,58);
+insert into t (id,a) values (718,59);
+insert into t (id,a) values (718,60);
+insert into t (id,a) values (718,61);
+insert into t (id,a) values (718,62);
+insert into t (id,a) values (718,63);
+insert into t (id,a) values (718,64);
+insert into t (id,a) values (718,65);
+insert into t (id,a) values (718,66);
+insert into t (id,a) values (718,67);
+insert into t (id,a) values (718,68);
+insert into t (id,a) values (718,69);
+insert into t (id,a) values (718,70);
+insert into t (id,a) values (718,71);
+insert into t (id,a) values (718,72);
+insert into t (id,a) values (718,73);
+insert into t (id,a) values (718,74);
+insert into t (id,a) values (718,75);
+insert into t (id,a) values (718,76);
+insert into t (id,a) values (718,77);
+insert into t (id,a) values (718,78);
+insert into t (id,a) values (718,79);
+insert into t (id,a) values (718,80);
+insert into t (id,a) values (718,81);
+insert into t (id,a) values (718,82);
+insert into t (id,a) values (718,83);
+insert into t (id,a) values (718,84);
+insert into t (id,a) values (718,85);
+insert into t (id,a) values (718,86);
+insert into t (id,a) values (718,87);
+insert into t (id,a) values (718,88);
+insert into t (id,a) values (718,89);
+insert into t (id,a) values (718,90);
+insert into t (id,a) values (718,91);
+insert into t (id,a) values (718,92);
+insert into t (id,a) values (718,93);
+insert into t (id,a) values (718,94);
+insert into t (id,a) values (718,95);
+insert into t (id,a) values (718,96);
+insert into t (id,a) values (718,97);
+insert into t (id,a) values (718,98);
+insert into t (id,a) values (718,99);
+insert into t (id,a) values (719,0);
+insert into t (id,a) values (719,1);
+insert into t (id,a) values (719,2);
+insert into t (id,a) values (719,3);
+insert into t (id,a) values (719,4);
+insert into t (id,a) values (719,5);
+insert into t (id,a) values (719,6);
+insert into t (id,a) values (719,7);
+insert into t (id,a) values (719,8);
+insert into t (id,a) values (719,9);
+insert into t (id,a) values (719,10);
+insert into t (id,a) values (719,11);
+insert into t (id,a) values (719,12);
+insert into t (id,a) values (719,13);
+insert into t (id,a) values (719,14);
+insert into t (id,a) values (719,15);
+insert into t (id,a) values (719,16);
+insert into t (id,a) values (719,17);
+insert into t (id,a) values (719,18);
+insert into t (id,a) values (719,19);
+insert into t (id,a) values (719,20);
+insert into t (id,a) values (719,21);
+insert into t (id,a) values (719,22);
+insert into t (id,a) values (719,23);
+insert into t (id,a) values (719,24);
+insert into t (id,a) values (719,25);
+insert into t (id,a) values (719,26);
+insert into t (id,a) values (719,27);
+insert into t (id,a) values (719,28);
+insert into t (id,a) values (719,29);
+insert into t (id,a) values (719,30);
+insert into t (id,a) values (719,31);
+insert into t (id,a) values (719,32);
+insert into t (id,a) values (719,33);
+insert into t (id,a) values (719,34);
+insert into t (id,a) values (719,35);
+insert into t (id,a) values (719,36);
+insert into t (id,a) values (719,37);
+insert into t (id,a) values (719,38);
+insert into t (id,a) values (719,39);
+insert into t (id,a) values (719,40);
+insert into t (id,a) values (719,41);
+insert into t (id,a) values (719,42);
+insert into t (id,a) values (719,43);
+insert into t (id,a) values (719,44);
+insert into t (id,a) values (719,45);
+insert into t (id,a) values (719,46);
+insert into t (id,a) values (719,47);
+insert into t (id,a) values (719,48);
+insert into t (id,a) values (719,49);
+insert into t (id,a) values (719,50);
+insert into t (id,a) values (719,51);
+insert into t (id,a) values (719,52);
+insert into t (id,a) values (719,53);
+insert into t (id,a) values (719,54);
+insert into t (id,a) values (719,55);
+insert into t (id,a) values (719,56);
+insert into t (id,a) values (719,57);
+insert into t (id,a) values (719,58);
+insert into t (id,a) values (719,59);
+insert into t (id,a) values (719,60);
+insert into t (id,a) values (719,61);
+insert into t (id,a) values (719,62);
+insert into t (id,a) values (719,63);
+insert into t (id,a) values (719,64);
+insert into t (id,a) values (719,65);
+insert into t (id,a) values (719,66);
+insert into t (id,a) values (719,67);
+insert into t (id,a) values (719,68);
+insert into t (id,a) values (719,69);
+insert into t (id,a) values (719,70);
+insert into t (id,a) values (719,71);
+insert into t (id,a) values (719,72);
+insert into t (id,a) values (719,73);
+insert into t (id,a) values (719,74);
+insert into t (id,a) values (719,75);
+insert into t (id,a) values (719,76);
+insert into t (id,a) values (719,77);
+insert into t (id,a) values (719,78);
+insert into t (id,a) values (719,79);
+insert into t (id,a) values (719,80);
+insert into t (id,a) values (719,81);
+insert into t (id,a) values (719,82);
+insert into t (id,a) values (719,83);
+insert into t (id,a) values (719,84);
+insert into t (id,a) values (719,85);
+insert into t (id,a) values (719,86);
+insert into t (id,a) values (719,87);
+insert into t (id,a) values (719,88);
+insert into t (id,a) values (719,89);
+insert into t (id,a) values (719,90);
+insert into t (id,a) values (719,91);
+insert into t (id,a) values (719,92);
+insert into t (id,a) values (719,93);
+insert into t (id,a) values (719,94);
+insert into t (id,a) values (719,95);
+insert into t (id,a) values (719,96);
+insert into t (id,a) values (719,97);
+insert into t (id,a) values (719,98);
+insert into t (id,a) values (719,99);
+insert into t (id,a) values (720,0);
+insert into t (id,a) values (720,1);
+insert into t (id,a) values (720,2);
+insert into t (id,a) values (720,3);
+insert into t (id,a) values (720,4);
+insert into t (id,a) values (720,5);
+insert into t (id,a) values (720,6);
+insert into t (id,a) values (720,7);
+insert into t (id,a) values (720,8);
+insert into t (id,a) values (720,9);
+insert into t (id,a) values (720,10);
+insert into t (id,a) values (720,11);
+insert into t (id,a) values (720,12);
+insert into t (id,a) values (720,13);
+insert into t (id,a) values (720,14);
+insert into t (id,a) values (720,15);
+insert into t (id,a) values (720,16);
+insert into t (id,a) values (720,17);
+insert into t (id,a) values (720,18);
+insert into t (id,a) values (720,19);
+insert into t (id,a) values (720,20);
+insert into t (id,a) values (720,21);
+insert into t (id,a) values (720,22);
+insert into t (id,a) values (720,23);
+insert into t (id,a) values (720,24);
+insert into t (id,a) values (720,25);
+insert into t (id,a) values (720,26);
+insert into t (id,a) values (720,27);
+insert into t (id,a) values (720,28);
+insert into t (id,a) values (720,29);
+insert into t (id,a) values (720,30);
+insert into t (id,a) values (720,31);
+insert into t (id,a) values (720,32);
+insert into t (id,a) values (720,33);
+insert into t (id,a) values (720,34);
+insert into t (id,a) values (720,35);
+insert into t (id,a) values (720,36);
+insert into t (id,a) values (720,37);
+insert into t (id,a) values (720,38);
+insert into t (id,a) values (720,39);
+insert into t (id,a) values (720,40);
+insert into t (id,a) values (720,41);
+insert into t (id,a) values (720,42);
+insert into t (id,a) values (720,43);
+insert into t (id,a) values (720,44);
+insert into t (id,a) values (720,45);
+insert into t (id,a) values (720,46);
+insert into t (id,a) values (720,47);
+insert into t (id,a) values (720,48);
+insert into t (id,a) values (720,49);
+insert into t (id,a) values (720,50);
+insert into t (id,a) values (720,51);
+insert into t (id,a) values (720,52);
+insert into t (id,a) values (720,53);
+insert into t (id,a) values (720,54);
+insert into t (id,a) values (720,55);
+insert into t (id,a) values (720,56);
+insert into t (id,a) values (720,57);
+insert into t (id,a) values (720,58);
+insert into t (id,a) values (720,59);
+insert into t (id,a) values (720,60);
+insert into t (id,a) values (720,61);
+insert into t (id,a) values (720,62);
+insert into t (id,a) values (720,63);
+insert into t (id,a) values (720,64);
+insert into t (id,a) values (720,65);
+insert into t (id,a) values (720,66);
+insert into t (id,a) values (720,67);
+insert into t (id,a) values (720,68);
+insert into t (id,a) values (720,69);
+insert into t (id,a) values (720,70);
+insert into t (id,a) values (720,71);
+insert into t (id,a) values (720,72);
+insert into t (id,a) values (720,73);
+insert into t (id,a) values (720,74);
+insert into t (id,a) values (720,75);
+insert into t (id,a) values (720,76);
+insert into t (id,a) values (720,77);
+insert into t (id,a) values (720,78);
+insert into t (id,a) values (720,79);
+insert into t (id,a) values (720,80);
+insert into t (id,a) values (720,81);
+insert into t (id,a) values (720,82);
+insert into t (id,a) values (720,83);
+insert into t (id,a) values (720,84);
+insert into t (id,a) values (720,85);
+insert into t (id,a) values (720,86);
+insert into t (id,a) values (720,87);
+insert into t (id,a) values (720,88);
+insert into t (id,a) values (720,89);
+insert into t (id,a) values (720,90);
+insert into t (id,a) values (720,91);
+insert into t (id,a) values (720,92);
+insert into t (id,a) values (720,93);
+insert into t (id,a) values (720,94);
+insert into t (id,a) values (720,95);
+insert into t (id,a) values (720,96);
+insert into t (id,a) values (720,97);
+insert into t (id,a) values (720,98);
+insert into t (id,a) values (720,99);
+insert into t (id,a) values (721,0);
+insert into t (id,a) values (721,1);
+insert into t (id,a) values (721,2);
+insert into t (id,a) values (721,3);
+insert into t (id,a) values (721,4);
+insert into t (id,a) values (721,5);
+insert into t (id,a) values (721,6);
+insert into t (id,a) values (721,7);
+insert into t (id,a) values (721,8);
+insert into t (id,a) values (721,9);
+insert into t (id,a) values (721,10);
+insert into t (id,a) values (721,11);
+insert into t (id,a) values (721,12);
+insert into t (id,a) values (721,13);
+insert into t (id,a) values (721,14);
+insert into t (id,a) values (721,15);
+insert into t (id,a) values (721,16);
+insert into t (id,a) values (721,17);
+insert into t (id,a) values (721,18);
+insert into t (id,a) values (721,19);
+insert into t (id,a) values (721,20);
+insert into t (id,a) values (721,21);
+insert into t (id,a) values (721,22);
+insert into t (id,a) values (721,23);
+insert into t (id,a) values (721,24);
+insert into t (id,a) values (721,25);
+insert into t (id,a) values (721,26);
+insert into t (id,a) values (721,27);
+insert into t (id,a) values (721,28);
+insert into t (id,a) values (721,29);
+insert into t (id,a) values (721,30);
+insert into t (id,a) values (721,31);
+insert into t (id,a) values (721,32);
+insert into t (id,a) values (721,33);
+insert into t (id,a) values (721,34);
+insert into t (id,a) values (721,35);
+insert into t (id,a) values (721,36);
+insert into t (id,a) values (721,37);
+insert into t (id,a) values (721,38);
+insert into t (id,a) values (721,39);
+insert into t (id,a) values (721,40);
+insert into t (id,a) values (721,41);
+insert into t (id,a) values (721,42);
+insert into t (id,a) values (721,43);
+insert into t (id,a) values (721,44);
+insert into t (id,a) values (721,45);
+insert into t (id,a) values (721,46);
+insert into t (id,a) values (721,47);
+insert into t (id,a) values (721,48);
+insert into t (id,a) values (721,49);
+insert into t (id,a) values (721,50);
+insert into t (id,a) values (721,51);
+insert into t (id,a) values (721,52);
+insert into t (id,a) values (721,53);
+insert into t (id,a) values (721,54);
+insert into t (id,a) values (721,55);
+insert into t (id,a) values (721,56);
+insert into t (id,a) values (721,57);
+insert into t (id,a) values (721,58);
+insert into t (id,a) values (721,59);
+insert into t (id,a) values (721,60);
+insert into t (id,a) values (721,61);
+insert into t (id,a) values (721,62);
+insert into t (id,a) values (721,63);
+insert into t (id,a) values (721,64);
+insert into t (id,a) values (721,65);
+insert into t (id,a) values (721,66);
+insert into t (id,a) values (721,67);
+insert into t (id,a) values (721,68);
+insert into t (id,a) values (721,69);
+insert into t (id,a) values (721,70);
+insert into t (id,a) values (721,71);
+insert into t (id,a) values (721,72);
+insert into t (id,a) values (721,73);
+insert into t (id,a) values (721,74);
+insert into t (id,a) values (721,75);
+insert into t (id,a) values (721,76);
+insert into t (id,a) values (721,77);
+insert into t (id,a) values (721,78);
+insert into t (id,a) values (721,79);
+insert into t (id,a) values (721,80);
+insert into t (id,a) values (721,81);
+insert into t (id,a) values (721,82);
+insert into t (id,a) values (721,83);
+insert into t (id,a) values (721,84);
+insert into t (id,a) values (721,85);
+insert into t (id,a) values (721,86);
+insert into t (id,a) values (721,87);
+insert into t (id,a) values (721,88);
+insert into t (id,a) values (721,89);
+insert into t (id,a) values (721,90);
+insert into t (id,a) values (721,91);
+insert into t (id,a) values (721,92);
+insert into t (id,a) values (721,93);
+insert into t (id,a) values (721,94);
+insert into t (id,a) values (721,95);
+insert into t (id,a) values (721,96);
+insert into t (id,a) values (721,97);
+insert into t (id,a) values (721,98);
+insert into t (id,a) values (721,99);
+insert into t (id,a) values (722,0);
+insert into t (id,a) values (722,1);
+insert into t (id,a) values (722,2);
+insert into t (id,a) values (722,3);
+insert into t (id,a) values (722,4);
+insert into t (id,a) values (722,5);
+insert into t (id,a) values (722,6);
+insert into t (id,a) values (722,7);
+insert into t (id,a) values (722,8);
+insert into t (id,a) values (722,9);
+insert into t (id,a) values (722,10);
+insert into t (id,a) values (722,11);
+insert into t (id,a) values (722,12);
+insert into t (id,a) values (722,13);
+insert into t (id,a) values (722,14);
+insert into t (id,a) values (722,15);
+insert into t (id,a) values (722,16);
+insert into t (id,a) values (722,17);
+insert into t (id,a) values (722,18);
+insert into t (id,a) values (722,19);
+insert into t (id,a) values (722,20);
+insert into t (id,a) values (722,21);
+insert into t (id,a) values (722,22);
+insert into t (id,a) values (722,23);
+insert into t (id,a) values (722,24);
+insert into t (id,a) values (722,25);
+insert into t (id,a) values (722,26);
+insert into t (id,a) values (722,27);
+insert into t (id,a) values (722,28);
+insert into t (id,a) values (722,29);
+insert into t (id,a) values (722,30);
+insert into t (id,a) values (722,31);
+insert into t (id,a) values (722,32);
+insert into t (id,a) values (722,33);
+insert into t (id,a) values (722,34);
+insert into t (id,a) values (722,35);
+insert into t (id,a) values (722,36);
+insert into t (id,a) values (722,37);
+insert into t (id,a) values (722,38);
+insert into t (id,a) values (722,39);
+insert into t (id,a) values (722,40);
+insert into t (id,a) values (722,41);
+insert into t (id,a) values (722,42);
+insert into t (id,a) values (722,43);
+insert into t (id,a) values (722,44);
+insert into t (id,a) values (722,45);
+insert into t (id,a) values (722,46);
+insert into t (id,a) values (722,47);
+insert into t (id,a) values (722,48);
+insert into t (id,a) values (722,49);
+insert into t (id,a) values (722,50);
+insert into t (id,a) values (722,51);
+insert into t (id,a) values (722,52);
+insert into t (id,a) values (722,53);
+insert into t (id,a) values (722,54);
+insert into t (id,a) values (722,55);
+insert into t (id,a) values (722,56);
+insert into t (id,a) values (722,57);
+insert into t (id,a) values (722,58);
+insert into t (id,a) values (722,59);
+insert into t (id,a) values (722,60);
+insert into t (id,a) values (722,61);
+insert into t (id,a) values (722,62);
+insert into t (id,a) values (722,63);
+insert into t (id,a) values (722,64);
+insert into t (id,a) values (722,65);
+insert into t (id,a) values (722,66);
+insert into t (id,a) values (722,67);
+insert into t (id,a) values (722,68);
+insert into t (id,a) values (722,69);
+insert into t (id,a) values (722,70);
+insert into t (id,a) values (722,71);
+insert into t (id,a) values (722,72);
+insert into t (id,a) values (722,73);
+insert into t (id,a) values (722,74);
+insert into t (id,a) values (722,75);
+insert into t (id,a) values (722,76);
+insert into t (id,a) values (722,77);
+insert into t (id,a) values (722,78);
+insert into t (id,a) values (722,79);
+insert into t (id,a) values (722,80);
+insert into t (id,a) values (722,81);
+insert into t (id,a) values (722,82);
+insert into t (id,a) values (722,83);
+insert into t (id,a) values (722,84);
+insert into t (id,a) values (722,85);
+insert into t (id,a) values (722,86);
+insert into t (id,a) values (722,87);
+insert into t (id,a) values (722,88);
+insert into t (id,a) values (722,89);
+insert into t (id,a) values (722,90);
+insert into t (id,a) values (722,91);
+insert into t (id,a) values (722,92);
+insert into t (id,a) values (722,93);
+insert into t (id,a) values (722,94);
+insert into t (id,a) values (722,95);
+insert into t (id,a) values (722,96);
+insert into t (id,a) values (722,97);
+insert into t (id,a) values (722,98);
+insert into t (id,a) values (722,99);
+insert into t (id,a) values (723,0);
+insert into t (id,a) values (723,1);
+insert into t (id,a) values (723,2);
+insert into t (id,a) values (723,3);
+insert into t (id,a) values (723,4);
+insert into t (id,a) values (723,5);
+insert into t (id,a) values (723,6);
+insert into t (id,a) values (723,7);
+insert into t (id,a) values (723,8);
+insert into t (id,a) values (723,9);
+insert into t (id,a) values (723,10);
+insert into t (id,a) values (723,11);
+insert into t (id,a) values (723,12);
+insert into t (id,a) values (723,13);
+insert into t (id,a) values (723,14);
+insert into t (id,a) values (723,15);
+insert into t (id,a) values (723,16);
+insert into t (id,a) values (723,17);
+insert into t (id,a) values (723,18);
+insert into t (id,a) values (723,19);
+insert into t (id,a) values (723,20);
+insert into t (id,a) values (723,21);
+insert into t (id,a) values (723,22);
+insert into t (id,a) values (723,23);
+insert into t (id,a) values (723,24);
+insert into t (id,a) values (723,25);
+insert into t (id,a) values (723,26);
+insert into t (id,a) values (723,27);
+insert into t (id,a) values (723,28);
+insert into t (id,a) values (723,29);
+insert into t (id,a) values (723,30);
+insert into t (id,a) values (723,31);
+insert into t (id,a) values (723,32);
+insert into t (id,a) values (723,33);
+insert into t (id,a) values (723,34);
+insert into t (id,a) values (723,35);
+insert into t (id,a) values (723,36);
+insert into t (id,a) values (723,37);
+insert into t (id,a) values (723,38);
+insert into t (id,a) values (723,39);
+insert into t (id,a) values (723,40);
+insert into t (id,a) values (723,41);
+insert into t (id,a) values (723,42);
+insert into t (id,a) values (723,43);
+insert into t (id,a) values (723,44);
+insert into t (id,a) values (723,45);
+insert into t (id,a) values (723,46);
+insert into t (id,a) values (723,47);
+insert into t (id,a) values (723,48);
+insert into t (id,a) values (723,49);
+insert into t (id,a) values (723,50);
+insert into t (id,a) values (723,51);
+insert into t (id,a) values (723,52);
+insert into t (id,a) values (723,53);
+insert into t (id,a) values (723,54);
+insert into t (id,a) values (723,55);
+insert into t (id,a) values (723,56);
+insert into t (id,a) values (723,57);
+insert into t (id,a) values (723,58);
+insert into t (id,a) values (723,59);
+insert into t (id,a) values (723,60);
+insert into t (id,a) values (723,61);
+insert into t (id,a) values (723,62);
+insert into t (id,a) values (723,63);
+insert into t (id,a) values (723,64);
+insert into t (id,a) values (723,65);
+insert into t (id,a) values (723,66);
+insert into t (id,a) values (723,67);
+insert into t (id,a) values (723,68);
+insert into t (id,a) values (723,69);
+insert into t (id,a) values (723,70);
+insert into t (id,a) values (723,71);
+insert into t (id,a) values (723,72);
+insert into t (id,a) values (723,73);
+insert into t (id,a) values (723,74);
+insert into t (id,a) values (723,75);
+insert into t (id,a) values (723,76);
+insert into t (id,a) values (723,77);
+insert into t (id,a) values (723,78);
+insert into t (id,a) values (723,79);
+insert into t (id,a) values (723,80);
+insert into t (id,a) values (723,81);
+insert into t (id,a) values (723,82);
+insert into t (id,a) values (723,83);
+insert into t (id,a) values (723,84);
+insert into t (id,a) values (723,85);
+insert into t (id,a) values (723,86);
+insert into t (id,a) values (723,87);
+insert into t (id,a) values (723,88);
+insert into t (id,a) values (723,89);
+insert into t (id,a) values (723,90);
+insert into t (id,a) values (723,91);
+insert into t (id,a) values (723,92);
+insert into t (id,a) values (723,93);
+insert into t (id,a) values (723,94);
+insert into t (id,a) values (723,95);
+insert into t (id,a) values (723,96);
+insert into t (id,a) values (723,97);
+insert into t (id,a) values (723,98);
+insert into t (id,a) values (723,99);
+insert into t (id,a) values (724,0);
+insert into t (id,a) values (724,1);
+insert into t (id,a) values (724,2);
+insert into t (id,a) values (724,3);
+insert into t (id,a) values (724,4);
+insert into t (id,a) values (724,5);
+insert into t (id,a) values (724,6);
+insert into t (id,a) values (724,7);
+insert into t (id,a) values (724,8);
+insert into t (id,a) values (724,9);
+insert into t (id,a) values (724,10);
+insert into t (id,a) values (724,11);
+insert into t (id,a) values (724,12);
+insert into t (id,a) values (724,13);
+insert into t (id,a) values (724,14);
+insert into t (id,a) values (724,15);
+insert into t (id,a) values (724,16);
+insert into t (id,a) values (724,17);
+insert into t (id,a) values (724,18);
+insert into t (id,a) values (724,19);
+insert into t (id,a) values (724,20);
+insert into t (id,a) values (724,21);
+insert into t (id,a) values (724,22);
+insert into t (id,a) values (724,23);
+insert into t (id,a) values (724,24);
+insert into t (id,a) values (724,25);
+insert into t (id,a) values (724,26);
+insert into t (id,a) values (724,27);
+insert into t (id,a) values (724,28);
+insert into t (id,a) values (724,29);
+insert into t (id,a) values (724,30);
+insert into t (id,a) values (724,31);
+insert into t (id,a) values (724,32);
+insert into t (id,a) values (724,33);
+insert into t (id,a) values (724,34);
+insert into t (id,a) values (724,35);
+insert into t (id,a) values (724,36);
+insert into t (id,a) values (724,37);
+insert into t (id,a) values (724,38);
+insert into t (id,a) values (724,39);
+insert into t (id,a) values (724,40);
+insert into t (id,a) values (724,41);
+insert into t (id,a) values (724,42);
+insert into t (id,a) values (724,43);
+insert into t (id,a) values (724,44);
+insert into t (id,a) values (724,45);
+insert into t (id,a) values (724,46);
+insert into t (id,a) values (724,47);
+insert into t (id,a) values (724,48);
+insert into t (id,a) values (724,49);
+insert into t (id,a) values (724,50);
+insert into t (id,a) values (724,51);
+insert into t (id,a) values (724,52);
+insert into t (id,a) values (724,53);
+insert into t (id,a) values (724,54);
+insert into t (id,a) values (724,55);
+insert into t (id,a) values (724,56);
+insert into t (id,a) values (724,57);
+insert into t (id,a) values (724,58);
+insert into t (id,a) values (724,59);
+insert into t (id,a) values (724,60);
+insert into t (id,a) values (724,61);
+insert into t (id,a) values (724,62);
+insert into t (id,a) values (724,63);
+insert into t (id,a) values (724,64);
+insert into t (id,a) values (724,65);
+insert into t (id,a) values (724,66);
+insert into t (id,a) values (724,67);
+insert into t (id,a) values (724,68);
+insert into t (id,a) values (724,69);
+insert into t (id,a) values (724,70);
+insert into t (id,a) values (724,71);
+insert into t (id,a) values (724,72);
+insert into t (id,a) values (724,73);
+insert into t (id,a) values (724,74);
+insert into t (id,a) values (724,75);
+insert into t (id,a) values (724,76);
+insert into t (id,a) values (724,77);
+insert into t (id,a) values (724,78);
+insert into t (id,a) values (724,79);
+insert into t (id,a) values (724,80);
+insert into t (id,a) values (724,81);
+insert into t (id,a) values (724,82);
+insert into t (id,a) values (724,83);
+insert into t (id,a) values (724,84);
+insert into t (id,a) values (724,85);
+insert into t (id,a) values (724,86);
+insert into t (id,a) values (724,87);
+insert into t (id,a) values (724,88);
+insert into t (id,a) values (724,89);
+insert into t (id,a) values (724,90);
+insert into t (id,a) values (724,91);
+insert into t (id,a) values (724,92);
+insert into t (id,a) values (724,93);
+insert into t (id,a) values (724,94);
+insert into t (id,a) values (724,95);
+insert into t (id,a) values (724,96);
+insert into t (id,a) values (724,97);
+insert into t (id,a) values (724,98);
+insert into t (id,a) values (724,99);
+insert into t (id,a) values (725,0);
+insert into t (id,a) values (725,1);
+insert into t (id,a) values (725,2);
+insert into t (id,a) values (725,3);
+insert into t (id,a) values (725,4);
+insert into t (id,a) values (725,5);
+insert into t (id,a) values (725,6);
+insert into t (id,a) values (725,7);
+insert into t (id,a) values (725,8);
+insert into t (id,a) values (725,9);
+insert into t (id,a) values (725,10);
+insert into t (id,a) values (725,11);
+insert into t (id,a) values (725,12);
+insert into t (id,a) values (725,13);
+insert into t (id,a) values (725,14);
+insert into t (id,a) values (725,15);
+insert into t (id,a) values (725,16);
+insert into t (id,a) values (725,17);
+insert into t (id,a) values (725,18);
+insert into t (id,a) values (725,19);
+insert into t (id,a) values (725,20);
+insert into t (id,a) values (725,21);
+insert into t (id,a) values (725,22);
+insert into t (id,a) values (725,23);
+insert into t (id,a) values (725,24);
+insert into t (id,a) values (725,25);
+insert into t (id,a) values (725,26);
+insert into t (id,a) values (725,27);
+insert into t (id,a) values (725,28);
+insert into t (id,a) values (725,29);
+insert into t (id,a) values (725,30);
+insert into t (id,a) values (725,31);
+insert into t (id,a) values (725,32);
+insert into t (id,a) values (725,33);
+insert into t (id,a) values (725,34);
+insert into t (id,a) values (725,35);
+insert into t (id,a) values (725,36);
+insert into t (id,a) values (725,37);
+insert into t (id,a) values (725,38);
+insert into t (id,a) values (725,39);
+insert into t (id,a) values (725,40);
+insert into t (id,a) values (725,41);
+insert into t (id,a) values (725,42);
+insert into t (id,a) values (725,43);
+insert into t (id,a) values (725,44);
+insert into t (id,a) values (725,45);
+insert into t (id,a) values (725,46);
+insert into t (id,a) values (725,47);
+insert into t (id,a) values (725,48);
+insert into t (id,a) values (725,49);
+insert into t (id,a) values (725,50);
+insert into t (id,a) values (725,51);
+insert into t (id,a) values (725,52);
+insert into t (id,a) values (725,53);
+insert into t (id,a) values (725,54);
+insert into t (id,a) values (725,55);
+insert into t (id,a) values (725,56);
+insert into t (id,a) values (725,57);
+insert into t (id,a) values (725,58);
+insert into t (id,a) values (725,59);
+insert into t (id,a) values (725,60);
+insert into t (id,a) values (725,61);
+insert into t (id,a) values (725,62);
+insert into t (id,a) values (725,63);
+insert into t (id,a) values (725,64);
+insert into t (id,a) values (725,65);
+insert into t (id,a) values (725,66);
+insert into t (id,a) values (725,67);
+insert into t (id,a) values (725,68);
+insert into t (id,a) values (725,69);
+insert into t (id,a) values (725,70);
+insert into t (id,a) values (725,71);
+insert into t (id,a) values (725,72);
+insert into t (id,a) values (725,73);
+insert into t (id,a) values (725,74);
+insert into t (id,a) values (725,75);
+insert into t (id,a) values (725,76);
+insert into t (id,a) values (725,77);
+insert into t (id,a) values (725,78);
+insert into t (id,a) values (725,79);
+insert into t (id,a) values (725,80);
+insert into t (id,a) values (725,81);
+insert into t (id,a) values (725,82);
+insert into t (id,a) values (725,83);
+insert into t (id,a) values (725,84);
+insert into t (id,a) values (725,85);
+insert into t (id,a) values (725,86);
+insert into t (id,a) values (725,87);
+insert into t (id,a) values (725,88);
+insert into t (id,a) values (725,89);
+insert into t (id,a) values (725,90);
+insert into t (id,a) values (725,91);
+insert into t (id,a) values (725,92);
+insert into t (id,a) values (725,93);
+insert into t (id,a) values (725,94);
+insert into t (id,a) values (725,95);
+insert into t (id,a) values (725,96);
+insert into t (id,a) values (725,97);
+insert into t (id,a) values (725,98);
+insert into t (id,a) values (725,99);
+insert into t (id,a) values (726,0);
+insert into t (id,a) values (726,1);
+insert into t (id,a) values (726,2);
+insert into t (id,a) values (726,3);
+insert into t (id,a) values (726,4);
+insert into t (id,a) values (726,5);
+insert into t (id,a) values (726,6);
+insert into t (id,a) values (726,7);
+insert into t (id,a) values (726,8);
+insert into t (id,a) values (726,9);
+insert into t (id,a) values (726,10);
+insert into t (id,a) values (726,11);
+insert into t (id,a) values (726,12);
+insert into t (id,a) values (726,13);
+insert into t (id,a) values (726,14);
+insert into t (id,a) values (726,15);
+insert into t (id,a) values (726,16);
+insert into t (id,a) values (726,17);
+insert into t (id,a) values (726,18);
+insert into t (id,a) values (726,19);
+insert into t (id,a) values (726,20);
+insert into t (id,a) values (726,21);
+insert into t (id,a) values (726,22);
+insert into t (id,a) values (726,23);
+insert into t (id,a) values (726,24);
+insert into t (id,a) values (726,25);
+insert into t (id,a) values (726,26);
+insert into t (id,a) values (726,27);
+insert into t (id,a) values (726,28);
+insert into t (id,a) values (726,29);
+insert into t (id,a) values (726,30);
+insert into t (id,a) values (726,31);
+insert into t (id,a) values (726,32);
+insert into t (id,a) values (726,33);
+insert into t (id,a) values (726,34);
+insert into t (id,a) values (726,35);
+insert into t (id,a) values (726,36);
+insert into t (id,a) values (726,37);
+insert into t (id,a) values (726,38);
+insert into t (id,a) values (726,39);
+insert into t (id,a) values (726,40);
+insert into t (id,a) values (726,41);
+insert into t (id,a) values (726,42);
+insert into t (id,a) values (726,43);
+insert into t (id,a) values (726,44);
+insert into t (id,a) values (726,45);
+insert into t (id,a) values (726,46);
+insert into t (id,a) values (726,47);
+insert into t (id,a) values (726,48);
+insert into t (id,a) values (726,49);
+insert into t (id,a) values (726,50);
+insert into t (id,a) values (726,51);
+insert into t (id,a) values (726,52);
+insert into t (id,a) values (726,53);
+insert into t (id,a) values (726,54);
+insert into t (id,a) values (726,55);
+insert into t (id,a) values (726,56);
+insert into t (id,a) values (726,57);
+insert into t (id,a) values (726,58);
+insert into t (id,a) values (726,59);
+insert into t (id,a) values (726,60);
+insert into t (id,a) values (726,61);
+insert into t (id,a) values (726,62);
+insert into t (id,a) values (726,63);
+insert into t (id,a) values (726,64);
+insert into t (id,a) values (726,65);
+insert into t (id,a) values (726,66);
+insert into t (id,a) values (726,67);
+insert into t (id,a) values (726,68);
+insert into t (id,a) values (726,69);
+insert into t (id,a) values (726,70);
+insert into t (id,a) values (726,71);
+insert into t (id,a) values (726,72);
+insert into t (id,a) values (726,73);
+insert into t (id,a) values (726,74);
+insert into t (id,a) values (726,75);
+insert into t (id,a) values (726,76);
+insert into t (id,a) values (726,77);
+insert into t (id,a) values (726,78);
+insert into t (id,a) values (726,79);
+insert into t (id,a) values (726,80);
+insert into t (id,a) values (726,81);
+insert into t (id,a) values (726,82);
+insert into t (id,a) values (726,83);
+insert into t (id,a) values (726,84);
+insert into t (id,a) values (726,85);
+insert into t (id,a) values (726,86);
+insert into t (id,a) values (726,87);
+insert into t (id,a) values (726,88);
+insert into t (id,a) values (726,89);
+insert into t (id,a) values (726,90);
+insert into t (id,a) values (726,91);
+insert into t (id,a) values (726,92);
+insert into t (id,a) values (726,93);
+insert into t (id,a) values (726,94);
+insert into t (id,a) values (726,95);
+insert into t (id,a) values (726,96);
+insert into t (id,a) values (726,97);
+insert into t (id,a) values (726,98);
+insert into t (id,a) values (726,99);
+insert into t (id,a) values (727,0);
+insert into t (id,a) values (727,1);
+insert into t (id,a) values (727,2);
+insert into t (id,a) values (727,3);
+insert into t (id,a) values (727,4);
+insert into t (id,a) values (727,5);
+insert into t (id,a) values (727,6);
+insert into t (id,a) values (727,7);
+insert into t (id,a) values (727,8);
+insert into t (id,a) values (727,9);
+insert into t (id,a) values (727,10);
+insert into t (id,a) values (727,11);
+insert into t (id,a) values (727,12);
+insert into t (id,a) values (727,13);
+insert into t (id,a) values (727,14);
+insert into t (id,a) values (727,15);
+insert into t (id,a) values (727,16);
+insert into t (id,a) values (727,17);
+insert into t (id,a) values (727,18);
+insert into t (id,a) values (727,19);
+insert into t (id,a) values (727,20);
+insert into t (id,a) values (727,21);
+insert into t (id,a) values (727,22);
+insert into t (id,a) values (727,23);
+insert into t (id,a) values (727,24);
+insert into t (id,a) values (727,25);
+insert into t (id,a) values (727,26);
+insert into t (id,a) values (727,27);
+insert into t (id,a) values (727,28);
+insert into t (id,a) values (727,29);
+insert into t (id,a) values (727,30);
+insert into t (id,a) values (727,31);
+insert into t (id,a) values (727,32);
+insert into t (id,a) values (727,33);
+insert into t (id,a) values (727,34);
+insert into t (id,a) values (727,35);
+insert into t (id,a) values (727,36);
+insert into t (id,a) values (727,37);
+insert into t (id,a) values (727,38);
+insert into t (id,a) values (727,39);
+insert into t (id,a) values (727,40);
+insert into t (id,a) values (727,41);
+insert into t (id,a) values (727,42);
+insert into t (id,a) values (727,43);
+insert into t (id,a) values (727,44);
+insert into t (id,a) values (727,45);
+insert into t (id,a) values (727,46);
+insert into t (id,a) values (727,47);
+insert into t (id,a) values (727,48);
+insert into t (id,a) values (727,49);
+insert into t (id,a) values (727,50);
+insert into t (id,a) values (727,51);
+insert into t (id,a) values (727,52);
+insert into t (id,a) values (727,53);
+insert into t (id,a) values (727,54);
+insert into t (id,a) values (727,55);
+insert into t (id,a) values (727,56);
+insert into t (id,a) values (727,57);
+insert into t (id,a) values (727,58);
+insert into t (id,a) values (727,59);
+insert into t (id,a) values (727,60);
+insert into t (id,a) values (727,61);
+insert into t (id,a) values (727,62);
+insert into t (id,a) values (727,63);
+insert into t (id,a) values (727,64);
+insert into t (id,a) values (727,65);
+insert into t (id,a) values (727,66);
+insert into t (id,a) values (727,67);
+insert into t (id,a) values (727,68);
+insert into t (id,a) values (727,69);
+insert into t (id,a) values (727,70);
+insert into t (id,a) values (727,71);
+insert into t (id,a) values (727,72);
+insert into t (id,a) values (727,73);
+insert into t (id,a) values (727,74);
+insert into t (id,a) values (727,75);
+insert into t (id,a) values (727,76);
+insert into t (id,a) values (727,77);
+insert into t (id,a) values (727,78);
+insert into t (id,a) values (727,79);
+insert into t (id,a) values (727,80);
+insert into t (id,a) values (727,81);
+insert into t (id,a) values (727,82);
+insert into t (id,a) values (727,83);
+insert into t (id,a) values (727,84);
+insert into t (id,a) values (727,85);
+insert into t (id,a) values (727,86);
+insert into t (id,a) values (727,87);
+insert into t (id,a) values (727,88);
+insert into t (id,a) values (727,89);
+insert into t (id,a) values (727,90);
+insert into t (id,a) values (727,91);
+insert into t (id,a) values (727,92);
+insert into t (id,a) values (727,93);
+insert into t (id,a) values (727,94);
+insert into t (id,a) values (727,95);
+insert into t (id,a) values (727,96);
+insert into t (id,a) values (727,97);
+insert into t (id,a) values (727,98);
+insert into t (id,a) values (727,99);
+insert into t (id,a) values (728,0);
+insert into t (id,a) values (728,1);
+insert into t (id,a) values (728,2);
+insert into t (id,a) values (728,3);
+insert into t (id,a) values (728,4);
+insert into t (id,a) values (728,5);
+insert into t (id,a) values (728,6);
+insert into t (id,a) values (728,7);
+insert into t (id,a) values (728,8);
+insert into t (id,a) values (728,9);
+insert into t (id,a) values (728,10);
+insert into t (id,a) values (728,11);
+insert into t (id,a) values (728,12);
+insert into t (id,a) values (728,13);
+insert into t (id,a) values (728,14);
+insert into t (id,a) values (728,15);
+insert into t (id,a) values (728,16);
+insert into t (id,a) values (728,17);
+insert into t (id,a) values (728,18);
+insert into t (id,a) values (728,19);
+insert into t (id,a) values (728,20);
+insert into t (id,a) values (728,21);
+insert into t (id,a) values (728,22);
+insert into t (id,a) values (728,23);
+insert into t (id,a) values (728,24);
+insert into t (id,a) values (728,25);
+insert into t (id,a) values (728,26);
+insert into t (id,a) values (728,27);
+insert into t (id,a) values (728,28);
+insert into t (id,a) values (728,29);
+insert into t (id,a) values (728,30);
+insert into t (id,a) values (728,31);
+insert into t (id,a) values (728,32);
+insert into t (id,a) values (728,33);
+insert into t (id,a) values (728,34);
+insert into t (id,a) values (728,35);
+insert into t (id,a) values (728,36);
+insert into t (id,a) values (728,37);
+insert into t (id,a) values (728,38);
+insert into t (id,a) values (728,39);
+insert into t (id,a) values (728,40);
+insert into t (id,a) values (728,41);
+insert into t (id,a) values (728,42);
+insert into t (id,a) values (728,43);
+insert into t (id,a) values (728,44);
+insert into t (id,a) values (728,45);
+insert into t (id,a) values (728,46);
+insert into t (id,a) values (728,47);
+insert into t (id,a) values (728,48);
+insert into t (id,a) values (728,49);
+insert into t (id,a) values (728,50);
+insert into t (id,a) values (728,51);
+insert into t (id,a) values (728,52);
+insert into t (id,a) values (728,53);
+insert into t (id,a) values (728,54);
+insert into t (id,a) values (728,55);
+insert into t (id,a) values (728,56);
+insert into t (id,a) values (728,57);
+insert into t (id,a) values (728,58);
+insert into t (id,a) values (728,59);
+insert into t (id,a) values (728,60);
+insert into t (id,a) values (728,61);
+insert into t (id,a) values (728,62);
+insert into t (id,a) values (728,63);
+insert into t (id,a) values (728,64);
+insert into t (id,a) values (728,65);
+insert into t (id,a) values (728,66);
+insert into t (id,a) values (728,67);
+insert into t (id,a) values (728,68);
+insert into t (id,a) values (728,69);
+insert into t (id,a) values (728,70);
+insert into t (id,a) values (728,71);
+insert into t (id,a) values (728,72);
+insert into t (id,a) values (728,73);
+insert into t (id,a) values (728,74);
+insert into t (id,a) values (728,75);
+insert into t (id,a) values (728,76);
+insert into t (id,a) values (728,77);
+insert into t (id,a) values (728,78);
+insert into t (id,a) values (728,79);
+insert into t (id,a) values (728,80);
+insert into t (id,a) values (728,81);
+insert into t (id,a) values (728,82);
+insert into t (id,a) values (728,83);
+insert into t (id,a) values (728,84);
+insert into t (id,a) values (728,85);
+insert into t (id,a) values (728,86);
+insert into t (id,a) values (728,87);
+insert into t (id,a) values (728,88);
+insert into t (id,a) values (728,89);
+insert into t (id,a) values (728,90);
+insert into t (id,a) values (728,91);
+insert into t (id,a) values (728,92);
+insert into t (id,a) values (728,93);
+insert into t (id,a) values (728,94);
+insert into t (id,a) values (728,95);
+insert into t (id,a) values (728,96);
+insert into t (id,a) values (728,97);
+insert into t (id,a) values (728,98);
+insert into t (id,a) values (728,99);
+insert into t (id,a) values (729,0);
+insert into t (id,a) values (729,1);
+insert into t (id,a) values (729,2);
+insert into t (id,a) values (729,3);
+insert into t (id,a) values (729,4);
+insert into t (id,a) values (729,5);
+insert into t (id,a) values (729,6);
+insert into t (id,a) values (729,7);
+insert into t (id,a) values (729,8);
+insert into t (id,a) values (729,9);
+insert into t (id,a) values (729,10);
+insert into t (id,a) values (729,11);
+insert into t (id,a) values (729,12);
+insert into t (id,a) values (729,13);
+insert into t (id,a) values (729,14);
+insert into t (id,a) values (729,15);
+insert into t (id,a) values (729,16);
+insert into t (id,a) values (729,17);
+insert into t (id,a) values (729,18);
+insert into t (id,a) values (729,19);
+insert into t (id,a) values (729,20);
+insert into t (id,a) values (729,21);
+insert into t (id,a) values (729,22);
+insert into t (id,a) values (729,23);
+insert into t (id,a) values (729,24);
+insert into t (id,a) values (729,25);
+insert into t (id,a) values (729,26);
+insert into t (id,a) values (729,27);
+insert into t (id,a) values (729,28);
+insert into t (id,a) values (729,29);
+insert into t (id,a) values (729,30);
+insert into t (id,a) values (729,31);
+insert into t (id,a) values (729,32);
+insert into t (id,a) values (729,33);
+insert into t (id,a) values (729,34);
+insert into t (id,a) values (729,35);
+insert into t (id,a) values (729,36);
+insert into t (id,a) values (729,37);
+insert into t (id,a) values (729,38);
+insert into t (id,a) values (729,39);
+insert into t (id,a) values (729,40);
+insert into t (id,a) values (729,41);
+insert into t (id,a) values (729,42);
+insert into t (id,a) values (729,43);
+insert into t (id,a) values (729,44);
+insert into t (id,a) values (729,45);
+insert into t (id,a) values (729,46);
+insert into t (id,a) values (729,47);
+insert into t (id,a) values (729,48);
+insert into t (id,a) values (729,49);
+insert into t (id,a) values (729,50);
+insert into t (id,a) values (729,51);
+insert into t (id,a) values (729,52);
+insert into t (id,a) values (729,53);
+insert into t (id,a) values (729,54);
+insert into t (id,a) values (729,55);
+insert into t (id,a) values (729,56);
+insert into t (id,a) values (729,57);
+insert into t (id,a) values (729,58);
+insert into t (id,a) values (729,59);
+insert into t (id,a) values (729,60);
+insert into t (id,a) values (729,61);
+insert into t (id,a) values (729,62);
+insert into t (id,a) values (729,63);
+insert into t (id,a) values (729,64);
+insert into t (id,a) values (729,65);
+insert into t (id,a) values (729,66);
+insert into t (id,a) values (729,67);
+insert into t (id,a) values (729,68);
+insert into t (id,a) values (729,69);
+insert into t (id,a) values (729,70);
+insert into t (id,a) values (729,71);
+insert into t (id,a) values (729,72);
+insert into t (id,a) values (729,73);
+insert into t (id,a) values (729,74);
+insert into t (id,a) values (729,75);
+insert into t (id,a) values (729,76);
+insert into t (id,a) values (729,77);
+insert into t (id,a) values (729,78);
+insert into t (id,a) values (729,79);
+insert into t (id,a) values (729,80);
+insert into t (id,a) values (729,81);
+insert into t (id,a) values (729,82);
+insert into t (id,a) values (729,83);
+insert into t (id,a) values (729,84);
+insert into t (id,a) values (729,85);
+insert into t (id,a) values (729,86);
+insert into t (id,a) values (729,87);
+insert into t (id,a) values (729,88);
+insert into t (id,a) values (729,89);
+insert into t (id,a) values (729,90);
+insert into t (id,a) values (729,91);
+insert into t (id,a) values (729,92);
+insert into t (id,a) values (729,93);
+insert into t (id,a) values (729,94);
+insert into t (id,a) values (729,95);
+insert into t (id,a) values (729,96);
+insert into t (id,a) values (729,97);
+insert into t (id,a) values (729,98);
+insert into t (id,a) values (729,99);
+insert into t (id,a) values (730,0);
+insert into t (id,a) values (730,1);
+insert into t (id,a) values (730,2);
+insert into t (id,a) values (730,3);
+insert into t (id,a) values (730,4);
+insert into t (id,a) values (730,5);
+insert into t (id,a) values (730,6);
+insert into t (id,a) values (730,7);
+insert into t (id,a) values (730,8);
+insert into t (id,a) values (730,9);
+insert into t (id,a) values (730,10);
+insert into t (id,a) values (730,11);
+insert into t (id,a) values (730,12);
+insert into t (id,a) values (730,13);
+insert into t (id,a) values (730,14);
+insert into t (id,a) values (730,15);
+insert into t (id,a) values (730,16);
+insert into t (id,a) values (730,17);
+insert into t (id,a) values (730,18);
+insert into t (id,a) values (730,19);
+insert into t (id,a) values (730,20);
+insert into t (id,a) values (730,21);
+insert into t (id,a) values (730,22);
+insert into t (id,a) values (730,23);
+insert into t (id,a) values (730,24);
+insert into t (id,a) values (730,25);
+insert into t (id,a) values (730,26);
+insert into t (id,a) values (730,27);
+insert into t (id,a) values (730,28);
+insert into t (id,a) values (730,29);
+insert into t (id,a) values (730,30);
+insert into t (id,a) values (730,31);
+insert into t (id,a) values (730,32);
+insert into t (id,a) values (730,33);
+insert into t (id,a) values (730,34);
+insert into t (id,a) values (730,35);
+insert into t (id,a) values (730,36);
+insert into t (id,a) values (730,37);
+insert into t (id,a) values (730,38);
+insert into t (id,a) values (730,39);
+insert into t (id,a) values (730,40);
+insert into t (id,a) values (730,41);
+insert into t (id,a) values (730,42);
+insert into t (id,a) values (730,43);
+insert into t (id,a) values (730,44);
+insert into t (id,a) values (730,45);
+insert into t (id,a) values (730,46);
+insert into t (id,a) values (730,47);
+insert into t (id,a) values (730,48);
+insert into t (id,a) values (730,49);
+insert into t (id,a) values (730,50);
+insert into t (id,a) values (730,51);
+insert into t (id,a) values (730,52);
+insert into t (id,a) values (730,53);
+insert into t (id,a) values (730,54);
+insert into t (id,a) values (730,55);
+insert into t (id,a) values (730,56);
+insert into t (id,a) values (730,57);
+insert into t (id,a) values (730,58);
+insert into t (id,a) values (730,59);
+insert into t (id,a) values (730,60);
+insert into t (id,a) values (730,61);
+insert into t (id,a) values (730,62);
+insert into t (id,a) values (730,63);
+insert into t (id,a) values (730,64);
+insert into t (id,a) values (730,65);
+insert into t (id,a) values (730,66);
+insert into t (id,a) values (730,67);
+insert into t (id,a) values (730,68);
+insert into t (id,a) values (730,69);
+insert into t (id,a) values (730,70);
+insert into t (id,a) values (730,71);
+insert into t (id,a) values (730,72);
+insert into t (id,a) values (730,73);
+insert into t (id,a) values (730,74);
+insert into t (id,a) values (730,75);
+insert into t (id,a) values (730,76);
+insert into t (id,a) values (730,77);
+insert into t (id,a) values (730,78);
+insert into t (id,a) values (730,79);
+insert into t (id,a) values (730,80);
+insert into t (id,a) values (730,81);
+insert into t (id,a) values (730,82);
+insert into t (id,a) values (730,83);
+insert into t (id,a) values (730,84);
+insert into t (id,a) values (730,85);
+insert into t (id,a) values (730,86);
+insert into t (id,a) values (730,87);
+insert into t (id,a) values (730,88);
+insert into t (id,a) values (730,89);
+insert into t (id,a) values (730,90);
+insert into t (id,a) values (730,91);
+insert into t (id,a) values (730,92);
+insert into t (id,a) values (730,93);
+insert into t (id,a) values (730,94);
+insert into t (id,a) values (730,95);
+insert into t (id,a) values (730,96);
+insert into t (id,a) values (730,97);
+insert into t (id,a) values (730,98);
+insert into t (id,a) values (730,99);
+insert into t (id,a) values (731,0);
+insert into t (id,a) values (731,1);
+insert into t (id,a) values (731,2);
+insert into t (id,a) values (731,3);
+insert into t (id,a) values (731,4);
+insert into t (id,a) values (731,5);
+insert into t (id,a) values (731,6);
+insert into t (id,a) values (731,7);
+insert into t (id,a) values (731,8);
+insert into t (id,a) values (731,9);
+insert into t (id,a) values (731,10);
+insert into t (id,a) values (731,11);
+insert into t (id,a) values (731,12);
+insert into t (id,a) values (731,13);
+insert into t (id,a) values (731,14);
+insert into t (id,a) values (731,15);
+insert into t (id,a) values (731,16);
+insert into t (id,a) values (731,17);
+insert into t (id,a) values (731,18);
+insert into t (id,a) values (731,19);
+insert into t (id,a) values (731,20);
+insert into t (id,a) values (731,21);
+insert into t (id,a) values (731,22);
+insert into t (id,a) values (731,23);
+insert into t (id,a) values (731,24);
+insert into t (id,a) values (731,25);
+insert into t (id,a) values (731,26);
+insert into t (id,a) values (731,27);
+insert into t (id,a) values (731,28);
+insert into t (id,a) values (731,29);
+insert into t (id,a) values (731,30);
+insert into t (id,a) values (731,31);
+insert into t (id,a) values (731,32);
+insert into t (id,a) values (731,33);
+insert into t (id,a) values (731,34);
+insert into t (id,a) values (731,35);
+insert into t (id,a) values (731,36);
+insert into t (id,a) values (731,37);
+insert into t (id,a) values (731,38);
+insert into t (id,a) values (731,39);
+insert into t (id,a) values (731,40);
+insert into t (id,a) values (731,41);
+insert into t (id,a) values (731,42);
+insert into t (id,a) values (731,43);
+insert into t (id,a) values (731,44);
+insert into t (id,a) values (731,45);
+insert into t (id,a) values (731,46);
+insert into t (id,a) values (731,47);
+insert into t (id,a) values (731,48);
+insert into t (id,a) values (731,49);
+insert into t (id,a) values (731,50);
+insert into t (id,a) values (731,51);
+insert into t (id,a) values (731,52);
+insert into t (id,a) values (731,53);
+insert into t (id,a) values (731,54);
+insert into t (id,a) values (731,55);
+insert into t (id,a) values (731,56);
+insert into t (id,a) values (731,57);
+insert into t (id,a) values (731,58);
+insert into t (id,a) values (731,59);
+insert into t (id,a) values (731,60);
+insert into t (id,a) values (731,61);
+insert into t (id,a) values (731,62);
+insert into t (id,a) values (731,63);
+insert into t (id,a) values (731,64);
+insert into t (id,a) values (731,65);
+insert into t (id,a) values (731,66);
+insert into t (id,a) values (731,67);
+insert into t (id,a) values (731,68);
+insert into t (id,a) values (731,69);
+insert into t (id,a) values (731,70);
+insert into t (id,a) values (731,71);
+insert into t (id,a) values (731,72);
+insert into t (id,a) values (731,73);
+insert into t (id,a) values (731,74);
+insert into t (id,a) values (731,75);
+insert into t (id,a) values (731,76);
+insert into t (id,a) values (731,77);
+insert into t (id,a) values (731,78);
+insert into t (id,a) values (731,79);
+insert into t (id,a) values (731,80);
+insert into t (id,a) values (731,81);
+insert into t (id,a) values (731,82);
+insert into t (id,a) values (731,83);
+insert into t (id,a) values (731,84);
+insert into t (id,a) values (731,85);
+insert into t (id,a) values (731,86);
+insert into t (id,a) values (731,87);
+insert into t (id,a) values (731,88);
+insert into t (id,a) values (731,89);
+insert into t (id,a) values (731,90);
+insert into t (id,a) values (731,91);
+insert into t (id,a) values (731,92);
+insert into t (id,a) values (731,93);
+insert into t (id,a) values (731,94);
+insert into t (id,a) values (731,95);
+insert into t (id,a) values (731,96);
+insert into t (id,a) values (731,97);
+insert into t (id,a) values (731,98);
+insert into t (id,a) values (731,99);
+insert into t (id,a) values (732,0);
+insert into t (id,a) values (732,1);
+insert into t (id,a) values (732,2);
+insert into t (id,a) values (732,3);
+insert into t (id,a) values (732,4);
+insert into t (id,a) values (732,5);
+insert into t (id,a) values (732,6);
+insert into t (id,a) values (732,7);
+insert into t (id,a) values (732,8);
+insert into t (id,a) values (732,9);
+insert into t (id,a) values (732,10);
+insert into t (id,a) values (732,11);
+insert into t (id,a) values (732,12);
+insert into t (id,a) values (732,13);
+insert into t (id,a) values (732,14);
+insert into t (id,a) values (732,15);
+insert into t (id,a) values (732,16);
+insert into t (id,a) values (732,17);
+insert into t (id,a) values (732,18);
+insert into t (id,a) values (732,19);
+insert into t (id,a) values (732,20);
+insert into t (id,a) values (732,21);
+insert into t (id,a) values (732,22);
+insert into t (id,a) values (732,23);
+insert into t (id,a) values (732,24);
+insert into t (id,a) values (732,25);
+insert into t (id,a) values (732,26);
+insert into t (id,a) values (732,27);
+insert into t (id,a) values (732,28);
+insert into t (id,a) values (732,29);
+insert into t (id,a) values (732,30);
+insert into t (id,a) values (732,31);
+insert into t (id,a) values (732,32);
+insert into t (id,a) values (732,33);
+insert into t (id,a) values (732,34);
+insert into t (id,a) values (732,35);
+insert into t (id,a) values (732,36);
+insert into t (id,a) values (732,37);
+insert into t (id,a) values (732,38);
+insert into t (id,a) values (732,39);
+insert into t (id,a) values (732,40);
+insert into t (id,a) values (732,41);
+insert into t (id,a) values (732,42);
+insert into t (id,a) values (732,43);
+insert into t (id,a) values (732,44);
+insert into t (id,a) values (732,45);
+insert into t (id,a) values (732,46);
+insert into t (id,a) values (732,47);
+insert into t (id,a) values (732,48);
+insert into t (id,a) values (732,49);
+insert into t (id,a) values (732,50);
+insert into t (id,a) values (732,51);
+insert into t (id,a) values (732,52);
+insert into t (id,a) values (732,53);
+insert into t (id,a) values (732,54);
+insert into t (id,a) values (732,55);
+insert into t (id,a) values (732,56);
+insert into t (id,a) values (732,57);
+insert into t (id,a) values (732,58);
+insert into t (id,a) values (732,59);
+insert into t (id,a) values (732,60);
+insert into t (id,a) values (732,61);
+insert into t (id,a) values (732,62);
+insert into t (id,a) values (732,63);
+insert into t (id,a) values (732,64);
+insert into t (id,a) values (732,65);
+insert into t (id,a) values (732,66);
+insert into t (id,a) values (732,67);
+insert into t (id,a) values (732,68);
+insert into t (id,a) values (732,69);
+insert into t (id,a) values (732,70);
+insert into t (id,a) values (732,71);
+insert into t (id,a) values (732,72);
+insert into t (id,a) values (732,73);
+insert into t (id,a) values (732,74);
+insert into t (id,a) values (732,75);
+insert into t (id,a) values (732,76);
+insert into t (id,a) values (732,77);
+insert into t (id,a) values (732,78);
+insert into t (id,a) values (732,79);
+insert into t (id,a) values (732,80);
+insert into t (id,a) values (732,81);
+insert into t (id,a) values (732,82);
+insert into t (id,a) values (732,83);
+insert into t (id,a) values (732,84);
+insert into t (id,a) values (732,85);
+insert into t (id,a) values (732,86);
+insert into t (id,a) values (732,87);
+insert into t (id,a) values (732,88);
+insert into t (id,a) values (732,89);
+insert into t (id,a) values (732,90);
+insert into t (id,a) values (732,91);
+insert into t (id,a) values (732,92);
+insert into t (id,a) values (732,93);
+insert into t (id,a) values (732,94);
+insert into t (id,a) values (732,95);
+insert into t (id,a) values (732,96);
+insert into t (id,a) values (732,97);
+insert into t (id,a) values (732,98);
+insert into t (id,a) values (732,99);
+insert into t (id,a) values (733,0);
+insert into t (id,a) values (733,1);
+insert into t (id,a) values (733,2);
+insert into t (id,a) values (733,3);
+insert into t (id,a) values (733,4);
+insert into t (id,a) values (733,5);
+insert into t (id,a) values (733,6);
+insert into t (id,a) values (733,7);
+insert into t (id,a) values (733,8);
+insert into t (id,a) values (733,9);
+insert into t (id,a) values (733,10);
+insert into t (id,a) values (733,11);
+insert into t (id,a) values (733,12);
+insert into t (id,a) values (733,13);
+insert into t (id,a) values (733,14);
+insert into t (id,a) values (733,15);
+insert into t (id,a) values (733,16);
+insert into t (id,a) values (733,17);
+insert into t (id,a) values (733,18);
+insert into t (id,a) values (733,19);
+insert into t (id,a) values (733,20);
+insert into t (id,a) values (733,21);
+insert into t (id,a) values (733,22);
+insert into t (id,a) values (733,23);
+insert into t (id,a) values (733,24);
+insert into t (id,a) values (733,25);
+insert into t (id,a) values (733,26);
+insert into t (id,a) values (733,27);
+insert into t (id,a) values (733,28);
+insert into t (id,a) values (733,29);
+insert into t (id,a) values (733,30);
+insert into t (id,a) values (733,31);
+insert into t (id,a) values (733,32);
+insert into t (id,a) values (733,33);
+insert into t (id,a) values (733,34);
+insert into t (id,a) values (733,35);
+insert into t (id,a) values (733,36);
+insert into t (id,a) values (733,37);
+insert into t (id,a) values (733,38);
+insert into t (id,a) values (733,39);
+insert into t (id,a) values (733,40);
+insert into t (id,a) values (733,41);
+insert into t (id,a) values (733,42);
+insert into t (id,a) values (733,43);
+insert into t (id,a) values (733,44);
+insert into t (id,a) values (733,45);
+insert into t (id,a) values (733,46);
+insert into t (id,a) values (733,47);
+insert into t (id,a) values (733,48);
+insert into t (id,a) values (733,49);
+insert into t (id,a) values (733,50);
+insert into t (id,a) values (733,51);
+insert into t (id,a) values (733,52);
+insert into t (id,a) values (733,53);
+insert into t (id,a) values (733,54);
+insert into t (id,a) values (733,55);
+insert into t (id,a) values (733,56);
+insert into t (id,a) values (733,57);
+insert into t (id,a) values (733,58);
+insert into t (id,a) values (733,59);
+insert into t (id,a) values (733,60);
+insert into t (id,a) values (733,61);
+insert into t (id,a) values (733,62);
+insert into t (id,a) values (733,63);
+insert into t (id,a) values (733,64);
+insert into t (id,a) values (733,65);
+insert into t (id,a) values (733,66);
+insert into t (id,a) values (733,67);
+insert into t (id,a) values (733,68);
+insert into t (id,a) values (733,69);
+insert into t (id,a) values (733,70);
+insert into t (id,a) values (733,71);
+insert into t (id,a) values (733,72);
+insert into t (id,a) values (733,73);
+insert into t (id,a) values (733,74);
+insert into t (id,a) values (733,75);
+insert into t (id,a) values (733,76);
+insert into t (id,a) values (733,77);
+insert into t (id,a) values (733,78);
+insert into t (id,a) values (733,79);
+insert into t (id,a) values (733,80);
+insert into t (id,a) values (733,81);
+insert into t (id,a) values (733,82);
+insert into t (id,a) values (733,83);
+insert into t (id,a) values (733,84);
+insert into t (id,a) values (733,85);
+insert into t (id,a) values (733,86);
+insert into t (id,a) values (733,87);
+insert into t (id,a) values (733,88);
+insert into t (id,a) values (733,89);
+insert into t (id,a) values (733,90);
+insert into t (id,a) values (733,91);
+insert into t (id,a) values (733,92);
+insert into t (id,a) values (733,93);
+insert into t (id,a) values (733,94);
+insert into t (id,a) values (733,95);
+insert into t (id,a) values (733,96);
+insert into t (id,a) values (733,97);
+insert into t (id,a) values (733,98);
+insert into t (id,a) values (733,99);
+insert into t (id,a) values (734,0);
+insert into t (id,a) values (734,1);
+insert into t (id,a) values (734,2);
+insert into t (id,a) values (734,3);
+insert into t (id,a) values (734,4);
+insert into t (id,a) values (734,5);
+insert into t (id,a) values (734,6);
+insert into t (id,a) values (734,7);
+insert into t (id,a) values (734,8);
+insert into t (id,a) values (734,9);
+insert into t (id,a) values (734,10);
+insert into t (id,a) values (734,11);
+insert into t (id,a) values (734,12);
+insert into t (id,a) values (734,13);
+insert into t (id,a) values (734,14);
+insert into t (id,a) values (734,15);
+insert into t (id,a) values (734,16);
+insert into t (id,a) values (734,17);
+insert into t (id,a) values (734,18);
+insert into t (id,a) values (734,19);
+insert into t (id,a) values (734,20);
+insert into t (id,a) values (734,21);
+insert into t (id,a) values (734,22);
+insert into t (id,a) values (734,23);
+insert into t (id,a) values (734,24);
+insert into t (id,a) values (734,25);
+insert into t (id,a) values (734,26);
+insert into t (id,a) values (734,27);
+insert into t (id,a) values (734,28);
+insert into t (id,a) values (734,29);
+insert into t (id,a) values (734,30);
+insert into t (id,a) values (734,31);
+insert into t (id,a) values (734,32);
+insert into t (id,a) values (734,33);
+insert into t (id,a) values (734,34);
+insert into t (id,a) values (734,35);
+insert into t (id,a) values (734,36);
+insert into t (id,a) values (734,37);
+insert into t (id,a) values (734,38);
+insert into t (id,a) values (734,39);
+insert into t (id,a) values (734,40);
+insert into t (id,a) values (734,41);
+insert into t (id,a) values (734,42);
+insert into t (id,a) values (734,43);
+insert into t (id,a) values (734,44);
+insert into t (id,a) values (734,45);
+insert into t (id,a) values (734,46);
+insert into t (id,a) values (734,47);
+insert into t (id,a) values (734,48);
+insert into t (id,a) values (734,49);
+insert into t (id,a) values (734,50);
+insert into t (id,a) values (734,51);
+insert into t (id,a) values (734,52);
+insert into t (id,a) values (734,53);
+insert into t (id,a) values (734,54);
+insert into t (id,a) values (734,55);
+insert into t (id,a) values (734,56);
+insert into t (id,a) values (734,57);
+insert into t (id,a) values (734,58);
+insert into t (id,a) values (734,59);
+insert into t (id,a) values (734,60);
+insert into t (id,a) values (734,61);
+insert into t (id,a) values (734,62);
+insert into t (id,a) values (734,63);
+insert into t (id,a) values (734,64);
+insert into t (id,a) values (734,65);
+insert into t (id,a) values (734,66);
+insert into t (id,a) values (734,67);
+insert into t (id,a) values (734,68);
+insert into t (id,a) values (734,69);
+insert into t (id,a) values (734,70);
+insert into t (id,a) values (734,71);
+insert into t (id,a) values (734,72);
+insert into t (id,a) values (734,73);
+insert into t (id,a) values (734,74);
+insert into t (id,a) values (734,75);
+insert into t (id,a) values (734,76);
+insert into t (id,a) values (734,77);
+insert into t (id,a) values (734,78);
+insert into t (id,a) values (734,79);
+insert into t (id,a) values (734,80);
+insert into t (id,a) values (734,81);
+insert into t (id,a) values (734,82);
+insert into t (id,a) values (734,83);
+insert into t (id,a) values (734,84);
+insert into t (id,a) values (734,85);
+insert into t (id,a) values (734,86);
+insert into t (id,a) values (734,87);
+insert into t (id,a) values (734,88);
+insert into t (id,a) values (734,89);
+insert into t (id,a) values (734,90);
+insert into t (id,a) values (734,91);
+insert into t (id,a) values (734,92);
+insert into t (id,a) values (734,93);
+insert into t (id,a) values (734,94);
+insert into t (id,a) values (734,95);
+insert into t (id,a) values (734,96);
+insert into t (id,a) values (734,97);
+insert into t (id,a) values (734,98);
+insert into t (id,a) values (734,99);
+insert into t (id,a) values (735,0);
+insert into t (id,a) values (735,1);
+insert into t (id,a) values (735,2);
+insert into t (id,a) values (735,3);
+insert into t (id,a) values (735,4);
+insert into t (id,a) values (735,5);
+insert into t (id,a) values (735,6);
+insert into t (id,a) values (735,7);
+insert into t (id,a) values (735,8);
+insert into t (id,a) values (735,9);
+insert into t (id,a) values (735,10);
+insert into t (id,a) values (735,11);
+insert into t (id,a) values (735,12);
+insert into t (id,a) values (735,13);
+insert into t (id,a) values (735,14);
+insert into t (id,a) values (735,15);
+insert into t (id,a) values (735,16);
+insert into t (id,a) values (735,17);
+insert into t (id,a) values (735,18);
+insert into t (id,a) values (735,19);
+insert into t (id,a) values (735,20);
+insert into t (id,a) values (735,21);
+insert into t (id,a) values (735,22);
+insert into t (id,a) values (735,23);
+insert into t (id,a) values (735,24);
+insert into t (id,a) values (735,25);
+insert into t (id,a) values (735,26);
+insert into t (id,a) values (735,27);
+insert into t (id,a) values (735,28);
+insert into t (id,a) values (735,29);
+insert into t (id,a) values (735,30);
+insert into t (id,a) values (735,31);
+insert into t (id,a) values (735,32);
+insert into t (id,a) values (735,33);
+insert into t (id,a) values (735,34);
+insert into t (id,a) values (735,35);
+insert into t (id,a) values (735,36);
+insert into t (id,a) values (735,37);
+insert into t (id,a) values (735,38);
+insert into t (id,a) values (735,39);
+insert into t (id,a) values (735,40);
+insert into t (id,a) values (735,41);
+insert into t (id,a) values (735,42);
+insert into t (id,a) values (735,43);
+insert into t (id,a) values (735,44);
+insert into t (id,a) values (735,45);
+insert into t (id,a) values (735,46);
+insert into t (id,a) values (735,47);
+insert into t (id,a) values (735,48);
+insert into t (id,a) values (735,49);
+insert into t (id,a) values (735,50);
+insert into t (id,a) values (735,51);
+insert into t (id,a) values (735,52);
+insert into t (id,a) values (735,53);
+insert into t (id,a) values (735,54);
+insert into t (id,a) values (735,55);
+insert into t (id,a) values (735,56);
+insert into t (id,a) values (735,57);
+insert into t (id,a) values (735,58);
+insert into t (id,a) values (735,59);
+insert into t (id,a) values (735,60);
+insert into t (id,a) values (735,61);
+insert into t (id,a) values (735,62);
+insert into t (id,a) values (735,63);
+insert into t (id,a) values (735,64);
+insert into t (id,a) values (735,65);
+insert into t (id,a) values (735,66);
+insert into t (id,a) values (735,67);
+insert into t (id,a) values (735,68);
+insert into t (id,a) values (735,69);
+insert into t (id,a) values (735,70);
+insert into t (id,a) values (735,71);
+insert into t (id,a) values (735,72);
+insert into t (id,a) values (735,73);
+insert into t (id,a) values (735,74);
+insert into t (id,a) values (735,75);
+insert into t (id,a) values (735,76);
+insert into t (id,a) values (735,77);
+insert into t (id,a) values (735,78);
+insert into t (id,a) values (735,79);
+insert into t (id,a) values (735,80);
+insert into t (id,a) values (735,81);
+insert into t (id,a) values (735,82);
+insert into t (id,a) values (735,83);
+insert into t (id,a) values (735,84);
+insert into t (id,a) values (735,85);
+insert into t (id,a) values (735,86);
+insert into t (id,a) values (735,87);
+insert into t (id,a) values (735,88);
+insert into t (id,a) values (735,89);
+insert into t (id,a) values (735,90);
+insert into t (id,a) values (735,91);
+insert into t (id,a) values (735,92);
+insert into t (id,a) values (735,93);
+insert into t (id,a) values (735,94);
+insert into t (id,a) values (735,95);
+insert into t (id,a) values (735,96);
+insert into t (id,a) values (735,97);
+insert into t (id,a) values (735,98);
+insert into t (id,a) values (735,99);
+insert into t (id,a) values (736,0);
+insert into t (id,a) values (736,1);
+insert into t (id,a) values (736,2);
+insert into t (id,a) values (736,3);
+insert into t (id,a) values (736,4);
+insert into t (id,a) values (736,5);
+insert into t (id,a) values (736,6);
+insert into t (id,a) values (736,7);
+insert into t (id,a) values (736,8);
+insert into t (id,a) values (736,9);
+insert into t (id,a) values (736,10);
+insert into t (id,a) values (736,11);
+insert into t (id,a) values (736,12);
+insert into t (id,a) values (736,13);
+insert into t (id,a) values (736,14);
+insert into t (id,a) values (736,15);
+insert into t (id,a) values (736,16);
+insert into t (id,a) values (736,17);
+insert into t (id,a) values (736,18);
+insert into t (id,a) values (736,19);
+insert into t (id,a) values (736,20);
+insert into t (id,a) values (736,21);
+insert into t (id,a) values (736,22);
+insert into t (id,a) values (736,23);
+insert into t (id,a) values (736,24);
+insert into t (id,a) values (736,25);
+insert into t (id,a) values (736,26);
+insert into t (id,a) values (736,27);
+insert into t (id,a) values (736,28);
+insert into t (id,a) values (736,29);
+insert into t (id,a) values (736,30);
+insert into t (id,a) values (736,31);
+insert into t (id,a) values (736,32);
+insert into t (id,a) values (736,33);
+insert into t (id,a) values (736,34);
+insert into t (id,a) values (736,35);
+insert into t (id,a) values (736,36);
+insert into t (id,a) values (736,37);
+insert into t (id,a) values (736,38);
+insert into t (id,a) values (736,39);
+insert into t (id,a) values (736,40);
+insert into t (id,a) values (736,41);
+insert into t (id,a) values (736,42);
+insert into t (id,a) values (736,43);
+insert into t (id,a) values (736,44);
+insert into t (id,a) values (736,45);
+insert into t (id,a) values (736,46);
+insert into t (id,a) values (736,47);
+insert into t (id,a) values (736,48);
+insert into t (id,a) values (736,49);
+insert into t (id,a) values (736,50);
+insert into t (id,a) values (736,51);
+insert into t (id,a) values (736,52);
+insert into t (id,a) values (736,53);
+insert into t (id,a) values (736,54);
+insert into t (id,a) values (736,55);
+insert into t (id,a) values (736,56);
+insert into t (id,a) values (736,57);
+insert into t (id,a) values (736,58);
+insert into t (id,a) values (736,59);
+insert into t (id,a) values (736,60);
+insert into t (id,a) values (736,61);
+insert into t (id,a) values (736,62);
+insert into t (id,a) values (736,63);
+insert into t (id,a) values (736,64);
+insert into t (id,a) values (736,65);
+insert into t (id,a) values (736,66);
+insert into t (id,a) values (736,67);
+insert into t (id,a) values (736,68);
+insert into t (id,a) values (736,69);
+insert into t (id,a) values (736,70);
+insert into t (id,a) values (736,71);
+insert into t (id,a) values (736,72);
+insert into t (id,a) values (736,73);
+insert into t (id,a) values (736,74);
+insert into t (id,a) values (736,75);
+insert into t (id,a) values (736,76);
+insert into t (id,a) values (736,77);
+insert into t (id,a) values (736,78);
+insert into t (id,a) values (736,79);
+insert into t (id,a) values (736,80);
+insert into t (id,a) values (736,81);
+insert into t (id,a) values (736,82);
+insert into t (id,a) values (736,83);
+insert into t (id,a) values (736,84);
+insert into t (id,a) values (736,85);
+insert into t (id,a) values (736,86);
+insert into t (id,a) values (736,87);
+insert into t (id,a) values (736,88);
+insert into t (id,a) values (736,89);
+insert into t (id,a) values (736,90);
+insert into t (id,a) values (736,91);
+insert into t (id,a) values (736,92);
+insert into t (id,a) values (736,93);
+insert into t (id,a) values (736,94);
+insert into t (id,a) values (736,95);
+insert into t (id,a) values (736,96);
+insert into t (id,a) values (736,97);
+insert into t (id,a) values (736,98);
+insert into t (id,a) values (736,99);
+insert into t (id,a) values (737,0);
+insert into t (id,a) values (737,1);
+insert into t (id,a) values (737,2);
+insert into t (id,a) values (737,3);
+insert into t (id,a) values (737,4);
+insert into t (id,a) values (737,5);
+insert into t (id,a) values (737,6);
+insert into t (id,a) values (737,7);
+insert into t (id,a) values (737,8);
+insert into t (id,a) values (737,9);
+insert into t (id,a) values (737,10);
+insert into t (id,a) values (737,11);
+insert into t (id,a) values (737,12);
+insert into t (id,a) values (737,13);
+insert into t (id,a) values (737,14);
+insert into t (id,a) values (737,15);
+insert into t (id,a) values (737,16);
+insert into t (id,a) values (737,17);
+insert into t (id,a) values (737,18);
+insert into t (id,a) values (737,19);
+insert into t (id,a) values (737,20);
+insert into t (id,a) values (737,21);
+insert into t (id,a) values (737,22);
+insert into t (id,a) values (737,23);
+insert into t (id,a) values (737,24);
+insert into t (id,a) values (737,25);
+insert into t (id,a) values (737,26);
+insert into t (id,a) values (737,27);
+insert into t (id,a) values (737,28);
+insert into t (id,a) values (737,29);
+insert into t (id,a) values (737,30);
+insert into t (id,a) values (737,31);
+insert into t (id,a) values (737,32);
+insert into t (id,a) values (737,33);
+insert into t (id,a) values (737,34);
+insert into t (id,a) values (737,35);
+insert into t (id,a) values (737,36);
+insert into t (id,a) values (737,37);
+insert into t (id,a) values (737,38);
+insert into t (id,a) values (737,39);
+insert into t (id,a) values (737,40);
+insert into t (id,a) values (737,41);
+insert into t (id,a) values (737,42);
+insert into t (id,a) values (737,43);
+insert into t (id,a) values (737,44);
+insert into t (id,a) values (737,45);
+insert into t (id,a) values (737,46);
+insert into t (id,a) values (737,47);
+insert into t (id,a) values (737,48);
+insert into t (id,a) values (737,49);
+insert into t (id,a) values (737,50);
+insert into t (id,a) values (737,51);
+insert into t (id,a) values (737,52);
+insert into t (id,a) values (737,53);
+insert into t (id,a) values (737,54);
+insert into t (id,a) values (737,55);
+insert into t (id,a) values (737,56);
+insert into t (id,a) values (737,57);
+insert into t (id,a) values (737,58);
+insert into t (id,a) values (737,59);
+insert into t (id,a) values (737,60);
+insert into t (id,a) values (737,61);
+insert into t (id,a) values (737,62);
+insert into t (id,a) values (737,63);
+insert into t (id,a) values (737,64);
+insert into t (id,a) values (737,65);
+insert into t (id,a) values (737,66);
+insert into t (id,a) values (737,67);
+insert into t (id,a) values (737,68);
+insert into t (id,a) values (737,69);
+insert into t (id,a) values (737,70);
+insert into t (id,a) values (737,71);
+insert into t (id,a) values (737,72);
+insert into t (id,a) values (737,73);
+insert into t (id,a) values (737,74);
+insert into t (id,a) values (737,75);
+insert into t (id,a) values (737,76);
+insert into t (id,a) values (737,77);
+insert into t (id,a) values (737,78);
+insert into t (id,a) values (737,79);
+insert into t (id,a) values (737,80);
+insert into t (id,a) values (737,81);
+insert into t (id,a) values (737,82);
+insert into t (id,a) values (737,83);
+insert into t (id,a) values (737,84);
+insert into t (id,a) values (737,85);
+insert into t (id,a) values (737,86);
+insert into t (id,a) values (737,87);
+insert into t (id,a) values (737,88);
+insert into t (id,a) values (737,89);
+insert into t (id,a) values (737,90);
+insert into t (id,a) values (737,91);
+insert into t (id,a) values (737,92);
+insert into t (id,a) values (737,93);
+insert into t (id,a) values (737,94);
+insert into t (id,a) values (737,95);
+insert into t (id,a) values (737,96);
+insert into t (id,a) values (737,97);
+insert into t (id,a) values (737,98);
+insert into t (id,a) values (737,99);
+insert into t (id,a) values (738,0);
+insert into t (id,a) values (738,1);
+insert into t (id,a) values (738,2);
+insert into t (id,a) values (738,3);
+insert into t (id,a) values (738,4);
+insert into t (id,a) values (738,5);
+insert into t (id,a) values (738,6);
+insert into t (id,a) values (738,7);
+insert into t (id,a) values (738,8);
+insert into t (id,a) values (738,9);
+insert into t (id,a) values (738,10);
+insert into t (id,a) values (738,11);
+insert into t (id,a) values (738,12);
+insert into t (id,a) values (738,13);
+insert into t (id,a) values (738,14);
+insert into t (id,a) values (738,15);
+insert into t (id,a) values (738,16);
+insert into t (id,a) values (738,17);
+insert into t (id,a) values (738,18);
+insert into t (id,a) values (738,19);
+insert into t (id,a) values (738,20);
+insert into t (id,a) values (738,21);
+insert into t (id,a) values (738,22);
+insert into t (id,a) values (738,23);
+insert into t (id,a) values (738,24);
+insert into t (id,a) values (738,25);
+insert into t (id,a) values (738,26);
+insert into t (id,a) values (738,27);
+insert into t (id,a) values (738,28);
+insert into t (id,a) values (738,29);
+insert into t (id,a) values (738,30);
+insert into t (id,a) values (738,31);
+insert into t (id,a) values (738,32);
+insert into t (id,a) values (738,33);
+insert into t (id,a) values (738,34);
+insert into t (id,a) values (738,35);
+insert into t (id,a) values (738,36);
+insert into t (id,a) values (738,37);
+insert into t (id,a) values (738,38);
+insert into t (id,a) values (738,39);
+insert into t (id,a) values (738,40);
+insert into t (id,a) values (738,41);
+insert into t (id,a) values (738,42);
+insert into t (id,a) values (738,43);
+insert into t (id,a) values (738,44);
+insert into t (id,a) values (738,45);
+insert into t (id,a) values (738,46);
+insert into t (id,a) values (738,47);
+insert into t (id,a) values (738,48);
+insert into t (id,a) values (738,49);
+insert into t (id,a) values (738,50);
+insert into t (id,a) values (738,51);
+insert into t (id,a) values (738,52);
+insert into t (id,a) values (738,53);
+insert into t (id,a) values (738,54);
+insert into t (id,a) values (738,55);
+insert into t (id,a) values (738,56);
+insert into t (id,a) values (738,57);
+insert into t (id,a) values (738,58);
+insert into t (id,a) values (738,59);
+insert into t (id,a) values (738,60);
+insert into t (id,a) values (738,61);
+insert into t (id,a) values (738,62);
+insert into t (id,a) values (738,63);
+insert into t (id,a) values (738,64);
+insert into t (id,a) values (738,65);
+insert into t (id,a) values (738,66);
+insert into t (id,a) values (738,67);
+insert into t (id,a) values (738,68);
+insert into t (id,a) values (738,69);
+insert into t (id,a) values (738,70);
+insert into t (id,a) values (738,71);
+insert into t (id,a) values (738,72);
+insert into t (id,a) values (738,73);
+insert into t (id,a) values (738,74);
+insert into t (id,a) values (738,75);
+insert into t (id,a) values (738,76);
+insert into t (id,a) values (738,77);
+insert into t (id,a) values (738,78);
+insert into t (id,a) values (738,79);
+insert into t (id,a) values (738,80);
+insert into t (id,a) values (738,81);
+insert into t (id,a) values (738,82);
+insert into t (id,a) values (738,83);
+insert into t (id,a) values (738,84);
+insert into t (id,a) values (738,85);
+insert into t (id,a) values (738,86);
+insert into t (id,a) values (738,87);
+insert into t (id,a) values (738,88);
+insert into t (id,a) values (738,89);
+insert into t (id,a) values (738,90);
+insert into t (id,a) values (738,91);
+insert into t (id,a) values (738,92);
+insert into t (id,a) values (738,93);
+insert into t (id,a) values (738,94);
+insert into t (id,a) values (738,95);
+insert into t (id,a) values (738,96);
+insert into t (id,a) values (738,97);
+insert into t (id,a) values (738,98);
+insert into t (id,a) values (738,99);
+insert into t (id,a) values (739,0);
+insert into t (id,a) values (739,1);
+insert into t (id,a) values (739,2);
+insert into t (id,a) values (739,3);
+insert into t (id,a) values (739,4);
+insert into t (id,a) values (739,5);
+insert into t (id,a) values (739,6);
+insert into t (id,a) values (739,7);
+insert into t (id,a) values (739,8);
+insert into t (id,a) values (739,9);
+insert into t (id,a) values (739,10);
+insert into t (id,a) values (739,11);
+insert into t (id,a) values (739,12);
+insert into t (id,a) values (739,13);
+insert into t (id,a) values (739,14);
+insert into t (id,a) values (739,15);
+insert into t (id,a) values (739,16);
+insert into t (id,a) values (739,17);
+insert into t (id,a) values (739,18);
+insert into t (id,a) values (739,19);
+insert into t (id,a) values (739,20);
+insert into t (id,a) values (739,21);
+insert into t (id,a) values (739,22);
+insert into t (id,a) values (739,23);
+insert into t (id,a) values (739,24);
+insert into t (id,a) values (739,25);
+insert into t (id,a) values (739,26);
+insert into t (id,a) values (739,27);
+insert into t (id,a) values (739,28);
+insert into t (id,a) values (739,29);
+insert into t (id,a) values (739,30);
+insert into t (id,a) values (739,31);
+insert into t (id,a) values (739,32);
+insert into t (id,a) values (739,33);
+insert into t (id,a) values (739,34);
+insert into t (id,a) values (739,35);
+insert into t (id,a) values (739,36);
+insert into t (id,a) values (739,37);
+insert into t (id,a) values (739,38);
+insert into t (id,a) values (739,39);
+insert into t (id,a) values (739,40);
+insert into t (id,a) values (739,41);
+insert into t (id,a) values (739,42);
+insert into t (id,a) values (739,43);
+insert into t (id,a) values (739,44);
+insert into t (id,a) values (739,45);
+insert into t (id,a) values (739,46);
+insert into t (id,a) values (739,47);
+insert into t (id,a) values (739,48);
+insert into t (id,a) values (739,49);
+insert into t (id,a) values (739,50);
+insert into t (id,a) values (739,51);
+insert into t (id,a) values (739,52);
+insert into t (id,a) values (739,53);
+insert into t (id,a) values (739,54);
+insert into t (id,a) values (739,55);
+insert into t (id,a) values (739,56);
+insert into t (id,a) values (739,57);
+insert into t (id,a) values (739,58);
+insert into t (id,a) values (739,59);
+insert into t (id,a) values (739,60);
+insert into t (id,a) values (739,61);
+insert into t (id,a) values (739,62);
+insert into t (id,a) values (739,63);
+insert into t (id,a) values (739,64);
+insert into t (id,a) values (739,65);
+insert into t (id,a) values (739,66);
+insert into t (id,a) values (739,67);
+insert into t (id,a) values (739,68);
+insert into t (id,a) values (739,69);
+insert into t (id,a) values (739,70);
+insert into t (id,a) values (739,71);
+insert into t (id,a) values (739,72);
+insert into t (id,a) values (739,73);
+insert into t (id,a) values (739,74);
+insert into t (id,a) values (739,75);
+insert into t (id,a) values (739,76);
+insert into t (id,a) values (739,77);
+insert into t (id,a) values (739,78);
+insert into t (id,a) values (739,79);
+insert into t (id,a) values (739,80);
+insert into t (id,a) values (739,81);
+insert into t (id,a) values (739,82);
+insert into t (id,a) values (739,83);
+insert into t (id,a) values (739,84);
+insert into t (id,a) values (739,85);
+insert into t (id,a) values (739,86);
+insert into t (id,a) values (739,87);
+insert into t (id,a) values (739,88);
+insert into t (id,a) values (739,89);
+insert into t (id,a) values (739,90);
+insert into t (id,a) values (739,91);
+insert into t (id,a) values (739,92);
+insert into t (id,a) values (739,93);
+insert into t (id,a) values (739,94);
+insert into t (id,a) values (739,95);
+insert into t (id,a) values (739,96);
+insert into t (id,a) values (739,97);
+insert into t (id,a) values (739,98);
+insert into t (id,a) values (739,99);
+insert into t (id,a) values (740,0);
+insert into t (id,a) values (740,1);
+insert into t (id,a) values (740,2);
+insert into t (id,a) values (740,3);
+insert into t (id,a) values (740,4);
+insert into t (id,a) values (740,5);
+insert into t (id,a) values (740,6);
+insert into t (id,a) values (740,7);
+insert into t (id,a) values (740,8);
+insert into t (id,a) values (740,9);
+insert into t (id,a) values (740,10);
+insert into t (id,a) values (740,11);
+insert into t (id,a) values (740,12);
+insert into t (id,a) values (740,13);
+insert into t (id,a) values (740,14);
+insert into t (id,a) values (740,15);
+insert into t (id,a) values (740,16);
+insert into t (id,a) values (740,17);
+insert into t (id,a) values (740,18);
+insert into t (id,a) values (740,19);
+insert into t (id,a) values (740,20);
+insert into t (id,a) values (740,21);
+insert into t (id,a) values (740,22);
+insert into t (id,a) values (740,23);
+insert into t (id,a) values (740,24);
+insert into t (id,a) values (740,25);
+insert into t (id,a) values (740,26);
+insert into t (id,a) values (740,27);
+insert into t (id,a) values (740,28);
+insert into t (id,a) values (740,29);
+insert into t (id,a) values (740,30);
+insert into t (id,a) values (740,31);
+insert into t (id,a) values (740,32);
+insert into t (id,a) values (740,33);
+insert into t (id,a) values (740,34);
+insert into t (id,a) values (740,35);
+insert into t (id,a) values (740,36);
+insert into t (id,a) values (740,37);
+insert into t (id,a) values (740,38);
+insert into t (id,a) values (740,39);
+insert into t (id,a) values (740,40);
+insert into t (id,a) values (740,41);
+insert into t (id,a) values (740,42);
+insert into t (id,a) values (740,43);
+insert into t (id,a) values (740,44);
+insert into t (id,a) values (740,45);
+insert into t (id,a) values (740,46);
+insert into t (id,a) values (740,47);
+insert into t (id,a) values (740,48);
+insert into t (id,a) values (740,49);
+insert into t (id,a) values (740,50);
+insert into t (id,a) values (740,51);
+insert into t (id,a) values (740,52);
+insert into t (id,a) values (740,53);
+insert into t (id,a) values (740,54);
+insert into t (id,a) values (740,55);
+insert into t (id,a) values (740,56);
+insert into t (id,a) values (740,57);
+insert into t (id,a) values (740,58);
+insert into t (id,a) values (740,59);
+insert into t (id,a) values (740,60);
+insert into t (id,a) values (740,61);
+insert into t (id,a) values (740,62);
+insert into t (id,a) values (740,63);
+insert into t (id,a) values (740,64);
+insert into t (id,a) values (740,65);
+insert into t (id,a) values (740,66);
+insert into t (id,a) values (740,67);
+insert into t (id,a) values (740,68);
+insert into t (id,a) values (740,69);
+insert into t (id,a) values (740,70);
+insert into t (id,a) values (740,71);
+insert into t (id,a) values (740,72);
+insert into t (id,a) values (740,73);
+insert into t (id,a) values (740,74);
+insert into t (id,a) values (740,75);
+insert into t (id,a) values (740,76);
+insert into t (id,a) values (740,77);
+insert into t (id,a) values (740,78);
+insert into t (id,a) values (740,79);
+insert into t (id,a) values (740,80);
+insert into t (id,a) values (740,81);
+insert into t (id,a) values (740,82);
+insert into t (id,a) values (740,83);
+insert into t (id,a) values (740,84);
+insert into t (id,a) values (740,85);
+insert into t (id,a) values (740,86);
+insert into t (id,a) values (740,87);
+insert into t (id,a) values (740,88);
+insert into t (id,a) values (740,89);
+insert into t (id,a) values (740,90);
+insert into t (id,a) values (740,91);
+insert into t (id,a) values (740,92);
+insert into t (id,a) values (740,93);
+insert into t (id,a) values (740,94);
+insert into t (id,a) values (740,95);
+insert into t (id,a) values (740,96);
+insert into t (id,a) values (740,97);
+insert into t (id,a) values (740,98);
+insert into t (id,a) values (740,99);
+insert into t (id,a) values (741,0);
+insert into t (id,a) values (741,1);
+insert into t (id,a) values (741,2);
+insert into t (id,a) values (741,3);
+insert into t (id,a) values (741,4);
+insert into t (id,a) values (741,5);
+insert into t (id,a) values (741,6);
+insert into t (id,a) values (741,7);
+insert into t (id,a) values (741,8);
+insert into t (id,a) values (741,9);
+insert into t (id,a) values (741,10);
+insert into t (id,a) values (741,11);
+insert into t (id,a) values (741,12);
+insert into t (id,a) values (741,13);
+insert into t (id,a) values (741,14);
+insert into t (id,a) values (741,15);
+insert into t (id,a) values (741,16);
+insert into t (id,a) values (741,17);
+insert into t (id,a) values (741,18);
+insert into t (id,a) values (741,19);
+insert into t (id,a) values (741,20);
+insert into t (id,a) values (741,21);
+insert into t (id,a) values (741,22);
+insert into t (id,a) values (741,23);
+insert into t (id,a) values (741,24);
+insert into t (id,a) values (741,25);
+insert into t (id,a) values (741,26);
+insert into t (id,a) values (741,27);
+insert into t (id,a) values (741,28);
+insert into t (id,a) values (741,29);
+insert into t (id,a) values (741,30);
+insert into t (id,a) values (741,31);
+insert into t (id,a) values (741,32);
+insert into t (id,a) values (741,33);
+insert into t (id,a) values (741,34);
+insert into t (id,a) values (741,35);
+insert into t (id,a) values (741,36);
+insert into t (id,a) values (741,37);
+insert into t (id,a) values (741,38);
+insert into t (id,a) values (741,39);
+insert into t (id,a) values (741,40);
+insert into t (id,a) values (741,41);
+insert into t (id,a) values (741,42);
+insert into t (id,a) values (741,43);
+insert into t (id,a) values (741,44);
+insert into t (id,a) values (741,45);
+insert into t (id,a) values (741,46);
+insert into t (id,a) values (741,47);
+insert into t (id,a) values (741,48);
+insert into t (id,a) values (741,49);
+insert into t (id,a) values (741,50);
+insert into t (id,a) values (741,51);
+insert into t (id,a) values (741,52);
+insert into t (id,a) values (741,53);
+insert into t (id,a) values (741,54);
+insert into t (id,a) values (741,55);
+insert into t (id,a) values (741,56);
+insert into t (id,a) values (741,57);
+insert into t (id,a) values (741,58);
+insert into t (id,a) values (741,59);
+insert into t (id,a) values (741,60);
+insert into t (id,a) values (741,61);
+insert into t (id,a) values (741,62);
+insert into t (id,a) values (741,63);
+insert into t (id,a) values (741,64);
+insert into t (id,a) values (741,65);
+insert into t (id,a) values (741,66);
+insert into t (id,a) values (741,67);
+insert into t (id,a) values (741,68);
+insert into t (id,a) values (741,69);
+insert into t (id,a) values (741,70);
+insert into t (id,a) values (741,71);
+insert into t (id,a) values (741,72);
+insert into t (id,a) values (741,73);
+insert into t (id,a) values (741,74);
+insert into t (id,a) values (741,75);
+insert into t (id,a) values (741,76);
+insert into t (id,a) values (741,77);
+insert into t (id,a) values (741,78);
+insert into t (id,a) values (741,79);
+insert into t (id,a) values (741,80);
+insert into t (id,a) values (741,81);
+insert into t (id,a) values (741,82);
+insert into t (id,a) values (741,83);
+insert into t (id,a) values (741,84);
+insert into t (id,a) values (741,85);
+insert into t (id,a) values (741,86);
+insert into t (id,a) values (741,87);
+insert into t (id,a) values (741,88);
+insert into t (id,a) values (741,89);
+insert into t (id,a) values (741,90);
+insert into t (id,a) values (741,91);
+insert into t (id,a) values (741,92);
+insert into t (id,a) values (741,93);
+insert into t (id,a) values (741,94);
+insert into t (id,a) values (741,95);
+insert into t (id,a) values (741,96);
+insert into t (id,a) values (741,97);
+insert into t (id,a) values (741,98);
+insert into t (id,a) values (741,99);
+insert into t (id,a) values (742,0);
+insert into t (id,a) values (742,1);
+insert into t (id,a) values (742,2);
+insert into t (id,a) values (742,3);
+insert into t (id,a) values (742,4);
+insert into t (id,a) values (742,5);
+insert into t (id,a) values (742,6);
+insert into t (id,a) values (742,7);
+insert into t (id,a) values (742,8);
+insert into t (id,a) values (742,9);
+insert into t (id,a) values (742,10);
+insert into t (id,a) values (742,11);
+insert into t (id,a) values (742,12);
+insert into t (id,a) values (742,13);
+insert into t (id,a) values (742,14);
+insert into t (id,a) values (742,15);
+insert into t (id,a) values (742,16);
+insert into t (id,a) values (742,17);
+insert into t (id,a) values (742,18);
+insert into t (id,a) values (742,19);
+insert into t (id,a) values (742,20);
+insert into t (id,a) values (742,21);
+insert into t (id,a) values (742,22);
+insert into t (id,a) values (742,23);
+insert into t (id,a) values (742,24);
+insert into t (id,a) values (742,25);
+insert into t (id,a) values (742,26);
+insert into t (id,a) values (742,27);
+insert into t (id,a) values (742,28);
+insert into t (id,a) values (742,29);
+insert into t (id,a) values (742,30);
+insert into t (id,a) values (742,31);
+insert into t (id,a) values (742,32);
+insert into t (id,a) values (742,33);
+insert into t (id,a) values (742,34);
+insert into t (id,a) values (742,35);
+insert into t (id,a) values (742,36);
+insert into t (id,a) values (742,37);
+insert into t (id,a) values (742,38);
+insert into t (id,a) values (742,39);
+insert into t (id,a) values (742,40);
+insert into t (id,a) values (742,41);
+insert into t (id,a) values (742,42);
+insert into t (id,a) values (742,43);
+insert into t (id,a) values (742,44);
+insert into t (id,a) values (742,45);
+insert into t (id,a) values (742,46);
+insert into t (id,a) values (742,47);
+insert into t (id,a) values (742,48);
+insert into t (id,a) values (742,49);
+insert into t (id,a) values (742,50);
+insert into t (id,a) values (742,51);
+insert into t (id,a) values (742,52);
+insert into t (id,a) values (742,53);
+insert into t (id,a) values (742,54);
+insert into t (id,a) values (742,55);
+insert into t (id,a) values (742,56);
+insert into t (id,a) values (742,57);
+insert into t (id,a) values (742,58);
+insert into t (id,a) values (742,59);
+insert into t (id,a) values (742,60);
+insert into t (id,a) values (742,61);
+insert into t (id,a) values (742,62);
+insert into t (id,a) values (742,63);
+insert into t (id,a) values (742,64);
+insert into t (id,a) values (742,65);
+insert into t (id,a) values (742,66);
+insert into t (id,a) values (742,67);
+insert into t (id,a) values (742,68);
+insert into t (id,a) values (742,69);
+insert into t (id,a) values (742,70);
+insert into t (id,a) values (742,71);
+insert into t (id,a) values (742,72);
+insert into t (id,a) values (742,73);
+insert into t (id,a) values (742,74);
+insert into t (id,a) values (742,75);
+insert into t (id,a) values (742,76);
+insert into t (id,a) values (742,77);
+insert into t (id,a) values (742,78);
+insert into t (id,a) values (742,79);
+insert into t (id,a) values (742,80);
+insert into t (id,a) values (742,81);
+insert into t (id,a) values (742,82);
+insert into t (id,a) values (742,83);
+insert into t (id,a) values (742,84);
+insert into t (id,a) values (742,85);
+insert into t (id,a) values (742,86);
+insert into t (id,a) values (742,87);
+insert into t (id,a) values (742,88);
+insert into t (id,a) values (742,89);
+insert into t (id,a) values (742,90);
+insert into t (id,a) values (742,91);
+insert into t (id,a) values (742,92);
+insert into t (id,a) values (742,93);
+insert into t (id,a) values (742,94);
+insert into t (id,a) values (742,95);
+insert into t (id,a) values (742,96);
+insert into t (id,a) values (742,97);
+insert into t (id,a) values (742,98);
+insert into t (id,a) values (742,99);
+insert into t (id,a) values (743,0);
+insert into t (id,a) values (743,1);
+insert into t (id,a) values (743,2);
+insert into t (id,a) values (743,3);
+insert into t (id,a) values (743,4);
+insert into t (id,a) values (743,5);
+insert into t (id,a) values (743,6);
+insert into t (id,a) values (743,7);
+insert into t (id,a) values (743,8);
+insert into t (id,a) values (743,9);
+insert into t (id,a) values (743,10);
+insert into t (id,a) values (743,11);
+insert into t (id,a) values (743,12);
+insert into t (id,a) values (743,13);
+insert into t (id,a) values (743,14);
+insert into t (id,a) values (743,15);
+insert into t (id,a) values (743,16);
+insert into t (id,a) values (743,17);
+insert into t (id,a) values (743,18);
+insert into t (id,a) values (743,19);
+insert into t (id,a) values (743,20);
+insert into t (id,a) values (743,21);
+insert into t (id,a) values (743,22);
+insert into t (id,a) values (743,23);
+insert into t (id,a) values (743,24);
+insert into t (id,a) values (743,25);
+insert into t (id,a) values (743,26);
+insert into t (id,a) values (743,27);
+insert into t (id,a) values (743,28);
+insert into t (id,a) values (743,29);
+insert into t (id,a) values (743,30);
+insert into t (id,a) values (743,31);
+insert into t (id,a) values (743,32);
+insert into t (id,a) values (743,33);
+insert into t (id,a) values (743,34);
+insert into t (id,a) values (743,35);
+insert into t (id,a) values (743,36);
+insert into t (id,a) values (743,37);
+insert into t (id,a) values (743,38);
+insert into t (id,a) values (743,39);
+insert into t (id,a) values (743,40);
+insert into t (id,a) values (743,41);
+insert into t (id,a) values (743,42);
+insert into t (id,a) values (743,43);
+insert into t (id,a) values (743,44);
+insert into t (id,a) values (743,45);
+insert into t (id,a) values (743,46);
+insert into t (id,a) values (743,47);
+insert into t (id,a) values (743,48);
+insert into t (id,a) values (743,49);
+insert into t (id,a) values (743,50);
+insert into t (id,a) values (743,51);
+insert into t (id,a) values (743,52);
+insert into t (id,a) values (743,53);
+insert into t (id,a) values (743,54);
+insert into t (id,a) values (743,55);
+insert into t (id,a) values (743,56);
+insert into t (id,a) values (743,57);
+insert into t (id,a) values (743,58);
+insert into t (id,a) values (743,59);
+insert into t (id,a) values (743,60);
+insert into t (id,a) values (743,61);
+insert into t (id,a) values (743,62);
+insert into t (id,a) values (743,63);
+insert into t (id,a) values (743,64);
+insert into t (id,a) values (743,65);
+insert into t (id,a) values (743,66);
+insert into t (id,a) values (743,67);
+insert into t (id,a) values (743,68);
+insert into t (id,a) values (743,69);
+insert into t (id,a) values (743,70);
+insert into t (id,a) values (743,71);
+insert into t (id,a) values (743,72);
+insert into t (id,a) values (743,73);
+insert into t (id,a) values (743,74);
+insert into t (id,a) values (743,75);
+insert into t (id,a) values (743,76);
+insert into t (id,a) values (743,77);
+insert into t (id,a) values (743,78);
+insert into t (id,a) values (743,79);
+insert into t (id,a) values (743,80);
+insert into t (id,a) values (743,81);
+insert into t (id,a) values (743,82);
+insert into t (id,a) values (743,83);
+insert into t (id,a) values (743,84);
+insert into t (id,a) values (743,85);
+insert into t (id,a) values (743,86);
+insert into t (id,a) values (743,87);
+insert into t (id,a) values (743,88);
+insert into t (id,a) values (743,89);
+insert into t (id,a) values (743,90);
+insert into t (id,a) values (743,91);
+insert into t (id,a) values (743,92);
+insert into t (id,a) values (743,93);
+insert into t (id,a) values (743,94);
+insert into t (id,a) values (743,95);
+insert into t (id,a) values (743,96);
+insert into t (id,a) values (743,97);
+insert into t (id,a) values (743,98);
+insert into t (id,a) values (743,99);
+insert into t (id,a) values (744,0);
+insert into t (id,a) values (744,1);
+insert into t (id,a) values (744,2);
+insert into t (id,a) values (744,3);
+insert into t (id,a) values (744,4);
+insert into t (id,a) values (744,5);
+insert into t (id,a) values (744,6);
+insert into t (id,a) values (744,7);
+insert into t (id,a) values (744,8);
+insert into t (id,a) values (744,9);
+insert into t (id,a) values (744,10);
+insert into t (id,a) values (744,11);
+insert into t (id,a) values (744,12);
+insert into t (id,a) values (744,13);
+insert into t (id,a) values (744,14);
+insert into t (id,a) values (744,15);
+insert into t (id,a) values (744,16);
+insert into t (id,a) values (744,17);
+insert into t (id,a) values (744,18);
+insert into t (id,a) values (744,19);
+insert into t (id,a) values (744,20);
+insert into t (id,a) values (744,21);
+insert into t (id,a) values (744,22);
+insert into t (id,a) values (744,23);
+insert into t (id,a) values (744,24);
+insert into t (id,a) values (744,25);
+insert into t (id,a) values (744,26);
+insert into t (id,a) values (744,27);
+insert into t (id,a) values (744,28);
+insert into t (id,a) values (744,29);
+insert into t (id,a) values (744,30);
+insert into t (id,a) values (744,31);
+insert into t (id,a) values (744,32);
+insert into t (id,a) values (744,33);
+insert into t (id,a) values (744,34);
+insert into t (id,a) values (744,35);
+insert into t (id,a) values (744,36);
+insert into t (id,a) values (744,37);
+insert into t (id,a) values (744,38);
+insert into t (id,a) values (744,39);
+insert into t (id,a) values (744,40);
+insert into t (id,a) values (744,41);
+insert into t (id,a) values (744,42);
+insert into t (id,a) values (744,43);
+insert into t (id,a) values (744,44);
+insert into t (id,a) values (744,45);
+insert into t (id,a) values (744,46);
+insert into t (id,a) values (744,47);
+insert into t (id,a) values (744,48);
+insert into t (id,a) values (744,49);
+insert into t (id,a) values (744,50);
+insert into t (id,a) values (744,51);
+insert into t (id,a) values (744,52);
+insert into t (id,a) values (744,53);
+insert into t (id,a) values (744,54);
+insert into t (id,a) values (744,55);
+insert into t (id,a) values (744,56);
+insert into t (id,a) values (744,57);
+insert into t (id,a) values (744,58);
+insert into t (id,a) values (744,59);
+insert into t (id,a) values (744,60);
+insert into t (id,a) values (744,61);
+insert into t (id,a) values (744,62);
+insert into t (id,a) values (744,63);
+insert into t (id,a) values (744,64);
+insert into t (id,a) values (744,65);
+insert into t (id,a) values (744,66);
+insert into t (id,a) values (744,67);
+insert into t (id,a) values (744,68);
+insert into t (id,a) values (744,69);
+insert into t (id,a) values (744,70);
+insert into t (id,a) values (744,71);
+insert into t (id,a) values (744,72);
+insert into t (id,a) values (744,73);
+insert into t (id,a) values (744,74);
+insert into t (id,a) values (744,75);
+insert into t (id,a) values (744,76);
+insert into t (id,a) values (744,77);
+insert into t (id,a) values (744,78);
+insert into t (id,a) values (744,79);
+insert into t (id,a) values (744,80);
+insert into t (id,a) values (744,81);
+insert into t (id,a) values (744,82);
+insert into t (id,a) values (744,83);
+insert into t (id,a) values (744,84);
+insert into t (id,a) values (744,85);
+insert into t (id,a) values (744,86);
+insert into t (id,a) values (744,87);
+insert into t (id,a) values (744,88);
+insert into t (id,a) values (744,89);
+insert into t (id,a) values (744,90);
+insert into t (id,a) values (744,91);
+insert into t (id,a) values (744,92);
+insert into t (id,a) values (744,93);
+insert into t (id,a) values (744,94);
+insert into t (id,a) values (744,95);
+insert into t (id,a) values (744,96);
+insert into t (id,a) values (744,97);
+insert into t (id,a) values (744,98);
+insert into t (id,a) values (744,99);
+insert into t (id,a) values (745,0);
+insert into t (id,a) values (745,1);
+insert into t (id,a) values (745,2);
+insert into t (id,a) values (745,3);
+insert into t (id,a) values (745,4);
+insert into t (id,a) values (745,5);
+insert into t (id,a) values (745,6);
+insert into t (id,a) values (745,7);
+insert into t (id,a) values (745,8);
+insert into t (id,a) values (745,9);
+insert into t (id,a) values (745,10);
+insert into t (id,a) values (745,11);
+insert into t (id,a) values (745,12);
+insert into t (id,a) values (745,13);
+insert into t (id,a) values (745,14);
+insert into t (id,a) values (745,15);
+insert into t (id,a) values (745,16);
+insert into t (id,a) values (745,17);
+insert into t (id,a) values (745,18);
+insert into t (id,a) values (745,19);
+insert into t (id,a) values (745,20);
+insert into t (id,a) values (745,21);
+insert into t (id,a) values (745,22);
+insert into t (id,a) values (745,23);
+insert into t (id,a) values (745,24);
+insert into t (id,a) values (745,25);
+insert into t (id,a) values (745,26);
+insert into t (id,a) values (745,27);
+insert into t (id,a) values (745,28);
+insert into t (id,a) values (745,29);
+insert into t (id,a) values (745,30);
+insert into t (id,a) values (745,31);
+insert into t (id,a) values (745,32);
+insert into t (id,a) values (745,33);
+insert into t (id,a) values (745,34);
+insert into t (id,a) values (745,35);
+insert into t (id,a) values (745,36);
+insert into t (id,a) values (745,37);
+insert into t (id,a) values (745,38);
+insert into t (id,a) values (745,39);
+insert into t (id,a) values (745,40);
+insert into t (id,a) values (745,41);
+insert into t (id,a) values (745,42);
+insert into t (id,a) values (745,43);
+insert into t (id,a) values (745,44);
+insert into t (id,a) values (745,45);
+insert into t (id,a) values (745,46);
+insert into t (id,a) values (745,47);
+insert into t (id,a) values (745,48);
+insert into t (id,a) values (745,49);
+insert into t (id,a) values (745,50);
+insert into t (id,a) values (745,51);
+insert into t (id,a) values (745,52);
+insert into t (id,a) values (745,53);
+insert into t (id,a) values (745,54);
+insert into t (id,a) values (745,55);
+insert into t (id,a) values (745,56);
+insert into t (id,a) values (745,57);
+insert into t (id,a) values (745,58);
+insert into t (id,a) values (745,59);
+insert into t (id,a) values (745,60);
+insert into t (id,a) values (745,61);
+insert into t (id,a) values (745,62);
+insert into t (id,a) values (745,63);
+insert into t (id,a) values (745,64);
+insert into t (id,a) values (745,65);
+insert into t (id,a) values (745,66);
+insert into t (id,a) values (745,67);
+insert into t (id,a) values (745,68);
+insert into t (id,a) values (745,69);
+insert into t (id,a) values (745,70);
+insert into t (id,a) values (745,71);
+insert into t (id,a) values (745,72);
+insert into t (id,a) values (745,73);
+insert into t (id,a) values (745,74);
+insert into t (id,a) values (745,75);
+insert into t (id,a) values (745,76);
+insert into t (id,a) values (745,77);
+insert into t (id,a) values (745,78);
+insert into t (id,a) values (745,79);
+insert into t (id,a) values (745,80);
+insert into t (id,a) values (745,81);
+insert into t (id,a) values (745,82);
+insert into t (id,a) values (745,83);
+insert into t (id,a) values (745,84);
+insert into t (id,a) values (745,85);
+insert into t (id,a) values (745,86);
+insert into t (id,a) values (745,87);
+insert into t (id,a) values (745,88);
+insert into t (id,a) values (745,89);
+insert into t (id,a) values (745,90);
+insert into t (id,a) values (745,91);
+insert into t (id,a) values (745,92);
+insert into t (id,a) values (745,93);
+insert into t (id,a) values (745,94);
+insert into t (id,a) values (745,95);
+insert into t (id,a) values (745,96);
+insert into t (id,a) values (745,97);
+insert into t (id,a) values (745,98);
+insert into t (id,a) values (745,99);
+insert into t (id,a) values (746,0);
+insert into t (id,a) values (746,1);
+insert into t (id,a) values (746,2);
+insert into t (id,a) values (746,3);
+insert into t (id,a) values (746,4);
+insert into t (id,a) values (746,5);
+insert into t (id,a) values (746,6);
+insert into t (id,a) values (746,7);
+insert into t (id,a) values (746,8);
+insert into t (id,a) values (746,9);
+insert into t (id,a) values (746,10);
+insert into t (id,a) values (746,11);
+insert into t (id,a) values (746,12);
+insert into t (id,a) values (746,13);
+insert into t (id,a) values (746,14);
+insert into t (id,a) values (746,15);
+insert into t (id,a) values (746,16);
+insert into t (id,a) values (746,17);
+insert into t (id,a) values (746,18);
+insert into t (id,a) values (746,19);
+insert into t (id,a) values (746,20);
+insert into t (id,a) values (746,21);
+insert into t (id,a) values (746,22);
+insert into t (id,a) values (746,23);
+insert into t (id,a) values (746,24);
+insert into t (id,a) values (746,25);
+insert into t (id,a) values (746,26);
+insert into t (id,a) values (746,27);
+insert into t (id,a) values (746,28);
+insert into t (id,a) values (746,29);
+insert into t (id,a) values (746,30);
+insert into t (id,a) values (746,31);
+insert into t (id,a) values (746,32);
+insert into t (id,a) values (746,33);
+insert into t (id,a) values (746,34);
+insert into t (id,a) values (746,35);
+insert into t (id,a) values (746,36);
+insert into t (id,a) values (746,37);
+insert into t (id,a) values (746,38);
+insert into t (id,a) values (746,39);
+insert into t (id,a) values (746,40);
+insert into t (id,a) values (746,41);
+insert into t (id,a) values (746,42);
+insert into t (id,a) values (746,43);
+insert into t (id,a) values (746,44);
+insert into t (id,a) values (746,45);
+insert into t (id,a) values (746,46);
+insert into t (id,a) values (746,47);
+insert into t (id,a) values (746,48);
+insert into t (id,a) values (746,49);
+insert into t (id,a) values (746,50);
+insert into t (id,a) values (746,51);
+insert into t (id,a) values (746,52);
+insert into t (id,a) values (746,53);
+insert into t (id,a) values (746,54);
+insert into t (id,a) values (746,55);
+insert into t (id,a) values (746,56);
+insert into t (id,a) values (746,57);
+insert into t (id,a) values (746,58);
+insert into t (id,a) values (746,59);
+insert into t (id,a) values (746,60);
+insert into t (id,a) values (746,61);
+insert into t (id,a) values (746,62);
+insert into t (id,a) values (746,63);
+insert into t (id,a) values (746,64);
+insert into t (id,a) values (746,65);
+insert into t (id,a) values (746,66);
+insert into t (id,a) values (746,67);
+insert into t (id,a) values (746,68);
+insert into t (id,a) values (746,69);
+insert into t (id,a) values (746,70);
+insert into t (id,a) values (746,71);
+insert into t (id,a) values (746,72);
+insert into t (id,a) values (746,73);
+insert into t (id,a) values (746,74);
+insert into t (id,a) values (746,75);
+insert into t (id,a) values (746,76);
+insert into t (id,a) values (746,77);
+insert into t (id,a) values (746,78);
+insert into t (id,a) values (746,79);
+insert into t (id,a) values (746,80);
+insert into t (id,a) values (746,81);
+insert into t (id,a) values (746,82);
+insert into t (id,a) values (746,83);
+insert into t (id,a) values (746,84);
+insert into t (id,a) values (746,85);
+insert into t (id,a) values (746,86);
+insert into t (id,a) values (746,87);
+insert into t (id,a) values (746,88);
+insert into t (id,a) values (746,89);
+insert into t (id,a) values (746,90);
+insert into t (id,a) values (746,91);
+insert into t (id,a) values (746,92);
+insert into t (id,a) values (746,93);
+insert into t (id,a) values (746,94);
+insert into t (id,a) values (746,95);
+insert into t (id,a) values (746,96);
+insert into t (id,a) values (746,97);
+insert into t (id,a) values (746,98);
+insert into t (id,a) values (746,99);
+insert into t (id,a) values (747,0);
+insert into t (id,a) values (747,1);
+insert into t (id,a) values (747,2);
+insert into t (id,a) values (747,3);
+insert into t (id,a) values (747,4);
+insert into t (id,a) values (747,5);
+insert into t (id,a) values (747,6);
+insert into t (id,a) values (747,7);
+insert into t (id,a) values (747,8);
+insert into t (id,a) values (747,9);
+insert into t (id,a) values (747,10);
+insert into t (id,a) values (747,11);
+insert into t (id,a) values (747,12);
+insert into t (id,a) values (747,13);
+insert into t (id,a) values (747,14);
+insert into t (id,a) values (747,15);
+insert into t (id,a) values (747,16);
+insert into t (id,a) values (747,17);
+insert into t (id,a) values (747,18);
+insert into t (id,a) values (747,19);
+insert into t (id,a) values (747,20);
+insert into t (id,a) values (747,21);
+insert into t (id,a) values (747,22);
+insert into t (id,a) values (747,23);
+insert into t (id,a) values (747,24);
+insert into t (id,a) values (747,25);
+insert into t (id,a) values (747,26);
+insert into t (id,a) values (747,27);
+insert into t (id,a) values (747,28);
+insert into t (id,a) values (747,29);
+insert into t (id,a) values (747,30);
+insert into t (id,a) values (747,31);
+insert into t (id,a) values (747,32);
+insert into t (id,a) values (747,33);
+insert into t (id,a) values (747,34);
+insert into t (id,a) values (747,35);
+insert into t (id,a) values (747,36);
+insert into t (id,a) values (747,37);
+insert into t (id,a) values (747,38);
+insert into t (id,a) values (747,39);
+insert into t (id,a) values (747,40);
+insert into t (id,a) values (747,41);
+insert into t (id,a) values (747,42);
+insert into t (id,a) values (747,43);
+insert into t (id,a) values (747,44);
+insert into t (id,a) values (747,45);
+insert into t (id,a) values (747,46);
+insert into t (id,a) values (747,47);
+insert into t (id,a) values (747,48);
+insert into t (id,a) values (747,49);
+insert into t (id,a) values (747,50);
+insert into t (id,a) values (747,51);
+insert into t (id,a) values (747,52);
+insert into t (id,a) values (747,53);
+insert into t (id,a) values (747,54);
+insert into t (id,a) values (747,55);
+insert into t (id,a) values (747,56);
+insert into t (id,a) values (747,57);
+insert into t (id,a) values (747,58);
+insert into t (id,a) values (747,59);
+insert into t (id,a) values (747,60);
+insert into t (id,a) values (747,61);
+insert into t (id,a) values (747,62);
+insert into t (id,a) values (747,63);
+insert into t (id,a) values (747,64);
+insert into t (id,a) values (747,65);
+insert into t (id,a) values (747,66);
+insert into t (id,a) values (747,67);
+insert into t (id,a) values (747,68);
+insert into t (id,a) values (747,69);
+insert into t (id,a) values (747,70);
+insert into t (id,a) values (747,71);
+insert into t (id,a) values (747,72);
+insert into t (id,a) values (747,73);
+insert into t (id,a) values (747,74);
+insert into t (id,a) values (747,75);
+insert into t (id,a) values (747,76);
+insert into t (id,a) values (747,77);
+insert into t (id,a) values (747,78);
+insert into t (id,a) values (747,79);
+insert into t (id,a) values (747,80);
+insert into t (id,a) values (747,81);
+insert into t (id,a) values (747,82);
+insert into t (id,a) values (747,83);
+insert into t (id,a) values (747,84);
+insert into t (id,a) values (747,85);
+insert into t (id,a) values (747,86);
+insert into t (id,a) values (747,87);
+insert into t (id,a) values (747,88);
+insert into t (id,a) values (747,89);
+insert into t (id,a) values (747,90);
+insert into t (id,a) values (747,91);
+insert into t (id,a) values (747,92);
+insert into t (id,a) values (747,93);
+insert into t (id,a) values (747,94);
+insert into t (id,a) values (747,95);
+insert into t (id,a) values (747,96);
+insert into t (id,a) values (747,97);
+insert into t (id,a) values (747,98);
+insert into t (id,a) values (747,99);
+insert into t (id,a) values (748,0);
+insert into t (id,a) values (748,1);
+insert into t (id,a) values (748,2);
+insert into t (id,a) values (748,3);
+insert into t (id,a) values (748,4);
+insert into t (id,a) values (748,5);
+insert into t (id,a) values (748,6);
+insert into t (id,a) values (748,7);
+insert into t (id,a) values (748,8);
+insert into t (id,a) values (748,9);
+insert into t (id,a) values (748,10);
+insert into t (id,a) values (748,11);
+insert into t (id,a) values (748,12);
+insert into t (id,a) values (748,13);
+insert into t (id,a) values (748,14);
+insert into t (id,a) values (748,15);
+insert into t (id,a) values (748,16);
+insert into t (id,a) values (748,17);
+insert into t (id,a) values (748,18);
+insert into t (id,a) values (748,19);
+insert into t (id,a) values (748,20);
+insert into t (id,a) values (748,21);
+insert into t (id,a) values (748,22);
+insert into t (id,a) values (748,23);
+insert into t (id,a) values (748,24);
+insert into t (id,a) values (748,25);
+insert into t (id,a) values (748,26);
+insert into t (id,a) values (748,27);
+insert into t (id,a) values (748,28);
+insert into t (id,a) values (748,29);
+insert into t (id,a) values (748,30);
+insert into t (id,a) values (748,31);
+insert into t (id,a) values (748,32);
+insert into t (id,a) values (748,33);
+insert into t (id,a) values (748,34);
+insert into t (id,a) values (748,35);
+insert into t (id,a) values (748,36);
+insert into t (id,a) values (748,37);
+insert into t (id,a) values (748,38);
+insert into t (id,a) values (748,39);
+insert into t (id,a) values (748,40);
+insert into t (id,a) values (748,41);
+insert into t (id,a) values (748,42);
+insert into t (id,a) values (748,43);
+insert into t (id,a) values (748,44);
+insert into t (id,a) values (748,45);
+insert into t (id,a) values (748,46);
+insert into t (id,a) values (748,47);
+insert into t (id,a) values (748,48);
+insert into t (id,a) values (748,49);
+insert into t (id,a) values (748,50);
+insert into t (id,a) values (748,51);
+insert into t (id,a) values (748,52);
+insert into t (id,a) values (748,53);
+insert into t (id,a) values (748,54);
+insert into t (id,a) values (748,55);
+insert into t (id,a) values (748,56);
+insert into t (id,a) values (748,57);
+insert into t (id,a) values (748,58);
+insert into t (id,a) values (748,59);
+insert into t (id,a) values (748,60);
+insert into t (id,a) values (748,61);
+insert into t (id,a) values (748,62);
+insert into t (id,a) values (748,63);
+insert into t (id,a) values (748,64);
+insert into t (id,a) values (748,65);
+insert into t (id,a) values (748,66);
+insert into t (id,a) values (748,67);
+insert into t (id,a) values (748,68);
+insert into t (id,a) values (748,69);
+insert into t (id,a) values (748,70);
+insert into t (id,a) values (748,71);
+insert into t (id,a) values (748,72);
+insert into t (id,a) values (748,73);
+insert into t (id,a) values (748,74);
+insert into t (id,a) values (748,75);
+insert into t (id,a) values (748,76);
+insert into t (id,a) values (748,77);
+insert into t (id,a) values (748,78);
+insert into t (id,a) values (748,79);
+insert into t (id,a) values (748,80);
+insert into t (id,a) values (748,81);
+insert into t (id,a) values (748,82);
+insert into t (id,a) values (748,83);
+insert into t (id,a) values (748,84);
+insert into t (id,a) values (748,85);
+insert into t (id,a) values (748,86);
+insert into t (id,a) values (748,87);
+insert into t (id,a) values (748,88);
+insert into t (id,a) values (748,89);
+insert into t (id,a) values (748,90);
+insert into t (id,a) values (748,91);
+insert into t (id,a) values (748,92);
+insert into t (id,a) values (748,93);
+insert into t (id,a) values (748,94);
+insert into t (id,a) values (748,95);
+insert into t (id,a) values (748,96);
+insert into t (id,a) values (748,97);
+insert into t (id,a) values (748,98);
+insert into t (id,a) values (748,99);
+insert into t (id,a) values (749,0);
+insert into t (id,a) values (749,1);
+insert into t (id,a) values (749,2);
+insert into t (id,a) values (749,3);
+insert into t (id,a) values (749,4);
+insert into t (id,a) values (749,5);
+insert into t (id,a) values (749,6);
+insert into t (id,a) values (749,7);
+insert into t (id,a) values (749,8);
+insert into t (id,a) values (749,9);
+insert into t (id,a) values (749,10);
+insert into t (id,a) values (749,11);
+insert into t (id,a) values (749,12);
+insert into t (id,a) values (749,13);
+insert into t (id,a) values (749,14);
+insert into t (id,a) values (749,15);
+insert into t (id,a) values (749,16);
+insert into t (id,a) values (749,17);
+insert into t (id,a) values (749,18);
+insert into t (id,a) values (749,19);
+insert into t (id,a) values (749,20);
+insert into t (id,a) values (749,21);
+insert into t (id,a) values (749,22);
+insert into t (id,a) values (749,23);
+insert into t (id,a) values (749,24);
+insert into t (id,a) values (749,25);
+insert into t (id,a) values (749,26);
+insert into t (id,a) values (749,27);
+insert into t (id,a) values (749,28);
+insert into t (id,a) values (749,29);
+insert into t (id,a) values (749,30);
+insert into t (id,a) values (749,31);
+insert into t (id,a) values (749,32);
+insert into t (id,a) values (749,33);
+insert into t (id,a) values (749,34);
+insert into t (id,a) values (749,35);
+insert into t (id,a) values (749,36);
+insert into t (id,a) values (749,37);
+insert into t (id,a) values (749,38);
+insert into t (id,a) values (749,39);
+insert into t (id,a) values (749,40);
+insert into t (id,a) values (749,41);
+insert into t (id,a) values (749,42);
+insert into t (id,a) values (749,43);
+insert into t (id,a) values (749,44);
+insert into t (id,a) values (749,45);
+insert into t (id,a) values (749,46);
+insert into t (id,a) values (749,47);
+insert into t (id,a) values (749,48);
+insert into t (id,a) values (749,49);
+insert into t (id,a) values (749,50);
+insert into t (id,a) values (749,51);
+insert into t (id,a) values (749,52);
+insert into t (id,a) values (749,53);
+insert into t (id,a) values (749,54);
+insert into t (id,a) values (749,55);
+insert into t (id,a) values (749,56);
+insert into t (id,a) values (749,57);
+insert into t (id,a) values (749,58);
+insert into t (id,a) values (749,59);
+insert into t (id,a) values (749,60);
+insert into t (id,a) values (749,61);
+insert into t (id,a) values (749,62);
+insert into t (id,a) values (749,63);
+insert into t (id,a) values (749,64);
+insert into t (id,a) values (749,65);
+insert into t (id,a) values (749,66);
+insert into t (id,a) values (749,67);
+insert into t (id,a) values (749,68);
+insert into t (id,a) values (749,69);
+insert into t (id,a) values (749,70);
+insert into t (id,a) values (749,71);
+insert into t (id,a) values (749,72);
+insert into t (id,a) values (749,73);
+insert into t (id,a) values (749,74);
+insert into t (id,a) values (749,75);
+insert into t (id,a) values (749,76);
+insert into t (id,a) values (749,77);
+insert into t (id,a) values (749,78);
+insert into t (id,a) values (749,79);
+insert into t (id,a) values (749,80);
+insert into t (id,a) values (749,81);
+insert into t (id,a) values (749,82);
+insert into t (id,a) values (749,83);
+insert into t (id,a) values (749,84);
+insert into t (id,a) values (749,85);
+insert into t (id,a) values (749,86);
+insert into t (id,a) values (749,87);
+insert into t (id,a) values (749,88);
+insert into t (id,a) values (749,89);
+insert into t (id,a) values (749,90);
+insert into t (id,a) values (749,91);
+insert into t (id,a) values (749,92);
+insert into t (id,a) values (749,93);
+insert into t (id,a) values (749,94);
+insert into t (id,a) values (749,95);
+insert into t (id,a) values (749,96);
+insert into t (id,a) values (749,97);
+insert into t (id,a) values (749,98);
+insert into t (id,a) values (749,99);
+insert into t (id,a) values (750,0);
+insert into t (id,a) values (750,1);
+insert into t (id,a) values (750,2);
+insert into t (id,a) values (750,3);
+insert into t (id,a) values (750,4);
+insert into t (id,a) values (750,5);
+insert into t (id,a) values (750,6);
+insert into t (id,a) values (750,7);
+insert into t (id,a) values (750,8);
+insert into t (id,a) values (750,9);
+insert into t (id,a) values (750,10);
+insert into t (id,a) values (750,11);
+insert into t (id,a) values (750,12);
+insert into t (id,a) values (750,13);
+insert into t (id,a) values (750,14);
+insert into t (id,a) values (750,15);
+insert into t (id,a) values (750,16);
+insert into t (id,a) values (750,17);
+insert into t (id,a) values (750,18);
+insert into t (id,a) values (750,19);
+insert into t (id,a) values (750,20);
+insert into t (id,a) values (750,21);
+insert into t (id,a) values (750,22);
+insert into t (id,a) values (750,23);
+insert into t (id,a) values (750,24);
+insert into t (id,a) values (750,25);
+insert into t (id,a) values (750,26);
+insert into t (id,a) values (750,27);
+insert into t (id,a) values (750,28);
+insert into t (id,a) values (750,29);
+insert into t (id,a) values (750,30);
+insert into t (id,a) values (750,31);
+insert into t (id,a) values (750,32);
+insert into t (id,a) values (750,33);
+insert into t (id,a) values (750,34);
+insert into t (id,a) values (750,35);
+insert into t (id,a) values (750,36);
+insert into t (id,a) values (750,37);
+insert into t (id,a) values (750,38);
+insert into t (id,a) values (750,39);
+insert into t (id,a) values (750,40);
+insert into t (id,a) values (750,41);
+insert into t (id,a) values (750,42);
+insert into t (id,a) values (750,43);
+insert into t (id,a) values (750,44);
+insert into t (id,a) values (750,45);
+insert into t (id,a) values (750,46);
+insert into t (id,a) values (750,47);
+insert into t (id,a) values (750,48);
+insert into t (id,a) values (750,49);
+insert into t (id,a) values (750,50);
+insert into t (id,a) values (750,51);
+insert into t (id,a) values (750,52);
+insert into t (id,a) values (750,53);
+insert into t (id,a) values (750,54);
+insert into t (id,a) values (750,55);
+insert into t (id,a) values (750,56);
+insert into t (id,a) values (750,57);
+insert into t (id,a) values (750,58);
+insert into t (id,a) values (750,59);
+insert into t (id,a) values (750,60);
+insert into t (id,a) values (750,61);
+insert into t (id,a) values (750,62);
+insert into t (id,a) values (750,63);
+insert into t (id,a) values (750,64);
+insert into t (id,a) values (750,65);
+insert into t (id,a) values (750,66);
+insert into t (id,a) values (750,67);
+insert into t (id,a) values (750,68);
+insert into t (id,a) values (750,69);
+insert into t (id,a) values (750,70);
+insert into t (id,a) values (750,71);
+insert into t (id,a) values (750,72);
+insert into t (id,a) values (750,73);
+insert into t (id,a) values (750,74);
+insert into t (id,a) values (750,75);
+insert into t (id,a) values (750,76);
+insert into t (id,a) values (750,77);
+insert into t (id,a) values (750,78);
+insert into t (id,a) values (750,79);
+insert into t (id,a) values (750,80);
+insert into t (id,a) values (750,81);
+insert into t (id,a) values (750,82);
+insert into t (id,a) values (750,83);
+insert into t (id,a) values (750,84);
+insert into t (id,a) values (750,85);
+insert into t (id,a) values (750,86);
+insert into t (id,a) values (750,87);
+insert into t (id,a) values (750,88);
+insert into t (id,a) values (750,89);
+insert into t (id,a) values (750,90);
+insert into t (id,a) values (750,91);
+insert into t (id,a) values (750,92);
+insert into t (id,a) values (750,93);
+insert into t (id,a) values (750,94);
+insert into t (id,a) values (750,95);
+insert into t (id,a) values (750,96);
+insert into t (id,a) values (750,97);
+insert into t (id,a) values (750,98);
+insert into t (id,a) values (750,99);
+insert into t (id,a) values (751,0);
+insert into t (id,a) values (751,1);
+insert into t (id,a) values (751,2);
+insert into t (id,a) values (751,3);
+insert into t (id,a) values (751,4);
+insert into t (id,a) values (751,5);
+insert into t (id,a) values (751,6);
+insert into t (id,a) values (751,7);
+insert into t (id,a) values (751,8);
+insert into t (id,a) values (751,9);
+insert into t (id,a) values (751,10);
+insert into t (id,a) values (751,11);
+insert into t (id,a) values (751,12);
+insert into t (id,a) values (751,13);
+insert into t (id,a) values (751,14);
+insert into t (id,a) values (751,15);
+insert into t (id,a) values (751,16);
+insert into t (id,a) values (751,17);
+insert into t (id,a) values (751,18);
+insert into t (id,a) values (751,19);
+insert into t (id,a) values (751,20);
+insert into t (id,a) values (751,21);
+insert into t (id,a) values (751,22);
+insert into t (id,a) values (751,23);
+insert into t (id,a) values (751,24);
+insert into t (id,a) values (751,25);
+insert into t (id,a) values (751,26);
+insert into t (id,a) values (751,27);
+insert into t (id,a) values (751,28);
+insert into t (id,a) values (751,29);
+insert into t (id,a) values (751,30);
+insert into t (id,a) values (751,31);
+insert into t (id,a) values (751,32);
+insert into t (id,a) values (751,33);
+insert into t (id,a) values (751,34);
+insert into t (id,a) values (751,35);
+insert into t (id,a) values (751,36);
+insert into t (id,a) values (751,37);
+insert into t (id,a) values (751,38);
+insert into t (id,a) values (751,39);
+insert into t (id,a) values (751,40);
+insert into t (id,a) values (751,41);
+insert into t (id,a) values (751,42);
+insert into t (id,a) values (751,43);
+insert into t (id,a) values (751,44);
+insert into t (id,a) values (751,45);
+insert into t (id,a) values (751,46);
+insert into t (id,a) values (751,47);
+insert into t (id,a) values (751,48);
+insert into t (id,a) values (751,49);
+insert into t (id,a) values (751,50);
+insert into t (id,a) values (751,51);
+insert into t (id,a) values (751,52);
+insert into t (id,a) values (751,53);
+insert into t (id,a) values (751,54);
+insert into t (id,a) values (751,55);
+insert into t (id,a) values (751,56);
+insert into t (id,a) values (751,57);
+insert into t (id,a) values (751,58);
+insert into t (id,a) values (751,59);
+insert into t (id,a) values (751,60);
+insert into t (id,a) values (751,61);
+insert into t (id,a) values (751,62);
+insert into t (id,a) values (751,63);
+insert into t (id,a) values (751,64);
+insert into t (id,a) values (751,65);
+insert into t (id,a) values (751,66);
+insert into t (id,a) values (751,67);
+insert into t (id,a) values (751,68);
+insert into t (id,a) values (751,69);
+insert into t (id,a) values (751,70);
+insert into t (id,a) values (751,71);
+insert into t (id,a) values (751,72);
+insert into t (id,a) values (751,73);
+insert into t (id,a) values (751,74);
+insert into t (id,a) values (751,75);
+insert into t (id,a) values (751,76);
+insert into t (id,a) values (751,77);
+insert into t (id,a) values (751,78);
+insert into t (id,a) values (751,79);
+insert into t (id,a) values (751,80);
+insert into t (id,a) values (751,81);
+insert into t (id,a) values (751,82);
+insert into t (id,a) values (751,83);
+insert into t (id,a) values (751,84);
+insert into t (id,a) values (751,85);
+insert into t (id,a) values (751,86);
+insert into t (id,a) values (751,87);
+insert into t (id,a) values (751,88);
+insert into t (id,a) values (751,89);
+insert into t (id,a) values (751,90);
+insert into t (id,a) values (751,91);
+insert into t (id,a) values (751,92);
+insert into t (id,a) values (751,93);
+insert into t (id,a) values (751,94);
+insert into t (id,a) values (751,95);
+insert into t (id,a) values (751,96);
+insert into t (id,a) values (751,97);
+insert into t (id,a) values (751,98);
+insert into t (id,a) values (751,99);
+insert into t (id,a) values (752,0);
+insert into t (id,a) values (752,1);
+insert into t (id,a) values (752,2);
+insert into t (id,a) values (752,3);
+insert into t (id,a) values (752,4);
+insert into t (id,a) values (752,5);
+insert into t (id,a) values (752,6);
+insert into t (id,a) values (752,7);
+insert into t (id,a) values (752,8);
+insert into t (id,a) values (752,9);
+insert into t (id,a) values (752,10);
+insert into t (id,a) values (752,11);
+insert into t (id,a) values (752,12);
+insert into t (id,a) values (752,13);
+insert into t (id,a) values (752,14);
+insert into t (id,a) values (752,15);
+insert into t (id,a) values (752,16);
+insert into t (id,a) values (752,17);
+insert into t (id,a) values (752,18);
+insert into t (id,a) values (752,19);
+insert into t (id,a) values (752,20);
+insert into t (id,a) values (752,21);
+insert into t (id,a) values (752,22);
+insert into t (id,a) values (752,23);
+insert into t (id,a) values (752,24);
+insert into t (id,a) values (752,25);
+insert into t (id,a) values (752,26);
+insert into t (id,a) values (752,27);
+insert into t (id,a) values (752,28);
+insert into t (id,a) values (752,29);
+insert into t (id,a) values (752,30);
+insert into t (id,a) values (752,31);
+insert into t (id,a) values (752,32);
+insert into t (id,a) values (752,33);
+insert into t (id,a) values (752,34);
+insert into t (id,a) values (752,35);
+insert into t (id,a) values (752,36);
+insert into t (id,a) values (752,37);
+insert into t (id,a) values (752,38);
+insert into t (id,a) values (752,39);
+insert into t (id,a) values (752,40);
+insert into t (id,a) values (752,41);
+insert into t (id,a) values (752,42);
+insert into t (id,a) values (752,43);
+insert into t (id,a) values (752,44);
+insert into t (id,a) values (752,45);
+insert into t (id,a) values (752,46);
+insert into t (id,a) values (752,47);
+insert into t (id,a) values (752,48);
+insert into t (id,a) values (752,49);
+insert into t (id,a) values (752,50);
+insert into t (id,a) values (752,51);
+insert into t (id,a) values (752,52);
+insert into t (id,a) values (752,53);
+insert into t (id,a) values (752,54);
+insert into t (id,a) values (752,55);
+insert into t (id,a) values (752,56);
+insert into t (id,a) values (752,57);
+insert into t (id,a) values (752,58);
+insert into t (id,a) values (752,59);
+insert into t (id,a) values (752,60);
+insert into t (id,a) values (752,61);
+insert into t (id,a) values (752,62);
+insert into t (id,a) values (752,63);
+insert into t (id,a) values (752,64);
+insert into t (id,a) values (752,65);
+insert into t (id,a) values (752,66);
+insert into t (id,a) values (752,67);
+insert into t (id,a) values (752,68);
+insert into t (id,a) values (752,69);
+insert into t (id,a) values (752,70);
+insert into t (id,a) values (752,71);
+insert into t (id,a) values (752,72);
+insert into t (id,a) values (752,73);
+insert into t (id,a) values (752,74);
+insert into t (id,a) values (752,75);
+insert into t (id,a) values (752,76);
+insert into t (id,a) values (752,77);
+insert into t (id,a) values (752,78);
+insert into t (id,a) values (752,79);
+insert into t (id,a) values (752,80);
+insert into t (id,a) values (752,81);
+insert into t (id,a) values (752,82);
+insert into t (id,a) values (752,83);
+insert into t (id,a) values (752,84);
+insert into t (id,a) values (752,85);
+insert into t (id,a) values (752,86);
+insert into t (id,a) values (752,87);
+insert into t (id,a) values (752,88);
+insert into t (id,a) values (752,89);
+insert into t (id,a) values (752,90);
+insert into t (id,a) values (752,91);
+insert into t (id,a) values (752,92);
+insert into t (id,a) values (752,93);
+insert into t (id,a) values (752,94);
+insert into t (id,a) values (752,95);
+insert into t (id,a) values (752,96);
+insert into t (id,a) values (752,97);
+insert into t (id,a) values (752,98);
+insert into t (id,a) values (752,99);
+insert into t (id,a) values (753,0);
+insert into t (id,a) values (753,1);
+insert into t (id,a) values (753,2);
+insert into t (id,a) values (753,3);
+insert into t (id,a) values (753,4);
+insert into t (id,a) values (753,5);
+insert into t (id,a) values (753,6);
+insert into t (id,a) values (753,7);
+insert into t (id,a) values (753,8);
+insert into t (id,a) values (753,9);
+insert into t (id,a) values (753,10);
+insert into t (id,a) values (753,11);
+insert into t (id,a) values (753,12);
+insert into t (id,a) values (753,13);
+insert into t (id,a) values (753,14);
+insert into t (id,a) values (753,15);
+insert into t (id,a) values (753,16);
+insert into t (id,a) values (753,17);
+insert into t (id,a) values (753,18);
+insert into t (id,a) values (753,19);
+insert into t (id,a) values (753,20);
+insert into t (id,a) values (753,21);
+insert into t (id,a) values (753,22);
+insert into t (id,a) values (753,23);
+insert into t (id,a) values (753,24);
+insert into t (id,a) values (753,25);
+insert into t (id,a) values (753,26);
+insert into t (id,a) values (753,27);
+insert into t (id,a) values (753,28);
+insert into t (id,a) values (753,29);
+insert into t (id,a) values (753,30);
+insert into t (id,a) values (753,31);
+insert into t (id,a) values (753,32);
+insert into t (id,a) values (753,33);
+insert into t (id,a) values (753,34);
+insert into t (id,a) values (753,35);
+insert into t (id,a) values (753,36);
+insert into t (id,a) values (753,37);
+insert into t (id,a) values (753,38);
+insert into t (id,a) values (753,39);
+insert into t (id,a) values (753,40);
+insert into t (id,a) values (753,41);
+insert into t (id,a) values (753,42);
+insert into t (id,a) values (753,43);
+insert into t (id,a) values (753,44);
+insert into t (id,a) values (753,45);
+insert into t (id,a) values (753,46);
+insert into t (id,a) values (753,47);
+insert into t (id,a) values (753,48);
+insert into t (id,a) values (753,49);
+insert into t (id,a) values (753,50);
+insert into t (id,a) values (753,51);
+insert into t (id,a) values (753,52);
+insert into t (id,a) values (753,53);
+insert into t (id,a) values (753,54);
+insert into t (id,a) values (753,55);
+insert into t (id,a) values (753,56);
+insert into t (id,a) values (753,57);
+insert into t (id,a) values (753,58);
+insert into t (id,a) values (753,59);
+insert into t (id,a) values (753,60);
+insert into t (id,a) values (753,61);
+insert into t (id,a) values (753,62);
+insert into t (id,a) values (753,63);
+insert into t (id,a) values (753,64);
+insert into t (id,a) values (753,65);
+insert into t (id,a) values (753,66);
+insert into t (id,a) values (753,67);
+insert into t (id,a) values (753,68);
+insert into t (id,a) values (753,69);
+insert into t (id,a) values (753,70);
+insert into t (id,a) values (753,71);
+insert into t (id,a) values (753,72);
+insert into t (id,a) values (753,73);
+insert into t (id,a) values (753,74);
+insert into t (id,a) values (753,75);
+insert into t (id,a) values (753,76);
+insert into t (id,a) values (753,77);
+insert into t (id,a) values (753,78);
+insert into t (id,a) values (753,79);
+insert into t (id,a) values (753,80);
+insert into t (id,a) values (753,81);
+insert into t (id,a) values (753,82);
+insert into t (id,a) values (753,83);
+insert into t (id,a) values (753,84);
+insert into t (id,a) values (753,85);
+insert into t (id,a) values (753,86);
+insert into t (id,a) values (753,87);
+insert into t (id,a) values (753,88);
+insert into t (id,a) values (753,89);
+insert into t (id,a) values (753,90);
+insert into t (id,a) values (753,91);
+insert into t (id,a) values (753,92);
+insert into t (id,a) values (753,93);
+insert into t (id,a) values (753,94);
+insert into t (id,a) values (753,95);
+insert into t (id,a) values (753,96);
+insert into t (id,a) values (753,97);
+insert into t (id,a) values (753,98);
+insert into t (id,a) values (753,99);
+insert into t (id,a) values (754,0);
+insert into t (id,a) values (754,1);
+insert into t (id,a) values (754,2);
+insert into t (id,a) values (754,3);
+insert into t (id,a) values (754,4);
+insert into t (id,a) values (754,5);
+insert into t (id,a) values (754,6);
+insert into t (id,a) values (754,7);
+insert into t (id,a) values (754,8);
+insert into t (id,a) values (754,9);
+insert into t (id,a) values (754,10);
+insert into t (id,a) values (754,11);
+insert into t (id,a) values (754,12);
+insert into t (id,a) values (754,13);
+insert into t (id,a) values (754,14);
+insert into t (id,a) values (754,15);
+insert into t (id,a) values (754,16);
+insert into t (id,a) values (754,17);
+insert into t (id,a) values (754,18);
+insert into t (id,a) values (754,19);
+insert into t (id,a) values (754,20);
+insert into t (id,a) values (754,21);
+insert into t (id,a) values (754,22);
+insert into t (id,a) values (754,23);
+insert into t (id,a) values (754,24);
+insert into t (id,a) values (754,25);
+insert into t (id,a) values (754,26);
+insert into t (id,a) values (754,27);
+insert into t (id,a) values (754,28);
+insert into t (id,a) values (754,29);
+insert into t (id,a) values (754,30);
+insert into t (id,a) values (754,31);
+insert into t (id,a) values (754,32);
+insert into t (id,a) values (754,33);
+insert into t (id,a) values (754,34);
+insert into t (id,a) values (754,35);
+insert into t (id,a) values (754,36);
+insert into t (id,a) values (754,37);
+insert into t (id,a) values (754,38);
+insert into t (id,a) values (754,39);
+insert into t (id,a) values (754,40);
+insert into t (id,a) values (754,41);
+insert into t (id,a) values (754,42);
+insert into t (id,a) values (754,43);
+insert into t (id,a) values (754,44);
+insert into t (id,a) values (754,45);
+insert into t (id,a) values (754,46);
+insert into t (id,a) values (754,47);
+insert into t (id,a) values (754,48);
+insert into t (id,a) values (754,49);
+insert into t (id,a) values (754,50);
+insert into t (id,a) values (754,51);
+insert into t (id,a) values (754,52);
+insert into t (id,a) values (754,53);
+insert into t (id,a) values (754,54);
+insert into t (id,a) values (754,55);
+insert into t (id,a) values (754,56);
+insert into t (id,a) values (754,57);
+insert into t (id,a) values (754,58);
+insert into t (id,a) values (754,59);
+insert into t (id,a) values (754,60);
+insert into t (id,a) values (754,61);
+insert into t (id,a) values (754,62);
+insert into t (id,a) values (754,63);
+insert into t (id,a) values (754,64);
+insert into t (id,a) values (754,65);
+insert into t (id,a) values (754,66);
+insert into t (id,a) values (754,67);
+insert into t (id,a) values (754,68);
+insert into t (id,a) values (754,69);
+insert into t (id,a) values (754,70);
+insert into t (id,a) values (754,71);
+insert into t (id,a) values (754,72);
+insert into t (id,a) values (754,73);
+insert into t (id,a) values (754,74);
+insert into t (id,a) values (754,75);
+insert into t (id,a) values (754,76);
+insert into t (id,a) values (754,77);
+insert into t (id,a) values (754,78);
+insert into t (id,a) values (754,79);
+insert into t (id,a) values (754,80);
+insert into t (id,a) values (754,81);
+insert into t (id,a) values (754,82);
+insert into t (id,a) values (754,83);
+insert into t (id,a) values (754,84);
+insert into t (id,a) values (754,85);
+insert into t (id,a) values (754,86);
+insert into t (id,a) values (754,87);
+insert into t (id,a) values (754,88);
+insert into t (id,a) values (754,89);
+insert into t (id,a) values (754,90);
+insert into t (id,a) values (754,91);
+insert into t (id,a) values (754,92);
+insert into t (id,a) values (754,93);
+insert into t (id,a) values (754,94);
+insert into t (id,a) values (754,95);
+insert into t (id,a) values (754,96);
+insert into t (id,a) values (754,97);
+insert into t (id,a) values (754,98);
+insert into t (id,a) values (754,99);
+insert into t (id,a) values (755,0);
+insert into t (id,a) values (755,1);
+insert into t (id,a) values (755,2);
+insert into t (id,a) values (755,3);
+insert into t (id,a) values (755,4);
+insert into t (id,a) values (755,5);
+insert into t (id,a) values (755,6);
+insert into t (id,a) values (755,7);
+insert into t (id,a) values (755,8);
+insert into t (id,a) values (755,9);
+insert into t (id,a) values (755,10);
+insert into t (id,a) values (755,11);
+insert into t (id,a) values (755,12);
+insert into t (id,a) values (755,13);
+insert into t (id,a) values (755,14);
+insert into t (id,a) values (755,15);
+insert into t (id,a) values (755,16);
+insert into t (id,a) values (755,17);
+insert into t (id,a) values (755,18);
+insert into t (id,a) values (755,19);
+insert into t (id,a) values (755,20);
+insert into t (id,a) values (755,21);
+insert into t (id,a) values (755,22);
+insert into t (id,a) values (755,23);
+insert into t (id,a) values (755,24);
+insert into t (id,a) values (755,25);
+insert into t (id,a) values (755,26);
+insert into t (id,a) values (755,27);
+insert into t (id,a) values (755,28);
+insert into t (id,a) values (755,29);
+insert into t (id,a) values (755,30);
+insert into t (id,a) values (755,31);
+insert into t (id,a) values (755,32);
+insert into t (id,a) values (755,33);
+insert into t (id,a) values (755,34);
+insert into t (id,a) values (755,35);
+insert into t (id,a) values (755,36);
+insert into t (id,a) values (755,37);
+insert into t (id,a) values (755,38);
+insert into t (id,a) values (755,39);
+insert into t (id,a) values (755,40);
+insert into t (id,a) values (755,41);
+insert into t (id,a) values (755,42);
+insert into t (id,a) values (755,43);
+insert into t (id,a) values (755,44);
+insert into t (id,a) values (755,45);
+insert into t (id,a) values (755,46);
+insert into t (id,a) values (755,47);
+insert into t (id,a) values (755,48);
+insert into t (id,a) values (755,49);
+insert into t (id,a) values (755,50);
+insert into t (id,a) values (755,51);
+insert into t (id,a) values (755,52);
+insert into t (id,a) values (755,53);
+insert into t (id,a) values (755,54);
+insert into t (id,a) values (755,55);
+insert into t (id,a) values (755,56);
+insert into t (id,a) values (755,57);
+insert into t (id,a) values (755,58);
+insert into t (id,a) values (755,59);
+insert into t (id,a) values (755,60);
+insert into t (id,a) values (755,61);
+insert into t (id,a) values (755,62);
+insert into t (id,a) values (755,63);
+insert into t (id,a) values (755,64);
+insert into t (id,a) values (755,65);
+insert into t (id,a) values (755,66);
+insert into t (id,a) values (755,67);
+insert into t (id,a) values (755,68);
+insert into t (id,a) values (755,69);
+insert into t (id,a) values (755,70);
+insert into t (id,a) values (755,71);
+insert into t (id,a) values (755,72);
+insert into t (id,a) values (755,73);
+insert into t (id,a) values (755,74);
+insert into t (id,a) values (755,75);
+insert into t (id,a) values (755,76);
+insert into t (id,a) values (755,77);
+insert into t (id,a) values (755,78);
+insert into t (id,a) values (755,79);
+insert into t (id,a) values (755,80);
+insert into t (id,a) values (755,81);
+insert into t (id,a) values (755,82);
+insert into t (id,a) values (755,83);
+insert into t (id,a) values (755,84);
+insert into t (id,a) values (755,85);
+insert into t (id,a) values (755,86);
+insert into t (id,a) values (755,87);
+insert into t (id,a) values (755,88);
+insert into t (id,a) values (755,89);
+insert into t (id,a) values (755,90);
+insert into t (id,a) values (755,91);
+insert into t (id,a) values (755,92);
+insert into t (id,a) values (755,93);
+insert into t (id,a) values (755,94);
+insert into t (id,a) values (755,95);
+insert into t (id,a) values (755,96);
+insert into t (id,a) values (755,97);
+insert into t (id,a) values (755,98);
+insert into t (id,a) values (755,99);
+insert into t (id,a) values (756,0);
+insert into t (id,a) values (756,1);
+insert into t (id,a) values (756,2);
+insert into t (id,a) values (756,3);
+insert into t (id,a) values (756,4);
+insert into t (id,a) values (756,5);
+insert into t (id,a) values (756,6);
+insert into t (id,a) values (756,7);
+insert into t (id,a) values (756,8);
+insert into t (id,a) values (756,9);
+insert into t (id,a) values (756,10);
+insert into t (id,a) values (756,11);
+insert into t (id,a) values (756,12);
+insert into t (id,a) values (756,13);
+insert into t (id,a) values (756,14);
+insert into t (id,a) values (756,15);
+insert into t (id,a) values (756,16);
+insert into t (id,a) values (756,17);
+insert into t (id,a) values (756,18);
+insert into t (id,a) values (756,19);
+insert into t (id,a) values (756,20);
+insert into t (id,a) values (756,21);
+insert into t (id,a) values (756,22);
+insert into t (id,a) values (756,23);
+insert into t (id,a) values (756,24);
+insert into t (id,a) values (756,25);
+insert into t (id,a) values (756,26);
+insert into t (id,a) values (756,27);
+insert into t (id,a) values (756,28);
+insert into t (id,a) values (756,29);
+insert into t (id,a) values (756,30);
+insert into t (id,a) values (756,31);
+insert into t (id,a) values (756,32);
+insert into t (id,a) values (756,33);
+insert into t (id,a) values (756,34);
+insert into t (id,a) values (756,35);
+insert into t (id,a) values (756,36);
+insert into t (id,a) values (756,37);
+insert into t (id,a) values (756,38);
+insert into t (id,a) values (756,39);
+insert into t (id,a) values (756,40);
+insert into t (id,a) values (756,41);
+insert into t (id,a) values (756,42);
+insert into t (id,a) values (756,43);
+insert into t (id,a) values (756,44);
+insert into t (id,a) values (756,45);
+insert into t (id,a) values (756,46);
+insert into t (id,a) values (756,47);
+insert into t (id,a) values (756,48);
+insert into t (id,a) values (756,49);
+insert into t (id,a) values (756,50);
+insert into t (id,a) values (756,51);
+insert into t (id,a) values (756,52);
+insert into t (id,a) values (756,53);
+insert into t (id,a) values (756,54);
+insert into t (id,a) values (756,55);
+insert into t (id,a) values (756,56);
+insert into t (id,a) values (756,57);
+insert into t (id,a) values (756,58);
+insert into t (id,a) values (756,59);
+insert into t (id,a) values (756,60);
+insert into t (id,a) values (756,61);
+insert into t (id,a) values (756,62);
+insert into t (id,a) values (756,63);
+insert into t (id,a) values (756,64);
+insert into t (id,a) values (756,65);
+insert into t (id,a) values (756,66);
+insert into t (id,a) values (756,67);
+insert into t (id,a) values (756,68);
+insert into t (id,a) values (756,69);
+insert into t (id,a) values (756,70);
+insert into t (id,a) values (756,71);
+insert into t (id,a) values (756,72);
+insert into t (id,a) values (756,73);
+insert into t (id,a) values (756,74);
+insert into t (id,a) values (756,75);
+insert into t (id,a) values (756,76);
+insert into t (id,a) values (756,77);
+insert into t (id,a) values (756,78);
+insert into t (id,a) values (756,79);
+insert into t (id,a) values (756,80);
+insert into t (id,a) values (756,81);
+insert into t (id,a) values (756,82);
+insert into t (id,a) values (756,83);
+insert into t (id,a) values (756,84);
+insert into t (id,a) values (756,85);
+insert into t (id,a) values (756,86);
+insert into t (id,a) values (756,87);
+insert into t (id,a) values (756,88);
+insert into t (id,a) values (756,89);
+insert into t (id,a) values (756,90);
+insert into t (id,a) values (756,91);
+insert into t (id,a) values (756,92);
+insert into t (id,a) values (756,93);
+insert into t (id,a) values (756,94);
+insert into t (id,a) values (756,95);
+insert into t (id,a) values (756,96);
+insert into t (id,a) values (756,97);
+insert into t (id,a) values (756,98);
+insert into t (id,a) values (756,99);
+insert into t (id,a) values (757,0);
+insert into t (id,a) values (757,1);
+insert into t (id,a) values (757,2);
+insert into t (id,a) values (757,3);
+insert into t (id,a) values (757,4);
+insert into t (id,a) values (757,5);
+insert into t (id,a) values (757,6);
+insert into t (id,a) values (757,7);
+insert into t (id,a) values (757,8);
+insert into t (id,a) values (757,9);
+insert into t (id,a) values (757,10);
+insert into t (id,a) values (757,11);
+insert into t (id,a) values (757,12);
+insert into t (id,a) values (757,13);
+insert into t (id,a) values (757,14);
+insert into t (id,a) values (757,15);
+insert into t (id,a) values (757,16);
+insert into t (id,a) values (757,17);
+insert into t (id,a) values (757,18);
+insert into t (id,a) values (757,19);
+insert into t (id,a) values (757,20);
+insert into t (id,a) values (757,21);
+insert into t (id,a) values (757,22);
+insert into t (id,a) values (757,23);
+insert into t (id,a) values (757,24);
+insert into t (id,a) values (757,25);
+insert into t (id,a) values (757,26);
+insert into t (id,a) values (757,27);
+insert into t (id,a) values (757,28);
+insert into t (id,a) values (757,29);
+insert into t (id,a) values (757,30);
+insert into t (id,a) values (757,31);
+insert into t (id,a) values (757,32);
+insert into t (id,a) values (757,33);
+insert into t (id,a) values (757,34);
+insert into t (id,a) values (757,35);
+insert into t (id,a) values (757,36);
+insert into t (id,a) values (757,37);
+insert into t (id,a) values (757,38);
+insert into t (id,a) values (757,39);
+insert into t (id,a) values (757,40);
+insert into t (id,a) values (757,41);
+insert into t (id,a) values (757,42);
+insert into t (id,a) values (757,43);
+insert into t (id,a) values (757,44);
+insert into t (id,a) values (757,45);
+insert into t (id,a) values (757,46);
+insert into t (id,a) values (757,47);
+insert into t (id,a) values (757,48);
+insert into t (id,a) values (757,49);
+insert into t (id,a) values (757,50);
+insert into t (id,a) values (757,51);
+insert into t (id,a) values (757,52);
+insert into t (id,a) values (757,53);
+insert into t (id,a) values (757,54);
+insert into t (id,a) values (757,55);
+insert into t (id,a) values (757,56);
+insert into t (id,a) values (757,57);
+insert into t (id,a) values (757,58);
+insert into t (id,a) values (757,59);
+insert into t (id,a) values (757,60);
+insert into t (id,a) values (757,61);
+insert into t (id,a) values (757,62);
+insert into t (id,a) values (757,63);
+insert into t (id,a) values (757,64);
+insert into t (id,a) values (757,65);
+insert into t (id,a) values (757,66);
+insert into t (id,a) values (757,67);
+insert into t (id,a) values (757,68);
+insert into t (id,a) values (757,69);
+insert into t (id,a) values (757,70);
+insert into t (id,a) values (757,71);
+insert into t (id,a) values (757,72);
+insert into t (id,a) values (757,73);
+insert into t (id,a) values (757,74);
+insert into t (id,a) values (757,75);
+insert into t (id,a) values (757,76);
+insert into t (id,a) values (757,77);
+insert into t (id,a) values (757,78);
+insert into t (id,a) values (757,79);
+insert into t (id,a) values (757,80);
+insert into t (id,a) values (757,81);
+insert into t (id,a) values (757,82);
+insert into t (id,a) values (757,83);
+insert into t (id,a) values (757,84);
+insert into t (id,a) values (757,85);
+insert into t (id,a) values (757,86);
+insert into t (id,a) values (757,87);
+insert into t (id,a) values (757,88);
+insert into t (id,a) values (757,89);
+insert into t (id,a) values (757,90);
+insert into t (id,a) values (757,91);
+insert into t (id,a) values (757,92);
+insert into t (id,a) values (757,93);
+insert into t (id,a) values (757,94);
+insert into t (id,a) values (757,95);
+insert into t (id,a) values (757,96);
+insert into t (id,a) values (757,97);
+insert into t (id,a) values (757,98);
+insert into t (id,a) values (757,99);
+insert into t (id,a) values (758,0);
+insert into t (id,a) values (758,1);
+insert into t (id,a) values (758,2);
+insert into t (id,a) values (758,3);
+insert into t (id,a) values (758,4);
+insert into t (id,a) values (758,5);
+insert into t (id,a) values (758,6);
+insert into t (id,a) values (758,7);
+insert into t (id,a) values (758,8);
+insert into t (id,a) values (758,9);
+insert into t (id,a) values (758,10);
+insert into t (id,a) values (758,11);
+insert into t (id,a) values (758,12);
+insert into t (id,a) values (758,13);
+insert into t (id,a) values (758,14);
+insert into t (id,a) values (758,15);
+insert into t (id,a) values (758,16);
+insert into t (id,a) values (758,17);
+insert into t (id,a) values (758,18);
+insert into t (id,a) values (758,19);
+insert into t (id,a) values (758,20);
+insert into t (id,a) values (758,21);
+insert into t (id,a) values (758,22);
+insert into t (id,a) values (758,23);
+insert into t (id,a) values (758,24);
+insert into t (id,a) values (758,25);
+insert into t (id,a) values (758,26);
+insert into t (id,a) values (758,27);
+insert into t (id,a) values (758,28);
+insert into t (id,a) values (758,29);
+insert into t (id,a) values (758,30);
+insert into t (id,a) values (758,31);
+insert into t (id,a) values (758,32);
+insert into t (id,a) values (758,33);
+insert into t (id,a) values (758,34);
+insert into t (id,a) values (758,35);
+insert into t (id,a) values (758,36);
+insert into t (id,a) values (758,37);
+insert into t (id,a) values (758,38);
+insert into t (id,a) values (758,39);
+insert into t (id,a) values (758,40);
+insert into t (id,a) values (758,41);
+insert into t (id,a) values (758,42);
+insert into t (id,a) values (758,43);
+insert into t (id,a) values (758,44);
+insert into t (id,a) values (758,45);
+insert into t (id,a) values (758,46);
+insert into t (id,a) values (758,47);
+insert into t (id,a) values (758,48);
+insert into t (id,a) values (758,49);
+insert into t (id,a) values (758,50);
+insert into t (id,a) values (758,51);
+insert into t (id,a) values (758,52);
+insert into t (id,a) values (758,53);
+insert into t (id,a) values (758,54);
+insert into t (id,a) values (758,55);
+insert into t (id,a) values (758,56);
+insert into t (id,a) values (758,57);
+insert into t (id,a) values (758,58);
+insert into t (id,a) values (758,59);
+insert into t (id,a) values (758,60);
+insert into t (id,a) values (758,61);
+insert into t (id,a) values (758,62);
+insert into t (id,a) values (758,63);
+insert into t (id,a) values (758,64);
+insert into t (id,a) values (758,65);
+insert into t (id,a) values (758,66);
+insert into t (id,a) values (758,67);
+insert into t (id,a) values (758,68);
+insert into t (id,a) values (758,69);
+insert into t (id,a) values (758,70);
+insert into t (id,a) values (758,71);
+insert into t (id,a) values (758,72);
+insert into t (id,a) values (758,73);
+insert into t (id,a) values (758,74);
+insert into t (id,a) values (758,75);
+insert into t (id,a) values (758,76);
+insert into t (id,a) values (758,77);
+insert into t (id,a) values (758,78);
+insert into t (id,a) values (758,79);
+insert into t (id,a) values (758,80);
+insert into t (id,a) values (758,81);
+insert into t (id,a) values (758,82);
+insert into t (id,a) values (758,83);
+insert into t (id,a) values (758,84);
+insert into t (id,a) values (758,85);
+insert into t (id,a) values (758,86);
+insert into t (id,a) values (758,87);
+insert into t (id,a) values (758,88);
+insert into t (id,a) values (758,89);
+insert into t (id,a) values (758,90);
+insert into t (id,a) values (758,91);
+insert into t (id,a) values (758,92);
+insert into t (id,a) values (758,93);
+insert into t (id,a) values (758,94);
+insert into t (id,a) values (758,95);
+insert into t (id,a) values (758,96);
+insert into t (id,a) values (758,97);
+insert into t (id,a) values (758,98);
+insert into t (id,a) values (758,99);
+insert into t (id,a) values (759,0);
+insert into t (id,a) values (759,1);
+insert into t (id,a) values (759,2);
+insert into t (id,a) values (759,3);
+insert into t (id,a) values (759,4);
+insert into t (id,a) values (759,5);
+insert into t (id,a) values (759,6);
+insert into t (id,a) values (759,7);
+insert into t (id,a) values (759,8);
+insert into t (id,a) values (759,9);
+insert into t (id,a) values (759,10);
+insert into t (id,a) values (759,11);
+insert into t (id,a) values (759,12);
+insert into t (id,a) values (759,13);
+insert into t (id,a) values (759,14);
+insert into t (id,a) values (759,15);
+insert into t (id,a) values (759,16);
+insert into t (id,a) values (759,17);
+insert into t (id,a) values (759,18);
+insert into t (id,a) values (759,19);
+insert into t (id,a) values (759,20);
+insert into t (id,a) values (759,21);
+insert into t (id,a) values (759,22);
+insert into t (id,a) values (759,23);
+insert into t (id,a) values (759,24);
+insert into t (id,a) values (759,25);
+insert into t (id,a) values (759,26);
+insert into t (id,a) values (759,27);
+insert into t (id,a) values (759,28);
+insert into t (id,a) values (759,29);
+insert into t (id,a) values (759,30);
+insert into t (id,a) values (759,31);
+insert into t (id,a) values (759,32);
+insert into t (id,a) values (759,33);
+insert into t (id,a) values (759,34);
+insert into t (id,a) values (759,35);
+insert into t (id,a) values (759,36);
+insert into t (id,a) values (759,37);
+insert into t (id,a) values (759,38);
+insert into t (id,a) values (759,39);
+insert into t (id,a) values (759,40);
+insert into t (id,a) values (759,41);
+insert into t (id,a) values (759,42);
+insert into t (id,a) values (759,43);
+insert into t (id,a) values (759,44);
+insert into t (id,a) values (759,45);
+insert into t (id,a) values (759,46);
+insert into t (id,a) values (759,47);
+insert into t (id,a) values (759,48);
+insert into t (id,a) values (759,49);
+insert into t (id,a) values (759,50);
+insert into t (id,a) values (759,51);
+insert into t (id,a) values (759,52);
+insert into t (id,a) values (759,53);
+insert into t (id,a) values (759,54);
+insert into t (id,a) values (759,55);
+insert into t (id,a) values (759,56);
+insert into t (id,a) values (759,57);
+insert into t (id,a) values (759,58);
+insert into t (id,a) values (759,59);
+insert into t (id,a) values (759,60);
+insert into t (id,a) values (759,61);
+insert into t (id,a) values (759,62);
+insert into t (id,a) values (759,63);
+insert into t (id,a) values (759,64);
+insert into t (id,a) values (759,65);
+insert into t (id,a) values (759,66);
+insert into t (id,a) values (759,67);
+insert into t (id,a) values (759,68);
+insert into t (id,a) values (759,69);
+insert into t (id,a) values (759,70);
+insert into t (id,a) values (759,71);
+insert into t (id,a) values (759,72);
+insert into t (id,a) values (759,73);
+insert into t (id,a) values (759,74);
+insert into t (id,a) values (759,75);
+insert into t (id,a) values (759,76);
+insert into t (id,a) values (759,77);
+insert into t (id,a) values (759,78);
+insert into t (id,a) values (759,79);
+insert into t (id,a) values (759,80);
+insert into t (id,a) values (759,81);
+insert into t (id,a) values (759,82);
+insert into t (id,a) values (759,83);
+insert into t (id,a) values (759,84);
+insert into t (id,a) values (759,85);
+insert into t (id,a) values (759,86);
+insert into t (id,a) values (759,87);
+insert into t (id,a) values (759,88);
+insert into t (id,a) values (759,89);
+insert into t (id,a) values (759,90);
+insert into t (id,a) values (759,91);
+insert into t (id,a) values (759,92);
+insert into t (id,a) values (759,93);
+insert into t (id,a) values (759,94);
+insert into t (id,a) values (759,95);
+insert into t (id,a) values (759,96);
+insert into t (id,a) values (759,97);
+insert into t (id,a) values (759,98);
+insert into t (id,a) values (759,99);
+insert into t (id,a) values (760,0);
+insert into t (id,a) values (760,1);
+insert into t (id,a) values (760,2);
+insert into t (id,a) values (760,3);
+insert into t (id,a) values (760,4);
+insert into t (id,a) values (760,5);
+insert into t (id,a) values (760,6);
+insert into t (id,a) values (760,7);
+insert into t (id,a) values (760,8);
+insert into t (id,a) values (760,9);
+insert into t (id,a) values (760,10);
+insert into t (id,a) values (760,11);
+insert into t (id,a) values (760,12);
+insert into t (id,a) values (760,13);
+insert into t (id,a) values (760,14);
+insert into t (id,a) values (760,15);
+insert into t (id,a) values (760,16);
+insert into t (id,a) values (760,17);
+insert into t (id,a) values (760,18);
+insert into t (id,a) values (760,19);
+insert into t (id,a) values (760,20);
+insert into t (id,a) values (760,21);
+insert into t (id,a) values (760,22);
+insert into t (id,a) values (760,23);
+insert into t (id,a) values (760,24);
+insert into t (id,a) values (760,25);
+insert into t (id,a) values (760,26);
+insert into t (id,a) values (760,27);
+insert into t (id,a) values (760,28);
+insert into t (id,a) values (760,29);
+insert into t (id,a) values (760,30);
+insert into t (id,a) values (760,31);
+insert into t (id,a) values (760,32);
+insert into t (id,a) values (760,33);
+insert into t (id,a) values (760,34);
+insert into t (id,a) values (760,35);
+insert into t (id,a) values (760,36);
+insert into t (id,a) values (760,37);
+insert into t (id,a) values (760,38);
+insert into t (id,a) values (760,39);
+insert into t (id,a) values (760,40);
+insert into t (id,a) values (760,41);
+insert into t (id,a) values (760,42);
+insert into t (id,a) values (760,43);
+insert into t (id,a) values (760,44);
+insert into t (id,a) values (760,45);
+insert into t (id,a) values (760,46);
+insert into t (id,a) values (760,47);
+insert into t (id,a) values (760,48);
+insert into t (id,a) values (760,49);
+insert into t (id,a) values (760,50);
+insert into t (id,a) values (760,51);
+insert into t (id,a) values (760,52);
+insert into t (id,a) values (760,53);
+insert into t (id,a) values (760,54);
+insert into t (id,a) values (760,55);
+insert into t (id,a) values (760,56);
+insert into t (id,a) values (760,57);
+insert into t (id,a) values (760,58);
+insert into t (id,a) values (760,59);
+insert into t (id,a) values (760,60);
+insert into t (id,a) values (760,61);
+insert into t (id,a) values (760,62);
+insert into t (id,a) values (760,63);
+insert into t (id,a) values (760,64);
+insert into t (id,a) values (760,65);
+insert into t (id,a) values (760,66);
+insert into t (id,a) values (760,67);
+insert into t (id,a) values (760,68);
+insert into t (id,a) values (760,69);
+insert into t (id,a) values (760,70);
+insert into t (id,a) values (760,71);
+insert into t (id,a) values (760,72);
+insert into t (id,a) values (760,73);
+insert into t (id,a) values (760,74);
+insert into t (id,a) values (760,75);
+insert into t (id,a) values (760,76);
+insert into t (id,a) values (760,77);
+insert into t (id,a) values (760,78);
+insert into t (id,a) values (760,79);
+insert into t (id,a) values (760,80);
+insert into t (id,a) values (760,81);
+insert into t (id,a) values (760,82);
+insert into t (id,a) values (760,83);
+insert into t (id,a) values (760,84);
+insert into t (id,a) values (760,85);
+insert into t (id,a) values (760,86);
+insert into t (id,a) values (760,87);
+insert into t (id,a) values (760,88);
+insert into t (id,a) values (760,89);
+insert into t (id,a) values (760,90);
+insert into t (id,a) values (760,91);
+insert into t (id,a) values (760,92);
+insert into t (id,a) values (760,93);
+insert into t (id,a) values (760,94);
+insert into t (id,a) values (760,95);
+insert into t (id,a) values (760,96);
+insert into t (id,a) values (760,97);
+insert into t (id,a) values (760,98);
+insert into t (id,a) values (760,99);
+insert into t (id,a) values (761,0);
+insert into t (id,a) values (761,1);
+insert into t (id,a) values (761,2);
+insert into t (id,a) values (761,3);
+insert into t (id,a) values (761,4);
+insert into t (id,a) values (761,5);
+insert into t (id,a) values (761,6);
+insert into t (id,a) values (761,7);
+insert into t (id,a) values (761,8);
+insert into t (id,a) values (761,9);
+insert into t (id,a) values (761,10);
+insert into t (id,a) values (761,11);
+insert into t (id,a) values (761,12);
+insert into t (id,a) values (761,13);
+insert into t (id,a) values (761,14);
+insert into t (id,a) values (761,15);
+insert into t (id,a) values (761,16);
+insert into t (id,a) values (761,17);
+insert into t (id,a) values (761,18);
+insert into t (id,a) values (761,19);
+insert into t (id,a) values (761,20);
+insert into t (id,a) values (761,21);
+insert into t (id,a) values (761,22);
+insert into t (id,a) values (761,23);
+insert into t (id,a) values (761,24);
+insert into t (id,a) values (761,25);
+insert into t (id,a) values (761,26);
+insert into t (id,a) values (761,27);
+insert into t (id,a) values (761,28);
+insert into t (id,a) values (761,29);
+insert into t (id,a) values (761,30);
+insert into t (id,a) values (761,31);
+insert into t (id,a) values (761,32);
+insert into t (id,a) values (761,33);
+insert into t (id,a) values (761,34);
+insert into t (id,a) values (761,35);
+insert into t (id,a) values (761,36);
+insert into t (id,a) values (761,37);
+insert into t (id,a) values (761,38);
+insert into t (id,a) values (761,39);
+insert into t (id,a) values (761,40);
+insert into t (id,a) values (761,41);
+insert into t (id,a) values (761,42);
+insert into t (id,a) values (761,43);
+insert into t (id,a) values (761,44);
+insert into t (id,a) values (761,45);
+insert into t (id,a) values (761,46);
+insert into t (id,a) values (761,47);
+insert into t (id,a) values (761,48);
+insert into t (id,a) values (761,49);
+insert into t (id,a) values (761,50);
+insert into t (id,a) values (761,51);
+insert into t (id,a) values (761,52);
+insert into t (id,a) values (761,53);
+insert into t (id,a) values (761,54);
+insert into t (id,a) values (761,55);
+insert into t (id,a) values (761,56);
+insert into t (id,a) values (761,57);
+insert into t (id,a) values (761,58);
+insert into t (id,a) values (761,59);
+insert into t (id,a) values (761,60);
+insert into t (id,a) values (761,61);
+insert into t (id,a) values (761,62);
+insert into t (id,a) values (761,63);
+insert into t (id,a) values (761,64);
+insert into t (id,a) values (761,65);
+insert into t (id,a) values (761,66);
+insert into t (id,a) values (761,67);
+insert into t (id,a) values (761,68);
+insert into t (id,a) values (761,69);
+insert into t (id,a) values (761,70);
+insert into t (id,a) values (761,71);
+insert into t (id,a) values (761,72);
+insert into t (id,a) values (761,73);
+insert into t (id,a) values (761,74);
+insert into t (id,a) values (761,75);
+insert into t (id,a) values (761,76);
+insert into t (id,a) values (761,77);
+insert into t (id,a) values (761,78);
+insert into t (id,a) values (761,79);
+insert into t (id,a) values (761,80);
+insert into t (id,a) values (761,81);
+insert into t (id,a) values (761,82);
+insert into t (id,a) values (761,83);
+insert into t (id,a) values (761,84);
+insert into t (id,a) values (761,85);
+insert into t (id,a) values (761,86);
+insert into t (id,a) values (761,87);
+insert into t (id,a) values (761,88);
+insert into t (id,a) values (761,89);
+insert into t (id,a) values (761,90);
+insert into t (id,a) values (761,91);
+insert into t (id,a) values (761,92);
+insert into t (id,a) values (761,93);
+insert into t (id,a) values (761,94);
+insert into t (id,a) values (761,95);
+insert into t (id,a) values (761,96);
+insert into t (id,a) values (761,97);
+insert into t (id,a) values (761,98);
+insert into t (id,a) values (761,99);
+insert into t (id,a) values (762,0);
+insert into t (id,a) values (762,1);
+insert into t (id,a) values (762,2);
+insert into t (id,a) values (762,3);
+insert into t (id,a) values (762,4);
+insert into t (id,a) values (762,5);
+insert into t (id,a) values (762,6);
+insert into t (id,a) values (762,7);
+insert into t (id,a) values (762,8);
+insert into t (id,a) values (762,9);
+insert into t (id,a) values (762,10);
+insert into t (id,a) values (762,11);
+insert into t (id,a) values (762,12);
+insert into t (id,a) values (762,13);
+insert into t (id,a) values (762,14);
+insert into t (id,a) values (762,15);
+insert into t (id,a) values (762,16);
+insert into t (id,a) values (762,17);
+insert into t (id,a) values (762,18);
+insert into t (id,a) values (762,19);
+insert into t (id,a) values (762,20);
+insert into t (id,a) values (762,21);
+insert into t (id,a) values (762,22);
+insert into t (id,a) values (762,23);
+insert into t (id,a) values (762,24);
+insert into t (id,a) values (762,25);
+insert into t (id,a) values (762,26);
+insert into t (id,a) values (762,27);
+insert into t (id,a) values (762,28);
+insert into t (id,a) values (762,29);
+insert into t (id,a) values (762,30);
+insert into t (id,a) values (762,31);
+insert into t (id,a) values (762,32);
+insert into t (id,a) values (762,33);
+insert into t (id,a) values (762,34);
+insert into t (id,a) values (762,35);
+insert into t (id,a) values (762,36);
+insert into t (id,a) values (762,37);
+insert into t (id,a) values (762,38);
+insert into t (id,a) values (762,39);
+insert into t (id,a) values (762,40);
+insert into t (id,a) values (762,41);
+insert into t (id,a) values (762,42);
+insert into t (id,a) values (762,43);
+insert into t (id,a) values (762,44);
+insert into t (id,a) values (762,45);
+insert into t (id,a) values (762,46);
+insert into t (id,a) values (762,47);
+insert into t (id,a) values (762,48);
+insert into t (id,a) values (762,49);
+insert into t (id,a) values (762,50);
+insert into t (id,a) values (762,51);
+insert into t (id,a) values (762,52);
+insert into t (id,a) values (762,53);
+insert into t (id,a) values (762,54);
+insert into t (id,a) values (762,55);
+insert into t (id,a) values (762,56);
+insert into t (id,a) values (762,57);
+insert into t (id,a) values (762,58);
+insert into t (id,a) values (762,59);
+insert into t (id,a) values (762,60);
+insert into t (id,a) values (762,61);
+insert into t (id,a) values (762,62);
+insert into t (id,a) values (762,63);
+insert into t (id,a) values (762,64);
+insert into t (id,a) values (762,65);
+insert into t (id,a) values (762,66);
+insert into t (id,a) values (762,67);
+insert into t (id,a) values (762,68);
+insert into t (id,a) values (762,69);
+insert into t (id,a) values (762,70);
+insert into t (id,a) values (762,71);
+insert into t (id,a) values (762,72);
+insert into t (id,a) values (762,73);
+insert into t (id,a) values (762,74);
+insert into t (id,a) values (762,75);
+insert into t (id,a) values (762,76);
+insert into t (id,a) values (762,77);
+insert into t (id,a) values (762,78);
+insert into t (id,a) values (762,79);
+insert into t (id,a) values (762,80);
+insert into t (id,a) values (762,81);
+insert into t (id,a) values (762,82);
+insert into t (id,a) values (762,83);
+insert into t (id,a) values (762,84);
+insert into t (id,a) values (762,85);
+insert into t (id,a) values (762,86);
+insert into t (id,a) values (762,87);
+insert into t (id,a) values (762,88);
+insert into t (id,a) values (762,89);
+insert into t (id,a) values (762,90);
+insert into t (id,a) values (762,91);
+insert into t (id,a) values (762,92);
+insert into t (id,a) values (762,93);
+insert into t (id,a) values (762,94);
+insert into t (id,a) values (762,95);
+insert into t (id,a) values (762,96);
+insert into t (id,a) values (762,97);
+insert into t (id,a) values (762,98);
+insert into t (id,a) values (762,99);
+insert into t (id,a) values (763,0);
+insert into t (id,a) values (763,1);
+insert into t (id,a) values (763,2);
+insert into t (id,a) values (763,3);
+insert into t (id,a) values (763,4);
+insert into t (id,a) values (763,5);
+insert into t (id,a) values (763,6);
+insert into t (id,a) values (763,7);
+insert into t (id,a) values (763,8);
+insert into t (id,a) values (763,9);
+insert into t (id,a) values (763,10);
+insert into t (id,a) values (763,11);
+insert into t (id,a) values (763,12);
+insert into t (id,a) values (763,13);
+insert into t (id,a) values (763,14);
+insert into t (id,a) values (763,15);
+insert into t (id,a) values (763,16);
+insert into t (id,a) values (763,17);
+insert into t (id,a) values (763,18);
+insert into t (id,a) values (763,19);
+insert into t (id,a) values (763,20);
+insert into t (id,a) values (763,21);
+insert into t (id,a) values (763,22);
+insert into t (id,a) values (763,23);
+insert into t (id,a) values (763,24);
+insert into t (id,a) values (763,25);
+insert into t (id,a) values (763,26);
+insert into t (id,a) values (763,27);
+insert into t (id,a) values (763,28);
+insert into t (id,a) values (763,29);
+insert into t (id,a) values (763,30);
+insert into t (id,a) values (763,31);
+insert into t (id,a) values (763,32);
+insert into t (id,a) values (763,33);
+insert into t (id,a) values (763,34);
+insert into t (id,a) values (763,35);
+insert into t (id,a) values (763,36);
+insert into t (id,a) values (763,37);
+insert into t (id,a) values (763,38);
+insert into t (id,a) values (763,39);
+insert into t (id,a) values (763,40);
+insert into t (id,a) values (763,41);
+insert into t (id,a) values (763,42);
+insert into t (id,a) values (763,43);
+insert into t (id,a) values (763,44);
+insert into t (id,a) values (763,45);
+insert into t (id,a) values (763,46);
+insert into t (id,a) values (763,47);
+insert into t (id,a) values (763,48);
+insert into t (id,a) values (763,49);
+insert into t (id,a) values (763,50);
+insert into t (id,a) values (763,51);
+insert into t (id,a) values (763,52);
+insert into t (id,a) values (763,53);
+insert into t (id,a) values (763,54);
+insert into t (id,a) values (763,55);
+insert into t (id,a) values (763,56);
+insert into t (id,a) values (763,57);
+insert into t (id,a) values (763,58);
+insert into t (id,a) values (763,59);
+insert into t (id,a) values (763,60);
+insert into t (id,a) values (763,61);
+insert into t (id,a) values (763,62);
+insert into t (id,a) values (763,63);
+insert into t (id,a) values (763,64);
+insert into t (id,a) values (763,65);
+insert into t (id,a) values (763,66);
+insert into t (id,a) values (763,67);
+insert into t (id,a) values (763,68);
+insert into t (id,a) values (763,69);
+insert into t (id,a) values (763,70);
+insert into t (id,a) values (763,71);
+insert into t (id,a) values (763,72);
+insert into t (id,a) values (763,73);
+insert into t (id,a) values (763,74);
+insert into t (id,a) values (763,75);
+insert into t (id,a) values (763,76);
+insert into t (id,a) values (763,77);
+insert into t (id,a) values (763,78);
+insert into t (id,a) values (763,79);
+insert into t (id,a) values (763,80);
+insert into t (id,a) values (763,81);
+insert into t (id,a) values (763,82);
+insert into t (id,a) values (763,83);
+insert into t (id,a) values (763,84);
+insert into t (id,a) values (763,85);
+insert into t (id,a) values (763,86);
+insert into t (id,a) values (763,87);
+insert into t (id,a) values (763,88);
+insert into t (id,a) values (763,89);
+insert into t (id,a) values (763,90);
+insert into t (id,a) values (763,91);
+insert into t (id,a) values (763,92);
+insert into t (id,a) values (763,93);
+insert into t (id,a) values (763,94);
+insert into t (id,a) values (763,95);
+insert into t (id,a) values (763,96);
+insert into t (id,a) values (763,97);
+insert into t (id,a) values (763,98);
+insert into t (id,a) values (763,99);
+insert into t (id,a) values (764,0);
+insert into t (id,a) values (764,1);
+insert into t (id,a) values (764,2);
+insert into t (id,a) values (764,3);
+insert into t (id,a) values (764,4);
+insert into t (id,a) values (764,5);
+insert into t (id,a) values (764,6);
+insert into t (id,a) values (764,7);
+insert into t (id,a) values (764,8);
+insert into t (id,a) values (764,9);
+insert into t (id,a) values (764,10);
+insert into t (id,a) values (764,11);
+insert into t (id,a) values (764,12);
+insert into t (id,a) values (764,13);
+insert into t (id,a) values (764,14);
+insert into t (id,a) values (764,15);
+insert into t (id,a) values (764,16);
+insert into t (id,a) values (764,17);
+insert into t (id,a) values (764,18);
+insert into t (id,a) values (764,19);
+insert into t (id,a) values (764,20);
+insert into t (id,a) values (764,21);
+insert into t (id,a) values (764,22);
+insert into t (id,a) values (764,23);
+insert into t (id,a) values (764,24);
+insert into t (id,a) values (764,25);
+insert into t (id,a) values (764,26);
+insert into t (id,a) values (764,27);
+insert into t (id,a) values (764,28);
+insert into t (id,a) values (764,29);
+insert into t (id,a) values (764,30);
+insert into t (id,a) values (764,31);
+insert into t (id,a) values (764,32);
+insert into t (id,a) values (764,33);
+insert into t (id,a) values (764,34);
+insert into t (id,a) values (764,35);
+insert into t (id,a) values (764,36);
+insert into t (id,a) values (764,37);
+insert into t (id,a) values (764,38);
+insert into t (id,a) values (764,39);
+insert into t (id,a) values (764,40);
+insert into t (id,a) values (764,41);
+insert into t (id,a) values (764,42);
+insert into t (id,a) values (764,43);
+insert into t (id,a) values (764,44);
+insert into t (id,a) values (764,45);
+insert into t (id,a) values (764,46);
+insert into t (id,a) values (764,47);
+insert into t (id,a) values (764,48);
+insert into t (id,a) values (764,49);
+insert into t (id,a) values (764,50);
+insert into t (id,a) values (764,51);
+insert into t (id,a) values (764,52);
+insert into t (id,a) values (764,53);
+insert into t (id,a) values (764,54);
+insert into t (id,a) values (764,55);
+insert into t (id,a) values (764,56);
+insert into t (id,a) values (764,57);
+insert into t (id,a) values (764,58);
+insert into t (id,a) values (764,59);
+insert into t (id,a) values (764,60);
+insert into t (id,a) values (764,61);
+insert into t (id,a) values (764,62);
+insert into t (id,a) values (764,63);
+insert into t (id,a) values (764,64);
+insert into t (id,a) values (764,65);
+insert into t (id,a) values (764,66);
+insert into t (id,a) values (764,67);
+insert into t (id,a) values (764,68);
+insert into t (id,a) values (764,69);
+insert into t (id,a) values (764,70);
+insert into t (id,a) values (764,71);
+insert into t (id,a) values (764,72);
+insert into t (id,a) values (764,73);
+insert into t (id,a) values (764,74);
+insert into t (id,a) values (764,75);
+insert into t (id,a) values (764,76);
+insert into t (id,a) values (764,77);
+insert into t (id,a) values (764,78);
+insert into t (id,a) values (764,79);
+insert into t (id,a) values (764,80);
+insert into t (id,a) values (764,81);
+insert into t (id,a) values (764,82);
+insert into t (id,a) values (764,83);
+insert into t (id,a) values (764,84);
+insert into t (id,a) values (764,85);
+insert into t (id,a) values (764,86);
+insert into t (id,a) values (764,87);
+insert into t (id,a) values (764,88);
+insert into t (id,a) values (764,89);
+insert into t (id,a) values (764,90);
+insert into t (id,a) values (764,91);
+insert into t (id,a) values (764,92);
+insert into t (id,a) values (764,93);
+insert into t (id,a) values (764,94);
+insert into t (id,a) values (764,95);
+insert into t (id,a) values (764,96);
+insert into t (id,a) values (764,97);
+insert into t (id,a) values (764,98);
+insert into t (id,a) values (764,99);
+insert into t (id,a) values (765,0);
+insert into t (id,a) values (765,1);
+insert into t (id,a) values (765,2);
+insert into t (id,a) values (765,3);
+insert into t (id,a) values (765,4);
+insert into t (id,a) values (765,5);
+insert into t (id,a) values (765,6);
+insert into t (id,a) values (765,7);
+insert into t (id,a) values (765,8);
+insert into t (id,a) values (765,9);
+insert into t (id,a) values (765,10);
+insert into t (id,a) values (765,11);
+insert into t (id,a) values (765,12);
+insert into t (id,a) values (765,13);
+insert into t (id,a) values (765,14);
+insert into t (id,a) values (765,15);
+insert into t (id,a) values (765,16);
+insert into t (id,a) values (765,17);
+insert into t (id,a) values (765,18);
+insert into t (id,a) values (765,19);
+insert into t (id,a) values (765,20);
+insert into t (id,a) values (765,21);
+insert into t (id,a) values (765,22);
+insert into t (id,a) values (765,23);
+insert into t (id,a) values (765,24);
+insert into t (id,a) values (765,25);
+insert into t (id,a) values (765,26);
+insert into t (id,a) values (765,27);
+insert into t (id,a) values (765,28);
+insert into t (id,a) values (765,29);
+insert into t (id,a) values (765,30);
+insert into t (id,a) values (765,31);
+insert into t (id,a) values (765,32);
+insert into t (id,a) values (765,33);
+insert into t (id,a) values (765,34);
+insert into t (id,a) values (765,35);
+insert into t (id,a) values (765,36);
+insert into t (id,a) values (765,37);
+insert into t (id,a) values (765,38);
+insert into t (id,a) values (765,39);
+insert into t (id,a) values (765,40);
+insert into t (id,a) values (765,41);
+insert into t (id,a) values (765,42);
+insert into t (id,a) values (765,43);
+insert into t (id,a) values (765,44);
+insert into t (id,a) values (765,45);
+insert into t (id,a) values (765,46);
+insert into t (id,a) values (765,47);
+insert into t (id,a) values (765,48);
+insert into t (id,a) values (765,49);
+insert into t (id,a) values (765,50);
+insert into t (id,a) values (765,51);
+insert into t (id,a) values (765,52);
+insert into t (id,a) values (765,53);
+insert into t (id,a) values (765,54);
+insert into t (id,a) values (765,55);
+insert into t (id,a) values (765,56);
+insert into t (id,a) values (765,57);
+insert into t (id,a) values (765,58);
+insert into t (id,a) values (765,59);
+insert into t (id,a) values (765,60);
+insert into t (id,a) values (765,61);
+insert into t (id,a) values (765,62);
+insert into t (id,a) values (765,63);
+insert into t (id,a) values (765,64);
+insert into t (id,a) values (765,65);
+insert into t (id,a) values (765,66);
+insert into t (id,a) values (765,67);
+insert into t (id,a) values (765,68);
+insert into t (id,a) values (765,69);
+insert into t (id,a) values (765,70);
+insert into t (id,a) values (765,71);
+insert into t (id,a) values (765,72);
+insert into t (id,a) values (765,73);
+insert into t (id,a) values (765,74);
+insert into t (id,a) values (765,75);
+insert into t (id,a) values (765,76);
+insert into t (id,a) values (765,77);
+insert into t (id,a) values (765,78);
+insert into t (id,a) values (765,79);
+insert into t (id,a) values (765,80);
+insert into t (id,a) values (765,81);
+insert into t (id,a) values (765,82);
+insert into t (id,a) values (765,83);
+insert into t (id,a) values (765,84);
+insert into t (id,a) values (765,85);
+insert into t (id,a) values (765,86);
+insert into t (id,a) values (765,87);
+insert into t (id,a) values (765,88);
+insert into t (id,a) values (765,89);
+insert into t (id,a) values (765,90);
+insert into t (id,a) values (765,91);
+insert into t (id,a) values (765,92);
+insert into t (id,a) values (765,93);
+insert into t (id,a) values (765,94);
+insert into t (id,a) values (765,95);
+insert into t (id,a) values (765,96);
+insert into t (id,a) values (765,97);
+insert into t (id,a) values (765,98);
+insert into t (id,a) values (765,99);
+insert into t (id,a) values (766,0);
+insert into t (id,a) values (766,1);
+insert into t (id,a) values (766,2);
+insert into t (id,a) values (766,3);
+insert into t (id,a) values (766,4);
+insert into t (id,a) values (766,5);
+insert into t (id,a) values (766,6);
+insert into t (id,a) values (766,7);
+insert into t (id,a) values (766,8);
+insert into t (id,a) values (766,9);
+insert into t (id,a) values (766,10);
+insert into t (id,a) values (766,11);
+insert into t (id,a) values (766,12);
+insert into t (id,a) values (766,13);
+insert into t (id,a) values (766,14);
+insert into t (id,a) values (766,15);
+insert into t (id,a) values (766,16);
+insert into t (id,a) values (766,17);
+insert into t (id,a) values (766,18);
+insert into t (id,a) values (766,19);
+insert into t (id,a) values (766,20);
+insert into t (id,a) values (766,21);
+insert into t (id,a) values (766,22);
+insert into t (id,a) values (766,23);
+insert into t (id,a) values (766,24);
+insert into t (id,a) values (766,25);
+insert into t (id,a) values (766,26);
+insert into t (id,a) values (766,27);
+insert into t (id,a) values (766,28);
+insert into t (id,a) values (766,29);
+insert into t (id,a) values (766,30);
+insert into t (id,a) values (766,31);
+insert into t (id,a) values (766,32);
+insert into t (id,a) values (766,33);
+insert into t (id,a) values (766,34);
+insert into t (id,a) values (766,35);
+insert into t (id,a) values (766,36);
+insert into t (id,a) values (766,37);
+insert into t (id,a) values (766,38);
+insert into t (id,a) values (766,39);
+insert into t (id,a) values (766,40);
+insert into t (id,a) values (766,41);
+insert into t (id,a) values (766,42);
+insert into t (id,a) values (766,43);
+insert into t (id,a) values (766,44);
+insert into t (id,a) values (766,45);
+insert into t (id,a) values (766,46);
+insert into t (id,a) values (766,47);
+insert into t (id,a) values (766,48);
+insert into t (id,a) values (766,49);
+insert into t (id,a) values (766,50);
+insert into t (id,a) values (766,51);
+insert into t (id,a) values (766,52);
+insert into t (id,a) values (766,53);
+insert into t (id,a) values (766,54);
+insert into t (id,a) values (766,55);
+insert into t (id,a) values (766,56);
+insert into t (id,a) values (766,57);
+insert into t (id,a) values (766,58);
+insert into t (id,a) values (766,59);
+insert into t (id,a) values (766,60);
+insert into t (id,a) values (766,61);
+insert into t (id,a) values (766,62);
+insert into t (id,a) values (766,63);
+insert into t (id,a) values (766,64);
+insert into t (id,a) values (766,65);
+insert into t (id,a) values (766,66);
+insert into t (id,a) values (766,67);
+insert into t (id,a) values (766,68);
+insert into t (id,a) values (766,69);
+insert into t (id,a) values (766,70);
+insert into t (id,a) values (766,71);
+insert into t (id,a) values (766,72);
+insert into t (id,a) values (766,73);
+insert into t (id,a) values (766,74);
+insert into t (id,a) values (766,75);
+insert into t (id,a) values (766,76);
+insert into t (id,a) values (766,77);
+insert into t (id,a) values (766,78);
+insert into t (id,a) values (766,79);
+insert into t (id,a) values (766,80);
+insert into t (id,a) values (766,81);
+insert into t (id,a) values (766,82);
+insert into t (id,a) values (766,83);
+insert into t (id,a) values (766,84);
+insert into t (id,a) values (766,85);
+insert into t (id,a) values (766,86);
+insert into t (id,a) values (766,87);
+insert into t (id,a) values (766,88);
+insert into t (id,a) values (766,89);
+insert into t (id,a) values (766,90);
+insert into t (id,a) values (766,91);
+insert into t (id,a) values (766,92);
+insert into t (id,a) values (766,93);
+insert into t (id,a) values (766,94);
+insert into t (id,a) values (766,95);
+insert into t (id,a) values (766,96);
+insert into t (id,a) values (766,97);
+insert into t (id,a) values (766,98);
+insert into t (id,a) values (766,99);
+insert into t (id,a) values (767,0);
+insert into t (id,a) values (767,1);
+insert into t (id,a) values (767,2);
+insert into t (id,a) values (767,3);
+insert into t (id,a) values (767,4);
+insert into t (id,a) values (767,5);
+insert into t (id,a) values (767,6);
+insert into t (id,a) values (767,7);
+insert into t (id,a) values (767,8);
+insert into t (id,a) values (767,9);
+insert into t (id,a) values (767,10);
+insert into t (id,a) values (767,11);
+insert into t (id,a) values (767,12);
+insert into t (id,a) values (767,13);
+insert into t (id,a) values (767,14);
+insert into t (id,a) values (767,15);
+insert into t (id,a) values (767,16);
+insert into t (id,a) values (767,17);
+insert into t (id,a) values (767,18);
+insert into t (id,a) values (767,19);
+insert into t (id,a) values (767,20);
+insert into t (id,a) values (767,21);
+insert into t (id,a) values (767,22);
+insert into t (id,a) values (767,23);
+insert into t (id,a) values (767,24);
+insert into t (id,a) values (767,25);
+insert into t (id,a) values (767,26);
+insert into t (id,a) values (767,27);
+insert into t (id,a) values (767,28);
+insert into t (id,a) values (767,29);
+insert into t (id,a) values (767,30);
+insert into t (id,a) values (767,31);
+insert into t (id,a) values (767,32);
+insert into t (id,a) values (767,33);
+insert into t (id,a) values (767,34);
+insert into t (id,a) values (767,35);
+insert into t (id,a) values (767,36);
+insert into t (id,a) values (767,37);
+insert into t (id,a) values (767,38);
+insert into t (id,a) values (767,39);
+insert into t (id,a) values (767,40);
+insert into t (id,a) values (767,41);
+insert into t (id,a) values (767,42);
+insert into t (id,a) values (767,43);
+insert into t (id,a) values (767,44);
+insert into t (id,a) values (767,45);
+insert into t (id,a) values (767,46);
+insert into t (id,a) values (767,47);
+insert into t (id,a) values (767,48);
+insert into t (id,a) values (767,49);
+insert into t (id,a) values (767,50);
+insert into t (id,a) values (767,51);
+insert into t (id,a) values (767,52);
+insert into t (id,a) values (767,53);
+insert into t (id,a) values (767,54);
+insert into t (id,a) values (767,55);
+insert into t (id,a) values (767,56);
+insert into t (id,a) values (767,57);
+insert into t (id,a) values (767,58);
+insert into t (id,a) values (767,59);
+insert into t (id,a) values (767,60);
+insert into t (id,a) values (767,61);
+insert into t (id,a) values (767,62);
+insert into t (id,a) values (767,63);
+insert into t (id,a) values (767,64);
+insert into t (id,a) values (767,65);
+insert into t (id,a) values (767,66);
+insert into t (id,a) values (767,67);
+insert into t (id,a) values (767,68);
+insert into t (id,a) values (767,69);
+insert into t (id,a) values (767,70);
+insert into t (id,a) values (767,71);
+insert into t (id,a) values (767,72);
+insert into t (id,a) values (767,73);
+insert into t (id,a) values (767,74);
+insert into t (id,a) values (767,75);
+insert into t (id,a) values (767,76);
+insert into t (id,a) values (767,77);
+insert into t (id,a) values (767,78);
+insert into t (id,a) values (767,79);
+insert into t (id,a) values (767,80);
+insert into t (id,a) values (767,81);
+insert into t (id,a) values (767,82);
+insert into t (id,a) values (767,83);
+insert into t (id,a) values (767,84);
+insert into t (id,a) values (767,85);
+insert into t (id,a) values (767,86);
+insert into t (id,a) values (767,87);
+insert into t (id,a) values (767,88);
+insert into t (id,a) values (767,89);
+insert into t (id,a) values (767,90);
+insert into t (id,a) values (767,91);
+insert into t (id,a) values (767,92);
+insert into t (id,a) values (767,93);
+insert into t (id,a) values (767,94);
+insert into t (id,a) values (767,95);
+insert into t (id,a) values (767,96);
+insert into t (id,a) values (767,97);
+insert into t (id,a) values (767,98);
+insert into t (id,a) values (767,99);
+insert into t (id,a) values (768,0);
+insert into t (id,a) values (768,1);
+insert into t (id,a) values (768,2);
+insert into t (id,a) values (768,3);
+insert into t (id,a) values (768,4);
+insert into t (id,a) values (768,5);
+insert into t (id,a) values (768,6);
+insert into t (id,a) values (768,7);
+insert into t (id,a) values (768,8);
+insert into t (id,a) values (768,9);
+insert into t (id,a) values (768,10);
+insert into t (id,a) values (768,11);
+insert into t (id,a) values (768,12);
+insert into t (id,a) values (768,13);
+insert into t (id,a) values (768,14);
+insert into t (id,a) values (768,15);
+insert into t (id,a) values (768,16);
+insert into t (id,a) values (768,17);
+insert into t (id,a) values (768,18);
+insert into t (id,a) values (768,19);
+insert into t (id,a) values (768,20);
+insert into t (id,a) values (768,21);
+insert into t (id,a) values (768,22);
+insert into t (id,a) values (768,23);
+insert into t (id,a) values (768,24);
+insert into t (id,a) values (768,25);
+insert into t (id,a) values (768,26);
+insert into t (id,a) values (768,27);
+insert into t (id,a) values (768,28);
+insert into t (id,a) values (768,29);
+insert into t (id,a) values (768,30);
+insert into t (id,a) values (768,31);
+insert into t (id,a) values (768,32);
+insert into t (id,a) values (768,33);
+insert into t (id,a) values (768,34);
+insert into t (id,a) values (768,35);
+insert into t (id,a) values (768,36);
+insert into t (id,a) values (768,37);
+insert into t (id,a) values (768,38);
+insert into t (id,a) values (768,39);
+insert into t (id,a) values (768,40);
+insert into t (id,a) values (768,41);
+insert into t (id,a) values (768,42);
+insert into t (id,a) values (768,43);
+insert into t (id,a) values (768,44);
+insert into t (id,a) values (768,45);
+insert into t (id,a) values (768,46);
+insert into t (id,a) values (768,47);
+insert into t (id,a) values (768,48);
+insert into t (id,a) values (768,49);
+insert into t (id,a) values (768,50);
+insert into t (id,a) values (768,51);
+insert into t (id,a) values (768,52);
+insert into t (id,a) values (768,53);
+insert into t (id,a) values (768,54);
+insert into t (id,a) values (768,55);
+insert into t (id,a) values (768,56);
+insert into t (id,a) values (768,57);
+insert into t (id,a) values (768,58);
+insert into t (id,a) values (768,59);
+insert into t (id,a) values (768,60);
+insert into t (id,a) values (768,61);
+insert into t (id,a) values (768,62);
+insert into t (id,a) values (768,63);
+insert into t (id,a) values (768,64);
+insert into t (id,a) values (768,65);
+insert into t (id,a) values (768,66);
+insert into t (id,a) values (768,67);
+insert into t (id,a) values (768,68);
+insert into t (id,a) values (768,69);
+insert into t (id,a) values (768,70);
+insert into t (id,a) values (768,71);
+insert into t (id,a) values (768,72);
+insert into t (id,a) values (768,73);
+insert into t (id,a) values (768,74);
+insert into t (id,a) values (768,75);
+insert into t (id,a) values (768,76);
+insert into t (id,a) values (768,77);
+insert into t (id,a) values (768,78);
+insert into t (id,a) values (768,79);
+insert into t (id,a) values (768,80);
+insert into t (id,a) values (768,81);
+insert into t (id,a) values (768,82);
+insert into t (id,a) values (768,83);
+insert into t (id,a) values (768,84);
+insert into t (id,a) values (768,85);
+insert into t (id,a) values (768,86);
+insert into t (id,a) values (768,87);
+insert into t (id,a) values (768,88);
+insert into t (id,a) values (768,89);
+insert into t (id,a) values (768,90);
+insert into t (id,a) values (768,91);
+insert into t (id,a) values (768,92);
+insert into t (id,a) values (768,93);
+insert into t (id,a) values (768,94);
+insert into t (id,a) values (768,95);
+insert into t (id,a) values (768,96);
+insert into t (id,a) values (768,97);
+insert into t (id,a) values (768,98);
+insert into t (id,a) values (768,99);
+insert into t (id,a) values (769,0);
+insert into t (id,a) values (769,1);
+insert into t (id,a) values (769,2);
+insert into t (id,a) values (769,3);
+insert into t (id,a) values (769,4);
+insert into t (id,a) values (769,5);
+insert into t (id,a) values (769,6);
+insert into t (id,a) values (769,7);
+insert into t (id,a) values (769,8);
+insert into t (id,a) values (769,9);
+insert into t (id,a) values (769,10);
+insert into t (id,a) values (769,11);
+insert into t (id,a) values (769,12);
+insert into t (id,a) values (769,13);
+insert into t (id,a) values (769,14);
+insert into t (id,a) values (769,15);
+insert into t (id,a) values (769,16);
+insert into t (id,a) values (769,17);
+insert into t (id,a) values (769,18);
+insert into t (id,a) values (769,19);
+insert into t (id,a) values (769,20);
+insert into t (id,a) values (769,21);
+insert into t (id,a) values (769,22);
+insert into t (id,a) values (769,23);
+insert into t (id,a) values (769,24);
+insert into t (id,a) values (769,25);
+insert into t (id,a) values (769,26);
+insert into t (id,a) values (769,27);
+insert into t (id,a) values (769,28);
+insert into t (id,a) values (769,29);
+insert into t (id,a) values (769,30);
+insert into t (id,a) values (769,31);
+insert into t (id,a) values (769,32);
+insert into t (id,a) values (769,33);
+insert into t (id,a) values (769,34);
+insert into t (id,a) values (769,35);
+insert into t (id,a) values (769,36);
+insert into t (id,a) values (769,37);
+insert into t (id,a) values (769,38);
+insert into t (id,a) values (769,39);
+insert into t (id,a) values (769,40);
+insert into t (id,a) values (769,41);
+insert into t (id,a) values (769,42);
+insert into t (id,a) values (769,43);
+insert into t (id,a) values (769,44);
+insert into t (id,a) values (769,45);
+insert into t (id,a) values (769,46);
+insert into t (id,a) values (769,47);
+insert into t (id,a) values (769,48);
+insert into t (id,a) values (769,49);
+insert into t (id,a) values (769,50);
+insert into t (id,a) values (769,51);
+insert into t (id,a) values (769,52);
+insert into t (id,a) values (769,53);
+insert into t (id,a) values (769,54);
+insert into t (id,a) values (769,55);
+insert into t (id,a) values (769,56);
+insert into t (id,a) values (769,57);
+insert into t (id,a) values (769,58);
+insert into t (id,a) values (769,59);
+insert into t (id,a) values (769,60);
+insert into t (id,a) values (769,61);
+insert into t (id,a) values (769,62);
+insert into t (id,a) values (769,63);
+insert into t (id,a) values (769,64);
+insert into t (id,a) values (769,65);
+insert into t (id,a) values (769,66);
+insert into t (id,a) values (769,67);
+insert into t (id,a) values (769,68);
+insert into t (id,a) values (769,69);
+insert into t (id,a) values (769,70);
+insert into t (id,a) values (769,71);
+insert into t (id,a) values (769,72);
+insert into t (id,a) values (769,73);
+insert into t (id,a) values (769,74);
+insert into t (id,a) values (769,75);
+insert into t (id,a) values (769,76);
+insert into t (id,a) values (769,77);
+insert into t (id,a) values (769,78);
+insert into t (id,a) values (769,79);
+insert into t (id,a) values (769,80);
+insert into t (id,a) values (769,81);
+insert into t (id,a) values (769,82);
+insert into t (id,a) values (769,83);
+insert into t (id,a) values (769,84);
+insert into t (id,a) values (769,85);
+insert into t (id,a) values (769,86);
+insert into t (id,a) values (769,87);
+insert into t (id,a) values (769,88);
+insert into t (id,a) values (769,89);
+insert into t (id,a) values (769,90);
+insert into t (id,a) values (769,91);
+insert into t (id,a) values (769,92);
+insert into t (id,a) values (769,93);
+insert into t (id,a) values (769,94);
+insert into t (id,a) values (769,95);
+insert into t (id,a) values (769,96);
+insert into t (id,a) values (769,97);
+insert into t (id,a) values (769,98);
+insert into t (id,a) values (769,99);
+insert into t (id,a) values (770,0);
+insert into t (id,a) values (770,1);
+insert into t (id,a) values (770,2);
+insert into t (id,a) values (770,3);
+insert into t (id,a) values (770,4);
+insert into t (id,a) values (770,5);
+insert into t (id,a) values (770,6);
+insert into t (id,a) values (770,7);
+insert into t (id,a) values (770,8);
+insert into t (id,a) values (770,9);
+insert into t (id,a) values (770,10);
+insert into t (id,a) values (770,11);
+insert into t (id,a) values (770,12);
+insert into t (id,a) values (770,13);
+insert into t (id,a) values (770,14);
+insert into t (id,a) values (770,15);
+insert into t (id,a) values (770,16);
+insert into t (id,a) values (770,17);
+insert into t (id,a) values (770,18);
+insert into t (id,a) values (770,19);
+insert into t (id,a) values (770,20);
+insert into t (id,a) values (770,21);
+insert into t (id,a) values (770,22);
+insert into t (id,a) values (770,23);
+insert into t (id,a) values (770,24);
+insert into t (id,a) values (770,25);
+insert into t (id,a) values (770,26);
+insert into t (id,a) values (770,27);
+insert into t (id,a) values (770,28);
+insert into t (id,a) values (770,29);
+insert into t (id,a) values (770,30);
+insert into t (id,a) values (770,31);
+insert into t (id,a) values (770,32);
+insert into t (id,a) values (770,33);
+insert into t (id,a) values (770,34);
+insert into t (id,a) values (770,35);
+insert into t (id,a) values (770,36);
+insert into t (id,a) values (770,37);
+insert into t (id,a) values (770,38);
+insert into t (id,a) values (770,39);
+insert into t (id,a) values (770,40);
+insert into t (id,a) values (770,41);
+insert into t (id,a) values (770,42);
+insert into t (id,a) values (770,43);
+insert into t (id,a) values (770,44);
+insert into t (id,a) values (770,45);
+insert into t (id,a) values (770,46);
+insert into t (id,a) values (770,47);
+insert into t (id,a) values (770,48);
+insert into t (id,a) values (770,49);
+insert into t (id,a) values (770,50);
+insert into t (id,a) values (770,51);
+insert into t (id,a) values (770,52);
+insert into t (id,a) values (770,53);
+insert into t (id,a) values (770,54);
+insert into t (id,a) values (770,55);
+insert into t (id,a) values (770,56);
+insert into t (id,a) values (770,57);
+insert into t (id,a) values (770,58);
+insert into t (id,a) values (770,59);
+insert into t (id,a) values (770,60);
+insert into t (id,a) values (770,61);
+insert into t (id,a) values (770,62);
+insert into t (id,a) values (770,63);
+insert into t (id,a) values (770,64);
+insert into t (id,a) values (770,65);
+insert into t (id,a) values (770,66);
+insert into t (id,a) values (770,67);
+insert into t (id,a) values (770,68);
+insert into t (id,a) values (770,69);
+insert into t (id,a) values (770,70);
+insert into t (id,a) values (770,71);
+insert into t (id,a) values (770,72);
+insert into t (id,a) values (770,73);
+insert into t (id,a) values (770,74);
+insert into t (id,a) values (770,75);
+insert into t (id,a) values (770,76);
+insert into t (id,a) values (770,77);
+insert into t (id,a) values (770,78);
+insert into t (id,a) values (770,79);
+insert into t (id,a) values (770,80);
+insert into t (id,a) values (770,81);
+insert into t (id,a) values (770,82);
+insert into t (id,a) values (770,83);
+insert into t (id,a) values (770,84);
+insert into t (id,a) values (770,85);
+insert into t (id,a) values (770,86);
+insert into t (id,a) values (770,87);
+insert into t (id,a) values (770,88);
+insert into t (id,a) values (770,89);
+insert into t (id,a) values (770,90);
+insert into t (id,a) values (770,91);
+insert into t (id,a) values (770,92);
+insert into t (id,a) values (770,93);
+insert into t (id,a) values (770,94);
+insert into t (id,a) values (770,95);
+insert into t (id,a) values (770,96);
+insert into t (id,a) values (770,97);
+insert into t (id,a) values (770,98);
+insert into t (id,a) values (770,99);
+insert into t (id,a) values (771,0);
+insert into t (id,a) values (771,1);
+insert into t (id,a) values (771,2);
+insert into t (id,a) values (771,3);
+insert into t (id,a) values (771,4);
+insert into t (id,a) values (771,5);
+insert into t (id,a) values (771,6);
+insert into t (id,a) values (771,7);
+insert into t (id,a) values (771,8);
+insert into t (id,a) values (771,9);
+insert into t (id,a) values (771,10);
+insert into t (id,a) values (771,11);
+insert into t (id,a) values (771,12);
+insert into t (id,a) values (771,13);
+insert into t (id,a) values (771,14);
+insert into t (id,a) values (771,15);
+insert into t (id,a) values (771,16);
+insert into t (id,a) values (771,17);
+insert into t (id,a) values (771,18);
+insert into t (id,a) values (771,19);
+insert into t (id,a) values (771,20);
+insert into t (id,a) values (771,21);
+insert into t (id,a) values (771,22);
+insert into t (id,a) values (771,23);
+insert into t (id,a) values (771,24);
+insert into t (id,a) values (771,25);
+insert into t (id,a) values (771,26);
+insert into t (id,a) values (771,27);
+insert into t (id,a) values (771,28);
+insert into t (id,a) values (771,29);
+insert into t (id,a) values (771,30);
+insert into t (id,a) values (771,31);
+insert into t (id,a) values (771,32);
+insert into t (id,a) values (771,33);
+insert into t (id,a) values (771,34);
+insert into t (id,a) values (771,35);
+insert into t (id,a) values (771,36);
+insert into t (id,a) values (771,37);
+insert into t (id,a) values (771,38);
+insert into t (id,a) values (771,39);
+insert into t (id,a) values (771,40);
+insert into t (id,a) values (771,41);
+insert into t (id,a) values (771,42);
+insert into t (id,a) values (771,43);
+insert into t (id,a) values (771,44);
+insert into t (id,a) values (771,45);
+insert into t (id,a) values (771,46);
+insert into t (id,a) values (771,47);
+insert into t (id,a) values (771,48);
+insert into t (id,a) values (771,49);
+insert into t (id,a) values (771,50);
+insert into t (id,a) values (771,51);
+insert into t (id,a) values (771,52);
+insert into t (id,a) values (771,53);
+insert into t (id,a) values (771,54);
+insert into t (id,a) values (771,55);
+insert into t (id,a) values (771,56);
+insert into t (id,a) values (771,57);
+insert into t (id,a) values (771,58);
+insert into t (id,a) values (771,59);
+insert into t (id,a) values (771,60);
+insert into t (id,a) values (771,61);
+insert into t (id,a) values (771,62);
+insert into t (id,a) values (771,63);
+insert into t (id,a) values (771,64);
+insert into t (id,a) values (771,65);
+insert into t (id,a) values (771,66);
+insert into t (id,a) values (771,67);
+insert into t (id,a) values (771,68);
+insert into t (id,a) values (771,69);
+insert into t (id,a) values (771,70);
+insert into t (id,a) values (771,71);
+insert into t (id,a) values (771,72);
+insert into t (id,a) values (771,73);
+insert into t (id,a) values (771,74);
+insert into t (id,a) values (771,75);
+insert into t (id,a) values (771,76);
+insert into t (id,a) values (771,77);
+insert into t (id,a) values (771,78);
+insert into t (id,a) values (771,79);
+insert into t (id,a) values (771,80);
+insert into t (id,a) values (771,81);
+insert into t (id,a) values (771,82);
+insert into t (id,a) values (771,83);
+insert into t (id,a) values (771,84);
+insert into t (id,a) values (771,85);
+insert into t (id,a) values (771,86);
+insert into t (id,a) values (771,87);
+insert into t (id,a) values (771,88);
+insert into t (id,a) values (771,89);
+insert into t (id,a) values (771,90);
+insert into t (id,a) values (771,91);
+insert into t (id,a) values (771,92);
+insert into t (id,a) values (771,93);
+insert into t (id,a) values (771,94);
+insert into t (id,a) values (771,95);
+insert into t (id,a) values (771,96);
+insert into t (id,a) values (771,97);
+insert into t (id,a) values (771,98);
+insert into t (id,a) values (771,99);
+insert into t (id,a) values (772,0);
+insert into t (id,a) values (772,1);
+insert into t (id,a) values (772,2);
+insert into t (id,a) values (772,3);
+insert into t (id,a) values (772,4);
+insert into t (id,a) values (772,5);
+insert into t (id,a) values (772,6);
+insert into t (id,a) values (772,7);
+insert into t (id,a) values (772,8);
+insert into t (id,a) values (772,9);
+insert into t (id,a) values (772,10);
+insert into t (id,a) values (772,11);
+insert into t (id,a) values (772,12);
+insert into t (id,a) values (772,13);
+insert into t (id,a) values (772,14);
+insert into t (id,a) values (772,15);
+insert into t (id,a) values (772,16);
+insert into t (id,a) values (772,17);
+insert into t (id,a) values (772,18);
+insert into t (id,a) values (772,19);
+insert into t (id,a) values (772,20);
+insert into t (id,a) values (772,21);
+insert into t (id,a) values (772,22);
+insert into t (id,a) values (772,23);
+insert into t (id,a) values (772,24);
+insert into t (id,a) values (772,25);
+insert into t (id,a) values (772,26);
+insert into t (id,a) values (772,27);
+insert into t (id,a) values (772,28);
+insert into t (id,a) values (772,29);
+insert into t (id,a) values (772,30);
+insert into t (id,a) values (772,31);
+insert into t (id,a) values (772,32);
+insert into t (id,a) values (772,33);
+insert into t (id,a) values (772,34);
+insert into t (id,a) values (772,35);
+insert into t (id,a) values (772,36);
+insert into t (id,a) values (772,37);
+insert into t (id,a) values (772,38);
+insert into t (id,a) values (772,39);
+insert into t (id,a) values (772,40);
+insert into t (id,a) values (772,41);
+insert into t (id,a) values (772,42);
+insert into t (id,a) values (772,43);
+insert into t (id,a) values (772,44);
+insert into t (id,a) values (772,45);
+insert into t (id,a) values (772,46);
+insert into t (id,a) values (772,47);
+insert into t (id,a) values (772,48);
+insert into t (id,a) values (772,49);
+insert into t (id,a) values (772,50);
+insert into t (id,a) values (772,51);
+insert into t (id,a) values (772,52);
+insert into t (id,a) values (772,53);
+insert into t (id,a) values (772,54);
+insert into t (id,a) values (772,55);
+insert into t (id,a) values (772,56);
+insert into t (id,a) values (772,57);
+insert into t (id,a) values (772,58);
+insert into t (id,a) values (772,59);
+insert into t (id,a) values (772,60);
+insert into t (id,a) values (772,61);
+insert into t (id,a) values (772,62);
+insert into t (id,a) values (772,63);
+insert into t (id,a) values (772,64);
+insert into t (id,a) values (772,65);
+insert into t (id,a) values (772,66);
+insert into t (id,a) values (772,67);
+insert into t (id,a) values (772,68);
+insert into t (id,a) values (772,69);
+insert into t (id,a) values (772,70);
+insert into t (id,a) values (772,71);
+insert into t (id,a) values (772,72);
+insert into t (id,a) values (772,73);
+insert into t (id,a) values (772,74);
+insert into t (id,a) values (772,75);
+insert into t (id,a) values (772,76);
+insert into t (id,a) values (772,77);
+insert into t (id,a) values (772,78);
+insert into t (id,a) values (772,79);
+insert into t (id,a) values (772,80);
+insert into t (id,a) values (772,81);
+insert into t (id,a) values (772,82);
+insert into t (id,a) values (772,83);
+insert into t (id,a) values (772,84);
+insert into t (id,a) values (772,85);
+insert into t (id,a) values (772,86);
+insert into t (id,a) values (772,87);
+insert into t (id,a) values (772,88);
+insert into t (id,a) values (772,89);
+insert into t (id,a) values (772,90);
+insert into t (id,a) values (772,91);
+insert into t (id,a) values (772,92);
+insert into t (id,a) values (772,93);
+insert into t (id,a) values (772,94);
+insert into t (id,a) values (772,95);
+insert into t (id,a) values (772,96);
+insert into t (id,a) values (772,97);
+insert into t (id,a) values (772,98);
+insert into t (id,a) values (772,99);
+insert into t (id,a) values (773,0);
+insert into t (id,a) values (773,1);
+insert into t (id,a) values (773,2);
+insert into t (id,a) values (773,3);
+insert into t (id,a) values (773,4);
+insert into t (id,a) values (773,5);
+insert into t (id,a) values (773,6);
+insert into t (id,a) values (773,7);
+insert into t (id,a) values (773,8);
+insert into t (id,a) values (773,9);
+insert into t (id,a) values (773,10);
+insert into t (id,a) values (773,11);
+insert into t (id,a) values (773,12);
+insert into t (id,a) values (773,13);
+insert into t (id,a) values (773,14);
+insert into t (id,a) values (773,15);
+insert into t (id,a) values (773,16);
+insert into t (id,a) values (773,17);
+insert into t (id,a) values (773,18);
+insert into t (id,a) values (773,19);
+insert into t (id,a) values (773,20);
+insert into t (id,a) values (773,21);
+insert into t (id,a) values (773,22);
+insert into t (id,a) values (773,23);
+insert into t (id,a) values (773,24);
+insert into t (id,a) values (773,25);
+insert into t (id,a) values (773,26);
+insert into t (id,a) values (773,27);
+insert into t (id,a) values (773,28);
+insert into t (id,a) values (773,29);
+insert into t (id,a) values (773,30);
+insert into t (id,a) values (773,31);
+insert into t (id,a) values (773,32);
+insert into t (id,a) values (773,33);
+insert into t (id,a) values (773,34);
+insert into t (id,a) values (773,35);
+insert into t (id,a) values (773,36);
+insert into t (id,a) values (773,37);
+insert into t (id,a) values (773,38);
+insert into t (id,a) values (773,39);
+insert into t (id,a) values (773,40);
+insert into t (id,a) values (773,41);
+insert into t (id,a) values (773,42);
+insert into t (id,a) values (773,43);
+insert into t (id,a) values (773,44);
+insert into t (id,a) values (773,45);
+insert into t (id,a) values (773,46);
+insert into t (id,a) values (773,47);
+insert into t (id,a) values (773,48);
+insert into t (id,a) values (773,49);
+insert into t (id,a) values (773,50);
+insert into t (id,a) values (773,51);
+insert into t (id,a) values (773,52);
+insert into t (id,a) values (773,53);
+insert into t (id,a) values (773,54);
+insert into t (id,a) values (773,55);
+insert into t (id,a) values (773,56);
+insert into t (id,a) values (773,57);
+insert into t (id,a) values (773,58);
+insert into t (id,a) values (773,59);
+insert into t (id,a) values (773,60);
+insert into t (id,a) values (773,61);
+insert into t (id,a) values (773,62);
+insert into t (id,a) values (773,63);
+insert into t (id,a) values (773,64);
+insert into t (id,a) values (773,65);
+insert into t (id,a) values (773,66);
+insert into t (id,a) values (773,67);
+insert into t (id,a) values (773,68);
+insert into t (id,a) values (773,69);
+insert into t (id,a) values (773,70);
+insert into t (id,a) values (773,71);
+insert into t (id,a) values (773,72);
+insert into t (id,a) values (773,73);
+insert into t (id,a) values (773,74);
+insert into t (id,a) values (773,75);
+insert into t (id,a) values (773,76);
+insert into t (id,a) values (773,77);
+insert into t (id,a) values (773,78);
+insert into t (id,a) values (773,79);
+insert into t (id,a) values (773,80);
+insert into t (id,a) values (773,81);
+insert into t (id,a) values (773,82);
+insert into t (id,a) values (773,83);
+insert into t (id,a) values (773,84);
+insert into t (id,a) values (773,85);
+insert into t (id,a) values (773,86);
+insert into t (id,a) values (773,87);
+insert into t (id,a) values (773,88);
+insert into t (id,a) values (773,89);
+insert into t (id,a) values (773,90);
+insert into t (id,a) values (773,91);
+insert into t (id,a) values (773,92);
+insert into t (id,a) values (773,93);
+insert into t (id,a) values (773,94);
+insert into t (id,a) values (773,95);
+insert into t (id,a) values (773,96);
+insert into t (id,a) values (773,97);
+insert into t (id,a) values (773,98);
+insert into t (id,a) values (773,99);
+insert into t (id,a) values (774,0);
+insert into t (id,a) values (774,1);
+insert into t (id,a) values (774,2);
+insert into t (id,a) values (774,3);
+insert into t (id,a) values (774,4);
+insert into t (id,a) values (774,5);
+insert into t (id,a) values (774,6);
+insert into t (id,a) values (774,7);
+insert into t (id,a) values (774,8);
+insert into t (id,a) values (774,9);
+insert into t (id,a) values (774,10);
+insert into t (id,a) values (774,11);
+insert into t (id,a) values (774,12);
+insert into t (id,a) values (774,13);
+insert into t (id,a) values (774,14);
+insert into t (id,a) values (774,15);
+insert into t (id,a) values (774,16);
+insert into t (id,a) values (774,17);
+insert into t (id,a) values (774,18);
+insert into t (id,a) values (774,19);
+insert into t (id,a) values (774,20);
+insert into t (id,a) values (774,21);
+insert into t (id,a) values (774,22);
+insert into t (id,a) values (774,23);
+insert into t (id,a) values (774,24);
+insert into t (id,a) values (774,25);
+insert into t (id,a) values (774,26);
+insert into t (id,a) values (774,27);
+insert into t (id,a) values (774,28);
+insert into t (id,a) values (774,29);
+insert into t (id,a) values (774,30);
+insert into t (id,a) values (774,31);
+insert into t (id,a) values (774,32);
+insert into t (id,a) values (774,33);
+insert into t (id,a) values (774,34);
+insert into t (id,a) values (774,35);
+insert into t (id,a) values (774,36);
+insert into t (id,a) values (774,37);
+insert into t (id,a) values (774,38);
+insert into t (id,a) values (774,39);
+insert into t (id,a) values (774,40);
+insert into t (id,a) values (774,41);
+insert into t (id,a) values (774,42);
+insert into t (id,a) values (774,43);
+insert into t (id,a) values (774,44);
+insert into t (id,a) values (774,45);
+insert into t (id,a) values (774,46);
+insert into t (id,a) values (774,47);
+insert into t (id,a) values (774,48);
+insert into t (id,a) values (774,49);
+insert into t (id,a) values (774,50);
+insert into t (id,a) values (774,51);
+insert into t (id,a) values (774,52);
+insert into t (id,a) values (774,53);
+insert into t (id,a) values (774,54);
+insert into t (id,a) values (774,55);
+insert into t (id,a) values (774,56);
+insert into t (id,a) values (774,57);
+insert into t (id,a) values (774,58);
+insert into t (id,a) values (774,59);
+insert into t (id,a) values (774,60);
+insert into t (id,a) values (774,61);
+insert into t (id,a) values (774,62);
+insert into t (id,a) values (774,63);
+insert into t (id,a) values (774,64);
+insert into t (id,a) values (774,65);
+insert into t (id,a) values (774,66);
+insert into t (id,a) values (774,67);
+insert into t (id,a) values (774,68);
+insert into t (id,a) values (774,69);
+insert into t (id,a) values (774,70);
+insert into t (id,a) values (774,71);
+insert into t (id,a) values (774,72);
+insert into t (id,a) values (774,73);
+insert into t (id,a) values (774,74);
+insert into t (id,a) values (774,75);
+insert into t (id,a) values (774,76);
+insert into t (id,a) values (774,77);
+insert into t (id,a) values (774,78);
+insert into t (id,a) values (774,79);
+insert into t (id,a) values (774,80);
+insert into t (id,a) values (774,81);
+insert into t (id,a) values (774,82);
+insert into t (id,a) values (774,83);
+insert into t (id,a) values (774,84);
+insert into t (id,a) values (774,85);
+insert into t (id,a) values (774,86);
+insert into t (id,a) values (774,87);
+insert into t (id,a) values (774,88);
+insert into t (id,a) values (774,89);
+insert into t (id,a) values (774,90);
+insert into t (id,a) values (774,91);
+insert into t (id,a) values (774,92);
+insert into t (id,a) values (774,93);
+insert into t (id,a) values (774,94);
+insert into t (id,a) values (774,95);
+insert into t (id,a) values (774,96);
+insert into t (id,a) values (774,97);
+insert into t (id,a) values (774,98);
+insert into t (id,a) values (774,99);
+insert into t (id,a) values (775,0);
+insert into t (id,a) values (775,1);
+insert into t (id,a) values (775,2);
+insert into t (id,a) values (775,3);
+insert into t (id,a) values (775,4);
+insert into t (id,a) values (775,5);
+insert into t (id,a) values (775,6);
+insert into t (id,a) values (775,7);
+insert into t (id,a) values (775,8);
+insert into t (id,a) values (775,9);
+insert into t (id,a) values (775,10);
+insert into t (id,a) values (775,11);
+insert into t (id,a) values (775,12);
+insert into t (id,a) values (775,13);
+insert into t (id,a) values (775,14);
+insert into t (id,a) values (775,15);
+insert into t (id,a) values (775,16);
+insert into t (id,a) values (775,17);
+insert into t (id,a) values (775,18);
+insert into t (id,a) values (775,19);
+insert into t (id,a) values (775,20);
+insert into t (id,a) values (775,21);
+insert into t (id,a) values (775,22);
+insert into t (id,a) values (775,23);
+insert into t (id,a) values (775,24);
+insert into t (id,a) values (775,25);
+insert into t (id,a) values (775,26);
+insert into t (id,a) values (775,27);
+insert into t (id,a) values (775,28);
+insert into t (id,a) values (775,29);
+insert into t (id,a) values (775,30);
+insert into t (id,a) values (775,31);
+insert into t (id,a) values (775,32);
+insert into t (id,a) values (775,33);
+insert into t (id,a) values (775,34);
+insert into t (id,a) values (775,35);
+insert into t (id,a) values (775,36);
+insert into t (id,a) values (775,37);
+insert into t (id,a) values (775,38);
+insert into t (id,a) values (775,39);
+insert into t (id,a) values (775,40);
+insert into t (id,a) values (775,41);
+insert into t (id,a) values (775,42);
+insert into t (id,a) values (775,43);
+insert into t (id,a) values (775,44);
+insert into t (id,a) values (775,45);
+insert into t (id,a) values (775,46);
+insert into t (id,a) values (775,47);
+insert into t (id,a) values (775,48);
+insert into t (id,a) values (775,49);
+insert into t (id,a) values (775,50);
+insert into t (id,a) values (775,51);
+insert into t (id,a) values (775,52);
+insert into t (id,a) values (775,53);
+insert into t (id,a) values (775,54);
+insert into t (id,a) values (775,55);
+insert into t (id,a) values (775,56);
+insert into t (id,a) values (775,57);
+insert into t (id,a) values (775,58);
+insert into t (id,a) values (775,59);
+insert into t (id,a) values (775,60);
+insert into t (id,a) values (775,61);
+insert into t (id,a) values (775,62);
+insert into t (id,a) values (775,63);
+insert into t (id,a) values (775,64);
+insert into t (id,a) values (775,65);
+insert into t (id,a) values (775,66);
+insert into t (id,a) values (775,67);
+insert into t (id,a) values (775,68);
+insert into t (id,a) values (775,69);
+insert into t (id,a) values (775,70);
+insert into t (id,a) values (775,71);
+insert into t (id,a) values (775,72);
+insert into t (id,a) values (775,73);
+insert into t (id,a) values (775,74);
+insert into t (id,a) values (775,75);
+insert into t (id,a) values (775,76);
+insert into t (id,a) values (775,77);
+insert into t (id,a) values (775,78);
+insert into t (id,a) values (775,79);
+insert into t (id,a) values (775,80);
+insert into t (id,a) values (775,81);
+insert into t (id,a) values (775,82);
+insert into t (id,a) values (775,83);
+insert into t (id,a) values (775,84);
+insert into t (id,a) values (775,85);
+insert into t (id,a) values (775,86);
+insert into t (id,a) values (775,87);
+insert into t (id,a) values (775,88);
+insert into t (id,a) values (775,89);
+insert into t (id,a) values (775,90);
+insert into t (id,a) values (775,91);
+insert into t (id,a) values (775,92);
+insert into t (id,a) values (775,93);
+insert into t (id,a) values (775,94);
+insert into t (id,a) values (775,95);
+insert into t (id,a) values (775,96);
+insert into t (id,a) values (775,97);
+insert into t (id,a) values (775,98);
+insert into t (id,a) values (775,99);
+insert into t (id,a) values (776,0);
+insert into t (id,a) values (776,1);
+insert into t (id,a) values (776,2);
+insert into t (id,a) values (776,3);
+insert into t (id,a) values (776,4);
+insert into t (id,a) values (776,5);
+insert into t (id,a) values (776,6);
+insert into t (id,a) values (776,7);
+insert into t (id,a) values (776,8);
+insert into t (id,a) values (776,9);
+insert into t (id,a) values (776,10);
+insert into t (id,a) values (776,11);
+insert into t (id,a) values (776,12);
+insert into t (id,a) values (776,13);
+insert into t (id,a) values (776,14);
+insert into t (id,a) values (776,15);
+insert into t (id,a) values (776,16);
+insert into t (id,a) values (776,17);
+insert into t (id,a) values (776,18);
+insert into t (id,a) values (776,19);
+insert into t (id,a) values (776,20);
+insert into t (id,a) values (776,21);
+insert into t (id,a) values (776,22);
+insert into t (id,a) values (776,23);
+insert into t (id,a) values (776,24);
+insert into t (id,a) values (776,25);
+insert into t (id,a) values (776,26);
+insert into t (id,a) values (776,27);
+insert into t (id,a) values (776,28);
+insert into t (id,a) values (776,29);
+insert into t (id,a) values (776,30);
+insert into t (id,a) values (776,31);
+insert into t (id,a) values (776,32);
+insert into t (id,a) values (776,33);
+insert into t (id,a) values (776,34);
+insert into t (id,a) values (776,35);
+insert into t (id,a) values (776,36);
+insert into t (id,a) values (776,37);
+insert into t (id,a) values (776,38);
+insert into t (id,a) values (776,39);
+insert into t (id,a) values (776,40);
+insert into t (id,a) values (776,41);
+insert into t (id,a) values (776,42);
+insert into t (id,a) values (776,43);
+insert into t (id,a) values (776,44);
+insert into t (id,a) values (776,45);
+insert into t (id,a) values (776,46);
+insert into t (id,a) values (776,47);
+insert into t (id,a) values (776,48);
+insert into t (id,a) values (776,49);
+insert into t (id,a) values (776,50);
+insert into t (id,a) values (776,51);
+insert into t (id,a) values (776,52);
+insert into t (id,a) values (776,53);
+insert into t (id,a) values (776,54);
+insert into t (id,a) values (776,55);
+insert into t (id,a) values (776,56);
+insert into t (id,a) values (776,57);
+insert into t (id,a) values (776,58);
+insert into t (id,a) values (776,59);
+insert into t (id,a) values (776,60);
+insert into t (id,a) values (776,61);
+insert into t (id,a) values (776,62);
+insert into t (id,a) values (776,63);
+insert into t (id,a) values (776,64);
+insert into t (id,a) values (776,65);
+insert into t (id,a) values (776,66);
+insert into t (id,a) values (776,67);
+insert into t (id,a) values (776,68);
+insert into t (id,a) values (776,69);
+insert into t (id,a) values (776,70);
+insert into t (id,a) values (776,71);
+insert into t (id,a) values (776,72);
+insert into t (id,a) values (776,73);
+insert into t (id,a) values (776,74);
+insert into t (id,a) values (776,75);
+insert into t (id,a) values (776,76);
+insert into t (id,a) values (776,77);
+insert into t (id,a) values (776,78);
+insert into t (id,a) values (776,79);
+insert into t (id,a) values (776,80);
+insert into t (id,a) values (776,81);
+insert into t (id,a) values (776,82);
+insert into t (id,a) values (776,83);
+insert into t (id,a) values (776,84);
+insert into t (id,a) values (776,85);
+insert into t (id,a) values (776,86);
+insert into t (id,a) values (776,87);
+insert into t (id,a) values (776,88);
+insert into t (id,a) values (776,89);
+insert into t (id,a) values (776,90);
+insert into t (id,a) values (776,91);
+insert into t (id,a) values (776,92);
+insert into t (id,a) values (776,93);
+insert into t (id,a) values (776,94);
+insert into t (id,a) values (776,95);
+insert into t (id,a) values (776,96);
+insert into t (id,a) values (776,97);
+insert into t (id,a) values (776,98);
+insert into t (id,a) values (776,99);
+insert into t (id,a) values (777,0);
+insert into t (id,a) values (777,1);
+insert into t (id,a) values (777,2);
+insert into t (id,a) values (777,3);
+insert into t (id,a) values (777,4);
+insert into t (id,a) values (777,5);
+insert into t (id,a) values (777,6);
+insert into t (id,a) values (777,7);
+insert into t (id,a) values (777,8);
+insert into t (id,a) values (777,9);
+insert into t (id,a) values (777,10);
+insert into t (id,a) values (777,11);
+insert into t (id,a) values (777,12);
+insert into t (id,a) values (777,13);
+insert into t (id,a) values (777,14);
+insert into t (id,a) values (777,15);
+insert into t (id,a) values (777,16);
+insert into t (id,a) values (777,17);
+insert into t (id,a) values (777,18);
+insert into t (id,a) values (777,19);
+insert into t (id,a) values (777,20);
+insert into t (id,a) values (777,21);
+insert into t (id,a) values (777,22);
+insert into t (id,a) values (777,23);
+insert into t (id,a) values (777,24);
+insert into t (id,a) values (777,25);
+insert into t (id,a) values (777,26);
+insert into t (id,a) values (777,27);
+insert into t (id,a) values (777,28);
+insert into t (id,a) values (777,29);
+insert into t (id,a) values (777,30);
+insert into t (id,a) values (777,31);
+insert into t (id,a) values (777,32);
+insert into t (id,a) values (777,33);
+insert into t (id,a) values (777,34);
+insert into t (id,a) values (777,35);
+insert into t (id,a) values (777,36);
+insert into t (id,a) values (777,37);
+insert into t (id,a) values (777,38);
+insert into t (id,a) values (777,39);
+insert into t (id,a) values (777,40);
+insert into t (id,a) values (777,41);
+insert into t (id,a) values (777,42);
+insert into t (id,a) values (777,43);
+insert into t (id,a) values (777,44);
+insert into t (id,a) values (777,45);
+insert into t (id,a) values (777,46);
+insert into t (id,a) values (777,47);
+insert into t (id,a) values (777,48);
+insert into t (id,a) values (777,49);
+insert into t (id,a) values (777,50);
+insert into t (id,a) values (777,51);
+insert into t (id,a) values (777,52);
+insert into t (id,a) values (777,53);
+insert into t (id,a) values (777,54);
+insert into t (id,a) values (777,55);
+insert into t (id,a) values (777,56);
+insert into t (id,a) values (777,57);
+insert into t (id,a) values (777,58);
+insert into t (id,a) values (777,59);
+insert into t (id,a) values (777,60);
+insert into t (id,a) values (777,61);
+insert into t (id,a) values (777,62);
+insert into t (id,a) values (777,63);
+insert into t (id,a) values (777,64);
+insert into t (id,a) values (777,65);
+insert into t (id,a) values (777,66);
+insert into t (id,a) values (777,67);
+insert into t (id,a) values (777,68);
+insert into t (id,a) values (777,69);
+insert into t (id,a) values (777,70);
+insert into t (id,a) values (777,71);
+insert into t (id,a) values (777,72);
+insert into t (id,a) values (777,73);
+insert into t (id,a) values (777,74);
+insert into t (id,a) values (777,75);
+insert into t (id,a) values (777,76);
+insert into t (id,a) values (777,77);
+insert into t (id,a) values (777,78);
+insert into t (id,a) values (777,79);
+insert into t (id,a) values (777,80);
+insert into t (id,a) values (777,81);
+insert into t (id,a) values (777,82);
+insert into t (id,a) values (777,83);
+insert into t (id,a) values (777,84);
+insert into t (id,a) values (777,85);
+insert into t (id,a) values (777,86);
+insert into t (id,a) values (777,87);
+insert into t (id,a) values (777,88);
+insert into t (id,a) values (777,89);
+insert into t (id,a) values (777,90);
+insert into t (id,a) values (777,91);
+insert into t (id,a) values (777,92);
+insert into t (id,a) values (777,93);
+insert into t (id,a) values (777,94);
+insert into t (id,a) values (777,95);
+insert into t (id,a) values (777,96);
+insert into t (id,a) values (777,97);
+insert into t (id,a) values (777,98);
+insert into t (id,a) values (777,99);
+insert into t (id,a) values (778,0);
+insert into t (id,a) values (778,1);
+insert into t (id,a) values (778,2);
+insert into t (id,a) values (778,3);
+insert into t (id,a) values (778,4);
+insert into t (id,a) values (778,5);
+insert into t (id,a) values (778,6);
+insert into t (id,a) values (778,7);
+insert into t (id,a) values (778,8);
+insert into t (id,a) values (778,9);
+insert into t (id,a) values (778,10);
+insert into t (id,a) values (778,11);
+insert into t (id,a) values (778,12);
+insert into t (id,a) values (778,13);
+insert into t (id,a) values (778,14);
+insert into t (id,a) values (778,15);
+insert into t (id,a) values (778,16);
+insert into t (id,a) values (778,17);
+insert into t (id,a) values (778,18);
+insert into t (id,a) values (778,19);
+insert into t (id,a) values (778,20);
+insert into t (id,a) values (778,21);
+insert into t (id,a) values (778,22);
+insert into t (id,a) values (778,23);
+insert into t (id,a) values (778,24);
+insert into t (id,a) values (778,25);
+insert into t (id,a) values (778,26);
+insert into t (id,a) values (778,27);
+insert into t (id,a) values (778,28);
+insert into t (id,a) values (778,29);
+insert into t (id,a) values (778,30);
+insert into t (id,a) values (778,31);
+insert into t (id,a) values (778,32);
+insert into t (id,a) values (778,33);
+insert into t (id,a) values (778,34);
+insert into t (id,a) values (778,35);
+insert into t (id,a) values (778,36);
+insert into t (id,a) values (778,37);
+insert into t (id,a) values (778,38);
+insert into t (id,a) values (778,39);
+insert into t (id,a) values (778,40);
+insert into t (id,a) values (778,41);
+insert into t (id,a) values (778,42);
+insert into t (id,a) values (778,43);
+insert into t (id,a) values (778,44);
+insert into t (id,a) values (778,45);
+insert into t (id,a) values (778,46);
+insert into t (id,a) values (778,47);
+insert into t (id,a) values (778,48);
+insert into t (id,a) values (778,49);
+insert into t (id,a) values (778,50);
+insert into t (id,a) values (778,51);
+insert into t (id,a) values (778,52);
+insert into t (id,a) values (778,53);
+insert into t (id,a) values (778,54);
+insert into t (id,a) values (778,55);
+insert into t (id,a) values (778,56);
+insert into t (id,a) values (778,57);
+insert into t (id,a) values (778,58);
+insert into t (id,a) values (778,59);
+insert into t (id,a) values (778,60);
+insert into t (id,a) values (778,61);
+insert into t (id,a) values (778,62);
+insert into t (id,a) values (778,63);
+insert into t (id,a) values (778,64);
+insert into t (id,a) values (778,65);
+insert into t (id,a) values (778,66);
+insert into t (id,a) values (778,67);
+insert into t (id,a) values (778,68);
+insert into t (id,a) values (778,69);
+insert into t (id,a) values (778,70);
+insert into t (id,a) values (778,71);
+insert into t (id,a) values (778,72);
+insert into t (id,a) values (778,73);
+insert into t (id,a) values (778,74);
+insert into t (id,a) values (778,75);
+insert into t (id,a) values (778,76);
+insert into t (id,a) values (778,77);
+insert into t (id,a) values (778,78);
+insert into t (id,a) values (778,79);
+insert into t (id,a) values (778,80);
+insert into t (id,a) values (778,81);
+insert into t (id,a) values (778,82);
+insert into t (id,a) values (778,83);
+insert into t (id,a) values (778,84);
+insert into t (id,a) values (778,85);
+insert into t (id,a) values (778,86);
+insert into t (id,a) values (778,87);
+insert into t (id,a) values (778,88);
+insert into t (id,a) values (778,89);
+insert into t (id,a) values (778,90);
+insert into t (id,a) values (778,91);
+insert into t (id,a) values (778,92);
+insert into t (id,a) values (778,93);
+insert into t (id,a) values (778,94);
+insert into t (id,a) values (778,95);
+insert into t (id,a) values (778,96);
+insert into t (id,a) values (778,97);
+insert into t (id,a) values (778,98);
+insert into t (id,a) values (778,99);
+insert into t (id,a) values (779,0);
+insert into t (id,a) values (779,1);
+insert into t (id,a) values (779,2);
+insert into t (id,a) values (779,3);
+insert into t (id,a) values (779,4);
+insert into t (id,a) values (779,5);
+insert into t (id,a) values (779,6);
+insert into t (id,a) values (779,7);
+insert into t (id,a) values (779,8);
+insert into t (id,a) values (779,9);
+insert into t (id,a) values (779,10);
+insert into t (id,a) values (779,11);
+insert into t (id,a) values (779,12);
+insert into t (id,a) values (779,13);
+insert into t (id,a) values (779,14);
+insert into t (id,a) values (779,15);
+insert into t (id,a) values (779,16);
+insert into t (id,a) values (779,17);
+insert into t (id,a) values (779,18);
+insert into t (id,a) values (779,19);
+insert into t (id,a) values (779,20);
+insert into t (id,a) values (779,21);
+insert into t (id,a) values (779,22);
+insert into t (id,a) values (779,23);
+insert into t (id,a) values (779,24);
+insert into t (id,a) values (779,25);
+insert into t (id,a) values (779,26);
+insert into t (id,a) values (779,27);
+insert into t (id,a) values (779,28);
+insert into t (id,a) values (779,29);
+insert into t (id,a) values (779,30);
+insert into t (id,a) values (779,31);
+insert into t (id,a) values (779,32);
+insert into t (id,a) values (779,33);
+insert into t (id,a) values (779,34);
+insert into t (id,a) values (779,35);
+insert into t (id,a) values (779,36);
+insert into t (id,a) values (779,37);
+insert into t (id,a) values (779,38);
+insert into t (id,a) values (779,39);
+insert into t (id,a) values (779,40);
+insert into t (id,a) values (779,41);
+insert into t (id,a) values (779,42);
+insert into t (id,a) values (779,43);
+insert into t (id,a) values (779,44);
+insert into t (id,a) values (779,45);
+insert into t (id,a) values (779,46);
+insert into t (id,a) values (779,47);
+insert into t (id,a) values (779,48);
+insert into t (id,a) values (779,49);
+insert into t (id,a) values (779,50);
+insert into t (id,a) values (779,51);
+insert into t (id,a) values (779,52);
+insert into t (id,a) values (779,53);
+insert into t (id,a) values (779,54);
+insert into t (id,a) values (779,55);
+insert into t (id,a) values (779,56);
+insert into t (id,a) values (779,57);
+insert into t (id,a) values (779,58);
+insert into t (id,a) values (779,59);
+insert into t (id,a) values (779,60);
+insert into t (id,a) values (779,61);
+insert into t (id,a) values (779,62);
+insert into t (id,a) values (779,63);
+insert into t (id,a) values (779,64);
+insert into t (id,a) values (779,65);
+insert into t (id,a) values (779,66);
+insert into t (id,a) values (779,67);
+insert into t (id,a) values (779,68);
+insert into t (id,a) values (779,69);
+insert into t (id,a) values (779,70);
+insert into t (id,a) values (779,71);
+insert into t (id,a) values (779,72);
+insert into t (id,a) values (779,73);
+insert into t (id,a) values (779,74);
+insert into t (id,a) values (779,75);
+insert into t (id,a) values (779,76);
+insert into t (id,a) values (779,77);
+insert into t (id,a) values (779,78);
+insert into t (id,a) values (779,79);
+insert into t (id,a) values (779,80);
+insert into t (id,a) values (779,81);
+insert into t (id,a) values (779,82);
+insert into t (id,a) values (779,83);
+insert into t (id,a) values (779,84);
+insert into t (id,a) values (779,85);
+insert into t (id,a) values (779,86);
+insert into t (id,a) values (779,87);
+insert into t (id,a) values (779,88);
+insert into t (id,a) values (779,89);
+insert into t (id,a) values (779,90);
+insert into t (id,a) values (779,91);
+insert into t (id,a) values (779,92);
+insert into t (id,a) values (779,93);
+insert into t (id,a) values (779,94);
+insert into t (id,a) values (779,95);
+insert into t (id,a) values (779,96);
+insert into t (id,a) values (779,97);
+insert into t (id,a) values (779,98);
+insert into t (id,a) values (779,99);
+insert into t (id,a) values (780,0);
+insert into t (id,a) values (780,1);
+insert into t (id,a) values (780,2);
+insert into t (id,a) values (780,3);
+insert into t (id,a) values (780,4);
+insert into t (id,a) values (780,5);
+insert into t (id,a) values (780,6);
+insert into t (id,a) values (780,7);
+insert into t (id,a) values (780,8);
+insert into t (id,a) values (780,9);
+insert into t (id,a) values (780,10);
+insert into t (id,a) values (780,11);
+insert into t (id,a) values (780,12);
+insert into t (id,a) values (780,13);
+insert into t (id,a) values (780,14);
+insert into t (id,a) values (780,15);
+insert into t (id,a) values (780,16);
+insert into t (id,a) values (780,17);
+insert into t (id,a) values (780,18);
+insert into t (id,a) values (780,19);
+insert into t (id,a) values (780,20);
+insert into t (id,a) values (780,21);
+insert into t (id,a) values (780,22);
+insert into t (id,a) values (780,23);
+insert into t (id,a) values (780,24);
+insert into t (id,a) values (780,25);
+insert into t (id,a) values (780,26);
+insert into t (id,a) values (780,27);
+insert into t (id,a) values (780,28);
+insert into t (id,a) values (780,29);
+insert into t (id,a) values (780,30);
+insert into t (id,a) values (780,31);
+insert into t (id,a) values (780,32);
+insert into t (id,a) values (780,33);
+insert into t (id,a) values (780,34);
+insert into t (id,a) values (780,35);
+insert into t (id,a) values (780,36);
+insert into t (id,a) values (780,37);
+insert into t (id,a) values (780,38);
+insert into t (id,a) values (780,39);
+insert into t (id,a) values (780,40);
+insert into t (id,a) values (780,41);
+insert into t (id,a) values (780,42);
+insert into t (id,a) values (780,43);
+insert into t (id,a) values (780,44);
+insert into t (id,a) values (780,45);
+insert into t (id,a) values (780,46);
+insert into t (id,a) values (780,47);
+insert into t (id,a) values (780,48);
+insert into t (id,a) values (780,49);
+insert into t (id,a) values (780,50);
+insert into t (id,a) values (780,51);
+insert into t (id,a) values (780,52);
+insert into t (id,a) values (780,53);
+insert into t (id,a) values (780,54);
+insert into t (id,a) values (780,55);
+insert into t (id,a) values (780,56);
+insert into t (id,a) values (780,57);
+insert into t (id,a) values (780,58);
+insert into t (id,a) values (780,59);
+insert into t (id,a) values (780,60);
+insert into t (id,a) values (780,61);
+insert into t (id,a) values (780,62);
+insert into t (id,a) values (780,63);
+insert into t (id,a) values (780,64);
+insert into t (id,a) values (780,65);
+insert into t (id,a) values (780,66);
+insert into t (id,a) values (780,67);
+insert into t (id,a) values (780,68);
+insert into t (id,a) values (780,69);
+insert into t (id,a) values (780,70);
+insert into t (id,a) values (780,71);
+insert into t (id,a) values (780,72);
+insert into t (id,a) values (780,73);
+insert into t (id,a) values (780,74);
+insert into t (id,a) values (780,75);
+insert into t (id,a) values (780,76);
+insert into t (id,a) values (780,77);
+insert into t (id,a) values (780,78);
+insert into t (id,a) values (780,79);
+insert into t (id,a) values (780,80);
+insert into t (id,a) values (780,81);
+insert into t (id,a) values (780,82);
+insert into t (id,a) values (780,83);
+insert into t (id,a) values (780,84);
+insert into t (id,a) values (780,85);
+insert into t (id,a) values (780,86);
+insert into t (id,a) values (780,87);
+insert into t (id,a) values (780,88);
+insert into t (id,a) values (780,89);
+insert into t (id,a) values (780,90);
+insert into t (id,a) values (780,91);
+insert into t (id,a) values (780,92);
+insert into t (id,a) values (780,93);
+insert into t (id,a) values (780,94);
+insert into t (id,a) values (780,95);
+insert into t (id,a) values (780,96);
+insert into t (id,a) values (780,97);
+insert into t (id,a) values (780,98);
+insert into t (id,a) values (780,99);
+insert into t (id,a) values (781,0);
+insert into t (id,a) values (781,1);
+insert into t (id,a) values (781,2);
+insert into t (id,a) values (781,3);
+insert into t (id,a) values (781,4);
+insert into t (id,a) values (781,5);
+insert into t (id,a) values (781,6);
+insert into t (id,a) values (781,7);
+insert into t (id,a) values (781,8);
+insert into t (id,a) values (781,9);
+insert into t (id,a) values (781,10);
+insert into t (id,a) values (781,11);
+insert into t (id,a) values (781,12);
+insert into t (id,a) values (781,13);
+insert into t (id,a) values (781,14);
+insert into t (id,a) values (781,15);
+insert into t (id,a) values (781,16);
+insert into t (id,a) values (781,17);
+insert into t (id,a) values (781,18);
+insert into t (id,a) values (781,19);
+insert into t (id,a) values (781,20);
+insert into t (id,a) values (781,21);
+insert into t (id,a) values (781,22);
+insert into t (id,a) values (781,23);
+insert into t (id,a) values (781,24);
+insert into t (id,a) values (781,25);
+insert into t (id,a) values (781,26);
+insert into t (id,a) values (781,27);
+insert into t (id,a) values (781,28);
+insert into t (id,a) values (781,29);
+insert into t (id,a) values (781,30);
+insert into t (id,a) values (781,31);
+insert into t (id,a) values (781,32);
+insert into t (id,a) values (781,33);
+insert into t (id,a) values (781,34);
+insert into t (id,a) values (781,35);
+insert into t (id,a) values (781,36);
+insert into t (id,a) values (781,37);
+insert into t (id,a) values (781,38);
+insert into t (id,a) values (781,39);
+insert into t (id,a) values (781,40);
+insert into t (id,a) values (781,41);
+insert into t (id,a) values (781,42);
+insert into t (id,a) values (781,43);
+insert into t (id,a) values (781,44);
+insert into t (id,a) values (781,45);
+insert into t (id,a) values (781,46);
+insert into t (id,a) values (781,47);
+insert into t (id,a) values (781,48);
+insert into t (id,a) values (781,49);
+insert into t (id,a) values (781,50);
+insert into t (id,a) values (781,51);
+insert into t (id,a) values (781,52);
+insert into t (id,a) values (781,53);
+insert into t (id,a) values (781,54);
+insert into t (id,a) values (781,55);
+insert into t (id,a) values (781,56);
+insert into t (id,a) values (781,57);
+insert into t (id,a) values (781,58);
+insert into t (id,a) values (781,59);
+insert into t (id,a) values (781,60);
+insert into t (id,a) values (781,61);
+insert into t (id,a) values (781,62);
+insert into t (id,a) values (781,63);
+insert into t (id,a) values (781,64);
+insert into t (id,a) values (781,65);
+insert into t (id,a) values (781,66);
+insert into t (id,a) values (781,67);
+insert into t (id,a) values (781,68);
+insert into t (id,a) values (781,69);
+insert into t (id,a) values (781,70);
+insert into t (id,a) values (781,71);
+insert into t (id,a) values (781,72);
+insert into t (id,a) values (781,73);
+insert into t (id,a) values (781,74);
+insert into t (id,a) values (781,75);
+insert into t (id,a) values (781,76);
+insert into t (id,a) values (781,77);
+insert into t (id,a) values (781,78);
+insert into t (id,a) values (781,79);
+insert into t (id,a) values (781,80);
+insert into t (id,a) values (781,81);
+insert into t (id,a) values (781,82);
+insert into t (id,a) values (781,83);
+insert into t (id,a) values (781,84);
+insert into t (id,a) values (781,85);
+insert into t (id,a) values (781,86);
+insert into t (id,a) values (781,87);
+insert into t (id,a) values (781,88);
+insert into t (id,a) values (781,89);
+insert into t (id,a) values (781,90);
+insert into t (id,a) values (781,91);
+insert into t (id,a) values (781,92);
+insert into t (id,a) values (781,93);
+insert into t (id,a) values (781,94);
+insert into t (id,a) values (781,95);
+insert into t (id,a) values (781,96);
+insert into t (id,a) values (781,97);
+insert into t (id,a) values (781,98);
+insert into t (id,a) values (781,99);
+insert into t (id,a) values (782,0);
+insert into t (id,a) values (782,1);
+insert into t (id,a) values (782,2);
+insert into t (id,a) values (782,3);
+insert into t (id,a) values (782,4);
+insert into t (id,a) values (782,5);
+insert into t (id,a) values (782,6);
+insert into t (id,a) values (782,7);
+insert into t (id,a) values (782,8);
+insert into t (id,a) values (782,9);
+insert into t (id,a) values (782,10);
+insert into t (id,a) values (782,11);
+insert into t (id,a) values (782,12);
+insert into t (id,a) values (782,13);
+insert into t (id,a) values (782,14);
+insert into t (id,a) values (782,15);
+insert into t (id,a) values (782,16);
+insert into t (id,a) values (782,17);
+insert into t (id,a) values (782,18);
+insert into t (id,a) values (782,19);
+insert into t (id,a) values (782,20);
+insert into t (id,a) values (782,21);
+insert into t (id,a) values (782,22);
+insert into t (id,a) values (782,23);
+insert into t (id,a) values (782,24);
+insert into t (id,a) values (782,25);
+insert into t (id,a) values (782,26);
+insert into t (id,a) values (782,27);
+insert into t (id,a) values (782,28);
+insert into t (id,a) values (782,29);
+insert into t (id,a) values (782,30);
+insert into t (id,a) values (782,31);
+insert into t (id,a) values (782,32);
+insert into t (id,a) values (782,33);
+insert into t (id,a) values (782,34);
+insert into t (id,a) values (782,35);
+insert into t (id,a) values (782,36);
+insert into t (id,a) values (782,37);
+insert into t (id,a) values (782,38);
+insert into t (id,a) values (782,39);
+insert into t (id,a) values (782,40);
+insert into t (id,a) values (782,41);
+insert into t (id,a) values (782,42);
+insert into t (id,a) values (782,43);
+insert into t (id,a) values (782,44);
+insert into t (id,a) values (782,45);
+insert into t (id,a) values (782,46);
+insert into t (id,a) values (782,47);
+insert into t (id,a) values (782,48);
+insert into t (id,a) values (782,49);
+insert into t (id,a) values (782,50);
+insert into t (id,a) values (782,51);
+insert into t (id,a) values (782,52);
+insert into t (id,a) values (782,53);
+insert into t (id,a) values (782,54);
+insert into t (id,a) values (782,55);
+insert into t (id,a) values (782,56);
+insert into t (id,a) values (782,57);
+insert into t (id,a) values (782,58);
+insert into t (id,a) values (782,59);
+insert into t (id,a) values (782,60);
+insert into t (id,a) values (782,61);
+insert into t (id,a) values (782,62);
+insert into t (id,a) values (782,63);
+insert into t (id,a) values (782,64);
+insert into t (id,a) values (782,65);
+insert into t (id,a) values (782,66);
+insert into t (id,a) values (782,67);
+insert into t (id,a) values (782,68);
+insert into t (id,a) values (782,69);
+insert into t (id,a) values (782,70);
+insert into t (id,a) values (782,71);
+insert into t (id,a) values (782,72);
+insert into t (id,a) values (782,73);
+insert into t (id,a) values (782,74);
+insert into t (id,a) values (782,75);
+insert into t (id,a) values (782,76);
+insert into t (id,a) values (782,77);
+insert into t (id,a) values (782,78);
+insert into t (id,a) values (782,79);
+insert into t (id,a) values (782,80);
+insert into t (id,a) values (782,81);
+insert into t (id,a) values (782,82);
+insert into t (id,a) values (782,83);
+insert into t (id,a) values (782,84);
+insert into t (id,a) values (782,85);
+insert into t (id,a) values (782,86);
+insert into t (id,a) values (782,87);
+insert into t (id,a) values (782,88);
+insert into t (id,a) values (782,89);
+insert into t (id,a) values (782,90);
+insert into t (id,a) values (782,91);
+insert into t (id,a) values (782,92);
+insert into t (id,a) values (782,93);
+insert into t (id,a) values (782,94);
+insert into t (id,a) values (782,95);
+insert into t (id,a) values (782,96);
+insert into t (id,a) values (782,97);
+insert into t (id,a) values (782,98);
+insert into t (id,a) values (782,99);
+insert into t (id,a) values (783,0);
+insert into t (id,a) values (783,1);
+insert into t (id,a) values (783,2);
+insert into t (id,a) values (783,3);
+insert into t (id,a) values (783,4);
+insert into t (id,a) values (783,5);
+insert into t (id,a) values (783,6);
+insert into t (id,a) values (783,7);
+insert into t (id,a) values (783,8);
+insert into t (id,a) values (783,9);
+insert into t (id,a) values (783,10);
+insert into t (id,a) values (783,11);
+insert into t (id,a) values (783,12);
+insert into t (id,a) values (783,13);
+insert into t (id,a) values (783,14);
+insert into t (id,a) values (783,15);
+insert into t (id,a) values (783,16);
+insert into t (id,a) values (783,17);
+insert into t (id,a) values (783,18);
+insert into t (id,a) values (783,19);
+insert into t (id,a) values (783,20);
+insert into t (id,a) values (783,21);
+insert into t (id,a) values (783,22);
+insert into t (id,a) values (783,23);
+insert into t (id,a) values (783,24);
+insert into t (id,a) values (783,25);
+insert into t (id,a) values (783,26);
+insert into t (id,a) values (783,27);
+insert into t (id,a) values (783,28);
+insert into t (id,a) values (783,29);
+insert into t (id,a) values (783,30);
+insert into t (id,a) values (783,31);
+insert into t (id,a) values (783,32);
+insert into t (id,a) values (783,33);
+insert into t (id,a) values (783,34);
+insert into t (id,a) values (783,35);
+insert into t (id,a) values (783,36);
+insert into t (id,a) values (783,37);
+insert into t (id,a) values (783,38);
+insert into t (id,a) values (783,39);
+insert into t (id,a) values (783,40);
+insert into t (id,a) values (783,41);
+insert into t (id,a) values (783,42);
+insert into t (id,a) values (783,43);
+insert into t (id,a) values (783,44);
+insert into t (id,a) values (783,45);
+insert into t (id,a) values (783,46);
+insert into t (id,a) values (783,47);
+insert into t (id,a) values (783,48);
+insert into t (id,a) values (783,49);
+insert into t (id,a) values (783,50);
+insert into t (id,a) values (783,51);
+insert into t (id,a) values (783,52);
+insert into t (id,a) values (783,53);
+insert into t (id,a) values (783,54);
+insert into t (id,a) values (783,55);
+insert into t (id,a) values (783,56);
+insert into t (id,a) values (783,57);
+insert into t (id,a) values (783,58);
+insert into t (id,a) values (783,59);
+insert into t (id,a) values (783,60);
+insert into t (id,a) values (783,61);
+insert into t (id,a) values (783,62);
+insert into t (id,a) values (783,63);
+insert into t (id,a) values (783,64);
+insert into t (id,a) values (783,65);
+insert into t (id,a) values (783,66);
+insert into t (id,a) values (783,67);
+insert into t (id,a) values (783,68);
+insert into t (id,a) values (783,69);
+insert into t (id,a) values (783,70);
+insert into t (id,a) values (783,71);
+insert into t (id,a) values (783,72);
+insert into t (id,a) values (783,73);
+insert into t (id,a) values (783,74);
+insert into t (id,a) values (783,75);
+insert into t (id,a) values (783,76);
+insert into t (id,a) values (783,77);
+insert into t (id,a) values (783,78);
+insert into t (id,a) values (783,79);
+insert into t (id,a) values (783,80);
+insert into t (id,a) values (783,81);
+insert into t (id,a) values (783,82);
+insert into t (id,a) values (783,83);
+insert into t (id,a) values (783,84);
+insert into t (id,a) values (783,85);
+insert into t (id,a) values (783,86);
+insert into t (id,a) values (783,87);
+insert into t (id,a) values (783,88);
+insert into t (id,a) values (783,89);
+insert into t (id,a) values (783,90);
+insert into t (id,a) values (783,91);
+insert into t (id,a) values (783,92);
+insert into t (id,a) values (783,93);
+insert into t (id,a) values (783,94);
+insert into t (id,a) values (783,95);
+insert into t (id,a) values (783,96);
+insert into t (id,a) values (783,97);
+insert into t (id,a) values (783,98);
+insert into t (id,a) values (783,99);
+insert into t (id,a) values (784,0);
+insert into t (id,a) values (784,1);
+insert into t (id,a) values (784,2);
+insert into t (id,a) values (784,3);
+insert into t (id,a) values (784,4);
+insert into t (id,a) values (784,5);
+insert into t (id,a) values (784,6);
+insert into t (id,a) values (784,7);
+insert into t (id,a) values (784,8);
+insert into t (id,a) values (784,9);
+insert into t (id,a) values (784,10);
+insert into t (id,a) values (784,11);
+insert into t (id,a) values (784,12);
+insert into t (id,a) values (784,13);
+insert into t (id,a) values (784,14);
+insert into t (id,a) values (784,15);
+insert into t (id,a) values (784,16);
+insert into t (id,a) values (784,17);
+insert into t (id,a) values (784,18);
+insert into t (id,a) values (784,19);
+insert into t (id,a) values (784,20);
+insert into t (id,a) values (784,21);
+insert into t (id,a) values (784,22);
+insert into t (id,a) values (784,23);
+insert into t (id,a) values (784,24);
+insert into t (id,a) values (784,25);
+insert into t (id,a) values (784,26);
+insert into t (id,a) values (784,27);
+insert into t (id,a) values (784,28);
+insert into t (id,a) values (784,29);
+insert into t (id,a) values (784,30);
+insert into t (id,a) values (784,31);
+insert into t (id,a) values (784,32);
+insert into t (id,a) values (784,33);
+insert into t (id,a) values (784,34);
+insert into t (id,a) values (784,35);
+insert into t (id,a) values (784,36);
+insert into t (id,a) values (784,37);
+insert into t (id,a) values (784,38);
+insert into t (id,a) values (784,39);
+insert into t (id,a) values (784,40);
+insert into t (id,a) values (784,41);
+insert into t (id,a) values (784,42);
+insert into t (id,a) values (784,43);
+insert into t (id,a) values (784,44);
+insert into t (id,a) values (784,45);
+insert into t (id,a) values (784,46);
+insert into t (id,a) values (784,47);
+insert into t (id,a) values (784,48);
+insert into t (id,a) values (784,49);
+insert into t (id,a) values (784,50);
+insert into t (id,a) values (784,51);
+insert into t (id,a) values (784,52);
+insert into t (id,a) values (784,53);
+insert into t (id,a) values (784,54);
+insert into t (id,a) values (784,55);
+insert into t (id,a) values (784,56);
+insert into t (id,a) values (784,57);
+insert into t (id,a) values (784,58);
+insert into t (id,a) values (784,59);
+insert into t (id,a) values (784,60);
+insert into t (id,a) values (784,61);
+insert into t (id,a) values (784,62);
+insert into t (id,a) values (784,63);
+insert into t (id,a) values (784,64);
+insert into t (id,a) values (784,65);
+insert into t (id,a) values (784,66);
+insert into t (id,a) values (784,67);
+insert into t (id,a) values (784,68);
+insert into t (id,a) values (784,69);
+insert into t (id,a) values (784,70);
+insert into t (id,a) values (784,71);
+insert into t (id,a) values (784,72);
+insert into t (id,a) values (784,73);
+insert into t (id,a) values (784,74);
+insert into t (id,a) values (784,75);
+insert into t (id,a) values (784,76);
+insert into t (id,a) values (784,77);
+insert into t (id,a) values (784,78);
+insert into t (id,a) values (784,79);
+insert into t (id,a) values (784,80);
+insert into t (id,a) values (784,81);
+insert into t (id,a) values (784,82);
+insert into t (id,a) values (784,83);
+insert into t (id,a) values (784,84);
+insert into t (id,a) values (784,85);
+insert into t (id,a) values (784,86);
+insert into t (id,a) values (784,87);
+insert into t (id,a) values (784,88);
+insert into t (id,a) values (784,89);
+insert into t (id,a) values (784,90);
+insert into t (id,a) values (784,91);
+insert into t (id,a) values (784,92);
+insert into t (id,a) values (784,93);
+insert into t (id,a) values (784,94);
+insert into t (id,a) values (784,95);
+insert into t (id,a) values (784,96);
+insert into t (id,a) values (784,97);
+insert into t (id,a) values (784,98);
+insert into t (id,a) values (784,99);
+insert into t (id,a) values (785,0);
+insert into t (id,a) values (785,1);
+insert into t (id,a) values (785,2);
+insert into t (id,a) values (785,3);
+insert into t (id,a) values (785,4);
+insert into t (id,a) values (785,5);
+insert into t (id,a) values (785,6);
+insert into t (id,a) values (785,7);
+insert into t (id,a) values (785,8);
+insert into t (id,a) values (785,9);
+insert into t (id,a) values (785,10);
+insert into t (id,a) values (785,11);
+insert into t (id,a) values (785,12);
+insert into t (id,a) values (785,13);
+insert into t (id,a) values (785,14);
+insert into t (id,a) values (785,15);
+insert into t (id,a) values (785,16);
+insert into t (id,a) values (785,17);
+insert into t (id,a) values (785,18);
+insert into t (id,a) values (785,19);
+insert into t (id,a) values (785,20);
+insert into t (id,a) values (785,21);
+insert into t (id,a) values (785,22);
+insert into t (id,a) values (785,23);
+insert into t (id,a) values (785,24);
+insert into t (id,a) values (785,25);
+insert into t (id,a) values (785,26);
+insert into t (id,a) values (785,27);
+insert into t (id,a) values (785,28);
+insert into t (id,a) values (785,29);
+insert into t (id,a) values (785,30);
+insert into t (id,a) values (785,31);
+insert into t (id,a) values (785,32);
+insert into t (id,a) values (785,33);
+insert into t (id,a) values (785,34);
+insert into t (id,a) values (785,35);
+insert into t (id,a) values (785,36);
+insert into t (id,a) values (785,37);
+insert into t (id,a) values (785,38);
+insert into t (id,a) values (785,39);
+insert into t (id,a) values (785,40);
+insert into t (id,a) values (785,41);
+insert into t (id,a) values (785,42);
+insert into t (id,a) values (785,43);
+insert into t (id,a) values (785,44);
+insert into t (id,a) values (785,45);
+insert into t (id,a) values (785,46);
+insert into t (id,a) values (785,47);
+insert into t (id,a) values (785,48);
+insert into t (id,a) values (785,49);
+insert into t (id,a) values (785,50);
+insert into t (id,a) values (785,51);
+insert into t (id,a) values (785,52);
+insert into t (id,a) values (785,53);
+insert into t (id,a) values (785,54);
+insert into t (id,a) values (785,55);
+insert into t (id,a) values (785,56);
+insert into t (id,a) values (785,57);
+insert into t (id,a) values (785,58);
+insert into t (id,a) values (785,59);
+insert into t (id,a) values (785,60);
+insert into t (id,a) values (785,61);
+insert into t (id,a) values (785,62);
+insert into t (id,a) values (785,63);
+insert into t (id,a) values (785,64);
+insert into t (id,a) values (785,65);
+insert into t (id,a) values (785,66);
+insert into t (id,a) values (785,67);
+insert into t (id,a) values (785,68);
+insert into t (id,a) values (785,69);
+insert into t (id,a) values (785,70);
+insert into t (id,a) values (785,71);
+insert into t (id,a) values (785,72);
+insert into t (id,a) values (785,73);
+insert into t (id,a) values (785,74);
+insert into t (id,a) values (785,75);
+insert into t (id,a) values (785,76);
+insert into t (id,a) values (785,77);
+insert into t (id,a) values (785,78);
+insert into t (id,a) values (785,79);
+insert into t (id,a) values (785,80);
+insert into t (id,a) values (785,81);
+insert into t (id,a) values (785,82);
+insert into t (id,a) values (785,83);
+insert into t (id,a) values (785,84);
+insert into t (id,a) values (785,85);
+insert into t (id,a) values (785,86);
+insert into t (id,a) values (785,87);
+insert into t (id,a) values (785,88);
+insert into t (id,a) values (785,89);
+insert into t (id,a) values (785,90);
+insert into t (id,a) values (785,91);
+insert into t (id,a) values (785,92);
+insert into t (id,a) values (785,93);
+insert into t (id,a) values (785,94);
+insert into t (id,a) values (785,95);
+insert into t (id,a) values (785,96);
+insert into t (id,a) values (785,97);
+insert into t (id,a) values (785,98);
+insert into t (id,a) values (785,99);
+insert into t (id,a) values (786,0);
+insert into t (id,a) values (786,1);
+insert into t (id,a) values (786,2);
+insert into t (id,a) values (786,3);
+insert into t (id,a) values (786,4);
+insert into t (id,a) values (786,5);
+insert into t (id,a) values (786,6);
+insert into t (id,a) values (786,7);
+insert into t (id,a) values (786,8);
+insert into t (id,a) values (786,9);
+insert into t (id,a) values (786,10);
+insert into t (id,a) values (786,11);
+insert into t (id,a) values (786,12);
+insert into t (id,a) values (786,13);
+insert into t (id,a) values (786,14);
+insert into t (id,a) values (786,15);
+insert into t (id,a) values (786,16);
+insert into t (id,a) values (786,17);
+insert into t (id,a) values (786,18);
+insert into t (id,a) values (786,19);
+insert into t (id,a) values (786,20);
+insert into t (id,a) values (786,21);
+insert into t (id,a) values (786,22);
+insert into t (id,a) values (786,23);
+insert into t (id,a) values (786,24);
+insert into t (id,a) values (786,25);
+insert into t (id,a) values (786,26);
+insert into t (id,a) values (786,27);
+insert into t (id,a) values (786,28);
+insert into t (id,a) values (786,29);
+insert into t (id,a) values (786,30);
+insert into t (id,a) values (786,31);
+insert into t (id,a) values (786,32);
+insert into t (id,a) values (786,33);
+insert into t (id,a) values (786,34);
+insert into t (id,a) values (786,35);
+insert into t (id,a) values (786,36);
+insert into t (id,a) values (786,37);
+insert into t (id,a) values (786,38);
+insert into t (id,a) values (786,39);
+insert into t (id,a) values (786,40);
+insert into t (id,a) values (786,41);
+insert into t (id,a) values (786,42);
+insert into t (id,a) values (786,43);
+insert into t (id,a) values (786,44);
+insert into t (id,a) values (786,45);
+insert into t (id,a) values (786,46);
+insert into t (id,a) values (786,47);
+insert into t (id,a) values (786,48);
+insert into t (id,a) values (786,49);
+insert into t (id,a) values (786,50);
+insert into t (id,a) values (786,51);
+insert into t (id,a) values (786,52);
+insert into t (id,a) values (786,53);
+insert into t (id,a) values (786,54);
+insert into t (id,a) values (786,55);
+insert into t (id,a) values (786,56);
+insert into t (id,a) values (786,57);
+insert into t (id,a) values (786,58);
+insert into t (id,a) values (786,59);
+insert into t (id,a) values (786,60);
+insert into t (id,a) values (786,61);
+insert into t (id,a) values (786,62);
+insert into t (id,a) values (786,63);
+insert into t (id,a) values (786,64);
+insert into t (id,a) values (786,65);
+insert into t (id,a) values (786,66);
+insert into t (id,a) values (786,67);
+insert into t (id,a) values (786,68);
+insert into t (id,a) values (786,69);
+insert into t (id,a) values (786,70);
+insert into t (id,a) values (786,71);
+insert into t (id,a) values (786,72);
+insert into t (id,a) values (786,73);
+insert into t (id,a) values (786,74);
+insert into t (id,a) values (786,75);
+insert into t (id,a) values (786,76);
+insert into t (id,a) values (786,77);
+insert into t (id,a) values (786,78);
+insert into t (id,a) values (786,79);
+insert into t (id,a) values (786,80);
+insert into t (id,a) values (786,81);
+insert into t (id,a) values (786,82);
+insert into t (id,a) values (786,83);
+insert into t (id,a) values (786,84);
+insert into t (id,a) values (786,85);
+insert into t (id,a) values (786,86);
+insert into t (id,a) values (786,87);
+insert into t (id,a) values (786,88);
+insert into t (id,a) values (786,89);
+insert into t (id,a) values (786,90);
+insert into t (id,a) values (786,91);
+insert into t (id,a) values (786,92);
+insert into t (id,a) values (786,93);
+insert into t (id,a) values (786,94);
+insert into t (id,a) values (786,95);
+insert into t (id,a) values (786,96);
+insert into t (id,a) values (786,97);
+insert into t (id,a) values (786,98);
+insert into t (id,a) values (786,99);
+insert into t (id,a) values (787,0);
+insert into t (id,a) values (787,1);
+insert into t (id,a) values (787,2);
+insert into t (id,a) values (787,3);
+insert into t (id,a) values (787,4);
+insert into t (id,a) values (787,5);
+insert into t (id,a) values (787,6);
+insert into t (id,a) values (787,7);
+insert into t (id,a) values (787,8);
+insert into t (id,a) values (787,9);
+insert into t (id,a) values (787,10);
+insert into t (id,a) values (787,11);
+insert into t (id,a) values (787,12);
+insert into t (id,a) values (787,13);
+insert into t (id,a) values (787,14);
+insert into t (id,a) values (787,15);
+insert into t (id,a) values (787,16);
+insert into t (id,a) values (787,17);
+insert into t (id,a) values (787,18);
+insert into t (id,a) values (787,19);
+insert into t (id,a) values (787,20);
+insert into t (id,a) values (787,21);
+insert into t (id,a) values (787,22);
+insert into t (id,a) values (787,23);
+insert into t (id,a) values (787,24);
+insert into t (id,a) values (787,25);
+insert into t (id,a) values (787,26);
+insert into t (id,a) values (787,27);
+insert into t (id,a) values (787,28);
+insert into t (id,a) values (787,29);
+insert into t (id,a) values (787,30);
+insert into t (id,a) values (787,31);
+insert into t (id,a) values (787,32);
+insert into t (id,a) values (787,33);
+insert into t (id,a) values (787,34);
+insert into t (id,a) values (787,35);
+insert into t (id,a) values (787,36);
+insert into t (id,a) values (787,37);
+insert into t (id,a) values (787,38);
+insert into t (id,a) values (787,39);
+insert into t (id,a) values (787,40);
+insert into t (id,a) values (787,41);
+insert into t (id,a) values (787,42);
+insert into t (id,a) values (787,43);
+insert into t (id,a) values (787,44);
+insert into t (id,a) values (787,45);
+insert into t (id,a) values (787,46);
+insert into t (id,a) values (787,47);
+insert into t (id,a) values (787,48);
+insert into t (id,a) values (787,49);
+insert into t (id,a) values (787,50);
+insert into t (id,a) values (787,51);
+insert into t (id,a) values (787,52);
+insert into t (id,a) values (787,53);
+insert into t (id,a) values (787,54);
+insert into t (id,a) values (787,55);
+insert into t (id,a) values (787,56);
+insert into t (id,a) values (787,57);
+insert into t (id,a) values (787,58);
+insert into t (id,a) values (787,59);
+insert into t (id,a) values (787,60);
+insert into t (id,a) values (787,61);
+insert into t (id,a) values (787,62);
+insert into t (id,a) values (787,63);
+insert into t (id,a) values (787,64);
+insert into t (id,a) values (787,65);
+insert into t (id,a) values (787,66);
+insert into t (id,a) values (787,67);
+insert into t (id,a) values (787,68);
+insert into t (id,a) values (787,69);
+insert into t (id,a) values (787,70);
+insert into t (id,a) values (787,71);
+insert into t (id,a) values (787,72);
+insert into t (id,a) values (787,73);
+insert into t (id,a) values (787,74);
+insert into t (id,a) values (787,75);
+insert into t (id,a) values (787,76);
+insert into t (id,a) values (787,77);
+insert into t (id,a) values (787,78);
+insert into t (id,a) values (787,79);
+insert into t (id,a) values (787,80);
+insert into t (id,a) values (787,81);
+insert into t (id,a) values (787,82);
+insert into t (id,a) values (787,83);
+insert into t (id,a) values (787,84);
+insert into t (id,a) values (787,85);
+insert into t (id,a) values (787,86);
+insert into t (id,a) values (787,87);
+insert into t (id,a) values (787,88);
+insert into t (id,a) values (787,89);
+insert into t (id,a) values (787,90);
+insert into t (id,a) values (787,91);
+insert into t (id,a) values (787,92);
+insert into t (id,a) values (787,93);
+insert into t (id,a) values (787,94);
+insert into t (id,a) values (787,95);
+insert into t (id,a) values (787,96);
+insert into t (id,a) values (787,97);
+insert into t (id,a) values (787,98);
+insert into t (id,a) values (787,99);
+insert into t (id,a) values (788,0);
+insert into t (id,a) values (788,1);
+insert into t (id,a) values (788,2);
+insert into t (id,a) values (788,3);
+insert into t (id,a) values (788,4);
+insert into t (id,a) values (788,5);
+insert into t (id,a) values (788,6);
+insert into t (id,a) values (788,7);
+insert into t (id,a) values (788,8);
+insert into t (id,a) values (788,9);
+insert into t (id,a) values (788,10);
+insert into t (id,a) values (788,11);
+insert into t (id,a) values (788,12);
+insert into t (id,a) values (788,13);
+insert into t (id,a) values (788,14);
+insert into t (id,a) values (788,15);
+insert into t (id,a) values (788,16);
+insert into t (id,a) values (788,17);
+insert into t (id,a) values (788,18);
+insert into t (id,a) values (788,19);
+insert into t (id,a) values (788,20);
+insert into t (id,a) values (788,21);
+insert into t (id,a) values (788,22);
+insert into t (id,a) values (788,23);
+insert into t (id,a) values (788,24);
+insert into t (id,a) values (788,25);
+insert into t (id,a) values (788,26);
+insert into t (id,a) values (788,27);
+insert into t (id,a) values (788,28);
+insert into t (id,a) values (788,29);
+insert into t (id,a) values (788,30);
+insert into t (id,a) values (788,31);
+insert into t (id,a) values (788,32);
+insert into t (id,a) values (788,33);
+insert into t (id,a) values (788,34);
+insert into t (id,a) values (788,35);
+insert into t (id,a) values (788,36);
+insert into t (id,a) values (788,37);
+insert into t (id,a) values (788,38);
+insert into t (id,a) values (788,39);
+insert into t (id,a) values (788,40);
+insert into t (id,a) values (788,41);
+insert into t (id,a) values (788,42);
+insert into t (id,a) values (788,43);
+insert into t (id,a) values (788,44);
+insert into t (id,a) values (788,45);
+insert into t (id,a) values (788,46);
+insert into t (id,a) values (788,47);
+insert into t (id,a) values (788,48);
+insert into t (id,a) values (788,49);
+insert into t (id,a) values (788,50);
+insert into t (id,a) values (788,51);
+insert into t (id,a) values (788,52);
+insert into t (id,a) values (788,53);
+insert into t (id,a) values (788,54);
+insert into t (id,a) values (788,55);
+insert into t (id,a) values (788,56);
+insert into t (id,a) values (788,57);
+insert into t (id,a) values (788,58);
+insert into t (id,a) values (788,59);
+insert into t (id,a) values (788,60);
+insert into t (id,a) values (788,61);
+insert into t (id,a) values (788,62);
+insert into t (id,a) values (788,63);
+insert into t (id,a) values (788,64);
+insert into t (id,a) values (788,65);
+insert into t (id,a) values (788,66);
+insert into t (id,a) values (788,67);
+insert into t (id,a) values (788,68);
+insert into t (id,a) values (788,69);
+insert into t (id,a) values (788,70);
+insert into t (id,a) values (788,71);
+insert into t (id,a) values (788,72);
+insert into t (id,a) values (788,73);
+insert into t (id,a) values (788,74);
+insert into t (id,a) values (788,75);
+insert into t (id,a) values (788,76);
+insert into t (id,a) values (788,77);
+insert into t (id,a) values (788,78);
+insert into t (id,a) values (788,79);
+insert into t (id,a) values (788,80);
+insert into t (id,a) values (788,81);
+insert into t (id,a) values (788,82);
+insert into t (id,a) values (788,83);
+insert into t (id,a) values (788,84);
+insert into t (id,a) values (788,85);
+insert into t (id,a) values (788,86);
+insert into t (id,a) values (788,87);
+insert into t (id,a) values (788,88);
+insert into t (id,a) values (788,89);
+insert into t (id,a) values (788,90);
+insert into t (id,a) values (788,91);
+insert into t (id,a) values (788,92);
+insert into t (id,a) values (788,93);
+insert into t (id,a) values (788,94);
+insert into t (id,a) values (788,95);
+insert into t (id,a) values (788,96);
+insert into t (id,a) values (788,97);
+insert into t (id,a) values (788,98);
+insert into t (id,a) values (788,99);
+insert into t (id,a) values (789,0);
+insert into t (id,a) values (789,1);
+insert into t (id,a) values (789,2);
+insert into t (id,a) values (789,3);
+insert into t (id,a) values (789,4);
+insert into t (id,a) values (789,5);
+insert into t (id,a) values (789,6);
+insert into t (id,a) values (789,7);
+insert into t (id,a) values (789,8);
+insert into t (id,a) values (789,9);
+insert into t (id,a) values (789,10);
+insert into t (id,a) values (789,11);
+insert into t (id,a) values (789,12);
+insert into t (id,a) values (789,13);
+insert into t (id,a) values (789,14);
+insert into t (id,a) values (789,15);
+insert into t (id,a) values (789,16);
+insert into t (id,a) values (789,17);
+insert into t (id,a) values (789,18);
+insert into t (id,a) values (789,19);
+insert into t (id,a) values (789,20);
+insert into t (id,a) values (789,21);
+insert into t (id,a) values (789,22);
+insert into t (id,a) values (789,23);
+insert into t (id,a) values (789,24);
+insert into t (id,a) values (789,25);
+insert into t (id,a) values (789,26);
+insert into t (id,a) values (789,27);
+insert into t (id,a) values (789,28);
+insert into t (id,a) values (789,29);
+insert into t (id,a) values (789,30);
+insert into t (id,a) values (789,31);
+insert into t (id,a) values (789,32);
+insert into t (id,a) values (789,33);
+insert into t (id,a) values (789,34);
+insert into t (id,a) values (789,35);
+insert into t (id,a) values (789,36);
+insert into t (id,a) values (789,37);
+insert into t (id,a) values (789,38);
+insert into t (id,a) values (789,39);
+insert into t (id,a) values (789,40);
+insert into t (id,a) values (789,41);
+insert into t (id,a) values (789,42);
+insert into t (id,a) values (789,43);
+insert into t (id,a) values (789,44);
+insert into t (id,a) values (789,45);
+insert into t (id,a) values (789,46);
+insert into t (id,a) values (789,47);
+insert into t (id,a) values (789,48);
+insert into t (id,a) values (789,49);
+insert into t (id,a) values (789,50);
+insert into t (id,a) values (789,51);
+insert into t (id,a) values (789,52);
+insert into t (id,a) values (789,53);
+insert into t (id,a) values (789,54);
+insert into t (id,a) values (789,55);
+insert into t (id,a) values (789,56);
+insert into t (id,a) values (789,57);
+insert into t (id,a) values (789,58);
+insert into t (id,a) values (789,59);
+insert into t (id,a) values (789,60);
+insert into t (id,a) values (789,61);
+insert into t (id,a) values (789,62);
+insert into t (id,a) values (789,63);
+insert into t (id,a) values (789,64);
+insert into t (id,a) values (789,65);
+insert into t (id,a) values (789,66);
+insert into t (id,a) values (789,67);
+insert into t (id,a) values (789,68);
+insert into t (id,a) values (789,69);
+insert into t (id,a) values (789,70);
+insert into t (id,a) values (789,71);
+insert into t (id,a) values (789,72);
+insert into t (id,a) values (789,73);
+insert into t (id,a) values (789,74);
+insert into t (id,a) values (789,75);
+insert into t (id,a) values (789,76);
+insert into t (id,a) values (789,77);
+insert into t (id,a) values (789,78);
+insert into t (id,a) values (789,79);
+insert into t (id,a) values (789,80);
+insert into t (id,a) values (789,81);
+insert into t (id,a) values (789,82);
+insert into t (id,a) values (789,83);
+insert into t (id,a) values (789,84);
+insert into t (id,a) values (789,85);
+insert into t (id,a) values (789,86);
+insert into t (id,a) values (789,87);
+insert into t (id,a) values (789,88);
+insert into t (id,a) values (789,89);
+insert into t (id,a) values (789,90);
+insert into t (id,a) values (789,91);
+insert into t (id,a) values (789,92);
+insert into t (id,a) values (789,93);
+insert into t (id,a) values (789,94);
+insert into t (id,a) values (789,95);
+insert into t (id,a) values (789,96);
+insert into t (id,a) values (789,97);
+insert into t (id,a) values (789,98);
+insert into t (id,a) values (789,99);
+insert into t (id,a) values (790,0);
+insert into t (id,a) values (790,1);
+insert into t (id,a) values (790,2);
+insert into t (id,a) values (790,3);
+insert into t (id,a) values (790,4);
+insert into t (id,a) values (790,5);
+insert into t (id,a) values (790,6);
+insert into t (id,a) values (790,7);
+insert into t (id,a) values (790,8);
+insert into t (id,a) values (790,9);
+insert into t (id,a) values (790,10);
+insert into t (id,a) values (790,11);
+insert into t (id,a) values (790,12);
+insert into t (id,a) values (790,13);
+insert into t (id,a) values (790,14);
+insert into t (id,a) values (790,15);
+insert into t (id,a) values (790,16);
+insert into t (id,a) values (790,17);
+insert into t (id,a) values (790,18);
+insert into t (id,a) values (790,19);
+insert into t (id,a) values (790,20);
+insert into t (id,a) values (790,21);
+insert into t (id,a) values (790,22);
+insert into t (id,a) values (790,23);
+insert into t (id,a) values (790,24);
+insert into t (id,a) values (790,25);
+insert into t (id,a) values (790,26);
+insert into t (id,a) values (790,27);
+insert into t (id,a) values (790,28);
+insert into t (id,a) values (790,29);
+insert into t (id,a) values (790,30);
+insert into t (id,a) values (790,31);
+insert into t (id,a) values (790,32);
+insert into t (id,a) values (790,33);
+insert into t (id,a) values (790,34);
+insert into t (id,a) values (790,35);
+insert into t (id,a) values (790,36);
+insert into t (id,a) values (790,37);
+insert into t (id,a) values (790,38);
+insert into t (id,a) values (790,39);
+insert into t (id,a) values (790,40);
+insert into t (id,a) values (790,41);
+insert into t (id,a) values (790,42);
+insert into t (id,a) values (790,43);
+insert into t (id,a) values (790,44);
+insert into t (id,a) values (790,45);
+insert into t (id,a) values (790,46);
+insert into t (id,a) values (790,47);
+insert into t (id,a) values (790,48);
+insert into t (id,a) values (790,49);
+insert into t (id,a) values (790,50);
+insert into t (id,a) values (790,51);
+insert into t (id,a) values (790,52);
+insert into t (id,a) values (790,53);
+insert into t (id,a) values (790,54);
+insert into t (id,a) values (790,55);
+insert into t (id,a) values (790,56);
+insert into t (id,a) values (790,57);
+insert into t (id,a) values (790,58);
+insert into t (id,a) values (790,59);
+insert into t (id,a) values (790,60);
+insert into t (id,a) values (790,61);
+insert into t (id,a) values (790,62);
+insert into t (id,a) values (790,63);
+insert into t (id,a) values (790,64);
+insert into t (id,a) values (790,65);
+insert into t (id,a) values (790,66);
+insert into t (id,a) values (790,67);
+insert into t (id,a) values (790,68);
+insert into t (id,a) values (790,69);
+insert into t (id,a) values (790,70);
+insert into t (id,a) values (790,71);
+insert into t (id,a) values (790,72);
+insert into t (id,a) values (790,73);
+insert into t (id,a) values (790,74);
+insert into t (id,a) values (790,75);
+insert into t (id,a) values (790,76);
+insert into t (id,a) values (790,77);
+insert into t (id,a) values (790,78);
+insert into t (id,a) values (790,79);
+insert into t (id,a) values (790,80);
+insert into t (id,a) values (790,81);
+insert into t (id,a) values (790,82);
+insert into t (id,a) values (790,83);
+insert into t (id,a) values (790,84);
+insert into t (id,a) values (790,85);
+insert into t (id,a) values (790,86);
+insert into t (id,a) values (790,87);
+insert into t (id,a) values (790,88);
+insert into t (id,a) values (790,89);
+insert into t (id,a) values (790,90);
+insert into t (id,a) values (790,91);
+insert into t (id,a) values (790,92);
+insert into t (id,a) values (790,93);
+insert into t (id,a) values (790,94);
+insert into t (id,a) values (790,95);
+insert into t (id,a) values (790,96);
+insert into t (id,a) values (790,97);
+insert into t (id,a) values (790,98);
+insert into t (id,a) values (790,99);
+insert into t (id,a) values (791,0);
+insert into t (id,a) values (791,1);
+insert into t (id,a) values (791,2);
+insert into t (id,a) values (791,3);
+insert into t (id,a) values (791,4);
+insert into t (id,a) values (791,5);
+insert into t (id,a) values (791,6);
+insert into t (id,a) values (791,7);
+insert into t (id,a) values (791,8);
+insert into t (id,a) values (791,9);
+insert into t (id,a) values (791,10);
+insert into t (id,a) values (791,11);
+insert into t (id,a) values (791,12);
+insert into t (id,a) values (791,13);
+insert into t (id,a) values (791,14);
+insert into t (id,a) values (791,15);
+insert into t (id,a) values (791,16);
+insert into t (id,a) values (791,17);
+insert into t (id,a) values (791,18);
+insert into t (id,a) values (791,19);
+insert into t (id,a) values (791,20);
+insert into t (id,a) values (791,21);
+insert into t (id,a) values (791,22);
+insert into t (id,a) values (791,23);
+insert into t (id,a) values (791,24);
+insert into t (id,a) values (791,25);
+insert into t (id,a) values (791,26);
+insert into t (id,a) values (791,27);
+insert into t (id,a) values (791,28);
+insert into t (id,a) values (791,29);
+insert into t (id,a) values (791,30);
+insert into t (id,a) values (791,31);
+insert into t (id,a) values (791,32);
+insert into t (id,a) values (791,33);
+insert into t (id,a) values (791,34);
+insert into t (id,a) values (791,35);
+insert into t (id,a) values (791,36);
+insert into t (id,a) values (791,37);
+insert into t (id,a) values (791,38);
+insert into t (id,a) values (791,39);
+insert into t (id,a) values (791,40);
+insert into t (id,a) values (791,41);
+insert into t (id,a) values (791,42);
+insert into t (id,a) values (791,43);
+insert into t (id,a) values (791,44);
+insert into t (id,a) values (791,45);
+insert into t (id,a) values (791,46);
+insert into t (id,a) values (791,47);
+insert into t (id,a) values (791,48);
+insert into t (id,a) values (791,49);
+insert into t (id,a) values (791,50);
+insert into t (id,a) values (791,51);
+insert into t (id,a) values (791,52);
+insert into t (id,a) values (791,53);
+insert into t (id,a) values (791,54);
+insert into t (id,a) values (791,55);
+insert into t (id,a) values (791,56);
+insert into t (id,a) values (791,57);
+insert into t (id,a) values (791,58);
+insert into t (id,a) values (791,59);
+insert into t (id,a) values (791,60);
+insert into t (id,a) values (791,61);
+insert into t (id,a) values (791,62);
+insert into t (id,a) values (791,63);
+insert into t (id,a) values (791,64);
+insert into t (id,a) values (791,65);
+insert into t (id,a) values (791,66);
+insert into t (id,a) values (791,67);
+insert into t (id,a) values (791,68);
+insert into t (id,a) values (791,69);
+insert into t (id,a) values (791,70);
+insert into t (id,a) values (791,71);
+insert into t (id,a) values (791,72);
+insert into t (id,a) values (791,73);
+insert into t (id,a) values (791,74);
+insert into t (id,a) values (791,75);
+insert into t (id,a) values (791,76);
+insert into t (id,a) values (791,77);
+insert into t (id,a) values (791,78);
+insert into t (id,a) values (791,79);
+insert into t (id,a) values (791,80);
+insert into t (id,a) values (791,81);
+insert into t (id,a) values (791,82);
+insert into t (id,a) values (791,83);
+insert into t (id,a) values (791,84);
+insert into t (id,a) values (791,85);
+insert into t (id,a) values (791,86);
+insert into t (id,a) values (791,87);
+insert into t (id,a) values (791,88);
+insert into t (id,a) values (791,89);
+insert into t (id,a) values (791,90);
+insert into t (id,a) values (791,91);
+insert into t (id,a) values (791,92);
+insert into t (id,a) values (791,93);
+insert into t (id,a) values (791,94);
+insert into t (id,a) values (791,95);
+insert into t (id,a) values (791,96);
+insert into t (id,a) values (791,97);
+insert into t (id,a) values (791,98);
+insert into t (id,a) values (791,99);
+insert into t (id,a) values (792,0);
+insert into t (id,a) values (792,1);
+insert into t (id,a) values (792,2);
+insert into t (id,a) values (792,3);
+insert into t (id,a) values (792,4);
+insert into t (id,a) values (792,5);
+insert into t (id,a) values (792,6);
+insert into t (id,a) values (792,7);
+insert into t (id,a) values (792,8);
+insert into t (id,a) values (792,9);
+insert into t (id,a) values (792,10);
+insert into t (id,a) values (792,11);
+insert into t (id,a) values (792,12);
+insert into t (id,a) values (792,13);
+insert into t (id,a) values (792,14);
+insert into t (id,a) values (792,15);
+insert into t (id,a) values (792,16);
+insert into t (id,a) values (792,17);
+insert into t (id,a) values (792,18);
+insert into t (id,a) values (792,19);
+insert into t (id,a) values (792,20);
+insert into t (id,a) values (792,21);
+insert into t (id,a) values (792,22);
+insert into t (id,a) values (792,23);
+insert into t (id,a) values (792,24);
+insert into t (id,a) values (792,25);
+insert into t (id,a) values (792,26);
+insert into t (id,a) values (792,27);
+insert into t (id,a) values (792,28);
+insert into t (id,a) values (792,29);
+insert into t (id,a) values (792,30);
+insert into t (id,a) values (792,31);
+insert into t (id,a) values (792,32);
+insert into t (id,a) values (792,33);
+insert into t (id,a) values (792,34);
+insert into t (id,a) values (792,35);
+insert into t (id,a) values (792,36);
+insert into t (id,a) values (792,37);
+insert into t (id,a) values (792,38);
+insert into t (id,a) values (792,39);
+insert into t (id,a) values (792,40);
+insert into t (id,a) values (792,41);
+insert into t (id,a) values (792,42);
+insert into t (id,a) values (792,43);
+insert into t (id,a) values (792,44);
+insert into t (id,a) values (792,45);
+insert into t (id,a) values (792,46);
+insert into t (id,a) values (792,47);
+insert into t (id,a) values (792,48);
+insert into t (id,a) values (792,49);
+insert into t (id,a) values (792,50);
+insert into t (id,a) values (792,51);
+insert into t (id,a) values (792,52);
+insert into t (id,a) values (792,53);
+insert into t (id,a) values (792,54);
+insert into t (id,a) values (792,55);
+insert into t (id,a) values (792,56);
+insert into t (id,a) values (792,57);
+insert into t (id,a) values (792,58);
+insert into t (id,a) values (792,59);
+insert into t (id,a) values (792,60);
+insert into t (id,a) values (792,61);
+insert into t (id,a) values (792,62);
+insert into t (id,a) values (792,63);
+insert into t (id,a) values (792,64);
+insert into t (id,a) values (792,65);
+insert into t (id,a) values (792,66);
+insert into t (id,a) values (792,67);
+insert into t (id,a) values (792,68);
+insert into t (id,a) values (792,69);
+insert into t (id,a) values (792,70);
+insert into t (id,a) values (792,71);
+insert into t (id,a) values (792,72);
+insert into t (id,a) values (792,73);
+insert into t (id,a) values (792,74);
+insert into t (id,a) values (792,75);
+insert into t (id,a) values (792,76);
+insert into t (id,a) values (792,77);
+insert into t (id,a) values (792,78);
+insert into t (id,a) values (792,79);
+insert into t (id,a) values (792,80);
+insert into t (id,a) values (792,81);
+insert into t (id,a) values (792,82);
+insert into t (id,a) values (792,83);
+insert into t (id,a) values (792,84);
+insert into t (id,a) values (792,85);
+insert into t (id,a) values (792,86);
+insert into t (id,a) values (792,87);
+insert into t (id,a) values (792,88);
+insert into t (id,a) values (792,89);
+insert into t (id,a) values (792,90);
+insert into t (id,a) values (792,91);
+insert into t (id,a) values (792,92);
+insert into t (id,a) values (792,93);
+insert into t (id,a) values (792,94);
+insert into t (id,a) values (792,95);
+insert into t (id,a) values (792,96);
+insert into t (id,a) values (792,97);
+insert into t (id,a) values (792,98);
+insert into t (id,a) values (792,99);
+insert into t (id,a) values (793,0);
+insert into t (id,a) values (793,1);
+insert into t (id,a) values (793,2);
+insert into t (id,a) values (793,3);
+insert into t (id,a) values (793,4);
+insert into t (id,a) values (793,5);
+insert into t (id,a) values (793,6);
+insert into t (id,a) values (793,7);
+insert into t (id,a) values (793,8);
+insert into t (id,a) values (793,9);
+insert into t (id,a) values (793,10);
+insert into t (id,a) values (793,11);
+insert into t (id,a) values (793,12);
+insert into t (id,a) values (793,13);
+insert into t (id,a) values (793,14);
+insert into t (id,a) values (793,15);
+insert into t (id,a) values (793,16);
+insert into t (id,a) values (793,17);
+insert into t (id,a) values (793,18);
+insert into t (id,a) values (793,19);
+insert into t (id,a) values (793,20);
+insert into t (id,a) values (793,21);
+insert into t (id,a) values (793,22);
+insert into t (id,a) values (793,23);
+insert into t (id,a) values (793,24);
+insert into t (id,a) values (793,25);
+insert into t (id,a) values (793,26);
+insert into t (id,a) values (793,27);
+insert into t (id,a) values (793,28);
+insert into t (id,a) values (793,29);
+insert into t (id,a) values (793,30);
+insert into t (id,a) values (793,31);
+insert into t (id,a) values (793,32);
+insert into t (id,a) values (793,33);
+insert into t (id,a) values (793,34);
+insert into t (id,a) values (793,35);
+insert into t (id,a) values (793,36);
+insert into t (id,a) values (793,37);
+insert into t (id,a) values (793,38);
+insert into t (id,a) values (793,39);
+insert into t (id,a) values (793,40);
+insert into t (id,a) values (793,41);
+insert into t (id,a) values (793,42);
+insert into t (id,a) values (793,43);
+insert into t (id,a) values (793,44);
+insert into t (id,a) values (793,45);
+insert into t (id,a) values (793,46);
+insert into t (id,a) values (793,47);
+insert into t (id,a) values (793,48);
+insert into t (id,a) values (793,49);
+insert into t (id,a) values (793,50);
+insert into t (id,a) values (793,51);
+insert into t (id,a) values (793,52);
+insert into t (id,a) values (793,53);
+insert into t (id,a) values (793,54);
+insert into t (id,a) values (793,55);
+insert into t (id,a) values (793,56);
+insert into t (id,a) values (793,57);
+insert into t (id,a) values (793,58);
+insert into t (id,a) values (793,59);
+insert into t (id,a) values (793,60);
+insert into t (id,a) values (793,61);
+insert into t (id,a) values (793,62);
+insert into t (id,a) values (793,63);
+insert into t (id,a) values (793,64);
+insert into t (id,a) values (793,65);
+insert into t (id,a) values (793,66);
+insert into t (id,a) values (793,67);
+insert into t (id,a) values (793,68);
+insert into t (id,a) values (793,69);
+insert into t (id,a) values (793,70);
+insert into t (id,a) values (793,71);
+insert into t (id,a) values (793,72);
+insert into t (id,a) values (793,73);
+insert into t (id,a) values (793,74);
+insert into t (id,a) values (793,75);
+insert into t (id,a) values (793,76);
+insert into t (id,a) values (793,77);
+insert into t (id,a) values (793,78);
+insert into t (id,a) values (793,79);
+insert into t (id,a) values (793,80);
+insert into t (id,a) values (793,81);
+insert into t (id,a) values (793,82);
+insert into t (id,a) values (793,83);
+insert into t (id,a) values (793,84);
+insert into t (id,a) values (793,85);
+insert into t (id,a) values (793,86);
+insert into t (id,a) values (793,87);
+insert into t (id,a) values (793,88);
+insert into t (id,a) values (793,89);
+insert into t (id,a) values (793,90);
+insert into t (id,a) values (793,91);
+insert into t (id,a) values (793,92);
+insert into t (id,a) values (793,93);
+insert into t (id,a) values (793,94);
+insert into t (id,a) values (793,95);
+insert into t (id,a) values (793,96);
+insert into t (id,a) values (793,97);
+insert into t (id,a) values (793,98);
+insert into t (id,a) values (793,99);
+insert into t (id,a) values (794,0);
+insert into t (id,a) values (794,1);
+insert into t (id,a) values (794,2);
+insert into t (id,a) values (794,3);
+insert into t (id,a) values (794,4);
+insert into t (id,a) values (794,5);
+insert into t (id,a) values (794,6);
+insert into t (id,a) values (794,7);
+insert into t (id,a) values (794,8);
+insert into t (id,a) values (794,9);
+insert into t (id,a) values (794,10);
+insert into t (id,a) values (794,11);
+insert into t (id,a) values (794,12);
+insert into t (id,a) values (794,13);
+insert into t (id,a) values (794,14);
+insert into t (id,a) values (794,15);
+insert into t (id,a) values (794,16);
+insert into t (id,a) values (794,17);
+insert into t (id,a) values (794,18);
+insert into t (id,a) values (794,19);
+insert into t (id,a) values (794,20);
+insert into t (id,a) values (794,21);
+insert into t (id,a) values (794,22);
+insert into t (id,a) values (794,23);
+insert into t (id,a) values (794,24);
+insert into t (id,a) values (794,25);
+insert into t (id,a) values (794,26);
+insert into t (id,a) values (794,27);
+insert into t (id,a) values (794,28);
+insert into t (id,a) values (794,29);
+insert into t (id,a) values (794,30);
+insert into t (id,a) values (794,31);
+insert into t (id,a) values (794,32);
+insert into t (id,a) values (794,33);
+insert into t (id,a) values (794,34);
+insert into t (id,a) values (794,35);
+insert into t (id,a) values (794,36);
+insert into t (id,a) values (794,37);
+insert into t (id,a) values (794,38);
+insert into t (id,a) values (794,39);
+insert into t (id,a) values (794,40);
+insert into t (id,a) values (794,41);
+insert into t (id,a) values (794,42);
+insert into t (id,a) values (794,43);
+insert into t (id,a) values (794,44);
+insert into t (id,a) values (794,45);
+insert into t (id,a) values (794,46);
+insert into t (id,a) values (794,47);
+insert into t (id,a) values (794,48);
+insert into t (id,a) values (794,49);
+insert into t (id,a) values (794,50);
+insert into t (id,a) values (794,51);
+insert into t (id,a) values (794,52);
+insert into t (id,a) values (794,53);
+insert into t (id,a) values (794,54);
+insert into t (id,a) values (794,55);
+insert into t (id,a) values (794,56);
+insert into t (id,a) values (794,57);
+insert into t (id,a) values (794,58);
+insert into t (id,a) values (794,59);
+insert into t (id,a) values (794,60);
+insert into t (id,a) values (794,61);
+insert into t (id,a) values (794,62);
+insert into t (id,a) values (794,63);
+insert into t (id,a) values (794,64);
+insert into t (id,a) values (794,65);
+insert into t (id,a) values (794,66);
+insert into t (id,a) values (794,67);
+insert into t (id,a) values (794,68);
+insert into t (id,a) values (794,69);
+insert into t (id,a) values (794,70);
+insert into t (id,a) values (794,71);
+insert into t (id,a) values (794,72);
+insert into t (id,a) values (794,73);
+insert into t (id,a) values (794,74);
+insert into t (id,a) values (794,75);
+insert into t (id,a) values (794,76);
+insert into t (id,a) values (794,77);
+insert into t (id,a) values (794,78);
+insert into t (id,a) values (794,79);
+insert into t (id,a) values (794,80);
+insert into t (id,a) values (794,81);
+insert into t (id,a) values (794,82);
+insert into t (id,a) values (794,83);
+insert into t (id,a) values (794,84);
+insert into t (id,a) values (794,85);
+insert into t (id,a) values (794,86);
+insert into t (id,a) values (794,87);
+insert into t (id,a) values (794,88);
+insert into t (id,a) values (794,89);
+insert into t (id,a) values (794,90);
+insert into t (id,a) values (794,91);
+insert into t (id,a) values (794,92);
+insert into t (id,a) values (794,93);
+insert into t (id,a) values (794,94);
+insert into t (id,a) values (794,95);
+insert into t (id,a) values (794,96);
+insert into t (id,a) values (794,97);
+insert into t (id,a) values (794,98);
+insert into t (id,a) values (794,99);
+insert into t (id,a) values (795,0);
+insert into t (id,a) values (795,1);
+insert into t (id,a) values (795,2);
+insert into t (id,a) values (795,3);
+insert into t (id,a) values (795,4);
+insert into t (id,a) values (795,5);
+insert into t (id,a) values (795,6);
+insert into t (id,a) values (795,7);
+insert into t (id,a) values (795,8);
+insert into t (id,a) values (795,9);
+insert into t (id,a) values (795,10);
+insert into t (id,a) values (795,11);
+insert into t (id,a) values (795,12);
+insert into t (id,a) values (795,13);
+insert into t (id,a) values (795,14);
+insert into t (id,a) values (795,15);
+insert into t (id,a) values (795,16);
+insert into t (id,a) values (795,17);
+insert into t (id,a) values (795,18);
+insert into t (id,a) values (795,19);
+insert into t (id,a) values (795,20);
+insert into t (id,a) values (795,21);
+insert into t (id,a) values (795,22);
+insert into t (id,a) values (795,23);
+insert into t (id,a) values (795,24);
+insert into t (id,a) values (795,25);
+insert into t (id,a) values (795,26);
+insert into t (id,a) values (795,27);
+insert into t (id,a) values (795,28);
+insert into t (id,a) values (795,29);
+insert into t (id,a) values (795,30);
+insert into t (id,a) values (795,31);
+insert into t (id,a) values (795,32);
+insert into t (id,a) values (795,33);
+insert into t (id,a) values (795,34);
+insert into t (id,a) values (795,35);
+insert into t (id,a) values (795,36);
+insert into t (id,a) values (795,37);
+insert into t (id,a) values (795,38);
+insert into t (id,a) values (795,39);
+insert into t (id,a) values (795,40);
+insert into t (id,a) values (795,41);
+insert into t (id,a) values (795,42);
+insert into t (id,a) values (795,43);
+insert into t (id,a) values (795,44);
+insert into t (id,a) values (795,45);
+insert into t (id,a) values (795,46);
+insert into t (id,a) values (795,47);
+insert into t (id,a) values (795,48);
+insert into t (id,a) values (795,49);
+insert into t (id,a) values (795,50);
+insert into t (id,a) values (795,51);
+insert into t (id,a) values (795,52);
+insert into t (id,a) values (795,53);
+insert into t (id,a) values (795,54);
+insert into t (id,a) values (795,55);
+insert into t (id,a) values (795,56);
+insert into t (id,a) values (795,57);
+insert into t (id,a) values (795,58);
+insert into t (id,a) values (795,59);
+insert into t (id,a) values (795,60);
+insert into t (id,a) values (795,61);
+insert into t (id,a) values (795,62);
+insert into t (id,a) values (795,63);
+insert into t (id,a) values (795,64);
+insert into t (id,a) values (795,65);
+insert into t (id,a) values (795,66);
+insert into t (id,a) values (795,67);
+insert into t (id,a) values (795,68);
+insert into t (id,a) values (795,69);
+insert into t (id,a) values (795,70);
+insert into t (id,a) values (795,71);
+insert into t (id,a) values (795,72);
+insert into t (id,a) values (795,73);
+insert into t (id,a) values (795,74);
+insert into t (id,a) values (795,75);
+insert into t (id,a) values (795,76);
+insert into t (id,a) values (795,77);
+insert into t (id,a) values (795,78);
+insert into t (id,a) values (795,79);
+insert into t (id,a) values (795,80);
+insert into t (id,a) values (795,81);
+insert into t (id,a) values (795,82);
+insert into t (id,a) values (795,83);
+insert into t (id,a) values (795,84);
+insert into t (id,a) values (795,85);
+insert into t (id,a) values (795,86);
+insert into t (id,a) values (795,87);
+insert into t (id,a) values (795,88);
+insert into t (id,a) values (795,89);
+insert into t (id,a) values (795,90);
+insert into t (id,a) values (795,91);
+insert into t (id,a) values (795,92);
+insert into t (id,a) values (795,93);
+insert into t (id,a) values (795,94);
+insert into t (id,a) values (795,95);
+insert into t (id,a) values (795,96);
+insert into t (id,a) values (795,97);
+insert into t (id,a) values (795,98);
+insert into t (id,a) values (795,99);
+insert into t (id,a) values (796,0);
+insert into t (id,a) values (796,1);
+insert into t (id,a) values (796,2);
+insert into t (id,a) values (796,3);
+insert into t (id,a) values (796,4);
+insert into t (id,a) values (796,5);
+insert into t (id,a) values (796,6);
+insert into t (id,a) values (796,7);
+insert into t (id,a) values (796,8);
+insert into t (id,a) values (796,9);
+insert into t (id,a) values (796,10);
+insert into t (id,a) values (796,11);
+insert into t (id,a) values (796,12);
+insert into t (id,a) values (796,13);
+insert into t (id,a) values (796,14);
+insert into t (id,a) values (796,15);
+insert into t (id,a) values (796,16);
+insert into t (id,a) values (796,17);
+insert into t (id,a) values (796,18);
+insert into t (id,a) values (796,19);
+insert into t (id,a) values (796,20);
+insert into t (id,a) values (796,21);
+insert into t (id,a) values (796,22);
+insert into t (id,a) values (796,23);
+insert into t (id,a) values (796,24);
+insert into t (id,a) values (796,25);
+insert into t (id,a) values (796,26);
+insert into t (id,a) values (796,27);
+insert into t (id,a) values (796,28);
+insert into t (id,a) values (796,29);
+insert into t (id,a) values (796,30);
+insert into t (id,a) values (796,31);
+insert into t (id,a) values (796,32);
+insert into t (id,a) values (796,33);
+insert into t (id,a) values (796,34);
+insert into t (id,a) values (796,35);
+insert into t (id,a) values (796,36);
+insert into t (id,a) values (796,37);
+insert into t (id,a) values (796,38);
+insert into t (id,a) values (796,39);
+insert into t (id,a) values (796,40);
+insert into t (id,a) values (796,41);
+insert into t (id,a) values (796,42);
+insert into t (id,a) values (796,43);
+insert into t (id,a) values (796,44);
+insert into t (id,a) values (796,45);
+insert into t (id,a) values (796,46);
+insert into t (id,a) values (796,47);
+insert into t (id,a) values (796,48);
+insert into t (id,a) values (796,49);
+insert into t (id,a) values (796,50);
+insert into t (id,a) values (796,51);
+insert into t (id,a) values (796,52);
+insert into t (id,a) values (796,53);
+insert into t (id,a) values (796,54);
+insert into t (id,a) values (796,55);
+insert into t (id,a) values (796,56);
+insert into t (id,a) values (796,57);
+insert into t (id,a) values (796,58);
+insert into t (id,a) values (796,59);
+insert into t (id,a) values (796,60);
+insert into t (id,a) values (796,61);
+insert into t (id,a) values (796,62);
+insert into t (id,a) values (796,63);
+insert into t (id,a) values (796,64);
+insert into t (id,a) values (796,65);
+insert into t (id,a) values (796,66);
+insert into t (id,a) values (796,67);
+insert into t (id,a) values (796,68);
+insert into t (id,a) values (796,69);
+insert into t (id,a) values (796,70);
+insert into t (id,a) values (796,71);
+insert into t (id,a) values (796,72);
+insert into t (id,a) values (796,73);
+insert into t (id,a) values (796,74);
+insert into t (id,a) values (796,75);
+insert into t (id,a) values (796,76);
+insert into t (id,a) values (796,77);
+insert into t (id,a) values (796,78);
+insert into t (id,a) values (796,79);
+insert into t (id,a) values (796,80);
+insert into t (id,a) values (796,81);
+insert into t (id,a) values (796,82);
+insert into t (id,a) values (796,83);
+insert into t (id,a) values (796,84);
+insert into t (id,a) values (796,85);
+insert into t (id,a) values (796,86);
+insert into t (id,a) values (796,87);
+insert into t (id,a) values (796,88);
+insert into t (id,a) values (796,89);
+insert into t (id,a) values (796,90);
+insert into t (id,a) values (796,91);
+insert into t (id,a) values (796,92);
+insert into t (id,a) values (796,93);
+insert into t (id,a) values (796,94);
+insert into t (id,a) values (796,95);
+insert into t (id,a) values (796,96);
+insert into t (id,a) values (796,97);
+insert into t (id,a) values (796,98);
+insert into t (id,a) values (796,99);
+insert into t (id,a) values (797,0);
+insert into t (id,a) values (797,1);
+insert into t (id,a) values (797,2);
+insert into t (id,a) values (797,3);
+insert into t (id,a) values (797,4);
+insert into t (id,a) values (797,5);
+insert into t (id,a) values (797,6);
+insert into t (id,a) values (797,7);
+insert into t (id,a) values (797,8);
+insert into t (id,a) values (797,9);
+insert into t (id,a) values (797,10);
+insert into t (id,a) values (797,11);
+insert into t (id,a) values (797,12);
+insert into t (id,a) values (797,13);
+insert into t (id,a) values (797,14);
+insert into t (id,a) values (797,15);
+insert into t (id,a) values (797,16);
+insert into t (id,a) values (797,17);
+insert into t (id,a) values (797,18);
+insert into t (id,a) values (797,19);
+insert into t (id,a) values (797,20);
+insert into t (id,a) values (797,21);
+insert into t (id,a) values (797,22);
+insert into t (id,a) values (797,23);
+insert into t (id,a) values (797,24);
+insert into t (id,a) values (797,25);
+insert into t (id,a) values (797,26);
+insert into t (id,a) values (797,27);
+insert into t (id,a) values (797,28);
+insert into t (id,a) values (797,29);
+insert into t (id,a) values (797,30);
+insert into t (id,a) values (797,31);
+insert into t (id,a) values (797,32);
+insert into t (id,a) values (797,33);
+insert into t (id,a) values (797,34);
+insert into t (id,a) values (797,35);
+insert into t (id,a) values (797,36);
+insert into t (id,a) values (797,37);
+insert into t (id,a) values (797,38);
+insert into t (id,a) values (797,39);
+insert into t (id,a) values (797,40);
+insert into t (id,a) values (797,41);
+insert into t (id,a) values (797,42);
+insert into t (id,a) values (797,43);
+insert into t (id,a) values (797,44);
+insert into t (id,a) values (797,45);
+insert into t (id,a) values (797,46);
+insert into t (id,a) values (797,47);
+insert into t (id,a) values (797,48);
+insert into t (id,a) values (797,49);
+insert into t (id,a) values (797,50);
+insert into t (id,a) values (797,51);
+insert into t (id,a) values (797,52);
+insert into t (id,a) values (797,53);
+insert into t (id,a) values (797,54);
+insert into t (id,a) values (797,55);
+insert into t (id,a) values (797,56);
+insert into t (id,a) values (797,57);
+insert into t (id,a) values (797,58);
+insert into t (id,a) values (797,59);
+insert into t (id,a) values (797,60);
+insert into t (id,a) values (797,61);
+insert into t (id,a) values (797,62);
+insert into t (id,a) values (797,63);
+insert into t (id,a) values (797,64);
+insert into t (id,a) values (797,65);
+insert into t (id,a) values (797,66);
+insert into t (id,a) values (797,67);
+insert into t (id,a) values (797,68);
+insert into t (id,a) values (797,69);
+insert into t (id,a) values (797,70);
+insert into t (id,a) values (797,71);
+insert into t (id,a) values (797,72);
+insert into t (id,a) values (797,73);
+insert into t (id,a) values (797,74);
+insert into t (id,a) values (797,75);
+insert into t (id,a) values (797,76);
+insert into t (id,a) values (797,77);
+insert into t (id,a) values (797,78);
+insert into t (id,a) values (797,79);
+insert into t (id,a) values (797,80);
+insert into t (id,a) values (797,81);
+insert into t (id,a) values (797,82);
+insert into t (id,a) values (797,83);
+insert into t (id,a) values (797,84);
+insert into t (id,a) values (797,85);
+insert into t (id,a) values (797,86);
+insert into t (id,a) values (797,87);
+insert into t (id,a) values (797,88);
+insert into t (id,a) values (797,89);
+insert into t (id,a) values (797,90);
+insert into t (id,a) values (797,91);
+insert into t (id,a) values (797,92);
+insert into t (id,a) values (797,93);
+insert into t (id,a) values (797,94);
+insert into t (id,a) values (797,95);
+insert into t (id,a) values (797,96);
+insert into t (id,a) values (797,97);
+insert into t (id,a) values (797,98);
+insert into t (id,a) values (797,99);
+insert into t (id,a) values (798,0);
+insert into t (id,a) values (798,1);
+insert into t (id,a) values (798,2);
+insert into t (id,a) values (798,3);
+insert into t (id,a) values (798,4);
+insert into t (id,a) values (798,5);
+insert into t (id,a) values (798,6);
+insert into t (id,a) values (798,7);
+insert into t (id,a) values (798,8);
+insert into t (id,a) values (798,9);
+insert into t (id,a) values (798,10);
+insert into t (id,a) values (798,11);
+insert into t (id,a) values (798,12);
+insert into t (id,a) values (798,13);
+insert into t (id,a) values (798,14);
+insert into t (id,a) values (798,15);
+insert into t (id,a) values (798,16);
+insert into t (id,a) values (798,17);
+insert into t (id,a) values (798,18);
+insert into t (id,a) values (798,19);
+insert into t (id,a) values (798,20);
+insert into t (id,a) values (798,21);
+insert into t (id,a) values (798,22);
+insert into t (id,a) values (798,23);
+insert into t (id,a) values (798,24);
+insert into t (id,a) values (798,25);
+insert into t (id,a) values (798,26);
+insert into t (id,a) values (798,27);
+insert into t (id,a) values (798,28);
+insert into t (id,a) values (798,29);
+insert into t (id,a) values (798,30);
+insert into t (id,a) values (798,31);
+insert into t (id,a) values (798,32);
+insert into t (id,a) values (798,33);
+insert into t (id,a) values (798,34);
+insert into t (id,a) values (798,35);
+insert into t (id,a) values (798,36);
+insert into t (id,a) values (798,37);
+insert into t (id,a) values (798,38);
+insert into t (id,a) values (798,39);
+insert into t (id,a) values (798,40);
+insert into t (id,a) values (798,41);
+insert into t (id,a) values (798,42);
+insert into t (id,a) values (798,43);
+insert into t (id,a) values (798,44);
+insert into t (id,a) values (798,45);
+insert into t (id,a) values (798,46);
+insert into t (id,a) values (798,47);
+insert into t (id,a) values (798,48);
+insert into t (id,a) values (798,49);
+insert into t (id,a) values (798,50);
+insert into t (id,a) values (798,51);
+insert into t (id,a) values (798,52);
+insert into t (id,a) values (798,53);
+insert into t (id,a) values (798,54);
+insert into t (id,a) values (798,55);
+insert into t (id,a) values (798,56);
+insert into t (id,a) values (798,57);
+insert into t (id,a) values (798,58);
+insert into t (id,a) values (798,59);
+insert into t (id,a) values (798,60);
+insert into t (id,a) values (798,61);
+insert into t (id,a) values (798,62);
+insert into t (id,a) values (798,63);
+insert into t (id,a) values (798,64);
+insert into t (id,a) values (798,65);
+insert into t (id,a) values (798,66);
+insert into t (id,a) values (798,67);
+insert into t (id,a) values (798,68);
+insert into t (id,a) values (798,69);
+insert into t (id,a) values (798,70);
+insert into t (id,a) values (798,71);
+insert into t (id,a) values (798,72);
+insert into t (id,a) values (798,73);
+insert into t (id,a) values (798,74);
+insert into t (id,a) values (798,75);
+insert into t (id,a) values (798,76);
+insert into t (id,a) values (798,77);
+insert into t (id,a) values (798,78);
+insert into t (id,a) values (798,79);
+insert into t (id,a) values (798,80);
+insert into t (id,a) values (798,81);
+insert into t (id,a) values (798,82);
+insert into t (id,a) values (798,83);
+insert into t (id,a) values (798,84);
+insert into t (id,a) values (798,85);
+insert into t (id,a) values (798,86);
+insert into t (id,a) values (798,87);
+insert into t (id,a) values (798,88);
+insert into t (id,a) values (798,89);
+insert into t (id,a) values (798,90);
+insert into t (id,a) values (798,91);
+insert into t (id,a) values (798,92);
+insert into t (id,a) values (798,93);
+insert into t (id,a) values (798,94);
+insert into t (id,a) values (798,95);
+insert into t (id,a) values (798,96);
+insert into t (id,a) values (798,97);
+insert into t (id,a) values (798,98);
+insert into t (id,a) values (798,99);
+insert into t (id,a) values (799,0);
+insert into t (id,a) values (799,1);
+insert into t (id,a) values (799,2);
+insert into t (id,a) values (799,3);
+insert into t (id,a) values (799,4);
+insert into t (id,a) values (799,5);
+insert into t (id,a) values (799,6);
+insert into t (id,a) values (799,7);
+insert into t (id,a) values (799,8);
+insert into t (id,a) values (799,9);
+insert into t (id,a) values (799,10);
+insert into t (id,a) values (799,11);
+insert into t (id,a) values (799,12);
+insert into t (id,a) values (799,13);
+insert into t (id,a) values (799,14);
+insert into t (id,a) values (799,15);
+insert into t (id,a) values (799,16);
+insert into t (id,a) values (799,17);
+insert into t (id,a) values (799,18);
+insert into t (id,a) values (799,19);
+insert into t (id,a) values (799,20);
+insert into t (id,a) values (799,21);
+insert into t (id,a) values (799,22);
+insert into t (id,a) values (799,23);
+insert into t (id,a) values (799,24);
+insert into t (id,a) values (799,25);
+insert into t (id,a) values (799,26);
+insert into t (id,a) values (799,27);
+insert into t (id,a) values (799,28);
+insert into t (id,a) values (799,29);
+insert into t (id,a) values (799,30);
+insert into t (id,a) values (799,31);
+insert into t (id,a) values (799,32);
+insert into t (id,a) values (799,33);
+insert into t (id,a) values (799,34);
+insert into t (id,a) values (799,35);
+insert into t (id,a) values (799,36);
+insert into t (id,a) values (799,37);
+insert into t (id,a) values (799,38);
+insert into t (id,a) values (799,39);
+insert into t (id,a) values (799,40);
+insert into t (id,a) values (799,41);
+insert into t (id,a) values (799,42);
+insert into t (id,a) values (799,43);
+insert into t (id,a) values (799,44);
+insert into t (id,a) values (799,45);
+insert into t (id,a) values (799,46);
+insert into t (id,a) values (799,47);
+insert into t (id,a) values (799,48);
+insert into t (id,a) values (799,49);
+insert into t (id,a) values (799,50);
+insert into t (id,a) values (799,51);
+insert into t (id,a) values (799,52);
+insert into t (id,a) values (799,53);
+insert into t (id,a) values (799,54);
+insert into t (id,a) values (799,55);
+insert into t (id,a) values (799,56);
+insert into t (id,a) values (799,57);
+insert into t (id,a) values (799,58);
+insert into t (id,a) values (799,59);
+insert into t (id,a) values (799,60);
+insert into t (id,a) values (799,61);
+insert into t (id,a) values (799,62);
+insert into t (id,a) values (799,63);
+insert into t (id,a) values (799,64);
+insert into t (id,a) values (799,65);
+insert into t (id,a) values (799,66);
+insert into t (id,a) values (799,67);
+insert into t (id,a) values (799,68);
+insert into t (id,a) values (799,69);
+insert into t (id,a) values (799,70);
+insert into t (id,a) values (799,71);
+insert into t (id,a) values (799,72);
+insert into t (id,a) values (799,73);
+insert into t (id,a) values (799,74);
+insert into t (id,a) values (799,75);
+insert into t (id,a) values (799,76);
+insert into t (id,a) values (799,77);
+insert into t (id,a) values (799,78);
+insert into t (id,a) values (799,79);
+insert into t (id,a) values (799,80);
+insert into t (id,a) values (799,81);
+insert into t (id,a) values (799,82);
+insert into t (id,a) values (799,83);
+insert into t (id,a) values (799,84);
+insert into t (id,a) values (799,85);
+insert into t (id,a) values (799,86);
+insert into t (id,a) values (799,87);
+insert into t (id,a) values (799,88);
+insert into t (id,a) values (799,89);
+insert into t (id,a) values (799,90);
+insert into t (id,a) values (799,91);
+insert into t (id,a) values (799,92);
+insert into t (id,a) values (799,93);
+insert into t (id,a) values (799,94);
+insert into t (id,a) values (799,95);
+insert into t (id,a) values (799,96);
+insert into t (id,a) values (799,97);
+insert into t (id,a) values (799,98);
+insert into t (id,a) values (799,99);
+insert into t (id,a) values (800,0);
+insert into t (id,a) values (800,1);
+insert into t (id,a) values (800,2);
+insert into t (id,a) values (800,3);
+insert into t (id,a) values (800,4);
+insert into t (id,a) values (800,5);
+insert into t (id,a) values (800,6);
+insert into t (id,a) values (800,7);
+insert into t (id,a) values (800,8);
+insert into t (id,a) values (800,9);
+insert into t (id,a) values (800,10);
+insert into t (id,a) values (800,11);
+insert into t (id,a) values (800,12);
+insert into t (id,a) values (800,13);
+insert into t (id,a) values (800,14);
+insert into t (id,a) values (800,15);
+insert into t (id,a) values (800,16);
+insert into t (id,a) values (800,17);
+insert into t (id,a) values (800,18);
+insert into t (id,a) values (800,19);
+insert into t (id,a) values (800,20);
+insert into t (id,a) values (800,21);
+insert into t (id,a) values (800,22);
+insert into t (id,a) values (800,23);
+insert into t (id,a) values (800,24);
+insert into t (id,a) values (800,25);
+insert into t (id,a) values (800,26);
+insert into t (id,a) values (800,27);
+insert into t (id,a) values (800,28);
+insert into t (id,a) values (800,29);
+insert into t (id,a) values (800,30);
+insert into t (id,a) values (800,31);
+insert into t (id,a) values (800,32);
+insert into t (id,a) values (800,33);
+insert into t (id,a) values (800,34);
+insert into t (id,a) values (800,35);
+insert into t (id,a) values (800,36);
+insert into t (id,a) values (800,37);
+insert into t (id,a) values (800,38);
+insert into t (id,a) values (800,39);
+insert into t (id,a) values (800,40);
+insert into t (id,a) values (800,41);
+insert into t (id,a) values (800,42);
+insert into t (id,a) values (800,43);
+insert into t (id,a) values (800,44);
+insert into t (id,a) values (800,45);
+insert into t (id,a) values (800,46);
+insert into t (id,a) values (800,47);
+insert into t (id,a) values (800,48);
+insert into t (id,a) values (800,49);
+insert into t (id,a) values (800,50);
+insert into t (id,a) values (800,51);
+insert into t (id,a) values (800,52);
+insert into t (id,a) values (800,53);
+insert into t (id,a) values (800,54);
+insert into t (id,a) values (800,55);
+insert into t (id,a) values (800,56);
+insert into t (id,a) values (800,57);
+insert into t (id,a) values (800,58);
+insert into t (id,a) values (800,59);
+insert into t (id,a) values (800,60);
+insert into t (id,a) values (800,61);
+insert into t (id,a) values (800,62);
+insert into t (id,a) values (800,63);
+insert into t (id,a) values (800,64);
+insert into t (id,a) values (800,65);
+insert into t (id,a) values (800,66);
+insert into t (id,a) values (800,67);
+insert into t (id,a) values (800,68);
+insert into t (id,a) values (800,69);
+insert into t (id,a) values (800,70);
+insert into t (id,a) values (800,71);
+insert into t (id,a) values (800,72);
+insert into t (id,a) values (800,73);
+insert into t (id,a) values (800,74);
+insert into t (id,a) values (800,75);
+insert into t (id,a) values (800,76);
+insert into t (id,a) values (800,77);
+insert into t (id,a) values (800,78);
+insert into t (id,a) values (800,79);
+insert into t (id,a) values (800,80);
+insert into t (id,a) values (800,81);
+insert into t (id,a) values (800,82);
+insert into t (id,a) values (800,83);
+insert into t (id,a) values (800,84);
+insert into t (id,a) values (800,85);
+insert into t (id,a) values (800,86);
+insert into t (id,a) values (800,87);
+insert into t (id,a) values (800,88);
+insert into t (id,a) values (800,89);
+insert into t (id,a) values (800,90);
+insert into t (id,a) values (800,91);
+insert into t (id,a) values (800,92);
+insert into t (id,a) values (800,93);
+insert into t (id,a) values (800,94);
+insert into t (id,a) values (800,95);
+insert into t (id,a) values (800,96);
+insert into t (id,a) values (800,97);
+insert into t (id,a) values (800,98);
+insert into t (id,a) values (800,99);
+insert into t (id,a) values (801,0);
+insert into t (id,a) values (801,1);
+insert into t (id,a) values (801,2);
+insert into t (id,a) values (801,3);
+insert into t (id,a) values (801,4);
+insert into t (id,a) values (801,5);
+insert into t (id,a) values (801,6);
+insert into t (id,a) values (801,7);
+insert into t (id,a) values (801,8);
+insert into t (id,a) values (801,9);
+insert into t (id,a) values (801,10);
+insert into t (id,a) values (801,11);
+insert into t (id,a) values (801,12);
+insert into t (id,a) values (801,13);
+insert into t (id,a) values (801,14);
+insert into t (id,a) values (801,15);
+insert into t (id,a) values (801,16);
+insert into t (id,a) values (801,17);
+insert into t (id,a) values (801,18);
+insert into t (id,a) values (801,19);
+insert into t (id,a) values (801,20);
+insert into t (id,a) values (801,21);
+insert into t (id,a) values (801,22);
+insert into t (id,a) values (801,23);
+insert into t (id,a) values (801,24);
+insert into t (id,a) values (801,25);
+insert into t (id,a) values (801,26);
+insert into t (id,a) values (801,27);
+insert into t (id,a) values (801,28);
+insert into t (id,a) values (801,29);
+insert into t (id,a) values (801,30);
+insert into t (id,a) values (801,31);
+insert into t (id,a) values (801,32);
+insert into t (id,a) values (801,33);
+insert into t (id,a) values (801,34);
+insert into t (id,a) values (801,35);
+insert into t (id,a) values (801,36);
+insert into t (id,a) values (801,37);
+insert into t (id,a) values (801,38);
+insert into t (id,a) values (801,39);
+insert into t (id,a) values (801,40);
+insert into t (id,a) values (801,41);
+insert into t (id,a) values (801,42);
+insert into t (id,a) values (801,43);
+insert into t (id,a) values (801,44);
+insert into t (id,a) values (801,45);
+insert into t (id,a) values (801,46);
+insert into t (id,a) values (801,47);
+insert into t (id,a) values (801,48);
+insert into t (id,a) values (801,49);
+insert into t (id,a) values (801,50);
+insert into t (id,a) values (801,51);
+insert into t (id,a) values (801,52);
+insert into t (id,a) values (801,53);
+insert into t (id,a) values (801,54);
+insert into t (id,a) values (801,55);
+insert into t (id,a) values (801,56);
+insert into t (id,a) values (801,57);
+insert into t (id,a) values (801,58);
+insert into t (id,a) values (801,59);
+insert into t (id,a) values (801,60);
+insert into t (id,a) values (801,61);
+insert into t (id,a) values (801,62);
+insert into t (id,a) values (801,63);
+insert into t (id,a) values (801,64);
+insert into t (id,a) values (801,65);
+insert into t (id,a) values (801,66);
+insert into t (id,a) values (801,67);
+insert into t (id,a) values (801,68);
+insert into t (id,a) values (801,69);
+insert into t (id,a) values (801,70);
+insert into t (id,a) values (801,71);
+insert into t (id,a) values (801,72);
+insert into t (id,a) values (801,73);
+insert into t (id,a) values (801,74);
+insert into t (id,a) values (801,75);
+insert into t (id,a) values (801,76);
+insert into t (id,a) values (801,77);
+insert into t (id,a) values (801,78);
+insert into t (id,a) values (801,79);
+insert into t (id,a) values (801,80);
+insert into t (id,a) values (801,81);
+insert into t (id,a) values (801,82);
+insert into t (id,a) values (801,83);
+insert into t (id,a) values (801,84);
+insert into t (id,a) values (801,85);
+insert into t (id,a) values (801,86);
+insert into t (id,a) values (801,87);
+insert into t (id,a) values (801,88);
+insert into t (id,a) values (801,89);
+insert into t (id,a) values (801,90);
+insert into t (id,a) values (801,91);
+insert into t (id,a) values (801,92);
+insert into t (id,a) values (801,93);
+insert into t (id,a) values (801,94);
+insert into t (id,a) values (801,95);
+insert into t (id,a) values (801,96);
+insert into t (id,a) values (801,97);
+insert into t (id,a) values (801,98);
+insert into t (id,a) values (801,99);
+insert into t (id,a) values (802,0);
+insert into t (id,a) values (802,1);
+insert into t (id,a) values (802,2);
+insert into t (id,a) values (802,3);
+insert into t (id,a) values (802,4);
+insert into t (id,a) values (802,5);
+insert into t (id,a) values (802,6);
+insert into t (id,a) values (802,7);
+insert into t (id,a) values (802,8);
+insert into t (id,a) values (802,9);
+insert into t (id,a) values (802,10);
+insert into t (id,a) values (802,11);
+insert into t (id,a) values (802,12);
+insert into t (id,a) values (802,13);
+insert into t (id,a) values (802,14);
+insert into t (id,a) values (802,15);
+insert into t (id,a) values (802,16);
+insert into t (id,a) values (802,17);
+insert into t (id,a) values (802,18);
+insert into t (id,a) values (802,19);
+insert into t (id,a) values (802,20);
+insert into t (id,a) values (802,21);
+insert into t (id,a) values (802,22);
+insert into t (id,a) values (802,23);
+insert into t (id,a) values (802,24);
+insert into t (id,a) values (802,25);
+insert into t (id,a) values (802,26);
+insert into t (id,a) values (802,27);
+insert into t (id,a) values (802,28);
+insert into t (id,a) values (802,29);
+insert into t (id,a) values (802,30);
+insert into t (id,a) values (802,31);
+insert into t (id,a) values (802,32);
+insert into t (id,a) values (802,33);
+insert into t (id,a) values (802,34);
+insert into t (id,a) values (802,35);
+insert into t (id,a) values (802,36);
+insert into t (id,a) values (802,37);
+insert into t (id,a) values (802,38);
+insert into t (id,a) values (802,39);
+insert into t (id,a) values (802,40);
+insert into t (id,a) values (802,41);
+insert into t (id,a) values (802,42);
+insert into t (id,a) values (802,43);
+insert into t (id,a) values (802,44);
+insert into t (id,a) values (802,45);
+insert into t (id,a) values (802,46);
+insert into t (id,a) values (802,47);
+insert into t (id,a) values (802,48);
+insert into t (id,a) values (802,49);
+insert into t (id,a) values (802,50);
+insert into t (id,a) values (802,51);
+insert into t (id,a) values (802,52);
+insert into t (id,a) values (802,53);
+insert into t (id,a) values (802,54);
+insert into t (id,a) values (802,55);
+insert into t (id,a) values (802,56);
+insert into t (id,a) values (802,57);
+insert into t (id,a) values (802,58);
+insert into t (id,a) values (802,59);
+insert into t (id,a) values (802,60);
+insert into t (id,a) values (802,61);
+insert into t (id,a) values (802,62);
+insert into t (id,a) values (802,63);
+insert into t (id,a) values (802,64);
+insert into t (id,a) values (802,65);
+insert into t (id,a) values (802,66);
+insert into t (id,a) values (802,67);
+insert into t (id,a) values (802,68);
+insert into t (id,a) values (802,69);
+insert into t (id,a) values (802,70);
+insert into t (id,a) values (802,71);
+insert into t (id,a) values (802,72);
+insert into t (id,a) values (802,73);
+insert into t (id,a) values (802,74);
+insert into t (id,a) values (802,75);
+insert into t (id,a) values (802,76);
+insert into t (id,a) values (802,77);
+insert into t (id,a) values (802,78);
+insert into t (id,a) values (802,79);
+insert into t (id,a) values (802,80);
+insert into t (id,a) values (802,81);
+insert into t (id,a) values (802,82);
+insert into t (id,a) values (802,83);
+insert into t (id,a) values (802,84);
+insert into t (id,a) values (802,85);
+insert into t (id,a) values (802,86);
+insert into t (id,a) values (802,87);
+insert into t (id,a) values (802,88);
+insert into t (id,a) values (802,89);
+insert into t (id,a) values (802,90);
+insert into t (id,a) values (802,91);
+insert into t (id,a) values (802,92);
+insert into t (id,a) values (802,93);
+insert into t (id,a) values (802,94);
+insert into t (id,a) values (802,95);
+insert into t (id,a) values (802,96);
+insert into t (id,a) values (802,97);
+insert into t (id,a) values (802,98);
+insert into t (id,a) values (802,99);
+insert into t (id,a) values (803,0);
+insert into t (id,a) values (803,1);
+insert into t (id,a) values (803,2);
+insert into t (id,a) values (803,3);
+insert into t (id,a) values (803,4);
+insert into t (id,a) values (803,5);
+insert into t (id,a) values (803,6);
+insert into t (id,a) values (803,7);
+insert into t (id,a) values (803,8);
+insert into t (id,a) values (803,9);
+insert into t (id,a) values (803,10);
+insert into t (id,a) values (803,11);
+insert into t (id,a) values (803,12);
+insert into t (id,a) values (803,13);
+insert into t (id,a) values (803,14);
+insert into t (id,a) values (803,15);
+insert into t (id,a) values (803,16);
+insert into t (id,a) values (803,17);
+insert into t (id,a) values (803,18);
+insert into t (id,a) values (803,19);
+insert into t (id,a) values (803,20);
+insert into t (id,a) values (803,21);
+insert into t (id,a) values (803,22);
+insert into t (id,a) values (803,23);
+insert into t (id,a) values (803,24);
+insert into t (id,a) values (803,25);
+insert into t (id,a) values (803,26);
+insert into t (id,a) values (803,27);
+insert into t (id,a) values (803,28);
+insert into t (id,a) values (803,29);
+insert into t (id,a) values (803,30);
+insert into t (id,a) values (803,31);
+insert into t (id,a) values (803,32);
+insert into t (id,a) values (803,33);
+insert into t (id,a) values (803,34);
+insert into t (id,a) values (803,35);
+insert into t (id,a) values (803,36);
+insert into t (id,a) values (803,37);
+insert into t (id,a) values (803,38);
+insert into t (id,a) values (803,39);
+insert into t (id,a) values (803,40);
+insert into t (id,a) values (803,41);
+insert into t (id,a) values (803,42);
+insert into t (id,a) values (803,43);
+insert into t (id,a) values (803,44);
+insert into t (id,a) values (803,45);
+insert into t (id,a) values (803,46);
+insert into t (id,a) values (803,47);
+insert into t (id,a) values (803,48);
+insert into t (id,a) values (803,49);
+insert into t (id,a) values (803,50);
+insert into t (id,a) values (803,51);
+insert into t (id,a) values (803,52);
+insert into t (id,a) values (803,53);
+insert into t (id,a) values (803,54);
+insert into t (id,a) values (803,55);
+insert into t (id,a) values (803,56);
+insert into t (id,a) values (803,57);
+insert into t (id,a) values (803,58);
+insert into t (id,a) values (803,59);
+insert into t (id,a) values (803,60);
+insert into t (id,a) values (803,61);
+insert into t (id,a) values (803,62);
+insert into t (id,a) values (803,63);
+insert into t (id,a) values (803,64);
+insert into t (id,a) values (803,65);
+insert into t (id,a) values (803,66);
+insert into t (id,a) values (803,67);
+insert into t (id,a) values (803,68);
+insert into t (id,a) values (803,69);
+insert into t (id,a) values (803,70);
+insert into t (id,a) values (803,71);
+insert into t (id,a) values (803,72);
+insert into t (id,a) values (803,73);
+insert into t (id,a) values (803,74);
+insert into t (id,a) values (803,75);
+insert into t (id,a) values (803,76);
+insert into t (id,a) values (803,77);
+insert into t (id,a) values (803,78);
+insert into t (id,a) values (803,79);
+insert into t (id,a) values (803,80);
+insert into t (id,a) values (803,81);
+insert into t (id,a) values (803,82);
+insert into t (id,a) values (803,83);
+insert into t (id,a) values (803,84);
+insert into t (id,a) values (803,85);
+insert into t (id,a) values (803,86);
+insert into t (id,a) values (803,87);
+insert into t (id,a) values (803,88);
+insert into t (id,a) values (803,89);
+insert into t (id,a) values (803,90);
+insert into t (id,a) values (803,91);
+insert into t (id,a) values (803,92);
+insert into t (id,a) values (803,93);
+insert into t (id,a) values (803,94);
+insert into t (id,a) values (803,95);
+insert into t (id,a) values (803,96);
+insert into t (id,a) values (803,97);
+insert into t (id,a) values (803,98);
+insert into t (id,a) values (803,99);
+insert into t (id,a) values (804,0);
+insert into t (id,a) values (804,1);
+insert into t (id,a) values (804,2);
+insert into t (id,a) values (804,3);
+insert into t (id,a) values (804,4);
+insert into t (id,a) values (804,5);
+insert into t (id,a) values (804,6);
+insert into t (id,a) values (804,7);
+insert into t (id,a) values (804,8);
+insert into t (id,a) values (804,9);
+insert into t (id,a) values (804,10);
+insert into t (id,a) values (804,11);
+insert into t (id,a) values (804,12);
+insert into t (id,a) values (804,13);
+insert into t (id,a) values (804,14);
+insert into t (id,a) values (804,15);
+insert into t (id,a) values (804,16);
+insert into t (id,a) values (804,17);
+insert into t (id,a) values (804,18);
+insert into t (id,a) values (804,19);
+insert into t (id,a) values (804,20);
+insert into t (id,a) values (804,21);
+insert into t (id,a) values (804,22);
+insert into t (id,a) values (804,23);
+insert into t (id,a) values (804,24);
+insert into t (id,a) values (804,25);
+insert into t (id,a) values (804,26);
+insert into t (id,a) values (804,27);
+insert into t (id,a) values (804,28);
+insert into t (id,a) values (804,29);
+insert into t (id,a) values (804,30);
+insert into t (id,a) values (804,31);
+insert into t (id,a) values (804,32);
+insert into t (id,a) values (804,33);
+insert into t (id,a) values (804,34);
+insert into t (id,a) values (804,35);
+insert into t (id,a) values (804,36);
+insert into t (id,a) values (804,37);
+insert into t (id,a) values (804,38);
+insert into t (id,a) values (804,39);
+insert into t (id,a) values (804,40);
+insert into t (id,a) values (804,41);
+insert into t (id,a) values (804,42);
+insert into t (id,a) values (804,43);
+insert into t (id,a) values (804,44);
+insert into t (id,a) values (804,45);
+insert into t (id,a) values (804,46);
+insert into t (id,a) values (804,47);
+insert into t (id,a) values (804,48);
+insert into t (id,a) values (804,49);
+insert into t (id,a) values (804,50);
+insert into t (id,a) values (804,51);
+insert into t (id,a) values (804,52);
+insert into t (id,a) values (804,53);
+insert into t (id,a) values (804,54);
+insert into t (id,a) values (804,55);
+insert into t (id,a) values (804,56);
+insert into t (id,a) values (804,57);
+insert into t (id,a) values (804,58);
+insert into t (id,a) values (804,59);
+insert into t (id,a) values (804,60);
+insert into t (id,a) values (804,61);
+insert into t (id,a) values (804,62);
+insert into t (id,a) values (804,63);
+insert into t (id,a) values (804,64);
+insert into t (id,a) values (804,65);
+insert into t (id,a) values (804,66);
+insert into t (id,a) values (804,67);
+insert into t (id,a) values (804,68);
+insert into t (id,a) values (804,69);
+insert into t (id,a) values (804,70);
+insert into t (id,a) values (804,71);
+insert into t (id,a) values (804,72);
+insert into t (id,a) values (804,73);
+insert into t (id,a) values (804,74);
+insert into t (id,a) values (804,75);
+insert into t (id,a) values (804,76);
+insert into t (id,a) values (804,77);
+insert into t (id,a) values (804,78);
+insert into t (id,a) values (804,79);
+insert into t (id,a) values (804,80);
+insert into t (id,a) values (804,81);
+insert into t (id,a) values (804,82);
+insert into t (id,a) values (804,83);
+insert into t (id,a) values (804,84);
+insert into t (id,a) values (804,85);
+insert into t (id,a) values (804,86);
+insert into t (id,a) values (804,87);
+insert into t (id,a) values (804,88);
+insert into t (id,a) values (804,89);
+insert into t (id,a) values (804,90);
+insert into t (id,a) values (804,91);
+insert into t (id,a) values (804,92);
+insert into t (id,a) values (804,93);
+insert into t (id,a) values (804,94);
+insert into t (id,a) values (804,95);
+insert into t (id,a) values (804,96);
+insert into t (id,a) values (804,97);
+insert into t (id,a) values (804,98);
+insert into t (id,a) values (804,99);
+insert into t (id,a) values (805,0);
+insert into t (id,a) values (805,1);
+insert into t (id,a) values (805,2);
+insert into t (id,a) values (805,3);
+insert into t (id,a) values (805,4);
+insert into t (id,a) values (805,5);
+insert into t (id,a) values (805,6);
+insert into t (id,a) values (805,7);
+insert into t (id,a) values (805,8);
+insert into t (id,a) values (805,9);
+insert into t (id,a) values (805,10);
+insert into t (id,a) values (805,11);
+insert into t (id,a) values (805,12);
+insert into t (id,a) values (805,13);
+insert into t (id,a) values (805,14);
+insert into t (id,a) values (805,15);
+insert into t (id,a) values (805,16);
+insert into t (id,a) values (805,17);
+insert into t (id,a) values (805,18);
+insert into t (id,a) values (805,19);
+insert into t (id,a) values (805,20);
+insert into t (id,a) values (805,21);
+insert into t (id,a) values (805,22);
+insert into t (id,a) values (805,23);
+insert into t (id,a) values (805,24);
+insert into t (id,a) values (805,25);
+insert into t (id,a) values (805,26);
+insert into t (id,a) values (805,27);
+insert into t (id,a) values (805,28);
+insert into t (id,a) values (805,29);
+insert into t (id,a) values (805,30);
+insert into t (id,a) values (805,31);
+insert into t (id,a) values (805,32);
+insert into t (id,a) values (805,33);
+insert into t (id,a) values (805,34);
+insert into t (id,a) values (805,35);
+insert into t (id,a) values (805,36);
+insert into t (id,a) values (805,37);
+insert into t (id,a) values (805,38);
+insert into t (id,a) values (805,39);
+insert into t (id,a) values (805,40);
+insert into t (id,a) values (805,41);
+insert into t (id,a) values (805,42);
+insert into t (id,a) values (805,43);
+insert into t (id,a) values (805,44);
+insert into t (id,a) values (805,45);
+insert into t (id,a) values (805,46);
+insert into t (id,a) values (805,47);
+insert into t (id,a) values (805,48);
+insert into t (id,a) values (805,49);
+insert into t (id,a) values (805,50);
+insert into t (id,a) values (805,51);
+insert into t (id,a) values (805,52);
+insert into t (id,a) values (805,53);
+insert into t (id,a) values (805,54);
+insert into t (id,a) values (805,55);
+insert into t (id,a) values (805,56);
+insert into t (id,a) values (805,57);
+insert into t (id,a) values (805,58);
+insert into t (id,a) values (805,59);
+insert into t (id,a) values (805,60);
+insert into t (id,a) values (805,61);
+insert into t (id,a) values (805,62);
+insert into t (id,a) values (805,63);
+insert into t (id,a) values (805,64);
+insert into t (id,a) values (805,65);
+insert into t (id,a) values (805,66);
+insert into t (id,a) values (805,67);
+insert into t (id,a) values (805,68);
+insert into t (id,a) values (805,69);
+insert into t (id,a) values (805,70);
+insert into t (id,a) values (805,71);
+insert into t (id,a) values (805,72);
+insert into t (id,a) values (805,73);
+insert into t (id,a) values (805,74);
+insert into t (id,a) values (805,75);
+insert into t (id,a) values (805,76);
+insert into t (id,a) values (805,77);
+insert into t (id,a) values (805,78);
+insert into t (id,a) values (805,79);
+insert into t (id,a) values (805,80);
+insert into t (id,a) values (805,81);
+insert into t (id,a) values (805,82);
+insert into t (id,a) values (805,83);
+insert into t (id,a) values (805,84);
+insert into t (id,a) values (805,85);
+insert into t (id,a) values (805,86);
+insert into t (id,a) values (805,87);
+insert into t (id,a) values (805,88);
+insert into t (id,a) values (805,89);
+insert into t (id,a) values (805,90);
+insert into t (id,a) values (805,91);
+insert into t (id,a) values (805,92);
+insert into t (id,a) values (805,93);
+insert into t (id,a) values (805,94);
+insert into t (id,a) values (805,95);
+insert into t (id,a) values (805,96);
+insert into t (id,a) values (805,97);
+insert into t (id,a) values (805,98);
+insert into t (id,a) values (805,99);
+insert into t (id,a) values (806,0);
+insert into t (id,a) values (806,1);
+insert into t (id,a) values (806,2);
+insert into t (id,a) values (806,3);
+insert into t (id,a) values (806,4);
+insert into t (id,a) values (806,5);
+insert into t (id,a) values (806,6);
+insert into t (id,a) values (806,7);
+insert into t (id,a) values (806,8);
+insert into t (id,a) values (806,9);
+insert into t (id,a) values (806,10);
+insert into t (id,a) values (806,11);
+insert into t (id,a) values (806,12);
+insert into t (id,a) values (806,13);
+insert into t (id,a) values (806,14);
+insert into t (id,a) values (806,15);
+insert into t (id,a) values (806,16);
+insert into t (id,a) values (806,17);
+insert into t (id,a) values (806,18);
+insert into t (id,a) values (806,19);
+insert into t (id,a) values (806,20);
+insert into t (id,a) values (806,21);
+insert into t (id,a) values (806,22);
+insert into t (id,a) values (806,23);
+insert into t (id,a) values (806,24);
+insert into t (id,a) values (806,25);
+insert into t (id,a) values (806,26);
+insert into t (id,a) values (806,27);
+insert into t (id,a) values (806,28);
+insert into t (id,a) values (806,29);
+insert into t (id,a) values (806,30);
+insert into t (id,a) values (806,31);
+insert into t (id,a) values (806,32);
+insert into t (id,a) values (806,33);
+insert into t (id,a) values (806,34);
+insert into t (id,a) values (806,35);
+insert into t (id,a) values (806,36);
+insert into t (id,a) values (806,37);
+insert into t (id,a) values (806,38);
+insert into t (id,a) values (806,39);
+insert into t (id,a) values (806,40);
+insert into t (id,a) values (806,41);
+insert into t (id,a) values (806,42);
+insert into t (id,a) values (806,43);
+insert into t (id,a) values (806,44);
+insert into t (id,a) values (806,45);
+insert into t (id,a) values (806,46);
+insert into t (id,a) values (806,47);
+insert into t (id,a) values (806,48);
+insert into t (id,a) values (806,49);
+insert into t (id,a) values (806,50);
+insert into t (id,a) values (806,51);
+insert into t (id,a) values (806,52);
+insert into t (id,a) values (806,53);
+insert into t (id,a) values (806,54);
+insert into t (id,a) values (806,55);
+insert into t (id,a) values (806,56);
+insert into t (id,a) values (806,57);
+insert into t (id,a) values (806,58);
+insert into t (id,a) values (806,59);
+insert into t (id,a) values (806,60);
+insert into t (id,a) values (806,61);
+insert into t (id,a) values (806,62);
+insert into t (id,a) values (806,63);
+insert into t (id,a) values (806,64);
+insert into t (id,a) values (806,65);
+insert into t (id,a) values (806,66);
+insert into t (id,a) values (806,67);
+insert into t (id,a) values (806,68);
+insert into t (id,a) values (806,69);
+insert into t (id,a) values (806,70);
+insert into t (id,a) values (806,71);
+insert into t (id,a) values (806,72);
+insert into t (id,a) values (806,73);
+insert into t (id,a) values (806,74);
+insert into t (id,a) values (806,75);
+insert into t (id,a) values (806,76);
+insert into t (id,a) values (806,77);
+insert into t (id,a) values (806,78);
+insert into t (id,a) values (806,79);
+insert into t (id,a) values (806,80);
+insert into t (id,a) values (806,81);
+insert into t (id,a) values (806,82);
+insert into t (id,a) values (806,83);
+insert into t (id,a) values (806,84);
+insert into t (id,a) values (806,85);
+insert into t (id,a) values (806,86);
+insert into t (id,a) values (806,87);
+insert into t (id,a) values (806,88);
+insert into t (id,a) values (806,89);
+insert into t (id,a) values (806,90);
+insert into t (id,a) values (806,91);
+insert into t (id,a) values (806,92);
+insert into t (id,a) values (806,93);
+insert into t (id,a) values (806,94);
+insert into t (id,a) values (806,95);
+insert into t (id,a) values (806,96);
+insert into t (id,a) values (806,97);
+insert into t (id,a) values (806,98);
+insert into t (id,a) values (806,99);
+insert into t (id,a) values (807,0);
+insert into t (id,a) values (807,1);
+insert into t (id,a) values (807,2);
+insert into t (id,a) values (807,3);
+insert into t (id,a) values (807,4);
+insert into t (id,a) values (807,5);
+insert into t (id,a) values (807,6);
+insert into t (id,a) values (807,7);
+insert into t (id,a) values (807,8);
+insert into t (id,a) values (807,9);
+insert into t (id,a) values (807,10);
+insert into t (id,a) values (807,11);
+insert into t (id,a) values (807,12);
+insert into t (id,a) values (807,13);
+insert into t (id,a) values (807,14);
+insert into t (id,a) values (807,15);
+insert into t (id,a) values (807,16);
+insert into t (id,a) values (807,17);
+insert into t (id,a) values (807,18);
+insert into t (id,a) values (807,19);
+insert into t (id,a) values (807,20);
+insert into t (id,a) values (807,21);
+insert into t (id,a) values (807,22);
+insert into t (id,a) values (807,23);
+insert into t (id,a) values (807,24);
+insert into t (id,a) values (807,25);
+insert into t (id,a) values (807,26);
+insert into t (id,a) values (807,27);
+insert into t (id,a) values (807,28);
+insert into t (id,a) values (807,29);
+insert into t (id,a) values (807,30);
+insert into t (id,a) values (807,31);
+insert into t (id,a) values (807,32);
+insert into t (id,a) values (807,33);
+insert into t (id,a) values (807,34);
+insert into t (id,a) values (807,35);
+insert into t (id,a) values (807,36);
+insert into t (id,a) values (807,37);
+insert into t (id,a) values (807,38);
+insert into t (id,a) values (807,39);
+insert into t (id,a) values (807,40);
+insert into t (id,a) values (807,41);
+insert into t (id,a) values (807,42);
+insert into t (id,a) values (807,43);
+insert into t (id,a) values (807,44);
+insert into t (id,a) values (807,45);
+insert into t (id,a) values (807,46);
+insert into t (id,a) values (807,47);
+insert into t (id,a) values (807,48);
+insert into t (id,a) values (807,49);
+insert into t (id,a) values (807,50);
+insert into t (id,a) values (807,51);
+insert into t (id,a) values (807,52);
+insert into t (id,a) values (807,53);
+insert into t (id,a) values (807,54);
+insert into t (id,a) values (807,55);
+insert into t (id,a) values (807,56);
+insert into t (id,a) values (807,57);
+insert into t (id,a) values (807,58);
+insert into t (id,a) values (807,59);
+insert into t (id,a) values (807,60);
+insert into t (id,a) values (807,61);
+insert into t (id,a) values (807,62);
+insert into t (id,a) values (807,63);
+insert into t (id,a) values (807,64);
+insert into t (id,a) values (807,65);
+insert into t (id,a) values (807,66);
+insert into t (id,a) values (807,67);
+insert into t (id,a) values (807,68);
+insert into t (id,a) values (807,69);
+insert into t (id,a) values (807,70);
+insert into t (id,a) values (807,71);
+insert into t (id,a) values (807,72);
+insert into t (id,a) values (807,73);
+insert into t (id,a) values (807,74);
+insert into t (id,a) values (807,75);
+insert into t (id,a) values (807,76);
+insert into t (id,a) values (807,77);
+insert into t (id,a) values (807,78);
+insert into t (id,a) values (807,79);
+insert into t (id,a) values (807,80);
+insert into t (id,a) values (807,81);
+insert into t (id,a) values (807,82);
+insert into t (id,a) values (807,83);
+insert into t (id,a) values (807,84);
+insert into t (id,a) values (807,85);
+insert into t (id,a) values (807,86);
+insert into t (id,a) values (807,87);
+insert into t (id,a) values (807,88);
+insert into t (id,a) values (807,89);
+insert into t (id,a) values (807,90);
+insert into t (id,a) values (807,91);
+insert into t (id,a) values (807,92);
+insert into t (id,a) values (807,93);
+insert into t (id,a) values (807,94);
+insert into t (id,a) values (807,95);
+insert into t (id,a) values (807,96);
+insert into t (id,a) values (807,97);
+insert into t (id,a) values (807,98);
+insert into t (id,a) values (807,99);
+insert into t (id,a) values (808,0);
+insert into t (id,a) values (808,1);
+insert into t (id,a) values (808,2);
+insert into t (id,a) values (808,3);
+insert into t (id,a) values (808,4);
+insert into t (id,a) values (808,5);
+insert into t (id,a) values (808,6);
+insert into t (id,a) values (808,7);
+insert into t (id,a) values (808,8);
+insert into t (id,a) values (808,9);
+insert into t (id,a) values (808,10);
+insert into t (id,a) values (808,11);
+insert into t (id,a) values (808,12);
+insert into t (id,a) values (808,13);
+insert into t (id,a) values (808,14);
+insert into t (id,a) values (808,15);
+insert into t (id,a) values (808,16);
+insert into t (id,a) values (808,17);
+insert into t (id,a) values (808,18);
+insert into t (id,a) values (808,19);
+insert into t (id,a) values (808,20);
+insert into t (id,a) values (808,21);
+insert into t (id,a) values (808,22);
+insert into t (id,a) values (808,23);
+insert into t (id,a) values (808,24);
+insert into t (id,a) values (808,25);
+insert into t (id,a) values (808,26);
+insert into t (id,a) values (808,27);
+insert into t (id,a) values (808,28);
+insert into t (id,a) values (808,29);
+insert into t (id,a) values (808,30);
+insert into t (id,a) values (808,31);
+insert into t (id,a) values (808,32);
+insert into t (id,a) values (808,33);
+insert into t (id,a) values (808,34);
+insert into t (id,a) values (808,35);
+insert into t (id,a) values (808,36);
+insert into t (id,a) values (808,37);
+insert into t (id,a) values (808,38);
+insert into t (id,a) values (808,39);
+insert into t (id,a) values (808,40);
+insert into t (id,a) values (808,41);
+insert into t (id,a) values (808,42);
+insert into t (id,a) values (808,43);
+insert into t (id,a) values (808,44);
+insert into t (id,a) values (808,45);
+insert into t (id,a) values (808,46);
+insert into t (id,a) values (808,47);
+insert into t (id,a) values (808,48);
+insert into t (id,a) values (808,49);
+insert into t (id,a) values (808,50);
+insert into t (id,a) values (808,51);
+insert into t (id,a) values (808,52);
+insert into t (id,a) values (808,53);
+insert into t (id,a) values (808,54);
+insert into t (id,a) values (808,55);
+insert into t (id,a) values (808,56);
+insert into t (id,a) values (808,57);
+insert into t (id,a) values (808,58);
+insert into t (id,a) values (808,59);
+insert into t (id,a) values (808,60);
+insert into t (id,a) values (808,61);
+insert into t (id,a) values (808,62);
+insert into t (id,a) values (808,63);
+insert into t (id,a) values (808,64);
+insert into t (id,a) values (808,65);
+insert into t (id,a) values (808,66);
+insert into t (id,a) values (808,67);
+insert into t (id,a) values (808,68);
+insert into t (id,a) values (808,69);
+insert into t (id,a) values (808,70);
+insert into t (id,a) values (808,71);
+insert into t (id,a) values (808,72);
+insert into t (id,a) values (808,73);
+insert into t (id,a) values (808,74);
+insert into t (id,a) values (808,75);
+insert into t (id,a) values (808,76);
+insert into t (id,a) values (808,77);
+insert into t (id,a) values (808,78);
+insert into t (id,a) values (808,79);
+insert into t (id,a) values (808,80);
+insert into t (id,a) values (808,81);
+insert into t (id,a) values (808,82);
+insert into t (id,a) values (808,83);
+insert into t (id,a) values (808,84);
+insert into t (id,a) values (808,85);
+insert into t (id,a) values (808,86);
+insert into t (id,a) values (808,87);
+insert into t (id,a) values (808,88);
+insert into t (id,a) values (808,89);
+insert into t (id,a) values (808,90);
+insert into t (id,a) values (808,91);
+insert into t (id,a) values (808,92);
+insert into t (id,a) values (808,93);
+insert into t (id,a) values (808,94);
+insert into t (id,a) values (808,95);
+insert into t (id,a) values (808,96);
+insert into t (id,a) values (808,97);
+insert into t (id,a) values (808,98);
+insert into t (id,a) values (808,99);
+insert into t (id,a) values (809,0);
+insert into t (id,a) values (809,1);
+insert into t (id,a) values (809,2);
+insert into t (id,a) values (809,3);
+insert into t (id,a) values (809,4);
+insert into t (id,a) values (809,5);
+insert into t (id,a) values (809,6);
+insert into t (id,a) values (809,7);
+insert into t (id,a) values (809,8);
+insert into t (id,a) values (809,9);
+insert into t (id,a) values (809,10);
+insert into t (id,a) values (809,11);
+insert into t (id,a) values (809,12);
+insert into t (id,a) values (809,13);
+insert into t (id,a) values (809,14);
+insert into t (id,a) values (809,15);
+insert into t (id,a) values (809,16);
+insert into t (id,a) values (809,17);
+insert into t (id,a) values (809,18);
+insert into t (id,a) values (809,19);
+insert into t (id,a) values (809,20);
+insert into t (id,a) values (809,21);
+insert into t (id,a) values (809,22);
+insert into t (id,a) values (809,23);
+insert into t (id,a) values (809,24);
+insert into t (id,a) values (809,25);
+insert into t (id,a) values (809,26);
+insert into t (id,a) values (809,27);
+insert into t (id,a) values (809,28);
+insert into t (id,a) values (809,29);
+insert into t (id,a) values (809,30);
+insert into t (id,a) values (809,31);
+insert into t (id,a) values (809,32);
+insert into t (id,a) values (809,33);
+insert into t (id,a) values (809,34);
+insert into t (id,a) values (809,35);
+insert into t (id,a) values (809,36);
+insert into t (id,a) values (809,37);
+insert into t (id,a) values (809,38);
+insert into t (id,a) values (809,39);
+insert into t (id,a) values (809,40);
+insert into t (id,a) values (809,41);
+insert into t (id,a) values (809,42);
+insert into t (id,a) values (809,43);
+insert into t (id,a) values (809,44);
+insert into t (id,a) values (809,45);
+insert into t (id,a) values (809,46);
+insert into t (id,a) values (809,47);
+insert into t (id,a) values (809,48);
+insert into t (id,a) values (809,49);
+insert into t (id,a) values (809,50);
+insert into t (id,a) values (809,51);
+insert into t (id,a) values (809,52);
+insert into t (id,a) values (809,53);
+insert into t (id,a) values (809,54);
+insert into t (id,a) values (809,55);
+insert into t (id,a) values (809,56);
+insert into t (id,a) values (809,57);
+insert into t (id,a) values (809,58);
+insert into t (id,a) values (809,59);
+insert into t (id,a) values (809,60);
+insert into t (id,a) values (809,61);
+insert into t (id,a) values (809,62);
+insert into t (id,a) values (809,63);
+insert into t (id,a) values (809,64);
+insert into t (id,a) values (809,65);
+insert into t (id,a) values (809,66);
+insert into t (id,a) values (809,67);
+insert into t (id,a) values (809,68);
+insert into t (id,a) values (809,69);
+insert into t (id,a) values (809,70);
+insert into t (id,a) values (809,71);
+insert into t (id,a) values (809,72);
+insert into t (id,a) values (809,73);
+insert into t (id,a) values (809,74);
+insert into t (id,a) values (809,75);
+insert into t (id,a) values (809,76);
+insert into t (id,a) values (809,77);
+insert into t (id,a) values (809,78);
+insert into t (id,a) values (809,79);
+insert into t (id,a) values (809,80);
+insert into t (id,a) values (809,81);
+insert into t (id,a) values (809,82);
+insert into t (id,a) values (809,83);
+insert into t (id,a) values (809,84);
+insert into t (id,a) values (809,85);
+insert into t (id,a) values (809,86);
+insert into t (id,a) values (809,87);
+insert into t (id,a) values (809,88);
+insert into t (id,a) values (809,89);
+insert into t (id,a) values (809,90);
+insert into t (id,a) values (809,91);
+insert into t (id,a) values (809,92);
+insert into t (id,a) values (809,93);
+insert into t (id,a) values (809,94);
+insert into t (id,a) values (809,95);
+insert into t (id,a) values (809,96);
+insert into t (id,a) values (809,97);
+insert into t (id,a) values (809,98);
+insert into t (id,a) values (809,99);
+insert into t (id,a) values (810,0);
+insert into t (id,a) values (810,1);
+insert into t (id,a) values (810,2);
+insert into t (id,a) values (810,3);
+insert into t (id,a) values (810,4);
+insert into t (id,a) values (810,5);
+insert into t (id,a) values (810,6);
+insert into t (id,a) values (810,7);
+insert into t (id,a) values (810,8);
+insert into t (id,a) values (810,9);
+insert into t (id,a) values (810,10);
+insert into t (id,a) values (810,11);
+insert into t (id,a) values (810,12);
+insert into t (id,a) values (810,13);
+insert into t (id,a) values (810,14);
+insert into t (id,a) values (810,15);
+insert into t (id,a) values (810,16);
+insert into t (id,a) values (810,17);
+insert into t (id,a) values (810,18);
+insert into t (id,a) values (810,19);
+insert into t (id,a) values (810,20);
+insert into t (id,a) values (810,21);
+insert into t (id,a) values (810,22);
+insert into t (id,a) values (810,23);
+insert into t (id,a) values (810,24);
+insert into t (id,a) values (810,25);
+insert into t (id,a) values (810,26);
+insert into t (id,a) values (810,27);
+insert into t (id,a) values (810,28);
+insert into t (id,a) values (810,29);
+insert into t (id,a) values (810,30);
+insert into t (id,a) values (810,31);
+insert into t (id,a) values (810,32);
+insert into t (id,a) values (810,33);
+insert into t (id,a) values (810,34);
+insert into t (id,a) values (810,35);
+insert into t (id,a) values (810,36);
+insert into t (id,a) values (810,37);
+insert into t (id,a) values (810,38);
+insert into t (id,a) values (810,39);
+insert into t (id,a) values (810,40);
+insert into t (id,a) values (810,41);
+insert into t (id,a) values (810,42);
+insert into t (id,a) values (810,43);
+insert into t (id,a) values (810,44);
+insert into t (id,a) values (810,45);
+insert into t (id,a) values (810,46);
+insert into t (id,a) values (810,47);
+insert into t (id,a) values (810,48);
+insert into t (id,a) values (810,49);
+insert into t (id,a) values (810,50);
+insert into t (id,a) values (810,51);
+insert into t (id,a) values (810,52);
+insert into t (id,a) values (810,53);
+insert into t (id,a) values (810,54);
+insert into t (id,a) values (810,55);
+insert into t (id,a) values (810,56);
+insert into t (id,a) values (810,57);
+insert into t (id,a) values (810,58);
+insert into t (id,a) values (810,59);
+insert into t (id,a) values (810,60);
+insert into t (id,a) values (810,61);
+insert into t (id,a) values (810,62);
+insert into t (id,a) values (810,63);
+insert into t (id,a) values (810,64);
+insert into t (id,a) values (810,65);
+insert into t (id,a) values (810,66);
+insert into t (id,a) values (810,67);
+insert into t (id,a) values (810,68);
+insert into t (id,a) values (810,69);
+insert into t (id,a) values (810,70);
+insert into t (id,a) values (810,71);
+insert into t (id,a) values (810,72);
+insert into t (id,a) values (810,73);
+insert into t (id,a) values (810,74);
+insert into t (id,a) values (810,75);
+insert into t (id,a) values (810,76);
+insert into t (id,a) values (810,77);
+insert into t (id,a) values (810,78);
+insert into t (id,a) values (810,79);
+insert into t (id,a) values (810,80);
+insert into t (id,a) values (810,81);
+insert into t (id,a) values (810,82);
+insert into t (id,a) values (810,83);
+insert into t (id,a) values (810,84);
+insert into t (id,a) values (810,85);
+insert into t (id,a) values (810,86);
+insert into t (id,a) values (810,87);
+insert into t (id,a) values (810,88);
+insert into t (id,a) values (810,89);
+insert into t (id,a) values (810,90);
+insert into t (id,a) values (810,91);
+insert into t (id,a) values (810,92);
+insert into t (id,a) values (810,93);
+insert into t (id,a) values (810,94);
+insert into t (id,a) values (810,95);
+insert into t (id,a) values (810,96);
+insert into t (id,a) values (810,97);
+insert into t (id,a) values (810,98);
+insert into t (id,a) values (810,99);
+insert into t (id,a) values (811,0);
+insert into t (id,a) values (811,1);
+insert into t (id,a) values (811,2);
+insert into t (id,a) values (811,3);
+insert into t (id,a) values (811,4);
+insert into t (id,a) values (811,5);
+insert into t (id,a) values (811,6);
+insert into t (id,a) values (811,7);
+insert into t (id,a) values (811,8);
+insert into t (id,a) values (811,9);
+insert into t (id,a) values (811,10);
+insert into t (id,a) values (811,11);
+insert into t (id,a) values (811,12);
+insert into t (id,a) values (811,13);
+insert into t (id,a) values (811,14);
+insert into t (id,a) values (811,15);
+insert into t (id,a) values (811,16);
+insert into t (id,a) values (811,17);
+insert into t (id,a) values (811,18);
+insert into t (id,a) values (811,19);
+insert into t (id,a) values (811,20);
+insert into t (id,a) values (811,21);
+insert into t (id,a) values (811,22);
+insert into t (id,a) values (811,23);
+insert into t (id,a) values (811,24);
+insert into t (id,a) values (811,25);
+insert into t (id,a) values (811,26);
+insert into t (id,a) values (811,27);
+insert into t (id,a) values (811,28);
+insert into t (id,a) values (811,29);
+insert into t (id,a) values (811,30);
+insert into t (id,a) values (811,31);
+insert into t (id,a) values (811,32);
+insert into t (id,a) values (811,33);
+insert into t (id,a) values (811,34);
+insert into t (id,a) values (811,35);
+insert into t (id,a) values (811,36);
+insert into t (id,a) values (811,37);
+insert into t (id,a) values (811,38);
+insert into t (id,a) values (811,39);
+insert into t (id,a) values (811,40);
+insert into t (id,a) values (811,41);
+insert into t (id,a) values (811,42);
+insert into t (id,a) values (811,43);
+insert into t (id,a) values (811,44);
+insert into t (id,a) values (811,45);
+insert into t (id,a) values (811,46);
+insert into t (id,a) values (811,47);
+insert into t (id,a) values (811,48);
+insert into t (id,a) values (811,49);
+insert into t (id,a) values (811,50);
+insert into t (id,a) values (811,51);
+insert into t (id,a) values (811,52);
+insert into t (id,a) values (811,53);
+insert into t (id,a) values (811,54);
+insert into t (id,a) values (811,55);
+insert into t (id,a) values (811,56);
+insert into t (id,a) values (811,57);
+insert into t (id,a) values (811,58);
+insert into t (id,a) values (811,59);
+insert into t (id,a) values (811,60);
+insert into t (id,a) values (811,61);
+insert into t (id,a) values (811,62);
+insert into t (id,a) values (811,63);
+insert into t (id,a) values (811,64);
+insert into t (id,a) values (811,65);
+insert into t (id,a) values (811,66);
+insert into t (id,a) values (811,67);
+insert into t (id,a) values (811,68);
+insert into t (id,a) values (811,69);
+insert into t (id,a) values (811,70);
+insert into t (id,a) values (811,71);
+insert into t (id,a) values (811,72);
+insert into t (id,a) values (811,73);
+insert into t (id,a) values (811,74);
+insert into t (id,a) values (811,75);
+insert into t (id,a) values (811,76);
+insert into t (id,a) values (811,77);
+insert into t (id,a) values (811,78);
+insert into t (id,a) values (811,79);
+insert into t (id,a) values (811,80);
+insert into t (id,a) values (811,81);
+insert into t (id,a) values (811,82);
+insert into t (id,a) values (811,83);
+insert into t (id,a) values (811,84);
+insert into t (id,a) values (811,85);
+insert into t (id,a) values (811,86);
+insert into t (id,a) values (811,87);
+insert into t (id,a) values (811,88);
+insert into t (id,a) values (811,89);
+insert into t (id,a) values (811,90);
+insert into t (id,a) values (811,91);
+insert into t (id,a) values (811,92);
+insert into t (id,a) values (811,93);
+insert into t (id,a) values (811,94);
+insert into t (id,a) values (811,95);
+insert into t (id,a) values (811,96);
+insert into t (id,a) values (811,97);
+insert into t (id,a) values (811,98);
+insert into t (id,a) values (811,99);
+insert into t (id,a) values (812,0);
+insert into t (id,a) values (812,1);
+insert into t (id,a) values (812,2);
+insert into t (id,a) values (812,3);
+insert into t (id,a) values (812,4);
+insert into t (id,a) values (812,5);
+insert into t (id,a) values (812,6);
+insert into t (id,a) values (812,7);
+insert into t (id,a) values (812,8);
+insert into t (id,a) values (812,9);
+insert into t (id,a) values (812,10);
+insert into t (id,a) values (812,11);
+insert into t (id,a) values (812,12);
+insert into t (id,a) values (812,13);
+insert into t (id,a) values (812,14);
+insert into t (id,a) values (812,15);
+insert into t (id,a) values (812,16);
+insert into t (id,a) values (812,17);
+insert into t (id,a) values (812,18);
+insert into t (id,a) values (812,19);
+insert into t (id,a) values (812,20);
+insert into t (id,a) values (812,21);
+insert into t (id,a) values (812,22);
+insert into t (id,a) values (812,23);
+insert into t (id,a) values (812,24);
+insert into t (id,a) values (812,25);
+insert into t (id,a) values (812,26);
+insert into t (id,a) values (812,27);
+insert into t (id,a) values (812,28);
+insert into t (id,a) values (812,29);
+insert into t (id,a) values (812,30);
+insert into t (id,a) values (812,31);
+insert into t (id,a) values (812,32);
+insert into t (id,a) values (812,33);
+insert into t (id,a) values (812,34);
+insert into t (id,a) values (812,35);
+insert into t (id,a) values (812,36);
+insert into t (id,a) values (812,37);
+insert into t (id,a) values (812,38);
+insert into t (id,a) values (812,39);
+insert into t (id,a) values (812,40);
+insert into t (id,a) values (812,41);
+insert into t (id,a) values (812,42);
+insert into t (id,a) values (812,43);
+insert into t (id,a) values (812,44);
+insert into t (id,a) values (812,45);
+insert into t (id,a) values (812,46);
+insert into t (id,a) values (812,47);
+insert into t (id,a) values (812,48);
+insert into t (id,a) values (812,49);
+insert into t (id,a) values (812,50);
+insert into t (id,a) values (812,51);
+insert into t (id,a) values (812,52);
+insert into t (id,a) values (812,53);
+insert into t (id,a) values (812,54);
+insert into t (id,a) values (812,55);
+insert into t (id,a) values (812,56);
+insert into t (id,a) values (812,57);
+insert into t (id,a) values (812,58);
+insert into t (id,a) values (812,59);
+insert into t (id,a) values (812,60);
+insert into t (id,a) values (812,61);
+insert into t (id,a) values (812,62);
+insert into t (id,a) values (812,63);
+insert into t (id,a) values (812,64);
+insert into t (id,a) values (812,65);
+insert into t (id,a) values (812,66);
+insert into t (id,a) values (812,67);
+insert into t (id,a) values (812,68);
+insert into t (id,a) values (812,69);
+insert into t (id,a) values (812,70);
+insert into t (id,a) values (812,71);
+insert into t (id,a) values (812,72);
+insert into t (id,a) values (812,73);
+insert into t (id,a) values (812,74);
+insert into t (id,a) values (812,75);
+insert into t (id,a) values (812,76);
+insert into t (id,a) values (812,77);
+insert into t (id,a) values (812,78);
+insert into t (id,a) values (812,79);
+insert into t (id,a) values (812,80);
+insert into t (id,a) values (812,81);
+insert into t (id,a) values (812,82);
+insert into t (id,a) values (812,83);
+insert into t (id,a) values (812,84);
+insert into t (id,a) values (812,85);
+insert into t (id,a) values (812,86);
+insert into t (id,a) values (812,87);
+insert into t (id,a) values (812,88);
+insert into t (id,a) values (812,89);
+insert into t (id,a) values (812,90);
+insert into t (id,a) values (812,91);
+insert into t (id,a) values (812,92);
+insert into t (id,a) values (812,93);
+insert into t (id,a) values (812,94);
+insert into t (id,a) values (812,95);
+insert into t (id,a) values (812,96);
+insert into t (id,a) values (812,97);
+insert into t (id,a) values (812,98);
+insert into t (id,a) values (812,99);
+insert into t (id,a) values (813,0);
+insert into t (id,a) values (813,1);
+insert into t (id,a) values (813,2);
+insert into t (id,a) values (813,3);
+insert into t (id,a) values (813,4);
+insert into t (id,a) values (813,5);
+insert into t (id,a) values (813,6);
+insert into t (id,a) values (813,7);
+insert into t (id,a) values (813,8);
+insert into t (id,a) values (813,9);
+insert into t (id,a) values (813,10);
+insert into t (id,a) values (813,11);
+insert into t (id,a) values (813,12);
+insert into t (id,a) values (813,13);
+insert into t (id,a) values (813,14);
+insert into t (id,a) values (813,15);
+insert into t (id,a) values (813,16);
+insert into t (id,a) values (813,17);
+insert into t (id,a) values (813,18);
+insert into t (id,a) values (813,19);
+insert into t (id,a) values (813,20);
+insert into t (id,a) values (813,21);
+insert into t (id,a) values (813,22);
+insert into t (id,a) values (813,23);
+insert into t (id,a) values (813,24);
+insert into t (id,a) values (813,25);
+insert into t (id,a) values (813,26);
+insert into t (id,a) values (813,27);
+insert into t (id,a) values (813,28);
+insert into t (id,a) values (813,29);
+insert into t (id,a) values (813,30);
+insert into t (id,a) values (813,31);
+insert into t (id,a) values (813,32);
+insert into t (id,a) values (813,33);
+insert into t (id,a) values (813,34);
+insert into t (id,a) values (813,35);
+insert into t (id,a) values (813,36);
+insert into t (id,a) values (813,37);
+insert into t (id,a) values (813,38);
+insert into t (id,a) values (813,39);
+insert into t (id,a) values (813,40);
+insert into t (id,a) values (813,41);
+insert into t (id,a) values (813,42);
+insert into t (id,a) values (813,43);
+insert into t (id,a) values (813,44);
+insert into t (id,a) values (813,45);
+insert into t (id,a) values (813,46);
+insert into t (id,a) values (813,47);
+insert into t (id,a) values (813,48);
+insert into t (id,a) values (813,49);
+insert into t (id,a) values (813,50);
+insert into t (id,a) values (813,51);
+insert into t (id,a) values (813,52);
+insert into t (id,a) values (813,53);
+insert into t (id,a) values (813,54);
+insert into t (id,a) values (813,55);
+insert into t (id,a) values (813,56);
+insert into t (id,a) values (813,57);
+insert into t (id,a) values (813,58);
+insert into t (id,a) values (813,59);
+insert into t (id,a) values (813,60);
+insert into t (id,a) values (813,61);
+insert into t (id,a) values (813,62);
+insert into t (id,a) values (813,63);
+insert into t (id,a) values (813,64);
+insert into t (id,a) values (813,65);
+insert into t (id,a) values (813,66);
+insert into t (id,a) values (813,67);
+insert into t (id,a) values (813,68);
+insert into t (id,a) values (813,69);
+insert into t (id,a) values (813,70);
+insert into t (id,a) values (813,71);
+insert into t (id,a) values (813,72);
+insert into t (id,a) values (813,73);
+insert into t (id,a) values (813,74);
+insert into t (id,a) values (813,75);
+insert into t (id,a) values (813,76);
+insert into t (id,a) values (813,77);
+insert into t (id,a) values (813,78);
+insert into t (id,a) values (813,79);
+insert into t (id,a) values (813,80);
+insert into t (id,a) values (813,81);
+insert into t (id,a) values (813,82);
+insert into t (id,a) values (813,83);
+insert into t (id,a) values (813,84);
+insert into t (id,a) values (813,85);
+insert into t (id,a) values (813,86);
+insert into t (id,a) values (813,87);
+insert into t (id,a) values (813,88);
+insert into t (id,a) values (813,89);
+insert into t (id,a) values (813,90);
+insert into t (id,a) values (813,91);
+insert into t (id,a) values (813,92);
+insert into t (id,a) values (813,93);
+insert into t (id,a) values (813,94);
+insert into t (id,a) values (813,95);
+insert into t (id,a) values (813,96);
+insert into t (id,a) values (813,97);
+insert into t (id,a) values (813,98);
+insert into t (id,a) values (813,99);
+insert into t (id,a) values (814,0);
+insert into t (id,a) values (814,1);
+insert into t (id,a) values (814,2);
+insert into t (id,a) values (814,3);
+insert into t (id,a) values (814,4);
+insert into t (id,a) values (814,5);
+insert into t (id,a) values (814,6);
+insert into t (id,a) values (814,7);
+insert into t (id,a) values (814,8);
+insert into t (id,a) values (814,9);
+insert into t (id,a) values (814,10);
+insert into t (id,a) values (814,11);
+insert into t (id,a) values (814,12);
+insert into t (id,a) values (814,13);
+insert into t (id,a) values (814,14);
+insert into t (id,a) values (814,15);
+insert into t (id,a) values (814,16);
+insert into t (id,a) values (814,17);
+insert into t (id,a) values (814,18);
+insert into t (id,a) values (814,19);
+insert into t (id,a) values (814,20);
+insert into t (id,a) values (814,21);
+insert into t (id,a) values (814,22);
+insert into t (id,a) values (814,23);
+insert into t (id,a) values (814,24);
+insert into t (id,a) values (814,25);
+insert into t (id,a) values (814,26);
+insert into t (id,a) values (814,27);
+insert into t (id,a) values (814,28);
+insert into t (id,a) values (814,29);
+insert into t (id,a) values (814,30);
+insert into t (id,a) values (814,31);
+insert into t (id,a) values (814,32);
+insert into t (id,a) values (814,33);
+insert into t (id,a) values (814,34);
+insert into t (id,a) values (814,35);
+insert into t (id,a) values (814,36);
+insert into t (id,a) values (814,37);
+insert into t (id,a) values (814,38);
+insert into t (id,a) values (814,39);
+insert into t (id,a) values (814,40);
+insert into t (id,a) values (814,41);
+insert into t (id,a) values (814,42);
+insert into t (id,a) values (814,43);
+insert into t (id,a) values (814,44);
+insert into t (id,a) values (814,45);
+insert into t (id,a) values (814,46);
+insert into t (id,a) values (814,47);
+insert into t (id,a) values (814,48);
+insert into t (id,a) values (814,49);
+insert into t (id,a) values (814,50);
+insert into t (id,a) values (814,51);
+insert into t (id,a) values (814,52);
+insert into t (id,a) values (814,53);
+insert into t (id,a) values (814,54);
+insert into t (id,a) values (814,55);
+insert into t (id,a) values (814,56);
+insert into t (id,a) values (814,57);
+insert into t (id,a) values (814,58);
+insert into t (id,a) values (814,59);
+insert into t (id,a) values (814,60);
+insert into t (id,a) values (814,61);
+insert into t (id,a) values (814,62);
+insert into t (id,a) values (814,63);
+insert into t (id,a) values (814,64);
+insert into t (id,a) values (814,65);
+insert into t (id,a) values (814,66);
+insert into t (id,a) values (814,67);
+insert into t (id,a) values (814,68);
+insert into t (id,a) values (814,69);
+insert into t (id,a) values (814,70);
+insert into t (id,a) values (814,71);
+insert into t (id,a) values (814,72);
+insert into t (id,a) values (814,73);
+insert into t (id,a) values (814,74);
+insert into t (id,a) values (814,75);
+insert into t (id,a) values (814,76);
+insert into t (id,a) values (814,77);
+insert into t (id,a) values (814,78);
+insert into t (id,a) values (814,79);
+insert into t (id,a) values (814,80);
+insert into t (id,a) values (814,81);
+insert into t (id,a) values (814,82);
+insert into t (id,a) values (814,83);
+insert into t (id,a) values (814,84);
+insert into t (id,a) values (814,85);
+insert into t (id,a) values (814,86);
+insert into t (id,a) values (814,87);
+insert into t (id,a) values (814,88);
+insert into t (id,a) values (814,89);
+insert into t (id,a) values (814,90);
+insert into t (id,a) values (814,91);
+insert into t (id,a) values (814,92);
+insert into t (id,a) values (814,93);
+insert into t (id,a) values (814,94);
+insert into t (id,a) values (814,95);
+insert into t (id,a) values (814,96);
+insert into t (id,a) values (814,97);
+insert into t (id,a) values (814,98);
+insert into t (id,a) values (814,99);
+insert into t (id,a) values (815,0);
+insert into t (id,a) values (815,1);
+insert into t (id,a) values (815,2);
+insert into t (id,a) values (815,3);
+insert into t (id,a) values (815,4);
+insert into t (id,a) values (815,5);
+insert into t (id,a) values (815,6);
+insert into t (id,a) values (815,7);
+insert into t (id,a) values (815,8);
+insert into t (id,a) values (815,9);
+insert into t (id,a) values (815,10);
+insert into t (id,a) values (815,11);
+insert into t (id,a) values (815,12);
+insert into t (id,a) values (815,13);
+insert into t (id,a) values (815,14);
+insert into t (id,a) values (815,15);
+insert into t (id,a) values (815,16);
+insert into t (id,a) values (815,17);
+insert into t (id,a) values (815,18);
+insert into t (id,a) values (815,19);
+insert into t (id,a) values (815,20);
+insert into t (id,a) values (815,21);
+insert into t (id,a) values (815,22);
+insert into t (id,a) values (815,23);
+insert into t (id,a) values (815,24);
+insert into t (id,a) values (815,25);
+insert into t (id,a) values (815,26);
+insert into t (id,a) values (815,27);
+insert into t (id,a) values (815,28);
+insert into t (id,a) values (815,29);
+insert into t (id,a) values (815,30);
+insert into t (id,a) values (815,31);
+insert into t (id,a) values (815,32);
+insert into t (id,a) values (815,33);
+insert into t (id,a) values (815,34);
+insert into t (id,a) values (815,35);
+insert into t (id,a) values (815,36);
+insert into t (id,a) values (815,37);
+insert into t (id,a) values (815,38);
+insert into t (id,a) values (815,39);
+insert into t (id,a) values (815,40);
+insert into t (id,a) values (815,41);
+insert into t (id,a) values (815,42);
+insert into t (id,a) values (815,43);
+insert into t (id,a) values (815,44);
+insert into t (id,a) values (815,45);
+insert into t (id,a) values (815,46);
+insert into t (id,a) values (815,47);
+insert into t (id,a) values (815,48);
+insert into t (id,a) values (815,49);
+insert into t (id,a) values (815,50);
+insert into t (id,a) values (815,51);
+insert into t (id,a) values (815,52);
+insert into t (id,a) values (815,53);
+insert into t (id,a) values (815,54);
+insert into t (id,a) values (815,55);
+insert into t (id,a) values (815,56);
+insert into t (id,a) values (815,57);
+insert into t (id,a) values (815,58);
+insert into t (id,a) values (815,59);
+insert into t (id,a) values (815,60);
+insert into t (id,a) values (815,61);
+insert into t (id,a) values (815,62);
+insert into t (id,a) values (815,63);
+insert into t (id,a) values (815,64);
+insert into t (id,a) values (815,65);
+insert into t (id,a) values (815,66);
+insert into t (id,a) values (815,67);
+insert into t (id,a) values (815,68);
+insert into t (id,a) values (815,69);
+insert into t (id,a) values (815,70);
+insert into t (id,a) values (815,71);
+insert into t (id,a) values (815,72);
+insert into t (id,a) values (815,73);
+insert into t (id,a) values (815,74);
+insert into t (id,a) values (815,75);
+insert into t (id,a) values (815,76);
+insert into t (id,a) values (815,77);
+insert into t (id,a) values (815,78);
+insert into t (id,a) values (815,79);
+insert into t (id,a) values (815,80);
+insert into t (id,a) values (815,81);
+insert into t (id,a) values (815,82);
+insert into t (id,a) values (815,83);
+insert into t (id,a) values (815,84);
+insert into t (id,a) values (815,85);
+insert into t (id,a) values (815,86);
+insert into t (id,a) values (815,87);
+insert into t (id,a) values (815,88);
+insert into t (id,a) values (815,89);
+insert into t (id,a) values (815,90);
+insert into t (id,a) values (815,91);
+insert into t (id,a) values (815,92);
+insert into t (id,a) values (815,93);
+insert into t (id,a) values (815,94);
+insert into t (id,a) values (815,95);
+insert into t (id,a) values (815,96);
+insert into t (id,a) values (815,97);
+insert into t (id,a) values (815,98);
+insert into t (id,a) values (815,99);
+insert into t (id,a) values (816,0);
+insert into t (id,a) values (816,1);
+insert into t (id,a) values (816,2);
+insert into t (id,a) values (816,3);
+insert into t (id,a) values (816,4);
+insert into t (id,a) values (816,5);
+insert into t (id,a) values (816,6);
+insert into t (id,a) values (816,7);
+insert into t (id,a) values (816,8);
+insert into t (id,a) values (816,9);
+insert into t (id,a) values (816,10);
+insert into t (id,a) values (816,11);
+insert into t (id,a) values (816,12);
+insert into t (id,a) values (816,13);
+insert into t (id,a) values (816,14);
+insert into t (id,a) values (816,15);
+insert into t (id,a) values (816,16);
+insert into t (id,a) values (816,17);
+insert into t (id,a) values (816,18);
+insert into t (id,a) values (816,19);
+insert into t (id,a) values (816,20);
+insert into t (id,a) values (816,21);
+insert into t (id,a) values (816,22);
+insert into t (id,a) values (816,23);
+insert into t (id,a) values (816,24);
+insert into t (id,a) values (816,25);
+insert into t (id,a) values (816,26);
+insert into t (id,a) values (816,27);
+insert into t (id,a) values (816,28);
+insert into t (id,a) values (816,29);
+insert into t (id,a) values (816,30);
+insert into t (id,a) values (816,31);
+insert into t (id,a) values (816,32);
+insert into t (id,a) values (816,33);
+insert into t (id,a) values (816,34);
+insert into t (id,a) values (816,35);
+insert into t (id,a) values (816,36);
+insert into t (id,a) values (816,37);
+insert into t (id,a) values (816,38);
+insert into t (id,a) values (816,39);
+insert into t (id,a) values (816,40);
+insert into t (id,a) values (816,41);
+insert into t (id,a) values (816,42);
+insert into t (id,a) values (816,43);
+insert into t (id,a) values (816,44);
+insert into t (id,a) values (816,45);
+insert into t (id,a) values (816,46);
+insert into t (id,a) values (816,47);
+insert into t (id,a) values (816,48);
+insert into t (id,a) values (816,49);
+insert into t (id,a) values (816,50);
+insert into t (id,a) values (816,51);
+insert into t (id,a) values (816,52);
+insert into t (id,a) values (816,53);
+insert into t (id,a) values (816,54);
+insert into t (id,a) values (816,55);
+insert into t (id,a) values (816,56);
+insert into t (id,a) values (816,57);
+insert into t (id,a) values (816,58);
+insert into t (id,a) values (816,59);
+insert into t (id,a) values (816,60);
+insert into t (id,a) values (816,61);
+insert into t (id,a) values (816,62);
+insert into t (id,a) values (816,63);
+insert into t (id,a) values (816,64);
+insert into t (id,a) values (816,65);
+insert into t (id,a) values (816,66);
+insert into t (id,a) values (816,67);
+insert into t (id,a) values (816,68);
+insert into t (id,a) values (816,69);
+insert into t (id,a) values (816,70);
+insert into t (id,a) values (816,71);
+insert into t (id,a) values (816,72);
+insert into t (id,a) values (816,73);
+insert into t (id,a) values (816,74);
+insert into t (id,a) values (816,75);
+insert into t (id,a) values (816,76);
+insert into t (id,a) values (816,77);
+insert into t (id,a) values (816,78);
+insert into t (id,a) values (816,79);
+insert into t (id,a) values (816,80);
+insert into t (id,a) values (816,81);
+insert into t (id,a) values (816,82);
+insert into t (id,a) values (816,83);
+insert into t (id,a) values (816,84);
+insert into t (id,a) values (816,85);
+insert into t (id,a) values (816,86);
+insert into t (id,a) values (816,87);
+insert into t (id,a) values (816,88);
+insert into t (id,a) values (816,89);
+insert into t (id,a) values (816,90);
+insert into t (id,a) values (816,91);
+insert into t (id,a) values (816,92);
+insert into t (id,a) values (816,93);
+insert into t (id,a) values (816,94);
+insert into t (id,a) values (816,95);
+insert into t (id,a) values (816,96);
+insert into t (id,a) values (816,97);
+insert into t (id,a) values (816,98);
+insert into t (id,a) values (816,99);
+insert into t (id,a) values (817,0);
+insert into t (id,a) values (817,1);
+insert into t (id,a) values (817,2);
+insert into t (id,a) values (817,3);
+insert into t (id,a) values (817,4);
+insert into t (id,a) values (817,5);
+insert into t (id,a) values (817,6);
+insert into t (id,a) values (817,7);
+insert into t (id,a) values (817,8);
+insert into t (id,a) values (817,9);
+insert into t (id,a) values (817,10);
+insert into t (id,a) values (817,11);
+insert into t (id,a) values (817,12);
+insert into t (id,a) values (817,13);
+insert into t (id,a) values (817,14);
+insert into t (id,a) values (817,15);
+insert into t (id,a) values (817,16);
+insert into t (id,a) values (817,17);
+insert into t (id,a) values (817,18);
+insert into t (id,a) values (817,19);
+insert into t (id,a) values (817,20);
+insert into t (id,a) values (817,21);
+insert into t (id,a) values (817,22);
+insert into t (id,a) values (817,23);
+insert into t (id,a) values (817,24);
+insert into t (id,a) values (817,25);
+insert into t (id,a) values (817,26);
+insert into t (id,a) values (817,27);
+insert into t (id,a) values (817,28);
+insert into t (id,a) values (817,29);
+insert into t (id,a) values (817,30);
+insert into t (id,a) values (817,31);
+insert into t (id,a) values (817,32);
+insert into t (id,a) values (817,33);
+insert into t (id,a) values (817,34);
+insert into t (id,a) values (817,35);
+insert into t (id,a) values (817,36);
+insert into t (id,a) values (817,37);
+insert into t (id,a) values (817,38);
+insert into t (id,a) values (817,39);
+insert into t (id,a) values (817,40);
+insert into t (id,a) values (817,41);
+insert into t (id,a) values (817,42);
+insert into t (id,a) values (817,43);
+insert into t (id,a) values (817,44);
+insert into t (id,a) values (817,45);
+insert into t (id,a) values (817,46);
+insert into t (id,a) values (817,47);
+insert into t (id,a) values (817,48);
+insert into t (id,a) values (817,49);
+insert into t (id,a) values (817,50);
+insert into t (id,a) values (817,51);
+insert into t (id,a) values (817,52);
+insert into t (id,a) values (817,53);
+insert into t (id,a) values (817,54);
+insert into t (id,a) values (817,55);
+insert into t (id,a) values (817,56);
+insert into t (id,a) values (817,57);
+insert into t (id,a) values (817,58);
+insert into t (id,a) values (817,59);
+insert into t (id,a) values (817,60);
+insert into t (id,a) values (817,61);
+insert into t (id,a) values (817,62);
+insert into t (id,a) values (817,63);
+insert into t (id,a) values (817,64);
+insert into t (id,a) values (817,65);
+insert into t (id,a) values (817,66);
+insert into t (id,a) values (817,67);
+insert into t (id,a) values (817,68);
+insert into t (id,a) values (817,69);
+insert into t (id,a) values (817,70);
+insert into t (id,a) values (817,71);
+insert into t (id,a) values (817,72);
+insert into t (id,a) values (817,73);
+insert into t (id,a) values (817,74);
+insert into t (id,a) values (817,75);
+insert into t (id,a) values (817,76);
+insert into t (id,a) values (817,77);
+insert into t (id,a) values (817,78);
+insert into t (id,a) values (817,79);
+insert into t (id,a) values (817,80);
+insert into t (id,a) values (817,81);
+insert into t (id,a) values (817,82);
+insert into t (id,a) values (817,83);
+insert into t (id,a) values (817,84);
+insert into t (id,a) values (817,85);
+insert into t (id,a) values (817,86);
+insert into t (id,a) values (817,87);
+insert into t (id,a) values (817,88);
+insert into t (id,a) values (817,89);
+insert into t (id,a) values (817,90);
+insert into t (id,a) values (817,91);
+insert into t (id,a) values (817,92);
+insert into t (id,a) values (817,93);
+insert into t (id,a) values (817,94);
+insert into t (id,a) values (817,95);
+insert into t (id,a) values (817,96);
+insert into t (id,a) values (817,97);
+insert into t (id,a) values (817,98);
+insert into t (id,a) values (817,99);
+insert into t (id,a) values (818,0);
+insert into t (id,a) values (818,1);
+insert into t (id,a) values (818,2);
+insert into t (id,a) values (818,3);
+insert into t (id,a) values (818,4);
+insert into t (id,a) values (818,5);
+insert into t (id,a) values (818,6);
+insert into t (id,a) values (818,7);
+insert into t (id,a) values (818,8);
+insert into t (id,a) values (818,9);
+insert into t (id,a) values (818,10);
+insert into t (id,a) values (818,11);
+insert into t (id,a) values (818,12);
+insert into t (id,a) values (818,13);
+insert into t (id,a) values (818,14);
+insert into t (id,a) values (818,15);
+insert into t (id,a) values (818,16);
+insert into t (id,a) values (818,17);
+insert into t (id,a) values (818,18);
+insert into t (id,a) values (818,19);
+insert into t (id,a) values (818,20);
+insert into t (id,a) values (818,21);
+insert into t (id,a) values (818,22);
+insert into t (id,a) values (818,23);
+insert into t (id,a) values (818,24);
+insert into t (id,a) values (818,25);
+insert into t (id,a) values (818,26);
+insert into t (id,a) values (818,27);
+insert into t (id,a) values (818,28);
+insert into t (id,a) values (818,29);
+insert into t (id,a) values (818,30);
+insert into t (id,a) values (818,31);
+insert into t (id,a) values (818,32);
+insert into t (id,a) values (818,33);
+insert into t (id,a) values (818,34);
+insert into t (id,a) values (818,35);
+insert into t (id,a) values (818,36);
+insert into t (id,a) values (818,37);
+insert into t (id,a) values (818,38);
+insert into t (id,a) values (818,39);
+insert into t (id,a) values (818,40);
+insert into t (id,a) values (818,41);
+insert into t (id,a) values (818,42);
+insert into t (id,a) values (818,43);
+insert into t (id,a) values (818,44);
+insert into t (id,a) values (818,45);
+insert into t (id,a) values (818,46);
+insert into t (id,a) values (818,47);
+insert into t (id,a) values (818,48);
+insert into t (id,a) values (818,49);
+insert into t (id,a) values (818,50);
+insert into t (id,a) values (818,51);
+insert into t (id,a) values (818,52);
+insert into t (id,a) values (818,53);
+insert into t (id,a) values (818,54);
+insert into t (id,a) values (818,55);
+insert into t (id,a) values (818,56);
+insert into t (id,a) values (818,57);
+insert into t (id,a) values (818,58);
+insert into t (id,a) values (818,59);
+insert into t (id,a) values (818,60);
+insert into t (id,a) values (818,61);
+insert into t (id,a) values (818,62);
+insert into t (id,a) values (818,63);
+insert into t (id,a) values (818,64);
+insert into t (id,a) values (818,65);
+insert into t (id,a) values (818,66);
+insert into t (id,a) values (818,67);
+insert into t (id,a) values (818,68);
+insert into t (id,a) values (818,69);
+insert into t (id,a) values (818,70);
+insert into t (id,a) values (818,71);
+insert into t (id,a) values (818,72);
+insert into t (id,a) values (818,73);
+insert into t (id,a) values (818,74);
+insert into t (id,a) values (818,75);
+insert into t (id,a) values (818,76);
+insert into t (id,a) values (818,77);
+insert into t (id,a) values (818,78);
+insert into t (id,a) values (818,79);
+insert into t (id,a) values (818,80);
+insert into t (id,a) values (818,81);
+insert into t (id,a) values (818,82);
+insert into t (id,a) values (818,83);
+insert into t (id,a) values (818,84);
+insert into t (id,a) values (818,85);
+insert into t (id,a) values (818,86);
+insert into t (id,a) values (818,87);
+insert into t (id,a) values (818,88);
+insert into t (id,a) values (818,89);
+insert into t (id,a) values (818,90);
+insert into t (id,a) values (818,91);
+insert into t (id,a) values (818,92);
+insert into t (id,a) values (818,93);
+insert into t (id,a) values (818,94);
+insert into t (id,a) values (818,95);
+insert into t (id,a) values (818,96);
+insert into t (id,a) values (818,97);
+insert into t (id,a) values (818,98);
+insert into t (id,a) values (818,99);
+insert into t (id,a) values (819,0);
+insert into t (id,a) values (819,1);
+insert into t (id,a) values (819,2);
+insert into t (id,a) values (819,3);
+insert into t (id,a) values (819,4);
+insert into t (id,a) values (819,5);
+insert into t (id,a) values (819,6);
+insert into t (id,a) values (819,7);
+insert into t (id,a) values (819,8);
+insert into t (id,a) values (819,9);
+insert into t (id,a) values (819,10);
+insert into t (id,a) values (819,11);
+insert into t (id,a) values (819,12);
+insert into t (id,a) values (819,13);
+insert into t (id,a) values (819,14);
+insert into t (id,a) values (819,15);
+insert into t (id,a) values (819,16);
+insert into t (id,a) values (819,17);
+insert into t (id,a) values (819,18);
+insert into t (id,a) values (819,19);
+insert into t (id,a) values (819,20);
+insert into t (id,a) values (819,21);
+insert into t (id,a) values (819,22);
+insert into t (id,a) values (819,23);
+insert into t (id,a) values (819,24);
+insert into t (id,a) values (819,25);
+insert into t (id,a) values (819,26);
+insert into t (id,a) values (819,27);
+insert into t (id,a) values (819,28);
+insert into t (id,a) values (819,29);
+insert into t (id,a) values (819,30);
+insert into t (id,a) values (819,31);
+insert into t (id,a) values (819,32);
+insert into t (id,a) values (819,33);
+insert into t (id,a) values (819,34);
+insert into t (id,a) values (819,35);
+insert into t (id,a) values (819,36);
+insert into t (id,a) values (819,37);
+insert into t (id,a) values (819,38);
+insert into t (id,a) values (819,39);
+insert into t (id,a) values (819,40);
+insert into t (id,a) values (819,41);
+insert into t (id,a) values (819,42);
+insert into t (id,a) values (819,43);
+insert into t (id,a) values (819,44);
+insert into t (id,a) values (819,45);
+insert into t (id,a) values (819,46);
+insert into t (id,a) values (819,47);
+insert into t (id,a) values (819,48);
+insert into t (id,a) values (819,49);
+insert into t (id,a) values (819,50);
+insert into t (id,a) values (819,51);
+insert into t (id,a) values (819,52);
+insert into t (id,a) values (819,53);
+insert into t (id,a) values (819,54);
+insert into t (id,a) values (819,55);
+insert into t (id,a) values (819,56);
+insert into t (id,a) values (819,57);
+insert into t (id,a) values (819,58);
+insert into t (id,a) values (819,59);
+insert into t (id,a) values (819,60);
+insert into t (id,a) values (819,61);
+insert into t (id,a) values (819,62);
+insert into t (id,a) values (819,63);
+insert into t (id,a) values (819,64);
+insert into t (id,a) values (819,65);
+insert into t (id,a) values (819,66);
+insert into t (id,a) values (819,67);
+insert into t (id,a) values (819,68);
+insert into t (id,a) values (819,69);
+insert into t (id,a) values (819,70);
+insert into t (id,a) values (819,71);
+insert into t (id,a) values (819,72);
+insert into t (id,a) values (819,73);
+insert into t (id,a) values (819,74);
+insert into t (id,a) values (819,75);
+insert into t (id,a) values (819,76);
+insert into t (id,a) values (819,77);
+insert into t (id,a) values (819,78);
+insert into t (id,a) values (819,79);
+insert into t (id,a) values (819,80);
+insert into t (id,a) values (819,81);
+insert into t (id,a) values (819,82);
+insert into t (id,a) values (819,83);
+insert into t (id,a) values (819,84);
+insert into t (id,a) values (819,85);
+insert into t (id,a) values (819,86);
+insert into t (id,a) values (819,87);
+insert into t (id,a) values (819,88);
+insert into t (id,a) values (819,89);
+insert into t (id,a) values (819,90);
+insert into t (id,a) values (819,91);
+insert into t (id,a) values (819,92);
+insert into t (id,a) values (819,93);
+insert into t (id,a) values (819,94);
+insert into t (id,a) values (819,95);
+insert into t (id,a) values (819,96);
+insert into t (id,a) values (819,97);
+insert into t (id,a) values (819,98);
+insert into t (id,a) values (819,99);
+insert into t (id,a) values (820,0);
+insert into t (id,a) values (820,1);
+insert into t (id,a) values (820,2);
+insert into t (id,a) values (820,3);
+insert into t (id,a) values (820,4);
+insert into t (id,a) values (820,5);
+insert into t (id,a) values (820,6);
+insert into t (id,a) values (820,7);
+insert into t (id,a) values (820,8);
+insert into t (id,a) values (820,9);
+insert into t (id,a) values (820,10);
+insert into t (id,a) values (820,11);
+insert into t (id,a) values (820,12);
+insert into t (id,a) values (820,13);
+insert into t (id,a) values (820,14);
+insert into t (id,a) values (820,15);
+insert into t (id,a) values (820,16);
+insert into t (id,a) values (820,17);
+insert into t (id,a) values (820,18);
+insert into t (id,a) values (820,19);
+insert into t (id,a) values (820,20);
+insert into t (id,a) values (820,21);
+insert into t (id,a) values (820,22);
+insert into t (id,a) values (820,23);
+insert into t (id,a) values (820,24);
+insert into t (id,a) values (820,25);
+insert into t (id,a) values (820,26);
+insert into t (id,a) values (820,27);
+insert into t (id,a) values (820,28);
+insert into t (id,a) values (820,29);
+insert into t (id,a) values (820,30);
+insert into t (id,a) values (820,31);
+insert into t (id,a) values (820,32);
+insert into t (id,a) values (820,33);
+insert into t (id,a) values (820,34);
+insert into t (id,a) values (820,35);
+insert into t (id,a) values (820,36);
+insert into t (id,a) values (820,37);
+insert into t (id,a) values (820,38);
+insert into t (id,a) values (820,39);
+insert into t (id,a) values (820,40);
+insert into t (id,a) values (820,41);
+insert into t (id,a) values (820,42);
+insert into t (id,a) values (820,43);
+insert into t (id,a) values (820,44);
+insert into t (id,a) values (820,45);
+insert into t (id,a) values (820,46);
+insert into t (id,a) values (820,47);
+insert into t (id,a) values (820,48);
+insert into t (id,a) values (820,49);
+insert into t (id,a) values (820,50);
+insert into t (id,a) values (820,51);
+insert into t (id,a) values (820,52);
+insert into t (id,a) values (820,53);
+insert into t (id,a) values (820,54);
+insert into t (id,a) values (820,55);
+insert into t (id,a) values (820,56);
+insert into t (id,a) values (820,57);
+insert into t (id,a) values (820,58);
+insert into t (id,a) values (820,59);
+insert into t (id,a) values (820,60);
+insert into t (id,a) values (820,61);
+insert into t (id,a) values (820,62);
+insert into t (id,a) values (820,63);
+insert into t (id,a) values (820,64);
+insert into t (id,a) values (820,65);
+insert into t (id,a) values (820,66);
+insert into t (id,a) values (820,67);
+insert into t (id,a) values (820,68);
+insert into t (id,a) values (820,69);
+insert into t (id,a) values (820,70);
+insert into t (id,a) values (820,71);
+insert into t (id,a) values (820,72);
+insert into t (id,a) values (820,73);
+insert into t (id,a) values (820,74);
+insert into t (id,a) values (820,75);
+insert into t (id,a) values (820,76);
+insert into t (id,a) values (820,77);
+insert into t (id,a) values (820,78);
+insert into t (id,a) values (820,79);
+insert into t (id,a) values (820,80);
+insert into t (id,a) values (820,81);
+insert into t (id,a) values (820,82);
+insert into t (id,a) values (820,83);
+insert into t (id,a) values (820,84);
+insert into t (id,a) values (820,85);
+insert into t (id,a) values (820,86);
+insert into t (id,a) values (820,87);
+insert into t (id,a) values (820,88);
+insert into t (id,a) values (820,89);
+insert into t (id,a) values (820,90);
+insert into t (id,a) values (820,91);
+insert into t (id,a) values (820,92);
+insert into t (id,a) values (820,93);
+insert into t (id,a) values (820,94);
+insert into t (id,a) values (820,95);
+insert into t (id,a) values (820,96);
+insert into t (id,a) values (820,97);
+insert into t (id,a) values (820,98);
+insert into t (id,a) values (820,99);
+insert into t (id,a) values (821,0);
+insert into t (id,a) values (821,1);
+insert into t (id,a) values (821,2);
+insert into t (id,a) values (821,3);
+insert into t (id,a) values (821,4);
+insert into t (id,a) values (821,5);
+insert into t (id,a) values (821,6);
+insert into t (id,a) values (821,7);
+insert into t (id,a) values (821,8);
+insert into t (id,a) values (821,9);
+insert into t (id,a) values (821,10);
+insert into t (id,a) values (821,11);
+insert into t (id,a) values (821,12);
+insert into t (id,a) values (821,13);
+insert into t (id,a) values (821,14);
+insert into t (id,a) values (821,15);
+insert into t (id,a) values (821,16);
+insert into t (id,a) values (821,17);
+insert into t (id,a) values (821,18);
+insert into t (id,a) values (821,19);
+insert into t (id,a) values (821,20);
+insert into t (id,a) values (821,21);
+insert into t (id,a) values (821,22);
+insert into t (id,a) values (821,23);
+insert into t (id,a) values (821,24);
+insert into t (id,a) values (821,25);
+insert into t (id,a) values (821,26);
+insert into t (id,a) values (821,27);
+insert into t (id,a) values (821,28);
+insert into t (id,a) values (821,29);
+insert into t (id,a) values (821,30);
+insert into t (id,a) values (821,31);
+insert into t (id,a) values (821,32);
+insert into t (id,a) values (821,33);
+insert into t (id,a) values (821,34);
+insert into t (id,a) values (821,35);
+insert into t (id,a) values (821,36);
+insert into t (id,a) values (821,37);
+insert into t (id,a) values (821,38);
+insert into t (id,a) values (821,39);
+insert into t (id,a) values (821,40);
+insert into t (id,a) values (821,41);
+insert into t (id,a) values (821,42);
+insert into t (id,a) values (821,43);
+insert into t (id,a) values (821,44);
+insert into t (id,a) values (821,45);
+insert into t (id,a) values (821,46);
+insert into t (id,a) values (821,47);
+insert into t (id,a) values (821,48);
+insert into t (id,a) values (821,49);
+insert into t (id,a) values (821,50);
+insert into t (id,a) values (821,51);
+insert into t (id,a) values (821,52);
+insert into t (id,a) values (821,53);
+insert into t (id,a) values (821,54);
+insert into t (id,a) values (821,55);
+insert into t (id,a) values (821,56);
+insert into t (id,a) values (821,57);
+insert into t (id,a) values (821,58);
+insert into t (id,a) values (821,59);
+insert into t (id,a) values (821,60);
+insert into t (id,a) values (821,61);
+insert into t (id,a) values (821,62);
+insert into t (id,a) values (821,63);
+insert into t (id,a) values (821,64);
+insert into t (id,a) values (821,65);
+insert into t (id,a) values (821,66);
+insert into t (id,a) values (821,67);
+insert into t (id,a) values (821,68);
+insert into t (id,a) values (821,69);
+insert into t (id,a) values (821,70);
+insert into t (id,a) values (821,71);
+insert into t (id,a) values (821,72);
+insert into t (id,a) values (821,73);
+insert into t (id,a) values (821,74);
+insert into t (id,a) values (821,75);
+insert into t (id,a) values (821,76);
+insert into t (id,a) values (821,77);
+insert into t (id,a) values (821,78);
+insert into t (id,a) values (821,79);
+insert into t (id,a) values (821,80);
+insert into t (id,a) values (821,81);
+insert into t (id,a) values (821,82);
+insert into t (id,a) values (821,83);
+insert into t (id,a) values (821,84);
+insert into t (id,a) values (821,85);
+insert into t (id,a) values (821,86);
+insert into t (id,a) values (821,87);
+insert into t (id,a) values (821,88);
+insert into t (id,a) values (821,89);
+insert into t (id,a) values (821,90);
+insert into t (id,a) values (821,91);
+insert into t (id,a) values (821,92);
+insert into t (id,a) values (821,93);
+insert into t (id,a) values (821,94);
+insert into t (id,a) values (821,95);
+insert into t (id,a) values (821,96);
+insert into t (id,a) values (821,97);
+insert into t (id,a) values (821,98);
+insert into t (id,a) values (821,99);
+insert into t (id,a) values (822,0);
+insert into t (id,a) values (822,1);
+insert into t (id,a) values (822,2);
+insert into t (id,a) values (822,3);
+insert into t (id,a) values (822,4);
+insert into t (id,a) values (822,5);
+insert into t (id,a) values (822,6);
+insert into t (id,a) values (822,7);
+insert into t (id,a) values (822,8);
+insert into t (id,a) values (822,9);
+insert into t (id,a) values (822,10);
+insert into t (id,a) values (822,11);
+insert into t (id,a) values (822,12);
+insert into t (id,a) values (822,13);
+insert into t (id,a) values (822,14);
+insert into t (id,a) values (822,15);
+insert into t (id,a) values (822,16);
+insert into t (id,a) values (822,17);
+insert into t (id,a) values (822,18);
+insert into t (id,a) values (822,19);
+insert into t (id,a) values (822,20);
+insert into t (id,a) values (822,21);
+insert into t (id,a) values (822,22);
+insert into t (id,a) values (822,23);
+insert into t (id,a) values (822,24);
+insert into t (id,a) values (822,25);
+insert into t (id,a) values (822,26);
+insert into t (id,a) values (822,27);
+insert into t (id,a) values (822,28);
+insert into t (id,a) values (822,29);
+insert into t (id,a) values (822,30);
+insert into t (id,a) values (822,31);
+insert into t (id,a) values (822,32);
+insert into t (id,a) values (822,33);
+insert into t (id,a) values (822,34);
+insert into t (id,a) values (822,35);
+insert into t (id,a) values (822,36);
+insert into t (id,a) values (822,37);
+insert into t (id,a) values (822,38);
+insert into t (id,a) values (822,39);
+insert into t (id,a) values (822,40);
+insert into t (id,a) values (822,41);
+insert into t (id,a) values (822,42);
+insert into t (id,a) values (822,43);
+insert into t (id,a) values (822,44);
+insert into t (id,a) values (822,45);
+insert into t (id,a) values (822,46);
+insert into t (id,a) values (822,47);
+insert into t (id,a) values (822,48);
+insert into t (id,a) values (822,49);
+insert into t (id,a) values (822,50);
+insert into t (id,a) values (822,51);
+insert into t (id,a) values (822,52);
+insert into t (id,a) values (822,53);
+insert into t (id,a) values (822,54);
+insert into t (id,a) values (822,55);
+insert into t (id,a) values (822,56);
+insert into t (id,a) values (822,57);
+insert into t (id,a) values (822,58);
+insert into t (id,a) values (822,59);
+insert into t (id,a) values (822,60);
+insert into t (id,a) values (822,61);
+insert into t (id,a) values (822,62);
+insert into t (id,a) values (822,63);
+insert into t (id,a) values (822,64);
+insert into t (id,a) values (822,65);
+insert into t (id,a) values (822,66);
+insert into t (id,a) values (822,67);
+insert into t (id,a) values (822,68);
+insert into t (id,a) values (822,69);
+insert into t (id,a) values (822,70);
+insert into t (id,a) values (822,71);
+insert into t (id,a) values (822,72);
+insert into t (id,a) values (822,73);
+insert into t (id,a) values (822,74);
+insert into t (id,a) values (822,75);
+insert into t (id,a) values (822,76);
+insert into t (id,a) values (822,77);
+insert into t (id,a) values (822,78);
+insert into t (id,a) values (822,79);
+insert into t (id,a) values (822,80);
+insert into t (id,a) values (822,81);
+insert into t (id,a) values (822,82);
+insert into t (id,a) values (822,83);
+insert into t (id,a) values (822,84);
+insert into t (id,a) values (822,85);
+insert into t (id,a) values (822,86);
+insert into t (id,a) values (822,87);
+insert into t (id,a) values (822,88);
+insert into t (id,a) values (822,89);
+insert into t (id,a) values (822,90);
+insert into t (id,a) values (822,91);
+insert into t (id,a) values (822,92);
+insert into t (id,a) values (822,93);
+insert into t (id,a) values (822,94);
+insert into t (id,a) values (822,95);
+insert into t (id,a) values (822,96);
+insert into t (id,a) values (822,97);
+insert into t (id,a) values (822,98);
+insert into t (id,a) values (822,99);
+insert into t (id,a) values (823,0);
+insert into t (id,a) values (823,1);
+insert into t (id,a) values (823,2);
+insert into t (id,a) values (823,3);
+insert into t (id,a) values (823,4);
+insert into t (id,a) values (823,5);
+insert into t (id,a) values (823,6);
+insert into t (id,a) values (823,7);
+insert into t (id,a) values (823,8);
+insert into t (id,a) values (823,9);
+insert into t (id,a) values (823,10);
+insert into t (id,a) values (823,11);
+insert into t (id,a) values (823,12);
+insert into t (id,a) values (823,13);
+insert into t (id,a) values (823,14);
+insert into t (id,a) values (823,15);
+insert into t (id,a) values (823,16);
+insert into t (id,a) values (823,17);
+insert into t (id,a) values (823,18);
+insert into t (id,a) values (823,19);
+insert into t (id,a) values (823,20);
+insert into t (id,a) values (823,21);
+insert into t (id,a) values (823,22);
+insert into t (id,a) values (823,23);
+insert into t (id,a) values (823,24);
+insert into t (id,a) values (823,25);
+insert into t (id,a) values (823,26);
+insert into t (id,a) values (823,27);
+insert into t (id,a) values (823,28);
+insert into t (id,a) values (823,29);
+insert into t (id,a) values (823,30);
+insert into t (id,a) values (823,31);
+insert into t (id,a) values (823,32);
+insert into t (id,a) values (823,33);
+insert into t (id,a) values (823,34);
+insert into t (id,a) values (823,35);
+insert into t (id,a) values (823,36);
+insert into t (id,a) values (823,37);
+insert into t (id,a) values (823,38);
+insert into t (id,a) values (823,39);
+insert into t (id,a) values (823,40);
+insert into t (id,a) values (823,41);
+insert into t (id,a) values (823,42);
+insert into t (id,a) values (823,43);
+insert into t (id,a) values (823,44);
+insert into t (id,a) values (823,45);
+insert into t (id,a) values (823,46);
+insert into t (id,a) values (823,47);
+insert into t (id,a) values (823,48);
+insert into t (id,a) values (823,49);
+insert into t (id,a) values (823,50);
+insert into t (id,a) values (823,51);
+insert into t (id,a) values (823,52);
+insert into t (id,a) values (823,53);
+insert into t (id,a) values (823,54);
+insert into t (id,a) values (823,55);
+insert into t (id,a) values (823,56);
+insert into t (id,a) values (823,57);
+insert into t (id,a) values (823,58);
+insert into t (id,a) values (823,59);
+insert into t (id,a) values (823,60);
+insert into t (id,a) values (823,61);
+insert into t (id,a) values (823,62);
+insert into t (id,a) values (823,63);
+insert into t (id,a) values (823,64);
+insert into t (id,a) values (823,65);
+insert into t (id,a) values (823,66);
+insert into t (id,a) values (823,67);
+insert into t (id,a) values (823,68);
+insert into t (id,a) values (823,69);
+insert into t (id,a) values (823,70);
+insert into t (id,a) values (823,71);
+insert into t (id,a) values (823,72);
+insert into t (id,a) values (823,73);
+insert into t (id,a) values (823,74);
+insert into t (id,a) values (823,75);
+insert into t (id,a) values (823,76);
+insert into t (id,a) values (823,77);
+insert into t (id,a) values (823,78);
+insert into t (id,a) values (823,79);
+insert into t (id,a) values (823,80);
+insert into t (id,a) values (823,81);
+insert into t (id,a) values (823,82);
+insert into t (id,a) values (823,83);
+insert into t (id,a) values (823,84);
+insert into t (id,a) values (823,85);
+insert into t (id,a) values (823,86);
+insert into t (id,a) values (823,87);
+insert into t (id,a) values (823,88);
+insert into t (id,a) values (823,89);
+insert into t (id,a) values (823,90);
+insert into t (id,a) values (823,91);
+insert into t (id,a) values (823,92);
+insert into t (id,a) values (823,93);
+insert into t (id,a) values (823,94);
+insert into t (id,a) values (823,95);
+insert into t (id,a) values (823,96);
+insert into t (id,a) values (823,97);
+insert into t (id,a) values (823,98);
+insert into t (id,a) values (823,99);
+insert into t (id,a) values (824,0);
+insert into t (id,a) values (824,1);
+insert into t (id,a) values (824,2);
+insert into t (id,a) values (824,3);
+insert into t (id,a) values (824,4);
+insert into t (id,a) values (824,5);
+insert into t (id,a) values (824,6);
+insert into t (id,a) values (824,7);
+insert into t (id,a) values (824,8);
+insert into t (id,a) values (824,9);
+insert into t (id,a) values (824,10);
+insert into t (id,a) values (824,11);
+insert into t (id,a) values (824,12);
+insert into t (id,a) values (824,13);
+insert into t (id,a) values (824,14);
+insert into t (id,a) values (824,15);
+insert into t (id,a) values (824,16);
+insert into t (id,a) values (824,17);
+insert into t (id,a) values (824,18);
+insert into t (id,a) values (824,19);
+insert into t (id,a) values (824,20);
+insert into t (id,a) values (824,21);
+insert into t (id,a) values (824,22);
+insert into t (id,a) values (824,23);
+insert into t (id,a) values (824,24);
+insert into t (id,a) values (824,25);
+insert into t (id,a) values (824,26);
+insert into t (id,a) values (824,27);
+insert into t (id,a) values (824,28);
+insert into t (id,a) values (824,29);
+insert into t (id,a) values (824,30);
+insert into t (id,a) values (824,31);
+insert into t (id,a) values (824,32);
+insert into t (id,a) values (824,33);
+insert into t (id,a) values (824,34);
+insert into t (id,a) values (824,35);
+insert into t (id,a) values (824,36);
+insert into t (id,a) values (824,37);
+insert into t (id,a) values (824,38);
+insert into t (id,a) values (824,39);
+insert into t (id,a) values (824,40);
+insert into t (id,a) values (824,41);
+insert into t (id,a) values (824,42);
+insert into t (id,a) values (824,43);
+insert into t (id,a) values (824,44);
+insert into t (id,a) values (824,45);
+insert into t (id,a) values (824,46);
+insert into t (id,a) values (824,47);
+insert into t (id,a) values (824,48);
+insert into t (id,a) values (824,49);
+insert into t (id,a) values (824,50);
+insert into t (id,a) values (824,51);
+insert into t (id,a) values (824,52);
+insert into t (id,a) values (824,53);
+insert into t (id,a) values (824,54);
+insert into t (id,a) values (824,55);
+insert into t (id,a) values (824,56);
+insert into t (id,a) values (824,57);
+insert into t (id,a) values (824,58);
+insert into t (id,a) values (824,59);
+insert into t (id,a) values (824,60);
+insert into t (id,a) values (824,61);
+insert into t (id,a) values (824,62);
+insert into t (id,a) values (824,63);
+insert into t (id,a) values (824,64);
+insert into t (id,a) values (824,65);
+insert into t (id,a) values (824,66);
+insert into t (id,a) values (824,67);
+insert into t (id,a) values (824,68);
+insert into t (id,a) values (824,69);
+insert into t (id,a) values (824,70);
+insert into t (id,a) values (824,71);
+insert into t (id,a) values (824,72);
+insert into t (id,a) values (824,73);
+insert into t (id,a) values (824,74);
+insert into t (id,a) values (824,75);
+insert into t (id,a) values (824,76);
+insert into t (id,a) values (824,77);
+insert into t (id,a) values (824,78);
+insert into t (id,a) values (824,79);
+insert into t (id,a) values (824,80);
+insert into t (id,a) values (824,81);
+insert into t (id,a) values (824,82);
+insert into t (id,a) values (824,83);
+insert into t (id,a) values (824,84);
+insert into t (id,a) values (824,85);
+insert into t (id,a) values (824,86);
+insert into t (id,a) values (824,87);
+insert into t (id,a) values (824,88);
+insert into t (id,a) values (824,89);
+insert into t (id,a) values (824,90);
+insert into t (id,a) values (824,91);
+insert into t (id,a) values (824,92);
+insert into t (id,a) values (824,93);
+insert into t (id,a) values (824,94);
+insert into t (id,a) values (824,95);
+insert into t (id,a) values (824,96);
+insert into t (id,a) values (824,97);
+insert into t (id,a) values (824,98);
+insert into t (id,a) values (824,99);
+insert into t (id,a) values (825,0);
+insert into t (id,a) values (825,1);
+insert into t (id,a) values (825,2);
+insert into t (id,a) values (825,3);
+insert into t (id,a) values (825,4);
+insert into t (id,a) values (825,5);
+insert into t (id,a) values (825,6);
+insert into t (id,a) values (825,7);
+insert into t (id,a) values (825,8);
+insert into t (id,a) values (825,9);
+insert into t (id,a) values (825,10);
+insert into t (id,a) values (825,11);
+insert into t (id,a) values (825,12);
+insert into t (id,a) values (825,13);
+insert into t (id,a) values (825,14);
+insert into t (id,a) values (825,15);
+insert into t (id,a) values (825,16);
+insert into t (id,a) values (825,17);
+insert into t (id,a) values (825,18);
+insert into t (id,a) values (825,19);
+insert into t (id,a) values (825,20);
+insert into t (id,a) values (825,21);
+insert into t (id,a) values (825,22);
+insert into t (id,a) values (825,23);
+insert into t (id,a) values (825,24);
+insert into t (id,a) values (825,25);
+insert into t (id,a) values (825,26);
+insert into t (id,a) values (825,27);
+insert into t (id,a) values (825,28);
+insert into t (id,a) values (825,29);
+insert into t (id,a) values (825,30);
+insert into t (id,a) values (825,31);
+insert into t (id,a) values (825,32);
+insert into t (id,a) values (825,33);
+insert into t (id,a) values (825,34);
+insert into t (id,a) values (825,35);
+insert into t (id,a) values (825,36);
+insert into t (id,a) values (825,37);
+insert into t (id,a) values (825,38);
+insert into t (id,a) values (825,39);
+insert into t (id,a) values (825,40);
+insert into t (id,a) values (825,41);
+insert into t (id,a) values (825,42);
+insert into t (id,a) values (825,43);
+insert into t (id,a) values (825,44);
+insert into t (id,a) values (825,45);
+insert into t (id,a) values (825,46);
+insert into t (id,a) values (825,47);
+insert into t (id,a) values (825,48);
+insert into t (id,a) values (825,49);
+insert into t (id,a) values (825,50);
+insert into t (id,a) values (825,51);
+insert into t (id,a) values (825,52);
+insert into t (id,a) values (825,53);
+insert into t (id,a) values (825,54);
+insert into t (id,a) values (825,55);
+insert into t (id,a) values (825,56);
+insert into t (id,a) values (825,57);
+insert into t (id,a) values (825,58);
+insert into t (id,a) values (825,59);
+insert into t (id,a) values (825,60);
+insert into t (id,a) values (825,61);
+insert into t (id,a) values (825,62);
+insert into t (id,a) values (825,63);
+insert into t (id,a) values (825,64);
+insert into t (id,a) values (825,65);
+insert into t (id,a) values (825,66);
+insert into t (id,a) values (825,67);
+insert into t (id,a) values (825,68);
+insert into t (id,a) values (825,69);
+insert into t (id,a) values (825,70);
+insert into t (id,a) values (825,71);
+insert into t (id,a) values (825,72);
+insert into t (id,a) values (825,73);
+insert into t (id,a) values (825,74);
+insert into t (id,a) values (825,75);
+insert into t (id,a) values (825,76);
+insert into t (id,a) values (825,77);
+insert into t (id,a) values (825,78);
+insert into t (id,a) values (825,79);
+insert into t (id,a) values (825,80);
+insert into t (id,a) values (825,81);
+insert into t (id,a) values (825,82);
+insert into t (id,a) values (825,83);
+insert into t (id,a) values (825,84);
+insert into t (id,a) values (825,85);
+insert into t (id,a) values (825,86);
+insert into t (id,a) values (825,87);
+insert into t (id,a) values (825,88);
+insert into t (id,a) values (825,89);
+insert into t (id,a) values (825,90);
+insert into t (id,a) values (825,91);
+insert into t (id,a) values (825,92);
+insert into t (id,a) values (825,93);
+insert into t (id,a) values (825,94);
+insert into t (id,a) values (825,95);
+insert into t (id,a) values (825,96);
+insert into t (id,a) values (825,97);
+insert into t (id,a) values (825,98);
+insert into t (id,a) values (825,99);
+insert into t (id,a) values (826,0);
+insert into t (id,a) values (826,1);
+insert into t (id,a) values (826,2);
+insert into t (id,a) values (826,3);
+insert into t (id,a) values (826,4);
+insert into t (id,a) values (826,5);
+insert into t (id,a) values (826,6);
+insert into t (id,a) values (826,7);
+insert into t (id,a) values (826,8);
+insert into t (id,a) values (826,9);
+insert into t (id,a) values (826,10);
+insert into t (id,a) values (826,11);
+insert into t (id,a) values (826,12);
+insert into t (id,a) values (826,13);
+insert into t (id,a) values (826,14);
+insert into t (id,a) values (826,15);
+insert into t (id,a) values (826,16);
+insert into t (id,a) values (826,17);
+insert into t (id,a) values (826,18);
+insert into t (id,a) values (826,19);
+insert into t (id,a) values (826,20);
+insert into t (id,a) values (826,21);
+insert into t (id,a) values (826,22);
+insert into t (id,a) values (826,23);
+insert into t (id,a) values (826,24);
+insert into t (id,a) values (826,25);
+insert into t (id,a) values (826,26);
+insert into t (id,a) values (826,27);
+insert into t (id,a) values (826,28);
+insert into t (id,a) values (826,29);
+insert into t (id,a) values (826,30);
+insert into t (id,a) values (826,31);
+insert into t (id,a) values (826,32);
+insert into t (id,a) values (826,33);
+insert into t (id,a) values (826,34);
+insert into t (id,a) values (826,35);
+insert into t (id,a) values (826,36);
+insert into t (id,a) values (826,37);
+insert into t (id,a) values (826,38);
+insert into t (id,a) values (826,39);
+insert into t (id,a) values (826,40);
+insert into t (id,a) values (826,41);
+insert into t (id,a) values (826,42);
+insert into t (id,a) values (826,43);
+insert into t (id,a) values (826,44);
+insert into t (id,a) values (826,45);
+insert into t (id,a) values (826,46);
+insert into t (id,a) values (826,47);
+insert into t (id,a) values (826,48);
+insert into t (id,a) values (826,49);
+insert into t (id,a) values (826,50);
+insert into t (id,a) values (826,51);
+insert into t (id,a) values (826,52);
+insert into t (id,a) values (826,53);
+insert into t (id,a) values (826,54);
+insert into t (id,a) values (826,55);
+insert into t (id,a) values (826,56);
+insert into t (id,a) values (826,57);
+insert into t (id,a) values (826,58);
+insert into t (id,a) values (826,59);
+insert into t (id,a) values (826,60);
+insert into t (id,a) values (826,61);
+insert into t (id,a) values (826,62);
+insert into t (id,a) values (826,63);
+insert into t (id,a) values (826,64);
+insert into t (id,a) values (826,65);
+insert into t (id,a) values (826,66);
+insert into t (id,a) values (826,67);
+insert into t (id,a) values (826,68);
+insert into t (id,a) values (826,69);
+insert into t (id,a) values (826,70);
+insert into t (id,a) values (826,71);
+insert into t (id,a) values (826,72);
+insert into t (id,a) values (826,73);
+insert into t (id,a) values (826,74);
+insert into t (id,a) values (826,75);
+insert into t (id,a) values (826,76);
+insert into t (id,a) values (826,77);
+insert into t (id,a) values (826,78);
+insert into t (id,a) values (826,79);
+insert into t (id,a) values (826,80);
+insert into t (id,a) values (826,81);
+insert into t (id,a) values (826,82);
+insert into t (id,a) values (826,83);
+insert into t (id,a) values (826,84);
+insert into t (id,a) values (826,85);
+insert into t (id,a) values (826,86);
+insert into t (id,a) values (826,87);
+insert into t (id,a) values (826,88);
+insert into t (id,a) values (826,89);
+insert into t (id,a) values (826,90);
+insert into t (id,a) values (826,91);
+insert into t (id,a) values (826,92);
+insert into t (id,a) values (826,93);
+insert into t (id,a) values (826,94);
+insert into t (id,a) values (826,95);
+insert into t (id,a) values (826,96);
+insert into t (id,a) values (826,97);
+insert into t (id,a) values (826,98);
+insert into t (id,a) values (826,99);
+insert into t (id,a) values (827,0);
+insert into t (id,a) values (827,1);
+insert into t (id,a) values (827,2);
+insert into t (id,a) values (827,3);
+insert into t (id,a) values (827,4);
+insert into t (id,a) values (827,5);
+insert into t (id,a) values (827,6);
+insert into t (id,a) values (827,7);
+insert into t (id,a) values (827,8);
+insert into t (id,a) values (827,9);
+insert into t (id,a) values (827,10);
+insert into t (id,a) values (827,11);
+insert into t (id,a) values (827,12);
+insert into t (id,a) values (827,13);
+insert into t (id,a) values (827,14);
+insert into t (id,a) values (827,15);
+insert into t (id,a) values (827,16);
+insert into t (id,a) values (827,17);
+insert into t (id,a) values (827,18);
+insert into t (id,a) values (827,19);
+insert into t (id,a) values (827,20);
+insert into t (id,a) values (827,21);
+insert into t (id,a) values (827,22);
+insert into t (id,a) values (827,23);
+insert into t (id,a) values (827,24);
+insert into t (id,a) values (827,25);
+insert into t (id,a) values (827,26);
+insert into t (id,a) values (827,27);
+insert into t (id,a) values (827,28);
+insert into t (id,a) values (827,29);
+insert into t (id,a) values (827,30);
+insert into t (id,a) values (827,31);
+insert into t (id,a) values (827,32);
+insert into t (id,a) values (827,33);
+insert into t (id,a) values (827,34);
+insert into t (id,a) values (827,35);
+insert into t (id,a) values (827,36);
+insert into t (id,a) values (827,37);
+insert into t (id,a) values (827,38);
+insert into t (id,a) values (827,39);
+insert into t (id,a) values (827,40);
+insert into t (id,a) values (827,41);
+insert into t (id,a) values (827,42);
+insert into t (id,a) values (827,43);
+insert into t (id,a) values (827,44);
+insert into t (id,a) values (827,45);
+insert into t (id,a) values (827,46);
+insert into t (id,a) values (827,47);
+insert into t (id,a) values (827,48);
+insert into t (id,a) values (827,49);
+insert into t (id,a) values (827,50);
+insert into t (id,a) values (827,51);
+insert into t (id,a) values (827,52);
+insert into t (id,a) values (827,53);
+insert into t (id,a) values (827,54);
+insert into t (id,a) values (827,55);
+insert into t (id,a) values (827,56);
+insert into t (id,a) values (827,57);
+insert into t (id,a) values (827,58);
+insert into t (id,a) values (827,59);
+insert into t (id,a) values (827,60);
+insert into t (id,a) values (827,61);
+insert into t (id,a) values (827,62);
+insert into t (id,a) values (827,63);
+insert into t (id,a) values (827,64);
+insert into t (id,a) values (827,65);
+insert into t (id,a) values (827,66);
+insert into t (id,a) values (827,67);
+insert into t (id,a) values (827,68);
+insert into t (id,a) values (827,69);
+insert into t (id,a) values (827,70);
+insert into t (id,a) values (827,71);
+insert into t (id,a) values (827,72);
+insert into t (id,a) values (827,73);
+insert into t (id,a) values (827,74);
+insert into t (id,a) values (827,75);
+insert into t (id,a) values (827,76);
+insert into t (id,a) values (827,77);
+insert into t (id,a) values (827,78);
+insert into t (id,a) values (827,79);
+insert into t (id,a) values (827,80);
+insert into t (id,a) values (827,81);
+insert into t (id,a) values (827,82);
+insert into t (id,a) values (827,83);
+insert into t (id,a) values (827,84);
+insert into t (id,a) values (827,85);
+insert into t (id,a) values (827,86);
+insert into t (id,a) values (827,87);
+insert into t (id,a) values (827,88);
+insert into t (id,a) values (827,89);
+insert into t (id,a) values (827,90);
+insert into t (id,a) values (827,91);
+insert into t (id,a) values (827,92);
+insert into t (id,a) values (827,93);
+insert into t (id,a) values (827,94);
+insert into t (id,a) values (827,95);
+insert into t (id,a) values (827,96);
+insert into t (id,a) values (827,97);
+insert into t (id,a) values (827,98);
+insert into t (id,a) values (827,99);
+insert into t (id,a) values (828,0);
+insert into t (id,a) values (828,1);
+insert into t (id,a) values (828,2);
+insert into t (id,a) values (828,3);
+insert into t (id,a) values (828,4);
+insert into t (id,a) values (828,5);
+insert into t (id,a) values (828,6);
+insert into t (id,a) values (828,7);
+insert into t (id,a) values (828,8);
+insert into t (id,a) values (828,9);
+insert into t (id,a) values (828,10);
+insert into t (id,a) values (828,11);
+insert into t (id,a) values (828,12);
+insert into t (id,a) values (828,13);
+insert into t (id,a) values (828,14);
+insert into t (id,a) values (828,15);
+insert into t (id,a) values (828,16);
+insert into t (id,a) values (828,17);
+insert into t (id,a) values (828,18);
+insert into t (id,a) values (828,19);
+insert into t (id,a) values (828,20);
+insert into t (id,a) values (828,21);
+insert into t (id,a) values (828,22);
+insert into t (id,a) values (828,23);
+insert into t (id,a) values (828,24);
+insert into t (id,a) values (828,25);
+insert into t (id,a) values (828,26);
+insert into t (id,a) values (828,27);
+insert into t (id,a) values (828,28);
+insert into t (id,a) values (828,29);
+insert into t (id,a) values (828,30);
+insert into t (id,a) values (828,31);
+insert into t (id,a) values (828,32);
+insert into t (id,a) values (828,33);
+insert into t (id,a) values (828,34);
+insert into t (id,a) values (828,35);
+insert into t (id,a) values (828,36);
+insert into t (id,a) values (828,37);
+insert into t (id,a) values (828,38);
+insert into t (id,a) values (828,39);
+insert into t (id,a) values (828,40);
+insert into t (id,a) values (828,41);
+insert into t (id,a) values (828,42);
+insert into t (id,a) values (828,43);
+insert into t (id,a) values (828,44);
+insert into t (id,a) values (828,45);
+insert into t (id,a) values (828,46);
+insert into t (id,a) values (828,47);
+insert into t (id,a) values (828,48);
+insert into t (id,a) values (828,49);
+insert into t (id,a) values (828,50);
+insert into t (id,a) values (828,51);
+insert into t (id,a) values (828,52);
+insert into t (id,a) values (828,53);
+insert into t (id,a) values (828,54);
+insert into t (id,a) values (828,55);
+insert into t (id,a) values (828,56);
+insert into t (id,a) values (828,57);
+insert into t (id,a) values (828,58);
+insert into t (id,a) values (828,59);
+insert into t (id,a) values (828,60);
+insert into t (id,a) values (828,61);
+insert into t (id,a) values (828,62);
+insert into t (id,a) values (828,63);
+insert into t (id,a) values (828,64);
+insert into t (id,a) values (828,65);
+insert into t (id,a) values (828,66);
+insert into t (id,a) values (828,67);
+insert into t (id,a) values (828,68);
+insert into t (id,a) values (828,69);
+insert into t (id,a) values (828,70);
+insert into t (id,a) values (828,71);
+insert into t (id,a) values (828,72);
+insert into t (id,a) values (828,73);
+insert into t (id,a) values (828,74);
+insert into t (id,a) values (828,75);
+insert into t (id,a) values (828,76);
+insert into t (id,a) values (828,77);
+insert into t (id,a) values (828,78);
+insert into t (id,a) values (828,79);
+insert into t (id,a) values (828,80);
+insert into t (id,a) values (828,81);
+insert into t (id,a) values (828,82);
+insert into t (id,a) values (828,83);
+insert into t (id,a) values (828,84);
+insert into t (id,a) values (828,85);
+insert into t (id,a) values (828,86);
+insert into t (id,a) values (828,87);
+insert into t (id,a) values (828,88);
+insert into t (id,a) values (828,89);
+insert into t (id,a) values (828,90);
+insert into t (id,a) values (828,91);
+insert into t (id,a) values (828,92);
+insert into t (id,a) values (828,93);
+insert into t (id,a) values (828,94);
+insert into t (id,a) values (828,95);
+insert into t (id,a) values (828,96);
+insert into t (id,a) values (828,97);
+insert into t (id,a) values (828,98);
+insert into t (id,a) values (828,99);
+insert into t (id,a) values (829,0);
+insert into t (id,a) values (829,1);
+insert into t (id,a) values (829,2);
+insert into t (id,a) values (829,3);
+insert into t (id,a) values (829,4);
+insert into t (id,a) values (829,5);
+insert into t (id,a) values (829,6);
+insert into t (id,a) values (829,7);
+insert into t (id,a) values (829,8);
+insert into t (id,a) values (829,9);
+insert into t (id,a) values (829,10);
+insert into t (id,a) values (829,11);
+insert into t (id,a) values (829,12);
+insert into t (id,a) values (829,13);
+insert into t (id,a) values (829,14);
+insert into t (id,a) values (829,15);
+insert into t (id,a) values (829,16);
+insert into t (id,a) values (829,17);
+insert into t (id,a) values (829,18);
+insert into t (id,a) values (829,19);
+insert into t (id,a) values (829,20);
+insert into t (id,a) values (829,21);
+insert into t (id,a) values (829,22);
+insert into t (id,a) values (829,23);
+insert into t (id,a) values (829,24);
+insert into t (id,a) values (829,25);
+insert into t (id,a) values (829,26);
+insert into t (id,a) values (829,27);
+insert into t (id,a) values (829,28);
+insert into t (id,a) values (829,29);
+insert into t (id,a) values (829,30);
+insert into t (id,a) values (829,31);
+insert into t (id,a) values (829,32);
+insert into t (id,a) values (829,33);
+insert into t (id,a) values (829,34);
+insert into t (id,a) values (829,35);
+insert into t (id,a) values (829,36);
+insert into t (id,a) values (829,37);
+insert into t (id,a) values (829,38);
+insert into t (id,a) values (829,39);
+insert into t (id,a) values (829,40);
+insert into t (id,a) values (829,41);
+insert into t (id,a) values (829,42);
+insert into t (id,a) values (829,43);
+insert into t (id,a) values (829,44);
+insert into t (id,a) values (829,45);
+insert into t (id,a) values (829,46);
+insert into t (id,a) values (829,47);
+insert into t (id,a) values (829,48);
+insert into t (id,a) values (829,49);
+insert into t (id,a) values (829,50);
+insert into t (id,a) values (829,51);
+insert into t (id,a) values (829,52);
+insert into t (id,a) values (829,53);
+insert into t (id,a) values (829,54);
+insert into t (id,a) values (829,55);
+insert into t (id,a) values (829,56);
+insert into t (id,a) values (829,57);
+insert into t (id,a) values (829,58);
+insert into t (id,a) values (829,59);
+insert into t (id,a) values (829,60);
+insert into t (id,a) values (829,61);
+insert into t (id,a) values (829,62);
+insert into t (id,a) values (829,63);
+insert into t (id,a) values (829,64);
+insert into t (id,a) values (829,65);
+insert into t (id,a) values (829,66);
+insert into t (id,a) values (829,67);
+insert into t (id,a) values (829,68);
+insert into t (id,a) values (829,69);
+insert into t (id,a) values (829,70);
+insert into t (id,a) values (829,71);
+insert into t (id,a) values (829,72);
+insert into t (id,a) values (829,73);
+insert into t (id,a) values (829,74);
+insert into t (id,a) values (829,75);
+insert into t (id,a) values (829,76);
+insert into t (id,a) values (829,77);
+insert into t (id,a) values (829,78);
+insert into t (id,a) values (829,79);
+insert into t (id,a) values (829,80);
+insert into t (id,a) values (829,81);
+insert into t (id,a) values (829,82);
+insert into t (id,a) values (829,83);
+insert into t (id,a) values (829,84);
+insert into t (id,a) values (829,85);
+insert into t (id,a) values (829,86);
+insert into t (id,a) values (829,87);
+insert into t (id,a) values (829,88);
+insert into t (id,a) values (829,89);
+insert into t (id,a) values (829,90);
+insert into t (id,a) values (829,91);
+insert into t (id,a) values (829,92);
+insert into t (id,a) values (829,93);
+insert into t (id,a) values (829,94);
+insert into t (id,a) values (829,95);
+insert into t (id,a) values (829,96);
+insert into t (id,a) values (829,97);
+insert into t (id,a) values (829,98);
+insert into t (id,a) values (829,99);
+insert into t (id,a) values (830,0);
+insert into t (id,a) values (830,1);
+insert into t (id,a) values (830,2);
+insert into t (id,a) values (830,3);
+insert into t (id,a) values (830,4);
+insert into t (id,a) values (830,5);
+insert into t (id,a) values (830,6);
+insert into t (id,a) values (830,7);
+insert into t (id,a) values (830,8);
+insert into t (id,a) values (830,9);
+insert into t (id,a) values (830,10);
+insert into t (id,a) values (830,11);
+insert into t (id,a) values (830,12);
+insert into t (id,a) values (830,13);
+insert into t (id,a) values (830,14);
+insert into t (id,a) values (830,15);
+insert into t (id,a) values (830,16);
+insert into t (id,a) values (830,17);
+insert into t (id,a) values (830,18);
+insert into t (id,a) values (830,19);
+insert into t (id,a) values (830,20);
+insert into t (id,a) values (830,21);
+insert into t (id,a) values (830,22);
+insert into t (id,a) values (830,23);
+insert into t (id,a) values (830,24);
+insert into t (id,a) values (830,25);
+insert into t (id,a) values (830,26);
+insert into t (id,a) values (830,27);
+insert into t (id,a) values (830,28);
+insert into t (id,a) values (830,29);
+insert into t (id,a) values (830,30);
+insert into t (id,a) values (830,31);
+insert into t (id,a) values (830,32);
+insert into t (id,a) values (830,33);
+insert into t (id,a) values (830,34);
+insert into t (id,a) values (830,35);
+insert into t (id,a) values (830,36);
+insert into t (id,a) values (830,37);
+insert into t (id,a) values (830,38);
+insert into t (id,a) values (830,39);
+insert into t (id,a) values (830,40);
+insert into t (id,a) values (830,41);
+insert into t (id,a) values (830,42);
+insert into t (id,a) values (830,43);
+insert into t (id,a) values (830,44);
+insert into t (id,a) values (830,45);
+insert into t (id,a) values (830,46);
+insert into t (id,a) values (830,47);
+insert into t (id,a) values (830,48);
+insert into t (id,a) values (830,49);
+insert into t (id,a) values (830,50);
+insert into t (id,a) values (830,51);
+insert into t (id,a) values (830,52);
+insert into t (id,a) values (830,53);
+insert into t (id,a) values (830,54);
+insert into t (id,a) values (830,55);
+insert into t (id,a) values (830,56);
+insert into t (id,a) values (830,57);
+insert into t (id,a) values (830,58);
+insert into t (id,a) values (830,59);
+insert into t (id,a) values (830,60);
+insert into t (id,a) values (830,61);
+insert into t (id,a) values (830,62);
+insert into t (id,a) values (830,63);
+insert into t (id,a) values (830,64);
+insert into t (id,a) values (830,65);
+insert into t (id,a) values (830,66);
+insert into t (id,a) values (830,67);
+insert into t (id,a) values (830,68);
+insert into t (id,a) values (830,69);
+insert into t (id,a) values (830,70);
+insert into t (id,a) values (830,71);
+insert into t (id,a) values (830,72);
+insert into t (id,a) values (830,73);
+insert into t (id,a) values (830,74);
+insert into t (id,a) values (830,75);
+insert into t (id,a) values (830,76);
+insert into t (id,a) values (830,77);
+insert into t (id,a) values (830,78);
+insert into t (id,a) values (830,79);
+insert into t (id,a) values (830,80);
+insert into t (id,a) values (830,81);
+insert into t (id,a) values (830,82);
+insert into t (id,a) values (830,83);
+insert into t (id,a) values (830,84);
+insert into t (id,a) values (830,85);
+insert into t (id,a) values (830,86);
+insert into t (id,a) values (830,87);
+insert into t (id,a) values (830,88);
+insert into t (id,a) values (830,89);
+insert into t (id,a) values (830,90);
+insert into t (id,a) values (830,91);
+insert into t (id,a) values (830,92);
+insert into t (id,a) values (830,93);
+insert into t (id,a) values (830,94);
+insert into t (id,a) values (830,95);
+insert into t (id,a) values (830,96);
+insert into t (id,a) values (830,97);
+insert into t (id,a) values (830,98);
+insert into t (id,a) values (830,99);
+insert into t (id,a) values (831,0);
+insert into t (id,a) values (831,1);
+insert into t (id,a) values (831,2);
+insert into t (id,a) values (831,3);
+insert into t (id,a) values (831,4);
+insert into t (id,a) values (831,5);
+insert into t (id,a) values (831,6);
+insert into t (id,a) values (831,7);
+insert into t (id,a) values (831,8);
+insert into t (id,a) values (831,9);
+insert into t (id,a) values (831,10);
+insert into t (id,a) values (831,11);
+insert into t (id,a) values (831,12);
+insert into t (id,a) values (831,13);
+insert into t (id,a) values (831,14);
+insert into t (id,a) values (831,15);
+insert into t (id,a) values (831,16);
+insert into t (id,a) values (831,17);
+insert into t (id,a) values (831,18);
+insert into t (id,a) values (831,19);
+insert into t (id,a) values (831,20);
+insert into t (id,a) values (831,21);
+insert into t (id,a) values (831,22);
+insert into t (id,a) values (831,23);
+insert into t (id,a) values (831,24);
+insert into t (id,a) values (831,25);
+insert into t (id,a) values (831,26);
+insert into t (id,a) values (831,27);
+insert into t (id,a) values (831,28);
+insert into t (id,a) values (831,29);
+insert into t (id,a) values (831,30);
+insert into t (id,a) values (831,31);
+insert into t (id,a) values (831,32);
+insert into t (id,a) values (831,33);
+insert into t (id,a) values (831,34);
+insert into t (id,a) values (831,35);
+insert into t (id,a) values (831,36);
+insert into t (id,a) values (831,37);
+insert into t (id,a) values (831,38);
+insert into t (id,a) values (831,39);
+insert into t (id,a) values (831,40);
+insert into t (id,a) values (831,41);
+insert into t (id,a) values (831,42);
+insert into t (id,a) values (831,43);
+insert into t (id,a) values (831,44);
+insert into t (id,a) values (831,45);
+insert into t (id,a) values (831,46);
+insert into t (id,a) values (831,47);
+insert into t (id,a) values (831,48);
+insert into t (id,a) values (831,49);
+insert into t (id,a) values (831,50);
+insert into t (id,a) values (831,51);
+insert into t (id,a) values (831,52);
+insert into t (id,a) values (831,53);
+insert into t (id,a) values (831,54);
+insert into t (id,a) values (831,55);
+insert into t (id,a) values (831,56);
+insert into t (id,a) values (831,57);
+insert into t (id,a) values (831,58);
+insert into t (id,a) values (831,59);
+insert into t (id,a) values (831,60);
+insert into t (id,a) values (831,61);
+insert into t (id,a) values (831,62);
+insert into t (id,a) values (831,63);
+insert into t (id,a) values (831,64);
+insert into t (id,a) values (831,65);
+insert into t (id,a) values (831,66);
+insert into t (id,a) values (831,67);
+insert into t (id,a) values (831,68);
+insert into t (id,a) values (831,69);
+insert into t (id,a) values (831,70);
+insert into t (id,a) values (831,71);
+insert into t (id,a) values (831,72);
+insert into t (id,a) values (831,73);
+insert into t (id,a) values (831,74);
+insert into t (id,a) values (831,75);
+insert into t (id,a) values (831,76);
+insert into t (id,a) values (831,77);
+insert into t (id,a) values (831,78);
+insert into t (id,a) values (831,79);
+insert into t (id,a) values (831,80);
+insert into t (id,a) values (831,81);
+insert into t (id,a) values (831,82);
+insert into t (id,a) values (831,83);
+insert into t (id,a) values (831,84);
+insert into t (id,a) values (831,85);
+insert into t (id,a) values (831,86);
+insert into t (id,a) values (831,87);
+insert into t (id,a) values (831,88);
+insert into t (id,a) values (831,89);
+insert into t (id,a) values (831,90);
+insert into t (id,a) values (831,91);
+insert into t (id,a) values (831,92);
+insert into t (id,a) values (831,93);
+insert into t (id,a) values (831,94);
+insert into t (id,a) values (831,95);
+insert into t (id,a) values (831,96);
+insert into t (id,a) values (831,97);
+insert into t (id,a) values (831,98);
+insert into t (id,a) values (831,99);
+insert into t (id,a) values (832,0);
+insert into t (id,a) values (832,1);
+insert into t (id,a) values (832,2);
+insert into t (id,a) values (832,3);
+insert into t (id,a) values (832,4);
+insert into t (id,a) values (832,5);
+insert into t (id,a) values (832,6);
+insert into t (id,a) values (832,7);
+insert into t (id,a) values (832,8);
+insert into t (id,a) values (832,9);
+insert into t (id,a) values (832,10);
+insert into t (id,a) values (832,11);
+insert into t (id,a) values (832,12);
+insert into t (id,a) values (832,13);
+insert into t (id,a) values (832,14);
+insert into t (id,a) values (832,15);
+insert into t (id,a) values (832,16);
+insert into t (id,a) values (832,17);
+insert into t (id,a) values (832,18);
+insert into t (id,a) values (832,19);
+insert into t (id,a) values (832,20);
+insert into t (id,a) values (832,21);
+insert into t (id,a) values (832,22);
+insert into t (id,a) values (832,23);
+insert into t (id,a) values (832,24);
+insert into t (id,a) values (832,25);
+insert into t (id,a) values (832,26);
+insert into t (id,a) values (832,27);
+insert into t (id,a) values (832,28);
+insert into t (id,a) values (832,29);
+insert into t (id,a) values (832,30);
+insert into t (id,a) values (832,31);
+insert into t (id,a) values (832,32);
+insert into t (id,a) values (832,33);
+insert into t (id,a) values (832,34);
+insert into t (id,a) values (832,35);
+insert into t (id,a) values (832,36);
+insert into t (id,a) values (832,37);
+insert into t (id,a) values (832,38);
+insert into t (id,a) values (832,39);
+insert into t (id,a) values (832,40);
+insert into t (id,a) values (832,41);
+insert into t (id,a) values (832,42);
+insert into t (id,a) values (832,43);
+insert into t (id,a) values (832,44);
+insert into t (id,a) values (832,45);
+insert into t (id,a) values (832,46);
+insert into t (id,a) values (832,47);
+insert into t (id,a) values (832,48);
+insert into t (id,a) values (832,49);
+insert into t (id,a) values (832,50);
+insert into t (id,a) values (832,51);
+insert into t (id,a) values (832,52);
+insert into t (id,a) values (832,53);
+insert into t (id,a) values (832,54);
+insert into t (id,a) values (832,55);
+insert into t (id,a) values (832,56);
+insert into t (id,a) values (832,57);
+insert into t (id,a) values (832,58);
+insert into t (id,a) values (832,59);
+insert into t (id,a) values (832,60);
+insert into t (id,a) values (832,61);
+insert into t (id,a) values (832,62);
+insert into t (id,a) values (832,63);
+insert into t (id,a) values (832,64);
+insert into t (id,a) values (832,65);
+insert into t (id,a) values (832,66);
+insert into t (id,a) values (832,67);
+insert into t (id,a) values (832,68);
+insert into t (id,a) values (832,69);
+insert into t (id,a) values (832,70);
+insert into t (id,a) values (832,71);
+insert into t (id,a) values (832,72);
+insert into t (id,a) values (832,73);
+insert into t (id,a) values (832,74);
+insert into t (id,a) values (832,75);
+insert into t (id,a) values (832,76);
+insert into t (id,a) values (832,77);
+insert into t (id,a) values (832,78);
+insert into t (id,a) values (832,79);
+insert into t (id,a) values (832,80);
+insert into t (id,a) values (832,81);
+insert into t (id,a) values (832,82);
+insert into t (id,a) values (832,83);
+insert into t (id,a) values (832,84);
+insert into t (id,a) values (832,85);
+insert into t (id,a) values (832,86);
+insert into t (id,a) values (832,87);
+insert into t (id,a) values (832,88);
+insert into t (id,a) values (832,89);
+insert into t (id,a) values (832,90);
+insert into t (id,a) values (832,91);
+insert into t (id,a) values (832,92);
+insert into t (id,a) values (832,93);
+insert into t (id,a) values (832,94);
+insert into t (id,a) values (832,95);
+insert into t (id,a) values (832,96);
+insert into t (id,a) values (832,97);
+insert into t (id,a) values (832,98);
+insert into t (id,a) values (832,99);
+insert into t (id,a) values (833,0);
+insert into t (id,a) values (833,1);
+insert into t (id,a) values (833,2);
+insert into t (id,a) values (833,3);
+insert into t (id,a) values (833,4);
+insert into t (id,a) values (833,5);
+insert into t (id,a) values (833,6);
+insert into t (id,a) values (833,7);
+insert into t (id,a) values (833,8);
+insert into t (id,a) values (833,9);
+insert into t (id,a) values (833,10);
+insert into t (id,a) values (833,11);
+insert into t (id,a) values (833,12);
+insert into t (id,a) values (833,13);
+insert into t (id,a) values (833,14);
+insert into t (id,a) values (833,15);
+insert into t (id,a) values (833,16);
+insert into t (id,a) values (833,17);
+insert into t (id,a) values (833,18);
+insert into t (id,a) values (833,19);
+insert into t (id,a) values (833,20);
+insert into t (id,a) values (833,21);
+insert into t (id,a) values (833,22);
+insert into t (id,a) values (833,23);
+insert into t (id,a) values (833,24);
+insert into t (id,a) values (833,25);
+insert into t (id,a) values (833,26);
+insert into t (id,a) values (833,27);
+insert into t (id,a) values (833,28);
+insert into t (id,a) values (833,29);
+insert into t (id,a) values (833,30);
+insert into t (id,a) values (833,31);
+insert into t (id,a) values (833,32);
+insert into t (id,a) values (833,33);
+insert into t (id,a) values (833,34);
+insert into t (id,a) values (833,35);
+insert into t (id,a) values (833,36);
+insert into t (id,a) values (833,37);
+insert into t (id,a) values (833,38);
+insert into t (id,a) values (833,39);
+insert into t (id,a) values (833,40);
+insert into t (id,a) values (833,41);
+insert into t (id,a) values (833,42);
+insert into t (id,a) values (833,43);
+insert into t (id,a) values (833,44);
+insert into t (id,a) values (833,45);
+insert into t (id,a) values (833,46);
+insert into t (id,a) values (833,47);
+insert into t (id,a) values (833,48);
+insert into t (id,a) values (833,49);
+insert into t (id,a) values (833,50);
+insert into t (id,a) values (833,51);
+insert into t (id,a) values (833,52);
+insert into t (id,a) values (833,53);
+insert into t (id,a) values (833,54);
+insert into t (id,a) values (833,55);
+insert into t (id,a) values (833,56);
+insert into t (id,a) values (833,57);
+insert into t (id,a) values (833,58);
+insert into t (id,a) values (833,59);
+insert into t (id,a) values (833,60);
+insert into t (id,a) values (833,61);
+insert into t (id,a) values (833,62);
+insert into t (id,a) values (833,63);
+insert into t (id,a) values (833,64);
+insert into t (id,a) values (833,65);
+insert into t (id,a) values (833,66);
+insert into t (id,a) values (833,67);
+insert into t (id,a) values (833,68);
+insert into t (id,a) values (833,69);
+insert into t (id,a) values (833,70);
+insert into t (id,a) values (833,71);
+insert into t (id,a) values (833,72);
+insert into t (id,a) values (833,73);
+insert into t (id,a) values (833,74);
+insert into t (id,a) values (833,75);
+insert into t (id,a) values (833,76);
+insert into t (id,a) values (833,77);
+insert into t (id,a) values (833,78);
+insert into t (id,a) values (833,79);
+insert into t (id,a) values (833,80);
+insert into t (id,a) values (833,81);
+insert into t (id,a) values (833,82);
+insert into t (id,a) values (833,83);
+insert into t (id,a) values (833,84);
+insert into t (id,a) values (833,85);
+insert into t (id,a) values (833,86);
+insert into t (id,a) values (833,87);
+insert into t (id,a) values (833,88);
+insert into t (id,a) values (833,89);
+insert into t (id,a) values (833,90);
+insert into t (id,a) values (833,91);
+insert into t (id,a) values (833,92);
+insert into t (id,a) values (833,93);
+insert into t (id,a) values (833,94);
+insert into t (id,a) values (833,95);
+insert into t (id,a) values (833,96);
+insert into t (id,a) values (833,97);
+insert into t (id,a) values (833,98);
+insert into t (id,a) values (833,99);
+insert into t (id,a) values (834,0);
+insert into t (id,a) values (834,1);
+insert into t (id,a) values (834,2);
+insert into t (id,a) values (834,3);
+insert into t (id,a) values (834,4);
+insert into t (id,a) values (834,5);
+insert into t (id,a) values (834,6);
+insert into t (id,a) values (834,7);
+insert into t (id,a) values (834,8);
+insert into t (id,a) values (834,9);
+insert into t (id,a) values (834,10);
+insert into t (id,a) values (834,11);
+insert into t (id,a) values (834,12);
+insert into t (id,a) values (834,13);
+insert into t (id,a) values (834,14);
+insert into t (id,a) values (834,15);
+insert into t (id,a) values (834,16);
+insert into t (id,a) values (834,17);
+insert into t (id,a) values (834,18);
+insert into t (id,a) values (834,19);
+insert into t (id,a) values (834,20);
+insert into t (id,a) values (834,21);
+insert into t (id,a) values (834,22);
+insert into t (id,a) values (834,23);
+insert into t (id,a) values (834,24);
+insert into t (id,a) values (834,25);
+insert into t (id,a) values (834,26);
+insert into t (id,a) values (834,27);
+insert into t (id,a) values (834,28);
+insert into t (id,a) values (834,29);
+insert into t (id,a) values (834,30);
+insert into t (id,a) values (834,31);
+insert into t (id,a) values (834,32);
+insert into t (id,a) values (834,33);
+insert into t (id,a) values (834,34);
+insert into t (id,a) values (834,35);
+insert into t (id,a) values (834,36);
+insert into t (id,a) values (834,37);
+insert into t (id,a) values (834,38);
+insert into t (id,a) values (834,39);
+insert into t (id,a) values (834,40);
+insert into t (id,a) values (834,41);
+insert into t (id,a) values (834,42);
+insert into t (id,a) values (834,43);
+insert into t (id,a) values (834,44);
+insert into t (id,a) values (834,45);
+insert into t (id,a) values (834,46);
+insert into t (id,a) values (834,47);
+insert into t (id,a) values (834,48);
+insert into t (id,a) values (834,49);
+insert into t (id,a) values (834,50);
+insert into t (id,a) values (834,51);
+insert into t (id,a) values (834,52);
+insert into t (id,a) values (834,53);
+insert into t (id,a) values (834,54);
+insert into t (id,a) values (834,55);
+insert into t (id,a) values (834,56);
+insert into t (id,a) values (834,57);
+insert into t (id,a) values (834,58);
+insert into t (id,a) values (834,59);
+insert into t (id,a) values (834,60);
+insert into t (id,a) values (834,61);
+insert into t (id,a) values (834,62);
+insert into t (id,a) values (834,63);
+insert into t (id,a) values (834,64);
+insert into t (id,a) values (834,65);
+insert into t (id,a) values (834,66);
+insert into t (id,a) values (834,67);
+insert into t (id,a) values (834,68);
+insert into t (id,a) values (834,69);
+insert into t (id,a) values (834,70);
+insert into t (id,a) values (834,71);
+insert into t (id,a) values (834,72);
+insert into t (id,a) values (834,73);
+insert into t (id,a) values (834,74);
+insert into t (id,a) values (834,75);
+insert into t (id,a) values (834,76);
+insert into t (id,a) values (834,77);
+insert into t (id,a) values (834,78);
+insert into t (id,a) values (834,79);
+insert into t (id,a) values (834,80);
+insert into t (id,a) values (834,81);
+insert into t (id,a) values (834,82);
+insert into t (id,a) values (834,83);
+insert into t (id,a) values (834,84);
+insert into t (id,a) values (834,85);
+insert into t (id,a) values (834,86);
+insert into t (id,a) values (834,87);
+insert into t (id,a) values (834,88);
+insert into t (id,a) values (834,89);
+insert into t (id,a) values (834,90);
+insert into t (id,a) values (834,91);
+insert into t (id,a) values (834,92);
+insert into t (id,a) values (834,93);
+insert into t (id,a) values (834,94);
+insert into t (id,a) values (834,95);
+insert into t (id,a) values (834,96);
+insert into t (id,a) values (834,97);
+insert into t (id,a) values (834,98);
+insert into t (id,a) values (834,99);
+insert into t (id,a) values (835,0);
+insert into t (id,a) values (835,1);
+insert into t (id,a) values (835,2);
+insert into t (id,a) values (835,3);
+insert into t (id,a) values (835,4);
+insert into t (id,a) values (835,5);
+insert into t (id,a) values (835,6);
+insert into t (id,a) values (835,7);
+insert into t (id,a) values (835,8);
+insert into t (id,a) values (835,9);
+insert into t (id,a) values (835,10);
+insert into t (id,a) values (835,11);
+insert into t (id,a) values (835,12);
+insert into t (id,a) values (835,13);
+insert into t (id,a) values (835,14);
+insert into t (id,a) values (835,15);
+insert into t (id,a) values (835,16);
+insert into t (id,a) values (835,17);
+insert into t (id,a) values (835,18);
+insert into t (id,a) values (835,19);
+insert into t (id,a) values (835,20);
+insert into t (id,a) values (835,21);
+insert into t (id,a) values (835,22);
+insert into t (id,a) values (835,23);
+insert into t (id,a) values (835,24);
+insert into t (id,a) values (835,25);
+insert into t (id,a) values (835,26);
+insert into t (id,a) values (835,27);
+insert into t (id,a) values (835,28);
+insert into t (id,a) values (835,29);
+insert into t (id,a) values (835,30);
+insert into t (id,a) values (835,31);
+insert into t (id,a) values (835,32);
+insert into t (id,a) values (835,33);
+insert into t (id,a) values (835,34);
+insert into t (id,a) values (835,35);
+insert into t (id,a) values (835,36);
+insert into t (id,a) values (835,37);
+insert into t (id,a) values (835,38);
+insert into t (id,a) values (835,39);
+insert into t (id,a) values (835,40);
+insert into t (id,a) values (835,41);
+insert into t (id,a) values (835,42);
+insert into t (id,a) values (835,43);
+insert into t (id,a) values (835,44);
+insert into t (id,a) values (835,45);
+insert into t (id,a) values (835,46);
+insert into t (id,a) values (835,47);
+insert into t (id,a) values (835,48);
+insert into t (id,a) values (835,49);
+insert into t (id,a) values (835,50);
+insert into t (id,a) values (835,51);
+insert into t (id,a) values (835,52);
+insert into t (id,a) values (835,53);
+insert into t (id,a) values (835,54);
+insert into t (id,a) values (835,55);
+insert into t (id,a) values (835,56);
+insert into t (id,a) values (835,57);
+insert into t (id,a) values (835,58);
+insert into t (id,a) values (835,59);
+insert into t (id,a) values (835,60);
+insert into t (id,a) values (835,61);
+insert into t (id,a) values (835,62);
+insert into t (id,a) values (835,63);
+insert into t (id,a) values (835,64);
+insert into t (id,a) values (835,65);
+insert into t (id,a) values (835,66);
+insert into t (id,a) values (835,67);
+insert into t (id,a) values (835,68);
+insert into t (id,a) values (835,69);
+insert into t (id,a) values (835,70);
+insert into t (id,a) values (835,71);
+insert into t (id,a) values (835,72);
+insert into t (id,a) values (835,73);
+insert into t (id,a) values (835,74);
+insert into t (id,a) values (835,75);
+insert into t (id,a) values (835,76);
+insert into t (id,a) values (835,77);
+insert into t (id,a) values (835,78);
+insert into t (id,a) values (835,79);
+insert into t (id,a) values (835,80);
+insert into t (id,a) values (835,81);
+insert into t (id,a) values (835,82);
+insert into t (id,a) values (835,83);
+insert into t (id,a) values (835,84);
+insert into t (id,a) values (835,85);
+insert into t (id,a) values (835,86);
+insert into t (id,a) values (835,87);
+insert into t (id,a) values (835,88);
+insert into t (id,a) values (835,89);
+insert into t (id,a) values (835,90);
+insert into t (id,a) values (835,91);
+insert into t (id,a) values (835,92);
+insert into t (id,a) values (835,93);
+insert into t (id,a) values (835,94);
+insert into t (id,a) values (835,95);
+insert into t (id,a) values (835,96);
+insert into t (id,a) values (835,97);
+insert into t (id,a) values (835,98);
+insert into t (id,a) values (835,99);
+insert into t (id,a) values (836,0);
+insert into t (id,a) values (836,1);
+insert into t (id,a) values (836,2);
+insert into t (id,a) values (836,3);
+insert into t (id,a) values (836,4);
+insert into t (id,a) values (836,5);
+insert into t (id,a) values (836,6);
+insert into t (id,a) values (836,7);
+insert into t (id,a) values (836,8);
+insert into t (id,a) values (836,9);
+insert into t (id,a) values (836,10);
+insert into t (id,a) values (836,11);
+insert into t (id,a) values (836,12);
+insert into t (id,a) values (836,13);
+insert into t (id,a) values (836,14);
+insert into t (id,a) values (836,15);
+insert into t (id,a) values (836,16);
+insert into t (id,a) values (836,17);
+insert into t (id,a) values (836,18);
+insert into t (id,a) values (836,19);
+insert into t (id,a) values (836,20);
+insert into t (id,a) values (836,21);
+insert into t (id,a) values (836,22);
+insert into t (id,a) values (836,23);
+insert into t (id,a) values (836,24);
+insert into t (id,a) values (836,25);
+insert into t (id,a) values (836,26);
+insert into t (id,a) values (836,27);
+insert into t (id,a) values (836,28);
+insert into t (id,a) values (836,29);
+insert into t (id,a) values (836,30);
+insert into t (id,a) values (836,31);
+insert into t (id,a) values (836,32);
+insert into t (id,a) values (836,33);
+insert into t (id,a) values (836,34);
+insert into t (id,a) values (836,35);
+insert into t (id,a) values (836,36);
+insert into t (id,a) values (836,37);
+insert into t (id,a) values (836,38);
+insert into t (id,a) values (836,39);
+insert into t (id,a) values (836,40);
+insert into t (id,a) values (836,41);
+insert into t (id,a) values (836,42);
+insert into t (id,a) values (836,43);
+insert into t (id,a) values (836,44);
+insert into t (id,a) values (836,45);
+insert into t (id,a) values (836,46);
+insert into t (id,a) values (836,47);
+insert into t (id,a) values (836,48);
+insert into t (id,a) values (836,49);
+insert into t (id,a) values (836,50);
+insert into t (id,a) values (836,51);
+insert into t (id,a) values (836,52);
+insert into t (id,a) values (836,53);
+insert into t (id,a) values (836,54);
+insert into t (id,a) values (836,55);
+insert into t (id,a) values (836,56);
+insert into t (id,a) values (836,57);
+insert into t (id,a) values (836,58);
+insert into t (id,a) values (836,59);
+insert into t (id,a) values (836,60);
+insert into t (id,a) values (836,61);
+insert into t (id,a) values (836,62);
+insert into t (id,a) values (836,63);
+insert into t (id,a) values (836,64);
+insert into t (id,a) values (836,65);
+insert into t (id,a) values (836,66);
+insert into t (id,a) values (836,67);
+insert into t (id,a) values (836,68);
+insert into t (id,a) values (836,69);
+insert into t (id,a) values (836,70);
+insert into t (id,a) values (836,71);
+insert into t (id,a) values (836,72);
+insert into t (id,a) values (836,73);
+insert into t (id,a) values (836,74);
+insert into t (id,a) values (836,75);
+insert into t (id,a) values (836,76);
+insert into t (id,a) values (836,77);
+insert into t (id,a) values (836,78);
+insert into t (id,a) values (836,79);
+insert into t (id,a) values (836,80);
+insert into t (id,a) values (836,81);
+insert into t (id,a) values (836,82);
+insert into t (id,a) values (836,83);
+insert into t (id,a) values (836,84);
+insert into t (id,a) values (836,85);
+insert into t (id,a) values (836,86);
+insert into t (id,a) values (836,87);
+insert into t (id,a) values (836,88);
+insert into t (id,a) values (836,89);
+insert into t (id,a) values (836,90);
+insert into t (id,a) values (836,91);
+insert into t (id,a) values (836,92);
+insert into t (id,a) values (836,93);
+insert into t (id,a) values (836,94);
+insert into t (id,a) values (836,95);
+insert into t (id,a) values (836,96);
+insert into t (id,a) values (836,97);
+insert into t (id,a) values (836,98);
+insert into t (id,a) values (836,99);
+insert into t (id,a) values (837,0);
+insert into t (id,a) values (837,1);
+insert into t (id,a) values (837,2);
+insert into t (id,a) values (837,3);
+insert into t (id,a) values (837,4);
+insert into t (id,a) values (837,5);
+insert into t (id,a) values (837,6);
+insert into t (id,a) values (837,7);
+insert into t (id,a) values (837,8);
+insert into t (id,a) values (837,9);
+insert into t (id,a) values (837,10);
+insert into t (id,a) values (837,11);
+insert into t (id,a) values (837,12);
+insert into t (id,a) values (837,13);
+insert into t (id,a) values (837,14);
+insert into t (id,a) values (837,15);
+insert into t (id,a) values (837,16);
+insert into t (id,a) values (837,17);
+insert into t (id,a) values (837,18);
+insert into t (id,a) values (837,19);
+insert into t (id,a) values (837,20);
+insert into t (id,a) values (837,21);
+insert into t (id,a) values (837,22);
+insert into t (id,a) values (837,23);
+insert into t (id,a) values (837,24);
+insert into t (id,a) values (837,25);
+insert into t (id,a) values (837,26);
+insert into t (id,a) values (837,27);
+insert into t (id,a) values (837,28);
+insert into t (id,a) values (837,29);
+insert into t (id,a) values (837,30);
+insert into t (id,a) values (837,31);
+insert into t (id,a) values (837,32);
+insert into t (id,a) values (837,33);
+insert into t (id,a) values (837,34);
+insert into t (id,a) values (837,35);
+insert into t (id,a) values (837,36);
+insert into t (id,a) values (837,37);
+insert into t (id,a) values (837,38);
+insert into t (id,a) values (837,39);
+insert into t (id,a) values (837,40);
+insert into t (id,a) values (837,41);
+insert into t (id,a) values (837,42);
+insert into t (id,a) values (837,43);
+insert into t (id,a) values (837,44);
+insert into t (id,a) values (837,45);
+insert into t (id,a) values (837,46);
+insert into t (id,a) values (837,47);
+insert into t (id,a) values (837,48);
+insert into t (id,a) values (837,49);
+insert into t (id,a) values (837,50);
+insert into t (id,a) values (837,51);
+insert into t (id,a) values (837,52);
+insert into t (id,a) values (837,53);
+insert into t (id,a) values (837,54);
+insert into t (id,a) values (837,55);
+insert into t (id,a) values (837,56);
+insert into t (id,a) values (837,57);
+insert into t (id,a) values (837,58);
+insert into t (id,a) values (837,59);
+insert into t (id,a) values (837,60);
+insert into t (id,a) values (837,61);
+insert into t (id,a) values (837,62);
+insert into t (id,a) values (837,63);
+insert into t (id,a) values (837,64);
+insert into t (id,a) values (837,65);
+insert into t (id,a) values (837,66);
+insert into t (id,a) values (837,67);
+insert into t (id,a) values (837,68);
+insert into t (id,a) values (837,69);
+insert into t (id,a) values (837,70);
+insert into t (id,a) values (837,71);
+insert into t (id,a) values (837,72);
+insert into t (id,a) values (837,73);
+insert into t (id,a) values (837,74);
+insert into t (id,a) values (837,75);
+insert into t (id,a) values (837,76);
+insert into t (id,a) values (837,77);
+insert into t (id,a) values (837,78);
+insert into t (id,a) values (837,79);
+insert into t (id,a) values (837,80);
+insert into t (id,a) values (837,81);
+insert into t (id,a) values (837,82);
+insert into t (id,a) values (837,83);
+insert into t (id,a) values (837,84);
+insert into t (id,a) values (837,85);
+insert into t (id,a) values (837,86);
+insert into t (id,a) values (837,87);
+insert into t (id,a) values (837,88);
+insert into t (id,a) values (837,89);
+insert into t (id,a) values (837,90);
+insert into t (id,a) values (837,91);
+insert into t (id,a) values (837,92);
+insert into t (id,a) values (837,93);
+insert into t (id,a) values (837,94);
+insert into t (id,a) values (837,95);
+insert into t (id,a) values (837,96);
+insert into t (id,a) values (837,97);
+insert into t (id,a) values (837,98);
+insert into t (id,a) values (837,99);
+insert into t (id,a) values (838,0);
+insert into t (id,a) values (838,1);
+insert into t (id,a) values (838,2);
+insert into t (id,a) values (838,3);
+insert into t (id,a) values (838,4);
+insert into t (id,a) values (838,5);
+insert into t (id,a) values (838,6);
+insert into t (id,a) values (838,7);
+insert into t (id,a) values (838,8);
+insert into t (id,a) values (838,9);
+insert into t (id,a) values (838,10);
+insert into t (id,a) values (838,11);
+insert into t (id,a) values (838,12);
+insert into t (id,a) values (838,13);
+insert into t (id,a) values (838,14);
+insert into t (id,a) values (838,15);
+insert into t (id,a) values (838,16);
+insert into t (id,a) values (838,17);
+insert into t (id,a) values (838,18);
+insert into t (id,a) values (838,19);
+insert into t (id,a) values (838,20);
+insert into t (id,a) values (838,21);
+insert into t (id,a) values (838,22);
+insert into t (id,a) values (838,23);
+insert into t (id,a) values (838,24);
+insert into t (id,a) values (838,25);
+insert into t (id,a) values (838,26);
+insert into t (id,a) values (838,27);
+insert into t (id,a) values (838,28);
+insert into t (id,a) values (838,29);
+insert into t (id,a) values (838,30);
+insert into t (id,a) values (838,31);
+insert into t (id,a) values (838,32);
+insert into t (id,a) values (838,33);
+insert into t (id,a) values (838,34);
+insert into t (id,a) values (838,35);
+insert into t (id,a) values (838,36);
+insert into t (id,a) values (838,37);
+insert into t (id,a) values (838,38);
+insert into t (id,a) values (838,39);
+insert into t (id,a) values (838,40);
+insert into t (id,a) values (838,41);
+insert into t (id,a) values (838,42);
+insert into t (id,a) values (838,43);
+insert into t (id,a) values (838,44);
+insert into t (id,a) values (838,45);
+insert into t (id,a) values (838,46);
+insert into t (id,a) values (838,47);
+insert into t (id,a) values (838,48);
+insert into t (id,a) values (838,49);
+insert into t (id,a) values (838,50);
+insert into t (id,a) values (838,51);
+insert into t (id,a) values (838,52);
+insert into t (id,a) values (838,53);
+insert into t (id,a) values (838,54);
+insert into t (id,a) values (838,55);
+insert into t (id,a) values (838,56);
+insert into t (id,a) values (838,57);
+insert into t (id,a) values (838,58);
+insert into t (id,a) values (838,59);
+insert into t (id,a) values (838,60);
+insert into t (id,a) values (838,61);
+insert into t (id,a) values (838,62);
+insert into t (id,a) values (838,63);
+insert into t (id,a) values (838,64);
+insert into t (id,a) values (838,65);
+insert into t (id,a) values (838,66);
+insert into t (id,a) values (838,67);
+insert into t (id,a) values (838,68);
+insert into t (id,a) values (838,69);
+insert into t (id,a) values (838,70);
+insert into t (id,a) values (838,71);
+insert into t (id,a) values (838,72);
+insert into t (id,a) values (838,73);
+insert into t (id,a) values (838,74);
+insert into t (id,a) values (838,75);
+insert into t (id,a) values (838,76);
+insert into t (id,a) values (838,77);
+insert into t (id,a) values (838,78);
+insert into t (id,a) values (838,79);
+insert into t (id,a) values (838,80);
+insert into t (id,a) values (838,81);
+insert into t (id,a) values (838,82);
+insert into t (id,a) values (838,83);
+insert into t (id,a) values (838,84);
+insert into t (id,a) values (838,85);
+insert into t (id,a) values (838,86);
+insert into t (id,a) values (838,87);
+insert into t (id,a) values (838,88);
+insert into t (id,a) values (838,89);
+insert into t (id,a) values (838,90);
+insert into t (id,a) values (838,91);
+insert into t (id,a) values (838,92);
+insert into t (id,a) values (838,93);
+insert into t (id,a) values (838,94);
+insert into t (id,a) values (838,95);
+insert into t (id,a) values (838,96);
+insert into t (id,a) values (838,97);
+insert into t (id,a) values (838,98);
+insert into t (id,a) values (838,99);
+insert into t (id,a) values (839,0);
+insert into t (id,a) values (839,1);
+insert into t (id,a) values (839,2);
+insert into t (id,a) values (839,3);
+insert into t (id,a) values (839,4);
+insert into t (id,a) values (839,5);
+insert into t (id,a) values (839,6);
+insert into t (id,a) values (839,7);
+insert into t (id,a) values (839,8);
+insert into t (id,a) values (839,9);
+insert into t (id,a) values (839,10);
+insert into t (id,a) values (839,11);
+insert into t (id,a) values (839,12);
+insert into t (id,a) values (839,13);
+insert into t (id,a) values (839,14);
+insert into t (id,a) values (839,15);
+insert into t (id,a) values (839,16);
+insert into t (id,a) values (839,17);
+insert into t (id,a) values (839,18);
+insert into t (id,a) values (839,19);
+insert into t (id,a) values (839,20);
+insert into t (id,a) values (839,21);
+insert into t (id,a) values (839,22);
+insert into t (id,a) values (839,23);
+insert into t (id,a) values (839,24);
+insert into t (id,a) values (839,25);
+insert into t (id,a) values (839,26);
+insert into t (id,a) values (839,27);
+insert into t (id,a) values (839,28);
+insert into t (id,a) values (839,29);
+insert into t (id,a) values (839,30);
+insert into t (id,a) values (839,31);
+insert into t (id,a) values (839,32);
+insert into t (id,a) values (839,33);
+insert into t (id,a) values (839,34);
+insert into t (id,a) values (839,35);
+insert into t (id,a) values (839,36);
+insert into t (id,a) values (839,37);
+insert into t (id,a) values (839,38);
+insert into t (id,a) values (839,39);
+insert into t (id,a) values (839,40);
+insert into t (id,a) values (839,41);
+insert into t (id,a) values (839,42);
+insert into t (id,a) values (839,43);
+insert into t (id,a) values (839,44);
+insert into t (id,a) values (839,45);
+insert into t (id,a) values (839,46);
+insert into t (id,a) values (839,47);
+insert into t (id,a) values (839,48);
+insert into t (id,a) values (839,49);
+insert into t (id,a) values (839,50);
+insert into t (id,a) values (839,51);
+insert into t (id,a) values (839,52);
+insert into t (id,a) values (839,53);
+insert into t (id,a) values (839,54);
+insert into t (id,a) values (839,55);
+insert into t (id,a) values (839,56);
+insert into t (id,a) values (839,57);
+insert into t (id,a) values (839,58);
+insert into t (id,a) values (839,59);
+insert into t (id,a) values (839,60);
+insert into t (id,a) values (839,61);
+insert into t (id,a) values (839,62);
+insert into t (id,a) values (839,63);
+insert into t (id,a) values (839,64);
+insert into t (id,a) values (839,65);
+insert into t (id,a) values (839,66);
+insert into t (id,a) values (839,67);
+insert into t (id,a) values (839,68);
+insert into t (id,a) values (839,69);
+insert into t (id,a) values (839,70);
+insert into t (id,a) values (839,71);
+insert into t (id,a) values (839,72);
+insert into t (id,a) values (839,73);
+insert into t (id,a) values (839,74);
+insert into t (id,a) values (839,75);
+insert into t (id,a) values (839,76);
+insert into t (id,a) values (839,77);
+insert into t (id,a) values (839,78);
+insert into t (id,a) values (839,79);
+insert into t (id,a) values (839,80);
+insert into t (id,a) values (839,81);
+insert into t (id,a) values (839,82);
+insert into t (id,a) values (839,83);
+insert into t (id,a) values (839,84);
+insert into t (id,a) values (839,85);
+insert into t (id,a) values (839,86);
+insert into t (id,a) values (839,87);
+insert into t (id,a) values (839,88);
+insert into t (id,a) values (839,89);
+insert into t (id,a) values (839,90);
+insert into t (id,a) values (839,91);
+insert into t (id,a) values (839,92);
+insert into t (id,a) values (839,93);
+insert into t (id,a) values (839,94);
+insert into t (id,a) values (839,95);
+insert into t (id,a) values (839,96);
+insert into t (id,a) values (839,97);
+insert into t (id,a) values (839,98);
+insert into t (id,a) values (839,99);
+insert into t (id,a) values (840,0);
+insert into t (id,a) values (840,1);
+insert into t (id,a) values (840,2);
+insert into t (id,a) values (840,3);
+insert into t (id,a) values (840,4);
+insert into t (id,a) values (840,5);
+insert into t (id,a) values (840,6);
+insert into t (id,a) values (840,7);
+insert into t (id,a) values (840,8);
+insert into t (id,a) values (840,9);
+insert into t (id,a) values (840,10);
+insert into t (id,a) values (840,11);
+insert into t (id,a) values (840,12);
+insert into t (id,a) values (840,13);
+insert into t (id,a) values (840,14);
+insert into t (id,a) values (840,15);
+insert into t (id,a) values (840,16);
+insert into t (id,a) values (840,17);
+insert into t (id,a) values (840,18);
+insert into t (id,a) values (840,19);
+insert into t (id,a) values (840,20);
+insert into t (id,a) values (840,21);
+insert into t (id,a) values (840,22);
+insert into t (id,a) values (840,23);
+insert into t (id,a) values (840,24);
+insert into t (id,a) values (840,25);
+insert into t (id,a) values (840,26);
+insert into t (id,a) values (840,27);
+insert into t (id,a) values (840,28);
+insert into t (id,a) values (840,29);
+insert into t (id,a) values (840,30);
+insert into t (id,a) values (840,31);
+insert into t (id,a) values (840,32);
+insert into t (id,a) values (840,33);
+insert into t (id,a) values (840,34);
+insert into t (id,a) values (840,35);
+insert into t (id,a) values (840,36);
+insert into t (id,a) values (840,37);
+insert into t (id,a) values (840,38);
+insert into t (id,a) values (840,39);
+insert into t (id,a) values (840,40);
+insert into t (id,a) values (840,41);
+insert into t (id,a) values (840,42);
+insert into t (id,a) values (840,43);
+insert into t (id,a) values (840,44);
+insert into t (id,a) values (840,45);
+insert into t (id,a) values (840,46);
+insert into t (id,a) values (840,47);
+insert into t (id,a) values (840,48);
+insert into t (id,a) values (840,49);
+insert into t (id,a) values (840,50);
+insert into t (id,a) values (840,51);
+insert into t (id,a) values (840,52);
+insert into t (id,a) values (840,53);
+insert into t (id,a) values (840,54);
+insert into t (id,a) values (840,55);
+insert into t (id,a) values (840,56);
+insert into t (id,a) values (840,57);
+insert into t (id,a) values (840,58);
+insert into t (id,a) values (840,59);
+insert into t (id,a) values (840,60);
+insert into t (id,a) values (840,61);
+insert into t (id,a) values (840,62);
+insert into t (id,a) values (840,63);
+insert into t (id,a) values (840,64);
+insert into t (id,a) values (840,65);
+insert into t (id,a) values (840,66);
+insert into t (id,a) values (840,67);
+insert into t (id,a) values (840,68);
+insert into t (id,a) values (840,69);
+insert into t (id,a) values (840,70);
+insert into t (id,a) values (840,71);
+insert into t (id,a) values (840,72);
+insert into t (id,a) values (840,73);
+insert into t (id,a) values (840,74);
+insert into t (id,a) values (840,75);
+insert into t (id,a) values (840,76);
+insert into t (id,a) values (840,77);
+insert into t (id,a) values (840,78);
+insert into t (id,a) values (840,79);
+insert into t (id,a) values (840,80);
+insert into t (id,a) values (840,81);
+insert into t (id,a) values (840,82);
+insert into t (id,a) values (840,83);
+insert into t (id,a) values (840,84);
+insert into t (id,a) values (840,85);
+insert into t (id,a) values (840,86);
+insert into t (id,a) values (840,87);
+insert into t (id,a) values (840,88);
+insert into t (id,a) values (840,89);
+insert into t (id,a) values (840,90);
+insert into t (id,a) values (840,91);
+insert into t (id,a) values (840,92);
+insert into t (id,a) values (840,93);
+insert into t (id,a) values (840,94);
+insert into t (id,a) values (840,95);
+insert into t (id,a) values (840,96);
+insert into t (id,a) values (840,97);
+insert into t (id,a) values (840,98);
+insert into t (id,a) values (840,99);
+insert into t (id,a) values (841,0);
+insert into t (id,a) values (841,1);
+insert into t (id,a) values (841,2);
+insert into t (id,a) values (841,3);
+insert into t (id,a) values (841,4);
+insert into t (id,a) values (841,5);
+insert into t (id,a) values (841,6);
+insert into t (id,a) values (841,7);
+insert into t (id,a) values (841,8);
+insert into t (id,a) values (841,9);
+insert into t (id,a) values (841,10);
+insert into t (id,a) values (841,11);
+insert into t (id,a) values (841,12);
+insert into t (id,a) values (841,13);
+insert into t (id,a) values (841,14);
+insert into t (id,a) values (841,15);
+insert into t (id,a) values (841,16);
+insert into t (id,a) values (841,17);
+insert into t (id,a) values (841,18);
+insert into t (id,a) values (841,19);
+insert into t (id,a) values (841,20);
+insert into t (id,a) values (841,21);
+insert into t (id,a) values (841,22);
+insert into t (id,a) values (841,23);
+insert into t (id,a) values (841,24);
+insert into t (id,a) values (841,25);
+insert into t (id,a) values (841,26);
+insert into t (id,a) values (841,27);
+insert into t (id,a) values (841,28);
+insert into t (id,a) values (841,29);
+insert into t (id,a) values (841,30);
+insert into t (id,a) values (841,31);
+insert into t (id,a) values (841,32);
+insert into t (id,a) values (841,33);
+insert into t (id,a) values (841,34);
+insert into t (id,a) values (841,35);
+insert into t (id,a) values (841,36);
+insert into t (id,a) values (841,37);
+insert into t (id,a) values (841,38);
+insert into t (id,a) values (841,39);
+insert into t (id,a) values (841,40);
+insert into t (id,a) values (841,41);
+insert into t (id,a) values (841,42);
+insert into t (id,a) values (841,43);
+insert into t (id,a) values (841,44);
+insert into t (id,a) values (841,45);
+insert into t (id,a) values (841,46);
+insert into t (id,a) values (841,47);
+insert into t (id,a) values (841,48);
+insert into t (id,a) values (841,49);
+insert into t (id,a) values (841,50);
+insert into t (id,a) values (841,51);
+insert into t (id,a) values (841,52);
+insert into t (id,a) values (841,53);
+insert into t (id,a) values (841,54);
+insert into t (id,a) values (841,55);
+insert into t (id,a) values (841,56);
+insert into t (id,a) values (841,57);
+insert into t (id,a) values (841,58);
+insert into t (id,a) values (841,59);
+insert into t (id,a) values (841,60);
+insert into t (id,a) values (841,61);
+insert into t (id,a) values (841,62);
+insert into t (id,a) values (841,63);
+insert into t (id,a) values (841,64);
+insert into t (id,a) values (841,65);
+insert into t (id,a) values (841,66);
+insert into t (id,a) values (841,67);
+insert into t (id,a) values (841,68);
+insert into t (id,a) values (841,69);
+insert into t (id,a) values (841,70);
+insert into t (id,a) values (841,71);
+insert into t (id,a) values (841,72);
+insert into t (id,a) values (841,73);
+insert into t (id,a) values (841,74);
+insert into t (id,a) values (841,75);
+insert into t (id,a) values (841,76);
+insert into t (id,a) values (841,77);
+insert into t (id,a) values (841,78);
+insert into t (id,a) values (841,79);
+insert into t (id,a) values (841,80);
+insert into t (id,a) values (841,81);
+insert into t (id,a) values (841,82);
+insert into t (id,a) values (841,83);
+insert into t (id,a) values (841,84);
+insert into t (id,a) values (841,85);
+insert into t (id,a) values (841,86);
+insert into t (id,a) values (841,87);
+insert into t (id,a) values (841,88);
+insert into t (id,a) values (841,89);
+insert into t (id,a) values (841,90);
+insert into t (id,a) values (841,91);
+insert into t (id,a) values (841,92);
+insert into t (id,a) values (841,93);
+insert into t (id,a) values (841,94);
+insert into t (id,a) values (841,95);
+insert into t (id,a) values (841,96);
+insert into t (id,a) values (841,97);
+insert into t (id,a) values (841,98);
+insert into t (id,a) values (841,99);
+insert into t (id,a) values (842,0);
+insert into t (id,a) values (842,1);
+insert into t (id,a) values (842,2);
+insert into t (id,a) values (842,3);
+insert into t (id,a) values (842,4);
+insert into t (id,a) values (842,5);
+insert into t (id,a) values (842,6);
+insert into t (id,a) values (842,7);
+insert into t (id,a) values (842,8);
+insert into t (id,a) values (842,9);
+insert into t (id,a) values (842,10);
+insert into t (id,a) values (842,11);
+insert into t (id,a) values (842,12);
+insert into t (id,a) values (842,13);
+insert into t (id,a) values (842,14);
+insert into t (id,a) values (842,15);
+insert into t (id,a) values (842,16);
+insert into t (id,a) values (842,17);
+insert into t (id,a) values (842,18);
+insert into t (id,a) values (842,19);
+insert into t (id,a) values (842,20);
+insert into t (id,a) values (842,21);
+insert into t (id,a) values (842,22);
+insert into t (id,a) values (842,23);
+insert into t (id,a) values (842,24);
+insert into t (id,a) values (842,25);
+insert into t (id,a) values (842,26);
+insert into t (id,a) values (842,27);
+insert into t (id,a) values (842,28);
+insert into t (id,a) values (842,29);
+insert into t (id,a) values (842,30);
+insert into t (id,a) values (842,31);
+insert into t (id,a) values (842,32);
+insert into t (id,a) values (842,33);
+insert into t (id,a) values (842,34);
+insert into t (id,a) values (842,35);
+insert into t (id,a) values (842,36);
+insert into t (id,a) values (842,37);
+insert into t (id,a) values (842,38);
+insert into t (id,a) values (842,39);
+insert into t (id,a) values (842,40);
+insert into t (id,a) values (842,41);
+insert into t (id,a) values (842,42);
+insert into t (id,a) values (842,43);
+insert into t (id,a) values (842,44);
+insert into t (id,a) values (842,45);
+insert into t (id,a) values (842,46);
+insert into t (id,a) values (842,47);
+insert into t (id,a) values (842,48);
+insert into t (id,a) values (842,49);
+insert into t (id,a) values (842,50);
+insert into t (id,a) values (842,51);
+insert into t (id,a) values (842,52);
+insert into t (id,a) values (842,53);
+insert into t (id,a) values (842,54);
+insert into t (id,a) values (842,55);
+insert into t (id,a) values (842,56);
+insert into t (id,a) values (842,57);
+insert into t (id,a) values (842,58);
+insert into t (id,a) values (842,59);
+insert into t (id,a) values (842,60);
+insert into t (id,a) values (842,61);
+insert into t (id,a) values (842,62);
+insert into t (id,a) values (842,63);
+insert into t (id,a) values (842,64);
+insert into t (id,a) values (842,65);
+insert into t (id,a) values (842,66);
+insert into t (id,a) values (842,67);
+insert into t (id,a) values (842,68);
+insert into t (id,a) values (842,69);
+insert into t (id,a) values (842,70);
+insert into t (id,a) values (842,71);
+insert into t (id,a) values (842,72);
+insert into t (id,a) values (842,73);
+insert into t (id,a) values (842,74);
+insert into t (id,a) values (842,75);
+insert into t (id,a) values (842,76);
+insert into t (id,a) values (842,77);
+insert into t (id,a) values (842,78);
+insert into t (id,a) values (842,79);
+insert into t (id,a) values (842,80);
+insert into t (id,a) values (842,81);
+insert into t (id,a) values (842,82);
+insert into t (id,a) values (842,83);
+insert into t (id,a) values (842,84);
+insert into t (id,a) values (842,85);
+insert into t (id,a) values (842,86);
+insert into t (id,a) values (842,87);
+insert into t (id,a) values (842,88);
+insert into t (id,a) values (842,89);
+insert into t (id,a) values (842,90);
+insert into t (id,a) values (842,91);
+insert into t (id,a) values (842,92);
+insert into t (id,a) values (842,93);
+insert into t (id,a) values (842,94);
+insert into t (id,a) values (842,95);
+insert into t (id,a) values (842,96);
+insert into t (id,a) values (842,97);
+insert into t (id,a) values (842,98);
+insert into t (id,a) values (842,99);
+insert into t (id,a) values (843,0);
+insert into t (id,a) values (843,1);
+insert into t (id,a) values (843,2);
+insert into t (id,a) values (843,3);
+insert into t (id,a) values (843,4);
+insert into t (id,a) values (843,5);
+insert into t (id,a) values (843,6);
+insert into t (id,a) values (843,7);
+insert into t (id,a) values (843,8);
+insert into t (id,a) values (843,9);
+insert into t (id,a) values (843,10);
+insert into t (id,a) values (843,11);
+insert into t (id,a) values (843,12);
+insert into t (id,a) values (843,13);
+insert into t (id,a) values (843,14);
+insert into t (id,a) values (843,15);
+insert into t (id,a) values (843,16);
+insert into t (id,a) values (843,17);
+insert into t (id,a) values (843,18);
+insert into t (id,a) values (843,19);
+insert into t (id,a) values (843,20);
+insert into t (id,a) values (843,21);
+insert into t (id,a) values (843,22);
+insert into t (id,a) values (843,23);
+insert into t (id,a) values (843,24);
+insert into t (id,a) values (843,25);
+insert into t (id,a) values (843,26);
+insert into t (id,a) values (843,27);
+insert into t (id,a) values (843,28);
+insert into t (id,a) values (843,29);
+insert into t (id,a) values (843,30);
+insert into t (id,a) values (843,31);
+insert into t (id,a) values (843,32);
+insert into t (id,a) values (843,33);
+insert into t (id,a) values (843,34);
+insert into t (id,a) values (843,35);
+insert into t (id,a) values (843,36);
+insert into t (id,a) values (843,37);
+insert into t (id,a) values (843,38);
+insert into t (id,a) values (843,39);
+insert into t (id,a) values (843,40);
+insert into t (id,a) values (843,41);
+insert into t (id,a) values (843,42);
+insert into t (id,a) values (843,43);
+insert into t (id,a) values (843,44);
+insert into t (id,a) values (843,45);
+insert into t (id,a) values (843,46);
+insert into t (id,a) values (843,47);
+insert into t (id,a) values (843,48);
+insert into t (id,a) values (843,49);
+insert into t (id,a) values (843,50);
+insert into t (id,a) values (843,51);
+insert into t (id,a) values (843,52);
+insert into t (id,a) values (843,53);
+insert into t (id,a) values (843,54);
+insert into t (id,a) values (843,55);
+insert into t (id,a) values (843,56);
+insert into t (id,a) values (843,57);
+insert into t (id,a) values (843,58);
+insert into t (id,a) values (843,59);
+insert into t (id,a) values (843,60);
+insert into t (id,a) values (843,61);
+insert into t (id,a) values (843,62);
+insert into t (id,a) values (843,63);
+insert into t (id,a) values (843,64);
+insert into t (id,a) values (843,65);
+insert into t (id,a) values (843,66);
+insert into t (id,a) values (843,67);
+insert into t (id,a) values (843,68);
+insert into t (id,a) values (843,69);
+insert into t (id,a) values (843,70);
+insert into t (id,a) values (843,71);
+insert into t (id,a) values (843,72);
+insert into t (id,a) values (843,73);
+insert into t (id,a) values (843,74);
+insert into t (id,a) values (843,75);
+insert into t (id,a) values (843,76);
+insert into t (id,a) values (843,77);
+insert into t (id,a) values (843,78);
+insert into t (id,a) values (843,79);
+insert into t (id,a) values (843,80);
+insert into t (id,a) values (843,81);
+insert into t (id,a) values (843,82);
+insert into t (id,a) values (843,83);
+insert into t (id,a) values (843,84);
+insert into t (id,a) values (843,85);
+insert into t (id,a) values (843,86);
+insert into t (id,a) values (843,87);
+insert into t (id,a) values (843,88);
+insert into t (id,a) values (843,89);
+insert into t (id,a) values (843,90);
+insert into t (id,a) values (843,91);
+insert into t (id,a) values (843,92);
+insert into t (id,a) values (843,93);
+insert into t (id,a) values (843,94);
+insert into t (id,a) values (843,95);
+insert into t (id,a) values (843,96);
+insert into t (id,a) values (843,97);
+insert into t (id,a) values (843,98);
+insert into t (id,a) values (843,99);
+insert into t (id,a) values (844,0);
+insert into t (id,a) values (844,1);
+insert into t (id,a) values (844,2);
+insert into t (id,a) values (844,3);
+insert into t (id,a) values (844,4);
+insert into t (id,a) values (844,5);
+insert into t (id,a) values (844,6);
+insert into t (id,a) values (844,7);
+insert into t (id,a) values (844,8);
+insert into t (id,a) values (844,9);
+insert into t (id,a) values (844,10);
+insert into t (id,a) values (844,11);
+insert into t (id,a) values (844,12);
+insert into t (id,a) values (844,13);
+insert into t (id,a) values (844,14);
+insert into t (id,a) values (844,15);
+insert into t (id,a) values (844,16);
+insert into t (id,a) values (844,17);
+insert into t (id,a) values (844,18);
+insert into t (id,a) values (844,19);
+insert into t (id,a) values (844,20);
+insert into t (id,a) values (844,21);
+insert into t (id,a) values (844,22);
+insert into t (id,a) values (844,23);
+insert into t (id,a) values (844,24);
+insert into t (id,a) values (844,25);
+insert into t (id,a) values (844,26);
+insert into t (id,a) values (844,27);
+insert into t (id,a) values (844,28);
+insert into t (id,a) values (844,29);
+insert into t (id,a) values (844,30);
+insert into t (id,a) values (844,31);
+insert into t (id,a) values (844,32);
+insert into t (id,a) values (844,33);
+insert into t (id,a) values (844,34);
+insert into t (id,a) values (844,35);
+insert into t (id,a) values (844,36);
+insert into t (id,a) values (844,37);
+insert into t (id,a) values (844,38);
+insert into t (id,a) values (844,39);
+insert into t (id,a) values (844,40);
+insert into t (id,a) values (844,41);
+insert into t (id,a) values (844,42);
+insert into t (id,a) values (844,43);
+insert into t (id,a) values (844,44);
+insert into t (id,a) values (844,45);
+insert into t (id,a) values (844,46);
+insert into t (id,a) values (844,47);
+insert into t (id,a) values (844,48);
+insert into t (id,a) values (844,49);
+insert into t (id,a) values (844,50);
+insert into t (id,a) values (844,51);
+insert into t (id,a) values (844,52);
+insert into t (id,a) values (844,53);
+insert into t (id,a) values (844,54);
+insert into t (id,a) values (844,55);
+insert into t (id,a) values (844,56);
+insert into t (id,a) values (844,57);
+insert into t (id,a) values (844,58);
+insert into t (id,a) values (844,59);
+insert into t (id,a) values (844,60);
+insert into t (id,a) values (844,61);
+insert into t (id,a) values (844,62);
+insert into t (id,a) values (844,63);
+insert into t (id,a) values (844,64);
+insert into t (id,a) values (844,65);
+insert into t (id,a) values (844,66);
+insert into t (id,a) values (844,67);
+insert into t (id,a) values (844,68);
+insert into t (id,a) values (844,69);
+insert into t (id,a) values (844,70);
+insert into t (id,a) values (844,71);
+insert into t (id,a) values (844,72);
+insert into t (id,a) values (844,73);
+insert into t (id,a) values (844,74);
+insert into t (id,a) values (844,75);
+insert into t (id,a) values (844,76);
+insert into t (id,a) values (844,77);
+insert into t (id,a) values (844,78);
+insert into t (id,a) values (844,79);
+insert into t (id,a) values (844,80);
+insert into t (id,a) values (844,81);
+insert into t (id,a) values (844,82);
+insert into t (id,a) values (844,83);
+insert into t (id,a) values (844,84);
+insert into t (id,a) values (844,85);
+insert into t (id,a) values (844,86);
+insert into t (id,a) values (844,87);
+insert into t (id,a) values (844,88);
+insert into t (id,a) values (844,89);
+insert into t (id,a) values (844,90);
+insert into t (id,a) values (844,91);
+insert into t (id,a) values (844,92);
+insert into t (id,a) values (844,93);
+insert into t (id,a) values (844,94);
+insert into t (id,a) values (844,95);
+insert into t (id,a) values (844,96);
+insert into t (id,a) values (844,97);
+insert into t (id,a) values (844,98);
+insert into t (id,a) values (844,99);
+insert into t (id,a) values (845,0);
+insert into t (id,a) values (845,1);
+insert into t (id,a) values (845,2);
+insert into t (id,a) values (845,3);
+insert into t (id,a) values (845,4);
+insert into t (id,a) values (845,5);
+insert into t (id,a) values (845,6);
+insert into t (id,a) values (845,7);
+insert into t (id,a) values (845,8);
+insert into t (id,a) values (845,9);
+insert into t (id,a) values (845,10);
+insert into t (id,a) values (845,11);
+insert into t (id,a) values (845,12);
+insert into t (id,a) values (845,13);
+insert into t (id,a) values (845,14);
+insert into t (id,a) values (845,15);
+insert into t (id,a) values (845,16);
+insert into t (id,a) values (845,17);
+insert into t (id,a) values (845,18);
+insert into t (id,a) values (845,19);
+insert into t (id,a) values (845,20);
+insert into t (id,a) values (845,21);
+insert into t (id,a) values (845,22);
+insert into t (id,a) values (845,23);
+insert into t (id,a) values (845,24);
+insert into t (id,a) values (845,25);
+insert into t (id,a) values (845,26);
+insert into t (id,a) values (845,27);
+insert into t (id,a) values (845,28);
+insert into t (id,a) values (845,29);
+insert into t (id,a) values (845,30);
+insert into t (id,a) values (845,31);
+insert into t (id,a) values (845,32);
+insert into t (id,a) values (845,33);
+insert into t (id,a) values (845,34);
+insert into t (id,a) values (845,35);
+insert into t (id,a) values (845,36);
+insert into t (id,a) values (845,37);
+insert into t (id,a) values (845,38);
+insert into t (id,a) values (845,39);
+insert into t (id,a) values (845,40);
+insert into t (id,a) values (845,41);
+insert into t (id,a) values (845,42);
+insert into t (id,a) values (845,43);
+insert into t (id,a) values (845,44);
+insert into t (id,a) values (845,45);
+insert into t (id,a) values (845,46);
+insert into t (id,a) values (845,47);
+insert into t (id,a) values (845,48);
+insert into t (id,a) values (845,49);
+insert into t (id,a) values (845,50);
+insert into t (id,a) values (845,51);
+insert into t (id,a) values (845,52);
+insert into t (id,a) values (845,53);
+insert into t (id,a) values (845,54);
+insert into t (id,a) values (845,55);
+insert into t (id,a) values (845,56);
+insert into t (id,a) values (845,57);
+insert into t (id,a) values (845,58);
+insert into t (id,a) values (845,59);
+insert into t (id,a) values (845,60);
+insert into t (id,a) values (845,61);
+insert into t (id,a) values (845,62);
+insert into t (id,a) values (845,63);
+insert into t (id,a) values (845,64);
+insert into t (id,a) values (845,65);
+insert into t (id,a) values (845,66);
+insert into t (id,a) values (845,67);
+insert into t (id,a) values (845,68);
+insert into t (id,a) values (845,69);
+insert into t (id,a) values (845,70);
+insert into t (id,a) values (845,71);
+insert into t (id,a) values (845,72);
+insert into t (id,a) values (845,73);
+insert into t (id,a) values (845,74);
+insert into t (id,a) values (845,75);
+insert into t (id,a) values (845,76);
+insert into t (id,a) values (845,77);
+insert into t (id,a) values (845,78);
+insert into t (id,a) values (845,79);
+insert into t (id,a) values (845,80);
+insert into t (id,a) values (845,81);
+insert into t (id,a) values (845,82);
+insert into t (id,a) values (845,83);
+insert into t (id,a) values (845,84);
+insert into t (id,a) values (845,85);
+insert into t (id,a) values (845,86);
+insert into t (id,a) values (845,87);
+insert into t (id,a) values (845,88);
+insert into t (id,a) values (845,89);
+insert into t (id,a) values (845,90);
+insert into t (id,a) values (845,91);
+insert into t (id,a) values (845,92);
+insert into t (id,a) values (845,93);
+insert into t (id,a) values (845,94);
+insert into t (id,a) values (845,95);
+insert into t (id,a) values (845,96);
+insert into t (id,a) values (845,97);
+insert into t (id,a) values (845,98);
+insert into t (id,a) values (845,99);
+insert into t (id,a) values (846,0);
+insert into t (id,a) values (846,1);
+insert into t (id,a) values (846,2);
+insert into t (id,a) values (846,3);
+insert into t (id,a) values (846,4);
+insert into t (id,a) values (846,5);
+insert into t (id,a) values (846,6);
+insert into t (id,a) values (846,7);
+insert into t (id,a) values (846,8);
+insert into t (id,a) values (846,9);
+insert into t (id,a) values (846,10);
+insert into t (id,a) values (846,11);
+insert into t (id,a) values (846,12);
+insert into t (id,a) values (846,13);
+insert into t (id,a) values (846,14);
+insert into t (id,a) values (846,15);
+insert into t (id,a) values (846,16);
+insert into t (id,a) values (846,17);
+insert into t (id,a) values (846,18);
+insert into t (id,a) values (846,19);
+insert into t (id,a) values (846,20);
+insert into t (id,a) values (846,21);
+insert into t (id,a) values (846,22);
+insert into t (id,a) values (846,23);
+insert into t (id,a) values (846,24);
+insert into t (id,a) values (846,25);
+insert into t (id,a) values (846,26);
+insert into t (id,a) values (846,27);
+insert into t (id,a) values (846,28);
+insert into t (id,a) values (846,29);
+insert into t (id,a) values (846,30);
+insert into t (id,a) values (846,31);
+insert into t (id,a) values (846,32);
+insert into t (id,a) values (846,33);
+insert into t (id,a) values (846,34);
+insert into t (id,a) values (846,35);
+insert into t (id,a) values (846,36);
+insert into t (id,a) values (846,37);
+insert into t (id,a) values (846,38);
+insert into t (id,a) values (846,39);
+insert into t (id,a) values (846,40);
+insert into t (id,a) values (846,41);
+insert into t (id,a) values (846,42);
+insert into t (id,a) values (846,43);
+insert into t (id,a) values (846,44);
+insert into t (id,a) values (846,45);
+insert into t (id,a) values (846,46);
+insert into t (id,a) values (846,47);
+insert into t (id,a) values (846,48);
+insert into t (id,a) values (846,49);
+insert into t (id,a) values (846,50);
+insert into t (id,a) values (846,51);
+insert into t (id,a) values (846,52);
+insert into t (id,a) values (846,53);
+insert into t (id,a) values (846,54);
+insert into t (id,a) values (846,55);
+insert into t (id,a) values (846,56);
+insert into t (id,a) values (846,57);
+insert into t (id,a) values (846,58);
+insert into t (id,a) values (846,59);
+insert into t (id,a) values (846,60);
+insert into t (id,a) values (846,61);
+insert into t (id,a) values (846,62);
+insert into t (id,a) values (846,63);
+insert into t (id,a) values (846,64);
+insert into t (id,a) values (846,65);
+insert into t (id,a) values (846,66);
+insert into t (id,a) values (846,67);
+insert into t (id,a) values (846,68);
+insert into t (id,a) values (846,69);
+insert into t (id,a) values (846,70);
+insert into t (id,a) values (846,71);
+insert into t (id,a) values (846,72);
+insert into t (id,a) values (846,73);
+insert into t (id,a) values (846,74);
+insert into t (id,a) values (846,75);
+insert into t (id,a) values (846,76);
+insert into t (id,a) values (846,77);
+insert into t (id,a) values (846,78);
+insert into t (id,a) values (846,79);
+insert into t (id,a) values (846,80);
+insert into t (id,a) values (846,81);
+insert into t (id,a) values (846,82);
+insert into t (id,a) values (846,83);
+insert into t (id,a) values (846,84);
+insert into t (id,a) values (846,85);
+insert into t (id,a) values (846,86);
+insert into t (id,a) values (846,87);
+insert into t (id,a) values (846,88);
+insert into t (id,a) values (846,89);
+insert into t (id,a) values (846,90);
+insert into t (id,a) values (846,91);
+insert into t (id,a) values (846,92);
+insert into t (id,a) values (846,93);
+insert into t (id,a) values (846,94);
+insert into t (id,a) values (846,95);
+insert into t (id,a) values (846,96);
+insert into t (id,a) values (846,97);
+insert into t (id,a) values (846,98);
+insert into t (id,a) values (846,99);
+insert into t (id,a) values (847,0);
+insert into t (id,a) values (847,1);
+insert into t (id,a) values (847,2);
+insert into t (id,a) values (847,3);
+insert into t (id,a) values (847,4);
+insert into t (id,a) values (847,5);
+insert into t (id,a) values (847,6);
+insert into t (id,a) values (847,7);
+insert into t (id,a) values (847,8);
+insert into t (id,a) values (847,9);
+insert into t (id,a) values (847,10);
+insert into t (id,a) values (847,11);
+insert into t (id,a) values (847,12);
+insert into t (id,a) values (847,13);
+insert into t (id,a) values (847,14);
+insert into t (id,a) values (847,15);
+insert into t (id,a) values (847,16);
+insert into t (id,a) values (847,17);
+insert into t (id,a) values (847,18);
+insert into t (id,a) values (847,19);
+insert into t (id,a) values (847,20);
+insert into t (id,a) values (847,21);
+insert into t (id,a) values (847,22);
+insert into t (id,a) values (847,23);
+insert into t (id,a) values (847,24);
+insert into t (id,a) values (847,25);
+insert into t (id,a) values (847,26);
+insert into t (id,a) values (847,27);
+insert into t (id,a) values (847,28);
+insert into t (id,a) values (847,29);
+insert into t (id,a) values (847,30);
+insert into t (id,a) values (847,31);
+insert into t (id,a) values (847,32);
+insert into t (id,a) values (847,33);
+insert into t (id,a) values (847,34);
+insert into t (id,a) values (847,35);
+insert into t (id,a) values (847,36);
+insert into t (id,a) values (847,37);
+insert into t (id,a) values (847,38);
+insert into t (id,a) values (847,39);
+insert into t (id,a) values (847,40);
+insert into t (id,a) values (847,41);
+insert into t (id,a) values (847,42);
+insert into t (id,a) values (847,43);
+insert into t (id,a) values (847,44);
+insert into t (id,a) values (847,45);
+insert into t (id,a) values (847,46);
+insert into t (id,a) values (847,47);
+insert into t (id,a) values (847,48);
+insert into t (id,a) values (847,49);
+insert into t (id,a) values (847,50);
+insert into t (id,a) values (847,51);
+insert into t (id,a) values (847,52);
+insert into t (id,a) values (847,53);
+insert into t (id,a) values (847,54);
+insert into t (id,a) values (847,55);
+insert into t (id,a) values (847,56);
+insert into t (id,a) values (847,57);
+insert into t (id,a) values (847,58);
+insert into t (id,a) values (847,59);
+insert into t (id,a) values (847,60);
+insert into t (id,a) values (847,61);
+insert into t (id,a) values (847,62);
+insert into t (id,a) values (847,63);
+insert into t (id,a) values (847,64);
+insert into t (id,a) values (847,65);
+insert into t (id,a) values (847,66);
+insert into t (id,a) values (847,67);
+insert into t (id,a) values (847,68);
+insert into t (id,a) values (847,69);
+insert into t (id,a) values (847,70);
+insert into t (id,a) values (847,71);
+insert into t (id,a) values (847,72);
+insert into t (id,a) values (847,73);
+insert into t (id,a) values (847,74);
+insert into t (id,a) values (847,75);
+insert into t (id,a) values (847,76);
+insert into t (id,a) values (847,77);
+insert into t (id,a) values (847,78);
+insert into t (id,a) values (847,79);
+insert into t (id,a) values (847,80);
+insert into t (id,a) values (847,81);
+insert into t (id,a) values (847,82);
+insert into t (id,a) values (847,83);
+insert into t (id,a) values (847,84);
+insert into t (id,a) values (847,85);
+insert into t (id,a) values (847,86);
+insert into t (id,a) values (847,87);
+insert into t (id,a) values (847,88);
+insert into t (id,a) values (847,89);
+insert into t (id,a) values (847,90);
+insert into t (id,a) values (847,91);
+insert into t (id,a) values (847,92);
+insert into t (id,a) values (847,93);
+insert into t (id,a) values (847,94);
+insert into t (id,a) values (847,95);
+insert into t (id,a) values (847,96);
+insert into t (id,a) values (847,97);
+insert into t (id,a) values (847,98);
+insert into t (id,a) values (847,99);
+insert into t (id,a) values (848,0);
+insert into t (id,a) values (848,1);
+insert into t (id,a) values (848,2);
+insert into t (id,a) values (848,3);
+insert into t (id,a) values (848,4);
+insert into t (id,a) values (848,5);
+insert into t (id,a) values (848,6);
+insert into t (id,a) values (848,7);
+insert into t (id,a) values (848,8);
+insert into t (id,a) values (848,9);
+insert into t (id,a) values (848,10);
+insert into t (id,a) values (848,11);
+insert into t (id,a) values (848,12);
+insert into t (id,a) values (848,13);
+insert into t (id,a) values (848,14);
+insert into t (id,a) values (848,15);
+insert into t (id,a) values (848,16);
+insert into t (id,a) values (848,17);
+insert into t (id,a) values (848,18);
+insert into t (id,a) values (848,19);
+insert into t (id,a) values (848,20);
+insert into t (id,a) values (848,21);
+insert into t (id,a) values (848,22);
+insert into t (id,a) values (848,23);
+insert into t (id,a) values (848,24);
+insert into t (id,a) values (848,25);
+insert into t (id,a) values (848,26);
+insert into t (id,a) values (848,27);
+insert into t (id,a) values (848,28);
+insert into t (id,a) values (848,29);
+insert into t (id,a) values (848,30);
+insert into t (id,a) values (848,31);
+insert into t (id,a) values (848,32);
+insert into t (id,a) values (848,33);
+insert into t (id,a) values (848,34);
+insert into t (id,a) values (848,35);
+insert into t (id,a) values (848,36);
+insert into t (id,a) values (848,37);
+insert into t (id,a) values (848,38);
+insert into t (id,a) values (848,39);
+insert into t (id,a) values (848,40);
+insert into t (id,a) values (848,41);
+insert into t (id,a) values (848,42);
+insert into t (id,a) values (848,43);
+insert into t (id,a) values (848,44);
+insert into t (id,a) values (848,45);
+insert into t (id,a) values (848,46);
+insert into t (id,a) values (848,47);
+insert into t (id,a) values (848,48);
+insert into t (id,a) values (848,49);
+insert into t (id,a) values (848,50);
+insert into t (id,a) values (848,51);
+insert into t (id,a) values (848,52);
+insert into t (id,a) values (848,53);
+insert into t (id,a) values (848,54);
+insert into t (id,a) values (848,55);
+insert into t (id,a) values (848,56);
+insert into t (id,a) values (848,57);
+insert into t (id,a) values (848,58);
+insert into t (id,a) values (848,59);
+insert into t (id,a) values (848,60);
+insert into t (id,a) values (848,61);
+insert into t (id,a) values (848,62);
+insert into t (id,a) values (848,63);
+insert into t (id,a) values (848,64);
+insert into t (id,a) values (848,65);
+insert into t (id,a) values (848,66);
+insert into t (id,a) values (848,67);
+insert into t (id,a) values (848,68);
+insert into t (id,a) values (848,69);
+insert into t (id,a) values (848,70);
+insert into t (id,a) values (848,71);
+insert into t (id,a) values (848,72);
+insert into t (id,a) values (848,73);
+insert into t (id,a) values (848,74);
+insert into t (id,a) values (848,75);
+insert into t (id,a) values (848,76);
+insert into t (id,a) values (848,77);
+insert into t (id,a) values (848,78);
+insert into t (id,a) values (848,79);
+insert into t (id,a) values (848,80);
+insert into t (id,a) values (848,81);
+insert into t (id,a) values (848,82);
+insert into t (id,a) values (848,83);
+insert into t (id,a) values (848,84);
+insert into t (id,a) values (848,85);
+insert into t (id,a) values (848,86);
+insert into t (id,a) values (848,87);
+insert into t (id,a) values (848,88);
+insert into t (id,a) values (848,89);
+insert into t (id,a) values (848,90);
+insert into t (id,a) values (848,91);
+insert into t (id,a) values (848,92);
+insert into t (id,a) values (848,93);
+insert into t (id,a) values (848,94);
+insert into t (id,a) values (848,95);
+insert into t (id,a) values (848,96);
+insert into t (id,a) values (848,97);
+insert into t (id,a) values (848,98);
+insert into t (id,a) values (848,99);
+insert into t (id,a) values (849,0);
+insert into t (id,a) values (849,1);
+insert into t (id,a) values (849,2);
+insert into t (id,a) values (849,3);
+insert into t (id,a) values (849,4);
+insert into t (id,a) values (849,5);
+insert into t (id,a) values (849,6);
+insert into t (id,a) values (849,7);
+insert into t (id,a) values (849,8);
+insert into t (id,a) values (849,9);
+insert into t (id,a) values (849,10);
+insert into t (id,a) values (849,11);
+insert into t (id,a) values (849,12);
+insert into t (id,a) values (849,13);
+insert into t (id,a) values (849,14);
+insert into t (id,a) values (849,15);
+insert into t (id,a) values (849,16);
+insert into t (id,a) values (849,17);
+insert into t (id,a) values (849,18);
+insert into t (id,a) values (849,19);
+insert into t (id,a) values (849,20);
+insert into t (id,a) values (849,21);
+insert into t (id,a) values (849,22);
+insert into t (id,a) values (849,23);
+insert into t (id,a) values (849,24);
+insert into t (id,a) values (849,25);
+insert into t (id,a) values (849,26);
+insert into t (id,a) values (849,27);
+insert into t (id,a) values (849,28);
+insert into t (id,a) values (849,29);
+insert into t (id,a) values (849,30);
+insert into t (id,a) values (849,31);
+insert into t (id,a) values (849,32);
+insert into t (id,a) values (849,33);
+insert into t (id,a) values (849,34);
+insert into t (id,a) values (849,35);
+insert into t (id,a) values (849,36);
+insert into t (id,a) values (849,37);
+insert into t (id,a) values (849,38);
+insert into t (id,a) values (849,39);
+insert into t (id,a) values (849,40);
+insert into t (id,a) values (849,41);
+insert into t (id,a) values (849,42);
+insert into t (id,a) values (849,43);
+insert into t (id,a) values (849,44);
+insert into t (id,a) values (849,45);
+insert into t (id,a) values (849,46);
+insert into t (id,a) values (849,47);
+insert into t (id,a) values (849,48);
+insert into t (id,a) values (849,49);
+insert into t (id,a) values (849,50);
+insert into t (id,a) values (849,51);
+insert into t (id,a) values (849,52);
+insert into t (id,a) values (849,53);
+insert into t (id,a) values (849,54);
+insert into t (id,a) values (849,55);
+insert into t (id,a) values (849,56);
+insert into t (id,a) values (849,57);
+insert into t (id,a) values (849,58);
+insert into t (id,a) values (849,59);
+insert into t (id,a) values (849,60);
+insert into t (id,a) values (849,61);
+insert into t (id,a) values (849,62);
+insert into t (id,a) values (849,63);
+insert into t (id,a) values (849,64);
+insert into t (id,a) values (849,65);
+insert into t (id,a) values (849,66);
+insert into t (id,a) values (849,67);
+insert into t (id,a) values (849,68);
+insert into t (id,a) values (849,69);
+insert into t (id,a) values (849,70);
+insert into t (id,a) values (849,71);
+insert into t (id,a) values (849,72);
+insert into t (id,a) values (849,73);
+insert into t (id,a) values (849,74);
+insert into t (id,a) values (849,75);
+insert into t (id,a) values (849,76);
+insert into t (id,a) values (849,77);
+insert into t (id,a) values (849,78);
+insert into t (id,a) values (849,79);
+insert into t (id,a) values (849,80);
+insert into t (id,a) values (849,81);
+insert into t (id,a) values (849,82);
+insert into t (id,a) values (849,83);
+insert into t (id,a) values (849,84);
+insert into t (id,a) values (849,85);
+insert into t (id,a) values (849,86);
+insert into t (id,a) values (849,87);
+insert into t (id,a) values (849,88);
+insert into t (id,a) values (849,89);
+insert into t (id,a) values (849,90);
+insert into t (id,a) values (849,91);
+insert into t (id,a) values (849,92);
+insert into t (id,a) values (849,93);
+insert into t (id,a) values (849,94);
+insert into t (id,a) values (849,95);
+insert into t (id,a) values (849,96);
+insert into t (id,a) values (849,97);
+insert into t (id,a) values (849,98);
+insert into t (id,a) values (849,99);
+insert into t (id,a) values (850,0);
+insert into t (id,a) values (850,1);
+insert into t (id,a) values (850,2);
+insert into t (id,a) values (850,3);
+insert into t (id,a) values (850,4);
+insert into t (id,a) values (850,5);
+insert into t (id,a) values (850,6);
+insert into t (id,a) values (850,7);
+insert into t (id,a) values (850,8);
+insert into t (id,a) values (850,9);
+insert into t (id,a) values (850,10);
+insert into t (id,a) values (850,11);
+insert into t (id,a) values (850,12);
+insert into t (id,a) values (850,13);
+insert into t (id,a) values (850,14);
+insert into t (id,a) values (850,15);
+insert into t (id,a) values (850,16);
+insert into t (id,a) values (850,17);
+insert into t (id,a) values (850,18);
+insert into t (id,a) values (850,19);
+insert into t (id,a) values (850,20);
+insert into t (id,a) values (850,21);
+insert into t (id,a) values (850,22);
+insert into t (id,a) values (850,23);
+insert into t (id,a) values (850,24);
+insert into t (id,a) values (850,25);
+insert into t (id,a) values (850,26);
+insert into t (id,a) values (850,27);
+insert into t (id,a) values (850,28);
+insert into t (id,a) values (850,29);
+insert into t (id,a) values (850,30);
+insert into t (id,a) values (850,31);
+insert into t (id,a) values (850,32);
+insert into t (id,a) values (850,33);
+insert into t (id,a) values (850,34);
+insert into t (id,a) values (850,35);
+insert into t (id,a) values (850,36);
+insert into t (id,a) values (850,37);
+insert into t (id,a) values (850,38);
+insert into t (id,a) values (850,39);
+insert into t (id,a) values (850,40);
+insert into t (id,a) values (850,41);
+insert into t (id,a) values (850,42);
+insert into t (id,a) values (850,43);
+insert into t (id,a) values (850,44);
+insert into t (id,a) values (850,45);
+insert into t (id,a) values (850,46);
+insert into t (id,a) values (850,47);
+insert into t (id,a) values (850,48);
+insert into t (id,a) values (850,49);
+insert into t (id,a) values (850,50);
+insert into t (id,a) values (850,51);
+insert into t (id,a) values (850,52);
+insert into t (id,a) values (850,53);
+insert into t (id,a) values (850,54);
+insert into t (id,a) values (850,55);
+insert into t (id,a) values (850,56);
+insert into t (id,a) values (850,57);
+insert into t (id,a) values (850,58);
+insert into t (id,a) values (850,59);
+insert into t (id,a) values (850,60);
+insert into t (id,a) values (850,61);
+insert into t (id,a) values (850,62);
+insert into t (id,a) values (850,63);
+insert into t (id,a) values (850,64);
+insert into t (id,a) values (850,65);
+insert into t (id,a) values (850,66);
+insert into t (id,a) values (850,67);
+insert into t (id,a) values (850,68);
+insert into t (id,a) values (850,69);
+insert into t (id,a) values (850,70);
+insert into t (id,a) values (850,71);
+insert into t (id,a) values (850,72);
+insert into t (id,a) values (850,73);
+insert into t (id,a) values (850,74);
+insert into t (id,a) values (850,75);
+insert into t (id,a) values (850,76);
+insert into t (id,a) values (850,77);
+insert into t (id,a) values (850,78);
+insert into t (id,a) values (850,79);
+insert into t (id,a) values (850,80);
+insert into t (id,a) values (850,81);
+insert into t (id,a) values (850,82);
+insert into t (id,a) values (850,83);
+insert into t (id,a) values (850,84);
+insert into t (id,a) values (850,85);
+insert into t (id,a) values (850,86);
+insert into t (id,a) values (850,87);
+insert into t (id,a) values (850,88);
+insert into t (id,a) values (850,89);
+insert into t (id,a) values (850,90);
+insert into t (id,a) values (850,91);
+insert into t (id,a) values (850,92);
+insert into t (id,a) values (850,93);
+insert into t (id,a) values (850,94);
+insert into t (id,a) values (850,95);
+insert into t (id,a) values (850,96);
+insert into t (id,a) values (850,97);
+insert into t (id,a) values (850,98);
+insert into t (id,a) values (850,99);
+insert into t (id,a) values (851,0);
+insert into t (id,a) values (851,1);
+insert into t (id,a) values (851,2);
+insert into t (id,a) values (851,3);
+insert into t (id,a) values (851,4);
+insert into t (id,a) values (851,5);
+insert into t (id,a) values (851,6);
+insert into t (id,a) values (851,7);
+insert into t (id,a) values (851,8);
+insert into t (id,a) values (851,9);
+insert into t (id,a) values (851,10);
+insert into t (id,a) values (851,11);
+insert into t (id,a) values (851,12);
+insert into t (id,a) values (851,13);
+insert into t (id,a) values (851,14);
+insert into t (id,a) values (851,15);
+insert into t (id,a) values (851,16);
+insert into t (id,a) values (851,17);
+insert into t (id,a) values (851,18);
+insert into t (id,a) values (851,19);
+insert into t (id,a) values (851,20);
+insert into t (id,a) values (851,21);
+insert into t (id,a) values (851,22);
+insert into t (id,a) values (851,23);
+insert into t (id,a) values (851,24);
+insert into t (id,a) values (851,25);
+insert into t (id,a) values (851,26);
+insert into t (id,a) values (851,27);
+insert into t (id,a) values (851,28);
+insert into t (id,a) values (851,29);
+insert into t (id,a) values (851,30);
+insert into t (id,a) values (851,31);
+insert into t (id,a) values (851,32);
+insert into t (id,a) values (851,33);
+insert into t (id,a) values (851,34);
+insert into t (id,a) values (851,35);
+insert into t (id,a) values (851,36);
+insert into t (id,a) values (851,37);
+insert into t (id,a) values (851,38);
+insert into t (id,a) values (851,39);
+insert into t (id,a) values (851,40);
+insert into t (id,a) values (851,41);
+insert into t (id,a) values (851,42);
+insert into t (id,a) values (851,43);
+insert into t (id,a) values (851,44);
+insert into t (id,a) values (851,45);
+insert into t (id,a) values (851,46);
+insert into t (id,a) values (851,47);
+insert into t (id,a) values (851,48);
+insert into t (id,a) values (851,49);
+insert into t (id,a) values (851,50);
+insert into t (id,a) values (851,51);
+insert into t (id,a) values (851,52);
+insert into t (id,a) values (851,53);
+insert into t (id,a) values (851,54);
+insert into t (id,a) values (851,55);
+insert into t (id,a) values (851,56);
+insert into t (id,a) values (851,57);
+insert into t (id,a) values (851,58);
+insert into t (id,a) values (851,59);
+insert into t (id,a) values (851,60);
+insert into t (id,a) values (851,61);
+insert into t (id,a) values (851,62);
+insert into t (id,a) values (851,63);
+insert into t (id,a) values (851,64);
+insert into t (id,a) values (851,65);
+insert into t (id,a) values (851,66);
+insert into t (id,a) values (851,67);
+insert into t (id,a) values (851,68);
+insert into t (id,a) values (851,69);
+insert into t (id,a) values (851,70);
+insert into t (id,a) values (851,71);
+insert into t (id,a) values (851,72);
+insert into t (id,a) values (851,73);
+insert into t (id,a) values (851,74);
+insert into t (id,a) values (851,75);
+insert into t (id,a) values (851,76);
+insert into t (id,a) values (851,77);
+insert into t (id,a) values (851,78);
+insert into t (id,a) values (851,79);
+insert into t (id,a) values (851,80);
+insert into t (id,a) values (851,81);
+insert into t (id,a) values (851,82);
+insert into t (id,a) values (851,83);
+insert into t (id,a) values (851,84);
+insert into t (id,a) values (851,85);
+insert into t (id,a) values (851,86);
+insert into t (id,a) values (851,87);
+insert into t (id,a) values (851,88);
+insert into t (id,a) values (851,89);
+insert into t (id,a) values (851,90);
+insert into t (id,a) values (851,91);
+insert into t (id,a) values (851,92);
+insert into t (id,a) values (851,93);
+insert into t (id,a) values (851,94);
+insert into t (id,a) values (851,95);
+insert into t (id,a) values (851,96);
+insert into t (id,a) values (851,97);
+insert into t (id,a) values (851,98);
+insert into t (id,a) values (851,99);
+insert into t (id,a) values (852,0);
+insert into t (id,a) values (852,1);
+insert into t (id,a) values (852,2);
+insert into t (id,a) values (852,3);
+insert into t (id,a) values (852,4);
+insert into t (id,a) values (852,5);
+insert into t (id,a) values (852,6);
+insert into t (id,a) values (852,7);
+insert into t (id,a) values (852,8);
+insert into t (id,a) values (852,9);
+insert into t (id,a) values (852,10);
+insert into t (id,a) values (852,11);
+insert into t (id,a) values (852,12);
+insert into t (id,a) values (852,13);
+insert into t (id,a) values (852,14);
+insert into t (id,a) values (852,15);
+insert into t (id,a) values (852,16);
+insert into t (id,a) values (852,17);
+insert into t (id,a) values (852,18);
+insert into t (id,a) values (852,19);
+insert into t (id,a) values (852,20);
+insert into t (id,a) values (852,21);
+insert into t (id,a) values (852,22);
+insert into t (id,a) values (852,23);
+insert into t (id,a) values (852,24);
+insert into t (id,a) values (852,25);
+insert into t (id,a) values (852,26);
+insert into t (id,a) values (852,27);
+insert into t (id,a) values (852,28);
+insert into t (id,a) values (852,29);
+insert into t (id,a) values (852,30);
+insert into t (id,a) values (852,31);
+insert into t (id,a) values (852,32);
+insert into t (id,a) values (852,33);
+insert into t (id,a) values (852,34);
+insert into t (id,a) values (852,35);
+insert into t (id,a) values (852,36);
+insert into t (id,a) values (852,37);
+insert into t (id,a) values (852,38);
+insert into t (id,a) values (852,39);
+insert into t (id,a) values (852,40);
+insert into t (id,a) values (852,41);
+insert into t (id,a) values (852,42);
+insert into t (id,a) values (852,43);
+insert into t (id,a) values (852,44);
+insert into t (id,a) values (852,45);
+insert into t (id,a) values (852,46);
+insert into t (id,a) values (852,47);
+insert into t (id,a) values (852,48);
+insert into t (id,a) values (852,49);
+insert into t (id,a) values (852,50);
+insert into t (id,a) values (852,51);
+insert into t (id,a) values (852,52);
+insert into t (id,a) values (852,53);
+insert into t (id,a) values (852,54);
+insert into t (id,a) values (852,55);
+insert into t (id,a) values (852,56);
+insert into t (id,a) values (852,57);
+insert into t (id,a) values (852,58);
+insert into t (id,a) values (852,59);
+insert into t (id,a) values (852,60);
+insert into t (id,a) values (852,61);
+insert into t (id,a) values (852,62);
+insert into t (id,a) values (852,63);
+insert into t (id,a) values (852,64);
+insert into t (id,a) values (852,65);
+insert into t (id,a) values (852,66);
+insert into t (id,a) values (852,67);
+insert into t (id,a) values (852,68);
+insert into t (id,a) values (852,69);
+insert into t (id,a) values (852,70);
+insert into t (id,a) values (852,71);
+insert into t (id,a) values (852,72);
+insert into t (id,a) values (852,73);
+insert into t (id,a) values (852,74);
+insert into t (id,a) values (852,75);
+insert into t (id,a) values (852,76);
+insert into t (id,a) values (852,77);
+insert into t (id,a) values (852,78);
+insert into t (id,a) values (852,79);
+insert into t (id,a) values (852,80);
+insert into t (id,a) values (852,81);
+insert into t (id,a) values (852,82);
+insert into t (id,a) values (852,83);
+insert into t (id,a) values (852,84);
+insert into t (id,a) values (852,85);
+insert into t (id,a) values (852,86);
+insert into t (id,a) values (852,87);
+insert into t (id,a) values (852,88);
+insert into t (id,a) values (852,89);
+insert into t (id,a) values (852,90);
+insert into t (id,a) values (852,91);
+insert into t (id,a) values (852,92);
+insert into t (id,a) values (852,93);
+insert into t (id,a) values (852,94);
+insert into t (id,a) values (852,95);
+insert into t (id,a) values (852,96);
+insert into t (id,a) values (852,97);
+insert into t (id,a) values (852,98);
+insert into t (id,a) values (852,99);
+insert into t (id,a) values (853,0);
+insert into t (id,a) values (853,1);
+insert into t (id,a) values (853,2);
+insert into t (id,a) values (853,3);
+insert into t (id,a) values (853,4);
+insert into t (id,a) values (853,5);
+insert into t (id,a) values (853,6);
+insert into t (id,a) values (853,7);
+insert into t (id,a) values (853,8);
+insert into t (id,a) values (853,9);
+insert into t (id,a) values (853,10);
+insert into t (id,a) values (853,11);
+insert into t (id,a) values (853,12);
+insert into t (id,a) values (853,13);
+insert into t (id,a) values (853,14);
+insert into t (id,a) values (853,15);
+insert into t (id,a) values (853,16);
+insert into t (id,a) values (853,17);
+insert into t (id,a) values (853,18);
+insert into t (id,a) values (853,19);
+insert into t (id,a) values (853,20);
+insert into t (id,a) values (853,21);
+insert into t (id,a) values (853,22);
+insert into t (id,a) values (853,23);
+insert into t (id,a) values (853,24);
+insert into t (id,a) values (853,25);
+insert into t (id,a) values (853,26);
+insert into t (id,a) values (853,27);
+insert into t (id,a) values (853,28);
+insert into t (id,a) values (853,29);
+insert into t (id,a) values (853,30);
+insert into t (id,a) values (853,31);
+insert into t (id,a) values (853,32);
+insert into t (id,a) values (853,33);
+insert into t (id,a) values (853,34);
+insert into t (id,a) values (853,35);
+insert into t (id,a) values (853,36);
+insert into t (id,a) values (853,37);
+insert into t (id,a) values (853,38);
+insert into t (id,a) values (853,39);
+insert into t (id,a) values (853,40);
+insert into t (id,a) values (853,41);
+insert into t (id,a) values (853,42);
+insert into t (id,a) values (853,43);
+insert into t (id,a) values (853,44);
+insert into t (id,a) values (853,45);
+insert into t (id,a) values (853,46);
+insert into t (id,a) values (853,47);
+insert into t (id,a) values (853,48);
+insert into t (id,a) values (853,49);
+insert into t (id,a) values (853,50);
+insert into t (id,a) values (853,51);
+insert into t (id,a) values (853,52);
+insert into t (id,a) values (853,53);
+insert into t (id,a) values (853,54);
+insert into t (id,a) values (853,55);
+insert into t (id,a) values (853,56);
+insert into t (id,a) values (853,57);
+insert into t (id,a) values (853,58);
+insert into t (id,a) values (853,59);
+insert into t (id,a) values (853,60);
+insert into t (id,a) values (853,61);
+insert into t (id,a) values (853,62);
+insert into t (id,a) values (853,63);
+insert into t (id,a) values (853,64);
+insert into t (id,a) values (853,65);
+insert into t (id,a) values (853,66);
+insert into t (id,a) values (853,67);
+insert into t (id,a) values (853,68);
+insert into t (id,a) values (853,69);
+insert into t (id,a) values (853,70);
+insert into t (id,a) values (853,71);
+insert into t (id,a) values (853,72);
+insert into t (id,a) values (853,73);
+insert into t (id,a) values (853,74);
+insert into t (id,a) values (853,75);
+insert into t (id,a) values (853,76);
+insert into t (id,a) values (853,77);
+insert into t (id,a) values (853,78);
+insert into t (id,a) values (853,79);
+insert into t (id,a) values (853,80);
+insert into t (id,a) values (853,81);
+insert into t (id,a) values (853,82);
+insert into t (id,a) values (853,83);
+insert into t (id,a) values (853,84);
+insert into t (id,a) values (853,85);
+insert into t (id,a) values (853,86);
+insert into t (id,a) values (853,87);
+insert into t (id,a) values (853,88);
+insert into t (id,a) values (853,89);
+insert into t (id,a) values (853,90);
+insert into t (id,a) values (853,91);
+insert into t (id,a) values (853,92);
+insert into t (id,a) values (853,93);
+insert into t (id,a) values (853,94);
+insert into t (id,a) values (853,95);
+insert into t (id,a) values (853,96);
+insert into t (id,a) values (853,97);
+insert into t (id,a) values (853,98);
+insert into t (id,a) values (853,99);
+insert into t (id,a) values (854,0);
+insert into t (id,a) values (854,1);
+insert into t (id,a) values (854,2);
+insert into t (id,a) values (854,3);
+insert into t (id,a) values (854,4);
+insert into t (id,a) values (854,5);
+insert into t (id,a) values (854,6);
+insert into t (id,a) values (854,7);
+insert into t (id,a) values (854,8);
+insert into t (id,a) values (854,9);
+insert into t (id,a) values (854,10);
+insert into t (id,a) values (854,11);
+insert into t (id,a) values (854,12);
+insert into t (id,a) values (854,13);
+insert into t (id,a) values (854,14);
+insert into t (id,a) values (854,15);
+insert into t (id,a) values (854,16);
+insert into t (id,a) values (854,17);
+insert into t (id,a) values (854,18);
+insert into t (id,a) values (854,19);
+insert into t (id,a) values (854,20);
+insert into t (id,a) values (854,21);
+insert into t (id,a) values (854,22);
+insert into t (id,a) values (854,23);
+insert into t (id,a) values (854,24);
+insert into t (id,a) values (854,25);
+insert into t (id,a) values (854,26);
+insert into t (id,a) values (854,27);
+insert into t (id,a) values (854,28);
+insert into t (id,a) values (854,29);
+insert into t (id,a) values (854,30);
+insert into t (id,a) values (854,31);
+insert into t (id,a) values (854,32);
+insert into t (id,a) values (854,33);
+insert into t (id,a) values (854,34);
+insert into t (id,a) values (854,35);
+insert into t (id,a) values (854,36);
+insert into t (id,a) values (854,37);
+insert into t (id,a) values (854,38);
+insert into t (id,a) values (854,39);
+insert into t (id,a) values (854,40);
+insert into t (id,a) values (854,41);
+insert into t (id,a) values (854,42);
+insert into t (id,a) values (854,43);
+insert into t (id,a) values (854,44);
+insert into t (id,a) values (854,45);
+insert into t (id,a) values (854,46);
+insert into t (id,a) values (854,47);
+insert into t (id,a) values (854,48);
+insert into t (id,a) values (854,49);
+insert into t (id,a) values (854,50);
+insert into t (id,a) values (854,51);
+insert into t (id,a) values (854,52);
+insert into t (id,a) values (854,53);
+insert into t (id,a) values (854,54);
+insert into t (id,a) values (854,55);
+insert into t (id,a) values (854,56);
+insert into t (id,a) values (854,57);
+insert into t (id,a) values (854,58);
+insert into t (id,a) values (854,59);
+insert into t (id,a) values (854,60);
+insert into t (id,a) values (854,61);
+insert into t (id,a) values (854,62);
+insert into t (id,a) values (854,63);
+insert into t (id,a) values (854,64);
+insert into t (id,a) values (854,65);
+insert into t (id,a) values (854,66);
+insert into t (id,a) values (854,67);
+insert into t (id,a) values (854,68);
+insert into t (id,a) values (854,69);
+insert into t (id,a) values (854,70);
+insert into t (id,a) values (854,71);
+insert into t (id,a) values (854,72);
+insert into t (id,a) values (854,73);
+insert into t (id,a) values (854,74);
+insert into t (id,a) values (854,75);
+insert into t (id,a) values (854,76);
+insert into t (id,a) values (854,77);
+insert into t (id,a) values (854,78);
+insert into t (id,a) values (854,79);
+insert into t (id,a) values (854,80);
+insert into t (id,a) values (854,81);
+insert into t (id,a) values (854,82);
+insert into t (id,a) values (854,83);
+insert into t (id,a) values (854,84);
+insert into t (id,a) values (854,85);
+insert into t (id,a) values (854,86);
+insert into t (id,a) values (854,87);
+insert into t (id,a) values (854,88);
+insert into t (id,a) values (854,89);
+insert into t (id,a) values (854,90);
+insert into t (id,a) values (854,91);
+insert into t (id,a) values (854,92);
+insert into t (id,a) values (854,93);
+insert into t (id,a) values (854,94);
+insert into t (id,a) values (854,95);
+insert into t (id,a) values (854,96);
+insert into t (id,a) values (854,97);
+insert into t (id,a) values (854,98);
+insert into t (id,a) values (854,99);
+insert into t (id,a) values (855,0);
+insert into t (id,a) values (855,1);
+insert into t (id,a) values (855,2);
+insert into t (id,a) values (855,3);
+insert into t (id,a) values (855,4);
+insert into t (id,a) values (855,5);
+insert into t (id,a) values (855,6);
+insert into t (id,a) values (855,7);
+insert into t (id,a) values (855,8);
+insert into t (id,a) values (855,9);
+insert into t (id,a) values (855,10);
+insert into t (id,a) values (855,11);
+insert into t (id,a) values (855,12);
+insert into t (id,a) values (855,13);
+insert into t (id,a) values (855,14);
+insert into t (id,a) values (855,15);
+insert into t (id,a) values (855,16);
+insert into t (id,a) values (855,17);
+insert into t (id,a) values (855,18);
+insert into t (id,a) values (855,19);
+insert into t (id,a) values (855,20);
+insert into t (id,a) values (855,21);
+insert into t (id,a) values (855,22);
+insert into t (id,a) values (855,23);
+insert into t (id,a) values (855,24);
+insert into t (id,a) values (855,25);
+insert into t (id,a) values (855,26);
+insert into t (id,a) values (855,27);
+insert into t (id,a) values (855,28);
+insert into t (id,a) values (855,29);
+insert into t (id,a) values (855,30);
+insert into t (id,a) values (855,31);
+insert into t (id,a) values (855,32);
+insert into t (id,a) values (855,33);
+insert into t (id,a) values (855,34);
+insert into t (id,a) values (855,35);
+insert into t (id,a) values (855,36);
+insert into t (id,a) values (855,37);
+insert into t (id,a) values (855,38);
+insert into t (id,a) values (855,39);
+insert into t (id,a) values (855,40);
+insert into t (id,a) values (855,41);
+insert into t (id,a) values (855,42);
+insert into t (id,a) values (855,43);
+insert into t (id,a) values (855,44);
+insert into t (id,a) values (855,45);
+insert into t (id,a) values (855,46);
+insert into t (id,a) values (855,47);
+insert into t (id,a) values (855,48);
+insert into t (id,a) values (855,49);
+insert into t (id,a) values (855,50);
+insert into t (id,a) values (855,51);
+insert into t (id,a) values (855,52);
+insert into t (id,a) values (855,53);
+insert into t (id,a) values (855,54);
+insert into t (id,a) values (855,55);
+insert into t (id,a) values (855,56);
+insert into t (id,a) values (855,57);
+insert into t (id,a) values (855,58);
+insert into t (id,a) values (855,59);
+insert into t (id,a) values (855,60);
+insert into t (id,a) values (855,61);
+insert into t (id,a) values (855,62);
+insert into t (id,a) values (855,63);
+insert into t (id,a) values (855,64);
+insert into t (id,a) values (855,65);
+insert into t (id,a) values (855,66);
+insert into t (id,a) values (855,67);
+insert into t (id,a) values (855,68);
+insert into t (id,a) values (855,69);
+insert into t (id,a) values (855,70);
+insert into t (id,a) values (855,71);
+insert into t (id,a) values (855,72);
+insert into t (id,a) values (855,73);
+insert into t (id,a) values (855,74);
+insert into t (id,a) values (855,75);
+insert into t (id,a) values (855,76);
+insert into t (id,a) values (855,77);
+insert into t (id,a) values (855,78);
+insert into t (id,a) values (855,79);
+insert into t (id,a) values (855,80);
+insert into t (id,a) values (855,81);
+insert into t (id,a) values (855,82);
+insert into t (id,a) values (855,83);
+insert into t (id,a) values (855,84);
+insert into t (id,a) values (855,85);
+insert into t (id,a) values (855,86);
+insert into t (id,a) values (855,87);
+insert into t (id,a) values (855,88);
+insert into t (id,a) values (855,89);
+insert into t (id,a) values (855,90);
+insert into t (id,a) values (855,91);
+insert into t (id,a) values (855,92);
+insert into t (id,a) values (855,93);
+insert into t (id,a) values (855,94);
+insert into t (id,a) values (855,95);
+insert into t (id,a) values (855,96);
+insert into t (id,a) values (855,97);
+insert into t (id,a) values (855,98);
+insert into t (id,a) values (855,99);
+insert into t (id,a) values (856,0);
+insert into t (id,a) values (856,1);
+insert into t (id,a) values (856,2);
+insert into t (id,a) values (856,3);
+insert into t (id,a) values (856,4);
+insert into t (id,a) values (856,5);
+insert into t (id,a) values (856,6);
+insert into t (id,a) values (856,7);
+insert into t (id,a) values (856,8);
+insert into t (id,a) values (856,9);
+insert into t (id,a) values (856,10);
+insert into t (id,a) values (856,11);
+insert into t (id,a) values (856,12);
+insert into t (id,a) values (856,13);
+insert into t (id,a) values (856,14);
+insert into t (id,a) values (856,15);
+insert into t (id,a) values (856,16);
+insert into t (id,a) values (856,17);
+insert into t (id,a) values (856,18);
+insert into t (id,a) values (856,19);
+insert into t (id,a) values (856,20);
+insert into t (id,a) values (856,21);
+insert into t (id,a) values (856,22);
+insert into t (id,a) values (856,23);
+insert into t (id,a) values (856,24);
+insert into t (id,a) values (856,25);
+insert into t (id,a) values (856,26);
+insert into t (id,a) values (856,27);
+insert into t (id,a) values (856,28);
+insert into t (id,a) values (856,29);
+insert into t (id,a) values (856,30);
+insert into t (id,a) values (856,31);
+insert into t (id,a) values (856,32);
+insert into t (id,a) values (856,33);
+insert into t (id,a) values (856,34);
+insert into t (id,a) values (856,35);
+insert into t (id,a) values (856,36);
+insert into t (id,a) values (856,37);
+insert into t (id,a) values (856,38);
+insert into t (id,a) values (856,39);
+insert into t (id,a) values (856,40);
+insert into t (id,a) values (856,41);
+insert into t (id,a) values (856,42);
+insert into t (id,a) values (856,43);
+insert into t (id,a) values (856,44);
+insert into t (id,a) values (856,45);
+insert into t (id,a) values (856,46);
+insert into t (id,a) values (856,47);
+insert into t (id,a) values (856,48);
+insert into t (id,a) values (856,49);
+insert into t (id,a) values (856,50);
+insert into t (id,a) values (856,51);
+insert into t (id,a) values (856,52);
+insert into t (id,a) values (856,53);
+insert into t (id,a) values (856,54);
+insert into t (id,a) values (856,55);
+insert into t (id,a) values (856,56);
+insert into t (id,a) values (856,57);
+insert into t (id,a) values (856,58);
+insert into t (id,a) values (856,59);
+insert into t (id,a) values (856,60);
+insert into t (id,a) values (856,61);
+insert into t (id,a) values (856,62);
+insert into t (id,a) values (856,63);
+insert into t (id,a) values (856,64);
+insert into t (id,a) values (856,65);
+insert into t (id,a) values (856,66);
+insert into t (id,a) values (856,67);
+insert into t (id,a) values (856,68);
+insert into t (id,a) values (856,69);
+insert into t (id,a) values (856,70);
+insert into t (id,a) values (856,71);
+insert into t (id,a) values (856,72);
+insert into t (id,a) values (856,73);
+insert into t (id,a) values (856,74);
+insert into t (id,a) values (856,75);
+insert into t (id,a) values (856,76);
+insert into t (id,a) values (856,77);
+insert into t (id,a) values (856,78);
+insert into t (id,a) values (856,79);
+insert into t (id,a) values (856,80);
+insert into t (id,a) values (856,81);
+insert into t (id,a) values (856,82);
+insert into t (id,a) values (856,83);
+insert into t (id,a) values (856,84);
+insert into t (id,a) values (856,85);
+insert into t (id,a) values (856,86);
+insert into t (id,a) values (856,87);
+insert into t (id,a) values (856,88);
+insert into t (id,a) values (856,89);
+insert into t (id,a) values (856,90);
+insert into t (id,a) values (856,91);
+insert into t (id,a) values (856,92);
+insert into t (id,a) values (856,93);
+insert into t (id,a) values (856,94);
+insert into t (id,a) values (856,95);
+insert into t (id,a) values (856,96);
+insert into t (id,a) values (856,97);
+insert into t (id,a) values (856,98);
+insert into t (id,a) values (856,99);
+insert into t (id,a) values (857,0);
+insert into t (id,a) values (857,1);
+insert into t (id,a) values (857,2);
+insert into t (id,a) values (857,3);
+insert into t (id,a) values (857,4);
+insert into t (id,a) values (857,5);
+insert into t (id,a) values (857,6);
+insert into t (id,a) values (857,7);
+insert into t (id,a) values (857,8);
+insert into t (id,a) values (857,9);
+insert into t (id,a) values (857,10);
+insert into t (id,a) values (857,11);
+insert into t (id,a) values (857,12);
+insert into t (id,a) values (857,13);
+insert into t (id,a) values (857,14);
+insert into t (id,a) values (857,15);
+insert into t (id,a) values (857,16);
+insert into t (id,a) values (857,17);
+insert into t (id,a) values (857,18);
+insert into t (id,a) values (857,19);
+insert into t (id,a) values (857,20);
+insert into t (id,a) values (857,21);
+insert into t (id,a) values (857,22);
+insert into t (id,a) values (857,23);
+insert into t (id,a) values (857,24);
+insert into t (id,a) values (857,25);
+insert into t (id,a) values (857,26);
+insert into t (id,a) values (857,27);
+insert into t (id,a) values (857,28);
+insert into t (id,a) values (857,29);
+insert into t (id,a) values (857,30);
+insert into t (id,a) values (857,31);
+insert into t (id,a) values (857,32);
+insert into t (id,a) values (857,33);
+insert into t (id,a) values (857,34);
+insert into t (id,a) values (857,35);
+insert into t (id,a) values (857,36);
+insert into t (id,a) values (857,37);
+insert into t (id,a) values (857,38);
+insert into t (id,a) values (857,39);
+insert into t (id,a) values (857,40);
+insert into t (id,a) values (857,41);
+insert into t (id,a) values (857,42);
+insert into t (id,a) values (857,43);
+insert into t (id,a) values (857,44);
+insert into t (id,a) values (857,45);
+insert into t (id,a) values (857,46);
+insert into t (id,a) values (857,47);
+insert into t (id,a) values (857,48);
+insert into t (id,a) values (857,49);
+insert into t (id,a) values (857,50);
+insert into t (id,a) values (857,51);
+insert into t (id,a) values (857,52);
+insert into t (id,a) values (857,53);
+insert into t (id,a) values (857,54);
+insert into t (id,a) values (857,55);
+insert into t (id,a) values (857,56);
+insert into t (id,a) values (857,57);
+insert into t (id,a) values (857,58);
+insert into t (id,a) values (857,59);
+insert into t (id,a) values (857,60);
+insert into t (id,a) values (857,61);
+insert into t (id,a) values (857,62);
+insert into t (id,a) values (857,63);
+insert into t (id,a) values (857,64);
+insert into t (id,a) values (857,65);
+insert into t (id,a) values (857,66);
+insert into t (id,a) values (857,67);
+insert into t (id,a) values (857,68);
+insert into t (id,a) values (857,69);
+insert into t (id,a) values (857,70);
+insert into t (id,a) values (857,71);
+insert into t (id,a) values (857,72);
+insert into t (id,a) values (857,73);
+insert into t (id,a) values (857,74);
+insert into t (id,a) values (857,75);
+insert into t (id,a) values (857,76);
+insert into t (id,a) values (857,77);
+insert into t (id,a) values (857,78);
+insert into t (id,a) values (857,79);
+insert into t (id,a) values (857,80);
+insert into t (id,a) values (857,81);
+insert into t (id,a) values (857,82);
+insert into t (id,a) values (857,83);
+insert into t (id,a) values (857,84);
+insert into t (id,a) values (857,85);
+insert into t (id,a) values (857,86);
+insert into t (id,a) values (857,87);
+insert into t (id,a) values (857,88);
+insert into t (id,a) values (857,89);
+insert into t (id,a) values (857,90);
+insert into t (id,a) values (857,91);
+insert into t (id,a) values (857,92);
+insert into t (id,a) values (857,93);
+insert into t (id,a) values (857,94);
+insert into t (id,a) values (857,95);
+insert into t (id,a) values (857,96);
+insert into t (id,a) values (857,97);
+insert into t (id,a) values (857,98);
+insert into t (id,a) values (857,99);
+insert into t (id,a) values (858,0);
+insert into t (id,a) values (858,1);
+insert into t (id,a) values (858,2);
+insert into t (id,a) values (858,3);
+insert into t (id,a) values (858,4);
+insert into t (id,a) values (858,5);
+insert into t (id,a) values (858,6);
+insert into t (id,a) values (858,7);
+insert into t (id,a) values (858,8);
+insert into t (id,a) values (858,9);
+insert into t (id,a) values (858,10);
+insert into t (id,a) values (858,11);
+insert into t (id,a) values (858,12);
+insert into t (id,a) values (858,13);
+insert into t (id,a) values (858,14);
+insert into t (id,a) values (858,15);
+insert into t (id,a) values (858,16);
+insert into t (id,a) values (858,17);
+insert into t (id,a) values (858,18);
+insert into t (id,a) values (858,19);
+insert into t (id,a) values (858,20);
+insert into t (id,a) values (858,21);
+insert into t (id,a) values (858,22);
+insert into t (id,a) values (858,23);
+insert into t (id,a) values (858,24);
+insert into t (id,a) values (858,25);
+insert into t (id,a) values (858,26);
+insert into t (id,a) values (858,27);
+insert into t (id,a) values (858,28);
+insert into t (id,a) values (858,29);
+insert into t (id,a) values (858,30);
+insert into t (id,a) values (858,31);
+insert into t (id,a) values (858,32);
+insert into t (id,a) values (858,33);
+insert into t (id,a) values (858,34);
+insert into t (id,a) values (858,35);
+insert into t (id,a) values (858,36);
+insert into t (id,a) values (858,37);
+insert into t (id,a) values (858,38);
+insert into t (id,a) values (858,39);
+insert into t (id,a) values (858,40);
+insert into t (id,a) values (858,41);
+insert into t (id,a) values (858,42);
+insert into t (id,a) values (858,43);
+insert into t (id,a) values (858,44);
+insert into t (id,a) values (858,45);
+insert into t (id,a) values (858,46);
+insert into t (id,a) values (858,47);
+insert into t (id,a) values (858,48);
+insert into t (id,a) values (858,49);
+insert into t (id,a) values (858,50);
+insert into t (id,a) values (858,51);
+insert into t (id,a) values (858,52);
+insert into t (id,a) values (858,53);
+insert into t (id,a) values (858,54);
+insert into t (id,a) values (858,55);
+insert into t (id,a) values (858,56);
+insert into t (id,a) values (858,57);
+insert into t (id,a) values (858,58);
+insert into t (id,a) values (858,59);
+insert into t (id,a) values (858,60);
+insert into t (id,a) values (858,61);
+insert into t (id,a) values (858,62);
+insert into t (id,a) values (858,63);
+insert into t (id,a) values (858,64);
+insert into t (id,a) values (858,65);
+insert into t (id,a) values (858,66);
+insert into t (id,a) values (858,67);
+insert into t (id,a) values (858,68);
+insert into t (id,a) values (858,69);
+insert into t (id,a) values (858,70);
+insert into t (id,a) values (858,71);
+insert into t (id,a) values (858,72);
+insert into t (id,a) values (858,73);
+insert into t (id,a) values (858,74);
+insert into t (id,a) values (858,75);
+insert into t (id,a) values (858,76);
+insert into t (id,a) values (858,77);
+insert into t (id,a) values (858,78);
+insert into t (id,a) values (858,79);
+insert into t (id,a) values (858,80);
+insert into t (id,a) values (858,81);
+insert into t (id,a) values (858,82);
+insert into t (id,a) values (858,83);
+insert into t (id,a) values (858,84);
+insert into t (id,a) values (858,85);
+insert into t (id,a) values (858,86);
+insert into t (id,a) values (858,87);
+insert into t (id,a) values (858,88);
+insert into t (id,a) values (858,89);
+insert into t (id,a) values (858,90);
+insert into t (id,a) values (858,91);
+insert into t (id,a) values (858,92);
+insert into t (id,a) values (858,93);
+insert into t (id,a) values (858,94);
+insert into t (id,a) values (858,95);
+insert into t (id,a) values (858,96);
+insert into t (id,a) values (858,97);
+insert into t (id,a) values (858,98);
+insert into t (id,a) values (858,99);
+insert into t (id,a) values (859,0);
+insert into t (id,a) values (859,1);
+insert into t (id,a) values (859,2);
+insert into t (id,a) values (859,3);
+insert into t (id,a) values (859,4);
+insert into t (id,a) values (859,5);
+insert into t (id,a) values (859,6);
+insert into t (id,a) values (859,7);
+insert into t (id,a) values (859,8);
+insert into t (id,a) values (859,9);
+insert into t (id,a) values (859,10);
+insert into t (id,a) values (859,11);
+insert into t (id,a) values (859,12);
+insert into t (id,a) values (859,13);
+insert into t (id,a) values (859,14);
+insert into t (id,a) values (859,15);
+insert into t (id,a) values (859,16);
+insert into t (id,a) values (859,17);
+insert into t (id,a) values (859,18);
+insert into t (id,a) values (859,19);
+insert into t (id,a) values (859,20);
+insert into t (id,a) values (859,21);
+insert into t (id,a) values (859,22);
+insert into t (id,a) values (859,23);
+insert into t (id,a) values (859,24);
+insert into t (id,a) values (859,25);
+insert into t (id,a) values (859,26);
+insert into t (id,a) values (859,27);
+insert into t (id,a) values (859,28);
+insert into t (id,a) values (859,29);
+insert into t (id,a) values (859,30);
+insert into t (id,a) values (859,31);
+insert into t (id,a) values (859,32);
+insert into t (id,a) values (859,33);
+insert into t (id,a) values (859,34);
+insert into t (id,a) values (859,35);
+insert into t (id,a) values (859,36);
+insert into t (id,a) values (859,37);
+insert into t (id,a) values (859,38);
+insert into t (id,a) values (859,39);
+insert into t (id,a) values (859,40);
+insert into t (id,a) values (859,41);
+insert into t (id,a) values (859,42);
+insert into t (id,a) values (859,43);
+insert into t (id,a) values (859,44);
+insert into t (id,a) values (859,45);
+insert into t (id,a) values (859,46);
+insert into t (id,a) values (859,47);
+insert into t (id,a) values (859,48);
+insert into t (id,a) values (859,49);
+insert into t (id,a) values (859,50);
+insert into t (id,a) values (859,51);
+insert into t (id,a) values (859,52);
+insert into t (id,a) values (859,53);
+insert into t (id,a) values (859,54);
+insert into t (id,a) values (859,55);
+insert into t (id,a) values (859,56);
+insert into t (id,a) values (859,57);
+insert into t (id,a) values (859,58);
+insert into t (id,a) values (859,59);
+insert into t (id,a) values (859,60);
+insert into t (id,a) values (859,61);
+insert into t (id,a) values (859,62);
+insert into t (id,a) values (859,63);
+insert into t (id,a) values (859,64);
+insert into t (id,a) values (859,65);
+insert into t (id,a) values (859,66);
+insert into t (id,a) values (859,67);
+insert into t (id,a) values (859,68);
+insert into t (id,a) values (859,69);
+insert into t (id,a) values (859,70);
+insert into t (id,a) values (859,71);
+insert into t (id,a) values (859,72);
+insert into t (id,a) values (859,73);
+insert into t (id,a) values (859,74);
+insert into t (id,a) values (859,75);
+insert into t (id,a) values (859,76);
+insert into t (id,a) values (859,77);
+insert into t (id,a) values (859,78);
+insert into t (id,a) values (859,79);
+insert into t (id,a) values (859,80);
+insert into t (id,a) values (859,81);
+insert into t (id,a) values (859,82);
+insert into t (id,a) values (859,83);
+insert into t (id,a) values (859,84);
+insert into t (id,a) values (859,85);
+insert into t (id,a) values (859,86);
+insert into t (id,a) values (859,87);
+insert into t (id,a) values (859,88);
+insert into t (id,a) values (859,89);
+insert into t (id,a) values (859,90);
+insert into t (id,a) values (859,91);
+insert into t (id,a) values (859,92);
+insert into t (id,a) values (859,93);
+insert into t (id,a) values (859,94);
+insert into t (id,a) values (859,95);
+insert into t (id,a) values (859,96);
+insert into t (id,a) values (859,97);
+insert into t (id,a) values (859,98);
+insert into t (id,a) values (859,99);
+insert into t (id,a) values (860,0);
+insert into t (id,a) values (860,1);
+insert into t (id,a) values (860,2);
+insert into t (id,a) values (860,3);
+insert into t (id,a) values (860,4);
+insert into t (id,a) values (860,5);
+insert into t (id,a) values (860,6);
+insert into t (id,a) values (860,7);
+insert into t (id,a) values (860,8);
+insert into t (id,a) values (860,9);
+insert into t (id,a) values (860,10);
+insert into t (id,a) values (860,11);
+insert into t (id,a) values (860,12);
+insert into t (id,a) values (860,13);
+insert into t (id,a) values (860,14);
+insert into t (id,a) values (860,15);
+insert into t (id,a) values (860,16);
+insert into t (id,a) values (860,17);
+insert into t (id,a) values (860,18);
+insert into t (id,a) values (860,19);
+insert into t (id,a) values (860,20);
+insert into t (id,a) values (860,21);
+insert into t (id,a) values (860,22);
+insert into t (id,a) values (860,23);
+insert into t (id,a) values (860,24);
+insert into t (id,a) values (860,25);
+insert into t (id,a) values (860,26);
+insert into t (id,a) values (860,27);
+insert into t (id,a) values (860,28);
+insert into t (id,a) values (860,29);
+insert into t (id,a) values (860,30);
+insert into t (id,a) values (860,31);
+insert into t (id,a) values (860,32);
+insert into t (id,a) values (860,33);
+insert into t (id,a) values (860,34);
+insert into t (id,a) values (860,35);
+insert into t (id,a) values (860,36);
+insert into t (id,a) values (860,37);
+insert into t (id,a) values (860,38);
+insert into t (id,a) values (860,39);
+insert into t (id,a) values (860,40);
+insert into t (id,a) values (860,41);
+insert into t (id,a) values (860,42);
+insert into t (id,a) values (860,43);
+insert into t (id,a) values (860,44);
+insert into t (id,a) values (860,45);
+insert into t (id,a) values (860,46);
+insert into t (id,a) values (860,47);
+insert into t (id,a) values (860,48);
+insert into t (id,a) values (860,49);
+insert into t (id,a) values (860,50);
+insert into t (id,a) values (860,51);
+insert into t (id,a) values (860,52);
+insert into t (id,a) values (860,53);
+insert into t (id,a) values (860,54);
+insert into t (id,a) values (860,55);
+insert into t (id,a) values (860,56);
+insert into t (id,a) values (860,57);
+insert into t (id,a) values (860,58);
+insert into t (id,a) values (860,59);
+insert into t (id,a) values (860,60);
+insert into t (id,a) values (860,61);
+insert into t (id,a) values (860,62);
+insert into t (id,a) values (860,63);
+insert into t (id,a) values (860,64);
+insert into t (id,a) values (860,65);
+insert into t (id,a) values (860,66);
+insert into t (id,a) values (860,67);
+insert into t (id,a) values (860,68);
+insert into t (id,a) values (860,69);
+insert into t (id,a) values (860,70);
+insert into t (id,a) values (860,71);
+insert into t (id,a) values (860,72);
+insert into t (id,a) values (860,73);
+insert into t (id,a) values (860,74);
+insert into t (id,a) values (860,75);
+insert into t (id,a) values (860,76);
+insert into t (id,a) values (860,77);
+insert into t (id,a) values (860,78);
+insert into t (id,a) values (860,79);
+insert into t (id,a) values (860,80);
+insert into t (id,a) values (860,81);
+insert into t (id,a) values (860,82);
+insert into t (id,a) values (860,83);
+insert into t (id,a) values (860,84);
+insert into t (id,a) values (860,85);
+insert into t (id,a) values (860,86);
+insert into t (id,a) values (860,87);
+insert into t (id,a) values (860,88);
+insert into t (id,a) values (860,89);
+insert into t (id,a) values (860,90);
+insert into t (id,a) values (860,91);
+insert into t (id,a) values (860,92);
+insert into t (id,a) values (860,93);
+insert into t (id,a) values (860,94);
+insert into t (id,a) values (860,95);
+insert into t (id,a) values (860,96);
+insert into t (id,a) values (860,97);
+insert into t (id,a) values (860,98);
+insert into t (id,a) values (860,99);
+insert into t (id,a) values (861,0);
+insert into t (id,a) values (861,1);
+insert into t (id,a) values (861,2);
+insert into t (id,a) values (861,3);
+insert into t (id,a) values (861,4);
+insert into t (id,a) values (861,5);
+insert into t (id,a) values (861,6);
+insert into t (id,a) values (861,7);
+insert into t (id,a) values (861,8);
+insert into t (id,a) values (861,9);
+insert into t (id,a) values (861,10);
+insert into t (id,a) values (861,11);
+insert into t (id,a) values (861,12);
+insert into t (id,a) values (861,13);
+insert into t (id,a) values (861,14);
+insert into t (id,a) values (861,15);
+insert into t (id,a) values (861,16);
+insert into t (id,a) values (861,17);
+insert into t (id,a) values (861,18);
+insert into t (id,a) values (861,19);
+insert into t (id,a) values (861,20);
+insert into t (id,a) values (861,21);
+insert into t (id,a) values (861,22);
+insert into t (id,a) values (861,23);
+insert into t (id,a) values (861,24);
+insert into t (id,a) values (861,25);
+insert into t (id,a) values (861,26);
+insert into t (id,a) values (861,27);
+insert into t (id,a) values (861,28);
+insert into t (id,a) values (861,29);
+insert into t (id,a) values (861,30);
+insert into t (id,a) values (861,31);
+insert into t (id,a) values (861,32);
+insert into t (id,a) values (861,33);
+insert into t (id,a) values (861,34);
+insert into t (id,a) values (861,35);
+insert into t (id,a) values (861,36);
+insert into t (id,a) values (861,37);
+insert into t (id,a) values (861,38);
+insert into t (id,a) values (861,39);
+insert into t (id,a) values (861,40);
+insert into t (id,a) values (861,41);
+insert into t (id,a) values (861,42);
+insert into t (id,a) values (861,43);
+insert into t (id,a) values (861,44);
+insert into t (id,a) values (861,45);
+insert into t (id,a) values (861,46);
+insert into t (id,a) values (861,47);
+insert into t (id,a) values (861,48);
+insert into t (id,a) values (861,49);
+insert into t (id,a) values (861,50);
+insert into t (id,a) values (861,51);
+insert into t (id,a) values (861,52);
+insert into t (id,a) values (861,53);
+insert into t (id,a) values (861,54);
+insert into t (id,a) values (861,55);
+insert into t (id,a) values (861,56);
+insert into t (id,a) values (861,57);
+insert into t (id,a) values (861,58);
+insert into t (id,a) values (861,59);
+insert into t (id,a) values (861,60);
+insert into t (id,a) values (861,61);
+insert into t (id,a) values (861,62);
+insert into t (id,a) values (861,63);
+insert into t (id,a) values (861,64);
+insert into t (id,a) values (861,65);
+insert into t (id,a) values (861,66);
+insert into t (id,a) values (861,67);
+insert into t (id,a) values (861,68);
+insert into t (id,a) values (861,69);
+insert into t (id,a) values (861,70);
+insert into t (id,a) values (861,71);
+insert into t (id,a) values (861,72);
+insert into t (id,a) values (861,73);
+insert into t (id,a) values (861,74);
+insert into t (id,a) values (861,75);
+insert into t (id,a) values (861,76);
+insert into t (id,a) values (861,77);
+insert into t (id,a) values (861,78);
+insert into t (id,a) values (861,79);
+insert into t (id,a) values (861,80);
+insert into t (id,a) values (861,81);
+insert into t (id,a) values (861,82);
+insert into t (id,a) values (861,83);
+insert into t (id,a) values (861,84);
+insert into t (id,a) values (861,85);
+insert into t (id,a) values (861,86);
+insert into t (id,a) values (861,87);
+insert into t (id,a) values (861,88);
+insert into t (id,a) values (861,89);
+insert into t (id,a) values (861,90);
+insert into t (id,a) values (861,91);
+insert into t (id,a) values (861,92);
+insert into t (id,a) values (861,93);
+insert into t (id,a) values (861,94);
+insert into t (id,a) values (861,95);
+insert into t (id,a) values (861,96);
+insert into t (id,a) values (861,97);
+insert into t (id,a) values (861,98);
+insert into t (id,a) values (861,99);
+insert into t (id,a) values (862,0);
+insert into t (id,a) values (862,1);
+insert into t (id,a) values (862,2);
+insert into t (id,a) values (862,3);
+insert into t (id,a) values (862,4);
+insert into t (id,a) values (862,5);
+insert into t (id,a) values (862,6);
+insert into t (id,a) values (862,7);
+insert into t (id,a) values (862,8);
+insert into t (id,a) values (862,9);
+insert into t (id,a) values (862,10);
+insert into t (id,a) values (862,11);
+insert into t (id,a) values (862,12);
+insert into t (id,a) values (862,13);
+insert into t (id,a) values (862,14);
+insert into t (id,a) values (862,15);
+insert into t (id,a) values (862,16);
+insert into t (id,a) values (862,17);
+insert into t (id,a) values (862,18);
+insert into t (id,a) values (862,19);
+insert into t (id,a) values (862,20);
+insert into t (id,a) values (862,21);
+insert into t (id,a) values (862,22);
+insert into t (id,a) values (862,23);
+insert into t (id,a) values (862,24);
+insert into t (id,a) values (862,25);
+insert into t (id,a) values (862,26);
+insert into t (id,a) values (862,27);
+insert into t (id,a) values (862,28);
+insert into t (id,a) values (862,29);
+insert into t (id,a) values (862,30);
+insert into t (id,a) values (862,31);
+insert into t (id,a) values (862,32);
+insert into t (id,a) values (862,33);
+insert into t (id,a) values (862,34);
+insert into t (id,a) values (862,35);
+insert into t (id,a) values (862,36);
+insert into t (id,a) values (862,37);
+insert into t (id,a) values (862,38);
+insert into t (id,a) values (862,39);
+insert into t (id,a) values (862,40);
+insert into t (id,a) values (862,41);
+insert into t (id,a) values (862,42);
+insert into t (id,a) values (862,43);
+insert into t (id,a) values (862,44);
+insert into t (id,a) values (862,45);
+insert into t (id,a) values (862,46);
+insert into t (id,a) values (862,47);
+insert into t (id,a) values (862,48);
+insert into t (id,a) values (862,49);
+insert into t (id,a) values (862,50);
+insert into t (id,a) values (862,51);
+insert into t (id,a) values (862,52);
+insert into t (id,a) values (862,53);
+insert into t (id,a) values (862,54);
+insert into t (id,a) values (862,55);
+insert into t (id,a) values (862,56);
+insert into t (id,a) values (862,57);
+insert into t (id,a) values (862,58);
+insert into t (id,a) values (862,59);
+insert into t (id,a) values (862,60);
+insert into t (id,a) values (862,61);
+insert into t (id,a) values (862,62);
+insert into t (id,a) values (862,63);
+insert into t (id,a) values (862,64);
+insert into t (id,a) values (862,65);
+insert into t (id,a) values (862,66);
+insert into t (id,a) values (862,67);
+insert into t (id,a) values (862,68);
+insert into t (id,a) values (862,69);
+insert into t (id,a) values (862,70);
+insert into t (id,a) values (862,71);
+insert into t (id,a) values (862,72);
+insert into t (id,a) values (862,73);
+insert into t (id,a) values (862,74);
+insert into t (id,a) values (862,75);
+insert into t (id,a) values (862,76);
+insert into t (id,a) values (862,77);
+insert into t (id,a) values (862,78);
+insert into t (id,a) values (862,79);
+insert into t (id,a) values (862,80);
+insert into t (id,a) values (862,81);
+insert into t (id,a) values (862,82);
+insert into t (id,a) values (862,83);
+insert into t (id,a) values (862,84);
+insert into t (id,a) values (862,85);
+insert into t (id,a) values (862,86);
+insert into t (id,a) values (862,87);
+insert into t (id,a) values (862,88);
+insert into t (id,a) values (862,89);
+insert into t (id,a) values (862,90);
+insert into t (id,a) values (862,91);
+insert into t (id,a) values (862,92);
+insert into t (id,a) values (862,93);
+insert into t (id,a) values (862,94);
+insert into t (id,a) values (862,95);
+insert into t (id,a) values (862,96);
+insert into t (id,a) values (862,97);
+insert into t (id,a) values (862,98);
+insert into t (id,a) values (862,99);
+insert into t (id,a) values (863,0);
+insert into t (id,a) values (863,1);
+insert into t (id,a) values (863,2);
+insert into t (id,a) values (863,3);
+insert into t (id,a) values (863,4);
+insert into t (id,a) values (863,5);
+insert into t (id,a) values (863,6);
+insert into t (id,a) values (863,7);
+insert into t (id,a) values (863,8);
+insert into t (id,a) values (863,9);
+insert into t (id,a) values (863,10);
+insert into t (id,a) values (863,11);
+insert into t (id,a) values (863,12);
+insert into t (id,a) values (863,13);
+insert into t (id,a) values (863,14);
+insert into t (id,a) values (863,15);
+insert into t (id,a) values (863,16);
+insert into t (id,a) values (863,17);
+insert into t (id,a) values (863,18);
+insert into t (id,a) values (863,19);
+insert into t (id,a) values (863,20);
+insert into t (id,a) values (863,21);
+insert into t (id,a) values (863,22);
+insert into t (id,a) values (863,23);
+insert into t (id,a) values (863,24);
+insert into t (id,a) values (863,25);
+insert into t (id,a) values (863,26);
+insert into t (id,a) values (863,27);
+insert into t (id,a) values (863,28);
+insert into t (id,a) values (863,29);
+insert into t (id,a) values (863,30);
+insert into t (id,a) values (863,31);
+insert into t (id,a) values (863,32);
+insert into t (id,a) values (863,33);
+insert into t (id,a) values (863,34);
+insert into t (id,a) values (863,35);
+insert into t (id,a) values (863,36);
+insert into t (id,a) values (863,37);
+insert into t (id,a) values (863,38);
+insert into t (id,a) values (863,39);
+insert into t (id,a) values (863,40);
+insert into t (id,a) values (863,41);
+insert into t (id,a) values (863,42);
+insert into t (id,a) values (863,43);
+insert into t (id,a) values (863,44);
+insert into t (id,a) values (863,45);
+insert into t (id,a) values (863,46);
+insert into t (id,a) values (863,47);
+insert into t (id,a) values (863,48);
+insert into t (id,a) values (863,49);
+insert into t (id,a) values (863,50);
+insert into t (id,a) values (863,51);
+insert into t (id,a) values (863,52);
+insert into t (id,a) values (863,53);
+insert into t (id,a) values (863,54);
+insert into t (id,a) values (863,55);
+insert into t (id,a) values (863,56);
+insert into t (id,a) values (863,57);
+insert into t (id,a) values (863,58);
+insert into t (id,a) values (863,59);
+insert into t (id,a) values (863,60);
+insert into t (id,a) values (863,61);
+insert into t (id,a) values (863,62);
+insert into t (id,a) values (863,63);
+insert into t (id,a) values (863,64);
+insert into t (id,a) values (863,65);
+insert into t (id,a) values (863,66);
+insert into t (id,a) values (863,67);
+insert into t (id,a) values (863,68);
+insert into t (id,a) values (863,69);
+insert into t (id,a) values (863,70);
+insert into t (id,a) values (863,71);
+insert into t (id,a) values (863,72);
+insert into t (id,a) values (863,73);
+insert into t (id,a) values (863,74);
+insert into t (id,a) values (863,75);
+insert into t (id,a) values (863,76);
+insert into t (id,a) values (863,77);
+insert into t (id,a) values (863,78);
+insert into t (id,a) values (863,79);
+insert into t (id,a) values (863,80);
+insert into t (id,a) values (863,81);
+insert into t (id,a) values (863,82);
+insert into t (id,a) values (863,83);
+insert into t (id,a) values (863,84);
+insert into t (id,a) values (863,85);
+insert into t (id,a) values (863,86);
+insert into t (id,a) values (863,87);
+insert into t (id,a) values (863,88);
+insert into t (id,a) values (863,89);
+insert into t (id,a) values (863,90);
+insert into t (id,a) values (863,91);
+insert into t (id,a) values (863,92);
+insert into t (id,a) values (863,93);
+insert into t (id,a) values (863,94);
+insert into t (id,a) values (863,95);
+insert into t (id,a) values (863,96);
+insert into t (id,a) values (863,97);
+insert into t (id,a) values (863,98);
+insert into t (id,a) values (863,99);
+insert into t (id,a) values (864,0);
+insert into t (id,a) values (864,1);
+insert into t (id,a) values (864,2);
+insert into t (id,a) values (864,3);
+insert into t (id,a) values (864,4);
+insert into t (id,a) values (864,5);
+insert into t (id,a) values (864,6);
+insert into t (id,a) values (864,7);
+insert into t (id,a) values (864,8);
+insert into t (id,a) values (864,9);
+insert into t (id,a) values (864,10);
+insert into t (id,a) values (864,11);
+insert into t (id,a) values (864,12);
+insert into t (id,a) values (864,13);
+insert into t (id,a) values (864,14);
+insert into t (id,a) values (864,15);
+insert into t (id,a) values (864,16);
+insert into t (id,a) values (864,17);
+insert into t (id,a) values (864,18);
+insert into t (id,a) values (864,19);
+insert into t (id,a) values (864,20);
+insert into t (id,a) values (864,21);
+insert into t (id,a) values (864,22);
+insert into t (id,a) values (864,23);
+insert into t (id,a) values (864,24);
+insert into t (id,a) values (864,25);
+insert into t (id,a) values (864,26);
+insert into t (id,a) values (864,27);
+insert into t (id,a) values (864,28);
+insert into t (id,a) values (864,29);
+insert into t (id,a) values (864,30);
+insert into t (id,a) values (864,31);
+insert into t (id,a) values (864,32);
+insert into t (id,a) values (864,33);
+insert into t (id,a) values (864,34);
+insert into t (id,a) values (864,35);
+insert into t (id,a) values (864,36);
+insert into t (id,a) values (864,37);
+insert into t (id,a) values (864,38);
+insert into t (id,a) values (864,39);
+insert into t (id,a) values (864,40);
+insert into t (id,a) values (864,41);
+insert into t (id,a) values (864,42);
+insert into t (id,a) values (864,43);
+insert into t (id,a) values (864,44);
+insert into t (id,a) values (864,45);
+insert into t (id,a) values (864,46);
+insert into t (id,a) values (864,47);
+insert into t (id,a) values (864,48);
+insert into t (id,a) values (864,49);
+insert into t (id,a) values (864,50);
+insert into t (id,a) values (864,51);
+insert into t (id,a) values (864,52);
+insert into t (id,a) values (864,53);
+insert into t (id,a) values (864,54);
+insert into t (id,a) values (864,55);
+insert into t (id,a) values (864,56);
+insert into t (id,a) values (864,57);
+insert into t (id,a) values (864,58);
+insert into t (id,a) values (864,59);
+insert into t (id,a) values (864,60);
+insert into t (id,a) values (864,61);
+insert into t (id,a) values (864,62);
+insert into t (id,a) values (864,63);
+insert into t (id,a) values (864,64);
+insert into t (id,a) values (864,65);
+insert into t (id,a) values (864,66);
+insert into t (id,a) values (864,67);
+insert into t (id,a) values (864,68);
+insert into t (id,a) values (864,69);
+insert into t (id,a) values (864,70);
+insert into t (id,a) values (864,71);
+insert into t (id,a) values (864,72);
+insert into t (id,a) values (864,73);
+insert into t (id,a) values (864,74);
+insert into t (id,a) values (864,75);
+insert into t (id,a) values (864,76);
+insert into t (id,a) values (864,77);
+insert into t (id,a) values (864,78);
+insert into t (id,a) values (864,79);
+insert into t (id,a) values (864,80);
+insert into t (id,a) values (864,81);
+insert into t (id,a) values (864,82);
+insert into t (id,a) values (864,83);
+insert into t (id,a) values (864,84);
+insert into t (id,a) values (864,85);
+insert into t (id,a) values (864,86);
+insert into t (id,a) values (864,87);
+insert into t (id,a) values (864,88);
+insert into t (id,a) values (864,89);
+insert into t (id,a) values (864,90);
+insert into t (id,a) values (864,91);
+insert into t (id,a) values (864,92);
+insert into t (id,a) values (864,93);
+insert into t (id,a) values (864,94);
+insert into t (id,a) values (864,95);
+insert into t (id,a) values (864,96);
+insert into t (id,a) values (864,97);
+insert into t (id,a) values (864,98);
+insert into t (id,a) values (864,99);
+insert into t (id,a) values (865,0);
+insert into t (id,a) values (865,1);
+insert into t (id,a) values (865,2);
+insert into t (id,a) values (865,3);
+insert into t (id,a) values (865,4);
+insert into t (id,a) values (865,5);
+insert into t (id,a) values (865,6);
+insert into t (id,a) values (865,7);
+insert into t (id,a) values (865,8);
+insert into t (id,a) values (865,9);
+insert into t (id,a) values (865,10);
+insert into t (id,a) values (865,11);
+insert into t (id,a) values (865,12);
+insert into t (id,a) values (865,13);
+insert into t (id,a) values (865,14);
+insert into t (id,a) values (865,15);
+insert into t (id,a) values (865,16);
+insert into t (id,a) values (865,17);
+insert into t (id,a) values (865,18);
+insert into t (id,a) values (865,19);
+insert into t (id,a) values (865,20);
+insert into t (id,a) values (865,21);
+insert into t (id,a) values (865,22);
+insert into t (id,a) values (865,23);
+insert into t (id,a) values (865,24);
+insert into t (id,a) values (865,25);
+insert into t (id,a) values (865,26);
+insert into t (id,a) values (865,27);
+insert into t (id,a) values (865,28);
+insert into t (id,a) values (865,29);
+insert into t (id,a) values (865,30);
+insert into t (id,a) values (865,31);
+insert into t (id,a) values (865,32);
+insert into t (id,a) values (865,33);
+insert into t (id,a) values (865,34);
+insert into t (id,a) values (865,35);
+insert into t (id,a) values (865,36);
+insert into t (id,a) values (865,37);
+insert into t (id,a) values (865,38);
+insert into t (id,a) values (865,39);
+insert into t (id,a) values (865,40);
+insert into t (id,a) values (865,41);
+insert into t (id,a) values (865,42);
+insert into t (id,a) values (865,43);
+insert into t (id,a) values (865,44);
+insert into t (id,a) values (865,45);
+insert into t (id,a) values (865,46);
+insert into t (id,a) values (865,47);
+insert into t (id,a) values (865,48);
+insert into t (id,a) values (865,49);
+insert into t (id,a) values (865,50);
+insert into t (id,a) values (865,51);
+insert into t (id,a) values (865,52);
+insert into t (id,a) values (865,53);
+insert into t (id,a) values (865,54);
+insert into t (id,a) values (865,55);
+insert into t (id,a) values (865,56);
+insert into t (id,a) values (865,57);
+insert into t (id,a) values (865,58);
+insert into t (id,a) values (865,59);
+insert into t (id,a) values (865,60);
+insert into t (id,a) values (865,61);
+insert into t (id,a) values (865,62);
+insert into t (id,a) values (865,63);
+insert into t (id,a) values (865,64);
+insert into t (id,a) values (865,65);
+insert into t (id,a) values (865,66);
+insert into t (id,a) values (865,67);
+insert into t (id,a) values (865,68);
+insert into t (id,a) values (865,69);
+insert into t (id,a) values (865,70);
+insert into t (id,a) values (865,71);
+insert into t (id,a) values (865,72);
+insert into t (id,a) values (865,73);
+insert into t (id,a) values (865,74);
+insert into t (id,a) values (865,75);
+insert into t (id,a) values (865,76);
+insert into t (id,a) values (865,77);
+insert into t (id,a) values (865,78);
+insert into t (id,a) values (865,79);
+insert into t (id,a) values (865,80);
+insert into t (id,a) values (865,81);
+insert into t (id,a) values (865,82);
+insert into t (id,a) values (865,83);
+insert into t (id,a) values (865,84);
+insert into t (id,a) values (865,85);
+insert into t (id,a) values (865,86);
+insert into t (id,a) values (865,87);
+insert into t (id,a) values (865,88);
+insert into t (id,a) values (865,89);
+insert into t (id,a) values (865,90);
+insert into t (id,a) values (865,91);
+insert into t (id,a) values (865,92);
+insert into t (id,a) values (865,93);
+insert into t (id,a) values (865,94);
+insert into t (id,a) values (865,95);
+insert into t (id,a) values (865,96);
+insert into t (id,a) values (865,97);
+insert into t (id,a) values (865,98);
+insert into t (id,a) values (865,99);
+insert into t (id,a) values (866,0);
+insert into t (id,a) values (866,1);
+insert into t (id,a) values (866,2);
+insert into t (id,a) values (866,3);
+insert into t (id,a) values (866,4);
+insert into t (id,a) values (866,5);
+insert into t (id,a) values (866,6);
+insert into t (id,a) values (866,7);
+insert into t (id,a) values (866,8);
+insert into t (id,a) values (866,9);
+insert into t (id,a) values (866,10);
+insert into t (id,a) values (866,11);
+insert into t (id,a) values (866,12);
+insert into t (id,a) values (866,13);
+insert into t (id,a) values (866,14);
+insert into t (id,a) values (866,15);
+insert into t (id,a) values (866,16);
+insert into t (id,a) values (866,17);
+insert into t (id,a) values (866,18);
+insert into t (id,a) values (866,19);
+insert into t (id,a) values (866,20);
+insert into t (id,a) values (866,21);
+insert into t (id,a) values (866,22);
+insert into t (id,a) values (866,23);
+insert into t (id,a) values (866,24);
+insert into t (id,a) values (866,25);
+insert into t (id,a) values (866,26);
+insert into t (id,a) values (866,27);
+insert into t (id,a) values (866,28);
+insert into t (id,a) values (866,29);
+insert into t (id,a) values (866,30);
+insert into t (id,a) values (866,31);
+insert into t (id,a) values (866,32);
+insert into t (id,a) values (866,33);
+insert into t (id,a) values (866,34);
+insert into t (id,a) values (866,35);
+insert into t (id,a) values (866,36);
+insert into t (id,a) values (866,37);
+insert into t (id,a) values (866,38);
+insert into t (id,a) values (866,39);
+insert into t (id,a) values (866,40);
+insert into t (id,a) values (866,41);
+insert into t (id,a) values (866,42);
+insert into t (id,a) values (866,43);
+insert into t (id,a) values (866,44);
+insert into t (id,a) values (866,45);
+insert into t (id,a) values (866,46);
+insert into t (id,a) values (866,47);
+insert into t (id,a) values (866,48);
+insert into t (id,a) values (866,49);
+insert into t (id,a) values (866,50);
+insert into t (id,a) values (866,51);
+insert into t (id,a) values (866,52);
+insert into t (id,a) values (866,53);
+insert into t (id,a) values (866,54);
+insert into t (id,a) values (866,55);
+insert into t (id,a) values (866,56);
+insert into t (id,a) values (866,57);
+insert into t (id,a) values (866,58);
+insert into t (id,a) values (866,59);
+insert into t (id,a) values (866,60);
+insert into t (id,a) values (866,61);
+insert into t (id,a) values (866,62);
+insert into t (id,a) values (866,63);
+insert into t (id,a) values (866,64);
+insert into t (id,a) values (866,65);
+insert into t (id,a) values (866,66);
+insert into t (id,a) values (866,67);
+insert into t (id,a) values (866,68);
+insert into t (id,a) values (866,69);
+insert into t (id,a) values (866,70);
+insert into t (id,a) values (866,71);
+insert into t (id,a) values (866,72);
+insert into t (id,a) values (866,73);
+insert into t (id,a) values (866,74);
+insert into t (id,a) values (866,75);
+insert into t (id,a) values (866,76);
+insert into t (id,a) values (866,77);
+insert into t (id,a) values (866,78);
+insert into t (id,a) values (866,79);
+insert into t (id,a) values (866,80);
+insert into t (id,a) values (866,81);
+insert into t (id,a) values (866,82);
+insert into t (id,a) values (866,83);
+insert into t (id,a) values (866,84);
+insert into t (id,a) values (866,85);
+insert into t (id,a) values (866,86);
+insert into t (id,a) values (866,87);
+insert into t (id,a) values (866,88);
+insert into t (id,a) values (866,89);
+insert into t (id,a) values (866,90);
+insert into t (id,a) values (866,91);
+insert into t (id,a) values (866,92);
+insert into t (id,a) values (866,93);
+insert into t (id,a) values (866,94);
+insert into t (id,a) values (866,95);
+insert into t (id,a) values (866,96);
+insert into t (id,a) values (866,97);
+insert into t (id,a) values (866,98);
+insert into t (id,a) values (866,99);
+insert into t (id,a) values (867,0);
+insert into t (id,a) values (867,1);
+insert into t (id,a) values (867,2);
+insert into t (id,a) values (867,3);
+insert into t (id,a) values (867,4);
+insert into t (id,a) values (867,5);
+insert into t (id,a) values (867,6);
+insert into t (id,a) values (867,7);
+insert into t (id,a) values (867,8);
+insert into t (id,a) values (867,9);
+insert into t (id,a) values (867,10);
+insert into t (id,a) values (867,11);
+insert into t (id,a) values (867,12);
+insert into t (id,a) values (867,13);
+insert into t (id,a) values (867,14);
+insert into t (id,a) values (867,15);
+insert into t (id,a) values (867,16);
+insert into t (id,a) values (867,17);
+insert into t (id,a) values (867,18);
+insert into t (id,a) values (867,19);
+insert into t (id,a) values (867,20);
+insert into t (id,a) values (867,21);
+insert into t (id,a) values (867,22);
+insert into t (id,a) values (867,23);
+insert into t (id,a) values (867,24);
+insert into t (id,a) values (867,25);
+insert into t (id,a) values (867,26);
+insert into t (id,a) values (867,27);
+insert into t (id,a) values (867,28);
+insert into t (id,a) values (867,29);
+insert into t (id,a) values (867,30);
+insert into t (id,a) values (867,31);
+insert into t (id,a) values (867,32);
+insert into t (id,a) values (867,33);
+insert into t (id,a) values (867,34);
+insert into t (id,a) values (867,35);
+insert into t (id,a) values (867,36);
+insert into t (id,a) values (867,37);
+insert into t (id,a) values (867,38);
+insert into t (id,a) values (867,39);
+insert into t (id,a) values (867,40);
+insert into t (id,a) values (867,41);
+insert into t (id,a) values (867,42);
+insert into t (id,a) values (867,43);
+insert into t (id,a) values (867,44);
+insert into t (id,a) values (867,45);
+insert into t (id,a) values (867,46);
+insert into t (id,a) values (867,47);
+insert into t (id,a) values (867,48);
+insert into t (id,a) values (867,49);
+insert into t (id,a) values (867,50);
+insert into t (id,a) values (867,51);
+insert into t (id,a) values (867,52);
+insert into t (id,a) values (867,53);
+insert into t (id,a) values (867,54);
+insert into t (id,a) values (867,55);
+insert into t (id,a) values (867,56);
+insert into t (id,a) values (867,57);
+insert into t (id,a) values (867,58);
+insert into t (id,a) values (867,59);
+insert into t (id,a) values (867,60);
+insert into t (id,a) values (867,61);
+insert into t (id,a) values (867,62);
+insert into t (id,a) values (867,63);
+insert into t (id,a) values (867,64);
+insert into t (id,a) values (867,65);
+insert into t (id,a) values (867,66);
+insert into t (id,a) values (867,67);
+insert into t (id,a) values (867,68);
+insert into t (id,a) values (867,69);
+insert into t (id,a) values (867,70);
+insert into t (id,a) values (867,71);
+insert into t (id,a) values (867,72);
+insert into t (id,a) values (867,73);
+insert into t (id,a) values (867,74);
+insert into t (id,a) values (867,75);
+insert into t (id,a) values (867,76);
+insert into t (id,a) values (867,77);
+insert into t (id,a) values (867,78);
+insert into t (id,a) values (867,79);
+insert into t (id,a) values (867,80);
+insert into t (id,a) values (867,81);
+insert into t (id,a) values (867,82);
+insert into t (id,a) values (867,83);
+insert into t (id,a) values (867,84);
+insert into t (id,a) values (867,85);
+insert into t (id,a) values (867,86);
+insert into t (id,a) values (867,87);
+insert into t (id,a) values (867,88);
+insert into t (id,a) values (867,89);
+insert into t (id,a) values (867,90);
+insert into t (id,a) values (867,91);
+insert into t (id,a) values (867,92);
+insert into t (id,a) values (867,93);
+insert into t (id,a) values (867,94);
+insert into t (id,a) values (867,95);
+insert into t (id,a) values (867,96);
+insert into t (id,a) values (867,97);
+insert into t (id,a) values (867,98);
+insert into t (id,a) values (867,99);
+insert into t (id,a) values (868,0);
+insert into t (id,a) values (868,1);
+insert into t (id,a) values (868,2);
+insert into t (id,a) values (868,3);
+insert into t (id,a) values (868,4);
+insert into t (id,a) values (868,5);
+insert into t (id,a) values (868,6);
+insert into t (id,a) values (868,7);
+insert into t (id,a) values (868,8);
+insert into t (id,a) values (868,9);
+insert into t (id,a) values (868,10);
+insert into t (id,a) values (868,11);
+insert into t (id,a) values (868,12);
+insert into t (id,a) values (868,13);
+insert into t (id,a) values (868,14);
+insert into t (id,a) values (868,15);
+insert into t (id,a) values (868,16);
+insert into t (id,a) values (868,17);
+insert into t (id,a) values (868,18);
+insert into t (id,a) values (868,19);
+insert into t (id,a) values (868,20);
+insert into t (id,a) values (868,21);
+insert into t (id,a) values (868,22);
+insert into t (id,a) values (868,23);
+insert into t (id,a) values (868,24);
+insert into t (id,a) values (868,25);
+insert into t (id,a) values (868,26);
+insert into t (id,a) values (868,27);
+insert into t (id,a) values (868,28);
+insert into t (id,a) values (868,29);
+insert into t (id,a) values (868,30);
+insert into t (id,a) values (868,31);
+insert into t (id,a) values (868,32);
+insert into t (id,a) values (868,33);
+insert into t (id,a) values (868,34);
+insert into t (id,a) values (868,35);
+insert into t (id,a) values (868,36);
+insert into t (id,a) values (868,37);
+insert into t (id,a) values (868,38);
+insert into t (id,a) values (868,39);
+insert into t (id,a) values (868,40);
+insert into t (id,a) values (868,41);
+insert into t (id,a) values (868,42);
+insert into t (id,a) values (868,43);
+insert into t (id,a) values (868,44);
+insert into t (id,a) values (868,45);
+insert into t (id,a) values (868,46);
+insert into t (id,a) values (868,47);
+insert into t (id,a) values (868,48);
+insert into t (id,a) values (868,49);
+insert into t (id,a) values (868,50);
+insert into t (id,a) values (868,51);
+insert into t (id,a) values (868,52);
+insert into t (id,a) values (868,53);
+insert into t (id,a) values (868,54);
+insert into t (id,a) values (868,55);
+insert into t (id,a) values (868,56);
+insert into t (id,a) values (868,57);
+insert into t (id,a) values (868,58);
+insert into t (id,a) values (868,59);
+insert into t (id,a) values (868,60);
+insert into t (id,a) values (868,61);
+insert into t (id,a) values (868,62);
+insert into t (id,a) values (868,63);
+insert into t (id,a) values (868,64);
+insert into t (id,a) values (868,65);
+insert into t (id,a) values (868,66);
+insert into t (id,a) values (868,67);
+insert into t (id,a) values (868,68);
+insert into t (id,a) values (868,69);
+insert into t (id,a) values (868,70);
+insert into t (id,a) values (868,71);
+insert into t (id,a) values (868,72);
+insert into t (id,a) values (868,73);
+insert into t (id,a) values (868,74);
+insert into t (id,a) values (868,75);
+insert into t (id,a) values (868,76);
+insert into t (id,a) values (868,77);
+insert into t (id,a) values (868,78);
+insert into t (id,a) values (868,79);
+insert into t (id,a) values (868,80);
+insert into t (id,a) values (868,81);
+insert into t (id,a) values (868,82);
+insert into t (id,a) values (868,83);
+insert into t (id,a) values (868,84);
+insert into t (id,a) values (868,85);
+insert into t (id,a) values (868,86);
+insert into t (id,a) values (868,87);
+insert into t (id,a) values (868,88);
+insert into t (id,a) values (868,89);
+insert into t (id,a) values (868,90);
+insert into t (id,a) values (868,91);
+insert into t (id,a) values (868,92);
+insert into t (id,a) values (868,93);
+insert into t (id,a) values (868,94);
+insert into t (id,a) values (868,95);
+insert into t (id,a) values (868,96);
+insert into t (id,a) values (868,97);
+insert into t (id,a) values (868,98);
+insert into t (id,a) values (868,99);
+insert into t (id,a) values (869,0);
+insert into t (id,a) values (869,1);
+insert into t (id,a) values (869,2);
+insert into t (id,a) values (869,3);
+insert into t (id,a) values (869,4);
+insert into t (id,a) values (869,5);
+insert into t (id,a) values (869,6);
+insert into t (id,a) values (869,7);
+insert into t (id,a) values (869,8);
+insert into t (id,a) values (869,9);
+insert into t (id,a) values (869,10);
+insert into t (id,a) values (869,11);
+insert into t (id,a) values (869,12);
+insert into t (id,a) values (869,13);
+insert into t (id,a) values (869,14);
+insert into t (id,a) values (869,15);
+insert into t (id,a) values (869,16);
+insert into t (id,a) values (869,17);
+insert into t (id,a) values (869,18);
+insert into t (id,a) values (869,19);
+insert into t (id,a) values (869,20);
+insert into t (id,a) values (869,21);
+insert into t (id,a) values (869,22);
+insert into t (id,a) values (869,23);
+insert into t (id,a) values (869,24);
+insert into t (id,a) values (869,25);
+insert into t (id,a) values (869,26);
+insert into t (id,a) values (869,27);
+insert into t (id,a) values (869,28);
+insert into t (id,a) values (869,29);
+insert into t (id,a) values (869,30);
+insert into t (id,a) values (869,31);
+insert into t (id,a) values (869,32);
+insert into t (id,a) values (869,33);
+insert into t (id,a) values (869,34);
+insert into t (id,a) values (869,35);
+insert into t (id,a) values (869,36);
+insert into t (id,a) values (869,37);
+insert into t (id,a) values (869,38);
+insert into t (id,a) values (869,39);
+insert into t (id,a) values (869,40);
+insert into t (id,a) values (869,41);
+insert into t (id,a) values (869,42);
+insert into t (id,a) values (869,43);
+insert into t (id,a) values (869,44);
+insert into t (id,a) values (869,45);
+insert into t (id,a) values (869,46);
+insert into t (id,a) values (869,47);
+insert into t (id,a) values (869,48);
+insert into t (id,a) values (869,49);
+insert into t (id,a) values (869,50);
+insert into t (id,a) values (869,51);
+insert into t (id,a) values (869,52);
+insert into t (id,a) values (869,53);
+insert into t (id,a) values (869,54);
+insert into t (id,a) values (869,55);
+insert into t (id,a) values (869,56);
+insert into t (id,a) values (869,57);
+insert into t (id,a) values (869,58);
+insert into t (id,a) values (869,59);
+insert into t (id,a) values (869,60);
+insert into t (id,a) values (869,61);
+insert into t (id,a) values (869,62);
+insert into t (id,a) values (869,63);
+insert into t (id,a) values (869,64);
+insert into t (id,a) values (869,65);
+insert into t (id,a) values (869,66);
+insert into t (id,a) values (869,67);
+insert into t (id,a) values (869,68);
+insert into t (id,a) values (869,69);
+insert into t (id,a) values (869,70);
+insert into t (id,a) values (869,71);
+insert into t (id,a) values (869,72);
+insert into t (id,a) values (869,73);
+insert into t (id,a) values (869,74);
+insert into t (id,a) values (869,75);
+insert into t (id,a) values (869,76);
+insert into t (id,a) values (869,77);
+insert into t (id,a) values (869,78);
+insert into t (id,a) values (869,79);
+insert into t (id,a) values (869,80);
+insert into t (id,a) values (869,81);
+insert into t (id,a) values (869,82);
+insert into t (id,a) values (869,83);
+insert into t (id,a) values (869,84);
+insert into t (id,a) values (869,85);
+insert into t (id,a) values (869,86);
+insert into t (id,a) values (869,87);
+insert into t (id,a) values (869,88);
+insert into t (id,a) values (869,89);
+insert into t (id,a) values (869,90);
+insert into t (id,a) values (869,91);
+insert into t (id,a) values (869,92);
+insert into t (id,a) values (869,93);
+insert into t (id,a) values (869,94);
+insert into t (id,a) values (869,95);
+insert into t (id,a) values (869,96);
+insert into t (id,a) values (869,97);
+insert into t (id,a) values (869,98);
+insert into t (id,a) values (869,99);
+insert into t (id,a) values (870,0);
+insert into t (id,a) values (870,1);
+insert into t (id,a) values (870,2);
+insert into t (id,a) values (870,3);
+insert into t (id,a) values (870,4);
+insert into t (id,a) values (870,5);
+insert into t (id,a) values (870,6);
+insert into t (id,a) values (870,7);
+insert into t (id,a) values (870,8);
+insert into t (id,a) values (870,9);
+insert into t (id,a) values (870,10);
+insert into t (id,a) values (870,11);
+insert into t (id,a) values (870,12);
+insert into t (id,a) values (870,13);
+insert into t (id,a) values (870,14);
+insert into t (id,a) values (870,15);
+insert into t (id,a) values (870,16);
+insert into t (id,a) values (870,17);
+insert into t (id,a) values (870,18);
+insert into t (id,a) values (870,19);
+insert into t (id,a) values (870,20);
+insert into t (id,a) values (870,21);
+insert into t (id,a) values (870,22);
+insert into t (id,a) values (870,23);
+insert into t (id,a) values (870,24);
+insert into t (id,a) values (870,25);
+insert into t (id,a) values (870,26);
+insert into t (id,a) values (870,27);
+insert into t (id,a) values (870,28);
+insert into t (id,a) values (870,29);
+insert into t (id,a) values (870,30);
+insert into t (id,a) values (870,31);
+insert into t (id,a) values (870,32);
+insert into t (id,a) values (870,33);
+insert into t (id,a) values (870,34);
+insert into t (id,a) values (870,35);
+insert into t (id,a) values (870,36);
+insert into t (id,a) values (870,37);
+insert into t (id,a) values (870,38);
+insert into t (id,a) values (870,39);
+insert into t (id,a) values (870,40);
+insert into t (id,a) values (870,41);
+insert into t (id,a) values (870,42);
+insert into t (id,a) values (870,43);
+insert into t (id,a) values (870,44);
+insert into t (id,a) values (870,45);
+insert into t (id,a) values (870,46);
+insert into t (id,a) values (870,47);
+insert into t (id,a) values (870,48);
+insert into t (id,a) values (870,49);
+insert into t (id,a) values (870,50);
+insert into t (id,a) values (870,51);
+insert into t (id,a) values (870,52);
+insert into t (id,a) values (870,53);
+insert into t (id,a) values (870,54);
+insert into t (id,a) values (870,55);
+insert into t (id,a) values (870,56);
+insert into t (id,a) values (870,57);
+insert into t (id,a) values (870,58);
+insert into t (id,a) values (870,59);
+insert into t (id,a) values (870,60);
+insert into t (id,a) values (870,61);
+insert into t (id,a) values (870,62);
+insert into t (id,a) values (870,63);
+insert into t (id,a) values (870,64);
+insert into t (id,a) values (870,65);
+insert into t (id,a) values (870,66);
+insert into t (id,a) values (870,67);
+insert into t (id,a) values (870,68);
+insert into t (id,a) values (870,69);
+insert into t (id,a) values (870,70);
+insert into t (id,a) values (870,71);
+insert into t (id,a) values (870,72);
+insert into t (id,a) values (870,73);
+insert into t (id,a) values (870,74);
+insert into t (id,a) values (870,75);
+insert into t (id,a) values (870,76);
+insert into t (id,a) values (870,77);
+insert into t (id,a) values (870,78);
+insert into t (id,a) values (870,79);
+insert into t (id,a) values (870,80);
+insert into t (id,a) values (870,81);
+insert into t (id,a) values (870,82);
+insert into t (id,a) values (870,83);
+insert into t (id,a) values (870,84);
+insert into t (id,a) values (870,85);
+insert into t (id,a) values (870,86);
+insert into t (id,a) values (870,87);
+insert into t (id,a) values (870,88);
+insert into t (id,a) values (870,89);
+insert into t (id,a) values (870,90);
+insert into t (id,a) values (870,91);
+insert into t (id,a) values (870,92);
+insert into t (id,a) values (870,93);
+insert into t (id,a) values (870,94);
+insert into t (id,a) values (870,95);
+insert into t (id,a) values (870,96);
+insert into t (id,a) values (870,97);
+insert into t (id,a) values (870,98);
+insert into t (id,a) values (870,99);
+insert into t (id,a) values (871,0);
+insert into t (id,a) values (871,1);
+insert into t (id,a) values (871,2);
+insert into t (id,a) values (871,3);
+insert into t (id,a) values (871,4);
+insert into t (id,a) values (871,5);
+insert into t (id,a) values (871,6);
+insert into t (id,a) values (871,7);
+insert into t (id,a) values (871,8);
+insert into t (id,a) values (871,9);
+insert into t (id,a) values (871,10);
+insert into t (id,a) values (871,11);
+insert into t (id,a) values (871,12);
+insert into t (id,a) values (871,13);
+insert into t (id,a) values (871,14);
+insert into t (id,a) values (871,15);
+insert into t (id,a) values (871,16);
+insert into t (id,a) values (871,17);
+insert into t (id,a) values (871,18);
+insert into t (id,a) values (871,19);
+insert into t (id,a) values (871,20);
+insert into t (id,a) values (871,21);
+insert into t (id,a) values (871,22);
+insert into t (id,a) values (871,23);
+insert into t (id,a) values (871,24);
+insert into t (id,a) values (871,25);
+insert into t (id,a) values (871,26);
+insert into t (id,a) values (871,27);
+insert into t (id,a) values (871,28);
+insert into t (id,a) values (871,29);
+insert into t (id,a) values (871,30);
+insert into t (id,a) values (871,31);
+insert into t (id,a) values (871,32);
+insert into t (id,a) values (871,33);
+insert into t (id,a) values (871,34);
+insert into t (id,a) values (871,35);
+insert into t (id,a) values (871,36);
+insert into t (id,a) values (871,37);
+insert into t (id,a) values (871,38);
+insert into t (id,a) values (871,39);
+insert into t (id,a) values (871,40);
+insert into t (id,a) values (871,41);
+insert into t (id,a) values (871,42);
+insert into t (id,a) values (871,43);
+insert into t (id,a) values (871,44);
+insert into t (id,a) values (871,45);
+insert into t (id,a) values (871,46);
+insert into t (id,a) values (871,47);
+insert into t (id,a) values (871,48);
+insert into t (id,a) values (871,49);
+insert into t (id,a) values (871,50);
+insert into t (id,a) values (871,51);
+insert into t (id,a) values (871,52);
+insert into t (id,a) values (871,53);
+insert into t (id,a) values (871,54);
+insert into t (id,a) values (871,55);
+insert into t (id,a) values (871,56);
+insert into t (id,a) values (871,57);
+insert into t (id,a) values (871,58);
+insert into t (id,a) values (871,59);
+insert into t (id,a) values (871,60);
+insert into t (id,a) values (871,61);
+insert into t (id,a) values (871,62);
+insert into t (id,a) values (871,63);
+insert into t (id,a) values (871,64);
+insert into t (id,a) values (871,65);
+insert into t (id,a) values (871,66);
+insert into t (id,a) values (871,67);
+insert into t (id,a) values (871,68);
+insert into t (id,a) values (871,69);
+insert into t (id,a) values (871,70);
+insert into t (id,a) values (871,71);
+insert into t (id,a) values (871,72);
+insert into t (id,a) values (871,73);
+insert into t (id,a) values (871,74);
+insert into t (id,a) values (871,75);
+insert into t (id,a) values (871,76);
+insert into t (id,a) values (871,77);
+insert into t (id,a) values (871,78);
+insert into t (id,a) values (871,79);
+insert into t (id,a) values (871,80);
+insert into t (id,a) values (871,81);
+insert into t (id,a) values (871,82);
+insert into t (id,a) values (871,83);
+insert into t (id,a) values (871,84);
+insert into t (id,a) values (871,85);
+insert into t (id,a) values (871,86);
+insert into t (id,a) values (871,87);
+insert into t (id,a) values (871,88);
+insert into t (id,a) values (871,89);
+insert into t (id,a) values (871,90);
+insert into t (id,a) values (871,91);
+insert into t (id,a) values (871,92);
+insert into t (id,a) values (871,93);
+insert into t (id,a) values (871,94);
+insert into t (id,a) values (871,95);
+insert into t (id,a) values (871,96);
+insert into t (id,a) values (871,97);
+insert into t (id,a) values (871,98);
+insert into t (id,a) values (871,99);
+insert into t (id,a) values (872,0);
+insert into t (id,a) values (872,1);
+insert into t (id,a) values (872,2);
+insert into t (id,a) values (872,3);
+insert into t (id,a) values (872,4);
+insert into t (id,a) values (872,5);
+insert into t (id,a) values (872,6);
+insert into t (id,a) values (872,7);
+insert into t (id,a) values (872,8);
+insert into t (id,a) values (872,9);
+insert into t (id,a) values (872,10);
+insert into t (id,a) values (872,11);
+insert into t (id,a) values (872,12);
+insert into t (id,a) values (872,13);
+insert into t (id,a) values (872,14);
+insert into t (id,a) values (872,15);
+insert into t (id,a) values (872,16);
+insert into t (id,a) values (872,17);
+insert into t (id,a) values (872,18);
+insert into t (id,a) values (872,19);
+insert into t (id,a) values (872,20);
+insert into t (id,a) values (872,21);
+insert into t (id,a) values (872,22);
+insert into t (id,a) values (872,23);
+insert into t (id,a) values (872,24);
+insert into t (id,a) values (872,25);
+insert into t (id,a) values (872,26);
+insert into t (id,a) values (872,27);
+insert into t (id,a) values (872,28);
+insert into t (id,a) values (872,29);
+insert into t (id,a) values (872,30);
+insert into t (id,a) values (872,31);
+insert into t (id,a) values (872,32);
+insert into t (id,a) values (872,33);
+insert into t (id,a) values (872,34);
+insert into t (id,a) values (872,35);
+insert into t (id,a) values (872,36);
+insert into t (id,a) values (872,37);
+insert into t (id,a) values (872,38);
+insert into t (id,a) values (872,39);
+insert into t (id,a) values (872,40);
+insert into t (id,a) values (872,41);
+insert into t (id,a) values (872,42);
+insert into t (id,a) values (872,43);
+insert into t (id,a) values (872,44);
+insert into t (id,a) values (872,45);
+insert into t (id,a) values (872,46);
+insert into t (id,a) values (872,47);
+insert into t (id,a) values (872,48);
+insert into t (id,a) values (872,49);
+insert into t (id,a) values (872,50);
+insert into t (id,a) values (872,51);
+insert into t (id,a) values (872,52);
+insert into t (id,a) values (872,53);
+insert into t (id,a) values (872,54);
+insert into t (id,a) values (872,55);
+insert into t (id,a) values (872,56);
+insert into t (id,a) values (872,57);
+insert into t (id,a) values (872,58);
+insert into t (id,a) values (872,59);
+insert into t (id,a) values (872,60);
+insert into t (id,a) values (872,61);
+insert into t (id,a) values (872,62);
+insert into t (id,a) values (872,63);
+insert into t (id,a) values (872,64);
+insert into t (id,a) values (872,65);
+insert into t (id,a) values (872,66);
+insert into t (id,a) values (872,67);
+insert into t (id,a) values (872,68);
+insert into t (id,a) values (872,69);
+insert into t (id,a) values (872,70);
+insert into t (id,a) values (872,71);
+insert into t (id,a) values (872,72);
+insert into t (id,a) values (872,73);
+insert into t (id,a) values (872,74);
+insert into t (id,a) values (872,75);
+insert into t (id,a) values (872,76);
+insert into t (id,a) values (872,77);
+insert into t (id,a) values (872,78);
+insert into t (id,a) values (872,79);
+insert into t (id,a) values (872,80);
+insert into t (id,a) values (872,81);
+insert into t (id,a) values (872,82);
+insert into t (id,a) values (872,83);
+insert into t (id,a) values (872,84);
+insert into t (id,a) values (872,85);
+insert into t (id,a) values (872,86);
+insert into t (id,a) values (872,87);
+insert into t (id,a) values (872,88);
+insert into t (id,a) values (872,89);
+insert into t (id,a) values (872,90);
+insert into t (id,a) values (872,91);
+insert into t (id,a) values (872,92);
+insert into t (id,a) values (872,93);
+insert into t (id,a) values (872,94);
+insert into t (id,a) values (872,95);
+insert into t (id,a) values (872,96);
+insert into t (id,a) values (872,97);
+insert into t (id,a) values (872,98);
+insert into t (id,a) values (872,99);
+insert into t (id,a) values (873,0);
+insert into t (id,a) values (873,1);
+insert into t (id,a) values (873,2);
+insert into t (id,a) values (873,3);
+insert into t (id,a) values (873,4);
+insert into t (id,a) values (873,5);
+insert into t (id,a) values (873,6);
+insert into t (id,a) values (873,7);
+insert into t (id,a) values (873,8);
+insert into t (id,a) values (873,9);
+insert into t (id,a) values (873,10);
+insert into t (id,a) values (873,11);
+insert into t (id,a) values (873,12);
+insert into t (id,a) values (873,13);
+insert into t (id,a) values (873,14);
+insert into t (id,a) values (873,15);
+insert into t (id,a) values (873,16);
+insert into t (id,a) values (873,17);
+insert into t (id,a) values (873,18);
+insert into t (id,a) values (873,19);
+insert into t (id,a) values (873,20);
+insert into t (id,a) values (873,21);
+insert into t (id,a) values (873,22);
+insert into t (id,a) values (873,23);
+insert into t (id,a) values (873,24);
+insert into t (id,a) values (873,25);
+insert into t (id,a) values (873,26);
+insert into t (id,a) values (873,27);
+insert into t (id,a) values (873,28);
+insert into t (id,a) values (873,29);
+insert into t (id,a) values (873,30);
+insert into t (id,a) values (873,31);
+insert into t (id,a) values (873,32);
+insert into t (id,a) values (873,33);
+insert into t (id,a) values (873,34);
+insert into t (id,a) values (873,35);
+insert into t (id,a) values (873,36);
+insert into t (id,a) values (873,37);
+insert into t (id,a) values (873,38);
+insert into t (id,a) values (873,39);
+insert into t (id,a) values (873,40);
+insert into t (id,a) values (873,41);
+insert into t (id,a) values (873,42);
+insert into t (id,a) values (873,43);
+insert into t (id,a) values (873,44);
+insert into t (id,a) values (873,45);
+insert into t (id,a) values (873,46);
+insert into t (id,a) values (873,47);
+insert into t (id,a) values (873,48);
+insert into t (id,a) values (873,49);
+insert into t (id,a) values (873,50);
+insert into t (id,a) values (873,51);
+insert into t (id,a) values (873,52);
+insert into t (id,a) values (873,53);
+insert into t (id,a) values (873,54);
+insert into t (id,a) values (873,55);
+insert into t (id,a) values (873,56);
+insert into t (id,a) values (873,57);
+insert into t (id,a) values (873,58);
+insert into t (id,a) values (873,59);
+insert into t (id,a) values (873,60);
+insert into t (id,a) values (873,61);
+insert into t (id,a) values (873,62);
+insert into t (id,a) values (873,63);
+insert into t (id,a) values (873,64);
+insert into t (id,a) values (873,65);
+insert into t (id,a) values (873,66);
+insert into t (id,a) values (873,67);
+insert into t (id,a) values (873,68);
+insert into t (id,a) values (873,69);
+insert into t (id,a) values (873,70);
+insert into t (id,a) values (873,71);
+insert into t (id,a) values (873,72);
+insert into t (id,a) values (873,73);
+insert into t (id,a) values (873,74);
+insert into t (id,a) values (873,75);
+insert into t (id,a) values (873,76);
+insert into t (id,a) values (873,77);
+insert into t (id,a) values (873,78);
+insert into t (id,a) values (873,79);
+insert into t (id,a) values (873,80);
+insert into t (id,a) values (873,81);
+insert into t (id,a) values (873,82);
+insert into t (id,a) values (873,83);
+insert into t (id,a) values (873,84);
+insert into t (id,a) values (873,85);
+insert into t (id,a) values (873,86);
+insert into t (id,a) values (873,87);
+insert into t (id,a) values (873,88);
+insert into t (id,a) values (873,89);
+insert into t (id,a) values (873,90);
+insert into t (id,a) values (873,91);
+insert into t (id,a) values (873,92);
+insert into t (id,a) values (873,93);
+insert into t (id,a) values (873,94);
+insert into t (id,a) values (873,95);
+insert into t (id,a) values (873,96);
+insert into t (id,a) values (873,97);
+insert into t (id,a) values (873,98);
+insert into t (id,a) values (873,99);
+insert into t (id,a) values (874,0);
+insert into t (id,a) values (874,1);
+insert into t (id,a) values (874,2);
+insert into t (id,a) values (874,3);
+insert into t (id,a) values (874,4);
+insert into t (id,a) values (874,5);
+insert into t (id,a) values (874,6);
+insert into t (id,a) values (874,7);
+insert into t (id,a) values (874,8);
+insert into t (id,a) values (874,9);
+insert into t (id,a) values (874,10);
+insert into t (id,a) values (874,11);
+insert into t (id,a) values (874,12);
+insert into t (id,a) values (874,13);
+insert into t (id,a) values (874,14);
+insert into t (id,a) values (874,15);
+insert into t (id,a) values (874,16);
+insert into t (id,a) values (874,17);
+insert into t (id,a) values (874,18);
+insert into t (id,a) values (874,19);
+insert into t (id,a) values (874,20);
+insert into t (id,a) values (874,21);
+insert into t (id,a) values (874,22);
+insert into t (id,a) values (874,23);
+insert into t (id,a) values (874,24);
+insert into t (id,a) values (874,25);
+insert into t (id,a) values (874,26);
+insert into t (id,a) values (874,27);
+insert into t (id,a) values (874,28);
+insert into t (id,a) values (874,29);
+insert into t (id,a) values (874,30);
+insert into t (id,a) values (874,31);
+insert into t (id,a) values (874,32);
+insert into t (id,a) values (874,33);
+insert into t (id,a) values (874,34);
+insert into t (id,a) values (874,35);
+insert into t (id,a) values (874,36);
+insert into t (id,a) values (874,37);
+insert into t (id,a) values (874,38);
+insert into t (id,a) values (874,39);
+insert into t (id,a) values (874,40);
+insert into t (id,a) values (874,41);
+insert into t (id,a) values (874,42);
+insert into t (id,a) values (874,43);
+insert into t (id,a) values (874,44);
+insert into t (id,a) values (874,45);
+insert into t (id,a) values (874,46);
+insert into t (id,a) values (874,47);
+insert into t (id,a) values (874,48);
+insert into t (id,a) values (874,49);
+insert into t (id,a) values (874,50);
+insert into t (id,a) values (874,51);
+insert into t (id,a) values (874,52);
+insert into t (id,a) values (874,53);
+insert into t (id,a) values (874,54);
+insert into t (id,a) values (874,55);
+insert into t (id,a) values (874,56);
+insert into t (id,a) values (874,57);
+insert into t (id,a) values (874,58);
+insert into t (id,a) values (874,59);
+insert into t (id,a) values (874,60);
+insert into t (id,a) values (874,61);
+insert into t (id,a) values (874,62);
+insert into t (id,a) values (874,63);
+insert into t (id,a) values (874,64);
+insert into t (id,a) values (874,65);
+insert into t (id,a) values (874,66);
+insert into t (id,a) values (874,67);
+insert into t (id,a) values (874,68);
+insert into t (id,a) values (874,69);
+insert into t (id,a) values (874,70);
+insert into t (id,a) values (874,71);
+insert into t (id,a) values (874,72);
+insert into t (id,a) values (874,73);
+insert into t (id,a) values (874,74);
+insert into t (id,a) values (874,75);
+insert into t (id,a) values (874,76);
+insert into t (id,a) values (874,77);
+insert into t (id,a) values (874,78);
+insert into t (id,a) values (874,79);
+insert into t (id,a) values (874,80);
+insert into t (id,a) values (874,81);
+insert into t (id,a) values (874,82);
+insert into t (id,a) values (874,83);
+insert into t (id,a) values (874,84);
+insert into t (id,a) values (874,85);
+insert into t (id,a) values (874,86);
+insert into t (id,a) values (874,87);
+insert into t (id,a) values (874,88);
+insert into t (id,a) values (874,89);
+insert into t (id,a) values (874,90);
+insert into t (id,a) values (874,91);
+insert into t (id,a) values (874,92);
+insert into t (id,a) values (874,93);
+insert into t (id,a) values (874,94);
+insert into t (id,a) values (874,95);
+insert into t (id,a) values (874,96);
+insert into t (id,a) values (874,97);
+insert into t (id,a) values (874,98);
+insert into t (id,a) values (874,99);
+insert into t (id,a) values (875,0);
+insert into t (id,a) values (875,1);
+insert into t (id,a) values (875,2);
+insert into t (id,a) values (875,3);
+insert into t (id,a) values (875,4);
+insert into t (id,a) values (875,5);
+insert into t (id,a) values (875,6);
+insert into t (id,a) values (875,7);
+insert into t (id,a) values (875,8);
+insert into t (id,a) values (875,9);
+insert into t (id,a) values (875,10);
+insert into t (id,a) values (875,11);
+insert into t (id,a) values (875,12);
+insert into t (id,a) values (875,13);
+insert into t (id,a) values (875,14);
+insert into t (id,a) values (875,15);
+insert into t (id,a) values (875,16);
+insert into t (id,a) values (875,17);
+insert into t (id,a) values (875,18);
+insert into t (id,a) values (875,19);
+insert into t (id,a) values (875,20);
+insert into t (id,a) values (875,21);
+insert into t (id,a) values (875,22);
+insert into t (id,a) values (875,23);
+insert into t (id,a) values (875,24);
+insert into t (id,a) values (875,25);
+insert into t (id,a) values (875,26);
+insert into t (id,a) values (875,27);
+insert into t (id,a) values (875,28);
+insert into t (id,a) values (875,29);
+insert into t (id,a) values (875,30);
+insert into t (id,a) values (875,31);
+insert into t (id,a) values (875,32);
+insert into t (id,a) values (875,33);
+insert into t (id,a) values (875,34);
+insert into t (id,a) values (875,35);
+insert into t (id,a) values (875,36);
+insert into t (id,a) values (875,37);
+insert into t (id,a) values (875,38);
+insert into t (id,a) values (875,39);
+insert into t (id,a) values (875,40);
+insert into t (id,a) values (875,41);
+insert into t (id,a) values (875,42);
+insert into t (id,a) values (875,43);
+insert into t (id,a) values (875,44);
+insert into t (id,a) values (875,45);
+insert into t (id,a) values (875,46);
+insert into t (id,a) values (875,47);
+insert into t (id,a) values (875,48);
+insert into t (id,a) values (875,49);
+insert into t (id,a) values (875,50);
+insert into t (id,a) values (875,51);
+insert into t (id,a) values (875,52);
+insert into t (id,a) values (875,53);
+insert into t (id,a) values (875,54);
+insert into t (id,a) values (875,55);
+insert into t (id,a) values (875,56);
+insert into t (id,a) values (875,57);
+insert into t (id,a) values (875,58);
+insert into t (id,a) values (875,59);
+insert into t (id,a) values (875,60);
+insert into t (id,a) values (875,61);
+insert into t (id,a) values (875,62);
+insert into t (id,a) values (875,63);
+insert into t (id,a) values (875,64);
+insert into t (id,a) values (875,65);
+insert into t (id,a) values (875,66);
+insert into t (id,a) values (875,67);
+insert into t (id,a) values (875,68);
+insert into t (id,a) values (875,69);
+insert into t (id,a) values (875,70);
+insert into t (id,a) values (875,71);
+insert into t (id,a) values (875,72);
+insert into t (id,a) values (875,73);
+insert into t (id,a) values (875,74);
+insert into t (id,a) values (875,75);
+insert into t (id,a) values (875,76);
+insert into t (id,a) values (875,77);
+insert into t (id,a) values (875,78);
+insert into t (id,a) values (875,79);
+insert into t (id,a) values (875,80);
+insert into t (id,a) values (875,81);
+insert into t (id,a) values (875,82);
+insert into t (id,a) values (875,83);
+insert into t (id,a) values (875,84);
+insert into t (id,a) values (875,85);
+insert into t (id,a) values (875,86);
+insert into t (id,a) values (875,87);
+insert into t (id,a) values (875,88);
+insert into t (id,a) values (875,89);
+insert into t (id,a) values (875,90);
+insert into t (id,a) values (875,91);
+insert into t (id,a) values (875,92);
+insert into t (id,a) values (875,93);
+insert into t (id,a) values (875,94);
+insert into t (id,a) values (875,95);
+insert into t (id,a) values (875,96);
+insert into t (id,a) values (875,97);
+insert into t (id,a) values (875,98);
+insert into t (id,a) values (875,99);
+insert into t (id,a) values (876,0);
+insert into t (id,a) values (876,1);
+insert into t (id,a) values (876,2);
+insert into t (id,a) values (876,3);
+insert into t (id,a) values (876,4);
+insert into t (id,a) values (876,5);
+insert into t (id,a) values (876,6);
+insert into t (id,a) values (876,7);
+insert into t (id,a) values (876,8);
+insert into t (id,a) values (876,9);
+insert into t (id,a) values (876,10);
+insert into t (id,a) values (876,11);
+insert into t (id,a) values (876,12);
+insert into t (id,a) values (876,13);
+insert into t (id,a) values (876,14);
+insert into t (id,a) values (876,15);
+insert into t (id,a) values (876,16);
+insert into t (id,a) values (876,17);
+insert into t (id,a) values (876,18);
+insert into t (id,a) values (876,19);
+insert into t (id,a) values (876,20);
+insert into t (id,a) values (876,21);
+insert into t (id,a) values (876,22);
+insert into t (id,a) values (876,23);
+insert into t (id,a) values (876,24);
+insert into t (id,a) values (876,25);
+insert into t (id,a) values (876,26);
+insert into t (id,a) values (876,27);
+insert into t (id,a) values (876,28);
+insert into t (id,a) values (876,29);
+insert into t (id,a) values (876,30);
+insert into t (id,a) values (876,31);
+insert into t (id,a) values (876,32);
+insert into t (id,a) values (876,33);
+insert into t (id,a) values (876,34);
+insert into t (id,a) values (876,35);
+insert into t (id,a) values (876,36);
+insert into t (id,a) values (876,37);
+insert into t (id,a) values (876,38);
+insert into t (id,a) values (876,39);
+insert into t (id,a) values (876,40);
+insert into t (id,a) values (876,41);
+insert into t (id,a) values (876,42);
+insert into t (id,a) values (876,43);
+insert into t (id,a) values (876,44);
+insert into t (id,a) values (876,45);
+insert into t (id,a) values (876,46);
+insert into t (id,a) values (876,47);
+insert into t (id,a) values (876,48);
+insert into t (id,a) values (876,49);
+insert into t (id,a) values (876,50);
+insert into t (id,a) values (876,51);
+insert into t (id,a) values (876,52);
+insert into t (id,a) values (876,53);
+insert into t (id,a) values (876,54);
+insert into t (id,a) values (876,55);
+insert into t (id,a) values (876,56);
+insert into t (id,a) values (876,57);
+insert into t (id,a) values (876,58);
+insert into t (id,a) values (876,59);
+insert into t (id,a) values (876,60);
+insert into t (id,a) values (876,61);
+insert into t (id,a) values (876,62);
+insert into t (id,a) values (876,63);
+insert into t (id,a) values (876,64);
+insert into t (id,a) values (876,65);
+insert into t (id,a) values (876,66);
+insert into t (id,a) values (876,67);
+insert into t (id,a) values (876,68);
+insert into t (id,a) values (876,69);
+insert into t (id,a) values (876,70);
+insert into t (id,a) values (876,71);
+insert into t (id,a) values (876,72);
+insert into t (id,a) values (876,73);
+insert into t (id,a) values (876,74);
+insert into t (id,a) values (876,75);
+insert into t (id,a) values (876,76);
+insert into t (id,a) values (876,77);
+insert into t (id,a) values (876,78);
+insert into t (id,a) values (876,79);
+insert into t (id,a) values (876,80);
+insert into t (id,a) values (876,81);
+insert into t (id,a) values (876,82);
+insert into t (id,a) values (876,83);
+insert into t (id,a) values (876,84);
+insert into t (id,a) values (876,85);
+insert into t (id,a) values (876,86);
+insert into t (id,a) values (876,87);
+insert into t (id,a) values (876,88);
+insert into t (id,a) values (876,89);
+insert into t (id,a) values (876,90);
+insert into t (id,a) values (876,91);
+insert into t (id,a) values (876,92);
+insert into t (id,a) values (876,93);
+insert into t (id,a) values (876,94);
+insert into t (id,a) values (876,95);
+insert into t (id,a) values (876,96);
+insert into t (id,a) values (876,97);
+insert into t (id,a) values (876,98);
+insert into t (id,a) values (876,99);
+insert into t (id,a) values (877,0);
+insert into t (id,a) values (877,1);
+insert into t (id,a) values (877,2);
+insert into t (id,a) values (877,3);
+insert into t (id,a) values (877,4);
+insert into t (id,a) values (877,5);
+insert into t (id,a) values (877,6);
+insert into t (id,a) values (877,7);
+insert into t (id,a) values (877,8);
+insert into t (id,a) values (877,9);
+insert into t (id,a) values (877,10);
+insert into t (id,a) values (877,11);
+insert into t (id,a) values (877,12);
+insert into t (id,a) values (877,13);
+insert into t (id,a) values (877,14);
+insert into t (id,a) values (877,15);
+insert into t (id,a) values (877,16);
+insert into t (id,a) values (877,17);
+insert into t (id,a) values (877,18);
+insert into t (id,a) values (877,19);
+insert into t (id,a) values (877,20);
+insert into t (id,a) values (877,21);
+insert into t (id,a) values (877,22);
+insert into t (id,a) values (877,23);
+insert into t (id,a) values (877,24);
+insert into t (id,a) values (877,25);
+insert into t (id,a) values (877,26);
+insert into t (id,a) values (877,27);
+insert into t (id,a) values (877,28);
+insert into t (id,a) values (877,29);
+insert into t (id,a) values (877,30);
+insert into t (id,a) values (877,31);
+insert into t (id,a) values (877,32);
+insert into t (id,a) values (877,33);
+insert into t (id,a) values (877,34);
+insert into t (id,a) values (877,35);
+insert into t (id,a) values (877,36);
+insert into t (id,a) values (877,37);
+insert into t (id,a) values (877,38);
+insert into t (id,a) values (877,39);
+insert into t (id,a) values (877,40);
+insert into t (id,a) values (877,41);
+insert into t (id,a) values (877,42);
+insert into t (id,a) values (877,43);
+insert into t (id,a) values (877,44);
+insert into t (id,a) values (877,45);
+insert into t (id,a) values (877,46);
+insert into t (id,a) values (877,47);
+insert into t (id,a) values (877,48);
+insert into t (id,a) values (877,49);
+insert into t (id,a) values (877,50);
+insert into t (id,a) values (877,51);
+insert into t (id,a) values (877,52);
+insert into t (id,a) values (877,53);
+insert into t (id,a) values (877,54);
+insert into t (id,a) values (877,55);
+insert into t (id,a) values (877,56);
+insert into t (id,a) values (877,57);
+insert into t (id,a) values (877,58);
+insert into t (id,a) values (877,59);
+insert into t (id,a) values (877,60);
+insert into t (id,a) values (877,61);
+insert into t (id,a) values (877,62);
+insert into t (id,a) values (877,63);
+insert into t (id,a) values (877,64);
+insert into t (id,a) values (877,65);
+insert into t (id,a) values (877,66);
+insert into t (id,a) values (877,67);
+insert into t (id,a) values (877,68);
+insert into t (id,a) values (877,69);
+insert into t (id,a) values (877,70);
+insert into t (id,a) values (877,71);
+insert into t (id,a) values (877,72);
+insert into t (id,a) values (877,73);
+insert into t (id,a) values (877,74);
+insert into t (id,a) values (877,75);
+insert into t (id,a) values (877,76);
+insert into t (id,a) values (877,77);
+insert into t (id,a) values (877,78);
+insert into t (id,a) values (877,79);
+insert into t (id,a) values (877,80);
+insert into t (id,a) values (877,81);
+insert into t (id,a) values (877,82);
+insert into t (id,a) values (877,83);
+insert into t (id,a) values (877,84);
+insert into t (id,a) values (877,85);
+insert into t (id,a) values (877,86);
+insert into t (id,a) values (877,87);
+insert into t (id,a) values (877,88);
+insert into t (id,a) values (877,89);
+insert into t (id,a) values (877,90);
+insert into t (id,a) values (877,91);
+insert into t (id,a) values (877,92);
+insert into t (id,a) values (877,93);
+insert into t (id,a) values (877,94);
+insert into t (id,a) values (877,95);
+insert into t (id,a) values (877,96);
+insert into t (id,a) values (877,97);
+insert into t (id,a) values (877,98);
+insert into t (id,a) values (877,99);
+insert into t (id,a) values (878,0);
+insert into t (id,a) values (878,1);
+insert into t (id,a) values (878,2);
+insert into t (id,a) values (878,3);
+insert into t (id,a) values (878,4);
+insert into t (id,a) values (878,5);
+insert into t (id,a) values (878,6);
+insert into t (id,a) values (878,7);
+insert into t (id,a) values (878,8);
+insert into t (id,a) values (878,9);
+insert into t (id,a) values (878,10);
+insert into t (id,a) values (878,11);
+insert into t (id,a) values (878,12);
+insert into t (id,a) values (878,13);
+insert into t (id,a) values (878,14);
+insert into t (id,a) values (878,15);
+insert into t (id,a) values (878,16);
+insert into t (id,a) values (878,17);
+insert into t (id,a) values (878,18);
+insert into t (id,a) values (878,19);
+insert into t (id,a) values (878,20);
+insert into t (id,a) values (878,21);
+insert into t (id,a) values (878,22);
+insert into t (id,a) values (878,23);
+insert into t (id,a) values (878,24);
+insert into t (id,a) values (878,25);
+insert into t (id,a) values (878,26);
+insert into t (id,a) values (878,27);
+insert into t (id,a) values (878,28);
+insert into t (id,a) values (878,29);
+insert into t (id,a) values (878,30);
+insert into t (id,a) values (878,31);
+insert into t (id,a) values (878,32);
+insert into t (id,a) values (878,33);
+insert into t (id,a) values (878,34);
+insert into t (id,a) values (878,35);
+insert into t (id,a) values (878,36);
+insert into t (id,a) values (878,37);
+insert into t (id,a) values (878,38);
+insert into t (id,a) values (878,39);
+insert into t (id,a) values (878,40);
+insert into t (id,a) values (878,41);
+insert into t (id,a) values (878,42);
+insert into t (id,a) values (878,43);
+insert into t (id,a) values (878,44);
+insert into t (id,a) values (878,45);
+insert into t (id,a) values (878,46);
+insert into t (id,a) values (878,47);
+insert into t (id,a) values (878,48);
+insert into t (id,a) values (878,49);
+insert into t (id,a) values (878,50);
+insert into t (id,a) values (878,51);
+insert into t (id,a) values (878,52);
+insert into t (id,a) values (878,53);
+insert into t (id,a) values (878,54);
+insert into t (id,a) values (878,55);
+insert into t (id,a) values (878,56);
+insert into t (id,a) values (878,57);
+insert into t (id,a) values (878,58);
+insert into t (id,a) values (878,59);
+insert into t (id,a) values (878,60);
+insert into t (id,a) values (878,61);
+insert into t (id,a) values (878,62);
+insert into t (id,a) values (878,63);
+insert into t (id,a) values (878,64);
+insert into t (id,a) values (878,65);
+insert into t (id,a) values (878,66);
+insert into t (id,a) values (878,67);
+insert into t (id,a) values (878,68);
+insert into t (id,a) values (878,69);
+insert into t (id,a) values (878,70);
+insert into t (id,a) values (878,71);
+insert into t (id,a) values (878,72);
+insert into t (id,a) values (878,73);
+insert into t (id,a) values (878,74);
+insert into t (id,a) values (878,75);
+insert into t (id,a) values (878,76);
+insert into t (id,a) values (878,77);
+insert into t (id,a) values (878,78);
+insert into t (id,a) values (878,79);
+insert into t (id,a) values (878,80);
+insert into t (id,a) values (878,81);
+insert into t (id,a) values (878,82);
+insert into t (id,a) values (878,83);
+insert into t (id,a) values (878,84);
+insert into t (id,a) values (878,85);
+insert into t (id,a) values (878,86);
+insert into t (id,a) values (878,87);
+insert into t (id,a) values (878,88);
+insert into t (id,a) values (878,89);
+insert into t (id,a) values (878,90);
+insert into t (id,a) values (878,91);
+insert into t (id,a) values (878,92);
+insert into t (id,a) values (878,93);
+insert into t (id,a) values (878,94);
+insert into t (id,a) values (878,95);
+insert into t (id,a) values (878,96);
+insert into t (id,a) values (878,97);
+insert into t (id,a) values (878,98);
+insert into t (id,a) values (878,99);
+insert into t (id,a) values (879,0);
+insert into t (id,a) values (879,1);
+insert into t (id,a) values (879,2);
+insert into t (id,a) values (879,3);
+insert into t (id,a) values (879,4);
+insert into t (id,a) values (879,5);
+insert into t (id,a) values (879,6);
+insert into t (id,a) values (879,7);
+insert into t (id,a) values (879,8);
+insert into t (id,a) values (879,9);
+insert into t (id,a) values (879,10);
+insert into t (id,a) values (879,11);
+insert into t (id,a) values (879,12);
+insert into t (id,a) values (879,13);
+insert into t (id,a) values (879,14);
+insert into t (id,a) values (879,15);
+insert into t (id,a) values (879,16);
+insert into t (id,a) values (879,17);
+insert into t (id,a) values (879,18);
+insert into t (id,a) values (879,19);
+insert into t (id,a) values (879,20);
+insert into t (id,a) values (879,21);
+insert into t (id,a) values (879,22);
+insert into t (id,a) values (879,23);
+insert into t (id,a) values (879,24);
+insert into t (id,a) values (879,25);
+insert into t (id,a) values (879,26);
+insert into t (id,a) values (879,27);
+insert into t (id,a) values (879,28);
+insert into t (id,a) values (879,29);
+insert into t (id,a) values (879,30);
+insert into t (id,a) values (879,31);
+insert into t (id,a) values (879,32);
+insert into t (id,a) values (879,33);
+insert into t (id,a) values (879,34);
+insert into t (id,a) values (879,35);
+insert into t (id,a) values (879,36);
+insert into t (id,a) values (879,37);
+insert into t (id,a) values (879,38);
+insert into t (id,a) values (879,39);
+insert into t (id,a) values (879,40);
+insert into t (id,a) values (879,41);
+insert into t (id,a) values (879,42);
+insert into t (id,a) values (879,43);
+insert into t (id,a) values (879,44);
+insert into t (id,a) values (879,45);
+insert into t (id,a) values (879,46);
+insert into t (id,a) values (879,47);
+insert into t (id,a) values (879,48);
+insert into t (id,a) values (879,49);
+insert into t (id,a) values (879,50);
+insert into t (id,a) values (879,51);
+insert into t (id,a) values (879,52);
+insert into t (id,a) values (879,53);
+insert into t (id,a) values (879,54);
+insert into t (id,a) values (879,55);
+insert into t (id,a) values (879,56);
+insert into t (id,a) values (879,57);
+insert into t (id,a) values (879,58);
+insert into t (id,a) values (879,59);
+insert into t (id,a) values (879,60);
+insert into t (id,a) values (879,61);
+insert into t (id,a) values (879,62);
+insert into t (id,a) values (879,63);
+insert into t (id,a) values (879,64);
+insert into t (id,a) values (879,65);
+insert into t (id,a) values (879,66);
+insert into t (id,a) values (879,67);
+insert into t (id,a) values (879,68);
+insert into t (id,a) values (879,69);
+insert into t (id,a) values (879,70);
+insert into t (id,a) values (879,71);
+insert into t (id,a) values (879,72);
+insert into t (id,a) values (879,73);
+insert into t (id,a) values (879,74);
+insert into t (id,a) values (879,75);
+insert into t (id,a) values (879,76);
+insert into t (id,a) values (879,77);
+insert into t (id,a) values (879,78);
+insert into t (id,a) values (879,79);
+insert into t (id,a) values (879,80);
+insert into t (id,a) values (879,81);
+insert into t (id,a) values (879,82);
+insert into t (id,a) values (879,83);
+insert into t (id,a) values (879,84);
+insert into t (id,a) values (879,85);
+insert into t (id,a) values (879,86);
+insert into t (id,a) values (879,87);
+insert into t (id,a) values (879,88);
+insert into t (id,a) values (879,89);
+insert into t (id,a) values (879,90);
+insert into t (id,a) values (879,91);
+insert into t (id,a) values (879,92);
+insert into t (id,a) values (879,93);
+insert into t (id,a) values (879,94);
+insert into t (id,a) values (879,95);
+insert into t (id,a) values (879,96);
+insert into t (id,a) values (879,97);
+insert into t (id,a) values (879,98);
+insert into t (id,a) values (879,99);
+insert into t (id,a) values (880,0);
+insert into t (id,a) values (880,1);
+insert into t (id,a) values (880,2);
+insert into t (id,a) values (880,3);
+insert into t (id,a) values (880,4);
+insert into t (id,a) values (880,5);
+insert into t (id,a) values (880,6);
+insert into t (id,a) values (880,7);
+insert into t (id,a) values (880,8);
+insert into t (id,a) values (880,9);
+insert into t (id,a) values (880,10);
+insert into t (id,a) values (880,11);
+insert into t (id,a) values (880,12);
+insert into t (id,a) values (880,13);
+insert into t (id,a) values (880,14);
+insert into t (id,a) values (880,15);
+insert into t (id,a) values (880,16);
+insert into t (id,a) values (880,17);
+insert into t (id,a) values (880,18);
+insert into t (id,a) values (880,19);
+insert into t (id,a) values (880,20);
+insert into t (id,a) values (880,21);
+insert into t (id,a) values (880,22);
+insert into t (id,a) values (880,23);
+insert into t (id,a) values (880,24);
+insert into t (id,a) values (880,25);
+insert into t (id,a) values (880,26);
+insert into t (id,a) values (880,27);
+insert into t (id,a) values (880,28);
+insert into t (id,a) values (880,29);
+insert into t (id,a) values (880,30);
+insert into t (id,a) values (880,31);
+insert into t (id,a) values (880,32);
+insert into t (id,a) values (880,33);
+insert into t (id,a) values (880,34);
+insert into t (id,a) values (880,35);
+insert into t (id,a) values (880,36);
+insert into t (id,a) values (880,37);
+insert into t (id,a) values (880,38);
+insert into t (id,a) values (880,39);
+insert into t (id,a) values (880,40);
+insert into t (id,a) values (880,41);
+insert into t (id,a) values (880,42);
+insert into t (id,a) values (880,43);
+insert into t (id,a) values (880,44);
+insert into t (id,a) values (880,45);
+insert into t (id,a) values (880,46);
+insert into t (id,a) values (880,47);
+insert into t (id,a) values (880,48);
+insert into t (id,a) values (880,49);
+insert into t (id,a) values (880,50);
+insert into t (id,a) values (880,51);
+insert into t (id,a) values (880,52);
+insert into t (id,a) values (880,53);
+insert into t (id,a) values (880,54);
+insert into t (id,a) values (880,55);
+insert into t (id,a) values (880,56);
+insert into t (id,a) values (880,57);
+insert into t (id,a) values (880,58);
+insert into t (id,a) values (880,59);
+insert into t (id,a) values (880,60);
+insert into t (id,a) values (880,61);
+insert into t (id,a) values (880,62);
+insert into t (id,a) values (880,63);
+insert into t (id,a) values (880,64);
+insert into t (id,a) values (880,65);
+insert into t (id,a) values (880,66);
+insert into t (id,a) values (880,67);
+insert into t (id,a) values (880,68);
+insert into t (id,a) values (880,69);
+insert into t (id,a) values (880,70);
+insert into t (id,a) values (880,71);
+insert into t (id,a) values (880,72);
+insert into t (id,a) values (880,73);
+insert into t (id,a) values (880,74);
+insert into t (id,a) values (880,75);
+insert into t (id,a) values (880,76);
+insert into t (id,a) values (880,77);
+insert into t (id,a) values (880,78);
+insert into t (id,a) values (880,79);
+insert into t (id,a) values (880,80);
+insert into t (id,a) values (880,81);
+insert into t (id,a) values (880,82);
+insert into t (id,a) values (880,83);
+insert into t (id,a) values (880,84);
+insert into t (id,a) values (880,85);
+insert into t (id,a) values (880,86);
+insert into t (id,a) values (880,87);
+insert into t (id,a) values (880,88);
+insert into t (id,a) values (880,89);
+insert into t (id,a) values (880,90);
+insert into t (id,a) values (880,91);
+insert into t (id,a) values (880,92);
+insert into t (id,a) values (880,93);
+insert into t (id,a) values (880,94);
+insert into t (id,a) values (880,95);
+insert into t (id,a) values (880,96);
+insert into t (id,a) values (880,97);
+insert into t (id,a) values (880,98);
+insert into t (id,a) values (880,99);
+insert into t (id,a) values (881,0);
+insert into t (id,a) values (881,1);
+insert into t (id,a) values (881,2);
+insert into t (id,a) values (881,3);
+insert into t (id,a) values (881,4);
+insert into t (id,a) values (881,5);
+insert into t (id,a) values (881,6);
+insert into t (id,a) values (881,7);
+insert into t (id,a) values (881,8);
+insert into t (id,a) values (881,9);
+insert into t (id,a) values (881,10);
+insert into t (id,a) values (881,11);
+insert into t (id,a) values (881,12);
+insert into t (id,a) values (881,13);
+insert into t (id,a) values (881,14);
+insert into t (id,a) values (881,15);
+insert into t (id,a) values (881,16);
+insert into t (id,a) values (881,17);
+insert into t (id,a) values (881,18);
+insert into t (id,a) values (881,19);
+insert into t (id,a) values (881,20);
+insert into t (id,a) values (881,21);
+insert into t (id,a) values (881,22);
+insert into t (id,a) values (881,23);
+insert into t (id,a) values (881,24);
+insert into t (id,a) values (881,25);
+insert into t (id,a) values (881,26);
+insert into t (id,a) values (881,27);
+insert into t (id,a) values (881,28);
+insert into t (id,a) values (881,29);
+insert into t (id,a) values (881,30);
+insert into t (id,a) values (881,31);
+insert into t (id,a) values (881,32);
+insert into t (id,a) values (881,33);
+insert into t (id,a) values (881,34);
+insert into t (id,a) values (881,35);
+insert into t (id,a) values (881,36);
+insert into t (id,a) values (881,37);
+insert into t (id,a) values (881,38);
+insert into t (id,a) values (881,39);
+insert into t (id,a) values (881,40);
+insert into t (id,a) values (881,41);
+insert into t (id,a) values (881,42);
+insert into t (id,a) values (881,43);
+insert into t (id,a) values (881,44);
+insert into t (id,a) values (881,45);
+insert into t (id,a) values (881,46);
+insert into t (id,a) values (881,47);
+insert into t (id,a) values (881,48);
+insert into t (id,a) values (881,49);
+insert into t (id,a) values (881,50);
+insert into t (id,a) values (881,51);
+insert into t (id,a) values (881,52);
+insert into t (id,a) values (881,53);
+insert into t (id,a) values (881,54);
+insert into t (id,a) values (881,55);
+insert into t (id,a) values (881,56);
+insert into t (id,a) values (881,57);
+insert into t (id,a) values (881,58);
+insert into t (id,a) values (881,59);
+insert into t (id,a) values (881,60);
+insert into t (id,a) values (881,61);
+insert into t (id,a) values (881,62);
+insert into t (id,a) values (881,63);
+insert into t (id,a) values (881,64);
+insert into t (id,a) values (881,65);
+insert into t (id,a) values (881,66);
+insert into t (id,a) values (881,67);
+insert into t (id,a) values (881,68);
+insert into t (id,a) values (881,69);
+insert into t (id,a) values (881,70);
+insert into t (id,a) values (881,71);
+insert into t (id,a) values (881,72);
+insert into t (id,a) values (881,73);
+insert into t (id,a) values (881,74);
+insert into t (id,a) values (881,75);
+insert into t (id,a) values (881,76);
+insert into t (id,a) values (881,77);
+insert into t (id,a) values (881,78);
+insert into t (id,a) values (881,79);
+insert into t (id,a) values (881,80);
+insert into t (id,a) values (881,81);
+insert into t (id,a) values (881,82);
+insert into t (id,a) values (881,83);
+insert into t (id,a) values (881,84);
+insert into t (id,a) values (881,85);
+insert into t (id,a) values (881,86);
+insert into t (id,a) values (881,87);
+insert into t (id,a) values (881,88);
+insert into t (id,a) values (881,89);
+insert into t (id,a) values (881,90);
+insert into t (id,a) values (881,91);
+insert into t (id,a) values (881,92);
+insert into t (id,a) values (881,93);
+insert into t (id,a) values (881,94);
+insert into t (id,a) values (881,95);
+insert into t (id,a) values (881,96);
+insert into t (id,a) values (881,97);
+insert into t (id,a) values (881,98);
+insert into t (id,a) values (881,99);
+insert into t (id,a) values (882,0);
+insert into t (id,a) values (882,1);
+insert into t (id,a) values (882,2);
+insert into t (id,a) values (882,3);
+insert into t (id,a) values (882,4);
+insert into t (id,a) values (882,5);
+insert into t (id,a) values (882,6);
+insert into t (id,a) values (882,7);
+insert into t (id,a) values (882,8);
+insert into t (id,a) values (882,9);
+insert into t (id,a) values (882,10);
+insert into t (id,a) values (882,11);
+insert into t (id,a) values (882,12);
+insert into t (id,a) values (882,13);
+insert into t (id,a) values (882,14);
+insert into t (id,a) values (882,15);
+insert into t (id,a) values (882,16);
+insert into t (id,a) values (882,17);
+insert into t (id,a) values (882,18);
+insert into t (id,a) values (882,19);
+insert into t (id,a) values (882,20);
+insert into t (id,a) values (882,21);
+insert into t (id,a) values (882,22);
+insert into t (id,a) values (882,23);
+insert into t (id,a) values (882,24);
+insert into t (id,a) values (882,25);
+insert into t (id,a) values (882,26);
+insert into t (id,a) values (882,27);
+insert into t (id,a) values (882,28);
+insert into t (id,a) values (882,29);
+insert into t (id,a) values (882,30);
+insert into t (id,a) values (882,31);
+insert into t (id,a) values (882,32);
+insert into t (id,a) values (882,33);
+insert into t (id,a) values (882,34);
+insert into t (id,a) values (882,35);
+insert into t (id,a) values (882,36);
+insert into t (id,a) values (882,37);
+insert into t (id,a) values (882,38);
+insert into t (id,a) values (882,39);
+insert into t (id,a) values (882,40);
+insert into t (id,a) values (882,41);
+insert into t (id,a) values (882,42);
+insert into t (id,a) values (882,43);
+insert into t (id,a) values (882,44);
+insert into t (id,a) values (882,45);
+insert into t (id,a) values (882,46);
+insert into t (id,a) values (882,47);
+insert into t (id,a) values (882,48);
+insert into t (id,a) values (882,49);
+insert into t (id,a) values (882,50);
+insert into t (id,a) values (882,51);
+insert into t (id,a) values (882,52);
+insert into t (id,a) values (882,53);
+insert into t (id,a) values (882,54);
+insert into t (id,a) values (882,55);
+insert into t (id,a) values (882,56);
+insert into t (id,a) values (882,57);
+insert into t (id,a) values (882,58);
+insert into t (id,a) values (882,59);
+insert into t (id,a) values (882,60);
+insert into t (id,a) values (882,61);
+insert into t (id,a) values (882,62);
+insert into t (id,a) values (882,63);
+insert into t (id,a) values (882,64);
+insert into t (id,a) values (882,65);
+insert into t (id,a) values (882,66);
+insert into t (id,a) values (882,67);
+insert into t (id,a) values (882,68);
+insert into t (id,a) values (882,69);
+insert into t (id,a) values (882,70);
+insert into t (id,a) values (882,71);
+insert into t (id,a) values (882,72);
+insert into t (id,a) values (882,73);
+insert into t (id,a) values (882,74);
+insert into t (id,a) values (882,75);
+insert into t (id,a) values (882,76);
+insert into t (id,a) values (882,77);
+insert into t (id,a) values (882,78);
+insert into t (id,a) values (882,79);
+insert into t (id,a) values (882,80);
+insert into t (id,a) values (882,81);
+insert into t (id,a) values (882,82);
+insert into t (id,a) values (882,83);
+insert into t (id,a) values (882,84);
+insert into t (id,a) values (882,85);
+insert into t (id,a) values (882,86);
+insert into t (id,a) values (882,87);
+insert into t (id,a) values (882,88);
+insert into t (id,a) values (882,89);
+insert into t (id,a) values (882,90);
+insert into t (id,a) values (882,91);
+insert into t (id,a) values (882,92);
+insert into t (id,a) values (882,93);
+insert into t (id,a) values (882,94);
+insert into t (id,a) values (882,95);
+insert into t (id,a) values (882,96);
+insert into t (id,a) values (882,97);
+insert into t (id,a) values (882,98);
+insert into t (id,a) values (882,99);
+insert into t (id,a) values (883,0);
+insert into t (id,a) values (883,1);
+insert into t (id,a) values (883,2);
+insert into t (id,a) values (883,3);
+insert into t (id,a) values (883,4);
+insert into t (id,a) values (883,5);
+insert into t (id,a) values (883,6);
+insert into t (id,a) values (883,7);
+insert into t (id,a) values (883,8);
+insert into t (id,a) values (883,9);
+insert into t (id,a) values (883,10);
+insert into t (id,a) values (883,11);
+insert into t (id,a) values (883,12);
+insert into t (id,a) values (883,13);
+insert into t (id,a) values (883,14);
+insert into t (id,a) values (883,15);
+insert into t (id,a) values (883,16);
+insert into t (id,a) values (883,17);
+insert into t (id,a) values (883,18);
+insert into t (id,a) values (883,19);
+insert into t (id,a) values (883,20);
+insert into t (id,a) values (883,21);
+insert into t (id,a) values (883,22);
+insert into t (id,a) values (883,23);
+insert into t (id,a) values (883,24);
+insert into t (id,a) values (883,25);
+insert into t (id,a) values (883,26);
+insert into t (id,a) values (883,27);
+insert into t (id,a) values (883,28);
+insert into t (id,a) values (883,29);
+insert into t (id,a) values (883,30);
+insert into t (id,a) values (883,31);
+insert into t (id,a) values (883,32);
+insert into t (id,a) values (883,33);
+insert into t (id,a) values (883,34);
+insert into t (id,a) values (883,35);
+insert into t (id,a) values (883,36);
+insert into t (id,a) values (883,37);
+insert into t (id,a) values (883,38);
+insert into t (id,a) values (883,39);
+insert into t (id,a) values (883,40);
+insert into t (id,a) values (883,41);
+insert into t (id,a) values (883,42);
+insert into t (id,a) values (883,43);
+insert into t (id,a) values (883,44);
+insert into t (id,a) values (883,45);
+insert into t (id,a) values (883,46);
+insert into t (id,a) values (883,47);
+insert into t (id,a) values (883,48);
+insert into t (id,a) values (883,49);
+insert into t (id,a) values (883,50);
+insert into t (id,a) values (883,51);
+insert into t (id,a) values (883,52);
+insert into t (id,a) values (883,53);
+insert into t (id,a) values (883,54);
+insert into t (id,a) values (883,55);
+insert into t (id,a) values (883,56);
+insert into t (id,a) values (883,57);
+insert into t (id,a) values (883,58);
+insert into t (id,a) values (883,59);
+insert into t (id,a) values (883,60);
+insert into t (id,a) values (883,61);
+insert into t (id,a) values (883,62);
+insert into t (id,a) values (883,63);
+insert into t (id,a) values (883,64);
+insert into t (id,a) values (883,65);
+insert into t (id,a) values (883,66);
+insert into t (id,a) values (883,67);
+insert into t (id,a) values (883,68);
+insert into t (id,a) values (883,69);
+insert into t (id,a) values (883,70);
+insert into t (id,a) values (883,71);
+insert into t (id,a) values (883,72);
+insert into t (id,a) values (883,73);
+insert into t (id,a) values (883,74);
+insert into t (id,a) values (883,75);
+insert into t (id,a) values (883,76);
+insert into t (id,a) values (883,77);
+insert into t (id,a) values (883,78);
+insert into t (id,a) values (883,79);
+insert into t (id,a) values (883,80);
+insert into t (id,a) values (883,81);
+insert into t (id,a) values (883,82);
+insert into t (id,a) values (883,83);
+insert into t (id,a) values (883,84);
+insert into t (id,a) values (883,85);
+insert into t (id,a) values (883,86);
+insert into t (id,a) values (883,87);
+insert into t (id,a) values (883,88);
+insert into t (id,a) values (883,89);
+insert into t (id,a) values (883,90);
+insert into t (id,a) values (883,91);
+insert into t (id,a) values (883,92);
+insert into t (id,a) values (883,93);
+insert into t (id,a) values (883,94);
+insert into t (id,a) values (883,95);
+insert into t (id,a) values (883,96);
+insert into t (id,a) values (883,97);
+insert into t (id,a) values (883,98);
+insert into t (id,a) values (883,99);
+insert into t (id,a) values (884,0);
+insert into t (id,a) values (884,1);
+insert into t (id,a) values (884,2);
+insert into t (id,a) values (884,3);
+insert into t (id,a) values (884,4);
+insert into t (id,a) values (884,5);
+insert into t (id,a) values (884,6);
+insert into t (id,a) values (884,7);
+insert into t (id,a) values (884,8);
+insert into t (id,a) values (884,9);
+insert into t (id,a) values (884,10);
+insert into t (id,a) values (884,11);
+insert into t (id,a) values (884,12);
+insert into t (id,a) values (884,13);
+insert into t (id,a) values (884,14);
+insert into t (id,a) values (884,15);
+insert into t (id,a) values (884,16);
+insert into t (id,a) values (884,17);
+insert into t (id,a) values (884,18);
+insert into t (id,a) values (884,19);
+insert into t (id,a) values (884,20);
+insert into t (id,a) values (884,21);
+insert into t (id,a) values (884,22);
+insert into t (id,a) values (884,23);
+insert into t (id,a) values (884,24);
+insert into t (id,a) values (884,25);
+insert into t (id,a) values (884,26);
+insert into t (id,a) values (884,27);
+insert into t (id,a) values (884,28);
+insert into t (id,a) values (884,29);
+insert into t (id,a) values (884,30);
+insert into t (id,a) values (884,31);
+insert into t (id,a) values (884,32);
+insert into t (id,a) values (884,33);
+insert into t (id,a) values (884,34);
+insert into t (id,a) values (884,35);
+insert into t (id,a) values (884,36);
+insert into t (id,a) values (884,37);
+insert into t (id,a) values (884,38);
+insert into t (id,a) values (884,39);
+insert into t (id,a) values (884,40);
+insert into t (id,a) values (884,41);
+insert into t (id,a) values (884,42);
+insert into t (id,a) values (884,43);
+insert into t (id,a) values (884,44);
+insert into t (id,a) values (884,45);
+insert into t (id,a) values (884,46);
+insert into t (id,a) values (884,47);
+insert into t (id,a) values (884,48);
+insert into t (id,a) values (884,49);
+insert into t (id,a) values (884,50);
+insert into t (id,a) values (884,51);
+insert into t (id,a) values (884,52);
+insert into t (id,a) values (884,53);
+insert into t (id,a) values (884,54);
+insert into t (id,a) values (884,55);
+insert into t (id,a) values (884,56);
+insert into t (id,a) values (884,57);
+insert into t (id,a) values (884,58);
+insert into t (id,a) values (884,59);
+insert into t (id,a) values (884,60);
+insert into t (id,a) values (884,61);
+insert into t (id,a) values (884,62);
+insert into t (id,a) values (884,63);
+insert into t (id,a) values (884,64);
+insert into t (id,a) values (884,65);
+insert into t (id,a) values (884,66);
+insert into t (id,a) values (884,67);
+insert into t (id,a) values (884,68);
+insert into t (id,a) values (884,69);
+insert into t (id,a) values (884,70);
+insert into t (id,a) values (884,71);
+insert into t (id,a) values (884,72);
+insert into t (id,a) values (884,73);
+insert into t (id,a) values (884,74);
+insert into t (id,a) values (884,75);
+insert into t (id,a) values (884,76);
+insert into t (id,a) values (884,77);
+insert into t (id,a) values (884,78);
+insert into t (id,a) values (884,79);
+insert into t (id,a) values (884,80);
+insert into t (id,a) values (884,81);
+insert into t (id,a) values (884,82);
+insert into t (id,a) values (884,83);
+insert into t (id,a) values (884,84);
+insert into t (id,a) values (884,85);
+insert into t (id,a) values (884,86);
+insert into t (id,a) values (884,87);
+insert into t (id,a) values (884,88);
+insert into t (id,a) values (884,89);
+insert into t (id,a) values (884,90);
+insert into t (id,a) values (884,91);
+insert into t (id,a) values (884,92);
+insert into t (id,a) values (884,93);
+insert into t (id,a) values (884,94);
+insert into t (id,a) values (884,95);
+insert into t (id,a) values (884,96);
+insert into t (id,a) values (884,97);
+insert into t (id,a) values (884,98);
+insert into t (id,a) values (884,99);
+insert into t (id,a) values (885,0);
+insert into t (id,a) values (885,1);
+insert into t (id,a) values (885,2);
+insert into t (id,a) values (885,3);
+insert into t (id,a) values (885,4);
+insert into t (id,a) values (885,5);
+insert into t (id,a) values (885,6);
+insert into t (id,a) values (885,7);
+insert into t (id,a) values (885,8);
+insert into t (id,a) values (885,9);
+insert into t (id,a) values (885,10);
+insert into t (id,a) values (885,11);
+insert into t (id,a) values (885,12);
+insert into t (id,a) values (885,13);
+insert into t (id,a) values (885,14);
+insert into t (id,a) values (885,15);
+insert into t (id,a) values (885,16);
+insert into t (id,a) values (885,17);
+insert into t (id,a) values (885,18);
+insert into t (id,a) values (885,19);
+insert into t (id,a) values (885,20);
+insert into t (id,a) values (885,21);
+insert into t (id,a) values (885,22);
+insert into t (id,a) values (885,23);
+insert into t (id,a) values (885,24);
+insert into t (id,a) values (885,25);
+insert into t (id,a) values (885,26);
+insert into t (id,a) values (885,27);
+insert into t (id,a) values (885,28);
+insert into t (id,a) values (885,29);
+insert into t (id,a) values (885,30);
+insert into t (id,a) values (885,31);
+insert into t (id,a) values (885,32);
+insert into t (id,a) values (885,33);
+insert into t (id,a) values (885,34);
+insert into t (id,a) values (885,35);
+insert into t (id,a) values (885,36);
+insert into t (id,a) values (885,37);
+insert into t (id,a) values (885,38);
+insert into t (id,a) values (885,39);
+insert into t (id,a) values (885,40);
+insert into t (id,a) values (885,41);
+insert into t (id,a) values (885,42);
+insert into t (id,a) values (885,43);
+insert into t (id,a) values (885,44);
+insert into t (id,a) values (885,45);
+insert into t (id,a) values (885,46);
+insert into t (id,a) values (885,47);
+insert into t (id,a) values (885,48);
+insert into t (id,a) values (885,49);
+insert into t (id,a) values (885,50);
+insert into t (id,a) values (885,51);
+insert into t (id,a) values (885,52);
+insert into t (id,a) values (885,53);
+insert into t (id,a) values (885,54);
+insert into t (id,a) values (885,55);
+insert into t (id,a) values (885,56);
+insert into t (id,a) values (885,57);
+insert into t (id,a) values (885,58);
+insert into t (id,a) values (885,59);
+insert into t (id,a) values (885,60);
+insert into t (id,a) values (885,61);
+insert into t (id,a) values (885,62);
+insert into t (id,a) values (885,63);
+insert into t (id,a) values (885,64);
+insert into t (id,a) values (885,65);
+insert into t (id,a) values (885,66);
+insert into t (id,a) values (885,67);
+insert into t (id,a) values (885,68);
+insert into t (id,a) values (885,69);
+insert into t (id,a) values (885,70);
+insert into t (id,a) values (885,71);
+insert into t (id,a) values (885,72);
+insert into t (id,a) values (885,73);
+insert into t (id,a) values (885,74);
+insert into t (id,a) values (885,75);
+insert into t (id,a) values (885,76);
+insert into t (id,a) values (885,77);
+insert into t (id,a) values (885,78);
+insert into t (id,a) values (885,79);
+insert into t (id,a) values (885,80);
+insert into t (id,a) values (885,81);
+insert into t (id,a) values (885,82);
+insert into t (id,a) values (885,83);
+insert into t (id,a) values (885,84);
+insert into t (id,a) values (885,85);
+insert into t (id,a) values (885,86);
+insert into t (id,a) values (885,87);
+insert into t (id,a) values (885,88);
+insert into t (id,a) values (885,89);
+insert into t (id,a) values (885,90);
+insert into t (id,a) values (885,91);
+insert into t (id,a) values (885,92);
+insert into t (id,a) values (885,93);
+insert into t (id,a) values (885,94);
+insert into t (id,a) values (885,95);
+insert into t (id,a) values (885,96);
+insert into t (id,a) values (885,97);
+insert into t (id,a) values (885,98);
+insert into t (id,a) values (885,99);
+insert into t (id,a) values (886,0);
+insert into t (id,a) values (886,1);
+insert into t (id,a) values (886,2);
+insert into t (id,a) values (886,3);
+insert into t (id,a) values (886,4);
+insert into t (id,a) values (886,5);
+insert into t (id,a) values (886,6);
+insert into t (id,a) values (886,7);
+insert into t (id,a) values (886,8);
+insert into t (id,a) values (886,9);
+insert into t (id,a) values (886,10);
+insert into t (id,a) values (886,11);
+insert into t (id,a) values (886,12);
+insert into t (id,a) values (886,13);
+insert into t (id,a) values (886,14);
+insert into t (id,a) values (886,15);
+insert into t (id,a) values (886,16);
+insert into t (id,a) values (886,17);
+insert into t (id,a) values (886,18);
+insert into t (id,a) values (886,19);
+insert into t (id,a) values (886,20);
+insert into t (id,a) values (886,21);
+insert into t (id,a) values (886,22);
+insert into t (id,a) values (886,23);
+insert into t (id,a) values (886,24);
+insert into t (id,a) values (886,25);
+insert into t (id,a) values (886,26);
+insert into t (id,a) values (886,27);
+insert into t (id,a) values (886,28);
+insert into t (id,a) values (886,29);
+insert into t (id,a) values (886,30);
+insert into t (id,a) values (886,31);
+insert into t (id,a) values (886,32);
+insert into t (id,a) values (886,33);
+insert into t (id,a) values (886,34);
+insert into t (id,a) values (886,35);
+insert into t (id,a) values (886,36);
+insert into t (id,a) values (886,37);
+insert into t (id,a) values (886,38);
+insert into t (id,a) values (886,39);
+insert into t (id,a) values (886,40);
+insert into t (id,a) values (886,41);
+insert into t (id,a) values (886,42);
+insert into t (id,a) values (886,43);
+insert into t (id,a) values (886,44);
+insert into t (id,a) values (886,45);
+insert into t (id,a) values (886,46);
+insert into t (id,a) values (886,47);
+insert into t (id,a) values (886,48);
+insert into t (id,a) values (886,49);
+insert into t (id,a) values (886,50);
+insert into t (id,a) values (886,51);
+insert into t (id,a) values (886,52);
+insert into t (id,a) values (886,53);
+insert into t (id,a) values (886,54);
+insert into t (id,a) values (886,55);
+insert into t (id,a) values (886,56);
+insert into t (id,a) values (886,57);
+insert into t (id,a) values (886,58);
+insert into t (id,a) values (886,59);
+insert into t (id,a) values (886,60);
+insert into t (id,a) values (886,61);
+insert into t (id,a) values (886,62);
+insert into t (id,a) values (886,63);
+insert into t (id,a) values (886,64);
+insert into t (id,a) values (886,65);
+insert into t (id,a) values (886,66);
+insert into t (id,a) values (886,67);
+insert into t (id,a) values (886,68);
+insert into t (id,a) values (886,69);
+insert into t (id,a) values (886,70);
+insert into t (id,a) values (886,71);
+insert into t (id,a) values (886,72);
+insert into t (id,a) values (886,73);
+insert into t (id,a) values (886,74);
+insert into t (id,a) values (886,75);
+insert into t (id,a) values (886,76);
+insert into t (id,a) values (886,77);
+insert into t (id,a) values (886,78);
+insert into t (id,a) values (886,79);
+insert into t (id,a) values (886,80);
+insert into t (id,a) values (886,81);
+insert into t (id,a) values (886,82);
+insert into t (id,a) values (886,83);
+insert into t (id,a) values (886,84);
+insert into t (id,a) values (886,85);
+insert into t (id,a) values (886,86);
+insert into t (id,a) values (886,87);
+insert into t (id,a) values (886,88);
+insert into t (id,a) values (886,89);
+insert into t (id,a) values (886,90);
+insert into t (id,a) values (886,91);
+insert into t (id,a) values (886,92);
+insert into t (id,a) values (886,93);
+insert into t (id,a) values (886,94);
+insert into t (id,a) values (886,95);
+insert into t (id,a) values (886,96);
+insert into t (id,a) values (886,97);
+insert into t (id,a) values (886,98);
+insert into t (id,a) values (886,99);
+insert into t (id,a) values (887,0);
+insert into t (id,a) values (887,1);
+insert into t (id,a) values (887,2);
+insert into t (id,a) values (887,3);
+insert into t (id,a) values (887,4);
+insert into t (id,a) values (887,5);
+insert into t (id,a) values (887,6);
+insert into t (id,a) values (887,7);
+insert into t (id,a) values (887,8);
+insert into t (id,a) values (887,9);
+insert into t (id,a) values (887,10);
+insert into t (id,a) values (887,11);
+insert into t (id,a) values (887,12);
+insert into t (id,a) values (887,13);
+insert into t (id,a) values (887,14);
+insert into t (id,a) values (887,15);
+insert into t (id,a) values (887,16);
+insert into t (id,a) values (887,17);
+insert into t (id,a) values (887,18);
+insert into t (id,a) values (887,19);
+insert into t (id,a) values (887,20);
+insert into t (id,a) values (887,21);
+insert into t (id,a) values (887,22);
+insert into t (id,a) values (887,23);
+insert into t (id,a) values (887,24);
+insert into t (id,a) values (887,25);
+insert into t (id,a) values (887,26);
+insert into t (id,a) values (887,27);
+insert into t (id,a) values (887,28);
+insert into t (id,a) values (887,29);
+insert into t (id,a) values (887,30);
+insert into t (id,a) values (887,31);
+insert into t (id,a) values (887,32);
+insert into t (id,a) values (887,33);
+insert into t (id,a) values (887,34);
+insert into t (id,a) values (887,35);
+insert into t (id,a) values (887,36);
+insert into t (id,a) values (887,37);
+insert into t (id,a) values (887,38);
+insert into t (id,a) values (887,39);
+insert into t (id,a) values (887,40);
+insert into t (id,a) values (887,41);
+insert into t (id,a) values (887,42);
+insert into t (id,a) values (887,43);
+insert into t (id,a) values (887,44);
+insert into t (id,a) values (887,45);
+insert into t (id,a) values (887,46);
+insert into t (id,a) values (887,47);
+insert into t (id,a) values (887,48);
+insert into t (id,a) values (887,49);
+insert into t (id,a) values (887,50);
+insert into t (id,a) values (887,51);
+insert into t (id,a) values (887,52);
+insert into t (id,a) values (887,53);
+insert into t (id,a) values (887,54);
+insert into t (id,a) values (887,55);
+insert into t (id,a) values (887,56);
+insert into t (id,a) values (887,57);
+insert into t (id,a) values (887,58);
+insert into t (id,a) values (887,59);
+insert into t (id,a) values (887,60);
+insert into t (id,a) values (887,61);
+insert into t (id,a) values (887,62);
+insert into t (id,a) values (887,63);
+insert into t (id,a) values (887,64);
+insert into t (id,a) values (887,65);
+insert into t (id,a) values (887,66);
+insert into t (id,a) values (887,67);
+insert into t (id,a) values (887,68);
+insert into t (id,a) values (887,69);
+insert into t (id,a) values (887,70);
+insert into t (id,a) values (887,71);
+insert into t (id,a) values (887,72);
+insert into t (id,a) values (887,73);
+insert into t (id,a) values (887,74);
+insert into t (id,a) values (887,75);
+insert into t (id,a) values (887,76);
+insert into t (id,a) values (887,77);
+insert into t (id,a) values (887,78);
+insert into t (id,a) values (887,79);
+insert into t (id,a) values (887,80);
+insert into t (id,a) values (887,81);
+insert into t (id,a) values (887,82);
+insert into t (id,a) values (887,83);
+insert into t (id,a) values (887,84);
+insert into t (id,a) values (887,85);
+insert into t (id,a) values (887,86);
+insert into t (id,a) values (887,87);
+insert into t (id,a) values (887,88);
+insert into t (id,a) values (887,89);
+insert into t (id,a) values (887,90);
+insert into t (id,a) values (887,91);
+insert into t (id,a) values (887,92);
+insert into t (id,a) values (887,93);
+insert into t (id,a) values (887,94);
+insert into t (id,a) values (887,95);
+insert into t (id,a) values (887,96);
+insert into t (id,a) values (887,97);
+insert into t (id,a) values (887,98);
+insert into t (id,a) values (887,99);
+insert into t (id,a) values (888,0);
+insert into t (id,a) values (888,1);
+insert into t (id,a) values (888,2);
+insert into t (id,a) values (888,3);
+insert into t (id,a) values (888,4);
+insert into t (id,a) values (888,5);
+insert into t (id,a) values (888,6);
+insert into t (id,a) values (888,7);
+insert into t (id,a) values (888,8);
+insert into t (id,a) values (888,9);
+insert into t (id,a) values (888,10);
+insert into t (id,a) values (888,11);
+insert into t (id,a) values (888,12);
+insert into t (id,a) values (888,13);
+insert into t (id,a) values (888,14);
+insert into t (id,a) values (888,15);
+insert into t (id,a) values (888,16);
+insert into t (id,a) values (888,17);
+insert into t (id,a) values (888,18);
+insert into t (id,a) values (888,19);
+insert into t (id,a) values (888,20);
+insert into t (id,a) values (888,21);
+insert into t (id,a) values (888,22);
+insert into t (id,a) values (888,23);
+insert into t (id,a) values (888,24);
+insert into t (id,a) values (888,25);
+insert into t (id,a) values (888,26);
+insert into t (id,a) values (888,27);
+insert into t (id,a) values (888,28);
+insert into t (id,a) values (888,29);
+insert into t (id,a) values (888,30);
+insert into t (id,a) values (888,31);
+insert into t (id,a) values (888,32);
+insert into t (id,a) values (888,33);
+insert into t (id,a) values (888,34);
+insert into t (id,a) values (888,35);
+insert into t (id,a) values (888,36);
+insert into t (id,a) values (888,37);
+insert into t (id,a) values (888,38);
+insert into t (id,a) values (888,39);
+insert into t (id,a) values (888,40);
+insert into t (id,a) values (888,41);
+insert into t (id,a) values (888,42);
+insert into t (id,a) values (888,43);
+insert into t (id,a) values (888,44);
+insert into t (id,a) values (888,45);
+insert into t (id,a) values (888,46);
+insert into t (id,a) values (888,47);
+insert into t (id,a) values (888,48);
+insert into t (id,a) values (888,49);
+insert into t (id,a) values (888,50);
+insert into t (id,a) values (888,51);
+insert into t (id,a) values (888,52);
+insert into t (id,a) values (888,53);
+insert into t (id,a) values (888,54);
+insert into t (id,a) values (888,55);
+insert into t (id,a) values (888,56);
+insert into t (id,a) values (888,57);
+insert into t (id,a) values (888,58);
+insert into t (id,a) values (888,59);
+insert into t (id,a) values (888,60);
+insert into t (id,a) values (888,61);
+insert into t (id,a) values (888,62);
+insert into t (id,a) values (888,63);
+insert into t (id,a) values (888,64);
+insert into t (id,a) values (888,65);
+insert into t (id,a) values (888,66);
+insert into t (id,a) values (888,67);
+insert into t (id,a) values (888,68);
+insert into t (id,a) values (888,69);
+insert into t (id,a) values (888,70);
+insert into t (id,a) values (888,71);
+insert into t (id,a) values (888,72);
+insert into t (id,a) values (888,73);
+insert into t (id,a) values (888,74);
+insert into t (id,a) values (888,75);
+insert into t (id,a) values (888,76);
+insert into t (id,a) values (888,77);
+insert into t (id,a) values (888,78);
+insert into t (id,a) values (888,79);
+insert into t (id,a) values (888,80);
+insert into t (id,a) values (888,81);
+insert into t (id,a) values (888,82);
+insert into t (id,a) values (888,83);
+insert into t (id,a) values (888,84);
+insert into t (id,a) values (888,85);
+insert into t (id,a) values (888,86);
+insert into t (id,a) values (888,87);
+insert into t (id,a) values (888,88);
+insert into t (id,a) values (888,89);
+insert into t (id,a) values (888,90);
+insert into t (id,a) values (888,91);
+insert into t (id,a) values (888,92);
+insert into t (id,a) values (888,93);
+insert into t (id,a) values (888,94);
+insert into t (id,a) values (888,95);
+insert into t (id,a) values (888,96);
+insert into t (id,a) values (888,97);
+insert into t (id,a) values (888,98);
+insert into t (id,a) values (888,99);
+insert into t (id,a) values (889,0);
+insert into t (id,a) values (889,1);
+insert into t (id,a) values (889,2);
+insert into t (id,a) values (889,3);
+insert into t (id,a) values (889,4);
+insert into t (id,a) values (889,5);
+insert into t (id,a) values (889,6);
+insert into t (id,a) values (889,7);
+insert into t (id,a) values (889,8);
+insert into t (id,a) values (889,9);
+insert into t (id,a) values (889,10);
+insert into t (id,a) values (889,11);
+insert into t (id,a) values (889,12);
+insert into t (id,a) values (889,13);
+insert into t (id,a) values (889,14);
+insert into t (id,a) values (889,15);
+insert into t (id,a) values (889,16);
+insert into t (id,a) values (889,17);
+insert into t (id,a) values (889,18);
+insert into t (id,a) values (889,19);
+insert into t (id,a) values (889,20);
+insert into t (id,a) values (889,21);
+insert into t (id,a) values (889,22);
+insert into t (id,a) values (889,23);
+insert into t (id,a) values (889,24);
+insert into t (id,a) values (889,25);
+insert into t (id,a) values (889,26);
+insert into t (id,a) values (889,27);
+insert into t (id,a) values (889,28);
+insert into t (id,a) values (889,29);
+insert into t (id,a) values (889,30);
+insert into t (id,a) values (889,31);
+insert into t (id,a) values (889,32);
+insert into t (id,a) values (889,33);
+insert into t (id,a) values (889,34);
+insert into t (id,a) values (889,35);
+insert into t (id,a) values (889,36);
+insert into t (id,a) values (889,37);
+insert into t (id,a) values (889,38);
+insert into t (id,a) values (889,39);
+insert into t (id,a) values (889,40);
+insert into t (id,a) values (889,41);
+insert into t (id,a) values (889,42);
+insert into t (id,a) values (889,43);
+insert into t (id,a) values (889,44);
+insert into t (id,a) values (889,45);
+insert into t (id,a) values (889,46);
+insert into t (id,a) values (889,47);
+insert into t (id,a) values (889,48);
+insert into t (id,a) values (889,49);
+insert into t (id,a) values (889,50);
+insert into t (id,a) values (889,51);
+insert into t (id,a) values (889,52);
+insert into t (id,a) values (889,53);
+insert into t (id,a) values (889,54);
+insert into t (id,a) values (889,55);
+insert into t (id,a) values (889,56);
+insert into t (id,a) values (889,57);
+insert into t (id,a) values (889,58);
+insert into t (id,a) values (889,59);
+insert into t (id,a) values (889,60);
+insert into t (id,a) values (889,61);
+insert into t (id,a) values (889,62);
+insert into t (id,a) values (889,63);
+insert into t (id,a) values (889,64);
+insert into t (id,a) values (889,65);
+insert into t (id,a) values (889,66);
+insert into t (id,a) values (889,67);
+insert into t (id,a) values (889,68);
+insert into t (id,a) values (889,69);
+insert into t (id,a) values (889,70);
+insert into t (id,a) values (889,71);
+insert into t (id,a) values (889,72);
+insert into t (id,a) values (889,73);
+insert into t (id,a) values (889,74);
+insert into t (id,a) values (889,75);
+insert into t (id,a) values (889,76);
+insert into t (id,a) values (889,77);
+insert into t (id,a) values (889,78);
+insert into t (id,a) values (889,79);
+insert into t (id,a) values (889,80);
+insert into t (id,a) values (889,81);
+insert into t (id,a) values (889,82);
+insert into t (id,a) values (889,83);
+insert into t (id,a) values (889,84);
+insert into t (id,a) values (889,85);
+insert into t (id,a) values (889,86);
+insert into t (id,a) values (889,87);
+insert into t (id,a) values (889,88);
+insert into t (id,a) values (889,89);
+insert into t (id,a) values (889,90);
+insert into t (id,a) values (889,91);
+insert into t (id,a) values (889,92);
+insert into t (id,a) values (889,93);
+insert into t (id,a) values (889,94);
+insert into t (id,a) values (889,95);
+insert into t (id,a) values (889,96);
+insert into t (id,a) values (889,97);
+insert into t (id,a) values (889,98);
+insert into t (id,a) values (889,99);
+insert into t (id,a) values (890,0);
+insert into t (id,a) values (890,1);
+insert into t (id,a) values (890,2);
+insert into t (id,a) values (890,3);
+insert into t (id,a) values (890,4);
+insert into t (id,a) values (890,5);
+insert into t (id,a) values (890,6);
+insert into t (id,a) values (890,7);
+insert into t (id,a) values (890,8);
+insert into t (id,a) values (890,9);
+insert into t (id,a) values (890,10);
+insert into t (id,a) values (890,11);
+insert into t (id,a) values (890,12);
+insert into t (id,a) values (890,13);
+insert into t (id,a) values (890,14);
+insert into t (id,a) values (890,15);
+insert into t (id,a) values (890,16);
+insert into t (id,a) values (890,17);
+insert into t (id,a) values (890,18);
+insert into t (id,a) values (890,19);
+insert into t (id,a) values (890,20);
+insert into t (id,a) values (890,21);
+insert into t (id,a) values (890,22);
+insert into t (id,a) values (890,23);
+insert into t (id,a) values (890,24);
+insert into t (id,a) values (890,25);
+insert into t (id,a) values (890,26);
+insert into t (id,a) values (890,27);
+insert into t (id,a) values (890,28);
+insert into t (id,a) values (890,29);
+insert into t (id,a) values (890,30);
+insert into t (id,a) values (890,31);
+insert into t (id,a) values (890,32);
+insert into t (id,a) values (890,33);
+insert into t (id,a) values (890,34);
+insert into t (id,a) values (890,35);
+insert into t (id,a) values (890,36);
+insert into t (id,a) values (890,37);
+insert into t (id,a) values (890,38);
+insert into t (id,a) values (890,39);
+insert into t (id,a) values (890,40);
+insert into t (id,a) values (890,41);
+insert into t (id,a) values (890,42);
+insert into t (id,a) values (890,43);
+insert into t (id,a) values (890,44);
+insert into t (id,a) values (890,45);
+insert into t (id,a) values (890,46);
+insert into t (id,a) values (890,47);
+insert into t (id,a) values (890,48);
+insert into t (id,a) values (890,49);
+insert into t (id,a) values (890,50);
+insert into t (id,a) values (890,51);
+insert into t (id,a) values (890,52);
+insert into t (id,a) values (890,53);
+insert into t (id,a) values (890,54);
+insert into t (id,a) values (890,55);
+insert into t (id,a) values (890,56);
+insert into t (id,a) values (890,57);
+insert into t (id,a) values (890,58);
+insert into t (id,a) values (890,59);
+insert into t (id,a) values (890,60);
+insert into t (id,a) values (890,61);
+insert into t (id,a) values (890,62);
+insert into t (id,a) values (890,63);
+insert into t (id,a) values (890,64);
+insert into t (id,a) values (890,65);
+insert into t (id,a) values (890,66);
+insert into t (id,a) values (890,67);
+insert into t (id,a) values (890,68);
+insert into t (id,a) values (890,69);
+insert into t (id,a) values (890,70);
+insert into t (id,a) values (890,71);
+insert into t (id,a) values (890,72);
+insert into t (id,a) values (890,73);
+insert into t (id,a) values (890,74);
+insert into t (id,a) values (890,75);
+insert into t (id,a) values (890,76);
+insert into t (id,a) values (890,77);
+insert into t (id,a) values (890,78);
+insert into t (id,a) values (890,79);
+insert into t (id,a) values (890,80);
+insert into t (id,a) values (890,81);
+insert into t (id,a) values (890,82);
+insert into t (id,a) values (890,83);
+insert into t (id,a) values (890,84);
+insert into t (id,a) values (890,85);
+insert into t (id,a) values (890,86);
+insert into t (id,a) values (890,87);
+insert into t (id,a) values (890,88);
+insert into t (id,a) values (890,89);
+insert into t (id,a) values (890,90);
+insert into t (id,a) values (890,91);
+insert into t (id,a) values (890,92);
+insert into t (id,a) values (890,93);
+insert into t (id,a) values (890,94);
+insert into t (id,a) values (890,95);
+insert into t (id,a) values (890,96);
+insert into t (id,a) values (890,97);
+insert into t (id,a) values (890,98);
+insert into t (id,a) values (890,99);
+insert into t (id,a) values (891,0);
+insert into t (id,a) values (891,1);
+insert into t (id,a) values (891,2);
+insert into t (id,a) values (891,3);
+insert into t (id,a) values (891,4);
+insert into t (id,a) values (891,5);
+insert into t (id,a) values (891,6);
+insert into t (id,a) values (891,7);
+insert into t (id,a) values (891,8);
+insert into t (id,a) values (891,9);
+insert into t (id,a) values (891,10);
+insert into t (id,a) values (891,11);
+insert into t (id,a) values (891,12);
+insert into t (id,a) values (891,13);
+insert into t (id,a) values (891,14);
+insert into t (id,a) values (891,15);
+insert into t (id,a) values (891,16);
+insert into t (id,a) values (891,17);
+insert into t (id,a) values (891,18);
+insert into t (id,a) values (891,19);
+insert into t (id,a) values (891,20);
+insert into t (id,a) values (891,21);
+insert into t (id,a) values (891,22);
+insert into t (id,a) values (891,23);
+insert into t (id,a) values (891,24);
+insert into t (id,a) values (891,25);
+insert into t (id,a) values (891,26);
+insert into t (id,a) values (891,27);
+insert into t (id,a) values (891,28);
+insert into t (id,a) values (891,29);
+insert into t (id,a) values (891,30);
+insert into t (id,a) values (891,31);
+insert into t (id,a) values (891,32);
+insert into t (id,a) values (891,33);
+insert into t (id,a) values (891,34);
+insert into t (id,a) values (891,35);
+insert into t (id,a) values (891,36);
+insert into t (id,a) values (891,37);
+insert into t (id,a) values (891,38);
+insert into t (id,a) values (891,39);
+insert into t (id,a) values (891,40);
+insert into t (id,a) values (891,41);
+insert into t (id,a) values (891,42);
+insert into t (id,a) values (891,43);
+insert into t (id,a) values (891,44);
+insert into t (id,a) values (891,45);
+insert into t (id,a) values (891,46);
+insert into t (id,a) values (891,47);
+insert into t (id,a) values (891,48);
+insert into t (id,a) values (891,49);
+insert into t (id,a) values (891,50);
+insert into t (id,a) values (891,51);
+insert into t (id,a) values (891,52);
+insert into t (id,a) values (891,53);
+insert into t (id,a) values (891,54);
+insert into t (id,a) values (891,55);
+insert into t (id,a) values (891,56);
+insert into t (id,a) values (891,57);
+insert into t (id,a) values (891,58);
+insert into t (id,a) values (891,59);
+insert into t (id,a) values (891,60);
+insert into t (id,a) values (891,61);
+insert into t (id,a) values (891,62);
+insert into t (id,a) values (891,63);
+insert into t (id,a) values (891,64);
+insert into t (id,a) values (891,65);
+insert into t (id,a) values (891,66);
+insert into t (id,a) values (891,67);
+insert into t (id,a) values (891,68);
+insert into t (id,a) values (891,69);
+insert into t (id,a) values (891,70);
+insert into t (id,a) values (891,71);
+insert into t (id,a) values (891,72);
+insert into t (id,a) values (891,73);
+insert into t (id,a) values (891,74);
+insert into t (id,a) values (891,75);
+insert into t (id,a) values (891,76);
+insert into t (id,a) values (891,77);
+insert into t (id,a) values (891,78);
+insert into t (id,a) values (891,79);
+insert into t (id,a) values (891,80);
+insert into t (id,a) values (891,81);
+insert into t (id,a) values (891,82);
+insert into t (id,a) values (891,83);
+insert into t (id,a) values (891,84);
+insert into t (id,a) values (891,85);
+insert into t (id,a) values (891,86);
+insert into t (id,a) values (891,87);
+insert into t (id,a) values (891,88);
+insert into t (id,a) values (891,89);
+insert into t (id,a) values (891,90);
+insert into t (id,a) values (891,91);
+insert into t (id,a) values (891,92);
+insert into t (id,a) values (891,93);
+insert into t (id,a) values (891,94);
+insert into t (id,a) values (891,95);
+insert into t (id,a) values (891,96);
+insert into t (id,a) values (891,97);
+insert into t (id,a) values (891,98);
+insert into t (id,a) values (891,99);
+insert into t (id,a) values (892,0);
+insert into t (id,a) values (892,1);
+insert into t (id,a) values (892,2);
+insert into t (id,a) values (892,3);
+insert into t (id,a) values (892,4);
+insert into t (id,a) values (892,5);
+insert into t (id,a) values (892,6);
+insert into t (id,a) values (892,7);
+insert into t (id,a) values (892,8);
+insert into t (id,a) values (892,9);
+insert into t (id,a) values (892,10);
+insert into t (id,a) values (892,11);
+insert into t (id,a) values (892,12);
+insert into t (id,a) values (892,13);
+insert into t (id,a) values (892,14);
+insert into t (id,a) values (892,15);
+insert into t (id,a) values (892,16);
+insert into t (id,a) values (892,17);
+insert into t (id,a) values (892,18);
+insert into t (id,a) values (892,19);
+insert into t (id,a) values (892,20);
+insert into t (id,a) values (892,21);
+insert into t (id,a) values (892,22);
+insert into t (id,a) values (892,23);
+insert into t (id,a) values (892,24);
+insert into t (id,a) values (892,25);
+insert into t (id,a) values (892,26);
+insert into t (id,a) values (892,27);
+insert into t (id,a) values (892,28);
+insert into t (id,a) values (892,29);
+insert into t (id,a) values (892,30);
+insert into t (id,a) values (892,31);
+insert into t (id,a) values (892,32);
+insert into t (id,a) values (892,33);
+insert into t (id,a) values (892,34);
+insert into t (id,a) values (892,35);
+insert into t (id,a) values (892,36);
+insert into t (id,a) values (892,37);
+insert into t (id,a) values (892,38);
+insert into t (id,a) values (892,39);
+insert into t (id,a) values (892,40);
+insert into t (id,a) values (892,41);
+insert into t (id,a) values (892,42);
+insert into t (id,a) values (892,43);
+insert into t (id,a) values (892,44);
+insert into t (id,a) values (892,45);
+insert into t (id,a) values (892,46);
+insert into t (id,a) values (892,47);
+insert into t (id,a) values (892,48);
+insert into t (id,a) values (892,49);
+insert into t (id,a) values (892,50);
+insert into t (id,a) values (892,51);
+insert into t (id,a) values (892,52);
+insert into t (id,a) values (892,53);
+insert into t (id,a) values (892,54);
+insert into t (id,a) values (892,55);
+insert into t (id,a) values (892,56);
+insert into t (id,a) values (892,57);
+insert into t (id,a) values (892,58);
+insert into t (id,a) values (892,59);
+insert into t (id,a) values (892,60);
+insert into t (id,a) values (892,61);
+insert into t (id,a) values (892,62);
+insert into t (id,a) values (892,63);
+insert into t (id,a) values (892,64);
+insert into t (id,a) values (892,65);
+insert into t (id,a) values (892,66);
+insert into t (id,a) values (892,67);
+insert into t (id,a) values (892,68);
+insert into t (id,a) values (892,69);
+insert into t (id,a) values (892,70);
+insert into t (id,a) values (892,71);
+insert into t (id,a) values (892,72);
+insert into t (id,a) values (892,73);
+insert into t (id,a) values (892,74);
+insert into t (id,a) values (892,75);
+insert into t (id,a) values (892,76);
+insert into t (id,a) values (892,77);
+insert into t (id,a) values (892,78);
+insert into t (id,a) values (892,79);
+insert into t (id,a) values (892,80);
+insert into t (id,a) values (892,81);
+insert into t (id,a) values (892,82);
+insert into t (id,a) values (892,83);
+insert into t (id,a) values (892,84);
+insert into t (id,a) values (892,85);
+insert into t (id,a) values (892,86);
+insert into t (id,a) values (892,87);
+insert into t (id,a) values (892,88);
+insert into t (id,a) values (892,89);
+insert into t (id,a) values (892,90);
+insert into t (id,a) values (892,91);
+insert into t (id,a) values (892,92);
+insert into t (id,a) values (892,93);
+insert into t (id,a) values (892,94);
+insert into t (id,a) values (892,95);
+insert into t (id,a) values (892,96);
+insert into t (id,a) values (892,97);
+insert into t (id,a) values (892,98);
+insert into t (id,a) values (892,99);
+insert into t (id,a) values (893,0);
+insert into t (id,a) values (893,1);
+insert into t (id,a) values (893,2);
+insert into t (id,a) values (893,3);
+insert into t (id,a) values (893,4);
+insert into t (id,a) values (893,5);
+insert into t (id,a) values (893,6);
+insert into t (id,a) values (893,7);
+insert into t (id,a) values (893,8);
+insert into t (id,a) values (893,9);
+insert into t (id,a) values (893,10);
+insert into t (id,a) values (893,11);
+insert into t (id,a) values (893,12);
+insert into t (id,a) values (893,13);
+insert into t (id,a) values (893,14);
+insert into t (id,a) values (893,15);
+insert into t (id,a) values (893,16);
+insert into t (id,a) values (893,17);
+insert into t (id,a) values (893,18);
+insert into t (id,a) values (893,19);
+insert into t (id,a) values (893,20);
+insert into t (id,a) values (893,21);
+insert into t (id,a) values (893,22);
+insert into t (id,a) values (893,23);
+insert into t (id,a) values (893,24);
+insert into t (id,a) values (893,25);
+insert into t (id,a) values (893,26);
+insert into t (id,a) values (893,27);
+insert into t (id,a) values (893,28);
+insert into t (id,a) values (893,29);
+insert into t (id,a) values (893,30);
+insert into t (id,a) values (893,31);
+insert into t (id,a) values (893,32);
+insert into t (id,a) values (893,33);
+insert into t (id,a) values (893,34);
+insert into t (id,a) values (893,35);
+insert into t (id,a) values (893,36);
+insert into t (id,a) values (893,37);
+insert into t (id,a) values (893,38);
+insert into t (id,a) values (893,39);
+insert into t (id,a) values (893,40);
+insert into t (id,a) values (893,41);
+insert into t (id,a) values (893,42);
+insert into t (id,a) values (893,43);
+insert into t (id,a) values (893,44);
+insert into t (id,a) values (893,45);
+insert into t (id,a) values (893,46);
+insert into t (id,a) values (893,47);
+insert into t (id,a) values (893,48);
+insert into t (id,a) values (893,49);
+insert into t (id,a) values (893,50);
+insert into t (id,a) values (893,51);
+insert into t (id,a) values (893,52);
+insert into t (id,a) values (893,53);
+insert into t (id,a) values (893,54);
+insert into t (id,a) values (893,55);
+insert into t (id,a) values (893,56);
+insert into t (id,a) values (893,57);
+insert into t (id,a) values (893,58);
+insert into t (id,a) values (893,59);
+insert into t (id,a) values (893,60);
+insert into t (id,a) values (893,61);
+insert into t (id,a) values (893,62);
+insert into t (id,a) values (893,63);
+insert into t (id,a) values (893,64);
+insert into t (id,a) values (893,65);
+insert into t (id,a) values (893,66);
+insert into t (id,a) values (893,67);
+insert into t (id,a) values (893,68);
+insert into t (id,a) values (893,69);
+insert into t (id,a) values (893,70);
+insert into t (id,a) values (893,71);
+insert into t (id,a) values (893,72);
+insert into t (id,a) values (893,73);
+insert into t (id,a) values (893,74);
+insert into t (id,a) values (893,75);
+insert into t (id,a) values (893,76);
+insert into t (id,a) values (893,77);
+insert into t (id,a) values (893,78);
+insert into t (id,a) values (893,79);
+insert into t (id,a) values (893,80);
+insert into t (id,a) values (893,81);
+insert into t (id,a) values (893,82);
+insert into t (id,a) values (893,83);
+insert into t (id,a) values (893,84);
+insert into t (id,a) values (893,85);
+insert into t (id,a) values (893,86);
+insert into t (id,a) values (893,87);
+insert into t (id,a) values (893,88);
+insert into t (id,a) values (893,89);
+insert into t (id,a) values (893,90);
+insert into t (id,a) values (893,91);
+insert into t (id,a) values (893,92);
+insert into t (id,a) values (893,93);
+insert into t (id,a) values (893,94);
+insert into t (id,a) values (893,95);
+insert into t (id,a) values (893,96);
+insert into t (id,a) values (893,97);
+insert into t (id,a) values (893,98);
+insert into t (id,a) values (893,99);
+insert into t (id,a) values (894,0);
+insert into t (id,a) values (894,1);
+insert into t (id,a) values (894,2);
+insert into t (id,a) values (894,3);
+insert into t (id,a) values (894,4);
+insert into t (id,a) values (894,5);
+insert into t (id,a) values (894,6);
+insert into t (id,a) values (894,7);
+insert into t (id,a) values (894,8);
+insert into t (id,a) values (894,9);
+insert into t (id,a) values (894,10);
+insert into t (id,a) values (894,11);
+insert into t (id,a) values (894,12);
+insert into t (id,a) values (894,13);
+insert into t (id,a) values (894,14);
+insert into t (id,a) values (894,15);
+insert into t (id,a) values (894,16);
+insert into t (id,a) values (894,17);
+insert into t (id,a) values (894,18);
+insert into t (id,a) values (894,19);
+insert into t (id,a) values (894,20);
+insert into t (id,a) values (894,21);
+insert into t (id,a) values (894,22);
+insert into t (id,a) values (894,23);
+insert into t (id,a) values (894,24);
+insert into t (id,a) values (894,25);
+insert into t (id,a) values (894,26);
+insert into t (id,a) values (894,27);
+insert into t (id,a) values (894,28);
+insert into t (id,a) values (894,29);
+insert into t (id,a) values (894,30);
+insert into t (id,a) values (894,31);
+insert into t (id,a) values (894,32);
+insert into t (id,a) values (894,33);
+insert into t (id,a) values (894,34);
+insert into t (id,a) values (894,35);
+insert into t (id,a) values (894,36);
+insert into t (id,a) values (894,37);
+insert into t (id,a) values (894,38);
+insert into t (id,a) values (894,39);
+insert into t (id,a) values (894,40);
+insert into t (id,a) values (894,41);
+insert into t (id,a) values (894,42);
+insert into t (id,a) values (894,43);
+insert into t (id,a) values (894,44);
+insert into t (id,a) values (894,45);
+insert into t (id,a) values (894,46);
+insert into t (id,a) values (894,47);
+insert into t (id,a) values (894,48);
+insert into t (id,a) values (894,49);
+insert into t (id,a) values (894,50);
+insert into t (id,a) values (894,51);
+insert into t (id,a) values (894,52);
+insert into t (id,a) values (894,53);
+insert into t (id,a) values (894,54);
+insert into t (id,a) values (894,55);
+insert into t (id,a) values (894,56);
+insert into t (id,a) values (894,57);
+insert into t (id,a) values (894,58);
+insert into t (id,a) values (894,59);
+insert into t (id,a) values (894,60);
+insert into t (id,a) values (894,61);
+insert into t (id,a) values (894,62);
+insert into t (id,a) values (894,63);
+insert into t (id,a) values (894,64);
+insert into t (id,a) values (894,65);
+insert into t (id,a) values (894,66);
+insert into t (id,a) values (894,67);
+insert into t (id,a) values (894,68);
+insert into t (id,a) values (894,69);
+insert into t (id,a) values (894,70);
+insert into t (id,a) values (894,71);
+insert into t (id,a) values (894,72);
+insert into t (id,a) values (894,73);
+insert into t (id,a) values (894,74);
+insert into t (id,a) values (894,75);
+insert into t (id,a) values (894,76);
+insert into t (id,a) values (894,77);
+insert into t (id,a) values (894,78);
+insert into t (id,a) values (894,79);
+insert into t (id,a) values (894,80);
+insert into t (id,a) values (894,81);
+insert into t (id,a) values (894,82);
+insert into t (id,a) values (894,83);
+insert into t (id,a) values (894,84);
+insert into t (id,a) values (894,85);
+insert into t (id,a) values (894,86);
+insert into t (id,a) values (894,87);
+insert into t (id,a) values (894,88);
+insert into t (id,a) values (894,89);
+insert into t (id,a) values (894,90);
+insert into t (id,a) values (894,91);
+insert into t (id,a) values (894,92);
+insert into t (id,a) values (894,93);
+insert into t (id,a) values (894,94);
+insert into t (id,a) values (894,95);
+insert into t (id,a) values (894,96);
+insert into t (id,a) values (894,97);
+insert into t (id,a) values (894,98);
+insert into t (id,a) values (894,99);
+insert into t (id,a) values (895,0);
+insert into t (id,a) values (895,1);
+insert into t (id,a) values (895,2);
+insert into t (id,a) values (895,3);
+insert into t (id,a) values (895,4);
+insert into t (id,a) values (895,5);
+insert into t (id,a) values (895,6);
+insert into t (id,a) values (895,7);
+insert into t (id,a) values (895,8);
+insert into t (id,a) values (895,9);
+insert into t (id,a) values (895,10);
+insert into t (id,a) values (895,11);
+insert into t (id,a) values (895,12);
+insert into t (id,a) values (895,13);
+insert into t (id,a) values (895,14);
+insert into t (id,a) values (895,15);
+insert into t (id,a) values (895,16);
+insert into t (id,a) values (895,17);
+insert into t (id,a) values (895,18);
+insert into t (id,a) values (895,19);
+insert into t (id,a) values (895,20);
+insert into t (id,a) values (895,21);
+insert into t (id,a) values (895,22);
+insert into t (id,a) values (895,23);
+insert into t (id,a) values (895,24);
+insert into t (id,a) values (895,25);
+insert into t (id,a) values (895,26);
+insert into t (id,a) values (895,27);
+insert into t (id,a) values (895,28);
+insert into t (id,a) values (895,29);
+insert into t (id,a) values (895,30);
+insert into t (id,a) values (895,31);
+insert into t (id,a) values (895,32);
+insert into t (id,a) values (895,33);
+insert into t (id,a) values (895,34);
+insert into t (id,a) values (895,35);
+insert into t (id,a) values (895,36);
+insert into t (id,a) values (895,37);
+insert into t (id,a) values (895,38);
+insert into t (id,a) values (895,39);
+insert into t (id,a) values (895,40);
+insert into t (id,a) values (895,41);
+insert into t (id,a) values (895,42);
+insert into t (id,a) values (895,43);
+insert into t (id,a) values (895,44);
+insert into t (id,a) values (895,45);
+insert into t (id,a) values (895,46);
+insert into t (id,a) values (895,47);
+insert into t (id,a) values (895,48);
+insert into t (id,a) values (895,49);
+insert into t (id,a) values (895,50);
+insert into t (id,a) values (895,51);
+insert into t (id,a) values (895,52);
+insert into t (id,a) values (895,53);
+insert into t (id,a) values (895,54);
+insert into t (id,a) values (895,55);
+insert into t (id,a) values (895,56);
+insert into t (id,a) values (895,57);
+insert into t (id,a) values (895,58);
+insert into t (id,a) values (895,59);
+insert into t (id,a) values (895,60);
+insert into t (id,a) values (895,61);
+insert into t (id,a) values (895,62);
+insert into t (id,a) values (895,63);
+insert into t (id,a) values (895,64);
+insert into t (id,a) values (895,65);
+insert into t (id,a) values (895,66);
+insert into t (id,a) values (895,67);
+insert into t (id,a) values (895,68);
+insert into t (id,a) values (895,69);
+insert into t (id,a) values (895,70);
+insert into t (id,a) values (895,71);
+insert into t (id,a) values (895,72);
+insert into t (id,a) values (895,73);
+insert into t (id,a) values (895,74);
+insert into t (id,a) values (895,75);
+insert into t (id,a) values (895,76);
+insert into t (id,a) values (895,77);
+insert into t (id,a) values (895,78);
+insert into t (id,a) values (895,79);
+insert into t (id,a) values (895,80);
+insert into t (id,a) values (895,81);
+insert into t (id,a) values (895,82);
+insert into t (id,a) values (895,83);
+insert into t (id,a) values (895,84);
+insert into t (id,a) values (895,85);
+insert into t (id,a) values (895,86);
+insert into t (id,a) values (895,87);
+insert into t (id,a) values (895,88);
+insert into t (id,a) values (895,89);
+insert into t (id,a) values (895,90);
+insert into t (id,a) values (895,91);
+insert into t (id,a) values (895,92);
+insert into t (id,a) values (895,93);
+insert into t (id,a) values (895,94);
+insert into t (id,a) values (895,95);
+insert into t (id,a) values (895,96);
+insert into t (id,a) values (895,97);
+insert into t (id,a) values (895,98);
+insert into t (id,a) values (895,99);
+insert into t (id,a) values (896,0);
+insert into t (id,a) values (896,1);
+insert into t (id,a) values (896,2);
+insert into t (id,a) values (896,3);
+insert into t (id,a) values (896,4);
+insert into t (id,a) values (896,5);
+insert into t (id,a) values (896,6);
+insert into t (id,a) values (896,7);
+insert into t (id,a) values (896,8);
+insert into t (id,a) values (896,9);
+insert into t (id,a) values (896,10);
+insert into t (id,a) values (896,11);
+insert into t (id,a) values (896,12);
+insert into t (id,a) values (896,13);
+insert into t (id,a) values (896,14);
+insert into t (id,a) values (896,15);
+insert into t (id,a) values (896,16);
+insert into t (id,a) values (896,17);
+insert into t (id,a) values (896,18);
+insert into t (id,a) values (896,19);
+insert into t (id,a) values (896,20);
+insert into t (id,a) values (896,21);
+insert into t (id,a) values (896,22);
+insert into t (id,a) values (896,23);
+insert into t (id,a) values (896,24);
+insert into t (id,a) values (896,25);
+insert into t (id,a) values (896,26);
+insert into t (id,a) values (896,27);
+insert into t (id,a) values (896,28);
+insert into t (id,a) values (896,29);
+insert into t (id,a) values (896,30);
+insert into t (id,a) values (896,31);
+insert into t (id,a) values (896,32);
+insert into t (id,a) values (896,33);
+insert into t (id,a) values (896,34);
+insert into t (id,a) values (896,35);
+insert into t (id,a) values (896,36);
+insert into t (id,a) values (896,37);
+insert into t (id,a) values (896,38);
+insert into t (id,a) values (896,39);
+insert into t (id,a) values (896,40);
+insert into t (id,a) values (896,41);
+insert into t (id,a) values (896,42);
+insert into t (id,a) values (896,43);
+insert into t (id,a) values (896,44);
+insert into t (id,a) values (896,45);
+insert into t (id,a) values (896,46);
+insert into t (id,a) values (896,47);
+insert into t (id,a) values (896,48);
+insert into t (id,a) values (896,49);
+insert into t (id,a) values (896,50);
+insert into t (id,a) values (896,51);
+insert into t (id,a) values (896,52);
+insert into t (id,a) values (896,53);
+insert into t (id,a) values (896,54);
+insert into t (id,a) values (896,55);
+insert into t (id,a) values (896,56);
+insert into t (id,a) values (896,57);
+insert into t (id,a) values (896,58);
+insert into t (id,a) values (896,59);
+insert into t (id,a) values (896,60);
+insert into t (id,a) values (896,61);
+insert into t (id,a) values (896,62);
+insert into t (id,a) values (896,63);
+insert into t (id,a) values (896,64);
+insert into t (id,a) values (896,65);
+insert into t (id,a) values (896,66);
+insert into t (id,a) values (896,67);
+insert into t (id,a) values (896,68);
+insert into t (id,a) values (896,69);
+insert into t (id,a) values (896,70);
+insert into t (id,a) values (896,71);
+insert into t (id,a) values (896,72);
+insert into t (id,a) values (896,73);
+insert into t (id,a) values (896,74);
+insert into t (id,a) values (896,75);
+insert into t (id,a) values (896,76);
+insert into t (id,a) values (896,77);
+insert into t (id,a) values (896,78);
+insert into t (id,a) values (896,79);
+insert into t (id,a) values (896,80);
+insert into t (id,a) values (896,81);
+insert into t (id,a) values (896,82);
+insert into t (id,a) values (896,83);
+insert into t (id,a) values (896,84);
+insert into t (id,a) values (896,85);
+insert into t (id,a) values (896,86);
+insert into t (id,a) values (896,87);
+insert into t (id,a) values (896,88);
+insert into t (id,a) values (896,89);
+insert into t (id,a) values (896,90);
+insert into t (id,a) values (896,91);
+insert into t (id,a) values (896,92);
+insert into t (id,a) values (896,93);
+insert into t (id,a) values (896,94);
+insert into t (id,a) values (896,95);
+insert into t (id,a) values (896,96);
+insert into t (id,a) values (896,97);
+insert into t (id,a) values (896,98);
+insert into t (id,a) values (896,99);
+insert into t (id,a) values (897,0);
+insert into t (id,a) values (897,1);
+insert into t (id,a) values (897,2);
+insert into t (id,a) values (897,3);
+insert into t (id,a) values (897,4);
+insert into t (id,a) values (897,5);
+insert into t (id,a) values (897,6);
+insert into t (id,a) values (897,7);
+insert into t (id,a) values (897,8);
+insert into t (id,a) values (897,9);
+insert into t (id,a) values (897,10);
+insert into t (id,a) values (897,11);
+insert into t (id,a) values (897,12);
+insert into t (id,a) values (897,13);
+insert into t (id,a) values (897,14);
+insert into t (id,a) values (897,15);
+insert into t (id,a) values (897,16);
+insert into t (id,a) values (897,17);
+insert into t (id,a) values (897,18);
+insert into t (id,a) values (897,19);
+insert into t (id,a) values (897,20);
+insert into t (id,a) values (897,21);
+insert into t (id,a) values (897,22);
+insert into t (id,a) values (897,23);
+insert into t (id,a) values (897,24);
+insert into t (id,a) values (897,25);
+insert into t (id,a) values (897,26);
+insert into t (id,a) values (897,27);
+insert into t (id,a) values (897,28);
+insert into t (id,a) values (897,29);
+insert into t (id,a) values (897,30);
+insert into t (id,a) values (897,31);
+insert into t (id,a) values (897,32);
+insert into t (id,a) values (897,33);
+insert into t (id,a) values (897,34);
+insert into t (id,a) values (897,35);
+insert into t (id,a) values (897,36);
+insert into t (id,a) values (897,37);
+insert into t (id,a) values (897,38);
+insert into t (id,a) values (897,39);
+insert into t (id,a) values (897,40);
+insert into t (id,a) values (897,41);
+insert into t (id,a) values (897,42);
+insert into t (id,a) values (897,43);
+insert into t (id,a) values (897,44);
+insert into t (id,a) values (897,45);
+insert into t (id,a) values (897,46);
+insert into t (id,a) values (897,47);
+insert into t (id,a) values (897,48);
+insert into t (id,a) values (897,49);
+insert into t (id,a) values (897,50);
+insert into t (id,a) values (897,51);
+insert into t (id,a) values (897,52);
+insert into t (id,a) values (897,53);
+insert into t (id,a) values (897,54);
+insert into t (id,a) values (897,55);
+insert into t (id,a) values (897,56);
+insert into t (id,a) values (897,57);
+insert into t (id,a) values (897,58);
+insert into t (id,a) values (897,59);
+insert into t (id,a) values (897,60);
+insert into t (id,a) values (897,61);
+insert into t (id,a) values (897,62);
+insert into t (id,a) values (897,63);
+insert into t (id,a) values (897,64);
+insert into t (id,a) values (897,65);
+insert into t (id,a) values (897,66);
+insert into t (id,a) values (897,67);
+insert into t (id,a) values (897,68);
+insert into t (id,a) values (897,69);
+insert into t (id,a) values (897,70);
+insert into t (id,a) values (897,71);
+insert into t (id,a) values (897,72);
+insert into t (id,a) values (897,73);
+insert into t (id,a) values (897,74);
+insert into t (id,a) values (897,75);
+insert into t (id,a) values (897,76);
+insert into t (id,a) values (897,77);
+insert into t (id,a) values (897,78);
+insert into t (id,a) values (897,79);
+insert into t (id,a) values (897,80);
+insert into t (id,a) values (897,81);
+insert into t (id,a) values (897,82);
+insert into t (id,a) values (897,83);
+insert into t (id,a) values (897,84);
+insert into t (id,a) values (897,85);
+insert into t (id,a) values (897,86);
+insert into t (id,a) values (897,87);
+insert into t (id,a) values (897,88);
+insert into t (id,a) values (897,89);
+insert into t (id,a) values (897,90);
+insert into t (id,a) values (897,91);
+insert into t (id,a) values (897,92);
+insert into t (id,a) values (897,93);
+insert into t (id,a) values (897,94);
+insert into t (id,a) values (897,95);
+insert into t (id,a) values (897,96);
+insert into t (id,a) values (897,97);
+insert into t (id,a) values (897,98);
+insert into t (id,a) values (897,99);
+insert into t (id,a) values (898,0);
+insert into t (id,a) values (898,1);
+insert into t (id,a) values (898,2);
+insert into t (id,a) values (898,3);
+insert into t (id,a) values (898,4);
+insert into t (id,a) values (898,5);
+insert into t (id,a) values (898,6);
+insert into t (id,a) values (898,7);
+insert into t (id,a) values (898,8);
+insert into t (id,a) values (898,9);
+insert into t (id,a) values (898,10);
+insert into t (id,a) values (898,11);
+insert into t (id,a) values (898,12);
+insert into t (id,a) values (898,13);
+insert into t (id,a) values (898,14);
+insert into t (id,a) values (898,15);
+insert into t (id,a) values (898,16);
+insert into t (id,a) values (898,17);
+insert into t (id,a) values (898,18);
+insert into t (id,a) values (898,19);
+insert into t (id,a) values (898,20);
+insert into t (id,a) values (898,21);
+insert into t (id,a) values (898,22);
+insert into t (id,a) values (898,23);
+insert into t (id,a) values (898,24);
+insert into t (id,a) values (898,25);
+insert into t (id,a) values (898,26);
+insert into t (id,a) values (898,27);
+insert into t (id,a) values (898,28);
+insert into t (id,a) values (898,29);
+insert into t (id,a) values (898,30);
+insert into t (id,a) values (898,31);
+insert into t (id,a) values (898,32);
+insert into t (id,a) values (898,33);
+insert into t (id,a) values (898,34);
+insert into t (id,a) values (898,35);
+insert into t (id,a) values (898,36);
+insert into t (id,a) values (898,37);
+insert into t (id,a) values (898,38);
+insert into t (id,a) values (898,39);
+insert into t (id,a) values (898,40);
+insert into t (id,a) values (898,41);
+insert into t (id,a) values (898,42);
+insert into t (id,a) values (898,43);
+insert into t (id,a) values (898,44);
+insert into t (id,a) values (898,45);
+insert into t (id,a) values (898,46);
+insert into t (id,a) values (898,47);
+insert into t (id,a) values (898,48);
+insert into t (id,a) values (898,49);
+insert into t (id,a) values (898,50);
+insert into t (id,a) values (898,51);
+insert into t (id,a) values (898,52);
+insert into t (id,a) values (898,53);
+insert into t (id,a) values (898,54);
+insert into t (id,a) values (898,55);
+insert into t (id,a) values (898,56);
+insert into t (id,a) values (898,57);
+insert into t (id,a) values (898,58);
+insert into t (id,a) values (898,59);
+insert into t (id,a) values (898,60);
+insert into t (id,a) values (898,61);
+insert into t (id,a) values (898,62);
+insert into t (id,a) values (898,63);
+insert into t (id,a) values (898,64);
+insert into t (id,a) values (898,65);
+insert into t (id,a) values (898,66);
+insert into t (id,a) values (898,67);
+insert into t (id,a) values (898,68);
+insert into t (id,a) values (898,69);
+insert into t (id,a) values (898,70);
+insert into t (id,a) values (898,71);
+insert into t (id,a) values (898,72);
+insert into t (id,a) values (898,73);
+insert into t (id,a) values (898,74);
+insert into t (id,a) values (898,75);
+insert into t (id,a) values (898,76);
+insert into t (id,a) values (898,77);
+insert into t (id,a) values (898,78);
+insert into t (id,a) values (898,79);
+insert into t (id,a) values (898,80);
+insert into t (id,a) values (898,81);
+insert into t (id,a) values (898,82);
+insert into t (id,a) values (898,83);
+insert into t (id,a) values (898,84);
+insert into t (id,a) values (898,85);
+insert into t (id,a) values (898,86);
+insert into t (id,a) values (898,87);
+insert into t (id,a) values (898,88);
+insert into t (id,a) values (898,89);
+insert into t (id,a) values (898,90);
+insert into t (id,a) values (898,91);
+insert into t (id,a) values (898,92);
+insert into t (id,a) values (898,93);
+insert into t (id,a) values (898,94);
+insert into t (id,a) values (898,95);
+insert into t (id,a) values (898,96);
+insert into t (id,a) values (898,97);
+insert into t (id,a) values (898,98);
+insert into t (id,a) values (898,99);
+insert into t (id,a) values (899,0);
+insert into t (id,a) values (899,1);
+insert into t (id,a) values (899,2);
+insert into t (id,a) values (899,3);
+insert into t (id,a) values (899,4);
+insert into t (id,a) values (899,5);
+insert into t (id,a) values (899,6);
+insert into t (id,a) values (899,7);
+insert into t (id,a) values (899,8);
+insert into t (id,a) values (899,9);
+insert into t (id,a) values (899,10);
+insert into t (id,a) values (899,11);
+insert into t (id,a) values (899,12);
+insert into t (id,a) values (899,13);
+insert into t (id,a) values (899,14);
+insert into t (id,a) values (899,15);
+insert into t (id,a) values (899,16);
+insert into t (id,a) values (899,17);
+insert into t (id,a) values (899,18);
+insert into t (id,a) values (899,19);
+insert into t (id,a) values (899,20);
+insert into t (id,a) values (899,21);
+insert into t (id,a) values (899,22);
+insert into t (id,a) values (899,23);
+insert into t (id,a) values (899,24);
+insert into t (id,a) values (899,25);
+insert into t (id,a) values (899,26);
+insert into t (id,a) values (899,27);
+insert into t (id,a) values (899,28);
+insert into t (id,a) values (899,29);
+insert into t (id,a) values (899,30);
+insert into t (id,a) values (899,31);
+insert into t (id,a) values (899,32);
+insert into t (id,a) values (899,33);
+insert into t (id,a) values (899,34);
+insert into t (id,a) values (899,35);
+insert into t (id,a) values (899,36);
+insert into t (id,a) values (899,37);
+insert into t (id,a) values (899,38);
+insert into t (id,a) values (899,39);
+insert into t (id,a) values (899,40);
+insert into t (id,a) values (899,41);
+insert into t (id,a) values (899,42);
+insert into t (id,a) values (899,43);
+insert into t (id,a) values (899,44);
+insert into t (id,a) values (899,45);
+insert into t (id,a) values (899,46);
+insert into t (id,a) values (899,47);
+insert into t (id,a) values (899,48);
+insert into t (id,a) values (899,49);
+insert into t (id,a) values (899,50);
+insert into t (id,a) values (899,51);
+insert into t (id,a) values (899,52);
+insert into t (id,a) values (899,53);
+insert into t (id,a) values (899,54);
+insert into t (id,a) values (899,55);
+insert into t (id,a) values (899,56);
+insert into t (id,a) values (899,57);
+insert into t (id,a) values (899,58);
+insert into t (id,a) values (899,59);
+insert into t (id,a) values (899,60);
+insert into t (id,a) values (899,61);
+insert into t (id,a) values (899,62);
+insert into t (id,a) values (899,63);
+insert into t (id,a) values (899,64);
+insert into t (id,a) values (899,65);
+insert into t (id,a) values (899,66);
+insert into t (id,a) values (899,67);
+insert into t (id,a) values (899,68);
+insert into t (id,a) values (899,69);
+insert into t (id,a) values (899,70);
+insert into t (id,a) values (899,71);
+insert into t (id,a) values (899,72);
+insert into t (id,a) values (899,73);
+insert into t (id,a) values (899,74);
+insert into t (id,a) values (899,75);
+insert into t (id,a) values (899,76);
+insert into t (id,a) values (899,77);
+insert into t (id,a) values (899,78);
+insert into t (id,a) values (899,79);
+insert into t (id,a) values (899,80);
+insert into t (id,a) values (899,81);
+insert into t (id,a) values (899,82);
+insert into t (id,a) values (899,83);
+insert into t (id,a) values (899,84);
+insert into t (id,a) values (899,85);
+insert into t (id,a) values (899,86);
+insert into t (id,a) values (899,87);
+insert into t (id,a) values (899,88);
+insert into t (id,a) values (899,89);
+insert into t (id,a) values (899,90);
+insert into t (id,a) values (899,91);
+insert into t (id,a) values (899,92);
+insert into t (id,a) values (899,93);
+insert into t (id,a) values (899,94);
+insert into t (id,a) values (899,95);
+insert into t (id,a) values (899,96);
+insert into t (id,a) values (899,97);
+insert into t (id,a) values (899,98);
+insert into t (id,a) values (899,99);
+insert into t (id,a) values (900,0);
+insert into t (id,a) values (900,1);
+insert into t (id,a) values (900,2);
+insert into t (id,a) values (900,3);
+insert into t (id,a) values (900,4);
+insert into t (id,a) values (900,5);
+insert into t (id,a) values (900,6);
+insert into t (id,a) values (900,7);
+insert into t (id,a) values (900,8);
+insert into t (id,a) values (900,9);
+insert into t (id,a) values (900,10);
+insert into t (id,a) values (900,11);
+insert into t (id,a) values (900,12);
+insert into t (id,a) values (900,13);
+insert into t (id,a) values (900,14);
+insert into t (id,a) values (900,15);
+insert into t (id,a) values (900,16);
+insert into t (id,a) values (900,17);
+insert into t (id,a) values (900,18);
+insert into t (id,a) values (900,19);
+insert into t (id,a) values (900,20);
+insert into t (id,a) values (900,21);
+insert into t (id,a) values (900,22);
+insert into t (id,a) values (900,23);
+insert into t (id,a) values (900,24);
+insert into t (id,a) values (900,25);
+insert into t (id,a) values (900,26);
+insert into t (id,a) values (900,27);
+insert into t (id,a) values (900,28);
+insert into t (id,a) values (900,29);
+insert into t (id,a) values (900,30);
+insert into t (id,a) values (900,31);
+insert into t (id,a) values (900,32);
+insert into t (id,a) values (900,33);
+insert into t (id,a) values (900,34);
+insert into t (id,a) values (900,35);
+insert into t (id,a) values (900,36);
+insert into t (id,a) values (900,37);
+insert into t (id,a) values (900,38);
+insert into t (id,a) values (900,39);
+insert into t (id,a) values (900,40);
+insert into t (id,a) values (900,41);
+insert into t (id,a) values (900,42);
+insert into t (id,a) values (900,43);
+insert into t (id,a) values (900,44);
+insert into t (id,a) values (900,45);
+insert into t (id,a) values (900,46);
+insert into t (id,a) values (900,47);
+insert into t (id,a) values (900,48);
+insert into t (id,a) values (900,49);
+insert into t (id,a) values (900,50);
+insert into t (id,a) values (900,51);
+insert into t (id,a) values (900,52);
+insert into t (id,a) values (900,53);
+insert into t (id,a) values (900,54);
+insert into t (id,a) values (900,55);
+insert into t (id,a) values (900,56);
+insert into t (id,a) values (900,57);
+insert into t (id,a) values (900,58);
+insert into t (id,a) values (900,59);
+insert into t (id,a) values (900,60);
+insert into t (id,a) values (900,61);
+insert into t (id,a) values (900,62);
+insert into t (id,a) values (900,63);
+insert into t (id,a) values (900,64);
+insert into t (id,a) values (900,65);
+insert into t (id,a) values (900,66);
+insert into t (id,a) values (900,67);
+insert into t (id,a) values (900,68);
+insert into t (id,a) values (900,69);
+insert into t (id,a) values (900,70);
+insert into t (id,a) values (900,71);
+insert into t (id,a) values (900,72);
+insert into t (id,a) values (900,73);
+insert into t (id,a) values (900,74);
+insert into t (id,a) values (900,75);
+insert into t (id,a) values (900,76);
+insert into t (id,a) values (900,77);
+insert into t (id,a) values (900,78);
+insert into t (id,a) values (900,79);
+insert into t (id,a) values (900,80);
+insert into t (id,a) values (900,81);
+insert into t (id,a) values (900,82);
+insert into t (id,a) values (900,83);
+insert into t (id,a) values (900,84);
+insert into t (id,a) values (900,85);
+insert into t (id,a) values (900,86);
+insert into t (id,a) values (900,87);
+insert into t (id,a) values (900,88);
+insert into t (id,a) values (900,89);
+insert into t (id,a) values (900,90);
+insert into t (id,a) values (900,91);
+insert into t (id,a) values (900,92);
+insert into t (id,a) values (900,93);
+insert into t (id,a) values (900,94);
+insert into t (id,a) values (900,95);
+insert into t (id,a) values (900,96);
+insert into t (id,a) values (900,97);
+insert into t (id,a) values (900,98);
+insert into t (id,a) values (900,99);
+insert into t (id,a) values (901,0);
+insert into t (id,a) values (901,1);
+insert into t (id,a) values (901,2);
+insert into t (id,a) values (901,3);
+insert into t (id,a) values (901,4);
+insert into t (id,a) values (901,5);
+insert into t (id,a) values (901,6);
+insert into t (id,a) values (901,7);
+insert into t (id,a) values (901,8);
+insert into t (id,a) values (901,9);
+insert into t (id,a) values (901,10);
+insert into t (id,a) values (901,11);
+insert into t (id,a) values (901,12);
+insert into t (id,a) values (901,13);
+insert into t (id,a) values (901,14);
+insert into t (id,a) values (901,15);
+insert into t (id,a) values (901,16);
+insert into t (id,a) values (901,17);
+insert into t (id,a) values (901,18);
+insert into t (id,a) values (901,19);
+insert into t (id,a) values (901,20);
+insert into t (id,a) values (901,21);
+insert into t (id,a) values (901,22);
+insert into t (id,a) values (901,23);
+insert into t (id,a) values (901,24);
+insert into t (id,a) values (901,25);
+insert into t (id,a) values (901,26);
+insert into t (id,a) values (901,27);
+insert into t (id,a) values (901,28);
+insert into t (id,a) values (901,29);
+insert into t (id,a) values (901,30);
+insert into t (id,a) values (901,31);
+insert into t (id,a) values (901,32);
+insert into t (id,a) values (901,33);
+insert into t (id,a) values (901,34);
+insert into t (id,a) values (901,35);
+insert into t (id,a) values (901,36);
+insert into t (id,a) values (901,37);
+insert into t (id,a) values (901,38);
+insert into t (id,a) values (901,39);
+insert into t (id,a) values (901,40);
+insert into t (id,a) values (901,41);
+insert into t (id,a) values (901,42);
+insert into t (id,a) values (901,43);
+insert into t (id,a) values (901,44);
+insert into t (id,a) values (901,45);
+insert into t (id,a) values (901,46);
+insert into t (id,a) values (901,47);
+insert into t (id,a) values (901,48);
+insert into t (id,a) values (901,49);
+insert into t (id,a) values (901,50);
+insert into t (id,a) values (901,51);
+insert into t (id,a) values (901,52);
+insert into t (id,a) values (901,53);
+insert into t (id,a) values (901,54);
+insert into t (id,a) values (901,55);
+insert into t (id,a) values (901,56);
+insert into t (id,a) values (901,57);
+insert into t (id,a) values (901,58);
+insert into t (id,a) values (901,59);
+insert into t (id,a) values (901,60);
+insert into t (id,a) values (901,61);
+insert into t (id,a) values (901,62);
+insert into t (id,a) values (901,63);
+insert into t (id,a) values (901,64);
+insert into t (id,a) values (901,65);
+insert into t (id,a) values (901,66);
+insert into t (id,a) values (901,67);
+insert into t (id,a) values (901,68);
+insert into t (id,a) values (901,69);
+insert into t (id,a) values (901,70);
+insert into t (id,a) values (901,71);
+insert into t (id,a) values (901,72);
+insert into t (id,a) values (901,73);
+insert into t (id,a) values (901,74);
+insert into t (id,a) values (901,75);
+insert into t (id,a) values (901,76);
+insert into t (id,a) values (901,77);
+insert into t (id,a) values (901,78);
+insert into t (id,a) values (901,79);
+insert into t (id,a) values (901,80);
+insert into t (id,a) values (901,81);
+insert into t (id,a) values (901,82);
+insert into t (id,a) values (901,83);
+insert into t (id,a) values (901,84);
+insert into t (id,a) values (901,85);
+insert into t (id,a) values (901,86);
+insert into t (id,a) values (901,87);
+insert into t (id,a) values (901,88);
+insert into t (id,a) values (901,89);
+insert into t (id,a) values (901,90);
+insert into t (id,a) values (901,91);
+insert into t (id,a) values (901,92);
+insert into t (id,a) values (901,93);
+insert into t (id,a) values (901,94);
+insert into t (id,a) values (901,95);
+insert into t (id,a) values (901,96);
+insert into t (id,a) values (901,97);
+insert into t (id,a) values (901,98);
+insert into t (id,a) values (901,99);
+insert into t (id,a) values (902,0);
+insert into t (id,a) values (902,1);
+insert into t (id,a) values (902,2);
+insert into t (id,a) values (902,3);
+insert into t (id,a) values (902,4);
+insert into t (id,a) values (902,5);
+insert into t (id,a) values (902,6);
+insert into t (id,a) values (902,7);
+insert into t (id,a) values (902,8);
+insert into t (id,a) values (902,9);
+insert into t (id,a) values (902,10);
+insert into t (id,a) values (902,11);
+insert into t (id,a) values (902,12);
+insert into t (id,a) values (902,13);
+insert into t (id,a) values (902,14);
+insert into t (id,a) values (902,15);
+insert into t (id,a) values (902,16);
+insert into t (id,a) values (902,17);
+insert into t (id,a) values (902,18);
+insert into t (id,a) values (902,19);
+insert into t (id,a) values (902,20);
+insert into t (id,a) values (902,21);
+insert into t (id,a) values (902,22);
+insert into t (id,a) values (902,23);
+insert into t (id,a) values (902,24);
+insert into t (id,a) values (902,25);
+insert into t (id,a) values (902,26);
+insert into t (id,a) values (902,27);
+insert into t (id,a) values (902,28);
+insert into t (id,a) values (902,29);
+insert into t (id,a) values (902,30);
+insert into t (id,a) values (902,31);
+insert into t (id,a) values (902,32);
+insert into t (id,a) values (902,33);
+insert into t (id,a) values (902,34);
+insert into t (id,a) values (902,35);
+insert into t (id,a) values (902,36);
+insert into t (id,a) values (902,37);
+insert into t (id,a) values (902,38);
+insert into t (id,a) values (902,39);
+insert into t (id,a) values (902,40);
+insert into t (id,a) values (902,41);
+insert into t (id,a) values (902,42);
+insert into t (id,a) values (902,43);
+insert into t (id,a) values (902,44);
+insert into t (id,a) values (902,45);
+insert into t (id,a) values (902,46);
+insert into t (id,a) values (902,47);
+insert into t (id,a) values (902,48);
+insert into t (id,a) values (902,49);
+insert into t (id,a) values (902,50);
+insert into t (id,a) values (902,51);
+insert into t (id,a) values (902,52);
+insert into t (id,a) values (902,53);
+insert into t (id,a) values (902,54);
+insert into t (id,a) values (902,55);
+insert into t (id,a) values (902,56);
+insert into t (id,a) values (902,57);
+insert into t (id,a) values (902,58);
+insert into t (id,a) values (902,59);
+insert into t (id,a) values (902,60);
+insert into t (id,a) values (902,61);
+insert into t (id,a) values (902,62);
+insert into t (id,a) values (902,63);
+insert into t (id,a) values (902,64);
+insert into t (id,a) values (902,65);
+insert into t (id,a) values (902,66);
+insert into t (id,a) values (902,67);
+insert into t (id,a) values (902,68);
+insert into t (id,a) values (902,69);
+insert into t (id,a) values (902,70);
+insert into t (id,a) values (902,71);
+insert into t (id,a) values (902,72);
+insert into t (id,a) values (902,73);
+insert into t (id,a) values (902,74);
+insert into t (id,a) values (902,75);
+insert into t (id,a) values (902,76);
+insert into t (id,a) values (902,77);
+insert into t (id,a) values (902,78);
+insert into t (id,a) values (902,79);
+insert into t (id,a) values (902,80);
+insert into t (id,a) values (902,81);
+insert into t (id,a) values (902,82);
+insert into t (id,a) values (902,83);
+insert into t (id,a) values (902,84);
+insert into t (id,a) values (902,85);
+insert into t (id,a) values (902,86);
+insert into t (id,a) values (902,87);
+insert into t (id,a) values (902,88);
+insert into t (id,a) values (902,89);
+insert into t (id,a) values (902,90);
+insert into t (id,a) values (902,91);
+insert into t (id,a) values (902,92);
+insert into t (id,a) values (902,93);
+insert into t (id,a) values (902,94);
+insert into t (id,a) values (902,95);
+insert into t (id,a) values (902,96);
+insert into t (id,a) values (902,97);
+insert into t (id,a) values (902,98);
+insert into t (id,a) values (902,99);
+insert into t (id,a) values (903,0);
+insert into t (id,a) values (903,1);
+insert into t (id,a) values (903,2);
+insert into t (id,a) values (903,3);
+insert into t (id,a) values (903,4);
+insert into t (id,a) values (903,5);
+insert into t (id,a) values (903,6);
+insert into t (id,a) values (903,7);
+insert into t (id,a) values (903,8);
+insert into t (id,a) values (903,9);
+insert into t (id,a) values (903,10);
+insert into t (id,a) values (903,11);
+insert into t (id,a) values (903,12);
+insert into t (id,a) values (903,13);
+insert into t (id,a) values (903,14);
+insert into t (id,a) values (903,15);
+insert into t (id,a) values (903,16);
+insert into t (id,a) values (903,17);
+insert into t (id,a) values (903,18);
+insert into t (id,a) values (903,19);
+insert into t (id,a) values (903,20);
+insert into t (id,a) values (903,21);
+insert into t (id,a) values (903,22);
+insert into t (id,a) values (903,23);
+insert into t (id,a) values (903,24);
+insert into t (id,a) values (903,25);
+insert into t (id,a) values (903,26);
+insert into t (id,a) values (903,27);
+insert into t (id,a) values (903,28);
+insert into t (id,a) values (903,29);
+insert into t (id,a) values (903,30);
+insert into t (id,a) values (903,31);
+insert into t (id,a) values (903,32);
+insert into t (id,a) values (903,33);
+insert into t (id,a) values (903,34);
+insert into t (id,a) values (903,35);
+insert into t (id,a) values (903,36);
+insert into t (id,a) values (903,37);
+insert into t (id,a) values (903,38);
+insert into t (id,a) values (903,39);
+insert into t (id,a) values (903,40);
+insert into t (id,a) values (903,41);
+insert into t (id,a) values (903,42);
+insert into t (id,a) values (903,43);
+insert into t (id,a) values (903,44);
+insert into t (id,a) values (903,45);
+insert into t (id,a) values (903,46);
+insert into t (id,a) values (903,47);
+insert into t (id,a) values (903,48);
+insert into t (id,a) values (903,49);
+insert into t (id,a) values (903,50);
+insert into t (id,a) values (903,51);
+insert into t (id,a) values (903,52);
+insert into t (id,a) values (903,53);
+insert into t (id,a) values (903,54);
+insert into t (id,a) values (903,55);
+insert into t (id,a) values (903,56);
+insert into t (id,a) values (903,57);
+insert into t (id,a) values (903,58);
+insert into t (id,a) values (903,59);
+insert into t (id,a) values (903,60);
+insert into t (id,a) values (903,61);
+insert into t (id,a) values (903,62);
+insert into t (id,a) values (903,63);
+insert into t (id,a) values (903,64);
+insert into t (id,a) values (903,65);
+insert into t (id,a) values (903,66);
+insert into t (id,a) values (903,67);
+insert into t (id,a) values (903,68);
+insert into t (id,a) values (903,69);
+insert into t (id,a) values (903,70);
+insert into t (id,a) values (903,71);
+insert into t (id,a) values (903,72);
+insert into t (id,a) values (903,73);
+insert into t (id,a) values (903,74);
+insert into t (id,a) values (903,75);
+insert into t (id,a) values (903,76);
+insert into t (id,a) values (903,77);
+insert into t (id,a) values (903,78);
+insert into t (id,a) values (903,79);
+insert into t (id,a) values (903,80);
+insert into t (id,a) values (903,81);
+insert into t (id,a) values (903,82);
+insert into t (id,a) values (903,83);
+insert into t (id,a) values (903,84);
+insert into t (id,a) values (903,85);
+insert into t (id,a) values (903,86);
+insert into t (id,a) values (903,87);
+insert into t (id,a) values (903,88);
+insert into t (id,a) values (903,89);
+insert into t (id,a) values (903,90);
+insert into t (id,a) values (903,91);
+insert into t (id,a) values (903,92);
+insert into t (id,a) values (903,93);
+insert into t (id,a) values (903,94);
+insert into t (id,a) values (903,95);
+insert into t (id,a) values (903,96);
+insert into t (id,a) values (903,97);
+insert into t (id,a) values (903,98);
+insert into t (id,a) values (903,99);
+insert into t (id,a) values (904,0);
+insert into t (id,a) values (904,1);
+insert into t (id,a) values (904,2);
+insert into t (id,a) values (904,3);
+insert into t (id,a) values (904,4);
+insert into t (id,a) values (904,5);
+insert into t (id,a) values (904,6);
+insert into t (id,a) values (904,7);
+insert into t (id,a) values (904,8);
+insert into t (id,a) values (904,9);
+insert into t (id,a) values (904,10);
+insert into t (id,a) values (904,11);
+insert into t (id,a) values (904,12);
+insert into t (id,a) values (904,13);
+insert into t (id,a) values (904,14);
+insert into t (id,a) values (904,15);
+insert into t (id,a) values (904,16);
+insert into t (id,a) values (904,17);
+insert into t (id,a) values (904,18);
+insert into t (id,a) values (904,19);
+insert into t (id,a) values (904,20);
+insert into t (id,a) values (904,21);
+insert into t (id,a) values (904,22);
+insert into t (id,a) values (904,23);
+insert into t (id,a) values (904,24);
+insert into t (id,a) values (904,25);
+insert into t (id,a) values (904,26);
+insert into t (id,a) values (904,27);
+insert into t (id,a) values (904,28);
+insert into t (id,a) values (904,29);
+insert into t (id,a) values (904,30);
+insert into t (id,a) values (904,31);
+insert into t (id,a) values (904,32);
+insert into t (id,a) values (904,33);
+insert into t (id,a) values (904,34);
+insert into t (id,a) values (904,35);
+insert into t (id,a) values (904,36);
+insert into t (id,a) values (904,37);
+insert into t (id,a) values (904,38);
+insert into t (id,a) values (904,39);
+insert into t (id,a) values (904,40);
+insert into t (id,a) values (904,41);
+insert into t (id,a) values (904,42);
+insert into t (id,a) values (904,43);
+insert into t (id,a) values (904,44);
+insert into t (id,a) values (904,45);
+insert into t (id,a) values (904,46);
+insert into t (id,a) values (904,47);
+insert into t (id,a) values (904,48);
+insert into t (id,a) values (904,49);
+insert into t (id,a) values (904,50);
+insert into t (id,a) values (904,51);
+insert into t (id,a) values (904,52);
+insert into t (id,a) values (904,53);
+insert into t (id,a) values (904,54);
+insert into t (id,a) values (904,55);
+insert into t (id,a) values (904,56);
+insert into t (id,a) values (904,57);
+insert into t (id,a) values (904,58);
+insert into t (id,a) values (904,59);
+insert into t (id,a) values (904,60);
+insert into t (id,a) values (904,61);
+insert into t (id,a) values (904,62);
+insert into t (id,a) values (904,63);
+insert into t (id,a) values (904,64);
+insert into t (id,a) values (904,65);
+insert into t (id,a) values (904,66);
+insert into t (id,a) values (904,67);
+insert into t (id,a) values (904,68);
+insert into t (id,a) values (904,69);
+insert into t (id,a) values (904,70);
+insert into t (id,a) values (904,71);
+insert into t (id,a) values (904,72);
+insert into t (id,a) values (904,73);
+insert into t (id,a) values (904,74);
+insert into t (id,a) values (904,75);
+insert into t (id,a) values (904,76);
+insert into t (id,a) values (904,77);
+insert into t (id,a) values (904,78);
+insert into t (id,a) values (904,79);
+insert into t (id,a) values (904,80);
+insert into t (id,a) values (904,81);
+insert into t (id,a) values (904,82);
+insert into t (id,a) values (904,83);
+insert into t (id,a) values (904,84);
+insert into t (id,a) values (904,85);
+insert into t (id,a) values (904,86);
+insert into t (id,a) values (904,87);
+insert into t (id,a) values (904,88);
+insert into t (id,a) values (904,89);
+insert into t (id,a) values (904,90);
+insert into t (id,a) values (904,91);
+insert into t (id,a) values (904,92);
+insert into t (id,a) values (904,93);
+insert into t (id,a) values (904,94);
+insert into t (id,a) values (904,95);
+insert into t (id,a) values (904,96);
+insert into t (id,a) values (904,97);
+insert into t (id,a) values (904,98);
+insert into t (id,a) values (904,99);
+insert into t (id,a) values (905,0);
+insert into t (id,a) values (905,1);
+insert into t (id,a) values (905,2);
+insert into t (id,a) values (905,3);
+insert into t (id,a) values (905,4);
+insert into t (id,a) values (905,5);
+insert into t (id,a) values (905,6);
+insert into t (id,a) values (905,7);
+insert into t (id,a) values (905,8);
+insert into t (id,a) values (905,9);
+insert into t (id,a) values (905,10);
+insert into t (id,a) values (905,11);
+insert into t (id,a) values (905,12);
+insert into t (id,a) values (905,13);
+insert into t (id,a) values (905,14);
+insert into t (id,a) values (905,15);
+insert into t (id,a) values (905,16);
+insert into t (id,a) values (905,17);
+insert into t (id,a) values (905,18);
+insert into t (id,a) values (905,19);
+insert into t (id,a) values (905,20);
+insert into t (id,a) values (905,21);
+insert into t (id,a) values (905,22);
+insert into t (id,a) values (905,23);
+insert into t (id,a) values (905,24);
+insert into t (id,a) values (905,25);
+insert into t (id,a) values (905,26);
+insert into t (id,a) values (905,27);
+insert into t (id,a) values (905,28);
+insert into t (id,a) values (905,29);
+insert into t (id,a) values (905,30);
+insert into t (id,a) values (905,31);
+insert into t (id,a) values (905,32);
+insert into t (id,a) values (905,33);
+insert into t (id,a) values (905,34);
+insert into t (id,a) values (905,35);
+insert into t (id,a) values (905,36);
+insert into t (id,a) values (905,37);
+insert into t (id,a) values (905,38);
+insert into t (id,a) values (905,39);
+insert into t (id,a) values (905,40);
+insert into t (id,a) values (905,41);
+insert into t (id,a) values (905,42);
+insert into t (id,a) values (905,43);
+insert into t (id,a) values (905,44);
+insert into t (id,a) values (905,45);
+insert into t (id,a) values (905,46);
+insert into t (id,a) values (905,47);
+insert into t (id,a) values (905,48);
+insert into t (id,a) values (905,49);
+insert into t (id,a) values (905,50);
+insert into t (id,a) values (905,51);
+insert into t (id,a) values (905,52);
+insert into t (id,a) values (905,53);
+insert into t (id,a) values (905,54);
+insert into t (id,a) values (905,55);
+insert into t (id,a) values (905,56);
+insert into t (id,a) values (905,57);
+insert into t (id,a) values (905,58);
+insert into t (id,a) values (905,59);
+insert into t (id,a) values (905,60);
+insert into t (id,a) values (905,61);
+insert into t (id,a) values (905,62);
+insert into t (id,a) values (905,63);
+insert into t (id,a) values (905,64);
+insert into t (id,a) values (905,65);
+insert into t (id,a) values (905,66);
+insert into t (id,a) values (905,67);
+insert into t (id,a) values (905,68);
+insert into t (id,a) values (905,69);
+insert into t (id,a) values (905,70);
+insert into t (id,a) values (905,71);
+insert into t (id,a) values (905,72);
+insert into t (id,a) values (905,73);
+insert into t (id,a) values (905,74);
+insert into t (id,a) values (905,75);
+insert into t (id,a) values (905,76);
+insert into t (id,a) values (905,77);
+insert into t (id,a) values (905,78);
+insert into t (id,a) values (905,79);
+insert into t (id,a) values (905,80);
+insert into t (id,a) values (905,81);
+insert into t (id,a) values (905,82);
+insert into t (id,a) values (905,83);
+insert into t (id,a) values (905,84);
+insert into t (id,a) values (905,85);
+insert into t (id,a) values (905,86);
+insert into t (id,a) values (905,87);
+insert into t (id,a) values (905,88);
+insert into t (id,a) values (905,89);
+insert into t (id,a) values (905,90);
+insert into t (id,a) values (905,91);
+insert into t (id,a) values (905,92);
+insert into t (id,a) values (905,93);
+insert into t (id,a) values (905,94);
+insert into t (id,a) values (905,95);
+insert into t (id,a) values (905,96);
+insert into t (id,a) values (905,97);
+insert into t (id,a) values (905,98);
+insert into t (id,a) values (905,99);
+insert into t (id,a) values (906,0);
+insert into t (id,a) values (906,1);
+insert into t (id,a) values (906,2);
+insert into t (id,a) values (906,3);
+insert into t (id,a) values (906,4);
+insert into t (id,a) values (906,5);
+insert into t (id,a) values (906,6);
+insert into t (id,a) values (906,7);
+insert into t (id,a) values (906,8);
+insert into t (id,a) values (906,9);
+insert into t (id,a) values (906,10);
+insert into t (id,a) values (906,11);
+insert into t (id,a) values (906,12);
+insert into t (id,a) values (906,13);
+insert into t (id,a) values (906,14);
+insert into t (id,a) values (906,15);
+insert into t (id,a) values (906,16);
+insert into t (id,a) values (906,17);
+insert into t (id,a) values (906,18);
+insert into t (id,a) values (906,19);
+insert into t (id,a) values (906,20);
+insert into t (id,a) values (906,21);
+insert into t (id,a) values (906,22);
+insert into t (id,a) values (906,23);
+insert into t (id,a) values (906,24);
+insert into t (id,a) values (906,25);
+insert into t (id,a) values (906,26);
+insert into t (id,a) values (906,27);
+insert into t (id,a) values (906,28);
+insert into t (id,a) values (906,29);
+insert into t (id,a) values (906,30);
+insert into t (id,a) values (906,31);
+insert into t (id,a) values (906,32);
+insert into t (id,a) values (906,33);
+insert into t (id,a) values (906,34);
+insert into t (id,a) values (906,35);
+insert into t (id,a) values (906,36);
+insert into t (id,a) values (906,37);
+insert into t (id,a) values (906,38);
+insert into t (id,a) values (906,39);
+insert into t (id,a) values (906,40);
+insert into t (id,a) values (906,41);
+insert into t (id,a) values (906,42);
+insert into t (id,a) values (906,43);
+insert into t (id,a) values (906,44);
+insert into t (id,a) values (906,45);
+insert into t (id,a) values (906,46);
+insert into t (id,a) values (906,47);
+insert into t (id,a) values (906,48);
+insert into t (id,a) values (906,49);
+insert into t (id,a) values (906,50);
+insert into t (id,a) values (906,51);
+insert into t (id,a) values (906,52);
+insert into t (id,a) values (906,53);
+insert into t (id,a) values (906,54);
+insert into t (id,a) values (906,55);
+insert into t (id,a) values (906,56);
+insert into t (id,a) values (906,57);
+insert into t (id,a) values (906,58);
+insert into t (id,a) values (906,59);
+insert into t (id,a) values (906,60);
+insert into t (id,a) values (906,61);
+insert into t (id,a) values (906,62);
+insert into t (id,a) values (906,63);
+insert into t (id,a) values (906,64);
+insert into t (id,a) values (906,65);
+insert into t (id,a) values (906,66);
+insert into t (id,a) values (906,67);
+insert into t (id,a) values (906,68);
+insert into t (id,a) values (906,69);
+insert into t (id,a) values (906,70);
+insert into t (id,a) values (906,71);
+insert into t (id,a) values (906,72);
+insert into t (id,a) values (906,73);
+insert into t (id,a) values (906,74);
+insert into t (id,a) values (906,75);
+insert into t (id,a) values (906,76);
+insert into t (id,a) values (906,77);
+insert into t (id,a) values (906,78);
+insert into t (id,a) values (906,79);
+insert into t (id,a) values (906,80);
+insert into t (id,a) values (906,81);
+insert into t (id,a) values (906,82);
+insert into t (id,a) values (906,83);
+insert into t (id,a) values (906,84);
+insert into t (id,a) values (906,85);
+insert into t (id,a) values (906,86);
+insert into t (id,a) values (906,87);
+insert into t (id,a) values (906,88);
+insert into t (id,a) values (906,89);
+insert into t (id,a) values (906,90);
+insert into t (id,a) values (906,91);
+insert into t (id,a) values (906,92);
+insert into t (id,a) values (906,93);
+insert into t (id,a) values (906,94);
+insert into t (id,a) values (906,95);
+insert into t (id,a) values (906,96);
+insert into t (id,a) values (906,97);
+insert into t (id,a) values (906,98);
+insert into t (id,a) values (906,99);
+insert into t (id,a) values (907,0);
+insert into t (id,a) values (907,1);
+insert into t (id,a) values (907,2);
+insert into t (id,a) values (907,3);
+insert into t (id,a) values (907,4);
+insert into t (id,a) values (907,5);
+insert into t (id,a) values (907,6);
+insert into t (id,a) values (907,7);
+insert into t (id,a) values (907,8);
+insert into t (id,a) values (907,9);
+insert into t (id,a) values (907,10);
+insert into t (id,a) values (907,11);
+insert into t (id,a) values (907,12);
+insert into t (id,a) values (907,13);
+insert into t (id,a) values (907,14);
+insert into t (id,a) values (907,15);
+insert into t (id,a) values (907,16);
+insert into t (id,a) values (907,17);
+insert into t (id,a) values (907,18);
+insert into t (id,a) values (907,19);
+insert into t (id,a) values (907,20);
+insert into t (id,a) values (907,21);
+insert into t (id,a) values (907,22);
+insert into t (id,a) values (907,23);
+insert into t (id,a) values (907,24);
+insert into t (id,a) values (907,25);
+insert into t (id,a) values (907,26);
+insert into t (id,a) values (907,27);
+insert into t (id,a) values (907,28);
+insert into t (id,a) values (907,29);
+insert into t (id,a) values (907,30);
+insert into t (id,a) values (907,31);
+insert into t (id,a) values (907,32);
+insert into t (id,a) values (907,33);
+insert into t (id,a) values (907,34);
+insert into t (id,a) values (907,35);
+insert into t (id,a) values (907,36);
+insert into t (id,a) values (907,37);
+insert into t (id,a) values (907,38);
+insert into t (id,a) values (907,39);
+insert into t (id,a) values (907,40);
+insert into t (id,a) values (907,41);
+insert into t (id,a) values (907,42);
+insert into t (id,a) values (907,43);
+insert into t (id,a) values (907,44);
+insert into t (id,a) values (907,45);
+insert into t (id,a) values (907,46);
+insert into t (id,a) values (907,47);
+insert into t (id,a) values (907,48);
+insert into t (id,a) values (907,49);
+insert into t (id,a) values (907,50);
+insert into t (id,a) values (907,51);
+insert into t (id,a) values (907,52);
+insert into t (id,a) values (907,53);
+insert into t (id,a) values (907,54);
+insert into t (id,a) values (907,55);
+insert into t (id,a) values (907,56);
+insert into t (id,a) values (907,57);
+insert into t (id,a) values (907,58);
+insert into t (id,a) values (907,59);
+insert into t (id,a) values (907,60);
+insert into t (id,a) values (907,61);
+insert into t (id,a) values (907,62);
+insert into t (id,a) values (907,63);
+insert into t (id,a) values (907,64);
+insert into t (id,a) values (907,65);
+insert into t (id,a) values (907,66);
+insert into t (id,a) values (907,67);
+insert into t (id,a) values (907,68);
+insert into t (id,a) values (907,69);
+insert into t (id,a) values (907,70);
+insert into t (id,a) values (907,71);
+insert into t (id,a) values (907,72);
+insert into t (id,a) values (907,73);
+insert into t (id,a) values (907,74);
+insert into t (id,a) values (907,75);
+insert into t (id,a) values (907,76);
+insert into t (id,a) values (907,77);
+insert into t (id,a) values (907,78);
+insert into t (id,a) values (907,79);
+insert into t (id,a) values (907,80);
+insert into t (id,a) values (907,81);
+insert into t (id,a) values (907,82);
+insert into t (id,a) values (907,83);
+insert into t (id,a) values (907,84);
+insert into t (id,a) values (907,85);
+insert into t (id,a) values (907,86);
+insert into t (id,a) values (907,87);
+insert into t (id,a) values (907,88);
+insert into t (id,a) values (907,89);
+insert into t (id,a) values (907,90);
+insert into t (id,a) values (907,91);
+insert into t (id,a) values (907,92);
+insert into t (id,a) values (907,93);
+insert into t (id,a) values (907,94);
+insert into t (id,a) values (907,95);
+insert into t (id,a) values (907,96);
+insert into t (id,a) values (907,97);
+insert into t (id,a) values (907,98);
+insert into t (id,a) values (907,99);
+insert into t (id,a) values (908,0);
+insert into t (id,a) values (908,1);
+insert into t (id,a) values (908,2);
+insert into t (id,a) values (908,3);
+insert into t (id,a) values (908,4);
+insert into t (id,a) values (908,5);
+insert into t (id,a) values (908,6);
+insert into t (id,a) values (908,7);
+insert into t (id,a) values (908,8);
+insert into t (id,a) values (908,9);
+insert into t (id,a) values (908,10);
+insert into t (id,a) values (908,11);
+insert into t (id,a) values (908,12);
+insert into t (id,a) values (908,13);
+insert into t (id,a) values (908,14);
+insert into t (id,a) values (908,15);
+insert into t (id,a) values (908,16);
+insert into t (id,a) values (908,17);
+insert into t (id,a) values (908,18);
+insert into t (id,a) values (908,19);
+insert into t (id,a) values (908,20);
+insert into t (id,a) values (908,21);
+insert into t (id,a) values (908,22);
+insert into t (id,a) values (908,23);
+insert into t (id,a) values (908,24);
+insert into t (id,a) values (908,25);
+insert into t (id,a) values (908,26);
+insert into t (id,a) values (908,27);
+insert into t (id,a) values (908,28);
+insert into t (id,a) values (908,29);
+insert into t (id,a) values (908,30);
+insert into t (id,a) values (908,31);
+insert into t (id,a) values (908,32);
+insert into t (id,a) values (908,33);
+insert into t (id,a) values (908,34);
+insert into t (id,a) values (908,35);
+insert into t (id,a) values (908,36);
+insert into t (id,a) values (908,37);
+insert into t (id,a) values (908,38);
+insert into t (id,a) values (908,39);
+insert into t (id,a) values (908,40);
+insert into t (id,a) values (908,41);
+insert into t (id,a) values (908,42);
+insert into t (id,a) values (908,43);
+insert into t (id,a) values (908,44);
+insert into t (id,a) values (908,45);
+insert into t (id,a) values (908,46);
+insert into t (id,a) values (908,47);
+insert into t (id,a) values (908,48);
+insert into t (id,a) values (908,49);
+insert into t (id,a) values (908,50);
+insert into t (id,a) values (908,51);
+insert into t (id,a) values (908,52);
+insert into t (id,a) values (908,53);
+insert into t (id,a) values (908,54);
+insert into t (id,a) values (908,55);
+insert into t (id,a) values (908,56);
+insert into t (id,a) values (908,57);
+insert into t (id,a) values (908,58);
+insert into t (id,a) values (908,59);
+insert into t (id,a) values (908,60);
+insert into t (id,a) values (908,61);
+insert into t (id,a) values (908,62);
+insert into t (id,a) values (908,63);
+insert into t (id,a) values (908,64);
+insert into t (id,a) values (908,65);
+insert into t (id,a) values (908,66);
+insert into t (id,a) values (908,67);
+insert into t (id,a) values (908,68);
+insert into t (id,a) values (908,69);
+insert into t (id,a) values (908,70);
+insert into t (id,a) values (908,71);
+insert into t (id,a) values (908,72);
+insert into t (id,a) values (908,73);
+insert into t (id,a) values (908,74);
+insert into t (id,a) values (908,75);
+insert into t (id,a) values (908,76);
+insert into t (id,a) values (908,77);
+insert into t (id,a) values (908,78);
+insert into t (id,a) values (908,79);
+insert into t (id,a) values (908,80);
+insert into t (id,a) values (908,81);
+insert into t (id,a) values (908,82);
+insert into t (id,a) values (908,83);
+insert into t (id,a) values (908,84);
+insert into t (id,a) values (908,85);
+insert into t (id,a) values (908,86);
+insert into t (id,a) values (908,87);
+insert into t (id,a) values (908,88);
+insert into t (id,a) values (908,89);
+insert into t (id,a) values (908,90);
+insert into t (id,a) values (908,91);
+insert into t (id,a) values (908,92);
+insert into t (id,a) values (908,93);
+insert into t (id,a) values (908,94);
+insert into t (id,a) values (908,95);
+insert into t (id,a) values (908,96);
+insert into t (id,a) values (908,97);
+insert into t (id,a) values (908,98);
+insert into t (id,a) values (908,99);
+insert into t (id,a) values (909,0);
+insert into t (id,a) values (909,1);
+insert into t (id,a) values (909,2);
+insert into t (id,a) values (909,3);
+insert into t (id,a) values (909,4);
+insert into t (id,a) values (909,5);
+insert into t (id,a) values (909,6);
+insert into t (id,a) values (909,7);
+insert into t (id,a) values (909,8);
+insert into t (id,a) values (909,9);
+insert into t (id,a) values (909,10);
+insert into t (id,a) values (909,11);
+insert into t (id,a) values (909,12);
+insert into t (id,a) values (909,13);
+insert into t (id,a) values (909,14);
+insert into t (id,a) values (909,15);
+insert into t (id,a) values (909,16);
+insert into t (id,a) values (909,17);
+insert into t (id,a) values (909,18);
+insert into t (id,a) values (909,19);
+insert into t (id,a) values (909,20);
+insert into t (id,a) values (909,21);
+insert into t (id,a) values (909,22);
+insert into t (id,a) values (909,23);
+insert into t (id,a) values (909,24);
+insert into t (id,a) values (909,25);
+insert into t (id,a) values (909,26);
+insert into t (id,a) values (909,27);
+insert into t (id,a) values (909,28);
+insert into t (id,a) values (909,29);
+insert into t (id,a) values (909,30);
+insert into t (id,a) values (909,31);
+insert into t (id,a) values (909,32);
+insert into t (id,a) values (909,33);
+insert into t (id,a) values (909,34);
+insert into t (id,a) values (909,35);
+insert into t (id,a) values (909,36);
+insert into t (id,a) values (909,37);
+insert into t (id,a) values (909,38);
+insert into t (id,a) values (909,39);
+insert into t (id,a) values (909,40);
+insert into t (id,a) values (909,41);
+insert into t (id,a) values (909,42);
+insert into t (id,a) values (909,43);
+insert into t (id,a) values (909,44);
+insert into t (id,a) values (909,45);
+insert into t (id,a) values (909,46);
+insert into t (id,a) values (909,47);
+insert into t (id,a) values (909,48);
+insert into t (id,a) values (909,49);
+insert into t (id,a) values (909,50);
+insert into t (id,a) values (909,51);
+insert into t (id,a) values (909,52);
+insert into t (id,a) values (909,53);
+insert into t (id,a) values (909,54);
+insert into t (id,a) values (909,55);
+insert into t (id,a) values (909,56);
+insert into t (id,a) values (909,57);
+insert into t (id,a) values (909,58);
+insert into t (id,a) values (909,59);
+insert into t (id,a) values (909,60);
+insert into t (id,a) values (909,61);
+insert into t (id,a) values (909,62);
+insert into t (id,a) values (909,63);
+insert into t (id,a) values (909,64);
+insert into t (id,a) values (909,65);
+insert into t (id,a) values (909,66);
+insert into t (id,a) values (909,67);
+insert into t (id,a) values (909,68);
+insert into t (id,a) values (909,69);
+insert into t (id,a) values (909,70);
+insert into t (id,a) values (909,71);
+insert into t (id,a) values (909,72);
+insert into t (id,a) values (909,73);
+insert into t (id,a) values (909,74);
+insert into t (id,a) values (909,75);
+insert into t (id,a) values (909,76);
+insert into t (id,a) values (909,77);
+insert into t (id,a) values (909,78);
+insert into t (id,a) values (909,79);
+insert into t (id,a) values (909,80);
+insert into t (id,a) values (909,81);
+insert into t (id,a) values (909,82);
+insert into t (id,a) values (909,83);
+insert into t (id,a) values (909,84);
+insert into t (id,a) values (909,85);
+insert into t (id,a) values (909,86);
+insert into t (id,a) values (909,87);
+insert into t (id,a) values (909,88);
+insert into t (id,a) values (909,89);
+insert into t (id,a) values (909,90);
+insert into t (id,a) values (909,91);
+insert into t (id,a) values (909,92);
+insert into t (id,a) values (909,93);
+insert into t (id,a) values (909,94);
+insert into t (id,a) values (909,95);
+insert into t (id,a) values (909,96);
+insert into t (id,a) values (909,97);
+insert into t (id,a) values (909,98);
+insert into t (id,a) values (909,99);
+insert into t (id,a) values (910,0);
+insert into t (id,a) values (910,1);
+insert into t (id,a) values (910,2);
+insert into t (id,a) values (910,3);
+insert into t (id,a) values (910,4);
+insert into t (id,a) values (910,5);
+insert into t (id,a) values (910,6);
+insert into t (id,a) values (910,7);
+insert into t (id,a) values (910,8);
+insert into t (id,a) values (910,9);
+insert into t (id,a) values (910,10);
+insert into t (id,a) values (910,11);
+insert into t (id,a) values (910,12);
+insert into t (id,a) values (910,13);
+insert into t (id,a) values (910,14);
+insert into t (id,a) values (910,15);
+insert into t (id,a) values (910,16);
+insert into t (id,a) values (910,17);
+insert into t (id,a) values (910,18);
+insert into t (id,a) values (910,19);
+insert into t (id,a) values (910,20);
+insert into t (id,a) values (910,21);
+insert into t (id,a) values (910,22);
+insert into t (id,a) values (910,23);
+insert into t (id,a) values (910,24);
+insert into t (id,a) values (910,25);
+insert into t (id,a) values (910,26);
+insert into t (id,a) values (910,27);
+insert into t (id,a) values (910,28);
+insert into t (id,a) values (910,29);
+insert into t (id,a) values (910,30);
+insert into t (id,a) values (910,31);
+insert into t (id,a) values (910,32);
+insert into t (id,a) values (910,33);
+insert into t (id,a) values (910,34);
+insert into t (id,a) values (910,35);
+insert into t (id,a) values (910,36);
+insert into t (id,a) values (910,37);
+insert into t (id,a) values (910,38);
+insert into t (id,a) values (910,39);
+insert into t (id,a) values (910,40);
+insert into t (id,a) values (910,41);
+insert into t (id,a) values (910,42);
+insert into t (id,a) values (910,43);
+insert into t (id,a) values (910,44);
+insert into t (id,a) values (910,45);
+insert into t (id,a) values (910,46);
+insert into t (id,a) values (910,47);
+insert into t (id,a) values (910,48);
+insert into t (id,a) values (910,49);
+insert into t (id,a) values (910,50);
+insert into t (id,a) values (910,51);
+insert into t (id,a) values (910,52);
+insert into t (id,a) values (910,53);
+insert into t (id,a) values (910,54);
+insert into t (id,a) values (910,55);
+insert into t (id,a) values (910,56);
+insert into t (id,a) values (910,57);
+insert into t (id,a) values (910,58);
+insert into t (id,a) values (910,59);
+insert into t (id,a) values (910,60);
+insert into t (id,a) values (910,61);
+insert into t (id,a) values (910,62);
+insert into t (id,a) values (910,63);
+insert into t (id,a) values (910,64);
+insert into t (id,a) values (910,65);
+insert into t (id,a) values (910,66);
+insert into t (id,a) values (910,67);
+insert into t (id,a) values (910,68);
+insert into t (id,a) values (910,69);
+insert into t (id,a) values (910,70);
+insert into t (id,a) values (910,71);
+insert into t (id,a) values (910,72);
+insert into t (id,a) values (910,73);
+insert into t (id,a) values (910,74);
+insert into t (id,a) values (910,75);
+insert into t (id,a) values (910,76);
+insert into t (id,a) values (910,77);
+insert into t (id,a) values (910,78);
+insert into t (id,a) values (910,79);
+insert into t (id,a) values (910,80);
+insert into t (id,a) values (910,81);
+insert into t (id,a) values (910,82);
+insert into t (id,a) values (910,83);
+insert into t (id,a) values (910,84);
+insert into t (id,a) values (910,85);
+insert into t (id,a) values (910,86);
+insert into t (id,a) values (910,87);
+insert into t (id,a) values (910,88);
+insert into t (id,a) values (910,89);
+insert into t (id,a) values (910,90);
+insert into t (id,a) values (910,91);
+insert into t (id,a) values (910,92);
+insert into t (id,a) values (910,93);
+insert into t (id,a) values (910,94);
+insert into t (id,a) values (910,95);
+insert into t (id,a) values (910,96);
+insert into t (id,a) values (910,97);
+insert into t (id,a) values (910,98);
+insert into t (id,a) values (910,99);
+insert into t (id,a) values (911,0);
+insert into t (id,a) values (911,1);
+insert into t (id,a) values (911,2);
+insert into t (id,a) values (911,3);
+insert into t (id,a) values (911,4);
+insert into t (id,a) values (911,5);
+insert into t (id,a) values (911,6);
+insert into t (id,a) values (911,7);
+insert into t (id,a) values (911,8);
+insert into t (id,a) values (911,9);
+insert into t (id,a) values (911,10);
+insert into t (id,a) values (911,11);
+insert into t (id,a) values (911,12);
+insert into t (id,a) values (911,13);
+insert into t (id,a) values (911,14);
+insert into t (id,a) values (911,15);
+insert into t (id,a) values (911,16);
+insert into t (id,a) values (911,17);
+insert into t (id,a) values (911,18);
+insert into t (id,a) values (911,19);
+insert into t (id,a) values (911,20);
+insert into t (id,a) values (911,21);
+insert into t (id,a) values (911,22);
+insert into t (id,a) values (911,23);
+insert into t (id,a) values (911,24);
+insert into t (id,a) values (911,25);
+insert into t (id,a) values (911,26);
+insert into t (id,a) values (911,27);
+insert into t (id,a) values (911,28);
+insert into t (id,a) values (911,29);
+insert into t (id,a) values (911,30);
+insert into t (id,a) values (911,31);
+insert into t (id,a) values (911,32);
+insert into t (id,a) values (911,33);
+insert into t (id,a) values (911,34);
+insert into t (id,a) values (911,35);
+insert into t (id,a) values (911,36);
+insert into t (id,a) values (911,37);
+insert into t (id,a) values (911,38);
+insert into t (id,a) values (911,39);
+insert into t (id,a) values (911,40);
+insert into t (id,a) values (911,41);
+insert into t (id,a) values (911,42);
+insert into t (id,a) values (911,43);
+insert into t (id,a) values (911,44);
+insert into t (id,a) values (911,45);
+insert into t (id,a) values (911,46);
+insert into t (id,a) values (911,47);
+insert into t (id,a) values (911,48);
+insert into t (id,a) values (911,49);
+insert into t (id,a) values (911,50);
+insert into t (id,a) values (911,51);
+insert into t (id,a) values (911,52);
+insert into t (id,a) values (911,53);
+insert into t (id,a) values (911,54);
+insert into t (id,a) values (911,55);
+insert into t (id,a) values (911,56);
+insert into t (id,a) values (911,57);
+insert into t (id,a) values (911,58);
+insert into t (id,a) values (911,59);
+insert into t (id,a) values (911,60);
+insert into t (id,a) values (911,61);
+insert into t (id,a) values (911,62);
+insert into t (id,a) values (911,63);
+insert into t (id,a) values (911,64);
+insert into t (id,a) values (911,65);
+insert into t (id,a) values (911,66);
+insert into t (id,a) values (911,67);
+insert into t (id,a) values (911,68);
+insert into t (id,a) values (911,69);
+insert into t (id,a) values (911,70);
+insert into t (id,a) values (911,71);
+insert into t (id,a) values (911,72);
+insert into t (id,a) values (911,73);
+insert into t (id,a) values (911,74);
+insert into t (id,a) values (911,75);
+insert into t (id,a) values (911,76);
+insert into t (id,a) values (911,77);
+insert into t (id,a) values (911,78);
+insert into t (id,a) values (911,79);
+insert into t (id,a) values (911,80);
+insert into t (id,a) values (911,81);
+insert into t (id,a) values (911,82);
+insert into t (id,a) values (911,83);
+insert into t (id,a) values (911,84);
+insert into t (id,a) values (911,85);
+insert into t (id,a) values (911,86);
+insert into t (id,a) values (911,87);
+insert into t (id,a) values (911,88);
+insert into t (id,a) values (911,89);
+insert into t (id,a) values (911,90);
+insert into t (id,a) values (911,91);
+insert into t (id,a) values (911,92);
+insert into t (id,a) values (911,93);
+insert into t (id,a) values (911,94);
+insert into t (id,a) values (911,95);
+insert into t (id,a) values (911,96);
+insert into t (id,a) values (911,97);
+insert into t (id,a) values (911,98);
+insert into t (id,a) values (911,99);
+insert into t (id,a) values (912,0);
+insert into t (id,a) values (912,1);
+insert into t (id,a) values (912,2);
+insert into t (id,a) values (912,3);
+insert into t (id,a) values (912,4);
+insert into t (id,a) values (912,5);
+insert into t (id,a) values (912,6);
+insert into t (id,a) values (912,7);
+insert into t (id,a) values (912,8);
+insert into t (id,a) values (912,9);
+insert into t (id,a) values (912,10);
+insert into t (id,a) values (912,11);
+insert into t (id,a) values (912,12);
+insert into t (id,a) values (912,13);
+insert into t (id,a) values (912,14);
+insert into t (id,a) values (912,15);
+insert into t (id,a) values (912,16);
+insert into t (id,a) values (912,17);
+insert into t (id,a) values (912,18);
+insert into t (id,a) values (912,19);
+insert into t (id,a) values (912,20);
+insert into t (id,a) values (912,21);
+insert into t (id,a) values (912,22);
+insert into t (id,a) values (912,23);
+insert into t (id,a) values (912,24);
+insert into t (id,a) values (912,25);
+insert into t (id,a) values (912,26);
+insert into t (id,a) values (912,27);
+insert into t (id,a) values (912,28);
+insert into t (id,a) values (912,29);
+insert into t (id,a) values (912,30);
+insert into t (id,a) values (912,31);
+insert into t (id,a) values (912,32);
+insert into t (id,a) values (912,33);
+insert into t (id,a) values (912,34);
+insert into t (id,a) values (912,35);
+insert into t (id,a) values (912,36);
+insert into t (id,a) values (912,37);
+insert into t (id,a) values (912,38);
+insert into t (id,a) values (912,39);
+insert into t (id,a) values (912,40);
+insert into t (id,a) values (912,41);
+insert into t (id,a) values (912,42);
+insert into t (id,a) values (912,43);
+insert into t (id,a) values (912,44);
+insert into t (id,a) values (912,45);
+insert into t (id,a) values (912,46);
+insert into t (id,a) values (912,47);
+insert into t (id,a) values (912,48);
+insert into t (id,a) values (912,49);
+insert into t (id,a) values (912,50);
+insert into t (id,a) values (912,51);
+insert into t (id,a) values (912,52);
+insert into t (id,a) values (912,53);
+insert into t (id,a) values (912,54);
+insert into t (id,a) values (912,55);
+insert into t (id,a) values (912,56);
+insert into t (id,a) values (912,57);
+insert into t (id,a) values (912,58);
+insert into t (id,a) values (912,59);
+insert into t (id,a) values (912,60);
+insert into t (id,a) values (912,61);
+insert into t (id,a) values (912,62);
+insert into t (id,a) values (912,63);
+insert into t (id,a) values (912,64);
+insert into t (id,a) values (912,65);
+insert into t (id,a) values (912,66);
+insert into t (id,a) values (912,67);
+insert into t (id,a) values (912,68);
+insert into t (id,a) values (912,69);
+insert into t (id,a) values (912,70);
+insert into t (id,a) values (912,71);
+insert into t (id,a) values (912,72);
+insert into t (id,a) values (912,73);
+insert into t (id,a) values (912,74);
+insert into t (id,a) values (912,75);
+insert into t (id,a) values (912,76);
+insert into t (id,a) values (912,77);
+insert into t (id,a) values (912,78);
+insert into t (id,a) values (912,79);
+insert into t (id,a) values (912,80);
+insert into t (id,a) values (912,81);
+insert into t (id,a) values (912,82);
+insert into t (id,a) values (912,83);
+insert into t (id,a) values (912,84);
+insert into t (id,a) values (912,85);
+insert into t (id,a) values (912,86);
+insert into t (id,a) values (912,87);
+insert into t (id,a) values (912,88);
+insert into t (id,a) values (912,89);
+insert into t (id,a) values (912,90);
+insert into t (id,a) values (912,91);
+insert into t (id,a) values (912,92);
+insert into t (id,a) values (912,93);
+insert into t (id,a) values (912,94);
+insert into t (id,a) values (912,95);
+insert into t (id,a) values (912,96);
+insert into t (id,a) values (912,97);
+insert into t (id,a) values (912,98);
+insert into t (id,a) values (912,99);
+insert into t (id,a) values (913,0);
+insert into t (id,a) values (913,1);
+insert into t (id,a) values (913,2);
+insert into t (id,a) values (913,3);
+insert into t (id,a) values (913,4);
+insert into t (id,a) values (913,5);
+insert into t (id,a) values (913,6);
+insert into t (id,a) values (913,7);
+insert into t (id,a) values (913,8);
+insert into t (id,a) values (913,9);
+insert into t (id,a) values (913,10);
+insert into t (id,a) values (913,11);
+insert into t (id,a) values (913,12);
+insert into t (id,a) values (913,13);
+insert into t (id,a) values (913,14);
+insert into t (id,a) values (913,15);
+insert into t (id,a) values (913,16);
+insert into t (id,a) values (913,17);
+insert into t (id,a) values (913,18);
+insert into t (id,a) values (913,19);
+insert into t (id,a) values (913,20);
+insert into t (id,a) values (913,21);
+insert into t (id,a) values (913,22);
+insert into t (id,a) values (913,23);
+insert into t (id,a) values (913,24);
+insert into t (id,a) values (913,25);
+insert into t (id,a) values (913,26);
+insert into t (id,a) values (913,27);
+insert into t (id,a) values (913,28);
+insert into t (id,a) values (913,29);
+insert into t (id,a) values (913,30);
+insert into t (id,a) values (913,31);
+insert into t (id,a) values (913,32);
+insert into t (id,a) values (913,33);
+insert into t (id,a) values (913,34);
+insert into t (id,a) values (913,35);
+insert into t (id,a) values (913,36);
+insert into t (id,a) values (913,37);
+insert into t (id,a) values (913,38);
+insert into t (id,a) values (913,39);
+insert into t (id,a) values (913,40);
+insert into t (id,a) values (913,41);
+insert into t (id,a) values (913,42);
+insert into t (id,a) values (913,43);
+insert into t (id,a) values (913,44);
+insert into t (id,a) values (913,45);
+insert into t (id,a) values (913,46);
+insert into t (id,a) values (913,47);
+insert into t (id,a) values (913,48);
+insert into t (id,a) values (913,49);
+insert into t (id,a) values (913,50);
+insert into t (id,a) values (913,51);
+insert into t (id,a) values (913,52);
+insert into t (id,a) values (913,53);
+insert into t (id,a) values (913,54);
+insert into t (id,a) values (913,55);
+insert into t (id,a) values (913,56);
+insert into t (id,a) values (913,57);
+insert into t (id,a) values (913,58);
+insert into t (id,a) values (913,59);
+insert into t (id,a) values (913,60);
+insert into t (id,a) values (913,61);
+insert into t (id,a) values (913,62);
+insert into t (id,a) values (913,63);
+insert into t (id,a) values (913,64);
+insert into t (id,a) values (913,65);
+insert into t (id,a) values (913,66);
+insert into t (id,a) values (913,67);
+insert into t (id,a) values (913,68);
+insert into t (id,a) values (913,69);
+insert into t (id,a) values (913,70);
+insert into t (id,a) values (913,71);
+insert into t (id,a) values (913,72);
+insert into t (id,a) values (913,73);
+insert into t (id,a) values (913,74);
+insert into t (id,a) values (913,75);
+insert into t (id,a) values (913,76);
+insert into t (id,a) values (913,77);
+insert into t (id,a) values (913,78);
+insert into t (id,a) values (913,79);
+insert into t (id,a) values (913,80);
+insert into t (id,a) values (913,81);
+insert into t (id,a) values (913,82);
+insert into t (id,a) values (913,83);
+insert into t (id,a) values (913,84);
+insert into t (id,a) values (913,85);
+insert into t (id,a) values (913,86);
+insert into t (id,a) values (913,87);
+insert into t (id,a) values (913,88);
+insert into t (id,a) values (913,89);
+insert into t (id,a) values (913,90);
+insert into t (id,a) values (913,91);
+insert into t (id,a) values (913,92);
+insert into t (id,a) values (913,93);
+insert into t (id,a) values (913,94);
+insert into t (id,a) values (913,95);
+insert into t (id,a) values (913,96);
+insert into t (id,a) values (913,97);
+insert into t (id,a) values (913,98);
+insert into t (id,a) values (913,99);
+insert into t (id,a) values (914,0);
+insert into t (id,a) values (914,1);
+insert into t (id,a) values (914,2);
+insert into t (id,a) values (914,3);
+insert into t (id,a) values (914,4);
+insert into t (id,a) values (914,5);
+insert into t (id,a) values (914,6);
+insert into t (id,a) values (914,7);
+insert into t (id,a) values (914,8);
+insert into t (id,a) values (914,9);
+insert into t (id,a) values (914,10);
+insert into t (id,a) values (914,11);
+insert into t (id,a) values (914,12);
+insert into t (id,a) values (914,13);
+insert into t (id,a) values (914,14);
+insert into t (id,a) values (914,15);
+insert into t (id,a) values (914,16);
+insert into t (id,a) values (914,17);
+insert into t (id,a) values (914,18);
+insert into t (id,a) values (914,19);
+insert into t (id,a) values (914,20);
+insert into t (id,a) values (914,21);
+insert into t (id,a) values (914,22);
+insert into t (id,a) values (914,23);
+insert into t (id,a) values (914,24);
+insert into t (id,a) values (914,25);
+insert into t (id,a) values (914,26);
+insert into t (id,a) values (914,27);
+insert into t (id,a) values (914,28);
+insert into t (id,a) values (914,29);
+insert into t (id,a) values (914,30);
+insert into t (id,a) values (914,31);
+insert into t (id,a) values (914,32);
+insert into t (id,a) values (914,33);
+insert into t (id,a) values (914,34);
+insert into t (id,a) values (914,35);
+insert into t (id,a) values (914,36);
+insert into t (id,a) values (914,37);
+insert into t (id,a) values (914,38);
+insert into t (id,a) values (914,39);
+insert into t (id,a) values (914,40);
+insert into t (id,a) values (914,41);
+insert into t (id,a) values (914,42);
+insert into t (id,a) values (914,43);
+insert into t (id,a) values (914,44);
+insert into t (id,a) values (914,45);
+insert into t (id,a) values (914,46);
+insert into t (id,a) values (914,47);
+insert into t (id,a) values (914,48);
+insert into t (id,a) values (914,49);
+insert into t (id,a) values (914,50);
+insert into t (id,a) values (914,51);
+insert into t (id,a) values (914,52);
+insert into t (id,a) values (914,53);
+insert into t (id,a) values (914,54);
+insert into t (id,a) values (914,55);
+insert into t (id,a) values (914,56);
+insert into t (id,a) values (914,57);
+insert into t (id,a) values (914,58);
+insert into t (id,a) values (914,59);
+insert into t (id,a) values (914,60);
+insert into t (id,a) values (914,61);
+insert into t (id,a) values (914,62);
+insert into t (id,a) values (914,63);
+insert into t (id,a) values (914,64);
+insert into t (id,a) values (914,65);
+insert into t (id,a) values (914,66);
+insert into t (id,a) values (914,67);
+insert into t (id,a) values (914,68);
+insert into t (id,a) values (914,69);
+insert into t (id,a) values (914,70);
+insert into t (id,a) values (914,71);
+insert into t (id,a) values (914,72);
+insert into t (id,a) values (914,73);
+insert into t (id,a) values (914,74);
+insert into t (id,a) values (914,75);
+insert into t (id,a) values (914,76);
+insert into t (id,a) values (914,77);
+insert into t (id,a) values (914,78);
+insert into t (id,a) values (914,79);
+insert into t (id,a) values (914,80);
+insert into t (id,a) values (914,81);
+insert into t (id,a) values (914,82);
+insert into t (id,a) values (914,83);
+insert into t (id,a) values (914,84);
+insert into t (id,a) values (914,85);
+insert into t (id,a) values (914,86);
+insert into t (id,a) values (914,87);
+insert into t (id,a) values (914,88);
+insert into t (id,a) values (914,89);
+insert into t (id,a) values (914,90);
+insert into t (id,a) values (914,91);
+insert into t (id,a) values (914,92);
+insert into t (id,a) values (914,93);
+insert into t (id,a) values (914,94);
+insert into t (id,a) values (914,95);
+insert into t (id,a) values (914,96);
+insert into t (id,a) values (914,97);
+insert into t (id,a) values (914,98);
+insert into t (id,a) values (914,99);
+insert into t (id,a) values (915,0);
+insert into t (id,a) values (915,1);
+insert into t (id,a) values (915,2);
+insert into t (id,a) values (915,3);
+insert into t (id,a) values (915,4);
+insert into t (id,a) values (915,5);
+insert into t (id,a) values (915,6);
+insert into t (id,a) values (915,7);
+insert into t (id,a) values (915,8);
+insert into t (id,a) values (915,9);
+insert into t (id,a) values (915,10);
+insert into t (id,a) values (915,11);
+insert into t (id,a) values (915,12);
+insert into t (id,a) values (915,13);
+insert into t (id,a) values (915,14);
+insert into t (id,a) values (915,15);
+insert into t (id,a) values (915,16);
+insert into t (id,a) values (915,17);
+insert into t (id,a) values (915,18);
+insert into t (id,a) values (915,19);
+insert into t (id,a) values (915,20);
+insert into t (id,a) values (915,21);
+insert into t (id,a) values (915,22);
+insert into t (id,a) values (915,23);
+insert into t (id,a) values (915,24);
+insert into t (id,a) values (915,25);
+insert into t (id,a) values (915,26);
+insert into t (id,a) values (915,27);
+insert into t (id,a) values (915,28);
+insert into t (id,a) values (915,29);
+insert into t (id,a) values (915,30);
+insert into t (id,a) values (915,31);
+insert into t (id,a) values (915,32);
+insert into t (id,a) values (915,33);
+insert into t (id,a) values (915,34);
+insert into t (id,a) values (915,35);
+insert into t (id,a) values (915,36);
+insert into t (id,a) values (915,37);
+insert into t (id,a) values (915,38);
+insert into t (id,a) values (915,39);
+insert into t (id,a) values (915,40);
+insert into t (id,a) values (915,41);
+insert into t (id,a) values (915,42);
+insert into t (id,a) values (915,43);
+insert into t (id,a) values (915,44);
+insert into t (id,a) values (915,45);
+insert into t (id,a) values (915,46);
+insert into t (id,a) values (915,47);
+insert into t (id,a) values (915,48);
+insert into t (id,a) values (915,49);
+insert into t (id,a) values (915,50);
+insert into t (id,a) values (915,51);
+insert into t (id,a) values (915,52);
+insert into t (id,a) values (915,53);
+insert into t (id,a) values (915,54);
+insert into t (id,a) values (915,55);
+insert into t (id,a) values (915,56);
+insert into t (id,a) values (915,57);
+insert into t (id,a) values (915,58);
+insert into t (id,a) values (915,59);
+insert into t (id,a) values (915,60);
+insert into t (id,a) values (915,61);
+insert into t (id,a) values (915,62);
+insert into t (id,a) values (915,63);
+insert into t (id,a) values (915,64);
+insert into t (id,a) values (915,65);
+insert into t (id,a) values (915,66);
+insert into t (id,a) values (915,67);
+insert into t (id,a) values (915,68);
+insert into t (id,a) values (915,69);
+insert into t (id,a) values (915,70);
+insert into t (id,a) values (915,71);
+insert into t (id,a) values (915,72);
+insert into t (id,a) values (915,73);
+insert into t (id,a) values (915,74);
+insert into t (id,a) values (915,75);
+insert into t (id,a) values (915,76);
+insert into t (id,a) values (915,77);
+insert into t (id,a) values (915,78);
+insert into t (id,a) values (915,79);
+insert into t (id,a) values (915,80);
+insert into t (id,a) values (915,81);
+insert into t (id,a) values (915,82);
+insert into t (id,a) values (915,83);
+insert into t (id,a) values (915,84);
+insert into t (id,a) values (915,85);
+insert into t (id,a) values (915,86);
+insert into t (id,a) values (915,87);
+insert into t (id,a) values (915,88);
+insert into t (id,a) values (915,89);
+insert into t (id,a) values (915,90);
+insert into t (id,a) values (915,91);
+insert into t (id,a) values (915,92);
+insert into t (id,a) values (915,93);
+insert into t (id,a) values (915,94);
+insert into t (id,a) values (915,95);
+insert into t (id,a) values (915,96);
+insert into t (id,a) values (915,97);
+insert into t (id,a) values (915,98);
+insert into t (id,a) values (915,99);
+insert into t (id,a) values (916,0);
+insert into t (id,a) values (916,1);
+insert into t (id,a) values (916,2);
+insert into t (id,a) values (916,3);
+insert into t (id,a) values (916,4);
+insert into t (id,a) values (916,5);
+insert into t (id,a) values (916,6);
+insert into t (id,a) values (916,7);
+insert into t (id,a) values (916,8);
+insert into t (id,a) values (916,9);
+insert into t (id,a) values (916,10);
+insert into t (id,a) values (916,11);
+insert into t (id,a) values (916,12);
+insert into t (id,a) values (916,13);
+insert into t (id,a) values (916,14);
+insert into t (id,a) values (916,15);
+insert into t (id,a) values (916,16);
+insert into t (id,a) values (916,17);
+insert into t (id,a) values (916,18);
+insert into t (id,a) values (916,19);
+insert into t (id,a) values (916,20);
+insert into t (id,a) values (916,21);
+insert into t (id,a) values (916,22);
+insert into t (id,a) values (916,23);
+insert into t (id,a) values (916,24);
+insert into t (id,a) values (916,25);
+insert into t (id,a) values (916,26);
+insert into t (id,a) values (916,27);
+insert into t (id,a) values (916,28);
+insert into t (id,a) values (916,29);
+insert into t (id,a) values (916,30);
+insert into t (id,a) values (916,31);
+insert into t (id,a) values (916,32);
+insert into t (id,a) values (916,33);
+insert into t (id,a) values (916,34);
+insert into t (id,a) values (916,35);
+insert into t (id,a) values (916,36);
+insert into t (id,a) values (916,37);
+insert into t (id,a) values (916,38);
+insert into t (id,a) values (916,39);
+insert into t (id,a) values (916,40);
+insert into t (id,a) values (916,41);
+insert into t (id,a) values (916,42);
+insert into t (id,a) values (916,43);
+insert into t (id,a) values (916,44);
+insert into t (id,a) values (916,45);
+insert into t (id,a) values (916,46);
+insert into t (id,a) values (916,47);
+insert into t (id,a) values (916,48);
+insert into t (id,a) values (916,49);
+insert into t (id,a) values (916,50);
+insert into t (id,a) values (916,51);
+insert into t (id,a) values (916,52);
+insert into t (id,a) values (916,53);
+insert into t (id,a) values (916,54);
+insert into t (id,a) values (916,55);
+insert into t (id,a) values (916,56);
+insert into t (id,a) values (916,57);
+insert into t (id,a) values (916,58);
+insert into t (id,a) values (916,59);
+insert into t (id,a) values (916,60);
+insert into t (id,a) values (916,61);
+insert into t (id,a) values (916,62);
+insert into t (id,a) values (916,63);
+insert into t (id,a) values (916,64);
+insert into t (id,a) values (916,65);
+insert into t (id,a) values (916,66);
+insert into t (id,a) values (916,67);
+insert into t (id,a) values (916,68);
+insert into t (id,a) values (916,69);
+insert into t (id,a) values (916,70);
+insert into t (id,a) values (916,71);
+insert into t (id,a) values (916,72);
+insert into t (id,a) values (916,73);
+insert into t (id,a) values (916,74);
+insert into t (id,a) values (916,75);
+insert into t (id,a) values (916,76);
+insert into t (id,a) values (916,77);
+insert into t (id,a) values (916,78);
+insert into t (id,a) values (916,79);
+insert into t (id,a) values (916,80);
+insert into t (id,a) values (916,81);
+insert into t (id,a) values (916,82);
+insert into t (id,a) values (916,83);
+insert into t (id,a) values (916,84);
+insert into t (id,a) values (916,85);
+insert into t (id,a) values (916,86);
+insert into t (id,a) values (916,87);
+insert into t (id,a) values (916,88);
+insert into t (id,a) values (916,89);
+insert into t (id,a) values (916,90);
+insert into t (id,a) values (916,91);
+insert into t (id,a) values (916,92);
+insert into t (id,a) values (916,93);
+insert into t (id,a) values (916,94);
+insert into t (id,a) values (916,95);
+insert into t (id,a) values (916,96);
+insert into t (id,a) values (916,97);
+insert into t (id,a) values (916,98);
+insert into t (id,a) values (916,99);
+insert into t (id,a) values (917,0);
+insert into t (id,a) values (917,1);
+insert into t (id,a) values (917,2);
+insert into t (id,a) values (917,3);
+insert into t (id,a) values (917,4);
+insert into t (id,a) values (917,5);
+insert into t (id,a) values (917,6);
+insert into t (id,a) values (917,7);
+insert into t (id,a) values (917,8);
+insert into t (id,a) values (917,9);
+insert into t (id,a) values (917,10);
+insert into t (id,a) values (917,11);
+insert into t (id,a) values (917,12);
+insert into t (id,a) values (917,13);
+insert into t (id,a) values (917,14);
+insert into t (id,a) values (917,15);
+insert into t (id,a) values (917,16);
+insert into t (id,a) values (917,17);
+insert into t (id,a) values (917,18);
+insert into t (id,a) values (917,19);
+insert into t (id,a) values (917,20);
+insert into t (id,a) values (917,21);
+insert into t (id,a) values (917,22);
+insert into t (id,a) values (917,23);
+insert into t (id,a) values (917,24);
+insert into t (id,a) values (917,25);
+insert into t (id,a) values (917,26);
+insert into t (id,a) values (917,27);
+insert into t (id,a) values (917,28);
+insert into t (id,a) values (917,29);
+insert into t (id,a) values (917,30);
+insert into t (id,a) values (917,31);
+insert into t (id,a) values (917,32);
+insert into t (id,a) values (917,33);
+insert into t (id,a) values (917,34);
+insert into t (id,a) values (917,35);
+insert into t (id,a) values (917,36);
+insert into t (id,a) values (917,37);
+insert into t (id,a) values (917,38);
+insert into t (id,a) values (917,39);
+insert into t (id,a) values (917,40);
+insert into t (id,a) values (917,41);
+insert into t (id,a) values (917,42);
+insert into t (id,a) values (917,43);
+insert into t (id,a) values (917,44);
+insert into t (id,a) values (917,45);
+insert into t (id,a) values (917,46);
+insert into t (id,a) values (917,47);
+insert into t (id,a) values (917,48);
+insert into t (id,a) values (917,49);
+insert into t (id,a) values (917,50);
+insert into t (id,a) values (917,51);
+insert into t (id,a) values (917,52);
+insert into t (id,a) values (917,53);
+insert into t (id,a) values (917,54);
+insert into t (id,a) values (917,55);
+insert into t (id,a) values (917,56);
+insert into t (id,a) values (917,57);
+insert into t (id,a) values (917,58);
+insert into t (id,a) values (917,59);
+insert into t (id,a) values (917,60);
+insert into t (id,a) values (917,61);
+insert into t (id,a) values (917,62);
+insert into t (id,a) values (917,63);
+insert into t (id,a) values (917,64);
+insert into t (id,a) values (917,65);
+insert into t (id,a) values (917,66);
+insert into t (id,a) values (917,67);
+insert into t (id,a) values (917,68);
+insert into t (id,a) values (917,69);
+insert into t (id,a) values (917,70);
+insert into t (id,a) values (917,71);
+insert into t (id,a) values (917,72);
+insert into t (id,a) values (917,73);
+insert into t (id,a) values (917,74);
+insert into t (id,a) values (917,75);
+insert into t (id,a) values (917,76);
+insert into t (id,a) values (917,77);
+insert into t (id,a) values (917,78);
+insert into t (id,a) values (917,79);
+insert into t (id,a) values (917,80);
+insert into t (id,a) values (917,81);
+insert into t (id,a) values (917,82);
+insert into t (id,a) values (917,83);
+insert into t (id,a) values (917,84);
+insert into t (id,a) values (917,85);
+insert into t (id,a) values (917,86);
+insert into t (id,a) values (917,87);
+insert into t (id,a) values (917,88);
+insert into t (id,a) values (917,89);
+insert into t (id,a) values (917,90);
+insert into t (id,a) values (917,91);
+insert into t (id,a) values (917,92);
+insert into t (id,a) values (917,93);
+insert into t (id,a) values (917,94);
+insert into t (id,a) values (917,95);
+insert into t (id,a) values (917,96);
+insert into t (id,a) values (917,97);
+insert into t (id,a) values (917,98);
+insert into t (id,a) values (917,99);
+insert into t (id,a) values (918,0);
+insert into t (id,a) values (918,1);
+insert into t (id,a) values (918,2);
+insert into t (id,a) values (918,3);
+insert into t (id,a) values (918,4);
+insert into t (id,a) values (918,5);
+insert into t (id,a) values (918,6);
+insert into t (id,a) values (918,7);
+insert into t (id,a) values (918,8);
+insert into t (id,a) values (918,9);
+insert into t (id,a) values (918,10);
+insert into t (id,a) values (918,11);
+insert into t (id,a) values (918,12);
+insert into t (id,a) values (918,13);
+insert into t (id,a) values (918,14);
+insert into t (id,a) values (918,15);
+insert into t (id,a) values (918,16);
+insert into t (id,a) values (918,17);
+insert into t (id,a) values (918,18);
+insert into t (id,a) values (918,19);
+insert into t (id,a) values (918,20);
+insert into t (id,a) values (918,21);
+insert into t (id,a) values (918,22);
+insert into t (id,a) values (918,23);
+insert into t (id,a) values (918,24);
+insert into t (id,a) values (918,25);
+insert into t (id,a) values (918,26);
+insert into t (id,a) values (918,27);
+insert into t (id,a) values (918,28);
+insert into t (id,a) values (918,29);
+insert into t (id,a) values (918,30);
+insert into t (id,a) values (918,31);
+insert into t (id,a) values (918,32);
+insert into t (id,a) values (918,33);
+insert into t (id,a) values (918,34);
+insert into t (id,a) values (918,35);
+insert into t (id,a) values (918,36);
+insert into t (id,a) values (918,37);
+insert into t (id,a) values (918,38);
+insert into t (id,a) values (918,39);
+insert into t (id,a) values (918,40);
+insert into t (id,a) values (918,41);
+insert into t (id,a) values (918,42);
+insert into t (id,a) values (918,43);
+insert into t (id,a) values (918,44);
+insert into t (id,a) values (918,45);
+insert into t (id,a) values (918,46);
+insert into t (id,a) values (918,47);
+insert into t (id,a) values (918,48);
+insert into t (id,a) values (918,49);
+insert into t (id,a) values (918,50);
+insert into t (id,a) values (918,51);
+insert into t (id,a) values (918,52);
+insert into t (id,a) values (918,53);
+insert into t (id,a) values (918,54);
+insert into t (id,a) values (918,55);
+insert into t (id,a) values (918,56);
+insert into t (id,a) values (918,57);
+insert into t (id,a) values (918,58);
+insert into t (id,a) values (918,59);
+insert into t (id,a) values (918,60);
+insert into t (id,a) values (918,61);
+insert into t (id,a) values (918,62);
+insert into t (id,a) values (918,63);
+insert into t (id,a) values (918,64);
+insert into t (id,a) values (918,65);
+insert into t (id,a) values (918,66);
+insert into t (id,a) values (918,67);
+insert into t (id,a) values (918,68);
+insert into t (id,a) values (918,69);
+insert into t (id,a) values (918,70);
+insert into t (id,a) values (918,71);
+insert into t (id,a) values (918,72);
+insert into t (id,a) values (918,73);
+insert into t (id,a) values (918,74);
+insert into t (id,a) values (918,75);
+insert into t (id,a) values (918,76);
+insert into t (id,a) values (918,77);
+insert into t (id,a) values (918,78);
+insert into t (id,a) values (918,79);
+insert into t (id,a) values (918,80);
+insert into t (id,a) values (918,81);
+insert into t (id,a) values (918,82);
+insert into t (id,a) values (918,83);
+insert into t (id,a) values (918,84);
+insert into t (id,a) values (918,85);
+insert into t (id,a) values (918,86);
+insert into t (id,a) values (918,87);
+insert into t (id,a) values (918,88);
+insert into t (id,a) values (918,89);
+insert into t (id,a) values (918,90);
+insert into t (id,a) values (918,91);
+insert into t (id,a) values (918,92);
+insert into t (id,a) values (918,93);
+insert into t (id,a) values (918,94);
+insert into t (id,a) values (918,95);
+insert into t (id,a) values (918,96);
+insert into t (id,a) values (918,97);
+insert into t (id,a) values (918,98);
+insert into t (id,a) values (918,99);
+insert into t (id,a) values (919,0);
+insert into t (id,a) values (919,1);
+insert into t (id,a) values (919,2);
+insert into t (id,a) values (919,3);
+insert into t (id,a) values (919,4);
+insert into t (id,a) values (919,5);
+insert into t (id,a) values (919,6);
+insert into t (id,a) values (919,7);
+insert into t (id,a) values (919,8);
+insert into t (id,a) values (919,9);
+insert into t (id,a) values (919,10);
+insert into t (id,a) values (919,11);
+insert into t (id,a) values (919,12);
+insert into t (id,a) values (919,13);
+insert into t (id,a) values (919,14);
+insert into t (id,a) values (919,15);
+insert into t (id,a) values (919,16);
+insert into t (id,a) values (919,17);
+insert into t (id,a) values (919,18);
+insert into t (id,a) values (919,19);
+insert into t (id,a) values (919,20);
+insert into t (id,a) values (919,21);
+insert into t (id,a) values (919,22);
+insert into t (id,a) values (919,23);
+insert into t (id,a) values (919,24);
+insert into t (id,a) values (919,25);
+insert into t (id,a) values (919,26);
+insert into t (id,a) values (919,27);
+insert into t (id,a) values (919,28);
+insert into t (id,a) values (919,29);
+insert into t (id,a) values (919,30);
+insert into t (id,a) values (919,31);
+insert into t (id,a) values (919,32);
+insert into t (id,a) values (919,33);
+insert into t (id,a) values (919,34);
+insert into t (id,a) values (919,35);
+insert into t (id,a) values (919,36);
+insert into t (id,a) values (919,37);
+insert into t (id,a) values (919,38);
+insert into t (id,a) values (919,39);
+insert into t (id,a) values (919,40);
+insert into t (id,a) values (919,41);
+insert into t (id,a) values (919,42);
+insert into t (id,a) values (919,43);
+insert into t (id,a) values (919,44);
+insert into t (id,a) values (919,45);
+insert into t (id,a) values (919,46);
+insert into t (id,a) values (919,47);
+insert into t (id,a) values (919,48);
+insert into t (id,a) values (919,49);
+insert into t (id,a) values (919,50);
+insert into t (id,a) values (919,51);
+insert into t (id,a) values (919,52);
+insert into t (id,a) values (919,53);
+insert into t (id,a) values (919,54);
+insert into t (id,a) values (919,55);
+insert into t (id,a) values (919,56);
+insert into t (id,a) values (919,57);
+insert into t (id,a) values (919,58);
+insert into t (id,a) values (919,59);
+insert into t (id,a) values (919,60);
+insert into t (id,a) values (919,61);
+insert into t (id,a) values (919,62);
+insert into t (id,a) values (919,63);
+insert into t (id,a) values (919,64);
+insert into t (id,a) values (919,65);
+insert into t (id,a) values (919,66);
+insert into t (id,a) values (919,67);
+insert into t (id,a) values (919,68);
+insert into t (id,a) values (919,69);
+insert into t (id,a) values (919,70);
+insert into t (id,a) values (919,71);
+insert into t (id,a) values (919,72);
+insert into t (id,a) values (919,73);
+insert into t (id,a) values (919,74);
+insert into t (id,a) values (919,75);
+insert into t (id,a) values (919,76);
+insert into t (id,a) values (919,77);
+insert into t (id,a) values (919,78);
+insert into t (id,a) values (919,79);
+insert into t (id,a) values (919,80);
+insert into t (id,a) values (919,81);
+insert into t (id,a) values (919,82);
+insert into t (id,a) values (919,83);
+insert into t (id,a) values (919,84);
+insert into t (id,a) values (919,85);
+insert into t (id,a) values (919,86);
+insert into t (id,a) values (919,87);
+insert into t (id,a) values (919,88);
+insert into t (id,a) values (919,89);
+insert into t (id,a) values (919,90);
+insert into t (id,a) values (919,91);
+insert into t (id,a) values (919,92);
+insert into t (id,a) values (919,93);
+insert into t (id,a) values (919,94);
+insert into t (id,a) values (919,95);
+insert into t (id,a) values (919,96);
+insert into t (id,a) values (919,97);
+insert into t (id,a) values (919,98);
+insert into t (id,a) values (919,99);
+insert into t (id,a) values (920,0);
+insert into t (id,a) values (920,1);
+insert into t (id,a) values (920,2);
+insert into t (id,a) values (920,3);
+insert into t (id,a) values (920,4);
+insert into t (id,a) values (920,5);
+insert into t (id,a) values (920,6);
+insert into t (id,a) values (920,7);
+insert into t (id,a) values (920,8);
+insert into t (id,a) values (920,9);
+insert into t (id,a) values (920,10);
+insert into t (id,a) values (920,11);
+insert into t (id,a) values (920,12);
+insert into t (id,a) values (920,13);
+insert into t (id,a) values (920,14);
+insert into t (id,a) values (920,15);
+insert into t (id,a) values (920,16);
+insert into t (id,a) values (920,17);
+insert into t (id,a) values (920,18);
+insert into t (id,a) values (920,19);
+insert into t (id,a) values (920,20);
+insert into t (id,a) values (920,21);
+insert into t (id,a) values (920,22);
+insert into t (id,a) values (920,23);
+insert into t (id,a) values (920,24);
+insert into t (id,a) values (920,25);
+insert into t (id,a) values (920,26);
+insert into t (id,a) values (920,27);
+insert into t (id,a) values (920,28);
+insert into t (id,a) values (920,29);
+insert into t (id,a) values (920,30);
+insert into t (id,a) values (920,31);
+insert into t (id,a) values (920,32);
+insert into t (id,a) values (920,33);
+insert into t (id,a) values (920,34);
+insert into t (id,a) values (920,35);
+insert into t (id,a) values (920,36);
+insert into t (id,a) values (920,37);
+insert into t (id,a) values (920,38);
+insert into t (id,a) values (920,39);
+insert into t (id,a) values (920,40);
+insert into t (id,a) values (920,41);
+insert into t (id,a) values (920,42);
+insert into t (id,a) values (920,43);
+insert into t (id,a) values (920,44);
+insert into t (id,a) values (920,45);
+insert into t (id,a) values (920,46);
+insert into t (id,a) values (920,47);
+insert into t (id,a) values (920,48);
+insert into t (id,a) values (920,49);
+insert into t (id,a) values (920,50);
+insert into t (id,a) values (920,51);
+insert into t (id,a) values (920,52);
+insert into t (id,a) values (920,53);
+insert into t (id,a) values (920,54);
+insert into t (id,a) values (920,55);
+insert into t (id,a) values (920,56);
+insert into t (id,a) values (920,57);
+insert into t (id,a) values (920,58);
+insert into t (id,a) values (920,59);
+insert into t (id,a) values (920,60);
+insert into t (id,a) values (920,61);
+insert into t (id,a) values (920,62);
+insert into t (id,a) values (920,63);
+insert into t (id,a) values (920,64);
+insert into t (id,a) values (920,65);
+insert into t (id,a) values (920,66);
+insert into t (id,a) values (920,67);
+insert into t (id,a) values (920,68);
+insert into t (id,a) values (920,69);
+insert into t (id,a) values (920,70);
+insert into t (id,a) values (920,71);
+insert into t (id,a) values (920,72);
+insert into t (id,a) values (920,73);
+insert into t (id,a) values (920,74);
+insert into t (id,a) values (920,75);
+insert into t (id,a) values (920,76);
+insert into t (id,a) values (920,77);
+insert into t (id,a) values (920,78);
+insert into t (id,a) values (920,79);
+insert into t (id,a) values (920,80);
+insert into t (id,a) values (920,81);
+insert into t (id,a) values (920,82);
+insert into t (id,a) values (920,83);
+insert into t (id,a) values (920,84);
+insert into t (id,a) values (920,85);
+insert into t (id,a) values (920,86);
+insert into t (id,a) values (920,87);
+insert into t (id,a) values (920,88);
+insert into t (id,a) values (920,89);
+insert into t (id,a) values (920,90);
+insert into t (id,a) values (920,91);
+insert into t (id,a) values (920,92);
+insert into t (id,a) values (920,93);
+insert into t (id,a) values (920,94);
+insert into t (id,a) values (920,95);
+insert into t (id,a) values (920,96);
+insert into t (id,a) values (920,97);
+insert into t (id,a) values (920,98);
+insert into t (id,a) values (920,99);
+insert into t (id,a) values (921,0);
+insert into t (id,a) values (921,1);
+insert into t (id,a) values (921,2);
+insert into t (id,a) values (921,3);
+insert into t (id,a) values (921,4);
+insert into t (id,a) values (921,5);
+insert into t (id,a) values (921,6);
+insert into t (id,a) values (921,7);
+insert into t (id,a) values (921,8);
+insert into t (id,a) values (921,9);
+insert into t (id,a) values (921,10);
+insert into t (id,a) values (921,11);
+insert into t (id,a) values (921,12);
+insert into t (id,a) values (921,13);
+insert into t (id,a) values (921,14);
+insert into t (id,a) values (921,15);
+insert into t (id,a) values (921,16);
+insert into t (id,a) values (921,17);
+insert into t (id,a) values (921,18);
+insert into t (id,a) values (921,19);
+insert into t (id,a) values (921,20);
+insert into t (id,a) values (921,21);
+insert into t (id,a) values (921,22);
+insert into t (id,a) values (921,23);
+insert into t (id,a) values (921,24);
+insert into t (id,a) values (921,25);
+insert into t (id,a) values (921,26);
+insert into t (id,a) values (921,27);
+insert into t (id,a) values (921,28);
+insert into t (id,a) values (921,29);
+insert into t (id,a) values (921,30);
+insert into t (id,a) values (921,31);
+insert into t (id,a) values (921,32);
+insert into t (id,a) values (921,33);
+insert into t (id,a) values (921,34);
+insert into t (id,a) values (921,35);
+insert into t (id,a) values (921,36);
+insert into t (id,a) values (921,37);
+insert into t (id,a) values (921,38);
+insert into t (id,a) values (921,39);
+insert into t (id,a) values (921,40);
+insert into t (id,a) values (921,41);
+insert into t (id,a) values (921,42);
+insert into t (id,a) values (921,43);
+insert into t (id,a) values (921,44);
+insert into t (id,a) values (921,45);
+insert into t (id,a) values (921,46);
+insert into t (id,a) values (921,47);
+insert into t (id,a) values (921,48);
+insert into t (id,a) values (921,49);
+insert into t (id,a) values (921,50);
+insert into t (id,a) values (921,51);
+insert into t (id,a) values (921,52);
+insert into t (id,a) values (921,53);
+insert into t (id,a) values (921,54);
+insert into t (id,a) values (921,55);
+insert into t (id,a) values (921,56);
+insert into t (id,a) values (921,57);
+insert into t (id,a) values (921,58);
+insert into t (id,a) values (921,59);
+insert into t (id,a) values (921,60);
+insert into t (id,a) values (921,61);
+insert into t (id,a) values (921,62);
+insert into t (id,a) values (921,63);
+insert into t (id,a) values (921,64);
+insert into t (id,a) values (921,65);
+insert into t (id,a) values (921,66);
+insert into t (id,a) values (921,67);
+insert into t (id,a) values (921,68);
+insert into t (id,a) values (921,69);
+insert into t (id,a) values (921,70);
+insert into t (id,a) values (921,71);
+insert into t (id,a) values (921,72);
+insert into t (id,a) values (921,73);
+insert into t (id,a) values (921,74);
+insert into t (id,a) values (921,75);
+insert into t (id,a) values (921,76);
+insert into t (id,a) values (921,77);
+insert into t (id,a) values (921,78);
+insert into t (id,a) values (921,79);
+insert into t (id,a) values (921,80);
+insert into t (id,a) values (921,81);
+insert into t (id,a) values (921,82);
+insert into t (id,a) values (921,83);
+insert into t (id,a) values (921,84);
+insert into t (id,a) values (921,85);
+insert into t (id,a) values (921,86);
+insert into t (id,a) values (921,87);
+insert into t (id,a) values (921,88);
+insert into t (id,a) values (921,89);
+insert into t (id,a) values (921,90);
+insert into t (id,a) values (921,91);
+insert into t (id,a) values (921,92);
+insert into t (id,a) values (921,93);
+insert into t (id,a) values (921,94);
+insert into t (id,a) values (921,95);
+insert into t (id,a) values (921,96);
+insert into t (id,a) values (921,97);
+insert into t (id,a) values (921,98);
+insert into t (id,a) values (921,99);
+insert into t (id,a) values (922,0);
+insert into t (id,a) values (922,1);
+insert into t (id,a) values (922,2);
+insert into t (id,a) values (922,3);
+insert into t (id,a) values (922,4);
+insert into t (id,a) values (922,5);
+insert into t (id,a) values (922,6);
+insert into t (id,a) values (922,7);
+insert into t (id,a) values (922,8);
+insert into t (id,a) values (922,9);
+insert into t (id,a) values (922,10);
+insert into t (id,a) values (922,11);
+insert into t (id,a) values (922,12);
+insert into t (id,a) values (922,13);
+insert into t (id,a) values (922,14);
+insert into t (id,a) values (922,15);
+insert into t (id,a) values (922,16);
+insert into t (id,a) values (922,17);
+insert into t (id,a) values (922,18);
+insert into t (id,a) values (922,19);
+insert into t (id,a) values (922,20);
+insert into t (id,a) values (922,21);
+insert into t (id,a) values (922,22);
+insert into t (id,a) values (922,23);
+insert into t (id,a) values (922,24);
+insert into t (id,a) values (922,25);
+insert into t (id,a) values (922,26);
+insert into t (id,a) values (922,27);
+insert into t (id,a) values (922,28);
+insert into t (id,a) values (922,29);
+insert into t (id,a) values (922,30);
+insert into t (id,a) values (922,31);
+insert into t (id,a) values (922,32);
+insert into t (id,a) values (922,33);
+insert into t (id,a) values (922,34);
+insert into t (id,a) values (922,35);
+insert into t (id,a) values (922,36);
+insert into t (id,a) values (922,37);
+insert into t (id,a) values (922,38);
+insert into t (id,a) values (922,39);
+insert into t (id,a) values (922,40);
+insert into t (id,a) values (922,41);
+insert into t (id,a) values (922,42);
+insert into t (id,a) values (922,43);
+insert into t (id,a) values (922,44);
+insert into t (id,a) values (922,45);
+insert into t (id,a) values (922,46);
+insert into t (id,a) values (922,47);
+insert into t (id,a) values (922,48);
+insert into t (id,a) values (922,49);
+insert into t (id,a) values (922,50);
+insert into t (id,a) values (922,51);
+insert into t (id,a) values (922,52);
+insert into t (id,a) values (922,53);
+insert into t (id,a) values (922,54);
+insert into t (id,a) values (922,55);
+insert into t (id,a) values (922,56);
+insert into t (id,a) values (922,57);
+insert into t (id,a) values (922,58);
+insert into t (id,a) values (922,59);
+insert into t (id,a) values (922,60);
+insert into t (id,a) values (922,61);
+insert into t (id,a) values (922,62);
+insert into t (id,a) values (922,63);
+insert into t (id,a) values (922,64);
+insert into t (id,a) values (922,65);
+insert into t (id,a) values (922,66);
+insert into t (id,a) values (922,67);
+insert into t (id,a) values (922,68);
+insert into t (id,a) values (922,69);
+insert into t (id,a) values (922,70);
+insert into t (id,a) values (922,71);
+insert into t (id,a) values (922,72);
+insert into t (id,a) values (922,73);
+insert into t (id,a) values (922,74);
+insert into t (id,a) values (922,75);
+insert into t (id,a) values (922,76);
+insert into t (id,a) values (922,77);
+insert into t (id,a) values (922,78);
+insert into t (id,a) values (922,79);
+insert into t (id,a) values (922,80);
+insert into t (id,a) values (922,81);
+insert into t (id,a) values (922,82);
+insert into t (id,a) values (922,83);
+insert into t (id,a) values (922,84);
+insert into t (id,a) values (922,85);
+insert into t (id,a) values (922,86);
+insert into t (id,a) values (922,87);
+insert into t (id,a) values (922,88);
+insert into t (id,a) values (922,89);
+insert into t (id,a) values (922,90);
+insert into t (id,a) values (922,91);
+insert into t (id,a) values (922,92);
+insert into t (id,a) values (922,93);
+insert into t (id,a) values (922,94);
+insert into t (id,a) values (922,95);
+insert into t (id,a) values (922,96);
+insert into t (id,a) values (922,97);
+insert into t (id,a) values (922,98);
+insert into t (id,a) values (922,99);
+insert into t (id,a) values (923,0);
+insert into t (id,a) values (923,1);
+insert into t (id,a) values (923,2);
+insert into t (id,a) values (923,3);
+insert into t (id,a) values (923,4);
+insert into t (id,a) values (923,5);
+insert into t (id,a) values (923,6);
+insert into t (id,a) values (923,7);
+insert into t (id,a) values (923,8);
+insert into t (id,a) values (923,9);
+insert into t (id,a) values (923,10);
+insert into t (id,a) values (923,11);
+insert into t (id,a) values (923,12);
+insert into t (id,a) values (923,13);
+insert into t (id,a) values (923,14);
+insert into t (id,a) values (923,15);
+insert into t (id,a) values (923,16);
+insert into t (id,a) values (923,17);
+insert into t (id,a) values (923,18);
+insert into t (id,a) values (923,19);
+insert into t (id,a) values (923,20);
+insert into t (id,a) values (923,21);
+insert into t (id,a) values (923,22);
+insert into t (id,a) values (923,23);
+insert into t (id,a) values (923,24);
+insert into t (id,a) values (923,25);
+insert into t (id,a) values (923,26);
+insert into t (id,a) values (923,27);
+insert into t (id,a) values (923,28);
+insert into t (id,a) values (923,29);
+insert into t (id,a) values (923,30);
+insert into t (id,a) values (923,31);
+insert into t (id,a) values (923,32);
+insert into t (id,a) values (923,33);
+insert into t (id,a) values (923,34);
+insert into t (id,a) values (923,35);
+insert into t (id,a) values (923,36);
+insert into t (id,a) values (923,37);
+insert into t (id,a) values (923,38);
+insert into t (id,a) values (923,39);
+insert into t (id,a) values (923,40);
+insert into t (id,a) values (923,41);
+insert into t (id,a) values (923,42);
+insert into t (id,a) values (923,43);
+insert into t (id,a) values (923,44);
+insert into t (id,a) values (923,45);
+insert into t (id,a) values (923,46);
+insert into t (id,a) values (923,47);
+insert into t (id,a) values (923,48);
+insert into t (id,a) values (923,49);
+insert into t (id,a) values (923,50);
+insert into t (id,a) values (923,51);
+insert into t (id,a) values (923,52);
+insert into t (id,a) values (923,53);
+insert into t (id,a) values (923,54);
+insert into t (id,a) values (923,55);
+insert into t (id,a) values (923,56);
+insert into t (id,a) values (923,57);
+insert into t (id,a) values (923,58);
+insert into t (id,a) values (923,59);
+insert into t (id,a) values (923,60);
+insert into t (id,a) values (923,61);
+insert into t (id,a) values (923,62);
+insert into t (id,a) values (923,63);
+insert into t (id,a) values (923,64);
+insert into t (id,a) values (923,65);
+insert into t (id,a) values (923,66);
+insert into t (id,a) values (923,67);
+insert into t (id,a) values (923,68);
+insert into t (id,a) values (923,69);
+insert into t (id,a) values (923,70);
+insert into t (id,a) values (923,71);
+insert into t (id,a) values (923,72);
+insert into t (id,a) values (923,73);
+insert into t (id,a) values (923,74);
+insert into t (id,a) values (923,75);
+insert into t (id,a) values (923,76);
+insert into t (id,a) values (923,77);
+insert into t (id,a) values (923,78);
+insert into t (id,a) values (923,79);
+insert into t (id,a) values (923,80);
+insert into t (id,a) values (923,81);
+insert into t (id,a) values (923,82);
+insert into t (id,a) values (923,83);
+insert into t (id,a) values (923,84);
+insert into t (id,a) values (923,85);
+insert into t (id,a) values (923,86);
+insert into t (id,a) values (923,87);
+insert into t (id,a) values (923,88);
+insert into t (id,a) values (923,89);
+insert into t (id,a) values (923,90);
+insert into t (id,a) values (923,91);
+insert into t (id,a) values (923,92);
+insert into t (id,a) values (923,93);
+insert into t (id,a) values (923,94);
+insert into t (id,a) values (923,95);
+insert into t (id,a) values (923,96);
+insert into t (id,a) values (923,97);
+insert into t (id,a) values (923,98);
+insert into t (id,a) values (923,99);
+insert into t (id,a) values (924,0);
+insert into t (id,a) values (924,1);
+insert into t (id,a) values (924,2);
+insert into t (id,a) values (924,3);
+insert into t (id,a) values (924,4);
+insert into t (id,a) values (924,5);
+insert into t (id,a) values (924,6);
+insert into t (id,a) values (924,7);
+insert into t (id,a) values (924,8);
+insert into t (id,a) values (924,9);
+insert into t (id,a) values (924,10);
+insert into t (id,a) values (924,11);
+insert into t (id,a) values (924,12);
+insert into t (id,a) values (924,13);
+insert into t (id,a) values (924,14);
+insert into t (id,a) values (924,15);
+insert into t (id,a) values (924,16);
+insert into t (id,a) values (924,17);
+insert into t (id,a) values (924,18);
+insert into t (id,a) values (924,19);
+insert into t (id,a) values (924,20);
+insert into t (id,a) values (924,21);
+insert into t (id,a) values (924,22);
+insert into t (id,a) values (924,23);
+insert into t (id,a) values (924,24);
+insert into t (id,a) values (924,25);
+insert into t (id,a) values (924,26);
+insert into t (id,a) values (924,27);
+insert into t (id,a) values (924,28);
+insert into t (id,a) values (924,29);
+insert into t (id,a) values (924,30);
+insert into t (id,a) values (924,31);
+insert into t (id,a) values (924,32);
+insert into t (id,a) values (924,33);
+insert into t (id,a) values (924,34);
+insert into t (id,a) values (924,35);
+insert into t (id,a) values (924,36);
+insert into t (id,a) values (924,37);
+insert into t (id,a) values (924,38);
+insert into t (id,a) values (924,39);
+insert into t (id,a) values (924,40);
+insert into t (id,a) values (924,41);
+insert into t (id,a) values (924,42);
+insert into t (id,a) values (924,43);
+insert into t (id,a) values (924,44);
+insert into t (id,a) values (924,45);
+insert into t (id,a) values (924,46);
+insert into t (id,a) values (924,47);
+insert into t (id,a) values (924,48);
+insert into t (id,a) values (924,49);
+insert into t (id,a) values (924,50);
+insert into t (id,a) values (924,51);
+insert into t (id,a) values (924,52);
+insert into t (id,a) values (924,53);
+insert into t (id,a) values (924,54);
+insert into t (id,a) values (924,55);
+insert into t (id,a) values (924,56);
+insert into t (id,a) values (924,57);
+insert into t (id,a) values (924,58);
+insert into t (id,a) values (924,59);
+insert into t (id,a) values (924,60);
+insert into t (id,a) values (924,61);
+insert into t (id,a) values (924,62);
+insert into t (id,a) values (924,63);
+insert into t (id,a) values (924,64);
+insert into t (id,a) values (924,65);
+insert into t (id,a) values (924,66);
+insert into t (id,a) values (924,67);
+insert into t (id,a) values (924,68);
+insert into t (id,a) values (924,69);
+insert into t (id,a) values (924,70);
+insert into t (id,a) values (924,71);
+insert into t (id,a) values (924,72);
+insert into t (id,a) values (924,73);
+insert into t (id,a) values (924,74);
+insert into t (id,a) values (924,75);
+insert into t (id,a) values (924,76);
+insert into t (id,a) values (924,77);
+insert into t (id,a) values (924,78);
+insert into t (id,a) values (924,79);
+insert into t (id,a) values (924,80);
+insert into t (id,a) values (924,81);
+insert into t (id,a) values (924,82);
+insert into t (id,a) values (924,83);
+insert into t (id,a) values (924,84);
+insert into t (id,a) values (924,85);
+insert into t (id,a) values (924,86);
+insert into t (id,a) values (924,87);
+insert into t (id,a) values (924,88);
+insert into t (id,a) values (924,89);
+insert into t (id,a) values (924,90);
+insert into t (id,a) values (924,91);
+insert into t (id,a) values (924,92);
+insert into t (id,a) values (924,93);
+insert into t (id,a) values (924,94);
+insert into t (id,a) values (924,95);
+insert into t (id,a) values (924,96);
+insert into t (id,a) values (924,97);
+insert into t (id,a) values (924,98);
+insert into t (id,a) values (924,99);
+insert into t (id,a) values (925,0);
+insert into t (id,a) values (925,1);
+insert into t (id,a) values (925,2);
+insert into t (id,a) values (925,3);
+insert into t (id,a) values (925,4);
+insert into t (id,a) values (925,5);
+insert into t (id,a) values (925,6);
+insert into t (id,a) values (925,7);
+insert into t (id,a) values (925,8);
+insert into t (id,a) values (925,9);
+insert into t (id,a) values (925,10);
+insert into t (id,a) values (925,11);
+insert into t (id,a) values (925,12);
+insert into t (id,a) values (925,13);
+insert into t (id,a) values (925,14);
+insert into t (id,a) values (925,15);
+insert into t (id,a) values (925,16);
+insert into t (id,a) values (925,17);
+insert into t (id,a) values (925,18);
+insert into t (id,a) values (925,19);
+insert into t (id,a) values (925,20);
+insert into t (id,a) values (925,21);
+insert into t (id,a) values (925,22);
+insert into t (id,a) values (925,23);
+insert into t (id,a) values (925,24);
+insert into t (id,a) values (925,25);
+insert into t (id,a) values (925,26);
+insert into t (id,a) values (925,27);
+insert into t (id,a) values (925,28);
+insert into t (id,a) values (925,29);
+insert into t (id,a) values (925,30);
+insert into t (id,a) values (925,31);
+insert into t (id,a) values (925,32);
+insert into t (id,a) values (925,33);
+insert into t (id,a) values (925,34);
+insert into t (id,a) values (925,35);
+insert into t (id,a) values (925,36);
+insert into t (id,a) values (925,37);
+insert into t (id,a) values (925,38);
+insert into t (id,a) values (925,39);
+insert into t (id,a) values (925,40);
+insert into t (id,a) values (925,41);
+insert into t (id,a) values (925,42);
+insert into t (id,a) values (925,43);
+insert into t (id,a) values (925,44);
+insert into t (id,a) values (925,45);
+insert into t (id,a) values (925,46);
+insert into t (id,a) values (925,47);
+insert into t (id,a) values (925,48);
+insert into t (id,a) values (925,49);
+insert into t (id,a) values (925,50);
+insert into t (id,a) values (925,51);
+insert into t (id,a) values (925,52);
+insert into t (id,a) values (925,53);
+insert into t (id,a) values (925,54);
+insert into t (id,a) values (925,55);
+insert into t (id,a) values (925,56);
+insert into t (id,a) values (925,57);
+insert into t (id,a) values (925,58);
+insert into t (id,a) values (925,59);
+insert into t (id,a) values (925,60);
+insert into t (id,a) values (925,61);
+insert into t (id,a) values (925,62);
+insert into t (id,a) values (925,63);
+insert into t (id,a) values (925,64);
+insert into t (id,a) values (925,65);
+insert into t (id,a) values (925,66);
+insert into t (id,a) values (925,67);
+insert into t (id,a) values (925,68);
+insert into t (id,a) values (925,69);
+insert into t (id,a) values (925,70);
+insert into t (id,a) values (925,71);
+insert into t (id,a) values (925,72);
+insert into t (id,a) values (925,73);
+insert into t (id,a) values (925,74);
+insert into t (id,a) values (925,75);
+insert into t (id,a) values (925,76);
+insert into t (id,a) values (925,77);
+insert into t (id,a) values (925,78);
+insert into t (id,a) values (925,79);
+insert into t (id,a) values (925,80);
+insert into t (id,a) values (925,81);
+insert into t (id,a) values (925,82);
+insert into t (id,a) values (925,83);
+insert into t (id,a) values (925,84);
+insert into t (id,a) values (925,85);
+insert into t (id,a) values (925,86);
+insert into t (id,a) values (925,87);
+insert into t (id,a) values (925,88);
+insert into t (id,a) values (925,89);
+insert into t (id,a) values (925,90);
+insert into t (id,a) values (925,91);
+insert into t (id,a) values (925,92);
+insert into t (id,a) values (925,93);
+insert into t (id,a) values (925,94);
+insert into t (id,a) values (925,95);
+insert into t (id,a) values (925,96);
+insert into t (id,a) values (925,97);
+insert into t (id,a) values (925,98);
+insert into t (id,a) values (925,99);
+insert into t (id,a) values (926,0);
+insert into t (id,a) values (926,1);
+insert into t (id,a) values (926,2);
+insert into t (id,a) values (926,3);
+insert into t (id,a) values (926,4);
+insert into t (id,a) values (926,5);
+insert into t (id,a) values (926,6);
+insert into t (id,a) values (926,7);
+insert into t (id,a) values (926,8);
+insert into t (id,a) values (926,9);
+insert into t (id,a) values (926,10);
+insert into t (id,a) values (926,11);
+insert into t (id,a) values (926,12);
+insert into t (id,a) values (926,13);
+insert into t (id,a) values (926,14);
+insert into t (id,a) values (926,15);
+insert into t (id,a) values (926,16);
+insert into t (id,a) values (926,17);
+insert into t (id,a) values (926,18);
+insert into t (id,a) values (926,19);
+insert into t (id,a) values (926,20);
+insert into t (id,a) values (926,21);
+insert into t (id,a) values (926,22);
+insert into t (id,a) values (926,23);
+insert into t (id,a) values (926,24);
+insert into t (id,a) values (926,25);
+insert into t (id,a) values (926,26);
+insert into t (id,a) values (926,27);
+insert into t (id,a) values (926,28);
+insert into t (id,a) values (926,29);
+insert into t (id,a) values (926,30);
+insert into t (id,a) values (926,31);
+insert into t (id,a) values (926,32);
+insert into t (id,a) values (926,33);
+insert into t (id,a) values (926,34);
+insert into t (id,a) values (926,35);
+insert into t (id,a) values (926,36);
+insert into t (id,a) values (926,37);
+insert into t (id,a) values (926,38);
+insert into t (id,a) values (926,39);
+insert into t (id,a) values (926,40);
+insert into t (id,a) values (926,41);
+insert into t (id,a) values (926,42);
+insert into t (id,a) values (926,43);
+insert into t (id,a) values (926,44);
+insert into t (id,a) values (926,45);
+insert into t (id,a) values (926,46);
+insert into t (id,a) values (926,47);
+insert into t (id,a) values (926,48);
+insert into t (id,a) values (926,49);
+insert into t (id,a) values (926,50);
+insert into t (id,a) values (926,51);
+insert into t (id,a) values (926,52);
+insert into t (id,a) values (926,53);
+insert into t (id,a) values (926,54);
+insert into t (id,a) values (926,55);
+insert into t (id,a) values (926,56);
+insert into t (id,a) values (926,57);
+insert into t (id,a) values (926,58);
+insert into t (id,a) values (926,59);
+insert into t (id,a) values (926,60);
+insert into t (id,a) values (926,61);
+insert into t (id,a) values (926,62);
+insert into t (id,a) values (926,63);
+insert into t (id,a) values (926,64);
+insert into t (id,a) values (926,65);
+insert into t (id,a) values (926,66);
+insert into t (id,a) values (926,67);
+insert into t (id,a) values (926,68);
+insert into t (id,a) values (926,69);
+insert into t (id,a) values (926,70);
+insert into t (id,a) values (926,71);
+insert into t (id,a) values (926,72);
+insert into t (id,a) values (926,73);
+insert into t (id,a) values (926,74);
+insert into t (id,a) values (926,75);
+insert into t (id,a) values (926,76);
+insert into t (id,a) values (926,77);
+insert into t (id,a) values (926,78);
+insert into t (id,a) values (926,79);
+insert into t (id,a) values (926,80);
+insert into t (id,a) values (926,81);
+insert into t (id,a) values (926,82);
+insert into t (id,a) values (926,83);
+insert into t (id,a) values (926,84);
+insert into t (id,a) values (926,85);
+insert into t (id,a) values (926,86);
+insert into t (id,a) values (926,87);
+insert into t (id,a) values (926,88);
+insert into t (id,a) values (926,89);
+insert into t (id,a) values (926,90);
+insert into t (id,a) values (926,91);
+insert into t (id,a) values (926,92);
+insert into t (id,a) values (926,93);
+insert into t (id,a) values (926,94);
+insert into t (id,a) values (926,95);
+insert into t (id,a) values (926,96);
+insert into t (id,a) values (926,97);
+insert into t (id,a) values (926,98);
+insert into t (id,a) values (926,99);
+insert into t (id,a) values (927,0);
+insert into t (id,a) values (927,1);
+insert into t (id,a) values (927,2);
+insert into t (id,a) values (927,3);
+insert into t (id,a) values (927,4);
+insert into t (id,a) values (927,5);
+insert into t (id,a) values (927,6);
+insert into t (id,a) values (927,7);
+insert into t (id,a) values (927,8);
+insert into t (id,a) values (927,9);
+insert into t (id,a) values (927,10);
+insert into t (id,a) values (927,11);
+insert into t (id,a) values (927,12);
+insert into t (id,a) values (927,13);
+insert into t (id,a) values (927,14);
+insert into t (id,a) values (927,15);
+insert into t (id,a) values (927,16);
+insert into t (id,a) values (927,17);
+insert into t (id,a) values (927,18);
+insert into t (id,a) values (927,19);
+insert into t (id,a) values (927,20);
+insert into t (id,a) values (927,21);
+insert into t (id,a) values (927,22);
+insert into t (id,a) values (927,23);
+insert into t (id,a) values (927,24);
+insert into t (id,a) values (927,25);
+insert into t (id,a) values (927,26);
+insert into t (id,a) values (927,27);
+insert into t (id,a) values (927,28);
+insert into t (id,a) values (927,29);
+insert into t (id,a) values (927,30);
+insert into t (id,a) values (927,31);
+insert into t (id,a) values (927,32);
+insert into t (id,a) values (927,33);
+insert into t (id,a) values (927,34);
+insert into t (id,a) values (927,35);
+insert into t (id,a) values (927,36);
+insert into t (id,a) values (927,37);
+insert into t (id,a) values (927,38);
+insert into t (id,a) values (927,39);
+insert into t (id,a) values (927,40);
+insert into t (id,a) values (927,41);
+insert into t (id,a) values (927,42);
+insert into t (id,a) values (927,43);
+insert into t (id,a) values (927,44);
+insert into t (id,a) values (927,45);
+insert into t (id,a) values (927,46);
+insert into t (id,a) values (927,47);
+insert into t (id,a) values (927,48);
+insert into t (id,a) values (927,49);
+insert into t (id,a) values (927,50);
+insert into t (id,a) values (927,51);
+insert into t (id,a) values (927,52);
+insert into t (id,a) values (927,53);
+insert into t (id,a) values (927,54);
+insert into t (id,a) values (927,55);
+insert into t (id,a) values (927,56);
+insert into t (id,a) values (927,57);
+insert into t (id,a) values (927,58);
+insert into t (id,a) values (927,59);
+insert into t (id,a) values (927,60);
+insert into t (id,a) values (927,61);
+insert into t (id,a) values (927,62);
+insert into t (id,a) values (927,63);
+insert into t (id,a) values (927,64);
+insert into t (id,a) values (927,65);
+insert into t (id,a) values (927,66);
+insert into t (id,a) values (927,67);
+insert into t (id,a) values (927,68);
+insert into t (id,a) values (927,69);
+insert into t (id,a) values (927,70);
+insert into t (id,a) values (927,71);
+insert into t (id,a) values (927,72);
+insert into t (id,a) values (927,73);
+insert into t (id,a) values (927,74);
+insert into t (id,a) values (927,75);
+insert into t (id,a) values (927,76);
+insert into t (id,a) values (927,77);
+insert into t (id,a) values (927,78);
+insert into t (id,a) values (927,79);
+insert into t (id,a) values (927,80);
+insert into t (id,a) values (927,81);
+insert into t (id,a) values (927,82);
+insert into t (id,a) values (927,83);
+insert into t (id,a) values (927,84);
+insert into t (id,a) values (927,85);
+insert into t (id,a) values (927,86);
+insert into t (id,a) values (927,87);
+insert into t (id,a) values (927,88);
+insert into t (id,a) values (927,89);
+insert into t (id,a) values (927,90);
+insert into t (id,a) values (927,91);
+insert into t (id,a) values (927,92);
+insert into t (id,a) values (927,93);
+insert into t (id,a) values (927,94);
+insert into t (id,a) values (927,95);
+insert into t (id,a) values (927,96);
+insert into t (id,a) values (927,97);
+insert into t (id,a) values (927,98);
+insert into t (id,a) values (927,99);
+insert into t (id,a) values (928,0);
+insert into t (id,a) values (928,1);
+insert into t (id,a) values (928,2);
+insert into t (id,a) values (928,3);
+insert into t (id,a) values (928,4);
+insert into t (id,a) values (928,5);
+insert into t (id,a) values (928,6);
+insert into t (id,a) values (928,7);
+insert into t (id,a) values (928,8);
+insert into t (id,a) values (928,9);
+insert into t (id,a) values (928,10);
+insert into t (id,a) values (928,11);
+insert into t (id,a) values (928,12);
+insert into t (id,a) values (928,13);
+insert into t (id,a) values (928,14);
+insert into t (id,a) values (928,15);
+insert into t (id,a) values (928,16);
+insert into t (id,a) values (928,17);
+insert into t (id,a) values (928,18);
+insert into t (id,a) values (928,19);
+insert into t (id,a) values (928,20);
+insert into t (id,a) values (928,21);
+insert into t (id,a) values (928,22);
+insert into t (id,a) values (928,23);
+insert into t (id,a) values (928,24);
+insert into t (id,a) values (928,25);
+insert into t (id,a) values (928,26);
+insert into t (id,a) values (928,27);
+insert into t (id,a) values (928,28);
+insert into t (id,a) values (928,29);
+insert into t (id,a) values (928,30);
+insert into t (id,a) values (928,31);
+insert into t (id,a) values (928,32);
+insert into t (id,a) values (928,33);
+insert into t (id,a) values (928,34);
+insert into t (id,a) values (928,35);
+insert into t (id,a) values (928,36);
+insert into t (id,a) values (928,37);
+insert into t (id,a) values (928,38);
+insert into t (id,a) values (928,39);
+insert into t (id,a) values (928,40);
+insert into t (id,a) values (928,41);
+insert into t (id,a) values (928,42);
+insert into t (id,a) values (928,43);
+insert into t (id,a) values (928,44);
+insert into t (id,a) values (928,45);
+insert into t (id,a) values (928,46);
+insert into t (id,a) values (928,47);
+insert into t (id,a) values (928,48);
+insert into t (id,a) values (928,49);
+insert into t (id,a) values (928,50);
+insert into t (id,a) values (928,51);
+insert into t (id,a) values (928,52);
+insert into t (id,a) values (928,53);
+insert into t (id,a) values (928,54);
+insert into t (id,a) values (928,55);
+insert into t (id,a) values (928,56);
+insert into t (id,a) values (928,57);
+insert into t (id,a) values (928,58);
+insert into t (id,a) values (928,59);
+insert into t (id,a) values (928,60);
+insert into t (id,a) values (928,61);
+insert into t (id,a) values (928,62);
+insert into t (id,a) values (928,63);
+insert into t (id,a) values (928,64);
+insert into t (id,a) values (928,65);
+insert into t (id,a) values (928,66);
+insert into t (id,a) values (928,67);
+insert into t (id,a) values (928,68);
+insert into t (id,a) values (928,69);
+insert into t (id,a) values (928,70);
+insert into t (id,a) values (928,71);
+insert into t (id,a) values (928,72);
+insert into t (id,a) values (928,73);
+insert into t (id,a) values (928,74);
+insert into t (id,a) values (928,75);
+insert into t (id,a) values (928,76);
+insert into t (id,a) values (928,77);
+insert into t (id,a) values (928,78);
+insert into t (id,a) values (928,79);
+insert into t (id,a) values (928,80);
+insert into t (id,a) values (928,81);
+insert into t (id,a) values (928,82);
+insert into t (id,a) values (928,83);
+insert into t (id,a) values (928,84);
+insert into t (id,a) values (928,85);
+insert into t (id,a) values (928,86);
+insert into t (id,a) values (928,87);
+insert into t (id,a) values (928,88);
+insert into t (id,a) values (928,89);
+insert into t (id,a) values (928,90);
+insert into t (id,a) values (928,91);
+insert into t (id,a) values (928,92);
+insert into t (id,a) values (928,93);
+insert into t (id,a) values (928,94);
+insert into t (id,a) values (928,95);
+insert into t (id,a) values (928,96);
+insert into t (id,a) values (928,97);
+insert into t (id,a) values (928,98);
+insert into t (id,a) values (928,99);
+insert into t (id,a) values (929,0);
+insert into t (id,a) values (929,1);
+insert into t (id,a) values (929,2);
+insert into t (id,a) values (929,3);
+insert into t (id,a) values (929,4);
+insert into t (id,a) values (929,5);
+insert into t (id,a) values (929,6);
+insert into t (id,a) values (929,7);
+insert into t (id,a) values (929,8);
+insert into t (id,a) values (929,9);
+insert into t (id,a) values (929,10);
+insert into t (id,a) values (929,11);
+insert into t (id,a) values (929,12);
+insert into t (id,a) values (929,13);
+insert into t (id,a) values (929,14);
+insert into t (id,a) values (929,15);
+insert into t (id,a) values (929,16);
+insert into t (id,a) values (929,17);
+insert into t (id,a) values (929,18);
+insert into t (id,a) values (929,19);
+insert into t (id,a) values (929,20);
+insert into t (id,a) values (929,21);
+insert into t (id,a) values (929,22);
+insert into t (id,a) values (929,23);
+insert into t (id,a) values (929,24);
+insert into t (id,a) values (929,25);
+insert into t (id,a) values (929,26);
+insert into t (id,a) values (929,27);
+insert into t (id,a) values (929,28);
+insert into t (id,a) values (929,29);
+insert into t (id,a) values (929,30);
+insert into t (id,a) values (929,31);
+insert into t (id,a) values (929,32);
+insert into t (id,a) values (929,33);
+insert into t (id,a) values (929,34);
+insert into t (id,a) values (929,35);
+insert into t (id,a) values (929,36);
+insert into t (id,a) values (929,37);
+insert into t (id,a) values (929,38);
+insert into t (id,a) values (929,39);
+insert into t (id,a) values (929,40);
+insert into t (id,a) values (929,41);
+insert into t (id,a) values (929,42);
+insert into t (id,a) values (929,43);
+insert into t (id,a) values (929,44);
+insert into t (id,a) values (929,45);
+insert into t (id,a) values (929,46);
+insert into t (id,a) values (929,47);
+insert into t (id,a) values (929,48);
+insert into t (id,a) values (929,49);
+insert into t (id,a) values (929,50);
+insert into t (id,a) values (929,51);
+insert into t (id,a) values (929,52);
+insert into t (id,a) values (929,53);
+insert into t (id,a) values (929,54);
+insert into t (id,a) values (929,55);
+insert into t (id,a) values (929,56);
+insert into t (id,a) values (929,57);
+insert into t (id,a) values (929,58);
+insert into t (id,a) values (929,59);
+insert into t (id,a) values (929,60);
+insert into t (id,a) values (929,61);
+insert into t (id,a) values (929,62);
+insert into t (id,a) values (929,63);
+insert into t (id,a) values (929,64);
+insert into t (id,a) values (929,65);
+insert into t (id,a) values (929,66);
+insert into t (id,a) values (929,67);
+insert into t (id,a) values (929,68);
+insert into t (id,a) values (929,69);
+insert into t (id,a) values (929,70);
+insert into t (id,a) values (929,71);
+insert into t (id,a) values (929,72);
+insert into t (id,a) values (929,73);
+insert into t (id,a) values (929,74);
+insert into t (id,a) values (929,75);
+insert into t (id,a) values (929,76);
+insert into t (id,a) values (929,77);
+insert into t (id,a) values (929,78);
+insert into t (id,a) values (929,79);
+insert into t (id,a) values (929,80);
+insert into t (id,a) values (929,81);
+insert into t (id,a) values (929,82);
+insert into t (id,a) values (929,83);
+insert into t (id,a) values (929,84);
+insert into t (id,a) values (929,85);
+insert into t (id,a) values (929,86);
+insert into t (id,a) values (929,87);
+insert into t (id,a) values (929,88);
+insert into t (id,a) values (929,89);
+insert into t (id,a) values (929,90);
+insert into t (id,a) values (929,91);
+insert into t (id,a) values (929,92);
+insert into t (id,a) values (929,93);
+insert into t (id,a) values (929,94);
+insert into t (id,a) values (929,95);
+insert into t (id,a) values (929,96);
+insert into t (id,a) values (929,97);
+insert into t (id,a) values (929,98);
+insert into t (id,a) values (929,99);
+insert into t (id,a) values (930,0);
+insert into t (id,a) values (930,1);
+insert into t (id,a) values (930,2);
+insert into t (id,a) values (930,3);
+insert into t (id,a) values (930,4);
+insert into t (id,a) values (930,5);
+insert into t (id,a) values (930,6);
+insert into t (id,a) values (930,7);
+insert into t (id,a) values (930,8);
+insert into t (id,a) values (930,9);
+insert into t (id,a) values (930,10);
+insert into t (id,a) values (930,11);
+insert into t (id,a) values (930,12);
+insert into t (id,a) values (930,13);
+insert into t (id,a) values (930,14);
+insert into t (id,a) values (930,15);
+insert into t (id,a) values (930,16);
+insert into t (id,a) values (930,17);
+insert into t (id,a) values (930,18);
+insert into t (id,a) values (930,19);
+insert into t (id,a) values (930,20);
+insert into t (id,a) values (930,21);
+insert into t (id,a) values (930,22);
+insert into t (id,a) values (930,23);
+insert into t (id,a) values (930,24);
+insert into t (id,a) values (930,25);
+insert into t (id,a) values (930,26);
+insert into t (id,a) values (930,27);
+insert into t (id,a) values (930,28);
+insert into t (id,a) values (930,29);
+insert into t (id,a) values (930,30);
+insert into t (id,a) values (930,31);
+insert into t (id,a) values (930,32);
+insert into t (id,a) values (930,33);
+insert into t (id,a) values (930,34);
+insert into t (id,a) values (930,35);
+insert into t (id,a) values (930,36);
+insert into t (id,a) values (930,37);
+insert into t (id,a) values (930,38);
+insert into t (id,a) values (930,39);
+insert into t (id,a) values (930,40);
+insert into t (id,a) values (930,41);
+insert into t (id,a) values (930,42);
+insert into t (id,a) values (930,43);
+insert into t (id,a) values (930,44);
+insert into t (id,a) values (930,45);
+insert into t (id,a) values (930,46);
+insert into t (id,a) values (930,47);
+insert into t (id,a) values (930,48);
+insert into t (id,a) values (930,49);
+insert into t (id,a) values (930,50);
+insert into t (id,a) values (930,51);
+insert into t (id,a) values (930,52);
+insert into t (id,a) values (930,53);
+insert into t (id,a) values (930,54);
+insert into t (id,a) values (930,55);
+insert into t (id,a) values (930,56);
+insert into t (id,a) values (930,57);
+insert into t (id,a) values (930,58);
+insert into t (id,a) values (930,59);
+insert into t (id,a) values (930,60);
+insert into t (id,a) values (930,61);
+insert into t (id,a) values (930,62);
+insert into t (id,a) values (930,63);
+insert into t (id,a) values (930,64);
+insert into t (id,a) values (930,65);
+insert into t (id,a) values (930,66);
+insert into t (id,a) values (930,67);
+insert into t (id,a) values (930,68);
+insert into t (id,a) values (930,69);
+insert into t (id,a) values (930,70);
+insert into t (id,a) values (930,71);
+insert into t (id,a) values (930,72);
+insert into t (id,a) values (930,73);
+insert into t (id,a) values (930,74);
+insert into t (id,a) values (930,75);
+insert into t (id,a) values (930,76);
+insert into t (id,a) values (930,77);
+insert into t (id,a) values (930,78);
+insert into t (id,a) values (930,79);
+insert into t (id,a) values (930,80);
+insert into t (id,a) values (930,81);
+insert into t (id,a) values (930,82);
+insert into t (id,a) values (930,83);
+insert into t (id,a) values (930,84);
+insert into t (id,a) values (930,85);
+insert into t (id,a) values (930,86);
+insert into t (id,a) values (930,87);
+insert into t (id,a) values (930,88);
+insert into t (id,a) values (930,89);
+insert into t (id,a) values (930,90);
+insert into t (id,a) values (930,91);
+insert into t (id,a) values (930,92);
+insert into t (id,a) values (930,93);
+insert into t (id,a) values (930,94);
+insert into t (id,a) values (930,95);
+insert into t (id,a) values (930,96);
+insert into t (id,a) values (930,97);
+insert into t (id,a) values (930,98);
+insert into t (id,a) values (930,99);
+insert into t (id,a) values (931,0);
+insert into t (id,a) values (931,1);
+insert into t (id,a) values (931,2);
+insert into t (id,a) values (931,3);
+insert into t (id,a) values (931,4);
+insert into t (id,a) values (931,5);
+insert into t (id,a) values (931,6);
+insert into t (id,a) values (931,7);
+insert into t (id,a) values (931,8);
+insert into t (id,a) values (931,9);
+insert into t (id,a) values (931,10);
+insert into t (id,a) values (931,11);
+insert into t (id,a) values (931,12);
+insert into t (id,a) values (931,13);
+insert into t (id,a) values (931,14);
+insert into t (id,a) values (931,15);
+insert into t (id,a) values (931,16);
+insert into t (id,a) values (931,17);
+insert into t (id,a) values (931,18);
+insert into t (id,a) values (931,19);
+insert into t (id,a) values (931,20);
+insert into t (id,a) values (931,21);
+insert into t (id,a) values (931,22);
+insert into t (id,a) values (931,23);
+insert into t (id,a) values (931,24);
+insert into t (id,a) values (931,25);
+insert into t (id,a) values (931,26);
+insert into t (id,a) values (931,27);
+insert into t (id,a) values (931,28);
+insert into t (id,a) values (931,29);
+insert into t (id,a) values (931,30);
+insert into t (id,a) values (931,31);
+insert into t (id,a) values (931,32);
+insert into t (id,a) values (931,33);
+insert into t (id,a) values (931,34);
+insert into t (id,a) values (931,35);
+insert into t (id,a) values (931,36);
+insert into t (id,a) values (931,37);
+insert into t (id,a) values (931,38);
+insert into t (id,a) values (931,39);
+insert into t (id,a) values (931,40);
+insert into t (id,a) values (931,41);
+insert into t (id,a) values (931,42);
+insert into t (id,a) values (931,43);
+insert into t (id,a) values (931,44);
+insert into t (id,a) values (931,45);
+insert into t (id,a) values (931,46);
+insert into t (id,a) values (931,47);
+insert into t (id,a) values (931,48);
+insert into t (id,a) values (931,49);
+insert into t (id,a) values (931,50);
+insert into t (id,a) values (931,51);
+insert into t (id,a) values (931,52);
+insert into t (id,a) values (931,53);
+insert into t (id,a) values (931,54);
+insert into t (id,a) values (931,55);
+insert into t (id,a) values (931,56);
+insert into t (id,a) values (931,57);
+insert into t (id,a) values (931,58);
+insert into t (id,a) values (931,59);
+insert into t (id,a) values (931,60);
+insert into t (id,a) values (931,61);
+insert into t (id,a) values (931,62);
+insert into t (id,a) values (931,63);
+insert into t (id,a) values (931,64);
+insert into t (id,a) values (931,65);
+insert into t (id,a) values (931,66);
+insert into t (id,a) values (931,67);
+insert into t (id,a) values (931,68);
+insert into t (id,a) values (931,69);
+insert into t (id,a) values (931,70);
+insert into t (id,a) values (931,71);
+insert into t (id,a) values (931,72);
+insert into t (id,a) values (931,73);
+insert into t (id,a) values (931,74);
+insert into t (id,a) values (931,75);
+insert into t (id,a) values (931,76);
+insert into t (id,a) values (931,77);
+insert into t (id,a) values (931,78);
+insert into t (id,a) values (931,79);
+insert into t (id,a) values (931,80);
+insert into t (id,a) values (931,81);
+insert into t (id,a) values (931,82);
+insert into t (id,a) values (931,83);
+insert into t (id,a) values (931,84);
+insert into t (id,a) values (931,85);
+insert into t (id,a) values (931,86);
+insert into t (id,a) values (931,87);
+insert into t (id,a) values (931,88);
+insert into t (id,a) values (931,89);
+insert into t (id,a) values (931,90);
+insert into t (id,a) values (931,91);
+insert into t (id,a) values (931,92);
+insert into t (id,a) values (931,93);
+insert into t (id,a) values (931,94);
+insert into t (id,a) values (931,95);
+insert into t (id,a) values (931,96);
+insert into t (id,a) values (931,97);
+insert into t (id,a) values (931,98);
+insert into t (id,a) values (931,99);
+insert into t (id,a) values (932,0);
+insert into t (id,a) values (932,1);
+insert into t (id,a) values (932,2);
+insert into t (id,a) values (932,3);
+insert into t (id,a) values (932,4);
+insert into t (id,a) values (932,5);
+insert into t (id,a) values (932,6);
+insert into t (id,a) values (932,7);
+insert into t (id,a) values (932,8);
+insert into t (id,a) values (932,9);
+insert into t (id,a) values (932,10);
+insert into t (id,a) values (932,11);
+insert into t (id,a) values (932,12);
+insert into t (id,a) values (932,13);
+insert into t (id,a) values (932,14);
+insert into t (id,a) values (932,15);
+insert into t (id,a) values (932,16);
+insert into t (id,a) values (932,17);
+insert into t (id,a) values (932,18);
+insert into t (id,a) values (932,19);
+insert into t (id,a) values (932,20);
+insert into t (id,a) values (932,21);
+insert into t (id,a) values (932,22);
+insert into t (id,a) values (932,23);
+insert into t (id,a) values (932,24);
+insert into t (id,a) values (932,25);
+insert into t (id,a) values (932,26);
+insert into t (id,a) values (932,27);
+insert into t (id,a) values (932,28);
+insert into t (id,a) values (932,29);
+insert into t (id,a) values (932,30);
+insert into t (id,a) values (932,31);
+insert into t (id,a) values (932,32);
+insert into t (id,a) values (932,33);
+insert into t (id,a) values (932,34);
+insert into t (id,a) values (932,35);
+insert into t (id,a) values (932,36);
+insert into t (id,a) values (932,37);
+insert into t (id,a) values (932,38);
+insert into t (id,a) values (932,39);
+insert into t (id,a) values (932,40);
+insert into t (id,a) values (932,41);
+insert into t (id,a) values (932,42);
+insert into t (id,a) values (932,43);
+insert into t (id,a) values (932,44);
+insert into t (id,a) values (932,45);
+insert into t (id,a) values (932,46);
+insert into t (id,a) values (932,47);
+insert into t (id,a) values (932,48);
+insert into t (id,a) values (932,49);
+insert into t (id,a) values (932,50);
+insert into t (id,a) values (932,51);
+insert into t (id,a) values (932,52);
+insert into t (id,a) values (932,53);
+insert into t (id,a) values (932,54);
+insert into t (id,a) values (932,55);
+insert into t (id,a) values (932,56);
+insert into t (id,a) values (932,57);
+insert into t (id,a) values (932,58);
+insert into t (id,a) values (932,59);
+insert into t (id,a) values (932,60);
+insert into t (id,a) values (932,61);
+insert into t (id,a) values (932,62);
+insert into t (id,a) values (932,63);
+insert into t (id,a) values (932,64);
+insert into t (id,a) values (932,65);
+insert into t (id,a) values (932,66);
+insert into t (id,a) values (932,67);
+insert into t (id,a) values (932,68);
+insert into t (id,a) values (932,69);
+insert into t (id,a) values (932,70);
+insert into t (id,a) values (932,71);
+insert into t (id,a) values (932,72);
+insert into t (id,a) values (932,73);
+insert into t (id,a) values (932,74);
+insert into t (id,a) values (932,75);
+insert into t (id,a) values (932,76);
+insert into t (id,a) values (932,77);
+insert into t (id,a) values (932,78);
+insert into t (id,a) values (932,79);
+insert into t (id,a) values (932,80);
+insert into t (id,a) values (932,81);
+insert into t (id,a) values (932,82);
+insert into t (id,a) values (932,83);
+insert into t (id,a) values (932,84);
+insert into t (id,a) values (932,85);
+insert into t (id,a) values (932,86);
+insert into t (id,a) values (932,87);
+insert into t (id,a) values (932,88);
+insert into t (id,a) values (932,89);
+insert into t (id,a) values (932,90);
+insert into t (id,a) values (932,91);
+insert into t (id,a) values (932,92);
+insert into t (id,a) values (932,93);
+insert into t (id,a) values (932,94);
+insert into t (id,a) values (932,95);
+insert into t (id,a) values (932,96);
+insert into t (id,a) values (932,97);
+insert into t (id,a) values (932,98);
+insert into t (id,a) values (932,99);
+insert into t (id,a) values (933,0);
+insert into t (id,a) values (933,1);
+insert into t (id,a) values (933,2);
+insert into t (id,a) values (933,3);
+insert into t (id,a) values (933,4);
+insert into t (id,a) values (933,5);
+insert into t (id,a) values (933,6);
+insert into t (id,a) values (933,7);
+insert into t (id,a) values (933,8);
+insert into t (id,a) values (933,9);
+insert into t (id,a) values (933,10);
+insert into t (id,a) values (933,11);
+insert into t (id,a) values (933,12);
+insert into t (id,a) values (933,13);
+insert into t (id,a) values (933,14);
+insert into t (id,a) values (933,15);
+insert into t (id,a) values (933,16);
+insert into t (id,a) values (933,17);
+insert into t (id,a) values (933,18);
+insert into t (id,a) values (933,19);
+insert into t (id,a) values (933,20);
+insert into t (id,a) values (933,21);
+insert into t (id,a) values (933,22);
+insert into t (id,a) values (933,23);
+insert into t (id,a) values (933,24);
+insert into t (id,a) values (933,25);
+insert into t (id,a) values (933,26);
+insert into t (id,a) values (933,27);
+insert into t (id,a) values (933,28);
+insert into t (id,a) values (933,29);
+insert into t (id,a) values (933,30);
+insert into t (id,a) values (933,31);
+insert into t (id,a) values (933,32);
+insert into t (id,a) values (933,33);
+insert into t (id,a) values (933,34);
+insert into t (id,a) values (933,35);
+insert into t (id,a) values (933,36);
+insert into t (id,a) values (933,37);
+insert into t (id,a) values (933,38);
+insert into t (id,a) values (933,39);
+insert into t (id,a) values (933,40);
+insert into t (id,a) values (933,41);
+insert into t (id,a) values (933,42);
+insert into t (id,a) values (933,43);
+insert into t (id,a) values (933,44);
+insert into t (id,a) values (933,45);
+insert into t (id,a) values (933,46);
+insert into t (id,a) values (933,47);
+insert into t (id,a) values (933,48);
+insert into t (id,a) values (933,49);
+insert into t (id,a) values (933,50);
+insert into t (id,a) values (933,51);
+insert into t (id,a) values (933,52);
+insert into t (id,a) values (933,53);
+insert into t (id,a) values (933,54);
+insert into t (id,a) values (933,55);
+insert into t (id,a) values (933,56);
+insert into t (id,a) values (933,57);
+insert into t (id,a) values (933,58);
+insert into t (id,a) values (933,59);
+insert into t (id,a) values (933,60);
+insert into t (id,a) values (933,61);
+insert into t (id,a) values (933,62);
+insert into t (id,a) values (933,63);
+insert into t (id,a) values (933,64);
+insert into t (id,a) values (933,65);
+insert into t (id,a) values (933,66);
+insert into t (id,a) values (933,67);
+insert into t (id,a) values (933,68);
+insert into t (id,a) values (933,69);
+insert into t (id,a) values (933,70);
+insert into t (id,a) values (933,71);
+insert into t (id,a) values (933,72);
+insert into t (id,a) values (933,73);
+insert into t (id,a) values (933,74);
+insert into t (id,a) values (933,75);
+insert into t (id,a) values (933,76);
+insert into t (id,a) values (933,77);
+insert into t (id,a) values (933,78);
+insert into t (id,a) values (933,79);
+insert into t (id,a) values (933,80);
+insert into t (id,a) values (933,81);
+insert into t (id,a) values (933,82);
+insert into t (id,a) values (933,83);
+insert into t (id,a) values (933,84);
+insert into t (id,a) values (933,85);
+insert into t (id,a) values (933,86);
+insert into t (id,a) values (933,87);
+insert into t (id,a) values (933,88);
+insert into t (id,a) values (933,89);
+insert into t (id,a) values (933,90);
+insert into t (id,a) values (933,91);
+insert into t (id,a) values (933,92);
+insert into t (id,a) values (933,93);
+insert into t (id,a) values (933,94);
+insert into t (id,a) values (933,95);
+insert into t (id,a) values (933,96);
+insert into t (id,a) values (933,97);
+insert into t (id,a) values (933,98);
+insert into t (id,a) values (933,99);
+insert into t (id,a) values (934,0);
+insert into t (id,a) values (934,1);
+insert into t (id,a) values (934,2);
+insert into t (id,a) values (934,3);
+insert into t (id,a) values (934,4);
+insert into t (id,a) values (934,5);
+insert into t (id,a) values (934,6);
+insert into t (id,a) values (934,7);
+insert into t (id,a) values (934,8);
+insert into t (id,a) values (934,9);
+insert into t (id,a) values (934,10);
+insert into t (id,a) values (934,11);
+insert into t (id,a) values (934,12);
+insert into t (id,a) values (934,13);
+insert into t (id,a) values (934,14);
+insert into t (id,a) values (934,15);
+insert into t (id,a) values (934,16);
+insert into t (id,a) values (934,17);
+insert into t (id,a) values (934,18);
+insert into t (id,a) values (934,19);
+insert into t (id,a) values (934,20);
+insert into t (id,a) values (934,21);
+insert into t (id,a) values (934,22);
+insert into t (id,a) values (934,23);
+insert into t (id,a) values (934,24);
+insert into t (id,a) values (934,25);
+insert into t (id,a) values (934,26);
+insert into t (id,a) values (934,27);
+insert into t (id,a) values (934,28);
+insert into t (id,a) values (934,29);
+insert into t (id,a) values (934,30);
+insert into t (id,a) values (934,31);
+insert into t (id,a) values (934,32);
+insert into t (id,a) values (934,33);
+insert into t (id,a) values (934,34);
+insert into t (id,a) values (934,35);
+insert into t (id,a) values (934,36);
+insert into t (id,a) values (934,37);
+insert into t (id,a) values (934,38);
+insert into t (id,a) values (934,39);
+insert into t (id,a) values (934,40);
+insert into t (id,a) values (934,41);
+insert into t (id,a) values (934,42);
+insert into t (id,a) values (934,43);
+insert into t (id,a) values (934,44);
+insert into t (id,a) values (934,45);
+insert into t (id,a) values (934,46);
+insert into t (id,a) values (934,47);
+insert into t (id,a) values (934,48);
+insert into t (id,a) values (934,49);
+insert into t (id,a) values (934,50);
+insert into t (id,a) values (934,51);
+insert into t (id,a) values (934,52);
+insert into t (id,a) values (934,53);
+insert into t (id,a) values (934,54);
+insert into t (id,a) values (934,55);
+insert into t (id,a) values (934,56);
+insert into t (id,a) values (934,57);
+insert into t (id,a) values (934,58);
+insert into t (id,a) values (934,59);
+insert into t (id,a) values (934,60);
+insert into t (id,a) values (934,61);
+insert into t (id,a) values (934,62);
+insert into t (id,a) values (934,63);
+insert into t (id,a) values (934,64);
+insert into t (id,a) values (934,65);
+insert into t (id,a) values (934,66);
+insert into t (id,a) values (934,67);
+insert into t (id,a) values (934,68);
+insert into t (id,a) values (934,69);
+insert into t (id,a) values (934,70);
+insert into t (id,a) values (934,71);
+insert into t (id,a) values (934,72);
+insert into t (id,a) values (934,73);
+insert into t (id,a) values (934,74);
+insert into t (id,a) values (934,75);
+insert into t (id,a) values (934,76);
+insert into t (id,a) values (934,77);
+insert into t (id,a) values (934,78);
+insert into t (id,a) values (934,79);
+insert into t (id,a) values (934,80);
+insert into t (id,a) values (934,81);
+insert into t (id,a) values (934,82);
+insert into t (id,a) values (934,83);
+insert into t (id,a) values (934,84);
+insert into t (id,a) values (934,85);
+insert into t (id,a) values (934,86);
+insert into t (id,a) values (934,87);
+insert into t (id,a) values (934,88);
+insert into t (id,a) values (934,89);
+insert into t (id,a) values (934,90);
+insert into t (id,a) values (934,91);
+insert into t (id,a) values (934,92);
+insert into t (id,a) values (934,93);
+insert into t (id,a) values (934,94);
+insert into t (id,a) values (934,95);
+insert into t (id,a) values (934,96);
+insert into t (id,a) values (934,97);
+insert into t (id,a) values (934,98);
+insert into t (id,a) values (934,99);
+insert into t (id,a) values (935,0);
+insert into t (id,a) values (935,1);
+insert into t (id,a) values (935,2);
+insert into t (id,a) values (935,3);
+insert into t (id,a) values (935,4);
+insert into t (id,a) values (935,5);
+insert into t (id,a) values (935,6);
+insert into t (id,a) values (935,7);
+insert into t (id,a) values (935,8);
+insert into t (id,a) values (935,9);
+insert into t (id,a) values (935,10);
+insert into t (id,a) values (935,11);
+insert into t (id,a) values (935,12);
+insert into t (id,a) values (935,13);
+insert into t (id,a) values (935,14);
+insert into t (id,a) values (935,15);
+insert into t (id,a) values (935,16);
+insert into t (id,a) values (935,17);
+insert into t (id,a) values (935,18);
+insert into t (id,a) values (935,19);
+insert into t (id,a) values (935,20);
+insert into t (id,a) values (935,21);
+insert into t (id,a) values (935,22);
+insert into t (id,a) values (935,23);
+insert into t (id,a) values (935,24);
+insert into t (id,a) values (935,25);
+insert into t (id,a) values (935,26);
+insert into t (id,a) values (935,27);
+insert into t (id,a) values (935,28);
+insert into t (id,a) values (935,29);
+insert into t (id,a) values (935,30);
+insert into t (id,a) values (935,31);
+insert into t (id,a) values (935,32);
+insert into t (id,a) values (935,33);
+insert into t (id,a) values (935,34);
+insert into t (id,a) values (935,35);
+insert into t (id,a) values (935,36);
+insert into t (id,a) values (935,37);
+insert into t (id,a) values (935,38);
+insert into t (id,a) values (935,39);
+insert into t (id,a) values (935,40);
+insert into t (id,a) values (935,41);
+insert into t (id,a) values (935,42);
+insert into t (id,a) values (935,43);
+insert into t (id,a) values (935,44);
+insert into t (id,a) values (935,45);
+insert into t (id,a) values (935,46);
+insert into t (id,a) values (935,47);
+insert into t (id,a) values (935,48);
+insert into t (id,a) values (935,49);
+insert into t (id,a) values (935,50);
+insert into t (id,a) values (935,51);
+insert into t (id,a) values (935,52);
+insert into t (id,a) values (935,53);
+insert into t (id,a) values (935,54);
+insert into t (id,a) values (935,55);
+insert into t (id,a) values (935,56);
+insert into t (id,a) values (935,57);
+insert into t (id,a) values (935,58);
+insert into t (id,a) values (935,59);
+insert into t (id,a) values (935,60);
+insert into t (id,a) values (935,61);
+insert into t (id,a) values (935,62);
+insert into t (id,a) values (935,63);
+insert into t (id,a) values (935,64);
+insert into t (id,a) values (935,65);
+insert into t (id,a) values (935,66);
+insert into t (id,a) values (935,67);
+insert into t (id,a) values (935,68);
+insert into t (id,a) values (935,69);
+insert into t (id,a) values (935,70);
+insert into t (id,a) values (935,71);
+insert into t (id,a) values (935,72);
+insert into t (id,a) values (935,73);
+insert into t (id,a) values (935,74);
+insert into t (id,a) values (935,75);
+insert into t (id,a) values (935,76);
+insert into t (id,a) values (935,77);
+insert into t (id,a) values (935,78);
+insert into t (id,a) values (935,79);
+insert into t (id,a) values (935,80);
+insert into t (id,a) values (935,81);
+insert into t (id,a) values (935,82);
+insert into t (id,a) values (935,83);
+insert into t (id,a) values (935,84);
+insert into t (id,a) values (935,85);
+insert into t (id,a) values (935,86);
+insert into t (id,a) values (935,87);
+insert into t (id,a) values (935,88);
+insert into t (id,a) values (935,89);
+insert into t (id,a) values (935,90);
+insert into t (id,a) values (935,91);
+insert into t (id,a) values (935,92);
+insert into t (id,a) values (935,93);
+insert into t (id,a) values (935,94);
+insert into t (id,a) values (935,95);
+insert into t (id,a) values (935,96);
+insert into t (id,a) values (935,97);
+insert into t (id,a) values (935,98);
+insert into t (id,a) values (935,99);
+insert into t (id,a) values (936,0);
+insert into t (id,a) values (936,1);
+insert into t (id,a) values (936,2);
+insert into t (id,a) values (936,3);
+insert into t (id,a) values (936,4);
+insert into t (id,a) values (936,5);
+insert into t (id,a) values (936,6);
+insert into t (id,a) values (936,7);
+insert into t (id,a) values (936,8);
+insert into t (id,a) values (936,9);
+insert into t (id,a) values (936,10);
+insert into t (id,a) values (936,11);
+insert into t (id,a) values (936,12);
+insert into t (id,a) values (936,13);
+insert into t (id,a) values (936,14);
+insert into t (id,a) values (936,15);
+insert into t (id,a) values (936,16);
+insert into t (id,a) values (936,17);
+insert into t (id,a) values (936,18);
+insert into t (id,a) values (936,19);
+insert into t (id,a) values (936,20);
+insert into t (id,a) values (936,21);
+insert into t (id,a) values (936,22);
+insert into t (id,a) values (936,23);
+insert into t (id,a) values (936,24);
+insert into t (id,a) values (936,25);
+insert into t (id,a) values (936,26);
+insert into t (id,a) values (936,27);
+insert into t (id,a) values (936,28);
+insert into t (id,a) values (936,29);
+insert into t (id,a) values (936,30);
+insert into t (id,a) values (936,31);
+insert into t (id,a) values (936,32);
+insert into t (id,a) values (936,33);
+insert into t (id,a) values (936,34);
+insert into t (id,a) values (936,35);
+insert into t (id,a) values (936,36);
+insert into t (id,a) values (936,37);
+insert into t (id,a) values (936,38);
+insert into t (id,a) values (936,39);
+insert into t (id,a) values (936,40);
+insert into t (id,a) values (936,41);
+insert into t (id,a) values (936,42);
+insert into t (id,a) values (936,43);
+insert into t (id,a) values (936,44);
+insert into t (id,a) values (936,45);
+insert into t (id,a) values (936,46);
+insert into t (id,a) values (936,47);
+insert into t (id,a) values (936,48);
+insert into t (id,a) values (936,49);
+insert into t (id,a) values (936,50);
+insert into t (id,a) values (936,51);
+insert into t (id,a) values (936,52);
+insert into t (id,a) values (936,53);
+insert into t (id,a) values (936,54);
+insert into t (id,a) values (936,55);
+insert into t (id,a) values (936,56);
+insert into t (id,a) values (936,57);
+insert into t (id,a) values (936,58);
+insert into t (id,a) values (936,59);
+insert into t (id,a) values (936,60);
+insert into t (id,a) values (936,61);
+insert into t (id,a) values (936,62);
+insert into t (id,a) values (936,63);
+insert into t (id,a) values (936,64);
+insert into t (id,a) values (936,65);
+insert into t (id,a) values (936,66);
+insert into t (id,a) values (936,67);
+insert into t (id,a) values (936,68);
+insert into t (id,a) values (936,69);
+insert into t (id,a) values (936,70);
+insert into t (id,a) values (936,71);
+insert into t (id,a) values (936,72);
+insert into t (id,a) values (936,73);
+insert into t (id,a) values (936,74);
+insert into t (id,a) values (936,75);
+insert into t (id,a) values (936,76);
+insert into t (id,a) values (936,77);
+insert into t (id,a) values (936,78);
+insert into t (id,a) values (936,79);
+insert into t (id,a) values (936,80);
+insert into t (id,a) values (936,81);
+insert into t (id,a) values (936,82);
+insert into t (id,a) values (936,83);
+insert into t (id,a) values (936,84);
+insert into t (id,a) values (936,85);
+insert into t (id,a) values (936,86);
+insert into t (id,a) values (936,87);
+insert into t (id,a) values (936,88);
+insert into t (id,a) values (936,89);
+insert into t (id,a) values (936,90);
+insert into t (id,a) values (936,91);
+insert into t (id,a) values (936,92);
+insert into t (id,a) values (936,93);
+insert into t (id,a) values (936,94);
+insert into t (id,a) values (936,95);
+insert into t (id,a) values (936,96);
+insert into t (id,a) values (936,97);
+insert into t (id,a) values (936,98);
+insert into t (id,a) values (936,99);
+insert into t (id,a) values (937,0);
+insert into t (id,a) values (937,1);
+insert into t (id,a) values (937,2);
+insert into t (id,a) values (937,3);
+insert into t (id,a) values (937,4);
+insert into t (id,a) values (937,5);
+insert into t (id,a) values (937,6);
+insert into t (id,a) values (937,7);
+insert into t (id,a) values (937,8);
+insert into t (id,a) values (937,9);
+insert into t (id,a) values (937,10);
+insert into t (id,a) values (937,11);
+insert into t (id,a) values (937,12);
+insert into t (id,a) values (937,13);
+insert into t (id,a) values (937,14);
+insert into t (id,a) values (937,15);
+insert into t (id,a) values (937,16);
+insert into t (id,a) values (937,17);
+insert into t (id,a) values (937,18);
+insert into t (id,a) values (937,19);
+insert into t (id,a) values (937,20);
+insert into t (id,a) values (937,21);
+insert into t (id,a) values (937,22);
+insert into t (id,a) values (937,23);
+insert into t (id,a) values (937,24);
+insert into t (id,a) values (937,25);
+insert into t (id,a) values (937,26);
+insert into t (id,a) values (937,27);
+insert into t (id,a) values (937,28);
+insert into t (id,a) values (937,29);
+insert into t (id,a) values (937,30);
+insert into t (id,a) values (937,31);
+insert into t (id,a) values (937,32);
+insert into t (id,a) values (937,33);
+insert into t (id,a) values (937,34);
+insert into t (id,a) values (937,35);
+insert into t (id,a) values (937,36);
+insert into t (id,a) values (937,37);
+insert into t (id,a) values (937,38);
+insert into t (id,a) values (937,39);
+insert into t (id,a) values (937,40);
+insert into t (id,a) values (937,41);
+insert into t (id,a) values (937,42);
+insert into t (id,a) values (937,43);
+insert into t (id,a) values (937,44);
+insert into t (id,a) values (937,45);
+insert into t (id,a) values (937,46);
+insert into t (id,a) values (937,47);
+insert into t (id,a) values (937,48);
+insert into t (id,a) values (937,49);
+insert into t (id,a) values (937,50);
+insert into t (id,a) values (937,51);
+insert into t (id,a) values (937,52);
+insert into t (id,a) values (937,53);
+insert into t (id,a) values (937,54);
+insert into t (id,a) values (937,55);
+insert into t (id,a) values (937,56);
+insert into t (id,a) values (937,57);
+insert into t (id,a) values (937,58);
+insert into t (id,a) values (937,59);
+insert into t (id,a) values (937,60);
+insert into t (id,a) values (937,61);
+insert into t (id,a) values (937,62);
+insert into t (id,a) values (937,63);
+insert into t (id,a) values (937,64);
+insert into t (id,a) values (937,65);
+insert into t (id,a) values (937,66);
+insert into t (id,a) values (937,67);
+insert into t (id,a) values (937,68);
+insert into t (id,a) values (937,69);
+insert into t (id,a) values (937,70);
+insert into t (id,a) values (937,71);
+insert into t (id,a) values (937,72);
+insert into t (id,a) values (937,73);
+insert into t (id,a) values (937,74);
+insert into t (id,a) values (937,75);
+insert into t (id,a) values (937,76);
+insert into t (id,a) values (937,77);
+insert into t (id,a) values (937,78);
+insert into t (id,a) values (937,79);
+insert into t (id,a) values (937,80);
+insert into t (id,a) values (937,81);
+insert into t (id,a) values (937,82);
+insert into t (id,a) values (937,83);
+insert into t (id,a) values (937,84);
+insert into t (id,a) values (937,85);
+insert into t (id,a) values (937,86);
+insert into t (id,a) values (937,87);
+insert into t (id,a) values (937,88);
+insert into t (id,a) values (937,89);
+insert into t (id,a) values (937,90);
+insert into t (id,a) values (937,91);
+insert into t (id,a) values (937,92);
+insert into t (id,a) values (937,93);
+insert into t (id,a) values (937,94);
+insert into t (id,a) values (937,95);
+insert into t (id,a) values (937,96);
+insert into t (id,a) values (937,97);
+insert into t (id,a) values (937,98);
+insert into t (id,a) values (937,99);
+insert into t (id,a) values (938,0);
+insert into t (id,a) values (938,1);
+insert into t (id,a) values (938,2);
+insert into t (id,a) values (938,3);
+insert into t (id,a) values (938,4);
+insert into t (id,a) values (938,5);
+insert into t (id,a) values (938,6);
+insert into t (id,a) values (938,7);
+insert into t (id,a) values (938,8);
+insert into t (id,a) values (938,9);
+insert into t (id,a) values (938,10);
+insert into t (id,a) values (938,11);
+insert into t (id,a) values (938,12);
+insert into t (id,a) values (938,13);
+insert into t (id,a) values (938,14);
+insert into t (id,a) values (938,15);
+insert into t (id,a) values (938,16);
+insert into t (id,a) values (938,17);
+insert into t (id,a) values (938,18);
+insert into t (id,a) values (938,19);
+insert into t (id,a) values (938,20);
+insert into t (id,a) values (938,21);
+insert into t (id,a) values (938,22);
+insert into t (id,a) values (938,23);
+insert into t (id,a) values (938,24);
+insert into t (id,a) values (938,25);
+insert into t (id,a) values (938,26);
+insert into t (id,a) values (938,27);
+insert into t (id,a) values (938,28);
+insert into t (id,a) values (938,29);
+insert into t (id,a) values (938,30);
+insert into t (id,a) values (938,31);
+insert into t (id,a) values (938,32);
+insert into t (id,a) values (938,33);
+insert into t (id,a) values (938,34);
+insert into t (id,a) values (938,35);
+insert into t (id,a) values (938,36);
+insert into t (id,a) values (938,37);
+insert into t (id,a) values (938,38);
+insert into t (id,a) values (938,39);
+insert into t (id,a) values (938,40);
+insert into t (id,a) values (938,41);
+insert into t (id,a) values (938,42);
+insert into t (id,a) values (938,43);
+insert into t (id,a) values (938,44);
+insert into t (id,a) values (938,45);
+insert into t (id,a) values (938,46);
+insert into t (id,a) values (938,47);
+insert into t (id,a) values (938,48);
+insert into t (id,a) values (938,49);
+insert into t (id,a) values (938,50);
+insert into t (id,a) values (938,51);
+insert into t (id,a) values (938,52);
+insert into t (id,a) values (938,53);
+insert into t (id,a) values (938,54);
+insert into t (id,a) values (938,55);
+insert into t (id,a) values (938,56);
+insert into t (id,a) values (938,57);
+insert into t (id,a) values (938,58);
+insert into t (id,a) values (938,59);
+insert into t (id,a) values (938,60);
+insert into t (id,a) values (938,61);
+insert into t (id,a) values (938,62);
+insert into t (id,a) values (938,63);
+insert into t (id,a) values (938,64);
+insert into t (id,a) values (938,65);
+insert into t (id,a) values (938,66);
+insert into t (id,a) values (938,67);
+insert into t (id,a) values (938,68);
+insert into t (id,a) values (938,69);
+insert into t (id,a) values (938,70);
+insert into t (id,a) values (938,71);
+insert into t (id,a) values (938,72);
+insert into t (id,a) values (938,73);
+insert into t (id,a) values (938,74);
+insert into t (id,a) values (938,75);
+insert into t (id,a) values (938,76);
+insert into t (id,a) values (938,77);
+insert into t (id,a) values (938,78);
+insert into t (id,a) values (938,79);
+insert into t (id,a) values (938,80);
+insert into t (id,a) values (938,81);
+insert into t (id,a) values (938,82);
+insert into t (id,a) values (938,83);
+insert into t (id,a) values (938,84);
+insert into t (id,a) values (938,85);
+insert into t (id,a) values (938,86);
+insert into t (id,a) values (938,87);
+insert into t (id,a) values (938,88);
+insert into t (id,a) values (938,89);
+insert into t (id,a) values (938,90);
+insert into t (id,a) values (938,91);
+insert into t (id,a) values (938,92);
+insert into t (id,a) values (938,93);
+insert into t (id,a) values (938,94);
+insert into t (id,a) values (938,95);
+insert into t (id,a) values (938,96);
+insert into t (id,a) values (938,97);
+insert into t (id,a) values (938,98);
+insert into t (id,a) values (938,99);
+insert into t (id,a) values (939,0);
+insert into t (id,a) values (939,1);
+insert into t (id,a) values (939,2);
+insert into t (id,a) values (939,3);
+insert into t (id,a) values (939,4);
+insert into t (id,a) values (939,5);
+insert into t (id,a) values (939,6);
+insert into t (id,a) values (939,7);
+insert into t (id,a) values (939,8);
+insert into t (id,a) values (939,9);
+insert into t (id,a) values (939,10);
+insert into t (id,a) values (939,11);
+insert into t (id,a) values (939,12);
+insert into t (id,a) values (939,13);
+insert into t (id,a) values (939,14);
+insert into t (id,a) values (939,15);
+insert into t (id,a) values (939,16);
+insert into t (id,a) values (939,17);
+insert into t (id,a) values (939,18);
+insert into t (id,a) values (939,19);
+insert into t (id,a) values (939,20);
+insert into t (id,a) values (939,21);
+insert into t (id,a) values (939,22);
+insert into t (id,a) values (939,23);
+insert into t (id,a) values (939,24);
+insert into t (id,a) values (939,25);
+insert into t (id,a) values (939,26);
+insert into t (id,a) values (939,27);
+insert into t (id,a) values (939,28);
+insert into t (id,a) values (939,29);
+insert into t (id,a) values (939,30);
+insert into t (id,a) values (939,31);
+insert into t (id,a) values (939,32);
+insert into t (id,a) values (939,33);
+insert into t (id,a) values (939,34);
+insert into t (id,a) values (939,35);
+insert into t (id,a) values (939,36);
+insert into t (id,a) values (939,37);
+insert into t (id,a) values (939,38);
+insert into t (id,a) values (939,39);
+insert into t (id,a) values (939,40);
+insert into t (id,a) values (939,41);
+insert into t (id,a) values (939,42);
+insert into t (id,a) values (939,43);
+insert into t (id,a) values (939,44);
+insert into t (id,a) values (939,45);
+insert into t (id,a) values (939,46);
+insert into t (id,a) values (939,47);
+insert into t (id,a) values (939,48);
+insert into t (id,a) values (939,49);
+insert into t (id,a) values (939,50);
+insert into t (id,a) values (939,51);
+insert into t (id,a) values (939,52);
+insert into t (id,a) values (939,53);
+insert into t (id,a) values (939,54);
+insert into t (id,a) values (939,55);
+insert into t (id,a) values (939,56);
+insert into t (id,a) values (939,57);
+insert into t (id,a) values (939,58);
+insert into t (id,a) values (939,59);
+insert into t (id,a) values (939,60);
+insert into t (id,a) values (939,61);
+insert into t (id,a) values (939,62);
+insert into t (id,a) values (939,63);
+insert into t (id,a) values (939,64);
+insert into t (id,a) values (939,65);
+insert into t (id,a) values (939,66);
+insert into t (id,a) values (939,67);
+insert into t (id,a) values (939,68);
+insert into t (id,a) values (939,69);
+insert into t (id,a) values (939,70);
+insert into t (id,a) values (939,71);
+insert into t (id,a) values (939,72);
+insert into t (id,a) values (939,73);
+insert into t (id,a) values (939,74);
+insert into t (id,a) values (939,75);
+insert into t (id,a) values (939,76);
+insert into t (id,a) values (939,77);
+insert into t (id,a) values (939,78);
+insert into t (id,a) values (939,79);
+insert into t (id,a) values (939,80);
+insert into t (id,a) values (939,81);
+insert into t (id,a) values (939,82);
+insert into t (id,a) values (939,83);
+insert into t (id,a) values (939,84);
+insert into t (id,a) values (939,85);
+insert into t (id,a) values (939,86);
+insert into t (id,a) values (939,87);
+insert into t (id,a) values (939,88);
+insert into t (id,a) values (939,89);
+insert into t (id,a) values (939,90);
+insert into t (id,a) values (939,91);
+insert into t (id,a) values (939,92);
+insert into t (id,a) values (939,93);
+insert into t (id,a) values (939,94);
+insert into t (id,a) values (939,95);
+insert into t (id,a) values (939,96);
+insert into t (id,a) values (939,97);
+insert into t (id,a) values (939,98);
+insert into t (id,a) values (939,99);
+insert into t (id,a) values (940,0);
+insert into t (id,a) values (940,1);
+insert into t (id,a) values (940,2);
+insert into t (id,a) values (940,3);
+insert into t (id,a) values (940,4);
+insert into t (id,a) values (940,5);
+insert into t (id,a) values (940,6);
+insert into t (id,a) values (940,7);
+insert into t (id,a) values (940,8);
+insert into t (id,a) values (940,9);
+insert into t (id,a) values (940,10);
+insert into t (id,a) values (940,11);
+insert into t (id,a) values (940,12);
+insert into t (id,a) values (940,13);
+insert into t (id,a) values (940,14);
+insert into t (id,a) values (940,15);
+insert into t (id,a) values (940,16);
+insert into t (id,a) values (940,17);
+insert into t (id,a) values (940,18);
+insert into t (id,a) values (940,19);
+insert into t (id,a) values (940,20);
+insert into t (id,a) values (940,21);
+insert into t (id,a) values (940,22);
+insert into t (id,a) values (940,23);
+insert into t (id,a) values (940,24);
+insert into t (id,a) values (940,25);
+insert into t (id,a) values (940,26);
+insert into t (id,a) values (940,27);
+insert into t (id,a) values (940,28);
+insert into t (id,a) values (940,29);
+insert into t (id,a) values (940,30);
+insert into t (id,a) values (940,31);
+insert into t (id,a) values (940,32);
+insert into t (id,a) values (940,33);
+insert into t (id,a) values (940,34);
+insert into t (id,a) values (940,35);
+insert into t (id,a) values (940,36);
+insert into t (id,a) values (940,37);
+insert into t (id,a) values (940,38);
+insert into t (id,a) values (940,39);
+insert into t (id,a) values (940,40);
+insert into t (id,a) values (940,41);
+insert into t (id,a) values (940,42);
+insert into t (id,a) values (940,43);
+insert into t (id,a) values (940,44);
+insert into t (id,a) values (940,45);
+insert into t (id,a) values (940,46);
+insert into t (id,a) values (940,47);
+insert into t (id,a) values (940,48);
+insert into t (id,a) values (940,49);
+insert into t (id,a) values (940,50);
+insert into t (id,a) values (940,51);
+insert into t (id,a) values (940,52);
+insert into t (id,a) values (940,53);
+insert into t (id,a) values (940,54);
+insert into t (id,a) values (940,55);
+insert into t (id,a) values (940,56);
+insert into t (id,a) values (940,57);
+insert into t (id,a) values (940,58);
+insert into t (id,a) values (940,59);
+insert into t (id,a) values (940,60);
+insert into t (id,a) values (940,61);
+insert into t (id,a) values (940,62);
+insert into t (id,a) values (940,63);
+insert into t (id,a) values (940,64);
+insert into t (id,a) values (940,65);
+insert into t (id,a) values (940,66);
+insert into t (id,a) values (940,67);
+insert into t (id,a) values (940,68);
+insert into t (id,a) values (940,69);
+insert into t (id,a) values (940,70);
+insert into t (id,a) values (940,71);
+insert into t (id,a) values (940,72);
+insert into t (id,a) values (940,73);
+insert into t (id,a) values (940,74);
+insert into t (id,a) values (940,75);
+insert into t (id,a) values (940,76);
+insert into t (id,a) values (940,77);
+insert into t (id,a) values (940,78);
+insert into t (id,a) values (940,79);
+insert into t (id,a) values (940,80);
+insert into t (id,a) values (940,81);
+insert into t (id,a) values (940,82);
+insert into t (id,a) values (940,83);
+insert into t (id,a) values (940,84);
+insert into t (id,a) values (940,85);
+insert into t (id,a) values (940,86);
+insert into t (id,a) values (940,87);
+insert into t (id,a) values (940,88);
+insert into t (id,a) values (940,89);
+insert into t (id,a) values (940,90);
+insert into t (id,a) values (940,91);
+insert into t (id,a) values (940,92);
+insert into t (id,a) values (940,93);
+insert into t (id,a) values (940,94);
+insert into t (id,a) values (940,95);
+insert into t (id,a) values (940,96);
+insert into t (id,a) values (940,97);
+insert into t (id,a) values (940,98);
+insert into t (id,a) values (940,99);
+insert into t (id,a) values (941,0);
+insert into t (id,a) values (941,1);
+insert into t (id,a) values (941,2);
+insert into t (id,a) values (941,3);
+insert into t (id,a) values (941,4);
+insert into t (id,a) values (941,5);
+insert into t (id,a) values (941,6);
+insert into t (id,a) values (941,7);
+insert into t (id,a) values (941,8);
+insert into t (id,a) values (941,9);
+insert into t (id,a) values (941,10);
+insert into t (id,a) values (941,11);
+insert into t (id,a) values (941,12);
+insert into t (id,a) values (941,13);
+insert into t (id,a) values (941,14);
+insert into t (id,a) values (941,15);
+insert into t (id,a) values (941,16);
+insert into t (id,a) values (941,17);
+insert into t (id,a) values (941,18);
+insert into t (id,a) values (941,19);
+insert into t (id,a) values (941,20);
+insert into t (id,a) values (941,21);
+insert into t (id,a) values (941,22);
+insert into t (id,a) values (941,23);
+insert into t (id,a) values (941,24);
+insert into t (id,a) values (941,25);
+insert into t (id,a) values (941,26);
+insert into t (id,a) values (941,27);
+insert into t (id,a) values (941,28);
+insert into t (id,a) values (941,29);
+insert into t (id,a) values (941,30);
+insert into t (id,a) values (941,31);
+insert into t (id,a) values (941,32);
+insert into t (id,a) values (941,33);
+insert into t (id,a) values (941,34);
+insert into t (id,a) values (941,35);
+insert into t (id,a) values (941,36);
+insert into t (id,a) values (941,37);
+insert into t (id,a) values (941,38);
+insert into t (id,a) values (941,39);
+insert into t (id,a) values (941,40);
+insert into t (id,a) values (941,41);
+insert into t (id,a) values (941,42);
+insert into t (id,a) values (941,43);
+insert into t (id,a) values (941,44);
+insert into t (id,a) values (941,45);
+insert into t (id,a) values (941,46);
+insert into t (id,a) values (941,47);
+insert into t (id,a) values (941,48);
+insert into t (id,a) values (941,49);
+insert into t (id,a) values (941,50);
+insert into t (id,a) values (941,51);
+insert into t (id,a) values (941,52);
+insert into t (id,a) values (941,53);
+insert into t (id,a) values (941,54);
+insert into t (id,a) values (941,55);
+insert into t (id,a) values (941,56);
+insert into t (id,a) values (941,57);
+insert into t (id,a) values (941,58);
+insert into t (id,a) values (941,59);
+insert into t (id,a) values (941,60);
+insert into t (id,a) values (941,61);
+insert into t (id,a) values (941,62);
+insert into t (id,a) values (941,63);
+insert into t (id,a) values (941,64);
+insert into t (id,a) values (941,65);
+insert into t (id,a) values (941,66);
+insert into t (id,a) values (941,67);
+insert into t (id,a) values (941,68);
+insert into t (id,a) values (941,69);
+insert into t (id,a) values (941,70);
+insert into t (id,a) values (941,71);
+insert into t (id,a) values (941,72);
+insert into t (id,a) values (941,73);
+insert into t (id,a) values (941,74);
+insert into t (id,a) values (941,75);
+insert into t (id,a) values (941,76);
+insert into t (id,a) values (941,77);
+insert into t (id,a) values (941,78);
+insert into t (id,a) values (941,79);
+insert into t (id,a) values (941,80);
+insert into t (id,a) values (941,81);
+insert into t (id,a) values (941,82);
+insert into t (id,a) values (941,83);
+insert into t (id,a) values (941,84);
+insert into t (id,a) values (941,85);
+insert into t (id,a) values (941,86);
+insert into t (id,a) values (941,87);
+insert into t (id,a) values (941,88);
+insert into t (id,a) values (941,89);
+insert into t (id,a) values (941,90);
+insert into t (id,a) values (941,91);
+insert into t (id,a) values (941,92);
+insert into t (id,a) values (941,93);
+insert into t (id,a) values (941,94);
+insert into t (id,a) values (941,95);
+insert into t (id,a) values (941,96);
+insert into t (id,a) values (941,97);
+insert into t (id,a) values (941,98);
+insert into t (id,a) values (941,99);
+insert into t (id,a) values (942,0);
+insert into t (id,a) values (942,1);
+insert into t (id,a) values (942,2);
+insert into t (id,a) values (942,3);
+insert into t (id,a) values (942,4);
+insert into t (id,a) values (942,5);
+insert into t (id,a) values (942,6);
+insert into t (id,a) values (942,7);
+insert into t (id,a) values (942,8);
+insert into t (id,a) values (942,9);
+insert into t (id,a) values (942,10);
+insert into t (id,a) values (942,11);
+insert into t (id,a) values (942,12);
+insert into t (id,a) values (942,13);
+insert into t (id,a) values (942,14);
+insert into t (id,a) values (942,15);
+insert into t (id,a) values (942,16);
+insert into t (id,a) values (942,17);
+insert into t (id,a) values (942,18);
+insert into t (id,a) values (942,19);
+insert into t (id,a) values (942,20);
+insert into t (id,a) values (942,21);
+insert into t (id,a) values (942,22);
+insert into t (id,a) values (942,23);
+insert into t (id,a) values (942,24);
+insert into t (id,a) values (942,25);
+insert into t (id,a) values (942,26);
+insert into t (id,a) values (942,27);
+insert into t (id,a) values (942,28);
+insert into t (id,a) values (942,29);
+insert into t (id,a) values (942,30);
+insert into t (id,a) values (942,31);
+insert into t (id,a) values (942,32);
+insert into t (id,a) values (942,33);
+insert into t (id,a) values (942,34);
+insert into t (id,a) values (942,35);
+insert into t (id,a) values (942,36);
+insert into t (id,a) values (942,37);
+insert into t (id,a) values (942,38);
+insert into t (id,a) values (942,39);
+insert into t (id,a) values (942,40);
+insert into t (id,a) values (942,41);
+insert into t (id,a) values (942,42);
+insert into t (id,a) values (942,43);
+insert into t (id,a) values (942,44);
+insert into t (id,a) values (942,45);
+insert into t (id,a) values (942,46);
+insert into t (id,a) values (942,47);
+insert into t (id,a) values (942,48);
+insert into t (id,a) values (942,49);
+insert into t (id,a) values (942,50);
+insert into t (id,a) values (942,51);
+insert into t (id,a) values (942,52);
+insert into t (id,a) values (942,53);
+insert into t (id,a) values (942,54);
+insert into t (id,a) values (942,55);
+insert into t (id,a) values (942,56);
+insert into t (id,a) values (942,57);
+insert into t (id,a) values (942,58);
+insert into t (id,a) values (942,59);
+insert into t (id,a) values (942,60);
+insert into t (id,a) values (942,61);
+insert into t (id,a) values (942,62);
+insert into t (id,a) values (942,63);
+insert into t (id,a) values (942,64);
+insert into t (id,a) values (942,65);
+insert into t (id,a) values (942,66);
+insert into t (id,a) values (942,67);
+insert into t (id,a) values (942,68);
+insert into t (id,a) values (942,69);
+insert into t (id,a) values (942,70);
+insert into t (id,a) values (942,71);
+insert into t (id,a) values (942,72);
+insert into t (id,a) values (942,73);
+insert into t (id,a) values (942,74);
+insert into t (id,a) values (942,75);
+insert into t (id,a) values (942,76);
+insert into t (id,a) values (942,77);
+insert into t (id,a) values (942,78);
+insert into t (id,a) values (942,79);
+insert into t (id,a) values (942,80);
+insert into t (id,a) values (942,81);
+insert into t (id,a) values (942,82);
+insert into t (id,a) values (942,83);
+insert into t (id,a) values (942,84);
+insert into t (id,a) values (942,85);
+insert into t (id,a) values (942,86);
+insert into t (id,a) values (942,87);
+insert into t (id,a) values (942,88);
+insert into t (id,a) values (942,89);
+insert into t (id,a) values (942,90);
+insert into t (id,a) values (942,91);
+insert into t (id,a) values (942,92);
+insert into t (id,a) values (942,93);
+insert into t (id,a) values (942,94);
+insert into t (id,a) values (942,95);
+insert into t (id,a) values (942,96);
+insert into t (id,a) values (942,97);
+insert into t (id,a) values (942,98);
+insert into t (id,a) values (942,99);
+insert into t (id,a) values (943,0);
+insert into t (id,a) values (943,1);
+insert into t (id,a) values (943,2);
+insert into t (id,a) values (943,3);
+insert into t (id,a) values (943,4);
+insert into t (id,a) values (943,5);
+insert into t (id,a) values (943,6);
+insert into t (id,a) values (943,7);
+insert into t (id,a) values (943,8);
+insert into t (id,a) values (943,9);
+insert into t (id,a) values (943,10);
+insert into t (id,a) values (943,11);
+insert into t (id,a) values (943,12);
+insert into t (id,a) values (943,13);
+insert into t (id,a) values (943,14);
+insert into t (id,a) values (943,15);
+insert into t (id,a) values (943,16);
+insert into t (id,a) values (943,17);
+insert into t (id,a) values (943,18);
+insert into t (id,a) values (943,19);
+insert into t (id,a) values (943,20);
+insert into t (id,a) values (943,21);
+insert into t (id,a) values (943,22);
+insert into t (id,a) values (943,23);
+insert into t (id,a) values (943,24);
+insert into t (id,a) values (943,25);
+insert into t (id,a) values (943,26);
+insert into t (id,a) values (943,27);
+insert into t (id,a) values (943,28);
+insert into t (id,a) values (943,29);
+insert into t (id,a) values (943,30);
+insert into t (id,a) values (943,31);
+insert into t (id,a) values (943,32);
+insert into t (id,a) values (943,33);
+insert into t (id,a) values (943,34);
+insert into t (id,a) values (943,35);
+insert into t (id,a) values (943,36);
+insert into t (id,a) values (943,37);
+insert into t (id,a) values (943,38);
+insert into t (id,a) values (943,39);
+insert into t (id,a) values (943,40);
+insert into t (id,a) values (943,41);
+insert into t (id,a) values (943,42);
+insert into t (id,a) values (943,43);
+insert into t (id,a) values (943,44);
+insert into t (id,a) values (943,45);
+insert into t (id,a) values (943,46);
+insert into t (id,a) values (943,47);
+insert into t (id,a) values (943,48);
+insert into t (id,a) values (943,49);
+insert into t (id,a) values (943,50);
+insert into t (id,a) values (943,51);
+insert into t (id,a) values (943,52);
+insert into t (id,a) values (943,53);
+insert into t (id,a) values (943,54);
+insert into t (id,a) values (943,55);
+insert into t (id,a) values (943,56);
+insert into t (id,a) values (943,57);
+insert into t (id,a) values (943,58);
+insert into t (id,a) values (943,59);
+insert into t (id,a) values (943,60);
+insert into t (id,a) values (943,61);
+insert into t (id,a) values (943,62);
+insert into t (id,a) values (943,63);
+insert into t (id,a) values (943,64);
+insert into t (id,a) values (943,65);
+insert into t (id,a) values (943,66);
+insert into t (id,a) values (943,67);
+insert into t (id,a) values (943,68);
+insert into t (id,a) values (943,69);
+insert into t (id,a) values (943,70);
+insert into t (id,a) values (943,71);
+insert into t (id,a) values (943,72);
+insert into t (id,a) values (943,73);
+insert into t (id,a) values (943,74);
+insert into t (id,a) values (943,75);
+insert into t (id,a) values (943,76);
+insert into t (id,a) values (943,77);
+insert into t (id,a) values (943,78);
+insert into t (id,a) values (943,79);
+insert into t (id,a) values (943,80);
+insert into t (id,a) values (943,81);
+insert into t (id,a) values (943,82);
+insert into t (id,a) values (943,83);
+insert into t (id,a) values (943,84);
+insert into t (id,a) values (943,85);
+insert into t (id,a) values (943,86);
+insert into t (id,a) values (943,87);
+insert into t (id,a) values (943,88);
+insert into t (id,a) values (943,89);
+insert into t (id,a) values (943,90);
+insert into t (id,a) values (943,91);
+insert into t (id,a) values (943,92);
+insert into t (id,a) values (943,93);
+insert into t (id,a) values (943,94);
+insert into t (id,a) values (943,95);
+insert into t (id,a) values (943,96);
+insert into t (id,a) values (943,97);
+insert into t (id,a) values (943,98);
+insert into t (id,a) values (943,99);
+insert into t (id,a) values (944,0);
+insert into t (id,a) values (944,1);
+insert into t (id,a) values (944,2);
+insert into t (id,a) values (944,3);
+insert into t (id,a) values (944,4);
+insert into t (id,a) values (944,5);
+insert into t (id,a) values (944,6);
+insert into t (id,a) values (944,7);
+insert into t (id,a) values (944,8);
+insert into t (id,a) values (944,9);
+insert into t (id,a) values (944,10);
+insert into t (id,a) values (944,11);
+insert into t (id,a) values (944,12);
+insert into t (id,a) values (944,13);
+insert into t (id,a) values (944,14);
+insert into t (id,a) values (944,15);
+insert into t (id,a) values (944,16);
+insert into t (id,a) values (944,17);
+insert into t (id,a) values (944,18);
+insert into t (id,a) values (944,19);
+insert into t (id,a) values (944,20);
+insert into t (id,a) values (944,21);
+insert into t (id,a) values (944,22);
+insert into t (id,a) values (944,23);
+insert into t (id,a) values (944,24);
+insert into t (id,a) values (944,25);
+insert into t (id,a) values (944,26);
+insert into t (id,a) values (944,27);
+insert into t (id,a) values (944,28);
+insert into t (id,a) values (944,29);
+insert into t (id,a) values (944,30);
+insert into t (id,a) values (944,31);
+insert into t (id,a) values (944,32);
+insert into t (id,a) values (944,33);
+insert into t (id,a) values (944,34);
+insert into t (id,a) values (944,35);
+insert into t (id,a) values (944,36);
+insert into t (id,a) values (944,37);
+insert into t (id,a) values (944,38);
+insert into t (id,a) values (944,39);
+insert into t (id,a) values (944,40);
+insert into t (id,a) values (944,41);
+insert into t (id,a) values (944,42);
+insert into t (id,a) values (944,43);
+insert into t (id,a) values (944,44);
+insert into t (id,a) values (944,45);
+insert into t (id,a) values (944,46);
+insert into t (id,a) values (944,47);
+insert into t (id,a) values (944,48);
+insert into t (id,a) values (944,49);
+insert into t (id,a) values (944,50);
+insert into t (id,a) values (944,51);
+insert into t (id,a) values (944,52);
+insert into t (id,a) values (944,53);
+insert into t (id,a) values (944,54);
+insert into t (id,a) values (944,55);
+insert into t (id,a) values (944,56);
+insert into t (id,a) values (944,57);
+insert into t (id,a) values (944,58);
+insert into t (id,a) values (944,59);
+insert into t (id,a) values (944,60);
+insert into t (id,a) values (944,61);
+insert into t (id,a) values (944,62);
+insert into t (id,a) values (944,63);
+insert into t (id,a) values (944,64);
+insert into t (id,a) values (944,65);
+insert into t (id,a) values (944,66);
+insert into t (id,a) values (944,67);
+insert into t (id,a) values (944,68);
+insert into t (id,a) values (944,69);
+insert into t (id,a) values (944,70);
+insert into t (id,a) values (944,71);
+insert into t (id,a) values (944,72);
+insert into t (id,a) values (944,73);
+insert into t (id,a) values (944,74);
+insert into t (id,a) values (944,75);
+insert into t (id,a) values (944,76);
+insert into t (id,a) values (944,77);
+insert into t (id,a) values (944,78);
+insert into t (id,a) values (944,79);
+insert into t (id,a) values (944,80);
+insert into t (id,a) values (944,81);
+insert into t (id,a) values (944,82);
+insert into t (id,a) values (944,83);
+insert into t (id,a) values (944,84);
+insert into t (id,a) values (944,85);
+insert into t (id,a) values (944,86);
+insert into t (id,a) values (944,87);
+insert into t (id,a) values (944,88);
+insert into t (id,a) values (944,89);
+insert into t (id,a) values (944,90);
+insert into t (id,a) values (944,91);
+insert into t (id,a) values (944,92);
+insert into t (id,a) values (944,93);
+insert into t (id,a) values (944,94);
+insert into t (id,a) values (944,95);
+insert into t (id,a) values (944,96);
+insert into t (id,a) values (944,97);
+insert into t (id,a) values (944,98);
+insert into t (id,a) values (944,99);
+insert into t (id,a) values (945,0);
+insert into t (id,a) values (945,1);
+insert into t (id,a) values (945,2);
+insert into t (id,a) values (945,3);
+insert into t (id,a) values (945,4);
+insert into t (id,a) values (945,5);
+insert into t (id,a) values (945,6);
+insert into t (id,a) values (945,7);
+insert into t (id,a) values (945,8);
+insert into t (id,a) values (945,9);
+insert into t (id,a) values (945,10);
+insert into t (id,a) values (945,11);
+insert into t (id,a) values (945,12);
+insert into t (id,a) values (945,13);
+insert into t (id,a) values (945,14);
+insert into t (id,a) values (945,15);
+insert into t (id,a) values (945,16);
+insert into t (id,a) values (945,17);
+insert into t (id,a) values (945,18);
+insert into t (id,a) values (945,19);
+insert into t (id,a) values (945,20);
+insert into t (id,a) values (945,21);
+insert into t (id,a) values (945,22);
+insert into t (id,a) values (945,23);
+insert into t (id,a) values (945,24);
+insert into t (id,a) values (945,25);
+insert into t (id,a) values (945,26);
+insert into t (id,a) values (945,27);
+insert into t (id,a) values (945,28);
+insert into t (id,a) values (945,29);
+insert into t (id,a) values (945,30);
+insert into t (id,a) values (945,31);
+insert into t (id,a) values (945,32);
+insert into t (id,a) values (945,33);
+insert into t (id,a) values (945,34);
+insert into t (id,a) values (945,35);
+insert into t (id,a) values (945,36);
+insert into t (id,a) values (945,37);
+insert into t (id,a) values (945,38);
+insert into t (id,a) values (945,39);
+insert into t (id,a) values (945,40);
+insert into t (id,a) values (945,41);
+insert into t (id,a) values (945,42);
+insert into t (id,a) values (945,43);
+insert into t (id,a) values (945,44);
+insert into t (id,a) values (945,45);
+insert into t (id,a) values (945,46);
+insert into t (id,a) values (945,47);
+insert into t (id,a) values (945,48);
+insert into t (id,a) values (945,49);
+insert into t (id,a) values (945,50);
+insert into t (id,a) values (945,51);
+insert into t (id,a) values (945,52);
+insert into t (id,a) values (945,53);
+insert into t (id,a) values (945,54);
+insert into t (id,a) values (945,55);
+insert into t (id,a) values (945,56);
+insert into t (id,a) values (945,57);
+insert into t (id,a) values (945,58);
+insert into t (id,a) values (945,59);
+insert into t (id,a) values (945,60);
+insert into t (id,a) values (945,61);
+insert into t (id,a) values (945,62);
+insert into t (id,a) values (945,63);
+insert into t (id,a) values (945,64);
+insert into t (id,a) values (945,65);
+insert into t (id,a) values (945,66);
+insert into t (id,a) values (945,67);
+insert into t (id,a) values (945,68);
+insert into t (id,a) values (945,69);
+insert into t (id,a) values (945,70);
+insert into t (id,a) values (945,71);
+insert into t (id,a) values (945,72);
+insert into t (id,a) values (945,73);
+insert into t (id,a) values (945,74);
+insert into t (id,a) values (945,75);
+insert into t (id,a) values (945,76);
+insert into t (id,a) values (945,77);
+insert into t (id,a) values (945,78);
+insert into t (id,a) values (945,79);
+insert into t (id,a) values (945,80);
+insert into t (id,a) values (945,81);
+insert into t (id,a) values (945,82);
+insert into t (id,a) values (945,83);
+insert into t (id,a) values (945,84);
+insert into t (id,a) values (945,85);
+insert into t (id,a) values (945,86);
+insert into t (id,a) values (945,87);
+insert into t (id,a) values (945,88);
+insert into t (id,a) values (945,89);
+insert into t (id,a) values (945,90);
+insert into t (id,a) values (945,91);
+insert into t (id,a) values (945,92);
+insert into t (id,a) values (945,93);
+insert into t (id,a) values (945,94);
+insert into t (id,a) values (945,95);
+insert into t (id,a) values (945,96);
+insert into t (id,a) values (945,97);
+insert into t (id,a) values (945,98);
+insert into t (id,a) values (945,99);
+insert into t (id,a) values (946,0);
+insert into t (id,a) values (946,1);
+insert into t (id,a) values (946,2);
+insert into t (id,a) values (946,3);
+insert into t (id,a) values (946,4);
+insert into t (id,a) values (946,5);
+insert into t (id,a) values (946,6);
+insert into t (id,a) values (946,7);
+insert into t (id,a) values (946,8);
+insert into t (id,a) values (946,9);
+insert into t (id,a) values (946,10);
+insert into t (id,a) values (946,11);
+insert into t (id,a) values (946,12);
+insert into t (id,a) values (946,13);
+insert into t (id,a) values (946,14);
+insert into t (id,a) values (946,15);
+insert into t (id,a) values (946,16);
+insert into t (id,a) values (946,17);
+insert into t (id,a) values (946,18);
+insert into t (id,a) values (946,19);
+insert into t (id,a) values (946,20);
+insert into t (id,a) values (946,21);
+insert into t (id,a) values (946,22);
+insert into t (id,a) values (946,23);
+insert into t (id,a) values (946,24);
+insert into t (id,a) values (946,25);
+insert into t (id,a) values (946,26);
+insert into t (id,a) values (946,27);
+insert into t (id,a) values (946,28);
+insert into t (id,a) values (946,29);
+insert into t (id,a) values (946,30);
+insert into t (id,a) values (946,31);
+insert into t (id,a) values (946,32);
+insert into t (id,a) values (946,33);
+insert into t (id,a) values (946,34);
+insert into t (id,a) values (946,35);
+insert into t (id,a) values (946,36);
+insert into t (id,a) values (946,37);
+insert into t (id,a) values (946,38);
+insert into t (id,a) values (946,39);
+insert into t (id,a) values (946,40);
+insert into t (id,a) values (946,41);
+insert into t (id,a) values (946,42);
+insert into t (id,a) values (946,43);
+insert into t (id,a) values (946,44);
+insert into t (id,a) values (946,45);
+insert into t (id,a) values (946,46);
+insert into t (id,a) values (946,47);
+insert into t (id,a) values (946,48);
+insert into t (id,a) values (946,49);
+insert into t (id,a) values (946,50);
+insert into t (id,a) values (946,51);
+insert into t (id,a) values (946,52);
+insert into t (id,a) values (946,53);
+insert into t (id,a) values (946,54);
+insert into t (id,a) values (946,55);
+insert into t (id,a) values (946,56);
+insert into t (id,a) values (946,57);
+insert into t (id,a) values (946,58);
+insert into t (id,a) values (946,59);
+insert into t (id,a) values (946,60);
+insert into t (id,a) values (946,61);
+insert into t (id,a) values (946,62);
+insert into t (id,a) values (946,63);
+insert into t (id,a) values (946,64);
+insert into t (id,a) values (946,65);
+insert into t (id,a) values (946,66);
+insert into t (id,a) values (946,67);
+insert into t (id,a) values (946,68);
+insert into t (id,a) values (946,69);
+insert into t (id,a) values (946,70);
+insert into t (id,a) values (946,71);
+insert into t (id,a) values (946,72);
+insert into t (id,a) values (946,73);
+insert into t (id,a) values (946,74);
+insert into t (id,a) values (946,75);
+insert into t (id,a) values (946,76);
+insert into t (id,a) values (946,77);
+insert into t (id,a) values (946,78);
+insert into t (id,a) values (946,79);
+insert into t (id,a) values (946,80);
+insert into t (id,a) values (946,81);
+insert into t (id,a) values (946,82);
+insert into t (id,a) values (946,83);
+insert into t (id,a) values (946,84);
+insert into t (id,a) values (946,85);
+insert into t (id,a) values (946,86);
+insert into t (id,a) values (946,87);
+insert into t (id,a) values (946,88);
+insert into t (id,a) values (946,89);
+insert into t (id,a) values (946,90);
+insert into t (id,a) values (946,91);
+insert into t (id,a) values (946,92);
+insert into t (id,a) values (946,93);
+insert into t (id,a) values (946,94);
+insert into t (id,a) values (946,95);
+insert into t (id,a) values (946,96);
+insert into t (id,a) values (946,97);
+insert into t (id,a) values (946,98);
+insert into t (id,a) values (946,99);
+insert into t (id,a) values (947,0);
+insert into t (id,a) values (947,1);
+insert into t (id,a) values (947,2);
+insert into t (id,a) values (947,3);
+insert into t (id,a) values (947,4);
+insert into t (id,a) values (947,5);
+insert into t (id,a) values (947,6);
+insert into t (id,a) values (947,7);
+insert into t (id,a) values (947,8);
+insert into t (id,a) values (947,9);
+insert into t (id,a) values (947,10);
+insert into t (id,a) values (947,11);
+insert into t (id,a) values (947,12);
+insert into t (id,a) values (947,13);
+insert into t (id,a) values (947,14);
+insert into t (id,a) values (947,15);
+insert into t (id,a) values (947,16);
+insert into t (id,a) values (947,17);
+insert into t (id,a) values (947,18);
+insert into t (id,a) values (947,19);
+insert into t (id,a) values (947,20);
+insert into t (id,a) values (947,21);
+insert into t (id,a) values (947,22);
+insert into t (id,a) values (947,23);
+insert into t (id,a) values (947,24);
+insert into t (id,a) values (947,25);
+insert into t (id,a) values (947,26);
+insert into t (id,a) values (947,27);
+insert into t (id,a) values (947,28);
+insert into t (id,a) values (947,29);
+insert into t (id,a) values (947,30);
+insert into t (id,a) values (947,31);
+insert into t (id,a) values (947,32);
+insert into t (id,a) values (947,33);
+insert into t (id,a) values (947,34);
+insert into t (id,a) values (947,35);
+insert into t (id,a) values (947,36);
+insert into t (id,a) values (947,37);
+insert into t (id,a) values (947,38);
+insert into t (id,a) values (947,39);
+insert into t (id,a) values (947,40);
+insert into t (id,a) values (947,41);
+insert into t (id,a) values (947,42);
+insert into t (id,a) values (947,43);
+insert into t (id,a) values (947,44);
+insert into t (id,a) values (947,45);
+insert into t (id,a) values (947,46);
+insert into t (id,a) values (947,47);
+insert into t (id,a) values (947,48);
+insert into t (id,a) values (947,49);
+insert into t (id,a) values (947,50);
+insert into t (id,a) values (947,51);
+insert into t (id,a) values (947,52);
+insert into t (id,a) values (947,53);
+insert into t (id,a) values (947,54);
+insert into t (id,a) values (947,55);
+insert into t (id,a) values (947,56);
+insert into t (id,a) values (947,57);
+insert into t (id,a) values (947,58);
+insert into t (id,a) values (947,59);
+insert into t (id,a) values (947,60);
+insert into t (id,a) values (947,61);
+insert into t (id,a) values (947,62);
+insert into t (id,a) values (947,63);
+insert into t (id,a) values (947,64);
+insert into t (id,a) values (947,65);
+insert into t (id,a) values (947,66);
+insert into t (id,a) values (947,67);
+insert into t (id,a) values (947,68);
+insert into t (id,a) values (947,69);
+insert into t (id,a) values (947,70);
+insert into t (id,a) values (947,71);
+insert into t (id,a) values (947,72);
+insert into t (id,a) values (947,73);
+insert into t (id,a) values (947,74);
+insert into t (id,a) values (947,75);
+insert into t (id,a) values (947,76);
+insert into t (id,a) values (947,77);
+insert into t (id,a) values (947,78);
+insert into t (id,a) values (947,79);
+insert into t (id,a) values (947,80);
+insert into t (id,a) values (947,81);
+insert into t (id,a) values (947,82);
+insert into t (id,a) values (947,83);
+insert into t (id,a) values (947,84);
+insert into t (id,a) values (947,85);
+insert into t (id,a) values (947,86);
+insert into t (id,a) values (947,87);
+insert into t (id,a) values (947,88);
+insert into t (id,a) values (947,89);
+insert into t (id,a) values (947,90);
+insert into t (id,a) values (947,91);
+insert into t (id,a) values (947,92);
+insert into t (id,a) values (947,93);
+insert into t (id,a) values (947,94);
+insert into t (id,a) values (947,95);
+insert into t (id,a) values (947,96);
+insert into t (id,a) values (947,97);
+insert into t (id,a) values (947,98);
+insert into t (id,a) values (947,99);
+insert into t (id,a) values (948,0);
+insert into t (id,a) values (948,1);
+insert into t (id,a) values (948,2);
+insert into t (id,a) values (948,3);
+insert into t (id,a) values (948,4);
+insert into t (id,a) values (948,5);
+insert into t (id,a) values (948,6);
+insert into t (id,a) values (948,7);
+insert into t (id,a) values (948,8);
+insert into t (id,a) values (948,9);
+insert into t (id,a) values (948,10);
+insert into t (id,a) values (948,11);
+insert into t (id,a) values (948,12);
+insert into t (id,a) values (948,13);
+insert into t (id,a) values (948,14);
+insert into t (id,a) values (948,15);
+insert into t (id,a) values (948,16);
+insert into t (id,a) values (948,17);
+insert into t (id,a) values (948,18);
+insert into t (id,a) values (948,19);
+insert into t (id,a) values (948,20);
+insert into t (id,a) values (948,21);
+insert into t (id,a) values (948,22);
+insert into t (id,a) values (948,23);
+insert into t (id,a) values (948,24);
+insert into t (id,a) values (948,25);
+insert into t (id,a) values (948,26);
+insert into t (id,a) values (948,27);
+insert into t (id,a) values (948,28);
+insert into t (id,a) values (948,29);
+insert into t (id,a) values (948,30);
+insert into t (id,a) values (948,31);
+insert into t (id,a) values (948,32);
+insert into t (id,a) values (948,33);
+insert into t (id,a) values (948,34);
+insert into t (id,a) values (948,35);
+insert into t (id,a) values (948,36);
+insert into t (id,a) values (948,37);
+insert into t (id,a) values (948,38);
+insert into t (id,a) values (948,39);
+insert into t (id,a) values (948,40);
+insert into t (id,a) values (948,41);
+insert into t (id,a) values (948,42);
+insert into t (id,a) values (948,43);
+insert into t (id,a) values (948,44);
+insert into t (id,a) values (948,45);
+insert into t (id,a) values (948,46);
+insert into t (id,a) values (948,47);
+insert into t (id,a) values (948,48);
+insert into t (id,a) values (948,49);
+insert into t (id,a) values (948,50);
+insert into t (id,a) values (948,51);
+insert into t (id,a) values (948,52);
+insert into t (id,a) values (948,53);
+insert into t (id,a) values (948,54);
+insert into t (id,a) values (948,55);
+insert into t (id,a) values (948,56);
+insert into t (id,a) values (948,57);
+insert into t (id,a) values (948,58);
+insert into t (id,a) values (948,59);
+insert into t (id,a) values (948,60);
+insert into t (id,a) values (948,61);
+insert into t (id,a) values (948,62);
+insert into t (id,a) values (948,63);
+insert into t (id,a) values (948,64);
+insert into t (id,a) values (948,65);
+insert into t (id,a) values (948,66);
+insert into t (id,a) values (948,67);
+insert into t (id,a) values (948,68);
+insert into t (id,a) values (948,69);
+insert into t (id,a) values (948,70);
+insert into t (id,a) values (948,71);
+insert into t (id,a) values (948,72);
+insert into t (id,a) values (948,73);
+insert into t (id,a) values (948,74);
+insert into t (id,a) values (948,75);
+insert into t (id,a) values (948,76);
+insert into t (id,a) values (948,77);
+insert into t (id,a) values (948,78);
+insert into t (id,a) values (948,79);
+insert into t (id,a) values (948,80);
+insert into t (id,a) values (948,81);
+insert into t (id,a) values (948,82);
+insert into t (id,a) values (948,83);
+insert into t (id,a) values (948,84);
+insert into t (id,a) values (948,85);
+insert into t (id,a) values (948,86);
+insert into t (id,a) values (948,87);
+insert into t (id,a) values (948,88);
+insert into t (id,a) values (948,89);
+insert into t (id,a) values (948,90);
+insert into t (id,a) values (948,91);
+insert into t (id,a) values (948,92);
+insert into t (id,a) values (948,93);
+insert into t (id,a) values (948,94);
+insert into t (id,a) values (948,95);
+insert into t (id,a) values (948,96);
+insert into t (id,a) values (948,97);
+insert into t (id,a) values (948,98);
+insert into t (id,a) values (948,99);
+insert into t (id,a) values (949,0);
+insert into t (id,a) values (949,1);
+insert into t (id,a) values (949,2);
+insert into t (id,a) values (949,3);
+insert into t (id,a) values (949,4);
+insert into t (id,a) values (949,5);
+insert into t (id,a) values (949,6);
+insert into t (id,a) values (949,7);
+insert into t (id,a) values (949,8);
+insert into t (id,a) values (949,9);
+insert into t (id,a) values (949,10);
+insert into t (id,a) values (949,11);
+insert into t (id,a) values (949,12);
+insert into t (id,a) values (949,13);
+insert into t (id,a) values (949,14);
+insert into t (id,a) values (949,15);
+insert into t (id,a) values (949,16);
+insert into t (id,a) values (949,17);
+insert into t (id,a) values (949,18);
+insert into t (id,a) values (949,19);
+insert into t (id,a) values (949,20);
+insert into t (id,a) values (949,21);
+insert into t (id,a) values (949,22);
+insert into t (id,a) values (949,23);
+insert into t (id,a) values (949,24);
+insert into t (id,a) values (949,25);
+insert into t (id,a) values (949,26);
+insert into t (id,a) values (949,27);
+insert into t (id,a) values (949,28);
+insert into t (id,a) values (949,29);
+insert into t (id,a) values (949,30);
+insert into t (id,a) values (949,31);
+insert into t (id,a) values (949,32);
+insert into t (id,a) values (949,33);
+insert into t (id,a) values (949,34);
+insert into t (id,a) values (949,35);
+insert into t (id,a) values (949,36);
+insert into t (id,a) values (949,37);
+insert into t (id,a) values (949,38);
+insert into t (id,a) values (949,39);
+insert into t (id,a) values (949,40);
+insert into t (id,a) values (949,41);
+insert into t (id,a) values (949,42);
+insert into t (id,a) values (949,43);
+insert into t (id,a) values (949,44);
+insert into t (id,a) values (949,45);
+insert into t (id,a) values (949,46);
+insert into t (id,a) values (949,47);
+insert into t (id,a) values (949,48);
+insert into t (id,a) values (949,49);
+insert into t (id,a) values (949,50);
+insert into t (id,a) values (949,51);
+insert into t (id,a) values (949,52);
+insert into t (id,a) values (949,53);
+insert into t (id,a) values (949,54);
+insert into t (id,a) values (949,55);
+insert into t (id,a) values (949,56);
+insert into t (id,a) values (949,57);
+insert into t (id,a) values (949,58);
+insert into t (id,a) values (949,59);
+insert into t (id,a) values (949,60);
+insert into t (id,a) values (949,61);
+insert into t (id,a) values (949,62);
+insert into t (id,a) values (949,63);
+insert into t (id,a) values (949,64);
+insert into t (id,a) values (949,65);
+insert into t (id,a) values (949,66);
+insert into t (id,a) values (949,67);
+insert into t (id,a) values (949,68);
+insert into t (id,a) values (949,69);
+insert into t (id,a) values (949,70);
+insert into t (id,a) values (949,71);
+insert into t (id,a) values (949,72);
+insert into t (id,a) values (949,73);
+insert into t (id,a) values (949,74);
+insert into t (id,a) values (949,75);
+insert into t (id,a) values (949,76);
+insert into t (id,a) values (949,77);
+insert into t (id,a) values (949,78);
+insert into t (id,a) values (949,79);
+insert into t (id,a) values (949,80);
+insert into t (id,a) values (949,81);
+insert into t (id,a) values (949,82);
+insert into t (id,a) values (949,83);
+insert into t (id,a) values (949,84);
+insert into t (id,a) values (949,85);
+insert into t (id,a) values (949,86);
+insert into t (id,a) values (949,87);
+insert into t (id,a) values (949,88);
+insert into t (id,a) values (949,89);
+insert into t (id,a) values (949,90);
+insert into t (id,a) values (949,91);
+insert into t (id,a) values (949,92);
+insert into t (id,a) values (949,93);
+insert into t (id,a) values (949,94);
+insert into t (id,a) values (949,95);
+insert into t (id,a) values (949,96);
+insert into t (id,a) values (949,97);
+insert into t (id,a) values (949,98);
+insert into t (id,a) values (949,99);
+insert into t (id,a) values (950,0);
+insert into t (id,a) values (950,1);
+insert into t (id,a) values (950,2);
+insert into t (id,a) values (950,3);
+insert into t (id,a) values (950,4);
+insert into t (id,a) values (950,5);
+insert into t (id,a) values (950,6);
+insert into t (id,a) values (950,7);
+insert into t (id,a) values (950,8);
+insert into t (id,a) values (950,9);
+insert into t (id,a) values (950,10);
+insert into t (id,a) values (950,11);
+insert into t (id,a) values (950,12);
+insert into t (id,a) values (950,13);
+insert into t (id,a) values (950,14);
+insert into t (id,a) values (950,15);
+insert into t (id,a) values (950,16);
+insert into t (id,a) values (950,17);
+insert into t (id,a) values (950,18);
+insert into t (id,a) values (950,19);
+insert into t (id,a) values (950,20);
+insert into t (id,a) values (950,21);
+insert into t (id,a) values (950,22);
+insert into t (id,a) values (950,23);
+insert into t (id,a) values (950,24);
+insert into t (id,a) values (950,25);
+insert into t (id,a) values (950,26);
+insert into t (id,a) values (950,27);
+insert into t (id,a) values (950,28);
+insert into t (id,a) values (950,29);
+insert into t (id,a) values (950,30);
+insert into t (id,a) values (950,31);
+insert into t (id,a) values (950,32);
+insert into t (id,a) values (950,33);
+insert into t (id,a) values (950,34);
+insert into t (id,a) values (950,35);
+insert into t (id,a) values (950,36);
+insert into t (id,a) values (950,37);
+insert into t (id,a) values (950,38);
+insert into t (id,a) values (950,39);
+insert into t (id,a) values (950,40);
+insert into t (id,a) values (950,41);
+insert into t (id,a) values (950,42);
+insert into t (id,a) values (950,43);
+insert into t (id,a) values (950,44);
+insert into t (id,a) values (950,45);
+insert into t (id,a) values (950,46);
+insert into t (id,a) values (950,47);
+insert into t (id,a) values (950,48);
+insert into t (id,a) values (950,49);
+insert into t (id,a) values (950,50);
+insert into t (id,a) values (950,51);
+insert into t (id,a) values (950,52);
+insert into t (id,a) values (950,53);
+insert into t (id,a) values (950,54);
+insert into t (id,a) values (950,55);
+insert into t (id,a) values (950,56);
+insert into t (id,a) values (950,57);
+insert into t (id,a) values (950,58);
+insert into t (id,a) values (950,59);
+insert into t (id,a) values (950,60);
+insert into t (id,a) values (950,61);
+insert into t (id,a) values (950,62);
+insert into t (id,a) values (950,63);
+insert into t (id,a) values (950,64);
+insert into t (id,a) values (950,65);
+insert into t (id,a) values (950,66);
+insert into t (id,a) values (950,67);
+insert into t (id,a) values (950,68);
+insert into t (id,a) values (950,69);
+insert into t (id,a) values (950,70);
+insert into t (id,a) values (950,71);
+insert into t (id,a) values (950,72);
+insert into t (id,a) values (950,73);
+insert into t (id,a) values (950,74);
+insert into t (id,a) values (950,75);
+insert into t (id,a) values (950,76);
+insert into t (id,a) values (950,77);
+insert into t (id,a) values (950,78);
+insert into t (id,a) values (950,79);
+insert into t (id,a) values (950,80);
+insert into t (id,a) values (950,81);
+insert into t (id,a) values (950,82);
+insert into t (id,a) values (950,83);
+insert into t (id,a) values (950,84);
+insert into t (id,a) values (950,85);
+insert into t (id,a) values (950,86);
+insert into t (id,a) values (950,87);
+insert into t (id,a) values (950,88);
+insert into t (id,a) values (950,89);
+insert into t (id,a) values (950,90);
+insert into t (id,a) values (950,91);
+insert into t (id,a) values (950,92);
+insert into t (id,a) values (950,93);
+insert into t (id,a) values (950,94);
+insert into t (id,a) values (950,95);
+insert into t (id,a) values (950,96);
+insert into t (id,a) values (950,97);
+insert into t (id,a) values (950,98);
+insert into t (id,a) values (950,99);
+insert into t (id,a) values (951,0);
+insert into t (id,a) values (951,1);
+insert into t (id,a) values (951,2);
+insert into t (id,a) values (951,3);
+insert into t (id,a) values (951,4);
+insert into t (id,a) values (951,5);
+insert into t (id,a) values (951,6);
+insert into t (id,a) values (951,7);
+insert into t (id,a) values (951,8);
+insert into t (id,a) values (951,9);
+insert into t (id,a) values (951,10);
+insert into t (id,a) values (951,11);
+insert into t (id,a) values (951,12);
+insert into t (id,a) values (951,13);
+insert into t (id,a) values (951,14);
+insert into t (id,a) values (951,15);
+insert into t (id,a) values (951,16);
+insert into t (id,a) values (951,17);
+insert into t (id,a) values (951,18);
+insert into t (id,a) values (951,19);
+insert into t (id,a) values (951,20);
+insert into t (id,a) values (951,21);
+insert into t (id,a) values (951,22);
+insert into t (id,a) values (951,23);
+insert into t (id,a) values (951,24);
+insert into t (id,a) values (951,25);
+insert into t (id,a) values (951,26);
+insert into t (id,a) values (951,27);
+insert into t (id,a) values (951,28);
+insert into t (id,a) values (951,29);
+insert into t (id,a) values (951,30);
+insert into t (id,a) values (951,31);
+insert into t (id,a) values (951,32);
+insert into t (id,a) values (951,33);
+insert into t (id,a) values (951,34);
+insert into t (id,a) values (951,35);
+insert into t (id,a) values (951,36);
+insert into t (id,a) values (951,37);
+insert into t (id,a) values (951,38);
+insert into t (id,a) values (951,39);
+insert into t (id,a) values (951,40);
+insert into t (id,a) values (951,41);
+insert into t (id,a) values (951,42);
+insert into t (id,a) values (951,43);
+insert into t (id,a) values (951,44);
+insert into t (id,a) values (951,45);
+insert into t (id,a) values (951,46);
+insert into t (id,a) values (951,47);
+insert into t (id,a) values (951,48);
+insert into t (id,a) values (951,49);
+insert into t (id,a) values (951,50);
+insert into t (id,a) values (951,51);
+insert into t (id,a) values (951,52);
+insert into t (id,a) values (951,53);
+insert into t (id,a) values (951,54);
+insert into t (id,a) values (951,55);
+insert into t (id,a) values (951,56);
+insert into t (id,a) values (951,57);
+insert into t (id,a) values (951,58);
+insert into t (id,a) values (951,59);
+insert into t (id,a) values (951,60);
+insert into t (id,a) values (951,61);
+insert into t (id,a) values (951,62);
+insert into t (id,a) values (951,63);
+insert into t (id,a) values (951,64);
+insert into t (id,a) values (951,65);
+insert into t (id,a) values (951,66);
+insert into t (id,a) values (951,67);
+insert into t (id,a) values (951,68);
+insert into t (id,a) values (951,69);
+insert into t (id,a) values (951,70);
+insert into t (id,a) values (951,71);
+insert into t (id,a) values (951,72);
+insert into t (id,a) values (951,73);
+insert into t (id,a) values (951,74);
+insert into t (id,a) values (951,75);
+insert into t (id,a) values (951,76);
+insert into t (id,a) values (951,77);
+insert into t (id,a) values (951,78);
+insert into t (id,a) values (951,79);
+insert into t (id,a) values (951,80);
+insert into t (id,a) values (951,81);
+insert into t (id,a) values (951,82);
+insert into t (id,a) values (951,83);
+insert into t (id,a) values (951,84);
+insert into t (id,a) values (951,85);
+insert into t (id,a) values (951,86);
+insert into t (id,a) values (951,87);
+insert into t (id,a) values (951,88);
+insert into t (id,a) values (951,89);
+insert into t (id,a) values (951,90);
+insert into t (id,a) values (951,91);
+insert into t (id,a) values (951,92);
+insert into t (id,a) values (951,93);
+insert into t (id,a) values (951,94);
+insert into t (id,a) values (951,95);
+insert into t (id,a) values (951,96);
+insert into t (id,a) values (951,97);
+insert into t (id,a) values (951,98);
+insert into t (id,a) values (951,99);
+insert into t (id,a) values (952,0);
+insert into t (id,a) values (952,1);
+insert into t (id,a) values (952,2);
+insert into t (id,a) values (952,3);
+insert into t (id,a) values (952,4);
+insert into t (id,a) values (952,5);
+insert into t (id,a) values (952,6);
+insert into t (id,a) values (952,7);
+insert into t (id,a) values (952,8);
+insert into t (id,a) values (952,9);
+insert into t (id,a) values (952,10);
+insert into t (id,a) values (952,11);
+insert into t (id,a) values (952,12);
+insert into t (id,a) values (952,13);
+insert into t (id,a) values (952,14);
+insert into t (id,a) values (952,15);
+insert into t (id,a) values (952,16);
+insert into t (id,a) values (952,17);
+insert into t (id,a) values (952,18);
+insert into t (id,a) values (952,19);
+insert into t (id,a) values (952,20);
+insert into t (id,a) values (952,21);
+insert into t (id,a) values (952,22);
+insert into t (id,a) values (952,23);
+insert into t (id,a) values (952,24);
+insert into t (id,a) values (952,25);
+insert into t (id,a) values (952,26);
+insert into t (id,a) values (952,27);
+insert into t (id,a) values (952,28);
+insert into t (id,a) values (952,29);
+insert into t (id,a) values (952,30);
+insert into t (id,a) values (952,31);
+insert into t (id,a) values (952,32);
+insert into t (id,a) values (952,33);
+insert into t (id,a) values (952,34);
+insert into t (id,a) values (952,35);
+insert into t (id,a) values (952,36);
+insert into t (id,a) values (952,37);
+insert into t (id,a) values (952,38);
+insert into t (id,a) values (952,39);
+insert into t (id,a) values (952,40);
+insert into t (id,a) values (952,41);
+insert into t (id,a) values (952,42);
+insert into t (id,a) values (952,43);
+insert into t (id,a) values (952,44);
+insert into t (id,a) values (952,45);
+insert into t (id,a) values (952,46);
+insert into t (id,a) values (952,47);
+insert into t (id,a) values (952,48);
+insert into t (id,a) values (952,49);
+insert into t (id,a) values (952,50);
+insert into t (id,a) values (952,51);
+insert into t (id,a) values (952,52);
+insert into t (id,a) values (952,53);
+insert into t (id,a) values (952,54);
+insert into t (id,a) values (952,55);
+insert into t (id,a) values (952,56);
+insert into t (id,a) values (952,57);
+insert into t (id,a) values (952,58);
+insert into t (id,a) values (952,59);
+insert into t (id,a) values (952,60);
+insert into t (id,a) values (952,61);
+insert into t (id,a) values (952,62);
+insert into t (id,a) values (952,63);
+insert into t (id,a) values (952,64);
+insert into t (id,a) values (952,65);
+insert into t (id,a) values (952,66);
+insert into t (id,a) values (952,67);
+insert into t (id,a) values (952,68);
+insert into t (id,a) values (952,69);
+insert into t (id,a) values (952,70);
+insert into t (id,a) values (952,71);
+insert into t (id,a) values (952,72);
+insert into t (id,a) values (952,73);
+insert into t (id,a) values (952,74);
+insert into t (id,a) values (952,75);
+insert into t (id,a) values (952,76);
+insert into t (id,a) values (952,77);
+insert into t (id,a) values (952,78);
+insert into t (id,a) values (952,79);
+insert into t (id,a) values (952,80);
+insert into t (id,a) values (952,81);
+insert into t (id,a) values (952,82);
+insert into t (id,a) values (952,83);
+insert into t (id,a) values (952,84);
+insert into t (id,a) values (952,85);
+insert into t (id,a) values (952,86);
+insert into t (id,a) values (952,87);
+insert into t (id,a) values (952,88);
+insert into t (id,a) values (952,89);
+insert into t (id,a) values (952,90);
+insert into t (id,a) values (952,91);
+insert into t (id,a) values (952,92);
+insert into t (id,a) values (952,93);
+insert into t (id,a) values (952,94);
+insert into t (id,a) values (952,95);
+insert into t (id,a) values (952,96);
+insert into t (id,a) values (952,97);
+insert into t (id,a) values (952,98);
+insert into t (id,a) values (952,99);
+insert into t (id,a) values (953,0);
+insert into t (id,a) values (953,1);
+insert into t (id,a) values (953,2);
+insert into t (id,a) values (953,3);
+insert into t (id,a) values (953,4);
+insert into t (id,a) values (953,5);
+insert into t (id,a) values (953,6);
+insert into t (id,a) values (953,7);
+insert into t (id,a) values (953,8);
+insert into t (id,a) values (953,9);
+insert into t (id,a) values (953,10);
+insert into t (id,a) values (953,11);
+insert into t (id,a) values (953,12);
+insert into t (id,a) values (953,13);
+insert into t (id,a) values (953,14);
+insert into t (id,a) values (953,15);
+insert into t (id,a) values (953,16);
+insert into t (id,a) values (953,17);
+insert into t (id,a) values (953,18);
+insert into t (id,a) values (953,19);
+insert into t (id,a) values (953,20);
+insert into t (id,a) values (953,21);
+insert into t (id,a) values (953,22);
+insert into t (id,a) values (953,23);
+insert into t (id,a) values (953,24);
+insert into t (id,a) values (953,25);
+insert into t (id,a) values (953,26);
+insert into t (id,a) values (953,27);
+insert into t (id,a) values (953,28);
+insert into t (id,a) values (953,29);
+insert into t (id,a) values (953,30);
+insert into t (id,a) values (953,31);
+insert into t (id,a) values (953,32);
+insert into t (id,a) values (953,33);
+insert into t (id,a) values (953,34);
+insert into t (id,a) values (953,35);
+insert into t (id,a) values (953,36);
+insert into t (id,a) values (953,37);
+insert into t (id,a) values (953,38);
+insert into t (id,a) values (953,39);
+insert into t (id,a) values (953,40);
+insert into t (id,a) values (953,41);
+insert into t (id,a) values (953,42);
+insert into t (id,a) values (953,43);
+insert into t (id,a) values (953,44);
+insert into t (id,a) values (953,45);
+insert into t (id,a) values (953,46);
+insert into t (id,a) values (953,47);
+insert into t (id,a) values (953,48);
+insert into t (id,a) values (953,49);
+insert into t (id,a) values (953,50);
+insert into t (id,a) values (953,51);
+insert into t (id,a) values (953,52);
+insert into t (id,a) values (953,53);
+insert into t (id,a) values (953,54);
+insert into t (id,a) values (953,55);
+insert into t (id,a) values (953,56);
+insert into t (id,a) values (953,57);
+insert into t (id,a) values (953,58);
+insert into t (id,a) values (953,59);
+insert into t (id,a) values (953,60);
+insert into t (id,a) values (953,61);
+insert into t (id,a) values (953,62);
+insert into t (id,a) values (953,63);
+insert into t (id,a) values (953,64);
+insert into t (id,a) values (953,65);
+insert into t (id,a) values (953,66);
+insert into t (id,a) values (953,67);
+insert into t (id,a) values (953,68);
+insert into t (id,a) values (953,69);
+insert into t (id,a) values (953,70);
+insert into t (id,a) values (953,71);
+insert into t (id,a) values (953,72);
+insert into t (id,a) values (953,73);
+insert into t (id,a) values (953,74);
+insert into t (id,a) values (953,75);
+insert into t (id,a) values (953,76);
+insert into t (id,a) values (953,77);
+insert into t (id,a) values (953,78);
+insert into t (id,a) values (953,79);
+insert into t (id,a) values (953,80);
+insert into t (id,a) values (953,81);
+insert into t (id,a) values (953,82);
+insert into t (id,a) values (953,83);
+insert into t (id,a) values (953,84);
+insert into t (id,a) values (953,85);
+insert into t (id,a) values (953,86);
+insert into t (id,a) values (953,87);
+insert into t (id,a) values (953,88);
+insert into t (id,a) values (953,89);
+insert into t (id,a) values (953,90);
+insert into t (id,a) values (953,91);
+insert into t (id,a) values (953,92);
+insert into t (id,a) values (953,93);
+insert into t (id,a) values (953,94);
+insert into t (id,a) values (953,95);
+insert into t (id,a) values (953,96);
+insert into t (id,a) values (953,97);
+insert into t (id,a) values (953,98);
+insert into t (id,a) values (953,99);
+insert into t (id,a) values (954,0);
+insert into t (id,a) values (954,1);
+insert into t (id,a) values (954,2);
+insert into t (id,a) values (954,3);
+insert into t (id,a) values (954,4);
+insert into t (id,a) values (954,5);
+insert into t (id,a) values (954,6);
+insert into t (id,a) values (954,7);
+insert into t (id,a) values (954,8);
+insert into t (id,a) values (954,9);
+insert into t (id,a) values (954,10);
+insert into t (id,a) values (954,11);
+insert into t (id,a) values (954,12);
+insert into t (id,a) values (954,13);
+insert into t (id,a) values (954,14);
+insert into t (id,a) values (954,15);
+insert into t (id,a) values (954,16);
+insert into t (id,a) values (954,17);
+insert into t (id,a) values (954,18);
+insert into t (id,a) values (954,19);
+insert into t (id,a) values (954,20);
+insert into t (id,a) values (954,21);
+insert into t (id,a) values (954,22);
+insert into t (id,a) values (954,23);
+insert into t (id,a) values (954,24);
+insert into t (id,a) values (954,25);
+insert into t (id,a) values (954,26);
+insert into t (id,a) values (954,27);
+insert into t (id,a) values (954,28);
+insert into t (id,a) values (954,29);
+insert into t (id,a) values (954,30);
+insert into t (id,a) values (954,31);
+insert into t (id,a) values (954,32);
+insert into t (id,a) values (954,33);
+insert into t (id,a) values (954,34);
+insert into t (id,a) values (954,35);
+insert into t (id,a) values (954,36);
+insert into t (id,a) values (954,37);
+insert into t (id,a) values (954,38);
+insert into t (id,a) values (954,39);
+insert into t (id,a) values (954,40);
+insert into t (id,a) values (954,41);
+insert into t (id,a) values (954,42);
+insert into t (id,a) values (954,43);
+insert into t (id,a) values (954,44);
+insert into t (id,a) values (954,45);
+insert into t (id,a) values (954,46);
+insert into t (id,a) values (954,47);
+insert into t (id,a) values (954,48);
+insert into t (id,a) values (954,49);
+insert into t (id,a) values (954,50);
+insert into t (id,a) values (954,51);
+insert into t (id,a) values (954,52);
+insert into t (id,a) values (954,53);
+insert into t (id,a) values (954,54);
+insert into t (id,a) values (954,55);
+insert into t (id,a) values (954,56);
+insert into t (id,a) values (954,57);
+insert into t (id,a) values (954,58);
+insert into t (id,a) values (954,59);
+insert into t (id,a) values (954,60);
+insert into t (id,a) values (954,61);
+insert into t (id,a) values (954,62);
+insert into t (id,a) values (954,63);
+insert into t (id,a) values (954,64);
+insert into t (id,a) values (954,65);
+insert into t (id,a) values (954,66);
+insert into t (id,a) values (954,67);
+insert into t (id,a) values (954,68);
+insert into t (id,a) values (954,69);
+insert into t (id,a) values (954,70);
+insert into t (id,a) values (954,71);
+insert into t (id,a) values (954,72);
+insert into t (id,a) values (954,73);
+insert into t (id,a) values (954,74);
+insert into t (id,a) values (954,75);
+insert into t (id,a) values (954,76);
+insert into t (id,a) values (954,77);
+insert into t (id,a) values (954,78);
+insert into t (id,a) values (954,79);
+insert into t (id,a) values (954,80);
+insert into t (id,a) values (954,81);
+insert into t (id,a) values (954,82);
+insert into t (id,a) values (954,83);
+insert into t (id,a) values (954,84);
+insert into t (id,a) values (954,85);
+insert into t (id,a) values (954,86);
+insert into t (id,a) values (954,87);
+insert into t (id,a) values (954,88);
+insert into t (id,a) values (954,89);
+insert into t (id,a) values (954,90);
+insert into t (id,a) values (954,91);
+insert into t (id,a) values (954,92);
+insert into t (id,a) values (954,93);
+insert into t (id,a) values (954,94);
+insert into t (id,a) values (954,95);
+insert into t (id,a) values (954,96);
+insert into t (id,a) values (954,97);
+insert into t (id,a) values (954,98);
+insert into t (id,a) values (954,99);
+insert into t (id,a) values (955,0);
+insert into t (id,a) values (955,1);
+insert into t (id,a) values (955,2);
+insert into t (id,a) values (955,3);
+insert into t (id,a) values (955,4);
+insert into t (id,a) values (955,5);
+insert into t (id,a) values (955,6);
+insert into t (id,a) values (955,7);
+insert into t (id,a) values (955,8);
+insert into t (id,a) values (955,9);
+insert into t (id,a) values (955,10);
+insert into t (id,a) values (955,11);
+insert into t (id,a) values (955,12);
+insert into t (id,a) values (955,13);
+insert into t (id,a) values (955,14);
+insert into t (id,a) values (955,15);
+insert into t (id,a) values (955,16);
+insert into t (id,a) values (955,17);
+insert into t (id,a) values (955,18);
+insert into t (id,a) values (955,19);
+insert into t (id,a) values (955,20);
+insert into t (id,a) values (955,21);
+insert into t (id,a) values (955,22);
+insert into t (id,a) values (955,23);
+insert into t (id,a) values (955,24);
+insert into t (id,a) values (955,25);
+insert into t (id,a) values (955,26);
+insert into t (id,a) values (955,27);
+insert into t (id,a) values (955,28);
+insert into t (id,a) values (955,29);
+insert into t (id,a) values (955,30);
+insert into t (id,a) values (955,31);
+insert into t (id,a) values (955,32);
+insert into t (id,a) values (955,33);
+insert into t (id,a) values (955,34);
+insert into t (id,a) values (955,35);
+insert into t (id,a) values (955,36);
+insert into t (id,a) values (955,37);
+insert into t (id,a) values (955,38);
+insert into t (id,a) values (955,39);
+insert into t (id,a) values (955,40);
+insert into t (id,a) values (955,41);
+insert into t (id,a) values (955,42);
+insert into t (id,a) values (955,43);
+insert into t (id,a) values (955,44);
+insert into t (id,a) values (955,45);
+insert into t (id,a) values (955,46);
+insert into t (id,a) values (955,47);
+insert into t (id,a) values (955,48);
+insert into t (id,a) values (955,49);
+insert into t (id,a) values (955,50);
+insert into t (id,a) values (955,51);
+insert into t (id,a) values (955,52);
+insert into t (id,a) values (955,53);
+insert into t (id,a) values (955,54);
+insert into t (id,a) values (955,55);
+insert into t (id,a) values (955,56);
+insert into t (id,a) values (955,57);
+insert into t (id,a) values (955,58);
+insert into t (id,a) values (955,59);
+insert into t (id,a) values (955,60);
+insert into t (id,a) values (955,61);
+insert into t (id,a) values (955,62);
+insert into t (id,a) values (955,63);
+insert into t (id,a) values (955,64);
+insert into t (id,a) values (955,65);
+insert into t (id,a) values (955,66);
+insert into t (id,a) values (955,67);
+insert into t (id,a) values (955,68);
+insert into t (id,a) values (955,69);
+insert into t (id,a) values (955,70);
+insert into t (id,a) values (955,71);
+insert into t (id,a) values (955,72);
+insert into t (id,a) values (955,73);
+insert into t (id,a) values (955,74);
+insert into t (id,a) values (955,75);
+insert into t (id,a) values (955,76);
+insert into t (id,a) values (955,77);
+insert into t (id,a) values (955,78);
+insert into t (id,a) values (955,79);
+insert into t (id,a) values (955,80);
+insert into t (id,a) values (955,81);
+insert into t (id,a) values (955,82);
+insert into t (id,a) values (955,83);
+insert into t (id,a) values (955,84);
+insert into t (id,a) values (955,85);
+insert into t (id,a) values (955,86);
+insert into t (id,a) values (955,87);
+insert into t (id,a) values (955,88);
+insert into t (id,a) values (955,89);
+insert into t (id,a) values (955,90);
+insert into t (id,a) values (955,91);
+insert into t (id,a) values (955,92);
+insert into t (id,a) values (955,93);
+insert into t (id,a) values (955,94);
+insert into t (id,a) values (955,95);
+insert into t (id,a) values (955,96);
+insert into t (id,a) values (955,97);
+insert into t (id,a) values (955,98);
+insert into t (id,a) values (955,99);
+insert into t (id,a) values (956,0);
+insert into t (id,a) values (956,1);
+insert into t (id,a) values (956,2);
+insert into t (id,a) values (956,3);
+insert into t (id,a) values (956,4);
+insert into t (id,a) values (956,5);
+insert into t (id,a) values (956,6);
+insert into t (id,a) values (956,7);
+insert into t (id,a) values (956,8);
+insert into t (id,a) values (956,9);
+insert into t (id,a) values (956,10);
+insert into t (id,a) values (956,11);
+insert into t (id,a) values (956,12);
+insert into t (id,a) values (956,13);
+insert into t (id,a) values (956,14);
+insert into t (id,a) values (956,15);
+insert into t (id,a) values (956,16);
+insert into t (id,a) values (956,17);
+insert into t (id,a) values (956,18);
+insert into t (id,a) values (956,19);
+insert into t (id,a) values (956,20);
+insert into t (id,a) values (956,21);
+insert into t (id,a) values (956,22);
+insert into t (id,a) values (956,23);
+insert into t (id,a) values (956,24);
+insert into t (id,a) values (956,25);
+insert into t (id,a) values (956,26);
+insert into t (id,a) values (956,27);
+insert into t (id,a) values (956,28);
+insert into t (id,a) values (956,29);
+insert into t (id,a) values (956,30);
+insert into t (id,a) values (956,31);
+insert into t (id,a) values (956,32);
+insert into t (id,a) values (956,33);
+insert into t (id,a) values (956,34);
+insert into t (id,a) values (956,35);
+insert into t (id,a) values (956,36);
+insert into t (id,a) values (956,37);
+insert into t (id,a) values (956,38);
+insert into t (id,a) values (956,39);
+insert into t (id,a) values (956,40);
+insert into t (id,a) values (956,41);
+insert into t (id,a) values (956,42);
+insert into t (id,a) values (956,43);
+insert into t (id,a) values (956,44);
+insert into t (id,a) values (956,45);
+insert into t (id,a) values (956,46);
+insert into t (id,a) values (956,47);
+insert into t (id,a) values (956,48);
+insert into t (id,a) values (956,49);
+insert into t (id,a) values (956,50);
+insert into t (id,a) values (956,51);
+insert into t (id,a) values (956,52);
+insert into t (id,a) values (956,53);
+insert into t (id,a) values (956,54);
+insert into t (id,a) values (956,55);
+insert into t (id,a) values (956,56);
+insert into t (id,a) values (956,57);
+insert into t (id,a) values (956,58);
+insert into t (id,a) values (956,59);
+insert into t (id,a) values (956,60);
+insert into t (id,a) values (956,61);
+insert into t (id,a) values (956,62);
+insert into t (id,a) values (956,63);
+insert into t (id,a) values (956,64);
+insert into t (id,a) values (956,65);
+insert into t (id,a) values (956,66);
+insert into t (id,a) values (956,67);
+insert into t (id,a) values (956,68);
+insert into t (id,a) values (956,69);
+insert into t (id,a) values (956,70);
+insert into t (id,a) values (956,71);
+insert into t (id,a) values (956,72);
+insert into t (id,a) values (956,73);
+insert into t (id,a) values (956,74);
+insert into t (id,a) values (956,75);
+insert into t (id,a) values (956,76);
+insert into t (id,a) values (956,77);
+insert into t (id,a) values (956,78);
+insert into t (id,a) values (956,79);
+insert into t (id,a) values (956,80);
+insert into t (id,a) values (956,81);
+insert into t (id,a) values (956,82);
+insert into t (id,a) values (956,83);
+insert into t (id,a) values (956,84);
+insert into t (id,a) values (956,85);
+insert into t (id,a) values (956,86);
+insert into t (id,a) values (956,87);
+insert into t (id,a) values (956,88);
+insert into t (id,a) values (956,89);
+insert into t (id,a) values (956,90);
+insert into t (id,a) values (956,91);
+insert into t (id,a) values (956,92);
+insert into t (id,a) values (956,93);
+insert into t (id,a) values (956,94);
+insert into t (id,a) values (956,95);
+insert into t (id,a) values (956,96);
+insert into t (id,a) values (956,97);
+insert into t (id,a) values (956,98);
+insert into t (id,a) values (956,99);
+insert into t (id,a) values (957,0);
+insert into t (id,a) values (957,1);
+insert into t (id,a) values (957,2);
+insert into t (id,a) values (957,3);
+insert into t (id,a) values (957,4);
+insert into t (id,a) values (957,5);
+insert into t (id,a) values (957,6);
+insert into t (id,a) values (957,7);
+insert into t (id,a) values (957,8);
+insert into t (id,a) values (957,9);
+insert into t (id,a) values (957,10);
+insert into t (id,a) values (957,11);
+insert into t (id,a) values (957,12);
+insert into t (id,a) values (957,13);
+insert into t (id,a) values (957,14);
+insert into t (id,a) values (957,15);
+insert into t (id,a) values (957,16);
+insert into t (id,a) values (957,17);
+insert into t (id,a) values (957,18);
+insert into t (id,a) values (957,19);
+insert into t (id,a) values (957,20);
+insert into t (id,a) values (957,21);
+insert into t (id,a) values (957,22);
+insert into t (id,a) values (957,23);
+insert into t (id,a) values (957,24);
+insert into t (id,a) values (957,25);
+insert into t (id,a) values (957,26);
+insert into t (id,a) values (957,27);
+insert into t (id,a) values (957,28);
+insert into t (id,a) values (957,29);
+insert into t (id,a) values (957,30);
+insert into t (id,a) values (957,31);
+insert into t (id,a) values (957,32);
+insert into t (id,a) values (957,33);
+insert into t (id,a) values (957,34);
+insert into t (id,a) values (957,35);
+insert into t (id,a) values (957,36);
+insert into t (id,a) values (957,37);
+insert into t (id,a) values (957,38);
+insert into t (id,a) values (957,39);
+insert into t (id,a) values (957,40);
+insert into t (id,a) values (957,41);
+insert into t (id,a) values (957,42);
+insert into t (id,a) values (957,43);
+insert into t (id,a) values (957,44);
+insert into t (id,a) values (957,45);
+insert into t (id,a) values (957,46);
+insert into t (id,a) values (957,47);
+insert into t (id,a) values (957,48);
+insert into t (id,a) values (957,49);
+insert into t (id,a) values (957,50);
+insert into t (id,a) values (957,51);
+insert into t (id,a) values (957,52);
+insert into t (id,a) values (957,53);
+insert into t (id,a) values (957,54);
+insert into t (id,a) values (957,55);
+insert into t (id,a) values (957,56);
+insert into t (id,a) values (957,57);
+insert into t (id,a) values (957,58);
+insert into t (id,a) values (957,59);
+insert into t (id,a) values (957,60);
+insert into t (id,a) values (957,61);
+insert into t (id,a) values (957,62);
+insert into t (id,a) values (957,63);
+insert into t (id,a) values (957,64);
+insert into t (id,a) values (957,65);
+insert into t (id,a) values (957,66);
+insert into t (id,a) values (957,67);
+insert into t (id,a) values (957,68);
+insert into t (id,a) values (957,69);
+insert into t (id,a) values (957,70);
+insert into t (id,a) values (957,71);
+insert into t (id,a) values (957,72);
+insert into t (id,a) values (957,73);
+insert into t (id,a) values (957,74);
+insert into t (id,a) values (957,75);
+insert into t (id,a) values (957,76);
+insert into t (id,a) values (957,77);
+insert into t (id,a) values (957,78);
+insert into t (id,a) values (957,79);
+insert into t (id,a) values (957,80);
+insert into t (id,a) values (957,81);
+insert into t (id,a) values (957,82);
+insert into t (id,a) values (957,83);
+insert into t (id,a) values (957,84);
+insert into t (id,a) values (957,85);
+insert into t (id,a) values (957,86);
+insert into t (id,a) values (957,87);
+insert into t (id,a) values (957,88);
+insert into t (id,a) values (957,89);
+insert into t (id,a) values (957,90);
+insert into t (id,a) values (957,91);
+insert into t (id,a) values (957,92);
+insert into t (id,a) values (957,93);
+insert into t (id,a) values (957,94);
+insert into t (id,a) values (957,95);
+insert into t (id,a) values (957,96);
+insert into t (id,a) values (957,97);
+insert into t (id,a) values (957,98);
+insert into t (id,a) values (957,99);
+insert into t (id,a) values (958,0);
+insert into t (id,a) values (958,1);
+insert into t (id,a) values (958,2);
+insert into t (id,a) values (958,3);
+insert into t (id,a) values (958,4);
+insert into t (id,a) values (958,5);
+insert into t (id,a) values (958,6);
+insert into t (id,a) values (958,7);
+insert into t (id,a) values (958,8);
+insert into t (id,a) values (958,9);
+insert into t (id,a) values (958,10);
+insert into t (id,a) values (958,11);
+insert into t (id,a) values (958,12);
+insert into t (id,a) values (958,13);
+insert into t (id,a) values (958,14);
+insert into t (id,a) values (958,15);
+insert into t (id,a) values (958,16);
+insert into t (id,a) values (958,17);
+insert into t (id,a) values (958,18);
+insert into t (id,a) values (958,19);
+insert into t (id,a) values (958,20);
+insert into t (id,a) values (958,21);
+insert into t (id,a) values (958,22);
+insert into t (id,a) values (958,23);
+insert into t (id,a) values (958,24);
+insert into t (id,a) values (958,25);
+insert into t (id,a) values (958,26);
+insert into t (id,a) values (958,27);
+insert into t (id,a) values (958,28);
+insert into t (id,a) values (958,29);
+insert into t (id,a) values (958,30);
+insert into t (id,a) values (958,31);
+insert into t (id,a) values (958,32);
+insert into t (id,a) values (958,33);
+insert into t (id,a) values (958,34);
+insert into t (id,a) values (958,35);
+insert into t (id,a) values (958,36);
+insert into t (id,a) values (958,37);
+insert into t (id,a) values (958,38);
+insert into t (id,a) values (958,39);
+insert into t (id,a) values (958,40);
+insert into t (id,a) values (958,41);
+insert into t (id,a) values (958,42);
+insert into t (id,a) values (958,43);
+insert into t (id,a) values (958,44);
+insert into t (id,a) values (958,45);
+insert into t (id,a) values (958,46);
+insert into t (id,a) values (958,47);
+insert into t (id,a) values (958,48);
+insert into t (id,a) values (958,49);
+insert into t (id,a) values (958,50);
+insert into t (id,a) values (958,51);
+insert into t (id,a) values (958,52);
+insert into t (id,a) values (958,53);
+insert into t (id,a) values (958,54);
+insert into t (id,a) values (958,55);
+insert into t (id,a) values (958,56);
+insert into t (id,a) values (958,57);
+insert into t (id,a) values (958,58);
+insert into t (id,a) values (958,59);
+insert into t (id,a) values (958,60);
+insert into t (id,a) values (958,61);
+insert into t (id,a) values (958,62);
+insert into t (id,a) values (958,63);
+insert into t (id,a) values (958,64);
+insert into t (id,a) values (958,65);
+insert into t (id,a) values (958,66);
+insert into t (id,a) values (958,67);
+insert into t (id,a) values (958,68);
+insert into t (id,a) values (958,69);
+insert into t (id,a) values (958,70);
+insert into t (id,a) values (958,71);
+insert into t (id,a) values (958,72);
+insert into t (id,a) values (958,73);
+insert into t (id,a) values (958,74);
+insert into t (id,a) values (958,75);
+insert into t (id,a) values (958,76);
+insert into t (id,a) values (958,77);
+insert into t (id,a) values (958,78);
+insert into t (id,a) values (958,79);
+insert into t (id,a) values (958,80);
+insert into t (id,a) values (958,81);
+insert into t (id,a) values (958,82);
+insert into t (id,a) values (958,83);
+insert into t (id,a) values (958,84);
+insert into t (id,a) values (958,85);
+insert into t (id,a) values (958,86);
+insert into t (id,a) values (958,87);
+insert into t (id,a) values (958,88);
+insert into t (id,a) values (958,89);
+insert into t (id,a) values (958,90);
+insert into t (id,a) values (958,91);
+insert into t (id,a) values (958,92);
+insert into t (id,a) values (958,93);
+insert into t (id,a) values (958,94);
+insert into t (id,a) values (958,95);
+insert into t (id,a) values (958,96);
+insert into t (id,a) values (958,97);
+insert into t (id,a) values (958,98);
+insert into t (id,a) values (958,99);
+insert into t (id,a) values (959,0);
+insert into t (id,a) values (959,1);
+insert into t (id,a) values (959,2);
+insert into t (id,a) values (959,3);
+insert into t (id,a) values (959,4);
+insert into t (id,a) values (959,5);
+insert into t (id,a) values (959,6);
+insert into t (id,a) values (959,7);
+insert into t (id,a) values (959,8);
+insert into t (id,a) values (959,9);
+insert into t (id,a) values (959,10);
+insert into t (id,a) values (959,11);
+insert into t (id,a) values (959,12);
+insert into t (id,a) values (959,13);
+insert into t (id,a) values (959,14);
+insert into t (id,a) values (959,15);
+insert into t (id,a) values (959,16);
+insert into t (id,a) values (959,17);
+insert into t (id,a) values (959,18);
+insert into t (id,a) values (959,19);
+insert into t (id,a) values (959,20);
+insert into t (id,a) values (959,21);
+insert into t (id,a) values (959,22);
+insert into t (id,a) values (959,23);
+insert into t (id,a) values (959,24);
+insert into t (id,a) values (959,25);
+insert into t (id,a) values (959,26);
+insert into t (id,a) values (959,27);
+insert into t (id,a) values (959,28);
+insert into t (id,a) values (959,29);
+insert into t (id,a) values (959,30);
+insert into t (id,a) values (959,31);
+insert into t (id,a) values (959,32);
+insert into t (id,a) values (959,33);
+insert into t (id,a) values (959,34);
+insert into t (id,a) values (959,35);
+insert into t (id,a) values (959,36);
+insert into t (id,a) values (959,37);
+insert into t (id,a) values (959,38);
+insert into t (id,a) values (959,39);
+insert into t (id,a) values (959,40);
+insert into t (id,a) values (959,41);
+insert into t (id,a) values (959,42);
+insert into t (id,a) values (959,43);
+insert into t (id,a) values (959,44);
+insert into t (id,a) values (959,45);
+insert into t (id,a) values (959,46);
+insert into t (id,a) values (959,47);
+insert into t (id,a) values (959,48);
+insert into t (id,a) values (959,49);
+insert into t (id,a) values (959,50);
+insert into t (id,a) values (959,51);
+insert into t (id,a) values (959,52);
+insert into t (id,a) values (959,53);
+insert into t (id,a) values (959,54);
+insert into t (id,a) values (959,55);
+insert into t (id,a) values (959,56);
+insert into t (id,a) values (959,57);
+insert into t (id,a) values (959,58);
+insert into t (id,a) values (959,59);
+insert into t (id,a) values (959,60);
+insert into t (id,a) values (959,61);
+insert into t (id,a) values (959,62);
+insert into t (id,a) values (959,63);
+insert into t (id,a) values (959,64);
+insert into t (id,a) values (959,65);
+insert into t (id,a) values (959,66);
+insert into t (id,a) values (959,67);
+insert into t (id,a) values (959,68);
+insert into t (id,a) values (959,69);
+insert into t (id,a) values (959,70);
+insert into t (id,a) values (959,71);
+insert into t (id,a) values (959,72);
+insert into t (id,a) values (959,73);
+insert into t (id,a) values (959,74);
+insert into t (id,a) values (959,75);
+insert into t (id,a) values (959,76);
+insert into t (id,a) values (959,77);
+insert into t (id,a) values (959,78);
+insert into t (id,a) values (959,79);
+insert into t (id,a) values (959,80);
+insert into t (id,a) values (959,81);
+insert into t (id,a) values (959,82);
+insert into t (id,a) values (959,83);
+insert into t (id,a) values (959,84);
+insert into t (id,a) values (959,85);
+insert into t (id,a) values (959,86);
+insert into t (id,a) values (959,87);
+insert into t (id,a) values (959,88);
+insert into t (id,a) values (959,89);
+insert into t (id,a) values (959,90);
+insert into t (id,a) values (959,91);
+insert into t (id,a) values (959,92);
+insert into t (id,a) values (959,93);
+insert into t (id,a) values (959,94);
+insert into t (id,a) values (959,95);
+insert into t (id,a) values (959,96);
+insert into t (id,a) values (959,97);
+insert into t (id,a) values (959,98);
+insert into t (id,a) values (959,99);
+insert into t (id,a) values (960,0);
+insert into t (id,a) values (960,1);
+insert into t (id,a) values (960,2);
+insert into t (id,a) values (960,3);
+insert into t (id,a) values (960,4);
+insert into t (id,a) values (960,5);
+insert into t (id,a) values (960,6);
+insert into t (id,a) values (960,7);
+insert into t (id,a) values (960,8);
+insert into t (id,a) values (960,9);
+insert into t (id,a) values (960,10);
+insert into t (id,a) values (960,11);
+insert into t (id,a) values (960,12);
+insert into t (id,a) values (960,13);
+insert into t (id,a) values (960,14);
+insert into t (id,a) values (960,15);
+insert into t (id,a) values (960,16);
+insert into t (id,a) values (960,17);
+insert into t (id,a) values (960,18);
+insert into t (id,a) values (960,19);
+insert into t (id,a) values (960,20);
+insert into t (id,a) values (960,21);
+insert into t (id,a) values (960,22);
+insert into t (id,a) values (960,23);
+insert into t (id,a) values (960,24);
+insert into t (id,a) values (960,25);
+insert into t (id,a) values (960,26);
+insert into t (id,a) values (960,27);
+insert into t (id,a) values (960,28);
+insert into t (id,a) values (960,29);
+insert into t (id,a) values (960,30);
+insert into t (id,a) values (960,31);
+insert into t (id,a) values (960,32);
+insert into t (id,a) values (960,33);
+insert into t (id,a) values (960,34);
+insert into t (id,a) values (960,35);
+insert into t (id,a) values (960,36);
+insert into t (id,a) values (960,37);
+insert into t (id,a) values (960,38);
+insert into t (id,a) values (960,39);
+insert into t (id,a) values (960,40);
+insert into t (id,a) values (960,41);
+insert into t (id,a) values (960,42);
+insert into t (id,a) values (960,43);
+insert into t (id,a) values (960,44);
+insert into t (id,a) values (960,45);
+insert into t (id,a) values (960,46);
+insert into t (id,a) values (960,47);
+insert into t (id,a) values (960,48);
+insert into t (id,a) values (960,49);
+insert into t (id,a) values (960,50);
+insert into t (id,a) values (960,51);
+insert into t (id,a) values (960,52);
+insert into t (id,a) values (960,53);
+insert into t (id,a) values (960,54);
+insert into t (id,a) values (960,55);
+insert into t (id,a) values (960,56);
+insert into t (id,a) values (960,57);
+insert into t (id,a) values (960,58);
+insert into t (id,a) values (960,59);
+insert into t (id,a) values (960,60);
+insert into t (id,a) values (960,61);
+insert into t (id,a) values (960,62);
+insert into t (id,a) values (960,63);
+insert into t (id,a) values (960,64);
+insert into t (id,a) values (960,65);
+insert into t (id,a) values (960,66);
+insert into t (id,a) values (960,67);
+insert into t (id,a) values (960,68);
+insert into t (id,a) values (960,69);
+insert into t (id,a) values (960,70);
+insert into t (id,a) values (960,71);
+insert into t (id,a) values (960,72);
+insert into t (id,a) values (960,73);
+insert into t (id,a) values (960,74);
+insert into t (id,a) values (960,75);
+insert into t (id,a) values (960,76);
+insert into t (id,a) values (960,77);
+insert into t (id,a) values (960,78);
+insert into t (id,a) values (960,79);
+insert into t (id,a) values (960,80);
+insert into t (id,a) values (960,81);
+insert into t (id,a) values (960,82);
+insert into t (id,a) values (960,83);
+insert into t (id,a) values (960,84);
+insert into t (id,a) values (960,85);
+insert into t (id,a) values (960,86);
+insert into t (id,a) values (960,87);
+insert into t (id,a) values (960,88);
+insert into t (id,a) values (960,89);
+insert into t (id,a) values (960,90);
+insert into t (id,a) values (960,91);
+insert into t (id,a) values (960,92);
+insert into t (id,a) values (960,93);
+insert into t (id,a) values (960,94);
+insert into t (id,a) values (960,95);
+insert into t (id,a) values (960,96);
+insert into t (id,a) values (960,97);
+insert into t (id,a) values (960,98);
+insert into t (id,a) values (960,99);
+insert into t (id,a) values (961,0);
+insert into t (id,a) values (961,1);
+insert into t (id,a) values (961,2);
+insert into t (id,a) values (961,3);
+insert into t (id,a) values (961,4);
+insert into t (id,a) values (961,5);
+insert into t (id,a) values (961,6);
+insert into t (id,a) values (961,7);
+insert into t (id,a) values (961,8);
+insert into t (id,a) values (961,9);
+insert into t (id,a) values (961,10);
+insert into t (id,a) values (961,11);
+insert into t (id,a) values (961,12);
+insert into t (id,a) values (961,13);
+insert into t (id,a) values (961,14);
+insert into t (id,a) values (961,15);
+insert into t (id,a) values (961,16);
+insert into t (id,a) values (961,17);
+insert into t (id,a) values (961,18);
+insert into t (id,a) values (961,19);
+insert into t (id,a) values (961,20);
+insert into t (id,a) values (961,21);
+insert into t (id,a) values (961,22);
+insert into t (id,a) values (961,23);
+insert into t (id,a) values (961,24);
+insert into t (id,a) values (961,25);
+insert into t (id,a) values (961,26);
+insert into t (id,a) values (961,27);
+insert into t (id,a) values (961,28);
+insert into t (id,a) values (961,29);
+insert into t (id,a) values (961,30);
+insert into t (id,a) values (961,31);
+insert into t (id,a) values (961,32);
+insert into t (id,a) values (961,33);
+insert into t (id,a) values (961,34);
+insert into t (id,a) values (961,35);
+insert into t (id,a) values (961,36);
+insert into t (id,a) values (961,37);
+insert into t (id,a) values (961,38);
+insert into t (id,a) values (961,39);
+insert into t (id,a) values (961,40);
+insert into t (id,a) values (961,41);
+insert into t (id,a) values (961,42);
+insert into t (id,a) values (961,43);
+insert into t (id,a) values (961,44);
+insert into t (id,a) values (961,45);
+insert into t (id,a) values (961,46);
+insert into t (id,a) values (961,47);
+insert into t (id,a) values (961,48);
+insert into t (id,a) values (961,49);
+insert into t (id,a) values (961,50);
+insert into t (id,a) values (961,51);
+insert into t (id,a) values (961,52);
+insert into t (id,a) values (961,53);
+insert into t (id,a) values (961,54);
+insert into t (id,a) values (961,55);
+insert into t (id,a) values (961,56);
+insert into t (id,a) values (961,57);
+insert into t (id,a) values (961,58);
+insert into t (id,a) values (961,59);
+insert into t (id,a) values (961,60);
+insert into t (id,a) values (961,61);
+insert into t (id,a) values (961,62);
+insert into t (id,a) values (961,63);
+insert into t (id,a) values (961,64);
+insert into t (id,a) values (961,65);
+insert into t (id,a) values (961,66);
+insert into t (id,a) values (961,67);
+insert into t (id,a) values (961,68);
+insert into t (id,a) values (961,69);
+insert into t (id,a) values (961,70);
+insert into t (id,a) values (961,71);
+insert into t (id,a) values (961,72);
+insert into t (id,a) values (961,73);
+insert into t (id,a) values (961,74);
+insert into t (id,a) values (961,75);
+insert into t (id,a) values (961,76);
+insert into t (id,a) values (961,77);
+insert into t (id,a) values (961,78);
+insert into t (id,a) values (961,79);
+insert into t (id,a) values (961,80);
+insert into t (id,a) values (961,81);
+insert into t (id,a) values (961,82);
+insert into t (id,a) values (961,83);
+insert into t (id,a) values (961,84);
+insert into t (id,a) values (961,85);
+insert into t (id,a) values (961,86);
+insert into t (id,a) values (961,87);
+insert into t (id,a) values (961,88);
+insert into t (id,a) values (961,89);
+insert into t (id,a) values (961,90);
+insert into t (id,a) values (961,91);
+insert into t (id,a) values (961,92);
+insert into t (id,a) values (961,93);
+insert into t (id,a) values (961,94);
+insert into t (id,a) values (961,95);
+insert into t (id,a) values (961,96);
+insert into t (id,a) values (961,97);
+insert into t (id,a) values (961,98);
+insert into t (id,a) values (961,99);
+insert into t (id,a) values (962,0);
+insert into t (id,a) values (962,1);
+insert into t (id,a) values (962,2);
+insert into t (id,a) values (962,3);
+insert into t (id,a) values (962,4);
+insert into t (id,a) values (962,5);
+insert into t (id,a) values (962,6);
+insert into t (id,a) values (962,7);
+insert into t (id,a) values (962,8);
+insert into t (id,a) values (962,9);
+insert into t (id,a) values (962,10);
+insert into t (id,a) values (962,11);
+insert into t (id,a) values (962,12);
+insert into t (id,a) values (962,13);
+insert into t (id,a) values (962,14);
+insert into t (id,a) values (962,15);
+insert into t (id,a) values (962,16);
+insert into t (id,a) values (962,17);
+insert into t (id,a) values (962,18);
+insert into t (id,a) values (962,19);
+insert into t (id,a) values (962,20);
+insert into t (id,a) values (962,21);
+insert into t (id,a) values (962,22);
+insert into t (id,a) values (962,23);
+insert into t (id,a) values (962,24);
+insert into t (id,a) values (962,25);
+insert into t (id,a) values (962,26);
+insert into t (id,a) values (962,27);
+insert into t (id,a) values (962,28);
+insert into t (id,a) values (962,29);
+insert into t (id,a) values (962,30);
+insert into t (id,a) values (962,31);
+insert into t (id,a) values (962,32);
+insert into t (id,a) values (962,33);
+insert into t (id,a) values (962,34);
+insert into t (id,a) values (962,35);
+insert into t (id,a) values (962,36);
+insert into t (id,a) values (962,37);
+insert into t (id,a) values (962,38);
+insert into t (id,a) values (962,39);
+insert into t (id,a) values (962,40);
+insert into t (id,a) values (962,41);
+insert into t (id,a) values (962,42);
+insert into t (id,a) values (962,43);
+insert into t (id,a) values (962,44);
+insert into t (id,a) values (962,45);
+insert into t (id,a) values (962,46);
+insert into t (id,a) values (962,47);
+insert into t (id,a) values (962,48);
+insert into t (id,a) values (962,49);
+insert into t (id,a) values (962,50);
+insert into t (id,a) values (962,51);
+insert into t (id,a) values (962,52);
+insert into t (id,a) values (962,53);
+insert into t (id,a) values (962,54);
+insert into t (id,a) values (962,55);
+insert into t (id,a) values (962,56);
+insert into t (id,a) values (962,57);
+insert into t (id,a) values (962,58);
+insert into t (id,a) values (962,59);
+insert into t (id,a) values (962,60);
+insert into t (id,a) values (962,61);
+insert into t (id,a) values (962,62);
+insert into t (id,a) values (962,63);
+insert into t (id,a) values (962,64);
+insert into t (id,a) values (962,65);
+insert into t (id,a) values (962,66);
+insert into t (id,a) values (962,67);
+insert into t (id,a) values (962,68);
+insert into t (id,a) values (962,69);
+insert into t (id,a) values (962,70);
+insert into t (id,a) values (962,71);
+insert into t (id,a) values (962,72);
+insert into t (id,a) values (962,73);
+insert into t (id,a) values (962,74);
+insert into t (id,a) values (962,75);
+insert into t (id,a) values (962,76);
+insert into t (id,a) values (962,77);
+insert into t (id,a) values (962,78);
+insert into t (id,a) values (962,79);
+insert into t (id,a) values (962,80);
+insert into t (id,a) values (962,81);
+insert into t (id,a) values (962,82);
+insert into t (id,a) values (962,83);
+insert into t (id,a) values (962,84);
+insert into t (id,a) values (962,85);
+insert into t (id,a) values (962,86);
+insert into t (id,a) values (962,87);
+insert into t (id,a) values (962,88);
+insert into t (id,a) values (962,89);
+insert into t (id,a) values (962,90);
+insert into t (id,a) values (962,91);
+insert into t (id,a) values (962,92);
+insert into t (id,a) values (962,93);
+insert into t (id,a) values (962,94);
+insert into t (id,a) values (962,95);
+insert into t (id,a) values (962,96);
+insert into t (id,a) values (962,97);
+insert into t (id,a) values (962,98);
+insert into t (id,a) values (962,99);
+insert into t (id,a) values (963,0);
+insert into t (id,a) values (963,1);
+insert into t (id,a) values (963,2);
+insert into t (id,a) values (963,3);
+insert into t (id,a) values (963,4);
+insert into t (id,a) values (963,5);
+insert into t (id,a) values (963,6);
+insert into t (id,a) values (963,7);
+insert into t (id,a) values (963,8);
+insert into t (id,a) values (963,9);
+insert into t (id,a) values (963,10);
+insert into t (id,a) values (963,11);
+insert into t (id,a) values (963,12);
+insert into t (id,a) values (963,13);
+insert into t (id,a) values (963,14);
+insert into t (id,a) values (963,15);
+insert into t (id,a) values (963,16);
+insert into t (id,a) values (963,17);
+insert into t (id,a) values (963,18);
+insert into t (id,a) values (963,19);
+insert into t (id,a) values (963,20);
+insert into t (id,a) values (963,21);
+insert into t (id,a) values (963,22);
+insert into t (id,a) values (963,23);
+insert into t (id,a) values (963,24);
+insert into t (id,a) values (963,25);
+insert into t (id,a) values (963,26);
+insert into t (id,a) values (963,27);
+insert into t (id,a) values (963,28);
+insert into t (id,a) values (963,29);
+insert into t (id,a) values (963,30);
+insert into t (id,a) values (963,31);
+insert into t (id,a) values (963,32);
+insert into t (id,a) values (963,33);
+insert into t (id,a) values (963,34);
+insert into t (id,a) values (963,35);
+insert into t (id,a) values (963,36);
+insert into t (id,a) values (963,37);
+insert into t (id,a) values (963,38);
+insert into t (id,a) values (963,39);
+insert into t (id,a) values (963,40);
+insert into t (id,a) values (963,41);
+insert into t (id,a) values (963,42);
+insert into t (id,a) values (963,43);
+insert into t (id,a) values (963,44);
+insert into t (id,a) values (963,45);
+insert into t (id,a) values (963,46);
+insert into t (id,a) values (963,47);
+insert into t (id,a) values (963,48);
+insert into t (id,a) values (963,49);
+insert into t (id,a) values (963,50);
+insert into t (id,a) values (963,51);
+insert into t (id,a) values (963,52);
+insert into t (id,a) values (963,53);
+insert into t (id,a) values (963,54);
+insert into t (id,a) values (963,55);
+insert into t (id,a) values (963,56);
+insert into t (id,a) values (963,57);
+insert into t (id,a) values (963,58);
+insert into t (id,a) values (963,59);
+insert into t (id,a) values (963,60);
+insert into t (id,a) values (963,61);
+insert into t (id,a) values (963,62);
+insert into t (id,a) values (963,63);
+insert into t (id,a) values (963,64);
+insert into t (id,a) values (963,65);
+insert into t (id,a) values (963,66);
+insert into t (id,a) values (963,67);
+insert into t (id,a) values (963,68);
+insert into t (id,a) values (963,69);
+insert into t (id,a) values (963,70);
+insert into t (id,a) values (963,71);
+insert into t (id,a) values (963,72);
+insert into t (id,a) values (963,73);
+insert into t (id,a) values (963,74);
+insert into t (id,a) values (963,75);
+insert into t (id,a) values (963,76);
+insert into t (id,a) values (963,77);
+insert into t (id,a) values (963,78);
+insert into t (id,a) values (963,79);
+insert into t (id,a) values (963,80);
+insert into t (id,a) values (963,81);
+insert into t (id,a) values (963,82);
+insert into t (id,a) values (963,83);
+insert into t (id,a) values (963,84);
+insert into t (id,a) values (963,85);
+insert into t (id,a) values (963,86);
+insert into t (id,a) values (963,87);
+insert into t (id,a) values (963,88);
+insert into t (id,a) values (963,89);
+insert into t (id,a) values (963,90);
+insert into t (id,a) values (963,91);
+insert into t (id,a) values (963,92);
+insert into t (id,a) values (963,93);
+insert into t (id,a) values (963,94);
+insert into t (id,a) values (963,95);
+insert into t (id,a) values (963,96);
+insert into t (id,a) values (963,97);
+insert into t (id,a) values (963,98);
+insert into t (id,a) values (963,99);
+insert into t (id,a) values (964,0);
+insert into t (id,a) values (964,1);
+insert into t (id,a) values (964,2);
+insert into t (id,a) values (964,3);
+insert into t (id,a) values (964,4);
+insert into t (id,a) values (964,5);
+insert into t (id,a) values (964,6);
+insert into t (id,a) values (964,7);
+insert into t (id,a) values (964,8);
+insert into t (id,a) values (964,9);
+insert into t (id,a) values (964,10);
+insert into t (id,a) values (964,11);
+insert into t (id,a) values (964,12);
+insert into t (id,a) values (964,13);
+insert into t (id,a) values (964,14);
+insert into t (id,a) values (964,15);
+insert into t (id,a) values (964,16);
+insert into t (id,a) values (964,17);
+insert into t (id,a) values (964,18);
+insert into t (id,a) values (964,19);
+insert into t (id,a) values (964,20);
+insert into t (id,a) values (964,21);
+insert into t (id,a) values (964,22);
+insert into t (id,a) values (964,23);
+insert into t (id,a) values (964,24);
+insert into t (id,a) values (964,25);
+insert into t (id,a) values (964,26);
+insert into t (id,a) values (964,27);
+insert into t (id,a) values (964,28);
+insert into t (id,a) values (964,29);
+insert into t (id,a) values (964,30);
+insert into t (id,a) values (964,31);
+insert into t (id,a) values (964,32);
+insert into t (id,a) values (964,33);
+insert into t (id,a) values (964,34);
+insert into t (id,a) values (964,35);
+insert into t (id,a) values (964,36);
+insert into t (id,a) values (964,37);
+insert into t (id,a) values (964,38);
+insert into t (id,a) values (964,39);
+insert into t (id,a) values (964,40);
+insert into t (id,a) values (964,41);
+insert into t (id,a) values (964,42);
+insert into t (id,a) values (964,43);
+insert into t (id,a) values (964,44);
+insert into t (id,a) values (964,45);
+insert into t (id,a) values (964,46);
+insert into t (id,a) values (964,47);
+insert into t (id,a) values (964,48);
+insert into t (id,a) values (964,49);
+insert into t (id,a) values (964,50);
+insert into t (id,a) values (964,51);
+insert into t (id,a) values (964,52);
+insert into t (id,a) values (964,53);
+insert into t (id,a) values (964,54);
+insert into t (id,a) values (964,55);
+insert into t (id,a) values (964,56);
+insert into t (id,a) values (964,57);
+insert into t (id,a) values (964,58);
+insert into t (id,a) values (964,59);
+insert into t (id,a) values (964,60);
+insert into t (id,a) values (964,61);
+insert into t (id,a) values (964,62);
+insert into t (id,a) values (964,63);
+insert into t (id,a) values (964,64);
+insert into t (id,a) values (964,65);
+insert into t (id,a) values (964,66);
+insert into t (id,a) values (964,67);
+insert into t (id,a) values (964,68);
+insert into t (id,a) values (964,69);
+insert into t (id,a) values (964,70);
+insert into t (id,a) values (964,71);
+insert into t (id,a) values (964,72);
+insert into t (id,a) values (964,73);
+insert into t (id,a) values (964,74);
+insert into t (id,a) values (964,75);
+insert into t (id,a) values (964,76);
+insert into t (id,a) values (964,77);
+insert into t (id,a) values (964,78);
+insert into t (id,a) values (964,79);
+insert into t (id,a) values (964,80);
+insert into t (id,a) values (964,81);
+insert into t (id,a) values (964,82);
+insert into t (id,a) values (964,83);
+insert into t (id,a) values (964,84);
+insert into t (id,a) values (964,85);
+insert into t (id,a) values (964,86);
+insert into t (id,a) values (964,87);
+insert into t (id,a) values (964,88);
+insert into t (id,a) values (964,89);
+insert into t (id,a) values (964,90);
+insert into t (id,a) values (964,91);
+insert into t (id,a) values (964,92);
+insert into t (id,a) values (964,93);
+insert into t (id,a) values (964,94);
+insert into t (id,a) values (964,95);
+insert into t (id,a) values (964,96);
+insert into t (id,a) values (964,97);
+insert into t (id,a) values (964,98);
+insert into t (id,a) values (964,99);
+insert into t (id,a) values (965,0);
+insert into t (id,a) values (965,1);
+insert into t (id,a) values (965,2);
+insert into t (id,a) values (965,3);
+insert into t (id,a) values (965,4);
+insert into t (id,a) values (965,5);
+insert into t (id,a) values (965,6);
+insert into t (id,a) values (965,7);
+insert into t (id,a) values (965,8);
+insert into t (id,a) values (965,9);
+insert into t (id,a) values (965,10);
+insert into t (id,a) values (965,11);
+insert into t (id,a) values (965,12);
+insert into t (id,a) values (965,13);
+insert into t (id,a) values (965,14);
+insert into t (id,a) values (965,15);
+insert into t (id,a) values (965,16);
+insert into t (id,a) values (965,17);
+insert into t (id,a) values (965,18);
+insert into t (id,a) values (965,19);
+insert into t (id,a) values (965,20);
+insert into t (id,a) values (965,21);
+insert into t (id,a) values (965,22);
+insert into t (id,a) values (965,23);
+insert into t (id,a) values (965,24);
+insert into t (id,a) values (965,25);
+insert into t (id,a) values (965,26);
+insert into t (id,a) values (965,27);
+insert into t (id,a) values (965,28);
+insert into t (id,a) values (965,29);
+insert into t (id,a) values (965,30);
+insert into t (id,a) values (965,31);
+insert into t (id,a) values (965,32);
+insert into t (id,a) values (965,33);
+insert into t (id,a) values (965,34);
+insert into t (id,a) values (965,35);
+insert into t (id,a) values (965,36);
+insert into t (id,a) values (965,37);
+insert into t (id,a) values (965,38);
+insert into t (id,a) values (965,39);
+insert into t (id,a) values (965,40);
+insert into t (id,a) values (965,41);
+insert into t (id,a) values (965,42);
+insert into t (id,a) values (965,43);
+insert into t (id,a) values (965,44);
+insert into t (id,a) values (965,45);
+insert into t (id,a) values (965,46);
+insert into t (id,a) values (965,47);
+insert into t (id,a) values (965,48);
+insert into t (id,a) values (965,49);
+insert into t (id,a) values (965,50);
+insert into t (id,a) values (965,51);
+insert into t (id,a) values (965,52);
+insert into t (id,a) values (965,53);
+insert into t (id,a) values (965,54);
+insert into t (id,a) values (965,55);
+insert into t (id,a) values (965,56);
+insert into t (id,a) values (965,57);
+insert into t (id,a) values (965,58);
+insert into t (id,a) values (965,59);
+insert into t (id,a) values (965,60);
+insert into t (id,a) values (965,61);
+insert into t (id,a) values (965,62);
+insert into t (id,a) values (965,63);
+insert into t (id,a) values (965,64);
+insert into t (id,a) values (965,65);
+insert into t (id,a) values (965,66);
+insert into t (id,a) values (965,67);
+insert into t (id,a) values (965,68);
+insert into t (id,a) values (965,69);
+insert into t (id,a) values (965,70);
+insert into t (id,a) values (965,71);
+insert into t (id,a) values (965,72);
+insert into t (id,a) values (965,73);
+insert into t (id,a) values (965,74);
+insert into t (id,a) values (965,75);
+insert into t (id,a) values (965,76);
+insert into t (id,a) values (965,77);
+insert into t (id,a) values (965,78);
+insert into t (id,a) values (965,79);
+insert into t (id,a) values (965,80);
+insert into t (id,a) values (965,81);
+insert into t (id,a) values (965,82);
+insert into t (id,a) values (965,83);
+insert into t (id,a) values (965,84);
+insert into t (id,a) values (965,85);
+insert into t (id,a) values (965,86);
+insert into t (id,a) values (965,87);
+insert into t (id,a) values (965,88);
+insert into t (id,a) values (965,89);
+insert into t (id,a) values (965,90);
+insert into t (id,a) values (965,91);
+insert into t (id,a) values (965,92);
+insert into t (id,a) values (965,93);
+insert into t (id,a) values (965,94);
+insert into t (id,a) values (965,95);
+insert into t (id,a) values (965,96);
+insert into t (id,a) values (965,97);
+insert into t (id,a) values (965,98);
+insert into t (id,a) values (965,99);
+insert into t (id,a) values (966,0);
+insert into t (id,a) values (966,1);
+insert into t (id,a) values (966,2);
+insert into t (id,a) values (966,3);
+insert into t (id,a) values (966,4);
+insert into t (id,a) values (966,5);
+insert into t (id,a) values (966,6);
+insert into t (id,a) values (966,7);
+insert into t (id,a) values (966,8);
+insert into t (id,a) values (966,9);
+insert into t (id,a) values (966,10);
+insert into t (id,a) values (966,11);
+insert into t (id,a) values (966,12);
+insert into t (id,a) values (966,13);
+insert into t (id,a) values (966,14);
+insert into t (id,a) values (966,15);
+insert into t (id,a) values (966,16);
+insert into t (id,a) values (966,17);
+insert into t (id,a) values (966,18);
+insert into t (id,a) values (966,19);
+insert into t (id,a) values (966,20);
+insert into t (id,a) values (966,21);
+insert into t (id,a) values (966,22);
+insert into t (id,a) values (966,23);
+insert into t (id,a) values (966,24);
+insert into t (id,a) values (966,25);
+insert into t (id,a) values (966,26);
+insert into t (id,a) values (966,27);
+insert into t (id,a) values (966,28);
+insert into t (id,a) values (966,29);
+insert into t (id,a) values (966,30);
+insert into t (id,a) values (966,31);
+insert into t (id,a) values (966,32);
+insert into t (id,a) values (966,33);
+insert into t (id,a) values (966,34);
+insert into t (id,a) values (966,35);
+insert into t (id,a) values (966,36);
+insert into t (id,a) values (966,37);
+insert into t (id,a) values (966,38);
+insert into t (id,a) values (966,39);
+insert into t (id,a) values (966,40);
+insert into t (id,a) values (966,41);
+insert into t (id,a) values (966,42);
+insert into t (id,a) values (966,43);
+insert into t (id,a) values (966,44);
+insert into t (id,a) values (966,45);
+insert into t (id,a) values (966,46);
+insert into t (id,a) values (966,47);
+insert into t (id,a) values (966,48);
+insert into t (id,a) values (966,49);
+insert into t (id,a) values (966,50);
+insert into t (id,a) values (966,51);
+insert into t (id,a) values (966,52);
+insert into t (id,a) values (966,53);
+insert into t (id,a) values (966,54);
+insert into t (id,a) values (966,55);
+insert into t (id,a) values (966,56);
+insert into t (id,a) values (966,57);
+insert into t (id,a) values (966,58);
+insert into t (id,a) values (966,59);
+insert into t (id,a) values (966,60);
+insert into t (id,a) values (966,61);
+insert into t (id,a) values (966,62);
+insert into t (id,a) values (966,63);
+insert into t (id,a) values (966,64);
+insert into t (id,a) values (966,65);
+insert into t (id,a) values (966,66);
+insert into t (id,a) values (966,67);
+insert into t (id,a) values (966,68);
+insert into t (id,a) values (966,69);
+insert into t (id,a) values (966,70);
+insert into t (id,a) values (966,71);
+insert into t (id,a) values (966,72);
+insert into t (id,a) values (966,73);
+insert into t (id,a) values (966,74);
+insert into t (id,a) values (966,75);
+insert into t (id,a) values (966,76);
+insert into t (id,a) values (966,77);
+insert into t (id,a) values (966,78);
+insert into t (id,a) values (966,79);
+insert into t (id,a) values (966,80);
+insert into t (id,a) values (966,81);
+insert into t (id,a) values (966,82);
+insert into t (id,a) values (966,83);
+insert into t (id,a) values (966,84);
+insert into t (id,a) values (966,85);
+insert into t (id,a) values (966,86);
+insert into t (id,a) values (966,87);
+insert into t (id,a) values (966,88);
+insert into t (id,a) values (966,89);
+insert into t (id,a) values (966,90);
+insert into t (id,a) values (966,91);
+insert into t (id,a) values (966,92);
+insert into t (id,a) values (966,93);
+insert into t (id,a) values (966,94);
+insert into t (id,a) values (966,95);
+insert into t (id,a) values (966,96);
+insert into t (id,a) values (966,97);
+insert into t (id,a) values (966,98);
+insert into t (id,a) values (966,99);
+insert into t (id,a) values (967,0);
+insert into t (id,a) values (967,1);
+insert into t (id,a) values (967,2);
+insert into t (id,a) values (967,3);
+insert into t (id,a) values (967,4);
+insert into t (id,a) values (967,5);
+insert into t (id,a) values (967,6);
+insert into t (id,a) values (967,7);
+insert into t (id,a) values (967,8);
+insert into t (id,a) values (967,9);
+insert into t (id,a) values (967,10);
+insert into t (id,a) values (967,11);
+insert into t (id,a) values (967,12);
+insert into t (id,a) values (967,13);
+insert into t (id,a) values (967,14);
+insert into t (id,a) values (967,15);
+insert into t (id,a) values (967,16);
+insert into t (id,a) values (967,17);
+insert into t (id,a) values (967,18);
+insert into t (id,a) values (967,19);
+insert into t (id,a) values (967,20);
+insert into t (id,a) values (967,21);
+insert into t (id,a) values (967,22);
+insert into t (id,a) values (967,23);
+insert into t (id,a) values (967,24);
+insert into t (id,a) values (967,25);
+insert into t (id,a) values (967,26);
+insert into t (id,a) values (967,27);
+insert into t (id,a) values (967,28);
+insert into t (id,a) values (967,29);
+insert into t (id,a) values (967,30);
+insert into t (id,a) values (967,31);
+insert into t (id,a) values (967,32);
+insert into t (id,a) values (967,33);
+insert into t (id,a) values (967,34);
+insert into t (id,a) values (967,35);
+insert into t (id,a) values (967,36);
+insert into t (id,a) values (967,37);
+insert into t (id,a) values (967,38);
+insert into t (id,a) values (967,39);
+insert into t (id,a) values (967,40);
+insert into t (id,a) values (967,41);
+insert into t (id,a) values (967,42);
+insert into t (id,a) values (967,43);
+insert into t (id,a) values (967,44);
+insert into t (id,a) values (967,45);
+insert into t (id,a) values (967,46);
+insert into t (id,a) values (967,47);
+insert into t (id,a) values (967,48);
+insert into t (id,a) values (967,49);
+insert into t (id,a) values (967,50);
+insert into t (id,a) values (967,51);
+insert into t (id,a) values (967,52);
+insert into t (id,a) values (967,53);
+insert into t (id,a) values (967,54);
+insert into t (id,a) values (967,55);
+insert into t (id,a) values (967,56);
+insert into t (id,a) values (967,57);
+insert into t (id,a) values (967,58);
+insert into t (id,a) values (967,59);
+insert into t (id,a) values (967,60);
+insert into t (id,a) values (967,61);
+insert into t (id,a) values (967,62);
+insert into t (id,a) values (967,63);
+insert into t (id,a) values (967,64);
+insert into t (id,a) values (967,65);
+insert into t (id,a) values (967,66);
+insert into t (id,a) values (967,67);
+insert into t (id,a) values (967,68);
+insert into t (id,a) values (967,69);
+insert into t (id,a) values (967,70);
+insert into t (id,a) values (967,71);
+insert into t (id,a) values (967,72);
+insert into t (id,a) values (967,73);
+insert into t (id,a) values (967,74);
+insert into t (id,a) values (967,75);
+insert into t (id,a) values (967,76);
+insert into t (id,a) values (967,77);
+insert into t (id,a) values (967,78);
+insert into t (id,a) values (967,79);
+insert into t (id,a) values (967,80);
+insert into t (id,a) values (967,81);
+insert into t (id,a) values (967,82);
+insert into t (id,a) values (967,83);
+insert into t (id,a) values (967,84);
+insert into t (id,a) values (967,85);
+insert into t (id,a) values (967,86);
+insert into t (id,a) values (967,87);
+insert into t (id,a) values (967,88);
+insert into t (id,a) values (967,89);
+insert into t (id,a) values (967,90);
+insert into t (id,a) values (967,91);
+insert into t (id,a) values (967,92);
+insert into t (id,a) values (967,93);
+insert into t (id,a) values (967,94);
+insert into t (id,a) values (967,95);
+insert into t (id,a) values (967,96);
+insert into t (id,a) values (967,97);
+insert into t (id,a) values (967,98);
+insert into t (id,a) values (967,99);
+insert into t (id,a) values (968,0);
+insert into t (id,a) values (968,1);
+insert into t (id,a) values (968,2);
+insert into t (id,a) values (968,3);
+insert into t (id,a) values (968,4);
+insert into t (id,a) values (968,5);
+insert into t (id,a) values (968,6);
+insert into t (id,a) values (968,7);
+insert into t (id,a) values (968,8);
+insert into t (id,a) values (968,9);
+insert into t (id,a) values (968,10);
+insert into t (id,a) values (968,11);
+insert into t (id,a) values (968,12);
+insert into t (id,a) values (968,13);
+insert into t (id,a) values (968,14);
+insert into t (id,a) values (968,15);
+insert into t (id,a) values (968,16);
+insert into t (id,a) values (968,17);
+insert into t (id,a) values (968,18);
+insert into t (id,a) values (968,19);
+insert into t (id,a) values (968,20);
+insert into t (id,a) values (968,21);
+insert into t (id,a) values (968,22);
+insert into t (id,a) values (968,23);
+insert into t (id,a) values (968,24);
+insert into t (id,a) values (968,25);
+insert into t (id,a) values (968,26);
+insert into t (id,a) values (968,27);
+insert into t (id,a) values (968,28);
+insert into t (id,a) values (968,29);
+insert into t (id,a) values (968,30);
+insert into t (id,a) values (968,31);
+insert into t (id,a) values (968,32);
+insert into t (id,a) values (968,33);
+insert into t (id,a) values (968,34);
+insert into t (id,a) values (968,35);
+insert into t (id,a) values (968,36);
+insert into t (id,a) values (968,37);
+insert into t (id,a) values (968,38);
+insert into t (id,a) values (968,39);
+insert into t (id,a) values (968,40);
+insert into t (id,a) values (968,41);
+insert into t (id,a) values (968,42);
+insert into t (id,a) values (968,43);
+insert into t (id,a) values (968,44);
+insert into t (id,a) values (968,45);
+insert into t (id,a) values (968,46);
+insert into t (id,a) values (968,47);
+insert into t (id,a) values (968,48);
+insert into t (id,a) values (968,49);
+insert into t (id,a) values (968,50);
+insert into t (id,a) values (968,51);
+insert into t (id,a) values (968,52);
+insert into t (id,a) values (968,53);
+insert into t (id,a) values (968,54);
+insert into t (id,a) values (968,55);
+insert into t (id,a) values (968,56);
+insert into t (id,a) values (968,57);
+insert into t (id,a) values (968,58);
+insert into t (id,a) values (968,59);
+insert into t (id,a) values (968,60);
+insert into t (id,a) values (968,61);
+insert into t (id,a) values (968,62);
+insert into t (id,a) values (968,63);
+insert into t (id,a) values (968,64);
+insert into t (id,a) values (968,65);
+insert into t (id,a) values (968,66);
+insert into t (id,a) values (968,67);
+insert into t (id,a) values (968,68);
+insert into t (id,a) values (968,69);
+insert into t (id,a) values (968,70);
+insert into t (id,a) values (968,71);
+insert into t (id,a) values (968,72);
+insert into t (id,a) values (968,73);
+insert into t (id,a) values (968,74);
+insert into t (id,a) values (968,75);
+insert into t (id,a) values (968,76);
+insert into t (id,a) values (968,77);
+insert into t (id,a) values (968,78);
+insert into t (id,a) values (968,79);
+insert into t (id,a) values (968,80);
+insert into t (id,a) values (968,81);
+insert into t (id,a) values (968,82);
+insert into t (id,a) values (968,83);
+insert into t (id,a) values (968,84);
+insert into t (id,a) values (968,85);
+insert into t (id,a) values (968,86);
+insert into t (id,a) values (968,87);
+insert into t (id,a) values (968,88);
+insert into t (id,a) values (968,89);
+insert into t (id,a) values (968,90);
+insert into t (id,a) values (968,91);
+insert into t (id,a) values (968,92);
+insert into t (id,a) values (968,93);
+insert into t (id,a) values (968,94);
+insert into t (id,a) values (968,95);
+insert into t (id,a) values (968,96);
+insert into t (id,a) values (968,97);
+insert into t (id,a) values (968,98);
+insert into t (id,a) values (968,99);
+insert into t (id,a) values (969,0);
+insert into t (id,a) values (969,1);
+insert into t (id,a) values (969,2);
+insert into t (id,a) values (969,3);
+insert into t (id,a) values (969,4);
+insert into t (id,a) values (969,5);
+insert into t (id,a) values (969,6);
+insert into t (id,a) values (969,7);
+insert into t (id,a) values (969,8);
+insert into t (id,a) values (969,9);
+insert into t (id,a) values (969,10);
+insert into t (id,a) values (969,11);
+insert into t (id,a) values (969,12);
+insert into t (id,a) values (969,13);
+insert into t (id,a) values (969,14);
+insert into t (id,a) values (969,15);
+insert into t (id,a) values (969,16);
+insert into t (id,a) values (969,17);
+insert into t (id,a) values (969,18);
+insert into t (id,a) values (969,19);
+insert into t (id,a) values (969,20);
+insert into t (id,a) values (969,21);
+insert into t (id,a) values (969,22);
+insert into t (id,a) values (969,23);
+insert into t (id,a) values (969,24);
+insert into t (id,a) values (969,25);
+insert into t (id,a) values (969,26);
+insert into t (id,a) values (969,27);
+insert into t (id,a) values (969,28);
+insert into t (id,a) values (969,29);
+insert into t (id,a) values (969,30);
+insert into t (id,a) values (969,31);
+insert into t (id,a) values (969,32);
+insert into t (id,a) values (969,33);
+insert into t (id,a) values (969,34);
+insert into t (id,a) values (969,35);
+insert into t (id,a) values (969,36);
+insert into t (id,a) values (969,37);
+insert into t (id,a) values (969,38);
+insert into t (id,a) values (969,39);
+insert into t (id,a) values (969,40);
+insert into t (id,a) values (969,41);
+insert into t (id,a) values (969,42);
+insert into t (id,a) values (969,43);
+insert into t (id,a) values (969,44);
+insert into t (id,a) values (969,45);
+insert into t (id,a) values (969,46);
+insert into t (id,a) values (969,47);
+insert into t (id,a) values (969,48);
+insert into t (id,a) values (969,49);
+insert into t (id,a) values (969,50);
+insert into t (id,a) values (969,51);
+insert into t (id,a) values (969,52);
+insert into t (id,a) values (969,53);
+insert into t (id,a) values (969,54);
+insert into t (id,a) values (969,55);
+insert into t (id,a) values (969,56);
+insert into t (id,a) values (969,57);
+insert into t (id,a) values (969,58);
+insert into t (id,a) values (969,59);
+insert into t (id,a) values (969,60);
+insert into t (id,a) values (969,61);
+insert into t (id,a) values (969,62);
+insert into t (id,a) values (969,63);
+insert into t (id,a) values (969,64);
+insert into t (id,a) values (969,65);
+insert into t (id,a) values (969,66);
+insert into t (id,a) values (969,67);
+insert into t (id,a) values (969,68);
+insert into t (id,a) values (969,69);
+insert into t (id,a) values (969,70);
+insert into t (id,a) values (969,71);
+insert into t (id,a) values (969,72);
+insert into t (id,a) values (969,73);
+insert into t (id,a) values (969,74);
+insert into t (id,a) values (969,75);
+insert into t (id,a) values (969,76);
+insert into t (id,a) values (969,77);
+insert into t (id,a) values (969,78);
+insert into t (id,a) values (969,79);
+insert into t (id,a) values (969,80);
+insert into t (id,a) values (969,81);
+insert into t (id,a) values (969,82);
+insert into t (id,a) values (969,83);
+insert into t (id,a) values (969,84);
+insert into t (id,a) values (969,85);
+insert into t (id,a) values (969,86);
+insert into t (id,a) values (969,87);
+insert into t (id,a) values (969,88);
+insert into t (id,a) values (969,89);
+insert into t (id,a) values (969,90);
+insert into t (id,a) values (969,91);
+insert into t (id,a) values (969,92);
+insert into t (id,a) values (969,93);
+insert into t (id,a) values (969,94);
+insert into t (id,a) values (969,95);
+insert into t (id,a) values (969,96);
+insert into t (id,a) values (969,97);
+insert into t (id,a) values (969,98);
+insert into t (id,a) values (969,99);
+insert into t (id,a) values (970,0);
+insert into t (id,a) values (970,1);
+insert into t (id,a) values (970,2);
+insert into t (id,a) values (970,3);
+insert into t (id,a) values (970,4);
+insert into t (id,a) values (970,5);
+insert into t (id,a) values (970,6);
+insert into t (id,a) values (970,7);
+insert into t (id,a) values (970,8);
+insert into t (id,a) values (970,9);
+insert into t (id,a) values (970,10);
+insert into t (id,a) values (970,11);
+insert into t (id,a) values (970,12);
+insert into t (id,a) values (970,13);
+insert into t (id,a) values (970,14);
+insert into t (id,a) values (970,15);
+insert into t (id,a) values (970,16);
+insert into t (id,a) values (970,17);
+insert into t (id,a) values (970,18);
+insert into t (id,a) values (970,19);
+insert into t (id,a) values (970,20);
+insert into t (id,a) values (970,21);
+insert into t (id,a) values (970,22);
+insert into t (id,a) values (970,23);
+insert into t (id,a) values (970,24);
+insert into t (id,a) values (970,25);
+insert into t (id,a) values (970,26);
+insert into t (id,a) values (970,27);
+insert into t (id,a) values (970,28);
+insert into t (id,a) values (970,29);
+insert into t (id,a) values (970,30);
+insert into t (id,a) values (970,31);
+insert into t (id,a) values (970,32);
+insert into t (id,a) values (970,33);
+insert into t (id,a) values (970,34);
+insert into t (id,a) values (970,35);
+insert into t (id,a) values (970,36);
+insert into t (id,a) values (970,37);
+insert into t (id,a) values (970,38);
+insert into t (id,a) values (970,39);
+insert into t (id,a) values (970,40);
+insert into t (id,a) values (970,41);
+insert into t (id,a) values (970,42);
+insert into t (id,a) values (970,43);
+insert into t (id,a) values (970,44);
+insert into t (id,a) values (970,45);
+insert into t (id,a) values (970,46);
+insert into t (id,a) values (970,47);
+insert into t (id,a) values (970,48);
+insert into t (id,a) values (970,49);
+insert into t (id,a) values (970,50);
+insert into t (id,a) values (970,51);
+insert into t (id,a) values (970,52);
+insert into t (id,a) values (970,53);
+insert into t (id,a) values (970,54);
+insert into t (id,a) values (970,55);
+insert into t (id,a) values (970,56);
+insert into t (id,a) values (970,57);
+insert into t (id,a) values (970,58);
+insert into t (id,a) values (970,59);
+insert into t (id,a) values (970,60);
+insert into t (id,a) values (970,61);
+insert into t (id,a) values (970,62);
+insert into t (id,a) values (970,63);
+insert into t (id,a) values (970,64);
+insert into t (id,a) values (970,65);
+insert into t (id,a) values (970,66);
+insert into t (id,a) values (970,67);
+insert into t (id,a) values (970,68);
+insert into t (id,a) values (970,69);
+insert into t (id,a) values (970,70);
+insert into t (id,a) values (970,71);
+insert into t (id,a) values (970,72);
+insert into t (id,a) values (970,73);
+insert into t (id,a) values (970,74);
+insert into t (id,a) values (970,75);
+insert into t (id,a) values (970,76);
+insert into t (id,a) values (970,77);
+insert into t (id,a) values (970,78);
+insert into t (id,a) values (970,79);
+insert into t (id,a) values (970,80);
+insert into t (id,a) values (970,81);
+insert into t (id,a) values (970,82);
+insert into t (id,a) values (970,83);
+insert into t (id,a) values (970,84);
+insert into t (id,a) values (970,85);
+insert into t (id,a) values (970,86);
+insert into t (id,a) values (970,87);
+insert into t (id,a) values (970,88);
+insert into t (id,a) values (970,89);
+insert into t (id,a) values (970,90);
+insert into t (id,a) values (970,91);
+insert into t (id,a) values (970,92);
+insert into t (id,a) values (970,93);
+insert into t (id,a) values (970,94);
+insert into t (id,a) values (970,95);
+insert into t (id,a) values (970,96);
+insert into t (id,a) values (970,97);
+insert into t (id,a) values (970,98);
+insert into t (id,a) values (970,99);
+insert into t (id,a) values (971,0);
+insert into t (id,a) values (971,1);
+insert into t (id,a) values (971,2);
+insert into t (id,a) values (971,3);
+insert into t (id,a) values (971,4);
+insert into t (id,a) values (971,5);
+insert into t (id,a) values (971,6);
+insert into t (id,a) values (971,7);
+insert into t (id,a) values (971,8);
+insert into t (id,a) values (971,9);
+insert into t (id,a) values (971,10);
+insert into t (id,a) values (971,11);
+insert into t (id,a) values (971,12);
+insert into t (id,a) values (971,13);
+insert into t (id,a) values (971,14);
+insert into t (id,a) values (971,15);
+insert into t (id,a) values (971,16);
+insert into t (id,a) values (971,17);
+insert into t (id,a) values (971,18);
+insert into t (id,a) values (971,19);
+insert into t (id,a) values (971,20);
+insert into t (id,a) values (971,21);
+insert into t (id,a) values (971,22);
+insert into t (id,a) values (971,23);
+insert into t (id,a) values (971,24);
+insert into t (id,a) values (971,25);
+insert into t (id,a) values (971,26);
+insert into t (id,a) values (971,27);
+insert into t (id,a) values (971,28);
+insert into t (id,a) values (971,29);
+insert into t (id,a) values (971,30);
+insert into t (id,a) values (971,31);
+insert into t (id,a) values (971,32);
+insert into t (id,a) values (971,33);
+insert into t (id,a) values (971,34);
+insert into t (id,a) values (971,35);
+insert into t (id,a) values (971,36);
+insert into t (id,a) values (971,37);
+insert into t (id,a) values (971,38);
+insert into t (id,a) values (971,39);
+insert into t (id,a) values (971,40);
+insert into t (id,a) values (971,41);
+insert into t (id,a) values (971,42);
+insert into t (id,a) values (971,43);
+insert into t (id,a) values (971,44);
+insert into t (id,a) values (971,45);
+insert into t (id,a) values (971,46);
+insert into t (id,a) values (971,47);
+insert into t (id,a) values (971,48);
+insert into t (id,a) values (971,49);
+insert into t (id,a) values (971,50);
+insert into t (id,a) values (971,51);
+insert into t (id,a) values (971,52);
+insert into t (id,a) values (971,53);
+insert into t (id,a) values (971,54);
+insert into t (id,a) values (971,55);
+insert into t (id,a) values (971,56);
+insert into t (id,a) values (971,57);
+insert into t (id,a) values (971,58);
+insert into t (id,a) values (971,59);
+insert into t (id,a) values (971,60);
+insert into t (id,a) values (971,61);
+insert into t (id,a) values (971,62);
+insert into t (id,a) values (971,63);
+insert into t (id,a) values (971,64);
+insert into t (id,a) values (971,65);
+insert into t (id,a) values (971,66);
+insert into t (id,a) values (971,67);
+insert into t (id,a) values (971,68);
+insert into t (id,a) values (971,69);
+insert into t (id,a) values (971,70);
+insert into t (id,a) values (971,71);
+insert into t (id,a) values (971,72);
+insert into t (id,a) values (971,73);
+insert into t (id,a) values (971,74);
+insert into t (id,a) values (971,75);
+insert into t (id,a) values (971,76);
+insert into t (id,a) values (971,77);
+insert into t (id,a) values (971,78);
+insert into t (id,a) values (971,79);
+insert into t (id,a) values (971,80);
+insert into t (id,a) values (971,81);
+insert into t (id,a) values (971,82);
+insert into t (id,a) values (971,83);
+insert into t (id,a) values (971,84);
+insert into t (id,a) values (971,85);
+insert into t (id,a) values (971,86);
+insert into t (id,a) values (971,87);
+insert into t (id,a) values (971,88);
+insert into t (id,a) values (971,89);
+insert into t (id,a) values (971,90);
+insert into t (id,a) values (971,91);
+insert into t (id,a) values (971,92);
+insert into t (id,a) values (971,93);
+insert into t (id,a) values (971,94);
+insert into t (id,a) values (971,95);
+insert into t (id,a) values (971,96);
+insert into t (id,a) values (971,97);
+insert into t (id,a) values (971,98);
+insert into t (id,a) values (971,99);
+insert into t (id,a) values (972,0);
+insert into t (id,a) values (972,1);
+insert into t (id,a) values (972,2);
+insert into t (id,a) values (972,3);
+insert into t (id,a) values (972,4);
+insert into t (id,a) values (972,5);
+insert into t (id,a) values (972,6);
+insert into t (id,a) values (972,7);
+insert into t (id,a) values (972,8);
+insert into t (id,a) values (972,9);
+insert into t (id,a) values (972,10);
+insert into t (id,a) values (972,11);
+insert into t (id,a) values (972,12);
+insert into t (id,a) values (972,13);
+insert into t (id,a) values (972,14);
+insert into t (id,a) values (972,15);
+insert into t (id,a) values (972,16);
+insert into t (id,a) values (972,17);
+insert into t (id,a) values (972,18);
+insert into t (id,a) values (972,19);
+insert into t (id,a) values (972,20);
+insert into t (id,a) values (972,21);
+insert into t (id,a) values (972,22);
+insert into t (id,a) values (972,23);
+insert into t (id,a) values (972,24);
+insert into t (id,a) values (972,25);
+insert into t (id,a) values (972,26);
+insert into t (id,a) values (972,27);
+insert into t (id,a) values (972,28);
+insert into t (id,a) values (972,29);
+insert into t (id,a) values (972,30);
+insert into t (id,a) values (972,31);
+insert into t (id,a) values (972,32);
+insert into t (id,a) values (972,33);
+insert into t (id,a) values (972,34);
+insert into t (id,a) values (972,35);
+insert into t (id,a) values (972,36);
+insert into t (id,a) values (972,37);
+insert into t (id,a) values (972,38);
+insert into t (id,a) values (972,39);
+insert into t (id,a) values (972,40);
+insert into t (id,a) values (972,41);
+insert into t (id,a) values (972,42);
+insert into t (id,a) values (972,43);
+insert into t (id,a) values (972,44);
+insert into t (id,a) values (972,45);
+insert into t (id,a) values (972,46);
+insert into t (id,a) values (972,47);
+insert into t (id,a) values (972,48);
+insert into t (id,a) values (972,49);
+insert into t (id,a) values (972,50);
+insert into t (id,a) values (972,51);
+insert into t (id,a) values (972,52);
+insert into t (id,a) values (972,53);
+insert into t (id,a) values (972,54);
+insert into t (id,a) values (972,55);
+insert into t (id,a) values (972,56);
+insert into t (id,a) values (972,57);
+insert into t (id,a) values (972,58);
+insert into t (id,a) values (972,59);
+insert into t (id,a) values (972,60);
+insert into t (id,a) values (972,61);
+insert into t (id,a) values (972,62);
+insert into t (id,a) values (972,63);
+insert into t (id,a) values (972,64);
+insert into t (id,a) values (972,65);
+insert into t (id,a) values (972,66);
+insert into t (id,a) values (972,67);
+insert into t (id,a) values (972,68);
+insert into t (id,a) values (972,69);
+insert into t (id,a) values (972,70);
+insert into t (id,a) values (972,71);
+insert into t (id,a) values (972,72);
+insert into t (id,a) values (972,73);
+insert into t (id,a) values (972,74);
+insert into t (id,a) values (972,75);
+insert into t (id,a) values (972,76);
+insert into t (id,a) values (972,77);
+insert into t (id,a) values (972,78);
+insert into t (id,a) values (972,79);
+insert into t (id,a) values (972,80);
+insert into t (id,a) values (972,81);
+insert into t (id,a) values (972,82);
+insert into t (id,a) values (972,83);
+insert into t (id,a) values (972,84);
+insert into t (id,a) values (972,85);
+insert into t (id,a) values (972,86);
+insert into t (id,a) values (972,87);
+insert into t (id,a) values (972,88);
+insert into t (id,a) values (972,89);
+insert into t (id,a) values (972,90);
+insert into t (id,a) values (972,91);
+insert into t (id,a) values (972,92);
+insert into t (id,a) values (972,93);
+insert into t (id,a) values (972,94);
+insert into t (id,a) values (972,95);
+insert into t (id,a) values (972,96);
+insert into t (id,a) values (972,97);
+insert into t (id,a) values (972,98);
+insert into t (id,a) values (972,99);
+insert into t (id,a) values (973,0);
+insert into t (id,a) values (973,1);
+insert into t (id,a) values (973,2);
+insert into t (id,a) values (973,3);
+insert into t (id,a) values (973,4);
+insert into t (id,a) values (973,5);
+insert into t (id,a) values (973,6);
+insert into t (id,a) values (973,7);
+insert into t (id,a) values (973,8);
+insert into t (id,a) values (973,9);
+insert into t (id,a) values (973,10);
+insert into t (id,a) values (973,11);
+insert into t (id,a) values (973,12);
+insert into t (id,a) values (973,13);
+insert into t (id,a) values (973,14);
+insert into t (id,a) values (973,15);
+insert into t (id,a) values (973,16);
+insert into t (id,a) values (973,17);
+insert into t (id,a) values (973,18);
+insert into t (id,a) values (973,19);
+insert into t (id,a) values (973,20);
+insert into t (id,a) values (973,21);
+insert into t (id,a) values (973,22);
+insert into t (id,a) values (973,23);
+insert into t (id,a) values (973,24);
+insert into t (id,a) values (973,25);
+insert into t (id,a) values (973,26);
+insert into t (id,a) values (973,27);
+insert into t (id,a) values (973,28);
+insert into t (id,a) values (973,29);
+insert into t (id,a) values (973,30);
+insert into t (id,a) values (973,31);
+insert into t (id,a) values (973,32);
+insert into t (id,a) values (973,33);
+insert into t (id,a) values (973,34);
+insert into t (id,a) values (973,35);
+insert into t (id,a) values (973,36);
+insert into t (id,a) values (973,37);
+insert into t (id,a) values (973,38);
+insert into t (id,a) values (973,39);
+insert into t (id,a) values (973,40);
+insert into t (id,a) values (973,41);
+insert into t (id,a) values (973,42);
+insert into t (id,a) values (973,43);
+insert into t (id,a) values (973,44);
+insert into t (id,a) values (973,45);
+insert into t (id,a) values (973,46);
+insert into t (id,a) values (973,47);
+insert into t (id,a) values (973,48);
+insert into t (id,a) values (973,49);
+insert into t (id,a) values (973,50);
+insert into t (id,a) values (973,51);
+insert into t (id,a) values (973,52);
+insert into t (id,a) values (973,53);
+insert into t (id,a) values (973,54);
+insert into t (id,a) values (973,55);
+insert into t (id,a) values (973,56);
+insert into t (id,a) values (973,57);
+insert into t (id,a) values (973,58);
+insert into t (id,a) values (973,59);
+insert into t (id,a) values (973,60);
+insert into t (id,a) values (973,61);
+insert into t (id,a) values (973,62);
+insert into t (id,a) values (973,63);
+insert into t (id,a) values (973,64);
+insert into t (id,a) values (973,65);
+insert into t (id,a) values (973,66);
+insert into t (id,a) values (973,67);
+insert into t (id,a) values (973,68);
+insert into t (id,a) values (973,69);
+insert into t (id,a) values (973,70);
+insert into t (id,a) values (973,71);
+insert into t (id,a) values (973,72);
+insert into t (id,a) values (973,73);
+insert into t (id,a) values (973,74);
+insert into t (id,a) values (973,75);
+insert into t (id,a) values (973,76);
+insert into t (id,a) values (973,77);
+insert into t (id,a) values (973,78);
+insert into t (id,a) values (973,79);
+insert into t (id,a) values (973,80);
+insert into t (id,a) values (973,81);
+insert into t (id,a) values (973,82);
+insert into t (id,a) values (973,83);
+insert into t (id,a) values (973,84);
+insert into t (id,a) values (973,85);
+insert into t (id,a) values (973,86);
+insert into t (id,a) values (973,87);
+insert into t (id,a) values (973,88);
+insert into t (id,a) values (973,89);
+insert into t (id,a) values (973,90);
+insert into t (id,a) values (973,91);
+insert into t (id,a) values (973,92);
+insert into t (id,a) values (973,93);
+insert into t (id,a) values (973,94);
+insert into t (id,a) values (973,95);
+insert into t (id,a) values (973,96);
+insert into t (id,a) values (973,97);
+insert into t (id,a) values (973,98);
+insert into t (id,a) values (973,99);
+insert into t (id,a) values (974,0);
+insert into t (id,a) values (974,1);
+insert into t (id,a) values (974,2);
+insert into t (id,a) values (974,3);
+insert into t (id,a) values (974,4);
+insert into t (id,a) values (974,5);
+insert into t (id,a) values (974,6);
+insert into t (id,a) values (974,7);
+insert into t (id,a) values (974,8);
+insert into t (id,a) values (974,9);
+insert into t (id,a) values (974,10);
+insert into t (id,a) values (974,11);
+insert into t (id,a) values (974,12);
+insert into t (id,a) values (974,13);
+insert into t (id,a) values (974,14);
+insert into t (id,a) values (974,15);
+insert into t (id,a) values (974,16);
+insert into t (id,a) values (974,17);
+insert into t (id,a) values (974,18);
+insert into t (id,a) values (974,19);
+insert into t (id,a) values (974,20);
+insert into t (id,a) values (974,21);
+insert into t (id,a) values (974,22);
+insert into t (id,a) values (974,23);
+insert into t (id,a) values (974,24);
+insert into t (id,a) values (974,25);
+insert into t (id,a) values (974,26);
+insert into t (id,a) values (974,27);
+insert into t (id,a) values (974,28);
+insert into t (id,a) values (974,29);
+insert into t (id,a) values (974,30);
+insert into t (id,a) values (974,31);
+insert into t (id,a) values (974,32);
+insert into t (id,a) values (974,33);
+insert into t (id,a) values (974,34);
+insert into t (id,a) values (974,35);
+insert into t (id,a) values (974,36);
+insert into t (id,a) values (974,37);
+insert into t (id,a) values (974,38);
+insert into t (id,a) values (974,39);
+insert into t (id,a) values (974,40);
+insert into t (id,a) values (974,41);
+insert into t (id,a) values (974,42);
+insert into t (id,a) values (974,43);
+insert into t (id,a) values (974,44);
+insert into t (id,a) values (974,45);
+insert into t (id,a) values (974,46);
+insert into t (id,a) values (974,47);
+insert into t (id,a) values (974,48);
+insert into t (id,a) values (974,49);
+insert into t (id,a) values (974,50);
+insert into t (id,a) values (974,51);
+insert into t (id,a) values (974,52);
+insert into t (id,a) values (974,53);
+insert into t (id,a) values (974,54);
+insert into t (id,a) values (974,55);
+insert into t (id,a) values (974,56);
+insert into t (id,a) values (974,57);
+insert into t (id,a) values (974,58);
+insert into t (id,a) values (974,59);
+insert into t (id,a) values (974,60);
+insert into t (id,a) values (974,61);
+insert into t (id,a) values (974,62);
+insert into t (id,a) values (974,63);
+insert into t (id,a) values (974,64);
+insert into t (id,a) values (974,65);
+insert into t (id,a) values (974,66);
+insert into t (id,a) values (974,67);
+insert into t (id,a) values (974,68);
+insert into t (id,a) values (974,69);
+insert into t (id,a) values (974,70);
+insert into t (id,a) values (974,71);
+insert into t (id,a) values (974,72);
+insert into t (id,a) values (974,73);
+insert into t (id,a) values (974,74);
+insert into t (id,a) values (974,75);
+insert into t (id,a) values (974,76);
+insert into t (id,a) values (974,77);
+insert into t (id,a) values (974,78);
+insert into t (id,a) values (974,79);
+insert into t (id,a) values (974,80);
+insert into t (id,a) values (974,81);
+insert into t (id,a) values (974,82);
+insert into t (id,a) values (974,83);
+insert into t (id,a) values (974,84);
+insert into t (id,a) values (974,85);
+insert into t (id,a) values (974,86);
+insert into t (id,a) values (974,87);
+insert into t (id,a) values (974,88);
+insert into t (id,a) values (974,89);
+insert into t (id,a) values (974,90);
+insert into t (id,a) values (974,91);
+insert into t (id,a) values (974,92);
+insert into t (id,a) values (974,93);
+insert into t (id,a) values (974,94);
+insert into t (id,a) values (974,95);
+insert into t (id,a) values (974,96);
+insert into t (id,a) values (974,97);
+insert into t (id,a) values (974,98);
+insert into t (id,a) values (974,99);
+insert into t (id,a) values (975,0);
+insert into t (id,a) values (975,1);
+insert into t (id,a) values (975,2);
+insert into t (id,a) values (975,3);
+insert into t (id,a) values (975,4);
+insert into t (id,a) values (975,5);
+insert into t (id,a) values (975,6);
+insert into t (id,a) values (975,7);
+insert into t (id,a) values (975,8);
+insert into t (id,a) values (975,9);
+insert into t (id,a) values (975,10);
+insert into t (id,a) values (975,11);
+insert into t (id,a) values (975,12);
+insert into t (id,a) values (975,13);
+insert into t (id,a) values (975,14);
+insert into t (id,a) values (975,15);
+insert into t (id,a) values (975,16);
+insert into t (id,a) values (975,17);
+insert into t (id,a) values (975,18);
+insert into t (id,a) values (975,19);
+insert into t (id,a) values (975,20);
+insert into t (id,a) values (975,21);
+insert into t (id,a) values (975,22);
+insert into t (id,a) values (975,23);
+insert into t (id,a) values (975,24);
+insert into t (id,a) values (975,25);
+insert into t (id,a) values (975,26);
+insert into t (id,a) values (975,27);
+insert into t (id,a) values (975,28);
+insert into t (id,a) values (975,29);
+insert into t (id,a) values (975,30);
+insert into t (id,a) values (975,31);
+insert into t (id,a) values (975,32);
+insert into t (id,a) values (975,33);
+insert into t (id,a) values (975,34);
+insert into t (id,a) values (975,35);
+insert into t (id,a) values (975,36);
+insert into t (id,a) values (975,37);
+insert into t (id,a) values (975,38);
+insert into t (id,a) values (975,39);
+insert into t (id,a) values (975,40);
+insert into t (id,a) values (975,41);
+insert into t (id,a) values (975,42);
+insert into t (id,a) values (975,43);
+insert into t (id,a) values (975,44);
+insert into t (id,a) values (975,45);
+insert into t (id,a) values (975,46);
+insert into t (id,a) values (975,47);
+insert into t (id,a) values (975,48);
+insert into t (id,a) values (975,49);
+insert into t (id,a) values (975,50);
+insert into t (id,a) values (975,51);
+insert into t (id,a) values (975,52);
+insert into t (id,a) values (975,53);
+insert into t (id,a) values (975,54);
+insert into t (id,a) values (975,55);
+insert into t (id,a) values (975,56);
+insert into t (id,a) values (975,57);
+insert into t (id,a) values (975,58);
+insert into t (id,a) values (975,59);
+insert into t (id,a) values (975,60);
+insert into t (id,a) values (975,61);
+insert into t (id,a) values (975,62);
+insert into t (id,a) values (975,63);
+insert into t (id,a) values (975,64);
+insert into t (id,a) values (975,65);
+insert into t (id,a) values (975,66);
+insert into t (id,a) values (975,67);
+insert into t (id,a) values (975,68);
+insert into t (id,a) values (975,69);
+insert into t (id,a) values (975,70);
+insert into t (id,a) values (975,71);
+insert into t (id,a) values (975,72);
+insert into t (id,a) values (975,73);
+insert into t (id,a) values (975,74);
+insert into t (id,a) values (975,75);
+insert into t (id,a) values (975,76);
+insert into t (id,a) values (975,77);
+insert into t (id,a) values (975,78);
+insert into t (id,a) values (975,79);
+insert into t (id,a) values (975,80);
+insert into t (id,a) values (975,81);
+insert into t (id,a) values (975,82);
+insert into t (id,a) values (975,83);
+insert into t (id,a) values (975,84);
+insert into t (id,a) values (975,85);
+insert into t (id,a) values (975,86);
+insert into t (id,a) values (975,87);
+insert into t (id,a) values (975,88);
+insert into t (id,a) values (975,89);
+insert into t (id,a) values (975,90);
+insert into t (id,a) values (975,91);
+insert into t (id,a) values (975,92);
+insert into t (id,a) values (975,93);
+insert into t (id,a) values (975,94);
+insert into t (id,a) values (975,95);
+insert into t (id,a) values (975,96);
+insert into t (id,a) values (975,97);
+insert into t (id,a) values (975,98);
+insert into t (id,a) values (975,99);
+insert into t (id,a) values (976,0);
+insert into t (id,a) values (976,1);
+insert into t (id,a) values (976,2);
+insert into t (id,a) values (976,3);
+insert into t (id,a) values (976,4);
+insert into t (id,a) values (976,5);
+insert into t (id,a) values (976,6);
+insert into t (id,a) values (976,7);
+insert into t (id,a) values (976,8);
+insert into t (id,a) values (976,9);
+insert into t (id,a) values (976,10);
+insert into t (id,a) values (976,11);
+insert into t (id,a) values (976,12);
+insert into t (id,a) values (976,13);
+insert into t (id,a) values (976,14);
+insert into t (id,a) values (976,15);
+insert into t (id,a) values (976,16);
+insert into t (id,a) values (976,17);
+insert into t (id,a) values (976,18);
+insert into t (id,a) values (976,19);
+insert into t (id,a) values (976,20);
+insert into t (id,a) values (976,21);
+insert into t (id,a) values (976,22);
+insert into t (id,a) values (976,23);
+insert into t (id,a) values (976,24);
+insert into t (id,a) values (976,25);
+insert into t (id,a) values (976,26);
+insert into t (id,a) values (976,27);
+insert into t (id,a) values (976,28);
+insert into t (id,a) values (976,29);
+insert into t (id,a) values (976,30);
+insert into t (id,a) values (976,31);
+insert into t (id,a) values (976,32);
+insert into t (id,a) values (976,33);
+insert into t (id,a) values (976,34);
+insert into t (id,a) values (976,35);
+insert into t (id,a) values (976,36);
+insert into t (id,a) values (976,37);
+insert into t (id,a) values (976,38);
+insert into t (id,a) values (976,39);
+insert into t (id,a) values (976,40);
+insert into t (id,a) values (976,41);
+insert into t (id,a) values (976,42);
+insert into t (id,a) values (976,43);
+insert into t (id,a) values (976,44);
+insert into t (id,a) values (976,45);
+insert into t (id,a) values (976,46);
+insert into t (id,a) values (976,47);
+insert into t (id,a) values (976,48);
+insert into t (id,a) values (976,49);
+insert into t (id,a) values (976,50);
+insert into t (id,a) values (976,51);
+insert into t (id,a) values (976,52);
+insert into t (id,a) values (976,53);
+insert into t (id,a) values (976,54);
+insert into t (id,a) values (976,55);
+insert into t (id,a) values (976,56);
+insert into t (id,a) values (976,57);
+insert into t (id,a) values (976,58);
+insert into t (id,a) values (976,59);
+insert into t (id,a) values (976,60);
+insert into t (id,a) values (976,61);
+insert into t (id,a) values (976,62);
+insert into t (id,a) values (976,63);
+insert into t (id,a) values (976,64);
+insert into t (id,a) values (976,65);
+insert into t (id,a) values (976,66);
+insert into t (id,a) values (976,67);
+insert into t (id,a) values (976,68);
+insert into t (id,a) values (976,69);
+insert into t (id,a) values (976,70);
+insert into t (id,a) values (976,71);
+insert into t (id,a) values (976,72);
+insert into t (id,a) values (976,73);
+insert into t (id,a) values (976,74);
+insert into t (id,a) values (976,75);
+insert into t (id,a) values (976,76);
+insert into t (id,a) values (976,77);
+insert into t (id,a) values (976,78);
+insert into t (id,a) values (976,79);
+insert into t (id,a) values (976,80);
+insert into t (id,a) values (976,81);
+insert into t (id,a) values (976,82);
+insert into t (id,a) values (976,83);
+insert into t (id,a) values (976,84);
+insert into t (id,a) values (976,85);
+insert into t (id,a) values (976,86);
+insert into t (id,a) values (976,87);
+insert into t (id,a) values (976,88);
+insert into t (id,a) values (976,89);
+insert into t (id,a) values (976,90);
+insert into t (id,a) values (976,91);
+insert into t (id,a) values (976,92);
+insert into t (id,a) values (976,93);
+insert into t (id,a) values (976,94);
+insert into t (id,a) values (976,95);
+insert into t (id,a) values (976,96);
+insert into t (id,a) values (976,97);
+insert into t (id,a) values (976,98);
+insert into t (id,a) values (976,99);
+insert into t (id,a) values (977,0);
+insert into t (id,a) values (977,1);
+insert into t (id,a) values (977,2);
+insert into t (id,a) values (977,3);
+insert into t (id,a) values (977,4);
+insert into t (id,a) values (977,5);
+insert into t (id,a) values (977,6);
+insert into t (id,a) values (977,7);
+insert into t (id,a) values (977,8);
+insert into t (id,a) values (977,9);
+insert into t (id,a) values (977,10);
+insert into t (id,a) values (977,11);
+insert into t (id,a) values (977,12);
+insert into t (id,a) values (977,13);
+insert into t (id,a) values (977,14);
+insert into t (id,a) values (977,15);
+insert into t (id,a) values (977,16);
+insert into t (id,a) values (977,17);
+insert into t (id,a) values (977,18);
+insert into t (id,a) values (977,19);
+insert into t (id,a) values (977,20);
+insert into t (id,a) values (977,21);
+insert into t (id,a) values (977,22);
+insert into t (id,a) values (977,23);
+insert into t (id,a) values (977,24);
+insert into t (id,a) values (977,25);
+insert into t (id,a) values (977,26);
+insert into t (id,a) values (977,27);
+insert into t (id,a) values (977,28);
+insert into t (id,a) values (977,29);
+insert into t (id,a) values (977,30);
+insert into t (id,a) values (977,31);
+insert into t (id,a) values (977,32);
+insert into t (id,a) values (977,33);
+insert into t (id,a) values (977,34);
+insert into t (id,a) values (977,35);
+insert into t (id,a) values (977,36);
+insert into t (id,a) values (977,37);
+insert into t (id,a) values (977,38);
+insert into t (id,a) values (977,39);
+insert into t (id,a) values (977,40);
+insert into t (id,a) values (977,41);
+insert into t (id,a) values (977,42);
+insert into t (id,a) values (977,43);
+insert into t (id,a) values (977,44);
+insert into t (id,a) values (977,45);
+insert into t (id,a) values (977,46);
+insert into t (id,a) values (977,47);
+insert into t (id,a) values (977,48);
+insert into t (id,a) values (977,49);
+insert into t (id,a) values (977,50);
+insert into t (id,a) values (977,51);
+insert into t (id,a) values (977,52);
+insert into t (id,a) values (977,53);
+insert into t (id,a) values (977,54);
+insert into t (id,a) values (977,55);
+insert into t (id,a) values (977,56);
+insert into t (id,a) values (977,57);
+insert into t (id,a) values (977,58);
+insert into t (id,a) values (977,59);
+insert into t (id,a) values (977,60);
+insert into t (id,a) values (977,61);
+insert into t (id,a) values (977,62);
+insert into t (id,a) values (977,63);
+insert into t (id,a) values (977,64);
+insert into t (id,a) values (977,65);
+insert into t (id,a) values (977,66);
+insert into t (id,a) values (977,67);
+insert into t (id,a) values (977,68);
+insert into t (id,a) values (977,69);
+insert into t (id,a) values (977,70);
+insert into t (id,a) values (977,71);
+insert into t (id,a) values (977,72);
+insert into t (id,a) values (977,73);
+insert into t (id,a) values (977,74);
+insert into t (id,a) values (977,75);
+insert into t (id,a) values (977,76);
+insert into t (id,a) values (977,77);
+insert into t (id,a) values (977,78);
+insert into t (id,a) values (977,79);
+insert into t (id,a) values (977,80);
+insert into t (id,a) values (977,81);
+insert into t (id,a) values (977,82);
+insert into t (id,a) values (977,83);
+insert into t (id,a) values (977,84);
+insert into t (id,a) values (977,85);
+insert into t (id,a) values (977,86);
+insert into t (id,a) values (977,87);
+insert into t (id,a) values (977,88);
+insert into t (id,a) values (977,89);
+insert into t (id,a) values (977,90);
+insert into t (id,a) values (977,91);
+insert into t (id,a) values (977,92);
+insert into t (id,a) values (977,93);
+insert into t (id,a) values (977,94);
+insert into t (id,a) values (977,95);
+insert into t (id,a) values (977,96);
+insert into t (id,a) values (977,97);
+insert into t (id,a) values (977,98);
+insert into t (id,a) values (977,99);
+insert into t (id,a) values (978,0);
+insert into t (id,a) values (978,1);
+insert into t (id,a) values (978,2);
+insert into t (id,a) values (978,3);
+insert into t (id,a) values (978,4);
+insert into t (id,a) values (978,5);
+insert into t (id,a) values (978,6);
+insert into t (id,a) values (978,7);
+insert into t (id,a) values (978,8);
+insert into t (id,a) values (978,9);
+insert into t (id,a) values (978,10);
+insert into t (id,a) values (978,11);
+insert into t (id,a) values (978,12);
+insert into t (id,a) values (978,13);
+insert into t (id,a) values (978,14);
+insert into t (id,a) values (978,15);
+insert into t (id,a) values (978,16);
+insert into t (id,a) values (978,17);
+insert into t (id,a) values (978,18);
+insert into t (id,a) values (978,19);
+insert into t (id,a) values (978,20);
+insert into t (id,a) values (978,21);
+insert into t (id,a) values (978,22);
+insert into t (id,a) values (978,23);
+insert into t (id,a) values (978,24);
+insert into t (id,a) values (978,25);
+insert into t (id,a) values (978,26);
+insert into t (id,a) values (978,27);
+insert into t (id,a) values (978,28);
+insert into t (id,a) values (978,29);
+insert into t (id,a) values (978,30);
+insert into t (id,a) values (978,31);
+insert into t (id,a) values (978,32);
+insert into t (id,a) values (978,33);
+insert into t (id,a) values (978,34);
+insert into t (id,a) values (978,35);
+insert into t (id,a) values (978,36);
+insert into t (id,a) values (978,37);
+insert into t (id,a) values (978,38);
+insert into t (id,a) values (978,39);
+insert into t (id,a) values (978,40);
+insert into t (id,a) values (978,41);
+insert into t (id,a) values (978,42);
+insert into t (id,a) values (978,43);
+insert into t (id,a) values (978,44);
+insert into t (id,a) values (978,45);
+insert into t (id,a) values (978,46);
+insert into t (id,a) values (978,47);
+insert into t (id,a) values (978,48);
+insert into t (id,a) values (978,49);
+insert into t (id,a) values (978,50);
+insert into t (id,a) values (978,51);
+insert into t (id,a) values (978,52);
+insert into t (id,a) values (978,53);
+insert into t (id,a) values (978,54);
+insert into t (id,a) values (978,55);
+insert into t (id,a) values (978,56);
+insert into t (id,a) values (978,57);
+insert into t (id,a) values (978,58);
+insert into t (id,a) values (978,59);
+insert into t (id,a) values (978,60);
+insert into t (id,a) values (978,61);
+insert into t (id,a) values (978,62);
+insert into t (id,a) values (978,63);
+insert into t (id,a) values (978,64);
+insert into t (id,a) values (978,65);
+insert into t (id,a) values (978,66);
+insert into t (id,a) values (978,67);
+insert into t (id,a) values (978,68);
+insert into t (id,a) values (978,69);
+insert into t (id,a) values (978,70);
+insert into t (id,a) values (978,71);
+insert into t (id,a) values (978,72);
+insert into t (id,a) values (978,73);
+insert into t (id,a) values (978,74);
+insert into t (id,a) values (978,75);
+insert into t (id,a) values (978,76);
+insert into t (id,a) values (978,77);
+insert into t (id,a) values (978,78);
+insert into t (id,a) values (978,79);
+insert into t (id,a) values (978,80);
+insert into t (id,a) values (978,81);
+insert into t (id,a) values (978,82);
+insert into t (id,a) values (978,83);
+insert into t (id,a) values (978,84);
+insert into t (id,a) values (978,85);
+insert into t (id,a) values (978,86);
+insert into t (id,a) values (978,87);
+insert into t (id,a) values (978,88);
+insert into t (id,a) values (978,89);
+insert into t (id,a) values (978,90);
+insert into t (id,a) values (978,91);
+insert into t (id,a) values (978,92);
+insert into t (id,a) values (978,93);
+insert into t (id,a) values (978,94);
+insert into t (id,a) values (978,95);
+insert into t (id,a) values (978,96);
+insert into t (id,a) values (978,97);
+insert into t (id,a) values (978,98);
+insert into t (id,a) values (978,99);
+insert into t (id,a) values (979,0);
+insert into t (id,a) values (979,1);
+insert into t (id,a) values (979,2);
+insert into t (id,a) values (979,3);
+insert into t (id,a) values (979,4);
+insert into t (id,a) values (979,5);
+insert into t (id,a) values (979,6);
+insert into t (id,a) values (979,7);
+insert into t (id,a) values (979,8);
+insert into t (id,a) values (979,9);
+insert into t (id,a) values (979,10);
+insert into t (id,a) values (979,11);
+insert into t (id,a) values (979,12);
+insert into t (id,a) values (979,13);
+insert into t (id,a) values (979,14);
+insert into t (id,a) values (979,15);
+insert into t (id,a) values (979,16);
+insert into t (id,a) values (979,17);
+insert into t (id,a) values (979,18);
+insert into t (id,a) values (979,19);
+insert into t (id,a) values (979,20);
+insert into t (id,a) values (979,21);
+insert into t (id,a) values (979,22);
+insert into t (id,a) values (979,23);
+insert into t (id,a) values (979,24);
+insert into t (id,a) values (979,25);
+insert into t (id,a) values (979,26);
+insert into t (id,a) values (979,27);
+insert into t (id,a) values (979,28);
+insert into t (id,a) values (979,29);
+insert into t (id,a) values (979,30);
+insert into t (id,a) values (979,31);
+insert into t (id,a) values (979,32);
+insert into t (id,a) values (979,33);
+insert into t (id,a) values (979,34);
+insert into t (id,a) values (979,35);
+insert into t (id,a) values (979,36);
+insert into t (id,a) values (979,37);
+insert into t (id,a) values (979,38);
+insert into t (id,a) values (979,39);
+insert into t (id,a) values (979,40);
+insert into t (id,a) values (979,41);
+insert into t (id,a) values (979,42);
+insert into t (id,a) values (979,43);
+insert into t (id,a) values (979,44);
+insert into t (id,a) values (979,45);
+insert into t (id,a) values (979,46);
+insert into t (id,a) values (979,47);
+insert into t (id,a) values (979,48);
+insert into t (id,a) values (979,49);
+insert into t (id,a) values (979,50);
+insert into t (id,a) values (979,51);
+insert into t (id,a) values (979,52);
+insert into t (id,a) values (979,53);
+insert into t (id,a) values (979,54);
+insert into t (id,a) values (979,55);
+insert into t (id,a) values (979,56);
+insert into t (id,a) values (979,57);
+insert into t (id,a) values (979,58);
+insert into t (id,a) values (979,59);
+insert into t (id,a) values (979,60);
+insert into t (id,a) values (979,61);
+insert into t (id,a) values (979,62);
+insert into t (id,a) values (979,63);
+insert into t (id,a) values (979,64);
+insert into t (id,a) values (979,65);
+insert into t (id,a) values (979,66);
+insert into t (id,a) values (979,67);
+insert into t (id,a) values (979,68);
+insert into t (id,a) values (979,69);
+insert into t (id,a) values (979,70);
+insert into t (id,a) values (979,71);
+insert into t (id,a) values (979,72);
+insert into t (id,a) values (979,73);
+insert into t (id,a) values (979,74);
+insert into t (id,a) values (979,75);
+insert into t (id,a) values (979,76);
+insert into t (id,a) values (979,77);
+insert into t (id,a) values (979,78);
+insert into t (id,a) values (979,79);
+insert into t (id,a) values (979,80);
+insert into t (id,a) values (979,81);
+insert into t (id,a) values (979,82);
+insert into t (id,a) values (979,83);
+insert into t (id,a) values (979,84);
+insert into t (id,a) values (979,85);
+insert into t (id,a) values (979,86);
+insert into t (id,a) values (979,87);
+insert into t (id,a) values (979,88);
+insert into t (id,a) values (979,89);
+insert into t (id,a) values (979,90);
+insert into t (id,a) values (979,91);
+insert into t (id,a) values (979,92);
+insert into t (id,a) values (979,93);
+insert into t (id,a) values (979,94);
+insert into t (id,a) values (979,95);
+insert into t (id,a) values (979,96);
+insert into t (id,a) values (979,97);
+insert into t (id,a) values (979,98);
+insert into t (id,a) values (979,99);
+insert into t (id,a) values (980,0);
+insert into t (id,a) values (980,1);
+insert into t (id,a) values (980,2);
+insert into t (id,a) values (980,3);
+insert into t (id,a) values (980,4);
+insert into t (id,a) values (980,5);
+insert into t (id,a) values (980,6);
+insert into t (id,a) values (980,7);
+insert into t (id,a) values (980,8);
+insert into t (id,a) values (980,9);
+insert into t (id,a) values (980,10);
+insert into t (id,a) values (980,11);
+insert into t (id,a) values (980,12);
+insert into t (id,a) values (980,13);
+insert into t (id,a) values (980,14);
+insert into t (id,a) values (980,15);
+insert into t (id,a) values (980,16);
+insert into t (id,a) values (980,17);
+insert into t (id,a) values (980,18);
+insert into t (id,a) values (980,19);
+insert into t (id,a) values (980,20);
+insert into t (id,a) values (980,21);
+insert into t (id,a) values (980,22);
+insert into t (id,a) values (980,23);
+insert into t (id,a) values (980,24);
+insert into t (id,a) values (980,25);
+insert into t (id,a) values (980,26);
+insert into t (id,a) values (980,27);
+insert into t (id,a) values (980,28);
+insert into t (id,a) values (980,29);
+insert into t (id,a) values (980,30);
+insert into t (id,a) values (980,31);
+insert into t (id,a) values (980,32);
+insert into t (id,a) values (980,33);
+insert into t (id,a) values (980,34);
+insert into t (id,a) values (980,35);
+insert into t (id,a) values (980,36);
+insert into t (id,a) values (980,37);
+insert into t (id,a) values (980,38);
+insert into t (id,a) values (980,39);
+insert into t (id,a) values (980,40);
+insert into t (id,a) values (980,41);
+insert into t (id,a) values (980,42);
+insert into t (id,a) values (980,43);
+insert into t (id,a) values (980,44);
+insert into t (id,a) values (980,45);
+insert into t (id,a) values (980,46);
+insert into t (id,a) values (980,47);
+insert into t (id,a) values (980,48);
+insert into t (id,a) values (980,49);
+insert into t (id,a) values (980,50);
+insert into t (id,a) values (980,51);
+insert into t (id,a) values (980,52);
+insert into t (id,a) values (980,53);
+insert into t (id,a) values (980,54);
+insert into t (id,a) values (980,55);
+insert into t (id,a) values (980,56);
+insert into t (id,a) values (980,57);
+insert into t (id,a) values (980,58);
+insert into t (id,a) values (980,59);
+insert into t (id,a) values (980,60);
+insert into t (id,a) values (980,61);
+insert into t (id,a) values (980,62);
+insert into t (id,a) values (980,63);
+insert into t (id,a) values (980,64);
+insert into t (id,a) values (980,65);
+insert into t (id,a) values (980,66);
+insert into t (id,a) values (980,67);
+insert into t (id,a) values (980,68);
+insert into t (id,a) values (980,69);
+insert into t (id,a) values (980,70);
+insert into t (id,a) values (980,71);
+insert into t (id,a) values (980,72);
+insert into t (id,a) values (980,73);
+insert into t (id,a) values (980,74);
+insert into t (id,a) values (980,75);
+insert into t (id,a) values (980,76);
+insert into t (id,a) values (980,77);
+insert into t (id,a) values (980,78);
+insert into t (id,a) values (980,79);
+insert into t (id,a) values (980,80);
+insert into t (id,a) values (980,81);
+insert into t (id,a) values (980,82);
+insert into t (id,a) values (980,83);
+insert into t (id,a) values (980,84);
+insert into t (id,a) values (980,85);
+insert into t (id,a) values (980,86);
+insert into t (id,a) values (980,87);
+insert into t (id,a) values (980,88);
+insert into t (id,a) values (980,89);
+insert into t (id,a) values (980,90);
+insert into t (id,a) values (980,91);
+insert into t (id,a) values (980,92);
+insert into t (id,a) values (980,93);
+insert into t (id,a) values (980,94);
+insert into t (id,a) values (980,95);
+insert into t (id,a) values (980,96);
+insert into t (id,a) values (980,97);
+insert into t (id,a) values (980,98);
+insert into t (id,a) values (980,99);
+insert into t (id,a) values (981,0);
+insert into t (id,a) values (981,1);
+insert into t (id,a) values (981,2);
+insert into t (id,a) values (981,3);
+insert into t (id,a) values (981,4);
+insert into t (id,a) values (981,5);
+insert into t (id,a) values (981,6);
+insert into t (id,a) values (981,7);
+insert into t (id,a) values (981,8);
+insert into t (id,a) values (981,9);
+insert into t (id,a) values (981,10);
+insert into t (id,a) values (981,11);
+insert into t (id,a) values (981,12);
+insert into t (id,a) values (981,13);
+insert into t (id,a) values (981,14);
+insert into t (id,a) values (981,15);
+insert into t (id,a) values (981,16);
+insert into t (id,a) values (981,17);
+insert into t (id,a) values (981,18);
+insert into t (id,a) values (981,19);
+insert into t (id,a) values (981,20);
+insert into t (id,a) values (981,21);
+insert into t (id,a) values (981,22);
+insert into t (id,a) values (981,23);
+insert into t (id,a) values (981,24);
+insert into t (id,a) values (981,25);
+insert into t (id,a) values (981,26);
+insert into t (id,a) values (981,27);
+insert into t (id,a) values (981,28);
+insert into t (id,a) values (981,29);
+insert into t (id,a) values (981,30);
+insert into t (id,a) values (981,31);
+insert into t (id,a) values (981,32);
+insert into t (id,a) values (981,33);
+insert into t (id,a) values (981,34);
+insert into t (id,a) values (981,35);
+insert into t (id,a) values (981,36);
+insert into t (id,a) values (981,37);
+insert into t (id,a) values (981,38);
+insert into t (id,a) values (981,39);
+insert into t (id,a) values (981,40);
+insert into t (id,a) values (981,41);
+insert into t (id,a) values (981,42);
+insert into t (id,a) values (981,43);
+insert into t (id,a) values (981,44);
+insert into t (id,a) values (981,45);
+insert into t (id,a) values (981,46);
+insert into t (id,a) values (981,47);
+insert into t (id,a) values (981,48);
+insert into t (id,a) values (981,49);
+insert into t (id,a) values (981,50);
+insert into t (id,a) values (981,51);
+insert into t (id,a) values (981,52);
+insert into t (id,a) values (981,53);
+insert into t (id,a) values (981,54);
+insert into t (id,a) values (981,55);
+insert into t (id,a) values (981,56);
+insert into t (id,a) values (981,57);
+insert into t (id,a) values (981,58);
+insert into t (id,a) values (981,59);
+insert into t (id,a) values (981,60);
+insert into t (id,a) values (981,61);
+insert into t (id,a) values (981,62);
+insert into t (id,a) values (981,63);
+insert into t (id,a) values (981,64);
+insert into t (id,a) values (981,65);
+insert into t (id,a) values (981,66);
+insert into t (id,a) values (981,67);
+insert into t (id,a) values (981,68);
+insert into t (id,a) values (981,69);
+insert into t (id,a) values (981,70);
+insert into t (id,a) values (981,71);
+insert into t (id,a) values (981,72);
+insert into t (id,a) values (981,73);
+insert into t (id,a) values (981,74);
+insert into t (id,a) values (981,75);
+insert into t (id,a) values (981,76);
+insert into t (id,a) values (981,77);
+insert into t (id,a) values (981,78);
+insert into t (id,a) values (981,79);
+insert into t (id,a) values (981,80);
+insert into t (id,a) values (981,81);
+insert into t (id,a) values (981,82);
+insert into t (id,a) values (981,83);
+insert into t (id,a) values (981,84);
+insert into t (id,a) values (981,85);
+insert into t (id,a) values (981,86);
+insert into t (id,a) values (981,87);
+insert into t (id,a) values (981,88);
+insert into t (id,a) values (981,89);
+insert into t (id,a) values (981,90);
+insert into t (id,a) values (981,91);
+insert into t (id,a) values (981,92);
+insert into t (id,a) values (981,93);
+insert into t (id,a) values (981,94);
+insert into t (id,a) values (981,95);
+insert into t (id,a) values (981,96);
+insert into t (id,a) values (981,97);
+insert into t (id,a) values (981,98);
+insert into t (id,a) values (981,99);
+insert into t (id,a) values (982,0);
+insert into t (id,a) values (982,1);
+insert into t (id,a) values (982,2);
+insert into t (id,a) values (982,3);
+insert into t (id,a) values (982,4);
+insert into t (id,a) values (982,5);
+insert into t (id,a) values (982,6);
+insert into t (id,a) values (982,7);
+insert into t (id,a) values (982,8);
+insert into t (id,a) values (982,9);
+insert into t (id,a) values (982,10);
+insert into t (id,a) values (982,11);
+insert into t (id,a) values (982,12);
+insert into t (id,a) values (982,13);
+insert into t (id,a) values (982,14);
+insert into t (id,a) values (982,15);
+insert into t (id,a) values (982,16);
+insert into t (id,a) values (982,17);
+insert into t (id,a) values (982,18);
+insert into t (id,a) values (982,19);
+insert into t (id,a) values (982,20);
+insert into t (id,a) values (982,21);
+insert into t (id,a) values (982,22);
+insert into t (id,a) values (982,23);
+insert into t (id,a) values (982,24);
+insert into t (id,a) values (982,25);
+insert into t (id,a) values (982,26);
+insert into t (id,a) values (982,27);
+insert into t (id,a) values (982,28);
+insert into t (id,a) values (982,29);
+insert into t (id,a) values (982,30);
+insert into t (id,a) values (982,31);
+insert into t (id,a) values (982,32);
+insert into t (id,a) values (982,33);
+insert into t (id,a) values (982,34);
+insert into t (id,a) values (982,35);
+insert into t (id,a) values (982,36);
+insert into t (id,a) values (982,37);
+insert into t (id,a) values (982,38);
+insert into t (id,a) values (982,39);
+insert into t (id,a) values (982,40);
+insert into t (id,a) values (982,41);
+insert into t (id,a) values (982,42);
+insert into t (id,a) values (982,43);
+insert into t (id,a) values (982,44);
+insert into t (id,a) values (982,45);
+insert into t (id,a) values (982,46);
+insert into t (id,a) values (982,47);
+insert into t (id,a) values (982,48);
+insert into t (id,a) values (982,49);
+insert into t (id,a) values (982,50);
+insert into t (id,a) values (982,51);
+insert into t (id,a) values (982,52);
+insert into t (id,a) values (982,53);
+insert into t (id,a) values (982,54);
+insert into t (id,a) values (982,55);
+insert into t (id,a) values (982,56);
+insert into t (id,a) values (982,57);
+insert into t (id,a) values (982,58);
+insert into t (id,a) values (982,59);
+insert into t (id,a) values (982,60);
+insert into t (id,a) values (982,61);
+insert into t (id,a) values (982,62);
+insert into t (id,a) values (982,63);
+insert into t (id,a) values (982,64);
+insert into t (id,a) values (982,65);
+insert into t (id,a) values (982,66);
+insert into t (id,a) values (982,67);
+insert into t (id,a) values (982,68);
+insert into t (id,a) values (982,69);
+insert into t (id,a) values (982,70);
+insert into t (id,a) values (982,71);
+insert into t (id,a) values (982,72);
+insert into t (id,a) values (982,73);
+insert into t (id,a) values (982,74);
+insert into t (id,a) values (982,75);
+insert into t (id,a) values (982,76);
+insert into t (id,a) values (982,77);
+insert into t (id,a) values (982,78);
+insert into t (id,a) values (982,79);
+insert into t (id,a) values (982,80);
+insert into t (id,a) values (982,81);
+insert into t (id,a) values (982,82);
+insert into t (id,a) values (982,83);
+insert into t (id,a) values (982,84);
+insert into t (id,a) values (982,85);
+insert into t (id,a) values (982,86);
+insert into t (id,a) values (982,87);
+insert into t (id,a) values (982,88);
+insert into t (id,a) values (982,89);
+insert into t (id,a) values (982,90);
+insert into t (id,a) values (982,91);
+insert into t (id,a) values (982,92);
+insert into t (id,a) values (982,93);
+insert into t (id,a) values (982,94);
+insert into t (id,a) values (982,95);
+insert into t (id,a) values (982,96);
+insert into t (id,a) values (982,97);
+insert into t (id,a) values (982,98);
+insert into t (id,a) values (982,99);
+insert into t (id,a) values (983,0);
+insert into t (id,a) values (983,1);
+insert into t (id,a) values (983,2);
+insert into t (id,a) values (983,3);
+insert into t (id,a) values (983,4);
+insert into t (id,a) values (983,5);
+insert into t (id,a) values (983,6);
+insert into t (id,a) values (983,7);
+insert into t (id,a) values (983,8);
+insert into t (id,a) values (983,9);
+insert into t (id,a) values (983,10);
+insert into t (id,a) values (983,11);
+insert into t (id,a) values (983,12);
+insert into t (id,a) values (983,13);
+insert into t (id,a) values (983,14);
+insert into t (id,a) values (983,15);
+insert into t (id,a) values (983,16);
+insert into t (id,a) values (983,17);
+insert into t (id,a) values (983,18);
+insert into t (id,a) values (983,19);
+insert into t (id,a) values (983,20);
+insert into t (id,a) values (983,21);
+insert into t (id,a) values (983,22);
+insert into t (id,a) values (983,23);
+insert into t (id,a) values (983,24);
+insert into t (id,a) values (983,25);
+insert into t (id,a) values (983,26);
+insert into t (id,a) values (983,27);
+insert into t (id,a) values (983,28);
+insert into t (id,a) values (983,29);
+insert into t (id,a) values (983,30);
+insert into t (id,a) values (983,31);
+insert into t (id,a) values (983,32);
+insert into t (id,a) values (983,33);
+insert into t (id,a) values (983,34);
+insert into t (id,a) values (983,35);
+insert into t (id,a) values (983,36);
+insert into t (id,a) values (983,37);
+insert into t (id,a) values (983,38);
+insert into t (id,a) values (983,39);
+insert into t (id,a) values (983,40);
+insert into t (id,a) values (983,41);
+insert into t (id,a) values (983,42);
+insert into t (id,a) values (983,43);
+insert into t (id,a) values (983,44);
+insert into t (id,a) values (983,45);
+insert into t (id,a) values (983,46);
+insert into t (id,a) values (983,47);
+insert into t (id,a) values (983,48);
+insert into t (id,a) values (983,49);
+insert into t (id,a) values (983,50);
+insert into t (id,a) values (983,51);
+insert into t (id,a) values (983,52);
+insert into t (id,a) values (983,53);
+insert into t (id,a) values (983,54);
+insert into t (id,a) values (983,55);
+insert into t (id,a) values (983,56);
+insert into t (id,a) values (983,57);
+insert into t (id,a) values (983,58);
+insert into t (id,a) values (983,59);
+insert into t (id,a) values (983,60);
+insert into t (id,a) values (983,61);
+insert into t (id,a) values (983,62);
+insert into t (id,a) values (983,63);
+insert into t (id,a) values (983,64);
+insert into t (id,a) values (983,65);
+insert into t (id,a) values (983,66);
+insert into t (id,a) values (983,67);
+insert into t (id,a) values (983,68);
+insert into t (id,a) values (983,69);
+insert into t (id,a) values (983,70);
+insert into t (id,a) values (983,71);
+insert into t (id,a) values (983,72);
+insert into t (id,a) values (983,73);
+insert into t (id,a) values (983,74);
+insert into t (id,a) values (983,75);
+insert into t (id,a) values (983,76);
+insert into t (id,a) values (983,77);
+insert into t (id,a) values (983,78);
+insert into t (id,a) values (983,79);
+insert into t (id,a) values (983,80);
+insert into t (id,a) values (983,81);
+insert into t (id,a) values (983,82);
+insert into t (id,a) values (983,83);
+insert into t (id,a) values (983,84);
+insert into t (id,a) values (983,85);
+insert into t (id,a) values (983,86);
+insert into t (id,a) values (983,87);
+insert into t (id,a) values (983,88);
+insert into t (id,a) values (983,89);
+insert into t (id,a) values (983,90);
+insert into t (id,a) values (983,91);
+insert into t (id,a) values (983,92);
+insert into t (id,a) values (983,93);
+insert into t (id,a) values (983,94);
+insert into t (id,a) values (983,95);
+insert into t (id,a) values (983,96);
+insert into t (id,a) values (983,97);
+insert into t (id,a) values (983,98);
+insert into t (id,a) values (983,99);
+insert into t (id,a) values (984,0);
+insert into t (id,a) values (984,1);
+insert into t (id,a) values (984,2);
+insert into t (id,a) values (984,3);
+insert into t (id,a) values (984,4);
+insert into t (id,a) values (984,5);
+insert into t (id,a) values (984,6);
+insert into t (id,a) values (984,7);
+insert into t (id,a) values (984,8);
+insert into t (id,a) values (984,9);
+insert into t (id,a) values (984,10);
+insert into t (id,a) values (984,11);
+insert into t (id,a) values (984,12);
+insert into t (id,a) values (984,13);
+insert into t (id,a) values (984,14);
+insert into t (id,a) values (984,15);
+insert into t (id,a) values (984,16);
+insert into t (id,a) values (984,17);
+insert into t (id,a) values (984,18);
+insert into t (id,a) values (984,19);
+insert into t (id,a) values (984,20);
+insert into t (id,a) values (984,21);
+insert into t (id,a) values (984,22);
+insert into t (id,a) values (984,23);
+insert into t (id,a) values (984,24);
+insert into t (id,a) values (984,25);
+insert into t (id,a) values (984,26);
+insert into t (id,a) values (984,27);
+insert into t (id,a) values (984,28);
+insert into t (id,a) values (984,29);
+insert into t (id,a) values (984,30);
+insert into t (id,a) values (984,31);
+insert into t (id,a) values (984,32);
+insert into t (id,a) values (984,33);
+insert into t (id,a) values (984,34);
+insert into t (id,a) values (984,35);
+insert into t (id,a) values (984,36);
+insert into t (id,a) values (984,37);
+insert into t (id,a) values (984,38);
+insert into t (id,a) values (984,39);
+insert into t (id,a) values (984,40);
+insert into t (id,a) values (984,41);
+insert into t (id,a) values (984,42);
+insert into t (id,a) values (984,43);
+insert into t (id,a) values (984,44);
+insert into t (id,a) values (984,45);
+insert into t (id,a) values (984,46);
+insert into t (id,a) values (984,47);
+insert into t (id,a) values (984,48);
+insert into t (id,a) values (984,49);
+insert into t (id,a) values (984,50);
+insert into t (id,a) values (984,51);
+insert into t (id,a) values (984,52);
+insert into t (id,a) values (984,53);
+insert into t (id,a) values (984,54);
+insert into t (id,a) values (984,55);
+insert into t (id,a) values (984,56);
+insert into t (id,a) values (984,57);
+insert into t (id,a) values (984,58);
+insert into t (id,a) values (984,59);
+insert into t (id,a) values (984,60);
+insert into t (id,a) values (984,61);
+insert into t (id,a) values (984,62);
+insert into t (id,a) values (984,63);
+insert into t (id,a) values (984,64);
+insert into t (id,a) values (984,65);
+insert into t (id,a) values (984,66);
+insert into t (id,a) values (984,67);
+insert into t (id,a) values (984,68);
+insert into t (id,a) values (984,69);
+insert into t (id,a) values (984,70);
+insert into t (id,a) values (984,71);
+insert into t (id,a) values (984,72);
+insert into t (id,a) values (984,73);
+insert into t (id,a) values (984,74);
+insert into t (id,a) values (984,75);
+insert into t (id,a) values (984,76);
+insert into t (id,a) values (984,77);
+insert into t (id,a) values (984,78);
+insert into t (id,a) values (984,79);
+insert into t (id,a) values (984,80);
+insert into t (id,a) values (984,81);
+insert into t (id,a) values (984,82);
+insert into t (id,a) values (984,83);
+insert into t (id,a) values (984,84);
+insert into t (id,a) values (984,85);
+insert into t (id,a) values (984,86);
+insert into t (id,a) values (984,87);
+insert into t (id,a) values (984,88);
+insert into t (id,a) values (984,89);
+insert into t (id,a) values (984,90);
+insert into t (id,a) values (984,91);
+insert into t (id,a) values (984,92);
+insert into t (id,a) values (984,93);
+insert into t (id,a) values (984,94);
+insert into t (id,a) values (984,95);
+insert into t (id,a) values (984,96);
+insert into t (id,a) values (984,97);
+insert into t (id,a) values (984,98);
+insert into t (id,a) values (984,99);
+insert into t (id,a) values (985,0);
+insert into t (id,a) values (985,1);
+insert into t (id,a) values (985,2);
+insert into t (id,a) values (985,3);
+insert into t (id,a) values (985,4);
+insert into t (id,a) values (985,5);
+insert into t (id,a) values (985,6);
+insert into t (id,a) values (985,7);
+insert into t (id,a) values (985,8);
+insert into t (id,a) values (985,9);
+insert into t (id,a) values (985,10);
+insert into t (id,a) values (985,11);
+insert into t (id,a) values (985,12);
+insert into t (id,a) values (985,13);
+insert into t (id,a) values (985,14);
+insert into t (id,a) values (985,15);
+insert into t (id,a) values (985,16);
+insert into t (id,a) values (985,17);
+insert into t (id,a) values (985,18);
+insert into t (id,a) values (985,19);
+insert into t (id,a) values (985,20);
+insert into t (id,a) values (985,21);
+insert into t (id,a) values (985,22);
+insert into t (id,a) values (985,23);
+insert into t (id,a) values (985,24);
+insert into t (id,a) values (985,25);
+insert into t (id,a) values (985,26);
+insert into t (id,a) values (985,27);
+insert into t (id,a) values (985,28);
+insert into t (id,a) values (985,29);
+insert into t (id,a) values (985,30);
+insert into t (id,a) values (985,31);
+insert into t (id,a) values (985,32);
+insert into t (id,a) values (985,33);
+insert into t (id,a) values (985,34);
+insert into t (id,a) values (985,35);
+insert into t (id,a) values (985,36);
+insert into t (id,a) values (985,37);
+insert into t (id,a) values (985,38);
+insert into t (id,a) values (985,39);
+insert into t (id,a) values (985,40);
+insert into t (id,a) values (985,41);
+insert into t (id,a) values (985,42);
+insert into t (id,a) values (985,43);
+insert into t (id,a) values (985,44);
+insert into t (id,a) values (985,45);
+insert into t (id,a) values (985,46);
+insert into t (id,a) values (985,47);
+insert into t (id,a) values (985,48);
+insert into t (id,a) values (985,49);
+insert into t (id,a) values (985,50);
+insert into t (id,a) values (985,51);
+insert into t (id,a) values (985,52);
+insert into t (id,a) values (985,53);
+insert into t (id,a) values (985,54);
+insert into t (id,a) values (985,55);
+insert into t (id,a) values (985,56);
+insert into t (id,a) values (985,57);
+insert into t (id,a) values (985,58);
+insert into t (id,a) values (985,59);
+insert into t (id,a) values (985,60);
+insert into t (id,a) values (985,61);
+insert into t (id,a) values (985,62);
+insert into t (id,a) values (985,63);
+insert into t (id,a) values (985,64);
+insert into t (id,a) values (985,65);
+insert into t (id,a) values (985,66);
+insert into t (id,a) values (985,67);
+insert into t (id,a) values (985,68);
+insert into t (id,a) values (985,69);
+insert into t (id,a) values (985,70);
+insert into t (id,a) values (985,71);
+insert into t (id,a) values (985,72);
+insert into t (id,a) values (985,73);
+insert into t (id,a) values (985,74);
+insert into t (id,a) values (985,75);
+insert into t (id,a) values (985,76);
+insert into t (id,a) values (985,77);
+insert into t (id,a) values (985,78);
+insert into t (id,a) values (985,79);
+insert into t (id,a) values (985,80);
+insert into t (id,a) values (985,81);
+insert into t (id,a) values (985,82);
+insert into t (id,a) values (985,83);
+insert into t (id,a) values (985,84);
+insert into t (id,a) values (985,85);
+insert into t (id,a) values (985,86);
+insert into t (id,a) values (985,87);
+insert into t (id,a) values (985,88);
+insert into t (id,a) values (985,89);
+insert into t (id,a) values (985,90);
+insert into t (id,a) values (985,91);
+insert into t (id,a) values (985,92);
+insert into t (id,a) values (985,93);
+insert into t (id,a) values (985,94);
+insert into t (id,a) values (985,95);
+insert into t (id,a) values (985,96);
+insert into t (id,a) values (985,97);
+insert into t (id,a) values (985,98);
+insert into t (id,a) values (985,99);
+insert into t (id,a) values (986,0);
+insert into t (id,a) values (986,1);
+insert into t (id,a) values (986,2);
+insert into t (id,a) values (986,3);
+insert into t (id,a) values (986,4);
+insert into t (id,a) values (986,5);
+insert into t (id,a) values (986,6);
+insert into t (id,a) values (986,7);
+insert into t (id,a) values (986,8);
+insert into t (id,a) values (986,9);
+insert into t (id,a) values (986,10);
+insert into t (id,a) values (986,11);
+insert into t (id,a) values (986,12);
+insert into t (id,a) values (986,13);
+insert into t (id,a) values (986,14);
+insert into t (id,a) values (986,15);
+insert into t (id,a) values (986,16);
+insert into t (id,a) values (986,17);
+insert into t (id,a) values (986,18);
+insert into t (id,a) values (986,19);
+insert into t (id,a) values (986,20);
+insert into t (id,a) values (986,21);
+insert into t (id,a) values (986,22);
+insert into t (id,a) values (986,23);
+insert into t (id,a) values (986,24);
+insert into t (id,a) values (986,25);
+insert into t (id,a) values (986,26);
+insert into t (id,a) values (986,27);
+insert into t (id,a) values (986,28);
+insert into t (id,a) values (986,29);
+insert into t (id,a) values (986,30);
+insert into t (id,a) values (986,31);
+insert into t (id,a) values (986,32);
+insert into t (id,a) values (986,33);
+insert into t (id,a) values (986,34);
+insert into t (id,a) values (986,35);
+insert into t (id,a) values (986,36);
+insert into t (id,a) values (986,37);
+insert into t (id,a) values (986,38);
+insert into t (id,a) values (986,39);
+insert into t (id,a) values (986,40);
+insert into t (id,a) values (986,41);
+insert into t (id,a) values (986,42);
+insert into t (id,a) values (986,43);
+insert into t (id,a) values (986,44);
+insert into t (id,a) values (986,45);
+insert into t (id,a) values (986,46);
+insert into t (id,a) values (986,47);
+insert into t (id,a) values (986,48);
+insert into t (id,a) values (986,49);
+insert into t (id,a) values (986,50);
+insert into t (id,a) values (986,51);
+insert into t (id,a) values (986,52);
+insert into t (id,a) values (986,53);
+insert into t (id,a) values (986,54);
+insert into t (id,a) values (986,55);
+insert into t (id,a) values (986,56);
+insert into t (id,a) values (986,57);
+insert into t (id,a) values (986,58);
+insert into t (id,a) values (986,59);
+insert into t (id,a) values (986,60);
+insert into t (id,a) values (986,61);
+insert into t (id,a) values (986,62);
+insert into t (id,a) values (986,63);
+insert into t (id,a) values (986,64);
+insert into t (id,a) values (986,65);
+insert into t (id,a) values (986,66);
+insert into t (id,a) values (986,67);
+insert into t (id,a) values (986,68);
+insert into t (id,a) values (986,69);
+insert into t (id,a) values (986,70);
+insert into t (id,a) values (986,71);
+insert into t (id,a) values (986,72);
+insert into t (id,a) values (986,73);
+insert into t (id,a) values (986,74);
+insert into t (id,a) values (986,75);
+insert into t (id,a) values (986,76);
+insert into t (id,a) values (986,77);
+insert into t (id,a) values (986,78);
+insert into t (id,a) values (986,79);
+insert into t (id,a) values (986,80);
+insert into t (id,a) values (986,81);
+insert into t (id,a) values (986,82);
+insert into t (id,a) values (986,83);
+insert into t (id,a) values (986,84);
+insert into t (id,a) values (986,85);
+insert into t (id,a) values (986,86);
+insert into t (id,a) values (986,87);
+insert into t (id,a) values (986,88);
+insert into t (id,a) values (986,89);
+insert into t (id,a) values (986,90);
+insert into t (id,a) values (986,91);
+insert into t (id,a) values (986,92);
+insert into t (id,a) values (986,93);
+insert into t (id,a) values (986,94);
+insert into t (id,a) values (986,95);
+insert into t (id,a) values (986,96);
+insert into t (id,a) values (986,97);
+insert into t (id,a) values (986,98);
+insert into t (id,a) values (986,99);
+insert into t (id,a) values (987,0);
+insert into t (id,a) values (987,1);
+insert into t (id,a) values (987,2);
+insert into t (id,a) values (987,3);
+insert into t (id,a) values (987,4);
+insert into t (id,a) values (987,5);
+insert into t (id,a) values (987,6);
+insert into t (id,a) values (987,7);
+insert into t (id,a) values (987,8);
+insert into t (id,a) values (987,9);
+insert into t (id,a) values (987,10);
+insert into t (id,a) values (987,11);
+insert into t (id,a) values (987,12);
+insert into t (id,a) values (987,13);
+insert into t (id,a) values (987,14);
+insert into t (id,a) values (987,15);
+insert into t (id,a) values (987,16);
+insert into t (id,a) values (987,17);
+insert into t (id,a) values (987,18);
+insert into t (id,a) values (987,19);
+insert into t (id,a) values (987,20);
+insert into t (id,a) values (987,21);
+insert into t (id,a) values (987,22);
+insert into t (id,a) values (987,23);
+insert into t (id,a) values (987,24);
+insert into t (id,a) values (987,25);
+insert into t (id,a) values (987,26);
+insert into t (id,a) values (987,27);
+insert into t (id,a) values (987,28);
+insert into t (id,a) values (987,29);
+insert into t (id,a) values (987,30);
+insert into t (id,a) values (987,31);
+insert into t (id,a) values (987,32);
+insert into t (id,a) values (987,33);
+insert into t (id,a) values (987,34);
+insert into t (id,a) values (987,35);
+insert into t (id,a) values (987,36);
+insert into t (id,a) values (987,37);
+insert into t (id,a) values (987,38);
+insert into t (id,a) values (987,39);
+insert into t (id,a) values (987,40);
+insert into t (id,a) values (987,41);
+insert into t (id,a) values (987,42);
+insert into t (id,a) values (987,43);
+insert into t (id,a) values (987,44);
+insert into t (id,a) values (987,45);
+insert into t (id,a) values (987,46);
+insert into t (id,a) values (987,47);
+insert into t (id,a) values (987,48);
+insert into t (id,a) values (987,49);
+insert into t (id,a) values (987,50);
+insert into t (id,a) values (987,51);
+insert into t (id,a) values (987,52);
+insert into t (id,a) values (987,53);
+insert into t (id,a) values (987,54);
+insert into t (id,a) values (987,55);
+insert into t (id,a) values (987,56);
+insert into t (id,a) values (987,57);
+insert into t (id,a) values (987,58);
+insert into t (id,a) values (987,59);
+insert into t (id,a) values (987,60);
+insert into t (id,a) values (987,61);
+insert into t (id,a) values (987,62);
+insert into t (id,a) values (987,63);
+insert into t (id,a) values (987,64);
+insert into t (id,a) values (987,65);
+insert into t (id,a) values (987,66);
+insert into t (id,a) values (987,67);
+insert into t (id,a) values (987,68);
+insert into t (id,a) values (987,69);
+insert into t (id,a) values (987,70);
+insert into t (id,a) values (987,71);
+insert into t (id,a) values (987,72);
+insert into t (id,a) values (987,73);
+insert into t (id,a) values (987,74);
+insert into t (id,a) values (987,75);
+insert into t (id,a) values (987,76);
+insert into t (id,a) values (987,77);
+insert into t (id,a) values (987,78);
+insert into t (id,a) values (987,79);
+insert into t (id,a) values (987,80);
+insert into t (id,a) values (987,81);
+insert into t (id,a) values (987,82);
+insert into t (id,a) values (987,83);
+insert into t (id,a) values (987,84);
+insert into t (id,a) values (987,85);
+insert into t (id,a) values (987,86);
+insert into t (id,a) values (987,87);
+insert into t (id,a) values (987,88);
+insert into t (id,a) values (987,89);
+insert into t (id,a) values (987,90);
+insert into t (id,a) values (987,91);
+insert into t (id,a) values (987,92);
+insert into t (id,a) values (987,93);
+insert into t (id,a) values (987,94);
+insert into t (id,a) values (987,95);
+insert into t (id,a) values (987,96);
+insert into t (id,a) values (987,97);
+insert into t (id,a) values (987,98);
+insert into t (id,a) values (987,99);
+insert into t (id,a) values (988,0);
+insert into t (id,a) values (988,1);
+insert into t (id,a) values (988,2);
+insert into t (id,a) values (988,3);
+insert into t (id,a) values (988,4);
+insert into t (id,a) values (988,5);
+insert into t (id,a) values (988,6);
+insert into t (id,a) values (988,7);
+insert into t (id,a) values (988,8);
+insert into t (id,a) values (988,9);
+insert into t (id,a) values (988,10);
+insert into t (id,a) values (988,11);
+insert into t (id,a) values (988,12);
+insert into t (id,a) values (988,13);
+insert into t (id,a) values (988,14);
+insert into t (id,a) values (988,15);
+insert into t (id,a) values (988,16);
+insert into t (id,a) values (988,17);
+insert into t (id,a) values (988,18);
+insert into t (id,a) values (988,19);
+insert into t (id,a) values (988,20);
+insert into t (id,a) values (988,21);
+insert into t (id,a) values (988,22);
+insert into t (id,a) values (988,23);
+insert into t (id,a) values (988,24);
+insert into t (id,a) values (988,25);
+insert into t (id,a) values (988,26);
+insert into t (id,a) values (988,27);
+insert into t (id,a) values (988,28);
+insert into t (id,a) values (988,29);
+insert into t (id,a) values (988,30);
+insert into t (id,a) values (988,31);
+insert into t (id,a) values (988,32);
+insert into t (id,a) values (988,33);
+insert into t (id,a) values (988,34);
+insert into t (id,a) values (988,35);
+insert into t (id,a) values (988,36);
+insert into t (id,a) values (988,37);
+insert into t (id,a) values (988,38);
+insert into t (id,a) values (988,39);
+insert into t (id,a) values (988,40);
+insert into t (id,a) values (988,41);
+insert into t (id,a) values (988,42);
+insert into t (id,a) values (988,43);
+insert into t (id,a) values (988,44);
+insert into t (id,a) values (988,45);
+insert into t (id,a) values (988,46);
+insert into t (id,a) values (988,47);
+insert into t (id,a) values (988,48);
+insert into t (id,a) values (988,49);
+insert into t (id,a) values (988,50);
+insert into t (id,a) values (988,51);
+insert into t (id,a) values (988,52);
+insert into t (id,a) values (988,53);
+insert into t (id,a) values (988,54);
+insert into t (id,a) values (988,55);
+insert into t (id,a) values (988,56);
+insert into t (id,a) values (988,57);
+insert into t (id,a) values (988,58);
+insert into t (id,a) values (988,59);
+insert into t (id,a) values (988,60);
+insert into t (id,a) values (988,61);
+insert into t (id,a) values (988,62);
+insert into t (id,a) values (988,63);
+insert into t (id,a) values (988,64);
+insert into t (id,a) values (988,65);
+insert into t (id,a) values (988,66);
+insert into t (id,a) values (988,67);
+insert into t (id,a) values (988,68);
+insert into t (id,a) values (988,69);
+insert into t (id,a) values (988,70);
+insert into t (id,a) values (988,71);
+insert into t (id,a) values (988,72);
+insert into t (id,a) values (988,73);
+insert into t (id,a) values (988,74);
+insert into t (id,a) values (988,75);
+insert into t (id,a) values (988,76);
+insert into t (id,a) values (988,77);
+insert into t (id,a) values (988,78);
+insert into t (id,a) values (988,79);
+insert into t (id,a) values (988,80);
+insert into t (id,a) values (988,81);
+insert into t (id,a) values (988,82);
+insert into t (id,a) values (988,83);
+insert into t (id,a) values (988,84);
+insert into t (id,a) values (988,85);
+insert into t (id,a) values (988,86);
+insert into t (id,a) values (988,87);
+insert into t (id,a) values (988,88);
+insert into t (id,a) values (988,89);
+insert into t (id,a) values (988,90);
+insert into t (id,a) values (988,91);
+insert into t (id,a) values (988,92);
+insert into t (id,a) values (988,93);
+insert into t (id,a) values (988,94);
+insert into t (id,a) values (988,95);
+insert into t (id,a) values (988,96);
+insert into t (id,a) values (988,97);
+insert into t (id,a) values (988,98);
+insert into t (id,a) values (988,99);
+insert into t (id,a) values (989,0);
+insert into t (id,a) values (989,1);
+insert into t (id,a) values (989,2);
+insert into t (id,a) values (989,3);
+insert into t (id,a) values (989,4);
+insert into t (id,a) values (989,5);
+insert into t (id,a) values (989,6);
+insert into t (id,a) values (989,7);
+insert into t (id,a) values (989,8);
+insert into t (id,a) values (989,9);
+insert into t (id,a) values (989,10);
+insert into t (id,a) values (989,11);
+insert into t (id,a) values (989,12);
+insert into t (id,a) values (989,13);
+insert into t (id,a) values (989,14);
+insert into t (id,a) values (989,15);
+insert into t (id,a) values (989,16);
+insert into t (id,a) values (989,17);
+insert into t (id,a) values (989,18);
+insert into t (id,a) values (989,19);
+insert into t (id,a) values (989,20);
+insert into t (id,a) values (989,21);
+insert into t (id,a) values (989,22);
+insert into t (id,a) values (989,23);
+insert into t (id,a) values (989,24);
+insert into t (id,a) values (989,25);
+insert into t (id,a) values (989,26);
+insert into t (id,a) values (989,27);
+insert into t (id,a) values (989,28);
+insert into t (id,a) values (989,29);
+insert into t (id,a) values (989,30);
+insert into t (id,a) values (989,31);
+insert into t (id,a) values (989,32);
+insert into t (id,a) values (989,33);
+insert into t (id,a) values (989,34);
+insert into t (id,a) values (989,35);
+insert into t (id,a) values (989,36);
+insert into t (id,a) values (989,37);
+insert into t (id,a) values (989,38);
+insert into t (id,a) values (989,39);
+insert into t (id,a) values (989,40);
+insert into t (id,a) values (989,41);
+insert into t (id,a) values (989,42);
+insert into t (id,a) values (989,43);
+insert into t (id,a) values (989,44);
+insert into t (id,a) values (989,45);
+insert into t (id,a) values (989,46);
+insert into t (id,a) values (989,47);
+insert into t (id,a) values (989,48);
+insert into t (id,a) values (989,49);
+insert into t (id,a) values (989,50);
+insert into t (id,a) values (989,51);
+insert into t (id,a) values (989,52);
+insert into t (id,a) values (989,53);
+insert into t (id,a) values (989,54);
+insert into t (id,a) values (989,55);
+insert into t (id,a) values (989,56);
+insert into t (id,a) values (989,57);
+insert into t (id,a) values (989,58);
+insert into t (id,a) values (989,59);
+insert into t (id,a) values (989,60);
+insert into t (id,a) values (989,61);
+insert into t (id,a) values (989,62);
+insert into t (id,a) values (989,63);
+insert into t (id,a) values (989,64);
+insert into t (id,a) values (989,65);
+insert into t (id,a) values (989,66);
+insert into t (id,a) values (989,67);
+insert into t (id,a) values (989,68);
+insert into t (id,a) values (989,69);
+insert into t (id,a) values (989,70);
+insert into t (id,a) values (989,71);
+insert into t (id,a) values (989,72);
+insert into t (id,a) values (989,73);
+insert into t (id,a) values (989,74);
+insert into t (id,a) values (989,75);
+insert into t (id,a) values (989,76);
+insert into t (id,a) values (989,77);
+insert into t (id,a) values (989,78);
+insert into t (id,a) values (989,79);
+insert into t (id,a) values (989,80);
+insert into t (id,a) values (989,81);
+insert into t (id,a) values (989,82);
+insert into t (id,a) values (989,83);
+insert into t (id,a) values (989,84);
+insert into t (id,a) values (989,85);
+insert into t (id,a) values (989,86);
+insert into t (id,a) values (989,87);
+insert into t (id,a) values (989,88);
+insert into t (id,a) values (989,89);
+insert into t (id,a) values (989,90);
+insert into t (id,a) values (989,91);
+insert into t (id,a) values (989,92);
+insert into t (id,a) values (989,93);
+insert into t (id,a) values (989,94);
+insert into t (id,a) values (989,95);
+insert into t (id,a) values (989,96);
+insert into t (id,a) values (989,97);
+insert into t (id,a) values (989,98);
+insert into t (id,a) values (989,99);
+insert into t (id,a) values (990,0);
+insert into t (id,a) values (990,1);
+insert into t (id,a) values (990,2);
+insert into t (id,a) values (990,3);
+insert into t (id,a) values (990,4);
+insert into t (id,a) values (990,5);
+insert into t (id,a) values (990,6);
+insert into t (id,a) values (990,7);
+insert into t (id,a) values (990,8);
+insert into t (id,a) values (990,9);
+insert into t (id,a) values (990,10);
+insert into t (id,a) values (990,11);
+insert into t (id,a) values (990,12);
+insert into t (id,a) values (990,13);
+insert into t (id,a) values (990,14);
+insert into t (id,a) values (990,15);
+insert into t (id,a) values (990,16);
+insert into t (id,a) values (990,17);
+insert into t (id,a) values (990,18);
+insert into t (id,a) values (990,19);
+insert into t (id,a) values (990,20);
+insert into t (id,a) values (990,21);
+insert into t (id,a) values (990,22);
+insert into t (id,a) values (990,23);
+insert into t (id,a) values (990,24);
+insert into t (id,a) values (990,25);
+insert into t (id,a) values (990,26);
+insert into t (id,a) values (990,27);
+insert into t (id,a) values (990,28);
+insert into t (id,a) values (990,29);
+insert into t (id,a) values (990,30);
+insert into t (id,a) values (990,31);
+insert into t (id,a) values (990,32);
+insert into t (id,a) values (990,33);
+insert into t (id,a) values (990,34);
+insert into t (id,a) values (990,35);
+insert into t (id,a) values (990,36);
+insert into t (id,a) values (990,37);
+insert into t (id,a) values (990,38);
+insert into t (id,a) values (990,39);
+insert into t (id,a) values (990,40);
+insert into t (id,a) values (990,41);
+insert into t (id,a) values (990,42);
+insert into t (id,a) values (990,43);
+insert into t (id,a) values (990,44);
+insert into t (id,a) values (990,45);
+insert into t (id,a) values (990,46);
+insert into t (id,a) values (990,47);
+insert into t (id,a) values (990,48);
+insert into t (id,a) values (990,49);
+insert into t (id,a) values (990,50);
+insert into t (id,a) values (990,51);
+insert into t (id,a) values (990,52);
+insert into t (id,a) values (990,53);
+insert into t (id,a) values (990,54);
+insert into t (id,a) values (990,55);
+insert into t (id,a) values (990,56);
+insert into t (id,a) values (990,57);
+insert into t (id,a) values (990,58);
+insert into t (id,a) values (990,59);
+insert into t (id,a) values (990,60);
+insert into t (id,a) values (990,61);
+insert into t (id,a) values (990,62);
+insert into t (id,a) values (990,63);
+insert into t (id,a) values (990,64);
+insert into t (id,a) values (990,65);
+insert into t (id,a) values (990,66);
+insert into t (id,a) values (990,67);
+insert into t (id,a) values (990,68);
+insert into t (id,a) values (990,69);
+insert into t (id,a) values (990,70);
+insert into t (id,a) values (990,71);
+insert into t (id,a) values (990,72);
+insert into t (id,a) values (990,73);
+insert into t (id,a) values (990,74);
+insert into t (id,a) values (990,75);
+insert into t (id,a) values (990,76);
+insert into t (id,a) values (990,77);
+insert into t (id,a) values (990,78);
+insert into t (id,a) values (990,79);
+insert into t (id,a) values (990,80);
+insert into t (id,a) values (990,81);
+insert into t (id,a) values (990,82);
+insert into t (id,a) values (990,83);
+insert into t (id,a) values (990,84);
+insert into t (id,a) values (990,85);
+insert into t (id,a) values (990,86);
+insert into t (id,a) values (990,87);
+insert into t (id,a) values (990,88);
+insert into t (id,a) values (990,89);
+insert into t (id,a) values (990,90);
+insert into t (id,a) values (990,91);
+insert into t (id,a) values (990,92);
+insert into t (id,a) values (990,93);
+insert into t (id,a) values (990,94);
+insert into t (id,a) values (990,95);
+insert into t (id,a) values (990,96);
+insert into t (id,a) values (990,97);
+insert into t (id,a) values (990,98);
+insert into t (id,a) values (990,99);
+insert into t (id,a) values (991,0);
+insert into t (id,a) values (991,1);
+insert into t (id,a) values (991,2);
+insert into t (id,a) values (991,3);
+insert into t (id,a) values (991,4);
+insert into t (id,a) values (991,5);
+insert into t (id,a) values (991,6);
+insert into t (id,a) values (991,7);
+insert into t (id,a) values (991,8);
+insert into t (id,a) values (991,9);
+insert into t (id,a) values (991,10);
+insert into t (id,a) values (991,11);
+insert into t (id,a) values (991,12);
+insert into t (id,a) values (991,13);
+insert into t (id,a) values (991,14);
+insert into t (id,a) values (991,15);
+insert into t (id,a) values (991,16);
+insert into t (id,a) values (991,17);
+insert into t (id,a) values (991,18);
+insert into t (id,a) values (991,19);
+insert into t (id,a) values (991,20);
+insert into t (id,a) values (991,21);
+insert into t (id,a) values (991,22);
+insert into t (id,a) values (991,23);
+insert into t (id,a) values (991,24);
+insert into t (id,a) values (991,25);
+insert into t (id,a) values (991,26);
+insert into t (id,a) values (991,27);
+insert into t (id,a) values (991,28);
+insert into t (id,a) values (991,29);
+insert into t (id,a) values (991,30);
+insert into t (id,a) values (991,31);
+insert into t (id,a) values (991,32);
+insert into t (id,a) values (991,33);
+insert into t (id,a) values (991,34);
+insert into t (id,a) values (991,35);
+insert into t (id,a) values (991,36);
+insert into t (id,a) values (991,37);
+insert into t (id,a) values (991,38);
+insert into t (id,a) values (991,39);
+insert into t (id,a) values (991,40);
+insert into t (id,a) values (991,41);
+insert into t (id,a) values (991,42);
+insert into t (id,a) values (991,43);
+insert into t (id,a) values (991,44);
+insert into t (id,a) values (991,45);
+insert into t (id,a) values (991,46);
+insert into t (id,a) values (991,47);
+insert into t (id,a) values (991,48);
+insert into t (id,a) values (991,49);
+insert into t (id,a) values (991,50);
+insert into t (id,a) values (991,51);
+insert into t (id,a) values (991,52);
+insert into t (id,a) values (991,53);
+insert into t (id,a) values (991,54);
+insert into t (id,a) values (991,55);
+insert into t (id,a) values (991,56);
+insert into t (id,a) values (991,57);
+insert into t (id,a) values (991,58);
+insert into t (id,a) values (991,59);
+insert into t (id,a) values (991,60);
+insert into t (id,a) values (991,61);
+insert into t (id,a) values (991,62);
+insert into t (id,a) values (991,63);
+insert into t (id,a) values (991,64);
+insert into t (id,a) values (991,65);
+insert into t (id,a) values (991,66);
+insert into t (id,a) values (991,67);
+insert into t (id,a) values (991,68);
+insert into t (id,a) values (991,69);
+insert into t (id,a) values (991,70);
+insert into t (id,a) values (991,71);
+insert into t (id,a) values (991,72);
+insert into t (id,a) values (991,73);
+insert into t (id,a) values (991,74);
+insert into t (id,a) values (991,75);
+insert into t (id,a) values (991,76);
+insert into t (id,a) values (991,77);
+insert into t (id,a) values (991,78);
+insert into t (id,a) values (991,79);
+insert into t (id,a) values (991,80);
+insert into t (id,a) values (991,81);
+insert into t (id,a) values (991,82);
+insert into t (id,a) values (991,83);
+insert into t (id,a) values (991,84);
+insert into t (id,a) values (991,85);
+insert into t (id,a) values (991,86);
+insert into t (id,a) values (991,87);
+insert into t (id,a) values (991,88);
+insert into t (id,a) values (991,89);
+insert into t (id,a) values (991,90);
+insert into t (id,a) values (991,91);
+insert into t (id,a) values (991,92);
+insert into t (id,a) values (991,93);
+insert into t (id,a) values (991,94);
+insert into t (id,a) values (991,95);
+insert into t (id,a) values (991,96);
+insert into t (id,a) values (991,97);
+insert into t (id,a) values (991,98);
+insert into t (id,a) values (991,99);
+insert into t (id,a) values (992,0);
+insert into t (id,a) values (992,1);
+insert into t (id,a) values (992,2);
+insert into t (id,a) values (992,3);
+insert into t (id,a) values (992,4);
+insert into t (id,a) values (992,5);
+insert into t (id,a) values (992,6);
+insert into t (id,a) values (992,7);
+insert into t (id,a) values (992,8);
+insert into t (id,a) values (992,9);
+insert into t (id,a) values (992,10);
+insert into t (id,a) values (992,11);
+insert into t (id,a) values (992,12);
+insert into t (id,a) values (992,13);
+insert into t (id,a) values (992,14);
+insert into t (id,a) values (992,15);
+insert into t (id,a) values (992,16);
+insert into t (id,a) values (992,17);
+insert into t (id,a) values (992,18);
+insert into t (id,a) values (992,19);
+insert into t (id,a) values (992,20);
+insert into t (id,a) values (992,21);
+insert into t (id,a) values (992,22);
+insert into t (id,a) values (992,23);
+insert into t (id,a) values (992,24);
+insert into t (id,a) values (992,25);
+insert into t (id,a) values (992,26);
+insert into t (id,a) values (992,27);
+insert into t (id,a) values (992,28);
+insert into t (id,a) values (992,29);
+insert into t (id,a) values (992,30);
+insert into t (id,a) values (992,31);
+insert into t (id,a) values (992,32);
+insert into t (id,a) values (992,33);
+insert into t (id,a) values (992,34);
+insert into t (id,a) values (992,35);
+insert into t (id,a) values (992,36);
+insert into t (id,a) values (992,37);
+insert into t (id,a) values (992,38);
+insert into t (id,a) values (992,39);
+insert into t (id,a) values (992,40);
+insert into t (id,a) values (992,41);
+insert into t (id,a) values (992,42);
+insert into t (id,a) values (992,43);
+insert into t (id,a) values (992,44);
+insert into t (id,a) values (992,45);
+insert into t (id,a) values (992,46);
+insert into t (id,a) values (992,47);
+insert into t (id,a) values (992,48);
+insert into t (id,a) values (992,49);
+insert into t (id,a) values (992,50);
+insert into t (id,a) values (992,51);
+insert into t (id,a) values (992,52);
+insert into t (id,a) values (992,53);
+insert into t (id,a) values (992,54);
+insert into t (id,a) values (992,55);
+insert into t (id,a) values (992,56);
+insert into t (id,a) values (992,57);
+insert into t (id,a) values (992,58);
+insert into t (id,a) values (992,59);
+insert into t (id,a) values (992,60);
+insert into t (id,a) values (992,61);
+insert into t (id,a) values (992,62);
+insert into t (id,a) values (992,63);
+insert into t (id,a) values (992,64);
+insert into t (id,a) values (992,65);
+insert into t (id,a) values (992,66);
+insert into t (id,a) values (992,67);
+insert into t (id,a) values (992,68);
+insert into t (id,a) values (992,69);
+insert into t (id,a) values (992,70);
+insert into t (id,a) values (992,71);
+insert into t (id,a) values (992,72);
+insert into t (id,a) values (992,73);
+insert into t (id,a) values (992,74);
+insert into t (id,a) values (992,75);
+insert into t (id,a) values (992,76);
+insert into t (id,a) values (992,77);
+insert into t (id,a) values (992,78);
+insert into t (id,a) values (992,79);
+insert into t (id,a) values (992,80);
+insert into t (id,a) values (992,81);
+insert into t (id,a) values (992,82);
+insert into t (id,a) values (992,83);
+insert into t (id,a) values (992,84);
+insert into t (id,a) values (992,85);
+insert into t (id,a) values (992,86);
+insert into t (id,a) values (992,87);
+insert into t (id,a) values (992,88);
+insert into t (id,a) values (992,89);
+insert into t (id,a) values (992,90);
+insert into t (id,a) values (992,91);
+insert into t (id,a) values (992,92);
+insert into t (id,a) values (992,93);
+insert into t (id,a) values (992,94);
+insert into t (id,a) values (992,95);
+insert into t (id,a) values (992,96);
+insert into t (id,a) values (992,97);
+insert into t (id,a) values (992,98);
+insert into t (id,a) values (992,99);
+insert into t (id,a) values (993,0);
+insert into t (id,a) values (993,1);
+insert into t (id,a) values (993,2);
+insert into t (id,a) values (993,3);
+insert into t (id,a) values (993,4);
+insert into t (id,a) values (993,5);
+insert into t (id,a) values (993,6);
+insert into t (id,a) values (993,7);
+insert into t (id,a) values (993,8);
+insert into t (id,a) values (993,9);
+insert into t (id,a) values (993,10);
+insert into t (id,a) values (993,11);
+insert into t (id,a) values (993,12);
+insert into t (id,a) values (993,13);
+insert into t (id,a) values (993,14);
+insert into t (id,a) values (993,15);
+insert into t (id,a) values (993,16);
+insert into t (id,a) values (993,17);
+insert into t (id,a) values (993,18);
+insert into t (id,a) values (993,19);
+insert into t (id,a) values (993,20);
+insert into t (id,a) values (993,21);
+insert into t (id,a) values (993,22);
+insert into t (id,a) values (993,23);
+insert into t (id,a) values (993,24);
+insert into t (id,a) values (993,25);
+insert into t (id,a) values (993,26);
+insert into t (id,a) values (993,27);
+insert into t (id,a) values (993,28);
+insert into t (id,a) values (993,29);
+insert into t (id,a) values (993,30);
+insert into t (id,a) values (993,31);
+insert into t (id,a) values (993,32);
+insert into t (id,a) values (993,33);
+insert into t (id,a) values (993,34);
+insert into t (id,a) values (993,35);
+insert into t (id,a) values (993,36);
+insert into t (id,a) values (993,37);
+insert into t (id,a) values (993,38);
+insert into t (id,a) values (993,39);
+insert into t (id,a) values (993,40);
+insert into t (id,a) values (993,41);
+insert into t (id,a) values (993,42);
+insert into t (id,a) values (993,43);
+insert into t (id,a) values (993,44);
+insert into t (id,a) values (993,45);
+insert into t (id,a) values (993,46);
+insert into t (id,a) values (993,47);
+insert into t (id,a) values (993,48);
+insert into t (id,a) values (993,49);
+insert into t (id,a) values (993,50);
+insert into t (id,a) values (993,51);
+insert into t (id,a) values (993,52);
+insert into t (id,a) values (993,53);
+insert into t (id,a) values (993,54);
+insert into t (id,a) values (993,55);
+insert into t (id,a) values (993,56);
+insert into t (id,a) values (993,57);
+insert into t (id,a) values (993,58);
+insert into t (id,a) values (993,59);
+insert into t (id,a) values (993,60);
+insert into t (id,a) values (993,61);
+insert into t (id,a) values (993,62);
+insert into t (id,a) values (993,63);
+insert into t (id,a) values (993,64);
+insert into t (id,a) values (993,65);
+insert into t (id,a) values (993,66);
+insert into t (id,a) values (993,67);
+insert into t (id,a) values (993,68);
+insert into t (id,a) values (993,69);
+insert into t (id,a) values (993,70);
+insert into t (id,a) values (993,71);
+insert into t (id,a) values (993,72);
+insert into t (id,a) values (993,73);
+insert into t (id,a) values (993,74);
+insert into t (id,a) values (993,75);
+insert into t (id,a) values (993,76);
+insert into t (id,a) values (993,77);
+insert into t (id,a) values (993,78);
+insert into t (id,a) values (993,79);
+insert into t (id,a) values (993,80);
+insert into t (id,a) values (993,81);
+insert into t (id,a) values (993,82);
+insert into t (id,a) values (993,83);
+insert into t (id,a) values (993,84);
+insert into t (id,a) values (993,85);
+insert into t (id,a) values (993,86);
+insert into t (id,a) values (993,87);
+insert into t (id,a) values (993,88);
+insert into t (id,a) values (993,89);
+insert into t (id,a) values (993,90);
+insert into t (id,a) values (993,91);
+insert into t (id,a) values (993,92);
+insert into t (id,a) values (993,93);
+insert into t (id,a) values (993,94);
+insert into t (id,a) values (993,95);
+insert into t (id,a) values (993,96);
+insert into t (id,a) values (993,97);
+insert into t (id,a) values (993,98);
+insert into t (id,a) values (993,99);
+insert into t (id,a) values (994,0);
+insert into t (id,a) values (994,1);
+insert into t (id,a) values (994,2);
+insert into t (id,a) values (994,3);
+insert into t (id,a) values (994,4);
+insert into t (id,a) values (994,5);
+insert into t (id,a) values (994,6);
+insert into t (id,a) values (994,7);
+insert into t (id,a) values (994,8);
+insert into t (id,a) values (994,9);
+insert into t (id,a) values (994,10);
+insert into t (id,a) values (994,11);
+insert into t (id,a) values (994,12);
+insert into t (id,a) values (994,13);
+insert into t (id,a) values (994,14);
+insert into t (id,a) values (994,15);
+insert into t (id,a) values (994,16);
+insert into t (id,a) values (994,17);
+insert into t (id,a) values (994,18);
+insert into t (id,a) values (994,19);
+insert into t (id,a) values (994,20);
+insert into t (id,a) values (994,21);
+insert into t (id,a) values (994,22);
+insert into t (id,a) values (994,23);
+insert into t (id,a) values (994,24);
+insert into t (id,a) values (994,25);
+insert into t (id,a) values (994,26);
+insert into t (id,a) values (994,27);
+insert into t (id,a) values (994,28);
+insert into t (id,a) values (994,29);
+insert into t (id,a) values (994,30);
+insert into t (id,a) values (994,31);
+insert into t (id,a) values (994,32);
+insert into t (id,a) values (994,33);
+insert into t (id,a) values (994,34);
+insert into t (id,a) values (994,35);
+insert into t (id,a) values (994,36);
+insert into t (id,a) values (994,37);
+insert into t (id,a) values (994,38);
+insert into t (id,a) values (994,39);
+insert into t (id,a) values (994,40);
+insert into t (id,a) values (994,41);
+insert into t (id,a) values (994,42);
+insert into t (id,a) values (994,43);
+insert into t (id,a) values (994,44);
+insert into t (id,a) values (994,45);
+insert into t (id,a) values (994,46);
+insert into t (id,a) values (994,47);
+insert into t (id,a) values (994,48);
+insert into t (id,a) values (994,49);
+insert into t (id,a) values (994,50);
+insert into t (id,a) values (994,51);
+insert into t (id,a) values (994,52);
+insert into t (id,a) values (994,53);
+insert into t (id,a) values (994,54);
+insert into t (id,a) values (994,55);
+insert into t (id,a) values (994,56);
+insert into t (id,a) values (994,57);
+insert into t (id,a) values (994,58);
+insert into t (id,a) values (994,59);
+insert into t (id,a) values (994,60);
+insert into t (id,a) values (994,61);
+insert into t (id,a) values (994,62);
+insert into t (id,a) values (994,63);
+insert into t (id,a) values (994,64);
+insert into t (id,a) values (994,65);
+insert into t (id,a) values (994,66);
+insert into t (id,a) values (994,67);
+insert into t (id,a) values (994,68);
+insert into t (id,a) values (994,69);
+insert into t (id,a) values (994,70);
+insert into t (id,a) values (994,71);
+insert into t (id,a) values (994,72);
+insert into t (id,a) values (994,73);
+insert into t (id,a) values (994,74);
+insert into t (id,a) values (994,75);
+insert into t (id,a) values (994,76);
+insert into t (id,a) values (994,77);
+insert into t (id,a) values (994,78);
+insert into t (id,a) values (994,79);
+insert into t (id,a) values (994,80);
+insert into t (id,a) values (994,81);
+insert into t (id,a) values (994,82);
+insert into t (id,a) values (994,83);
+insert into t (id,a) values (994,84);
+insert into t (id,a) values (994,85);
+insert into t (id,a) values (994,86);
+insert into t (id,a) values (994,87);
+insert into t (id,a) values (994,88);
+insert into t (id,a) values (994,89);
+insert into t (id,a) values (994,90);
+insert into t (id,a) values (994,91);
+insert into t (id,a) values (994,92);
+insert into t (id,a) values (994,93);
+insert into t (id,a) values (994,94);
+insert into t (id,a) values (994,95);
+insert into t (id,a) values (994,96);
+insert into t (id,a) values (994,97);
+insert into t (id,a) values (994,98);
+insert into t (id,a) values (994,99);
+insert into t (id,a) values (995,0);
+insert into t (id,a) values (995,1);
+insert into t (id,a) values (995,2);
+insert into t (id,a) values (995,3);
+insert into t (id,a) values (995,4);
+insert into t (id,a) values (995,5);
+insert into t (id,a) values (995,6);
+insert into t (id,a) values (995,7);
+insert into t (id,a) values (995,8);
+insert into t (id,a) values (995,9);
+insert into t (id,a) values (995,10);
+insert into t (id,a) values (995,11);
+insert into t (id,a) values (995,12);
+insert into t (id,a) values (995,13);
+insert into t (id,a) values (995,14);
+insert into t (id,a) values (995,15);
+insert into t (id,a) values (995,16);
+insert into t (id,a) values (995,17);
+insert into t (id,a) values (995,18);
+insert into t (id,a) values (995,19);
+insert into t (id,a) values (995,20);
+insert into t (id,a) values (995,21);
+insert into t (id,a) values (995,22);
+insert into t (id,a) values (995,23);
+insert into t (id,a) values (995,24);
+insert into t (id,a) values (995,25);
+insert into t (id,a) values (995,26);
+insert into t (id,a) values (995,27);
+insert into t (id,a) values (995,28);
+insert into t (id,a) values (995,29);
+insert into t (id,a) values (995,30);
+insert into t (id,a) values (995,31);
+insert into t (id,a) values (995,32);
+insert into t (id,a) values (995,33);
+insert into t (id,a) values (995,34);
+insert into t (id,a) values (995,35);
+insert into t (id,a) values (995,36);
+insert into t (id,a) values (995,37);
+insert into t (id,a) values (995,38);
+insert into t (id,a) values (995,39);
+insert into t (id,a) values (995,40);
+insert into t (id,a) values (995,41);
+insert into t (id,a) values (995,42);
+insert into t (id,a) values (995,43);
+insert into t (id,a) values (995,44);
+insert into t (id,a) values (995,45);
+insert into t (id,a) values (995,46);
+insert into t (id,a) values (995,47);
+insert into t (id,a) values (995,48);
+insert into t (id,a) values (995,49);
+insert into t (id,a) values (995,50);
+insert into t (id,a) values (995,51);
+insert into t (id,a) values (995,52);
+insert into t (id,a) values (995,53);
+insert into t (id,a) values (995,54);
+insert into t (id,a) values (995,55);
+insert into t (id,a) values (995,56);
+insert into t (id,a) values (995,57);
+insert into t (id,a) values (995,58);
+insert into t (id,a) values (995,59);
+insert into t (id,a) values (995,60);
+insert into t (id,a) values (995,61);
+insert into t (id,a) values (995,62);
+insert into t (id,a) values (995,63);
+insert into t (id,a) values (995,64);
+insert into t (id,a) values (995,65);
+insert into t (id,a) values (995,66);
+insert into t (id,a) values (995,67);
+insert into t (id,a) values (995,68);
+insert into t (id,a) values (995,69);
+insert into t (id,a) values (995,70);
+insert into t (id,a) values (995,71);
+insert into t (id,a) values (995,72);
+insert into t (id,a) values (995,73);
+insert into t (id,a) values (995,74);
+insert into t (id,a) values (995,75);
+insert into t (id,a) values (995,76);
+insert into t (id,a) values (995,77);
+insert into t (id,a) values (995,78);
+insert into t (id,a) values (995,79);
+insert into t (id,a) values (995,80);
+insert into t (id,a) values (995,81);
+insert into t (id,a) values (995,82);
+insert into t (id,a) values (995,83);
+insert into t (id,a) values (995,84);
+insert into t (id,a) values (995,85);
+insert into t (id,a) values (995,86);
+insert into t (id,a) values (995,87);
+insert into t (id,a) values (995,88);
+insert into t (id,a) values (995,89);
+insert into t (id,a) values (995,90);
+insert into t (id,a) values (995,91);
+insert into t (id,a) values (995,92);
+insert into t (id,a) values (995,93);
+insert into t (id,a) values (995,94);
+insert into t (id,a) values (995,95);
+insert into t (id,a) values (995,96);
+insert into t (id,a) values (995,97);
+insert into t (id,a) values (995,98);
+insert into t (id,a) values (995,99);
+insert into t (id,a) values (996,0);
+insert into t (id,a) values (996,1);
+insert into t (id,a) values (996,2);
+insert into t (id,a) values (996,3);
+insert into t (id,a) values (996,4);
+insert into t (id,a) values (996,5);
+insert into t (id,a) values (996,6);
+insert into t (id,a) values (996,7);
+insert into t (id,a) values (996,8);
+insert into t (id,a) values (996,9);
+insert into t (id,a) values (996,10);
+insert into t (id,a) values (996,11);
+insert into t (id,a) values (996,12);
+insert into t (id,a) values (996,13);
+insert into t (id,a) values (996,14);
+insert into t (id,a) values (996,15);
+insert into t (id,a) values (996,16);
+insert into t (id,a) values (996,17);
+insert into t (id,a) values (996,18);
+insert into t (id,a) values (996,19);
+insert into t (id,a) values (996,20);
+insert into t (id,a) values (996,21);
+insert into t (id,a) values (996,22);
+insert into t (id,a) values (996,23);
+insert into t (id,a) values (996,24);
+insert into t (id,a) values (996,25);
+insert into t (id,a) values (996,26);
+insert into t (id,a) values (996,27);
+insert into t (id,a) values (996,28);
+insert into t (id,a) values (996,29);
+insert into t (id,a) values (996,30);
+insert into t (id,a) values (996,31);
+insert into t (id,a) values (996,32);
+insert into t (id,a) values (996,33);
+insert into t (id,a) values (996,34);
+insert into t (id,a) values (996,35);
+insert into t (id,a) values (996,36);
+insert into t (id,a) values (996,37);
+insert into t (id,a) values (996,38);
+insert into t (id,a) values (996,39);
+insert into t (id,a) values (996,40);
+insert into t (id,a) values (996,41);
+insert into t (id,a) values (996,42);
+insert into t (id,a) values (996,43);
+insert into t (id,a) values (996,44);
+insert into t (id,a) values (996,45);
+insert into t (id,a) values (996,46);
+insert into t (id,a) values (996,47);
+insert into t (id,a) values (996,48);
+insert into t (id,a) values (996,49);
+insert into t (id,a) values (996,50);
+insert into t (id,a) values (996,51);
+insert into t (id,a) values (996,52);
+insert into t (id,a) values (996,53);
+insert into t (id,a) values (996,54);
+insert into t (id,a) values (996,55);
+insert into t (id,a) values (996,56);
+insert into t (id,a) values (996,57);
+insert into t (id,a) values (996,58);
+insert into t (id,a) values (996,59);
+insert into t (id,a) values (996,60);
+insert into t (id,a) values (996,61);
+insert into t (id,a) values (996,62);
+insert into t (id,a) values (996,63);
+insert into t (id,a) values (996,64);
+insert into t (id,a) values (996,65);
+insert into t (id,a) values (996,66);
+insert into t (id,a) values (996,67);
+insert into t (id,a) values (996,68);
+insert into t (id,a) values (996,69);
+insert into t (id,a) values (996,70);
+insert into t (id,a) values (996,71);
+insert into t (id,a) values (996,72);
+insert into t (id,a) values (996,73);
+insert into t (id,a) values (996,74);
+insert into t (id,a) values (996,75);
+insert into t (id,a) values (996,76);
+insert into t (id,a) values (996,77);
+insert into t (id,a) values (996,78);
+insert into t (id,a) values (996,79);
+insert into t (id,a) values (996,80);
+insert into t (id,a) values (996,81);
+insert into t (id,a) values (996,82);
+insert into t (id,a) values (996,83);
+insert into t (id,a) values (996,84);
+insert into t (id,a) values (996,85);
+insert into t (id,a) values (996,86);
+insert into t (id,a) values (996,87);
+insert into t (id,a) values (996,88);
+insert into t (id,a) values (996,89);
+insert into t (id,a) values (996,90);
+insert into t (id,a) values (996,91);
+insert into t (id,a) values (996,92);
+insert into t (id,a) values (996,93);
+insert into t (id,a) values (996,94);
+insert into t (id,a) values (996,95);
+insert into t (id,a) values (996,96);
+insert into t (id,a) values (996,97);
+insert into t (id,a) values (996,98);
+insert into t (id,a) values (996,99);
+insert into t (id,a) values (997,0);
+insert into t (id,a) values (997,1);
+insert into t (id,a) values (997,2);
+insert into t (id,a) values (997,3);
+insert into t (id,a) values (997,4);
+insert into t (id,a) values (997,5);
+insert into t (id,a) values (997,6);
+insert into t (id,a) values (997,7);
+insert into t (id,a) values (997,8);
+insert into t (id,a) values (997,9);
+insert into t (id,a) values (997,10);
+insert into t (id,a) values (997,11);
+insert into t (id,a) values (997,12);
+insert into t (id,a) values (997,13);
+insert into t (id,a) values (997,14);
+insert into t (id,a) values (997,15);
+insert into t (id,a) values (997,16);
+insert into t (id,a) values (997,17);
+insert into t (id,a) values (997,18);
+insert into t (id,a) values (997,19);
+insert into t (id,a) values (997,20);
+insert into t (id,a) values (997,21);
+insert into t (id,a) values (997,22);
+insert into t (id,a) values (997,23);
+insert into t (id,a) values (997,24);
+insert into t (id,a) values (997,25);
+insert into t (id,a) values (997,26);
+insert into t (id,a) values (997,27);
+insert into t (id,a) values (997,28);
+insert into t (id,a) values (997,29);
+insert into t (id,a) values (997,30);
+insert into t (id,a) values (997,31);
+insert into t (id,a) values (997,32);
+insert into t (id,a) values (997,33);
+insert into t (id,a) values (997,34);
+insert into t (id,a) values (997,35);
+insert into t (id,a) values (997,36);
+insert into t (id,a) values (997,37);
+insert into t (id,a) values (997,38);
+insert into t (id,a) values (997,39);
+insert into t (id,a) values (997,40);
+insert into t (id,a) values (997,41);
+insert into t (id,a) values (997,42);
+insert into t (id,a) values (997,43);
+insert into t (id,a) values (997,44);
+insert into t (id,a) values (997,45);
+insert into t (id,a) values (997,46);
+insert into t (id,a) values (997,47);
+insert into t (id,a) values (997,48);
+insert into t (id,a) values (997,49);
+insert into t (id,a) values (997,50);
+insert into t (id,a) values (997,51);
+insert into t (id,a) values (997,52);
+insert into t (id,a) values (997,53);
+insert into t (id,a) values (997,54);
+insert into t (id,a) values (997,55);
+insert into t (id,a) values (997,56);
+insert into t (id,a) values (997,57);
+insert into t (id,a) values (997,58);
+insert into t (id,a) values (997,59);
+insert into t (id,a) values (997,60);
+insert into t (id,a) values (997,61);
+insert into t (id,a) values (997,62);
+insert into t (id,a) values (997,63);
+insert into t (id,a) values (997,64);
+insert into t (id,a) values (997,65);
+insert into t (id,a) values (997,66);
+insert into t (id,a) values (997,67);
+insert into t (id,a) values (997,68);
+insert into t (id,a) values (997,69);
+insert into t (id,a) values (997,70);
+insert into t (id,a) values (997,71);
+insert into t (id,a) values (997,72);
+insert into t (id,a) values (997,73);
+insert into t (id,a) values (997,74);
+insert into t (id,a) values (997,75);
+insert into t (id,a) values (997,76);
+insert into t (id,a) values (997,77);
+insert into t (id,a) values (997,78);
+insert into t (id,a) values (997,79);
+insert into t (id,a) values (997,80);
+insert into t (id,a) values (997,81);
+insert into t (id,a) values (997,82);
+insert into t (id,a) values (997,83);
+insert into t (id,a) values (997,84);
+insert into t (id,a) values (997,85);
+insert into t (id,a) values (997,86);
+insert into t (id,a) values (997,87);
+insert into t (id,a) values (997,88);
+insert into t (id,a) values (997,89);
+insert into t (id,a) values (997,90);
+insert into t (id,a) values (997,91);
+insert into t (id,a) values (997,92);
+insert into t (id,a) values (997,93);
+insert into t (id,a) values (997,94);
+insert into t (id,a) values (997,95);
+insert into t (id,a) values (997,96);
+insert into t (id,a) values (997,97);
+insert into t (id,a) values (997,98);
+insert into t (id,a) values (997,99);
+insert into t (id,a) values (998,0);
+insert into t (id,a) values (998,1);
+insert into t (id,a) values (998,2);
+insert into t (id,a) values (998,3);
+insert into t (id,a) values (998,4);
+insert into t (id,a) values (998,5);
+insert into t (id,a) values (998,6);
+insert into t (id,a) values (998,7);
+insert into t (id,a) values (998,8);
+insert into t (id,a) values (998,9);
+insert into t (id,a) values (998,10);
+insert into t (id,a) values (998,11);
+insert into t (id,a) values (998,12);
+insert into t (id,a) values (998,13);
+insert into t (id,a) values (998,14);
+insert into t (id,a) values (998,15);
+insert into t (id,a) values (998,16);
+insert into t (id,a) values (998,17);
+insert into t (id,a) values (998,18);
+insert into t (id,a) values (998,19);
+insert into t (id,a) values (998,20);
+insert into t (id,a) values (998,21);
+insert into t (id,a) values (998,22);
+insert into t (id,a) values (998,23);
+insert into t (id,a) values (998,24);
+insert into t (id,a) values (998,25);
+insert into t (id,a) values (998,26);
+insert into t (id,a) values (998,27);
+insert into t (id,a) values (998,28);
+insert into t (id,a) values (998,29);
+insert into t (id,a) values (998,30);
+insert into t (id,a) values (998,31);
+insert into t (id,a) values (998,32);
+insert into t (id,a) values (998,33);
+insert into t (id,a) values (998,34);
+insert into t (id,a) values (998,35);
+insert into t (id,a) values (998,36);
+insert into t (id,a) values (998,37);
+insert into t (id,a) values (998,38);
+insert into t (id,a) values (998,39);
+insert into t (id,a) values (998,40);
+insert into t (id,a) values (998,41);
+insert into t (id,a) values (998,42);
+insert into t (id,a) values (998,43);
+insert into t (id,a) values (998,44);
+insert into t (id,a) values (998,45);
+insert into t (id,a) values (998,46);
+insert into t (id,a) values (998,47);
+insert into t (id,a) values (998,48);
+insert into t (id,a) values (998,49);
+insert into t (id,a) values (998,50);
+insert into t (id,a) values (998,51);
+insert into t (id,a) values (998,52);
+insert into t (id,a) values (998,53);
+insert into t (id,a) values (998,54);
+insert into t (id,a) values (998,55);
+insert into t (id,a) values (998,56);
+insert into t (id,a) values (998,57);
+insert into t (id,a) values (998,58);
+insert into t (id,a) values (998,59);
+insert into t (id,a) values (998,60);
+insert into t (id,a) values (998,61);
+insert into t (id,a) values (998,62);
+insert into t (id,a) values (998,63);
+insert into t (id,a) values (998,64);
+insert into t (id,a) values (998,65);
+insert into t (id,a) values (998,66);
+insert into t (id,a) values (998,67);
+insert into t (id,a) values (998,68);
+insert into t (id,a) values (998,69);
+insert into t (id,a) values (998,70);
+insert into t (id,a) values (998,71);
+insert into t (id,a) values (998,72);
+insert into t (id,a) values (998,73);
+insert into t (id,a) values (998,74);
+insert into t (id,a) values (998,75);
+insert into t (id,a) values (998,76);
+insert into t (id,a) values (998,77);
+insert into t (id,a) values (998,78);
+insert into t (id,a) values (998,79);
+insert into t (id,a) values (998,80);
+insert into t (id,a) values (998,81);
+insert into t (id,a) values (998,82);
+insert into t (id,a) values (998,83);
+insert into t (id,a) values (998,84);
+insert into t (id,a) values (998,85);
+insert into t (id,a) values (998,86);
+insert into t (id,a) values (998,87);
+insert into t (id,a) values (998,88);
+insert into t (id,a) values (998,89);
+insert into t (id,a) values (998,90);
+insert into t (id,a) values (998,91);
+insert into t (id,a) values (998,92);
+insert into t (id,a) values (998,93);
+insert into t (id,a) values (998,94);
+insert into t (id,a) values (998,95);
+insert into t (id,a) values (998,96);
+insert into t (id,a) values (998,97);
+insert into t (id,a) values (998,98);
+insert into t (id,a) values (998,99);
+insert into t (id,a) values (999,0);
+insert into t (id,a) values (999,1);
+insert into t (id,a) values (999,2);
+insert into t (id,a) values (999,3);
+insert into t (id,a) values (999,4);
+insert into t (id,a) values (999,5);
+insert into t (id,a) values (999,6);
+insert into t (id,a) values (999,7);
+insert into t (id,a) values (999,8);
+insert into t (id,a) values (999,9);
+insert into t (id,a) values (999,10);
+insert into t (id,a) values (999,11);
+insert into t (id,a) values (999,12);
+insert into t (id,a) values (999,13);
+insert into t (id,a) values (999,14);
+insert into t (id,a) values (999,15);
+insert into t (id,a) values (999,16);
+insert into t (id,a) values (999,17);
+insert into t (id,a) values (999,18);
+insert into t (id,a) values (999,19);
+insert into t (id,a) values (999,20);
+insert into t (id,a) values (999,21);
+insert into t (id,a) values (999,22);
+insert into t (id,a) values (999,23);
+insert into t (id,a) values (999,24);
+insert into t (id,a) values (999,25);
+insert into t (id,a) values (999,26);
+insert into t (id,a) values (999,27);
+insert into t (id,a) values (999,28);
+insert into t (id,a) values (999,29);
+insert into t (id,a) values (999,30);
+insert into t (id,a) values (999,31);
+insert into t (id,a) values (999,32);
+insert into t (id,a) values (999,33);
+insert into t (id,a) values (999,34);
+insert into t (id,a) values (999,35);
+insert into t (id,a) values (999,36);
+insert into t (id,a) values (999,37);
+insert into t (id,a) values (999,38);
+insert into t (id,a) values (999,39);
+insert into t (id,a) values (999,40);
+insert into t (id,a) values (999,41);
+insert into t (id,a) values (999,42);
+insert into t (id,a) values (999,43);
+insert into t (id,a) values (999,44);
+insert into t (id,a) values (999,45);
+insert into t (id,a) values (999,46);
+insert into t (id,a) values (999,47);
+insert into t (id,a) values (999,48);
+insert into t (id,a) values (999,49);
+insert into t (id,a) values (999,50);
+insert into t (id,a) values (999,51);
+insert into t (id,a) values (999,52);
+insert into t (id,a) values (999,53);
+insert into t (id,a) values (999,54);
+insert into t (id,a) values (999,55);
+insert into t (id,a) values (999,56);
+insert into t (id,a) values (999,57);
+insert into t (id,a) values (999,58);
+insert into t (id,a) values (999,59);
+insert into t (id,a) values (999,60);
+insert into t (id,a) values (999,61);
+insert into t (id,a) values (999,62);
+insert into t (id,a) values (999,63);
+insert into t (id,a) values (999,64);
+insert into t (id,a) values (999,65);
+insert into t (id,a) values (999,66);
+insert into t (id,a) values (999,67);
+insert into t (id,a) values (999,68);
+insert into t (id,a) values (999,69);
+insert into t (id,a) values (999,70);
+insert into t (id,a) values (999,71);
+insert into t (id,a) values (999,72);
+insert into t (id,a) values (999,73);
+insert into t (id,a) values (999,74);
+insert into t (id,a) values (999,75);
+insert into t (id,a) values (999,76);
+insert into t (id,a) values (999,77);
+insert into t (id,a) values (999,78);
+insert into t (id,a) values (999,79);
+insert into t (id,a) values (999,80);
+insert into t (id,a) values (999,81);
+insert into t (id,a) values (999,82);
+insert into t (id,a) values (999,83);
+insert into t (id,a) values (999,84);
+insert into t (id,a) values (999,85);
+insert into t (id,a) values (999,86);
+insert into t (id,a) values (999,87);
+insert into t (id,a) values (999,88);
+insert into t (id,a) values (999,89);
+insert into t (id,a) values (999,90);
+insert into t (id,a) values (999,91);
+insert into t (id,a) values (999,92);
+insert into t (id,a) values (999,93);
+insert into t (id,a) values (999,94);
+insert into t (id,a) values (999,95);
+insert into t (id,a) values (999,96);
+insert into t (id,a) values (999,97);
+insert into t (id,a) values (999,98);
+insert into t (id,a) values (999,99);
+delete from t where id=404;
+insert into t values (404,0,0,0);
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db739_replace.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_replace.result
new file mode 100644
index 00000000000..2bf141add9a
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_replace.result
@@ -0,0 +1,100014 @@
+set default_storage_engine=tokudb;
+drop table if exists t;
+create table t (
+id bigint not null,
+a bigint not null default 0,
+b bigint not null default 0,
+c bigint not null default 0,
+primary key(id, a)
+);
+set tokudb_commit_sync=0;
+insert into t (id,a) values (0,0);
+insert into t (id,a) values (0,1);
+insert into t (id,a) values (0,2);
+insert into t (id,a) values (0,3);
+insert into t (id,a) values (0,4);
+insert into t (id,a) values (0,5);
+insert into t (id,a) values (0,6);
+insert into t (id,a) values (0,7);
+insert into t (id,a) values (0,8);
+insert into t (id,a) values (0,9);
+insert into t (id,a) values (0,10);
+insert into t (id,a) values (0,11);
+insert into t (id,a) values (0,12);
+insert into t (id,a) values (0,13);
+insert into t (id,a) values (0,14);
+insert into t (id,a) values (0,15);
+insert into t (id,a) values (0,16);
+insert into t (id,a) values (0,17);
+insert into t (id,a) values (0,18);
+insert into t (id,a) values (0,19);
+insert into t (id,a) values (0,20);
+insert into t (id,a) values (0,21);
+insert into t (id,a) values (0,22);
+insert into t (id,a) values (0,23);
+insert into t (id,a) values (0,24);
+insert into t (id,a) values (0,25);
+insert into t (id,a) values (0,26);
+insert into t (id,a) values (0,27);
+insert into t (id,a) values (0,28);
+insert into t (id,a) values (0,29);
+insert into t (id,a) values (0,30);
+insert into t (id,a) values (0,31);
+insert into t (id,a) values (0,32);
+insert into t (id,a) values (0,33);
+insert into t (id,a) values (0,34);
+insert into t (id,a) values (0,35);
+insert into t (id,a) values (0,36);
+insert into t (id,a) values (0,37);
+insert into t (id,a) values (0,38);
+insert into t (id,a) values (0,39);
+insert into t (id,a) values (0,40);
+insert into t (id,a) values (0,41);
+insert into t (id,a) values (0,42);
+insert into t (id,a) values (0,43);
+insert into t (id,a) values (0,44);
+insert into t (id,a) values (0,45);
+insert into t (id,a) values (0,46);
+insert into t (id,a) values (0,47);
+insert into t (id,a) values (0,48);
+insert into t (id,a) values (0,49);
+insert into t (id,a) values (0,50);
+insert into t (id,a) values (0,51);
+insert into t (id,a) values (0,52);
+insert into t (id,a) values (0,53);
+insert into t (id,a) values (0,54);
+insert into t (id,a) values (0,55);
+insert into t (id,a) values (0,56);
+insert into t (id,a) values (0,57);
+insert into t (id,a) values (0,58);
+insert into t (id,a) values (0,59);
+insert into t (id,a) values (0,60);
+insert into t (id,a) values (0,61);
+insert into t (id,a) values (0,62);
+insert into t (id,a) values (0,63);
+insert into t (id,a) values (0,64);
+insert into t (id,a) values (0,65);
+insert into t (id,a) values (0,66);
+insert into t (id,a) values (0,67);
+insert into t (id,a) values (0,68);
+insert into t (id,a) values (0,69);
+insert into t (id,a) values (0,70);
+insert into t (id,a) values (0,71);
+insert into t (id,a) values (0,72);
+insert into t (id,a) values (0,73);
+insert into t (id,a) values (0,74);
+insert into t (id,a) values (0,75);
+insert into t (id,a) values (0,76);
+insert into t (id,a) values (0,77);
+insert into t (id,a) values (0,78);
+insert into t (id,a) values (0,79);
+insert into t (id,a) values (0,80);
+insert into t (id,a) values (0,81);
+insert into t (id,a) values (0,82);
+insert into t (id,a) values (0,83);
+insert into t (id,a) values (0,84);
+insert into t (id,a) values (0,85);
+insert into t (id,a) values (0,86);
+insert into t (id,a) values (0,87);
+insert into t (id,a) values (0,88);
+insert into t (id,a) values (0,89);
+insert into t (id,a) values (0,90);
+insert into t (id,a) values (0,91);
+insert into t (id,a) values (0,92);
+insert into t (id,a) values (0,93);
+insert into t (id,a) values (0,94);
+insert into t (id,a) values (0,95);
+insert into t (id,a) values (0,96);
+insert into t (id,a) values (0,97);
+insert into t (id,a) values (0,98);
+insert into t (id,a) values (0,99);
+insert into t (id,a) values (1,0);
+insert into t (id,a) values (1,1);
+insert into t (id,a) values (1,2);
+insert into t (id,a) values (1,3);
+insert into t (id,a) values (1,4);
+insert into t (id,a) values (1,5);
+insert into t (id,a) values (1,6);
+insert into t (id,a) values (1,7);
+insert into t (id,a) values (1,8);
+insert into t (id,a) values (1,9);
+insert into t (id,a) values (1,10);
+insert into t (id,a) values (1,11);
+insert into t (id,a) values (1,12);
+insert into t (id,a) values (1,13);
+insert into t (id,a) values (1,14);
+insert into t (id,a) values (1,15);
+insert into t (id,a) values (1,16);
+insert into t (id,a) values (1,17);
+insert into t (id,a) values (1,18);
+insert into t (id,a) values (1,19);
+insert into t (id,a) values (1,20);
+insert into t (id,a) values (1,21);
+insert into t (id,a) values (1,22);
+insert into t (id,a) values (1,23);
+insert into t (id,a) values (1,24);
+insert into t (id,a) values (1,25);
+insert into t (id,a) values (1,26);
+insert into t (id,a) values (1,27);
+insert into t (id,a) values (1,28);
+insert into t (id,a) values (1,29);
+insert into t (id,a) values (1,30);
+insert into t (id,a) values (1,31);
+insert into t (id,a) values (1,32);
+insert into t (id,a) values (1,33);
+insert into t (id,a) values (1,34);
+insert into t (id,a) values (1,35);
+insert into t (id,a) values (1,36);
+insert into t (id,a) values (1,37);
+insert into t (id,a) values (1,38);
+insert into t (id,a) values (1,39);
+insert into t (id,a) values (1,40);
+insert into t (id,a) values (1,41);
+insert into t (id,a) values (1,42);
+insert into t (id,a) values (1,43);
+insert into t (id,a) values (1,44);
+insert into t (id,a) values (1,45);
+insert into t (id,a) values (1,46);
+insert into t (id,a) values (1,47);
+insert into t (id,a) values (1,48);
+insert into t (id,a) values (1,49);
+insert into t (id,a) values (1,50);
+insert into t (id,a) values (1,51);
+insert into t (id,a) values (1,52);
+insert into t (id,a) values (1,53);
+insert into t (id,a) values (1,54);
+insert into t (id,a) values (1,55);
+insert into t (id,a) values (1,56);
+insert into t (id,a) values (1,57);
+insert into t (id,a) values (1,58);
+insert into t (id,a) values (1,59);
+insert into t (id,a) values (1,60);
+insert into t (id,a) values (1,61);
+insert into t (id,a) values (1,62);
+insert into t (id,a) values (1,63);
+insert into t (id,a) values (1,64);
+insert into t (id,a) values (1,65);
+insert into t (id,a) values (1,66);
+insert into t (id,a) values (1,67);
+insert into t (id,a) values (1,68);
+insert into t (id,a) values (1,69);
+insert into t (id,a) values (1,70);
+insert into t (id,a) values (1,71);
+insert into t (id,a) values (1,72);
+insert into t (id,a) values (1,73);
+insert into t (id,a) values (1,74);
+insert into t (id,a) values (1,75);
+insert into t (id,a) values (1,76);
+insert into t (id,a) values (1,77);
+insert into t (id,a) values (1,78);
+insert into t (id,a) values (1,79);
+insert into t (id,a) values (1,80);
+insert into t (id,a) values (1,81);
+insert into t (id,a) values (1,82);
+insert into t (id,a) values (1,83);
+insert into t (id,a) values (1,84);
+insert into t (id,a) values (1,85);
+insert into t (id,a) values (1,86);
+insert into t (id,a) values (1,87);
+insert into t (id,a) values (1,88);
+insert into t (id,a) values (1,89);
+insert into t (id,a) values (1,90);
+insert into t (id,a) values (1,91);
+insert into t (id,a) values (1,92);
+insert into t (id,a) values (1,93);
+insert into t (id,a) values (1,94);
+insert into t (id,a) values (1,95);
+insert into t (id,a) values (1,96);
+insert into t (id,a) values (1,97);
+insert into t (id,a) values (1,98);
+insert into t (id,a) values (1,99);
+insert into t (id,a) values (2,0);
+insert into t (id,a) values (2,1);
+insert into t (id,a) values (2,2);
+insert into t (id,a) values (2,3);
+insert into t (id,a) values (2,4);
+insert into t (id,a) values (2,5);
+insert into t (id,a) values (2,6);
+insert into t (id,a) values (2,7);
+insert into t (id,a) values (2,8);
+insert into t (id,a) values (2,9);
+insert into t (id,a) values (2,10);
+insert into t (id,a) values (2,11);
+insert into t (id,a) values (2,12);
+insert into t (id,a) values (2,13);
+insert into t (id,a) values (2,14);
+insert into t (id,a) values (2,15);
+insert into t (id,a) values (2,16);
+insert into t (id,a) values (2,17);
+insert into t (id,a) values (2,18);
+insert into t (id,a) values (2,19);
+insert into t (id,a) values (2,20);
+insert into t (id,a) values (2,21);
+insert into t (id,a) values (2,22);
+insert into t (id,a) values (2,23);
+insert into t (id,a) values (2,24);
+insert into t (id,a) values (2,25);
+insert into t (id,a) values (2,26);
+insert into t (id,a) values (2,27);
+insert into t (id,a) values (2,28);
+insert into t (id,a) values (2,29);
+insert into t (id,a) values (2,30);
+insert into t (id,a) values (2,31);
+insert into t (id,a) values (2,32);
+insert into t (id,a) values (2,33);
+insert into t (id,a) values (2,34);
+insert into t (id,a) values (2,35);
+insert into t (id,a) values (2,36);
+insert into t (id,a) values (2,37);
+insert into t (id,a) values (2,38);
+insert into t (id,a) values (2,39);
+insert into t (id,a) values (2,40);
+insert into t (id,a) values (2,41);
+insert into t (id,a) values (2,42);
+insert into t (id,a) values (2,43);
+insert into t (id,a) values (2,44);
+insert into t (id,a) values (2,45);
+insert into t (id,a) values (2,46);
+insert into t (id,a) values (2,47);
+insert into t (id,a) values (2,48);
+insert into t (id,a) values (2,49);
+insert into t (id,a) values (2,50);
+insert into t (id,a) values (2,51);
+insert into t (id,a) values (2,52);
+insert into t (id,a) values (2,53);
+insert into t (id,a) values (2,54);
+insert into t (id,a) values (2,55);
+insert into t (id,a) values (2,56);
+insert into t (id,a) values (2,57);
+insert into t (id,a) values (2,58);
+insert into t (id,a) values (2,59);
+insert into t (id,a) values (2,60);
+insert into t (id,a) values (2,61);
+insert into t (id,a) values (2,62);
+insert into t (id,a) values (2,63);
+insert into t (id,a) values (2,64);
+insert into t (id,a) values (2,65);
+insert into t (id,a) values (2,66);
+insert into t (id,a) values (2,67);
+insert into t (id,a) values (2,68);
+insert into t (id,a) values (2,69);
+insert into t (id,a) values (2,70);
+insert into t (id,a) values (2,71);
+insert into t (id,a) values (2,72);
+insert into t (id,a) values (2,73);
+insert into t (id,a) values (2,74);
+insert into t (id,a) values (2,75);
+insert into t (id,a) values (2,76);
+insert into t (id,a) values (2,77);
+insert into t (id,a) values (2,78);
+insert into t (id,a) values (2,79);
+insert into t (id,a) values (2,80);
+insert into t (id,a) values (2,81);
+insert into t (id,a) values (2,82);
+insert into t (id,a) values (2,83);
+insert into t (id,a) values (2,84);
+insert into t (id,a) values (2,85);
+insert into t (id,a) values (2,86);
+insert into t (id,a) values (2,87);
+insert into t (id,a) values (2,88);
+insert into t (id,a) values (2,89);
+insert into t (id,a) values (2,90);
+insert into t (id,a) values (2,91);
+insert into t (id,a) values (2,92);
+insert into t (id,a) values (2,93);
+insert into t (id,a) values (2,94);
+insert into t (id,a) values (2,95);
+insert into t (id,a) values (2,96);
+insert into t (id,a) values (2,97);
+insert into t (id,a) values (2,98);
+insert into t (id,a) values (2,99);
+insert into t (id,a) values (3,0);
+insert into t (id,a) values (3,1);
+insert into t (id,a) values (3,2);
+insert into t (id,a) values (3,3);
+insert into t (id,a) values (3,4);
+insert into t (id,a) values (3,5);
+insert into t (id,a) values (3,6);
+insert into t (id,a) values (3,7);
+insert into t (id,a) values (3,8);
+insert into t (id,a) values (3,9);
+insert into t (id,a) values (3,10);
+insert into t (id,a) values (3,11);
+insert into t (id,a) values (3,12);
+insert into t (id,a) values (3,13);
+insert into t (id,a) values (3,14);
+insert into t (id,a) values (3,15);
+insert into t (id,a) values (3,16);
+insert into t (id,a) values (3,17);
+insert into t (id,a) values (3,18);
+insert into t (id,a) values (3,19);
+insert into t (id,a) values (3,20);
+insert into t (id,a) values (3,21);
+insert into t (id,a) values (3,22);
+insert into t (id,a) values (3,23);
+insert into t (id,a) values (3,24);
+insert into t (id,a) values (3,25);
+insert into t (id,a) values (3,26);
+insert into t (id,a) values (3,27);
+insert into t (id,a) values (3,28);
+insert into t (id,a) values (3,29);
+insert into t (id,a) values (3,30);
+insert into t (id,a) values (3,31);
+insert into t (id,a) values (3,32);
+insert into t (id,a) values (3,33);
+insert into t (id,a) values (3,34);
+insert into t (id,a) values (3,35);
+insert into t (id,a) values (3,36);
+insert into t (id,a) values (3,37);
+insert into t (id,a) values (3,38);
+insert into t (id,a) values (3,39);
+insert into t (id,a) values (3,40);
+insert into t (id,a) values (3,41);
+insert into t (id,a) values (3,42);
+insert into t (id,a) values (3,43);
+insert into t (id,a) values (3,44);
+insert into t (id,a) values (3,45);
+insert into t (id,a) values (3,46);
+insert into t (id,a) values (3,47);
+insert into t (id,a) values (3,48);
+insert into t (id,a) values (3,49);
+insert into t (id,a) values (3,50);
+insert into t (id,a) values (3,51);
+insert into t (id,a) values (3,52);
+insert into t (id,a) values (3,53);
+insert into t (id,a) values (3,54);
+insert into t (id,a) values (3,55);
+insert into t (id,a) values (3,56);
+insert into t (id,a) values (3,57);
+insert into t (id,a) values (3,58);
+insert into t (id,a) values (3,59);
+insert into t (id,a) values (3,60);
+insert into t (id,a) values (3,61);
+insert into t (id,a) values (3,62);
+insert into t (id,a) values (3,63);
+insert into t (id,a) values (3,64);
+insert into t (id,a) values (3,65);
+insert into t (id,a) values (3,66);
+insert into t (id,a) values (3,67);
+insert into t (id,a) values (3,68);
+insert into t (id,a) values (3,69);
+insert into t (id,a) values (3,70);
+insert into t (id,a) values (3,71);
+insert into t (id,a) values (3,72);
+insert into t (id,a) values (3,73);
+insert into t (id,a) values (3,74);
+insert into t (id,a) values (3,75);
+insert into t (id,a) values (3,76);
+insert into t (id,a) values (3,77);
+insert into t (id,a) values (3,78);
+insert into t (id,a) values (3,79);
+insert into t (id,a) values (3,80);
+insert into t (id,a) values (3,81);
+insert into t (id,a) values (3,82);
+insert into t (id,a) values (3,83);
+insert into t (id,a) values (3,84);
+insert into t (id,a) values (3,85);
+insert into t (id,a) values (3,86);
+insert into t (id,a) values (3,87);
+insert into t (id,a) values (3,88);
+insert into t (id,a) values (3,89);
+insert into t (id,a) values (3,90);
+insert into t (id,a) values (3,91);
+insert into t (id,a) values (3,92);
+insert into t (id,a) values (3,93);
+insert into t (id,a) values (3,94);
+insert into t (id,a) values (3,95);
+insert into t (id,a) values (3,96);
+insert into t (id,a) values (3,97);
+insert into t (id,a) values (3,98);
+insert into t (id,a) values (3,99);
+insert into t (id,a) values (4,0);
+insert into t (id,a) values (4,1);
+insert into t (id,a) values (4,2);
+insert into t (id,a) values (4,3);
+insert into t (id,a) values (4,4);
+insert into t (id,a) values (4,5);
+insert into t (id,a) values (4,6);
+insert into t (id,a) values (4,7);
+insert into t (id,a) values (4,8);
+insert into t (id,a) values (4,9);
+insert into t (id,a) values (4,10);
+insert into t (id,a) values (4,11);
+insert into t (id,a) values (4,12);
+insert into t (id,a) values (4,13);
+insert into t (id,a) values (4,14);
+insert into t (id,a) values (4,15);
+insert into t (id,a) values (4,16);
+insert into t (id,a) values (4,17);
+insert into t (id,a) values (4,18);
+insert into t (id,a) values (4,19);
+insert into t (id,a) values (4,20);
+insert into t (id,a) values (4,21);
+insert into t (id,a) values (4,22);
+insert into t (id,a) values (4,23);
+insert into t (id,a) values (4,24);
+insert into t (id,a) values (4,25);
+insert into t (id,a) values (4,26);
+insert into t (id,a) values (4,27);
+insert into t (id,a) values (4,28);
+insert into t (id,a) values (4,29);
+insert into t (id,a) values (4,30);
+insert into t (id,a) values (4,31);
+insert into t (id,a) values (4,32);
+insert into t (id,a) values (4,33);
+insert into t (id,a) values (4,34);
+insert into t (id,a) values (4,35);
+insert into t (id,a) values (4,36);
+insert into t (id,a) values (4,37);
+insert into t (id,a) values (4,38);
+insert into t (id,a) values (4,39);
+insert into t (id,a) values (4,40);
+insert into t (id,a) values (4,41);
+insert into t (id,a) values (4,42);
+insert into t (id,a) values (4,43);
+insert into t (id,a) values (4,44);
+insert into t (id,a) values (4,45);
+insert into t (id,a) values (4,46);
+insert into t (id,a) values (4,47);
+insert into t (id,a) values (4,48);
+insert into t (id,a) values (4,49);
+insert into t (id,a) values (4,50);
+insert into t (id,a) values (4,51);
+insert into t (id,a) values (4,52);
+insert into t (id,a) values (4,53);
+insert into t (id,a) values (4,54);
+insert into t (id,a) values (4,55);
+insert into t (id,a) values (4,56);
+insert into t (id,a) values (4,57);
+insert into t (id,a) values (4,58);
+insert into t (id,a) values (4,59);
+insert into t (id,a) values (4,60);
+insert into t (id,a) values (4,61);
+insert into t (id,a) values (4,62);
+insert into t (id,a) values (4,63);
+insert into t (id,a) values (4,64);
+insert into t (id,a) values (4,65);
+insert into t (id,a) values (4,66);
+insert into t (id,a) values (4,67);
+insert into t (id,a) values (4,68);
+insert into t (id,a) values (4,69);
+insert into t (id,a) values (4,70);
+insert into t (id,a) values (4,71);
+insert into t (id,a) values (4,72);
+insert into t (id,a) values (4,73);
+insert into t (id,a) values (4,74);
+insert into t (id,a) values (4,75);
+insert into t (id,a) values (4,76);
+insert into t (id,a) values (4,77);
+insert into t (id,a) values (4,78);
+insert into t (id,a) values (4,79);
+insert into t (id,a) values (4,80);
+insert into t (id,a) values (4,81);
+insert into t (id,a) values (4,82);
+insert into t (id,a) values (4,83);
+insert into t (id,a) values (4,84);
+insert into t (id,a) values (4,85);
+insert into t (id,a) values (4,86);
+insert into t (id,a) values (4,87);
+insert into t (id,a) values (4,88);
+insert into t (id,a) values (4,89);
+insert into t (id,a) values (4,90);
+insert into t (id,a) values (4,91);
+insert into t (id,a) values (4,92);
+insert into t (id,a) values (4,93);
+insert into t (id,a) values (4,94);
+insert into t (id,a) values (4,95);
+insert into t (id,a) values (4,96);
+insert into t (id,a) values (4,97);
+insert into t (id,a) values (4,98);
+insert into t (id,a) values (4,99);
+insert into t (id,a) values (5,0);
+insert into t (id,a) values (5,1);
+insert into t (id,a) values (5,2);
+insert into t (id,a) values (5,3);
+insert into t (id,a) values (5,4);
+insert into t (id,a) values (5,5);
+insert into t (id,a) values (5,6);
+insert into t (id,a) values (5,7);
+insert into t (id,a) values (5,8);
+insert into t (id,a) values (5,9);
+insert into t (id,a) values (5,10);
+insert into t (id,a) values (5,11);
+insert into t (id,a) values (5,12);
+insert into t (id,a) values (5,13);
+insert into t (id,a) values (5,14);
+insert into t (id,a) values (5,15);
+insert into t (id,a) values (5,16);
+insert into t (id,a) values (5,17);
+insert into t (id,a) values (5,18);
+insert into t (id,a) values (5,19);
+insert into t (id,a) values (5,20);
+insert into t (id,a) values (5,21);
+insert into t (id,a) values (5,22);
+insert into t (id,a) values (5,23);
+insert into t (id,a) values (5,24);
+insert into t (id,a) values (5,25);
+insert into t (id,a) values (5,26);
+insert into t (id,a) values (5,27);
+insert into t (id,a) values (5,28);
+insert into t (id,a) values (5,29);
+insert into t (id,a) values (5,30);
+insert into t (id,a) values (5,31);
+insert into t (id,a) values (5,32);
+insert into t (id,a) values (5,33);
+insert into t (id,a) values (5,34);
+insert into t (id,a) values (5,35);
+insert into t (id,a) values (5,36);
+insert into t (id,a) values (5,37);
+insert into t (id,a) values (5,38);
+insert into t (id,a) values (5,39);
+insert into t (id,a) values (5,40);
+insert into t (id,a) values (5,41);
+insert into t (id,a) values (5,42);
+insert into t (id,a) values (5,43);
+insert into t (id,a) values (5,44);
+insert into t (id,a) values (5,45);
+insert into t (id,a) values (5,46);
+insert into t (id,a) values (5,47);
+insert into t (id,a) values (5,48);
+insert into t (id,a) values (5,49);
+insert into t (id,a) values (5,50);
+insert into t (id,a) values (5,51);
+insert into t (id,a) values (5,52);
+insert into t (id,a) values (5,53);
+insert into t (id,a) values (5,54);
+insert into t (id,a) values (5,55);
+insert into t (id,a) values (5,56);
+insert into t (id,a) values (5,57);
+insert into t (id,a) values (5,58);
+insert into t (id,a) values (5,59);
+insert into t (id,a) values (5,60);
+insert into t (id,a) values (5,61);
+insert into t (id,a) values (5,62);
+insert into t (id,a) values (5,63);
+insert into t (id,a) values (5,64);
+insert into t (id,a) values (5,65);
+insert into t (id,a) values (5,66);
+insert into t (id,a) values (5,67);
+insert into t (id,a) values (5,68);
+insert into t (id,a) values (5,69);
+insert into t (id,a) values (5,70);
+insert into t (id,a) values (5,71);
+insert into t (id,a) values (5,72);
+insert into t (id,a) values (5,73);
+insert into t (id,a) values (5,74);
+insert into t (id,a) values (5,75);
+insert into t (id,a) values (5,76);
+insert into t (id,a) values (5,77);
+insert into t (id,a) values (5,78);
+insert into t (id,a) values (5,79);
+insert into t (id,a) values (5,80);
+insert into t (id,a) values (5,81);
+insert into t (id,a) values (5,82);
+insert into t (id,a) values (5,83);
+insert into t (id,a) values (5,84);
+insert into t (id,a) values (5,85);
+insert into t (id,a) values (5,86);
+insert into t (id,a) values (5,87);
+insert into t (id,a) values (5,88);
+insert into t (id,a) values (5,89);
+insert into t (id,a) values (5,90);
+insert into t (id,a) values (5,91);
+insert into t (id,a) values (5,92);
+insert into t (id,a) values (5,93);
+insert into t (id,a) values (5,94);
+insert into t (id,a) values (5,95);
+insert into t (id,a) values (5,96);
+insert into t (id,a) values (5,97);
+insert into t (id,a) values (5,98);
+insert into t (id,a) values (5,99);
+insert into t (id,a) values (6,0);
+insert into t (id,a) values (6,1);
+insert into t (id,a) values (6,2);
+insert into t (id,a) values (6,3);
+insert into t (id,a) values (6,4);
+insert into t (id,a) values (6,5);
+insert into t (id,a) values (6,6);
+insert into t (id,a) values (6,7);
+insert into t (id,a) values (6,8);
+insert into t (id,a) values (6,9);
+insert into t (id,a) values (6,10);
+insert into t (id,a) values (6,11);
+insert into t (id,a) values (6,12);
+insert into t (id,a) values (6,13);
+insert into t (id,a) values (6,14);
+insert into t (id,a) values (6,15);
+insert into t (id,a) values (6,16);
+insert into t (id,a) values (6,17);
+insert into t (id,a) values (6,18);
+insert into t (id,a) values (6,19);
+insert into t (id,a) values (6,20);
+insert into t (id,a) values (6,21);
+insert into t (id,a) values (6,22);
+insert into t (id,a) values (6,23);
+insert into t (id,a) values (6,24);
+insert into t (id,a) values (6,25);
+insert into t (id,a) values (6,26);
+insert into t (id,a) values (6,27);
+insert into t (id,a) values (6,28);
+insert into t (id,a) values (6,29);
+insert into t (id,a) values (6,30);
+insert into t (id,a) values (6,31);
+insert into t (id,a) values (6,32);
+insert into t (id,a) values (6,33);
+insert into t (id,a) values (6,34);
+insert into t (id,a) values (6,35);
+insert into t (id,a) values (6,36);
+insert into t (id,a) values (6,37);
+insert into t (id,a) values (6,38);
+insert into t (id,a) values (6,39);
+insert into t (id,a) values (6,40);
+insert into t (id,a) values (6,41);
+insert into t (id,a) values (6,42);
+insert into t (id,a) values (6,43);
+insert into t (id,a) values (6,44);
+insert into t (id,a) values (6,45);
+insert into t (id,a) values (6,46);
+insert into t (id,a) values (6,47);
+insert into t (id,a) values (6,48);
+insert into t (id,a) values (6,49);
+insert into t (id,a) values (6,50);
+insert into t (id,a) values (6,51);
+insert into t (id,a) values (6,52);
+insert into t (id,a) values (6,53);
+insert into t (id,a) values (6,54);
+insert into t (id,a) values (6,55);
+insert into t (id,a) values (6,56);
+insert into t (id,a) values (6,57);
+insert into t (id,a) values (6,58);
+insert into t (id,a) values (6,59);
+insert into t (id,a) values (6,60);
+insert into t (id,a) values (6,61);
+insert into t (id,a) values (6,62);
+insert into t (id,a) values (6,63);
+insert into t (id,a) values (6,64);
+insert into t (id,a) values (6,65);
+insert into t (id,a) values (6,66);
+insert into t (id,a) values (6,67);
+insert into t (id,a) values (6,68);
+insert into t (id,a) values (6,69);
+insert into t (id,a) values (6,70);
+insert into t (id,a) values (6,71);
+insert into t (id,a) values (6,72);
+insert into t (id,a) values (6,73);
+insert into t (id,a) values (6,74);
+insert into t (id,a) values (6,75);
+insert into t (id,a) values (6,76);
+insert into t (id,a) values (6,77);
+insert into t (id,a) values (6,78);
+insert into t (id,a) values (6,79);
+insert into t (id,a) values (6,80);
+insert into t (id,a) values (6,81);
+insert into t (id,a) values (6,82);
+insert into t (id,a) values (6,83);
+insert into t (id,a) values (6,84);
+insert into t (id,a) values (6,85);
+insert into t (id,a) values (6,86);
+insert into t (id,a) values (6,87);
+insert into t (id,a) values (6,88);
+insert into t (id,a) values (6,89);
+insert into t (id,a) values (6,90);
+insert into t (id,a) values (6,91);
+insert into t (id,a) values (6,92);
+insert into t (id,a) values (6,93);
+insert into t (id,a) values (6,94);
+insert into t (id,a) values (6,95);
+insert into t (id,a) values (6,96);
+insert into t (id,a) values (6,97);
+insert into t (id,a) values (6,98);
+insert into t (id,a) values (6,99);
+insert into t (id,a) values (7,0);
+insert into t (id,a) values (7,1);
+insert into t (id,a) values (7,2);
+insert into t (id,a) values (7,3);
+insert into t (id,a) values (7,4);
+insert into t (id,a) values (7,5);
+insert into t (id,a) values (7,6);
+insert into t (id,a) values (7,7);
+insert into t (id,a) values (7,8);
+insert into t (id,a) values (7,9);
+insert into t (id,a) values (7,10);
+insert into t (id,a) values (7,11);
+insert into t (id,a) values (7,12);
+insert into t (id,a) values (7,13);
+insert into t (id,a) values (7,14);
+insert into t (id,a) values (7,15);
+insert into t (id,a) values (7,16);
+insert into t (id,a) values (7,17);
+insert into t (id,a) values (7,18);
+insert into t (id,a) values (7,19);
+insert into t (id,a) values (7,20);
+insert into t (id,a) values (7,21);
+insert into t (id,a) values (7,22);
+insert into t (id,a) values (7,23);
+insert into t (id,a) values (7,24);
+insert into t (id,a) values (7,25);
+insert into t (id,a) values (7,26);
+insert into t (id,a) values (7,27);
+insert into t (id,a) values (7,28);
+insert into t (id,a) values (7,29);
+insert into t (id,a) values (7,30);
+insert into t (id,a) values (7,31);
+insert into t (id,a) values (7,32);
+insert into t (id,a) values (7,33);
+insert into t (id,a) values (7,34);
+insert into t (id,a) values (7,35);
+insert into t (id,a) values (7,36);
+insert into t (id,a) values (7,37);
+insert into t (id,a) values (7,38);
+insert into t (id,a) values (7,39);
+insert into t (id,a) values (7,40);
+insert into t (id,a) values (7,41);
+insert into t (id,a) values (7,42);
+insert into t (id,a) values (7,43);
+insert into t (id,a) values (7,44);
+insert into t (id,a) values (7,45);
+insert into t (id,a) values (7,46);
+insert into t (id,a) values (7,47);
+insert into t (id,a) values (7,48);
+insert into t (id,a) values (7,49);
+insert into t (id,a) values (7,50);
+insert into t (id,a) values (7,51);
+insert into t (id,a) values (7,52);
+insert into t (id,a) values (7,53);
+insert into t (id,a) values (7,54);
+insert into t (id,a) values (7,55);
+insert into t (id,a) values (7,56);
+insert into t (id,a) values (7,57);
+insert into t (id,a) values (7,58);
+insert into t (id,a) values (7,59);
+insert into t (id,a) values (7,60);
+insert into t (id,a) values (7,61);
+insert into t (id,a) values (7,62);
+insert into t (id,a) values (7,63);
+insert into t (id,a) values (7,64);
+insert into t (id,a) values (7,65);
+insert into t (id,a) values (7,66);
+insert into t (id,a) values (7,67);
+insert into t (id,a) values (7,68);
+insert into t (id,a) values (7,69);
+insert into t (id,a) values (7,70);
+insert into t (id,a) values (7,71);
+insert into t (id,a) values (7,72);
+insert into t (id,a) values (7,73);
+insert into t (id,a) values (7,74);
+insert into t (id,a) values (7,75);
+insert into t (id,a) values (7,76);
+insert into t (id,a) values (7,77);
+insert into t (id,a) values (7,78);
+insert into t (id,a) values (7,79);
+insert into t (id,a) values (7,80);
+insert into t (id,a) values (7,81);
+insert into t (id,a) values (7,82);
+insert into t (id,a) values (7,83);
+insert into t (id,a) values (7,84);
+insert into t (id,a) values (7,85);
+insert into t (id,a) values (7,86);
+insert into t (id,a) values (7,87);
+insert into t (id,a) values (7,88);
+insert into t (id,a) values (7,89);
+insert into t (id,a) values (7,90);
+insert into t (id,a) values (7,91);
+insert into t (id,a) values (7,92);
+insert into t (id,a) values (7,93);
+insert into t (id,a) values (7,94);
+insert into t (id,a) values (7,95);
+insert into t (id,a) values (7,96);
+insert into t (id,a) values (7,97);
+insert into t (id,a) values (7,98);
+insert into t (id,a) values (7,99);
+insert into t (id,a) values (8,0);
+insert into t (id,a) values (8,1);
+insert into t (id,a) values (8,2);
+insert into t (id,a) values (8,3);
+insert into t (id,a) values (8,4);
+insert into t (id,a) values (8,5);
+insert into t (id,a) values (8,6);
+insert into t (id,a) values (8,7);
+insert into t (id,a) values (8,8);
+insert into t (id,a) values (8,9);
+insert into t (id,a) values (8,10);
+insert into t (id,a) values (8,11);
+insert into t (id,a) values (8,12);
+insert into t (id,a) values (8,13);
+insert into t (id,a) values (8,14);
+insert into t (id,a) values (8,15);
+insert into t (id,a) values (8,16);
+insert into t (id,a) values (8,17);
+insert into t (id,a) values (8,18);
+insert into t (id,a) values (8,19);
+insert into t (id,a) values (8,20);
+insert into t (id,a) values (8,21);
+insert into t (id,a) values (8,22);
+insert into t (id,a) values (8,23);
+insert into t (id,a) values (8,24);
+insert into t (id,a) values (8,25);
+insert into t (id,a) values (8,26);
+insert into t (id,a) values (8,27);
+insert into t (id,a) values (8,28);
+insert into t (id,a) values (8,29);
+insert into t (id,a) values (8,30);
+insert into t (id,a) values (8,31);
+insert into t (id,a) values (8,32);
+insert into t (id,a) values (8,33);
+insert into t (id,a) values (8,34);
+insert into t (id,a) values (8,35);
+insert into t (id,a) values (8,36);
+insert into t (id,a) values (8,37);
+insert into t (id,a) values (8,38);
+insert into t (id,a) values (8,39);
+insert into t (id,a) values (8,40);
+insert into t (id,a) values (8,41);
+insert into t (id,a) values (8,42);
+insert into t (id,a) values (8,43);
+insert into t (id,a) values (8,44);
+insert into t (id,a) values (8,45);
+insert into t (id,a) values (8,46);
+insert into t (id,a) values (8,47);
+insert into t (id,a) values (8,48);
+insert into t (id,a) values (8,49);
+insert into t (id,a) values (8,50);
+insert into t (id,a) values (8,51);
+insert into t (id,a) values (8,52);
+insert into t (id,a) values (8,53);
+insert into t (id,a) values (8,54);
+insert into t (id,a) values (8,55);
+insert into t (id,a) values (8,56);
+insert into t (id,a) values (8,57);
+insert into t (id,a) values (8,58);
+insert into t (id,a) values (8,59);
+insert into t (id,a) values (8,60);
+insert into t (id,a) values (8,61);
+insert into t (id,a) values (8,62);
+insert into t (id,a) values (8,63);
+insert into t (id,a) values (8,64);
+insert into t (id,a) values (8,65);
+insert into t (id,a) values (8,66);
+insert into t (id,a) values (8,67);
+insert into t (id,a) values (8,68);
+insert into t (id,a) values (8,69);
+insert into t (id,a) values (8,70);
+insert into t (id,a) values (8,71);
+insert into t (id,a) values (8,72);
+insert into t (id,a) values (8,73);
+insert into t (id,a) values (8,74);
+insert into t (id,a) values (8,75);
+insert into t (id,a) values (8,76);
+insert into t (id,a) values (8,77);
+insert into t (id,a) values (8,78);
+insert into t (id,a) values (8,79);
+insert into t (id,a) values (8,80);
+insert into t (id,a) values (8,81);
+insert into t (id,a) values (8,82);
+insert into t (id,a) values (8,83);
+insert into t (id,a) values (8,84);
+insert into t (id,a) values (8,85);
+insert into t (id,a) values (8,86);
+insert into t (id,a) values (8,87);
+insert into t (id,a) values (8,88);
+insert into t (id,a) values (8,89);
+insert into t (id,a) values (8,90);
+insert into t (id,a) values (8,91);
+insert into t (id,a) values (8,92);
+insert into t (id,a) values (8,93);
+insert into t (id,a) values (8,94);
+insert into t (id,a) values (8,95);
+insert into t (id,a) values (8,96);
+insert into t (id,a) values (8,97);
+insert into t (id,a) values (8,98);
+insert into t (id,a) values (8,99);
+insert into t (id,a) values (9,0);
+insert into t (id,a) values (9,1);
+insert into t (id,a) values (9,2);
+insert into t (id,a) values (9,3);
+insert into t (id,a) values (9,4);
+insert into t (id,a) values (9,5);
+insert into t (id,a) values (9,6);
+insert into t (id,a) values (9,7);
+insert into t (id,a) values (9,8);
+insert into t (id,a) values (9,9);
+insert into t (id,a) values (9,10);
+insert into t (id,a) values (9,11);
+insert into t (id,a) values (9,12);
+insert into t (id,a) values (9,13);
+insert into t (id,a) values (9,14);
+insert into t (id,a) values (9,15);
+insert into t (id,a) values (9,16);
+insert into t (id,a) values (9,17);
+insert into t (id,a) values (9,18);
+insert into t (id,a) values (9,19);
+insert into t (id,a) values (9,20);
+insert into t (id,a) values (9,21);
+insert into t (id,a) values (9,22);
+insert into t (id,a) values (9,23);
+insert into t (id,a) values (9,24);
+insert into t (id,a) values (9,25);
+insert into t (id,a) values (9,26);
+insert into t (id,a) values (9,27);
+insert into t (id,a) values (9,28);
+insert into t (id,a) values (9,29);
+insert into t (id,a) values (9,30);
+insert into t (id,a) values (9,31);
+insert into t (id,a) values (9,32);
+insert into t (id,a) values (9,33);
+insert into t (id,a) values (9,34);
+insert into t (id,a) values (9,35);
+insert into t (id,a) values (9,36);
+insert into t (id,a) values (9,37);
+insert into t (id,a) values (9,38);
+insert into t (id,a) values (9,39);
+insert into t (id,a) values (9,40);
+insert into t (id,a) values (9,41);
+insert into t (id,a) values (9,42);
+insert into t (id,a) values (9,43);
+insert into t (id,a) values (9,44);
+insert into t (id,a) values (9,45);
+insert into t (id,a) values (9,46);
+insert into t (id,a) values (9,47);
+insert into t (id,a) values (9,48);
+insert into t (id,a) values (9,49);
+insert into t (id,a) values (9,50);
+insert into t (id,a) values (9,51);
+insert into t (id,a) values (9,52);
+insert into t (id,a) values (9,53);
+insert into t (id,a) values (9,54);
+insert into t (id,a) values (9,55);
+insert into t (id,a) values (9,56);
+insert into t (id,a) values (9,57);
+insert into t (id,a) values (9,58);
+insert into t (id,a) values (9,59);
+insert into t (id,a) values (9,60);
+insert into t (id,a) values (9,61);
+insert into t (id,a) values (9,62);
+insert into t (id,a) values (9,63);
+insert into t (id,a) values (9,64);
+insert into t (id,a) values (9,65);
+insert into t (id,a) values (9,66);
+insert into t (id,a) values (9,67);
+insert into t (id,a) values (9,68);
+insert into t (id,a) values (9,69);
+insert into t (id,a) values (9,70);
+insert into t (id,a) values (9,71);
+insert into t (id,a) values (9,72);
+insert into t (id,a) values (9,73);
+insert into t (id,a) values (9,74);
+insert into t (id,a) values (9,75);
+insert into t (id,a) values (9,76);
+insert into t (id,a) values (9,77);
+insert into t (id,a) values (9,78);
+insert into t (id,a) values (9,79);
+insert into t (id,a) values (9,80);
+insert into t (id,a) values (9,81);
+insert into t (id,a) values (9,82);
+insert into t (id,a) values (9,83);
+insert into t (id,a) values (9,84);
+insert into t (id,a) values (9,85);
+insert into t (id,a) values (9,86);
+insert into t (id,a) values (9,87);
+insert into t (id,a) values (9,88);
+insert into t (id,a) values (9,89);
+insert into t (id,a) values (9,90);
+insert into t (id,a) values (9,91);
+insert into t (id,a) values (9,92);
+insert into t (id,a) values (9,93);
+insert into t (id,a) values (9,94);
+insert into t (id,a) values (9,95);
+insert into t (id,a) values (9,96);
+insert into t (id,a) values (9,97);
+insert into t (id,a) values (9,98);
+insert into t (id,a) values (9,99);
+insert into t (id,a) values (10,0);
+insert into t (id,a) values (10,1);
+insert into t (id,a) values (10,2);
+insert into t (id,a) values (10,3);
+insert into t (id,a) values (10,4);
+insert into t (id,a) values (10,5);
+insert into t (id,a) values (10,6);
+insert into t (id,a) values (10,7);
+insert into t (id,a) values (10,8);
+insert into t (id,a) values (10,9);
+insert into t (id,a) values (10,10);
+insert into t (id,a) values (10,11);
+insert into t (id,a) values (10,12);
+insert into t (id,a) values (10,13);
+insert into t (id,a) values (10,14);
+insert into t (id,a) values (10,15);
+insert into t (id,a) values (10,16);
+insert into t (id,a) values (10,17);
+insert into t (id,a) values (10,18);
+insert into t (id,a) values (10,19);
+insert into t (id,a) values (10,20);
+insert into t (id,a) values (10,21);
+insert into t (id,a) values (10,22);
+insert into t (id,a) values (10,23);
+insert into t (id,a) values (10,24);
+insert into t (id,a) values (10,25);
+insert into t (id,a) values (10,26);
+insert into t (id,a) values (10,27);
+insert into t (id,a) values (10,28);
+insert into t (id,a) values (10,29);
+insert into t (id,a) values (10,30);
+insert into t (id,a) values (10,31);
+insert into t (id,a) values (10,32);
+insert into t (id,a) values (10,33);
+insert into t (id,a) values (10,34);
+insert into t (id,a) values (10,35);
+insert into t (id,a) values (10,36);
+insert into t (id,a) values (10,37);
+insert into t (id,a) values (10,38);
+insert into t (id,a) values (10,39);
+insert into t (id,a) values (10,40);
+insert into t (id,a) values (10,41);
+insert into t (id,a) values (10,42);
+insert into t (id,a) values (10,43);
+insert into t (id,a) values (10,44);
+insert into t (id,a) values (10,45);
+insert into t (id,a) values (10,46);
+insert into t (id,a) values (10,47);
+insert into t (id,a) values (10,48);
+insert into t (id,a) values (10,49);
+insert into t (id,a) values (10,50);
+insert into t (id,a) values (10,51);
+insert into t (id,a) values (10,52);
+insert into t (id,a) values (10,53);
+insert into t (id,a) values (10,54);
+insert into t (id,a) values (10,55);
+insert into t (id,a) values (10,56);
+insert into t (id,a) values (10,57);
+insert into t (id,a) values (10,58);
+insert into t (id,a) values (10,59);
+insert into t (id,a) values (10,60);
+insert into t (id,a) values (10,61);
+insert into t (id,a) values (10,62);
+insert into t (id,a) values (10,63);
+insert into t (id,a) values (10,64);
+insert into t (id,a) values (10,65);
+insert into t (id,a) values (10,66);
+insert into t (id,a) values (10,67);
+insert into t (id,a) values (10,68);
+insert into t (id,a) values (10,69);
+insert into t (id,a) values (10,70);
+insert into t (id,a) values (10,71);
+insert into t (id,a) values (10,72);
+insert into t (id,a) values (10,73);
+insert into t (id,a) values (10,74);
+insert into t (id,a) values (10,75);
+insert into t (id,a) values (10,76);
+insert into t (id,a) values (10,77);
+insert into t (id,a) values (10,78);
+insert into t (id,a) values (10,79);
+insert into t (id,a) values (10,80);
+insert into t (id,a) values (10,81);
+insert into t (id,a) values (10,82);
+insert into t (id,a) values (10,83);
+insert into t (id,a) values (10,84);
+insert into t (id,a) values (10,85);
+insert into t (id,a) values (10,86);
+insert into t (id,a) values (10,87);
+insert into t (id,a) values (10,88);
+insert into t (id,a) values (10,89);
+insert into t (id,a) values (10,90);
+insert into t (id,a) values (10,91);
+insert into t (id,a) values (10,92);
+insert into t (id,a) values (10,93);
+insert into t (id,a) values (10,94);
+insert into t (id,a) values (10,95);
+insert into t (id,a) values (10,96);
+insert into t (id,a) values (10,97);
+insert into t (id,a) values (10,98);
+insert into t (id,a) values (10,99);
+insert into t (id,a) values (11,0);
+insert into t (id,a) values (11,1);
+insert into t (id,a) values (11,2);
+insert into t (id,a) values (11,3);
+insert into t (id,a) values (11,4);
+insert into t (id,a) values (11,5);
+insert into t (id,a) values (11,6);
+insert into t (id,a) values (11,7);
+insert into t (id,a) values (11,8);
+insert into t (id,a) values (11,9);
+insert into t (id,a) values (11,10);
+insert into t (id,a) values (11,11);
+insert into t (id,a) values (11,12);
+insert into t (id,a) values (11,13);
+insert into t (id,a) values (11,14);
+insert into t (id,a) values (11,15);
+insert into t (id,a) values (11,16);
+insert into t (id,a) values (11,17);
+insert into t (id,a) values (11,18);
+insert into t (id,a) values (11,19);
+insert into t (id,a) values (11,20);
+insert into t (id,a) values (11,21);
+insert into t (id,a) values (11,22);
+insert into t (id,a) values (11,23);
+insert into t (id,a) values (11,24);
+insert into t (id,a) values (11,25);
+insert into t (id,a) values (11,26);
+insert into t (id,a) values (11,27);
+insert into t (id,a) values (11,28);
+insert into t (id,a) values (11,29);
+insert into t (id,a) values (11,30);
+insert into t (id,a) values (11,31);
+insert into t (id,a) values (11,32);
+insert into t (id,a) values (11,33);
+insert into t (id,a) values (11,34);
+insert into t (id,a) values (11,35);
+insert into t (id,a) values (11,36);
+insert into t (id,a) values (11,37);
+insert into t (id,a) values (11,38);
+insert into t (id,a) values (11,39);
+insert into t (id,a) values (11,40);
+insert into t (id,a) values (11,41);
+insert into t (id,a) values (11,42);
+insert into t (id,a) values (11,43);
+insert into t (id,a) values (11,44);
+insert into t (id,a) values (11,45);
+insert into t (id,a) values (11,46);
+insert into t (id,a) values (11,47);
+insert into t (id,a) values (11,48);
+insert into t (id,a) values (11,49);
+insert into t (id,a) values (11,50);
+insert into t (id,a) values (11,51);
+insert into t (id,a) values (11,52);
+insert into t (id,a) values (11,53);
+insert into t (id,a) values (11,54);
+insert into t (id,a) values (11,55);
+insert into t (id,a) values (11,56);
+insert into t (id,a) values (11,57);
+insert into t (id,a) values (11,58);
+insert into t (id,a) values (11,59);
+insert into t (id,a) values (11,60);
+insert into t (id,a) values (11,61);
+insert into t (id,a) values (11,62);
+insert into t (id,a) values (11,63);
+insert into t (id,a) values (11,64);
+insert into t (id,a) values (11,65);
+insert into t (id,a) values (11,66);
+insert into t (id,a) values (11,67);
+insert into t (id,a) values (11,68);
+insert into t (id,a) values (11,69);
+insert into t (id,a) values (11,70);
+insert into t (id,a) values (11,71);
+insert into t (id,a) values (11,72);
+insert into t (id,a) values (11,73);
+insert into t (id,a) values (11,74);
+insert into t (id,a) values (11,75);
+insert into t (id,a) values (11,76);
+insert into t (id,a) values (11,77);
+insert into t (id,a) values (11,78);
+insert into t (id,a) values (11,79);
+insert into t (id,a) values (11,80);
+insert into t (id,a) values (11,81);
+insert into t (id,a) values (11,82);
+insert into t (id,a) values (11,83);
+insert into t (id,a) values (11,84);
+insert into t (id,a) values (11,85);
+insert into t (id,a) values (11,86);
+insert into t (id,a) values (11,87);
+insert into t (id,a) values (11,88);
+insert into t (id,a) values (11,89);
+insert into t (id,a) values (11,90);
+insert into t (id,a) values (11,91);
+insert into t (id,a) values (11,92);
+insert into t (id,a) values (11,93);
+insert into t (id,a) values (11,94);
+insert into t (id,a) values (11,95);
+insert into t (id,a) values (11,96);
+insert into t (id,a) values (11,97);
+insert into t (id,a) values (11,98);
+insert into t (id,a) values (11,99);
+insert into t (id,a) values (12,0);
+insert into t (id,a) values (12,1);
+insert into t (id,a) values (12,2);
+insert into t (id,a) values (12,3);
+insert into t (id,a) values (12,4);
+insert into t (id,a) values (12,5);
+insert into t (id,a) values (12,6);
+insert into t (id,a) values (12,7);
+insert into t (id,a) values (12,8);
+insert into t (id,a) values (12,9);
+insert into t (id,a) values (12,10);
+insert into t (id,a) values (12,11);
+insert into t (id,a) values (12,12);
+insert into t (id,a) values (12,13);
+insert into t (id,a) values (12,14);
+insert into t (id,a) values (12,15);
+insert into t (id,a) values (12,16);
+insert into t (id,a) values (12,17);
+insert into t (id,a) values (12,18);
+insert into t (id,a) values (12,19);
+insert into t (id,a) values (12,20);
+insert into t (id,a) values (12,21);
+insert into t (id,a) values (12,22);
+insert into t (id,a) values (12,23);
+insert into t (id,a) values (12,24);
+insert into t (id,a) values (12,25);
+insert into t (id,a) values (12,26);
+insert into t (id,a) values (12,27);
+insert into t (id,a) values (12,28);
+insert into t (id,a) values (12,29);
+insert into t (id,a) values (12,30);
+insert into t (id,a) values (12,31);
+insert into t (id,a) values (12,32);
+insert into t (id,a) values (12,33);
+insert into t (id,a) values (12,34);
+insert into t (id,a) values (12,35);
+insert into t (id,a) values (12,36);
+insert into t (id,a) values (12,37);
+insert into t (id,a) values (12,38);
+insert into t (id,a) values (12,39);
+insert into t (id,a) values (12,40);
+insert into t (id,a) values (12,41);
+insert into t (id,a) values (12,42);
+insert into t (id,a) values (12,43);
+insert into t (id,a) values (12,44);
+insert into t (id,a) values (12,45);
+insert into t (id,a) values (12,46);
+insert into t (id,a) values (12,47);
+insert into t (id,a) values (12,48);
+insert into t (id,a) values (12,49);
+insert into t (id,a) values (12,50);
+insert into t (id,a) values (12,51);
+insert into t (id,a) values (12,52);
+insert into t (id,a) values (12,53);
+insert into t (id,a) values (12,54);
+insert into t (id,a) values (12,55);
+insert into t (id,a) values (12,56);
+insert into t (id,a) values (12,57);
+insert into t (id,a) values (12,58);
+insert into t (id,a) values (12,59);
+insert into t (id,a) values (12,60);
+insert into t (id,a) values (12,61);
+insert into t (id,a) values (12,62);
+insert into t (id,a) values (12,63);
+insert into t (id,a) values (12,64);
+insert into t (id,a) values (12,65);
+insert into t (id,a) values (12,66);
+insert into t (id,a) values (12,67);
+insert into t (id,a) values (12,68);
+insert into t (id,a) values (12,69);
+insert into t (id,a) values (12,70);
+insert into t (id,a) values (12,71);
+insert into t (id,a) values (12,72);
+insert into t (id,a) values (12,73);
+insert into t (id,a) values (12,74);
+insert into t (id,a) values (12,75);
+insert into t (id,a) values (12,76);
+insert into t (id,a) values (12,77);
+insert into t (id,a) values (12,78);
+insert into t (id,a) values (12,79);
+insert into t (id,a) values (12,80);
+insert into t (id,a) values (12,81);
+insert into t (id,a) values (12,82);
+insert into t (id,a) values (12,83);
+insert into t (id,a) values (12,84);
+insert into t (id,a) values (12,85);
+insert into t (id,a) values (12,86);
+insert into t (id,a) values (12,87);
+insert into t (id,a) values (12,88);
+insert into t (id,a) values (12,89);
+insert into t (id,a) values (12,90);
+insert into t (id,a) values (12,91);
+insert into t (id,a) values (12,92);
+insert into t (id,a) values (12,93);
+insert into t (id,a) values (12,94);
+insert into t (id,a) values (12,95);
+insert into t (id,a) values (12,96);
+insert into t (id,a) values (12,97);
+insert into t (id,a) values (12,98);
+insert into t (id,a) values (12,99);
+insert into t (id,a) values (13,0);
+insert into t (id,a) values (13,1);
+insert into t (id,a) values (13,2);
+insert into t (id,a) values (13,3);
+insert into t (id,a) values (13,4);
+insert into t (id,a) values (13,5);
+insert into t (id,a) values (13,6);
+insert into t (id,a) values (13,7);
+insert into t (id,a) values (13,8);
+insert into t (id,a) values (13,9);
+insert into t (id,a) values (13,10);
+insert into t (id,a) values (13,11);
+insert into t (id,a) values (13,12);
+insert into t (id,a) values (13,13);
+insert into t (id,a) values (13,14);
+insert into t (id,a) values (13,15);
+insert into t (id,a) values (13,16);
+insert into t (id,a) values (13,17);
+insert into t (id,a) values (13,18);
+insert into t (id,a) values (13,19);
+insert into t (id,a) values (13,20);
+insert into t (id,a) values (13,21);
+insert into t (id,a) values (13,22);
+insert into t (id,a) values (13,23);
+insert into t (id,a) values (13,24);
+insert into t (id,a) values (13,25);
+insert into t (id,a) values (13,26);
+insert into t (id,a) values (13,27);
+insert into t (id,a) values (13,28);
+insert into t (id,a) values (13,29);
+insert into t (id,a) values (13,30);
+insert into t (id,a) values (13,31);
+insert into t (id,a) values (13,32);
+insert into t (id,a) values (13,33);
+insert into t (id,a) values (13,34);
+insert into t (id,a) values (13,35);
+insert into t (id,a) values (13,36);
+insert into t (id,a) values (13,37);
+insert into t (id,a) values (13,38);
+insert into t (id,a) values (13,39);
+insert into t (id,a) values (13,40);
+insert into t (id,a) values (13,41);
+insert into t (id,a) values (13,42);
+insert into t (id,a) values (13,43);
+insert into t (id,a) values (13,44);
+insert into t (id,a) values (13,45);
+insert into t (id,a) values (13,46);
+insert into t (id,a) values (13,47);
+insert into t (id,a) values (13,48);
+insert into t (id,a) values (13,49);
+insert into t (id,a) values (13,50);
+insert into t (id,a) values (13,51);
+insert into t (id,a) values (13,52);
+insert into t (id,a) values (13,53);
+insert into t (id,a) values (13,54);
+insert into t (id,a) values (13,55);
+insert into t (id,a) values (13,56);
+insert into t (id,a) values (13,57);
+insert into t (id,a) values (13,58);
+insert into t (id,a) values (13,59);
+insert into t (id,a) values (13,60);
+insert into t (id,a) values (13,61);
+insert into t (id,a) values (13,62);
+insert into t (id,a) values (13,63);
+insert into t (id,a) values (13,64);
+insert into t (id,a) values (13,65);
+insert into t (id,a) values (13,66);
+insert into t (id,a) values (13,67);
+insert into t (id,a) values (13,68);
+insert into t (id,a) values (13,69);
+insert into t (id,a) values (13,70);
+insert into t (id,a) values (13,71);
+insert into t (id,a) values (13,72);
+insert into t (id,a) values (13,73);
+insert into t (id,a) values (13,74);
+insert into t (id,a) values (13,75);
+insert into t (id,a) values (13,76);
+insert into t (id,a) values (13,77);
+insert into t (id,a) values (13,78);
+insert into t (id,a) values (13,79);
+insert into t (id,a) values (13,80);
+insert into t (id,a) values (13,81);
+insert into t (id,a) values (13,82);
+insert into t (id,a) values (13,83);
+insert into t (id,a) values (13,84);
+insert into t (id,a) values (13,85);
+insert into t (id,a) values (13,86);
+insert into t (id,a) values (13,87);
+insert into t (id,a) values (13,88);
+insert into t (id,a) values (13,89);
+insert into t (id,a) values (13,90);
+insert into t (id,a) values (13,91);
+insert into t (id,a) values (13,92);
+insert into t (id,a) values (13,93);
+insert into t (id,a) values (13,94);
+insert into t (id,a) values (13,95);
+insert into t (id,a) values (13,96);
+insert into t (id,a) values (13,97);
+insert into t (id,a) values (13,98);
+insert into t (id,a) values (13,99);
+insert into t (id,a) values (14,0);
+insert into t (id,a) values (14,1);
+insert into t (id,a) values (14,2);
+insert into t (id,a) values (14,3);
+insert into t (id,a) values (14,4);
+insert into t (id,a) values (14,5);
+insert into t (id,a) values (14,6);
+insert into t (id,a) values (14,7);
+insert into t (id,a) values (14,8);
+insert into t (id,a) values (14,9);
+insert into t (id,a) values (14,10);
+insert into t (id,a) values (14,11);
+insert into t (id,a) values (14,12);
+insert into t (id,a) values (14,13);
+insert into t (id,a) values (14,14);
+insert into t (id,a) values (14,15);
+insert into t (id,a) values (14,16);
+insert into t (id,a) values (14,17);
+insert into t (id,a) values (14,18);
+insert into t (id,a) values (14,19);
+insert into t (id,a) values (14,20);
+insert into t (id,a) values (14,21);
+insert into t (id,a) values (14,22);
+insert into t (id,a) values (14,23);
+insert into t (id,a) values (14,24);
+insert into t (id,a) values (14,25);
+insert into t (id,a) values (14,26);
+insert into t (id,a) values (14,27);
+insert into t (id,a) values (14,28);
+insert into t (id,a) values (14,29);
+insert into t (id,a) values (14,30);
+insert into t (id,a) values (14,31);
+insert into t (id,a) values (14,32);
+insert into t (id,a) values (14,33);
+insert into t (id,a) values (14,34);
+insert into t (id,a) values (14,35);
+insert into t (id,a) values (14,36);
+insert into t (id,a) values (14,37);
+insert into t (id,a) values (14,38);
+insert into t (id,a) values (14,39);
+insert into t (id,a) values (14,40);
+insert into t (id,a) values (14,41);
+insert into t (id,a) values (14,42);
+insert into t (id,a) values (14,43);
+insert into t (id,a) values (14,44);
+insert into t (id,a) values (14,45);
+insert into t (id,a) values (14,46);
+insert into t (id,a) values (14,47);
+insert into t (id,a) values (14,48);
+insert into t (id,a) values (14,49);
+insert into t (id,a) values (14,50);
+insert into t (id,a) values (14,51);
+insert into t (id,a) values (14,52);
+insert into t (id,a) values (14,53);
+insert into t (id,a) values (14,54);
+insert into t (id,a) values (14,55);
+insert into t (id,a) values (14,56);
+insert into t (id,a) values (14,57);
+insert into t (id,a) values (14,58);
+insert into t (id,a) values (14,59);
+insert into t (id,a) values (14,60);
+insert into t (id,a) values (14,61);
+insert into t (id,a) values (14,62);
+insert into t (id,a) values (14,63);
+insert into t (id,a) values (14,64);
+insert into t (id,a) values (14,65);
+insert into t (id,a) values (14,66);
+insert into t (id,a) values (14,67);
+insert into t (id,a) values (14,68);
+insert into t (id,a) values (14,69);
+insert into t (id,a) values (14,70);
+insert into t (id,a) values (14,71);
+insert into t (id,a) values (14,72);
+insert into t (id,a) values (14,73);
+insert into t (id,a) values (14,74);
+insert into t (id,a) values (14,75);
+insert into t (id,a) values (14,76);
+insert into t (id,a) values (14,77);
+insert into t (id,a) values (14,78);
+insert into t (id,a) values (14,79);
+insert into t (id,a) values (14,80);
+insert into t (id,a) values (14,81);
+insert into t (id,a) values (14,82);
+insert into t (id,a) values (14,83);
+insert into t (id,a) values (14,84);
+insert into t (id,a) values (14,85);
+insert into t (id,a) values (14,86);
+insert into t (id,a) values (14,87);
+insert into t (id,a) values (14,88);
+insert into t (id,a) values (14,89);
+insert into t (id,a) values (14,90);
+insert into t (id,a) values (14,91);
+insert into t (id,a) values (14,92);
+insert into t (id,a) values (14,93);
+insert into t (id,a) values (14,94);
+insert into t (id,a) values (14,95);
+insert into t (id,a) values (14,96);
+insert into t (id,a) values (14,97);
+insert into t (id,a) values (14,98);
+insert into t (id,a) values (14,99);
+insert into t (id,a) values (15,0);
+insert into t (id,a) values (15,1);
+insert into t (id,a) values (15,2);
+insert into t (id,a) values (15,3);
+insert into t (id,a) values (15,4);
+insert into t (id,a) values (15,5);
+insert into t (id,a) values (15,6);
+insert into t (id,a) values (15,7);
+insert into t (id,a) values (15,8);
+insert into t (id,a) values (15,9);
+insert into t (id,a) values (15,10);
+insert into t (id,a) values (15,11);
+insert into t (id,a) values (15,12);
+insert into t (id,a) values (15,13);
+insert into t (id,a) values (15,14);
+insert into t (id,a) values (15,15);
+insert into t (id,a) values (15,16);
+insert into t (id,a) values (15,17);
+insert into t (id,a) values (15,18);
+insert into t (id,a) values (15,19);
+insert into t (id,a) values (15,20);
+insert into t (id,a) values (15,21);
+insert into t (id,a) values (15,22);
+insert into t (id,a) values (15,23);
+insert into t (id,a) values (15,24);
+insert into t (id,a) values (15,25);
+insert into t (id,a) values (15,26);
+insert into t (id,a) values (15,27);
+insert into t (id,a) values (15,28);
+insert into t (id,a) values (15,29);
+insert into t (id,a) values (15,30);
+insert into t (id,a) values (15,31);
+insert into t (id,a) values (15,32);
+insert into t (id,a) values (15,33);
+insert into t (id,a) values (15,34);
+insert into t (id,a) values (15,35);
+insert into t (id,a) values (15,36);
+insert into t (id,a) values (15,37);
+insert into t (id,a) values (15,38);
+insert into t (id,a) values (15,39);
+insert into t (id,a) values (15,40);
+insert into t (id,a) values (15,41);
+insert into t (id,a) values (15,42);
+insert into t (id,a) values (15,43);
+insert into t (id,a) values (15,44);
+insert into t (id,a) values (15,45);
+insert into t (id,a) values (15,46);
+insert into t (id,a) values (15,47);
+insert into t (id,a) values (15,48);
+insert into t (id,a) values (15,49);
+insert into t (id,a) values (15,50);
+insert into t (id,a) values (15,51);
+insert into t (id,a) values (15,52);
+insert into t (id,a) values (15,53);
+insert into t (id,a) values (15,54);
+insert into t (id,a) values (15,55);
+insert into t (id,a) values (15,56);
+insert into t (id,a) values (15,57);
+insert into t (id,a) values (15,58);
+insert into t (id,a) values (15,59);
+insert into t (id,a) values (15,60);
+insert into t (id,a) values (15,61);
+insert into t (id,a) values (15,62);
+insert into t (id,a) values (15,63);
+insert into t (id,a) values (15,64);
+insert into t (id,a) values (15,65);
+insert into t (id,a) values (15,66);
+insert into t (id,a) values (15,67);
+insert into t (id,a) values (15,68);
+insert into t (id,a) values (15,69);
+insert into t (id,a) values (15,70);
+insert into t (id,a) values (15,71);
+insert into t (id,a) values (15,72);
+insert into t (id,a) values (15,73);
+insert into t (id,a) values (15,74);
+insert into t (id,a) values (15,75);
+insert into t (id,a) values (15,76);
+insert into t (id,a) values (15,77);
+insert into t (id,a) values (15,78);
+insert into t (id,a) values (15,79);
+insert into t (id,a) values (15,80);
+insert into t (id,a) values (15,81);
+insert into t (id,a) values (15,82);
+insert into t (id,a) values (15,83);
+insert into t (id,a) values (15,84);
+insert into t (id,a) values (15,85);
+insert into t (id,a) values (15,86);
+insert into t (id,a) values (15,87);
+insert into t (id,a) values (15,88);
+insert into t (id,a) values (15,89);
+insert into t (id,a) values (15,90);
+insert into t (id,a) values (15,91);
+insert into t (id,a) values (15,92);
+insert into t (id,a) values (15,93);
+insert into t (id,a) values (15,94);
+insert into t (id,a) values (15,95);
+insert into t (id,a) values (15,96);
+insert into t (id,a) values (15,97);
+insert into t (id,a) values (15,98);
+insert into t (id,a) values (15,99);
+insert into t (id,a) values (16,0);
+insert into t (id,a) values (16,1);
+insert into t (id,a) values (16,2);
+insert into t (id,a) values (16,3);
+insert into t (id,a) values (16,4);
+insert into t (id,a) values (16,5);
+insert into t (id,a) values (16,6);
+insert into t (id,a) values (16,7);
+insert into t (id,a) values (16,8);
+insert into t (id,a) values (16,9);
+insert into t (id,a) values (16,10);
+insert into t (id,a) values (16,11);
+insert into t (id,a) values (16,12);
+insert into t (id,a) values (16,13);
+insert into t (id,a) values (16,14);
+insert into t (id,a) values (16,15);
+insert into t (id,a) values (16,16);
+insert into t (id,a) values (16,17);
+insert into t (id,a) values (16,18);
+insert into t (id,a) values (16,19);
+insert into t (id,a) values (16,20);
+insert into t (id,a) values (16,21);
+insert into t (id,a) values (16,22);
+insert into t (id,a) values (16,23);
+insert into t (id,a) values (16,24);
+insert into t (id,a) values (16,25);
+insert into t (id,a) values (16,26);
+insert into t (id,a) values (16,27);
+insert into t (id,a) values (16,28);
+insert into t (id,a) values (16,29);
+insert into t (id,a) values (16,30);
+insert into t (id,a) values (16,31);
+insert into t (id,a) values (16,32);
+insert into t (id,a) values (16,33);
+insert into t (id,a) values (16,34);
+insert into t (id,a) values (16,35);
+insert into t (id,a) values (16,36);
+insert into t (id,a) values (16,37);
+insert into t (id,a) values (16,38);
+insert into t (id,a) values (16,39);
+insert into t (id,a) values (16,40);
+insert into t (id,a) values (16,41);
+insert into t (id,a) values (16,42);
+insert into t (id,a) values (16,43);
+insert into t (id,a) values (16,44);
+insert into t (id,a) values (16,45);
+insert into t (id,a) values (16,46);
+insert into t (id,a) values (16,47);
+insert into t (id,a) values (16,48);
+insert into t (id,a) values (16,49);
+insert into t (id,a) values (16,50);
+insert into t (id,a) values (16,51);
+insert into t (id,a) values (16,52);
+insert into t (id,a) values (16,53);
+insert into t (id,a) values (16,54);
+insert into t (id,a) values (16,55);
+insert into t (id,a) values (16,56);
+insert into t (id,a) values (16,57);
+insert into t (id,a) values (16,58);
+insert into t (id,a) values (16,59);
+insert into t (id,a) values (16,60);
+insert into t (id,a) values (16,61);
+insert into t (id,a) values (16,62);
+insert into t (id,a) values (16,63);
+insert into t (id,a) values (16,64);
+insert into t (id,a) values (16,65);
+insert into t (id,a) values (16,66);
+insert into t (id,a) values (16,67);
+insert into t (id,a) values (16,68);
+insert into t (id,a) values (16,69);
+insert into t (id,a) values (16,70);
+insert into t (id,a) values (16,71);
+insert into t (id,a) values (16,72);
+insert into t (id,a) values (16,73);
+insert into t (id,a) values (16,74);
+insert into t (id,a) values (16,75);
+insert into t (id,a) values (16,76);
+insert into t (id,a) values (16,77);
+insert into t (id,a) values (16,78);
+insert into t (id,a) values (16,79);
+insert into t (id,a) values (16,80);
+insert into t (id,a) values (16,81);
+insert into t (id,a) values (16,82);
+insert into t (id,a) values (16,83);
+insert into t (id,a) values (16,84);
+insert into t (id,a) values (16,85);
+insert into t (id,a) values (16,86);
+insert into t (id,a) values (16,87);
+insert into t (id,a) values (16,88);
+insert into t (id,a) values (16,89);
+insert into t (id,a) values (16,90);
+insert into t (id,a) values (16,91);
+insert into t (id,a) values (16,92);
+insert into t (id,a) values (16,93);
+insert into t (id,a) values (16,94);
+insert into t (id,a) values (16,95);
+insert into t (id,a) values (16,96);
+insert into t (id,a) values (16,97);
+insert into t (id,a) values (16,98);
+insert into t (id,a) values (16,99);
+insert into t (id,a) values (17,0);
+insert into t (id,a) values (17,1);
+insert into t (id,a) values (17,2);
+insert into t (id,a) values (17,3);
+insert into t (id,a) values (17,4);
+insert into t (id,a) values (17,5);
+insert into t (id,a) values (17,6);
+insert into t (id,a) values (17,7);
+insert into t (id,a) values (17,8);
+insert into t (id,a) values (17,9);
+insert into t (id,a) values (17,10);
+insert into t (id,a) values (17,11);
+insert into t (id,a) values (17,12);
+insert into t (id,a) values (17,13);
+insert into t (id,a) values (17,14);
+insert into t (id,a) values (17,15);
+insert into t (id,a) values (17,16);
+insert into t (id,a) values (17,17);
+insert into t (id,a) values (17,18);
+insert into t (id,a) values (17,19);
+insert into t (id,a) values (17,20);
+insert into t (id,a) values (17,21);
+insert into t (id,a) values (17,22);
+insert into t (id,a) values (17,23);
+insert into t (id,a) values (17,24);
+insert into t (id,a) values (17,25);
+insert into t (id,a) values (17,26);
+insert into t (id,a) values (17,27);
+insert into t (id,a) values (17,28);
+insert into t (id,a) values (17,29);
+insert into t (id,a) values (17,30);
+insert into t (id,a) values (17,31);
+insert into t (id,a) values (17,32);
+insert into t (id,a) values (17,33);
+insert into t (id,a) values (17,34);
+insert into t (id,a) values (17,35);
+insert into t (id,a) values (17,36);
+insert into t (id,a) values (17,37);
+insert into t (id,a) values (17,38);
+insert into t (id,a) values (17,39);
+insert into t (id,a) values (17,40);
+insert into t (id,a) values (17,41);
+insert into t (id,a) values (17,42);
+insert into t (id,a) values (17,43);
+insert into t (id,a) values (17,44);
+insert into t (id,a) values (17,45);
+insert into t (id,a) values (17,46);
+insert into t (id,a) values (17,47);
+insert into t (id,a) values (17,48);
+insert into t (id,a) values (17,49);
+insert into t (id,a) values (17,50);
+insert into t (id,a) values (17,51);
+insert into t (id,a) values (17,52);
+insert into t (id,a) values (17,53);
+insert into t (id,a) values (17,54);
+insert into t (id,a) values (17,55);
+insert into t (id,a) values (17,56);
+insert into t (id,a) values (17,57);
+insert into t (id,a) values (17,58);
+insert into t (id,a) values (17,59);
+insert into t (id,a) values (17,60);
+insert into t (id,a) values (17,61);
+insert into t (id,a) values (17,62);
+insert into t (id,a) values (17,63);
+insert into t (id,a) values (17,64);
+insert into t (id,a) values (17,65);
+insert into t (id,a) values (17,66);
+insert into t (id,a) values (17,67);
+insert into t (id,a) values (17,68);
+insert into t (id,a) values (17,69);
+insert into t (id,a) values (17,70);
+insert into t (id,a) values (17,71);
+insert into t (id,a) values (17,72);
+insert into t (id,a) values (17,73);
+insert into t (id,a) values (17,74);
+insert into t (id,a) values (17,75);
+insert into t (id,a) values (17,76);
+insert into t (id,a) values (17,77);
+insert into t (id,a) values (17,78);
+insert into t (id,a) values (17,79);
+insert into t (id,a) values (17,80);
+insert into t (id,a) values (17,81);
+insert into t (id,a) values (17,82);
+insert into t (id,a) values (17,83);
+insert into t (id,a) values (17,84);
+insert into t (id,a) values (17,85);
+insert into t (id,a) values (17,86);
+insert into t (id,a) values (17,87);
+insert into t (id,a) values (17,88);
+insert into t (id,a) values (17,89);
+insert into t (id,a) values (17,90);
+insert into t (id,a) values (17,91);
+insert into t (id,a) values (17,92);
+insert into t (id,a) values (17,93);
+insert into t (id,a) values (17,94);
+insert into t (id,a) values (17,95);
+insert into t (id,a) values (17,96);
+insert into t (id,a) values (17,97);
+insert into t (id,a) values (17,98);
+insert into t (id,a) values (17,99);
+insert into t (id,a) values (18,0);
+insert into t (id,a) values (18,1);
+insert into t (id,a) values (18,2);
+insert into t (id,a) values (18,3);
+insert into t (id,a) values (18,4);
+insert into t (id,a) values (18,5);
+insert into t (id,a) values (18,6);
+insert into t (id,a) values (18,7);
+insert into t (id,a) values (18,8);
+insert into t (id,a) values (18,9);
+insert into t (id,a) values (18,10);
+insert into t (id,a) values (18,11);
+insert into t (id,a) values (18,12);
+insert into t (id,a) values (18,13);
+insert into t (id,a) values (18,14);
+insert into t (id,a) values (18,15);
+insert into t (id,a) values (18,16);
+insert into t (id,a) values (18,17);
+insert into t (id,a) values (18,18);
+insert into t (id,a) values (18,19);
+insert into t (id,a) values (18,20);
+insert into t (id,a) values (18,21);
+insert into t (id,a) values (18,22);
+insert into t (id,a) values (18,23);
+insert into t (id,a) values (18,24);
+insert into t (id,a) values (18,25);
+insert into t (id,a) values (18,26);
+insert into t (id,a) values (18,27);
+insert into t (id,a) values (18,28);
+insert into t (id,a) values (18,29);
+insert into t (id,a) values (18,30);
+insert into t (id,a) values (18,31);
+insert into t (id,a) values (18,32);
+insert into t (id,a) values (18,33);
+insert into t (id,a) values (18,34);
+insert into t (id,a) values (18,35);
+insert into t (id,a) values (18,36);
+insert into t (id,a) values (18,37);
+insert into t (id,a) values (18,38);
+insert into t (id,a) values (18,39);
+insert into t (id,a) values (18,40);
+insert into t (id,a) values (18,41);
+insert into t (id,a) values (18,42);
+insert into t (id,a) values (18,43);
+insert into t (id,a) values (18,44);
+insert into t (id,a) values (18,45);
+insert into t (id,a) values (18,46);
+insert into t (id,a) values (18,47);
+insert into t (id,a) values (18,48);
+insert into t (id,a) values (18,49);
+insert into t (id,a) values (18,50);
+insert into t (id,a) values (18,51);
+insert into t (id,a) values (18,52);
+insert into t (id,a) values (18,53);
+insert into t (id,a) values (18,54);
+insert into t (id,a) values (18,55);
+insert into t (id,a) values (18,56);
+insert into t (id,a) values (18,57);
+insert into t (id,a) values (18,58);
+insert into t (id,a) values (18,59);
+insert into t (id,a) values (18,60);
+insert into t (id,a) values (18,61);
+insert into t (id,a) values (18,62);
+insert into t (id,a) values (18,63);
+insert into t (id,a) values (18,64);
+insert into t (id,a) values (18,65);
+insert into t (id,a) values (18,66);
+insert into t (id,a) values (18,67);
+insert into t (id,a) values (18,68);
+insert into t (id,a) values (18,69);
+insert into t (id,a) values (18,70);
+insert into t (id,a) values (18,71);
+insert into t (id,a) values (18,72);
+insert into t (id,a) values (18,73);
+insert into t (id,a) values (18,74);
+insert into t (id,a) values (18,75);
+insert into t (id,a) values (18,76);
+insert into t (id,a) values (18,77);
+insert into t (id,a) values (18,78);
+insert into t (id,a) values (18,79);
+insert into t (id,a) values (18,80);
+insert into t (id,a) values (18,81);
+insert into t (id,a) values (18,82);
+insert into t (id,a) values (18,83);
+insert into t (id,a) values (18,84);
+insert into t (id,a) values (18,85);
+insert into t (id,a) values (18,86);
+insert into t (id,a) values (18,87);
+insert into t (id,a) values (18,88);
+insert into t (id,a) values (18,89);
+insert into t (id,a) values (18,90);
+insert into t (id,a) values (18,91);
+insert into t (id,a) values (18,92);
+insert into t (id,a) values (18,93);
+insert into t (id,a) values (18,94);
+insert into t (id,a) values (18,95);
+insert into t (id,a) values (18,96);
+insert into t (id,a) values (18,97);
+insert into t (id,a) values (18,98);
+insert into t (id,a) values (18,99);
+insert into t (id,a) values (19,0);
+insert into t (id,a) values (19,1);
+insert into t (id,a) values (19,2);
+insert into t (id,a) values (19,3);
+insert into t (id,a) values (19,4);
+insert into t (id,a) values (19,5);
+insert into t (id,a) values (19,6);
+insert into t (id,a) values (19,7);
+insert into t (id,a) values (19,8);
+insert into t (id,a) values (19,9);
+insert into t (id,a) values (19,10);
+insert into t (id,a) values (19,11);
+insert into t (id,a) values (19,12);
+insert into t (id,a) values (19,13);
+insert into t (id,a) values (19,14);
+insert into t (id,a) values (19,15);
+insert into t (id,a) values (19,16);
+insert into t (id,a) values (19,17);
+insert into t (id,a) values (19,18);
+insert into t (id,a) values (19,19);
+insert into t (id,a) values (19,20);
+insert into t (id,a) values (19,21);
+insert into t (id,a) values (19,22);
+insert into t (id,a) values (19,23);
+insert into t (id,a) values (19,24);
+insert into t (id,a) values (19,25);
+insert into t (id,a) values (19,26);
+insert into t (id,a) values (19,27);
+insert into t (id,a) values (19,28);
+insert into t (id,a) values (19,29);
+insert into t (id,a) values (19,30);
+insert into t (id,a) values (19,31);
+insert into t (id,a) values (19,32);
+insert into t (id,a) values (19,33);
+insert into t (id,a) values (19,34);
+insert into t (id,a) values (19,35);
+insert into t (id,a) values (19,36);
+insert into t (id,a) values (19,37);
+insert into t (id,a) values (19,38);
+insert into t (id,a) values (19,39);
+insert into t (id,a) values (19,40);
+insert into t (id,a) values (19,41);
+insert into t (id,a) values (19,42);
+insert into t (id,a) values (19,43);
+insert into t (id,a) values (19,44);
+insert into t (id,a) values (19,45);
+insert into t (id,a) values (19,46);
+insert into t (id,a) values (19,47);
+insert into t (id,a) values (19,48);
+insert into t (id,a) values (19,49);
+insert into t (id,a) values (19,50);
+insert into t (id,a) values (19,51);
+insert into t (id,a) values (19,52);
+insert into t (id,a) values (19,53);
+insert into t (id,a) values (19,54);
+insert into t (id,a) values (19,55);
+insert into t (id,a) values (19,56);
+insert into t (id,a) values (19,57);
+insert into t (id,a) values (19,58);
+insert into t (id,a) values (19,59);
+insert into t (id,a) values (19,60);
+insert into t (id,a) values (19,61);
+insert into t (id,a) values (19,62);
+insert into t (id,a) values (19,63);
+insert into t (id,a) values (19,64);
+insert into t (id,a) values (19,65);
+insert into t (id,a) values (19,66);
+insert into t (id,a) values (19,67);
+insert into t (id,a) values (19,68);
+insert into t (id,a) values (19,69);
+insert into t (id,a) values (19,70);
+insert into t (id,a) values (19,71);
+insert into t (id,a) values (19,72);
+insert into t (id,a) values (19,73);
+insert into t (id,a) values (19,74);
+insert into t (id,a) values (19,75);
+insert into t (id,a) values (19,76);
+insert into t (id,a) values (19,77);
+insert into t (id,a) values (19,78);
+insert into t (id,a) values (19,79);
+insert into t (id,a) values (19,80);
+insert into t (id,a) values (19,81);
+insert into t (id,a) values (19,82);
+insert into t (id,a) values (19,83);
+insert into t (id,a) values (19,84);
+insert into t (id,a) values (19,85);
+insert into t (id,a) values (19,86);
+insert into t (id,a) values (19,87);
+insert into t (id,a) values (19,88);
+insert into t (id,a) values (19,89);
+insert into t (id,a) values (19,90);
+insert into t (id,a) values (19,91);
+insert into t (id,a) values (19,92);
+insert into t (id,a) values (19,93);
+insert into t (id,a) values (19,94);
+insert into t (id,a) values (19,95);
+insert into t (id,a) values (19,96);
+insert into t (id,a) values (19,97);
+insert into t (id,a) values (19,98);
+insert into t (id,a) values (19,99);
+insert into t (id,a) values (20,0);
+insert into t (id,a) values (20,1);
+insert into t (id,a) values (20,2);
+insert into t (id,a) values (20,3);
+insert into t (id,a) values (20,4);
+insert into t (id,a) values (20,5);
+insert into t (id,a) values (20,6);
+insert into t (id,a) values (20,7);
+insert into t (id,a) values (20,8);
+insert into t (id,a) values (20,9);
+insert into t (id,a) values (20,10);
+insert into t (id,a) values (20,11);
+insert into t (id,a) values (20,12);
+insert into t (id,a) values (20,13);
+insert into t (id,a) values (20,14);
+insert into t (id,a) values (20,15);
+insert into t (id,a) values (20,16);
+insert into t (id,a) values (20,17);
+insert into t (id,a) values (20,18);
+insert into t (id,a) values (20,19);
+insert into t (id,a) values (20,20);
+insert into t (id,a) values (20,21);
+insert into t (id,a) values (20,22);
+insert into t (id,a) values (20,23);
+insert into t (id,a) values (20,24);
+insert into t (id,a) values (20,25);
+insert into t (id,a) values (20,26);
+insert into t (id,a) values (20,27);
+insert into t (id,a) values (20,28);
+insert into t (id,a) values (20,29);
+insert into t (id,a) values (20,30);
+insert into t (id,a) values (20,31);
+insert into t (id,a) values (20,32);
+insert into t (id,a) values (20,33);
+insert into t (id,a) values (20,34);
+insert into t (id,a) values (20,35);
+insert into t (id,a) values (20,36);
+insert into t (id,a) values (20,37);
+insert into t (id,a) values (20,38);
+insert into t (id,a) values (20,39);
+insert into t (id,a) values (20,40);
+insert into t (id,a) values (20,41);
+insert into t (id,a) values (20,42);
+insert into t (id,a) values (20,43);
+insert into t (id,a) values (20,44);
+insert into t (id,a) values (20,45);
+insert into t (id,a) values (20,46);
+insert into t (id,a) values (20,47);
+insert into t (id,a) values (20,48);
+insert into t (id,a) values (20,49);
+insert into t (id,a) values (20,50);
+insert into t (id,a) values (20,51);
+insert into t (id,a) values (20,52);
+insert into t (id,a) values (20,53);
+insert into t (id,a) values (20,54);
+insert into t (id,a) values (20,55);
+insert into t (id,a) values (20,56);
+insert into t (id,a) values (20,57);
+insert into t (id,a) values (20,58);
+insert into t (id,a) values (20,59);
+insert into t (id,a) values (20,60);
+insert into t (id,a) values (20,61);
+insert into t (id,a) values (20,62);
+insert into t (id,a) values (20,63);
+insert into t (id,a) values (20,64);
+insert into t (id,a) values (20,65);
+insert into t (id,a) values (20,66);
+insert into t (id,a) values (20,67);
+insert into t (id,a) values (20,68);
+insert into t (id,a) values (20,69);
+insert into t (id,a) values (20,70);
+insert into t (id,a) values (20,71);
+insert into t (id,a) values (20,72);
+insert into t (id,a) values (20,73);
+insert into t (id,a) values (20,74);
+insert into t (id,a) values (20,75);
+insert into t (id,a) values (20,76);
+insert into t (id,a) values (20,77);
+insert into t (id,a) values (20,78);
+insert into t (id,a) values (20,79);
+insert into t (id,a) values (20,80);
+insert into t (id,a) values (20,81);
+insert into t (id,a) values (20,82);
+insert into t (id,a) values (20,83);
+insert into t (id,a) values (20,84);
+insert into t (id,a) values (20,85);
+insert into t (id,a) values (20,86);
+insert into t (id,a) values (20,87);
+insert into t (id,a) values (20,88);
+insert into t (id,a) values (20,89);
+insert into t (id,a) values (20,90);
+insert into t (id,a) values (20,91);
+insert into t (id,a) values (20,92);
+insert into t (id,a) values (20,93);
+insert into t (id,a) values (20,94);
+insert into t (id,a) values (20,95);
+insert into t (id,a) values (20,96);
+insert into t (id,a) values (20,97);
+insert into t (id,a) values (20,98);
+insert into t (id,a) values (20,99);
+insert into t (id,a) values (21,0);
+insert into t (id,a) values (21,1);
+insert into t (id,a) values (21,2);
+insert into t (id,a) values (21,3);
+insert into t (id,a) values (21,4);
+insert into t (id,a) values (21,5);
+insert into t (id,a) values (21,6);
+insert into t (id,a) values (21,7);
+insert into t (id,a) values (21,8);
+insert into t (id,a) values (21,9);
+insert into t (id,a) values (21,10);
+insert into t (id,a) values (21,11);
+insert into t (id,a) values (21,12);
+insert into t (id,a) values (21,13);
+insert into t (id,a) values (21,14);
+insert into t (id,a) values (21,15);
+insert into t (id,a) values (21,16);
+insert into t (id,a) values (21,17);
+insert into t (id,a) values (21,18);
+insert into t (id,a) values (21,19);
+insert into t (id,a) values (21,20);
+insert into t (id,a) values (21,21);
+insert into t (id,a) values (21,22);
+insert into t (id,a) values (21,23);
+insert into t (id,a) values (21,24);
+insert into t (id,a) values (21,25);
+insert into t (id,a) values (21,26);
+insert into t (id,a) values (21,27);
+insert into t (id,a) values (21,28);
+insert into t (id,a) values (21,29);
+insert into t (id,a) values (21,30);
+insert into t (id,a) values (21,31);
+insert into t (id,a) values (21,32);
+insert into t (id,a) values (21,33);
+insert into t (id,a) values (21,34);
+insert into t (id,a) values (21,35);
+insert into t (id,a) values (21,36);
+insert into t (id,a) values (21,37);
+insert into t (id,a) values (21,38);
+insert into t (id,a) values (21,39);
+insert into t (id,a) values (21,40);
+insert into t (id,a) values (21,41);
+insert into t (id,a) values (21,42);
+insert into t (id,a) values (21,43);
+insert into t (id,a) values (21,44);
+insert into t (id,a) values (21,45);
+insert into t (id,a) values (21,46);
+insert into t (id,a) values (21,47);
+insert into t (id,a) values (21,48);
+insert into t (id,a) values (21,49);
+insert into t (id,a) values (21,50);
+insert into t (id,a) values (21,51);
+insert into t (id,a) values (21,52);
+insert into t (id,a) values (21,53);
+insert into t (id,a) values (21,54);
+insert into t (id,a) values (21,55);
+insert into t (id,a) values (21,56);
+insert into t (id,a) values (21,57);
+insert into t (id,a) values (21,58);
+insert into t (id,a) values (21,59);
+insert into t (id,a) values (21,60);
+insert into t (id,a) values (21,61);
+insert into t (id,a) values (21,62);
+insert into t (id,a) values (21,63);
+insert into t (id,a) values (21,64);
+insert into t (id,a) values (21,65);
+insert into t (id,a) values (21,66);
+insert into t (id,a) values (21,67);
+insert into t (id,a) values (21,68);
+insert into t (id,a) values (21,69);
+insert into t (id,a) values (21,70);
+insert into t (id,a) values (21,71);
+insert into t (id,a) values (21,72);
+insert into t (id,a) values (21,73);
+insert into t (id,a) values (21,74);
+insert into t (id,a) values (21,75);
+insert into t (id,a) values (21,76);
+insert into t (id,a) values (21,77);
+insert into t (id,a) values (21,78);
+insert into t (id,a) values (21,79);
+insert into t (id,a) values (21,80);
+insert into t (id,a) values (21,81);
+insert into t (id,a) values (21,82);
+insert into t (id,a) values (21,83);
+insert into t (id,a) values (21,84);
+insert into t (id,a) values (21,85);
+insert into t (id,a) values (21,86);
+insert into t (id,a) values (21,87);
+insert into t (id,a) values (21,88);
+insert into t (id,a) values (21,89);
+insert into t (id,a) values (21,90);
+insert into t (id,a) values (21,91);
+insert into t (id,a) values (21,92);
+insert into t (id,a) values (21,93);
+insert into t (id,a) values (21,94);
+insert into t (id,a) values (21,95);
+insert into t (id,a) values (21,96);
+insert into t (id,a) values (21,97);
+insert into t (id,a) values (21,98);
+insert into t (id,a) values (21,99);
+insert into t (id,a) values (22,0);
+insert into t (id,a) values (22,1);
+insert into t (id,a) values (22,2);
+insert into t (id,a) values (22,3);
+insert into t (id,a) values (22,4);
+insert into t (id,a) values (22,5);
+insert into t (id,a) values (22,6);
+insert into t (id,a) values (22,7);
+insert into t (id,a) values (22,8);
+insert into t (id,a) values (22,9);
+insert into t (id,a) values (22,10);
+insert into t (id,a) values (22,11);
+insert into t (id,a) values (22,12);
+insert into t (id,a) values (22,13);
+insert into t (id,a) values (22,14);
+insert into t (id,a) values (22,15);
+insert into t (id,a) values (22,16);
+insert into t (id,a) values (22,17);
+insert into t (id,a) values (22,18);
+insert into t (id,a) values (22,19);
+insert into t (id,a) values (22,20);
+insert into t (id,a) values (22,21);
+insert into t (id,a) values (22,22);
+insert into t (id,a) values (22,23);
+insert into t (id,a) values (22,24);
+insert into t (id,a) values (22,25);
+insert into t (id,a) values (22,26);
+insert into t (id,a) values (22,27);
+insert into t (id,a) values (22,28);
+insert into t (id,a) values (22,29);
+insert into t (id,a) values (22,30);
+insert into t (id,a) values (22,31);
+insert into t (id,a) values (22,32);
+insert into t (id,a) values (22,33);
+insert into t (id,a) values (22,34);
+insert into t (id,a) values (22,35);
+insert into t (id,a) values (22,36);
+insert into t (id,a) values (22,37);
+insert into t (id,a) values (22,38);
+insert into t (id,a) values (22,39);
+insert into t (id,a) values (22,40);
+insert into t (id,a) values (22,41);
+insert into t (id,a) values (22,42);
+insert into t (id,a) values (22,43);
+insert into t (id,a) values (22,44);
+insert into t (id,a) values (22,45);
+insert into t (id,a) values (22,46);
+insert into t (id,a) values (22,47);
+insert into t (id,a) values (22,48);
+insert into t (id,a) values (22,49);
+insert into t (id,a) values (22,50);
+insert into t (id,a) values (22,51);
+insert into t (id,a) values (22,52);
+insert into t (id,a) values (22,53);
+insert into t (id,a) values (22,54);
+insert into t (id,a) values (22,55);
+insert into t (id,a) values (22,56);
+insert into t (id,a) values (22,57);
+insert into t (id,a) values (22,58);
+insert into t (id,a) values (22,59);
+insert into t (id,a) values (22,60);
+insert into t (id,a) values (22,61);
+insert into t (id,a) values (22,62);
+insert into t (id,a) values (22,63);
+insert into t (id,a) values (22,64);
+insert into t (id,a) values (22,65);
+insert into t (id,a) values (22,66);
+insert into t (id,a) values (22,67);
+insert into t (id,a) values (22,68);
+insert into t (id,a) values (22,69);
+insert into t (id,a) values (22,70);
+insert into t (id,a) values (22,71);
+insert into t (id,a) values (22,72);
+insert into t (id,a) values (22,73);
+insert into t (id,a) values (22,74);
+insert into t (id,a) values (22,75);
+insert into t (id,a) values (22,76);
+insert into t (id,a) values (22,77);
+insert into t (id,a) values (22,78);
+insert into t (id,a) values (22,79);
+insert into t (id,a) values (22,80);
+insert into t (id,a) values (22,81);
+insert into t (id,a) values (22,82);
+insert into t (id,a) values (22,83);
+insert into t (id,a) values (22,84);
+insert into t (id,a) values (22,85);
+insert into t (id,a) values (22,86);
+insert into t (id,a) values (22,87);
+insert into t (id,a) values (22,88);
+insert into t (id,a) values (22,89);
+insert into t (id,a) values (22,90);
+insert into t (id,a) values (22,91);
+insert into t (id,a) values (22,92);
+insert into t (id,a) values (22,93);
+insert into t (id,a) values (22,94);
+insert into t (id,a) values (22,95);
+insert into t (id,a) values (22,96);
+insert into t (id,a) values (22,97);
+insert into t (id,a) values (22,98);
+insert into t (id,a) values (22,99);
+insert into t (id,a) values (23,0);
+insert into t (id,a) values (23,1);
+insert into t (id,a) values (23,2);
+insert into t (id,a) values (23,3);
+insert into t (id,a) values (23,4);
+insert into t (id,a) values (23,5);
+insert into t (id,a) values (23,6);
+insert into t (id,a) values (23,7);
+insert into t (id,a) values (23,8);
+insert into t (id,a) values (23,9);
+insert into t (id,a) values (23,10);
+insert into t (id,a) values (23,11);
+insert into t (id,a) values (23,12);
+insert into t (id,a) values (23,13);
+insert into t (id,a) values (23,14);
+insert into t (id,a) values (23,15);
+insert into t (id,a) values (23,16);
+insert into t (id,a) values (23,17);
+insert into t (id,a) values (23,18);
+insert into t (id,a) values (23,19);
+insert into t (id,a) values (23,20);
+insert into t (id,a) values (23,21);
+insert into t (id,a) values (23,22);
+insert into t (id,a) values (23,23);
+insert into t (id,a) values (23,24);
+insert into t (id,a) values (23,25);
+insert into t (id,a) values (23,26);
+insert into t (id,a) values (23,27);
+insert into t (id,a) values (23,28);
+insert into t (id,a) values (23,29);
+insert into t (id,a) values (23,30);
+insert into t (id,a) values (23,31);
+insert into t (id,a) values (23,32);
+insert into t (id,a) values (23,33);
+insert into t (id,a) values (23,34);
+insert into t (id,a) values (23,35);
+insert into t (id,a) values (23,36);
+insert into t (id,a) values (23,37);
+insert into t (id,a) values (23,38);
+insert into t (id,a) values (23,39);
+insert into t (id,a) values (23,40);
+insert into t (id,a) values (23,41);
+insert into t (id,a) values (23,42);
+insert into t (id,a) values (23,43);
+insert into t (id,a) values (23,44);
+insert into t (id,a) values (23,45);
+insert into t (id,a) values (23,46);
+insert into t (id,a) values (23,47);
+insert into t (id,a) values (23,48);
+insert into t (id,a) values (23,49);
+insert into t (id,a) values (23,50);
+insert into t (id,a) values (23,51);
+insert into t (id,a) values (23,52);
+insert into t (id,a) values (23,53);
+insert into t (id,a) values (23,54);
+insert into t (id,a) values (23,55);
+insert into t (id,a) values (23,56);
+insert into t (id,a) values (23,57);
+insert into t (id,a) values (23,58);
+insert into t (id,a) values (23,59);
+insert into t (id,a) values (23,60);
+insert into t (id,a) values (23,61);
+insert into t (id,a) values (23,62);
+insert into t (id,a) values (23,63);
+insert into t (id,a) values (23,64);
+insert into t (id,a) values (23,65);
+insert into t (id,a) values (23,66);
+insert into t (id,a) values (23,67);
+insert into t (id,a) values (23,68);
+insert into t (id,a) values (23,69);
+insert into t (id,a) values (23,70);
+insert into t (id,a) values (23,71);
+insert into t (id,a) values (23,72);
+insert into t (id,a) values (23,73);
+insert into t (id,a) values (23,74);
+insert into t (id,a) values (23,75);
+insert into t (id,a) values (23,76);
+insert into t (id,a) values (23,77);
+insert into t (id,a) values (23,78);
+insert into t (id,a) values (23,79);
+insert into t (id,a) values (23,80);
+insert into t (id,a) values (23,81);
+insert into t (id,a) values (23,82);
+insert into t (id,a) values (23,83);
+insert into t (id,a) values (23,84);
+insert into t (id,a) values (23,85);
+insert into t (id,a) values (23,86);
+insert into t (id,a) values (23,87);
+insert into t (id,a) values (23,88);
+insert into t (id,a) values (23,89);
+insert into t (id,a) values (23,90);
+insert into t (id,a) values (23,91);
+insert into t (id,a) values (23,92);
+insert into t (id,a) values (23,93);
+insert into t (id,a) values (23,94);
+insert into t (id,a) values (23,95);
+insert into t (id,a) values (23,96);
+insert into t (id,a) values (23,97);
+insert into t (id,a) values (23,98);
+insert into t (id,a) values (23,99);
+insert into t (id,a) values (24,0);
+insert into t (id,a) values (24,1);
+insert into t (id,a) values (24,2);
+insert into t (id,a) values (24,3);
+insert into t (id,a) values (24,4);
+insert into t (id,a) values (24,5);
+insert into t (id,a) values (24,6);
+insert into t (id,a) values (24,7);
+insert into t (id,a) values (24,8);
+insert into t (id,a) values (24,9);
+insert into t (id,a) values (24,10);
+insert into t (id,a) values (24,11);
+insert into t (id,a) values (24,12);
+insert into t (id,a) values (24,13);
+insert into t (id,a) values (24,14);
+insert into t (id,a) values (24,15);
+insert into t (id,a) values (24,16);
+insert into t (id,a) values (24,17);
+insert into t (id,a) values (24,18);
+insert into t (id,a) values (24,19);
+insert into t (id,a) values (24,20);
+insert into t (id,a) values (24,21);
+insert into t (id,a) values (24,22);
+insert into t (id,a) values (24,23);
+insert into t (id,a) values (24,24);
+insert into t (id,a) values (24,25);
+insert into t (id,a) values (24,26);
+insert into t (id,a) values (24,27);
+insert into t (id,a) values (24,28);
+insert into t (id,a) values (24,29);
+insert into t (id,a) values (24,30);
+insert into t (id,a) values (24,31);
+insert into t (id,a) values (24,32);
+insert into t (id,a) values (24,33);
+insert into t (id,a) values (24,34);
+insert into t (id,a) values (24,35);
+insert into t (id,a) values (24,36);
+insert into t (id,a) values (24,37);
+insert into t (id,a) values (24,38);
+insert into t (id,a) values (24,39);
+insert into t (id,a) values (24,40);
+insert into t (id,a) values (24,41);
+insert into t (id,a) values (24,42);
+insert into t (id,a) values (24,43);
+insert into t (id,a) values (24,44);
+insert into t (id,a) values (24,45);
+insert into t (id,a) values (24,46);
+insert into t (id,a) values (24,47);
+insert into t (id,a) values (24,48);
+insert into t (id,a) values (24,49);
+insert into t (id,a) values (24,50);
+insert into t (id,a) values (24,51);
+insert into t (id,a) values (24,52);
+insert into t (id,a) values (24,53);
+insert into t (id,a) values (24,54);
+insert into t (id,a) values (24,55);
+insert into t (id,a) values (24,56);
+insert into t (id,a) values (24,57);
+insert into t (id,a) values (24,58);
+insert into t (id,a) values (24,59);
+insert into t (id,a) values (24,60);
+insert into t (id,a) values (24,61);
+insert into t (id,a) values (24,62);
+insert into t (id,a) values (24,63);
+insert into t (id,a) values (24,64);
+insert into t (id,a) values (24,65);
+insert into t (id,a) values (24,66);
+insert into t (id,a) values (24,67);
+insert into t (id,a) values (24,68);
+insert into t (id,a) values (24,69);
+insert into t (id,a) values (24,70);
+insert into t (id,a) values (24,71);
+insert into t (id,a) values (24,72);
+insert into t (id,a) values (24,73);
+insert into t (id,a) values (24,74);
+insert into t (id,a) values (24,75);
+insert into t (id,a) values (24,76);
+insert into t (id,a) values (24,77);
+insert into t (id,a) values (24,78);
+insert into t (id,a) values (24,79);
+insert into t (id,a) values (24,80);
+insert into t (id,a) values (24,81);
+insert into t (id,a) values (24,82);
+insert into t (id,a) values (24,83);
+insert into t (id,a) values (24,84);
+insert into t (id,a) values (24,85);
+insert into t (id,a) values (24,86);
+insert into t (id,a) values (24,87);
+insert into t (id,a) values (24,88);
+insert into t (id,a) values (24,89);
+insert into t (id,a) values (24,90);
+insert into t (id,a) values (24,91);
+insert into t (id,a) values (24,92);
+insert into t (id,a) values (24,93);
+insert into t (id,a) values (24,94);
+insert into t (id,a) values (24,95);
+insert into t (id,a) values (24,96);
+insert into t (id,a) values (24,97);
+insert into t (id,a) values (24,98);
+insert into t (id,a) values (24,99);
+insert into t (id,a) values (25,0);
+insert into t (id,a) values (25,1);
+insert into t (id,a) values (25,2);
+insert into t (id,a) values (25,3);
+insert into t (id,a) values (25,4);
+insert into t (id,a) values (25,5);
+insert into t (id,a) values (25,6);
+insert into t (id,a) values (25,7);
+insert into t (id,a) values (25,8);
+insert into t (id,a) values (25,9);
+insert into t (id,a) values (25,10);
+insert into t (id,a) values (25,11);
+insert into t (id,a) values (25,12);
+insert into t (id,a) values (25,13);
+insert into t (id,a) values (25,14);
+insert into t (id,a) values (25,15);
+insert into t (id,a) values (25,16);
+insert into t (id,a) values (25,17);
+insert into t (id,a) values (25,18);
+insert into t (id,a) values (25,19);
+insert into t (id,a) values (25,20);
+insert into t (id,a) values (25,21);
+insert into t (id,a) values (25,22);
+insert into t (id,a) values (25,23);
+insert into t (id,a) values (25,24);
+insert into t (id,a) values (25,25);
+insert into t (id,a) values (25,26);
+insert into t (id,a) values (25,27);
+insert into t (id,a) values (25,28);
+insert into t (id,a) values (25,29);
+insert into t (id,a) values (25,30);
+insert into t (id,a) values (25,31);
+insert into t (id,a) values (25,32);
+insert into t (id,a) values (25,33);
+insert into t (id,a) values (25,34);
+insert into t (id,a) values (25,35);
+insert into t (id,a) values (25,36);
+insert into t (id,a) values (25,37);
+insert into t (id,a) values (25,38);
+insert into t (id,a) values (25,39);
+insert into t (id,a) values (25,40);
+insert into t (id,a) values (25,41);
+insert into t (id,a) values (25,42);
+insert into t (id,a) values (25,43);
+insert into t (id,a) values (25,44);
+insert into t (id,a) values (25,45);
+insert into t (id,a) values (25,46);
+insert into t (id,a) values (25,47);
+insert into t (id,a) values (25,48);
+insert into t (id,a) values (25,49);
+insert into t (id,a) values (25,50);
+insert into t (id,a) values (25,51);
+insert into t (id,a) values (25,52);
+insert into t (id,a) values (25,53);
+insert into t (id,a) values (25,54);
+insert into t (id,a) values (25,55);
+insert into t (id,a) values (25,56);
+insert into t (id,a) values (25,57);
+insert into t (id,a) values (25,58);
+insert into t (id,a) values (25,59);
+insert into t (id,a) values (25,60);
+insert into t (id,a) values (25,61);
+insert into t (id,a) values (25,62);
+insert into t (id,a) values (25,63);
+insert into t (id,a) values (25,64);
+insert into t (id,a) values (25,65);
+insert into t (id,a) values (25,66);
+insert into t (id,a) values (25,67);
+insert into t (id,a) values (25,68);
+insert into t (id,a) values (25,69);
+insert into t (id,a) values (25,70);
+insert into t (id,a) values (25,71);
+insert into t (id,a) values (25,72);
+insert into t (id,a) values (25,73);
+insert into t (id,a) values (25,74);
+insert into t (id,a) values (25,75);
+insert into t (id,a) values (25,76);
+insert into t (id,a) values (25,77);
+insert into t (id,a) values (25,78);
+insert into t (id,a) values (25,79);
+insert into t (id,a) values (25,80);
+insert into t (id,a) values (25,81);
+insert into t (id,a) values (25,82);
+insert into t (id,a) values (25,83);
+insert into t (id,a) values (25,84);
+insert into t (id,a) values (25,85);
+insert into t (id,a) values (25,86);
+insert into t (id,a) values (25,87);
+insert into t (id,a) values (25,88);
+insert into t (id,a) values (25,89);
+insert into t (id,a) values (25,90);
+insert into t (id,a) values (25,91);
+insert into t (id,a) values (25,92);
+insert into t (id,a) values (25,93);
+insert into t (id,a) values (25,94);
+insert into t (id,a) values (25,95);
+insert into t (id,a) values (25,96);
+insert into t (id,a) values (25,97);
+insert into t (id,a) values (25,98);
+insert into t (id,a) values (25,99);
+insert into t (id,a) values (26,0);
+insert into t (id,a) values (26,1);
+insert into t (id,a) values (26,2);
+insert into t (id,a) values (26,3);
+insert into t (id,a) values (26,4);
+insert into t (id,a) values (26,5);
+insert into t (id,a) values (26,6);
+insert into t (id,a) values (26,7);
+insert into t (id,a) values (26,8);
+insert into t (id,a) values (26,9);
+insert into t (id,a) values (26,10);
+insert into t (id,a) values (26,11);
+insert into t (id,a) values (26,12);
+insert into t (id,a) values (26,13);
+insert into t (id,a) values (26,14);
+insert into t (id,a) values (26,15);
+insert into t (id,a) values (26,16);
+insert into t (id,a) values (26,17);
+insert into t (id,a) values (26,18);
+insert into t (id,a) values (26,19);
+insert into t (id,a) values (26,20);
+insert into t (id,a) values (26,21);
+insert into t (id,a) values (26,22);
+insert into t (id,a) values (26,23);
+insert into t (id,a) values (26,24);
+insert into t (id,a) values (26,25);
+insert into t (id,a) values (26,26);
+insert into t (id,a) values (26,27);
+insert into t (id,a) values (26,28);
+insert into t (id,a) values (26,29);
+insert into t (id,a) values (26,30);
+insert into t (id,a) values (26,31);
+insert into t (id,a) values (26,32);
+insert into t (id,a) values (26,33);
+insert into t (id,a) values (26,34);
+insert into t (id,a) values (26,35);
+insert into t (id,a) values (26,36);
+insert into t (id,a) values (26,37);
+insert into t (id,a) values (26,38);
+insert into t (id,a) values (26,39);
+insert into t (id,a) values (26,40);
+insert into t (id,a) values (26,41);
+insert into t (id,a) values (26,42);
+insert into t (id,a) values (26,43);
+insert into t (id,a) values (26,44);
+insert into t (id,a) values (26,45);
+insert into t (id,a) values (26,46);
+insert into t (id,a) values (26,47);
+insert into t (id,a) values (26,48);
+insert into t (id,a) values (26,49);
+insert into t (id,a) values (26,50);
+insert into t (id,a) values (26,51);
+insert into t (id,a) values (26,52);
+insert into t (id,a) values (26,53);
+insert into t (id,a) values (26,54);
+insert into t (id,a) values (26,55);
+insert into t (id,a) values (26,56);
+insert into t (id,a) values (26,57);
+insert into t (id,a) values (26,58);
+insert into t (id,a) values (26,59);
+insert into t (id,a) values (26,60);
+insert into t (id,a) values (26,61);
+insert into t (id,a) values (26,62);
+insert into t (id,a) values (26,63);
+insert into t (id,a) values (26,64);
+insert into t (id,a) values (26,65);
+insert into t (id,a) values (26,66);
+insert into t (id,a) values (26,67);
+insert into t (id,a) values (26,68);
+insert into t (id,a) values (26,69);
+insert into t (id,a) values (26,70);
+insert into t (id,a) values (26,71);
+insert into t (id,a) values (26,72);
+insert into t (id,a) values (26,73);
+insert into t (id,a) values (26,74);
+insert into t (id,a) values (26,75);
+insert into t (id,a) values (26,76);
+insert into t (id,a) values (26,77);
+insert into t (id,a) values (26,78);
+insert into t (id,a) values (26,79);
+insert into t (id,a) values (26,80);
+insert into t (id,a) values (26,81);
+insert into t (id,a) values (26,82);
+insert into t (id,a) values (26,83);
+insert into t (id,a) values (26,84);
+insert into t (id,a) values (26,85);
+insert into t (id,a) values (26,86);
+insert into t (id,a) values (26,87);
+insert into t (id,a) values (26,88);
+insert into t (id,a) values (26,89);
+insert into t (id,a) values (26,90);
+insert into t (id,a) values (26,91);
+insert into t (id,a) values (26,92);
+insert into t (id,a) values (26,93);
+insert into t (id,a) values (26,94);
+insert into t (id,a) values (26,95);
+insert into t (id,a) values (26,96);
+insert into t (id,a) values (26,97);
+insert into t (id,a) values (26,98);
+insert into t (id,a) values (26,99);
+insert into t (id,a) values (27,0);
+insert into t (id,a) values (27,1);
+insert into t (id,a) values (27,2);
+insert into t (id,a) values (27,3);
+insert into t (id,a) values (27,4);
+insert into t (id,a) values (27,5);
+insert into t (id,a) values (27,6);
+insert into t (id,a) values (27,7);
+insert into t (id,a) values (27,8);
+insert into t (id,a) values (27,9);
+insert into t (id,a) values (27,10);
+insert into t (id,a) values (27,11);
+insert into t (id,a) values (27,12);
+insert into t (id,a) values (27,13);
+insert into t (id,a) values (27,14);
+insert into t (id,a) values (27,15);
+insert into t (id,a) values (27,16);
+insert into t (id,a) values (27,17);
+insert into t (id,a) values (27,18);
+insert into t (id,a) values (27,19);
+insert into t (id,a) values (27,20);
+insert into t (id,a) values (27,21);
+insert into t (id,a) values (27,22);
+insert into t (id,a) values (27,23);
+insert into t (id,a) values (27,24);
+insert into t (id,a) values (27,25);
+insert into t (id,a) values (27,26);
+insert into t (id,a) values (27,27);
+insert into t (id,a) values (27,28);
+insert into t (id,a) values (27,29);
+insert into t (id,a) values (27,30);
+insert into t (id,a) values (27,31);
+insert into t (id,a) values (27,32);
+insert into t (id,a) values (27,33);
+insert into t (id,a) values (27,34);
+insert into t (id,a) values (27,35);
+insert into t (id,a) values (27,36);
+insert into t (id,a) values (27,37);
+insert into t (id,a) values (27,38);
+insert into t (id,a) values (27,39);
+insert into t (id,a) values (27,40);
+insert into t (id,a) values (27,41);
+insert into t (id,a) values (27,42);
+insert into t (id,a) values (27,43);
+insert into t (id,a) values (27,44);
+insert into t (id,a) values (27,45);
+insert into t (id,a) values (27,46);
+insert into t (id,a) values (27,47);
+insert into t (id,a) values (27,48);
+insert into t (id,a) values (27,49);
+insert into t (id,a) values (27,50);
+insert into t (id,a) values (27,51);
+insert into t (id,a) values (27,52);
+insert into t (id,a) values (27,53);
+insert into t (id,a) values (27,54);
+insert into t (id,a) values (27,55);
+insert into t (id,a) values (27,56);
+insert into t (id,a) values (27,57);
+insert into t (id,a) values (27,58);
+insert into t (id,a) values (27,59);
+insert into t (id,a) values (27,60);
+insert into t (id,a) values (27,61);
+insert into t (id,a) values (27,62);
+insert into t (id,a) values (27,63);
+insert into t (id,a) values (27,64);
+insert into t (id,a) values (27,65);
+insert into t (id,a) values (27,66);
+insert into t (id,a) values (27,67);
+insert into t (id,a) values (27,68);
+insert into t (id,a) values (27,69);
+insert into t (id,a) values (27,70);
+insert into t (id,a) values (27,71);
+insert into t (id,a) values (27,72);
+insert into t (id,a) values (27,73);
+insert into t (id,a) values (27,74);
+insert into t (id,a) values (27,75);
+insert into t (id,a) values (27,76);
+insert into t (id,a) values (27,77);
+insert into t (id,a) values (27,78);
+insert into t (id,a) values (27,79);
+insert into t (id,a) values (27,80);
+insert into t (id,a) values (27,81);
+insert into t (id,a) values (27,82);
+insert into t (id,a) values (27,83);
+insert into t (id,a) values (27,84);
+insert into t (id,a) values (27,85);
+insert into t (id,a) values (27,86);
+insert into t (id,a) values (27,87);
+insert into t (id,a) values (27,88);
+insert into t (id,a) values (27,89);
+insert into t (id,a) values (27,90);
+insert into t (id,a) values (27,91);
+insert into t (id,a) values (27,92);
+insert into t (id,a) values (27,93);
+insert into t (id,a) values (27,94);
+insert into t (id,a) values (27,95);
+insert into t (id,a) values (27,96);
+insert into t (id,a) values (27,97);
+insert into t (id,a) values (27,98);
+insert into t (id,a) values (27,99);
+insert into t (id,a) values (28,0);
+insert into t (id,a) values (28,1);
+insert into t (id,a) values (28,2);
+insert into t (id,a) values (28,3);
+insert into t (id,a) values (28,4);
+insert into t (id,a) values (28,5);
+insert into t (id,a) values (28,6);
+insert into t (id,a) values (28,7);
+insert into t (id,a) values (28,8);
+insert into t (id,a) values (28,9);
+insert into t (id,a) values (28,10);
+insert into t (id,a) values (28,11);
+insert into t (id,a) values (28,12);
+insert into t (id,a) values (28,13);
+insert into t (id,a) values (28,14);
+insert into t (id,a) values (28,15);
+insert into t (id,a) values (28,16);
+insert into t (id,a) values (28,17);
+insert into t (id,a) values (28,18);
+insert into t (id,a) values (28,19);
+insert into t (id,a) values (28,20);
+insert into t (id,a) values (28,21);
+insert into t (id,a) values (28,22);
+insert into t (id,a) values (28,23);
+insert into t (id,a) values (28,24);
+insert into t (id,a) values (28,25);
+insert into t (id,a) values (28,26);
+insert into t (id,a) values (28,27);
+insert into t (id,a) values (28,28);
+insert into t (id,a) values (28,29);
+insert into t (id,a) values (28,30);
+insert into t (id,a) values (28,31);
+insert into t (id,a) values (28,32);
+insert into t (id,a) values (28,33);
+insert into t (id,a) values (28,34);
+insert into t (id,a) values (28,35);
+insert into t (id,a) values (28,36);
+insert into t (id,a) values (28,37);
+insert into t (id,a) values (28,38);
+insert into t (id,a) values (28,39);
+insert into t (id,a) values (28,40);
+insert into t (id,a) values (28,41);
+insert into t (id,a) values (28,42);
+insert into t (id,a) values (28,43);
+insert into t (id,a) values (28,44);
+insert into t (id,a) values (28,45);
+insert into t (id,a) values (28,46);
+insert into t (id,a) values (28,47);
+insert into t (id,a) values (28,48);
+insert into t (id,a) values (28,49);
+insert into t (id,a) values (28,50);
+insert into t (id,a) values (28,51);
+insert into t (id,a) values (28,52);
+insert into t (id,a) values (28,53);
+insert into t (id,a) values (28,54);
+insert into t (id,a) values (28,55);
+insert into t (id,a) values (28,56);
+insert into t (id,a) values (28,57);
+insert into t (id,a) values (28,58);
+insert into t (id,a) values (28,59);
+insert into t (id,a) values (28,60);
+insert into t (id,a) values (28,61);
+insert into t (id,a) values (28,62);
+insert into t (id,a) values (28,63);
+insert into t (id,a) values (28,64);
+insert into t (id,a) values (28,65);
+insert into t (id,a) values (28,66);
+insert into t (id,a) values (28,67);
+insert into t (id,a) values (28,68);
+insert into t (id,a) values (28,69);
+insert into t (id,a) values (28,70);
+insert into t (id,a) values (28,71);
+insert into t (id,a) values (28,72);
+insert into t (id,a) values (28,73);
+insert into t (id,a) values (28,74);
+insert into t (id,a) values (28,75);
+insert into t (id,a) values (28,76);
+insert into t (id,a) values (28,77);
+insert into t (id,a) values (28,78);
+insert into t (id,a) values (28,79);
+insert into t (id,a) values (28,80);
+insert into t (id,a) values (28,81);
+insert into t (id,a) values (28,82);
+insert into t (id,a) values (28,83);
+insert into t (id,a) values (28,84);
+insert into t (id,a) values (28,85);
+insert into t (id,a) values (28,86);
+insert into t (id,a) values (28,87);
+insert into t (id,a) values (28,88);
+insert into t (id,a) values (28,89);
+insert into t (id,a) values (28,90);
+insert into t (id,a) values (28,91);
+insert into t (id,a) values (28,92);
+insert into t (id,a) values (28,93);
+insert into t (id,a) values (28,94);
+insert into t (id,a) values (28,95);
+insert into t (id,a) values (28,96);
+insert into t (id,a) values (28,97);
+insert into t (id,a) values (28,98);
+insert into t (id,a) values (28,99);
+insert into t (id,a) values (29,0);
+insert into t (id,a) values (29,1);
+insert into t (id,a) values (29,2);
+insert into t (id,a) values (29,3);
+insert into t (id,a) values (29,4);
+insert into t (id,a) values (29,5);
+insert into t (id,a) values (29,6);
+insert into t (id,a) values (29,7);
+insert into t (id,a) values (29,8);
+insert into t (id,a) values (29,9);
+insert into t (id,a) values (29,10);
+insert into t (id,a) values (29,11);
+insert into t (id,a) values (29,12);
+insert into t (id,a) values (29,13);
+insert into t (id,a) values (29,14);
+insert into t (id,a) values (29,15);
+insert into t (id,a) values (29,16);
+insert into t (id,a) values (29,17);
+insert into t (id,a) values (29,18);
+insert into t (id,a) values (29,19);
+insert into t (id,a) values (29,20);
+insert into t (id,a) values (29,21);
+insert into t (id,a) values (29,22);
+insert into t (id,a) values (29,23);
+insert into t (id,a) values (29,24);
+insert into t (id,a) values (29,25);
+insert into t (id,a) values (29,26);
+insert into t (id,a) values (29,27);
+insert into t (id,a) values (29,28);
+insert into t (id,a) values (29,29);
+insert into t (id,a) values (29,30);
+insert into t (id,a) values (29,31);
+insert into t (id,a) values (29,32);
+insert into t (id,a) values (29,33);
+insert into t (id,a) values (29,34);
+insert into t (id,a) values (29,35);
+insert into t (id,a) values (29,36);
+insert into t (id,a) values (29,37);
+insert into t (id,a) values (29,38);
+insert into t (id,a) values (29,39);
+insert into t (id,a) values (29,40);
+insert into t (id,a) values (29,41);
+insert into t (id,a) values (29,42);
+insert into t (id,a) values (29,43);
+insert into t (id,a) values (29,44);
+insert into t (id,a) values (29,45);
+insert into t (id,a) values (29,46);
+insert into t (id,a) values (29,47);
+insert into t (id,a) values (29,48);
+insert into t (id,a) values (29,49);
+insert into t (id,a) values (29,50);
+insert into t (id,a) values (29,51);
+insert into t (id,a) values (29,52);
+insert into t (id,a) values (29,53);
+insert into t (id,a) values (29,54);
+insert into t (id,a) values (29,55);
+insert into t (id,a) values (29,56);
+insert into t (id,a) values (29,57);
+insert into t (id,a) values (29,58);
+insert into t (id,a) values (29,59);
+insert into t (id,a) values (29,60);
+insert into t (id,a) values (29,61);
+insert into t (id,a) values (29,62);
+insert into t (id,a) values (29,63);
+insert into t (id,a) values (29,64);
+insert into t (id,a) values (29,65);
+insert into t (id,a) values (29,66);
+insert into t (id,a) values (29,67);
+insert into t (id,a) values (29,68);
+insert into t (id,a) values (29,69);
+insert into t (id,a) values (29,70);
+insert into t (id,a) values (29,71);
+insert into t (id,a) values (29,72);
+insert into t (id,a) values (29,73);
+insert into t (id,a) values (29,74);
+insert into t (id,a) values (29,75);
+insert into t (id,a) values (29,76);
+insert into t (id,a) values (29,77);
+insert into t (id,a) values (29,78);
+insert into t (id,a) values (29,79);
+insert into t (id,a) values (29,80);
+insert into t (id,a) values (29,81);
+insert into t (id,a) values (29,82);
+insert into t (id,a) values (29,83);
+insert into t (id,a) values (29,84);
+insert into t (id,a) values (29,85);
+insert into t (id,a) values (29,86);
+insert into t (id,a) values (29,87);
+insert into t (id,a) values (29,88);
+insert into t (id,a) values (29,89);
+insert into t (id,a) values (29,90);
+insert into t (id,a) values (29,91);
+insert into t (id,a) values (29,92);
+insert into t (id,a) values (29,93);
+insert into t (id,a) values (29,94);
+insert into t (id,a) values (29,95);
+insert into t (id,a) values (29,96);
+insert into t (id,a) values (29,97);
+insert into t (id,a) values (29,98);
+insert into t (id,a) values (29,99);
+insert into t (id,a) values (30,0);
+insert into t (id,a) values (30,1);
+insert into t (id,a) values (30,2);
+insert into t (id,a) values (30,3);
+insert into t (id,a) values (30,4);
+insert into t (id,a) values (30,5);
+insert into t (id,a) values (30,6);
+insert into t (id,a) values (30,7);
+insert into t (id,a) values (30,8);
+insert into t (id,a) values (30,9);
+insert into t (id,a) values (30,10);
+insert into t (id,a) values (30,11);
+insert into t (id,a) values (30,12);
+insert into t (id,a) values (30,13);
+insert into t (id,a) values (30,14);
+insert into t (id,a) values (30,15);
+insert into t (id,a) values (30,16);
+insert into t (id,a) values (30,17);
+insert into t (id,a) values (30,18);
+insert into t (id,a) values (30,19);
+insert into t (id,a) values (30,20);
+insert into t (id,a) values (30,21);
+insert into t (id,a) values (30,22);
+insert into t (id,a) values (30,23);
+insert into t (id,a) values (30,24);
+insert into t (id,a) values (30,25);
+insert into t (id,a) values (30,26);
+insert into t (id,a) values (30,27);
+insert into t (id,a) values (30,28);
+insert into t (id,a) values (30,29);
+insert into t (id,a) values (30,30);
+insert into t (id,a) values (30,31);
+insert into t (id,a) values (30,32);
+insert into t (id,a) values (30,33);
+insert into t (id,a) values (30,34);
+insert into t (id,a) values (30,35);
+insert into t (id,a) values (30,36);
+insert into t (id,a) values (30,37);
+insert into t (id,a) values (30,38);
+insert into t (id,a) values (30,39);
+insert into t (id,a) values (30,40);
+insert into t (id,a) values (30,41);
+insert into t (id,a) values (30,42);
+insert into t (id,a) values (30,43);
+insert into t (id,a) values (30,44);
+insert into t (id,a) values (30,45);
+insert into t (id,a) values (30,46);
+insert into t (id,a) values (30,47);
+insert into t (id,a) values (30,48);
+insert into t (id,a) values (30,49);
+insert into t (id,a) values (30,50);
+insert into t (id,a) values (30,51);
+insert into t (id,a) values (30,52);
+insert into t (id,a) values (30,53);
+insert into t (id,a) values (30,54);
+insert into t (id,a) values (30,55);
+insert into t (id,a) values (30,56);
+insert into t (id,a) values (30,57);
+insert into t (id,a) values (30,58);
+insert into t (id,a) values (30,59);
+insert into t (id,a) values (30,60);
+insert into t (id,a) values (30,61);
+insert into t (id,a) values (30,62);
+insert into t (id,a) values (30,63);
+insert into t (id,a) values (30,64);
+insert into t (id,a) values (30,65);
+insert into t (id,a) values (30,66);
+insert into t (id,a) values (30,67);
+insert into t (id,a) values (30,68);
+insert into t (id,a) values (30,69);
+insert into t (id,a) values (30,70);
+insert into t (id,a) values (30,71);
+insert into t (id,a) values (30,72);
+insert into t (id,a) values (30,73);
+insert into t (id,a) values (30,74);
+insert into t (id,a) values (30,75);
+insert into t (id,a) values (30,76);
+insert into t (id,a) values (30,77);
+insert into t (id,a) values (30,78);
+insert into t (id,a) values (30,79);
+insert into t (id,a) values (30,80);
+insert into t (id,a) values (30,81);
+insert into t (id,a) values (30,82);
+insert into t (id,a) values (30,83);
+insert into t (id,a) values (30,84);
+insert into t (id,a) values (30,85);
+insert into t (id,a) values (30,86);
+insert into t (id,a) values (30,87);
+insert into t (id,a) values (30,88);
+insert into t (id,a) values (30,89);
+insert into t (id,a) values (30,90);
+insert into t (id,a) values (30,91);
+insert into t (id,a) values (30,92);
+insert into t (id,a) values (30,93);
+insert into t (id,a) values (30,94);
+insert into t (id,a) values (30,95);
+insert into t (id,a) values (30,96);
+insert into t (id,a) values (30,97);
+insert into t (id,a) values (30,98);
+insert into t (id,a) values (30,99);
+insert into t (id,a) values (31,0);
+insert into t (id,a) values (31,1);
+insert into t (id,a) values (31,2);
+insert into t (id,a) values (31,3);
+insert into t (id,a) values (31,4);
+insert into t (id,a) values (31,5);
+insert into t (id,a) values (31,6);
+insert into t (id,a) values (31,7);
+insert into t (id,a) values (31,8);
+insert into t (id,a) values (31,9);
+insert into t (id,a) values (31,10);
+insert into t (id,a) values (31,11);
+insert into t (id,a) values (31,12);
+insert into t (id,a) values (31,13);
+insert into t (id,a) values (31,14);
+insert into t (id,a) values (31,15);
+insert into t (id,a) values (31,16);
+insert into t (id,a) values (31,17);
+insert into t (id,a) values (31,18);
+insert into t (id,a) values (31,19);
+insert into t (id,a) values (31,20);
+insert into t (id,a) values (31,21);
+insert into t (id,a) values (31,22);
+insert into t (id,a) values (31,23);
+insert into t (id,a) values (31,24);
+insert into t (id,a) values (31,25);
+insert into t (id,a) values (31,26);
+insert into t (id,a) values (31,27);
+insert into t (id,a) values (31,28);
+insert into t (id,a) values (31,29);
+insert into t (id,a) values (31,30);
+insert into t (id,a) values (31,31);
+insert into t (id,a) values (31,32);
+insert into t (id,a) values (31,33);
+insert into t (id,a) values (31,34);
+insert into t (id,a) values (31,35);
+insert into t (id,a) values (31,36);
+insert into t (id,a) values (31,37);
+insert into t (id,a) values (31,38);
+insert into t (id,a) values (31,39);
+insert into t (id,a) values (31,40);
+insert into t (id,a) values (31,41);
+insert into t (id,a) values (31,42);
+insert into t (id,a) values (31,43);
+insert into t (id,a) values (31,44);
+insert into t (id,a) values (31,45);
+insert into t (id,a) values (31,46);
+insert into t (id,a) values (31,47);
+insert into t (id,a) values (31,48);
+insert into t (id,a) values (31,49);
+insert into t (id,a) values (31,50);
+insert into t (id,a) values (31,51);
+insert into t (id,a) values (31,52);
+insert into t (id,a) values (31,53);
+insert into t (id,a) values (31,54);
+insert into t (id,a) values (31,55);
+insert into t (id,a) values (31,56);
+insert into t (id,a) values (31,57);
+insert into t (id,a) values (31,58);
+insert into t (id,a) values (31,59);
+insert into t (id,a) values (31,60);
+insert into t (id,a) values (31,61);
+insert into t (id,a) values (31,62);
+insert into t (id,a) values (31,63);
+insert into t (id,a) values (31,64);
+insert into t (id,a) values (31,65);
+insert into t (id,a) values (31,66);
+insert into t (id,a) values (31,67);
+insert into t (id,a) values (31,68);
+insert into t (id,a) values (31,69);
+insert into t (id,a) values (31,70);
+insert into t (id,a) values (31,71);
+insert into t (id,a) values (31,72);
+insert into t (id,a) values (31,73);
+insert into t (id,a) values (31,74);
+insert into t (id,a) values (31,75);
+insert into t (id,a) values (31,76);
+insert into t (id,a) values (31,77);
+insert into t (id,a) values (31,78);
+insert into t (id,a) values (31,79);
+insert into t (id,a) values (31,80);
+insert into t (id,a) values (31,81);
+insert into t (id,a) values (31,82);
+insert into t (id,a) values (31,83);
+insert into t (id,a) values (31,84);
+insert into t (id,a) values (31,85);
+insert into t (id,a) values (31,86);
+insert into t (id,a) values (31,87);
+insert into t (id,a) values (31,88);
+insert into t (id,a) values (31,89);
+insert into t (id,a) values (31,90);
+insert into t (id,a) values (31,91);
+insert into t (id,a) values (31,92);
+insert into t (id,a) values (31,93);
+insert into t (id,a) values (31,94);
+insert into t (id,a) values (31,95);
+insert into t (id,a) values (31,96);
+insert into t (id,a) values (31,97);
+insert into t (id,a) values (31,98);
+insert into t (id,a) values (31,99);
+insert into t (id,a) values (32,0);
+insert into t (id,a) values (32,1);
+insert into t (id,a) values (32,2);
+insert into t (id,a) values (32,3);
+insert into t (id,a) values (32,4);
+insert into t (id,a) values (32,5);
+insert into t (id,a) values (32,6);
+insert into t (id,a) values (32,7);
+insert into t (id,a) values (32,8);
+insert into t (id,a) values (32,9);
+insert into t (id,a) values (32,10);
+insert into t (id,a) values (32,11);
+insert into t (id,a) values (32,12);
+insert into t (id,a) values (32,13);
+insert into t (id,a) values (32,14);
+insert into t (id,a) values (32,15);
+insert into t (id,a) values (32,16);
+insert into t (id,a) values (32,17);
+insert into t (id,a) values (32,18);
+insert into t (id,a) values (32,19);
+insert into t (id,a) values (32,20);
+insert into t (id,a) values (32,21);
+insert into t (id,a) values (32,22);
+insert into t (id,a) values (32,23);
+insert into t (id,a) values (32,24);
+insert into t (id,a) values (32,25);
+insert into t (id,a) values (32,26);
+insert into t (id,a) values (32,27);
+insert into t (id,a) values (32,28);
+insert into t (id,a) values (32,29);
+insert into t (id,a) values (32,30);
+insert into t (id,a) values (32,31);
+insert into t (id,a) values (32,32);
+insert into t (id,a) values (32,33);
+insert into t (id,a) values (32,34);
+insert into t (id,a) values (32,35);
+insert into t (id,a) values (32,36);
+insert into t (id,a) values (32,37);
+insert into t (id,a) values (32,38);
+insert into t (id,a) values (32,39);
+insert into t (id,a) values (32,40);
+insert into t (id,a) values (32,41);
+insert into t (id,a) values (32,42);
+insert into t (id,a) values (32,43);
+insert into t (id,a) values (32,44);
+insert into t (id,a) values (32,45);
+insert into t (id,a) values (32,46);
+insert into t (id,a) values (32,47);
+insert into t (id,a) values (32,48);
+insert into t (id,a) values (32,49);
+insert into t (id,a) values (32,50);
+insert into t (id,a) values (32,51);
+insert into t (id,a) values (32,52);
+insert into t (id,a) values (32,53);
+insert into t (id,a) values (32,54);
+insert into t (id,a) values (32,55);
+insert into t (id,a) values (32,56);
+insert into t (id,a) values (32,57);
+insert into t (id,a) values (32,58);
+insert into t (id,a) values (32,59);
+insert into t (id,a) values (32,60);
+insert into t (id,a) values (32,61);
+insert into t (id,a) values (32,62);
+insert into t (id,a) values (32,63);
+insert into t (id,a) values (32,64);
+insert into t (id,a) values (32,65);
+insert into t (id,a) values (32,66);
+insert into t (id,a) values (32,67);
+insert into t (id,a) values (32,68);
+insert into t (id,a) values (32,69);
+insert into t (id,a) values (32,70);
+insert into t (id,a) values (32,71);
+insert into t (id,a) values (32,72);
+insert into t (id,a) values (32,73);
+insert into t (id,a) values (32,74);
+insert into t (id,a) values (32,75);
+insert into t (id,a) values (32,76);
+insert into t (id,a) values (32,77);
+insert into t (id,a) values (32,78);
+insert into t (id,a) values (32,79);
+insert into t (id,a) values (32,80);
+insert into t (id,a) values (32,81);
+insert into t (id,a) values (32,82);
+insert into t (id,a) values (32,83);
+insert into t (id,a) values (32,84);
+insert into t (id,a) values (32,85);
+insert into t (id,a) values (32,86);
+insert into t (id,a) values (32,87);
+insert into t (id,a) values (32,88);
+insert into t (id,a) values (32,89);
+insert into t (id,a) values (32,90);
+insert into t (id,a) values (32,91);
+insert into t (id,a) values (32,92);
+insert into t (id,a) values (32,93);
+insert into t (id,a) values (32,94);
+insert into t (id,a) values (32,95);
+insert into t (id,a) values (32,96);
+insert into t (id,a) values (32,97);
+insert into t (id,a) values (32,98);
+insert into t (id,a) values (32,99);
+insert into t (id,a) values (33,0);
+insert into t (id,a) values (33,1);
+insert into t (id,a) values (33,2);
+insert into t (id,a) values (33,3);
+insert into t (id,a) values (33,4);
+insert into t (id,a) values (33,5);
+insert into t (id,a) values (33,6);
+insert into t (id,a) values (33,7);
+insert into t (id,a) values (33,8);
+insert into t (id,a) values (33,9);
+insert into t (id,a) values (33,10);
+insert into t (id,a) values (33,11);
+insert into t (id,a) values (33,12);
+insert into t (id,a) values (33,13);
+insert into t (id,a) values (33,14);
+insert into t (id,a) values (33,15);
+insert into t (id,a) values (33,16);
+insert into t (id,a) values (33,17);
+insert into t (id,a) values (33,18);
+insert into t (id,a) values (33,19);
+insert into t (id,a) values (33,20);
+insert into t (id,a) values (33,21);
+insert into t (id,a) values (33,22);
+insert into t (id,a) values (33,23);
+insert into t (id,a) values (33,24);
+insert into t (id,a) values (33,25);
+insert into t (id,a) values (33,26);
+insert into t (id,a) values (33,27);
+insert into t (id,a) values (33,28);
+insert into t (id,a) values (33,29);
+insert into t (id,a) values (33,30);
+insert into t (id,a) values (33,31);
+insert into t (id,a) values (33,32);
+insert into t (id,a) values (33,33);
+insert into t (id,a) values (33,34);
+insert into t (id,a) values (33,35);
+insert into t (id,a) values (33,36);
+insert into t (id,a) values (33,37);
+insert into t (id,a) values (33,38);
+insert into t (id,a) values (33,39);
+insert into t (id,a) values (33,40);
+insert into t (id,a) values (33,41);
+insert into t (id,a) values (33,42);
+insert into t (id,a) values (33,43);
+insert into t (id,a) values (33,44);
+insert into t (id,a) values (33,45);
+insert into t (id,a) values (33,46);
+insert into t (id,a) values (33,47);
+insert into t (id,a) values (33,48);
+insert into t (id,a) values (33,49);
+insert into t (id,a) values (33,50);
+insert into t (id,a) values (33,51);
+insert into t (id,a) values (33,52);
+insert into t (id,a) values (33,53);
+insert into t (id,a) values (33,54);
+insert into t (id,a) values (33,55);
+insert into t (id,a) values (33,56);
+insert into t (id,a) values (33,57);
+insert into t (id,a) values (33,58);
+insert into t (id,a) values (33,59);
+insert into t (id,a) values (33,60);
+insert into t (id,a) values (33,61);
+insert into t (id,a) values (33,62);
+insert into t (id,a) values (33,63);
+insert into t (id,a) values (33,64);
+insert into t (id,a) values (33,65);
+insert into t (id,a) values (33,66);
+insert into t (id,a) values (33,67);
+insert into t (id,a) values (33,68);
+insert into t (id,a) values (33,69);
+insert into t (id,a) values (33,70);
+insert into t (id,a) values (33,71);
+insert into t (id,a) values (33,72);
+insert into t (id,a) values (33,73);
+insert into t (id,a) values (33,74);
+insert into t (id,a) values (33,75);
+insert into t (id,a) values (33,76);
+insert into t (id,a) values (33,77);
+insert into t (id,a) values (33,78);
+insert into t (id,a) values (33,79);
+insert into t (id,a) values (33,80);
+insert into t (id,a) values (33,81);
+insert into t (id,a) values (33,82);
+insert into t (id,a) values (33,83);
+insert into t (id,a) values (33,84);
+insert into t (id,a) values (33,85);
+insert into t (id,a) values (33,86);
+insert into t (id,a) values (33,87);
+insert into t (id,a) values (33,88);
+insert into t (id,a) values (33,89);
+insert into t (id,a) values (33,90);
+insert into t (id,a) values (33,91);
+insert into t (id,a) values (33,92);
+insert into t (id,a) values (33,93);
+insert into t (id,a) values (33,94);
+insert into t (id,a) values (33,95);
+insert into t (id,a) values (33,96);
+insert into t (id,a) values (33,97);
+insert into t (id,a) values (33,98);
+insert into t (id,a) values (33,99);
+insert into t (id,a) values (34,0);
+insert into t (id,a) values (34,1);
+insert into t (id,a) values (34,2);
+insert into t (id,a) values (34,3);
+insert into t (id,a) values (34,4);
+insert into t (id,a) values (34,5);
+insert into t (id,a) values (34,6);
+insert into t (id,a) values (34,7);
+insert into t (id,a) values (34,8);
+insert into t (id,a) values (34,9);
+insert into t (id,a) values (34,10);
+insert into t (id,a) values (34,11);
+insert into t (id,a) values (34,12);
+insert into t (id,a) values (34,13);
+insert into t (id,a) values (34,14);
+insert into t (id,a) values (34,15);
+insert into t (id,a) values (34,16);
+insert into t (id,a) values (34,17);
+insert into t (id,a) values (34,18);
+insert into t (id,a) values (34,19);
+insert into t (id,a) values (34,20);
+insert into t (id,a) values (34,21);
+insert into t (id,a) values (34,22);
+insert into t (id,a) values (34,23);
+insert into t (id,a) values (34,24);
+insert into t (id,a) values (34,25);
+insert into t (id,a) values (34,26);
+insert into t (id,a) values (34,27);
+insert into t (id,a) values (34,28);
+insert into t (id,a) values (34,29);
+insert into t (id,a) values (34,30);
+insert into t (id,a) values (34,31);
+insert into t (id,a) values (34,32);
+insert into t (id,a) values (34,33);
+insert into t (id,a) values (34,34);
+insert into t (id,a) values (34,35);
+insert into t (id,a) values (34,36);
+insert into t (id,a) values (34,37);
+insert into t (id,a) values (34,38);
+insert into t (id,a) values (34,39);
+insert into t (id,a) values (34,40);
+insert into t (id,a) values (34,41);
+insert into t (id,a) values (34,42);
+insert into t (id,a) values (34,43);
+insert into t (id,a) values (34,44);
+insert into t (id,a) values (34,45);
+insert into t (id,a) values (34,46);
+insert into t (id,a) values (34,47);
+insert into t (id,a) values (34,48);
+insert into t (id,a) values (34,49);
+insert into t (id,a) values (34,50);
+insert into t (id,a) values (34,51);
+insert into t (id,a) values (34,52);
+insert into t (id,a) values (34,53);
+insert into t (id,a) values (34,54);
+insert into t (id,a) values (34,55);
+insert into t (id,a) values (34,56);
+insert into t (id,a) values (34,57);
+insert into t (id,a) values (34,58);
+insert into t (id,a) values (34,59);
+insert into t (id,a) values (34,60);
+insert into t (id,a) values (34,61);
+insert into t (id,a) values (34,62);
+insert into t (id,a) values (34,63);
+insert into t (id,a) values (34,64);
+insert into t (id,a) values (34,65);
+insert into t (id,a) values (34,66);
+insert into t (id,a) values (34,67);
+insert into t (id,a) values (34,68);
+insert into t (id,a) values (34,69);
+insert into t (id,a) values (34,70);
+insert into t (id,a) values (34,71);
+insert into t (id,a) values (34,72);
+insert into t (id,a) values (34,73);
+insert into t (id,a) values (34,74);
+insert into t (id,a) values (34,75);
+insert into t (id,a) values (34,76);
+insert into t (id,a) values (34,77);
+insert into t (id,a) values (34,78);
+insert into t (id,a) values (34,79);
+insert into t (id,a) values (34,80);
+insert into t (id,a) values (34,81);
+insert into t (id,a) values (34,82);
+insert into t (id,a) values (34,83);
+insert into t (id,a) values (34,84);
+insert into t (id,a) values (34,85);
+insert into t (id,a) values (34,86);
+insert into t (id,a) values (34,87);
+insert into t (id,a) values (34,88);
+insert into t (id,a) values (34,89);
+insert into t (id,a) values (34,90);
+insert into t (id,a) values (34,91);
+insert into t (id,a) values (34,92);
+insert into t (id,a) values (34,93);
+insert into t (id,a) values (34,94);
+insert into t (id,a) values (34,95);
+insert into t (id,a) values (34,96);
+insert into t (id,a) values (34,97);
+insert into t (id,a) values (34,98);
+insert into t (id,a) values (34,99);
+insert into t (id,a) values (35,0);
+insert into t (id,a) values (35,1);
+insert into t (id,a) values (35,2);
+insert into t (id,a) values (35,3);
+insert into t (id,a) values (35,4);
+insert into t (id,a) values (35,5);
+insert into t (id,a) values (35,6);
+insert into t (id,a) values (35,7);
+insert into t (id,a) values (35,8);
+insert into t (id,a) values (35,9);
+insert into t (id,a) values (35,10);
+insert into t (id,a) values (35,11);
+insert into t (id,a) values (35,12);
+insert into t (id,a) values (35,13);
+insert into t (id,a) values (35,14);
+insert into t (id,a) values (35,15);
+insert into t (id,a) values (35,16);
+insert into t (id,a) values (35,17);
+insert into t (id,a) values (35,18);
+insert into t (id,a) values (35,19);
+insert into t (id,a) values (35,20);
+insert into t (id,a) values (35,21);
+insert into t (id,a) values (35,22);
+insert into t (id,a) values (35,23);
+insert into t (id,a) values (35,24);
+insert into t (id,a) values (35,25);
+insert into t (id,a) values (35,26);
+insert into t (id,a) values (35,27);
+insert into t (id,a) values (35,28);
+insert into t (id,a) values (35,29);
+insert into t (id,a) values (35,30);
+insert into t (id,a) values (35,31);
+insert into t (id,a) values (35,32);
+insert into t (id,a) values (35,33);
+insert into t (id,a) values (35,34);
+insert into t (id,a) values (35,35);
+insert into t (id,a) values (35,36);
+insert into t (id,a) values (35,37);
+insert into t (id,a) values (35,38);
+insert into t (id,a) values (35,39);
+insert into t (id,a) values (35,40);
+insert into t (id,a) values (35,41);
+insert into t (id,a) values (35,42);
+insert into t (id,a) values (35,43);
+insert into t (id,a) values (35,44);
+insert into t (id,a) values (35,45);
+insert into t (id,a) values (35,46);
+insert into t (id,a) values (35,47);
+insert into t (id,a) values (35,48);
+insert into t (id,a) values (35,49);
+insert into t (id,a) values (35,50);
+insert into t (id,a) values (35,51);
+insert into t (id,a) values (35,52);
+insert into t (id,a) values (35,53);
+insert into t (id,a) values (35,54);
+insert into t (id,a) values (35,55);
+insert into t (id,a) values (35,56);
+insert into t (id,a) values (35,57);
+insert into t (id,a) values (35,58);
+insert into t (id,a) values (35,59);
+insert into t (id,a) values (35,60);
+insert into t (id,a) values (35,61);
+insert into t (id,a) values (35,62);
+insert into t (id,a) values (35,63);
+insert into t (id,a) values (35,64);
+insert into t (id,a) values (35,65);
+insert into t (id,a) values (35,66);
+insert into t (id,a) values (35,67);
+insert into t (id,a) values (35,68);
+insert into t (id,a) values (35,69);
+insert into t (id,a) values (35,70);
+insert into t (id,a) values (35,71);
+insert into t (id,a) values (35,72);
+insert into t (id,a) values (35,73);
+insert into t (id,a) values (35,74);
+insert into t (id,a) values (35,75);
+insert into t (id,a) values (35,76);
+insert into t (id,a) values (35,77);
+insert into t (id,a) values (35,78);
+insert into t (id,a) values (35,79);
+insert into t (id,a) values (35,80);
+insert into t (id,a) values (35,81);
+insert into t (id,a) values (35,82);
+insert into t (id,a) values (35,83);
+insert into t (id,a) values (35,84);
+insert into t (id,a) values (35,85);
+insert into t (id,a) values (35,86);
+insert into t (id,a) values (35,87);
+insert into t (id,a) values (35,88);
+insert into t (id,a) values (35,89);
+insert into t (id,a) values (35,90);
+insert into t (id,a) values (35,91);
+insert into t (id,a) values (35,92);
+insert into t (id,a) values (35,93);
+insert into t (id,a) values (35,94);
+insert into t (id,a) values (35,95);
+insert into t (id,a) values (35,96);
+insert into t (id,a) values (35,97);
+insert into t (id,a) values (35,98);
+insert into t (id,a) values (35,99);
+insert into t (id,a) values (36,0);
+insert into t (id,a) values (36,1);
+insert into t (id,a) values (36,2);
+insert into t (id,a) values (36,3);
+insert into t (id,a) values (36,4);
+insert into t (id,a) values (36,5);
+insert into t (id,a) values (36,6);
+insert into t (id,a) values (36,7);
+insert into t (id,a) values (36,8);
+insert into t (id,a) values (36,9);
+insert into t (id,a) values (36,10);
+insert into t (id,a) values (36,11);
+insert into t (id,a) values (36,12);
+insert into t (id,a) values (36,13);
+insert into t (id,a) values (36,14);
+insert into t (id,a) values (36,15);
+insert into t (id,a) values (36,16);
+insert into t (id,a) values (36,17);
+insert into t (id,a) values (36,18);
+insert into t (id,a) values (36,19);
+insert into t (id,a) values (36,20);
+insert into t (id,a) values (36,21);
+insert into t (id,a) values (36,22);
+insert into t (id,a) values (36,23);
+insert into t (id,a) values (36,24);
+insert into t (id,a) values (36,25);
+insert into t (id,a) values (36,26);
+insert into t (id,a) values (36,27);
+insert into t (id,a) values (36,28);
+insert into t (id,a) values (36,29);
+insert into t (id,a) values (36,30);
+insert into t (id,a) values (36,31);
+insert into t (id,a) values (36,32);
+insert into t (id,a) values (36,33);
+insert into t (id,a) values (36,34);
+insert into t (id,a) values (36,35);
+insert into t (id,a) values (36,36);
+insert into t (id,a) values (36,37);
+insert into t (id,a) values (36,38);
+insert into t (id,a) values (36,39);
+insert into t (id,a) values (36,40);
+insert into t (id,a) values (36,41);
+insert into t (id,a) values (36,42);
+insert into t (id,a) values (36,43);
+insert into t (id,a) values (36,44);
+insert into t (id,a) values (36,45);
+insert into t (id,a) values (36,46);
+insert into t (id,a) values (36,47);
+insert into t (id,a) values (36,48);
+insert into t (id,a) values (36,49);
+insert into t (id,a) values (36,50);
+insert into t (id,a) values (36,51);
+insert into t (id,a) values (36,52);
+insert into t (id,a) values (36,53);
+insert into t (id,a) values (36,54);
+insert into t (id,a) values (36,55);
+insert into t (id,a) values (36,56);
+insert into t (id,a) values (36,57);
+insert into t (id,a) values (36,58);
+insert into t (id,a) values (36,59);
+insert into t (id,a) values (36,60);
+insert into t (id,a) values (36,61);
+insert into t (id,a) values (36,62);
+insert into t (id,a) values (36,63);
+insert into t (id,a) values (36,64);
+insert into t (id,a) values (36,65);
+insert into t (id,a) values (36,66);
+insert into t (id,a) values (36,67);
+insert into t (id,a) values (36,68);
+insert into t (id,a) values (36,69);
+insert into t (id,a) values (36,70);
+insert into t (id,a) values (36,71);
+insert into t (id,a) values (36,72);
+insert into t (id,a) values (36,73);
+insert into t (id,a) values (36,74);
+insert into t (id,a) values (36,75);
+insert into t (id,a) values (36,76);
+insert into t (id,a) values (36,77);
+insert into t (id,a) values (36,78);
+insert into t (id,a) values (36,79);
+insert into t (id,a) values (36,80);
+insert into t (id,a) values (36,81);
+insert into t (id,a) values (36,82);
+insert into t (id,a) values (36,83);
+insert into t (id,a) values (36,84);
+insert into t (id,a) values (36,85);
+insert into t (id,a) values (36,86);
+insert into t (id,a) values (36,87);
+insert into t (id,a) values (36,88);
+insert into t (id,a) values (36,89);
+insert into t (id,a) values (36,90);
+insert into t (id,a) values (36,91);
+insert into t (id,a) values (36,92);
+insert into t (id,a) values (36,93);
+insert into t (id,a) values (36,94);
+insert into t (id,a) values (36,95);
+insert into t (id,a) values (36,96);
+insert into t (id,a) values (36,97);
+insert into t (id,a) values (36,98);
+insert into t (id,a) values (36,99);
+insert into t (id,a) values (37,0);
+insert into t (id,a) values (37,1);
+insert into t (id,a) values (37,2);
+insert into t (id,a) values (37,3);
+insert into t (id,a) values (37,4);
+insert into t (id,a) values (37,5);
+insert into t (id,a) values (37,6);
+insert into t (id,a) values (37,7);
+insert into t (id,a) values (37,8);
+insert into t (id,a) values (37,9);
+insert into t (id,a) values (37,10);
+insert into t (id,a) values (37,11);
+insert into t (id,a) values (37,12);
+insert into t (id,a) values (37,13);
+insert into t (id,a) values (37,14);
+insert into t (id,a) values (37,15);
+insert into t (id,a) values (37,16);
+insert into t (id,a) values (37,17);
+insert into t (id,a) values (37,18);
+insert into t (id,a) values (37,19);
+insert into t (id,a) values (37,20);
+insert into t (id,a) values (37,21);
+insert into t (id,a) values (37,22);
+insert into t (id,a) values (37,23);
+insert into t (id,a) values (37,24);
+insert into t (id,a) values (37,25);
+insert into t (id,a) values (37,26);
+insert into t (id,a) values (37,27);
+insert into t (id,a) values (37,28);
+insert into t (id,a) values (37,29);
+insert into t (id,a) values (37,30);
+insert into t (id,a) values (37,31);
+insert into t (id,a) values (37,32);
+insert into t (id,a) values (37,33);
+insert into t (id,a) values (37,34);
+insert into t (id,a) values (37,35);
+insert into t (id,a) values (37,36);
+insert into t (id,a) values (37,37);
+insert into t (id,a) values (37,38);
+insert into t (id,a) values (37,39);
+insert into t (id,a) values (37,40);
+insert into t (id,a) values (37,41);
+insert into t (id,a) values (37,42);
+insert into t (id,a) values (37,43);
+insert into t (id,a) values (37,44);
+insert into t (id,a) values (37,45);
+insert into t (id,a) values (37,46);
+insert into t (id,a) values (37,47);
+insert into t (id,a) values (37,48);
+insert into t (id,a) values (37,49);
+insert into t (id,a) values (37,50);
+insert into t (id,a) values (37,51);
+insert into t (id,a) values (37,52);
+insert into t (id,a) values (37,53);
+insert into t (id,a) values (37,54);
+insert into t (id,a) values (37,55);
+insert into t (id,a) values (37,56);
+insert into t (id,a) values (37,57);
+insert into t (id,a) values (37,58);
+insert into t (id,a) values (37,59);
+insert into t (id,a) values (37,60);
+insert into t (id,a) values (37,61);
+insert into t (id,a) values (37,62);
+insert into t (id,a) values (37,63);
+insert into t (id,a) values (37,64);
+insert into t (id,a) values (37,65);
+insert into t (id,a) values (37,66);
+insert into t (id,a) values (37,67);
+insert into t (id,a) values (37,68);
+insert into t (id,a) values (37,69);
+insert into t (id,a) values (37,70);
+insert into t (id,a) values (37,71);
+insert into t (id,a) values (37,72);
+insert into t (id,a) values (37,73);
+insert into t (id,a) values (37,74);
+insert into t (id,a) values (37,75);
+insert into t (id,a) values (37,76);
+insert into t (id,a) values (37,77);
+insert into t (id,a) values (37,78);
+insert into t (id,a) values (37,79);
+insert into t (id,a) values (37,80);
+insert into t (id,a) values (37,81);
+insert into t (id,a) values (37,82);
+insert into t (id,a) values (37,83);
+insert into t (id,a) values (37,84);
+insert into t (id,a) values (37,85);
+insert into t (id,a) values (37,86);
+insert into t (id,a) values (37,87);
+insert into t (id,a) values (37,88);
+insert into t (id,a) values (37,89);
+insert into t (id,a) values (37,90);
+insert into t (id,a) values (37,91);
+insert into t (id,a) values (37,92);
+insert into t (id,a) values (37,93);
+insert into t (id,a) values (37,94);
+insert into t (id,a) values (37,95);
+insert into t (id,a) values (37,96);
+insert into t (id,a) values (37,97);
+insert into t (id,a) values (37,98);
+insert into t (id,a) values (37,99);
+insert into t (id,a) values (38,0);
+insert into t (id,a) values (38,1);
+insert into t (id,a) values (38,2);
+insert into t (id,a) values (38,3);
+insert into t (id,a) values (38,4);
+insert into t (id,a) values (38,5);
+insert into t (id,a) values (38,6);
+insert into t (id,a) values (38,7);
+insert into t (id,a) values (38,8);
+insert into t (id,a) values (38,9);
+insert into t (id,a) values (38,10);
+insert into t (id,a) values (38,11);
+insert into t (id,a) values (38,12);
+insert into t (id,a) values (38,13);
+insert into t (id,a) values (38,14);
+insert into t (id,a) values (38,15);
+insert into t (id,a) values (38,16);
+insert into t (id,a) values (38,17);
+insert into t (id,a) values (38,18);
+insert into t (id,a) values (38,19);
+insert into t (id,a) values (38,20);
+insert into t (id,a) values (38,21);
+insert into t (id,a) values (38,22);
+insert into t (id,a) values (38,23);
+insert into t (id,a) values (38,24);
+insert into t (id,a) values (38,25);
+insert into t (id,a) values (38,26);
+insert into t (id,a) values (38,27);
+insert into t (id,a) values (38,28);
+insert into t (id,a) values (38,29);
+insert into t (id,a) values (38,30);
+insert into t (id,a) values (38,31);
+insert into t (id,a) values (38,32);
+insert into t (id,a) values (38,33);
+insert into t (id,a) values (38,34);
+insert into t (id,a) values (38,35);
+insert into t (id,a) values (38,36);
+insert into t (id,a) values (38,37);
+insert into t (id,a) values (38,38);
+insert into t (id,a) values (38,39);
+insert into t (id,a) values (38,40);
+insert into t (id,a) values (38,41);
+insert into t (id,a) values (38,42);
+insert into t (id,a) values (38,43);
+insert into t (id,a) values (38,44);
+insert into t (id,a) values (38,45);
+insert into t (id,a) values (38,46);
+insert into t (id,a) values (38,47);
+insert into t (id,a) values (38,48);
+insert into t (id,a) values (38,49);
+insert into t (id,a) values (38,50);
+insert into t (id,a) values (38,51);
+insert into t (id,a) values (38,52);
+insert into t (id,a) values (38,53);
+insert into t (id,a) values (38,54);
+insert into t (id,a) values (38,55);
+insert into t (id,a) values (38,56);
+insert into t (id,a) values (38,57);
+insert into t (id,a) values (38,58);
+insert into t (id,a) values (38,59);
+insert into t (id,a) values (38,60);
+insert into t (id,a) values (38,61);
+insert into t (id,a) values (38,62);
+insert into t (id,a) values (38,63);
+insert into t (id,a) values (38,64);
+insert into t (id,a) values (38,65);
+insert into t (id,a) values (38,66);
+insert into t (id,a) values (38,67);
+insert into t (id,a) values (38,68);
+insert into t (id,a) values (38,69);
+insert into t (id,a) values (38,70);
+insert into t (id,a) values (38,71);
+insert into t (id,a) values (38,72);
+insert into t (id,a) values (38,73);
+insert into t (id,a) values (38,74);
+insert into t (id,a) values (38,75);
+insert into t (id,a) values (38,76);
+insert into t (id,a) values (38,77);
+insert into t (id,a) values (38,78);
+insert into t (id,a) values (38,79);
+insert into t (id,a) values (38,80);
+insert into t (id,a) values (38,81);
+insert into t (id,a) values (38,82);
+insert into t (id,a) values (38,83);
+insert into t (id,a) values (38,84);
+insert into t (id,a) values (38,85);
+insert into t (id,a) values (38,86);
+insert into t (id,a) values (38,87);
+insert into t (id,a) values (38,88);
+insert into t (id,a) values (38,89);
+insert into t (id,a) values (38,90);
+insert into t (id,a) values (38,91);
+insert into t (id,a) values (38,92);
+insert into t (id,a) values (38,93);
+insert into t (id,a) values (38,94);
+insert into t (id,a) values (38,95);
+insert into t (id,a) values (38,96);
+insert into t (id,a) values (38,97);
+insert into t (id,a) values (38,98);
+insert into t (id,a) values (38,99);
+insert into t (id,a) values (39,0);
+insert into t (id,a) values (39,1);
+insert into t (id,a) values (39,2);
+insert into t (id,a) values (39,3);
+insert into t (id,a) values (39,4);
+insert into t (id,a) values (39,5);
+insert into t (id,a) values (39,6);
+insert into t (id,a) values (39,7);
+insert into t (id,a) values (39,8);
+insert into t (id,a) values (39,9);
+insert into t (id,a) values (39,10);
+insert into t (id,a) values (39,11);
+insert into t (id,a) values (39,12);
+insert into t (id,a) values (39,13);
+insert into t (id,a) values (39,14);
+insert into t (id,a) values (39,15);
+insert into t (id,a) values (39,16);
+insert into t (id,a) values (39,17);
+insert into t (id,a) values (39,18);
+insert into t (id,a) values (39,19);
+insert into t (id,a) values (39,20);
+insert into t (id,a) values (39,21);
+insert into t (id,a) values (39,22);
+insert into t (id,a) values (39,23);
+insert into t (id,a) values (39,24);
+insert into t (id,a) values (39,25);
+insert into t (id,a) values (39,26);
+insert into t (id,a) values (39,27);
+insert into t (id,a) values (39,28);
+insert into t (id,a) values (39,29);
+insert into t (id,a) values (39,30);
+insert into t (id,a) values (39,31);
+insert into t (id,a) values (39,32);
+insert into t (id,a) values (39,33);
+insert into t (id,a) values (39,34);
+insert into t (id,a) values (39,35);
+insert into t (id,a) values (39,36);
+insert into t (id,a) values (39,37);
+insert into t (id,a) values (39,38);
+insert into t (id,a) values (39,39);
+insert into t (id,a) values (39,40);
+insert into t (id,a) values (39,41);
+insert into t (id,a) values (39,42);
+insert into t (id,a) values (39,43);
+insert into t (id,a) values (39,44);
+insert into t (id,a) values (39,45);
+insert into t (id,a) values (39,46);
+insert into t (id,a) values (39,47);
+insert into t (id,a) values (39,48);
+insert into t (id,a) values (39,49);
+insert into t (id,a) values (39,50);
+insert into t (id,a) values (39,51);
+insert into t (id,a) values (39,52);
+insert into t (id,a) values (39,53);
+insert into t (id,a) values (39,54);
+insert into t (id,a) values (39,55);
+insert into t (id,a) values (39,56);
+insert into t (id,a) values (39,57);
+insert into t (id,a) values (39,58);
+insert into t (id,a) values (39,59);
+insert into t (id,a) values (39,60);
+insert into t (id,a) values (39,61);
+insert into t (id,a) values (39,62);
+insert into t (id,a) values (39,63);
+insert into t (id,a) values (39,64);
+insert into t (id,a) values (39,65);
+insert into t (id,a) values (39,66);
+insert into t (id,a) values (39,67);
+insert into t (id,a) values (39,68);
+insert into t (id,a) values (39,69);
+insert into t (id,a) values (39,70);
+insert into t (id,a) values (39,71);
+insert into t (id,a) values (39,72);
+insert into t (id,a) values (39,73);
+insert into t (id,a) values (39,74);
+insert into t (id,a) values (39,75);
+insert into t (id,a) values (39,76);
+insert into t (id,a) values (39,77);
+insert into t (id,a) values (39,78);
+insert into t (id,a) values (39,79);
+insert into t (id,a) values (39,80);
+insert into t (id,a) values (39,81);
+insert into t (id,a) values (39,82);
+insert into t (id,a) values (39,83);
+insert into t (id,a) values (39,84);
+insert into t (id,a) values (39,85);
+insert into t (id,a) values (39,86);
+insert into t (id,a) values (39,87);
+insert into t (id,a) values (39,88);
+insert into t (id,a) values (39,89);
+insert into t (id,a) values (39,90);
+insert into t (id,a) values (39,91);
+insert into t (id,a) values (39,92);
+insert into t (id,a) values (39,93);
+insert into t (id,a) values (39,94);
+insert into t (id,a) values (39,95);
+insert into t (id,a) values (39,96);
+insert into t (id,a) values (39,97);
+insert into t (id,a) values (39,98);
+insert into t (id,a) values (39,99);
+insert into t (id,a) values (40,0);
+insert into t (id,a) values (40,1);
+insert into t (id,a) values (40,2);
+insert into t (id,a) values (40,3);
+insert into t (id,a) values (40,4);
+insert into t (id,a) values (40,5);
+insert into t (id,a) values (40,6);
+insert into t (id,a) values (40,7);
+insert into t (id,a) values (40,8);
+insert into t (id,a) values (40,9);
+insert into t (id,a) values (40,10);
+insert into t (id,a) values (40,11);
+insert into t (id,a) values (40,12);
+insert into t (id,a) values (40,13);
+insert into t (id,a) values (40,14);
+insert into t (id,a) values (40,15);
+insert into t (id,a) values (40,16);
+insert into t (id,a) values (40,17);
+insert into t (id,a) values (40,18);
+insert into t (id,a) values (40,19);
+insert into t (id,a) values (40,20);
+insert into t (id,a) values (40,21);
+insert into t (id,a) values (40,22);
+insert into t (id,a) values (40,23);
+insert into t (id,a) values (40,24);
+insert into t (id,a) values (40,25);
+insert into t (id,a) values (40,26);
+insert into t (id,a) values (40,27);
+insert into t (id,a) values (40,28);
+insert into t (id,a) values (40,29);
+insert into t (id,a) values (40,30);
+insert into t (id,a) values (40,31);
+insert into t (id,a) values (40,32);
+insert into t (id,a) values (40,33);
+insert into t (id,a) values (40,34);
+insert into t (id,a) values (40,35);
+insert into t (id,a) values (40,36);
+insert into t (id,a) values (40,37);
+insert into t (id,a) values (40,38);
+insert into t (id,a) values (40,39);
+insert into t (id,a) values (40,40);
+insert into t (id,a) values (40,41);
+insert into t (id,a) values (40,42);
+insert into t (id,a) values (40,43);
+insert into t (id,a) values (40,44);
+insert into t (id,a) values (40,45);
+insert into t (id,a) values (40,46);
+insert into t (id,a) values (40,47);
+insert into t (id,a) values (40,48);
+insert into t (id,a) values (40,49);
+insert into t (id,a) values (40,50);
+insert into t (id,a) values (40,51);
+insert into t (id,a) values (40,52);
+insert into t (id,a) values (40,53);
+insert into t (id,a) values (40,54);
+insert into t (id,a) values (40,55);
+insert into t (id,a) values (40,56);
+insert into t (id,a) values (40,57);
+insert into t (id,a) values (40,58);
+insert into t (id,a) values (40,59);
+insert into t (id,a) values (40,60);
+insert into t (id,a) values (40,61);
+insert into t (id,a) values (40,62);
+insert into t (id,a) values (40,63);
+insert into t (id,a) values (40,64);
+insert into t (id,a) values (40,65);
+insert into t (id,a) values (40,66);
+insert into t (id,a) values (40,67);
+insert into t (id,a) values (40,68);
+insert into t (id,a) values (40,69);
+insert into t (id,a) values (40,70);
+insert into t (id,a) values (40,71);
+insert into t (id,a) values (40,72);
+insert into t (id,a) values (40,73);
+insert into t (id,a) values (40,74);
+insert into t (id,a) values (40,75);
+insert into t (id,a) values (40,76);
+insert into t (id,a) values (40,77);
+insert into t (id,a) values (40,78);
+insert into t (id,a) values (40,79);
+insert into t (id,a) values (40,80);
+insert into t (id,a) values (40,81);
+insert into t (id,a) values (40,82);
+insert into t (id,a) values (40,83);
+insert into t (id,a) values (40,84);
+insert into t (id,a) values (40,85);
+insert into t (id,a) values (40,86);
+insert into t (id,a) values (40,87);
+insert into t (id,a) values (40,88);
+insert into t (id,a) values (40,89);
+insert into t (id,a) values (40,90);
+insert into t (id,a) values (40,91);
+insert into t (id,a) values (40,92);
+insert into t (id,a) values (40,93);
+insert into t (id,a) values (40,94);
+insert into t (id,a) values (40,95);
+insert into t (id,a) values (40,96);
+insert into t (id,a) values (40,97);
+insert into t (id,a) values (40,98);
+insert into t (id,a) values (40,99);
+insert into t (id,a) values (41,0);
+insert into t (id,a) values (41,1);
+insert into t (id,a) values (41,2);
+insert into t (id,a) values (41,3);
+insert into t (id,a) values (41,4);
+insert into t (id,a) values (41,5);
+insert into t (id,a) values (41,6);
+insert into t (id,a) values (41,7);
+insert into t (id,a) values (41,8);
+insert into t (id,a) values (41,9);
+insert into t (id,a) values (41,10);
+insert into t (id,a) values (41,11);
+insert into t (id,a) values (41,12);
+insert into t (id,a) values (41,13);
+insert into t (id,a) values (41,14);
+insert into t (id,a) values (41,15);
+insert into t (id,a) values (41,16);
+insert into t (id,a) values (41,17);
+insert into t (id,a) values (41,18);
+insert into t (id,a) values (41,19);
+insert into t (id,a) values (41,20);
+insert into t (id,a) values (41,21);
+insert into t (id,a) values (41,22);
+insert into t (id,a) values (41,23);
+insert into t (id,a) values (41,24);
+insert into t (id,a) values (41,25);
+insert into t (id,a) values (41,26);
+insert into t (id,a) values (41,27);
+insert into t (id,a) values (41,28);
+insert into t (id,a) values (41,29);
+insert into t (id,a) values (41,30);
+insert into t (id,a) values (41,31);
+insert into t (id,a) values (41,32);
+insert into t (id,a) values (41,33);
+insert into t (id,a) values (41,34);
+insert into t (id,a) values (41,35);
+insert into t (id,a) values (41,36);
+insert into t (id,a) values (41,37);
+insert into t (id,a) values (41,38);
+insert into t (id,a) values (41,39);
+insert into t (id,a) values (41,40);
+insert into t (id,a) values (41,41);
+insert into t (id,a) values (41,42);
+insert into t (id,a) values (41,43);
+insert into t (id,a) values (41,44);
+insert into t (id,a) values (41,45);
+insert into t (id,a) values (41,46);
+insert into t (id,a) values (41,47);
+insert into t (id,a) values (41,48);
+insert into t (id,a) values (41,49);
+insert into t (id,a) values (41,50);
+insert into t (id,a) values (41,51);
+insert into t (id,a) values (41,52);
+insert into t (id,a) values (41,53);
+insert into t (id,a) values (41,54);
+insert into t (id,a) values (41,55);
+insert into t (id,a) values (41,56);
+insert into t (id,a) values (41,57);
+insert into t (id,a) values (41,58);
+insert into t (id,a) values (41,59);
+insert into t (id,a) values (41,60);
+insert into t (id,a) values (41,61);
+insert into t (id,a) values (41,62);
+insert into t (id,a) values (41,63);
+insert into t (id,a) values (41,64);
+insert into t (id,a) values (41,65);
+insert into t (id,a) values (41,66);
+insert into t (id,a) values (41,67);
+insert into t (id,a) values (41,68);
+insert into t (id,a) values (41,69);
+insert into t (id,a) values (41,70);
+insert into t (id,a) values (41,71);
+insert into t (id,a) values (41,72);
+insert into t (id,a) values (41,73);
+insert into t (id,a) values (41,74);
+insert into t (id,a) values (41,75);
+insert into t (id,a) values (41,76);
+insert into t (id,a) values (41,77);
+insert into t (id,a) values (41,78);
+insert into t (id,a) values (41,79);
+insert into t (id,a) values (41,80);
+insert into t (id,a) values (41,81);
+insert into t (id,a) values (41,82);
+insert into t (id,a) values (41,83);
+insert into t (id,a) values (41,84);
+insert into t (id,a) values (41,85);
+insert into t (id,a) values (41,86);
+insert into t (id,a) values (41,87);
+insert into t (id,a) values (41,88);
+insert into t (id,a) values (41,89);
+insert into t (id,a) values (41,90);
+insert into t (id,a) values (41,91);
+insert into t (id,a) values (41,92);
+insert into t (id,a) values (41,93);
+insert into t (id,a) values (41,94);
+insert into t (id,a) values (41,95);
+insert into t (id,a) values (41,96);
+insert into t (id,a) values (41,97);
+insert into t (id,a) values (41,98);
+insert into t (id,a) values (41,99);
+insert into t (id,a) values (42,0);
+insert into t (id,a) values (42,1);
+insert into t (id,a) values (42,2);
+insert into t (id,a) values (42,3);
+insert into t (id,a) values (42,4);
+insert into t (id,a) values (42,5);
+insert into t (id,a) values (42,6);
+insert into t (id,a) values (42,7);
+insert into t (id,a) values (42,8);
+insert into t (id,a) values (42,9);
+insert into t (id,a) values (42,10);
+insert into t (id,a) values (42,11);
+insert into t (id,a) values (42,12);
+insert into t (id,a) values (42,13);
+insert into t (id,a) values (42,14);
+insert into t (id,a) values (42,15);
+insert into t (id,a) values (42,16);
+insert into t (id,a) values (42,17);
+insert into t (id,a) values (42,18);
+insert into t (id,a) values (42,19);
+insert into t (id,a) values (42,20);
+insert into t (id,a) values (42,21);
+insert into t (id,a) values (42,22);
+insert into t (id,a) values (42,23);
+insert into t (id,a) values (42,24);
+insert into t (id,a) values (42,25);
+insert into t (id,a) values (42,26);
+insert into t (id,a) values (42,27);
+insert into t (id,a) values (42,28);
+insert into t (id,a) values (42,29);
+insert into t (id,a) values (42,30);
+insert into t (id,a) values (42,31);
+insert into t (id,a) values (42,32);
+insert into t (id,a) values (42,33);
+insert into t (id,a) values (42,34);
+insert into t (id,a) values (42,35);
+insert into t (id,a) values (42,36);
+insert into t (id,a) values (42,37);
+insert into t (id,a) values (42,38);
+insert into t (id,a) values (42,39);
+insert into t (id,a) values (42,40);
+insert into t (id,a) values (42,41);
+insert into t (id,a) values (42,42);
+insert into t (id,a) values (42,43);
+insert into t (id,a) values (42,44);
+insert into t (id,a) values (42,45);
+insert into t (id,a) values (42,46);
+insert into t (id,a) values (42,47);
+insert into t (id,a) values (42,48);
+insert into t (id,a) values (42,49);
+insert into t (id,a) values (42,50);
+insert into t (id,a) values (42,51);
+insert into t (id,a) values (42,52);
+insert into t (id,a) values (42,53);
+insert into t (id,a) values (42,54);
+insert into t (id,a) values (42,55);
+insert into t (id,a) values (42,56);
+insert into t (id,a) values (42,57);
+insert into t (id,a) values (42,58);
+insert into t (id,a) values (42,59);
+insert into t (id,a) values (42,60);
+insert into t (id,a) values (42,61);
+insert into t (id,a) values (42,62);
+insert into t (id,a) values (42,63);
+insert into t (id,a) values (42,64);
+insert into t (id,a) values (42,65);
+insert into t (id,a) values (42,66);
+insert into t (id,a) values (42,67);
+insert into t (id,a) values (42,68);
+insert into t (id,a) values (42,69);
+insert into t (id,a) values (42,70);
+insert into t (id,a) values (42,71);
+insert into t (id,a) values (42,72);
+insert into t (id,a) values (42,73);
+insert into t (id,a) values (42,74);
+insert into t (id,a) values (42,75);
+insert into t (id,a) values (42,76);
+insert into t (id,a) values (42,77);
+insert into t (id,a) values (42,78);
+insert into t (id,a) values (42,79);
+insert into t (id,a) values (42,80);
+insert into t (id,a) values (42,81);
+insert into t (id,a) values (42,82);
+insert into t (id,a) values (42,83);
+insert into t (id,a) values (42,84);
+insert into t (id,a) values (42,85);
+insert into t (id,a) values (42,86);
+insert into t (id,a) values (42,87);
+insert into t (id,a) values (42,88);
+insert into t (id,a) values (42,89);
+insert into t (id,a) values (42,90);
+insert into t (id,a) values (42,91);
+insert into t (id,a) values (42,92);
+insert into t (id,a) values (42,93);
+insert into t (id,a) values (42,94);
+insert into t (id,a) values (42,95);
+insert into t (id,a) values (42,96);
+insert into t (id,a) values (42,97);
+insert into t (id,a) values (42,98);
+insert into t (id,a) values (42,99);
+insert into t (id,a) values (43,0);
+insert into t (id,a) values (43,1);
+insert into t (id,a) values (43,2);
+insert into t (id,a) values (43,3);
+insert into t (id,a) values (43,4);
+insert into t (id,a) values (43,5);
+insert into t (id,a) values (43,6);
+insert into t (id,a) values (43,7);
+insert into t (id,a) values (43,8);
+insert into t (id,a) values (43,9);
+insert into t (id,a) values (43,10);
+insert into t (id,a) values (43,11);
+insert into t (id,a) values (43,12);
+insert into t (id,a) values (43,13);
+insert into t (id,a) values (43,14);
+insert into t (id,a) values (43,15);
+insert into t (id,a) values (43,16);
+insert into t (id,a) values (43,17);
+insert into t (id,a) values (43,18);
+insert into t (id,a) values (43,19);
+insert into t (id,a) values (43,20);
+insert into t (id,a) values (43,21);
+insert into t (id,a) values (43,22);
+insert into t (id,a) values (43,23);
+insert into t (id,a) values (43,24);
+insert into t (id,a) values (43,25);
+insert into t (id,a) values (43,26);
+insert into t (id,a) values (43,27);
+insert into t (id,a) values (43,28);
+insert into t (id,a) values (43,29);
+insert into t (id,a) values (43,30);
+insert into t (id,a) values (43,31);
+insert into t (id,a) values (43,32);
+insert into t (id,a) values (43,33);
+insert into t (id,a) values (43,34);
+insert into t (id,a) values (43,35);
+insert into t (id,a) values (43,36);
+insert into t (id,a) values (43,37);
+insert into t (id,a) values (43,38);
+insert into t (id,a) values (43,39);
+insert into t (id,a) values (43,40);
+insert into t (id,a) values (43,41);
+insert into t (id,a) values (43,42);
+insert into t (id,a) values (43,43);
+insert into t (id,a) values (43,44);
+insert into t (id,a) values (43,45);
+insert into t (id,a) values (43,46);
+insert into t (id,a) values (43,47);
+insert into t (id,a) values (43,48);
+insert into t (id,a) values (43,49);
+insert into t (id,a) values (43,50);
+insert into t (id,a) values (43,51);
+insert into t (id,a) values (43,52);
+insert into t (id,a) values (43,53);
+insert into t (id,a) values (43,54);
+insert into t (id,a) values (43,55);
+insert into t (id,a) values (43,56);
+insert into t (id,a) values (43,57);
+insert into t (id,a) values (43,58);
+insert into t (id,a) values (43,59);
+insert into t (id,a) values (43,60);
+insert into t (id,a) values (43,61);
+insert into t (id,a) values (43,62);
+insert into t (id,a) values (43,63);
+insert into t (id,a) values (43,64);
+insert into t (id,a) values (43,65);
+insert into t (id,a) values (43,66);
+insert into t (id,a) values (43,67);
+insert into t (id,a) values (43,68);
+insert into t (id,a) values (43,69);
+insert into t (id,a) values (43,70);
+insert into t (id,a) values (43,71);
+insert into t (id,a) values (43,72);
+insert into t (id,a) values (43,73);
+insert into t (id,a) values (43,74);
+insert into t (id,a) values (43,75);
+insert into t (id,a) values (43,76);
+insert into t (id,a) values (43,77);
+insert into t (id,a) values (43,78);
+insert into t (id,a) values (43,79);
+insert into t (id,a) values (43,80);
+insert into t (id,a) values (43,81);
+insert into t (id,a) values (43,82);
+insert into t (id,a) values (43,83);
+insert into t (id,a) values (43,84);
+insert into t (id,a) values (43,85);
+insert into t (id,a) values (43,86);
+insert into t (id,a) values (43,87);
+insert into t (id,a) values (43,88);
+insert into t (id,a) values (43,89);
+insert into t (id,a) values (43,90);
+insert into t (id,a) values (43,91);
+insert into t (id,a) values (43,92);
+insert into t (id,a) values (43,93);
+insert into t (id,a) values (43,94);
+insert into t (id,a) values (43,95);
+insert into t (id,a) values (43,96);
+insert into t (id,a) values (43,97);
+insert into t (id,a) values (43,98);
+insert into t (id,a) values (43,99);
+insert into t (id,a) values (44,0);
+insert into t (id,a) values (44,1);
+insert into t (id,a) values (44,2);
+insert into t (id,a) values (44,3);
+insert into t (id,a) values (44,4);
+insert into t (id,a) values (44,5);
+insert into t (id,a) values (44,6);
+insert into t (id,a) values (44,7);
+insert into t (id,a) values (44,8);
+insert into t (id,a) values (44,9);
+insert into t (id,a) values (44,10);
+insert into t (id,a) values (44,11);
+insert into t (id,a) values (44,12);
+insert into t (id,a) values (44,13);
+insert into t (id,a) values (44,14);
+insert into t (id,a) values (44,15);
+insert into t (id,a) values (44,16);
+insert into t (id,a) values (44,17);
+insert into t (id,a) values (44,18);
+insert into t (id,a) values (44,19);
+insert into t (id,a) values (44,20);
+insert into t (id,a) values (44,21);
+insert into t (id,a) values (44,22);
+insert into t (id,a) values (44,23);
+insert into t (id,a) values (44,24);
+insert into t (id,a) values (44,25);
+insert into t (id,a) values (44,26);
+insert into t (id,a) values (44,27);
+insert into t (id,a) values (44,28);
+insert into t (id,a) values (44,29);
+insert into t (id,a) values (44,30);
+insert into t (id,a) values (44,31);
+insert into t (id,a) values (44,32);
+insert into t (id,a) values (44,33);
+insert into t (id,a) values (44,34);
+insert into t (id,a) values (44,35);
+insert into t (id,a) values (44,36);
+insert into t (id,a) values (44,37);
+insert into t (id,a) values (44,38);
+insert into t (id,a) values (44,39);
+insert into t (id,a) values (44,40);
+insert into t (id,a) values (44,41);
+insert into t (id,a) values (44,42);
+insert into t (id,a) values (44,43);
+insert into t (id,a) values (44,44);
+insert into t (id,a) values (44,45);
+insert into t (id,a) values (44,46);
+insert into t (id,a) values (44,47);
+insert into t (id,a) values (44,48);
+insert into t (id,a) values (44,49);
+insert into t (id,a) values (44,50);
+insert into t (id,a) values (44,51);
+insert into t (id,a) values (44,52);
+insert into t (id,a) values (44,53);
+insert into t (id,a) values (44,54);
+insert into t (id,a) values (44,55);
+insert into t (id,a) values (44,56);
+insert into t (id,a) values (44,57);
+insert into t (id,a) values (44,58);
+insert into t (id,a) values (44,59);
+insert into t (id,a) values (44,60);
+insert into t (id,a) values (44,61);
+insert into t (id,a) values (44,62);
+insert into t (id,a) values (44,63);
+insert into t (id,a) values (44,64);
+insert into t (id,a) values (44,65);
+insert into t (id,a) values (44,66);
+insert into t (id,a) values (44,67);
+insert into t (id,a) values (44,68);
+insert into t (id,a) values (44,69);
+insert into t (id,a) values (44,70);
+insert into t (id,a) values (44,71);
+insert into t (id,a) values (44,72);
+insert into t (id,a) values (44,73);
+insert into t (id,a) values (44,74);
+insert into t (id,a) values (44,75);
+insert into t (id,a) values (44,76);
+insert into t (id,a) values (44,77);
+insert into t (id,a) values (44,78);
+insert into t (id,a) values (44,79);
+insert into t (id,a) values (44,80);
+insert into t (id,a) values (44,81);
+insert into t (id,a) values (44,82);
+insert into t (id,a) values (44,83);
+insert into t (id,a) values (44,84);
+insert into t (id,a) values (44,85);
+insert into t (id,a) values (44,86);
+insert into t (id,a) values (44,87);
+insert into t (id,a) values (44,88);
+insert into t (id,a) values (44,89);
+insert into t (id,a) values (44,90);
+insert into t (id,a) values (44,91);
+insert into t (id,a) values (44,92);
+insert into t (id,a) values (44,93);
+insert into t (id,a) values (44,94);
+insert into t (id,a) values (44,95);
+insert into t (id,a) values (44,96);
+insert into t (id,a) values (44,97);
+insert into t (id,a) values (44,98);
+insert into t (id,a) values (44,99);
+insert into t (id,a) values (45,0);
+insert into t (id,a) values (45,1);
+insert into t (id,a) values (45,2);
+insert into t (id,a) values (45,3);
+insert into t (id,a) values (45,4);
+insert into t (id,a) values (45,5);
+insert into t (id,a) values (45,6);
+insert into t (id,a) values (45,7);
+insert into t (id,a) values (45,8);
+insert into t (id,a) values (45,9);
+insert into t (id,a) values (45,10);
+insert into t (id,a) values (45,11);
+insert into t (id,a) values (45,12);
+insert into t (id,a) values (45,13);
+insert into t (id,a) values (45,14);
+insert into t (id,a) values (45,15);
+insert into t (id,a) values (45,16);
+insert into t (id,a) values (45,17);
+insert into t (id,a) values (45,18);
+insert into t (id,a) values (45,19);
+insert into t (id,a) values (45,20);
+insert into t (id,a) values (45,21);
+insert into t (id,a) values (45,22);
+insert into t (id,a) values (45,23);
+insert into t (id,a) values (45,24);
+insert into t (id,a) values (45,25);
+insert into t (id,a) values (45,26);
+insert into t (id,a) values (45,27);
+insert into t (id,a) values (45,28);
+insert into t (id,a) values (45,29);
+insert into t (id,a) values (45,30);
+insert into t (id,a) values (45,31);
+insert into t (id,a) values (45,32);
+insert into t (id,a) values (45,33);
+insert into t (id,a) values (45,34);
+insert into t (id,a) values (45,35);
+insert into t (id,a) values (45,36);
+insert into t (id,a) values (45,37);
+insert into t (id,a) values (45,38);
+insert into t (id,a) values (45,39);
+insert into t (id,a) values (45,40);
+insert into t (id,a) values (45,41);
+insert into t (id,a) values (45,42);
+insert into t (id,a) values (45,43);
+insert into t (id,a) values (45,44);
+insert into t (id,a) values (45,45);
+insert into t (id,a) values (45,46);
+insert into t (id,a) values (45,47);
+insert into t (id,a) values (45,48);
+insert into t (id,a) values (45,49);
+insert into t (id,a) values (45,50);
+insert into t (id,a) values (45,51);
+insert into t (id,a) values (45,52);
+insert into t (id,a) values (45,53);
+insert into t (id,a) values (45,54);
+insert into t (id,a) values (45,55);
+insert into t (id,a) values (45,56);
+insert into t (id,a) values (45,57);
+insert into t (id,a) values (45,58);
+insert into t (id,a) values (45,59);
+insert into t (id,a) values (45,60);
+insert into t (id,a) values (45,61);
+insert into t (id,a) values (45,62);
+insert into t (id,a) values (45,63);
+insert into t (id,a) values (45,64);
+insert into t (id,a) values (45,65);
+insert into t (id,a) values (45,66);
+insert into t (id,a) values (45,67);
+insert into t (id,a) values (45,68);
+insert into t (id,a) values (45,69);
+insert into t (id,a) values (45,70);
+insert into t (id,a) values (45,71);
+insert into t (id,a) values (45,72);
+insert into t (id,a) values (45,73);
+insert into t (id,a) values (45,74);
+insert into t (id,a) values (45,75);
+insert into t (id,a) values (45,76);
+insert into t (id,a) values (45,77);
+insert into t (id,a) values (45,78);
+insert into t (id,a) values (45,79);
+insert into t (id,a) values (45,80);
+insert into t (id,a) values (45,81);
+insert into t (id,a) values (45,82);
+insert into t (id,a) values (45,83);
+insert into t (id,a) values (45,84);
+insert into t (id,a) values (45,85);
+insert into t (id,a) values (45,86);
+insert into t (id,a) values (45,87);
+insert into t (id,a) values (45,88);
+insert into t (id,a) values (45,89);
+insert into t (id,a) values (45,90);
+insert into t (id,a) values (45,91);
+insert into t (id,a) values (45,92);
+insert into t (id,a) values (45,93);
+insert into t (id,a) values (45,94);
+insert into t (id,a) values (45,95);
+insert into t (id,a) values (45,96);
+insert into t (id,a) values (45,97);
+insert into t (id,a) values (45,98);
+insert into t (id,a) values (45,99);
+insert into t (id,a) values (46,0);
+insert into t (id,a) values (46,1);
+insert into t (id,a) values (46,2);
+insert into t (id,a) values (46,3);
+insert into t (id,a) values (46,4);
+insert into t (id,a) values (46,5);
+insert into t (id,a) values (46,6);
+insert into t (id,a) values (46,7);
+insert into t (id,a) values (46,8);
+insert into t (id,a) values (46,9);
+insert into t (id,a) values (46,10);
+insert into t (id,a) values (46,11);
+insert into t (id,a) values (46,12);
+insert into t (id,a) values (46,13);
+insert into t (id,a) values (46,14);
+insert into t (id,a) values (46,15);
+insert into t (id,a) values (46,16);
+insert into t (id,a) values (46,17);
+insert into t (id,a) values (46,18);
+insert into t (id,a) values (46,19);
+insert into t (id,a) values (46,20);
+insert into t (id,a) values (46,21);
+insert into t (id,a) values (46,22);
+insert into t (id,a) values (46,23);
+insert into t (id,a) values (46,24);
+insert into t (id,a) values (46,25);
+insert into t (id,a) values (46,26);
+insert into t (id,a) values (46,27);
+insert into t (id,a) values (46,28);
+insert into t (id,a) values (46,29);
+insert into t (id,a) values (46,30);
+insert into t (id,a) values (46,31);
+insert into t (id,a) values (46,32);
+insert into t (id,a) values (46,33);
+insert into t (id,a) values (46,34);
+insert into t (id,a) values (46,35);
+insert into t (id,a) values (46,36);
+insert into t (id,a) values (46,37);
+insert into t (id,a) values (46,38);
+insert into t (id,a) values (46,39);
+insert into t (id,a) values (46,40);
+insert into t (id,a) values (46,41);
+insert into t (id,a) values (46,42);
+insert into t (id,a) values (46,43);
+insert into t (id,a) values (46,44);
+insert into t (id,a) values (46,45);
+insert into t (id,a) values (46,46);
+insert into t (id,a) values (46,47);
+insert into t (id,a) values (46,48);
+insert into t (id,a) values (46,49);
+insert into t (id,a) values (46,50);
+insert into t (id,a) values (46,51);
+insert into t (id,a) values (46,52);
+insert into t (id,a) values (46,53);
+insert into t (id,a) values (46,54);
+insert into t (id,a) values (46,55);
+insert into t (id,a) values (46,56);
+insert into t (id,a) values (46,57);
+insert into t (id,a) values (46,58);
+insert into t (id,a) values (46,59);
+insert into t (id,a) values (46,60);
+insert into t (id,a) values (46,61);
+insert into t (id,a) values (46,62);
+insert into t (id,a) values (46,63);
+insert into t (id,a) values (46,64);
+insert into t (id,a) values (46,65);
+insert into t (id,a) values (46,66);
+insert into t (id,a) values (46,67);
+insert into t (id,a) values (46,68);
+insert into t (id,a) values (46,69);
+insert into t (id,a) values (46,70);
+insert into t (id,a) values (46,71);
+insert into t (id,a) values (46,72);
+insert into t (id,a) values (46,73);
+insert into t (id,a) values (46,74);
+insert into t (id,a) values (46,75);
+insert into t (id,a) values (46,76);
+insert into t (id,a) values (46,77);
+insert into t (id,a) values (46,78);
+insert into t (id,a) values (46,79);
+insert into t (id,a) values (46,80);
+insert into t (id,a) values (46,81);
+insert into t (id,a) values (46,82);
+insert into t (id,a) values (46,83);
+insert into t (id,a) values (46,84);
+insert into t (id,a) values (46,85);
+insert into t (id,a) values (46,86);
+insert into t (id,a) values (46,87);
+insert into t (id,a) values (46,88);
+insert into t (id,a) values (46,89);
+insert into t (id,a) values (46,90);
+insert into t (id,a) values (46,91);
+insert into t (id,a) values (46,92);
+insert into t (id,a) values (46,93);
+insert into t (id,a) values (46,94);
+insert into t (id,a) values (46,95);
+insert into t (id,a) values (46,96);
+insert into t (id,a) values (46,97);
+insert into t (id,a) values (46,98);
+insert into t (id,a) values (46,99);
+insert into t (id,a) values (47,0);
+insert into t (id,a) values (47,1);
+insert into t (id,a) values (47,2);
+insert into t (id,a) values (47,3);
+insert into t (id,a) values (47,4);
+insert into t (id,a) values (47,5);
+insert into t (id,a) values (47,6);
+insert into t (id,a) values (47,7);
+insert into t (id,a) values (47,8);
+insert into t (id,a) values (47,9);
+insert into t (id,a) values (47,10);
+insert into t (id,a) values (47,11);
+insert into t (id,a) values (47,12);
+insert into t (id,a) values (47,13);
+insert into t (id,a) values (47,14);
+insert into t (id,a) values (47,15);
+insert into t (id,a) values (47,16);
+insert into t (id,a) values (47,17);
+insert into t (id,a) values (47,18);
+insert into t (id,a) values (47,19);
+insert into t (id,a) values (47,20);
+insert into t (id,a) values (47,21);
+insert into t (id,a) values (47,22);
+insert into t (id,a) values (47,23);
+insert into t (id,a) values (47,24);
+insert into t (id,a) values (47,25);
+insert into t (id,a) values (47,26);
+insert into t (id,a) values (47,27);
+insert into t (id,a) values (47,28);
+insert into t (id,a) values (47,29);
+insert into t (id,a) values (47,30);
+insert into t (id,a) values (47,31);
+insert into t (id,a) values (47,32);
+insert into t (id,a) values (47,33);
+insert into t (id,a) values (47,34);
+insert into t (id,a) values (47,35);
+insert into t (id,a) values (47,36);
+insert into t (id,a) values (47,37);
+insert into t (id,a) values (47,38);
+insert into t (id,a) values (47,39);
+insert into t (id,a) values (47,40);
+insert into t (id,a) values (47,41);
+insert into t (id,a) values (47,42);
+insert into t (id,a) values (47,43);
+insert into t (id,a) values (47,44);
+insert into t (id,a) values (47,45);
+insert into t (id,a) values (47,46);
+insert into t (id,a) values (47,47);
+insert into t (id,a) values (47,48);
+insert into t (id,a) values (47,49);
+insert into t (id,a) values (47,50);
+insert into t (id,a) values (47,51);
+insert into t (id,a) values (47,52);
+insert into t (id,a) values (47,53);
+insert into t (id,a) values (47,54);
+insert into t (id,a) values (47,55);
+insert into t (id,a) values (47,56);
+insert into t (id,a) values (47,57);
+insert into t (id,a) values (47,58);
+insert into t (id,a) values (47,59);
+insert into t (id,a) values (47,60);
+insert into t (id,a) values (47,61);
+insert into t (id,a) values (47,62);
+insert into t (id,a) values (47,63);
+insert into t (id,a) values (47,64);
+insert into t (id,a) values (47,65);
+insert into t (id,a) values (47,66);
+insert into t (id,a) values (47,67);
+insert into t (id,a) values (47,68);
+insert into t (id,a) values (47,69);
+insert into t (id,a) values (47,70);
+insert into t (id,a) values (47,71);
+insert into t (id,a) values (47,72);
+insert into t (id,a) values (47,73);
+insert into t (id,a) values (47,74);
+insert into t (id,a) values (47,75);
+insert into t (id,a) values (47,76);
+insert into t (id,a) values (47,77);
+insert into t (id,a) values (47,78);
+insert into t (id,a) values (47,79);
+insert into t (id,a) values (47,80);
+insert into t (id,a) values (47,81);
+insert into t (id,a) values (47,82);
+insert into t (id,a) values (47,83);
+insert into t (id,a) values (47,84);
+insert into t (id,a) values (47,85);
+insert into t (id,a) values (47,86);
+insert into t (id,a) values (47,87);
+insert into t (id,a) values (47,88);
+insert into t (id,a) values (47,89);
+insert into t (id,a) values (47,90);
+insert into t (id,a) values (47,91);
+insert into t (id,a) values (47,92);
+insert into t (id,a) values (47,93);
+insert into t (id,a) values (47,94);
+insert into t (id,a) values (47,95);
+insert into t (id,a) values (47,96);
+insert into t (id,a) values (47,97);
+insert into t (id,a) values (47,98);
+insert into t (id,a) values (47,99);
+insert into t (id,a) values (48,0);
+insert into t (id,a) values (48,1);
+insert into t (id,a) values (48,2);
+insert into t (id,a) values (48,3);
+insert into t (id,a) values (48,4);
+insert into t (id,a) values (48,5);
+insert into t (id,a) values (48,6);
+insert into t (id,a) values (48,7);
+insert into t (id,a) values (48,8);
+insert into t (id,a) values (48,9);
+insert into t (id,a) values (48,10);
+insert into t (id,a) values (48,11);
+insert into t (id,a) values (48,12);
+insert into t (id,a) values (48,13);
+insert into t (id,a) values (48,14);
+insert into t (id,a) values (48,15);
+insert into t (id,a) values (48,16);
+insert into t (id,a) values (48,17);
+insert into t (id,a) values (48,18);
+insert into t (id,a) values (48,19);
+insert into t (id,a) values (48,20);
+insert into t (id,a) values (48,21);
+insert into t (id,a) values (48,22);
+insert into t (id,a) values (48,23);
+insert into t (id,a) values (48,24);
+insert into t (id,a) values (48,25);
+insert into t (id,a) values (48,26);
+insert into t (id,a) values (48,27);
+insert into t (id,a) values (48,28);
+insert into t (id,a) values (48,29);
+insert into t (id,a) values (48,30);
+insert into t (id,a) values (48,31);
+insert into t (id,a) values (48,32);
+insert into t (id,a) values (48,33);
+insert into t (id,a) values (48,34);
+insert into t (id,a) values (48,35);
+insert into t (id,a) values (48,36);
+insert into t (id,a) values (48,37);
+insert into t (id,a) values (48,38);
+insert into t (id,a) values (48,39);
+insert into t (id,a) values (48,40);
+insert into t (id,a) values (48,41);
+insert into t (id,a) values (48,42);
+insert into t (id,a) values (48,43);
+insert into t (id,a) values (48,44);
+insert into t (id,a) values (48,45);
+insert into t (id,a) values (48,46);
+insert into t (id,a) values (48,47);
+insert into t (id,a) values (48,48);
+insert into t (id,a) values (48,49);
+insert into t (id,a) values (48,50);
+insert into t (id,a) values (48,51);
+insert into t (id,a) values (48,52);
+insert into t (id,a) values (48,53);
+insert into t (id,a) values (48,54);
+insert into t (id,a) values (48,55);
+insert into t (id,a) values (48,56);
+insert into t (id,a) values (48,57);
+insert into t (id,a) values (48,58);
+insert into t (id,a) values (48,59);
+insert into t (id,a) values (48,60);
+insert into t (id,a) values (48,61);
+insert into t (id,a) values (48,62);
+insert into t (id,a) values (48,63);
+insert into t (id,a) values (48,64);
+insert into t (id,a) values (48,65);
+insert into t (id,a) values (48,66);
+insert into t (id,a) values (48,67);
+insert into t (id,a) values (48,68);
+insert into t (id,a) values (48,69);
+insert into t (id,a) values (48,70);
+insert into t (id,a) values (48,71);
+insert into t (id,a) values (48,72);
+insert into t (id,a) values (48,73);
+insert into t (id,a) values (48,74);
+insert into t (id,a) values (48,75);
+insert into t (id,a) values (48,76);
+insert into t (id,a) values (48,77);
+insert into t (id,a) values (48,78);
+insert into t (id,a) values (48,79);
+insert into t (id,a) values (48,80);
+insert into t (id,a) values (48,81);
+insert into t (id,a) values (48,82);
+insert into t (id,a) values (48,83);
+insert into t (id,a) values (48,84);
+insert into t (id,a) values (48,85);
+insert into t (id,a) values (48,86);
+insert into t (id,a) values (48,87);
+insert into t (id,a) values (48,88);
+insert into t (id,a) values (48,89);
+insert into t (id,a) values (48,90);
+insert into t (id,a) values (48,91);
+insert into t (id,a) values (48,92);
+insert into t (id,a) values (48,93);
+insert into t (id,a) values (48,94);
+insert into t (id,a) values (48,95);
+insert into t (id,a) values (48,96);
+insert into t (id,a) values (48,97);
+insert into t (id,a) values (48,98);
+insert into t (id,a) values (48,99);
+insert into t (id,a) values (49,0);
+insert into t (id,a) values (49,1);
+insert into t (id,a) values (49,2);
+insert into t (id,a) values (49,3);
+insert into t (id,a) values (49,4);
+insert into t (id,a) values (49,5);
+insert into t (id,a) values (49,6);
+insert into t (id,a) values (49,7);
+insert into t (id,a) values (49,8);
+insert into t (id,a) values (49,9);
+insert into t (id,a) values (49,10);
+insert into t (id,a) values (49,11);
+insert into t (id,a) values (49,12);
+insert into t (id,a) values (49,13);
+insert into t (id,a) values (49,14);
+insert into t (id,a) values (49,15);
+insert into t (id,a) values (49,16);
+insert into t (id,a) values (49,17);
+insert into t (id,a) values (49,18);
+insert into t (id,a) values (49,19);
+insert into t (id,a) values (49,20);
+insert into t (id,a) values (49,21);
+insert into t (id,a) values (49,22);
+insert into t (id,a) values (49,23);
+insert into t (id,a) values (49,24);
+insert into t (id,a) values (49,25);
+insert into t (id,a) values (49,26);
+insert into t (id,a) values (49,27);
+insert into t (id,a) values (49,28);
+insert into t (id,a) values (49,29);
+insert into t (id,a) values (49,30);
+insert into t (id,a) values (49,31);
+insert into t (id,a) values (49,32);
+insert into t (id,a) values (49,33);
+insert into t (id,a) values (49,34);
+insert into t (id,a) values (49,35);
+insert into t (id,a) values (49,36);
+insert into t (id,a) values (49,37);
+insert into t (id,a) values (49,38);
+insert into t (id,a) values (49,39);
+insert into t (id,a) values (49,40);
+insert into t (id,a) values (49,41);
+insert into t (id,a) values (49,42);
+insert into t (id,a) values (49,43);
+insert into t (id,a) values (49,44);
+insert into t (id,a) values (49,45);
+insert into t (id,a) values (49,46);
+insert into t (id,a) values (49,47);
+insert into t (id,a) values (49,48);
+insert into t (id,a) values (49,49);
+insert into t (id,a) values (49,50);
+insert into t (id,a) values (49,51);
+insert into t (id,a) values (49,52);
+insert into t (id,a) values (49,53);
+insert into t (id,a) values (49,54);
+insert into t (id,a) values (49,55);
+insert into t (id,a) values (49,56);
+insert into t (id,a) values (49,57);
+insert into t (id,a) values (49,58);
+insert into t (id,a) values (49,59);
+insert into t (id,a) values (49,60);
+insert into t (id,a) values (49,61);
+insert into t (id,a) values (49,62);
+insert into t (id,a) values (49,63);
+insert into t (id,a) values (49,64);
+insert into t (id,a) values (49,65);
+insert into t (id,a) values (49,66);
+insert into t (id,a) values (49,67);
+insert into t (id,a) values (49,68);
+insert into t (id,a) values (49,69);
+insert into t (id,a) values (49,70);
+insert into t (id,a) values (49,71);
+insert into t (id,a) values (49,72);
+insert into t (id,a) values (49,73);
+insert into t (id,a) values (49,74);
+insert into t (id,a) values (49,75);
+insert into t (id,a) values (49,76);
+insert into t (id,a) values (49,77);
+insert into t (id,a) values (49,78);
+insert into t (id,a) values (49,79);
+insert into t (id,a) values (49,80);
+insert into t (id,a) values (49,81);
+insert into t (id,a) values (49,82);
+insert into t (id,a) values (49,83);
+insert into t (id,a) values (49,84);
+insert into t (id,a) values (49,85);
+insert into t (id,a) values (49,86);
+insert into t (id,a) values (49,87);
+insert into t (id,a) values (49,88);
+insert into t (id,a) values (49,89);
+insert into t (id,a) values (49,90);
+insert into t (id,a) values (49,91);
+insert into t (id,a) values (49,92);
+insert into t (id,a) values (49,93);
+insert into t (id,a) values (49,94);
+insert into t (id,a) values (49,95);
+insert into t (id,a) values (49,96);
+insert into t (id,a) values (49,97);
+insert into t (id,a) values (49,98);
+insert into t (id,a) values (49,99);
+insert into t (id,a) values (50,0);
+insert into t (id,a) values (50,1);
+insert into t (id,a) values (50,2);
+insert into t (id,a) values (50,3);
+insert into t (id,a) values (50,4);
+insert into t (id,a) values (50,5);
+insert into t (id,a) values (50,6);
+insert into t (id,a) values (50,7);
+insert into t (id,a) values (50,8);
+insert into t (id,a) values (50,9);
+insert into t (id,a) values (50,10);
+insert into t (id,a) values (50,11);
+insert into t (id,a) values (50,12);
+insert into t (id,a) values (50,13);
+insert into t (id,a) values (50,14);
+insert into t (id,a) values (50,15);
+insert into t (id,a) values (50,16);
+insert into t (id,a) values (50,17);
+insert into t (id,a) values (50,18);
+insert into t (id,a) values (50,19);
+insert into t (id,a) values (50,20);
+insert into t (id,a) values (50,21);
+insert into t (id,a) values (50,22);
+insert into t (id,a) values (50,23);
+insert into t (id,a) values (50,24);
+insert into t (id,a) values (50,25);
+insert into t (id,a) values (50,26);
+insert into t (id,a) values (50,27);
+insert into t (id,a) values (50,28);
+insert into t (id,a) values (50,29);
+insert into t (id,a) values (50,30);
+insert into t (id,a) values (50,31);
+insert into t (id,a) values (50,32);
+insert into t (id,a) values (50,33);
+insert into t (id,a) values (50,34);
+insert into t (id,a) values (50,35);
+insert into t (id,a) values (50,36);
+insert into t (id,a) values (50,37);
+insert into t (id,a) values (50,38);
+insert into t (id,a) values (50,39);
+insert into t (id,a) values (50,40);
+insert into t (id,a) values (50,41);
+insert into t (id,a) values (50,42);
+insert into t (id,a) values (50,43);
+insert into t (id,a) values (50,44);
+insert into t (id,a) values (50,45);
+insert into t (id,a) values (50,46);
+insert into t (id,a) values (50,47);
+insert into t (id,a) values (50,48);
+insert into t (id,a) values (50,49);
+insert into t (id,a) values (50,50);
+insert into t (id,a) values (50,51);
+insert into t (id,a) values (50,52);
+insert into t (id,a) values (50,53);
+insert into t (id,a) values (50,54);
+insert into t (id,a) values (50,55);
+insert into t (id,a) values (50,56);
+insert into t (id,a) values (50,57);
+insert into t (id,a) values (50,58);
+insert into t (id,a) values (50,59);
+insert into t (id,a) values (50,60);
+insert into t (id,a) values (50,61);
+insert into t (id,a) values (50,62);
+insert into t (id,a) values (50,63);
+insert into t (id,a) values (50,64);
+insert into t (id,a) values (50,65);
+insert into t (id,a) values (50,66);
+insert into t (id,a) values (50,67);
+insert into t (id,a) values (50,68);
+insert into t (id,a) values (50,69);
+insert into t (id,a) values (50,70);
+insert into t (id,a) values (50,71);
+insert into t (id,a) values (50,72);
+insert into t (id,a) values (50,73);
+insert into t (id,a) values (50,74);
+insert into t (id,a) values (50,75);
+insert into t (id,a) values (50,76);
+insert into t (id,a) values (50,77);
+insert into t (id,a) values (50,78);
+insert into t (id,a) values (50,79);
+insert into t (id,a) values (50,80);
+insert into t (id,a) values (50,81);
+insert into t (id,a) values (50,82);
+insert into t (id,a) values (50,83);
+insert into t (id,a) values (50,84);
+insert into t (id,a) values (50,85);
+insert into t (id,a) values (50,86);
+insert into t (id,a) values (50,87);
+insert into t (id,a) values (50,88);
+insert into t (id,a) values (50,89);
+insert into t (id,a) values (50,90);
+insert into t (id,a) values (50,91);
+insert into t (id,a) values (50,92);
+insert into t (id,a) values (50,93);
+insert into t (id,a) values (50,94);
+insert into t (id,a) values (50,95);
+insert into t (id,a) values (50,96);
+insert into t (id,a) values (50,97);
+insert into t (id,a) values (50,98);
+insert into t (id,a) values (50,99);
+insert into t (id,a) values (51,0);
+insert into t (id,a) values (51,1);
+insert into t (id,a) values (51,2);
+insert into t (id,a) values (51,3);
+insert into t (id,a) values (51,4);
+insert into t (id,a) values (51,5);
+insert into t (id,a) values (51,6);
+insert into t (id,a) values (51,7);
+insert into t (id,a) values (51,8);
+insert into t (id,a) values (51,9);
+insert into t (id,a) values (51,10);
+insert into t (id,a) values (51,11);
+insert into t (id,a) values (51,12);
+insert into t (id,a) values (51,13);
+insert into t (id,a) values (51,14);
+insert into t (id,a) values (51,15);
+insert into t (id,a) values (51,16);
+insert into t (id,a) values (51,17);
+insert into t (id,a) values (51,18);
+insert into t (id,a) values (51,19);
+insert into t (id,a) values (51,20);
+insert into t (id,a) values (51,21);
+insert into t (id,a) values (51,22);
+insert into t (id,a) values (51,23);
+insert into t (id,a) values (51,24);
+insert into t (id,a) values (51,25);
+insert into t (id,a) values (51,26);
+insert into t (id,a) values (51,27);
+insert into t (id,a) values (51,28);
+insert into t (id,a) values (51,29);
+insert into t (id,a) values (51,30);
+insert into t (id,a) values (51,31);
+insert into t (id,a) values (51,32);
+insert into t (id,a) values (51,33);
+insert into t (id,a) values (51,34);
+insert into t (id,a) values (51,35);
+insert into t (id,a) values (51,36);
+insert into t (id,a) values (51,37);
+insert into t (id,a) values (51,38);
+insert into t (id,a) values (51,39);
+insert into t (id,a) values (51,40);
+insert into t (id,a) values (51,41);
+insert into t (id,a) values (51,42);
+insert into t (id,a) values (51,43);
+insert into t (id,a) values (51,44);
+insert into t (id,a) values (51,45);
+insert into t (id,a) values (51,46);
+insert into t (id,a) values (51,47);
+insert into t (id,a) values (51,48);
+insert into t (id,a) values (51,49);
+insert into t (id,a) values (51,50);
+insert into t (id,a) values (51,51);
+insert into t (id,a) values (51,52);
+insert into t (id,a) values (51,53);
+insert into t (id,a) values (51,54);
+insert into t (id,a) values (51,55);
+insert into t (id,a) values (51,56);
+insert into t (id,a) values (51,57);
+insert into t (id,a) values (51,58);
+insert into t (id,a) values (51,59);
+insert into t (id,a) values (51,60);
+insert into t (id,a) values (51,61);
+insert into t (id,a) values (51,62);
+insert into t (id,a) values (51,63);
+insert into t (id,a) values (51,64);
+insert into t (id,a) values (51,65);
+insert into t (id,a) values (51,66);
+insert into t (id,a) values (51,67);
+insert into t (id,a) values (51,68);
+insert into t (id,a) values (51,69);
+insert into t (id,a) values (51,70);
+insert into t (id,a) values (51,71);
+insert into t (id,a) values (51,72);
+insert into t (id,a) values (51,73);
+insert into t (id,a) values (51,74);
+insert into t (id,a) values (51,75);
+insert into t (id,a) values (51,76);
+insert into t (id,a) values (51,77);
+insert into t (id,a) values (51,78);
+insert into t (id,a) values (51,79);
+insert into t (id,a) values (51,80);
+insert into t (id,a) values (51,81);
+insert into t (id,a) values (51,82);
+insert into t (id,a) values (51,83);
+insert into t (id,a) values (51,84);
+insert into t (id,a) values (51,85);
+insert into t (id,a) values (51,86);
+insert into t (id,a) values (51,87);
+insert into t (id,a) values (51,88);
+insert into t (id,a) values (51,89);
+insert into t (id,a) values (51,90);
+insert into t (id,a) values (51,91);
+insert into t (id,a) values (51,92);
+insert into t (id,a) values (51,93);
+insert into t (id,a) values (51,94);
+insert into t (id,a) values (51,95);
+insert into t (id,a) values (51,96);
+insert into t (id,a) values (51,97);
+insert into t (id,a) values (51,98);
+insert into t (id,a) values (51,99);
+insert into t (id,a) values (52,0);
+insert into t (id,a) values (52,1);
+insert into t (id,a) values (52,2);
+insert into t (id,a) values (52,3);
+insert into t (id,a) values (52,4);
+insert into t (id,a) values (52,5);
+insert into t (id,a) values (52,6);
+insert into t (id,a) values (52,7);
+insert into t (id,a) values (52,8);
+insert into t (id,a) values (52,9);
+insert into t (id,a) values (52,10);
+insert into t (id,a) values (52,11);
+insert into t (id,a) values (52,12);
+insert into t (id,a) values (52,13);
+insert into t (id,a) values (52,14);
+insert into t (id,a) values (52,15);
+insert into t (id,a) values (52,16);
+insert into t (id,a) values (52,17);
+insert into t (id,a) values (52,18);
+insert into t (id,a) values (52,19);
+insert into t (id,a) values (52,20);
+insert into t (id,a) values (52,21);
+insert into t (id,a) values (52,22);
+insert into t (id,a) values (52,23);
+insert into t (id,a) values (52,24);
+insert into t (id,a) values (52,25);
+insert into t (id,a) values (52,26);
+insert into t (id,a) values (52,27);
+insert into t (id,a) values (52,28);
+insert into t (id,a) values (52,29);
+insert into t (id,a) values (52,30);
+insert into t (id,a) values (52,31);
+insert into t (id,a) values (52,32);
+insert into t (id,a) values (52,33);
+insert into t (id,a) values (52,34);
+insert into t (id,a) values (52,35);
+insert into t (id,a) values (52,36);
+insert into t (id,a) values (52,37);
+insert into t (id,a) values (52,38);
+insert into t (id,a) values (52,39);
+insert into t (id,a) values (52,40);
+insert into t (id,a) values (52,41);
+insert into t (id,a) values (52,42);
+insert into t (id,a) values (52,43);
+insert into t (id,a) values (52,44);
+insert into t (id,a) values (52,45);
+insert into t (id,a) values (52,46);
+insert into t (id,a) values (52,47);
+insert into t (id,a) values (52,48);
+insert into t (id,a) values (52,49);
+insert into t (id,a) values (52,50);
+insert into t (id,a) values (52,51);
+insert into t (id,a) values (52,52);
+insert into t (id,a) values (52,53);
+insert into t (id,a) values (52,54);
+insert into t (id,a) values (52,55);
+insert into t (id,a) values (52,56);
+insert into t (id,a) values (52,57);
+insert into t (id,a) values (52,58);
+insert into t (id,a) values (52,59);
+insert into t (id,a) values (52,60);
+insert into t (id,a) values (52,61);
+insert into t (id,a) values (52,62);
+insert into t (id,a) values (52,63);
+insert into t (id,a) values (52,64);
+insert into t (id,a) values (52,65);
+insert into t (id,a) values (52,66);
+insert into t (id,a) values (52,67);
+insert into t (id,a) values (52,68);
+insert into t (id,a) values (52,69);
+insert into t (id,a) values (52,70);
+insert into t (id,a) values (52,71);
+insert into t (id,a) values (52,72);
+insert into t (id,a) values (52,73);
+insert into t (id,a) values (52,74);
+insert into t (id,a) values (52,75);
+insert into t (id,a) values (52,76);
+insert into t (id,a) values (52,77);
+insert into t (id,a) values (52,78);
+insert into t (id,a) values (52,79);
+insert into t (id,a) values (52,80);
+insert into t (id,a) values (52,81);
+insert into t (id,a) values (52,82);
+insert into t (id,a) values (52,83);
+insert into t (id,a) values (52,84);
+insert into t (id,a) values (52,85);
+insert into t (id,a) values (52,86);
+insert into t (id,a) values (52,87);
+insert into t (id,a) values (52,88);
+insert into t (id,a) values (52,89);
+insert into t (id,a) values (52,90);
+insert into t (id,a) values (52,91);
+insert into t (id,a) values (52,92);
+insert into t (id,a) values (52,93);
+insert into t (id,a) values (52,94);
+insert into t (id,a) values (52,95);
+insert into t (id,a) values (52,96);
+insert into t (id,a) values (52,97);
+insert into t (id,a) values (52,98);
+insert into t (id,a) values (52,99);
+insert into t (id,a) values (53,0);
+insert into t (id,a) values (53,1);
+insert into t (id,a) values (53,2);
+insert into t (id,a) values (53,3);
+insert into t (id,a) values (53,4);
+insert into t (id,a) values (53,5);
+insert into t (id,a) values (53,6);
+insert into t (id,a) values (53,7);
+insert into t (id,a) values (53,8);
+insert into t (id,a) values (53,9);
+insert into t (id,a) values (53,10);
+insert into t (id,a) values (53,11);
+insert into t (id,a) values (53,12);
+insert into t (id,a) values (53,13);
+insert into t (id,a) values (53,14);
+insert into t (id,a) values (53,15);
+insert into t (id,a) values (53,16);
+insert into t (id,a) values (53,17);
+insert into t (id,a) values (53,18);
+insert into t (id,a) values (53,19);
+insert into t (id,a) values (53,20);
+insert into t (id,a) values (53,21);
+insert into t (id,a) values (53,22);
+insert into t (id,a) values (53,23);
+insert into t (id,a) values (53,24);
+insert into t (id,a) values (53,25);
+insert into t (id,a) values (53,26);
+insert into t (id,a) values (53,27);
+insert into t (id,a) values (53,28);
+insert into t (id,a) values (53,29);
+insert into t (id,a) values (53,30);
+insert into t (id,a) values (53,31);
+insert into t (id,a) values (53,32);
+insert into t (id,a) values (53,33);
+insert into t (id,a) values (53,34);
+insert into t (id,a) values (53,35);
+insert into t (id,a) values (53,36);
+insert into t (id,a) values (53,37);
+insert into t (id,a) values (53,38);
+insert into t (id,a) values (53,39);
+insert into t (id,a) values (53,40);
+insert into t (id,a) values (53,41);
+insert into t (id,a) values (53,42);
+insert into t (id,a) values (53,43);
+insert into t (id,a) values (53,44);
+insert into t (id,a) values (53,45);
+insert into t (id,a) values (53,46);
+insert into t (id,a) values (53,47);
+insert into t (id,a) values (53,48);
+insert into t (id,a) values (53,49);
+insert into t (id,a) values (53,50);
+insert into t (id,a) values (53,51);
+insert into t (id,a) values (53,52);
+insert into t (id,a) values (53,53);
+insert into t (id,a) values (53,54);
+insert into t (id,a) values (53,55);
+insert into t (id,a) values (53,56);
+insert into t (id,a) values (53,57);
+insert into t (id,a) values (53,58);
+insert into t (id,a) values (53,59);
+insert into t (id,a) values (53,60);
+insert into t (id,a) values (53,61);
+insert into t (id,a) values (53,62);
+insert into t (id,a) values (53,63);
+insert into t (id,a) values (53,64);
+insert into t (id,a) values (53,65);
+insert into t (id,a) values (53,66);
+insert into t (id,a) values (53,67);
+insert into t (id,a) values (53,68);
+insert into t (id,a) values (53,69);
+insert into t (id,a) values (53,70);
+insert into t (id,a) values (53,71);
+insert into t (id,a) values (53,72);
+insert into t (id,a) values (53,73);
+insert into t (id,a) values (53,74);
+insert into t (id,a) values (53,75);
+insert into t (id,a) values (53,76);
+insert into t (id,a) values (53,77);
+insert into t (id,a) values (53,78);
+insert into t (id,a) values (53,79);
+insert into t (id,a) values (53,80);
+insert into t (id,a) values (53,81);
+insert into t (id,a) values (53,82);
+insert into t (id,a) values (53,83);
+insert into t (id,a) values (53,84);
+insert into t (id,a) values (53,85);
+insert into t (id,a) values (53,86);
+insert into t (id,a) values (53,87);
+insert into t (id,a) values (53,88);
+insert into t (id,a) values (53,89);
+insert into t (id,a) values (53,90);
+insert into t (id,a) values (53,91);
+insert into t (id,a) values (53,92);
+insert into t (id,a) values (53,93);
+insert into t (id,a) values (53,94);
+insert into t (id,a) values (53,95);
+insert into t (id,a) values (53,96);
+insert into t (id,a) values (53,97);
+insert into t (id,a) values (53,98);
+insert into t (id,a) values (53,99);
+insert into t (id,a) values (54,0);
+insert into t (id,a) values (54,1);
+insert into t (id,a) values (54,2);
+insert into t (id,a) values (54,3);
+insert into t (id,a) values (54,4);
+insert into t (id,a) values (54,5);
+insert into t (id,a) values (54,6);
+insert into t (id,a) values (54,7);
+insert into t (id,a) values (54,8);
+insert into t (id,a) values (54,9);
+insert into t (id,a) values (54,10);
+insert into t (id,a) values (54,11);
+insert into t (id,a) values (54,12);
+insert into t (id,a) values (54,13);
+insert into t (id,a) values (54,14);
+insert into t (id,a) values (54,15);
+insert into t (id,a) values (54,16);
+insert into t (id,a) values (54,17);
+insert into t (id,a) values (54,18);
+insert into t (id,a) values (54,19);
+insert into t (id,a) values (54,20);
+insert into t (id,a) values (54,21);
+insert into t (id,a) values (54,22);
+insert into t (id,a) values (54,23);
+insert into t (id,a) values (54,24);
+insert into t (id,a) values (54,25);
+insert into t (id,a) values (54,26);
+insert into t (id,a) values (54,27);
+insert into t (id,a) values (54,28);
+insert into t (id,a) values (54,29);
+insert into t (id,a) values (54,30);
+insert into t (id,a) values (54,31);
+insert into t (id,a) values (54,32);
+insert into t (id,a) values (54,33);
+insert into t (id,a) values (54,34);
+insert into t (id,a) values (54,35);
+insert into t (id,a) values (54,36);
+insert into t (id,a) values (54,37);
+insert into t (id,a) values (54,38);
+insert into t (id,a) values (54,39);
+insert into t (id,a) values (54,40);
+insert into t (id,a) values (54,41);
+insert into t (id,a) values (54,42);
+insert into t (id,a) values (54,43);
+insert into t (id,a) values (54,44);
+insert into t (id,a) values (54,45);
+insert into t (id,a) values (54,46);
+insert into t (id,a) values (54,47);
+insert into t (id,a) values (54,48);
+insert into t (id,a) values (54,49);
+insert into t (id,a) values (54,50);
+insert into t (id,a) values (54,51);
+insert into t (id,a) values (54,52);
+insert into t (id,a) values (54,53);
+insert into t (id,a) values (54,54);
+insert into t (id,a) values (54,55);
+insert into t (id,a) values (54,56);
+insert into t (id,a) values (54,57);
+insert into t (id,a) values (54,58);
+insert into t (id,a) values (54,59);
+insert into t (id,a) values (54,60);
+insert into t (id,a) values (54,61);
+insert into t (id,a) values (54,62);
+insert into t (id,a) values (54,63);
+insert into t (id,a) values (54,64);
+insert into t (id,a) values (54,65);
+insert into t (id,a) values (54,66);
+insert into t (id,a) values (54,67);
+insert into t (id,a) values (54,68);
+insert into t (id,a) values (54,69);
+insert into t (id,a) values (54,70);
+insert into t (id,a) values (54,71);
+insert into t (id,a) values (54,72);
+insert into t (id,a) values (54,73);
+insert into t (id,a) values (54,74);
+insert into t (id,a) values (54,75);
+insert into t (id,a) values (54,76);
+insert into t (id,a) values (54,77);
+insert into t (id,a) values (54,78);
+insert into t (id,a) values (54,79);
+insert into t (id,a) values (54,80);
+insert into t (id,a) values (54,81);
+insert into t (id,a) values (54,82);
+insert into t (id,a) values (54,83);
+insert into t (id,a) values (54,84);
+insert into t (id,a) values (54,85);
+insert into t (id,a) values (54,86);
+insert into t (id,a) values (54,87);
+insert into t (id,a) values (54,88);
+insert into t (id,a) values (54,89);
+insert into t (id,a) values (54,90);
+insert into t (id,a) values (54,91);
+insert into t (id,a) values (54,92);
+insert into t (id,a) values (54,93);
+insert into t (id,a) values (54,94);
+insert into t (id,a) values (54,95);
+insert into t (id,a) values (54,96);
+insert into t (id,a) values (54,97);
+insert into t (id,a) values (54,98);
+insert into t (id,a) values (54,99);
+insert into t (id,a) values (55,0);
+insert into t (id,a) values (55,1);
+insert into t (id,a) values (55,2);
+insert into t (id,a) values (55,3);
+insert into t (id,a) values (55,4);
+insert into t (id,a) values (55,5);
+insert into t (id,a) values (55,6);
+insert into t (id,a) values (55,7);
+insert into t (id,a) values (55,8);
+insert into t (id,a) values (55,9);
+insert into t (id,a) values (55,10);
+insert into t (id,a) values (55,11);
+insert into t (id,a) values (55,12);
+insert into t (id,a) values (55,13);
+insert into t (id,a) values (55,14);
+insert into t (id,a) values (55,15);
+insert into t (id,a) values (55,16);
+insert into t (id,a) values (55,17);
+insert into t (id,a) values (55,18);
+insert into t (id,a) values (55,19);
+insert into t (id,a) values (55,20);
+insert into t (id,a) values (55,21);
+insert into t (id,a) values (55,22);
+insert into t (id,a) values (55,23);
+insert into t (id,a) values (55,24);
+insert into t (id,a) values (55,25);
+insert into t (id,a) values (55,26);
+insert into t (id,a) values (55,27);
+insert into t (id,a) values (55,28);
+insert into t (id,a) values (55,29);
+insert into t (id,a) values (55,30);
+insert into t (id,a) values (55,31);
+insert into t (id,a) values (55,32);
+insert into t (id,a) values (55,33);
+insert into t (id,a) values (55,34);
+insert into t (id,a) values (55,35);
+insert into t (id,a) values (55,36);
+insert into t (id,a) values (55,37);
+insert into t (id,a) values (55,38);
+insert into t (id,a) values (55,39);
+insert into t (id,a) values (55,40);
+insert into t (id,a) values (55,41);
+insert into t (id,a) values (55,42);
+insert into t (id,a) values (55,43);
+insert into t (id,a) values (55,44);
+insert into t (id,a) values (55,45);
+insert into t (id,a) values (55,46);
+insert into t (id,a) values (55,47);
+insert into t (id,a) values (55,48);
+insert into t (id,a) values (55,49);
+insert into t (id,a) values (55,50);
+insert into t (id,a) values (55,51);
+insert into t (id,a) values (55,52);
+insert into t (id,a) values (55,53);
+insert into t (id,a) values (55,54);
+insert into t (id,a) values (55,55);
+insert into t (id,a) values (55,56);
+insert into t (id,a) values (55,57);
+insert into t (id,a) values (55,58);
+insert into t (id,a) values (55,59);
+insert into t (id,a) values (55,60);
+insert into t (id,a) values (55,61);
+insert into t (id,a) values (55,62);
+insert into t (id,a) values (55,63);
+insert into t (id,a) values (55,64);
+insert into t (id,a) values (55,65);
+insert into t (id,a) values (55,66);
+insert into t (id,a) values (55,67);
+insert into t (id,a) values (55,68);
+insert into t (id,a) values (55,69);
+insert into t (id,a) values (55,70);
+insert into t (id,a) values (55,71);
+insert into t (id,a) values (55,72);
+insert into t (id,a) values (55,73);
+insert into t (id,a) values (55,74);
+insert into t (id,a) values (55,75);
+insert into t (id,a) values (55,76);
+insert into t (id,a) values (55,77);
+insert into t (id,a) values (55,78);
+insert into t (id,a) values (55,79);
+insert into t (id,a) values (55,80);
+insert into t (id,a) values (55,81);
+insert into t (id,a) values (55,82);
+insert into t (id,a) values (55,83);
+insert into t (id,a) values (55,84);
+insert into t (id,a) values (55,85);
+insert into t (id,a) values (55,86);
+insert into t (id,a) values (55,87);
+insert into t (id,a) values (55,88);
+insert into t (id,a) values (55,89);
+insert into t (id,a) values (55,90);
+insert into t (id,a) values (55,91);
+insert into t (id,a) values (55,92);
+insert into t (id,a) values (55,93);
+insert into t (id,a) values (55,94);
+insert into t (id,a) values (55,95);
+insert into t (id,a) values (55,96);
+insert into t (id,a) values (55,97);
+insert into t (id,a) values (55,98);
+insert into t (id,a) values (55,99);
+insert into t (id,a) values (56,0);
+insert into t (id,a) values (56,1);
+insert into t (id,a) values (56,2);
+insert into t (id,a) values (56,3);
+insert into t (id,a) values (56,4);
+insert into t (id,a) values (56,5);
+insert into t (id,a) values (56,6);
+insert into t (id,a) values (56,7);
+insert into t (id,a) values (56,8);
+insert into t (id,a) values (56,9);
+insert into t (id,a) values (56,10);
+insert into t (id,a) values (56,11);
+insert into t (id,a) values (56,12);
+insert into t (id,a) values (56,13);
+insert into t (id,a) values (56,14);
+insert into t (id,a) values (56,15);
+insert into t (id,a) values (56,16);
+insert into t (id,a) values (56,17);
+insert into t (id,a) values (56,18);
+insert into t (id,a) values (56,19);
+insert into t (id,a) values (56,20);
+insert into t (id,a) values (56,21);
+insert into t (id,a) values (56,22);
+insert into t (id,a) values (56,23);
+insert into t (id,a) values (56,24);
+insert into t (id,a) values (56,25);
+insert into t (id,a) values (56,26);
+insert into t (id,a) values (56,27);
+insert into t (id,a) values (56,28);
+insert into t (id,a) values (56,29);
+insert into t (id,a) values (56,30);
+insert into t (id,a) values (56,31);
+insert into t (id,a) values (56,32);
+insert into t (id,a) values (56,33);
+insert into t (id,a) values (56,34);
+insert into t (id,a) values (56,35);
+insert into t (id,a) values (56,36);
+insert into t (id,a) values (56,37);
+insert into t (id,a) values (56,38);
+insert into t (id,a) values (56,39);
+insert into t (id,a) values (56,40);
+insert into t (id,a) values (56,41);
+insert into t (id,a) values (56,42);
+insert into t (id,a) values (56,43);
+insert into t (id,a) values (56,44);
+insert into t (id,a) values (56,45);
+insert into t (id,a) values (56,46);
+insert into t (id,a) values (56,47);
+insert into t (id,a) values (56,48);
+insert into t (id,a) values (56,49);
+insert into t (id,a) values (56,50);
+insert into t (id,a) values (56,51);
+insert into t (id,a) values (56,52);
+insert into t (id,a) values (56,53);
+insert into t (id,a) values (56,54);
+insert into t (id,a) values (56,55);
+insert into t (id,a) values (56,56);
+insert into t (id,a) values (56,57);
+insert into t (id,a) values (56,58);
+insert into t (id,a) values (56,59);
+insert into t (id,a) values (56,60);
+insert into t (id,a) values (56,61);
+insert into t (id,a) values (56,62);
+insert into t (id,a) values (56,63);
+insert into t (id,a) values (56,64);
+insert into t (id,a) values (56,65);
+insert into t (id,a) values (56,66);
+insert into t (id,a) values (56,67);
+insert into t (id,a) values (56,68);
+insert into t (id,a) values (56,69);
+insert into t (id,a) values (56,70);
+insert into t (id,a) values (56,71);
+insert into t (id,a) values (56,72);
+insert into t (id,a) values (56,73);
+insert into t (id,a) values (56,74);
+insert into t (id,a) values (56,75);
+insert into t (id,a) values (56,76);
+insert into t (id,a) values (56,77);
+insert into t (id,a) values (56,78);
+insert into t (id,a) values (56,79);
+insert into t (id,a) values (56,80);
+insert into t (id,a) values (56,81);
+insert into t (id,a) values (56,82);
+insert into t (id,a) values (56,83);
+insert into t (id,a) values (56,84);
+insert into t (id,a) values (56,85);
+insert into t (id,a) values (56,86);
+insert into t (id,a) values (56,87);
+insert into t (id,a) values (56,88);
+insert into t (id,a) values (56,89);
+insert into t (id,a) values (56,90);
+insert into t (id,a) values (56,91);
+insert into t (id,a) values (56,92);
+insert into t (id,a) values (56,93);
+insert into t (id,a) values (56,94);
+insert into t (id,a) values (56,95);
+insert into t (id,a) values (56,96);
+insert into t (id,a) values (56,97);
+insert into t (id,a) values (56,98);
+insert into t (id,a) values (56,99);
+insert into t (id,a) values (57,0);
+insert into t (id,a) values (57,1);
+insert into t (id,a) values (57,2);
+insert into t (id,a) values (57,3);
+insert into t (id,a) values (57,4);
+insert into t (id,a) values (57,5);
+insert into t (id,a) values (57,6);
+insert into t (id,a) values (57,7);
+insert into t (id,a) values (57,8);
+insert into t (id,a) values (57,9);
+insert into t (id,a) values (57,10);
+insert into t (id,a) values (57,11);
+insert into t (id,a) values (57,12);
+insert into t (id,a) values (57,13);
+insert into t (id,a) values (57,14);
+insert into t (id,a) values (57,15);
+insert into t (id,a) values (57,16);
+insert into t (id,a) values (57,17);
+insert into t (id,a) values (57,18);
+insert into t (id,a) values (57,19);
+insert into t (id,a) values (57,20);
+insert into t (id,a) values (57,21);
+insert into t (id,a) values (57,22);
+insert into t (id,a) values (57,23);
+insert into t (id,a) values (57,24);
+insert into t (id,a) values (57,25);
+insert into t (id,a) values (57,26);
+insert into t (id,a) values (57,27);
+insert into t (id,a) values (57,28);
+insert into t (id,a) values (57,29);
+insert into t (id,a) values (57,30);
+insert into t (id,a) values (57,31);
+insert into t (id,a) values (57,32);
+insert into t (id,a) values (57,33);
+insert into t (id,a) values (57,34);
+insert into t (id,a) values (57,35);
+insert into t (id,a) values (57,36);
+insert into t (id,a) values (57,37);
+insert into t (id,a) values (57,38);
+insert into t (id,a) values (57,39);
+insert into t (id,a) values (57,40);
+insert into t (id,a) values (57,41);
+insert into t (id,a) values (57,42);
+insert into t (id,a) values (57,43);
+insert into t (id,a) values (57,44);
+insert into t (id,a) values (57,45);
+insert into t (id,a) values (57,46);
+insert into t (id,a) values (57,47);
+insert into t (id,a) values (57,48);
+insert into t (id,a) values (57,49);
+insert into t (id,a) values (57,50);
+insert into t (id,a) values (57,51);
+insert into t (id,a) values (57,52);
+insert into t (id,a) values (57,53);
+insert into t (id,a) values (57,54);
+insert into t (id,a) values (57,55);
+insert into t (id,a) values (57,56);
+insert into t (id,a) values (57,57);
+insert into t (id,a) values (57,58);
+insert into t (id,a) values (57,59);
+insert into t (id,a) values (57,60);
+insert into t (id,a) values (57,61);
+insert into t (id,a) values (57,62);
+insert into t (id,a) values (57,63);
+insert into t (id,a) values (57,64);
+insert into t (id,a) values (57,65);
+insert into t (id,a) values (57,66);
+insert into t (id,a) values (57,67);
+insert into t (id,a) values (57,68);
+insert into t (id,a) values (57,69);
+insert into t (id,a) values (57,70);
+insert into t (id,a) values (57,71);
+insert into t (id,a) values (57,72);
+insert into t (id,a) values (57,73);
+insert into t (id,a) values (57,74);
+insert into t (id,a) values (57,75);
+insert into t (id,a) values (57,76);
+insert into t (id,a) values (57,77);
+insert into t (id,a) values (57,78);
+insert into t (id,a) values (57,79);
+insert into t (id,a) values (57,80);
+insert into t (id,a) values (57,81);
+insert into t (id,a) values (57,82);
+insert into t (id,a) values (57,83);
+insert into t (id,a) values (57,84);
+insert into t (id,a) values (57,85);
+insert into t (id,a) values (57,86);
+insert into t (id,a) values (57,87);
+insert into t (id,a) values (57,88);
+insert into t (id,a) values (57,89);
+insert into t (id,a) values (57,90);
+insert into t (id,a) values (57,91);
+insert into t (id,a) values (57,92);
+insert into t (id,a) values (57,93);
+insert into t (id,a) values (57,94);
+insert into t (id,a) values (57,95);
+insert into t (id,a) values (57,96);
+insert into t (id,a) values (57,97);
+insert into t (id,a) values (57,98);
+insert into t (id,a) values (57,99);
+insert into t (id,a) values (58,0);
+insert into t (id,a) values (58,1);
+insert into t (id,a) values (58,2);
+insert into t (id,a) values (58,3);
+insert into t (id,a) values (58,4);
+insert into t (id,a) values (58,5);
+insert into t (id,a) values (58,6);
+insert into t (id,a) values (58,7);
+insert into t (id,a) values (58,8);
+insert into t (id,a) values (58,9);
+insert into t (id,a) values (58,10);
+insert into t (id,a) values (58,11);
+insert into t (id,a) values (58,12);
+insert into t (id,a) values (58,13);
+insert into t (id,a) values (58,14);
+insert into t (id,a) values (58,15);
+insert into t (id,a) values (58,16);
+insert into t (id,a) values (58,17);
+insert into t (id,a) values (58,18);
+insert into t (id,a) values (58,19);
+insert into t (id,a) values (58,20);
+insert into t (id,a) values (58,21);
+insert into t (id,a) values (58,22);
+insert into t (id,a) values (58,23);
+insert into t (id,a) values (58,24);
+insert into t (id,a) values (58,25);
+insert into t (id,a) values (58,26);
+insert into t (id,a) values (58,27);
+insert into t (id,a) values (58,28);
+insert into t (id,a) values (58,29);
+insert into t (id,a) values (58,30);
+insert into t (id,a) values (58,31);
+insert into t (id,a) values (58,32);
+insert into t (id,a) values (58,33);
+insert into t (id,a) values (58,34);
+insert into t (id,a) values (58,35);
+insert into t (id,a) values (58,36);
+insert into t (id,a) values (58,37);
+insert into t (id,a) values (58,38);
+insert into t (id,a) values (58,39);
+insert into t (id,a) values (58,40);
+insert into t (id,a) values (58,41);
+insert into t (id,a) values (58,42);
+insert into t (id,a) values (58,43);
+insert into t (id,a) values (58,44);
+insert into t (id,a) values (58,45);
+insert into t (id,a) values (58,46);
+insert into t (id,a) values (58,47);
+insert into t (id,a) values (58,48);
+insert into t (id,a) values (58,49);
+insert into t (id,a) values (58,50);
+insert into t (id,a) values (58,51);
+insert into t (id,a) values (58,52);
+insert into t (id,a) values (58,53);
+insert into t (id,a) values (58,54);
+insert into t (id,a) values (58,55);
+insert into t (id,a) values (58,56);
+insert into t (id,a) values (58,57);
+insert into t (id,a) values (58,58);
+insert into t (id,a) values (58,59);
+insert into t (id,a) values (58,60);
+insert into t (id,a) values (58,61);
+insert into t (id,a) values (58,62);
+insert into t (id,a) values (58,63);
+insert into t (id,a) values (58,64);
+insert into t (id,a) values (58,65);
+insert into t (id,a) values (58,66);
+insert into t (id,a) values (58,67);
+insert into t (id,a) values (58,68);
+insert into t (id,a) values (58,69);
+insert into t (id,a) values (58,70);
+insert into t (id,a) values (58,71);
+insert into t (id,a) values (58,72);
+insert into t (id,a) values (58,73);
+insert into t (id,a) values (58,74);
+insert into t (id,a) values (58,75);
+insert into t (id,a) values (58,76);
+insert into t (id,a) values (58,77);
+insert into t (id,a) values (58,78);
+insert into t (id,a) values (58,79);
+insert into t (id,a) values (58,80);
+insert into t (id,a) values (58,81);
+insert into t (id,a) values (58,82);
+insert into t (id,a) values (58,83);
+insert into t (id,a) values (58,84);
+insert into t (id,a) values (58,85);
+insert into t (id,a) values (58,86);
+insert into t (id,a) values (58,87);
+insert into t (id,a) values (58,88);
+insert into t (id,a) values (58,89);
+insert into t (id,a) values (58,90);
+insert into t (id,a) values (58,91);
+insert into t (id,a) values (58,92);
+insert into t (id,a) values (58,93);
+insert into t (id,a) values (58,94);
+insert into t (id,a) values (58,95);
+insert into t (id,a) values (58,96);
+insert into t (id,a) values (58,97);
+insert into t (id,a) values (58,98);
+insert into t (id,a) values (58,99);
+insert into t (id,a) values (59,0);
+insert into t (id,a) values (59,1);
+insert into t (id,a) values (59,2);
+insert into t (id,a) values (59,3);
+insert into t (id,a) values (59,4);
+insert into t (id,a) values (59,5);
+insert into t (id,a) values (59,6);
+insert into t (id,a) values (59,7);
+insert into t (id,a) values (59,8);
+insert into t (id,a) values (59,9);
+insert into t (id,a) values (59,10);
+insert into t (id,a) values (59,11);
+insert into t (id,a) values (59,12);
+insert into t (id,a) values (59,13);
+insert into t (id,a) values (59,14);
+insert into t (id,a) values (59,15);
+insert into t (id,a) values (59,16);
+insert into t (id,a) values (59,17);
+insert into t (id,a) values (59,18);
+insert into t (id,a) values (59,19);
+insert into t (id,a) values (59,20);
+insert into t (id,a) values (59,21);
+insert into t (id,a) values (59,22);
+insert into t (id,a) values (59,23);
+insert into t (id,a) values (59,24);
+insert into t (id,a) values (59,25);
+insert into t (id,a) values (59,26);
+insert into t (id,a) values (59,27);
+insert into t (id,a) values (59,28);
+insert into t (id,a) values (59,29);
+insert into t (id,a) values (59,30);
+insert into t (id,a) values (59,31);
+insert into t (id,a) values (59,32);
+insert into t (id,a) values (59,33);
+insert into t (id,a) values (59,34);
+insert into t (id,a) values (59,35);
+insert into t (id,a) values (59,36);
+insert into t (id,a) values (59,37);
+insert into t (id,a) values (59,38);
+insert into t (id,a) values (59,39);
+insert into t (id,a) values (59,40);
+insert into t (id,a) values (59,41);
+insert into t (id,a) values (59,42);
+insert into t (id,a) values (59,43);
+insert into t (id,a) values (59,44);
+insert into t (id,a) values (59,45);
+insert into t (id,a) values (59,46);
+insert into t (id,a) values (59,47);
+insert into t (id,a) values (59,48);
+insert into t (id,a) values (59,49);
+insert into t (id,a) values (59,50);
+insert into t (id,a) values (59,51);
+insert into t (id,a) values (59,52);
+insert into t (id,a) values (59,53);
+insert into t (id,a) values (59,54);
+insert into t (id,a) values (59,55);
+insert into t (id,a) values (59,56);
+insert into t (id,a) values (59,57);
+insert into t (id,a) values (59,58);
+insert into t (id,a) values (59,59);
+insert into t (id,a) values (59,60);
+insert into t (id,a) values (59,61);
+insert into t (id,a) values (59,62);
+insert into t (id,a) values (59,63);
+insert into t (id,a) values (59,64);
+insert into t (id,a) values (59,65);
+insert into t (id,a) values (59,66);
+insert into t (id,a) values (59,67);
+insert into t (id,a) values (59,68);
+insert into t (id,a) values (59,69);
+insert into t (id,a) values (59,70);
+insert into t (id,a) values (59,71);
+insert into t (id,a) values (59,72);
+insert into t (id,a) values (59,73);
+insert into t (id,a) values (59,74);
+insert into t (id,a) values (59,75);
+insert into t (id,a) values (59,76);
+insert into t (id,a) values (59,77);
+insert into t (id,a) values (59,78);
+insert into t (id,a) values (59,79);
+insert into t (id,a) values (59,80);
+insert into t (id,a) values (59,81);
+insert into t (id,a) values (59,82);
+insert into t (id,a) values (59,83);
+insert into t (id,a) values (59,84);
+insert into t (id,a) values (59,85);
+insert into t (id,a) values (59,86);
+insert into t (id,a) values (59,87);
+insert into t (id,a) values (59,88);
+insert into t (id,a) values (59,89);
+insert into t (id,a) values (59,90);
+insert into t (id,a) values (59,91);
+insert into t (id,a) values (59,92);
+insert into t (id,a) values (59,93);
+insert into t (id,a) values (59,94);
+insert into t (id,a) values (59,95);
+insert into t (id,a) values (59,96);
+insert into t (id,a) values (59,97);
+insert into t (id,a) values (59,98);
+insert into t (id,a) values (59,99);
+insert into t (id,a) values (60,0);
+insert into t (id,a) values (60,1);
+insert into t (id,a) values (60,2);
+insert into t (id,a) values (60,3);
+insert into t (id,a) values (60,4);
+insert into t (id,a) values (60,5);
+insert into t (id,a) values (60,6);
+insert into t (id,a) values (60,7);
+insert into t (id,a) values (60,8);
+insert into t (id,a) values (60,9);
+insert into t (id,a) values (60,10);
+insert into t (id,a) values (60,11);
+insert into t (id,a) values (60,12);
+insert into t (id,a) values (60,13);
+insert into t (id,a) values (60,14);
+insert into t (id,a) values (60,15);
+insert into t (id,a) values (60,16);
+insert into t (id,a) values (60,17);
+insert into t (id,a) values (60,18);
+insert into t (id,a) values (60,19);
+insert into t (id,a) values (60,20);
+insert into t (id,a) values (60,21);
+insert into t (id,a) values (60,22);
+insert into t (id,a) values (60,23);
+insert into t (id,a) values (60,24);
+insert into t (id,a) values (60,25);
+insert into t (id,a) values (60,26);
+insert into t (id,a) values (60,27);
+insert into t (id,a) values (60,28);
+insert into t (id,a) values (60,29);
+insert into t (id,a) values (60,30);
+insert into t (id,a) values (60,31);
+insert into t (id,a) values (60,32);
+insert into t (id,a) values (60,33);
+insert into t (id,a) values (60,34);
+insert into t (id,a) values (60,35);
+insert into t (id,a) values (60,36);
+insert into t (id,a) values (60,37);
+insert into t (id,a) values (60,38);
+insert into t (id,a) values (60,39);
+insert into t (id,a) values (60,40);
+insert into t (id,a) values (60,41);
+insert into t (id,a) values (60,42);
+insert into t (id,a) values (60,43);
+insert into t (id,a) values (60,44);
+insert into t (id,a) values (60,45);
+insert into t (id,a) values (60,46);
+insert into t (id,a) values (60,47);
+insert into t (id,a) values (60,48);
+insert into t (id,a) values (60,49);
+insert into t (id,a) values (60,50);
+insert into t (id,a) values (60,51);
+insert into t (id,a) values (60,52);
+insert into t (id,a) values (60,53);
+insert into t (id,a) values (60,54);
+insert into t (id,a) values (60,55);
+insert into t (id,a) values (60,56);
+insert into t (id,a) values (60,57);
+insert into t (id,a) values (60,58);
+insert into t (id,a) values (60,59);
+insert into t (id,a) values (60,60);
+insert into t (id,a) values (60,61);
+insert into t (id,a) values (60,62);
+insert into t (id,a) values (60,63);
+insert into t (id,a) values (60,64);
+insert into t (id,a) values (60,65);
+insert into t (id,a) values (60,66);
+insert into t (id,a) values (60,67);
+insert into t (id,a) values (60,68);
+insert into t (id,a) values (60,69);
+insert into t (id,a) values (60,70);
+insert into t (id,a) values (60,71);
+insert into t (id,a) values (60,72);
+insert into t (id,a) values (60,73);
+insert into t (id,a) values (60,74);
+insert into t (id,a) values (60,75);
+insert into t (id,a) values (60,76);
+insert into t (id,a) values (60,77);
+insert into t (id,a) values (60,78);
+insert into t (id,a) values (60,79);
+insert into t (id,a) values (60,80);
+insert into t (id,a) values (60,81);
+insert into t (id,a) values (60,82);
+insert into t (id,a) values (60,83);
+insert into t (id,a) values (60,84);
+insert into t (id,a) values (60,85);
+insert into t (id,a) values (60,86);
+insert into t (id,a) values (60,87);
+insert into t (id,a) values (60,88);
+insert into t (id,a) values (60,89);
+insert into t (id,a) values (60,90);
+insert into t (id,a) values (60,91);
+insert into t (id,a) values (60,92);
+insert into t (id,a) values (60,93);
+insert into t (id,a) values (60,94);
+insert into t (id,a) values (60,95);
+insert into t (id,a) values (60,96);
+insert into t (id,a) values (60,97);
+insert into t (id,a) values (60,98);
+insert into t (id,a) values (60,99);
+insert into t (id,a) values (61,0);
+insert into t (id,a) values (61,1);
+insert into t (id,a) values (61,2);
+insert into t (id,a) values (61,3);
+insert into t (id,a) values (61,4);
+insert into t (id,a) values (61,5);
+insert into t (id,a) values (61,6);
+insert into t (id,a) values (61,7);
+insert into t (id,a) values (61,8);
+insert into t (id,a) values (61,9);
+insert into t (id,a) values (61,10);
+insert into t (id,a) values (61,11);
+insert into t (id,a) values (61,12);
+insert into t (id,a) values (61,13);
+insert into t (id,a) values (61,14);
+insert into t (id,a) values (61,15);
+insert into t (id,a) values (61,16);
+insert into t (id,a) values (61,17);
+insert into t (id,a) values (61,18);
+insert into t (id,a) values (61,19);
+insert into t (id,a) values (61,20);
+insert into t (id,a) values (61,21);
+insert into t (id,a) values (61,22);
+insert into t (id,a) values (61,23);
+insert into t (id,a) values (61,24);
+insert into t (id,a) values (61,25);
+insert into t (id,a) values (61,26);
+insert into t (id,a) values (61,27);
+insert into t (id,a) values (61,28);
+insert into t (id,a) values (61,29);
+insert into t (id,a) values (61,30);
+insert into t (id,a) values (61,31);
+insert into t (id,a) values (61,32);
+insert into t (id,a) values (61,33);
+insert into t (id,a) values (61,34);
+insert into t (id,a) values (61,35);
+insert into t (id,a) values (61,36);
+insert into t (id,a) values (61,37);
+insert into t (id,a) values (61,38);
+insert into t (id,a) values (61,39);
+insert into t (id,a) values (61,40);
+insert into t (id,a) values (61,41);
+insert into t (id,a) values (61,42);
+insert into t (id,a) values (61,43);
+insert into t (id,a) values (61,44);
+insert into t (id,a) values (61,45);
+insert into t (id,a) values (61,46);
+insert into t (id,a) values (61,47);
+insert into t (id,a) values (61,48);
+insert into t (id,a) values (61,49);
+insert into t (id,a) values (61,50);
+insert into t (id,a) values (61,51);
+insert into t (id,a) values (61,52);
+insert into t (id,a) values (61,53);
+insert into t (id,a) values (61,54);
+insert into t (id,a) values (61,55);
+insert into t (id,a) values (61,56);
+insert into t (id,a) values (61,57);
+insert into t (id,a) values (61,58);
+insert into t (id,a) values (61,59);
+insert into t (id,a) values (61,60);
+insert into t (id,a) values (61,61);
+insert into t (id,a) values (61,62);
+insert into t (id,a) values (61,63);
+insert into t (id,a) values (61,64);
+insert into t (id,a) values (61,65);
+insert into t (id,a) values (61,66);
+insert into t (id,a) values (61,67);
+insert into t (id,a) values (61,68);
+insert into t (id,a) values (61,69);
+insert into t (id,a) values (61,70);
+insert into t (id,a) values (61,71);
+insert into t (id,a) values (61,72);
+insert into t (id,a) values (61,73);
+insert into t (id,a) values (61,74);
+insert into t (id,a) values (61,75);
+insert into t (id,a) values (61,76);
+insert into t (id,a) values (61,77);
+insert into t (id,a) values (61,78);
+insert into t (id,a) values (61,79);
+insert into t (id,a) values (61,80);
+insert into t (id,a) values (61,81);
+insert into t (id,a) values (61,82);
+insert into t (id,a) values (61,83);
+insert into t (id,a) values (61,84);
+insert into t (id,a) values (61,85);
+insert into t (id,a) values (61,86);
+insert into t (id,a) values (61,87);
+insert into t (id,a) values (61,88);
+insert into t (id,a) values (61,89);
+insert into t (id,a) values (61,90);
+insert into t (id,a) values (61,91);
+insert into t (id,a) values (61,92);
+insert into t (id,a) values (61,93);
+insert into t (id,a) values (61,94);
+insert into t (id,a) values (61,95);
+insert into t (id,a) values (61,96);
+insert into t (id,a) values (61,97);
+insert into t (id,a) values (61,98);
+insert into t (id,a) values (61,99);
+insert into t (id,a) values (62,0);
+insert into t (id,a) values (62,1);
+insert into t (id,a) values (62,2);
+insert into t (id,a) values (62,3);
+insert into t (id,a) values (62,4);
+insert into t (id,a) values (62,5);
+insert into t (id,a) values (62,6);
+insert into t (id,a) values (62,7);
+insert into t (id,a) values (62,8);
+insert into t (id,a) values (62,9);
+insert into t (id,a) values (62,10);
+insert into t (id,a) values (62,11);
+insert into t (id,a) values (62,12);
+insert into t (id,a) values (62,13);
+insert into t (id,a) values (62,14);
+insert into t (id,a) values (62,15);
+insert into t (id,a) values (62,16);
+insert into t (id,a) values (62,17);
+insert into t (id,a) values (62,18);
+insert into t (id,a) values (62,19);
+insert into t (id,a) values (62,20);
+insert into t (id,a) values (62,21);
+insert into t (id,a) values (62,22);
+insert into t (id,a) values (62,23);
+insert into t (id,a) values (62,24);
+insert into t (id,a) values (62,25);
+insert into t (id,a) values (62,26);
+insert into t (id,a) values (62,27);
+insert into t (id,a) values (62,28);
+insert into t (id,a) values (62,29);
+insert into t (id,a) values (62,30);
+insert into t (id,a) values (62,31);
+insert into t (id,a) values (62,32);
+insert into t (id,a) values (62,33);
+insert into t (id,a) values (62,34);
+insert into t (id,a) values (62,35);
+insert into t (id,a) values (62,36);
+insert into t (id,a) values (62,37);
+insert into t (id,a) values (62,38);
+insert into t (id,a) values (62,39);
+insert into t (id,a) values (62,40);
+insert into t (id,a) values (62,41);
+insert into t (id,a) values (62,42);
+insert into t (id,a) values (62,43);
+insert into t (id,a) values (62,44);
+insert into t (id,a) values (62,45);
+insert into t (id,a) values (62,46);
+insert into t (id,a) values (62,47);
+insert into t (id,a) values (62,48);
+insert into t (id,a) values (62,49);
+insert into t (id,a) values (62,50);
+insert into t (id,a) values (62,51);
+insert into t (id,a) values (62,52);
+insert into t (id,a) values (62,53);
+insert into t (id,a) values (62,54);
+insert into t (id,a) values (62,55);
+insert into t (id,a) values (62,56);
+insert into t (id,a) values (62,57);
+insert into t (id,a) values (62,58);
+insert into t (id,a) values (62,59);
+insert into t (id,a) values (62,60);
+insert into t (id,a) values (62,61);
+insert into t (id,a) values (62,62);
+insert into t (id,a) values (62,63);
+insert into t (id,a) values (62,64);
+insert into t (id,a) values (62,65);
+insert into t (id,a) values (62,66);
+insert into t (id,a) values (62,67);
+insert into t (id,a) values (62,68);
+insert into t (id,a) values (62,69);
+insert into t (id,a) values (62,70);
+insert into t (id,a) values (62,71);
+insert into t (id,a) values (62,72);
+insert into t (id,a) values (62,73);
+insert into t (id,a) values (62,74);
+insert into t (id,a) values (62,75);
+insert into t (id,a) values (62,76);
+insert into t (id,a) values (62,77);
+insert into t (id,a) values (62,78);
+insert into t (id,a) values (62,79);
+insert into t (id,a) values (62,80);
+insert into t (id,a) values (62,81);
+insert into t (id,a) values (62,82);
+insert into t (id,a) values (62,83);
+insert into t (id,a) values (62,84);
+insert into t (id,a) values (62,85);
+insert into t (id,a) values (62,86);
+insert into t (id,a) values (62,87);
+insert into t (id,a) values (62,88);
+insert into t (id,a) values (62,89);
+insert into t (id,a) values (62,90);
+insert into t (id,a) values (62,91);
+insert into t (id,a) values (62,92);
+insert into t (id,a) values (62,93);
+insert into t (id,a) values (62,94);
+insert into t (id,a) values (62,95);
+insert into t (id,a) values (62,96);
+insert into t (id,a) values (62,97);
+insert into t (id,a) values (62,98);
+insert into t (id,a) values (62,99);
+insert into t (id,a) values (63,0);
+insert into t (id,a) values (63,1);
+insert into t (id,a) values (63,2);
+insert into t (id,a) values (63,3);
+insert into t (id,a) values (63,4);
+insert into t (id,a) values (63,5);
+insert into t (id,a) values (63,6);
+insert into t (id,a) values (63,7);
+insert into t (id,a) values (63,8);
+insert into t (id,a) values (63,9);
+insert into t (id,a) values (63,10);
+insert into t (id,a) values (63,11);
+insert into t (id,a) values (63,12);
+insert into t (id,a) values (63,13);
+insert into t (id,a) values (63,14);
+insert into t (id,a) values (63,15);
+insert into t (id,a) values (63,16);
+insert into t (id,a) values (63,17);
+insert into t (id,a) values (63,18);
+insert into t (id,a) values (63,19);
+insert into t (id,a) values (63,20);
+insert into t (id,a) values (63,21);
+insert into t (id,a) values (63,22);
+insert into t (id,a) values (63,23);
+insert into t (id,a) values (63,24);
+insert into t (id,a) values (63,25);
+insert into t (id,a) values (63,26);
+insert into t (id,a) values (63,27);
+insert into t (id,a) values (63,28);
+insert into t (id,a) values (63,29);
+insert into t (id,a) values (63,30);
+insert into t (id,a) values (63,31);
+insert into t (id,a) values (63,32);
+insert into t (id,a) values (63,33);
+insert into t (id,a) values (63,34);
+insert into t (id,a) values (63,35);
+insert into t (id,a) values (63,36);
+insert into t (id,a) values (63,37);
+insert into t (id,a) values (63,38);
+insert into t (id,a) values (63,39);
+insert into t (id,a) values (63,40);
+insert into t (id,a) values (63,41);
+insert into t (id,a) values (63,42);
+insert into t (id,a) values (63,43);
+insert into t (id,a) values (63,44);
+insert into t (id,a) values (63,45);
+insert into t (id,a) values (63,46);
+insert into t (id,a) values (63,47);
+insert into t (id,a) values (63,48);
+insert into t (id,a) values (63,49);
+insert into t (id,a) values (63,50);
+insert into t (id,a) values (63,51);
+insert into t (id,a) values (63,52);
+insert into t (id,a) values (63,53);
+insert into t (id,a) values (63,54);
+insert into t (id,a) values (63,55);
+insert into t (id,a) values (63,56);
+insert into t (id,a) values (63,57);
+insert into t (id,a) values (63,58);
+insert into t (id,a) values (63,59);
+insert into t (id,a) values (63,60);
+insert into t (id,a) values (63,61);
+insert into t (id,a) values (63,62);
+insert into t (id,a) values (63,63);
+insert into t (id,a) values (63,64);
+insert into t (id,a) values (63,65);
+insert into t (id,a) values (63,66);
+insert into t (id,a) values (63,67);
+insert into t (id,a) values (63,68);
+insert into t (id,a) values (63,69);
+insert into t (id,a) values (63,70);
+insert into t (id,a) values (63,71);
+insert into t (id,a) values (63,72);
+insert into t (id,a) values (63,73);
+insert into t (id,a) values (63,74);
+insert into t (id,a) values (63,75);
+insert into t (id,a) values (63,76);
+insert into t (id,a) values (63,77);
+insert into t (id,a) values (63,78);
+insert into t (id,a) values (63,79);
+insert into t (id,a) values (63,80);
+insert into t (id,a) values (63,81);
+insert into t (id,a) values (63,82);
+insert into t (id,a) values (63,83);
+insert into t (id,a) values (63,84);
+insert into t (id,a) values (63,85);
+insert into t (id,a) values (63,86);
+insert into t (id,a) values (63,87);
+insert into t (id,a) values (63,88);
+insert into t (id,a) values (63,89);
+insert into t (id,a) values (63,90);
+insert into t (id,a) values (63,91);
+insert into t (id,a) values (63,92);
+insert into t (id,a) values (63,93);
+insert into t (id,a) values (63,94);
+insert into t (id,a) values (63,95);
+insert into t (id,a) values (63,96);
+insert into t (id,a) values (63,97);
+insert into t (id,a) values (63,98);
+insert into t (id,a) values (63,99);
+insert into t (id,a) values (64,0);
+insert into t (id,a) values (64,1);
+insert into t (id,a) values (64,2);
+insert into t (id,a) values (64,3);
+insert into t (id,a) values (64,4);
+insert into t (id,a) values (64,5);
+insert into t (id,a) values (64,6);
+insert into t (id,a) values (64,7);
+insert into t (id,a) values (64,8);
+insert into t (id,a) values (64,9);
+insert into t (id,a) values (64,10);
+insert into t (id,a) values (64,11);
+insert into t (id,a) values (64,12);
+insert into t (id,a) values (64,13);
+insert into t (id,a) values (64,14);
+insert into t (id,a) values (64,15);
+insert into t (id,a) values (64,16);
+insert into t (id,a) values (64,17);
+insert into t (id,a) values (64,18);
+insert into t (id,a) values (64,19);
+insert into t (id,a) values (64,20);
+insert into t (id,a) values (64,21);
+insert into t (id,a) values (64,22);
+insert into t (id,a) values (64,23);
+insert into t (id,a) values (64,24);
+insert into t (id,a) values (64,25);
+insert into t (id,a) values (64,26);
+insert into t (id,a) values (64,27);
+insert into t (id,a) values (64,28);
+insert into t (id,a) values (64,29);
+insert into t (id,a) values (64,30);
+insert into t (id,a) values (64,31);
+insert into t (id,a) values (64,32);
+insert into t (id,a) values (64,33);
+insert into t (id,a) values (64,34);
+insert into t (id,a) values (64,35);
+insert into t (id,a) values (64,36);
+insert into t (id,a) values (64,37);
+insert into t (id,a) values (64,38);
+insert into t (id,a) values (64,39);
+insert into t (id,a) values (64,40);
+insert into t (id,a) values (64,41);
+insert into t (id,a) values (64,42);
+insert into t (id,a) values (64,43);
+insert into t (id,a) values (64,44);
+insert into t (id,a) values (64,45);
+insert into t (id,a) values (64,46);
+insert into t (id,a) values (64,47);
+insert into t (id,a) values (64,48);
+insert into t (id,a) values (64,49);
+insert into t (id,a) values (64,50);
+insert into t (id,a) values (64,51);
+insert into t (id,a) values (64,52);
+insert into t (id,a) values (64,53);
+insert into t (id,a) values (64,54);
+insert into t (id,a) values (64,55);
+insert into t (id,a) values (64,56);
+insert into t (id,a) values (64,57);
+insert into t (id,a) values (64,58);
+insert into t (id,a) values (64,59);
+insert into t (id,a) values (64,60);
+insert into t (id,a) values (64,61);
+insert into t (id,a) values (64,62);
+insert into t (id,a) values (64,63);
+insert into t (id,a) values (64,64);
+insert into t (id,a) values (64,65);
+insert into t (id,a) values (64,66);
+insert into t (id,a) values (64,67);
+insert into t (id,a) values (64,68);
+insert into t (id,a) values (64,69);
+insert into t (id,a) values (64,70);
+insert into t (id,a) values (64,71);
+insert into t (id,a) values (64,72);
+insert into t (id,a) values (64,73);
+insert into t (id,a) values (64,74);
+insert into t (id,a) values (64,75);
+insert into t (id,a) values (64,76);
+insert into t (id,a) values (64,77);
+insert into t (id,a) values (64,78);
+insert into t (id,a) values (64,79);
+insert into t (id,a) values (64,80);
+insert into t (id,a) values (64,81);
+insert into t (id,a) values (64,82);
+insert into t (id,a) values (64,83);
+insert into t (id,a) values (64,84);
+insert into t (id,a) values (64,85);
+insert into t (id,a) values (64,86);
+insert into t (id,a) values (64,87);
+insert into t (id,a) values (64,88);
+insert into t (id,a) values (64,89);
+insert into t (id,a) values (64,90);
+insert into t (id,a) values (64,91);
+insert into t (id,a) values (64,92);
+insert into t (id,a) values (64,93);
+insert into t (id,a) values (64,94);
+insert into t (id,a) values (64,95);
+insert into t (id,a) values (64,96);
+insert into t (id,a) values (64,97);
+insert into t (id,a) values (64,98);
+insert into t (id,a) values (64,99);
+insert into t (id,a) values (65,0);
+insert into t (id,a) values (65,1);
+insert into t (id,a) values (65,2);
+insert into t (id,a) values (65,3);
+insert into t (id,a) values (65,4);
+insert into t (id,a) values (65,5);
+insert into t (id,a) values (65,6);
+insert into t (id,a) values (65,7);
+insert into t (id,a) values (65,8);
+insert into t (id,a) values (65,9);
+insert into t (id,a) values (65,10);
+insert into t (id,a) values (65,11);
+insert into t (id,a) values (65,12);
+insert into t (id,a) values (65,13);
+insert into t (id,a) values (65,14);
+insert into t (id,a) values (65,15);
+insert into t (id,a) values (65,16);
+insert into t (id,a) values (65,17);
+insert into t (id,a) values (65,18);
+insert into t (id,a) values (65,19);
+insert into t (id,a) values (65,20);
+insert into t (id,a) values (65,21);
+insert into t (id,a) values (65,22);
+insert into t (id,a) values (65,23);
+insert into t (id,a) values (65,24);
+insert into t (id,a) values (65,25);
+insert into t (id,a) values (65,26);
+insert into t (id,a) values (65,27);
+insert into t (id,a) values (65,28);
+insert into t (id,a) values (65,29);
+insert into t (id,a) values (65,30);
+insert into t (id,a) values (65,31);
+insert into t (id,a) values (65,32);
+insert into t (id,a) values (65,33);
+insert into t (id,a) values (65,34);
+insert into t (id,a) values (65,35);
+insert into t (id,a) values (65,36);
+insert into t (id,a) values (65,37);
+insert into t (id,a) values (65,38);
+insert into t (id,a) values (65,39);
+insert into t (id,a) values (65,40);
+insert into t (id,a) values (65,41);
+insert into t (id,a) values (65,42);
+insert into t (id,a) values (65,43);
+insert into t (id,a) values (65,44);
+insert into t (id,a) values (65,45);
+insert into t (id,a) values (65,46);
+insert into t (id,a) values (65,47);
+insert into t (id,a) values (65,48);
+insert into t (id,a) values (65,49);
+insert into t (id,a) values (65,50);
+insert into t (id,a) values (65,51);
+insert into t (id,a) values (65,52);
+insert into t (id,a) values (65,53);
+insert into t (id,a) values (65,54);
+insert into t (id,a) values (65,55);
+insert into t (id,a) values (65,56);
+insert into t (id,a) values (65,57);
+insert into t (id,a) values (65,58);
+insert into t (id,a) values (65,59);
+insert into t (id,a) values (65,60);
+insert into t (id,a) values (65,61);
+insert into t (id,a) values (65,62);
+insert into t (id,a) values (65,63);
+insert into t (id,a) values (65,64);
+insert into t (id,a) values (65,65);
+insert into t (id,a) values (65,66);
+insert into t (id,a) values (65,67);
+insert into t (id,a) values (65,68);
+insert into t (id,a) values (65,69);
+insert into t (id,a) values (65,70);
+insert into t (id,a) values (65,71);
+insert into t (id,a) values (65,72);
+insert into t (id,a) values (65,73);
+insert into t (id,a) values (65,74);
+insert into t (id,a) values (65,75);
+insert into t (id,a) values (65,76);
+insert into t (id,a) values (65,77);
+insert into t (id,a) values (65,78);
+insert into t (id,a) values (65,79);
+insert into t (id,a) values (65,80);
+insert into t (id,a) values (65,81);
+insert into t (id,a) values (65,82);
+insert into t (id,a) values (65,83);
+insert into t (id,a) values (65,84);
+insert into t (id,a) values (65,85);
+insert into t (id,a) values (65,86);
+insert into t (id,a) values (65,87);
+insert into t (id,a) values (65,88);
+insert into t (id,a) values (65,89);
+insert into t (id,a) values (65,90);
+insert into t (id,a) values (65,91);
+insert into t (id,a) values (65,92);
+insert into t (id,a) values (65,93);
+insert into t (id,a) values (65,94);
+insert into t (id,a) values (65,95);
+insert into t (id,a) values (65,96);
+insert into t (id,a) values (65,97);
+insert into t (id,a) values (65,98);
+insert into t (id,a) values (65,99);
+insert into t (id,a) values (66,0);
+insert into t (id,a) values (66,1);
+insert into t (id,a) values (66,2);
+insert into t (id,a) values (66,3);
+insert into t (id,a) values (66,4);
+insert into t (id,a) values (66,5);
+insert into t (id,a) values (66,6);
+insert into t (id,a) values (66,7);
+insert into t (id,a) values (66,8);
+insert into t (id,a) values (66,9);
+insert into t (id,a) values (66,10);
+insert into t (id,a) values (66,11);
+insert into t (id,a) values (66,12);
+insert into t (id,a) values (66,13);
+insert into t (id,a) values (66,14);
+insert into t (id,a) values (66,15);
+insert into t (id,a) values (66,16);
+insert into t (id,a) values (66,17);
+insert into t (id,a) values (66,18);
+insert into t (id,a) values (66,19);
+insert into t (id,a) values (66,20);
+insert into t (id,a) values (66,21);
+insert into t (id,a) values (66,22);
+insert into t (id,a) values (66,23);
+insert into t (id,a) values (66,24);
+insert into t (id,a) values (66,25);
+insert into t (id,a) values (66,26);
+insert into t (id,a) values (66,27);
+insert into t (id,a) values (66,28);
+insert into t (id,a) values (66,29);
+insert into t (id,a) values (66,30);
+insert into t (id,a) values (66,31);
+insert into t (id,a) values (66,32);
+insert into t (id,a) values (66,33);
+insert into t (id,a) values (66,34);
+insert into t (id,a) values (66,35);
+insert into t (id,a) values (66,36);
+insert into t (id,a) values (66,37);
+insert into t (id,a) values (66,38);
+insert into t (id,a) values (66,39);
+insert into t (id,a) values (66,40);
+insert into t (id,a) values (66,41);
+insert into t (id,a) values (66,42);
+insert into t (id,a) values (66,43);
+insert into t (id,a) values (66,44);
+insert into t (id,a) values (66,45);
+insert into t (id,a) values (66,46);
+insert into t (id,a) values (66,47);
+insert into t (id,a) values (66,48);
+insert into t (id,a) values (66,49);
+insert into t (id,a) values (66,50);
+insert into t (id,a) values (66,51);
+insert into t (id,a) values (66,52);
+insert into t (id,a) values (66,53);
+insert into t (id,a) values (66,54);
+insert into t (id,a) values (66,55);
+insert into t (id,a) values (66,56);
+insert into t (id,a) values (66,57);
+insert into t (id,a) values (66,58);
+insert into t (id,a) values (66,59);
+insert into t (id,a) values (66,60);
+insert into t (id,a) values (66,61);
+insert into t (id,a) values (66,62);
+insert into t (id,a) values (66,63);
+insert into t (id,a) values (66,64);
+insert into t (id,a) values (66,65);
+insert into t (id,a) values (66,66);
+insert into t (id,a) values (66,67);
+insert into t (id,a) values (66,68);
+insert into t (id,a) values (66,69);
+insert into t (id,a) values (66,70);
+insert into t (id,a) values (66,71);
+insert into t (id,a) values (66,72);
+insert into t (id,a) values (66,73);
+insert into t (id,a) values (66,74);
+insert into t (id,a) values (66,75);
+insert into t (id,a) values (66,76);
+insert into t (id,a) values (66,77);
+insert into t (id,a) values (66,78);
+insert into t (id,a) values (66,79);
+insert into t (id,a) values (66,80);
+insert into t (id,a) values (66,81);
+insert into t (id,a) values (66,82);
+insert into t (id,a) values (66,83);
+insert into t (id,a) values (66,84);
+insert into t (id,a) values (66,85);
+insert into t (id,a) values (66,86);
+insert into t (id,a) values (66,87);
+insert into t (id,a) values (66,88);
+insert into t (id,a) values (66,89);
+insert into t (id,a) values (66,90);
+insert into t (id,a) values (66,91);
+insert into t (id,a) values (66,92);
+insert into t (id,a) values (66,93);
+insert into t (id,a) values (66,94);
+insert into t (id,a) values (66,95);
+insert into t (id,a) values (66,96);
+insert into t (id,a) values (66,97);
+insert into t (id,a) values (66,98);
+insert into t (id,a) values (66,99);
+insert into t (id,a) values (67,0);
+insert into t (id,a) values (67,1);
+insert into t (id,a) values (67,2);
+insert into t (id,a) values (67,3);
+insert into t (id,a) values (67,4);
+insert into t (id,a) values (67,5);
+insert into t (id,a) values (67,6);
+insert into t (id,a) values (67,7);
+insert into t (id,a) values (67,8);
+insert into t (id,a) values (67,9);
+insert into t (id,a) values (67,10);
+insert into t (id,a) values (67,11);
+insert into t (id,a) values (67,12);
+insert into t (id,a) values (67,13);
+insert into t (id,a) values (67,14);
+insert into t (id,a) values (67,15);
+insert into t (id,a) values (67,16);
+insert into t (id,a) values (67,17);
+insert into t (id,a) values (67,18);
+insert into t (id,a) values (67,19);
+insert into t (id,a) values (67,20);
+insert into t (id,a) values (67,21);
+insert into t (id,a) values (67,22);
+insert into t (id,a) values (67,23);
+insert into t (id,a) values (67,24);
+insert into t (id,a) values (67,25);
+insert into t (id,a) values (67,26);
+insert into t (id,a) values (67,27);
+insert into t (id,a) values (67,28);
+insert into t (id,a) values (67,29);
+insert into t (id,a) values (67,30);
+insert into t (id,a) values (67,31);
+insert into t (id,a) values (67,32);
+insert into t (id,a) values (67,33);
+insert into t (id,a) values (67,34);
+insert into t (id,a) values (67,35);
+insert into t (id,a) values (67,36);
+insert into t (id,a) values (67,37);
+insert into t (id,a) values (67,38);
+insert into t (id,a) values (67,39);
+insert into t (id,a) values (67,40);
+insert into t (id,a) values (67,41);
+insert into t (id,a) values (67,42);
+insert into t (id,a) values (67,43);
+insert into t (id,a) values (67,44);
+insert into t (id,a) values (67,45);
+insert into t (id,a) values (67,46);
+insert into t (id,a) values (67,47);
+insert into t (id,a) values (67,48);
+insert into t (id,a) values (67,49);
+insert into t (id,a) values (67,50);
+insert into t (id,a) values (67,51);
+insert into t (id,a) values (67,52);
+insert into t (id,a) values (67,53);
+insert into t (id,a) values (67,54);
+insert into t (id,a) values (67,55);
+insert into t (id,a) values (67,56);
+insert into t (id,a) values (67,57);
+insert into t (id,a) values (67,58);
+insert into t (id,a) values (67,59);
+insert into t (id,a) values (67,60);
+insert into t (id,a) values (67,61);
+insert into t (id,a) values (67,62);
+insert into t (id,a) values (67,63);
+insert into t (id,a) values (67,64);
+insert into t (id,a) values (67,65);
+insert into t (id,a) values (67,66);
+insert into t (id,a) values (67,67);
+insert into t (id,a) values (67,68);
+insert into t (id,a) values (67,69);
+insert into t (id,a) values (67,70);
+insert into t (id,a) values (67,71);
+insert into t (id,a) values (67,72);
+insert into t (id,a) values (67,73);
+insert into t (id,a) values (67,74);
+insert into t (id,a) values (67,75);
+insert into t (id,a) values (67,76);
+insert into t (id,a) values (67,77);
+insert into t (id,a) values (67,78);
+insert into t (id,a) values (67,79);
+insert into t (id,a) values (67,80);
+insert into t (id,a) values (67,81);
+insert into t (id,a) values (67,82);
+insert into t (id,a) values (67,83);
+insert into t (id,a) values (67,84);
+insert into t (id,a) values (67,85);
+insert into t (id,a) values (67,86);
+insert into t (id,a) values (67,87);
+insert into t (id,a) values (67,88);
+insert into t (id,a) values (67,89);
+insert into t (id,a) values (67,90);
+insert into t (id,a) values (67,91);
+insert into t (id,a) values (67,92);
+insert into t (id,a) values (67,93);
+insert into t (id,a) values (67,94);
+insert into t (id,a) values (67,95);
+insert into t (id,a) values (67,96);
+insert into t (id,a) values (67,97);
+insert into t (id,a) values (67,98);
+insert into t (id,a) values (67,99);
+insert into t (id,a) values (68,0);
+insert into t (id,a) values (68,1);
+insert into t (id,a) values (68,2);
+insert into t (id,a) values (68,3);
+insert into t (id,a) values (68,4);
+insert into t (id,a) values (68,5);
+insert into t (id,a) values (68,6);
+insert into t (id,a) values (68,7);
+insert into t (id,a) values (68,8);
+insert into t (id,a) values (68,9);
+insert into t (id,a) values (68,10);
+insert into t (id,a) values (68,11);
+insert into t (id,a) values (68,12);
+insert into t (id,a) values (68,13);
+insert into t (id,a) values (68,14);
+insert into t (id,a) values (68,15);
+insert into t (id,a) values (68,16);
+insert into t (id,a) values (68,17);
+insert into t (id,a) values (68,18);
+insert into t (id,a) values (68,19);
+insert into t (id,a) values (68,20);
+insert into t (id,a) values (68,21);
+insert into t (id,a) values (68,22);
+insert into t (id,a) values (68,23);
+insert into t (id,a) values (68,24);
+insert into t (id,a) values (68,25);
+insert into t (id,a) values (68,26);
+insert into t (id,a) values (68,27);
+insert into t (id,a) values (68,28);
+insert into t (id,a) values (68,29);
+insert into t (id,a) values (68,30);
+insert into t (id,a) values (68,31);
+insert into t (id,a) values (68,32);
+insert into t (id,a) values (68,33);
+insert into t (id,a) values (68,34);
+insert into t (id,a) values (68,35);
+insert into t (id,a) values (68,36);
+insert into t (id,a) values (68,37);
+insert into t (id,a) values (68,38);
+insert into t (id,a) values (68,39);
+insert into t (id,a) values (68,40);
+insert into t (id,a) values (68,41);
+insert into t (id,a) values (68,42);
+insert into t (id,a) values (68,43);
+insert into t (id,a) values (68,44);
+insert into t (id,a) values (68,45);
+insert into t (id,a) values (68,46);
+insert into t (id,a) values (68,47);
+insert into t (id,a) values (68,48);
+insert into t (id,a) values (68,49);
+insert into t (id,a) values (68,50);
+insert into t (id,a) values (68,51);
+insert into t (id,a) values (68,52);
+insert into t (id,a) values (68,53);
+insert into t (id,a) values (68,54);
+insert into t (id,a) values (68,55);
+insert into t (id,a) values (68,56);
+insert into t (id,a) values (68,57);
+insert into t (id,a) values (68,58);
+insert into t (id,a) values (68,59);
+insert into t (id,a) values (68,60);
+insert into t (id,a) values (68,61);
+insert into t (id,a) values (68,62);
+insert into t (id,a) values (68,63);
+insert into t (id,a) values (68,64);
+insert into t (id,a) values (68,65);
+insert into t (id,a) values (68,66);
+insert into t (id,a) values (68,67);
+insert into t (id,a) values (68,68);
+insert into t (id,a) values (68,69);
+insert into t (id,a) values (68,70);
+insert into t (id,a) values (68,71);
+insert into t (id,a) values (68,72);
+insert into t (id,a) values (68,73);
+insert into t (id,a) values (68,74);
+insert into t (id,a) values (68,75);
+insert into t (id,a) values (68,76);
+insert into t (id,a) values (68,77);
+insert into t (id,a) values (68,78);
+insert into t (id,a) values (68,79);
+insert into t (id,a) values (68,80);
+insert into t (id,a) values (68,81);
+insert into t (id,a) values (68,82);
+insert into t (id,a) values (68,83);
+insert into t (id,a) values (68,84);
+insert into t (id,a) values (68,85);
+insert into t (id,a) values (68,86);
+insert into t (id,a) values (68,87);
+insert into t (id,a) values (68,88);
+insert into t (id,a) values (68,89);
+insert into t (id,a) values (68,90);
+insert into t (id,a) values (68,91);
+insert into t (id,a) values (68,92);
+insert into t (id,a) values (68,93);
+insert into t (id,a) values (68,94);
+insert into t (id,a) values (68,95);
+insert into t (id,a) values (68,96);
+insert into t (id,a) values (68,97);
+insert into t (id,a) values (68,98);
+insert into t (id,a) values (68,99);
+insert into t (id,a) values (69,0);
+insert into t (id,a) values (69,1);
+insert into t (id,a) values (69,2);
+insert into t (id,a) values (69,3);
+insert into t (id,a) values (69,4);
+insert into t (id,a) values (69,5);
+insert into t (id,a) values (69,6);
+insert into t (id,a) values (69,7);
+insert into t (id,a) values (69,8);
+insert into t (id,a) values (69,9);
+insert into t (id,a) values (69,10);
+insert into t (id,a) values (69,11);
+insert into t (id,a) values (69,12);
+insert into t (id,a) values (69,13);
+insert into t (id,a) values (69,14);
+insert into t (id,a) values (69,15);
+insert into t (id,a) values (69,16);
+insert into t (id,a) values (69,17);
+insert into t (id,a) values (69,18);
+insert into t (id,a) values (69,19);
+insert into t (id,a) values (69,20);
+insert into t (id,a) values (69,21);
+insert into t (id,a) values (69,22);
+insert into t (id,a) values (69,23);
+insert into t (id,a) values (69,24);
+insert into t (id,a) values (69,25);
+insert into t (id,a) values (69,26);
+insert into t (id,a) values (69,27);
+insert into t (id,a) values (69,28);
+insert into t (id,a) values (69,29);
+insert into t (id,a) values (69,30);
+insert into t (id,a) values (69,31);
+insert into t (id,a) values (69,32);
+insert into t (id,a) values (69,33);
+insert into t (id,a) values (69,34);
+insert into t (id,a) values (69,35);
+insert into t (id,a) values (69,36);
+insert into t (id,a) values (69,37);
+insert into t (id,a) values (69,38);
+insert into t (id,a) values (69,39);
+insert into t (id,a) values (69,40);
+insert into t (id,a) values (69,41);
+insert into t (id,a) values (69,42);
+insert into t (id,a) values (69,43);
+insert into t (id,a) values (69,44);
+insert into t (id,a) values (69,45);
+insert into t (id,a) values (69,46);
+insert into t (id,a) values (69,47);
+insert into t (id,a) values (69,48);
+insert into t (id,a) values (69,49);
+insert into t (id,a) values (69,50);
+insert into t (id,a) values (69,51);
+insert into t (id,a) values (69,52);
+insert into t (id,a) values (69,53);
+insert into t (id,a) values (69,54);
+insert into t (id,a) values (69,55);
+insert into t (id,a) values (69,56);
+insert into t (id,a) values (69,57);
+insert into t (id,a) values (69,58);
+insert into t (id,a) values (69,59);
+insert into t (id,a) values (69,60);
+insert into t (id,a) values (69,61);
+insert into t (id,a) values (69,62);
+insert into t (id,a) values (69,63);
+insert into t (id,a) values (69,64);
+insert into t (id,a) values (69,65);
+insert into t (id,a) values (69,66);
+insert into t (id,a) values (69,67);
+insert into t (id,a) values (69,68);
+insert into t (id,a) values (69,69);
+insert into t (id,a) values (69,70);
+insert into t (id,a) values (69,71);
+insert into t (id,a) values (69,72);
+insert into t (id,a) values (69,73);
+insert into t (id,a) values (69,74);
+insert into t (id,a) values (69,75);
+insert into t (id,a) values (69,76);
+insert into t (id,a) values (69,77);
+insert into t (id,a) values (69,78);
+insert into t (id,a) values (69,79);
+insert into t (id,a) values (69,80);
+insert into t (id,a) values (69,81);
+insert into t (id,a) values (69,82);
+insert into t (id,a) values (69,83);
+insert into t (id,a) values (69,84);
+insert into t (id,a) values (69,85);
+insert into t (id,a) values (69,86);
+insert into t (id,a) values (69,87);
+insert into t (id,a) values (69,88);
+insert into t (id,a) values (69,89);
+insert into t (id,a) values (69,90);
+insert into t (id,a) values (69,91);
+insert into t (id,a) values (69,92);
+insert into t (id,a) values (69,93);
+insert into t (id,a) values (69,94);
+insert into t (id,a) values (69,95);
+insert into t (id,a) values (69,96);
+insert into t (id,a) values (69,97);
+insert into t (id,a) values (69,98);
+insert into t (id,a) values (69,99);
+insert into t (id,a) values (70,0);
+insert into t (id,a) values (70,1);
+insert into t (id,a) values (70,2);
+insert into t (id,a) values (70,3);
+insert into t (id,a) values (70,4);
+insert into t (id,a) values (70,5);
+insert into t (id,a) values (70,6);
+insert into t (id,a) values (70,7);
+insert into t (id,a) values (70,8);
+insert into t (id,a) values (70,9);
+insert into t (id,a) values (70,10);
+insert into t (id,a) values (70,11);
+insert into t (id,a) values (70,12);
+insert into t (id,a) values (70,13);
+insert into t (id,a) values (70,14);
+insert into t (id,a) values (70,15);
+insert into t (id,a) values (70,16);
+insert into t (id,a) values (70,17);
+insert into t (id,a) values (70,18);
+insert into t (id,a) values (70,19);
+insert into t (id,a) values (70,20);
+insert into t (id,a) values (70,21);
+insert into t (id,a) values (70,22);
+insert into t (id,a) values (70,23);
+insert into t (id,a) values (70,24);
+insert into t (id,a) values (70,25);
+insert into t (id,a) values (70,26);
+insert into t (id,a) values (70,27);
+insert into t (id,a) values (70,28);
+insert into t (id,a) values (70,29);
+insert into t (id,a) values (70,30);
+insert into t (id,a) values (70,31);
+insert into t (id,a) values (70,32);
+insert into t (id,a) values (70,33);
+insert into t (id,a) values (70,34);
+insert into t (id,a) values (70,35);
+insert into t (id,a) values (70,36);
+insert into t (id,a) values (70,37);
+insert into t (id,a) values (70,38);
+insert into t (id,a) values (70,39);
+insert into t (id,a) values (70,40);
+insert into t (id,a) values (70,41);
+insert into t (id,a) values (70,42);
+insert into t (id,a) values (70,43);
+insert into t (id,a) values (70,44);
+insert into t (id,a) values (70,45);
+insert into t (id,a) values (70,46);
+insert into t (id,a) values (70,47);
+insert into t (id,a) values (70,48);
+insert into t (id,a) values (70,49);
+insert into t (id,a) values (70,50);
+insert into t (id,a) values (70,51);
+insert into t (id,a) values (70,52);
+insert into t (id,a) values (70,53);
+insert into t (id,a) values (70,54);
+insert into t (id,a) values (70,55);
+insert into t (id,a) values (70,56);
+insert into t (id,a) values (70,57);
+insert into t (id,a) values (70,58);
+insert into t (id,a) values (70,59);
+insert into t (id,a) values (70,60);
+insert into t (id,a) values (70,61);
+insert into t (id,a) values (70,62);
+insert into t (id,a) values (70,63);
+insert into t (id,a) values (70,64);
+insert into t (id,a) values (70,65);
+insert into t (id,a) values (70,66);
+insert into t (id,a) values (70,67);
+insert into t (id,a) values (70,68);
+insert into t (id,a) values (70,69);
+insert into t (id,a) values (70,70);
+insert into t (id,a) values (70,71);
+insert into t (id,a) values (70,72);
+insert into t (id,a) values (70,73);
+insert into t (id,a) values (70,74);
+insert into t (id,a) values (70,75);
+insert into t (id,a) values (70,76);
+insert into t (id,a) values (70,77);
+insert into t (id,a) values (70,78);
+insert into t (id,a) values (70,79);
+insert into t (id,a) values (70,80);
+insert into t (id,a) values (70,81);
+insert into t (id,a) values (70,82);
+insert into t (id,a) values (70,83);
+insert into t (id,a) values (70,84);
+insert into t (id,a) values (70,85);
+insert into t (id,a) values (70,86);
+insert into t (id,a) values (70,87);
+insert into t (id,a) values (70,88);
+insert into t (id,a) values (70,89);
+insert into t (id,a) values (70,90);
+insert into t (id,a) values (70,91);
+insert into t (id,a) values (70,92);
+insert into t (id,a) values (70,93);
+insert into t (id,a) values (70,94);
+insert into t (id,a) values (70,95);
+insert into t (id,a) values (70,96);
+insert into t (id,a) values (70,97);
+insert into t (id,a) values (70,98);
+insert into t (id,a) values (70,99);
+insert into t (id,a) values (71,0);
+insert into t (id,a) values (71,1);
+insert into t (id,a) values (71,2);
+insert into t (id,a) values (71,3);
+insert into t (id,a) values (71,4);
+insert into t (id,a) values (71,5);
+insert into t (id,a) values (71,6);
+insert into t (id,a) values (71,7);
+insert into t (id,a) values (71,8);
+insert into t (id,a) values (71,9);
+insert into t (id,a) values (71,10);
+insert into t (id,a) values (71,11);
+insert into t (id,a) values (71,12);
+insert into t (id,a) values (71,13);
+insert into t (id,a) values (71,14);
+insert into t (id,a) values (71,15);
+insert into t (id,a) values (71,16);
+insert into t (id,a) values (71,17);
+insert into t (id,a) values (71,18);
+insert into t (id,a) values (71,19);
+insert into t (id,a) values (71,20);
+insert into t (id,a) values (71,21);
+insert into t (id,a) values (71,22);
+insert into t (id,a) values (71,23);
+insert into t (id,a) values (71,24);
+insert into t (id,a) values (71,25);
+insert into t (id,a) values (71,26);
+insert into t (id,a) values (71,27);
+insert into t (id,a) values (71,28);
+insert into t (id,a) values (71,29);
+insert into t (id,a) values (71,30);
+insert into t (id,a) values (71,31);
+insert into t (id,a) values (71,32);
+insert into t (id,a) values (71,33);
+insert into t (id,a) values (71,34);
+insert into t (id,a) values (71,35);
+insert into t (id,a) values (71,36);
+insert into t (id,a) values (71,37);
+insert into t (id,a) values (71,38);
+insert into t (id,a) values (71,39);
+insert into t (id,a) values (71,40);
+insert into t (id,a) values (71,41);
+insert into t (id,a) values (71,42);
+insert into t (id,a) values (71,43);
+insert into t (id,a) values (71,44);
+insert into t (id,a) values (71,45);
+insert into t (id,a) values (71,46);
+insert into t (id,a) values (71,47);
+insert into t (id,a) values (71,48);
+insert into t (id,a) values (71,49);
+insert into t (id,a) values (71,50);
+insert into t (id,a) values (71,51);
+insert into t (id,a) values (71,52);
+insert into t (id,a) values (71,53);
+insert into t (id,a) values (71,54);
+insert into t (id,a) values (71,55);
+insert into t (id,a) values (71,56);
+insert into t (id,a) values (71,57);
+insert into t (id,a) values (71,58);
+insert into t (id,a) values (71,59);
+insert into t (id,a) values (71,60);
+insert into t (id,a) values (71,61);
+insert into t (id,a) values (71,62);
+insert into t (id,a) values (71,63);
+insert into t (id,a) values (71,64);
+insert into t (id,a) values (71,65);
+insert into t (id,a) values (71,66);
+insert into t (id,a) values (71,67);
+insert into t (id,a) values (71,68);
+insert into t (id,a) values (71,69);
+insert into t (id,a) values (71,70);
+insert into t (id,a) values (71,71);
+insert into t (id,a) values (71,72);
+insert into t (id,a) values (71,73);
+insert into t (id,a) values (71,74);
+insert into t (id,a) values (71,75);
+insert into t (id,a) values (71,76);
+insert into t (id,a) values (71,77);
+insert into t (id,a) values (71,78);
+insert into t (id,a) values (71,79);
+insert into t (id,a) values (71,80);
+insert into t (id,a) values (71,81);
+insert into t (id,a) values (71,82);
+insert into t (id,a) values (71,83);
+insert into t (id,a) values (71,84);
+insert into t (id,a) values (71,85);
+insert into t (id,a) values (71,86);
+insert into t (id,a) values (71,87);
+insert into t (id,a) values (71,88);
+insert into t (id,a) values (71,89);
+insert into t (id,a) values (71,90);
+insert into t (id,a) values (71,91);
+insert into t (id,a) values (71,92);
+insert into t (id,a) values (71,93);
+insert into t (id,a) values (71,94);
+insert into t (id,a) values (71,95);
+insert into t (id,a) values (71,96);
+insert into t (id,a) values (71,97);
+insert into t (id,a) values (71,98);
+insert into t (id,a) values (71,99);
+insert into t (id,a) values (72,0);
+insert into t (id,a) values (72,1);
+insert into t (id,a) values (72,2);
+insert into t (id,a) values (72,3);
+insert into t (id,a) values (72,4);
+insert into t (id,a) values (72,5);
+insert into t (id,a) values (72,6);
+insert into t (id,a) values (72,7);
+insert into t (id,a) values (72,8);
+insert into t (id,a) values (72,9);
+insert into t (id,a) values (72,10);
+insert into t (id,a) values (72,11);
+insert into t (id,a) values (72,12);
+insert into t (id,a) values (72,13);
+insert into t (id,a) values (72,14);
+insert into t (id,a) values (72,15);
+insert into t (id,a) values (72,16);
+insert into t (id,a) values (72,17);
+insert into t (id,a) values (72,18);
+insert into t (id,a) values (72,19);
+insert into t (id,a) values (72,20);
+insert into t (id,a) values (72,21);
+insert into t (id,a) values (72,22);
+insert into t (id,a) values (72,23);
+insert into t (id,a) values (72,24);
+insert into t (id,a) values (72,25);
+insert into t (id,a) values (72,26);
+insert into t (id,a) values (72,27);
+insert into t (id,a) values (72,28);
+insert into t (id,a) values (72,29);
+insert into t (id,a) values (72,30);
+insert into t (id,a) values (72,31);
+insert into t (id,a) values (72,32);
+insert into t (id,a) values (72,33);
+insert into t (id,a) values (72,34);
+insert into t (id,a) values (72,35);
+insert into t (id,a) values (72,36);
+insert into t (id,a) values (72,37);
+insert into t (id,a) values (72,38);
+insert into t (id,a) values (72,39);
+insert into t (id,a) values (72,40);
+insert into t (id,a) values (72,41);
+insert into t (id,a) values (72,42);
+insert into t (id,a) values (72,43);
+insert into t (id,a) values (72,44);
+insert into t (id,a) values (72,45);
+insert into t (id,a) values (72,46);
+insert into t (id,a) values (72,47);
+insert into t (id,a) values (72,48);
+insert into t (id,a) values (72,49);
+insert into t (id,a) values (72,50);
+insert into t (id,a) values (72,51);
+insert into t (id,a) values (72,52);
+insert into t (id,a) values (72,53);
+insert into t (id,a) values (72,54);
+insert into t (id,a) values (72,55);
+insert into t (id,a) values (72,56);
+insert into t (id,a) values (72,57);
+insert into t (id,a) values (72,58);
+insert into t (id,a) values (72,59);
+insert into t (id,a) values (72,60);
+insert into t (id,a) values (72,61);
+insert into t (id,a) values (72,62);
+insert into t (id,a) values (72,63);
+insert into t (id,a) values (72,64);
+insert into t (id,a) values (72,65);
+insert into t (id,a) values (72,66);
+insert into t (id,a) values (72,67);
+insert into t (id,a) values (72,68);
+insert into t (id,a) values (72,69);
+insert into t (id,a) values (72,70);
+insert into t (id,a) values (72,71);
+insert into t (id,a) values (72,72);
+insert into t (id,a) values (72,73);
+insert into t (id,a) values (72,74);
+insert into t (id,a) values (72,75);
+insert into t (id,a) values (72,76);
+insert into t (id,a) values (72,77);
+insert into t (id,a) values (72,78);
+insert into t (id,a) values (72,79);
+insert into t (id,a) values (72,80);
+insert into t (id,a) values (72,81);
+insert into t (id,a) values (72,82);
+insert into t (id,a) values (72,83);
+insert into t (id,a) values (72,84);
+insert into t (id,a) values (72,85);
+insert into t (id,a) values (72,86);
+insert into t (id,a) values (72,87);
+insert into t (id,a) values (72,88);
+insert into t (id,a) values (72,89);
+insert into t (id,a) values (72,90);
+insert into t (id,a) values (72,91);
+insert into t (id,a) values (72,92);
+insert into t (id,a) values (72,93);
+insert into t (id,a) values (72,94);
+insert into t (id,a) values (72,95);
+insert into t (id,a) values (72,96);
+insert into t (id,a) values (72,97);
+insert into t (id,a) values (72,98);
+insert into t (id,a) values (72,99);
+insert into t (id,a) values (73,0);
+insert into t (id,a) values (73,1);
+insert into t (id,a) values (73,2);
+insert into t (id,a) values (73,3);
+insert into t (id,a) values (73,4);
+insert into t (id,a) values (73,5);
+insert into t (id,a) values (73,6);
+insert into t (id,a) values (73,7);
+insert into t (id,a) values (73,8);
+insert into t (id,a) values (73,9);
+insert into t (id,a) values (73,10);
+insert into t (id,a) values (73,11);
+insert into t (id,a) values (73,12);
+insert into t (id,a) values (73,13);
+insert into t (id,a) values (73,14);
+insert into t (id,a) values (73,15);
+insert into t (id,a) values (73,16);
+insert into t (id,a) values (73,17);
+insert into t (id,a) values (73,18);
+insert into t (id,a) values (73,19);
+insert into t (id,a) values (73,20);
+insert into t (id,a) values (73,21);
+insert into t (id,a) values (73,22);
+insert into t (id,a) values (73,23);
+insert into t (id,a) values (73,24);
+insert into t (id,a) values (73,25);
+insert into t (id,a) values (73,26);
+insert into t (id,a) values (73,27);
+insert into t (id,a) values (73,28);
+insert into t (id,a) values (73,29);
+insert into t (id,a) values (73,30);
+insert into t (id,a) values (73,31);
+insert into t (id,a) values (73,32);
+insert into t (id,a) values (73,33);
+insert into t (id,a) values (73,34);
+insert into t (id,a) values (73,35);
+insert into t (id,a) values (73,36);
+insert into t (id,a) values (73,37);
+insert into t (id,a) values (73,38);
+insert into t (id,a) values (73,39);
+insert into t (id,a) values (73,40);
+insert into t (id,a) values (73,41);
+insert into t (id,a) values (73,42);
+insert into t (id,a) values (73,43);
+insert into t (id,a) values (73,44);
+insert into t (id,a) values (73,45);
+insert into t (id,a) values (73,46);
+insert into t (id,a) values (73,47);
+insert into t (id,a) values (73,48);
+insert into t (id,a) values (73,49);
+insert into t (id,a) values (73,50);
+insert into t (id,a) values (73,51);
+insert into t (id,a) values (73,52);
+insert into t (id,a) values (73,53);
+insert into t (id,a) values (73,54);
+insert into t (id,a) values (73,55);
+insert into t (id,a) values (73,56);
+insert into t (id,a) values (73,57);
+insert into t (id,a) values (73,58);
+insert into t (id,a) values (73,59);
+insert into t (id,a) values (73,60);
+insert into t (id,a) values (73,61);
+insert into t (id,a) values (73,62);
+insert into t (id,a) values (73,63);
+insert into t (id,a) values (73,64);
+insert into t (id,a) values (73,65);
+insert into t (id,a) values (73,66);
+insert into t (id,a) values (73,67);
+insert into t (id,a) values (73,68);
+insert into t (id,a) values (73,69);
+insert into t (id,a) values (73,70);
+insert into t (id,a) values (73,71);
+insert into t (id,a) values (73,72);
+insert into t (id,a) values (73,73);
+insert into t (id,a) values (73,74);
+insert into t (id,a) values (73,75);
+insert into t (id,a) values (73,76);
+insert into t (id,a) values (73,77);
+insert into t (id,a) values (73,78);
+insert into t (id,a) values (73,79);
+insert into t (id,a) values (73,80);
+insert into t (id,a) values (73,81);
+insert into t (id,a) values (73,82);
+insert into t (id,a) values (73,83);
+insert into t (id,a) values (73,84);
+insert into t (id,a) values (73,85);
+insert into t (id,a) values (73,86);
+insert into t (id,a) values (73,87);
+insert into t (id,a) values (73,88);
+insert into t (id,a) values (73,89);
+insert into t (id,a) values (73,90);
+insert into t (id,a) values (73,91);
+insert into t (id,a) values (73,92);
+insert into t (id,a) values (73,93);
+insert into t (id,a) values (73,94);
+insert into t (id,a) values (73,95);
+insert into t (id,a) values (73,96);
+insert into t (id,a) values (73,97);
+insert into t (id,a) values (73,98);
+insert into t (id,a) values (73,99);
+insert into t (id,a) values (74,0);
+insert into t (id,a) values (74,1);
+insert into t (id,a) values (74,2);
+insert into t (id,a) values (74,3);
+insert into t (id,a) values (74,4);
+insert into t (id,a) values (74,5);
+insert into t (id,a) values (74,6);
+insert into t (id,a) values (74,7);
+insert into t (id,a) values (74,8);
+insert into t (id,a) values (74,9);
+insert into t (id,a) values (74,10);
+insert into t (id,a) values (74,11);
+insert into t (id,a) values (74,12);
+insert into t (id,a) values (74,13);
+insert into t (id,a) values (74,14);
+insert into t (id,a) values (74,15);
+insert into t (id,a) values (74,16);
+insert into t (id,a) values (74,17);
+insert into t (id,a) values (74,18);
+insert into t (id,a) values (74,19);
+insert into t (id,a) values (74,20);
+insert into t (id,a) values (74,21);
+insert into t (id,a) values (74,22);
+insert into t (id,a) values (74,23);
+insert into t (id,a) values (74,24);
+insert into t (id,a) values (74,25);
+insert into t (id,a) values (74,26);
+insert into t (id,a) values (74,27);
+insert into t (id,a) values (74,28);
+insert into t (id,a) values (74,29);
+insert into t (id,a) values (74,30);
+insert into t (id,a) values (74,31);
+insert into t (id,a) values (74,32);
+insert into t (id,a) values (74,33);
+insert into t (id,a) values (74,34);
+insert into t (id,a) values (74,35);
+insert into t (id,a) values (74,36);
+insert into t (id,a) values (74,37);
+insert into t (id,a) values (74,38);
+insert into t (id,a) values (74,39);
+insert into t (id,a) values (74,40);
+insert into t (id,a) values (74,41);
+insert into t (id,a) values (74,42);
+insert into t (id,a) values (74,43);
+insert into t (id,a) values (74,44);
+insert into t (id,a) values (74,45);
+insert into t (id,a) values (74,46);
+insert into t (id,a) values (74,47);
+insert into t (id,a) values (74,48);
+insert into t (id,a) values (74,49);
+insert into t (id,a) values (74,50);
+insert into t (id,a) values (74,51);
+insert into t (id,a) values (74,52);
+insert into t (id,a) values (74,53);
+insert into t (id,a) values (74,54);
+insert into t (id,a) values (74,55);
+insert into t (id,a) values (74,56);
+insert into t (id,a) values (74,57);
+insert into t (id,a) values (74,58);
+insert into t (id,a) values (74,59);
+insert into t (id,a) values (74,60);
+insert into t (id,a) values (74,61);
+insert into t (id,a) values (74,62);
+insert into t (id,a) values (74,63);
+insert into t (id,a) values (74,64);
+insert into t (id,a) values (74,65);
+insert into t (id,a) values (74,66);
+insert into t (id,a) values (74,67);
+insert into t (id,a) values (74,68);
+insert into t (id,a) values (74,69);
+insert into t (id,a) values (74,70);
+insert into t (id,a) values (74,71);
+insert into t (id,a) values (74,72);
+insert into t (id,a) values (74,73);
+insert into t (id,a) values (74,74);
+insert into t (id,a) values (74,75);
+insert into t (id,a) values (74,76);
+insert into t (id,a) values (74,77);
+insert into t (id,a) values (74,78);
+insert into t (id,a) values (74,79);
+insert into t (id,a) values (74,80);
+insert into t (id,a) values (74,81);
+insert into t (id,a) values (74,82);
+insert into t (id,a) values (74,83);
+insert into t (id,a) values (74,84);
+insert into t (id,a) values (74,85);
+insert into t (id,a) values (74,86);
+insert into t (id,a) values (74,87);
+insert into t (id,a) values (74,88);
+insert into t (id,a) values (74,89);
+insert into t (id,a) values (74,90);
+insert into t (id,a) values (74,91);
+insert into t (id,a) values (74,92);
+insert into t (id,a) values (74,93);
+insert into t (id,a) values (74,94);
+insert into t (id,a) values (74,95);
+insert into t (id,a) values (74,96);
+insert into t (id,a) values (74,97);
+insert into t (id,a) values (74,98);
+insert into t (id,a) values (74,99);
+insert into t (id,a) values (75,0);
+insert into t (id,a) values (75,1);
+insert into t (id,a) values (75,2);
+insert into t (id,a) values (75,3);
+insert into t (id,a) values (75,4);
+insert into t (id,a) values (75,5);
+insert into t (id,a) values (75,6);
+insert into t (id,a) values (75,7);
+insert into t (id,a) values (75,8);
+insert into t (id,a) values (75,9);
+insert into t (id,a) values (75,10);
+insert into t (id,a) values (75,11);
+insert into t (id,a) values (75,12);
+insert into t (id,a) values (75,13);
+insert into t (id,a) values (75,14);
+insert into t (id,a) values (75,15);
+insert into t (id,a) values (75,16);
+insert into t (id,a) values (75,17);
+insert into t (id,a) values (75,18);
+insert into t (id,a) values (75,19);
+insert into t (id,a) values (75,20);
+insert into t (id,a) values (75,21);
+insert into t (id,a) values (75,22);
+insert into t (id,a) values (75,23);
+insert into t (id,a) values (75,24);
+insert into t (id,a) values (75,25);
+insert into t (id,a) values (75,26);
+insert into t (id,a) values (75,27);
+insert into t (id,a) values (75,28);
+insert into t (id,a) values (75,29);
+insert into t (id,a) values (75,30);
+insert into t (id,a) values (75,31);
+insert into t (id,a) values (75,32);
+insert into t (id,a) values (75,33);
+insert into t (id,a) values (75,34);
+insert into t (id,a) values (75,35);
+insert into t (id,a) values (75,36);
+insert into t (id,a) values (75,37);
+insert into t (id,a) values (75,38);
+insert into t (id,a) values (75,39);
+insert into t (id,a) values (75,40);
+insert into t (id,a) values (75,41);
+insert into t (id,a) values (75,42);
+insert into t (id,a) values (75,43);
+insert into t (id,a) values (75,44);
+insert into t (id,a) values (75,45);
+insert into t (id,a) values (75,46);
+insert into t (id,a) values (75,47);
+insert into t (id,a) values (75,48);
+insert into t (id,a) values (75,49);
+insert into t (id,a) values (75,50);
+insert into t (id,a) values (75,51);
+insert into t (id,a) values (75,52);
+insert into t (id,a) values (75,53);
+insert into t (id,a) values (75,54);
+insert into t (id,a) values (75,55);
+insert into t (id,a) values (75,56);
+insert into t (id,a) values (75,57);
+insert into t (id,a) values (75,58);
+insert into t (id,a) values (75,59);
+insert into t (id,a) values (75,60);
+insert into t (id,a) values (75,61);
+insert into t (id,a) values (75,62);
+insert into t (id,a) values (75,63);
+insert into t (id,a) values (75,64);
+insert into t (id,a) values (75,65);
+insert into t (id,a) values (75,66);
+insert into t (id,a) values (75,67);
+insert into t (id,a) values (75,68);
+insert into t (id,a) values (75,69);
+insert into t (id,a) values (75,70);
+insert into t (id,a) values (75,71);
+insert into t (id,a) values (75,72);
+insert into t (id,a) values (75,73);
+insert into t (id,a) values (75,74);
+insert into t (id,a) values (75,75);
+insert into t (id,a) values (75,76);
+insert into t (id,a) values (75,77);
+insert into t (id,a) values (75,78);
+insert into t (id,a) values (75,79);
+insert into t (id,a) values (75,80);
+insert into t (id,a) values (75,81);
+insert into t (id,a) values (75,82);
+insert into t (id,a) values (75,83);
+insert into t (id,a) values (75,84);
+insert into t (id,a) values (75,85);
+insert into t (id,a) values (75,86);
+insert into t (id,a) values (75,87);
+insert into t (id,a) values (75,88);
+insert into t (id,a) values (75,89);
+insert into t (id,a) values (75,90);
+insert into t (id,a) values (75,91);
+insert into t (id,a) values (75,92);
+insert into t (id,a) values (75,93);
+insert into t (id,a) values (75,94);
+insert into t (id,a) values (75,95);
+insert into t (id,a) values (75,96);
+insert into t (id,a) values (75,97);
+insert into t (id,a) values (75,98);
+insert into t (id,a) values (75,99);
+insert into t (id,a) values (76,0);
+insert into t (id,a) values (76,1);
+insert into t (id,a) values (76,2);
+insert into t (id,a) values (76,3);
+insert into t (id,a) values (76,4);
+insert into t (id,a) values (76,5);
+insert into t (id,a) values (76,6);
+insert into t (id,a) values (76,7);
+insert into t (id,a) values (76,8);
+insert into t (id,a) values (76,9);
+insert into t (id,a) values (76,10);
+insert into t (id,a) values (76,11);
+insert into t (id,a) values (76,12);
+insert into t (id,a) values (76,13);
+insert into t (id,a) values (76,14);
+insert into t (id,a) values (76,15);
+insert into t (id,a) values (76,16);
+insert into t (id,a) values (76,17);
+insert into t (id,a) values (76,18);
+insert into t (id,a) values (76,19);
+insert into t (id,a) values (76,20);
+insert into t (id,a) values (76,21);
+insert into t (id,a) values (76,22);
+insert into t (id,a) values (76,23);
+insert into t (id,a) values (76,24);
+insert into t (id,a) values (76,25);
+insert into t (id,a) values (76,26);
+insert into t (id,a) values (76,27);
+insert into t (id,a) values (76,28);
+insert into t (id,a) values (76,29);
+insert into t (id,a) values (76,30);
+insert into t (id,a) values (76,31);
+insert into t (id,a) values (76,32);
+insert into t (id,a) values (76,33);
+insert into t (id,a) values (76,34);
+insert into t (id,a) values (76,35);
+insert into t (id,a) values (76,36);
+insert into t (id,a) values (76,37);
+insert into t (id,a) values (76,38);
+insert into t (id,a) values (76,39);
+insert into t (id,a) values (76,40);
+insert into t (id,a) values (76,41);
+insert into t (id,a) values (76,42);
+insert into t (id,a) values (76,43);
+insert into t (id,a) values (76,44);
+insert into t (id,a) values (76,45);
+insert into t (id,a) values (76,46);
+insert into t (id,a) values (76,47);
+insert into t (id,a) values (76,48);
+insert into t (id,a) values (76,49);
+insert into t (id,a) values (76,50);
+insert into t (id,a) values (76,51);
+insert into t (id,a) values (76,52);
+insert into t (id,a) values (76,53);
+insert into t (id,a) values (76,54);
+insert into t (id,a) values (76,55);
+insert into t (id,a) values (76,56);
+insert into t (id,a) values (76,57);
+insert into t (id,a) values (76,58);
+insert into t (id,a) values (76,59);
+insert into t (id,a) values (76,60);
+insert into t (id,a) values (76,61);
+insert into t (id,a) values (76,62);
+insert into t (id,a) values (76,63);
+insert into t (id,a) values (76,64);
+insert into t (id,a) values (76,65);
+insert into t (id,a) values (76,66);
+insert into t (id,a) values (76,67);
+insert into t (id,a) values (76,68);
+insert into t (id,a) values (76,69);
+insert into t (id,a) values (76,70);
+insert into t (id,a) values (76,71);
+insert into t (id,a) values (76,72);
+insert into t (id,a) values (76,73);
+insert into t (id,a) values (76,74);
+insert into t (id,a) values (76,75);
+insert into t (id,a) values (76,76);
+insert into t (id,a) values (76,77);
+insert into t (id,a) values (76,78);
+insert into t (id,a) values (76,79);
+insert into t (id,a) values (76,80);
+insert into t (id,a) values (76,81);
+insert into t (id,a) values (76,82);
+insert into t (id,a) values (76,83);
+insert into t (id,a) values (76,84);
+insert into t (id,a) values (76,85);
+insert into t (id,a) values (76,86);
+insert into t (id,a) values (76,87);
+insert into t (id,a) values (76,88);
+insert into t (id,a) values (76,89);
+insert into t (id,a) values (76,90);
+insert into t (id,a) values (76,91);
+insert into t (id,a) values (76,92);
+insert into t (id,a) values (76,93);
+insert into t (id,a) values (76,94);
+insert into t (id,a) values (76,95);
+insert into t (id,a) values (76,96);
+insert into t (id,a) values (76,97);
+insert into t (id,a) values (76,98);
+insert into t (id,a) values (76,99);
+insert into t (id,a) values (77,0);
+insert into t (id,a) values (77,1);
+insert into t (id,a) values (77,2);
+insert into t (id,a) values (77,3);
+insert into t (id,a) values (77,4);
+insert into t (id,a) values (77,5);
+insert into t (id,a) values (77,6);
+insert into t (id,a) values (77,7);
+insert into t (id,a) values (77,8);
+insert into t (id,a) values (77,9);
+insert into t (id,a) values (77,10);
+insert into t (id,a) values (77,11);
+insert into t (id,a) values (77,12);
+insert into t (id,a) values (77,13);
+insert into t (id,a) values (77,14);
+insert into t (id,a) values (77,15);
+insert into t (id,a) values (77,16);
+insert into t (id,a) values (77,17);
+insert into t (id,a) values (77,18);
+insert into t (id,a) values (77,19);
+insert into t (id,a) values (77,20);
+insert into t (id,a) values (77,21);
+insert into t (id,a) values (77,22);
+insert into t (id,a) values (77,23);
+insert into t (id,a) values (77,24);
+insert into t (id,a) values (77,25);
+insert into t (id,a) values (77,26);
+insert into t (id,a) values (77,27);
+insert into t (id,a) values (77,28);
+insert into t (id,a) values (77,29);
+insert into t (id,a) values (77,30);
+insert into t (id,a) values (77,31);
+insert into t (id,a) values (77,32);
+insert into t (id,a) values (77,33);
+insert into t (id,a) values (77,34);
+insert into t (id,a) values (77,35);
+insert into t (id,a) values (77,36);
+insert into t (id,a) values (77,37);
+insert into t (id,a) values (77,38);
+insert into t (id,a) values (77,39);
+insert into t (id,a) values (77,40);
+insert into t (id,a) values (77,41);
+insert into t (id,a) values (77,42);
+insert into t (id,a) values (77,43);
+insert into t (id,a) values (77,44);
+insert into t (id,a) values (77,45);
+insert into t (id,a) values (77,46);
+insert into t (id,a) values (77,47);
+insert into t (id,a) values (77,48);
+insert into t (id,a) values (77,49);
+insert into t (id,a) values (77,50);
+insert into t (id,a) values (77,51);
+insert into t (id,a) values (77,52);
+insert into t (id,a) values (77,53);
+insert into t (id,a) values (77,54);
+insert into t (id,a) values (77,55);
+insert into t (id,a) values (77,56);
+insert into t (id,a) values (77,57);
+insert into t (id,a) values (77,58);
+insert into t (id,a) values (77,59);
+insert into t (id,a) values (77,60);
+insert into t (id,a) values (77,61);
+insert into t (id,a) values (77,62);
+insert into t (id,a) values (77,63);
+insert into t (id,a) values (77,64);
+insert into t (id,a) values (77,65);
+insert into t (id,a) values (77,66);
+insert into t (id,a) values (77,67);
+insert into t (id,a) values (77,68);
+insert into t (id,a) values (77,69);
+insert into t (id,a) values (77,70);
+insert into t (id,a) values (77,71);
+insert into t (id,a) values (77,72);
+insert into t (id,a) values (77,73);
+insert into t (id,a) values (77,74);
+insert into t (id,a) values (77,75);
+insert into t (id,a) values (77,76);
+insert into t (id,a) values (77,77);
+insert into t (id,a) values (77,78);
+insert into t (id,a) values (77,79);
+insert into t (id,a) values (77,80);
+insert into t (id,a) values (77,81);
+insert into t (id,a) values (77,82);
+insert into t (id,a) values (77,83);
+insert into t (id,a) values (77,84);
+insert into t (id,a) values (77,85);
+insert into t (id,a) values (77,86);
+insert into t (id,a) values (77,87);
+insert into t (id,a) values (77,88);
+insert into t (id,a) values (77,89);
+insert into t (id,a) values (77,90);
+insert into t (id,a) values (77,91);
+insert into t (id,a) values (77,92);
+insert into t (id,a) values (77,93);
+insert into t (id,a) values (77,94);
+insert into t (id,a) values (77,95);
+insert into t (id,a) values (77,96);
+insert into t (id,a) values (77,97);
+insert into t (id,a) values (77,98);
+insert into t (id,a) values (77,99);
+insert into t (id,a) values (78,0);
+insert into t (id,a) values (78,1);
+insert into t (id,a) values (78,2);
+insert into t (id,a) values (78,3);
+insert into t (id,a) values (78,4);
+insert into t (id,a) values (78,5);
+insert into t (id,a) values (78,6);
+insert into t (id,a) values (78,7);
+insert into t (id,a) values (78,8);
+insert into t (id,a) values (78,9);
+insert into t (id,a) values (78,10);
+insert into t (id,a) values (78,11);
+insert into t (id,a) values (78,12);
+insert into t (id,a) values (78,13);
+insert into t (id,a) values (78,14);
+insert into t (id,a) values (78,15);
+insert into t (id,a) values (78,16);
+insert into t (id,a) values (78,17);
+insert into t (id,a) values (78,18);
+insert into t (id,a) values (78,19);
+insert into t (id,a) values (78,20);
+insert into t (id,a) values (78,21);
+insert into t (id,a) values (78,22);
+insert into t (id,a) values (78,23);
+insert into t (id,a) values (78,24);
+insert into t (id,a) values (78,25);
+insert into t (id,a) values (78,26);
+insert into t (id,a) values (78,27);
+insert into t (id,a) values (78,28);
+insert into t (id,a) values (78,29);
+insert into t (id,a) values (78,30);
+insert into t (id,a) values (78,31);
+insert into t (id,a) values (78,32);
+insert into t (id,a) values (78,33);
+insert into t (id,a) values (78,34);
+insert into t (id,a) values (78,35);
+insert into t (id,a) values (78,36);
+insert into t (id,a) values (78,37);
+insert into t (id,a) values (78,38);
+insert into t (id,a) values (78,39);
+insert into t (id,a) values (78,40);
+insert into t (id,a) values (78,41);
+insert into t (id,a) values (78,42);
+insert into t (id,a) values (78,43);
+insert into t (id,a) values (78,44);
+insert into t (id,a) values (78,45);
+insert into t (id,a) values (78,46);
+insert into t (id,a) values (78,47);
+insert into t (id,a) values (78,48);
+insert into t (id,a) values (78,49);
+insert into t (id,a) values (78,50);
+insert into t (id,a) values (78,51);
+insert into t (id,a) values (78,52);
+insert into t (id,a) values (78,53);
+insert into t (id,a) values (78,54);
+insert into t (id,a) values (78,55);
+insert into t (id,a) values (78,56);
+insert into t (id,a) values (78,57);
+insert into t (id,a) values (78,58);
+insert into t (id,a) values (78,59);
+insert into t (id,a) values (78,60);
+insert into t (id,a) values (78,61);
+insert into t (id,a) values (78,62);
+insert into t (id,a) values (78,63);
+insert into t (id,a) values (78,64);
+insert into t (id,a) values (78,65);
+insert into t (id,a) values (78,66);
+insert into t (id,a) values (78,67);
+insert into t (id,a) values (78,68);
+insert into t (id,a) values (78,69);
+insert into t (id,a) values (78,70);
+insert into t (id,a) values (78,71);
+insert into t (id,a) values (78,72);
+insert into t (id,a) values (78,73);
+insert into t (id,a) values (78,74);
+insert into t (id,a) values (78,75);
+insert into t (id,a) values (78,76);
+insert into t (id,a) values (78,77);
+insert into t (id,a) values (78,78);
+insert into t (id,a) values (78,79);
+insert into t (id,a) values (78,80);
+insert into t (id,a) values (78,81);
+insert into t (id,a) values (78,82);
+insert into t (id,a) values (78,83);
+insert into t (id,a) values (78,84);
+insert into t (id,a) values (78,85);
+insert into t (id,a) values (78,86);
+insert into t (id,a) values (78,87);
+insert into t (id,a) values (78,88);
+insert into t (id,a) values (78,89);
+insert into t (id,a) values (78,90);
+insert into t (id,a) values (78,91);
+insert into t (id,a) values (78,92);
+insert into t (id,a) values (78,93);
+insert into t (id,a) values (78,94);
+insert into t (id,a) values (78,95);
+insert into t (id,a) values (78,96);
+insert into t (id,a) values (78,97);
+insert into t (id,a) values (78,98);
+insert into t (id,a) values (78,99);
+insert into t (id,a) values (79,0);
+insert into t (id,a) values (79,1);
+insert into t (id,a) values (79,2);
+insert into t (id,a) values (79,3);
+insert into t (id,a) values (79,4);
+insert into t (id,a) values (79,5);
+insert into t (id,a) values (79,6);
+insert into t (id,a) values (79,7);
+insert into t (id,a) values (79,8);
+insert into t (id,a) values (79,9);
+insert into t (id,a) values (79,10);
+insert into t (id,a) values (79,11);
+insert into t (id,a) values (79,12);
+insert into t (id,a) values (79,13);
+insert into t (id,a) values (79,14);
+insert into t (id,a) values (79,15);
+insert into t (id,a) values (79,16);
+insert into t (id,a) values (79,17);
+insert into t (id,a) values (79,18);
+insert into t (id,a) values (79,19);
+insert into t (id,a) values (79,20);
+insert into t (id,a) values (79,21);
+insert into t (id,a) values (79,22);
+insert into t (id,a) values (79,23);
+insert into t (id,a) values (79,24);
+insert into t (id,a) values (79,25);
+insert into t (id,a) values (79,26);
+insert into t (id,a) values (79,27);
+insert into t (id,a) values (79,28);
+insert into t (id,a) values (79,29);
+insert into t (id,a) values (79,30);
+insert into t (id,a) values (79,31);
+insert into t (id,a) values (79,32);
+insert into t (id,a) values (79,33);
+insert into t (id,a) values (79,34);
+insert into t (id,a) values (79,35);
+insert into t (id,a) values (79,36);
+insert into t (id,a) values (79,37);
+insert into t (id,a) values (79,38);
+insert into t (id,a) values (79,39);
+insert into t (id,a) values (79,40);
+insert into t (id,a) values (79,41);
+insert into t (id,a) values (79,42);
+insert into t (id,a) values (79,43);
+insert into t (id,a) values (79,44);
+insert into t (id,a) values (79,45);
+insert into t (id,a) values (79,46);
+insert into t (id,a) values (79,47);
+insert into t (id,a) values (79,48);
+insert into t (id,a) values (79,49);
+insert into t (id,a) values (79,50);
+insert into t (id,a) values (79,51);
+insert into t (id,a) values (79,52);
+insert into t (id,a) values (79,53);
+insert into t (id,a) values (79,54);
+insert into t (id,a) values (79,55);
+insert into t (id,a) values (79,56);
+insert into t (id,a) values (79,57);
+insert into t (id,a) values (79,58);
+insert into t (id,a) values (79,59);
+insert into t (id,a) values (79,60);
+insert into t (id,a) values (79,61);
+insert into t (id,a) values (79,62);
+insert into t (id,a) values (79,63);
+insert into t (id,a) values (79,64);
+insert into t (id,a) values (79,65);
+insert into t (id,a) values (79,66);
+insert into t (id,a) values (79,67);
+insert into t (id,a) values (79,68);
+insert into t (id,a) values (79,69);
+insert into t (id,a) values (79,70);
+insert into t (id,a) values (79,71);
+insert into t (id,a) values (79,72);
+insert into t (id,a) values (79,73);
+insert into t (id,a) values (79,74);
+insert into t (id,a) values (79,75);
+insert into t (id,a) values (79,76);
+insert into t (id,a) values (79,77);
+insert into t (id,a) values (79,78);
+insert into t (id,a) values (79,79);
+insert into t (id,a) values (79,80);
+insert into t (id,a) values (79,81);
+insert into t (id,a) values (79,82);
+insert into t (id,a) values (79,83);
+insert into t (id,a) values (79,84);
+insert into t (id,a) values (79,85);
+insert into t (id,a) values (79,86);
+insert into t (id,a) values (79,87);
+insert into t (id,a) values (79,88);
+insert into t (id,a) values (79,89);
+insert into t (id,a) values (79,90);
+insert into t (id,a) values (79,91);
+insert into t (id,a) values (79,92);
+insert into t (id,a) values (79,93);
+insert into t (id,a) values (79,94);
+insert into t (id,a) values (79,95);
+insert into t (id,a) values (79,96);
+insert into t (id,a) values (79,97);
+insert into t (id,a) values (79,98);
+insert into t (id,a) values (79,99);
+insert into t (id,a) values (80,0);
+insert into t (id,a) values (80,1);
+insert into t (id,a) values (80,2);
+insert into t (id,a) values (80,3);
+insert into t (id,a) values (80,4);
+insert into t (id,a) values (80,5);
+insert into t (id,a) values (80,6);
+insert into t (id,a) values (80,7);
+insert into t (id,a) values (80,8);
+insert into t (id,a) values (80,9);
+insert into t (id,a) values (80,10);
+insert into t (id,a) values (80,11);
+insert into t (id,a) values (80,12);
+insert into t (id,a) values (80,13);
+insert into t (id,a) values (80,14);
+insert into t (id,a) values (80,15);
+insert into t (id,a) values (80,16);
+insert into t (id,a) values (80,17);
+insert into t (id,a) values (80,18);
+insert into t (id,a) values (80,19);
+insert into t (id,a) values (80,20);
+insert into t (id,a) values (80,21);
+insert into t (id,a) values (80,22);
+insert into t (id,a) values (80,23);
+insert into t (id,a) values (80,24);
+insert into t (id,a) values (80,25);
+insert into t (id,a) values (80,26);
+insert into t (id,a) values (80,27);
+insert into t (id,a) values (80,28);
+insert into t (id,a) values (80,29);
+insert into t (id,a) values (80,30);
+insert into t (id,a) values (80,31);
+insert into t (id,a) values (80,32);
+insert into t (id,a) values (80,33);
+insert into t (id,a) values (80,34);
+insert into t (id,a) values (80,35);
+insert into t (id,a) values (80,36);
+insert into t (id,a) values (80,37);
+insert into t (id,a) values (80,38);
+insert into t (id,a) values (80,39);
+insert into t (id,a) values (80,40);
+insert into t (id,a) values (80,41);
+insert into t (id,a) values (80,42);
+insert into t (id,a) values (80,43);
+insert into t (id,a) values (80,44);
+insert into t (id,a) values (80,45);
+insert into t (id,a) values (80,46);
+insert into t (id,a) values (80,47);
+insert into t (id,a) values (80,48);
+insert into t (id,a) values (80,49);
+insert into t (id,a) values (80,50);
+insert into t (id,a) values (80,51);
+insert into t (id,a) values (80,52);
+insert into t (id,a) values (80,53);
+insert into t (id,a) values (80,54);
+insert into t (id,a) values (80,55);
+insert into t (id,a) values (80,56);
+insert into t (id,a) values (80,57);
+insert into t (id,a) values (80,58);
+insert into t (id,a) values (80,59);
+insert into t (id,a) values (80,60);
+insert into t (id,a) values (80,61);
+insert into t (id,a) values (80,62);
+insert into t (id,a) values (80,63);
+insert into t (id,a) values (80,64);
+insert into t (id,a) values (80,65);
+insert into t (id,a) values (80,66);
+insert into t (id,a) values (80,67);
+insert into t (id,a) values (80,68);
+insert into t (id,a) values (80,69);
+insert into t (id,a) values (80,70);
+insert into t (id,a) values (80,71);
+insert into t (id,a) values (80,72);
+insert into t (id,a) values (80,73);
+insert into t (id,a) values (80,74);
+insert into t (id,a) values (80,75);
+insert into t (id,a) values (80,76);
+insert into t (id,a) values (80,77);
+insert into t (id,a) values (80,78);
+insert into t (id,a) values (80,79);
+insert into t (id,a) values (80,80);
+insert into t (id,a) values (80,81);
+insert into t (id,a) values (80,82);
+insert into t (id,a) values (80,83);
+insert into t (id,a) values (80,84);
+insert into t (id,a) values (80,85);
+insert into t (id,a) values (80,86);
+insert into t (id,a) values (80,87);
+insert into t (id,a) values (80,88);
+insert into t (id,a) values (80,89);
+insert into t (id,a) values (80,90);
+insert into t (id,a) values (80,91);
+insert into t (id,a) values (80,92);
+insert into t (id,a) values (80,93);
+insert into t (id,a) values (80,94);
+insert into t (id,a) values (80,95);
+insert into t (id,a) values (80,96);
+insert into t (id,a) values (80,97);
+insert into t (id,a) values (80,98);
+insert into t (id,a) values (80,99);
+insert into t (id,a) values (81,0);
+insert into t (id,a) values (81,1);
+insert into t (id,a) values (81,2);
+insert into t (id,a) values (81,3);
+insert into t (id,a) values (81,4);
+insert into t (id,a) values (81,5);
+insert into t (id,a) values (81,6);
+insert into t (id,a) values (81,7);
+insert into t (id,a) values (81,8);
+insert into t (id,a) values (81,9);
+insert into t (id,a) values (81,10);
+insert into t (id,a) values (81,11);
+insert into t (id,a) values (81,12);
+insert into t (id,a) values (81,13);
+insert into t (id,a) values (81,14);
+insert into t (id,a) values (81,15);
+insert into t (id,a) values (81,16);
+insert into t (id,a) values (81,17);
+insert into t (id,a) values (81,18);
+insert into t (id,a) values (81,19);
+insert into t (id,a) values (81,20);
+insert into t (id,a) values (81,21);
+insert into t (id,a) values (81,22);
+insert into t (id,a) values (81,23);
+insert into t (id,a) values (81,24);
+insert into t (id,a) values (81,25);
+insert into t (id,a) values (81,26);
+insert into t (id,a) values (81,27);
+insert into t (id,a) values (81,28);
+insert into t (id,a) values (81,29);
+insert into t (id,a) values (81,30);
+insert into t (id,a) values (81,31);
+insert into t (id,a) values (81,32);
+insert into t (id,a) values (81,33);
+insert into t (id,a) values (81,34);
+insert into t (id,a) values (81,35);
+insert into t (id,a) values (81,36);
+insert into t (id,a) values (81,37);
+insert into t (id,a) values (81,38);
+insert into t (id,a) values (81,39);
+insert into t (id,a) values (81,40);
+insert into t (id,a) values (81,41);
+insert into t (id,a) values (81,42);
+insert into t (id,a) values (81,43);
+insert into t (id,a) values (81,44);
+insert into t (id,a) values (81,45);
+insert into t (id,a) values (81,46);
+insert into t (id,a) values (81,47);
+insert into t (id,a) values (81,48);
+insert into t (id,a) values (81,49);
+insert into t (id,a) values (81,50);
+insert into t (id,a) values (81,51);
+insert into t (id,a) values (81,52);
+insert into t (id,a) values (81,53);
+insert into t (id,a) values (81,54);
+insert into t (id,a) values (81,55);
+insert into t (id,a) values (81,56);
+insert into t (id,a) values (81,57);
+insert into t (id,a) values (81,58);
+insert into t (id,a) values (81,59);
+insert into t (id,a) values (81,60);
+insert into t (id,a) values (81,61);
+insert into t (id,a) values (81,62);
+insert into t (id,a) values (81,63);
+insert into t (id,a) values (81,64);
+insert into t (id,a) values (81,65);
+insert into t (id,a) values (81,66);
+insert into t (id,a) values (81,67);
+insert into t (id,a) values (81,68);
+insert into t (id,a) values (81,69);
+insert into t (id,a) values (81,70);
+insert into t (id,a) values (81,71);
+insert into t (id,a) values (81,72);
+insert into t (id,a) values (81,73);
+insert into t (id,a) values (81,74);
+insert into t (id,a) values (81,75);
+insert into t (id,a) values (81,76);
+insert into t (id,a) values (81,77);
+insert into t (id,a) values (81,78);
+insert into t (id,a) values (81,79);
+insert into t (id,a) values (81,80);
+insert into t (id,a) values (81,81);
+insert into t (id,a) values (81,82);
+insert into t (id,a) values (81,83);
+insert into t (id,a) values (81,84);
+insert into t (id,a) values (81,85);
+insert into t (id,a) values (81,86);
+insert into t (id,a) values (81,87);
+insert into t (id,a) values (81,88);
+insert into t (id,a) values (81,89);
+insert into t (id,a) values (81,90);
+insert into t (id,a) values (81,91);
+insert into t (id,a) values (81,92);
+insert into t (id,a) values (81,93);
+insert into t (id,a) values (81,94);
+insert into t (id,a) values (81,95);
+insert into t (id,a) values (81,96);
+insert into t (id,a) values (81,97);
+insert into t (id,a) values (81,98);
+insert into t (id,a) values (81,99);
+insert into t (id,a) values (82,0);
+insert into t (id,a) values (82,1);
+insert into t (id,a) values (82,2);
+insert into t (id,a) values (82,3);
+insert into t (id,a) values (82,4);
+insert into t (id,a) values (82,5);
+insert into t (id,a) values (82,6);
+insert into t (id,a) values (82,7);
+insert into t (id,a) values (82,8);
+insert into t (id,a) values (82,9);
+insert into t (id,a) values (82,10);
+insert into t (id,a) values (82,11);
+insert into t (id,a) values (82,12);
+insert into t (id,a) values (82,13);
+insert into t (id,a) values (82,14);
+insert into t (id,a) values (82,15);
+insert into t (id,a) values (82,16);
+insert into t (id,a) values (82,17);
+insert into t (id,a) values (82,18);
+insert into t (id,a) values (82,19);
+insert into t (id,a) values (82,20);
+insert into t (id,a) values (82,21);
+insert into t (id,a) values (82,22);
+insert into t (id,a) values (82,23);
+insert into t (id,a) values (82,24);
+insert into t (id,a) values (82,25);
+insert into t (id,a) values (82,26);
+insert into t (id,a) values (82,27);
+insert into t (id,a) values (82,28);
+insert into t (id,a) values (82,29);
+insert into t (id,a) values (82,30);
+insert into t (id,a) values (82,31);
+insert into t (id,a) values (82,32);
+insert into t (id,a) values (82,33);
+insert into t (id,a) values (82,34);
+insert into t (id,a) values (82,35);
+insert into t (id,a) values (82,36);
+insert into t (id,a) values (82,37);
+insert into t (id,a) values (82,38);
+insert into t (id,a) values (82,39);
+insert into t (id,a) values (82,40);
+insert into t (id,a) values (82,41);
+insert into t (id,a) values (82,42);
+insert into t (id,a) values (82,43);
+insert into t (id,a) values (82,44);
+insert into t (id,a) values (82,45);
+insert into t (id,a) values (82,46);
+insert into t (id,a) values (82,47);
+insert into t (id,a) values (82,48);
+insert into t (id,a) values (82,49);
+insert into t (id,a) values (82,50);
+insert into t (id,a) values (82,51);
+insert into t (id,a) values (82,52);
+insert into t (id,a) values (82,53);
+insert into t (id,a) values (82,54);
+insert into t (id,a) values (82,55);
+insert into t (id,a) values (82,56);
+insert into t (id,a) values (82,57);
+insert into t (id,a) values (82,58);
+insert into t (id,a) values (82,59);
+insert into t (id,a) values (82,60);
+insert into t (id,a) values (82,61);
+insert into t (id,a) values (82,62);
+insert into t (id,a) values (82,63);
+insert into t (id,a) values (82,64);
+insert into t (id,a) values (82,65);
+insert into t (id,a) values (82,66);
+insert into t (id,a) values (82,67);
+insert into t (id,a) values (82,68);
+insert into t (id,a) values (82,69);
+insert into t (id,a) values (82,70);
+insert into t (id,a) values (82,71);
+insert into t (id,a) values (82,72);
+insert into t (id,a) values (82,73);
+insert into t (id,a) values (82,74);
+insert into t (id,a) values (82,75);
+insert into t (id,a) values (82,76);
+insert into t (id,a) values (82,77);
+insert into t (id,a) values (82,78);
+insert into t (id,a) values (82,79);
+insert into t (id,a) values (82,80);
+insert into t (id,a) values (82,81);
+insert into t (id,a) values (82,82);
+insert into t (id,a) values (82,83);
+insert into t (id,a) values (82,84);
+insert into t (id,a) values (82,85);
+insert into t (id,a) values (82,86);
+insert into t (id,a) values (82,87);
+insert into t (id,a) values (82,88);
+insert into t (id,a) values (82,89);
+insert into t (id,a) values (82,90);
+insert into t (id,a) values (82,91);
+insert into t (id,a) values (82,92);
+insert into t (id,a) values (82,93);
+insert into t (id,a) values (82,94);
+insert into t (id,a) values (82,95);
+insert into t (id,a) values (82,96);
+insert into t (id,a) values (82,97);
+insert into t (id,a) values (82,98);
+insert into t (id,a) values (82,99);
+insert into t (id,a) values (83,0);
+insert into t (id,a) values (83,1);
+insert into t (id,a) values (83,2);
+insert into t (id,a) values (83,3);
+insert into t (id,a) values (83,4);
+insert into t (id,a) values (83,5);
+insert into t (id,a) values (83,6);
+insert into t (id,a) values (83,7);
+insert into t (id,a) values (83,8);
+insert into t (id,a) values (83,9);
+insert into t (id,a) values (83,10);
+insert into t (id,a) values (83,11);
+insert into t (id,a) values (83,12);
+insert into t (id,a) values (83,13);
+insert into t (id,a) values (83,14);
+insert into t (id,a) values (83,15);
+insert into t (id,a) values (83,16);
+insert into t (id,a) values (83,17);
+insert into t (id,a) values (83,18);
+insert into t (id,a) values (83,19);
+insert into t (id,a) values (83,20);
+insert into t (id,a) values (83,21);
+insert into t (id,a) values (83,22);
+insert into t (id,a) values (83,23);
+insert into t (id,a) values (83,24);
+insert into t (id,a) values (83,25);
+insert into t (id,a) values (83,26);
+insert into t (id,a) values (83,27);
+insert into t (id,a) values (83,28);
+insert into t (id,a) values (83,29);
+insert into t (id,a) values (83,30);
+insert into t (id,a) values (83,31);
+insert into t (id,a) values (83,32);
+insert into t (id,a) values (83,33);
+insert into t (id,a) values (83,34);
+insert into t (id,a) values (83,35);
+insert into t (id,a) values (83,36);
+insert into t (id,a) values (83,37);
+insert into t (id,a) values (83,38);
+insert into t (id,a) values (83,39);
+insert into t (id,a) values (83,40);
+insert into t (id,a) values (83,41);
+insert into t (id,a) values (83,42);
+insert into t (id,a) values (83,43);
+insert into t (id,a) values (83,44);
+insert into t (id,a) values (83,45);
+insert into t (id,a) values (83,46);
+insert into t (id,a) values (83,47);
+insert into t (id,a) values (83,48);
+insert into t (id,a) values (83,49);
+insert into t (id,a) values (83,50);
+insert into t (id,a) values (83,51);
+insert into t (id,a) values (83,52);
+insert into t (id,a) values (83,53);
+insert into t (id,a) values (83,54);
+insert into t (id,a) values (83,55);
+insert into t (id,a) values (83,56);
+insert into t (id,a) values (83,57);
+insert into t (id,a) values (83,58);
+insert into t (id,a) values (83,59);
+insert into t (id,a) values (83,60);
+insert into t (id,a) values (83,61);
+insert into t (id,a) values (83,62);
+insert into t (id,a) values (83,63);
+insert into t (id,a) values (83,64);
+insert into t (id,a) values (83,65);
+insert into t (id,a) values (83,66);
+insert into t (id,a) values (83,67);
+insert into t (id,a) values (83,68);
+insert into t (id,a) values (83,69);
+insert into t (id,a) values (83,70);
+insert into t (id,a) values (83,71);
+insert into t (id,a) values (83,72);
+insert into t (id,a) values (83,73);
+insert into t (id,a) values (83,74);
+insert into t (id,a) values (83,75);
+insert into t (id,a) values (83,76);
+insert into t (id,a) values (83,77);
+insert into t (id,a) values (83,78);
+insert into t (id,a) values (83,79);
+insert into t (id,a) values (83,80);
+insert into t (id,a) values (83,81);
+insert into t (id,a) values (83,82);
+insert into t (id,a) values (83,83);
+insert into t (id,a) values (83,84);
+insert into t (id,a) values (83,85);
+insert into t (id,a) values (83,86);
+insert into t (id,a) values (83,87);
+insert into t (id,a) values (83,88);
+insert into t (id,a) values (83,89);
+insert into t (id,a) values (83,90);
+insert into t (id,a) values (83,91);
+insert into t (id,a) values (83,92);
+insert into t (id,a) values (83,93);
+insert into t (id,a) values (83,94);
+insert into t (id,a) values (83,95);
+insert into t (id,a) values (83,96);
+insert into t (id,a) values (83,97);
+insert into t (id,a) values (83,98);
+insert into t (id,a) values (83,99);
+insert into t (id,a) values (84,0);
+insert into t (id,a) values (84,1);
+insert into t (id,a) values (84,2);
+insert into t (id,a) values (84,3);
+insert into t (id,a) values (84,4);
+insert into t (id,a) values (84,5);
+insert into t (id,a) values (84,6);
+insert into t (id,a) values (84,7);
+insert into t (id,a) values (84,8);
+insert into t (id,a) values (84,9);
+insert into t (id,a) values (84,10);
+insert into t (id,a) values (84,11);
+insert into t (id,a) values (84,12);
+insert into t (id,a) values (84,13);
+insert into t (id,a) values (84,14);
+insert into t (id,a) values (84,15);
+insert into t (id,a) values (84,16);
+insert into t (id,a) values (84,17);
+insert into t (id,a) values (84,18);
+insert into t (id,a) values (84,19);
+insert into t (id,a) values (84,20);
+insert into t (id,a) values (84,21);
+insert into t (id,a) values (84,22);
+insert into t (id,a) values (84,23);
+insert into t (id,a) values (84,24);
+insert into t (id,a) values (84,25);
+insert into t (id,a) values (84,26);
+insert into t (id,a) values (84,27);
+insert into t (id,a) values (84,28);
+insert into t (id,a) values (84,29);
+insert into t (id,a) values (84,30);
+insert into t (id,a) values (84,31);
+insert into t (id,a) values (84,32);
+insert into t (id,a) values (84,33);
+insert into t (id,a) values (84,34);
+insert into t (id,a) values (84,35);
+insert into t (id,a) values (84,36);
+insert into t (id,a) values (84,37);
+insert into t (id,a) values (84,38);
+insert into t (id,a) values (84,39);
+insert into t (id,a) values (84,40);
+insert into t (id,a) values (84,41);
+insert into t (id,a) values (84,42);
+insert into t (id,a) values (84,43);
+insert into t (id,a) values (84,44);
+insert into t (id,a) values (84,45);
+insert into t (id,a) values (84,46);
+insert into t (id,a) values (84,47);
+insert into t (id,a) values (84,48);
+insert into t (id,a) values (84,49);
+insert into t (id,a) values (84,50);
+insert into t (id,a) values (84,51);
+insert into t (id,a) values (84,52);
+insert into t (id,a) values (84,53);
+insert into t (id,a) values (84,54);
+insert into t (id,a) values (84,55);
+insert into t (id,a) values (84,56);
+insert into t (id,a) values (84,57);
+insert into t (id,a) values (84,58);
+insert into t (id,a) values (84,59);
+insert into t (id,a) values (84,60);
+insert into t (id,a) values (84,61);
+insert into t (id,a) values (84,62);
+insert into t (id,a) values (84,63);
+insert into t (id,a) values (84,64);
+insert into t (id,a) values (84,65);
+insert into t (id,a) values (84,66);
+insert into t (id,a) values (84,67);
+insert into t (id,a) values (84,68);
+insert into t (id,a) values (84,69);
+insert into t (id,a) values (84,70);
+insert into t (id,a) values (84,71);
+insert into t (id,a) values (84,72);
+insert into t (id,a) values (84,73);
+insert into t (id,a) values (84,74);
+insert into t (id,a) values (84,75);
+insert into t (id,a) values (84,76);
+insert into t (id,a) values (84,77);
+insert into t (id,a) values (84,78);
+insert into t (id,a) values (84,79);
+insert into t (id,a) values (84,80);
+insert into t (id,a) values (84,81);
+insert into t (id,a) values (84,82);
+insert into t (id,a) values (84,83);
+insert into t (id,a) values (84,84);
+insert into t (id,a) values (84,85);
+insert into t (id,a) values (84,86);
+insert into t (id,a) values (84,87);
+insert into t (id,a) values (84,88);
+insert into t (id,a) values (84,89);
+insert into t (id,a) values (84,90);
+insert into t (id,a) values (84,91);
+insert into t (id,a) values (84,92);
+insert into t (id,a) values (84,93);
+insert into t (id,a) values (84,94);
+insert into t (id,a) values (84,95);
+insert into t (id,a) values (84,96);
+insert into t (id,a) values (84,97);
+insert into t (id,a) values (84,98);
+insert into t (id,a) values (84,99);
+insert into t (id,a) values (85,0);
+insert into t (id,a) values (85,1);
+insert into t (id,a) values (85,2);
+insert into t (id,a) values (85,3);
+insert into t (id,a) values (85,4);
+insert into t (id,a) values (85,5);
+insert into t (id,a) values (85,6);
+insert into t (id,a) values (85,7);
+insert into t (id,a) values (85,8);
+insert into t (id,a) values (85,9);
+insert into t (id,a) values (85,10);
+insert into t (id,a) values (85,11);
+insert into t (id,a) values (85,12);
+insert into t (id,a) values (85,13);
+insert into t (id,a) values (85,14);
+insert into t (id,a) values (85,15);
+insert into t (id,a) values (85,16);
+insert into t (id,a) values (85,17);
+insert into t (id,a) values (85,18);
+insert into t (id,a) values (85,19);
+insert into t (id,a) values (85,20);
+insert into t (id,a) values (85,21);
+insert into t (id,a) values (85,22);
+insert into t (id,a) values (85,23);
+insert into t (id,a) values (85,24);
+insert into t (id,a) values (85,25);
+insert into t (id,a) values (85,26);
+insert into t (id,a) values (85,27);
+insert into t (id,a) values (85,28);
+insert into t (id,a) values (85,29);
+insert into t (id,a) values (85,30);
+insert into t (id,a) values (85,31);
+insert into t (id,a) values (85,32);
+insert into t (id,a) values (85,33);
+insert into t (id,a) values (85,34);
+insert into t (id,a) values (85,35);
+insert into t (id,a) values (85,36);
+insert into t (id,a) values (85,37);
+insert into t (id,a) values (85,38);
+insert into t (id,a) values (85,39);
+insert into t (id,a) values (85,40);
+insert into t (id,a) values (85,41);
+insert into t (id,a) values (85,42);
+insert into t (id,a) values (85,43);
+insert into t (id,a) values (85,44);
+insert into t (id,a) values (85,45);
+insert into t (id,a) values (85,46);
+insert into t (id,a) values (85,47);
+insert into t (id,a) values (85,48);
+insert into t (id,a) values (85,49);
+insert into t (id,a) values (85,50);
+insert into t (id,a) values (85,51);
+insert into t (id,a) values (85,52);
+insert into t (id,a) values (85,53);
+insert into t (id,a) values (85,54);
+insert into t (id,a) values (85,55);
+insert into t (id,a) values (85,56);
+insert into t (id,a) values (85,57);
+insert into t (id,a) values (85,58);
+insert into t (id,a) values (85,59);
+insert into t (id,a) values (85,60);
+insert into t (id,a) values (85,61);
+insert into t (id,a) values (85,62);
+insert into t (id,a) values (85,63);
+insert into t (id,a) values (85,64);
+insert into t (id,a) values (85,65);
+insert into t (id,a) values (85,66);
+insert into t (id,a) values (85,67);
+insert into t (id,a) values (85,68);
+insert into t (id,a) values (85,69);
+insert into t (id,a) values (85,70);
+insert into t (id,a) values (85,71);
+insert into t (id,a) values (85,72);
+insert into t (id,a) values (85,73);
+insert into t (id,a) values (85,74);
+insert into t (id,a) values (85,75);
+insert into t (id,a) values (85,76);
+insert into t (id,a) values (85,77);
+insert into t (id,a) values (85,78);
+insert into t (id,a) values (85,79);
+insert into t (id,a) values (85,80);
+insert into t (id,a) values (85,81);
+insert into t (id,a) values (85,82);
+insert into t (id,a) values (85,83);
+insert into t (id,a) values (85,84);
+insert into t (id,a) values (85,85);
+insert into t (id,a) values (85,86);
+insert into t (id,a) values (85,87);
+insert into t (id,a) values (85,88);
+insert into t (id,a) values (85,89);
+insert into t (id,a) values (85,90);
+insert into t (id,a) values (85,91);
+insert into t (id,a) values (85,92);
+insert into t (id,a) values (85,93);
+insert into t (id,a) values (85,94);
+insert into t (id,a) values (85,95);
+insert into t (id,a) values (85,96);
+insert into t (id,a) values (85,97);
+insert into t (id,a) values (85,98);
+insert into t (id,a) values (85,99);
+insert into t (id,a) values (86,0);
+insert into t (id,a) values (86,1);
+insert into t (id,a) values (86,2);
+insert into t (id,a) values (86,3);
+insert into t (id,a) values (86,4);
+insert into t (id,a) values (86,5);
+insert into t (id,a) values (86,6);
+insert into t (id,a) values (86,7);
+insert into t (id,a) values (86,8);
+insert into t (id,a) values (86,9);
+insert into t (id,a) values (86,10);
+insert into t (id,a) values (86,11);
+insert into t (id,a) values (86,12);
+insert into t (id,a) values (86,13);
+insert into t (id,a) values (86,14);
+insert into t (id,a) values (86,15);
+insert into t (id,a) values (86,16);
+insert into t (id,a) values (86,17);
+insert into t (id,a) values (86,18);
+insert into t (id,a) values (86,19);
+insert into t (id,a) values (86,20);
+insert into t (id,a) values (86,21);
+insert into t (id,a) values (86,22);
+insert into t (id,a) values (86,23);
+insert into t (id,a) values (86,24);
+insert into t (id,a) values (86,25);
+insert into t (id,a) values (86,26);
+insert into t (id,a) values (86,27);
+insert into t (id,a) values (86,28);
+insert into t (id,a) values (86,29);
+insert into t (id,a) values (86,30);
+insert into t (id,a) values (86,31);
+insert into t (id,a) values (86,32);
+insert into t (id,a) values (86,33);
+insert into t (id,a) values (86,34);
+insert into t (id,a) values (86,35);
+insert into t (id,a) values (86,36);
+insert into t (id,a) values (86,37);
+insert into t (id,a) values (86,38);
+insert into t (id,a) values (86,39);
+insert into t (id,a) values (86,40);
+insert into t (id,a) values (86,41);
+insert into t (id,a) values (86,42);
+insert into t (id,a) values (86,43);
+insert into t (id,a) values (86,44);
+insert into t (id,a) values (86,45);
+insert into t (id,a) values (86,46);
+insert into t (id,a) values (86,47);
+insert into t (id,a) values (86,48);
+insert into t (id,a) values (86,49);
+insert into t (id,a) values (86,50);
+insert into t (id,a) values (86,51);
+insert into t (id,a) values (86,52);
+insert into t (id,a) values (86,53);
+insert into t (id,a) values (86,54);
+insert into t (id,a) values (86,55);
+insert into t (id,a) values (86,56);
+insert into t (id,a) values (86,57);
+insert into t (id,a) values (86,58);
+insert into t (id,a) values (86,59);
+insert into t (id,a) values (86,60);
+insert into t (id,a) values (86,61);
+insert into t (id,a) values (86,62);
+insert into t (id,a) values (86,63);
+insert into t (id,a) values (86,64);
+insert into t (id,a) values (86,65);
+insert into t (id,a) values (86,66);
+insert into t (id,a) values (86,67);
+insert into t (id,a) values (86,68);
+insert into t (id,a) values (86,69);
+insert into t (id,a) values (86,70);
+insert into t (id,a) values (86,71);
+insert into t (id,a) values (86,72);
+insert into t (id,a) values (86,73);
+insert into t (id,a) values (86,74);
+insert into t (id,a) values (86,75);
+insert into t (id,a) values (86,76);
+insert into t (id,a) values (86,77);
+insert into t (id,a) values (86,78);
+insert into t (id,a) values (86,79);
+insert into t (id,a) values (86,80);
+insert into t (id,a) values (86,81);
+insert into t (id,a) values (86,82);
+insert into t (id,a) values (86,83);
+insert into t (id,a) values (86,84);
+insert into t (id,a) values (86,85);
+insert into t (id,a) values (86,86);
+insert into t (id,a) values (86,87);
+insert into t (id,a) values (86,88);
+insert into t (id,a) values (86,89);
+insert into t (id,a) values (86,90);
+insert into t (id,a) values (86,91);
+insert into t (id,a) values (86,92);
+insert into t (id,a) values (86,93);
+insert into t (id,a) values (86,94);
+insert into t (id,a) values (86,95);
+insert into t (id,a) values (86,96);
+insert into t (id,a) values (86,97);
+insert into t (id,a) values (86,98);
+insert into t (id,a) values (86,99);
+insert into t (id,a) values (87,0);
+insert into t (id,a) values (87,1);
+insert into t (id,a) values (87,2);
+insert into t (id,a) values (87,3);
+insert into t (id,a) values (87,4);
+insert into t (id,a) values (87,5);
+insert into t (id,a) values (87,6);
+insert into t (id,a) values (87,7);
+insert into t (id,a) values (87,8);
+insert into t (id,a) values (87,9);
+insert into t (id,a) values (87,10);
+insert into t (id,a) values (87,11);
+insert into t (id,a) values (87,12);
+insert into t (id,a) values (87,13);
+insert into t (id,a) values (87,14);
+insert into t (id,a) values (87,15);
+insert into t (id,a) values (87,16);
+insert into t (id,a) values (87,17);
+insert into t (id,a) values (87,18);
+insert into t (id,a) values (87,19);
+insert into t (id,a) values (87,20);
+insert into t (id,a) values (87,21);
+insert into t (id,a) values (87,22);
+insert into t (id,a) values (87,23);
+insert into t (id,a) values (87,24);
+insert into t (id,a) values (87,25);
+insert into t (id,a) values (87,26);
+insert into t (id,a) values (87,27);
+insert into t (id,a) values (87,28);
+insert into t (id,a) values (87,29);
+insert into t (id,a) values (87,30);
+insert into t (id,a) values (87,31);
+insert into t (id,a) values (87,32);
+insert into t (id,a) values (87,33);
+insert into t (id,a) values (87,34);
+insert into t (id,a) values (87,35);
+insert into t (id,a) values (87,36);
+insert into t (id,a) values (87,37);
+insert into t (id,a) values (87,38);
+insert into t (id,a) values (87,39);
+insert into t (id,a) values (87,40);
+insert into t (id,a) values (87,41);
+insert into t (id,a) values (87,42);
+insert into t (id,a) values (87,43);
+insert into t (id,a) values (87,44);
+insert into t (id,a) values (87,45);
+insert into t (id,a) values (87,46);
+insert into t (id,a) values (87,47);
+insert into t (id,a) values (87,48);
+insert into t (id,a) values (87,49);
+insert into t (id,a) values (87,50);
+insert into t (id,a) values (87,51);
+insert into t (id,a) values (87,52);
+insert into t (id,a) values (87,53);
+insert into t (id,a) values (87,54);
+insert into t (id,a) values (87,55);
+insert into t (id,a) values (87,56);
+insert into t (id,a) values (87,57);
+insert into t (id,a) values (87,58);
+insert into t (id,a) values (87,59);
+insert into t (id,a) values (87,60);
+insert into t (id,a) values (87,61);
+insert into t (id,a) values (87,62);
+insert into t (id,a) values (87,63);
+insert into t (id,a) values (87,64);
+insert into t (id,a) values (87,65);
+insert into t (id,a) values (87,66);
+insert into t (id,a) values (87,67);
+insert into t (id,a) values (87,68);
+insert into t (id,a) values (87,69);
+insert into t (id,a) values (87,70);
+insert into t (id,a) values (87,71);
+insert into t (id,a) values (87,72);
+insert into t (id,a) values (87,73);
+insert into t (id,a) values (87,74);
+insert into t (id,a) values (87,75);
+insert into t (id,a) values (87,76);
+insert into t (id,a) values (87,77);
+insert into t (id,a) values (87,78);
+insert into t (id,a) values (87,79);
+insert into t (id,a) values (87,80);
+insert into t (id,a) values (87,81);
+insert into t (id,a) values (87,82);
+insert into t (id,a) values (87,83);
+insert into t (id,a) values (87,84);
+insert into t (id,a) values (87,85);
+insert into t (id,a) values (87,86);
+insert into t (id,a) values (87,87);
+insert into t (id,a) values (87,88);
+insert into t (id,a) values (87,89);
+insert into t (id,a) values (87,90);
+insert into t (id,a) values (87,91);
+insert into t (id,a) values (87,92);
+insert into t (id,a) values (87,93);
+insert into t (id,a) values (87,94);
+insert into t (id,a) values (87,95);
+insert into t (id,a) values (87,96);
+insert into t (id,a) values (87,97);
+insert into t (id,a) values (87,98);
+insert into t (id,a) values (87,99);
+insert into t (id,a) values (88,0);
+insert into t (id,a) values (88,1);
+insert into t (id,a) values (88,2);
+insert into t (id,a) values (88,3);
+insert into t (id,a) values (88,4);
+insert into t (id,a) values (88,5);
+insert into t (id,a) values (88,6);
+insert into t (id,a) values (88,7);
+insert into t (id,a) values (88,8);
+insert into t (id,a) values (88,9);
+insert into t (id,a) values (88,10);
+insert into t (id,a) values (88,11);
+insert into t (id,a) values (88,12);
+insert into t (id,a) values (88,13);
+insert into t (id,a) values (88,14);
+insert into t (id,a) values (88,15);
+insert into t (id,a) values (88,16);
+insert into t (id,a) values (88,17);
+insert into t (id,a) values (88,18);
+insert into t (id,a) values (88,19);
+insert into t (id,a) values (88,20);
+insert into t (id,a) values (88,21);
+insert into t (id,a) values (88,22);
+insert into t (id,a) values (88,23);
+insert into t (id,a) values (88,24);
+insert into t (id,a) values (88,25);
+insert into t (id,a) values (88,26);
+insert into t (id,a) values (88,27);
+insert into t (id,a) values (88,28);
+insert into t (id,a) values (88,29);
+insert into t (id,a) values (88,30);
+insert into t (id,a) values (88,31);
+insert into t (id,a) values (88,32);
+insert into t (id,a) values (88,33);
+insert into t (id,a) values (88,34);
+insert into t (id,a) values (88,35);
+insert into t (id,a) values (88,36);
+insert into t (id,a) values (88,37);
+insert into t (id,a) values (88,38);
+insert into t (id,a) values (88,39);
+insert into t (id,a) values (88,40);
+insert into t (id,a) values (88,41);
+insert into t (id,a) values (88,42);
+insert into t (id,a) values (88,43);
+insert into t (id,a) values (88,44);
+insert into t (id,a) values (88,45);
+insert into t (id,a) values (88,46);
+insert into t (id,a) values (88,47);
+insert into t (id,a) values (88,48);
+insert into t (id,a) values (88,49);
+insert into t (id,a) values (88,50);
+insert into t (id,a) values (88,51);
+insert into t (id,a) values (88,52);
+insert into t (id,a) values (88,53);
+insert into t (id,a) values (88,54);
+insert into t (id,a) values (88,55);
+insert into t (id,a) values (88,56);
+insert into t (id,a) values (88,57);
+insert into t (id,a) values (88,58);
+insert into t (id,a) values (88,59);
+insert into t (id,a) values (88,60);
+insert into t (id,a) values (88,61);
+insert into t (id,a) values (88,62);
+insert into t (id,a) values (88,63);
+insert into t (id,a) values (88,64);
+insert into t (id,a) values (88,65);
+insert into t (id,a) values (88,66);
+insert into t (id,a) values (88,67);
+insert into t (id,a) values (88,68);
+insert into t (id,a) values (88,69);
+insert into t (id,a) values (88,70);
+insert into t (id,a) values (88,71);
+insert into t (id,a) values (88,72);
+insert into t (id,a) values (88,73);
+insert into t (id,a) values (88,74);
+insert into t (id,a) values (88,75);
+insert into t (id,a) values (88,76);
+insert into t (id,a) values (88,77);
+insert into t (id,a) values (88,78);
+insert into t (id,a) values (88,79);
+insert into t (id,a) values (88,80);
+insert into t (id,a) values (88,81);
+insert into t (id,a) values (88,82);
+insert into t (id,a) values (88,83);
+insert into t (id,a) values (88,84);
+insert into t (id,a) values (88,85);
+insert into t (id,a) values (88,86);
+insert into t (id,a) values (88,87);
+insert into t (id,a) values (88,88);
+insert into t (id,a) values (88,89);
+insert into t (id,a) values (88,90);
+insert into t (id,a) values (88,91);
+insert into t (id,a) values (88,92);
+insert into t (id,a) values (88,93);
+insert into t (id,a) values (88,94);
+insert into t (id,a) values (88,95);
+insert into t (id,a) values (88,96);
+insert into t (id,a) values (88,97);
+insert into t (id,a) values (88,98);
+insert into t (id,a) values (88,99);
+insert into t (id,a) values (89,0);
+insert into t (id,a) values (89,1);
+insert into t (id,a) values (89,2);
+insert into t (id,a) values (89,3);
+insert into t (id,a) values (89,4);
+insert into t (id,a) values (89,5);
+insert into t (id,a) values (89,6);
+insert into t (id,a) values (89,7);
+insert into t (id,a) values (89,8);
+insert into t (id,a) values (89,9);
+insert into t (id,a) values (89,10);
+insert into t (id,a) values (89,11);
+insert into t (id,a) values (89,12);
+insert into t (id,a) values (89,13);
+insert into t (id,a) values (89,14);
+insert into t (id,a) values (89,15);
+insert into t (id,a) values (89,16);
+insert into t (id,a) values (89,17);
+insert into t (id,a) values (89,18);
+insert into t (id,a) values (89,19);
+insert into t (id,a) values (89,20);
+insert into t (id,a) values (89,21);
+insert into t (id,a) values (89,22);
+insert into t (id,a) values (89,23);
+insert into t (id,a) values (89,24);
+insert into t (id,a) values (89,25);
+insert into t (id,a) values (89,26);
+insert into t (id,a) values (89,27);
+insert into t (id,a) values (89,28);
+insert into t (id,a) values (89,29);
+insert into t (id,a) values (89,30);
+insert into t (id,a) values (89,31);
+insert into t (id,a) values (89,32);
+insert into t (id,a) values (89,33);
+insert into t (id,a) values (89,34);
+insert into t (id,a) values (89,35);
+insert into t (id,a) values (89,36);
+insert into t (id,a) values (89,37);
+insert into t (id,a) values (89,38);
+insert into t (id,a) values (89,39);
+insert into t (id,a) values (89,40);
+insert into t (id,a) values (89,41);
+insert into t (id,a) values (89,42);
+insert into t (id,a) values (89,43);
+insert into t (id,a) values (89,44);
+insert into t (id,a) values (89,45);
+insert into t (id,a) values (89,46);
+insert into t (id,a) values (89,47);
+insert into t (id,a) values (89,48);
+insert into t (id,a) values (89,49);
+insert into t (id,a) values (89,50);
+insert into t (id,a) values (89,51);
+insert into t (id,a) values (89,52);
+insert into t (id,a) values (89,53);
+insert into t (id,a) values (89,54);
+insert into t (id,a) values (89,55);
+insert into t (id,a) values (89,56);
+insert into t (id,a) values (89,57);
+insert into t (id,a) values (89,58);
+insert into t (id,a) values (89,59);
+insert into t (id,a) values (89,60);
+insert into t (id,a) values (89,61);
+insert into t (id,a) values (89,62);
+insert into t (id,a) values (89,63);
+insert into t (id,a) values (89,64);
+insert into t (id,a) values (89,65);
+insert into t (id,a) values (89,66);
+insert into t (id,a) values (89,67);
+insert into t (id,a) values (89,68);
+insert into t (id,a) values (89,69);
+insert into t (id,a) values (89,70);
+insert into t (id,a) values (89,71);
+insert into t (id,a) values (89,72);
+insert into t (id,a) values (89,73);
+insert into t (id,a) values (89,74);
+insert into t (id,a) values (89,75);
+insert into t (id,a) values (89,76);
+insert into t (id,a) values (89,77);
+insert into t (id,a) values (89,78);
+insert into t (id,a) values (89,79);
+insert into t (id,a) values (89,80);
+insert into t (id,a) values (89,81);
+insert into t (id,a) values (89,82);
+insert into t (id,a) values (89,83);
+insert into t (id,a) values (89,84);
+insert into t (id,a) values (89,85);
+insert into t (id,a) values (89,86);
+insert into t (id,a) values (89,87);
+insert into t (id,a) values (89,88);
+insert into t (id,a) values (89,89);
+insert into t (id,a) values (89,90);
+insert into t (id,a) values (89,91);
+insert into t (id,a) values (89,92);
+insert into t (id,a) values (89,93);
+insert into t (id,a) values (89,94);
+insert into t (id,a) values (89,95);
+insert into t (id,a) values (89,96);
+insert into t (id,a) values (89,97);
+insert into t (id,a) values (89,98);
+insert into t (id,a) values (89,99);
+insert into t (id,a) values (90,0);
+insert into t (id,a) values (90,1);
+insert into t (id,a) values (90,2);
+insert into t (id,a) values (90,3);
+insert into t (id,a) values (90,4);
+insert into t (id,a) values (90,5);
+insert into t (id,a) values (90,6);
+insert into t (id,a) values (90,7);
+insert into t (id,a) values (90,8);
+insert into t (id,a) values (90,9);
+insert into t (id,a) values (90,10);
+insert into t (id,a) values (90,11);
+insert into t (id,a) values (90,12);
+insert into t (id,a) values (90,13);
+insert into t (id,a) values (90,14);
+insert into t (id,a) values (90,15);
+insert into t (id,a) values (90,16);
+insert into t (id,a) values (90,17);
+insert into t (id,a) values (90,18);
+insert into t (id,a) values (90,19);
+insert into t (id,a) values (90,20);
+insert into t (id,a) values (90,21);
+insert into t (id,a) values (90,22);
+insert into t (id,a) values (90,23);
+insert into t (id,a) values (90,24);
+insert into t (id,a) values (90,25);
+insert into t (id,a) values (90,26);
+insert into t (id,a) values (90,27);
+insert into t (id,a) values (90,28);
+insert into t (id,a) values (90,29);
+insert into t (id,a) values (90,30);
+insert into t (id,a) values (90,31);
+insert into t (id,a) values (90,32);
+insert into t (id,a) values (90,33);
+insert into t (id,a) values (90,34);
+insert into t (id,a) values (90,35);
+insert into t (id,a) values (90,36);
+insert into t (id,a) values (90,37);
+insert into t (id,a) values (90,38);
+insert into t (id,a) values (90,39);
+insert into t (id,a) values (90,40);
+insert into t (id,a) values (90,41);
+insert into t (id,a) values (90,42);
+insert into t (id,a) values (90,43);
+insert into t (id,a) values (90,44);
+insert into t (id,a) values (90,45);
+insert into t (id,a) values (90,46);
+insert into t (id,a) values (90,47);
+insert into t (id,a) values (90,48);
+insert into t (id,a) values (90,49);
+insert into t (id,a) values (90,50);
+insert into t (id,a) values (90,51);
+insert into t (id,a) values (90,52);
+insert into t (id,a) values (90,53);
+insert into t (id,a) values (90,54);
+insert into t (id,a) values (90,55);
+insert into t (id,a) values (90,56);
+insert into t (id,a) values (90,57);
+insert into t (id,a) values (90,58);
+insert into t (id,a) values (90,59);
+insert into t (id,a) values (90,60);
+insert into t (id,a) values (90,61);
+insert into t (id,a) values (90,62);
+insert into t (id,a) values (90,63);
+insert into t (id,a) values (90,64);
+insert into t (id,a) values (90,65);
+insert into t (id,a) values (90,66);
+insert into t (id,a) values (90,67);
+insert into t (id,a) values (90,68);
+insert into t (id,a) values (90,69);
+insert into t (id,a) values (90,70);
+insert into t (id,a) values (90,71);
+insert into t (id,a) values (90,72);
+insert into t (id,a) values (90,73);
+insert into t (id,a) values (90,74);
+insert into t (id,a) values (90,75);
+insert into t (id,a) values (90,76);
+insert into t (id,a) values (90,77);
+insert into t (id,a) values (90,78);
+insert into t (id,a) values (90,79);
+insert into t (id,a) values (90,80);
+insert into t (id,a) values (90,81);
+insert into t (id,a) values (90,82);
+insert into t (id,a) values (90,83);
+insert into t (id,a) values (90,84);
+insert into t (id,a) values (90,85);
+insert into t (id,a) values (90,86);
+insert into t (id,a) values (90,87);
+insert into t (id,a) values (90,88);
+insert into t (id,a) values (90,89);
+insert into t (id,a) values (90,90);
+insert into t (id,a) values (90,91);
+insert into t (id,a) values (90,92);
+insert into t (id,a) values (90,93);
+insert into t (id,a) values (90,94);
+insert into t (id,a) values (90,95);
+insert into t (id,a) values (90,96);
+insert into t (id,a) values (90,97);
+insert into t (id,a) values (90,98);
+insert into t (id,a) values (90,99);
+insert into t (id,a) values (91,0);
+insert into t (id,a) values (91,1);
+insert into t (id,a) values (91,2);
+insert into t (id,a) values (91,3);
+insert into t (id,a) values (91,4);
+insert into t (id,a) values (91,5);
+insert into t (id,a) values (91,6);
+insert into t (id,a) values (91,7);
+insert into t (id,a) values (91,8);
+insert into t (id,a) values (91,9);
+insert into t (id,a) values (91,10);
+insert into t (id,a) values (91,11);
+insert into t (id,a) values (91,12);
+insert into t (id,a) values (91,13);
+insert into t (id,a) values (91,14);
+insert into t (id,a) values (91,15);
+insert into t (id,a) values (91,16);
+insert into t (id,a) values (91,17);
+insert into t (id,a) values (91,18);
+insert into t (id,a) values (91,19);
+insert into t (id,a) values (91,20);
+insert into t (id,a) values (91,21);
+insert into t (id,a) values (91,22);
+insert into t (id,a) values (91,23);
+insert into t (id,a) values (91,24);
+insert into t (id,a) values (91,25);
+insert into t (id,a) values (91,26);
+insert into t (id,a) values (91,27);
+insert into t (id,a) values (91,28);
+insert into t (id,a) values (91,29);
+insert into t (id,a) values (91,30);
+insert into t (id,a) values (91,31);
+insert into t (id,a) values (91,32);
+insert into t (id,a) values (91,33);
+insert into t (id,a) values (91,34);
+insert into t (id,a) values (91,35);
+insert into t (id,a) values (91,36);
+insert into t (id,a) values (91,37);
+insert into t (id,a) values (91,38);
+insert into t (id,a) values (91,39);
+insert into t (id,a) values (91,40);
+insert into t (id,a) values (91,41);
+insert into t (id,a) values (91,42);
+insert into t (id,a) values (91,43);
+insert into t (id,a) values (91,44);
+insert into t (id,a) values (91,45);
+insert into t (id,a) values (91,46);
+insert into t (id,a) values (91,47);
+insert into t (id,a) values (91,48);
+insert into t (id,a) values (91,49);
+insert into t (id,a) values (91,50);
+insert into t (id,a) values (91,51);
+insert into t (id,a) values (91,52);
+insert into t (id,a) values (91,53);
+insert into t (id,a) values (91,54);
+insert into t (id,a) values (91,55);
+insert into t (id,a) values (91,56);
+insert into t (id,a) values (91,57);
+insert into t (id,a) values (91,58);
+insert into t (id,a) values (91,59);
+insert into t (id,a) values (91,60);
+insert into t (id,a) values (91,61);
+insert into t (id,a) values (91,62);
+insert into t (id,a) values (91,63);
+insert into t (id,a) values (91,64);
+insert into t (id,a) values (91,65);
+insert into t (id,a) values (91,66);
+insert into t (id,a) values (91,67);
+insert into t (id,a) values (91,68);
+insert into t (id,a) values (91,69);
+insert into t (id,a) values (91,70);
+insert into t (id,a) values (91,71);
+insert into t (id,a) values (91,72);
+insert into t (id,a) values (91,73);
+insert into t (id,a) values (91,74);
+insert into t (id,a) values (91,75);
+insert into t (id,a) values (91,76);
+insert into t (id,a) values (91,77);
+insert into t (id,a) values (91,78);
+insert into t (id,a) values (91,79);
+insert into t (id,a) values (91,80);
+insert into t (id,a) values (91,81);
+insert into t (id,a) values (91,82);
+insert into t (id,a) values (91,83);
+insert into t (id,a) values (91,84);
+insert into t (id,a) values (91,85);
+insert into t (id,a) values (91,86);
+insert into t (id,a) values (91,87);
+insert into t (id,a) values (91,88);
+insert into t (id,a) values (91,89);
+insert into t (id,a) values (91,90);
+insert into t (id,a) values (91,91);
+insert into t (id,a) values (91,92);
+insert into t (id,a) values (91,93);
+insert into t (id,a) values (91,94);
+insert into t (id,a) values (91,95);
+insert into t (id,a) values (91,96);
+insert into t (id,a) values (91,97);
+insert into t (id,a) values (91,98);
+insert into t (id,a) values (91,99);
+insert into t (id,a) values (92,0);
+insert into t (id,a) values (92,1);
+insert into t (id,a) values (92,2);
+insert into t (id,a) values (92,3);
+insert into t (id,a) values (92,4);
+insert into t (id,a) values (92,5);
+insert into t (id,a) values (92,6);
+insert into t (id,a) values (92,7);
+insert into t (id,a) values (92,8);
+insert into t (id,a) values (92,9);
+insert into t (id,a) values (92,10);
+insert into t (id,a) values (92,11);
+insert into t (id,a) values (92,12);
+insert into t (id,a) values (92,13);
+insert into t (id,a) values (92,14);
+insert into t (id,a) values (92,15);
+insert into t (id,a) values (92,16);
+insert into t (id,a) values (92,17);
+insert into t (id,a) values (92,18);
+insert into t (id,a) values (92,19);
+insert into t (id,a) values (92,20);
+insert into t (id,a) values (92,21);
+insert into t (id,a) values (92,22);
+insert into t (id,a) values (92,23);
+insert into t (id,a) values (92,24);
+insert into t (id,a) values (92,25);
+insert into t (id,a) values (92,26);
+insert into t (id,a) values (92,27);
+insert into t (id,a) values (92,28);
+insert into t (id,a) values (92,29);
+insert into t (id,a) values (92,30);
+insert into t (id,a) values (92,31);
+insert into t (id,a) values (92,32);
+insert into t (id,a) values (92,33);
+insert into t (id,a) values (92,34);
+insert into t (id,a) values (92,35);
+insert into t (id,a) values (92,36);
+insert into t (id,a) values (92,37);
+insert into t (id,a) values (92,38);
+insert into t (id,a) values (92,39);
+insert into t (id,a) values (92,40);
+insert into t (id,a) values (92,41);
+insert into t (id,a) values (92,42);
+insert into t (id,a) values (92,43);
+insert into t (id,a) values (92,44);
+insert into t (id,a) values (92,45);
+insert into t (id,a) values (92,46);
+insert into t (id,a) values (92,47);
+insert into t (id,a) values (92,48);
+insert into t (id,a) values (92,49);
+insert into t (id,a) values (92,50);
+insert into t (id,a) values (92,51);
+insert into t (id,a) values (92,52);
+insert into t (id,a) values (92,53);
+insert into t (id,a) values (92,54);
+insert into t (id,a) values (92,55);
+insert into t (id,a) values (92,56);
+insert into t (id,a) values (92,57);
+insert into t (id,a) values (92,58);
+insert into t (id,a) values (92,59);
+insert into t (id,a) values (92,60);
+insert into t (id,a) values (92,61);
+insert into t (id,a) values (92,62);
+insert into t (id,a) values (92,63);
+insert into t (id,a) values (92,64);
+insert into t (id,a) values (92,65);
+insert into t (id,a) values (92,66);
+insert into t (id,a) values (92,67);
+insert into t (id,a) values (92,68);
+insert into t (id,a) values (92,69);
+insert into t (id,a) values (92,70);
+insert into t (id,a) values (92,71);
+insert into t (id,a) values (92,72);
+insert into t (id,a) values (92,73);
+insert into t (id,a) values (92,74);
+insert into t (id,a) values (92,75);
+insert into t (id,a) values (92,76);
+insert into t (id,a) values (92,77);
+insert into t (id,a) values (92,78);
+insert into t (id,a) values (92,79);
+insert into t (id,a) values (92,80);
+insert into t (id,a) values (92,81);
+insert into t (id,a) values (92,82);
+insert into t (id,a) values (92,83);
+insert into t (id,a) values (92,84);
+insert into t (id,a) values (92,85);
+insert into t (id,a) values (92,86);
+insert into t (id,a) values (92,87);
+insert into t (id,a) values (92,88);
+insert into t (id,a) values (92,89);
+insert into t (id,a) values (92,90);
+insert into t (id,a) values (92,91);
+insert into t (id,a) values (92,92);
+insert into t (id,a) values (92,93);
+insert into t (id,a) values (92,94);
+insert into t (id,a) values (92,95);
+insert into t (id,a) values (92,96);
+insert into t (id,a) values (92,97);
+insert into t (id,a) values (92,98);
+insert into t (id,a) values (92,99);
+insert into t (id,a) values (93,0);
+insert into t (id,a) values (93,1);
+insert into t (id,a) values (93,2);
+insert into t (id,a) values (93,3);
+insert into t (id,a) values (93,4);
+insert into t (id,a) values (93,5);
+insert into t (id,a) values (93,6);
+insert into t (id,a) values (93,7);
+insert into t (id,a) values (93,8);
+insert into t (id,a) values (93,9);
+insert into t (id,a) values (93,10);
+insert into t (id,a) values (93,11);
+insert into t (id,a) values (93,12);
+insert into t (id,a) values (93,13);
+insert into t (id,a) values (93,14);
+insert into t (id,a) values (93,15);
+insert into t (id,a) values (93,16);
+insert into t (id,a) values (93,17);
+insert into t (id,a) values (93,18);
+insert into t (id,a) values (93,19);
+insert into t (id,a) values (93,20);
+insert into t (id,a) values (93,21);
+insert into t (id,a) values (93,22);
+insert into t (id,a) values (93,23);
+insert into t (id,a) values (93,24);
+insert into t (id,a) values (93,25);
+insert into t (id,a) values (93,26);
+insert into t (id,a) values (93,27);
+insert into t (id,a) values (93,28);
+insert into t (id,a) values (93,29);
+insert into t (id,a) values (93,30);
+insert into t (id,a) values (93,31);
+insert into t (id,a) values (93,32);
+insert into t (id,a) values (93,33);
+insert into t (id,a) values (93,34);
+insert into t (id,a) values (93,35);
+insert into t (id,a) values (93,36);
+insert into t (id,a) values (93,37);
+insert into t (id,a) values (93,38);
+insert into t (id,a) values (93,39);
+insert into t (id,a) values (93,40);
+insert into t (id,a) values (93,41);
+insert into t (id,a) values (93,42);
+insert into t (id,a) values (93,43);
+insert into t (id,a) values (93,44);
+insert into t (id,a) values (93,45);
+insert into t (id,a) values (93,46);
+insert into t (id,a) values (93,47);
+insert into t (id,a) values (93,48);
+insert into t (id,a) values (93,49);
+insert into t (id,a) values (93,50);
+insert into t (id,a) values (93,51);
+insert into t (id,a) values (93,52);
+insert into t (id,a) values (93,53);
+insert into t (id,a) values (93,54);
+insert into t (id,a) values (93,55);
+insert into t (id,a) values (93,56);
+insert into t (id,a) values (93,57);
+insert into t (id,a) values (93,58);
+insert into t (id,a) values (93,59);
+insert into t (id,a) values (93,60);
+insert into t (id,a) values (93,61);
+insert into t (id,a) values (93,62);
+insert into t (id,a) values (93,63);
+insert into t (id,a) values (93,64);
+insert into t (id,a) values (93,65);
+insert into t (id,a) values (93,66);
+insert into t (id,a) values (93,67);
+insert into t (id,a) values (93,68);
+insert into t (id,a) values (93,69);
+insert into t (id,a) values (93,70);
+insert into t (id,a) values (93,71);
+insert into t (id,a) values (93,72);
+insert into t (id,a) values (93,73);
+insert into t (id,a) values (93,74);
+insert into t (id,a) values (93,75);
+insert into t (id,a) values (93,76);
+insert into t (id,a) values (93,77);
+insert into t (id,a) values (93,78);
+insert into t (id,a) values (93,79);
+insert into t (id,a) values (93,80);
+insert into t (id,a) values (93,81);
+insert into t (id,a) values (93,82);
+insert into t (id,a) values (93,83);
+insert into t (id,a) values (93,84);
+insert into t (id,a) values (93,85);
+insert into t (id,a) values (93,86);
+insert into t (id,a) values (93,87);
+insert into t (id,a) values (93,88);
+insert into t (id,a) values (93,89);
+insert into t (id,a) values (93,90);
+insert into t (id,a) values (93,91);
+insert into t (id,a) values (93,92);
+insert into t (id,a) values (93,93);
+insert into t (id,a) values (93,94);
+insert into t (id,a) values (93,95);
+insert into t (id,a) values (93,96);
+insert into t (id,a) values (93,97);
+insert into t (id,a) values (93,98);
+insert into t (id,a) values (93,99);
+insert into t (id,a) values (94,0);
+insert into t (id,a) values (94,1);
+insert into t (id,a) values (94,2);
+insert into t (id,a) values (94,3);
+insert into t (id,a) values (94,4);
+insert into t (id,a) values (94,5);
+insert into t (id,a) values (94,6);
+insert into t (id,a) values (94,7);
+insert into t (id,a) values (94,8);
+insert into t (id,a) values (94,9);
+insert into t (id,a) values (94,10);
+insert into t (id,a) values (94,11);
+insert into t (id,a) values (94,12);
+insert into t (id,a) values (94,13);
+insert into t (id,a) values (94,14);
+insert into t (id,a) values (94,15);
+insert into t (id,a) values (94,16);
+insert into t (id,a) values (94,17);
+insert into t (id,a) values (94,18);
+insert into t (id,a) values (94,19);
+insert into t (id,a) values (94,20);
+insert into t (id,a) values (94,21);
+insert into t (id,a) values (94,22);
+insert into t (id,a) values (94,23);
+insert into t (id,a) values (94,24);
+insert into t (id,a) values (94,25);
+insert into t (id,a) values (94,26);
+insert into t (id,a) values (94,27);
+insert into t (id,a) values (94,28);
+insert into t (id,a) values (94,29);
+insert into t (id,a) values (94,30);
+insert into t (id,a) values (94,31);
+insert into t (id,a) values (94,32);
+insert into t (id,a) values (94,33);
+insert into t (id,a) values (94,34);
+insert into t (id,a) values (94,35);
+insert into t (id,a) values (94,36);
+insert into t (id,a) values (94,37);
+insert into t (id,a) values (94,38);
+insert into t (id,a) values (94,39);
+insert into t (id,a) values (94,40);
+insert into t (id,a) values (94,41);
+insert into t (id,a) values (94,42);
+insert into t (id,a) values (94,43);
+insert into t (id,a) values (94,44);
+insert into t (id,a) values (94,45);
+insert into t (id,a) values (94,46);
+insert into t (id,a) values (94,47);
+insert into t (id,a) values (94,48);
+insert into t (id,a) values (94,49);
+insert into t (id,a) values (94,50);
+insert into t (id,a) values (94,51);
+insert into t (id,a) values (94,52);
+insert into t (id,a) values (94,53);
+insert into t (id,a) values (94,54);
+insert into t (id,a) values (94,55);
+insert into t (id,a) values (94,56);
+insert into t (id,a) values (94,57);
+insert into t (id,a) values (94,58);
+insert into t (id,a) values (94,59);
+insert into t (id,a) values (94,60);
+insert into t (id,a) values (94,61);
+insert into t (id,a) values (94,62);
+insert into t (id,a) values (94,63);
+insert into t (id,a) values (94,64);
+insert into t (id,a) values (94,65);
+insert into t (id,a) values (94,66);
+insert into t (id,a) values (94,67);
+insert into t (id,a) values (94,68);
+insert into t (id,a) values (94,69);
+insert into t (id,a) values (94,70);
+insert into t (id,a) values (94,71);
+insert into t (id,a) values (94,72);
+insert into t (id,a) values (94,73);
+insert into t (id,a) values (94,74);
+insert into t (id,a) values (94,75);
+insert into t (id,a) values (94,76);
+insert into t (id,a) values (94,77);
+insert into t (id,a) values (94,78);
+insert into t (id,a) values (94,79);
+insert into t (id,a) values (94,80);
+insert into t (id,a) values (94,81);
+insert into t (id,a) values (94,82);
+insert into t (id,a) values (94,83);
+insert into t (id,a) values (94,84);
+insert into t (id,a) values (94,85);
+insert into t (id,a) values (94,86);
+insert into t (id,a) values (94,87);
+insert into t (id,a) values (94,88);
+insert into t (id,a) values (94,89);
+insert into t (id,a) values (94,90);
+insert into t (id,a) values (94,91);
+insert into t (id,a) values (94,92);
+insert into t (id,a) values (94,93);
+insert into t (id,a) values (94,94);
+insert into t (id,a) values (94,95);
+insert into t (id,a) values (94,96);
+insert into t (id,a) values (94,97);
+insert into t (id,a) values (94,98);
+insert into t (id,a) values (94,99);
+insert into t (id,a) values (95,0);
+insert into t (id,a) values (95,1);
+insert into t (id,a) values (95,2);
+insert into t (id,a) values (95,3);
+insert into t (id,a) values (95,4);
+insert into t (id,a) values (95,5);
+insert into t (id,a) values (95,6);
+insert into t (id,a) values (95,7);
+insert into t (id,a) values (95,8);
+insert into t (id,a) values (95,9);
+insert into t (id,a) values (95,10);
+insert into t (id,a) values (95,11);
+insert into t (id,a) values (95,12);
+insert into t (id,a) values (95,13);
+insert into t (id,a) values (95,14);
+insert into t (id,a) values (95,15);
+insert into t (id,a) values (95,16);
+insert into t (id,a) values (95,17);
+insert into t (id,a) values (95,18);
+insert into t (id,a) values (95,19);
+insert into t (id,a) values (95,20);
+insert into t (id,a) values (95,21);
+insert into t (id,a) values (95,22);
+insert into t (id,a) values (95,23);
+insert into t (id,a) values (95,24);
+insert into t (id,a) values (95,25);
+insert into t (id,a) values (95,26);
+insert into t (id,a) values (95,27);
+insert into t (id,a) values (95,28);
+insert into t (id,a) values (95,29);
+insert into t (id,a) values (95,30);
+insert into t (id,a) values (95,31);
+insert into t (id,a) values (95,32);
+insert into t (id,a) values (95,33);
+insert into t (id,a) values (95,34);
+insert into t (id,a) values (95,35);
+insert into t (id,a) values (95,36);
+insert into t (id,a) values (95,37);
+insert into t (id,a) values (95,38);
+insert into t (id,a) values (95,39);
+insert into t (id,a) values (95,40);
+insert into t (id,a) values (95,41);
+insert into t (id,a) values (95,42);
+insert into t (id,a) values (95,43);
+insert into t (id,a) values (95,44);
+insert into t (id,a) values (95,45);
+insert into t (id,a) values (95,46);
+insert into t (id,a) values (95,47);
+insert into t (id,a) values (95,48);
+insert into t (id,a) values (95,49);
+insert into t (id,a) values (95,50);
+insert into t (id,a) values (95,51);
+insert into t (id,a) values (95,52);
+insert into t (id,a) values (95,53);
+insert into t (id,a) values (95,54);
+insert into t (id,a) values (95,55);
+insert into t (id,a) values (95,56);
+insert into t (id,a) values (95,57);
+insert into t (id,a) values (95,58);
+insert into t (id,a) values (95,59);
+insert into t (id,a) values (95,60);
+insert into t (id,a) values (95,61);
+insert into t (id,a) values (95,62);
+insert into t (id,a) values (95,63);
+insert into t (id,a) values (95,64);
+insert into t (id,a) values (95,65);
+insert into t (id,a) values (95,66);
+insert into t (id,a) values (95,67);
+insert into t (id,a) values (95,68);
+insert into t (id,a) values (95,69);
+insert into t (id,a) values (95,70);
+insert into t (id,a) values (95,71);
+insert into t (id,a) values (95,72);
+insert into t (id,a) values (95,73);
+insert into t (id,a) values (95,74);
+insert into t (id,a) values (95,75);
+insert into t (id,a) values (95,76);
+insert into t (id,a) values (95,77);
+insert into t (id,a) values (95,78);
+insert into t (id,a) values (95,79);
+insert into t (id,a) values (95,80);
+insert into t (id,a) values (95,81);
+insert into t (id,a) values (95,82);
+insert into t (id,a) values (95,83);
+insert into t (id,a) values (95,84);
+insert into t (id,a) values (95,85);
+insert into t (id,a) values (95,86);
+insert into t (id,a) values (95,87);
+insert into t (id,a) values (95,88);
+insert into t (id,a) values (95,89);
+insert into t (id,a) values (95,90);
+insert into t (id,a) values (95,91);
+insert into t (id,a) values (95,92);
+insert into t (id,a) values (95,93);
+insert into t (id,a) values (95,94);
+insert into t (id,a) values (95,95);
+insert into t (id,a) values (95,96);
+insert into t (id,a) values (95,97);
+insert into t (id,a) values (95,98);
+insert into t (id,a) values (95,99);
+insert into t (id,a) values (96,0);
+insert into t (id,a) values (96,1);
+insert into t (id,a) values (96,2);
+insert into t (id,a) values (96,3);
+insert into t (id,a) values (96,4);
+insert into t (id,a) values (96,5);
+insert into t (id,a) values (96,6);
+insert into t (id,a) values (96,7);
+insert into t (id,a) values (96,8);
+insert into t (id,a) values (96,9);
+insert into t (id,a) values (96,10);
+insert into t (id,a) values (96,11);
+insert into t (id,a) values (96,12);
+insert into t (id,a) values (96,13);
+insert into t (id,a) values (96,14);
+insert into t (id,a) values (96,15);
+insert into t (id,a) values (96,16);
+insert into t (id,a) values (96,17);
+insert into t (id,a) values (96,18);
+insert into t (id,a) values (96,19);
+insert into t (id,a) values (96,20);
+insert into t (id,a) values (96,21);
+insert into t (id,a) values (96,22);
+insert into t (id,a) values (96,23);
+insert into t (id,a) values (96,24);
+insert into t (id,a) values (96,25);
+insert into t (id,a) values (96,26);
+insert into t (id,a) values (96,27);
+insert into t (id,a) values (96,28);
+insert into t (id,a) values (96,29);
+insert into t (id,a) values (96,30);
+insert into t (id,a) values (96,31);
+insert into t (id,a) values (96,32);
+insert into t (id,a) values (96,33);
+insert into t (id,a) values (96,34);
+insert into t (id,a) values (96,35);
+insert into t (id,a) values (96,36);
+insert into t (id,a) values (96,37);
+insert into t (id,a) values (96,38);
+insert into t (id,a) values (96,39);
+insert into t (id,a) values (96,40);
+insert into t (id,a) values (96,41);
+insert into t (id,a) values (96,42);
+insert into t (id,a) values (96,43);
+insert into t (id,a) values (96,44);
+insert into t (id,a) values (96,45);
+insert into t (id,a) values (96,46);
+insert into t (id,a) values (96,47);
+insert into t (id,a) values (96,48);
+insert into t (id,a) values (96,49);
+insert into t (id,a) values (96,50);
+insert into t (id,a) values (96,51);
+insert into t (id,a) values (96,52);
+insert into t (id,a) values (96,53);
+insert into t (id,a) values (96,54);
+insert into t (id,a) values (96,55);
+insert into t (id,a) values (96,56);
+insert into t (id,a) values (96,57);
+insert into t (id,a) values (96,58);
+insert into t (id,a) values (96,59);
+insert into t (id,a) values (96,60);
+insert into t (id,a) values (96,61);
+insert into t (id,a) values (96,62);
+insert into t (id,a) values (96,63);
+insert into t (id,a) values (96,64);
+insert into t (id,a) values (96,65);
+insert into t (id,a) values (96,66);
+insert into t (id,a) values (96,67);
+insert into t (id,a) values (96,68);
+insert into t (id,a) values (96,69);
+insert into t (id,a) values (96,70);
+insert into t (id,a) values (96,71);
+insert into t (id,a) values (96,72);
+insert into t (id,a) values (96,73);
+insert into t (id,a) values (96,74);
+insert into t (id,a) values (96,75);
+insert into t (id,a) values (96,76);
+insert into t (id,a) values (96,77);
+insert into t (id,a) values (96,78);
+insert into t (id,a) values (96,79);
+insert into t (id,a) values (96,80);
+insert into t (id,a) values (96,81);
+insert into t (id,a) values (96,82);
+insert into t (id,a) values (96,83);
+insert into t (id,a) values (96,84);
+insert into t (id,a) values (96,85);
+insert into t (id,a) values (96,86);
+insert into t (id,a) values (96,87);
+insert into t (id,a) values (96,88);
+insert into t (id,a) values (96,89);
+insert into t (id,a) values (96,90);
+insert into t (id,a) values (96,91);
+insert into t (id,a) values (96,92);
+insert into t (id,a) values (96,93);
+insert into t (id,a) values (96,94);
+insert into t (id,a) values (96,95);
+insert into t (id,a) values (96,96);
+insert into t (id,a) values (96,97);
+insert into t (id,a) values (96,98);
+insert into t (id,a) values (96,99);
+insert into t (id,a) values (97,0);
+insert into t (id,a) values (97,1);
+insert into t (id,a) values (97,2);
+insert into t (id,a) values (97,3);
+insert into t (id,a) values (97,4);
+insert into t (id,a) values (97,5);
+insert into t (id,a) values (97,6);
+insert into t (id,a) values (97,7);
+insert into t (id,a) values (97,8);
+insert into t (id,a) values (97,9);
+insert into t (id,a) values (97,10);
+insert into t (id,a) values (97,11);
+insert into t (id,a) values (97,12);
+insert into t (id,a) values (97,13);
+insert into t (id,a) values (97,14);
+insert into t (id,a) values (97,15);
+insert into t (id,a) values (97,16);
+insert into t (id,a) values (97,17);
+insert into t (id,a) values (97,18);
+insert into t (id,a) values (97,19);
+insert into t (id,a) values (97,20);
+insert into t (id,a) values (97,21);
+insert into t (id,a) values (97,22);
+insert into t (id,a) values (97,23);
+insert into t (id,a) values (97,24);
+insert into t (id,a) values (97,25);
+insert into t (id,a) values (97,26);
+insert into t (id,a) values (97,27);
+insert into t (id,a) values (97,28);
+insert into t (id,a) values (97,29);
+insert into t (id,a) values (97,30);
+insert into t (id,a) values (97,31);
+insert into t (id,a) values (97,32);
+insert into t (id,a) values (97,33);
+insert into t (id,a) values (97,34);
+insert into t (id,a) values (97,35);
+insert into t (id,a) values (97,36);
+insert into t (id,a) values (97,37);
+insert into t (id,a) values (97,38);
+insert into t (id,a) values (97,39);
+insert into t (id,a) values (97,40);
+insert into t (id,a) values (97,41);
+insert into t (id,a) values (97,42);
+insert into t (id,a) values (97,43);
+insert into t (id,a) values (97,44);
+insert into t (id,a) values (97,45);
+insert into t (id,a) values (97,46);
+insert into t (id,a) values (97,47);
+insert into t (id,a) values (97,48);
+insert into t (id,a) values (97,49);
+insert into t (id,a) values (97,50);
+insert into t (id,a) values (97,51);
+insert into t (id,a) values (97,52);
+insert into t (id,a) values (97,53);
+insert into t (id,a) values (97,54);
+insert into t (id,a) values (97,55);
+insert into t (id,a) values (97,56);
+insert into t (id,a) values (97,57);
+insert into t (id,a) values (97,58);
+insert into t (id,a) values (97,59);
+insert into t (id,a) values (97,60);
+insert into t (id,a) values (97,61);
+insert into t (id,a) values (97,62);
+insert into t (id,a) values (97,63);
+insert into t (id,a) values (97,64);
+insert into t (id,a) values (97,65);
+insert into t (id,a) values (97,66);
+insert into t (id,a) values (97,67);
+insert into t (id,a) values (97,68);
+insert into t (id,a) values (97,69);
+insert into t (id,a) values (97,70);
+insert into t (id,a) values (97,71);
+insert into t (id,a) values (97,72);
+insert into t (id,a) values (97,73);
+insert into t (id,a) values (97,74);
+insert into t (id,a) values (97,75);
+insert into t (id,a) values (97,76);
+insert into t (id,a) values (97,77);
+insert into t (id,a) values (97,78);
+insert into t (id,a) values (97,79);
+insert into t (id,a) values (97,80);
+insert into t (id,a) values (97,81);
+insert into t (id,a) values (97,82);
+insert into t (id,a) values (97,83);
+insert into t (id,a) values (97,84);
+insert into t (id,a) values (97,85);
+insert into t (id,a) values (97,86);
+insert into t (id,a) values (97,87);
+insert into t (id,a) values (97,88);
+insert into t (id,a) values (97,89);
+insert into t (id,a) values (97,90);
+insert into t (id,a) values (97,91);
+insert into t (id,a) values (97,92);
+insert into t (id,a) values (97,93);
+insert into t (id,a) values (97,94);
+insert into t (id,a) values (97,95);
+insert into t (id,a) values (97,96);
+insert into t (id,a) values (97,97);
+insert into t (id,a) values (97,98);
+insert into t (id,a) values (97,99);
+insert into t (id,a) values (98,0);
+insert into t (id,a) values (98,1);
+insert into t (id,a) values (98,2);
+insert into t (id,a) values (98,3);
+insert into t (id,a) values (98,4);
+insert into t (id,a) values (98,5);
+insert into t (id,a) values (98,6);
+insert into t (id,a) values (98,7);
+insert into t (id,a) values (98,8);
+insert into t (id,a) values (98,9);
+insert into t (id,a) values (98,10);
+insert into t (id,a) values (98,11);
+insert into t (id,a) values (98,12);
+insert into t (id,a) values (98,13);
+insert into t (id,a) values (98,14);
+insert into t (id,a) values (98,15);
+insert into t (id,a) values (98,16);
+insert into t (id,a) values (98,17);
+insert into t (id,a) values (98,18);
+insert into t (id,a) values (98,19);
+insert into t (id,a) values (98,20);
+insert into t (id,a) values (98,21);
+insert into t (id,a) values (98,22);
+insert into t (id,a) values (98,23);
+insert into t (id,a) values (98,24);
+insert into t (id,a) values (98,25);
+insert into t (id,a) values (98,26);
+insert into t (id,a) values (98,27);
+insert into t (id,a) values (98,28);
+insert into t (id,a) values (98,29);
+insert into t (id,a) values (98,30);
+insert into t (id,a) values (98,31);
+insert into t (id,a) values (98,32);
+insert into t (id,a) values (98,33);
+insert into t (id,a) values (98,34);
+insert into t (id,a) values (98,35);
+insert into t (id,a) values (98,36);
+insert into t (id,a) values (98,37);
+insert into t (id,a) values (98,38);
+insert into t (id,a) values (98,39);
+insert into t (id,a) values (98,40);
+insert into t (id,a) values (98,41);
+insert into t (id,a) values (98,42);
+insert into t (id,a) values (98,43);
+insert into t (id,a) values (98,44);
+insert into t (id,a) values (98,45);
+insert into t (id,a) values (98,46);
+insert into t (id,a) values (98,47);
+insert into t (id,a) values (98,48);
+insert into t (id,a) values (98,49);
+insert into t (id,a) values (98,50);
+insert into t (id,a) values (98,51);
+insert into t (id,a) values (98,52);
+insert into t (id,a) values (98,53);
+insert into t (id,a) values (98,54);
+insert into t (id,a) values (98,55);
+insert into t (id,a) values (98,56);
+insert into t (id,a) values (98,57);
+insert into t (id,a) values (98,58);
+insert into t (id,a) values (98,59);
+insert into t (id,a) values (98,60);
+insert into t (id,a) values (98,61);
+insert into t (id,a) values (98,62);
+insert into t (id,a) values (98,63);
+insert into t (id,a) values (98,64);
+insert into t (id,a) values (98,65);
+insert into t (id,a) values (98,66);
+insert into t (id,a) values (98,67);
+insert into t (id,a) values (98,68);
+insert into t (id,a) values (98,69);
+insert into t (id,a) values (98,70);
+insert into t (id,a) values (98,71);
+insert into t (id,a) values (98,72);
+insert into t (id,a) values (98,73);
+insert into t (id,a) values (98,74);
+insert into t (id,a) values (98,75);
+insert into t (id,a) values (98,76);
+insert into t (id,a) values (98,77);
+insert into t (id,a) values (98,78);
+insert into t (id,a) values (98,79);
+insert into t (id,a) values (98,80);
+insert into t (id,a) values (98,81);
+insert into t (id,a) values (98,82);
+insert into t (id,a) values (98,83);
+insert into t (id,a) values (98,84);
+insert into t (id,a) values (98,85);
+insert into t (id,a) values (98,86);
+insert into t (id,a) values (98,87);
+insert into t (id,a) values (98,88);
+insert into t (id,a) values (98,89);
+insert into t (id,a) values (98,90);
+insert into t (id,a) values (98,91);
+insert into t (id,a) values (98,92);
+insert into t (id,a) values (98,93);
+insert into t (id,a) values (98,94);
+insert into t (id,a) values (98,95);
+insert into t (id,a) values (98,96);
+insert into t (id,a) values (98,97);
+insert into t (id,a) values (98,98);
+insert into t (id,a) values (98,99);
+insert into t (id,a) values (99,0);
+insert into t (id,a) values (99,1);
+insert into t (id,a) values (99,2);
+insert into t (id,a) values (99,3);
+insert into t (id,a) values (99,4);
+insert into t (id,a) values (99,5);
+insert into t (id,a) values (99,6);
+insert into t (id,a) values (99,7);
+insert into t (id,a) values (99,8);
+insert into t (id,a) values (99,9);
+insert into t (id,a) values (99,10);
+insert into t (id,a) values (99,11);
+insert into t (id,a) values (99,12);
+insert into t (id,a) values (99,13);
+insert into t (id,a) values (99,14);
+insert into t (id,a) values (99,15);
+insert into t (id,a) values (99,16);
+insert into t (id,a) values (99,17);
+insert into t (id,a) values (99,18);
+insert into t (id,a) values (99,19);
+insert into t (id,a) values (99,20);
+insert into t (id,a) values (99,21);
+insert into t (id,a) values (99,22);
+insert into t (id,a) values (99,23);
+insert into t (id,a) values (99,24);
+insert into t (id,a) values (99,25);
+insert into t (id,a) values (99,26);
+insert into t (id,a) values (99,27);
+insert into t (id,a) values (99,28);
+insert into t (id,a) values (99,29);
+insert into t (id,a) values (99,30);
+insert into t (id,a) values (99,31);
+insert into t (id,a) values (99,32);
+insert into t (id,a) values (99,33);
+insert into t (id,a) values (99,34);
+insert into t (id,a) values (99,35);
+insert into t (id,a) values (99,36);
+insert into t (id,a) values (99,37);
+insert into t (id,a) values (99,38);
+insert into t (id,a) values (99,39);
+insert into t (id,a) values (99,40);
+insert into t (id,a) values (99,41);
+insert into t (id,a) values (99,42);
+insert into t (id,a) values (99,43);
+insert into t (id,a) values (99,44);
+insert into t (id,a) values (99,45);
+insert into t (id,a) values (99,46);
+insert into t (id,a) values (99,47);
+insert into t (id,a) values (99,48);
+insert into t (id,a) values (99,49);
+insert into t (id,a) values (99,50);
+insert into t (id,a) values (99,51);
+insert into t (id,a) values (99,52);
+insert into t (id,a) values (99,53);
+insert into t (id,a) values (99,54);
+insert into t (id,a) values (99,55);
+insert into t (id,a) values (99,56);
+insert into t (id,a) values (99,57);
+insert into t (id,a) values (99,58);
+insert into t (id,a) values (99,59);
+insert into t (id,a) values (99,60);
+insert into t (id,a) values (99,61);
+insert into t (id,a) values (99,62);
+insert into t (id,a) values (99,63);
+insert into t (id,a) values (99,64);
+insert into t (id,a) values (99,65);
+insert into t (id,a) values (99,66);
+insert into t (id,a) values (99,67);
+insert into t (id,a) values (99,68);
+insert into t (id,a) values (99,69);
+insert into t (id,a) values (99,70);
+insert into t (id,a) values (99,71);
+insert into t (id,a) values (99,72);
+insert into t (id,a) values (99,73);
+insert into t (id,a) values (99,74);
+insert into t (id,a) values (99,75);
+insert into t (id,a) values (99,76);
+insert into t (id,a) values (99,77);
+insert into t (id,a) values (99,78);
+insert into t (id,a) values (99,79);
+insert into t (id,a) values (99,80);
+insert into t (id,a) values (99,81);
+insert into t (id,a) values (99,82);
+insert into t (id,a) values (99,83);
+insert into t (id,a) values (99,84);
+insert into t (id,a) values (99,85);
+insert into t (id,a) values (99,86);
+insert into t (id,a) values (99,87);
+insert into t (id,a) values (99,88);
+insert into t (id,a) values (99,89);
+insert into t (id,a) values (99,90);
+insert into t (id,a) values (99,91);
+insert into t (id,a) values (99,92);
+insert into t (id,a) values (99,93);
+insert into t (id,a) values (99,94);
+insert into t (id,a) values (99,95);
+insert into t (id,a) values (99,96);
+insert into t (id,a) values (99,97);
+insert into t (id,a) values (99,98);
+insert into t (id,a) values (99,99);
+insert into t (id,a) values (100,0);
+insert into t (id,a) values (100,1);
+insert into t (id,a) values (100,2);
+insert into t (id,a) values (100,3);
+insert into t (id,a) values (100,4);
+insert into t (id,a) values (100,5);
+insert into t (id,a) values (100,6);
+insert into t (id,a) values (100,7);
+insert into t (id,a) values (100,8);
+insert into t (id,a) values (100,9);
+insert into t (id,a) values (100,10);
+insert into t (id,a) values (100,11);
+insert into t (id,a) values (100,12);
+insert into t (id,a) values (100,13);
+insert into t (id,a) values (100,14);
+insert into t (id,a) values (100,15);
+insert into t (id,a) values (100,16);
+insert into t (id,a) values (100,17);
+insert into t (id,a) values (100,18);
+insert into t (id,a) values (100,19);
+insert into t (id,a) values (100,20);
+insert into t (id,a) values (100,21);
+insert into t (id,a) values (100,22);
+insert into t (id,a) values (100,23);
+insert into t (id,a) values (100,24);
+insert into t (id,a) values (100,25);
+insert into t (id,a) values (100,26);
+insert into t (id,a) values (100,27);
+insert into t (id,a) values (100,28);
+insert into t (id,a) values (100,29);
+insert into t (id,a) values (100,30);
+insert into t (id,a) values (100,31);
+insert into t (id,a) values (100,32);
+insert into t (id,a) values (100,33);
+insert into t (id,a) values (100,34);
+insert into t (id,a) values (100,35);
+insert into t (id,a) values (100,36);
+insert into t (id,a) values (100,37);
+insert into t (id,a) values (100,38);
+insert into t (id,a) values (100,39);
+insert into t (id,a) values (100,40);
+insert into t (id,a) values (100,41);
+insert into t (id,a) values (100,42);
+insert into t (id,a) values (100,43);
+insert into t (id,a) values (100,44);
+insert into t (id,a) values (100,45);
+insert into t (id,a) values (100,46);
+insert into t (id,a) values (100,47);
+insert into t (id,a) values (100,48);
+insert into t (id,a) values (100,49);
+insert into t (id,a) values (100,50);
+insert into t (id,a) values (100,51);
+insert into t (id,a) values (100,52);
+insert into t (id,a) values (100,53);
+insert into t (id,a) values (100,54);
+insert into t (id,a) values (100,55);
+insert into t (id,a) values (100,56);
+insert into t (id,a) values (100,57);
+insert into t (id,a) values (100,58);
+insert into t (id,a) values (100,59);
+insert into t (id,a) values (100,60);
+insert into t (id,a) values (100,61);
+insert into t (id,a) values (100,62);
+insert into t (id,a) values (100,63);
+insert into t (id,a) values (100,64);
+insert into t (id,a) values (100,65);
+insert into t (id,a) values (100,66);
+insert into t (id,a) values (100,67);
+insert into t (id,a) values (100,68);
+insert into t (id,a) values (100,69);
+insert into t (id,a) values (100,70);
+insert into t (id,a) values (100,71);
+insert into t (id,a) values (100,72);
+insert into t (id,a) values (100,73);
+insert into t (id,a) values (100,74);
+insert into t (id,a) values (100,75);
+insert into t (id,a) values (100,76);
+insert into t (id,a) values (100,77);
+insert into t (id,a) values (100,78);
+insert into t (id,a) values (100,79);
+insert into t (id,a) values (100,80);
+insert into t (id,a) values (100,81);
+insert into t (id,a) values (100,82);
+insert into t (id,a) values (100,83);
+insert into t (id,a) values (100,84);
+insert into t (id,a) values (100,85);
+insert into t (id,a) values (100,86);
+insert into t (id,a) values (100,87);
+insert into t (id,a) values (100,88);
+insert into t (id,a) values (100,89);
+insert into t (id,a) values (100,90);
+insert into t (id,a) values (100,91);
+insert into t (id,a) values (100,92);
+insert into t (id,a) values (100,93);
+insert into t (id,a) values (100,94);
+insert into t (id,a) values (100,95);
+insert into t (id,a) values (100,96);
+insert into t (id,a) values (100,97);
+insert into t (id,a) values (100,98);
+insert into t (id,a) values (100,99);
+insert into t (id,a) values (101,0);
+insert into t (id,a) values (101,1);
+insert into t (id,a) values (101,2);
+insert into t (id,a) values (101,3);
+insert into t (id,a) values (101,4);
+insert into t (id,a) values (101,5);
+insert into t (id,a) values (101,6);
+insert into t (id,a) values (101,7);
+insert into t (id,a) values (101,8);
+insert into t (id,a) values (101,9);
+insert into t (id,a) values (101,10);
+insert into t (id,a) values (101,11);
+insert into t (id,a) values (101,12);
+insert into t (id,a) values (101,13);
+insert into t (id,a) values (101,14);
+insert into t (id,a) values (101,15);
+insert into t (id,a) values (101,16);
+insert into t (id,a) values (101,17);
+insert into t (id,a) values (101,18);
+insert into t (id,a) values (101,19);
+insert into t (id,a) values (101,20);
+insert into t (id,a) values (101,21);
+insert into t (id,a) values (101,22);
+insert into t (id,a) values (101,23);
+insert into t (id,a) values (101,24);
+insert into t (id,a) values (101,25);
+insert into t (id,a) values (101,26);
+insert into t (id,a) values (101,27);
+insert into t (id,a) values (101,28);
+insert into t (id,a) values (101,29);
+insert into t (id,a) values (101,30);
+insert into t (id,a) values (101,31);
+insert into t (id,a) values (101,32);
+insert into t (id,a) values (101,33);
+insert into t (id,a) values (101,34);
+insert into t (id,a) values (101,35);
+insert into t (id,a) values (101,36);
+insert into t (id,a) values (101,37);
+insert into t (id,a) values (101,38);
+insert into t (id,a) values (101,39);
+insert into t (id,a) values (101,40);
+insert into t (id,a) values (101,41);
+insert into t (id,a) values (101,42);
+insert into t (id,a) values (101,43);
+insert into t (id,a) values (101,44);
+insert into t (id,a) values (101,45);
+insert into t (id,a) values (101,46);
+insert into t (id,a) values (101,47);
+insert into t (id,a) values (101,48);
+insert into t (id,a) values (101,49);
+insert into t (id,a) values (101,50);
+insert into t (id,a) values (101,51);
+insert into t (id,a) values (101,52);
+insert into t (id,a) values (101,53);
+insert into t (id,a) values (101,54);
+insert into t (id,a) values (101,55);
+insert into t (id,a) values (101,56);
+insert into t (id,a) values (101,57);
+insert into t (id,a) values (101,58);
+insert into t (id,a) values (101,59);
+insert into t (id,a) values (101,60);
+insert into t (id,a) values (101,61);
+insert into t (id,a) values (101,62);
+insert into t (id,a) values (101,63);
+insert into t (id,a) values (101,64);
+insert into t (id,a) values (101,65);
+insert into t (id,a) values (101,66);
+insert into t (id,a) values (101,67);
+insert into t (id,a) values (101,68);
+insert into t (id,a) values (101,69);
+insert into t (id,a) values (101,70);
+insert into t (id,a) values (101,71);
+insert into t (id,a) values (101,72);
+insert into t (id,a) values (101,73);
+insert into t (id,a) values (101,74);
+insert into t (id,a) values (101,75);
+insert into t (id,a) values (101,76);
+insert into t (id,a) values (101,77);
+insert into t (id,a) values (101,78);
+insert into t (id,a) values (101,79);
+insert into t (id,a) values (101,80);
+insert into t (id,a) values (101,81);
+insert into t (id,a) values (101,82);
+insert into t (id,a) values (101,83);
+insert into t (id,a) values (101,84);
+insert into t (id,a) values (101,85);
+insert into t (id,a) values (101,86);
+insert into t (id,a) values (101,87);
+insert into t (id,a) values (101,88);
+insert into t (id,a) values (101,89);
+insert into t (id,a) values (101,90);
+insert into t (id,a) values (101,91);
+insert into t (id,a) values (101,92);
+insert into t (id,a) values (101,93);
+insert into t (id,a) values (101,94);
+insert into t (id,a) values (101,95);
+insert into t (id,a) values (101,96);
+insert into t (id,a) values (101,97);
+insert into t (id,a) values (101,98);
+insert into t (id,a) values (101,99);
+insert into t (id,a) values (102,0);
+insert into t (id,a) values (102,1);
+insert into t (id,a) values (102,2);
+insert into t (id,a) values (102,3);
+insert into t (id,a) values (102,4);
+insert into t (id,a) values (102,5);
+insert into t (id,a) values (102,6);
+insert into t (id,a) values (102,7);
+insert into t (id,a) values (102,8);
+insert into t (id,a) values (102,9);
+insert into t (id,a) values (102,10);
+insert into t (id,a) values (102,11);
+insert into t (id,a) values (102,12);
+insert into t (id,a) values (102,13);
+insert into t (id,a) values (102,14);
+insert into t (id,a) values (102,15);
+insert into t (id,a) values (102,16);
+insert into t (id,a) values (102,17);
+insert into t (id,a) values (102,18);
+insert into t (id,a) values (102,19);
+insert into t (id,a) values (102,20);
+insert into t (id,a) values (102,21);
+insert into t (id,a) values (102,22);
+insert into t (id,a) values (102,23);
+insert into t (id,a) values (102,24);
+insert into t (id,a) values (102,25);
+insert into t (id,a) values (102,26);
+insert into t (id,a) values (102,27);
+insert into t (id,a) values (102,28);
+insert into t (id,a) values (102,29);
+insert into t (id,a) values (102,30);
+insert into t (id,a) values (102,31);
+insert into t (id,a) values (102,32);
+insert into t (id,a) values (102,33);
+insert into t (id,a) values (102,34);
+insert into t (id,a) values (102,35);
+insert into t (id,a) values (102,36);
+insert into t (id,a) values (102,37);
+insert into t (id,a) values (102,38);
+insert into t (id,a) values (102,39);
+insert into t (id,a) values (102,40);
+insert into t (id,a) values (102,41);
+insert into t (id,a) values (102,42);
+insert into t (id,a) values (102,43);
+insert into t (id,a) values (102,44);
+insert into t (id,a) values (102,45);
+insert into t (id,a) values (102,46);
+insert into t (id,a) values (102,47);
+insert into t (id,a) values (102,48);
+insert into t (id,a) values (102,49);
+insert into t (id,a) values (102,50);
+insert into t (id,a) values (102,51);
+insert into t (id,a) values (102,52);
+insert into t (id,a) values (102,53);
+insert into t (id,a) values (102,54);
+insert into t (id,a) values (102,55);
+insert into t (id,a) values (102,56);
+insert into t (id,a) values (102,57);
+insert into t (id,a) values (102,58);
+insert into t (id,a) values (102,59);
+insert into t (id,a) values (102,60);
+insert into t (id,a) values (102,61);
+insert into t (id,a) values (102,62);
+insert into t (id,a) values (102,63);
+insert into t (id,a) values (102,64);
+insert into t (id,a) values (102,65);
+insert into t (id,a) values (102,66);
+insert into t (id,a) values (102,67);
+insert into t (id,a) values (102,68);
+insert into t (id,a) values (102,69);
+insert into t (id,a) values (102,70);
+insert into t (id,a) values (102,71);
+insert into t (id,a) values (102,72);
+insert into t (id,a) values (102,73);
+insert into t (id,a) values (102,74);
+insert into t (id,a) values (102,75);
+insert into t (id,a) values (102,76);
+insert into t (id,a) values (102,77);
+insert into t (id,a) values (102,78);
+insert into t (id,a) values (102,79);
+insert into t (id,a) values (102,80);
+insert into t (id,a) values (102,81);
+insert into t (id,a) values (102,82);
+insert into t (id,a) values (102,83);
+insert into t (id,a) values (102,84);
+insert into t (id,a) values (102,85);
+insert into t (id,a) values (102,86);
+insert into t (id,a) values (102,87);
+insert into t (id,a) values (102,88);
+insert into t (id,a) values (102,89);
+insert into t (id,a) values (102,90);
+insert into t (id,a) values (102,91);
+insert into t (id,a) values (102,92);
+insert into t (id,a) values (102,93);
+insert into t (id,a) values (102,94);
+insert into t (id,a) values (102,95);
+insert into t (id,a) values (102,96);
+insert into t (id,a) values (102,97);
+insert into t (id,a) values (102,98);
+insert into t (id,a) values (102,99);
+insert into t (id,a) values (103,0);
+insert into t (id,a) values (103,1);
+insert into t (id,a) values (103,2);
+insert into t (id,a) values (103,3);
+insert into t (id,a) values (103,4);
+insert into t (id,a) values (103,5);
+insert into t (id,a) values (103,6);
+insert into t (id,a) values (103,7);
+insert into t (id,a) values (103,8);
+insert into t (id,a) values (103,9);
+insert into t (id,a) values (103,10);
+insert into t (id,a) values (103,11);
+insert into t (id,a) values (103,12);
+insert into t (id,a) values (103,13);
+insert into t (id,a) values (103,14);
+insert into t (id,a) values (103,15);
+insert into t (id,a) values (103,16);
+insert into t (id,a) values (103,17);
+insert into t (id,a) values (103,18);
+insert into t (id,a) values (103,19);
+insert into t (id,a) values (103,20);
+insert into t (id,a) values (103,21);
+insert into t (id,a) values (103,22);
+insert into t (id,a) values (103,23);
+insert into t (id,a) values (103,24);
+insert into t (id,a) values (103,25);
+insert into t (id,a) values (103,26);
+insert into t (id,a) values (103,27);
+insert into t (id,a) values (103,28);
+insert into t (id,a) values (103,29);
+insert into t (id,a) values (103,30);
+insert into t (id,a) values (103,31);
+insert into t (id,a) values (103,32);
+insert into t (id,a) values (103,33);
+insert into t (id,a) values (103,34);
+insert into t (id,a) values (103,35);
+insert into t (id,a) values (103,36);
+insert into t (id,a) values (103,37);
+insert into t (id,a) values (103,38);
+insert into t (id,a) values (103,39);
+insert into t (id,a) values (103,40);
+insert into t (id,a) values (103,41);
+insert into t (id,a) values (103,42);
+insert into t (id,a) values (103,43);
+insert into t (id,a) values (103,44);
+insert into t (id,a) values (103,45);
+insert into t (id,a) values (103,46);
+insert into t (id,a) values (103,47);
+insert into t (id,a) values (103,48);
+insert into t (id,a) values (103,49);
+insert into t (id,a) values (103,50);
+insert into t (id,a) values (103,51);
+insert into t (id,a) values (103,52);
+insert into t (id,a) values (103,53);
+insert into t (id,a) values (103,54);
+insert into t (id,a) values (103,55);
+insert into t (id,a) values (103,56);
+insert into t (id,a) values (103,57);
+insert into t (id,a) values (103,58);
+insert into t (id,a) values (103,59);
+insert into t (id,a) values (103,60);
+insert into t (id,a) values (103,61);
+insert into t (id,a) values (103,62);
+insert into t (id,a) values (103,63);
+insert into t (id,a) values (103,64);
+insert into t (id,a) values (103,65);
+insert into t (id,a) values (103,66);
+insert into t (id,a) values (103,67);
+insert into t (id,a) values (103,68);
+insert into t (id,a) values (103,69);
+insert into t (id,a) values (103,70);
+insert into t (id,a) values (103,71);
+insert into t (id,a) values (103,72);
+insert into t (id,a) values (103,73);
+insert into t (id,a) values (103,74);
+insert into t (id,a) values (103,75);
+insert into t (id,a) values (103,76);
+insert into t (id,a) values (103,77);
+insert into t (id,a) values (103,78);
+insert into t (id,a) values (103,79);
+insert into t (id,a) values (103,80);
+insert into t (id,a) values (103,81);
+insert into t (id,a) values (103,82);
+insert into t (id,a) values (103,83);
+insert into t (id,a) values (103,84);
+insert into t (id,a) values (103,85);
+insert into t (id,a) values (103,86);
+insert into t (id,a) values (103,87);
+insert into t (id,a) values (103,88);
+insert into t (id,a) values (103,89);
+insert into t (id,a) values (103,90);
+insert into t (id,a) values (103,91);
+insert into t (id,a) values (103,92);
+insert into t (id,a) values (103,93);
+insert into t (id,a) values (103,94);
+insert into t (id,a) values (103,95);
+insert into t (id,a) values (103,96);
+insert into t (id,a) values (103,97);
+insert into t (id,a) values (103,98);
+insert into t (id,a) values (103,99);
+insert into t (id,a) values (104,0);
+insert into t (id,a) values (104,1);
+insert into t (id,a) values (104,2);
+insert into t (id,a) values (104,3);
+insert into t (id,a) values (104,4);
+insert into t (id,a) values (104,5);
+insert into t (id,a) values (104,6);
+insert into t (id,a) values (104,7);
+insert into t (id,a) values (104,8);
+insert into t (id,a) values (104,9);
+insert into t (id,a) values (104,10);
+insert into t (id,a) values (104,11);
+insert into t (id,a) values (104,12);
+insert into t (id,a) values (104,13);
+insert into t (id,a) values (104,14);
+insert into t (id,a) values (104,15);
+insert into t (id,a) values (104,16);
+insert into t (id,a) values (104,17);
+insert into t (id,a) values (104,18);
+insert into t (id,a) values (104,19);
+insert into t (id,a) values (104,20);
+insert into t (id,a) values (104,21);
+insert into t (id,a) values (104,22);
+insert into t (id,a) values (104,23);
+insert into t (id,a) values (104,24);
+insert into t (id,a) values (104,25);
+insert into t (id,a) values (104,26);
+insert into t (id,a) values (104,27);
+insert into t (id,a) values (104,28);
+insert into t (id,a) values (104,29);
+insert into t (id,a) values (104,30);
+insert into t (id,a) values (104,31);
+insert into t (id,a) values (104,32);
+insert into t (id,a) values (104,33);
+insert into t (id,a) values (104,34);
+insert into t (id,a) values (104,35);
+insert into t (id,a) values (104,36);
+insert into t (id,a) values (104,37);
+insert into t (id,a) values (104,38);
+insert into t (id,a) values (104,39);
+insert into t (id,a) values (104,40);
+insert into t (id,a) values (104,41);
+insert into t (id,a) values (104,42);
+insert into t (id,a) values (104,43);
+insert into t (id,a) values (104,44);
+insert into t (id,a) values (104,45);
+insert into t (id,a) values (104,46);
+insert into t (id,a) values (104,47);
+insert into t (id,a) values (104,48);
+insert into t (id,a) values (104,49);
+insert into t (id,a) values (104,50);
+insert into t (id,a) values (104,51);
+insert into t (id,a) values (104,52);
+insert into t (id,a) values (104,53);
+insert into t (id,a) values (104,54);
+insert into t (id,a) values (104,55);
+insert into t (id,a) values (104,56);
+insert into t (id,a) values (104,57);
+insert into t (id,a) values (104,58);
+insert into t (id,a) values (104,59);
+insert into t (id,a) values (104,60);
+insert into t (id,a) values (104,61);
+insert into t (id,a) values (104,62);
+insert into t (id,a) values (104,63);
+insert into t (id,a) values (104,64);
+insert into t (id,a) values (104,65);
+insert into t (id,a) values (104,66);
+insert into t (id,a) values (104,67);
+insert into t (id,a) values (104,68);
+insert into t (id,a) values (104,69);
+insert into t (id,a) values (104,70);
+insert into t (id,a) values (104,71);
+insert into t (id,a) values (104,72);
+insert into t (id,a) values (104,73);
+insert into t (id,a) values (104,74);
+insert into t (id,a) values (104,75);
+insert into t (id,a) values (104,76);
+insert into t (id,a) values (104,77);
+insert into t (id,a) values (104,78);
+insert into t (id,a) values (104,79);
+insert into t (id,a) values (104,80);
+insert into t (id,a) values (104,81);
+insert into t (id,a) values (104,82);
+insert into t (id,a) values (104,83);
+insert into t (id,a) values (104,84);
+insert into t (id,a) values (104,85);
+insert into t (id,a) values (104,86);
+insert into t (id,a) values (104,87);
+insert into t (id,a) values (104,88);
+insert into t (id,a) values (104,89);
+insert into t (id,a) values (104,90);
+insert into t (id,a) values (104,91);
+insert into t (id,a) values (104,92);
+insert into t (id,a) values (104,93);
+insert into t (id,a) values (104,94);
+insert into t (id,a) values (104,95);
+insert into t (id,a) values (104,96);
+insert into t (id,a) values (104,97);
+insert into t (id,a) values (104,98);
+insert into t (id,a) values (104,99);
+insert into t (id,a) values (105,0);
+insert into t (id,a) values (105,1);
+insert into t (id,a) values (105,2);
+insert into t (id,a) values (105,3);
+insert into t (id,a) values (105,4);
+insert into t (id,a) values (105,5);
+insert into t (id,a) values (105,6);
+insert into t (id,a) values (105,7);
+insert into t (id,a) values (105,8);
+insert into t (id,a) values (105,9);
+insert into t (id,a) values (105,10);
+insert into t (id,a) values (105,11);
+insert into t (id,a) values (105,12);
+insert into t (id,a) values (105,13);
+insert into t (id,a) values (105,14);
+insert into t (id,a) values (105,15);
+insert into t (id,a) values (105,16);
+insert into t (id,a) values (105,17);
+insert into t (id,a) values (105,18);
+insert into t (id,a) values (105,19);
+insert into t (id,a) values (105,20);
+insert into t (id,a) values (105,21);
+insert into t (id,a) values (105,22);
+insert into t (id,a) values (105,23);
+insert into t (id,a) values (105,24);
+insert into t (id,a) values (105,25);
+insert into t (id,a) values (105,26);
+insert into t (id,a) values (105,27);
+insert into t (id,a) values (105,28);
+insert into t (id,a) values (105,29);
+insert into t (id,a) values (105,30);
+insert into t (id,a) values (105,31);
+insert into t (id,a) values (105,32);
+insert into t (id,a) values (105,33);
+insert into t (id,a) values (105,34);
+insert into t (id,a) values (105,35);
+insert into t (id,a) values (105,36);
+insert into t (id,a) values (105,37);
+insert into t (id,a) values (105,38);
+insert into t (id,a) values (105,39);
+insert into t (id,a) values (105,40);
+insert into t (id,a) values (105,41);
+insert into t (id,a) values (105,42);
+insert into t (id,a) values (105,43);
+insert into t (id,a) values (105,44);
+insert into t (id,a) values (105,45);
+insert into t (id,a) values (105,46);
+insert into t (id,a) values (105,47);
+insert into t (id,a) values (105,48);
+insert into t (id,a) values (105,49);
+insert into t (id,a) values (105,50);
+insert into t (id,a) values (105,51);
+insert into t (id,a) values (105,52);
+insert into t (id,a) values (105,53);
+insert into t (id,a) values (105,54);
+insert into t (id,a) values (105,55);
+insert into t (id,a) values (105,56);
+insert into t (id,a) values (105,57);
+insert into t (id,a) values (105,58);
+insert into t (id,a) values (105,59);
+insert into t (id,a) values (105,60);
+insert into t (id,a) values (105,61);
+insert into t (id,a) values (105,62);
+insert into t (id,a) values (105,63);
+insert into t (id,a) values (105,64);
+insert into t (id,a) values (105,65);
+insert into t (id,a) values (105,66);
+insert into t (id,a) values (105,67);
+insert into t (id,a) values (105,68);
+insert into t (id,a) values (105,69);
+insert into t (id,a) values (105,70);
+insert into t (id,a) values (105,71);
+insert into t (id,a) values (105,72);
+insert into t (id,a) values (105,73);
+insert into t (id,a) values (105,74);
+insert into t (id,a) values (105,75);
+insert into t (id,a) values (105,76);
+insert into t (id,a) values (105,77);
+insert into t (id,a) values (105,78);
+insert into t (id,a) values (105,79);
+insert into t (id,a) values (105,80);
+insert into t (id,a) values (105,81);
+insert into t (id,a) values (105,82);
+insert into t (id,a) values (105,83);
+insert into t (id,a) values (105,84);
+insert into t (id,a) values (105,85);
+insert into t (id,a) values (105,86);
+insert into t (id,a) values (105,87);
+insert into t (id,a) values (105,88);
+insert into t (id,a) values (105,89);
+insert into t (id,a) values (105,90);
+insert into t (id,a) values (105,91);
+insert into t (id,a) values (105,92);
+insert into t (id,a) values (105,93);
+insert into t (id,a) values (105,94);
+insert into t (id,a) values (105,95);
+insert into t (id,a) values (105,96);
+insert into t (id,a) values (105,97);
+insert into t (id,a) values (105,98);
+insert into t (id,a) values (105,99);
+insert into t (id,a) values (106,0);
+insert into t (id,a) values (106,1);
+insert into t (id,a) values (106,2);
+insert into t (id,a) values (106,3);
+insert into t (id,a) values (106,4);
+insert into t (id,a) values (106,5);
+insert into t (id,a) values (106,6);
+insert into t (id,a) values (106,7);
+insert into t (id,a) values (106,8);
+insert into t (id,a) values (106,9);
+insert into t (id,a) values (106,10);
+insert into t (id,a) values (106,11);
+insert into t (id,a) values (106,12);
+insert into t (id,a) values (106,13);
+insert into t (id,a) values (106,14);
+insert into t (id,a) values (106,15);
+insert into t (id,a) values (106,16);
+insert into t (id,a) values (106,17);
+insert into t (id,a) values (106,18);
+insert into t (id,a) values (106,19);
+insert into t (id,a) values (106,20);
+insert into t (id,a) values (106,21);
+insert into t (id,a) values (106,22);
+insert into t (id,a) values (106,23);
+insert into t (id,a) values (106,24);
+insert into t (id,a) values (106,25);
+insert into t (id,a) values (106,26);
+insert into t (id,a) values (106,27);
+insert into t (id,a) values (106,28);
+insert into t (id,a) values (106,29);
+insert into t (id,a) values (106,30);
+insert into t (id,a) values (106,31);
+insert into t (id,a) values (106,32);
+insert into t (id,a) values (106,33);
+insert into t (id,a) values (106,34);
+insert into t (id,a) values (106,35);
+insert into t (id,a) values (106,36);
+insert into t (id,a) values (106,37);
+insert into t (id,a) values (106,38);
+insert into t (id,a) values (106,39);
+insert into t (id,a) values (106,40);
+insert into t (id,a) values (106,41);
+insert into t (id,a) values (106,42);
+insert into t (id,a) values (106,43);
+insert into t (id,a) values (106,44);
+insert into t (id,a) values (106,45);
+insert into t (id,a) values (106,46);
+insert into t (id,a) values (106,47);
+insert into t (id,a) values (106,48);
+insert into t (id,a) values (106,49);
+insert into t (id,a) values (106,50);
+insert into t (id,a) values (106,51);
+insert into t (id,a) values (106,52);
+insert into t (id,a) values (106,53);
+insert into t (id,a) values (106,54);
+insert into t (id,a) values (106,55);
+insert into t (id,a) values (106,56);
+insert into t (id,a) values (106,57);
+insert into t (id,a) values (106,58);
+insert into t (id,a) values (106,59);
+insert into t (id,a) values (106,60);
+insert into t (id,a) values (106,61);
+insert into t (id,a) values (106,62);
+insert into t (id,a) values (106,63);
+insert into t (id,a) values (106,64);
+insert into t (id,a) values (106,65);
+insert into t (id,a) values (106,66);
+insert into t (id,a) values (106,67);
+insert into t (id,a) values (106,68);
+insert into t (id,a) values (106,69);
+insert into t (id,a) values (106,70);
+insert into t (id,a) values (106,71);
+insert into t (id,a) values (106,72);
+insert into t (id,a) values (106,73);
+insert into t (id,a) values (106,74);
+insert into t (id,a) values (106,75);
+insert into t (id,a) values (106,76);
+insert into t (id,a) values (106,77);
+insert into t (id,a) values (106,78);
+insert into t (id,a) values (106,79);
+insert into t (id,a) values (106,80);
+insert into t (id,a) values (106,81);
+insert into t (id,a) values (106,82);
+insert into t (id,a) values (106,83);
+insert into t (id,a) values (106,84);
+insert into t (id,a) values (106,85);
+insert into t (id,a) values (106,86);
+insert into t (id,a) values (106,87);
+insert into t (id,a) values (106,88);
+insert into t (id,a) values (106,89);
+insert into t (id,a) values (106,90);
+insert into t (id,a) values (106,91);
+insert into t (id,a) values (106,92);
+insert into t (id,a) values (106,93);
+insert into t (id,a) values (106,94);
+insert into t (id,a) values (106,95);
+insert into t (id,a) values (106,96);
+insert into t (id,a) values (106,97);
+insert into t (id,a) values (106,98);
+insert into t (id,a) values (106,99);
+insert into t (id,a) values (107,0);
+insert into t (id,a) values (107,1);
+insert into t (id,a) values (107,2);
+insert into t (id,a) values (107,3);
+insert into t (id,a) values (107,4);
+insert into t (id,a) values (107,5);
+insert into t (id,a) values (107,6);
+insert into t (id,a) values (107,7);
+insert into t (id,a) values (107,8);
+insert into t (id,a) values (107,9);
+insert into t (id,a) values (107,10);
+insert into t (id,a) values (107,11);
+insert into t (id,a) values (107,12);
+insert into t (id,a) values (107,13);
+insert into t (id,a) values (107,14);
+insert into t (id,a) values (107,15);
+insert into t (id,a) values (107,16);
+insert into t (id,a) values (107,17);
+insert into t (id,a) values (107,18);
+insert into t (id,a) values (107,19);
+insert into t (id,a) values (107,20);
+insert into t (id,a) values (107,21);
+insert into t (id,a) values (107,22);
+insert into t (id,a) values (107,23);
+insert into t (id,a) values (107,24);
+insert into t (id,a) values (107,25);
+insert into t (id,a) values (107,26);
+insert into t (id,a) values (107,27);
+insert into t (id,a) values (107,28);
+insert into t (id,a) values (107,29);
+insert into t (id,a) values (107,30);
+insert into t (id,a) values (107,31);
+insert into t (id,a) values (107,32);
+insert into t (id,a) values (107,33);
+insert into t (id,a) values (107,34);
+insert into t (id,a) values (107,35);
+insert into t (id,a) values (107,36);
+insert into t (id,a) values (107,37);
+insert into t (id,a) values (107,38);
+insert into t (id,a) values (107,39);
+insert into t (id,a) values (107,40);
+insert into t (id,a) values (107,41);
+insert into t (id,a) values (107,42);
+insert into t (id,a) values (107,43);
+insert into t (id,a) values (107,44);
+insert into t (id,a) values (107,45);
+insert into t (id,a) values (107,46);
+insert into t (id,a) values (107,47);
+insert into t (id,a) values (107,48);
+insert into t (id,a) values (107,49);
+insert into t (id,a) values (107,50);
+insert into t (id,a) values (107,51);
+insert into t (id,a) values (107,52);
+insert into t (id,a) values (107,53);
+insert into t (id,a) values (107,54);
+insert into t (id,a) values (107,55);
+insert into t (id,a) values (107,56);
+insert into t (id,a) values (107,57);
+insert into t (id,a) values (107,58);
+insert into t (id,a) values (107,59);
+insert into t (id,a) values (107,60);
+insert into t (id,a) values (107,61);
+insert into t (id,a) values (107,62);
+insert into t (id,a) values (107,63);
+insert into t (id,a) values (107,64);
+insert into t (id,a) values (107,65);
+insert into t (id,a) values (107,66);
+insert into t (id,a) values (107,67);
+insert into t (id,a) values (107,68);
+insert into t (id,a) values (107,69);
+insert into t (id,a) values (107,70);
+insert into t (id,a) values (107,71);
+insert into t (id,a) values (107,72);
+insert into t (id,a) values (107,73);
+insert into t (id,a) values (107,74);
+insert into t (id,a) values (107,75);
+insert into t (id,a) values (107,76);
+insert into t (id,a) values (107,77);
+insert into t (id,a) values (107,78);
+insert into t (id,a) values (107,79);
+insert into t (id,a) values (107,80);
+insert into t (id,a) values (107,81);
+insert into t (id,a) values (107,82);
+insert into t (id,a) values (107,83);
+insert into t (id,a) values (107,84);
+insert into t (id,a) values (107,85);
+insert into t (id,a) values (107,86);
+insert into t (id,a) values (107,87);
+insert into t (id,a) values (107,88);
+insert into t (id,a) values (107,89);
+insert into t (id,a) values (107,90);
+insert into t (id,a) values (107,91);
+insert into t (id,a) values (107,92);
+insert into t (id,a) values (107,93);
+insert into t (id,a) values (107,94);
+insert into t (id,a) values (107,95);
+insert into t (id,a) values (107,96);
+insert into t (id,a) values (107,97);
+insert into t (id,a) values (107,98);
+insert into t (id,a) values (107,99);
+insert into t (id,a) values (108,0);
+insert into t (id,a) values (108,1);
+insert into t (id,a) values (108,2);
+insert into t (id,a) values (108,3);
+insert into t (id,a) values (108,4);
+insert into t (id,a) values (108,5);
+insert into t (id,a) values (108,6);
+insert into t (id,a) values (108,7);
+insert into t (id,a) values (108,8);
+insert into t (id,a) values (108,9);
+insert into t (id,a) values (108,10);
+insert into t (id,a) values (108,11);
+insert into t (id,a) values (108,12);
+insert into t (id,a) values (108,13);
+insert into t (id,a) values (108,14);
+insert into t (id,a) values (108,15);
+insert into t (id,a) values (108,16);
+insert into t (id,a) values (108,17);
+insert into t (id,a) values (108,18);
+insert into t (id,a) values (108,19);
+insert into t (id,a) values (108,20);
+insert into t (id,a) values (108,21);
+insert into t (id,a) values (108,22);
+insert into t (id,a) values (108,23);
+insert into t (id,a) values (108,24);
+insert into t (id,a) values (108,25);
+insert into t (id,a) values (108,26);
+insert into t (id,a) values (108,27);
+insert into t (id,a) values (108,28);
+insert into t (id,a) values (108,29);
+insert into t (id,a) values (108,30);
+insert into t (id,a) values (108,31);
+insert into t (id,a) values (108,32);
+insert into t (id,a) values (108,33);
+insert into t (id,a) values (108,34);
+insert into t (id,a) values (108,35);
+insert into t (id,a) values (108,36);
+insert into t (id,a) values (108,37);
+insert into t (id,a) values (108,38);
+insert into t (id,a) values (108,39);
+insert into t (id,a) values (108,40);
+insert into t (id,a) values (108,41);
+insert into t (id,a) values (108,42);
+insert into t (id,a) values (108,43);
+insert into t (id,a) values (108,44);
+insert into t (id,a) values (108,45);
+insert into t (id,a) values (108,46);
+insert into t (id,a) values (108,47);
+insert into t (id,a) values (108,48);
+insert into t (id,a) values (108,49);
+insert into t (id,a) values (108,50);
+insert into t (id,a) values (108,51);
+insert into t (id,a) values (108,52);
+insert into t (id,a) values (108,53);
+insert into t (id,a) values (108,54);
+insert into t (id,a) values (108,55);
+insert into t (id,a) values (108,56);
+insert into t (id,a) values (108,57);
+insert into t (id,a) values (108,58);
+insert into t (id,a) values (108,59);
+insert into t (id,a) values (108,60);
+insert into t (id,a) values (108,61);
+insert into t (id,a) values (108,62);
+insert into t (id,a) values (108,63);
+insert into t (id,a) values (108,64);
+insert into t (id,a) values (108,65);
+insert into t (id,a) values (108,66);
+insert into t (id,a) values (108,67);
+insert into t (id,a) values (108,68);
+insert into t (id,a) values (108,69);
+insert into t (id,a) values (108,70);
+insert into t (id,a) values (108,71);
+insert into t (id,a) values (108,72);
+insert into t (id,a) values (108,73);
+insert into t (id,a) values (108,74);
+insert into t (id,a) values (108,75);
+insert into t (id,a) values (108,76);
+insert into t (id,a) values (108,77);
+insert into t (id,a) values (108,78);
+insert into t (id,a) values (108,79);
+insert into t (id,a) values (108,80);
+insert into t (id,a) values (108,81);
+insert into t (id,a) values (108,82);
+insert into t (id,a) values (108,83);
+insert into t (id,a) values (108,84);
+insert into t (id,a) values (108,85);
+insert into t (id,a) values (108,86);
+insert into t (id,a) values (108,87);
+insert into t (id,a) values (108,88);
+insert into t (id,a) values (108,89);
+insert into t (id,a) values (108,90);
+insert into t (id,a) values (108,91);
+insert into t (id,a) values (108,92);
+insert into t (id,a) values (108,93);
+insert into t (id,a) values (108,94);
+insert into t (id,a) values (108,95);
+insert into t (id,a) values (108,96);
+insert into t (id,a) values (108,97);
+insert into t (id,a) values (108,98);
+insert into t (id,a) values (108,99);
+insert into t (id,a) values (109,0);
+insert into t (id,a) values (109,1);
+insert into t (id,a) values (109,2);
+insert into t (id,a) values (109,3);
+insert into t (id,a) values (109,4);
+insert into t (id,a) values (109,5);
+insert into t (id,a) values (109,6);
+insert into t (id,a) values (109,7);
+insert into t (id,a) values (109,8);
+insert into t (id,a) values (109,9);
+insert into t (id,a) values (109,10);
+insert into t (id,a) values (109,11);
+insert into t (id,a) values (109,12);
+insert into t (id,a) values (109,13);
+insert into t (id,a) values (109,14);
+insert into t (id,a) values (109,15);
+insert into t (id,a) values (109,16);
+insert into t (id,a) values (109,17);
+insert into t (id,a) values (109,18);
+insert into t (id,a) values (109,19);
+insert into t (id,a) values (109,20);
+insert into t (id,a) values (109,21);
+insert into t (id,a) values (109,22);
+insert into t (id,a) values (109,23);
+insert into t (id,a) values (109,24);
+insert into t (id,a) values (109,25);
+insert into t (id,a) values (109,26);
+insert into t (id,a) values (109,27);
+insert into t (id,a) values (109,28);
+insert into t (id,a) values (109,29);
+insert into t (id,a) values (109,30);
+insert into t (id,a) values (109,31);
+insert into t (id,a) values (109,32);
+insert into t (id,a) values (109,33);
+insert into t (id,a) values (109,34);
+insert into t (id,a) values (109,35);
+insert into t (id,a) values (109,36);
+insert into t (id,a) values (109,37);
+insert into t (id,a) values (109,38);
+insert into t (id,a) values (109,39);
+insert into t (id,a) values (109,40);
+insert into t (id,a) values (109,41);
+insert into t (id,a) values (109,42);
+insert into t (id,a) values (109,43);
+insert into t (id,a) values (109,44);
+insert into t (id,a) values (109,45);
+insert into t (id,a) values (109,46);
+insert into t (id,a) values (109,47);
+insert into t (id,a) values (109,48);
+insert into t (id,a) values (109,49);
+insert into t (id,a) values (109,50);
+insert into t (id,a) values (109,51);
+insert into t (id,a) values (109,52);
+insert into t (id,a) values (109,53);
+insert into t (id,a) values (109,54);
+insert into t (id,a) values (109,55);
+insert into t (id,a) values (109,56);
+insert into t (id,a) values (109,57);
+insert into t (id,a) values (109,58);
+insert into t (id,a) values (109,59);
+insert into t (id,a) values (109,60);
+insert into t (id,a) values (109,61);
+insert into t (id,a) values (109,62);
+insert into t (id,a) values (109,63);
+insert into t (id,a) values (109,64);
+insert into t (id,a) values (109,65);
+insert into t (id,a) values (109,66);
+insert into t (id,a) values (109,67);
+insert into t (id,a) values (109,68);
+insert into t (id,a) values (109,69);
+insert into t (id,a) values (109,70);
+insert into t (id,a) values (109,71);
+insert into t (id,a) values (109,72);
+insert into t (id,a) values (109,73);
+insert into t (id,a) values (109,74);
+insert into t (id,a) values (109,75);
+insert into t (id,a) values (109,76);
+insert into t (id,a) values (109,77);
+insert into t (id,a) values (109,78);
+insert into t (id,a) values (109,79);
+insert into t (id,a) values (109,80);
+insert into t (id,a) values (109,81);
+insert into t (id,a) values (109,82);
+insert into t (id,a) values (109,83);
+insert into t (id,a) values (109,84);
+insert into t (id,a) values (109,85);
+insert into t (id,a) values (109,86);
+insert into t (id,a) values (109,87);
+insert into t (id,a) values (109,88);
+insert into t (id,a) values (109,89);
+insert into t (id,a) values (109,90);
+insert into t (id,a) values (109,91);
+insert into t (id,a) values (109,92);
+insert into t (id,a) values (109,93);
+insert into t (id,a) values (109,94);
+insert into t (id,a) values (109,95);
+insert into t (id,a) values (109,96);
+insert into t (id,a) values (109,97);
+insert into t (id,a) values (109,98);
+insert into t (id,a) values (109,99);
+insert into t (id,a) values (110,0);
+insert into t (id,a) values (110,1);
+insert into t (id,a) values (110,2);
+insert into t (id,a) values (110,3);
+insert into t (id,a) values (110,4);
+insert into t (id,a) values (110,5);
+insert into t (id,a) values (110,6);
+insert into t (id,a) values (110,7);
+insert into t (id,a) values (110,8);
+insert into t (id,a) values (110,9);
+insert into t (id,a) values (110,10);
+insert into t (id,a) values (110,11);
+insert into t (id,a) values (110,12);
+insert into t (id,a) values (110,13);
+insert into t (id,a) values (110,14);
+insert into t (id,a) values (110,15);
+insert into t (id,a) values (110,16);
+insert into t (id,a) values (110,17);
+insert into t (id,a) values (110,18);
+insert into t (id,a) values (110,19);
+insert into t (id,a) values (110,20);
+insert into t (id,a) values (110,21);
+insert into t (id,a) values (110,22);
+insert into t (id,a) values (110,23);
+insert into t (id,a) values (110,24);
+insert into t (id,a) values (110,25);
+insert into t (id,a) values (110,26);
+insert into t (id,a) values (110,27);
+insert into t (id,a) values (110,28);
+insert into t (id,a) values (110,29);
+insert into t (id,a) values (110,30);
+insert into t (id,a) values (110,31);
+insert into t (id,a) values (110,32);
+insert into t (id,a) values (110,33);
+insert into t (id,a) values (110,34);
+insert into t (id,a) values (110,35);
+insert into t (id,a) values (110,36);
+insert into t (id,a) values (110,37);
+insert into t (id,a) values (110,38);
+insert into t (id,a) values (110,39);
+insert into t (id,a) values (110,40);
+insert into t (id,a) values (110,41);
+insert into t (id,a) values (110,42);
+insert into t (id,a) values (110,43);
+insert into t (id,a) values (110,44);
+insert into t (id,a) values (110,45);
+insert into t (id,a) values (110,46);
+insert into t (id,a) values (110,47);
+insert into t (id,a) values (110,48);
+insert into t (id,a) values (110,49);
+insert into t (id,a) values (110,50);
+insert into t (id,a) values (110,51);
+insert into t (id,a) values (110,52);
+insert into t (id,a) values (110,53);
+insert into t (id,a) values (110,54);
+insert into t (id,a) values (110,55);
+insert into t (id,a) values (110,56);
+insert into t (id,a) values (110,57);
+insert into t (id,a) values (110,58);
+insert into t (id,a) values (110,59);
+insert into t (id,a) values (110,60);
+insert into t (id,a) values (110,61);
+insert into t (id,a) values (110,62);
+insert into t (id,a) values (110,63);
+insert into t (id,a) values (110,64);
+insert into t (id,a) values (110,65);
+insert into t (id,a) values (110,66);
+insert into t (id,a) values (110,67);
+insert into t (id,a) values (110,68);
+insert into t (id,a) values (110,69);
+insert into t (id,a) values (110,70);
+insert into t (id,a) values (110,71);
+insert into t (id,a) values (110,72);
+insert into t (id,a) values (110,73);
+insert into t (id,a) values (110,74);
+insert into t (id,a) values (110,75);
+insert into t (id,a) values (110,76);
+insert into t (id,a) values (110,77);
+insert into t (id,a) values (110,78);
+insert into t (id,a) values (110,79);
+insert into t (id,a) values (110,80);
+insert into t (id,a) values (110,81);
+insert into t (id,a) values (110,82);
+insert into t (id,a) values (110,83);
+insert into t (id,a) values (110,84);
+insert into t (id,a) values (110,85);
+insert into t (id,a) values (110,86);
+insert into t (id,a) values (110,87);
+insert into t (id,a) values (110,88);
+insert into t (id,a) values (110,89);
+insert into t (id,a) values (110,90);
+insert into t (id,a) values (110,91);
+insert into t (id,a) values (110,92);
+insert into t (id,a) values (110,93);
+insert into t (id,a) values (110,94);
+insert into t (id,a) values (110,95);
+insert into t (id,a) values (110,96);
+insert into t (id,a) values (110,97);
+insert into t (id,a) values (110,98);
+insert into t (id,a) values (110,99);
+insert into t (id,a) values (111,0);
+insert into t (id,a) values (111,1);
+insert into t (id,a) values (111,2);
+insert into t (id,a) values (111,3);
+insert into t (id,a) values (111,4);
+insert into t (id,a) values (111,5);
+insert into t (id,a) values (111,6);
+insert into t (id,a) values (111,7);
+insert into t (id,a) values (111,8);
+insert into t (id,a) values (111,9);
+insert into t (id,a) values (111,10);
+insert into t (id,a) values (111,11);
+insert into t (id,a) values (111,12);
+insert into t (id,a) values (111,13);
+insert into t (id,a) values (111,14);
+insert into t (id,a) values (111,15);
+insert into t (id,a) values (111,16);
+insert into t (id,a) values (111,17);
+insert into t (id,a) values (111,18);
+insert into t (id,a) values (111,19);
+insert into t (id,a) values (111,20);
+insert into t (id,a) values (111,21);
+insert into t (id,a) values (111,22);
+insert into t (id,a) values (111,23);
+insert into t (id,a) values (111,24);
+insert into t (id,a) values (111,25);
+insert into t (id,a) values (111,26);
+insert into t (id,a) values (111,27);
+insert into t (id,a) values (111,28);
+insert into t (id,a) values (111,29);
+insert into t (id,a) values (111,30);
+insert into t (id,a) values (111,31);
+insert into t (id,a) values (111,32);
+insert into t (id,a) values (111,33);
+insert into t (id,a) values (111,34);
+insert into t (id,a) values (111,35);
+insert into t (id,a) values (111,36);
+insert into t (id,a) values (111,37);
+insert into t (id,a) values (111,38);
+insert into t (id,a) values (111,39);
+insert into t (id,a) values (111,40);
+insert into t (id,a) values (111,41);
+insert into t (id,a) values (111,42);
+insert into t (id,a) values (111,43);
+insert into t (id,a) values (111,44);
+insert into t (id,a) values (111,45);
+insert into t (id,a) values (111,46);
+insert into t (id,a) values (111,47);
+insert into t (id,a) values (111,48);
+insert into t (id,a) values (111,49);
+insert into t (id,a) values (111,50);
+insert into t (id,a) values (111,51);
+insert into t (id,a) values (111,52);
+insert into t (id,a) values (111,53);
+insert into t (id,a) values (111,54);
+insert into t (id,a) values (111,55);
+insert into t (id,a) values (111,56);
+insert into t (id,a) values (111,57);
+insert into t (id,a) values (111,58);
+insert into t (id,a) values (111,59);
+insert into t (id,a) values (111,60);
+insert into t (id,a) values (111,61);
+insert into t (id,a) values (111,62);
+insert into t (id,a) values (111,63);
+insert into t (id,a) values (111,64);
+insert into t (id,a) values (111,65);
+insert into t (id,a) values (111,66);
+insert into t (id,a) values (111,67);
+insert into t (id,a) values (111,68);
+insert into t (id,a) values (111,69);
+insert into t (id,a) values (111,70);
+insert into t (id,a) values (111,71);
+insert into t (id,a) values (111,72);
+insert into t (id,a) values (111,73);
+insert into t (id,a) values (111,74);
+insert into t (id,a) values (111,75);
+insert into t (id,a) values (111,76);
+insert into t (id,a) values (111,77);
+insert into t (id,a) values (111,78);
+insert into t (id,a) values (111,79);
+insert into t (id,a) values (111,80);
+insert into t (id,a) values (111,81);
+insert into t (id,a) values (111,82);
+insert into t (id,a) values (111,83);
+insert into t (id,a) values (111,84);
+insert into t (id,a) values (111,85);
+insert into t (id,a) values (111,86);
+insert into t (id,a) values (111,87);
+insert into t (id,a) values (111,88);
+insert into t (id,a) values (111,89);
+insert into t (id,a) values (111,90);
+insert into t (id,a) values (111,91);
+insert into t (id,a) values (111,92);
+insert into t (id,a) values (111,93);
+insert into t (id,a) values (111,94);
+insert into t (id,a) values (111,95);
+insert into t (id,a) values (111,96);
+insert into t (id,a) values (111,97);
+insert into t (id,a) values (111,98);
+insert into t (id,a) values (111,99);
+insert into t (id,a) values (112,0);
+insert into t (id,a) values (112,1);
+insert into t (id,a) values (112,2);
+insert into t (id,a) values (112,3);
+insert into t (id,a) values (112,4);
+insert into t (id,a) values (112,5);
+insert into t (id,a) values (112,6);
+insert into t (id,a) values (112,7);
+insert into t (id,a) values (112,8);
+insert into t (id,a) values (112,9);
+insert into t (id,a) values (112,10);
+insert into t (id,a) values (112,11);
+insert into t (id,a) values (112,12);
+insert into t (id,a) values (112,13);
+insert into t (id,a) values (112,14);
+insert into t (id,a) values (112,15);
+insert into t (id,a) values (112,16);
+insert into t (id,a) values (112,17);
+insert into t (id,a) values (112,18);
+insert into t (id,a) values (112,19);
+insert into t (id,a) values (112,20);
+insert into t (id,a) values (112,21);
+insert into t (id,a) values (112,22);
+insert into t (id,a) values (112,23);
+insert into t (id,a) values (112,24);
+insert into t (id,a) values (112,25);
+insert into t (id,a) values (112,26);
+insert into t (id,a) values (112,27);
+insert into t (id,a) values (112,28);
+insert into t (id,a) values (112,29);
+insert into t (id,a) values (112,30);
+insert into t (id,a) values (112,31);
+insert into t (id,a) values (112,32);
+insert into t (id,a) values (112,33);
+insert into t (id,a) values (112,34);
+insert into t (id,a) values (112,35);
+insert into t (id,a) values (112,36);
+insert into t (id,a) values (112,37);
+insert into t (id,a) values (112,38);
+insert into t (id,a) values (112,39);
+insert into t (id,a) values (112,40);
+insert into t (id,a) values (112,41);
+insert into t (id,a) values (112,42);
+insert into t (id,a) values (112,43);
+insert into t (id,a) values (112,44);
+insert into t (id,a) values (112,45);
+insert into t (id,a) values (112,46);
+insert into t (id,a) values (112,47);
+insert into t (id,a) values (112,48);
+insert into t (id,a) values (112,49);
+insert into t (id,a) values (112,50);
+insert into t (id,a) values (112,51);
+insert into t (id,a) values (112,52);
+insert into t (id,a) values (112,53);
+insert into t (id,a) values (112,54);
+insert into t (id,a) values (112,55);
+insert into t (id,a) values (112,56);
+insert into t (id,a) values (112,57);
+insert into t (id,a) values (112,58);
+insert into t (id,a) values (112,59);
+insert into t (id,a) values (112,60);
+insert into t (id,a) values (112,61);
+insert into t (id,a) values (112,62);
+insert into t (id,a) values (112,63);
+insert into t (id,a) values (112,64);
+insert into t (id,a) values (112,65);
+insert into t (id,a) values (112,66);
+insert into t (id,a) values (112,67);
+insert into t (id,a) values (112,68);
+insert into t (id,a) values (112,69);
+insert into t (id,a) values (112,70);
+insert into t (id,a) values (112,71);
+insert into t (id,a) values (112,72);
+insert into t (id,a) values (112,73);
+insert into t (id,a) values (112,74);
+insert into t (id,a) values (112,75);
+insert into t (id,a) values (112,76);
+insert into t (id,a) values (112,77);
+insert into t (id,a) values (112,78);
+insert into t (id,a) values (112,79);
+insert into t (id,a) values (112,80);
+insert into t (id,a) values (112,81);
+insert into t (id,a) values (112,82);
+insert into t (id,a) values (112,83);
+insert into t (id,a) values (112,84);
+insert into t (id,a) values (112,85);
+insert into t (id,a) values (112,86);
+insert into t (id,a) values (112,87);
+insert into t (id,a) values (112,88);
+insert into t (id,a) values (112,89);
+insert into t (id,a) values (112,90);
+insert into t (id,a) values (112,91);
+insert into t (id,a) values (112,92);
+insert into t (id,a) values (112,93);
+insert into t (id,a) values (112,94);
+insert into t (id,a) values (112,95);
+insert into t (id,a) values (112,96);
+insert into t (id,a) values (112,97);
+insert into t (id,a) values (112,98);
+insert into t (id,a) values (112,99);
+insert into t (id,a) values (113,0);
+insert into t (id,a) values (113,1);
+insert into t (id,a) values (113,2);
+insert into t (id,a) values (113,3);
+insert into t (id,a) values (113,4);
+insert into t (id,a) values (113,5);
+insert into t (id,a) values (113,6);
+insert into t (id,a) values (113,7);
+insert into t (id,a) values (113,8);
+insert into t (id,a) values (113,9);
+insert into t (id,a) values (113,10);
+insert into t (id,a) values (113,11);
+insert into t (id,a) values (113,12);
+insert into t (id,a) values (113,13);
+insert into t (id,a) values (113,14);
+insert into t (id,a) values (113,15);
+insert into t (id,a) values (113,16);
+insert into t (id,a) values (113,17);
+insert into t (id,a) values (113,18);
+insert into t (id,a) values (113,19);
+insert into t (id,a) values (113,20);
+insert into t (id,a) values (113,21);
+insert into t (id,a) values (113,22);
+insert into t (id,a) values (113,23);
+insert into t (id,a) values (113,24);
+insert into t (id,a) values (113,25);
+insert into t (id,a) values (113,26);
+insert into t (id,a) values (113,27);
+insert into t (id,a) values (113,28);
+insert into t (id,a) values (113,29);
+insert into t (id,a) values (113,30);
+insert into t (id,a) values (113,31);
+insert into t (id,a) values (113,32);
+insert into t (id,a) values (113,33);
+insert into t (id,a) values (113,34);
+insert into t (id,a) values (113,35);
+insert into t (id,a) values (113,36);
+insert into t (id,a) values (113,37);
+insert into t (id,a) values (113,38);
+insert into t (id,a) values (113,39);
+insert into t (id,a) values (113,40);
+insert into t (id,a) values (113,41);
+insert into t (id,a) values (113,42);
+insert into t (id,a) values (113,43);
+insert into t (id,a) values (113,44);
+insert into t (id,a) values (113,45);
+insert into t (id,a) values (113,46);
+insert into t (id,a) values (113,47);
+insert into t (id,a) values (113,48);
+insert into t (id,a) values (113,49);
+insert into t (id,a) values (113,50);
+insert into t (id,a) values (113,51);
+insert into t (id,a) values (113,52);
+insert into t (id,a) values (113,53);
+insert into t (id,a) values (113,54);
+insert into t (id,a) values (113,55);
+insert into t (id,a) values (113,56);
+insert into t (id,a) values (113,57);
+insert into t (id,a) values (113,58);
+insert into t (id,a) values (113,59);
+insert into t (id,a) values (113,60);
+insert into t (id,a) values (113,61);
+insert into t (id,a) values (113,62);
+insert into t (id,a) values (113,63);
+insert into t (id,a) values (113,64);
+insert into t (id,a) values (113,65);
+insert into t (id,a) values (113,66);
+insert into t (id,a) values (113,67);
+insert into t (id,a) values (113,68);
+insert into t (id,a) values (113,69);
+insert into t (id,a) values (113,70);
+insert into t (id,a) values (113,71);
+insert into t (id,a) values (113,72);
+insert into t (id,a) values (113,73);
+insert into t (id,a) values (113,74);
+insert into t (id,a) values (113,75);
+insert into t (id,a) values (113,76);
+insert into t (id,a) values (113,77);
+insert into t (id,a) values (113,78);
+insert into t (id,a) values (113,79);
+insert into t (id,a) values (113,80);
+insert into t (id,a) values (113,81);
+insert into t (id,a) values (113,82);
+insert into t (id,a) values (113,83);
+insert into t (id,a) values (113,84);
+insert into t (id,a) values (113,85);
+insert into t (id,a) values (113,86);
+insert into t (id,a) values (113,87);
+insert into t (id,a) values (113,88);
+insert into t (id,a) values (113,89);
+insert into t (id,a) values (113,90);
+insert into t (id,a) values (113,91);
+insert into t (id,a) values (113,92);
+insert into t (id,a) values (113,93);
+insert into t (id,a) values (113,94);
+insert into t (id,a) values (113,95);
+insert into t (id,a) values (113,96);
+insert into t (id,a) values (113,97);
+insert into t (id,a) values (113,98);
+insert into t (id,a) values (113,99);
+insert into t (id,a) values (114,0);
+insert into t (id,a) values (114,1);
+insert into t (id,a) values (114,2);
+insert into t (id,a) values (114,3);
+insert into t (id,a) values (114,4);
+insert into t (id,a) values (114,5);
+insert into t (id,a) values (114,6);
+insert into t (id,a) values (114,7);
+insert into t (id,a) values (114,8);
+insert into t (id,a) values (114,9);
+insert into t (id,a) values (114,10);
+insert into t (id,a) values (114,11);
+insert into t (id,a) values (114,12);
+insert into t (id,a) values (114,13);
+insert into t (id,a) values (114,14);
+insert into t (id,a) values (114,15);
+insert into t (id,a) values (114,16);
+insert into t (id,a) values (114,17);
+insert into t (id,a) values (114,18);
+insert into t (id,a) values (114,19);
+insert into t (id,a) values (114,20);
+insert into t (id,a) values (114,21);
+insert into t (id,a) values (114,22);
+insert into t (id,a) values (114,23);
+insert into t (id,a) values (114,24);
+insert into t (id,a) values (114,25);
+insert into t (id,a) values (114,26);
+insert into t (id,a) values (114,27);
+insert into t (id,a) values (114,28);
+insert into t (id,a) values (114,29);
+insert into t (id,a) values (114,30);
+insert into t (id,a) values (114,31);
+insert into t (id,a) values (114,32);
+insert into t (id,a) values (114,33);
+insert into t (id,a) values (114,34);
+insert into t (id,a) values (114,35);
+insert into t (id,a) values (114,36);
+insert into t (id,a) values (114,37);
+insert into t (id,a) values (114,38);
+insert into t (id,a) values (114,39);
+insert into t (id,a) values (114,40);
+insert into t (id,a) values (114,41);
+insert into t (id,a) values (114,42);
+insert into t (id,a) values (114,43);
+insert into t (id,a) values (114,44);
+insert into t (id,a) values (114,45);
+insert into t (id,a) values (114,46);
+insert into t (id,a) values (114,47);
+insert into t (id,a) values (114,48);
+insert into t (id,a) values (114,49);
+insert into t (id,a) values (114,50);
+insert into t (id,a) values (114,51);
+insert into t (id,a) values (114,52);
+insert into t (id,a) values (114,53);
+insert into t (id,a) values (114,54);
+insert into t (id,a) values (114,55);
+insert into t (id,a) values (114,56);
+insert into t (id,a) values (114,57);
+insert into t (id,a) values (114,58);
+insert into t (id,a) values (114,59);
+insert into t (id,a) values (114,60);
+insert into t (id,a) values (114,61);
+insert into t (id,a) values (114,62);
+insert into t (id,a) values (114,63);
+insert into t (id,a) values (114,64);
+insert into t (id,a) values (114,65);
+insert into t (id,a) values (114,66);
+insert into t (id,a) values (114,67);
+insert into t (id,a) values (114,68);
+insert into t (id,a) values (114,69);
+insert into t (id,a) values (114,70);
+insert into t (id,a) values (114,71);
+insert into t (id,a) values (114,72);
+insert into t (id,a) values (114,73);
+insert into t (id,a) values (114,74);
+insert into t (id,a) values (114,75);
+insert into t (id,a) values (114,76);
+insert into t (id,a) values (114,77);
+insert into t (id,a) values (114,78);
+insert into t (id,a) values (114,79);
+insert into t (id,a) values (114,80);
+insert into t (id,a) values (114,81);
+insert into t (id,a) values (114,82);
+insert into t (id,a) values (114,83);
+insert into t (id,a) values (114,84);
+insert into t (id,a) values (114,85);
+insert into t (id,a) values (114,86);
+insert into t (id,a) values (114,87);
+insert into t (id,a) values (114,88);
+insert into t (id,a) values (114,89);
+insert into t (id,a) values (114,90);
+insert into t (id,a) values (114,91);
+insert into t (id,a) values (114,92);
+insert into t (id,a) values (114,93);
+insert into t (id,a) values (114,94);
+insert into t (id,a) values (114,95);
+insert into t (id,a) values (114,96);
+insert into t (id,a) values (114,97);
+insert into t (id,a) values (114,98);
+insert into t (id,a) values (114,99);
+insert into t (id,a) values (115,0);
+insert into t (id,a) values (115,1);
+insert into t (id,a) values (115,2);
+insert into t (id,a) values (115,3);
+insert into t (id,a) values (115,4);
+insert into t (id,a) values (115,5);
+insert into t (id,a) values (115,6);
+insert into t (id,a) values (115,7);
+insert into t (id,a) values (115,8);
+insert into t (id,a) values (115,9);
+insert into t (id,a) values (115,10);
+insert into t (id,a) values (115,11);
+insert into t (id,a) values (115,12);
+insert into t (id,a) values (115,13);
+insert into t (id,a) values (115,14);
+insert into t (id,a) values (115,15);
+insert into t (id,a) values (115,16);
+insert into t (id,a) values (115,17);
+insert into t (id,a) values (115,18);
+insert into t (id,a) values (115,19);
+insert into t (id,a) values (115,20);
+insert into t (id,a) values (115,21);
+insert into t (id,a) values (115,22);
+insert into t (id,a) values (115,23);
+insert into t (id,a) values (115,24);
+insert into t (id,a) values (115,25);
+insert into t (id,a) values (115,26);
+insert into t (id,a) values (115,27);
+insert into t (id,a) values (115,28);
+insert into t (id,a) values (115,29);
+insert into t (id,a) values (115,30);
+insert into t (id,a) values (115,31);
+insert into t (id,a) values (115,32);
+insert into t (id,a) values (115,33);
+insert into t (id,a) values (115,34);
+insert into t (id,a) values (115,35);
+insert into t (id,a) values (115,36);
+insert into t (id,a) values (115,37);
+insert into t (id,a) values (115,38);
+insert into t (id,a) values (115,39);
+insert into t (id,a) values (115,40);
+insert into t (id,a) values (115,41);
+insert into t (id,a) values (115,42);
+insert into t (id,a) values (115,43);
+insert into t (id,a) values (115,44);
+insert into t (id,a) values (115,45);
+insert into t (id,a) values (115,46);
+insert into t (id,a) values (115,47);
+insert into t (id,a) values (115,48);
+insert into t (id,a) values (115,49);
+insert into t (id,a) values (115,50);
+insert into t (id,a) values (115,51);
+insert into t (id,a) values (115,52);
+insert into t (id,a) values (115,53);
+insert into t (id,a) values (115,54);
+insert into t (id,a) values (115,55);
+insert into t (id,a) values (115,56);
+insert into t (id,a) values (115,57);
+insert into t (id,a) values (115,58);
+insert into t (id,a) values (115,59);
+insert into t (id,a) values (115,60);
+insert into t (id,a) values (115,61);
+insert into t (id,a) values (115,62);
+insert into t (id,a) values (115,63);
+insert into t (id,a) values (115,64);
+insert into t (id,a) values (115,65);
+insert into t (id,a) values (115,66);
+insert into t (id,a) values (115,67);
+insert into t (id,a) values (115,68);
+insert into t (id,a) values (115,69);
+insert into t (id,a) values (115,70);
+insert into t (id,a) values (115,71);
+insert into t (id,a) values (115,72);
+insert into t (id,a) values (115,73);
+insert into t (id,a) values (115,74);
+insert into t (id,a) values (115,75);
+insert into t (id,a) values (115,76);
+insert into t (id,a) values (115,77);
+insert into t (id,a) values (115,78);
+insert into t (id,a) values (115,79);
+insert into t (id,a) values (115,80);
+insert into t (id,a) values (115,81);
+insert into t (id,a) values (115,82);
+insert into t (id,a) values (115,83);
+insert into t (id,a) values (115,84);
+insert into t (id,a) values (115,85);
+insert into t (id,a) values (115,86);
+insert into t (id,a) values (115,87);
+insert into t (id,a) values (115,88);
+insert into t (id,a) values (115,89);
+insert into t (id,a) values (115,90);
+insert into t (id,a) values (115,91);
+insert into t (id,a) values (115,92);
+insert into t (id,a) values (115,93);
+insert into t (id,a) values (115,94);
+insert into t (id,a) values (115,95);
+insert into t (id,a) values (115,96);
+insert into t (id,a) values (115,97);
+insert into t (id,a) values (115,98);
+insert into t (id,a) values (115,99);
+insert into t (id,a) values (116,0);
+insert into t (id,a) values (116,1);
+insert into t (id,a) values (116,2);
+insert into t (id,a) values (116,3);
+insert into t (id,a) values (116,4);
+insert into t (id,a) values (116,5);
+insert into t (id,a) values (116,6);
+insert into t (id,a) values (116,7);
+insert into t (id,a) values (116,8);
+insert into t (id,a) values (116,9);
+insert into t (id,a) values (116,10);
+insert into t (id,a) values (116,11);
+insert into t (id,a) values (116,12);
+insert into t (id,a) values (116,13);
+insert into t (id,a) values (116,14);
+insert into t (id,a) values (116,15);
+insert into t (id,a) values (116,16);
+insert into t (id,a) values (116,17);
+insert into t (id,a) values (116,18);
+insert into t (id,a) values (116,19);
+insert into t (id,a) values (116,20);
+insert into t (id,a) values (116,21);
+insert into t (id,a) values (116,22);
+insert into t (id,a) values (116,23);
+insert into t (id,a) values (116,24);
+insert into t (id,a) values (116,25);
+insert into t (id,a) values (116,26);
+insert into t (id,a) values (116,27);
+insert into t (id,a) values (116,28);
+insert into t (id,a) values (116,29);
+insert into t (id,a) values (116,30);
+insert into t (id,a) values (116,31);
+insert into t (id,a) values (116,32);
+insert into t (id,a) values (116,33);
+insert into t (id,a) values (116,34);
+insert into t (id,a) values (116,35);
+insert into t (id,a) values (116,36);
+insert into t (id,a) values (116,37);
+insert into t (id,a) values (116,38);
+insert into t (id,a) values (116,39);
+insert into t (id,a) values (116,40);
+insert into t (id,a) values (116,41);
+insert into t (id,a) values (116,42);
+insert into t (id,a) values (116,43);
+insert into t (id,a) values (116,44);
+insert into t (id,a) values (116,45);
+insert into t (id,a) values (116,46);
+insert into t (id,a) values (116,47);
+insert into t (id,a) values (116,48);
+insert into t (id,a) values (116,49);
+insert into t (id,a) values (116,50);
+insert into t (id,a) values (116,51);
+insert into t (id,a) values (116,52);
+insert into t (id,a) values (116,53);
+insert into t (id,a) values (116,54);
+insert into t (id,a) values (116,55);
+insert into t (id,a) values (116,56);
+insert into t (id,a) values (116,57);
+insert into t (id,a) values (116,58);
+insert into t (id,a) values (116,59);
+insert into t (id,a) values (116,60);
+insert into t (id,a) values (116,61);
+insert into t (id,a) values (116,62);
+insert into t (id,a) values (116,63);
+insert into t (id,a) values (116,64);
+insert into t (id,a) values (116,65);
+insert into t (id,a) values (116,66);
+insert into t (id,a) values (116,67);
+insert into t (id,a) values (116,68);
+insert into t (id,a) values (116,69);
+insert into t (id,a) values (116,70);
+insert into t (id,a) values (116,71);
+insert into t (id,a) values (116,72);
+insert into t (id,a) values (116,73);
+insert into t (id,a) values (116,74);
+insert into t (id,a) values (116,75);
+insert into t (id,a) values (116,76);
+insert into t (id,a) values (116,77);
+insert into t (id,a) values (116,78);
+insert into t (id,a) values (116,79);
+insert into t (id,a) values (116,80);
+insert into t (id,a) values (116,81);
+insert into t (id,a) values (116,82);
+insert into t (id,a) values (116,83);
+insert into t (id,a) values (116,84);
+insert into t (id,a) values (116,85);
+insert into t (id,a) values (116,86);
+insert into t (id,a) values (116,87);
+insert into t (id,a) values (116,88);
+insert into t (id,a) values (116,89);
+insert into t (id,a) values (116,90);
+insert into t (id,a) values (116,91);
+insert into t (id,a) values (116,92);
+insert into t (id,a) values (116,93);
+insert into t (id,a) values (116,94);
+insert into t (id,a) values (116,95);
+insert into t (id,a) values (116,96);
+insert into t (id,a) values (116,97);
+insert into t (id,a) values (116,98);
+insert into t (id,a) values (116,99);
+insert into t (id,a) values (117,0);
+insert into t (id,a) values (117,1);
+insert into t (id,a) values (117,2);
+insert into t (id,a) values (117,3);
+insert into t (id,a) values (117,4);
+insert into t (id,a) values (117,5);
+insert into t (id,a) values (117,6);
+insert into t (id,a) values (117,7);
+insert into t (id,a) values (117,8);
+insert into t (id,a) values (117,9);
+insert into t (id,a) values (117,10);
+insert into t (id,a) values (117,11);
+insert into t (id,a) values (117,12);
+insert into t (id,a) values (117,13);
+insert into t (id,a) values (117,14);
+insert into t (id,a) values (117,15);
+insert into t (id,a) values (117,16);
+insert into t (id,a) values (117,17);
+insert into t (id,a) values (117,18);
+insert into t (id,a) values (117,19);
+insert into t (id,a) values (117,20);
+insert into t (id,a) values (117,21);
+insert into t (id,a) values (117,22);
+insert into t (id,a) values (117,23);
+insert into t (id,a) values (117,24);
+insert into t (id,a) values (117,25);
+insert into t (id,a) values (117,26);
+insert into t (id,a) values (117,27);
+insert into t (id,a) values (117,28);
+insert into t (id,a) values (117,29);
+insert into t (id,a) values (117,30);
+insert into t (id,a) values (117,31);
+insert into t (id,a) values (117,32);
+insert into t (id,a) values (117,33);
+insert into t (id,a) values (117,34);
+insert into t (id,a) values (117,35);
+insert into t (id,a) values (117,36);
+insert into t (id,a) values (117,37);
+insert into t (id,a) values (117,38);
+insert into t (id,a) values (117,39);
+insert into t (id,a) values (117,40);
+insert into t (id,a) values (117,41);
+insert into t (id,a) values (117,42);
+insert into t (id,a) values (117,43);
+insert into t (id,a) values (117,44);
+insert into t (id,a) values (117,45);
+insert into t (id,a) values (117,46);
+insert into t (id,a) values (117,47);
+insert into t (id,a) values (117,48);
+insert into t (id,a) values (117,49);
+insert into t (id,a) values (117,50);
+insert into t (id,a) values (117,51);
+insert into t (id,a) values (117,52);
+insert into t (id,a) values (117,53);
+insert into t (id,a) values (117,54);
+insert into t (id,a) values (117,55);
+insert into t (id,a) values (117,56);
+insert into t (id,a) values (117,57);
+insert into t (id,a) values (117,58);
+insert into t (id,a) values (117,59);
+insert into t (id,a) values (117,60);
+insert into t (id,a) values (117,61);
+insert into t (id,a) values (117,62);
+insert into t (id,a) values (117,63);
+insert into t (id,a) values (117,64);
+insert into t (id,a) values (117,65);
+insert into t (id,a) values (117,66);
+insert into t (id,a) values (117,67);
+insert into t (id,a) values (117,68);
+insert into t (id,a) values (117,69);
+insert into t (id,a) values (117,70);
+insert into t (id,a) values (117,71);
+insert into t (id,a) values (117,72);
+insert into t (id,a) values (117,73);
+insert into t (id,a) values (117,74);
+insert into t (id,a) values (117,75);
+insert into t (id,a) values (117,76);
+insert into t (id,a) values (117,77);
+insert into t (id,a) values (117,78);
+insert into t (id,a) values (117,79);
+insert into t (id,a) values (117,80);
+insert into t (id,a) values (117,81);
+insert into t (id,a) values (117,82);
+insert into t (id,a) values (117,83);
+insert into t (id,a) values (117,84);
+insert into t (id,a) values (117,85);
+insert into t (id,a) values (117,86);
+insert into t (id,a) values (117,87);
+insert into t (id,a) values (117,88);
+insert into t (id,a) values (117,89);
+insert into t (id,a) values (117,90);
+insert into t (id,a) values (117,91);
+insert into t (id,a) values (117,92);
+insert into t (id,a) values (117,93);
+insert into t (id,a) values (117,94);
+insert into t (id,a) values (117,95);
+insert into t (id,a) values (117,96);
+insert into t (id,a) values (117,97);
+insert into t (id,a) values (117,98);
+insert into t (id,a) values (117,99);
+insert into t (id,a) values (118,0);
+insert into t (id,a) values (118,1);
+insert into t (id,a) values (118,2);
+insert into t (id,a) values (118,3);
+insert into t (id,a) values (118,4);
+insert into t (id,a) values (118,5);
+insert into t (id,a) values (118,6);
+insert into t (id,a) values (118,7);
+insert into t (id,a) values (118,8);
+insert into t (id,a) values (118,9);
+insert into t (id,a) values (118,10);
+insert into t (id,a) values (118,11);
+insert into t (id,a) values (118,12);
+insert into t (id,a) values (118,13);
+insert into t (id,a) values (118,14);
+insert into t (id,a) values (118,15);
+insert into t (id,a) values (118,16);
+insert into t (id,a) values (118,17);
+insert into t (id,a) values (118,18);
+insert into t (id,a) values (118,19);
+insert into t (id,a) values (118,20);
+insert into t (id,a) values (118,21);
+insert into t (id,a) values (118,22);
+insert into t (id,a) values (118,23);
+insert into t (id,a) values (118,24);
+insert into t (id,a) values (118,25);
+insert into t (id,a) values (118,26);
+insert into t (id,a) values (118,27);
+insert into t (id,a) values (118,28);
+insert into t (id,a) values (118,29);
+insert into t (id,a) values (118,30);
+insert into t (id,a) values (118,31);
+insert into t (id,a) values (118,32);
+insert into t (id,a) values (118,33);
+insert into t (id,a) values (118,34);
+insert into t (id,a) values (118,35);
+insert into t (id,a) values (118,36);
+insert into t (id,a) values (118,37);
+insert into t (id,a) values (118,38);
+insert into t (id,a) values (118,39);
+insert into t (id,a) values (118,40);
+insert into t (id,a) values (118,41);
+insert into t (id,a) values (118,42);
+insert into t (id,a) values (118,43);
+insert into t (id,a) values (118,44);
+insert into t (id,a) values (118,45);
+insert into t (id,a) values (118,46);
+insert into t (id,a) values (118,47);
+insert into t (id,a) values (118,48);
+insert into t (id,a) values (118,49);
+insert into t (id,a) values (118,50);
+insert into t (id,a) values (118,51);
+insert into t (id,a) values (118,52);
+insert into t (id,a) values (118,53);
+insert into t (id,a) values (118,54);
+insert into t (id,a) values (118,55);
+insert into t (id,a) values (118,56);
+insert into t (id,a) values (118,57);
+insert into t (id,a) values (118,58);
+insert into t (id,a) values (118,59);
+insert into t (id,a) values (118,60);
+insert into t (id,a) values (118,61);
+insert into t (id,a) values (118,62);
+insert into t (id,a) values (118,63);
+insert into t (id,a) values (118,64);
+insert into t (id,a) values (118,65);
+insert into t (id,a) values (118,66);
+insert into t (id,a) values (118,67);
+insert into t (id,a) values (118,68);
+insert into t (id,a) values (118,69);
+insert into t (id,a) values (118,70);
+insert into t (id,a) values (118,71);
+insert into t (id,a) values (118,72);
+insert into t (id,a) values (118,73);
+insert into t (id,a) values (118,74);
+insert into t (id,a) values (118,75);
+insert into t (id,a) values (118,76);
+insert into t (id,a) values (118,77);
+insert into t (id,a) values (118,78);
+insert into t (id,a) values (118,79);
+insert into t (id,a) values (118,80);
+insert into t (id,a) values (118,81);
+insert into t (id,a) values (118,82);
+insert into t (id,a) values (118,83);
+insert into t (id,a) values (118,84);
+insert into t (id,a) values (118,85);
+insert into t (id,a) values (118,86);
+insert into t (id,a) values (118,87);
+insert into t (id,a) values (118,88);
+insert into t (id,a) values (118,89);
+insert into t (id,a) values (118,90);
+insert into t (id,a) values (118,91);
+insert into t (id,a) values (118,92);
+insert into t (id,a) values (118,93);
+insert into t (id,a) values (118,94);
+insert into t (id,a) values (118,95);
+insert into t (id,a) values (118,96);
+insert into t (id,a) values (118,97);
+insert into t (id,a) values (118,98);
+insert into t (id,a) values (118,99);
+insert into t (id,a) values (119,0);
+insert into t (id,a) values (119,1);
+insert into t (id,a) values (119,2);
+insert into t (id,a) values (119,3);
+insert into t (id,a) values (119,4);
+insert into t (id,a) values (119,5);
+insert into t (id,a) values (119,6);
+insert into t (id,a) values (119,7);
+insert into t (id,a) values (119,8);
+insert into t (id,a) values (119,9);
+insert into t (id,a) values (119,10);
+insert into t (id,a) values (119,11);
+insert into t (id,a) values (119,12);
+insert into t (id,a) values (119,13);
+insert into t (id,a) values (119,14);
+insert into t (id,a) values (119,15);
+insert into t (id,a) values (119,16);
+insert into t (id,a) values (119,17);
+insert into t (id,a) values (119,18);
+insert into t (id,a) values (119,19);
+insert into t (id,a) values (119,20);
+insert into t (id,a) values (119,21);
+insert into t (id,a) values (119,22);
+insert into t (id,a) values (119,23);
+insert into t (id,a) values (119,24);
+insert into t (id,a) values (119,25);
+insert into t (id,a) values (119,26);
+insert into t (id,a) values (119,27);
+insert into t (id,a) values (119,28);
+insert into t (id,a) values (119,29);
+insert into t (id,a) values (119,30);
+insert into t (id,a) values (119,31);
+insert into t (id,a) values (119,32);
+insert into t (id,a) values (119,33);
+insert into t (id,a) values (119,34);
+insert into t (id,a) values (119,35);
+insert into t (id,a) values (119,36);
+insert into t (id,a) values (119,37);
+insert into t (id,a) values (119,38);
+insert into t (id,a) values (119,39);
+insert into t (id,a) values (119,40);
+insert into t (id,a) values (119,41);
+insert into t (id,a) values (119,42);
+insert into t (id,a) values (119,43);
+insert into t (id,a) values (119,44);
+insert into t (id,a) values (119,45);
+insert into t (id,a) values (119,46);
+insert into t (id,a) values (119,47);
+insert into t (id,a) values (119,48);
+insert into t (id,a) values (119,49);
+insert into t (id,a) values (119,50);
+insert into t (id,a) values (119,51);
+insert into t (id,a) values (119,52);
+insert into t (id,a) values (119,53);
+insert into t (id,a) values (119,54);
+insert into t (id,a) values (119,55);
+insert into t (id,a) values (119,56);
+insert into t (id,a) values (119,57);
+insert into t (id,a) values (119,58);
+insert into t (id,a) values (119,59);
+insert into t (id,a) values (119,60);
+insert into t (id,a) values (119,61);
+insert into t (id,a) values (119,62);
+insert into t (id,a) values (119,63);
+insert into t (id,a) values (119,64);
+insert into t (id,a) values (119,65);
+insert into t (id,a) values (119,66);
+insert into t (id,a) values (119,67);
+insert into t (id,a) values (119,68);
+insert into t (id,a) values (119,69);
+insert into t (id,a) values (119,70);
+insert into t (id,a) values (119,71);
+insert into t (id,a) values (119,72);
+insert into t (id,a) values (119,73);
+insert into t (id,a) values (119,74);
+insert into t (id,a) values (119,75);
+insert into t (id,a) values (119,76);
+insert into t (id,a) values (119,77);
+insert into t (id,a) values (119,78);
+insert into t (id,a) values (119,79);
+insert into t (id,a) values (119,80);
+insert into t (id,a) values (119,81);
+insert into t (id,a) values (119,82);
+insert into t (id,a) values (119,83);
+insert into t (id,a) values (119,84);
+insert into t (id,a) values (119,85);
+insert into t (id,a) values (119,86);
+insert into t (id,a) values (119,87);
+insert into t (id,a) values (119,88);
+insert into t (id,a) values (119,89);
+insert into t (id,a) values (119,90);
+insert into t (id,a) values (119,91);
+insert into t (id,a) values (119,92);
+insert into t (id,a) values (119,93);
+insert into t (id,a) values (119,94);
+insert into t (id,a) values (119,95);
+insert into t (id,a) values (119,96);
+insert into t (id,a) values (119,97);
+insert into t (id,a) values (119,98);
+insert into t (id,a) values (119,99);
+insert into t (id,a) values (120,0);
+insert into t (id,a) values (120,1);
+insert into t (id,a) values (120,2);
+insert into t (id,a) values (120,3);
+insert into t (id,a) values (120,4);
+insert into t (id,a) values (120,5);
+insert into t (id,a) values (120,6);
+insert into t (id,a) values (120,7);
+insert into t (id,a) values (120,8);
+insert into t (id,a) values (120,9);
+insert into t (id,a) values (120,10);
+insert into t (id,a) values (120,11);
+insert into t (id,a) values (120,12);
+insert into t (id,a) values (120,13);
+insert into t (id,a) values (120,14);
+insert into t (id,a) values (120,15);
+insert into t (id,a) values (120,16);
+insert into t (id,a) values (120,17);
+insert into t (id,a) values (120,18);
+insert into t (id,a) values (120,19);
+insert into t (id,a) values (120,20);
+insert into t (id,a) values (120,21);
+insert into t (id,a) values (120,22);
+insert into t (id,a) values (120,23);
+insert into t (id,a) values (120,24);
+insert into t (id,a) values (120,25);
+insert into t (id,a) values (120,26);
+insert into t (id,a) values (120,27);
+insert into t (id,a) values (120,28);
+insert into t (id,a) values (120,29);
+insert into t (id,a) values (120,30);
+insert into t (id,a) values (120,31);
+insert into t (id,a) values (120,32);
+insert into t (id,a) values (120,33);
+insert into t (id,a) values (120,34);
+insert into t (id,a) values (120,35);
+insert into t (id,a) values (120,36);
+insert into t (id,a) values (120,37);
+insert into t (id,a) values (120,38);
+insert into t (id,a) values (120,39);
+insert into t (id,a) values (120,40);
+insert into t (id,a) values (120,41);
+insert into t (id,a) values (120,42);
+insert into t (id,a) values (120,43);
+insert into t (id,a) values (120,44);
+insert into t (id,a) values (120,45);
+insert into t (id,a) values (120,46);
+insert into t (id,a) values (120,47);
+insert into t (id,a) values (120,48);
+insert into t (id,a) values (120,49);
+insert into t (id,a) values (120,50);
+insert into t (id,a) values (120,51);
+insert into t (id,a) values (120,52);
+insert into t (id,a) values (120,53);
+insert into t (id,a) values (120,54);
+insert into t (id,a) values (120,55);
+insert into t (id,a) values (120,56);
+insert into t (id,a) values (120,57);
+insert into t (id,a) values (120,58);
+insert into t (id,a) values (120,59);
+insert into t (id,a) values (120,60);
+insert into t (id,a) values (120,61);
+insert into t (id,a) values (120,62);
+insert into t (id,a) values (120,63);
+insert into t (id,a) values (120,64);
+insert into t (id,a) values (120,65);
+insert into t (id,a) values (120,66);
+insert into t (id,a) values (120,67);
+insert into t (id,a) values (120,68);
+insert into t (id,a) values (120,69);
+insert into t (id,a) values (120,70);
+insert into t (id,a) values (120,71);
+insert into t (id,a) values (120,72);
+insert into t (id,a) values (120,73);
+insert into t (id,a) values (120,74);
+insert into t (id,a) values (120,75);
+insert into t (id,a) values (120,76);
+insert into t (id,a) values (120,77);
+insert into t (id,a) values (120,78);
+insert into t (id,a) values (120,79);
+insert into t (id,a) values (120,80);
+insert into t (id,a) values (120,81);
+insert into t (id,a) values (120,82);
+insert into t (id,a) values (120,83);
+insert into t (id,a) values (120,84);
+insert into t (id,a) values (120,85);
+insert into t (id,a) values (120,86);
+insert into t (id,a) values (120,87);
+insert into t (id,a) values (120,88);
+insert into t (id,a) values (120,89);
+insert into t (id,a) values (120,90);
+insert into t (id,a) values (120,91);
+insert into t (id,a) values (120,92);
+insert into t (id,a) values (120,93);
+insert into t (id,a) values (120,94);
+insert into t (id,a) values (120,95);
+insert into t (id,a) values (120,96);
+insert into t (id,a) values (120,97);
+insert into t (id,a) values (120,98);
+insert into t (id,a) values (120,99);
+insert into t (id,a) values (121,0);
+insert into t (id,a) values (121,1);
+insert into t (id,a) values (121,2);
+insert into t (id,a) values (121,3);
+insert into t (id,a) values (121,4);
+insert into t (id,a) values (121,5);
+insert into t (id,a) values (121,6);
+insert into t (id,a) values (121,7);
+insert into t (id,a) values (121,8);
+insert into t (id,a) values (121,9);
+insert into t (id,a) values (121,10);
+insert into t (id,a) values (121,11);
+insert into t (id,a) values (121,12);
+insert into t (id,a) values (121,13);
+insert into t (id,a) values (121,14);
+insert into t (id,a) values (121,15);
+insert into t (id,a) values (121,16);
+insert into t (id,a) values (121,17);
+insert into t (id,a) values (121,18);
+insert into t (id,a) values (121,19);
+insert into t (id,a) values (121,20);
+insert into t (id,a) values (121,21);
+insert into t (id,a) values (121,22);
+insert into t (id,a) values (121,23);
+insert into t (id,a) values (121,24);
+insert into t (id,a) values (121,25);
+insert into t (id,a) values (121,26);
+insert into t (id,a) values (121,27);
+insert into t (id,a) values (121,28);
+insert into t (id,a) values (121,29);
+insert into t (id,a) values (121,30);
+insert into t (id,a) values (121,31);
+insert into t (id,a) values (121,32);
+insert into t (id,a) values (121,33);
+insert into t (id,a) values (121,34);
+insert into t (id,a) values (121,35);
+insert into t (id,a) values (121,36);
+insert into t (id,a) values (121,37);
+insert into t (id,a) values (121,38);
+insert into t (id,a) values (121,39);
+insert into t (id,a) values (121,40);
+insert into t (id,a) values (121,41);
+insert into t (id,a) values (121,42);
+insert into t (id,a) values (121,43);
+insert into t (id,a) values (121,44);
+insert into t (id,a) values (121,45);
+insert into t (id,a) values (121,46);
+insert into t (id,a) values (121,47);
+insert into t (id,a) values (121,48);
+insert into t (id,a) values (121,49);
+insert into t (id,a) values (121,50);
+insert into t (id,a) values (121,51);
+insert into t (id,a) values (121,52);
+insert into t (id,a) values (121,53);
+insert into t (id,a) values (121,54);
+insert into t (id,a) values (121,55);
+insert into t (id,a) values (121,56);
+insert into t (id,a) values (121,57);
+insert into t (id,a) values (121,58);
+insert into t (id,a) values (121,59);
+insert into t (id,a) values (121,60);
+insert into t (id,a) values (121,61);
+insert into t (id,a) values (121,62);
+insert into t (id,a) values (121,63);
+insert into t (id,a) values (121,64);
+insert into t (id,a) values (121,65);
+insert into t (id,a) values (121,66);
+insert into t (id,a) values (121,67);
+insert into t (id,a) values (121,68);
+insert into t (id,a) values (121,69);
+insert into t (id,a) values (121,70);
+insert into t (id,a) values (121,71);
+insert into t (id,a) values (121,72);
+insert into t (id,a) values (121,73);
+insert into t (id,a) values (121,74);
+insert into t (id,a) values (121,75);
+insert into t (id,a) values (121,76);
+insert into t (id,a) values (121,77);
+insert into t (id,a) values (121,78);
+insert into t (id,a) values (121,79);
+insert into t (id,a) values (121,80);
+insert into t (id,a) values (121,81);
+insert into t (id,a) values (121,82);
+insert into t (id,a) values (121,83);
+insert into t (id,a) values (121,84);
+insert into t (id,a) values (121,85);
+insert into t (id,a) values (121,86);
+insert into t (id,a) values (121,87);
+insert into t (id,a) values (121,88);
+insert into t (id,a) values (121,89);
+insert into t (id,a) values (121,90);
+insert into t (id,a) values (121,91);
+insert into t (id,a) values (121,92);
+insert into t (id,a) values (121,93);
+insert into t (id,a) values (121,94);
+insert into t (id,a) values (121,95);
+insert into t (id,a) values (121,96);
+insert into t (id,a) values (121,97);
+insert into t (id,a) values (121,98);
+insert into t (id,a) values (121,99);
+insert into t (id,a) values (122,0);
+insert into t (id,a) values (122,1);
+insert into t (id,a) values (122,2);
+insert into t (id,a) values (122,3);
+insert into t (id,a) values (122,4);
+insert into t (id,a) values (122,5);
+insert into t (id,a) values (122,6);
+insert into t (id,a) values (122,7);
+insert into t (id,a) values (122,8);
+insert into t (id,a) values (122,9);
+insert into t (id,a) values (122,10);
+insert into t (id,a) values (122,11);
+insert into t (id,a) values (122,12);
+insert into t (id,a) values (122,13);
+insert into t (id,a) values (122,14);
+insert into t (id,a) values (122,15);
+insert into t (id,a) values (122,16);
+insert into t (id,a) values (122,17);
+insert into t (id,a) values (122,18);
+insert into t (id,a) values (122,19);
+insert into t (id,a) values (122,20);
+insert into t (id,a) values (122,21);
+insert into t (id,a) values (122,22);
+insert into t (id,a) values (122,23);
+insert into t (id,a) values (122,24);
+insert into t (id,a) values (122,25);
+insert into t (id,a) values (122,26);
+insert into t (id,a) values (122,27);
+insert into t (id,a) values (122,28);
+insert into t (id,a) values (122,29);
+insert into t (id,a) values (122,30);
+insert into t (id,a) values (122,31);
+insert into t (id,a) values (122,32);
+insert into t (id,a) values (122,33);
+insert into t (id,a) values (122,34);
+insert into t (id,a) values (122,35);
+insert into t (id,a) values (122,36);
+insert into t (id,a) values (122,37);
+insert into t (id,a) values (122,38);
+insert into t (id,a) values (122,39);
+insert into t (id,a) values (122,40);
+insert into t (id,a) values (122,41);
+insert into t (id,a) values (122,42);
+insert into t (id,a) values (122,43);
+insert into t (id,a) values (122,44);
+insert into t (id,a) values (122,45);
+insert into t (id,a) values (122,46);
+insert into t (id,a) values (122,47);
+insert into t (id,a) values (122,48);
+insert into t (id,a) values (122,49);
+insert into t (id,a) values (122,50);
+insert into t (id,a) values (122,51);
+insert into t (id,a) values (122,52);
+insert into t (id,a) values (122,53);
+insert into t (id,a) values (122,54);
+insert into t (id,a) values (122,55);
+insert into t (id,a) values (122,56);
+insert into t (id,a) values (122,57);
+insert into t (id,a) values (122,58);
+insert into t (id,a) values (122,59);
+insert into t (id,a) values (122,60);
+insert into t (id,a) values (122,61);
+insert into t (id,a) values (122,62);
+insert into t (id,a) values (122,63);
+insert into t (id,a) values (122,64);
+insert into t (id,a) values (122,65);
+insert into t (id,a) values (122,66);
+insert into t (id,a) values (122,67);
+insert into t (id,a) values (122,68);
+insert into t (id,a) values (122,69);
+insert into t (id,a) values (122,70);
+insert into t (id,a) values (122,71);
+insert into t (id,a) values (122,72);
+insert into t (id,a) values (122,73);
+insert into t (id,a) values (122,74);
+insert into t (id,a) values (122,75);
+insert into t (id,a) values (122,76);
+insert into t (id,a) values (122,77);
+insert into t (id,a) values (122,78);
+insert into t (id,a) values (122,79);
+insert into t (id,a) values (122,80);
+insert into t (id,a) values (122,81);
+insert into t (id,a) values (122,82);
+insert into t (id,a) values (122,83);
+insert into t (id,a) values (122,84);
+insert into t (id,a) values (122,85);
+insert into t (id,a) values (122,86);
+insert into t (id,a) values (122,87);
+insert into t (id,a) values (122,88);
+insert into t (id,a) values (122,89);
+insert into t (id,a) values (122,90);
+insert into t (id,a) values (122,91);
+insert into t (id,a) values (122,92);
+insert into t (id,a) values (122,93);
+insert into t (id,a) values (122,94);
+insert into t (id,a) values (122,95);
+insert into t (id,a) values (122,96);
+insert into t (id,a) values (122,97);
+insert into t (id,a) values (122,98);
+insert into t (id,a) values (122,99);
+insert into t (id,a) values (123,0);
+insert into t (id,a) values (123,1);
+insert into t (id,a) values (123,2);
+insert into t (id,a) values (123,3);
+insert into t (id,a) values (123,4);
+insert into t (id,a) values (123,5);
+insert into t (id,a) values (123,6);
+insert into t (id,a) values (123,7);
+insert into t (id,a) values (123,8);
+insert into t (id,a) values (123,9);
+insert into t (id,a) values (123,10);
+insert into t (id,a) values (123,11);
+insert into t (id,a) values (123,12);
+insert into t (id,a) values (123,13);
+insert into t (id,a) values (123,14);
+insert into t (id,a) values (123,15);
+insert into t (id,a) values (123,16);
+insert into t (id,a) values (123,17);
+insert into t (id,a) values (123,18);
+insert into t (id,a) values (123,19);
+insert into t (id,a) values (123,20);
+insert into t (id,a) values (123,21);
+insert into t (id,a) values (123,22);
+insert into t (id,a) values (123,23);
+insert into t (id,a) values (123,24);
+insert into t (id,a) values (123,25);
+insert into t (id,a) values (123,26);
+insert into t (id,a) values (123,27);
+insert into t (id,a) values (123,28);
+insert into t (id,a) values (123,29);
+insert into t (id,a) values (123,30);
+insert into t (id,a) values (123,31);
+insert into t (id,a) values (123,32);
+insert into t (id,a) values (123,33);
+insert into t (id,a) values (123,34);
+insert into t (id,a) values (123,35);
+insert into t (id,a) values (123,36);
+insert into t (id,a) values (123,37);
+insert into t (id,a) values (123,38);
+insert into t (id,a) values (123,39);
+insert into t (id,a) values (123,40);
+insert into t (id,a) values (123,41);
+insert into t (id,a) values (123,42);
+insert into t (id,a) values (123,43);
+insert into t (id,a) values (123,44);
+insert into t (id,a) values (123,45);
+insert into t (id,a) values (123,46);
+insert into t (id,a) values (123,47);
+insert into t (id,a) values (123,48);
+insert into t (id,a) values (123,49);
+insert into t (id,a) values (123,50);
+insert into t (id,a) values (123,51);
+insert into t (id,a) values (123,52);
+insert into t (id,a) values (123,53);
+insert into t (id,a) values (123,54);
+insert into t (id,a) values (123,55);
+insert into t (id,a) values (123,56);
+insert into t (id,a) values (123,57);
+insert into t (id,a) values (123,58);
+insert into t (id,a) values (123,59);
+insert into t (id,a) values (123,60);
+insert into t (id,a) values (123,61);
+insert into t (id,a) values (123,62);
+insert into t (id,a) values (123,63);
+insert into t (id,a) values (123,64);
+insert into t (id,a) values (123,65);
+insert into t (id,a) values (123,66);
+insert into t (id,a) values (123,67);
+insert into t (id,a) values (123,68);
+insert into t (id,a) values (123,69);
+insert into t (id,a) values (123,70);
+insert into t (id,a) values (123,71);
+insert into t (id,a) values (123,72);
+insert into t (id,a) values (123,73);
+insert into t (id,a) values (123,74);
+insert into t (id,a) values (123,75);
+insert into t (id,a) values (123,76);
+insert into t (id,a) values (123,77);
+insert into t (id,a) values (123,78);
+insert into t (id,a) values (123,79);
+insert into t (id,a) values (123,80);
+insert into t (id,a) values (123,81);
+insert into t (id,a) values (123,82);
+insert into t (id,a) values (123,83);
+insert into t (id,a) values (123,84);
+insert into t (id,a) values (123,85);
+insert into t (id,a) values (123,86);
+insert into t (id,a) values (123,87);
+insert into t (id,a) values (123,88);
+insert into t (id,a) values (123,89);
+insert into t (id,a) values (123,90);
+insert into t (id,a) values (123,91);
+insert into t (id,a) values (123,92);
+insert into t (id,a) values (123,93);
+insert into t (id,a) values (123,94);
+insert into t (id,a) values (123,95);
+insert into t (id,a) values (123,96);
+insert into t (id,a) values (123,97);
+insert into t (id,a) values (123,98);
+insert into t (id,a) values (123,99);
+insert into t (id,a) values (124,0);
+insert into t (id,a) values (124,1);
+insert into t (id,a) values (124,2);
+insert into t (id,a) values (124,3);
+insert into t (id,a) values (124,4);
+insert into t (id,a) values (124,5);
+insert into t (id,a) values (124,6);
+insert into t (id,a) values (124,7);
+insert into t (id,a) values (124,8);
+insert into t (id,a) values (124,9);
+insert into t (id,a) values (124,10);
+insert into t (id,a) values (124,11);
+insert into t (id,a) values (124,12);
+insert into t (id,a) values (124,13);
+insert into t (id,a) values (124,14);
+insert into t (id,a) values (124,15);
+insert into t (id,a) values (124,16);
+insert into t (id,a) values (124,17);
+insert into t (id,a) values (124,18);
+insert into t (id,a) values (124,19);
+insert into t (id,a) values (124,20);
+insert into t (id,a) values (124,21);
+insert into t (id,a) values (124,22);
+insert into t (id,a) values (124,23);
+insert into t (id,a) values (124,24);
+insert into t (id,a) values (124,25);
+insert into t (id,a) values (124,26);
+insert into t (id,a) values (124,27);
+insert into t (id,a) values (124,28);
+insert into t (id,a) values (124,29);
+insert into t (id,a) values (124,30);
+insert into t (id,a) values (124,31);
+insert into t (id,a) values (124,32);
+insert into t (id,a) values (124,33);
+insert into t (id,a) values (124,34);
+insert into t (id,a) values (124,35);
+insert into t (id,a) values (124,36);
+insert into t (id,a) values (124,37);
+insert into t (id,a) values (124,38);
+insert into t (id,a) values (124,39);
+insert into t (id,a) values (124,40);
+insert into t (id,a) values (124,41);
+insert into t (id,a) values (124,42);
+insert into t (id,a) values (124,43);
+insert into t (id,a) values (124,44);
+insert into t (id,a) values (124,45);
+insert into t (id,a) values (124,46);
+insert into t (id,a) values (124,47);
+insert into t (id,a) values (124,48);
+insert into t (id,a) values (124,49);
+insert into t (id,a) values (124,50);
+insert into t (id,a) values (124,51);
+insert into t (id,a) values (124,52);
+insert into t (id,a) values (124,53);
+insert into t (id,a) values (124,54);
+insert into t (id,a) values (124,55);
+insert into t (id,a) values (124,56);
+insert into t (id,a) values (124,57);
+insert into t (id,a) values (124,58);
+insert into t (id,a) values (124,59);
+insert into t (id,a) values (124,60);
+insert into t (id,a) values (124,61);
+insert into t (id,a) values (124,62);
+insert into t (id,a) values (124,63);
+insert into t (id,a) values (124,64);
+insert into t (id,a) values (124,65);
+insert into t (id,a) values (124,66);
+insert into t (id,a) values (124,67);
+insert into t (id,a) values (124,68);
+insert into t (id,a) values (124,69);
+insert into t (id,a) values (124,70);
+insert into t (id,a) values (124,71);
+insert into t (id,a) values (124,72);
+insert into t (id,a) values (124,73);
+insert into t (id,a) values (124,74);
+insert into t (id,a) values (124,75);
+insert into t (id,a) values (124,76);
+insert into t (id,a) values (124,77);
+insert into t (id,a) values (124,78);
+insert into t (id,a) values (124,79);
+insert into t (id,a) values (124,80);
+insert into t (id,a) values (124,81);
+insert into t (id,a) values (124,82);
+insert into t (id,a) values (124,83);
+insert into t (id,a) values (124,84);
+insert into t (id,a) values (124,85);
+insert into t (id,a) values (124,86);
+insert into t (id,a) values (124,87);
+insert into t (id,a) values (124,88);
+insert into t (id,a) values (124,89);
+insert into t (id,a) values (124,90);
+insert into t (id,a) values (124,91);
+insert into t (id,a) values (124,92);
+insert into t (id,a) values (124,93);
+insert into t (id,a) values (124,94);
+insert into t (id,a) values (124,95);
+insert into t (id,a) values (124,96);
+insert into t (id,a) values (124,97);
+insert into t (id,a) values (124,98);
+insert into t (id,a) values (124,99);
+insert into t (id,a) values (125,0);
+insert into t (id,a) values (125,1);
+insert into t (id,a) values (125,2);
+insert into t (id,a) values (125,3);
+insert into t (id,a) values (125,4);
+insert into t (id,a) values (125,5);
+insert into t (id,a) values (125,6);
+insert into t (id,a) values (125,7);
+insert into t (id,a) values (125,8);
+insert into t (id,a) values (125,9);
+insert into t (id,a) values (125,10);
+insert into t (id,a) values (125,11);
+insert into t (id,a) values (125,12);
+insert into t (id,a) values (125,13);
+insert into t (id,a) values (125,14);
+insert into t (id,a) values (125,15);
+insert into t (id,a) values (125,16);
+insert into t (id,a) values (125,17);
+insert into t (id,a) values (125,18);
+insert into t (id,a) values (125,19);
+insert into t (id,a) values (125,20);
+insert into t (id,a) values (125,21);
+insert into t (id,a) values (125,22);
+insert into t (id,a) values (125,23);
+insert into t (id,a) values (125,24);
+insert into t (id,a) values (125,25);
+insert into t (id,a) values (125,26);
+insert into t (id,a) values (125,27);
+insert into t (id,a) values (125,28);
+insert into t (id,a) values (125,29);
+insert into t (id,a) values (125,30);
+insert into t (id,a) values (125,31);
+insert into t (id,a) values (125,32);
+insert into t (id,a) values (125,33);
+insert into t (id,a) values (125,34);
+insert into t (id,a) values (125,35);
+insert into t (id,a) values (125,36);
+insert into t (id,a) values (125,37);
+insert into t (id,a) values (125,38);
+insert into t (id,a) values (125,39);
+insert into t (id,a) values (125,40);
+insert into t (id,a) values (125,41);
+insert into t (id,a) values (125,42);
+insert into t (id,a) values (125,43);
+insert into t (id,a) values (125,44);
+insert into t (id,a) values (125,45);
+insert into t (id,a) values (125,46);
+insert into t (id,a) values (125,47);
+insert into t (id,a) values (125,48);
+insert into t (id,a) values (125,49);
+insert into t (id,a) values (125,50);
+insert into t (id,a) values (125,51);
+insert into t (id,a) values (125,52);
+insert into t (id,a) values (125,53);
+insert into t (id,a) values (125,54);
+insert into t (id,a) values (125,55);
+insert into t (id,a) values (125,56);
+insert into t (id,a) values (125,57);
+insert into t (id,a) values (125,58);
+insert into t (id,a) values (125,59);
+insert into t (id,a) values (125,60);
+insert into t (id,a) values (125,61);
+insert into t (id,a) values (125,62);
+insert into t (id,a) values (125,63);
+insert into t (id,a) values (125,64);
+insert into t (id,a) values (125,65);
+insert into t (id,a) values (125,66);
+insert into t (id,a) values (125,67);
+insert into t (id,a) values (125,68);
+insert into t (id,a) values (125,69);
+insert into t (id,a) values (125,70);
+insert into t (id,a) values (125,71);
+insert into t (id,a) values (125,72);
+insert into t (id,a) values (125,73);
+insert into t (id,a) values (125,74);
+insert into t (id,a) values (125,75);
+insert into t (id,a) values (125,76);
+insert into t (id,a) values (125,77);
+insert into t (id,a) values (125,78);
+insert into t (id,a) values (125,79);
+insert into t (id,a) values (125,80);
+insert into t (id,a) values (125,81);
+insert into t (id,a) values (125,82);
+insert into t (id,a) values (125,83);
+insert into t (id,a) values (125,84);
+insert into t (id,a) values (125,85);
+insert into t (id,a) values (125,86);
+insert into t (id,a) values (125,87);
+insert into t (id,a) values (125,88);
+insert into t (id,a) values (125,89);
+insert into t (id,a) values (125,90);
+insert into t (id,a) values (125,91);
+insert into t (id,a) values (125,92);
+insert into t (id,a) values (125,93);
+insert into t (id,a) values (125,94);
+insert into t (id,a) values (125,95);
+insert into t (id,a) values (125,96);
+insert into t (id,a) values (125,97);
+insert into t (id,a) values (125,98);
+insert into t (id,a) values (125,99);
+insert into t (id,a) values (126,0);
+insert into t (id,a) values (126,1);
+insert into t (id,a) values (126,2);
+insert into t (id,a) values (126,3);
+insert into t (id,a) values (126,4);
+insert into t (id,a) values (126,5);
+insert into t (id,a) values (126,6);
+insert into t (id,a) values (126,7);
+insert into t (id,a) values (126,8);
+insert into t (id,a) values (126,9);
+insert into t (id,a) values (126,10);
+insert into t (id,a) values (126,11);
+insert into t (id,a) values (126,12);
+insert into t (id,a) values (126,13);
+insert into t (id,a) values (126,14);
+insert into t (id,a) values (126,15);
+insert into t (id,a) values (126,16);
+insert into t (id,a) values (126,17);
+insert into t (id,a) values (126,18);
+insert into t (id,a) values (126,19);
+insert into t (id,a) values (126,20);
+insert into t (id,a) values (126,21);
+insert into t (id,a) values (126,22);
+insert into t (id,a) values (126,23);
+insert into t (id,a) values (126,24);
+insert into t (id,a) values (126,25);
+insert into t (id,a) values (126,26);
+insert into t (id,a) values (126,27);
+insert into t (id,a) values (126,28);
+insert into t (id,a) values (126,29);
+insert into t (id,a) values (126,30);
+insert into t (id,a) values (126,31);
+insert into t (id,a) values (126,32);
+insert into t (id,a) values (126,33);
+insert into t (id,a) values (126,34);
+insert into t (id,a) values (126,35);
+insert into t (id,a) values (126,36);
+insert into t (id,a) values (126,37);
+insert into t (id,a) values (126,38);
+insert into t (id,a) values (126,39);
+insert into t (id,a) values (126,40);
+insert into t (id,a) values (126,41);
+insert into t (id,a) values (126,42);
+insert into t (id,a) values (126,43);
+insert into t (id,a) values (126,44);
+insert into t (id,a) values (126,45);
+insert into t (id,a) values (126,46);
+insert into t (id,a) values (126,47);
+insert into t (id,a) values (126,48);
+insert into t (id,a) values (126,49);
+insert into t (id,a) values (126,50);
+insert into t (id,a) values (126,51);
+insert into t (id,a) values (126,52);
+insert into t (id,a) values (126,53);
+insert into t (id,a) values (126,54);
+insert into t (id,a) values (126,55);
+insert into t (id,a) values (126,56);
+insert into t (id,a) values (126,57);
+insert into t (id,a) values (126,58);
+insert into t (id,a) values (126,59);
+insert into t (id,a) values (126,60);
+insert into t (id,a) values (126,61);
+insert into t (id,a) values (126,62);
+insert into t (id,a) values (126,63);
+insert into t (id,a) values (126,64);
+insert into t (id,a) values (126,65);
+insert into t (id,a) values (126,66);
+insert into t (id,a) values (126,67);
+insert into t (id,a) values (126,68);
+insert into t (id,a) values (126,69);
+insert into t (id,a) values (126,70);
+insert into t (id,a) values (126,71);
+insert into t (id,a) values (126,72);
+insert into t (id,a) values (126,73);
+insert into t (id,a) values (126,74);
+insert into t (id,a) values (126,75);
+insert into t (id,a) values (126,76);
+insert into t (id,a) values (126,77);
+insert into t (id,a) values (126,78);
+insert into t (id,a) values (126,79);
+insert into t (id,a) values (126,80);
+insert into t (id,a) values (126,81);
+insert into t (id,a) values (126,82);
+insert into t (id,a) values (126,83);
+insert into t (id,a) values (126,84);
+insert into t (id,a) values (126,85);
+insert into t (id,a) values (126,86);
+insert into t (id,a) values (126,87);
+insert into t (id,a) values (126,88);
+insert into t (id,a) values (126,89);
+insert into t (id,a) values (126,90);
+insert into t (id,a) values (126,91);
+insert into t (id,a) values (126,92);
+insert into t (id,a) values (126,93);
+insert into t (id,a) values (126,94);
+insert into t (id,a) values (126,95);
+insert into t (id,a) values (126,96);
+insert into t (id,a) values (126,97);
+insert into t (id,a) values (126,98);
+insert into t (id,a) values (126,99);
+insert into t (id,a) values (127,0);
+insert into t (id,a) values (127,1);
+insert into t (id,a) values (127,2);
+insert into t (id,a) values (127,3);
+insert into t (id,a) values (127,4);
+insert into t (id,a) values (127,5);
+insert into t (id,a) values (127,6);
+insert into t (id,a) values (127,7);
+insert into t (id,a) values (127,8);
+insert into t (id,a) values (127,9);
+insert into t (id,a) values (127,10);
+insert into t (id,a) values (127,11);
+insert into t (id,a) values (127,12);
+insert into t (id,a) values (127,13);
+insert into t (id,a) values (127,14);
+insert into t (id,a) values (127,15);
+insert into t (id,a) values (127,16);
+insert into t (id,a) values (127,17);
+insert into t (id,a) values (127,18);
+insert into t (id,a) values (127,19);
+insert into t (id,a) values (127,20);
+insert into t (id,a) values (127,21);
+insert into t (id,a) values (127,22);
+insert into t (id,a) values (127,23);
+insert into t (id,a) values (127,24);
+insert into t (id,a) values (127,25);
+insert into t (id,a) values (127,26);
+insert into t (id,a) values (127,27);
+insert into t (id,a) values (127,28);
+insert into t (id,a) values (127,29);
+insert into t (id,a) values (127,30);
+insert into t (id,a) values (127,31);
+insert into t (id,a) values (127,32);
+insert into t (id,a) values (127,33);
+insert into t (id,a) values (127,34);
+insert into t (id,a) values (127,35);
+insert into t (id,a) values (127,36);
+insert into t (id,a) values (127,37);
+insert into t (id,a) values (127,38);
+insert into t (id,a) values (127,39);
+insert into t (id,a) values (127,40);
+insert into t (id,a) values (127,41);
+insert into t (id,a) values (127,42);
+insert into t (id,a) values (127,43);
+insert into t (id,a) values (127,44);
+insert into t (id,a) values (127,45);
+insert into t (id,a) values (127,46);
+insert into t (id,a) values (127,47);
+insert into t (id,a) values (127,48);
+insert into t (id,a) values (127,49);
+insert into t (id,a) values (127,50);
+insert into t (id,a) values (127,51);
+insert into t (id,a) values (127,52);
+insert into t (id,a) values (127,53);
+insert into t (id,a) values (127,54);
+insert into t (id,a) values (127,55);
+insert into t (id,a) values (127,56);
+insert into t (id,a) values (127,57);
+insert into t (id,a) values (127,58);
+insert into t (id,a) values (127,59);
+insert into t (id,a) values (127,60);
+insert into t (id,a) values (127,61);
+insert into t (id,a) values (127,62);
+insert into t (id,a) values (127,63);
+insert into t (id,a) values (127,64);
+insert into t (id,a) values (127,65);
+insert into t (id,a) values (127,66);
+insert into t (id,a) values (127,67);
+insert into t (id,a) values (127,68);
+insert into t (id,a) values (127,69);
+insert into t (id,a) values (127,70);
+insert into t (id,a) values (127,71);
+insert into t (id,a) values (127,72);
+insert into t (id,a) values (127,73);
+insert into t (id,a) values (127,74);
+insert into t (id,a) values (127,75);
+insert into t (id,a) values (127,76);
+insert into t (id,a) values (127,77);
+insert into t (id,a) values (127,78);
+insert into t (id,a) values (127,79);
+insert into t (id,a) values (127,80);
+insert into t (id,a) values (127,81);
+insert into t (id,a) values (127,82);
+insert into t (id,a) values (127,83);
+insert into t (id,a) values (127,84);
+insert into t (id,a) values (127,85);
+insert into t (id,a) values (127,86);
+insert into t (id,a) values (127,87);
+insert into t (id,a) values (127,88);
+insert into t (id,a) values (127,89);
+insert into t (id,a) values (127,90);
+insert into t (id,a) values (127,91);
+insert into t (id,a) values (127,92);
+insert into t (id,a) values (127,93);
+insert into t (id,a) values (127,94);
+insert into t (id,a) values (127,95);
+insert into t (id,a) values (127,96);
+insert into t (id,a) values (127,97);
+insert into t (id,a) values (127,98);
+insert into t (id,a) values (127,99);
+insert into t (id,a) values (128,0);
+insert into t (id,a) values (128,1);
+insert into t (id,a) values (128,2);
+insert into t (id,a) values (128,3);
+insert into t (id,a) values (128,4);
+insert into t (id,a) values (128,5);
+insert into t (id,a) values (128,6);
+insert into t (id,a) values (128,7);
+insert into t (id,a) values (128,8);
+insert into t (id,a) values (128,9);
+insert into t (id,a) values (128,10);
+insert into t (id,a) values (128,11);
+insert into t (id,a) values (128,12);
+insert into t (id,a) values (128,13);
+insert into t (id,a) values (128,14);
+insert into t (id,a) values (128,15);
+insert into t (id,a) values (128,16);
+insert into t (id,a) values (128,17);
+insert into t (id,a) values (128,18);
+insert into t (id,a) values (128,19);
+insert into t (id,a) values (128,20);
+insert into t (id,a) values (128,21);
+insert into t (id,a) values (128,22);
+insert into t (id,a) values (128,23);
+insert into t (id,a) values (128,24);
+insert into t (id,a) values (128,25);
+insert into t (id,a) values (128,26);
+insert into t (id,a) values (128,27);
+insert into t (id,a) values (128,28);
+insert into t (id,a) values (128,29);
+insert into t (id,a) values (128,30);
+insert into t (id,a) values (128,31);
+insert into t (id,a) values (128,32);
+insert into t (id,a) values (128,33);
+insert into t (id,a) values (128,34);
+insert into t (id,a) values (128,35);
+insert into t (id,a) values (128,36);
+insert into t (id,a) values (128,37);
+insert into t (id,a) values (128,38);
+insert into t (id,a) values (128,39);
+insert into t (id,a) values (128,40);
+insert into t (id,a) values (128,41);
+insert into t (id,a) values (128,42);
+insert into t (id,a) values (128,43);
+insert into t (id,a) values (128,44);
+insert into t (id,a) values (128,45);
+insert into t (id,a) values (128,46);
+insert into t (id,a) values (128,47);
+insert into t (id,a) values (128,48);
+insert into t (id,a) values (128,49);
+insert into t (id,a) values (128,50);
+insert into t (id,a) values (128,51);
+insert into t (id,a) values (128,52);
+insert into t (id,a) values (128,53);
+insert into t (id,a) values (128,54);
+insert into t (id,a) values (128,55);
+insert into t (id,a) values (128,56);
+insert into t (id,a) values (128,57);
+insert into t (id,a) values (128,58);
+insert into t (id,a) values (128,59);
+insert into t (id,a) values (128,60);
+insert into t (id,a) values (128,61);
+insert into t (id,a) values (128,62);
+insert into t (id,a) values (128,63);
+insert into t (id,a) values (128,64);
+insert into t (id,a) values (128,65);
+insert into t (id,a) values (128,66);
+insert into t (id,a) values (128,67);
+insert into t (id,a) values (128,68);
+insert into t (id,a) values (128,69);
+insert into t (id,a) values (128,70);
+insert into t (id,a) values (128,71);
+insert into t (id,a) values (128,72);
+insert into t (id,a) values (128,73);
+insert into t (id,a) values (128,74);
+insert into t (id,a) values (128,75);
+insert into t (id,a) values (128,76);
+insert into t (id,a) values (128,77);
+insert into t (id,a) values (128,78);
+insert into t (id,a) values (128,79);
+insert into t (id,a) values (128,80);
+insert into t (id,a) values (128,81);
+insert into t (id,a) values (128,82);
+insert into t (id,a) values (128,83);
+insert into t (id,a) values (128,84);
+insert into t (id,a) values (128,85);
+insert into t (id,a) values (128,86);
+insert into t (id,a) values (128,87);
+insert into t (id,a) values (128,88);
+insert into t (id,a) values (128,89);
+insert into t (id,a) values (128,90);
+insert into t (id,a) values (128,91);
+insert into t (id,a) values (128,92);
+insert into t (id,a) values (128,93);
+insert into t (id,a) values (128,94);
+insert into t (id,a) values (128,95);
+insert into t (id,a) values (128,96);
+insert into t (id,a) values (128,97);
+insert into t (id,a) values (128,98);
+insert into t (id,a) values (128,99);
+insert into t (id,a) values (129,0);
+insert into t (id,a) values (129,1);
+insert into t (id,a) values (129,2);
+insert into t (id,a) values (129,3);
+insert into t (id,a) values (129,4);
+insert into t (id,a) values (129,5);
+insert into t (id,a) values (129,6);
+insert into t (id,a) values (129,7);
+insert into t (id,a) values (129,8);
+insert into t (id,a) values (129,9);
+insert into t (id,a) values (129,10);
+insert into t (id,a) values (129,11);
+insert into t (id,a) values (129,12);
+insert into t (id,a) values (129,13);
+insert into t (id,a) values (129,14);
+insert into t (id,a) values (129,15);
+insert into t (id,a) values (129,16);
+insert into t (id,a) values (129,17);
+insert into t (id,a) values (129,18);
+insert into t (id,a) values (129,19);
+insert into t (id,a) values (129,20);
+insert into t (id,a) values (129,21);
+insert into t (id,a) values (129,22);
+insert into t (id,a) values (129,23);
+insert into t (id,a) values (129,24);
+insert into t (id,a) values (129,25);
+insert into t (id,a) values (129,26);
+insert into t (id,a) values (129,27);
+insert into t (id,a) values (129,28);
+insert into t (id,a) values (129,29);
+insert into t (id,a) values (129,30);
+insert into t (id,a) values (129,31);
+insert into t (id,a) values (129,32);
+insert into t (id,a) values (129,33);
+insert into t (id,a) values (129,34);
+insert into t (id,a) values (129,35);
+insert into t (id,a) values (129,36);
+insert into t (id,a) values (129,37);
+insert into t (id,a) values (129,38);
+insert into t (id,a) values (129,39);
+insert into t (id,a) values (129,40);
+insert into t (id,a) values (129,41);
+insert into t (id,a) values (129,42);
+insert into t (id,a) values (129,43);
+insert into t (id,a) values (129,44);
+insert into t (id,a) values (129,45);
+insert into t (id,a) values (129,46);
+insert into t (id,a) values (129,47);
+insert into t (id,a) values (129,48);
+insert into t (id,a) values (129,49);
+insert into t (id,a) values (129,50);
+insert into t (id,a) values (129,51);
+insert into t (id,a) values (129,52);
+insert into t (id,a) values (129,53);
+insert into t (id,a) values (129,54);
+insert into t (id,a) values (129,55);
+insert into t (id,a) values (129,56);
+insert into t (id,a) values (129,57);
+insert into t (id,a) values (129,58);
+insert into t (id,a) values (129,59);
+insert into t (id,a) values (129,60);
+insert into t (id,a) values (129,61);
+insert into t (id,a) values (129,62);
+insert into t (id,a) values (129,63);
+insert into t (id,a) values (129,64);
+insert into t (id,a) values (129,65);
+insert into t (id,a) values (129,66);
+insert into t (id,a) values (129,67);
+insert into t (id,a) values (129,68);
+insert into t (id,a) values (129,69);
+insert into t (id,a) values (129,70);
+insert into t (id,a) values (129,71);
+insert into t (id,a) values (129,72);
+insert into t (id,a) values (129,73);
+insert into t (id,a) values (129,74);
+insert into t (id,a) values (129,75);
+insert into t (id,a) values (129,76);
+insert into t (id,a) values (129,77);
+insert into t (id,a) values (129,78);
+insert into t (id,a) values (129,79);
+insert into t (id,a) values (129,80);
+insert into t (id,a) values (129,81);
+insert into t (id,a) values (129,82);
+insert into t (id,a) values (129,83);
+insert into t (id,a) values (129,84);
+insert into t (id,a) values (129,85);
+insert into t (id,a) values (129,86);
+insert into t (id,a) values (129,87);
+insert into t (id,a) values (129,88);
+insert into t (id,a) values (129,89);
+insert into t (id,a) values (129,90);
+insert into t (id,a) values (129,91);
+insert into t (id,a) values (129,92);
+insert into t (id,a) values (129,93);
+insert into t (id,a) values (129,94);
+insert into t (id,a) values (129,95);
+insert into t (id,a) values (129,96);
+insert into t (id,a) values (129,97);
+insert into t (id,a) values (129,98);
+insert into t (id,a) values (129,99);
+insert into t (id,a) values (130,0);
+insert into t (id,a) values (130,1);
+insert into t (id,a) values (130,2);
+insert into t (id,a) values (130,3);
+insert into t (id,a) values (130,4);
+insert into t (id,a) values (130,5);
+insert into t (id,a) values (130,6);
+insert into t (id,a) values (130,7);
+insert into t (id,a) values (130,8);
+insert into t (id,a) values (130,9);
+insert into t (id,a) values (130,10);
+insert into t (id,a) values (130,11);
+insert into t (id,a) values (130,12);
+insert into t (id,a) values (130,13);
+insert into t (id,a) values (130,14);
+insert into t (id,a) values (130,15);
+insert into t (id,a) values (130,16);
+insert into t (id,a) values (130,17);
+insert into t (id,a) values (130,18);
+insert into t (id,a) values (130,19);
+insert into t (id,a) values (130,20);
+insert into t (id,a) values (130,21);
+insert into t (id,a) values (130,22);
+insert into t (id,a) values (130,23);
+insert into t (id,a) values (130,24);
+insert into t (id,a) values (130,25);
+insert into t (id,a) values (130,26);
+insert into t (id,a) values (130,27);
+insert into t (id,a) values (130,28);
+insert into t (id,a) values (130,29);
+insert into t (id,a) values (130,30);
+insert into t (id,a) values (130,31);
+insert into t (id,a) values (130,32);
+insert into t (id,a) values (130,33);
+insert into t (id,a) values (130,34);
+insert into t (id,a) values (130,35);
+insert into t (id,a) values (130,36);
+insert into t (id,a) values (130,37);
+insert into t (id,a) values (130,38);
+insert into t (id,a) values (130,39);
+insert into t (id,a) values (130,40);
+insert into t (id,a) values (130,41);
+insert into t (id,a) values (130,42);
+insert into t (id,a) values (130,43);
+insert into t (id,a) values (130,44);
+insert into t (id,a) values (130,45);
+insert into t (id,a) values (130,46);
+insert into t (id,a) values (130,47);
+insert into t (id,a) values (130,48);
+insert into t (id,a) values (130,49);
+insert into t (id,a) values (130,50);
+insert into t (id,a) values (130,51);
+insert into t (id,a) values (130,52);
+insert into t (id,a) values (130,53);
+insert into t (id,a) values (130,54);
+insert into t (id,a) values (130,55);
+insert into t (id,a) values (130,56);
+insert into t (id,a) values (130,57);
+insert into t (id,a) values (130,58);
+insert into t (id,a) values (130,59);
+insert into t (id,a) values (130,60);
+insert into t (id,a) values (130,61);
+insert into t (id,a) values (130,62);
+insert into t (id,a) values (130,63);
+insert into t (id,a) values (130,64);
+insert into t (id,a) values (130,65);
+insert into t (id,a) values (130,66);
+insert into t (id,a) values (130,67);
+insert into t (id,a) values (130,68);
+insert into t (id,a) values (130,69);
+insert into t (id,a) values (130,70);
+insert into t (id,a) values (130,71);
+insert into t (id,a) values (130,72);
+insert into t (id,a) values (130,73);
+insert into t (id,a) values (130,74);
+insert into t (id,a) values (130,75);
+insert into t (id,a) values (130,76);
+insert into t (id,a) values (130,77);
+insert into t (id,a) values (130,78);
+insert into t (id,a) values (130,79);
+insert into t (id,a) values (130,80);
+insert into t (id,a) values (130,81);
+insert into t (id,a) values (130,82);
+insert into t (id,a) values (130,83);
+insert into t (id,a) values (130,84);
+insert into t (id,a) values (130,85);
+insert into t (id,a) values (130,86);
+insert into t (id,a) values (130,87);
+insert into t (id,a) values (130,88);
+insert into t (id,a) values (130,89);
+insert into t (id,a) values (130,90);
+insert into t (id,a) values (130,91);
+insert into t (id,a) values (130,92);
+insert into t (id,a) values (130,93);
+insert into t (id,a) values (130,94);
+insert into t (id,a) values (130,95);
+insert into t (id,a) values (130,96);
+insert into t (id,a) values (130,97);
+insert into t (id,a) values (130,98);
+insert into t (id,a) values (130,99);
+insert into t (id,a) values (131,0);
+insert into t (id,a) values (131,1);
+insert into t (id,a) values (131,2);
+insert into t (id,a) values (131,3);
+insert into t (id,a) values (131,4);
+insert into t (id,a) values (131,5);
+insert into t (id,a) values (131,6);
+insert into t (id,a) values (131,7);
+insert into t (id,a) values (131,8);
+insert into t (id,a) values (131,9);
+insert into t (id,a) values (131,10);
+insert into t (id,a) values (131,11);
+insert into t (id,a) values (131,12);
+insert into t (id,a) values (131,13);
+insert into t (id,a) values (131,14);
+insert into t (id,a) values (131,15);
+insert into t (id,a) values (131,16);
+insert into t (id,a) values (131,17);
+insert into t (id,a) values (131,18);
+insert into t (id,a) values (131,19);
+insert into t (id,a) values (131,20);
+insert into t (id,a) values (131,21);
+insert into t (id,a) values (131,22);
+insert into t (id,a) values (131,23);
+insert into t (id,a) values (131,24);
+insert into t (id,a) values (131,25);
+insert into t (id,a) values (131,26);
+insert into t (id,a) values (131,27);
+insert into t (id,a) values (131,28);
+insert into t (id,a) values (131,29);
+insert into t (id,a) values (131,30);
+insert into t (id,a) values (131,31);
+insert into t (id,a) values (131,32);
+insert into t (id,a) values (131,33);
+insert into t (id,a) values (131,34);
+insert into t (id,a) values (131,35);
+insert into t (id,a) values (131,36);
+insert into t (id,a) values (131,37);
+insert into t (id,a) values (131,38);
+insert into t (id,a) values (131,39);
+insert into t (id,a) values (131,40);
+insert into t (id,a) values (131,41);
+insert into t (id,a) values (131,42);
+insert into t (id,a) values (131,43);
+insert into t (id,a) values (131,44);
+insert into t (id,a) values (131,45);
+insert into t (id,a) values (131,46);
+insert into t (id,a) values (131,47);
+insert into t (id,a) values (131,48);
+insert into t (id,a) values (131,49);
+insert into t (id,a) values (131,50);
+insert into t (id,a) values (131,51);
+insert into t (id,a) values (131,52);
+insert into t (id,a) values (131,53);
+insert into t (id,a) values (131,54);
+insert into t (id,a) values (131,55);
+insert into t (id,a) values (131,56);
+insert into t (id,a) values (131,57);
+insert into t (id,a) values (131,58);
+insert into t (id,a) values (131,59);
+insert into t (id,a) values (131,60);
+insert into t (id,a) values (131,61);
+insert into t (id,a) values (131,62);
+insert into t (id,a) values (131,63);
+insert into t (id,a) values (131,64);
+insert into t (id,a) values (131,65);
+insert into t (id,a) values (131,66);
+insert into t (id,a) values (131,67);
+insert into t (id,a) values (131,68);
+insert into t (id,a) values (131,69);
+insert into t (id,a) values (131,70);
+insert into t (id,a) values (131,71);
+insert into t (id,a) values (131,72);
+insert into t (id,a) values (131,73);
+insert into t (id,a) values (131,74);
+insert into t (id,a) values (131,75);
+insert into t (id,a) values (131,76);
+insert into t (id,a) values (131,77);
+insert into t (id,a) values (131,78);
+insert into t (id,a) values (131,79);
+insert into t (id,a) values (131,80);
+insert into t (id,a) values (131,81);
+insert into t (id,a) values (131,82);
+insert into t (id,a) values (131,83);
+insert into t (id,a) values (131,84);
+insert into t (id,a) values (131,85);
+insert into t (id,a) values (131,86);
+insert into t (id,a) values (131,87);
+insert into t (id,a) values (131,88);
+insert into t (id,a) values (131,89);
+insert into t (id,a) values (131,90);
+insert into t (id,a) values (131,91);
+insert into t (id,a) values (131,92);
+insert into t (id,a) values (131,93);
+insert into t (id,a) values (131,94);
+insert into t (id,a) values (131,95);
+insert into t (id,a) values (131,96);
+insert into t (id,a) values (131,97);
+insert into t (id,a) values (131,98);
+insert into t (id,a) values (131,99);
+insert into t (id,a) values (132,0);
+insert into t (id,a) values (132,1);
+insert into t (id,a) values (132,2);
+insert into t (id,a) values (132,3);
+insert into t (id,a) values (132,4);
+insert into t (id,a) values (132,5);
+insert into t (id,a) values (132,6);
+insert into t (id,a) values (132,7);
+insert into t (id,a) values (132,8);
+insert into t (id,a) values (132,9);
+insert into t (id,a) values (132,10);
+insert into t (id,a) values (132,11);
+insert into t (id,a) values (132,12);
+insert into t (id,a) values (132,13);
+insert into t (id,a) values (132,14);
+insert into t (id,a) values (132,15);
+insert into t (id,a) values (132,16);
+insert into t (id,a) values (132,17);
+insert into t (id,a) values (132,18);
+insert into t (id,a) values (132,19);
+insert into t (id,a) values (132,20);
+insert into t (id,a) values (132,21);
+insert into t (id,a) values (132,22);
+insert into t (id,a) values (132,23);
+insert into t (id,a) values (132,24);
+insert into t (id,a) values (132,25);
+insert into t (id,a) values (132,26);
+insert into t (id,a) values (132,27);
+insert into t (id,a) values (132,28);
+insert into t (id,a) values (132,29);
+insert into t (id,a) values (132,30);
+insert into t (id,a) values (132,31);
+insert into t (id,a) values (132,32);
+insert into t (id,a) values (132,33);
+insert into t (id,a) values (132,34);
+insert into t (id,a) values (132,35);
+insert into t (id,a) values (132,36);
+insert into t (id,a) values (132,37);
+insert into t (id,a) values (132,38);
+insert into t (id,a) values (132,39);
+insert into t (id,a) values (132,40);
+insert into t (id,a) values (132,41);
+insert into t (id,a) values (132,42);
+insert into t (id,a) values (132,43);
+insert into t (id,a) values (132,44);
+insert into t (id,a) values (132,45);
+insert into t (id,a) values (132,46);
+insert into t (id,a) values (132,47);
+insert into t (id,a) values (132,48);
+insert into t (id,a) values (132,49);
+insert into t (id,a) values (132,50);
+insert into t (id,a) values (132,51);
+insert into t (id,a) values (132,52);
+insert into t (id,a) values (132,53);
+insert into t (id,a) values (132,54);
+insert into t (id,a) values (132,55);
+insert into t (id,a) values (132,56);
+insert into t (id,a) values (132,57);
+insert into t (id,a) values (132,58);
+insert into t (id,a) values (132,59);
+insert into t (id,a) values (132,60);
+insert into t (id,a) values (132,61);
+insert into t (id,a) values (132,62);
+insert into t (id,a) values (132,63);
+insert into t (id,a) values (132,64);
+insert into t (id,a) values (132,65);
+insert into t (id,a) values (132,66);
+insert into t (id,a) values (132,67);
+insert into t (id,a) values (132,68);
+insert into t (id,a) values (132,69);
+insert into t (id,a) values (132,70);
+insert into t (id,a) values (132,71);
+insert into t (id,a) values (132,72);
+insert into t (id,a) values (132,73);
+insert into t (id,a) values (132,74);
+insert into t (id,a) values (132,75);
+insert into t (id,a) values (132,76);
+insert into t (id,a) values (132,77);
+insert into t (id,a) values (132,78);
+insert into t (id,a) values (132,79);
+insert into t (id,a) values (132,80);
+insert into t (id,a) values (132,81);
+insert into t (id,a) values (132,82);
+insert into t (id,a) values (132,83);
+insert into t (id,a) values (132,84);
+insert into t (id,a) values (132,85);
+insert into t (id,a) values (132,86);
+insert into t (id,a) values (132,87);
+insert into t (id,a) values (132,88);
+insert into t (id,a) values (132,89);
+insert into t (id,a) values (132,90);
+insert into t (id,a) values (132,91);
+insert into t (id,a) values (132,92);
+insert into t (id,a) values (132,93);
+insert into t (id,a) values (132,94);
+insert into t (id,a) values (132,95);
+insert into t (id,a) values (132,96);
+insert into t (id,a) values (132,97);
+insert into t (id,a) values (132,98);
+insert into t (id,a) values (132,99);
+insert into t (id,a) values (133,0);
+insert into t (id,a) values (133,1);
+insert into t (id,a) values (133,2);
+insert into t (id,a) values (133,3);
+insert into t (id,a) values (133,4);
+insert into t (id,a) values (133,5);
+insert into t (id,a) values (133,6);
+insert into t (id,a) values (133,7);
+insert into t (id,a) values (133,8);
+insert into t (id,a) values (133,9);
+insert into t (id,a) values (133,10);
+insert into t (id,a) values (133,11);
+insert into t (id,a) values (133,12);
+insert into t (id,a) values (133,13);
+insert into t (id,a) values (133,14);
+insert into t (id,a) values (133,15);
+insert into t (id,a) values (133,16);
+insert into t (id,a) values (133,17);
+insert into t (id,a) values (133,18);
+insert into t (id,a) values (133,19);
+insert into t (id,a) values (133,20);
+insert into t (id,a) values (133,21);
+insert into t (id,a) values (133,22);
+insert into t (id,a) values (133,23);
+insert into t (id,a) values (133,24);
+insert into t (id,a) values (133,25);
+insert into t (id,a) values (133,26);
+insert into t (id,a) values (133,27);
+insert into t (id,a) values (133,28);
+insert into t (id,a) values (133,29);
+insert into t (id,a) values (133,30);
+insert into t (id,a) values (133,31);
+insert into t (id,a) values (133,32);
+insert into t (id,a) values (133,33);
+insert into t (id,a) values (133,34);
+insert into t (id,a) values (133,35);
+insert into t (id,a) values (133,36);
+insert into t (id,a) values (133,37);
+insert into t (id,a) values (133,38);
+insert into t (id,a) values (133,39);
+insert into t (id,a) values (133,40);
+insert into t (id,a) values (133,41);
+insert into t (id,a) values (133,42);
+insert into t (id,a) values (133,43);
+insert into t (id,a) values (133,44);
+insert into t (id,a) values (133,45);
+insert into t (id,a) values (133,46);
+insert into t (id,a) values (133,47);
+insert into t (id,a) values (133,48);
+insert into t (id,a) values (133,49);
+insert into t (id,a) values (133,50);
+insert into t (id,a) values (133,51);
+insert into t (id,a) values (133,52);
+insert into t (id,a) values (133,53);
+insert into t (id,a) values (133,54);
+insert into t (id,a) values (133,55);
+insert into t (id,a) values (133,56);
+insert into t (id,a) values (133,57);
+insert into t (id,a) values (133,58);
+insert into t (id,a) values (133,59);
+insert into t (id,a) values (133,60);
+insert into t (id,a) values (133,61);
+insert into t (id,a) values (133,62);
+insert into t (id,a) values (133,63);
+insert into t (id,a) values (133,64);
+insert into t (id,a) values (133,65);
+insert into t (id,a) values (133,66);
+insert into t (id,a) values (133,67);
+insert into t (id,a) values (133,68);
+insert into t (id,a) values (133,69);
+insert into t (id,a) values (133,70);
+insert into t (id,a) values (133,71);
+insert into t (id,a) values (133,72);
+insert into t (id,a) values (133,73);
+insert into t (id,a) values (133,74);
+insert into t (id,a) values (133,75);
+insert into t (id,a) values (133,76);
+insert into t (id,a) values (133,77);
+insert into t (id,a) values (133,78);
+insert into t (id,a) values (133,79);
+insert into t (id,a) values (133,80);
+insert into t (id,a) values (133,81);
+insert into t (id,a) values (133,82);
+insert into t (id,a) values (133,83);
+insert into t (id,a) values (133,84);
+insert into t (id,a) values (133,85);
+insert into t (id,a) values (133,86);
+insert into t (id,a) values (133,87);
+insert into t (id,a) values (133,88);
+insert into t (id,a) values (133,89);
+insert into t (id,a) values (133,90);
+insert into t (id,a) values (133,91);
+insert into t (id,a) values (133,92);
+insert into t (id,a) values (133,93);
+insert into t (id,a) values (133,94);
+insert into t (id,a) values (133,95);
+insert into t (id,a) values (133,96);
+insert into t (id,a) values (133,97);
+insert into t (id,a) values (133,98);
+insert into t (id,a) values (133,99);
+insert into t (id,a) values (134,0);
+insert into t (id,a) values (134,1);
+insert into t (id,a) values (134,2);
+insert into t (id,a) values (134,3);
+insert into t (id,a) values (134,4);
+insert into t (id,a) values (134,5);
+insert into t (id,a) values (134,6);
+insert into t (id,a) values (134,7);
+insert into t (id,a) values (134,8);
+insert into t (id,a) values (134,9);
+insert into t (id,a) values (134,10);
+insert into t (id,a) values (134,11);
+insert into t (id,a) values (134,12);
+insert into t (id,a) values (134,13);
+insert into t (id,a) values (134,14);
+insert into t (id,a) values (134,15);
+insert into t (id,a) values (134,16);
+insert into t (id,a) values (134,17);
+insert into t (id,a) values (134,18);
+insert into t (id,a) values (134,19);
+insert into t (id,a) values (134,20);
+insert into t (id,a) values (134,21);
+insert into t (id,a) values (134,22);
+insert into t (id,a) values (134,23);
+insert into t (id,a) values (134,24);
+insert into t (id,a) values (134,25);
+insert into t (id,a) values (134,26);
+insert into t (id,a) values (134,27);
+insert into t (id,a) values (134,28);
+insert into t (id,a) values (134,29);
+insert into t (id,a) values (134,30);
+insert into t (id,a) values (134,31);
+insert into t (id,a) values (134,32);
+insert into t (id,a) values (134,33);
+insert into t (id,a) values (134,34);
+insert into t (id,a) values (134,35);
+insert into t (id,a) values (134,36);
+insert into t (id,a) values (134,37);
+insert into t (id,a) values (134,38);
+insert into t (id,a) values (134,39);
+insert into t (id,a) values (134,40);
+insert into t (id,a) values (134,41);
+insert into t (id,a) values (134,42);
+insert into t (id,a) values (134,43);
+insert into t (id,a) values (134,44);
+insert into t (id,a) values (134,45);
+insert into t (id,a) values (134,46);
+insert into t (id,a) values (134,47);
+insert into t (id,a) values (134,48);
+insert into t (id,a) values (134,49);
+insert into t (id,a) values (134,50);
+insert into t (id,a) values (134,51);
+insert into t (id,a) values (134,52);
+insert into t (id,a) values (134,53);
+insert into t (id,a) values (134,54);
+insert into t (id,a) values (134,55);
+insert into t (id,a) values (134,56);
+insert into t (id,a) values (134,57);
+insert into t (id,a) values (134,58);
+insert into t (id,a) values (134,59);
+insert into t (id,a) values (134,60);
+insert into t (id,a) values (134,61);
+insert into t (id,a) values (134,62);
+insert into t (id,a) values (134,63);
+insert into t (id,a) values (134,64);
+insert into t (id,a) values (134,65);
+insert into t (id,a) values (134,66);
+insert into t (id,a) values (134,67);
+insert into t (id,a) values (134,68);
+insert into t (id,a) values (134,69);
+insert into t (id,a) values (134,70);
+insert into t (id,a) values (134,71);
+insert into t (id,a) values (134,72);
+insert into t (id,a) values (134,73);
+insert into t (id,a) values (134,74);
+insert into t (id,a) values (134,75);
+insert into t (id,a) values (134,76);
+insert into t (id,a) values (134,77);
+insert into t (id,a) values (134,78);
+insert into t (id,a) values (134,79);
+insert into t (id,a) values (134,80);
+insert into t (id,a) values (134,81);
+insert into t (id,a) values (134,82);
+insert into t (id,a) values (134,83);
+insert into t (id,a) values (134,84);
+insert into t (id,a) values (134,85);
+insert into t (id,a) values (134,86);
+insert into t (id,a) values (134,87);
+insert into t (id,a) values (134,88);
+insert into t (id,a) values (134,89);
+insert into t (id,a) values (134,90);
+insert into t (id,a) values (134,91);
+insert into t (id,a) values (134,92);
+insert into t (id,a) values (134,93);
+insert into t (id,a) values (134,94);
+insert into t (id,a) values (134,95);
+insert into t (id,a) values (134,96);
+insert into t (id,a) values (134,97);
+insert into t (id,a) values (134,98);
+insert into t (id,a) values (134,99);
+insert into t (id,a) values (135,0);
+insert into t (id,a) values (135,1);
+insert into t (id,a) values (135,2);
+insert into t (id,a) values (135,3);
+insert into t (id,a) values (135,4);
+insert into t (id,a) values (135,5);
+insert into t (id,a) values (135,6);
+insert into t (id,a) values (135,7);
+insert into t (id,a) values (135,8);
+insert into t (id,a) values (135,9);
+insert into t (id,a) values (135,10);
+insert into t (id,a) values (135,11);
+insert into t (id,a) values (135,12);
+insert into t (id,a) values (135,13);
+insert into t (id,a) values (135,14);
+insert into t (id,a) values (135,15);
+insert into t (id,a) values (135,16);
+insert into t (id,a) values (135,17);
+insert into t (id,a) values (135,18);
+insert into t (id,a) values (135,19);
+insert into t (id,a) values (135,20);
+insert into t (id,a) values (135,21);
+insert into t (id,a) values (135,22);
+insert into t (id,a) values (135,23);
+insert into t (id,a) values (135,24);
+insert into t (id,a) values (135,25);
+insert into t (id,a) values (135,26);
+insert into t (id,a) values (135,27);
+insert into t (id,a) values (135,28);
+insert into t (id,a) values (135,29);
+insert into t (id,a) values (135,30);
+insert into t (id,a) values (135,31);
+insert into t (id,a) values (135,32);
+insert into t (id,a) values (135,33);
+insert into t (id,a) values (135,34);
+insert into t (id,a) values (135,35);
+insert into t (id,a) values (135,36);
+insert into t (id,a) values (135,37);
+insert into t (id,a) values (135,38);
+insert into t (id,a) values (135,39);
+insert into t (id,a) values (135,40);
+insert into t (id,a) values (135,41);
+insert into t (id,a) values (135,42);
+insert into t (id,a) values (135,43);
+insert into t (id,a) values (135,44);
+insert into t (id,a) values (135,45);
+insert into t (id,a) values (135,46);
+insert into t (id,a) values (135,47);
+insert into t (id,a) values (135,48);
+insert into t (id,a) values (135,49);
+insert into t (id,a) values (135,50);
+insert into t (id,a) values (135,51);
+insert into t (id,a) values (135,52);
+insert into t (id,a) values (135,53);
+insert into t (id,a) values (135,54);
+insert into t (id,a) values (135,55);
+insert into t (id,a) values (135,56);
+insert into t (id,a) values (135,57);
+insert into t (id,a) values (135,58);
+insert into t (id,a) values (135,59);
+insert into t (id,a) values (135,60);
+insert into t (id,a) values (135,61);
+insert into t (id,a) values (135,62);
+insert into t (id,a) values (135,63);
+insert into t (id,a) values (135,64);
+insert into t (id,a) values (135,65);
+insert into t (id,a) values (135,66);
+insert into t (id,a) values (135,67);
+insert into t (id,a) values (135,68);
+insert into t (id,a) values (135,69);
+insert into t (id,a) values (135,70);
+insert into t (id,a) values (135,71);
+insert into t (id,a) values (135,72);
+insert into t (id,a) values (135,73);
+insert into t (id,a) values (135,74);
+insert into t (id,a) values (135,75);
+insert into t (id,a) values (135,76);
+insert into t (id,a) values (135,77);
+insert into t (id,a) values (135,78);
+insert into t (id,a) values (135,79);
+insert into t (id,a) values (135,80);
+insert into t (id,a) values (135,81);
+insert into t (id,a) values (135,82);
+insert into t (id,a) values (135,83);
+insert into t (id,a) values (135,84);
+insert into t (id,a) values (135,85);
+insert into t (id,a) values (135,86);
+insert into t (id,a) values (135,87);
+insert into t (id,a) values (135,88);
+insert into t (id,a) values (135,89);
+insert into t (id,a) values (135,90);
+insert into t (id,a) values (135,91);
+insert into t (id,a) values (135,92);
+insert into t (id,a) values (135,93);
+insert into t (id,a) values (135,94);
+insert into t (id,a) values (135,95);
+insert into t (id,a) values (135,96);
+insert into t (id,a) values (135,97);
+insert into t (id,a) values (135,98);
+insert into t (id,a) values (135,99);
+insert into t (id,a) values (136,0);
+insert into t (id,a) values (136,1);
+insert into t (id,a) values (136,2);
+insert into t (id,a) values (136,3);
+insert into t (id,a) values (136,4);
+insert into t (id,a) values (136,5);
+insert into t (id,a) values (136,6);
+insert into t (id,a) values (136,7);
+insert into t (id,a) values (136,8);
+insert into t (id,a) values (136,9);
+insert into t (id,a) values (136,10);
+insert into t (id,a) values (136,11);
+insert into t (id,a) values (136,12);
+insert into t (id,a) values (136,13);
+insert into t (id,a) values (136,14);
+insert into t (id,a) values (136,15);
+insert into t (id,a) values (136,16);
+insert into t (id,a) values (136,17);
+insert into t (id,a) values (136,18);
+insert into t (id,a) values (136,19);
+insert into t (id,a) values (136,20);
+insert into t (id,a) values (136,21);
+insert into t (id,a) values (136,22);
+insert into t (id,a) values (136,23);
+insert into t (id,a) values (136,24);
+insert into t (id,a) values (136,25);
+insert into t (id,a) values (136,26);
+insert into t (id,a) values (136,27);
+insert into t (id,a) values (136,28);
+insert into t (id,a) values (136,29);
+insert into t (id,a) values (136,30);
+insert into t (id,a) values (136,31);
+insert into t (id,a) values (136,32);
+insert into t (id,a) values (136,33);
+insert into t (id,a) values (136,34);
+insert into t (id,a) values (136,35);
+insert into t (id,a) values (136,36);
+insert into t (id,a) values (136,37);
+insert into t (id,a) values (136,38);
+insert into t (id,a) values (136,39);
+insert into t (id,a) values (136,40);
+insert into t (id,a) values (136,41);
+insert into t (id,a) values (136,42);
+insert into t (id,a) values (136,43);
+insert into t (id,a) values (136,44);
+insert into t (id,a) values (136,45);
+insert into t (id,a) values (136,46);
+insert into t (id,a) values (136,47);
+insert into t (id,a) values (136,48);
+insert into t (id,a) values (136,49);
+insert into t (id,a) values (136,50);
+insert into t (id,a) values (136,51);
+insert into t (id,a) values (136,52);
+insert into t (id,a) values (136,53);
+insert into t (id,a) values (136,54);
+insert into t (id,a) values (136,55);
+insert into t (id,a) values (136,56);
+insert into t (id,a) values (136,57);
+insert into t (id,a) values (136,58);
+insert into t (id,a) values (136,59);
+insert into t (id,a) values (136,60);
+insert into t (id,a) values (136,61);
+insert into t (id,a) values (136,62);
+insert into t (id,a) values (136,63);
+insert into t (id,a) values (136,64);
+insert into t (id,a) values (136,65);
+insert into t (id,a) values (136,66);
+insert into t (id,a) values (136,67);
+insert into t (id,a) values (136,68);
+insert into t (id,a) values (136,69);
+insert into t (id,a) values (136,70);
+insert into t (id,a) values (136,71);
+insert into t (id,a) values (136,72);
+insert into t (id,a) values (136,73);
+insert into t (id,a) values (136,74);
+insert into t (id,a) values (136,75);
+insert into t (id,a) values (136,76);
+insert into t (id,a) values (136,77);
+insert into t (id,a) values (136,78);
+insert into t (id,a) values (136,79);
+insert into t (id,a) values (136,80);
+insert into t (id,a) values (136,81);
+insert into t (id,a) values (136,82);
+insert into t (id,a) values (136,83);
+insert into t (id,a) values (136,84);
+insert into t (id,a) values (136,85);
+insert into t (id,a) values (136,86);
+insert into t (id,a) values (136,87);
+insert into t (id,a) values (136,88);
+insert into t (id,a) values (136,89);
+insert into t (id,a) values (136,90);
+insert into t (id,a) values (136,91);
+insert into t (id,a) values (136,92);
+insert into t (id,a) values (136,93);
+insert into t (id,a) values (136,94);
+insert into t (id,a) values (136,95);
+insert into t (id,a) values (136,96);
+insert into t (id,a) values (136,97);
+insert into t (id,a) values (136,98);
+insert into t (id,a) values (136,99);
+insert into t (id,a) values (137,0);
+insert into t (id,a) values (137,1);
+insert into t (id,a) values (137,2);
+insert into t (id,a) values (137,3);
+insert into t (id,a) values (137,4);
+insert into t (id,a) values (137,5);
+insert into t (id,a) values (137,6);
+insert into t (id,a) values (137,7);
+insert into t (id,a) values (137,8);
+insert into t (id,a) values (137,9);
+insert into t (id,a) values (137,10);
+insert into t (id,a) values (137,11);
+insert into t (id,a) values (137,12);
+insert into t (id,a) values (137,13);
+insert into t (id,a) values (137,14);
+insert into t (id,a) values (137,15);
+insert into t (id,a) values (137,16);
+insert into t (id,a) values (137,17);
+insert into t (id,a) values (137,18);
+insert into t (id,a) values (137,19);
+insert into t (id,a) values (137,20);
+insert into t (id,a) values (137,21);
+insert into t (id,a) values (137,22);
+insert into t (id,a) values (137,23);
+insert into t (id,a) values (137,24);
+insert into t (id,a) values (137,25);
+insert into t (id,a) values (137,26);
+insert into t (id,a) values (137,27);
+insert into t (id,a) values (137,28);
+insert into t (id,a) values (137,29);
+insert into t (id,a) values (137,30);
+insert into t (id,a) values (137,31);
+insert into t (id,a) values (137,32);
+insert into t (id,a) values (137,33);
+insert into t (id,a) values (137,34);
+insert into t (id,a) values (137,35);
+insert into t (id,a) values (137,36);
+insert into t (id,a) values (137,37);
+insert into t (id,a) values (137,38);
+insert into t (id,a) values (137,39);
+insert into t (id,a) values (137,40);
+insert into t (id,a) values (137,41);
+insert into t (id,a) values (137,42);
+insert into t (id,a) values (137,43);
+insert into t (id,a) values (137,44);
+insert into t (id,a) values (137,45);
+insert into t (id,a) values (137,46);
+insert into t (id,a) values (137,47);
+insert into t (id,a) values (137,48);
+insert into t (id,a) values (137,49);
+insert into t (id,a) values (137,50);
+insert into t (id,a) values (137,51);
+insert into t (id,a) values (137,52);
+insert into t (id,a) values (137,53);
+insert into t (id,a) values (137,54);
+insert into t (id,a) values (137,55);
+insert into t (id,a) values (137,56);
+insert into t (id,a) values (137,57);
+insert into t (id,a) values (137,58);
+insert into t (id,a) values (137,59);
+insert into t (id,a) values (137,60);
+insert into t (id,a) values (137,61);
+insert into t (id,a) values (137,62);
+insert into t (id,a) values (137,63);
+insert into t (id,a) values (137,64);
+insert into t (id,a) values (137,65);
+insert into t (id,a) values (137,66);
+insert into t (id,a) values (137,67);
+insert into t (id,a) values (137,68);
+insert into t (id,a) values (137,69);
+insert into t (id,a) values (137,70);
+insert into t (id,a) values (137,71);
+insert into t (id,a) values (137,72);
+insert into t (id,a) values (137,73);
+insert into t (id,a) values (137,74);
+insert into t (id,a) values (137,75);
+insert into t (id,a) values (137,76);
+insert into t (id,a) values (137,77);
+insert into t (id,a) values (137,78);
+insert into t (id,a) values (137,79);
+insert into t (id,a) values (137,80);
+insert into t (id,a) values (137,81);
+insert into t (id,a) values (137,82);
+insert into t (id,a) values (137,83);
+insert into t (id,a) values (137,84);
+insert into t (id,a) values (137,85);
+insert into t (id,a) values (137,86);
+insert into t (id,a) values (137,87);
+insert into t (id,a) values (137,88);
+insert into t (id,a) values (137,89);
+insert into t (id,a) values (137,90);
+insert into t (id,a) values (137,91);
+insert into t (id,a) values (137,92);
+insert into t (id,a) values (137,93);
+insert into t (id,a) values (137,94);
+insert into t (id,a) values (137,95);
+insert into t (id,a) values (137,96);
+insert into t (id,a) values (137,97);
+insert into t (id,a) values (137,98);
+insert into t (id,a) values (137,99);
+insert into t (id,a) values (138,0);
+insert into t (id,a) values (138,1);
+insert into t (id,a) values (138,2);
+insert into t (id,a) values (138,3);
+insert into t (id,a) values (138,4);
+insert into t (id,a) values (138,5);
+insert into t (id,a) values (138,6);
+insert into t (id,a) values (138,7);
+insert into t (id,a) values (138,8);
+insert into t (id,a) values (138,9);
+insert into t (id,a) values (138,10);
+insert into t (id,a) values (138,11);
+insert into t (id,a) values (138,12);
+insert into t (id,a) values (138,13);
+insert into t (id,a) values (138,14);
+insert into t (id,a) values (138,15);
+insert into t (id,a) values (138,16);
+insert into t (id,a) values (138,17);
+insert into t (id,a) values (138,18);
+insert into t (id,a) values (138,19);
+insert into t (id,a) values (138,20);
+insert into t (id,a) values (138,21);
+insert into t (id,a) values (138,22);
+insert into t (id,a) values (138,23);
+insert into t (id,a) values (138,24);
+insert into t (id,a) values (138,25);
+insert into t (id,a) values (138,26);
+insert into t (id,a) values (138,27);
+insert into t (id,a) values (138,28);
+insert into t (id,a) values (138,29);
+insert into t (id,a) values (138,30);
+insert into t (id,a) values (138,31);
+insert into t (id,a) values (138,32);
+insert into t (id,a) values (138,33);
+insert into t (id,a) values (138,34);
+insert into t (id,a) values (138,35);
+insert into t (id,a) values (138,36);
+insert into t (id,a) values (138,37);
+insert into t (id,a) values (138,38);
+insert into t (id,a) values (138,39);
+insert into t (id,a) values (138,40);
+insert into t (id,a) values (138,41);
+insert into t (id,a) values (138,42);
+insert into t (id,a) values (138,43);
+insert into t (id,a) values (138,44);
+insert into t (id,a) values (138,45);
+insert into t (id,a) values (138,46);
+insert into t (id,a) values (138,47);
+insert into t (id,a) values (138,48);
+insert into t (id,a) values (138,49);
+insert into t (id,a) values (138,50);
+insert into t (id,a) values (138,51);
+insert into t (id,a) values (138,52);
+insert into t (id,a) values (138,53);
+insert into t (id,a) values (138,54);
+insert into t (id,a) values (138,55);
+insert into t (id,a) values (138,56);
+insert into t (id,a) values (138,57);
+insert into t (id,a) values (138,58);
+insert into t (id,a) values (138,59);
+insert into t (id,a) values (138,60);
+insert into t (id,a) values (138,61);
+insert into t (id,a) values (138,62);
+insert into t (id,a) values (138,63);
+insert into t (id,a) values (138,64);
+insert into t (id,a) values (138,65);
+insert into t (id,a) values (138,66);
+insert into t (id,a) values (138,67);
+insert into t (id,a) values (138,68);
+insert into t (id,a) values (138,69);
+insert into t (id,a) values (138,70);
+insert into t (id,a) values (138,71);
+insert into t (id,a) values (138,72);
+insert into t (id,a) values (138,73);
+insert into t (id,a) values (138,74);
+insert into t (id,a) values (138,75);
+insert into t (id,a) values (138,76);
+insert into t (id,a) values (138,77);
+insert into t (id,a) values (138,78);
+insert into t (id,a) values (138,79);
+insert into t (id,a) values (138,80);
+insert into t (id,a) values (138,81);
+insert into t (id,a) values (138,82);
+insert into t (id,a) values (138,83);
+insert into t (id,a) values (138,84);
+insert into t (id,a) values (138,85);
+insert into t (id,a) values (138,86);
+insert into t (id,a) values (138,87);
+insert into t (id,a) values (138,88);
+insert into t (id,a) values (138,89);
+insert into t (id,a) values (138,90);
+insert into t (id,a) values (138,91);
+insert into t (id,a) values (138,92);
+insert into t (id,a) values (138,93);
+insert into t (id,a) values (138,94);
+insert into t (id,a) values (138,95);
+insert into t (id,a) values (138,96);
+insert into t (id,a) values (138,97);
+insert into t (id,a) values (138,98);
+insert into t (id,a) values (138,99);
+insert into t (id,a) values (139,0);
+insert into t (id,a) values (139,1);
+insert into t (id,a) values (139,2);
+insert into t (id,a) values (139,3);
+insert into t (id,a) values (139,4);
+insert into t (id,a) values (139,5);
+insert into t (id,a) values (139,6);
+insert into t (id,a) values (139,7);
+insert into t (id,a) values (139,8);
+insert into t (id,a) values (139,9);
+insert into t (id,a) values (139,10);
+insert into t (id,a) values (139,11);
+insert into t (id,a) values (139,12);
+insert into t (id,a) values (139,13);
+insert into t (id,a) values (139,14);
+insert into t (id,a) values (139,15);
+insert into t (id,a) values (139,16);
+insert into t (id,a) values (139,17);
+insert into t (id,a) values (139,18);
+insert into t (id,a) values (139,19);
+insert into t (id,a) values (139,20);
+insert into t (id,a) values (139,21);
+insert into t (id,a) values (139,22);
+insert into t (id,a) values (139,23);
+insert into t (id,a) values (139,24);
+insert into t (id,a) values (139,25);
+insert into t (id,a) values (139,26);
+insert into t (id,a) values (139,27);
+insert into t (id,a) values (139,28);
+insert into t (id,a) values (139,29);
+insert into t (id,a) values (139,30);
+insert into t (id,a) values (139,31);
+insert into t (id,a) values (139,32);
+insert into t (id,a) values (139,33);
+insert into t (id,a) values (139,34);
+insert into t (id,a) values (139,35);
+insert into t (id,a) values (139,36);
+insert into t (id,a) values (139,37);
+insert into t (id,a) values (139,38);
+insert into t (id,a) values (139,39);
+insert into t (id,a) values (139,40);
+insert into t (id,a) values (139,41);
+insert into t (id,a) values (139,42);
+insert into t (id,a) values (139,43);
+insert into t (id,a) values (139,44);
+insert into t (id,a) values (139,45);
+insert into t (id,a) values (139,46);
+insert into t (id,a) values (139,47);
+insert into t (id,a) values (139,48);
+insert into t (id,a) values (139,49);
+insert into t (id,a) values (139,50);
+insert into t (id,a) values (139,51);
+insert into t (id,a) values (139,52);
+insert into t (id,a) values (139,53);
+insert into t (id,a) values (139,54);
+insert into t (id,a) values (139,55);
+insert into t (id,a) values (139,56);
+insert into t (id,a) values (139,57);
+insert into t (id,a) values (139,58);
+insert into t (id,a) values (139,59);
+insert into t (id,a) values (139,60);
+insert into t (id,a) values (139,61);
+insert into t (id,a) values (139,62);
+insert into t (id,a) values (139,63);
+insert into t (id,a) values (139,64);
+insert into t (id,a) values (139,65);
+insert into t (id,a) values (139,66);
+insert into t (id,a) values (139,67);
+insert into t (id,a) values (139,68);
+insert into t (id,a) values (139,69);
+insert into t (id,a) values (139,70);
+insert into t (id,a) values (139,71);
+insert into t (id,a) values (139,72);
+insert into t (id,a) values (139,73);
+insert into t (id,a) values (139,74);
+insert into t (id,a) values (139,75);
+insert into t (id,a) values (139,76);
+insert into t (id,a) values (139,77);
+insert into t (id,a) values (139,78);
+insert into t (id,a) values (139,79);
+insert into t (id,a) values (139,80);
+insert into t (id,a) values (139,81);
+insert into t (id,a) values (139,82);
+insert into t (id,a) values (139,83);
+insert into t (id,a) values (139,84);
+insert into t (id,a) values (139,85);
+insert into t (id,a) values (139,86);
+insert into t (id,a) values (139,87);
+insert into t (id,a) values (139,88);
+insert into t (id,a) values (139,89);
+insert into t (id,a) values (139,90);
+insert into t (id,a) values (139,91);
+insert into t (id,a) values (139,92);
+insert into t (id,a) values (139,93);
+insert into t (id,a) values (139,94);
+insert into t (id,a) values (139,95);
+insert into t (id,a) values (139,96);
+insert into t (id,a) values (139,97);
+insert into t (id,a) values (139,98);
+insert into t (id,a) values (139,99);
+insert into t (id,a) values (140,0);
+insert into t (id,a) values (140,1);
+insert into t (id,a) values (140,2);
+insert into t (id,a) values (140,3);
+insert into t (id,a) values (140,4);
+insert into t (id,a) values (140,5);
+insert into t (id,a) values (140,6);
+insert into t (id,a) values (140,7);
+insert into t (id,a) values (140,8);
+insert into t (id,a) values (140,9);
+insert into t (id,a) values (140,10);
+insert into t (id,a) values (140,11);
+insert into t (id,a) values (140,12);
+insert into t (id,a) values (140,13);
+insert into t (id,a) values (140,14);
+insert into t (id,a) values (140,15);
+insert into t (id,a) values (140,16);
+insert into t (id,a) values (140,17);
+insert into t (id,a) values (140,18);
+insert into t (id,a) values (140,19);
+insert into t (id,a) values (140,20);
+insert into t (id,a) values (140,21);
+insert into t (id,a) values (140,22);
+insert into t (id,a) values (140,23);
+insert into t (id,a) values (140,24);
+insert into t (id,a) values (140,25);
+insert into t (id,a) values (140,26);
+insert into t (id,a) values (140,27);
+insert into t (id,a) values (140,28);
+insert into t (id,a) values (140,29);
+insert into t (id,a) values (140,30);
+insert into t (id,a) values (140,31);
+insert into t (id,a) values (140,32);
+insert into t (id,a) values (140,33);
+insert into t (id,a) values (140,34);
+insert into t (id,a) values (140,35);
+insert into t (id,a) values (140,36);
+insert into t (id,a) values (140,37);
+insert into t (id,a) values (140,38);
+insert into t (id,a) values (140,39);
+insert into t (id,a) values (140,40);
+insert into t (id,a) values (140,41);
+insert into t (id,a) values (140,42);
+insert into t (id,a) values (140,43);
+insert into t (id,a) values (140,44);
+insert into t (id,a) values (140,45);
+insert into t (id,a) values (140,46);
+insert into t (id,a) values (140,47);
+insert into t (id,a) values (140,48);
+insert into t (id,a) values (140,49);
+insert into t (id,a) values (140,50);
+insert into t (id,a) values (140,51);
+insert into t (id,a) values (140,52);
+insert into t (id,a) values (140,53);
+insert into t (id,a) values (140,54);
+insert into t (id,a) values (140,55);
+insert into t (id,a) values (140,56);
+insert into t (id,a) values (140,57);
+insert into t (id,a) values (140,58);
+insert into t (id,a) values (140,59);
+insert into t (id,a) values (140,60);
+insert into t (id,a) values (140,61);
+insert into t (id,a) values (140,62);
+insert into t (id,a) values (140,63);
+insert into t (id,a) values (140,64);
+insert into t (id,a) values (140,65);
+insert into t (id,a) values (140,66);
+insert into t (id,a) values (140,67);
+insert into t (id,a) values (140,68);
+insert into t (id,a) values (140,69);
+insert into t (id,a) values (140,70);
+insert into t (id,a) values (140,71);
+insert into t (id,a) values (140,72);
+insert into t (id,a) values (140,73);
+insert into t (id,a) values (140,74);
+insert into t (id,a) values (140,75);
+insert into t (id,a) values (140,76);
+insert into t (id,a) values (140,77);
+insert into t (id,a) values (140,78);
+insert into t (id,a) values (140,79);
+insert into t (id,a) values (140,80);
+insert into t (id,a) values (140,81);
+insert into t (id,a) values (140,82);
+insert into t (id,a) values (140,83);
+insert into t (id,a) values (140,84);
+insert into t (id,a) values (140,85);
+insert into t (id,a) values (140,86);
+insert into t (id,a) values (140,87);
+insert into t (id,a) values (140,88);
+insert into t (id,a) values (140,89);
+insert into t (id,a) values (140,90);
+insert into t (id,a) values (140,91);
+insert into t (id,a) values (140,92);
+insert into t (id,a) values (140,93);
+insert into t (id,a) values (140,94);
+insert into t (id,a) values (140,95);
+insert into t (id,a) values (140,96);
+insert into t (id,a) values (140,97);
+insert into t (id,a) values (140,98);
+insert into t (id,a) values (140,99);
+insert into t (id,a) values (141,0);
+insert into t (id,a) values (141,1);
+insert into t (id,a) values (141,2);
+insert into t (id,a) values (141,3);
+insert into t (id,a) values (141,4);
+insert into t (id,a) values (141,5);
+insert into t (id,a) values (141,6);
+insert into t (id,a) values (141,7);
+insert into t (id,a) values (141,8);
+insert into t (id,a) values (141,9);
+insert into t (id,a) values (141,10);
+insert into t (id,a) values (141,11);
+insert into t (id,a) values (141,12);
+insert into t (id,a) values (141,13);
+insert into t (id,a) values (141,14);
+insert into t (id,a) values (141,15);
+insert into t (id,a) values (141,16);
+insert into t (id,a) values (141,17);
+insert into t (id,a) values (141,18);
+insert into t (id,a) values (141,19);
+insert into t (id,a) values (141,20);
+insert into t (id,a) values (141,21);
+insert into t (id,a) values (141,22);
+insert into t (id,a) values (141,23);
+insert into t (id,a) values (141,24);
+insert into t (id,a) values (141,25);
+insert into t (id,a) values (141,26);
+insert into t (id,a) values (141,27);
+insert into t (id,a) values (141,28);
+insert into t (id,a) values (141,29);
+insert into t (id,a) values (141,30);
+insert into t (id,a) values (141,31);
+insert into t (id,a) values (141,32);
+insert into t (id,a) values (141,33);
+insert into t (id,a) values (141,34);
+insert into t (id,a) values (141,35);
+insert into t (id,a) values (141,36);
+insert into t (id,a) values (141,37);
+insert into t (id,a) values (141,38);
+insert into t (id,a) values (141,39);
+insert into t (id,a) values (141,40);
+insert into t (id,a) values (141,41);
+insert into t (id,a) values (141,42);
+insert into t (id,a) values (141,43);
+insert into t (id,a) values (141,44);
+insert into t (id,a) values (141,45);
+insert into t (id,a) values (141,46);
+insert into t (id,a) values (141,47);
+insert into t (id,a) values (141,48);
+insert into t (id,a) values (141,49);
+insert into t (id,a) values (141,50);
+insert into t (id,a) values (141,51);
+insert into t (id,a) values (141,52);
+insert into t (id,a) values (141,53);
+insert into t (id,a) values (141,54);
+insert into t (id,a) values (141,55);
+insert into t (id,a) values (141,56);
+insert into t (id,a) values (141,57);
+insert into t (id,a) values (141,58);
+insert into t (id,a) values (141,59);
+insert into t (id,a) values (141,60);
+insert into t (id,a) values (141,61);
+insert into t (id,a) values (141,62);
+insert into t (id,a) values (141,63);
+insert into t (id,a) values (141,64);
+insert into t (id,a) values (141,65);
+insert into t (id,a) values (141,66);
+insert into t (id,a) values (141,67);
+insert into t (id,a) values (141,68);
+insert into t (id,a) values (141,69);
+insert into t (id,a) values (141,70);
+insert into t (id,a) values (141,71);
+insert into t (id,a) values (141,72);
+insert into t (id,a) values (141,73);
+insert into t (id,a) values (141,74);
+insert into t (id,a) values (141,75);
+insert into t (id,a) values (141,76);
+insert into t (id,a) values (141,77);
+insert into t (id,a) values (141,78);
+insert into t (id,a) values (141,79);
+insert into t (id,a) values (141,80);
+insert into t (id,a) values (141,81);
+insert into t (id,a) values (141,82);
+insert into t (id,a) values (141,83);
+insert into t (id,a) values (141,84);
+insert into t (id,a) values (141,85);
+insert into t (id,a) values (141,86);
+insert into t (id,a) values (141,87);
+insert into t (id,a) values (141,88);
+insert into t (id,a) values (141,89);
+insert into t (id,a) values (141,90);
+insert into t (id,a) values (141,91);
+insert into t (id,a) values (141,92);
+insert into t (id,a) values (141,93);
+insert into t (id,a) values (141,94);
+insert into t (id,a) values (141,95);
+insert into t (id,a) values (141,96);
+insert into t (id,a) values (141,97);
+insert into t (id,a) values (141,98);
+insert into t (id,a) values (141,99);
+insert into t (id,a) values (142,0);
+insert into t (id,a) values (142,1);
+insert into t (id,a) values (142,2);
+insert into t (id,a) values (142,3);
+insert into t (id,a) values (142,4);
+insert into t (id,a) values (142,5);
+insert into t (id,a) values (142,6);
+insert into t (id,a) values (142,7);
+insert into t (id,a) values (142,8);
+insert into t (id,a) values (142,9);
+insert into t (id,a) values (142,10);
+insert into t (id,a) values (142,11);
+insert into t (id,a) values (142,12);
+insert into t (id,a) values (142,13);
+insert into t (id,a) values (142,14);
+insert into t (id,a) values (142,15);
+insert into t (id,a) values (142,16);
+insert into t (id,a) values (142,17);
+insert into t (id,a) values (142,18);
+insert into t (id,a) values (142,19);
+insert into t (id,a) values (142,20);
+insert into t (id,a) values (142,21);
+insert into t (id,a) values (142,22);
+insert into t (id,a) values (142,23);
+insert into t (id,a) values (142,24);
+insert into t (id,a) values (142,25);
+insert into t (id,a) values (142,26);
+insert into t (id,a) values (142,27);
+insert into t (id,a) values (142,28);
+insert into t (id,a) values (142,29);
+insert into t (id,a) values (142,30);
+insert into t (id,a) values (142,31);
+insert into t (id,a) values (142,32);
+insert into t (id,a) values (142,33);
+insert into t (id,a) values (142,34);
+insert into t (id,a) values (142,35);
+insert into t (id,a) values (142,36);
+insert into t (id,a) values (142,37);
+insert into t (id,a) values (142,38);
+insert into t (id,a) values (142,39);
+insert into t (id,a) values (142,40);
+insert into t (id,a) values (142,41);
+insert into t (id,a) values (142,42);
+insert into t (id,a) values (142,43);
+insert into t (id,a) values (142,44);
+insert into t (id,a) values (142,45);
+insert into t (id,a) values (142,46);
+insert into t (id,a) values (142,47);
+insert into t (id,a) values (142,48);
+insert into t (id,a) values (142,49);
+insert into t (id,a) values (142,50);
+insert into t (id,a) values (142,51);
+insert into t (id,a) values (142,52);
+insert into t (id,a) values (142,53);
+insert into t (id,a) values (142,54);
+insert into t (id,a) values (142,55);
+insert into t (id,a) values (142,56);
+insert into t (id,a) values (142,57);
+insert into t (id,a) values (142,58);
+insert into t (id,a) values (142,59);
+insert into t (id,a) values (142,60);
+insert into t (id,a) values (142,61);
+insert into t (id,a) values (142,62);
+insert into t (id,a) values (142,63);
+insert into t (id,a) values (142,64);
+insert into t (id,a) values (142,65);
+insert into t (id,a) values (142,66);
+insert into t (id,a) values (142,67);
+insert into t (id,a) values (142,68);
+insert into t (id,a) values (142,69);
+insert into t (id,a) values (142,70);
+insert into t (id,a) values (142,71);
+insert into t (id,a) values (142,72);
+insert into t (id,a) values (142,73);
+insert into t (id,a) values (142,74);
+insert into t (id,a) values (142,75);
+insert into t (id,a) values (142,76);
+insert into t (id,a) values (142,77);
+insert into t (id,a) values (142,78);
+insert into t (id,a) values (142,79);
+insert into t (id,a) values (142,80);
+insert into t (id,a) values (142,81);
+insert into t (id,a) values (142,82);
+insert into t (id,a) values (142,83);
+insert into t (id,a) values (142,84);
+insert into t (id,a) values (142,85);
+insert into t (id,a) values (142,86);
+insert into t (id,a) values (142,87);
+insert into t (id,a) values (142,88);
+insert into t (id,a) values (142,89);
+insert into t (id,a) values (142,90);
+insert into t (id,a) values (142,91);
+insert into t (id,a) values (142,92);
+insert into t (id,a) values (142,93);
+insert into t (id,a) values (142,94);
+insert into t (id,a) values (142,95);
+insert into t (id,a) values (142,96);
+insert into t (id,a) values (142,97);
+insert into t (id,a) values (142,98);
+insert into t (id,a) values (142,99);
+insert into t (id,a) values (143,0);
+insert into t (id,a) values (143,1);
+insert into t (id,a) values (143,2);
+insert into t (id,a) values (143,3);
+insert into t (id,a) values (143,4);
+insert into t (id,a) values (143,5);
+insert into t (id,a) values (143,6);
+insert into t (id,a) values (143,7);
+insert into t (id,a) values (143,8);
+insert into t (id,a) values (143,9);
+insert into t (id,a) values (143,10);
+insert into t (id,a) values (143,11);
+insert into t (id,a) values (143,12);
+insert into t (id,a) values (143,13);
+insert into t (id,a) values (143,14);
+insert into t (id,a) values (143,15);
+insert into t (id,a) values (143,16);
+insert into t (id,a) values (143,17);
+insert into t (id,a) values (143,18);
+insert into t (id,a) values (143,19);
+insert into t (id,a) values (143,20);
+insert into t (id,a) values (143,21);
+insert into t (id,a) values (143,22);
+insert into t (id,a) values (143,23);
+insert into t (id,a) values (143,24);
+insert into t (id,a) values (143,25);
+insert into t (id,a) values (143,26);
+insert into t (id,a) values (143,27);
+insert into t (id,a) values (143,28);
+insert into t (id,a) values (143,29);
+insert into t (id,a) values (143,30);
+insert into t (id,a) values (143,31);
+insert into t (id,a) values (143,32);
+insert into t (id,a) values (143,33);
+insert into t (id,a) values (143,34);
+insert into t (id,a) values (143,35);
+insert into t (id,a) values (143,36);
+insert into t (id,a) values (143,37);
+insert into t (id,a) values (143,38);
+insert into t (id,a) values (143,39);
+insert into t (id,a) values (143,40);
+insert into t (id,a) values (143,41);
+insert into t (id,a) values (143,42);
+insert into t (id,a) values (143,43);
+insert into t (id,a) values (143,44);
+insert into t (id,a) values (143,45);
+insert into t (id,a) values (143,46);
+insert into t (id,a) values (143,47);
+insert into t (id,a) values (143,48);
+insert into t (id,a) values (143,49);
+insert into t (id,a) values (143,50);
+insert into t (id,a) values (143,51);
+insert into t (id,a) values (143,52);
+insert into t (id,a) values (143,53);
+insert into t (id,a) values (143,54);
+insert into t (id,a) values (143,55);
+insert into t (id,a) values (143,56);
+insert into t (id,a) values (143,57);
+insert into t (id,a) values (143,58);
+insert into t (id,a) values (143,59);
+insert into t (id,a) values (143,60);
+insert into t (id,a) values (143,61);
+insert into t (id,a) values (143,62);
+insert into t (id,a) values (143,63);
+insert into t (id,a) values (143,64);
+insert into t (id,a) values (143,65);
+insert into t (id,a) values (143,66);
+insert into t (id,a) values (143,67);
+insert into t (id,a) values (143,68);
+insert into t (id,a) values (143,69);
+insert into t (id,a) values (143,70);
+insert into t (id,a) values (143,71);
+insert into t (id,a) values (143,72);
+insert into t (id,a) values (143,73);
+insert into t (id,a) values (143,74);
+insert into t (id,a) values (143,75);
+insert into t (id,a) values (143,76);
+insert into t (id,a) values (143,77);
+insert into t (id,a) values (143,78);
+insert into t (id,a) values (143,79);
+insert into t (id,a) values (143,80);
+insert into t (id,a) values (143,81);
+insert into t (id,a) values (143,82);
+insert into t (id,a) values (143,83);
+insert into t (id,a) values (143,84);
+insert into t (id,a) values (143,85);
+insert into t (id,a) values (143,86);
+insert into t (id,a) values (143,87);
+insert into t (id,a) values (143,88);
+insert into t (id,a) values (143,89);
+insert into t (id,a) values (143,90);
+insert into t (id,a) values (143,91);
+insert into t (id,a) values (143,92);
+insert into t (id,a) values (143,93);
+insert into t (id,a) values (143,94);
+insert into t (id,a) values (143,95);
+insert into t (id,a) values (143,96);
+insert into t (id,a) values (143,97);
+insert into t (id,a) values (143,98);
+insert into t (id,a) values (143,99);
+insert into t (id,a) values (144,0);
+insert into t (id,a) values (144,1);
+insert into t (id,a) values (144,2);
+insert into t (id,a) values (144,3);
+insert into t (id,a) values (144,4);
+insert into t (id,a) values (144,5);
+insert into t (id,a) values (144,6);
+insert into t (id,a) values (144,7);
+insert into t (id,a) values (144,8);
+insert into t (id,a) values (144,9);
+insert into t (id,a) values (144,10);
+insert into t (id,a) values (144,11);
+insert into t (id,a) values (144,12);
+insert into t (id,a) values (144,13);
+insert into t (id,a) values (144,14);
+insert into t (id,a) values (144,15);
+insert into t (id,a) values (144,16);
+insert into t (id,a) values (144,17);
+insert into t (id,a) values (144,18);
+insert into t (id,a) values (144,19);
+insert into t (id,a) values (144,20);
+insert into t (id,a) values (144,21);
+insert into t (id,a) values (144,22);
+insert into t (id,a) values (144,23);
+insert into t (id,a) values (144,24);
+insert into t (id,a) values (144,25);
+insert into t (id,a) values (144,26);
+insert into t (id,a) values (144,27);
+insert into t (id,a) values (144,28);
+insert into t (id,a) values (144,29);
+insert into t (id,a) values (144,30);
+insert into t (id,a) values (144,31);
+insert into t (id,a) values (144,32);
+insert into t (id,a) values (144,33);
+insert into t (id,a) values (144,34);
+insert into t (id,a) values (144,35);
+insert into t (id,a) values (144,36);
+insert into t (id,a) values (144,37);
+insert into t (id,a) values (144,38);
+insert into t (id,a) values (144,39);
+insert into t (id,a) values (144,40);
+insert into t (id,a) values (144,41);
+insert into t (id,a) values (144,42);
+insert into t (id,a) values (144,43);
+insert into t (id,a) values (144,44);
+insert into t (id,a) values (144,45);
+insert into t (id,a) values (144,46);
+insert into t (id,a) values (144,47);
+insert into t (id,a) values (144,48);
+insert into t (id,a) values (144,49);
+insert into t (id,a) values (144,50);
+insert into t (id,a) values (144,51);
+insert into t (id,a) values (144,52);
+insert into t (id,a) values (144,53);
+insert into t (id,a) values (144,54);
+insert into t (id,a) values (144,55);
+insert into t (id,a) values (144,56);
+insert into t (id,a) values (144,57);
+insert into t (id,a) values (144,58);
+insert into t (id,a) values (144,59);
+insert into t (id,a) values (144,60);
+insert into t (id,a) values (144,61);
+insert into t (id,a) values (144,62);
+insert into t (id,a) values (144,63);
+insert into t (id,a) values (144,64);
+insert into t (id,a) values (144,65);
+insert into t (id,a) values (144,66);
+insert into t (id,a) values (144,67);
+insert into t (id,a) values (144,68);
+insert into t (id,a) values (144,69);
+insert into t (id,a) values (144,70);
+insert into t (id,a) values (144,71);
+insert into t (id,a) values (144,72);
+insert into t (id,a) values (144,73);
+insert into t (id,a) values (144,74);
+insert into t (id,a) values (144,75);
+insert into t (id,a) values (144,76);
+insert into t (id,a) values (144,77);
+insert into t (id,a) values (144,78);
+insert into t (id,a) values (144,79);
+insert into t (id,a) values (144,80);
+insert into t (id,a) values (144,81);
+insert into t (id,a) values (144,82);
+insert into t (id,a) values (144,83);
+insert into t (id,a) values (144,84);
+insert into t (id,a) values (144,85);
+insert into t (id,a) values (144,86);
+insert into t (id,a) values (144,87);
+insert into t (id,a) values (144,88);
+insert into t (id,a) values (144,89);
+insert into t (id,a) values (144,90);
+insert into t (id,a) values (144,91);
+insert into t (id,a) values (144,92);
+insert into t (id,a) values (144,93);
+insert into t (id,a) values (144,94);
+insert into t (id,a) values (144,95);
+insert into t (id,a) values (144,96);
+insert into t (id,a) values (144,97);
+insert into t (id,a) values (144,98);
+insert into t (id,a) values (144,99);
+insert into t (id,a) values (145,0);
+insert into t (id,a) values (145,1);
+insert into t (id,a) values (145,2);
+insert into t (id,a) values (145,3);
+insert into t (id,a) values (145,4);
+insert into t (id,a) values (145,5);
+insert into t (id,a) values (145,6);
+insert into t (id,a) values (145,7);
+insert into t (id,a) values (145,8);
+insert into t (id,a) values (145,9);
+insert into t (id,a) values (145,10);
+insert into t (id,a) values (145,11);
+insert into t (id,a) values (145,12);
+insert into t (id,a) values (145,13);
+insert into t (id,a) values (145,14);
+insert into t (id,a) values (145,15);
+insert into t (id,a) values (145,16);
+insert into t (id,a) values (145,17);
+insert into t (id,a) values (145,18);
+insert into t (id,a) values (145,19);
+insert into t (id,a) values (145,20);
+insert into t (id,a) values (145,21);
+insert into t (id,a) values (145,22);
+insert into t (id,a) values (145,23);
+insert into t (id,a) values (145,24);
+insert into t (id,a) values (145,25);
+insert into t (id,a) values (145,26);
+insert into t (id,a) values (145,27);
+insert into t (id,a) values (145,28);
+insert into t (id,a) values (145,29);
+insert into t (id,a) values (145,30);
+insert into t (id,a) values (145,31);
+insert into t (id,a) values (145,32);
+insert into t (id,a) values (145,33);
+insert into t (id,a) values (145,34);
+insert into t (id,a) values (145,35);
+insert into t (id,a) values (145,36);
+insert into t (id,a) values (145,37);
+insert into t (id,a) values (145,38);
+insert into t (id,a) values (145,39);
+insert into t (id,a) values (145,40);
+insert into t (id,a) values (145,41);
+insert into t (id,a) values (145,42);
+insert into t (id,a) values (145,43);
+insert into t (id,a) values (145,44);
+insert into t (id,a) values (145,45);
+insert into t (id,a) values (145,46);
+insert into t (id,a) values (145,47);
+insert into t (id,a) values (145,48);
+insert into t (id,a) values (145,49);
+insert into t (id,a) values (145,50);
+insert into t (id,a) values (145,51);
+insert into t (id,a) values (145,52);
+insert into t (id,a) values (145,53);
+insert into t (id,a) values (145,54);
+insert into t (id,a) values (145,55);
+insert into t (id,a) values (145,56);
+insert into t (id,a) values (145,57);
+insert into t (id,a) values (145,58);
+insert into t (id,a) values (145,59);
+insert into t (id,a) values (145,60);
+insert into t (id,a) values (145,61);
+insert into t (id,a) values (145,62);
+insert into t (id,a) values (145,63);
+insert into t (id,a) values (145,64);
+insert into t (id,a) values (145,65);
+insert into t (id,a) values (145,66);
+insert into t (id,a) values (145,67);
+insert into t (id,a) values (145,68);
+insert into t (id,a) values (145,69);
+insert into t (id,a) values (145,70);
+insert into t (id,a) values (145,71);
+insert into t (id,a) values (145,72);
+insert into t (id,a) values (145,73);
+insert into t (id,a) values (145,74);
+insert into t (id,a) values (145,75);
+insert into t (id,a) values (145,76);
+insert into t (id,a) values (145,77);
+insert into t (id,a) values (145,78);
+insert into t (id,a) values (145,79);
+insert into t (id,a) values (145,80);
+insert into t (id,a) values (145,81);
+insert into t (id,a) values (145,82);
+insert into t (id,a) values (145,83);
+insert into t (id,a) values (145,84);
+insert into t (id,a) values (145,85);
+insert into t (id,a) values (145,86);
+insert into t (id,a) values (145,87);
+insert into t (id,a) values (145,88);
+insert into t (id,a) values (145,89);
+insert into t (id,a) values (145,90);
+insert into t (id,a) values (145,91);
+insert into t (id,a) values (145,92);
+insert into t (id,a) values (145,93);
+insert into t (id,a) values (145,94);
+insert into t (id,a) values (145,95);
+insert into t (id,a) values (145,96);
+insert into t (id,a) values (145,97);
+insert into t (id,a) values (145,98);
+insert into t (id,a) values (145,99);
+insert into t (id,a) values (146,0);
+insert into t (id,a) values (146,1);
+insert into t (id,a) values (146,2);
+insert into t (id,a) values (146,3);
+insert into t (id,a) values (146,4);
+insert into t (id,a) values (146,5);
+insert into t (id,a) values (146,6);
+insert into t (id,a) values (146,7);
+insert into t (id,a) values (146,8);
+insert into t (id,a) values (146,9);
+insert into t (id,a) values (146,10);
+insert into t (id,a) values (146,11);
+insert into t (id,a) values (146,12);
+insert into t (id,a) values (146,13);
+insert into t (id,a) values (146,14);
+insert into t (id,a) values (146,15);
+insert into t (id,a) values (146,16);
+insert into t (id,a) values (146,17);
+insert into t (id,a) values (146,18);
+insert into t (id,a) values (146,19);
+insert into t (id,a) values (146,20);
+insert into t (id,a) values (146,21);
+insert into t (id,a) values (146,22);
+insert into t (id,a) values (146,23);
+insert into t (id,a) values (146,24);
+insert into t (id,a) values (146,25);
+insert into t (id,a) values (146,26);
+insert into t (id,a) values (146,27);
+insert into t (id,a) values (146,28);
+insert into t (id,a) values (146,29);
+insert into t (id,a) values (146,30);
+insert into t (id,a) values (146,31);
+insert into t (id,a) values (146,32);
+insert into t (id,a) values (146,33);
+insert into t (id,a) values (146,34);
+insert into t (id,a) values (146,35);
+insert into t (id,a) values (146,36);
+insert into t (id,a) values (146,37);
+insert into t (id,a) values (146,38);
+insert into t (id,a) values (146,39);
+insert into t (id,a) values (146,40);
+insert into t (id,a) values (146,41);
+insert into t (id,a) values (146,42);
+insert into t (id,a) values (146,43);
+insert into t (id,a) values (146,44);
+insert into t (id,a) values (146,45);
+insert into t (id,a) values (146,46);
+insert into t (id,a) values (146,47);
+insert into t (id,a) values (146,48);
+insert into t (id,a) values (146,49);
+insert into t (id,a) values (146,50);
+insert into t (id,a) values (146,51);
+insert into t (id,a) values (146,52);
+insert into t (id,a) values (146,53);
+insert into t (id,a) values (146,54);
+insert into t (id,a) values (146,55);
+insert into t (id,a) values (146,56);
+insert into t (id,a) values (146,57);
+insert into t (id,a) values (146,58);
+insert into t (id,a) values (146,59);
+insert into t (id,a) values (146,60);
+insert into t (id,a) values (146,61);
+insert into t (id,a) values (146,62);
+insert into t (id,a) values (146,63);
+insert into t (id,a) values (146,64);
+insert into t (id,a) values (146,65);
+insert into t (id,a) values (146,66);
+insert into t (id,a) values (146,67);
+insert into t (id,a) values (146,68);
+insert into t (id,a) values (146,69);
+insert into t (id,a) values (146,70);
+insert into t (id,a) values (146,71);
+insert into t (id,a) values (146,72);
+insert into t (id,a) values (146,73);
+insert into t (id,a) values (146,74);
+insert into t (id,a) values (146,75);
+insert into t (id,a) values (146,76);
+insert into t (id,a) values (146,77);
+insert into t (id,a) values (146,78);
+insert into t (id,a) values (146,79);
+insert into t (id,a) values (146,80);
+insert into t (id,a) values (146,81);
+insert into t (id,a) values (146,82);
+insert into t (id,a) values (146,83);
+insert into t (id,a) values (146,84);
+insert into t (id,a) values (146,85);
+insert into t (id,a) values (146,86);
+insert into t (id,a) values (146,87);
+insert into t (id,a) values (146,88);
+insert into t (id,a) values (146,89);
+insert into t (id,a) values (146,90);
+insert into t (id,a) values (146,91);
+insert into t (id,a) values (146,92);
+insert into t (id,a) values (146,93);
+insert into t (id,a) values (146,94);
+insert into t (id,a) values (146,95);
+insert into t (id,a) values (146,96);
+insert into t (id,a) values (146,97);
+insert into t (id,a) values (146,98);
+insert into t (id,a) values (146,99);
+insert into t (id,a) values (147,0);
+insert into t (id,a) values (147,1);
+insert into t (id,a) values (147,2);
+insert into t (id,a) values (147,3);
+insert into t (id,a) values (147,4);
+insert into t (id,a) values (147,5);
+insert into t (id,a) values (147,6);
+insert into t (id,a) values (147,7);
+insert into t (id,a) values (147,8);
+insert into t (id,a) values (147,9);
+insert into t (id,a) values (147,10);
+insert into t (id,a) values (147,11);
+insert into t (id,a) values (147,12);
+insert into t (id,a) values (147,13);
+insert into t (id,a) values (147,14);
+insert into t (id,a) values (147,15);
+insert into t (id,a) values (147,16);
+insert into t (id,a) values (147,17);
+insert into t (id,a) values (147,18);
+insert into t (id,a) values (147,19);
+insert into t (id,a) values (147,20);
+insert into t (id,a) values (147,21);
+insert into t (id,a) values (147,22);
+insert into t (id,a) values (147,23);
+insert into t (id,a) values (147,24);
+insert into t (id,a) values (147,25);
+insert into t (id,a) values (147,26);
+insert into t (id,a) values (147,27);
+insert into t (id,a) values (147,28);
+insert into t (id,a) values (147,29);
+insert into t (id,a) values (147,30);
+insert into t (id,a) values (147,31);
+insert into t (id,a) values (147,32);
+insert into t (id,a) values (147,33);
+insert into t (id,a) values (147,34);
+insert into t (id,a) values (147,35);
+insert into t (id,a) values (147,36);
+insert into t (id,a) values (147,37);
+insert into t (id,a) values (147,38);
+insert into t (id,a) values (147,39);
+insert into t (id,a) values (147,40);
+insert into t (id,a) values (147,41);
+insert into t (id,a) values (147,42);
+insert into t (id,a) values (147,43);
+insert into t (id,a) values (147,44);
+insert into t (id,a) values (147,45);
+insert into t (id,a) values (147,46);
+insert into t (id,a) values (147,47);
+insert into t (id,a) values (147,48);
+insert into t (id,a) values (147,49);
+insert into t (id,a) values (147,50);
+insert into t (id,a) values (147,51);
+insert into t (id,a) values (147,52);
+insert into t (id,a) values (147,53);
+insert into t (id,a) values (147,54);
+insert into t (id,a) values (147,55);
+insert into t (id,a) values (147,56);
+insert into t (id,a) values (147,57);
+insert into t (id,a) values (147,58);
+insert into t (id,a) values (147,59);
+insert into t (id,a) values (147,60);
+insert into t (id,a) values (147,61);
+insert into t (id,a) values (147,62);
+insert into t (id,a) values (147,63);
+insert into t (id,a) values (147,64);
+insert into t (id,a) values (147,65);
+insert into t (id,a) values (147,66);
+insert into t (id,a) values (147,67);
+insert into t (id,a) values (147,68);
+insert into t (id,a) values (147,69);
+insert into t (id,a) values (147,70);
+insert into t (id,a) values (147,71);
+insert into t (id,a) values (147,72);
+insert into t (id,a) values (147,73);
+insert into t (id,a) values (147,74);
+insert into t (id,a) values (147,75);
+insert into t (id,a) values (147,76);
+insert into t (id,a) values (147,77);
+insert into t (id,a) values (147,78);
+insert into t (id,a) values (147,79);
+insert into t (id,a) values (147,80);
+insert into t (id,a) values (147,81);
+insert into t (id,a) values (147,82);
+insert into t (id,a) values (147,83);
+insert into t (id,a) values (147,84);
+insert into t (id,a) values (147,85);
+insert into t (id,a) values (147,86);
+insert into t (id,a) values (147,87);
+insert into t (id,a) values (147,88);
+insert into t (id,a) values (147,89);
+insert into t (id,a) values (147,90);
+insert into t (id,a) values (147,91);
+insert into t (id,a) values (147,92);
+insert into t (id,a) values (147,93);
+insert into t (id,a) values (147,94);
+insert into t (id,a) values (147,95);
+insert into t (id,a) values (147,96);
+insert into t (id,a) values (147,97);
+insert into t (id,a) values (147,98);
+insert into t (id,a) values (147,99);
+insert into t (id,a) values (148,0);
+insert into t (id,a) values (148,1);
+insert into t (id,a) values (148,2);
+insert into t (id,a) values (148,3);
+insert into t (id,a) values (148,4);
+insert into t (id,a) values (148,5);
+insert into t (id,a) values (148,6);
+insert into t (id,a) values (148,7);
+insert into t (id,a) values (148,8);
+insert into t (id,a) values (148,9);
+insert into t (id,a) values (148,10);
+insert into t (id,a) values (148,11);
+insert into t (id,a) values (148,12);
+insert into t (id,a) values (148,13);
+insert into t (id,a) values (148,14);
+insert into t (id,a) values (148,15);
+insert into t (id,a) values (148,16);
+insert into t (id,a) values (148,17);
+insert into t (id,a) values (148,18);
+insert into t (id,a) values (148,19);
+insert into t (id,a) values (148,20);
+insert into t (id,a) values (148,21);
+insert into t (id,a) values (148,22);
+insert into t (id,a) values (148,23);
+insert into t (id,a) values (148,24);
+insert into t (id,a) values (148,25);
+insert into t (id,a) values (148,26);
+insert into t (id,a) values (148,27);
+insert into t (id,a) values (148,28);
+insert into t (id,a) values (148,29);
+insert into t (id,a) values (148,30);
+insert into t (id,a) values (148,31);
+insert into t (id,a) values (148,32);
+insert into t (id,a) values (148,33);
+insert into t (id,a) values (148,34);
+insert into t (id,a) values (148,35);
+insert into t (id,a) values (148,36);
+insert into t (id,a) values (148,37);
+insert into t (id,a) values (148,38);
+insert into t (id,a) values (148,39);
+insert into t (id,a) values (148,40);
+insert into t (id,a) values (148,41);
+insert into t (id,a) values (148,42);
+insert into t (id,a) values (148,43);
+insert into t (id,a) values (148,44);
+insert into t (id,a) values (148,45);
+insert into t (id,a) values (148,46);
+insert into t (id,a) values (148,47);
+insert into t (id,a) values (148,48);
+insert into t (id,a) values (148,49);
+insert into t (id,a) values (148,50);
+insert into t (id,a) values (148,51);
+insert into t (id,a) values (148,52);
+insert into t (id,a) values (148,53);
+insert into t (id,a) values (148,54);
+insert into t (id,a) values (148,55);
+insert into t (id,a) values (148,56);
+insert into t (id,a) values (148,57);
+insert into t (id,a) values (148,58);
+insert into t (id,a) values (148,59);
+insert into t (id,a) values (148,60);
+insert into t (id,a) values (148,61);
+insert into t (id,a) values (148,62);
+insert into t (id,a) values (148,63);
+insert into t (id,a) values (148,64);
+insert into t (id,a) values (148,65);
+insert into t (id,a) values (148,66);
+insert into t (id,a) values (148,67);
+insert into t (id,a) values (148,68);
+insert into t (id,a) values (148,69);
+insert into t (id,a) values (148,70);
+insert into t (id,a) values (148,71);
+insert into t (id,a) values (148,72);
+insert into t (id,a) values (148,73);
+insert into t (id,a) values (148,74);
+insert into t (id,a) values (148,75);
+insert into t (id,a) values (148,76);
+insert into t (id,a) values (148,77);
+insert into t (id,a) values (148,78);
+insert into t (id,a) values (148,79);
+insert into t (id,a) values (148,80);
+insert into t (id,a) values (148,81);
+insert into t (id,a) values (148,82);
+insert into t (id,a) values (148,83);
+insert into t (id,a) values (148,84);
+insert into t (id,a) values (148,85);
+insert into t (id,a) values (148,86);
+insert into t (id,a) values (148,87);
+insert into t (id,a) values (148,88);
+insert into t (id,a) values (148,89);
+insert into t (id,a) values (148,90);
+insert into t (id,a) values (148,91);
+insert into t (id,a) values (148,92);
+insert into t (id,a) values (148,93);
+insert into t (id,a) values (148,94);
+insert into t (id,a) values (148,95);
+insert into t (id,a) values (148,96);
+insert into t (id,a) values (148,97);
+insert into t (id,a) values (148,98);
+insert into t (id,a) values (148,99);
+insert into t (id,a) values (149,0);
+insert into t (id,a) values (149,1);
+insert into t (id,a) values (149,2);
+insert into t (id,a) values (149,3);
+insert into t (id,a) values (149,4);
+insert into t (id,a) values (149,5);
+insert into t (id,a) values (149,6);
+insert into t (id,a) values (149,7);
+insert into t (id,a) values (149,8);
+insert into t (id,a) values (149,9);
+insert into t (id,a) values (149,10);
+insert into t (id,a) values (149,11);
+insert into t (id,a) values (149,12);
+insert into t (id,a) values (149,13);
+insert into t (id,a) values (149,14);
+insert into t (id,a) values (149,15);
+insert into t (id,a) values (149,16);
+insert into t (id,a) values (149,17);
+insert into t (id,a) values (149,18);
+insert into t (id,a) values (149,19);
+insert into t (id,a) values (149,20);
+insert into t (id,a) values (149,21);
+insert into t (id,a) values (149,22);
+insert into t (id,a) values (149,23);
+insert into t (id,a) values (149,24);
+insert into t (id,a) values (149,25);
+insert into t (id,a) values (149,26);
+insert into t (id,a) values (149,27);
+insert into t (id,a) values (149,28);
+insert into t (id,a) values (149,29);
+insert into t (id,a) values (149,30);
+insert into t (id,a) values (149,31);
+insert into t (id,a) values (149,32);
+insert into t (id,a) values (149,33);
+insert into t (id,a) values (149,34);
+insert into t (id,a) values (149,35);
+insert into t (id,a) values (149,36);
+insert into t (id,a) values (149,37);
+insert into t (id,a) values (149,38);
+insert into t (id,a) values (149,39);
+insert into t (id,a) values (149,40);
+insert into t (id,a) values (149,41);
+insert into t (id,a) values (149,42);
+insert into t (id,a) values (149,43);
+insert into t (id,a) values (149,44);
+insert into t (id,a) values (149,45);
+insert into t (id,a) values (149,46);
+insert into t (id,a) values (149,47);
+insert into t (id,a) values (149,48);
+insert into t (id,a) values (149,49);
+insert into t (id,a) values (149,50);
+insert into t (id,a) values (149,51);
+insert into t (id,a) values (149,52);
+insert into t (id,a) values (149,53);
+insert into t (id,a) values (149,54);
+insert into t (id,a) values (149,55);
+insert into t (id,a) values (149,56);
+insert into t (id,a) values (149,57);
+insert into t (id,a) values (149,58);
+insert into t (id,a) values (149,59);
+insert into t (id,a) values (149,60);
+insert into t (id,a) values (149,61);
+insert into t (id,a) values (149,62);
+insert into t (id,a) values (149,63);
+insert into t (id,a) values (149,64);
+insert into t (id,a) values (149,65);
+insert into t (id,a) values (149,66);
+insert into t (id,a) values (149,67);
+insert into t (id,a) values (149,68);
+insert into t (id,a) values (149,69);
+insert into t (id,a) values (149,70);
+insert into t (id,a) values (149,71);
+insert into t (id,a) values (149,72);
+insert into t (id,a) values (149,73);
+insert into t (id,a) values (149,74);
+insert into t (id,a) values (149,75);
+insert into t (id,a) values (149,76);
+insert into t (id,a) values (149,77);
+insert into t (id,a) values (149,78);
+insert into t (id,a) values (149,79);
+insert into t (id,a) values (149,80);
+insert into t (id,a) values (149,81);
+insert into t (id,a) values (149,82);
+insert into t (id,a) values (149,83);
+insert into t (id,a) values (149,84);
+insert into t (id,a) values (149,85);
+insert into t (id,a) values (149,86);
+insert into t (id,a) values (149,87);
+insert into t (id,a) values (149,88);
+insert into t (id,a) values (149,89);
+insert into t (id,a) values (149,90);
+insert into t (id,a) values (149,91);
+insert into t (id,a) values (149,92);
+insert into t (id,a) values (149,93);
+insert into t (id,a) values (149,94);
+insert into t (id,a) values (149,95);
+insert into t (id,a) values (149,96);
+insert into t (id,a) values (149,97);
+insert into t (id,a) values (149,98);
+insert into t (id,a) values (149,99);
+insert into t (id,a) values (150,0);
+insert into t (id,a) values (150,1);
+insert into t (id,a) values (150,2);
+insert into t (id,a) values (150,3);
+insert into t (id,a) values (150,4);
+insert into t (id,a) values (150,5);
+insert into t (id,a) values (150,6);
+insert into t (id,a) values (150,7);
+insert into t (id,a) values (150,8);
+insert into t (id,a) values (150,9);
+insert into t (id,a) values (150,10);
+insert into t (id,a) values (150,11);
+insert into t (id,a) values (150,12);
+insert into t (id,a) values (150,13);
+insert into t (id,a) values (150,14);
+insert into t (id,a) values (150,15);
+insert into t (id,a) values (150,16);
+insert into t (id,a) values (150,17);
+insert into t (id,a) values (150,18);
+insert into t (id,a) values (150,19);
+insert into t (id,a) values (150,20);
+insert into t (id,a) values (150,21);
+insert into t (id,a) values (150,22);
+insert into t (id,a) values (150,23);
+insert into t (id,a) values (150,24);
+insert into t (id,a) values (150,25);
+insert into t (id,a) values (150,26);
+insert into t (id,a) values (150,27);
+insert into t (id,a) values (150,28);
+insert into t (id,a) values (150,29);
+insert into t (id,a) values (150,30);
+insert into t (id,a) values (150,31);
+insert into t (id,a) values (150,32);
+insert into t (id,a) values (150,33);
+insert into t (id,a) values (150,34);
+insert into t (id,a) values (150,35);
+insert into t (id,a) values (150,36);
+insert into t (id,a) values (150,37);
+insert into t (id,a) values (150,38);
+insert into t (id,a) values (150,39);
+insert into t (id,a) values (150,40);
+insert into t (id,a) values (150,41);
+insert into t (id,a) values (150,42);
+insert into t (id,a) values (150,43);
+insert into t (id,a) values (150,44);
+insert into t (id,a) values (150,45);
+insert into t (id,a) values (150,46);
+insert into t (id,a) values (150,47);
+insert into t (id,a) values (150,48);
+insert into t (id,a) values (150,49);
+insert into t (id,a) values (150,50);
+insert into t (id,a) values (150,51);
+insert into t (id,a) values (150,52);
+insert into t (id,a) values (150,53);
+insert into t (id,a) values (150,54);
+insert into t (id,a) values (150,55);
+insert into t (id,a) values (150,56);
+insert into t (id,a) values (150,57);
+insert into t (id,a) values (150,58);
+insert into t (id,a) values (150,59);
+insert into t (id,a) values (150,60);
+insert into t (id,a) values (150,61);
+insert into t (id,a) values (150,62);
+insert into t (id,a) values (150,63);
+insert into t (id,a) values (150,64);
+insert into t (id,a) values (150,65);
+insert into t (id,a) values (150,66);
+insert into t (id,a) values (150,67);
+insert into t (id,a) values (150,68);
+insert into t (id,a) values (150,69);
+insert into t (id,a) values (150,70);
+insert into t (id,a) values (150,71);
+insert into t (id,a) values (150,72);
+insert into t (id,a) values (150,73);
+insert into t (id,a) values (150,74);
+insert into t (id,a) values (150,75);
+insert into t (id,a) values (150,76);
+insert into t (id,a) values (150,77);
+insert into t (id,a) values (150,78);
+insert into t (id,a) values (150,79);
+insert into t (id,a) values (150,80);
+insert into t (id,a) values (150,81);
+insert into t (id,a) values (150,82);
+insert into t (id,a) values (150,83);
+insert into t (id,a) values (150,84);
+insert into t (id,a) values (150,85);
+insert into t (id,a) values (150,86);
+insert into t (id,a) values (150,87);
+insert into t (id,a) values (150,88);
+insert into t (id,a) values (150,89);
+insert into t (id,a) values (150,90);
+insert into t (id,a) values (150,91);
+insert into t (id,a) values (150,92);
+insert into t (id,a) values (150,93);
+insert into t (id,a) values (150,94);
+insert into t (id,a) values (150,95);
+insert into t (id,a) values (150,96);
+insert into t (id,a) values (150,97);
+insert into t (id,a) values (150,98);
+insert into t (id,a) values (150,99);
+insert into t (id,a) values (151,0);
+insert into t (id,a) values (151,1);
+insert into t (id,a) values (151,2);
+insert into t (id,a) values (151,3);
+insert into t (id,a) values (151,4);
+insert into t (id,a) values (151,5);
+insert into t (id,a) values (151,6);
+insert into t (id,a) values (151,7);
+insert into t (id,a) values (151,8);
+insert into t (id,a) values (151,9);
+insert into t (id,a) values (151,10);
+insert into t (id,a) values (151,11);
+insert into t (id,a) values (151,12);
+insert into t (id,a) values (151,13);
+insert into t (id,a) values (151,14);
+insert into t (id,a) values (151,15);
+insert into t (id,a) values (151,16);
+insert into t (id,a) values (151,17);
+insert into t (id,a) values (151,18);
+insert into t (id,a) values (151,19);
+insert into t (id,a) values (151,20);
+insert into t (id,a) values (151,21);
+insert into t (id,a) values (151,22);
+insert into t (id,a) values (151,23);
+insert into t (id,a) values (151,24);
+insert into t (id,a) values (151,25);
+insert into t (id,a) values (151,26);
+insert into t (id,a) values (151,27);
+insert into t (id,a) values (151,28);
+insert into t (id,a) values (151,29);
+insert into t (id,a) values (151,30);
+insert into t (id,a) values (151,31);
+insert into t (id,a) values (151,32);
+insert into t (id,a) values (151,33);
+insert into t (id,a) values (151,34);
+insert into t (id,a) values (151,35);
+insert into t (id,a) values (151,36);
+insert into t (id,a) values (151,37);
+insert into t (id,a) values (151,38);
+insert into t (id,a) values (151,39);
+insert into t (id,a) values (151,40);
+insert into t (id,a) values (151,41);
+insert into t (id,a) values (151,42);
+insert into t (id,a) values (151,43);
+insert into t (id,a) values (151,44);
+insert into t (id,a) values (151,45);
+insert into t (id,a) values (151,46);
+insert into t (id,a) values (151,47);
+insert into t (id,a) values (151,48);
+insert into t (id,a) values (151,49);
+insert into t (id,a) values (151,50);
+insert into t (id,a) values (151,51);
+insert into t (id,a) values (151,52);
+insert into t (id,a) values (151,53);
+insert into t (id,a) values (151,54);
+insert into t (id,a) values (151,55);
+insert into t (id,a) values (151,56);
+insert into t (id,a) values (151,57);
+insert into t (id,a) values (151,58);
+insert into t (id,a) values (151,59);
+insert into t (id,a) values (151,60);
+insert into t (id,a) values (151,61);
+insert into t (id,a) values (151,62);
+insert into t (id,a) values (151,63);
+insert into t (id,a) values (151,64);
+insert into t (id,a) values (151,65);
+insert into t (id,a) values (151,66);
+insert into t (id,a) values (151,67);
+insert into t (id,a) values (151,68);
+insert into t (id,a) values (151,69);
+insert into t (id,a) values (151,70);
+insert into t (id,a) values (151,71);
+insert into t (id,a) values (151,72);
+insert into t (id,a) values (151,73);
+insert into t (id,a) values (151,74);
+insert into t (id,a) values (151,75);
+insert into t (id,a) values (151,76);
+insert into t (id,a) values (151,77);
+insert into t (id,a) values (151,78);
+insert into t (id,a) values (151,79);
+insert into t (id,a) values (151,80);
+insert into t (id,a) values (151,81);
+insert into t (id,a) values (151,82);
+insert into t (id,a) values (151,83);
+insert into t (id,a) values (151,84);
+insert into t (id,a) values (151,85);
+insert into t (id,a) values (151,86);
+insert into t (id,a) values (151,87);
+insert into t (id,a) values (151,88);
+insert into t (id,a) values (151,89);
+insert into t (id,a) values (151,90);
+insert into t (id,a) values (151,91);
+insert into t (id,a) values (151,92);
+insert into t (id,a) values (151,93);
+insert into t (id,a) values (151,94);
+insert into t (id,a) values (151,95);
+insert into t (id,a) values (151,96);
+insert into t (id,a) values (151,97);
+insert into t (id,a) values (151,98);
+insert into t (id,a) values (151,99);
+insert into t (id,a) values (152,0);
+insert into t (id,a) values (152,1);
+insert into t (id,a) values (152,2);
+insert into t (id,a) values (152,3);
+insert into t (id,a) values (152,4);
+insert into t (id,a) values (152,5);
+insert into t (id,a) values (152,6);
+insert into t (id,a) values (152,7);
+insert into t (id,a) values (152,8);
+insert into t (id,a) values (152,9);
+insert into t (id,a) values (152,10);
+insert into t (id,a) values (152,11);
+insert into t (id,a) values (152,12);
+insert into t (id,a) values (152,13);
+insert into t (id,a) values (152,14);
+insert into t (id,a) values (152,15);
+insert into t (id,a) values (152,16);
+insert into t (id,a) values (152,17);
+insert into t (id,a) values (152,18);
+insert into t (id,a) values (152,19);
+insert into t (id,a) values (152,20);
+insert into t (id,a) values (152,21);
+insert into t (id,a) values (152,22);
+insert into t (id,a) values (152,23);
+insert into t (id,a) values (152,24);
+insert into t (id,a) values (152,25);
+insert into t (id,a) values (152,26);
+insert into t (id,a) values (152,27);
+insert into t (id,a) values (152,28);
+insert into t (id,a) values (152,29);
+insert into t (id,a) values (152,30);
+insert into t (id,a) values (152,31);
+insert into t (id,a) values (152,32);
+insert into t (id,a) values (152,33);
+insert into t (id,a) values (152,34);
+insert into t (id,a) values (152,35);
+insert into t (id,a) values (152,36);
+insert into t (id,a) values (152,37);
+insert into t (id,a) values (152,38);
+insert into t (id,a) values (152,39);
+insert into t (id,a) values (152,40);
+insert into t (id,a) values (152,41);
+insert into t (id,a) values (152,42);
+insert into t (id,a) values (152,43);
+insert into t (id,a) values (152,44);
+insert into t (id,a) values (152,45);
+insert into t (id,a) values (152,46);
+insert into t (id,a) values (152,47);
+insert into t (id,a) values (152,48);
+insert into t (id,a) values (152,49);
+insert into t (id,a) values (152,50);
+insert into t (id,a) values (152,51);
+insert into t (id,a) values (152,52);
+insert into t (id,a) values (152,53);
+insert into t (id,a) values (152,54);
+insert into t (id,a) values (152,55);
+insert into t (id,a) values (152,56);
+insert into t (id,a) values (152,57);
+insert into t (id,a) values (152,58);
+insert into t (id,a) values (152,59);
+insert into t (id,a) values (152,60);
+insert into t (id,a) values (152,61);
+insert into t (id,a) values (152,62);
+insert into t (id,a) values (152,63);
+insert into t (id,a) values (152,64);
+insert into t (id,a) values (152,65);
+insert into t (id,a) values (152,66);
+insert into t (id,a) values (152,67);
+insert into t (id,a) values (152,68);
+insert into t (id,a) values (152,69);
+insert into t (id,a) values (152,70);
+insert into t (id,a) values (152,71);
+insert into t (id,a) values (152,72);
+insert into t (id,a) values (152,73);
+insert into t (id,a) values (152,74);
+insert into t (id,a) values (152,75);
+insert into t (id,a) values (152,76);
+insert into t (id,a) values (152,77);
+insert into t (id,a) values (152,78);
+insert into t (id,a) values (152,79);
+insert into t (id,a) values (152,80);
+insert into t (id,a) values (152,81);
+insert into t (id,a) values (152,82);
+insert into t (id,a) values (152,83);
+insert into t (id,a) values (152,84);
+insert into t (id,a) values (152,85);
+insert into t (id,a) values (152,86);
+insert into t (id,a) values (152,87);
+insert into t (id,a) values (152,88);
+insert into t (id,a) values (152,89);
+insert into t (id,a) values (152,90);
+insert into t (id,a) values (152,91);
+insert into t (id,a) values (152,92);
+insert into t (id,a) values (152,93);
+insert into t (id,a) values (152,94);
+insert into t (id,a) values (152,95);
+insert into t (id,a) values (152,96);
+insert into t (id,a) values (152,97);
+insert into t (id,a) values (152,98);
+insert into t (id,a) values (152,99);
+insert into t (id,a) values (153,0);
+insert into t (id,a) values (153,1);
+insert into t (id,a) values (153,2);
+insert into t (id,a) values (153,3);
+insert into t (id,a) values (153,4);
+insert into t (id,a) values (153,5);
+insert into t (id,a) values (153,6);
+insert into t (id,a) values (153,7);
+insert into t (id,a) values (153,8);
+insert into t (id,a) values (153,9);
+insert into t (id,a) values (153,10);
+insert into t (id,a) values (153,11);
+insert into t (id,a) values (153,12);
+insert into t (id,a) values (153,13);
+insert into t (id,a) values (153,14);
+insert into t (id,a) values (153,15);
+insert into t (id,a) values (153,16);
+insert into t (id,a) values (153,17);
+insert into t (id,a) values (153,18);
+insert into t (id,a) values (153,19);
+insert into t (id,a) values (153,20);
+insert into t (id,a) values (153,21);
+insert into t (id,a) values (153,22);
+insert into t (id,a) values (153,23);
+insert into t (id,a) values (153,24);
+insert into t (id,a) values (153,25);
+insert into t (id,a) values (153,26);
+insert into t (id,a) values (153,27);
+insert into t (id,a) values (153,28);
+insert into t (id,a) values (153,29);
+insert into t (id,a) values (153,30);
+insert into t (id,a) values (153,31);
+insert into t (id,a) values (153,32);
+insert into t (id,a) values (153,33);
+insert into t (id,a) values (153,34);
+insert into t (id,a) values (153,35);
+insert into t (id,a) values (153,36);
+insert into t (id,a) values (153,37);
+insert into t (id,a) values (153,38);
+insert into t (id,a) values (153,39);
+insert into t (id,a) values (153,40);
+insert into t (id,a) values (153,41);
+insert into t (id,a) values (153,42);
+insert into t (id,a) values (153,43);
+insert into t (id,a) values (153,44);
+insert into t (id,a) values (153,45);
+insert into t (id,a) values (153,46);
+insert into t (id,a) values (153,47);
+insert into t (id,a) values (153,48);
+insert into t (id,a) values (153,49);
+insert into t (id,a) values (153,50);
+insert into t (id,a) values (153,51);
+insert into t (id,a) values (153,52);
+insert into t (id,a) values (153,53);
+insert into t (id,a) values (153,54);
+insert into t (id,a) values (153,55);
+insert into t (id,a) values (153,56);
+insert into t (id,a) values (153,57);
+insert into t (id,a) values (153,58);
+insert into t (id,a) values (153,59);
+insert into t (id,a) values (153,60);
+insert into t (id,a) values (153,61);
+insert into t (id,a) values (153,62);
+insert into t (id,a) values (153,63);
+insert into t (id,a) values (153,64);
+insert into t (id,a) values (153,65);
+insert into t (id,a) values (153,66);
+insert into t (id,a) values (153,67);
+insert into t (id,a) values (153,68);
+insert into t (id,a) values (153,69);
+insert into t (id,a) values (153,70);
+insert into t (id,a) values (153,71);
+insert into t (id,a) values (153,72);
+insert into t (id,a) values (153,73);
+insert into t (id,a) values (153,74);
+insert into t (id,a) values (153,75);
+insert into t (id,a) values (153,76);
+insert into t (id,a) values (153,77);
+insert into t (id,a) values (153,78);
+insert into t (id,a) values (153,79);
+insert into t (id,a) values (153,80);
+insert into t (id,a) values (153,81);
+insert into t (id,a) values (153,82);
+insert into t (id,a) values (153,83);
+insert into t (id,a) values (153,84);
+insert into t (id,a) values (153,85);
+insert into t (id,a) values (153,86);
+insert into t (id,a) values (153,87);
+insert into t (id,a) values (153,88);
+insert into t (id,a) values (153,89);
+insert into t (id,a) values (153,90);
+insert into t (id,a) values (153,91);
+insert into t (id,a) values (153,92);
+insert into t (id,a) values (153,93);
+insert into t (id,a) values (153,94);
+insert into t (id,a) values (153,95);
+insert into t (id,a) values (153,96);
+insert into t (id,a) values (153,97);
+insert into t (id,a) values (153,98);
+insert into t (id,a) values (153,99);
+insert into t (id,a) values (154,0);
+insert into t (id,a) values (154,1);
+insert into t (id,a) values (154,2);
+insert into t (id,a) values (154,3);
+insert into t (id,a) values (154,4);
+insert into t (id,a) values (154,5);
+insert into t (id,a) values (154,6);
+insert into t (id,a) values (154,7);
+insert into t (id,a) values (154,8);
+insert into t (id,a) values (154,9);
+insert into t (id,a) values (154,10);
+insert into t (id,a) values (154,11);
+insert into t (id,a) values (154,12);
+insert into t (id,a) values (154,13);
+insert into t (id,a) values (154,14);
+insert into t (id,a) values (154,15);
+insert into t (id,a) values (154,16);
+insert into t (id,a) values (154,17);
+insert into t (id,a) values (154,18);
+insert into t (id,a) values (154,19);
+insert into t (id,a) values (154,20);
+insert into t (id,a) values (154,21);
+insert into t (id,a) values (154,22);
+insert into t (id,a) values (154,23);
+insert into t (id,a) values (154,24);
+insert into t (id,a) values (154,25);
+insert into t (id,a) values (154,26);
+insert into t (id,a) values (154,27);
+insert into t (id,a) values (154,28);
+insert into t (id,a) values (154,29);
+insert into t (id,a) values (154,30);
+insert into t (id,a) values (154,31);
+insert into t (id,a) values (154,32);
+insert into t (id,a) values (154,33);
+insert into t (id,a) values (154,34);
+insert into t (id,a) values (154,35);
+insert into t (id,a) values (154,36);
+insert into t (id,a) values (154,37);
+insert into t (id,a) values (154,38);
+insert into t (id,a) values (154,39);
+insert into t (id,a) values (154,40);
+insert into t (id,a) values (154,41);
+insert into t (id,a) values (154,42);
+insert into t (id,a) values (154,43);
+insert into t (id,a) values (154,44);
+insert into t (id,a) values (154,45);
+insert into t (id,a) values (154,46);
+insert into t (id,a) values (154,47);
+insert into t (id,a) values (154,48);
+insert into t (id,a) values (154,49);
+insert into t (id,a) values (154,50);
+insert into t (id,a) values (154,51);
+insert into t (id,a) values (154,52);
+insert into t (id,a) values (154,53);
+insert into t (id,a) values (154,54);
+insert into t (id,a) values (154,55);
+insert into t (id,a) values (154,56);
+insert into t (id,a) values (154,57);
+insert into t (id,a) values (154,58);
+insert into t (id,a) values (154,59);
+insert into t (id,a) values (154,60);
+insert into t (id,a) values (154,61);
+insert into t (id,a) values (154,62);
+insert into t (id,a) values (154,63);
+insert into t (id,a) values (154,64);
+insert into t (id,a) values (154,65);
+insert into t (id,a) values (154,66);
+insert into t (id,a) values (154,67);
+insert into t (id,a) values (154,68);
+insert into t (id,a) values (154,69);
+insert into t (id,a) values (154,70);
+insert into t (id,a) values (154,71);
+insert into t (id,a) values (154,72);
+insert into t (id,a) values (154,73);
+insert into t (id,a) values (154,74);
+insert into t (id,a) values (154,75);
+insert into t (id,a) values (154,76);
+insert into t (id,a) values (154,77);
+insert into t (id,a) values (154,78);
+insert into t (id,a) values (154,79);
+insert into t (id,a) values (154,80);
+insert into t (id,a) values (154,81);
+insert into t (id,a) values (154,82);
+insert into t (id,a) values (154,83);
+insert into t (id,a) values (154,84);
+insert into t (id,a) values (154,85);
+insert into t (id,a) values (154,86);
+insert into t (id,a) values (154,87);
+insert into t (id,a) values (154,88);
+insert into t (id,a) values (154,89);
+insert into t (id,a) values (154,90);
+insert into t (id,a) values (154,91);
+insert into t (id,a) values (154,92);
+insert into t (id,a) values (154,93);
+insert into t (id,a) values (154,94);
+insert into t (id,a) values (154,95);
+insert into t (id,a) values (154,96);
+insert into t (id,a) values (154,97);
+insert into t (id,a) values (154,98);
+insert into t (id,a) values (154,99);
+insert into t (id,a) values (155,0);
+insert into t (id,a) values (155,1);
+insert into t (id,a) values (155,2);
+insert into t (id,a) values (155,3);
+insert into t (id,a) values (155,4);
+insert into t (id,a) values (155,5);
+insert into t (id,a) values (155,6);
+insert into t (id,a) values (155,7);
+insert into t (id,a) values (155,8);
+insert into t (id,a) values (155,9);
+insert into t (id,a) values (155,10);
+insert into t (id,a) values (155,11);
+insert into t (id,a) values (155,12);
+insert into t (id,a) values (155,13);
+insert into t (id,a) values (155,14);
+insert into t (id,a) values (155,15);
+insert into t (id,a) values (155,16);
+insert into t (id,a) values (155,17);
+insert into t (id,a) values (155,18);
+insert into t (id,a) values (155,19);
+insert into t (id,a) values (155,20);
+insert into t (id,a) values (155,21);
+insert into t (id,a) values (155,22);
+insert into t (id,a) values (155,23);
+insert into t (id,a) values (155,24);
+insert into t (id,a) values (155,25);
+insert into t (id,a) values (155,26);
+insert into t (id,a) values (155,27);
+insert into t (id,a) values (155,28);
+insert into t (id,a) values (155,29);
+insert into t (id,a) values (155,30);
+insert into t (id,a) values (155,31);
+insert into t (id,a) values (155,32);
+insert into t (id,a) values (155,33);
+insert into t (id,a) values (155,34);
+insert into t (id,a) values (155,35);
+insert into t (id,a) values (155,36);
+insert into t (id,a) values (155,37);
+insert into t (id,a) values (155,38);
+insert into t (id,a) values (155,39);
+insert into t (id,a) values (155,40);
+insert into t (id,a) values (155,41);
+insert into t (id,a) values (155,42);
+insert into t (id,a) values (155,43);
+insert into t (id,a) values (155,44);
+insert into t (id,a) values (155,45);
+insert into t (id,a) values (155,46);
+insert into t (id,a) values (155,47);
+insert into t (id,a) values (155,48);
+insert into t (id,a) values (155,49);
+insert into t (id,a) values (155,50);
+insert into t (id,a) values (155,51);
+insert into t (id,a) values (155,52);
+insert into t (id,a) values (155,53);
+insert into t (id,a) values (155,54);
+insert into t (id,a) values (155,55);
+insert into t (id,a) values (155,56);
+insert into t (id,a) values (155,57);
+insert into t (id,a) values (155,58);
+insert into t (id,a) values (155,59);
+insert into t (id,a) values (155,60);
+insert into t (id,a) values (155,61);
+insert into t (id,a) values (155,62);
+insert into t (id,a) values (155,63);
+insert into t (id,a) values (155,64);
+insert into t (id,a) values (155,65);
+insert into t (id,a) values (155,66);
+insert into t (id,a) values (155,67);
+insert into t (id,a) values (155,68);
+insert into t (id,a) values (155,69);
+insert into t (id,a) values (155,70);
+insert into t (id,a) values (155,71);
+insert into t (id,a) values (155,72);
+insert into t (id,a) values (155,73);
+insert into t (id,a) values (155,74);
+insert into t (id,a) values (155,75);
+insert into t (id,a) values (155,76);
+insert into t (id,a) values (155,77);
+insert into t (id,a) values (155,78);
+insert into t (id,a) values (155,79);
+insert into t (id,a) values (155,80);
+insert into t (id,a) values (155,81);
+insert into t (id,a) values (155,82);
+insert into t (id,a) values (155,83);
+insert into t (id,a) values (155,84);
+insert into t (id,a) values (155,85);
+insert into t (id,a) values (155,86);
+insert into t (id,a) values (155,87);
+insert into t (id,a) values (155,88);
+insert into t (id,a) values (155,89);
+insert into t (id,a) values (155,90);
+insert into t (id,a) values (155,91);
+insert into t (id,a) values (155,92);
+insert into t (id,a) values (155,93);
+insert into t (id,a) values (155,94);
+insert into t (id,a) values (155,95);
+insert into t (id,a) values (155,96);
+insert into t (id,a) values (155,97);
+insert into t (id,a) values (155,98);
+insert into t (id,a) values (155,99);
+insert into t (id,a) values (156,0);
+insert into t (id,a) values (156,1);
+insert into t (id,a) values (156,2);
+insert into t (id,a) values (156,3);
+insert into t (id,a) values (156,4);
+insert into t (id,a) values (156,5);
+insert into t (id,a) values (156,6);
+insert into t (id,a) values (156,7);
+insert into t (id,a) values (156,8);
+insert into t (id,a) values (156,9);
+insert into t (id,a) values (156,10);
+insert into t (id,a) values (156,11);
+insert into t (id,a) values (156,12);
+insert into t (id,a) values (156,13);
+insert into t (id,a) values (156,14);
+insert into t (id,a) values (156,15);
+insert into t (id,a) values (156,16);
+insert into t (id,a) values (156,17);
+insert into t (id,a) values (156,18);
+insert into t (id,a) values (156,19);
+insert into t (id,a) values (156,20);
+insert into t (id,a) values (156,21);
+insert into t (id,a) values (156,22);
+insert into t (id,a) values (156,23);
+insert into t (id,a) values (156,24);
+insert into t (id,a) values (156,25);
+insert into t (id,a) values (156,26);
+insert into t (id,a) values (156,27);
+insert into t (id,a) values (156,28);
+insert into t (id,a) values (156,29);
+insert into t (id,a) values (156,30);
+insert into t (id,a) values (156,31);
+insert into t (id,a) values (156,32);
+insert into t (id,a) values (156,33);
+insert into t (id,a) values (156,34);
+insert into t (id,a) values (156,35);
+insert into t (id,a) values (156,36);
+insert into t (id,a) values (156,37);
+insert into t (id,a) values (156,38);
+insert into t (id,a) values (156,39);
+insert into t (id,a) values (156,40);
+insert into t (id,a) values (156,41);
+insert into t (id,a) values (156,42);
+insert into t (id,a) values (156,43);
+insert into t (id,a) values (156,44);
+insert into t (id,a) values (156,45);
+insert into t (id,a) values (156,46);
+insert into t (id,a) values (156,47);
+insert into t (id,a) values (156,48);
+insert into t (id,a) values (156,49);
+insert into t (id,a) values (156,50);
+insert into t (id,a) values (156,51);
+insert into t (id,a) values (156,52);
+insert into t (id,a) values (156,53);
+insert into t (id,a) values (156,54);
+insert into t (id,a) values (156,55);
+insert into t (id,a) values (156,56);
+insert into t (id,a) values (156,57);
+insert into t (id,a) values (156,58);
+insert into t (id,a) values (156,59);
+insert into t (id,a) values (156,60);
+insert into t (id,a) values (156,61);
+insert into t (id,a) values (156,62);
+insert into t (id,a) values (156,63);
+insert into t (id,a) values (156,64);
+insert into t (id,a) values (156,65);
+insert into t (id,a) values (156,66);
+insert into t (id,a) values (156,67);
+insert into t (id,a) values (156,68);
+insert into t (id,a) values (156,69);
+insert into t (id,a) values (156,70);
+insert into t (id,a) values (156,71);
+insert into t (id,a) values (156,72);
+insert into t (id,a) values (156,73);
+insert into t (id,a) values (156,74);
+insert into t (id,a) values (156,75);
+insert into t (id,a) values (156,76);
+insert into t (id,a) values (156,77);
+insert into t (id,a) values (156,78);
+insert into t (id,a) values (156,79);
+insert into t (id,a) values (156,80);
+insert into t (id,a) values (156,81);
+insert into t (id,a) values (156,82);
+insert into t (id,a) values (156,83);
+insert into t (id,a) values (156,84);
+insert into t (id,a) values (156,85);
+insert into t (id,a) values (156,86);
+insert into t (id,a) values (156,87);
+insert into t (id,a) values (156,88);
+insert into t (id,a) values (156,89);
+insert into t (id,a) values (156,90);
+insert into t (id,a) values (156,91);
+insert into t (id,a) values (156,92);
+insert into t (id,a) values (156,93);
+insert into t (id,a) values (156,94);
+insert into t (id,a) values (156,95);
+insert into t (id,a) values (156,96);
+insert into t (id,a) values (156,97);
+insert into t (id,a) values (156,98);
+insert into t (id,a) values (156,99);
+insert into t (id,a) values (157,0);
+insert into t (id,a) values (157,1);
+insert into t (id,a) values (157,2);
+insert into t (id,a) values (157,3);
+insert into t (id,a) values (157,4);
+insert into t (id,a) values (157,5);
+insert into t (id,a) values (157,6);
+insert into t (id,a) values (157,7);
+insert into t (id,a) values (157,8);
+insert into t (id,a) values (157,9);
+insert into t (id,a) values (157,10);
+insert into t (id,a) values (157,11);
+insert into t (id,a) values (157,12);
+insert into t (id,a) values (157,13);
+insert into t (id,a) values (157,14);
+insert into t (id,a) values (157,15);
+insert into t (id,a) values (157,16);
+insert into t (id,a) values (157,17);
+insert into t (id,a) values (157,18);
+insert into t (id,a) values (157,19);
+insert into t (id,a) values (157,20);
+insert into t (id,a) values (157,21);
+insert into t (id,a) values (157,22);
+insert into t (id,a) values (157,23);
+insert into t (id,a) values (157,24);
+insert into t (id,a) values (157,25);
+insert into t (id,a) values (157,26);
+insert into t (id,a) values (157,27);
+insert into t (id,a) values (157,28);
+insert into t (id,a) values (157,29);
+insert into t (id,a) values (157,30);
+insert into t (id,a) values (157,31);
+insert into t (id,a) values (157,32);
+insert into t (id,a) values (157,33);
+insert into t (id,a) values (157,34);
+insert into t (id,a) values (157,35);
+insert into t (id,a) values (157,36);
+insert into t (id,a) values (157,37);
+insert into t (id,a) values (157,38);
+insert into t (id,a) values (157,39);
+insert into t (id,a) values (157,40);
+insert into t (id,a) values (157,41);
+insert into t (id,a) values (157,42);
+insert into t (id,a) values (157,43);
+insert into t (id,a) values (157,44);
+insert into t (id,a) values (157,45);
+insert into t (id,a) values (157,46);
+insert into t (id,a) values (157,47);
+insert into t (id,a) values (157,48);
+insert into t (id,a) values (157,49);
+insert into t (id,a) values (157,50);
+insert into t (id,a) values (157,51);
+insert into t (id,a) values (157,52);
+insert into t (id,a) values (157,53);
+insert into t (id,a) values (157,54);
+insert into t (id,a) values (157,55);
+insert into t (id,a) values (157,56);
+insert into t (id,a) values (157,57);
+insert into t (id,a) values (157,58);
+insert into t (id,a) values (157,59);
+insert into t (id,a) values (157,60);
+insert into t (id,a) values (157,61);
+insert into t (id,a) values (157,62);
+insert into t (id,a) values (157,63);
+insert into t (id,a) values (157,64);
+insert into t (id,a) values (157,65);
+insert into t (id,a) values (157,66);
+insert into t (id,a) values (157,67);
+insert into t (id,a) values (157,68);
+insert into t (id,a) values (157,69);
+insert into t (id,a) values (157,70);
+insert into t (id,a) values (157,71);
+insert into t (id,a) values (157,72);
+insert into t (id,a) values (157,73);
+insert into t (id,a) values (157,74);
+insert into t (id,a) values (157,75);
+insert into t (id,a) values (157,76);
+insert into t (id,a) values (157,77);
+insert into t (id,a) values (157,78);
+insert into t (id,a) values (157,79);
+insert into t (id,a) values (157,80);
+insert into t (id,a) values (157,81);
+insert into t (id,a) values (157,82);
+insert into t (id,a) values (157,83);
+insert into t (id,a) values (157,84);
+insert into t (id,a) values (157,85);
+insert into t (id,a) values (157,86);
+insert into t (id,a) values (157,87);
+insert into t (id,a) values (157,88);
+insert into t (id,a) values (157,89);
+insert into t (id,a) values (157,90);
+insert into t (id,a) values (157,91);
+insert into t (id,a) values (157,92);
+insert into t (id,a) values (157,93);
+insert into t (id,a) values (157,94);
+insert into t (id,a) values (157,95);
+insert into t (id,a) values (157,96);
+insert into t (id,a) values (157,97);
+insert into t (id,a) values (157,98);
+insert into t (id,a) values (157,99);
+insert into t (id,a) values (158,0);
+insert into t (id,a) values (158,1);
+insert into t (id,a) values (158,2);
+insert into t (id,a) values (158,3);
+insert into t (id,a) values (158,4);
+insert into t (id,a) values (158,5);
+insert into t (id,a) values (158,6);
+insert into t (id,a) values (158,7);
+insert into t (id,a) values (158,8);
+insert into t (id,a) values (158,9);
+insert into t (id,a) values (158,10);
+insert into t (id,a) values (158,11);
+insert into t (id,a) values (158,12);
+insert into t (id,a) values (158,13);
+insert into t (id,a) values (158,14);
+insert into t (id,a) values (158,15);
+insert into t (id,a) values (158,16);
+insert into t (id,a) values (158,17);
+insert into t (id,a) values (158,18);
+insert into t (id,a) values (158,19);
+insert into t (id,a) values (158,20);
+insert into t (id,a) values (158,21);
+insert into t (id,a) values (158,22);
+insert into t (id,a) values (158,23);
+insert into t (id,a) values (158,24);
+insert into t (id,a) values (158,25);
+insert into t (id,a) values (158,26);
+insert into t (id,a) values (158,27);
+insert into t (id,a) values (158,28);
+insert into t (id,a) values (158,29);
+insert into t (id,a) values (158,30);
+insert into t (id,a) values (158,31);
+insert into t (id,a) values (158,32);
+insert into t (id,a) values (158,33);
+insert into t (id,a) values (158,34);
+insert into t (id,a) values (158,35);
+insert into t (id,a) values (158,36);
+insert into t (id,a) values (158,37);
+insert into t (id,a) values (158,38);
+insert into t (id,a) values (158,39);
+insert into t (id,a) values (158,40);
+insert into t (id,a) values (158,41);
+insert into t (id,a) values (158,42);
+insert into t (id,a) values (158,43);
+insert into t (id,a) values (158,44);
+insert into t (id,a) values (158,45);
+insert into t (id,a) values (158,46);
+insert into t (id,a) values (158,47);
+insert into t (id,a) values (158,48);
+insert into t (id,a) values (158,49);
+insert into t (id,a) values (158,50);
+insert into t (id,a) values (158,51);
+insert into t (id,a) values (158,52);
+insert into t (id,a) values (158,53);
+insert into t (id,a) values (158,54);
+insert into t (id,a) values (158,55);
+insert into t (id,a) values (158,56);
+insert into t (id,a) values (158,57);
+insert into t (id,a) values (158,58);
+insert into t (id,a) values (158,59);
+insert into t (id,a) values (158,60);
+insert into t (id,a) values (158,61);
+insert into t (id,a) values (158,62);
+insert into t (id,a) values (158,63);
+insert into t (id,a) values (158,64);
+insert into t (id,a) values (158,65);
+insert into t (id,a) values (158,66);
+insert into t (id,a) values (158,67);
+insert into t (id,a) values (158,68);
+insert into t (id,a) values (158,69);
+insert into t (id,a) values (158,70);
+insert into t (id,a) values (158,71);
+insert into t (id,a) values (158,72);
+insert into t (id,a) values (158,73);
+insert into t (id,a) values (158,74);
+insert into t (id,a) values (158,75);
+insert into t (id,a) values (158,76);
+insert into t (id,a) values (158,77);
+insert into t (id,a) values (158,78);
+insert into t (id,a) values (158,79);
+insert into t (id,a) values (158,80);
+insert into t (id,a) values (158,81);
+insert into t (id,a) values (158,82);
+insert into t (id,a) values (158,83);
+insert into t (id,a) values (158,84);
+insert into t (id,a) values (158,85);
+insert into t (id,a) values (158,86);
+insert into t (id,a) values (158,87);
+insert into t (id,a) values (158,88);
+insert into t (id,a) values (158,89);
+insert into t (id,a) values (158,90);
+insert into t (id,a) values (158,91);
+insert into t (id,a) values (158,92);
+insert into t (id,a) values (158,93);
+insert into t (id,a) values (158,94);
+insert into t (id,a) values (158,95);
+insert into t (id,a) values (158,96);
+insert into t (id,a) values (158,97);
+insert into t (id,a) values (158,98);
+insert into t (id,a) values (158,99);
+insert into t (id,a) values (159,0);
+insert into t (id,a) values (159,1);
+insert into t (id,a) values (159,2);
+insert into t (id,a) values (159,3);
+insert into t (id,a) values (159,4);
+insert into t (id,a) values (159,5);
+insert into t (id,a) values (159,6);
+insert into t (id,a) values (159,7);
+insert into t (id,a) values (159,8);
+insert into t (id,a) values (159,9);
+insert into t (id,a) values (159,10);
+insert into t (id,a) values (159,11);
+insert into t (id,a) values (159,12);
+insert into t (id,a) values (159,13);
+insert into t (id,a) values (159,14);
+insert into t (id,a) values (159,15);
+insert into t (id,a) values (159,16);
+insert into t (id,a) values (159,17);
+insert into t (id,a) values (159,18);
+insert into t (id,a) values (159,19);
+insert into t (id,a) values (159,20);
+insert into t (id,a) values (159,21);
+insert into t (id,a) values (159,22);
+insert into t (id,a) values (159,23);
+insert into t (id,a) values (159,24);
+insert into t (id,a) values (159,25);
+insert into t (id,a) values (159,26);
+insert into t (id,a) values (159,27);
+insert into t (id,a) values (159,28);
+insert into t (id,a) values (159,29);
+insert into t (id,a) values (159,30);
+insert into t (id,a) values (159,31);
+insert into t (id,a) values (159,32);
+insert into t (id,a) values (159,33);
+insert into t (id,a) values (159,34);
+insert into t (id,a) values (159,35);
+insert into t (id,a) values (159,36);
+insert into t (id,a) values (159,37);
+insert into t (id,a) values (159,38);
+insert into t (id,a) values (159,39);
+insert into t (id,a) values (159,40);
+insert into t (id,a) values (159,41);
+insert into t (id,a) values (159,42);
+insert into t (id,a) values (159,43);
+insert into t (id,a) values (159,44);
+insert into t (id,a) values (159,45);
+insert into t (id,a) values (159,46);
+insert into t (id,a) values (159,47);
+insert into t (id,a) values (159,48);
+insert into t (id,a) values (159,49);
+insert into t (id,a) values (159,50);
+insert into t (id,a) values (159,51);
+insert into t (id,a) values (159,52);
+insert into t (id,a) values (159,53);
+insert into t (id,a) values (159,54);
+insert into t (id,a) values (159,55);
+insert into t (id,a) values (159,56);
+insert into t (id,a) values (159,57);
+insert into t (id,a) values (159,58);
+insert into t (id,a) values (159,59);
+insert into t (id,a) values (159,60);
+insert into t (id,a) values (159,61);
+insert into t (id,a) values (159,62);
+insert into t (id,a) values (159,63);
+insert into t (id,a) values (159,64);
+insert into t (id,a) values (159,65);
+insert into t (id,a) values (159,66);
+insert into t (id,a) values (159,67);
+insert into t (id,a) values (159,68);
+insert into t (id,a) values (159,69);
+insert into t (id,a) values (159,70);
+insert into t (id,a) values (159,71);
+insert into t (id,a) values (159,72);
+insert into t (id,a) values (159,73);
+insert into t (id,a) values (159,74);
+insert into t (id,a) values (159,75);
+insert into t (id,a) values (159,76);
+insert into t (id,a) values (159,77);
+insert into t (id,a) values (159,78);
+insert into t (id,a) values (159,79);
+insert into t (id,a) values (159,80);
+insert into t (id,a) values (159,81);
+insert into t (id,a) values (159,82);
+insert into t (id,a) values (159,83);
+insert into t (id,a) values (159,84);
+insert into t (id,a) values (159,85);
+insert into t (id,a) values (159,86);
+insert into t (id,a) values (159,87);
+insert into t (id,a) values (159,88);
+insert into t (id,a) values (159,89);
+insert into t (id,a) values (159,90);
+insert into t (id,a) values (159,91);
+insert into t (id,a) values (159,92);
+insert into t (id,a) values (159,93);
+insert into t (id,a) values (159,94);
+insert into t (id,a) values (159,95);
+insert into t (id,a) values (159,96);
+insert into t (id,a) values (159,97);
+insert into t (id,a) values (159,98);
+insert into t (id,a) values (159,99);
+insert into t (id,a) values (160,0);
+insert into t (id,a) values (160,1);
+insert into t (id,a) values (160,2);
+insert into t (id,a) values (160,3);
+insert into t (id,a) values (160,4);
+insert into t (id,a) values (160,5);
+insert into t (id,a) values (160,6);
+insert into t (id,a) values (160,7);
+insert into t (id,a) values (160,8);
+insert into t (id,a) values (160,9);
+insert into t (id,a) values (160,10);
+insert into t (id,a) values (160,11);
+insert into t (id,a) values (160,12);
+insert into t (id,a) values (160,13);
+insert into t (id,a) values (160,14);
+insert into t (id,a) values (160,15);
+insert into t (id,a) values (160,16);
+insert into t (id,a) values (160,17);
+insert into t (id,a) values (160,18);
+insert into t (id,a) values (160,19);
+insert into t (id,a) values (160,20);
+insert into t (id,a) values (160,21);
+insert into t (id,a) values (160,22);
+insert into t (id,a) values (160,23);
+insert into t (id,a) values (160,24);
+insert into t (id,a) values (160,25);
+insert into t (id,a) values (160,26);
+insert into t (id,a) values (160,27);
+insert into t (id,a) values (160,28);
+insert into t (id,a) values (160,29);
+insert into t (id,a) values (160,30);
+insert into t (id,a) values (160,31);
+insert into t (id,a) values (160,32);
+insert into t (id,a) values (160,33);
+insert into t (id,a) values (160,34);
+insert into t (id,a) values (160,35);
+insert into t (id,a) values (160,36);
+insert into t (id,a) values (160,37);
+insert into t (id,a) values (160,38);
+insert into t (id,a) values (160,39);
+insert into t (id,a) values (160,40);
+insert into t (id,a) values (160,41);
+insert into t (id,a) values (160,42);
+insert into t (id,a) values (160,43);
+insert into t (id,a) values (160,44);
+insert into t (id,a) values (160,45);
+insert into t (id,a) values (160,46);
+insert into t (id,a) values (160,47);
+insert into t (id,a) values (160,48);
+insert into t (id,a) values (160,49);
+insert into t (id,a) values (160,50);
+insert into t (id,a) values (160,51);
+insert into t (id,a) values (160,52);
+insert into t (id,a) values (160,53);
+insert into t (id,a) values (160,54);
+insert into t (id,a) values (160,55);
+insert into t (id,a) values (160,56);
+insert into t (id,a) values (160,57);
+insert into t (id,a) values (160,58);
+insert into t (id,a) values (160,59);
+insert into t (id,a) values (160,60);
+insert into t (id,a) values (160,61);
+insert into t (id,a) values (160,62);
+insert into t (id,a) values (160,63);
+insert into t (id,a) values (160,64);
+insert into t (id,a) values (160,65);
+insert into t (id,a) values (160,66);
+insert into t (id,a) values (160,67);
+insert into t (id,a) values (160,68);
+insert into t (id,a) values (160,69);
+insert into t (id,a) values (160,70);
+insert into t (id,a) values (160,71);
+insert into t (id,a) values (160,72);
+insert into t (id,a) values (160,73);
+insert into t (id,a) values (160,74);
+insert into t (id,a) values (160,75);
+insert into t (id,a) values (160,76);
+insert into t (id,a) values (160,77);
+insert into t (id,a) values (160,78);
+insert into t (id,a) values (160,79);
+insert into t (id,a) values (160,80);
+insert into t (id,a) values (160,81);
+insert into t (id,a) values (160,82);
+insert into t (id,a) values (160,83);
+insert into t (id,a) values (160,84);
+insert into t (id,a) values (160,85);
+insert into t (id,a) values (160,86);
+insert into t (id,a) values (160,87);
+insert into t (id,a) values (160,88);
+insert into t (id,a) values (160,89);
+insert into t (id,a) values (160,90);
+insert into t (id,a) values (160,91);
+insert into t (id,a) values (160,92);
+insert into t (id,a) values (160,93);
+insert into t (id,a) values (160,94);
+insert into t (id,a) values (160,95);
+insert into t (id,a) values (160,96);
+insert into t (id,a) values (160,97);
+insert into t (id,a) values (160,98);
+insert into t (id,a) values (160,99);
+insert into t (id,a) values (161,0);
+insert into t (id,a) values (161,1);
+insert into t (id,a) values (161,2);
+insert into t (id,a) values (161,3);
+insert into t (id,a) values (161,4);
+insert into t (id,a) values (161,5);
+insert into t (id,a) values (161,6);
+insert into t (id,a) values (161,7);
+insert into t (id,a) values (161,8);
+insert into t (id,a) values (161,9);
+insert into t (id,a) values (161,10);
+insert into t (id,a) values (161,11);
+insert into t (id,a) values (161,12);
+insert into t (id,a) values (161,13);
+insert into t (id,a) values (161,14);
+insert into t (id,a) values (161,15);
+insert into t (id,a) values (161,16);
+insert into t (id,a) values (161,17);
+insert into t (id,a) values (161,18);
+insert into t (id,a) values (161,19);
+insert into t (id,a) values (161,20);
+insert into t (id,a) values (161,21);
+insert into t (id,a) values (161,22);
+insert into t (id,a) values (161,23);
+insert into t (id,a) values (161,24);
+insert into t (id,a) values (161,25);
+insert into t (id,a) values (161,26);
+insert into t (id,a) values (161,27);
+insert into t (id,a) values (161,28);
+insert into t (id,a) values (161,29);
+insert into t (id,a) values (161,30);
+insert into t (id,a) values (161,31);
+insert into t (id,a) values (161,32);
+insert into t (id,a) values (161,33);
+insert into t (id,a) values (161,34);
+insert into t (id,a) values (161,35);
+insert into t (id,a) values (161,36);
+insert into t (id,a) values (161,37);
+insert into t (id,a) values (161,38);
+insert into t (id,a) values (161,39);
+insert into t (id,a) values (161,40);
+insert into t (id,a) values (161,41);
+insert into t (id,a) values (161,42);
+insert into t (id,a) values (161,43);
+insert into t (id,a) values (161,44);
+insert into t (id,a) values (161,45);
+insert into t (id,a) values (161,46);
+insert into t (id,a) values (161,47);
+insert into t (id,a) values (161,48);
+insert into t (id,a) values (161,49);
+insert into t (id,a) values (161,50);
+insert into t (id,a) values (161,51);
+insert into t (id,a) values (161,52);
+insert into t (id,a) values (161,53);
+insert into t (id,a) values (161,54);
+insert into t (id,a) values (161,55);
+insert into t (id,a) values (161,56);
+insert into t (id,a) values (161,57);
+insert into t (id,a) values (161,58);
+insert into t (id,a) values (161,59);
+insert into t (id,a) values (161,60);
+insert into t (id,a) values (161,61);
+insert into t (id,a) values (161,62);
+insert into t (id,a) values (161,63);
+insert into t (id,a) values (161,64);
+insert into t (id,a) values (161,65);
+insert into t (id,a) values (161,66);
+insert into t (id,a) values (161,67);
+insert into t (id,a) values (161,68);
+insert into t (id,a) values (161,69);
+insert into t (id,a) values (161,70);
+insert into t (id,a) values (161,71);
+insert into t (id,a) values (161,72);
+insert into t (id,a) values (161,73);
+insert into t (id,a) values (161,74);
+insert into t (id,a) values (161,75);
+insert into t (id,a) values (161,76);
+insert into t (id,a) values (161,77);
+insert into t (id,a) values (161,78);
+insert into t (id,a) values (161,79);
+insert into t (id,a) values (161,80);
+insert into t (id,a) values (161,81);
+insert into t (id,a) values (161,82);
+insert into t (id,a) values (161,83);
+insert into t (id,a) values (161,84);
+insert into t (id,a) values (161,85);
+insert into t (id,a) values (161,86);
+insert into t (id,a) values (161,87);
+insert into t (id,a) values (161,88);
+insert into t (id,a) values (161,89);
+insert into t (id,a) values (161,90);
+insert into t (id,a) values (161,91);
+insert into t (id,a) values (161,92);
+insert into t (id,a) values (161,93);
+insert into t (id,a) values (161,94);
+insert into t (id,a) values (161,95);
+insert into t (id,a) values (161,96);
+insert into t (id,a) values (161,97);
+insert into t (id,a) values (161,98);
+insert into t (id,a) values (161,99);
+insert into t (id,a) values (162,0);
+insert into t (id,a) values (162,1);
+insert into t (id,a) values (162,2);
+insert into t (id,a) values (162,3);
+insert into t (id,a) values (162,4);
+insert into t (id,a) values (162,5);
+insert into t (id,a) values (162,6);
+insert into t (id,a) values (162,7);
+insert into t (id,a) values (162,8);
+insert into t (id,a) values (162,9);
+insert into t (id,a) values (162,10);
+insert into t (id,a) values (162,11);
+insert into t (id,a) values (162,12);
+insert into t (id,a) values (162,13);
+insert into t (id,a) values (162,14);
+insert into t (id,a) values (162,15);
+insert into t (id,a) values (162,16);
+insert into t (id,a) values (162,17);
+insert into t (id,a) values (162,18);
+insert into t (id,a) values (162,19);
+insert into t (id,a) values (162,20);
+insert into t (id,a) values (162,21);
+insert into t (id,a) values (162,22);
+insert into t (id,a) values (162,23);
+insert into t (id,a) values (162,24);
+insert into t (id,a) values (162,25);
+insert into t (id,a) values (162,26);
+insert into t (id,a) values (162,27);
+insert into t (id,a) values (162,28);
+insert into t (id,a) values (162,29);
+insert into t (id,a) values (162,30);
+insert into t (id,a) values (162,31);
+insert into t (id,a) values (162,32);
+insert into t (id,a) values (162,33);
+insert into t (id,a) values (162,34);
+insert into t (id,a) values (162,35);
+insert into t (id,a) values (162,36);
+insert into t (id,a) values (162,37);
+insert into t (id,a) values (162,38);
+insert into t (id,a) values (162,39);
+insert into t (id,a) values (162,40);
+insert into t (id,a) values (162,41);
+insert into t (id,a) values (162,42);
+insert into t (id,a) values (162,43);
+insert into t (id,a) values (162,44);
+insert into t (id,a) values (162,45);
+insert into t (id,a) values (162,46);
+insert into t (id,a) values (162,47);
+insert into t (id,a) values (162,48);
+insert into t (id,a) values (162,49);
+insert into t (id,a) values (162,50);
+insert into t (id,a) values (162,51);
+insert into t (id,a) values (162,52);
+insert into t (id,a) values (162,53);
+insert into t (id,a) values (162,54);
+insert into t (id,a) values (162,55);
+insert into t (id,a) values (162,56);
+insert into t (id,a) values (162,57);
+insert into t (id,a) values (162,58);
+insert into t (id,a) values (162,59);
+insert into t (id,a) values (162,60);
+insert into t (id,a) values (162,61);
+insert into t (id,a) values (162,62);
+insert into t (id,a) values (162,63);
+insert into t (id,a) values (162,64);
+insert into t (id,a) values (162,65);
+insert into t (id,a) values (162,66);
+insert into t (id,a) values (162,67);
+insert into t (id,a) values (162,68);
+insert into t (id,a) values (162,69);
+insert into t (id,a) values (162,70);
+insert into t (id,a) values (162,71);
+insert into t (id,a) values (162,72);
+insert into t (id,a) values (162,73);
+insert into t (id,a) values (162,74);
+insert into t (id,a) values (162,75);
+insert into t (id,a) values (162,76);
+insert into t (id,a) values (162,77);
+insert into t (id,a) values (162,78);
+insert into t (id,a) values (162,79);
+insert into t (id,a) values (162,80);
+insert into t (id,a) values (162,81);
+insert into t (id,a) values (162,82);
+insert into t (id,a) values (162,83);
+insert into t (id,a) values (162,84);
+insert into t (id,a) values (162,85);
+insert into t (id,a) values (162,86);
+insert into t (id,a) values (162,87);
+insert into t (id,a) values (162,88);
+insert into t (id,a) values (162,89);
+insert into t (id,a) values (162,90);
+insert into t (id,a) values (162,91);
+insert into t (id,a) values (162,92);
+insert into t (id,a) values (162,93);
+insert into t (id,a) values (162,94);
+insert into t (id,a) values (162,95);
+insert into t (id,a) values (162,96);
+insert into t (id,a) values (162,97);
+insert into t (id,a) values (162,98);
+insert into t (id,a) values (162,99);
+insert into t (id,a) values (163,0);
+insert into t (id,a) values (163,1);
+insert into t (id,a) values (163,2);
+insert into t (id,a) values (163,3);
+insert into t (id,a) values (163,4);
+insert into t (id,a) values (163,5);
+insert into t (id,a) values (163,6);
+insert into t (id,a) values (163,7);
+insert into t (id,a) values (163,8);
+insert into t (id,a) values (163,9);
+insert into t (id,a) values (163,10);
+insert into t (id,a) values (163,11);
+insert into t (id,a) values (163,12);
+insert into t (id,a) values (163,13);
+insert into t (id,a) values (163,14);
+insert into t (id,a) values (163,15);
+insert into t (id,a) values (163,16);
+insert into t (id,a) values (163,17);
+insert into t (id,a) values (163,18);
+insert into t (id,a) values (163,19);
+insert into t (id,a) values (163,20);
+insert into t (id,a) values (163,21);
+insert into t (id,a) values (163,22);
+insert into t (id,a) values (163,23);
+insert into t (id,a) values (163,24);
+insert into t (id,a) values (163,25);
+insert into t (id,a) values (163,26);
+insert into t (id,a) values (163,27);
+insert into t (id,a) values (163,28);
+insert into t (id,a) values (163,29);
+insert into t (id,a) values (163,30);
+insert into t (id,a) values (163,31);
+insert into t (id,a) values (163,32);
+insert into t (id,a) values (163,33);
+insert into t (id,a) values (163,34);
+insert into t (id,a) values (163,35);
+insert into t (id,a) values (163,36);
+insert into t (id,a) values (163,37);
+insert into t (id,a) values (163,38);
+insert into t (id,a) values (163,39);
+insert into t (id,a) values (163,40);
+insert into t (id,a) values (163,41);
+insert into t (id,a) values (163,42);
+insert into t (id,a) values (163,43);
+insert into t (id,a) values (163,44);
+insert into t (id,a) values (163,45);
+insert into t (id,a) values (163,46);
+insert into t (id,a) values (163,47);
+insert into t (id,a) values (163,48);
+insert into t (id,a) values (163,49);
+insert into t (id,a) values (163,50);
+insert into t (id,a) values (163,51);
+insert into t (id,a) values (163,52);
+insert into t (id,a) values (163,53);
+insert into t (id,a) values (163,54);
+insert into t (id,a) values (163,55);
+insert into t (id,a) values (163,56);
+insert into t (id,a) values (163,57);
+insert into t (id,a) values (163,58);
+insert into t (id,a) values (163,59);
+insert into t (id,a) values (163,60);
+insert into t (id,a) values (163,61);
+insert into t (id,a) values (163,62);
+insert into t (id,a) values (163,63);
+insert into t (id,a) values (163,64);
+insert into t (id,a) values (163,65);
+insert into t (id,a) values (163,66);
+insert into t (id,a) values (163,67);
+insert into t (id,a) values (163,68);
+insert into t (id,a) values (163,69);
+insert into t (id,a) values (163,70);
+insert into t (id,a) values (163,71);
+insert into t (id,a) values (163,72);
+insert into t (id,a) values (163,73);
+insert into t (id,a) values (163,74);
+insert into t (id,a) values (163,75);
+insert into t (id,a) values (163,76);
+insert into t (id,a) values (163,77);
+insert into t (id,a) values (163,78);
+insert into t (id,a) values (163,79);
+insert into t (id,a) values (163,80);
+insert into t (id,a) values (163,81);
+insert into t (id,a) values (163,82);
+insert into t (id,a) values (163,83);
+insert into t (id,a) values (163,84);
+insert into t (id,a) values (163,85);
+insert into t (id,a) values (163,86);
+insert into t (id,a) values (163,87);
+insert into t (id,a) values (163,88);
+insert into t (id,a) values (163,89);
+insert into t (id,a) values (163,90);
+insert into t (id,a) values (163,91);
+insert into t (id,a) values (163,92);
+insert into t (id,a) values (163,93);
+insert into t (id,a) values (163,94);
+insert into t (id,a) values (163,95);
+insert into t (id,a) values (163,96);
+insert into t (id,a) values (163,97);
+insert into t (id,a) values (163,98);
+insert into t (id,a) values (163,99);
+insert into t (id,a) values (164,0);
+insert into t (id,a) values (164,1);
+insert into t (id,a) values (164,2);
+insert into t (id,a) values (164,3);
+insert into t (id,a) values (164,4);
+insert into t (id,a) values (164,5);
+insert into t (id,a) values (164,6);
+insert into t (id,a) values (164,7);
+insert into t (id,a) values (164,8);
+insert into t (id,a) values (164,9);
+insert into t (id,a) values (164,10);
+insert into t (id,a) values (164,11);
+insert into t (id,a) values (164,12);
+insert into t (id,a) values (164,13);
+insert into t (id,a) values (164,14);
+insert into t (id,a) values (164,15);
+insert into t (id,a) values (164,16);
+insert into t (id,a) values (164,17);
+insert into t (id,a) values (164,18);
+insert into t (id,a) values (164,19);
+insert into t (id,a) values (164,20);
+insert into t (id,a) values (164,21);
+insert into t (id,a) values (164,22);
+insert into t (id,a) values (164,23);
+insert into t (id,a) values (164,24);
+insert into t (id,a) values (164,25);
+insert into t (id,a) values (164,26);
+insert into t (id,a) values (164,27);
+insert into t (id,a) values (164,28);
+insert into t (id,a) values (164,29);
+insert into t (id,a) values (164,30);
+insert into t (id,a) values (164,31);
+insert into t (id,a) values (164,32);
+insert into t (id,a) values (164,33);
+insert into t (id,a) values (164,34);
+insert into t (id,a) values (164,35);
+insert into t (id,a) values (164,36);
+insert into t (id,a) values (164,37);
+insert into t (id,a) values (164,38);
+insert into t (id,a) values (164,39);
+insert into t (id,a) values (164,40);
+insert into t (id,a) values (164,41);
+insert into t (id,a) values (164,42);
+insert into t (id,a) values (164,43);
+insert into t (id,a) values (164,44);
+insert into t (id,a) values (164,45);
+insert into t (id,a) values (164,46);
+insert into t (id,a) values (164,47);
+insert into t (id,a) values (164,48);
+insert into t (id,a) values (164,49);
+insert into t (id,a) values (164,50);
+insert into t (id,a) values (164,51);
+insert into t (id,a) values (164,52);
+insert into t (id,a) values (164,53);
+insert into t (id,a) values (164,54);
+insert into t (id,a) values (164,55);
+insert into t (id,a) values (164,56);
+insert into t (id,a) values (164,57);
+insert into t (id,a) values (164,58);
+insert into t (id,a) values (164,59);
+insert into t (id,a) values (164,60);
+insert into t (id,a) values (164,61);
+insert into t (id,a) values (164,62);
+insert into t (id,a) values (164,63);
+insert into t (id,a) values (164,64);
+insert into t (id,a) values (164,65);
+insert into t (id,a) values (164,66);
+insert into t (id,a) values (164,67);
+insert into t (id,a) values (164,68);
+insert into t (id,a) values (164,69);
+insert into t (id,a) values (164,70);
+insert into t (id,a) values (164,71);
+insert into t (id,a) values (164,72);
+insert into t (id,a) values (164,73);
+insert into t (id,a) values (164,74);
+insert into t (id,a) values (164,75);
+insert into t (id,a) values (164,76);
+insert into t (id,a) values (164,77);
+insert into t (id,a) values (164,78);
+insert into t (id,a) values (164,79);
+insert into t (id,a) values (164,80);
+insert into t (id,a) values (164,81);
+insert into t (id,a) values (164,82);
+insert into t (id,a) values (164,83);
+insert into t (id,a) values (164,84);
+insert into t (id,a) values (164,85);
+insert into t (id,a) values (164,86);
+insert into t (id,a) values (164,87);
+insert into t (id,a) values (164,88);
+insert into t (id,a) values (164,89);
+insert into t (id,a) values (164,90);
+insert into t (id,a) values (164,91);
+insert into t (id,a) values (164,92);
+insert into t (id,a) values (164,93);
+insert into t (id,a) values (164,94);
+insert into t (id,a) values (164,95);
+insert into t (id,a) values (164,96);
+insert into t (id,a) values (164,97);
+insert into t (id,a) values (164,98);
+insert into t (id,a) values (164,99);
+insert into t (id,a) values (165,0);
+insert into t (id,a) values (165,1);
+insert into t (id,a) values (165,2);
+insert into t (id,a) values (165,3);
+insert into t (id,a) values (165,4);
+insert into t (id,a) values (165,5);
+insert into t (id,a) values (165,6);
+insert into t (id,a) values (165,7);
+insert into t (id,a) values (165,8);
+insert into t (id,a) values (165,9);
+insert into t (id,a) values (165,10);
+insert into t (id,a) values (165,11);
+insert into t (id,a) values (165,12);
+insert into t (id,a) values (165,13);
+insert into t (id,a) values (165,14);
+insert into t (id,a) values (165,15);
+insert into t (id,a) values (165,16);
+insert into t (id,a) values (165,17);
+insert into t (id,a) values (165,18);
+insert into t (id,a) values (165,19);
+insert into t (id,a) values (165,20);
+insert into t (id,a) values (165,21);
+insert into t (id,a) values (165,22);
+insert into t (id,a) values (165,23);
+insert into t (id,a) values (165,24);
+insert into t (id,a) values (165,25);
+insert into t (id,a) values (165,26);
+insert into t (id,a) values (165,27);
+insert into t (id,a) values (165,28);
+insert into t (id,a) values (165,29);
+insert into t (id,a) values (165,30);
+insert into t (id,a) values (165,31);
+insert into t (id,a) values (165,32);
+insert into t (id,a) values (165,33);
+insert into t (id,a) values (165,34);
+insert into t (id,a) values (165,35);
+insert into t (id,a) values (165,36);
+insert into t (id,a) values (165,37);
+insert into t (id,a) values (165,38);
+insert into t (id,a) values (165,39);
+insert into t (id,a) values (165,40);
+insert into t (id,a) values (165,41);
+insert into t (id,a) values (165,42);
+insert into t (id,a) values (165,43);
+insert into t (id,a) values (165,44);
+insert into t (id,a) values (165,45);
+insert into t (id,a) values (165,46);
+insert into t (id,a) values (165,47);
+insert into t (id,a) values (165,48);
+insert into t (id,a) values (165,49);
+insert into t (id,a) values (165,50);
+insert into t (id,a) values (165,51);
+insert into t (id,a) values (165,52);
+insert into t (id,a) values (165,53);
+insert into t (id,a) values (165,54);
+insert into t (id,a) values (165,55);
+insert into t (id,a) values (165,56);
+insert into t (id,a) values (165,57);
+insert into t (id,a) values (165,58);
+insert into t (id,a) values (165,59);
+insert into t (id,a) values (165,60);
+insert into t (id,a) values (165,61);
+insert into t (id,a) values (165,62);
+insert into t (id,a) values (165,63);
+insert into t (id,a) values (165,64);
+insert into t (id,a) values (165,65);
+insert into t (id,a) values (165,66);
+insert into t (id,a) values (165,67);
+insert into t (id,a) values (165,68);
+insert into t (id,a) values (165,69);
+insert into t (id,a) values (165,70);
+insert into t (id,a) values (165,71);
+insert into t (id,a) values (165,72);
+insert into t (id,a) values (165,73);
+insert into t (id,a) values (165,74);
+insert into t (id,a) values (165,75);
+insert into t (id,a) values (165,76);
+insert into t (id,a) values (165,77);
+insert into t (id,a) values (165,78);
+insert into t (id,a) values (165,79);
+insert into t (id,a) values (165,80);
+insert into t (id,a) values (165,81);
+insert into t (id,a) values (165,82);
+insert into t (id,a) values (165,83);
+insert into t (id,a) values (165,84);
+insert into t (id,a) values (165,85);
+insert into t (id,a) values (165,86);
+insert into t (id,a) values (165,87);
+insert into t (id,a) values (165,88);
+insert into t (id,a) values (165,89);
+insert into t (id,a) values (165,90);
+insert into t (id,a) values (165,91);
+insert into t (id,a) values (165,92);
+insert into t (id,a) values (165,93);
+insert into t (id,a) values (165,94);
+insert into t (id,a) values (165,95);
+insert into t (id,a) values (165,96);
+insert into t (id,a) values (165,97);
+insert into t (id,a) values (165,98);
+insert into t (id,a) values (165,99);
+insert into t (id,a) values (166,0);
+insert into t (id,a) values (166,1);
+insert into t (id,a) values (166,2);
+insert into t (id,a) values (166,3);
+insert into t (id,a) values (166,4);
+insert into t (id,a) values (166,5);
+insert into t (id,a) values (166,6);
+insert into t (id,a) values (166,7);
+insert into t (id,a) values (166,8);
+insert into t (id,a) values (166,9);
+insert into t (id,a) values (166,10);
+insert into t (id,a) values (166,11);
+insert into t (id,a) values (166,12);
+insert into t (id,a) values (166,13);
+insert into t (id,a) values (166,14);
+insert into t (id,a) values (166,15);
+insert into t (id,a) values (166,16);
+insert into t (id,a) values (166,17);
+insert into t (id,a) values (166,18);
+insert into t (id,a) values (166,19);
+insert into t (id,a) values (166,20);
+insert into t (id,a) values (166,21);
+insert into t (id,a) values (166,22);
+insert into t (id,a) values (166,23);
+insert into t (id,a) values (166,24);
+insert into t (id,a) values (166,25);
+insert into t (id,a) values (166,26);
+insert into t (id,a) values (166,27);
+insert into t (id,a) values (166,28);
+insert into t (id,a) values (166,29);
+insert into t (id,a) values (166,30);
+insert into t (id,a) values (166,31);
+insert into t (id,a) values (166,32);
+insert into t (id,a) values (166,33);
+insert into t (id,a) values (166,34);
+insert into t (id,a) values (166,35);
+insert into t (id,a) values (166,36);
+insert into t (id,a) values (166,37);
+insert into t (id,a) values (166,38);
+insert into t (id,a) values (166,39);
+insert into t (id,a) values (166,40);
+insert into t (id,a) values (166,41);
+insert into t (id,a) values (166,42);
+insert into t (id,a) values (166,43);
+insert into t (id,a) values (166,44);
+insert into t (id,a) values (166,45);
+insert into t (id,a) values (166,46);
+insert into t (id,a) values (166,47);
+insert into t (id,a) values (166,48);
+insert into t (id,a) values (166,49);
+insert into t (id,a) values (166,50);
+insert into t (id,a) values (166,51);
+insert into t (id,a) values (166,52);
+insert into t (id,a) values (166,53);
+insert into t (id,a) values (166,54);
+insert into t (id,a) values (166,55);
+insert into t (id,a) values (166,56);
+insert into t (id,a) values (166,57);
+insert into t (id,a) values (166,58);
+insert into t (id,a) values (166,59);
+insert into t (id,a) values (166,60);
+insert into t (id,a) values (166,61);
+insert into t (id,a) values (166,62);
+insert into t (id,a) values (166,63);
+insert into t (id,a) values (166,64);
+insert into t (id,a) values (166,65);
+insert into t (id,a) values (166,66);
+insert into t (id,a) values (166,67);
+insert into t (id,a) values (166,68);
+insert into t (id,a) values (166,69);
+insert into t (id,a) values (166,70);
+insert into t (id,a) values (166,71);
+insert into t (id,a) values (166,72);
+insert into t (id,a) values (166,73);
+insert into t (id,a) values (166,74);
+insert into t (id,a) values (166,75);
+insert into t (id,a) values (166,76);
+insert into t (id,a) values (166,77);
+insert into t (id,a) values (166,78);
+insert into t (id,a) values (166,79);
+insert into t (id,a) values (166,80);
+insert into t (id,a) values (166,81);
+insert into t (id,a) values (166,82);
+insert into t (id,a) values (166,83);
+insert into t (id,a) values (166,84);
+insert into t (id,a) values (166,85);
+insert into t (id,a) values (166,86);
+insert into t (id,a) values (166,87);
+insert into t (id,a) values (166,88);
+insert into t (id,a) values (166,89);
+insert into t (id,a) values (166,90);
+insert into t (id,a) values (166,91);
+insert into t (id,a) values (166,92);
+insert into t (id,a) values (166,93);
+insert into t (id,a) values (166,94);
+insert into t (id,a) values (166,95);
+insert into t (id,a) values (166,96);
+insert into t (id,a) values (166,97);
+insert into t (id,a) values (166,98);
+insert into t (id,a) values (166,99);
+insert into t (id,a) values (167,0);
+insert into t (id,a) values (167,1);
+insert into t (id,a) values (167,2);
+insert into t (id,a) values (167,3);
+insert into t (id,a) values (167,4);
+insert into t (id,a) values (167,5);
+insert into t (id,a) values (167,6);
+insert into t (id,a) values (167,7);
+insert into t (id,a) values (167,8);
+insert into t (id,a) values (167,9);
+insert into t (id,a) values (167,10);
+insert into t (id,a) values (167,11);
+insert into t (id,a) values (167,12);
+insert into t (id,a) values (167,13);
+insert into t (id,a) values (167,14);
+insert into t (id,a) values (167,15);
+insert into t (id,a) values (167,16);
+insert into t (id,a) values (167,17);
+insert into t (id,a) values (167,18);
+insert into t (id,a) values (167,19);
+insert into t (id,a) values (167,20);
+insert into t (id,a) values (167,21);
+insert into t (id,a) values (167,22);
+insert into t (id,a) values (167,23);
+insert into t (id,a) values (167,24);
+insert into t (id,a) values (167,25);
+insert into t (id,a) values (167,26);
+insert into t (id,a) values (167,27);
+insert into t (id,a) values (167,28);
+insert into t (id,a) values (167,29);
+insert into t (id,a) values (167,30);
+insert into t (id,a) values (167,31);
+insert into t (id,a) values (167,32);
+insert into t (id,a) values (167,33);
+insert into t (id,a) values (167,34);
+insert into t (id,a) values (167,35);
+insert into t (id,a) values (167,36);
+insert into t (id,a) values (167,37);
+insert into t (id,a) values (167,38);
+insert into t (id,a) values (167,39);
+insert into t (id,a) values (167,40);
+insert into t (id,a) values (167,41);
+insert into t (id,a) values (167,42);
+insert into t (id,a) values (167,43);
+insert into t (id,a) values (167,44);
+insert into t (id,a) values (167,45);
+insert into t (id,a) values (167,46);
+insert into t (id,a) values (167,47);
+insert into t (id,a) values (167,48);
+insert into t (id,a) values (167,49);
+insert into t (id,a) values (167,50);
+insert into t (id,a) values (167,51);
+insert into t (id,a) values (167,52);
+insert into t (id,a) values (167,53);
+insert into t (id,a) values (167,54);
+insert into t (id,a) values (167,55);
+insert into t (id,a) values (167,56);
+insert into t (id,a) values (167,57);
+insert into t (id,a) values (167,58);
+insert into t (id,a) values (167,59);
+insert into t (id,a) values (167,60);
+insert into t (id,a) values (167,61);
+insert into t (id,a) values (167,62);
+insert into t (id,a) values (167,63);
+insert into t (id,a) values (167,64);
+insert into t (id,a) values (167,65);
+insert into t (id,a) values (167,66);
+insert into t (id,a) values (167,67);
+insert into t (id,a) values (167,68);
+insert into t (id,a) values (167,69);
+insert into t (id,a) values (167,70);
+insert into t (id,a) values (167,71);
+insert into t (id,a) values (167,72);
+insert into t (id,a) values (167,73);
+insert into t (id,a) values (167,74);
+insert into t (id,a) values (167,75);
+insert into t (id,a) values (167,76);
+insert into t (id,a) values (167,77);
+insert into t (id,a) values (167,78);
+insert into t (id,a) values (167,79);
+insert into t (id,a) values (167,80);
+insert into t (id,a) values (167,81);
+insert into t (id,a) values (167,82);
+insert into t (id,a) values (167,83);
+insert into t (id,a) values (167,84);
+insert into t (id,a) values (167,85);
+insert into t (id,a) values (167,86);
+insert into t (id,a) values (167,87);
+insert into t (id,a) values (167,88);
+insert into t (id,a) values (167,89);
+insert into t (id,a) values (167,90);
+insert into t (id,a) values (167,91);
+insert into t (id,a) values (167,92);
+insert into t (id,a) values (167,93);
+insert into t (id,a) values (167,94);
+insert into t (id,a) values (167,95);
+insert into t (id,a) values (167,96);
+insert into t (id,a) values (167,97);
+insert into t (id,a) values (167,98);
+insert into t (id,a) values (167,99);
+insert into t (id,a) values (168,0);
+insert into t (id,a) values (168,1);
+insert into t (id,a) values (168,2);
+insert into t (id,a) values (168,3);
+insert into t (id,a) values (168,4);
+insert into t (id,a) values (168,5);
+insert into t (id,a) values (168,6);
+insert into t (id,a) values (168,7);
+insert into t (id,a) values (168,8);
+insert into t (id,a) values (168,9);
+insert into t (id,a) values (168,10);
+insert into t (id,a) values (168,11);
+insert into t (id,a) values (168,12);
+insert into t (id,a) values (168,13);
+insert into t (id,a) values (168,14);
+insert into t (id,a) values (168,15);
+insert into t (id,a) values (168,16);
+insert into t (id,a) values (168,17);
+insert into t (id,a) values (168,18);
+insert into t (id,a) values (168,19);
+insert into t (id,a) values (168,20);
+insert into t (id,a) values (168,21);
+insert into t (id,a) values (168,22);
+insert into t (id,a) values (168,23);
+insert into t (id,a) values (168,24);
+insert into t (id,a) values (168,25);
+insert into t (id,a) values (168,26);
+insert into t (id,a) values (168,27);
+insert into t (id,a) values (168,28);
+insert into t (id,a) values (168,29);
+insert into t (id,a) values (168,30);
+insert into t (id,a) values (168,31);
+insert into t (id,a) values (168,32);
+insert into t (id,a) values (168,33);
+insert into t (id,a) values (168,34);
+insert into t (id,a) values (168,35);
+insert into t (id,a) values (168,36);
+insert into t (id,a) values (168,37);
+insert into t (id,a) values (168,38);
+insert into t (id,a) values (168,39);
+insert into t (id,a) values (168,40);
+insert into t (id,a) values (168,41);
+insert into t (id,a) values (168,42);
+insert into t (id,a) values (168,43);
+insert into t (id,a) values (168,44);
+insert into t (id,a) values (168,45);
+insert into t (id,a) values (168,46);
+insert into t (id,a) values (168,47);
+insert into t (id,a) values (168,48);
+insert into t (id,a) values (168,49);
+insert into t (id,a) values (168,50);
+insert into t (id,a) values (168,51);
+insert into t (id,a) values (168,52);
+insert into t (id,a) values (168,53);
+insert into t (id,a) values (168,54);
+insert into t (id,a) values (168,55);
+insert into t (id,a) values (168,56);
+insert into t (id,a) values (168,57);
+insert into t (id,a) values (168,58);
+insert into t (id,a) values (168,59);
+insert into t (id,a) values (168,60);
+insert into t (id,a) values (168,61);
+insert into t (id,a) values (168,62);
+insert into t (id,a) values (168,63);
+insert into t (id,a) values (168,64);
+insert into t (id,a) values (168,65);
+insert into t (id,a) values (168,66);
+insert into t (id,a) values (168,67);
+insert into t (id,a) values (168,68);
+insert into t (id,a) values (168,69);
+insert into t (id,a) values (168,70);
+insert into t (id,a) values (168,71);
+insert into t (id,a) values (168,72);
+insert into t (id,a) values (168,73);
+insert into t (id,a) values (168,74);
+insert into t (id,a) values (168,75);
+insert into t (id,a) values (168,76);
+insert into t (id,a) values (168,77);
+insert into t (id,a) values (168,78);
+insert into t (id,a) values (168,79);
+insert into t (id,a) values (168,80);
+insert into t (id,a) values (168,81);
+insert into t (id,a) values (168,82);
+insert into t (id,a) values (168,83);
+insert into t (id,a) values (168,84);
+insert into t (id,a) values (168,85);
+insert into t (id,a) values (168,86);
+insert into t (id,a) values (168,87);
+insert into t (id,a) values (168,88);
+insert into t (id,a) values (168,89);
+insert into t (id,a) values (168,90);
+insert into t (id,a) values (168,91);
+insert into t (id,a) values (168,92);
+insert into t (id,a) values (168,93);
+insert into t (id,a) values (168,94);
+insert into t (id,a) values (168,95);
+insert into t (id,a) values (168,96);
+insert into t (id,a) values (168,97);
+insert into t (id,a) values (168,98);
+insert into t (id,a) values (168,99);
+insert into t (id,a) values (169,0);
+insert into t (id,a) values (169,1);
+insert into t (id,a) values (169,2);
+insert into t (id,a) values (169,3);
+insert into t (id,a) values (169,4);
+insert into t (id,a) values (169,5);
+insert into t (id,a) values (169,6);
+insert into t (id,a) values (169,7);
+insert into t (id,a) values (169,8);
+insert into t (id,a) values (169,9);
+insert into t (id,a) values (169,10);
+insert into t (id,a) values (169,11);
+insert into t (id,a) values (169,12);
+insert into t (id,a) values (169,13);
+insert into t (id,a) values (169,14);
+insert into t (id,a) values (169,15);
+insert into t (id,a) values (169,16);
+insert into t (id,a) values (169,17);
+insert into t (id,a) values (169,18);
+insert into t (id,a) values (169,19);
+insert into t (id,a) values (169,20);
+insert into t (id,a) values (169,21);
+insert into t (id,a) values (169,22);
+insert into t (id,a) values (169,23);
+insert into t (id,a) values (169,24);
+insert into t (id,a) values (169,25);
+insert into t (id,a) values (169,26);
+insert into t (id,a) values (169,27);
+insert into t (id,a) values (169,28);
+insert into t (id,a) values (169,29);
+insert into t (id,a) values (169,30);
+insert into t (id,a) values (169,31);
+insert into t (id,a) values (169,32);
+insert into t (id,a) values (169,33);
+insert into t (id,a) values (169,34);
+insert into t (id,a) values (169,35);
+insert into t (id,a) values (169,36);
+insert into t (id,a) values (169,37);
+insert into t (id,a) values (169,38);
+insert into t (id,a) values (169,39);
+insert into t (id,a) values (169,40);
+insert into t (id,a) values (169,41);
+insert into t (id,a) values (169,42);
+insert into t (id,a) values (169,43);
+insert into t (id,a) values (169,44);
+insert into t (id,a) values (169,45);
+insert into t (id,a) values (169,46);
+insert into t (id,a) values (169,47);
+insert into t (id,a) values (169,48);
+insert into t (id,a) values (169,49);
+insert into t (id,a) values (169,50);
+insert into t (id,a) values (169,51);
+insert into t (id,a) values (169,52);
+insert into t (id,a) values (169,53);
+insert into t (id,a) values (169,54);
+insert into t (id,a) values (169,55);
+insert into t (id,a) values (169,56);
+insert into t (id,a) values (169,57);
+insert into t (id,a) values (169,58);
+insert into t (id,a) values (169,59);
+insert into t (id,a) values (169,60);
+insert into t (id,a) values (169,61);
+insert into t (id,a) values (169,62);
+insert into t (id,a) values (169,63);
+insert into t (id,a) values (169,64);
+insert into t (id,a) values (169,65);
+insert into t (id,a) values (169,66);
+insert into t (id,a) values (169,67);
+insert into t (id,a) values (169,68);
+insert into t (id,a) values (169,69);
+insert into t (id,a) values (169,70);
+insert into t (id,a) values (169,71);
+insert into t (id,a) values (169,72);
+insert into t (id,a) values (169,73);
+insert into t (id,a) values (169,74);
+insert into t (id,a) values (169,75);
+insert into t (id,a) values (169,76);
+insert into t (id,a) values (169,77);
+insert into t (id,a) values (169,78);
+insert into t (id,a) values (169,79);
+insert into t (id,a) values (169,80);
+insert into t (id,a) values (169,81);
+insert into t (id,a) values (169,82);
+insert into t (id,a) values (169,83);
+insert into t (id,a) values (169,84);
+insert into t (id,a) values (169,85);
+insert into t (id,a) values (169,86);
+insert into t (id,a) values (169,87);
+insert into t (id,a) values (169,88);
+insert into t (id,a) values (169,89);
+insert into t (id,a) values (169,90);
+insert into t (id,a) values (169,91);
+insert into t (id,a) values (169,92);
+insert into t (id,a) values (169,93);
+insert into t (id,a) values (169,94);
+insert into t (id,a) values (169,95);
+insert into t (id,a) values (169,96);
+insert into t (id,a) values (169,97);
+insert into t (id,a) values (169,98);
+insert into t (id,a) values (169,99);
+insert into t (id,a) values (170,0);
+insert into t (id,a) values (170,1);
+insert into t (id,a) values (170,2);
+insert into t (id,a) values (170,3);
+insert into t (id,a) values (170,4);
+insert into t (id,a) values (170,5);
+insert into t (id,a) values (170,6);
+insert into t (id,a) values (170,7);
+insert into t (id,a) values (170,8);
+insert into t (id,a) values (170,9);
+insert into t (id,a) values (170,10);
+insert into t (id,a) values (170,11);
+insert into t (id,a) values (170,12);
+insert into t (id,a) values (170,13);
+insert into t (id,a) values (170,14);
+insert into t (id,a) values (170,15);
+insert into t (id,a) values (170,16);
+insert into t (id,a) values (170,17);
+insert into t (id,a) values (170,18);
+insert into t (id,a) values (170,19);
+insert into t (id,a) values (170,20);
+insert into t (id,a) values (170,21);
+insert into t (id,a) values (170,22);
+insert into t (id,a) values (170,23);
+insert into t (id,a) values (170,24);
+insert into t (id,a) values (170,25);
+insert into t (id,a) values (170,26);
+insert into t (id,a) values (170,27);
+insert into t (id,a) values (170,28);
+insert into t (id,a) values (170,29);
+insert into t (id,a) values (170,30);
+insert into t (id,a) values (170,31);
+insert into t (id,a) values (170,32);
+insert into t (id,a) values (170,33);
+insert into t (id,a) values (170,34);
+insert into t (id,a) values (170,35);
+insert into t (id,a) values (170,36);
+insert into t (id,a) values (170,37);
+insert into t (id,a) values (170,38);
+insert into t (id,a) values (170,39);
+insert into t (id,a) values (170,40);
+insert into t (id,a) values (170,41);
+insert into t (id,a) values (170,42);
+insert into t (id,a) values (170,43);
+insert into t (id,a) values (170,44);
+insert into t (id,a) values (170,45);
+insert into t (id,a) values (170,46);
+insert into t (id,a) values (170,47);
+insert into t (id,a) values (170,48);
+insert into t (id,a) values (170,49);
+insert into t (id,a) values (170,50);
+insert into t (id,a) values (170,51);
+insert into t (id,a) values (170,52);
+insert into t (id,a) values (170,53);
+insert into t (id,a) values (170,54);
+insert into t (id,a) values (170,55);
+insert into t (id,a) values (170,56);
+insert into t (id,a) values (170,57);
+insert into t (id,a) values (170,58);
+insert into t (id,a) values (170,59);
+insert into t (id,a) values (170,60);
+insert into t (id,a) values (170,61);
+insert into t (id,a) values (170,62);
+insert into t (id,a) values (170,63);
+insert into t (id,a) values (170,64);
+insert into t (id,a) values (170,65);
+insert into t (id,a) values (170,66);
+insert into t (id,a) values (170,67);
+insert into t (id,a) values (170,68);
+insert into t (id,a) values (170,69);
+insert into t (id,a) values (170,70);
+insert into t (id,a) values (170,71);
+insert into t (id,a) values (170,72);
+insert into t (id,a) values (170,73);
+insert into t (id,a) values (170,74);
+insert into t (id,a) values (170,75);
+insert into t (id,a) values (170,76);
+insert into t (id,a) values (170,77);
+insert into t (id,a) values (170,78);
+insert into t (id,a) values (170,79);
+insert into t (id,a) values (170,80);
+insert into t (id,a) values (170,81);
+insert into t (id,a) values (170,82);
+insert into t (id,a) values (170,83);
+insert into t (id,a) values (170,84);
+insert into t (id,a) values (170,85);
+insert into t (id,a) values (170,86);
+insert into t (id,a) values (170,87);
+insert into t (id,a) values (170,88);
+insert into t (id,a) values (170,89);
+insert into t (id,a) values (170,90);
+insert into t (id,a) values (170,91);
+insert into t (id,a) values (170,92);
+insert into t (id,a) values (170,93);
+insert into t (id,a) values (170,94);
+insert into t (id,a) values (170,95);
+insert into t (id,a) values (170,96);
+insert into t (id,a) values (170,97);
+insert into t (id,a) values (170,98);
+insert into t (id,a) values (170,99);
+insert into t (id,a) values (171,0);
+insert into t (id,a) values (171,1);
+insert into t (id,a) values (171,2);
+insert into t (id,a) values (171,3);
+insert into t (id,a) values (171,4);
+insert into t (id,a) values (171,5);
+insert into t (id,a) values (171,6);
+insert into t (id,a) values (171,7);
+insert into t (id,a) values (171,8);
+insert into t (id,a) values (171,9);
+insert into t (id,a) values (171,10);
+insert into t (id,a) values (171,11);
+insert into t (id,a) values (171,12);
+insert into t (id,a) values (171,13);
+insert into t (id,a) values (171,14);
+insert into t (id,a) values (171,15);
+insert into t (id,a) values (171,16);
+insert into t (id,a) values (171,17);
+insert into t (id,a) values (171,18);
+insert into t (id,a) values (171,19);
+insert into t (id,a) values (171,20);
+insert into t (id,a) values (171,21);
+insert into t (id,a) values (171,22);
+insert into t (id,a) values (171,23);
+insert into t (id,a) values (171,24);
+insert into t (id,a) values (171,25);
+insert into t (id,a) values (171,26);
+insert into t (id,a) values (171,27);
+insert into t (id,a) values (171,28);
+insert into t (id,a) values (171,29);
+insert into t (id,a) values (171,30);
+insert into t (id,a) values (171,31);
+insert into t (id,a) values (171,32);
+insert into t (id,a) values (171,33);
+insert into t (id,a) values (171,34);
+insert into t (id,a) values (171,35);
+insert into t (id,a) values (171,36);
+insert into t (id,a) values (171,37);
+insert into t (id,a) values (171,38);
+insert into t (id,a) values (171,39);
+insert into t (id,a) values (171,40);
+insert into t (id,a) values (171,41);
+insert into t (id,a) values (171,42);
+insert into t (id,a) values (171,43);
+insert into t (id,a) values (171,44);
+insert into t (id,a) values (171,45);
+insert into t (id,a) values (171,46);
+insert into t (id,a) values (171,47);
+insert into t (id,a) values (171,48);
+insert into t (id,a) values (171,49);
+insert into t (id,a) values (171,50);
+insert into t (id,a) values (171,51);
+insert into t (id,a) values (171,52);
+insert into t (id,a) values (171,53);
+insert into t (id,a) values (171,54);
+insert into t (id,a) values (171,55);
+insert into t (id,a) values (171,56);
+insert into t (id,a) values (171,57);
+insert into t (id,a) values (171,58);
+insert into t (id,a) values (171,59);
+insert into t (id,a) values (171,60);
+insert into t (id,a) values (171,61);
+insert into t (id,a) values (171,62);
+insert into t (id,a) values (171,63);
+insert into t (id,a) values (171,64);
+insert into t (id,a) values (171,65);
+insert into t (id,a) values (171,66);
+insert into t (id,a) values (171,67);
+insert into t (id,a) values (171,68);
+insert into t (id,a) values (171,69);
+insert into t (id,a) values (171,70);
+insert into t (id,a) values (171,71);
+insert into t (id,a) values (171,72);
+insert into t (id,a) values (171,73);
+insert into t (id,a) values (171,74);
+insert into t (id,a) values (171,75);
+insert into t (id,a) values (171,76);
+insert into t (id,a) values (171,77);
+insert into t (id,a) values (171,78);
+insert into t (id,a) values (171,79);
+insert into t (id,a) values (171,80);
+insert into t (id,a) values (171,81);
+insert into t (id,a) values (171,82);
+insert into t (id,a) values (171,83);
+insert into t (id,a) values (171,84);
+insert into t (id,a) values (171,85);
+insert into t (id,a) values (171,86);
+insert into t (id,a) values (171,87);
+insert into t (id,a) values (171,88);
+insert into t (id,a) values (171,89);
+insert into t (id,a) values (171,90);
+insert into t (id,a) values (171,91);
+insert into t (id,a) values (171,92);
+insert into t (id,a) values (171,93);
+insert into t (id,a) values (171,94);
+insert into t (id,a) values (171,95);
+insert into t (id,a) values (171,96);
+insert into t (id,a) values (171,97);
+insert into t (id,a) values (171,98);
+insert into t (id,a) values (171,99);
+insert into t (id,a) values (172,0);
+insert into t (id,a) values (172,1);
+insert into t (id,a) values (172,2);
+insert into t (id,a) values (172,3);
+insert into t (id,a) values (172,4);
+insert into t (id,a) values (172,5);
+insert into t (id,a) values (172,6);
+insert into t (id,a) values (172,7);
+insert into t (id,a) values (172,8);
+insert into t (id,a) values (172,9);
+insert into t (id,a) values (172,10);
+insert into t (id,a) values (172,11);
+insert into t (id,a) values (172,12);
+insert into t (id,a) values (172,13);
+insert into t (id,a) values (172,14);
+insert into t (id,a) values (172,15);
+insert into t (id,a) values (172,16);
+insert into t (id,a) values (172,17);
+insert into t (id,a) values (172,18);
+insert into t (id,a) values (172,19);
+insert into t (id,a) values (172,20);
+insert into t (id,a) values (172,21);
+insert into t (id,a) values (172,22);
+insert into t (id,a) values (172,23);
+insert into t (id,a) values (172,24);
+insert into t (id,a) values (172,25);
+insert into t (id,a) values (172,26);
+insert into t (id,a) values (172,27);
+insert into t (id,a) values (172,28);
+insert into t (id,a) values (172,29);
+insert into t (id,a) values (172,30);
+insert into t (id,a) values (172,31);
+insert into t (id,a) values (172,32);
+insert into t (id,a) values (172,33);
+insert into t (id,a) values (172,34);
+insert into t (id,a) values (172,35);
+insert into t (id,a) values (172,36);
+insert into t (id,a) values (172,37);
+insert into t (id,a) values (172,38);
+insert into t (id,a) values (172,39);
+insert into t (id,a) values (172,40);
+insert into t (id,a) values (172,41);
+insert into t (id,a) values (172,42);
+insert into t (id,a) values (172,43);
+insert into t (id,a) values (172,44);
+insert into t (id,a) values (172,45);
+insert into t (id,a) values (172,46);
+insert into t (id,a) values (172,47);
+insert into t (id,a) values (172,48);
+insert into t (id,a) values (172,49);
+insert into t (id,a) values (172,50);
+insert into t (id,a) values (172,51);
+insert into t (id,a) values (172,52);
+insert into t (id,a) values (172,53);
+insert into t (id,a) values (172,54);
+insert into t (id,a) values (172,55);
+insert into t (id,a) values (172,56);
+insert into t (id,a) values (172,57);
+insert into t (id,a) values (172,58);
+insert into t (id,a) values (172,59);
+insert into t (id,a) values (172,60);
+insert into t (id,a) values (172,61);
+insert into t (id,a) values (172,62);
+insert into t (id,a) values (172,63);
+insert into t (id,a) values (172,64);
+insert into t (id,a) values (172,65);
+insert into t (id,a) values (172,66);
+insert into t (id,a) values (172,67);
+insert into t (id,a) values (172,68);
+insert into t (id,a) values (172,69);
+insert into t (id,a) values (172,70);
+insert into t (id,a) values (172,71);
+insert into t (id,a) values (172,72);
+insert into t (id,a) values (172,73);
+insert into t (id,a) values (172,74);
+insert into t (id,a) values (172,75);
+insert into t (id,a) values (172,76);
+insert into t (id,a) values (172,77);
+insert into t (id,a) values (172,78);
+insert into t (id,a) values (172,79);
+insert into t (id,a) values (172,80);
+insert into t (id,a) values (172,81);
+insert into t (id,a) values (172,82);
+insert into t (id,a) values (172,83);
+insert into t (id,a) values (172,84);
+insert into t (id,a) values (172,85);
+insert into t (id,a) values (172,86);
+insert into t (id,a) values (172,87);
+insert into t (id,a) values (172,88);
+insert into t (id,a) values (172,89);
+insert into t (id,a) values (172,90);
+insert into t (id,a) values (172,91);
+insert into t (id,a) values (172,92);
+insert into t (id,a) values (172,93);
+insert into t (id,a) values (172,94);
+insert into t (id,a) values (172,95);
+insert into t (id,a) values (172,96);
+insert into t (id,a) values (172,97);
+insert into t (id,a) values (172,98);
+insert into t (id,a) values (172,99);
+insert into t (id,a) values (173,0);
+insert into t (id,a) values (173,1);
+insert into t (id,a) values (173,2);
+insert into t (id,a) values (173,3);
+insert into t (id,a) values (173,4);
+insert into t (id,a) values (173,5);
+insert into t (id,a) values (173,6);
+insert into t (id,a) values (173,7);
+insert into t (id,a) values (173,8);
+insert into t (id,a) values (173,9);
+insert into t (id,a) values (173,10);
+insert into t (id,a) values (173,11);
+insert into t (id,a) values (173,12);
+insert into t (id,a) values (173,13);
+insert into t (id,a) values (173,14);
+insert into t (id,a) values (173,15);
+insert into t (id,a) values (173,16);
+insert into t (id,a) values (173,17);
+insert into t (id,a) values (173,18);
+insert into t (id,a) values (173,19);
+insert into t (id,a) values (173,20);
+insert into t (id,a) values (173,21);
+insert into t (id,a) values (173,22);
+insert into t (id,a) values (173,23);
+insert into t (id,a) values (173,24);
+insert into t (id,a) values (173,25);
+insert into t (id,a) values (173,26);
+insert into t (id,a) values (173,27);
+insert into t (id,a) values (173,28);
+insert into t (id,a) values (173,29);
+insert into t (id,a) values (173,30);
+insert into t (id,a) values (173,31);
+insert into t (id,a) values (173,32);
+insert into t (id,a) values (173,33);
+insert into t (id,a) values (173,34);
+insert into t (id,a) values (173,35);
+insert into t (id,a) values (173,36);
+insert into t (id,a) values (173,37);
+insert into t (id,a) values (173,38);
+insert into t (id,a) values (173,39);
+insert into t (id,a) values (173,40);
+insert into t (id,a) values (173,41);
+insert into t (id,a) values (173,42);
+insert into t (id,a) values (173,43);
+insert into t (id,a) values (173,44);
+insert into t (id,a) values (173,45);
+insert into t (id,a) values (173,46);
+insert into t (id,a) values (173,47);
+insert into t (id,a) values (173,48);
+insert into t (id,a) values (173,49);
+insert into t (id,a) values (173,50);
+insert into t (id,a) values (173,51);
+insert into t (id,a) values (173,52);
+insert into t (id,a) values (173,53);
+insert into t (id,a) values (173,54);
+insert into t (id,a) values (173,55);
+insert into t (id,a) values (173,56);
+insert into t (id,a) values (173,57);
+insert into t (id,a) values (173,58);
+insert into t (id,a) values (173,59);
+insert into t (id,a) values (173,60);
+insert into t (id,a) values (173,61);
+insert into t (id,a) values (173,62);
+insert into t (id,a) values (173,63);
+insert into t (id,a) values (173,64);
+insert into t (id,a) values (173,65);
+insert into t (id,a) values (173,66);
+insert into t (id,a) values (173,67);
+insert into t (id,a) values (173,68);
+insert into t (id,a) values (173,69);
+insert into t (id,a) values (173,70);
+insert into t (id,a) values (173,71);
+insert into t (id,a) values (173,72);
+insert into t (id,a) values (173,73);
+insert into t (id,a) values (173,74);
+insert into t (id,a) values (173,75);
+insert into t (id,a) values (173,76);
+insert into t (id,a) values (173,77);
+insert into t (id,a) values (173,78);
+insert into t (id,a) values (173,79);
+insert into t (id,a) values (173,80);
+insert into t (id,a) values (173,81);
+insert into t (id,a) values (173,82);
+insert into t (id,a) values (173,83);
+insert into t (id,a) values (173,84);
+insert into t (id,a) values (173,85);
+insert into t (id,a) values (173,86);
+insert into t (id,a) values (173,87);
+insert into t (id,a) values (173,88);
+insert into t (id,a) values (173,89);
+insert into t (id,a) values (173,90);
+insert into t (id,a) values (173,91);
+insert into t (id,a) values (173,92);
+insert into t (id,a) values (173,93);
+insert into t (id,a) values (173,94);
+insert into t (id,a) values (173,95);
+insert into t (id,a) values (173,96);
+insert into t (id,a) values (173,97);
+insert into t (id,a) values (173,98);
+insert into t (id,a) values (173,99);
+insert into t (id,a) values (174,0);
+insert into t (id,a) values (174,1);
+insert into t (id,a) values (174,2);
+insert into t (id,a) values (174,3);
+insert into t (id,a) values (174,4);
+insert into t (id,a) values (174,5);
+insert into t (id,a) values (174,6);
+insert into t (id,a) values (174,7);
+insert into t (id,a) values (174,8);
+insert into t (id,a) values (174,9);
+insert into t (id,a) values (174,10);
+insert into t (id,a) values (174,11);
+insert into t (id,a) values (174,12);
+insert into t (id,a) values (174,13);
+insert into t (id,a) values (174,14);
+insert into t (id,a) values (174,15);
+insert into t (id,a) values (174,16);
+insert into t (id,a) values (174,17);
+insert into t (id,a) values (174,18);
+insert into t (id,a) values (174,19);
+insert into t (id,a) values (174,20);
+insert into t (id,a) values (174,21);
+insert into t (id,a) values (174,22);
+insert into t (id,a) values (174,23);
+insert into t (id,a) values (174,24);
+insert into t (id,a) values (174,25);
+insert into t (id,a) values (174,26);
+insert into t (id,a) values (174,27);
+insert into t (id,a) values (174,28);
+insert into t (id,a) values (174,29);
+insert into t (id,a) values (174,30);
+insert into t (id,a) values (174,31);
+insert into t (id,a) values (174,32);
+insert into t (id,a) values (174,33);
+insert into t (id,a) values (174,34);
+insert into t (id,a) values (174,35);
+insert into t (id,a) values (174,36);
+insert into t (id,a) values (174,37);
+insert into t (id,a) values (174,38);
+insert into t (id,a) values (174,39);
+insert into t (id,a) values (174,40);
+insert into t (id,a) values (174,41);
+insert into t (id,a) values (174,42);
+insert into t (id,a) values (174,43);
+insert into t (id,a) values (174,44);
+insert into t (id,a) values (174,45);
+insert into t (id,a) values (174,46);
+insert into t (id,a) values (174,47);
+insert into t (id,a) values (174,48);
+insert into t (id,a) values (174,49);
+insert into t (id,a) values (174,50);
+insert into t (id,a) values (174,51);
+insert into t (id,a) values (174,52);
+insert into t (id,a) values (174,53);
+insert into t (id,a) values (174,54);
+insert into t (id,a) values (174,55);
+insert into t (id,a) values (174,56);
+insert into t (id,a) values (174,57);
+insert into t (id,a) values (174,58);
+insert into t (id,a) values (174,59);
+insert into t (id,a) values (174,60);
+insert into t (id,a) values (174,61);
+insert into t (id,a) values (174,62);
+insert into t (id,a) values (174,63);
+insert into t (id,a) values (174,64);
+insert into t (id,a) values (174,65);
+insert into t (id,a) values (174,66);
+insert into t (id,a) values (174,67);
+insert into t (id,a) values (174,68);
+insert into t (id,a) values (174,69);
+insert into t (id,a) values (174,70);
+insert into t (id,a) values (174,71);
+insert into t (id,a) values (174,72);
+insert into t (id,a) values (174,73);
+insert into t (id,a) values (174,74);
+insert into t (id,a) values (174,75);
+insert into t (id,a) values (174,76);
+insert into t (id,a) values (174,77);
+insert into t (id,a) values (174,78);
+insert into t (id,a) values (174,79);
+insert into t (id,a) values (174,80);
+insert into t (id,a) values (174,81);
+insert into t (id,a) values (174,82);
+insert into t (id,a) values (174,83);
+insert into t (id,a) values (174,84);
+insert into t (id,a) values (174,85);
+insert into t (id,a) values (174,86);
+insert into t (id,a) values (174,87);
+insert into t (id,a) values (174,88);
+insert into t (id,a) values (174,89);
+insert into t (id,a) values (174,90);
+insert into t (id,a) values (174,91);
+insert into t (id,a) values (174,92);
+insert into t (id,a) values (174,93);
+insert into t (id,a) values (174,94);
+insert into t (id,a) values (174,95);
+insert into t (id,a) values (174,96);
+insert into t (id,a) values (174,97);
+insert into t (id,a) values (174,98);
+insert into t (id,a) values (174,99);
+insert into t (id,a) values (175,0);
+insert into t (id,a) values (175,1);
+insert into t (id,a) values (175,2);
+insert into t (id,a) values (175,3);
+insert into t (id,a) values (175,4);
+insert into t (id,a) values (175,5);
+insert into t (id,a) values (175,6);
+insert into t (id,a) values (175,7);
+insert into t (id,a) values (175,8);
+insert into t (id,a) values (175,9);
+insert into t (id,a) values (175,10);
+insert into t (id,a) values (175,11);
+insert into t (id,a) values (175,12);
+insert into t (id,a) values (175,13);
+insert into t (id,a) values (175,14);
+insert into t (id,a) values (175,15);
+insert into t (id,a) values (175,16);
+insert into t (id,a) values (175,17);
+insert into t (id,a) values (175,18);
+insert into t (id,a) values (175,19);
+insert into t (id,a) values (175,20);
+insert into t (id,a) values (175,21);
+insert into t (id,a) values (175,22);
+insert into t (id,a) values (175,23);
+insert into t (id,a) values (175,24);
+insert into t (id,a) values (175,25);
+insert into t (id,a) values (175,26);
+insert into t (id,a) values (175,27);
+insert into t (id,a) values (175,28);
+insert into t (id,a) values (175,29);
+insert into t (id,a) values (175,30);
+insert into t (id,a) values (175,31);
+insert into t (id,a) values (175,32);
+insert into t (id,a) values (175,33);
+insert into t (id,a) values (175,34);
+insert into t (id,a) values (175,35);
+insert into t (id,a) values (175,36);
+insert into t (id,a) values (175,37);
+insert into t (id,a) values (175,38);
+insert into t (id,a) values (175,39);
+insert into t (id,a) values (175,40);
+insert into t (id,a) values (175,41);
+insert into t (id,a) values (175,42);
+insert into t (id,a) values (175,43);
+insert into t (id,a) values (175,44);
+insert into t (id,a) values (175,45);
+insert into t (id,a) values (175,46);
+insert into t (id,a) values (175,47);
+insert into t (id,a) values (175,48);
+insert into t (id,a) values (175,49);
+insert into t (id,a) values (175,50);
+insert into t (id,a) values (175,51);
+insert into t (id,a) values (175,52);
+insert into t (id,a) values (175,53);
+insert into t (id,a) values (175,54);
+insert into t (id,a) values (175,55);
+insert into t (id,a) values (175,56);
+insert into t (id,a) values (175,57);
+insert into t (id,a) values (175,58);
+insert into t (id,a) values (175,59);
+insert into t (id,a) values (175,60);
+insert into t (id,a) values (175,61);
+insert into t (id,a) values (175,62);
+insert into t (id,a) values (175,63);
+insert into t (id,a) values (175,64);
+insert into t (id,a) values (175,65);
+insert into t (id,a) values (175,66);
+insert into t (id,a) values (175,67);
+insert into t (id,a) values (175,68);
+insert into t (id,a) values (175,69);
+insert into t (id,a) values (175,70);
+insert into t (id,a) values (175,71);
+insert into t (id,a) values (175,72);
+insert into t (id,a) values (175,73);
+insert into t (id,a) values (175,74);
+insert into t (id,a) values (175,75);
+insert into t (id,a) values (175,76);
+insert into t (id,a) values (175,77);
+insert into t (id,a) values (175,78);
+insert into t (id,a) values (175,79);
+insert into t (id,a) values (175,80);
+insert into t (id,a) values (175,81);
+insert into t (id,a) values (175,82);
+insert into t (id,a) values (175,83);
+insert into t (id,a) values (175,84);
+insert into t (id,a) values (175,85);
+insert into t (id,a) values (175,86);
+insert into t (id,a) values (175,87);
+insert into t (id,a) values (175,88);
+insert into t (id,a) values (175,89);
+insert into t (id,a) values (175,90);
+insert into t (id,a) values (175,91);
+insert into t (id,a) values (175,92);
+insert into t (id,a) values (175,93);
+insert into t (id,a) values (175,94);
+insert into t (id,a) values (175,95);
+insert into t (id,a) values (175,96);
+insert into t (id,a) values (175,97);
+insert into t (id,a) values (175,98);
+insert into t (id,a) values (175,99);
+insert into t (id,a) values (176,0);
+insert into t (id,a) values (176,1);
+insert into t (id,a) values (176,2);
+insert into t (id,a) values (176,3);
+insert into t (id,a) values (176,4);
+insert into t (id,a) values (176,5);
+insert into t (id,a) values (176,6);
+insert into t (id,a) values (176,7);
+insert into t (id,a) values (176,8);
+insert into t (id,a) values (176,9);
+insert into t (id,a) values (176,10);
+insert into t (id,a) values (176,11);
+insert into t (id,a) values (176,12);
+insert into t (id,a) values (176,13);
+insert into t (id,a) values (176,14);
+insert into t (id,a) values (176,15);
+insert into t (id,a) values (176,16);
+insert into t (id,a) values (176,17);
+insert into t (id,a) values (176,18);
+insert into t (id,a) values (176,19);
+insert into t (id,a) values (176,20);
+insert into t (id,a) values (176,21);
+insert into t (id,a) values (176,22);
+insert into t (id,a) values (176,23);
+insert into t (id,a) values (176,24);
+insert into t (id,a) values (176,25);
+insert into t (id,a) values (176,26);
+insert into t (id,a) values (176,27);
+insert into t (id,a) values (176,28);
+insert into t (id,a) values (176,29);
+insert into t (id,a) values (176,30);
+insert into t (id,a) values (176,31);
+insert into t (id,a) values (176,32);
+insert into t (id,a) values (176,33);
+insert into t (id,a) values (176,34);
+insert into t (id,a) values (176,35);
+insert into t (id,a) values (176,36);
+insert into t (id,a) values (176,37);
+insert into t (id,a) values (176,38);
+insert into t (id,a) values (176,39);
+insert into t (id,a) values (176,40);
+insert into t (id,a) values (176,41);
+insert into t (id,a) values (176,42);
+insert into t (id,a) values (176,43);
+insert into t (id,a) values (176,44);
+insert into t (id,a) values (176,45);
+insert into t (id,a) values (176,46);
+insert into t (id,a) values (176,47);
+insert into t (id,a) values (176,48);
+insert into t (id,a) values (176,49);
+insert into t (id,a) values (176,50);
+insert into t (id,a) values (176,51);
+insert into t (id,a) values (176,52);
+insert into t (id,a) values (176,53);
+insert into t (id,a) values (176,54);
+insert into t (id,a) values (176,55);
+insert into t (id,a) values (176,56);
+insert into t (id,a) values (176,57);
+insert into t (id,a) values (176,58);
+insert into t (id,a) values (176,59);
+insert into t (id,a) values (176,60);
+insert into t (id,a) values (176,61);
+insert into t (id,a) values (176,62);
+insert into t (id,a) values (176,63);
+insert into t (id,a) values (176,64);
+insert into t (id,a) values (176,65);
+insert into t (id,a) values (176,66);
+insert into t (id,a) values (176,67);
+insert into t (id,a) values (176,68);
+insert into t (id,a) values (176,69);
+insert into t (id,a) values (176,70);
+insert into t (id,a) values (176,71);
+insert into t (id,a) values (176,72);
+insert into t (id,a) values (176,73);
+insert into t (id,a) values (176,74);
+insert into t (id,a) values (176,75);
+insert into t (id,a) values (176,76);
+insert into t (id,a) values (176,77);
+insert into t (id,a) values (176,78);
+insert into t (id,a) values (176,79);
+insert into t (id,a) values (176,80);
+insert into t (id,a) values (176,81);
+insert into t (id,a) values (176,82);
+insert into t (id,a) values (176,83);
+insert into t (id,a) values (176,84);
+insert into t (id,a) values (176,85);
+insert into t (id,a) values (176,86);
+insert into t (id,a) values (176,87);
+insert into t (id,a) values (176,88);
+insert into t (id,a) values (176,89);
+insert into t (id,a) values (176,90);
+insert into t (id,a) values (176,91);
+insert into t (id,a) values (176,92);
+insert into t (id,a) values (176,93);
+insert into t (id,a) values (176,94);
+insert into t (id,a) values (176,95);
+insert into t (id,a) values (176,96);
+insert into t (id,a) values (176,97);
+insert into t (id,a) values (176,98);
+insert into t (id,a) values (176,99);
+insert into t (id,a) values (177,0);
+insert into t (id,a) values (177,1);
+insert into t (id,a) values (177,2);
+insert into t (id,a) values (177,3);
+insert into t (id,a) values (177,4);
+insert into t (id,a) values (177,5);
+insert into t (id,a) values (177,6);
+insert into t (id,a) values (177,7);
+insert into t (id,a) values (177,8);
+insert into t (id,a) values (177,9);
+insert into t (id,a) values (177,10);
+insert into t (id,a) values (177,11);
+insert into t (id,a) values (177,12);
+insert into t (id,a) values (177,13);
+insert into t (id,a) values (177,14);
+insert into t (id,a) values (177,15);
+insert into t (id,a) values (177,16);
+insert into t (id,a) values (177,17);
+insert into t (id,a) values (177,18);
+insert into t (id,a) values (177,19);
+insert into t (id,a) values (177,20);
+insert into t (id,a) values (177,21);
+insert into t (id,a) values (177,22);
+insert into t (id,a) values (177,23);
+insert into t (id,a) values (177,24);
+insert into t (id,a) values (177,25);
+insert into t (id,a) values (177,26);
+insert into t (id,a) values (177,27);
+insert into t (id,a) values (177,28);
+insert into t (id,a) values (177,29);
+insert into t (id,a) values (177,30);
+insert into t (id,a) values (177,31);
+insert into t (id,a) values (177,32);
+insert into t (id,a) values (177,33);
+insert into t (id,a) values (177,34);
+insert into t (id,a) values (177,35);
+insert into t (id,a) values (177,36);
+insert into t (id,a) values (177,37);
+insert into t (id,a) values (177,38);
+insert into t (id,a) values (177,39);
+insert into t (id,a) values (177,40);
+insert into t (id,a) values (177,41);
+insert into t (id,a) values (177,42);
+insert into t (id,a) values (177,43);
+insert into t (id,a) values (177,44);
+insert into t (id,a) values (177,45);
+insert into t (id,a) values (177,46);
+insert into t (id,a) values (177,47);
+insert into t (id,a) values (177,48);
+insert into t (id,a) values (177,49);
+insert into t (id,a) values (177,50);
+insert into t (id,a) values (177,51);
+insert into t (id,a) values (177,52);
+insert into t (id,a) values (177,53);
+insert into t (id,a) values (177,54);
+insert into t (id,a) values (177,55);
+insert into t (id,a) values (177,56);
+insert into t (id,a) values (177,57);
+insert into t (id,a) values (177,58);
+insert into t (id,a) values (177,59);
+insert into t (id,a) values (177,60);
+insert into t (id,a) values (177,61);
+insert into t (id,a) values (177,62);
+insert into t (id,a) values (177,63);
+insert into t (id,a) values (177,64);
+insert into t (id,a) values (177,65);
+insert into t (id,a) values (177,66);
+insert into t (id,a) values (177,67);
+insert into t (id,a) values (177,68);
+insert into t (id,a) values (177,69);
+insert into t (id,a) values (177,70);
+insert into t (id,a) values (177,71);
+insert into t (id,a) values (177,72);
+insert into t (id,a) values (177,73);
+insert into t (id,a) values (177,74);
+insert into t (id,a) values (177,75);
+insert into t (id,a) values (177,76);
+insert into t (id,a) values (177,77);
+insert into t (id,a) values (177,78);
+insert into t (id,a) values (177,79);
+insert into t (id,a) values (177,80);
+insert into t (id,a) values (177,81);
+insert into t (id,a) values (177,82);
+insert into t (id,a) values (177,83);
+insert into t (id,a) values (177,84);
+insert into t (id,a) values (177,85);
+insert into t (id,a) values (177,86);
+insert into t (id,a) values (177,87);
+insert into t (id,a) values (177,88);
+insert into t (id,a) values (177,89);
+insert into t (id,a) values (177,90);
+insert into t (id,a) values (177,91);
+insert into t (id,a) values (177,92);
+insert into t (id,a) values (177,93);
+insert into t (id,a) values (177,94);
+insert into t (id,a) values (177,95);
+insert into t (id,a) values (177,96);
+insert into t (id,a) values (177,97);
+insert into t (id,a) values (177,98);
+insert into t (id,a) values (177,99);
+insert into t (id,a) values (178,0);
+insert into t (id,a) values (178,1);
+insert into t (id,a) values (178,2);
+insert into t (id,a) values (178,3);
+insert into t (id,a) values (178,4);
+insert into t (id,a) values (178,5);
+insert into t (id,a) values (178,6);
+insert into t (id,a) values (178,7);
+insert into t (id,a) values (178,8);
+insert into t (id,a) values (178,9);
+insert into t (id,a) values (178,10);
+insert into t (id,a) values (178,11);
+insert into t (id,a) values (178,12);
+insert into t (id,a) values (178,13);
+insert into t (id,a) values (178,14);
+insert into t (id,a) values (178,15);
+insert into t (id,a) values (178,16);
+insert into t (id,a) values (178,17);
+insert into t (id,a) values (178,18);
+insert into t (id,a) values (178,19);
+insert into t (id,a) values (178,20);
+insert into t (id,a) values (178,21);
+insert into t (id,a) values (178,22);
+insert into t (id,a) values (178,23);
+insert into t (id,a) values (178,24);
+insert into t (id,a) values (178,25);
+insert into t (id,a) values (178,26);
+insert into t (id,a) values (178,27);
+insert into t (id,a) values (178,28);
+insert into t (id,a) values (178,29);
+insert into t (id,a) values (178,30);
+insert into t (id,a) values (178,31);
+insert into t (id,a) values (178,32);
+insert into t (id,a) values (178,33);
+insert into t (id,a) values (178,34);
+insert into t (id,a) values (178,35);
+insert into t (id,a) values (178,36);
+insert into t (id,a) values (178,37);
+insert into t (id,a) values (178,38);
+insert into t (id,a) values (178,39);
+insert into t (id,a) values (178,40);
+insert into t (id,a) values (178,41);
+insert into t (id,a) values (178,42);
+insert into t (id,a) values (178,43);
+insert into t (id,a) values (178,44);
+insert into t (id,a) values (178,45);
+insert into t (id,a) values (178,46);
+insert into t (id,a) values (178,47);
+insert into t (id,a) values (178,48);
+insert into t (id,a) values (178,49);
+insert into t (id,a) values (178,50);
+insert into t (id,a) values (178,51);
+insert into t (id,a) values (178,52);
+insert into t (id,a) values (178,53);
+insert into t (id,a) values (178,54);
+insert into t (id,a) values (178,55);
+insert into t (id,a) values (178,56);
+insert into t (id,a) values (178,57);
+insert into t (id,a) values (178,58);
+insert into t (id,a) values (178,59);
+insert into t (id,a) values (178,60);
+insert into t (id,a) values (178,61);
+insert into t (id,a) values (178,62);
+insert into t (id,a) values (178,63);
+insert into t (id,a) values (178,64);
+insert into t (id,a) values (178,65);
+insert into t (id,a) values (178,66);
+insert into t (id,a) values (178,67);
+insert into t (id,a) values (178,68);
+insert into t (id,a) values (178,69);
+insert into t (id,a) values (178,70);
+insert into t (id,a) values (178,71);
+insert into t (id,a) values (178,72);
+insert into t (id,a) values (178,73);
+insert into t (id,a) values (178,74);
+insert into t (id,a) values (178,75);
+insert into t (id,a) values (178,76);
+insert into t (id,a) values (178,77);
+insert into t (id,a) values (178,78);
+insert into t (id,a) values (178,79);
+insert into t (id,a) values (178,80);
+insert into t (id,a) values (178,81);
+insert into t (id,a) values (178,82);
+insert into t (id,a) values (178,83);
+insert into t (id,a) values (178,84);
+insert into t (id,a) values (178,85);
+insert into t (id,a) values (178,86);
+insert into t (id,a) values (178,87);
+insert into t (id,a) values (178,88);
+insert into t (id,a) values (178,89);
+insert into t (id,a) values (178,90);
+insert into t (id,a) values (178,91);
+insert into t (id,a) values (178,92);
+insert into t (id,a) values (178,93);
+insert into t (id,a) values (178,94);
+insert into t (id,a) values (178,95);
+insert into t (id,a) values (178,96);
+insert into t (id,a) values (178,97);
+insert into t (id,a) values (178,98);
+insert into t (id,a) values (178,99);
+insert into t (id,a) values (179,0);
+insert into t (id,a) values (179,1);
+insert into t (id,a) values (179,2);
+insert into t (id,a) values (179,3);
+insert into t (id,a) values (179,4);
+insert into t (id,a) values (179,5);
+insert into t (id,a) values (179,6);
+insert into t (id,a) values (179,7);
+insert into t (id,a) values (179,8);
+insert into t (id,a) values (179,9);
+insert into t (id,a) values (179,10);
+insert into t (id,a) values (179,11);
+insert into t (id,a) values (179,12);
+insert into t (id,a) values (179,13);
+insert into t (id,a) values (179,14);
+insert into t (id,a) values (179,15);
+insert into t (id,a) values (179,16);
+insert into t (id,a) values (179,17);
+insert into t (id,a) values (179,18);
+insert into t (id,a) values (179,19);
+insert into t (id,a) values (179,20);
+insert into t (id,a) values (179,21);
+insert into t (id,a) values (179,22);
+insert into t (id,a) values (179,23);
+insert into t (id,a) values (179,24);
+insert into t (id,a) values (179,25);
+insert into t (id,a) values (179,26);
+insert into t (id,a) values (179,27);
+insert into t (id,a) values (179,28);
+insert into t (id,a) values (179,29);
+insert into t (id,a) values (179,30);
+insert into t (id,a) values (179,31);
+insert into t (id,a) values (179,32);
+insert into t (id,a) values (179,33);
+insert into t (id,a) values (179,34);
+insert into t (id,a) values (179,35);
+insert into t (id,a) values (179,36);
+insert into t (id,a) values (179,37);
+insert into t (id,a) values (179,38);
+insert into t (id,a) values (179,39);
+insert into t (id,a) values (179,40);
+insert into t (id,a) values (179,41);
+insert into t (id,a) values (179,42);
+insert into t (id,a) values (179,43);
+insert into t (id,a) values (179,44);
+insert into t (id,a) values (179,45);
+insert into t (id,a) values (179,46);
+insert into t (id,a) values (179,47);
+insert into t (id,a) values (179,48);
+insert into t (id,a) values (179,49);
+insert into t (id,a) values (179,50);
+insert into t (id,a) values (179,51);
+insert into t (id,a) values (179,52);
+insert into t (id,a) values (179,53);
+insert into t (id,a) values (179,54);
+insert into t (id,a) values (179,55);
+insert into t (id,a) values (179,56);
+insert into t (id,a) values (179,57);
+insert into t (id,a) values (179,58);
+insert into t (id,a) values (179,59);
+insert into t (id,a) values (179,60);
+insert into t (id,a) values (179,61);
+insert into t (id,a) values (179,62);
+insert into t (id,a) values (179,63);
+insert into t (id,a) values (179,64);
+insert into t (id,a) values (179,65);
+insert into t (id,a) values (179,66);
+insert into t (id,a) values (179,67);
+insert into t (id,a) values (179,68);
+insert into t (id,a) values (179,69);
+insert into t (id,a) values (179,70);
+insert into t (id,a) values (179,71);
+insert into t (id,a) values (179,72);
+insert into t (id,a) values (179,73);
+insert into t (id,a) values (179,74);
+insert into t (id,a) values (179,75);
+insert into t (id,a) values (179,76);
+insert into t (id,a) values (179,77);
+insert into t (id,a) values (179,78);
+insert into t (id,a) values (179,79);
+insert into t (id,a) values (179,80);
+insert into t (id,a) values (179,81);
+insert into t (id,a) values (179,82);
+insert into t (id,a) values (179,83);
+insert into t (id,a) values (179,84);
+insert into t (id,a) values (179,85);
+insert into t (id,a) values (179,86);
+insert into t (id,a) values (179,87);
+insert into t (id,a) values (179,88);
+insert into t (id,a) values (179,89);
+insert into t (id,a) values (179,90);
+insert into t (id,a) values (179,91);
+insert into t (id,a) values (179,92);
+insert into t (id,a) values (179,93);
+insert into t (id,a) values (179,94);
+insert into t (id,a) values (179,95);
+insert into t (id,a) values (179,96);
+insert into t (id,a) values (179,97);
+insert into t (id,a) values (179,98);
+insert into t (id,a) values (179,99);
+insert into t (id,a) values (180,0);
+insert into t (id,a) values (180,1);
+insert into t (id,a) values (180,2);
+insert into t (id,a) values (180,3);
+insert into t (id,a) values (180,4);
+insert into t (id,a) values (180,5);
+insert into t (id,a) values (180,6);
+insert into t (id,a) values (180,7);
+insert into t (id,a) values (180,8);
+insert into t (id,a) values (180,9);
+insert into t (id,a) values (180,10);
+insert into t (id,a) values (180,11);
+insert into t (id,a) values (180,12);
+insert into t (id,a) values (180,13);
+insert into t (id,a) values (180,14);
+insert into t (id,a) values (180,15);
+insert into t (id,a) values (180,16);
+insert into t (id,a) values (180,17);
+insert into t (id,a) values (180,18);
+insert into t (id,a) values (180,19);
+insert into t (id,a) values (180,20);
+insert into t (id,a) values (180,21);
+insert into t (id,a) values (180,22);
+insert into t (id,a) values (180,23);
+insert into t (id,a) values (180,24);
+insert into t (id,a) values (180,25);
+insert into t (id,a) values (180,26);
+insert into t (id,a) values (180,27);
+insert into t (id,a) values (180,28);
+insert into t (id,a) values (180,29);
+insert into t (id,a) values (180,30);
+insert into t (id,a) values (180,31);
+insert into t (id,a) values (180,32);
+insert into t (id,a) values (180,33);
+insert into t (id,a) values (180,34);
+insert into t (id,a) values (180,35);
+insert into t (id,a) values (180,36);
+insert into t (id,a) values (180,37);
+insert into t (id,a) values (180,38);
+insert into t (id,a) values (180,39);
+insert into t (id,a) values (180,40);
+insert into t (id,a) values (180,41);
+insert into t (id,a) values (180,42);
+insert into t (id,a) values (180,43);
+insert into t (id,a) values (180,44);
+insert into t (id,a) values (180,45);
+insert into t (id,a) values (180,46);
+insert into t (id,a) values (180,47);
+insert into t (id,a) values (180,48);
+insert into t (id,a) values (180,49);
+insert into t (id,a) values (180,50);
+insert into t (id,a) values (180,51);
+insert into t (id,a) values (180,52);
+insert into t (id,a) values (180,53);
+insert into t (id,a) values (180,54);
+insert into t (id,a) values (180,55);
+insert into t (id,a) values (180,56);
+insert into t (id,a) values (180,57);
+insert into t (id,a) values (180,58);
+insert into t (id,a) values (180,59);
+insert into t (id,a) values (180,60);
+insert into t (id,a) values (180,61);
+insert into t (id,a) values (180,62);
+insert into t (id,a) values (180,63);
+insert into t (id,a) values (180,64);
+insert into t (id,a) values (180,65);
+insert into t (id,a) values (180,66);
+insert into t (id,a) values (180,67);
+insert into t (id,a) values (180,68);
+insert into t (id,a) values (180,69);
+insert into t (id,a) values (180,70);
+insert into t (id,a) values (180,71);
+insert into t (id,a) values (180,72);
+insert into t (id,a) values (180,73);
+insert into t (id,a) values (180,74);
+insert into t (id,a) values (180,75);
+insert into t (id,a) values (180,76);
+insert into t (id,a) values (180,77);
+insert into t (id,a) values (180,78);
+insert into t (id,a) values (180,79);
+insert into t (id,a) values (180,80);
+insert into t (id,a) values (180,81);
+insert into t (id,a) values (180,82);
+insert into t (id,a) values (180,83);
+insert into t (id,a) values (180,84);
+insert into t (id,a) values (180,85);
+insert into t (id,a) values (180,86);
+insert into t (id,a) values (180,87);
+insert into t (id,a) values (180,88);
+insert into t (id,a) values (180,89);
+insert into t (id,a) values (180,90);
+insert into t (id,a) values (180,91);
+insert into t (id,a) values (180,92);
+insert into t (id,a) values (180,93);
+insert into t (id,a) values (180,94);
+insert into t (id,a) values (180,95);
+insert into t (id,a) values (180,96);
+insert into t (id,a) values (180,97);
+insert into t (id,a) values (180,98);
+insert into t (id,a) values (180,99);
+insert into t (id,a) values (181,0);
+insert into t (id,a) values (181,1);
+insert into t (id,a) values (181,2);
+insert into t (id,a) values (181,3);
+insert into t (id,a) values (181,4);
+insert into t (id,a) values (181,5);
+insert into t (id,a) values (181,6);
+insert into t (id,a) values (181,7);
+insert into t (id,a) values (181,8);
+insert into t (id,a) values (181,9);
+insert into t (id,a) values (181,10);
+insert into t (id,a) values (181,11);
+insert into t (id,a) values (181,12);
+insert into t (id,a) values (181,13);
+insert into t (id,a) values (181,14);
+insert into t (id,a) values (181,15);
+insert into t (id,a) values (181,16);
+insert into t (id,a) values (181,17);
+insert into t (id,a) values (181,18);
+insert into t (id,a) values (181,19);
+insert into t (id,a) values (181,20);
+insert into t (id,a) values (181,21);
+insert into t (id,a) values (181,22);
+insert into t (id,a) values (181,23);
+insert into t (id,a) values (181,24);
+insert into t (id,a) values (181,25);
+insert into t (id,a) values (181,26);
+insert into t (id,a) values (181,27);
+insert into t (id,a) values (181,28);
+insert into t (id,a) values (181,29);
+insert into t (id,a) values (181,30);
+insert into t (id,a) values (181,31);
+insert into t (id,a) values (181,32);
+insert into t (id,a) values (181,33);
+insert into t (id,a) values (181,34);
+insert into t (id,a) values (181,35);
+insert into t (id,a) values (181,36);
+insert into t (id,a) values (181,37);
+insert into t (id,a) values (181,38);
+insert into t (id,a) values (181,39);
+insert into t (id,a) values (181,40);
+insert into t (id,a) values (181,41);
+insert into t (id,a) values (181,42);
+insert into t (id,a) values (181,43);
+insert into t (id,a) values (181,44);
+insert into t (id,a) values (181,45);
+insert into t (id,a) values (181,46);
+insert into t (id,a) values (181,47);
+insert into t (id,a) values (181,48);
+insert into t (id,a) values (181,49);
+insert into t (id,a) values (181,50);
+insert into t (id,a) values (181,51);
+insert into t (id,a) values (181,52);
+insert into t (id,a) values (181,53);
+insert into t (id,a) values (181,54);
+insert into t (id,a) values (181,55);
+insert into t (id,a) values (181,56);
+insert into t (id,a) values (181,57);
+insert into t (id,a) values (181,58);
+insert into t (id,a) values (181,59);
+insert into t (id,a) values (181,60);
+insert into t (id,a) values (181,61);
+insert into t (id,a) values (181,62);
+insert into t (id,a) values (181,63);
+insert into t (id,a) values (181,64);
+insert into t (id,a) values (181,65);
+insert into t (id,a) values (181,66);
+insert into t (id,a) values (181,67);
+insert into t (id,a) values (181,68);
+insert into t (id,a) values (181,69);
+insert into t (id,a) values (181,70);
+insert into t (id,a) values (181,71);
+insert into t (id,a) values (181,72);
+insert into t (id,a) values (181,73);
+insert into t (id,a) values (181,74);
+insert into t (id,a) values (181,75);
+insert into t (id,a) values (181,76);
+insert into t (id,a) values (181,77);
+insert into t (id,a) values (181,78);
+insert into t (id,a) values (181,79);
+insert into t (id,a) values (181,80);
+insert into t (id,a) values (181,81);
+insert into t (id,a) values (181,82);
+insert into t (id,a) values (181,83);
+insert into t (id,a) values (181,84);
+insert into t (id,a) values (181,85);
+insert into t (id,a) values (181,86);
+insert into t (id,a) values (181,87);
+insert into t (id,a) values (181,88);
+insert into t (id,a) values (181,89);
+insert into t (id,a) values (181,90);
+insert into t (id,a) values (181,91);
+insert into t (id,a) values (181,92);
+insert into t (id,a) values (181,93);
+insert into t (id,a) values (181,94);
+insert into t (id,a) values (181,95);
+insert into t (id,a) values (181,96);
+insert into t (id,a) values (181,97);
+insert into t (id,a) values (181,98);
+insert into t (id,a) values (181,99);
+insert into t (id,a) values (182,0);
+insert into t (id,a) values (182,1);
+insert into t (id,a) values (182,2);
+insert into t (id,a) values (182,3);
+insert into t (id,a) values (182,4);
+insert into t (id,a) values (182,5);
+insert into t (id,a) values (182,6);
+insert into t (id,a) values (182,7);
+insert into t (id,a) values (182,8);
+insert into t (id,a) values (182,9);
+insert into t (id,a) values (182,10);
+insert into t (id,a) values (182,11);
+insert into t (id,a) values (182,12);
+insert into t (id,a) values (182,13);
+insert into t (id,a) values (182,14);
+insert into t (id,a) values (182,15);
+insert into t (id,a) values (182,16);
+insert into t (id,a) values (182,17);
+insert into t (id,a) values (182,18);
+insert into t (id,a) values (182,19);
+insert into t (id,a) values (182,20);
+insert into t (id,a) values (182,21);
+insert into t (id,a) values (182,22);
+insert into t (id,a) values (182,23);
+insert into t (id,a) values (182,24);
+insert into t (id,a) values (182,25);
+insert into t (id,a) values (182,26);
+insert into t (id,a) values (182,27);
+insert into t (id,a) values (182,28);
+insert into t (id,a) values (182,29);
+insert into t (id,a) values (182,30);
+insert into t (id,a) values (182,31);
+insert into t (id,a) values (182,32);
+insert into t (id,a) values (182,33);
+insert into t (id,a) values (182,34);
+insert into t (id,a) values (182,35);
+insert into t (id,a) values (182,36);
+insert into t (id,a) values (182,37);
+insert into t (id,a) values (182,38);
+insert into t (id,a) values (182,39);
+insert into t (id,a) values (182,40);
+insert into t (id,a) values (182,41);
+insert into t (id,a) values (182,42);
+insert into t (id,a) values (182,43);
+insert into t (id,a) values (182,44);
+insert into t (id,a) values (182,45);
+insert into t (id,a) values (182,46);
+insert into t (id,a) values (182,47);
+insert into t (id,a) values (182,48);
+insert into t (id,a) values (182,49);
+insert into t (id,a) values (182,50);
+insert into t (id,a) values (182,51);
+insert into t (id,a) values (182,52);
+insert into t (id,a) values (182,53);
+insert into t (id,a) values (182,54);
+insert into t (id,a) values (182,55);
+insert into t (id,a) values (182,56);
+insert into t (id,a) values (182,57);
+insert into t (id,a) values (182,58);
+insert into t (id,a) values (182,59);
+insert into t (id,a) values (182,60);
+insert into t (id,a) values (182,61);
+insert into t (id,a) values (182,62);
+insert into t (id,a) values (182,63);
+insert into t (id,a) values (182,64);
+insert into t (id,a) values (182,65);
+insert into t (id,a) values (182,66);
+insert into t (id,a) values (182,67);
+insert into t (id,a) values (182,68);
+insert into t (id,a) values (182,69);
+insert into t (id,a) values (182,70);
+insert into t (id,a) values (182,71);
+insert into t (id,a) values (182,72);
+insert into t (id,a) values (182,73);
+insert into t (id,a) values (182,74);
+insert into t (id,a) values (182,75);
+insert into t (id,a) values (182,76);
+insert into t (id,a) values (182,77);
+insert into t (id,a) values (182,78);
+insert into t (id,a) values (182,79);
+insert into t (id,a) values (182,80);
+insert into t (id,a) values (182,81);
+insert into t (id,a) values (182,82);
+insert into t (id,a) values (182,83);
+insert into t (id,a) values (182,84);
+insert into t (id,a) values (182,85);
+insert into t (id,a) values (182,86);
+insert into t (id,a) values (182,87);
+insert into t (id,a) values (182,88);
+insert into t (id,a) values (182,89);
+insert into t (id,a) values (182,90);
+insert into t (id,a) values (182,91);
+insert into t (id,a) values (182,92);
+insert into t (id,a) values (182,93);
+insert into t (id,a) values (182,94);
+insert into t (id,a) values (182,95);
+insert into t (id,a) values (182,96);
+insert into t (id,a) values (182,97);
+insert into t (id,a) values (182,98);
+insert into t (id,a) values (182,99);
+insert into t (id,a) values (183,0);
+insert into t (id,a) values (183,1);
+insert into t (id,a) values (183,2);
+insert into t (id,a) values (183,3);
+insert into t (id,a) values (183,4);
+insert into t (id,a) values (183,5);
+insert into t (id,a) values (183,6);
+insert into t (id,a) values (183,7);
+insert into t (id,a) values (183,8);
+insert into t (id,a) values (183,9);
+insert into t (id,a) values (183,10);
+insert into t (id,a) values (183,11);
+insert into t (id,a) values (183,12);
+insert into t (id,a) values (183,13);
+insert into t (id,a) values (183,14);
+insert into t (id,a) values (183,15);
+insert into t (id,a) values (183,16);
+insert into t (id,a) values (183,17);
+insert into t (id,a) values (183,18);
+insert into t (id,a) values (183,19);
+insert into t (id,a) values (183,20);
+insert into t (id,a) values (183,21);
+insert into t (id,a) values (183,22);
+insert into t (id,a) values (183,23);
+insert into t (id,a) values (183,24);
+insert into t (id,a) values (183,25);
+insert into t (id,a) values (183,26);
+insert into t (id,a) values (183,27);
+insert into t (id,a) values (183,28);
+insert into t (id,a) values (183,29);
+insert into t (id,a) values (183,30);
+insert into t (id,a) values (183,31);
+insert into t (id,a) values (183,32);
+insert into t (id,a) values (183,33);
+insert into t (id,a) values (183,34);
+insert into t (id,a) values (183,35);
+insert into t (id,a) values (183,36);
+insert into t (id,a) values (183,37);
+insert into t (id,a) values (183,38);
+insert into t (id,a) values (183,39);
+insert into t (id,a) values (183,40);
+insert into t (id,a) values (183,41);
+insert into t (id,a) values (183,42);
+insert into t (id,a) values (183,43);
+insert into t (id,a) values (183,44);
+insert into t (id,a) values (183,45);
+insert into t (id,a) values (183,46);
+insert into t (id,a) values (183,47);
+insert into t (id,a) values (183,48);
+insert into t (id,a) values (183,49);
+insert into t (id,a) values (183,50);
+insert into t (id,a) values (183,51);
+insert into t (id,a) values (183,52);
+insert into t (id,a) values (183,53);
+insert into t (id,a) values (183,54);
+insert into t (id,a) values (183,55);
+insert into t (id,a) values (183,56);
+insert into t (id,a) values (183,57);
+insert into t (id,a) values (183,58);
+insert into t (id,a) values (183,59);
+insert into t (id,a) values (183,60);
+insert into t (id,a) values (183,61);
+insert into t (id,a) values (183,62);
+insert into t (id,a) values (183,63);
+insert into t (id,a) values (183,64);
+insert into t (id,a) values (183,65);
+insert into t (id,a) values (183,66);
+insert into t (id,a) values (183,67);
+insert into t (id,a) values (183,68);
+insert into t (id,a) values (183,69);
+insert into t (id,a) values (183,70);
+insert into t (id,a) values (183,71);
+insert into t (id,a) values (183,72);
+insert into t (id,a) values (183,73);
+insert into t (id,a) values (183,74);
+insert into t (id,a) values (183,75);
+insert into t (id,a) values (183,76);
+insert into t (id,a) values (183,77);
+insert into t (id,a) values (183,78);
+insert into t (id,a) values (183,79);
+insert into t (id,a) values (183,80);
+insert into t (id,a) values (183,81);
+insert into t (id,a) values (183,82);
+insert into t (id,a) values (183,83);
+insert into t (id,a) values (183,84);
+insert into t (id,a) values (183,85);
+insert into t (id,a) values (183,86);
+insert into t (id,a) values (183,87);
+insert into t (id,a) values (183,88);
+insert into t (id,a) values (183,89);
+insert into t (id,a) values (183,90);
+insert into t (id,a) values (183,91);
+insert into t (id,a) values (183,92);
+insert into t (id,a) values (183,93);
+insert into t (id,a) values (183,94);
+insert into t (id,a) values (183,95);
+insert into t (id,a) values (183,96);
+insert into t (id,a) values (183,97);
+insert into t (id,a) values (183,98);
+insert into t (id,a) values (183,99);
+insert into t (id,a) values (184,0);
+insert into t (id,a) values (184,1);
+insert into t (id,a) values (184,2);
+insert into t (id,a) values (184,3);
+insert into t (id,a) values (184,4);
+insert into t (id,a) values (184,5);
+insert into t (id,a) values (184,6);
+insert into t (id,a) values (184,7);
+insert into t (id,a) values (184,8);
+insert into t (id,a) values (184,9);
+insert into t (id,a) values (184,10);
+insert into t (id,a) values (184,11);
+insert into t (id,a) values (184,12);
+insert into t (id,a) values (184,13);
+insert into t (id,a) values (184,14);
+insert into t (id,a) values (184,15);
+insert into t (id,a) values (184,16);
+insert into t (id,a) values (184,17);
+insert into t (id,a) values (184,18);
+insert into t (id,a) values (184,19);
+insert into t (id,a) values (184,20);
+insert into t (id,a) values (184,21);
+insert into t (id,a) values (184,22);
+insert into t (id,a) values (184,23);
+insert into t (id,a) values (184,24);
+insert into t (id,a) values (184,25);
+insert into t (id,a) values (184,26);
+insert into t (id,a) values (184,27);
+insert into t (id,a) values (184,28);
+insert into t (id,a) values (184,29);
+insert into t (id,a) values (184,30);
+insert into t (id,a) values (184,31);
+insert into t (id,a) values (184,32);
+insert into t (id,a) values (184,33);
+insert into t (id,a) values (184,34);
+insert into t (id,a) values (184,35);
+insert into t (id,a) values (184,36);
+insert into t (id,a) values (184,37);
+insert into t (id,a) values (184,38);
+insert into t (id,a) values (184,39);
+insert into t (id,a) values (184,40);
+insert into t (id,a) values (184,41);
+insert into t (id,a) values (184,42);
+insert into t (id,a) values (184,43);
+insert into t (id,a) values (184,44);
+insert into t (id,a) values (184,45);
+insert into t (id,a) values (184,46);
+insert into t (id,a) values (184,47);
+insert into t (id,a) values (184,48);
+insert into t (id,a) values (184,49);
+insert into t (id,a) values (184,50);
+insert into t (id,a) values (184,51);
+insert into t (id,a) values (184,52);
+insert into t (id,a) values (184,53);
+insert into t (id,a) values (184,54);
+insert into t (id,a) values (184,55);
+insert into t (id,a) values (184,56);
+insert into t (id,a) values (184,57);
+insert into t (id,a) values (184,58);
+insert into t (id,a) values (184,59);
+insert into t (id,a) values (184,60);
+insert into t (id,a) values (184,61);
+insert into t (id,a) values (184,62);
+insert into t (id,a) values (184,63);
+insert into t (id,a) values (184,64);
+insert into t (id,a) values (184,65);
+insert into t (id,a) values (184,66);
+insert into t (id,a) values (184,67);
+insert into t (id,a) values (184,68);
+insert into t (id,a) values (184,69);
+insert into t (id,a) values (184,70);
+insert into t (id,a) values (184,71);
+insert into t (id,a) values (184,72);
+insert into t (id,a) values (184,73);
+insert into t (id,a) values (184,74);
+insert into t (id,a) values (184,75);
+insert into t (id,a) values (184,76);
+insert into t (id,a) values (184,77);
+insert into t (id,a) values (184,78);
+insert into t (id,a) values (184,79);
+insert into t (id,a) values (184,80);
+insert into t (id,a) values (184,81);
+insert into t (id,a) values (184,82);
+insert into t (id,a) values (184,83);
+insert into t (id,a) values (184,84);
+insert into t (id,a) values (184,85);
+insert into t (id,a) values (184,86);
+insert into t (id,a) values (184,87);
+insert into t (id,a) values (184,88);
+insert into t (id,a) values (184,89);
+insert into t (id,a) values (184,90);
+insert into t (id,a) values (184,91);
+insert into t (id,a) values (184,92);
+insert into t (id,a) values (184,93);
+insert into t (id,a) values (184,94);
+insert into t (id,a) values (184,95);
+insert into t (id,a) values (184,96);
+insert into t (id,a) values (184,97);
+insert into t (id,a) values (184,98);
+insert into t (id,a) values (184,99);
+insert into t (id,a) values (185,0);
+insert into t (id,a) values (185,1);
+insert into t (id,a) values (185,2);
+insert into t (id,a) values (185,3);
+insert into t (id,a) values (185,4);
+insert into t (id,a) values (185,5);
+insert into t (id,a) values (185,6);
+insert into t (id,a) values (185,7);
+insert into t (id,a) values (185,8);
+insert into t (id,a) values (185,9);
+insert into t (id,a) values (185,10);
+insert into t (id,a) values (185,11);
+insert into t (id,a) values (185,12);
+insert into t (id,a) values (185,13);
+insert into t (id,a) values (185,14);
+insert into t (id,a) values (185,15);
+insert into t (id,a) values (185,16);
+insert into t (id,a) values (185,17);
+insert into t (id,a) values (185,18);
+insert into t (id,a) values (185,19);
+insert into t (id,a) values (185,20);
+insert into t (id,a) values (185,21);
+insert into t (id,a) values (185,22);
+insert into t (id,a) values (185,23);
+insert into t (id,a) values (185,24);
+insert into t (id,a) values (185,25);
+insert into t (id,a) values (185,26);
+insert into t (id,a) values (185,27);
+insert into t (id,a) values (185,28);
+insert into t (id,a) values (185,29);
+insert into t (id,a) values (185,30);
+insert into t (id,a) values (185,31);
+insert into t (id,a) values (185,32);
+insert into t (id,a) values (185,33);
+insert into t (id,a) values (185,34);
+insert into t (id,a) values (185,35);
+insert into t (id,a) values (185,36);
+insert into t (id,a) values (185,37);
+insert into t (id,a) values (185,38);
+insert into t (id,a) values (185,39);
+insert into t (id,a) values (185,40);
+insert into t (id,a) values (185,41);
+insert into t (id,a) values (185,42);
+insert into t (id,a) values (185,43);
+insert into t (id,a) values (185,44);
+insert into t (id,a) values (185,45);
+insert into t (id,a) values (185,46);
+insert into t (id,a) values (185,47);
+insert into t (id,a) values (185,48);
+insert into t (id,a) values (185,49);
+insert into t (id,a) values (185,50);
+insert into t (id,a) values (185,51);
+insert into t (id,a) values (185,52);
+insert into t (id,a) values (185,53);
+insert into t (id,a) values (185,54);
+insert into t (id,a) values (185,55);
+insert into t (id,a) values (185,56);
+insert into t (id,a) values (185,57);
+insert into t (id,a) values (185,58);
+insert into t (id,a) values (185,59);
+insert into t (id,a) values (185,60);
+insert into t (id,a) values (185,61);
+insert into t (id,a) values (185,62);
+insert into t (id,a) values (185,63);
+insert into t (id,a) values (185,64);
+insert into t (id,a) values (185,65);
+insert into t (id,a) values (185,66);
+insert into t (id,a) values (185,67);
+insert into t (id,a) values (185,68);
+insert into t (id,a) values (185,69);
+insert into t (id,a) values (185,70);
+insert into t (id,a) values (185,71);
+insert into t (id,a) values (185,72);
+insert into t (id,a) values (185,73);
+insert into t (id,a) values (185,74);
+insert into t (id,a) values (185,75);
+insert into t (id,a) values (185,76);
+insert into t (id,a) values (185,77);
+insert into t (id,a) values (185,78);
+insert into t (id,a) values (185,79);
+insert into t (id,a) values (185,80);
+insert into t (id,a) values (185,81);
+insert into t (id,a) values (185,82);
+insert into t (id,a) values (185,83);
+insert into t (id,a) values (185,84);
+insert into t (id,a) values (185,85);
+insert into t (id,a) values (185,86);
+insert into t (id,a) values (185,87);
+insert into t (id,a) values (185,88);
+insert into t (id,a) values (185,89);
+insert into t (id,a) values (185,90);
+insert into t (id,a) values (185,91);
+insert into t (id,a) values (185,92);
+insert into t (id,a) values (185,93);
+insert into t (id,a) values (185,94);
+insert into t (id,a) values (185,95);
+insert into t (id,a) values (185,96);
+insert into t (id,a) values (185,97);
+insert into t (id,a) values (185,98);
+insert into t (id,a) values (185,99);
+insert into t (id,a) values (186,0);
+insert into t (id,a) values (186,1);
+insert into t (id,a) values (186,2);
+insert into t (id,a) values (186,3);
+insert into t (id,a) values (186,4);
+insert into t (id,a) values (186,5);
+insert into t (id,a) values (186,6);
+insert into t (id,a) values (186,7);
+insert into t (id,a) values (186,8);
+insert into t (id,a) values (186,9);
+insert into t (id,a) values (186,10);
+insert into t (id,a) values (186,11);
+insert into t (id,a) values (186,12);
+insert into t (id,a) values (186,13);
+insert into t (id,a) values (186,14);
+insert into t (id,a) values (186,15);
+insert into t (id,a) values (186,16);
+insert into t (id,a) values (186,17);
+insert into t (id,a) values (186,18);
+insert into t (id,a) values (186,19);
+insert into t (id,a) values (186,20);
+insert into t (id,a) values (186,21);
+insert into t (id,a) values (186,22);
+insert into t (id,a) values (186,23);
+insert into t (id,a) values (186,24);
+insert into t (id,a) values (186,25);
+insert into t (id,a) values (186,26);
+insert into t (id,a) values (186,27);
+insert into t (id,a) values (186,28);
+insert into t (id,a) values (186,29);
+insert into t (id,a) values (186,30);
+insert into t (id,a) values (186,31);
+insert into t (id,a) values (186,32);
+insert into t (id,a) values (186,33);
+insert into t (id,a) values (186,34);
+insert into t (id,a) values (186,35);
+insert into t (id,a) values (186,36);
+insert into t (id,a) values (186,37);
+insert into t (id,a) values (186,38);
+insert into t (id,a) values (186,39);
+insert into t (id,a) values (186,40);
+insert into t (id,a) values (186,41);
+insert into t (id,a) values (186,42);
+insert into t (id,a) values (186,43);
+insert into t (id,a) values (186,44);
+insert into t (id,a) values (186,45);
+insert into t (id,a) values (186,46);
+insert into t (id,a) values (186,47);
+insert into t (id,a) values (186,48);
+insert into t (id,a) values (186,49);
+insert into t (id,a) values (186,50);
+insert into t (id,a) values (186,51);
+insert into t (id,a) values (186,52);
+insert into t (id,a) values (186,53);
+insert into t (id,a) values (186,54);
+insert into t (id,a) values (186,55);
+insert into t (id,a) values (186,56);
+insert into t (id,a) values (186,57);
+insert into t (id,a) values (186,58);
+insert into t (id,a) values (186,59);
+insert into t (id,a) values (186,60);
+insert into t (id,a) values (186,61);
+insert into t (id,a) values (186,62);
+insert into t (id,a) values (186,63);
+insert into t (id,a) values (186,64);
+insert into t (id,a) values (186,65);
+insert into t (id,a) values (186,66);
+insert into t (id,a) values (186,67);
+insert into t (id,a) values (186,68);
+insert into t (id,a) values (186,69);
+insert into t (id,a) values (186,70);
+insert into t (id,a) values (186,71);
+insert into t (id,a) values (186,72);
+insert into t (id,a) values (186,73);
+insert into t (id,a) values (186,74);
+insert into t (id,a) values (186,75);
+insert into t (id,a) values (186,76);
+insert into t (id,a) values (186,77);
+insert into t (id,a) values (186,78);
+insert into t (id,a) values (186,79);
+insert into t (id,a) values (186,80);
+insert into t (id,a) values (186,81);
+insert into t (id,a) values (186,82);
+insert into t (id,a) values (186,83);
+insert into t (id,a) values (186,84);
+insert into t (id,a) values (186,85);
+insert into t (id,a) values (186,86);
+insert into t (id,a) values (186,87);
+insert into t (id,a) values (186,88);
+insert into t (id,a) values (186,89);
+insert into t (id,a) values (186,90);
+insert into t (id,a) values (186,91);
+insert into t (id,a) values (186,92);
+insert into t (id,a) values (186,93);
+insert into t (id,a) values (186,94);
+insert into t (id,a) values (186,95);
+insert into t (id,a) values (186,96);
+insert into t (id,a) values (186,97);
+insert into t (id,a) values (186,98);
+insert into t (id,a) values (186,99);
+insert into t (id,a) values (187,0);
+insert into t (id,a) values (187,1);
+insert into t (id,a) values (187,2);
+insert into t (id,a) values (187,3);
+insert into t (id,a) values (187,4);
+insert into t (id,a) values (187,5);
+insert into t (id,a) values (187,6);
+insert into t (id,a) values (187,7);
+insert into t (id,a) values (187,8);
+insert into t (id,a) values (187,9);
+insert into t (id,a) values (187,10);
+insert into t (id,a) values (187,11);
+insert into t (id,a) values (187,12);
+insert into t (id,a) values (187,13);
+insert into t (id,a) values (187,14);
+insert into t (id,a) values (187,15);
+insert into t (id,a) values (187,16);
+insert into t (id,a) values (187,17);
+insert into t (id,a) values (187,18);
+insert into t (id,a) values (187,19);
+insert into t (id,a) values (187,20);
+insert into t (id,a) values (187,21);
+insert into t (id,a) values (187,22);
+insert into t (id,a) values (187,23);
+insert into t (id,a) values (187,24);
+insert into t (id,a) values (187,25);
+insert into t (id,a) values (187,26);
+insert into t (id,a) values (187,27);
+insert into t (id,a) values (187,28);
+insert into t (id,a) values (187,29);
+insert into t (id,a) values (187,30);
+insert into t (id,a) values (187,31);
+insert into t (id,a) values (187,32);
+insert into t (id,a) values (187,33);
+insert into t (id,a) values (187,34);
+insert into t (id,a) values (187,35);
+insert into t (id,a) values (187,36);
+insert into t (id,a) values (187,37);
+insert into t (id,a) values (187,38);
+insert into t (id,a) values (187,39);
+insert into t (id,a) values (187,40);
+insert into t (id,a) values (187,41);
+insert into t (id,a) values (187,42);
+insert into t (id,a) values (187,43);
+insert into t (id,a) values (187,44);
+insert into t (id,a) values (187,45);
+insert into t (id,a) values (187,46);
+insert into t (id,a) values (187,47);
+insert into t (id,a) values (187,48);
+insert into t (id,a) values (187,49);
+insert into t (id,a) values (187,50);
+insert into t (id,a) values (187,51);
+insert into t (id,a) values (187,52);
+insert into t (id,a) values (187,53);
+insert into t (id,a) values (187,54);
+insert into t (id,a) values (187,55);
+insert into t (id,a) values (187,56);
+insert into t (id,a) values (187,57);
+insert into t (id,a) values (187,58);
+insert into t (id,a) values (187,59);
+insert into t (id,a) values (187,60);
+insert into t (id,a) values (187,61);
+insert into t (id,a) values (187,62);
+insert into t (id,a) values (187,63);
+insert into t (id,a) values (187,64);
+insert into t (id,a) values (187,65);
+insert into t (id,a) values (187,66);
+insert into t (id,a) values (187,67);
+insert into t (id,a) values (187,68);
+insert into t (id,a) values (187,69);
+insert into t (id,a) values (187,70);
+insert into t (id,a) values (187,71);
+insert into t (id,a) values (187,72);
+insert into t (id,a) values (187,73);
+insert into t (id,a) values (187,74);
+insert into t (id,a) values (187,75);
+insert into t (id,a) values (187,76);
+insert into t (id,a) values (187,77);
+insert into t (id,a) values (187,78);
+insert into t (id,a) values (187,79);
+insert into t (id,a) values (187,80);
+insert into t (id,a) values (187,81);
+insert into t (id,a) values (187,82);
+insert into t (id,a) values (187,83);
+insert into t (id,a) values (187,84);
+insert into t (id,a) values (187,85);
+insert into t (id,a) values (187,86);
+insert into t (id,a) values (187,87);
+insert into t (id,a) values (187,88);
+insert into t (id,a) values (187,89);
+insert into t (id,a) values (187,90);
+insert into t (id,a) values (187,91);
+insert into t (id,a) values (187,92);
+insert into t (id,a) values (187,93);
+insert into t (id,a) values (187,94);
+insert into t (id,a) values (187,95);
+insert into t (id,a) values (187,96);
+insert into t (id,a) values (187,97);
+insert into t (id,a) values (187,98);
+insert into t (id,a) values (187,99);
+insert into t (id,a) values (188,0);
+insert into t (id,a) values (188,1);
+insert into t (id,a) values (188,2);
+insert into t (id,a) values (188,3);
+insert into t (id,a) values (188,4);
+insert into t (id,a) values (188,5);
+insert into t (id,a) values (188,6);
+insert into t (id,a) values (188,7);
+insert into t (id,a) values (188,8);
+insert into t (id,a) values (188,9);
+insert into t (id,a) values (188,10);
+insert into t (id,a) values (188,11);
+insert into t (id,a) values (188,12);
+insert into t (id,a) values (188,13);
+insert into t (id,a) values (188,14);
+insert into t (id,a) values (188,15);
+insert into t (id,a) values (188,16);
+insert into t (id,a) values (188,17);
+insert into t (id,a) values (188,18);
+insert into t (id,a) values (188,19);
+insert into t (id,a) values (188,20);
+insert into t (id,a) values (188,21);
+insert into t (id,a) values (188,22);
+insert into t (id,a) values (188,23);
+insert into t (id,a) values (188,24);
+insert into t (id,a) values (188,25);
+insert into t (id,a) values (188,26);
+insert into t (id,a) values (188,27);
+insert into t (id,a) values (188,28);
+insert into t (id,a) values (188,29);
+insert into t (id,a) values (188,30);
+insert into t (id,a) values (188,31);
+insert into t (id,a) values (188,32);
+insert into t (id,a) values (188,33);
+insert into t (id,a) values (188,34);
+insert into t (id,a) values (188,35);
+insert into t (id,a) values (188,36);
+insert into t (id,a) values (188,37);
+insert into t (id,a) values (188,38);
+insert into t (id,a) values (188,39);
+insert into t (id,a) values (188,40);
+insert into t (id,a) values (188,41);
+insert into t (id,a) values (188,42);
+insert into t (id,a) values (188,43);
+insert into t (id,a) values (188,44);
+insert into t (id,a) values (188,45);
+insert into t (id,a) values (188,46);
+insert into t (id,a) values (188,47);
+insert into t (id,a) values (188,48);
+insert into t (id,a) values (188,49);
+insert into t (id,a) values (188,50);
+insert into t (id,a) values (188,51);
+insert into t (id,a) values (188,52);
+insert into t (id,a) values (188,53);
+insert into t (id,a) values (188,54);
+insert into t (id,a) values (188,55);
+insert into t (id,a) values (188,56);
+insert into t (id,a) values (188,57);
+insert into t (id,a) values (188,58);
+insert into t (id,a) values (188,59);
+insert into t (id,a) values (188,60);
+insert into t (id,a) values (188,61);
+insert into t (id,a) values (188,62);
+insert into t (id,a) values (188,63);
+insert into t (id,a) values (188,64);
+insert into t (id,a) values (188,65);
+insert into t (id,a) values (188,66);
+insert into t (id,a) values (188,67);
+insert into t (id,a) values (188,68);
+insert into t (id,a) values (188,69);
+insert into t (id,a) values (188,70);
+insert into t (id,a) values (188,71);
+insert into t (id,a) values (188,72);
+insert into t (id,a) values (188,73);
+insert into t (id,a) values (188,74);
+insert into t (id,a) values (188,75);
+insert into t (id,a) values (188,76);
+insert into t (id,a) values (188,77);
+insert into t (id,a) values (188,78);
+insert into t (id,a) values (188,79);
+insert into t (id,a) values (188,80);
+insert into t (id,a) values (188,81);
+insert into t (id,a) values (188,82);
+insert into t (id,a) values (188,83);
+insert into t (id,a) values (188,84);
+insert into t (id,a) values (188,85);
+insert into t (id,a) values (188,86);
+insert into t (id,a) values (188,87);
+insert into t (id,a) values (188,88);
+insert into t (id,a) values (188,89);
+insert into t (id,a) values (188,90);
+insert into t (id,a) values (188,91);
+insert into t (id,a) values (188,92);
+insert into t (id,a) values (188,93);
+insert into t (id,a) values (188,94);
+insert into t (id,a) values (188,95);
+insert into t (id,a) values (188,96);
+insert into t (id,a) values (188,97);
+insert into t (id,a) values (188,98);
+insert into t (id,a) values (188,99);
+insert into t (id,a) values (189,0);
+insert into t (id,a) values (189,1);
+insert into t (id,a) values (189,2);
+insert into t (id,a) values (189,3);
+insert into t (id,a) values (189,4);
+insert into t (id,a) values (189,5);
+insert into t (id,a) values (189,6);
+insert into t (id,a) values (189,7);
+insert into t (id,a) values (189,8);
+insert into t (id,a) values (189,9);
+insert into t (id,a) values (189,10);
+insert into t (id,a) values (189,11);
+insert into t (id,a) values (189,12);
+insert into t (id,a) values (189,13);
+insert into t (id,a) values (189,14);
+insert into t (id,a) values (189,15);
+insert into t (id,a) values (189,16);
+insert into t (id,a) values (189,17);
+insert into t (id,a) values (189,18);
+insert into t (id,a) values (189,19);
+insert into t (id,a) values (189,20);
+insert into t (id,a) values (189,21);
+insert into t (id,a) values (189,22);
+insert into t (id,a) values (189,23);
+insert into t (id,a) values (189,24);
+insert into t (id,a) values (189,25);
+insert into t (id,a) values (189,26);
+insert into t (id,a) values (189,27);
+insert into t (id,a) values (189,28);
+insert into t (id,a) values (189,29);
+insert into t (id,a) values (189,30);
+insert into t (id,a) values (189,31);
+insert into t (id,a) values (189,32);
+insert into t (id,a) values (189,33);
+insert into t (id,a) values (189,34);
+insert into t (id,a) values (189,35);
+insert into t (id,a) values (189,36);
+insert into t (id,a) values (189,37);
+insert into t (id,a) values (189,38);
+insert into t (id,a) values (189,39);
+insert into t (id,a) values (189,40);
+insert into t (id,a) values (189,41);
+insert into t (id,a) values (189,42);
+insert into t (id,a) values (189,43);
+insert into t (id,a) values (189,44);
+insert into t (id,a) values (189,45);
+insert into t (id,a) values (189,46);
+insert into t (id,a) values (189,47);
+insert into t (id,a) values (189,48);
+insert into t (id,a) values (189,49);
+insert into t (id,a) values (189,50);
+insert into t (id,a) values (189,51);
+insert into t (id,a) values (189,52);
+insert into t (id,a) values (189,53);
+insert into t (id,a) values (189,54);
+insert into t (id,a) values (189,55);
+insert into t (id,a) values (189,56);
+insert into t (id,a) values (189,57);
+insert into t (id,a) values (189,58);
+insert into t (id,a) values (189,59);
+insert into t (id,a) values (189,60);
+insert into t (id,a) values (189,61);
+insert into t (id,a) values (189,62);
+insert into t (id,a) values (189,63);
+insert into t (id,a) values (189,64);
+insert into t (id,a) values (189,65);
+insert into t (id,a) values (189,66);
+insert into t (id,a) values (189,67);
+insert into t (id,a) values (189,68);
+insert into t (id,a) values (189,69);
+insert into t (id,a) values (189,70);
+insert into t (id,a) values (189,71);
+insert into t (id,a) values (189,72);
+insert into t (id,a) values (189,73);
+insert into t (id,a) values (189,74);
+insert into t (id,a) values (189,75);
+insert into t (id,a) values (189,76);
+insert into t (id,a) values (189,77);
+insert into t (id,a) values (189,78);
+insert into t (id,a) values (189,79);
+insert into t (id,a) values (189,80);
+insert into t (id,a) values (189,81);
+insert into t (id,a) values (189,82);
+insert into t (id,a) values (189,83);
+insert into t (id,a) values (189,84);
+insert into t (id,a) values (189,85);
+insert into t (id,a) values (189,86);
+insert into t (id,a) values (189,87);
+insert into t (id,a) values (189,88);
+insert into t (id,a) values (189,89);
+insert into t (id,a) values (189,90);
+insert into t (id,a) values (189,91);
+insert into t (id,a) values (189,92);
+insert into t (id,a) values (189,93);
+insert into t (id,a) values (189,94);
+insert into t (id,a) values (189,95);
+insert into t (id,a) values (189,96);
+insert into t (id,a) values (189,97);
+insert into t (id,a) values (189,98);
+insert into t (id,a) values (189,99);
+insert into t (id,a) values (190,0);
+insert into t (id,a) values (190,1);
+insert into t (id,a) values (190,2);
+insert into t (id,a) values (190,3);
+insert into t (id,a) values (190,4);
+insert into t (id,a) values (190,5);
+insert into t (id,a) values (190,6);
+insert into t (id,a) values (190,7);
+insert into t (id,a) values (190,8);
+insert into t (id,a) values (190,9);
+insert into t (id,a) values (190,10);
+insert into t (id,a) values (190,11);
+insert into t (id,a) values (190,12);
+insert into t (id,a) values (190,13);
+insert into t (id,a) values (190,14);
+insert into t (id,a) values (190,15);
+insert into t (id,a) values (190,16);
+insert into t (id,a) values (190,17);
+insert into t (id,a) values (190,18);
+insert into t (id,a) values (190,19);
+insert into t (id,a) values (190,20);
+insert into t (id,a) values (190,21);
+insert into t (id,a) values (190,22);
+insert into t (id,a) values (190,23);
+insert into t (id,a) values (190,24);
+insert into t (id,a) values (190,25);
+insert into t (id,a) values (190,26);
+insert into t (id,a) values (190,27);
+insert into t (id,a) values (190,28);
+insert into t (id,a) values (190,29);
+insert into t (id,a) values (190,30);
+insert into t (id,a) values (190,31);
+insert into t (id,a) values (190,32);
+insert into t (id,a) values (190,33);
+insert into t (id,a) values (190,34);
+insert into t (id,a) values (190,35);
+insert into t (id,a) values (190,36);
+insert into t (id,a) values (190,37);
+insert into t (id,a) values (190,38);
+insert into t (id,a) values (190,39);
+insert into t (id,a) values (190,40);
+insert into t (id,a) values (190,41);
+insert into t (id,a) values (190,42);
+insert into t (id,a) values (190,43);
+insert into t (id,a) values (190,44);
+insert into t (id,a) values (190,45);
+insert into t (id,a) values (190,46);
+insert into t (id,a) values (190,47);
+insert into t (id,a) values (190,48);
+insert into t (id,a) values (190,49);
+insert into t (id,a) values (190,50);
+insert into t (id,a) values (190,51);
+insert into t (id,a) values (190,52);
+insert into t (id,a) values (190,53);
+insert into t (id,a) values (190,54);
+insert into t (id,a) values (190,55);
+insert into t (id,a) values (190,56);
+insert into t (id,a) values (190,57);
+insert into t (id,a) values (190,58);
+insert into t (id,a) values (190,59);
+insert into t (id,a) values (190,60);
+insert into t (id,a) values (190,61);
+insert into t (id,a) values (190,62);
+insert into t (id,a) values (190,63);
+insert into t (id,a) values (190,64);
+insert into t (id,a) values (190,65);
+insert into t (id,a) values (190,66);
+insert into t (id,a) values (190,67);
+insert into t (id,a) values (190,68);
+insert into t (id,a) values (190,69);
+insert into t (id,a) values (190,70);
+insert into t (id,a) values (190,71);
+insert into t (id,a) values (190,72);
+insert into t (id,a) values (190,73);
+insert into t (id,a) values (190,74);
+insert into t (id,a) values (190,75);
+insert into t (id,a) values (190,76);
+insert into t (id,a) values (190,77);
+insert into t (id,a) values (190,78);
+insert into t (id,a) values (190,79);
+insert into t (id,a) values (190,80);
+insert into t (id,a) values (190,81);
+insert into t (id,a) values (190,82);
+insert into t (id,a) values (190,83);
+insert into t (id,a) values (190,84);
+insert into t (id,a) values (190,85);
+insert into t (id,a) values (190,86);
+insert into t (id,a) values (190,87);
+insert into t (id,a) values (190,88);
+insert into t (id,a) values (190,89);
+insert into t (id,a) values (190,90);
+insert into t (id,a) values (190,91);
+insert into t (id,a) values (190,92);
+insert into t (id,a) values (190,93);
+insert into t (id,a) values (190,94);
+insert into t (id,a) values (190,95);
+insert into t (id,a) values (190,96);
+insert into t (id,a) values (190,97);
+insert into t (id,a) values (190,98);
+insert into t (id,a) values (190,99);
+insert into t (id,a) values (191,0);
+insert into t (id,a) values (191,1);
+insert into t (id,a) values (191,2);
+insert into t (id,a) values (191,3);
+insert into t (id,a) values (191,4);
+insert into t (id,a) values (191,5);
+insert into t (id,a) values (191,6);
+insert into t (id,a) values (191,7);
+insert into t (id,a) values (191,8);
+insert into t (id,a) values (191,9);
+insert into t (id,a) values (191,10);
+insert into t (id,a) values (191,11);
+insert into t (id,a) values (191,12);
+insert into t (id,a) values (191,13);
+insert into t (id,a) values (191,14);
+insert into t (id,a) values (191,15);
+insert into t (id,a) values (191,16);
+insert into t (id,a) values (191,17);
+insert into t (id,a) values (191,18);
+insert into t (id,a) values (191,19);
+insert into t (id,a) values (191,20);
+insert into t (id,a) values (191,21);
+insert into t (id,a) values (191,22);
+insert into t (id,a) values (191,23);
+insert into t (id,a) values (191,24);
+insert into t (id,a) values (191,25);
+insert into t (id,a) values (191,26);
+insert into t (id,a) values (191,27);
+insert into t (id,a) values (191,28);
+insert into t (id,a) values (191,29);
+insert into t (id,a) values (191,30);
+insert into t (id,a) values (191,31);
+insert into t (id,a) values (191,32);
+insert into t (id,a) values (191,33);
+insert into t (id,a) values (191,34);
+insert into t (id,a) values (191,35);
+insert into t (id,a) values (191,36);
+insert into t (id,a) values (191,37);
+insert into t (id,a) values (191,38);
+insert into t (id,a) values (191,39);
+insert into t (id,a) values (191,40);
+insert into t (id,a) values (191,41);
+insert into t (id,a) values (191,42);
+insert into t (id,a) values (191,43);
+insert into t (id,a) values (191,44);
+insert into t (id,a) values (191,45);
+insert into t (id,a) values (191,46);
+insert into t (id,a) values (191,47);
+insert into t (id,a) values (191,48);
+insert into t (id,a) values (191,49);
+insert into t (id,a) values (191,50);
+insert into t (id,a) values (191,51);
+insert into t (id,a) values (191,52);
+insert into t (id,a) values (191,53);
+insert into t (id,a) values (191,54);
+insert into t (id,a) values (191,55);
+insert into t (id,a) values (191,56);
+insert into t (id,a) values (191,57);
+insert into t (id,a) values (191,58);
+insert into t (id,a) values (191,59);
+insert into t (id,a) values (191,60);
+insert into t (id,a) values (191,61);
+insert into t (id,a) values (191,62);
+insert into t (id,a) values (191,63);
+insert into t (id,a) values (191,64);
+insert into t (id,a) values (191,65);
+insert into t (id,a) values (191,66);
+insert into t (id,a) values (191,67);
+insert into t (id,a) values (191,68);
+insert into t (id,a) values (191,69);
+insert into t (id,a) values (191,70);
+insert into t (id,a) values (191,71);
+insert into t (id,a) values (191,72);
+insert into t (id,a) values (191,73);
+insert into t (id,a) values (191,74);
+insert into t (id,a) values (191,75);
+insert into t (id,a) values (191,76);
+insert into t (id,a) values (191,77);
+insert into t (id,a) values (191,78);
+insert into t (id,a) values (191,79);
+insert into t (id,a) values (191,80);
+insert into t (id,a) values (191,81);
+insert into t (id,a) values (191,82);
+insert into t (id,a) values (191,83);
+insert into t (id,a) values (191,84);
+insert into t (id,a) values (191,85);
+insert into t (id,a) values (191,86);
+insert into t (id,a) values (191,87);
+insert into t (id,a) values (191,88);
+insert into t (id,a) values (191,89);
+insert into t (id,a) values (191,90);
+insert into t (id,a) values (191,91);
+insert into t (id,a) values (191,92);
+insert into t (id,a) values (191,93);
+insert into t (id,a) values (191,94);
+insert into t (id,a) values (191,95);
+insert into t (id,a) values (191,96);
+insert into t (id,a) values (191,97);
+insert into t (id,a) values (191,98);
+insert into t (id,a) values (191,99);
+insert into t (id,a) values (192,0);
+insert into t (id,a) values (192,1);
+insert into t (id,a) values (192,2);
+insert into t (id,a) values (192,3);
+insert into t (id,a) values (192,4);
+insert into t (id,a) values (192,5);
+insert into t (id,a) values (192,6);
+insert into t (id,a) values (192,7);
+insert into t (id,a) values (192,8);
+insert into t (id,a) values (192,9);
+insert into t (id,a) values (192,10);
+insert into t (id,a) values (192,11);
+insert into t (id,a) values (192,12);
+insert into t (id,a) values (192,13);
+insert into t (id,a) values (192,14);
+insert into t (id,a) values (192,15);
+insert into t (id,a) values (192,16);
+insert into t (id,a) values (192,17);
+insert into t (id,a) values (192,18);
+insert into t (id,a) values (192,19);
+insert into t (id,a) values (192,20);
+insert into t (id,a) values (192,21);
+insert into t (id,a) values (192,22);
+insert into t (id,a) values (192,23);
+insert into t (id,a) values (192,24);
+insert into t (id,a) values (192,25);
+insert into t (id,a) values (192,26);
+insert into t (id,a) values (192,27);
+insert into t (id,a) values (192,28);
+insert into t (id,a) values (192,29);
+insert into t (id,a) values (192,30);
+insert into t (id,a) values (192,31);
+insert into t (id,a) values (192,32);
+insert into t (id,a) values (192,33);
+insert into t (id,a) values (192,34);
+insert into t (id,a) values (192,35);
+insert into t (id,a) values (192,36);
+insert into t (id,a) values (192,37);
+insert into t (id,a) values (192,38);
+insert into t (id,a) values (192,39);
+insert into t (id,a) values (192,40);
+insert into t (id,a) values (192,41);
+insert into t (id,a) values (192,42);
+insert into t (id,a) values (192,43);
+insert into t (id,a) values (192,44);
+insert into t (id,a) values (192,45);
+insert into t (id,a) values (192,46);
+insert into t (id,a) values (192,47);
+insert into t (id,a) values (192,48);
+insert into t (id,a) values (192,49);
+insert into t (id,a) values (192,50);
+insert into t (id,a) values (192,51);
+insert into t (id,a) values (192,52);
+insert into t (id,a) values (192,53);
+insert into t (id,a) values (192,54);
+insert into t (id,a) values (192,55);
+insert into t (id,a) values (192,56);
+insert into t (id,a) values (192,57);
+insert into t (id,a) values (192,58);
+insert into t (id,a) values (192,59);
+insert into t (id,a) values (192,60);
+insert into t (id,a) values (192,61);
+insert into t (id,a) values (192,62);
+insert into t (id,a) values (192,63);
+insert into t (id,a) values (192,64);
+insert into t (id,a) values (192,65);
+insert into t (id,a) values (192,66);
+insert into t (id,a) values (192,67);
+insert into t (id,a) values (192,68);
+insert into t (id,a) values (192,69);
+insert into t (id,a) values (192,70);
+insert into t (id,a) values (192,71);
+insert into t (id,a) values (192,72);
+insert into t (id,a) values (192,73);
+insert into t (id,a) values (192,74);
+insert into t (id,a) values (192,75);
+insert into t (id,a) values (192,76);
+insert into t (id,a) values (192,77);
+insert into t (id,a) values (192,78);
+insert into t (id,a) values (192,79);
+insert into t (id,a) values (192,80);
+insert into t (id,a) values (192,81);
+insert into t (id,a) values (192,82);
+insert into t (id,a) values (192,83);
+insert into t (id,a) values (192,84);
+insert into t (id,a) values (192,85);
+insert into t (id,a) values (192,86);
+insert into t (id,a) values (192,87);
+insert into t (id,a) values (192,88);
+insert into t (id,a) values (192,89);
+insert into t (id,a) values (192,90);
+insert into t (id,a) values (192,91);
+insert into t (id,a) values (192,92);
+insert into t (id,a) values (192,93);
+insert into t (id,a) values (192,94);
+insert into t (id,a) values (192,95);
+insert into t (id,a) values (192,96);
+insert into t (id,a) values (192,97);
+insert into t (id,a) values (192,98);
+insert into t (id,a) values (192,99);
+insert into t (id,a) values (193,0);
+insert into t (id,a) values (193,1);
+insert into t (id,a) values (193,2);
+insert into t (id,a) values (193,3);
+insert into t (id,a) values (193,4);
+insert into t (id,a) values (193,5);
+insert into t (id,a) values (193,6);
+insert into t (id,a) values (193,7);
+insert into t (id,a) values (193,8);
+insert into t (id,a) values (193,9);
+insert into t (id,a) values (193,10);
+insert into t (id,a) values (193,11);
+insert into t (id,a) values (193,12);
+insert into t (id,a) values (193,13);
+insert into t (id,a) values (193,14);
+insert into t (id,a) values (193,15);
+insert into t (id,a) values (193,16);
+insert into t (id,a) values (193,17);
+insert into t (id,a) values (193,18);
+insert into t (id,a) values (193,19);
+insert into t (id,a) values (193,20);
+insert into t (id,a) values (193,21);
+insert into t (id,a) values (193,22);
+insert into t (id,a) values (193,23);
+insert into t (id,a) values (193,24);
+insert into t (id,a) values (193,25);
+insert into t (id,a) values (193,26);
+insert into t (id,a) values (193,27);
+insert into t (id,a) values (193,28);
+insert into t (id,a) values (193,29);
+insert into t (id,a) values (193,30);
+insert into t (id,a) values (193,31);
+insert into t (id,a) values (193,32);
+insert into t (id,a) values (193,33);
+insert into t (id,a) values (193,34);
+insert into t (id,a) values (193,35);
+insert into t (id,a) values (193,36);
+insert into t (id,a) values (193,37);
+insert into t (id,a) values (193,38);
+insert into t (id,a) values (193,39);
+insert into t (id,a) values (193,40);
+insert into t (id,a) values (193,41);
+insert into t (id,a) values (193,42);
+insert into t (id,a) values (193,43);
+insert into t (id,a) values (193,44);
+insert into t (id,a) values (193,45);
+insert into t (id,a) values (193,46);
+insert into t (id,a) values (193,47);
+insert into t (id,a) values (193,48);
+insert into t (id,a) values (193,49);
+insert into t (id,a) values (193,50);
+insert into t (id,a) values (193,51);
+insert into t (id,a) values (193,52);
+insert into t (id,a) values (193,53);
+insert into t (id,a) values (193,54);
+insert into t (id,a) values (193,55);
+insert into t (id,a) values (193,56);
+insert into t (id,a) values (193,57);
+insert into t (id,a) values (193,58);
+insert into t (id,a) values (193,59);
+insert into t (id,a) values (193,60);
+insert into t (id,a) values (193,61);
+insert into t (id,a) values (193,62);
+insert into t (id,a) values (193,63);
+insert into t (id,a) values (193,64);
+insert into t (id,a) values (193,65);
+insert into t (id,a) values (193,66);
+insert into t (id,a) values (193,67);
+insert into t (id,a) values (193,68);
+insert into t (id,a) values (193,69);
+insert into t (id,a) values (193,70);
+insert into t (id,a) values (193,71);
+insert into t (id,a) values (193,72);
+insert into t (id,a) values (193,73);
+insert into t (id,a) values (193,74);
+insert into t (id,a) values (193,75);
+insert into t (id,a) values (193,76);
+insert into t (id,a) values (193,77);
+insert into t (id,a) values (193,78);
+insert into t (id,a) values (193,79);
+insert into t (id,a) values (193,80);
+insert into t (id,a) values (193,81);
+insert into t (id,a) values (193,82);
+insert into t (id,a) values (193,83);
+insert into t (id,a) values (193,84);
+insert into t (id,a) values (193,85);
+insert into t (id,a) values (193,86);
+insert into t (id,a) values (193,87);
+insert into t (id,a) values (193,88);
+insert into t (id,a) values (193,89);
+insert into t (id,a) values (193,90);
+insert into t (id,a) values (193,91);
+insert into t (id,a) values (193,92);
+insert into t (id,a) values (193,93);
+insert into t (id,a) values (193,94);
+insert into t (id,a) values (193,95);
+insert into t (id,a) values (193,96);
+insert into t (id,a) values (193,97);
+insert into t (id,a) values (193,98);
+insert into t (id,a) values (193,99);
+insert into t (id,a) values (194,0);
+insert into t (id,a) values (194,1);
+insert into t (id,a) values (194,2);
+insert into t (id,a) values (194,3);
+insert into t (id,a) values (194,4);
+insert into t (id,a) values (194,5);
+insert into t (id,a) values (194,6);
+insert into t (id,a) values (194,7);
+insert into t (id,a) values (194,8);
+insert into t (id,a) values (194,9);
+insert into t (id,a) values (194,10);
+insert into t (id,a) values (194,11);
+insert into t (id,a) values (194,12);
+insert into t (id,a) values (194,13);
+insert into t (id,a) values (194,14);
+insert into t (id,a) values (194,15);
+insert into t (id,a) values (194,16);
+insert into t (id,a) values (194,17);
+insert into t (id,a) values (194,18);
+insert into t (id,a) values (194,19);
+insert into t (id,a) values (194,20);
+insert into t (id,a) values (194,21);
+insert into t (id,a) values (194,22);
+insert into t (id,a) values (194,23);
+insert into t (id,a) values (194,24);
+insert into t (id,a) values (194,25);
+insert into t (id,a) values (194,26);
+insert into t (id,a) values (194,27);
+insert into t (id,a) values (194,28);
+insert into t (id,a) values (194,29);
+insert into t (id,a) values (194,30);
+insert into t (id,a) values (194,31);
+insert into t (id,a) values (194,32);
+insert into t (id,a) values (194,33);
+insert into t (id,a) values (194,34);
+insert into t (id,a) values (194,35);
+insert into t (id,a) values (194,36);
+insert into t (id,a) values (194,37);
+insert into t (id,a) values (194,38);
+insert into t (id,a) values (194,39);
+insert into t (id,a) values (194,40);
+insert into t (id,a) values (194,41);
+insert into t (id,a) values (194,42);
+insert into t (id,a) values (194,43);
+insert into t (id,a) values (194,44);
+insert into t (id,a) values (194,45);
+insert into t (id,a) values (194,46);
+insert into t (id,a) values (194,47);
+insert into t (id,a) values (194,48);
+insert into t (id,a) values (194,49);
+insert into t (id,a) values (194,50);
+insert into t (id,a) values (194,51);
+insert into t (id,a) values (194,52);
+insert into t (id,a) values (194,53);
+insert into t (id,a) values (194,54);
+insert into t (id,a) values (194,55);
+insert into t (id,a) values (194,56);
+insert into t (id,a) values (194,57);
+insert into t (id,a) values (194,58);
+insert into t (id,a) values (194,59);
+insert into t (id,a) values (194,60);
+insert into t (id,a) values (194,61);
+insert into t (id,a) values (194,62);
+insert into t (id,a) values (194,63);
+insert into t (id,a) values (194,64);
+insert into t (id,a) values (194,65);
+insert into t (id,a) values (194,66);
+insert into t (id,a) values (194,67);
+insert into t (id,a) values (194,68);
+insert into t (id,a) values (194,69);
+insert into t (id,a) values (194,70);
+insert into t (id,a) values (194,71);
+insert into t (id,a) values (194,72);
+insert into t (id,a) values (194,73);
+insert into t (id,a) values (194,74);
+insert into t (id,a) values (194,75);
+insert into t (id,a) values (194,76);
+insert into t (id,a) values (194,77);
+insert into t (id,a) values (194,78);
+insert into t (id,a) values (194,79);
+insert into t (id,a) values (194,80);
+insert into t (id,a) values (194,81);
+insert into t (id,a) values (194,82);
+insert into t (id,a) values (194,83);
+insert into t (id,a) values (194,84);
+insert into t (id,a) values (194,85);
+insert into t (id,a) values (194,86);
+insert into t (id,a) values (194,87);
+insert into t (id,a) values (194,88);
+insert into t (id,a) values (194,89);
+insert into t (id,a) values (194,90);
+insert into t (id,a) values (194,91);
+insert into t (id,a) values (194,92);
+insert into t (id,a) values (194,93);
+insert into t (id,a) values (194,94);
+insert into t (id,a) values (194,95);
+insert into t (id,a) values (194,96);
+insert into t (id,a) values (194,97);
+insert into t (id,a) values (194,98);
+insert into t (id,a) values (194,99);
+insert into t (id,a) values (195,0);
+insert into t (id,a) values (195,1);
+insert into t (id,a) values (195,2);
+insert into t (id,a) values (195,3);
+insert into t (id,a) values (195,4);
+insert into t (id,a) values (195,5);
+insert into t (id,a) values (195,6);
+insert into t (id,a) values (195,7);
+insert into t (id,a) values (195,8);
+insert into t (id,a) values (195,9);
+insert into t (id,a) values (195,10);
+insert into t (id,a) values (195,11);
+insert into t (id,a) values (195,12);
+insert into t (id,a) values (195,13);
+insert into t (id,a) values (195,14);
+insert into t (id,a) values (195,15);
+insert into t (id,a) values (195,16);
+insert into t (id,a) values (195,17);
+insert into t (id,a) values (195,18);
+insert into t (id,a) values (195,19);
+insert into t (id,a) values (195,20);
+insert into t (id,a) values (195,21);
+insert into t (id,a) values (195,22);
+insert into t (id,a) values (195,23);
+insert into t (id,a) values (195,24);
+insert into t (id,a) values (195,25);
+insert into t (id,a) values (195,26);
+insert into t (id,a) values (195,27);
+insert into t (id,a) values (195,28);
+insert into t (id,a) values (195,29);
+insert into t (id,a) values (195,30);
+insert into t (id,a) values (195,31);
+insert into t (id,a) values (195,32);
+insert into t (id,a) values (195,33);
+insert into t (id,a) values (195,34);
+insert into t (id,a) values (195,35);
+insert into t (id,a) values (195,36);
+insert into t (id,a) values (195,37);
+insert into t (id,a) values (195,38);
+insert into t (id,a) values (195,39);
+insert into t (id,a) values (195,40);
+insert into t (id,a) values (195,41);
+insert into t (id,a) values (195,42);
+insert into t (id,a) values (195,43);
+insert into t (id,a) values (195,44);
+insert into t (id,a) values (195,45);
+insert into t (id,a) values (195,46);
+insert into t (id,a) values (195,47);
+insert into t (id,a) values (195,48);
+insert into t (id,a) values (195,49);
+insert into t (id,a) values (195,50);
+insert into t (id,a) values (195,51);
+insert into t (id,a) values (195,52);
+insert into t (id,a) values (195,53);
+insert into t (id,a) values (195,54);
+insert into t (id,a) values (195,55);
+insert into t (id,a) values (195,56);
+insert into t (id,a) values (195,57);
+insert into t (id,a) values (195,58);
+insert into t (id,a) values (195,59);
+insert into t (id,a) values (195,60);
+insert into t (id,a) values (195,61);
+insert into t (id,a) values (195,62);
+insert into t (id,a) values (195,63);
+insert into t (id,a) values (195,64);
+insert into t (id,a) values (195,65);
+insert into t (id,a) values (195,66);
+insert into t (id,a) values (195,67);
+insert into t (id,a) values (195,68);
+insert into t (id,a) values (195,69);
+insert into t (id,a) values (195,70);
+insert into t (id,a) values (195,71);
+insert into t (id,a) values (195,72);
+insert into t (id,a) values (195,73);
+insert into t (id,a) values (195,74);
+insert into t (id,a) values (195,75);
+insert into t (id,a) values (195,76);
+insert into t (id,a) values (195,77);
+insert into t (id,a) values (195,78);
+insert into t (id,a) values (195,79);
+insert into t (id,a) values (195,80);
+insert into t (id,a) values (195,81);
+insert into t (id,a) values (195,82);
+insert into t (id,a) values (195,83);
+insert into t (id,a) values (195,84);
+insert into t (id,a) values (195,85);
+insert into t (id,a) values (195,86);
+insert into t (id,a) values (195,87);
+insert into t (id,a) values (195,88);
+insert into t (id,a) values (195,89);
+insert into t (id,a) values (195,90);
+insert into t (id,a) values (195,91);
+insert into t (id,a) values (195,92);
+insert into t (id,a) values (195,93);
+insert into t (id,a) values (195,94);
+insert into t (id,a) values (195,95);
+insert into t (id,a) values (195,96);
+insert into t (id,a) values (195,97);
+insert into t (id,a) values (195,98);
+insert into t (id,a) values (195,99);
+insert into t (id,a) values (196,0);
+insert into t (id,a) values (196,1);
+insert into t (id,a) values (196,2);
+insert into t (id,a) values (196,3);
+insert into t (id,a) values (196,4);
+insert into t (id,a) values (196,5);
+insert into t (id,a) values (196,6);
+insert into t (id,a) values (196,7);
+insert into t (id,a) values (196,8);
+insert into t (id,a) values (196,9);
+insert into t (id,a) values (196,10);
+insert into t (id,a) values (196,11);
+insert into t (id,a) values (196,12);
+insert into t (id,a) values (196,13);
+insert into t (id,a) values (196,14);
+insert into t (id,a) values (196,15);
+insert into t (id,a) values (196,16);
+insert into t (id,a) values (196,17);
+insert into t (id,a) values (196,18);
+insert into t (id,a) values (196,19);
+insert into t (id,a) values (196,20);
+insert into t (id,a) values (196,21);
+insert into t (id,a) values (196,22);
+insert into t (id,a) values (196,23);
+insert into t (id,a) values (196,24);
+insert into t (id,a) values (196,25);
+insert into t (id,a) values (196,26);
+insert into t (id,a) values (196,27);
+insert into t (id,a) values (196,28);
+insert into t (id,a) values (196,29);
+insert into t (id,a) values (196,30);
+insert into t (id,a) values (196,31);
+insert into t (id,a) values (196,32);
+insert into t (id,a) values (196,33);
+insert into t (id,a) values (196,34);
+insert into t (id,a) values (196,35);
+insert into t (id,a) values (196,36);
+insert into t (id,a) values (196,37);
+insert into t (id,a) values (196,38);
+insert into t (id,a) values (196,39);
+insert into t (id,a) values (196,40);
+insert into t (id,a) values (196,41);
+insert into t (id,a) values (196,42);
+insert into t (id,a) values (196,43);
+insert into t (id,a) values (196,44);
+insert into t (id,a) values (196,45);
+insert into t (id,a) values (196,46);
+insert into t (id,a) values (196,47);
+insert into t (id,a) values (196,48);
+insert into t (id,a) values (196,49);
+insert into t (id,a) values (196,50);
+insert into t (id,a) values (196,51);
+insert into t (id,a) values (196,52);
+insert into t (id,a) values (196,53);
+insert into t (id,a) values (196,54);
+insert into t (id,a) values (196,55);
+insert into t (id,a) values (196,56);
+insert into t (id,a) values (196,57);
+insert into t (id,a) values (196,58);
+insert into t (id,a) values (196,59);
+insert into t (id,a) values (196,60);
+insert into t (id,a) values (196,61);
+insert into t (id,a) values (196,62);
+insert into t (id,a) values (196,63);
+insert into t (id,a) values (196,64);
+insert into t (id,a) values (196,65);
+insert into t (id,a) values (196,66);
+insert into t (id,a) values (196,67);
+insert into t (id,a) values (196,68);
+insert into t (id,a) values (196,69);
+insert into t (id,a) values (196,70);
+insert into t (id,a) values (196,71);
+insert into t (id,a) values (196,72);
+insert into t (id,a) values (196,73);
+insert into t (id,a) values (196,74);
+insert into t (id,a) values (196,75);
+insert into t (id,a) values (196,76);
+insert into t (id,a) values (196,77);
+insert into t (id,a) values (196,78);
+insert into t (id,a) values (196,79);
+insert into t (id,a) values (196,80);
+insert into t (id,a) values (196,81);
+insert into t (id,a) values (196,82);
+insert into t (id,a) values (196,83);
+insert into t (id,a) values (196,84);
+insert into t (id,a) values (196,85);
+insert into t (id,a) values (196,86);
+insert into t (id,a) values (196,87);
+insert into t (id,a) values (196,88);
+insert into t (id,a) values (196,89);
+insert into t (id,a) values (196,90);
+insert into t (id,a) values (196,91);
+insert into t (id,a) values (196,92);
+insert into t (id,a) values (196,93);
+insert into t (id,a) values (196,94);
+insert into t (id,a) values (196,95);
+insert into t (id,a) values (196,96);
+insert into t (id,a) values (196,97);
+insert into t (id,a) values (196,98);
+insert into t (id,a) values (196,99);
+insert into t (id,a) values (197,0);
+insert into t (id,a) values (197,1);
+insert into t (id,a) values (197,2);
+insert into t (id,a) values (197,3);
+insert into t (id,a) values (197,4);
+insert into t (id,a) values (197,5);
+insert into t (id,a) values (197,6);
+insert into t (id,a) values (197,7);
+insert into t (id,a) values (197,8);
+insert into t (id,a) values (197,9);
+insert into t (id,a) values (197,10);
+insert into t (id,a) values (197,11);
+insert into t (id,a) values (197,12);
+insert into t (id,a) values (197,13);
+insert into t (id,a) values (197,14);
+insert into t (id,a) values (197,15);
+insert into t (id,a) values (197,16);
+insert into t (id,a) values (197,17);
+insert into t (id,a) values (197,18);
+insert into t (id,a) values (197,19);
+insert into t (id,a) values (197,20);
+insert into t (id,a) values (197,21);
+insert into t (id,a) values (197,22);
+insert into t (id,a) values (197,23);
+insert into t (id,a) values (197,24);
+insert into t (id,a) values (197,25);
+insert into t (id,a) values (197,26);
+insert into t (id,a) values (197,27);
+insert into t (id,a) values (197,28);
+insert into t (id,a) values (197,29);
+insert into t (id,a) values (197,30);
+insert into t (id,a) values (197,31);
+insert into t (id,a) values (197,32);
+insert into t (id,a) values (197,33);
+insert into t (id,a) values (197,34);
+insert into t (id,a) values (197,35);
+insert into t (id,a) values (197,36);
+insert into t (id,a) values (197,37);
+insert into t (id,a) values (197,38);
+insert into t (id,a) values (197,39);
+insert into t (id,a) values (197,40);
+insert into t (id,a) values (197,41);
+insert into t (id,a) values (197,42);
+insert into t (id,a) values (197,43);
+insert into t (id,a) values (197,44);
+insert into t (id,a) values (197,45);
+insert into t (id,a) values (197,46);
+insert into t (id,a) values (197,47);
+insert into t (id,a) values (197,48);
+insert into t (id,a) values (197,49);
+insert into t (id,a) values (197,50);
+insert into t (id,a) values (197,51);
+insert into t (id,a) values (197,52);
+insert into t (id,a) values (197,53);
+insert into t (id,a) values (197,54);
+insert into t (id,a) values (197,55);
+insert into t (id,a) values (197,56);
+insert into t (id,a) values (197,57);
+insert into t (id,a) values (197,58);
+insert into t (id,a) values (197,59);
+insert into t (id,a) values (197,60);
+insert into t (id,a) values (197,61);
+insert into t (id,a) values (197,62);
+insert into t (id,a) values (197,63);
+insert into t (id,a) values (197,64);
+insert into t (id,a) values (197,65);
+insert into t (id,a) values (197,66);
+insert into t (id,a) values (197,67);
+insert into t (id,a) values (197,68);
+insert into t (id,a) values (197,69);
+insert into t (id,a) values (197,70);
+insert into t (id,a) values (197,71);
+insert into t (id,a) values (197,72);
+insert into t (id,a) values (197,73);
+insert into t (id,a) values (197,74);
+insert into t (id,a) values (197,75);
+insert into t (id,a) values (197,76);
+insert into t (id,a) values (197,77);
+insert into t (id,a) values (197,78);
+insert into t (id,a) values (197,79);
+insert into t (id,a) values (197,80);
+insert into t (id,a) values (197,81);
+insert into t (id,a) values (197,82);
+insert into t (id,a) values (197,83);
+insert into t (id,a) values (197,84);
+insert into t (id,a) values (197,85);
+insert into t (id,a) values (197,86);
+insert into t (id,a) values (197,87);
+insert into t (id,a) values (197,88);
+insert into t (id,a) values (197,89);
+insert into t (id,a) values (197,90);
+insert into t (id,a) values (197,91);
+insert into t (id,a) values (197,92);
+insert into t (id,a) values (197,93);
+insert into t (id,a) values (197,94);
+insert into t (id,a) values (197,95);
+insert into t (id,a) values (197,96);
+insert into t (id,a) values (197,97);
+insert into t (id,a) values (197,98);
+insert into t (id,a) values (197,99);
+insert into t (id,a) values (198,0);
+insert into t (id,a) values (198,1);
+insert into t (id,a) values (198,2);
+insert into t (id,a) values (198,3);
+insert into t (id,a) values (198,4);
+insert into t (id,a) values (198,5);
+insert into t (id,a) values (198,6);
+insert into t (id,a) values (198,7);
+insert into t (id,a) values (198,8);
+insert into t (id,a) values (198,9);
+insert into t (id,a) values (198,10);
+insert into t (id,a) values (198,11);
+insert into t (id,a) values (198,12);
+insert into t (id,a) values (198,13);
+insert into t (id,a) values (198,14);
+insert into t (id,a) values (198,15);
+insert into t (id,a) values (198,16);
+insert into t (id,a) values (198,17);
+insert into t (id,a) values (198,18);
+insert into t (id,a) values (198,19);
+insert into t (id,a) values (198,20);
+insert into t (id,a) values (198,21);
+insert into t (id,a) values (198,22);
+insert into t (id,a) values (198,23);
+insert into t (id,a) values (198,24);
+insert into t (id,a) values (198,25);
+insert into t (id,a) values (198,26);
+insert into t (id,a) values (198,27);
+insert into t (id,a) values (198,28);
+insert into t (id,a) values (198,29);
+insert into t (id,a) values (198,30);
+insert into t (id,a) values (198,31);
+insert into t (id,a) values (198,32);
+insert into t (id,a) values (198,33);
+insert into t (id,a) values (198,34);
+insert into t (id,a) values (198,35);
+insert into t (id,a) values (198,36);
+insert into t (id,a) values (198,37);
+insert into t (id,a) values (198,38);
+insert into t (id,a) values (198,39);
+insert into t (id,a) values (198,40);
+insert into t (id,a) values (198,41);
+insert into t (id,a) values (198,42);
+insert into t (id,a) values (198,43);
+insert into t (id,a) values (198,44);
+insert into t (id,a) values (198,45);
+insert into t (id,a) values (198,46);
+insert into t (id,a) values (198,47);
+insert into t (id,a) values (198,48);
+insert into t (id,a) values (198,49);
+insert into t (id,a) values (198,50);
+insert into t (id,a) values (198,51);
+insert into t (id,a) values (198,52);
+insert into t (id,a) values (198,53);
+insert into t (id,a) values (198,54);
+insert into t (id,a) values (198,55);
+insert into t (id,a) values (198,56);
+insert into t (id,a) values (198,57);
+insert into t (id,a) values (198,58);
+insert into t (id,a) values (198,59);
+insert into t (id,a) values (198,60);
+insert into t (id,a) values (198,61);
+insert into t (id,a) values (198,62);
+insert into t (id,a) values (198,63);
+insert into t (id,a) values (198,64);
+insert into t (id,a) values (198,65);
+insert into t (id,a) values (198,66);
+insert into t (id,a) values (198,67);
+insert into t (id,a) values (198,68);
+insert into t (id,a) values (198,69);
+insert into t (id,a) values (198,70);
+insert into t (id,a) values (198,71);
+insert into t (id,a) values (198,72);
+insert into t (id,a) values (198,73);
+insert into t (id,a) values (198,74);
+insert into t (id,a) values (198,75);
+insert into t (id,a) values (198,76);
+insert into t (id,a) values (198,77);
+insert into t (id,a) values (198,78);
+insert into t (id,a) values (198,79);
+insert into t (id,a) values (198,80);
+insert into t (id,a) values (198,81);
+insert into t (id,a) values (198,82);
+insert into t (id,a) values (198,83);
+insert into t (id,a) values (198,84);
+insert into t (id,a) values (198,85);
+insert into t (id,a) values (198,86);
+insert into t (id,a) values (198,87);
+insert into t (id,a) values (198,88);
+insert into t (id,a) values (198,89);
+insert into t (id,a) values (198,90);
+insert into t (id,a) values (198,91);
+insert into t (id,a) values (198,92);
+insert into t (id,a) values (198,93);
+insert into t (id,a) values (198,94);
+insert into t (id,a) values (198,95);
+insert into t (id,a) values (198,96);
+insert into t (id,a) values (198,97);
+insert into t (id,a) values (198,98);
+insert into t (id,a) values (198,99);
+insert into t (id,a) values (199,0);
+insert into t (id,a) values (199,1);
+insert into t (id,a) values (199,2);
+insert into t (id,a) values (199,3);
+insert into t (id,a) values (199,4);
+insert into t (id,a) values (199,5);
+insert into t (id,a) values (199,6);
+insert into t (id,a) values (199,7);
+insert into t (id,a) values (199,8);
+insert into t (id,a) values (199,9);
+insert into t (id,a) values (199,10);
+insert into t (id,a) values (199,11);
+insert into t (id,a) values (199,12);
+insert into t (id,a) values (199,13);
+insert into t (id,a) values (199,14);
+insert into t (id,a) values (199,15);
+insert into t (id,a) values (199,16);
+insert into t (id,a) values (199,17);
+insert into t (id,a) values (199,18);
+insert into t (id,a) values (199,19);
+insert into t (id,a) values (199,20);
+insert into t (id,a) values (199,21);
+insert into t (id,a) values (199,22);
+insert into t (id,a) values (199,23);
+insert into t (id,a) values (199,24);
+insert into t (id,a) values (199,25);
+insert into t (id,a) values (199,26);
+insert into t (id,a) values (199,27);
+insert into t (id,a) values (199,28);
+insert into t (id,a) values (199,29);
+insert into t (id,a) values (199,30);
+insert into t (id,a) values (199,31);
+insert into t (id,a) values (199,32);
+insert into t (id,a) values (199,33);
+insert into t (id,a) values (199,34);
+insert into t (id,a) values (199,35);
+insert into t (id,a) values (199,36);
+insert into t (id,a) values (199,37);
+insert into t (id,a) values (199,38);
+insert into t (id,a) values (199,39);
+insert into t (id,a) values (199,40);
+insert into t (id,a) values (199,41);
+insert into t (id,a) values (199,42);
+insert into t (id,a) values (199,43);
+insert into t (id,a) values (199,44);
+insert into t (id,a) values (199,45);
+insert into t (id,a) values (199,46);
+insert into t (id,a) values (199,47);
+insert into t (id,a) values (199,48);
+insert into t (id,a) values (199,49);
+insert into t (id,a) values (199,50);
+insert into t (id,a) values (199,51);
+insert into t (id,a) values (199,52);
+insert into t (id,a) values (199,53);
+insert into t (id,a) values (199,54);
+insert into t (id,a) values (199,55);
+insert into t (id,a) values (199,56);
+insert into t (id,a) values (199,57);
+insert into t (id,a) values (199,58);
+insert into t (id,a) values (199,59);
+insert into t (id,a) values (199,60);
+insert into t (id,a) values (199,61);
+insert into t (id,a) values (199,62);
+insert into t (id,a) values (199,63);
+insert into t (id,a) values (199,64);
+insert into t (id,a) values (199,65);
+insert into t (id,a) values (199,66);
+insert into t (id,a) values (199,67);
+insert into t (id,a) values (199,68);
+insert into t (id,a) values (199,69);
+insert into t (id,a) values (199,70);
+insert into t (id,a) values (199,71);
+insert into t (id,a) values (199,72);
+insert into t (id,a) values (199,73);
+insert into t (id,a) values (199,74);
+insert into t (id,a) values (199,75);
+insert into t (id,a) values (199,76);
+insert into t (id,a) values (199,77);
+insert into t (id,a) values (199,78);
+insert into t (id,a) values (199,79);
+insert into t (id,a) values (199,80);
+insert into t (id,a) values (199,81);
+insert into t (id,a) values (199,82);
+insert into t (id,a) values (199,83);
+insert into t (id,a) values (199,84);
+insert into t (id,a) values (199,85);
+insert into t (id,a) values (199,86);
+insert into t (id,a) values (199,87);
+insert into t (id,a) values (199,88);
+insert into t (id,a) values (199,89);
+insert into t (id,a) values (199,90);
+insert into t (id,a) values (199,91);
+insert into t (id,a) values (199,92);
+insert into t (id,a) values (199,93);
+insert into t (id,a) values (199,94);
+insert into t (id,a) values (199,95);
+insert into t (id,a) values (199,96);
+insert into t (id,a) values (199,97);
+insert into t (id,a) values (199,98);
+insert into t (id,a) values (199,99);
+insert into t (id,a) values (200,0);
+insert into t (id,a) values (200,1);
+insert into t (id,a) values (200,2);
+insert into t (id,a) values (200,3);
+insert into t (id,a) values (200,4);
+insert into t (id,a) values (200,5);
+insert into t (id,a) values (200,6);
+insert into t (id,a) values (200,7);
+insert into t (id,a) values (200,8);
+insert into t (id,a) values (200,9);
+insert into t (id,a) values (200,10);
+insert into t (id,a) values (200,11);
+insert into t (id,a) values (200,12);
+insert into t (id,a) values (200,13);
+insert into t (id,a) values (200,14);
+insert into t (id,a) values (200,15);
+insert into t (id,a) values (200,16);
+insert into t (id,a) values (200,17);
+insert into t (id,a) values (200,18);
+insert into t (id,a) values (200,19);
+insert into t (id,a) values (200,20);
+insert into t (id,a) values (200,21);
+insert into t (id,a) values (200,22);
+insert into t (id,a) values (200,23);
+insert into t (id,a) values (200,24);
+insert into t (id,a) values (200,25);
+insert into t (id,a) values (200,26);
+insert into t (id,a) values (200,27);
+insert into t (id,a) values (200,28);
+insert into t (id,a) values (200,29);
+insert into t (id,a) values (200,30);
+insert into t (id,a) values (200,31);
+insert into t (id,a) values (200,32);
+insert into t (id,a) values (200,33);
+insert into t (id,a) values (200,34);
+insert into t (id,a) values (200,35);
+insert into t (id,a) values (200,36);
+insert into t (id,a) values (200,37);
+insert into t (id,a) values (200,38);
+insert into t (id,a) values (200,39);
+insert into t (id,a) values (200,40);
+insert into t (id,a) values (200,41);
+insert into t (id,a) values (200,42);
+insert into t (id,a) values (200,43);
+insert into t (id,a) values (200,44);
+insert into t (id,a) values (200,45);
+insert into t (id,a) values (200,46);
+insert into t (id,a) values (200,47);
+insert into t (id,a) values (200,48);
+insert into t (id,a) values (200,49);
+insert into t (id,a) values (200,50);
+insert into t (id,a) values (200,51);
+insert into t (id,a) values (200,52);
+insert into t (id,a) values (200,53);
+insert into t (id,a) values (200,54);
+insert into t (id,a) values (200,55);
+insert into t (id,a) values (200,56);
+insert into t (id,a) values (200,57);
+insert into t (id,a) values (200,58);
+insert into t (id,a) values (200,59);
+insert into t (id,a) values (200,60);
+insert into t (id,a) values (200,61);
+insert into t (id,a) values (200,62);
+insert into t (id,a) values (200,63);
+insert into t (id,a) values (200,64);
+insert into t (id,a) values (200,65);
+insert into t (id,a) values (200,66);
+insert into t (id,a) values (200,67);
+insert into t (id,a) values (200,68);
+insert into t (id,a) values (200,69);
+insert into t (id,a) values (200,70);
+insert into t (id,a) values (200,71);
+insert into t (id,a) values (200,72);
+insert into t (id,a) values (200,73);
+insert into t (id,a) values (200,74);
+insert into t (id,a) values (200,75);
+insert into t (id,a) values (200,76);
+insert into t (id,a) values (200,77);
+insert into t (id,a) values (200,78);
+insert into t (id,a) values (200,79);
+insert into t (id,a) values (200,80);
+insert into t (id,a) values (200,81);
+insert into t (id,a) values (200,82);
+insert into t (id,a) values (200,83);
+insert into t (id,a) values (200,84);
+insert into t (id,a) values (200,85);
+insert into t (id,a) values (200,86);
+insert into t (id,a) values (200,87);
+insert into t (id,a) values (200,88);
+insert into t (id,a) values (200,89);
+insert into t (id,a) values (200,90);
+insert into t (id,a) values (200,91);
+insert into t (id,a) values (200,92);
+insert into t (id,a) values (200,93);
+insert into t (id,a) values (200,94);
+insert into t (id,a) values (200,95);
+insert into t (id,a) values (200,96);
+insert into t (id,a) values (200,97);
+insert into t (id,a) values (200,98);
+insert into t (id,a) values (200,99);
+insert into t (id,a) values (201,0);
+insert into t (id,a) values (201,1);
+insert into t (id,a) values (201,2);
+insert into t (id,a) values (201,3);
+insert into t (id,a) values (201,4);
+insert into t (id,a) values (201,5);
+insert into t (id,a) values (201,6);
+insert into t (id,a) values (201,7);
+insert into t (id,a) values (201,8);
+insert into t (id,a) values (201,9);
+insert into t (id,a) values (201,10);
+insert into t (id,a) values (201,11);
+insert into t (id,a) values (201,12);
+insert into t (id,a) values (201,13);
+insert into t (id,a) values (201,14);
+insert into t (id,a) values (201,15);
+insert into t (id,a) values (201,16);
+insert into t (id,a) values (201,17);
+insert into t (id,a) values (201,18);
+insert into t (id,a) values (201,19);
+insert into t (id,a) values (201,20);
+insert into t (id,a) values (201,21);
+insert into t (id,a) values (201,22);
+insert into t (id,a) values (201,23);
+insert into t (id,a) values (201,24);
+insert into t (id,a) values (201,25);
+insert into t (id,a) values (201,26);
+insert into t (id,a) values (201,27);
+insert into t (id,a) values (201,28);
+insert into t (id,a) values (201,29);
+insert into t (id,a) values (201,30);
+insert into t (id,a) values (201,31);
+insert into t (id,a) values (201,32);
+insert into t (id,a) values (201,33);
+insert into t (id,a) values (201,34);
+insert into t (id,a) values (201,35);
+insert into t (id,a) values (201,36);
+insert into t (id,a) values (201,37);
+insert into t (id,a) values (201,38);
+insert into t (id,a) values (201,39);
+insert into t (id,a) values (201,40);
+insert into t (id,a) values (201,41);
+insert into t (id,a) values (201,42);
+insert into t (id,a) values (201,43);
+insert into t (id,a) values (201,44);
+insert into t (id,a) values (201,45);
+insert into t (id,a) values (201,46);
+insert into t (id,a) values (201,47);
+insert into t (id,a) values (201,48);
+insert into t (id,a) values (201,49);
+insert into t (id,a) values (201,50);
+insert into t (id,a) values (201,51);
+insert into t (id,a) values (201,52);
+insert into t (id,a) values (201,53);
+insert into t (id,a) values (201,54);
+insert into t (id,a) values (201,55);
+insert into t (id,a) values (201,56);
+insert into t (id,a) values (201,57);
+insert into t (id,a) values (201,58);
+insert into t (id,a) values (201,59);
+insert into t (id,a) values (201,60);
+insert into t (id,a) values (201,61);
+insert into t (id,a) values (201,62);
+insert into t (id,a) values (201,63);
+insert into t (id,a) values (201,64);
+insert into t (id,a) values (201,65);
+insert into t (id,a) values (201,66);
+insert into t (id,a) values (201,67);
+insert into t (id,a) values (201,68);
+insert into t (id,a) values (201,69);
+insert into t (id,a) values (201,70);
+insert into t (id,a) values (201,71);
+insert into t (id,a) values (201,72);
+insert into t (id,a) values (201,73);
+insert into t (id,a) values (201,74);
+insert into t (id,a) values (201,75);
+insert into t (id,a) values (201,76);
+insert into t (id,a) values (201,77);
+insert into t (id,a) values (201,78);
+insert into t (id,a) values (201,79);
+insert into t (id,a) values (201,80);
+insert into t (id,a) values (201,81);
+insert into t (id,a) values (201,82);
+insert into t (id,a) values (201,83);
+insert into t (id,a) values (201,84);
+insert into t (id,a) values (201,85);
+insert into t (id,a) values (201,86);
+insert into t (id,a) values (201,87);
+insert into t (id,a) values (201,88);
+insert into t (id,a) values (201,89);
+insert into t (id,a) values (201,90);
+insert into t (id,a) values (201,91);
+insert into t (id,a) values (201,92);
+insert into t (id,a) values (201,93);
+insert into t (id,a) values (201,94);
+insert into t (id,a) values (201,95);
+insert into t (id,a) values (201,96);
+insert into t (id,a) values (201,97);
+insert into t (id,a) values (201,98);
+insert into t (id,a) values (201,99);
+insert into t (id,a) values (202,0);
+insert into t (id,a) values (202,1);
+insert into t (id,a) values (202,2);
+insert into t (id,a) values (202,3);
+insert into t (id,a) values (202,4);
+insert into t (id,a) values (202,5);
+insert into t (id,a) values (202,6);
+insert into t (id,a) values (202,7);
+insert into t (id,a) values (202,8);
+insert into t (id,a) values (202,9);
+insert into t (id,a) values (202,10);
+insert into t (id,a) values (202,11);
+insert into t (id,a) values (202,12);
+insert into t (id,a) values (202,13);
+insert into t (id,a) values (202,14);
+insert into t (id,a) values (202,15);
+insert into t (id,a) values (202,16);
+insert into t (id,a) values (202,17);
+insert into t (id,a) values (202,18);
+insert into t (id,a) values (202,19);
+insert into t (id,a) values (202,20);
+insert into t (id,a) values (202,21);
+insert into t (id,a) values (202,22);
+insert into t (id,a) values (202,23);
+insert into t (id,a) values (202,24);
+insert into t (id,a) values (202,25);
+insert into t (id,a) values (202,26);
+insert into t (id,a) values (202,27);
+insert into t (id,a) values (202,28);
+insert into t (id,a) values (202,29);
+insert into t (id,a) values (202,30);
+insert into t (id,a) values (202,31);
+insert into t (id,a) values (202,32);
+insert into t (id,a) values (202,33);
+insert into t (id,a) values (202,34);
+insert into t (id,a) values (202,35);
+insert into t (id,a) values (202,36);
+insert into t (id,a) values (202,37);
+insert into t (id,a) values (202,38);
+insert into t (id,a) values (202,39);
+insert into t (id,a) values (202,40);
+insert into t (id,a) values (202,41);
+insert into t (id,a) values (202,42);
+insert into t (id,a) values (202,43);
+insert into t (id,a) values (202,44);
+insert into t (id,a) values (202,45);
+insert into t (id,a) values (202,46);
+insert into t (id,a) values (202,47);
+insert into t (id,a) values (202,48);
+insert into t (id,a) values (202,49);
+insert into t (id,a) values (202,50);
+insert into t (id,a) values (202,51);
+insert into t (id,a) values (202,52);
+insert into t (id,a) values (202,53);
+insert into t (id,a) values (202,54);
+insert into t (id,a) values (202,55);
+insert into t (id,a) values (202,56);
+insert into t (id,a) values (202,57);
+insert into t (id,a) values (202,58);
+insert into t (id,a) values (202,59);
+insert into t (id,a) values (202,60);
+insert into t (id,a) values (202,61);
+insert into t (id,a) values (202,62);
+insert into t (id,a) values (202,63);
+insert into t (id,a) values (202,64);
+insert into t (id,a) values (202,65);
+insert into t (id,a) values (202,66);
+insert into t (id,a) values (202,67);
+insert into t (id,a) values (202,68);
+insert into t (id,a) values (202,69);
+insert into t (id,a) values (202,70);
+insert into t (id,a) values (202,71);
+insert into t (id,a) values (202,72);
+insert into t (id,a) values (202,73);
+insert into t (id,a) values (202,74);
+insert into t (id,a) values (202,75);
+insert into t (id,a) values (202,76);
+insert into t (id,a) values (202,77);
+insert into t (id,a) values (202,78);
+insert into t (id,a) values (202,79);
+insert into t (id,a) values (202,80);
+insert into t (id,a) values (202,81);
+insert into t (id,a) values (202,82);
+insert into t (id,a) values (202,83);
+insert into t (id,a) values (202,84);
+insert into t (id,a) values (202,85);
+insert into t (id,a) values (202,86);
+insert into t (id,a) values (202,87);
+insert into t (id,a) values (202,88);
+insert into t (id,a) values (202,89);
+insert into t (id,a) values (202,90);
+insert into t (id,a) values (202,91);
+insert into t (id,a) values (202,92);
+insert into t (id,a) values (202,93);
+insert into t (id,a) values (202,94);
+insert into t (id,a) values (202,95);
+insert into t (id,a) values (202,96);
+insert into t (id,a) values (202,97);
+insert into t (id,a) values (202,98);
+insert into t (id,a) values (202,99);
+insert into t (id,a) values (203,0);
+insert into t (id,a) values (203,1);
+insert into t (id,a) values (203,2);
+insert into t (id,a) values (203,3);
+insert into t (id,a) values (203,4);
+insert into t (id,a) values (203,5);
+insert into t (id,a) values (203,6);
+insert into t (id,a) values (203,7);
+insert into t (id,a) values (203,8);
+insert into t (id,a) values (203,9);
+insert into t (id,a) values (203,10);
+insert into t (id,a) values (203,11);
+insert into t (id,a) values (203,12);
+insert into t (id,a) values (203,13);
+insert into t (id,a) values (203,14);
+insert into t (id,a) values (203,15);
+insert into t (id,a) values (203,16);
+insert into t (id,a) values (203,17);
+insert into t (id,a) values (203,18);
+insert into t (id,a) values (203,19);
+insert into t (id,a) values (203,20);
+insert into t (id,a) values (203,21);
+insert into t (id,a) values (203,22);
+insert into t (id,a) values (203,23);
+insert into t (id,a) values (203,24);
+insert into t (id,a) values (203,25);
+insert into t (id,a) values (203,26);
+insert into t (id,a) values (203,27);
+insert into t (id,a) values (203,28);
+insert into t (id,a) values (203,29);
+insert into t (id,a) values (203,30);
+insert into t (id,a) values (203,31);
+insert into t (id,a) values (203,32);
+insert into t (id,a) values (203,33);
+insert into t (id,a) values (203,34);
+insert into t (id,a) values (203,35);
+insert into t (id,a) values (203,36);
+insert into t (id,a) values (203,37);
+insert into t (id,a) values (203,38);
+insert into t (id,a) values (203,39);
+insert into t (id,a) values (203,40);
+insert into t (id,a) values (203,41);
+insert into t (id,a) values (203,42);
+insert into t (id,a) values (203,43);
+insert into t (id,a) values (203,44);
+insert into t (id,a) values (203,45);
+insert into t (id,a) values (203,46);
+insert into t (id,a) values (203,47);
+insert into t (id,a) values (203,48);
+insert into t (id,a) values (203,49);
+insert into t (id,a) values (203,50);
+insert into t (id,a) values (203,51);
+insert into t (id,a) values (203,52);
+insert into t (id,a) values (203,53);
+insert into t (id,a) values (203,54);
+insert into t (id,a) values (203,55);
+insert into t (id,a) values (203,56);
+insert into t (id,a) values (203,57);
+insert into t (id,a) values (203,58);
+insert into t (id,a) values (203,59);
+insert into t (id,a) values (203,60);
+insert into t (id,a) values (203,61);
+insert into t (id,a) values (203,62);
+insert into t (id,a) values (203,63);
+insert into t (id,a) values (203,64);
+insert into t (id,a) values (203,65);
+insert into t (id,a) values (203,66);
+insert into t (id,a) values (203,67);
+insert into t (id,a) values (203,68);
+insert into t (id,a) values (203,69);
+insert into t (id,a) values (203,70);
+insert into t (id,a) values (203,71);
+insert into t (id,a) values (203,72);
+insert into t (id,a) values (203,73);
+insert into t (id,a) values (203,74);
+insert into t (id,a) values (203,75);
+insert into t (id,a) values (203,76);
+insert into t (id,a) values (203,77);
+insert into t (id,a) values (203,78);
+insert into t (id,a) values (203,79);
+insert into t (id,a) values (203,80);
+insert into t (id,a) values (203,81);
+insert into t (id,a) values (203,82);
+insert into t (id,a) values (203,83);
+insert into t (id,a) values (203,84);
+insert into t (id,a) values (203,85);
+insert into t (id,a) values (203,86);
+insert into t (id,a) values (203,87);
+insert into t (id,a) values (203,88);
+insert into t (id,a) values (203,89);
+insert into t (id,a) values (203,90);
+insert into t (id,a) values (203,91);
+insert into t (id,a) values (203,92);
+insert into t (id,a) values (203,93);
+insert into t (id,a) values (203,94);
+insert into t (id,a) values (203,95);
+insert into t (id,a) values (203,96);
+insert into t (id,a) values (203,97);
+insert into t (id,a) values (203,98);
+insert into t (id,a) values (203,99);
+insert into t (id,a) values (204,0);
+insert into t (id,a) values (204,1);
+insert into t (id,a) values (204,2);
+insert into t (id,a) values (204,3);
+insert into t (id,a) values (204,4);
+insert into t (id,a) values (204,5);
+insert into t (id,a) values (204,6);
+insert into t (id,a) values (204,7);
+insert into t (id,a) values (204,8);
+insert into t (id,a) values (204,9);
+insert into t (id,a) values (204,10);
+insert into t (id,a) values (204,11);
+insert into t (id,a) values (204,12);
+insert into t (id,a) values (204,13);
+insert into t (id,a) values (204,14);
+insert into t (id,a) values (204,15);
+insert into t (id,a) values (204,16);
+insert into t (id,a) values (204,17);
+insert into t (id,a) values (204,18);
+insert into t (id,a) values (204,19);
+insert into t (id,a) values (204,20);
+insert into t (id,a) values (204,21);
+insert into t (id,a) values (204,22);
+insert into t (id,a) values (204,23);
+insert into t (id,a) values (204,24);
+insert into t (id,a) values (204,25);
+insert into t (id,a) values (204,26);
+insert into t (id,a) values (204,27);
+insert into t (id,a) values (204,28);
+insert into t (id,a) values (204,29);
+insert into t (id,a) values (204,30);
+insert into t (id,a) values (204,31);
+insert into t (id,a) values (204,32);
+insert into t (id,a) values (204,33);
+insert into t (id,a) values (204,34);
+insert into t (id,a) values (204,35);
+insert into t (id,a) values (204,36);
+insert into t (id,a) values (204,37);
+insert into t (id,a) values (204,38);
+insert into t (id,a) values (204,39);
+insert into t (id,a) values (204,40);
+insert into t (id,a) values (204,41);
+insert into t (id,a) values (204,42);
+insert into t (id,a) values (204,43);
+insert into t (id,a) values (204,44);
+insert into t (id,a) values (204,45);
+insert into t (id,a) values (204,46);
+insert into t (id,a) values (204,47);
+insert into t (id,a) values (204,48);
+insert into t (id,a) values (204,49);
+insert into t (id,a) values (204,50);
+insert into t (id,a) values (204,51);
+insert into t (id,a) values (204,52);
+insert into t (id,a) values (204,53);
+insert into t (id,a) values (204,54);
+insert into t (id,a) values (204,55);
+insert into t (id,a) values (204,56);
+insert into t (id,a) values (204,57);
+insert into t (id,a) values (204,58);
+insert into t (id,a) values (204,59);
+insert into t (id,a) values (204,60);
+insert into t (id,a) values (204,61);
+insert into t (id,a) values (204,62);
+insert into t (id,a) values (204,63);
+insert into t (id,a) values (204,64);
+insert into t (id,a) values (204,65);
+insert into t (id,a) values (204,66);
+insert into t (id,a) values (204,67);
+insert into t (id,a) values (204,68);
+insert into t (id,a) values (204,69);
+insert into t (id,a) values (204,70);
+insert into t (id,a) values (204,71);
+insert into t (id,a) values (204,72);
+insert into t (id,a) values (204,73);
+insert into t (id,a) values (204,74);
+insert into t (id,a) values (204,75);
+insert into t (id,a) values (204,76);
+insert into t (id,a) values (204,77);
+insert into t (id,a) values (204,78);
+insert into t (id,a) values (204,79);
+insert into t (id,a) values (204,80);
+insert into t (id,a) values (204,81);
+insert into t (id,a) values (204,82);
+insert into t (id,a) values (204,83);
+insert into t (id,a) values (204,84);
+insert into t (id,a) values (204,85);
+insert into t (id,a) values (204,86);
+insert into t (id,a) values (204,87);
+insert into t (id,a) values (204,88);
+insert into t (id,a) values (204,89);
+insert into t (id,a) values (204,90);
+insert into t (id,a) values (204,91);
+insert into t (id,a) values (204,92);
+insert into t (id,a) values (204,93);
+insert into t (id,a) values (204,94);
+insert into t (id,a) values (204,95);
+insert into t (id,a) values (204,96);
+insert into t (id,a) values (204,97);
+insert into t (id,a) values (204,98);
+insert into t (id,a) values (204,99);
+insert into t (id,a) values (205,0);
+insert into t (id,a) values (205,1);
+insert into t (id,a) values (205,2);
+insert into t (id,a) values (205,3);
+insert into t (id,a) values (205,4);
+insert into t (id,a) values (205,5);
+insert into t (id,a) values (205,6);
+insert into t (id,a) values (205,7);
+insert into t (id,a) values (205,8);
+insert into t (id,a) values (205,9);
+insert into t (id,a) values (205,10);
+insert into t (id,a) values (205,11);
+insert into t (id,a) values (205,12);
+insert into t (id,a) values (205,13);
+insert into t (id,a) values (205,14);
+insert into t (id,a) values (205,15);
+insert into t (id,a) values (205,16);
+insert into t (id,a) values (205,17);
+insert into t (id,a) values (205,18);
+insert into t (id,a) values (205,19);
+insert into t (id,a) values (205,20);
+insert into t (id,a) values (205,21);
+insert into t (id,a) values (205,22);
+insert into t (id,a) values (205,23);
+insert into t (id,a) values (205,24);
+insert into t (id,a) values (205,25);
+insert into t (id,a) values (205,26);
+insert into t (id,a) values (205,27);
+insert into t (id,a) values (205,28);
+insert into t (id,a) values (205,29);
+insert into t (id,a) values (205,30);
+insert into t (id,a) values (205,31);
+insert into t (id,a) values (205,32);
+insert into t (id,a) values (205,33);
+insert into t (id,a) values (205,34);
+insert into t (id,a) values (205,35);
+insert into t (id,a) values (205,36);
+insert into t (id,a) values (205,37);
+insert into t (id,a) values (205,38);
+insert into t (id,a) values (205,39);
+insert into t (id,a) values (205,40);
+insert into t (id,a) values (205,41);
+insert into t (id,a) values (205,42);
+insert into t (id,a) values (205,43);
+insert into t (id,a) values (205,44);
+insert into t (id,a) values (205,45);
+insert into t (id,a) values (205,46);
+insert into t (id,a) values (205,47);
+insert into t (id,a) values (205,48);
+insert into t (id,a) values (205,49);
+insert into t (id,a) values (205,50);
+insert into t (id,a) values (205,51);
+insert into t (id,a) values (205,52);
+insert into t (id,a) values (205,53);
+insert into t (id,a) values (205,54);
+insert into t (id,a) values (205,55);
+insert into t (id,a) values (205,56);
+insert into t (id,a) values (205,57);
+insert into t (id,a) values (205,58);
+insert into t (id,a) values (205,59);
+insert into t (id,a) values (205,60);
+insert into t (id,a) values (205,61);
+insert into t (id,a) values (205,62);
+insert into t (id,a) values (205,63);
+insert into t (id,a) values (205,64);
+insert into t (id,a) values (205,65);
+insert into t (id,a) values (205,66);
+insert into t (id,a) values (205,67);
+insert into t (id,a) values (205,68);
+insert into t (id,a) values (205,69);
+insert into t (id,a) values (205,70);
+insert into t (id,a) values (205,71);
+insert into t (id,a) values (205,72);
+insert into t (id,a) values (205,73);
+insert into t (id,a) values (205,74);
+insert into t (id,a) values (205,75);
+insert into t (id,a) values (205,76);
+insert into t (id,a) values (205,77);
+insert into t (id,a) values (205,78);
+insert into t (id,a) values (205,79);
+insert into t (id,a) values (205,80);
+insert into t (id,a) values (205,81);
+insert into t (id,a) values (205,82);
+insert into t (id,a) values (205,83);
+insert into t (id,a) values (205,84);
+insert into t (id,a) values (205,85);
+insert into t (id,a) values (205,86);
+insert into t (id,a) values (205,87);
+insert into t (id,a) values (205,88);
+insert into t (id,a) values (205,89);
+insert into t (id,a) values (205,90);
+insert into t (id,a) values (205,91);
+insert into t (id,a) values (205,92);
+insert into t (id,a) values (205,93);
+insert into t (id,a) values (205,94);
+insert into t (id,a) values (205,95);
+insert into t (id,a) values (205,96);
+insert into t (id,a) values (205,97);
+insert into t (id,a) values (205,98);
+insert into t (id,a) values (205,99);
+insert into t (id,a) values (206,0);
+insert into t (id,a) values (206,1);
+insert into t (id,a) values (206,2);
+insert into t (id,a) values (206,3);
+insert into t (id,a) values (206,4);
+insert into t (id,a) values (206,5);
+insert into t (id,a) values (206,6);
+insert into t (id,a) values (206,7);
+insert into t (id,a) values (206,8);
+insert into t (id,a) values (206,9);
+insert into t (id,a) values (206,10);
+insert into t (id,a) values (206,11);
+insert into t (id,a) values (206,12);
+insert into t (id,a) values (206,13);
+insert into t (id,a) values (206,14);
+insert into t (id,a) values (206,15);
+insert into t (id,a) values (206,16);
+insert into t (id,a) values (206,17);
+insert into t (id,a) values (206,18);
+insert into t (id,a) values (206,19);
+insert into t (id,a) values (206,20);
+insert into t (id,a) values (206,21);
+insert into t (id,a) values (206,22);
+insert into t (id,a) values (206,23);
+insert into t (id,a) values (206,24);
+insert into t (id,a) values (206,25);
+insert into t (id,a) values (206,26);
+insert into t (id,a) values (206,27);
+insert into t (id,a) values (206,28);
+insert into t (id,a) values (206,29);
+insert into t (id,a) values (206,30);
+insert into t (id,a) values (206,31);
+insert into t (id,a) values (206,32);
+insert into t (id,a) values (206,33);
+insert into t (id,a) values (206,34);
+insert into t (id,a) values (206,35);
+insert into t (id,a) values (206,36);
+insert into t (id,a) values (206,37);
+insert into t (id,a) values (206,38);
+insert into t (id,a) values (206,39);
+insert into t (id,a) values (206,40);
+insert into t (id,a) values (206,41);
+insert into t (id,a) values (206,42);
+insert into t (id,a) values (206,43);
+insert into t (id,a) values (206,44);
+insert into t (id,a) values (206,45);
+insert into t (id,a) values (206,46);
+insert into t (id,a) values (206,47);
+insert into t (id,a) values (206,48);
+insert into t (id,a) values (206,49);
+insert into t (id,a) values (206,50);
+insert into t (id,a) values (206,51);
+insert into t (id,a) values (206,52);
+insert into t (id,a) values (206,53);
+insert into t (id,a) values (206,54);
+insert into t (id,a) values (206,55);
+insert into t (id,a) values (206,56);
+insert into t (id,a) values (206,57);
+insert into t (id,a) values (206,58);
+insert into t (id,a) values (206,59);
+insert into t (id,a) values (206,60);
+insert into t (id,a) values (206,61);
+insert into t (id,a) values (206,62);
+insert into t (id,a) values (206,63);
+insert into t (id,a) values (206,64);
+insert into t (id,a) values (206,65);
+insert into t (id,a) values (206,66);
+insert into t (id,a) values (206,67);
+insert into t (id,a) values (206,68);
+insert into t (id,a) values (206,69);
+insert into t (id,a) values (206,70);
+insert into t (id,a) values (206,71);
+insert into t (id,a) values (206,72);
+insert into t (id,a) values (206,73);
+insert into t (id,a) values (206,74);
+insert into t (id,a) values (206,75);
+insert into t (id,a) values (206,76);
+insert into t (id,a) values (206,77);
+insert into t (id,a) values (206,78);
+insert into t (id,a) values (206,79);
+insert into t (id,a) values (206,80);
+insert into t (id,a) values (206,81);
+insert into t (id,a) values (206,82);
+insert into t (id,a) values (206,83);
+insert into t (id,a) values (206,84);
+insert into t (id,a) values (206,85);
+insert into t (id,a) values (206,86);
+insert into t (id,a) values (206,87);
+insert into t (id,a) values (206,88);
+insert into t (id,a) values (206,89);
+insert into t (id,a) values (206,90);
+insert into t (id,a) values (206,91);
+insert into t (id,a) values (206,92);
+insert into t (id,a) values (206,93);
+insert into t (id,a) values (206,94);
+insert into t (id,a) values (206,95);
+insert into t (id,a) values (206,96);
+insert into t (id,a) values (206,97);
+insert into t (id,a) values (206,98);
+insert into t (id,a) values (206,99);
+insert into t (id,a) values (207,0);
+insert into t (id,a) values (207,1);
+insert into t (id,a) values (207,2);
+insert into t (id,a) values (207,3);
+insert into t (id,a) values (207,4);
+insert into t (id,a) values (207,5);
+insert into t (id,a) values (207,6);
+insert into t (id,a) values (207,7);
+insert into t (id,a) values (207,8);
+insert into t (id,a) values (207,9);
+insert into t (id,a) values (207,10);
+insert into t (id,a) values (207,11);
+insert into t (id,a) values (207,12);
+insert into t (id,a) values (207,13);
+insert into t (id,a) values (207,14);
+insert into t (id,a) values (207,15);
+insert into t (id,a) values (207,16);
+insert into t (id,a) values (207,17);
+insert into t (id,a) values (207,18);
+insert into t (id,a) values (207,19);
+insert into t (id,a) values (207,20);
+insert into t (id,a) values (207,21);
+insert into t (id,a) values (207,22);
+insert into t (id,a) values (207,23);
+insert into t (id,a) values (207,24);
+insert into t (id,a) values (207,25);
+insert into t (id,a) values (207,26);
+insert into t (id,a) values (207,27);
+insert into t (id,a) values (207,28);
+insert into t (id,a) values (207,29);
+insert into t (id,a) values (207,30);
+insert into t (id,a) values (207,31);
+insert into t (id,a) values (207,32);
+insert into t (id,a) values (207,33);
+insert into t (id,a) values (207,34);
+insert into t (id,a) values (207,35);
+insert into t (id,a) values (207,36);
+insert into t (id,a) values (207,37);
+insert into t (id,a) values (207,38);
+insert into t (id,a) values (207,39);
+insert into t (id,a) values (207,40);
+insert into t (id,a) values (207,41);
+insert into t (id,a) values (207,42);
+insert into t (id,a) values (207,43);
+insert into t (id,a) values (207,44);
+insert into t (id,a) values (207,45);
+insert into t (id,a) values (207,46);
+insert into t (id,a) values (207,47);
+insert into t (id,a) values (207,48);
+insert into t (id,a) values (207,49);
+insert into t (id,a) values (207,50);
+insert into t (id,a) values (207,51);
+insert into t (id,a) values (207,52);
+insert into t (id,a) values (207,53);
+insert into t (id,a) values (207,54);
+insert into t (id,a) values (207,55);
+insert into t (id,a) values (207,56);
+insert into t (id,a) values (207,57);
+insert into t (id,a) values (207,58);
+insert into t (id,a) values (207,59);
+insert into t (id,a) values (207,60);
+insert into t (id,a) values (207,61);
+insert into t (id,a) values (207,62);
+insert into t (id,a) values (207,63);
+insert into t (id,a) values (207,64);
+insert into t (id,a) values (207,65);
+insert into t (id,a) values (207,66);
+insert into t (id,a) values (207,67);
+insert into t (id,a) values (207,68);
+insert into t (id,a) values (207,69);
+insert into t (id,a) values (207,70);
+insert into t (id,a) values (207,71);
+insert into t (id,a) values (207,72);
+insert into t (id,a) values (207,73);
+insert into t (id,a) values (207,74);
+insert into t (id,a) values (207,75);
+insert into t (id,a) values (207,76);
+insert into t (id,a) values (207,77);
+insert into t (id,a) values (207,78);
+insert into t (id,a) values (207,79);
+insert into t (id,a) values (207,80);
+insert into t (id,a) values (207,81);
+insert into t (id,a) values (207,82);
+insert into t (id,a) values (207,83);
+insert into t (id,a) values (207,84);
+insert into t (id,a) values (207,85);
+insert into t (id,a) values (207,86);
+insert into t (id,a) values (207,87);
+insert into t (id,a) values (207,88);
+insert into t (id,a) values (207,89);
+insert into t (id,a) values (207,90);
+insert into t (id,a) values (207,91);
+insert into t (id,a) values (207,92);
+insert into t (id,a) values (207,93);
+insert into t (id,a) values (207,94);
+insert into t (id,a) values (207,95);
+insert into t (id,a) values (207,96);
+insert into t (id,a) values (207,97);
+insert into t (id,a) values (207,98);
+insert into t (id,a) values (207,99);
+insert into t (id,a) values (208,0);
+insert into t (id,a) values (208,1);
+insert into t (id,a) values (208,2);
+insert into t (id,a) values (208,3);
+insert into t (id,a) values (208,4);
+insert into t (id,a) values (208,5);
+insert into t (id,a) values (208,6);
+insert into t (id,a) values (208,7);
+insert into t (id,a) values (208,8);
+insert into t (id,a) values (208,9);
+insert into t (id,a) values (208,10);
+insert into t (id,a) values (208,11);
+insert into t (id,a) values (208,12);
+insert into t (id,a) values (208,13);
+insert into t (id,a) values (208,14);
+insert into t (id,a) values (208,15);
+insert into t (id,a) values (208,16);
+insert into t (id,a) values (208,17);
+insert into t (id,a) values (208,18);
+insert into t (id,a) values (208,19);
+insert into t (id,a) values (208,20);
+insert into t (id,a) values (208,21);
+insert into t (id,a) values (208,22);
+insert into t (id,a) values (208,23);
+insert into t (id,a) values (208,24);
+insert into t (id,a) values (208,25);
+insert into t (id,a) values (208,26);
+insert into t (id,a) values (208,27);
+insert into t (id,a) values (208,28);
+insert into t (id,a) values (208,29);
+insert into t (id,a) values (208,30);
+insert into t (id,a) values (208,31);
+insert into t (id,a) values (208,32);
+insert into t (id,a) values (208,33);
+insert into t (id,a) values (208,34);
+insert into t (id,a) values (208,35);
+insert into t (id,a) values (208,36);
+insert into t (id,a) values (208,37);
+insert into t (id,a) values (208,38);
+insert into t (id,a) values (208,39);
+insert into t (id,a) values (208,40);
+insert into t (id,a) values (208,41);
+insert into t (id,a) values (208,42);
+insert into t (id,a) values (208,43);
+insert into t (id,a) values (208,44);
+insert into t (id,a) values (208,45);
+insert into t (id,a) values (208,46);
+insert into t (id,a) values (208,47);
+insert into t (id,a) values (208,48);
+insert into t (id,a) values (208,49);
+insert into t (id,a) values (208,50);
+insert into t (id,a) values (208,51);
+insert into t (id,a) values (208,52);
+insert into t (id,a) values (208,53);
+insert into t (id,a) values (208,54);
+insert into t (id,a) values (208,55);
+insert into t (id,a) values (208,56);
+insert into t (id,a) values (208,57);
+insert into t (id,a) values (208,58);
+insert into t (id,a) values (208,59);
+insert into t (id,a) values (208,60);
+insert into t (id,a) values (208,61);
+insert into t (id,a) values (208,62);
+insert into t (id,a) values (208,63);
+insert into t (id,a) values (208,64);
+insert into t (id,a) values (208,65);
+insert into t (id,a) values (208,66);
+insert into t (id,a) values (208,67);
+insert into t (id,a) values (208,68);
+insert into t (id,a) values (208,69);
+insert into t (id,a) values (208,70);
+insert into t (id,a) values (208,71);
+insert into t (id,a) values (208,72);
+insert into t (id,a) values (208,73);
+insert into t (id,a) values (208,74);
+insert into t (id,a) values (208,75);
+insert into t (id,a) values (208,76);
+insert into t (id,a) values (208,77);
+insert into t (id,a) values (208,78);
+insert into t (id,a) values (208,79);
+insert into t (id,a) values (208,80);
+insert into t (id,a) values (208,81);
+insert into t (id,a) values (208,82);
+insert into t (id,a) values (208,83);
+insert into t (id,a) values (208,84);
+insert into t (id,a) values (208,85);
+insert into t (id,a) values (208,86);
+insert into t (id,a) values (208,87);
+insert into t (id,a) values (208,88);
+insert into t (id,a) values (208,89);
+insert into t (id,a) values (208,90);
+insert into t (id,a) values (208,91);
+insert into t (id,a) values (208,92);
+insert into t (id,a) values (208,93);
+insert into t (id,a) values (208,94);
+insert into t (id,a) values (208,95);
+insert into t (id,a) values (208,96);
+insert into t (id,a) values (208,97);
+insert into t (id,a) values (208,98);
+insert into t (id,a) values (208,99);
+insert into t (id,a) values (209,0);
+insert into t (id,a) values (209,1);
+insert into t (id,a) values (209,2);
+insert into t (id,a) values (209,3);
+insert into t (id,a) values (209,4);
+insert into t (id,a) values (209,5);
+insert into t (id,a) values (209,6);
+insert into t (id,a) values (209,7);
+insert into t (id,a) values (209,8);
+insert into t (id,a) values (209,9);
+insert into t (id,a) values (209,10);
+insert into t (id,a) values (209,11);
+insert into t (id,a) values (209,12);
+insert into t (id,a) values (209,13);
+insert into t (id,a) values (209,14);
+insert into t (id,a) values (209,15);
+insert into t (id,a) values (209,16);
+insert into t (id,a) values (209,17);
+insert into t (id,a) values (209,18);
+insert into t (id,a) values (209,19);
+insert into t (id,a) values (209,20);
+insert into t (id,a) values (209,21);
+insert into t (id,a) values (209,22);
+insert into t (id,a) values (209,23);
+insert into t (id,a) values (209,24);
+insert into t (id,a) values (209,25);
+insert into t (id,a) values (209,26);
+insert into t (id,a) values (209,27);
+insert into t (id,a) values (209,28);
+insert into t (id,a) values (209,29);
+insert into t (id,a) values (209,30);
+insert into t (id,a) values (209,31);
+insert into t (id,a) values (209,32);
+insert into t (id,a) values (209,33);
+insert into t (id,a) values (209,34);
+insert into t (id,a) values (209,35);
+insert into t (id,a) values (209,36);
+insert into t (id,a) values (209,37);
+insert into t (id,a) values (209,38);
+insert into t (id,a) values (209,39);
+insert into t (id,a) values (209,40);
+insert into t (id,a) values (209,41);
+insert into t (id,a) values (209,42);
+insert into t (id,a) values (209,43);
+insert into t (id,a) values (209,44);
+insert into t (id,a) values (209,45);
+insert into t (id,a) values (209,46);
+insert into t (id,a) values (209,47);
+insert into t (id,a) values (209,48);
+insert into t (id,a) values (209,49);
+insert into t (id,a) values (209,50);
+insert into t (id,a) values (209,51);
+insert into t (id,a) values (209,52);
+insert into t (id,a) values (209,53);
+insert into t (id,a) values (209,54);
+insert into t (id,a) values (209,55);
+insert into t (id,a) values (209,56);
+insert into t (id,a) values (209,57);
+insert into t (id,a) values (209,58);
+insert into t (id,a) values (209,59);
+insert into t (id,a) values (209,60);
+insert into t (id,a) values (209,61);
+insert into t (id,a) values (209,62);
+insert into t (id,a) values (209,63);
+insert into t (id,a) values (209,64);
+insert into t (id,a) values (209,65);
+insert into t (id,a) values (209,66);
+insert into t (id,a) values (209,67);
+insert into t (id,a) values (209,68);
+insert into t (id,a) values (209,69);
+insert into t (id,a) values (209,70);
+insert into t (id,a) values (209,71);
+insert into t (id,a) values (209,72);
+insert into t (id,a) values (209,73);
+insert into t (id,a) values (209,74);
+insert into t (id,a) values (209,75);
+insert into t (id,a) values (209,76);
+insert into t (id,a) values (209,77);
+insert into t (id,a) values (209,78);
+insert into t (id,a) values (209,79);
+insert into t (id,a) values (209,80);
+insert into t (id,a) values (209,81);
+insert into t (id,a) values (209,82);
+insert into t (id,a) values (209,83);
+insert into t (id,a) values (209,84);
+insert into t (id,a) values (209,85);
+insert into t (id,a) values (209,86);
+insert into t (id,a) values (209,87);
+insert into t (id,a) values (209,88);
+insert into t (id,a) values (209,89);
+insert into t (id,a) values (209,90);
+insert into t (id,a) values (209,91);
+insert into t (id,a) values (209,92);
+insert into t (id,a) values (209,93);
+insert into t (id,a) values (209,94);
+insert into t (id,a) values (209,95);
+insert into t (id,a) values (209,96);
+insert into t (id,a) values (209,97);
+insert into t (id,a) values (209,98);
+insert into t (id,a) values (209,99);
+insert into t (id,a) values (210,0);
+insert into t (id,a) values (210,1);
+insert into t (id,a) values (210,2);
+insert into t (id,a) values (210,3);
+insert into t (id,a) values (210,4);
+insert into t (id,a) values (210,5);
+insert into t (id,a) values (210,6);
+insert into t (id,a) values (210,7);
+insert into t (id,a) values (210,8);
+insert into t (id,a) values (210,9);
+insert into t (id,a) values (210,10);
+insert into t (id,a) values (210,11);
+insert into t (id,a) values (210,12);
+insert into t (id,a) values (210,13);
+insert into t (id,a) values (210,14);
+insert into t (id,a) values (210,15);
+insert into t (id,a) values (210,16);
+insert into t (id,a) values (210,17);
+insert into t (id,a) values (210,18);
+insert into t (id,a) values (210,19);
+insert into t (id,a) values (210,20);
+insert into t (id,a) values (210,21);
+insert into t (id,a) values (210,22);
+insert into t (id,a) values (210,23);
+insert into t (id,a) values (210,24);
+insert into t (id,a) values (210,25);
+insert into t (id,a) values (210,26);
+insert into t (id,a) values (210,27);
+insert into t (id,a) values (210,28);
+insert into t (id,a) values (210,29);
+insert into t (id,a) values (210,30);
+insert into t (id,a) values (210,31);
+insert into t (id,a) values (210,32);
+insert into t (id,a) values (210,33);
+insert into t (id,a) values (210,34);
+insert into t (id,a) values (210,35);
+insert into t (id,a) values (210,36);
+insert into t (id,a) values (210,37);
+insert into t (id,a) values (210,38);
+insert into t (id,a) values (210,39);
+insert into t (id,a) values (210,40);
+insert into t (id,a) values (210,41);
+insert into t (id,a) values (210,42);
+insert into t (id,a) values (210,43);
+insert into t (id,a) values (210,44);
+insert into t (id,a) values (210,45);
+insert into t (id,a) values (210,46);
+insert into t (id,a) values (210,47);
+insert into t (id,a) values (210,48);
+insert into t (id,a) values (210,49);
+insert into t (id,a) values (210,50);
+insert into t (id,a) values (210,51);
+insert into t (id,a) values (210,52);
+insert into t (id,a) values (210,53);
+insert into t (id,a) values (210,54);
+insert into t (id,a) values (210,55);
+insert into t (id,a) values (210,56);
+insert into t (id,a) values (210,57);
+insert into t (id,a) values (210,58);
+insert into t (id,a) values (210,59);
+insert into t (id,a) values (210,60);
+insert into t (id,a) values (210,61);
+insert into t (id,a) values (210,62);
+insert into t (id,a) values (210,63);
+insert into t (id,a) values (210,64);
+insert into t (id,a) values (210,65);
+insert into t (id,a) values (210,66);
+insert into t (id,a) values (210,67);
+insert into t (id,a) values (210,68);
+insert into t (id,a) values (210,69);
+insert into t (id,a) values (210,70);
+insert into t (id,a) values (210,71);
+insert into t (id,a) values (210,72);
+insert into t (id,a) values (210,73);
+insert into t (id,a) values (210,74);
+insert into t (id,a) values (210,75);
+insert into t (id,a) values (210,76);
+insert into t (id,a) values (210,77);
+insert into t (id,a) values (210,78);
+insert into t (id,a) values (210,79);
+insert into t (id,a) values (210,80);
+insert into t (id,a) values (210,81);
+insert into t (id,a) values (210,82);
+insert into t (id,a) values (210,83);
+insert into t (id,a) values (210,84);
+insert into t (id,a) values (210,85);
+insert into t (id,a) values (210,86);
+insert into t (id,a) values (210,87);
+insert into t (id,a) values (210,88);
+insert into t (id,a) values (210,89);
+insert into t (id,a) values (210,90);
+insert into t (id,a) values (210,91);
+insert into t (id,a) values (210,92);
+insert into t (id,a) values (210,93);
+insert into t (id,a) values (210,94);
+insert into t (id,a) values (210,95);
+insert into t (id,a) values (210,96);
+insert into t (id,a) values (210,97);
+insert into t (id,a) values (210,98);
+insert into t (id,a) values (210,99);
+insert into t (id,a) values (211,0);
+insert into t (id,a) values (211,1);
+insert into t (id,a) values (211,2);
+insert into t (id,a) values (211,3);
+insert into t (id,a) values (211,4);
+insert into t (id,a) values (211,5);
+insert into t (id,a) values (211,6);
+insert into t (id,a) values (211,7);
+insert into t (id,a) values (211,8);
+insert into t (id,a) values (211,9);
+insert into t (id,a) values (211,10);
+insert into t (id,a) values (211,11);
+insert into t (id,a) values (211,12);
+insert into t (id,a) values (211,13);
+insert into t (id,a) values (211,14);
+insert into t (id,a) values (211,15);
+insert into t (id,a) values (211,16);
+insert into t (id,a) values (211,17);
+insert into t (id,a) values (211,18);
+insert into t (id,a) values (211,19);
+insert into t (id,a) values (211,20);
+insert into t (id,a) values (211,21);
+insert into t (id,a) values (211,22);
+insert into t (id,a) values (211,23);
+insert into t (id,a) values (211,24);
+insert into t (id,a) values (211,25);
+insert into t (id,a) values (211,26);
+insert into t (id,a) values (211,27);
+insert into t (id,a) values (211,28);
+insert into t (id,a) values (211,29);
+insert into t (id,a) values (211,30);
+insert into t (id,a) values (211,31);
+insert into t (id,a) values (211,32);
+insert into t (id,a) values (211,33);
+insert into t (id,a) values (211,34);
+insert into t (id,a) values (211,35);
+insert into t (id,a) values (211,36);
+insert into t (id,a) values (211,37);
+insert into t (id,a) values (211,38);
+insert into t (id,a) values (211,39);
+insert into t (id,a) values (211,40);
+insert into t (id,a) values (211,41);
+insert into t (id,a) values (211,42);
+insert into t (id,a) values (211,43);
+insert into t (id,a) values (211,44);
+insert into t (id,a) values (211,45);
+insert into t (id,a) values (211,46);
+insert into t (id,a) values (211,47);
+insert into t (id,a) values (211,48);
+insert into t (id,a) values (211,49);
+insert into t (id,a) values (211,50);
+insert into t (id,a) values (211,51);
+insert into t (id,a) values (211,52);
+insert into t (id,a) values (211,53);
+insert into t (id,a) values (211,54);
+insert into t (id,a) values (211,55);
+insert into t (id,a) values (211,56);
+insert into t (id,a) values (211,57);
+insert into t (id,a) values (211,58);
+insert into t (id,a) values (211,59);
+insert into t (id,a) values (211,60);
+insert into t (id,a) values (211,61);
+insert into t (id,a) values (211,62);
+insert into t (id,a) values (211,63);
+insert into t (id,a) values (211,64);
+insert into t (id,a) values (211,65);
+insert into t (id,a) values (211,66);
+insert into t (id,a) values (211,67);
+insert into t (id,a) values (211,68);
+insert into t (id,a) values (211,69);
+insert into t (id,a) values (211,70);
+insert into t (id,a) values (211,71);
+insert into t (id,a) values (211,72);
+insert into t (id,a) values (211,73);
+insert into t (id,a) values (211,74);
+insert into t (id,a) values (211,75);
+insert into t (id,a) values (211,76);
+insert into t (id,a) values (211,77);
+insert into t (id,a) values (211,78);
+insert into t (id,a) values (211,79);
+insert into t (id,a) values (211,80);
+insert into t (id,a) values (211,81);
+insert into t (id,a) values (211,82);
+insert into t (id,a) values (211,83);
+insert into t (id,a) values (211,84);
+insert into t (id,a) values (211,85);
+insert into t (id,a) values (211,86);
+insert into t (id,a) values (211,87);
+insert into t (id,a) values (211,88);
+insert into t (id,a) values (211,89);
+insert into t (id,a) values (211,90);
+insert into t (id,a) values (211,91);
+insert into t (id,a) values (211,92);
+insert into t (id,a) values (211,93);
+insert into t (id,a) values (211,94);
+insert into t (id,a) values (211,95);
+insert into t (id,a) values (211,96);
+insert into t (id,a) values (211,97);
+insert into t (id,a) values (211,98);
+insert into t (id,a) values (211,99);
+insert into t (id,a) values (212,0);
+insert into t (id,a) values (212,1);
+insert into t (id,a) values (212,2);
+insert into t (id,a) values (212,3);
+insert into t (id,a) values (212,4);
+insert into t (id,a) values (212,5);
+insert into t (id,a) values (212,6);
+insert into t (id,a) values (212,7);
+insert into t (id,a) values (212,8);
+insert into t (id,a) values (212,9);
+insert into t (id,a) values (212,10);
+insert into t (id,a) values (212,11);
+insert into t (id,a) values (212,12);
+insert into t (id,a) values (212,13);
+insert into t (id,a) values (212,14);
+insert into t (id,a) values (212,15);
+insert into t (id,a) values (212,16);
+insert into t (id,a) values (212,17);
+insert into t (id,a) values (212,18);
+insert into t (id,a) values (212,19);
+insert into t (id,a) values (212,20);
+insert into t (id,a) values (212,21);
+insert into t (id,a) values (212,22);
+insert into t (id,a) values (212,23);
+insert into t (id,a) values (212,24);
+insert into t (id,a) values (212,25);
+insert into t (id,a) values (212,26);
+insert into t (id,a) values (212,27);
+insert into t (id,a) values (212,28);
+insert into t (id,a) values (212,29);
+insert into t (id,a) values (212,30);
+insert into t (id,a) values (212,31);
+insert into t (id,a) values (212,32);
+insert into t (id,a) values (212,33);
+insert into t (id,a) values (212,34);
+insert into t (id,a) values (212,35);
+insert into t (id,a) values (212,36);
+insert into t (id,a) values (212,37);
+insert into t (id,a) values (212,38);
+insert into t (id,a) values (212,39);
+insert into t (id,a) values (212,40);
+insert into t (id,a) values (212,41);
+insert into t (id,a) values (212,42);
+insert into t (id,a) values (212,43);
+insert into t (id,a) values (212,44);
+insert into t (id,a) values (212,45);
+insert into t (id,a) values (212,46);
+insert into t (id,a) values (212,47);
+insert into t (id,a) values (212,48);
+insert into t (id,a) values (212,49);
+insert into t (id,a) values (212,50);
+insert into t (id,a) values (212,51);
+insert into t (id,a) values (212,52);
+insert into t (id,a) values (212,53);
+insert into t (id,a) values (212,54);
+insert into t (id,a) values (212,55);
+insert into t (id,a) values (212,56);
+insert into t (id,a) values (212,57);
+insert into t (id,a) values (212,58);
+insert into t (id,a) values (212,59);
+insert into t (id,a) values (212,60);
+insert into t (id,a) values (212,61);
+insert into t (id,a) values (212,62);
+insert into t (id,a) values (212,63);
+insert into t (id,a) values (212,64);
+insert into t (id,a) values (212,65);
+insert into t (id,a) values (212,66);
+insert into t (id,a) values (212,67);
+insert into t (id,a) values (212,68);
+insert into t (id,a) values (212,69);
+insert into t (id,a) values (212,70);
+insert into t (id,a) values (212,71);
+insert into t (id,a) values (212,72);
+insert into t (id,a) values (212,73);
+insert into t (id,a) values (212,74);
+insert into t (id,a) values (212,75);
+insert into t (id,a) values (212,76);
+insert into t (id,a) values (212,77);
+insert into t (id,a) values (212,78);
+insert into t (id,a) values (212,79);
+insert into t (id,a) values (212,80);
+insert into t (id,a) values (212,81);
+insert into t (id,a) values (212,82);
+insert into t (id,a) values (212,83);
+insert into t (id,a) values (212,84);
+insert into t (id,a) values (212,85);
+insert into t (id,a) values (212,86);
+insert into t (id,a) values (212,87);
+insert into t (id,a) values (212,88);
+insert into t (id,a) values (212,89);
+insert into t (id,a) values (212,90);
+insert into t (id,a) values (212,91);
+insert into t (id,a) values (212,92);
+insert into t (id,a) values (212,93);
+insert into t (id,a) values (212,94);
+insert into t (id,a) values (212,95);
+insert into t (id,a) values (212,96);
+insert into t (id,a) values (212,97);
+insert into t (id,a) values (212,98);
+insert into t (id,a) values (212,99);
+insert into t (id,a) values (213,0);
+insert into t (id,a) values (213,1);
+insert into t (id,a) values (213,2);
+insert into t (id,a) values (213,3);
+insert into t (id,a) values (213,4);
+insert into t (id,a) values (213,5);
+insert into t (id,a) values (213,6);
+insert into t (id,a) values (213,7);
+insert into t (id,a) values (213,8);
+insert into t (id,a) values (213,9);
+insert into t (id,a) values (213,10);
+insert into t (id,a) values (213,11);
+insert into t (id,a) values (213,12);
+insert into t (id,a) values (213,13);
+insert into t (id,a) values (213,14);
+insert into t (id,a) values (213,15);
+insert into t (id,a) values (213,16);
+insert into t (id,a) values (213,17);
+insert into t (id,a) values (213,18);
+insert into t (id,a) values (213,19);
+insert into t (id,a) values (213,20);
+insert into t (id,a) values (213,21);
+insert into t (id,a) values (213,22);
+insert into t (id,a) values (213,23);
+insert into t (id,a) values (213,24);
+insert into t (id,a) values (213,25);
+insert into t (id,a) values (213,26);
+insert into t (id,a) values (213,27);
+insert into t (id,a) values (213,28);
+insert into t (id,a) values (213,29);
+insert into t (id,a) values (213,30);
+insert into t (id,a) values (213,31);
+insert into t (id,a) values (213,32);
+insert into t (id,a) values (213,33);
+insert into t (id,a) values (213,34);
+insert into t (id,a) values (213,35);
+insert into t (id,a) values (213,36);
+insert into t (id,a) values (213,37);
+insert into t (id,a) values (213,38);
+insert into t (id,a) values (213,39);
+insert into t (id,a) values (213,40);
+insert into t (id,a) values (213,41);
+insert into t (id,a) values (213,42);
+insert into t (id,a) values (213,43);
+insert into t (id,a) values (213,44);
+insert into t (id,a) values (213,45);
+insert into t (id,a) values (213,46);
+insert into t (id,a) values (213,47);
+insert into t (id,a) values (213,48);
+insert into t (id,a) values (213,49);
+insert into t (id,a) values (213,50);
+insert into t (id,a) values (213,51);
+insert into t (id,a) values (213,52);
+insert into t (id,a) values (213,53);
+insert into t (id,a) values (213,54);
+insert into t (id,a) values (213,55);
+insert into t (id,a) values (213,56);
+insert into t (id,a) values (213,57);
+insert into t (id,a) values (213,58);
+insert into t (id,a) values (213,59);
+insert into t (id,a) values (213,60);
+insert into t (id,a) values (213,61);
+insert into t (id,a) values (213,62);
+insert into t (id,a) values (213,63);
+insert into t (id,a) values (213,64);
+insert into t (id,a) values (213,65);
+insert into t (id,a) values (213,66);
+insert into t (id,a) values (213,67);
+insert into t (id,a) values (213,68);
+insert into t (id,a) values (213,69);
+insert into t (id,a) values (213,70);
+insert into t (id,a) values (213,71);
+insert into t (id,a) values (213,72);
+insert into t (id,a) values (213,73);
+insert into t (id,a) values (213,74);
+insert into t (id,a) values (213,75);
+insert into t (id,a) values (213,76);
+insert into t (id,a) values (213,77);
+insert into t (id,a) values (213,78);
+insert into t (id,a) values (213,79);
+insert into t (id,a) values (213,80);
+insert into t (id,a) values (213,81);
+insert into t (id,a) values (213,82);
+insert into t (id,a) values (213,83);
+insert into t (id,a) values (213,84);
+insert into t (id,a) values (213,85);
+insert into t (id,a) values (213,86);
+insert into t (id,a) values (213,87);
+insert into t (id,a) values (213,88);
+insert into t (id,a) values (213,89);
+insert into t (id,a) values (213,90);
+insert into t (id,a) values (213,91);
+insert into t (id,a) values (213,92);
+insert into t (id,a) values (213,93);
+insert into t (id,a) values (213,94);
+insert into t (id,a) values (213,95);
+insert into t (id,a) values (213,96);
+insert into t (id,a) values (213,97);
+insert into t (id,a) values (213,98);
+insert into t (id,a) values (213,99);
+insert into t (id,a) values (214,0);
+insert into t (id,a) values (214,1);
+insert into t (id,a) values (214,2);
+insert into t (id,a) values (214,3);
+insert into t (id,a) values (214,4);
+insert into t (id,a) values (214,5);
+insert into t (id,a) values (214,6);
+insert into t (id,a) values (214,7);
+insert into t (id,a) values (214,8);
+insert into t (id,a) values (214,9);
+insert into t (id,a) values (214,10);
+insert into t (id,a) values (214,11);
+insert into t (id,a) values (214,12);
+insert into t (id,a) values (214,13);
+insert into t (id,a) values (214,14);
+insert into t (id,a) values (214,15);
+insert into t (id,a) values (214,16);
+insert into t (id,a) values (214,17);
+insert into t (id,a) values (214,18);
+insert into t (id,a) values (214,19);
+insert into t (id,a) values (214,20);
+insert into t (id,a) values (214,21);
+insert into t (id,a) values (214,22);
+insert into t (id,a) values (214,23);
+insert into t (id,a) values (214,24);
+insert into t (id,a) values (214,25);
+insert into t (id,a) values (214,26);
+insert into t (id,a) values (214,27);
+insert into t (id,a) values (214,28);
+insert into t (id,a) values (214,29);
+insert into t (id,a) values (214,30);
+insert into t (id,a) values (214,31);
+insert into t (id,a) values (214,32);
+insert into t (id,a) values (214,33);
+insert into t (id,a) values (214,34);
+insert into t (id,a) values (214,35);
+insert into t (id,a) values (214,36);
+insert into t (id,a) values (214,37);
+insert into t (id,a) values (214,38);
+insert into t (id,a) values (214,39);
+insert into t (id,a) values (214,40);
+insert into t (id,a) values (214,41);
+insert into t (id,a) values (214,42);
+insert into t (id,a) values (214,43);
+insert into t (id,a) values (214,44);
+insert into t (id,a) values (214,45);
+insert into t (id,a) values (214,46);
+insert into t (id,a) values (214,47);
+insert into t (id,a) values (214,48);
+insert into t (id,a) values (214,49);
+insert into t (id,a) values (214,50);
+insert into t (id,a) values (214,51);
+insert into t (id,a) values (214,52);
+insert into t (id,a) values (214,53);
+insert into t (id,a) values (214,54);
+insert into t (id,a) values (214,55);
+insert into t (id,a) values (214,56);
+insert into t (id,a) values (214,57);
+insert into t (id,a) values (214,58);
+insert into t (id,a) values (214,59);
+insert into t (id,a) values (214,60);
+insert into t (id,a) values (214,61);
+insert into t (id,a) values (214,62);
+insert into t (id,a) values (214,63);
+insert into t (id,a) values (214,64);
+insert into t (id,a) values (214,65);
+insert into t (id,a) values (214,66);
+insert into t (id,a) values (214,67);
+insert into t (id,a) values (214,68);
+insert into t (id,a) values (214,69);
+insert into t (id,a) values (214,70);
+insert into t (id,a) values (214,71);
+insert into t (id,a) values (214,72);
+insert into t (id,a) values (214,73);
+insert into t (id,a) values (214,74);
+insert into t (id,a) values (214,75);
+insert into t (id,a) values (214,76);
+insert into t (id,a) values (214,77);
+insert into t (id,a) values (214,78);
+insert into t (id,a) values (214,79);
+insert into t (id,a) values (214,80);
+insert into t (id,a) values (214,81);
+insert into t (id,a) values (214,82);
+insert into t (id,a) values (214,83);
+insert into t (id,a) values (214,84);
+insert into t (id,a) values (214,85);
+insert into t (id,a) values (214,86);
+insert into t (id,a) values (214,87);
+insert into t (id,a) values (214,88);
+insert into t (id,a) values (214,89);
+insert into t (id,a) values (214,90);
+insert into t (id,a) values (214,91);
+insert into t (id,a) values (214,92);
+insert into t (id,a) values (214,93);
+insert into t (id,a) values (214,94);
+insert into t (id,a) values (214,95);
+insert into t (id,a) values (214,96);
+insert into t (id,a) values (214,97);
+insert into t (id,a) values (214,98);
+insert into t (id,a) values (214,99);
+insert into t (id,a) values (215,0);
+insert into t (id,a) values (215,1);
+insert into t (id,a) values (215,2);
+insert into t (id,a) values (215,3);
+insert into t (id,a) values (215,4);
+insert into t (id,a) values (215,5);
+insert into t (id,a) values (215,6);
+insert into t (id,a) values (215,7);
+insert into t (id,a) values (215,8);
+insert into t (id,a) values (215,9);
+insert into t (id,a) values (215,10);
+insert into t (id,a) values (215,11);
+insert into t (id,a) values (215,12);
+insert into t (id,a) values (215,13);
+insert into t (id,a) values (215,14);
+insert into t (id,a) values (215,15);
+insert into t (id,a) values (215,16);
+insert into t (id,a) values (215,17);
+insert into t (id,a) values (215,18);
+insert into t (id,a) values (215,19);
+insert into t (id,a) values (215,20);
+insert into t (id,a) values (215,21);
+insert into t (id,a) values (215,22);
+insert into t (id,a) values (215,23);
+insert into t (id,a) values (215,24);
+insert into t (id,a) values (215,25);
+insert into t (id,a) values (215,26);
+insert into t (id,a) values (215,27);
+insert into t (id,a) values (215,28);
+insert into t (id,a) values (215,29);
+insert into t (id,a) values (215,30);
+insert into t (id,a) values (215,31);
+insert into t (id,a) values (215,32);
+insert into t (id,a) values (215,33);
+insert into t (id,a) values (215,34);
+insert into t (id,a) values (215,35);
+insert into t (id,a) values (215,36);
+insert into t (id,a) values (215,37);
+insert into t (id,a) values (215,38);
+insert into t (id,a) values (215,39);
+insert into t (id,a) values (215,40);
+insert into t (id,a) values (215,41);
+insert into t (id,a) values (215,42);
+insert into t (id,a) values (215,43);
+insert into t (id,a) values (215,44);
+insert into t (id,a) values (215,45);
+insert into t (id,a) values (215,46);
+insert into t (id,a) values (215,47);
+insert into t (id,a) values (215,48);
+insert into t (id,a) values (215,49);
+insert into t (id,a) values (215,50);
+insert into t (id,a) values (215,51);
+insert into t (id,a) values (215,52);
+insert into t (id,a) values (215,53);
+insert into t (id,a) values (215,54);
+insert into t (id,a) values (215,55);
+insert into t (id,a) values (215,56);
+insert into t (id,a) values (215,57);
+insert into t (id,a) values (215,58);
+insert into t (id,a) values (215,59);
+insert into t (id,a) values (215,60);
+insert into t (id,a) values (215,61);
+insert into t (id,a) values (215,62);
+insert into t (id,a) values (215,63);
+insert into t (id,a) values (215,64);
+insert into t (id,a) values (215,65);
+insert into t (id,a) values (215,66);
+insert into t (id,a) values (215,67);
+insert into t (id,a) values (215,68);
+insert into t (id,a) values (215,69);
+insert into t (id,a) values (215,70);
+insert into t (id,a) values (215,71);
+insert into t (id,a) values (215,72);
+insert into t (id,a) values (215,73);
+insert into t (id,a) values (215,74);
+insert into t (id,a) values (215,75);
+insert into t (id,a) values (215,76);
+insert into t (id,a) values (215,77);
+insert into t (id,a) values (215,78);
+insert into t (id,a) values (215,79);
+insert into t (id,a) values (215,80);
+insert into t (id,a) values (215,81);
+insert into t (id,a) values (215,82);
+insert into t (id,a) values (215,83);
+insert into t (id,a) values (215,84);
+insert into t (id,a) values (215,85);
+insert into t (id,a) values (215,86);
+insert into t (id,a) values (215,87);
+insert into t (id,a) values (215,88);
+insert into t (id,a) values (215,89);
+insert into t (id,a) values (215,90);
+insert into t (id,a) values (215,91);
+insert into t (id,a) values (215,92);
+insert into t (id,a) values (215,93);
+insert into t (id,a) values (215,94);
+insert into t (id,a) values (215,95);
+insert into t (id,a) values (215,96);
+insert into t (id,a) values (215,97);
+insert into t (id,a) values (215,98);
+insert into t (id,a) values (215,99);
+insert into t (id,a) values (216,0);
+insert into t (id,a) values (216,1);
+insert into t (id,a) values (216,2);
+insert into t (id,a) values (216,3);
+insert into t (id,a) values (216,4);
+insert into t (id,a) values (216,5);
+insert into t (id,a) values (216,6);
+insert into t (id,a) values (216,7);
+insert into t (id,a) values (216,8);
+insert into t (id,a) values (216,9);
+insert into t (id,a) values (216,10);
+insert into t (id,a) values (216,11);
+insert into t (id,a) values (216,12);
+insert into t (id,a) values (216,13);
+insert into t (id,a) values (216,14);
+insert into t (id,a) values (216,15);
+insert into t (id,a) values (216,16);
+insert into t (id,a) values (216,17);
+insert into t (id,a) values (216,18);
+insert into t (id,a) values (216,19);
+insert into t (id,a) values (216,20);
+insert into t (id,a) values (216,21);
+insert into t (id,a) values (216,22);
+insert into t (id,a) values (216,23);
+insert into t (id,a) values (216,24);
+insert into t (id,a) values (216,25);
+insert into t (id,a) values (216,26);
+insert into t (id,a) values (216,27);
+insert into t (id,a) values (216,28);
+insert into t (id,a) values (216,29);
+insert into t (id,a) values (216,30);
+insert into t (id,a) values (216,31);
+insert into t (id,a) values (216,32);
+insert into t (id,a) values (216,33);
+insert into t (id,a) values (216,34);
+insert into t (id,a) values (216,35);
+insert into t (id,a) values (216,36);
+insert into t (id,a) values (216,37);
+insert into t (id,a) values (216,38);
+insert into t (id,a) values (216,39);
+insert into t (id,a) values (216,40);
+insert into t (id,a) values (216,41);
+insert into t (id,a) values (216,42);
+insert into t (id,a) values (216,43);
+insert into t (id,a) values (216,44);
+insert into t (id,a) values (216,45);
+insert into t (id,a) values (216,46);
+insert into t (id,a) values (216,47);
+insert into t (id,a) values (216,48);
+insert into t (id,a) values (216,49);
+insert into t (id,a) values (216,50);
+insert into t (id,a) values (216,51);
+insert into t (id,a) values (216,52);
+insert into t (id,a) values (216,53);
+insert into t (id,a) values (216,54);
+insert into t (id,a) values (216,55);
+insert into t (id,a) values (216,56);
+insert into t (id,a) values (216,57);
+insert into t (id,a) values (216,58);
+insert into t (id,a) values (216,59);
+insert into t (id,a) values (216,60);
+insert into t (id,a) values (216,61);
+insert into t (id,a) values (216,62);
+insert into t (id,a) values (216,63);
+insert into t (id,a) values (216,64);
+insert into t (id,a) values (216,65);
+insert into t (id,a) values (216,66);
+insert into t (id,a) values (216,67);
+insert into t (id,a) values (216,68);
+insert into t (id,a) values (216,69);
+insert into t (id,a) values (216,70);
+insert into t (id,a) values (216,71);
+insert into t (id,a) values (216,72);
+insert into t (id,a) values (216,73);
+insert into t (id,a) values (216,74);
+insert into t (id,a) values (216,75);
+insert into t (id,a) values (216,76);
+insert into t (id,a) values (216,77);
+insert into t (id,a) values (216,78);
+insert into t (id,a) values (216,79);
+insert into t (id,a) values (216,80);
+insert into t (id,a) values (216,81);
+insert into t (id,a) values (216,82);
+insert into t (id,a) values (216,83);
+insert into t (id,a) values (216,84);
+insert into t (id,a) values (216,85);
+insert into t (id,a) values (216,86);
+insert into t (id,a) values (216,87);
+insert into t (id,a) values (216,88);
+insert into t (id,a) values (216,89);
+insert into t (id,a) values (216,90);
+insert into t (id,a) values (216,91);
+insert into t (id,a) values (216,92);
+insert into t (id,a) values (216,93);
+insert into t (id,a) values (216,94);
+insert into t (id,a) values (216,95);
+insert into t (id,a) values (216,96);
+insert into t (id,a) values (216,97);
+insert into t (id,a) values (216,98);
+insert into t (id,a) values (216,99);
+insert into t (id,a) values (217,0);
+insert into t (id,a) values (217,1);
+insert into t (id,a) values (217,2);
+insert into t (id,a) values (217,3);
+insert into t (id,a) values (217,4);
+insert into t (id,a) values (217,5);
+insert into t (id,a) values (217,6);
+insert into t (id,a) values (217,7);
+insert into t (id,a) values (217,8);
+insert into t (id,a) values (217,9);
+insert into t (id,a) values (217,10);
+insert into t (id,a) values (217,11);
+insert into t (id,a) values (217,12);
+insert into t (id,a) values (217,13);
+insert into t (id,a) values (217,14);
+insert into t (id,a) values (217,15);
+insert into t (id,a) values (217,16);
+insert into t (id,a) values (217,17);
+insert into t (id,a) values (217,18);
+insert into t (id,a) values (217,19);
+insert into t (id,a) values (217,20);
+insert into t (id,a) values (217,21);
+insert into t (id,a) values (217,22);
+insert into t (id,a) values (217,23);
+insert into t (id,a) values (217,24);
+insert into t (id,a) values (217,25);
+insert into t (id,a) values (217,26);
+insert into t (id,a) values (217,27);
+insert into t (id,a) values (217,28);
+insert into t (id,a) values (217,29);
+insert into t (id,a) values (217,30);
+insert into t (id,a) values (217,31);
+insert into t (id,a) values (217,32);
+insert into t (id,a) values (217,33);
+insert into t (id,a) values (217,34);
+insert into t (id,a) values (217,35);
+insert into t (id,a) values (217,36);
+insert into t (id,a) values (217,37);
+insert into t (id,a) values (217,38);
+insert into t (id,a) values (217,39);
+insert into t (id,a) values (217,40);
+insert into t (id,a) values (217,41);
+insert into t (id,a) values (217,42);
+insert into t (id,a) values (217,43);
+insert into t (id,a) values (217,44);
+insert into t (id,a) values (217,45);
+insert into t (id,a) values (217,46);
+insert into t (id,a) values (217,47);
+insert into t (id,a) values (217,48);
+insert into t (id,a) values (217,49);
+insert into t (id,a) values (217,50);
+insert into t (id,a) values (217,51);
+insert into t (id,a) values (217,52);
+insert into t (id,a) values (217,53);
+insert into t (id,a) values (217,54);
+insert into t (id,a) values (217,55);
+insert into t (id,a) values (217,56);
+insert into t (id,a) values (217,57);
+insert into t (id,a) values (217,58);
+insert into t (id,a) values (217,59);
+insert into t (id,a) values (217,60);
+insert into t (id,a) values (217,61);
+insert into t (id,a) values (217,62);
+insert into t (id,a) values (217,63);
+insert into t (id,a) values (217,64);
+insert into t (id,a) values (217,65);
+insert into t (id,a) values (217,66);
+insert into t (id,a) values (217,67);
+insert into t (id,a) values (217,68);
+insert into t (id,a) values (217,69);
+insert into t (id,a) values (217,70);
+insert into t (id,a) values (217,71);
+insert into t (id,a) values (217,72);
+insert into t (id,a) values (217,73);
+insert into t (id,a) values (217,74);
+insert into t (id,a) values (217,75);
+insert into t (id,a) values (217,76);
+insert into t (id,a) values (217,77);
+insert into t (id,a) values (217,78);
+insert into t (id,a) values (217,79);
+insert into t (id,a) values (217,80);
+insert into t (id,a) values (217,81);
+insert into t (id,a) values (217,82);
+insert into t (id,a) values (217,83);
+insert into t (id,a) values (217,84);
+insert into t (id,a) values (217,85);
+insert into t (id,a) values (217,86);
+insert into t (id,a) values (217,87);
+insert into t (id,a) values (217,88);
+insert into t (id,a) values (217,89);
+insert into t (id,a) values (217,90);
+insert into t (id,a) values (217,91);
+insert into t (id,a) values (217,92);
+insert into t (id,a) values (217,93);
+insert into t (id,a) values (217,94);
+insert into t (id,a) values (217,95);
+insert into t (id,a) values (217,96);
+insert into t (id,a) values (217,97);
+insert into t (id,a) values (217,98);
+insert into t (id,a) values (217,99);
+insert into t (id,a) values (218,0);
+insert into t (id,a) values (218,1);
+insert into t (id,a) values (218,2);
+insert into t (id,a) values (218,3);
+insert into t (id,a) values (218,4);
+insert into t (id,a) values (218,5);
+insert into t (id,a) values (218,6);
+insert into t (id,a) values (218,7);
+insert into t (id,a) values (218,8);
+insert into t (id,a) values (218,9);
+insert into t (id,a) values (218,10);
+insert into t (id,a) values (218,11);
+insert into t (id,a) values (218,12);
+insert into t (id,a) values (218,13);
+insert into t (id,a) values (218,14);
+insert into t (id,a) values (218,15);
+insert into t (id,a) values (218,16);
+insert into t (id,a) values (218,17);
+insert into t (id,a) values (218,18);
+insert into t (id,a) values (218,19);
+insert into t (id,a) values (218,20);
+insert into t (id,a) values (218,21);
+insert into t (id,a) values (218,22);
+insert into t (id,a) values (218,23);
+insert into t (id,a) values (218,24);
+insert into t (id,a) values (218,25);
+insert into t (id,a) values (218,26);
+insert into t (id,a) values (218,27);
+insert into t (id,a) values (218,28);
+insert into t (id,a) values (218,29);
+insert into t (id,a) values (218,30);
+insert into t (id,a) values (218,31);
+insert into t (id,a) values (218,32);
+insert into t (id,a) values (218,33);
+insert into t (id,a) values (218,34);
+insert into t (id,a) values (218,35);
+insert into t (id,a) values (218,36);
+insert into t (id,a) values (218,37);
+insert into t (id,a) values (218,38);
+insert into t (id,a) values (218,39);
+insert into t (id,a) values (218,40);
+insert into t (id,a) values (218,41);
+insert into t (id,a) values (218,42);
+insert into t (id,a) values (218,43);
+insert into t (id,a) values (218,44);
+insert into t (id,a) values (218,45);
+insert into t (id,a) values (218,46);
+insert into t (id,a) values (218,47);
+insert into t (id,a) values (218,48);
+insert into t (id,a) values (218,49);
+insert into t (id,a) values (218,50);
+insert into t (id,a) values (218,51);
+insert into t (id,a) values (218,52);
+insert into t (id,a) values (218,53);
+insert into t (id,a) values (218,54);
+insert into t (id,a) values (218,55);
+insert into t (id,a) values (218,56);
+insert into t (id,a) values (218,57);
+insert into t (id,a) values (218,58);
+insert into t (id,a) values (218,59);
+insert into t (id,a) values (218,60);
+insert into t (id,a) values (218,61);
+insert into t (id,a) values (218,62);
+insert into t (id,a) values (218,63);
+insert into t (id,a) values (218,64);
+insert into t (id,a) values (218,65);
+insert into t (id,a) values (218,66);
+insert into t (id,a) values (218,67);
+insert into t (id,a) values (218,68);
+insert into t (id,a) values (218,69);
+insert into t (id,a) values (218,70);
+insert into t (id,a) values (218,71);
+insert into t (id,a) values (218,72);
+insert into t (id,a) values (218,73);
+insert into t (id,a) values (218,74);
+insert into t (id,a) values (218,75);
+insert into t (id,a) values (218,76);
+insert into t (id,a) values (218,77);
+insert into t (id,a) values (218,78);
+insert into t (id,a) values (218,79);
+insert into t (id,a) values (218,80);
+insert into t (id,a) values (218,81);
+insert into t (id,a) values (218,82);
+insert into t (id,a) values (218,83);
+insert into t (id,a) values (218,84);
+insert into t (id,a) values (218,85);
+insert into t (id,a) values (218,86);
+insert into t (id,a) values (218,87);
+insert into t (id,a) values (218,88);
+insert into t (id,a) values (218,89);
+insert into t (id,a) values (218,90);
+insert into t (id,a) values (218,91);
+insert into t (id,a) values (218,92);
+insert into t (id,a) values (218,93);
+insert into t (id,a) values (218,94);
+insert into t (id,a) values (218,95);
+insert into t (id,a) values (218,96);
+insert into t (id,a) values (218,97);
+insert into t (id,a) values (218,98);
+insert into t (id,a) values (218,99);
+insert into t (id,a) values (219,0);
+insert into t (id,a) values (219,1);
+insert into t (id,a) values (219,2);
+insert into t (id,a) values (219,3);
+insert into t (id,a) values (219,4);
+insert into t (id,a) values (219,5);
+insert into t (id,a) values (219,6);
+insert into t (id,a) values (219,7);
+insert into t (id,a) values (219,8);
+insert into t (id,a) values (219,9);
+insert into t (id,a) values (219,10);
+insert into t (id,a) values (219,11);
+insert into t (id,a) values (219,12);
+insert into t (id,a) values (219,13);
+insert into t (id,a) values (219,14);
+insert into t (id,a) values (219,15);
+insert into t (id,a) values (219,16);
+insert into t (id,a) values (219,17);
+insert into t (id,a) values (219,18);
+insert into t (id,a) values (219,19);
+insert into t (id,a) values (219,20);
+insert into t (id,a) values (219,21);
+insert into t (id,a) values (219,22);
+insert into t (id,a) values (219,23);
+insert into t (id,a) values (219,24);
+insert into t (id,a) values (219,25);
+insert into t (id,a) values (219,26);
+insert into t (id,a) values (219,27);
+insert into t (id,a) values (219,28);
+insert into t (id,a) values (219,29);
+insert into t (id,a) values (219,30);
+insert into t (id,a) values (219,31);
+insert into t (id,a) values (219,32);
+insert into t (id,a) values (219,33);
+insert into t (id,a) values (219,34);
+insert into t (id,a) values (219,35);
+insert into t (id,a) values (219,36);
+insert into t (id,a) values (219,37);
+insert into t (id,a) values (219,38);
+insert into t (id,a) values (219,39);
+insert into t (id,a) values (219,40);
+insert into t (id,a) values (219,41);
+insert into t (id,a) values (219,42);
+insert into t (id,a) values (219,43);
+insert into t (id,a) values (219,44);
+insert into t (id,a) values (219,45);
+insert into t (id,a) values (219,46);
+insert into t (id,a) values (219,47);
+insert into t (id,a) values (219,48);
+insert into t (id,a) values (219,49);
+insert into t (id,a) values (219,50);
+insert into t (id,a) values (219,51);
+insert into t (id,a) values (219,52);
+insert into t (id,a) values (219,53);
+insert into t (id,a) values (219,54);
+insert into t (id,a) values (219,55);
+insert into t (id,a) values (219,56);
+insert into t (id,a) values (219,57);
+insert into t (id,a) values (219,58);
+insert into t (id,a) values (219,59);
+insert into t (id,a) values (219,60);
+insert into t (id,a) values (219,61);
+insert into t (id,a) values (219,62);
+insert into t (id,a) values (219,63);
+insert into t (id,a) values (219,64);
+insert into t (id,a) values (219,65);
+insert into t (id,a) values (219,66);
+insert into t (id,a) values (219,67);
+insert into t (id,a) values (219,68);
+insert into t (id,a) values (219,69);
+insert into t (id,a) values (219,70);
+insert into t (id,a) values (219,71);
+insert into t (id,a) values (219,72);
+insert into t (id,a) values (219,73);
+insert into t (id,a) values (219,74);
+insert into t (id,a) values (219,75);
+insert into t (id,a) values (219,76);
+insert into t (id,a) values (219,77);
+insert into t (id,a) values (219,78);
+insert into t (id,a) values (219,79);
+insert into t (id,a) values (219,80);
+insert into t (id,a) values (219,81);
+insert into t (id,a) values (219,82);
+insert into t (id,a) values (219,83);
+insert into t (id,a) values (219,84);
+insert into t (id,a) values (219,85);
+insert into t (id,a) values (219,86);
+insert into t (id,a) values (219,87);
+insert into t (id,a) values (219,88);
+insert into t (id,a) values (219,89);
+insert into t (id,a) values (219,90);
+insert into t (id,a) values (219,91);
+insert into t (id,a) values (219,92);
+insert into t (id,a) values (219,93);
+insert into t (id,a) values (219,94);
+insert into t (id,a) values (219,95);
+insert into t (id,a) values (219,96);
+insert into t (id,a) values (219,97);
+insert into t (id,a) values (219,98);
+insert into t (id,a) values (219,99);
+insert into t (id,a) values (220,0);
+insert into t (id,a) values (220,1);
+insert into t (id,a) values (220,2);
+insert into t (id,a) values (220,3);
+insert into t (id,a) values (220,4);
+insert into t (id,a) values (220,5);
+insert into t (id,a) values (220,6);
+insert into t (id,a) values (220,7);
+insert into t (id,a) values (220,8);
+insert into t (id,a) values (220,9);
+insert into t (id,a) values (220,10);
+insert into t (id,a) values (220,11);
+insert into t (id,a) values (220,12);
+insert into t (id,a) values (220,13);
+insert into t (id,a) values (220,14);
+insert into t (id,a) values (220,15);
+insert into t (id,a) values (220,16);
+insert into t (id,a) values (220,17);
+insert into t (id,a) values (220,18);
+insert into t (id,a) values (220,19);
+insert into t (id,a) values (220,20);
+insert into t (id,a) values (220,21);
+insert into t (id,a) values (220,22);
+insert into t (id,a) values (220,23);
+insert into t (id,a) values (220,24);
+insert into t (id,a) values (220,25);
+insert into t (id,a) values (220,26);
+insert into t (id,a) values (220,27);
+insert into t (id,a) values (220,28);
+insert into t (id,a) values (220,29);
+insert into t (id,a) values (220,30);
+insert into t (id,a) values (220,31);
+insert into t (id,a) values (220,32);
+insert into t (id,a) values (220,33);
+insert into t (id,a) values (220,34);
+insert into t (id,a) values (220,35);
+insert into t (id,a) values (220,36);
+insert into t (id,a) values (220,37);
+insert into t (id,a) values (220,38);
+insert into t (id,a) values (220,39);
+insert into t (id,a) values (220,40);
+insert into t (id,a) values (220,41);
+insert into t (id,a) values (220,42);
+insert into t (id,a) values (220,43);
+insert into t (id,a) values (220,44);
+insert into t (id,a) values (220,45);
+insert into t (id,a) values (220,46);
+insert into t (id,a) values (220,47);
+insert into t (id,a) values (220,48);
+insert into t (id,a) values (220,49);
+insert into t (id,a) values (220,50);
+insert into t (id,a) values (220,51);
+insert into t (id,a) values (220,52);
+insert into t (id,a) values (220,53);
+insert into t (id,a) values (220,54);
+insert into t (id,a) values (220,55);
+insert into t (id,a) values (220,56);
+insert into t (id,a) values (220,57);
+insert into t (id,a) values (220,58);
+insert into t (id,a) values (220,59);
+insert into t (id,a) values (220,60);
+insert into t (id,a) values (220,61);
+insert into t (id,a) values (220,62);
+insert into t (id,a) values (220,63);
+insert into t (id,a) values (220,64);
+insert into t (id,a) values (220,65);
+insert into t (id,a) values (220,66);
+insert into t (id,a) values (220,67);
+insert into t (id,a) values (220,68);
+insert into t (id,a) values (220,69);
+insert into t (id,a) values (220,70);
+insert into t (id,a) values (220,71);
+insert into t (id,a) values (220,72);
+insert into t (id,a) values (220,73);
+insert into t (id,a) values (220,74);
+insert into t (id,a) values (220,75);
+insert into t (id,a) values (220,76);
+insert into t (id,a) values (220,77);
+insert into t (id,a) values (220,78);
+insert into t (id,a) values (220,79);
+insert into t (id,a) values (220,80);
+insert into t (id,a) values (220,81);
+insert into t (id,a) values (220,82);
+insert into t (id,a) values (220,83);
+insert into t (id,a) values (220,84);
+insert into t (id,a) values (220,85);
+insert into t (id,a) values (220,86);
+insert into t (id,a) values (220,87);
+insert into t (id,a) values (220,88);
+insert into t (id,a) values (220,89);
+insert into t (id,a) values (220,90);
+insert into t (id,a) values (220,91);
+insert into t (id,a) values (220,92);
+insert into t (id,a) values (220,93);
+insert into t (id,a) values (220,94);
+insert into t (id,a) values (220,95);
+insert into t (id,a) values (220,96);
+insert into t (id,a) values (220,97);
+insert into t (id,a) values (220,98);
+insert into t (id,a) values (220,99);
+insert into t (id,a) values (221,0);
+insert into t (id,a) values (221,1);
+insert into t (id,a) values (221,2);
+insert into t (id,a) values (221,3);
+insert into t (id,a) values (221,4);
+insert into t (id,a) values (221,5);
+insert into t (id,a) values (221,6);
+insert into t (id,a) values (221,7);
+insert into t (id,a) values (221,8);
+insert into t (id,a) values (221,9);
+insert into t (id,a) values (221,10);
+insert into t (id,a) values (221,11);
+insert into t (id,a) values (221,12);
+insert into t (id,a) values (221,13);
+insert into t (id,a) values (221,14);
+insert into t (id,a) values (221,15);
+insert into t (id,a) values (221,16);
+insert into t (id,a) values (221,17);
+insert into t (id,a) values (221,18);
+insert into t (id,a) values (221,19);
+insert into t (id,a) values (221,20);
+insert into t (id,a) values (221,21);
+insert into t (id,a) values (221,22);
+insert into t (id,a) values (221,23);
+insert into t (id,a) values (221,24);
+insert into t (id,a) values (221,25);
+insert into t (id,a) values (221,26);
+insert into t (id,a) values (221,27);
+insert into t (id,a) values (221,28);
+insert into t (id,a) values (221,29);
+insert into t (id,a) values (221,30);
+insert into t (id,a) values (221,31);
+insert into t (id,a) values (221,32);
+insert into t (id,a) values (221,33);
+insert into t (id,a) values (221,34);
+insert into t (id,a) values (221,35);
+insert into t (id,a) values (221,36);
+insert into t (id,a) values (221,37);
+insert into t (id,a) values (221,38);
+insert into t (id,a) values (221,39);
+insert into t (id,a) values (221,40);
+insert into t (id,a) values (221,41);
+insert into t (id,a) values (221,42);
+insert into t (id,a) values (221,43);
+insert into t (id,a) values (221,44);
+insert into t (id,a) values (221,45);
+insert into t (id,a) values (221,46);
+insert into t (id,a) values (221,47);
+insert into t (id,a) values (221,48);
+insert into t (id,a) values (221,49);
+insert into t (id,a) values (221,50);
+insert into t (id,a) values (221,51);
+insert into t (id,a) values (221,52);
+insert into t (id,a) values (221,53);
+insert into t (id,a) values (221,54);
+insert into t (id,a) values (221,55);
+insert into t (id,a) values (221,56);
+insert into t (id,a) values (221,57);
+insert into t (id,a) values (221,58);
+insert into t (id,a) values (221,59);
+insert into t (id,a) values (221,60);
+insert into t (id,a) values (221,61);
+insert into t (id,a) values (221,62);
+insert into t (id,a) values (221,63);
+insert into t (id,a) values (221,64);
+insert into t (id,a) values (221,65);
+insert into t (id,a) values (221,66);
+insert into t (id,a) values (221,67);
+insert into t (id,a) values (221,68);
+insert into t (id,a) values (221,69);
+insert into t (id,a) values (221,70);
+insert into t (id,a) values (221,71);
+insert into t (id,a) values (221,72);
+insert into t (id,a) values (221,73);
+insert into t (id,a) values (221,74);
+insert into t (id,a) values (221,75);
+insert into t (id,a) values (221,76);
+insert into t (id,a) values (221,77);
+insert into t (id,a) values (221,78);
+insert into t (id,a) values (221,79);
+insert into t (id,a) values (221,80);
+insert into t (id,a) values (221,81);
+insert into t (id,a) values (221,82);
+insert into t (id,a) values (221,83);
+insert into t (id,a) values (221,84);
+insert into t (id,a) values (221,85);
+insert into t (id,a) values (221,86);
+insert into t (id,a) values (221,87);
+insert into t (id,a) values (221,88);
+insert into t (id,a) values (221,89);
+insert into t (id,a) values (221,90);
+insert into t (id,a) values (221,91);
+insert into t (id,a) values (221,92);
+insert into t (id,a) values (221,93);
+insert into t (id,a) values (221,94);
+insert into t (id,a) values (221,95);
+insert into t (id,a) values (221,96);
+insert into t (id,a) values (221,97);
+insert into t (id,a) values (221,98);
+insert into t (id,a) values (221,99);
+insert into t (id,a) values (222,0);
+insert into t (id,a) values (222,1);
+insert into t (id,a) values (222,2);
+insert into t (id,a) values (222,3);
+insert into t (id,a) values (222,4);
+insert into t (id,a) values (222,5);
+insert into t (id,a) values (222,6);
+insert into t (id,a) values (222,7);
+insert into t (id,a) values (222,8);
+insert into t (id,a) values (222,9);
+insert into t (id,a) values (222,10);
+insert into t (id,a) values (222,11);
+insert into t (id,a) values (222,12);
+insert into t (id,a) values (222,13);
+insert into t (id,a) values (222,14);
+insert into t (id,a) values (222,15);
+insert into t (id,a) values (222,16);
+insert into t (id,a) values (222,17);
+insert into t (id,a) values (222,18);
+insert into t (id,a) values (222,19);
+insert into t (id,a) values (222,20);
+insert into t (id,a) values (222,21);
+insert into t (id,a) values (222,22);
+insert into t (id,a) values (222,23);
+insert into t (id,a) values (222,24);
+insert into t (id,a) values (222,25);
+insert into t (id,a) values (222,26);
+insert into t (id,a) values (222,27);
+insert into t (id,a) values (222,28);
+insert into t (id,a) values (222,29);
+insert into t (id,a) values (222,30);
+insert into t (id,a) values (222,31);
+insert into t (id,a) values (222,32);
+insert into t (id,a) values (222,33);
+insert into t (id,a) values (222,34);
+insert into t (id,a) values (222,35);
+insert into t (id,a) values (222,36);
+insert into t (id,a) values (222,37);
+insert into t (id,a) values (222,38);
+insert into t (id,a) values (222,39);
+insert into t (id,a) values (222,40);
+insert into t (id,a) values (222,41);
+insert into t (id,a) values (222,42);
+insert into t (id,a) values (222,43);
+insert into t (id,a) values (222,44);
+insert into t (id,a) values (222,45);
+insert into t (id,a) values (222,46);
+insert into t (id,a) values (222,47);
+insert into t (id,a) values (222,48);
+insert into t (id,a) values (222,49);
+insert into t (id,a) values (222,50);
+insert into t (id,a) values (222,51);
+insert into t (id,a) values (222,52);
+insert into t (id,a) values (222,53);
+insert into t (id,a) values (222,54);
+insert into t (id,a) values (222,55);
+insert into t (id,a) values (222,56);
+insert into t (id,a) values (222,57);
+insert into t (id,a) values (222,58);
+insert into t (id,a) values (222,59);
+insert into t (id,a) values (222,60);
+insert into t (id,a) values (222,61);
+insert into t (id,a) values (222,62);
+insert into t (id,a) values (222,63);
+insert into t (id,a) values (222,64);
+insert into t (id,a) values (222,65);
+insert into t (id,a) values (222,66);
+insert into t (id,a) values (222,67);
+insert into t (id,a) values (222,68);
+insert into t (id,a) values (222,69);
+insert into t (id,a) values (222,70);
+insert into t (id,a) values (222,71);
+insert into t (id,a) values (222,72);
+insert into t (id,a) values (222,73);
+insert into t (id,a) values (222,74);
+insert into t (id,a) values (222,75);
+insert into t (id,a) values (222,76);
+insert into t (id,a) values (222,77);
+insert into t (id,a) values (222,78);
+insert into t (id,a) values (222,79);
+insert into t (id,a) values (222,80);
+insert into t (id,a) values (222,81);
+insert into t (id,a) values (222,82);
+insert into t (id,a) values (222,83);
+insert into t (id,a) values (222,84);
+insert into t (id,a) values (222,85);
+insert into t (id,a) values (222,86);
+insert into t (id,a) values (222,87);
+insert into t (id,a) values (222,88);
+insert into t (id,a) values (222,89);
+insert into t (id,a) values (222,90);
+insert into t (id,a) values (222,91);
+insert into t (id,a) values (222,92);
+insert into t (id,a) values (222,93);
+insert into t (id,a) values (222,94);
+insert into t (id,a) values (222,95);
+insert into t (id,a) values (222,96);
+insert into t (id,a) values (222,97);
+insert into t (id,a) values (222,98);
+insert into t (id,a) values (222,99);
+insert into t (id,a) values (223,0);
+insert into t (id,a) values (223,1);
+insert into t (id,a) values (223,2);
+insert into t (id,a) values (223,3);
+insert into t (id,a) values (223,4);
+insert into t (id,a) values (223,5);
+insert into t (id,a) values (223,6);
+insert into t (id,a) values (223,7);
+insert into t (id,a) values (223,8);
+insert into t (id,a) values (223,9);
+insert into t (id,a) values (223,10);
+insert into t (id,a) values (223,11);
+insert into t (id,a) values (223,12);
+insert into t (id,a) values (223,13);
+insert into t (id,a) values (223,14);
+insert into t (id,a) values (223,15);
+insert into t (id,a) values (223,16);
+insert into t (id,a) values (223,17);
+insert into t (id,a) values (223,18);
+insert into t (id,a) values (223,19);
+insert into t (id,a) values (223,20);
+insert into t (id,a) values (223,21);
+insert into t (id,a) values (223,22);
+insert into t (id,a) values (223,23);
+insert into t (id,a) values (223,24);
+insert into t (id,a) values (223,25);
+insert into t (id,a) values (223,26);
+insert into t (id,a) values (223,27);
+insert into t (id,a) values (223,28);
+insert into t (id,a) values (223,29);
+insert into t (id,a) values (223,30);
+insert into t (id,a) values (223,31);
+insert into t (id,a) values (223,32);
+insert into t (id,a) values (223,33);
+insert into t (id,a) values (223,34);
+insert into t (id,a) values (223,35);
+insert into t (id,a) values (223,36);
+insert into t (id,a) values (223,37);
+insert into t (id,a) values (223,38);
+insert into t (id,a) values (223,39);
+insert into t (id,a) values (223,40);
+insert into t (id,a) values (223,41);
+insert into t (id,a) values (223,42);
+insert into t (id,a) values (223,43);
+insert into t (id,a) values (223,44);
+insert into t (id,a) values (223,45);
+insert into t (id,a) values (223,46);
+insert into t (id,a) values (223,47);
+insert into t (id,a) values (223,48);
+insert into t (id,a) values (223,49);
+insert into t (id,a) values (223,50);
+insert into t (id,a) values (223,51);
+insert into t (id,a) values (223,52);
+insert into t (id,a) values (223,53);
+insert into t (id,a) values (223,54);
+insert into t (id,a) values (223,55);
+insert into t (id,a) values (223,56);
+insert into t (id,a) values (223,57);
+insert into t (id,a) values (223,58);
+insert into t (id,a) values (223,59);
+insert into t (id,a) values (223,60);
+insert into t (id,a) values (223,61);
+insert into t (id,a) values (223,62);
+insert into t (id,a) values (223,63);
+insert into t (id,a) values (223,64);
+insert into t (id,a) values (223,65);
+insert into t (id,a) values (223,66);
+insert into t (id,a) values (223,67);
+insert into t (id,a) values (223,68);
+insert into t (id,a) values (223,69);
+insert into t (id,a) values (223,70);
+insert into t (id,a) values (223,71);
+insert into t (id,a) values (223,72);
+insert into t (id,a) values (223,73);
+insert into t (id,a) values (223,74);
+insert into t (id,a) values (223,75);
+insert into t (id,a) values (223,76);
+insert into t (id,a) values (223,77);
+insert into t (id,a) values (223,78);
+insert into t (id,a) values (223,79);
+insert into t (id,a) values (223,80);
+insert into t (id,a) values (223,81);
+insert into t (id,a) values (223,82);
+insert into t (id,a) values (223,83);
+insert into t (id,a) values (223,84);
+insert into t (id,a) values (223,85);
+insert into t (id,a) values (223,86);
+insert into t (id,a) values (223,87);
+insert into t (id,a) values (223,88);
+insert into t (id,a) values (223,89);
+insert into t (id,a) values (223,90);
+insert into t (id,a) values (223,91);
+insert into t (id,a) values (223,92);
+insert into t (id,a) values (223,93);
+insert into t (id,a) values (223,94);
+insert into t (id,a) values (223,95);
+insert into t (id,a) values (223,96);
+insert into t (id,a) values (223,97);
+insert into t (id,a) values (223,98);
+insert into t (id,a) values (223,99);
+insert into t (id,a) values (224,0);
+insert into t (id,a) values (224,1);
+insert into t (id,a) values (224,2);
+insert into t (id,a) values (224,3);
+insert into t (id,a) values (224,4);
+insert into t (id,a) values (224,5);
+insert into t (id,a) values (224,6);
+insert into t (id,a) values (224,7);
+insert into t (id,a) values (224,8);
+insert into t (id,a) values (224,9);
+insert into t (id,a) values (224,10);
+insert into t (id,a) values (224,11);
+insert into t (id,a) values (224,12);
+insert into t (id,a) values (224,13);
+insert into t (id,a) values (224,14);
+insert into t (id,a) values (224,15);
+insert into t (id,a) values (224,16);
+insert into t (id,a) values (224,17);
+insert into t (id,a) values (224,18);
+insert into t (id,a) values (224,19);
+insert into t (id,a) values (224,20);
+insert into t (id,a) values (224,21);
+insert into t (id,a) values (224,22);
+insert into t (id,a) values (224,23);
+insert into t (id,a) values (224,24);
+insert into t (id,a) values (224,25);
+insert into t (id,a) values (224,26);
+insert into t (id,a) values (224,27);
+insert into t (id,a) values (224,28);
+insert into t (id,a) values (224,29);
+insert into t (id,a) values (224,30);
+insert into t (id,a) values (224,31);
+insert into t (id,a) values (224,32);
+insert into t (id,a) values (224,33);
+insert into t (id,a) values (224,34);
+insert into t (id,a) values (224,35);
+insert into t (id,a) values (224,36);
+insert into t (id,a) values (224,37);
+insert into t (id,a) values (224,38);
+insert into t (id,a) values (224,39);
+insert into t (id,a) values (224,40);
+insert into t (id,a) values (224,41);
+insert into t (id,a) values (224,42);
+insert into t (id,a) values (224,43);
+insert into t (id,a) values (224,44);
+insert into t (id,a) values (224,45);
+insert into t (id,a) values (224,46);
+insert into t (id,a) values (224,47);
+insert into t (id,a) values (224,48);
+insert into t (id,a) values (224,49);
+insert into t (id,a) values (224,50);
+insert into t (id,a) values (224,51);
+insert into t (id,a) values (224,52);
+insert into t (id,a) values (224,53);
+insert into t (id,a) values (224,54);
+insert into t (id,a) values (224,55);
+insert into t (id,a) values (224,56);
+insert into t (id,a) values (224,57);
+insert into t (id,a) values (224,58);
+insert into t (id,a) values (224,59);
+insert into t (id,a) values (224,60);
+insert into t (id,a) values (224,61);
+insert into t (id,a) values (224,62);
+insert into t (id,a) values (224,63);
+insert into t (id,a) values (224,64);
+insert into t (id,a) values (224,65);
+insert into t (id,a) values (224,66);
+insert into t (id,a) values (224,67);
+insert into t (id,a) values (224,68);
+insert into t (id,a) values (224,69);
+insert into t (id,a) values (224,70);
+insert into t (id,a) values (224,71);
+insert into t (id,a) values (224,72);
+insert into t (id,a) values (224,73);
+insert into t (id,a) values (224,74);
+insert into t (id,a) values (224,75);
+insert into t (id,a) values (224,76);
+insert into t (id,a) values (224,77);
+insert into t (id,a) values (224,78);
+insert into t (id,a) values (224,79);
+insert into t (id,a) values (224,80);
+insert into t (id,a) values (224,81);
+insert into t (id,a) values (224,82);
+insert into t (id,a) values (224,83);
+insert into t (id,a) values (224,84);
+insert into t (id,a) values (224,85);
+insert into t (id,a) values (224,86);
+insert into t (id,a) values (224,87);
+insert into t (id,a) values (224,88);
+insert into t (id,a) values (224,89);
+insert into t (id,a) values (224,90);
+insert into t (id,a) values (224,91);
+insert into t (id,a) values (224,92);
+insert into t (id,a) values (224,93);
+insert into t (id,a) values (224,94);
+insert into t (id,a) values (224,95);
+insert into t (id,a) values (224,96);
+insert into t (id,a) values (224,97);
+insert into t (id,a) values (224,98);
+insert into t (id,a) values (224,99);
+insert into t (id,a) values (225,0);
+insert into t (id,a) values (225,1);
+insert into t (id,a) values (225,2);
+insert into t (id,a) values (225,3);
+insert into t (id,a) values (225,4);
+insert into t (id,a) values (225,5);
+insert into t (id,a) values (225,6);
+insert into t (id,a) values (225,7);
+insert into t (id,a) values (225,8);
+insert into t (id,a) values (225,9);
+insert into t (id,a) values (225,10);
+insert into t (id,a) values (225,11);
+insert into t (id,a) values (225,12);
+insert into t (id,a) values (225,13);
+insert into t (id,a) values (225,14);
+insert into t (id,a) values (225,15);
+insert into t (id,a) values (225,16);
+insert into t (id,a) values (225,17);
+insert into t (id,a) values (225,18);
+insert into t (id,a) values (225,19);
+insert into t (id,a) values (225,20);
+insert into t (id,a) values (225,21);
+insert into t (id,a) values (225,22);
+insert into t (id,a) values (225,23);
+insert into t (id,a) values (225,24);
+insert into t (id,a) values (225,25);
+insert into t (id,a) values (225,26);
+insert into t (id,a) values (225,27);
+insert into t (id,a) values (225,28);
+insert into t (id,a) values (225,29);
+insert into t (id,a) values (225,30);
+insert into t (id,a) values (225,31);
+insert into t (id,a) values (225,32);
+insert into t (id,a) values (225,33);
+insert into t (id,a) values (225,34);
+insert into t (id,a) values (225,35);
+insert into t (id,a) values (225,36);
+insert into t (id,a) values (225,37);
+insert into t (id,a) values (225,38);
+insert into t (id,a) values (225,39);
+insert into t (id,a) values (225,40);
+insert into t (id,a) values (225,41);
+insert into t (id,a) values (225,42);
+insert into t (id,a) values (225,43);
+insert into t (id,a) values (225,44);
+insert into t (id,a) values (225,45);
+insert into t (id,a) values (225,46);
+insert into t (id,a) values (225,47);
+insert into t (id,a) values (225,48);
+insert into t (id,a) values (225,49);
+insert into t (id,a) values (225,50);
+insert into t (id,a) values (225,51);
+insert into t (id,a) values (225,52);
+insert into t (id,a) values (225,53);
+insert into t (id,a) values (225,54);
+insert into t (id,a) values (225,55);
+insert into t (id,a) values (225,56);
+insert into t (id,a) values (225,57);
+insert into t (id,a) values (225,58);
+insert into t (id,a) values (225,59);
+insert into t (id,a) values (225,60);
+insert into t (id,a) values (225,61);
+insert into t (id,a) values (225,62);
+insert into t (id,a) values (225,63);
+insert into t (id,a) values (225,64);
+insert into t (id,a) values (225,65);
+insert into t (id,a) values (225,66);
+insert into t (id,a) values (225,67);
+insert into t (id,a) values (225,68);
+insert into t (id,a) values (225,69);
+insert into t (id,a) values (225,70);
+insert into t (id,a) values (225,71);
+insert into t (id,a) values (225,72);
+insert into t (id,a) values (225,73);
+insert into t (id,a) values (225,74);
+insert into t (id,a) values (225,75);
+insert into t (id,a) values (225,76);
+insert into t (id,a) values (225,77);
+insert into t (id,a) values (225,78);
+insert into t (id,a) values (225,79);
+insert into t (id,a) values (225,80);
+insert into t (id,a) values (225,81);
+insert into t (id,a) values (225,82);
+insert into t (id,a) values (225,83);
+insert into t (id,a) values (225,84);
+insert into t (id,a) values (225,85);
+insert into t (id,a) values (225,86);
+insert into t (id,a) values (225,87);
+insert into t (id,a) values (225,88);
+insert into t (id,a) values (225,89);
+insert into t (id,a) values (225,90);
+insert into t (id,a) values (225,91);
+insert into t (id,a) values (225,92);
+insert into t (id,a) values (225,93);
+insert into t (id,a) values (225,94);
+insert into t (id,a) values (225,95);
+insert into t (id,a) values (225,96);
+insert into t (id,a) values (225,97);
+insert into t (id,a) values (225,98);
+insert into t (id,a) values (225,99);
+insert into t (id,a) values (226,0);
+insert into t (id,a) values (226,1);
+insert into t (id,a) values (226,2);
+insert into t (id,a) values (226,3);
+insert into t (id,a) values (226,4);
+insert into t (id,a) values (226,5);
+insert into t (id,a) values (226,6);
+insert into t (id,a) values (226,7);
+insert into t (id,a) values (226,8);
+insert into t (id,a) values (226,9);
+insert into t (id,a) values (226,10);
+insert into t (id,a) values (226,11);
+insert into t (id,a) values (226,12);
+insert into t (id,a) values (226,13);
+insert into t (id,a) values (226,14);
+insert into t (id,a) values (226,15);
+insert into t (id,a) values (226,16);
+insert into t (id,a) values (226,17);
+insert into t (id,a) values (226,18);
+insert into t (id,a) values (226,19);
+insert into t (id,a) values (226,20);
+insert into t (id,a) values (226,21);
+insert into t (id,a) values (226,22);
+insert into t (id,a) values (226,23);
+insert into t (id,a) values (226,24);
+insert into t (id,a) values (226,25);
+insert into t (id,a) values (226,26);
+insert into t (id,a) values (226,27);
+insert into t (id,a) values (226,28);
+insert into t (id,a) values (226,29);
+insert into t (id,a) values (226,30);
+insert into t (id,a) values (226,31);
+insert into t (id,a) values (226,32);
+insert into t (id,a) values (226,33);
+insert into t (id,a) values (226,34);
+insert into t (id,a) values (226,35);
+insert into t (id,a) values (226,36);
+insert into t (id,a) values (226,37);
+insert into t (id,a) values (226,38);
+insert into t (id,a) values (226,39);
+insert into t (id,a) values (226,40);
+insert into t (id,a) values (226,41);
+insert into t (id,a) values (226,42);
+insert into t (id,a) values (226,43);
+insert into t (id,a) values (226,44);
+insert into t (id,a) values (226,45);
+insert into t (id,a) values (226,46);
+insert into t (id,a) values (226,47);
+insert into t (id,a) values (226,48);
+insert into t (id,a) values (226,49);
+insert into t (id,a) values (226,50);
+insert into t (id,a) values (226,51);
+insert into t (id,a) values (226,52);
+insert into t (id,a) values (226,53);
+insert into t (id,a) values (226,54);
+insert into t (id,a) values (226,55);
+insert into t (id,a) values (226,56);
+insert into t (id,a) values (226,57);
+insert into t (id,a) values (226,58);
+insert into t (id,a) values (226,59);
+insert into t (id,a) values (226,60);
+insert into t (id,a) values (226,61);
+insert into t (id,a) values (226,62);
+insert into t (id,a) values (226,63);
+insert into t (id,a) values (226,64);
+insert into t (id,a) values (226,65);
+insert into t (id,a) values (226,66);
+insert into t (id,a) values (226,67);
+insert into t (id,a) values (226,68);
+insert into t (id,a) values (226,69);
+insert into t (id,a) values (226,70);
+insert into t (id,a) values (226,71);
+insert into t (id,a) values (226,72);
+insert into t (id,a) values (226,73);
+insert into t (id,a) values (226,74);
+insert into t (id,a) values (226,75);
+insert into t (id,a) values (226,76);
+insert into t (id,a) values (226,77);
+insert into t (id,a) values (226,78);
+insert into t (id,a) values (226,79);
+insert into t (id,a) values (226,80);
+insert into t (id,a) values (226,81);
+insert into t (id,a) values (226,82);
+insert into t (id,a) values (226,83);
+insert into t (id,a) values (226,84);
+insert into t (id,a) values (226,85);
+insert into t (id,a) values (226,86);
+insert into t (id,a) values (226,87);
+insert into t (id,a) values (226,88);
+insert into t (id,a) values (226,89);
+insert into t (id,a) values (226,90);
+insert into t (id,a) values (226,91);
+insert into t (id,a) values (226,92);
+insert into t (id,a) values (226,93);
+insert into t (id,a) values (226,94);
+insert into t (id,a) values (226,95);
+insert into t (id,a) values (226,96);
+insert into t (id,a) values (226,97);
+insert into t (id,a) values (226,98);
+insert into t (id,a) values (226,99);
+insert into t (id,a) values (227,0);
+insert into t (id,a) values (227,1);
+insert into t (id,a) values (227,2);
+insert into t (id,a) values (227,3);
+insert into t (id,a) values (227,4);
+insert into t (id,a) values (227,5);
+insert into t (id,a) values (227,6);
+insert into t (id,a) values (227,7);
+insert into t (id,a) values (227,8);
+insert into t (id,a) values (227,9);
+insert into t (id,a) values (227,10);
+insert into t (id,a) values (227,11);
+insert into t (id,a) values (227,12);
+insert into t (id,a) values (227,13);
+insert into t (id,a) values (227,14);
+insert into t (id,a) values (227,15);
+insert into t (id,a) values (227,16);
+insert into t (id,a) values (227,17);
+insert into t (id,a) values (227,18);
+insert into t (id,a) values (227,19);
+insert into t (id,a) values (227,20);
+insert into t (id,a) values (227,21);
+insert into t (id,a) values (227,22);
+insert into t (id,a) values (227,23);
+insert into t (id,a) values (227,24);
+insert into t (id,a) values (227,25);
+insert into t (id,a) values (227,26);
+insert into t (id,a) values (227,27);
+insert into t (id,a) values (227,28);
+insert into t (id,a) values (227,29);
+insert into t (id,a) values (227,30);
+insert into t (id,a) values (227,31);
+insert into t (id,a) values (227,32);
+insert into t (id,a) values (227,33);
+insert into t (id,a) values (227,34);
+insert into t (id,a) values (227,35);
+insert into t (id,a) values (227,36);
+insert into t (id,a) values (227,37);
+insert into t (id,a) values (227,38);
+insert into t (id,a) values (227,39);
+insert into t (id,a) values (227,40);
+insert into t (id,a) values (227,41);
+insert into t (id,a) values (227,42);
+insert into t (id,a) values (227,43);
+insert into t (id,a) values (227,44);
+insert into t (id,a) values (227,45);
+insert into t (id,a) values (227,46);
+insert into t (id,a) values (227,47);
+insert into t (id,a) values (227,48);
+insert into t (id,a) values (227,49);
+insert into t (id,a) values (227,50);
+insert into t (id,a) values (227,51);
+insert into t (id,a) values (227,52);
+insert into t (id,a) values (227,53);
+insert into t (id,a) values (227,54);
+insert into t (id,a) values (227,55);
+insert into t (id,a) values (227,56);
+insert into t (id,a) values (227,57);
+insert into t (id,a) values (227,58);
+insert into t (id,a) values (227,59);
+insert into t (id,a) values (227,60);
+insert into t (id,a) values (227,61);
+insert into t (id,a) values (227,62);
+insert into t (id,a) values (227,63);
+insert into t (id,a) values (227,64);
+insert into t (id,a) values (227,65);
+insert into t (id,a) values (227,66);
+insert into t (id,a) values (227,67);
+insert into t (id,a) values (227,68);
+insert into t (id,a) values (227,69);
+insert into t (id,a) values (227,70);
+insert into t (id,a) values (227,71);
+insert into t (id,a) values (227,72);
+insert into t (id,a) values (227,73);
+insert into t (id,a) values (227,74);
+insert into t (id,a) values (227,75);
+insert into t (id,a) values (227,76);
+insert into t (id,a) values (227,77);
+insert into t (id,a) values (227,78);
+insert into t (id,a) values (227,79);
+insert into t (id,a) values (227,80);
+insert into t (id,a) values (227,81);
+insert into t (id,a) values (227,82);
+insert into t (id,a) values (227,83);
+insert into t (id,a) values (227,84);
+insert into t (id,a) values (227,85);
+insert into t (id,a) values (227,86);
+insert into t (id,a) values (227,87);
+insert into t (id,a) values (227,88);
+insert into t (id,a) values (227,89);
+insert into t (id,a) values (227,90);
+insert into t (id,a) values (227,91);
+insert into t (id,a) values (227,92);
+insert into t (id,a) values (227,93);
+insert into t (id,a) values (227,94);
+insert into t (id,a) values (227,95);
+insert into t (id,a) values (227,96);
+insert into t (id,a) values (227,97);
+insert into t (id,a) values (227,98);
+insert into t (id,a) values (227,99);
+insert into t (id,a) values (228,0);
+insert into t (id,a) values (228,1);
+insert into t (id,a) values (228,2);
+insert into t (id,a) values (228,3);
+insert into t (id,a) values (228,4);
+insert into t (id,a) values (228,5);
+insert into t (id,a) values (228,6);
+insert into t (id,a) values (228,7);
+insert into t (id,a) values (228,8);
+insert into t (id,a) values (228,9);
+insert into t (id,a) values (228,10);
+insert into t (id,a) values (228,11);
+insert into t (id,a) values (228,12);
+insert into t (id,a) values (228,13);
+insert into t (id,a) values (228,14);
+insert into t (id,a) values (228,15);
+insert into t (id,a) values (228,16);
+insert into t (id,a) values (228,17);
+insert into t (id,a) values (228,18);
+insert into t (id,a) values (228,19);
+insert into t (id,a) values (228,20);
+insert into t (id,a) values (228,21);
+insert into t (id,a) values (228,22);
+insert into t (id,a) values (228,23);
+insert into t (id,a) values (228,24);
+insert into t (id,a) values (228,25);
+insert into t (id,a) values (228,26);
+insert into t (id,a) values (228,27);
+insert into t (id,a) values (228,28);
+insert into t (id,a) values (228,29);
+insert into t (id,a) values (228,30);
+insert into t (id,a) values (228,31);
+insert into t (id,a) values (228,32);
+insert into t (id,a) values (228,33);
+insert into t (id,a) values (228,34);
+insert into t (id,a) values (228,35);
+insert into t (id,a) values (228,36);
+insert into t (id,a) values (228,37);
+insert into t (id,a) values (228,38);
+insert into t (id,a) values (228,39);
+insert into t (id,a) values (228,40);
+insert into t (id,a) values (228,41);
+insert into t (id,a) values (228,42);
+insert into t (id,a) values (228,43);
+insert into t (id,a) values (228,44);
+insert into t (id,a) values (228,45);
+insert into t (id,a) values (228,46);
+insert into t (id,a) values (228,47);
+insert into t (id,a) values (228,48);
+insert into t (id,a) values (228,49);
+insert into t (id,a) values (228,50);
+insert into t (id,a) values (228,51);
+insert into t (id,a) values (228,52);
+insert into t (id,a) values (228,53);
+insert into t (id,a) values (228,54);
+insert into t (id,a) values (228,55);
+insert into t (id,a) values (228,56);
+insert into t (id,a) values (228,57);
+insert into t (id,a) values (228,58);
+insert into t (id,a) values (228,59);
+insert into t (id,a) values (228,60);
+insert into t (id,a) values (228,61);
+insert into t (id,a) values (228,62);
+insert into t (id,a) values (228,63);
+insert into t (id,a) values (228,64);
+insert into t (id,a) values (228,65);
+insert into t (id,a) values (228,66);
+insert into t (id,a) values (228,67);
+insert into t (id,a) values (228,68);
+insert into t (id,a) values (228,69);
+insert into t (id,a) values (228,70);
+insert into t (id,a) values (228,71);
+insert into t (id,a) values (228,72);
+insert into t (id,a) values (228,73);
+insert into t (id,a) values (228,74);
+insert into t (id,a) values (228,75);
+insert into t (id,a) values (228,76);
+insert into t (id,a) values (228,77);
+insert into t (id,a) values (228,78);
+insert into t (id,a) values (228,79);
+insert into t (id,a) values (228,80);
+insert into t (id,a) values (228,81);
+insert into t (id,a) values (228,82);
+insert into t (id,a) values (228,83);
+insert into t (id,a) values (228,84);
+insert into t (id,a) values (228,85);
+insert into t (id,a) values (228,86);
+insert into t (id,a) values (228,87);
+insert into t (id,a) values (228,88);
+insert into t (id,a) values (228,89);
+insert into t (id,a) values (228,90);
+insert into t (id,a) values (228,91);
+insert into t (id,a) values (228,92);
+insert into t (id,a) values (228,93);
+insert into t (id,a) values (228,94);
+insert into t (id,a) values (228,95);
+insert into t (id,a) values (228,96);
+insert into t (id,a) values (228,97);
+insert into t (id,a) values (228,98);
+insert into t (id,a) values (228,99);
+insert into t (id,a) values (229,0);
+insert into t (id,a) values (229,1);
+insert into t (id,a) values (229,2);
+insert into t (id,a) values (229,3);
+insert into t (id,a) values (229,4);
+insert into t (id,a) values (229,5);
+insert into t (id,a) values (229,6);
+insert into t (id,a) values (229,7);
+insert into t (id,a) values (229,8);
+insert into t (id,a) values (229,9);
+insert into t (id,a) values (229,10);
+insert into t (id,a) values (229,11);
+insert into t (id,a) values (229,12);
+insert into t (id,a) values (229,13);
+insert into t (id,a) values (229,14);
+insert into t (id,a) values (229,15);
+insert into t (id,a) values (229,16);
+insert into t (id,a) values (229,17);
+insert into t (id,a) values (229,18);
+insert into t (id,a) values (229,19);
+insert into t (id,a) values (229,20);
+insert into t (id,a) values (229,21);
+insert into t (id,a) values (229,22);
+insert into t (id,a) values (229,23);
+insert into t (id,a) values (229,24);
+insert into t (id,a) values (229,25);
+insert into t (id,a) values (229,26);
+insert into t (id,a) values (229,27);
+insert into t (id,a) values (229,28);
+insert into t (id,a) values (229,29);
+insert into t (id,a) values (229,30);
+insert into t (id,a) values (229,31);
+insert into t (id,a) values (229,32);
+insert into t (id,a) values (229,33);
+insert into t (id,a) values (229,34);
+insert into t (id,a) values (229,35);
+insert into t (id,a) values (229,36);
+insert into t (id,a) values (229,37);
+insert into t (id,a) values (229,38);
+insert into t (id,a) values (229,39);
+insert into t (id,a) values (229,40);
+insert into t (id,a) values (229,41);
+insert into t (id,a) values (229,42);
+insert into t (id,a) values (229,43);
+insert into t (id,a) values (229,44);
+insert into t (id,a) values (229,45);
+insert into t (id,a) values (229,46);
+insert into t (id,a) values (229,47);
+insert into t (id,a) values (229,48);
+insert into t (id,a) values (229,49);
+insert into t (id,a) values (229,50);
+insert into t (id,a) values (229,51);
+insert into t (id,a) values (229,52);
+insert into t (id,a) values (229,53);
+insert into t (id,a) values (229,54);
+insert into t (id,a) values (229,55);
+insert into t (id,a) values (229,56);
+insert into t (id,a) values (229,57);
+insert into t (id,a) values (229,58);
+insert into t (id,a) values (229,59);
+insert into t (id,a) values (229,60);
+insert into t (id,a) values (229,61);
+insert into t (id,a) values (229,62);
+insert into t (id,a) values (229,63);
+insert into t (id,a) values (229,64);
+insert into t (id,a) values (229,65);
+insert into t (id,a) values (229,66);
+insert into t (id,a) values (229,67);
+insert into t (id,a) values (229,68);
+insert into t (id,a) values (229,69);
+insert into t (id,a) values (229,70);
+insert into t (id,a) values (229,71);
+insert into t (id,a) values (229,72);
+insert into t (id,a) values (229,73);
+insert into t (id,a) values (229,74);
+insert into t (id,a) values (229,75);
+insert into t (id,a) values (229,76);
+insert into t (id,a) values (229,77);
+insert into t (id,a) values (229,78);
+insert into t (id,a) values (229,79);
+insert into t (id,a) values (229,80);
+insert into t (id,a) values (229,81);
+insert into t (id,a) values (229,82);
+insert into t (id,a) values (229,83);
+insert into t (id,a) values (229,84);
+insert into t (id,a) values (229,85);
+insert into t (id,a) values (229,86);
+insert into t (id,a) values (229,87);
+insert into t (id,a) values (229,88);
+insert into t (id,a) values (229,89);
+insert into t (id,a) values (229,90);
+insert into t (id,a) values (229,91);
+insert into t (id,a) values (229,92);
+insert into t (id,a) values (229,93);
+insert into t (id,a) values (229,94);
+insert into t (id,a) values (229,95);
+insert into t (id,a) values (229,96);
+insert into t (id,a) values (229,97);
+insert into t (id,a) values (229,98);
+insert into t (id,a) values (229,99);
+insert into t (id,a) values (230,0);
+insert into t (id,a) values (230,1);
+insert into t (id,a) values (230,2);
+insert into t (id,a) values (230,3);
+insert into t (id,a) values (230,4);
+insert into t (id,a) values (230,5);
+insert into t (id,a) values (230,6);
+insert into t (id,a) values (230,7);
+insert into t (id,a) values (230,8);
+insert into t (id,a) values (230,9);
+insert into t (id,a) values (230,10);
+insert into t (id,a) values (230,11);
+insert into t (id,a) values (230,12);
+insert into t (id,a) values (230,13);
+insert into t (id,a) values (230,14);
+insert into t (id,a) values (230,15);
+insert into t (id,a) values (230,16);
+insert into t (id,a) values (230,17);
+insert into t (id,a) values (230,18);
+insert into t (id,a) values (230,19);
+insert into t (id,a) values (230,20);
+insert into t (id,a) values (230,21);
+insert into t (id,a) values (230,22);
+insert into t (id,a) values (230,23);
+insert into t (id,a) values (230,24);
+insert into t (id,a) values (230,25);
+insert into t (id,a) values (230,26);
+insert into t (id,a) values (230,27);
+insert into t (id,a) values (230,28);
+insert into t (id,a) values (230,29);
+insert into t (id,a) values (230,30);
+insert into t (id,a) values (230,31);
+insert into t (id,a) values (230,32);
+insert into t (id,a) values (230,33);
+insert into t (id,a) values (230,34);
+insert into t (id,a) values (230,35);
+insert into t (id,a) values (230,36);
+insert into t (id,a) values (230,37);
+insert into t (id,a) values (230,38);
+insert into t (id,a) values (230,39);
+insert into t (id,a) values (230,40);
+insert into t (id,a) values (230,41);
+insert into t (id,a) values (230,42);
+insert into t (id,a) values (230,43);
+insert into t (id,a) values (230,44);
+insert into t (id,a) values (230,45);
+insert into t (id,a) values (230,46);
+insert into t (id,a) values (230,47);
+insert into t (id,a) values (230,48);
+insert into t (id,a) values (230,49);
+insert into t (id,a) values (230,50);
+insert into t (id,a) values (230,51);
+insert into t (id,a) values (230,52);
+insert into t (id,a) values (230,53);
+insert into t (id,a) values (230,54);
+insert into t (id,a) values (230,55);
+insert into t (id,a) values (230,56);
+insert into t (id,a) values (230,57);
+insert into t (id,a) values (230,58);
+insert into t (id,a) values (230,59);
+insert into t (id,a) values (230,60);
+insert into t (id,a) values (230,61);
+insert into t (id,a) values (230,62);
+insert into t (id,a) values (230,63);
+insert into t (id,a) values (230,64);
+insert into t (id,a) values (230,65);
+insert into t (id,a) values (230,66);
+insert into t (id,a) values (230,67);
+insert into t (id,a) values (230,68);
+insert into t (id,a) values (230,69);
+insert into t (id,a) values (230,70);
+insert into t (id,a) values (230,71);
+insert into t (id,a) values (230,72);
+insert into t (id,a) values (230,73);
+insert into t (id,a) values (230,74);
+insert into t (id,a) values (230,75);
+insert into t (id,a) values (230,76);
+insert into t (id,a) values (230,77);
+insert into t (id,a) values (230,78);
+insert into t (id,a) values (230,79);
+insert into t (id,a) values (230,80);
+insert into t (id,a) values (230,81);
+insert into t (id,a) values (230,82);
+insert into t (id,a) values (230,83);
+insert into t (id,a) values (230,84);
+insert into t (id,a) values (230,85);
+insert into t (id,a) values (230,86);
+insert into t (id,a) values (230,87);
+insert into t (id,a) values (230,88);
+insert into t (id,a) values (230,89);
+insert into t (id,a) values (230,90);
+insert into t (id,a) values (230,91);
+insert into t (id,a) values (230,92);
+insert into t (id,a) values (230,93);
+insert into t (id,a) values (230,94);
+insert into t (id,a) values (230,95);
+insert into t (id,a) values (230,96);
+insert into t (id,a) values (230,97);
+insert into t (id,a) values (230,98);
+insert into t (id,a) values (230,99);
+insert into t (id,a) values (231,0);
+insert into t (id,a) values (231,1);
+insert into t (id,a) values (231,2);
+insert into t (id,a) values (231,3);
+insert into t (id,a) values (231,4);
+insert into t (id,a) values (231,5);
+insert into t (id,a) values (231,6);
+insert into t (id,a) values (231,7);
+insert into t (id,a) values (231,8);
+insert into t (id,a) values (231,9);
+insert into t (id,a) values (231,10);
+insert into t (id,a) values (231,11);
+insert into t (id,a) values (231,12);
+insert into t (id,a) values (231,13);
+insert into t (id,a) values (231,14);
+insert into t (id,a) values (231,15);
+insert into t (id,a) values (231,16);
+insert into t (id,a) values (231,17);
+insert into t (id,a) values (231,18);
+insert into t (id,a) values (231,19);
+insert into t (id,a) values (231,20);
+insert into t (id,a) values (231,21);
+insert into t (id,a) values (231,22);
+insert into t (id,a) values (231,23);
+insert into t (id,a) values (231,24);
+insert into t (id,a) values (231,25);
+insert into t (id,a) values (231,26);
+insert into t (id,a) values (231,27);
+insert into t (id,a) values (231,28);
+insert into t (id,a) values (231,29);
+insert into t (id,a) values (231,30);
+insert into t (id,a) values (231,31);
+insert into t (id,a) values (231,32);
+insert into t (id,a) values (231,33);
+insert into t (id,a) values (231,34);
+insert into t (id,a) values (231,35);
+insert into t (id,a) values (231,36);
+insert into t (id,a) values (231,37);
+insert into t (id,a) values (231,38);
+insert into t (id,a) values (231,39);
+insert into t (id,a) values (231,40);
+insert into t (id,a) values (231,41);
+insert into t (id,a) values (231,42);
+insert into t (id,a) values (231,43);
+insert into t (id,a) values (231,44);
+insert into t (id,a) values (231,45);
+insert into t (id,a) values (231,46);
+insert into t (id,a) values (231,47);
+insert into t (id,a) values (231,48);
+insert into t (id,a) values (231,49);
+insert into t (id,a) values (231,50);
+insert into t (id,a) values (231,51);
+insert into t (id,a) values (231,52);
+insert into t (id,a) values (231,53);
+insert into t (id,a) values (231,54);
+insert into t (id,a) values (231,55);
+insert into t (id,a) values (231,56);
+insert into t (id,a) values (231,57);
+insert into t (id,a) values (231,58);
+insert into t (id,a) values (231,59);
+insert into t (id,a) values (231,60);
+insert into t (id,a) values (231,61);
+insert into t (id,a) values (231,62);
+insert into t (id,a) values (231,63);
+insert into t (id,a) values (231,64);
+insert into t (id,a) values (231,65);
+insert into t (id,a) values (231,66);
+insert into t (id,a) values (231,67);
+insert into t (id,a) values (231,68);
+insert into t (id,a) values (231,69);
+insert into t (id,a) values (231,70);
+insert into t (id,a) values (231,71);
+insert into t (id,a) values (231,72);
+insert into t (id,a) values (231,73);
+insert into t (id,a) values (231,74);
+insert into t (id,a) values (231,75);
+insert into t (id,a) values (231,76);
+insert into t (id,a) values (231,77);
+insert into t (id,a) values (231,78);
+insert into t (id,a) values (231,79);
+insert into t (id,a) values (231,80);
+insert into t (id,a) values (231,81);
+insert into t (id,a) values (231,82);
+insert into t (id,a) values (231,83);
+insert into t (id,a) values (231,84);
+insert into t (id,a) values (231,85);
+insert into t (id,a) values (231,86);
+insert into t (id,a) values (231,87);
+insert into t (id,a) values (231,88);
+insert into t (id,a) values (231,89);
+insert into t (id,a) values (231,90);
+insert into t (id,a) values (231,91);
+insert into t (id,a) values (231,92);
+insert into t (id,a) values (231,93);
+insert into t (id,a) values (231,94);
+insert into t (id,a) values (231,95);
+insert into t (id,a) values (231,96);
+insert into t (id,a) values (231,97);
+insert into t (id,a) values (231,98);
+insert into t (id,a) values (231,99);
+insert into t (id,a) values (232,0);
+insert into t (id,a) values (232,1);
+insert into t (id,a) values (232,2);
+insert into t (id,a) values (232,3);
+insert into t (id,a) values (232,4);
+insert into t (id,a) values (232,5);
+insert into t (id,a) values (232,6);
+insert into t (id,a) values (232,7);
+insert into t (id,a) values (232,8);
+insert into t (id,a) values (232,9);
+insert into t (id,a) values (232,10);
+insert into t (id,a) values (232,11);
+insert into t (id,a) values (232,12);
+insert into t (id,a) values (232,13);
+insert into t (id,a) values (232,14);
+insert into t (id,a) values (232,15);
+insert into t (id,a) values (232,16);
+insert into t (id,a) values (232,17);
+insert into t (id,a) values (232,18);
+insert into t (id,a) values (232,19);
+insert into t (id,a) values (232,20);
+insert into t (id,a) values (232,21);
+insert into t (id,a) values (232,22);
+insert into t (id,a) values (232,23);
+insert into t (id,a) values (232,24);
+insert into t (id,a) values (232,25);
+insert into t (id,a) values (232,26);
+insert into t (id,a) values (232,27);
+insert into t (id,a) values (232,28);
+insert into t (id,a) values (232,29);
+insert into t (id,a) values (232,30);
+insert into t (id,a) values (232,31);
+insert into t (id,a) values (232,32);
+insert into t (id,a) values (232,33);
+insert into t (id,a) values (232,34);
+insert into t (id,a) values (232,35);
+insert into t (id,a) values (232,36);
+insert into t (id,a) values (232,37);
+insert into t (id,a) values (232,38);
+insert into t (id,a) values (232,39);
+insert into t (id,a) values (232,40);
+insert into t (id,a) values (232,41);
+insert into t (id,a) values (232,42);
+insert into t (id,a) values (232,43);
+insert into t (id,a) values (232,44);
+insert into t (id,a) values (232,45);
+insert into t (id,a) values (232,46);
+insert into t (id,a) values (232,47);
+insert into t (id,a) values (232,48);
+insert into t (id,a) values (232,49);
+insert into t (id,a) values (232,50);
+insert into t (id,a) values (232,51);
+insert into t (id,a) values (232,52);
+insert into t (id,a) values (232,53);
+insert into t (id,a) values (232,54);
+insert into t (id,a) values (232,55);
+insert into t (id,a) values (232,56);
+insert into t (id,a) values (232,57);
+insert into t (id,a) values (232,58);
+insert into t (id,a) values (232,59);
+insert into t (id,a) values (232,60);
+insert into t (id,a) values (232,61);
+insert into t (id,a) values (232,62);
+insert into t (id,a) values (232,63);
+insert into t (id,a) values (232,64);
+insert into t (id,a) values (232,65);
+insert into t (id,a) values (232,66);
+insert into t (id,a) values (232,67);
+insert into t (id,a) values (232,68);
+insert into t (id,a) values (232,69);
+insert into t (id,a) values (232,70);
+insert into t (id,a) values (232,71);
+insert into t (id,a) values (232,72);
+insert into t (id,a) values (232,73);
+insert into t (id,a) values (232,74);
+insert into t (id,a) values (232,75);
+insert into t (id,a) values (232,76);
+insert into t (id,a) values (232,77);
+insert into t (id,a) values (232,78);
+insert into t (id,a) values (232,79);
+insert into t (id,a) values (232,80);
+insert into t (id,a) values (232,81);
+insert into t (id,a) values (232,82);
+insert into t (id,a) values (232,83);
+insert into t (id,a) values (232,84);
+insert into t (id,a) values (232,85);
+insert into t (id,a) values (232,86);
+insert into t (id,a) values (232,87);
+insert into t (id,a) values (232,88);
+insert into t (id,a) values (232,89);
+insert into t (id,a) values (232,90);
+insert into t (id,a) values (232,91);
+insert into t (id,a) values (232,92);
+insert into t (id,a) values (232,93);
+insert into t (id,a) values (232,94);
+insert into t (id,a) values (232,95);
+insert into t (id,a) values (232,96);
+insert into t (id,a) values (232,97);
+insert into t (id,a) values (232,98);
+insert into t (id,a) values (232,99);
+insert into t (id,a) values (233,0);
+insert into t (id,a) values (233,1);
+insert into t (id,a) values (233,2);
+insert into t (id,a) values (233,3);
+insert into t (id,a) values (233,4);
+insert into t (id,a) values (233,5);
+insert into t (id,a) values (233,6);
+insert into t (id,a) values (233,7);
+insert into t (id,a) values (233,8);
+insert into t (id,a) values (233,9);
+insert into t (id,a) values (233,10);
+insert into t (id,a) values (233,11);
+insert into t (id,a) values (233,12);
+insert into t (id,a) values (233,13);
+insert into t (id,a) values (233,14);
+insert into t (id,a) values (233,15);
+insert into t (id,a) values (233,16);
+insert into t (id,a) values (233,17);
+insert into t (id,a) values (233,18);
+insert into t (id,a) values (233,19);
+insert into t (id,a) values (233,20);
+insert into t (id,a) values (233,21);
+insert into t (id,a) values (233,22);
+insert into t (id,a) values (233,23);
+insert into t (id,a) values (233,24);
+insert into t (id,a) values (233,25);
+insert into t (id,a) values (233,26);
+insert into t (id,a) values (233,27);
+insert into t (id,a) values (233,28);
+insert into t (id,a) values (233,29);
+insert into t (id,a) values (233,30);
+insert into t (id,a) values (233,31);
+insert into t (id,a) values (233,32);
+insert into t (id,a) values (233,33);
+insert into t (id,a) values (233,34);
+insert into t (id,a) values (233,35);
+insert into t (id,a) values (233,36);
+insert into t (id,a) values (233,37);
+insert into t (id,a) values (233,38);
+insert into t (id,a) values (233,39);
+insert into t (id,a) values (233,40);
+insert into t (id,a) values (233,41);
+insert into t (id,a) values (233,42);
+insert into t (id,a) values (233,43);
+insert into t (id,a) values (233,44);
+insert into t (id,a) values (233,45);
+insert into t (id,a) values (233,46);
+insert into t (id,a) values (233,47);
+insert into t (id,a) values (233,48);
+insert into t (id,a) values (233,49);
+insert into t (id,a) values (233,50);
+insert into t (id,a) values (233,51);
+insert into t (id,a) values (233,52);
+insert into t (id,a) values (233,53);
+insert into t (id,a) values (233,54);
+insert into t (id,a) values (233,55);
+insert into t (id,a) values (233,56);
+insert into t (id,a) values (233,57);
+insert into t (id,a) values (233,58);
+insert into t (id,a) values (233,59);
+insert into t (id,a) values (233,60);
+insert into t (id,a) values (233,61);
+insert into t (id,a) values (233,62);
+insert into t (id,a) values (233,63);
+insert into t (id,a) values (233,64);
+insert into t (id,a) values (233,65);
+insert into t (id,a) values (233,66);
+insert into t (id,a) values (233,67);
+insert into t (id,a) values (233,68);
+insert into t (id,a) values (233,69);
+insert into t (id,a) values (233,70);
+insert into t (id,a) values (233,71);
+insert into t (id,a) values (233,72);
+insert into t (id,a) values (233,73);
+insert into t (id,a) values (233,74);
+insert into t (id,a) values (233,75);
+insert into t (id,a) values (233,76);
+insert into t (id,a) values (233,77);
+insert into t (id,a) values (233,78);
+insert into t (id,a) values (233,79);
+insert into t (id,a) values (233,80);
+insert into t (id,a) values (233,81);
+insert into t (id,a) values (233,82);
+insert into t (id,a) values (233,83);
+insert into t (id,a) values (233,84);
+insert into t (id,a) values (233,85);
+insert into t (id,a) values (233,86);
+insert into t (id,a) values (233,87);
+insert into t (id,a) values (233,88);
+insert into t (id,a) values (233,89);
+insert into t (id,a) values (233,90);
+insert into t (id,a) values (233,91);
+insert into t (id,a) values (233,92);
+insert into t (id,a) values (233,93);
+insert into t (id,a) values (233,94);
+insert into t (id,a) values (233,95);
+insert into t (id,a) values (233,96);
+insert into t (id,a) values (233,97);
+insert into t (id,a) values (233,98);
+insert into t (id,a) values (233,99);
+insert into t (id,a) values (234,0);
+insert into t (id,a) values (234,1);
+insert into t (id,a) values (234,2);
+insert into t (id,a) values (234,3);
+insert into t (id,a) values (234,4);
+insert into t (id,a) values (234,5);
+insert into t (id,a) values (234,6);
+insert into t (id,a) values (234,7);
+insert into t (id,a) values (234,8);
+insert into t (id,a) values (234,9);
+insert into t (id,a) values (234,10);
+insert into t (id,a) values (234,11);
+insert into t (id,a) values (234,12);
+insert into t (id,a) values (234,13);
+insert into t (id,a) values (234,14);
+insert into t (id,a) values (234,15);
+insert into t (id,a) values (234,16);
+insert into t (id,a) values (234,17);
+insert into t (id,a) values (234,18);
+insert into t (id,a) values (234,19);
+insert into t (id,a) values (234,20);
+insert into t (id,a) values (234,21);
+insert into t (id,a) values (234,22);
+insert into t (id,a) values (234,23);
+insert into t (id,a) values (234,24);
+insert into t (id,a) values (234,25);
+insert into t (id,a) values (234,26);
+insert into t (id,a) values (234,27);
+insert into t (id,a) values (234,28);
+insert into t (id,a) values (234,29);
+insert into t (id,a) values (234,30);
+insert into t (id,a) values (234,31);
+insert into t (id,a) values (234,32);
+insert into t (id,a) values (234,33);
+insert into t (id,a) values (234,34);
+insert into t (id,a) values (234,35);
+insert into t (id,a) values (234,36);
+insert into t (id,a) values (234,37);
+insert into t (id,a) values (234,38);
+insert into t (id,a) values (234,39);
+insert into t (id,a) values (234,40);
+insert into t (id,a) values (234,41);
+insert into t (id,a) values (234,42);
+insert into t (id,a) values (234,43);
+insert into t (id,a) values (234,44);
+insert into t (id,a) values (234,45);
+insert into t (id,a) values (234,46);
+insert into t (id,a) values (234,47);
+insert into t (id,a) values (234,48);
+insert into t (id,a) values (234,49);
+insert into t (id,a) values (234,50);
+insert into t (id,a) values (234,51);
+insert into t (id,a) values (234,52);
+insert into t (id,a) values (234,53);
+insert into t (id,a) values (234,54);
+insert into t (id,a) values (234,55);
+insert into t (id,a) values (234,56);
+insert into t (id,a) values (234,57);
+insert into t (id,a) values (234,58);
+insert into t (id,a) values (234,59);
+insert into t (id,a) values (234,60);
+insert into t (id,a) values (234,61);
+insert into t (id,a) values (234,62);
+insert into t (id,a) values (234,63);
+insert into t (id,a) values (234,64);
+insert into t (id,a) values (234,65);
+insert into t (id,a) values (234,66);
+insert into t (id,a) values (234,67);
+insert into t (id,a) values (234,68);
+insert into t (id,a) values (234,69);
+insert into t (id,a) values (234,70);
+insert into t (id,a) values (234,71);
+insert into t (id,a) values (234,72);
+insert into t (id,a) values (234,73);
+insert into t (id,a) values (234,74);
+insert into t (id,a) values (234,75);
+insert into t (id,a) values (234,76);
+insert into t (id,a) values (234,77);
+insert into t (id,a) values (234,78);
+insert into t (id,a) values (234,79);
+insert into t (id,a) values (234,80);
+insert into t (id,a) values (234,81);
+insert into t (id,a) values (234,82);
+insert into t (id,a) values (234,83);
+insert into t (id,a) values (234,84);
+insert into t (id,a) values (234,85);
+insert into t (id,a) values (234,86);
+insert into t (id,a) values (234,87);
+insert into t (id,a) values (234,88);
+insert into t (id,a) values (234,89);
+insert into t (id,a) values (234,90);
+insert into t (id,a) values (234,91);
+insert into t (id,a) values (234,92);
+insert into t (id,a) values (234,93);
+insert into t (id,a) values (234,94);
+insert into t (id,a) values (234,95);
+insert into t (id,a) values (234,96);
+insert into t (id,a) values (234,97);
+insert into t (id,a) values (234,98);
+insert into t (id,a) values (234,99);
+insert into t (id,a) values (235,0);
+insert into t (id,a) values (235,1);
+insert into t (id,a) values (235,2);
+insert into t (id,a) values (235,3);
+insert into t (id,a) values (235,4);
+insert into t (id,a) values (235,5);
+insert into t (id,a) values (235,6);
+insert into t (id,a) values (235,7);
+insert into t (id,a) values (235,8);
+insert into t (id,a) values (235,9);
+insert into t (id,a) values (235,10);
+insert into t (id,a) values (235,11);
+insert into t (id,a) values (235,12);
+insert into t (id,a) values (235,13);
+insert into t (id,a) values (235,14);
+insert into t (id,a) values (235,15);
+insert into t (id,a) values (235,16);
+insert into t (id,a) values (235,17);
+insert into t (id,a) values (235,18);
+insert into t (id,a) values (235,19);
+insert into t (id,a) values (235,20);
+insert into t (id,a) values (235,21);
+insert into t (id,a) values (235,22);
+insert into t (id,a) values (235,23);
+insert into t (id,a) values (235,24);
+insert into t (id,a) values (235,25);
+insert into t (id,a) values (235,26);
+insert into t (id,a) values (235,27);
+insert into t (id,a) values (235,28);
+insert into t (id,a) values (235,29);
+insert into t (id,a) values (235,30);
+insert into t (id,a) values (235,31);
+insert into t (id,a) values (235,32);
+insert into t (id,a) values (235,33);
+insert into t (id,a) values (235,34);
+insert into t (id,a) values (235,35);
+insert into t (id,a) values (235,36);
+insert into t (id,a) values (235,37);
+insert into t (id,a) values (235,38);
+insert into t (id,a) values (235,39);
+insert into t (id,a) values (235,40);
+insert into t (id,a) values (235,41);
+insert into t (id,a) values (235,42);
+insert into t (id,a) values (235,43);
+insert into t (id,a) values (235,44);
+insert into t (id,a) values (235,45);
+insert into t (id,a) values (235,46);
+insert into t (id,a) values (235,47);
+insert into t (id,a) values (235,48);
+insert into t (id,a) values (235,49);
+insert into t (id,a) values (235,50);
+insert into t (id,a) values (235,51);
+insert into t (id,a) values (235,52);
+insert into t (id,a) values (235,53);
+insert into t (id,a) values (235,54);
+insert into t (id,a) values (235,55);
+insert into t (id,a) values (235,56);
+insert into t (id,a) values (235,57);
+insert into t (id,a) values (235,58);
+insert into t (id,a) values (235,59);
+insert into t (id,a) values (235,60);
+insert into t (id,a) values (235,61);
+insert into t (id,a) values (235,62);
+insert into t (id,a) values (235,63);
+insert into t (id,a) values (235,64);
+insert into t (id,a) values (235,65);
+insert into t (id,a) values (235,66);
+insert into t (id,a) values (235,67);
+insert into t (id,a) values (235,68);
+insert into t (id,a) values (235,69);
+insert into t (id,a) values (235,70);
+insert into t (id,a) values (235,71);
+insert into t (id,a) values (235,72);
+insert into t (id,a) values (235,73);
+insert into t (id,a) values (235,74);
+insert into t (id,a) values (235,75);
+insert into t (id,a) values (235,76);
+insert into t (id,a) values (235,77);
+insert into t (id,a) values (235,78);
+insert into t (id,a) values (235,79);
+insert into t (id,a) values (235,80);
+insert into t (id,a) values (235,81);
+insert into t (id,a) values (235,82);
+insert into t (id,a) values (235,83);
+insert into t (id,a) values (235,84);
+insert into t (id,a) values (235,85);
+insert into t (id,a) values (235,86);
+insert into t (id,a) values (235,87);
+insert into t (id,a) values (235,88);
+insert into t (id,a) values (235,89);
+insert into t (id,a) values (235,90);
+insert into t (id,a) values (235,91);
+insert into t (id,a) values (235,92);
+insert into t (id,a) values (235,93);
+insert into t (id,a) values (235,94);
+insert into t (id,a) values (235,95);
+insert into t (id,a) values (235,96);
+insert into t (id,a) values (235,97);
+insert into t (id,a) values (235,98);
+insert into t (id,a) values (235,99);
+insert into t (id,a) values (236,0);
+insert into t (id,a) values (236,1);
+insert into t (id,a) values (236,2);
+insert into t (id,a) values (236,3);
+insert into t (id,a) values (236,4);
+insert into t (id,a) values (236,5);
+insert into t (id,a) values (236,6);
+insert into t (id,a) values (236,7);
+insert into t (id,a) values (236,8);
+insert into t (id,a) values (236,9);
+insert into t (id,a) values (236,10);
+insert into t (id,a) values (236,11);
+insert into t (id,a) values (236,12);
+insert into t (id,a) values (236,13);
+insert into t (id,a) values (236,14);
+insert into t (id,a) values (236,15);
+insert into t (id,a) values (236,16);
+insert into t (id,a) values (236,17);
+insert into t (id,a) values (236,18);
+insert into t (id,a) values (236,19);
+insert into t (id,a) values (236,20);
+insert into t (id,a) values (236,21);
+insert into t (id,a) values (236,22);
+insert into t (id,a) values (236,23);
+insert into t (id,a) values (236,24);
+insert into t (id,a) values (236,25);
+insert into t (id,a) values (236,26);
+insert into t (id,a) values (236,27);
+insert into t (id,a) values (236,28);
+insert into t (id,a) values (236,29);
+insert into t (id,a) values (236,30);
+insert into t (id,a) values (236,31);
+insert into t (id,a) values (236,32);
+insert into t (id,a) values (236,33);
+insert into t (id,a) values (236,34);
+insert into t (id,a) values (236,35);
+insert into t (id,a) values (236,36);
+insert into t (id,a) values (236,37);
+insert into t (id,a) values (236,38);
+insert into t (id,a) values (236,39);
+insert into t (id,a) values (236,40);
+insert into t (id,a) values (236,41);
+insert into t (id,a) values (236,42);
+insert into t (id,a) values (236,43);
+insert into t (id,a) values (236,44);
+insert into t (id,a) values (236,45);
+insert into t (id,a) values (236,46);
+insert into t (id,a) values (236,47);
+insert into t (id,a) values (236,48);
+insert into t (id,a) values (236,49);
+insert into t (id,a) values (236,50);
+insert into t (id,a) values (236,51);
+insert into t (id,a) values (236,52);
+insert into t (id,a) values (236,53);
+insert into t (id,a) values (236,54);
+insert into t (id,a) values (236,55);
+insert into t (id,a) values (236,56);
+insert into t (id,a) values (236,57);
+insert into t (id,a) values (236,58);
+insert into t (id,a) values (236,59);
+insert into t (id,a) values (236,60);
+insert into t (id,a) values (236,61);
+insert into t (id,a) values (236,62);
+insert into t (id,a) values (236,63);
+insert into t (id,a) values (236,64);
+insert into t (id,a) values (236,65);
+insert into t (id,a) values (236,66);
+insert into t (id,a) values (236,67);
+insert into t (id,a) values (236,68);
+insert into t (id,a) values (236,69);
+insert into t (id,a) values (236,70);
+insert into t (id,a) values (236,71);
+insert into t (id,a) values (236,72);
+insert into t (id,a) values (236,73);
+insert into t (id,a) values (236,74);
+insert into t (id,a) values (236,75);
+insert into t (id,a) values (236,76);
+insert into t (id,a) values (236,77);
+insert into t (id,a) values (236,78);
+insert into t (id,a) values (236,79);
+insert into t (id,a) values (236,80);
+insert into t (id,a) values (236,81);
+insert into t (id,a) values (236,82);
+insert into t (id,a) values (236,83);
+insert into t (id,a) values (236,84);
+insert into t (id,a) values (236,85);
+insert into t (id,a) values (236,86);
+insert into t (id,a) values (236,87);
+insert into t (id,a) values (236,88);
+insert into t (id,a) values (236,89);
+insert into t (id,a) values (236,90);
+insert into t (id,a) values (236,91);
+insert into t (id,a) values (236,92);
+insert into t (id,a) values (236,93);
+insert into t (id,a) values (236,94);
+insert into t (id,a) values (236,95);
+insert into t (id,a) values (236,96);
+insert into t (id,a) values (236,97);
+insert into t (id,a) values (236,98);
+insert into t (id,a) values (236,99);
+insert into t (id,a) values (237,0);
+insert into t (id,a) values (237,1);
+insert into t (id,a) values (237,2);
+insert into t (id,a) values (237,3);
+insert into t (id,a) values (237,4);
+insert into t (id,a) values (237,5);
+insert into t (id,a) values (237,6);
+insert into t (id,a) values (237,7);
+insert into t (id,a) values (237,8);
+insert into t (id,a) values (237,9);
+insert into t (id,a) values (237,10);
+insert into t (id,a) values (237,11);
+insert into t (id,a) values (237,12);
+insert into t (id,a) values (237,13);
+insert into t (id,a) values (237,14);
+insert into t (id,a) values (237,15);
+insert into t (id,a) values (237,16);
+insert into t (id,a) values (237,17);
+insert into t (id,a) values (237,18);
+insert into t (id,a) values (237,19);
+insert into t (id,a) values (237,20);
+insert into t (id,a) values (237,21);
+insert into t (id,a) values (237,22);
+insert into t (id,a) values (237,23);
+insert into t (id,a) values (237,24);
+insert into t (id,a) values (237,25);
+insert into t (id,a) values (237,26);
+insert into t (id,a) values (237,27);
+insert into t (id,a) values (237,28);
+insert into t (id,a) values (237,29);
+insert into t (id,a) values (237,30);
+insert into t (id,a) values (237,31);
+insert into t (id,a) values (237,32);
+insert into t (id,a) values (237,33);
+insert into t (id,a) values (237,34);
+insert into t (id,a) values (237,35);
+insert into t (id,a) values (237,36);
+insert into t (id,a) values (237,37);
+insert into t (id,a) values (237,38);
+insert into t (id,a) values (237,39);
+insert into t (id,a) values (237,40);
+insert into t (id,a) values (237,41);
+insert into t (id,a) values (237,42);
+insert into t (id,a) values (237,43);
+insert into t (id,a) values (237,44);
+insert into t (id,a) values (237,45);
+insert into t (id,a) values (237,46);
+insert into t (id,a) values (237,47);
+insert into t (id,a) values (237,48);
+insert into t (id,a) values (237,49);
+insert into t (id,a) values (237,50);
+insert into t (id,a) values (237,51);
+insert into t (id,a) values (237,52);
+insert into t (id,a) values (237,53);
+insert into t (id,a) values (237,54);
+insert into t (id,a) values (237,55);
+insert into t (id,a) values (237,56);
+insert into t (id,a) values (237,57);
+insert into t (id,a) values (237,58);
+insert into t (id,a) values (237,59);
+insert into t (id,a) values (237,60);
+insert into t (id,a) values (237,61);
+insert into t (id,a) values (237,62);
+insert into t (id,a) values (237,63);
+insert into t (id,a) values (237,64);
+insert into t (id,a) values (237,65);
+insert into t (id,a) values (237,66);
+insert into t (id,a) values (237,67);
+insert into t (id,a) values (237,68);
+insert into t (id,a) values (237,69);
+insert into t (id,a) values (237,70);
+insert into t (id,a) values (237,71);
+insert into t (id,a) values (237,72);
+insert into t (id,a) values (237,73);
+insert into t (id,a) values (237,74);
+insert into t (id,a) values (237,75);
+insert into t (id,a) values (237,76);
+insert into t (id,a) values (237,77);
+insert into t (id,a) values (237,78);
+insert into t (id,a) values (237,79);
+insert into t (id,a) values (237,80);
+insert into t (id,a) values (237,81);
+insert into t (id,a) values (237,82);
+insert into t (id,a) values (237,83);
+insert into t (id,a) values (237,84);
+insert into t (id,a) values (237,85);
+insert into t (id,a) values (237,86);
+insert into t (id,a) values (237,87);
+insert into t (id,a) values (237,88);
+insert into t (id,a) values (237,89);
+insert into t (id,a) values (237,90);
+insert into t (id,a) values (237,91);
+insert into t (id,a) values (237,92);
+insert into t (id,a) values (237,93);
+insert into t (id,a) values (237,94);
+insert into t (id,a) values (237,95);
+insert into t (id,a) values (237,96);
+insert into t (id,a) values (237,97);
+insert into t (id,a) values (237,98);
+insert into t (id,a) values (237,99);
+insert into t (id,a) values (238,0);
+insert into t (id,a) values (238,1);
+insert into t (id,a) values (238,2);
+insert into t (id,a) values (238,3);
+insert into t (id,a) values (238,4);
+insert into t (id,a) values (238,5);
+insert into t (id,a) values (238,6);
+insert into t (id,a) values (238,7);
+insert into t (id,a) values (238,8);
+insert into t (id,a) values (238,9);
+insert into t (id,a) values (238,10);
+insert into t (id,a) values (238,11);
+insert into t (id,a) values (238,12);
+insert into t (id,a) values (238,13);
+insert into t (id,a) values (238,14);
+insert into t (id,a) values (238,15);
+insert into t (id,a) values (238,16);
+insert into t (id,a) values (238,17);
+insert into t (id,a) values (238,18);
+insert into t (id,a) values (238,19);
+insert into t (id,a) values (238,20);
+insert into t (id,a) values (238,21);
+insert into t (id,a) values (238,22);
+insert into t (id,a) values (238,23);
+insert into t (id,a) values (238,24);
+insert into t (id,a) values (238,25);
+insert into t (id,a) values (238,26);
+insert into t (id,a) values (238,27);
+insert into t (id,a) values (238,28);
+insert into t (id,a) values (238,29);
+insert into t (id,a) values (238,30);
+insert into t (id,a) values (238,31);
+insert into t (id,a) values (238,32);
+insert into t (id,a) values (238,33);
+insert into t (id,a) values (238,34);
+insert into t (id,a) values (238,35);
+insert into t (id,a) values (238,36);
+insert into t (id,a) values (238,37);
+insert into t (id,a) values (238,38);
+insert into t (id,a) values (238,39);
+insert into t (id,a) values (238,40);
+insert into t (id,a) values (238,41);
+insert into t (id,a) values (238,42);
+insert into t (id,a) values (238,43);
+insert into t (id,a) values (238,44);
+insert into t (id,a) values (238,45);
+insert into t (id,a) values (238,46);
+insert into t (id,a) values (238,47);
+insert into t (id,a) values (238,48);
+insert into t (id,a) values (238,49);
+insert into t (id,a) values (238,50);
+insert into t (id,a) values (238,51);
+insert into t (id,a) values (238,52);
+insert into t (id,a) values (238,53);
+insert into t (id,a) values (238,54);
+insert into t (id,a) values (238,55);
+insert into t (id,a) values (238,56);
+insert into t (id,a) values (238,57);
+insert into t (id,a) values (238,58);
+insert into t (id,a) values (238,59);
+insert into t (id,a) values (238,60);
+insert into t (id,a) values (238,61);
+insert into t (id,a) values (238,62);
+insert into t (id,a) values (238,63);
+insert into t (id,a) values (238,64);
+insert into t (id,a) values (238,65);
+insert into t (id,a) values (238,66);
+insert into t (id,a) values (238,67);
+insert into t (id,a) values (238,68);
+insert into t (id,a) values (238,69);
+insert into t (id,a) values (238,70);
+insert into t (id,a) values (238,71);
+insert into t (id,a) values (238,72);
+insert into t (id,a) values (238,73);
+insert into t (id,a) values (238,74);
+insert into t (id,a) values (238,75);
+insert into t (id,a) values (238,76);
+insert into t (id,a) values (238,77);
+insert into t (id,a) values (238,78);
+insert into t (id,a) values (238,79);
+insert into t (id,a) values (238,80);
+insert into t (id,a) values (238,81);
+insert into t (id,a) values (238,82);
+insert into t (id,a) values (238,83);
+insert into t (id,a) values (238,84);
+insert into t (id,a) values (238,85);
+insert into t (id,a) values (238,86);
+insert into t (id,a) values (238,87);
+insert into t (id,a) values (238,88);
+insert into t (id,a) values (238,89);
+insert into t (id,a) values (238,90);
+insert into t (id,a) values (238,91);
+insert into t (id,a) values (238,92);
+insert into t (id,a) values (238,93);
+insert into t (id,a) values (238,94);
+insert into t (id,a) values (238,95);
+insert into t (id,a) values (238,96);
+insert into t (id,a) values (238,97);
+insert into t (id,a) values (238,98);
+insert into t (id,a) values (238,99);
+insert into t (id,a) values (239,0);
+insert into t (id,a) values (239,1);
+insert into t (id,a) values (239,2);
+insert into t (id,a) values (239,3);
+insert into t (id,a) values (239,4);
+insert into t (id,a) values (239,5);
+insert into t (id,a) values (239,6);
+insert into t (id,a) values (239,7);
+insert into t (id,a) values (239,8);
+insert into t (id,a) values (239,9);
+insert into t (id,a) values (239,10);
+insert into t (id,a) values (239,11);
+insert into t (id,a) values (239,12);
+insert into t (id,a) values (239,13);
+insert into t (id,a) values (239,14);
+insert into t (id,a) values (239,15);
+insert into t (id,a) values (239,16);
+insert into t (id,a) values (239,17);
+insert into t (id,a) values (239,18);
+insert into t (id,a) values (239,19);
+insert into t (id,a) values (239,20);
+insert into t (id,a) values (239,21);
+insert into t (id,a) values (239,22);
+insert into t (id,a) values (239,23);
+insert into t (id,a) values (239,24);
+insert into t (id,a) values (239,25);
+insert into t (id,a) values (239,26);
+insert into t (id,a) values (239,27);
+insert into t (id,a) values (239,28);
+insert into t (id,a) values (239,29);
+insert into t (id,a) values (239,30);
+insert into t (id,a) values (239,31);
+insert into t (id,a) values (239,32);
+insert into t (id,a) values (239,33);
+insert into t (id,a) values (239,34);
+insert into t (id,a) values (239,35);
+insert into t (id,a) values (239,36);
+insert into t (id,a) values (239,37);
+insert into t (id,a) values (239,38);
+insert into t (id,a) values (239,39);
+insert into t (id,a) values (239,40);
+insert into t (id,a) values (239,41);
+insert into t (id,a) values (239,42);
+insert into t (id,a) values (239,43);
+insert into t (id,a) values (239,44);
+insert into t (id,a) values (239,45);
+insert into t (id,a) values (239,46);
+insert into t (id,a) values (239,47);
+insert into t (id,a) values (239,48);
+insert into t (id,a) values (239,49);
+insert into t (id,a) values (239,50);
+insert into t (id,a) values (239,51);
+insert into t (id,a) values (239,52);
+insert into t (id,a) values (239,53);
+insert into t (id,a) values (239,54);
+insert into t (id,a) values (239,55);
+insert into t (id,a) values (239,56);
+insert into t (id,a) values (239,57);
+insert into t (id,a) values (239,58);
+insert into t (id,a) values (239,59);
+insert into t (id,a) values (239,60);
+insert into t (id,a) values (239,61);
+insert into t (id,a) values (239,62);
+insert into t (id,a) values (239,63);
+insert into t (id,a) values (239,64);
+insert into t (id,a) values (239,65);
+insert into t (id,a) values (239,66);
+insert into t (id,a) values (239,67);
+insert into t (id,a) values (239,68);
+insert into t (id,a) values (239,69);
+insert into t (id,a) values (239,70);
+insert into t (id,a) values (239,71);
+insert into t (id,a) values (239,72);
+insert into t (id,a) values (239,73);
+insert into t (id,a) values (239,74);
+insert into t (id,a) values (239,75);
+insert into t (id,a) values (239,76);
+insert into t (id,a) values (239,77);
+insert into t (id,a) values (239,78);
+insert into t (id,a) values (239,79);
+insert into t (id,a) values (239,80);
+insert into t (id,a) values (239,81);
+insert into t (id,a) values (239,82);
+insert into t (id,a) values (239,83);
+insert into t (id,a) values (239,84);
+insert into t (id,a) values (239,85);
+insert into t (id,a) values (239,86);
+insert into t (id,a) values (239,87);
+insert into t (id,a) values (239,88);
+insert into t (id,a) values (239,89);
+insert into t (id,a) values (239,90);
+insert into t (id,a) values (239,91);
+insert into t (id,a) values (239,92);
+insert into t (id,a) values (239,93);
+insert into t (id,a) values (239,94);
+insert into t (id,a) values (239,95);
+insert into t (id,a) values (239,96);
+insert into t (id,a) values (239,97);
+insert into t (id,a) values (239,98);
+insert into t (id,a) values (239,99);
+insert into t (id,a) values (240,0);
+insert into t (id,a) values (240,1);
+insert into t (id,a) values (240,2);
+insert into t (id,a) values (240,3);
+insert into t (id,a) values (240,4);
+insert into t (id,a) values (240,5);
+insert into t (id,a) values (240,6);
+insert into t (id,a) values (240,7);
+insert into t (id,a) values (240,8);
+insert into t (id,a) values (240,9);
+insert into t (id,a) values (240,10);
+insert into t (id,a) values (240,11);
+insert into t (id,a) values (240,12);
+insert into t (id,a) values (240,13);
+insert into t (id,a) values (240,14);
+insert into t (id,a) values (240,15);
+insert into t (id,a) values (240,16);
+insert into t (id,a) values (240,17);
+insert into t (id,a) values (240,18);
+insert into t (id,a) values (240,19);
+insert into t (id,a) values (240,20);
+insert into t (id,a) values (240,21);
+insert into t (id,a) values (240,22);
+insert into t (id,a) values (240,23);
+insert into t (id,a) values (240,24);
+insert into t (id,a) values (240,25);
+insert into t (id,a) values (240,26);
+insert into t (id,a) values (240,27);
+insert into t (id,a) values (240,28);
+insert into t (id,a) values (240,29);
+insert into t (id,a) values (240,30);
+insert into t (id,a) values (240,31);
+insert into t (id,a) values (240,32);
+insert into t (id,a) values (240,33);
+insert into t (id,a) values (240,34);
+insert into t (id,a) values (240,35);
+insert into t (id,a) values (240,36);
+insert into t (id,a) values (240,37);
+insert into t (id,a) values (240,38);
+insert into t (id,a) values (240,39);
+insert into t (id,a) values (240,40);
+insert into t (id,a) values (240,41);
+insert into t (id,a) values (240,42);
+insert into t (id,a) values (240,43);
+insert into t (id,a) values (240,44);
+insert into t (id,a) values (240,45);
+insert into t (id,a) values (240,46);
+insert into t (id,a) values (240,47);
+insert into t (id,a) values (240,48);
+insert into t (id,a) values (240,49);
+insert into t (id,a) values (240,50);
+insert into t (id,a) values (240,51);
+insert into t (id,a) values (240,52);
+insert into t (id,a) values (240,53);
+insert into t (id,a) values (240,54);
+insert into t (id,a) values (240,55);
+insert into t (id,a) values (240,56);
+insert into t (id,a) values (240,57);
+insert into t (id,a) values (240,58);
+insert into t (id,a) values (240,59);
+insert into t (id,a) values (240,60);
+insert into t (id,a) values (240,61);
+insert into t (id,a) values (240,62);
+insert into t (id,a) values (240,63);
+insert into t (id,a) values (240,64);
+insert into t (id,a) values (240,65);
+insert into t (id,a) values (240,66);
+insert into t (id,a) values (240,67);
+insert into t (id,a) values (240,68);
+insert into t (id,a) values (240,69);
+insert into t (id,a) values (240,70);
+insert into t (id,a) values (240,71);
+insert into t (id,a) values (240,72);
+insert into t (id,a) values (240,73);
+insert into t (id,a) values (240,74);
+insert into t (id,a) values (240,75);
+insert into t (id,a) values (240,76);
+insert into t (id,a) values (240,77);
+insert into t (id,a) values (240,78);
+insert into t (id,a) values (240,79);
+insert into t (id,a) values (240,80);
+insert into t (id,a) values (240,81);
+insert into t (id,a) values (240,82);
+insert into t (id,a) values (240,83);
+insert into t (id,a) values (240,84);
+insert into t (id,a) values (240,85);
+insert into t (id,a) values (240,86);
+insert into t (id,a) values (240,87);
+insert into t (id,a) values (240,88);
+insert into t (id,a) values (240,89);
+insert into t (id,a) values (240,90);
+insert into t (id,a) values (240,91);
+insert into t (id,a) values (240,92);
+insert into t (id,a) values (240,93);
+insert into t (id,a) values (240,94);
+insert into t (id,a) values (240,95);
+insert into t (id,a) values (240,96);
+insert into t (id,a) values (240,97);
+insert into t (id,a) values (240,98);
+insert into t (id,a) values (240,99);
+insert into t (id,a) values (241,0);
+insert into t (id,a) values (241,1);
+insert into t (id,a) values (241,2);
+insert into t (id,a) values (241,3);
+insert into t (id,a) values (241,4);
+insert into t (id,a) values (241,5);
+insert into t (id,a) values (241,6);
+insert into t (id,a) values (241,7);
+insert into t (id,a) values (241,8);
+insert into t (id,a) values (241,9);
+insert into t (id,a) values (241,10);
+insert into t (id,a) values (241,11);
+insert into t (id,a) values (241,12);
+insert into t (id,a) values (241,13);
+insert into t (id,a) values (241,14);
+insert into t (id,a) values (241,15);
+insert into t (id,a) values (241,16);
+insert into t (id,a) values (241,17);
+insert into t (id,a) values (241,18);
+insert into t (id,a) values (241,19);
+insert into t (id,a) values (241,20);
+insert into t (id,a) values (241,21);
+insert into t (id,a) values (241,22);
+insert into t (id,a) values (241,23);
+insert into t (id,a) values (241,24);
+insert into t (id,a) values (241,25);
+insert into t (id,a) values (241,26);
+insert into t (id,a) values (241,27);
+insert into t (id,a) values (241,28);
+insert into t (id,a) values (241,29);
+insert into t (id,a) values (241,30);
+insert into t (id,a) values (241,31);
+insert into t (id,a) values (241,32);
+insert into t (id,a) values (241,33);
+insert into t (id,a) values (241,34);
+insert into t (id,a) values (241,35);
+insert into t (id,a) values (241,36);
+insert into t (id,a) values (241,37);
+insert into t (id,a) values (241,38);
+insert into t (id,a) values (241,39);
+insert into t (id,a) values (241,40);
+insert into t (id,a) values (241,41);
+insert into t (id,a) values (241,42);
+insert into t (id,a) values (241,43);
+insert into t (id,a) values (241,44);
+insert into t (id,a) values (241,45);
+insert into t (id,a) values (241,46);
+insert into t (id,a) values (241,47);
+insert into t (id,a) values (241,48);
+insert into t (id,a) values (241,49);
+insert into t (id,a) values (241,50);
+insert into t (id,a) values (241,51);
+insert into t (id,a) values (241,52);
+insert into t (id,a) values (241,53);
+insert into t (id,a) values (241,54);
+insert into t (id,a) values (241,55);
+insert into t (id,a) values (241,56);
+insert into t (id,a) values (241,57);
+insert into t (id,a) values (241,58);
+insert into t (id,a) values (241,59);
+insert into t (id,a) values (241,60);
+insert into t (id,a) values (241,61);
+insert into t (id,a) values (241,62);
+insert into t (id,a) values (241,63);
+insert into t (id,a) values (241,64);
+insert into t (id,a) values (241,65);
+insert into t (id,a) values (241,66);
+insert into t (id,a) values (241,67);
+insert into t (id,a) values (241,68);
+insert into t (id,a) values (241,69);
+insert into t (id,a) values (241,70);
+insert into t (id,a) values (241,71);
+insert into t (id,a) values (241,72);
+insert into t (id,a) values (241,73);
+insert into t (id,a) values (241,74);
+insert into t (id,a) values (241,75);
+insert into t (id,a) values (241,76);
+insert into t (id,a) values (241,77);
+insert into t (id,a) values (241,78);
+insert into t (id,a) values (241,79);
+insert into t (id,a) values (241,80);
+insert into t (id,a) values (241,81);
+insert into t (id,a) values (241,82);
+insert into t (id,a) values (241,83);
+insert into t (id,a) values (241,84);
+insert into t (id,a) values (241,85);
+insert into t (id,a) values (241,86);
+insert into t (id,a) values (241,87);
+insert into t (id,a) values (241,88);
+insert into t (id,a) values (241,89);
+insert into t (id,a) values (241,90);
+insert into t (id,a) values (241,91);
+insert into t (id,a) values (241,92);
+insert into t (id,a) values (241,93);
+insert into t (id,a) values (241,94);
+insert into t (id,a) values (241,95);
+insert into t (id,a) values (241,96);
+insert into t (id,a) values (241,97);
+insert into t (id,a) values (241,98);
+insert into t (id,a) values (241,99);
+insert into t (id,a) values (242,0);
+insert into t (id,a) values (242,1);
+insert into t (id,a) values (242,2);
+insert into t (id,a) values (242,3);
+insert into t (id,a) values (242,4);
+insert into t (id,a) values (242,5);
+insert into t (id,a) values (242,6);
+insert into t (id,a) values (242,7);
+insert into t (id,a) values (242,8);
+insert into t (id,a) values (242,9);
+insert into t (id,a) values (242,10);
+insert into t (id,a) values (242,11);
+insert into t (id,a) values (242,12);
+insert into t (id,a) values (242,13);
+insert into t (id,a) values (242,14);
+insert into t (id,a) values (242,15);
+insert into t (id,a) values (242,16);
+insert into t (id,a) values (242,17);
+insert into t (id,a) values (242,18);
+insert into t (id,a) values (242,19);
+insert into t (id,a) values (242,20);
+insert into t (id,a) values (242,21);
+insert into t (id,a) values (242,22);
+insert into t (id,a) values (242,23);
+insert into t (id,a) values (242,24);
+insert into t (id,a) values (242,25);
+insert into t (id,a) values (242,26);
+insert into t (id,a) values (242,27);
+insert into t (id,a) values (242,28);
+insert into t (id,a) values (242,29);
+insert into t (id,a) values (242,30);
+insert into t (id,a) values (242,31);
+insert into t (id,a) values (242,32);
+insert into t (id,a) values (242,33);
+insert into t (id,a) values (242,34);
+insert into t (id,a) values (242,35);
+insert into t (id,a) values (242,36);
+insert into t (id,a) values (242,37);
+insert into t (id,a) values (242,38);
+insert into t (id,a) values (242,39);
+insert into t (id,a) values (242,40);
+insert into t (id,a) values (242,41);
+insert into t (id,a) values (242,42);
+insert into t (id,a) values (242,43);
+insert into t (id,a) values (242,44);
+insert into t (id,a) values (242,45);
+insert into t (id,a) values (242,46);
+insert into t (id,a) values (242,47);
+insert into t (id,a) values (242,48);
+insert into t (id,a) values (242,49);
+insert into t (id,a) values (242,50);
+insert into t (id,a) values (242,51);
+insert into t (id,a) values (242,52);
+insert into t (id,a) values (242,53);
+insert into t (id,a) values (242,54);
+insert into t (id,a) values (242,55);
+insert into t (id,a) values (242,56);
+insert into t (id,a) values (242,57);
+insert into t (id,a) values (242,58);
+insert into t (id,a) values (242,59);
+insert into t (id,a) values (242,60);
+insert into t (id,a) values (242,61);
+insert into t (id,a) values (242,62);
+insert into t (id,a) values (242,63);
+insert into t (id,a) values (242,64);
+insert into t (id,a) values (242,65);
+insert into t (id,a) values (242,66);
+insert into t (id,a) values (242,67);
+insert into t (id,a) values (242,68);
+insert into t (id,a) values (242,69);
+insert into t (id,a) values (242,70);
+insert into t (id,a) values (242,71);
+insert into t (id,a) values (242,72);
+insert into t (id,a) values (242,73);
+insert into t (id,a) values (242,74);
+insert into t (id,a) values (242,75);
+insert into t (id,a) values (242,76);
+insert into t (id,a) values (242,77);
+insert into t (id,a) values (242,78);
+insert into t (id,a) values (242,79);
+insert into t (id,a) values (242,80);
+insert into t (id,a) values (242,81);
+insert into t (id,a) values (242,82);
+insert into t (id,a) values (242,83);
+insert into t (id,a) values (242,84);
+insert into t (id,a) values (242,85);
+insert into t (id,a) values (242,86);
+insert into t (id,a) values (242,87);
+insert into t (id,a) values (242,88);
+insert into t (id,a) values (242,89);
+insert into t (id,a) values (242,90);
+insert into t (id,a) values (242,91);
+insert into t (id,a) values (242,92);
+insert into t (id,a) values (242,93);
+insert into t (id,a) values (242,94);
+insert into t (id,a) values (242,95);
+insert into t (id,a) values (242,96);
+insert into t (id,a) values (242,97);
+insert into t (id,a) values (242,98);
+insert into t (id,a) values (242,99);
+insert into t (id,a) values (243,0);
+insert into t (id,a) values (243,1);
+insert into t (id,a) values (243,2);
+insert into t (id,a) values (243,3);
+insert into t (id,a) values (243,4);
+insert into t (id,a) values (243,5);
+insert into t (id,a) values (243,6);
+insert into t (id,a) values (243,7);
+insert into t (id,a) values (243,8);
+insert into t (id,a) values (243,9);
+insert into t (id,a) values (243,10);
+insert into t (id,a) values (243,11);
+insert into t (id,a) values (243,12);
+insert into t (id,a) values (243,13);
+insert into t (id,a) values (243,14);
+insert into t (id,a) values (243,15);
+insert into t (id,a) values (243,16);
+insert into t (id,a) values (243,17);
+insert into t (id,a) values (243,18);
+insert into t (id,a) values (243,19);
+insert into t (id,a) values (243,20);
+insert into t (id,a) values (243,21);
+insert into t (id,a) values (243,22);
+insert into t (id,a) values (243,23);
+insert into t (id,a) values (243,24);
+insert into t (id,a) values (243,25);
+insert into t (id,a) values (243,26);
+insert into t (id,a) values (243,27);
+insert into t (id,a) values (243,28);
+insert into t (id,a) values (243,29);
+insert into t (id,a) values (243,30);
+insert into t (id,a) values (243,31);
+insert into t (id,a) values (243,32);
+insert into t (id,a) values (243,33);
+insert into t (id,a) values (243,34);
+insert into t (id,a) values (243,35);
+insert into t (id,a) values (243,36);
+insert into t (id,a) values (243,37);
+insert into t (id,a) values (243,38);
+insert into t (id,a) values (243,39);
+insert into t (id,a) values (243,40);
+insert into t (id,a) values (243,41);
+insert into t (id,a) values (243,42);
+insert into t (id,a) values (243,43);
+insert into t (id,a) values (243,44);
+insert into t (id,a) values (243,45);
+insert into t (id,a) values (243,46);
+insert into t (id,a) values (243,47);
+insert into t (id,a) values (243,48);
+insert into t (id,a) values (243,49);
+insert into t (id,a) values (243,50);
+insert into t (id,a) values (243,51);
+insert into t (id,a) values (243,52);
+insert into t (id,a) values (243,53);
+insert into t (id,a) values (243,54);
+insert into t (id,a) values (243,55);
+insert into t (id,a) values (243,56);
+insert into t (id,a) values (243,57);
+insert into t (id,a) values (243,58);
+insert into t (id,a) values (243,59);
+insert into t (id,a) values (243,60);
+insert into t (id,a) values (243,61);
+insert into t (id,a) values (243,62);
+insert into t (id,a) values (243,63);
+insert into t (id,a) values (243,64);
+insert into t (id,a) values (243,65);
+insert into t (id,a) values (243,66);
+insert into t (id,a) values (243,67);
+insert into t (id,a) values (243,68);
+insert into t (id,a) values (243,69);
+insert into t (id,a) values (243,70);
+insert into t (id,a) values (243,71);
+insert into t (id,a) values (243,72);
+insert into t (id,a) values (243,73);
+insert into t (id,a) values (243,74);
+insert into t (id,a) values (243,75);
+insert into t (id,a) values (243,76);
+insert into t (id,a) values (243,77);
+insert into t (id,a) values (243,78);
+insert into t (id,a) values (243,79);
+insert into t (id,a) values (243,80);
+insert into t (id,a) values (243,81);
+insert into t (id,a) values (243,82);
+insert into t (id,a) values (243,83);
+insert into t (id,a) values (243,84);
+insert into t (id,a) values (243,85);
+insert into t (id,a) values (243,86);
+insert into t (id,a) values (243,87);
+insert into t (id,a) values (243,88);
+insert into t (id,a) values (243,89);
+insert into t (id,a) values (243,90);
+insert into t (id,a) values (243,91);
+insert into t (id,a) values (243,92);
+insert into t (id,a) values (243,93);
+insert into t (id,a) values (243,94);
+insert into t (id,a) values (243,95);
+insert into t (id,a) values (243,96);
+insert into t (id,a) values (243,97);
+insert into t (id,a) values (243,98);
+insert into t (id,a) values (243,99);
+insert into t (id,a) values (244,0);
+insert into t (id,a) values (244,1);
+insert into t (id,a) values (244,2);
+insert into t (id,a) values (244,3);
+insert into t (id,a) values (244,4);
+insert into t (id,a) values (244,5);
+insert into t (id,a) values (244,6);
+insert into t (id,a) values (244,7);
+insert into t (id,a) values (244,8);
+insert into t (id,a) values (244,9);
+insert into t (id,a) values (244,10);
+insert into t (id,a) values (244,11);
+insert into t (id,a) values (244,12);
+insert into t (id,a) values (244,13);
+insert into t (id,a) values (244,14);
+insert into t (id,a) values (244,15);
+insert into t (id,a) values (244,16);
+insert into t (id,a) values (244,17);
+insert into t (id,a) values (244,18);
+insert into t (id,a) values (244,19);
+insert into t (id,a) values (244,20);
+insert into t (id,a) values (244,21);
+insert into t (id,a) values (244,22);
+insert into t (id,a) values (244,23);
+insert into t (id,a) values (244,24);
+insert into t (id,a) values (244,25);
+insert into t (id,a) values (244,26);
+insert into t (id,a) values (244,27);
+insert into t (id,a) values (244,28);
+insert into t (id,a) values (244,29);
+insert into t (id,a) values (244,30);
+insert into t (id,a) values (244,31);
+insert into t (id,a) values (244,32);
+insert into t (id,a) values (244,33);
+insert into t (id,a) values (244,34);
+insert into t (id,a) values (244,35);
+insert into t (id,a) values (244,36);
+insert into t (id,a) values (244,37);
+insert into t (id,a) values (244,38);
+insert into t (id,a) values (244,39);
+insert into t (id,a) values (244,40);
+insert into t (id,a) values (244,41);
+insert into t (id,a) values (244,42);
+insert into t (id,a) values (244,43);
+insert into t (id,a) values (244,44);
+insert into t (id,a) values (244,45);
+insert into t (id,a) values (244,46);
+insert into t (id,a) values (244,47);
+insert into t (id,a) values (244,48);
+insert into t (id,a) values (244,49);
+insert into t (id,a) values (244,50);
+insert into t (id,a) values (244,51);
+insert into t (id,a) values (244,52);
+insert into t (id,a) values (244,53);
+insert into t (id,a) values (244,54);
+insert into t (id,a) values (244,55);
+insert into t (id,a) values (244,56);
+insert into t (id,a) values (244,57);
+insert into t (id,a) values (244,58);
+insert into t (id,a) values (244,59);
+insert into t (id,a) values (244,60);
+insert into t (id,a) values (244,61);
+insert into t (id,a) values (244,62);
+insert into t (id,a) values (244,63);
+insert into t (id,a) values (244,64);
+insert into t (id,a) values (244,65);
+insert into t (id,a) values (244,66);
+insert into t (id,a) values (244,67);
+insert into t (id,a) values (244,68);
+insert into t (id,a) values (244,69);
+insert into t (id,a) values (244,70);
+insert into t (id,a) values (244,71);
+insert into t (id,a) values (244,72);
+insert into t (id,a) values (244,73);
+insert into t (id,a) values (244,74);
+insert into t (id,a) values (244,75);
+insert into t (id,a) values (244,76);
+insert into t (id,a) values (244,77);
+insert into t (id,a) values (244,78);
+insert into t (id,a) values (244,79);
+insert into t (id,a) values (244,80);
+insert into t (id,a) values (244,81);
+insert into t (id,a) values (244,82);
+insert into t (id,a) values (244,83);
+insert into t (id,a) values (244,84);
+insert into t (id,a) values (244,85);
+insert into t (id,a) values (244,86);
+insert into t (id,a) values (244,87);
+insert into t (id,a) values (244,88);
+insert into t (id,a) values (244,89);
+insert into t (id,a) values (244,90);
+insert into t (id,a) values (244,91);
+insert into t (id,a) values (244,92);
+insert into t (id,a) values (244,93);
+insert into t (id,a) values (244,94);
+insert into t (id,a) values (244,95);
+insert into t (id,a) values (244,96);
+insert into t (id,a) values (244,97);
+insert into t (id,a) values (244,98);
+insert into t (id,a) values (244,99);
+insert into t (id,a) values (245,0);
+insert into t (id,a) values (245,1);
+insert into t (id,a) values (245,2);
+insert into t (id,a) values (245,3);
+insert into t (id,a) values (245,4);
+insert into t (id,a) values (245,5);
+insert into t (id,a) values (245,6);
+insert into t (id,a) values (245,7);
+insert into t (id,a) values (245,8);
+insert into t (id,a) values (245,9);
+insert into t (id,a) values (245,10);
+insert into t (id,a) values (245,11);
+insert into t (id,a) values (245,12);
+insert into t (id,a) values (245,13);
+insert into t (id,a) values (245,14);
+insert into t (id,a) values (245,15);
+insert into t (id,a) values (245,16);
+insert into t (id,a) values (245,17);
+insert into t (id,a) values (245,18);
+insert into t (id,a) values (245,19);
+insert into t (id,a) values (245,20);
+insert into t (id,a) values (245,21);
+insert into t (id,a) values (245,22);
+insert into t (id,a) values (245,23);
+insert into t (id,a) values (245,24);
+insert into t (id,a) values (245,25);
+insert into t (id,a) values (245,26);
+insert into t (id,a) values (245,27);
+insert into t (id,a) values (245,28);
+insert into t (id,a) values (245,29);
+insert into t (id,a) values (245,30);
+insert into t (id,a) values (245,31);
+insert into t (id,a) values (245,32);
+insert into t (id,a) values (245,33);
+insert into t (id,a) values (245,34);
+insert into t (id,a) values (245,35);
+insert into t (id,a) values (245,36);
+insert into t (id,a) values (245,37);
+insert into t (id,a) values (245,38);
+insert into t (id,a) values (245,39);
+insert into t (id,a) values (245,40);
+insert into t (id,a) values (245,41);
+insert into t (id,a) values (245,42);
+insert into t (id,a) values (245,43);
+insert into t (id,a) values (245,44);
+insert into t (id,a) values (245,45);
+insert into t (id,a) values (245,46);
+insert into t (id,a) values (245,47);
+insert into t (id,a) values (245,48);
+insert into t (id,a) values (245,49);
+insert into t (id,a) values (245,50);
+insert into t (id,a) values (245,51);
+insert into t (id,a) values (245,52);
+insert into t (id,a) values (245,53);
+insert into t (id,a) values (245,54);
+insert into t (id,a) values (245,55);
+insert into t (id,a) values (245,56);
+insert into t (id,a) values (245,57);
+insert into t (id,a) values (245,58);
+insert into t (id,a) values (245,59);
+insert into t (id,a) values (245,60);
+insert into t (id,a) values (245,61);
+insert into t (id,a) values (245,62);
+insert into t (id,a) values (245,63);
+insert into t (id,a) values (245,64);
+insert into t (id,a) values (245,65);
+insert into t (id,a) values (245,66);
+insert into t (id,a) values (245,67);
+insert into t (id,a) values (245,68);
+insert into t (id,a) values (245,69);
+insert into t (id,a) values (245,70);
+insert into t (id,a) values (245,71);
+insert into t (id,a) values (245,72);
+insert into t (id,a) values (245,73);
+insert into t (id,a) values (245,74);
+insert into t (id,a) values (245,75);
+insert into t (id,a) values (245,76);
+insert into t (id,a) values (245,77);
+insert into t (id,a) values (245,78);
+insert into t (id,a) values (245,79);
+insert into t (id,a) values (245,80);
+insert into t (id,a) values (245,81);
+insert into t (id,a) values (245,82);
+insert into t (id,a) values (245,83);
+insert into t (id,a) values (245,84);
+insert into t (id,a) values (245,85);
+insert into t (id,a) values (245,86);
+insert into t (id,a) values (245,87);
+insert into t (id,a) values (245,88);
+insert into t (id,a) values (245,89);
+insert into t (id,a) values (245,90);
+insert into t (id,a) values (245,91);
+insert into t (id,a) values (245,92);
+insert into t (id,a) values (245,93);
+insert into t (id,a) values (245,94);
+insert into t (id,a) values (245,95);
+insert into t (id,a) values (245,96);
+insert into t (id,a) values (245,97);
+insert into t (id,a) values (245,98);
+insert into t (id,a) values (245,99);
+insert into t (id,a) values (246,0);
+insert into t (id,a) values (246,1);
+insert into t (id,a) values (246,2);
+insert into t (id,a) values (246,3);
+insert into t (id,a) values (246,4);
+insert into t (id,a) values (246,5);
+insert into t (id,a) values (246,6);
+insert into t (id,a) values (246,7);
+insert into t (id,a) values (246,8);
+insert into t (id,a) values (246,9);
+insert into t (id,a) values (246,10);
+insert into t (id,a) values (246,11);
+insert into t (id,a) values (246,12);
+insert into t (id,a) values (246,13);
+insert into t (id,a) values (246,14);
+insert into t (id,a) values (246,15);
+insert into t (id,a) values (246,16);
+insert into t (id,a) values (246,17);
+insert into t (id,a) values (246,18);
+insert into t (id,a) values (246,19);
+insert into t (id,a) values (246,20);
+insert into t (id,a) values (246,21);
+insert into t (id,a) values (246,22);
+insert into t (id,a) values (246,23);
+insert into t (id,a) values (246,24);
+insert into t (id,a) values (246,25);
+insert into t (id,a) values (246,26);
+insert into t (id,a) values (246,27);
+insert into t (id,a) values (246,28);
+insert into t (id,a) values (246,29);
+insert into t (id,a) values (246,30);
+insert into t (id,a) values (246,31);
+insert into t (id,a) values (246,32);
+insert into t (id,a) values (246,33);
+insert into t (id,a) values (246,34);
+insert into t (id,a) values (246,35);
+insert into t (id,a) values (246,36);
+insert into t (id,a) values (246,37);
+insert into t (id,a) values (246,38);
+insert into t (id,a) values (246,39);
+insert into t (id,a) values (246,40);
+insert into t (id,a) values (246,41);
+insert into t (id,a) values (246,42);
+insert into t (id,a) values (246,43);
+insert into t (id,a) values (246,44);
+insert into t (id,a) values (246,45);
+insert into t (id,a) values (246,46);
+insert into t (id,a) values (246,47);
+insert into t (id,a) values (246,48);
+insert into t (id,a) values (246,49);
+insert into t (id,a) values (246,50);
+insert into t (id,a) values (246,51);
+insert into t (id,a) values (246,52);
+insert into t (id,a) values (246,53);
+insert into t (id,a) values (246,54);
+insert into t (id,a) values (246,55);
+insert into t (id,a) values (246,56);
+insert into t (id,a) values (246,57);
+insert into t (id,a) values (246,58);
+insert into t (id,a) values (246,59);
+insert into t (id,a) values (246,60);
+insert into t (id,a) values (246,61);
+insert into t (id,a) values (246,62);
+insert into t (id,a) values (246,63);
+insert into t (id,a) values (246,64);
+insert into t (id,a) values (246,65);
+insert into t (id,a) values (246,66);
+insert into t (id,a) values (246,67);
+insert into t (id,a) values (246,68);
+insert into t (id,a) values (246,69);
+insert into t (id,a) values (246,70);
+insert into t (id,a) values (246,71);
+insert into t (id,a) values (246,72);
+insert into t (id,a) values (246,73);
+insert into t (id,a) values (246,74);
+insert into t (id,a) values (246,75);
+insert into t (id,a) values (246,76);
+insert into t (id,a) values (246,77);
+insert into t (id,a) values (246,78);
+insert into t (id,a) values (246,79);
+insert into t (id,a) values (246,80);
+insert into t (id,a) values (246,81);
+insert into t (id,a) values (246,82);
+insert into t (id,a) values (246,83);
+insert into t (id,a) values (246,84);
+insert into t (id,a) values (246,85);
+insert into t (id,a) values (246,86);
+insert into t (id,a) values (246,87);
+insert into t (id,a) values (246,88);
+insert into t (id,a) values (246,89);
+insert into t (id,a) values (246,90);
+insert into t (id,a) values (246,91);
+insert into t (id,a) values (246,92);
+insert into t (id,a) values (246,93);
+insert into t (id,a) values (246,94);
+insert into t (id,a) values (246,95);
+insert into t (id,a) values (246,96);
+insert into t (id,a) values (246,97);
+insert into t (id,a) values (246,98);
+insert into t (id,a) values (246,99);
+insert into t (id,a) values (247,0);
+insert into t (id,a) values (247,1);
+insert into t (id,a) values (247,2);
+insert into t (id,a) values (247,3);
+insert into t (id,a) values (247,4);
+insert into t (id,a) values (247,5);
+insert into t (id,a) values (247,6);
+insert into t (id,a) values (247,7);
+insert into t (id,a) values (247,8);
+insert into t (id,a) values (247,9);
+insert into t (id,a) values (247,10);
+insert into t (id,a) values (247,11);
+insert into t (id,a) values (247,12);
+insert into t (id,a) values (247,13);
+insert into t (id,a) values (247,14);
+insert into t (id,a) values (247,15);
+insert into t (id,a) values (247,16);
+insert into t (id,a) values (247,17);
+insert into t (id,a) values (247,18);
+insert into t (id,a) values (247,19);
+insert into t (id,a) values (247,20);
+insert into t (id,a) values (247,21);
+insert into t (id,a) values (247,22);
+insert into t (id,a) values (247,23);
+insert into t (id,a) values (247,24);
+insert into t (id,a) values (247,25);
+insert into t (id,a) values (247,26);
+insert into t (id,a) values (247,27);
+insert into t (id,a) values (247,28);
+insert into t (id,a) values (247,29);
+insert into t (id,a) values (247,30);
+insert into t (id,a) values (247,31);
+insert into t (id,a) values (247,32);
+insert into t (id,a) values (247,33);
+insert into t (id,a) values (247,34);
+insert into t (id,a) values (247,35);
+insert into t (id,a) values (247,36);
+insert into t (id,a) values (247,37);
+insert into t (id,a) values (247,38);
+insert into t (id,a) values (247,39);
+insert into t (id,a) values (247,40);
+insert into t (id,a) values (247,41);
+insert into t (id,a) values (247,42);
+insert into t (id,a) values (247,43);
+insert into t (id,a) values (247,44);
+insert into t (id,a) values (247,45);
+insert into t (id,a) values (247,46);
+insert into t (id,a) values (247,47);
+insert into t (id,a) values (247,48);
+insert into t (id,a) values (247,49);
+insert into t (id,a) values (247,50);
+insert into t (id,a) values (247,51);
+insert into t (id,a) values (247,52);
+insert into t (id,a) values (247,53);
+insert into t (id,a) values (247,54);
+insert into t (id,a) values (247,55);
+insert into t (id,a) values (247,56);
+insert into t (id,a) values (247,57);
+insert into t (id,a) values (247,58);
+insert into t (id,a) values (247,59);
+insert into t (id,a) values (247,60);
+insert into t (id,a) values (247,61);
+insert into t (id,a) values (247,62);
+insert into t (id,a) values (247,63);
+insert into t (id,a) values (247,64);
+insert into t (id,a) values (247,65);
+insert into t (id,a) values (247,66);
+insert into t (id,a) values (247,67);
+insert into t (id,a) values (247,68);
+insert into t (id,a) values (247,69);
+insert into t (id,a) values (247,70);
+insert into t (id,a) values (247,71);
+insert into t (id,a) values (247,72);
+insert into t (id,a) values (247,73);
+insert into t (id,a) values (247,74);
+insert into t (id,a) values (247,75);
+insert into t (id,a) values (247,76);
+insert into t (id,a) values (247,77);
+insert into t (id,a) values (247,78);
+insert into t (id,a) values (247,79);
+insert into t (id,a) values (247,80);
+insert into t (id,a) values (247,81);
+insert into t (id,a) values (247,82);
+insert into t (id,a) values (247,83);
+insert into t (id,a) values (247,84);
+insert into t (id,a) values (247,85);
+insert into t (id,a) values (247,86);
+insert into t (id,a) values (247,87);
+insert into t (id,a) values (247,88);
+insert into t (id,a) values (247,89);
+insert into t (id,a) values (247,90);
+insert into t (id,a) values (247,91);
+insert into t (id,a) values (247,92);
+insert into t (id,a) values (247,93);
+insert into t (id,a) values (247,94);
+insert into t (id,a) values (247,95);
+insert into t (id,a) values (247,96);
+insert into t (id,a) values (247,97);
+insert into t (id,a) values (247,98);
+insert into t (id,a) values (247,99);
+insert into t (id,a) values (248,0);
+insert into t (id,a) values (248,1);
+insert into t (id,a) values (248,2);
+insert into t (id,a) values (248,3);
+insert into t (id,a) values (248,4);
+insert into t (id,a) values (248,5);
+insert into t (id,a) values (248,6);
+insert into t (id,a) values (248,7);
+insert into t (id,a) values (248,8);
+insert into t (id,a) values (248,9);
+insert into t (id,a) values (248,10);
+insert into t (id,a) values (248,11);
+insert into t (id,a) values (248,12);
+insert into t (id,a) values (248,13);
+insert into t (id,a) values (248,14);
+insert into t (id,a) values (248,15);
+insert into t (id,a) values (248,16);
+insert into t (id,a) values (248,17);
+insert into t (id,a) values (248,18);
+insert into t (id,a) values (248,19);
+insert into t (id,a) values (248,20);
+insert into t (id,a) values (248,21);
+insert into t (id,a) values (248,22);
+insert into t (id,a) values (248,23);
+insert into t (id,a) values (248,24);
+insert into t (id,a) values (248,25);
+insert into t (id,a) values (248,26);
+insert into t (id,a) values (248,27);
+insert into t (id,a) values (248,28);
+insert into t (id,a) values (248,29);
+insert into t (id,a) values (248,30);
+insert into t (id,a) values (248,31);
+insert into t (id,a) values (248,32);
+insert into t (id,a) values (248,33);
+insert into t (id,a) values (248,34);
+insert into t (id,a) values (248,35);
+insert into t (id,a) values (248,36);
+insert into t (id,a) values (248,37);
+insert into t (id,a) values (248,38);
+insert into t (id,a) values (248,39);
+insert into t (id,a) values (248,40);
+insert into t (id,a) values (248,41);
+insert into t (id,a) values (248,42);
+insert into t (id,a) values (248,43);
+insert into t (id,a) values (248,44);
+insert into t (id,a) values (248,45);
+insert into t (id,a) values (248,46);
+insert into t (id,a) values (248,47);
+insert into t (id,a) values (248,48);
+insert into t (id,a) values (248,49);
+insert into t (id,a) values (248,50);
+insert into t (id,a) values (248,51);
+insert into t (id,a) values (248,52);
+insert into t (id,a) values (248,53);
+insert into t (id,a) values (248,54);
+insert into t (id,a) values (248,55);
+insert into t (id,a) values (248,56);
+insert into t (id,a) values (248,57);
+insert into t (id,a) values (248,58);
+insert into t (id,a) values (248,59);
+insert into t (id,a) values (248,60);
+insert into t (id,a) values (248,61);
+insert into t (id,a) values (248,62);
+insert into t (id,a) values (248,63);
+insert into t (id,a) values (248,64);
+insert into t (id,a) values (248,65);
+insert into t (id,a) values (248,66);
+insert into t (id,a) values (248,67);
+insert into t (id,a) values (248,68);
+insert into t (id,a) values (248,69);
+insert into t (id,a) values (248,70);
+insert into t (id,a) values (248,71);
+insert into t (id,a) values (248,72);
+insert into t (id,a) values (248,73);
+insert into t (id,a) values (248,74);
+insert into t (id,a) values (248,75);
+insert into t (id,a) values (248,76);
+insert into t (id,a) values (248,77);
+insert into t (id,a) values (248,78);
+insert into t (id,a) values (248,79);
+insert into t (id,a) values (248,80);
+insert into t (id,a) values (248,81);
+insert into t (id,a) values (248,82);
+insert into t (id,a) values (248,83);
+insert into t (id,a) values (248,84);
+insert into t (id,a) values (248,85);
+insert into t (id,a) values (248,86);
+insert into t (id,a) values (248,87);
+insert into t (id,a) values (248,88);
+insert into t (id,a) values (248,89);
+insert into t (id,a) values (248,90);
+insert into t (id,a) values (248,91);
+insert into t (id,a) values (248,92);
+insert into t (id,a) values (248,93);
+insert into t (id,a) values (248,94);
+insert into t (id,a) values (248,95);
+insert into t (id,a) values (248,96);
+insert into t (id,a) values (248,97);
+insert into t (id,a) values (248,98);
+insert into t (id,a) values (248,99);
+insert into t (id,a) values (249,0);
+insert into t (id,a) values (249,1);
+insert into t (id,a) values (249,2);
+insert into t (id,a) values (249,3);
+insert into t (id,a) values (249,4);
+insert into t (id,a) values (249,5);
+insert into t (id,a) values (249,6);
+insert into t (id,a) values (249,7);
+insert into t (id,a) values (249,8);
+insert into t (id,a) values (249,9);
+insert into t (id,a) values (249,10);
+insert into t (id,a) values (249,11);
+insert into t (id,a) values (249,12);
+insert into t (id,a) values (249,13);
+insert into t (id,a) values (249,14);
+insert into t (id,a) values (249,15);
+insert into t (id,a) values (249,16);
+insert into t (id,a) values (249,17);
+insert into t (id,a) values (249,18);
+insert into t (id,a) values (249,19);
+insert into t (id,a) values (249,20);
+insert into t (id,a) values (249,21);
+insert into t (id,a) values (249,22);
+insert into t (id,a) values (249,23);
+insert into t (id,a) values (249,24);
+insert into t (id,a) values (249,25);
+insert into t (id,a) values (249,26);
+insert into t (id,a) values (249,27);
+insert into t (id,a) values (249,28);
+insert into t (id,a) values (249,29);
+insert into t (id,a) values (249,30);
+insert into t (id,a) values (249,31);
+insert into t (id,a) values (249,32);
+insert into t (id,a) values (249,33);
+insert into t (id,a) values (249,34);
+insert into t (id,a) values (249,35);
+insert into t (id,a) values (249,36);
+insert into t (id,a) values (249,37);
+insert into t (id,a) values (249,38);
+insert into t (id,a) values (249,39);
+insert into t (id,a) values (249,40);
+insert into t (id,a) values (249,41);
+insert into t (id,a) values (249,42);
+insert into t (id,a) values (249,43);
+insert into t (id,a) values (249,44);
+insert into t (id,a) values (249,45);
+insert into t (id,a) values (249,46);
+insert into t (id,a) values (249,47);
+insert into t (id,a) values (249,48);
+insert into t (id,a) values (249,49);
+insert into t (id,a) values (249,50);
+insert into t (id,a) values (249,51);
+insert into t (id,a) values (249,52);
+insert into t (id,a) values (249,53);
+insert into t (id,a) values (249,54);
+insert into t (id,a) values (249,55);
+insert into t (id,a) values (249,56);
+insert into t (id,a) values (249,57);
+insert into t (id,a) values (249,58);
+insert into t (id,a) values (249,59);
+insert into t (id,a) values (249,60);
+insert into t (id,a) values (249,61);
+insert into t (id,a) values (249,62);
+insert into t (id,a) values (249,63);
+insert into t (id,a) values (249,64);
+insert into t (id,a) values (249,65);
+insert into t (id,a) values (249,66);
+insert into t (id,a) values (249,67);
+insert into t (id,a) values (249,68);
+insert into t (id,a) values (249,69);
+insert into t (id,a) values (249,70);
+insert into t (id,a) values (249,71);
+insert into t (id,a) values (249,72);
+insert into t (id,a) values (249,73);
+insert into t (id,a) values (249,74);
+insert into t (id,a) values (249,75);
+insert into t (id,a) values (249,76);
+insert into t (id,a) values (249,77);
+insert into t (id,a) values (249,78);
+insert into t (id,a) values (249,79);
+insert into t (id,a) values (249,80);
+insert into t (id,a) values (249,81);
+insert into t (id,a) values (249,82);
+insert into t (id,a) values (249,83);
+insert into t (id,a) values (249,84);
+insert into t (id,a) values (249,85);
+insert into t (id,a) values (249,86);
+insert into t (id,a) values (249,87);
+insert into t (id,a) values (249,88);
+insert into t (id,a) values (249,89);
+insert into t (id,a) values (249,90);
+insert into t (id,a) values (249,91);
+insert into t (id,a) values (249,92);
+insert into t (id,a) values (249,93);
+insert into t (id,a) values (249,94);
+insert into t (id,a) values (249,95);
+insert into t (id,a) values (249,96);
+insert into t (id,a) values (249,97);
+insert into t (id,a) values (249,98);
+insert into t (id,a) values (249,99);
+insert into t (id,a) values (250,0);
+insert into t (id,a) values (250,1);
+insert into t (id,a) values (250,2);
+insert into t (id,a) values (250,3);
+insert into t (id,a) values (250,4);
+insert into t (id,a) values (250,5);
+insert into t (id,a) values (250,6);
+insert into t (id,a) values (250,7);
+insert into t (id,a) values (250,8);
+insert into t (id,a) values (250,9);
+insert into t (id,a) values (250,10);
+insert into t (id,a) values (250,11);
+insert into t (id,a) values (250,12);
+insert into t (id,a) values (250,13);
+insert into t (id,a) values (250,14);
+insert into t (id,a) values (250,15);
+insert into t (id,a) values (250,16);
+insert into t (id,a) values (250,17);
+insert into t (id,a) values (250,18);
+insert into t (id,a) values (250,19);
+insert into t (id,a) values (250,20);
+insert into t (id,a) values (250,21);
+insert into t (id,a) values (250,22);
+insert into t (id,a) values (250,23);
+insert into t (id,a) values (250,24);
+insert into t (id,a) values (250,25);
+insert into t (id,a) values (250,26);
+insert into t (id,a) values (250,27);
+insert into t (id,a) values (250,28);
+insert into t (id,a) values (250,29);
+insert into t (id,a) values (250,30);
+insert into t (id,a) values (250,31);
+insert into t (id,a) values (250,32);
+insert into t (id,a) values (250,33);
+insert into t (id,a) values (250,34);
+insert into t (id,a) values (250,35);
+insert into t (id,a) values (250,36);
+insert into t (id,a) values (250,37);
+insert into t (id,a) values (250,38);
+insert into t (id,a) values (250,39);
+insert into t (id,a) values (250,40);
+insert into t (id,a) values (250,41);
+insert into t (id,a) values (250,42);
+insert into t (id,a) values (250,43);
+insert into t (id,a) values (250,44);
+insert into t (id,a) values (250,45);
+insert into t (id,a) values (250,46);
+insert into t (id,a) values (250,47);
+insert into t (id,a) values (250,48);
+insert into t (id,a) values (250,49);
+insert into t (id,a) values (250,50);
+insert into t (id,a) values (250,51);
+insert into t (id,a) values (250,52);
+insert into t (id,a) values (250,53);
+insert into t (id,a) values (250,54);
+insert into t (id,a) values (250,55);
+insert into t (id,a) values (250,56);
+insert into t (id,a) values (250,57);
+insert into t (id,a) values (250,58);
+insert into t (id,a) values (250,59);
+insert into t (id,a) values (250,60);
+insert into t (id,a) values (250,61);
+insert into t (id,a) values (250,62);
+insert into t (id,a) values (250,63);
+insert into t (id,a) values (250,64);
+insert into t (id,a) values (250,65);
+insert into t (id,a) values (250,66);
+insert into t (id,a) values (250,67);
+insert into t (id,a) values (250,68);
+insert into t (id,a) values (250,69);
+insert into t (id,a) values (250,70);
+insert into t (id,a) values (250,71);
+insert into t (id,a) values (250,72);
+insert into t (id,a) values (250,73);
+insert into t (id,a) values (250,74);
+insert into t (id,a) values (250,75);
+insert into t (id,a) values (250,76);
+insert into t (id,a) values (250,77);
+insert into t (id,a) values (250,78);
+insert into t (id,a) values (250,79);
+insert into t (id,a) values (250,80);
+insert into t (id,a) values (250,81);
+insert into t (id,a) values (250,82);
+insert into t (id,a) values (250,83);
+insert into t (id,a) values (250,84);
+insert into t (id,a) values (250,85);
+insert into t (id,a) values (250,86);
+insert into t (id,a) values (250,87);
+insert into t (id,a) values (250,88);
+insert into t (id,a) values (250,89);
+insert into t (id,a) values (250,90);
+insert into t (id,a) values (250,91);
+insert into t (id,a) values (250,92);
+insert into t (id,a) values (250,93);
+insert into t (id,a) values (250,94);
+insert into t (id,a) values (250,95);
+insert into t (id,a) values (250,96);
+insert into t (id,a) values (250,97);
+insert into t (id,a) values (250,98);
+insert into t (id,a) values (250,99);
+insert into t (id,a) values (251,0);
+insert into t (id,a) values (251,1);
+insert into t (id,a) values (251,2);
+insert into t (id,a) values (251,3);
+insert into t (id,a) values (251,4);
+insert into t (id,a) values (251,5);
+insert into t (id,a) values (251,6);
+insert into t (id,a) values (251,7);
+insert into t (id,a) values (251,8);
+insert into t (id,a) values (251,9);
+insert into t (id,a) values (251,10);
+insert into t (id,a) values (251,11);
+insert into t (id,a) values (251,12);
+insert into t (id,a) values (251,13);
+insert into t (id,a) values (251,14);
+insert into t (id,a) values (251,15);
+insert into t (id,a) values (251,16);
+insert into t (id,a) values (251,17);
+insert into t (id,a) values (251,18);
+insert into t (id,a) values (251,19);
+insert into t (id,a) values (251,20);
+insert into t (id,a) values (251,21);
+insert into t (id,a) values (251,22);
+insert into t (id,a) values (251,23);
+insert into t (id,a) values (251,24);
+insert into t (id,a) values (251,25);
+insert into t (id,a) values (251,26);
+insert into t (id,a) values (251,27);
+insert into t (id,a) values (251,28);
+insert into t (id,a) values (251,29);
+insert into t (id,a) values (251,30);
+insert into t (id,a) values (251,31);
+insert into t (id,a) values (251,32);
+insert into t (id,a) values (251,33);
+insert into t (id,a) values (251,34);
+insert into t (id,a) values (251,35);
+insert into t (id,a) values (251,36);
+insert into t (id,a) values (251,37);
+insert into t (id,a) values (251,38);
+insert into t (id,a) values (251,39);
+insert into t (id,a) values (251,40);
+insert into t (id,a) values (251,41);
+insert into t (id,a) values (251,42);
+insert into t (id,a) values (251,43);
+insert into t (id,a) values (251,44);
+insert into t (id,a) values (251,45);
+insert into t (id,a) values (251,46);
+insert into t (id,a) values (251,47);
+insert into t (id,a) values (251,48);
+insert into t (id,a) values (251,49);
+insert into t (id,a) values (251,50);
+insert into t (id,a) values (251,51);
+insert into t (id,a) values (251,52);
+insert into t (id,a) values (251,53);
+insert into t (id,a) values (251,54);
+insert into t (id,a) values (251,55);
+insert into t (id,a) values (251,56);
+insert into t (id,a) values (251,57);
+insert into t (id,a) values (251,58);
+insert into t (id,a) values (251,59);
+insert into t (id,a) values (251,60);
+insert into t (id,a) values (251,61);
+insert into t (id,a) values (251,62);
+insert into t (id,a) values (251,63);
+insert into t (id,a) values (251,64);
+insert into t (id,a) values (251,65);
+insert into t (id,a) values (251,66);
+insert into t (id,a) values (251,67);
+insert into t (id,a) values (251,68);
+insert into t (id,a) values (251,69);
+insert into t (id,a) values (251,70);
+insert into t (id,a) values (251,71);
+insert into t (id,a) values (251,72);
+insert into t (id,a) values (251,73);
+insert into t (id,a) values (251,74);
+insert into t (id,a) values (251,75);
+insert into t (id,a) values (251,76);
+insert into t (id,a) values (251,77);
+insert into t (id,a) values (251,78);
+insert into t (id,a) values (251,79);
+insert into t (id,a) values (251,80);
+insert into t (id,a) values (251,81);
+insert into t (id,a) values (251,82);
+insert into t (id,a) values (251,83);
+insert into t (id,a) values (251,84);
+insert into t (id,a) values (251,85);
+insert into t (id,a) values (251,86);
+insert into t (id,a) values (251,87);
+insert into t (id,a) values (251,88);
+insert into t (id,a) values (251,89);
+insert into t (id,a) values (251,90);
+insert into t (id,a) values (251,91);
+insert into t (id,a) values (251,92);
+insert into t (id,a) values (251,93);
+insert into t (id,a) values (251,94);
+insert into t (id,a) values (251,95);
+insert into t (id,a) values (251,96);
+insert into t (id,a) values (251,97);
+insert into t (id,a) values (251,98);
+insert into t (id,a) values (251,99);
+insert into t (id,a) values (252,0);
+insert into t (id,a) values (252,1);
+insert into t (id,a) values (252,2);
+insert into t (id,a) values (252,3);
+insert into t (id,a) values (252,4);
+insert into t (id,a) values (252,5);
+insert into t (id,a) values (252,6);
+insert into t (id,a) values (252,7);
+insert into t (id,a) values (252,8);
+insert into t (id,a) values (252,9);
+insert into t (id,a) values (252,10);
+insert into t (id,a) values (252,11);
+insert into t (id,a) values (252,12);
+insert into t (id,a) values (252,13);
+insert into t (id,a) values (252,14);
+insert into t (id,a) values (252,15);
+insert into t (id,a) values (252,16);
+insert into t (id,a) values (252,17);
+insert into t (id,a) values (252,18);
+insert into t (id,a) values (252,19);
+insert into t (id,a) values (252,20);
+insert into t (id,a) values (252,21);
+insert into t (id,a) values (252,22);
+insert into t (id,a) values (252,23);
+insert into t (id,a) values (252,24);
+insert into t (id,a) values (252,25);
+insert into t (id,a) values (252,26);
+insert into t (id,a) values (252,27);
+insert into t (id,a) values (252,28);
+insert into t (id,a) values (252,29);
+insert into t (id,a) values (252,30);
+insert into t (id,a) values (252,31);
+insert into t (id,a) values (252,32);
+insert into t (id,a) values (252,33);
+insert into t (id,a) values (252,34);
+insert into t (id,a) values (252,35);
+insert into t (id,a) values (252,36);
+insert into t (id,a) values (252,37);
+insert into t (id,a) values (252,38);
+insert into t (id,a) values (252,39);
+insert into t (id,a) values (252,40);
+insert into t (id,a) values (252,41);
+insert into t (id,a) values (252,42);
+insert into t (id,a) values (252,43);
+insert into t (id,a) values (252,44);
+insert into t (id,a) values (252,45);
+insert into t (id,a) values (252,46);
+insert into t (id,a) values (252,47);
+insert into t (id,a) values (252,48);
+insert into t (id,a) values (252,49);
+insert into t (id,a) values (252,50);
+insert into t (id,a) values (252,51);
+insert into t (id,a) values (252,52);
+insert into t (id,a) values (252,53);
+insert into t (id,a) values (252,54);
+insert into t (id,a) values (252,55);
+insert into t (id,a) values (252,56);
+insert into t (id,a) values (252,57);
+insert into t (id,a) values (252,58);
+insert into t (id,a) values (252,59);
+insert into t (id,a) values (252,60);
+insert into t (id,a) values (252,61);
+insert into t (id,a) values (252,62);
+insert into t (id,a) values (252,63);
+insert into t (id,a) values (252,64);
+insert into t (id,a) values (252,65);
+insert into t (id,a) values (252,66);
+insert into t (id,a) values (252,67);
+insert into t (id,a) values (252,68);
+insert into t (id,a) values (252,69);
+insert into t (id,a) values (252,70);
+insert into t (id,a) values (252,71);
+insert into t (id,a) values (252,72);
+insert into t (id,a) values (252,73);
+insert into t (id,a) values (252,74);
+insert into t (id,a) values (252,75);
+insert into t (id,a) values (252,76);
+insert into t (id,a) values (252,77);
+insert into t (id,a) values (252,78);
+insert into t (id,a) values (252,79);
+insert into t (id,a) values (252,80);
+insert into t (id,a) values (252,81);
+insert into t (id,a) values (252,82);
+insert into t (id,a) values (252,83);
+insert into t (id,a) values (252,84);
+insert into t (id,a) values (252,85);
+insert into t (id,a) values (252,86);
+insert into t (id,a) values (252,87);
+insert into t (id,a) values (252,88);
+insert into t (id,a) values (252,89);
+insert into t (id,a) values (252,90);
+insert into t (id,a) values (252,91);
+insert into t (id,a) values (252,92);
+insert into t (id,a) values (252,93);
+insert into t (id,a) values (252,94);
+insert into t (id,a) values (252,95);
+insert into t (id,a) values (252,96);
+insert into t (id,a) values (252,97);
+insert into t (id,a) values (252,98);
+insert into t (id,a) values (252,99);
+insert into t (id,a) values (253,0);
+insert into t (id,a) values (253,1);
+insert into t (id,a) values (253,2);
+insert into t (id,a) values (253,3);
+insert into t (id,a) values (253,4);
+insert into t (id,a) values (253,5);
+insert into t (id,a) values (253,6);
+insert into t (id,a) values (253,7);
+insert into t (id,a) values (253,8);
+insert into t (id,a) values (253,9);
+insert into t (id,a) values (253,10);
+insert into t (id,a) values (253,11);
+insert into t (id,a) values (253,12);
+insert into t (id,a) values (253,13);
+insert into t (id,a) values (253,14);
+insert into t (id,a) values (253,15);
+insert into t (id,a) values (253,16);
+insert into t (id,a) values (253,17);
+insert into t (id,a) values (253,18);
+insert into t (id,a) values (253,19);
+insert into t (id,a) values (253,20);
+insert into t (id,a) values (253,21);
+insert into t (id,a) values (253,22);
+insert into t (id,a) values (253,23);
+insert into t (id,a) values (253,24);
+insert into t (id,a) values (253,25);
+insert into t (id,a) values (253,26);
+insert into t (id,a) values (253,27);
+insert into t (id,a) values (253,28);
+insert into t (id,a) values (253,29);
+insert into t (id,a) values (253,30);
+insert into t (id,a) values (253,31);
+insert into t (id,a) values (253,32);
+insert into t (id,a) values (253,33);
+insert into t (id,a) values (253,34);
+insert into t (id,a) values (253,35);
+insert into t (id,a) values (253,36);
+insert into t (id,a) values (253,37);
+insert into t (id,a) values (253,38);
+insert into t (id,a) values (253,39);
+insert into t (id,a) values (253,40);
+insert into t (id,a) values (253,41);
+insert into t (id,a) values (253,42);
+insert into t (id,a) values (253,43);
+insert into t (id,a) values (253,44);
+insert into t (id,a) values (253,45);
+insert into t (id,a) values (253,46);
+insert into t (id,a) values (253,47);
+insert into t (id,a) values (253,48);
+insert into t (id,a) values (253,49);
+insert into t (id,a) values (253,50);
+insert into t (id,a) values (253,51);
+insert into t (id,a) values (253,52);
+insert into t (id,a) values (253,53);
+insert into t (id,a) values (253,54);
+insert into t (id,a) values (253,55);
+insert into t (id,a) values (253,56);
+insert into t (id,a) values (253,57);
+insert into t (id,a) values (253,58);
+insert into t (id,a) values (253,59);
+insert into t (id,a) values (253,60);
+insert into t (id,a) values (253,61);
+insert into t (id,a) values (253,62);
+insert into t (id,a) values (253,63);
+insert into t (id,a) values (253,64);
+insert into t (id,a) values (253,65);
+insert into t (id,a) values (253,66);
+insert into t (id,a) values (253,67);
+insert into t (id,a) values (253,68);
+insert into t (id,a) values (253,69);
+insert into t (id,a) values (253,70);
+insert into t (id,a) values (253,71);
+insert into t (id,a) values (253,72);
+insert into t (id,a) values (253,73);
+insert into t (id,a) values (253,74);
+insert into t (id,a) values (253,75);
+insert into t (id,a) values (253,76);
+insert into t (id,a) values (253,77);
+insert into t (id,a) values (253,78);
+insert into t (id,a) values (253,79);
+insert into t (id,a) values (253,80);
+insert into t (id,a) values (253,81);
+insert into t (id,a) values (253,82);
+insert into t (id,a) values (253,83);
+insert into t (id,a) values (253,84);
+insert into t (id,a) values (253,85);
+insert into t (id,a) values (253,86);
+insert into t (id,a) values (253,87);
+insert into t (id,a) values (253,88);
+insert into t (id,a) values (253,89);
+insert into t (id,a) values (253,90);
+insert into t (id,a) values (253,91);
+insert into t (id,a) values (253,92);
+insert into t (id,a) values (253,93);
+insert into t (id,a) values (253,94);
+insert into t (id,a) values (253,95);
+insert into t (id,a) values (253,96);
+insert into t (id,a) values (253,97);
+insert into t (id,a) values (253,98);
+insert into t (id,a) values (253,99);
+insert into t (id,a) values (254,0);
+insert into t (id,a) values (254,1);
+insert into t (id,a) values (254,2);
+insert into t (id,a) values (254,3);
+insert into t (id,a) values (254,4);
+insert into t (id,a) values (254,5);
+insert into t (id,a) values (254,6);
+insert into t (id,a) values (254,7);
+insert into t (id,a) values (254,8);
+insert into t (id,a) values (254,9);
+insert into t (id,a) values (254,10);
+insert into t (id,a) values (254,11);
+insert into t (id,a) values (254,12);
+insert into t (id,a) values (254,13);
+insert into t (id,a) values (254,14);
+insert into t (id,a) values (254,15);
+insert into t (id,a) values (254,16);
+insert into t (id,a) values (254,17);
+insert into t (id,a) values (254,18);
+insert into t (id,a) values (254,19);
+insert into t (id,a) values (254,20);
+insert into t (id,a) values (254,21);
+insert into t (id,a) values (254,22);
+insert into t (id,a) values (254,23);
+insert into t (id,a) values (254,24);
+insert into t (id,a) values (254,25);
+insert into t (id,a) values (254,26);
+insert into t (id,a) values (254,27);
+insert into t (id,a) values (254,28);
+insert into t (id,a) values (254,29);
+insert into t (id,a) values (254,30);
+insert into t (id,a) values (254,31);
+insert into t (id,a) values (254,32);
+insert into t (id,a) values (254,33);
+insert into t (id,a) values (254,34);
+insert into t (id,a) values (254,35);
+insert into t (id,a) values (254,36);
+insert into t (id,a) values (254,37);
+insert into t (id,a) values (254,38);
+insert into t (id,a) values (254,39);
+insert into t (id,a) values (254,40);
+insert into t (id,a) values (254,41);
+insert into t (id,a) values (254,42);
+insert into t (id,a) values (254,43);
+insert into t (id,a) values (254,44);
+insert into t (id,a) values (254,45);
+insert into t (id,a) values (254,46);
+insert into t (id,a) values (254,47);
+insert into t (id,a) values (254,48);
+insert into t (id,a) values (254,49);
+insert into t (id,a) values (254,50);
+insert into t (id,a) values (254,51);
+insert into t (id,a) values (254,52);
+insert into t (id,a) values (254,53);
+insert into t (id,a) values (254,54);
+insert into t (id,a) values (254,55);
+insert into t (id,a) values (254,56);
+insert into t (id,a) values (254,57);
+insert into t (id,a) values (254,58);
+insert into t (id,a) values (254,59);
+insert into t (id,a) values (254,60);
+insert into t (id,a) values (254,61);
+insert into t (id,a) values (254,62);
+insert into t (id,a) values (254,63);
+insert into t (id,a) values (254,64);
+insert into t (id,a) values (254,65);
+insert into t (id,a) values (254,66);
+insert into t (id,a) values (254,67);
+insert into t (id,a) values (254,68);
+insert into t (id,a) values (254,69);
+insert into t (id,a) values (254,70);
+insert into t (id,a) values (254,71);
+insert into t (id,a) values (254,72);
+insert into t (id,a) values (254,73);
+insert into t (id,a) values (254,74);
+insert into t (id,a) values (254,75);
+insert into t (id,a) values (254,76);
+insert into t (id,a) values (254,77);
+insert into t (id,a) values (254,78);
+insert into t (id,a) values (254,79);
+insert into t (id,a) values (254,80);
+insert into t (id,a) values (254,81);
+insert into t (id,a) values (254,82);
+insert into t (id,a) values (254,83);
+insert into t (id,a) values (254,84);
+insert into t (id,a) values (254,85);
+insert into t (id,a) values (254,86);
+insert into t (id,a) values (254,87);
+insert into t (id,a) values (254,88);
+insert into t (id,a) values (254,89);
+insert into t (id,a) values (254,90);
+insert into t (id,a) values (254,91);
+insert into t (id,a) values (254,92);
+insert into t (id,a) values (254,93);
+insert into t (id,a) values (254,94);
+insert into t (id,a) values (254,95);
+insert into t (id,a) values (254,96);
+insert into t (id,a) values (254,97);
+insert into t (id,a) values (254,98);
+insert into t (id,a) values (254,99);
+insert into t (id,a) values (255,0);
+insert into t (id,a) values (255,1);
+insert into t (id,a) values (255,2);
+insert into t (id,a) values (255,3);
+insert into t (id,a) values (255,4);
+insert into t (id,a) values (255,5);
+insert into t (id,a) values (255,6);
+insert into t (id,a) values (255,7);
+insert into t (id,a) values (255,8);
+insert into t (id,a) values (255,9);
+insert into t (id,a) values (255,10);
+insert into t (id,a) values (255,11);
+insert into t (id,a) values (255,12);
+insert into t (id,a) values (255,13);
+insert into t (id,a) values (255,14);
+insert into t (id,a) values (255,15);
+insert into t (id,a) values (255,16);
+insert into t (id,a) values (255,17);
+insert into t (id,a) values (255,18);
+insert into t (id,a) values (255,19);
+insert into t (id,a) values (255,20);
+insert into t (id,a) values (255,21);
+insert into t (id,a) values (255,22);
+insert into t (id,a) values (255,23);
+insert into t (id,a) values (255,24);
+insert into t (id,a) values (255,25);
+insert into t (id,a) values (255,26);
+insert into t (id,a) values (255,27);
+insert into t (id,a) values (255,28);
+insert into t (id,a) values (255,29);
+insert into t (id,a) values (255,30);
+insert into t (id,a) values (255,31);
+insert into t (id,a) values (255,32);
+insert into t (id,a) values (255,33);
+insert into t (id,a) values (255,34);
+insert into t (id,a) values (255,35);
+insert into t (id,a) values (255,36);
+insert into t (id,a) values (255,37);
+insert into t (id,a) values (255,38);
+insert into t (id,a) values (255,39);
+insert into t (id,a) values (255,40);
+insert into t (id,a) values (255,41);
+insert into t (id,a) values (255,42);
+insert into t (id,a) values (255,43);
+insert into t (id,a) values (255,44);
+insert into t (id,a) values (255,45);
+insert into t (id,a) values (255,46);
+insert into t (id,a) values (255,47);
+insert into t (id,a) values (255,48);
+insert into t (id,a) values (255,49);
+insert into t (id,a) values (255,50);
+insert into t (id,a) values (255,51);
+insert into t (id,a) values (255,52);
+insert into t (id,a) values (255,53);
+insert into t (id,a) values (255,54);
+insert into t (id,a) values (255,55);
+insert into t (id,a) values (255,56);
+insert into t (id,a) values (255,57);
+insert into t (id,a) values (255,58);
+insert into t (id,a) values (255,59);
+insert into t (id,a) values (255,60);
+insert into t (id,a) values (255,61);
+insert into t (id,a) values (255,62);
+insert into t (id,a) values (255,63);
+insert into t (id,a) values (255,64);
+insert into t (id,a) values (255,65);
+insert into t (id,a) values (255,66);
+insert into t (id,a) values (255,67);
+insert into t (id,a) values (255,68);
+insert into t (id,a) values (255,69);
+insert into t (id,a) values (255,70);
+insert into t (id,a) values (255,71);
+insert into t (id,a) values (255,72);
+insert into t (id,a) values (255,73);
+insert into t (id,a) values (255,74);
+insert into t (id,a) values (255,75);
+insert into t (id,a) values (255,76);
+insert into t (id,a) values (255,77);
+insert into t (id,a) values (255,78);
+insert into t (id,a) values (255,79);
+insert into t (id,a) values (255,80);
+insert into t (id,a) values (255,81);
+insert into t (id,a) values (255,82);
+insert into t (id,a) values (255,83);
+insert into t (id,a) values (255,84);
+insert into t (id,a) values (255,85);
+insert into t (id,a) values (255,86);
+insert into t (id,a) values (255,87);
+insert into t (id,a) values (255,88);
+insert into t (id,a) values (255,89);
+insert into t (id,a) values (255,90);
+insert into t (id,a) values (255,91);
+insert into t (id,a) values (255,92);
+insert into t (id,a) values (255,93);
+insert into t (id,a) values (255,94);
+insert into t (id,a) values (255,95);
+insert into t (id,a) values (255,96);
+insert into t (id,a) values (255,97);
+insert into t (id,a) values (255,98);
+insert into t (id,a) values (255,99);
+insert into t (id,a) values (256,0);
+insert into t (id,a) values (256,1);
+insert into t (id,a) values (256,2);
+insert into t (id,a) values (256,3);
+insert into t (id,a) values (256,4);
+insert into t (id,a) values (256,5);
+insert into t (id,a) values (256,6);
+insert into t (id,a) values (256,7);
+insert into t (id,a) values (256,8);
+insert into t (id,a) values (256,9);
+insert into t (id,a) values (256,10);
+insert into t (id,a) values (256,11);
+insert into t (id,a) values (256,12);
+insert into t (id,a) values (256,13);
+insert into t (id,a) values (256,14);
+insert into t (id,a) values (256,15);
+insert into t (id,a) values (256,16);
+insert into t (id,a) values (256,17);
+insert into t (id,a) values (256,18);
+insert into t (id,a) values (256,19);
+insert into t (id,a) values (256,20);
+insert into t (id,a) values (256,21);
+insert into t (id,a) values (256,22);
+insert into t (id,a) values (256,23);
+insert into t (id,a) values (256,24);
+insert into t (id,a) values (256,25);
+insert into t (id,a) values (256,26);
+insert into t (id,a) values (256,27);
+insert into t (id,a) values (256,28);
+insert into t (id,a) values (256,29);
+insert into t (id,a) values (256,30);
+insert into t (id,a) values (256,31);
+insert into t (id,a) values (256,32);
+insert into t (id,a) values (256,33);
+insert into t (id,a) values (256,34);
+insert into t (id,a) values (256,35);
+insert into t (id,a) values (256,36);
+insert into t (id,a) values (256,37);
+insert into t (id,a) values (256,38);
+insert into t (id,a) values (256,39);
+insert into t (id,a) values (256,40);
+insert into t (id,a) values (256,41);
+insert into t (id,a) values (256,42);
+insert into t (id,a) values (256,43);
+insert into t (id,a) values (256,44);
+insert into t (id,a) values (256,45);
+insert into t (id,a) values (256,46);
+insert into t (id,a) values (256,47);
+insert into t (id,a) values (256,48);
+insert into t (id,a) values (256,49);
+insert into t (id,a) values (256,50);
+insert into t (id,a) values (256,51);
+insert into t (id,a) values (256,52);
+insert into t (id,a) values (256,53);
+insert into t (id,a) values (256,54);
+insert into t (id,a) values (256,55);
+insert into t (id,a) values (256,56);
+insert into t (id,a) values (256,57);
+insert into t (id,a) values (256,58);
+insert into t (id,a) values (256,59);
+insert into t (id,a) values (256,60);
+insert into t (id,a) values (256,61);
+insert into t (id,a) values (256,62);
+insert into t (id,a) values (256,63);
+insert into t (id,a) values (256,64);
+insert into t (id,a) values (256,65);
+insert into t (id,a) values (256,66);
+insert into t (id,a) values (256,67);
+insert into t (id,a) values (256,68);
+insert into t (id,a) values (256,69);
+insert into t (id,a) values (256,70);
+insert into t (id,a) values (256,71);
+insert into t (id,a) values (256,72);
+insert into t (id,a) values (256,73);
+insert into t (id,a) values (256,74);
+insert into t (id,a) values (256,75);
+insert into t (id,a) values (256,76);
+insert into t (id,a) values (256,77);
+insert into t (id,a) values (256,78);
+insert into t (id,a) values (256,79);
+insert into t (id,a) values (256,80);
+insert into t (id,a) values (256,81);
+insert into t (id,a) values (256,82);
+insert into t (id,a) values (256,83);
+insert into t (id,a) values (256,84);
+insert into t (id,a) values (256,85);
+insert into t (id,a) values (256,86);
+insert into t (id,a) values (256,87);
+insert into t (id,a) values (256,88);
+insert into t (id,a) values (256,89);
+insert into t (id,a) values (256,90);
+insert into t (id,a) values (256,91);
+insert into t (id,a) values (256,92);
+insert into t (id,a) values (256,93);
+insert into t (id,a) values (256,94);
+insert into t (id,a) values (256,95);
+insert into t (id,a) values (256,96);
+insert into t (id,a) values (256,97);
+insert into t (id,a) values (256,98);
+insert into t (id,a) values (256,99);
+insert into t (id,a) values (257,0);
+insert into t (id,a) values (257,1);
+insert into t (id,a) values (257,2);
+insert into t (id,a) values (257,3);
+insert into t (id,a) values (257,4);
+insert into t (id,a) values (257,5);
+insert into t (id,a) values (257,6);
+insert into t (id,a) values (257,7);
+insert into t (id,a) values (257,8);
+insert into t (id,a) values (257,9);
+insert into t (id,a) values (257,10);
+insert into t (id,a) values (257,11);
+insert into t (id,a) values (257,12);
+insert into t (id,a) values (257,13);
+insert into t (id,a) values (257,14);
+insert into t (id,a) values (257,15);
+insert into t (id,a) values (257,16);
+insert into t (id,a) values (257,17);
+insert into t (id,a) values (257,18);
+insert into t (id,a) values (257,19);
+insert into t (id,a) values (257,20);
+insert into t (id,a) values (257,21);
+insert into t (id,a) values (257,22);
+insert into t (id,a) values (257,23);
+insert into t (id,a) values (257,24);
+insert into t (id,a) values (257,25);
+insert into t (id,a) values (257,26);
+insert into t (id,a) values (257,27);
+insert into t (id,a) values (257,28);
+insert into t (id,a) values (257,29);
+insert into t (id,a) values (257,30);
+insert into t (id,a) values (257,31);
+insert into t (id,a) values (257,32);
+insert into t (id,a) values (257,33);
+insert into t (id,a) values (257,34);
+insert into t (id,a) values (257,35);
+insert into t (id,a) values (257,36);
+insert into t (id,a) values (257,37);
+insert into t (id,a) values (257,38);
+insert into t (id,a) values (257,39);
+insert into t (id,a) values (257,40);
+insert into t (id,a) values (257,41);
+insert into t (id,a) values (257,42);
+insert into t (id,a) values (257,43);
+insert into t (id,a) values (257,44);
+insert into t (id,a) values (257,45);
+insert into t (id,a) values (257,46);
+insert into t (id,a) values (257,47);
+insert into t (id,a) values (257,48);
+insert into t (id,a) values (257,49);
+insert into t (id,a) values (257,50);
+insert into t (id,a) values (257,51);
+insert into t (id,a) values (257,52);
+insert into t (id,a) values (257,53);
+insert into t (id,a) values (257,54);
+insert into t (id,a) values (257,55);
+insert into t (id,a) values (257,56);
+insert into t (id,a) values (257,57);
+insert into t (id,a) values (257,58);
+insert into t (id,a) values (257,59);
+insert into t (id,a) values (257,60);
+insert into t (id,a) values (257,61);
+insert into t (id,a) values (257,62);
+insert into t (id,a) values (257,63);
+insert into t (id,a) values (257,64);
+insert into t (id,a) values (257,65);
+insert into t (id,a) values (257,66);
+insert into t (id,a) values (257,67);
+insert into t (id,a) values (257,68);
+insert into t (id,a) values (257,69);
+insert into t (id,a) values (257,70);
+insert into t (id,a) values (257,71);
+insert into t (id,a) values (257,72);
+insert into t (id,a) values (257,73);
+insert into t (id,a) values (257,74);
+insert into t (id,a) values (257,75);
+insert into t (id,a) values (257,76);
+insert into t (id,a) values (257,77);
+insert into t (id,a) values (257,78);
+insert into t (id,a) values (257,79);
+insert into t (id,a) values (257,80);
+insert into t (id,a) values (257,81);
+insert into t (id,a) values (257,82);
+insert into t (id,a) values (257,83);
+insert into t (id,a) values (257,84);
+insert into t (id,a) values (257,85);
+insert into t (id,a) values (257,86);
+insert into t (id,a) values (257,87);
+insert into t (id,a) values (257,88);
+insert into t (id,a) values (257,89);
+insert into t (id,a) values (257,90);
+insert into t (id,a) values (257,91);
+insert into t (id,a) values (257,92);
+insert into t (id,a) values (257,93);
+insert into t (id,a) values (257,94);
+insert into t (id,a) values (257,95);
+insert into t (id,a) values (257,96);
+insert into t (id,a) values (257,97);
+insert into t (id,a) values (257,98);
+insert into t (id,a) values (257,99);
+insert into t (id,a) values (258,0);
+insert into t (id,a) values (258,1);
+insert into t (id,a) values (258,2);
+insert into t (id,a) values (258,3);
+insert into t (id,a) values (258,4);
+insert into t (id,a) values (258,5);
+insert into t (id,a) values (258,6);
+insert into t (id,a) values (258,7);
+insert into t (id,a) values (258,8);
+insert into t (id,a) values (258,9);
+insert into t (id,a) values (258,10);
+insert into t (id,a) values (258,11);
+insert into t (id,a) values (258,12);
+insert into t (id,a) values (258,13);
+insert into t (id,a) values (258,14);
+insert into t (id,a) values (258,15);
+insert into t (id,a) values (258,16);
+insert into t (id,a) values (258,17);
+insert into t (id,a) values (258,18);
+insert into t (id,a) values (258,19);
+insert into t (id,a) values (258,20);
+insert into t (id,a) values (258,21);
+insert into t (id,a) values (258,22);
+insert into t (id,a) values (258,23);
+insert into t (id,a) values (258,24);
+insert into t (id,a) values (258,25);
+insert into t (id,a) values (258,26);
+insert into t (id,a) values (258,27);
+insert into t (id,a) values (258,28);
+insert into t (id,a) values (258,29);
+insert into t (id,a) values (258,30);
+insert into t (id,a) values (258,31);
+insert into t (id,a) values (258,32);
+insert into t (id,a) values (258,33);
+insert into t (id,a) values (258,34);
+insert into t (id,a) values (258,35);
+insert into t (id,a) values (258,36);
+insert into t (id,a) values (258,37);
+insert into t (id,a) values (258,38);
+insert into t (id,a) values (258,39);
+insert into t (id,a) values (258,40);
+insert into t (id,a) values (258,41);
+insert into t (id,a) values (258,42);
+insert into t (id,a) values (258,43);
+insert into t (id,a) values (258,44);
+insert into t (id,a) values (258,45);
+insert into t (id,a) values (258,46);
+insert into t (id,a) values (258,47);
+insert into t (id,a) values (258,48);
+insert into t (id,a) values (258,49);
+insert into t (id,a) values (258,50);
+insert into t (id,a) values (258,51);
+insert into t (id,a) values (258,52);
+insert into t (id,a) values (258,53);
+insert into t (id,a) values (258,54);
+insert into t (id,a) values (258,55);
+insert into t (id,a) values (258,56);
+insert into t (id,a) values (258,57);
+insert into t (id,a) values (258,58);
+insert into t (id,a) values (258,59);
+insert into t (id,a) values (258,60);
+insert into t (id,a) values (258,61);
+insert into t (id,a) values (258,62);
+insert into t (id,a) values (258,63);
+insert into t (id,a) values (258,64);
+insert into t (id,a) values (258,65);
+insert into t (id,a) values (258,66);
+insert into t (id,a) values (258,67);
+insert into t (id,a) values (258,68);
+insert into t (id,a) values (258,69);
+insert into t (id,a) values (258,70);
+insert into t (id,a) values (258,71);
+insert into t (id,a) values (258,72);
+insert into t (id,a) values (258,73);
+insert into t (id,a) values (258,74);
+insert into t (id,a) values (258,75);
+insert into t (id,a) values (258,76);
+insert into t (id,a) values (258,77);
+insert into t (id,a) values (258,78);
+insert into t (id,a) values (258,79);
+insert into t (id,a) values (258,80);
+insert into t (id,a) values (258,81);
+insert into t (id,a) values (258,82);
+insert into t (id,a) values (258,83);
+insert into t (id,a) values (258,84);
+insert into t (id,a) values (258,85);
+insert into t (id,a) values (258,86);
+insert into t (id,a) values (258,87);
+insert into t (id,a) values (258,88);
+insert into t (id,a) values (258,89);
+insert into t (id,a) values (258,90);
+insert into t (id,a) values (258,91);
+insert into t (id,a) values (258,92);
+insert into t (id,a) values (258,93);
+insert into t (id,a) values (258,94);
+insert into t (id,a) values (258,95);
+insert into t (id,a) values (258,96);
+insert into t (id,a) values (258,97);
+insert into t (id,a) values (258,98);
+insert into t (id,a) values (258,99);
+insert into t (id,a) values (259,0);
+insert into t (id,a) values (259,1);
+insert into t (id,a) values (259,2);
+insert into t (id,a) values (259,3);
+insert into t (id,a) values (259,4);
+insert into t (id,a) values (259,5);
+insert into t (id,a) values (259,6);
+insert into t (id,a) values (259,7);
+insert into t (id,a) values (259,8);
+insert into t (id,a) values (259,9);
+insert into t (id,a) values (259,10);
+insert into t (id,a) values (259,11);
+insert into t (id,a) values (259,12);
+insert into t (id,a) values (259,13);
+insert into t (id,a) values (259,14);
+insert into t (id,a) values (259,15);
+insert into t (id,a) values (259,16);
+insert into t (id,a) values (259,17);
+insert into t (id,a) values (259,18);
+insert into t (id,a) values (259,19);
+insert into t (id,a) values (259,20);
+insert into t (id,a) values (259,21);
+insert into t (id,a) values (259,22);
+insert into t (id,a) values (259,23);
+insert into t (id,a) values (259,24);
+insert into t (id,a) values (259,25);
+insert into t (id,a) values (259,26);
+insert into t (id,a) values (259,27);
+insert into t (id,a) values (259,28);
+insert into t (id,a) values (259,29);
+insert into t (id,a) values (259,30);
+insert into t (id,a) values (259,31);
+insert into t (id,a) values (259,32);
+insert into t (id,a) values (259,33);
+insert into t (id,a) values (259,34);
+insert into t (id,a) values (259,35);
+insert into t (id,a) values (259,36);
+insert into t (id,a) values (259,37);
+insert into t (id,a) values (259,38);
+insert into t (id,a) values (259,39);
+insert into t (id,a) values (259,40);
+insert into t (id,a) values (259,41);
+insert into t (id,a) values (259,42);
+insert into t (id,a) values (259,43);
+insert into t (id,a) values (259,44);
+insert into t (id,a) values (259,45);
+insert into t (id,a) values (259,46);
+insert into t (id,a) values (259,47);
+insert into t (id,a) values (259,48);
+insert into t (id,a) values (259,49);
+insert into t (id,a) values (259,50);
+insert into t (id,a) values (259,51);
+insert into t (id,a) values (259,52);
+insert into t (id,a) values (259,53);
+insert into t (id,a) values (259,54);
+insert into t (id,a) values (259,55);
+insert into t (id,a) values (259,56);
+insert into t (id,a) values (259,57);
+insert into t (id,a) values (259,58);
+insert into t (id,a) values (259,59);
+insert into t (id,a) values (259,60);
+insert into t (id,a) values (259,61);
+insert into t (id,a) values (259,62);
+insert into t (id,a) values (259,63);
+insert into t (id,a) values (259,64);
+insert into t (id,a) values (259,65);
+insert into t (id,a) values (259,66);
+insert into t (id,a) values (259,67);
+insert into t (id,a) values (259,68);
+insert into t (id,a) values (259,69);
+insert into t (id,a) values (259,70);
+insert into t (id,a) values (259,71);
+insert into t (id,a) values (259,72);
+insert into t (id,a) values (259,73);
+insert into t (id,a) values (259,74);
+insert into t (id,a) values (259,75);
+insert into t (id,a) values (259,76);
+insert into t (id,a) values (259,77);
+insert into t (id,a) values (259,78);
+insert into t (id,a) values (259,79);
+insert into t (id,a) values (259,80);
+insert into t (id,a) values (259,81);
+insert into t (id,a) values (259,82);
+insert into t (id,a) values (259,83);
+insert into t (id,a) values (259,84);
+insert into t (id,a) values (259,85);
+insert into t (id,a) values (259,86);
+insert into t (id,a) values (259,87);
+insert into t (id,a) values (259,88);
+insert into t (id,a) values (259,89);
+insert into t (id,a) values (259,90);
+insert into t (id,a) values (259,91);
+insert into t (id,a) values (259,92);
+insert into t (id,a) values (259,93);
+insert into t (id,a) values (259,94);
+insert into t (id,a) values (259,95);
+insert into t (id,a) values (259,96);
+insert into t (id,a) values (259,97);
+insert into t (id,a) values (259,98);
+insert into t (id,a) values (259,99);
+insert into t (id,a) values (260,0);
+insert into t (id,a) values (260,1);
+insert into t (id,a) values (260,2);
+insert into t (id,a) values (260,3);
+insert into t (id,a) values (260,4);
+insert into t (id,a) values (260,5);
+insert into t (id,a) values (260,6);
+insert into t (id,a) values (260,7);
+insert into t (id,a) values (260,8);
+insert into t (id,a) values (260,9);
+insert into t (id,a) values (260,10);
+insert into t (id,a) values (260,11);
+insert into t (id,a) values (260,12);
+insert into t (id,a) values (260,13);
+insert into t (id,a) values (260,14);
+insert into t (id,a) values (260,15);
+insert into t (id,a) values (260,16);
+insert into t (id,a) values (260,17);
+insert into t (id,a) values (260,18);
+insert into t (id,a) values (260,19);
+insert into t (id,a) values (260,20);
+insert into t (id,a) values (260,21);
+insert into t (id,a) values (260,22);
+insert into t (id,a) values (260,23);
+insert into t (id,a) values (260,24);
+insert into t (id,a) values (260,25);
+insert into t (id,a) values (260,26);
+insert into t (id,a) values (260,27);
+insert into t (id,a) values (260,28);
+insert into t (id,a) values (260,29);
+insert into t (id,a) values (260,30);
+insert into t (id,a) values (260,31);
+insert into t (id,a) values (260,32);
+insert into t (id,a) values (260,33);
+insert into t (id,a) values (260,34);
+insert into t (id,a) values (260,35);
+insert into t (id,a) values (260,36);
+insert into t (id,a) values (260,37);
+insert into t (id,a) values (260,38);
+insert into t (id,a) values (260,39);
+insert into t (id,a) values (260,40);
+insert into t (id,a) values (260,41);
+insert into t (id,a) values (260,42);
+insert into t (id,a) values (260,43);
+insert into t (id,a) values (260,44);
+insert into t (id,a) values (260,45);
+insert into t (id,a) values (260,46);
+insert into t (id,a) values (260,47);
+insert into t (id,a) values (260,48);
+insert into t (id,a) values (260,49);
+insert into t (id,a) values (260,50);
+insert into t (id,a) values (260,51);
+insert into t (id,a) values (260,52);
+insert into t (id,a) values (260,53);
+insert into t (id,a) values (260,54);
+insert into t (id,a) values (260,55);
+insert into t (id,a) values (260,56);
+insert into t (id,a) values (260,57);
+insert into t (id,a) values (260,58);
+insert into t (id,a) values (260,59);
+insert into t (id,a) values (260,60);
+insert into t (id,a) values (260,61);
+insert into t (id,a) values (260,62);
+insert into t (id,a) values (260,63);
+insert into t (id,a) values (260,64);
+insert into t (id,a) values (260,65);
+insert into t (id,a) values (260,66);
+insert into t (id,a) values (260,67);
+insert into t (id,a) values (260,68);
+insert into t (id,a) values (260,69);
+insert into t (id,a) values (260,70);
+insert into t (id,a) values (260,71);
+insert into t (id,a) values (260,72);
+insert into t (id,a) values (260,73);
+insert into t (id,a) values (260,74);
+insert into t (id,a) values (260,75);
+insert into t (id,a) values (260,76);
+insert into t (id,a) values (260,77);
+insert into t (id,a) values (260,78);
+insert into t (id,a) values (260,79);
+insert into t (id,a) values (260,80);
+insert into t (id,a) values (260,81);
+insert into t (id,a) values (260,82);
+insert into t (id,a) values (260,83);
+insert into t (id,a) values (260,84);
+insert into t (id,a) values (260,85);
+insert into t (id,a) values (260,86);
+insert into t (id,a) values (260,87);
+insert into t (id,a) values (260,88);
+insert into t (id,a) values (260,89);
+insert into t (id,a) values (260,90);
+insert into t (id,a) values (260,91);
+insert into t (id,a) values (260,92);
+insert into t (id,a) values (260,93);
+insert into t (id,a) values (260,94);
+insert into t (id,a) values (260,95);
+insert into t (id,a) values (260,96);
+insert into t (id,a) values (260,97);
+insert into t (id,a) values (260,98);
+insert into t (id,a) values (260,99);
+insert into t (id,a) values (261,0);
+insert into t (id,a) values (261,1);
+insert into t (id,a) values (261,2);
+insert into t (id,a) values (261,3);
+insert into t (id,a) values (261,4);
+insert into t (id,a) values (261,5);
+insert into t (id,a) values (261,6);
+insert into t (id,a) values (261,7);
+insert into t (id,a) values (261,8);
+insert into t (id,a) values (261,9);
+insert into t (id,a) values (261,10);
+insert into t (id,a) values (261,11);
+insert into t (id,a) values (261,12);
+insert into t (id,a) values (261,13);
+insert into t (id,a) values (261,14);
+insert into t (id,a) values (261,15);
+insert into t (id,a) values (261,16);
+insert into t (id,a) values (261,17);
+insert into t (id,a) values (261,18);
+insert into t (id,a) values (261,19);
+insert into t (id,a) values (261,20);
+insert into t (id,a) values (261,21);
+insert into t (id,a) values (261,22);
+insert into t (id,a) values (261,23);
+insert into t (id,a) values (261,24);
+insert into t (id,a) values (261,25);
+insert into t (id,a) values (261,26);
+insert into t (id,a) values (261,27);
+insert into t (id,a) values (261,28);
+insert into t (id,a) values (261,29);
+insert into t (id,a) values (261,30);
+insert into t (id,a) values (261,31);
+insert into t (id,a) values (261,32);
+insert into t (id,a) values (261,33);
+insert into t (id,a) values (261,34);
+insert into t (id,a) values (261,35);
+insert into t (id,a) values (261,36);
+insert into t (id,a) values (261,37);
+insert into t (id,a) values (261,38);
+insert into t (id,a) values (261,39);
+insert into t (id,a) values (261,40);
+insert into t (id,a) values (261,41);
+insert into t (id,a) values (261,42);
+insert into t (id,a) values (261,43);
+insert into t (id,a) values (261,44);
+insert into t (id,a) values (261,45);
+insert into t (id,a) values (261,46);
+insert into t (id,a) values (261,47);
+insert into t (id,a) values (261,48);
+insert into t (id,a) values (261,49);
+insert into t (id,a) values (261,50);
+insert into t (id,a) values (261,51);
+insert into t (id,a) values (261,52);
+insert into t (id,a) values (261,53);
+insert into t (id,a) values (261,54);
+insert into t (id,a) values (261,55);
+insert into t (id,a) values (261,56);
+insert into t (id,a) values (261,57);
+insert into t (id,a) values (261,58);
+insert into t (id,a) values (261,59);
+insert into t (id,a) values (261,60);
+insert into t (id,a) values (261,61);
+insert into t (id,a) values (261,62);
+insert into t (id,a) values (261,63);
+insert into t (id,a) values (261,64);
+insert into t (id,a) values (261,65);
+insert into t (id,a) values (261,66);
+insert into t (id,a) values (261,67);
+insert into t (id,a) values (261,68);
+insert into t (id,a) values (261,69);
+insert into t (id,a) values (261,70);
+insert into t (id,a) values (261,71);
+insert into t (id,a) values (261,72);
+insert into t (id,a) values (261,73);
+insert into t (id,a) values (261,74);
+insert into t (id,a) values (261,75);
+insert into t (id,a) values (261,76);
+insert into t (id,a) values (261,77);
+insert into t (id,a) values (261,78);
+insert into t (id,a) values (261,79);
+insert into t (id,a) values (261,80);
+insert into t (id,a) values (261,81);
+insert into t (id,a) values (261,82);
+insert into t (id,a) values (261,83);
+insert into t (id,a) values (261,84);
+insert into t (id,a) values (261,85);
+insert into t (id,a) values (261,86);
+insert into t (id,a) values (261,87);
+insert into t (id,a) values (261,88);
+insert into t (id,a) values (261,89);
+insert into t (id,a) values (261,90);
+insert into t (id,a) values (261,91);
+insert into t (id,a) values (261,92);
+insert into t (id,a) values (261,93);
+insert into t (id,a) values (261,94);
+insert into t (id,a) values (261,95);
+insert into t (id,a) values (261,96);
+insert into t (id,a) values (261,97);
+insert into t (id,a) values (261,98);
+insert into t (id,a) values (261,99);
+insert into t (id,a) values (262,0);
+insert into t (id,a) values (262,1);
+insert into t (id,a) values (262,2);
+insert into t (id,a) values (262,3);
+insert into t (id,a) values (262,4);
+insert into t (id,a) values (262,5);
+insert into t (id,a) values (262,6);
+insert into t (id,a) values (262,7);
+insert into t (id,a) values (262,8);
+insert into t (id,a) values (262,9);
+insert into t (id,a) values (262,10);
+insert into t (id,a) values (262,11);
+insert into t (id,a) values (262,12);
+insert into t (id,a) values (262,13);
+insert into t (id,a) values (262,14);
+insert into t (id,a) values (262,15);
+insert into t (id,a) values (262,16);
+insert into t (id,a) values (262,17);
+insert into t (id,a) values (262,18);
+insert into t (id,a) values (262,19);
+insert into t (id,a) values (262,20);
+insert into t (id,a) values (262,21);
+insert into t (id,a) values (262,22);
+insert into t (id,a) values (262,23);
+insert into t (id,a) values (262,24);
+insert into t (id,a) values (262,25);
+insert into t (id,a) values (262,26);
+insert into t (id,a) values (262,27);
+insert into t (id,a) values (262,28);
+insert into t (id,a) values (262,29);
+insert into t (id,a) values (262,30);
+insert into t (id,a) values (262,31);
+insert into t (id,a) values (262,32);
+insert into t (id,a) values (262,33);
+insert into t (id,a) values (262,34);
+insert into t (id,a) values (262,35);
+insert into t (id,a) values (262,36);
+insert into t (id,a) values (262,37);
+insert into t (id,a) values (262,38);
+insert into t (id,a) values (262,39);
+insert into t (id,a) values (262,40);
+insert into t (id,a) values (262,41);
+insert into t (id,a) values (262,42);
+insert into t (id,a) values (262,43);
+insert into t (id,a) values (262,44);
+insert into t (id,a) values (262,45);
+insert into t (id,a) values (262,46);
+insert into t (id,a) values (262,47);
+insert into t (id,a) values (262,48);
+insert into t (id,a) values (262,49);
+insert into t (id,a) values (262,50);
+insert into t (id,a) values (262,51);
+insert into t (id,a) values (262,52);
+insert into t (id,a) values (262,53);
+insert into t (id,a) values (262,54);
+insert into t (id,a) values (262,55);
+insert into t (id,a) values (262,56);
+insert into t (id,a) values (262,57);
+insert into t (id,a) values (262,58);
+insert into t (id,a) values (262,59);
+insert into t (id,a) values (262,60);
+insert into t (id,a) values (262,61);
+insert into t (id,a) values (262,62);
+insert into t (id,a) values (262,63);
+insert into t (id,a) values (262,64);
+insert into t (id,a) values (262,65);
+insert into t (id,a) values (262,66);
+insert into t (id,a) values (262,67);
+insert into t (id,a) values (262,68);
+insert into t (id,a) values (262,69);
+insert into t (id,a) values (262,70);
+insert into t (id,a) values (262,71);
+insert into t (id,a) values (262,72);
+insert into t (id,a) values (262,73);
+insert into t (id,a) values (262,74);
+insert into t (id,a) values (262,75);
+insert into t (id,a) values (262,76);
+insert into t (id,a) values (262,77);
+insert into t (id,a) values (262,78);
+insert into t (id,a) values (262,79);
+insert into t (id,a) values (262,80);
+insert into t (id,a) values (262,81);
+insert into t (id,a) values (262,82);
+insert into t (id,a) values (262,83);
+insert into t (id,a) values (262,84);
+insert into t (id,a) values (262,85);
+insert into t (id,a) values (262,86);
+insert into t (id,a) values (262,87);
+insert into t (id,a) values (262,88);
+insert into t (id,a) values (262,89);
+insert into t (id,a) values (262,90);
+insert into t (id,a) values (262,91);
+insert into t (id,a) values (262,92);
+insert into t (id,a) values (262,93);
+insert into t (id,a) values (262,94);
+insert into t (id,a) values (262,95);
+insert into t (id,a) values (262,96);
+insert into t (id,a) values (262,97);
+insert into t (id,a) values (262,98);
+insert into t (id,a) values (262,99);
+insert into t (id,a) values (263,0);
+insert into t (id,a) values (263,1);
+insert into t (id,a) values (263,2);
+insert into t (id,a) values (263,3);
+insert into t (id,a) values (263,4);
+insert into t (id,a) values (263,5);
+insert into t (id,a) values (263,6);
+insert into t (id,a) values (263,7);
+insert into t (id,a) values (263,8);
+insert into t (id,a) values (263,9);
+insert into t (id,a) values (263,10);
+insert into t (id,a) values (263,11);
+insert into t (id,a) values (263,12);
+insert into t (id,a) values (263,13);
+insert into t (id,a) values (263,14);
+insert into t (id,a) values (263,15);
+insert into t (id,a) values (263,16);
+insert into t (id,a) values (263,17);
+insert into t (id,a) values (263,18);
+insert into t (id,a) values (263,19);
+insert into t (id,a) values (263,20);
+insert into t (id,a) values (263,21);
+insert into t (id,a) values (263,22);
+insert into t (id,a) values (263,23);
+insert into t (id,a) values (263,24);
+insert into t (id,a) values (263,25);
+insert into t (id,a) values (263,26);
+insert into t (id,a) values (263,27);
+insert into t (id,a) values (263,28);
+insert into t (id,a) values (263,29);
+insert into t (id,a) values (263,30);
+insert into t (id,a) values (263,31);
+insert into t (id,a) values (263,32);
+insert into t (id,a) values (263,33);
+insert into t (id,a) values (263,34);
+insert into t (id,a) values (263,35);
+insert into t (id,a) values (263,36);
+insert into t (id,a) values (263,37);
+insert into t (id,a) values (263,38);
+insert into t (id,a) values (263,39);
+insert into t (id,a) values (263,40);
+insert into t (id,a) values (263,41);
+insert into t (id,a) values (263,42);
+insert into t (id,a) values (263,43);
+insert into t (id,a) values (263,44);
+insert into t (id,a) values (263,45);
+insert into t (id,a) values (263,46);
+insert into t (id,a) values (263,47);
+insert into t (id,a) values (263,48);
+insert into t (id,a) values (263,49);
+insert into t (id,a) values (263,50);
+insert into t (id,a) values (263,51);
+insert into t (id,a) values (263,52);
+insert into t (id,a) values (263,53);
+insert into t (id,a) values (263,54);
+insert into t (id,a) values (263,55);
+insert into t (id,a) values (263,56);
+insert into t (id,a) values (263,57);
+insert into t (id,a) values (263,58);
+insert into t (id,a) values (263,59);
+insert into t (id,a) values (263,60);
+insert into t (id,a) values (263,61);
+insert into t (id,a) values (263,62);
+insert into t (id,a) values (263,63);
+insert into t (id,a) values (263,64);
+insert into t (id,a) values (263,65);
+insert into t (id,a) values (263,66);
+insert into t (id,a) values (263,67);
+insert into t (id,a) values (263,68);
+insert into t (id,a) values (263,69);
+insert into t (id,a) values (263,70);
+insert into t (id,a) values (263,71);
+insert into t (id,a) values (263,72);
+insert into t (id,a) values (263,73);
+insert into t (id,a) values (263,74);
+insert into t (id,a) values (263,75);
+insert into t (id,a) values (263,76);
+insert into t (id,a) values (263,77);
+insert into t (id,a) values (263,78);
+insert into t (id,a) values (263,79);
+insert into t (id,a) values (263,80);
+insert into t (id,a) values (263,81);
+insert into t (id,a) values (263,82);
+insert into t (id,a) values (263,83);
+insert into t (id,a) values (263,84);
+insert into t (id,a) values (263,85);
+insert into t (id,a) values (263,86);
+insert into t (id,a) values (263,87);
+insert into t (id,a) values (263,88);
+insert into t (id,a) values (263,89);
+insert into t (id,a) values (263,90);
+insert into t (id,a) values (263,91);
+insert into t (id,a) values (263,92);
+insert into t (id,a) values (263,93);
+insert into t (id,a) values (263,94);
+insert into t (id,a) values (263,95);
+insert into t (id,a) values (263,96);
+insert into t (id,a) values (263,97);
+insert into t (id,a) values (263,98);
+insert into t (id,a) values (263,99);
+insert into t (id,a) values (264,0);
+insert into t (id,a) values (264,1);
+insert into t (id,a) values (264,2);
+insert into t (id,a) values (264,3);
+insert into t (id,a) values (264,4);
+insert into t (id,a) values (264,5);
+insert into t (id,a) values (264,6);
+insert into t (id,a) values (264,7);
+insert into t (id,a) values (264,8);
+insert into t (id,a) values (264,9);
+insert into t (id,a) values (264,10);
+insert into t (id,a) values (264,11);
+insert into t (id,a) values (264,12);
+insert into t (id,a) values (264,13);
+insert into t (id,a) values (264,14);
+insert into t (id,a) values (264,15);
+insert into t (id,a) values (264,16);
+insert into t (id,a) values (264,17);
+insert into t (id,a) values (264,18);
+insert into t (id,a) values (264,19);
+insert into t (id,a) values (264,20);
+insert into t (id,a) values (264,21);
+insert into t (id,a) values (264,22);
+insert into t (id,a) values (264,23);
+insert into t (id,a) values (264,24);
+insert into t (id,a) values (264,25);
+insert into t (id,a) values (264,26);
+insert into t (id,a) values (264,27);
+insert into t (id,a) values (264,28);
+insert into t (id,a) values (264,29);
+insert into t (id,a) values (264,30);
+insert into t (id,a) values (264,31);
+insert into t (id,a) values (264,32);
+insert into t (id,a) values (264,33);
+insert into t (id,a) values (264,34);
+insert into t (id,a) values (264,35);
+insert into t (id,a) values (264,36);
+insert into t (id,a) values (264,37);
+insert into t (id,a) values (264,38);
+insert into t (id,a) values (264,39);
+insert into t (id,a) values (264,40);
+insert into t (id,a) values (264,41);
+insert into t (id,a) values (264,42);
+insert into t (id,a) values (264,43);
+insert into t (id,a) values (264,44);
+insert into t (id,a) values (264,45);
+insert into t (id,a) values (264,46);
+insert into t (id,a) values (264,47);
+insert into t (id,a) values (264,48);
+insert into t (id,a) values (264,49);
+insert into t (id,a) values (264,50);
+insert into t (id,a) values (264,51);
+insert into t (id,a) values (264,52);
+insert into t (id,a) values (264,53);
+insert into t (id,a) values (264,54);
+insert into t (id,a) values (264,55);
+insert into t (id,a) values (264,56);
+insert into t (id,a) values (264,57);
+insert into t (id,a) values (264,58);
+insert into t (id,a) values (264,59);
+insert into t (id,a) values (264,60);
+insert into t (id,a) values (264,61);
+insert into t (id,a) values (264,62);
+insert into t (id,a) values (264,63);
+insert into t (id,a) values (264,64);
+insert into t (id,a) values (264,65);
+insert into t (id,a) values (264,66);
+insert into t (id,a) values (264,67);
+insert into t (id,a) values (264,68);
+insert into t (id,a) values (264,69);
+insert into t (id,a) values (264,70);
+insert into t (id,a) values (264,71);
+insert into t (id,a) values (264,72);
+insert into t (id,a) values (264,73);
+insert into t (id,a) values (264,74);
+insert into t (id,a) values (264,75);
+insert into t (id,a) values (264,76);
+insert into t (id,a) values (264,77);
+insert into t (id,a) values (264,78);
+insert into t (id,a) values (264,79);
+insert into t (id,a) values (264,80);
+insert into t (id,a) values (264,81);
+insert into t (id,a) values (264,82);
+insert into t (id,a) values (264,83);
+insert into t (id,a) values (264,84);
+insert into t (id,a) values (264,85);
+insert into t (id,a) values (264,86);
+insert into t (id,a) values (264,87);
+insert into t (id,a) values (264,88);
+insert into t (id,a) values (264,89);
+insert into t (id,a) values (264,90);
+insert into t (id,a) values (264,91);
+insert into t (id,a) values (264,92);
+insert into t (id,a) values (264,93);
+insert into t (id,a) values (264,94);
+insert into t (id,a) values (264,95);
+insert into t (id,a) values (264,96);
+insert into t (id,a) values (264,97);
+insert into t (id,a) values (264,98);
+insert into t (id,a) values (264,99);
+insert into t (id,a) values (265,0);
+insert into t (id,a) values (265,1);
+insert into t (id,a) values (265,2);
+insert into t (id,a) values (265,3);
+insert into t (id,a) values (265,4);
+insert into t (id,a) values (265,5);
+insert into t (id,a) values (265,6);
+insert into t (id,a) values (265,7);
+insert into t (id,a) values (265,8);
+insert into t (id,a) values (265,9);
+insert into t (id,a) values (265,10);
+insert into t (id,a) values (265,11);
+insert into t (id,a) values (265,12);
+insert into t (id,a) values (265,13);
+insert into t (id,a) values (265,14);
+insert into t (id,a) values (265,15);
+insert into t (id,a) values (265,16);
+insert into t (id,a) values (265,17);
+insert into t (id,a) values (265,18);
+insert into t (id,a) values (265,19);
+insert into t (id,a) values (265,20);
+insert into t (id,a) values (265,21);
+insert into t (id,a) values (265,22);
+insert into t (id,a) values (265,23);
+insert into t (id,a) values (265,24);
+insert into t (id,a) values (265,25);
+insert into t (id,a) values (265,26);
+insert into t (id,a) values (265,27);
+insert into t (id,a) values (265,28);
+insert into t (id,a) values (265,29);
+insert into t (id,a) values (265,30);
+insert into t (id,a) values (265,31);
+insert into t (id,a) values (265,32);
+insert into t (id,a) values (265,33);
+insert into t (id,a) values (265,34);
+insert into t (id,a) values (265,35);
+insert into t (id,a) values (265,36);
+insert into t (id,a) values (265,37);
+insert into t (id,a) values (265,38);
+insert into t (id,a) values (265,39);
+insert into t (id,a) values (265,40);
+insert into t (id,a) values (265,41);
+insert into t (id,a) values (265,42);
+insert into t (id,a) values (265,43);
+insert into t (id,a) values (265,44);
+insert into t (id,a) values (265,45);
+insert into t (id,a) values (265,46);
+insert into t (id,a) values (265,47);
+insert into t (id,a) values (265,48);
+insert into t (id,a) values (265,49);
+insert into t (id,a) values (265,50);
+insert into t (id,a) values (265,51);
+insert into t (id,a) values (265,52);
+insert into t (id,a) values (265,53);
+insert into t (id,a) values (265,54);
+insert into t (id,a) values (265,55);
+insert into t (id,a) values (265,56);
+insert into t (id,a) values (265,57);
+insert into t (id,a) values (265,58);
+insert into t (id,a) values (265,59);
+insert into t (id,a) values (265,60);
+insert into t (id,a) values (265,61);
+insert into t (id,a) values (265,62);
+insert into t (id,a) values (265,63);
+insert into t (id,a) values (265,64);
+insert into t (id,a) values (265,65);
+insert into t (id,a) values (265,66);
+insert into t (id,a) values (265,67);
+insert into t (id,a) values (265,68);
+insert into t (id,a) values (265,69);
+insert into t (id,a) values (265,70);
+insert into t (id,a) values (265,71);
+insert into t (id,a) values (265,72);
+insert into t (id,a) values (265,73);
+insert into t (id,a) values (265,74);
+insert into t (id,a) values (265,75);
+insert into t (id,a) values (265,76);
+insert into t (id,a) values (265,77);
+insert into t (id,a) values (265,78);
+insert into t (id,a) values (265,79);
+insert into t (id,a) values (265,80);
+insert into t (id,a) values (265,81);
+insert into t (id,a) values (265,82);
+insert into t (id,a) values (265,83);
+insert into t (id,a) values (265,84);
+insert into t (id,a) values (265,85);
+insert into t (id,a) values (265,86);
+insert into t (id,a) values (265,87);
+insert into t (id,a) values (265,88);
+insert into t (id,a) values (265,89);
+insert into t (id,a) values (265,90);
+insert into t (id,a) values (265,91);
+insert into t (id,a) values (265,92);
+insert into t (id,a) values (265,93);
+insert into t (id,a) values (265,94);
+insert into t (id,a) values (265,95);
+insert into t (id,a) values (265,96);
+insert into t (id,a) values (265,97);
+insert into t (id,a) values (265,98);
+insert into t (id,a) values (265,99);
+insert into t (id,a) values (266,0);
+insert into t (id,a) values (266,1);
+insert into t (id,a) values (266,2);
+insert into t (id,a) values (266,3);
+insert into t (id,a) values (266,4);
+insert into t (id,a) values (266,5);
+insert into t (id,a) values (266,6);
+insert into t (id,a) values (266,7);
+insert into t (id,a) values (266,8);
+insert into t (id,a) values (266,9);
+insert into t (id,a) values (266,10);
+insert into t (id,a) values (266,11);
+insert into t (id,a) values (266,12);
+insert into t (id,a) values (266,13);
+insert into t (id,a) values (266,14);
+insert into t (id,a) values (266,15);
+insert into t (id,a) values (266,16);
+insert into t (id,a) values (266,17);
+insert into t (id,a) values (266,18);
+insert into t (id,a) values (266,19);
+insert into t (id,a) values (266,20);
+insert into t (id,a) values (266,21);
+insert into t (id,a) values (266,22);
+insert into t (id,a) values (266,23);
+insert into t (id,a) values (266,24);
+insert into t (id,a) values (266,25);
+insert into t (id,a) values (266,26);
+insert into t (id,a) values (266,27);
+insert into t (id,a) values (266,28);
+insert into t (id,a) values (266,29);
+insert into t (id,a) values (266,30);
+insert into t (id,a) values (266,31);
+insert into t (id,a) values (266,32);
+insert into t (id,a) values (266,33);
+insert into t (id,a) values (266,34);
+insert into t (id,a) values (266,35);
+insert into t (id,a) values (266,36);
+insert into t (id,a) values (266,37);
+insert into t (id,a) values (266,38);
+insert into t (id,a) values (266,39);
+insert into t (id,a) values (266,40);
+insert into t (id,a) values (266,41);
+insert into t (id,a) values (266,42);
+insert into t (id,a) values (266,43);
+insert into t (id,a) values (266,44);
+insert into t (id,a) values (266,45);
+insert into t (id,a) values (266,46);
+insert into t (id,a) values (266,47);
+insert into t (id,a) values (266,48);
+insert into t (id,a) values (266,49);
+insert into t (id,a) values (266,50);
+insert into t (id,a) values (266,51);
+insert into t (id,a) values (266,52);
+insert into t (id,a) values (266,53);
+insert into t (id,a) values (266,54);
+insert into t (id,a) values (266,55);
+insert into t (id,a) values (266,56);
+insert into t (id,a) values (266,57);
+insert into t (id,a) values (266,58);
+insert into t (id,a) values (266,59);
+insert into t (id,a) values (266,60);
+insert into t (id,a) values (266,61);
+insert into t (id,a) values (266,62);
+insert into t (id,a) values (266,63);
+insert into t (id,a) values (266,64);
+insert into t (id,a) values (266,65);
+insert into t (id,a) values (266,66);
+insert into t (id,a) values (266,67);
+insert into t (id,a) values (266,68);
+insert into t (id,a) values (266,69);
+insert into t (id,a) values (266,70);
+insert into t (id,a) values (266,71);
+insert into t (id,a) values (266,72);
+insert into t (id,a) values (266,73);
+insert into t (id,a) values (266,74);
+insert into t (id,a) values (266,75);
+insert into t (id,a) values (266,76);
+insert into t (id,a) values (266,77);
+insert into t (id,a) values (266,78);
+insert into t (id,a) values (266,79);
+insert into t (id,a) values (266,80);
+insert into t (id,a) values (266,81);
+insert into t (id,a) values (266,82);
+insert into t (id,a) values (266,83);
+insert into t (id,a) values (266,84);
+insert into t (id,a) values (266,85);
+insert into t (id,a) values (266,86);
+insert into t (id,a) values (266,87);
+insert into t (id,a) values (266,88);
+insert into t (id,a) values (266,89);
+insert into t (id,a) values (266,90);
+insert into t (id,a) values (266,91);
+insert into t (id,a) values (266,92);
+insert into t (id,a) values (266,93);
+insert into t (id,a) values (266,94);
+insert into t (id,a) values (266,95);
+insert into t (id,a) values (266,96);
+insert into t (id,a) values (266,97);
+insert into t (id,a) values (266,98);
+insert into t (id,a) values (266,99);
+insert into t (id,a) values (267,0);
+insert into t (id,a) values (267,1);
+insert into t (id,a) values (267,2);
+insert into t (id,a) values (267,3);
+insert into t (id,a) values (267,4);
+insert into t (id,a) values (267,5);
+insert into t (id,a) values (267,6);
+insert into t (id,a) values (267,7);
+insert into t (id,a) values (267,8);
+insert into t (id,a) values (267,9);
+insert into t (id,a) values (267,10);
+insert into t (id,a) values (267,11);
+insert into t (id,a) values (267,12);
+insert into t (id,a) values (267,13);
+insert into t (id,a) values (267,14);
+insert into t (id,a) values (267,15);
+insert into t (id,a) values (267,16);
+insert into t (id,a) values (267,17);
+insert into t (id,a) values (267,18);
+insert into t (id,a) values (267,19);
+insert into t (id,a) values (267,20);
+insert into t (id,a) values (267,21);
+insert into t (id,a) values (267,22);
+insert into t (id,a) values (267,23);
+insert into t (id,a) values (267,24);
+insert into t (id,a) values (267,25);
+insert into t (id,a) values (267,26);
+insert into t (id,a) values (267,27);
+insert into t (id,a) values (267,28);
+insert into t (id,a) values (267,29);
+insert into t (id,a) values (267,30);
+insert into t (id,a) values (267,31);
+insert into t (id,a) values (267,32);
+insert into t (id,a) values (267,33);
+insert into t (id,a) values (267,34);
+insert into t (id,a) values (267,35);
+insert into t (id,a) values (267,36);
+insert into t (id,a) values (267,37);
+insert into t (id,a) values (267,38);
+insert into t (id,a) values (267,39);
+insert into t (id,a) values (267,40);
+insert into t (id,a) values (267,41);
+insert into t (id,a) values (267,42);
+insert into t (id,a) values (267,43);
+insert into t (id,a) values (267,44);
+insert into t (id,a) values (267,45);
+insert into t (id,a) values (267,46);
+insert into t (id,a) values (267,47);
+insert into t (id,a) values (267,48);
+insert into t (id,a) values (267,49);
+insert into t (id,a) values (267,50);
+insert into t (id,a) values (267,51);
+insert into t (id,a) values (267,52);
+insert into t (id,a) values (267,53);
+insert into t (id,a) values (267,54);
+insert into t (id,a) values (267,55);
+insert into t (id,a) values (267,56);
+insert into t (id,a) values (267,57);
+insert into t (id,a) values (267,58);
+insert into t (id,a) values (267,59);
+insert into t (id,a) values (267,60);
+insert into t (id,a) values (267,61);
+insert into t (id,a) values (267,62);
+insert into t (id,a) values (267,63);
+insert into t (id,a) values (267,64);
+insert into t (id,a) values (267,65);
+insert into t (id,a) values (267,66);
+insert into t (id,a) values (267,67);
+insert into t (id,a) values (267,68);
+insert into t (id,a) values (267,69);
+insert into t (id,a) values (267,70);
+insert into t (id,a) values (267,71);
+insert into t (id,a) values (267,72);
+insert into t (id,a) values (267,73);
+insert into t (id,a) values (267,74);
+insert into t (id,a) values (267,75);
+insert into t (id,a) values (267,76);
+insert into t (id,a) values (267,77);
+insert into t (id,a) values (267,78);
+insert into t (id,a) values (267,79);
+insert into t (id,a) values (267,80);
+insert into t (id,a) values (267,81);
+insert into t (id,a) values (267,82);
+insert into t (id,a) values (267,83);
+insert into t (id,a) values (267,84);
+insert into t (id,a) values (267,85);
+insert into t (id,a) values (267,86);
+insert into t (id,a) values (267,87);
+insert into t (id,a) values (267,88);
+insert into t (id,a) values (267,89);
+insert into t (id,a) values (267,90);
+insert into t (id,a) values (267,91);
+insert into t (id,a) values (267,92);
+insert into t (id,a) values (267,93);
+insert into t (id,a) values (267,94);
+insert into t (id,a) values (267,95);
+insert into t (id,a) values (267,96);
+insert into t (id,a) values (267,97);
+insert into t (id,a) values (267,98);
+insert into t (id,a) values (267,99);
+insert into t (id,a) values (268,0);
+insert into t (id,a) values (268,1);
+insert into t (id,a) values (268,2);
+insert into t (id,a) values (268,3);
+insert into t (id,a) values (268,4);
+insert into t (id,a) values (268,5);
+insert into t (id,a) values (268,6);
+insert into t (id,a) values (268,7);
+insert into t (id,a) values (268,8);
+insert into t (id,a) values (268,9);
+insert into t (id,a) values (268,10);
+insert into t (id,a) values (268,11);
+insert into t (id,a) values (268,12);
+insert into t (id,a) values (268,13);
+insert into t (id,a) values (268,14);
+insert into t (id,a) values (268,15);
+insert into t (id,a) values (268,16);
+insert into t (id,a) values (268,17);
+insert into t (id,a) values (268,18);
+insert into t (id,a) values (268,19);
+insert into t (id,a) values (268,20);
+insert into t (id,a) values (268,21);
+insert into t (id,a) values (268,22);
+insert into t (id,a) values (268,23);
+insert into t (id,a) values (268,24);
+insert into t (id,a) values (268,25);
+insert into t (id,a) values (268,26);
+insert into t (id,a) values (268,27);
+insert into t (id,a) values (268,28);
+insert into t (id,a) values (268,29);
+insert into t (id,a) values (268,30);
+insert into t (id,a) values (268,31);
+insert into t (id,a) values (268,32);
+insert into t (id,a) values (268,33);
+insert into t (id,a) values (268,34);
+insert into t (id,a) values (268,35);
+insert into t (id,a) values (268,36);
+insert into t (id,a) values (268,37);
+insert into t (id,a) values (268,38);
+insert into t (id,a) values (268,39);
+insert into t (id,a) values (268,40);
+insert into t (id,a) values (268,41);
+insert into t (id,a) values (268,42);
+insert into t (id,a) values (268,43);
+insert into t (id,a) values (268,44);
+insert into t (id,a) values (268,45);
+insert into t (id,a) values (268,46);
+insert into t (id,a) values (268,47);
+insert into t (id,a) values (268,48);
+insert into t (id,a) values (268,49);
+insert into t (id,a) values (268,50);
+insert into t (id,a) values (268,51);
+insert into t (id,a) values (268,52);
+insert into t (id,a) values (268,53);
+insert into t (id,a) values (268,54);
+insert into t (id,a) values (268,55);
+insert into t (id,a) values (268,56);
+insert into t (id,a) values (268,57);
+insert into t (id,a) values (268,58);
+insert into t (id,a) values (268,59);
+insert into t (id,a) values (268,60);
+insert into t (id,a) values (268,61);
+insert into t (id,a) values (268,62);
+insert into t (id,a) values (268,63);
+insert into t (id,a) values (268,64);
+insert into t (id,a) values (268,65);
+insert into t (id,a) values (268,66);
+insert into t (id,a) values (268,67);
+insert into t (id,a) values (268,68);
+insert into t (id,a) values (268,69);
+insert into t (id,a) values (268,70);
+insert into t (id,a) values (268,71);
+insert into t (id,a) values (268,72);
+insert into t (id,a) values (268,73);
+insert into t (id,a) values (268,74);
+insert into t (id,a) values (268,75);
+insert into t (id,a) values (268,76);
+insert into t (id,a) values (268,77);
+insert into t (id,a) values (268,78);
+insert into t (id,a) values (268,79);
+insert into t (id,a) values (268,80);
+insert into t (id,a) values (268,81);
+insert into t (id,a) values (268,82);
+insert into t (id,a) values (268,83);
+insert into t (id,a) values (268,84);
+insert into t (id,a) values (268,85);
+insert into t (id,a) values (268,86);
+insert into t (id,a) values (268,87);
+insert into t (id,a) values (268,88);
+insert into t (id,a) values (268,89);
+insert into t (id,a) values (268,90);
+insert into t (id,a) values (268,91);
+insert into t (id,a) values (268,92);
+insert into t (id,a) values (268,93);
+insert into t (id,a) values (268,94);
+insert into t (id,a) values (268,95);
+insert into t (id,a) values (268,96);
+insert into t (id,a) values (268,97);
+insert into t (id,a) values (268,98);
+insert into t (id,a) values (268,99);
+insert into t (id,a) values (269,0);
+insert into t (id,a) values (269,1);
+insert into t (id,a) values (269,2);
+insert into t (id,a) values (269,3);
+insert into t (id,a) values (269,4);
+insert into t (id,a) values (269,5);
+insert into t (id,a) values (269,6);
+insert into t (id,a) values (269,7);
+insert into t (id,a) values (269,8);
+insert into t (id,a) values (269,9);
+insert into t (id,a) values (269,10);
+insert into t (id,a) values (269,11);
+insert into t (id,a) values (269,12);
+insert into t (id,a) values (269,13);
+insert into t (id,a) values (269,14);
+insert into t (id,a) values (269,15);
+insert into t (id,a) values (269,16);
+insert into t (id,a) values (269,17);
+insert into t (id,a) values (269,18);
+insert into t (id,a) values (269,19);
+insert into t (id,a) values (269,20);
+insert into t (id,a) values (269,21);
+insert into t (id,a) values (269,22);
+insert into t (id,a) values (269,23);
+insert into t (id,a) values (269,24);
+insert into t (id,a) values (269,25);
+insert into t (id,a) values (269,26);
+insert into t (id,a) values (269,27);
+insert into t (id,a) values (269,28);
+insert into t (id,a) values (269,29);
+insert into t (id,a) values (269,30);
+insert into t (id,a) values (269,31);
+insert into t (id,a) values (269,32);
+insert into t (id,a) values (269,33);
+insert into t (id,a) values (269,34);
+insert into t (id,a) values (269,35);
+insert into t (id,a) values (269,36);
+insert into t (id,a) values (269,37);
+insert into t (id,a) values (269,38);
+insert into t (id,a) values (269,39);
+insert into t (id,a) values (269,40);
+insert into t (id,a) values (269,41);
+insert into t (id,a) values (269,42);
+insert into t (id,a) values (269,43);
+insert into t (id,a) values (269,44);
+insert into t (id,a) values (269,45);
+insert into t (id,a) values (269,46);
+insert into t (id,a) values (269,47);
+insert into t (id,a) values (269,48);
+insert into t (id,a) values (269,49);
+insert into t (id,a) values (269,50);
+insert into t (id,a) values (269,51);
+insert into t (id,a) values (269,52);
+insert into t (id,a) values (269,53);
+insert into t (id,a) values (269,54);
+insert into t (id,a) values (269,55);
+insert into t (id,a) values (269,56);
+insert into t (id,a) values (269,57);
+insert into t (id,a) values (269,58);
+insert into t (id,a) values (269,59);
+insert into t (id,a) values (269,60);
+insert into t (id,a) values (269,61);
+insert into t (id,a) values (269,62);
+insert into t (id,a) values (269,63);
+insert into t (id,a) values (269,64);
+insert into t (id,a) values (269,65);
+insert into t (id,a) values (269,66);
+insert into t (id,a) values (269,67);
+insert into t (id,a) values (269,68);
+insert into t (id,a) values (269,69);
+insert into t (id,a) values (269,70);
+insert into t (id,a) values (269,71);
+insert into t (id,a) values (269,72);
+insert into t (id,a) values (269,73);
+insert into t (id,a) values (269,74);
+insert into t (id,a) values (269,75);
+insert into t (id,a) values (269,76);
+insert into t (id,a) values (269,77);
+insert into t (id,a) values (269,78);
+insert into t (id,a) values (269,79);
+insert into t (id,a) values (269,80);
+insert into t (id,a) values (269,81);
+insert into t (id,a) values (269,82);
+insert into t (id,a) values (269,83);
+insert into t (id,a) values (269,84);
+insert into t (id,a) values (269,85);
+insert into t (id,a) values (269,86);
+insert into t (id,a) values (269,87);
+insert into t (id,a) values (269,88);
+insert into t (id,a) values (269,89);
+insert into t (id,a) values (269,90);
+insert into t (id,a) values (269,91);
+insert into t (id,a) values (269,92);
+insert into t (id,a) values (269,93);
+insert into t (id,a) values (269,94);
+insert into t (id,a) values (269,95);
+insert into t (id,a) values (269,96);
+insert into t (id,a) values (269,97);
+insert into t (id,a) values (269,98);
+insert into t (id,a) values (269,99);
+insert into t (id,a) values (270,0);
+insert into t (id,a) values (270,1);
+insert into t (id,a) values (270,2);
+insert into t (id,a) values (270,3);
+insert into t (id,a) values (270,4);
+insert into t (id,a) values (270,5);
+insert into t (id,a) values (270,6);
+insert into t (id,a) values (270,7);
+insert into t (id,a) values (270,8);
+insert into t (id,a) values (270,9);
+insert into t (id,a) values (270,10);
+insert into t (id,a) values (270,11);
+insert into t (id,a) values (270,12);
+insert into t (id,a) values (270,13);
+insert into t (id,a) values (270,14);
+insert into t (id,a) values (270,15);
+insert into t (id,a) values (270,16);
+insert into t (id,a) values (270,17);
+insert into t (id,a) values (270,18);
+insert into t (id,a) values (270,19);
+insert into t (id,a) values (270,20);
+insert into t (id,a) values (270,21);
+insert into t (id,a) values (270,22);
+insert into t (id,a) values (270,23);
+insert into t (id,a) values (270,24);
+insert into t (id,a) values (270,25);
+insert into t (id,a) values (270,26);
+insert into t (id,a) values (270,27);
+insert into t (id,a) values (270,28);
+insert into t (id,a) values (270,29);
+insert into t (id,a) values (270,30);
+insert into t (id,a) values (270,31);
+insert into t (id,a) values (270,32);
+insert into t (id,a) values (270,33);
+insert into t (id,a) values (270,34);
+insert into t (id,a) values (270,35);
+insert into t (id,a) values (270,36);
+insert into t (id,a) values (270,37);
+insert into t (id,a) values (270,38);
+insert into t (id,a) values (270,39);
+insert into t (id,a) values (270,40);
+insert into t (id,a) values (270,41);
+insert into t (id,a) values (270,42);
+insert into t (id,a) values (270,43);
+insert into t (id,a) values (270,44);
+insert into t (id,a) values (270,45);
+insert into t (id,a) values (270,46);
+insert into t (id,a) values (270,47);
+insert into t (id,a) values (270,48);
+insert into t (id,a) values (270,49);
+insert into t (id,a) values (270,50);
+insert into t (id,a) values (270,51);
+insert into t (id,a) values (270,52);
+insert into t (id,a) values (270,53);
+insert into t (id,a) values (270,54);
+insert into t (id,a) values (270,55);
+insert into t (id,a) values (270,56);
+insert into t (id,a) values (270,57);
+insert into t (id,a) values (270,58);
+insert into t (id,a) values (270,59);
+insert into t (id,a) values (270,60);
+insert into t (id,a) values (270,61);
+insert into t (id,a) values (270,62);
+insert into t (id,a) values (270,63);
+insert into t (id,a) values (270,64);
+insert into t (id,a) values (270,65);
+insert into t (id,a) values (270,66);
+insert into t (id,a) values (270,67);
+insert into t (id,a) values (270,68);
+insert into t (id,a) values (270,69);
+insert into t (id,a) values (270,70);
+insert into t (id,a) values (270,71);
+insert into t (id,a) values (270,72);
+insert into t (id,a) values (270,73);
+insert into t (id,a) values (270,74);
+insert into t (id,a) values (270,75);
+insert into t (id,a) values (270,76);
+insert into t (id,a) values (270,77);
+insert into t (id,a) values (270,78);
+insert into t (id,a) values (270,79);
+insert into t (id,a) values (270,80);
+insert into t (id,a) values (270,81);
+insert into t (id,a) values (270,82);
+insert into t (id,a) values (270,83);
+insert into t (id,a) values (270,84);
+insert into t (id,a) values (270,85);
+insert into t (id,a) values (270,86);
+insert into t (id,a) values (270,87);
+insert into t (id,a) values (270,88);
+insert into t (id,a) values (270,89);
+insert into t (id,a) values (270,90);
+insert into t (id,a) values (270,91);
+insert into t (id,a) values (270,92);
+insert into t (id,a) values (270,93);
+insert into t (id,a) values (270,94);
+insert into t (id,a) values (270,95);
+insert into t (id,a) values (270,96);
+insert into t (id,a) values (270,97);
+insert into t (id,a) values (270,98);
+insert into t (id,a) values (270,99);
+insert into t (id,a) values (271,0);
+insert into t (id,a) values (271,1);
+insert into t (id,a) values (271,2);
+insert into t (id,a) values (271,3);
+insert into t (id,a) values (271,4);
+insert into t (id,a) values (271,5);
+insert into t (id,a) values (271,6);
+insert into t (id,a) values (271,7);
+insert into t (id,a) values (271,8);
+insert into t (id,a) values (271,9);
+insert into t (id,a) values (271,10);
+insert into t (id,a) values (271,11);
+insert into t (id,a) values (271,12);
+insert into t (id,a) values (271,13);
+insert into t (id,a) values (271,14);
+insert into t (id,a) values (271,15);
+insert into t (id,a) values (271,16);
+insert into t (id,a) values (271,17);
+insert into t (id,a) values (271,18);
+insert into t (id,a) values (271,19);
+insert into t (id,a) values (271,20);
+insert into t (id,a) values (271,21);
+insert into t (id,a) values (271,22);
+insert into t (id,a) values (271,23);
+insert into t (id,a) values (271,24);
+insert into t (id,a) values (271,25);
+insert into t (id,a) values (271,26);
+insert into t (id,a) values (271,27);
+insert into t (id,a) values (271,28);
+insert into t (id,a) values (271,29);
+insert into t (id,a) values (271,30);
+insert into t (id,a) values (271,31);
+insert into t (id,a) values (271,32);
+insert into t (id,a) values (271,33);
+insert into t (id,a) values (271,34);
+insert into t (id,a) values (271,35);
+insert into t (id,a) values (271,36);
+insert into t (id,a) values (271,37);
+insert into t (id,a) values (271,38);
+insert into t (id,a) values (271,39);
+insert into t (id,a) values (271,40);
+insert into t (id,a) values (271,41);
+insert into t (id,a) values (271,42);
+insert into t (id,a) values (271,43);
+insert into t (id,a) values (271,44);
+insert into t (id,a) values (271,45);
+insert into t (id,a) values (271,46);
+insert into t (id,a) values (271,47);
+insert into t (id,a) values (271,48);
+insert into t (id,a) values (271,49);
+insert into t (id,a) values (271,50);
+insert into t (id,a) values (271,51);
+insert into t (id,a) values (271,52);
+insert into t (id,a) values (271,53);
+insert into t (id,a) values (271,54);
+insert into t (id,a) values (271,55);
+insert into t (id,a) values (271,56);
+insert into t (id,a) values (271,57);
+insert into t (id,a) values (271,58);
+insert into t (id,a) values (271,59);
+insert into t (id,a) values (271,60);
+insert into t (id,a) values (271,61);
+insert into t (id,a) values (271,62);
+insert into t (id,a) values (271,63);
+insert into t (id,a) values (271,64);
+insert into t (id,a) values (271,65);
+insert into t (id,a) values (271,66);
+insert into t (id,a) values (271,67);
+insert into t (id,a) values (271,68);
+insert into t (id,a) values (271,69);
+insert into t (id,a) values (271,70);
+insert into t (id,a) values (271,71);
+insert into t (id,a) values (271,72);
+insert into t (id,a) values (271,73);
+insert into t (id,a) values (271,74);
+insert into t (id,a) values (271,75);
+insert into t (id,a) values (271,76);
+insert into t (id,a) values (271,77);
+insert into t (id,a) values (271,78);
+insert into t (id,a) values (271,79);
+insert into t (id,a) values (271,80);
+insert into t (id,a) values (271,81);
+insert into t (id,a) values (271,82);
+insert into t (id,a) values (271,83);
+insert into t (id,a) values (271,84);
+insert into t (id,a) values (271,85);
+insert into t (id,a) values (271,86);
+insert into t (id,a) values (271,87);
+insert into t (id,a) values (271,88);
+insert into t (id,a) values (271,89);
+insert into t (id,a) values (271,90);
+insert into t (id,a) values (271,91);
+insert into t (id,a) values (271,92);
+insert into t (id,a) values (271,93);
+insert into t (id,a) values (271,94);
+insert into t (id,a) values (271,95);
+insert into t (id,a) values (271,96);
+insert into t (id,a) values (271,97);
+insert into t (id,a) values (271,98);
+insert into t (id,a) values (271,99);
+insert into t (id,a) values (272,0);
+insert into t (id,a) values (272,1);
+insert into t (id,a) values (272,2);
+insert into t (id,a) values (272,3);
+insert into t (id,a) values (272,4);
+insert into t (id,a) values (272,5);
+insert into t (id,a) values (272,6);
+insert into t (id,a) values (272,7);
+insert into t (id,a) values (272,8);
+insert into t (id,a) values (272,9);
+insert into t (id,a) values (272,10);
+insert into t (id,a) values (272,11);
+insert into t (id,a) values (272,12);
+insert into t (id,a) values (272,13);
+insert into t (id,a) values (272,14);
+insert into t (id,a) values (272,15);
+insert into t (id,a) values (272,16);
+insert into t (id,a) values (272,17);
+insert into t (id,a) values (272,18);
+insert into t (id,a) values (272,19);
+insert into t (id,a) values (272,20);
+insert into t (id,a) values (272,21);
+insert into t (id,a) values (272,22);
+insert into t (id,a) values (272,23);
+insert into t (id,a) values (272,24);
+insert into t (id,a) values (272,25);
+insert into t (id,a) values (272,26);
+insert into t (id,a) values (272,27);
+insert into t (id,a) values (272,28);
+insert into t (id,a) values (272,29);
+insert into t (id,a) values (272,30);
+insert into t (id,a) values (272,31);
+insert into t (id,a) values (272,32);
+insert into t (id,a) values (272,33);
+insert into t (id,a) values (272,34);
+insert into t (id,a) values (272,35);
+insert into t (id,a) values (272,36);
+insert into t (id,a) values (272,37);
+insert into t (id,a) values (272,38);
+insert into t (id,a) values (272,39);
+insert into t (id,a) values (272,40);
+insert into t (id,a) values (272,41);
+insert into t (id,a) values (272,42);
+insert into t (id,a) values (272,43);
+insert into t (id,a) values (272,44);
+insert into t (id,a) values (272,45);
+insert into t (id,a) values (272,46);
+insert into t (id,a) values (272,47);
+insert into t (id,a) values (272,48);
+insert into t (id,a) values (272,49);
+insert into t (id,a) values (272,50);
+insert into t (id,a) values (272,51);
+insert into t (id,a) values (272,52);
+insert into t (id,a) values (272,53);
+insert into t (id,a) values (272,54);
+insert into t (id,a) values (272,55);
+insert into t (id,a) values (272,56);
+insert into t (id,a) values (272,57);
+insert into t (id,a) values (272,58);
+insert into t (id,a) values (272,59);
+insert into t (id,a) values (272,60);
+insert into t (id,a) values (272,61);
+insert into t (id,a) values (272,62);
+insert into t (id,a) values (272,63);
+insert into t (id,a) values (272,64);
+insert into t (id,a) values (272,65);
+insert into t (id,a) values (272,66);
+insert into t (id,a) values (272,67);
+insert into t (id,a) values (272,68);
+insert into t (id,a) values (272,69);
+insert into t (id,a) values (272,70);
+insert into t (id,a) values (272,71);
+insert into t (id,a) values (272,72);
+insert into t (id,a) values (272,73);
+insert into t (id,a) values (272,74);
+insert into t (id,a) values (272,75);
+insert into t (id,a) values (272,76);
+insert into t (id,a) values (272,77);
+insert into t (id,a) values (272,78);
+insert into t (id,a) values (272,79);
+insert into t (id,a) values (272,80);
+insert into t (id,a) values (272,81);
+insert into t (id,a) values (272,82);
+insert into t (id,a) values (272,83);
+insert into t (id,a) values (272,84);
+insert into t (id,a) values (272,85);
+insert into t (id,a) values (272,86);
+insert into t (id,a) values (272,87);
+insert into t (id,a) values (272,88);
+insert into t (id,a) values (272,89);
+insert into t (id,a) values (272,90);
+insert into t (id,a) values (272,91);
+insert into t (id,a) values (272,92);
+insert into t (id,a) values (272,93);
+insert into t (id,a) values (272,94);
+insert into t (id,a) values (272,95);
+insert into t (id,a) values (272,96);
+insert into t (id,a) values (272,97);
+insert into t (id,a) values (272,98);
+insert into t (id,a) values (272,99);
+insert into t (id,a) values (273,0);
+insert into t (id,a) values (273,1);
+insert into t (id,a) values (273,2);
+insert into t (id,a) values (273,3);
+insert into t (id,a) values (273,4);
+insert into t (id,a) values (273,5);
+insert into t (id,a) values (273,6);
+insert into t (id,a) values (273,7);
+insert into t (id,a) values (273,8);
+insert into t (id,a) values (273,9);
+insert into t (id,a) values (273,10);
+insert into t (id,a) values (273,11);
+insert into t (id,a) values (273,12);
+insert into t (id,a) values (273,13);
+insert into t (id,a) values (273,14);
+insert into t (id,a) values (273,15);
+insert into t (id,a) values (273,16);
+insert into t (id,a) values (273,17);
+insert into t (id,a) values (273,18);
+insert into t (id,a) values (273,19);
+insert into t (id,a) values (273,20);
+insert into t (id,a) values (273,21);
+insert into t (id,a) values (273,22);
+insert into t (id,a) values (273,23);
+insert into t (id,a) values (273,24);
+insert into t (id,a) values (273,25);
+insert into t (id,a) values (273,26);
+insert into t (id,a) values (273,27);
+insert into t (id,a) values (273,28);
+insert into t (id,a) values (273,29);
+insert into t (id,a) values (273,30);
+insert into t (id,a) values (273,31);
+insert into t (id,a) values (273,32);
+insert into t (id,a) values (273,33);
+insert into t (id,a) values (273,34);
+insert into t (id,a) values (273,35);
+insert into t (id,a) values (273,36);
+insert into t (id,a) values (273,37);
+insert into t (id,a) values (273,38);
+insert into t (id,a) values (273,39);
+insert into t (id,a) values (273,40);
+insert into t (id,a) values (273,41);
+insert into t (id,a) values (273,42);
+insert into t (id,a) values (273,43);
+insert into t (id,a) values (273,44);
+insert into t (id,a) values (273,45);
+insert into t (id,a) values (273,46);
+insert into t (id,a) values (273,47);
+insert into t (id,a) values (273,48);
+insert into t (id,a) values (273,49);
+insert into t (id,a) values (273,50);
+insert into t (id,a) values (273,51);
+insert into t (id,a) values (273,52);
+insert into t (id,a) values (273,53);
+insert into t (id,a) values (273,54);
+insert into t (id,a) values (273,55);
+insert into t (id,a) values (273,56);
+insert into t (id,a) values (273,57);
+insert into t (id,a) values (273,58);
+insert into t (id,a) values (273,59);
+insert into t (id,a) values (273,60);
+insert into t (id,a) values (273,61);
+insert into t (id,a) values (273,62);
+insert into t (id,a) values (273,63);
+insert into t (id,a) values (273,64);
+insert into t (id,a) values (273,65);
+insert into t (id,a) values (273,66);
+insert into t (id,a) values (273,67);
+insert into t (id,a) values (273,68);
+insert into t (id,a) values (273,69);
+insert into t (id,a) values (273,70);
+insert into t (id,a) values (273,71);
+insert into t (id,a) values (273,72);
+insert into t (id,a) values (273,73);
+insert into t (id,a) values (273,74);
+insert into t (id,a) values (273,75);
+insert into t (id,a) values (273,76);
+insert into t (id,a) values (273,77);
+insert into t (id,a) values (273,78);
+insert into t (id,a) values (273,79);
+insert into t (id,a) values (273,80);
+insert into t (id,a) values (273,81);
+insert into t (id,a) values (273,82);
+insert into t (id,a) values (273,83);
+insert into t (id,a) values (273,84);
+insert into t (id,a) values (273,85);
+insert into t (id,a) values (273,86);
+insert into t (id,a) values (273,87);
+insert into t (id,a) values (273,88);
+insert into t (id,a) values (273,89);
+insert into t (id,a) values (273,90);
+insert into t (id,a) values (273,91);
+insert into t (id,a) values (273,92);
+insert into t (id,a) values (273,93);
+insert into t (id,a) values (273,94);
+insert into t (id,a) values (273,95);
+insert into t (id,a) values (273,96);
+insert into t (id,a) values (273,97);
+insert into t (id,a) values (273,98);
+insert into t (id,a) values (273,99);
+insert into t (id,a) values (274,0);
+insert into t (id,a) values (274,1);
+insert into t (id,a) values (274,2);
+insert into t (id,a) values (274,3);
+insert into t (id,a) values (274,4);
+insert into t (id,a) values (274,5);
+insert into t (id,a) values (274,6);
+insert into t (id,a) values (274,7);
+insert into t (id,a) values (274,8);
+insert into t (id,a) values (274,9);
+insert into t (id,a) values (274,10);
+insert into t (id,a) values (274,11);
+insert into t (id,a) values (274,12);
+insert into t (id,a) values (274,13);
+insert into t (id,a) values (274,14);
+insert into t (id,a) values (274,15);
+insert into t (id,a) values (274,16);
+insert into t (id,a) values (274,17);
+insert into t (id,a) values (274,18);
+insert into t (id,a) values (274,19);
+insert into t (id,a) values (274,20);
+insert into t (id,a) values (274,21);
+insert into t (id,a) values (274,22);
+insert into t (id,a) values (274,23);
+insert into t (id,a) values (274,24);
+insert into t (id,a) values (274,25);
+insert into t (id,a) values (274,26);
+insert into t (id,a) values (274,27);
+insert into t (id,a) values (274,28);
+insert into t (id,a) values (274,29);
+insert into t (id,a) values (274,30);
+insert into t (id,a) values (274,31);
+insert into t (id,a) values (274,32);
+insert into t (id,a) values (274,33);
+insert into t (id,a) values (274,34);
+insert into t (id,a) values (274,35);
+insert into t (id,a) values (274,36);
+insert into t (id,a) values (274,37);
+insert into t (id,a) values (274,38);
+insert into t (id,a) values (274,39);
+insert into t (id,a) values (274,40);
+insert into t (id,a) values (274,41);
+insert into t (id,a) values (274,42);
+insert into t (id,a) values (274,43);
+insert into t (id,a) values (274,44);
+insert into t (id,a) values (274,45);
+insert into t (id,a) values (274,46);
+insert into t (id,a) values (274,47);
+insert into t (id,a) values (274,48);
+insert into t (id,a) values (274,49);
+insert into t (id,a) values (274,50);
+insert into t (id,a) values (274,51);
+insert into t (id,a) values (274,52);
+insert into t (id,a) values (274,53);
+insert into t (id,a) values (274,54);
+insert into t (id,a) values (274,55);
+insert into t (id,a) values (274,56);
+insert into t (id,a) values (274,57);
+insert into t (id,a) values (274,58);
+insert into t (id,a) values (274,59);
+insert into t (id,a) values (274,60);
+insert into t (id,a) values (274,61);
+insert into t (id,a) values (274,62);
+insert into t (id,a) values (274,63);
+insert into t (id,a) values (274,64);
+insert into t (id,a) values (274,65);
+insert into t (id,a) values (274,66);
+insert into t (id,a) values (274,67);
+insert into t (id,a) values (274,68);
+insert into t (id,a) values (274,69);
+insert into t (id,a) values (274,70);
+insert into t (id,a) values (274,71);
+insert into t (id,a) values (274,72);
+insert into t (id,a) values (274,73);
+insert into t (id,a) values (274,74);
+insert into t (id,a) values (274,75);
+insert into t (id,a) values (274,76);
+insert into t (id,a) values (274,77);
+insert into t (id,a) values (274,78);
+insert into t (id,a) values (274,79);
+insert into t (id,a) values (274,80);
+insert into t (id,a) values (274,81);
+insert into t (id,a) values (274,82);
+insert into t (id,a) values (274,83);
+insert into t (id,a) values (274,84);
+insert into t (id,a) values (274,85);
+insert into t (id,a) values (274,86);
+insert into t (id,a) values (274,87);
+insert into t (id,a) values (274,88);
+insert into t (id,a) values (274,89);
+insert into t (id,a) values (274,90);
+insert into t (id,a) values (274,91);
+insert into t (id,a) values (274,92);
+insert into t (id,a) values (274,93);
+insert into t (id,a) values (274,94);
+insert into t (id,a) values (274,95);
+insert into t (id,a) values (274,96);
+insert into t (id,a) values (274,97);
+insert into t (id,a) values (274,98);
+insert into t (id,a) values (274,99);
+insert into t (id,a) values (275,0);
+insert into t (id,a) values (275,1);
+insert into t (id,a) values (275,2);
+insert into t (id,a) values (275,3);
+insert into t (id,a) values (275,4);
+insert into t (id,a) values (275,5);
+insert into t (id,a) values (275,6);
+insert into t (id,a) values (275,7);
+insert into t (id,a) values (275,8);
+insert into t (id,a) values (275,9);
+insert into t (id,a) values (275,10);
+insert into t (id,a) values (275,11);
+insert into t (id,a) values (275,12);
+insert into t (id,a) values (275,13);
+insert into t (id,a) values (275,14);
+insert into t (id,a) values (275,15);
+insert into t (id,a) values (275,16);
+insert into t (id,a) values (275,17);
+insert into t (id,a) values (275,18);
+insert into t (id,a) values (275,19);
+insert into t (id,a) values (275,20);
+insert into t (id,a) values (275,21);
+insert into t (id,a) values (275,22);
+insert into t (id,a) values (275,23);
+insert into t (id,a) values (275,24);
+insert into t (id,a) values (275,25);
+insert into t (id,a) values (275,26);
+insert into t (id,a) values (275,27);
+insert into t (id,a) values (275,28);
+insert into t (id,a) values (275,29);
+insert into t (id,a) values (275,30);
+insert into t (id,a) values (275,31);
+insert into t (id,a) values (275,32);
+insert into t (id,a) values (275,33);
+insert into t (id,a) values (275,34);
+insert into t (id,a) values (275,35);
+insert into t (id,a) values (275,36);
+insert into t (id,a) values (275,37);
+insert into t (id,a) values (275,38);
+insert into t (id,a) values (275,39);
+insert into t (id,a) values (275,40);
+insert into t (id,a) values (275,41);
+insert into t (id,a) values (275,42);
+insert into t (id,a) values (275,43);
+insert into t (id,a) values (275,44);
+insert into t (id,a) values (275,45);
+insert into t (id,a) values (275,46);
+insert into t (id,a) values (275,47);
+insert into t (id,a) values (275,48);
+insert into t (id,a) values (275,49);
+insert into t (id,a) values (275,50);
+insert into t (id,a) values (275,51);
+insert into t (id,a) values (275,52);
+insert into t (id,a) values (275,53);
+insert into t (id,a) values (275,54);
+insert into t (id,a) values (275,55);
+insert into t (id,a) values (275,56);
+insert into t (id,a) values (275,57);
+insert into t (id,a) values (275,58);
+insert into t (id,a) values (275,59);
+insert into t (id,a) values (275,60);
+insert into t (id,a) values (275,61);
+insert into t (id,a) values (275,62);
+insert into t (id,a) values (275,63);
+insert into t (id,a) values (275,64);
+insert into t (id,a) values (275,65);
+insert into t (id,a) values (275,66);
+insert into t (id,a) values (275,67);
+insert into t (id,a) values (275,68);
+insert into t (id,a) values (275,69);
+insert into t (id,a) values (275,70);
+insert into t (id,a) values (275,71);
+insert into t (id,a) values (275,72);
+insert into t (id,a) values (275,73);
+insert into t (id,a) values (275,74);
+insert into t (id,a) values (275,75);
+insert into t (id,a) values (275,76);
+insert into t (id,a) values (275,77);
+insert into t (id,a) values (275,78);
+insert into t (id,a) values (275,79);
+insert into t (id,a) values (275,80);
+insert into t (id,a) values (275,81);
+insert into t (id,a) values (275,82);
+insert into t (id,a) values (275,83);
+insert into t (id,a) values (275,84);
+insert into t (id,a) values (275,85);
+insert into t (id,a) values (275,86);
+insert into t (id,a) values (275,87);
+insert into t (id,a) values (275,88);
+insert into t (id,a) values (275,89);
+insert into t (id,a) values (275,90);
+insert into t (id,a) values (275,91);
+insert into t (id,a) values (275,92);
+insert into t (id,a) values (275,93);
+insert into t (id,a) values (275,94);
+insert into t (id,a) values (275,95);
+insert into t (id,a) values (275,96);
+insert into t (id,a) values (275,97);
+insert into t (id,a) values (275,98);
+insert into t (id,a) values (275,99);
+insert into t (id,a) values (276,0);
+insert into t (id,a) values (276,1);
+insert into t (id,a) values (276,2);
+insert into t (id,a) values (276,3);
+insert into t (id,a) values (276,4);
+insert into t (id,a) values (276,5);
+insert into t (id,a) values (276,6);
+insert into t (id,a) values (276,7);
+insert into t (id,a) values (276,8);
+insert into t (id,a) values (276,9);
+insert into t (id,a) values (276,10);
+insert into t (id,a) values (276,11);
+insert into t (id,a) values (276,12);
+insert into t (id,a) values (276,13);
+insert into t (id,a) values (276,14);
+insert into t (id,a) values (276,15);
+insert into t (id,a) values (276,16);
+insert into t (id,a) values (276,17);
+insert into t (id,a) values (276,18);
+insert into t (id,a) values (276,19);
+insert into t (id,a) values (276,20);
+insert into t (id,a) values (276,21);
+insert into t (id,a) values (276,22);
+insert into t (id,a) values (276,23);
+insert into t (id,a) values (276,24);
+insert into t (id,a) values (276,25);
+insert into t (id,a) values (276,26);
+insert into t (id,a) values (276,27);
+insert into t (id,a) values (276,28);
+insert into t (id,a) values (276,29);
+insert into t (id,a) values (276,30);
+insert into t (id,a) values (276,31);
+insert into t (id,a) values (276,32);
+insert into t (id,a) values (276,33);
+insert into t (id,a) values (276,34);
+insert into t (id,a) values (276,35);
+insert into t (id,a) values (276,36);
+insert into t (id,a) values (276,37);
+insert into t (id,a) values (276,38);
+insert into t (id,a) values (276,39);
+insert into t (id,a) values (276,40);
+insert into t (id,a) values (276,41);
+insert into t (id,a) values (276,42);
+insert into t (id,a) values (276,43);
+insert into t (id,a) values (276,44);
+insert into t (id,a) values (276,45);
+insert into t (id,a) values (276,46);
+insert into t (id,a) values (276,47);
+insert into t (id,a) values (276,48);
+insert into t (id,a) values (276,49);
+insert into t (id,a) values (276,50);
+insert into t (id,a) values (276,51);
+insert into t (id,a) values (276,52);
+insert into t (id,a) values (276,53);
+insert into t (id,a) values (276,54);
+insert into t (id,a) values (276,55);
+insert into t (id,a) values (276,56);
+insert into t (id,a) values (276,57);
+insert into t (id,a) values (276,58);
+insert into t (id,a) values (276,59);
+insert into t (id,a) values (276,60);
+insert into t (id,a) values (276,61);
+insert into t (id,a) values (276,62);
+insert into t (id,a) values (276,63);
+insert into t (id,a) values (276,64);
+insert into t (id,a) values (276,65);
+insert into t (id,a) values (276,66);
+insert into t (id,a) values (276,67);
+insert into t (id,a) values (276,68);
+insert into t (id,a) values (276,69);
+insert into t (id,a) values (276,70);
+insert into t (id,a) values (276,71);
+insert into t (id,a) values (276,72);
+insert into t (id,a) values (276,73);
+insert into t (id,a) values (276,74);
+insert into t (id,a) values (276,75);
+insert into t (id,a) values (276,76);
+insert into t (id,a) values (276,77);
+insert into t (id,a) values (276,78);
+insert into t (id,a) values (276,79);
+insert into t (id,a) values (276,80);
+insert into t (id,a) values (276,81);
+insert into t (id,a) values (276,82);
+insert into t (id,a) values (276,83);
+insert into t (id,a) values (276,84);
+insert into t (id,a) values (276,85);
+insert into t (id,a) values (276,86);
+insert into t (id,a) values (276,87);
+insert into t (id,a) values (276,88);
+insert into t (id,a) values (276,89);
+insert into t (id,a) values (276,90);
+insert into t (id,a) values (276,91);
+insert into t (id,a) values (276,92);
+insert into t (id,a) values (276,93);
+insert into t (id,a) values (276,94);
+insert into t (id,a) values (276,95);
+insert into t (id,a) values (276,96);
+insert into t (id,a) values (276,97);
+insert into t (id,a) values (276,98);
+insert into t (id,a) values (276,99);
+insert into t (id,a) values (277,0);
+insert into t (id,a) values (277,1);
+insert into t (id,a) values (277,2);
+insert into t (id,a) values (277,3);
+insert into t (id,a) values (277,4);
+insert into t (id,a) values (277,5);
+insert into t (id,a) values (277,6);
+insert into t (id,a) values (277,7);
+insert into t (id,a) values (277,8);
+insert into t (id,a) values (277,9);
+insert into t (id,a) values (277,10);
+insert into t (id,a) values (277,11);
+insert into t (id,a) values (277,12);
+insert into t (id,a) values (277,13);
+insert into t (id,a) values (277,14);
+insert into t (id,a) values (277,15);
+insert into t (id,a) values (277,16);
+insert into t (id,a) values (277,17);
+insert into t (id,a) values (277,18);
+insert into t (id,a) values (277,19);
+insert into t (id,a) values (277,20);
+insert into t (id,a) values (277,21);
+insert into t (id,a) values (277,22);
+insert into t (id,a) values (277,23);
+insert into t (id,a) values (277,24);
+insert into t (id,a) values (277,25);
+insert into t (id,a) values (277,26);
+insert into t (id,a) values (277,27);
+insert into t (id,a) values (277,28);
+insert into t (id,a) values (277,29);
+insert into t (id,a) values (277,30);
+insert into t (id,a) values (277,31);
+insert into t (id,a) values (277,32);
+insert into t (id,a) values (277,33);
+insert into t (id,a) values (277,34);
+insert into t (id,a) values (277,35);
+insert into t (id,a) values (277,36);
+insert into t (id,a) values (277,37);
+insert into t (id,a) values (277,38);
+insert into t (id,a) values (277,39);
+insert into t (id,a) values (277,40);
+insert into t (id,a) values (277,41);
+insert into t (id,a) values (277,42);
+insert into t (id,a) values (277,43);
+insert into t (id,a) values (277,44);
+insert into t (id,a) values (277,45);
+insert into t (id,a) values (277,46);
+insert into t (id,a) values (277,47);
+insert into t (id,a) values (277,48);
+insert into t (id,a) values (277,49);
+insert into t (id,a) values (277,50);
+insert into t (id,a) values (277,51);
+insert into t (id,a) values (277,52);
+insert into t (id,a) values (277,53);
+insert into t (id,a) values (277,54);
+insert into t (id,a) values (277,55);
+insert into t (id,a) values (277,56);
+insert into t (id,a) values (277,57);
+insert into t (id,a) values (277,58);
+insert into t (id,a) values (277,59);
+insert into t (id,a) values (277,60);
+insert into t (id,a) values (277,61);
+insert into t (id,a) values (277,62);
+insert into t (id,a) values (277,63);
+insert into t (id,a) values (277,64);
+insert into t (id,a) values (277,65);
+insert into t (id,a) values (277,66);
+insert into t (id,a) values (277,67);
+insert into t (id,a) values (277,68);
+insert into t (id,a) values (277,69);
+insert into t (id,a) values (277,70);
+insert into t (id,a) values (277,71);
+insert into t (id,a) values (277,72);
+insert into t (id,a) values (277,73);
+insert into t (id,a) values (277,74);
+insert into t (id,a) values (277,75);
+insert into t (id,a) values (277,76);
+insert into t (id,a) values (277,77);
+insert into t (id,a) values (277,78);
+insert into t (id,a) values (277,79);
+insert into t (id,a) values (277,80);
+insert into t (id,a) values (277,81);
+insert into t (id,a) values (277,82);
+insert into t (id,a) values (277,83);
+insert into t (id,a) values (277,84);
+insert into t (id,a) values (277,85);
+insert into t (id,a) values (277,86);
+insert into t (id,a) values (277,87);
+insert into t (id,a) values (277,88);
+insert into t (id,a) values (277,89);
+insert into t (id,a) values (277,90);
+insert into t (id,a) values (277,91);
+insert into t (id,a) values (277,92);
+insert into t (id,a) values (277,93);
+insert into t (id,a) values (277,94);
+insert into t (id,a) values (277,95);
+insert into t (id,a) values (277,96);
+insert into t (id,a) values (277,97);
+insert into t (id,a) values (277,98);
+insert into t (id,a) values (277,99);
+insert into t (id,a) values (278,0);
+insert into t (id,a) values (278,1);
+insert into t (id,a) values (278,2);
+insert into t (id,a) values (278,3);
+insert into t (id,a) values (278,4);
+insert into t (id,a) values (278,5);
+insert into t (id,a) values (278,6);
+insert into t (id,a) values (278,7);
+insert into t (id,a) values (278,8);
+insert into t (id,a) values (278,9);
+insert into t (id,a) values (278,10);
+insert into t (id,a) values (278,11);
+insert into t (id,a) values (278,12);
+insert into t (id,a) values (278,13);
+insert into t (id,a) values (278,14);
+insert into t (id,a) values (278,15);
+insert into t (id,a) values (278,16);
+insert into t (id,a) values (278,17);
+insert into t (id,a) values (278,18);
+insert into t (id,a) values (278,19);
+insert into t (id,a) values (278,20);
+insert into t (id,a) values (278,21);
+insert into t (id,a) values (278,22);
+insert into t (id,a) values (278,23);
+insert into t (id,a) values (278,24);
+insert into t (id,a) values (278,25);
+insert into t (id,a) values (278,26);
+insert into t (id,a) values (278,27);
+insert into t (id,a) values (278,28);
+insert into t (id,a) values (278,29);
+insert into t (id,a) values (278,30);
+insert into t (id,a) values (278,31);
+insert into t (id,a) values (278,32);
+insert into t (id,a) values (278,33);
+insert into t (id,a) values (278,34);
+insert into t (id,a) values (278,35);
+insert into t (id,a) values (278,36);
+insert into t (id,a) values (278,37);
+insert into t (id,a) values (278,38);
+insert into t (id,a) values (278,39);
+insert into t (id,a) values (278,40);
+insert into t (id,a) values (278,41);
+insert into t (id,a) values (278,42);
+insert into t (id,a) values (278,43);
+insert into t (id,a) values (278,44);
+insert into t (id,a) values (278,45);
+insert into t (id,a) values (278,46);
+insert into t (id,a) values (278,47);
+insert into t (id,a) values (278,48);
+insert into t (id,a) values (278,49);
+insert into t (id,a) values (278,50);
+insert into t (id,a) values (278,51);
+insert into t (id,a) values (278,52);
+insert into t (id,a) values (278,53);
+insert into t (id,a) values (278,54);
+insert into t (id,a) values (278,55);
+insert into t (id,a) values (278,56);
+insert into t (id,a) values (278,57);
+insert into t (id,a) values (278,58);
+insert into t (id,a) values (278,59);
+insert into t (id,a) values (278,60);
+insert into t (id,a) values (278,61);
+insert into t (id,a) values (278,62);
+insert into t (id,a) values (278,63);
+insert into t (id,a) values (278,64);
+insert into t (id,a) values (278,65);
+insert into t (id,a) values (278,66);
+insert into t (id,a) values (278,67);
+insert into t (id,a) values (278,68);
+insert into t (id,a) values (278,69);
+insert into t (id,a) values (278,70);
+insert into t (id,a) values (278,71);
+insert into t (id,a) values (278,72);
+insert into t (id,a) values (278,73);
+insert into t (id,a) values (278,74);
+insert into t (id,a) values (278,75);
+insert into t (id,a) values (278,76);
+insert into t (id,a) values (278,77);
+insert into t (id,a) values (278,78);
+insert into t (id,a) values (278,79);
+insert into t (id,a) values (278,80);
+insert into t (id,a) values (278,81);
+insert into t (id,a) values (278,82);
+insert into t (id,a) values (278,83);
+insert into t (id,a) values (278,84);
+insert into t (id,a) values (278,85);
+insert into t (id,a) values (278,86);
+insert into t (id,a) values (278,87);
+insert into t (id,a) values (278,88);
+insert into t (id,a) values (278,89);
+insert into t (id,a) values (278,90);
+insert into t (id,a) values (278,91);
+insert into t (id,a) values (278,92);
+insert into t (id,a) values (278,93);
+insert into t (id,a) values (278,94);
+insert into t (id,a) values (278,95);
+insert into t (id,a) values (278,96);
+insert into t (id,a) values (278,97);
+insert into t (id,a) values (278,98);
+insert into t (id,a) values (278,99);
+insert into t (id,a) values (279,0);
+insert into t (id,a) values (279,1);
+insert into t (id,a) values (279,2);
+insert into t (id,a) values (279,3);
+insert into t (id,a) values (279,4);
+insert into t (id,a) values (279,5);
+insert into t (id,a) values (279,6);
+insert into t (id,a) values (279,7);
+insert into t (id,a) values (279,8);
+insert into t (id,a) values (279,9);
+insert into t (id,a) values (279,10);
+insert into t (id,a) values (279,11);
+insert into t (id,a) values (279,12);
+insert into t (id,a) values (279,13);
+insert into t (id,a) values (279,14);
+insert into t (id,a) values (279,15);
+insert into t (id,a) values (279,16);
+insert into t (id,a) values (279,17);
+insert into t (id,a) values (279,18);
+insert into t (id,a) values (279,19);
+insert into t (id,a) values (279,20);
+insert into t (id,a) values (279,21);
+insert into t (id,a) values (279,22);
+insert into t (id,a) values (279,23);
+insert into t (id,a) values (279,24);
+insert into t (id,a) values (279,25);
+insert into t (id,a) values (279,26);
+insert into t (id,a) values (279,27);
+insert into t (id,a) values (279,28);
+insert into t (id,a) values (279,29);
+insert into t (id,a) values (279,30);
+insert into t (id,a) values (279,31);
+insert into t (id,a) values (279,32);
+insert into t (id,a) values (279,33);
+insert into t (id,a) values (279,34);
+insert into t (id,a) values (279,35);
+insert into t (id,a) values (279,36);
+insert into t (id,a) values (279,37);
+insert into t (id,a) values (279,38);
+insert into t (id,a) values (279,39);
+insert into t (id,a) values (279,40);
+insert into t (id,a) values (279,41);
+insert into t (id,a) values (279,42);
+insert into t (id,a) values (279,43);
+insert into t (id,a) values (279,44);
+insert into t (id,a) values (279,45);
+insert into t (id,a) values (279,46);
+insert into t (id,a) values (279,47);
+insert into t (id,a) values (279,48);
+insert into t (id,a) values (279,49);
+insert into t (id,a) values (279,50);
+insert into t (id,a) values (279,51);
+insert into t (id,a) values (279,52);
+insert into t (id,a) values (279,53);
+insert into t (id,a) values (279,54);
+insert into t (id,a) values (279,55);
+insert into t (id,a) values (279,56);
+insert into t (id,a) values (279,57);
+insert into t (id,a) values (279,58);
+insert into t (id,a) values (279,59);
+insert into t (id,a) values (279,60);
+insert into t (id,a) values (279,61);
+insert into t (id,a) values (279,62);
+insert into t (id,a) values (279,63);
+insert into t (id,a) values (279,64);
+insert into t (id,a) values (279,65);
+insert into t (id,a) values (279,66);
+insert into t (id,a) values (279,67);
+insert into t (id,a) values (279,68);
+insert into t (id,a) values (279,69);
+insert into t (id,a) values (279,70);
+insert into t (id,a) values (279,71);
+insert into t (id,a) values (279,72);
+insert into t (id,a) values (279,73);
+insert into t (id,a) values (279,74);
+insert into t (id,a) values (279,75);
+insert into t (id,a) values (279,76);
+insert into t (id,a) values (279,77);
+insert into t (id,a) values (279,78);
+insert into t (id,a) values (279,79);
+insert into t (id,a) values (279,80);
+insert into t (id,a) values (279,81);
+insert into t (id,a) values (279,82);
+insert into t (id,a) values (279,83);
+insert into t (id,a) values (279,84);
+insert into t (id,a) values (279,85);
+insert into t (id,a) values (279,86);
+insert into t (id,a) values (279,87);
+insert into t (id,a) values (279,88);
+insert into t (id,a) values (279,89);
+insert into t (id,a) values (279,90);
+insert into t (id,a) values (279,91);
+insert into t (id,a) values (279,92);
+insert into t (id,a) values (279,93);
+insert into t (id,a) values (279,94);
+insert into t (id,a) values (279,95);
+insert into t (id,a) values (279,96);
+insert into t (id,a) values (279,97);
+insert into t (id,a) values (279,98);
+insert into t (id,a) values (279,99);
+insert into t (id,a) values (280,0);
+insert into t (id,a) values (280,1);
+insert into t (id,a) values (280,2);
+insert into t (id,a) values (280,3);
+insert into t (id,a) values (280,4);
+insert into t (id,a) values (280,5);
+insert into t (id,a) values (280,6);
+insert into t (id,a) values (280,7);
+insert into t (id,a) values (280,8);
+insert into t (id,a) values (280,9);
+insert into t (id,a) values (280,10);
+insert into t (id,a) values (280,11);
+insert into t (id,a) values (280,12);
+insert into t (id,a) values (280,13);
+insert into t (id,a) values (280,14);
+insert into t (id,a) values (280,15);
+insert into t (id,a) values (280,16);
+insert into t (id,a) values (280,17);
+insert into t (id,a) values (280,18);
+insert into t (id,a) values (280,19);
+insert into t (id,a) values (280,20);
+insert into t (id,a) values (280,21);
+insert into t (id,a) values (280,22);
+insert into t (id,a) values (280,23);
+insert into t (id,a) values (280,24);
+insert into t (id,a) values (280,25);
+insert into t (id,a) values (280,26);
+insert into t (id,a) values (280,27);
+insert into t (id,a) values (280,28);
+insert into t (id,a) values (280,29);
+insert into t (id,a) values (280,30);
+insert into t (id,a) values (280,31);
+insert into t (id,a) values (280,32);
+insert into t (id,a) values (280,33);
+insert into t (id,a) values (280,34);
+insert into t (id,a) values (280,35);
+insert into t (id,a) values (280,36);
+insert into t (id,a) values (280,37);
+insert into t (id,a) values (280,38);
+insert into t (id,a) values (280,39);
+insert into t (id,a) values (280,40);
+insert into t (id,a) values (280,41);
+insert into t (id,a) values (280,42);
+insert into t (id,a) values (280,43);
+insert into t (id,a) values (280,44);
+insert into t (id,a) values (280,45);
+insert into t (id,a) values (280,46);
+insert into t (id,a) values (280,47);
+insert into t (id,a) values (280,48);
+insert into t (id,a) values (280,49);
+insert into t (id,a) values (280,50);
+insert into t (id,a) values (280,51);
+insert into t (id,a) values (280,52);
+insert into t (id,a) values (280,53);
+insert into t (id,a) values (280,54);
+insert into t (id,a) values (280,55);
+insert into t (id,a) values (280,56);
+insert into t (id,a) values (280,57);
+insert into t (id,a) values (280,58);
+insert into t (id,a) values (280,59);
+insert into t (id,a) values (280,60);
+insert into t (id,a) values (280,61);
+insert into t (id,a) values (280,62);
+insert into t (id,a) values (280,63);
+insert into t (id,a) values (280,64);
+insert into t (id,a) values (280,65);
+insert into t (id,a) values (280,66);
+insert into t (id,a) values (280,67);
+insert into t (id,a) values (280,68);
+insert into t (id,a) values (280,69);
+insert into t (id,a) values (280,70);
+insert into t (id,a) values (280,71);
+insert into t (id,a) values (280,72);
+insert into t (id,a) values (280,73);
+insert into t (id,a) values (280,74);
+insert into t (id,a) values (280,75);
+insert into t (id,a) values (280,76);
+insert into t (id,a) values (280,77);
+insert into t (id,a) values (280,78);
+insert into t (id,a) values (280,79);
+insert into t (id,a) values (280,80);
+insert into t (id,a) values (280,81);
+insert into t (id,a) values (280,82);
+insert into t (id,a) values (280,83);
+insert into t (id,a) values (280,84);
+insert into t (id,a) values (280,85);
+insert into t (id,a) values (280,86);
+insert into t (id,a) values (280,87);
+insert into t (id,a) values (280,88);
+insert into t (id,a) values (280,89);
+insert into t (id,a) values (280,90);
+insert into t (id,a) values (280,91);
+insert into t (id,a) values (280,92);
+insert into t (id,a) values (280,93);
+insert into t (id,a) values (280,94);
+insert into t (id,a) values (280,95);
+insert into t (id,a) values (280,96);
+insert into t (id,a) values (280,97);
+insert into t (id,a) values (280,98);
+insert into t (id,a) values (280,99);
+insert into t (id,a) values (281,0);
+insert into t (id,a) values (281,1);
+insert into t (id,a) values (281,2);
+insert into t (id,a) values (281,3);
+insert into t (id,a) values (281,4);
+insert into t (id,a) values (281,5);
+insert into t (id,a) values (281,6);
+insert into t (id,a) values (281,7);
+insert into t (id,a) values (281,8);
+insert into t (id,a) values (281,9);
+insert into t (id,a) values (281,10);
+insert into t (id,a) values (281,11);
+insert into t (id,a) values (281,12);
+insert into t (id,a) values (281,13);
+insert into t (id,a) values (281,14);
+insert into t (id,a) values (281,15);
+insert into t (id,a) values (281,16);
+insert into t (id,a) values (281,17);
+insert into t (id,a) values (281,18);
+insert into t (id,a) values (281,19);
+insert into t (id,a) values (281,20);
+insert into t (id,a) values (281,21);
+insert into t (id,a) values (281,22);
+insert into t (id,a) values (281,23);
+insert into t (id,a) values (281,24);
+insert into t (id,a) values (281,25);
+insert into t (id,a) values (281,26);
+insert into t (id,a) values (281,27);
+insert into t (id,a) values (281,28);
+insert into t (id,a) values (281,29);
+insert into t (id,a) values (281,30);
+insert into t (id,a) values (281,31);
+insert into t (id,a) values (281,32);
+insert into t (id,a) values (281,33);
+insert into t (id,a) values (281,34);
+insert into t (id,a) values (281,35);
+insert into t (id,a) values (281,36);
+insert into t (id,a) values (281,37);
+insert into t (id,a) values (281,38);
+insert into t (id,a) values (281,39);
+insert into t (id,a) values (281,40);
+insert into t (id,a) values (281,41);
+insert into t (id,a) values (281,42);
+insert into t (id,a) values (281,43);
+insert into t (id,a) values (281,44);
+insert into t (id,a) values (281,45);
+insert into t (id,a) values (281,46);
+insert into t (id,a) values (281,47);
+insert into t (id,a) values (281,48);
+insert into t (id,a) values (281,49);
+insert into t (id,a) values (281,50);
+insert into t (id,a) values (281,51);
+insert into t (id,a) values (281,52);
+insert into t (id,a) values (281,53);
+insert into t (id,a) values (281,54);
+insert into t (id,a) values (281,55);
+insert into t (id,a) values (281,56);
+insert into t (id,a) values (281,57);
+insert into t (id,a) values (281,58);
+insert into t (id,a) values (281,59);
+insert into t (id,a) values (281,60);
+insert into t (id,a) values (281,61);
+insert into t (id,a) values (281,62);
+insert into t (id,a) values (281,63);
+insert into t (id,a) values (281,64);
+insert into t (id,a) values (281,65);
+insert into t (id,a) values (281,66);
+insert into t (id,a) values (281,67);
+insert into t (id,a) values (281,68);
+insert into t (id,a) values (281,69);
+insert into t (id,a) values (281,70);
+insert into t (id,a) values (281,71);
+insert into t (id,a) values (281,72);
+insert into t (id,a) values (281,73);
+insert into t (id,a) values (281,74);
+insert into t (id,a) values (281,75);
+insert into t (id,a) values (281,76);
+insert into t (id,a) values (281,77);
+insert into t (id,a) values (281,78);
+insert into t (id,a) values (281,79);
+insert into t (id,a) values (281,80);
+insert into t (id,a) values (281,81);
+insert into t (id,a) values (281,82);
+insert into t (id,a) values (281,83);
+insert into t (id,a) values (281,84);
+insert into t (id,a) values (281,85);
+insert into t (id,a) values (281,86);
+insert into t (id,a) values (281,87);
+insert into t (id,a) values (281,88);
+insert into t (id,a) values (281,89);
+insert into t (id,a) values (281,90);
+insert into t (id,a) values (281,91);
+insert into t (id,a) values (281,92);
+insert into t (id,a) values (281,93);
+insert into t (id,a) values (281,94);
+insert into t (id,a) values (281,95);
+insert into t (id,a) values (281,96);
+insert into t (id,a) values (281,97);
+insert into t (id,a) values (281,98);
+insert into t (id,a) values (281,99);
+insert into t (id,a) values (282,0);
+insert into t (id,a) values (282,1);
+insert into t (id,a) values (282,2);
+insert into t (id,a) values (282,3);
+insert into t (id,a) values (282,4);
+insert into t (id,a) values (282,5);
+insert into t (id,a) values (282,6);
+insert into t (id,a) values (282,7);
+insert into t (id,a) values (282,8);
+insert into t (id,a) values (282,9);
+insert into t (id,a) values (282,10);
+insert into t (id,a) values (282,11);
+insert into t (id,a) values (282,12);
+insert into t (id,a) values (282,13);
+insert into t (id,a) values (282,14);
+insert into t (id,a) values (282,15);
+insert into t (id,a) values (282,16);
+insert into t (id,a) values (282,17);
+insert into t (id,a) values (282,18);
+insert into t (id,a) values (282,19);
+insert into t (id,a) values (282,20);
+insert into t (id,a) values (282,21);
+insert into t (id,a) values (282,22);
+insert into t (id,a) values (282,23);
+insert into t (id,a) values (282,24);
+insert into t (id,a) values (282,25);
+insert into t (id,a) values (282,26);
+insert into t (id,a) values (282,27);
+insert into t (id,a) values (282,28);
+insert into t (id,a) values (282,29);
+insert into t (id,a) values (282,30);
+insert into t (id,a) values (282,31);
+insert into t (id,a) values (282,32);
+insert into t (id,a) values (282,33);
+insert into t (id,a) values (282,34);
+insert into t (id,a) values (282,35);
+insert into t (id,a) values (282,36);
+insert into t (id,a) values (282,37);
+insert into t (id,a) values (282,38);
+insert into t (id,a) values (282,39);
+insert into t (id,a) values (282,40);
+insert into t (id,a) values (282,41);
+insert into t (id,a) values (282,42);
+insert into t (id,a) values (282,43);
+insert into t (id,a) values (282,44);
+insert into t (id,a) values (282,45);
+insert into t (id,a) values (282,46);
+insert into t (id,a) values (282,47);
+insert into t (id,a) values (282,48);
+insert into t (id,a) values (282,49);
+insert into t (id,a) values (282,50);
+insert into t (id,a) values (282,51);
+insert into t (id,a) values (282,52);
+insert into t (id,a) values (282,53);
+insert into t (id,a) values (282,54);
+insert into t (id,a) values (282,55);
+insert into t (id,a) values (282,56);
+insert into t (id,a) values (282,57);
+insert into t (id,a) values (282,58);
+insert into t (id,a) values (282,59);
+insert into t (id,a) values (282,60);
+insert into t (id,a) values (282,61);
+insert into t (id,a) values (282,62);
+insert into t (id,a) values (282,63);
+insert into t (id,a) values (282,64);
+insert into t (id,a) values (282,65);
+insert into t (id,a) values (282,66);
+insert into t (id,a) values (282,67);
+insert into t (id,a) values (282,68);
+insert into t (id,a) values (282,69);
+insert into t (id,a) values (282,70);
+insert into t (id,a) values (282,71);
+insert into t (id,a) values (282,72);
+insert into t (id,a) values (282,73);
+insert into t (id,a) values (282,74);
+insert into t (id,a) values (282,75);
+insert into t (id,a) values (282,76);
+insert into t (id,a) values (282,77);
+insert into t (id,a) values (282,78);
+insert into t (id,a) values (282,79);
+insert into t (id,a) values (282,80);
+insert into t (id,a) values (282,81);
+insert into t (id,a) values (282,82);
+insert into t (id,a) values (282,83);
+insert into t (id,a) values (282,84);
+insert into t (id,a) values (282,85);
+insert into t (id,a) values (282,86);
+insert into t (id,a) values (282,87);
+insert into t (id,a) values (282,88);
+insert into t (id,a) values (282,89);
+insert into t (id,a) values (282,90);
+insert into t (id,a) values (282,91);
+insert into t (id,a) values (282,92);
+insert into t (id,a) values (282,93);
+insert into t (id,a) values (282,94);
+insert into t (id,a) values (282,95);
+insert into t (id,a) values (282,96);
+insert into t (id,a) values (282,97);
+insert into t (id,a) values (282,98);
+insert into t (id,a) values (282,99);
+insert into t (id,a) values (283,0);
+insert into t (id,a) values (283,1);
+insert into t (id,a) values (283,2);
+insert into t (id,a) values (283,3);
+insert into t (id,a) values (283,4);
+insert into t (id,a) values (283,5);
+insert into t (id,a) values (283,6);
+insert into t (id,a) values (283,7);
+insert into t (id,a) values (283,8);
+insert into t (id,a) values (283,9);
+insert into t (id,a) values (283,10);
+insert into t (id,a) values (283,11);
+insert into t (id,a) values (283,12);
+insert into t (id,a) values (283,13);
+insert into t (id,a) values (283,14);
+insert into t (id,a) values (283,15);
+insert into t (id,a) values (283,16);
+insert into t (id,a) values (283,17);
+insert into t (id,a) values (283,18);
+insert into t (id,a) values (283,19);
+insert into t (id,a) values (283,20);
+insert into t (id,a) values (283,21);
+insert into t (id,a) values (283,22);
+insert into t (id,a) values (283,23);
+insert into t (id,a) values (283,24);
+insert into t (id,a) values (283,25);
+insert into t (id,a) values (283,26);
+insert into t (id,a) values (283,27);
+insert into t (id,a) values (283,28);
+insert into t (id,a) values (283,29);
+insert into t (id,a) values (283,30);
+insert into t (id,a) values (283,31);
+insert into t (id,a) values (283,32);
+insert into t (id,a) values (283,33);
+insert into t (id,a) values (283,34);
+insert into t (id,a) values (283,35);
+insert into t (id,a) values (283,36);
+insert into t (id,a) values (283,37);
+insert into t (id,a) values (283,38);
+insert into t (id,a) values (283,39);
+insert into t (id,a) values (283,40);
+insert into t (id,a) values (283,41);
+insert into t (id,a) values (283,42);
+insert into t (id,a) values (283,43);
+insert into t (id,a) values (283,44);
+insert into t (id,a) values (283,45);
+insert into t (id,a) values (283,46);
+insert into t (id,a) values (283,47);
+insert into t (id,a) values (283,48);
+insert into t (id,a) values (283,49);
+insert into t (id,a) values (283,50);
+insert into t (id,a) values (283,51);
+insert into t (id,a) values (283,52);
+insert into t (id,a) values (283,53);
+insert into t (id,a) values (283,54);
+insert into t (id,a) values (283,55);
+insert into t (id,a) values (283,56);
+insert into t (id,a) values (283,57);
+insert into t (id,a) values (283,58);
+insert into t (id,a) values (283,59);
+insert into t (id,a) values (283,60);
+insert into t (id,a) values (283,61);
+insert into t (id,a) values (283,62);
+insert into t (id,a) values (283,63);
+insert into t (id,a) values (283,64);
+insert into t (id,a) values (283,65);
+insert into t (id,a) values (283,66);
+insert into t (id,a) values (283,67);
+insert into t (id,a) values (283,68);
+insert into t (id,a) values (283,69);
+insert into t (id,a) values (283,70);
+insert into t (id,a) values (283,71);
+insert into t (id,a) values (283,72);
+insert into t (id,a) values (283,73);
+insert into t (id,a) values (283,74);
+insert into t (id,a) values (283,75);
+insert into t (id,a) values (283,76);
+insert into t (id,a) values (283,77);
+insert into t (id,a) values (283,78);
+insert into t (id,a) values (283,79);
+insert into t (id,a) values (283,80);
+insert into t (id,a) values (283,81);
+insert into t (id,a) values (283,82);
+insert into t (id,a) values (283,83);
+insert into t (id,a) values (283,84);
+insert into t (id,a) values (283,85);
+insert into t (id,a) values (283,86);
+insert into t (id,a) values (283,87);
+insert into t (id,a) values (283,88);
+insert into t (id,a) values (283,89);
+insert into t (id,a) values (283,90);
+insert into t (id,a) values (283,91);
+insert into t (id,a) values (283,92);
+insert into t (id,a) values (283,93);
+insert into t (id,a) values (283,94);
+insert into t (id,a) values (283,95);
+insert into t (id,a) values (283,96);
+insert into t (id,a) values (283,97);
+insert into t (id,a) values (283,98);
+insert into t (id,a) values (283,99);
+insert into t (id,a) values (284,0);
+insert into t (id,a) values (284,1);
+insert into t (id,a) values (284,2);
+insert into t (id,a) values (284,3);
+insert into t (id,a) values (284,4);
+insert into t (id,a) values (284,5);
+insert into t (id,a) values (284,6);
+insert into t (id,a) values (284,7);
+insert into t (id,a) values (284,8);
+insert into t (id,a) values (284,9);
+insert into t (id,a) values (284,10);
+insert into t (id,a) values (284,11);
+insert into t (id,a) values (284,12);
+insert into t (id,a) values (284,13);
+insert into t (id,a) values (284,14);
+insert into t (id,a) values (284,15);
+insert into t (id,a) values (284,16);
+insert into t (id,a) values (284,17);
+insert into t (id,a) values (284,18);
+insert into t (id,a) values (284,19);
+insert into t (id,a) values (284,20);
+insert into t (id,a) values (284,21);
+insert into t (id,a) values (284,22);
+insert into t (id,a) values (284,23);
+insert into t (id,a) values (284,24);
+insert into t (id,a) values (284,25);
+insert into t (id,a) values (284,26);
+insert into t (id,a) values (284,27);
+insert into t (id,a) values (284,28);
+insert into t (id,a) values (284,29);
+insert into t (id,a) values (284,30);
+insert into t (id,a) values (284,31);
+insert into t (id,a) values (284,32);
+insert into t (id,a) values (284,33);
+insert into t (id,a) values (284,34);
+insert into t (id,a) values (284,35);
+insert into t (id,a) values (284,36);
+insert into t (id,a) values (284,37);
+insert into t (id,a) values (284,38);
+insert into t (id,a) values (284,39);
+insert into t (id,a) values (284,40);
+insert into t (id,a) values (284,41);
+insert into t (id,a) values (284,42);
+insert into t (id,a) values (284,43);
+insert into t (id,a) values (284,44);
+insert into t (id,a) values (284,45);
+insert into t (id,a) values (284,46);
+insert into t (id,a) values (284,47);
+insert into t (id,a) values (284,48);
+insert into t (id,a) values (284,49);
+insert into t (id,a) values (284,50);
+insert into t (id,a) values (284,51);
+insert into t (id,a) values (284,52);
+insert into t (id,a) values (284,53);
+insert into t (id,a) values (284,54);
+insert into t (id,a) values (284,55);
+insert into t (id,a) values (284,56);
+insert into t (id,a) values (284,57);
+insert into t (id,a) values (284,58);
+insert into t (id,a) values (284,59);
+insert into t (id,a) values (284,60);
+insert into t (id,a) values (284,61);
+insert into t (id,a) values (284,62);
+insert into t (id,a) values (284,63);
+insert into t (id,a) values (284,64);
+insert into t (id,a) values (284,65);
+insert into t (id,a) values (284,66);
+insert into t (id,a) values (284,67);
+insert into t (id,a) values (284,68);
+insert into t (id,a) values (284,69);
+insert into t (id,a) values (284,70);
+insert into t (id,a) values (284,71);
+insert into t (id,a) values (284,72);
+insert into t (id,a) values (284,73);
+insert into t (id,a) values (284,74);
+insert into t (id,a) values (284,75);
+insert into t (id,a) values (284,76);
+insert into t (id,a) values (284,77);
+insert into t (id,a) values (284,78);
+insert into t (id,a) values (284,79);
+insert into t (id,a) values (284,80);
+insert into t (id,a) values (284,81);
+insert into t (id,a) values (284,82);
+insert into t (id,a) values (284,83);
+insert into t (id,a) values (284,84);
+insert into t (id,a) values (284,85);
+insert into t (id,a) values (284,86);
+insert into t (id,a) values (284,87);
+insert into t (id,a) values (284,88);
+insert into t (id,a) values (284,89);
+insert into t (id,a) values (284,90);
+insert into t (id,a) values (284,91);
+insert into t (id,a) values (284,92);
+insert into t (id,a) values (284,93);
+insert into t (id,a) values (284,94);
+insert into t (id,a) values (284,95);
+insert into t (id,a) values (284,96);
+insert into t (id,a) values (284,97);
+insert into t (id,a) values (284,98);
+insert into t (id,a) values (284,99);
+insert into t (id,a) values (285,0);
+insert into t (id,a) values (285,1);
+insert into t (id,a) values (285,2);
+insert into t (id,a) values (285,3);
+insert into t (id,a) values (285,4);
+insert into t (id,a) values (285,5);
+insert into t (id,a) values (285,6);
+insert into t (id,a) values (285,7);
+insert into t (id,a) values (285,8);
+insert into t (id,a) values (285,9);
+insert into t (id,a) values (285,10);
+insert into t (id,a) values (285,11);
+insert into t (id,a) values (285,12);
+insert into t (id,a) values (285,13);
+insert into t (id,a) values (285,14);
+insert into t (id,a) values (285,15);
+insert into t (id,a) values (285,16);
+insert into t (id,a) values (285,17);
+insert into t (id,a) values (285,18);
+insert into t (id,a) values (285,19);
+insert into t (id,a) values (285,20);
+insert into t (id,a) values (285,21);
+insert into t (id,a) values (285,22);
+insert into t (id,a) values (285,23);
+insert into t (id,a) values (285,24);
+insert into t (id,a) values (285,25);
+insert into t (id,a) values (285,26);
+insert into t (id,a) values (285,27);
+insert into t (id,a) values (285,28);
+insert into t (id,a) values (285,29);
+insert into t (id,a) values (285,30);
+insert into t (id,a) values (285,31);
+insert into t (id,a) values (285,32);
+insert into t (id,a) values (285,33);
+insert into t (id,a) values (285,34);
+insert into t (id,a) values (285,35);
+insert into t (id,a) values (285,36);
+insert into t (id,a) values (285,37);
+insert into t (id,a) values (285,38);
+insert into t (id,a) values (285,39);
+insert into t (id,a) values (285,40);
+insert into t (id,a) values (285,41);
+insert into t (id,a) values (285,42);
+insert into t (id,a) values (285,43);
+insert into t (id,a) values (285,44);
+insert into t (id,a) values (285,45);
+insert into t (id,a) values (285,46);
+insert into t (id,a) values (285,47);
+insert into t (id,a) values (285,48);
+insert into t (id,a) values (285,49);
+insert into t (id,a) values (285,50);
+insert into t (id,a) values (285,51);
+insert into t (id,a) values (285,52);
+insert into t (id,a) values (285,53);
+insert into t (id,a) values (285,54);
+insert into t (id,a) values (285,55);
+insert into t (id,a) values (285,56);
+insert into t (id,a) values (285,57);
+insert into t (id,a) values (285,58);
+insert into t (id,a) values (285,59);
+insert into t (id,a) values (285,60);
+insert into t (id,a) values (285,61);
+insert into t (id,a) values (285,62);
+insert into t (id,a) values (285,63);
+insert into t (id,a) values (285,64);
+insert into t (id,a) values (285,65);
+insert into t (id,a) values (285,66);
+insert into t (id,a) values (285,67);
+insert into t (id,a) values (285,68);
+insert into t (id,a) values (285,69);
+insert into t (id,a) values (285,70);
+insert into t (id,a) values (285,71);
+insert into t (id,a) values (285,72);
+insert into t (id,a) values (285,73);
+insert into t (id,a) values (285,74);
+insert into t (id,a) values (285,75);
+insert into t (id,a) values (285,76);
+insert into t (id,a) values (285,77);
+insert into t (id,a) values (285,78);
+insert into t (id,a) values (285,79);
+insert into t (id,a) values (285,80);
+insert into t (id,a) values (285,81);
+insert into t (id,a) values (285,82);
+insert into t (id,a) values (285,83);
+insert into t (id,a) values (285,84);
+insert into t (id,a) values (285,85);
+insert into t (id,a) values (285,86);
+insert into t (id,a) values (285,87);
+insert into t (id,a) values (285,88);
+insert into t (id,a) values (285,89);
+insert into t (id,a) values (285,90);
+insert into t (id,a) values (285,91);
+insert into t (id,a) values (285,92);
+insert into t (id,a) values (285,93);
+insert into t (id,a) values (285,94);
+insert into t (id,a) values (285,95);
+insert into t (id,a) values (285,96);
+insert into t (id,a) values (285,97);
+insert into t (id,a) values (285,98);
+insert into t (id,a) values (285,99);
+insert into t (id,a) values (286,0);
+insert into t (id,a) values (286,1);
+insert into t (id,a) values (286,2);
+insert into t (id,a) values (286,3);
+insert into t (id,a) values (286,4);
+insert into t (id,a) values (286,5);
+insert into t (id,a) values (286,6);
+insert into t (id,a) values (286,7);
+insert into t (id,a) values (286,8);
+insert into t (id,a) values (286,9);
+insert into t (id,a) values (286,10);
+insert into t (id,a) values (286,11);
+insert into t (id,a) values (286,12);
+insert into t (id,a) values (286,13);
+insert into t (id,a) values (286,14);
+insert into t (id,a) values (286,15);
+insert into t (id,a) values (286,16);
+insert into t (id,a) values (286,17);
+insert into t (id,a) values (286,18);
+insert into t (id,a) values (286,19);
+insert into t (id,a) values (286,20);
+insert into t (id,a) values (286,21);
+insert into t (id,a) values (286,22);
+insert into t (id,a) values (286,23);
+insert into t (id,a) values (286,24);
+insert into t (id,a) values (286,25);
+insert into t (id,a) values (286,26);
+insert into t (id,a) values (286,27);
+insert into t (id,a) values (286,28);
+insert into t (id,a) values (286,29);
+insert into t (id,a) values (286,30);
+insert into t (id,a) values (286,31);
+insert into t (id,a) values (286,32);
+insert into t (id,a) values (286,33);
+insert into t (id,a) values (286,34);
+insert into t (id,a) values (286,35);
+insert into t (id,a) values (286,36);
+insert into t (id,a) values (286,37);
+insert into t (id,a) values (286,38);
+insert into t (id,a) values (286,39);
+insert into t (id,a) values (286,40);
+insert into t (id,a) values (286,41);
+insert into t (id,a) values (286,42);
+insert into t (id,a) values (286,43);
+insert into t (id,a) values (286,44);
+insert into t (id,a) values (286,45);
+insert into t (id,a) values (286,46);
+insert into t (id,a) values (286,47);
+insert into t (id,a) values (286,48);
+insert into t (id,a) values (286,49);
+insert into t (id,a) values (286,50);
+insert into t (id,a) values (286,51);
+insert into t (id,a) values (286,52);
+insert into t (id,a) values (286,53);
+insert into t (id,a) values (286,54);
+insert into t (id,a) values (286,55);
+insert into t (id,a) values (286,56);
+insert into t (id,a) values (286,57);
+insert into t (id,a) values (286,58);
+insert into t (id,a) values (286,59);
+insert into t (id,a) values (286,60);
+insert into t (id,a) values (286,61);
+insert into t (id,a) values (286,62);
+insert into t (id,a) values (286,63);
+insert into t (id,a) values (286,64);
+insert into t (id,a) values (286,65);
+insert into t (id,a) values (286,66);
+insert into t (id,a) values (286,67);
+insert into t (id,a) values (286,68);
+insert into t (id,a) values (286,69);
+insert into t (id,a) values (286,70);
+insert into t (id,a) values (286,71);
+insert into t (id,a) values (286,72);
+insert into t (id,a) values (286,73);
+insert into t (id,a) values (286,74);
+insert into t (id,a) values (286,75);
+insert into t (id,a) values (286,76);
+insert into t (id,a) values (286,77);
+insert into t (id,a) values (286,78);
+insert into t (id,a) values (286,79);
+insert into t (id,a) values (286,80);
+insert into t (id,a) values (286,81);
+insert into t (id,a) values (286,82);
+insert into t (id,a) values (286,83);
+insert into t (id,a) values (286,84);
+insert into t (id,a) values (286,85);
+insert into t (id,a) values (286,86);
+insert into t (id,a) values (286,87);
+insert into t (id,a) values (286,88);
+insert into t (id,a) values (286,89);
+insert into t (id,a) values (286,90);
+insert into t (id,a) values (286,91);
+insert into t (id,a) values (286,92);
+insert into t (id,a) values (286,93);
+insert into t (id,a) values (286,94);
+insert into t (id,a) values (286,95);
+insert into t (id,a) values (286,96);
+insert into t (id,a) values (286,97);
+insert into t (id,a) values (286,98);
+insert into t (id,a) values (286,99);
+insert into t (id,a) values (287,0);
+insert into t (id,a) values (287,1);
+insert into t (id,a) values (287,2);
+insert into t (id,a) values (287,3);
+insert into t (id,a) values (287,4);
+insert into t (id,a) values (287,5);
+insert into t (id,a) values (287,6);
+insert into t (id,a) values (287,7);
+insert into t (id,a) values (287,8);
+insert into t (id,a) values (287,9);
+insert into t (id,a) values (287,10);
+insert into t (id,a) values (287,11);
+insert into t (id,a) values (287,12);
+insert into t (id,a) values (287,13);
+insert into t (id,a) values (287,14);
+insert into t (id,a) values (287,15);
+insert into t (id,a) values (287,16);
+insert into t (id,a) values (287,17);
+insert into t (id,a) values (287,18);
+insert into t (id,a) values (287,19);
+insert into t (id,a) values (287,20);
+insert into t (id,a) values (287,21);
+insert into t (id,a) values (287,22);
+insert into t (id,a) values (287,23);
+insert into t (id,a) values (287,24);
+insert into t (id,a) values (287,25);
+insert into t (id,a) values (287,26);
+insert into t (id,a) values (287,27);
+insert into t (id,a) values (287,28);
+insert into t (id,a) values (287,29);
+insert into t (id,a) values (287,30);
+insert into t (id,a) values (287,31);
+insert into t (id,a) values (287,32);
+insert into t (id,a) values (287,33);
+insert into t (id,a) values (287,34);
+insert into t (id,a) values (287,35);
+insert into t (id,a) values (287,36);
+insert into t (id,a) values (287,37);
+insert into t (id,a) values (287,38);
+insert into t (id,a) values (287,39);
+insert into t (id,a) values (287,40);
+insert into t (id,a) values (287,41);
+insert into t (id,a) values (287,42);
+insert into t (id,a) values (287,43);
+insert into t (id,a) values (287,44);
+insert into t (id,a) values (287,45);
+insert into t (id,a) values (287,46);
+insert into t (id,a) values (287,47);
+insert into t (id,a) values (287,48);
+insert into t (id,a) values (287,49);
+insert into t (id,a) values (287,50);
+insert into t (id,a) values (287,51);
+insert into t (id,a) values (287,52);
+insert into t (id,a) values (287,53);
+insert into t (id,a) values (287,54);
+insert into t (id,a) values (287,55);
+insert into t (id,a) values (287,56);
+insert into t (id,a) values (287,57);
+insert into t (id,a) values (287,58);
+insert into t (id,a) values (287,59);
+insert into t (id,a) values (287,60);
+insert into t (id,a) values (287,61);
+insert into t (id,a) values (287,62);
+insert into t (id,a) values (287,63);
+insert into t (id,a) values (287,64);
+insert into t (id,a) values (287,65);
+insert into t (id,a) values (287,66);
+insert into t (id,a) values (287,67);
+insert into t (id,a) values (287,68);
+insert into t (id,a) values (287,69);
+insert into t (id,a) values (287,70);
+insert into t (id,a) values (287,71);
+insert into t (id,a) values (287,72);
+insert into t (id,a) values (287,73);
+insert into t (id,a) values (287,74);
+insert into t (id,a) values (287,75);
+insert into t (id,a) values (287,76);
+insert into t (id,a) values (287,77);
+insert into t (id,a) values (287,78);
+insert into t (id,a) values (287,79);
+insert into t (id,a) values (287,80);
+insert into t (id,a) values (287,81);
+insert into t (id,a) values (287,82);
+insert into t (id,a) values (287,83);
+insert into t (id,a) values (287,84);
+insert into t (id,a) values (287,85);
+insert into t (id,a) values (287,86);
+insert into t (id,a) values (287,87);
+insert into t (id,a) values (287,88);
+insert into t (id,a) values (287,89);
+insert into t (id,a) values (287,90);
+insert into t (id,a) values (287,91);
+insert into t (id,a) values (287,92);
+insert into t (id,a) values (287,93);
+insert into t (id,a) values (287,94);
+insert into t (id,a) values (287,95);
+insert into t (id,a) values (287,96);
+insert into t (id,a) values (287,97);
+insert into t (id,a) values (287,98);
+insert into t (id,a) values (287,99);
+insert into t (id,a) values (288,0);
+insert into t (id,a) values (288,1);
+insert into t (id,a) values (288,2);
+insert into t (id,a) values (288,3);
+insert into t (id,a) values (288,4);
+insert into t (id,a) values (288,5);
+insert into t (id,a) values (288,6);
+insert into t (id,a) values (288,7);
+insert into t (id,a) values (288,8);
+insert into t (id,a) values (288,9);
+insert into t (id,a) values (288,10);
+insert into t (id,a) values (288,11);
+insert into t (id,a) values (288,12);
+insert into t (id,a) values (288,13);
+insert into t (id,a) values (288,14);
+insert into t (id,a) values (288,15);
+insert into t (id,a) values (288,16);
+insert into t (id,a) values (288,17);
+insert into t (id,a) values (288,18);
+insert into t (id,a) values (288,19);
+insert into t (id,a) values (288,20);
+insert into t (id,a) values (288,21);
+insert into t (id,a) values (288,22);
+insert into t (id,a) values (288,23);
+insert into t (id,a) values (288,24);
+insert into t (id,a) values (288,25);
+insert into t (id,a) values (288,26);
+insert into t (id,a) values (288,27);
+insert into t (id,a) values (288,28);
+insert into t (id,a) values (288,29);
+insert into t (id,a) values (288,30);
+insert into t (id,a) values (288,31);
+insert into t (id,a) values (288,32);
+insert into t (id,a) values (288,33);
+insert into t (id,a) values (288,34);
+insert into t (id,a) values (288,35);
+insert into t (id,a) values (288,36);
+insert into t (id,a) values (288,37);
+insert into t (id,a) values (288,38);
+insert into t (id,a) values (288,39);
+insert into t (id,a) values (288,40);
+insert into t (id,a) values (288,41);
+insert into t (id,a) values (288,42);
+insert into t (id,a) values (288,43);
+insert into t (id,a) values (288,44);
+insert into t (id,a) values (288,45);
+insert into t (id,a) values (288,46);
+insert into t (id,a) values (288,47);
+insert into t (id,a) values (288,48);
+insert into t (id,a) values (288,49);
+insert into t (id,a) values (288,50);
+insert into t (id,a) values (288,51);
+insert into t (id,a) values (288,52);
+insert into t (id,a) values (288,53);
+insert into t (id,a) values (288,54);
+insert into t (id,a) values (288,55);
+insert into t (id,a) values (288,56);
+insert into t (id,a) values (288,57);
+insert into t (id,a) values (288,58);
+insert into t (id,a) values (288,59);
+insert into t (id,a) values (288,60);
+insert into t (id,a) values (288,61);
+insert into t (id,a) values (288,62);
+insert into t (id,a) values (288,63);
+insert into t (id,a) values (288,64);
+insert into t (id,a) values (288,65);
+insert into t (id,a) values (288,66);
+insert into t (id,a) values (288,67);
+insert into t (id,a) values (288,68);
+insert into t (id,a) values (288,69);
+insert into t (id,a) values (288,70);
+insert into t (id,a) values (288,71);
+insert into t (id,a) values (288,72);
+insert into t (id,a) values (288,73);
+insert into t (id,a) values (288,74);
+insert into t (id,a) values (288,75);
+insert into t (id,a) values (288,76);
+insert into t (id,a) values (288,77);
+insert into t (id,a) values (288,78);
+insert into t (id,a) values (288,79);
+insert into t (id,a) values (288,80);
+insert into t (id,a) values (288,81);
+insert into t (id,a) values (288,82);
+insert into t (id,a) values (288,83);
+insert into t (id,a) values (288,84);
+insert into t (id,a) values (288,85);
+insert into t (id,a) values (288,86);
+insert into t (id,a) values (288,87);
+insert into t (id,a) values (288,88);
+insert into t (id,a) values (288,89);
+insert into t (id,a) values (288,90);
+insert into t (id,a) values (288,91);
+insert into t (id,a) values (288,92);
+insert into t (id,a) values (288,93);
+insert into t (id,a) values (288,94);
+insert into t (id,a) values (288,95);
+insert into t (id,a) values (288,96);
+insert into t (id,a) values (288,97);
+insert into t (id,a) values (288,98);
+insert into t (id,a) values (288,99);
+insert into t (id,a) values (289,0);
+insert into t (id,a) values (289,1);
+insert into t (id,a) values (289,2);
+insert into t (id,a) values (289,3);
+insert into t (id,a) values (289,4);
+insert into t (id,a) values (289,5);
+insert into t (id,a) values (289,6);
+insert into t (id,a) values (289,7);
+insert into t (id,a) values (289,8);
+insert into t (id,a) values (289,9);
+insert into t (id,a) values (289,10);
+insert into t (id,a) values (289,11);
+insert into t (id,a) values (289,12);
+insert into t (id,a) values (289,13);
+insert into t (id,a) values (289,14);
+insert into t (id,a) values (289,15);
+insert into t (id,a) values (289,16);
+insert into t (id,a) values (289,17);
+insert into t (id,a) values (289,18);
+insert into t (id,a) values (289,19);
+insert into t (id,a) values (289,20);
+insert into t (id,a) values (289,21);
+insert into t (id,a) values (289,22);
+insert into t (id,a) values (289,23);
+insert into t (id,a) values (289,24);
+insert into t (id,a) values (289,25);
+insert into t (id,a) values (289,26);
+insert into t (id,a) values (289,27);
+insert into t (id,a) values (289,28);
+insert into t (id,a) values (289,29);
+insert into t (id,a) values (289,30);
+insert into t (id,a) values (289,31);
+insert into t (id,a) values (289,32);
+insert into t (id,a) values (289,33);
+insert into t (id,a) values (289,34);
+insert into t (id,a) values (289,35);
+insert into t (id,a) values (289,36);
+insert into t (id,a) values (289,37);
+insert into t (id,a) values (289,38);
+insert into t (id,a) values (289,39);
+insert into t (id,a) values (289,40);
+insert into t (id,a) values (289,41);
+insert into t (id,a) values (289,42);
+insert into t (id,a) values (289,43);
+insert into t (id,a) values (289,44);
+insert into t (id,a) values (289,45);
+insert into t (id,a) values (289,46);
+insert into t (id,a) values (289,47);
+insert into t (id,a) values (289,48);
+insert into t (id,a) values (289,49);
+insert into t (id,a) values (289,50);
+insert into t (id,a) values (289,51);
+insert into t (id,a) values (289,52);
+insert into t (id,a) values (289,53);
+insert into t (id,a) values (289,54);
+insert into t (id,a) values (289,55);
+insert into t (id,a) values (289,56);
+insert into t (id,a) values (289,57);
+insert into t (id,a) values (289,58);
+insert into t (id,a) values (289,59);
+insert into t (id,a) values (289,60);
+insert into t (id,a) values (289,61);
+insert into t (id,a) values (289,62);
+insert into t (id,a) values (289,63);
+insert into t (id,a) values (289,64);
+insert into t (id,a) values (289,65);
+insert into t (id,a) values (289,66);
+insert into t (id,a) values (289,67);
+insert into t (id,a) values (289,68);
+insert into t (id,a) values (289,69);
+insert into t (id,a) values (289,70);
+insert into t (id,a) values (289,71);
+insert into t (id,a) values (289,72);
+insert into t (id,a) values (289,73);
+insert into t (id,a) values (289,74);
+insert into t (id,a) values (289,75);
+insert into t (id,a) values (289,76);
+insert into t (id,a) values (289,77);
+insert into t (id,a) values (289,78);
+insert into t (id,a) values (289,79);
+insert into t (id,a) values (289,80);
+insert into t (id,a) values (289,81);
+insert into t (id,a) values (289,82);
+insert into t (id,a) values (289,83);
+insert into t (id,a) values (289,84);
+insert into t (id,a) values (289,85);
+insert into t (id,a) values (289,86);
+insert into t (id,a) values (289,87);
+insert into t (id,a) values (289,88);
+insert into t (id,a) values (289,89);
+insert into t (id,a) values (289,90);
+insert into t (id,a) values (289,91);
+insert into t (id,a) values (289,92);
+insert into t (id,a) values (289,93);
+insert into t (id,a) values (289,94);
+insert into t (id,a) values (289,95);
+insert into t (id,a) values (289,96);
+insert into t (id,a) values (289,97);
+insert into t (id,a) values (289,98);
+insert into t (id,a) values (289,99);
+insert into t (id,a) values (290,0);
+insert into t (id,a) values (290,1);
+insert into t (id,a) values (290,2);
+insert into t (id,a) values (290,3);
+insert into t (id,a) values (290,4);
+insert into t (id,a) values (290,5);
+insert into t (id,a) values (290,6);
+insert into t (id,a) values (290,7);
+insert into t (id,a) values (290,8);
+insert into t (id,a) values (290,9);
+insert into t (id,a) values (290,10);
+insert into t (id,a) values (290,11);
+insert into t (id,a) values (290,12);
+insert into t (id,a) values (290,13);
+insert into t (id,a) values (290,14);
+insert into t (id,a) values (290,15);
+insert into t (id,a) values (290,16);
+insert into t (id,a) values (290,17);
+insert into t (id,a) values (290,18);
+insert into t (id,a) values (290,19);
+insert into t (id,a) values (290,20);
+insert into t (id,a) values (290,21);
+insert into t (id,a) values (290,22);
+insert into t (id,a) values (290,23);
+insert into t (id,a) values (290,24);
+insert into t (id,a) values (290,25);
+insert into t (id,a) values (290,26);
+insert into t (id,a) values (290,27);
+insert into t (id,a) values (290,28);
+insert into t (id,a) values (290,29);
+insert into t (id,a) values (290,30);
+insert into t (id,a) values (290,31);
+insert into t (id,a) values (290,32);
+insert into t (id,a) values (290,33);
+insert into t (id,a) values (290,34);
+insert into t (id,a) values (290,35);
+insert into t (id,a) values (290,36);
+insert into t (id,a) values (290,37);
+insert into t (id,a) values (290,38);
+insert into t (id,a) values (290,39);
+insert into t (id,a) values (290,40);
+insert into t (id,a) values (290,41);
+insert into t (id,a) values (290,42);
+insert into t (id,a) values (290,43);
+insert into t (id,a) values (290,44);
+insert into t (id,a) values (290,45);
+insert into t (id,a) values (290,46);
+insert into t (id,a) values (290,47);
+insert into t (id,a) values (290,48);
+insert into t (id,a) values (290,49);
+insert into t (id,a) values (290,50);
+insert into t (id,a) values (290,51);
+insert into t (id,a) values (290,52);
+insert into t (id,a) values (290,53);
+insert into t (id,a) values (290,54);
+insert into t (id,a) values (290,55);
+insert into t (id,a) values (290,56);
+insert into t (id,a) values (290,57);
+insert into t (id,a) values (290,58);
+insert into t (id,a) values (290,59);
+insert into t (id,a) values (290,60);
+insert into t (id,a) values (290,61);
+insert into t (id,a) values (290,62);
+insert into t (id,a) values (290,63);
+insert into t (id,a) values (290,64);
+insert into t (id,a) values (290,65);
+insert into t (id,a) values (290,66);
+insert into t (id,a) values (290,67);
+insert into t (id,a) values (290,68);
+insert into t (id,a) values (290,69);
+insert into t (id,a) values (290,70);
+insert into t (id,a) values (290,71);
+insert into t (id,a) values (290,72);
+insert into t (id,a) values (290,73);
+insert into t (id,a) values (290,74);
+insert into t (id,a) values (290,75);
+insert into t (id,a) values (290,76);
+insert into t (id,a) values (290,77);
+insert into t (id,a) values (290,78);
+insert into t (id,a) values (290,79);
+insert into t (id,a) values (290,80);
+insert into t (id,a) values (290,81);
+insert into t (id,a) values (290,82);
+insert into t (id,a) values (290,83);
+insert into t (id,a) values (290,84);
+insert into t (id,a) values (290,85);
+insert into t (id,a) values (290,86);
+insert into t (id,a) values (290,87);
+insert into t (id,a) values (290,88);
+insert into t (id,a) values (290,89);
+insert into t (id,a) values (290,90);
+insert into t (id,a) values (290,91);
+insert into t (id,a) values (290,92);
+insert into t (id,a) values (290,93);
+insert into t (id,a) values (290,94);
+insert into t (id,a) values (290,95);
+insert into t (id,a) values (290,96);
+insert into t (id,a) values (290,97);
+insert into t (id,a) values (290,98);
+insert into t (id,a) values (290,99);
+insert into t (id,a) values (291,0);
+insert into t (id,a) values (291,1);
+insert into t (id,a) values (291,2);
+insert into t (id,a) values (291,3);
+insert into t (id,a) values (291,4);
+insert into t (id,a) values (291,5);
+insert into t (id,a) values (291,6);
+insert into t (id,a) values (291,7);
+insert into t (id,a) values (291,8);
+insert into t (id,a) values (291,9);
+insert into t (id,a) values (291,10);
+insert into t (id,a) values (291,11);
+insert into t (id,a) values (291,12);
+insert into t (id,a) values (291,13);
+insert into t (id,a) values (291,14);
+insert into t (id,a) values (291,15);
+insert into t (id,a) values (291,16);
+insert into t (id,a) values (291,17);
+insert into t (id,a) values (291,18);
+insert into t (id,a) values (291,19);
+insert into t (id,a) values (291,20);
+insert into t (id,a) values (291,21);
+insert into t (id,a) values (291,22);
+insert into t (id,a) values (291,23);
+insert into t (id,a) values (291,24);
+insert into t (id,a) values (291,25);
+insert into t (id,a) values (291,26);
+insert into t (id,a) values (291,27);
+insert into t (id,a) values (291,28);
+insert into t (id,a) values (291,29);
+insert into t (id,a) values (291,30);
+insert into t (id,a) values (291,31);
+insert into t (id,a) values (291,32);
+insert into t (id,a) values (291,33);
+insert into t (id,a) values (291,34);
+insert into t (id,a) values (291,35);
+insert into t (id,a) values (291,36);
+insert into t (id,a) values (291,37);
+insert into t (id,a) values (291,38);
+insert into t (id,a) values (291,39);
+insert into t (id,a) values (291,40);
+insert into t (id,a) values (291,41);
+insert into t (id,a) values (291,42);
+insert into t (id,a) values (291,43);
+insert into t (id,a) values (291,44);
+insert into t (id,a) values (291,45);
+insert into t (id,a) values (291,46);
+insert into t (id,a) values (291,47);
+insert into t (id,a) values (291,48);
+insert into t (id,a) values (291,49);
+insert into t (id,a) values (291,50);
+insert into t (id,a) values (291,51);
+insert into t (id,a) values (291,52);
+insert into t (id,a) values (291,53);
+insert into t (id,a) values (291,54);
+insert into t (id,a) values (291,55);
+insert into t (id,a) values (291,56);
+insert into t (id,a) values (291,57);
+insert into t (id,a) values (291,58);
+insert into t (id,a) values (291,59);
+insert into t (id,a) values (291,60);
+insert into t (id,a) values (291,61);
+insert into t (id,a) values (291,62);
+insert into t (id,a) values (291,63);
+insert into t (id,a) values (291,64);
+insert into t (id,a) values (291,65);
+insert into t (id,a) values (291,66);
+insert into t (id,a) values (291,67);
+insert into t (id,a) values (291,68);
+insert into t (id,a) values (291,69);
+insert into t (id,a) values (291,70);
+insert into t (id,a) values (291,71);
+insert into t (id,a) values (291,72);
+insert into t (id,a) values (291,73);
+insert into t (id,a) values (291,74);
+insert into t (id,a) values (291,75);
+insert into t (id,a) values (291,76);
+insert into t (id,a) values (291,77);
+insert into t (id,a) values (291,78);
+insert into t (id,a) values (291,79);
+insert into t (id,a) values (291,80);
+insert into t (id,a) values (291,81);
+insert into t (id,a) values (291,82);
+insert into t (id,a) values (291,83);
+insert into t (id,a) values (291,84);
+insert into t (id,a) values (291,85);
+insert into t (id,a) values (291,86);
+insert into t (id,a) values (291,87);
+insert into t (id,a) values (291,88);
+insert into t (id,a) values (291,89);
+insert into t (id,a) values (291,90);
+insert into t (id,a) values (291,91);
+insert into t (id,a) values (291,92);
+insert into t (id,a) values (291,93);
+insert into t (id,a) values (291,94);
+insert into t (id,a) values (291,95);
+insert into t (id,a) values (291,96);
+insert into t (id,a) values (291,97);
+insert into t (id,a) values (291,98);
+insert into t (id,a) values (291,99);
+insert into t (id,a) values (292,0);
+insert into t (id,a) values (292,1);
+insert into t (id,a) values (292,2);
+insert into t (id,a) values (292,3);
+insert into t (id,a) values (292,4);
+insert into t (id,a) values (292,5);
+insert into t (id,a) values (292,6);
+insert into t (id,a) values (292,7);
+insert into t (id,a) values (292,8);
+insert into t (id,a) values (292,9);
+insert into t (id,a) values (292,10);
+insert into t (id,a) values (292,11);
+insert into t (id,a) values (292,12);
+insert into t (id,a) values (292,13);
+insert into t (id,a) values (292,14);
+insert into t (id,a) values (292,15);
+insert into t (id,a) values (292,16);
+insert into t (id,a) values (292,17);
+insert into t (id,a) values (292,18);
+insert into t (id,a) values (292,19);
+insert into t (id,a) values (292,20);
+insert into t (id,a) values (292,21);
+insert into t (id,a) values (292,22);
+insert into t (id,a) values (292,23);
+insert into t (id,a) values (292,24);
+insert into t (id,a) values (292,25);
+insert into t (id,a) values (292,26);
+insert into t (id,a) values (292,27);
+insert into t (id,a) values (292,28);
+insert into t (id,a) values (292,29);
+insert into t (id,a) values (292,30);
+insert into t (id,a) values (292,31);
+insert into t (id,a) values (292,32);
+insert into t (id,a) values (292,33);
+insert into t (id,a) values (292,34);
+insert into t (id,a) values (292,35);
+insert into t (id,a) values (292,36);
+insert into t (id,a) values (292,37);
+insert into t (id,a) values (292,38);
+insert into t (id,a) values (292,39);
+insert into t (id,a) values (292,40);
+insert into t (id,a) values (292,41);
+insert into t (id,a) values (292,42);
+insert into t (id,a) values (292,43);
+insert into t (id,a) values (292,44);
+insert into t (id,a) values (292,45);
+insert into t (id,a) values (292,46);
+insert into t (id,a) values (292,47);
+insert into t (id,a) values (292,48);
+insert into t (id,a) values (292,49);
+insert into t (id,a) values (292,50);
+insert into t (id,a) values (292,51);
+insert into t (id,a) values (292,52);
+insert into t (id,a) values (292,53);
+insert into t (id,a) values (292,54);
+insert into t (id,a) values (292,55);
+insert into t (id,a) values (292,56);
+insert into t (id,a) values (292,57);
+insert into t (id,a) values (292,58);
+insert into t (id,a) values (292,59);
+insert into t (id,a) values (292,60);
+insert into t (id,a) values (292,61);
+insert into t (id,a) values (292,62);
+insert into t (id,a) values (292,63);
+insert into t (id,a) values (292,64);
+insert into t (id,a) values (292,65);
+insert into t (id,a) values (292,66);
+insert into t (id,a) values (292,67);
+insert into t (id,a) values (292,68);
+insert into t (id,a) values (292,69);
+insert into t (id,a) values (292,70);
+insert into t (id,a) values (292,71);
+insert into t (id,a) values (292,72);
+insert into t (id,a) values (292,73);
+insert into t (id,a) values (292,74);
+insert into t (id,a) values (292,75);
+insert into t (id,a) values (292,76);
+insert into t (id,a) values (292,77);
+insert into t (id,a) values (292,78);
+insert into t (id,a) values (292,79);
+insert into t (id,a) values (292,80);
+insert into t (id,a) values (292,81);
+insert into t (id,a) values (292,82);
+insert into t (id,a) values (292,83);
+insert into t (id,a) values (292,84);
+insert into t (id,a) values (292,85);
+insert into t (id,a) values (292,86);
+insert into t (id,a) values (292,87);
+insert into t (id,a) values (292,88);
+insert into t (id,a) values (292,89);
+insert into t (id,a) values (292,90);
+insert into t (id,a) values (292,91);
+insert into t (id,a) values (292,92);
+insert into t (id,a) values (292,93);
+insert into t (id,a) values (292,94);
+insert into t (id,a) values (292,95);
+insert into t (id,a) values (292,96);
+insert into t (id,a) values (292,97);
+insert into t (id,a) values (292,98);
+insert into t (id,a) values (292,99);
+insert into t (id,a) values (293,0);
+insert into t (id,a) values (293,1);
+insert into t (id,a) values (293,2);
+insert into t (id,a) values (293,3);
+insert into t (id,a) values (293,4);
+insert into t (id,a) values (293,5);
+insert into t (id,a) values (293,6);
+insert into t (id,a) values (293,7);
+insert into t (id,a) values (293,8);
+insert into t (id,a) values (293,9);
+insert into t (id,a) values (293,10);
+insert into t (id,a) values (293,11);
+insert into t (id,a) values (293,12);
+insert into t (id,a) values (293,13);
+insert into t (id,a) values (293,14);
+insert into t (id,a) values (293,15);
+insert into t (id,a) values (293,16);
+insert into t (id,a) values (293,17);
+insert into t (id,a) values (293,18);
+insert into t (id,a) values (293,19);
+insert into t (id,a) values (293,20);
+insert into t (id,a) values (293,21);
+insert into t (id,a) values (293,22);
+insert into t (id,a) values (293,23);
+insert into t (id,a) values (293,24);
+insert into t (id,a) values (293,25);
+insert into t (id,a) values (293,26);
+insert into t (id,a) values (293,27);
+insert into t (id,a) values (293,28);
+insert into t (id,a) values (293,29);
+insert into t (id,a) values (293,30);
+insert into t (id,a) values (293,31);
+insert into t (id,a) values (293,32);
+insert into t (id,a) values (293,33);
+insert into t (id,a) values (293,34);
+insert into t (id,a) values (293,35);
+insert into t (id,a) values (293,36);
+insert into t (id,a) values (293,37);
+insert into t (id,a) values (293,38);
+insert into t (id,a) values (293,39);
+insert into t (id,a) values (293,40);
+insert into t (id,a) values (293,41);
+insert into t (id,a) values (293,42);
+insert into t (id,a) values (293,43);
+insert into t (id,a) values (293,44);
+insert into t (id,a) values (293,45);
+insert into t (id,a) values (293,46);
+insert into t (id,a) values (293,47);
+insert into t (id,a) values (293,48);
+insert into t (id,a) values (293,49);
+insert into t (id,a) values (293,50);
+insert into t (id,a) values (293,51);
+insert into t (id,a) values (293,52);
+insert into t (id,a) values (293,53);
+insert into t (id,a) values (293,54);
+insert into t (id,a) values (293,55);
+insert into t (id,a) values (293,56);
+insert into t (id,a) values (293,57);
+insert into t (id,a) values (293,58);
+insert into t (id,a) values (293,59);
+insert into t (id,a) values (293,60);
+insert into t (id,a) values (293,61);
+insert into t (id,a) values (293,62);
+insert into t (id,a) values (293,63);
+insert into t (id,a) values (293,64);
+insert into t (id,a) values (293,65);
+insert into t (id,a) values (293,66);
+insert into t (id,a) values (293,67);
+insert into t (id,a) values (293,68);
+insert into t (id,a) values (293,69);
+insert into t (id,a) values (293,70);
+insert into t (id,a) values (293,71);
+insert into t (id,a) values (293,72);
+insert into t (id,a) values (293,73);
+insert into t (id,a) values (293,74);
+insert into t (id,a) values (293,75);
+insert into t (id,a) values (293,76);
+insert into t (id,a) values (293,77);
+insert into t (id,a) values (293,78);
+insert into t (id,a) values (293,79);
+insert into t (id,a) values (293,80);
+insert into t (id,a) values (293,81);
+insert into t (id,a) values (293,82);
+insert into t (id,a) values (293,83);
+insert into t (id,a) values (293,84);
+insert into t (id,a) values (293,85);
+insert into t (id,a) values (293,86);
+insert into t (id,a) values (293,87);
+insert into t (id,a) values (293,88);
+insert into t (id,a) values (293,89);
+insert into t (id,a) values (293,90);
+insert into t (id,a) values (293,91);
+insert into t (id,a) values (293,92);
+insert into t (id,a) values (293,93);
+insert into t (id,a) values (293,94);
+insert into t (id,a) values (293,95);
+insert into t (id,a) values (293,96);
+insert into t (id,a) values (293,97);
+insert into t (id,a) values (293,98);
+insert into t (id,a) values (293,99);
+insert into t (id,a) values (294,0);
+insert into t (id,a) values (294,1);
+insert into t (id,a) values (294,2);
+insert into t (id,a) values (294,3);
+insert into t (id,a) values (294,4);
+insert into t (id,a) values (294,5);
+insert into t (id,a) values (294,6);
+insert into t (id,a) values (294,7);
+insert into t (id,a) values (294,8);
+insert into t (id,a) values (294,9);
+insert into t (id,a) values (294,10);
+insert into t (id,a) values (294,11);
+insert into t (id,a) values (294,12);
+insert into t (id,a) values (294,13);
+insert into t (id,a) values (294,14);
+insert into t (id,a) values (294,15);
+insert into t (id,a) values (294,16);
+insert into t (id,a) values (294,17);
+insert into t (id,a) values (294,18);
+insert into t (id,a) values (294,19);
+insert into t (id,a) values (294,20);
+insert into t (id,a) values (294,21);
+insert into t (id,a) values (294,22);
+insert into t (id,a) values (294,23);
+insert into t (id,a) values (294,24);
+insert into t (id,a) values (294,25);
+insert into t (id,a) values (294,26);
+insert into t (id,a) values (294,27);
+insert into t (id,a) values (294,28);
+insert into t (id,a) values (294,29);
+insert into t (id,a) values (294,30);
+insert into t (id,a) values (294,31);
+insert into t (id,a) values (294,32);
+insert into t (id,a) values (294,33);
+insert into t (id,a) values (294,34);
+insert into t (id,a) values (294,35);
+insert into t (id,a) values (294,36);
+insert into t (id,a) values (294,37);
+insert into t (id,a) values (294,38);
+insert into t (id,a) values (294,39);
+insert into t (id,a) values (294,40);
+insert into t (id,a) values (294,41);
+insert into t (id,a) values (294,42);
+insert into t (id,a) values (294,43);
+insert into t (id,a) values (294,44);
+insert into t (id,a) values (294,45);
+insert into t (id,a) values (294,46);
+insert into t (id,a) values (294,47);
+insert into t (id,a) values (294,48);
+insert into t (id,a) values (294,49);
+insert into t (id,a) values (294,50);
+insert into t (id,a) values (294,51);
+insert into t (id,a) values (294,52);
+insert into t (id,a) values (294,53);
+insert into t (id,a) values (294,54);
+insert into t (id,a) values (294,55);
+insert into t (id,a) values (294,56);
+insert into t (id,a) values (294,57);
+insert into t (id,a) values (294,58);
+insert into t (id,a) values (294,59);
+insert into t (id,a) values (294,60);
+insert into t (id,a) values (294,61);
+insert into t (id,a) values (294,62);
+insert into t (id,a) values (294,63);
+insert into t (id,a) values (294,64);
+insert into t (id,a) values (294,65);
+insert into t (id,a) values (294,66);
+insert into t (id,a) values (294,67);
+insert into t (id,a) values (294,68);
+insert into t (id,a) values (294,69);
+insert into t (id,a) values (294,70);
+insert into t (id,a) values (294,71);
+insert into t (id,a) values (294,72);
+insert into t (id,a) values (294,73);
+insert into t (id,a) values (294,74);
+insert into t (id,a) values (294,75);
+insert into t (id,a) values (294,76);
+insert into t (id,a) values (294,77);
+insert into t (id,a) values (294,78);
+insert into t (id,a) values (294,79);
+insert into t (id,a) values (294,80);
+insert into t (id,a) values (294,81);
+insert into t (id,a) values (294,82);
+insert into t (id,a) values (294,83);
+insert into t (id,a) values (294,84);
+insert into t (id,a) values (294,85);
+insert into t (id,a) values (294,86);
+insert into t (id,a) values (294,87);
+insert into t (id,a) values (294,88);
+insert into t (id,a) values (294,89);
+insert into t (id,a) values (294,90);
+insert into t (id,a) values (294,91);
+insert into t (id,a) values (294,92);
+insert into t (id,a) values (294,93);
+insert into t (id,a) values (294,94);
+insert into t (id,a) values (294,95);
+insert into t (id,a) values (294,96);
+insert into t (id,a) values (294,97);
+insert into t (id,a) values (294,98);
+insert into t (id,a) values (294,99);
+insert into t (id,a) values (295,0);
+insert into t (id,a) values (295,1);
+insert into t (id,a) values (295,2);
+insert into t (id,a) values (295,3);
+insert into t (id,a) values (295,4);
+insert into t (id,a) values (295,5);
+insert into t (id,a) values (295,6);
+insert into t (id,a) values (295,7);
+insert into t (id,a) values (295,8);
+insert into t (id,a) values (295,9);
+insert into t (id,a) values (295,10);
+insert into t (id,a) values (295,11);
+insert into t (id,a) values (295,12);
+insert into t (id,a) values (295,13);
+insert into t (id,a) values (295,14);
+insert into t (id,a) values (295,15);
+insert into t (id,a) values (295,16);
+insert into t (id,a) values (295,17);
+insert into t (id,a) values (295,18);
+insert into t (id,a) values (295,19);
+insert into t (id,a) values (295,20);
+insert into t (id,a) values (295,21);
+insert into t (id,a) values (295,22);
+insert into t (id,a) values (295,23);
+insert into t (id,a) values (295,24);
+insert into t (id,a) values (295,25);
+insert into t (id,a) values (295,26);
+insert into t (id,a) values (295,27);
+insert into t (id,a) values (295,28);
+insert into t (id,a) values (295,29);
+insert into t (id,a) values (295,30);
+insert into t (id,a) values (295,31);
+insert into t (id,a) values (295,32);
+insert into t (id,a) values (295,33);
+insert into t (id,a) values (295,34);
+insert into t (id,a) values (295,35);
+insert into t (id,a) values (295,36);
+insert into t (id,a) values (295,37);
+insert into t (id,a) values (295,38);
+insert into t (id,a) values (295,39);
+insert into t (id,a) values (295,40);
+insert into t (id,a) values (295,41);
+insert into t (id,a) values (295,42);
+insert into t (id,a) values (295,43);
+insert into t (id,a) values (295,44);
+insert into t (id,a) values (295,45);
+insert into t (id,a) values (295,46);
+insert into t (id,a) values (295,47);
+insert into t (id,a) values (295,48);
+insert into t (id,a) values (295,49);
+insert into t (id,a) values (295,50);
+insert into t (id,a) values (295,51);
+insert into t (id,a) values (295,52);
+insert into t (id,a) values (295,53);
+insert into t (id,a) values (295,54);
+insert into t (id,a) values (295,55);
+insert into t (id,a) values (295,56);
+insert into t (id,a) values (295,57);
+insert into t (id,a) values (295,58);
+insert into t (id,a) values (295,59);
+insert into t (id,a) values (295,60);
+insert into t (id,a) values (295,61);
+insert into t (id,a) values (295,62);
+insert into t (id,a) values (295,63);
+insert into t (id,a) values (295,64);
+insert into t (id,a) values (295,65);
+insert into t (id,a) values (295,66);
+insert into t (id,a) values (295,67);
+insert into t (id,a) values (295,68);
+insert into t (id,a) values (295,69);
+insert into t (id,a) values (295,70);
+insert into t (id,a) values (295,71);
+insert into t (id,a) values (295,72);
+insert into t (id,a) values (295,73);
+insert into t (id,a) values (295,74);
+insert into t (id,a) values (295,75);
+insert into t (id,a) values (295,76);
+insert into t (id,a) values (295,77);
+insert into t (id,a) values (295,78);
+insert into t (id,a) values (295,79);
+insert into t (id,a) values (295,80);
+insert into t (id,a) values (295,81);
+insert into t (id,a) values (295,82);
+insert into t (id,a) values (295,83);
+insert into t (id,a) values (295,84);
+insert into t (id,a) values (295,85);
+insert into t (id,a) values (295,86);
+insert into t (id,a) values (295,87);
+insert into t (id,a) values (295,88);
+insert into t (id,a) values (295,89);
+insert into t (id,a) values (295,90);
+insert into t (id,a) values (295,91);
+insert into t (id,a) values (295,92);
+insert into t (id,a) values (295,93);
+insert into t (id,a) values (295,94);
+insert into t (id,a) values (295,95);
+insert into t (id,a) values (295,96);
+insert into t (id,a) values (295,97);
+insert into t (id,a) values (295,98);
+insert into t (id,a) values (295,99);
+insert into t (id,a) values (296,0);
+insert into t (id,a) values (296,1);
+insert into t (id,a) values (296,2);
+insert into t (id,a) values (296,3);
+insert into t (id,a) values (296,4);
+insert into t (id,a) values (296,5);
+insert into t (id,a) values (296,6);
+insert into t (id,a) values (296,7);
+insert into t (id,a) values (296,8);
+insert into t (id,a) values (296,9);
+insert into t (id,a) values (296,10);
+insert into t (id,a) values (296,11);
+insert into t (id,a) values (296,12);
+insert into t (id,a) values (296,13);
+insert into t (id,a) values (296,14);
+insert into t (id,a) values (296,15);
+insert into t (id,a) values (296,16);
+insert into t (id,a) values (296,17);
+insert into t (id,a) values (296,18);
+insert into t (id,a) values (296,19);
+insert into t (id,a) values (296,20);
+insert into t (id,a) values (296,21);
+insert into t (id,a) values (296,22);
+insert into t (id,a) values (296,23);
+insert into t (id,a) values (296,24);
+insert into t (id,a) values (296,25);
+insert into t (id,a) values (296,26);
+insert into t (id,a) values (296,27);
+insert into t (id,a) values (296,28);
+insert into t (id,a) values (296,29);
+insert into t (id,a) values (296,30);
+insert into t (id,a) values (296,31);
+insert into t (id,a) values (296,32);
+insert into t (id,a) values (296,33);
+insert into t (id,a) values (296,34);
+insert into t (id,a) values (296,35);
+insert into t (id,a) values (296,36);
+insert into t (id,a) values (296,37);
+insert into t (id,a) values (296,38);
+insert into t (id,a) values (296,39);
+insert into t (id,a) values (296,40);
+insert into t (id,a) values (296,41);
+insert into t (id,a) values (296,42);
+insert into t (id,a) values (296,43);
+insert into t (id,a) values (296,44);
+insert into t (id,a) values (296,45);
+insert into t (id,a) values (296,46);
+insert into t (id,a) values (296,47);
+insert into t (id,a) values (296,48);
+insert into t (id,a) values (296,49);
+insert into t (id,a) values (296,50);
+insert into t (id,a) values (296,51);
+insert into t (id,a) values (296,52);
+insert into t (id,a) values (296,53);
+insert into t (id,a) values (296,54);
+insert into t (id,a) values (296,55);
+insert into t (id,a) values (296,56);
+insert into t (id,a) values (296,57);
+insert into t (id,a) values (296,58);
+insert into t (id,a) values (296,59);
+insert into t (id,a) values (296,60);
+insert into t (id,a) values (296,61);
+insert into t (id,a) values (296,62);
+insert into t (id,a) values (296,63);
+insert into t (id,a) values (296,64);
+insert into t (id,a) values (296,65);
+insert into t (id,a) values (296,66);
+insert into t (id,a) values (296,67);
+insert into t (id,a) values (296,68);
+insert into t (id,a) values (296,69);
+insert into t (id,a) values (296,70);
+insert into t (id,a) values (296,71);
+insert into t (id,a) values (296,72);
+insert into t (id,a) values (296,73);
+insert into t (id,a) values (296,74);
+insert into t (id,a) values (296,75);
+insert into t (id,a) values (296,76);
+insert into t (id,a) values (296,77);
+insert into t (id,a) values (296,78);
+insert into t (id,a) values (296,79);
+insert into t (id,a) values (296,80);
+insert into t (id,a) values (296,81);
+insert into t (id,a) values (296,82);
+insert into t (id,a) values (296,83);
+insert into t (id,a) values (296,84);
+insert into t (id,a) values (296,85);
+insert into t (id,a) values (296,86);
+insert into t (id,a) values (296,87);
+insert into t (id,a) values (296,88);
+insert into t (id,a) values (296,89);
+insert into t (id,a) values (296,90);
+insert into t (id,a) values (296,91);
+insert into t (id,a) values (296,92);
+insert into t (id,a) values (296,93);
+insert into t (id,a) values (296,94);
+insert into t (id,a) values (296,95);
+insert into t (id,a) values (296,96);
+insert into t (id,a) values (296,97);
+insert into t (id,a) values (296,98);
+insert into t (id,a) values (296,99);
+insert into t (id,a) values (297,0);
+insert into t (id,a) values (297,1);
+insert into t (id,a) values (297,2);
+insert into t (id,a) values (297,3);
+insert into t (id,a) values (297,4);
+insert into t (id,a) values (297,5);
+insert into t (id,a) values (297,6);
+insert into t (id,a) values (297,7);
+insert into t (id,a) values (297,8);
+insert into t (id,a) values (297,9);
+insert into t (id,a) values (297,10);
+insert into t (id,a) values (297,11);
+insert into t (id,a) values (297,12);
+insert into t (id,a) values (297,13);
+insert into t (id,a) values (297,14);
+insert into t (id,a) values (297,15);
+insert into t (id,a) values (297,16);
+insert into t (id,a) values (297,17);
+insert into t (id,a) values (297,18);
+insert into t (id,a) values (297,19);
+insert into t (id,a) values (297,20);
+insert into t (id,a) values (297,21);
+insert into t (id,a) values (297,22);
+insert into t (id,a) values (297,23);
+insert into t (id,a) values (297,24);
+insert into t (id,a) values (297,25);
+insert into t (id,a) values (297,26);
+insert into t (id,a) values (297,27);
+insert into t (id,a) values (297,28);
+insert into t (id,a) values (297,29);
+insert into t (id,a) values (297,30);
+insert into t (id,a) values (297,31);
+insert into t (id,a) values (297,32);
+insert into t (id,a) values (297,33);
+insert into t (id,a) values (297,34);
+insert into t (id,a) values (297,35);
+insert into t (id,a) values (297,36);
+insert into t (id,a) values (297,37);
+insert into t (id,a) values (297,38);
+insert into t (id,a) values (297,39);
+insert into t (id,a) values (297,40);
+insert into t (id,a) values (297,41);
+insert into t (id,a) values (297,42);
+insert into t (id,a) values (297,43);
+insert into t (id,a) values (297,44);
+insert into t (id,a) values (297,45);
+insert into t (id,a) values (297,46);
+insert into t (id,a) values (297,47);
+insert into t (id,a) values (297,48);
+insert into t (id,a) values (297,49);
+insert into t (id,a) values (297,50);
+insert into t (id,a) values (297,51);
+insert into t (id,a) values (297,52);
+insert into t (id,a) values (297,53);
+insert into t (id,a) values (297,54);
+insert into t (id,a) values (297,55);
+insert into t (id,a) values (297,56);
+insert into t (id,a) values (297,57);
+insert into t (id,a) values (297,58);
+insert into t (id,a) values (297,59);
+insert into t (id,a) values (297,60);
+insert into t (id,a) values (297,61);
+insert into t (id,a) values (297,62);
+insert into t (id,a) values (297,63);
+insert into t (id,a) values (297,64);
+insert into t (id,a) values (297,65);
+insert into t (id,a) values (297,66);
+insert into t (id,a) values (297,67);
+insert into t (id,a) values (297,68);
+insert into t (id,a) values (297,69);
+insert into t (id,a) values (297,70);
+insert into t (id,a) values (297,71);
+insert into t (id,a) values (297,72);
+insert into t (id,a) values (297,73);
+insert into t (id,a) values (297,74);
+insert into t (id,a) values (297,75);
+insert into t (id,a) values (297,76);
+insert into t (id,a) values (297,77);
+insert into t (id,a) values (297,78);
+insert into t (id,a) values (297,79);
+insert into t (id,a) values (297,80);
+insert into t (id,a) values (297,81);
+insert into t (id,a) values (297,82);
+insert into t (id,a) values (297,83);
+insert into t (id,a) values (297,84);
+insert into t (id,a) values (297,85);
+insert into t (id,a) values (297,86);
+insert into t (id,a) values (297,87);
+insert into t (id,a) values (297,88);
+insert into t (id,a) values (297,89);
+insert into t (id,a) values (297,90);
+insert into t (id,a) values (297,91);
+insert into t (id,a) values (297,92);
+insert into t (id,a) values (297,93);
+insert into t (id,a) values (297,94);
+insert into t (id,a) values (297,95);
+insert into t (id,a) values (297,96);
+insert into t (id,a) values (297,97);
+insert into t (id,a) values (297,98);
+insert into t (id,a) values (297,99);
+insert into t (id,a) values (298,0);
+insert into t (id,a) values (298,1);
+insert into t (id,a) values (298,2);
+insert into t (id,a) values (298,3);
+insert into t (id,a) values (298,4);
+insert into t (id,a) values (298,5);
+insert into t (id,a) values (298,6);
+insert into t (id,a) values (298,7);
+insert into t (id,a) values (298,8);
+insert into t (id,a) values (298,9);
+insert into t (id,a) values (298,10);
+insert into t (id,a) values (298,11);
+insert into t (id,a) values (298,12);
+insert into t (id,a) values (298,13);
+insert into t (id,a) values (298,14);
+insert into t (id,a) values (298,15);
+insert into t (id,a) values (298,16);
+insert into t (id,a) values (298,17);
+insert into t (id,a) values (298,18);
+insert into t (id,a) values (298,19);
+insert into t (id,a) values (298,20);
+insert into t (id,a) values (298,21);
+insert into t (id,a) values (298,22);
+insert into t (id,a) values (298,23);
+insert into t (id,a) values (298,24);
+insert into t (id,a) values (298,25);
+insert into t (id,a) values (298,26);
+insert into t (id,a) values (298,27);
+insert into t (id,a) values (298,28);
+insert into t (id,a) values (298,29);
+insert into t (id,a) values (298,30);
+insert into t (id,a) values (298,31);
+insert into t (id,a) values (298,32);
+insert into t (id,a) values (298,33);
+insert into t (id,a) values (298,34);
+insert into t (id,a) values (298,35);
+insert into t (id,a) values (298,36);
+insert into t (id,a) values (298,37);
+insert into t (id,a) values (298,38);
+insert into t (id,a) values (298,39);
+insert into t (id,a) values (298,40);
+insert into t (id,a) values (298,41);
+insert into t (id,a) values (298,42);
+insert into t (id,a) values (298,43);
+insert into t (id,a) values (298,44);
+insert into t (id,a) values (298,45);
+insert into t (id,a) values (298,46);
+insert into t (id,a) values (298,47);
+insert into t (id,a) values (298,48);
+insert into t (id,a) values (298,49);
+insert into t (id,a) values (298,50);
+insert into t (id,a) values (298,51);
+insert into t (id,a) values (298,52);
+insert into t (id,a) values (298,53);
+insert into t (id,a) values (298,54);
+insert into t (id,a) values (298,55);
+insert into t (id,a) values (298,56);
+insert into t (id,a) values (298,57);
+insert into t (id,a) values (298,58);
+insert into t (id,a) values (298,59);
+insert into t (id,a) values (298,60);
+insert into t (id,a) values (298,61);
+insert into t (id,a) values (298,62);
+insert into t (id,a) values (298,63);
+insert into t (id,a) values (298,64);
+insert into t (id,a) values (298,65);
+insert into t (id,a) values (298,66);
+insert into t (id,a) values (298,67);
+insert into t (id,a) values (298,68);
+insert into t (id,a) values (298,69);
+insert into t (id,a) values (298,70);
+insert into t (id,a) values (298,71);
+insert into t (id,a) values (298,72);
+insert into t (id,a) values (298,73);
+insert into t (id,a) values (298,74);
+insert into t (id,a) values (298,75);
+insert into t (id,a) values (298,76);
+insert into t (id,a) values (298,77);
+insert into t (id,a) values (298,78);
+insert into t (id,a) values (298,79);
+insert into t (id,a) values (298,80);
+insert into t (id,a) values (298,81);
+insert into t (id,a) values (298,82);
+insert into t (id,a) values (298,83);
+insert into t (id,a) values (298,84);
+insert into t (id,a) values (298,85);
+insert into t (id,a) values (298,86);
+insert into t (id,a) values (298,87);
+insert into t (id,a) values (298,88);
+insert into t (id,a) values (298,89);
+insert into t (id,a) values (298,90);
+insert into t (id,a) values (298,91);
+insert into t (id,a) values (298,92);
+insert into t (id,a) values (298,93);
+insert into t (id,a) values (298,94);
+insert into t (id,a) values (298,95);
+insert into t (id,a) values (298,96);
+insert into t (id,a) values (298,97);
+insert into t (id,a) values (298,98);
+insert into t (id,a) values (298,99);
+insert into t (id,a) values (299,0);
+insert into t (id,a) values (299,1);
+insert into t (id,a) values (299,2);
+insert into t (id,a) values (299,3);
+insert into t (id,a) values (299,4);
+insert into t (id,a) values (299,5);
+insert into t (id,a) values (299,6);
+insert into t (id,a) values (299,7);
+insert into t (id,a) values (299,8);
+insert into t (id,a) values (299,9);
+insert into t (id,a) values (299,10);
+insert into t (id,a) values (299,11);
+insert into t (id,a) values (299,12);
+insert into t (id,a) values (299,13);
+insert into t (id,a) values (299,14);
+insert into t (id,a) values (299,15);
+insert into t (id,a) values (299,16);
+insert into t (id,a) values (299,17);
+insert into t (id,a) values (299,18);
+insert into t (id,a) values (299,19);
+insert into t (id,a) values (299,20);
+insert into t (id,a) values (299,21);
+insert into t (id,a) values (299,22);
+insert into t (id,a) values (299,23);
+insert into t (id,a) values (299,24);
+insert into t (id,a) values (299,25);
+insert into t (id,a) values (299,26);
+insert into t (id,a) values (299,27);
+insert into t (id,a) values (299,28);
+insert into t (id,a) values (299,29);
+insert into t (id,a) values (299,30);
+insert into t (id,a) values (299,31);
+insert into t (id,a) values (299,32);
+insert into t (id,a) values (299,33);
+insert into t (id,a) values (299,34);
+insert into t (id,a) values (299,35);
+insert into t (id,a) values (299,36);
+insert into t (id,a) values (299,37);
+insert into t (id,a) values (299,38);
+insert into t (id,a) values (299,39);
+insert into t (id,a) values (299,40);
+insert into t (id,a) values (299,41);
+insert into t (id,a) values (299,42);
+insert into t (id,a) values (299,43);
+insert into t (id,a) values (299,44);
+insert into t (id,a) values (299,45);
+insert into t (id,a) values (299,46);
+insert into t (id,a) values (299,47);
+insert into t (id,a) values (299,48);
+insert into t (id,a) values (299,49);
+insert into t (id,a) values (299,50);
+insert into t (id,a) values (299,51);
+insert into t (id,a) values (299,52);
+insert into t (id,a) values (299,53);
+insert into t (id,a) values (299,54);
+insert into t (id,a) values (299,55);
+insert into t (id,a) values (299,56);
+insert into t (id,a) values (299,57);
+insert into t (id,a) values (299,58);
+insert into t (id,a) values (299,59);
+insert into t (id,a) values (299,60);
+insert into t (id,a) values (299,61);
+insert into t (id,a) values (299,62);
+insert into t (id,a) values (299,63);
+insert into t (id,a) values (299,64);
+insert into t (id,a) values (299,65);
+insert into t (id,a) values (299,66);
+insert into t (id,a) values (299,67);
+insert into t (id,a) values (299,68);
+insert into t (id,a) values (299,69);
+insert into t (id,a) values (299,70);
+insert into t (id,a) values (299,71);
+insert into t (id,a) values (299,72);
+insert into t (id,a) values (299,73);
+insert into t (id,a) values (299,74);
+insert into t (id,a) values (299,75);
+insert into t (id,a) values (299,76);
+insert into t (id,a) values (299,77);
+insert into t (id,a) values (299,78);
+insert into t (id,a) values (299,79);
+insert into t (id,a) values (299,80);
+insert into t (id,a) values (299,81);
+insert into t (id,a) values (299,82);
+insert into t (id,a) values (299,83);
+insert into t (id,a) values (299,84);
+insert into t (id,a) values (299,85);
+insert into t (id,a) values (299,86);
+insert into t (id,a) values (299,87);
+insert into t (id,a) values (299,88);
+insert into t (id,a) values (299,89);
+insert into t (id,a) values (299,90);
+insert into t (id,a) values (299,91);
+insert into t (id,a) values (299,92);
+insert into t (id,a) values (299,93);
+insert into t (id,a) values (299,94);
+insert into t (id,a) values (299,95);
+insert into t (id,a) values (299,96);
+insert into t (id,a) values (299,97);
+insert into t (id,a) values (299,98);
+insert into t (id,a) values (299,99);
+insert into t (id,a) values (300,0);
+insert into t (id,a) values (300,1);
+insert into t (id,a) values (300,2);
+insert into t (id,a) values (300,3);
+insert into t (id,a) values (300,4);
+insert into t (id,a) values (300,5);
+insert into t (id,a) values (300,6);
+insert into t (id,a) values (300,7);
+insert into t (id,a) values (300,8);
+insert into t (id,a) values (300,9);
+insert into t (id,a) values (300,10);
+insert into t (id,a) values (300,11);
+insert into t (id,a) values (300,12);
+insert into t (id,a) values (300,13);
+insert into t (id,a) values (300,14);
+insert into t (id,a) values (300,15);
+insert into t (id,a) values (300,16);
+insert into t (id,a) values (300,17);
+insert into t (id,a) values (300,18);
+insert into t (id,a) values (300,19);
+insert into t (id,a) values (300,20);
+insert into t (id,a) values (300,21);
+insert into t (id,a) values (300,22);
+insert into t (id,a) values (300,23);
+insert into t (id,a) values (300,24);
+insert into t (id,a) values (300,25);
+insert into t (id,a) values (300,26);
+insert into t (id,a) values (300,27);
+insert into t (id,a) values (300,28);
+insert into t (id,a) values (300,29);
+insert into t (id,a) values (300,30);
+insert into t (id,a) values (300,31);
+insert into t (id,a) values (300,32);
+insert into t (id,a) values (300,33);
+insert into t (id,a) values (300,34);
+insert into t (id,a) values (300,35);
+insert into t (id,a) values (300,36);
+insert into t (id,a) values (300,37);
+insert into t (id,a) values (300,38);
+insert into t (id,a) values (300,39);
+insert into t (id,a) values (300,40);
+insert into t (id,a) values (300,41);
+insert into t (id,a) values (300,42);
+insert into t (id,a) values (300,43);
+insert into t (id,a) values (300,44);
+insert into t (id,a) values (300,45);
+insert into t (id,a) values (300,46);
+insert into t (id,a) values (300,47);
+insert into t (id,a) values (300,48);
+insert into t (id,a) values (300,49);
+insert into t (id,a) values (300,50);
+insert into t (id,a) values (300,51);
+insert into t (id,a) values (300,52);
+insert into t (id,a) values (300,53);
+insert into t (id,a) values (300,54);
+insert into t (id,a) values (300,55);
+insert into t (id,a) values (300,56);
+insert into t (id,a) values (300,57);
+insert into t (id,a) values (300,58);
+insert into t (id,a) values (300,59);
+insert into t (id,a) values (300,60);
+insert into t (id,a) values (300,61);
+insert into t (id,a) values (300,62);
+insert into t (id,a) values (300,63);
+insert into t (id,a) values (300,64);
+insert into t (id,a) values (300,65);
+insert into t (id,a) values (300,66);
+insert into t (id,a) values (300,67);
+insert into t (id,a) values (300,68);
+insert into t (id,a) values (300,69);
+insert into t (id,a) values (300,70);
+insert into t (id,a) values (300,71);
+insert into t (id,a) values (300,72);
+insert into t (id,a) values (300,73);
+insert into t (id,a) values (300,74);
+insert into t (id,a) values (300,75);
+insert into t (id,a) values (300,76);
+insert into t (id,a) values (300,77);
+insert into t (id,a) values (300,78);
+insert into t (id,a) values (300,79);
+insert into t (id,a) values (300,80);
+insert into t (id,a) values (300,81);
+insert into t (id,a) values (300,82);
+insert into t (id,a) values (300,83);
+insert into t (id,a) values (300,84);
+insert into t (id,a) values (300,85);
+insert into t (id,a) values (300,86);
+insert into t (id,a) values (300,87);
+insert into t (id,a) values (300,88);
+insert into t (id,a) values (300,89);
+insert into t (id,a) values (300,90);
+insert into t (id,a) values (300,91);
+insert into t (id,a) values (300,92);
+insert into t (id,a) values (300,93);
+insert into t (id,a) values (300,94);
+insert into t (id,a) values (300,95);
+insert into t (id,a) values (300,96);
+insert into t (id,a) values (300,97);
+insert into t (id,a) values (300,98);
+insert into t (id,a) values (300,99);
+insert into t (id,a) values (301,0);
+insert into t (id,a) values (301,1);
+insert into t (id,a) values (301,2);
+insert into t (id,a) values (301,3);
+insert into t (id,a) values (301,4);
+insert into t (id,a) values (301,5);
+insert into t (id,a) values (301,6);
+insert into t (id,a) values (301,7);
+insert into t (id,a) values (301,8);
+insert into t (id,a) values (301,9);
+insert into t (id,a) values (301,10);
+insert into t (id,a) values (301,11);
+insert into t (id,a) values (301,12);
+insert into t (id,a) values (301,13);
+insert into t (id,a) values (301,14);
+insert into t (id,a) values (301,15);
+insert into t (id,a) values (301,16);
+insert into t (id,a) values (301,17);
+insert into t (id,a) values (301,18);
+insert into t (id,a) values (301,19);
+insert into t (id,a) values (301,20);
+insert into t (id,a) values (301,21);
+insert into t (id,a) values (301,22);
+insert into t (id,a) values (301,23);
+insert into t (id,a) values (301,24);
+insert into t (id,a) values (301,25);
+insert into t (id,a) values (301,26);
+insert into t (id,a) values (301,27);
+insert into t (id,a) values (301,28);
+insert into t (id,a) values (301,29);
+insert into t (id,a) values (301,30);
+insert into t (id,a) values (301,31);
+insert into t (id,a) values (301,32);
+insert into t (id,a) values (301,33);
+insert into t (id,a) values (301,34);
+insert into t (id,a) values (301,35);
+insert into t (id,a) values (301,36);
+insert into t (id,a) values (301,37);
+insert into t (id,a) values (301,38);
+insert into t (id,a) values (301,39);
+insert into t (id,a) values (301,40);
+insert into t (id,a) values (301,41);
+insert into t (id,a) values (301,42);
+insert into t (id,a) values (301,43);
+insert into t (id,a) values (301,44);
+insert into t (id,a) values (301,45);
+insert into t (id,a) values (301,46);
+insert into t (id,a) values (301,47);
+insert into t (id,a) values (301,48);
+insert into t (id,a) values (301,49);
+insert into t (id,a) values (301,50);
+insert into t (id,a) values (301,51);
+insert into t (id,a) values (301,52);
+insert into t (id,a) values (301,53);
+insert into t (id,a) values (301,54);
+insert into t (id,a) values (301,55);
+insert into t (id,a) values (301,56);
+insert into t (id,a) values (301,57);
+insert into t (id,a) values (301,58);
+insert into t (id,a) values (301,59);
+insert into t (id,a) values (301,60);
+insert into t (id,a) values (301,61);
+insert into t (id,a) values (301,62);
+insert into t (id,a) values (301,63);
+insert into t (id,a) values (301,64);
+insert into t (id,a) values (301,65);
+insert into t (id,a) values (301,66);
+insert into t (id,a) values (301,67);
+insert into t (id,a) values (301,68);
+insert into t (id,a) values (301,69);
+insert into t (id,a) values (301,70);
+insert into t (id,a) values (301,71);
+insert into t (id,a) values (301,72);
+insert into t (id,a) values (301,73);
+insert into t (id,a) values (301,74);
+insert into t (id,a) values (301,75);
+insert into t (id,a) values (301,76);
+insert into t (id,a) values (301,77);
+insert into t (id,a) values (301,78);
+insert into t (id,a) values (301,79);
+insert into t (id,a) values (301,80);
+insert into t (id,a) values (301,81);
+insert into t (id,a) values (301,82);
+insert into t (id,a) values (301,83);
+insert into t (id,a) values (301,84);
+insert into t (id,a) values (301,85);
+insert into t (id,a) values (301,86);
+insert into t (id,a) values (301,87);
+insert into t (id,a) values (301,88);
+insert into t (id,a) values (301,89);
+insert into t (id,a) values (301,90);
+insert into t (id,a) values (301,91);
+insert into t (id,a) values (301,92);
+insert into t (id,a) values (301,93);
+insert into t (id,a) values (301,94);
+insert into t (id,a) values (301,95);
+insert into t (id,a) values (301,96);
+insert into t (id,a) values (301,97);
+insert into t (id,a) values (301,98);
+insert into t (id,a) values (301,99);
+insert into t (id,a) values (302,0);
+insert into t (id,a) values (302,1);
+insert into t (id,a) values (302,2);
+insert into t (id,a) values (302,3);
+insert into t (id,a) values (302,4);
+insert into t (id,a) values (302,5);
+insert into t (id,a) values (302,6);
+insert into t (id,a) values (302,7);
+insert into t (id,a) values (302,8);
+insert into t (id,a) values (302,9);
+insert into t (id,a) values (302,10);
+insert into t (id,a) values (302,11);
+insert into t (id,a) values (302,12);
+insert into t (id,a) values (302,13);
+insert into t (id,a) values (302,14);
+insert into t (id,a) values (302,15);
+insert into t (id,a) values (302,16);
+insert into t (id,a) values (302,17);
+insert into t (id,a) values (302,18);
+insert into t (id,a) values (302,19);
+insert into t (id,a) values (302,20);
+insert into t (id,a) values (302,21);
+insert into t (id,a) values (302,22);
+insert into t (id,a) values (302,23);
+insert into t (id,a) values (302,24);
+insert into t (id,a) values (302,25);
+insert into t (id,a) values (302,26);
+insert into t (id,a) values (302,27);
+insert into t (id,a) values (302,28);
+insert into t (id,a) values (302,29);
+insert into t (id,a) values (302,30);
+insert into t (id,a) values (302,31);
+insert into t (id,a) values (302,32);
+insert into t (id,a) values (302,33);
+insert into t (id,a) values (302,34);
+insert into t (id,a) values (302,35);
+insert into t (id,a) values (302,36);
+insert into t (id,a) values (302,37);
+insert into t (id,a) values (302,38);
+insert into t (id,a) values (302,39);
+insert into t (id,a) values (302,40);
+insert into t (id,a) values (302,41);
+insert into t (id,a) values (302,42);
+insert into t (id,a) values (302,43);
+insert into t (id,a) values (302,44);
+insert into t (id,a) values (302,45);
+insert into t (id,a) values (302,46);
+insert into t (id,a) values (302,47);
+insert into t (id,a) values (302,48);
+insert into t (id,a) values (302,49);
+insert into t (id,a) values (302,50);
+insert into t (id,a) values (302,51);
+insert into t (id,a) values (302,52);
+insert into t (id,a) values (302,53);
+insert into t (id,a) values (302,54);
+insert into t (id,a) values (302,55);
+insert into t (id,a) values (302,56);
+insert into t (id,a) values (302,57);
+insert into t (id,a) values (302,58);
+insert into t (id,a) values (302,59);
+insert into t (id,a) values (302,60);
+insert into t (id,a) values (302,61);
+insert into t (id,a) values (302,62);
+insert into t (id,a) values (302,63);
+insert into t (id,a) values (302,64);
+insert into t (id,a) values (302,65);
+insert into t (id,a) values (302,66);
+insert into t (id,a) values (302,67);
+insert into t (id,a) values (302,68);
+insert into t (id,a) values (302,69);
+insert into t (id,a) values (302,70);
+insert into t (id,a) values (302,71);
+insert into t (id,a) values (302,72);
+insert into t (id,a) values (302,73);
+insert into t (id,a) values (302,74);
+insert into t (id,a) values (302,75);
+insert into t (id,a) values (302,76);
+insert into t (id,a) values (302,77);
+insert into t (id,a) values (302,78);
+insert into t (id,a) values (302,79);
+insert into t (id,a) values (302,80);
+insert into t (id,a) values (302,81);
+insert into t (id,a) values (302,82);
+insert into t (id,a) values (302,83);
+insert into t (id,a) values (302,84);
+insert into t (id,a) values (302,85);
+insert into t (id,a) values (302,86);
+insert into t (id,a) values (302,87);
+insert into t (id,a) values (302,88);
+insert into t (id,a) values (302,89);
+insert into t (id,a) values (302,90);
+insert into t (id,a) values (302,91);
+insert into t (id,a) values (302,92);
+insert into t (id,a) values (302,93);
+insert into t (id,a) values (302,94);
+insert into t (id,a) values (302,95);
+insert into t (id,a) values (302,96);
+insert into t (id,a) values (302,97);
+insert into t (id,a) values (302,98);
+insert into t (id,a) values (302,99);
+insert into t (id,a) values (303,0);
+insert into t (id,a) values (303,1);
+insert into t (id,a) values (303,2);
+insert into t (id,a) values (303,3);
+insert into t (id,a) values (303,4);
+insert into t (id,a) values (303,5);
+insert into t (id,a) values (303,6);
+insert into t (id,a) values (303,7);
+insert into t (id,a) values (303,8);
+insert into t (id,a) values (303,9);
+insert into t (id,a) values (303,10);
+insert into t (id,a) values (303,11);
+insert into t (id,a) values (303,12);
+insert into t (id,a) values (303,13);
+insert into t (id,a) values (303,14);
+insert into t (id,a) values (303,15);
+insert into t (id,a) values (303,16);
+insert into t (id,a) values (303,17);
+insert into t (id,a) values (303,18);
+insert into t (id,a) values (303,19);
+insert into t (id,a) values (303,20);
+insert into t (id,a) values (303,21);
+insert into t (id,a) values (303,22);
+insert into t (id,a) values (303,23);
+insert into t (id,a) values (303,24);
+insert into t (id,a) values (303,25);
+insert into t (id,a) values (303,26);
+insert into t (id,a) values (303,27);
+insert into t (id,a) values (303,28);
+insert into t (id,a) values (303,29);
+insert into t (id,a) values (303,30);
+insert into t (id,a) values (303,31);
+insert into t (id,a) values (303,32);
+insert into t (id,a) values (303,33);
+insert into t (id,a) values (303,34);
+insert into t (id,a) values (303,35);
+insert into t (id,a) values (303,36);
+insert into t (id,a) values (303,37);
+insert into t (id,a) values (303,38);
+insert into t (id,a) values (303,39);
+insert into t (id,a) values (303,40);
+insert into t (id,a) values (303,41);
+insert into t (id,a) values (303,42);
+insert into t (id,a) values (303,43);
+insert into t (id,a) values (303,44);
+insert into t (id,a) values (303,45);
+insert into t (id,a) values (303,46);
+insert into t (id,a) values (303,47);
+insert into t (id,a) values (303,48);
+insert into t (id,a) values (303,49);
+insert into t (id,a) values (303,50);
+insert into t (id,a) values (303,51);
+insert into t (id,a) values (303,52);
+insert into t (id,a) values (303,53);
+insert into t (id,a) values (303,54);
+insert into t (id,a) values (303,55);
+insert into t (id,a) values (303,56);
+insert into t (id,a) values (303,57);
+insert into t (id,a) values (303,58);
+insert into t (id,a) values (303,59);
+insert into t (id,a) values (303,60);
+insert into t (id,a) values (303,61);
+insert into t (id,a) values (303,62);
+insert into t (id,a) values (303,63);
+insert into t (id,a) values (303,64);
+insert into t (id,a) values (303,65);
+insert into t (id,a) values (303,66);
+insert into t (id,a) values (303,67);
+insert into t (id,a) values (303,68);
+insert into t (id,a) values (303,69);
+insert into t (id,a) values (303,70);
+insert into t (id,a) values (303,71);
+insert into t (id,a) values (303,72);
+insert into t (id,a) values (303,73);
+insert into t (id,a) values (303,74);
+insert into t (id,a) values (303,75);
+insert into t (id,a) values (303,76);
+insert into t (id,a) values (303,77);
+insert into t (id,a) values (303,78);
+insert into t (id,a) values (303,79);
+insert into t (id,a) values (303,80);
+insert into t (id,a) values (303,81);
+insert into t (id,a) values (303,82);
+insert into t (id,a) values (303,83);
+insert into t (id,a) values (303,84);
+insert into t (id,a) values (303,85);
+insert into t (id,a) values (303,86);
+insert into t (id,a) values (303,87);
+insert into t (id,a) values (303,88);
+insert into t (id,a) values (303,89);
+insert into t (id,a) values (303,90);
+insert into t (id,a) values (303,91);
+insert into t (id,a) values (303,92);
+insert into t (id,a) values (303,93);
+insert into t (id,a) values (303,94);
+insert into t (id,a) values (303,95);
+insert into t (id,a) values (303,96);
+insert into t (id,a) values (303,97);
+insert into t (id,a) values (303,98);
+insert into t (id,a) values (303,99);
+insert into t (id,a) values (304,0);
+insert into t (id,a) values (304,1);
+insert into t (id,a) values (304,2);
+insert into t (id,a) values (304,3);
+insert into t (id,a) values (304,4);
+insert into t (id,a) values (304,5);
+insert into t (id,a) values (304,6);
+insert into t (id,a) values (304,7);
+insert into t (id,a) values (304,8);
+insert into t (id,a) values (304,9);
+insert into t (id,a) values (304,10);
+insert into t (id,a) values (304,11);
+insert into t (id,a) values (304,12);
+insert into t (id,a) values (304,13);
+insert into t (id,a) values (304,14);
+insert into t (id,a) values (304,15);
+insert into t (id,a) values (304,16);
+insert into t (id,a) values (304,17);
+insert into t (id,a) values (304,18);
+insert into t (id,a) values (304,19);
+insert into t (id,a) values (304,20);
+insert into t (id,a) values (304,21);
+insert into t (id,a) values (304,22);
+insert into t (id,a) values (304,23);
+insert into t (id,a) values (304,24);
+insert into t (id,a) values (304,25);
+insert into t (id,a) values (304,26);
+insert into t (id,a) values (304,27);
+insert into t (id,a) values (304,28);
+insert into t (id,a) values (304,29);
+insert into t (id,a) values (304,30);
+insert into t (id,a) values (304,31);
+insert into t (id,a) values (304,32);
+insert into t (id,a) values (304,33);
+insert into t (id,a) values (304,34);
+insert into t (id,a) values (304,35);
+insert into t (id,a) values (304,36);
+insert into t (id,a) values (304,37);
+insert into t (id,a) values (304,38);
+insert into t (id,a) values (304,39);
+insert into t (id,a) values (304,40);
+insert into t (id,a) values (304,41);
+insert into t (id,a) values (304,42);
+insert into t (id,a) values (304,43);
+insert into t (id,a) values (304,44);
+insert into t (id,a) values (304,45);
+insert into t (id,a) values (304,46);
+insert into t (id,a) values (304,47);
+insert into t (id,a) values (304,48);
+insert into t (id,a) values (304,49);
+insert into t (id,a) values (304,50);
+insert into t (id,a) values (304,51);
+insert into t (id,a) values (304,52);
+insert into t (id,a) values (304,53);
+insert into t (id,a) values (304,54);
+insert into t (id,a) values (304,55);
+insert into t (id,a) values (304,56);
+insert into t (id,a) values (304,57);
+insert into t (id,a) values (304,58);
+insert into t (id,a) values (304,59);
+insert into t (id,a) values (304,60);
+insert into t (id,a) values (304,61);
+insert into t (id,a) values (304,62);
+insert into t (id,a) values (304,63);
+insert into t (id,a) values (304,64);
+insert into t (id,a) values (304,65);
+insert into t (id,a) values (304,66);
+insert into t (id,a) values (304,67);
+insert into t (id,a) values (304,68);
+insert into t (id,a) values (304,69);
+insert into t (id,a) values (304,70);
+insert into t (id,a) values (304,71);
+insert into t (id,a) values (304,72);
+insert into t (id,a) values (304,73);
+insert into t (id,a) values (304,74);
+insert into t (id,a) values (304,75);
+insert into t (id,a) values (304,76);
+insert into t (id,a) values (304,77);
+insert into t (id,a) values (304,78);
+insert into t (id,a) values (304,79);
+insert into t (id,a) values (304,80);
+insert into t (id,a) values (304,81);
+insert into t (id,a) values (304,82);
+insert into t (id,a) values (304,83);
+insert into t (id,a) values (304,84);
+insert into t (id,a) values (304,85);
+insert into t (id,a) values (304,86);
+insert into t (id,a) values (304,87);
+insert into t (id,a) values (304,88);
+insert into t (id,a) values (304,89);
+insert into t (id,a) values (304,90);
+insert into t (id,a) values (304,91);
+insert into t (id,a) values (304,92);
+insert into t (id,a) values (304,93);
+insert into t (id,a) values (304,94);
+insert into t (id,a) values (304,95);
+insert into t (id,a) values (304,96);
+insert into t (id,a) values (304,97);
+insert into t (id,a) values (304,98);
+insert into t (id,a) values (304,99);
+insert into t (id,a) values (305,0);
+insert into t (id,a) values (305,1);
+insert into t (id,a) values (305,2);
+insert into t (id,a) values (305,3);
+insert into t (id,a) values (305,4);
+insert into t (id,a) values (305,5);
+insert into t (id,a) values (305,6);
+insert into t (id,a) values (305,7);
+insert into t (id,a) values (305,8);
+insert into t (id,a) values (305,9);
+insert into t (id,a) values (305,10);
+insert into t (id,a) values (305,11);
+insert into t (id,a) values (305,12);
+insert into t (id,a) values (305,13);
+insert into t (id,a) values (305,14);
+insert into t (id,a) values (305,15);
+insert into t (id,a) values (305,16);
+insert into t (id,a) values (305,17);
+insert into t (id,a) values (305,18);
+insert into t (id,a) values (305,19);
+insert into t (id,a) values (305,20);
+insert into t (id,a) values (305,21);
+insert into t (id,a) values (305,22);
+insert into t (id,a) values (305,23);
+insert into t (id,a) values (305,24);
+insert into t (id,a) values (305,25);
+insert into t (id,a) values (305,26);
+insert into t (id,a) values (305,27);
+insert into t (id,a) values (305,28);
+insert into t (id,a) values (305,29);
+insert into t (id,a) values (305,30);
+insert into t (id,a) values (305,31);
+insert into t (id,a) values (305,32);
+insert into t (id,a) values (305,33);
+insert into t (id,a) values (305,34);
+insert into t (id,a) values (305,35);
+insert into t (id,a) values (305,36);
+insert into t (id,a) values (305,37);
+insert into t (id,a) values (305,38);
+insert into t (id,a) values (305,39);
+insert into t (id,a) values (305,40);
+insert into t (id,a) values (305,41);
+insert into t (id,a) values (305,42);
+insert into t (id,a) values (305,43);
+insert into t (id,a) values (305,44);
+insert into t (id,a) values (305,45);
+insert into t (id,a) values (305,46);
+insert into t (id,a) values (305,47);
+insert into t (id,a) values (305,48);
+insert into t (id,a) values (305,49);
+insert into t (id,a) values (305,50);
+insert into t (id,a) values (305,51);
+insert into t (id,a) values (305,52);
+insert into t (id,a) values (305,53);
+insert into t (id,a) values (305,54);
+insert into t (id,a) values (305,55);
+insert into t (id,a) values (305,56);
+insert into t (id,a) values (305,57);
+insert into t (id,a) values (305,58);
+insert into t (id,a) values (305,59);
+insert into t (id,a) values (305,60);
+insert into t (id,a) values (305,61);
+insert into t (id,a) values (305,62);
+insert into t (id,a) values (305,63);
+insert into t (id,a) values (305,64);
+insert into t (id,a) values (305,65);
+insert into t (id,a) values (305,66);
+insert into t (id,a) values (305,67);
+insert into t (id,a) values (305,68);
+insert into t (id,a) values (305,69);
+insert into t (id,a) values (305,70);
+insert into t (id,a) values (305,71);
+insert into t (id,a) values (305,72);
+insert into t (id,a) values (305,73);
+insert into t (id,a) values (305,74);
+insert into t (id,a) values (305,75);
+insert into t (id,a) values (305,76);
+insert into t (id,a) values (305,77);
+insert into t (id,a) values (305,78);
+insert into t (id,a) values (305,79);
+insert into t (id,a) values (305,80);
+insert into t (id,a) values (305,81);
+insert into t (id,a) values (305,82);
+insert into t (id,a) values (305,83);
+insert into t (id,a) values (305,84);
+insert into t (id,a) values (305,85);
+insert into t (id,a) values (305,86);
+insert into t (id,a) values (305,87);
+insert into t (id,a) values (305,88);
+insert into t (id,a) values (305,89);
+insert into t (id,a) values (305,90);
+insert into t (id,a) values (305,91);
+insert into t (id,a) values (305,92);
+insert into t (id,a) values (305,93);
+insert into t (id,a) values (305,94);
+insert into t (id,a) values (305,95);
+insert into t (id,a) values (305,96);
+insert into t (id,a) values (305,97);
+insert into t (id,a) values (305,98);
+insert into t (id,a) values (305,99);
+insert into t (id,a) values (306,0);
+insert into t (id,a) values (306,1);
+insert into t (id,a) values (306,2);
+insert into t (id,a) values (306,3);
+insert into t (id,a) values (306,4);
+insert into t (id,a) values (306,5);
+insert into t (id,a) values (306,6);
+insert into t (id,a) values (306,7);
+insert into t (id,a) values (306,8);
+insert into t (id,a) values (306,9);
+insert into t (id,a) values (306,10);
+insert into t (id,a) values (306,11);
+insert into t (id,a) values (306,12);
+insert into t (id,a) values (306,13);
+insert into t (id,a) values (306,14);
+insert into t (id,a) values (306,15);
+insert into t (id,a) values (306,16);
+insert into t (id,a) values (306,17);
+insert into t (id,a) values (306,18);
+insert into t (id,a) values (306,19);
+insert into t (id,a) values (306,20);
+insert into t (id,a) values (306,21);
+insert into t (id,a) values (306,22);
+insert into t (id,a) values (306,23);
+insert into t (id,a) values (306,24);
+insert into t (id,a) values (306,25);
+insert into t (id,a) values (306,26);
+insert into t (id,a) values (306,27);
+insert into t (id,a) values (306,28);
+insert into t (id,a) values (306,29);
+insert into t (id,a) values (306,30);
+insert into t (id,a) values (306,31);
+insert into t (id,a) values (306,32);
+insert into t (id,a) values (306,33);
+insert into t (id,a) values (306,34);
+insert into t (id,a) values (306,35);
+insert into t (id,a) values (306,36);
+insert into t (id,a) values (306,37);
+insert into t (id,a) values (306,38);
+insert into t (id,a) values (306,39);
+insert into t (id,a) values (306,40);
+insert into t (id,a) values (306,41);
+insert into t (id,a) values (306,42);
+insert into t (id,a) values (306,43);
+insert into t (id,a) values (306,44);
+insert into t (id,a) values (306,45);
+insert into t (id,a) values (306,46);
+insert into t (id,a) values (306,47);
+insert into t (id,a) values (306,48);
+insert into t (id,a) values (306,49);
+insert into t (id,a) values (306,50);
+insert into t (id,a) values (306,51);
+insert into t (id,a) values (306,52);
+insert into t (id,a) values (306,53);
+insert into t (id,a) values (306,54);
+insert into t (id,a) values (306,55);
+insert into t (id,a) values (306,56);
+insert into t (id,a) values (306,57);
+insert into t (id,a) values (306,58);
+insert into t (id,a) values (306,59);
+insert into t (id,a) values (306,60);
+insert into t (id,a) values (306,61);
+insert into t (id,a) values (306,62);
+insert into t (id,a) values (306,63);
+insert into t (id,a) values (306,64);
+insert into t (id,a) values (306,65);
+insert into t (id,a) values (306,66);
+insert into t (id,a) values (306,67);
+insert into t (id,a) values (306,68);
+insert into t (id,a) values (306,69);
+insert into t (id,a) values (306,70);
+insert into t (id,a) values (306,71);
+insert into t (id,a) values (306,72);
+insert into t (id,a) values (306,73);
+insert into t (id,a) values (306,74);
+insert into t (id,a) values (306,75);
+insert into t (id,a) values (306,76);
+insert into t (id,a) values (306,77);
+insert into t (id,a) values (306,78);
+insert into t (id,a) values (306,79);
+insert into t (id,a) values (306,80);
+insert into t (id,a) values (306,81);
+insert into t (id,a) values (306,82);
+insert into t (id,a) values (306,83);
+insert into t (id,a) values (306,84);
+insert into t (id,a) values (306,85);
+insert into t (id,a) values (306,86);
+insert into t (id,a) values (306,87);
+insert into t (id,a) values (306,88);
+insert into t (id,a) values (306,89);
+insert into t (id,a) values (306,90);
+insert into t (id,a) values (306,91);
+insert into t (id,a) values (306,92);
+insert into t (id,a) values (306,93);
+insert into t (id,a) values (306,94);
+insert into t (id,a) values (306,95);
+insert into t (id,a) values (306,96);
+insert into t (id,a) values (306,97);
+insert into t (id,a) values (306,98);
+insert into t (id,a) values (306,99);
+insert into t (id,a) values (307,0);
+insert into t (id,a) values (307,1);
+insert into t (id,a) values (307,2);
+insert into t (id,a) values (307,3);
+insert into t (id,a) values (307,4);
+insert into t (id,a) values (307,5);
+insert into t (id,a) values (307,6);
+insert into t (id,a) values (307,7);
+insert into t (id,a) values (307,8);
+insert into t (id,a) values (307,9);
+insert into t (id,a) values (307,10);
+insert into t (id,a) values (307,11);
+insert into t (id,a) values (307,12);
+insert into t (id,a) values (307,13);
+insert into t (id,a) values (307,14);
+insert into t (id,a) values (307,15);
+insert into t (id,a) values (307,16);
+insert into t (id,a) values (307,17);
+insert into t (id,a) values (307,18);
+insert into t (id,a) values (307,19);
+insert into t (id,a) values (307,20);
+insert into t (id,a) values (307,21);
+insert into t (id,a) values (307,22);
+insert into t (id,a) values (307,23);
+insert into t (id,a) values (307,24);
+insert into t (id,a) values (307,25);
+insert into t (id,a) values (307,26);
+insert into t (id,a) values (307,27);
+insert into t (id,a) values (307,28);
+insert into t (id,a) values (307,29);
+insert into t (id,a) values (307,30);
+insert into t (id,a) values (307,31);
+insert into t (id,a) values (307,32);
+insert into t (id,a) values (307,33);
+insert into t (id,a) values (307,34);
+insert into t (id,a) values (307,35);
+insert into t (id,a) values (307,36);
+insert into t (id,a) values (307,37);
+insert into t (id,a) values (307,38);
+insert into t (id,a) values (307,39);
+insert into t (id,a) values (307,40);
+insert into t (id,a) values (307,41);
+insert into t (id,a) values (307,42);
+insert into t (id,a) values (307,43);
+insert into t (id,a) values (307,44);
+insert into t (id,a) values (307,45);
+insert into t (id,a) values (307,46);
+insert into t (id,a) values (307,47);
+insert into t (id,a) values (307,48);
+insert into t (id,a) values (307,49);
+insert into t (id,a) values (307,50);
+insert into t (id,a) values (307,51);
+insert into t (id,a) values (307,52);
+insert into t (id,a) values (307,53);
+insert into t (id,a) values (307,54);
+insert into t (id,a) values (307,55);
+insert into t (id,a) values (307,56);
+insert into t (id,a) values (307,57);
+insert into t (id,a) values (307,58);
+insert into t (id,a) values (307,59);
+insert into t (id,a) values (307,60);
+insert into t (id,a) values (307,61);
+insert into t (id,a) values (307,62);
+insert into t (id,a) values (307,63);
+insert into t (id,a) values (307,64);
+insert into t (id,a) values (307,65);
+insert into t (id,a) values (307,66);
+insert into t (id,a) values (307,67);
+insert into t (id,a) values (307,68);
+insert into t (id,a) values (307,69);
+insert into t (id,a) values (307,70);
+insert into t (id,a) values (307,71);
+insert into t (id,a) values (307,72);
+insert into t (id,a) values (307,73);
+insert into t (id,a) values (307,74);
+insert into t (id,a) values (307,75);
+insert into t (id,a) values (307,76);
+insert into t (id,a) values (307,77);
+insert into t (id,a) values (307,78);
+insert into t (id,a) values (307,79);
+insert into t (id,a) values (307,80);
+insert into t (id,a) values (307,81);
+insert into t (id,a) values (307,82);
+insert into t (id,a) values (307,83);
+insert into t (id,a) values (307,84);
+insert into t (id,a) values (307,85);
+insert into t (id,a) values (307,86);
+insert into t (id,a) values (307,87);
+insert into t (id,a) values (307,88);
+insert into t (id,a) values (307,89);
+insert into t (id,a) values (307,90);
+insert into t (id,a) values (307,91);
+insert into t (id,a) values (307,92);
+insert into t (id,a) values (307,93);
+insert into t (id,a) values (307,94);
+insert into t (id,a) values (307,95);
+insert into t (id,a) values (307,96);
+insert into t (id,a) values (307,97);
+insert into t (id,a) values (307,98);
+insert into t (id,a) values (307,99);
+insert into t (id,a) values (308,0);
+insert into t (id,a) values (308,1);
+insert into t (id,a) values (308,2);
+insert into t (id,a) values (308,3);
+insert into t (id,a) values (308,4);
+insert into t (id,a) values (308,5);
+insert into t (id,a) values (308,6);
+insert into t (id,a) values (308,7);
+insert into t (id,a) values (308,8);
+insert into t (id,a) values (308,9);
+insert into t (id,a) values (308,10);
+insert into t (id,a) values (308,11);
+insert into t (id,a) values (308,12);
+insert into t (id,a) values (308,13);
+insert into t (id,a) values (308,14);
+insert into t (id,a) values (308,15);
+insert into t (id,a) values (308,16);
+insert into t (id,a) values (308,17);
+insert into t (id,a) values (308,18);
+insert into t (id,a) values (308,19);
+insert into t (id,a) values (308,20);
+insert into t (id,a) values (308,21);
+insert into t (id,a) values (308,22);
+insert into t (id,a) values (308,23);
+insert into t (id,a) values (308,24);
+insert into t (id,a) values (308,25);
+insert into t (id,a) values (308,26);
+insert into t (id,a) values (308,27);
+insert into t (id,a) values (308,28);
+insert into t (id,a) values (308,29);
+insert into t (id,a) values (308,30);
+insert into t (id,a) values (308,31);
+insert into t (id,a) values (308,32);
+insert into t (id,a) values (308,33);
+insert into t (id,a) values (308,34);
+insert into t (id,a) values (308,35);
+insert into t (id,a) values (308,36);
+insert into t (id,a) values (308,37);
+insert into t (id,a) values (308,38);
+insert into t (id,a) values (308,39);
+insert into t (id,a) values (308,40);
+insert into t (id,a) values (308,41);
+insert into t (id,a) values (308,42);
+insert into t (id,a) values (308,43);
+insert into t (id,a) values (308,44);
+insert into t (id,a) values (308,45);
+insert into t (id,a) values (308,46);
+insert into t (id,a) values (308,47);
+insert into t (id,a) values (308,48);
+insert into t (id,a) values (308,49);
+insert into t (id,a) values (308,50);
+insert into t (id,a) values (308,51);
+insert into t (id,a) values (308,52);
+insert into t (id,a) values (308,53);
+insert into t (id,a) values (308,54);
+insert into t (id,a) values (308,55);
+insert into t (id,a) values (308,56);
+insert into t (id,a) values (308,57);
+insert into t (id,a) values (308,58);
+insert into t (id,a) values (308,59);
+insert into t (id,a) values (308,60);
+insert into t (id,a) values (308,61);
+insert into t (id,a) values (308,62);
+insert into t (id,a) values (308,63);
+insert into t (id,a) values (308,64);
+insert into t (id,a) values (308,65);
+insert into t (id,a) values (308,66);
+insert into t (id,a) values (308,67);
+insert into t (id,a) values (308,68);
+insert into t (id,a) values (308,69);
+insert into t (id,a) values (308,70);
+insert into t (id,a) values (308,71);
+insert into t (id,a) values (308,72);
+insert into t (id,a) values (308,73);
+insert into t (id,a) values (308,74);
+insert into t (id,a) values (308,75);
+insert into t (id,a) values (308,76);
+insert into t (id,a) values (308,77);
+insert into t (id,a) values (308,78);
+insert into t (id,a) values (308,79);
+insert into t (id,a) values (308,80);
+insert into t (id,a) values (308,81);
+insert into t (id,a) values (308,82);
+insert into t (id,a) values (308,83);
+insert into t (id,a) values (308,84);
+insert into t (id,a) values (308,85);
+insert into t (id,a) values (308,86);
+insert into t (id,a) values (308,87);
+insert into t (id,a) values (308,88);
+insert into t (id,a) values (308,89);
+insert into t (id,a) values (308,90);
+insert into t (id,a) values (308,91);
+insert into t (id,a) values (308,92);
+insert into t (id,a) values (308,93);
+insert into t (id,a) values (308,94);
+insert into t (id,a) values (308,95);
+insert into t (id,a) values (308,96);
+insert into t (id,a) values (308,97);
+insert into t (id,a) values (308,98);
+insert into t (id,a) values (308,99);
+insert into t (id,a) values (309,0);
+insert into t (id,a) values (309,1);
+insert into t (id,a) values (309,2);
+insert into t (id,a) values (309,3);
+insert into t (id,a) values (309,4);
+insert into t (id,a) values (309,5);
+insert into t (id,a) values (309,6);
+insert into t (id,a) values (309,7);
+insert into t (id,a) values (309,8);
+insert into t (id,a) values (309,9);
+insert into t (id,a) values (309,10);
+insert into t (id,a) values (309,11);
+insert into t (id,a) values (309,12);
+insert into t (id,a) values (309,13);
+insert into t (id,a) values (309,14);
+insert into t (id,a) values (309,15);
+insert into t (id,a) values (309,16);
+insert into t (id,a) values (309,17);
+insert into t (id,a) values (309,18);
+insert into t (id,a) values (309,19);
+insert into t (id,a) values (309,20);
+insert into t (id,a) values (309,21);
+insert into t (id,a) values (309,22);
+insert into t (id,a) values (309,23);
+insert into t (id,a) values (309,24);
+insert into t (id,a) values (309,25);
+insert into t (id,a) values (309,26);
+insert into t (id,a) values (309,27);
+insert into t (id,a) values (309,28);
+insert into t (id,a) values (309,29);
+insert into t (id,a) values (309,30);
+insert into t (id,a) values (309,31);
+insert into t (id,a) values (309,32);
+insert into t (id,a) values (309,33);
+insert into t (id,a) values (309,34);
+insert into t (id,a) values (309,35);
+insert into t (id,a) values (309,36);
+insert into t (id,a) values (309,37);
+insert into t (id,a) values (309,38);
+insert into t (id,a) values (309,39);
+insert into t (id,a) values (309,40);
+insert into t (id,a) values (309,41);
+insert into t (id,a) values (309,42);
+insert into t (id,a) values (309,43);
+insert into t (id,a) values (309,44);
+insert into t (id,a) values (309,45);
+insert into t (id,a) values (309,46);
+insert into t (id,a) values (309,47);
+insert into t (id,a) values (309,48);
+insert into t (id,a) values (309,49);
+insert into t (id,a) values (309,50);
+insert into t (id,a) values (309,51);
+insert into t (id,a) values (309,52);
+insert into t (id,a) values (309,53);
+insert into t (id,a) values (309,54);
+insert into t (id,a) values (309,55);
+insert into t (id,a) values (309,56);
+insert into t (id,a) values (309,57);
+insert into t (id,a) values (309,58);
+insert into t (id,a) values (309,59);
+insert into t (id,a) values (309,60);
+insert into t (id,a) values (309,61);
+insert into t (id,a) values (309,62);
+insert into t (id,a) values (309,63);
+insert into t (id,a) values (309,64);
+insert into t (id,a) values (309,65);
+insert into t (id,a) values (309,66);
+insert into t (id,a) values (309,67);
+insert into t (id,a) values (309,68);
+insert into t (id,a) values (309,69);
+insert into t (id,a) values (309,70);
+insert into t (id,a) values (309,71);
+insert into t (id,a) values (309,72);
+insert into t (id,a) values (309,73);
+insert into t (id,a) values (309,74);
+insert into t (id,a) values (309,75);
+insert into t (id,a) values (309,76);
+insert into t (id,a) values (309,77);
+insert into t (id,a) values (309,78);
+insert into t (id,a) values (309,79);
+insert into t (id,a) values (309,80);
+insert into t (id,a) values (309,81);
+insert into t (id,a) values (309,82);
+insert into t (id,a) values (309,83);
+insert into t (id,a) values (309,84);
+insert into t (id,a) values (309,85);
+insert into t (id,a) values (309,86);
+insert into t (id,a) values (309,87);
+insert into t (id,a) values (309,88);
+insert into t (id,a) values (309,89);
+insert into t (id,a) values (309,90);
+insert into t (id,a) values (309,91);
+insert into t (id,a) values (309,92);
+insert into t (id,a) values (309,93);
+insert into t (id,a) values (309,94);
+insert into t (id,a) values (309,95);
+insert into t (id,a) values (309,96);
+insert into t (id,a) values (309,97);
+insert into t (id,a) values (309,98);
+insert into t (id,a) values (309,99);
+insert into t (id,a) values (310,0);
+insert into t (id,a) values (310,1);
+insert into t (id,a) values (310,2);
+insert into t (id,a) values (310,3);
+insert into t (id,a) values (310,4);
+insert into t (id,a) values (310,5);
+insert into t (id,a) values (310,6);
+insert into t (id,a) values (310,7);
+insert into t (id,a) values (310,8);
+insert into t (id,a) values (310,9);
+insert into t (id,a) values (310,10);
+insert into t (id,a) values (310,11);
+insert into t (id,a) values (310,12);
+insert into t (id,a) values (310,13);
+insert into t (id,a) values (310,14);
+insert into t (id,a) values (310,15);
+insert into t (id,a) values (310,16);
+insert into t (id,a) values (310,17);
+insert into t (id,a) values (310,18);
+insert into t (id,a) values (310,19);
+insert into t (id,a) values (310,20);
+insert into t (id,a) values (310,21);
+insert into t (id,a) values (310,22);
+insert into t (id,a) values (310,23);
+insert into t (id,a) values (310,24);
+insert into t (id,a) values (310,25);
+insert into t (id,a) values (310,26);
+insert into t (id,a) values (310,27);
+insert into t (id,a) values (310,28);
+insert into t (id,a) values (310,29);
+insert into t (id,a) values (310,30);
+insert into t (id,a) values (310,31);
+insert into t (id,a) values (310,32);
+insert into t (id,a) values (310,33);
+insert into t (id,a) values (310,34);
+insert into t (id,a) values (310,35);
+insert into t (id,a) values (310,36);
+insert into t (id,a) values (310,37);
+insert into t (id,a) values (310,38);
+insert into t (id,a) values (310,39);
+insert into t (id,a) values (310,40);
+insert into t (id,a) values (310,41);
+insert into t (id,a) values (310,42);
+insert into t (id,a) values (310,43);
+insert into t (id,a) values (310,44);
+insert into t (id,a) values (310,45);
+insert into t (id,a) values (310,46);
+insert into t (id,a) values (310,47);
+insert into t (id,a) values (310,48);
+insert into t (id,a) values (310,49);
+insert into t (id,a) values (310,50);
+insert into t (id,a) values (310,51);
+insert into t (id,a) values (310,52);
+insert into t (id,a) values (310,53);
+insert into t (id,a) values (310,54);
+insert into t (id,a) values (310,55);
+insert into t (id,a) values (310,56);
+insert into t (id,a) values (310,57);
+insert into t (id,a) values (310,58);
+insert into t (id,a) values (310,59);
+insert into t (id,a) values (310,60);
+insert into t (id,a) values (310,61);
+insert into t (id,a) values (310,62);
+insert into t (id,a) values (310,63);
+insert into t (id,a) values (310,64);
+insert into t (id,a) values (310,65);
+insert into t (id,a) values (310,66);
+insert into t (id,a) values (310,67);
+insert into t (id,a) values (310,68);
+insert into t (id,a) values (310,69);
+insert into t (id,a) values (310,70);
+insert into t (id,a) values (310,71);
+insert into t (id,a) values (310,72);
+insert into t (id,a) values (310,73);
+insert into t (id,a) values (310,74);
+insert into t (id,a) values (310,75);
+insert into t (id,a) values (310,76);
+insert into t (id,a) values (310,77);
+insert into t (id,a) values (310,78);
+insert into t (id,a) values (310,79);
+insert into t (id,a) values (310,80);
+insert into t (id,a) values (310,81);
+insert into t (id,a) values (310,82);
+insert into t (id,a) values (310,83);
+insert into t (id,a) values (310,84);
+insert into t (id,a) values (310,85);
+insert into t (id,a) values (310,86);
+insert into t (id,a) values (310,87);
+insert into t (id,a) values (310,88);
+insert into t (id,a) values (310,89);
+insert into t (id,a) values (310,90);
+insert into t (id,a) values (310,91);
+insert into t (id,a) values (310,92);
+insert into t (id,a) values (310,93);
+insert into t (id,a) values (310,94);
+insert into t (id,a) values (310,95);
+insert into t (id,a) values (310,96);
+insert into t (id,a) values (310,97);
+insert into t (id,a) values (310,98);
+insert into t (id,a) values (310,99);
+insert into t (id,a) values (311,0);
+insert into t (id,a) values (311,1);
+insert into t (id,a) values (311,2);
+insert into t (id,a) values (311,3);
+insert into t (id,a) values (311,4);
+insert into t (id,a) values (311,5);
+insert into t (id,a) values (311,6);
+insert into t (id,a) values (311,7);
+insert into t (id,a) values (311,8);
+insert into t (id,a) values (311,9);
+insert into t (id,a) values (311,10);
+insert into t (id,a) values (311,11);
+insert into t (id,a) values (311,12);
+insert into t (id,a) values (311,13);
+insert into t (id,a) values (311,14);
+insert into t (id,a) values (311,15);
+insert into t (id,a) values (311,16);
+insert into t (id,a) values (311,17);
+insert into t (id,a) values (311,18);
+insert into t (id,a) values (311,19);
+insert into t (id,a) values (311,20);
+insert into t (id,a) values (311,21);
+insert into t (id,a) values (311,22);
+insert into t (id,a) values (311,23);
+insert into t (id,a) values (311,24);
+insert into t (id,a) values (311,25);
+insert into t (id,a) values (311,26);
+insert into t (id,a) values (311,27);
+insert into t (id,a) values (311,28);
+insert into t (id,a) values (311,29);
+insert into t (id,a) values (311,30);
+insert into t (id,a) values (311,31);
+insert into t (id,a) values (311,32);
+insert into t (id,a) values (311,33);
+insert into t (id,a) values (311,34);
+insert into t (id,a) values (311,35);
+insert into t (id,a) values (311,36);
+insert into t (id,a) values (311,37);
+insert into t (id,a) values (311,38);
+insert into t (id,a) values (311,39);
+insert into t (id,a) values (311,40);
+insert into t (id,a) values (311,41);
+insert into t (id,a) values (311,42);
+insert into t (id,a) values (311,43);
+insert into t (id,a) values (311,44);
+insert into t (id,a) values (311,45);
+insert into t (id,a) values (311,46);
+insert into t (id,a) values (311,47);
+insert into t (id,a) values (311,48);
+insert into t (id,a) values (311,49);
+insert into t (id,a) values (311,50);
+insert into t (id,a) values (311,51);
+insert into t (id,a) values (311,52);
+insert into t (id,a) values (311,53);
+insert into t (id,a) values (311,54);
+insert into t (id,a) values (311,55);
+insert into t (id,a) values (311,56);
+insert into t (id,a) values (311,57);
+insert into t (id,a) values (311,58);
+insert into t (id,a) values (311,59);
+insert into t (id,a) values (311,60);
+insert into t (id,a) values (311,61);
+insert into t (id,a) values (311,62);
+insert into t (id,a) values (311,63);
+insert into t (id,a) values (311,64);
+insert into t (id,a) values (311,65);
+insert into t (id,a) values (311,66);
+insert into t (id,a) values (311,67);
+insert into t (id,a) values (311,68);
+insert into t (id,a) values (311,69);
+insert into t (id,a) values (311,70);
+insert into t (id,a) values (311,71);
+insert into t (id,a) values (311,72);
+insert into t (id,a) values (311,73);
+insert into t (id,a) values (311,74);
+insert into t (id,a) values (311,75);
+insert into t (id,a) values (311,76);
+insert into t (id,a) values (311,77);
+insert into t (id,a) values (311,78);
+insert into t (id,a) values (311,79);
+insert into t (id,a) values (311,80);
+insert into t (id,a) values (311,81);
+insert into t (id,a) values (311,82);
+insert into t (id,a) values (311,83);
+insert into t (id,a) values (311,84);
+insert into t (id,a) values (311,85);
+insert into t (id,a) values (311,86);
+insert into t (id,a) values (311,87);
+insert into t (id,a) values (311,88);
+insert into t (id,a) values (311,89);
+insert into t (id,a) values (311,90);
+insert into t (id,a) values (311,91);
+insert into t (id,a) values (311,92);
+insert into t (id,a) values (311,93);
+insert into t (id,a) values (311,94);
+insert into t (id,a) values (311,95);
+insert into t (id,a) values (311,96);
+insert into t (id,a) values (311,97);
+insert into t (id,a) values (311,98);
+insert into t (id,a) values (311,99);
+insert into t (id,a) values (312,0);
+insert into t (id,a) values (312,1);
+insert into t (id,a) values (312,2);
+insert into t (id,a) values (312,3);
+insert into t (id,a) values (312,4);
+insert into t (id,a) values (312,5);
+insert into t (id,a) values (312,6);
+insert into t (id,a) values (312,7);
+insert into t (id,a) values (312,8);
+insert into t (id,a) values (312,9);
+insert into t (id,a) values (312,10);
+insert into t (id,a) values (312,11);
+insert into t (id,a) values (312,12);
+insert into t (id,a) values (312,13);
+insert into t (id,a) values (312,14);
+insert into t (id,a) values (312,15);
+insert into t (id,a) values (312,16);
+insert into t (id,a) values (312,17);
+insert into t (id,a) values (312,18);
+insert into t (id,a) values (312,19);
+insert into t (id,a) values (312,20);
+insert into t (id,a) values (312,21);
+insert into t (id,a) values (312,22);
+insert into t (id,a) values (312,23);
+insert into t (id,a) values (312,24);
+insert into t (id,a) values (312,25);
+insert into t (id,a) values (312,26);
+insert into t (id,a) values (312,27);
+insert into t (id,a) values (312,28);
+insert into t (id,a) values (312,29);
+insert into t (id,a) values (312,30);
+insert into t (id,a) values (312,31);
+insert into t (id,a) values (312,32);
+insert into t (id,a) values (312,33);
+insert into t (id,a) values (312,34);
+insert into t (id,a) values (312,35);
+insert into t (id,a) values (312,36);
+insert into t (id,a) values (312,37);
+insert into t (id,a) values (312,38);
+insert into t (id,a) values (312,39);
+insert into t (id,a) values (312,40);
+insert into t (id,a) values (312,41);
+insert into t (id,a) values (312,42);
+insert into t (id,a) values (312,43);
+insert into t (id,a) values (312,44);
+insert into t (id,a) values (312,45);
+insert into t (id,a) values (312,46);
+insert into t (id,a) values (312,47);
+insert into t (id,a) values (312,48);
+insert into t (id,a) values (312,49);
+insert into t (id,a) values (312,50);
+insert into t (id,a) values (312,51);
+insert into t (id,a) values (312,52);
+insert into t (id,a) values (312,53);
+insert into t (id,a) values (312,54);
+insert into t (id,a) values (312,55);
+insert into t (id,a) values (312,56);
+insert into t (id,a) values (312,57);
+insert into t (id,a) values (312,58);
+insert into t (id,a) values (312,59);
+insert into t (id,a) values (312,60);
+insert into t (id,a) values (312,61);
+insert into t (id,a) values (312,62);
+insert into t (id,a) values (312,63);
+insert into t (id,a) values (312,64);
+insert into t (id,a) values (312,65);
+insert into t (id,a) values (312,66);
+insert into t (id,a) values (312,67);
+insert into t (id,a) values (312,68);
+insert into t (id,a) values (312,69);
+insert into t (id,a) values (312,70);
+insert into t (id,a) values (312,71);
+insert into t (id,a) values (312,72);
+insert into t (id,a) values (312,73);
+insert into t (id,a) values (312,74);
+insert into t (id,a) values (312,75);
+insert into t (id,a) values (312,76);
+insert into t (id,a) values (312,77);
+insert into t (id,a) values (312,78);
+insert into t (id,a) values (312,79);
+insert into t (id,a) values (312,80);
+insert into t (id,a) values (312,81);
+insert into t (id,a) values (312,82);
+insert into t (id,a) values (312,83);
+insert into t (id,a) values (312,84);
+insert into t (id,a) values (312,85);
+insert into t (id,a) values (312,86);
+insert into t (id,a) values (312,87);
+insert into t (id,a) values (312,88);
+insert into t (id,a) values (312,89);
+insert into t (id,a) values (312,90);
+insert into t (id,a) values (312,91);
+insert into t (id,a) values (312,92);
+insert into t (id,a) values (312,93);
+insert into t (id,a) values (312,94);
+insert into t (id,a) values (312,95);
+insert into t (id,a) values (312,96);
+insert into t (id,a) values (312,97);
+insert into t (id,a) values (312,98);
+insert into t (id,a) values (312,99);
+insert into t (id,a) values (313,0);
+insert into t (id,a) values (313,1);
+insert into t (id,a) values (313,2);
+insert into t (id,a) values (313,3);
+insert into t (id,a) values (313,4);
+insert into t (id,a) values (313,5);
+insert into t (id,a) values (313,6);
+insert into t (id,a) values (313,7);
+insert into t (id,a) values (313,8);
+insert into t (id,a) values (313,9);
+insert into t (id,a) values (313,10);
+insert into t (id,a) values (313,11);
+insert into t (id,a) values (313,12);
+insert into t (id,a) values (313,13);
+insert into t (id,a) values (313,14);
+insert into t (id,a) values (313,15);
+insert into t (id,a) values (313,16);
+insert into t (id,a) values (313,17);
+insert into t (id,a) values (313,18);
+insert into t (id,a) values (313,19);
+insert into t (id,a) values (313,20);
+insert into t (id,a) values (313,21);
+insert into t (id,a) values (313,22);
+insert into t (id,a) values (313,23);
+insert into t (id,a) values (313,24);
+insert into t (id,a) values (313,25);
+insert into t (id,a) values (313,26);
+insert into t (id,a) values (313,27);
+insert into t (id,a) values (313,28);
+insert into t (id,a) values (313,29);
+insert into t (id,a) values (313,30);
+insert into t (id,a) values (313,31);
+insert into t (id,a) values (313,32);
+insert into t (id,a) values (313,33);
+insert into t (id,a) values (313,34);
+insert into t (id,a) values (313,35);
+insert into t (id,a) values (313,36);
+insert into t (id,a) values (313,37);
+insert into t (id,a) values (313,38);
+insert into t (id,a) values (313,39);
+insert into t (id,a) values (313,40);
+insert into t (id,a) values (313,41);
+insert into t (id,a) values (313,42);
+insert into t (id,a) values (313,43);
+insert into t (id,a) values (313,44);
+insert into t (id,a) values (313,45);
+insert into t (id,a) values (313,46);
+insert into t (id,a) values (313,47);
+insert into t (id,a) values (313,48);
+insert into t (id,a) values (313,49);
+insert into t (id,a) values (313,50);
+insert into t (id,a) values (313,51);
+insert into t (id,a) values (313,52);
+insert into t (id,a) values (313,53);
+insert into t (id,a) values (313,54);
+insert into t (id,a) values (313,55);
+insert into t (id,a) values (313,56);
+insert into t (id,a) values (313,57);
+insert into t (id,a) values (313,58);
+insert into t (id,a) values (313,59);
+insert into t (id,a) values (313,60);
+insert into t (id,a) values (313,61);
+insert into t (id,a) values (313,62);
+insert into t (id,a) values (313,63);
+insert into t (id,a) values (313,64);
+insert into t (id,a) values (313,65);
+insert into t (id,a) values (313,66);
+insert into t (id,a) values (313,67);
+insert into t (id,a) values (313,68);
+insert into t (id,a) values (313,69);
+insert into t (id,a) values (313,70);
+insert into t (id,a) values (313,71);
+insert into t (id,a) values (313,72);
+insert into t (id,a) values (313,73);
+insert into t (id,a) values (313,74);
+insert into t (id,a) values (313,75);
+insert into t (id,a) values (313,76);
+insert into t (id,a) values (313,77);
+insert into t (id,a) values (313,78);
+insert into t (id,a) values (313,79);
+insert into t (id,a) values (313,80);
+insert into t (id,a) values (313,81);
+insert into t (id,a) values (313,82);
+insert into t (id,a) values (313,83);
+insert into t (id,a) values (313,84);
+insert into t (id,a) values (313,85);
+insert into t (id,a) values (313,86);
+insert into t (id,a) values (313,87);
+insert into t (id,a) values (313,88);
+insert into t (id,a) values (313,89);
+insert into t (id,a) values (313,90);
+insert into t (id,a) values (313,91);
+insert into t (id,a) values (313,92);
+insert into t (id,a) values (313,93);
+insert into t (id,a) values (313,94);
+insert into t (id,a) values (313,95);
+insert into t (id,a) values (313,96);
+insert into t (id,a) values (313,97);
+insert into t (id,a) values (313,98);
+insert into t (id,a) values (313,99);
+insert into t (id,a) values (314,0);
+insert into t (id,a) values (314,1);
+insert into t (id,a) values (314,2);
+insert into t (id,a) values (314,3);
+insert into t (id,a) values (314,4);
+insert into t (id,a) values (314,5);
+insert into t (id,a) values (314,6);
+insert into t (id,a) values (314,7);
+insert into t (id,a) values (314,8);
+insert into t (id,a) values (314,9);
+insert into t (id,a) values (314,10);
+insert into t (id,a) values (314,11);
+insert into t (id,a) values (314,12);
+insert into t (id,a) values (314,13);
+insert into t (id,a) values (314,14);
+insert into t (id,a) values (314,15);
+insert into t (id,a) values (314,16);
+insert into t (id,a) values (314,17);
+insert into t (id,a) values (314,18);
+insert into t (id,a) values (314,19);
+insert into t (id,a) values (314,20);
+insert into t (id,a) values (314,21);
+insert into t (id,a) values (314,22);
+insert into t (id,a) values (314,23);
+insert into t (id,a) values (314,24);
+insert into t (id,a) values (314,25);
+insert into t (id,a) values (314,26);
+insert into t (id,a) values (314,27);
+insert into t (id,a) values (314,28);
+insert into t (id,a) values (314,29);
+insert into t (id,a) values (314,30);
+insert into t (id,a) values (314,31);
+insert into t (id,a) values (314,32);
+insert into t (id,a) values (314,33);
+insert into t (id,a) values (314,34);
+insert into t (id,a) values (314,35);
+insert into t (id,a) values (314,36);
+insert into t (id,a) values (314,37);
+insert into t (id,a) values (314,38);
+insert into t (id,a) values (314,39);
+insert into t (id,a) values (314,40);
+insert into t (id,a) values (314,41);
+insert into t (id,a) values (314,42);
+insert into t (id,a) values (314,43);
+insert into t (id,a) values (314,44);
+insert into t (id,a) values (314,45);
+insert into t (id,a) values (314,46);
+insert into t (id,a) values (314,47);
+insert into t (id,a) values (314,48);
+insert into t (id,a) values (314,49);
+insert into t (id,a) values (314,50);
+insert into t (id,a) values (314,51);
+insert into t (id,a) values (314,52);
+insert into t (id,a) values (314,53);
+insert into t (id,a) values (314,54);
+insert into t (id,a) values (314,55);
+insert into t (id,a) values (314,56);
+insert into t (id,a) values (314,57);
+insert into t (id,a) values (314,58);
+insert into t (id,a) values (314,59);
+insert into t (id,a) values (314,60);
+insert into t (id,a) values (314,61);
+insert into t (id,a) values (314,62);
+insert into t (id,a) values (314,63);
+insert into t (id,a) values (314,64);
+insert into t (id,a) values (314,65);
+insert into t (id,a) values (314,66);
+insert into t (id,a) values (314,67);
+insert into t (id,a) values (314,68);
+insert into t (id,a) values (314,69);
+insert into t (id,a) values (314,70);
+insert into t (id,a) values (314,71);
+insert into t (id,a) values (314,72);
+insert into t (id,a) values (314,73);
+insert into t (id,a) values (314,74);
+insert into t (id,a) values (314,75);
+insert into t (id,a) values (314,76);
+insert into t (id,a) values (314,77);
+insert into t (id,a) values (314,78);
+insert into t (id,a) values (314,79);
+insert into t (id,a) values (314,80);
+insert into t (id,a) values (314,81);
+insert into t (id,a) values (314,82);
+insert into t (id,a) values (314,83);
+insert into t (id,a) values (314,84);
+insert into t (id,a) values (314,85);
+insert into t (id,a) values (314,86);
+insert into t (id,a) values (314,87);
+insert into t (id,a) values (314,88);
+insert into t (id,a) values (314,89);
+insert into t (id,a) values (314,90);
+insert into t (id,a) values (314,91);
+insert into t (id,a) values (314,92);
+insert into t (id,a) values (314,93);
+insert into t (id,a) values (314,94);
+insert into t (id,a) values (314,95);
+insert into t (id,a) values (314,96);
+insert into t (id,a) values (314,97);
+insert into t (id,a) values (314,98);
+insert into t (id,a) values (314,99);
+insert into t (id,a) values (315,0);
+insert into t (id,a) values (315,1);
+insert into t (id,a) values (315,2);
+insert into t (id,a) values (315,3);
+insert into t (id,a) values (315,4);
+insert into t (id,a) values (315,5);
+insert into t (id,a) values (315,6);
+insert into t (id,a) values (315,7);
+insert into t (id,a) values (315,8);
+insert into t (id,a) values (315,9);
+insert into t (id,a) values (315,10);
+insert into t (id,a) values (315,11);
+insert into t (id,a) values (315,12);
+insert into t (id,a) values (315,13);
+insert into t (id,a) values (315,14);
+insert into t (id,a) values (315,15);
+insert into t (id,a) values (315,16);
+insert into t (id,a) values (315,17);
+insert into t (id,a) values (315,18);
+insert into t (id,a) values (315,19);
+insert into t (id,a) values (315,20);
+insert into t (id,a) values (315,21);
+insert into t (id,a) values (315,22);
+insert into t (id,a) values (315,23);
+insert into t (id,a) values (315,24);
+insert into t (id,a) values (315,25);
+insert into t (id,a) values (315,26);
+insert into t (id,a) values (315,27);
+insert into t (id,a) values (315,28);
+insert into t (id,a) values (315,29);
+insert into t (id,a) values (315,30);
+insert into t (id,a) values (315,31);
+insert into t (id,a) values (315,32);
+insert into t (id,a) values (315,33);
+insert into t (id,a) values (315,34);
+insert into t (id,a) values (315,35);
+insert into t (id,a) values (315,36);
+insert into t (id,a) values (315,37);
+insert into t (id,a) values (315,38);
+insert into t (id,a) values (315,39);
+insert into t (id,a) values (315,40);
+insert into t (id,a) values (315,41);
+insert into t (id,a) values (315,42);
+insert into t (id,a) values (315,43);
+insert into t (id,a) values (315,44);
+insert into t (id,a) values (315,45);
+insert into t (id,a) values (315,46);
+insert into t (id,a) values (315,47);
+insert into t (id,a) values (315,48);
+insert into t (id,a) values (315,49);
+insert into t (id,a) values (315,50);
+insert into t (id,a) values (315,51);
+insert into t (id,a) values (315,52);
+insert into t (id,a) values (315,53);
+insert into t (id,a) values (315,54);
+insert into t (id,a) values (315,55);
+insert into t (id,a) values (315,56);
+insert into t (id,a) values (315,57);
+insert into t (id,a) values (315,58);
+insert into t (id,a) values (315,59);
+insert into t (id,a) values (315,60);
+insert into t (id,a) values (315,61);
+insert into t (id,a) values (315,62);
+insert into t (id,a) values (315,63);
+insert into t (id,a) values (315,64);
+insert into t (id,a) values (315,65);
+insert into t (id,a) values (315,66);
+insert into t (id,a) values (315,67);
+insert into t (id,a) values (315,68);
+insert into t (id,a) values (315,69);
+insert into t (id,a) values (315,70);
+insert into t (id,a) values (315,71);
+insert into t (id,a) values (315,72);
+insert into t (id,a) values (315,73);
+insert into t (id,a) values (315,74);
+insert into t (id,a) values (315,75);
+insert into t (id,a) values (315,76);
+insert into t (id,a) values (315,77);
+insert into t (id,a) values (315,78);
+insert into t (id,a) values (315,79);
+insert into t (id,a) values (315,80);
+insert into t (id,a) values (315,81);
+insert into t (id,a) values (315,82);
+insert into t (id,a) values (315,83);
+insert into t (id,a) values (315,84);
+insert into t (id,a) values (315,85);
+insert into t (id,a) values (315,86);
+insert into t (id,a) values (315,87);
+insert into t (id,a) values (315,88);
+insert into t (id,a) values (315,89);
+insert into t (id,a) values (315,90);
+insert into t (id,a) values (315,91);
+insert into t (id,a) values (315,92);
+insert into t (id,a) values (315,93);
+insert into t (id,a) values (315,94);
+insert into t (id,a) values (315,95);
+insert into t (id,a) values (315,96);
+insert into t (id,a) values (315,97);
+insert into t (id,a) values (315,98);
+insert into t (id,a) values (315,99);
+insert into t (id,a) values (316,0);
+insert into t (id,a) values (316,1);
+insert into t (id,a) values (316,2);
+insert into t (id,a) values (316,3);
+insert into t (id,a) values (316,4);
+insert into t (id,a) values (316,5);
+insert into t (id,a) values (316,6);
+insert into t (id,a) values (316,7);
+insert into t (id,a) values (316,8);
+insert into t (id,a) values (316,9);
+insert into t (id,a) values (316,10);
+insert into t (id,a) values (316,11);
+insert into t (id,a) values (316,12);
+insert into t (id,a) values (316,13);
+insert into t (id,a) values (316,14);
+insert into t (id,a) values (316,15);
+insert into t (id,a) values (316,16);
+insert into t (id,a) values (316,17);
+insert into t (id,a) values (316,18);
+insert into t (id,a) values (316,19);
+insert into t (id,a) values (316,20);
+insert into t (id,a) values (316,21);
+insert into t (id,a) values (316,22);
+insert into t (id,a) values (316,23);
+insert into t (id,a) values (316,24);
+insert into t (id,a) values (316,25);
+insert into t (id,a) values (316,26);
+insert into t (id,a) values (316,27);
+insert into t (id,a) values (316,28);
+insert into t (id,a) values (316,29);
+insert into t (id,a) values (316,30);
+insert into t (id,a) values (316,31);
+insert into t (id,a) values (316,32);
+insert into t (id,a) values (316,33);
+insert into t (id,a) values (316,34);
+insert into t (id,a) values (316,35);
+insert into t (id,a) values (316,36);
+insert into t (id,a) values (316,37);
+insert into t (id,a) values (316,38);
+insert into t (id,a) values (316,39);
+insert into t (id,a) values (316,40);
+insert into t (id,a) values (316,41);
+insert into t (id,a) values (316,42);
+insert into t (id,a) values (316,43);
+insert into t (id,a) values (316,44);
+insert into t (id,a) values (316,45);
+insert into t (id,a) values (316,46);
+insert into t (id,a) values (316,47);
+insert into t (id,a) values (316,48);
+insert into t (id,a) values (316,49);
+insert into t (id,a) values (316,50);
+insert into t (id,a) values (316,51);
+insert into t (id,a) values (316,52);
+insert into t (id,a) values (316,53);
+insert into t (id,a) values (316,54);
+insert into t (id,a) values (316,55);
+insert into t (id,a) values (316,56);
+insert into t (id,a) values (316,57);
+insert into t (id,a) values (316,58);
+insert into t (id,a) values (316,59);
+insert into t (id,a) values (316,60);
+insert into t (id,a) values (316,61);
+insert into t (id,a) values (316,62);
+insert into t (id,a) values (316,63);
+insert into t (id,a) values (316,64);
+insert into t (id,a) values (316,65);
+insert into t (id,a) values (316,66);
+insert into t (id,a) values (316,67);
+insert into t (id,a) values (316,68);
+insert into t (id,a) values (316,69);
+insert into t (id,a) values (316,70);
+insert into t (id,a) values (316,71);
+insert into t (id,a) values (316,72);
+insert into t (id,a) values (316,73);
+insert into t (id,a) values (316,74);
+insert into t (id,a) values (316,75);
+insert into t (id,a) values (316,76);
+insert into t (id,a) values (316,77);
+insert into t (id,a) values (316,78);
+insert into t (id,a) values (316,79);
+insert into t (id,a) values (316,80);
+insert into t (id,a) values (316,81);
+insert into t (id,a) values (316,82);
+insert into t (id,a) values (316,83);
+insert into t (id,a) values (316,84);
+insert into t (id,a) values (316,85);
+insert into t (id,a) values (316,86);
+insert into t (id,a) values (316,87);
+insert into t (id,a) values (316,88);
+insert into t (id,a) values (316,89);
+insert into t (id,a) values (316,90);
+insert into t (id,a) values (316,91);
+insert into t (id,a) values (316,92);
+insert into t (id,a) values (316,93);
+insert into t (id,a) values (316,94);
+insert into t (id,a) values (316,95);
+insert into t (id,a) values (316,96);
+insert into t (id,a) values (316,97);
+insert into t (id,a) values (316,98);
+insert into t (id,a) values (316,99);
+insert into t (id,a) values (317,0);
+insert into t (id,a) values (317,1);
+insert into t (id,a) values (317,2);
+insert into t (id,a) values (317,3);
+insert into t (id,a) values (317,4);
+insert into t (id,a) values (317,5);
+insert into t (id,a) values (317,6);
+insert into t (id,a) values (317,7);
+insert into t (id,a) values (317,8);
+insert into t (id,a) values (317,9);
+insert into t (id,a) values (317,10);
+insert into t (id,a) values (317,11);
+insert into t (id,a) values (317,12);
+insert into t (id,a) values (317,13);
+insert into t (id,a) values (317,14);
+insert into t (id,a) values (317,15);
+insert into t (id,a) values (317,16);
+insert into t (id,a) values (317,17);
+insert into t (id,a) values (317,18);
+insert into t (id,a) values (317,19);
+insert into t (id,a) values (317,20);
+insert into t (id,a) values (317,21);
+insert into t (id,a) values (317,22);
+insert into t (id,a) values (317,23);
+insert into t (id,a) values (317,24);
+insert into t (id,a) values (317,25);
+insert into t (id,a) values (317,26);
+insert into t (id,a) values (317,27);
+insert into t (id,a) values (317,28);
+insert into t (id,a) values (317,29);
+insert into t (id,a) values (317,30);
+insert into t (id,a) values (317,31);
+insert into t (id,a) values (317,32);
+insert into t (id,a) values (317,33);
+insert into t (id,a) values (317,34);
+insert into t (id,a) values (317,35);
+insert into t (id,a) values (317,36);
+insert into t (id,a) values (317,37);
+insert into t (id,a) values (317,38);
+insert into t (id,a) values (317,39);
+insert into t (id,a) values (317,40);
+insert into t (id,a) values (317,41);
+insert into t (id,a) values (317,42);
+insert into t (id,a) values (317,43);
+insert into t (id,a) values (317,44);
+insert into t (id,a) values (317,45);
+insert into t (id,a) values (317,46);
+insert into t (id,a) values (317,47);
+insert into t (id,a) values (317,48);
+insert into t (id,a) values (317,49);
+insert into t (id,a) values (317,50);
+insert into t (id,a) values (317,51);
+insert into t (id,a) values (317,52);
+insert into t (id,a) values (317,53);
+insert into t (id,a) values (317,54);
+insert into t (id,a) values (317,55);
+insert into t (id,a) values (317,56);
+insert into t (id,a) values (317,57);
+insert into t (id,a) values (317,58);
+insert into t (id,a) values (317,59);
+insert into t (id,a) values (317,60);
+insert into t (id,a) values (317,61);
+insert into t (id,a) values (317,62);
+insert into t (id,a) values (317,63);
+insert into t (id,a) values (317,64);
+insert into t (id,a) values (317,65);
+insert into t (id,a) values (317,66);
+insert into t (id,a) values (317,67);
+insert into t (id,a) values (317,68);
+insert into t (id,a) values (317,69);
+insert into t (id,a) values (317,70);
+insert into t (id,a) values (317,71);
+insert into t (id,a) values (317,72);
+insert into t (id,a) values (317,73);
+insert into t (id,a) values (317,74);
+insert into t (id,a) values (317,75);
+insert into t (id,a) values (317,76);
+insert into t (id,a) values (317,77);
+insert into t (id,a) values (317,78);
+insert into t (id,a) values (317,79);
+insert into t (id,a) values (317,80);
+insert into t (id,a) values (317,81);
+insert into t (id,a) values (317,82);
+insert into t (id,a) values (317,83);
+insert into t (id,a) values (317,84);
+insert into t (id,a) values (317,85);
+insert into t (id,a) values (317,86);
+insert into t (id,a) values (317,87);
+insert into t (id,a) values (317,88);
+insert into t (id,a) values (317,89);
+insert into t (id,a) values (317,90);
+insert into t (id,a) values (317,91);
+insert into t (id,a) values (317,92);
+insert into t (id,a) values (317,93);
+insert into t (id,a) values (317,94);
+insert into t (id,a) values (317,95);
+insert into t (id,a) values (317,96);
+insert into t (id,a) values (317,97);
+insert into t (id,a) values (317,98);
+insert into t (id,a) values (317,99);
+insert into t (id,a) values (318,0);
+insert into t (id,a) values (318,1);
+insert into t (id,a) values (318,2);
+insert into t (id,a) values (318,3);
+insert into t (id,a) values (318,4);
+insert into t (id,a) values (318,5);
+insert into t (id,a) values (318,6);
+insert into t (id,a) values (318,7);
+insert into t (id,a) values (318,8);
+insert into t (id,a) values (318,9);
+insert into t (id,a) values (318,10);
+insert into t (id,a) values (318,11);
+insert into t (id,a) values (318,12);
+insert into t (id,a) values (318,13);
+insert into t (id,a) values (318,14);
+insert into t (id,a) values (318,15);
+insert into t (id,a) values (318,16);
+insert into t (id,a) values (318,17);
+insert into t (id,a) values (318,18);
+insert into t (id,a) values (318,19);
+insert into t (id,a) values (318,20);
+insert into t (id,a) values (318,21);
+insert into t (id,a) values (318,22);
+insert into t (id,a) values (318,23);
+insert into t (id,a) values (318,24);
+insert into t (id,a) values (318,25);
+insert into t (id,a) values (318,26);
+insert into t (id,a) values (318,27);
+insert into t (id,a) values (318,28);
+insert into t (id,a) values (318,29);
+insert into t (id,a) values (318,30);
+insert into t (id,a) values (318,31);
+insert into t (id,a) values (318,32);
+insert into t (id,a) values (318,33);
+insert into t (id,a) values (318,34);
+insert into t (id,a) values (318,35);
+insert into t (id,a) values (318,36);
+insert into t (id,a) values (318,37);
+insert into t (id,a) values (318,38);
+insert into t (id,a) values (318,39);
+insert into t (id,a) values (318,40);
+insert into t (id,a) values (318,41);
+insert into t (id,a) values (318,42);
+insert into t (id,a) values (318,43);
+insert into t (id,a) values (318,44);
+insert into t (id,a) values (318,45);
+insert into t (id,a) values (318,46);
+insert into t (id,a) values (318,47);
+insert into t (id,a) values (318,48);
+insert into t (id,a) values (318,49);
+insert into t (id,a) values (318,50);
+insert into t (id,a) values (318,51);
+insert into t (id,a) values (318,52);
+insert into t (id,a) values (318,53);
+insert into t (id,a) values (318,54);
+insert into t (id,a) values (318,55);
+insert into t (id,a) values (318,56);
+insert into t (id,a) values (318,57);
+insert into t (id,a) values (318,58);
+insert into t (id,a) values (318,59);
+insert into t (id,a) values (318,60);
+insert into t (id,a) values (318,61);
+insert into t (id,a) values (318,62);
+insert into t (id,a) values (318,63);
+insert into t (id,a) values (318,64);
+insert into t (id,a) values (318,65);
+insert into t (id,a) values (318,66);
+insert into t (id,a) values (318,67);
+insert into t (id,a) values (318,68);
+insert into t (id,a) values (318,69);
+insert into t (id,a) values (318,70);
+insert into t (id,a) values (318,71);
+insert into t (id,a) values (318,72);
+insert into t (id,a) values (318,73);
+insert into t (id,a) values (318,74);
+insert into t (id,a) values (318,75);
+insert into t (id,a) values (318,76);
+insert into t (id,a) values (318,77);
+insert into t (id,a) values (318,78);
+insert into t (id,a) values (318,79);
+insert into t (id,a) values (318,80);
+insert into t (id,a) values (318,81);
+insert into t (id,a) values (318,82);
+insert into t (id,a) values (318,83);
+insert into t (id,a) values (318,84);
+insert into t (id,a) values (318,85);
+insert into t (id,a) values (318,86);
+insert into t (id,a) values (318,87);
+insert into t (id,a) values (318,88);
+insert into t (id,a) values (318,89);
+insert into t (id,a) values (318,90);
+insert into t (id,a) values (318,91);
+insert into t (id,a) values (318,92);
+insert into t (id,a) values (318,93);
+insert into t (id,a) values (318,94);
+insert into t (id,a) values (318,95);
+insert into t (id,a) values (318,96);
+insert into t (id,a) values (318,97);
+insert into t (id,a) values (318,98);
+insert into t (id,a) values (318,99);
+insert into t (id,a) values (319,0);
+insert into t (id,a) values (319,1);
+insert into t (id,a) values (319,2);
+insert into t (id,a) values (319,3);
+insert into t (id,a) values (319,4);
+insert into t (id,a) values (319,5);
+insert into t (id,a) values (319,6);
+insert into t (id,a) values (319,7);
+insert into t (id,a) values (319,8);
+insert into t (id,a) values (319,9);
+insert into t (id,a) values (319,10);
+insert into t (id,a) values (319,11);
+insert into t (id,a) values (319,12);
+insert into t (id,a) values (319,13);
+insert into t (id,a) values (319,14);
+insert into t (id,a) values (319,15);
+insert into t (id,a) values (319,16);
+insert into t (id,a) values (319,17);
+insert into t (id,a) values (319,18);
+insert into t (id,a) values (319,19);
+insert into t (id,a) values (319,20);
+insert into t (id,a) values (319,21);
+insert into t (id,a) values (319,22);
+insert into t (id,a) values (319,23);
+insert into t (id,a) values (319,24);
+insert into t (id,a) values (319,25);
+insert into t (id,a) values (319,26);
+insert into t (id,a) values (319,27);
+insert into t (id,a) values (319,28);
+insert into t (id,a) values (319,29);
+insert into t (id,a) values (319,30);
+insert into t (id,a) values (319,31);
+insert into t (id,a) values (319,32);
+insert into t (id,a) values (319,33);
+insert into t (id,a) values (319,34);
+insert into t (id,a) values (319,35);
+insert into t (id,a) values (319,36);
+insert into t (id,a) values (319,37);
+insert into t (id,a) values (319,38);
+insert into t (id,a) values (319,39);
+insert into t (id,a) values (319,40);
+insert into t (id,a) values (319,41);
+insert into t (id,a) values (319,42);
+insert into t (id,a) values (319,43);
+insert into t (id,a) values (319,44);
+insert into t (id,a) values (319,45);
+insert into t (id,a) values (319,46);
+insert into t (id,a) values (319,47);
+insert into t (id,a) values (319,48);
+insert into t (id,a) values (319,49);
+insert into t (id,a) values (319,50);
+insert into t (id,a) values (319,51);
+insert into t (id,a) values (319,52);
+insert into t (id,a) values (319,53);
+insert into t (id,a) values (319,54);
+insert into t (id,a) values (319,55);
+insert into t (id,a) values (319,56);
+insert into t (id,a) values (319,57);
+insert into t (id,a) values (319,58);
+insert into t (id,a) values (319,59);
+insert into t (id,a) values (319,60);
+insert into t (id,a) values (319,61);
+insert into t (id,a) values (319,62);
+insert into t (id,a) values (319,63);
+insert into t (id,a) values (319,64);
+insert into t (id,a) values (319,65);
+insert into t (id,a) values (319,66);
+insert into t (id,a) values (319,67);
+insert into t (id,a) values (319,68);
+insert into t (id,a) values (319,69);
+insert into t (id,a) values (319,70);
+insert into t (id,a) values (319,71);
+insert into t (id,a) values (319,72);
+insert into t (id,a) values (319,73);
+insert into t (id,a) values (319,74);
+insert into t (id,a) values (319,75);
+insert into t (id,a) values (319,76);
+insert into t (id,a) values (319,77);
+insert into t (id,a) values (319,78);
+insert into t (id,a) values (319,79);
+insert into t (id,a) values (319,80);
+insert into t (id,a) values (319,81);
+insert into t (id,a) values (319,82);
+insert into t (id,a) values (319,83);
+insert into t (id,a) values (319,84);
+insert into t (id,a) values (319,85);
+insert into t (id,a) values (319,86);
+insert into t (id,a) values (319,87);
+insert into t (id,a) values (319,88);
+insert into t (id,a) values (319,89);
+insert into t (id,a) values (319,90);
+insert into t (id,a) values (319,91);
+insert into t (id,a) values (319,92);
+insert into t (id,a) values (319,93);
+insert into t (id,a) values (319,94);
+insert into t (id,a) values (319,95);
+insert into t (id,a) values (319,96);
+insert into t (id,a) values (319,97);
+insert into t (id,a) values (319,98);
+insert into t (id,a) values (319,99);
+insert into t (id,a) values (320,0);
+insert into t (id,a) values (320,1);
+insert into t (id,a) values (320,2);
+insert into t (id,a) values (320,3);
+insert into t (id,a) values (320,4);
+insert into t (id,a) values (320,5);
+insert into t (id,a) values (320,6);
+insert into t (id,a) values (320,7);
+insert into t (id,a) values (320,8);
+insert into t (id,a) values (320,9);
+insert into t (id,a) values (320,10);
+insert into t (id,a) values (320,11);
+insert into t (id,a) values (320,12);
+insert into t (id,a) values (320,13);
+insert into t (id,a) values (320,14);
+insert into t (id,a) values (320,15);
+insert into t (id,a) values (320,16);
+insert into t (id,a) values (320,17);
+insert into t (id,a) values (320,18);
+insert into t (id,a) values (320,19);
+insert into t (id,a) values (320,20);
+insert into t (id,a) values (320,21);
+insert into t (id,a) values (320,22);
+insert into t (id,a) values (320,23);
+insert into t (id,a) values (320,24);
+insert into t (id,a) values (320,25);
+insert into t (id,a) values (320,26);
+insert into t (id,a) values (320,27);
+insert into t (id,a) values (320,28);
+insert into t (id,a) values (320,29);
+insert into t (id,a) values (320,30);
+insert into t (id,a) values (320,31);
+insert into t (id,a) values (320,32);
+insert into t (id,a) values (320,33);
+insert into t (id,a) values (320,34);
+insert into t (id,a) values (320,35);
+insert into t (id,a) values (320,36);
+insert into t (id,a) values (320,37);
+insert into t (id,a) values (320,38);
+insert into t (id,a) values (320,39);
+insert into t (id,a) values (320,40);
+insert into t (id,a) values (320,41);
+insert into t (id,a) values (320,42);
+insert into t (id,a) values (320,43);
+insert into t (id,a) values (320,44);
+insert into t (id,a) values (320,45);
+insert into t (id,a) values (320,46);
+insert into t (id,a) values (320,47);
+insert into t (id,a) values (320,48);
+insert into t (id,a) values (320,49);
+insert into t (id,a) values (320,50);
+insert into t (id,a) values (320,51);
+insert into t (id,a) values (320,52);
+insert into t (id,a) values (320,53);
+insert into t (id,a) values (320,54);
+insert into t (id,a) values (320,55);
+insert into t (id,a) values (320,56);
+insert into t (id,a) values (320,57);
+insert into t (id,a) values (320,58);
+insert into t (id,a) values (320,59);
+insert into t (id,a) values (320,60);
+insert into t (id,a) values (320,61);
+insert into t (id,a) values (320,62);
+insert into t (id,a) values (320,63);
+insert into t (id,a) values (320,64);
+insert into t (id,a) values (320,65);
+insert into t (id,a) values (320,66);
+insert into t (id,a) values (320,67);
+insert into t (id,a) values (320,68);
+insert into t (id,a) values (320,69);
+insert into t (id,a) values (320,70);
+insert into t (id,a) values (320,71);
+insert into t (id,a) values (320,72);
+insert into t (id,a) values (320,73);
+insert into t (id,a) values (320,74);
+insert into t (id,a) values (320,75);
+insert into t (id,a) values (320,76);
+insert into t (id,a) values (320,77);
+insert into t (id,a) values (320,78);
+insert into t (id,a) values (320,79);
+insert into t (id,a) values (320,80);
+insert into t (id,a) values (320,81);
+insert into t (id,a) values (320,82);
+insert into t (id,a) values (320,83);
+insert into t (id,a) values (320,84);
+insert into t (id,a) values (320,85);
+insert into t (id,a) values (320,86);
+insert into t (id,a) values (320,87);
+insert into t (id,a) values (320,88);
+insert into t (id,a) values (320,89);
+insert into t (id,a) values (320,90);
+insert into t (id,a) values (320,91);
+insert into t (id,a) values (320,92);
+insert into t (id,a) values (320,93);
+insert into t (id,a) values (320,94);
+insert into t (id,a) values (320,95);
+insert into t (id,a) values (320,96);
+insert into t (id,a) values (320,97);
+insert into t (id,a) values (320,98);
+insert into t (id,a) values (320,99);
+insert into t (id,a) values (321,0);
+insert into t (id,a) values (321,1);
+insert into t (id,a) values (321,2);
+insert into t (id,a) values (321,3);
+insert into t (id,a) values (321,4);
+insert into t (id,a) values (321,5);
+insert into t (id,a) values (321,6);
+insert into t (id,a) values (321,7);
+insert into t (id,a) values (321,8);
+insert into t (id,a) values (321,9);
+insert into t (id,a) values (321,10);
+insert into t (id,a) values (321,11);
+insert into t (id,a) values (321,12);
+insert into t (id,a) values (321,13);
+insert into t (id,a) values (321,14);
+insert into t (id,a) values (321,15);
+insert into t (id,a) values (321,16);
+insert into t (id,a) values (321,17);
+insert into t (id,a) values (321,18);
+insert into t (id,a) values (321,19);
+insert into t (id,a) values (321,20);
+insert into t (id,a) values (321,21);
+insert into t (id,a) values (321,22);
+insert into t (id,a) values (321,23);
+insert into t (id,a) values (321,24);
+insert into t (id,a) values (321,25);
+insert into t (id,a) values (321,26);
+insert into t (id,a) values (321,27);
+insert into t (id,a) values (321,28);
+insert into t (id,a) values (321,29);
+insert into t (id,a) values (321,30);
+insert into t (id,a) values (321,31);
+insert into t (id,a) values (321,32);
+insert into t (id,a) values (321,33);
+insert into t (id,a) values (321,34);
+insert into t (id,a) values (321,35);
+insert into t (id,a) values (321,36);
+insert into t (id,a) values (321,37);
+insert into t (id,a) values (321,38);
+insert into t (id,a) values (321,39);
+insert into t (id,a) values (321,40);
+insert into t (id,a) values (321,41);
+insert into t (id,a) values (321,42);
+insert into t (id,a) values (321,43);
+insert into t (id,a) values (321,44);
+insert into t (id,a) values (321,45);
+insert into t (id,a) values (321,46);
+insert into t (id,a) values (321,47);
+insert into t (id,a) values (321,48);
+insert into t (id,a) values (321,49);
+insert into t (id,a) values (321,50);
+insert into t (id,a) values (321,51);
+insert into t (id,a) values (321,52);
+insert into t (id,a) values (321,53);
+insert into t (id,a) values (321,54);
+insert into t (id,a) values (321,55);
+insert into t (id,a) values (321,56);
+insert into t (id,a) values (321,57);
+insert into t (id,a) values (321,58);
+insert into t (id,a) values (321,59);
+insert into t (id,a) values (321,60);
+insert into t (id,a) values (321,61);
+insert into t (id,a) values (321,62);
+insert into t (id,a) values (321,63);
+insert into t (id,a) values (321,64);
+insert into t (id,a) values (321,65);
+insert into t (id,a) values (321,66);
+insert into t (id,a) values (321,67);
+insert into t (id,a) values (321,68);
+insert into t (id,a) values (321,69);
+insert into t (id,a) values (321,70);
+insert into t (id,a) values (321,71);
+insert into t (id,a) values (321,72);
+insert into t (id,a) values (321,73);
+insert into t (id,a) values (321,74);
+insert into t (id,a) values (321,75);
+insert into t (id,a) values (321,76);
+insert into t (id,a) values (321,77);
+insert into t (id,a) values (321,78);
+insert into t (id,a) values (321,79);
+insert into t (id,a) values (321,80);
+insert into t (id,a) values (321,81);
+insert into t (id,a) values (321,82);
+insert into t (id,a) values (321,83);
+insert into t (id,a) values (321,84);
+insert into t (id,a) values (321,85);
+insert into t (id,a) values (321,86);
+insert into t (id,a) values (321,87);
+insert into t (id,a) values (321,88);
+insert into t (id,a) values (321,89);
+insert into t (id,a) values (321,90);
+insert into t (id,a) values (321,91);
+insert into t (id,a) values (321,92);
+insert into t (id,a) values (321,93);
+insert into t (id,a) values (321,94);
+insert into t (id,a) values (321,95);
+insert into t (id,a) values (321,96);
+insert into t (id,a) values (321,97);
+insert into t (id,a) values (321,98);
+insert into t (id,a) values (321,99);
+insert into t (id,a) values (322,0);
+insert into t (id,a) values (322,1);
+insert into t (id,a) values (322,2);
+insert into t (id,a) values (322,3);
+insert into t (id,a) values (322,4);
+insert into t (id,a) values (322,5);
+insert into t (id,a) values (322,6);
+insert into t (id,a) values (322,7);
+insert into t (id,a) values (322,8);
+insert into t (id,a) values (322,9);
+insert into t (id,a) values (322,10);
+insert into t (id,a) values (322,11);
+insert into t (id,a) values (322,12);
+insert into t (id,a) values (322,13);
+insert into t (id,a) values (322,14);
+insert into t (id,a) values (322,15);
+insert into t (id,a) values (322,16);
+insert into t (id,a) values (322,17);
+insert into t (id,a) values (322,18);
+insert into t (id,a) values (322,19);
+insert into t (id,a) values (322,20);
+insert into t (id,a) values (322,21);
+insert into t (id,a) values (322,22);
+insert into t (id,a) values (322,23);
+insert into t (id,a) values (322,24);
+insert into t (id,a) values (322,25);
+insert into t (id,a) values (322,26);
+insert into t (id,a) values (322,27);
+insert into t (id,a) values (322,28);
+insert into t (id,a) values (322,29);
+insert into t (id,a) values (322,30);
+insert into t (id,a) values (322,31);
+insert into t (id,a) values (322,32);
+insert into t (id,a) values (322,33);
+insert into t (id,a) values (322,34);
+insert into t (id,a) values (322,35);
+insert into t (id,a) values (322,36);
+insert into t (id,a) values (322,37);
+insert into t (id,a) values (322,38);
+insert into t (id,a) values (322,39);
+insert into t (id,a) values (322,40);
+insert into t (id,a) values (322,41);
+insert into t (id,a) values (322,42);
+insert into t (id,a) values (322,43);
+insert into t (id,a) values (322,44);
+insert into t (id,a) values (322,45);
+insert into t (id,a) values (322,46);
+insert into t (id,a) values (322,47);
+insert into t (id,a) values (322,48);
+insert into t (id,a) values (322,49);
+insert into t (id,a) values (322,50);
+insert into t (id,a) values (322,51);
+insert into t (id,a) values (322,52);
+insert into t (id,a) values (322,53);
+insert into t (id,a) values (322,54);
+insert into t (id,a) values (322,55);
+insert into t (id,a) values (322,56);
+insert into t (id,a) values (322,57);
+insert into t (id,a) values (322,58);
+insert into t (id,a) values (322,59);
+insert into t (id,a) values (322,60);
+insert into t (id,a) values (322,61);
+insert into t (id,a) values (322,62);
+insert into t (id,a) values (322,63);
+insert into t (id,a) values (322,64);
+insert into t (id,a) values (322,65);
+insert into t (id,a) values (322,66);
+insert into t (id,a) values (322,67);
+insert into t (id,a) values (322,68);
+insert into t (id,a) values (322,69);
+insert into t (id,a) values (322,70);
+insert into t (id,a) values (322,71);
+insert into t (id,a) values (322,72);
+insert into t (id,a) values (322,73);
+insert into t (id,a) values (322,74);
+insert into t (id,a) values (322,75);
+insert into t (id,a) values (322,76);
+insert into t (id,a) values (322,77);
+insert into t (id,a) values (322,78);
+insert into t (id,a) values (322,79);
+insert into t (id,a) values (322,80);
+insert into t (id,a) values (322,81);
+insert into t (id,a) values (322,82);
+insert into t (id,a) values (322,83);
+insert into t (id,a) values (322,84);
+insert into t (id,a) values (322,85);
+insert into t (id,a) values (322,86);
+insert into t (id,a) values (322,87);
+insert into t (id,a) values (322,88);
+insert into t (id,a) values (322,89);
+insert into t (id,a) values (322,90);
+insert into t (id,a) values (322,91);
+insert into t (id,a) values (322,92);
+insert into t (id,a) values (322,93);
+insert into t (id,a) values (322,94);
+insert into t (id,a) values (322,95);
+insert into t (id,a) values (322,96);
+insert into t (id,a) values (322,97);
+insert into t (id,a) values (322,98);
+insert into t (id,a) values (322,99);
+insert into t (id,a) values (323,0);
+insert into t (id,a) values (323,1);
+insert into t (id,a) values (323,2);
+insert into t (id,a) values (323,3);
+insert into t (id,a) values (323,4);
+insert into t (id,a) values (323,5);
+insert into t (id,a) values (323,6);
+insert into t (id,a) values (323,7);
+insert into t (id,a) values (323,8);
+insert into t (id,a) values (323,9);
+insert into t (id,a) values (323,10);
+insert into t (id,a) values (323,11);
+insert into t (id,a) values (323,12);
+insert into t (id,a) values (323,13);
+insert into t (id,a) values (323,14);
+insert into t (id,a) values (323,15);
+insert into t (id,a) values (323,16);
+insert into t (id,a) values (323,17);
+insert into t (id,a) values (323,18);
+insert into t (id,a) values (323,19);
+insert into t (id,a) values (323,20);
+insert into t (id,a) values (323,21);
+insert into t (id,a) values (323,22);
+insert into t (id,a) values (323,23);
+insert into t (id,a) values (323,24);
+insert into t (id,a) values (323,25);
+insert into t (id,a) values (323,26);
+insert into t (id,a) values (323,27);
+insert into t (id,a) values (323,28);
+insert into t (id,a) values (323,29);
+insert into t (id,a) values (323,30);
+insert into t (id,a) values (323,31);
+insert into t (id,a) values (323,32);
+insert into t (id,a) values (323,33);
+insert into t (id,a) values (323,34);
+insert into t (id,a) values (323,35);
+insert into t (id,a) values (323,36);
+insert into t (id,a) values (323,37);
+insert into t (id,a) values (323,38);
+insert into t (id,a) values (323,39);
+insert into t (id,a) values (323,40);
+insert into t (id,a) values (323,41);
+insert into t (id,a) values (323,42);
+insert into t (id,a) values (323,43);
+insert into t (id,a) values (323,44);
+insert into t (id,a) values (323,45);
+insert into t (id,a) values (323,46);
+insert into t (id,a) values (323,47);
+insert into t (id,a) values (323,48);
+insert into t (id,a) values (323,49);
+insert into t (id,a) values (323,50);
+insert into t (id,a) values (323,51);
+insert into t (id,a) values (323,52);
+insert into t (id,a) values (323,53);
+insert into t (id,a) values (323,54);
+insert into t (id,a) values (323,55);
+insert into t (id,a) values (323,56);
+insert into t (id,a) values (323,57);
+insert into t (id,a) values (323,58);
+insert into t (id,a) values (323,59);
+insert into t (id,a) values (323,60);
+insert into t (id,a) values (323,61);
+insert into t (id,a) values (323,62);
+insert into t (id,a) values (323,63);
+insert into t (id,a) values (323,64);
+insert into t (id,a) values (323,65);
+insert into t (id,a) values (323,66);
+insert into t (id,a) values (323,67);
+insert into t (id,a) values (323,68);
+insert into t (id,a) values (323,69);
+insert into t (id,a) values (323,70);
+insert into t (id,a) values (323,71);
+insert into t (id,a) values (323,72);
+insert into t (id,a) values (323,73);
+insert into t (id,a) values (323,74);
+insert into t (id,a) values (323,75);
+insert into t (id,a) values (323,76);
+insert into t (id,a) values (323,77);
+insert into t (id,a) values (323,78);
+insert into t (id,a) values (323,79);
+insert into t (id,a) values (323,80);
+insert into t (id,a) values (323,81);
+insert into t (id,a) values (323,82);
+insert into t (id,a) values (323,83);
+insert into t (id,a) values (323,84);
+insert into t (id,a) values (323,85);
+insert into t (id,a) values (323,86);
+insert into t (id,a) values (323,87);
+insert into t (id,a) values (323,88);
+insert into t (id,a) values (323,89);
+insert into t (id,a) values (323,90);
+insert into t (id,a) values (323,91);
+insert into t (id,a) values (323,92);
+insert into t (id,a) values (323,93);
+insert into t (id,a) values (323,94);
+insert into t (id,a) values (323,95);
+insert into t (id,a) values (323,96);
+insert into t (id,a) values (323,97);
+insert into t (id,a) values (323,98);
+insert into t (id,a) values (323,99);
+insert into t (id,a) values (324,0);
+insert into t (id,a) values (324,1);
+insert into t (id,a) values (324,2);
+insert into t (id,a) values (324,3);
+insert into t (id,a) values (324,4);
+insert into t (id,a) values (324,5);
+insert into t (id,a) values (324,6);
+insert into t (id,a) values (324,7);
+insert into t (id,a) values (324,8);
+insert into t (id,a) values (324,9);
+insert into t (id,a) values (324,10);
+insert into t (id,a) values (324,11);
+insert into t (id,a) values (324,12);
+insert into t (id,a) values (324,13);
+insert into t (id,a) values (324,14);
+insert into t (id,a) values (324,15);
+insert into t (id,a) values (324,16);
+insert into t (id,a) values (324,17);
+insert into t (id,a) values (324,18);
+insert into t (id,a) values (324,19);
+insert into t (id,a) values (324,20);
+insert into t (id,a) values (324,21);
+insert into t (id,a) values (324,22);
+insert into t (id,a) values (324,23);
+insert into t (id,a) values (324,24);
+insert into t (id,a) values (324,25);
+insert into t (id,a) values (324,26);
+insert into t (id,a) values (324,27);
+insert into t (id,a) values (324,28);
+insert into t (id,a) values (324,29);
+insert into t (id,a) values (324,30);
+insert into t (id,a) values (324,31);
+insert into t (id,a) values (324,32);
+insert into t (id,a) values (324,33);
+insert into t (id,a) values (324,34);
+insert into t (id,a) values (324,35);
+insert into t (id,a) values (324,36);
+insert into t (id,a) values (324,37);
+insert into t (id,a) values (324,38);
+insert into t (id,a) values (324,39);
+insert into t (id,a) values (324,40);
+insert into t (id,a) values (324,41);
+insert into t (id,a) values (324,42);
+insert into t (id,a) values (324,43);
+insert into t (id,a) values (324,44);
+insert into t (id,a) values (324,45);
+insert into t (id,a) values (324,46);
+insert into t (id,a) values (324,47);
+insert into t (id,a) values (324,48);
+insert into t (id,a) values (324,49);
+insert into t (id,a) values (324,50);
+insert into t (id,a) values (324,51);
+insert into t (id,a) values (324,52);
+insert into t (id,a) values (324,53);
+insert into t (id,a) values (324,54);
+insert into t (id,a) values (324,55);
+insert into t (id,a) values (324,56);
+insert into t (id,a) values (324,57);
+insert into t (id,a) values (324,58);
+insert into t (id,a) values (324,59);
+insert into t (id,a) values (324,60);
+insert into t (id,a) values (324,61);
+insert into t (id,a) values (324,62);
+insert into t (id,a) values (324,63);
+insert into t (id,a) values (324,64);
+insert into t (id,a) values (324,65);
+insert into t (id,a) values (324,66);
+insert into t (id,a) values (324,67);
+insert into t (id,a) values (324,68);
+insert into t (id,a) values (324,69);
+insert into t (id,a) values (324,70);
+insert into t (id,a) values (324,71);
+insert into t (id,a) values (324,72);
+insert into t (id,a) values (324,73);
+insert into t (id,a) values (324,74);
+insert into t (id,a) values (324,75);
+insert into t (id,a) values (324,76);
+insert into t (id,a) values (324,77);
+insert into t (id,a) values (324,78);
+insert into t (id,a) values (324,79);
+insert into t (id,a) values (324,80);
+insert into t (id,a) values (324,81);
+insert into t (id,a) values (324,82);
+insert into t (id,a) values (324,83);
+insert into t (id,a) values (324,84);
+insert into t (id,a) values (324,85);
+insert into t (id,a) values (324,86);
+insert into t (id,a) values (324,87);
+insert into t (id,a) values (324,88);
+insert into t (id,a) values (324,89);
+insert into t (id,a) values (324,90);
+insert into t (id,a) values (324,91);
+insert into t (id,a) values (324,92);
+insert into t (id,a) values (324,93);
+insert into t (id,a) values (324,94);
+insert into t (id,a) values (324,95);
+insert into t (id,a) values (324,96);
+insert into t (id,a) values (324,97);
+insert into t (id,a) values (324,98);
+insert into t (id,a) values (324,99);
+insert into t (id,a) values (325,0);
+insert into t (id,a) values (325,1);
+insert into t (id,a) values (325,2);
+insert into t (id,a) values (325,3);
+insert into t (id,a) values (325,4);
+insert into t (id,a) values (325,5);
+insert into t (id,a) values (325,6);
+insert into t (id,a) values (325,7);
+insert into t (id,a) values (325,8);
+insert into t (id,a) values (325,9);
+insert into t (id,a) values (325,10);
+insert into t (id,a) values (325,11);
+insert into t (id,a) values (325,12);
+insert into t (id,a) values (325,13);
+insert into t (id,a) values (325,14);
+insert into t (id,a) values (325,15);
+insert into t (id,a) values (325,16);
+insert into t (id,a) values (325,17);
+insert into t (id,a) values (325,18);
+insert into t (id,a) values (325,19);
+insert into t (id,a) values (325,20);
+insert into t (id,a) values (325,21);
+insert into t (id,a) values (325,22);
+insert into t (id,a) values (325,23);
+insert into t (id,a) values (325,24);
+insert into t (id,a) values (325,25);
+insert into t (id,a) values (325,26);
+insert into t (id,a) values (325,27);
+insert into t (id,a) values (325,28);
+insert into t (id,a) values (325,29);
+insert into t (id,a) values (325,30);
+insert into t (id,a) values (325,31);
+insert into t (id,a) values (325,32);
+insert into t (id,a) values (325,33);
+insert into t (id,a) values (325,34);
+insert into t (id,a) values (325,35);
+insert into t (id,a) values (325,36);
+insert into t (id,a) values (325,37);
+insert into t (id,a) values (325,38);
+insert into t (id,a) values (325,39);
+insert into t (id,a) values (325,40);
+insert into t (id,a) values (325,41);
+insert into t (id,a) values (325,42);
+insert into t (id,a) values (325,43);
+insert into t (id,a) values (325,44);
+insert into t (id,a) values (325,45);
+insert into t (id,a) values (325,46);
+insert into t (id,a) values (325,47);
+insert into t (id,a) values (325,48);
+insert into t (id,a) values (325,49);
+insert into t (id,a) values (325,50);
+insert into t (id,a) values (325,51);
+insert into t (id,a) values (325,52);
+insert into t (id,a) values (325,53);
+insert into t (id,a) values (325,54);
+insert into t (id,a) values (325,55);
+insert into t (id,a) values (325,56);
+insert into t (id,a) values (325,57);
+insert into t (id,a) values (325,58);
+insert into t (id,a) values (325,59);
+insert into t (id,a) values (325,60);
+insert into t (id,a) values (325,61);
+insert into t (id,a) values (325,62);
+insert into t (id,a) values (325,63);
+insert into t (id,a) values (325,64);
+insert into t (id,a) values (325,65);
+insert into t (id,a) values (325,66);
+insert into t (id,a) values (325,67);
+insert into t (id,a) values (325,68);
+insert into t (id,a) values (325,69);
+insert into t (id,a) values (325,70);
+insert into t (id,a) values (325,71);
+insert into t (id,a) values (325,72);
+insert into t (id,a) values (325,73);
+insert into t (id,a) values (325,74);
+insert into t (id,a) values (325,75);
+insert into t (id,a) values (325,76);
+insert into t (id,a) values (325,77);
+insert into t (id,a) values (325,78);
+insert into t (id,a) values (325,79);
+insert into t (id,a) values (325,80);
+insert into t (id,a) values (325,81);
+insert into t (id,a) values (325,82);
+insert into t (id,a) values (325,83);
+insert into t (id,a) values (325,84);
+insert into t (id,a) values (325,85);
+insert into t (id,a) values (325,86);
+insert into t (id,a) values (325,87);
+insert into t (id,a) values (325,88);
+insert into t (id,a) values (325,89);
+insert into t (id,a) values (325,90);
+insert into t (id,a) values (325,91);
+insert into t (id,a) values (325,92);
+insert into t (id,a) values (325,93);
+insert into t (id,a) values (325,94);
+insert into t (id,a) values (325,95);
+insert into t (id,a) values (325,96);
+insert into t (id,a) values (325,97);
+insert into t (id,a) values (325,98);
+insert into t (id,a) values (325,99);
+insert into t (id,a) values (326,0);
+insert into t (id,a) values (326,1);
+insert into t (id,a) values (326,2);
+insert into t (id,a) values (326,3);
+insert into t (id,a) values (326,4);
+insert into t (id,a) values (326,5);
+insert into t (id,a) values (326,6);
+insert into t (id,a) values (326,7);
+insert into t (id,a) values (326,8);
+insert into t (id,a) values (326,9);
+insert into t (id,a) values (326,10);
+insert into t (id,a) values (326,11);
+insert into t (id,a) values (326,12);
+insert into t (id,a) values (326,13);
+insert into t (id,a) values (326,14);
+insert into t (id,a) values (326,15);
+insert into t (id,a) values (326,16);
+insert into t (id,a) values (326,17);
+insert into t (id,a) values (326,18);
+insert into t (id,a) values (326,19);
+insert into t (id,a) values (326,20);
+insert into t (id,a) values (326,21);
+insert into t (id,a) values (326,22);
+insert into t (id,a) values (326,23);
+insert into t (id,a) values (326,24);
+insert into t (id,a) values (326,25);
+insert into t (id,a) values (326,26);
+insert into t (id,a) values (326,27);
+insert into t (id,a) values (326,28);
+insert into t (id,a) values (326,29);
+insert into t (id,a) values (326,30);
+insert into t (id,a) values (326,31);
+insert into t (id,a) values (326,32);
+insert into t (id,a) values (326,33);
+insert into t (id,a) values (326,34);
+insert into t (id,a) values (326,35);
+insert into t (id,a) values (326,36);
+insert into t (id,a) values (326,37);
+insert into t (id,a) values (326,38);
+insert into t (id,a) values (326,39);
+insert into t (id,a) values (326,40);
+insert into t (id,a) values (326,41);
+insert into t (id,a) values (326,42);
+insert into t (id,a) values (326,43);
+insert into t (id,a) values (326,44);
+insert into t (id,a) values (326,45);
+insert into t (id,a) values (326,46);
+insert into t (id,a) values (326,47);
+insert into t (id,a) values (326,48);
+insert into t (id,a) values (326,49);
+insert into t (id,a) values (326,50);
+insert into t (id,a) values (326,51);
+insert into t (id,a) values (326,52);
+insert into t (id,a) values (326,53);
+insert into t (id,a) values (326,54);
+insert into t (id,a) values (326,55);
+insert into t (id,a) values (326,56);
+insert into t (id,a) values (326,57);
+insert into t (id,a) values (326,58);
+insert into t (id,a) values (326,59);
+insert into t (id,a) values (326,60);
+insert into t (id,a) values (326,61);
+insert into t (id,a) values (326,62);
+insert into t (id,a) values (326,63);
+insert into t (id,a) values (326,64);
+insert into t (id,a) values (326,65);
+insert into t (id,a) values (326,66);
+insert into t (id,a) values (326,67);
+insert into t (id,a) values (326,68);
+insert into t (id,a) values (326,69);
+insert into t (id,a) values (326,70);
+insert into t (id,a) values (326,71);
+insert into t (id,a) values (326,72);
+insert into t (id,a) values (326,73);
+insert into t (id,a) values (326,74);
+insert into t (id,a) values (326,75);
+insert into t (id,a) values (326,76);
+insert into t (id,a) values (326,77);
+insert into t (id,a) values (326,78);
+insert into t (id,a) values (326,79);
+insert into t (id,a) values (326,80);
+insert into t (id,a) values (326,81);
+insert into t (id,a) values (326,82);
+insert into t (id,a) values (326,83);
+insert into t (id,a) values (326,84);
+insert into t (id,a) values (326,85);
+insert into t (id,a) values (326,86);
+insert into t (id,a) values (326,87);
+insert into t (id,a) values (326,88);
+insert into t (id,a) values (326,89);
+insert into t (id,a) values (326,90);
+insert into t (id,a) values (326,91);
+insert into t (id,a) values (326,92);
+insert into t (id,a) values (326,93);
+insert into t (id,a) values (326,94);
+insert into t (id,a) values (326,95);
+insert into t (id,a) values (326,96);
+insert into t (id,a) values (326,97);
+insert into t (id,a) values (326,98);
+insert into t (id,a) values (326,99);
+insert into t (id,a) values (327,0);
+insert into t (id,a) values (327,1);
+insert into t (id,a) values (327,2);
+insert into t (id,a) values (327,3);
+insert into t (id,a) values (327,4);
+insert into t (id,a) values (327,5);
+insert into t (id,a) values (327,6);
+insert into t (id,a) values (327,7);
+insert into t (id,a) values (327,8);
+insert into t (id,a) values (327,9);
+insert into t (id,a) values (327,10);
+insert into t (id,a) values (327,11);
+insert into t (id,a) values (327,12);
+insert into t (id,a) values (327,13);
+insert into t (id,a) values (327,14);
+insert into t (id,a) values (327,15);
+insert into t (id,a) values (327,16);
+insert into t (id,a) values (327,17);
+insert into t (id,a) values (327,18);
+insert into t (id,a) values (327,19);
+insert into t (id,a) values (327,20);
+insert into t (id,a) values (327,21);
+insert into t (id,a) values (327,22);
+insert into t (id,a) values (327,23);
+insert into t (id,a) values (327,24);
+insert into t (id,a) values (327,25);
+insert into t (id,a) values (327,26);
+insert into t (id,a) values (327,27);
+insert into t (id,a) values (327,28);
+insert into t (id,a) values (327,29);
+insert into t (id,a) values (327,30);
+insert into t (id,a) values (327,31);
+insert into t (id,a) values (327,32);
+insert into t (id,a) values (327,33);
+insert into t (id,a) values (327,34);
+insert into t (id,a) values (327,35);
+insert into t (id,a) values (327,36);
+insert into t (id,a) values (327,37);
+insert into t (id,a) values (327,38);
+insert into t (id,a) values (327,39);
+insert into t (id,a) values (327,40);
+insert into t (id,a) values (327,41);
+insert into t (id,a) values (327,42);
+insert into t (id,a) values (327,43);
+insert into t (id,a) values (327,44);
+insert into t (id,a) values (327,45);
+insert into t (id,a) values (327,46);
+insert into t (id,a) values (327,47);
+insert into t (id,a) values (327,48);
+insert into t (id,a) values (327,49);
+insert into t (id,a) values (327,50);
+insert into t (id,a) values (327,51);
+insert into t (id,a) values (327,52);
+insert into t (id,a) values (327,53);
+insert into t (id,a) values (327,54);
+insert into t (id,a) values (327,55);
+insert into t (id,a) values (327,56);
+insert into t (id,a) values (327,57);
+insert into t (id,a) values (327,58);
+insert into t (id,a) values (327,59);
+insert into t (id,a) values (327,60);
+insert into t (id,a) values (327,61);
+insert into t (id,a) values (327,62);
+insert into t (id,a) values (327,63);
+insert into t (id,a) values (327,64);
+insert into t (id,a) values (327,65);
+insert into t (id,a) values (327,66);
+insert into t (id,a) values (327,67);
+insert into t (id,a) values (327,68);
+insert into t (id,a) values (327,69);
+insert into t (id,a) values (327,70);
+insert into t (id,a) values (327,71);
+insert into t (id,a) values (327,72);
+insert into t (id,a) values (327,73);
+insert into t (id,a) values (327,74);
+insert into t (id,a) values (327,75);
+insert into t (id,a) values (327,76);
+insert into t (id,a) values (327,77);
+insert into t (id,a) values (327,78);
+insert into t (id,a) values (327,79);
+insert into t (id,a) values (327,80);
+insert into t (id,a) values (327,81);
+insert into t (id,a) values (327,82);
+insert into t (id,a) values (327,83);
+insert into t (id,a) values (327,84);
+insert into t (id,a) values (327,85);
+insert into t (id,a) values (327,86);
+insert into t (id,a) values (327,87);
+insert into t (id,a) values (327,88);
+insert into t (id,a) values (327,89);
+insert into t (id,a) values (327,90);
+insert into t (id,a) values (327,91);
+insert into t (id,a) values (327,92);
+insert into t (id,a) values (327,93);
+insert into t (id,a) values (327,94);
+insert into t (id,a) values (327,95);
+insert into t (id,a) values (327,96);
+insert into t (id,a) values (327,97);
+insert into t (id,a) values (327,98);
+insert into t (id,a) values (327,99);
+insert into t (id,a) values (328,0);
+insert into t (id,a) values (328,1);
+insert into t (id,a) values (328,2);
+insert into t (id,a) values (328,3);
+insert into t (id,a) values (328,4);
+insert into t (id,a) values (328,5);
+insert into t (id,a) values (328,6);
+insert into t (id,a) values (328,7);
+insert into t (id,a) values (328,8);
+insert into t (id,a) values (328,9);
+insert into t (id,a) values (328,10);
+insert into t (id,a) values (328,11);
+insert into t (id,a) values (328,12);
+insert into t (id,a) values (328,13);
+insert into t (id,a) values (328,14);
+insert into t (id,a) values (328,15);
+insert into t (id,a) values (328,16);
+insert into t (id,a) values (328,17);
+insert into t (id,a) values (328,18);
+insert into t (id,a) values (328,19);
+insert into t (id,a) values (328,20);
+insert into t (id,a) values (328,21);
+insert into t (id,a) values (328,22);
+insert into t (id,a) values (328,23);
+insert into t (id,a) values (328,24);
+insert into t (id,a) values (328,25);
+insert into t (id,a) values (328,26);
+insert into t (id,a) values (328,27);
+insert into t (id,a) values (328,28);
+insert into t (id,a) values (328,29);
+insert into t (id,a) values (328,30);
+insert into t (id,a) values (328,31);
+insert into t (id,a) values (328,32);
+insert into t (id,a) values (328,33);
+insert into t (id,a) values (328,34);
+insert into t (id,a) values (328,35);
+insert into t (id,a) values (328,36);
+insert into t (id,a) values (328,37);
+insert into t (id,a) values (328,38);
+insert into t (id,a) values (328,39);
+insert into t (id,a) values (328,40);
+insert into t (id,a) values (328,41);
+insert into t (id,a) values (328,42);
+insert into t (id,a) values (328,43);
+insert into t (id,a) values (328,44);
+insert into t (id,a) values (328,45);
+insert into t (id,a) values (328,46);
+insert into t (id,a) values (328,47);
+insert into t (id,a) values (328,48);
+insert into t (id,a) values (328,49);
+insert into t (id,a) values (328,50);
+insert into t (id,a) values (328,51);
+insert into t (id,a) values (328,52);
+insert into t (id,a) values (328,53);
+insert into t (id,a) values (328,54);
+insert into t (id,a) values (328,55);
+insert into t (id,a) values (328,56);
+insert into t (id,a) values (328,57);
+insert into t (id,a) values (328,58);
+insert into t (id,a) values (328,59);
+insert into t (id,a) values (328,60);
+insert into t (id,a) values (328,61);
+insert into t (id,a) values (328,62);
+insert into t (id,a) values (328,63);
+insert into t (id,a) values (328,64);
+insert into t (id,a) values (328,65);
+insert into t (id,a) values (328,66);
+insert into t (id,a) values (328,67);
+insert into t (id,a) values (328,68);
+insert into t (id,a) values (328,69);
+insert into t (id,a) values (328,70);
+insert into t (id,a) values (328,71);
+insert into t (id,a) values (328,72);
+insert into t (id,a) values (328,73);
+insert into t (id,a) values (328,74);
+insert into t (id,a) values (328,75);
+insert into t (id,a) values (328,76);
+insert into t (id,a) values (328,77);
+insert into t (id,a) values (328,78);
+insert into t (id,a) values (328,79);
+insert into t (id,a) values (328,80);
+insert into t (id,a) values (328,81);
+insert into t (id,a) values (328,82);
+insert into t (id,a) values (328,83);
+insert into t (id,a) values (328,84);
+insert into t (id,a) values (328,85);
+insert into t (id,a) values (328,86);
+insert into t (id,a) values (328,87);
+insert into t (id,a) values (328,88);
+insert into t (id,a) values (328,89);
+insert into t (id,a) values (328,90);
+insert into t (id,a) values (328,91);
+insert into t (id,a) values (328,92);
+insert into t (id,a) values (328,93);
+insert into t (id,a) values (328,94);
+insert into t (id,a) values (328,95);
+insert into t (id,a) values (328,96);
+insert into t (id,a) values (328,97);
+insert into t (id,a) values (328,98);
+insert into t (id,a) values (328,99);
+insert into t (id,a) values (329,0);
+insert into t (id,a) values (329,1);
+insert into t (id,a) values (329,2);
+insert into t (id,a) values (329,3);
+insert into t (id,a) values (329,4);
+insert into t (id,a) values (329,5);
+insert into t (id,a) values (329,6);
+insert into t (id,a) values (329,7);
+insert into t (id,a) values (329,8);
+insert into t (id,a) values (329,9);
+insert into t (id,a) values (329,10);
+insert into t (id,a) values (329,11);
+insert into t (id,a) values (329,12);
+insert into t (id,a) values (329,13);
+insert into t (id,a) values (329,14);
+insert into t (id,a) values (329,15);
+insert into t (id,a) values (329,16);
+insert into t (id,a) values (329,17);
+insert into t (id,a) values (329,18);
+insert into t (id,a) values (329,19);
+insert into t (id,a) values (329,20);
+insert into t (id,a) values (329,21);
+insert into t (id,a) values (329,22);
+insert into t (id,a) values (329,23);
+insert into t (id,a) values (329,24);
+insert into t (id,a) values (329,25);
+insert into t (id,a) values (329,26);
+insert into t (id,a) values (329,27);
+insert into t (id,a) values (329,28);
+insert into t (id,a) values (329,29);
+insert into t (id,a) values (329,30);
+insert into t (id,a) values (329,31);
+insert into t (id,a) values (329,32);
+insert into t (id,a) values (329,33);
+insert into t (id,a) values (329,34);
+insert into t (id,a) values (329,35);
+insert into t (id,a) values (329,36);
+insert into t (id,a) values (329,37);
+insert into t (id,a) values (329,38);
+insert into t (id,a) values (329,39);
+insert into t (id,a) values (329,40);
+insert into t (id,a) values (329,41);
+insert into t (id,a) values (329,42);
+insert into t (id,a) values (329,43);
+insert into t (id,a) values (329,44);
+insert into t (id,a) values (329,45);
+insert into t (id,a) values (329,46);
+insert into t (id,a) values (329,47);
+insert into t (id,a) values (329,48);
+insert into t (id,a) values (329,49);
+insert into t (id,a) values (329,50);
+insert into t (id,a) values (329,51);
+insert into t (id,a) values (329,52);
+insert into t (id,a) values (329,53);
+insert into t (id,a) values (329,54);
+insert into t (id,a) values (329,55);
+insert into t (id,a) values (329,56);
+insert into t (id,a) values (329,57);
+insert into t (id,a) values (329,58);
+insert into t (id,a) values (329,59);
+insert into t (id,a) values (329,60);
+insert into t (id,a) values (329,61);
+insert into t (id,a) values (329,62);
+insert into t (id,a) values (329,63);
+insert into t (id,a) values (329,64);
+insert into t (id,a) values (329,65);
+insert into t (id,a) values (329,66);
+insert into t (id,a) values (329,67);
+insert into t (id,a) values (329,68);
+insert into t (id,a) values (329,69);
+insert into t (id,a) values (329,70);
+insert into t (id,a) values (329,71);
+insert into t (id,a) values (329,72);
+insert into t (id,a) values (329,73);
+insert into t (id,a) values (329,74);
+insert into t (id,a) values (329,75);
+insert into t (id,a) values (329,76);
+insert into t (id,a) values (329,77);
+insert into t (id,a) values (329,78);
+insert into t (id,a) values (329,79);
+insert into t (id,a) values (329,80);
+insert into t (id,a) values (329,81);
+insert into t (id,a) values (329,82);
+insert into t (id,a) values (329,83);
+insert into t (id,a) values (329,84);
+insert into t (id,a) values (329,85);
+insert into t (id,a) values (329,86);
+insert into t (id,a) values (329,87);
+insert into t (id,a) values (329,88);
+insert into t (id,a) values (329,89);
+insert into t (id,a) values (329,90);
+insert into t (id,a) values (329,91);
+insert into t (id,a) values (329,92);
+insert into t (id,a) values (329,93);
+insert into t (id,a) values (329,94);
+insert into t (id,a) values (329,95);
+insert into t (id,a) values (329,96);
+insert into t (id,a) values (329,97);
+insert into t (id,a) values (329,98);
+insert into t (id,a) values (329,99);
+insert into t (id,a) values (330,0);
+insert into t (id,a) values (330,1);
+insert into t (id,a) values (330,2);
+insert into t (id,a) values (330,3);
+insert into t (id,a) values (330,4);
+insert into t (id,a) values (330,5);
+insert into t (id,a) values (330,6);
+insert into t (id,a) values (330,7);
+insert into t (id,a) values (330,8);
+insert into t (id,a) values (330,9);
+insert into t (id,a) values (330,10);
+insert into t (id,a) values (330,11);
+insert into t (id,a) values (330,12);
+insert into t (id,a) values (330,13);
+insert into t (id,a) values (330,14);
+insert into t (id,a) values (330,15);
+insert into t (id,a) values (330,16);
+insert into t (id,a) values (330,17);
+insert into t (id,a) values (330,18);
+insert into t (id,a) values (330,19);
+insert into t (id,a) values (330,20);
+insert into t (id,a) values (330,21);
+insert into t (id,a) values (330,22);
+insert into t (id,a) values (330,23);
+insert into t (id,a) values (330,24);
+insert into t (id,a) values (330,25);
+insert into t (id,a) values (330,26);
+insert into t (id,a) values (330,27);
+insert into t (id,a) values (330,28);
+insert into t (id,a) values (330,29);
+insert into t (id,a) values (330,30);
+insert into t (id,a) values (330,31);
+insert into t (id,a) values (330,32);
+insert into t (id,a) values (330,33);
+insert into t (id,a) values (330,34);
+insert into t (id,a) values (330,35);
+insert into t (id,a) values (330,36);
+insert into t (id,a) values (330,37);
+insert into t (id,a) values (330,38);
+insert into t (id,a) values (330,39);
+insert into t (id,a) values (330,40);
+insert into t (id,a) values (330,41);
+insert into t (id,a) values (330,42);
+insert into t (id,a) values (330,43);
+insert into t (id,a) values (330,44);
+insert into t (id,a) values (330,45);
+insert into t (id,a) values (330,46);
+insert into t (id,a) values (330,47);
+insert into t (id,a) values (330,48);
+insert into t (id,a) values (330,49);
+insert into t (id,a) values (330,50);
+insert into t (id,a) values (330,51);
+insert into t (id,a) values (330,52);
+insert into t (id,a) values (330,53);
+insert into t (id,a) values (330,54);
+insert into t (id,a) values (330,55);
+insert into t (id,a) values (330,56);
+insert into t (id,a) values (330,57);
+insert into t (id,a) values (330,58);
+insert into t (id,a) values (330,59);
+insert into t (id,a) values (330,60);
+insert into t (id,a) values (330,61);
+insert into t (id,a) values (330,62);
+insert into t (id,a) values (330,63);
+insert into t (id,a) values (330,64);
+insert into t (id,a) values (330,65);
+insert into t (id,a) values (330,66);
+insert into t (id,a) values (330,67);
+insert into t (id,a) values (330,68);
+insert into t (id,a) values (330,69);
+insert into t (id,a) values (330,70);
+insert into t (id,a) values (330,71);
+insert into t (id,a) values (330,72);
+insert into t (id,a) values (330,73);
+insert into t (id,a) values (330,74);
+insert into t (id,a) values (330,75);
+insert into t (id,a) values (330,76);
+insert into t (id,a) values (330,77);
+insert into t (id,a) values (330,78);
+insert into t (id,a) values (330,79);
+insert into t (id,a) values (330,80);
+insert into t (id,a) values (330,81);
+insert into t (id,a) values (330,82);
+insert into t (id,a) values (330,83);
+insert into t (id,a) values (330,84);
+insert into t (id,a) values (330,85);
+insert into t (id,a) values (330,86);
+insert into t (id,a) values (330,87);
+insert into t (id,a) values (330,88);
+insert into t (id,a) values (330,89);
+insert into t (id,a) values (330,90);
+insert into t (id,a) values (330,91);
+insert into t (id,a) values (330,92);
+insert into t (id,a) values (330,93);
+insert into t (id,a) values (330,94);
+insert into t (id,a) values (330,95);
+insert into t (id,a) values (330,96);
+insert into t (id,a) values (330,97);
+insert into t (id,a) values (330,98);
+insert into t (id,a) values (330,99);
+insert into t (id,a) values (331,0);
+insert into t (id,a) values (331,1);
+insert into t (id,a) values (331,2);
+insert into t (id,a) values (331,3);
+insert into t (id,a) values (331,4);
+insert into t (id,a) values (331,5);
+insert into t (id,a) values (331,6);
+insert into t (id,a) values (331,7);
+insert into t (id,a) values (331,8);
+insert into t (id,a) values (331,9);
+insert into t (id,a) values (331,10);
+insert into t (id,a) values (331,11);
+insert into t (id,a) values (331,12);
+insert into t (id,a) values (331,13);
+insert into t (id,a) values (331,14);
+insert into t (id,a) values (331,15);
+insert into t (id,a) values (331,16);
+insert into t (id,a) values (331,17);
+insert into t (id,a) values (331,18);
+insert into t (id,a) values (331,19);
+insert into t (id,a) values (331,20);
+insert into t (id,a) values (331,21);
+insert into t (id,a) values (331,22);
+insert into t (id,a) values (331,23);
+insert into t (id,a) values (331,24);
+insert into t (id,a) values (331,25);
+insert into t (id,a) values (331,26);
+insert into t (id,a) values (331,27);
+insert into t (id,a) values (331,28);
+insert into t (id,a) values (331,29);
+insert into t (id,a) values (331,30);
+insert into t (id,a) values (331,31);
+insert into t (id,a) values (331,32);
+insert into t (id,a) values (331,33);
+insert into t (id,a) values (331,34);
+insert into t (id,a) values (331,35);
+insert into t (id,a) values (331,36);
+insert into t (id,a) values (331,37);
+insert into t (id,a) values (331,38);
+insert into t (id,a) values (331,39);
+insert into t (id,a) values (331,40);
+insert into t (id,a) values (331,41);
+insert into t (id,a) values (331,42);
+insert into t (id,a) values (331,43);
+insert into t (id,a) values (331,44);
+insert into t (id,a) values (331,45);
+insert into t (id,a) values (331,46);
+insert into t (id,a) values (331,47);
+insert into t (id,a) values (331,48);
+insert into t (id,a) values (331,49);
+insert into t (id,a) values (331,50);
+insert into t (id,a) values (331,51);
+insert into t (id,a) values (331,52);
+insert into t (id,a) values (331,53);
+insert into t (id,a) values (331,54);
+insert into t (id,a) values (331,55);
+insert into t (id,a) values (331,56);
+insert into t (id,a) values (331,57);
+insert into t (id,a) values (331,58);
+insert into t (id,a) values (331,59);
+insert into t (id,a) values (331,60);
+insert into t (id,a) values (331,61);
+insert into t (id,a) values (331,62);
+insert into t (id,a) values (331,63);
+insert into t (id,a) values (331,64);
+insert into t (id,a) values (331,65);
+insert into t (id,a) values (331,66);
+insert into t (id,a) values (331,67);
+insert into t (id,a) values (331,68);
+insert into t (id,a) values (331,69);
+insert into t (id,a) values (331,70);
+insert into t (id,a) values (331,71);
+insert into t (id,a) values (331,72);
+insert into t (id,a) values (331,73);
+insert into t (id,a) values (331,74);
+insert into t (id,a) values (331,75);
+insert into t (id,a) values (331,76);
+insert into t (id,a) values (331,77);
+insert into t (id,a) values (331,78);
+insert into t (id,a) values (331,79);
+insert into t (id,a) values (331,80);
+insert into t (id,a) values (331,81);
+insert into t (id,a) values (331,82);
+insert into t (id,a) values (331,83);
+insert into t (id,a) values (331,84);
+insert into t (id,a) values (331,85);
+insert into t (id,a) values (331,86);
+insert into t (id,a) values (331,87);
+insert into t (id,a) values (331,88);
+insert into t (id,a) values (331,89);
+insert into t (id,a) values (331,90);
+insert into t (id,a) values (331,91);
+insert into t (id,a) values (331,92);
+insert into t (id,a) values (331,93);
+insert into t (id,a) values (331,94);
+insert into t (id,a) values (331,95);
+insert into t (id,a) values (331,96);
+insert into t (id,a) values (331,97);
+insert into t (id,a) values (331,98);
+insert into t (id,a) values (331,99);
+insert into t (id,a) values (332,0);
+insert into t (id,a) values (332,1);
+insert into t (id,a) values (332,2);
+insert into t (id,a) values (332,3);
+insert into t (id,a) values (332,4);
+insert into t (id,a) values (332,5);
+insert into t (id,a) values (332,6);
+insert into t (id,a) values (332,7);
+insert into t (id,a) values (332,8);
+insert into t (id,a) values (332,9);
+insert into t (id,a) values (332,10);
+insert into t (id,a) values (332,11);
+insert into t (id,a) values (332,12);
+insert into t (id,a) values (332,13);
+insert into t (id,a) values (332,14);
+insert into t (id,a) values (332,15);
+insert into t (id,a) values (332,16);
+insert into t (id,a) values (332,17);
+insert into t (id,a) values (332,18);
+insert into t (id,a) values (332,19);
+insert into t (id,a) values (332,20);
+insert into t (id,a) values (332,21);
+insert into t (id,a) values (332,22);
+insert into t (id,a) values (332,23);
+insert into t (id,a) values (332,24);
+insert into t (id,a) values (332,25);
+insert into t (id,a) values (332,26);
+insert into t (id,a) values (332,27);
+insert into t (id,a) values (332,28);
+insert into t (id,a) values (332,29);
+insert into t (id,a) values (332,30);
+insert into t (id,a) values (332,31);
+insert into t (id,a) values (332,32);
+insert into t (id,a) values (332,33);
+insert into t (id,a) values (332,34);
+insert into t (id,a) values (332,35);
+insert into t (id,a) values (332,36);
+insert into t (id,a) values (332,37);
+insert into t (id,a) values (332,38);
+insert into t (id,a) values (332,39);
+insert into t (id,a) values (332,40);
+insert into t (id,a) values (332,41);
+insert into t (id,a) values (332,42);
+insert into t (id,a) values (332,43);
+insert into t (id,a) values (332,44);
+insert into t (id,a) values (332,45);
+insert into t (id,a) values (332,46);
+insert into t (id,a) values (332,47);
+insert into t (id,a) values (332,48);
+insert into t (id,a) values (332,49);
+insert into t (id,a) values (332,50);
+insert into t (id,a) values (332,51);
+insert into t (id,a) values (332,52);
+insert into t (id,a) values (332,53);
+insert into t (id,a) values (332,54);
+insert into t (id,a) values (332,55);
+insert into t (id,a) values (332,56);
+insert into t (id,a) values (332,57);
+insert into t (id,a) values (332,58);
+insert into t (id,a) values (332,59);
+insert into t (id,a) values (332,60);
+insert into t (id,a) values (332,61);
+insert into t (id,a) values (332,62);
+insert into t (id,a) values (332,63);
+insert into t (id,a) values (332,64);
+insert into t (id,a) values (332,65);
+insert into t (id,a) values (332,66);
+insert into t (id,a) values (332,67);
+insert into t (id,a) values (332,68);
+insert into t (id,a) values (332,69);
+insert into t (id,a) values (332,70);
+insert into t (id,a) values (332,71);
+insert into t (id,a) values (332,72);
+insert into t (id,a) values (332,73);
+insert into t (id,a) values (332,74);
+insert into t (id,a) values (332,75);
+insert into t (id,a) values (332,76);
+insert into t (id,a) values (332,77);
+insert into t (id,a) values (332,78);
+insert into t (id,a) values (332,79);
+insert into t (id,a) values (332,80);
+insert into t (id,a) values (332,81);
+insert into t (id,a) values (332,82);
+insert into t (id,a) values (332,83);
+insert into t (id,a) values (332,84);
+insert into t (id,a) values (332,85);
+insert into t (id,a) values (332,86);
+insert into t (id,a) values (332,87);
+insert into t (id,a) values (332,88);
+insert into t (id,a) values (332,89);
+insert into t (id,a) values (332,90);
+insert into t (id,a) values (332,91);
+insert into t (id,a) values (332,92);
+insert into t (id,a) values (332,93);
+insert into t (id,a) values (332,94);
+insert into t (id,a) values (332,95);
+insert into t (id,a) values (332,96);
+insert into t (id,a) values (332,97);
+insert into t (id,a) values (332,98);
+insert into t (id,a) values (332,99);
+insert into t (id,a) values (333,0);
+insert into t (id,a) values (333,1);
+insert into t (id,a) values (333,2);
+insert into t (id,a) values (333,3);
+insert into t (id,a) values (333,4);
+insert into t (id,a) values (333,5);
+insert into t (id,a) values (333,6);
+insert into t (id,a) values (333,7);
+insert into t (id,a) values (333,8);
+insert into t (id,a) values (333,9);
+insert into t (id,a) values (333,10);
+insert into t (id,a) values (333,11);
+insert into t (id,a) values (333,12);
+insert into t (id,a) values (333,13);
+insert into t (id,a) values (333,14);
+insert into t (id,a) values (333,15);
+insert into t (id,a) values (333,16);
+insert into t (id,a) values (333,17);
+insert into t (id,a) values (333,18);
+insert into t (id,a) values (333,19);
+insert into t (id,a) values (333,20);
+insert into t (id,a) values (333,21);
+insert into t (id,a) values (333,22);
+insert into t (id,a) values (333,23);
+insert into t (id,a) values (333,24);
+insert into t (id,a) values (333,25);
+insert into t (id,a) values (333,26);
+insert into t (id,a) values (333,27);
+insert into t (id,a) values (333,28);
+insert into t (id,a) values (333,29);
+insert into t (id,a) values (333,30);
+insert into t (id,a) values (333,31);
+insert into t (id,a) values (333,32);
+insert into t (id,a) values (333,33);
+insert into t (id,a) values (333,34);
+insert into t (id,a) values (333,35);
+insert into t (id,a) values (333,36);
+insert into t (id,a) values (333,37);
+insert into t (id,a) values (333,38);
+insert into t (id,a) values (333,39);
+insert into t (id,a) values (333,40);
+insert into t (id,a) values (333,41);
+insert into t (id,a) values (333,42);
+insert into t (id,a) values (333,43);
+insert into t (id,a) values (333,44);
+insert into t (id,a) values (333,45);
+insert into t (id,a) values (333,46);
+insert into t (id,a) values (333,47);
+insert into t (id,a) values (333,48);
+insert into t (id,a) values (333,49);
+insert into t (id,a) values (333,50);
+insert into t (id,a) values (333,51);
+insert into t (id,a) values (333,52);
+insert into t (id,a) values (333,53);
+insert into t (id,a) values (333,54);
+insert into t (id,a) values (333,55);
+insert into t (id,a) values (333,56);
+insert into t (id,a) values (333,57);
+insert into t (id,a) values (333,58);
+insert into t (id,a) values (333,59);
+insert into t (id,a) values (333,60);
+insert into t (id,a) values (333,61);
+insert into t (id,a) values (333,62);
+insert into t (id,a) values (333,63);
+insert into t (id,a) values (333,64);
+insert into t (id,a) values (333,65);
+insert into t (id,a) values (333,66);
+insert into t (id,a) values (333,67);
+insert into t (id,a) values (333,68);
+insert into t (id,a) values (333,69);
+insert into t (id,a) values (333,70);
+insert into t (id,a) values (333,71);
+insert into t (id,a) values (333,72);
+insert into t (id,a) values (333,73);
+insert into t (id,a) values (333,74);
+insert into t (id,a) values (333,75);
+insert into t (id,a) values (333,76);
+insert into t (id,a) values (333,77);
+insert into t (id,a) values (333,78);
+insert into t (id,a) values (333,79);
+insert into t (id,a) values (333,80);
+insert into t (id,a) values (333,81);
+insert into t (id,a) values (333,82);
+insert into t (id,a) values (333,83);
+insert into t (id,a) values (333,84);
+insert into t (id,a) values (333,85);
+insert into t (id,a) values (333,86);
+insert into t (id,a) values (333,87);
+insert into t (id,a) values (333,88);
+insert into t (id,a) values (333,89);
+insert into t (id,a) values (333,90);
+insert into t (id,a) values (333,91);
+insert into t (id,a) values (333,92);
+insert into t (id,a) values (333,93);
+insert into t (id,a) values (333,94);
+insert into t (id,a) values (333,95);
+insert into t (id,a) values (333,96);
+insert into t (id,a) values (333,97);
+insert into t (id,a) values (333,98);
+insert into t (id,a) values (333,99);
+insert into t (id,a) values (334,0);
+insert into t (id,a) values (334,1);
+insert into t (id,a) values (334,2);
+insert into t (id,a) values (334,3);
+insert into t (id,a) values (334,4);
+insert into t (id,a) values (334,5);
+insert into t (id,a) values (334,6);
+insert into t (id,a) values (334,7);
+insert into t (id,a) values (334,8);
+insert into t (id,a) values (334,9);
+insert into t (id,a) values (334,10);
+insert into t (id,a) values (334,11);
+insert into t (id,a) values (334,12);
+insert into t (id,a) values (334,13);
+insert into t (id,a) values (334,14);
+insert into t (id,a) values (334,15);
+insert into t (id,a) values (334,16);
+insert into t (id,a) values (334,17);
+insert into t (id,a) values (334,18);
+insert into t (id,a) values (334,19);
+insert into t (id,a) values (334,20);
+insert into t (id,a) values (334,21);
+insert into t (id,a) values (334,22);
+insert into t (id,a) values (334,23);
+insert into t (id,a) values (334,24);
+insert into t (id,a) values (334,25);
+insert into t (id,a) values (334,26);
+insert into t (id,a) values (334,27);
+insert into t (id,a) values (334,28);
+insert into t (id,a) values (334,29);
+insert into t (id,a) values (334,30);
+insert into t (id,a) values (334,31);
+insert into t (id,a) values (334,32);
+insert into t (id,a) values (334,33);
+insert into t (id,a) values (334,34);
+insert into t (id,a) values (334,35);
+insert into t (id,a) values (334,36);
+insert into t (id,a) values (334,37);
+insert into t (id,a) values (334,38);
+insert into t (id,a) values (334,39);
+insert into t (id,a) values (334,40);
+insert into t (id,a) values (334,41);
+insert into t (id,a) values (334,42);
+insert into t (id,a) values (334,43);
+insert into t (id,a) values (334,44);
+insert into t (id,a) values (334,45);
+insert into t (id,a) values (334,46);
+insert into t (id,a) values (334,47);
+insert into t (id,a) values (334,48);
+insert into t (id,a) values (334,49);
+insert into t (id,a) values (334,50);
+insert into t (id,a) values (334,51);
+insert into t (id,a) values (334,52);
+insert into t (id,a) values (334,53);
+insert into t (id,a) values (334,54);
+insert into t (id,a) values (334,55);
+insert into t (id,a) values (334,56);
+insert into t (id,a) values (334,57);
+insert into t (id,a) values (334,58);
+insert into t (id,a) values (334,59);
+insert into t (id,a) values (334,60);
+insert into t (id,a) values (334,61);
+insert into t (id,a) values (334,62);
+insert into t (id,a) values (334,63);
+insert into t (id,a) values (334,64);
+insert into t (id,a) values (334,65);
+insert into t (id,a) values (334,66);
+insert into t (id,a) values (334,67);
+insert into t (id,a) values (334,68);
+insert into t (id,a) values (334,69);
+insert into t (id,a) values (334,70);
+insert into t (id,a) values (334,71);
+insert into t (id,a) values (334,72);
+insert into t (id,a) values (334,73);
+insert into t (id,a) values (334,74);
+insert into t (id,a) values (334,75);
+insert into t (id,a) values (334,76);
+insert into t (id,a) values (334,77);
+insert into t (id,a) values (334,78);
+insert into t (id,a) values (334,79);
+insert into t (id,a) values (334,80);
+insert into t (id,a) values (334,81);
+insert into t (id,a) values (334,82);
+insert into t (id,a) values (334,83);
+insert into t (id,a) values (334,84);
+insert into t (id,a) values (334,85);
+insert into t (id,a) values (334,86);
+insert into t (id,a) values (334,87);
+insert into t (id,a) values (334,88);
+insert into t (id,a) values (334,89);
+insert into t (id,a) values (334,90);
+insert into t (id,a) values (334,91);
+insert into t (id,a) values (334,92);
+insert into t (id,a) values (334,93);
+insert into t (id,a) values (334,94);
+insert into t (id,a) values (334,95);
+insert into t (id,a) values (334,96);
+insert into t (id,a) values (334,97);
+insert into t (id,a) values (334,98);
+insert into t (id,a) values (334,99);
+insert into t (id,a) values (335,0);
+insert into t (id,a) values (335,1);
+insert into t (id,a) values (335,2);
+insert into t (id,a) values (335,3);
+insert into t (id,a) values (335,4);
+insert into t (id,a) values (335,5);
+insert into t (id,a) values (335,6);
+insert into t (id,a) values (335,7);
+insert into t (id,a) values (335,8);
+insert into t (id,a) values (335,9);
+insert into t (id,a) values (335,10);
+insert into t (id,a) values (335,11);
+insert into t (id,a) values (335,12);
+insert into t (id,a) values (335,13);
+insert into t (id,a) values (335,14);
+insert into t (id,a) values (335,15);
+insert into t (id,a) values (335,16);
+insert into t (id,a) values (335,17);
+insert into t (id,a) values (335,18);
+insert into t (id,a) values (335,19);
+insert into t (id,a) values (335,20);
+insert into t (id,a) values (335,21);
+insert into t (id,a) values (335,22);
+insert into t (id,a) values (335,23);
+insert into t (id,a) values (335,24);
+insert into t (id,a) values (335,25);
+insert into t (id,a) values (335,26);
+insert into t (id,a) values (335,27);
+insert into t (id,a) values (335,28);
+insert into t (id,a) values (335,29);
+insert into t (id,a) values (335,30);
+insert into t (id,a) values (335,31);
+insert into t (id,a) values (335,32);
+insert into t (id,a) values (335,33);
+insert into t (id,a) values (335,34);
+insert into t (id,a) values (335,35);
+insert into t (id,a) values (335,36);
+insert into t (id,a) values (335,37);
+insert into t (id,a) values (335,38);
+insert into t (id,a) values (335,39);
+insert into t (id,a) values (335,40);
+insert into t (id,a) values (335,41);
+insert into t (id,a) values (335,42);
+insert into t (id,a) values (335,43);
+insert into t (id,a) values (335,44);
+insert into t (id,a) values (335,45);
+insert into t (id,a) values (335,46);
+insert into t (id,a) values (335,47);
+insert into t (id,a) values (335,48);
+insert into t (id,a) values (335,49);
+insert into t (id,a) values (335,50);
+insert into t (id,a) values (335,51);
+insert into t (id,a) values (335,52);
+insert into t (id,a) values (335,53);
+insert into t (id,a) values (335,54);
+insert into t (id,a) values (335,55);
+insert into t (id,a) values (335,56);
+insert into t (id,a) values (335,57);
+insert into t (id,a) values (335,58);
+insert into t (id,a) values (335,59);
+insert into t (id,a) values (335,60);
+insert into t (id,a) values (335,61);
+insert into t (id,a) values (335,62);
+insert into t (id,a) values (335,63);
+insert into t (id,a) values (335,64);
+insert into t (id,a) values (335,65);
+insert into t (id,a) values (335,66);
+insert into t (id,a) values (335,67);
+insert into t (id,a) values (335,68);
+insert into t (id,a) values (335,69);
+insert into t (id,a) values (335,70);
+insert into t (id,a) values (335,71);
+insert into t (id,a) values (335,72);
+insert into t (id,a) values (335,73);
+insert into t (id,a) values (335,74);
+insert into t (id,a) values (335,75);
+insert into t (id,a) values (335,76);
+insert into t (id,a) values (335,77);
+insert into t (id,a) values (335,78);
+insert into t (id,a) values (335,79);
+insert into t (id,a) values (335,80);
+insert into t (id,a) values (335,81);
+insert into t (id,a) values (335,82);
+insert into t (id,a) values (335,83);
+insert into t (id,a) values (335,84);
+insert into t (id,a) values (335,85);
+insert into t (id,a) values (335,86);
+insert into t (id,a) values (335,87);
+insert into t (id,a) values (335,88);
+insert into t (id,a) values (335,89);
+insert into t (id,a) values (335,90);
+insert into t (id,a) values (335,91);
+insert into t (id,a) values (335,92);
+insert into t (id,a) values (335,93);
+insert into t (id,a) values (335,94);
+insert into t (id,a) values (335,95);
+insert into t (id,a) values (335,96);
+insert into t (id,a) values (335,97);
+insert into t (id,a) values (335,98);
+insert into t (id,a) values (335,99);
+insert into t (id,a) values (336,0);
+insert into t (id,a) values (336,1);
+insert into t (id,a) values (336,2);
+insert into t (id,a) values (336,3);
+insert into t (id,a) values (336,4);
+insert into t (id,a) values (336,5);
+insert into t (id,a) values (336,6);
+insert into t (id,a) values (336,7);
+insert into t (id,a) values (336,8);
+insert into t (id,a) values (336,9);
+insert into t (id,a) values (336,10);
+insert into t (id,a) values (336,11);
+insert into t (id,a) values (336,12);
+insert into t (id,a) values (336,13);
+insert into t (id,a) values (336,14);
+insert into t (id,a) values (336,15);
+insert into t (id,a) values (336,16);
+insert into t (id,a) values (336,17);
+insert into t (id,a) values (336,18);
+insert into t (id,a) values (336,19);
+insert into t (id,a) values (336,20);
+insert into t (id,a) values (336,21);
+insert into t (id,a) values (336,22);
+insert into t (id,a) values (336,23);
+insert into t (id,a) values (336,24);
+insert into t (id,a) values (336,25);
+insert into t (id,a) values (336,26);
+insert into t (id,a) values (336,27);
+insert into t (id,a) values (336,28);
+insert into t (id,a) values (336,29);
+insert into t (id,a) values (336,30);
+insert into t (id,a) values (336,31);
+insert into t (id,a) values (336,32);
+insert into t (id,a) values (336,33);
+insert into t (id,a) values (336,34);
+insert into t (id,a) values (336,35);
+insert into t (id,a) values (336,36);
+insert into t (id,a) values (336,37);
+insert into t (id,a) values (336,38);
+insert into t (id,a) values (336,39);
+insert into t (id,a) values (336,40);
+insert into t (id,a) values (336,41);
+insert into t (id,a) values (336,42);
+insert into t (id,a) values (336,43);
+insert into t (id,a) values (336,44);
+insert into t (id,a) values (336,45);
+insert into t (id,a) values (336,46);
+insert into t (id,a) values (336,47);
+insert into t (id,a) values (336,48);
+insert into t (id,a) values (336,49);
+insert into t (id,a) values (336,50);
+insert into t (id,a) values (336,51);
+insert into t (id,a) values (336,52);
+insert into t (id,a) values (336,53);
+insert into t (id,a) values (336,54);
+insert into t (id,a) values (336,55);
+insert into t (id,a) values (336,56);
+insert into t (id,a) values (336,57);
+insert into t (id,a) values (336,58);
+insert into t (id,a) values (336,59);
+insert into t (id,a) values (336,60);
+insert into t (id,a) values (336,61);
+insert into t (id,a) values (336,62);
+insert into t (id,a) values (336,63);
+insert into t (id,a) values (336,64);
+insert into t (id,a) values (336,65);
+insert into t (id,a) values (336,66);
+insert into t (id,a) values (336,67);
+insert into t (id,a) values (336,68);
+insert into t (id,a) values (336,69);
+insert into t (id,a) values (336,70);
+insert into t (id,a) values (336,71);
+insert into t (id,a) values (336,72);
+insert into t (id,a) values (336,73);
+insert into t (id,a) values (336,74);
+insert into t (id,a) values (336,75);
+insert into t (id,a) values (336,76);
+insert into t (id,a) values (336,77);
+insert into t (id,a) values (336,78);
+insert into t (id,a) values (336,79);
+insert into t (id,a) values (336,80);
+insert into t (id,a) values (336,81);
+insert into t (id,a) values (336,82);
+insert into t (id,a) values (336,83);
+insert into t (id,a) values (336,84);
+insert into t (id,a) values (336,85);
+insert into t (id,a) values (336,86);
+insert into t (id,a) values (336,87);
+insert into t (id,a) values (336,88);
+insert into t (id,a) values (336,89);
+insert into t (id,a) values (336,90);
+insert into t (id,a) values (336,91);
+insert into t (id,a) values (336,92);
+insert into t (id,a) values (336,93);
+insert into t (id,a) values (336,94);
+insert into t (id,a) values (336,95);
+insert into t (id,a) values (336,96);
+insert into t (id,a) values (336,97);
+insert into t (id,a) values (336,98);
+insert into t (id,a) values (336,99);
+insert into t (id,a) values (337,0);
+insert into t (id,a) values (337,1);
+insert into t (id,a) values (337,2);
+insert into t (id,a) values (337,3);
+insert into t (id,a) values (337,4);
+insert into t (id,a) values (337,5);
+insert into t (id,a) values (337,6);
+insert into t (id,a) values (337,7);
+insert into t (id,a) values (337,8);
+insert into t (id,a) values (337,9);
+insert into t (id,a) values (337,10);
+insert into t (id,a) values (337,11);
+insert into t (id,a) values (337,12);
+insert into t (id,a) values (337,13);
+insert into t (id,a) values (337,14);
+insert into t (id,a) values (337,15);
+insert into t (id,a) values (337,16);
+insert into t (id,a) values (337,17);
+insert into t (id,a) values (337,18);
+insert into t (id,a) values (337,19);
+insert into t (id,a) values (337,20);
+insert into t (id,a) values (337,21);
+insert into t (id,a) values (337,22);
+insert into t (id,a) values (337,23);
+insert into t (id,a) values (337,24);
+insert into t (id,a) values (337,25);
+insert into t (id,a) values (337,26);
+insert into t (id,a) values (337,27);
+insert into t (id,a) values (337,28);
+insert into t (id,a) values (337,29);
+insert into t (id,a) values (337,30);
+insert into t (id,a) values (337,31);
+insert into t (id,a) values (337,32);
+insert into t (id,a) values (337,33);
+insert into t (id,a) values (337,34);
+insert into t (id,a) values (337,35);
+insert into t (id,a) values (337,36);
+insert into t (id,a) values (337,37);
+insert into t (id,a) values (337,38);
+insert into t (id,a) values (337,39);
+insert into t (id,a) values (337,40);
+insert into t (id,a) values (337,41);
+insert into t (id,a) values (337,42);
+insert into t (id,a) values (337,43);
+insert into t (id,a) values (337,44);
+insert into t (id,a) values (337,45);
+insert into t (id,a) values (337,46);
+insert into t (id,a) values (337,47);
+insert into t (id,a) values (337,48);
+insert into t (id,a) values (337,49);
+insert into t (id,a) values (337,50);
+insert into t (id,a) values (337,51);
+insert into t (id,a) values (337,52);
+insert into t (id,a) values (337,53);
+insert into t (id,a) values (337,54);
+insert into t (id,a) values (337,55);
+insert into t (id,a) values (337,56);
+insert into t (id,a) values (337,57);
+insert into t (id,a) values (337,58);
+insert into t (id,a) values (337,59);
+insert into t (id,a) values (337,60);
+insert into t (id,a) values (337,61);
+insert into t (id,a) values (337,62);
+insert into t (id,a) values (337,63);
+insert into t (id,a) values (337,64);
+insert into t (id,a) values (337,65);
+insert into t (id,a) values (337,66);
+insert into t (id,a) values (337,67);
+insert into t (id,a) values (337,68);
+insert into t (id,a) values (337,69);
+insert into t (id,a) values (337,70);
+insert into t (id,a) values (337,71);
+insert into t (id,a) values (337,72);
+insert into t (id,a) values (337,73);
+insert into t (id,a) values (337,74);
+insert into t (id,a) values (337,75);
+insert into t (id,a) values (337,76);
+insert into t (id,a) values (337,77);
+insert into t (id,a) values (337,78);
+insert into t (id,a) values (337,79);
+insert into t (id,a) values (337,80);
+insert into t (id,a) values (337,81);
+insert into t (id,a) values (337,82);
+insert into t (id,a) values (337,83);
+insert into t (id,a) values (337,84);
+insert into t (id,a) values (337,85);
+insert into t (id,a) values (337,86);
+insert into t (id,a) values (337,87);
+insert into t (id,a) values (337,88);
+insert into t (id,a) values (337,89);
+insert into t (id,a) values (337,90);
+insert into t (id,a) values (337,91);
+insert into t (id,a) values (337,92);
+insert into t (id,a) values (337,93);
+insert into t (id,a) values (337,94);
+insert into t (id,a) values (337,95);
+insert into t (id,a) values (337,96);
+insert into t (id,a) values (337,97);
+insert into t (id,a) values (337,98);
+insert into t (id,a) values (337,99);
+insert into t (id,a) values (338,0);
+insert into t (id,a) values (338,1);
+insert into t (id,a) values (338,2);
+insert into t (id,a) values (338,3);
+insert into t (id,a) values (338,4);
+insert into t (id,a) values (338,5);
+insert into t (id,a) values (338,6);
+insert into t (id,a) values (338,7);
+insert into t (id,a) values (338,8);
+insert into t (id,a) values (338,9);
+insert into t (id,a) values (338,10);
+insert into t (id,a) values (338,11);
+insert into t (id,a) values (338,12);
+insert into t (id,a) values (338,13);
+insert into t (id,a) values (338,14);
+insert into t (id,a) values (338,15);
+insert into t (id,a) values (338,16);
+insert into t (id,a) values (338,17);
+insert into t (id,a) values (338,18);
+insert into t (id,a) values (338,19);
+insert into t (id,a) values (338,20);
+insert into t (id,a) values (338,21);
+insert into t (id,a) values (338,22);
+insert into t (id,a) values (338,23);
+insert into t (id,a) values (338,24);
+insert into t (id,a) values (338,25);
+insert into t (id,a) values (338,26);
+insert into t (id,a) values (338,27);
+insert into t (id,a) values (338,28);
+insert into t (id,a) values (338,29);
+insert into t (id,a) values (338,30);
+insert into t (id,a) values (338,31);
+insert into t (id,a) values (338,32);
+insert into t (id,a) values (338,33);
+insert into t (id,a) values (338,34);
+insert into t (id,a) values (338,35);
+insert into t (id,a) values (338,36);
+insert into t (id,a) values (338,37);
+insert into t (id,a) values (338,38);
+insert into t (id,a) values (338,39);
+insert into t (id,a) values (338,40);
+insert into t (id,a) values (338,41);
+insert into t (id,a) values (338,42);
+insert into t (id,a) values (338,43);
+insert into t (id,a) values (338,44);
+insert into t (id,a) values (338,45);
+insert into t (id,a) values (338,46);
+insert into t (id,a) values (338,47);
+insert into t (id,a) values (338,48);
+insert into t (id,a) values (338,49);
+insert into t (id,a) values (338,50);
+insert into t (id,a) values (338,51);
+insert into t (id,a) values (338,52);
+insert into t (id,a) values (338,53);
+insert into t (id,a) values (338,54);
+insert into t (id,a) values (338,55);
+insert into t (id,a) values (338,56);
+insert into t (id,a) values (338,57);
+insert into t (id,a) values (338,58);
+insert into t (id,a) values (338,59);
+insert into t (id,a) values (338,60);
+insert into t (id,a) values (338,61);
+insert into t (id,a) values (338,62);
+insert into t (id,a) values (338,63);
+insert into t (id,a) values (338,64);
+insert into t (id,a) values (338,65);
+insert into t (id,a) values (338,66);
+insert into t (id,a) values (338,67);
+insert into t (id,a) values (338,68);
+insert into t (id,a) values (338,69);
+insert into t (id,a) values (338,70);
+insert into t (id,a) values (338,71);
+insert into t (id,a) values (338,72);
+insert into t (id,a) values (338,73);
+insert into t (id,a) values (338,74);
+insert into t (id,a) values (338,75);
+insert into t (id,a) values (338,76);
+insert into t (id,a) values (338,77);
+insert into t (id,a) values (338,78);
+insert into t (id,a) values (338,79);
+insert into t (id,a) values (338,80);
+insert into t (id,a) values (338,81);
+insert into t (id,a) values (338,82);
+insert into t (id,a) values (338,83);
+insert into t (id,a) values (338,84);
+insert into t (id,a) values (338,85);
+insert into t (id,a) values (338,86);
+insert into t (id,a) values (338,87);
+insert into t (id,a) values (338,88);
+insert into t (id,a) values (338,89);
+insert into t (id,a) values (338,90);
+insert into t (id,a) values (338,91);
+insert into t (id,a) values (338,92);
+insert into t (id,a) values (338,93);
+insert into t (id,a) values (338,94);
+insert into t (id,a) values (338,95);
+insert into t (id,a) values (338,96);
+insert into t (id,a) values (338,97);
+insert into t (id,a) values (338,98);
+insert into t (id,a) values (338,99);
+insert into t (id,a) values (339,0);
+insert into t (id,a) values (339,1);
+insert into t (id,a) values (339,2);
+insert into t (id,a) values (339,3);
+insert into t (id,a) values (339,4);
+insert into t (id,a) values (339,5);
+insert into t (id,a) values (339,6);
+insert into t (id,a) values (339,7);
+insert into t (id,a) values (339,8);
+insert into t (id,a) values (339,9);
+insert into t (id,a) values (339,10);
+insert into t (id,a) values (339,11);
+insert into t (id,a) values (339,12);
+insert into t (id,a) values (339,13);
+insert into t (id,a) values (339,14);
+insert into t (id,a) values (339,15);
+insert into t (id,a) values (339,16);
+insert into t (id,a) values (339,17);
+insert into t (id,a) values (339,18);
+insert into t (id,a) values (339,19);
+insert into t (id,a) values (339,20);
+insert into t (id,a) values (339,21);
+insert into t (id,a) values (339,22);
+insert into t (id,a) values (339,23);
+insert into t (id,a) values (339,24);
+insert into t (id,a) values (339,25);
+insert into t (id,a) values (339,26);
+insert into t (id,a) values (339,27);
+insert into t (id,a) values (339,28);
+insert into t (id,a) values (339,29);
+insert into t (id,a) values (339,30);
+insert into t (id,a) values (339,31);
+insert into t (id,a) values (339,32);
+insert into t (id,a) values (339,33);
+insert into t (id,a) values (339,34);
+insert into t (id,a) values (339,35);
+insert into t (id,a) values (339,36);
+insert into t (id,a) values (339,37);
+insert into t (id,a) values (339,38);
+insert into t (id,a) values (339,39);
+insert into t (id,a) values (339,40);
+insert into t (id,a) values (339,41);
+insert into t (id,a) values (339,42);
+insert into t (id,a) values (339,43);
+insert into t (id,a) values (339,44);
+insert into t (id,a) values (339,45);
+insert into t (id,a) values (339,46);
+insert into t (id,a) values (339,47);
+insert into t (id,a) values (339,48);
+insert into t (id,a) values (339,49);
+insert into t (id,a) values (339,50);
+insert into t (id,a) values (339,51);
+insert into t (id,a) values (339,52);
+insert into t (id,a) values (339,53);
+insert into t (id,a) values (339,54);
+insert into t (id,a) values (339,55);
+insert into t (id,a) values (339,56);
+insert into t (id,a) values (339,57);
+insert into t (id,a) values (339,58);
+insert into t (id,a) values (339,59);
+insert into t (id,a) values (339,60);
+insert into t (id,a) values (339,61);
+insert into t (id,a) values (339,62);
+insert into t (id,a) values (339,63);
+insert into t (id,a) values (339,64);
+insert into t (id,a) values (339,65);
+insert into t (id,a) values (339,66);
+insert into t (id,a) values (339,67);
+insert into t (id,a) values (339,68);
+insert into t (id,a) values (339,69);
+insert into t (id,a) values (339,70);
+insert into t (id,a) values (339,71);
+insert into t (id,a) values (339,72);
+insert into t (id,a) values (339,73);
+insert into t (id,a) values (339,74);
+insert into t (id,a) values (339,75);
+insert into t (id,a) values (339,76);
+insert into t (id,a) values (339,77);
+insert into t (id,a) values (339,78);
+insert into t (id,a) values (339,79);
+insert into t (id,a) values (339,80);
+insert into t (id,a) values (339,81);
+insert into t (id,a) values (339,82);
+insert into t (id,a) values (339,83);
+insert into t (id,a) values (339,84);
+insert into t (id,a) values (339,85);
+insert into t (id,a) values (339,86);
+insert into t (id,a) values (339,87);
+insert into t (id,a) values (339,88);
+insert into t (id,a) values (339,89);
+insert into t (id,a) values (339,90);
+insert into t (id,a) values (339,91);
+insert into t (id,a) values (339,92);
+insert into t (id,a) values (339,93);
+insert into t (id,a) values (339,94);
+insert into t (id,a) values (339,95);
+insert into t (id,a) values (339,96);
+insert into t (id,a) values (339,97);
+insert into t (id,a) values (339,98);
+insert into t (id,a) values (339,99);
+insert into t (id,a) values (340,0);
+insert into t (id,a) values (340,1);
+insert into t (id,a) values (340,2);
+insert into t (id,a) values (340,3);
+insert into t (id,a) values (340,4);
+insert into t (id,a) values (340,5);
+insert into t (id,a) values (340,6);
+insert into t (id,a) values (340,7);
+insert into t (id,a) values (340,8);
+insert into t (id,a) values (340,9);
+insert into t (id,a) values (340,10);
+insert into t (id,a) values (340,11);
+insert into t (id,a) values (340,12);
+insert into t (id,a) values (340,13);
+insert into t (id,a) values (340,14);
+insert into t (id,a) values (340,15);
+insert into t (id,a) values (340,16);
+insert into t (id,a) values (340,17);
+insert into t (id,a) values (340,18);
+insert into t (id,a) values (340,19);
+insert into t (id,a) values (340,20);
+insert into t (id,a) values (340,21);
+insert into t (id,a) values (340,22);
+insert into t (id,a) values (340,23);
+insert into t (id,a) values (340,24);
+insert into t (id,a) values (340,25);
+insert into t (id,a) values (340,26);
+insert into t (id,a) values (340,27);
+insert into t (id,a) values (340,28);
+insert into t (id,a) values (340,29);
+insert into t (id,a) values (340,30);
+insert into t (id,a) values (340,31);
+insert into t (id,a) values (340,32);
+insert into t (id,a) values (340,33);
+insert into t (id,a) values (340,34);
+insert into t (id,a) values (340,35);
+insert into t (id,a) values (340,36);
+insert into t (id,a) values (340,37);
+insert into t (id,a) values (340,38);
+insert into t (id,a) values (340,39);
+insert into t (id,a) values (340,40);
+insert into t (id,a) values (340,41);
+insert into t (id,a) values (340,42);
+insert into t (id,a) values (340,43);
+insert into t (id,a) values (340,44);
+insert into t (id,a) values (340,45);
+insert into t (id,a) values (340,46);
+insert into t (id,a) values (340,47);
+insert into t (id,a) values (340,48);
+insert into t (id,a) values (340,49);
+insert into t (id,a) values (340,50);
+insert into t (id,a) values (340,51);
+insert into t (id,a) values (340,52);
+insert into t (id,a) values (340,53);
+insert into t (id,a) values (340,54);
+insert into t (id,a) values (340,55);
+insert into t (id,a) values (340,56);
+insert into t (id,a) values (340,57);
+insert into t (id,a) values (340,58);
+insert into t (id,a) values (340,59);
+insert into t (id,a) values (340,60);
+insert into t (id,a) values (340,61);
+insert into t (id,a) values (340,62);
+insert into t (id,a) values (340,63);
+insert into t (id,a) values (340,64);
+insert into t (id,a) values (340,65);
+insert into t (id,a) values (340,66);
+insert into t (id,a) values (340,67);
+insert into t (id,a) values (340,68);
+insert into t (id,a) values (340,69);
+insert into t (id,a) values (340,70);
+insert into t (id,a) values (340,71);
+insert into t (id,a) values (340,72);
+insert into t (id,a) values (340,73);
+insert into t (id,a) values (340,74);
+insert into t (id,a) values (340,75);
+insert into t (id,a) values (340,76);
+insert into t (id,a) values (340,77);
+insert into t (id,a) values (340,78);
+insert into t (id,a) values (340,79);
+insert into t (id,a) values (340,80);
+insert into t (id,a) values (340,81);
+insert into t (id,a) values (340,82);
+insert into t (id,a) values (340,83);
+insert into t (id,a) values (340,84);
+insert into t (id,a) values (340,85);
+insert into t (id,a) values (340,86);
+insert into t (id,a) values (340,87);
+insert into t (id,a) values (340,88);
+insert into t (id,a) values (340,89);
+insert into t (id,a) values (340,90);
+insert into t (id,a) values (340,91);
+insert into t (id,a) values (340,92);
+insert into t (id,a) values (340,93);
+insert into t (id,a) values (340,94);
+insert into t (id,a) values (340,95);
+insert into t (id,a) values (340,96);
+insert into t (id,a) values (340,97);
+insert into t (id,a) values (340,98);
+insert into t (id,a) values (340,99);
+insert into t (id,a) values (341,0);
+insert into t (id,a) values (341,1);
+insert into t (id,a) values (341,2);
+insert into t (id,a) values (341,3);
+insert into t (id,a) values (341,4);
+insert into t (id,a) values (341,5);
+insert into t (id,a) values (341,6);
+insert into t (id,a) values (341,7);
+insert into t (id,a) values (341,8);
+insert into t (id,a) values (341,9);
+insert into t (id,a) values (341,10);
+insert into t (id,a) values (341,11);
+insert into t (id,a) values (341,12);
+insert into t (id,a) values (341,13);
+insert into t (id,a) values (341,14);
+insert into t (id,a) values (341,15);
+insert into t (id,a) values (341,16);
+insert into t (id,a) values (341,17);
+insert into t (id,a) values (341,18);
+insert into t (id,a) values (341,19);
+insert into t (id,a) values (341,20);
+insert into t (id,a) values (341,21);
+insert into t (id,a) values (341,22);
+insert into t (id,a) values (341,23);
+insert into t (id,a) values (341,24);
+insert into t (id,a) values (341,25);
+insert into t (id,a) values (341,26);
+insert into t (id,a) values (341,27);
+insert into t (id,a) values (341,28);
+insert into t (id,a) values (341,29);
+insert into t (id,a) values (341,30);
+insert into t (id,a) values (341,31);
+insert into t (id,a) values (341,32);
+insert into t (id,a) values (341,33);
+insert into t (id,a) values (341,34);
+insert into t (id,a) values (341,35);
+insert into t (id,a) values (341,36);
+insert into t (id,a) values (341,37);
+insert into t (id,a) values (341,38);
+insert into t (id,a) values (341,39);
+insert into t (id,a) values (341,40);
+insert into t (id,a) values (341,41);
+insert into t (id,a) values (341,42);
+insert into t (id,a) values (341,43);
+insert into t (id,a) values (341,44);
+insert into t (id,a) values (341,45);
+insert into t (id,a) values (341,46);
+insert into t (id,a) values (341,47);
+insert into t (id,a) values (341,48);
+insert into t (id,a) values (341,49);
+insert into t (id,a) values (341,50);
+insert into t (id,a) values (341,51);
+insert into t (id,a) values (341,52);
+insert into t (id,a) values (341,53);
+insert into t (id,a) values (341,54);
+insert into t (id,a) values (341,55);
+insert into t (id,a) values (341,56);
+insert into t (id,a) values (341,57);
+insert into t (id,a) values (341,58);
+insert into t (id,a) values (341,59);
+insert into t (id,a) values (341,60);
+insert into t (id,a) values (341,61);
+insert into t (id,a) values (341,62);
+insert into t (id,a) values (341,63);
+insert into t (id,a) values (341,64);
+insert into t (id,a) values (341,65);
+insert into t (id,a) values (341,66);
+insert into t (id,a) values (341,67);
+insert into t (id,a) values (341,68);
+insert into t (id,a) values (341,69);
+insert into t (id,a) values (341,70);
+insert into t (id,a) values (341,71);
+insert into t (id,a) values (341,72);
+insert into t (id,a) values (341,73);
+insert into t (id,a) values (341,74);
+insert into t (id,a) values (341,75);
+insert into t (id,a) values (341,76);
+insert into t (id,a) values (341,77);
+insert into t (id,a) values (341,78);
+insert into t (id,a) values (341,79);
+insert into t (id,a) values (341,80);
+insert into t (id,a) values (341,81);
+insert into t (id,a) values (341,82);
+insert into t (id,a) values (341,83);
+insert into t (id,a) values (341,84);
+insert into t (id,a) values (341,85);
+insert into t (id,a) values (341,86);
+insert into t (id,a) values (341,87);
+insert into t (id,a) values (341,88);
+insert into t (id,a) values (341,89);
+insert into t (id,a) values (341,90);
+insert into t (id,a) values (341,91);
+insert into t (id,a) values (341,92);
+insert into t (id,a) values (341,93);
+insert into t (id,a) values (341,94);
+insert into t (id,a) values (341,95);
+insert into t (id,a) values (341,96);
+insert into t (id,a) values (341,97);
+insert into t (id,a) values (341,98);
+insert into t (id,a) values (341,99);
+insert into t (id,a) values (342,0);
+insert into t (id,a) values (342,1);
+insert into t (id,a) values (342,2);
+insert into t (id,a) values (342,3);
+insert into t (id,a) values (342,4);
+insert into t (id,a) values (342,5);
+insert into t (id,a) values (342,6);
+insert into t (id,a) values (342,7);
+insert into t (id,a) values (342,8);
+insert into t (id,a) values (342,9);
+insert into t (id,a) values (342,10);
+insert into t (id,a) values (342,11);
+insert into t (id,a) values (342,12);
+insert into t (id,a) values (342,13);
+insert into t (id,a) values (342,14);
+insert into t (id,a) values (342,15);
+insert into t (id,a) values (342,16);
+insert into t (id,a) values (342,17);
+insert into t (id,a) values (342,18);
+insert into t (id,a) values (342,19);
+insert into t (id,a) values (342,20);
+insert into t (id,a) values (342,21);
+insert into t (id,a) values (342,22);
+insert into t (id,a) values (342,23);
+insert into t (id,a) values (342,24);
+insert into t (id,a) values (342,25);
+insert into t (id,a) values (342,26);
+insert into t (id,a) values (342,27);
+insert into t (id,a) values (342,28);
+insert into t (id,a) values (342,29);
+insert into t (id,a) values (342,30);
+insert into t (id,a) values (342,31);
+insert into t (id,a) values (342,32);
+insert into t (id,a) values (342,33);
+insert into t (id,a) values (342,34);
+insert into t (id,a) values (342,35);
+insert into t (id,a) values (342,36);
+insert into t (id,a) values (342,37);
+insert into t (id,a) values (342,38);
+insert into t (id,a) values (342,39);
+insert into t (id,a) values (342,40);
+insert into t (id,a) values (342,41);
+insert into t (id,a) values (342,42);
+insert into t (id,a) values (342,43);
+insert into t (id,a) values (342,44);
+insert into t (id,a) values (342,45);
+insert into t (id,a) values (342,46);
+insert into t (id,a) values (342,47);
+insert into t (id,a) values (342,48);
+insert into t (id,a) values (342,49);
+insert into t (id,a) values (342,50);
+insert into t (id,a) values (342,51);
+insert into t (id,a) values (342,52);
+insert into t (id,a) values (342,53);
+insert into t (id,a) values (342,54);
+insert into t (id,a) values (342,55);
+insert into t (id,a) values (342,56);
+insert into t (id,a) values (342,57);
+insert into t (id,a) values (342,58);
+insert into t (id,a) values (342,59);
+insert into t (id,a) values (342,60);
+insert into t (id,a) values (342,61);
+insert into t (id,a) values (342,62);
+insert into t (id,a) values (342,63);
+insert into t (id,a) values (342,64);
+insert into t (id,a) values (342,65);
+insert into t (id,a) values (342,66);
+insert into t (id,a) values (342,67);
+insert into t (id,a) values (342,68);
+insert into t (id,a) values (342,69);
+insert into t (id,a) values (342,70);
+insert into t (id,a) values (342,71);
+insert into t (id,a) values (342,72);
+insert into t (id,a) values (342,73);
+insert into t (id,a) values (342,74);
+insert into t (id,a) values (342,75);
+insert into t (id,a) values (342,76);
+insert into t (id,a) values (342,77);
+insert into t (id,a) values (342,78);
+insert into t (id,a) values (342,79);
+insert into t (id,a) values (342,80);
+insert into t (id,a) values (342,81);
+insert into t (id,a) values (342,82);
+insert into t (id,a) values (342,83);
+insert into t (id,a) values (342,84);
+insert into t (id,a) values (342,85);
+insert into t (id,a) values (342,86);
+insert into t (id,a) values (342,87);
+insert into t (id,a) values (342,88);
+insert into t (id,a) values (342,89);
+insert into t (id,a) values (342,90);
+insert into t (id,a) values (342,91);
+insert into t (id,a) values (342,92);
+insert into t (id,a) values (342,93);
+insert into t (id,a) values (342,94);
+insert into t (id,a) values (342,95);
+insert into t (id,a) values (342,96);
+insert into t (id,a) values (342,97);
+insert into t (id,a) values (342,98);
+insert into t (id,a) values (342,99);
+insert into t (id,a) values (343,0);
+insert into t (id,a) values (343,1);
+insert into t (id,a) values (343,2);
+insert into t (id,a) values (343,3);
+insert into t (id,a) values (343,4);
+insert into t (id,a) values (343,5);
+insert into t (id,a) values (343,6);
+insert into t (id,a) values (343,7);
+insert into t (id,a) values (343,8);
+insert into t (id,a) values (343,9);
+insert into t (id,a) values (343,10);
+insert into t (id,a) values (343,11);
+insert into t (id,a) values (343,12);
+insert into t (id,a) values (343,13);
+insert into t (id,a) values (343,14);
+insert into t (id,a) values (343,15);
+insert into t (id,a) values (343,16);
+insert into t (id,a) values (343,17);
+insert into t (id,a) values (343,18);
+insert into t (id,a) values (343,19);
+insert into t (id,a) values (343,20);
+insert into t (id,a) values (343,21);
+insert into t (id,a) values (343,22);
+insert into t (id,a) values (343,23);
+insert into t (id,a) values (343,24);
+insert into t (id,a) values (343,25);
+insert into t (id,a) values (343,26);
+insert into t (id,a) values (343,27);
+insert into t (id,a) values (343,28);
+insert into t (id,a) values (343,29);
+insert into t (id,a) values (343,30);
+insert into t (id,a) values (343,31);
+insert into t (id,a) values (343,32);
+insert into t (id,a) values (343,33);
+insert into t (id,a) values (343,34);
+insert into t (id,a) values (343,35);
+insert into t (id,a) values (343,36);
+insert into t (id,a) values (343,37);
+insert into t (id,a) values (343,38);
+insert into t (id,a) values (343,39);
+insert into t (id,a) values (343,40);
+insert into t (id,a) values (343,41);
+insert into t (id,a) values (343,42);
+insert into t (id,a) values (343,43);
+insert into t (id,a) values (343,44);
+insert into t (id,a) values (343,45);
+insert into t (id,a) values (343,46);
+insert into t (id,a) values (343,47);
+insert into t (id,a) values (343,48);
+insert into t (id,a) values (343,49);
+insert into t (id,a) values (343,50);
+insert into t (id,a) values (343,51);
+insert into t (id,a) values (343,52);
+insert into t (id,a) values (343,53);
+insert into t (id,a) values (343,54);
+insert into t (id,a) values (343,55);
+insert into t (id,a) values (343,56);
+insert into t (id,a) values (343,57);
+insert into t (id,a) values (343,58);
+insert into t (id,a) values (343,59);
+insert into t (id,a) values (343,60);
+insert into t (id,a) values (343,61);
+insert into t (id,a) values (343,62);
+insert into t (id,a) values (343,63);
+insert into t (id,a) values (343,64);
+insert into t (id,a) values (343,65);
+insert into t (id,a) values (343,66);
+insert into t (id,a) values (343,67);
+insert into t (id,a) values (343,68);
+insert into t (id,a) values (343,69);
+insert into t (id,a) values (343,70);
+insert into t (id,a) values (343,71);
+insert into t (id,a) values (343,72);
+insert into t (id,a) values (343,73);
+insert into t (id,a) values (343,74);
+insert into t (id,a) values (343,75);
+insert into t (id,a) values (343,76);
+insert into t (id,a) values (343,77);
+insert into t (id,a) values (343,78);
+insert into t (id,a) values (343,79);
+insert into t (id,a) values (343,80);
+insert into t (id,a) values (343,81);
+insert into t (id,a) values (343,82);
+insert into t (id,a) values (343,83);
+insert into t (id,a) values (343,84);
+insert into t (id,a) values (343,85);
+insert into t (id,a) values (343,86);
+insert into t (id,a) values (343,87);
+insert into t (id,a) values (343,88);
+insert into t (id,a) values (343,89);
+insert into t (id,a) values (343,90);
+insert into t (id,a) values (343,91);
+insert into t (id,a) values (343,92);
+insert into t (id,a) values (343,93);
+insert into t (id,a) values (343,94);
+insert into t (id,a) values (343,95);
+insert into t (id,a) values (343,96);
+insert into t (id,a) values (343,97);
+insert into t (id,a) values (343,98);
+insert into t (id,a) values (343,99);
+insert into t (id,a) values (344,0);
+insert into t (id,a) values (344,1);
+insert into t (id,a) values (344,2);
+insert into t (id,a) values (344,3);
+insert into t (id,a) values (344,4);
+insert into t (id,a) values (344,5);
+insert into t (id,a) values (344,6);
+insert into t (id,a) values (344,7);
+insert into t (id,a) values (344,8);
+insert into t (id,a) values (344,9);
+insert into t (id,a) values (344,10);
+insert into t (id,a) values (344,11);
+insert into t (id,a) values (344,12);
+insert into t (id,a) values (344,13);
+insert into t (id,a) values (344,14);
+insert into t (id,a) values (344,15);
+insert into t (id,a) values (344,16);
+insert into t (id,a) values (344,17);
+insert into t (id,a) values (344,18);
+insert into t (id,a) values (344,19);
+insert into t (id,a) values (344,20);
+insert into t (id,a) values (344,21);
+insert into t (id,a) values (344,22);
+insert into t (id,a) values (344,23);
+insert into t (id,a) values (344,24);
+insert into t (id,a) values (344,25);
+insert into t (id,a) values (344,26);
+insert into t (id,a) values (344,27);
+insert into t (id,a) values (344,28);
+insert into t (id,a) values (344,29);
+insert into t (id,a) values (344,30);
+insert into t (id,a) values (344,31);
+insert into t (id,a) values (344,32);
+insert into t (id,a) values (344,33);
+insert into t (id,a) values (344,34);
+insert into t (id,a) values (344,35);
+insert into t (id,a) values (344,36);
+insert into t (id,a) values (344,37);
+insert into t (id,a) values (344,38);
+insert into t (id,a) values (344,39);
+insert into t (id,a) values (344,40);
+insert into t (id,a) values (344,41);
+insert into t (id,a) values (344,42);
+insert into t (id,a) values (344,43);
+insert into t (id,a) values (344,44);
+insert into t (id,a) values (344,45);
+insert into t (id,a) values (344,46);
+insert into t (id,a) values (344,47);
+insert into t (id,a) values (344,48);
+insert into t (id,a) values (344,49);
+insert into t (id,a) values (344,50);
+insert into t (id,a) values (344,51);
+insert into t (id,a) values (344,52);
+insert into t (id,a) values (344,53);
+insert into t (id,a) values (344,54);
+insert into t (id,a) values (344,55);
+insert into t (id,a) values (344,56);
+insert into t (id,a) values (344,57);
+insert into t (id,a) values (344,58);
+insert into t (id,a) values (344,59);
+insert into t (id,a) values (344,60);
+insert into t (id,a) values (344,61);
+insert into t (id,a) values (344,62);
+insert into t (id,a) values (344,63);
+insert into t (id,a) values (344,64);
+insert into t (id,a) values (344,65);
+insert into t (id,a) values (344,66);
+insert into t (id,a) values (344,67);
+insert into t (id,a) values (344,68);
+insert into t (id,a) values (344,69);
+insert into t (id,a) values (344,70);
+insert into t (id,a) values (344,71);
+insert into t (id,a) values (344,72);
+insert into t (id,a) values (344,73);
+insert into t (id,a) values (344,74);
+insert into t (id,a) values (344,75);
+insert into t (id,a) values (344,76);
+insert into t (id,a) values (344,77);
+insert into t (id,a) values (344,78);
+insert into t (id,a) values (344,79);
+insert into t (id,a) values (344,80);
+insert into t (id,a) values (344,81);
+insert into t (id,a) values (344,82);
+insert into t (id,a) values (344,83);
+insert into t (id,a) values (344,84);
+insert into t (id,a) values (344,85);
+insert into t (id,a) values (344,86);
+insert into t (id,a) values (344,87);
+insert into t (id,a) values (344,88);
+insert into t (id,a) values (344,89);
+insert into t (id,a) values (344,90);
+insert into t (id,a) values (344,91);
+insert into t (id,a) values (344,92);
+insert into t (id,a) values (344,93);
+insert into t (id,a) values (344,94);
+insert into t (id,a) values (344,95);
+insert into t (id,a) values (344,96);
+insert into t (id,a) values (344,97);
+insert into t (id,a) values (344,98);
+insert into t (id,a) values (344,99);
+insert into t (id,a) values (345,0);
+insert into t (id,a) values (345,1);
+insert into t (id,a) values (345,2);
+insert into t (id,a) values (345,3);
+insert into t (id,a) values (345,4);
+insert into t (id,a) values (345,5);
+insert into t (id,a) values (345,6);
+insert into t (id,a) values (345,7);
+insert into t (id,a) values (345,8);
+insert into t (id,a) values (345,9);
+insert into t (id,a) values (345,10);
+insert into t (id,a) values (345,11);
+insert into t (id,a) values (345,12);
+insert into t (id,a) values (345,13);
+insert into t (id,a) values (345,14);
+insert into t (id,a) values (345,15);
+insert into t (id,a) values (345,16);
+insert into t (id,a) values (345,17);
+insert into t (id,a) values (345,18);
+insert into t (id,a) values (345,19);
+insert into t (id,a) values (345,20);
+insert into t (id,a) values (345,21);
+insert into t (id,a) values (345,22);
+insert into t (id,a) values (345,23);
+insert into t (id,a) values (345,24);
+insert into t (id,a) values (345,25);
+insert into t (id,a) values (345,26);
+insert into t (id,a) values (345,27);
+insert into t (id,a) values (345,28);
+insert into t (id,a) values (345,29);
+insert into t (id,a) values (345,30);
+insert into t (id,a) values (345,31);
+insert into t (id,a) values (345,32);
+insert into t (id,a) values (345,33);
+insert into t (id,a) values (345,34);
+insert into t (id,a) values (345,35);
+insert into t (id,a) values (345,36);
+insert into t (id,a) values (345,37);
+insert into t (id,a) values (345,38);
+insert into t (id,a) values (345,39);
+insert into t (id,a) values (345,40);
+insert into t (id,a) values (345,41);
+insert into t (id,a) values (345,42);
+insert into t (id,a) values (345,43);
+insert into t (id,a) values (345,44);
+insert into t (id,a) values (345,45);
+insert into t (id,a) values (345,46);
+insert into t (id,a) values (345,47);
+insert into t (id,a) values (345,48);
+insert into t (id,a) values (345,49);
+insert into t (id,a) values (345,50);
+insert into t (id,a) values (345,51);
+insert into t (id,a) values (345,52);
+insert into t (id,a) values (345,53);
+insert into t (id,a) values (345,54);
+insert into t (id,a) values (345,55);
+insert into t (id,a) values (345,56);
+insert into t (id,a) values (345,57);
+insert into t (id,a) values (345,58);
+insert into t (id,a) values (345,59);
+insert into t (id,a) values (345,60);
+insert into t (id,a) values (345,61);
+insert into t (id,a) values (345,62);
+insert into t (id,a) values (345,63);
+insert into t (id,a) values (345,64);
+insert into t (id,a) values (345,65);
+insert into t (id,a) values (345,66);
+insert into t (id,a) values (345,67);
+insert into t (id,a) values (345,68);
+insert into t (id,a) values (345,69);
+insert into t (id,a) values (345,70);
+insert into t (id,a) values (345,71);
+insert into t (id,a) values (345,72);
+insert into t (id,a) values (345,73);
+insert into t (id,a) values (345,74);
+insert into t (id,a) values (345,75);
+insert into t (id,a) values (345,76);
+insert into t (id,a) values (345,77);
+insert into t (id,a) values (345,78);
+insert into t (id,a) values (345,79);
+insert into t (id,a) values (345,80);
+insert into t (id,a) values (345,81);
+insert into t (id,a) values (345,82);
+insert into t (id,a) values (345,83);
+insert into t (id,a) values (345,84);
+insert into t (id,a) values (345,85);
+insert into t (id,a) values (345,86);
+insert into t (id,a) values (345,87);
+insert into t (id,a) values (345,88);
+insert into t (id,a) values (345,89);
+insert into t (id,a) values (345,90);
+insert into t (id,a) values (345,91);
+insert into t (id,a) values (345,92);
+insert into t (id,a) values (345,93);
+insert into t (id,a) values (345,94);
+insert into t (id,a) values (345,95);
+insert into t (id,a) values (345,96);
+insert into t (id,a) values (345,97);
+insert into t (id,a) values (345,98);
+insert into t (id,a) values (345,99);
+insert into t (id,a) values (346,0);
+insert into t (id,a) values (346,1);
+insert into t (id,a) values (346,2);
+insert into t (id,a) values (346,3);
+insert into t (id,a) values (346,4);
+insert into t (id,a) values (346,5);
+insert into t (id,a) values (346,6);
+insert into t (id,a) values (346,7);
+insert into t (id,a) values (346,8);
+insert into t (id,a) values (346,9);
+insert into t (id,a) values (346,10);
+insert into t (id,a) values (346,11);
+insert into t (id,a) values (346,12);
+insert into t (id,a) values (346,13);
+insert into t (id,a) values (346,14);
+insert into t (id,a) values (346,15);
+insert into t (id,a) values (346,16);
+insert into t (id,a) values (346,17);
+insert into t (id,a) values (346,18);
+insert into t (id,a) values (346,19);
+insert into t (id,a) values (346,20);
+insert into t (id,a) values (346,21);
+insert into t (id,a) values (346,22);
+insert into t (id,a) values (346,23);
+insert into t (id,a) values (346,24);
+insert into t (id,a) values (346,25);
+insert into t (id,a) values (346,26);
+insert into t (id,a) values (346,27);
+insert into t (id,a) values (346,28);
+insert into t (id,a) values (346,29);
+insert into t (id,a) values (346,30);
+insert into t (id,a) values (346,31);
+insert into t (id,a) values (346,32);
+insert into t (id,a) values (346,33);
+insert into t (id,a) values (346,34);
+insert into t (id,a) values (346,35);
+insert into t (id,a) values (346,36);
+insert into t (id,a) values (346,37);
+insert into t (id,a) values (346,38);
+insert into t (id,a) values (346,39);
+insert into t (id,a) values (346,40);
+insert into t (id,a) values (346,41);
+insert into t (id,a) values (346,42);
+insert into t (id,a) values (346,43);
+insert into t (id,a) values (346,44);
+insert into t (id,a) values (346,45);
+insert into t (id,a) values (346,46);
+insert into t (id,a) values (346,47);
+insert into t (id,a) values (346,48);
+insert into t (id,a) values (346,49);
+insert into t (id,a) values (346,50);
+insert into t (id,a) values (346,51);
+insert into t (id,a) values (346,52);
+insert into t (id,a) values (346,53);
+insert into t (id,a) values (346,54);
+insert into t (id,a) values (346,55);
+insert into t (id,a) values (346,56);
+insert into t (id,a) values (346,57);
+insert into t (id,a) values (346,58);
+insert into t (id,a) values (346,59);
+insert into t (id,a) values (346,60);
+insert into t (id,a) values (346,61);
+insert into t (id,a) values (346,62);
+insert into t (id,a) values (346,63);
+insert into t (id,a) values (346,64);
+insert into t (id,a) values (346,65);
+insert into t (id,a) values (346,66);
+insert into t (id,a) values (346,67);
+insert into t (id,a) values (346,68);
+insert into t (id,a) values (346,69);
+insert into t (id,a) values (346,70);
+insert into t (id,a) values (346,71);
+insert into t (id,a) values (346,72);
+insert into t (id,a) values (346,73);
+insert into t (id,a) values (346,74);
+insert into t (id,a) values (346,75);
+insert into t (id,a) values (346,76);
+insert into t (id,a) values (346,77);
+insert into t (id,a) values (346,78);
+insert into t (id,a) values (346,79);
+insert into t (id,a) values (346,80);
+insert into t (id,a) values (346,81);
+insert into t (id,a) values (346,82);
+insert into t (id,a) values (346,83);
+insert into t (id,a) values (346,84);
+insert into t (id,a) values (346,85);
+insert into t (id,a) values (346,86);
+insert into t (id,a) values (346,87);
+insert into t (id,a) values (346,88);
+insert into t (id,a) values (346,89);
+insert into t (id,a) values (346,90);
+insert into t (id,a) values (346,91);
+insert into t (id,a) values (346,92);
+insert into t (id,a) values (346,93);
+insert into t (id,a) values (346,94);
+insert into t (id,a) values (346,95);
+insert into t (id,a) values (346,96);
+insert into t (id,a) values (346,97);
+insert into t (id,a) values (346,98);
+insert into t (id,a) values (346,99);
+insert into t (id,a) values (347,0);
+insert into t (id,a) values (347,1);
+insert into t (id,a) values (347,2);
+insert into t (id,a) values (347,3);
+insert into t (id,a) values (347,4);
+insert into t (id,a) values (347,5);
+insert into t (id,a) values (347,6);
+insert into t (id,a) values (347,7);
+insert into t (id,a) values (347,8);
+insert into t (id,a) values (347,9);
+insert into t (id,a) values (347,10);
+insert into t (id,a) values (347,11);
+insert into t (id,a) values (347,12);
+insert into t (id,a) values (347,13);
+insert into t (id,a) values (347,14);
+insert into t (id,a) values (347,15);
+insert into t (id,a) values (347,16);
+insert into t (id,a) values (347,17);
+insert into t (id,a) values (347,18);
+insert into t (id,a) values (347,19);
+insert into t (id,a) values (347,20);
+insert into t (id,a) values (347,21);
+insert into t (id,a) values (347,22);
+insert into t (id,a) values (347,23);
+insert into t (id,a) values (347,24);
+insert into t (id,a) values (347,25);
+insert into t (id,a) values (347,26);
+insert into t (id,a) values (347,27);
+insert into t (id,a) values (347,28);
+insert into t (id,a) values (347,29);
+insert into t (id,a) values (347,30);
+insert into t (id,a) values (347,31);
+insert into t (id,a) values (347,32);
+insert into t (id,a) values (347,33);
+insert into t (id,a) values (347,34);
+insert into t (id,a) values (347,35);
+insert into t (id,a) values (347,36);
+insert into t (id,a) values (347,37);
+insert into t (id,a) values (347,38);
+insert into t (id,a) values (347,39);
+insert into t (id,a) values (347,40);
+insert into t (id,a) values (347,41);
+insert into t (id,a) values (347,42);
+insert into t (id,a) values (347,43);
+insert into t (id,a) values (347,44);
+insert into t (id,a) values (347,45);
+insert into t (id,a) values (347,46);
+insert into t (id,a) values (347,47);
+insert into t (id,a) values (347,48);
+insert into t (id,a) values (347,49);
+insert into t (id,a) values (347,50);
+insert into t (id,a) values (347,51);
+insert into t (id,a) values (347,52);
+insert into t (id,a) values (347,53);
+insert into t (id,a) values (347,54);
+insert into t (id,a) values (347,55);
+insert into t (id,a) values (347,56);
+insert into t (id,a) values (347,57);
+insert into t (id,a) values (347,58);
+insert into t (id,a) values (347,59);
+insert into t (id,a) values (347,60);
+insert into t (id,a) values (347,61);
+insert into t (id,a) values (347,62);
+insert into t (id,a) values (347,63);
+insert into t (id,a) values (347,64);
+insert into t (id,a) values (347,65);
+insert into t (id,a) values (347,66);
+insert into t (id,a) values (347,67);
+insert into t (id,a) values (347,68);
+insert into t (id,a) values (347,69);
+insert into t (id,a) values (347,70);
+insert into t (id,a) values (347,71);
+insert into t (id,a) values (347,72);
+insert into t (id,a) values (347,73);
+insert into t (id,a) values (347,74);
+insert into t (id,a) values (347,75);
+insert into t (id,a) values (347,76);
+insert into t (id,a) values (347,77);
+insert into t (id,a) values (347,78);
+insert into t (id,a) values (347,79);
+insert into t (id,a) values (347,80);
+insert into t (id,a) values (347,81);
+insert into t (id,a) values (347,82);
+insert into t (id,a) values (347,83);
+insert into t (id,a) values (347,84);
+insert into t (id,a) values (347,85);
+insert into t (id,a) values (347,86);
+insert into t (id,a) values (347,87);
+insert into t (id,a) values (347,88);
+insert into t (id,a) values (347,89);
+insert into t (id,a) values (347,90);
+insert into t (id,a) values (347,91);
+insert into t (id,a) values (347,92);
+insert into t (id,a) values (347,93);
+insert into t (id,a) values (347,94);
+insert into t (id,a) values (347,95);
+insert into t (id,a) values (347,96);
+insert into t (id,a) values (347,97);
+insert into t (id,a) values (347,98);
+insert into t (id,a) values (347,99);
+insert into t (id,a) values (348,0);
+insert into t (id,a) values (348,1);
+insert into t (id,a) values (348,2);
+insert into t (id,a) values (348,3);
+insert into t (id,a) values (348,4);
+insert into t (id,a) values (348,5);
+insert into t (id,a) values (348,6);
+insert into t (id,a) values (348,7);
+insert into t (id,a) values (348,8);
+insert into t (id,a) values (348,9);
+insert into t (id,a) values (348,10);
+insert into t (id,a) values (348,11);
+insert into t (id,a) values (348,12);
+insert into t (id,a) values (348,13);
+insert into t (id,a) values (348,14);
+insert into t (id,a) values (348,15);
+insert into t (id,a) values (348,16);
+insert into t (id,a) values (348,17);
+insert into t (id,a) values (348,18);
+insert into t (id,a) values (348,19);
+insert into t (id,a) values (348,20);
+insert into t (id,a) values (348,21);
+insert into t (id,a) values (348,22);
+insert into t (id,a) values (348,23);
+insert into t (id,a) values (348,24);
+insert into t (id,a) values (348,25);
+insert into t (id,a) values (348,26);
+insert into t (id,a) values (348,27);
+insert into t (id,a) values (348,28);
+insert into t (id,a) values (348,29);
+insert into t (id,a) values (348,30);
+insert into t (id,a) values (348,31);
+insert into t (id,a) values (348,32);
+insert into t (id,a) values (348,33);
+insert into t (id,a) values (348,34);
+insert into t (id,a) values (348,35);
+insert into t (id,a) values (348,36);
+insert into t (id,a) values (348,37);
+insert into t (id,a) values (348,38);
+insert into t (id,a) values (348,39);
+insert into t (id,a) values (348,40);
+insert into t (id,a) values (348,41);
+insert into t (id,a) values (348,42);
+insert into t (id,a) values (348,43);
+insert into t (id,a) values (348,44);
+insert into t (id,a) values (348,45);
+insert into t (id,a) values (348,46);
+insert into t (id,a) values (348,47);
+insert into t (id,a) values (348,48);
+insert into t (id,a) values (348,49);
+insert into t (id,a) values (348,50);
+insert into t (id,a) values (348,51);
+insert into t (id,a) values (348,52);
+insert into t (id,a) values (348,53);
+insert into t (id,a) values (348,54);
+insert into t (id,a) values (348,55);
+insert into t (id,a) values (348,56);
+insert into t (id,a) values (348,57);
+insert into t (id,a) values (348,58);
+insert into t (id,a) values (348,59);
+insert into t (id,a) values (348,60);
+insert into t (id,a) values (348,61);
+insert into t (id,a) values (348,62);
+insert into t (id,a) values (348,63);
+insert into t (id,a) values (348,64);
+insert into t (id,a) values (348,65);
+insert into t (id,a) values (348,66);
+insert into t (id,a) values (348,67);
+insert into t (id,a) values (348,68);
+insert into t (id,a) values (348,69);
+insert into t (id,a) values (348,70);
+insert into t (id,a) values (348,71);
+insert into t (id,a) values (348,72);
+insert into t (id,a) values (348,73);
+insert into t (id,a) values (348,74);
+insert into t (id,a) values (348,75);
+insert into t (id,a) values (348,76);
+insert into t (id,a) values (348,77);
+insert into t (id,a) values (348,78);
+insert into t (id,a) values (348,79);
+insert into t (id,a) values (348,80);
+insert into t (id,a) values (348,81);
+insert into t (id,a) values (348,82);
+insert into t (id,a) values (348,83);
+insert into t (id,a) values (348,84);
+insert into t (id,a) values (348,85);
+insert into t (id,a) values (348,86);
+insert into t (id,a) values (348,87);
+insert into t (id,a) values (348,88);
+insert into t (id,a) values (348,89);
+insert into t (id,a) values (348,90);
+insert into t (id,a) values (348,91);
+insert into t (id,a) values (348,92);
+insert into t (id,a) values (348,93);
+insert into t (id,a) values (348,94);
+insert into t (id,a) values (348,95);
+insert into t (id,a) values (348,96);
+insert into t (id,a) values (348,97);
+insert into t (id,a) values (348,98);
+insert into t (id,a) values (348,99);
+insert into t (id,a) values (349,0);
+insert into t (id,a) values (349,1);
+insert into t (id,a) values (349,2);
+insert into t (id,a) values (349,3);
+insert into t (id,a) values (349,4);
+insert into t (id,a) values (349,5);
+insert into t (id,a) values (349,6);
+insert into t (id,a) values (349,7);
+insert into t (id,a) values (349,8);
+insert into t (id,a) values (349,9);
+insert into t (id,a) values (349,10);
+insert into t (id,a) values (349,11);
+insert into t (id,a) values (349,12);
+insert into t (id,a) values (349,13);
+insert into t (id,a) values (349,14);
+insert into t (id,a) values (349,15);
+insert into t (id,a) values (349,16);
+insert into t (id,a) values (349,17);
+insert into t (id,a) values (349,18);
+insert into t (id,a) values (349,19);
+insert into t (id,a) values (349,20);
+insert into t (id,a) values (349,21);
+insert into t (id,a) values (349,22);
+insert into t (id,a) values (349,23);
+insert into t (id,a) values (349,24);
+insert into t (id,a) values (349,25);
+insert into t (id,a) values (349,26);
+insert into t (id,a) values (349,27);
+insert into t (id,a) values (349,28);
+insert into t (id,a) values (349,29);
+insert into t (id,a) values (349,30);
+insert into t (id,a) values (349,31);
+insert into t (id,a) values (349,32);
+insert into t (id,a) values (349,33);
+insert into t (id,a) values (349,34);
+insert into t (id,a) values (349,35);
+insert into t (id,a) values (349,36);
+insert into t (id,a) values (349,37);
+insert into t (id,a) values (349,38);
+insert into t (id,a) values (349,39);
+insert into t (id,a) values (349,40);
+insert into t (id,a) values (349,41);
+insert into t (id,a) values (349,42);
+insert into t (id,a) values (349,43);
+insert into t (id,a) values (349,44);
+insert into t (id,a) values (349,45);
+insert into t (id,a) values (349,46);
+insert into t (id,a) values (349,47);
+insert into t (id,a) values (349,48);
+insert into t (id,a) values (349,49);
+insert into t (id,a) values (349,50);
+insert into t (id,a) values (349,51);
+insert into t (id,a) values (349,52);
+insert into t (id,a) values (349,53);
+insert into t (id,a) values (349,54);
+insert into t (id,a) values (349,55);
+insert into t (id,a) values (349,56);
+insert into t (id,a) values (349,57);
+insert into t (id,a) values (349,58);
+insert into t (id,a) values (349,59);
+insert into t (id,a) values (349,60);
+insert into t (id,a) values (349,61);
+insert into t (id,a) values (349,62);
+insert into t (id,a) values (349,63);
+insert into t (id,a) values (349,64);
+insert into t (id,a) values (349,65);
+insert into t (id,a) values (349,66);
+insert into t (id,a) values (349,67);
+insert into t (id,a) values (349,68);
+insert into t (id,a) values (349,69);
+insert into t (id,a) values (349,70);
+insert into t (id,a) values (349,71);
+insert into t (id,a) values (349,72);
+insert into t (id,a) values (349,73);
+insert into t (id,a) values (349,74);
+insert into t (id,a) values (349,75);
+insert into t (id,a) values (349,76);
+insert into t (id,a) values (349,77);
+insert into t (id,a) values (349,78);
+insert into t (id,a) values (349,79);
+insert into t (id,a) values (349,80);
+insert into t (id,a) values (349,81);
+insert into t (id,a) values (349,82);
+insert into t (id,a) values (349,83);
+insert into t (id,a) values (349,84);
+insert into t (id,a) values (349,85);
+insert into t (id,a) values (349,86);
+insert into t (id,a) values (349,87);
+insert into t (id,a) values (349,88);
+insert into t (id,a) values (349,89);
+insert into t (id,a) values (349,90);
+insert into t (id,a) values (349,91);
+insert into t (id,a) values (349,92);
+insert into t (id,a) values (349,93);
+insert into t (id,a) values (349,94);
+insert into t (id,a) values (349,95);
+insert into t (id,a) values (349,96);
+insert into t (id,a) values (349,97);
+insert into t (id,a) values (349,98);
+insert into t (id,a) values (349,99);
+insert into t (id,a) values (350,0);
+insert into t (id,a) values (350,1);
+insert into t (id,a) values (350,2);
+insert into t (id,a) values (350,3);
+insert into t (id,a) values (350,4);
+insert into t (id,a) values (350,5);
+insert into t (id,a) values (350,6);
+insert into t (id,a) values (350,7);
+insert into t (id,a) values (350,8);
+insert into t (id,a) values (350,9);
+insert into t (id,a) values (350,10);
+insert into t (id,a) values (350,11);
+insert into t (id,a) values (350,12);
+insert into t (id,a) values (350,13);
+insert into t (id,a) values (350,14);
+insert into t (id,a) values (350,15);
+insert into t (id,a) values (350,16);
+insert into t (id,a) values (350,17);
+insert into t (id,a) values (350,18);
+insert into t (id,a) values (350,19);
+insert into t (id,a) values (350,20);
+insert into t (id,a) values (350,21);
+insert into t (id,a) values (350,22);
+insert into t (id,a) values (350,23);
+insert into t (id,a) values (350,24);
+insert into t (id,a) values (350,25);
+insert into t (id,a) values (350,26);
+insert into t (id,a) values (350,27);
+insert into t (id,a) values (350,28);
+insert into t (id,a) values (350,29);
+insert into t (id,a) values (350,30);
+insert into t (id,a) values (350,31);
+insert into t (id,a) values (350,32);
+insert into t (id,a) values (350,33);
+insert into t (id,a) values (350,34);
+insert into t (id,a) values (350,35);
+insert into t (id,a) values (350,36);
+insert into t (id,a) values (350,37);
+insert into t (id,a) values (350,38);
+insert into t (id,a) values (350,39);
+insert into t (id,a) values (350,40);
+insert into t (id,a) values (350,41);
+insert into t (id,a) values (350,42);
+insert into t (id,a) values (350,43);
+insert into t (id,a) values (350,44);
+insert into t (id,a) values (350,45);
+insert into t (id,a) values (350,46);
+insert into t (id,a) values (350,47);
+insert into t (id,a) values (350,48);
+insert into t (id,a) values (350,49);
+insert into t (id,a) values (350,50);
+insert into t (id,a) values (350,51);
+insert into t (id,a) values (350,52);
+insert into t (id,a) values (350,53);
+insert into t (id,a) values (350,54);
+insert into t (id,a) values (350,55);
+insert into t (id,a) values (350,56);
+insert into t (id,a) values (350,57);
+insert into t (id,a) values (350,58);
+insert into t (id,a) values (350,59);
+insert into t (id,a) values (350,60);
+insert into t (id,a) values (350,61);
+insert into t (id,a) values (350,62);
+insert into t (id,a) values (350,63);
+insert into t (id,a) values (350,64);
+insert into t (id,a) values (350,65);
+insert into t (id,a) values (350,66);
+insert into t (id,a) values (350,67);
+insert into t (id,a) values (350,68);
+insert into t (id,a) values (350,69);
+insert into t (id,a) values (350,70);
+insert into t (id,a) values (350,71);
+insert into t (id,a) values (350,72);
+insert into t (id,a) values (350,73);
+insert into t (id,a) values (350,74);
+insert into t (id,a) values (350,75);
+insert into t (id,a) values (350,76);
+insert into t (id,a) values (350,77);
+insert into t (id,a) values (350,78);
+insert into t (id,a) values (350,79);
+insert into t (id,a) values (350,80);
+insert into t (id,a) values (350,81);
+insert into t (id,a) values (350,82);
+insert into t (id,a) values (350,83);
+insert into t (id,a) values (350,84);
+insert into t (id,a) values (350,85);
+insert into t (id,a) values (350,86);
+insert into t (id,a) values (350,87);
+insert into t (id,a) values (350,88);
+insert into t (id,a) values (350,89);
+insert into t (id,a) values (350,90);
+insert into t (id,a) values (350,91);
+insert into t (id,a) values (350,92);
+insert into t (id,a) values (350,93);
+insert into t (id,a) values (350,94);
+insert into t (id,a) values (350,95);
+insert into t (id,a) values (350,96);
+insert into t (id,a) values (350,97);
+insert into t (id,a) values (350,98);
+insert into t (id,a) values (350,99);
+insert into t (id,a) values (351,0);
+insert into t (id,a) values (351,1);
+insert into t (id,a) values (351,2);
+insert into t (id,a) values (351,3);
+insert into t (id,a) values (351,4);
+insert into t (id,a) values (351,5);
+insert into t (id,a) values (351,6);
+insert into t (id,a) values (351,7);
+insert into t (id,a) values (351,8);
+insert into t (id,a) values (351,9);
+insert into t (id,a) values (351,10);
+insert into t (id,a) values (351,11);
+insert into t (id,a) values (351,12);
+insert into t (id,a) values (351,13);
+insert into t (id,a) values (351,14);
+insert into t (id,a) values (351,15);
+insert into t (id,a) values (351,16);
+insert into t (id,a) values (351,17);
+insert into t (id,a) values (351,18);
+insert into t (id,a) values (351,19);
+insert into t (id,a) values (351,20);
+insert into t (id,a) values (351,21);
+insert into t (id,a) values (351,22);
+insert into t (id,a) values (351,23);
+insert into t (id,a) values (351,24);
+insert into t (id,a) values (351,25);
+insert into t (id,a) values (351,26);
+insert into t (id,a) values (351,27);
+insert into t (id,a) values (351,28);
+insert into t (id,a) values (351,29);
+insert into t (id,a) values (351,30);
+insert into t (id,a) values (351,31);
+insert into t (id,a) values (351,32);
+insert into t (id,a) values (351,33);
+insert into t (id,a) values (351,34);
+insert into t (id,a) values (351,35);
+insert into t (id,a) values (351,36);
+insert into t (id,a) values (351,37);
+insert into t (id,a) values (351,38);
+insert into t (id,a) values (351,39);
+insert into t (id,a) values (351,40);
+insert into t (id,a) values (351,41);
+insert into t (id,a) values (351,42);
+insert into t (id,a) values (351,43);
+insert into t (id,a) values (351,44);
+insert into t (id,a) values (351,45);
+insert into t (id,a) values (351,46);
+insert into t (id,a) values (351,47);
+insert into t (id,a) values (351,48);
+insert into t (id,a) values (351,49);
+insert into t (id,a) values (351,50);
+insert into t (id,a) values (351,51);
+insert into t (id,a) values (351,52);
+insert into t (id,a) values (351,53);
+insert into t (id,a) values (351,54);
+insert into t (id,a) values (351,55);
+insert into t (id,a) values (351,56);
+insert into t (id,a) values (351,57);
+insert into t (id,a) values (351,58);
+insert into t (id,a) values (351,59);
+insert into t (id,a) values (351,60);
+insert into t (id,a) values (351,61);
+insert into t (id,a) values (351,62);
+insert into t (id,a) values (351,63);
+insert into t (id,a) values (351,64);
+insert into t (id,a) values (351,65);
+insert into t (id,a) values (351,66);
+insert into t (id,a) values (351,67);
+insert into t (id,a) values (351,68);
+insert into t (id,a) values (351,69);
+insert into t (id,a) values (351,70);
+insert into t (id,a) values (351,71);
+insert into t (id,a) values (351,72);
+insert into t (id,a) values (351,73);
+insert into t (id,a) values (351,74);
+insert into t (id,a) values (351,75);
+insert into t (id,a) values (351,76);
+insert into t (id,a) values (351,77);
+insert into t (id,a) values (351,78);
+insert into t (id,a) values (351,79);
+insert into t (id,a) values (351,80);
+insert into t (id,a) values (351,81);
+insert into t (id,a) values (351,82);
+insert into t (id,a) values (351,83);
+insert into t (id,a) values (351,84);
+insert into t (id,a) values (351,85);
+insert into t (id,a) values (351,86);
+insert into t (id,a) values (351,87);
+insert into t (id,a) values (351,88);
+insert into t (id,a) values (351,89);
+insert into t (id,a) values (351,90);
+insert into t (id,a) values (351,91);
+insert into t (id,a) values (351,92);
+insert into t (id,a) values (351,93);
+insert into t (id,a) values (351,94);
+insert into t (id,a) values (351,95);
+insert into t (id,a) values (351,96);
+insert into t (id,a) values (351,97);
+insert into t (id,a) values (351,98);
+insert into t (id,a) values (351,99);
+insert into t (id,a) values (352,0);
+insert into t (id,a) values (352,1);
+insert into t (id,a) values (352,2);
+insert into t (id,a) values (352,3);
+insert into t (id,a) values (352,4);
+insert into t (id,a) values (352,5);
+insert into t (id,a) values (352,6);
+insert into t (id,a) values (352,7);
+insert into t (id,a) values (352,8);
+insert into t (id,a) values (352,9);
+insert into t (id,a) values (352,10);
+insert into t (id,a) values (352,11);
+insert into t (id,a) values (352,12);
+insert into t (id,a) values (352,13);
+insert into t (id,a) values (352,14);
+insert into t (id,a) values (352,15);
+insert into t (id,a) values (352,16);
+insert into t (id,a) values (352,17);
+insert into t (id,a) values (352,18);
+insert into t (id,a) values (352,19);
+insert into t (id,a) values (352,20);
+insert into t (id,a) values (352,21);
+insert into t (id,a) values (352,22);
+insert into t (id,a) values (352,23);
+insert into t (id,a) values (352,24);
+insert into t (id,a) values (352,25);
+insert into t (id,a) values (352,26);
+insert into t (id,a) values (352,27);
+insert into t (id,a) values (352,28);
+insert into t (id,a) values (352,29);
+insert into t (id,a) values (352,30);
+insert into t (id,a) values (352,31);
+insert into t (id,a) values (352,32);
+insert into t (id,a) values (352,33);
+insert into t (id,a) values (352,34);
+insert into t (id,a) values (352,35);
+insert into t (id,a) values (352,36);
+insert into t (id,a) values (352,37);
+insert into t (id,a) values (352,38);
+insert into t (id,a) values (352,39);
+insert into t (id,a) values (352,40);
+insert into t (id,a) values (352,41);
+insert into t (id,a) values (352,42);
+insert into t (id,a) values (352,43);
+insert into t (id,a) values (352,44);
+insert into t (id,a) values (352,45);
+insert into t (id,a) values (352,46);
+insert into t (id,a) values (352,47);
+insert into t (id,a) values (352,48);
+insert into t (id,a) values (352,49);
+insert into t (id,a) values (352,50);
+insert into t (id,a) values (352,51);
+insert into t (id,a) values (352,52);
+insert into t (id,a) values (352,53);
+insert into t (id,a) values (352,54);
+insert into t (id,a) values (352,55);
+insert into t (id,a) values (352,56);
+insert into t (id,a) values (352,57);
+insert into t (id,a) values (352,58);
+insert into t (id,a) values (352,59);
+insert into t (id,a) values (352,60);
+insert into t (id,a) values (352,61);
+insert into t (id,a) values (352,62);
+insert into t (id,a) values (352,63);
+insert into t (id,a) values (352,64);
+insert into t (id,a) values (352,65);
+insert into t (id,a) values (352,66);
+insert into t (id,a) values (352,67);
+insert into t (id,a) values (352,68);
+insert into t (id,a) values (352,69);
+insert into t (id,a) values (352,70);
+insert into t (id,a) values (352,71);
+insert into t (id,a) values (352,72);
+insert into t (id,a) values (352,73);
+insert into t (id,a) values (352,74);
+insert into t (id,a) values (352,75);
+insert into t (id,a) values (352,76);
+insert into t (id,a) values (352,77);
+insert into t (id,a) values (352,78);
+insert into t (id,a) values (352,79);
+insert into t (id,a) values (352,80);
+insert into t (id,a) values (352,81);
+insert into t (id,a) values (352,82);
+insert into t (id,a) values (352,83);
+insert into t (id,a) values (352,84);
+insert into t (id,a) values (352,85);
+insert into t (id,a) values (352,86);
+insert into t (id,a) values (352,87);
+insert into t (id,a) values (352,88);
+insert into t (id,a) values (352,89);
+insert into t (id,a) values (352,90);
+insert into t (id,a) values (352,91);
+insert into t (id,a) values (352,92);
+insert into t (id,a) values (352,93);
+insert into t (id,a) values (352,94);
+insert into t (id,a) values (352,95);
+insert into t (id,a) values (352,96);
+insert into t (id,a) values (352,97);
+insert into t (id,a) values (352,98);
+insert into t (id,a) values (352,99);
+insert into t (id,a) values (353,0);
+insert into t (id,a) values (353,1);
+insert into t (id,a) values (353,2);
+insert into t (id,a) values (353,3);
+insert into t (id,a) values (353,4);
+insert into t (id,a) values (353,5);
+insert into t (id,a) values (353,6);
+insert into t (id,a) values (353,7);
+insert into t (id,a) values (353,8);
+insert into t (id,a) values (353,9);
+insert into t (id,a) values (353,10);
+insert into t (id,a) values (353,11);
+insert into t (id,a) values (353,12);
+insert into t (id,a) values (353,13);
+insert into t (id,a) values (353,14);
+insert into t (id,a) values (353,15);
+insert into t (id,a) values (353,16);
+insert into t (id,a) values (353,17);
+insert into t (id,a) values (353,18);
+insert into t (id,a) values (353,19);
+insert into t (id,a) values (353,20);
+insert into t (id,a) values (353,21);
+insert into t (id,a) values (353,22);
+insert into t (id,a) values (353,23);
+insert into t (id,a) values (353,24);
+insert into t (id,a) values (353,25);
+insert into t (id,a) values (353,26);
+insert into t (id,a) values (353,27);
+insert into t (id,a) values (353,28);
+insert into t (id,a) values (353,29);
+insert into t (id,a) values (353,30);
+insert into t (id,a) values (353,31);
+insert into t (id,a) values (353,32);
+insert into t (id,a) values (353,33);
+insert into t (id,a) values (353,34);
+insert into t (id,a) values (353,35);
+insert into t (id,a) values (353,36);
+insert into t (id,a) values (353,37);
+insert into t (id,a) values (353,38);
+insert into t (id,a) values (353,39);
+insert into t (id,a) values (353,40);
+insert into t (id,a) values (353,41);
+insert into t (id,a) values (353,42);
+insert into t (id,a) values (353,43);
+insert into t (id,a) values (353,44);
+insert into t (id,a) values (353,45);
+insert into t (id,a) values (353,46);
+insert into t (id,a) values (353,47);
+insert into t (id,a) values (353,48);
+insert into t (id,a) values (353,49);
+insert into t (id,a) values (353,50);
+insert into t (id,a) values (353,51);
+insert into t (id,a) values (353,52);
+insert into t (id,a) values (353,53);
+insert into t (id,a) values (353,54);
+insert into t (id,a) values (353,55);
+insert into t (id,a) values (353,56);
+insert into t (id,a) values (353,57);
+insert into t (id,a) values (353,58);
+insert into t (id,a) values (353,59);
+insert into t (id,a) values (353,60);
+insert into t (id,a) values (353,61);
+insert into t (id,a) values (353,62);
+insert into t (id,a) values (353,63);
+insert into t (id,a) values (353,64);
+insert into t (id,a) values (353,65);
+insert into t (id,a) values (353,66);
+insert into t (id,a) values (353,67);
+insert into t (id,a) values (353,68);
+insert into t (id,a) values (353,69);
+insert into t (id,a) values (353,70);
+insert into t (id,a) values (353,71);
+insert into t (id,a) values (353,72);
+insert into t (id,a) values (353,73);
+insert into t (id,a) values (353,74);
+insert into t (id,a) values (353,75);
+insert into t (id,a) values (353,76);
+insert into t (id,a) values (353,77);
+insert into t (id,a) values (353,78);
+insert into t (id,a) values (353,79);
+insert into t (id,a) values (353,80);
+insert into t (id,a) values (353,81);
+insert into t (id,a) values (353,82);
+insert into t (id,a) values (353,83);
+insert into t (id,a) values (353,84);
+insert into t (id,a) values (353,85);
+insert into t (id,a) values (353,86);
+insert into t (id,a) values (353,87);
+insert into t (id,a) values (353,88);
+insert into t (id,a) values (353,89);
+insert into t (id,a) values (353,90);
+insert into t (id,a) values (353,91);
+insert into t (id,a) values (353,92);
+insert into t (id,a) values (353,93);
+insert into t (id,a) values (353,94);
+insert into t (id,a) values (353,95);
+insert into t (id,a) values (353,96);
+insert into t (id,a) values (353,97);
+insert into t (id,a) values (353,98);
+insert into t (id,a) values (353,99);
+insert into t (id,a) values (354,0);
+insert into t (id,a) values (354,1);
+insert into t (id,a) values (354,2);
+insert into t (id,a) values (354,3);
+insert into t (id,a) values (354,4);
+insert into t (id,a) values (354,5);
+insert into t (id,a) values (354,6);
+insert into t (id,a) values (354,7);
+insert into t (id,a) values (354,8);
+insert into t (id,a) values (354,9);
+insert into t (id,a) values (354,10);
+insert into t (id,a) values (354,11);
+insert into t (id,a) values (354,12);
+insert into t (id,a) values (354,13);
+insert into t (id,a) values (354,14);
+insert into t (id,a) values (354,15);
+insert into t (id,a) values (354,16);
+insert into t (id,a) values (354,17);
+insert into t (id,a) values (354,18);
+insert into t (id,a) values (354,19);
+insert into t (id,a) values (354,20);
+insert into t (id,a) values (354,21);
+insert into t (id,a) values (354,22);
+insert into t (id,a) values (354,23);
+insert into t (id,a) values (354,24);
+insert into t (id,a) values (354,25);
+insert into t (id,a) values (354,26);
+insert into t (id,a) values (354,27);
+insert into t (id,a) values (354,28);
+insert into t (id,a) values (354,29);
+insert into t (id,a) values (354,30);
+insert into t (id,a) values (354,31);
+insert into t (id,a) values (354,32);
+insert into t (id,a) values (354,33);
+insert into t (id,a) values (354,34);
+insert into t (id,a) values (354,35);
+insert into t (id,a) values (354,36);
+insert into t (id,a) values (354,37);
+insert into t (id,a) values (354,38);
+insert into t (id,a) values (354,39);
+insert into t (id,a) values (354,40);
+insert into t (id,a) values (354,41);
+insert into t (id,a) values (354,42);
+insert into t (id,a) values (354,43);
+insert into t (id,a) values (354,44);
+insert into t (id,a) values (354,45);
+insert into t (id,a) values (354,46);
+insert into t (id,a) values (354,47);
+insert into t (id,a) values (354,48);
+insert into t (id,a) values (354,49);
+insert into t (id,a) values (354,50);
+insert into t (id,a) values (354,51);
+insert into t (id,a) values (354,52);
+insert into t (id,a) values (354,53);
+insert into t (id,a) values (354,54);
+insert into t (id,a) values (354,55);
+insert into t (id,a) values (354,56);
+insert into t (id,a) values (354,57);
+insert into t (id,a) values (354,58);
+insert into t (id,a) values (354,59);
+insert into t (id,a) values (354,60);
+insert into t (id,a) values (354,61);
+insert into t (id,a) values (354,62);
+insert into t (id,a) values (354,63);
+insert into t (id,a) values (354,64);
+insert into t (id,a) values (354,65);
+insert into t (id,a) values (354,66);
+insert into t (id,a) values (354,67);
+insert into t (id,a) values (354,68);
+insert into t (id,a) values (354,69);
+insert into t (id,a) values (354,70);
+insert into t (id,a) values (354,71);
+insert into t (id,a) values (354,72);
+insert into t (id,a) values (354,73);
+insert into t (id,a) values (354,74);
+insert into t (id,a) values (354,75);
+insert into t (id,a) values (354,76);
+insert into t (id,a) values (354,77);
+insert into t (id,a) values (354,78);
+insert into t (id,a) values (354,79);
+insert into t (id,a) values (354,80);
+insert into t (id,a) values (354,81);
+insert into t (id,a) values (354,82);
+insert into t (id,a) values (354,83);
+insert into t (id,a) values (354,84);
+insert into t (id,a) values (354,85);
+insert into t (id,a) values (354,86);
+insert into t (id,a) values (354,87);
+insert into t (id,a) values (354,88);
+insert into t (id,a) values (354,89);
+insert into t (id,a) values (354,90);
+insert into t (id,a) values (354,91);
+insert into t (id,a) values (354,92);
+insert into t (id,a) values (354,93);
+insert into t (id,a) values (354,94);
+insert into t (id,a) values (354,95);
+insert into t (id,a) values (354,96);
+insert into t (id,a) values (354,97);
+insert into t (id,a) values (354,98);
+insert into t (id,a) values (354,99);
+insert into t (id,a) values (355,0);
+insert into t (id,a) values (355,1);
+insert into t (id,a) values (355,2);
+insert into t (id,a) values (355,3);
+insert into t (id,a) values (355,4);
+insert into t (id,a) values (355,5);
+insert into t (id,a) values (355,6);
+insert into t (id,a) values (355,7);
+insert into t (id,a) values (355,8);
+insert into t (id,a) values (355,9);
+insert into t (id,a) values (355,10);
+insert into t (id,a) values (355,11);
+insert into t (id,a) values (355,12);
+insert into t (id,a) values (355,13);
+insert into t (id,a) values (355,14);
+insert into t (id,a) values (355,15);
+insert into t (id,a) values (355,16);
+insert into t (id,a) values (355,17);
+insert into t (id,a) values (355,18);
+insert into t (id,a) values (355,19);
+insert into t (id,a) values (355,20);
+insert into t (id,a) values (355,21);
+insert into t (id,a) values (355,22);
+insert into t (id,a) values (355,23);
+insert into t (id,a) values (355,24);
+insert into t (id,a) values (355,25);
+insert into t (id,a) values (355,26);
+insert into t (id,a) values (355,27);
+insert into t (id,a) values (355,28);
+insert into t (id,a) values (355,29);
+insert into t (id,a) values (355,30);
+insert into t (id,a) values (355,31);
+insert into t (id,a) values (355,32);
+insert into t (id,a) values (355,33);
+insert into t (id,a) values (355,34);
+insert into t (id,a) values (355,35);
+insert into t (id,a) values (355,36);
+insert into t (id,a) values (355,37);
+insert into t (id,a) values (355,38);
+insert into t (id,a) values (355,39);
+insert into t (id,a) values (355,40);
+insert into t (id,a) values (355,41);
+insert into t (id,a) values (355,42);
+insert into t (id,a) values (355,43);
+insert into t (id,a) values (355,44);
+insert into t (id,a) values (355,45);
+insert into t (id,a) values (355,46);
+insert into t (id,a) values (355,47);
+insert into t (id,a) values (355,48);
+insert into t (id,a) values (355,49);
+insert into t (id,a) values (355,50);
+insert into t (id,a) values (355,51);
+insert into t (id,a) values (355,52);
+insert into t (id,a) values (355,53);
+insert into t (id,a) values (355,54);
+insert into t (id,a) values (355,55);
+insert into t (id,a) values (355,56);
+insert into t (id,a) values (355,57);
+insert into t (id,a) values (355,58);
+insert into t (id,a) values (355,59);
+insert into t (id,a) values (355,60);
+insert into t (id,a) values (355,61);
+insert into t (id,a) values (355,62);
+insert into t (id,a) values (355,63);
+insert into t (id,a) values (355,64);
+insert into t (id,a) values (355,65);
+insert into t (id,a) values (355,66);
+insert into t (id,a) values (355,67);
+insert into t (id,a) values (355,68);
+insert into t (id,a) values (355,69);
+insert into t (id,a) values (355,70);
+insert into t (id,a) values (355,71);
+insert into t (id,a) values (355,72);
+insert into t (id,a) values (355,73);
+insert into t (id,a) values (355,74);
+insert into t (id,a) values (355,75);
+insert into t (id,a) values (355,76);
+insert into t (id,a) values (355,77);
+insert into t (id,a) values (355,78);
+insert into t (id,a) values (355,79);
+insert into t (id,a) values (355,80);
+insert into t (id,a) values (355,81);
+insert into t (id,a) values (355,82);
+insert into t (id,a) values (355,83);
+insert into t (id,a) values (355,84);
+insert into t (id,a) values (355,85);
+insert into t (id,a) values (355,86);
+insert into t (id,a) values (355,87);
+insert into t (id,a) values (355,88);
+insert into t (id,a) values (355,89);
+insert into t (id,a) values (355,90);
+insert into t (id,a) values (355,91);
+insert into t (id,a) values (355,92);
+insert into t (id,a) values (355,93);
+insert into t (id,a) values (355,94);
+insert into t (id,a) values (355,95);
+insert into t (id,a) values (355,96);
+insert into t (id,a) values (355,97);
+insert into t (id,a) values (355,98);
+insert into t (id,a) values (355,99);
+insert into t (id,a) values (356,0);
+insert into t (id,a) values (356,1);
+insert into t (id,a) values (356,2);
+insert into t (id,a) values (356,3);
+insert into t (id,a) values (356,4);
+insert into t (id,a) values (356,5);
+insert into t (id,a) values (356,6);
+insert into t (id,a) values (356,7);
+insert into t (id,a) values (356,8);
+insert into t (id,a) values (356,9);
+insert into t (id,a) values (356,10);
+insert into t (id,a) values (356,11);
+insert into t (id,a) values (356,12);
+insert into t (id,a) values (356,13);
+insert into t (id,a) values (356,14);
+insert into t (id,a) values (356,15);
+insert into t (id,a) values (356,16);
+insert into t (id,a) values (356,17);
+insert into t (id,a) values (356,18);
+insert into t (id,a) values (356,19);
+insert into t (id,a) values (356,20);
+insert into t (id,a) values (356,21);
+insert into t (id,a) values (356,22);
+insert into t (id,a) values (356,23);
+insert into t (id,a) values (356,24);
+insert into t (id,a) values (356,25);
+insert into t (id,a) values (356,26);
+insert into t (id,a) values (356,27);
+insert into t (id,a) values (356,28);
+insert into t (id,a) values (356,29);
+insert into t (id,a) values (356,30);
+insert into t (id,a) values (356,31);
+insert into t (id,a) values (356,32);
+insert into t (id,a) values (356,33);
+insert into t (id,a) values (356,34);
+insert into t (id,a) values (356,35);
+insert into t (id,a) values (356,36);
+insert into t (id,a) values (356,37);
+insert into t (id,a) values (356,38);
+insert into t (id,a) values (356,39);
+insert into t (id,a) values (356,40);
+insert into t (id,a) values (356,41);
+insert into t (id,a) values (356,42);
+insert into t (id,a) values (356,43);
+insert into t (id,a) values (356,44);
+insert into t (id,a) values (356,45);
+insert into t (id,a) values (356,46);
+insert into t (id,a) values (356,47);
+insert into t (id,a) values (356,48);
+insert into t (id,a) values (356,49);
+insert into t (id,a) values (356,50);
+insert into t (id,a) values (356,51);
+insert into t (id,a) values (356,52);
+insert into t (id,a) values (356,53);
+insert into t (id,a) values (356,54);
+insert into t (id,a) values (356,55);
+insert into t (id,a) values (356,56);
+insert into t (id,a) values (356,57);
+insert into t (id,a) values (356,58);
+insert into t (id,a) values (356,59);
+insert into t (id,a) values (356,60);
+insert into t (id,a) values (356,61);
+insert into t (id,a) values (356,62);
+insert into t (id,a) values (356,63);
+insert into t (id,a) values (356,64);
+insert into t (id,a) values (356,65);
+insert into t (id,a) values (356,66);
+insert into t (id,a) values (356,67);
+insert into t (id,a) values (356,68);
+insert into t (id,a) values (356,69);
+insert into t (id,a) values (356,70);
+insert into t (id,a) values (356,71);
+insert into t (id,a) values (356,72);
+insert into t (id,a) values (356,73);
+insert into t (id,a) values (356,74);
+insert into t (id,a) values (356,75);
+insert into t (id,a) values (356,76);
+insert into t (id,a) values (356,77);
+insert into t (id,a) values (356,78);
+insert into t (id,a) values (356,79);
+insert into t (id,a) values (356,80);
+insert into t (id,a) values (356,81);
+insert into t (id,a) values (356,82);
+insert into t (id,a) values (356,83);
+insert into t (id,a) values (356,84);
+insert into t (id,a) values (356,85);
+insert into t (id,a) values (356,86);
+insert into t (id,a) values (356,87);
+insert into t (id,a) values (356,88);
+insert into t (id,a) values (356,89);
+insert into t (id,a) values (356,90);
+insert into t (id,a) values (356,91);
+insert into t (id,a) values (356,92);
+insert into t (id,a) values (356,93);
+insert into t (id,a) values (356,94);
+insert into t (id,a) values (356,95);
+insert into t (id,a) values (356,96);
+insert into t (id,a) values (356,97);
+insert into t (id,a) values (356,98);
+insert into t (id,a) values (356,99);
+insert into t (id,a) values (357,0);
+insert into t (id,a) values (357,1);
+insert into t (id,a) values (357,2);
+insert into t (id,a) values (357,3);
+insert into t (id,a) values (357,4);
+insert into t (id,a) values (357,5);
+insert into t (id,a) values (357,6);
+insert into t (id,a) values (357,7);
+insert into t (id,a) values (357,8);
+insert into t (id,a) values (357,9);
+insert into t (id,a) values (357,10);
+insert into t (id,a) values (357,11);
+insert into t (id,a) values (357,12);
+insert into t (id,a) values (357,13);
+insert into t (id,a) values (357,14);
+insert into t (id,a) values (357,15);
+insert into t (id,a) values (357,16);
+insert into t (id,a) values (357,17);
+insert into t (id,a) values (357,18);
+insert into t (id,a) values (357,19);
+insert into t (id,a) values (357,20);
+insert into t (id,a) values (357,21);
+insert into t (id,a) values (357,22);
+insert into t (id,a) values (357,23);
+insert into t (id,a) values (357,24);
+insert into t (id,a) values (357,25);
+insert into t (id,a) values (357,26);
+insert into t (id,a) values (357,27);
+insert into t (id,a) values (357,28);
+insert into t (id,a) values (357,29);
+insert into t (id,a) values (357,30);
+insert into t (id,a) values (357,31);
+insert into t (id,a) values (357,32);
+insert into t (id,a) values (357,33);
+insert into t (id,a) values (357,34);
+insert into t (id,a) values (357,35);
+insert into t (id,a) values (357,36);
+insert into t (id,a) values (357,37);
+insert into t (id,a) values (357,38);
+insert into t (id,a) values (357,39);
+insert into t (id,a) values (357,40);
+insert into t (id,a) values (357,41);
+insert into t (id,a) values (357,42);
+insert into t (id,a) values (357,43);
+insert into t (id,a) values (357,44);
+insert into t (id,a) values (357,45);
+insert into t (id,a) values (357,46);
+insert into t (id,a) values (357,47);
+insert into t (id,a) values (357,48);
+insert into t (id,a) values (357,49);
+insert into t (id,a) values (357,50);
+insert into t (id,a) values (357,51);
+insert into t (id,a) values (357,52);
+insert into t (id,a) values (357,53);
+insert into t (id,a) values (357,54);
+insert into t (id,a) values (357,55);
+insert into t (id,a) values (357,56);
+insert into t (id,a) values (357,57);
+insert into t (id,a) values (357,58);
+insert into t (id,a) values (357,59);
+insert into t (id,a) values (357,60);
+insert into t (id,a) values (357,61);
+insert into t (id,a) values (357,62);
+insert into t (id,a) values (357,63);
+insert into t (id,a) values (357,64);
+insert into t (id,a) values (357,65);
+insert into t (id,a) values (357,66);
+insert into t (id,a) values (357,67);
+insert into t (id,a) values (357,68);
+insert into t (id,a) values (357,69);
+insert into t (id,a) values (357,70);
+insert into t (id,a) values (357,71);
+insert into t (id,a) values (357,72);
+insert into t (id,a) values (357,73);
+insert into t (id,a) values (357,74);
+insert into t (id,a) values (357,75);
+insert into t (id,a) values (357,76);
+insert into t (id,a) values (357,77);
+insert into t (id,a) values (357,78);
+insert into t (id,a) values (357,79);
+insert into t (id,a) values (357,80);
+insert into t (id,a) values (357,81);
+insert into t (id,a) values (357,82);
+insert into t (id,a) values (357,83);
+insert into t (id,a) values (357,84);
+insert into t (id,a) values (357,85);
+insert into t (id,a) values (357,86);
+insert into t (id,a) values (357,87);
+insert into t (id,a) values (357,88);
+insert into t (id,a) values (357,89);
+insert into t (id,a) values (357,90);
+insert into t (id,a) values (357,91);
+insert into t (id,a) values (357,92);
+insert into t (id,a) values (357,93);
+insert into t (id,a) values (357,94);
+insert into t (id,a) values (357,95);
+insert into t (id,a) values (357,96);
+insert into t (id,a) values (357,97);
+insert into t (id,a) values (357,98);
+insert into t (id,a) values (357,99);
+insert into t (id,a) values (358,0);
+insert into t (id,a) values (358,1);
+insert into t (id,a) values (358,2);
+insert into t (id,a) values (358,3);
+insert into t (id,a) values (358,4);
+insert into t (id,a) values (358,5);
+insert into t (id,a) values (358,6);
+insert into t (id,a) values (358,7);
+insert into t (id,a) values (358,8);
+insert into t (id,a) values (358,9);
+insert into t (id,a) values (358,10);
+insert into t (id,a) values (358,11);
+insert into t (id,a) values (358,12);
+insert into t (id,a) values (358,13);
+insert into t (id,a) values (358,14);
+insert into t (id,a) values (358,15);
+insert into t (id,a) values (358,16);
+insert into t (id,a) values (358,17);
+insert into t (id,a) values (358,18);
+insert into t (id,a) values (358,19);
+insert into t (id,a) values (358,20);
+insert into t (id,a) values (358,21);
+insert into t (id,a) values (358,22);
+insert into t (id,a) values (358,23);
+insert into t (id,a) values (358,24);
+insert into t (id,a) values (358,25);
+insert into t (id,a) values (358,26);
+insert into t (id,a) values (358,27);
+insert into t (id,a) values (358,28);
+insert into t (id,a) values (358,29);
+insert into t (id,a) values (358,30);
+insert into t (id,a) values (358,31);
+insert into t (id,a) values (358,32);
+insert into t (id,a) values (358,33);
+insert into t (id,a) values (358,34);
+insert into t (id,a) values (358,35);
+insert into t (id,a) values (358,36);
+insert into t (id,a) values (358,37);
+insert into t (id,a) values (358,38);
+insert into t (id,a) values (358,39);
+insert into t (id,a) values (358,40);
+insert into t (id,a) values (358,41);
+insert into t (id,a) values (358,42);
+insert into t (id,a) values (358,43);
+insert into t (id,a) values (358,44);
+insert into t (id,a) values (358,45);
+insert into t (id,a) values (358,46);
+insert into t (id,a) values (358,47);
+insert into t (id,a) values (358,48);
+insert into t (id,a) values (358,49);
+insert into t (id,a) values (358,50);
+insert into t (id,a) values (358,51);
+insert into t (id,a) values (358,52);
+insert into t (id,a) values (358,53);
+insert into t (id,a) values (358,54);
+insert into t (id,a) values (358,55);
+insert into t (id,a) values (358,56);
+insert into t (id,a) values (358,57);
+insert into t (id,a) values (358,58);
+insert into t (id,a) values (358,59);
+insert into t (id,a) values (358,60);
+insert into t (id,a) values (358,61);
+insert into t (id,a) values (358,62);
+insert into t (id,a) values (358,63);
+insert into t (id,a) values (358,64);
+insert into t (id,a) values (358,65);
+insert into t (id,a) values (358,66);
+insert into t (id,a) values (358,67);
+insert into t (id,a) values (358,68);
+insert into t (id,a) values (358,69);
+insert into t (id,a) values (358,70);
+insert into t (id,a) values (358,71);
+insert into t (id,a) values (358,72);
+insert into t (id,a) values (358,73);
+insert into t (id,a) values (358,74);
+insert into t (id,a) values (358,75);
+insert into t (id,a) values (358,76);
+insert into t (id,a) values (358,77);
+insert into t (id,a) values (358,78);
+insert into t (id,a) values (358,79);
+insert into t (id,a) values (358,80);
+insert into t (id,a) values (358,81);
+insert into t (id,a) values (358,82);
+insert into t (id,a) values (358,83);
+insert into t (id,a) values (358,84);
+insert into t (id,a) values (358,85);
+insert into t (id,a) values (358,86);
+insert into t (id,a) values (358,87);
+insert into t (id,a) values (358,88);
+insert into t (id,a) values (358,89);
+insert into t (id,a) values (358,90);
+insert into t (id,a) values (358,91);
+insert into t (id,a) values (358,92);
+insert into t (id,a) values (358,93);
+insert into t (id,a) values (358,94);
+insert into t (id,a) values (358,95);
+insert into t (id,a) values (358,96);
+insert into t (id,a) values (358,97);
+insert into t (id,a) values (358,98);
+insert into t (id,a) values (358,99);
+insert into t (id,a) values (359,0);
+insert into t (id,a) values (359,1);
+insert into t (id,a) values (359,2);
+insert into t (id,a) values (359,3);
+insert into t (id,a) values (359,4);
+insert into t (id,a) values (359,5);
+insert into t (id,a) values (359,6);
+insert into t (id,a) values (359,7);
+insert into t (id,a) values (359,8);
+insert into t (id,a) values (359,9);
+insert into t (id,a) values (359,10);
+insert into t (id,a) values (359,11);
+insert into t (id,a) values (359,12);
+insert into t (id,a) values (359,13);
+insert into t (id,a) values (359,14);
+insert into t (id,a) values (359,15);
+insert into t (id,a) values (359,16);
+insert into t (id,a) values (359,17);
+insert into t (id,a) values (359,18);
+insert into t (id,a) values (359,19);
+insert into t (id,a) values (359,20);
+insert into t (id,a) values (359,21);
+insert into t (id,a) values (359,22);
+insert into t (id,a) values (359,23);
+insert into t (id,a) values (359,24);
+insert into t (id,a) values (359,25);
+insert into t (id,a) values (359,26);
+insert into t (id,a) values (359,27);
+insert into t (id,a) values (359,28);
+insert into t (id,a) values (359,29);
+insert into t (id,a) values (359,30);
+insert into t (id,a) values (359,31);
+insert into t (id,a) values (359,32);
+insert into t (id,a) values (359,33);
+insert into t (id,a) values (359,34);
+insert into t (id,a) values (359,35);
+insert into t (id,a) values (359,36);
+insert into t (id,a) values (359,37);
+insert into t (id,a) values (359,38);
+insert into t (id,a) values (359,39);
+insert into t (id,a) values (359,40);
+insert into t (id,a) values (359,41);
+insert into t (id,a) values (359,42);
+insert into t (id,a) values (359,43);
+insert into t (id,a) values (359,44);
+insert into t (id,a) values (359,45);
+insert into t (id,a) values (359,46);
+insert into t (id,a) values (359,47);
+insert into t (id,a) values (359,48);
+insert into t (id,a) values (359,49);
+insert into t (id,a) values (359,50);
+insert into t (id,a) values (359,51);
+insert into t (id,a) values (359,52);
+insert into t (id,a) values (359,53);
+insert into t (id,a) values (359,54);
+insert into t (id,a) values (359,55);
+insert into t (id,a) values (359,56);
+insert into t (id,a) values (359,57);
+insert into t (id,a) values (359,58);
+insert into t (id,a) values (359,59);
+insert into t (id,a) values (359,60);
+insert into t (id,a) values (359,61);
+insert into t (id,a) values (359,62);
+insert into t (id,a) values (359,63);
+insert into t (id,a) values (359,64);
+insert into t (id,a) values (359,65);
+insert into t (id,a) values (359,66);
+insert into t (id,a) values (359,67);
+insert into t (id,a) values (359,68);
+insert into t (id,a) values (359,69);
+insert into t (id,a) values (359,70);
+insert into t (id,a) values (359,71);
+insert into t (id,a) values (359,72);
+insert into t (id,a) values (359,73);
+insert into t (id,a) values (359,74);
+insert into t (id,a) values (359,75);
+insert into t (id,a) values (359,76);
+insert into t (id,a) values (359,77);
+insert into t (id,a) values (359,78);
+insert into t (id,a) values (359,79);
+insert into t (id,a) values (359,80);
+insert into t (id,a) values (359,81);
+insert into t (id,a) values (359,82);
+insert into t (id,a) values (359,83);
+insert into t (id,a) values (359,84);
+insert into t (id,a) values (359,85);
+insert into t (id,a) values (359,86);
+insert into t (id,a) values (359,87);
+insert into t (id,a) values (359,88);
+insert into t (id,a) values (359,89);
+insert into t (id,a) values (359,90);
+insert into t (id,a) values (359,91);
+insert into t (id,a) values (359,92);
+insert into t (id,a) values (359,93);
+insert into t (id,a) values (359,94);
+insert into t (id,a) values (359,95);
+insert into t (id,a) values (359,96);
+insert into t (id,a) values (359,97);
+insert into t (id,a) values (359,98);
+insert into t (id,a) values (359,99);
+insert into t (id,a) values (360,0);
+insert into t (id,a) values (360,1);
+insert into t (id,a) values (360,2);
+insert into t (id,a) values (360,3);
+insert into t (id,a) values (360,4);
+insert into t (id,a) values (360,5);
+insert into t (id,a) values (360,6);
+insert into t (id,a) values (360,7);
+insert into t (id,a) values (360,8);
+insert into t (id,a) values (360,9);
+insert into t (id,a) values (360,10);
+insert into t (id,a) values (360,11);
+insert into t (id,a) values (360,12);
+insert into t (id,a) values (360,13);
+insert into t (id,a) values (360,14);
+insert into t (id,a) values (360,15);
+insert into t (id,a) values (360,16);
+insert into t (id,a) values (360,17);
+insert into t (id,a) values (360,18);
+insert into t (id,a) values (360,19);
+insert into t (id,a) values (360,20);
+insert into t (id,a) values (360,21);
+insert into t (id,a) values (360,22);
+insert into t (id,a) values (360,23);
+insert into t (id,a) values (360,24);
+insert into t (id,a) values (360,25);
+insert into t (id,a) values (360,26);
+insert into t (id,a) values (360,27);
+insert into t (id,a) values (360,28);
+insert into t (id,a) values (360,29);
+insert into t (id,a) values (360,30);
+insert into t (id,a) values (360,31);
+insert into t (id,a) values (360,32);
+insert into t (id,a) values (360,33);
+insert into t (id,a) values (360,34);
+insert into t (id,a) values (360,35);
+insert into t (id,a) values (360,36);
+insert into t (id,a) values (360,37);
+insert into t (id,a) values (360,38);
+insert into t (id,a) values (360,39);
+insert into t (id,a) values (360,40);
+insert into t (id,a) values (360,41);
+insert into t (id,a) values (360,42);
+insert into t (id,a) values (360,43);
+insert into t (id,a) values (360,44);
+insert into t (id,a) values (360,45);
+insert into t (id,a) values (360,46);
+insert into t (id,a) values (360,47);
+insert into t (id,a) values (360,48);
+insert into t (id,a) values (360,49);
+insert into t (id,a) values (360,50);
+insert into t (id,a) values (360,51);
+insert into t (id,a) values (360,52);
+insert into t (id,a) values (360,53);
+insert into t (id,a) values (360,54);
+insert into t (id,a) values (360,55);
+insert into t (id,a) values (360,56);
+insert into t (id,a) values (360,57);
+insert into t (id,a) values (360,58);
+insert into t (id,a) values (360,59);
+insert into t (id,a) values (360,60);
+insert into t (id,a) values (360,61);
+insert into t (id,a) values (360,62);
+insert into t (id,a) values (360,63);
+insert into t (id,a) values (360,64);
+insert into t (id,a) values (360,65);
+insert into t (id,a) values (360,66);
+insert into t (id,a) values (360,67);
+insert into t (id,a) values (360,68);
+insert into t (id,a) values (360,69);
+insert into t (id,a) values (360,70);
+insert into t (id,a) values (360,71);
+insert into t (id,a) values (360,72);
+insert into t (id,a) values (360,73);
+insert into t (id,a) values (360,74);
+insert into t (id,a) values (360,75);
+insert into t (id,a) values (360,76);
+insert into t (id,a) values (360,77);
+insert into t (id,a) values (360,78);
+insert into t (id,a) values (360,79);
+insert into t (id,a) values (360,80);
+insert into t (id,a) values (360,81);
+insert into t (id,a) values (360,82);
+insert into t (id,a) values (360,83);
+insert into t (id,a) values (360,84);
+insert into t (id,a) values (360,85);
+insert into t (id,a) values (360,86);
+insert into t (id,a) values (360,87);
+insert into t (id,a) values (360,88);
+insert into t (id,a) values (360,89);
+insert into t (id,a) values (360,90);
+insert into t (id,a) values (360,91);
+insert into t (id,a) values (360,92);
+insert into t (id,a) values (360,93);
+insert into t (id,a) values (360,94);
+insert into t (id,a) values (360,95);
+insert into t (id,a) values (360,96);
+insert into t (id,a) values (360,97);
+insert into t (id,a) values (360,98);
+insert into t (id,a) values (360,99);
+insert into t (id,a) values (361,0);
+insert into t (id,a) values (361,1);
+insert into t (id,a) values (361,2);
+insert into t (id,a) values (361,3);
+insert into t (id,a) values (361,4);
+insert into t (id,a) values (361,5);
+insert into t (id,a) values (361,6);
+insert into t (id,a) values (361,7);
+insert into t (id,a) values (361,8);
+insert into t (id,a) values (361,9);
+insert into t (id,a) values (361,10);
+insert into t (id,a) values (361,11);
+insert into t (id,a) values (361,12);
+insert into t (id,a) values (361,13);
+insert into t (id,a) values (361,14);
+insert into t (id,a) values (361,15);
+insert into t (id,a) values (361,16);
+insert into t (id,a) values (361,17);
+insert into t (id,a) values (361,18);
+insert into t (id,a) values (361,19);
+insert into t (id,a) values (361,20);
+insert into t (id,a) values (361,21);
+insert into t (id,a) values (361,22);
+insert into t (id,a) values (361,23);
+insert into t (id,a) values (361,24);
+insert into t (id,a) values (361,25);
+insert into t (id,a) values (361,26);
+insert into t (id,a) values (361,27);
+insert into t (id,a) values (361,28);
+insert into t (id,a) values (361,29);
+insert into t (id,a) values (361,30);
+insert into t (id,a) values (361,31);
+insert into t (id,a) values (361,32);
+insert into t (id,a) values (361,33);
+insert into t (id,a) values (361,34);
+insert into t (id,a) values (361,35);
+insert into t (id,a) values (361,36);
+insert into t (id,a) values (361,37);
+insert into t (id,a) values (361,38);
+insert into t (id,a) values (361,39);
+insert into t (id,a) values (361,40);
+insert into t (id,a) values (361,41);
+insert into t (id,a) values (361,42);
+insert into t (id,a) values (361,43);
+insert into t (id,a) values (361,44);
+insert into t (id,a) values (361,45);
+insert into t (id,a) values (361,46);
+insert into t (id,a) values (361,47);
+insert into t (id,a) values (361,48);
+insert into t (id,a) values (361,49);
+insert into t (id,a) values (361,50);
+insert into t (id,a) values (361,51);
+insert into t (id,a) values (361,52);
+insert into t (id,a) values (361,53);
+insert into t (id,a) values (361,54);
+insert into t (id,a) values (361,55);
+insert into t (id,a) values (361,56);
+insert into t (id,a) values (361,57);
+insert into t (id,a) values (361,58);
+insert into t (id,a) values (361,59);
+insert into t (id,a) values (361,60);
+insert into t (id,a) values (361,61);
+insert into t (id,a) values (361,62);
+insert into t (id,a) values (361,63);
+insert into t (id,a) values (361,64);
+insert into t (id,a) values (361,65);
+insert into t (id,a) values (361,66);
+insert into t (id,a) values (361,67);
+insert into t (id,a) values (361,68);
+insert into t (id,a) values (361,69);
+insert into t (id,a) values (361,70);
+insert into t (id,a) values (361,71);
+insert into t (id,a) values (361,72);
+insert into t (id,a) values (361,73);
+insert into t (id,a) values (361,74);
+insert into t (id,a) values (361,75);
+insert into t (id,a) values (361,76);
+insert into t (id,a) values (361,77);
+insert into t (id,a) values (361,78);
+insert into t (id,a) values (361,79);
+insert into t (id,a) values (361,80);
+insert into t (id,a) values (361,81);
+insert into t (id,a) values (361,82);
+insert into t (id,a) values (361,83);
+insert into t (id,a) values (361,84);
+insert into t (id,a) values (361,85);
+insert into t (id,a) values (361,86);
+insert into t (id,a) values (361,87);
+insert into t (id,a) values (361,88);
+insert into t (id,a) values (361,89);
+insert into t (id,a) values (361,90);
+insert into t (id,a) values (361,91);
+insert into t (id,a) values (361,92);
+insert into t (id,a) values (361,93);
+insert into t (id,a) values (361,94);
+insert into t (id,a) values (361,95);
+insert into t (id,a) values (361,96);
+insert into t (id,a) values (361,97);
+insert into t (id,a) values (361,98);
+insert into t (id,a) values (361,99);
+insert into t (id,a) values (362,0);
+insert into t (id,a) values (362,1);
+insert into t (id,a) values (362,2);
+insert into t (id,a) values (362,3);
+insert into t (id,a) values (362,4);
+insert into t (id,a) values (362,5);
+insert into t (id,a) values (362,6);
+insert into t (id,a) values (362,7);
+insert into t (id,a) values (362,8);
+insert into t (id,a) values (362,9);
+insert into t (id,a) values (362,10);
+insert into t (id,a) values (362,11);
+insert into t (id,a) values (362,12);
+insert into t (id,a) values (362,13);
+insert into t (id,a) values (362,14);
+insert into t (id,a) values (362,15);
+insert into t (id,a) values (362,16);
+insert into t (id,a) values (362,17);
+insert into t (id,a) values (362,18);
+insert into t (id,a) values (362,19);
+insert into t (id,a) values (362,20);
+insert into t (id,a) values (362,21);
+insert into t (id,a) values (362,22);
+insert into t (id,a) values (362,23);
+insert into t (id,a) values (362,24);
+insert into t (id,a) values (362,25);
+insert into t (id,a) values (362,26);
+insert into t (id,a) values (362,27);
+insert into t (id,a) values (362,28);
+insert into t (id,a) values (362,29);
+insert into t (id,a) values (362,30);
+insert into t (id,a) values (362,31);
+insert into t (id,a) values (362,32);
+insert into t (id,a) values (362,33);
+insert into t (id,a) values (362,34);
+insert into t (id,a) values (362,35);
+insert into t (id,a) values (362,36);
+insert into t (id,a) values (362,37);
+insert into t (id,a) values (362,38);
+insert into t (id,a) values (362,39);
+insert into t (id,a) values (362,40);
+insert into t (id,a) values (362,41);
+insert into t (id,a) values (362,42);
+insert into t (id,a) values (362,43);
+insert into t (id,a) values (362,44);
+insert into t (id,a) values (362,45);
+insert into t (id,a) values (362,46);
+insert into t (id,a) values (362,47);
+insert into t (id,a) values (362,48);
+insert into t (id,a) values (362,49);
+insert into t (id,a) values (362,50);
+insert into t (id,a) values (362,51);
+insert into t (id,a) values (362,52);
+insert into t (id,a) values (362,53);
+insert into t (id,a) values (362,54);
+insert into t (id,a) values (362,55);
+insert into t (id,a) values (362,56);
+insert into t (id,a) values (362,57);
+insert into t (id,a) values (362,58);
+insert into t (id,a) values (362,59);
+insert into t (id,a) values (362,60);
+insert into t (id,a) values (362,61);
+insert into t (id,a) values (362,62);
+insert into t (id,a) values (362,63);
+insert into t (id,a) values (362,64);
+insert into t (id,a) values (362,65);
+insert into t (id,a) values (362,66);
+insert into t (id,a) values (362,67);
+insert into t (id,a) values (362,68);
+insert into t (id,a) values (362,69);
+insert into t (id,a) values (362,70);
+insert into t (id,a) values (362,71);
+insert into t (id,a) values (362,72);
+insert into t (id,a) values (362,73);
+insert into t (id,a) values (362,74);
+insert into t (id,a) values (362,75);
+insert into t (id,a) values (362,76);
+insert into t (id,a) values (362,77);
+insert into t (id,a) values (362,78);
+insert into t (id,a) values (362,79);
+insert into t (id,a) values (362,80);
+insert into t (id,a) values (362,81);
+insert into t (id,a) values (362,82);
+insert into t (id,a) values (362,83);
+insert into t (id,a) values (362,84);
+insert into t (id,a) values (362,85);
+insert into t (id,a) values (362,86);
+insert into t (id,a) values (362,87);
+insert into t (id,a) values (362,88);
+insert into t (id,a) values (362,89);
+insert into t (id,a) values (362,90);
+insert into t (id,a) values (362,91);
+insert into t (id,a) values (362,92);
+insert into t (id,a) values (362,93);
+insert into t (id,a) values (362,94);
+insert into t (id,a) values (362,95);
+insert into t (id,a) values (362,96);
+insert into t (id,a) values (362,97);
+insert into t (id,a) values (362,98);
+insert into t (id,a) values (362,99);
+insert into t (id,a) values (363,0);
+insert into t (id,a) values (363,1);
+insert into t (id,a) values (363,2);
+insert into t (id,a) values (363,3);
+insert into t (id,a) values (363,4);
+insert into t (id,a) values (363,5);
+insert into t (id,a) values (363,6);
+insert into t (id,a) values (363,7);
+insert into t (id,a) values (363,8);
+insert into t (id,a) values (363,9);
+insert into t (id,a) values (363,10);
+insert into t (id,a) values (363,11);
+insert into t (id,a) values (363,12);
+insert into t (id,a) values (363,13);
+insert into t (id,a) values (363,14);
+insert into t (id,a) values (363,15);
+insert into t (id,a) values (363,16);
+insert into t (id,a) values (363,17);
+insert into t (id,a) values (363,18);
+insert into t (id,a) values (363,19);
+insert into t (id,a) values (363,20);
+insert into t (id,a) values (363,21);
+insert into t (id,a) values (363,22);
+insert into t (id,a) values (363,23);
+insert into t (id,a) values (363,24);
+insert into t (id,a) values (363,25);
+insert into t (id,a) values (363,26);
+insert into t (id,a) values (363,27);
+insert into t (id,a) values (363,28);
+insert into t (id,a) values (363,29);
+insert into t (id,a) values (363,30);
+insert into t (id,a) values (363,31);
+insert into t (id,a) values (363,32);
+insert into t (id,a) values (363,33);
+insert into t (id,a) values (363,34);
+insert into t (id,a) values (363,35);
+insert into t (id,a) values (363,36);
+insert into t (id,a) values (363,37);
+insert into t (id,a) values (363,38);
+insert into t (id,a) values (363,39);
+insert into t (id,a) values (363,40);
+insert into t (id,a) values (363,41);
+insert into t (id,a) values (363,42);
+insert into t (id,a) values (363,43);
+insert into t (id,a) values (363,44);
+insert into t (id,a) values (363,45);
+insert into t (id,a) values (363,46);
+insert into t (id,a) values (363,47);
+insert into t (id,a) values (363,48);
+insert into t (id,a) values (363,49);
+insert into t (id,a) values (363,50);
+insert into t (id,a) values (363,51);
+insert into t (id,a) values (363,52);
+insert into t (id,a) values (363,53);
+insert into t (id,a) values (363,54);
+insert into t (id,a) values (363,55);
+insert into t (id,a) values (363,56);
+insert into t (id,a) values (363,57);
+insert into t (id,a) values (363,58);
+insert into t (id,a) values (363,59);
+insert into t (id,a) values (363,60);
+insert into t (id,a) values (363,61);
+insert into t (id,a) values (363,62);
+insert into t (id,a) values (363,63);
+insert into t (id,a) values (363,64);
+insert into t (id,a) values (363,65);
+insert into t (id,a) values (363,66);
+insert into t (id,a) values (363,67);
+insert into t (id,a) values (363,68);
+insert into t (id,a) values (363,69);
+insert into t (id,a) values (363,70);
+insert into t (id,a) values (363,71);
+insert into t (id,a) values (363,72);
+insert into t (id,a) values (363,73);
+insert into t (id,a) values (363,74);
+insert into t (id,a) values (363,75);
+insert into t (id,a) values (363,76);
+insert into t (id,a) values (363,77);
+insert into t (id,a) values (363,78);
+insert into t (id,a) values (363,79);
+insert into t (id,a) values (363,80);
+insert into t (id,a) values (363,81);
+insert into t (id,a) values (363,82);
+insert into t (id,a) values (363,83);
+insert into t (id,a) values (363,84);
+insert into t (id,a) values (363,85);
+insert into t (id,a) values (363,86);
+insert into t (id,a) values (363,87);
+insert into t (id,a) values (363,88);
+insert into t (id,a) values (363,89);
+insert into t (id,a) values (363,90);
+insert into t (id,a) values (363,91);
+insert into t (id,a) values (363,92);
+insert into t (id,a) values (363,93);
+insert into t (id,a) values (363,94);
+insert into t (id,a) values (363,95);
+insert into t (id,a) values (363,96);
+insert into t (id,a) values (363,97);
+insert into t (id,a) values (363,98);
+insert into t (id,a) values (363,99);
+insert into t (id,a) values (364,0);
+insert into t (id,a) values (364,1);
+insert into t (id,a) values (364,2);
+insert into t (id,a) values (364,3);
+insert into t (id,a) values (364,4);
+insert into t (id,a) values (364,5);
+insert into t (id,a) values (364,6);
+insert into t (id,a) values (364,7);
+insert into t (id,a) values (364,8);
+insert into t (id,a) values (364,9);
+insert into t (id,a) values (364,10);
+insert into t (id,a) values (364,11);
+insert into t (id,a) values (364,12);
+insert into t (id,a) values (364,13);
+insert into t (id,a) values (364,14);
+insert into t (id,a) values (364,15);
+insert into t (id,a) values (364,16);
+insert into t (id,a) values (364,17);
+insert into t (id,a) values (364,18);
+insert into t (id,a) values (364,19);
+insert into t (id,a) values (364,20);
+insert into t (id,a) values (364,21);
+insert into t (id,a) values (364,22);
+insert into t (id,a) values (364,23);
+insert into t (id,a) values (364,24);
+insert into t (id,a) values (364,25);
+insert into t (id,a) values (364,26);
+insert into t (id,a) values (364,27);
+insert into t (id,a) values (364,28);
+insert into t (id,a) values (364,29);
+insert into t (id,a) values (364,30);
+insert into t (id,a) values (364,31);
+insert into t (id,a) values (364,32);
+insert into t (id,a) values (364,33);
+insert into t (id,a) values (364,34);
+insert into t (id,a) values (364,35);
+insert into t (id,a) values (364,36);
+insert into t (id,a) values (364,37);
+insert into t (id,a) values (364,38);
+insert into t (id,a) values (364,39);
+insert into t (id,a) values (364,40);
+insert into t (id,a) values (364,41);
+insert into t (id,a) values (364,42);
+insert into t (id,a) values (364,43);
+insert into t (id,a) values (364,44);
+insert into t (id,a) values (364,45);
+insert into t (id,a) values (364,46);
+insert into t (id,a) values (364,47);
+insert into t (id,a) values (364,48);
+insert into t (id,a) values (364,49);
+insert into t (id,a) values (364,50);
+insert into t (id,a) values (364,51);
+insert into t (id,a) values (364,52);
+insert into t (id,a) values (364,53);
+insert into t (id,a) values (364,54);
+insert into t (id,a) values (364,55);
+insert into t (id,a) values (364,56);
+insert into t (id,a) values (364,57);
+insert into t (id,a) values (364,58);
+insert into t (id,a) values (364,59);
+insert into t (id,a) values (364,60);
+insert into t (id,a) values (364,61);
+insert into t (id,a) values (364,62);
+insert into t (id,a) values (364,63);
+insert into t (id,a) values (364,64);
+insert into t (id,a) values (364,65);
+insert into t (id,a) values (364,66);
+insert into t (id,a) values (364,67);
+insert into t (id,a) values (364,68);
+insert into t (id,a) values (364,69);
+insert into t (id,a) values (364,70);
+insert into t (id,a) values (364,71);
+insert into t (id,a) values (364,72);
+insert into t (id,a) values (364,73);
+insert into t (id,a) values (364,74);
+insert into t (id,a) values (364,75);
+insert into t (id,a) values (364,76);
+insert into t (id,a) values (364,77);
+insert into t (id,a) values (364,78);
+insert into t (id,a) values (364,79);
+insert into t (id,a) values (364,80);
+insert into t (id,a) values (364,81);
+insert into t (id,a) values (364,82);
+insert into t (id,a) values (364,83);
+insert into t (id,a) values (364,84);
+insert into t (id,a) values (364,85);
+insert into t (id,a) values (364,86);
+insert into t (id,a) values (364,87);
+insert into t (id,a) values (364,88);
+insert into t (id,a) values (364,89);
+insert into t (id,a) values (364,90);
+insert into t (id,a) values (364,91);
+insert into t (id,a) values (364,92);
+insert into t (id,a) values (364,93);
+insert into t (id,a) values (364,94);
+insert into t (id,a) values (364,95);
+insert into t (id,a) values (364,96);
+insert into t (id,a) values (364,97);
+insert into t (id,a) values (364,98);
+insert into t (id,a) values (364,99);
+insert into t (id,a) values (365,0);
+insert into t (id,a) values (365,1);
+insert into t (id,a) values (365,2);
+insert into t (id,a) values (365,3);
+insert into t (id,a) values (365,4);
+insert into t (id,a) values (365,5);
+insert into t (id,a) values (365,6);
+insert into t (id,a) values (365,7);
+insert into t (id,a) values (365,8);
+insert into t (id,a) values (365,9);
+insert into t (id,a) values (365,10);
+insert into t (id,a) values (365,11);
+insert into t (id,a) values (365,12);
+insert into t (id,a) values (365,13);
+insert into t (id,a) values (365,14);
+insert into t (id,a) values (365,15);
+insert into t (id,a) values (365,16);
+insert into t (id,a) values (365,17);
+insert into t (id,a) values (365,18);
+insert into t (id,a) values (365,19);
+insert into t (id,a) values (365,20);
+insert into t (id,a) values (365,21);
+insert into t (id,a) values (365,22);
+insert into t (id,a) values (365,23);
+insert into t (id,a) values (365,24);
+insert into t (id,a) values (365,25);
+insert into t (id,a) values (365,26);
+insert into t (id,a) values (365,27);
+insert into t (id,a) values (365,28);
+insert into t (id,a) values (365,29);
+insert into t (id,a) values (365,30);
+insert into t (id,a) values (365,31);
+insert into t (id,a) values (365,32);
+insert into t (id,a) values (365,33);
+insert into t (id,a) values (365,34);
+insert into t (id,a) values (365,35);
+insert into t (id,a) values (365,36);
+insert into t (id,a) values (365,37);
+insert into t (id,a) values (365,38);
+insert into t (id,a) values (365,39);
+insert into t (id,a) values (365,40);
+insert into t (id,a) values (365,41);
+insert into t (id,a) values (365,42);
+insert into t (id,a) values (365,43);
+insert into t (id,a) values (365,44);
+insert into t (id,a) values (365,45);
+insert into t (id,a) values (365,46);
+insert into t (id,a) values (365,47);
+insert into t (id,a) values (365,48);
+insert into t (id,a) values (365,49);
+insert into t (id,a) values (365,50);
+insert into t (id,a) values (365,51);
+insert into t (id,a) values (365,52);
+insert into t (id,a) values (365,53);
+insert into t (id,a) values (365,54);
+insert into t (id,a) values (365,55);
+insert into t (id,a) values (365,56);
+insert into t (id,a) values (365,57);
+insert into t (id,a) values (365,58);
+insert into t (id,a) values (365,59);
+insert into t (id,a) values (365,60);
+insert into t (id,a) values (365,61);
+insert into t (id,a) values (365,62);
+insert into t (id,a) values (365,63);
+insert into t (id,a) values (365,64);
+insert into t (id,a) values (365,65);
+insert into t (id,a) values (365,66);
+insert into t (id,a) values (365,67);
+insert into t (id,a) values (365,68);
+insert into t (id,a) values (365,69);
+insert into t (id,a) values (365,70);
+insert into t (id,a) values (365,71);
+insert into t (id,a) values (365,72);
+insert into t (id,a) values (365,73);
+insert into t (id,a) values (365,74);
+insert into t (id,a) values (365,75);
+insert into t (id,a) values (365,76);
+insert into t (id,a) values (365,77);
+insert into t (id,a) values (365,78);
+insert into t (id,a) values (365,79);
+insert into t (id,a) values (365,80);
+insert into t (id,a) values (365,81);
+insert into t (id,a) values (365,82);
+insert into t (id,a) values (365,83);
+insert into t (id,a) values (365,84);
+insert into t (id,a) values (365,85);
+insert into t (id,a) values (365,86);
+insert into t (id,a) values (365,87);
+insert into t (id,a) values (365,88);
+insert into t (id,a) values (365,89);
+insert into t (id,a) values (365,90);
+insert into t (id,a) values (365,91);
+insert into t (id,a) values (365,92);
+insert into t (id,a) values (365,93);
+insert into t (id,a) values (365,94);
+insert into t (id,a) values (365,95);
+insert into t (id,a) values (365,96);
+insert into t (id,a) values (365,97);
+insert into t (id,a) values (365,98);
+insert into t (id,a) values (365,99);
+insert into t (id,a) values (366,0);
+insert into t (id,a) values (366,1);
+insert into t (id,a) values (366,2);
+insert into t (id,a) values (366,3);
+insert into t (id,a) values (366,4);
+insert into t (id,a) values (366,5);
+insert into t (id,a) values (366,6);
+insert into t (id,a) values (366,7);
+insert into t (id,a) values (366,8);
+insert into t (id,a) values (366,9);
+insert into t (id,a) values (366,10);
+insert into t (id,a) values (366,11);
+insert into t (id,a) values (366,12);
+insert into t (id,a) values (366,13);
+insert into t (id,a) values (366,14);
+insert into t (id,a) values (366,15);
+insert into t (id,a) values (366,16);
+insert into t (id,a) values (366,17);
+insert into t (id,a) values (366,18);
+insert into t (id,a) values (366,19);
+insert into t (id,a) values (366,20);
+insert into t (id,a) values (366,21);
+insert into t (id,a) values (366,22);
+insert into t (id,a) values (366,23);
+insert into t (id,a) values (366,24);
+insert into t (id,a) values (366,25);
+insert into t (id,a) values (366,26);
+insert into t (id,a) values (366,27);
+insert into t (id,a) values (366,28);
+insert into t (id,a) values (366,29);
+insert into t (id,a) values (366,30);
+insert into t (id,a) values (366,31);
+insert into t (id,a) values (366,32);
+insert into t (id,a) values (366,33);
+insert into t (id,a) values (366,34);
+insert into t (id,a) values (366,35);
+insert into t (id,a) values (366,36);
+insert into t (id,a) values (366,37);
+insert into t (id,a) values (366,38);
+insert into t (id,a) values (366,39);
+insert into t (id,a) values (366,40);
+insert into t (id,a) values (366,41);
+insert into t (id,a) values (366,42);
+insert into t (id,a) values (366,43);
+insert into t (id,a) values (366,44);
+insert into t (id,a) values (366,45);
+insert into t (id,a) values (366,46);
+insert into t (id,a) values (366,47);
+insert into t (id,a) values (366,48);
+insert into t (id,a) values (366,49);
+insert into t (id,a) values (366,50);
+insert into t (id,a) values (366,51);
+insert into t (id,a) values (366,52);
+insert into t (id,a) values (366,53);
+insert into t (id,a) values (366,54);
+insert into t (id,a) values (366,55);
+insert into t (id,a) values (366,56);
+insert into t (id,a) values (366,57);
+insert into t (id,a) values (366,58);
+insert into t (id,a) values (366,59);
+insert into t (id,a) values (366,60);
+insert into t (id,a) values (366,61);
+insert into t (id,a) values (366,62);
+insert into t (id,a) values (366,63);
+insert into t (id,a) values (366,64);
+insert into t (id,a) values (366,65);
+insert into t (id,a) values (366,66);
+insert into t (id,a) values (366,67);
+insert into t (id,a) values (366,68);
+insert into t (id,a) values (366,69);
+insert into t (id,a) values (366,70);
+insert into t (id,a) values (366,71);
+insert into t (id,a) values (366,72);
+insert into t (id,a) values (366,73);
+insert into t (id,a) values (366,74);
+insert into t (id,a) values (366,75);
+insert into t (id,a) values (366,76);
+insert into t (id,a) values (366,77);
+insert into t (id,a) values (366,78);
+insert into t (id,a) values (366,79);
+insert into t (id,a) values (366,80);
+insert into t (id,a) values (366,81);
+insert into t (id,a) values (366,82);
+insert into t (id,a) values (366,83);
+insert into t (id,a) values (366,84);
+insert into t (id,a) values (366,85);
+insert into t (id,a) values (366,86);
+insert into t (id,a) values (366,87);
+insert into t (id,a) values (366,88);
+insert into t (id,a) values (366,89);
+insert into t (id,a) values (366,90);
+insert into t (id,a) values (366,91);
+insert into t (id,a) values (366,92);
+insert into t (id,a) values (366,93);
+insert into t (id,a) values (366,94);
+insert into t (id,a) values (366,95);
+insert into t (id,a) values (366,96);
+insert into t (id,a) values (366,97);
+insert into t (id,a) values (366,98);
+insert into t (id,a) values (366,99);
+insert into t (id,a) values (367,0);
+insert into t (id,a) values (367,1);
+insert into t (id,a) values (367,2);
+insert into t (id,a) values (367,3);
+insert into t (id,a) values (367,4);
+insert into t (id,a) values (367,5);
+insert into t (id,a) values (367,6);
+insert into t (id,a) values (367,7);
+insert into t (id,a) values (367,8);
+insert into t (id,a) values (367,9);
+insert into t (id,a) values (367,10);
+insert into t (id,a) values (367,11);
+insert into t (id,a) values (367,12);
+insert into t (id,a) values (367,13);
+insert into t (id,a) values (367,14);
+insert into t (id,a) values (367,15);
+insert into t (id,a) values (367,16);
+insert into t (id,a) values (367,17);
+insert into t (id,a) values (367,18);
+insert into t (id,a) values (367,19);
+insert into t (id,a) values (367,20);
+insert into t (id,a) values (367,21);
+insert into t (id,a) values (367,22);
+insert into t (id,a) values (367,23);
+insert into t (id,a) values (367,24);
+insert into t (id,a) values (367,25);
+insert into t (id,a) values (367,26);
+insert into t (id,a) values (367,27);
+insert into t (id,a) values (367,28);
+insert into t (id,a) values (367,29);
+insert into t (id,a) values (367,30);
+insert into t (id,a) values (367,31);
+insert into t (id,a) values (367,32);
+insert into t (id,a) values (367,33);
+insert into t (id,a) values (367,34);
+insert into t (id,a) values (367,35);
+insert into t (id,a) values (367,36);
+insert into t (id,a) values (367,37);
+insert into t (id,a) values (367,38);
+insert into t (id,a) values (367,39);
+insert into t (id,a) values (367,40);
+insert into t (id,a) values (367,41);
+insert into t (id,a) values (367,42);
+insert into t (id,a) values (367,43);
+insert into t (id,a) values (367,44);
+insert into t (id,a) values (367,45);
+insert into t (id,a) values (367,46);
+insert into t (id,a) values (367,47);
+insert into t (id,a) values (367,48);
+insert into t (id,a) values (367,49);
+insert into t (id,a) values (367,50);
+insert into t (id,a) values (367,51);
+insert into t (id,a) values (367,52);
+insert into t (id,a) values (367,53);
+insert into t (id,a) values (367,54);
+insert into t (id,a) values (367,55);
+insert into t (id,a) values (367,56);
+insert into t (id,a) values (367,57);
+insert into t (id,a) values (367,58);
+insert into t (id,a) values (367,59);
+insert into t (id,a) values (367,60);
+insert into t (id,a) values (367,61);
+insert into t (id,a) values (367,62);
+insert into t (id,a) values (367,63);
+insert into t (id,a) values (367,64);
+insert into t (id,a) values (367,65);
+insert into t (id,a) values (367,66);
+insert into t (id,a) values (367,67);
+insert into t (id,a) values (367,68);
+insert into t (id,a) values (367,69);
+insert into t (id,a) values (367,70);
+insert into t (id,a) values (367,71);
+insert into t (id,a) values (367,72);
+insert into t (id,a) values (367,73);
+insert into t (id,a) values (367,74);
+insert into t (id,a) values (367,75);
+insert into t (id,a) values (367,76);
+insert into t (id,a) values (367,77);
+insert into t (id,a) values (367,78);
+insert into t (id,a) values (367,79);
+insert into t (id,a) values (367,80);
+insert into t (id,a) values (367,81);
+insert into t (id,a) values (367,82);
+insert into t (id,a) values (367,83);
+insert into t (id,a) values (367,84);
+insert into t (id,a) values (367,85);
+insert into t (id,a) values (367,86);
+insert into t (id,a) values (367,87);
+insert into t (id,a) values (367,88);
+insert into t (id,a) values (367,89);
+insert into t (id,a) values (367,90);
+insert into t (id,a) values (367,91);
+insert into t (id,a) values (367,92);
+insert into t (id,a) values (367,93);
+insert into t (id,a) values (367,94);
+insert into t (id,a) values (367,95);
+insert into t (id,a) values (367,96);
+insert into t (id,a) values (367,97);
+insert into t (id,a) values (367,98);
+insert into t (id,a) values (367,99);
+insert into t (id,a) values (368,0);
+insert into t (id,a) values (368,1);
+insert into t (id,a) values (368,2);
+insert into t (id,a) values (368,3);
+insert into t (id,a) values (368,4);
+insert into t (id,a) values (368,5);
+insert into t (id,a) values (368,6);
+insert into t (id,a) values (368,7);
+insert into t (id,a) values (368,8);
+insert into t (id,a) values (368,9);
+insert into t (id,a) values (368,10);
+insert into t (id,a) values (368,11);
+insert into t (id,a) values (368,12);
+insert into t (id,a) values (368,13);
+insert into t (id,a) values (368,14);
+insert into t (id,a) values (368,15);
+insert into t (id,a) values (368,16);
+insert into t (id,a) values (368,17);
+insert into t (id,a) values (368,18);
+insert into t (id,a) values (368,19);
+insert into t (id,a) values (368,20);
+insert into t (id,a) values (368,21);
+insert into t (id,a) values (368,22);
+insert into t (id,a) values (368,23);
+insert into t (id,a) values (368,24);
+insert into t (id,a) values (368,25);
+insert into t (id,a) values (368,26);
+insert into t (id,a) values (368,27);
+insert into t (id,a) values (368,28);
+insert into t (id,a) values (368,29);
+insert into t (id,a) values (368,30);
+insert into t (id,a) values (368,31);
+insert into t (id,a) values (368,32);
+insert into t (id,a) values (368,33);
+insert into t (id,a) values (368,34);
+insert into t (id,a) values (368,35);
+insert into t (id,a) values (368,36);
+insert into t (id,a) values (368,37);
+insert into t (id,a) values (368,38);
+insert into t (id,a) values (368,39);
+insert into t (id,a) values (368,40);
+insert into t (id,a) values (368,41);
+insert into t (id,a) values (368,42);
+insert into t (id,a) values (368,43);
+insert into t (id,a) values (368,44);
+insert into t (id,a) values (368,45);
+insert into t (id,a) values (368,46);
+insert into t (id,a) values (368,47);
+insert into t (id,a) values (368,48);
+insert into t (id,a) values (368,49);
+insert into t (id,a) values (368,50);
+insert into t (id,a) values (368,51);
+insert into t (id,a) values (368,52);
+insert into t (id,a) values (368,53);
+insert into t (id,a) values (368,54);
+insert into t (id,a) values (368,55);
+insert into t (id,a) values (368,56);
+insert into t (id,a) values (368,57);
+insert into t (id,a) values (368,58);
+insert into t (id,a) values (368,59);
+insert into t (id,a) values (368,60);
+insert into t (id,a) values (368,61);
+insert into t (id,a) values (368,62);
+insert into t (id,a) values (368,63);
+insert into t (id,a) values (368,64);
+insert into t (id,a) values (368,65);
+insert into t (id,a) values (368,66);
+insert into t (id,a) values (368,67);
+insert into t (id,a) values (368,68);
+insert into t (id,a) values (368,69);
+insert into t (id,a) values (368,70);
+insert into t (id,a) values (368,71);
+insert into t (id,a) values (368,72);
+insert into t (id,a) values (368,73);
+insert into t (id,a) values (368,74);
+insert into t (id,a) values (368,75);
+insert into t (id,a) values (368,76);
+insert into t (id,a) values (368,77);
+insert into t (id,a) values (368,78);
+insert into t (id,a) values (368,79);
+insert into t (id,a) values (368,80);
+insert into t (id,a) values (368,81);
+insert into t (id,a) values (368,82);
+insert into t (id,a) values (368,83);
+insert into t (id,a) values (368,84);
+insert into t (id,a) values (368,85);
+insert into t (id,a) values (368,86);
+insert into t (id,a) values (368,87);
+insert into t (id,a) values (368,88);
+insert into t (id,a) values (368,89);
+insert into t (id,a) values (368,90);
+insert into t (id,a) values (368,91);
+insert into t (id,a) values (368,92);
+insert into t (id,a) values (368,93);
+insert into t (id,a) values (368,94);
+insert into t (id,a) values (368,95);
+insert into t (id,a) values (368,96);
+insert into t (id,a) values (368,97);
+insert into t (id,a) values (368,98);
+insert into t (id,a) values (368,99);
+insert into t (id,a) values (369,0);
+insert into t (id,a) values (369,1);
+insert into t (id,a) values (369,2);
+insert into t (id,a) values (369,3);
+insert into t (id,a) values (369,4);
+insert into t (id,a) values (369,5);
+insert into t (id,a) values (369,6);
+insert into t (id,a) values (369,7);
+insert into t (id,a) values (369,8);
+insert into t (id,a) values (369,9);
+insert into t (id,a) values (369,10);
+insert into t (id,a) values (369,11);
+insert into t (id,a) values (369,12);
+insert into t (id,a) values (369,13);
+insert into t (id,a) values (369,14);
+insert into t (id,a) values (369,15);
+insert into t (id,a) values (369,16);
+insert into t (id,a) values (369,17);
+insert into t (id,a) values (369,18);
+insert into t (id,a) values (369,19);
+insert into t (id,a) values (369,20);
+insert into t (id,a) values (369,21);
+insert into t (id,a) values (369,22);
+insert into t (id,a) values (369,23);
+insert into t (id,a) values (369,24);
+insert into t (id,a) values (369,25);
+insert into t (id,a) values (369,26);
+insert into t (id,a) values (369,27);
+insert into t (id,a) values (369,28);
+insert into t (id,a) values (369,29);
+insert into t (id,a) values (369,30);
+insert into t (id,a) values (369,31);
+insert into t (id,a) values (369,32);
+insert into t (id,a) values (369,33);
+insert into t (id,a) values (369,34);
+insert into t (id,a) values (369,35);
+insert into t (id,a) values (369,36);
+insert into t (id,a) values (369,37);
+insert into t (id,a) values (369,38);
+insert into t (id,a) values (369,39);
+insert into t (id,a) values (369,40);
+insert into t (id,a) values (369,41);
+insert into t (id,a) values (369,42);
+insert into t (id,a) values (369,43);
+insert into t (id,a) values (369,44);
+insert into t (id,a) values (369,45);
+insert into t (id,a) values (369,46);
+insert into t (id,a) values (369,47);
+insert into t (id,a) values (369,48);
+insert into t (id,a) values (369,49);
+insert into t (id,a) values (369,50);
+insert into t (id,a) values (369,51);
+insert into t (id,a) values (369,52);
+insert into t (id,a) values (369,53);
+insert into t (id,a) values (369,54);
+insert into t (id,a) values (369,55);
+insert into t (id,a) values (369,56);
+insert into t (id,a) values (369,57);
+insert into t (id,a) values (369,58);
+insert into t (id,a) values (369,59);
+insert into t (id,a) values (369,60);
+insert into t (id,a) values (369,61);
+insert into t (id,a) values (369,62);
+insert into t (id,a) values (369,63);
+insert into t (id,a) values (369,64);
+insert into t (id,a) values (369,65);
+insert into t (id,a) values (369,66);
+insert into t (id,a) values (369,67);
+insert into t (id,a) values (369,68);
+insert into t (id,a) values (369,69);
+insert into t (id,a) values (369,70);
+insert into t (id,a) values (369,71);
+insert into t (id,a) values (369,72);
+insert into t (id,a) values (369,73);
+insert into t (id,a) values (369,74);
+insert into t (id,a) values (369,75);
+insert into t (id,a) values (369,76);
+insert into t (id,a) values (369,77);
+insert into t (id,a) values (369,78);
+insert into t (id,a) values (369,79);
+insert into t (id,a) values (369,80);
+insert into t (id,a) values (369,81);
+insert into t (id,a) values (369,82);
+insert into t (id,a) values (369,83);
+insert into t (id,a) values (369,84);
+insert into t (id,a) values (369,85);
+insert into t (id,a) values (369,86);
+insert into t (id,a) values (369,87);
+insert into t (id,a) values (369,88);
+insert into t (id,a) values (369,89);
+insert into t (id,a) values (369,90);
+insert into t (id,a) values (369,91);
+insert into t (id,a) values (369,92);
+insert into t (id,a) values (369,93);
+insert into t (id,a) values (369,94);
+insert into t (id,a) values (369,95);
+insert into t (id,a) values (369,96);
+insert into t (id,a) values (369,97);
+insert into t (id,a) values (369,98);
+insert into t (id,a) values (369,99);
+insert into t (id,a) values (370,0);
+insert into t (id,a) values (370,1);
+insert into t (id,a) values (370,2);
+insert into t (id,a) values (370,3);
+insert into t (id,a) values (370,4);
+insert into t (id,a) values (370,5);
+insert into t (id,a) values (370,6);
+insert into t (id,a) values (370,7);
+insert into t (id,a) values (370,8);
+insert into t (id,a) values (370,9);
+insert into t (id,a) values (370,10);
+insert into t (id,a) values (370,11);
+insert into t (id,a) values (370,12);
+insert into t (id,a) values (370,13);
+insert into t (id,a) values (370,14);
+insert into t (id,a) values (370,15);
+insert into t (id,a) values (370,16);
+insert into t (id,a) values (370,17);
+insert into t (id,a) values (370,18);
+insert into t (id,a) values (370,19);
+insert into t (id,a) values (370,20);
+insert into t (id,a) values (370,21);
+insert into t (id,a) values (370,22);
+insert into t (id,a) values (370,23);
+insert into t (id,a) values (370,24);
+insert into t (id,a) values (370,25);
+insert into t (id,a) values (370,26);
+insert into t (id,a) values (370,27);
+insert into t (id,a) values (370,28);
+insert into t (id,a) values (370,29);
+insert into t (id,a) values (370,30);
+insert into t (id,a) values (370,31);
+insert into t (id,a) values (370,32);
+insert into t (id,a) values (370,33);
+insert into t (id,a) values (370,34);
+insert into t (id,a) values (370,35);
+insert into t (id,a) values (370,36);
+insert into t (id,a) values (370,37);
+insert into t (id,a) values (370,38);
+insert into t (id,a) values (370,39);
+insert into t (id,a) values (370,40);
+insert into t (id,a) values (370,41);
+insert into t (id,a) values (370,42);
+insert into t (id,a) values (370,43);
+insert into t (id,a) values (370,44);
+insert into t (id,a) values (370,45);
+insert into t (id,a) values (370,46);
+insert into t (id,a) values (370,47);
+insert into t (id,a) values (370,48);
+insert into t (id,a) values (370,49);
+insert into t (id,a) values (370,50);
+insert into t (id,a) values (370,51);
+insert into t (id,a) values (370,52);
+insert into t (id,a) values (370,53);
+insert into t (id,a) values (370,54);
+insert into t (id,a) values (370,55);
+insert into t (id,a) values (370,56);
+insert into t (id,a) values (370,57);
+insert into t (id,a) values (370,58);
+insert into t (id,a) values (370,59);
+insert into t (id,a) values (370,60);
+insert into t (id,a) values (370,61);
+insert into t (id,a) values (370,62);
+insert into t (id,a) values (370,63);
+insert into t (id,a) values (370,64);
+insert into t (id,a) values (370,65);
+insert into t (id,a) values (370,66);
+insert into t (id,a) values (370,67);
+insert into t (id,a) values (370,68);
+insert into t (id,a) values (370,69);
+insert into t (id,a) values (370,70);
+insert into t (id,a) values (370,71);
+insert into t (id,a) values (370,72);
+insert into t (id,a) values (370,73);
+insert into t (id,a) values (370,74);
+insert into t (id,a) values (370,75);
+insert into t (id,a) values (370,76);
+insert into t (id,a) values (370,77);
+insert into t (id,a) values (370,78);
+insert into t (id,a) values (370,79);
+insert into t (id,a) values (370,80);
+insert into t (id,a) values (370,81);
+insert into t (id,a) values (370,82);
+insert into t (id,a) values (370,83);
+insert into t (id,a) values (370,84);
+insert into t (id,a) values (370,85);
+insert into t (id,a) values (370,86);
+insert into t (id,a) values (370,87);
+insert into t (id,a) values (370,88);
+insert into t (id,a) values (370,89);
+insert into t (id,a) values (370,90);
+insert into t (id,a) values (370,91);
+insert into t (id,a) values (370,92);
+insert into t (id,a) values (370,93);
+insert into t (id,a) values (370,94);
+insert into t (id,a) values (370,95);
+insert into t (id,a) values (370,96);
+insert into t (id,a) values (370,97);
+insert into t (id,a) values (370,98);
+insert into t (id,a) values (370,99);
+insert into t (id,a) values (371,0);
+insert into t (id,a) values (371,1);
+insert into t (id,a) values (371,2);
+insert into t (id,a) values (371,3);
+insert into t (id,a) values (371,4);
+insert into t (id,a) values (371,5);
+insert into t (id,a) values (371,6);
+insert into t (id,a) values (371,7);
+insert into t (id,a) values (371,8);
+insert into t (id,a) values (371,9);
+insert into t (id,a) values (371,10);
+insert into t (id,a) values (371,11);
+insert into t (id,a) values (371,12);
+insert into t (id,a) values (371,13);
+insert into t (id,a) values (371,14);
+insert into t (id,a) values (371,15);
+insert into t (id,a) values (371,16);
+insert into t (id,a) values (371,17);
+insert into t (id,a) values (371,18);
+insert into t (id,a) values (371,19);
+insert into t (id,a) values (371,20);
+insert into t (id,a) values (371,21);
+insert into t (id,a) values (371,22);
+insert into t (id,a) values (371,23);
+insert into t (id,a) values (371,24);
+insert into t (id,a) values (371,25);
+insert into t (id,a) values (371,26);
+insert into t (id,a) values (371,27);
+insert into t (id,a) values (371,28);
+insert into t (id,a) values (371,29);
+insert into t (id,a) values (371,30);
+insert into t (id,a) values (371,31);
+insert into t (id,a) values (371,32);
+insert into t (id,a) values (371,33);
+insert into t (id,a) values (371,34);
+insert into t (id,a) values (371,35);
+insert into t (id,a) values (371,36);
+insert into t (id,a) values (371,37);
+insert into t (id,a) values (371,38);
+insert into t (id,a) values (371,39);
+insert into t (id,a) values (371,40);
+insert into t (id,a) values (371,41);
+insert into t (id,a) values (371,42);
+insert into t (id,a) values (371,43);
+insert into t (id,a) values (371,44);
+insert into t (id,a) values (371,45);
+insert into t (id,a) values (371,46);
+insert into t (id,a) values (371,47);
+insert into t (id,a) values (371,48);
+insert into t (id,a) values (371,49);
+insert into t (id,a) values (371,50);
+insert into t (id,a) values (371,51);
+insert into t (id,a) values (371,52);
+insert into t (id,a) values (371,53);
+insert into t (id,a) values (371,54);
+insert into t (id,a) values (371,55);
+insert into t (id,a) values (371,56);
+insert into t (id,a) values (371,57);
+insert into t (id,a) values (371,58);
+insert into t (id,a) values (371,59);
+insert into t (id,a) values (371,60);
+insert into t (id,a) values (371,61);
+insert into t (id,a) values (371,62);
+insert into t (id,a) values (371,63);
+insert into t (id,a) values (371,64);
+insert into t (id,a) values (371,65);
+insert into t (id,a) values (371,66);
+insert into t (id,a) values (371,67);
+insert into t (id,a) values (371,68);
+insert into t (id,a) values (371,69);
+insert into t (id,a) values (371,70);
+insert into t (id,a) values (371,71);
+insert into t (id,a) values (371,72);
+insert into t (id,a) values (371,73);
+insert into t (id,a) values (371,74);
+insert into t (id,a) values (371,75);
+insert into t (id,a) values (371,76);
+insert into t (id,a) values (371,77);
+insert into t (id,a) values (371,78);
+insert into t (id,a) values (371,79);
+insert into t (id,a) values (371,80);
+insert into t (id,a) values (371,81);
+insert into t (id,a) values (371,82);
+insert into t (id,a) values (371,83);
+insert into t (id,a) values (371,84);
+insert into t (id,a) values (371,85);
+insert into t (id,a) values (371,86);
+insert into t (id,a) values (371,87);
+insert into t (id,a) values (371,88);
+insert into t (id,a) values (371,89);
+insert into t (id,a) values (371,90);
+insert into t (id,a) values (371,91);
+insert into t (id,a) values (371,92);
+insert into t (id,a) values (371,93);
+insert into t (id,a) values (371,94);
+insert into t (id,a) values (371,95);
+insert into t (id,a) values (371,96);
+insert into t (id,a) values (371,97);
+insert into t (id,a) values (371,98);
+insert into t (id,a) values (371,99);
+insert into t (id,a) values (372,0);
+insert into t (id,a) values (372,1);
+insert into t (id,a) values (372,2);
+insert into t (id,a) values (372,3);
+insert into t (id,a) values (372,4);
+insert into t (id,a) values (372,5);
+insert into t (id,a) values (372,6);
+insert into t (id,a) values (372,7);
+insert into t (id,a) values (372,8);
+insert into t (id,a) values (372,9);
+insert into t (id,a) values (372,10);
+insert into t (id,a) values (372,11);
+insert into t (id,a) values (372,12);
+insert into t (id,a) values (372,13);
+insert into t (id,a) values (372,14);
+insert into t (id,a) values (372,15);
+insert into t (id,a) values (372,16);
+insert into t (id,a) values (372,17);
+insert into t (id,a) values (372,18);
+insert into t (id,a) values (372,19);
+insert into t (id,a) values (372,20);
+insert into t (id,a) values (372,21);
+insert into t (id,a) values (372,22);
+insert into t (id,a) values (372,23);
+insert into t (id,a) values (372,24);
+insert into t (id,a) values (372,25);
+insert into t (id,a) values (372,26);
+insert into t (id,a) values (372,27);
+insert into t (id,a) values (372,28);
+insert into t (id,a) values (372,29);
+insert into t (id,a) values (372,30);
+insert into t (id,a) values (372,31);
+insert into t (id,a) values (372,32);
+insert into t (id,a) values (372,33);
+insert into t (id,a) values (372,34);
+insert into t (id,a) values (372,35);
+insert into t (id,a) values (372,36);
+insert into t (id,a) values (372,37);
+insert into t (id,a) values (372,38);
+insert into t (id,a) values (372,39);
+insert into t (id,a) values (372,40);
+insert into t (id,a) values (372,41);
+insert into t (id,a) values (372,42);
+insert into t (id,a) values (372,43);
+insert into t (id,a) values (372,44);
+insert into t (id,a) values (372,45);
+insert into t (id,a) values (372,46);
+insert into t (id,a) values (372,47);
+insert into t (id,a) values (372,48);
+insert into t (id,a) values (372,49);
+insert into t (id,a) values (372,50);
+insert into t (id,a) values (372,51);
+insert into t (id,a) values (372,52);
+insert into t (id,a) values (372,53);
+insert into t (id,a) values (372,54);
+insert into t (id,a) values (372,55);
+insert into t (id,a) values (372,56);
+insert into t (id,a) values (372,57);
+insert into t (id,a) values (372,58);
+insert into t (id,a) values (372,59);
+insert into t (id,a) values (372,60);
+insert into t (id,a) values (372,61);
+insert into t (id,a) values (372,62);
+insert into t (id,a) values (372,63);
+insert into t (id,a) values (372,64);
+insert into t (id,a) values (372,65);
+insert into t (id,a) values (372,66);
+insert into t (id,a) values (372,67);
+insert into t (id,a) values (372,68);
+insert into t (id,a) values (372,69);
+insert into t (id,a) values (372,70);
+insert into t (id,a) values (372,71);
+insert into t (id,a) values (372,72);
+insert into t (id,a) values (372,73);
+insert into t (id,a) values (372,74);
+insert into t (id,a) values (372,75);
+insert into t (id,a) values (372,76);
+insert into t (id,a) values (372,77);
+insert into t (id,a) values (372,78);
+insert into t (id,a) values (372,79);
+insert into t (id,a) values (372,80);
+insert into t (id,a) values (372,81);
+insert into t (id,a) values (372,82);
+insert into t (id,a) values (372,83);
+insert into t (id,a) values (372,84);
+insert into t (id,a) values (372,85);
+insert into t (id,a) values (372,86);
+insert into t (id,a) values (372,87);
+insert into t (id,a) values (372,88);
+insert into t (id,a) values (372,89);
+insert into t (id,a) values (372,90);
+insert into t (id,a) values (372,91);
+insert into t (id,a) values (372,92);
+insert into t (id,a) values (372,93);
+insert into t (id,a) values (372,94);
+insert into t (id,a) values (372,95);
+insert into t (id,a) values (372,96);
+insert into t (id,a) values (372,97);
+insert into t (id,a) values (372,98);
+insert into t (id,a) values (372,99);
+insert into t (id,a) values (373,0);
+insert into t (id,a) values (373,1);
+insert into t (id,a) values (373,2);
+insert into t (id,a) values (373,3);
+insert into t (id,a) values (373,4);
+insert into t (id,a) values (373,5);
+insert into t (id,a) values (373,6);
+insert into t (id,a) values (373,7);
+insert into t (id,a) values (373,8);
+insert into t (id,a) values (373,9);
+insert into t (id,a) values (373,10);
+insert into t (id,a) values (373,11);
+insert into t (id,a) values (373,12);
+insert into t (id,a) values (373,13);
+insert into t (id,a) values (373,14);
+insert into t (id,a) values (373,15);
+insert into t (id,a) values (373,16);
+insert into t (id,a) values (373,17);
+insert into t (id,a) values (373,18);
+insert into t (id,a) values (373,19);
+insert into t (id,a) values (373,20);
+insert into t (id,a) values (373,21);
+insert into t (id,a) values (373,22);
+insert into t (id,a) values (373,23);
+insert into t (id,a) values (373,24);
+insert into t (id,a) values (373,25);
+insert into t (id,a) values (373,26);
+insert into t (id,a) values (373,27);
+insert into t (id,a) values (373,28);
+insert into t (id,a) values (373,29);
+insert into t (id,a) values (373,30);
+insert into t (id,a) values (373,31);
+insert into t (id,a) values (373,32);
+insert into t (id,a) values (373,33);
+insert into t (id,a) values (373,34);
+insert into t (id,a) values (373,35);
+insert into t (id,a) values (373,36);
+insert into t (id,a) values (373,37);
+insert into t (id,a) values (373,38);
+insert into t (id,a) values (373,39);
+insert into t (id,a) values (373,40);
+insert into t (id,a) values (373,41);
+insert into t (id,a) values (373,42);
+insert into t (id,a) values (373,43);
+insert into t (id,a) values (373,44);
+insert into t (id,a) values (373,45);
+insert into t (id,a) values (373,46);
+insert into t (id,a) values (373,47);
+insert into t (id,a) values (373,48);
+insert into t (id,a) values (373,49);
+insert into t (id,a) values (373,50);
+insert into t (id,a) values (373,51);
+insert into t (id,a) values (373,52);
+insert into t (id,a) values (373,53);
+insert into t (id,a) values (373,54);
+insert into t (id,a) values (373,55);
+insert into t (id,a) values (373,56);
+insert into t (id,a) values (373,57);
+insert into t (id,a) values (373,58);
+insert into t (id,a) values (373,59);
+insert into t (id,a) values (373,60);
+insert into t (id,a) values (373,61);
+insert into t (id,a) values (373,62);
+insert into t (id,a) values (373,63);
+insert into t (id,a) values (373,64);
+insert into t (id,a) values (373,65);
+insert into t (id,a) values (373,66);
+insert into t (id,a) values (373,67);
+insert into t (id,a) values (373,68);
+insert into t (id,a) values (373,69);
+insert into t (id,a) values (373,70);
+insert into t (id,a) values (373,71);
+insert into t (id,a) values (373,72);
+insert into t (id,a) values (373,73);
+insert into t (id,a) values (373,74);
+insert into t (id,a) values (373,75);
+insert into t (id,a) values (373,76);
+insert into t (id,a) values (373,77);
+insert into t (id,a) values (373,78);
+insert into t (id,a) values (373,79);
+insert into t (id,a) values (373,80);
+insert into t (id,a) values (373,81);
+insert into t (id,a) values (373,82);
+insert into t (id,a) values (373,83);
+insert into t (id,a) values (373,84);
+insert into t (id,a) values (373,85);
+insert into t (id,a) values (373,86);
+insert into t (id,a) values (373,87);
+insert into t (id,a) values (373,88);
+insert into t (id,a) values (373,89);
+insert into t (id,a) values (373,90);
+insert into t (id,a) values (373,91);
+insert into t (id,a) values (373,92);
+insert into t (id,a) values (373,93);
+insert into t (id,a) values (373,94);
+insert into t (id,a) values (373,95);
+insert into t (id,a) values (373,96);
+insert into t (id,a) values (373,97);
+insert into t (id,a) values (373,98);
+insert into t (id,a) values (373,99);
+insert into t (id,a) values (374,0);
+insert into t (id,a) values (374,1);
+insert into t (id,a) values (374,2);
+insert into t (id,a) values (374,3);
+insert into t (id,a) values (374,4);
+insert into t (id,a) values (374,5);
+insert into t (id,a) values (374,6);
+insert into t (id,a) values (374,7);
+insert into t (id,a) values (374,8);
+insert into t (id,a) values (374,9);
+insert into t (id,a) values (374,10);
+insert into t (id,a) values (374,11);
+insert into t (id,a) values (374,12);
+insert into t (id,a) values (374,13);
+insert into t (id,a) values (374,14);
+insert into t (id,a) values (374,15);
+insert into t (id,a) values (374,16);
+insert into t (id,a) values (374,17);
+insert into t (id,a) values (374,18);
+insert into t (id,a) values (374,19);
+insert into t (id,a) values (374,20);
+insert into t (id,a) values (374,21);
+insert into t (id,a) values (374,22);
+insert into t (id,a) values (374,23);
+insert into t (id,a) values (374,24);
+insert into t (id,a) values (374,25);
+insert into t (id,a) values (374,26);
+insert into t (id,a) values (374,27);
+insert into t (id,a) values (374,28);
+insert into t (id,a) values (374,29);
+insert into t (id,a) values (374,30);
+insert into t (id,a) values (374,31);
+insert into t (id,a) values (374,32);
+insert into t (id,a) values (374,33);
+insert into t (id,a) values (374,34);
+insert into t (id,a) values (374,35);
+insert into t (id,a) values (374,36);
+insert into t (id,a) values (374,37);
+insert into t (id,a) values (374,38);
+insert into t (id,a) values (374,39);
+insert into t (id,a) values (374,40);
+insert into t (id,a) values (374,41);
+insert into t (id,a) values (374,42);
+insert into t (id,a) values (374,43);
+insert into t (id,a) values (374,44);
+insert into t (id,a) values (374,45);
+insert into t (id,a) values (374,46);
+insert into t (id,a) values (374,47);
+insert into t (id,a) values (374,48);
+insert into t (id,a) values (374,49);
+insert into t (id,a) values (374,50);
+insert into t (id,a) values (374,51);
+insert into t (id,a) values (374,52);
+insert into t (id,a) values (374,53);
+insert into t (id,a) values (374,54);
+insert into t (id,a) values (374,55);
+insert into t (id,a) values (374,56);
+insert into t (id,a) values (374,57);
+insert into t (id,a) values (374,58);
+insert into t (id,a) values (374,59);
+insert into t (id,a) values (374,60);
+insert into t (id,a) values (374,61);
+insert into t (id,a) values (374,62);
+insert into t (id,a) values (374,63);
+insert into t (id,a) values (374,64);
+insert into t (id,a) values (374,65);
+insert into t (id,a) values (374,66);
+insert into t (id,a) values (374,67);
+insert into t (id,a) values (374,68);
+insert into t (id,a) values (374,69);
+insert into t (id,a) values (374,70);
+insert into t (id,a) values (374,71);
+insert into t (id,a) values (374,72);
+insert into t (id,a) values (374,73);
+insert into t (id,a) values (374,74);
+insert into t (id,a) values (374,75);
+insert into t (id,a) values (374,76);
+insert into t (id,a) values (374,77);
+insert into t (id,a) values (374,78);
+insert into t (id,a) values (374,79);
+insert into t (id,a) values (374,80);
+insert into t (id,a) values (374,81);
+insert into t (id,a) values (374,82);
+insert into t (id,a) values (374,83);
+insert into t (id,a) values (374,84);
+insert into t (id,a) values (374,85);
+insert into t (id,a) values (374,86);
+insert into t (id,a) values (374,87);
+insert into t (id,a) values (374,88);
+insert into t (id,a) values (374,89);
+insert into t (id,a) values (374,90);
+insert into t (id,a) values (374,91);
+insert into t (id,a) values (374,92);
+insert into t (id,a) values (374,93);
+insert into t (id,a) values (374,94);
+insert into t (id,a) values (374,95);
+insert into t (id,a) values (374,96);
+insert into t (id,a) values (374,97);
+insert into t (id,a) values (374,98);
+insert into t (id,a) values (374,99);
+insert into t (id,a) values (375,0);
+insert into t (id,a) values (375,1);
+insert into t (id,a) values (375,2);
+insert into t (id,a) values (375,3);
+insert into t (id,a) values (375,4);
+insert into t (id,a) values (375,5);
+insert into t (id,a) values (375,6);
+insert into t (id,a) values (375,7);
+insert into t (id,a) values (375,8);
+insert into t (id,a) values (375,9);
+insert into t (id,a) values (375,10);
+insert into t (id,a) values (375,11);
+insert into t (id,a) values (375,12);
+insert into t (id,a) values (375,13);
+insert into t (id,a) values (375,14);
+insert into t (id,a) values (375,15);
+insert into t (id,a) values (375,16);
+insert into t (id,a) values (375,17);
+insert into t (id,a) values (375,18);
+insert into t (id,a) values (375,19);
+insert into t (id,a) values (375,20);
+insert into t (id,a) values (375,21);
+insert into t (id,a) values (375,22);
+insert into t (id,a) values (375,23);
+insert into t (id,a) values (375,24);
+insert into t (id,a) values (375,25);
+insert into t (id,a) values (375,26);
+insert into t (id,a) values (375,27);
+insert into t (id,a) values (375,28);
+insert into t (id,a) values (375,29);
+insert into t (id,a) values (375,30);
+insert into t (id,a) values (375,31);
+insert into t (id,a) values (375,32);
+insert into t (id,a) values (375,33);
+insert into t (id,a) values (375,34);
+insert into t (id,a) values (375,35);
+insert into t (id,a) values (375,36);
+insert into t (id,a) values (375,37);
+insert into t (id,a) values (375,38);
+insert into t (id,a) values (375,39);
+insert into t (id,a) values (375,40);
+insert into t (id,a) values (375,41);
+insert into t (id,a) values (375,42);
+insert into t (id,a) values (375,43);
+insert into t (id,a) values (375,44);
+insert into t (id,a) values (375,45);
+insert into t (id,a) values (375,46);
+insert into t (id,a) values (375,47);
+insert into t (id,a) values (375,48);
+insert into t (id,a) values (375,49);
+insert into t (id,a) values (375,50);
+insert into t (id,a) values (375,51);
+insert into t (id,a) values (375,52);
+insert into t (id,a) values (375,53);
+insert into t (id,a) values (375,54);
+insert into t (id,a) values (375,55);
+insert into t (id,a) values (375,56);
+insert into t (id,a) values (375,57);
+insert into t (id,a) values (375,58);
+insert into t (id,a) values (375,59);
+insert into t (id,a) values (375,60);
+insert into t (id,a) values (375,61);
+insert into t (id,a) values (375,62);
+insert into t (id,a) values (375,63);
+insert into t (id,a) values (375,64);
+insert into t (id,a) values (375,65);
+insert into t (id,a) values (375,66);
+insert into t (id,a) values (375,67);
+insert into t (id,a) values (375,68);
+insert into t (id,a) values (375,69);
+insert into t (id,a) values (375,70);
+insert into t (id,a) values (375,71);
+insert into t (id,a) values (375,72);
+insert into t (id,a) values (375,73);
+insert into t (id,a) values (375,74);
+insert into t (id,a) values (375,75);
+insert into t (id,a) values (375,76);
+insert into t (id,a) values (375,77);
+insert into t (id,a) values (375,78);
+insert into t (id,a) values (375,79);
+insert into t (id,a) values (375,80);
+insert into t (id,a) values (375,81);
+insert into t (id,a) values (375,82);
+insert into t (id,a) values (375,83);
+insert into t (id,a) values (375,84);
+insert into t (id,a) values (375,85);
+insert into t (id,a) values (375,86);
+insert into t (id,a) values (375,87);
+insert into t (id,a) values (375,88);
+insert into t (id,a) values (375,89);
+insert into t (id,a) values (375,90);
+insert into t (id,a) values (375,91);
+insert into t (id,a) values (375,92);
+insert into t (id,a) values (375,93);
+insert into t (id,a) values (375,94);
+insert into t (id,a) values (375,95);
+insert into t (id,a) values (375,96);
+insert into t (id,a) values (375,97);
+insert into t (id,a) values (375,98);
+insert into t (id,a) values (375,99);
+insert into t (id,a) values (376,0);
+insert into t (id,a) values (376,1);
+insert into t (id,a) values (376,2);
+insert into t (id,a) values (376,3);
+insert into t (id,a) values (376,4);
+insert into t (id,a) values (376,5);
+insert into t (id,a) values (376,6);
+insert into t (id,a) values (376,7);
+insert into t (id,a) values (376,8);
+insert into t (id,a) values (376,9);
+insert into t (id,a) values (376,10);
+insert into t (id,a) values (376,11);
+insert into t (id,a) values (376,12);
+insert into t (id,a) values (376,13);
+insert into t (id,a) values (376,14);
+insert into t (id,a) values (376,15);
+insert into t (id,a) values (376,16);
+insert into t (id,a) values (376,17);
+insert into t (id,a) values (376,18);
+insert into t (id,a) values (376,19);
+insert into t (id,a) values (376,20);
+insert into t (id,a) values (376,21);
+insert into t (id,a) values (376,22);
+insert into t (id,a) values (376,23);
+insert into t (id,a) values (376,24);
+insert into t (id,a) values (376,25);
+insert into t (id,a) values (376,26);
+insert into t (id,a) values (376,27);
+insert into t (id,a) values (376,28);
+insert into t (id,a) values (376,29);
+insert into t (id,a) values (376,30);
+insert into t (id,a) values (376,31);
+insert into t (id,a) values (376,32);
+insert into t (id,a) values (376,33);
+insert into t (id,a) values (376,34);
+insert into t (id,a) values (376,35);
+insert into t (id,a) values (376,36);
+insert into t (id,a) values (376,37);
+insert into t (id,a) values (376,38);
+insert into t (id,a) values (376,39);
+insert into t (id,a) values (376,40);
+insert into t (id,a) values (376,41);
+insert into t (id,a) values (376,42);
+insert into t (id,a) values (376,43);
+insert into t (id,a) values (376,44);
+insert into t (id,a) values (376,45);
+insert into t (id,a) values (376,46);
+insert into t (id,a) values (376,47);
+insert into t (id,a) values (376,48);
+insert into t (id,a) values (376,49);
+insert into t (id,a) values (376,50);
+insert into t (id,a) values (376,51);
+insert into t (id,a) values (376,52);
+insert into t (id,a) values (376,53);
+insert into t (id,a) values (376,54);
+insert into t (id,a) values (376,55);
+insert into t (id,a) values (376,56);
+insert into t (id,a) values (376,57);
+insert into t (id,a) values (376,58);
+insert into t (id,a) values (376,59);
+insert into t (id,a) values (376,60);
+insert into t (id,a) values (376,61);
+insert into t (id,a) values (376,62);
+insert into t (id,a) values (376,63);
+insert into t (id,a) values (376,64);
+insert into t (id,a) values (376,65);
+insert into t (id,a) values (376,66);
+insert into t (id,a) values (376,67);
+insert into t (id,a) values (376,68);
+insert into t (id,a) values (376,69);
+insert into t (id,a) values (376,70);
+insert into t (id,a) values (376,71);
+insert into t (id,a) values (376,72);
+insert into t (id,a) values (376,73);
+insert into t (id,a) values (376,74);
+insert into t (id,a) values (376,75);
+insert into t (id,a) values (376,76);
+insert into t (id,a) values (376,77);
+insert into t (id,a) values (376,78);
+insert into t (id,a) values (376,79);
+insert into t (id,a) values (376,80);
+insert into t (id,a) values (376,81);
+insert into t (id,a) values (376,82);
+insert into t (id,a) values (376,83);
+insert into t (id,a) values (376,84);
+insert into t (id,a) values (376,85);
+insert into t (id,a) values (376,86);
+insert into t (id,a) values (376,87);
+insert into t (id,a) values (376,88);
+insert into t (id,a) values (376,89);
+insert into t (id,a) values (376,90);
+insert into t (id,a) values (376,91);
+insert into t (id,a) values (376,92);
+insert into t (id,a) values (376,93);
+insert into t (id,a) values (376,94);
+insert into t (id,a) values (376,95);
+insert into t (id,a) values (376,96);
+insert into t (id,a) values (376,97);
+insert into t (id,a) values (376,98);
+insert into t (id,a) values (376,99);
+insert into t (id,a) values (377,0);
+insert into t (id,a) values (377,1);
+insert into t (id,a) values (377,2);
+insert into t (id,a) values (377,3);
+insert into t (id,a) values (377,4);
+insert into t (id,a) values (377,5);
+insert into t (id,a) values (377,6);
+insert into t (id,a) values (377,7);
+insert into t (id,a) values (377,8);
+insert into t (id,a) values (377,9);
+insert into t (id,a) values (377,10);
+insert into t (id,a) values (377,11);
+insert into t (id,a) values (377,12);
+insert into t (id,a) values (377,13);
+insert into t (id,a) values (377,14);
+insert into t (id,a) values (377,15);
+insert into t (id,a) values (377,16);
+insert into t (id,a) values (377,17);
+insert into t (id,a) values (377,18);
+insert into t (id,a) values (377,19);
+insert into t (id,a) values (377,20);
+insert into t (id,a) values (377,21);
+insert into t (id,a) values (377,22);
+insert into t (id,a) values (377,23);
+insert into t (id,a) values (377,24);
+insert into t (id,a) values (377,25);
+insert into t (id,a) values (377,26);
+insert into t (id,a) values (377,27);
+insert into t (id,a) values (377,28);
+insert into t (id,a) values (377,29);
+insert into t (id,a) values (377,30);
+insert into t (id,a) values (377,31);
+insert into t (id,a) values (377,32);
+insert into t (id,a) values (377,33);
+insert into t (id,a) values (377,34);
+insert into t (id,a) values (377,35);
+insert into t (id,a) values (377,36);
+insert into t (id,a) values (377,37);
+insert into t (id,a) values (377,38);
+insert into t (id,a) values (377,39);
+insert into t (id,a) values (377,40);
+insert into t (id,a) values (377,41);
+insert into t (id,a) values (377,42);
+insert into t (id,a) values (377,43);
+insert into t (id,a) values (377,44);
+insert into t (id,a) values (377,45);
+insert into t (id,a) values (377,46);
+insert into t (id,a) values (377,47);
+insert into t (id,a) values (377,48);
+insert into t (id,a) values (377,49);
+insert into t (id,a) values (377,50);
+insert into t (id,a) values (377,51);
+insert into t (id,a) values (377,52);
+insert into t (id,a) values (377,53);
+insert into t (id,a) values (377,54);
+insert into t (id,a) values (377,55);
+insert into t (id,a) values (377,56);
+insert into t (id,a) values (377,57);
+insert into t (id,a) values (377,58);
+insert into t (id,a) values (377,59);
+insert into t (id,a) values (377,60);
+insert into t (id,a) values (377,61);
+insert into t (id,a) values (377,62);
+insert into t (id,a) values (377,63);
+insert into t (id,a) values (377,64);
+insert into t (id,a) values (377,65);
+insert into t (id,a) values (377,66);
+insert into t (id,a) values (377,67);
+insert into t (id,a) values (377,68);
+insert into t (id,a) values (377,69);
+insert into t (id,a) values (377,70);
+insert into t (id,a) values (377,71);
+insert into t (id,a) values (377,72);
+insert into t (id,a) values (377,73);
+insert into t (id,a) values (377,74);
+insert into t (id,a) values (377,75);
+insert into t (id,a) values (377,76);
+insert into t (id,a) values (377,77);
+insert into t (id,a) values (377,78);
+insert into t (id,a) values (377,79);
+insert into t (id,a) values (377,80);
+insert into t (id,a) values (377,81);
+insert into t (id,a) values (377,82);
+insert into t (id,a) values (377,83);
+insert into t (id,a) values (377,84);
+insert into t (id,a) values (377,85);
+insert into t (id,a) values (377,86);
+insert into t (id,a) values (377,87);
+insert into t (id,a) values (377,88);
+insert into t (id,a) values (377,89);
+insert into t (id,a) values (377,90);
+insert into t (id,a) values (377,91);
+insert into t (id,a) values (377,92);
+insert into t (id,a) values (377,93);
+insert into t (id,a) values (377,94);
+insert into t (id,a) values (377,95);
+insert into t (id,a) values (377,96);
+insert into t (id,a) values (377,97);
+insert into t (id,a) values (377,98);
+insert into t (id,a) values (377,99);
+insert into t (id,a) values (378,0);
+insert into t (id,a) values (378,1);
+insert into t (id,a) values (378,2);
+insert into t (id,a) values (378,3);
+insert into t (id,a) values (378,4);
+insert into t (id,a) values (378,5);
+insert into t (id,a) values (378,6);
+insert into t (id,a) values (378,7);
+insert into t (id,a) values (378,8);
+insert into t (id,a) values (378,9);
+insert into t (id,a) values (378,10);
+insert into t (id,a) values (378,11);
+insert into t (id,a) values (378,12);
+insert into t (id,a) values (378,13);
+insert into t (id,a) values (378,14);
+insert into t (id,a) values (378,15);
+insert into t (id,a) values (378,16);
+insert into t (id,a) values (378,17);
+insert into t (id,a) values (378,18);
+insert into t (id,a) values (378,19);
+insert into t (id,a) values (378,20);
+insert into t (id,a) values (378,21);
+insert into t (id,a) values (378,22);
+insert into t (id,a) values (378,23);
+insert into t (id,a) values (378,24);
+insert into t (id,a) values (378,25);
+insert into t (id,a) values (378,26);
+insert into t (id,a) values (378,27);
+insert into t (id,a) values (378,28);
+insert into t (id,a) values (378,29);
+insert into t (id,a) values (378,30);
+insert into t (id,a) values (378,31);
+insert into t (id,a) values (378,32);
+insert into t (id,a) values (378,33);
+insert into t (id,a) values (378,34);
+insert into t (id,a) values (378,35);
+insert into t (id,a) values (378,36);
+insert into t (id,a) values (378,37);
+insert into t (id,a) values (378,38);
+insert into t (id,a) values (378,39);
+insert into t (id,a) values (378,40);
+insert into t (id,a) values (378,41);
+insert into t (id,a) values (378,42);
+insert into t (id,a) values (378,43);
+insert into t (id,a) values (378,44);
+insert into t (id,a) values (378,45);
+insert into t (id,a) values (378,46);
+insert into t (id,a) values (378,47);
+insert into t (id,a) values (378,48);
+insert into t (id,a) values (378,49);
+insert into t (id,a) values (378,50);
+insert into t (id,a) values (378,51);
+insert into t (id,a) values (378,52);
+insert into t (id,a) values (378,53);
+insert into t (id,a) values (378,54);
+insert into t (id,a) values (378,55);
+insert into t (id,a) values (378,56);
+insert into t (id,a) values (378,57);
+insert into t (id,a) values (378,58);
+insert into t (id,a) values (378,59);
+insert into t (id,a) values (378,60);
+insert into t (id,a) values (378,61);
+insert into t (id,a) values (378,62);
+insert into t (id,a) values (378,63);
+insert into t (id,a) values (378,64);
+insert into t (id,a) values (378,65);
+insert into t (id,a) values (378,66);
+insert into t (id,a) values (378,67);
+insert into t (id,a) values (378,68);
+insert into t (id,a) values (378,69);
+insert into t (id,a) values (378,70);
+insert into t (id,a) values (378,71);
+insert into t (id,a) values (378,72);
+insert into t (id,a) values (378,73);
+insert into t (id,a) values (378,74);
+insert into t (id,a) values (378,75);
+insert into t (id,a) values (378,76);
+insert into t (id,a) values (378,77);
+insert into t (id,a) values (378,78);
+insert into t (id,a) values (378,79);
+insert into t (id,a) values (378,80);
+insert into t (id,a) values (378,81);
+insert into t (id,a) values (378,82);
+insert into t (id,a) values (378,83);
+insert into t (id,a) values (378,84);
+insert into t (id,a) values (378,85);
+insert into t (id,a) values (378,86);
+insert into t (id,a) values (378,87);
+insert into t (id,a) values (378,88);
+insert into t (id,a) values (378,89);
+insert into t (id,a) values (378,90);
+insert into t (id,a) values (378,91);
+insert into t (id,a) values (378,92);
+insert into t (id,a) values (378,93);
+insert into t (id,a) values (378,94);
+insert into t (id,a) values (378,95);
+insert into t (id,a) values (378,96);
+insert into t (id,a) values (378,97);
+insert into t (id,a) values (378,98);
+insert into t (id,a) values (378,99);
+insert into t (id,a) values (379,0);
+insert into t (id,a) values (379,1);
+insert into t (id,a) values (379,2);
+insert into t (id,a) values (379,3);
+insert into t (id,a) values (379,4);
+insert into t (id,a) values (379,5);
+insert into t (id,a) values (379,6);
+insert into t (id,a) values (379,7);
+insert into t (id,a) values (379,8);
+insert into t (id,a) values (379,9);
+insert into t (id,a) values (379,10);
+insert into t (id,a) values (379,11);
+insert into t (id,a) values (379,12);
+insert into t (id,a) values (379,13);
+insert into t (id,a) values (379,14);
+insert into t (id,a) values (379,15);
+insert into t (id,a) values (379,16);
+insert into t (id,a) values (379,17);
+insert into t (id,a) values (379,18);
+insert into t (id,a) values (379,19);
+insert into t (id,a) values (379,20);
+insert into t (id,a) values (379,21);
+insert into t (id,a) values (379,22);
+insert into t (id,a) values (379,23);
+insert into t (id,a) values (379,24);
+insert into t (id,a) values (379,25);
+insert into t (id,a) values (379,26);
+insert into t (id,a) values (379,27);
+insert into t (id,a) values (379,28);
+insert into t (id,a) values (379,29);
+insert into t (id,a) values (379,30);
+insert into t (id,a) values (379,31);
+insert into t (id,a) values (379,32);
+insert into t (id,a) values (379,33);
+insert into t (id,a) values (379,34);
+insert into t (id,a) values (379,35);
+insert into t (id,a) values (379,36);
+insert into t (id,a) values (379,37);
+insert into t (id,a) values (379,38);
+insert into t (id,a) values (379,39);
+insert into t (id,a) values (379,40);
+insert into t (id,a) values (379,41);
+insert into t (id,a) values (379,42);
+insert into t (id,a) values (379,43);
+insert into t (id,a) values (379,44);
+insert into t (id,a) values (379,45);
+insert into t (id,a) values (379,46);
+insert into t (id,a) values (379,47);
+insert into t (id,a) values (379,48);
+insert into t (id,a) values (379,49);
+insert into t (id,a) values (379,50);
+insert into t (id,a) values (379,51);
+insert into t (id,a) values (379,52);
+insert into t (id,a) values (379,53);
+insert into t (id,a) values (379,54);
+insert into t (id,a) values (379,55);
+insert into t (id,a) values (379,56);
+insert into t (id,a) values (379,57);
+insert into t (id,a) values (379,58);
+insert into t (id,a) values (379,59);
+insert into t (id,a) values (379,60);
+insert into t (id,a) values (379,61);
+insert into t (id,a) values (379,62);
+insert into t (id,a) values (379,63);
+insert into t (id,a) values (379,64);
+insert into t (id,a) values (379,65);
+insert into t (id,a) values (379,66);
+insert into t (id,a) values (379,67);
+insert into t (id,a) values (379,68);
+insert into t (id,a) values (379,69);
+insert into t (id,a) values (379,70);
+insert into t (id,a) values (379,71);
+insert into t (id,a) values (379,72);
+insert into t (id,a) values (379,73);
+insert into t (id,a) values (379,74);
+insert into t (id,a) values (379,75);
+insert into t (id,a) values (379,76);
+insert into t (id,a) values (379,77);
+insert into t (id,a) values (379,78);
+insert into t (id,a) values (379,79);
+insert into t (id,a) values (379,80);
+insert into t (id,a) values (379,81);
+insert into t (id,a) values (379,82);
+insert into t (id,a) values (379,83);
+insert into t (id,a) values (379,84);
+insert into t (id,a) values (379,85);
+insert into t (id,a) values (379,86);
+insert into t (id,a) values (379,87);
+insert into t (id,a) values (379,88);
+insert into t (id,a) values (379,89);
+insert into t (id,a) values (379,90);
+insert into t (id,a) values (379,91);
+insert into t (id,a) values (379,92);
+insert into t (id,a) values (379,93);
+insert into t (id,a) values (379,94);
+insert into t (id,a) values (379,95);
+insert into t (id,a) values (379,96);
+insert into t (id,a) values (379,97);
+insert into t (id,a) values (379,98);
+insert into t (id,a) values (379,99);
+insert into t (id,a) values (380,0);
+insert into t (id,a) values (380,1);
+insert into t (id,a) values (380,2);
+insert into t (id,a) values (380,3);
+insert into t (id,a) values (380,4);
+insert into t (id,a) values (380,5);
+insert into t (id,a) values (380,6);
+insert into t (id,a) values (380,7);
+insert into t (id,a) values (380,8);
+insert into t (id,a) values (380,9);
+insert into t (id,a) values (380,10);
+insert into t (id,a) values (380,11);
+insert into t (id,a) values (380,12);
+insert into t (id,a) values (380,13);
+insert into t (id,a) values (380,14);
+insert into t (id,a) values (380,15);
+insert into t (id,a) values (380,16);
+insert into t (id,a) values (380,17);
+insert into t (id,a) values (380,18);
+insert into t (id,a) values (380,19);
+insert into t (id,a) values (380,20);
+insert into t (id,a) values (380,21);
+insert into t (id,a) values (380,22);
+insert into t (id,a) values (380,23);
+insert into t (id,a) values (380,24);
+insert into t (id,a) values (380,25);
+insert into t (id,a) values (380,26);
+insert into t (id,a) values (380,27);
+insert into t (id,a) values (380,28);
+insert into t (id,a) values (380,29);
+insert into t (id,a) values (380,30);
+insert into t (id,a) values (380,31);
+insert into t (id,a) values (380,32);
+insert into t (id,a) values (380,33);
+insert into t (id,a) values (380,34);
+insert into t (id,a) values (380,35);
+insert into t (id,a) values (380,36);
+insert into t (id,a) values (380,37);
+insert into t (id,a) values (380,38);
+insert into t (id,a) values (380,39);
+insert into t (id,a) values (380,40);
+insert into t (id,a) values (380,41);
+insert into t (id,a) values (380,42);
+insert into t (id,a) values (380,43);
+insert into t (id,a) values (380,44);
+insert into t (id,a) values (380,45);
+insert into t (id,a) values (380,46);
+insert into t (id,a) values (380,47);
+insert into t (id,a) values (380,48);
+insert into t (id,a) values (380,49);
+insert into t (id,a) values (380,50);
+insert into t (id,a) values (380,51);
+insert into t (id,a) values (380,52);
+insert into t (id,a) values (380,53);
+insert into t (id,a) values (380,54);
+insert into t (id,a) values (380,55);
+insert into t (id,a) values (380,56);
+insert into t (id,a) values (380,57);
+insert into t (id,a) values (380,58);
+insert into t (id,a) values (380,59);
+insert into t (id,a) values (380,60);
+insert into t (id,a) values (380,61);
+insert into t (id,a) values (380,62);
+insert into t (id,a) values (380,63);
+insert into t (id,a) values (380,64);
+insert into t (id,a) values (380,65);
+insert into t (id,a) values (380,66);
+insert into t (id,a) values (380,67);
+insert into t (id,a) values (380,68);
+insert into t (id,a) values (380,69);
+insert into t (id,a) values (380,70);
+insert into t (id,a) values (380,71);
+insert into t (id,a) values (380,72);
+insert into t (id,a) values (380,73);
+insert into t (id,a) values (380,74);
+insert into t (id,a) values (380,75);
+insert into t (id,a) values (380,76);
+insert into t (id,a) values (380,77);
+insert into t (id,a) values (380,78);
+insert into t (id,a) values (380,79);
+insert into t (id,a) values (380,80);
+insert into t (id,a) values (380,81);
+insert into t (id,a) values (380,82);
+insert into t (id,a) values (380,83);
+insert into t (id,a) values (380,84);
+insert into t (id,a) values (380,85);
+insert into t (id,a) values (380,86);
+insert into t (id,a) values (380,87);
+insert into t (id,a) values (380,88);
+insert into t (id,a) values (380,89);
+insert into t (id,a) values (380,90);
+insert into t (id,a) values (380,91);
+insert into t (id,a) values (380,92);
+insert into t (id,a) values (380,93);
+insert into t (id,a) values (380,94);
+insert into t (id,a) values (380,95);
+insert into t (id,a) values (380,96);
+insert into t (id,a) values (380,97);
+insert into t (id,a) values (380,98);
+insert into t (id,a) values (380,99);
+insert into t (id,a) values (381,0);
+insert into t (id,a) values (381,1);
+insert into t (id,a) values (381,2);
+insert into t (id,a) values (381,3);
+insert into t (id,a) values (381,4);
+insert into t (id,a) values (381,5);
+insert into t (id,a) values (381,6);
+insert into t (id,a) values (381,7);
+insert into t (id,a) values (381,8);
+insert into t (id,a) values (381,9);
+insert into t (id,a) values (381,10);
+insert into t (id,a) values (381,11);
+insert into t (id,a) values (381,12);
+insert into t (id,a) values (381,13);
+insert into t (id,a) values (381,14);
+insert into t (id,a) values (381,15);
+insert into t (id,a) values (381,16);
+insert into t (id,a) values (381,17);
+insert into t (id,a) values (381,18);
+insert into t (id,a) values (381,19);
+insert into t (id,a) values (381,20);
+insert into t (id,a) values (381,21);
+insert into t (id,a) values (381,22);
+insert into t (id,a) values (381,23);
+insert into t (id,a) values (381,24);
+insert into t (id,a) values (381,25);
+insert into t (id,a) values (381,26);
+insert into t (id,a) values (381,27);
+insert into t (id,a) values (381,28);
+insert into t (id,a) values (381,29);
+insert into t (id,a) values (381,30);
+insert into t (id,a) values (381,31);
+insert into t (id,a) values (381,32);
+insert into t (id,a) values (381,33);
+insert into t (id,a) values (381,34);
+insert into t (id,a) values (381,35);
+insert into t (id,a) values (381,36);
+insert into t (id,a) values (381,37);
+insert into t (id,a) values (381,38);
+insert into t (id,a) values (381,39);
+insert into t (id,a) values (381,40);
+insert into t (id,a) values (381,41);
+insert into t (id,a) values (381,42);
+insert into t (id,a) values (381,43);
+insert into t (id,a) values (381,44);
+insert into t (id,a) values (381,45);
+insert into t (id,a) values (381,46);
+insert into t (id,a) values (381,47);
+insert into t (id,a) values (381,48);
+insert into t (id,a) values (381,49);
+insert into t (id,a) values (381,50);
+insert into t (id,a) values (381,51);
+insert into t (id,a) values (381,52);
+insert into t (id,a) values (381,53);
+insert into t (id,a) values (381,54);
+insert into t (id,a) values (381,55);
+insert into t (id,a) values (381,56);
+insert into t (id,a) values (381,57);
+insert into t (id,a) values (381,58);
+insert into t (id,a) values (381,59);
+insert into t (id,a) values (381,60);
+insert into t (id,a) values (381,61);
+insert into t (id,a) values (381,62);
+insert into t (id,a) values (381,63);
+insert into t (id,a) values (381,64);
+insert into t (id,a) values (381,65);
+insert into t (id,a) values (381,66);
+insert into t (id,a) values (381,67);
+insert into t (id,a) values (381,68);
+insert into t (id,a) values (381,69);
+insert into t (id,a) values (381,70);
+insert into t (id,a) values (381,71);
+insert into t (id,a) values (381,72);
+insert into t (id,a) values (381,73);
+insert into t (id,a) values (381,74);
+insert into t (id,a) values (381,75);
+insert into t (id,a) values (381,76);
+insert into t (id,a) values (381,77);
+insert into t (id,a) values (381,78);
+insert into t (id,a) values (381,79);
+insert into t (id,a) values (381,80);
+insert into t (id,a) values (381,81);
+insert into t (id,a) values (381,82);
+insert into t (id,a) values (381,83);
+insert into t (id,a) values (381,84);
+insert into t (id,a) values (381,85);
+insert into t (id,a) values (381,86);
+insert into t (id,a) values (381,87);
+insert into t (id,a) values (381,88);
+insert into t (id,a) values (381,89);
+insert into t (id,a) values (381,90);
+insert into t (id,a) values (381,91);
+insert into t (id,a) values (381,92);
+insert into t (id,a) values (381,93);
+insert into t (id,a) values (381,94);
+insert into t (id,a) values (381,95);
+insert into t (id,a) values (381,96);
+insert into t (id,a) values (381,97);
+insert into t (id,a) values (381,98);
+insert into t (id,a) values (381,99);
+insert into t (id,a) values (382,0);
+insert into t (id,a) values (382,1);
+insert into t (id,a) values (382,2);
+insert into t (id,a) values (382,3);
+insert into t (id,a) values (382,4);
+insert into t (id,a) values (382,5);
+insert into t (id,a) values (382,6);
+insert into t (id,a) values (382,7);
+insert into t (id,a) values (382,8);
+insert into t (id,a) values (382,9);
+insert into t (id,a) values (382,10);
+insert into t (id,a) values (382,11);
+insert into t (id,a) values (382,12);
+insert into t (id,a) values (382,13);
+insert into t (id,a) values (382,14);
+insert into t (id,a) values (382,15);
+insert into t (id,a) values (382,16);
+insert into t (id,a) values (382,17);
+insert into t (id,a) values (382,18);
+insert into t (id,a) values (382,19);
+insert into t (id,a) values (382,20);
+insert into t (id,a) values (382,21);
+insert into t (id,a) values (382,22);
+insert into t (id,a) values (382,23);
+insert into t (id,a) values (382,24);
+insert into t (id,a) values (382,25);
+insert into t (id,a) values (382,26);
+insert into t (id,a) values (382,27);
+insert into t (id,a) values (382,28);
+insert into t (id,a) values (382,29);
+insert into t (id,a) values (382,30);
+insert into t (id,a) values (382,31);
+insert into t (id,a) values (382,32);
+insert into t (id,a) values (382,33);
+insert into t (id,a) values (382,34);
+insert into t (id,a) values (382,35);
+insert into t (id,a) values (382,36);
+insert into t (id,a) values (382,37);
+insert into t (id,a) values (382,38);
+insert into t (id,a) values (382,39);
+insert into t (id,a) values (382,40);
+insert into t (id,a) values (382,41);
+insert into t (id,a) values (382,42);
+insert into t (id,a) values (382,43);
+insert into t (id,a) values (382,44);
+insert into t (id,a) values (382,45);
+insert into t (id,a) values (382,46);
+insert into t (id,a) values (382,47);
+insert into t (id,a) values (382,48);
+insert into t (id,a) values (382,49);
+insert into t (id,a) values (382,50);
+insert into t (id,a) values (382,51);
+insert into t (id,a) values (382,52);
+insert into t (id,a) values (382,53);
+insert into t (id,a) values (382,54);
+insert into t (id,a) values (382,55);
+insert into t (id,a) values (382,56);
+insert into t (id,a) values (382,57);
+insert into t (id,a) values (382,58);
+insert into t (id,a) values (382,59);
+insert into t (id,a) values (382,60);
+insert into t (id,a) values (382,61);
+insert into t (id,a) values (382,62);
+insert into t (id,a) values (382,63);
+insert into t (id,a) values (382,64);
+insert into t (id,a) values (382,65);
+insert into t (id,a) values (382,66);
+insert into t (id,a) values (382,67);
+insert into t (id,a) values (382,68);
+insert into t (id,a) values (382,69);
+insert into t (id,a) values (382,70);
+insert into t (id,a) values (382,71);
+insert into t (id,a) values (382,72);
+insert into t (id,a) values (382,73);
+insert into t (id,a) values (382,74);
+insert into t (id,a) values (382,75);
+insert into t (id,a) values (382,76);
+insert into t (id,a) values (382,77);
+insert into t (id,a) values (382,78);
+insert into t (id,a) values (382,79);
+insert into t (id,a) values (382,80);
+insert into t (id,a) values (382,81);
+insert into t (id,a) values (382,82);
+insert into t (id,a) values (382,83);
+insert into t (id,a) values (382,84);
+insert into t (id,a) values (382,85);
+insert into t (id,a) values (382,86);
+insert into t (id,a) values (382,87);
+insert into t (id,a) values (382,88);
+insert into t (id,a) values (382,89);
+insert into t (id,a) values (382,90);
+insert into t (id,a) values (382,91);
+insert into t (id,a) values (382,92);
+insert into t (id,a) values (382,93);
+insert into t (id,a) values (382,94);
+insert into t (id,a) values (382,95);
+insert into t (id,a) values (382,96);
+insert into t (id,a) values (382,97);
+insert into t (id,a) values (382,98);
+insert into t (id,a) values (382,99);
+insert into t (id,a) values (383,0);
+insert into t (id,a) values (383,1);
+insert into t (id,a) values (383,2);
+insert into t (id,a) values (383,3);
+insert into t (id,a) values (383,4);
+insert into t (id,a) values (383,5);
+insert into t (id,a) values (383,6);
+insert into t (id,a) values (383,7);
+insert into t (id,a) values (383,8);
+insert into t (id,a) values (383,9);
+insert into t (id,a) values (383,10);
+insert into t (id,a) values (383,11);
+insert into t (id,a) values (383,12);
+insert into t (id,a) values (383,13);
+insert into t (id,a) values (383,14);
+insert into t (id,a) values (383,15);
+insert into t (id,a) values (383,16);
+insert into t (id,a) values (383,17);
+insert into t (id,a) values (383,18);
+insert into t (id,a) values (383,19);
+insert into t (id,a) values (383,20);
+insert into t (id,a) values (383,21);
+insert into t (id,a) values (383,22);
+insert into t (id,a) values (383,23);
+insert into t (id,a) values (383,24);
+insert into t (id,a) values (383,25);
+insert into t (id,a) values (383,26);
+insert into t (id,a) values (383,27);
+insert into t (id,a) values (383,28);
+insert into t (id,a) values (383,29);
+insert into t (id,a) values (383,30);
+insert into t (id,a) values (383,31);
+insert into t (id,a) values (383,32);
+insert into t (id,a) values (383,33);
+insert into t (id,a) values (383,34);
+insert into t (id,a) values (383,35);
+insert into t (id,a) values (383,36);
+insert into t (id,a) values (383,37);
+insert into t (id,a) values (383,38);
+insert into t (id,a) values (383,39);
+insert into t (id,a) values (383,40);
+insert into t (id,a) values (383,41);
+insert into t (id,a) values (383,42);
+insert into t (id,a) values (383,43);
+insert into t (id,a) values (383,44);
+insert into t (id,a) values (383,45);
+insert into t (id,a) values (383,46);
+insert into t (id,a) values (383,47);
+insert into t (id,a) values (383,48);
+insert into t (id,a) values (383,49);
+insert into t (id,a) values (383,50);
+insert into t (id,a) values (383,51);
+insert into t (id,a) values (383,52);
+insert into t (id,a) values (383,53);
+insert into t (id,a) values (383,54);
+insert into t (id,a) values (383,55);
+insert into t (id,a) values (383,56);
+insert into t (id,a) values (383,57);
+insert into t (id,a) values (383,58);
+insert into t (id,a) values (383,59);
+insert into t (id,a) values (383,60);
+insert into t (id,a) values (383,61);
+insert into t (id,a) values (383,62);
+insert into t (id,a) values (383,63);
+insert into t (id,a) values (383,64);
+insert into t (id,a) values (383,65);
+insert into t (id,a) values (383,66);
+insert into t (id,a) values (383,67);
+insert into t (id,a) values (383,68);
+insert into t (id,a) values (383,69);
+insert into t (id,a) values (383,70);
+insert into t (id,a) values (383,71);
+insert into t (id,a) values (383,72);
+insert into t (id,a) values (383,73);
+insert into t (id,a) values (383,74);
+insert into t (id,a) values (383,75);
+insert into t (id,a) values (383,76);
+insert into t (id,a) values (383,77);
+insert into t (id,a) values (383,78);
+insert into t (id,a) values (383,79);
+insert into t (id,a) values (383,80);
+insert into t (id,a) values (383,81);
+insert into t (id,a) values (383,82);
+insert into t (id,a) values (383,83);
+insert into t (id,a) values (383,84);
+insert into t (id,a) values (383,85);
+insert into t (id,a) values (383,86);
+insert into t (id,a) values (383,87);
+insert into t (id,a) values (383,88);
+insert into t (id,a) values (383,89);
+insert into t (id,a) values (383,90);
+insert into t (id,a) values (383,91);
+insert into t (id,a) values (383,92);
+insert into t (id,a) values (383,93);
+insert into t (id,a) values (383,94);
+insert into t (id,a) values (383,95);
+insert into t (id,a) values (383,96);
+insert into t (id,a) values (383,97);
+insert into t (id,a) values (383,98);
+insert into t (id,a) values (383,99);
+insert into t (id,a) values (384,0);
+insert into t (id,a) values (384,1);
+insert into t (id,a) values (384,2);
+insert into t (id,a) values (384,3);
+insert into t (id,a) values (384,4);
+insert into t (id,a) values (384,5);
+insert into t (id,a) values (384,6);
+insert into t (id,a) values (384,7);
+insert into t (id,a) values (384,8);
+insert into t (id,a) values (384,9);
+insert into t (id,a) values (384,10);
+insert into t (id,a) values (384,11);
+insert into t (id,a) values (384,12);
+insert into t (id,a) values (384,13);
+insert into t (id,a) values (384,14);
+insert into t (id,a) values (384,15);
+insert into t (id,a) values (384,16);
+insert into t (id,a) values (384,17);
+insert into t (id,a) values (384,18);
+insert into t (id,a) values (384,19);
+insert into t (id,a) values (384,20);
+insert into t (id,a) values (384,21);
+insert into t (id,a) values (384,22);
+insert into t (id,a) values (384,23);
+insert into t (id,a) values (384,24);
+insert into t (id,a) values (384,25);
+insert into t (id,a) values (384,26);
+insert into t (id,a) values (384,27);
+insert into t (id,a) values (384,28);
+insert into t (id,a) values (384,29);
+insert into t (id,a) values (384,30);
+insert into t (id,a) values (384,31);
+insert into t (id,a) values (384,32);
+insert into t (id,a) values (384,33);
+insert into t (id,a) values (384,34);
+insert into t (id,a) values (384,35);
+insert into t (id,a) values (384,36);
+insert into t (id,a) values (384,37);
+insert into t (id,a) values (384,38);
+insert into t (id,a) values (384,39);
+insert into t (id,a) values (384,40);
+insert into t (id,a) values (384,41);
+insert into t (id,a) values (384,42);
+insert into t (id,a) values (384,43);
+insert into t (id,a) values (384,44);
+insert into t (id,a) values (384,45);
+insert into t (id,a) values (384,46);
+insert into t (id,a) values (384,47);
+insert into t (id,a) values (384,48);
+insert into t (id,a) values (384,49);
+insert into t (id,a) values (384,50);
+insert into t (id,a) values (384,51);
+insert into t (id,a) values (384,52);
+insert into t (id,a) values (384,53);
+insert into t (id,a) values (384,54);
+insert into t (id,a) values (384,55);
+insert into t (id,a) values (384,56);
+insert into t (id,a) values (384,57);
+insert into t (id,a) values (384,58);
+insert into t (id,a) values (384,59);
+insert into t (id,a) values (384,60);
+insert into t (id,a) values (384,61);
+insert into t (id,a) values (384,62);
+insert into t (id,a) values (384,63);
+insert into t (id,a) values (384,64);
+insert into t (id,a) values (384,65);
+insert into t (id,a) values (384,66);
+insert into t (id,a) values (384,67);
+insert into t (id,a) values (384,68);
+insert into t (id,a) values (384,69);
+insert into t (id,a) values (384,70);
+insert into t (id,a) values (384,71);
+insert into t (id,a) values (384,72);
+insert into t (id,a) values (384,73);
+insert into t (id,a) values (384,74);
+insert into t (id,a) values (384,75);
+insert into t (id,a) values (384,76);
+insert into t (id,a) values (384,77);
+insert into t (id,a) values (384,78);
+insert into t (id,a) values (384,79);
+insert into t (id,a) values (384,80);
+insert into t (id,a) values (384,81);
+insert into t (id,a) values (384,82);
+insert into t (id,a) values (384,83);
+insert into t (id,a) values (384,84);
+insert into t (id,a) values (384,85);
+insert into t (id,a) values (384,86);
+insert into t (id,a) values (384,87);
+insert into t (id,a) values (384,88);
+insert into t (id,a) values (384,89);
+insert into t (id,a) values (384,90);
+insert into t (id,a) values (384,91);
+insert into t (id,a) values (384,92);
+insert into t (id,a) values (384,93);
+insert into t (id,a) values (384,94);
+insert into t (id,a) values (384,95);
+insert into t (id,a) values (384,96);
+insert into t (id,a) values (384,97);
+insert into t (id,a) values (384,98);
+insert into t (id,a) values (384,99);
+insert into t (id,a) values (385,0);
+insert into t (id,a) values (385,1);
+insert into t (id,a) values (385,2);
+insert into t (id,a) values (385,3);
+insert into t (id,a) values (385,4);
+insert into t (id,a) values (385,5);
+insert into t (id,a) values (385,6);
+insert into t (id,a) values (385,7);
+insert into t (id,a) values (385,8);
+insert into t (id,a) values (385,9);
+insert into t (id,a) values (385,10);
+insert into t (id,a) values (385,11);
+insert into t (id,a) values (385,12);
+insert into t (id,a) values (385,13);
+insert into t (id,a) values (385,14);
+insert into t (id,a) values (385,15);
+insert into t (id,a) values (385,16);
+insert into t (id,a) values (385,17);
+insert into t (id,a) values (385,18);
+insert into t (id,a) values (385,19);
+insert into t (id,a) values (385,20);
+insert into t (id,a) values (385,21);
+insert into t (id,a) values (385,22);
+insert into t (id,a) values (385,23);
+insert into t (id,a) values (385,24);
+insert into t (id,a) values (385,25);
+insert into t (id,a) values (385,26);
+insert into t (id,a) values (385,27);
+insert into t (id,a) values (385,28);
+insert into t (id,a) values (385,29);
+insert into t (id,a) values (385,30);
+insert into t (id,a) values (385,31);
+insert into t (id,a) values (385,32);
+insert into t (id,a) values (385,33);
+insert into t (id,a) values (385,34);
+insert into t (id,a) values (385,35);
+insert into t (id,a) values (385,36);
+insert into t (id,a) values (385,37);
+insert into t (id,a) values (385,38);
+insert into t (id,a) values (385,39);
+insert into t (id,a) values (385,40);
+insert into t (id,a) values (385,41);
+insert into t (id,a) values (385,42);
+insert into t (id,a) values (385,43);
+insert into t (id,a) values (385,44);
+insert into t (id,a) values (385,45);
+insert into t (id,a) values (385,46);
+insert into t (id,a) values (385,47);
+insert into t (id,a) values (385,48);
+insert into t (id,a) values (385,49);
+insert into t (id,a) values (385,50);
+insert into t (id,a) values (385,51);
+insert into t (id,a) values (385,52);
+insert into t (id,a) values (385,53);
+insert into t (id,a) values (385,54);
+insert into t (id,a) values (385,55);
+insert into t (id,a) values (385,56);
+insert into t (id,a) values (385,57);
+insert into t (id,a) values (385,58);
+insert into t (id,a) values (385,59);
+insert into t (id,a) values (385,60);
+insert into t (id,a) values (385,61);
+insert into t (id,a) values (385,62);
+insert into t (id,a) values (385,63);
+insert into t (id,a) values (385,64);
+insert into t (id,a) values (385,65);
+insert into t (id,a) values (385,66);
+insert into t (id,a) values (385,67);
+insert into t (id,a) values (385,68);
+insert into t (id,a) values (385,69);
+insert into t (id,a) values (385,70);
+insert into t (id,a) values (385,71);
+insert into t (id,a) values (385,72);
+insert into t (id,a) values (385,73);
+insert into t (id,a) values (385,74);
+insert into t (id,a) values (385,75);
+insert into t (id,a) values (385,76);
+insert into t (id,a) values (385,77);
+insert into t (id,a) values (385,78);
+insert into t (id,a) values (385,79);
+insert into t (id,a) values (385,80);
+insert into t (id,a) values (385,81);
+insert into t (id,a) values (385,82);
+insert into t (id,a) values (385,83);
+insert into t (id,a) values (385,84);
+insert into t (id,a) values (385,85);
+insert into t (id,a) values (385,86);
+insert into t (id,a) values (385,87);
+insert into t (id,a) values (385,88);
+insert into t (id,a) values (385,89);
+insert into t (id,a) values (385,90);
+insert into t (id,a) values (385,91);
+insert into t (id,a) values (385,92);
+insert into t (id,a) values (385,93);
+insert into t (id,a) values (385,94);
+insert into t (id,a) values (385,95);
+insert into t (id,a) values (385,96);
+insert into t (id,a) values (385,97);
+insert into t (id,a) values (385,98);
+insert into t (id,a) values (385,99);
+insert into t (id,a) values (386,0);
+insert into t (id,a) values (386,1);
+insert into t (id,a) values (386,2);
+insert into t (id,a) values (386,3);
+insert into t (id,a) values (386,4);
+insert into t (id,a) values (386,5);
+insert into t (id,a) values (386,6);
+insert into t (id,a) values (386,7);
+insert into t (id,a) values (386,8);
+insert into t (id,a) values (386,9);
+insert into t (id,a) values (386,10);
+insert into t (id,a) values (386,11);
+insert into t (id,a) values (386,12);
+insert into t (id,a) values (386,13);
+insert into t (id,a) values (386,14);
+insert into t (id,a) values (386,15);
+insert into t (id,a) values (386,16);
+insert into t (id,a) values (386,17);
+insert into t (id,a) values (386,18);
+insert into t (id,a) values (386,19);
+insert into t (id,a) values (386,20);
+insert into t (id,a) values (386,21);
+insert into t (id,a) values (386,22);
+insert into t (id,a) values (386,23);
+insert into t (id,a) values (386,24);
+insert into t (id,a) values (386,25);
+insert into t (id,a) values (386,26);
+insert into t (id,a) values (386,27);
+insert into t (id,a) values (386,28);
+insert into t (id,a) values (386,29);
+insert into t (id,a) values (386,30);
+insert into t (id,a) values (386,31);
+insert into t (id,a) values (386,32);
+insert into t (id,a) values (386,33);
+insert into t (id,a) values (386,34);
+insert into t (id,a) values (386,35);
+insert into t (id,a) values (386,36);
+insert into t (id,a) values (386,37);
+insert into t (id,a) values (386,38);
+insert into t (id,a) values (386,39);
+insert into t (id,a) values (386,40);
+insert into t (id,a) values (386,41);
+insert into t (id,a) values (386,42);
+insert into t (id,a) values (386,43);
+insert into t (id,a) values (386,44);
+insert into t (id,a) values (386,45);
+insert into t (id,a) values (386,46);
+insert into t (id,a) values (386,47);
+insert into t (id,a) values (386,48);
+insert into t (id,a) values (386,49);
+insert into t (id,a) values (386,50);
+insert into t (id,a) values (386,51);
+insert into t (id,a) values (386,52);
+insert into t (id,a) values (386,53);
+insert into t (id,a) values (386,54);
+insert into t (id,a) values (386,55);
+insert into t (id,a) values (386,56);
+insert into t (id,a) values (386,57);
+insert into t (id,a) values (386,58);
+insert into t (id,a) values (386,59);
+insert into t (id,a) values (386,60);
+insert into t (id,a) values (386,61);
+insert into t (id,a) values (386,62);
+insert into t (id,a) values (386,63);
+insert into t (id,a) values (386,64);
+insert into t (id,a) values (386,65);
+insert into t (id,a) values (386,66);
+insert into t (id,a) values (386,67);
+insert into t (id,a) values (386,68);
+insert into t (id,a) values (386,69);
+insert into t (id,a) values (386,70);
+insert into t (id,a) values (386,71);
+insert into t (id,a) values (386,72);
+insert into t (id,a) values (386,73);
+insert into t (id,a) values (386,74);
+insert into t (id,a) values (386,75);
+insert into t (id,a) values (386,76);
+insert into t (id,a) values (386,77);
+insert into t (id,a) values (386,78);
+insert into t (id,a) values (386,79);
+insert into t (id,a) values (386,80);
+insert into t (id,a) values (386,81);
+insert into t (id,a) values (386,82);
+insert into t (id,a) values (386,83);
+insert into t (id,a) values (386,84);
+insert into t (id,a) values (386,85);
+insert into t (id,a) values (386,86);
+insert into t (id,a) values (386,87);
+insert into t (id,a) values (386,88);
+insert into t (id,a) values (386,89);
+insert into t (id,a) values (386,90);
+insert into t (id,a) values (386,91);
+insert into t (id,a) values (386,92);
+insert into t (id,a) values (386,93);
+insert into t (id,a) values (386,94);
+insert into t (id,a) values (386,95);
+insert into t (id,a) values (386,96);
+insert into t (id,a) values (386,97);
+insert into t (id,a) values (386,98);
+insert into t (id,a) values (386,99);
+insert into t (id,a) values (387,0);
+insert into t (id,a) values (387,1);
+insert into t (id,a) values (387,2);
+insert into t (id,a) values (387,3);
+insert into t (id,a) values (387,4);
+insert into t (id,a) values (387,5);
+insert into t (id,a) values (387,6);
+insert into t (id,a) values (387,7);
+insert into t (id,a) values (387,8);
+insert into t (id,a) values (387,9);
+insert into t (id,a) values (387,10);
+insert into t (id,a) values (387,11);
+insert into t (id,a) values (387,12);
+insert into t (id,a) values (387,13);
+insert into t (id,a) values (387,14);
+insert into t (id,a) values (387,15);
+insert into t (id,a) values (387,16);
+insert into t (id,a) values (387,17);
+insert into t (id,a) values (387,18);
+insert into t (id,a) values (387,19);
+insert into t (id,a) values (387,20);
+insert into t (id,a) values (387,21);
+insert into t (id,a) values (387,22);
+insert into t (id,a) values (387,23);
+insert into t (id,a) values (387,24);
+insert into t (id,a) values (387,25);
+insert into t (id,a) values (387,26);
+insert into t (id,a) values (387,27);
+insert into t (id,a) values (387,28);
+insert into t (id,a) values (387,29);
+insert into t (id,a) values (387,30);
+insert into t (id,a) values (387,31);
+insert into t (id,a) values (387,32);
+insert into t (id,a) values (387,33);
+insert into t (id,a) values (387,34);
+insert into t (id,a) values (387,35);
+insert into t (id,a) values (387,36);
+insert into t (id,a) values (387,37);
+insert into t (id,a) values (387,38);
+insert into t (id,a) values (387,39);
+insert into t (id,a) values (387,40);
+insert into t (id,a) values (387,41);
+insert into t (id,a) values (387,42);
+insert into t (id,a) values (387,43);
+insert into t (id,a) values (387,44);
+insert into t (id,a) values (387,45);
+insert into t (id,a) values (387,46);
+insert into t (id,a) values (387,47);
+insert into t (id,a) values (387,48);
+insert into t (id,a) values (387,49);
+insert into t (id,a) values (387,50);
+insert into t (id,a) values (387,51);
+insert into t (id,a) values (387,52);
+insert into t (id,a) values (387,53);
+insert into t (id,a) values (387,54);
+insert into t (id,a) values (387,55);
+insert into t (id,a) values (387,56);
+insert into t (id,a) values (387,57);
+insert into t (id,a) values (387,58);
+insert into t (id,a) values (387,59);
+insert into t (id,a) values (387,60);
+insert into t (id,a) values (387,61);
+insert into t (id,a) values (387,62);
+insert into t (id,a) values (387,63);
+insert into t (id,a) values (387,64);
+insert into t (id,a) values (387,65);
+insert into t (id,a) values (387,66);
+insert into t (id,a) values (387,67);
+insert into t (id,a) values (387,68);
+insert into t (id,a) values (387,69);
+insert into t (id,a) values (387,70);
+insert into t (id,a) values (387,71);
+insert into t (id,a) values (387,72);
+insert into t (id,a) values (387,73);
+insert into t (id,a) values (387,74);
+insert into t (id,a) values (387,75);
+insert into t (id,a) values (387,76);
+insert into t (id,a) values (387,77);
+insert into t (id,a) values (387,78);
+insert into t (id,a) values (387,79);
+insert into t (id,a) values (387,80);
+insert into t (id,a) values (387,81);
+insert into t (id,a) values (387,82);
+insert into t (id,a) values (387,83);
+insert into t (id,a) values (387,84);
+insert into t (id,a) values (387,85);
+insert into t (id,a) values (387,86);
+insert into t (id,a) values (387,87);
+insert into t (id,a) values (387,88);
+insert into t (id,a) values (387,89);
+insert into t (id,a) values (387,90);
+insert into t (id,a) values (387,91);
+insert into t (id,a) values (387,92);
+insert into t (id,a) values (387,93);
+insert into t (id,a) values (387,94);
+insert into t (id,a) values (387,95);
+insert into t (id,a) values (387,96);
+insert into t (id,a) values (387,97);
+insert into t (id,a) values (387,98);
+insert into t (id,a) values (387,99);
+insert into t (id,a) values (388,0);
+insert into t (id,a) values (388,1);
+insert into t (id,a) values (388,2);
+insert into t (id,a) values (388,3);
+insert into t (id,a) values (388,4);
+insert into t (id,a) values (388,5);
+insert into t (id,a) values (388,6);
+insert into t (id,a) values (388,7);
+insert into t (id,a) values (388,8);
+insert into t (id,a) values (388,9);
+insert into t (id,a) values (388,10);
+insert into t (id,a) values (388,11);
+insert into t (id,a) values (388,12);
+insert into t (id,a) values (388,13);
+insert into t (id,a) values (388,14);
+insert into t (id,a) values (388,15);
+insert into t (id,a) values (388,16);
+insert into t (id,a) values (388,17);
+insert into t (id,a) values (388,18);
+insert into t (id,a) values (388,19);
+insert into t (id,a) values (388,20);
+insert into t (id,a) values (388,21);
+insert into t (id,a) values (388,22);
+insert into t (id,a) values (388,23);
+insert into t (id,a) values (388,24);
+insert into t (id,a) values (388,25);
+insert into t (id,a) values (388,26);
+insert into t (id,a) values (388,27);
+insert into t (id,a) values (388,28);
+insert into t (id,a) values (388,29);
+insert into t (id,a) values (388,30);
+insert into t (id,a) values (388,31);
+insert into t (id,a) values (388,32);
+insert into t (id,a) values (388,33);
+insert into t (id,a) values (388,34);
+insert into t (id,a) values (388,35);
+insert into t (id,a) values (388,36);
+insert into t (id,a) values (388,37);
+insert into t (id,a) values (388,38);
+insert into t (id,a) values (388,39);
+insert into t (id,a) values (388,40);
+insert into t (id,a) values (388,41);
+insert into t (id,a) values (388,42);
+insert into t (id,a) values (388,43);
+insert into t (id,a) values (388,44);
+insert into t (id,a) values (388,45);
+insert into t (id,a) values (388,46);
+insert into t (id,a) values (388,47);
+insert into t (id,a) values (388,48);
+insert into t (id,a) values (388,49);
+insert into t (id,a) values (388,50);
+insert into t (id,a) values (388,51);
+insert into t (id,a) values (388,52);
+insert into t (id,a) values (388,53);
+insert into t (id,a) values (388,54);
+insert into t (id,a) values (388,55);
+insert into t (id,a) values (388,56);
+insert into t (id,a) values (388,57);
+insert into t (id,a) values (388,58);
+insert into t (id,a) values (388,59);
+insert into t (id,a) values (388,60);
+insert into t (id,a) values (388,61);
+insert into t (id,a) values (388,62);
+insert into t (id,a) values (388,63);
+insert into t (id,a) values (388,64);
+insert into t (id,a) values (388,65);
+insert into t (id,a) values (388,66);
+insert into t (id,a) values (388,67);
+insert into t (id,a) values (388,68);
+insert into t (id,a) values (388,69);
+insert into t (id,a) values (388,70);
+insert into t (id,a) values (388,71);
+insert into t (id,a) values (388,72);
+insert into t (id,a) values (388,73);
+insert into t (id,a) values (388,74);
+insert into t (id,a) values (388,75);
+insert into t (id,a) values (388,76);
+insert into t (id,a) values (388,77);
+insert into t (id,a) values (388,78);
+insert into t (id,a) values (388,79);
+insert into t (id,a) values (388,80);
+insert into t (id,a) values (388,81);
+insert into t (id,a) values (388,82);
+insert into t (id,a) values (388,83);
+insert into t (id,a) values (388,84);
+insert into t (id,a) values (388,85);
+insert into t (id,a) values (388,86);
+insert into t (id,a) values (388,87);
+insert into t (id,a) values (388,88);
+insert into t (id,a) values (388,89);
+insert into t (id,a) values (388,90);
+insert into t (id,a) values (388,91);
+insert into t (id,a) values (388,92);
+insert into t (id,a) values (388,93);
+insert into t (id,a) values (388,94);
+insert into t (id,a) values (388,95);
+insert into t (id,a) values (388,96);
+insert into t (id,a) values (388,97);
+insert into t (id,a) values (388,98);
+insert into t (id,a) values (388,99);
+insert into t (id,a) values (389,0);
+insert into t (id,a) values (389,1);
+insert into t (id,a) values (389,2);
+insert into t (id,a) values (389,3);
+insert into t (id,a) values (389,4);
+insert into t (id,a) values (389,5);
+insert into t (id,a) values (389,6);
+insert into t (id,a) values (389,7);
+insert into t (id,a) values (389,8);
+insert into t (id,a) values (389,9);
+insert into t (id,a) values (389,10);
+insert into t (id,a) values (389,11);
+insert into t (id,a) values (389,12);
+insert into t (id,a) values (389,13);
+insert into t (id,a) values (389,14);
+insert into t (id,a) values (389,15);
+insert into t (id,a) values (389,16);
+insert into t (id,a) values (389,17);
+insert into t (id,a) values (389,18);
+insert into t (id,a) values (389,19);
+insert into t (id,a) values (389,20);
+insert into t (id,a) values (389,21);
+insert into t (id,a) values (389,22);
+insert into t (id,a) values (389,23);
+insert into t (id,a) values (389,24);
+insert into t (id,a) values (389,25);
+insert into t (id,a) values (389,26);
+insert into t (id,a) values (389,27);
+insert into t (id,a) values (389,28);
+insert into t (id,a) values (389,29);
+insert into t (id,a) values (389,30);
+insert into t (id,a) values (389,31);
+insert into t (id,a) values (389,32);
+insert into t (id,a) values (389,33);
+insert into t (id,a) values (389,34);
+insert into t (id,a) values (389,35);
+insert into t (id,a) values (389,36);
+insert into t (id,a) values (389,37);
+insert into t (id,a) values (389,38);
+insert into t (id,a) values (389,39);
+insert into t (id,a) values (389,40);
+insert into t (id,a) values (389,41);
+insert into t (id,a) values (389,42);
+insert into t (id,a) values (389,43);
+insert into t (id,a) values (389,44);
+insert into t (id,a) values (389,45);
+insert into t (id,a) values (389,46);
+insert into t (id,a) values (389,47);
+insert into t (id,a) values (389,48);
+insert into t (id,a) values (389,49);
+insert into t (id,a) values (389,50);
+insert into t (id,a) values (389,51);
+insert into t (id,a) values (389,52);
+insert into t (id,a) values (389,53);
+insert into t (id,a) values (389,54);
+insert into t (id,a) values (389,55);
+insert into t (id,a) values (389,56);
+insert into t (id,a) values (389,57);
+insert into t (id,a) values (389,58);
+insert into t (id,a) values (389,59);
+insert into t (id,a) values (389,60);
+insert into t (id,a) values (389,61);
+insert into t (id,a) values (389,62);
+insert into t (id,a) values (389,63);
+insert into t (id,a) values (389,64);
+insert into t (id,a) values (389,65);
+insert into t (id,a) values (389,66);
+insert into t (id,a) values (389,67);
+insert into t (id,a) values (389,68);
+insert into t (id,a) values (389,69);
+insert into t (id,a) values (389,70);
+insert into t (id,a) values (389,71);
+insert into t (id,a) values (389,72);
+insert into t (id,a) values (389,73);
+insert into t (id,a) values (389,74);
+insert into t (id,a) values (389,75);
+insert into t (id,a) values (389,76);
+insert into t (id,a) values (389,77);
+insert into t (id,a) values (389,78);
+insert into t (id,a) values (389,79);
+insert into t (id,a) values (389,80);
+insert into t (id,a) values (389,81);
+insert into t (id,a) values (389,82);
+insert into t (id,a) values (389,83);
+insert into t (id,a) values (389,84);
+insert into t (id,a) values (389,85);
+insert into t (id,a) values (389,86);
+insert into t (id,a) values (389,87);
+insert into t (id,a) values (389,88);
+insert into t (id,a) values (389,89);
+insert into t (id,a) values (389,90);
+insert into t (id,a) values (389,91);
+insert into t (id,a) values (389,92);
+insert into t (id,a) values (389,93);
+insert into t (id,a) values (389,94);
+insert into t (id,a) values (389,95);
+insert into t (id,a) values (389,96);
+insert into t (id,a) values (389,97);
+insert into t (id,a) values (389,98);
+insert into t (id,a) values (389,99);
+insert into t (id,a) values (390,0);
+insert into t (id,a) values (390,1);
+insert into t (id,a) values (390,2);
+insert into t (id,a) values (390,3);
+insert into t (id,a) values (390,4);
+insert into t (id,a) values (390,5);
+insert into t (id,a) values (390,6);
+insert into t (id,a) values (390,7);
+insert into t (id,a) values (390,8);
+insert into t (id,a) values (390,9);
+insert into t (id,a) values (390,10);
+insert into t (id,a) values (390,11);
+insert into t (id,a) values (390,12);
+insert into t (id,a) values (390,13);
+insert into t (id,a) values (390,14);
+insert into t (id,a) values (390,15);
+insert into t (id,a) values (390,16);
+insert into t (id,a) values (390,17);
+insert into t (id,a) values (390,18);
+insert into t (id,a) values (390,19);
+insert into t (id,a) values (390,20);
+insert into t (id,a) values (390,21);
+insert into t (id,a) values (390,22);
+insert into t (id,a) values (390,23);
+insert into t (id,a) values (390,24);
+insert into t (id,a) values (390,25);
+insert into t (id,a) values (390,26);
+insert into t (id,a) values (390,27);
+insert into t (id,a) values (390,28);
+insert into t (id,a) values (390,29);
+insert into t (id,a) values (390,30);
+insert into t (id,a) values (390,31);
+insert into t (id,a) values (390,32);
+insert into t (id,a) values (390,33);
+insert into t (id,a) values (390,34);
+insert into t (id,a) values (390,35);
+insert into t (id,a) values (390,36);
+insert into t (id,a) values (390,37);
+insert into t (id,a) values (390,38);
+insert into t (id,a) values (390,39);
+insert into t (id,a) values (390,40);
+insert into t (id,a) values (390,41);
+insert into t (id,a) values (390,42);
+insert into t (id,a) values (390,43);
+insert into t (id,a) values (390,44);
+insert into t (id,a) values (390,45);
+insert into t (id,a) values (390,46);
+insert into t (id,a) values (390,47);
+insert into t (id,a) values (390,48);
+insert into t (id,a) values (390,49);
+insert into t (id,a) values (390,50);
+insert into t (id,a) values (390,51);
+insert into t (id,a) values (390,52);
+insert into t (id,a) values (390,53);
+insert into t (id,a) values (390,54);
+insert into t (id,a) values (390,55);
+insert into t (id,a) values (390,56);
+insert into t (id,a) values (390,57);
+insert into t (id,a) values (390,58);
+insert into t (id,a) values (390,59);
+insert into t (id,a) values (390,60);
+insert into t (id,a) values (390,61);
+insert into t (id,a) values (390,62);
+insert into t (id,a) values (390,63);
+insert into t (id,a) values (390,64);
+insert into t (id,a) values (390,65);
+insert into t (id,a) values (390,66);
+insert into t (id,a) values (390,67);
+insert into t (id,a) values (390,68);
+insert into t (id,a) values (390,69);
+insert into t (id,a) values (390,70);
+insert into t (id,a) values (390,71);
+insert into t (id,a) values (390,72);
+insert into t (id,a) values (390,73);
+insert into t (id,a) values (390,74);
+insert into t (id,a) values (390,75);
+insert into t (id,a) values (390,76);
+insert into t (id,a) values (390,77);
+insert into t (id,a) values (390,78);
+insert into t (id,a) values (390,79);
+insert into t (id,a) values (390,80);
+insert into t (id,a) values (390,81);
+insert into t (id,a) values (390,82);
+insert into t (id,a) values (390,83);
+insert into t (id,a) values (390,84);
+insert into t (id,a) values (390,85);
+insert into t (id,a) values (390,86);
+insert into t (id,a) values (390,87);
+insert into t (id,a) values (390,88);
+insert into t (id,a) values (390,89);
+insert into t (id,a) values (390,90);
+insert into t (id,a) values (390,91);
+insert into t (id,a) values (390,92);
+insert into t (id,a) values (390,93);
+insert into t (id,a) values (390,94);
+insert into t (id,a) values (390,95);
+insert into t (id,a) values (390,96);
+insert into t (id,a) values (390,97);
+insert into t (id,a) values (390,98);
+insert into t (id,a) values (390,99);
+insert into t (id,a) values (391,0);
+insert into t (id,a) values (391,1);
+insert into t (id,a) values (391,2);
+insert into t (id,a) values (391,3);
+insert into t (id,a) values (391,4);
+insert into t (id,a) values (391,5);
+insert into t (id,a) values (391,6);
+insert into t (id,a) values (391,7);
+insert into t (id,a) values (391,8);
+insert into t (id,a) values (391,9);
+insert into t (id,a) values (391,10);
+insert into t (id,a) values (391,11);
+insert into t (id,a) values (391,12);
+insert into t (id,a) values (391,13);
+insert into t (id,a) values (391,14);
+insert into t (id,a) values (391,15);
+insert into t (id,a) values (391,16);
+insert into t (id,a) values (391,17);
+insert into t (id,a) values (391,18);
+insert into t (id,a) values (391,19);
+insert into t (id,a) values (391,20);
+insert into t (id,a) values (391,21);
+insert into t (id,a) values (391,22);
+insert into t (id,a) values (391,23);
+insert into t (id,a) values (391,24);
+insert into t (id,a) values (391,25);
+insert into t (id,a) values (391,26);
+insert into t (id,a) values (391,27);
+insert into t (id,a) values (391,28);
+insert into t (id,a) values (391,29);
+insert into t (id,a) values (391,30);
+insert into t (id,a) values (391,31);
+insert into t (id,a) values (391,32);
+insert into t (id,a) values (391,33);
+insert into t (id,a) values (391,34);
+insert into t (id,a) values (391,35);
+insert into t (id,a) values (391,36);
+insert into t (id,a) values (391,37);
+insert into t (id,a) values (391,38);
+insert into t (id,a) values (391,39);
+insert into t (id,a) values (391,40);
+insert into t (id,a) values (391,41);
+insert into t (id,a) values (391,42);
+insert into t (id,a) values (391,43);
+insert into t (id,a) values (391,44);
+insert into t (id,a) values (391,45);
+insert into t (id,a) values (391,46);
+insert into t (id,a) values (391,47);
+insert into t (id,a) values (391,48);
+insert into t (id,a) values (391,49);
+insert into t (id,a) values (391,50);
+insert into t (id,a) values (391,51);
+insert into t (id,a) values (391,52);
+insert into t (id,a) values (391,53);
+insert into t (id,a) values (391,54);
+insert into t (id,a) values (391,55);
+insert into t (id,a) values (391,56);
+insert into t (id,a) values (391,57);
+insert into t (id,a) values (391,58);
+insert into t (id,a) values (391,59);
+insert into t (id,a) values (391,60);
+insert into t (id,a) values (391,61);
+insert into t (id,a) values (391,62);
+insert into t (id,a) values (391,63);
+insert into t (id,a) values (391,64);
+insert into t (id,a) values (391,65);
+insert into t (id,a) values (391,66);
+insert into t (id,a) values (391,67);
+insert into t (id,a) values (391,68);
+insert into t (id,a) values (391,69);
+insert into t (id,a) values (391,70);
+insert into t (id,a) values (391,71);
+insert into t (id,a) values (391,72);
+insert into t (id,a) values (391,73);
+insert into t (id,a) values (391,74);
+insert into t (id,a) values (391,75);
+insert into t (id,a) values (391,76);
+insert into t (id,a) values (391,77);
+insert into t (id,a) values (391,78);
+insert into t (id,a) values (391,79);
+insert into t (id,a) values (391,80);
+insert into t (id,a) values (391,81);
+insert into t (id,a) values (391,82);
+insert into t (id,a) values (391,83);
+insert into t (id,a) values (391,84);
+insert into t (id,a) values (391,85);
+insert into t (id,a) values (391,86);
+insert into t (id,a) values (391,87);
+insert into t (id,a) values (391,88);
+insert into t (id,a) values (391,89);
+insert into t (id,a) values (391,90);
+insert into t (id,a) values (391,91);
+insert into t (id,a) values (391,92);
+insert into t (id,a) values (391,93);
+insert into t (id,a) values (391,94);
+insert into t (id,a) values (391,95);
+insert into t (id,a) values (391,96);
+insert into t (id,a) values (391,97);
+insert into t (id,a) values (391,98);
+insert into t (id,a) values (391,99);
+insert into t (id,a) values (392,0);
+insert into t (id,a) values (392,1);
+insert into t (id,a) values (392,2);
+insert into t (id,a) values (392,3);
+insert into t (id,a) values (392,4);
+insert into t (id,a) values (392,5);
+insert into t (id,a) values (392,6);
+insert into t (id,a) values (392,7);
+insert into t (id,a) values (392,8);
+insert into t (id,a) values (392,9);
+insert into t (id,a) values (392,10);
+insert into t (id,a) values (392,11);
+insert into t (id,a) values (392,12);
+insert into t (id,a) values (392,13);
+insert into t (id,a) values (392,14);
+insert into t (id,a) values (392,15);
+insert into t (id,a) values (392,16);
+insert into t (id,a) values (392,17);
+insert into t (id,a) values (392,18);
+insert into t (id,a) values (392,19);
+insert into t (id,a) values (392,20);
+insert into t (id,a) values (392,21);
+insert into t (id,a) values (392,22);
+insert into t (id,a) values (392,23);
+insert into t (id,a) values (392,24);
+insert into t (id,a) values (392,25);
+insert into t (id,a) values (392,26);
+insert into t (id,a) values (392,27);
+insert into t (id,a) values (392,28);
+insert into t (id,a) values (392,29);
+insert into t (id,a) values (392,30);
+insert into t (id,a) values (392,31);
+insert into t (id,a) values (392,32);
+insert into t (id,a) values (392,33);
+insert into t (id,a) values (392,34);
+insert into t (id,a) values (392,35);
+insert into t (id,a) values (392,36);
+insert into t (id,a) values (392,37);
+insert into t (id,a) values (392,38);
+insert into t (id,a) values (392,39);
+insert into t (id,a) values (392,40);
+insert into t (id,a) values (392,41);
+insert into t (id,a) values (392,42);
+insert into t (id,a) values (392,43);
+insert into t (id,a) values (392,44);
+insert into t (id,a) values (392,45);
+insert into t (id,a) values (392,46);
+insert into t (id,a) values (392,47);
+insert into t (id,a) values (392,48);
+insert into t (id,a) values (392,49);
+insert into t (id,a) values (392,50);
+insert into t (id,a) values (392,51);
+insert into t (id,a) values (392,52);
+insert into t (id,a) values (392,53);
+insert into t (id,a) values (392,54);
+insert into t (id,a) values (392,55);
+insert into t (id,a) values (392,56);
+insert into t (id,a) values (392,57);
+insert into t (id,a) values (392,58);
+insert into t (id,a) values (392,59);
+insert into t (id,a) values (392,60);
+insert into t (id,a) values (392,61);
+insert into t (id,a) values (392,62);
+insert into t (id,a) values (392,63);
+insert into t (id,a) values (392,64);
+insert into t (id,a) values (392,65);
+insert into t (id,a) values (392,66);
+insert into t (id,a) values (392,67);
+insert into t (id,a) values (392,68);
+insert into t (id,a) values (392,69);
+insert into t (id,a) values (392,70);
+insert into t (id,a) values (392,71);
+insert into t (id,a) values (392,72);
+insert into t (id,a) values (392,73);
+insert into t (id,a) values (392,74);
+insert into t (id,a) values (392,75);
+insert into t (id,a) values (392,76);
+insert into t (id,a) values (392,77);
+insert into t (id,a) values (392,78);
+insert into t (id,a) values (392,79);
+insert into t (id,a) values (392,80);
+insert into t (id,a) values (392,81);
+insert into t (id,a) values (392,82);
+insert into t (id,a) values (392,83);
+insert into t (id,a) values (392,84);
+insert into t (id,a) values (392,85);
+insert into t (id,a) values (392,86);
+insert into t (id,a) values (392,87);
+insert into t (id,a) values (392,88);
+insert into t (id,a) values (392,89);
+insert into t (id,a) values (392,90);
+insert into t (id,a) values (392,91);
+insert into t (id,a) values (392,92);
+insert into t (id,a) values (392,93);
+insert into t (id,a) values (392,94);
+insert into t (id,a) values (392,95);
+insert into t (id,a) values (392,96);
+insert into t (id,a) values (392,97);
+insert into t (id,a) values (392,98);
+insert into t (id,a) values (392,99);
+insert into t (id,a) values (393,0);
+insert into t (id,a) values (393,1);
+insert into t (id,a) values (393,2);
+insert into t (id,a) values (393,3);
+insert into t (id,a) values (393,4);
+insert into t (id,a) values (393,5);
+insert into t (id,a) values (393,6);
+insert into t (id,a) values (393,7);
+insert into t (id,a) values (393,8);
+insert into t (id,a) values (393,9);
+insert into t (id,a) values (393,10);
+insert into t (id,a) values (393,11);
+insert into t (id,a) values (393,12);
+insert into t (id,a) values (393,13);
+insert into t (id,a) values (393,14);
+insert into t (id,a) values (393,15);
+insert into t (id,a) values (393,16);
+insert into t (id,a) values (393,17);
+insert into t (id,a) values (393,18);
+insert into t (id,a) values (393,19);
+insert into t (id,a) values (393,20);
+insert into t (id,a) values (393,21);
+insert into t (id,a) values (393,22);
+insert into t (id,a) values (393,23);
+insert into t (id,a) values (393,24);
+insert into t (id,a) values (393,25);
+insert into t (id,a) values (393,26);
+insert into t (id,a) values (393,27);
+insert into t (id,a) values (393,28);
+insert into t (id,a) values (393,29);
+insert into t (id,a) values (393,30);
+insert into t (id,a) values (393,31);
+insert into t (id,a) values (393,32);
+insert into t (id,a) values (393,33);
+insert into t (id,a) values (393,34);
+insert into t (id,a) values (393,35);
+insert into t (id,a) values (393,36);
+insert into t (id,a) values (393,37);
+insert into t (id,a) values (393,38);
+insert into t (id,a) values (393,39);
+insert into t (id,a) values (393,40);
+insert into t (id,a) values (393,41);
+insert into t (id,a) values (393,42);
+insert into t (id,a) values (393,43);
+insert into t (id,a) values (393,44);
+insert into t (id,a) values (393,45);
+insert into t (id,a) values (393,46);
+insert into t (id,a) values (393,47);
+insert into t (id,a) values (393,48);
+insert into t (id,a) values (393,49);
+insert into t (id,a) values (393,50);
+insert into t (id,a) values (393,51);
+insert into t (id,a) values (393,52);
+insert into t (id,a) values (393,53);
+insert into t (id,a) values (393,54);
+insert into t (id,a) values (393,55);
+insert into t (id,a) values (393,56);
+insert into t (id,a) values (393,57);
+insert into t (id,a) values (393,58);
+insert into t (id,a) values (393,59);
+insert into t (id,a) values (393,60);
+insert into t (id,a) values (393,61);
+insert into t (id,a) values (393,62);
+insert into t (id,a) values (393,63);
+insert into t (id,a) values (393,64);
+insert into t (id,a) values (393,65);
+insert into t (id,a) values (393,66);
+insert into t (id,a) values (393,67);
+insert into t (id,a) values (393,68);
+insert into t (id,a) values (393,69);
+insert into t (id,a) values (393,70);
+insert into t (id,a) values (393,71);
+insert into t (id,a) values (393,72);
+insert into t (id,a) values (393,73);
+insert into t (id,a) values (393,74);
+insert into t (id,a) values (393,75);
+insert into t (id,a) values (393,76);
+insert into t (id,a) values (393,77);
+insert into t (id,a) values (393,78);
+insert into t (id,a) values (393,79);
+insert into t (id,a) values (393,80);
+insert into t (id,a) values (393,81);
+insert into t (id,a) values (393,82);
+insert into t (id,a) values (393,83);
+insert into t (id,a) values (393,84);
+insert into t (id,a) values (393,85);
+insert into t (id,a) values (393,86);
+insert into t (id,a) values (393,87);
+insert into t (id,a) values (393,88);
+insert into t (id,a) values (393,89);
+insert into t (id,a) values (393,90);
+insert into t (id,a) values (393,91);
+insert into t (id,a) values (393,92);
+insert into t (id,a) values (393,93);
+insert into t (id,a) values (393,94);
+insert into t (id,a) values (393,95);
+insert into t (id,a) values (393,96);
+insert into t (id,a) values (393,97);
+insert into t (id,a) values (393,98);
+insert into t (id,a) values (393,99);
+insert into t (id,a) values (394,0);
+insert into t (id,a) values (394,1);
+insert into t (id,a) values (394,2);
+insert into t (id,a) values (394,3);
+insert into t (id,a) values (394,4);
+insert into t (id,a) values (394,5);
+insert into t (id,a) values (394,6);
+insert into t (id,a) values (394,7);
+insert into t (id,a) values (394,8);
+insert into t (id,a) values (394,9);
+insert into t (id,a) values (394,10);
+insert into t (id,a) values (394,11);
+insert into t (id,a) values (394,12);
+insert into t (id,a) values (394,13);
+insert into t (id,a) values (394,14);
+insert into t (id,a) values (394,15);
+insert into t (id,a) values (394,16);
+insert into t (id,a) values (394,17);
+insert into t (id,a) values (394,18);
+insert into t (id,a) values (394,19);
+insert into t (id,a) values (394,20);
+insert into t (id,a) values (394,21);
+insert into t (id,a) values (394,22);
+insert into t (id,a) values (394,23);
+insert into t (id,a) values (394,24);
+insert into t (id,a) values (394,25);
+insert into t (id,a) values (394,26);
+insert into t (id,a) values (394,27);
+insert into t (id,a) values (394,28);
+insert into t (id,a) values (394,29);
+insert into t (id,a) values (394,30);
+insert into t (id,a) values (394,31);
+insert into t (id,a) values (394,32);
+insert into t (id,a) values (394,33);
+insert into t (id,a) values (394,34);
+insert into t (id,a) values (394,35);
+insert into t (id,a) values (394,36);
+insert into t (id,a) values (394,37);
+insert into t (id,a) values (394,38);
+insert into t (id,a) values (394,39);
+insert into t (id,a) values (394,40);
+insert into t (id,a) values (394,41);
+insert into t (id,a) values (394,42);
+insert into t (id,a) values (394,43);
+insert into t (id,a) values (394,44);
+insert into t (id,a) values (394,45);
+insert into t (id,a) values (394,46);
+insert into t (id,a) values (394,47);
+insert into t (id,a) values (394,48);
+insert into t (id,a) values (394,49);
+insert into t (id,a) values (394,50);
+insert into t (id,a) values (394,51);
+insert into t (id,a) values (394,52);
+insert into t (id,a) values (394,53);
+insert into t (id,a) values (394,54);
+insert into t (id,a) values (394,55);
+insert into t (id,a) values (394,56);
+insert into t (id,a) values (394,57);
+insert into t (id,a) values (394,58);
+insert into t (id,a) values (394,59);
+insert into t (id,a) values (394,60);
+insert into t (id,a) values (394,61);
+insert into t (id,a) values (394,62);
+insert into t (id,a) values (394,63);
+insert into t (id,a) values (394,64);
+insert into t (id,a) values (394,65);
+insert into t (id,a) values (394,66);
+insert into t (id,a) values (394,67);
+insert into t (id,a) values (394,68);
+insert into t (id,a) values (394,69);
+insert into t (id,a) values (394,70);
+insert into t (id,a) values (394,71);
+insert into t (id,a) values (394,72);
+insert into t (id,a) values (394,73);
+insert into t (id,a) values (394,74);
+insert into t (id,a) values (394,75);
+insert into t (id,a) values (394,76);
+insert into t (id,a) values (394,77);
+insert into t (id,a) values (394,78);
+insert into t (id,a) values (394,79);
+insert into t (id,a) values (394,80);
+insert into t (id,a) values (394,81);
+insert into t (id,a) values (394,82);
+insert into t (id,a) values (394,83);
+insert into t (id,a) values (394,84);
+insert into t (id,a) values (394,85);
+insert into t (id,a) values (394,86);
+insert into t (id,a) values (394,87);
+insert into t (id,a) values (394,88);
+insert into t (id,a) values (394,89);
+insert into t (id,a) values (394,90);
+insert into t (id,a) values (394,91);
+insert into t (id,a) values (394,92);
+insert into t (id,a) values (394,93);
+insert into t (id,a) values (394,94);
+insert into t (id,a) values (394,95);
+insert into t (id,a) values (394,96);
+insert into t (id,a) values (394,97);
+insert into t (id,a) values (394,98);
+insert into t (id,a) values (394,99);
+insert into t (id,a) values (395,0);
+insert into t (id,a) values (395,1);
+insert into t (id,a) values (395,2);
+insert into t (id,a) values (395,3);
+insert into t (id,a) values (395,4);
+insert into t (id,a) values (395,5);
+insert into t (id,a) values (395,6);
+insert into t (id,a) values (395,7);
+insert into t (id,a) values (395,8);
+insert into t (id,a) values (395,9);
+insert into t (id,a) values (395,10);
+insert into t (id,a) values (395,11);
+insert into t (id,a) values (395,12);
+insert into t (id,a) values (395,13);
+insert into t (id,a) values (395,14);
+insert into t (id,a) values (395,15);
+insert into t (id,a) values (395,16);
+insert into t (id,a) values (395,17);
+insert into t (id,a) values (395,18);
+insert into t (id,a) values (395,19);
+insert into t (id,a) values (395,20);
+insert into t (id,a) values (395,21);
+insert into t (id,a) values (395,22);
+insert into t (id,a) values (395,23);
+insert into t (id,a) values (395,24);
+insert into t (id,a) values (395,25);
+insert into t (id,a) values (395,26);
+insert into t (id,a) values (395,27);
+insert into t (id,a) values (395,28);
+insert into t (id,a) values (395,29);
+insert into t (id,a) values (395,30);
+insert into t (id,a) values (395,31);
+insert into t (id,a) values (395,32);
+insert into t (id,a) values (395,33);
+insert into t (id,a) values (395,34);
+insert into t (id,a) values (395,35);
+insert into t (id,a) values (395,36);
+insert into t (id,a) values (395,37);
+insert into t (id,a) values (395,38);
+insert into t (id,a) values (395,39);
+insert into t (id,a) values (395,40);
+insert into t (id,a) values (395,41);
+insert into t (id,a) values (395,42);
+insert into t (id,a) values (395,43);
+insert into t (id,a) values (395,44);
+insert into t (id,a) values (395,45);
+insert into t (id,a) values (395,46);
+insert into t (id,a) values (395,47);
+insert into t (id,a) values (395,48);
+insert into t (id,a) values (395,49);
+insert into t (id,a) values (395,50);
+insert into t (id,a) values (395,51);
+insert into t (id,a) values (395,52);
+insert into t (id,a) values (395,53);
+insert into t (id,a) values (395,54);
+insert into t (id,a) values (395,55);
+insert into t (id,a) values (395,56);
+insert into t (id,a) values (395,57);
+insert into t (id,a) values (395,58);
+insert into t (id,a) values (395,59);
+insert into t (id,a) values (395,60);
+insert into t (id,a) values (395,61);
+insert into t (id,a) values (395,62);
+insert into t (id,a) values (395,63);
+insert into t (id,a) values (395,64);
+insert into t (id,a) values (395,65);
+insert into t (id,a) values (395,66);
+insert into t (id,a) values (395,67);
+insert into t (id,a) values (395,68);
+insert into t (id,a) values (395,69);
+insert into t (id,a) values (395,70);
+insert into t (id,a) values (395,71);
+insert into t (id,a) values (395,72);
+insert into t (id,a) values (395,73);
+insert into t (id,a) values (395,74);
+insert into t (id,a) values (395,75);
+insert into t (id,a) values (395,76);
+insert into t (id,a) values (395,77);
+insert into t (id,a) values (395,78);
+insert into t (id,a) values (395,79);
+insert into t (id,a) values (395,80);
+insert into t (id,a) values (395,81);
+insert into t (id,a) values (395,82);
+insert into t (id,a) values (395,83);
+insert into t (id,a) values (395,84);
+insert into t (id,a) values (395,85);
+insert into t (id,a) values (395,86);
+insert into t (id,a) values (395,87);
+insert into t (id,a) values (395,88);
+insert into t (id,a) values (395,89);
+insert into t (id,a) values (395,90);
+insert into t (id,a) values (395,91);
+insert into t (id,a) values (395,92);
+insert into t (id,a) values (395,93);
+insert into t (id,a) values (395,94);
+insert into t (id,a) values (395,95);
+insert into t (id,a) values (395,96);
+insert into t (id,a) values (395,97);
+insert into t (id,a) values (395,98);
+insert into t (id,a) values (395,99);
+insert into t (id,a) values (396,0);
+insert into t (id,a) values (396,1);
+insert into t (id,a) values (396,2);
+insert into t (id,a) values (396,3);
+insert into t (id,a) values (396,4);
+insert into t (id,a) values (396,5);
+insert into t (id,a) values (396,6);
+insert into t (id,a) values (396,7);
+insert into t (id,a) values (396,8);
+insert into t (id,a) values (396,9);
+insert into t (id,a) values (396,10);
+insert into t (id,a) values (396,11);
+insert into t (id,a) values (396,12);
+insert into t (id,a) values (396,13);
+insert into t (id,a) values (396,14);
+insert into t (id,a) values (396,15);
+insert into t (id,a) values (396,16);
+insert into t (id,a) values (396,17);
+insert into t (id,a) values (396,18);
+insert into t (id,a) values (396,19);
+insert into t (id,a) values (396,20);
+insert into t (id,a) values (396,21);
+insert into t (id,a) values (396,22);
+insert into t (id,a) values (396,23);
+insert into t (id,a) values (396,24);
+insert into t (id,a) values (396,25);
+insert into t (id,a) values (396,26);
+insert into t (id,a) values (396,27);
+insert into t (id,a) values (396,28);
+insert into t (id,a) values (396,29);
+insert into t (id,a) values (396,30);
+insert into t (id,a) values (396,31);
+insert into t (id,a) values (396,32);
+insert into t (id,a) values (396,33);
+insert into t (id,a) values (396,34);
+insert into t (id,a) values (396,35);
+insert into t (id,a) values (396,36);
+insert into t (id,a) values (396,37);
+insert into t (id,a) values (396,38);
+insert into t (id,a) values (396,39);
+insert into t (id,a) values (396,40);
+insert into t (id,a) values (396,41);
+insert into t (id,a) values (396,42);
+insert into t (id,a) values (396,43);
+insert into t (id,a) values (396,44);
+insert into t (id,a) values (396,45);
+insert into t (id,a) values (396,46);
+insert into t (id,a) values (396,47);
+insert into t (id,a) values (396,48);
+insert into t (id,a) values (396,49);
+insert into t (id,a) values (396,50);
+insert into t (id,a) values (396,51);
+insert into t (id,a) values (396,52);
+insert into t (id,a) values (396,53);
+insert into t (id,a) values (396,54);
+insert into t (id,a) values (396,55);
+insert into t (id,a) values (396,56);
+insert into t (id,a) values (396,57);
+insert into t (id,a) values (396,58);
+insert into t (id,a) values (396,59);
+insert into t (id,a) values (396,60);
+insert into t (id,a) values (396,61);
+insert into t (id,a) values (396,62);
+insert into t (id,a) values (396,63);
+insert into t (id,a) values (396,64);
+insert into t (id,a) values (396,65);
+insert into t (id,a) values (396,66);
+insert into t (id,a) values (396,67);
+insert into t (id,a) values (396,68);
+insert into t (id,a) values (396,69);
+insert into t (id,a) values (396,70);
+insert into t (id,a) values (396,71);
+insert into t (id,a) values (396,72);
+insert into t (id,a) values (396,73);
+insert into t (id,a) values (396,74);
+insert into t (id,a) values (396,75);
+insert into t (id,a) values (396,76);
+insert into t (id,a) values (396,77);
+insert into t (id,a) values (396,78);
+insert into t (id,a) values (396,79);
+insert into t (id,a) values (396,80);
+insert into t (id,a) values (396,81);
+insert into t (id,a) values (396,82);
+insert into t (id,a) values (396,83);
+insert into t (id,a) values (396,84);
+insert into t (id,a) values (396,85);
+insert into t (id,a) values (396,86);
+insert into t (id,a) values (396,87);
+insert into t (id,a) values (396,88);
+insert into t (id,a) values (396,89);
+insert into t (id,a) values (396,90);
+insert into t (id,a) values (396,91);
+insert into t (id,a) values (396,92);
+insert into t (id,a) values (396,93);
+insert into t (id,a) values (396,94);
+insert into t (id,a) values (396,95);
+insert into t (id,a) values (396,96);
+insert into t (id,a) values (396,97);
+insert into t (id,a) values (396,98);
+insert into t (id,a) values (396,99);
+insert into t (id,a) values (397,0);
+insert into t (id,a) values (397,1);
+insert into t (id,a) values (397,2);
+insert into t (id,a) values (397,3);
+insert into t (id,a) values (397,4);
+insert into t (id,a) values (397,5);
+insert into t (id,a) values (397,6);
+insert into t (id,a) values (397,7);
+insert into t (id,a) values (397,8);
+insert into t (id,a) values (397,9);
+insert into t (id,a) values (397,10);
+insert into t (id,a) values (397,11);
+insert into t (id,a) values (397,12);
+insert into t (id,a) values (397,13);
+insert into t (id,a) values (397,14);
+insert into t (id,a) values (397,15);
+insert into t (id,a) values (397,16);
+insert into t (id,a) values (397,17);
+insert into t (id,a) values (397,18);
+insert into t (id,a) values (397,19);
+insert into t (id,a) values (397,20);
+insert into t (id,a) values (397,21);
+insert into t (id,a) values (397,22);
+insert into t (id,a) values (397,23);
+insert into t (id,a) values (397,24);
+insert into t (id,a) values (397,25);
+insert into t (id,a) values (397,26);
+insert into t (id,a) values (397,27);
+insert into t (id,a) values (397,28);
+insert into t (id,a) values (397,29);
+insert into t (id,a) values (397,30);
+insert into t (id,a) values (397,31);
+insert into t (id,a) values (397,32);
+insert into t (id,a) values (397,33);
+insert into t (id,a) values (397,34);
+insert into t (id,a) values (397,35);
+insert into t (id,a) values (397,36);
+insert into t (id,a) values (397,37);
+insert into t (id,a) values (397,38);
+insert into t (id,a) values (397,39);
+insert into t (id,a) values (397,40);
+insert into t (id,a) values (397,41);
+insert into t (id,a) values (397,42);
+insert into t (id,a) values (397,43);
+insert into t (id,a) values (397,44);
+insert into t (id,a) values (397,45);
+insert into t (id,a) values (397,46);
+insert into t (id,a) values (397,47);
+insert into t (id,a) values (397,48);
+insert into t (id,a) values (397,49);
+insert into t (id,a) values (397,50);
+insert into t (id,a) values (397,51);
+insert into t (id,a) values (397,52);
+insert into t (id,a) values (397,53);
+insert into t (id,a) values (397,54);
+insert into t (id,a) values (397,55);
+insert into t (id,a) values (397,56);
+insert into t (id,a) values (397,57);
+insert into t (id,a) values (397,58);
+insert into t (id,a) values (397,59);
+insert into t (id,a) values (397,60);
+insert into t (id,a) values (397,61);
+insert into t (id,a) values (397,62);
+insert into t (id,a) values (397,63);
+insert into t (id,a) values (397,64);
+insert into t (id,a) values (397,65);
+insert into t (id,a) values (397,66);
+insert into t (id,a) values (397,67);
+insert into t (id,a) values (397,68);
+insert into t (id,a) values (397,69);
+insert into t (id,a) values (397,70);
+insert into t (id,a) values (397,71);
+insert into t (id,a) values (397,72);
+insert into t (id,a) values (397,73);
+insert into t (id,a) values (397,74);
+insert into t (id,a) values (397,75);
+insert into t (id,a) values (397,76);
+insert into t (id,a) values (397,77);
+insert into t (id,a) values (397,78);
+insert into t (id,a) values (397,79);
+insert into t (id,a) values (397,80);
+insert into t (id,a) values (397,81);
+insert into t (id,a) values (397,82);
+insert into t (id,a) values (397,83);
+insert into t (id,a) values (397,84);
+insert into t (id,a) values (397,85);
+insert into t (id,a) values (397,86);
+insert into t (id,a) values (397,87);
+insert into t (id,a) values (397,88);
+insert into t (id,a) values (397,89);
+insert into t (id,a) values (397,90);
+insert into t (id,a) values (397,91);
+insert into t (id,a) values (397,92);
+insert into t (id,a) values (397,93);
+insert into t (id,a) values (397,94);
+insert into t (id,a) values (397,95);
+insert into t (id,a) values (397,96);
+insert into t (id,a) values (397,97);
+insert into t (id,a) values (397,98);
+insert into t (id,a) values (397,99);
+insert into t (id,a) values (398,0);
+insert into t (id,a) values (398,1);
+insert into t (id,a) values (398,2);
+insert into t (id,a) values (398,3);
+insert into t (id,a) values (398,4);
+insert into t (id,a) values (398,5);
+insert into t (id,a) values (398,6);
+insert into t (id,a) values (398,7);
+insert into t (id,a) values (398,8);
+insert into t (id,a) values (398,9);
+insert into t (id,a) values (398,10);
+insert into t (id,a) values (398,11);
+insert into t (id,a) values (398,12);
+insert into t (id,a) values (398,13);
+insert into t (id,a) values (398,14);
+insert into t (id,a) values (398,15);
+insert into t (id,a) values (398,16);
+insert into t (id,a) values (398,17);
+insert into t (id,a) values (398,18);
+insert into t (id,a) values (398,19);
+insert into t (id,a) values (398,20);
+insert into t (id,a) values (398,21);
+insert into t (id,a) values (398,22);
+insert into t (id,a) values (398,23);
+insert into t (id,a) values (398,24);
+insert into t (id,a) values (398,25);
+insert into t (id,a) values (398,26);
+insert into t (id,a) values (398,27);
+insert into t (id,a) values (398,28);
+insert into t (id,a) values (398,29);
+insert into t (id,a) values (398,30);
+insert into t (id,a) values (398,31);
+insert into t (id,a) values (398,32);
+insert into t (id,a) values (398,33);
+insert into t (id,a) values (398,34);
+insert into t (id,a) values (398,35);
+insert into t (id,a) values (398,36);
+insert into t (id,a) values (398,37);
+insert into t (id,a) values (398,38);
+insert into t (id,a) values (398,39);
+insert into t (id,a) values (398,40);
+insert into t (id,a) values (398,41);
+insert into t (id,a) values (398,42);
+insert into t (id,a) values (398,43);
+insert into t (id,a) values (398,44);
+insert into t (id,a) values (398,45);
+insert into t (id,a) values (398,46);
+insert into t (id,a) values (398,47);
+insert into t (id,a) values (398,48);
+insert into t (id,a) values (398,49);
+insert into t (id,a) values (398,50);
+insert into t (id,a) values (398,51);
+insert into t (id,a) values (398,52);
+insert into t (id,a) values (398,53);
+insert into t (id,a) values (398,54);
+insert into t (id,a) values (398,55);
+insert into t (id,a) values (398,56);
+insert into t (id,a) values (398,57);
+insert into t (id,a) values (398,58);
+insert into t (id,a) values (398,59);
+insert into t (id,a) values (398,60);
+insert into t (id,a) values (398,61);
+insert into t (id,a) values (398,62);
+insert into t (id,a) values (398,63);
+insert into t (id,a) values (398,64);
+insert into t (id,a) values (398,65);
+insert into t (id,a) values (398,66);
+insert into t (id,a) values (398,67);
+insert into t (id,a) values (398,68);
+insert into t (id,a) values (398,69);
+insert into t (id,a) values (398,70);
+insert into t (id,a) values (398,71);
+insert into t (id,a) values (398,72);
+insert into t (id,a) values (398,73);
+insert into t (id,a) values (398,74);
+insert into t (id,a) values (398,75);
+insert into t (id,a) values (398,76);
+insert into t (id,a) values (398,77);
+insert into t (id,a) values (398,78);
+insert into t (id,a) values (398,79);
+insert into t (id,a) values (398,80);
+insert into t (id,a) values (398,81);
+insert into t (id,a) values (398,82);
+insert into t (id,a) values (398,83);
+insert into t (id,a) values (398,84);
+insert into t (id,a) values (398,85);
+insert into t (id,a) values (398,86);
+insert into t (id,a) values (398,87);
+insert into t (id,a) values (398,88);
+insert into t (id,a) values (398,89);
+insert into t (id,a) values (398,90);
+insert into t (id,a) values (398,91);
+insert into t (id,a) values (398,92);
+insert into t (id,a) values (398,93);
+insert into t (id,a) values (398,94);
+insert into t (id,a) values (398,95);
+insert into t (id,a) values (398,96);
+insert into t (id,a) values (398,97);
+insert into t (id,a) values (398,98);
+insert into t (id,a) values (398,99);
+insert into t (id,a) values (399,0);
+insert into t (id,a) values (399,1);
+insert into t (id,a) values (399,2);
+insert into t (id,a) values (399,3);
+insert into t (id,a) values (399,4);
+insert into t (id,a) values (399,5);
+insert into t (id,a) values (399,6);
+insert into t (id,a) values (399,7);
+insert into t (id,a) values (399,8);
+insert into t (id,a) values (399,9);
+insert into t (id,a) values (399,10);
+insert into t (id,a) values (399,11);
+insert into t (id,a) values (399,12);
+insert into t (id,a) values (399,13);
+insert into t (id,a) values (399,14);
+insert into t (id,a) values (399,15);
+insert into t (id,a) values (399,16);
+insert into t (id,a) values (399,17);
+insert into t (id,a) values (399,18);
+insert into t (id,a) values (399,19);
+insert into t (id,a) values (399,20);
+insert into t (id,a) values (399,21);
+insert into t (id,a) values (399,22);
+insert into t (id,a) values (399,23);
+insert into t (id,a) values (399,24);
+insert into t (id,a) values (399,25);
+insert into t (id,a) values (399,26);
+insert into t (id,a) values (399,27);
+insert into t (id,a) values (399,28);
+insert into t (id,a) values (399,29);
+insert into t (id,a) values (399,30);
+insert into t (id,a) values (399,31);
+insert into t (id,a) values (399,32);
+insert into t (id,a) values (399,33);
+insert into t (id,a) values (399,34);
+insert into t (id,a) values (399,35);
+insert into t (id,a) values (399,36);
+insert into t (id,a) values (399,37);
+insert into t (id,a) values (399,38);
+insert into t (id,a) values (399,39);
+insert into t (id,a) values (399,40);
+insert into t (id,a) values (399,41);
+insert into t (id,a) values (399,42);
+insert into t (id,a) values (399,43);
+insert into t (id,a) values (399,44);
+insert into t (id,a) values (399,45);
+insert into t (id,a) values (399,46);
+insert into t (id,a) values (399,47);
+insert into t (id,a) values (399,48);
+insert into t (id,a) values (399,49);
+insert into t (id,a) values (399,50);
+insert into t (id,a) values (399,51);
+insert into t (id,a) values (399,52);
+insert into t (id,a) values (399,53);
+insert into t (id,a) values (399,54);
+insert into t (id,a) values (399,55);
+insert into t (id,a) values (399,56);
+insert into t (id,a) values (399,57);
+insert into t (id,a) values (399,58);
+insert into t (id,a) values (399,59);
+insert into t (id,a) values (399,60);
+insert into t (id,a) values (399,61);
+insert into t (id,a) values (399,62);
+insert into t (id,a) values (399,63);
+insert into t (id,a) values (399,64);
+insert into t (id,a) values (399,65);
+insert into t (id,a) values (399,66);
+insert into t (id,a) values (399,67);
+insert into t (id,a) values (399,68);
+insert into t (id,a) values (399,69);
+insert into t (id,a) values (399,70);
+insert into t (id,a) values (399,71);
+insert into t (id,a) values (399,72);
+insert into t (id,a) values (399,73);
+insert into t (id,a) values (399,74);
+insert into t (id,a) values (399,75);
+insert into t (id,a) values (399,76);
+insert into t (id,a) values (399,77);
+insert into t (id,a) values (399,78);
+insert into t (id,a) values (399,79);
+insert into t (id,a) values (399,80);
+insert into t (id,a) values (399,81);
+insert into t (id,a) values (399,82);
+insert into t (id,a) values (399,83);
+insert into t (id,a) values (399,84);
+insert into t (id,a) values (399,85);
+insert into t (id,a) values (399,86);
+insert into t (id,a) values (399,87);
+insert into t (id,a) values (399,88);
+insert into t (id,a) values (399,89);
+insert into t (id,a) values (399,90);
+insert into t (id,a) values (399,91);
+insert into t (id,a) values (399,92);
+insert into t (id,a) values (399,93);
+insert into t (id,a) values (399,94);
+insert into t (id,a) values (399,95);
+insert into t (id,a) values (399,96);
+insert into t (id,a) values (399,97);
+insert into t (id,a) values (399,98);
+insert into t (id,a) values (399,99);
+insert into t (id,a) values (400,0);
+insert into t (id,a) values (400,1);
+insert into t (id,a) values (400,2);
+insert into t (id,a) values (400,3);
+insert into t (id,a) values (400,4);
+insert into t (id,a) values (400,5);
+insert into t (id,a) values (400,6);
+insert into t (id,a) values (400,7);
+insert into t (id,a) values (400,8);
+insert into t (id,a) values (400,9);
+insert into t (id,a) values (400,10);
+insert into t (id,a) values (400,11);
+insert into t (id,a) values (400,12);
+insert into t (id,a) values (400,13);
+insert into t (id,a) values (400,14);
+insert into t (id,a) values (400,15);
+insert into t (id,a) values (400,16);
+insert into t (id,a) values (400,17);
+insert into t (id,a) values (400,18);
+insert into t (id,a) values (400,19);
+insert into t (id,a) values (400,20);
+insert into t (id,a) values (400,21);
+insert into t (id,a) values (400,22);
+insert into t (id,a) values (400,23);
+insert into t (id,a) values (400,24);
+insert into t (id,a) values (400,25);
+insert into t (id,a) values (400,26);
+insert into t (id,a) values (400,27);
+insert into t (id,a) values (400,28);
+insert into t (id,a) values (400,29);
+insert into t (id,a) values (400,30);
+insert into t (id,a) values (400,31);
+insert into t (id,a) values (400,32);
+insert into t (id,a) values (400,33);
+insert into t (id,a) values (400,34);
+insert into t (id,a) values (400,35);
+insert into t (id,a) values (400,36);
+insert into t (id,a) values (400,37);
+insert into t (id,a) values (400,38);
+insert into t (id,a) values (400,39);
+insert into t (id,a) values (400,40);
+insert into t (id,a) values (400,41);
+insert into t (id,a) values (400,42);
+insert into t (id,a) values (400,43);
+insert into t (id,a) values (400,44);
+insert into t (id,a) values (400,45);
+insert into t (id,a) values (400,46);
+insert into t (id,a) values (400,47);
+insert into t (id,a) values (400,48);
+insert into t (id,a) values (400,49);
+insert into t (id,a) values (400,50);
+insert into t (id,a) values (400,51);
+insert into t (id,a) values (400,52);
+insert into t (id,a) values (400,53);
+insert into t (id,a) values (400,54);
+insert into t (id,a) values (400,55);
+insert into t (id,a) values (400,56);
+insert into t (id,a) values (400,57);
+insert into t (id,a) values (400,58);
+insert into t (id,a) values (400,59);
+insert into t (id,a) values (400,60);
+insert into t (id,a) values (400,61);
+insert into t (id,a) values (400,62);
+insert into t (id,a) values (400,63);
+insert into t (id,a) values (400,64);
+insert into t (id,a) values (400,65);
+insert into t (id,a) values (400,66);
+insert into t (id,a) values (400,67);
+insert into t (id,a) values (400,68);
+insert into t (id,a) values (400,69);
+insert into t (id,a) values (400,70);
+insert into t (id,a) values (400,71);
+insert into t (id,a) values (400,72);
+insert into t (id,a) values (400,73);
+insert into t (id,a) values (400,74);
+insert into t (id,a) values (400,75);
+insert into t (id,a) values (400,76);
+insert into t (id,a) values (400,77);
+insert into t (id,a) values (400,78);
+insert into t (id,a) values (400,79);
+insert into t (id,a) values (400,80);
+insert into t (id,a) values (400,81);
+insert into t (id,a) values (400,82);
+insert into t (id,a) values (400,83);
+insert into t (id,a) values (400,84);
+insert into t (id,a) values (400,85);
+insert into t (id,a) values (400,86);
+insert into t (id,a) values (400,87);
+insert into t (id,a) values (400,88);
+insert into t (id,a) values (400,89);
+insert into t (id,a) values (400,90);
+insert into t (id,a) values (400,91);
+insert into t (id,a) values (400,92);
+insert into t (id,a) values (400,93);
+insert into t (id,a) values (400,94);
+insert into t (id,a) values (400,95);
+insert into t (id,a) values (400,96);
+insert into t (id,a) values (400,97);
+insert into t (id,a) values (400,98);
+insert into t (id,a) values (400,99);
+insert into t (id,a) values (401,0);
+insert into t (id,a) values (401,1);
+insert into t (id,a) values (401,2);
+insert into t (id,a) values (401,3);
+insert into t (id,a) values (401,4);
+insert into t (id,a) values (401,5);
+insert into t (id,a) values (401,6);
+insert into t (id,a) values (401,7);
+insert into t (id,a) values (401,8);
+insert into t (id,a) values (401,9);
+insert into t (id,a) values (401,10);
+insert into t (id,a) values (401,11);
+insert into t (id,a) values (401,12);
+insert into t (id,a) values (401,13);
+insert into t (id,a) values (401,14);
+insert into t (id,a) values (401,15);
+insert into t (id,a) values (401,16);
+insert into t (id,a) values (401,17);
+insert into t (id,a) values (401,18);
+insert into t (id,a) values (401,19);
+insert into t (id,a) values (401,20);
+insert into t (id,a) values (401,21);
+insert into t (id,a) values (401,22);
+insert into t (id,a) values (401,23);
+insert into t (id,a) values (401,24);
+insert into t (id,a) values (401,25);
+insert into t (id,a) values (401,26);
+insert into t (id,a) values (401,27);
+insert into t (id,a) values (401,28);
+insert into t (id,a) values (401,29);
+insert into t (id,a) values (401,30);
+insert into t (id,a) values (401,31);
+insert into t (id,a) values (401,32);
+insert into t (id,a) values (401,33);
+insert into t (id,a) values (401,34);
+insert into t (id,a) values (401,35);
+insert into t (id,a) values (401,36);
+insert into t (id,a) values (401,37);
+insert into t (id,a) values (401,38);
+insert into t (id,a) values (401,39);
+insert into t (id,a) values (401,40);
+insert into t (id,a) values (401,41);
+insert into t (id,a) values (401,42);
+insert into t (id,a) values (401,43);
+insert into t (id,a) values (401,44);
+insert into t (id,a) values (401,45);
+insert into t (id,a) values (401,46);
+insert into t (id,a) values (401,47);
+insert into t (id,a) values (401,48);
+insert into t (id,a) values (401,49);
+insert into t (id,a) values (401,50);
+insert into t (id,a) values (401,51);
+insert into t (id,a) values (401,52);
+insert into t (id,a) values (401,53);
+insert into t (id,a) values (401,54);
+insert into t (id,a) values (401,55);
+insert into t (id,a) values (401,56);
+insert into t (id,a) values (401,57);
+insert into t (id,a) values (401,58);
+insert into t (id,a) values (401,59);
+insert into t (id,a) values (401,60);
+insert into t (id,a) values (401,61);
+insert into t (id,a) values (401,62);
+insert into t (id,a) values (401,63);
+insert into t (id,a) values (401,64);
+insert into t (id,a) values (401,65);
+insert into t (id,a) values (401,66);
+insert into t (id,a) values (401,67);
+insert into t (id,a) values (401,68);
+insert into t (id,a) values (401,69);
+insert into t (id,a) values (401,70);
+insert into t (id,a) values (401,71);
+insert into t (id,a) values (401,72);
+insert into t (id,a) values (401,73);
+insert into t (id,a) values (401,74);
+insert into t (id,a) values (401,75);
+insert into t (id,a) values (401,76);
+insert into t (id,a) values (401,77);
+insert into t (id,a) values (401,78);
+insert into t (id,a) values (401,79);
+insert into t (id,a) values (401,80);
+insert into t (id,a) values (401,81);
+insert into t (id,a) values (401,82);
+insert into t (id,a) values (401,83);
+insert into t (id,a) values (401,84);
+insert into t (id,a) values (401,85);
+insert into t (id,a) values (401,86);
+insert into t (id,a) values (401,87);
+insert into t (id,a) values (401,88);
+insert into t (id,a) values (401,89);
+insert into t (id,a) values (401,90);
+insert into t (id,a) values (401,91);
+insert into t (id,a) values (401,92);
+insert into t (id,a) values (401,93);
+insert into t (id,a) values (401,94);
+insert into t (id,a) values (401,95);
+insert into t (id,a) values (401,96);
+insert into t (id,a) values (401,97);
+insert into t (id,a) values (401,98);
+insert into t (id,a) values (401,99);
+insert into t (id,a) values (402,0);
+insert into t (id,a) values (402,1);
+insert into t (id,a) values (402,2);
+insert into t (id,a) values (402,3);
+insert into t (id,a) values (402,4);
+insert into t (id,a) values (402,5);
+insert into t (id,a) values (402,6);
+insert into t (id,a) values (402,7);
+insert into t (id,a) values (402,8);
+insert into t (id,a) values (402,9);
+insert into t (id,a) values (402,10);
+insert into t (id,a) values (402,11);
+insert into t (id,a) values (402,12);
+insert into t (id,a) values (402,13);
+insert into t (id,a) values (402,14);
+insert into t (id,a) values (402,15);
+insert into t (id,a) values (402,16);
+insert into t (id,a) values (402,17);
+insert into t (id,a) values (402,18);
+insert into t (id,a) values (402,19);
+insert into t (id,a) values (402,20);
+insert into t (id,a) values (402,21);
+insert into t (id,a) values (402,22);
+insert into t (id,a) values (402,23);
+insert into t (id,a) values (402,24);
+insert into t (id,a) values (402,25);
+insert into t (id,a) values (402,26);
+insert into t (id,a) values (402,27);
+insert into t (id,a) values (402,28);
+insert into t (id,a) values (402,29);
+insert into t (id,a) values (402,30);
+insert into t (id,a) values (402,31);
+insert into t (id,a) values (402,32);
+insert into t (id,a) values (402,33);
+insert into t (id,a) values (402,34);
+insert into t (id,a) values (402,35);
+insert into t (id,a) values (402,36);
+insert into t (id,a) values (402,37);
+insert into t (id,a) values (402,38);
+insert into t (id,a) values (402,39);
+insert into t (id,a) values (402,40);
+insert into t (id,a) values (402,41);
+insert into t (id,a) values (402,42);
+insert into t (id,a) values (402,43);
+insert into t (id,a) values (402,44);
+insert into t (id,a) values (402,45);
+insert into t (id,a) values (402,46);
+insert into t (id,a) values (402,47);
+insert into t (id,a) values (402,48);
+insert into t (id,a) values (402,49);
+insert into t (id,a) values (402,50);
+insert into t (id,a) values (402,51);
+insert into t (id,a) values (402,52);
+insert into t (id,a) values (402,53);
+insert into t (id,a) values (402,54);
+insert into t (id,a) values (402,55);
+insert into t (id,a) values (402,56);
+insert into t (id,a) values (402,57);
+insert into t (id,a) values (402,58);
+insert into t (id,a) values (402,59);
+insert into t (id,a) values (402,60);
+insert into t (id,a) values (402,61);
+insert into t (id,a) values (402,62);
+insert into t (id,a) values (402,63);
+insert into t (id,a) values (402,64);
+insert into t (id,a) values (402,65);
+insert into t (id,a) values (402,66);
+insert into t (id,a) values (402,67);
+insert into t (id,a) values (402,68);
+insert into t (id,a) values (402,69);
+insert into t (id,a) values (402,70);
+insert into t (id,a) values (402,71);
+insert into t (id,a) values (402,72);
+insert into t (id,a) values (402,73);
+insert into t (id,a) values (402,74);
+insert into t (id,a) values (402,75);
+insert into t (id,a) values (402,76);
+insert into t (id,a) values (402,77);
+insert into t (id,a) values (402,78);
+insert into t (id,a) values (402,79);
+insert into t (id,a) values (402,80);
+insert into t (id,a) values (402,81);
+insert into t (id,a) values (402,82);
+insert into t (id,a) values (402,83);
+insert into t (id,a) values (402,84);
+insert into t (id,a) values (402,85);
+insert into t (id,a) values (402,86);
+insert into t (id,a) values (402,87);
+insert into t (id,a) values (402,88);
+insert into t (id,a) values (402,89);
+insert into t (id,a) values (402,90);
+insert into t (id,a) values (402,91);
+insert into t (id,a) values (402,92);
+insert into t (id,a) values (402,93);
+insert into t (id,a) values (402,94);
+insert into t (id,a) values (402,95);
+insert into t (id,a) values (402,96);
+insert into t (id,a) values (402,97);
+insert into t (id,a) values (402,98);
+insert into t (id,a) values (402,99);
+insert into t (id,a) values (403,0);
+insert into t (id,a) values (403,1);
+insert into t (id,a) values (403,2);
+insert into t (id,a) values (403,3);
+insert into t (id,a) values (403,4);
+insert into t (id,a) values (403,5);
+insert into t (id,a) values (403,6);
+insert into t (id,a) values (403,7);
+insert into t (id,a) values (403,8);
+insert into t (id,a) values (403,9);
+insert into t (id,a) values (403,10);
+insert into t (id,a) values (403,11);
+insert into t (id,a) values (403,12);
+insert into t (id,a) values (403,13);
+insert into t (id,a) values (403,14);
+insert into t (id,a) values (403,15);
+insert into t (id,a) values (403,16);
+insert into t (id,a) values (403,17);
+insert into t (id,a) values (403,18);
+insert into t (id,a) values (403,19);
+insert into t (id,a) values (403,20);
+insert into t (id,a) values (403,21);
+insert into t (id,a) values (403,22);
+insert into t (id,a) values (403,23);
+insert into t (id,a) values (403,24);
+insert into t (id,a) values (403,25);
+insert into t (id,a) values (403,26);
+insert into t (id,a) values (403,27);
+insert into t (id,a) values (403,28);
+insert into t (id,a) values (403,29);
+insert into t (id,a) values (403,30);
+insert into t (id,a) values (403,31);
+insert into t (id,a) values (403,32);
+insert into t (id,a) values (403,33);
+insert into t (id,a) values (403,34);
+insert into t (id,a) values (403,35);
+insert into t (id,a) values (403,36);
+insert into t (id,a) values (403,37);
+insert into t (id,a) values (403,38);
+insert into t (id,a) values (403,39);
+insert into t (id,a) values (403,40);
+insert into t (id,a) values (403,41);
+insert into t (id,a) values (403,42);
+insert into t (id,a) values (403,43);
+insert into t (id,a) values (403,44);
+insert into t (id,a) values (403,45);
+insert into t (id,a) values (403,46);
+insert into t (id,a) values (403,47);
+insert into t (id,a) values (403,48);
+insert into t (id,a) values (403,49);
+insert into t (id,a) values (403,50);
+insert into t (id,a) values (403,51);
+insert into t (id,a) values (403,52);
+insert into t (id,a) values (403,53);
+insert into t (id,a) values (403,54);
+insert into t (id,a) values (403,55);
+insert into t (id,a) values (403,56);
+insert into t (id,a) values (403,57);
+insert into t (id,a) values (403,58);
+insert into t (id,a) values (403,59);
+insert into t (id,a) values (403,60);
+insert into t (id,a) values (403,61);
+insert into t (id,a) values (403,62);
+insert into t (id,a) values (403,63);
+insert into t (id,a) values (403,64);
+insert into t (id,a) values (403,65);
+insert into t (id,a) values (403,66);
+insert into t (id,a) values (403,67);
+insert into t (id,a) values (403,68);
+insert into t (id,a) values (403,69);
+insert into t (id,a) values (403,70);
+insert into t (id,a) values (403,71);
+insert into t (id,a) values (403,72);
+insert into t (id,a) values (403,73);
+insert into t (id,a) values (403,74);
+insert into t (id,a) values (403,75);
+insert into t (id,a) values (403,76);
+insert into t (id,a) values (403,77);
+insert into t (id,a) values (403,78);
+insert into t (id,a) values (403,79);
+insert into t (id,a) values (403,80);
+insert into t (id,a) values (403,81);
+insert into t (id,a) values (403,82);
+insert into t (id,a) values (403,83);
+insert into t (id,a) values (403,84);
+insert into t (id,a) values (403,85);
+insert into t (id,a) values (403,86);
+insert into t (id,a) values (403,87);
+insert into t (id,a) values (403,88);
+insert into t (id,a) values (403,89);
+insert into t (id,a) values (403,90);
+insert into t (id,a) values (403,91);
+insert into t (id,a) values (403,92);
+insert into t (id,a) values (403,93);
+insert into t (id,a) values (403,94);
+insert into t (id,a) values (403,95);
+insert into t (id,a) values (403,96);
+insert into t (id,a) values (403,97);
+insert into t (id,a) values (403,98);
+insert into t (id,a) values (403,99);
+insert into t (id,a) values (404,0);
+insert into t (id,a) values (404,1);
+insert into t (id,a) values (404,2);
+insert into t (id,a) values (404,3);
+insert into t (id,a) values (404,4);
+insert into t (id,a) values (404,5);
+insert into t (id,a) values (404,6);
+insert into t (id,a) values (404,7);
+insert into t (id,a) values (404,8);
+insert into t (id,a) values (404,9);
+insert into t (id,a) values (404,10);
+insert into t (id,a) values (404,11);
+insert into t (id,a) values (404,12);
+insert into t (id,a) values (404,13);
+insert into t (id,a) values (404,14);
+insert into t (id,a) values (404,15);
+insert into t (id,a) values (404,16);
+insert into t (id,a) values (404,17);
+insert into t (id,a) values (404,18);
+insert into t (id,a) values (404,19);
+insert into t (id,a) values (404,20);
+insert into t (id,a) values (404,21);
+insert into t (id,a) values (404,22);
+insert into t (id,a) values (404,23);
+insert into t (id,a) values (404,24);
+insert into t (id,a) values (404,25);
+insert into t (id,a) values (404,26);
+insert into t (id,a) values (404,27);
+insert into t (id,a) values (404,28);
+insert into t (id,a) values (404,29);
+insert into t (id,a) values (404,30);
+insert into t (id,a) values (404,31);
+insert into t (id,a) values (404,32);
+insert into t (id,a) values (404,33);
+insert into t (id,a) values (404,34);
+insert into t (id,a) values (404,35);
+insert into t (id,a) values (404,36);
+insert into t (id,a) values (404,37);
+insert into t (id,a) values (404,38);
+insert into t (id,a) values (404,39);
+insert into t (id,a) values (404,40);
+insert into t (id,a) values (404,41);
+insert into t (id,a) values (404,42);
+insert into t (id,a) values (404,43);
+insert into t (id,a) values (404,44);
+insert into t (id,a) values (404,45);
+insert into t (id,a) values (404,46);
+insert into t (id,a) values (404,47);
+insert into t (id,a) values (404,48);
+insert into t (id,a) values (404,49);
+insert into t (id,a) values (404,50);
+insert into t (id,a) values (404,51);
+insert into t (id,a) values (404,52);
+insert into t (id,a) values (404,53);
+insert into t (id,a) values (404,54);
+insert into t (id,a) values (404,55);
+insert into t (id,a) values (404,56);
+insert into t (id,a) values (404,57);
+insert into t (id,a) values (404,58);
+insert into t (id,a) values (404,59);
+insert into t (id,a) values (404,60);
+insert into t (id,a) values (404,61);
+insert into t (id,a) values (404,62);
+insert into t (id,a) values (404,63);
+insert into t (id,a) values (404,64);
+insert into t (id,a) values (404,65);
+insert into t (id,a) values (404,66);
+insert into t (id,a) values (404,67);
+insert into t (id,a) values (404,68);
+insert into t (id,a) values (404,69);
+insert into t (id,a) values (404,70);
+insert into t (id,a) values (404,71);
+insert into t (id,a) values (404,72);
+insert into t (id,a) values (404,73);
+insert into t (id,a) values (404,74);
+insert into t (id,a) values (404,75);
+insert into t (id,a) values (404,76);
+insert into t (id,a) values (404,77);
+insert into t (id,a) values (404,78);
+insert into t (id,a) values (404,79);
+insert into t (id,a) values (404,80);
+insert into t (id,a) values (404,81);
+insert into t (id,a) values (404,82);
+insert into t (id,a) values (404,83);
+insert into t (id,a) values (404,84);
+insert into t (id,a) values (404,85);
+insert into t (id,a) values (404,86);
+insert into t (id,a) values (404,87);
+insert into t (id,a) values (404,88);
+insert into t (id,a) values (404,89);
+insert into t (id,a) values (404,90);
+insert into t (id,a) values (404,91);
+insert into t (id,a) values (404,92);
+insert into t (id,a) values (404,93);
+insert into t (id,a) values (404,94);
+insert into t (id,a) values (404,95);
+insert into t (id,a) values (404,96);
+insert into t (id,a) values (404,97);
+insert into t (id,a) values (404,98);
+insert into t (id,a) values (404,99);
+insert into t (id,a) values (405,0);
+insert into t (id,a) values (405,1);
+insert into t (id,a) values (405,2);
+insert into t (id,a) values (405,3);
+insert into t (id,a) values (405,4);
+insert into t (id,a) values (405,5);
+insert into t (id,a) values (405,6);
+insert into t (id,a) values (405,7);
+insert into t (id,a) values (405,8);
+insert into t (id,a) values (405,9);
+insert into t (id,a) values (405,10);
+insert into t (id,a) values (405,11);
+insert into t (id,a) values (405,12);
+insert into t (id,a) values (405,13);
+insert into t (id,a) values (405,14);
+insert into t (id,a) values (405,15);
+insert into t (id,a) values (405,16);
+insert into t (id,a) values (405,17);
+insert into t (id,a) values (405,18);
+insert into t (id,a) values (405,19);
+insert into t (id,a) values (405,20);
+insert into t (id,a) values (405,21);
+insert into t (id,a) values (405,22);
+insert into t (id,a) values (405,23);
+insert into t (id,a) values (405,24);
+insert into t (id,a) values (405,25);
+insert into t (id,a) values (405,26);
+insert into t (id,a) values (405,27);
+insert into t (id,a) values (405,28);
+insert into t (id,a) values (405,29);
+insert into t (id,a) values (405,30);
+insert into t (id,a) values (405,31);
+insert into t (id,a) values (405,32);
+insert into t (id,a) values (405,33);
+insert into t (id,a) values (405,34);
+insert into t (id,a) values (405,35);
+insert into t (id,a) values (405,36);
+insert into t (id,a) values (405,37);
+insert into t (id,a) values (405,38);
+insert into t (id,a) values (405,39);
+insert into t (id,a) values (405,40);
+insert into t (id,a) values (405,41);
+insert into t (id,a) values (405,42);
+insert into t (id,a) values (405,43);
+insert into t (id,a) values (405,44);
+insert into t (id,a) values (405,45);
+insert into t (id,a) values (405,46);
+insert into t (id,a) values (405,47);
+insert into t (id,a) values (405,48);
+insert into t (id,a) values (405,49);
+insert into t (id,a) values (405,50);
+insert into t (id,a) values (405,51);
+insert into t (id,a) values (405,52);
+insert into t (id,a) values (405,53);
+insert into t (id,a) values (405,54);
+insert into t (id,a) values (405,55);
+insert into t (id,a) values (405,56);
+insert into t (id,a) values (405,57);
+insert into t (id,a) values (405,58);
+insert into t (id,a) values (405,59);
+insert into t (id,a) values (405,60);
+insert into t (id,a) values (405,61);
+insert into t (id,a) values (405,62);
+insert into t (id,a) values (405,63);
+insert into t (id,a) values (405,64);
+insert into t (id,a) values (405,65);
+insert into t (id,a) values (405,66);
+insert into t (id,a) values (405,67);
+insert into t (id,a) values (405,68);
+insert into t (id,a) values (405,69);
+insert into t (id,a) values (405,70);
+insert into t (id,a) values (405,71);
+insert into t (id,a) values (405,72);
+insert into t (id,a) values (405,73);
+insert into t (id,a) values (405,74);
+insert into t (id,a) values (405,75);
+insert into t (id,a) values (405,76);
+insert into t (id,a) values (405,77);
+insert into t (id,a) values (405,78);
+insert into t (id,a) values (405,79);
+insert into t (id,a) values (405,80);
+insert into t (id,a) values (405,81);
+insert into t (id,a) values (405,82);
+insert into t (id,a) values (405,83);
+insert into t (id,a) values (405,84);
+insert into t (id,a) values (405,85);
+insert into t (id,a) values (405,86);
+insert into t (id,a) values (405,87);
+insert into t (id,a) values (405,88);
+insert into t (id,a) values (405,89);
+insert into t (id,a) values (405,90);
+insert into t (id,a) values (405,91);
+insert into t (id,a) values (405,92);
+insert into t (id,a) values (405,93);
+insert into t (id,a) values (405,94);
+insert into t (id,a) values (405,95);
+insert into t (id,a) values (405,96);
+insert into t (id,a) values (405,97);
+insert into t (id,a) values (405,98);
+insert into t (id,a) values (405,99);
+insert into t (id,a) values (406,0);
+insert into t (id,a) values (406,1);
+insert into t (id,a) values (406,2);
+insert into t (id,a) values (406,3);
+insert into t (id,a) values (406,4);
+insert into t (id,a) values (406,5);
+insert into t (id,a) values (406,6);
+insert into t (id,a) values (406,7);
+insert into t (id,a) values (406,8);
+insert into t (id,a) values (406,9);
+insert into t (id,a) values (406,10);
+insert into t (id,a) values (406,11);
+insert into t (id,a) values (406,12);
+insert into t (id,a) values (406,13);
+insert into t (id,a) values (406,14);
+insert into t (id,a) values (406,15);
+insert into t (id,a) values (406,16);
+insert into t (id,a) values (406,17);
+insert into t (id,a) values (406,18);
+insert into t (id,a) values (406,19);
+insert into t (id,a) values (406,20);
+insert into t (id,a) values (406,21);
+insert into t (id,a) values (406,22);
+insert into t (id,a) values (406,23);
+insert into t (id,a) values (406,24);
+insert into t (id,a) values (406,25);
+insert into t (id,a) values (406,26);
+insert into t (id,a) values (406,27);
+insert into t (id,a) values (406,28);
+insert into t (id,a) values (406,29);
+insert into t (id,a) values (406,30);
+insert into t (id,a) values (406,31);
+insert into t (id,a) values (406,32);
+insert into t (id,a) values (406,33);
+insert into t (id,a) values (406,34);
+insert into t (id,a) values (406,35);
+insert into t (id,a) values (406,36);
+insert into t (id,a) values (406,37);
+insert into t (id,a) values (406,38);
+insert into t (id,a) values (406,39);
+insert into t (id,a) values (406,40);
+insert into t (id,a) values (406,41);
+insert into t (id,a) values (406,42);
+insert into t (id,a) values (406,43);
+insert into t (id,a) values (406,44);
+insert into t (id,a) values (406,45);
+insert into t (id,a) values (406,46);
+insert into t (id,a) values (406,47);
+insert into t (id,a) values (406,48);
+insert into t (id,a) values (406,49);
+insert into t (id,a) values (406,50);
+insert into t (id,a) values (406,51);
+insert into t (id,a) values (406,52);
+insert into t (id,a) values (406,53);
+insert into t (id,a) values (406,54);
+insert into t (id,a) values (406,55);
+insert into t (id,a) values (406,56);
+insert into t (id,a) values (406,57);
+insert into t (id,a) values (406,58);
+insert into t (id,a) values (406,59);
+insert into t (id,a) values (406,60);
+insert into t (id,a) values (406,61);
+insert into t (id,a) values (406,62);
+insert into t (id,a) values (406,63);
+insert into t (id,a) values (406,64);
+insert into t (id,a) values (406,65);
+insert into t (id,a) values (406,66);
+insert into t (id,a) values (406,67);
+insert into t (id,a) values (406,68);
+insert into t (id,a) values (406,69);
+insert into t (id,a) values (406,70);
+insert into t (id,a) values (406,71);
+insert into t (id,a) values (406,72);
+insert into t (id,a) values (406,73);
+insert into t (id,a) values (406,74);
+insert into t (id,a) values (406,75);
+insert into t (id,a) values (406,76);
+insert into t (id,a) values (406,77);
+insert into t (id,a) values (406,78);
+insert into t (id,a) values (406,79);
+insert into t (id,a) values (406,80);
+insert into t (id,a) values (406,81);
+insert into t (id,a) values (406,82);
+insert into t (id,a) values (406,83);
+insert into t (id,a) values (406,84);
+insert into t (id,a) values (406,85);
+insert into t (id,a) values (406,86);
+insert into t (id,a) values (406,87);
+insert into t (id,a) values (406,88);
+insert into t (id,a) values (406,89);
+insert into t (id,a) values (406,90);
+insert into t (id,a) values (406,91);
+insert into t (id,a) values (406,92);
+insert into t (id,a) values (406,93);
+insert into t (id,a) values (406,94);
+insert into t (id,a) values (406,95);
+insert into t (id,a) values (406,96);
+insert into t (id,a) values (406,97);
+insert into t (id,a) values (406,98);
+insert into t (id,a) values (406,99);
+insert into t (id,a) values (407,0);
+insert into t (id,a) values (407,1);
+insert into t (id,a) values (407,2);
+insert into t (id,a) values (407,3);
+insert into t (id,a) values (407,4);
+insert into t (id,a) values (407,5);
+insert into t (id,a) values (407,6);
+insert into t (id,a) values (407,7);
+insert into t (id,a) values (407,8);
+insert into t (id,a) values (407,9);
+insert into t (id,a) values (407,10);
+insert into t (id,a) values (407,11);
+insert into t (id,a) values (407,12);
+insert into t (id,a) values (407,13);
+insert into t (id,a) values (407,14);
+insert into t (id,a) values (407,15);
+insert into t (id,a) values (407,16);
+insert into t (id,a) values (407,17);
+insert into t (id,a) values (407,18);
+insert into t (id,a) values (407,19);
+insert into t (id,a) values (407,20);
+insert into t (id,a) values (407,21);
+insert into t (id,a) values (407,22);
+insert into t (id,a) values (407,23);
+insert into t (id,a) values (407,24);
+insert into t (id,a) values (407,25);
+insert into t (id,a) values (407,26);
+insert into t (id,a) values (407,27);
+insert into t (id,a) values (407,28);
+insert into t (id,a) values (407,29);
+insert into t (id,a) values (407,30);
+insert into t (id,a) values (407,31);
+insert into t (id,a) values (407,32);
+insert into t (id,a) values (407,33);
+insert into t (id,a) values (407,34);
+insert into t (id,a) values (407,35);
+insert into t (id,a) values (407,36);
+insert into t (id,a) values (407,37);
+insert into t (id,a) values (407,38);
+insert into t (id,a) values (407,39);
+insert into t (id,a) values (407,40);
+insert into t (id,a) values (407,41);
+insert into t (id,a) values (407,42);
+insert into t (id,a) values (407,43);
+insert into t (id,a) values (407,44);
+insert into t (id,a) values (407,45);
+insert into t (id,a) values (407,46);
+insert into t (id,a) values (407,47);
+insert into t (id,a) values (407,48);
+insert into t (id,a) values (407,49);
+insert into t (id,a) values (407,50);
+insert into t (id,a) values (407,51);
+insert into t (id,a) values (407,52);
+insert into t (id,a) values (407,53);
+insert into t (id,a) values (407,54);
+insert into t (id,a) values (407,55);
+insert into t (id,a) values (407,56);
+insert into t (id,a) values (407,57);
+insert into t (id,a) values (407,58);
+insert into t (id,a) values (407,59);
+insert into t (id,a) values (407,60);
+insert into t (id,a) values (407,61);
+insert into t (id,a) values (407,62);
+insert into t (id,a) values (407,63);
+insert into t (id,a) values (407,64);
+insert into t (id,a) values (407,65);
+insert into t (id,a) values (407,66);
+insert into t (id,a) values (407,67);
+insert into t (id,a) values (407,68);
+insert into t (id,a) values (407,69);
+insert into t (id,a) values (407,70);
+insert into t (id,a) values (407,71);
+insert into t (id,a) values (407,72);
+insert into t (id,a) values (407,73);
+insert into t (id,a) values (407,74);
+insert into t (id,a) values (407,75);
+insert into t (id,a) values (407,76);
+insert into t (id,a) values (407,77);
+insert into t (id,a) values (407,78);
+insert into t (id,a) values (407,79);
+insert into t (id,a) values (407,80);
+insert into t (id,a) values (407,81);
+insert into t (id,a) values (407,82);
+insert into t (id,a) values (407,83);
+insert into t (id,a) values (407,84);
+insert into t (id,a) values (407,85);
+insert into t (id,a) values (407,86);
+insert into t (id,a) values (407,87);
+insert into t (id,a) values (407,88);
+insert into t (id,a) values (407,89);
+insert into t (id,a) values (407,90);
+insert into t (id,a) values (407,91);
+insert into t (id,a) values (407,92);
+insert into t (id,a) values (407,93);
+insert into t (id,a) values (407,94);
+insert into t (id,a) values (407,95);
+insert into t (id,a) values (407,96);
+insert into t (id,a) values (407,97);
+insert into t (id,a) values (407,98);
+insert into t (id,a) values (407,99);
+insert into t (id,a) values (408,0);
+insert into t (id,a) values (408,1);
+insert into t (id,a) values (408,2);
+insert into t (id,a) values (408,3);
+insert into t (id,a) values (408,4);
+insert into t (id,a) values (408,5);
+insert into t (id,a) values (408,6);
+insert into t (id,a) values (408,7);
+insert into t (id,a) values (408,8);
+insert into t (id,a) values (408,9);
+insert into t (id,a) values (408,10);
+insert into t (id,a) values (408,11);
+insert into t (id,a) values (408,12);
+insert into t (id,a) values (408,13);
+insert into t (id,a) values (408,14);
+insert into t (id,a) values (408,15);
+insert into t (id,a) values (408,16);
+insert into t (id,a) values (408,17);
+insert into t (id,a) values (408,18);
+insert into t (id,a) values (408,19);
+insert into t (id,a) values (408,20);
+insert into t (id,a) values (408,21);
+insert into t (id,a) values (408,22);
+insert into t (id,a) values (408,23);
+insert into t (id,a) values (408,24);
+insert into t (id,a) values (408,25);
+insert into t (id,a) values (408,26);
+insert into t (id,a) values (408,27);
+insert into t (id,a) values (408,28);
+insert into t (id,a) values (408,29);
+insert into t (id,a) values (408,30);
+insert into t (id,a) values (408,31);
+insert into t (id,a) values (408,32);
+insert into t (id,a) values (408,33);
+insert into t (id,a) values (408,34);
+insert into t (id,a) values (408,35);
+insert into t (id,a) values (408,36);
+insert into t (id,a) values (408,37);
+insert into t (id,a) values (408,38);
+insert into t (id,a) values (408,39);
+insert into t (id,a) values (408,40);
+insert into t (id,a) values (408,41);
+insert into t (id,a) values (408,42);
+insert into t (id,a) values (408,43);
+insert into t (id,a) values (408,44);
+insert into t (id,a) values (408,45);
+insert into t (id,a) values (408,46);
+insert into t (id,a) values (408,47);
+insert into t (id,a) values (408,48);
+insert into t (id,a) values (408,49);
+insert into t (id,a) values (408,50);
+insert into t (id,a) values (408,51);
+insert into t (id,a) values (408,52);
+insert into t (id,a) values (408,53);
+insert into t (id,a) values (408,54);
+insert into t (id,a) values (408,55);
+insert into t (id,a) values (408,56);
+insert into t (id,a) values (408,57);
+insert into t (id,a) values (408,58);
+insert into t (id,a) values (408,59);
+insert into t (id,a) values (408,60);
+insert into t (id,a) values (408,61);
+insert into t (id,a) values (408,62);
+insert into t (id,a) values (408,63);
+insert into t (id,a) values (408,64);
+insert into t (id,a) values (408,65);
+insert into t (id,a) values (408,66);
+insert into t (id,a) values (408,67);
+insert into t (id,a) values (408,68);
+insert into t (id,a) values (408,69);
+insert into t (id,a) values (408,70);
+insert into t (id,a) values (408,71);
+insert into t (id,a) values (408,72);
+insert into t (id,a) values (408,73);
+insert into t (id,a) values (408,74);
+insert into t (id,a) values (408,75);
+insert into t (id,a) values (408,76);
+insert into t (id,a) values (408,77);
+insert into t (id,a) values (408,78);
+insert into t (id,a) values (408,79);
+insert into t (id,a) values (408,80);
+insert into t (id,a) values (408,81);
+insert into t (id,a) values (408,82);
+insert into t (id,a) values (408,83);
+insert into t (id,a) values (408,84);
+insert into t (id,a) values (408,85);
+insert into t (id,a) values (408,86);
+insert into t (id,a) values (408,87);
+insert into t (id,a) values (408,88);
+insert into t (id,a) values (408,89);
+insert into t (id,a) values (408,90);
+insert into t (id,a) values (408,91);
+insert into t (id,a) values (408,92);
+insert into t (id,a) values (408,93);
+insert into t (id,a) values (408,94);
+insert into t (id,a) values (408,95);
+insert into t (id,a) values (408,96);
+insert into t (id,a) values (408,97);
+insert into t (id,a) values (408,98);
+insert into t (id,a) values (408,99);
+insert into t (id,a) values (409,0);
+insert into t (id,a) values (409,1);
+insert into t (id,a) values (409,2);
+insert into t (id,a) values (409,3);
+insert into t (id,a) values (409,4);
+insert into t (id,a) values (409,5);
+insert into t (id,a) values (409,6);
+insert into t (id,a) values (409,7);
+insert into t (id,a) values (409,8);
+insert into t (id,a) values (409,9);
+insert into t (id,a) values (409,10);
+insert into t (id,a) values (409,11);
+insert into t (id,a) values (409,12);
+insert into t (id,a) values (409,13);
+insert into t (id,a) values (409,14);
+insert into t (id,a) values (409,15);
+insert into t (id,a) values (409,16);
+insert into t (id,a) values (409,17);
+insert into t (id,a) values (409,18);
+insert into t (id,a) values (409,19);
+insert into t (id,a) values (409,20);
+insert into t (id,a) values (409,21);
+insert into t (id,a) values (409,22);
+insert into t (id,a) values (409,23);
+insert into t (id,a) values (409,24);
+insert into t (id,a) values (409,25);
+insert into t (id,a) values (409,26);
+insert into t (id,a) values (409,27);
+insert into t (id,a) values (409,28);
+insert into t (id,a) values (409,29);
+insert into t (id,a) values (409,30);
+insert into t (id,a) values (409,31);
+insert into t (id,a) values (409,32);
+insert into t (id,a) values (409,33);
+insert into t (id,a) values (409,34);
+insert into t (id,a) values (409,35);
+insert into t (id,a) values (409,36);
+insert into t (id,a) values (409,37);
+insert into t (id,a) values (409,38);
+insert into t (id,a) values (409,39);
+insert into t (id,a) values (409,40);
+insert into t (id,a) values (409,41);
+insert into t (id,a) values (409,42);
+insert into t (id,a) values (409,43);
+insert into t (id,a) values (409,44);
+insert into t (id,a) values (409,45);
+insert into t (id,a) values (409,46);
+insert into t (id,a) values (409,47);
+insert into t (id,a) values (409,48);
+insert into t (id,a) values (409,49);
+insert into t (id,a) values (409,50);
+insert into t (id,a) values (409,51);
+insert into t (id,a) values (409,52);
+insert into t (id,a) values (409,53);
+insert into t (id,a) values (409,54);
+insert into t (id,a) values (409,55);
+insert into t (id,a) values (409,56);
+insert into t (id,a) values (409,57);
+insert into t (id,a) values (409,58);
+insert into t (id,a) values (409,59);
+insert into t (id,a) values (409,60);
+insert into t (id,a) values (409,61);
+insert into t (id,a) values (409,62);
+insert into t (id,a) values (409,63);
+insert into t (id,a) values (409,64);
+insert into t (id,a) values (409,65);
+insert into t (id,a) values (409,66);
+insert into t (id,a) values (409,67);
+insert into t (id,a) values (409,68);
+insert into t (id,a) values (409,69);
+insert into t (id,a) values (409,70);
+insert into t (id,a) values (409,71);
+insert into t (id,a) values (409,72);
+insert into t (id,a) values (409,73);
+insert into t (id,a) values (409,74);
+insert into t (id,a) values (409,75);
+insert into t (id,a) values (409,76);
+insert into t (id,a) values (409,77);
+insert into t (id,a) values (409,78);
+insert into t (id,a) values (409,79);
+insert into t (id,a) values (409,80);
+insert into t (id,a) values (409,81);
+insert into t (id,a) values (409,82);
+insert into t (id,a) values (409,83);
+insert into t (id,a) values (409,84);
+insert into t (id,a) values (409,85);
+insert into t (id,a) values (409,86);
+insert into t (id,a) values (409,87);
+insert into t (id,a) values (409,88);
+insert into t (id,a) values (409,89);
+insert into t (id,a) values (409,90);
+insert into t (id,a) values (409,91);
+insert into t (id,a) values (409,92);
+insert into t (id,a) values (409,93);
+insert into t (id,a) values (409,94);
+insert into t (id,a) values (409,95);
+insert into t (id,a) values (409,96);
+insert into t (id,a) values (409,97);
+insert into t (id,a) values (409,98);
+insert into t (id,a) values (409,99);
+insert into t (id,a) values (410,0);
+insert into t (id,a) values (410,1);
+insert into t (id,a) values (410,2);
+insert into t (id,a) values (410,3);
+insert into t (id,a) values (410,4);
+insert into t (id,a) values (410,5);
+insert into t (id,a) values (410,6);
+insert into t (id,a) values (410,7);
+insert into t (id,a) values (410,8);
+insert into t (id,a) values (410,9);
+insert into t (id,a) values (410,10);
+insert into t (id,a) values (410,11);
+insert into t (id,a) values (410,12);
+insert into t (id,a) values (410,13);
+insert into t (id,a) values (410,14);
+insert into t (id,a) values (410,15);
+insert into t (id,a) values (410,16);
+insert into t (id,a) values (410,17);
+insert into t (id,a) values (410,18);
+insert into t (id,a) values (410,19);
+insert into t (id,a) values (410,20);
+insert into t (id,a) values (410,21);
+insert into t (id,a) values (410,22);
+insert into t (id,a) values (410,23);
+insert into t (id,a) values (410,24);
+insert into t (id,a) values (410,25);
+insert into t (id,a) values (410,26);
+insert into t (id,a) values (410,27);
+insert into t (id,a) values (410,28);
+insert into t (id,a) values (410,29);
+insert into t (id,a) values (410,30);
+insert into t (id,a) values (410,31);
+insert into t (id,a) values (410,32);
+insert into t (id,a) values (410,33);
+insert into t (id,a) values (410,34);
+insert into t (id,a) values (410,35);
+insert into t (id,a) values (410,36);
+insert into t (id,a) values (410,37);
+insert into t (id,a) values (410,38);
+insert into t (id,a) values (410,39);
+insert into t (id,a) values (410,40);
+insert into t (id,a) values (410,41);
+insert into t (id,a) values (410,42);
+insert into t (id,a) values (410,43);
+insert into t (id,a) values (410,44);
+insert into t (id,a) values (410,45);
+insert into t (id,a) values (410,46);
+insert into t (id,a) values (410,47);
+insert into t (id,a) values (410,48);
+insert into t (id,a) values (410,49);
+insert into t (id,a) values (410,50);
+insert into t (id,a) values (410,51);
+insert into t (id,a) values (410,52);
+insert into t (id,a) values (410,53);
+insert into t (id,a) values (410,54);
+insert into t (id,a) values (410,55);
+insert into t (id,a) values (410,56);
+insert into t (id,a) values (410,57);
+insert into t (id,a) values (410,58);
+insert into t (id,a) values (410,59);
+insert into t (id,a) values (410,60);
+insert into t (id,a) values (410,61);
+insert into t (id,a) values (410,62);
+insert into t (id,a) values (410,63);
+insert into t (id,a) values (410,64);
+insert into t (id,a) values (410,65);
+insert into t (id,a) values (410,66);
+insert into t (id,a) values (410,67);
+insert into t (id,a) values (410,68);
+insert into t (id,a) values (410,69);
+insert into t (id,a) values (410,70);
+insert into t (id,a) values (410,71);
+insert into t (id,a) values (410,72);
+insert into t (id,a) values (410,73);
+insert into t (id,a) values (410,74);
+insert into t (id,a) values (410,75);
+insert into t (id,a) values (410,76);
+insert into t (id,a) values (410,77);
+insert into t (id,a) values (410,78);
+insert into t (id,a) values (410,79);
+insert into t (id,a) values (410,80);
+insert into t (id,a) values (410,81);
+insert into t (id,a) values (410,82);
+insert into t (id,a) values (410,83);
+insert into t (id,a) values (410,84);
+insert into t (id,a) values (410,85);
+insert into t (id,a) values (410,86);
+insert into t (id,a) values (410,87);
+insert into t (id,a) values (410,88);
+insert into t (id,a) values (410,89);
+insert into t (id,a) values (410,90);
+insert into t (id,a) values (410,91);
+insert into t (id,a) values (410,92);
+insert into t (id,a) values (410,93);
+insert into t (id,a) values (410,94);
+insert into t (id,a) values (410,95);
+insert into t (id,a) values (410,96);
+insert into t (id,a) values (410,97);
+insert into t (id,a) values (410,98);
+insert into t (id,a) values (410,99);
+insert into t (id,a) values (411,0);
+insert into t (id,a) values (411,1);
+insert into t (id,a) values (411,2);
+insert into t (id,a) values (411,3);
+insert into t (id,a) values (411,4);
+insert into t (id,a) values (411,5);
+insert into t (id,a) values (411,6);
+insert into t (id,a) values (411,7);
+insert into t (id,a) values (411,8);
+insert into t (id,a) values (411,9);
+insert into t (id,a) values (411,10);
+insert into t (id,a) values (411,11);
+insert into t (id,a) values (411,12);
+insert into t (id,a) values (411,13);
+insert into t (id,a) values (411,14);
+insert into t (id,a) values (411,15);
+insert into t (id,a) values (411,16);
+insert into t (id,a) values (411,17);
+insert into t (id,a) values (411,18);
+insert into t (id,a) values (411,19);
+insert into t (id,a) values (411,20);
+insert into t (id,a) values (411,21);
+insert into t (id,a) values (411,22);
+insert into t (id,a) values (411,23);
+insert into t (id,a) values (411,24);
+insert into t (id,a) values (411,25);
+insert into t (id,a) values (411,26);
+insert into t (id,a) values (411,27);
+insert into t (id,a) values (411,28);
+insert into t (id,a) values (411,29);
+insert into t (id,a) values (411,30);
+insert into t (id,a) values (411,31);
+insert into t (id,a) values (411,32);
+insert into t (id,a) values (411,33);
+insert into t (id,a) values (411,34);
+insert into t (id,a) values (411,35);
+insert into t (id,a) values (411,36);
+insert into t (id,a) values (411,37);
+insert into t (id,a) values (411,38);
+insert into t (id,a) values (411,39);
+insert into t (id,a) values (411,40);
+insert into t (id,a) values (411,41);
+insert into t (id,a) values (411,42);
+insert into t (id,a) values (411,43);
+insert into t (id,a) values (411,44);
+insert into t (id,a) values (411,45);
+insert into t (id,a) values (411,46);
+insert into t (id,a) values (411,47);
+insert into t (id,a) values (411,48);
+insert into t (id,a) values (411,49);
+insert into t (id,a) values (411,50);
+insert into t (id,a) values (411,51);
+insert into t (id,a) values (411,52);
+insert into t (id,a) values (411,53);
+insert into t (id,a) values (411,54);
+insert into t (id,a) values (411,55);
+insert into t (id,a) values (411,56);
+insert into t (id,a) values (411,57);
+insert into t (id,a) values (411,58);
+insert into t (id,a) values (411,59);
+insert into t (id,a) values (411,60);
+insert into t (id,a) values (411,61);
+insert into t (id,a) values (411,62);
+insert into t (id,a) values (411,63);
+insert into t (id,a) values (411,64);
+insert into t (id,a) values (411,65);
+insert into t (id,a) values (411,66);
+insert into t (id,a) values (411,67);
+insert into t (id,a) values (411,68);
+insert into t (id,a) values (411,69);
+insert into t (id,a) values (411,70);
+insert into t (id,a) values (411,71);
+insert into t (id,a) values (411,72);
+insert into t (id,a) values (411,73);
+insert into t (id,a) values (411,74);
+insert into t (id,a) values (411,75);
+insert into t (id,a) values (411,76);
+insert into t (id,a) values (411,77);
+insert into t (id,a) values (411,78);
+insert into t (id,a) values (411,79);
+insert into t (id,a) values (411,80);
+insert into t (id,a) values (411,81);
+insert into t (id,a) values (411,82);
+insert into t (id,a) values (411,83);
+insert into t (id,a) values (411,84);
+insert into t (id,a) values (411,85);
+insert into t (id,a) values (411,86);
+insert into t (id,a) values (411,87);
+insert into t (id,a) values (411,88);
+insert into t (id,a) values (411,89);
+insert into t (id,a) values (411,90);
+insert into t (id,a) values (411,91);
+insert into t (id,a) values (411,92);
+insert into t (id,a) values (411,93);
+insert into t (id,a) values (411,94);
+insert into t (id,a) values (411,95);
+insert into t (id,a) values (411,96);
+insert into t (id,a) values (411,97);
+insert into t (id,a) values (411,98);
+insert into t (id,a) values (411,99);
+insert into t (id,a) values (412,0);
+insert into t (id,a) values (412,1);
+insert into t (id,a) values (412,2);
+insert into t (id,a) values (412,3);
+insert into t (id,a) values (412,4);
+insert into t (id,a) values (412,5);
+insert into t (id,a) values (412,6);
+insert into t (id,a) values (412,7);
+insert into t (id,a) values (412,8);
+insert into t (id,a) values (412,9);
+insert into t (id,a) values (412,10);
+insert into t (id,a) values (412,11);
+insert into t (id,a) values (412,12);
+insert into t (id,a) values (412,13);
+insert into t (id,a) values (412,14);
+insert into t (id,a) values (412,15);
+insert into t (id,a) values (412,16);
+insert into t (id,a) values (412,17);
+insert into t (id,a) values (412,18);
+insert into t (id,a) values (412,19);
+insert into t (id,a) values (412,20);
+insert into t (id,a) values (412,21);
+insert into t (id,a) values (412,22);
+insert into t (id,a) values (412,23);
+insert into t (id,a) values (412,24);
+insert into t (id,a) values (412,25);
+insert into t (id,a) values (412,26);
+insert into t (id,a) values (412,27);
+insert into t (id,a) values (412,28);
+insert into t (id,a) values (412,29);
+insert into t (id,a) values (412,30);
+insert into t (id,a) values (412,31);
+insert into t (id,a) values (412,32);
+insert into t (id,a) values (412,33);
+insert into t (id,a) values (412,34);
+insert into t (id,a) values (412,35);
+insert into t (id,a) values (412,36);
+insert into t (id,a) values (412,37);
+insert into t (id,a) values (412,38);
+insert into t (id,a) values (412,39);
+insert into t (id,a) values (412,40);
+insert into t (id,a) values (412,41);
+insert into t (id,a) values (412,42);
+insert into t (id,a) values (412,43);
+insert into t (id,a) values (412,44);
+insert into t (id,a) values (412,45);
+insert into t (id,a) values (412,46);
+insert into t (id,a) values (412,47);
+insert into t (id,a) values (412,48);
+insert into t (id,a) values (412,49);
+insert into t (id,a) values (412,50);
+insert into t (id,a) values (412,51);
+insert into t (id,a) values (412,52);
+insert into t (id,a) values (412,53);
+insert into t (id,a) values (412,54);
+insert into t (id,a) values (412,55);
+insert into t (id,a) values (412,56);
+insert into t (id,a) values (412,57);
+insert into t (id,a) values (412,58);
+insert into t (id,a) values (412,59);
+insert into t (id,a) values (412,60);
+insert into t (id,a) values (412,61);
+insert into t (id,a) values (412,62);
+insert into t (id,a) values (412,63);
+insert into t (id,a) values (412,64);
+insert into t (id,a) values (412,65);
+insert into t (id,a) values (412,66);
+insert into t (id,a) values (412,67);
+insert into t (id,a) values (412,68);
+insert into t (id,a) values (412,69);
+insert into t (id,a) values (412,70);
+insert into t (id,a) values (412,71);
+insert into t (id,a) values (412,72);
+insert into t (id,a) values (412,73);
+insert into t (id,a) values (412,74);
+insert into t (id,a) values (412,75);
+insert into t (id,a) values (412,76);
+insert into t (id,a) values (412,77);
+insert into t (id,a) values (412,78);
+insert into t (id,a) values (412,79);
+insert into t (id,a) values (412,80);
+insert into t (id,a) values (412,81);
+insert into t (id,a) values (412,82);
+insert into t (id,a) values (412,83);
+insert into t (id,a) values (412,84);
+insert into t (id,a) values (412,85);
+insert into t (id,a) values (412,86);
+insert into t (id,a) values (412,87);
+insert into t (id,a) values (412,88);
+insert into t (id,a) values (412,89);
+insert into t (id,a) values (412,90);
+insert into t (id,a) values (412,91);
+insert into t (id,a) values (412,92);
+insert into t (id,a) values (412,93);
+insert into t (id,a) values (412,94);
+insert into t (id,a) values (412,95);
+insert into t (id,a) values (412,96);
+insert into t (id,a) values (412,97);
+insert into t (id,a) values (412,98);
+insert into t (id,a) values (412,99);
+insert into t (id,a) values (413,0);
+insert into t (id,a) values (413,1);
+insert into t (id,a) values (413,2);
+insert into t (id,a) values (413,3);
+insert into t (id,a) values (413,4);
+insert into t (id,a) values (413,5);
+insert into t (id,a) values (413,6);
+insert into t (id,a) values (413,7);
+insert into t (id,a) values (413,8);
+insert into t (id,a) values (413,9);
+insert into t (id,a) values (413,10);
+insert into t (id,a) values (413,11);
+insert into t (id,a) values (413,12);
+insert into t (id,a) values (413,13);
+insert into t (id,a) values (413,14);
+insert into t (id,a) values (413,15);
+insert into t (id,a) values (413,16);
+insert into t (id,a) values (413,17);
+insert into t (id,a) values (413,18);
+insert into t (id,a) values (413,19);
+insert into t (id,a) values (413,20);
+insert into t (id,a) values (413,21);
+insert into t (id,a) values (413,22);
+insert into t (id,a) values (413,23);
+insert into t (id,a) values (413,24);
+insert into t (id,a) values (413,25);
+insert into t (id,a) values (413,26);
+insert into t (id,a) values (413,27);
+insert into t (id,a) values (413,28);
+insert into t (id,a) values (413,29);
+insert into t (id,a) values (413,30);
+insert into t (id,a) values (413,31);
+insert into t (id,a) values (413,32);
+insert into t (id,a) values (413,33);
+insert into t (id,a) values (413,34);
+insert into t (id,a) values (413,35);
+insert into t (id,a) values (413,36);
+insert into t (id,a) values (413,37);
+insert into t (id,a) values (413,38);
+insert into t (id,a) values (413,39);
+insert into t (id,a) values (413,40);
+insert into t (id,a) values (413,41);
+insert into t (id,a) values (413,42);
+insert into t (id,a) values (413,43);
+insert into t (id,a) values (413,44);
+insert into t (id,a) values (413,45);
+insert into t (id,a) values (413,46);
+insert into t (id,a) values (413,47);
+insert into t (id,a) values (413,48);
+insert into t (id,a) values (413,49);
+insert into t (id,a) values (413,50);
+insert into t (id,a) values (413,51);
+insert into t (id,a) values (413,52);
+insert into t (id,a) values (413,53);
+insert into t (id,a) values (413,54);
+insert into t (id,a) values (413,55);
+insert into t (id,a) values (413,56);
+insert into t (id,a) values (413,57);
+insert into t (id,a) values (413,58);
+insert into t (id,a) values (413,59);
+insert into t (id,a) values (413,60);
+insert into t (id,a) values (413,61);
+insert into t (id,a) values (413,62);
+insert into t (id,a) values (413,63);
+insert into t (id,a) values (413,64);
+insert into t (id,a) values (413,65);
+insert into t (id,a) values (413,66);
+insert into t (id,a) values (413,67);
+insert into t (id,a) values (413,68);
+insert into t (id,a) values (413,69);
+insert into t (id,a) values (413,70);
+insert into t (id,a) values (413,71);
+insert into t (id,a) values (413,72);
+insert into t (id,a) values (413,73);
+insert into t (id,a) values (413,74);
+insert into t (id,a) values (413,75);
+insert into t (id,a) values (413,76);
+insert into t (id,a) values (413,77);
+insert into t (id,a) values (413,78);
+insert into t (id,a) values (413,79);
+insert into t (id,a) values (413,80);
+insert into t (id,a) values (413,81);
+insert into t (id,a) values (413,82);
+insert into t (id,a) values (413,83);
+insert into t (id,a) values (413,84);
+insert into t (id,a) values (413,85);
+insert into t (id,a) values (413,86);
+insert into t (id,a) values (413,87);
+insert into t (id,a) values (413,88);
+insert into t (id,a) values (413,89);
+insert into t (id,a) values (413,90);
+insert into t (id,a) values (413,91);
+insert into t (id,a) values (413,92);
+insert into t (id,a) values (413,93);
+insert into t (id,a) values (413,94);
+insert into t (id,a) values (413,95);
+insert into t (id,a) values (413,96);
+insert into t (id,a) values (413,97);
+insert into t (id,a) values (413,98);
+insert into t (id,a) values (413,99);
+insert into t (id,a) values (414,0);
+insert into t (id,a) values (414,1);
+insert into t (id,a) values (414,2);
+insert into t (id,a) values (414,3);
+insert into t (id,a) values (414,4);
+insert into t (id,a) values (414,5);
+insert into t (id,a) values (414,6);
+insert into t (id,a) values (414,7);
+insert into t (id,a) values (414,8);
+insert into t (id,a) values (414,9);
+insert into t (id,a) values (414,10);
+insert into t (id,a) values (414,11);
+insert into t (id,a) values (414,12);
+insert into t (id,a) values (414,13);
+insert into t (id,a) values (414,14);
+insert into t (id,a) values (414,15);
+insert into t (id,a) values (414,16);
+insert into t (id,a) values (414,17);
+insert into t (id,a) values (414,18);
+insert into t (id,a) values (414,19);
+insert into t (id,a) values (414,20);
+insert into t (id,a) values (414,21);
+insert into t (id,a) values (414,22);
+insert into t (id,a) values (414,23);
+insert into t (id,a) values (414,24);
+insert into t (id,a) values (414,25);
+insert into t (id,a) values (414,26);
+insert into t (id,a) values (414,27);
+insert into t (id,a) values (414,28);
+insert into t (id,a) values (414,29);
+insert into t (id,a) values (414,30);
+insert into t (id,a) values (414,31);
+insert into t (id,a) values (414,32);
+insert into t (id,a) values (414,33);
+insert into t (id,a) values (414,34);
+insert into t (id,a) values (414,35);
+insert into t (id,a) values (414,36);
+insert into t (id,a) values (414,37);
+insert into t (id,a) values (414,38);
+insert into t (id,a) values (414,39);
+insert into t (id,a) values (414,40);
+insert into t (id,a) values (414,41);
+insert into t (id,a) values (414,42);
+insert into t (id,a) values (414,43);
+insert into t (id,a) values (414,44);
+insert into t (id,a) values (414,45);
+insert into t (id,a) values (414,46);
+insert into t (id,a) values (414,47);
+insert into t (id,a) values (414,48);
+insert into t (id,a) values (414,49);
+insert into t (id,a) values (414,50);
+insert into t (id,a) values (414,51);
+insert into t (id,a) values (414,52);
+insert into t (id,a) values (414,53);
+insert into t (id,a) values (414,54);
+insert into t (id,a) values (414,55);
+insert into t (id,a) values (414,56);
+insert into t (id,a) values (414,57);
+insert into t (id,a) values (414,58);
+insert into t (id,a) values (414,59);
+insert into t (id,a) values (414,60);
+insert into t (id,a) values (414,61);
+insert into t (id,a) values (414,62);
+insert into t (id,a) values (414,63);
+insert into t (id,a) values (414,64);
+insert into t (id,a) values (414,65);
+insert into t (id,a) values (414,66);
+insert into t (id,a) values (414,67);
+insert into t (id,a) values (414,68);
+insert into t (id,a) values (414,69);
+insert into t (id,a) values (414,70);
+insert into t (id,a) values (414,71);
+insert into t (id,a) values (414,72);
+insert into t (id,a) values (414,73);
+insert into t (id,a) values (414,74);
+insert into t (id,a) values (414,75);
+insert into t (id,a) values (414,76);
+insert into t (id,a) values (414,77);
+insert into t (id,a) values (414,78);
+insert into t (id,a) values (414,79);
+insert into t (id,a) values (414,80);
+insert into t (id,a) values (414,81);
+insert into t (id,a) values (414,82);
+insert into t (id,a) values (414,83);
+insert into t (id,a) values (414,84);
+insert into t (id,a) values (414,85);
+insert into t (id,a) values (414,86);
+insert into t (id,a) values (414,87);
+insert into t (id,a) values (414,88);
+insert into t (id,a) values (414,89);
+insert into t (id,a) values (414,90);
+insert into t (id,a) values (414,91);
+insert into t (id,a) values (414,92);
+insert into t (id,a) values (414,93);
+insert into t (id,a) values (414,94);
+insert into t (id,a) values (414,95);
+insert into t (id,a) values (414,96);
+insert into t (id,a) values (414,97);
+insert into t (id,a) values (414,98);
+insert into t (id,a) values (414,99);
+insert into t (id,a) values (415,0);
+insert into t (id,a) values (415,1);
+insert into t (id,a) values (415,2);
+insert into t (id,a) values (415,3);
+insert into t (id,a) values (415,4);
+insert into t (id,a) values (415,5);
+insert into t (id,a) values (415,6);
+insert into t (id,a) values (415,7);
+insert into t (id,a) values (415,8);
+insert into t (id,a) values (415,9);
+insert into t (id,a) values (415,10);
+insert into t (id,a) values (415,11);
+insert into t (id,a) values (415,12);
+insert into t (id,a) values (415,13);
+insert into t (id,a) values (415,14);
+insert into t (id,a) values (415,15);
+insert into t (id,a) values (415,16);
+insert into t (id,a) values (415,17);
+insert into t (id,a) values (415,18);
+insert into t (id,a) values (415,19);
+insert into t (id,a) values (415,20);
+insert into t (id,a) values (415,21);
+insert into t (id,a) values (415,22);
+insert into t (id,a) values (415,23);
+insert into t (id,a) values (415,24);
+insert into t (id,a) values (415,25);
+insert into t (id,a) values (415,26);
+insert into t (id,a) values (415,27);
+insert into t (id,a) values (415,28);
+insert into t (id,a) values (415,29);
+insert into t (id,a) values (415,30);
+insert into t (id,a) values (415,31);
+insert into t (id,a) values (415,32);
+insert into t (id,a) values (415,33);
+insert into t (id,a) values (415,34);
+insert into t (id,a) values (415,35);
+insert into t (id,a) values (415,36);
+insert into t (id,a) values (415,37);
+insert into t (id,a) values (415,38);
+insert into t (id,a) values (415,39);
+insert into t (id,a) values (415,40);
+insert into t (id,a) values (415,41);
+insert into t (id,a) values (415,42);
+insert into t (id,a) values (415,43);
+insert into t (id,a) values (415,44);
+insert into t (id,a) values (415,45);
+insert into t (id,a) values (415,46);
+insert into t (id,a) values (415,47);
+insert into t (id,a) values (415,48);
+insert into t (id,a) values (415,49);
+insert into t (id,a) values (415,50);
+insert into t (id,a) values (415,51);
+insert into t (id,a) values (415,52);
+insert into t (id,a) values (415,53);
+insert into t (id,a) values (415,54);
+insert into t (id,a) values (415,55);
+insert into t (id,a) values (415,56);
+insert into t (id,a) values (415,57);
+insert into t (id,a) values (415,58);
+insert into t (id,a) values (415,59);
+insert into t (id,a) values (415,60);
+insert into t (id,a) values (415,61);
+insert into t (id,a) values (415,62);
+insert into t (id,a) values (415,63);
+insert into t (id,a) values (415,64);
+insert into t (id,a) values (415,65);
+insert into t (id,a) values (415,66);
+insert into t (id,a) values (415,67);
+insert into t (id,a) values (415,68);
+insert into t (id,a) values (415,69);
+insert into t (id,a) values (415,70);
+insert into t (id,a) values (415,71);
+insert into t (id,a) values (415,72);
+insert into t (id,a) values (415,73);
+insert into t (id,a) values (415,74);
+insert into t (id,a) values (415,75);
+insert into t (id,a) values (415,76);
+insert into t (id,a) values (415,77);
+insert into t (id,a) values (415,78);
+insert into t (id,a) values (415,79);
+insert into t (id,a) values (415,80);
+insert into t (id,a) values (415,81);
+insert into t (id,a) values (415,82);
+insert into t (id,a) values (415,83);
+insert into t (id,a) values (415,84);
+insert into t (id,a) values (415,85);
+insert into t (id,a) values (415,86);
+insert into t (id,a) values (415,87);
+insert into t (id,a) values (415,88);
+insert into t (id,a) values (415,89);
+insert into t (id,a) values (415,90);
+insert into t (id,a) values (415,91);
+insert into t (id,a) values (415,92);
+insert into t (id,a) values (415,93);
+insert into t (id,a) values (415,94);
+insert into t (id,a) values (415,95);
+insert into t (id,a) values (415,96);
+insert into t (id,a) values (415,97);
+insert into t (id,a) values (415,98);
+insert into t (id,a) values (415,99);
+insert into t (id,a) values (416,0);
+insert into t (id,a) values (416,1);
+insert into t (id,a) values (416,2);
+insert into t (id,a) values (416,3);
+insert into t (id,a) values (416,4);
+insert into t (id,a) values (416,5);
+insert into t (id,a) values (416,6);
+insert into t (id,a) values (416,7);
+insert into t (id,a) values (416,8);
+insert into t (id,a) values (416,9);
+insert into t (id,a) values (416,10);
+insert into t (id,a) values (416,11);
+insert into t (id,a) values (416,12);
+insert into t (id,a) values (416,13);
+insert into t (id,a) values (416,14);
+insert into t (id,a) values (416,15);
+insert into t (id,a) values (416,16);
+insert into t (id,a) values (416,17);
+insert into t (id,a) values (416,18);
+insert into t (id,a) values (416,19);
+insert into t (id,a) values (416,20);
+insert into t (id,a) values (416,21);
+insert into t (id,a) values (416,22);
+insert into t (id,a) values (416,23);
+insert into t (id,a) values (416,24);
+insert into t (id,a) values (416,25);
+insert into t (id,a) values (416,26);
+insert into t (id,a) values (416,27);
+insert into t (id,a) values (416,28);
+insert into t (id,a) values (416,29);
+insert into t (id,a) values (416,30);
+insert into t (id,a) values (416,31);
+insert into t (id,a) values (416,32);
+insert into t (id,a) values (416,33);
+insert into t (id,a) values (416,34);
+insert into t (id,a) values (416,35);
+insert into t (id,a) values (416,36);
+insert into t (id,a) values (416,37);
+insert into t (id,a) values (416,38);
+insert into t (id,a) values (416,39);
+insert into t (id,a) values (416,40);
+insert into t (id,a) values (416,41);
+insert into t (id,a) values (416,42);
+insert into t (id,a) values (416,43);
+insert into t (id,a) values (416,44);
+insert into t (id,a) values (416,45);
+insert into t (id,a) values (416,46);
+insert into t (id,a) values (416,47);
+insert into t (id,a) values (416,48);
+insert into t (id,a) values (416,49);
+insert into t (id,a) values (416,50);
+insert into t (id,a) values (416,51);
+insert into t (id,a) values (416,52);
+insert into t (id,a) values (416,53);
+insert into t (id,a) values (416,54);
+insert into t (id,a) values (416,55);
+insert into t (id,a) values (416,56);
+insert into t (id,a) values (416,57);
+insert into t (id,a) values (416,58);
+insert into t (id,a) values (416,59);
+insert into t (id,a) values (416,60);
+insert into t (id,a) values (416,61);
+insert into t (id,a) values (416,62);
+insert into t (id,a) values (416,63);
+insert into t (id,a) values (416,64);
+insert into t (id,a) values (416,65);
+insert into t (id,a) values (416,66);
+insert into t (id,a) values (416,67);
+insert into t (id,a) values (416,68);
+insert into t (id,a) values (416,69);
+insert into t (id,a) values (416,70);
+insert into t (id,a) values (416,71);
+insert into t (id,a) values (416,72);
+insert into t (id,a) values (416,73);
+insert into t (id,a) values (416,74);
+insert into t (id,a) values (416,75);
+insert into t (id,a) values (416,76);
+insert into t (id,a) values (416,77);
+insert into t (id,a) values (416,78);
+insert into t (id,a) values (416,79);
+insert into t (id,a) values (416,80);
+insert into t (id,a) values (416,81);
+insert into t (id,a) values (416,82);
+insert into t (id,a) values (416,83);
+insert into t (id,a) values (416,84);
+insert into t (id,a) values (416,85);
+insert into t (id,a) values (416,86);
+insert into t (id,a) values (416,87);
+insert into t (id,a) values (416,88);
+insert into t (id,a) values (416,89);
+insert into t (id,a) values (416,90);
+insert into t (id,a) values (416,91);
+insert into t (id,a) values (416,92);
+insert into t (id,a) values (416,93);
+insert into t (id,a) values (416,94);
+insert into t (id,a) values (416,95);
+insert into t (id,a) values (416,96);
+insert into t (id,a) values (416,97);
+insert into t (id,a) values (416,98);
+insert into t (id,a) values (416,99);
+insert into t (id,a) values (417,0);
+insert into t (id,a) values (417,1);
+insert into t (id,a) values (417,2);
+insert into t (id,a) values (417,3);
+insert into t (id,a) values (417,4);
+insert into t (id,a) values (417,5);
+insert into t (id,a) values (417,6);
+insert into t (id,a) values (417,7);
+insert into t (id,a) values (417,8);
+insert into t (id,a) values (417,9);
+insert into t (id,a) values (417,10);
+insert into t (id,a) values (417,11);
+insert into t (id,a) values (417,12);
+insert into t (id,a) values (417,13);
+insert into t (id,a) values (417,14);
+insert into t (id,a) values (417,15);
+insert into t (id,a) values (417,16);
+insert into t (id,a) values (417,17);
+insert into t (id,a) values (417,18);
+insert into t (id,a) values (417,19);
+insert into t (id,a) values (417,20);
+insert into t (id,a) values (417,21);
+insert into t (id,a) values (417,22);
+insert into t (id,a) values (417,23);
+insert into t (id,a) values (417,24);
+insert into t (id,a) values (417,25);
+insert into t (id,a) values (417,26);
+insert into t (id,a) values (417,27);
+insert into t (id,a) values (417,28);
+insert into t (id,a) values (417,29);
+insert into t (id,a) values (417,30);
+insert into t (id,a) values (417,31);
+insert into t (id,a) values (417,32);
+insert into t (id,a) values (417,33);
+insert into t (id,a) values (417,34);
+insert into t (id,a) values (417,35);
+insert into t (id,a) values (417,36);
+insert into t (id,a) values (417,37);
+insert into t (id,a) values (417,38);
+insert into t (id,a) values (417,39);
+insert into t (id,a) values (417,40);
+insert into t (id,a) values (417,41);
+insert into t (id,a) values (417,42);
+insert into t (id,a) values (417,43);
+insert into t (id,a) values (417,44);
+insert into t (id,a) values (417,45);
+insert into t (id,a) values (417,46);
+insert into t (id,a) values (417,47);
+insert into t (id,a) values (417,48);
+insert into t (id,a) values (417,49);
+insert into t (id,a) values (417,50);
+insert into t (id,a) values (417,51);
+insert into t (id,a) values (417,52);
+insert into t (id,a) values (417,53);
+insert into t (id,a) values (417,54);
+insert into t (id,a) values (417,55);
+insert into t (id,a) values (417,56);
+insert into t (id,a) values (417,57);
+insert into t (id,a) values (417,58);
+insert into t (id,a) values (417,59);
+insert into t (id,a) values (417,60);
+insert into t (id,a) values (417,61);
+insert into t (id,a) values (417,62);
+insert into t (id,a) values (417,63);
+insert into t (id,a) values (417,64);
+insert into t (id,a) values (417,65);
+insert into t (id,a) values (417,66);
+insert into t (id,a) values (417,67);
+insert into t (id,a) values (417,68);
+insert into t (id,a) values (417,69);
+insert into t (id,a) values (417,70);
+insert into t (id,a) values (417,71);
+insert into t (id,a) values (417,72);
+insert into t (id,a) values (417,73);
+insert into t (id,a) values (417,74);
+insert into t (id,a) values (417,75);
+insert into t (id,a) values (417,76);
+insert into t (id,a) values (417,77);
+insert into t (id,a) values (417,78);
+insert into t (id,a) values (417,79);
+insert into t (id,a) values (417,80);
+insert into t (id,a) values (417,81);
+insert into t (id,a) values (417,82);
+insert into t (id,a) values (417,83);
+insert into t (id,a) values (417,84);
+insert into t (id,a) values (417,85);
+insert into t (id,a) values (417,86);
+insert into t (id,a) values (417,87);
+insert into t (id,a) values (417,88);
+insert into t (id,a) values (417,89);
+insert into t (id,a) values (417,90);
+insert into t (id,a) values (417,91);
+insert into t (id,a) values (417,92);
+insert into t (id,a) values (417,93);
+insert into t (id,a) values (417,94);
+insert into t (id,a) values (417,95);
+insert into t (id,a) values (417,96);
+insert into t (id,a) values (417,97);
+insert into t (id,a) values (417,98);
+insert into t (id,a) values (417,99);
+insert into t (id,a) values (418,0);
+insert into t (id,a) values (418,1);
+insert into t (id,a) values (418,2);
+insert into t (id,a) values (418,3);
+insert into t (id,a) values (418,4);
+insert into t (id,a) values (418,5);
+insert into t (id,a) values (418,6);
+insert into t (id,a) values (418,7);
+insert into t (id,a) values (418,8);
+insert into t (id,a) values (418,9);
+insert into t (id,a) values (418,10);
+insert into t (id,a) values (418,11);
+insert into t (id,a) values (418,12);
+insert into t (id,a) values (418,13);
+insert into t (id,a) values (418,14);
+insert into t (id,a) values (418,15);
+insert into t (id,a) values (418,16);
+insert into t (id,a) values (418,17);
+insert into t (id,a) values (418,18);
+insert into t (id,a) values (418,19);
+insert into t (id,a) values (418,20);
+insert into t (id,a) values (418,21);
+insert into t (id,a) values (418,22);
+insert into t (id,a) values (418,23);
+insert into t (id,a) values (418,24);
+insert into t (id,a) values (418,25);
+insert into t (id,a) values (418,26);
+insert into t (id,a) values (418,27);
+insert into t (id,a) values (418,28);
+insert into t (id,a) values (418,29);
+insert into t (id,a) values (418,30);
+insert into t (id,a) values (418,31);
+insert into t (id,a) values (418,32);
+insert into t (id,a) values (418,33);
+insert into t (id,a) values (418,34);
+insert into t (id,a) values (418,35);
+insert into t (id,a) values (418,36);
+insert into t (id,a) values (418,37);
+insert into t (id,a) values (418,38);
+insert into t (id,a) values (418,39);
+insert into t (id,a) values (418,40);
+insert into t (id,a) values (418,41);
+insert into t (id,a) values (418,42);
+insert into t (id,a) values (418,43);
+insert into t (id,a) values (418,44);
+insert into t (id,a) values (418,45);
+insert into t (id,a) values (418,46);
+insert into t (id,a) values (418,47);
+insert into t (id,a) values (418,48);
+insert into t (id,a) values (418,49);
+insert into t (id,a) values (418,50);
+insert into t (id,a) values (418,51);
+insert into t (id,a) values (418,52);
+insert into t (id,a) values (418,53);
+insert into t (id,a) values (418,54);
+insert into t (id,a) values (418,55);
+insert into t (id,a) values (418,56);
+insert into t (id,a) values (418,57);
+insert into t (id,a) values (418,58);
+insert into t (id,a) values (418,59);
+insert into t (id,a) values (418,60);
+insert into t (id,a) values (418,61);
+insert into t (id,a) values (418,62);
+insert into t (id,a) values (418,63);
+insert into t (id,a) values (418,64);
+insert into t (id,a) values (418,65);
+insert into t (id,a) values (418,66);
+insert into t (id,a) values (418,67);
+insert into t (id,a) values (418,68);
+insert into t (id,a) values (418,69);
+insert into t (id,a) values (418,70);
+insert into t (id,a) values (418,71);
+insert into t (id,a) values (418,72);
+insert into t (id,a) values (418,73);
+insert into t (id,a) values (418,74);
+insert into t (id,a) values (418,75);
+insert into t (id,a) values (418,76);
+insert into t (id,a) values (418,77);
+insert into t (id,a) values (418,78);
+insert into t (id,a) values (418,79);
+insert into t (id,a) values (418,80);
+insert into t (id,a) values (418,81);
+insert into t (id,a) values (418,82);
+insert into t (id,a) values (418,83);
+insert into t (id,a) values (418,84);
+insert into t (id,a) values (418,85);
+insert into t (id,a) values (418,86);
+insert into t (id,a) values (418,87);
+insert into t (id,a) values (418,88);
+insert into t (id,a) values (418,89);
+insert into t (id,a) values (418,90);
+insert into t (id,a) values (418,91);
+insert into t (id,a) values (418,92);
+insert into t (id,a) values (418,93);
+insert into t (id,a) values (418,94);
+insert into t (id,a) values (418,95);
+insert into t (id,a) values (418,96);
+insert into t (id,a) values (418,97);
+insert into t (id,a) values (418,98);
+insert into t (id,a) values (418,99);
+insert into t (id,a) values (419,0);
+insert into t (id,a) values (419,1);
+insert into t (id,a) values (419,2);
+insert into t (id,a) values (419,3);
+insert into t (id,a) values (419,4);
+insert into t (id,a) values (419,5);
+insert into t (id,a) values (419,6);
+insert into t (id,a) values (419,7);
+insert into t (id,a) values (419,8);
+insert into t (id,a) values (419,9);
+insert into t (id,a) values (419,10);
+insert into t (id,a) values (419,11);
+insert into t (id,a) values (419,12);
+insert into t (id,a) values (419,13);
+insert into t (id,a) values (419,14);
+insert into t (id,a) values (419,15);
+insert into t (id,a) values (419,16);
+insert into t (id,a) values (419,17);
+insert into t (id,a) values (419,18);
+insert into t (id,a) values (419,19);
+insert into t (id,a) values (419,20);
+insert into t (id,a) values (419,21);
+insert into t (id,a) values (419,22);
+insert into t (id,a) values (419,23);
+insert into t (id,a) values (419,24);
+insert into t (id,a) values (419,25);
+insert into t (id,a) values (419,26);
+insert into t (id,a) values (419,27);
+insert into t (id,a) values (419,28);
+insert into t (id,a) values (419,29);
+insert into t (id,a) values (419,30);
+insert into t (id,a) values (419,31);
+insert into t (id,a) values (419,32);
+insert into t (id,a) values (419,33);
+insert into t (id,a) values (419,34);
+insert into t (id,a) values (419,35);
+insert into t (id,a) values (419,36);
+insert into t (id,a) values (419,37);
+insert into t (id,a) values (419,38);
+insert into t (id,a) values (419,39);
+insert into t (id,a) values (419,40);
+insert into t (id,a) values (419,41);
+insert into t (id,a) values (419,42);
+insert into t (id,a) values (419,43);
+insert into t (id,a) values (419,44);
+insert into t (id,a) values (419,45);
+insert into t (id,a) values (419,46);
+insert into t (id,a) values (419,47);
+insert into t (id,a) values (419,48);
+insert into t (id,a) values (419,49);
+insert into t (id,a) values (419,50);
+insert into t (id,a) values (419,51);
+insert into t (id,a) values (419,52);
+insert into t (id,a) values (419,53);
+insert into t (id,a) values (419,54);
+insert into t (id,a) values (419,55);
+insert into t (id,a) values (419,56);
+insert into t (id,a) values (419,57);
+insert into t (id,a) values (419,58);
+insert into t (id,a) values (419,59);
+insert into t (id,a) values (419,60);
+insert into t (id,a) values (419,61);
+insert into t (id,a) values (419,62);
+insert into t (id,a) values (419,63);
+insert into t (id,a) values (419,64);
+insert into t (id,a) values (419,65);
+insert into t (id,a) values (419,66);
+insert into t (id,a) values (419,67);
+insert into t (id,a) values (419,68);
+insert into t (id,a) values (419,69);
+insert into t (id,a) values (419,70);
+insert into t (id,a) values (419,71);
+insert into t (id,a) values (419,72);
+insert into t (id,a) values (419,73);
+insert into t (id,a) values (419,74);
+insert into t (id,a) values (419,75);
+insert into t (id,a) values (419,76);
+insert into t (id,a) values (419,77);
+insert into t (id,a) values (419,78);
+insert into t (id,a) values (419,79);
+insert into t (id,a) values (419,80);
+insert into t (id,a) values (419,81);
+insert into t (id,a) values (419,82);
+insert into t (id,a) values (419,83);
+insert into t (id,a) values (419,84);
+insert into t (id,a) values (419,85);
+insert into t (id,a) values (419,86);
+insert into t (id,a) values (419,87);
+insert into t (id,a) values (419,88);
+insert into t (id,a) values (419,89);
+insert into t (id,a) values (419,90);
+insert into t (id,a) values (419,91);
+insert into t (id,a) values (419,92);
+insert into t (id,a) values (419,93);
+insert into t (id,a) values (419,94);
+insert into t (id,a) values (419,95);
+insert into t (id,a) values (419,96);
+insert into t (id,a) values (419,97);
+insert into t (id,a) values (419,98);
+insert into t (id,a) values (419,99);
+insert into t (id,a) values (420,0);
+insert into t (id,a) values (420,1);
+insert into t (id,a) values (420,2);
+insert into t (id,a) values (420,3);
+insert into t (id,a) values (420,4);
+insert into t (id,a) values (420,5);
+insert into t (id,a) values (420,6);
+insert into t (id,a) values (420,7);
+insert into t (id,a) values (420,8);
+insert into t (id,a) values (420,9);
+insert into t (id,a) values (420,10);
+insert into t (id,a) values (420,11);
+insert into t (id,a) values (420,12);
+insert into t (id,a) values (420,13);
+insert into t (id,a) values (420,14);
+insert into t (id,a) values (420,15);
+insert into t (id,a) values (420,16);
+insert into t (id,a) values (420,17);
+insert into t (id,a) values (420,18);
+insert into t (id,a) values (420,19);
+insert into t (id,a) values (420,20);
+insert into t (id,a) values (420,21);
+insert into t (id,a) values (420,22);
+insert into t (id,a) values (420,23);
+insert into t (id,a) values (420,24);
+insert into t (id,a) values (420,25);
+insert into t (id,a) values (420,26);
+insert into t (id,a) values (420,27);
+insert into t (id,a) values (420,28);
+insert into t (id,a) values (420,29);
+insert into t (id,a) values (420,30);
+insert into t (id,a) values (420,31);
+insert into t (id,a) values (420,32);
+insert into t (id,a) values (420,33);
+insert into t (id,a) values (420,34);
+insert into t (id,a) values (420,35);
+insert into t (id,a) values (420,36);
+insert into t (id,a) values (420,37);
+insert into t (id,a) values (420,38);
+insert into t (id,a) values (420,39);
+insert into t (id,a) values (420,40);
+insert into t (id,a) values (420,41);
+insert into t (id,a) values (420,42);
+insert into t (id,a) values (420,43);
+insert into t (id,a) values (420,44);
+insert into t (id,a) values (420,45);
+insert into t (id,a) values (420,46);
+insert into t (id,a) values (420,47);
+insert into t (id,a) values (420,48);
+insert into t (id,a) values (420,49);
+insert into t (id,a) values (420,50);
+insert into t (id,a) values (420,51);
+insert into t (id,a) values (420,52);
+insert into t (id,a) values (420,53);
+insert into t (id,a) values (420,54);
+insert into t (id,a) values (420,55);
+insert into t (id,a) values (420,56);
+insert into t (id,a) values (420,57);
+insert into t (id,a) values (420,58);
+insert into t (id,a) values (420,59);
+insert into t (id,a) values (420,60);
+insert into t (id,a) values (420,61);
+insert into t (id,a) values (420,62);
+insert into t (id,a) values (420,63);
+insert into t (id,a) values (420,64);
+insert into t (id,a) values (420,65);
+insert into t (id,a) values (420,66);
+insert into t (id,a) values (420,67);
+insert into t (id,a) values (420,68);
+insert into t (id,a) values (420,69);
+insert into t (id,a) values (420,70);
+insert into t (id,a) values (420,71);
+insert into t (id,a) values (420,72);
+insert into t (id,a) values (420,73);
+insert into t (id,a) values (420,74);
+insert into t (id,a) values (420,75);
+insert into t (id,a) values (420,76);
+insert into t (id,a) values (420,77);
+insert into t (id,a) values (420,78);
+insert into t (id,a) values (420,79);
+insert into t (id,a) values (420,80);
+insert into t (id,a) values (420,81);
+insert into t (id,a) values (420,82);
+insert into t (id,a) values (420,83);
+insert into t (id,a) values (420,84);
+insert into t (id,a) values (420,85);
+insert into t (id,a) values (420,86);
+insert into t (id,a) values (420,87);
+insert into t (id,a) values (420,88);
+insert into t (id,a) values (420,89);
+insert into t (id,a) values (420,90);
+insert into t (id,a) values (420,91);
+insert into t (id,a) values (420,92);
+insert into t (id,a) values (420,93);
+insert into t (id,a) values (420,94);
+insert into t (id,a) values (420,95);
+insert into t (id,a) values (420,96);
+insert into t (id,a) values (420,97);
+insert into t (id,a) values (420,98);
+insert into t (id,a) values (420,99);
+insert into t (id,a) values (421,0);
+insert into t (id,a) values (421,1);
+insert into t (id,a) values (421,2);
+insert into t (id,a) values (421,3);
+insert into t (id,a) values (421,4);
+insert into t (id,a) values (421,5);
+insert into t (id,a) values (421,6);
+insert into t (id,a) values (421,7);
+insert into t (id,a) values (421,8);
+insert into t (id,a) values (421,9);
+insert into t (id,a) values (421,10);
+insert into t (id,a) values (421,11);
+insert into t (id,a) values (421,12);
+insert into t (id,a) values (421,13);
+insert into t (id,a) values (421,14);
+insert into t (id,a) values (421,15);
+insert into t (id,a) values (421,16);
+insert into t (id,a) values (421,17);
+insert into t (id,a) values (421,18);
+insert into t (id,a) values (421,19);
+insert into t (id,a) values (421,20);
+insert into t (id,a) values (421,21);
+insert into t (id,a) values (421,22);
+insert into t (id,a) values (421,23);
+insert into t (id,a) values (421,24);
+insert into t (id,a) values (421,25);
+insert into t (id,a) values (421,26);
+insert into t (id,a) values (421,27);
+insert into t (id,a) values (421,28);
+insert into t (id,a) values (421,29);
+insert into t (id,a) values (421,30);
+insert into t (id,a) values (421,31);
+insert into t (id,a) values (421,32);
+insert into t (id,a) values (421,33);
+insert into t (id,a) values (421,34);
+insert into t (id,a) values (421,35);
+insert into t (id,a) values (421,36);
+insert into t (id,a) values (421,37);
+insert into t (id,a) values (421,38);
+insert into t (id,a) values (421,39);
+insert into t (id,a) values (421,40);
+insert into t (id,a) values (421,41);
+insert into t (id,a) values (421,42);
+insert into t (id,a) values (421,43);
+insert into t (id,a) values (421,44);
+insert into t (id,a) values (421,45);
+insert into t (id,a) values (421,46);
+insert into t (id,a) values (421,47);
+insert into t (id,a) values (421,48);
+insert into t (id,a) values (421,49);
+insert into t (id,a) values (421,50);
+insert into t (id,a) values (421,51);
+insert into t (id,a) values (421,52);
+insert into t (id,a) values (421,53);
+insert into t (id,a) values (421,54);
+insert into t (id,a) values (421,55);
+insert into t (id,a) values (421,56);
+insert into t (id,a) values (421,57);
+insert into t (id,a) values (421,58);
+insert into t (id,a) values (421,59);
+insert into t (id,a) values (421,60);
+insert into t (id,a) values (421,61);
+insert into t (id,a) values (421,62);
+insert into t (id,a) values (421,63);
+insert into t (id,a) values (421,64);
+insert into t (id,a) values (421,65);
+insert into t (id,a) values (421,66);
+insert into t (id,a) values (421,67);
+insert into t (id,a) values (421,68);
+insert into t (id,a) values (421,69);
+insert into t (id,a) values (421,70);
+insert into t (id,a) values (421,71);
+insert into t (id,a) values (421,72);
+insert into t (id,a) values (421,73);
+insert into t (id,a) values (421,74);
+insert into t (id,a) values (421,75);
+insert into t (id,a) values (421,76);
+insert into t (id,a) values (421,77);
+insert into t (id,a) values (421,78);
+insert into t (id,a) values (421,79);
+insert into t (id,a) values (421,80);
+insert into t (id,a) values (421,81);
+insert into t (id,a) values (421,82);
+insert into t (id,a) values (421,83);
+insert into t (id,a) values (421,84);
+insert into t (id,a) values (421,85);
+insert into t (id,a) values (421,86);
+insert into t (id,a) values (421,87);
+insert into t (id,a) values (421,88);
+insert into t (id,a) values (421,89);
+insert into t (id,a) values (421,90);
+insert into t (id,a) values (421,91);
+insert into t (id,a) values (421,92);
+insert into t (id,a) values (421,93);
+insert into t (id,a) values (421,94);
+insert into t (id,a) values (421,95);
+insert into t (id,a) values (421,96);
+insert into t (id,a) values (421,97);
+insert into t (id,a) values (421,98);
+insert into t (id,a) values (421,99);
+insert into t (id,a) values (422,0);
+insert into t (id,a) values (422,1);
+insert into t (id,a) values (422,2);
+insert into t (id,a) values (422,3);
+insert into t (id,a) values (422,4);
+insert into t (id,a) values (422,5);
+insert into t (id,a) values (422,6);
+insert into t (id,a) values (422,7);
+insert into t (id,a) values (422,8);
+insert into t (id,a) values (422,9);
+insert into t (id,a) values (422,10);
+insert into t (id,a) values (422,11);
+insert into t (id,a) values (422,12);
+insert into t (id,a) values (422,13);
+insert into t (id,a) values (422,14);
+insert into t (id,a) values (422,15);
+insert into t (id,a) values (422,16);
+insert into t (id,a) values (422,17);
+insert into t (id,a) values (422,18);
+insert into t (id,a) values (422,19);
+insert into t (id,a) values (422,20);
+insert into t (id,a) values (422,21);
+insert into t (id,a) values (422,22);
+insert into t (id,a) values (422,23);
+insert into t (id,a) values (422,24);
+insert into t (id,a) values (422,25);
+insert into t (id,a) values (422,26);
+insert into t (id,a) values (422,27);
+insert into t (id,a) values (422,28);
+insert into t (id,a) values (422,29);
+insert into t (id,a) values (422,30);
+insert into t (id,a) values (422,31);
+insert into t (id,a) values (422,32);
+insert into t (id,a) values (422,33);
+insert into t (id,a) values (422,34);
+insert into t (id,a) values (422,35);
+insert into t (id,a) values (422,36);
+insert into t (id,a) values (422,37);
+insert into t (id,a) values (422,38);
+insert into t (id,a) values (422,39);
+insert into t (id,a) values (422,40);
+insert into t (id,a) values (422,41);
+insert into t (id,a) values (422,42);
+insert into t (id,a) values (422,43);
+insert into t (id,a) values (422,44);
+insert into t (id,a) values (422,45);
+insert into t (id,a) values (422,46);
+insert into t (id,a) values (422,47);
+insert into t (id,a) values (422,48);
+insert into t (id,a) values (422,49);
+insert into t (id,a) values (422,50);
+insert into t (id,a) values (422,51);
+insert into t (id,a) values (422,52);
+insert into t (id,a) values (422,53);
+insert into t (id,a) values (422,54);
+insert into t (id,a) values (422,55);
+insert into t (id,a) values (422,56);
+insert into t (id,a) values (422,57);
+insert into t (id,a) values (422,58);
+insert into t (id,a) values (422,59);
+insert into t (id,a) values (422,60);
+insert into t (id,a) values (422,61);
+insert into t (id,a) values (422,62);
+insert into t (id,a) values (422,63);
+insert into t (id,a) values (422,64);
+insert into t (id,a) values (422,65);
+insert into t (id,a) values (422,66);
+insert into t (id,a) values (422,67);
+insert into t (id,a) values (422,68);
+insert into t (id,a) values (422,69);
+insert into t (id,a) values (422,70);
+insert into t (id,a) values (422,71);
+insert into t (id,a) values (422,72);
+insert into t (id,a) values (422,73);
+insert into t (id,a) values (422,74);
+insert into t (id,a) values (422,75);
+insert into t (id,a) values (422,76);
+insert into t (id,a) values (422,77);
+insert into t (id,a) values (422,78);
+insert into t (id,a) values (422,79);
+insert into t (id,a) values (422,80);
+insert into t (id,a) values (422,81);
+insert into t (id,a) values (422,82);
+insert into t (id,a) values (422,83);
+insert into t (id,a) values (422,84);
+insert into t (id,a) values (422,85);
+insert into t (id,a) values (422,86);
+insert into t (id,a) values (422,87);
+insert into t (id,a) values (422,88);
+insert into t (id,a) values (422,89);
+insert into t (id,a) values (422,90);
+insert into t (id,a) values (422,91);
+insert into t (id,a) values (422,92);
+insert into t (id,a) values (422,93);
+insert into t (id,a) values (422,94);
+insert into t (id,a) values (422,95);
+insert into t (id,a) values (422,96);
+insert into t (id,a) values (422,97);
+insert into t (id,a) values (422,98);
+insert into t (id,a) values (422,99);
+insert into t (id,a) values (423,0);
+insert into t (id,a) values (423,1);
+insert into t (id,a) values (423,2);
+insert into t (id,a) values (423,3);
+insert into t (id,a) values (423,4);
+insert into t (id,a) values (423,5);
+insert into t (id,a) values (423,6);
+insert into t (id,a) values (423,7);
+insert into t (id,a) values (423,8);
+insert into t (id,a) values (423,9);
+insert into t (id,a) values (423,10);
+insert into t (id,a) values (423,11);
+insert into t (id,a) values (423,12);
+insert into t (id,a) values (423,13);
+insert into t (id,a) values (423,14);
+insert into t (id,a) values (423,15);
+insert into t (id,a) values (423,16);
+insert into t (id,a) values (423,17);
+insert into t (id,a) values (423,18);
+insert into t (id,a) values (423,19);
+insert into t (id,a) values (423,20);
+insert into t (id,a) values (423,21);
+insert into t (id,a) values (423,22);
+insert into t (id,a) values (423,23);
+insert into t (id,a) values (423,24);
+insert into t (id,a) values (423,25);
+insert into t (id,a) values (423,26);
+insert into t (id,a) values (423,27);
+insert into t (id,a) values (423,28);
+insert into t (id,a) values (423,29);
+insert into t (id,a) values (423,30);
+insert into t (id,a) values (423,31);
+insert into t (id,a) values (423,32);
+insert into t (id,a) values (423,33);
+insert into t (id,a) values (423,34);
+insert into t (id,a) values (423,35);
+insert into t (id,a) values (423,36);
+insert into t (id,a) values (423,37);
+insert into t (id,a) values (423,38);
+insert into t (id,a) values (423,39);
+insert into t (id,a) values (423,40);
+insert into t (id,a) values (423,41);
+insert into t (id,a) values (423,42);
+insert into t (id,a) values (423,43);
+insert into t (id,a) values (423,44);
+insert into t (id,a) values (423,45);
+insert into t (id,a) values (423,46);
+insert into t (id,a) values (423,47);
+insert into t (id,a) values (423,48);
+insert into t (id,a) values (423,49);
+insert into t (id,a) values (423,50);
+insert into t (id,a) values (423,51);
+insert into t (id,a) values (423,52);
+insert into t (id,a) values (423,53);
+insert into t (id,a) values (423,54);
+insert into t (id,a) values (423,55);
+insert into t (id,a) values (423,56);
+insert into t (id,a) values (423,57);
+insert into t (id,a) values (423,58);
+insert into t (id,a) values (423,59);
+insert into t (id,a) values (423,60);
+insert into t (id,a) values (423,61);
+insert into t (id,a) values (423,62);
+insert into t (id,a) values (423,63);
+insert into t (id,a) values (423,64);
+insert into t (id,a) values (423,65);
+insert into t (id,a) values (423,66);
+insert into t (id,a) values (423,67);
+insert into t (id,a) values (423,68);
+insert into t (id,a) values (423,69);
+insert into t (id,a) values (423,70);
+insert into t (id,a) values (423,71);
+insert into t (id,a) values (423,72);
+insert into t (id,a) values (423,73);
+insert into t (id,a) values (423,74);
+insert into t (id,a) values (423,75);
+insert into t (id,a) values (423,76);
+insert into t (id,a) values (423,77);
+insert into t (id,a) values (423,78);
+insert into t (id,a) values (423,79);
+insert into t (id,a) values (423,80);
+insert into t (id,a) values (423,81);
+insert into t (id,a) values (423,82);
+insert into t (id,a) values (423,83);
+insert into t (id,a) values (423,84);
+insert into t (id,a) values (423,85);
+insert into t (id,a) values (423,86);
+insert into t (id,a) values (423,87);
+insert into t (id,a) values (423,88);
+insert into t (id,a) values (423,89);
+insert into t (id,a) values (423,90);
+insert into t (id,a) values (423,91);
+insert into t (id,a) values (423,92);
+insert into t (id,a) values (423,93);
+insert into t (id,a) values (423,94);
+insert into t (id,a) values (423,95);
+insert into t (id,a) values (423,96);
+insert into t (id,a) values (423,97);
+insert into t (id,a) values (423,98);
+insert into t (id,a) values (423,99);
+insert into t (id,a) values (424,0);
+insert into t (id,a) values (424,1);
+insert into t (id,a) values (424,2);
+insert into t (id,a) values (424,3);
+insert into t (id,a) values (424,4);
+insert into t (id,a) values (424,5);
+insert into t (id,a) values (424,6);
+insert into t (id,a) values (424,7);
+insert into t (id,a) values (424,8);
+insert into t (id,a) values (424,9);
+insert into t (id,a) values (424,10);
+insert into t (id,a) values (424,11);
+insert into t (id,a) values (424,12);
+insert into t (id,a) values (424,13);
+insert into t (id,a) values (424,14);
+insert into t (id,a) values (424,15);
+insert into t (id,a) values (424,16);
+insert into t (id,a) values (424,17);
+insert into t (id,a) values (424,18);
+insert into t (id,a) values (424,19);
+insert into t (id,a) values (424,20);
+insert into t (id,a) values (424,21);
+insert into t (id,a) values (424,22);
+insert into t (id,a) values (424,23);
+insert into t (id,a) values (424,24);
+insert into t (id,a) values (424,25);
+insert into t (id,a) values (424,26);
+insert into t (id,a) values (424,27);
+insert into t (id,a) values (424,28);
+insert into t (id,a) values (424,29);
+insert into t (id,a) values (424,30);
+insert into t (id,a) values (424,31);
+insert into t (id,a) values (424,32);
+insert into t (id,a) values (424,33);
+insert into t (id,a) values (424,34);
+insert into t (id,a) values (424,35);
+insert into t (id,a) values (424,36);
+insert into t (id,a) values (424,37);
+insert into t (id,a) values (424,38);
+insert into t (id,a) values (424,39);
+insert into t (id,a) values (424,40);
+insert into t (id,a) values (424,41);
+insert into t (id,a) values (424,42);
+insert into t (id,a) values (424,43);
+insert into t (id,a) values (424,44);
+insert into t (id,a) values (424,45);
+insert into t (id,a) values (424,46);
+insert into t (id,a) values (424,47);
+insert into t (id,a) values (424,48);
+insert into t (id,a) values (424,49);
+insert into t (id,a) values (424,50);
+insert into t (id,a) values (424,51);
+insert into t (id,a) values (424,52);
+insert into t (id,a) values (424,53);
+insert into t (id,a) values (424,54);
+insert into t (id,a) values (424,55);
+insert into t (id,a) values (424,56);
+insert into t (id,a) values (424,57);
+insert into t (id,a) values (424,58);
+insert into t (id,a) values (424,59);
+insert into t (id,a) values (424,60);
+insert into t (id,a) values (424,61);
+insert into t (id,a) values (424,62);
+insert into t (id,a) values (424,63);
+insert into t (id,a) values (424,64);
+insert into t (id,a) values (424,65);
+insert into t (id,a) values (424,66);
+insert into t (id,a) values (424,67);
+insert into t (id,a) values (424,68);
+insert into t (id,a) values (424,69);
+insert into t (id,a) values (424,70);
+insert into t (id,a) values (424,71);
+insert into t (id,a) values (424,72);
+insert into t (id,a) values (424,73);
+insert into t (id,a) values (424,74);
+insert into t (id,a) values (424,75);
+insert into t (id,a) values (424,76);
+insert into t (id,a) values (424,77);
+insert into t (id,a) values (424,78);
+insert into t (id,a) values (424,79);
+insert into t (id,a) values (424,80);
+insert into t (id,a) values (424,81);
+insert into t (id,a) values (424,82);
+insert into t (id,a) values (424,83);
+insert into t (id,a) values (424,84);
+insert into t (id,a) values (424,85);
+insert into t (id,a) values (424,86);
+insert into t (id,a) values (424,87);
+insert into t (id,a) values (424,88);
+insert into t (id,a) values (424,89);
+insert into t (id,a) values (424,90);
+insert into t (id,a) values (424,91);
+insert into t (id,a) values (424,92);
+insert into t (id,a) values (424,93);
+insert into t (id,a) values (424,94);
+insert into t (id,a) values (424,95);
+insert into t (id,a) values (424,96);
+insert into t (id,a) values (424,97);
+insert into t (id,a) values (424,98);
+insert into t (id,a) values (424,99);
+insert into t (id,a) values (425,0);
+insert into t (id,a) values (425,1);
+insert into t (id,a) values (425,2);
+insert into t (id,a) values (425,3);
+insert into t (id,a) values (425,4);
+insert into t (id,a) values (425,5);
+insert into t (id,a) values (425,6);
+insert into t (id,a) values (425,7);
+insert into t (id,a) values (425,8);
+insert into t (id,a) values (425,9);
+insert into t (id,a) values (425,10);
+insert into t (id,a) values (425,11);
+insert into t (id,a) values (425,12);
+insert into t (id,a) values (425,13);
+insert into t (id,a) values (425,14);
+insert into t (id,a) values (425,15);
+insert into t (id,a) values (425,16);
+insert into t (id,a) values (425,17);
+insert into t (id,a) values (425,18);
+insert into t (id,a) values (425,19);
+insert into t (id,a) values (425,20);
+insert into t (id,a) values (425,21);
+insert into t (id,a) values (425,22);
+insert into t (id,a) values (425,23);
+insert into t (id,a) values (425,24);
+insert into t (id,a) values (425,25);
+insert into t (id,a) values (425,26);
+insert into t (id,a) values (425,27);
+insert into t (id,a) values (425,28);
+insert into t (id,a) values (425,29);
+insert into t (id,a) values (425,30);
+insert into t (id,a) values (425,31);
+insert into t (id,a) values (425,32);
+insert into t (id,a) values (425,33);
+insert into t (id,a) values (425,34);
+insert into t (id,a) values (425,35);
+insert into t (id,a) values (425,36);
+insert into t (id,a) values (425,37);
+insert into t (id,a) values (425,38);
+insert into t (id,a) values (425,39);
+insert into t (id,a) values (425,40);
+insert into t (id,a) values (425,41);
+insert into t (id,a) values (425,42);
+insert into t (id,a) values (425,43);
+insert into t (id,a) values (425,44);
+insert into t (id,a) values (425,45);
+insert into t (id,a) values (425,46);
+insert into t (id,a) values (425,47);
+insert into t (id,a) values (425,48);
+insert into t (id,a) values (425,49);
+insert into t (id,a) values (425,50);
+insert into t (id,a) values (425,51);
+insert into t (id,a) values (425,52);
+insert into t (id,a) values (425,53);
+insert into t (id,a) values (425,54);
+insert into t (id,a) values (425,55);
+insert into t (id,a) values (425,56);
+insert into t (id,a) values (425,57);
+insert into t (id,a) values (425,58);
+insert into t (id,a) values (425,59);
+insert into t (id,a) values (425,60);
+insert into t (id,a) values (425,61);
+insert into t (id,a) values (425,62);
+insert into t (id,a) values (425,63);
+insert into t (id,a) values (425,64);
+insert into t (id,a) values (425,65);
+insert into t (id,a) values (425,66);
+insert into t (id,a) values (425,67);
+insert into t (id,a) values (425,68);
+insert into t (id,a) values (425,69);
+insert into t (id,a) values (425,70);
+insert into t (id,a) values (425,71);
+insert into t (id,a) values (425,72);
+insert into t (id,a) values (425,73);
+insert into t (id,a) values (425,74);
+insert into t (id,a) values (425,75);
+insert into t (id,a) values (425,76);
+insert into t (id,a) values (425,77);
+insert into t (id,a) values (425,78);
+insert into t (id,a) values (425,79);
+insert into t (id,a) values (425,80);
+insert into t (id,a) values (425,81);
+insert into t (id,a) values (425,82);
+insert into t (id,a) values (425,83);
+insert into t (id,a) values (425,84);
+insert into t (id,a) values (425,85);
+insert into t (id,a) values (425,86);
+insert into t (id,a) values (425,87);
+insert into t (id,a) values (425,88);
+insert into t (id,a) values (425,89);
+insert into t (id,a) values (425,90);
+insert into t (id,a) values (425,91);
+insert into t (id,a) values (425,92);
+insert into t (id,a) values (425,93);
+insert into t (id,a) values (425,94);
+insert into t (id,a) values (425,95);
+insert into t (id,a) values (425,96);
+insert into t (id,a) values (425,97);
+insert into t (id,a) values (425,98);
+insert into t (id,a) values (425,99);
+insert into t (id,a) values (426,0);
+insert into t (id,a) values (426,1);
+insert into t (id,a) values (426,2);
+insert into t (id,a) values (426,3);
+insert into t (id,a) values (426,4);
+insert into t (id,a) values (426,5);
+insert into t (id,a) values (426,6);
+insert into t (id,a) values (426,7);
+insert into t (id,a) values (426,8);
+insert into t (id,a) values (426,9);
+insert into t (id,a) values (426,10);
+insert into t (id,a) values (426,11);
+insert into t (id,a) values (426,12);
+insert into t (id,a) values (426,13);
+insert into t (id,a) values (426,14);
+insert into t (id,a) values (426,15);
+insert into t (id,a) values (426,16);
+insert into t (id,a) values (426,17);
+insert into t (id,a) values (426,18);
+insert into t (id,a) values (426,19);
+insert into t (id,a) values (426,20);
+insert into t (id,a) values (426,21);
+insert into t (id,a) values (426,22);
+insert into t (id,a) values (426,23);
+insert into t (id,a) values (426,24);
+insert into t (id,a) values (426,25);
+insert into t (id,a) values (426,26);
+insert into t (id,a) values (426,27);
+insert into t (id,a) values (426,28);
+insert into t (id,a) values (426,29);
+insert into t (id,a) values (426,30);
+insert into t (id,a) values (426,31);
+insert into t (id,a) values (426,32);
+insert into t (id,a) values (426,33);
+insert into t (id,a) values (426,34);
+insert into t (id,a) values (426,35);
+insert into t (id,a) values (426,36);
+insert into t (id,a) values (426,37);
+insert into t (id,a) values (426,38);
+insert into t (id,a) values (426,39);
+insert into t (id,a) values (426,40);
+insert into t (id,a) values (426,41);
+insert into t (id,a) values (426,42);
+insert into t (id,a) values (426,43);
+insert into t (id,a) values (426,44);
+insert into t (id,a) values (426,45);
+insert into t (id,a) values (426,46);
+insert into t (id,a) values (426,47);
+insert into t (id,a) values (426,48);
+insert into t (id,a) values (426,49);
+insert into t (id,a) values (426,50);
+insert into t (id,a) values (426,51);
+insert into t (id,a) values (426,52);
+insert into t (id,a) values (426,53);
+insert into t (id,a) values (426,54);
+insert into t (id,a) values (426,55);
+insert into t (id,a) values (426,56);
+insert into t (id,a) values (426,57);
+insert into t (id,a) values (426,58);
+insert into t (id,a) values (426,59);
+insert into t (id,a) values (426,60);
+insert into t (id,a) values (426,61);
+insert into t (id,a) values (426,62);
+insert into t (id,a) values (426,63);
+insert into t (id,a) values (426,64);
+insert into t (id,a) values (426,65);
+insert into t (id,a) values (426,66);
+insert into t (id,a) values (426,67);
+insert into t (id,a) values (426,68);
+insert into t (id,a) values (426,69);
+insert into t (id,a) values (426,70);
+insert into t (id,a) values (426,71);
+insert into t (id,a) values (426,72);
+insert into t (id,a) values (426,73);
+insert into t (id,a) values (426,74);
+insert into t (id,a) values (426,75);
+insert into t (id,a) values (426,76);
+insert into t (id,a) values (426,77);
+insert into t (id,a) values (426,78);
+insert into t (id,a) values (426,79);
+insert into t (id,a) values (426,80);
+insert into t (id,a) values (426,81);
+insert into t (id,a) values (426,82);
+insert into t (id,a) values (426,83);
+insert into t (id,a) values (426,84);
+insert into t (id,a) values (426,85);
+insert into t (id,a) values (426,86);
+insert into t (id,a) values (426,87);
+insert into t (id,a) values (426,88);
+insert into t (id,a) values (426,89);
+insert into t (id,a) values (426,90);
+insert into t (id,a) values (426,91);
+insert into t (id,a) values (426,92);
+insert into t (id,a) values (426,93);
+insert into t (id,a) values (426,94);
+insert into t (id,a) values (426,95);
+insert into t (id,a) values (426,96);
+insert into t (id,a) values (426,97);
+insert into t (id,a) values (426,98);
+insert into t (id,a) values (426,99);
+insert into t (id,a) values (427,0);
+insert into t (id,a) values (427,1);
+insert into t (id,a) values (427,2);
+insert into t (id,a) values (427,3);
+insert into t (id,a) values (427,4);
+insert into t (id,a) values (427,5);
+insert into t (id,a) values (427,6);
+insert into t (id,a) values (427,7);
+insert into t (id,a) values (427,8);
+insert into t (id,a) values (427,9);
+insert into t (id,a) values (427,10);
+insert into t (id,a) values (427,11);
+insert into t (id,a) values (427,12);
+insert into t (id,a) values (427,13);
+insert into t (id,a) values (427,14);
+insert into t (id,a) values (427,15);
+insert into t (id,a) values (427,16);
+insert into t (id,a) values (427,17);
+insert into t (id,a) values (427,18);
+insert into t (id,a) values (427,19);
+insert into t (id,a) values (427,20);
+insert into t (id,a) values (427,21);
+insert into t (id,a) values (427,22);
+insert into t (id,a) values (427,23);
+insert into t (id,a) values (427,24);
+insert into t (id,a) values (427,25);
+insert into t (id,a) values (427,26);
+insert into t (id,a) values (427,27);
+insert into t (id,a) values (427,28);
+insert into t (id,a) values (427,29);
+insert into t (id,a) values (427,30);
+insert into t (id,a) values (427,31);
+insert into t (id,a) values (427,32);
+insert into t (id,a) values (427,33);
+insert into t (id,a) values (427,34);
+insert into t (id,a) values (427,35);
+insert into t (id,a) values (427,36);
+insert into t (id,a) values (427,37);
+insert into t (id,a) values (427,38);
+insert into t (id,a) values (427,39);
+insert into t (id,a) values (427,40);
+insert into t (id,a) values (427,41);
+insert into t (id,a) values (427,42);
+insert into t (id,a) values (427,43);
+insert into t (id,a) values (427,44);
+insert into t (id,a) values (427,45);
+insert into t (id,a) values (427,46);
+insert into t (id,a) values (427,47);
+insert into t (id,a) values (427,48);
+insert into t (id,a) values (427,49);
+insert into t (id,a) values (427,50);
+insert into t (id,a) values (427,51);
+insert into t (id,a) values (427,52);
+insert into t (id,a) values (427,53);
+insert into t (id,a) values (427,54);
+insert into t (id,a) values (427,55);
+insert into t (id,a) values (427,56);
+insert into t (id,a) values (427,57);
+insert into t (id,a) values (427,58);
+insert into t (id,a) values (427,59);
+insert into t (id,a) values (427,60);
+insert into t (id,a) values (427,61);
+insert into t (id,a) values (427,62);
+insert into t (id,a) values (427,63);
+insert into t (id,a) values (427,64);
+insert into t (id,a) values (427,65);
+insert into t (id,a) values (427,66);
+insert into t (id,a) values (427,67);
+insert into t (id,a) values (427,68);
+insert into t (id,a) values (427,69);
+insert into t (id,a) values (427,70);
+insert into t (id,a) values (427,71);
+insert into t (id,a) values (427,72);
+insert into t (id,a) values (427,73);
+insert into t (id,a) values (427,74);
+insert into t (id,a) values (427,75);
+insert into t (id,a) values (427,76);
+insert into t (id,a) values (427,77);
+insert into t (id,a) values (427,78);
+insert into t (id,a) values (427,79);
+insert into t (id,a) values (427,80);
+insert into t (id,a) values (427,81);
+insert into t (id,a) values (427,82);
+insert into t (id,a) values (427,83);
+insert into t (id,a) values (427,84);
+insert into t (id,a) values (427,85);
+insert into t (id,a) values (427,86);
+insert into t (id,a) values (427,87);
+insert into t (id,a) values (427,88);
+insert into t (id,a) values (427,89);
+insert into t (id,a) values (427,90);
+insert into t (id,a) values (427,91);
+insert into t (id,a) values (427,92);
+insert into t (id,a) values (427,93);
+insert into t (id,a) values (427,94);
+insert into t (id,a) values (427,95);
+insert into t (id,a) values (427,96);
+insert into t (id,a) values (427,97);
+insert into t (id,a) values (427,98);
+insert into t (id,a) values (427,99);
+insert into t (id,a) values (428,0);
+insert into t (id,a) values (428,1);
+insert into t (id,a) values (428,2);
+insert into t (id,a) values (428,3);
+insert into t (id,a) values (428,4);
+insert into t (id,a) values (428,5);
+insert into t (id,a) values (428,6);
+insert into t (id,a) values (428,7);
+insert into t (id,a) values (428,8);
+insert into t (id,a) values (428,9);
+insert into t (id,a) values (428,10);
+insert into t (id,a) values (428,11);
+insert into t (id,a) values (428,12);
+insert into t (id,a) values (428,13);
+insert into t (id,a) values (428,14);
+insert into t (id,a) values (428,15);
+insert into t (id,a) values (428,16);
+insert into t (id,a) values (428,17);
+insert into t (id,a) values (428,18);
+insert into t (id,a) values (428,19);
+insert into t (id,a) values (428,20);
+insert into t (id,a) values (428,21);
+insert into t (id,a) values (428,22);
+insert into t (id,a) values (428,23);
+insert into t (id,a) values (428,24);
+insert into t (id,a) values (428,25);
+insert into t (id,a) values (428,26);
+insert into t (id,a) values (428,27);
+insert into t (id,a) values (428,28);
+insert into t (id,a) values (428,29);
+insert into t (id,a) values (428,30);
+insert into t (id,a) values (428,31);
+insert into t (id,a) values (428,32);
+insert into t (id,a) values (428,33);
+insert into t (id,a) values (428,34);
+insert into t (id,a) values (428,35);
+insert into t (id,a) values (428,36);
+insert into t (id,a) values (428,37);
+insert into t (id,a) values (428,38);
+insert into t (id,a) values (428,39);
+insert into t (id,a) values (428,40);
+insert into t (id,a) values (428,41);
+insert into t (id,a) values (428,42);
+insert into t (id,a) values (428,43);
+insert into t (id,a) values (428,44);
+insert into t (id,a) values (428,45);
+insert into t (id,a) values (428,46);
+insert into t (id,a) values (428,47);
+insert into t (id,a) values (428,48);
+insert into t (id,a) values (428,49);
+insert into t (id,a) values (428,50);
+insert into t (id,a) values (428,51);
+insert into t (id,a) values (428,52);
+insert into t (id,a) values (428,53);
+insert into t (id,a) values (428,54);
+insert into t (id,a) values (428,55);
+insert into t (id,a) values (428,56);
+insert into t (id,a) values (428,57);
+insert into t (id,a) values (428,58);
+insert into t (id,a) values (428,59);
+insert into t (id,a) values (428,60);
+insert into t (id,a) values (428,61);
+insert into t (id,a) values (428,62);
+insert into t (id,a) values (428,63);
+insert into t (id,a) values (428,64);
+insert into t (id,a) values (428,65);
+insert into t (id,a) values (428,66);
+insert into t (id,a) values (428,67);
+insert into t (id,a) values (428,68);
+insert into t (id,a) values (428,69);
+insert into t (id,a) values (428,70);
+insert into t (id,a) values (428,71);
+insert into t (id,a) values (428,72);
+insert into t (id,a) values (428,73);
+insert into t (id,a) values (428,74);
+insert into t (id,a) values (428,75);
+insert into t (id,a) values (428,76);
+insert into t (id,a) values (428,77);
+insert into t (id,a) values (428,78);
+insert into t (id,a) values (428,79);
+insert into t (id,a) values (428,80);
+insert into t (id,a) values (428,81);
+insert into t (id,a) values (428,82);
+insert into t (id,a) values (428,83);
+insert into t (id,a) values (428,84);
+insert into t (id,a) values (428,85);
+insert into t (id,a) values (428,86);
+insert into t (id,a) values (428,87);
+insert into t (id,a) values (428,88);
+insert into t (id,a) values (428,89);
+insert into t (id,a) values (428,90);
+insert into t (id,a) values (428,91);
+insert into t (id,a) values (428,92);
+insert into t (id,a) values (428,93);
+insert into t (id,a) values (428,94);
+insert into t (id,a) values (428,95);
+insert into t (id,a) values (428,96);
+insert into t (id,a) values (428,97);
+insert into t (id,a) values (428,98);
+insert into t (id,a) values (428,99);
+insert into t (id,a) values (429,0);
+insert into t (id,a) values (429,1);
+insert into t (id,a) values (429,2);
+insert into t (id,a) values (429,3);
+insert into t (id,a) values (429,4);
+insert into t (id,a) values (429,5);
+insert into t (id,a) values (429,6);
+insert into t (id,a) values (429,7);
+insert into t (id,a) values (429,8);
+insert into t (id,a) values (429,9);
+insert into t (id,a) values (429,10);
+insert into t (id,a) values (429,11);
+insert into t (id,a) values (429,12);
+insert into t (id,a) values (429,13);
+insert into t (id,a) values (429,14);
+insert into t (id,a) values (429,15);
+insert into t (id,a) values (429,16);
+insert into t (id,a) values (429,17);
+insert into t (id,a) values (429,18);
+insert into t (id,a) values (429,19);
+insert into t (id,a) values (429,20);
+insert into t (id,a) values (429,21);
+insert into t (id,a) values (429,22);
+insert into t (id,a) values (429,23);
+insert into t (id,a) values (429,24);
+insert into t (id,a) values (429,25);
+insert into t (id,a) values (429,26);
+insert into t (id,a) values (429,27);
+insert into t (id,a) values (429,28);
+insert into t (id,a) values (429,29);
+insert into t (id,a) values (429,30);
+insert into t (id,a) values (429,31);
+insert into t (id,a) values (429,32);
+insert into t (id,a) values (429,33);
+insert into t (id,a) values (429,34);
+insert into t (id,a) values (429,35);
+insert into t (id,a) values (429,36);
+insert into t (id,a) values (429,37);
+insert into t (id,a) values (429,38);
+insert into t (id,a) values (429,39);
+insert into t (id,a) values (429,40);
+insert into t (id,a) values (429,41);
+insert into t (id,a) values (429,42);
+insert into t (id,a) values (429,43);
+insert into t (id,a) values (429,44);
+insert into t (id,a) values (429,45);
+insert into t (id,a) values (429,46);
+insert into t (id,a) values (429,47);
+insert into t (id,a) values (429,48);
+insert into t (id,a) values (429,49);
+insert into t (id,a) values (429,50);
+insert into t (id,a) values (429,51);
+insert into t (id,a) values (429,52);
+insert into t (id,a) values (429,53);
+insert into t (id,a) values (429,54);
+insert into t (id,a) values (429,55);
+insert into t (id,a) values (429,56);
+insert into t (id,a) values (429,57);
+insert into t (id,a) values (429,58);
+insert into t (id,a) values (429,59);
+insert into t (id,a) values (429,60);
+insert into t (id,a) values (429,61);
+insert into t (id,a) values (429,62);
+insert into t (id,a) values (429,63);
+insert into t (id,a) values (429,64);
+insert into t (id,a) values (429,65);
+insert into t (id,a) values (429,66);
+insert into t (id,a) values (429,67);
+insert into t (id,a) values (429,68);
+insert into t (id,a) values (429,69);
+insert into t (id,a) values (429,70);
+insert into t (id,a) values (429,71);
+insert into t (id,a) values (429,72);
+insert into t (id,a) values (429,73);
+insert into t (id,a) values (429,74);
+insert into t (id,a) values (429,75);
+insert into t (id,a) values (429,76);
+insert into t (id,a) values (429,77);
+insert into t (id,a) values (429,78);
+insert into t (id,a) values (429,79);
+insert into t (id,a) values (429,80);
+insert into t (id,a) values (429,81);
+insert into t (id,a) values (429,82);
+insert into t (id,a) values (429,83);
+insert into t (id,a) values (429,84);
+insert into t (id,a) values (429,85);
+insert into t (id,a) values (429,86);
+insert into t (id,a) values (429,87);
+insert into t (id,a) values (429,88);
+insert into t (id,a) values (429,89);
+insert into t (id,a) values (429,90);
+insert into t (id,a) values (429,91);
+insert into t (id,a) values (429,92);
+insert into t (id,a) values (429,93);
+insert into t (id,a) values (429,94);
+insert into t (id,a) values (429,95);
+insert into t (id,a) values (429,96);
+insert into t (id,a) values (429,97);
+insert into t (id,a) values (429,98);
+insert into t (id,a) values (429,99);
+insert into t (id,a) values (430,0);
+insert into t (id,a) values (430,1);
+insert into t (id,a) values (430,2);
+insert into t (id,a) values (430,3);
+insert into t (id,a) values (430,4);
+insert into t (id,a) values (430,5);
+insert into t (id,a) values (430,6);
+insert into t (id,a) values (430,7);
+insert into t (id,a) values (430,8);
+insert into t (id,a) values (430,9);
+insert into t (id,a) values (430,10);
+insert into t (id,a) values (430,11);
+insert into t (id,a) values (430,12);
+insert into t (id,a) values (430,13);
+insert into t (id,a) values (430,14);
+insert into t (id,a) values (430,15);
+insert into t (id,a) values (430,16);
+insert into t (id,a) values (430,17);
+insert into t (id,a) values (430,18);
+insert into t (id,a) values (430,19);
+insert into t (id,a) values (430,20);
+insert into t (id,a) values (430,21);
+insert into t (id,a) values (430,22);
+insert into t (id,a) values (430,23);
+insert into t (id,a) values (430,24);
+insert into t (id,a) values (430,25);
+insert into t (id,a) values (430,26);
+insert into t (id,a) values (430,27);
+insert into t (id,a) values (430,28);
+insert into t (id,a) values (430,29);
+insert into t (id,a) values (430,30);
+insert into t (id,a) values (430,31);
+insert into t (id,a) values (430,32);
+insert into t (id,a) values (430,33);
+insert into t (id,a) values (430,34);
+insert into t (id,a) values (430,35);
+insert into t (id,a) values (430,36);
+insert into t (id,a) values (430,37);
+insert into t (id,a) values (430,38);
+insert into t (id,a) values (430,39);
+insert into t (id,a) values (430,40);
+insert into t (id,a) values (430,41);
+insert into t (id,a) values (430,42);
+insert into t (id,a) values (430,43);
+insert into t (id,a) values (430,44);
+insert into t (id,a) values (430,45);
+insert into t (id,a) values (430,46);
+insert into t (id,a) values (430,47);
+insert into t (id,a) values (430,48);
+insert into t (id,a) values (430,49);
+insert into t (id,a) values (430,50);
+insert into t (id,a) values (430,51);
+insert into t (id,a) values (430,52);
+insert into t (id,a) values (430,53);
+insert into t (id,a) values (430,54);
+insert into t (id,a) values (430,55);
+insert into t (id,a) values (430,56);
+insert into t (id,a) values (430,57);
+insert into t (id,a) values (430,58);
+insert into t (id,a) values (430,59);
+insert into t (id,a) values (430,60);
+insert into t (id,a) values (430,61);
+insert into t (id,a) values (430,62);
+insert into t (id,a) values (430,63);
+insert into t (id,a) values (430,64);
+insert into t (id,a) values (430,65);
+insert into t (id,a) values (430,66);
+insert into t (id,a) values (430,67);
+insert into t (id,a) values (430,68);
+insert into t (id,a) values (430,69);
+insert into t (id,a) values (430,70);
+insert into t (id,a) values (430,71);
+insert into t (id,a) values (430,72);
+insert into t (id,a) values (430,73);
+insert into t (id,a) values (430,74);
+insert into t (id,a) values (430,75);
+insert into t (id,a) values (430,76);
+insert into t (id,a) values (430,77);
+insert into t (id,a) values (430,78);
+insert into t (id,a) values (430,79);
+insert into t (id,a) values (430,80);
+insert into t (id,a) values (430,81);
+insert into t (id,a) values (430,82);
+insert into t (id,a) values (430,83);
+insert into t (id,a) values (430,84);
+insert into t (id,a) values (430,85);
+insert into t (id,a) values (430,86);
+insert into t (id,a) values (430,87);
+insert into t (id,a) values (430,88);
+insert into t (id,a) values (430,89);
+insert into t (id,a) values (430,90);
+insert into t (id,a) values (430,91);
+insert into t (id,a) values (430,92);
+insert into t (id,a) values (430,93);
+insert into t (id,a) values (430,94);
+insert into t (id,a) values (430,95);
+insert into t (id,a) values (430,96);
+insert into t (id,a) values (430,97);
+insert into t (id,a) values (430,98);
+insert into t (id,a) values (430,99);
+insert into t (id,a) values (431,0);
+insert into t (id,a) values (431,1);
+insert into t (id,a) values (431,2);
+insert into t (id,a) values (431,3);
+insert into t (id,a) values (431,4);
+insert into t (id,a) values (431,5);
+insert into t (id,a) values (431,6);
+insert into t (id,a) values (431,7);
+insert into t (id,a) values (431,8);
+insert into t (id,a) values (431,9);
+insert into t (id,a) values (431,10);
+insert into t (id,a) values (431,11);
+insert into t (id,a) values (431,12);
+insert into t (id,a) values (431,13);
+insert into t (id,a) values (431,14);
+insert into t (id,a) values (431,15);
+insert into t (id,a) values (431,16);
+insert into t (id,a) values (431,17);
+insert into t (id,a) values (431,18);
+insert into t (id,a) values (431,19);
+insert into t (id,a) values (431,20);
+insert into t (id,a) values (431,21);
+insert into t (id,a) values (431,22);
+insert into t (id,a) values (431,23);
+insert into t (id,a) values (431,24);
+insert into t (id,a) values (431,25);
+insert into t (id,a) values (431,26);
+insert into t (id,a) values (431,27);
+insert into t (id,a) values (431,28);
+insert into t (id,a) values (431,29);
+insert into t (id,a) values (431,30);
+insert into t (id,a) values (431,31);
+insert into t (id,a) values (431,32);
+insert into t (id,a) values (431,33);
+insert into t (id,a) values (431,34);
+insert into t (id,a) values (431,35);
+insert into t (id,a) values (431,36);
+insert into t (id,a) values (431,37);
+insert into t (id,a) values (431,38);
+insert into t (id,a) values (431,39);
+insert into t (id,a) values (431,40);
+insert into t (id,a) values (431,41);
+insert into t (id,a) values (431,42);
+insert into t (id,a) values (431,43);
+insert into t (id,a) values (431,44);
+insert into t (id,a) values (431,45);
+insert into t (id,a) values (431,46);
+insert into t (id,a) values (431,47);
+insert into t (id,a) values (431,48);
+insert into t (id,a) values (431,49);
+insert into t (id,a) values (431,50);
+insert into t (id,a) values (431,51);
+insert into t (id,a) values (431,52);
+insert into t (id,a) values (431,53);
+insert into t (id,a) values (431,54);
+insert into t (id,a) values (431,55);
+insert into t (id,a) values (431,56);
+insert into t (id,a) values (431,57);
+insert into t (id,a) values (431,58);
+insert into t (id,a) values (431,59);
+insert into t (id,a) values (431,60);
+insert into t (id,a) values (431,61);
+insert into t (id,a) values (431,62);
+insert into t (id,a) values (431,63);
+insert into t (id,a) values (431,64);
+insert into t (id,a) values (431,65);
+insert into t (id,a) values (431,66);
+insert into t (id,a) values (431,67);
+insert into t (id,a) values (431,68);
+insert into t (id,a) values (431,69);
+insert into t (id,a) values (431,70);
+insert into t (id,a) values (431,71);
+insert into t (id,a) values (431,72);
+insert into t (id,a) values (431,73);
+insert into t (id,a) values (431,74);
+insert into t (id,a) values (431,75);
+insert into t (id,a) values (431,76);
+insert into t (id,a) values (431,77);
+insert into t (id,a) values (431,78);
+insert into t (id,a) values (431,79);
+insert into t (id,a) values (431,80);
+insert into t (id,a) values (431,81);
+insert into t (id,a) values (431,82);
+insert into t (id,a) values (431,83);
+insert into t (id,a) values (431,84);
+insert into t (id,a) values (431,85);
+insert into t (id,a) values (431,86);
+insert into t (id,a) values (431,87);
+insert into t (id,a) values (431,88);
+insert into t (id,a) values (431,89);
+insert into t (id,a) values (431,90);
+insert into t (id,a) values (431,91);
+insert into t (id,a) values (431,92);
+insert into t (id,a) values (431,93);
+insert into t (id,a) values (431,94);
+insert into t (id,a) values (431,95);
+insert into t (id,a) values (431,96);
+insert into t (id,a) values (431,97);
+insert into t (id,a) values (431,98);
+insert into t (id,a) values (431,99);
+insert into t (id,a) values (432,0);
+insert into t (id,a) values (432,1);
+insert into t (id,a) values (432,2);
+insert into t (id,a) values (432,3);
+insert into t (id,a) values (432,4);
+insert into t (id,a) values (432,5);
+insert into t (id,a) values (432,6);
+insert into t (id,a) values (432,7);
+insert into t (id,a) values (432,8);
+insert into t (id,a) values (432,9);
+insert into t (id,a) values (432,10);
+insert into t (id,a) values (432,11);
+insert into t (id,a) values (432,12);
+insert into t (id,a) values (432,13);
+insert into t (id,a) values (432,14);
+insert into t (id,a) values (432,15);
+insert into t (id,a) values (432,16);
+insert into t (id,a) values (432,17);
+insert into t (id,a) values (432,18);
+insert into t (id,a) values (432,19);
+insert into t (id,a) values (432,20);
+insert into t (id,a) values (432,21);
+insert into t (id,a) values (432,22);
+insert into t (id,a) values (432,23);
+insert into t (id,a) values (432,24);
+insert into t (id,a) values (432,25);
+insert into t (id,a) values (432,26);
+insert into t (id,a) values (432,27);
+insert into t (id,a) values (432,28);
+insert into t (id,a) values (432,29);
+insert into t (id,a) values (432,30);
+insert into t (id,a) values (432,31);
+insert into t (id,a) values (432,32);
+insert into t (id,a) values (432,33);
+insert into t (id,a) values (432,34);
+insert into t (id,a) values (432,35);
+insert into t (id,a) values (432,36);
+insert into t (id,a) values (432,37);
+insert into t (id,a) values (432,38);
+insert into t (id,a) values (432,39);
+insert into t (id,a) values (432,40);
+insert into t (id,a) values (432,41);
+insert into t (id,a) values (432,42);
+insert into t (id,a) values (432,43);
+insert into t (id,a) values (432,44);
+insert into t (id,a) values (432,45);
+insert into t (id,a) values (432,46);
+insert into t (id,a) values (432,47);
+insert into t (id,a) values (432,48);
+insert into t (id,a) values (432,49);
+insert into t (id,a) values (432,50);
+insert into t (id,a) values (432,51);
+insert into t (id,a) values (432,52);
+insert into t (id,a) values (432,53);
+insert into t (id,a) values (432,54);
+insert into t (id,a) values (432,55);
+insert into t (id,a) values (432,56);
+insert into t (id,a) values (432,57);
+insert into t (id,a) values (432,58);
+insert into t (id,a) values (432,59);
+insert into t (id,a) values (432,60);
+insert into t (id,a) values (432,61);
+insert into t (id,a) values (432,62);
+insert into t (id,a) values (432,63);
+insert into t (id,a) values (432,64);
+insert into t (id,a) values (432,65);
+insert into t (id,a) values (432,66);
+insert into t (id,a) values (432,67);
+insert into t (id,a) values (432,68);
+insert into t (id,a) values (432,69);
+insert into t (id,a) values (432,70);
+insert into t (id,a) values (432,71);
+insert into t (id,a) values (432,72);
+insert into t (id,a) values (432,73);
+insert into t (id,a) values (432,74);
+insert into t (id,a) values (432,75);
+insert into t (id,a) values (432,76);
+insert into t (id,a) values (432,77);
+insert into t (id,a) values (432,78);
+insert into t (id,a) values (432,79);
+insert into t (id,a) values (432,80);
+insert into t (id,a) values (432,81);
+insert into t (id,a) values (432,82);
+insert into t (id,a) values (432,83);
+insert into t (id,a) values (432,84);
+insert into t (id,a) values (432,85);
+insert into t (id,a) values (432,86);
+insert into t (id,a) values (432,87);
+insert into t (id,a) values (432,88);
+insert into t (id,a) values (432,89);
+insert into t (id,a) values (432,90);
+insert into t (id,a) values (432,91);
+insert into t (id,a) values (432,92);
+insert into t (id,a) values (432,93);
+insert into t (id,a) values (432,94);
+insert into t (id,a) values (432,95);
+insert into t (id,a) values (432,96);
+insert into t (id,a) values (432,97);
+insert into t (id,a) values (432,98);
+insert into t (id,a) values (432,99);
+insert into t (id,a) values (433,0);
+insert into t (id,a) values (433,1);
+insert into t (id,a) values (433,2);
+insert into t (id,a) values (433,3);
+insert into t (id,a) values (433,4);
+insert into t (id,a) values (433,5);
+insert into t (id,a) values (433,6);
+insert into t (id,a) values (433,7);
+insert into t (id,a) values (433,8);
+insert into t (id,a) values (433,9);
+insert into t (id,a) values (433,10);
+insert into t (id,a) values (433,11);
+insert into t (id,a) values (433,12);
+insert into t (id,a) values (433,13);
+insert into t (id,a) values (433,14);
+insert into t (id,a) values (433,15);
+insert into t (id,a) values (433,16);
+insert into t (id,a) values (433,17);
+insert into t (id,a) values (433,18);
+insert into t (id,a) values (433,19);
+insert into t (id,a) values (433,20);
+insert into t (id,a) values (433,21);
+insert into t (id,a) values (433,22);
+insert into t (id,a) values (433,23);
+insert into t (id,a) values (433,24);
+insert into t (id,a) values (433,25);
+insert into t (id,a) values (433,26);
+insert into t (id,a) values (433,27);
+insert into t (id,a) values (433,28);
+insert into t (id,a) values (433,29);
+insert into t (id,a) values (433,30);
+insert into t (id,a) values (433,31);
+insert into t (id,a) values (433,32);
+insert into t (id,a) values (433,33);
+insert into t (id,a) values (433,34);
+insert into t (id,a) values (433,35);
+insert into t (id,a) values (433,36);
+insert into t (id,a) values (433,37);
+insert into t (id,a) values (433,38);
+insert into t (id,a) values (433,39);
+insert into t (id,a) values (433,40);
+insert into t (id,a) values (433,41);
+insert into t (id,a) values (433,42);
+insert into t (id,a) values (433,43);
+insert into t (id,a) values (433,44);
+insert into t (id,a) values (433,45);
+insert into t (id,a) values (433,46);
+insert into t (id,a) values (433,47);
+insert into t (id,a) values (433,48);
+insert into t (id,a) values (433,49);
+insert into t (id,a) values (433,50);
+insert into t (id,a) values (433,51);
+insert into t (id,a) values (433,52);
+insert into t (id,a) values (433,53);
+insert into t (id,a) values (433,54);
+insert into t (id,a) values (433,55);
+insert into t (id,a) values (433,56);
+insert into t (id,a) values (433,57);
+insert into t (id,a) values (433,58);
+insert into t (id,a) values (433,59);
+insert into t (id,a) values (433,60);
+insert into t (id,a) values (433,61);
+insert into t (id,a) values (433,62);
+insert into t (id,a) values (433,63);
+insert into t (id,a) values (433,64);
+insert into t (id,a) values (433,65);
+insert into t (id,a) values (433,66);
+insert into t (id,a) values (433,67);
+insert into t (id,a) values (433,68);
+insert into t (id,a) values (433,69);
+insert into t (id,a) values (433,70);
+insert into t (id,a) values (433,71);
+insert into t (id,a) values (433,72);
+insert into t (id,a) values (433,73);
+insert into t (id,a) values (433,74);
+insert into t (id,a) values (433,75);
+insert into t (id,a) values (433,76);
+insert into t (id,a) values (433,77);
+insert into t (id,a) values (433,78);
+insert into t (id,a) values (433,79);
+insert into t (id,a) values (433,80);
+insert into t (id,a) values (433,81);
+insert into t (id,a) values (433,82);
+insert into t (id,a) values (433,83);
+insert into t (id,a) values (433,84);
+insert into t (id,a) values (433,85);
+insert into t (id,a) values (433,86);
+insert into t (id,a) values (433,87);
+insert into t (id,a) values (433,88);
+insert into t (id,a) values (433,89);
+insert into t (id,a) values (433,90);
+insert into t (id,a) values (433,91);
+insert into t (id,a) values (433,92);
+insert into t (id,a) values (433,93);
+insert into t (id,a) values (433,94);
+insert into t (id,a) values (433,95);
+insert into t (id,a) values (433,96);
+insert into t (id,a) values (433,97);
+insert into t (id,a) values (433,98);
+insert into t (id,a) values (433,99);
+insert into t (id,a) values (434,0);
+insert into t (id,a) values (434,1);
+insert into t (id,a) values (434,2);
+insert into t (id,a) values (434,3);
+insert into t (id,a) values (434,4);
+insert into t (id,a) values (434,5);
+insert into t (id,a) values (434,6);
+insert into t (id,a) values (434,7);
+insert into t (id,a) values (434,8);
+insert into t (id,a) values (434,9);
+insert into t (id,a) values (434,10);
+insert into t (id,a) values (434,11);
+insert into t (id,a) values (434,12);
+insert into t (id,a) values (434,13);
+insert into t (id,a) values (434,14);
+insert into t (id,a) values (434,15);
+insert into t (id,a) values (434,16);
+insert into t (id,a) values (434,17);
+insert into t (id,a) values (434,18);
+insert into t (id,a) values (434,19);
+insert into t (id,a) values (434,20);
+insert into t (id,a) values (434,21);
+insert into t (id,a) values (434,22);
+insert into t (id,a) values (434,23);
+insert into t (id,a) values (434,24);
+insert into t (id,a) values (434,25);
+insert into t (id,a) values (434,26);
+insert into t (id,a) values (434,27);
+insert into t (id,a) values (434,28);
+insert into t (id,a) values (434,29);
+insert into t (id,a) values (434,30);
+insert into t (id,a) values (434,31);
+insert into t (id,a) values (434,32);
+insert into t (id,a) values (434,33);
+insert into t (id,a) values (434,34);
+insert into t (id,a) values (434,35);
+insert into t (id,a) values (434,36);
+insert into t (id,a) values (434,37);
+insert into t (id,a) values (434,38);
+insert into t (id,a) values (434,39);
+insert into t (id,a) values (434,40);
+insert into t (id,a) values (434,41);
+insert into t (id,a) values (434,42);
+insert into t (id,a) values (434,43);
+insert into t (id,a) values (434,44);
+insert into t (id,a) values (434,45);
+insert into t (id,a) values (434,46);
+insert into t (id,a) values (434,47);
+insert into t (id,a) values (434,48);
+insert into t (id,a) values (434,49);
+insert into t (id,a) values (434,50);
+insert into t (id,a) values (434,51);
+insert into t (id,a) values (434,52);
+insert into t (id,a) values (434,53);
+insert into t (id,a) values (434,54);
+insert into t (id,a) values (434,55);
+insert into t (id,a) values (434,56);
+insert into t (id,a) values (434,57);
+insert into t (id,a) values (434,58);
+insert into t (id,a) values (434,59);
+insert into t (id,a) values (434,60);
+insert into t (id,a) values (434,61);
+insert into t (id,a) values (434,62);
+insert into t (id,a) values (434,63);
+insert into t (id,a) values (434,64);
+insert into t (id,a) values (434,65);
+insert into t (id,a) values (434,66);
+insert into t (id,a) values (434,67);
+insert into t (id,a) values (434,68);
+insert into t (id,a) values (434,69);
+insert into t (id,a) values (434,70);
+insert into t (id,a) values (434,71);
+insert into t (id,a) values (434,72);
+insert into t (id,a) values (434,73);
+insert into t (id,a) values (434,74);
+insert into t (id,a) values (434,75);
+insert into t (id,a) values (434,76);
+insert into t (id,a) values (434,77);
+insert into t (id,a) values (434,78);
+insert into t (id,a) values (434,79);
+insert into t (id,a) values (434,80);
+insert into t (id,a) values (434,81);
+insert into t (id,a) values (434,82);
+insert into t (id,a) values (434,83);
+insert into t (id,a) values (434,84);
+insert into t (id,a) values (434,85);
+insert into t (id,a) values (434,86);
+insert into t (id,a) values (434,87);
+insert into t (id,a) values (434,88);
+insert into t (id,a) values (434,89);
+insert into t (id,a) values (434,90);
+insert into t (id,a) values (434,91);
+insert into t (id,a) values (434,92);
+insert into t (id,a) values (434,93);
+insert into t (id,a) values (434,94);
+insert into t (id,a) values (434,95);
+insert into t (id,a) values (434,96);
+insert into t (id,a) values (434,97);
+insert into t (id,a) values (434,98);
+insert into t (id,a) values (434,99);
+insert into t (id,a) values (435,0);
+insert into t (id,a) values (435,1);
+insert into t (id,a) values (435,2);
+insert into t (id,a) values (435,3);
+insert into t (id,a) values (435,4);
+insert into t (id,a) values (435,5);
+insert into t (id,a) values (435,6);
+insert into t (id,a) values (435,7);
+insert into t (id,a) values (435,8);
+insert into t (id,a) values (435,9);
+insert into t (id,a) values (435,10);
+insert into t (id,a) values (435,11);
+insert into t (id,a) values (435,12);
+insert into t (id,a) values (435,13);
+insert into t (id,a) values (435,14);
+insert into t (id,a) values (435,15);
+insert into t (id,a) values (435,16);
+insert into t (id,a) values (435,17);
+insert into t (id,a) values (435,18);
+insert into t (id,a) values (435,19);
+insert into t (id,a) values (435,20);
+insert into t (id,a) values (435,21);
+insert into t (id,a) values (435,22);
+insert into t (id,a) values (435,23);
+insert into t (id,a) values (435,24);
+insert into t (id,a) values (435,25);
+insert into t (id,a) values (435,26);
+insert into t (id,a) values (435,27);
+insert into t (id,a) values (435,28);
+insert into t (id,a) values (435,29);
+insert into t (id,a) values (435,30);
+insert into t (id,a) values (435,31);
+insert into t (id,a) values (435,32);
+insert into t (id,a) values (435,33);
+insert into t (id,a) values (435,34);
+insert into t (id,a) values (435,35);
+insert into t (id,a) values (435,36);
+insert into t (id,a) values (435,37);
+insert into t (id,a) values (435,38);
+insert into t (id,a) values (435,39);
+insert into t (id,a) values (435,40);
+insert into t (id,a) values (435,41);
+insert into t (id,a) values (435,42);
+insert into t (id,a) values (435,43);
+insert into t (id,a) values (435,44);
+insert into t (id,a) values (435,45);
+insert into t (id,a) values (435,46);
+insert into t (id,a) values (435,47);
+insert into t (id,a) values (435,48);
+insert into t (id,a) values (435,49);
+insert into t (id,a) values (435,50);
+insert into t (id,a) values (435,51);
+insert into t (id,a) values (435,52);
+insert into t (id,a) values (435,53);
+insert into t (id,a) values (435,54);
+insert into t (id,a) values (435,55);
+insert into t (id,a) values (435,56);
+insert into t (id,a) values (435,57);
+insert into t (id,a) values (435,58);
+insert into t (id,a) values (435,59);
+insert into t (id,a) values (435,60);
+insert into t (id,a) values (435,61);
+insert into t (id,a) values (435,62);
+insert into t (id,a) values (435,63);
+insert into t (id,a) values (435,64);
+insert into t (id,a) values (435,65);
+insert into t (id,a) values (435,66);
+insert into t (id,a) values (435,67);
+insert into t (id,a) values (435,68);
+insert into t (id,a) values (435,69);
+insert into t (id,a) values (435,70);
+insert into t (id,a) values (435,71);
+insert into t (id,a) values (435,72);
+insert into t (id,a) values (435,73);
+insert into t (id,a) values (435,74);
+insert into t (id,a) values (435,75);
+insert into t (id,a) values (435,76);
+insert into t (id,a) values (435,77);
+insert into t (id,a) values (435,78);
+insert into t (id,a) values (435,79);
+insert into t (id,a) values (435,80);
+insert into t (id,a) values (435,81);
+insert into t (id,a) values (435,82);
+insert into t (id,a) values (435,83);
+insert into t (id,a) values (435,84);
+insert into t (id,a) values (435,85);
+insert into t (id,a) values (435,86);
+insert into t (id,a) values (435,87);
+insert into t (id,a) values (435,88);
+insert into t (id,a) values (435,89);
+insert into t (id,a) values (435,90);
+insert into t (id,a) values (435,91);
+insert into t (id,a) values (435,92);
+insert into t (id,a) values (435,93);
+insert into t (id,a) values (435,94);
+insert into t (id,a) values (435,95);
+insert into t (id,a) values (435,96);
+insert into t (id,a) values (435,97);
+insert into t (id,a) values (435,98);
+insert into t (id,a) values (435,99);
+insert into t (id,a) values (436,0);
+insert into t (id,a) values (436,1);
+insert into t (id,a) values (436,2);
+insert into t (id,a) values (436,3);
+insert into t (id,a) values (436,4);
+insert into t (id,a) values (436,5);
+insert into t (id,a) values (436,6);
+insert into t (id,a) values (436,7);
+insert into t (id,a) values (436,8);
+insert into t (id,a) values (436,9);
+insert into t (id,a) values (436,10);
+insert into t (id,a) values (436,11);
+insert into t (id,a) values (436,12);
+insert into t (id,a) values (436,13);
+insert into t (id,a) values (436,14);
+insert into t (id,a) values (436,15);
+insert into t (id,a) values (436,16);
+insert into t (id,a) values (436,17);
+insert into t (id,a) values (436,18);
+insert into t (id,a) values (436,19);
+insert into t (id,a) values (436,20);
+insert into t (id,a) values (436,21);
+insert into t (id,a) values (436,22);
+insert into t (id,a) values (436,23);
+insert into t (id,a) values (436,24);
+insert into t (id,a) values (436,25);
+insert into t (id,a) values (436,26);
+insert into t (id,a) values (436,27);
+insert into t (id,a) values (436,28);
+insert into t (id,a) values (436,29);
+insert into t (id,a) values (436,30);
+insert into t (id,a) values (436,31);
+insert into t (id,a) values (436,32);
+insert into t (id,a) values (436,33);
+insert into t (id,a) values (436,34);
+insert into t (id,a) values (436,35);
+insert into t (id,a) values (436,36);
+insert into t (id,a) values (436,37);
+insert into t (id,a) values (436,38);
+insert into t (id,a) values (436,39);
+insert into t (id,a) values (436,40);
+insert into t (id,a) values (436,41);
+insert into t (id,a) values (436,42);
+insert into t (id,a) values (436,43);
+insert into t (id,a) values (436,44);
+insert into t (id,a) values (436,45);
+insert into t (id,a) values (436,46);
+insert into t (id,a) values (436,47);
+insert into t (id,a) values (436,48);
+insert into t (id,a) values (436,49);
+insert into t (id,a) values (436,50);
+insert into t (id,a) values (436,51);
+insert into t (id,a) values (436,52);
+insert into t (id,a) values (436,53);
+insert into t (id,a) values (436,54);
+insert into t (id,a) values (436,55);
+insert into t (id,a) values (436,56);
+insert into t (id,a) values (436,57);
+insert into t (id,a) values (436,58);
+insert into t (id,a) values (436,59);
+insert into t (id,a) values (436,60);
+insert into t (id,a) values (436,61);
+insert into t (id,a) values (436,62);
+insert into t (id,a) values (436,63);
+insert into t (id,a) values (436,64);
+insert into t (id,a) values (436,65);
+insert into t (id,a) values (436,66);
+insert into t (id,a) values (436,67);
+insert into t (id,a) values (436,68);
+insert into t (id,a) values (436,69);
+insert into t (id,a) values (436,70);
+insert into t (id,a) values (436,71);
+insert into t (id,a) values (436,72);
+insert into t (id,a) values (436,73);
+insert into t (id,a) values (436,74);
+insert into t (id,a) values (436,75);
+insert into t (id,a) values (436,76);
+insert into t (id,a) values (436,77);
+insert into t (id,a) values (436,78);
+insert into t (id,a) values (436,79);
+insert into t (id,a) values (436,80);
+insert into t (id,a) values (436,81);
+insert into t (id,a) values (436,82);
+insert into t (id,a) values (436,83);
+insert into t (id,a) values (436,84);
+insert into t (id,a) values (436,85);
+insert into t (id,a) values (436,86);
+insert into t (id,a) values (436,87);
+insert into t (id,a) values (436,88);
+insert into t (id,a) values (436,89);
+insert into t (id,a) values (436,90);
+insert into t (id,a) values (436,91);
+insert into t (id,a) values (436,92);
+insert into t (id,a) values (436,93);
+insert into t (id,a) values (436,94);
+insert into t (id,a) values (436,95);
+insert into t (id,a) values (436,96);
+insert into t (id,a) values (436,97);
+insert into t (id,a) values (436,98);
+insert into t (id,a) values (436,99);
+insert into t (id,a) values (437,0);
+insert into t (id,a) values (437,1);
+insert into t (id,a) values (437,2);
+insert into t (id,a) values (437,3);
+insert into t (id,a) values (437,4);
+insert into t (id,a) values (437,5);
+insert into t (id,a) values (437,6);
+insert into t (id,a) values (437,7);
+insert into t (id,a) values (437,8);
+insert into t (id,a) values (437,9);
+insert into t (id,a) values (437,10);
+insert into t (id,a) values (437,11);
+insert into t (id,a) values (437,12);
+insert into t (id,a) values (437,13);
+insert into t (id,a) values (437,14);
+insert into t (id,a) values (437,15);
+insert into t (id,a) values (437,16);
+insert into t (id,a) values (437,17);
+insert into t (id,a) values (437,18);
+insert into t (id,a) values (437,19);
+insert into t (id,a) values (437,20);
+insert into t (id,a) values (437,21);
+insert into t (id,a) values (437,22);
+insert into t (id,a) values (437,23);
+insert into t (id,a) values (437,24);
+insert into t (id,a) values (437,25);
+insert into t (id,a) values (437,26);
+insert into t (id,a) values (437,27);
+insert into t (id,a) values (437,28);
+insert into t (id,a) values (437,29);
+insert into t (id,a) values (437,30);
+insert into t (id,a) values (437,31);
+insert into t (id,a) values (437,32);
+insert into t (id,a) values (437,33);
+insert into t (id,a) values (437,34);
+insert into t (id,a) values (437,35);
+insert into t (id,a) values (437,36);
+insert into t (id,a) values (437,37);
+insert into t (id,a) values (437,38);
+insert into t (id,a) values (437,39);
+insert into t (id,a) values (437,40);
+insert into t (id,a) values (437,41);
+insert into t (id,a) values (437,42);
+insert into t (id,a) values (437,43);
+insert into t (id,a) values (437,44);
+insert into t (id,a) values (437,45);
+insert into t (id,a) values (437,46);
+insert into t (id,a) values (437,47);
+insert into t (id,a) values (437,48);
+insert into t (id,a) values (437,49);
+insert into t (id,a) values (437,50);
+insert into t (id,a) values (437,51);
+insert into t (id,a) values (437,52);
+insert into t (id,a) values (437,53);
+insert into t (id,a) values (437,54);
+insert into t (id,a) values (437,55);
+insert into t (id,a) values (437,56);
+insert into t (id,a) values (437,57);
+insert into t (id,a) values (437,58);
+insert into t (id,a) values (437,59);
+insert into t (id,a) values (437,60);
+insert into t (id,a) values (437,61);
+insert into t (id,a) values (437,62);
+insert into t (id,a) values (437,63);
+insert into t (id,a) values (437,64);
+insert into t (id,a) values (437,65);
+insert into t (id,a) values (437,66);
+insert into t (id,a) values (437,67);
+insert into t (id,a) values (437,68);
+insert into t (id,a) values (437,69);
+insert into t (id,a) values (437,70);
+insert into t (id,a) values (437,71);
+insert into t (id,a) values (437,72);
+insert into t (id,a) values (437,73);
+insert into t (id,a) values (437,74);
+insert into t (id,a) values (437,75);
+insert into t (id,a) values (437,76);
+insert into t (id,a) values (437,77);
+insert into t (id,a) values (437,78);
+insert into t (id,a) values (437,79);
+insert into t (id,a) values (437,80);
+insert into t (id,a) values (437,81);
+insert into t (id,a) values (437,82);
+insert into t (id,a) values (437,83);
+insert into t (id,a) values (437,84);
+insert into t (id,a) values (437,85);
+insert into t (id,a) values (437,86);
+insert into t (id,a) values (437,87);
+insert into t (id,a) values (437,88);
+insert into t (id,a) values (437,89);
+insert into t (id,a) values (437,90);
+insert into t (id,a) values (437,91);
+insert into t (id,a) values (437,92);
+insert into t (id,a) values (437,93);
+insert into t (id,a) values (437,94);
+insert into t (id,a) values (437,95);
+insert into t (id,a) values (437,96);
+insert into t (id,a) values (437,97);
+insert into t (id,a) values (437,98);
+insert into t (id,a) values (437,99);
+insert into t (id,a) values (438,0);
+insert into t (id,a) values (438,1);
+insert into t (id,a) values (438,2);
+insert into t (id,a) values (438,3);
+insert into t (id,a) values (438,4);
+insert into t (id,a) values (438,5);
+insert into t (id,a) values (438,6);
+insert into t (id,a) values (438,7);
+insert into t (id,a) values (438,8);
+insert into t (id,a) values (438,9);
+insert into t (id,a) values (438,10);
+insert into t (id,a) values (438,11);
+insert into t (id,a) values (438,12);
+insert into t (id,a) values (438,13);
+insert into t (id,a) values (438,14);
+insert into t (id,a) values (438,15);
+insert into t (id,a) values (438,16);
+insert into t (id,a) values (438,17);
+insert into t (id,a) values (438,18);
+insert into t (id,a) values (438,19);
+insert into t (id,a) values (438,20);
+insert into t (id,a) values (438,21);
+insert into t (id,a) values (438,22);
+insert into t (id,a) values (438,23);
+insert into t (id,a) values (438,24);
+insert into t (id,a) values (438,25);
+insert into t (id,a) values (438,26);
+insert into t (id,a) values (438,27);
+insert into t (id,a) values (438,28);
+insert into t (id,a) values (438,29);
+insert into t (id,a) values (438,30);
+insert into t (id,a) values (438,31);
+insert into t (id,a) values (438,32);
+insert into t (id,a) values (438,33);
+insert into t (id,a) values (438,34);
+insert into t (id,a) values (438,35);
+insert into t (id,a) values (438,36);
+insert into t (id,a) values (438,37);
+insert into t (id,a) values (438,38);
+insert into t (id,a) values (438,39);
+insert into t (id,a) values (438,40);
+insert into t (id,a) values (438,41);
+insert into t (id,a) values (438,42);
+insert into t (id,a) values (438,43);
+insert into t (id,a) values (438,44);
+insert into t (id,a) values (438,45);
+insert into t (id,a) values (438,46);
+insert into t (id,a) values (438,47);
+insert into t (id,a) values (438,48);
+insert into t (id,a) values (438,49);
+insert into t (id,a) values (438,50);
+insert into t (id,a) values (438,51);
+insert into t (id,a) values (438,52);
+insert into t (id,a) values (438,53);
+insert into t (id,a) values (438,54);
+insert into t (id,a) values (438,55);
+insert into t (id,a) values (438,56);
+insert into t (id,a) values (438,57);
+insert into t (id,a) values (438,58);
+insert into t (id,a) values (438,59);
+insert into t (id,a) values (438,60);
+insert into t (id,a) values (438,61);
+insert into t (id,a) values (438,62);
+insert into t (id,a) values (438,63);
+insert into t (id,a) values (438,64);
+insert into t (id,a) values (438,65);
+insert into t (id,a) values (438,66);
+insert into t (id,a) values (438,67);
+insert into t (id,a) values (438,68);
+insert into t (id,a) values (438,69);
+insert into t (id,a) values (438,70);
+insert into t (id,a) values (438,71);
+insert into t (id,a) values (438,72);
+insert into t (id,a) values (438,73);
+insert into t (id,a) values (438,74);
+insert into t (id,a) values (438,75);
+insert into t (id,a) values (438,76);
+insert into t (id,a) values (438,77);
+insert into t (id,a) values (438,78);
+insert into t (id,a) values (438,79);
+insert into t (id,a) values (438,80);
+insert into t (id,a) values (438,81);
+insert into t (id,a) values (438,82);
+insert into t (id,a) values (438,83);
+insert into t (id,a) values (438,84);
+insert into t (id,a) values (438,85);
+insert into t (id,a) values (438,86);
+insert into t (id,a) values (438,87);
+insert into t (id,a) values (438,88);
+insert into t (id,a) values (438,89);
+insert into t (id,a) values (438,90);
+insert into t (id,a) values (438,91);
+insert into t (id,a) values (438,92);
+insert into t (id,a) values (438,93);
+insert into t (id,a) values (438,94);
+insert into t (id,a) values (438,95);
+insert into t (id,a) values (438,96);
+insert into t (id,a) values (438,97);
+insert into t (id,a) values (438,98);
+insert into t (id,a) values (438,99);
+insert into t (id,a) values (439,0);
+insert into t (id,a) values (439,1);
+insert into t (id,a) values (439,2);
+insert into t (id,a) values (439,3);
+insert into t (id,a) values (439,4);
+insert into t (id,a) values (439,5);
+insert into t (id,a) values (439,6);
+insert into t (id,a) values (439,7);
+insert into t (id,a) values (439,8);
+insert into t (id,a) values (439,9);
+insert into t (id,a) values (439,10);
+insert into t (id,a) values (439,11);
+insert into t (id,a) values (439,12);
+insert into t (id,a) values (439,13);
+insert into t (id,a) values (439,14);
+insert into t (id,a) values (439,15);
+insert into t (id,a) values (439,16);
+insert into t (id,a) values (439,17);
+insert into t (id,a) values (439,18);
+insert into t (id,a) values (439,19);
+insert into t (id,a) values (439,20);
+insert into t (id,a) values (439,21);
+insert into t (id,a) values (439,22);
+insert into t (id,a) values (439,23);
+insert into t (id,a) values (439,24);
+insert into t (id,a) values (439,25);
+insert into t (id,a) values (439,26);
+insert into t (id,a) values (439,27);
+insert into t (id,a) values (439,28);
+insert into t (id,a) values (439,29);
+insert into t (id,a) values (439,30);
+insert into t (id,a) values (439,31);
+insert into t (id,a) values (439,32);
+insert into t (id,a) values (439,33);
+insert into t (id,a) values (439,34);
+insert into t (id,a) values (439,35);
+insert into t (id,a) values (439,36);
+insert into t (id,a) values (439,37);
+insert into t (id,a) values (439,38);
+insert into t (id,a) values (439,39);
+insert into t (id,a) values (439,40);
+insert into t (id,a) values (439,41);
+insert into t (id,a) values (439,42);
+insert into t (id,a) values (439,43);
+insert into t (id,a) values (439,44);
+insert into t (id,a) values (439,45);
+insert into t (id,a) values (439,46);
+insert into t (id,a) values (439,47);
+insert into t (id,a) values (439,48);
+insert into t (id,a) values (439,49);
+insert into t (id,a) values (439,50);
+insert into t (id,a) values (439,51);
+insert into t (id,a) values (439,52);
+insert into t (id,a) values (439,53);
+insert into t (id,a) values (439,54);
+insert into t (id,a) values (439,55);
+insert into t (id,a) values (439,56);
+insert into t (id,a) values (439,57);
+insert into t (id,a) values (439,58);
+insert into t (id,a) values (439,59);
+insert into t (id,a) values (439,60);
+insert into t (id,a) values (439,61);
+insert into t (id,a) values (439,62);
+insert into t (id,a) values (439,63);
+insert into t (id,a) values (439,64);
+insert into t (id,a) values (439,65);
+insert into t (id,a) values (439,66);
+insert into t (id,a) values (439,67);
+insert into t (id,a) values (439,68);
+insert into t (id,a) values (439,69);
+insert into t (id,a) values (439,70);
+insert into t (id,a) values (439,71);
+insert into t (id,a) values (439,72);
+insert into t (id,a) values (439,73);
+insert into t (id,a) values (439,74);
+insert into t (id,a) values (439,75);
+insert into t (id,a) values (439,76);
+insert into t (id,a) values (439,77);
+insert into t (id,a) values (439,78);
+insert into t (id,a) values (439,79);
+insert into t (id,a) values (439,80);
+insert into t (id,a) values (439,81);
+insert into t (id,a) values (439,82);
+insert into t (id,a) values (439,83);
+insert into t (id,a) values (439,84);
+insert into t (id,a) values (439,85);
+insert into t (id,a) values (439,86);
+insert into t (id,a) values (439,87);
+insert into t (id,a) values (439,88);
+insert into t (id,a) values (439,89);
+insert into t (id,a) values (439,90);
+insert into t (id,a) values (439,91);
+insert into t (id,a) values (439,92);
+insert into t (id,a) values (439,93);
+insert into t (id,a) values (439,94);
+insert into t (id,a) values (439,95);
+insert into t (id,a) values (439,96);
+insert into t (id,a) values (439,97);
+insert into t (id,a) values (439,98);
+insert into t (id,a) values (439,99);
+insert into t (id,a) values (440,0);
+insert into t (id,a) values (440,1);
+insert into t (id,a) values (440,2);
+insert into t (id,a) values (440,3);
+insert into t (id,a) values (440,4);
+insert into t (id,a) values (440,5);
+insert into t (id,a) values (440,6);
+insert into t (id,a) values (440,7);
+insert into t (id,a) values (440,8);
+insert into t (id,a) values (440,9);
+insert into t (id,a) values (440,10);
+insert into t (id,a) values (440,11);
+insert into t (id,a) values (440,12);
+insert into t (id,a) values (440,13);
+insert into t (id,a) values (440,14);
+insert into t (id,a) values (440,15);
+insert into t (id,a) values (440,16);
+insert into t (id,a) values (440,17);
+insert into t (id,a) values (440,18);
+insert into t (id,a) values (440,19);
+insert into t (id,a) values (440,20);
+insert into t (id,a) values (440,21);
+insert into t (id,a) values (440,22);
+insert into t (id,a) values (440,23);
+insert into t (id,a) values (440,24);
+insert into t (id,a) values (440,25);
+insert into t (id,a) values (440,26);
+insert into t (id,a) values (440,27);
+insert into t (id,a) values (440,28);
+insert into t (id,a) values (440,29);
+insert into t (id,a) values (440,30);
+insert into t (id,a) values (440,31);
+insert into t (id,a) values (440,32);
+insert into t (id,a) values (440,33);
+insert into t (id,a) values (440,34);
+insert into t (id,a) values (440,35);
+insert into t (id,a) values (440,36);
+insert into t (id,a) values (440,37);
+insert into t (id,a) values (440,38);
+insert into t (id,a) values (440,39);
+insert into t (id,a) values (440,40);
+insert into t (id,a) values (440,41);
+insert into t (id,a) values (440,42);
+insert into t (id,a) values (440,43);
+insert into t (id,a) values (440,44);
+insert into t (id,a) values (440,45);
+insert into t (id,a) values (440,46);
+insert into t (id,a) values (440,47);
+insert into t (id,a) values (440,48);
+insert into t (id,a) values (440,49);
+insert into t (id,a) values (440,50);
+insert into t (id,a) values (440,51);
+insert into t (id,a) values (440,52);
+insert into t (id,a) values (440,53);
+insert into t (id,a) values (440,54);
+insert into t (id,a) values (440,55);
+insert into t (id,a) values (440,56);
+insert into t (id,a) values (440,57);
+insert into t (id,a) values (440,58);
+insert into t (id,a) values (440,59);
+insert into t (id,a) values (440,60);
+insert into t (id,a) values (440,61);
+insert into t (id,a) values (440,62);
+insert into t (id,a) values (440,63);
+insert into t (id,a) values (440,64);
+insert into t (id,a) values (440,65);
+insert into t (id,a) values (440,66);
+insert into t (id,a) values (440,67);
+insert into t (id,a) values (440,68);
+insert into t (id,a) values (440,69);
+insert into t (id,a) values (440,70);
+insert into t (id,a) values (440,71);
+insert into t (id,a) values (440,72);
+insert into t (id,a) values (440,73);
+insert into t (id,a) values (440,74);
+insert into t (id,a) values (440,75);
+insert into t (id,a) values (440,76);
+insert into t (id,a) values (440,77);
+insert into t (id,a) values (440,78);
+insert into t (id,a) values (440,79);
+insert into t (id,a) values (440,80);
+insert into t (id,a) values (440,81);
+insert into t (id,a) values (440,82);
+insert into t (id,a) values (440,83);
+insert into t (id,a) values (440,84);
+insert into t (id,a) values (440,85);
+insert into t (id,a) values (440,86);
+insert into t (id,a) values (440,87);
+insert into t (id,a) values (440,88);
+insert into t (id,a) values (440,89);
+insert into t (id,a) values (440,90);
+insert into t (id,a) values (440,91);
+insert into t (id,a) values (440,92);
+insert into t (id,a) values (440,93);
+insert into t (id,a) values (440,94);
+insert into t (id,a) values (440,95);
+insert into t (id,a) values (440,96);
+insert into t (id,a) values (440,97);
+insert into t (id,a) values (440,98);
+insert into t (id,a) values (440,99);
+insert into t (id,a) values (441,0);
+insert into t (id,a) values (441,1);
+insert into t (id,a) values (441,2);
+insert into t (id,a) values (441,3);
+insert into t (id,a) values (441,4);
+insert into t (id,a) values (441,5);
+insert into t (id,a) values (441,6);
+insert into t (id,a) values (441,7);
+insert into t (id,a) values (441,8);
+insert into t (id,a) values (441,9);
+insert into t (id,a) values (441,10);
+insert into t (id,a) values (441,11);
+insert into t (id,a) values (441,12);
+insert into t (id,a) values (441,13);
+insert into t (id,a) values (441,14);
+insert into t (id,a) values (441,15);
+insert into t (id,a) values (441,16);
+insert into t (id,a) values (441,17);
+insert into t (id,a) values (441,18);
+insert into t (id,a) values (441,19);
+insert into t (id,a) values (441,20);
+insert into t (id,a) values (441,21);
+insert into t (id,a) values (441,22);
+insert into t (id,a) values (441,23);
+insert into t (id,a) values (441,24);
+insert into t (id,a) values (441,25);
+insert into t (id,a) values (441,26);
+insert into t (id,a) values (441,27);
+insert into t (id,a) values (441,28);
+insert into t (id,a) values (441,29);
+insert into t (id,a) values (441,30);
+insert into t (id,a) values (441,31);
+insert into t (id,a) values (441,32);
+insert into t (id,a) values (441,33);
+insert into t (id,a) values (441,34);
+insert into t (id,a) values (441,35);
+insert into t (id,a) values (441,36);
+insert into t (id,a) values (441,37);
+insert into t (id,a) values (441,38);
+insert into t (id,a) values (441,39);
+insert into t (id,a) values (441,40);
+insert into t (id,a) values (441,41);
+insert into t (id,a) values (441,42);
+insert into t (id,a) values (441,43);
+insert into t (id,a) values (441,44);
+insert into t (id,a) values (441,45);
+insert into t (id,a) values (441,46);
+insert into t (id,a) values (441,47);
+insert into t (id,a) values (441,48);
+insert into t (id,a) values (441,49);
+insert into t (id,a) values (441,50);
+insert into t (id,a) values (441,51);
+insert into t (id,a) values (441,52);
+insert into t (id,a) values (441,53);
+insert into t (id,a) values (441,54);
+insert into t (id,a) values (441,55);
+insert into t (id,a) values (441,56);
+insert into t (id,a) values (441,57);
+insert into t (id,a) values (441,58);
+insert into t (id,a) values (441,59);
+insert into t (id,a) values (441,60);
+insert into t (id,a) values (441,61);
+insert into t (id,a) values (441,62);
+insert into t (id,a) values (441,63);
+insert into t (id,a) values (441,64);
+insert into t (id,a) values (441,65);
+insert into t (id,a) values (441,66);
+insert into t (id,a) values (441,67);
+insert into t (id,a) values (441,68);
+insert into t (id,a) values (441,69);
+insert into t (id,a) values (441,70);
+insert into t (id,a) values (441,71);
+insert into t (id,a) values (441,72);
+insert into t (id,a) values (441,73);
+insert into t (id,a) values (441,74);
+insert into t (id,a) values (441,75);
+insert into t (id,a) values (441,76);
+insert into t (id,a) values (441,77);
+insert into t (id,a) values (441,78);
+insert into t (id,a) values (441,79);
+insert into t (id,a) values (441,80);
+insert into t (id,a) values (441,81);
+insert into t (id,a) values (441,82);
+insert into t (id,a) values (441,83);
+insert into t (id,a) values (441,84);
+insert into t (id,a) values (441,85);
+insert into t (id,a) values (441,86);
+insert into t (id,a) values (441,87);
+insert into t (id,a) values (441,88);
+insert into t (id,a) values (441,89);
+insert into t (id,a) values (441,90);
+insert into t (id,a) values (441,91);
+insert into t (id,a) values (441,92);
+insert into t (id,a) values (441,93);
+insert into t (id,a) values (441,94);
+insert into t (id,a) values (441,95);
+insert into t (id,a) values (441,96);
+insert into t (id,a) values (441,97);
+insert into t (id,a) values (441,98);
+insert into t (id,a) values (441,99);
+insert into t (id,a) values (442,0);
+insert into t (id,a) values (442,1);
+insert into t (id,a) values (442,2);
+insert into t (id,a) values (442,3);
+insert into t (id,a) values (442,4);
+insert into t (id,a) values (442,5);
+insert into t (id,a) values (442,6);
+insert into t (id,a) values (442,7);
+insert into t (id,a) values (442,8);
+insert into t (id,a) values (442,9);
+insert into t (id,a) values (442,10);
+insert into t (id,a) values (442,11);
+insert into t (id,a) values (442,12);
+insert into t (id,a) values (442,13);
+insert into t (id,a) values (442,14);
+insert into t (id,a) values (442,15);
+insert into t (id,a) values (442,16);
+insert into t (id,a) values (442,17);
+insert into t (id,a) values (442,18);
+insert into t (id,a) values (442,19);
+insert into t (id,a) values (442,20);
+insert into t (id,a) values (442,21);
+insert into t (id,a) values (442,22);
+insert into t (id,a) values (442,23);
+insert into t (id,a) values (442,24);
+insert into t (id,a) values (442,25);
+insert into t (id,a) values (442,26);
+insert into t (id,a) values (442,27);
+insert into t (id,a) values (442,28);
+insert into t (id,a) values (442,29);
+insert into t (id,a) values (442,30);
+insert into t (id,a) values (442,31);
+insert into t (id,a) values (442,32);
+insert into t (id,a) values (442,33);
+insert into t (id,a) values (442,34);
+insert into t (id,a) values (442,35);
+insert into t (id,a) values (442,36);
+insert into t (id,a) values (442,37);
+insert into t (id,a) values (442,38);
+insert into t (id,a) values (442,39);
+insert into t (id,a) values (442,40);
+insert into t (id,a) values (442,41);
+insert into t (id,a) values (442,42);
+insert into t (id,a) values (442,43);
+insert into t (id,a) values (442,44);
+insert into t (id,a) values (442,45);
+insert into t (id,a) values (442,46);
+insert into t (id,a) values (442,47);
+insert into t (id,a) values (442,48);
+insert into t (id,a) values (442,49);
+insert into t (id,a) values (442,50);
+insert into t (id,a) values (442,51);
+insert into t (id,a) values (442,52);
+insert into t (id,a) values (442,53);
+insert into t (id,a) values (442,54);
+insert into t (id,a) values (442,55);
+insert into t (id,a) values (442,56);
+insert into t (id,a) values (442,57);
+insert into t (id,a) values (442,58);
+insert into t (id,a) values (442,59);
+insert into t (id,a) values (442,60);
+insert into t (id,a) values (442,61);
+insert into t (id,a) values (442,62);
+insert into t (id,a) values (442,63);
+insert into t (id,a) values (442,64);
+insert into t (id,a) values (442,65);
+insert into t (id,a) values (442,66);
+insert into t (id,a) values (442,67);
+insert into t (id,a) values (442,68);
+insert into t (id,a) values (442,69);
+insert into t (id,a) values (442,70);
+insert into t (id,a) values (442,71);
+insert into t (id,a) values (442,72);
+insert into t (id,a) values (442,73);
+insert into t (id,a) values (442,74);
+insert into t (id,a) values (442,75);
+insert into t (id,a) values (442,76);
+insert into t (id,a) values (442,77);
+insert into t (id,a) values (442,78);
+insert into t (id,a) values (442,79);
+insert into t (id,a) values (442,80);
+insert into t (id,a) values (442,81);
+insert into t (id,a) values (442,82);
+insert into t (id,a) values (442,83);
+insert into t (id,a) values (442,84);
+insert into t (id,a) values (442,85);
+insert into t (id,a) values (442,86);
+insert into t (id,a) values (442,87);
+insert into t (id,a) values (442,88);
+insert into t (id,a) values (442,89);
+insert into t (id,a) values (442,90);
+insert into t (id,a) values (442,91);
+insert into t (id,a) values (442,92);
+insert into t (id,a) values (442,93);
+insert into t (id,a) values (442,94);
+insert into t (id,a) values (442,95);
+insert into t (id,a) values (442,96);
+insert into t (id,a) values (442,97);
+insert into t (id,a) values (442,98);
+insert into t (id,a) values (442,99);
+insert into t (id,a) values (443,0);
+insert into t (id,a) values (443,1);
+insert into t (id,a) values (443,2);
+insert into t (id,a) values (443,3);
+insert into t (id,a) values (443,4);
+insert into t (id,a) values (443,5);
+insert into t (id,a) values (443,6);
+insert into t (id,a) values (443,7);
+insert into t (id,a) values (443,8);
+insert into t (id,a) values (443,9);
+insert into t (id,a) values (443,10);
+insert into t (id,a) values (443,11);
+insert into t (id,a) values (443,12);
+insert into t (id,a) values (443,13);
+insert into t (id,a) values (443,14);
+insert into t (id,a) values (443,15);
+insert into t (id,a) values (443,16);
+insert into t (id,a) values (443,17);
+insert into t (id,a) values (443,18);
+insert into t (id,a) values (443,19);
+insert into t (id,a) values (443,20);
+insert into t (id,a) values (443,21);
+insert into t (id,a) values (443,22);
+insert into t (id,a) values (443,23);
+insert into t (id,a) values (443,24);
+insert into t (id,a) values (443,25);
+insert into t (id,a) values (443,26);
+insert into t (id,a) values (443,27);
+insert into t (id,a) values (443,28);
+insert into t (id,a) values (443,29);
+insert into t (id,a) values (443,30);
+insert into t (id,a) values (443,31);
+insert into t (id,a) values (443,32);
+insert into t (id,a) values (443,33);
+insert into t (id,a) values (443,34);
+insert into t (id,a) values (443,35);
+insert into t (id,a) values (443,36);
+insert into t (id,a) values (443,37);
+insert into t (id,a) values (443,38);
+insert into t (id,a) values (443,39);
+insert into t (id,a) values (443,40);
+insert into t (id,a) values (443,41);
+insert into t (id,a) values (443,42);
+insert into t (id,a) values (443,43);
+insert into t (id,a) values (443,44);
+insert into t (id,a) values (443,45);
+insert into t (id,a) values (443,46);
+insert into t (id,a) values (443,47);
+insert into t (id,a) values (443,48);
+insert into t (id,a) values (443,49);
+insert into t (id,a) values (443,50);
+insert into t (id,a) values (443,51);
+insert into t (id,a) values (443,52);
+insert into t (id,a) values (443,53);
+insert into t (id,a) values (443,54);
+insert into t (id,a) values (443,55);
+insert into t (id,a) values (443,56);
+insert into t (id,a) values (443,57);
+insert into t (id,a) values (443,58);
+insert into t (id,a) values (443,59);
+insert into t (id,a) values (443,60);
+insert into t (id,a) values (443,61);
+insert into t (id,a) values (443,62);
+insert into t (id,a) values (443,63);
+insert into t (id,a) values (443,64);
+insert into t (id,a) values (443,65);
+insert into t (id,a) values (443,66);
+insert into t (id,a) values (443,67);
+insert into t (id,a) values (443,68);
+insert into t (id,a) values (443,69);
+insert into t (id,a) values (443,70);
+insert into t (id,a) values (443,71);
+insert into t (id,a) values (443,72);
+insert into t (id,a) values (443,73);
+insert into t (id,a) values (443,74);
+insert into t (id,a) values (443,75);
+insert into t (id,a) values (443,76);
+insert into t (id,a) values (443,77);
+insert into t (id,a) values (443,78);
+insert into t (id,a) values (443,79);
+insert into t (id,a) values (443,80);
+insert into t (id,a) values (443,81);
+insert into t (id,a) values (443,82);
+insert into t (id,a) values (443,83);
+insert into t (id,a) values (443,84);
+insert into t (id,a) values (443,85);
+insert into t (id,a) values (443,86);
+insert into t (id,a) values (443,87);
+insert into t (id,a) values (443,88);
+insert into t (id,a) values (443,89);
+insert into t (id,a) values (443,90);
+insert into t (id,a) values (443,91);
+insert into t (id,a) values (443,92);
+insert into t (id,a) values (443,93);
+insert into t (id,a) values (443,94);
+insert into t (id,a) values (443,95);
+insert into t (id,a) values (443,96);
+insert into t (id,a) values (443,97);
+insert into t (id,a) values (443,98);
+insert into t (id,a) values (443,99);
+insert into t (id,a) values (444,0);
+insert into t (id,a) values (444,1);
+insert into t (id,a) values (444,2);
+insert into t (id,a) values (444,3);
+insert into t (id,a) values (444,4);
+insert into t (id,a) values (444,5);
+insert into t (id,a) values (444,6);
+insert into t (id,a) values (444,7);
+insert into t (id,a) values (444,8);
+insert into t (id,a) values (444,9);
+insert into t (id,a) values (444,10);
+insert into t (id,a) values (444,11);
+insert into t (id,a) values (444,12);
+insert into t (id,a) values (444,13);
+insert into t (id,a) values (444,14);
+insert into t (id,a) values (444,15);
+insert into t (id,a) values (444,16);
+insert into t (id,a) values (444,17);
+insert into t (id,a) values (444,18);
+insert into t (id,a) values (444,19);
+insert into t (id,a) values (444,20);
+insert into t (id,a) values (444,21);
+insert into t (id,a) values (444,22);
+insert into t (id,a) values (444,23);
+insert into t (id,a) values (444,24);
+insert into t (id,a) values (444,25);
+insert into t (id,a) values (444,26);
+insert into t (id,a) values (444,27);
+insert into t (id,a) values (444,28);
+insert into t (id,a) values (444,29);
+insert into t (id,a) values (444,30);
+insert into t (id,a) values (444,31);
+insert into t (id,a) values (444,32);
+insert into t (id,a) values (444,33);
+insert into t (id,a) values (444,34);
+insert into t (id,a) values (444,35);
+insert into t (id,a) values (444,36);
+insert into t (id,a) values (444,37);
+insert into t (id,a) values (444,38);
+insert into t (id,a) values (444,39);
+insert into t (id,a) values (444,40);
+insert into t (id,a) values (444,41);
+insert into t (id,a) values (444,42);
+insert into t (id,a) values (444,43);
+insert into t (id,a) values (444,44);
+insert into t (id,a) values (444,45);
+insert into t (id,a) values (444,46);
+insert into t (id,a) values (444,47);
+insert into t (id,a) values (444,48);
+insert into t (id,a) values (444,49);
+insert into t (id,a) values (444,50);
+insert into t (id,a) values (444,51);
+insert into t (id,a) values (444,52);
+insert into t (id,a) values (444,53);
+insert into t (id,a) values (444,54);
+insert into t (id,a) values (444,55);
+insert into t (id,a) values (444,56);
+insert into t (id,a) values (444,57);
+insert into t (id,a) values (444,58);
+insert into t (id,a) values (444,59);
+insert into t (id,a) values (444,60);
+insert into t (id,a) values (444,61);
+insert into t (id,a) values (444,62);
+insert into t (id,a) values (444,63);
+insert into t (id,a) values (444,64);
+insert into t (id,a) values (444,65);
+insert into t (id,a) values (444,66);
+insert into t (id,a) values (444,67);
+insert into t (id,a) values (444,68);
+insert into t (id,a) values (444,69);
+insert into t (id,a) values (444,70);
+insert into t (id,a) values (444,71);
+insert into t (id,a) values (444,72);
+insert into t (id,a) values (444,73);
+insert into t (id,a) values (444,74);
+insert into t (id,a) values (444,75);
+insert into t (id,a) values (444,76);
+insert into t (id,a) values (444,77);
+insert into t (id,a) values (444,78);
+insert into t (id,a) values (444,79);
+insert into t (id,a) values (444,80);
+insert into t (id,a) values (444,81);
+insert into t (id,a) values (444,82);
+insert into t (id,a) values (444,83);
+insert into t (id,a) values (444,84);
+insert into t (id,a) values (444,85);
+insert into t (id,a) values (444,86);
+insert into t (id,a) values (444,87);
+insert into t (id,a) values (444,88);
+insert into t (id,a) values (444,89);
+insert into t (id,a) values (444,90);
+insert into t (id,a) values (444,91);
+insert into t (id,a) values (444,92);
+insert into t (id,a) values (444,93);
+insert into t (id,a) values (444,94);
+insert into t (id,a) values (444,95);
+insert into t (id,a) values (444,96);
+insert into t (id,a) values (444,97);
+insert into t (id,a) values (444,98);
+insert into t (id,a) values (444,99);
+insert into t (id,a) values (445,0);
+insert into t (id,a) values (445,1);
+insert into t (id,a) values (445,2);
+insert into t (id,a) values (445,3);
+insert into t (id,a) values (445,4);
+insert into t (id,a) values (445,5);
+insert into t (id,a) values (445,6);
+insert into t (id,a) values (445,7);
+insert into t (id,a) values (445,8);
+insert into t (id,a) values (445,9);
+insert into t (id,a) values (445,10);
+insert into t (id,a) values (445,11);
+insert into t (id,a) values (445,12);
+insert into t (id,a) values (445,13);
+insert into t (id,a) values (445,14);
+insert into t (id,a) values (445,15);
+insert into t (id,a) values (445,16);
+insert into t (id,a) values (445,17);
+insert into t (id,a) values (445,18);
+insert into t (id,a) values (445,19);
+insert into t (id,a) values (445,20);
+insert into t (id,a) values (445,21);
+insert into t (id,a) values (445,22);
+insert into t (id,a) values (445,23);
+insert into t (id,a) values (445,24);
+insert into t (id,a) values (445,25);
+insert into t (id,a) values (445,26);
+insert into t (id,a) values (445,27);
+insert into t (id,a) values (445,28);
+insert into t (id,a) values (445,29);
+insert into t (id,a) values (445,30);
+insert into t (id,a) values (445,31);
+insert into t (id,a) values (445,32);
+insert into t (id,a) values (445,33);
+insert into t (id,a) values (445,34);
+insert into t (id,a) values (445,35);
+insert into t (id,a) values (445,36);
+insert into t (id,a) values (445,37);
+insert into t (id,a) values (445,38);
+insert into t (id,a) values (445,39);
+insert into t (id,a) values (445,40);
+insert into t (id,a) values (445,41);
+insert into t (id,a) values (445,42);
+insert into t (id,a) values (445,43);
+insert into t (id,a) values (445,44);
+insert into t (id,a) values (445,45);
+insert into t (id,a) values (445,46);
+insert into t (id,a) values (445,47);
+insert into t (id,a) values (445,48);
+insert into t (id,a) values (445,49);
+insert into t (id,a) values (445,50);
+insert into t (id,a) values (445,51);
+insert into t (id,a) values (445,52);
+insert into t (id,a) values (445,53);
+insert into t (id,a) values (445,54);
+insert into t (id,a) values (445,55);
+insert into t (id,a) values (445,56);
+insert into t (id,a) values (445,57);
+insert into t (id,a) values (445,58);
+insert into t (id,a) values (445,59);
+insert into t (id,a) values (445,60);
+insert into t (id,a) values (445,61);
+insert into t (id,a) values (445,62);
+insert into t (id,a) values (445,63);
+insert into t (id,a) values (445,64);
+insert into t (id,a) values (445,65);
+insert into t (id,a) values (445,66);
+insert into t (id,a) values (445,67);
+insert into t (id,a) values (445,68);
+insert into t (id,a) values (445,69);
+insert into t (id,a) values (445,70);
+insert into t (id,a) values (445,71);
+insert into t (id,a) values (445,72);
+insert into t (id,a) values (445,73);
+insert into t (id,a) values (445,74);
+insert into t (id,a) values (445,75);
+insert into t (id,a) values (445,76);
+insert into t (id,a) values (445,77);
+insert into t (id,a) values (445,78);
+insert into t (id,a) values (445,79);
+insert into t (id,a) values (445,80);
+insert into t (id,a) values (445,81);
+insert into t (id,a) values (445,82);
+insert into t (id,a) values (445,83);
+insert into t (id,a) values (445,84);
+insert into t (id,a) values (445,85);
+insert into t (id,a) values (445,86);
+insert into t (id,a) values (445,87);
+insert into t (id,a) values (445,88);
+insert into t (id,a) values (445,89);
+insert into t (id,a) values (445,90);
+insert into t (id,a) values (445,91);
+insert into t (id,a) values (445,92);
+insert into t (id,a) values (445,93);
+insert into t (id,a) values (445,94);
+insert into t (id,a) values (445,95);
+insert into t (id,a) values (445,96);
+insert into t (id,a) values (445,97);
+insert into t (id,a) values (445,98);
+insert into t (id,a) values (445,99);
+insert into t (id,a) values (446,0);
+insert into t (id,a) values (446,1);
+insert into t (id,a) values (446,2);
+insert into t (id,a) values (446,3);
+insert into t (id,a) values (446,4);
+insert into t (id,a) values (446,5);
+insert into t (id,a) values (446,6);
+insert into t (id,a) values (446,7);
+insert into t (id,a) values (446,8);
+insert into t (id,a) values (446,9);
+insert into t (id,a) values (446,10);
+insert into t (id,a) values (446,11);
+insert into t (id,a) values (446,12);
+insert into t (id,a) values (446,13);
+insert into t (id,a) values (446,14);
+insert into t (id,a) values (446,15);
+insert into t (id,a) values (446,16);
+insert into t (id,a) values (446,17);
+insert into t (id,a) values (446,18);
+insert into t (id,a) values (446,19);
+insert into t (id,a) values (446,20);
+insert into t (id,a) values (446,21);
+insert into t (id,a) values (446,22);
+insert into t (id,a) values (446,23);
+insert into t (id,a) values (446,24);
+insert into t (id,a) values (446,25);
+insert into t (id,a) values (446,26);
+insert into t (id,a) values (446,27);
+insert into t (id,a) values (446,28);
+insert into t (id,a) values (446,29);
+insert into t (id,a) values (446,30);
+insert into t (id,a) values (446,31);
+insert into t (id,a) values (446,32);
+insert into t (id,a) values (446,33);
+insert into t (id,a) values (446,34);
+insert into t (id,a) values (446,35);
+insert into t (id,a) values (446,36);
+insert into t (id,a) values (446,37);
+insert into t (id,a) values (446,38);
+insert into t (id,a) values (446,39);
+insert into t (id,a) values (446,40);
+insert into t (id,a) values (446,41);
+insert into t (id,a) values (446,42);
+insert into t (id,a) values (446,43);
+insert into t (id,a) values (446,44);
+insert into t (id,a) values (446,45);
+insert into t (id,a) values (446,46);
+insert into t (id,a) values (446,47);
+insert into t (id,a) values (446,48);
+insert into t (id,a) values (446,49);
+insert into t (id,a) values (446,50);
+insert into t (id,a) values (446,51);
+insert into t (id,a) values (446,52);
+insert into t (id,a) values (446,53);
+insert into t (id,a) values (446,54);
+insert into t (id,a) values (446,55);
+insert into t (id,a) values (446,56);
+insert into t (id,a) values (446,57);
+insert into t (id,a) values (446,58);
+insert into t (id,a) values (446,59);
+insert into t (id,a) values (446,60);
+insert into t (id,a) values (446,61);
+insert into t (id,a) values (446,62);
+insert into t (id,a) values (446,63);
+insert into t (id,a) values (446,64);
+insert into t (id,a) values (446,65);
+insert into t (id,a) values (446,66);
+insert into t (id,a) values (446,67);
+insert into t (id,a) values (446,68);
+insert into t (id,a) values (446,69);
+insert into t (id,a) values (446,70);
+insert into t (id,a) values (446,71);
+insert into t (id,a) values (446,72);
+insert into t (id,a) values (446,73);
+insert into t (id,a) values (446,74);
+insert into t (id,a) values (446,75);
+insert into t (id,a) values (446,76);
+insert into t (id,a) values (446,77);
+insert into t (id,a) values (446,78);
+insert into t (id,a) values (446,79);
+insert into t (id,a) values (446,80);
+insert into t (id,a) values (446,81);
+insert into t (id,a) values (446,82);
+insert into t (id,a) values (446,83);
+insert into t (id,a) values (446,84);
+insert into t (id,a) values (446,85);
+insert into t (id,a) values (446,86);
+insert into t (id,a) values (446,87);
+insert into t (id,a) values (446,88);
+insert into t (id,a) values (446,89);
+insert into t (id,a) values (446,90);
+insert into t (id,a) values (446,91);
+insert into t (id,a) values (446,92);
+insert into t (id,a) values (446,93);
+insert into t (id,a) values (446,94);
+insert into t (id,a) values (446,95);
+insert into t (id,a) values (446,96);
+insert into t (id,a) values (446,97);
+insert into t (id,a) values (446,98);
+insert into t (id,a) values (446,99);
+insert into t (id,a) values (447,0);
+insert into t (id,a) values (447,1);
+insert into t (id,a) values (447,2);
+insert into t (id,a) values (447,3);
+insert into t (id,a) values (447,4);
+insert into t (id,a) values (447,5);
+insert into t (id,a) values (447,6);
+insert into t (id,a) values (447,7);
+insert into t (id,a) values (447,8);
+insert into t (id,a) values (447,9);
+insert into t (id,a) values (447,10);
+insert into t (id,a) values (447,11);
+insert into t (id,a) values (447,12);
+insert into t (id,a) values (447,13);
+insert into t (id,a) values (447,14);
+insert into t (id,a) values (447,15);
+insert into t (id,a) values (447,16);
+insert into t (id,a) values (447,17);
+insert into t (id,a) values (447,18);
+insert into t (id,a) values (447,19);
+insert into t (id,a) values (447,20);
+insert into t (id,a) values (447,21);
+insert into t (id,a) values (447,22);
+insert into t (id,a) values (447,23);
+insert into t (id,a) values (447,24);
+insert into t (id,a) values (447,25);
+insert into t (id,a) values (447,26);
+insert into t (id,a) values (447,27);
+insert into t (id,a) values (447,28);
+insert into t (id,a) values (447,29);
+insert into t (id,a) values (447,30);
+insert into t (id,a) values (447,31);
+insert into t (id,a) values (447,32);
+insert into t (id,a) values (447,33);
+insert into t (id,a) values (447,34);
+insert into t (id,a) values (447,35);
+insert into t (id,a) values (447,36);
+insert into t (id,a) values (447,37);
+insert into t (id,a) values (447,38);
+insert into t (id,a) values (447,39);
+insert into t (id,a) values (447,40);
+insert into t (id,a) values (447,41);
+insert into t (id,a) values (447,42);
+insert into t (id,a) values (447,43);
+insert into t (id,a) values (447,44);
+insert into t (id,a) values (447,45);
+insert into t (id,a) values (447,46);
+insert into t (id,a) values (447,47);
+insert into t (id,a) values (447,48);
+insert into t (id,a) values (447,49);
+insert into t (id,a) values (447,50);
+insert into t (id,a) values (447,51);
+insert into t (id,a) values (447,52);
+insert into t (id,a) values (447,53);
+insert into t (id,a) values (447,54);
+insert into t (id,a) values (447,55);
+insert into t (id,a) values (447,56);
+insert into t (id,a) values (447,57);
+insert into t (id,a) values (447,58);
+insert into t (id,a) values (447,59);
+insert into t (id,a) values (447,60);
+insert into t (id,a) values (447,61);
+insert into t (id,a) values (447,62);
+insert into t (id,a) values (447,63);
+insert into t (id,a) values (447,64);
+insert into t (id,a) values (447,65);
+insert into t (id,a) values (447,66);
+insert into t (id,a) values (447,67);
+insert into t (id,a) values (447,68);
+insert into t (id,a) values (447,69);
+insert into t (id,a) values (447,70);
+insert into t (id,a) values (447,71);
+insert into t (id,a) values (447,72);
+insert into t (id,a) values (447,73);
+insert into t (id,a) values (447,74);
+insert into t (id,a) values (447,75);
+insert into t (id,a) values (447,76);
+insert into t (id,a) values (447,77);
+insert into t (id,a) values (447,78);
+insert into t (id,a) values (447,79);
+insert into t (id,a) values (447,80);
+insert into t (id,a) values (447,81);
+insert into t (id,a) values (447,82);
+insert into t (id,a) values (447,83);
+insert into t (id,a) values (447,84);
+insert into t (id,a) values (447,85);
+insert into t (id,a) values (447,86);
+insert into t (id,a) values (447,87);
+insert into t (id,a) values (447,88);
+insert into t (id,a) values (447,89);
+insert into t (id,a) values (447,90);
+insert into t (id,a) values (447,91);
+insert into t (id,a) values (447,92);
+insert into t (id,a) values (447,93);
+insert into t (id,a) values (447,94);
+insert into t (id,a) values (447,95);
+insert into t (id,a) values (447,96);
+insert into t (id,a) values (447,97);
+insert into t (id,a) values (447,98);
+insert into t (id,a) values (447,99);
+insert into t (id,a) values (448,0);
+insert into t (id,a) values (448,1);
+insert into t (id,a) values (448,2);
+insert into t (id,a) values (448,3);
+insert into t (id,a) values (448,4);
+insert into t (id,a) values (448,5);
+insert into t (id,a) values (448,6);
+insert into t (id,a) values (448,7);
+insert into t (id,a) values (448,8);
+insert into t (id,a) values (448,9);
+insert into t (id,a) values (448,10);
+insert into t (id,a) values (448,11);
+insert into t (id,a) values (448,12);
+insert into t (id,a) values (448,13);
+insert into t (id,a) values (448,14);
+insert into t (id,a) values (448,15);
+insert into t (id,a) values (448,16);
+insert into t (id,a) values (448,17);
+insert into t (id,a) values (448,18);
+insert into t (id,a) values (448,19);
+insert into t (id,a) values (448,20);
+insert into t (id,a) values (448,21);
+insert into t (id,a) values (448,22);
+insert into t (id,a) values (448,23);
+insert into t (id,a) values (448,24);
+insert into t (id,a) values (448,25);
+insert into t (id,a) values (448,26);
+insert into t (id,a) values (448,27);
+insert into t (id,a) values (448,28);
+insert into t (id,a) values (448,29);
+insert into t (id,a) values (448,30);
+insert into t (id,a) values (448,31);
+insert into t (id,a) values (448,32);
+insert into t (id,a) values (448,33);
+insert into t (id,a) values (448,34);
+insert into t (id,a) values (448,35);
+insert into t (id,a) values (448,36);
+insert into t (id,a) values (448,37);
+insert into t (id,a) values (448,38);
+insert into t (id,a) values (448,39);
+insert into t (id,a) values (448,40);
+insert into t (id,a) values (448,41);
+insert into t (id,a) values (448,42);
+insert into t (id,a) values (448,43);
+insert into t (id,a) values (448,44);
+insert into t (id,a) values (448,45);
+insert into t (id,a) values (448,46);
+insert into t (id,a) values (448,47);
+insert into t (id,a) values (448,48);
+insert into t (id,a) values (448,49);
+insert into t (id,a) values (448,50);
+insert into t (id,a) values (448,51);
+insert into t (id,a) values (448,52);
+insert into t (id,a) values (448,53);
+insert into t (id,a) values (448,54);
+insert into t (id,a) values (448,55);
+insert into t (id,a) values (448,56);
+insert into t (id,a) values (448,57);
+insert into t (id,a) values (448,58);
+insert into t (id,a) values (448,59);
+insert into t (id,a) values (448,60);
+insert into t (id,a) values (448,61);
+insert into t (id,a) values (448,62);
+insert into t (id,a) values (448,63);
+insert into t (id,a) values (448,64);
+insert into t (id,a) values (448,65);
+insert into t (id,a) values (448,66);
+insert into t (id,a) values (448,67);
+insert into t (id,a) values (448,68);
+insert into t (id,a) values (448,69);
+insert into t (id,a) values (448,70);
+insert into t (id,a) values (448,71);
+insert into t (id,a) values (448,72);
+insert into t (id,a) values (448,73);
+insert into t (id,a) values (448,74);
+insert into t (id,a) values (448,75);
+insert into t (id,a) values (448,76);
+insert into t (id,a) values (448,77);
+insert into t (id,a) values (448,78);
+insert into t (id,a) values (448,79);
+insert into t (id,a) values (448,80);
+insert into t (id,a) values (448,81);
+insert into t (id,a) values (448,82);
+insert into t (id,a) values (448,83);
+insert into t (id,a) values (448,84);
+insert into t (id,a) values (448,85);
+insert into t (id,a) values (448,86);
+insert into t (id,a) values (448,87);
+insert into t (id,a) values (448,88);
+insert into t (id,a) values (448,89);
+insert into t (id,a) values (448,90);
+insert into t (id,a) values (448,91);
+insert into t (id,a) values (448,92);
+insert into t (id,a) values (448,93);
+insert into t (id,a) values (448,94);
+insert into t (id,a) values (448,95);
+insert into t (id,a) values (448,96);
+insert into t (id,a) values (448,97);
+insert into t (id,a) values (448,98);
+insert into t (id,a) values (448,99);
+insert into t (id,a) values (449,0);
+insert into t (id,a) values (449,1);
+insert into t (id,a) values (449,2);
+insert into t (id,a) values (449,3);
+insert into t (id,a) values (449,4);
+insert into t (id,a) values (449,5);
+insert into t (id,a) values (449,6);
+insert into t (id,a) values (449,7);
+insert into t (id,a) values (449,8);
+insert into t (id,a) values (449,9);
+insert into t (id,a) values (449,10);
+insert into t (id,a) values (449,11);
+insert into t (id,a) values (449,12);
+insert into t (id,a) values (449,13);
+insert into t (id,a) values (449,14);
+insert into t (id,a) values (449,15);
+insert into t (id,a) values (449,16);
+insert into t (id,a) values (449,17);
+insert into t (id,a) values (449,18);
+insert into t (id,a) values (449,19);
+insert into t (id,a) values (449,20);
+insert into t (id,a) values (449,21);
+insert into t (id,a) values (449,22);
+insert into t (id,a) values (449,23);
+insert into t (id,a) values (449,24);
+insert into t (id,a) values (449,25);
+insert into t (id,a) values (449,26);
+insert into t (id,a) values (449,27);
+insert into t (id,a) values (449,28);
+insert into t (id,a) values (449,29);
+insert into t (id,a) values (449,30);
+insert into t (id,a) values (449,31);
+insert into t (id,a) values (449,32);
+insert into t (id,a) values (449,33);
+insert into t (id,a) values (449,34);
+insert into t (id,a) values (449,35);
+insert into t (id,a) values (449,36);
+insert into t (id,a) values (449,37);
+insert into t (id,a) values (449,38);
+insert into t (id,a) values (449,39);
+insert into t (id,a) values (449,40);
+insert into t (id,a) values (449,41);
+insert into t (id,a) values (449,42);
+insert into t (id,a) values (449,43);
+insert into t (id,a) values (449,44);
+insert into t (id,a) values (449,45);
+insert into t (id,a) values (449,46);
+insert into t (id,a) values (449,47);
+insert into t (id,a) values (449,48);
+insert into t (id,a) values (449,49);
+insert into t (id,a) values (449,50);
+insert into t (id,a) values (449,51);
+insert into t (id,a) values (449,52);
+insert into t (id,a) values (449,53);
+insert into t (id,a) values (449,54);
+insert into t (id,a) values (449,55);
+insert into t (id,a) values (449,56);
+insert into t (id,a) values (449,57);
+insert into t (id,a) values (449,58);
+insert into t (id,a) values (449,59);
+insert into t (id,a) values (449,60);
+insert into t (id,a) values (449,61);
+insert into t (id,a) values (449,62);
+insert into t (id,a) values (449,63);
+insert into t (id,a) values (449,64);
+insert into t (id,a) values (449,65);
+insert into t (id,a) values (449,66);
+insert into t (id,a) values (449,67);
+insert into t (id,a) values (449,68);
+insert into t (id,a) values (449,69);
+insert into t (id,a) values (449,70);
+insert into t (id,a) values (449,71);
+insert into t (id,a) values (449,72);
+insert into t (id,a) values (449,73);
+insert into t (id,a) values (449,74);
+insert into t (id,a) values (449,75);
+insert into t (id,a) values (449,76);
+insert into t (id,a) values (449,77);
+insert into t (id,a) values (449,78);
+insert into t (id,a) values (449,79);
+insert into t (id,a) values (449,80);
+insert into t (id,a) values (449,81);
+insert into t (id,a) values (449,82);
+insert into t (id,a) values (449,83);
+insert into t (id,a) values (449,84);
+insert into t (id,a) values (449,85);
+insert into t (id,a) values (449,86);
+insert into t (id,a) values (449,87);
+insert into t (id,a) values (449,88);
+insert into t (id,a) values (449,89);
+insert into t (id,a) values (449,90);
+insert into t (id,a) values (449,91);
+insert into t (id,a) values (449,92);
+insert into t (id,a) values (449,93);
+insert into t (id,a) values (449,94);
+insert into t (id,a) values (449,95);
+insert into t (id,a) values (449,96);
+insert into t (id,a) values (449,97);
+insert into t (id,a) values (449,98);
+insert into t (id,a) values (449,99);
+insert into t (id,a) values (450,0);
+insert into t (id,a) values (450,1);
+insert into t (id,a) values (450,2);
+insert into t (id,a) values (450,3);
+insert into t (id,a) values (450,4);
+insert into t (id,a) values (450,5);
+insert into t (id,a) values (450,6);
+insert into t (id,a) values (450,7);
+insert into t (id,a) values (450,8);
+insert into t (id,a) values (450,9);
+insert into t (id,a) values (450,10);
+insert into t (id,a) values (450,11);
+insert into t (id,a) values (450,12);
+insert into t (id,a) values (450,13);
+insert into t (id,a) values (450,14);
+insert into t (id,a) values (450,15);
+insert into t (id,a) values (450,16);
+insert into t (id,a) values (450,17);
+insert into t (id,a) values (450,18);
+insert into t (id,a) values (450,19);
+insert into t (id,a) values (450,20);
+insert into t (id,a) values (450,21);
+insert into t (id,a) values (450,22);
+insert into t (id,a) values (450,23);
+insert into t (id,a) values (450,24);
+insert into t (id,a) values (450,25);
+insert into t (id,a) values (450,26);
+insert into t (id,a) values (450,27);
+insert into t (id,a) values (450,28);
+insert into t (id,a) values (450,29);
+insert into t (id,a) values (450,30);
+insert into t (id,a) values (450,31);
+insert into t (id,a) values (450,32);
+insert into t (id,a) values (450,33);
+insert into t (id,a) values (450,34);
+insert into t (id,a) values (450,35);
+insert into t (id,a) values (450,36);
+insert into t (id,a) values (450,37);
+insert into t (id,a) values (450,38);
+insert into t (id,a) values (450,39);
+insert into t (id,a) values (450,40);
+insert into t (id,a) values (450,41);
+insert into t (id,a) values (450,42);
+insert into t (id,a) values (450,43);
+insert into t (id,a) values (450,44);
+insert into t (id,a) values (450,45);
+insert into t (id,a) values (450,46);
+insert into t (id,a) values (450,47);
+insert into t (id,a) values (450,48);
+insert into t (id,a) values (450,49);
+insert into t (id,a) values (450,50);
+insert into t (id,a) values (450,51);
+insert into t (id,a) values (450,52);
+insert into t (id,a) values (450,53);
+insert into t (id,a) values (450,54);
+insert into t (id,a) values (450,55);
+insert into t (id,a) values (450,56);
+insert into t (id,a) values (450,57);
+insert into t (id,a) values (450,58);
+insert into t (id,a) values (450,59);
+insert into t (id,a) values (450,60);
+insert into t (id,a) values (450,61);
+insert into t (id,a) values (450,62);
+insert into t (id,a) values (450,63);
+insert into t (id,a) values (450,64);
+insert into t (id,a) values (450,65);
+insert into t (id,a) values (450,66);
+insert into t (id,a) values (450,67);
+insert into t (id,a) values (450,68);
+insert into t (id,a) values (450,69);
+insert into t (id,a) values (450,70);
+insert into t (id,a) values (450,71);
+insert into t (id,a) values (450,72);
+insert into t (id,a) values (450,73);
+insert into t (id,a) values (450,74);
+insert into t (id,a) values (450,75);
+insert into t (id,a) values (450,76);
+insert into t (id,a) values (450,77);
+insert into t (id,a) values (450,78);
+insert into t (id,a) values (450,79);
+insert into t (id,a) values (450,80);
+insert into t (id,a) values (450,81);
+insert into t (id,a) values (450,82);
+insert into t (id,a) values (450,83);
+insert into t (id,a) values (450,84);
+insert into t (id,a) values (450,85);
+insert into t (id,a) values (450,86);
+insert into t (id,a) values (450,87);
+insert into t (id,a) values (450,88);
+insert into t (id,a) values (450,89);
+insert into t (id,a) values (450,90);
+insert into t (id,a) values (450,91);
+insert into t (id,a) values (450,92);
+insert into t (id,a) values (450,93);
+insert into t (id,a) values (450,94);
+insert into t (id,a) values (450,95);
+insert into t (id,a) values (450,96);
+insert into t (id,a) values (450,97);
+insert into t (id,a) values (450,98);
+insert into t (id,a) values (450,99);
+insert into t (id,a) values (451,0);
+insert into t (id,a) values (451,1);
+insert into t (id,a) values (451,2);
+insert into t (id,a) values (451,3);
+insert into t (id,a) values (451,4);
+insert into t (id,a) values (451,5);
+insert into t (id,a) values (451,6);
+insert into t (id,a) values (451,7);
+insert into t (id,a) values (451,8);
+insert into t (id,a) values (451,9);
+insert into t (id,a) values (451,10);
+insert into t (id,a) values (451,11);
+insert into t (id,a) values (451,12);
+insert into t (id,a) values (451,13);
+insert into t (id,a) values (451,14);
+insert into t (id,a) values (451,15);
+insert into t (id,a) values (451,16);
+insert into t (id,a) values (451,17);
+insert into t (id,a) values (451,18);
+insert into t (id,a) values (451,19);
+insert into t (id,a) values (451,20);
+insert into t (id,a) values (451,21);
+insert into t (id,a) values (451,22);
+insert into t (id,a) values (451,23);
+insert into t (id,a) values (451,24);
+insert into t (id,a) values (451,25);
+insert into t (id,a) values (451,26);
+insert into t (id,a) values (451,27);
+insert into t (id,a) values (451,28);
+insert into t (id,a) values (451,29);
+insert into t (id,a) values (451,30);
+insert into t (id,a) values (451,31);
+insert into t (id,a) values (451,32);
+insert into t (id,a) values (451,33);
+insert into t (id,a) values (451,34);
+insert into t (id,a) values (451,35);
+insert into t (id,a) values (451,36);
+insert into t (id,a) values (451,37);
+insert into t (id,a) values (451,38);
+insert into t (id,a) values (451,39);
+insert into t (id,a) values (451,40);
+insert into t (id,a) values (451,41);
+insert into t (id,a) values (451,42);
+insert into t (id,a) values (451,43);
+insert into t (id,a) values (451,44);
+insert into t (id,a) values (451,45);
+insert into t (id,a) values (451,46);
+insert into t (id,a) values (451,47);
+insert into t (id,a) values (451,48);
+insert into t (id,a) values (451,49);
+insert into t (id,a) values (451,50);
+insert into t (id,a) values (451,51);
+insert into t (id,a) values (451,52);
+insert into t (id,a) values (451,53);
+insert into t (id,a) values (451,54);
+insert into t (id,a) values (451,55);
+insert into t (id,a) values (451,56);
+insert into t (id,a) values (451,57);
+insert into t (id,a) values (451,58);
+insert into t (id,a) values (451,59);
+insert into t (id,a) values (451,60);
+insert into t (id,a) values (451,61);
+insert into t (id,a) values (451,62);
+insert into t (id,a) values (451,63);
+insert into t (id,a) values (451,64);
+insert into t (id,a) values (451,65);
+insert into t (id,a) values (451,66);
+insert into t (id,a) values (451,67);
+insert into t (id,a) values (451,68);
+insert into t (id,a) values (451,69);
+insert into t (id,a) values (451,70);
+insert into t (id,a) values (451,71);
+insert into t (id,a) values (451,72);
+insert into t (id,a) values (451,73);
+insert into t (id,a) values (451,74);
+insert into t (id,a) values (451,75);
+insert into t (id,a) values (451,76);
+insert into t (id,a) values (451,77);
+insert into t (id,a) values (451,78);
+insert into t (id,a) values (451,79);
+insert into t (id,a) values (451,80);
+insert into t (id,a) values (451,81);
+insert into t (id,a) values (451,82);
+insert into t (id,a) values (451,83);
+insert into t (id,a) values (451,84);
+insert into t (id,a) values (451,85);
+insert into t (id,a) values (451,86);
+insert into t (id,a) values (451,87);
+insert into t (id,a) values (451,88);
+insert into t (id,a) values (451,89);
+insert into t (id,a) values (451,90);
+insert into t (id,a) values (451,91);
+insert into t (id,a) values (451,92);
+insert into t (id,a) values (451,93);
+insert into t (id,a) values (451,94);
+insert into t (id,a) values (451,95);
+insert into t (id,a) values (451,96);
+insert into t (id,a) values (451,97);
+insert into t (id,a) values (451,98);
+insert into t (id,a) values (451,99);
+insert into t (id,a) values (452,0);
+insert into t (id,a) values (452,1);
+insert into t (id,a) values (452,2);
+insert into t (id,a) values (452,3);
+insert into t (id,a) values (452,4);
+insert into t (id,a) values (452,5);
+insert into t (id,a) values (452,6);
+insert into t (id,a) values (452,7);
+insert into t (id,a) values (452,8);
+insert into t (id,a) values (452,9);
+insert into t (id,a) values (452,10);
+insert into t (id,a) values (452,11);
+insert into t (id,a) values (452,12);
+insert into t (id,a) values (452,13);
+insert into t (id,a) values (452,14);
+insert into t (id,a) values (452,15);
+insert into t (id,a) values (452,16);
+insert into t (id,a) values (452,17);
+insert into t (id,a) values (452,18);
+insert into t (id,a) values (452,19);
+insert into t (id,a) values (452,20);
+insert into t (id,a) values (452,21);
+insert into t (id,a) values (452,22);
+insert into t (id,a) values (452,23);
+insert into t (id,a) values (452,24);
+insert into t (id,a) values (452,25);
+insert into t (id,a) values (452,26);
+insert into t (id,a) values (452,27);
+insert into t (id,a) values (452,28);
+insert into t (id,a) values (452,29);
+insert into t (id,a) values (452,30);
+insert into t (id,a) values (452,31);
+insert into t (id,a) values (452,32);
+insert into t (id,a) values (452,33);
+insert into t (id,a) values (452,34);
+insert into t (id,a) values (452,35);
+insert into t (id,a) values (452,36);
+insert into t (id,a) values (452,37);
+insert into t (id,a) values (452,38);
+insert into t (id,a) values (452,39);
+insert into t (id,a) values (452,40);
+insert into t (id,a) values (452,41);
+insert into t (id,a) values (452,42);
+insert into t (id,a) values (452,43);
+insert into t (id,a) values (452,44);
+insert into t (id,a) values (452,45);
+insert into t (id,a) values (452,46);
+insert into t (id,a) values (452,47);
+insert into t (id,a) values (452,48);
+insert into t (id,a) values (452,49);
+insert into t (id,a) values (452,50);
+insert into t (id,a) values (452,51);
+insert into t (id,a) values (452,52);
+insert into t (id,a) values (452,53);
+insert into t (id,a) values (452,54);
+insert into t (id,a) values (452,55);
+insert into t (id,a) values (452,56);
+insert into t (id,a) values (452,57);
+insert into t (id,a) values (452,58);
+insert into t (id,a) values (452,59);
+insert into t (id,a) values (452,60);
+insert into t (id,a) values (452,61);
+insert into t (id,a) values (452,62);
+insert into t (id,a) values (452,63);
+insert into t (id,a) values (452,64);
+insert into t (id,a) values (452,65);
+insert into t (id,a) values (452,66);
+insert into t (id,a) values (452,67);
+insert into t (id,a) values (452,68);
+insert into t (id,a) values (452,69);
+insert into t (id,a) values (452,70);
+insert into t (id,a) values (452,71);
+insert into t (id,a) values (452,72);
+insert into t (id,a) values (452,73);
+insert into t (id,a) values (452,74);
+insert into t (id,a) values (452,75);
+insert into t (id,a) values (452,76);
+insert into t (id,a) values (452,77);
+insert into t (id,a) values (452,78);
+insert into t (id,a) values (452,79);
+insert into t (id,a) values (452,80);
+insert into t (id,a) values (452,81);
+insert into t (id,a) values (452,82);
+insert into t (id,a) values (452,83);
+insert into t (id,a) values (452,84);
+insert into t (id,a) values (452,85);
+insert into t (id,a) values (452,86);
+insert into t (id,a) values (452,87);
+insert into t (id,a) values (452,88);
+insert into t (id,a) values (452,89);
+insert into t (id,a) values (452,90);
+insert into t (id,a) values (452,91);
+insert into t (id,a) values (452,92);
+insert into t (id,a) values (452,93);
+insert into t (id,a) values (452,94);
+insert into t (id,a) values (452,95);
+insert into t (id,a) values (452,96);
+insert into t (id,a) values (452,97);
+insert into t (id,a) values (452,98);
+insert into t (id,a) values (452,99);
+insert into t (id,a) values (453,0);
+insert into t (id,a) values (453,1);
+insert into t (id,a) values (453,2);
+insert into t (id,a) values (453,3);
+insert into t (id,a) values (453,4);
+insert into t (id,a) values (453,5);
+insert into t (id,a) values (453,6);
+insert into t (id,a) values (453,7);
+insert into t (id,a) values (453,8);
+insert into t (id,a) values (453,9);
+insert into t (id,a) values (453,10);
+insert into t (id,a) values (453,11);
+insert into t (id,a) values (453,12);
+insert into t (id,a) values (453,13);
+insert into t (id,a) values (453,14);
+insert into t (id,a) values (453,15);
+insert into t (id,a) values (453,16);
+insert into t (id,a) values (453,17);
+insert into t (id,a) values (453,18);
+insert into t (id,a) values (453,19);
+insert into t (id,a) values (453,20);
+insert into t (id,a) values (453,21);
+insert into t (id,a) values (453,22);
+insert into t (id,a) values (453,23);
+insert into t (id,a) values (453,24);
+insert into t (id,a) values (453,25);
+insert into t (id,a) values (453,26);
+insert into t (id,a) values (453,27);
+insert into t (id,a) values (453,28);
+insert into t (id,a) values (453,29);
+insert into t (id,a) values (453,30);
+insert into t (id,a) values (453,31);
+insert into t (id,a) values (453,32);
+insert into t (id,a) values (453,33);
+insert into t (id,a) values (453,34);
+insert into t (id,a) values (453,35);
+insert into t (id,a) values (453,36);
+insert into t (id,a) values (453,37);
+insert into t (id,a) values (453,38);
+insert into t (id,a) values (453,39);
+insert into t (id,a) values (453,40);
+insert into t (id,a) values (453,41);
+insert into t (id,a) values (453,42);
+insert into t (id,a) values (453,43);
+insert into t (id,a) values (453,44);
+insert into t (id,a) values (453,45);
+insert into t (id,a) values (453,46);
+insert into t (id,a) values (453,47);
+insert into t (id,a) values (453,48);
+insert into t (id,a) values (453,49);
+insert into t (id,a) values (453,50);
+insert into t (id,a) values (453,51);
+insert into t (id,a) values (453,52);
+insert into t (id,a) values (453,53);
+insert into t (id,a) values (453,54);
+insert into t (id,a) values (453,55);
+insert into t (id,a) values (453,56);
+insert into t (id,a) values (453,57);
+insert into t (id,a) values (453,58);
+insert into t (id,a) values (453,59);
+insert into t (id,a) values (453,60);
+insert into t (id,a) values (453,61);
+insert into t (id,a) values (453,62);
+insert into t (id,a) values (453,63);
+insert into t (id,a) values (453,64);
+insert into t (id,a) values (453,65);
+insert into t (id,a) values (453,66);
+insert into t (id,a) values (453,67);
+insert into t (id,a) values (453,68);
+insert into t (id,a) values (453,69);
+insert into t (id,a) values (453,70);
+insert into t (id,a) values (453,71);
+insert into t (id,a) values (453,72);
+insert into t (id,a) values (453,73);
+insert into t (id,a) values (453,74);
+insert into t (id,a) values (453,75);
+insert into t (id,a) values (453,76);
+insert into t (id,a) values (453,77);
+insert into t (id,a) values (453,78);
+insert into t (id,a) values (453,79);
+insert into t (id,a) values (453,80);
+insert into t (id,a) values (453,81);
+insert into t (id,a) values (453,82);
+insert into t (id,a) values (453,83);
+insert into t (id,a) values (453,84);
+insert into t (id,a) values (453,85);
+insert into t (id,a) values (453,86);
+insert into t (id,a) values (453,87);
+insert into t (id,a) values (453,88);
+insert into t (id,a) values (453,89);
+insert into t (id,a) values (453,90);
+insert into t (id,a) values (453,91);
+insert into t (id,a) values (453,92);
+insert into t (id,a) values (453,93);
+insert into t (id,a) values (453,94);
+insert into t (id,a) values (453,95);
+insert into t (id,a) values (453,96);
+insert into t (id,a) values (453,97);
+insert into t (id,a) values (453,98);
+insert into t (id,a) values (453,99);
+insert into t (id,a) values (454,0);
+insert into t (id,a) values (454,1);
+insert into t (id,a) values (454,2);
+insert into t (id,a) values (454,3);
+insert into t (id,a) values (454,4);
+insert into t (id,a) values (454,5);
+insert into t (id,a) values (454,6);
+insert into t (id,a) values (454,7);
+insert into t (id,a) values (454,8);
+insert into t (id,a) values (454,9);
+insert into t (id,a) values (454,10);
+insert into t (id,a) values (454,11);
+insert into t (id,a) values (454,12);
+insert into t (id,a) values (454,13);
+insert into t (id,a) values (454,14);
+insert into t (id,a) values (454,15);
+insert into t (id,a) values (454,16);
+insert into t (id,a) values (454,17);
+insert into t (id,a) values (454,18);
+insert into t (id,a) values (454,19);
+insert into t (id,a) values (454,20);
+insert into t (id,a) values (454,21);
+insert into t (id,a) values (454,22);
+insert into t (id,a) values (454,23);
+insert into t (id,a) values (454,24);
+insert into t (id,a) values (454,25);
+insert into t (id,a) values (454,26);
+insert into t (id,a) values (454,27);
+insert into t (id,a) values (454,28);
+insert into t (id,a) values (454,29);
+insert into t (id,a) values (454,30);
+insert into t (id,a) values (454,31);
+insert into t (id,a) values (454,32);
+insert into t (id,a) values (454,33);
+insert into t (id,a) values (454,34);
+insert into t (id,a) values (454,35);
+insert into t (id,a) values (454,36);
+insert into t (id,a) values (454,37);
+insert into t (id,a) values (454,38);
+insert into t (id,a) values (454,39);
+insert into t (id,a) values (454,40);
+insert into t (id,a) values (454,41);
+insert into t (id,a) values (454,42);
+insert into t (id,a) values (454,43);
+insert into t (id,a) values (454,44);
+insert into t (id,a) values (454,45);
+insert into t (id,a) values (454,46);
+insert into t (id,a) values (454,47);
+insert into t (id,a) values (454,48);
+insert into t (id,a) values (454,49);
+insert into t (id,a) values (454,50);
+insert into t (id,a) values (454,51);
+insert into t (id,a) values (454,52);
+insert into t (id,a) values (454,53);
+insert into t (id,a) values (454,54);
+insert into t (id,a) values (454,55);
+insert into t (id,a) values (454,56);
+insert into t (id,a) values (454,57);
+insert into t (id,a) values (454,58);
+insert into t (id,a) values (454,59);
+insert into t (id,a) values (454,60);
+insert into t (id,a) values (454,61);
+insert into t (id,a) values (454,62);
+insert into t (id,a) values (454,63);
+insert into t (id,a) values (454,64);
+insert into t (id,a) values (454,65);
+insert into t (id,a) values (454,66);
+insert into t (id,a) values (454,67);
+insert into t (id,a) values (454,68);
+insert into t (id,a) values (454,69);
+insert into t (id,a) values (454,70);
+insert into t (id,a) values (454,71);
+insert into t (id,a) values (454,72);
+insert into t (id,a) values (454,73);
+insert into t (id,a) values (454,74);
+insert into t (id,a) values (454,75);
+insert into t (id,a) values (454,76);
+insert into t (id,a) values (454,77);
+insert into t (id,a) values (454,78);
+insert into t (id,a) values (454,79);
+insert into t (id,a) values (454,80);
+insert into t (id,a) values (454,81);
+insert into t (id,a) values (454,82);
+insert into t (id,a) values (454,83);
+insert into t (id,a) values (454,84);
+insert into t (id,a) values (454,85);
+insert into t (id,a) values (454,86);
+insert into t (id,a) values (454,87);
+insert into t (id,a) values (454,88);
+insert into t (id,a) values (454,89);
+insert into t (id,a) values (454,90);
+insert into t (id,a) values (454,91);
+insert into t (id,a) values (454,92);
+insert into t (id,a) values (454,93);
+insert into t (id,a) values (454,94);
+insert into t (id,a) values (454,95);
+insert into t (id,a) values (454,96);
+insert into t (id,a) values (454,97);
+insert into t (id,a) values (454,98);
+insert into t (id,a) values (454,99);
+insert into t (id,a) values (455,0);
+insert into t (id,a) values (455,1);
+insert into t (id,a) values (455,2);
+insert into t (id,a) values (455,3);
+insert into t (id,a) values (455,4);
+insert into t (id,a) values (455,5);
+insert into t (id,a) values (455,6);
+insert into t (id,a) values (455,7);
+insert into t (id,a) values (455,8);
+insert into t (id,a) values (455,9);
+insert into t (id,a) values (455,10);
+insert into t (id,a) values (455,11);
+insert into t (id,a) values (455,12);
+insert into t (id,a) values (455,13);
+insert into t (id,a) values (455,14);
+insert into t (id,a) values (455,15);
+insert into t (id,a) values (455,16);
+insert into t (id,a) values (455,17);
+insert into t (id,a) values (455,18);
+insert into t (id,a) values (455,19);
+insert into t (id,a) values (455,20);
+insert into t (id,a) values (455,21);
+insert into t (id,a) values (455,22);
+insert into t (id,a) values (455,23);
+insert into t (id,a) values (455,24);
+insert into t (id,a) values (455,25);
+insert into t (id,a) values (455,26);
+insert into t (id,a) values (455,27);
+insert into t (id,a) values (455,28);
+insert into t (id,a) values (455,29);
+insert into t (id,a) values (455,30);
+insert into t (id,a) values (455,31);
+insert into t (id,a) values (455,32);
+insert into t (id,a) values (455,33);
+insert into t (id,a) values (455,34);
+insert into t (id,a) values (455,35);
+insert into t (id,a) values (455,36);
+insert into t (id,a) values (455,37);
+insert into t (id,a) values (455,38);
+insert into t (id,a) values (455,39);
+insert into t (id,a) values (455,40);
+insert into t (id,a) values (455,41);
+insert into t (id,a) values (455,42);
+insert into t (id,a) values (455,43);
+insert into t (id,a) values (455,44);
+insert into t (id,a) values (455,45);
+insert into t (id,a) values (455,46);
+insert into t (id,a) values (455,47);
+insert into t (id,a) values (455,48);
+insert into t (id,a) values (455,49);
+insert into t (id,a) values (455,50);
+insert into t (id,a) values (455,51);
+insert into t (id,a) values (455,52);
+insert into t (id,a) values (455,53);
+insert into t (id,a) values (455,54);
+insert into t (id,a) values (455,55);
+insert into t (id,a) values (455,56);
+insert into t (id,a) values (455,57);
+insert into t (id,a) values (455,58);
+insert into t (id,a) values (455,59);
+insert into t (id,a) values (455,60);
+insert into t (id,a) values (455,61);
+insert into t (id,a) values (455,62);
+insert into t (id,a) values (455,63);
+insert into t (id,a) values (455,64);
+insert into t (id,a) values (455,65);
+insert into t (id,a) values (455,66);
+insert into t (id,a) values (455,67);
+insert into t (id,a) values (455,68);
+insert into t (id,a) values (455,69);
+insert into t (id,a) values (455,70);
+insert into t (id,a) values (455,71);
+insert into t (id,a) values (455,72);
+insert into t (id,a) values (455,73);
+insert into t (id,a) values (455,74);
+insert into t (id,a) values (455,75);
+insert into t (id,a) values (455,76);
+insert into t (id,a) values (455,77);
+insert into t (id,a) values (455,78);
+insert into t (id,a) values (455,79);
+insert into t (id,a) values (455,80);
+insert into t (id,a) values (455,81);
+insert into t (id,a) values (455,82);
+insert into t (id,a) values (455,83);
+insert into t (id,a) values (455,84);
+insert into t (id,a) values (455,85);
+insert into t (id,a) values (455,86);
+insert into t (id,a) values (455,87);
+insert into t (id,a) values (455,88);
+insert into t (id,a) values (455,89);
+insert into t (id,a) values (455,90);
+insert into t (id,a) values (455,91);
+insert into t (id,a) values (455,92);
+insert into t (id,a) values (455,93);
+insert into t (id,a) values (455,94);
+insert into t (id,a) values (455,95);
+insert into t (id,a) values (455,96);
+insert into t (id,a) values (455,97);
+insert into t (id,a) values (455,98);
+insert into t (id,a) values (455,99);
+insert into t (id,a) values (456,0);
+insert into t (id,a) values (456,1);
+insert into t (id,a) values (456,2);
+insert into t (id,a) values (456,3);
+insert into t (id,a) values (456,4);
+insert into t (id,a) values (456,5);
+insert into t (id,a) values (456,6);
+insert into t (id,a) values (456,7);
+insert into t (id,a) values (456,8);
+insert into t (id,a) values (456,9);
+insert into t (id,a) values (456,10);
+insert into t (id,a) values (456,11);
+insert into t (id,a) values (456,12);
+insert into t (id,a) values (456,13);
+insert into t (id,a) values (456,14);
+insert into t (id,a) values (456,15);
+insert into t (id,a) values (456,16);
+insert into t (id,a) values (456,17);
+insert into t (id,a) values (456,18);
+insert into t (id,a) values (456,19);
+insert into t (id,a) values (456,20);
+insert into t (id,a) values (456,21);
+insert into t (id,a) values (456,22);
+insert into t (id,a) values (456,23);
+insert into t (id,a) values (456,24);
+insert into t (id,a) values (456,25);
+insert into t (id,a) values (456,26);
+insert into t (id,a) values (456,27);
+insert into t (id,a) values (456,28);
+insert into t (id,a) values (456,29);
+insert into t (id,a) values (456,30);
+insert into t (id,a) values (456,31);
+insert into t (id,a) values (456,32);
+insert into t (id,a) values (456,33);
+insert into t (id,a) values (456,34);
+insert into t (id,a) values (456,35);
+insert into t (id,a) values (456,36);
+insert into t (id,a) values (456,37);
+insert into t (id,a) values (456,38);
+insert into t (id,a) values (456,39);
+insert into t (id,a) values (456,40);
+insert into t (id,a) values (456,41);
+insert into t (id,a) values (456,42);
+insert into t (id,a) values (456,43);
+insert into t (id,a) values (456,44);
+insert into t (id,a) values (456,45);
+insert into t (id,a) values (456,46);
+insert into t (id,a) values (456,47);
+insert into t (id,a) values (456,48);
+insert into t (id,a) values (456,49);
+insert into t (id,a) values (456,50);
+insert into t (id,a) values (456,51);
+insert into t (id,a) values (456,52);
+insert into t (id,a) values (456,53);
+insert into t (id,a) values (456,54);
+insert into t (id,a) values (456,55);
+insert into t (id,a) values (456,56);
+insert into t (id,a) values (456,57);
+insert into t (id,a) values (456,58);
+insert into t (id,a) values (456,59);
+insert into t (id,a) values (456,60);
+insert into t (id,a) values (456,61);
+insert into t (id,a) values (456,62);
+insert into t (id,a) values (456,63);
+insert into t (id,a) values (456,64);
+insert into t (id,a) values (456,65);
+insert into t (id,a) values (456,66);
+insert into t (id,a) values (456,67);
+insert into t (id,a) values (456,68);
+insert into t (id,a) values (456,69);
+insert into t (id,a) values (456,70);
+insert into t (id,a) values (456,71);
+insert into t (id,a) values (456,72);
+insert into t (id,a) values (456,73);
+insert into t (id,a) values (456,74);
+insert into t (id,a) values (456,75);
+insert into t (id,a) values (456,76);
+insert into t (id,a) values (456,77);
+insert into t (id,a) values (456,78);
+insert into t (id,a) values (456,79);
+insert into t (id,a) values (456,80);
+insert into t (id,a) values (456,81);
+insert into t (id,a) values (456,82);
+insert into t (id,a) values (456,83);
+insert into t (id,a) values (456,84);
+insert into t (id,a) values (456,85);
+insert into t (id,a) values (456,86);
+insert into t (id,a) values (456,87);
+insert into t (id,a) values (456,88);
+insert into t (id,a) values (456,89);
+insert into t (id,a) values (456,90);
+insert into t (id,a) values (456,91);
+insert into t (id,a) values (456,92);
+insert into t (id,a) values (456,93);
+insert into t (id,a) values (456,94);
+insert into t (id,a) values (456,95);
+insert into t (id,a) values (456,96);
+insert into t (id,a) values (456,97);
+insert into t (id,a) values (456,98);
+insert into t (id,a) values (456,99);
+insert into t (id,a) values (457,0);
+insert into t (id,a) values (457,1);
+insert into t (id,a) values (457,2);
+insert into t (id,a) values (457,3);
+insert into t (id,a) values (457,4);
+insert into t (id,a) values (457,5);
+insert into t (id,a) values (457,6);
+insert into t (id,a) values (457,7);
+insert into t (id,a) values (457,8);
+insert into t (id,a) values (457,9);
+insert into t (id,a) values (457,10);
+insert into t (id,a) values (457,11);
+insert into t (id,a) values (457,12);
+insert into t (id,a) values (457,13);
+insert into t (id,a) values (457,14);
+insert into t (id,a) values (457,15);
+insert into t (id,a) values (457,16);
+insert into t (id,a) values (457,17);
+insert into t (id,a) values (457,18);
+insert into t (id,a) values (457,19);
+insert into t (id,a) values (457,20);
+insert into t (id,a) values (457,21);
+insert into t (id,a) values (457,22);
+insert into t (id,a) values (457,23);
+insert into t (id,a) values (457,24);
+insert into t (id,a) values (457,25);
+insert into t (id,a) values (457,26);
+insert into t (id,a) values (457,27);
+insert into t (id,a) values (457,28);
+insert into t (id,a) values (457,29);
+insert into t (id,a) values (457,30);
+insert into t (id,a) values (457,31);
+insert into t (id,a) values (457,32);
+insert into t (id,a) values (457,33);
+insert into t (id,a) values (457,34);
+insert into t (id,a) values (457,35);
+insert into t (id,a) values (457,36);
+insert into t (id,a) values (457,37);
+insert into t (id,a) values (457,38);
+insert into t (id,a) values (457,39);
+insert into t (id,a) values (457,40);
+insert into t (id,a) values (457,41);
+insert into t (id,a) values (457,42);
+insert into t (id,a) values (457,43);
+insert into t (id,a) values (457,44);
+insert into t (id,a) values (457,45);
+insert into t (id,a) values (457,46);
+insert into t (id,a) values (457,47);
+insert into t (id,a) values (457,48);
+insert into t (id,a) values (457,49);
+insert into t (id,a) values (457,50);
+insert into t (id,a) values (457,51);
+insert into t (id,a) values (457,52);
+insert into t (id,a) values (457,53);
+insert into t (id,a) values (457,54);
+insert into t (id,a) values (457,55);
+insert into t (id,a) values (457,56);
+insert into t (id,a) values (457,57);
+insert into t (id,a) values (457,58);
+insert into t (id,a) values (457,59);
+insert into t (id,a) values (457,60);
+insert into t (id,a) values (457,61);
+insert into t (id,a) values (457,62);
+insert into t (id,a) values (457,63);
+insert into t (id,a) values (457,64);
+insert into t (id,a) values (457,65);
+insert into t (id,a) values (457,66);
+insert into t (id,a) values (457,67);
+insert into t (id,a) values (457,68);
+insert into t (id,a) values (457,69);
+insert into t (id,a) values (457,70);
+insert into t (id,a) values (457,71);
+insert into t (id,a) values (457,72);
+insert into t (id,a) values (457,73);
+insert into t (id,a) values (457,74);
+insert into t (id,a) values (457,75);
+insert into t (id,a) values (457,76);
+insert into t (id,a) values (457,77);
+insert into t (id,a) values (457,78);
+insert into t (id,a) values (457,79);
+insert into t (id,a) values (457,80);
+insert into t (id,a) values (457,81);
+insert into t (id,a) values (457,82);
+insert into t (id,a) values (457,83);
+insert into t (id,a) values (457,84);
+insert into t (id,a) values (457,85);
+insert into t (id,a) values (457,86);
+insert into t (id,a) values (457,87);
+insert into t (id,a) values (457,88);
+insert into t (id,a) values (457,89);
+insert into t (id,a) values (457,90);
+insert into t (id,a) values (457,91);
+insert into t (id,a) values (457,92);
+insert into t (id,a) values (457,93);
+insert into t (id,a) values (457,94);
+insert into t (id,a) values (457,95);
+insert into t (id,a) values (457,96);
+insert into t (id,a) values (457,97);
+insert into t (id,a) values (457,98);
+insert into t (id,a) values (457,99);
+insert into t (id,a) values (458,0);
+insert into t (id,a) values (458,1);
+insert into t (id,a) values (458,2);
+insert into t (id,a) values (458,3);
+insert into t (id,a) values (458,4);
+insert into t (id,a) values (458,5);
+insert into t (id,a) values (458,6);
+insert into t (id,a) values (458,7);
+insert into t (id,a) values (458,8);
+insert into t (id,a) values (458,9);
+insert into t (id,a) values (458,10);
+insert into t (id,a) values (458,11);
+insert into t (id,a) values (458,12);
+insert into t (id,a) values (458,13);
+insert into t (id,a) values (458,14);
+insert into t (id,a) values (458,15);
+insert into t (id,a) values (458,16);
+insert into t (id,a) values (458,17);
+insert into t (id,a) values (458,18);
+insert into t (id,a) values (458,19);
+insert into t (id,a) values (458,20);
+insert into t (id,a) values (458,21);
+insert into t (id,a) values (458,22);
+insert into t (id,a) values (458,23);
+insert into t (id,a) values (458,24);
+insert into t (id,a) values (458,25);
+insert into t (id,a) values (458,26);
+insert into t (id,a) values (458,27);
+insert into t (id,a) values (458,28);
+insert into t (id,a) values (458,29);
+insert into t (id,a) values (458,30);
+insert into t (id,a) values (458,31);
+insert into t (id,a) values (458,32);
+insert into t (id,a) values (458,33);
+insert into t (id,a) values (458,34);
+insert into t (id,a) values (458,35);
+insert into t (id,a) values (458,36);
+insert into t (id,a) values (458,37);
+insert into t (id,a) values (458,38);
+insert into t (id,a) values (458,39);
+insert into t (id,a) values (458,40);
+insert into t (id,a) values (458,41);
+insert into t (id,a) values (458,42);
+insert into t (id,a) values (458,43);
+insert into t (id,a) values (458,44);
+insert into t (id,a) values (458,45);
+insert into t (id,a) values (458,46);
+insert into t (id,a) values (458,47);
+insert into t (id,a) values (458,48);
+insert into t (id,a) values (458,49);
+insert into t (id,a) values (458,50);
+insert into t (id,a) values (458,51);
+insert into t (id,a) values (458,52);
+insert into t (id,a) values (458,53);
+insert into t (id,a) values (458,54);
+insert into t (id,a) values (458,55);
+insert into t (id,a) values (458,56);
+insert into t (id,a) values (458,57);
+insert into t (id,a) values (458,58);
+insert into t (id,a) values (458,59);
+insert into t (id,a) values (458,60);
+insert into t (id,a) values (458,61);
+insert into t (id,a) values (458,62);
+insert into t (id,a) values (458,63);
+insert into t (id,a) values (458,64);
+insert into t (id,a) values (458,65);
+insert into t (id,a) values (458,66);
+insert into t (id,a) values (458,67);
+insert into t (id,a) values (458,68);
+insert into t (id,a) values (458,69);
+insert into t (id,a) values (458,70);
+insert into t (id,a) values (458,71);
+insert into t (id,a) values (458,72);
+insert into t (id,a) values (458,73);
+insert into t (id,a) values (458,74);
+insert into t (id,a) values (458,75);
+insert into t (id,a) values (458,76);
+insert into t (id,a) values (458,77);
+insert into t (id,a) values (458,78);
+insert into t (id,a) values (458,79);
+insert into t (id,a) values (458,80);
+insert into t (id,a) values (458,81);
+insert into t (id,a) values (458,82);
+insert into t (id,a) values (458,83);
+insert into t (id,a) values (458,84);
+insert into t (id,a) values (458,85);
+insert into t (id,a) values (458,86);
+insert into t (id,a) values (458,87);
+insert into t (id,a) values (458,88);
+insert into t (id,a) values (458,89);
+insert into t (id,a) values (458,90);
+insert into t (id,a) values (458,91);
+insert into t (id,a) values (458,92);
+insert into t (id,a) values (458,93);
+insert into t (id,a) values (458,94);
+insert into t (id,a) values (458,95);
+insert into t (id,a) values (458,96);
+insert into t (id,a) values (458,97);
+insert into t (id,a) values (458,98);
+insert into t (id,a) values (458,99);
+insert into t (id,a) values (459,0);
+insert into t (id,a) values (459,1);
+insert into t (id,a) values (459,2);
+insert into t (id,a) values (459,3);
+insert into t (id,a) values (459,4);
+insert into t (id,a) values (459,5);
+insert into t (id,a) values (459,6);
+insert into t (id,a) values (459,7);
+insert into t (id,a) values (459,8);
+insert into t (id,a) values (459,9);
+insert into t (id,a) values (459,10);
+insert into t (id,a) values (459,11);
+insert into t (id,a) values (459,12);
+insert into t (id,a) values (459,13);
+insert into t (id,a) values (459,14);
+insert into t (id,a) values (459,15);
+insert into t (id,a) values (459,16);
+insert into t (id,a) values (459,17);
+insert into t (id,a) values (459,18);
+insert into t (id,a) values (459,19);
+insert into t (id,a) values (459,20);
+insert into t (id,a) values (459,21);
+insert into t (id,a) values (459,22);
+insert into t (id,a) values (459,23);
+insert into t (id,a) values (459,24);
+insert into t (id,a) values (459,25);
+insert into t (id,a) values (459,26);
+insert into t (id,a) values (459,27);
+insert into t (id,a) values (459,28);
+insert into t (id,a) values (459,29);
+insert into t (id,a) values (459,30);
+insert into t (id,a) values (459,31);
+insert into t (id,a) values (459,32);
+insert into t (id,a) values (459,33);
+insert into t (id,a) values (459,34);
+insert into t (id,a) values (459,35);
+insert into t (id,a) values (459,36);
+insert into t (id,a) values (459,37);
+insert into t (id,a) values (459,38);
+insert into t (id,a) values (459,39);
+insert into t (id,a) values (459,40);
+insert into t (id,a) values (459,41);
+insert into t (id,a) values (459,42);
+insert into t (id,a) values (459,43);
+insert into t (id,a) values (459,44);
+insert into t (id,a) values (459,45);
+insert into t (id,a) values (459,46);
+insert into t (id,a) values (459,47);
+insert into t (id,a) values (459,48);
+insert into t (id,a) values (459,49);
+insert into t (id,a) values (459,50);
+insert into t (id,a) values (459,51);
+insert into t (id,a) values (459,52);
+insert into t (id,a) values (459,53);
+insert into t (id,a) values (459,54);
+insert into t (id,a) values (459,55);
+insert into t (id,a) values (459,56);
+insert into t (id,a) values (459,57);
+insert into t (id,a) values (459,58);
+insert into t (id,a) values (459,59);
+insert into t (id,a) values (459,60);
+insert into t (id,a) values (459,61);
+insert into t (id,a) values (459,62);
+insert into t (id,a) values (459,63);
+insert into t (id,a) values (459,64);
+insert into t (id,a) values (459,65);
+insert into t (id,a) values (459,66);
+insert into t (id,a) values (459,67);
+insert into t (id,a) values (459,68);
+insert into t (id,a) values (459,69);
+insert into t (id,a) values (459,70);
+insert into t (id,a) values (459,71);
+insert into t (id,a) values (459,72);
+insert into t (id,a) values (459,73);
+insert into t (id,a) values (459,74);
+insert into t (id,a) values (459,75);
+insert into t (id,a) values (459,76);
+insert into t (id,a) values (459,77);
+insert into t (id,a) values (459,78);
+insert into t (id,a) values (459,79);
+insert into t (id,a) values (459,80);
+insert into t (id,a) values (459,81);
+insert into t (id,a) values (459,82);
+insert into t (id,a) values (459,83);
+insert into t (id,a) values (459,84);
+insert into t (id,a) values (459,85);
+insert into t (id,a) values (459,86);
+insert into t (id,a) values (459,87);
+insert into t (id,a) values (459,88);
+insert into t (id,a) values (459,89);
+insert into t (id,a) values (459,90);
+insert into t (id,a) values (459,91);
+insert into t (id,a) values (459,92);
+insert into t (id,a) values (459,93);
+insert into t (id,a) values (459,94);
+insert into t (id,a) values (459,95);
+insert into t (id,a) values (459,96);
+insert into t (id,a) values (459,97);
+insert into t (id,a) values (459,98);
+insert into t (id,a) values (459,99);
+insert into t (id,a) values (460,0);
+insert into t (id,a) values (460,1);
+insert into t (id,a) values (460,2);
+insert into t (id,a) values (460,3);
+insert into t (id,a) values (460,4);
+insert into t (id,a) values (460,5);
+insert into t (id,a) values (460,6);
+insert into t (id,a) values (460,7);
+insert into t (id,a) values (460,8);
+insert into t (id,a) values (460,9);
+insert into t (id,a) values (460,10);
+insert into t (id,a) values (460,11);
+insert into t (id,a) values (460,12);
+insert into t (id,a) values (460,13);
+insert into t (id,a) values (460,14);
+insert into t (id,a) values (460,15);
+insert into t (id,a) values (460,16);
+insert into t (id,a) values (460,17);
+insert into t (id,a) values (460,18);
+insert into t (id,a) values (460,19);
+insert into t (id,a) values (460,20);
+insert into t (id,a) values (460,21);
+insert into t (id,a) values (460,22);
+insert into t (id,a) values (460,23);
+insert into t (id,a) values (460,24);
+insert into t (id,a) values (460,25);
+insert into t (id,a) values (460,26);
+insert into t (id,a) values (460,27);
+insert into t (id,a) values (460,28);
+insert into t (id,a) values (460,29);
+insert into t (id,a) values (460,30);
+insert into t (id,a) values (460,31);
+insert into t (id,a) values (460,32);
+insert into t (id,a) values (460,33);
+insert into t (id,a) values (460,34);
+insert into t (id,a) values (460,35);
+insert into t (id,a) values (460,36);
+insert into t (id,a) values (460,37);
+insert into t (id,a) values (460,38);
+insert into t (id,a) values (460,39);
+insert into t (id,a) values (460,40);
+insert into t (id,a) values (460,41);
+insert into t (id,a) values (460,42);
+insert into t (id,a) values (460,43);
+insert into t (id,a) values (460,44);
+insert into t (id,a) values (460,45);
+insert into t (id,a) values (460,46);
+insert into t (id,a) values (460,47);
+insert into t (id,a) values (460,48);
+insert into t (id,a) values (460,49);
+insert into t (id,a) values (460,50);
+insert into t (id,a) values (460,51);
+insert into t (id,a) values (460,52);
+insert into t (id,a) values (460,53);
+insert into t (id,a) values (460,54);
+insert into t (id,a) values (460,55);
+insert into t (id,a) values (460,56);
+insert into t (id,a) values (460,57);
+insert into t (id,a) values (460,58);
+insert into t (id,a) values (460,59);
+insert into t (id,a) values (460,60);
+insert into t (id,a) values (460,61);
+insert into t (id,a) values (460,62);
+insert into t (id,a) values (460,63);
+insert into t (id,a) values (460,64);
+insert into t (id,a) values (460,65);
+insert into t (id,a) values (460,66);
+insert into t (id,a) values (460,67);
+insert into t (id,a) values (460,68);
+insert into t (id,a) values (460,69);
+insert into t (id,a) values (460,70);
+insert into t (id,a) values (460,71);
+insert into t (id,a) values (460,72);
+insert into t (id,a) values (460,73);
+insert into t (id,a) values (460,74);
+insert into t (id,a) values (460,75);
+insert into t (id,a) values (460,76);
+insert into t (id,a) values (460,77);
+insert into t (id,a) values (460,78);
+insert into t (id,a) values (460,79);
+insert into t (id,a) values (460,80);
+insert into t (id,a) values (460,81);
+insert into t (id,a) values (460,82);
+insert into t (id,a) values (460,83);
+insert into t (id,a) values (460,84);
+insert into t (id,a) values (460,85);
+insert into t (id,a) values (460,86);
+insert into t (id,a) values (460,87);
+insert into t (id,a) values (460,88);
+insert into t (id,a) values (460,89);
+insert into t (id,a) values (460,90);
+insert into t (id,a) values (460,91);
+insert into t (id,a) values (460,92);
+insert into t (id,a) values (460,93);
+insert into t (id,a) values (460,94);
+insert into t (id,a) values (460,95);
+insert into t (id,a) values (460,96);
+insert into t (id,a) values (460,97);
+insert into t (id,a) values (460,98);
+insert into t (id,a) values (460,99);
+insert into t (id,a) values (461,0);
+insert into t (id,a) values (461,1);
+insert into t (id,a) values (461,2);
+insert into t (id,a) values (461,3);
+insert into t (id,a) values (461,4);
+insert into t (id,a) values (461,5);
+insert into t (id,a) values (461,6);
+insert into t (id,a) values (461,7);
+insert into t (id,a) values (461,8);
+insert into t (id,a) values (461,9);
+insert into t (id,a) values (461,10);
+insert into t (id,a) values (461,11);
+insert into t (id,a) values (461,12);
+insert into t (id,a) values (461,13);
+insert into t (id,a) values (461,14);
+insert into t (id,a) values (461,15);
+insert into t (id,a) values (461,16);
+insert into t (id,a) values (461,17);
+insert into t (id,a) values (461,18);
+insert into t (id,a) values (461,19);
+insert into t (id,a) values (461,20);
+insert into t (id,a) values (461,21);
+insert into t (id,a) values (461,22);
+insert into t (id,a) values (461,23);
+insert into t (id,a) values (461,24);
+insert into t (id,a) values (461,25);
+insert into t (id,a) values (461,26);
+insert into t (id,a) values (461,27);
+insert into t (id,a) values (461,28);
+insert into t (id,a) values (461,29);
+insert into t (id,a) values (461,30);
+insert into t (id,a) values (461,31);
+insert into t (id,a) values (461,32);
+insert into t (id,a) values (461,33);
+insert into t (id,a) values (461,34);
+insert into t (id,a) values (461,35);
+insert into t (id,a) values (461,36);
+insert into t (id,a) values (461,37);
+insert into t (id,a) values (461,38);
+insert into t (id,a) values (461,39);
+insert into t (id,a) values (461,40);
+insert into t (id,a) values (461,41);
+insert into t (id,a) values (461,42);
+insert into t (id,a) values (461,43);
+insert into t (id,a) values (461,44);
+insert into t (id,a) values (461,45);
+insert into t (id,a) values (461,46);
+insert into t (id,a) values (461,47);
+insert into t (id,a) values (461,48);
+insert into t (id,a) values (461,49);
+insert into t (id,a) values (461,50);
+insert into t (id,a) values (461,51);
+insert into t (id,a) values (461,52);
+insert into t (id,a) values (461,53);
+insert into t (id,a) values (461,54);
+insert into t (id,a) values (461,55);
+insert into t (id,a) values (461,56);
+insert into t (id,a) values (461,57);
+insert into t (id,a) values (461,58);
+insert into t (id,a) values (461,59);
+insert into t (id,a) values (461,60);
+insert into t (id,a) values (461,61);
+insert into t (id,a) values (461,62);
+insert into t (id,a) values (461,63);
+insert into t (id,a) values (461,64);
+insert into t (id,a) values (461,65);
+insert into t (id,a) values (461,66);
+insert into t (id,a) values (461,67);
+insert into t (id,a) values (461,68);
+insert into t (id,a) values (461,69);
+insert into t (id,a) values (461,70);
+insert into t (id,a) values (461,71);
+insert into t (id,a) values (461,72);
+insert into t (id,a) values (461,73);
+insert into t (id,a) values (461,74);
+insert into t (id,a) values (461,75);
+insert into t (id,a) values (461,76);
+insert into t (id,a) values (461,77);
+insert into t (id,a) values (461,78);
+insert into t (id,a) values (461,79);
+insert into t (id,a) values (461,80);
+insert into t (id,a) values (461,81);
+insert into t (id,a) values (461,82);
+insert into t (id,a) values (461,83);
+insert into t (id,a) values (461,84);
+insert into t (id,a) values (461,85);
+insert into t (id,a) values (461,86);
+insert into t (id,a) values (461,87);
+insert into t (id,a) values (461,88);
+insert into t (id,a) values (461,89);
+insert into t (id,a) values (461,90);
+insert into t (id,a) values (461,91);
+insert into t (id,a) values (461,92);
+insert into t (id,a) values (461,93);
+insert into t (id,a) values (461,94);
+insert into t (id,a) values (461,95);
+insert into t (id,a) values (461,96);
+insert into t (id,a) values (461,97);
+insert into t (id,a) values (461,98);
+insert into t (id,a) values (461,99);
+insert into t (id,a) values (462,0);
+insert into t (id,a) values (462,1);
+insert into t (id,a) values (462,2);
+insert into t (id,a) values (462,3);
+insert into t (id,a) values (462,4);
+insert into t (id,a) values (462,5);
+insert into t (id,a) values (462,6);
+insert into t (id,a) values (462,7);
+insert into t (id,a) values (462,8);
+insert into t (id,a) values (462,9);
+insert into t (id,a) values (462,10);
+insert into t (id,a) values (462,11);
+insert into t (id,a) values (462,12);
+insert into t (id,a) values (462,13);
+insert into t (id,a) values (462,14);
+insert into t (id,a) values (462,15);
+insert into t (id,a) values (462,16);
+insert into t (id,a) values (462,17);
+insert into t (id,a) values (462,18);
+insert into t (id,a) values (462,19);
+insert into t (id,a) values (462,20);
+insert into t (id,a) values (462,21);
+insert into t (id,a) values (462,22);
+insert into t (id,a) values (462,23);
+insert into t (id,a) values (462,24);
+insert into t (id,a) values (462,25);
+insert into t (id,a) values (462,26);
+insert into t (id,a) values (462,27);
+insert into t (id,a) values (462,28);
+insert into t (id,a) values (462,29);
+insert into t (id,a) values (462,30);
+insert into t (id,a) values (462,31);
+insert into t (id,a) values (462,32);
+insert into t (id,a) values (462,33);
+insert into t (id,a) values (462,34);
+insert into t (id,a) values (462,35);
+insert into t (id,a) values (462,36);
+insert into t (id,a) values (462,37);
+insert into t (id,a) values (462,38);
+insert into t (id,a) values (462,39);
+insert into t (id,a) values (462,40);
+insert into t (id,a) values (462,41);
+insert into t (id,a) values (462,42);
+insert into t (id,a) values (462,43);
+insert into t (id,a) values (462,44);
+insert into t (id,a) values (462,45);
+insert into t (id,a) values (462,46);
+insert into t (id,a) values (462,47);
+insert into t (id,a) values (462,48);
+insert into t (id,a) values (462,49);
+insert into t (id,a) values (462,50);
+insert into t (id,a) values (462,51);
+insert into t (id,a) values (462,52);
+insert into t (id,a) values (462,53);
+insert into t (id,a) values (462,54);
+insert into t (id,a) values (462,55);
+insert into t (id,a) values (462,56);
+insert into t (id,a) values (462,57);
+insert into t (id,a) values (462,58);
+insert into t (id,a) values (462,59);
+insert into t (id,a) values (462,60);
+insert into t (id,a) values (462,61);
+insert into t (id,a) values (462,62);
+insert into t (id,a) values (462,63);
+insert into t (id,a) values (462,64);
+insert into t (id,a) values (462,65);
+insert into t (id,a) values (462,66);
+insert into t (id,a) values (462,67);
+insert into t (id,a) values (462,68);
+insert into t (id,a) values (462,69);
+insert into t (id,a) values (462,70);
+insert into t (id,a) values (462,71);
+insert into t (id,a) values (462,72);
+insert into t (id,a) values (462,73);
+insert into t (id,a) values (462,74);
+insert into t (id,a) values (462,75);
+insert into t (id,a) values (462,76);
+insert into t (id,a) values (462,77);
+insert into t (id,a) values (462,78);
+insert into t (id,a) values (462,79);
+insert into t (id,a) values (462,80);
+insert into t (id,a) values (462,81);
+insert into t (id,a) values (462,82);
+insert into t (id,a) values (462,83);
+insert into t (id,a) values (462,84);
+insert into t (id,a) values (462,85);
+insert into t (id,a) values (462,86);
+insert into t (id,a) values (462,87);
+insert into t (id,a) values (462,88);
+insert into t (id,a) values (462,89);
+insert into t (id,a) values (462,90);
+insert into t (id,a) values (462,91);
+insert into t (id,a) values (462,92);
+insert into t (id,a) values (462,93);
+insert into t (id,a) values (462,94);
+insert into t (id,a) values (462,95);
+insert into t (id,a) values (462,96);
+insert into t (id,a) values (462,97);
+insert into t (id,a) values (462,98);
+insert into t (id,a) values (462,99);
+insert into t (id,a) values (463,0);
+insert into t (id,a) values (463,1);
+insert into t (id,a) values (463,2);
+insert into t (id,a) values (463,3);
+insert into t (id,a) values (463,4);
+insert into t (id,a) values (463,5);
+insert into t (id,a) values (463,6);
+insert into t (id,a) values (463,7);
+insert into t (id,a) values (463,8);
+insert into t (id,a) values (463,9);
+insert into t (id,a) values (463,10);
+insert into t (id,a) values (463,11);
+insert into t (id,a) values (463,12);
+insert into t (id,a) values (463,13);
+insert into t (id,a) values (463,14);
+insert into t (id,a) values (463,15);
+insert into t (id,a) values (463,16);
+insert into t (id,a) values (463,17);
+insert into t (id,a) values (463,18);
+insert into t (id,a) values (463,19);
+insert into t (id,a) values (463,20);
+insert into t (id,a) values (463,21);
+insert into t (id,a) values (463,22);
+insert into t (id,a) values (463,23);
+insert into t (id,a) values (463,24);
+insert into t (id,a) values (463,25);
+insert into t (id,a) values (463,26);
+insert into t (id,a) values (463,27);
+insert into t (id,a) values (463,28);
+insert into t (id,a) values (463,29);
+insert into t (id,a) values (463,30);
+insert into t (id,a) values (463,31);
+insert into t (id,a) values (463,32);
+insert into t (id,a) values (463,33);
+insert into t (id,a) values (463,34);
+insert into t (id,a) values (463,35);
+insert into t (id,a) values (463,36);
+insert into t (id,a) values (463,37);
+insert into t (id,a) values (463,38);
+insert into t (id,a) values (463,39);
+insert into t (id,a) values (463,40);
+insert into t (id,a) values (463,41);
+insert into t (id,a) values (463,42);
+insert into t (id,a) values (463,43);
+insert into t (id,a) values (463,44);
+insert into t (id,a) values (463,45);
+insert into t (id,a) values (463,46);
+insert into t (id,a) values (463,47);
+insert into t (id,a) values (463,48);
+insert into t (id,a) values (463,49);
+insert into t (id,a) values (463,50);
+insert into t (id,a) values (463,51);
+insert into t (id,a) values (463,52);
+insert into t (id,a) values (463,53);
+insert into t (id,a) values (463,54);
+insert into t (id,a) values (463,55);
+insert into t (id,a) values (463,56);
+insert into t (id,a) values (463,57);
+insert into t (id,a) values (463,58);
+insert into t (id,a) values (463,59);
+insert into t (id,a) values (463,60);
+insert into t (id,a) values (463,61);
+insert into t (id,a) values (463,62);
+insert into t (id,a) values (463,63);
+insert into t (id,a) values (463,64);
+insert into t (id,a) values (463,65);
+insert into t (id,a) values (463,66);
+insert into t (id,a) values (463,67);
+insert into t (id,a) values (463,68);
+insert into t (id,a) values (463,69);
+insert into t (id,a) values (463,70);
+insert into t (id,a) values (463,71);
+insert into t (id,a) values (463,72);
+insert into t (id,a) values (463,73);
+insert into t (id,a) values (463,74);
+insert into t (id,a) values (463,75);
+insert into t (id,a) values (463,76);
+insert into t (id,a) values (463,77);
+insert into t (id,a) values (463,78);
+insert into t (id,a) values (463,79);
+insert into t (id,a) values (463,80);
+insert into t (id,a) values (463,81);
+insert into t (id,a) values (463,82);
+insert into t (id,a) values (463,83);
+insert into t (id,a) values (463,84);
+insert into t (id,a) values (463,85);
+insert into t (id,a) values (463,86);
+insert into t (id,a) values (463,87);
+insert into t (id,a) values (463,88);
+insert into t (id,a) values (463,89);
+insert into t (id,a) values (463,90);
+insert into t (id,a) values (463,91);
+insert into t (id,a) values (463,92);
+insert into t (id,a) values (463,93);
+insert into t (id,a) values (463,94);
+insert into t (id,a) values (463,95);
+insert into t (id,a) values (463,96);
+insert into t (id,a) values (463,97);
+insert into t (id,a) values (463,98);
+insert into t (id,a) values (463,99);
+insert into t (id,a) values (464,0);
+insert into t (id,a) values (464,1);
+insert into t (id,a) values (464,2);
+insert into t (id,a) values (464,3);
+insert into t (id,a) values (464,4);
+insert into t (id,a) values (464,5);
+insert into t (id,a) values (464,6);
+insert into t (id,a) values (464,7);
+insert into t (id,a) values (464,8);
+insert into t (id,a) values (464,9);
+insert into t (id,a) values (464,10);
+insert into t (id,a) values (464,11);
+insert into t (id,a) values (464,12);
+insert into t (id,a) values (464,13);
+insert into t (id,a) values (464,14);
+insert into t (id,a) values (464,15);
+insert into t (id,a) values (464,16);
+insert into t (id,a) values (464,17);
+insert into t (id,a) values (464,18);
+insert into t (id,a) values (464,19);
+insert into t (id,a) values (464,20);
+insert into t (id,a) values (464,21);
+insert into t (id,a) values (464,22);
+insert into t (id,a) values (464,23);
+insert into t (id,a) values (464,24);
+insert into t (id,a) values (464,25);
+insert into t (id,a) values (464,26);
+insert into t (id,a) values (464,27);
+insert into t (id,a) values (464,28);
+insert into t (id,a) values (464,29);
+insert into t (id,a) values (464,30);
+insert into t (id,a) values (464,31);
+insert into t (id,a) values (464,32);
+insert into t (id,a) values (464,33);
+insert into t (id,a) values (464,34);
+insert into t (id,a) values (464,35);
+insert into t (id,a) values (464,36);
+insert into t (id,a) values (464,37);
+insert into t (id,a) values (464,38);
+insert into t (id,a) values (464,39);
+insert into t (id,a) values (464,40);
+insert into t (id,a) values (464,41);
+insert into t (id,a) values (464,42);
+insert into t (id,a) values (464,43);
+insert into t (id,a) values (464,44);
+insert into t (id,a) values (464,45);
+insert into t (id,a) values (464,46);
+insert into t (id,a) values (464,47);
+insert into t (id,a) values (464,48);
+insert into t (id,a) values (464,49);
+insert into t (id,a) values (464,50);
+insert into t (id,a) values (464,51);
+insert into t (id,a) values (464,52);
+insert into t (id,a) values (464,53);
+insert into t (id,a) values (464,54);
+insert into t (id,a) values (464,55);
+insert into t (id,a) values (464,56);
+insert into t (id,a) values (464,57);
+insert into t (id,a) values (464,58);
+insert into t (id,a) values (464,59);
+insert into t (id,a) values (464,60);
+insert into t (id,a) values (464,61);
+insert into t (id,a) values (464,62);
+insert into t (id,a) values (464,63);
+insert into t (id,a) values (464,64);
+insert into t (id,a) values (464,65);
+insert into t (id,a) values (464,66);
+insert into t (id,a) values (464,67);
+insert into t (id,a) values (464,68);
+insert into t (id,a) values (464,69);
+insert into t (id,a) values (464,70);
+insert into t (id,a) values (464,71);
+insert into t (id,a) values (464,72);
+insert into t (id,a) values (464,73);
+insert into t (id,a) values (464,74);
+insert into t (id,a) values (464,75);
+insert into t (id,a) values (464,76);
+insert into t (id,a) values (464,77);
+insert into t (id,a) values (464,78);
+insert into t (id,a) values (464,79);
+insert into t (id,a) values (464,80);
+insert into t (id,a) values (464,81);
+insert into t (id,a) values (464,82);
+insert into t (id,a) values (464,83);
+insert into t (id,a) values (464,84);
+insert into t (id,a) values (464,85);
+insert into t (id,a) values (464,86);
+insert into t (id,a) values (464,87);
+insert into t (id,a) values (464,88);
+insert into t (id,a) values (464,89);
+insert into t (id,a) values (464,90);
+insert into t (id,a) values (464,91);
+insert into t (id,a) values (464,92);
+insert into t (id,a) values (464,93);
+insert into t (id,a) values (464,94);
+insert into t (id,a) values (464,95);
+insert into t (id,a) values (464,96);
+insert into t (id,a) values (464,97);
+insert into t (id,a) values (464,98);
+insert into t (id,a) values (464,99);
+insert into t (id,a) values (465,0);
+insert into t (id,a) values (465,1);
+insert into t (id,a) values (465,2);
+insert into t (id,a) values (465,3);
+insert into t (id,a) values (465,4);
+insert into t (id,a) values (465,5);
+insert into t (id,a) values (465,6);
+insert into t (id,a) values (465,7);
+insert into t (id,a) values (465,8);
+insert into t (id,a) values (465,9);
+insert into t (id,a) values (465,10);
+insert into t (id,a) values (465,11);
+insert into t (id,a) values (465,12);
+insert into t (id,a) values (465,13);
+insert into t (id,a) values (465,14);
+insert into t (id,a) values (465,15);
+insert into t (id,a) values (465,16);
+insert into t (id,a) values (465,17);
+insert into t (id,a) values (465,18);
+insert into t (id,a) values (465,19);
+insert into t (id,a) values (465,20);
+insert into t (id,a) values (465,21);
+insert into t (id,a) values (465,22);
+insert into t (id,a) values (465,23);
+insert into t (id,a) values (465,24);
+insert into t (id,a) values (465,25);
+insert into t (id,a) values (465,26);
+insert into t (id,a) values (465,27);
+insert into t (id,a) values (465,28);
+insert into t (id,a) values (465,29);
+insert into t (id,a) values (465,30);
+insert into t (id,a) values (465,31);
+insert into t (id,a) values (465,32);
+insert into t (id,a) values (465,33);
+insert into t (id,a) values (465,34);
+insert into t (id,a) values (465,35);
+insert into t (id,a) values (465,36);
+insert into t (id,a) values (465,37);
+insert into t (id,a) values (465,38);
+insert into t (id,a) values (465,39);
+insert into t (id,a) values (465,40);
+insert into t (id,a) values (465,41);
+insert into t (id,a) values (465,42);
+insert into t (id,a) values (465,43);
+insert into t (id,a) values (465,44);
+insert into t (id,a) values (465,45);
+insert into t (id,a) values (465,46);
+insert into t (id,a) values (465,47);
+insert into t (id,a) values (465,48);
+insert into t (id,a) values (465,49);
+insert into t (id,a) values (465,50);
+insert into t (id,a) values (465,51);
+insert into t (id,a) values (465,52);
+insert into t (id,a) values (465,53);
+insert into t (id,a) values (465,54);
+insert into t (id,a) values (465,55);
+insert into t (id,a) values (465,56);
+insert into t (id,a) values (465,57);
+insert into t (id,a) values (465,58);
+insert into t (id,a) values (465,59);
+insert into t (id,a) values (465,60);
+insert into t (id,a) values (465,61);
+insert into t (id,a) values (465,62);
+insert into t (id,a) values (465,63);
+insert into t (id,a) values (465,64);
+insert into t (id,a) values (465,65);
+insert into t (id,a) values (465,66);
+insert into t (id,a) values (465,67);
+insert into t (id,a) values (465,68);
+insert into t (id,a) values (465,69);
+insert into t (id,a) values (465,70);
+insert into t (id,a) values (465,71);
+insert into t (id,a) values (465,72);
+insert into t (id,a) values (465,73);
+insert into t (id,a) values (465,74);
+insert into t (id,a) values (465,75);
+insert into t (id,a) values (465,76);
+insert into t (id,a) values (465,77);
+insert into t (id,a) values (465,78);
+insert into t (id,a) values (465,79);
+insert into t (id,a) values (465,80);
+insert into t (id,a) values (465,81);
+insert into t (id,a) values (465,82);
+insert into t (id,a) values (465,83);
+insert into t (id,a) values (465,84);
+insert into t (id,a) values (465,85);
+insert into t (id,a) values (465,86);
+insert into t (id,a) values (465,87);
+insert into t (id,a) values (465,88);
+insert into t (id,a) values (465,89);
+insert into t (id,a) values (465,90);
+insert into t (id,a) values (465,91);
+insert into t (id,a) values (465,92);
+insert into t (id,a) values (465,93);
+insert into t (id,a) values (465,94);
+insert into t (id,a) values (465,95);
+insert into t (id,a) values (465,96);
+insert into t (id,a) values (465,97);
+insert into t (id,a) values (465,98);
+insert into t (id,a) values (465,99);
+insert into t (id,a) values (466,0);
+insert into t (id,a) values (466,1);
+insert into t (id,a) values (466,2);
+insert into t (id,a) values (466,3);
+insert into t (id,a) values (466,4);
+insert into t (id,a) values (466,5);
+insert into t (id,a) values (466,6);
+insert into t (id,a) values (466,7);
+insert into t (id,a) values (466,8);
+insert into t (id,a) values (466,9);
+insert into t (id,a) values (466,10);
+insert into t (id,a) values (466,11);
+insert into t (id,a) values (466,12);
+insert into t (id,a) values (466,13);
+insert into t (id,a) values (466,14);
+insert into t (id,a) values (466,15);
+insert into t (id,a) values (466,16);
+insert into t (id,a) values (466,17);
+insert into t (id,a) values (466,18);
+insert into t (id,a) values (466,19);
+insert into t (id,a) values (466,20);
+insert into t (id,a) values (466,21);
+insert into t (id,a) values (466,22);
+insert into t (id,a) values (466,23);
+insert into t (id,a) values (466,24);
+insert into t (id,a) values (466,25);
+insert into t (id,a) values (466,26);
+insert into t (id,a) values (466,27);
+insert into t (id,a) values (466,28);
+insert into t (id,a) values (466,29);
+insert into t (id,a) values (466,30);
+insert into t (id,a) values (466,31);
+insert into t (id,a) values (466,32);
+insert into t (id,a) values (466,33);
+insert into t (id,a) values (466,34);
+insert into t (id,a) values (466,35);
+insert into t (id,a) values (466,36);
+insert into t (id,a) values (466,37);
+insert into t (id,a) values (466,38);
+insert into t (id,a) values (466,39);
+insert into t (id,a) values (466,40);
+insert into t (id,a) values (466,41);
+insert into t (id,a) values (466,42);
+insert into t (id,a) values (466,43);
+insert into t (id,a) values (466,44);
+insert into t (id,a) values (466,45);
+insert into t (id,a) values (466,46);
+insert into t (id,a) values (466,47);
+insert into t (id,a) values (466,48);
+insert into t (id,a) values (466,49);
+insert into t (id,a) values (466,50);
+insert into t (id,a) values (466,51);
+insert into t (id,a) values (466,52);
+insert into t (id,a) values (466,53);
+insert into t (id,a) values (466,54);
+insert into t (id,a) values (466,55);
+insert into t (id,a) values (466,56);
+insert into t (id,a) values (466,57);
+insert into t (id,a) values (466,58);
+insert into t (id,a) values (466,59);
+insert into t (id,a) values (466,60);
+insert into t (id,a) values (466,61);
+insert into t (id,a) values (466,62);
+insert into t (id,a) values (466,63);
+insert into t (id,a) values (466,64);
+insert into t (id,a) values (466,65);
+insert into t (id,a) values (466,66);
+insert into t (id,a) values (466,67);
+insert into t (id,a) values (466,68);
+insert into t (id,a) values (466,69);
+insert into t (id,a) values (466,70);
+insert into t (id,a) values (466,71);
+insert into t (id,a) values (466,72);
+insert into t (id,a) values (466,73);
+insert into t (id,a) values (466,74);
+insert into t (id,a) values (466,75);
+insert into t (id,a) values (466,76);
+insert into t (id,a) values (466,77);
+insert into t (id,a) values (466,78);
+insert into t (id,a) values (466,79);
+insert into t (id,a) values (466,80);
+insert into t (id,a) values (466,81);
+insert into t (id,a) values (466,82);
+insert into t (id,a) values (466,83);
+insert into t (id,a) values (466,84);
+insert into t (id,a) values (466,85);
+insert into t (id,a) values (466,86);
+insert into t (id,a) values (466,87);
+insert into t (id,a) values (466,88);
+insert into t (id,a) values (466,89);
+insert into t (id,a) values (466,90);
+insert into t (id,a) values (466,91);
+insert into t (id,a) values (466,92);
+insert into t (id,a) values (466,93);
+insert into t (id,a) values (466,94);
+insert into t (id,a) values (466,95);
+insert into t (id,a) values (466,96);
+insert into t (id,a) values (466,97);
+insert into t (id,a) values (466,98);
+insert into t (id,a) values (466,99);
+insert into t (id,a) values (467,0);
+insert into t (id,a) values (467,1);
+insert into t (id,a) values (467,2);
+insert into t (id,a) values (467,3);
+insert into t (id,a) values (467,4);
+insert into t (id,a) values (467,5);
+insert into t (id,a) values (467,6);
+insert into t (id,a) values (467,7);
+insert into t (id,a) values (467,8);
+insert into t (id,a) values (467,9);
+insert into t (id,a) values (467,10);
+insert into t (id,a) values (467,11);
+insert into t (id,a) values (467,12);
+insert into t (id,a) values (467,13);
+insert into t (id,a) values (467,14);
+insert into t (id,a) values (467,15);
+insert into t (id,a) values (467,16);
+insert into t (id,a) values (467,17);
+insert into t (id,a) values (467,18);
+insert into t (id,a) values (467,19);
+insert into t (id,a) values (467,20);
+insert into t (id,a) values (467,21);
+insert into t (id,a) values (467,22);
+insert into t (id,a) values (467,23);
+insert into t (id,a) values (467,24);
+insert into t (id,a) values (467,25);
+insert into t (id,a) values (467,26);
+insert into t (id,a) values (467,27);
+insert into t (id,a) values (467,28);
+insert into t (id,a) values (467,29);
+insert into t (id,a) values (467,30);
+insert into t (id,a) values (467,31);
+insert into t (id,a) values (467,32);
+insert into t (id,a) values (467,33);
+insert into t (id,a) values (467,34);
+insert into t (id,a) values (467,35);
+insert into t (id,a) values (467,36);
+insert into t (id,a) values (467,37);
+insert into t (id,a) values (467,38);
+insert into t (id,a) values (467,39);
+insert into t (id,a) values (467,40);
+insert into t (id,a) values (467,41);
+insert into t (id,a) values (467,42);
+insert into t (id,a) values (467,43);
+insert into t (id,a) values (467,44);
+insert into t (id,a) values (467,45);
+insert into t (id,a) values (467,46);
+insert into t (id,a) values (467,47);
+insert into t (id,a) values (467,48);
+insert into t (id,a) values (467,49);
+insert into t (id,a) values (467,50);
+insert into t (id,a) values (467,51);
+insert into t (id,a) values (467,52);
+insert into t (id,a) values (467,53);
+insert into t (id,a) values (467,54);
+insert into t (id,a) values (467,55);
+insert into t (id,a) values (467,56);
+insert into t (id,a) values (467,57);
+insert into t (id,a) values (467,58);
+insert into t (id,a) values (467,59);
+insert into t (id,a) values (467,60);
+insert into t (id,a) values (467,61);
+insert into t (id,a) values (467,62);
+insert into t (id,a) values (467,63);
+insert into t (id,a) values (467,64);
+insert into t (id,a) values (467,65);
+insert into t (id,a) values (467,66);
+insert into t (id,a) values (467,67);
+insert into t (id,a) values (467,68);
+insert into t (id,a) values (467,69);
+insert into t (id,a) values (467,70);
+insert into t (id,a) values (467,71);
+insert into t (id,a) values (467,72);
+insert into t (id,a) values (467,73);
+insert into t (id,a) values (467,74);
+insert into t (id,a) values (467,75);
+insert into t (id,a) values (467,76);
+insert into t (id,a) values (467,77);
+insert into t (id,a) values (467,78);
+insert into t (id,a) values (467,79);
+insert into t (id,a) values (467,80);
+insert into t (id,a) values (467,81);
+insert into t (id,a) values (467,82);
+insert into t (id,a) values (467,83);
+insert into t (id,a) values (467,84);
+insert into t (id,a) values (467,85);
+insert into t (id,a) values (467,86);
+insert into t (id,a) values (467,87);
+insert into t (id,a) values (467,88);
+insert into t (id,a) values (467,89);
+insert into t (id,a) values (467,90);
+insert into t (id,a) values (467,91);
+insert into t (id,a) values (467,92);
+insert into t (id,a) values (467,93);
+insert into t (id,a) values (467,94);
+insert into t (id,a) values (467,95);
+insert into t (id,a) values (467,96);
+insert into t (id,a) values (467,97);
+insert into t (id,a) values (467,98);
+insert into t (id,a) values (467,99);
+insert into t (id,a) values (468,0);
+insert into t (id,a) values (468,1);
+insert into t (id,a) values (468,2);
+insert into t (id,a) values (468,3);
+insert into t (id,a) values (468,4);
+insert into t (id,a) values (468,5);
+insert into t (id,a) values (468,6);
+insert into t (id,a) values (468,7);
+insert into t (id,a) values (468,8);
+insert into t (id,a) values (468,9);
+insert into t (id,a) values (468,10);
+insert into t (id,a) values (468,11);
+insert into t (id,a) values (468,12);
+insert into t (id,a) values (468,13);
+insert into t (id,a) values (468,14);
+insert into t (id,a) values (468,15);
+insert into t (id,a) values (468,16);
+insert into t (id,a) values (468,17);
+insert into t (id,a) values (468,18);
+insert into t (id,a) values (468,19);
+insert into t (id,a) values (468,20);
+insert into t (id,a) values (468,21);
+insert into t (id,a) values (468,22);
+insert into t (id,a) values (468,23);
+insert into t (id,a) values (468,24);
+insert into t (id,a) values (468,25);
+insert into t (id,a) values (468,26);
+insert into t (id,a) values (468,27);
+insert into t (id,a) values (468,28);
+insert into t (id,a) values (468,29);
+insert into t (id,a) values (468,30);
+insert into t (id,a) values (468,31);
+insert into t (id,a) values (468,32);
+insert into t (id,a) values (468,33);
+insert into t (id,a) values (468,34);
+insert into t (id,a) values (468,35);
+insert into t (id,a) values (468,36);
+insert into t (id,a) values (468,37);
+insert into t (id,a) values (468,38);
+insert into t (id,a) values (468,39);
+insert into t (id,a) values (468,40);
+insert into t (id,a) values (468,41);
+insert into t (id,a) values (468,42);
+insert into t (id,a) values (468,43);
+insert into t (id,a) values (468,44);
+insert into t (id,a) values (468,45);
+insert into t (id,a) values (468,46);
+insert into t (id,a) values (468,47);
+insert into t (id,a) values (468,48);
+insert into t (id,a) values (468,49);
+insert into t (id,a) values (468,50);
+insert into t (id,a) values (468,51);
+insert into t (id,a) values (468,52);
+insert into t (id,a) values (468,53);
+insert into t (id,a) values (468,54);
+insert into t (id,a) values (468,55);
+insert into t (id,a) values (468,56);
+insert into t (id,a) values (468,57);
+insert into t (id,a) values (468,58);
+insert into t (id,a) values (468,59);
+insert into t (id,a) values (468,60);
+insert into t (id,a) values (468,61);
+insert into t (id,a) values (468,62);
+insert into t (id,a) values (468,63);
+insert into t (id,a) values (468,64);
+insert into t (id,a) values (468,65);
+insert into t (id,a) values (468,66);
+insert into t (id,a) values (468,67);
+insert into t (id,a) values (468,68);
+insert into t (id,a) values (468,69);
+insert into t (id,a) values (468,70);
+insert into t (id,a) values (468,71);
+insert into t (id,a) values (468,72);
+insert into t (id,a) values (468,73);
+insert into t (id,a) values (468,74);
+insert into t (id,a) values (468,75);
+insert into t (id,a) values (468,76);
+insert into t (id,a) values (468,77);
+insert into t (id,a) values (468,78);
+insert into t (id,a) values (468,79);
+insert into t (id,a) values (468,80);
+insert into t (id,a) values (468,81);
+insert into t (id,a) values (468,82);
+insert into t (id,a) values (468,83);
+insert into t (id,a) values (468,84);
+insert into t (id,a) values (468,85);
+insert into t (id,a) values (468,86);
+insert into t (id,a) values (468,87);
+insert into t (id,a) values (468,88);
+insert into t (id,a) values (468,89);
+insert into t (id,a) values (468,90);
+insert into t (id,a) values (468,91);
+insert into t (id,a) values (468,92);
+insert into t (id,a) values (468,93);
+insert into t (id,a) values (468,94);
+insert into t (id,a) values (468,95);
+insert into t (id,a) values (468,96);
+insert into t (id,a) values (468,97);
+insert into t (id,a) values (468,98);
+insert into t (id,a) values (468,99);
+insert into t (id,a) values (469,0);
+insert into t (id,a) values (469,1);
+insert into t (id,a) values (469,2);
+insert into t (id,a) values (469,3);
+insert into t (id,a) values (469,4);
+insert into t (id,a) values (469,5);
+insert into t (id,a) values (469,6);
+insert into t (id,a) values (469,7);
+insert into t (id,a) values (469,8);
+insert into t (id,a) values (469,9);
+insert into t (id,a) values (469,10);
+insert into t (id,a) values (469,11);
+insert into t (id,a) values (469,12);
+insert into t (id,a) values (469,13);
+insert into t (id,a) values (469,14);
+insert into t (id,a) values (469,15);
+insert into t (id,a) values (469,16);
+insert into t (id,a) values (469,17);
+insert into t (id,a) values (469,18);
+insert into t (id,a) values (469,19);
+insert into t (id,a) values (469,20);
+insert into t (id,a) values (469,21);
+insert into t (id,a) values (469,22);
+insert into t (id,a) values (469,23);
+insert into t (id,a) values (469,24);
+insert into t (id,a) values (469,25);
+insert into t (id,a) values (469,26);
+insert into t (id,a) values (469,27);
+insert into t (id,a) values (469,28);
+insert into t (id,a) values (469,29);
+insert into t (id,a) values (469,30);
+insert into t (id,a) values (469,31);
+insert into t (id,a) values (469,32);
+insert into t (id,a) values (469,33);
+insert into t (id,a) values (469,34);
+insert into t (id,a) values (469,35);
+insert into t (id,a) values (469,36);
+insert into t (id,a) values (469,37);
+insert into t (id,a) values (469,38);
+insert into t (id,a) values (469,39);
+insert into t (id,a) values (469,40);
+insert into t (id,a) values (469,41);
+insert into t (id,a) values (469,42);
+insert into t (id,a) values (469,43);
+insert into t (id,a) values (469,44);
+insert into t (id,a) values (469,45);
+insert into t (id,a) values (469,46);
+insert into t (id,a) values (469,47);
+insert into t (id,a) values (469,48);
+insert into t (id,a) values (469,49);
+insert into t (id,a) values (469,50);
+insert into t (id,a) values (469,51);
+insert into t (id,a) values (469,52);
+insert into t (id,a) values (469,53);
+insert into t (id,a) values (469,54);
+insert into t (id,a) values (469,55);
+insert into t (id,a) values (469,56);
+insert into t (id,a) values (469,57);
+insert into t (id,a) values (469,58);
+insert into t (id,a) values (469,59);
+insert into t (id,a) values (469,60);
+insert into t (id,a) values (469,61);
+insert into t (id,a) values (469,62);
+insert into t (id,a) values (469,63);
+insert into t (id,a) values (469,64);
+insert into t (id,a) values (469,65);
+insert into t (id,a) values (469,66);
+insert into t (id,a) values (469,67);
+insert into t (id,a) values (469,68);
+insert into t (id,a) values (469,69);
+insert into t (id,a) values (469,70);
+insert into t (id,a) values (469,71);
+insert into t (id,a) values (469,72);
+insert into t (id,a) values (469,73);
+insert into t (id,a) values (469,74);
+insert into t (id,a) values (469,75);
+insert into t (id,a) values (469,76);
+insert into t (id,a) values (469,77);
+insert into t (id,a) values (469,78);
+insert into t (id,a) values (469,79);
+insert into t (id,a) values (469,80);
+insert into t (id,a) values (469,81);
+insert into t (id,a) values (469,82);
+insert into t (id,a) values (469,83);
+insert into t (id,a) values (469,84);
+insert into t (id,a) values (469,85);
+insert into t (id,a) values (469,86);
+insert into t (id,a) values (469,87);
+insert into t (id,a) values (469,88);
+insert into t (id,a) values (469,89);
+insert into t (id,a) values (469,90);
+insert into t (id,a) values (469,91);
+insert into t (id,a) values (469,92);
+insert into t (id,a) values (469,93);
+insert into t (id,a) values (469,94);
+insert into t (id,a) values (469,95);
+insert into t (id,a) values (469,96);
+insert into t (id,a) values (469,97);
+insert into t (id,a) values (469,98);
+insert into t (id,a) values (469,99);
+insert into t (id,a) values (470,0);
+insert into t (id,a) values (470,1);
+insert into t (id,a) values (470,2);
+insert into t (id,a) values (470,3);
+insert into t (id,a) values (470,4);
+insert into t (id,a) values (470,5);
+insert into t (id,a) values (470,6);
+insert into t (id,a) values (470,7);
+insert into t (id,a) values (470,8);
+insert into t (id,a) values (470,9);
+insert into t (id,a) values (470,10);
+insert into t (id,a) values (470,11);
+insert into t (id,a) values (470,12);
+insert into t (id,a) values (470,13);
+insert into t (id,a) values (470,14);
+insert into t (id,a) values (470,15);
+insert into t (id,a) values (470,16);
+insert into t (id,a) values (470,17);
+insert into t (id,a) values (470,18);
+insert into t (id,a) values (470,19);
+insert into t (id,a) values (470,20);
+insert into t (id,a) values (470,21);
+insert into t (id,a) values (470,22);
+insert into t (id,a) values (470,23);
+insert into t (id,a) values (470,24);
+insert into t (id,a) values (470,25);
+insert into t (id,a) values (470,26);
+insert into t (id,a) values (470,27);
+insert into t (id,a) values (470,28);
+insert into t (id,a) values (470,29);
+insert into t (id,a) values (470,30);
+insert into t (id,a) values (470,31);
+insert into t (id,a) values (470,32);
+insert into t (id,a) values (470,33);
+insert into t (id,a) values (470,34);
+insert into t (id,a) values (470,35);
+insert into t (id,a) values (470,36);
+insert into t (id,a) values (470,37);
+insert into t (id,a) values (470,38);
+insert into t (id,a) values (470,39);
+insert into t (id,a) values (470,40);
+insert into t (id,a) values (470,41);
+insert into t (id,a) values (470,42);
+insert into t (id,a) values (470,43);
+insert into t (id,a) values (470,44);
+insert into t (id,a) values (470,45);
+insert into t (id,a) values (470,46);
+insert into t (id,a) values (470,47);
+insert into t (id,a) values (470,48);
+insert into t (id,a) values (470,49);
+insert into t (id,a) values (470,50);
+insert into t (id,a) values (470,51);
+insert into t (id,a) values (470,52);
+insert into t (id,a) values (470,53);
+insert into t (id,a) values (470,54);
+insert into t (id,a) values (470,55);
+insert into t (id,a) values (470,56);
+insert into t (id,a) values (470,57);
+insert into t (id,a) values (470,58);
+insert into t (id,a) values (470,59);
+insert into t (id,a) values (470,60);
+insert into t (id,a) values (470,61);
+insert into t (id,a) values (470,62);
+insert into t (id,a) values (470,63);
+insert into t (id,a) values (470,64);
+insert into t (id,a) values (470,65);
+insert into t (id,a) values (470,66);
+insert into t (id,a) values (470,67);
+insert into t (id,a) values (470,68);
+insert into t (id,a) values (470,69);
+insert into t (id,a) values (470,70);
+insert into t (id,a) values (470,71);
+insert into t (id,a) values (470,72);
+insert into t (id,a) values (470,73);
+insert into t (id,a) values (470,74);
+insert into t (id,a) values (470,75);
+insert into t (id,a) values (470,76);
+insert into t (id,a) values (470,77);
+insert into t (id,a) values (470,78);
+insert into t (id,a) values (470,79);
+insert into t (id,a) values (470,80);
+insert into t (id,a) values (470,81);
+insert into t (id,a) values (470,82);
+insert into t (id,a) values (470,83);
+insert into t (id,a) values (470,84);
+insert into t (id,a) values (470,85);
+insert into t (id,a) values (470,86);
+insert into t (id,a) values (470,87);
+insert into t (id,a) values (470,88);
+insert into t (id,a) values (470,89);
+insert into t (id,a) values (470,90);
+insert into t (id,a) values (470,91);
+insert into t (id,a) values (470,92);
+insert into t (id,a) values (470,93);
+insert into t (id,a) values (470,94);
+insert into t (id,a) values (470,95);
+insert into t (id,a) values (470,96);
+insert into t (id,a) values (470,97);
+insert into t (id,a) values (470,98);
+insert into t (id,a) values (470,99);
+insert into t (id,a) values (471,0);
+insert into t (id,a) values (471,1);
+insert into t (id,a) values (471,2);
+insert into t (id,a) values (471,3);
+insert into t (id,a) values (471,4);
+insert into t (id,a) values (471,5);
+insert into t (id,a) values (471,6);
+insert into t (id,a) values (471,7);
+insert into t (id,a) values (471,8);
+insert into t (id,a) values (471,9);
+insert into t (id,a) values (471,10);
+insert into t (id,a) values (471,11);
+insert into t (id,a) values (471,12);
+insert into t (id,a) values (471,13);
+insert into t (id,a) values (471,14);
+insert into t (id,a) values (471,15);
+insert into t (id,a) values (471,16);
+insert into t (id,a) values (471,17);
+insert into t (id,a) values (471,18);
+insert into t (id,a) values (471,19);
+insert into t (id,a) values (471,20);
+insert into t (id,a) values (471,21);
+insert into t (id,a) values (471,22);
+insert into t (id,a) values (471,23);
+insert into t (id,a) values (471,24);
+insert into t (id,a) values (471,25);
+insert into t (id,a) values (471,26);
+insert into t (id,a) values (471,27);
+insert into t (id,a) values (471,28);
+insert into t (id,a) values (471,29);
+insert into t (id,a) values (471,30);
+insert into t (id,a) values (471,31);
+insert into t (id,a) values (471,32);
+insert into t (id,a) values (471,33);
+insert into t (id,a) values (471,34);
+insert into t (id,a) values (471,35);
+insert into t (id,a) values (471,36);
+insert into t (id,a) values (471,37);
+insert into t (id,a) values (471,38);
+insert into t (id,a) values (471,39);
+insert into t (id,a) values (471,40);
+insert into t (id,a) values (471,41);
+insert into t (id,a) values (471,42);
+insert into t (id,a) values (471,43);
+insert into t (id,a) values (471,44);
+insert into t (id,a) values (471,45);
+insert into t (id,a) values (471,46);
+insert into t (id,a) values (471,47);
+insert into t (id,a) values (471,48);
+insert into t (id,a) values (471,49);
+insert into t (id,a) values (471,50);
+insert into t (id,a) values (471,51);
+insert into t (id,a) values (471,52);
+insert into t (id,a) values (471,53);
+insert into t (id,a) values (471,54);
+insert into t (id,a) values (471,55);
+insert into t (id,a) values (471,56);
+insert into t (id,a) values (471,57);
+insert into t (id,a) values (471,58);
+insert into t (id,a) values (471,59);
+insert into t (id,a) values (471,60);
+insert into t (id,a) values (471,61);
+insert into t (id,a) values (471,62);
+insert into t (id,a) values (471,63);
+insert into t (id,a) values (471,64);
+insert into t (id,a) values (471,65);
+insert into t (id,a) values (471,66);
+insert into t (id,a) values (471,67);
+insert into t (id,a) values (471,68);
+insert into t (id,a) values (471,69);
+insert into t (id,a) values (471,70);
+insert into t (id,a) values (471,71);
+insert into t (id,a) values (471,72);
+insert into t (id,a) values (471,73);
+insert into t (id,a) values (471,74);
+insert into t (id,a) values (471,75);
+insert into t (id,a) values (471,76);
+insert into t (id,a) values (471,77);
+insert into t (id,a) values (471,78);
+insert into t (id,a) values (471,79);
+insert into t (id,a) values (471,80);
+insert into t (id,a) values (471,81);
+insert into t (id,a) values (471,82);
+insert into t (id,a) values (471,83);
+insert into t (id,a) values (471,84);
+insert into t (id,a) values (471,85);
+insert into t (id,a) values (471,86);
+insert into t (id,a) values (471,87);
+insert into t (id,a) values (471,88);
+insert into t (id,a) values (471,89);
+insert into t (id,a) values (471,90);
+insert into t (id,a) values (471,91);
+insert into t (id,a) values (471,92);
+insert into t (id,a) values (471,93);
+insert into t (id,a) values (471,94);
+insert into t (id,a) values (471,95);
+insert into t (id,a) values (471,96);
+insert into t (id,a) values (471,97);
+insert into t (id,a) values (471,98);
+insert into t (id,a) values (471,99);
+insert into t (id,a) values (472,0);
+insert into t (id,a) values (472,1);
+insert into t (id,a) values (472,2);
+insert into t (id,a) values (472,3);
+insert into t (id,a) values (472,4);
+insert into t (id,a) values (472,5);
+insert into t (id,a) values (472,6);
+insert into t (id,a) values (472,7);
+insert into t (id,a) values (472,8);
+insert into t (id,a) values (472,9);
+insert into t (id,a) values (472,10);
+insert into t (id,a) values (472,11);
+insert into t (id,a) values (472,12);
+insert into t (id,a) values (472,13);
+insert into t (id,a) values (472,14);
+insert into t (id,a) values (472,15);
+insert into t (id,a) values (472,16);
+insert into t (id,a) values (472,17);
+insert into t (id,a) values (472,18);
+insert into t (id,a) values (472,19);
+insert into t (id,a) values (472,20);
+insert into t (id,a) values (472,21);
+insert into t (id,a) values (472,22);
+insert into t (id,a) values (472,23);
+insert into t (id,a) values (472,24);
+insert into t (id,a) values (472,25);
+insert into t (id,a) values (472,26);
+insert into t (id,a) values (472,27);
+insert into t (id,a) values (472,28);
+insert into t (id,a) values (472,29);
+insert into t (id,a) values (472,30);
+insert into t (id,a) values (472,31);
+insert into t (id,a) values (472,32);
+insert into t (id,a) values (472,33);
+insert into t (id,a) values (472,34);
+insert into t (id,a) values (472,35);
+insert into t (id,a) values (472,36);
+insert into t (id,a) values (472,37);
+insert into t (id,a) values (472,38);
+insert into t (id,a) values (472,39);
+insert into t (id,a) values (472,40);
+insert into t (id,a) values (472,41);
+insert into t (id,a) values (472,42);
+insert into t (id,a) values (472,43);
+insert into t (id,a) values (472,44);
+insert into t (id,a) values (472,45);
+insert into t (id,a) values (472,46);
+insert into t (id,a) values (472,47);
+insert into t (id,a) values (472,48);
+insert into t (id,a) values (472,49);
+insert into t (id,a) values (472,50);
+insert into t (id,a) values (472,51);
+insert into t (id,a) values (472,52);
+insert into t (id,a) values (472,53);
+insert into t (id,a) values (472,54);
+insert into t (id,a) values (472,55);
+insert into t (id,a) values (472,56);
+insert into t (id,a) values (472,57);
+insert into t (id,a) values (472,58);
+insert into t (id,a) values (472,59);
+insert into t (id,a) values (472,60);
+insert into t (id,a) values (472,61);
+insert into t (id,a) values (472,62);
+insert into t (id,a) values (472,63);
+insert into t (id,a) values (472,64);
+insert into t (id,a) values (472,65);
+insert into t (id,a) values (472,66);
+insert into t (id,a) values (472,67);
+insert into t (id,a) values (472,68);
+insert into t (id,a) values (472,69);
+insert into t (id,a) values (472,70);
+insert into t (id,a) values (472,71);
+insert into t (id,a) values (472,72);
+insert into t (id,a) values (472,73);
+insert into t (id,a) values (472,74);
+insert into t (id,a) values (472,75);
+insert into t (id,a) values (472,76);
+insert into t (id,a) values (472,77);
+insert into t (id,a) values (472,78);
+insert into t (id,a) values (472,79);
+insert into t (id,a) values (472,80);
+insert into t (id,a) values (472,81);
+insert into t (id,a) values (472,82);
+insert into t (id,a) values (472,83);
+insert into t (id,a) values (472,84);
+insert into t (id,a) values (472,85);
+insert into t (id,a) values (472,86);
+insert into t (id,a) values (472,87);
+insert into t (id,a) values (472,88);
+insert into t (id,a) values (472,89);
+insert into t (id,a) values (472,90);
+insert into t (id,a) values (472,91);
+insert into t (id,a) values (472,92);
+insert into t (id,a) values (472,93);
+insert into t (id,a) values (472,94);
+insert into t (id,a) values (472,95);
+insert into t (id,a) values (472,96);
+insert into t (id,a) values (472,97);
+insert into t (id,a) values (472,98);
+insert into t (id,a) values (472,99);
+insert into t (id,a) values (473,0);
+insert into t (id,a) values (473,1);
+insert into t (id,a) values (473,2);
+insert into t (id,a) values (473,3);
+insert into t (id,a) values (473,4);
+insert into t (id,a) values (473,5);
+insert into t (id,a) values (473,6);
+insert into t (id,a) values (473,7);
+insert into t (id,a) values (473,8);
+insert into t (id,a) values (473,9);
+insert into t (id,a) values (473,10);
+insert into t (id,a) values (473,11);
+insert into t (id,a) values (473,12);
+insert into t (id,a) values (473,13);
+insert into t (id,a) values (473,14);
+insert into t (id,a) values (473,15);
+insert into t (id,a) values (473,16);
+insert into t (id,a) values (473,17);
+insert into t (id,a) values (473,18);
+insert into t (id,a) values (473,19);
+insert into t (id,a) values (473,20);
+insert into t (id,a) values (473,21);
+insert into t (id,a) values (473,22);
+insert into t (id,a) values (473,23);
+insert into t (id,a) values (473,24);
+insert into t (id,a) values (473,25);
+insert into t (id,a) values (473,26);
+insert into t (id,a) values (473,27);
+insert into t (id,a) values (473,28);
+insert into t (id,a) values (473,29);
+insert into t (id,a) values (473,30);
+insert into t (id,a) values (473,31);
+insert into t (id,a) values (473,32);
+insert into t (id,a) values (473,33);
+insert into t (id,a) values (473,34);
+insert into t (id,a) values (473,35);
+insert into t (id,a) values (473,36);
+insert into t (id,a) values (473,37);
+insert into t (id,a) values (473,38);
+insert into t (id,a) values (473,39);
+insert into t (id,a) values (473,40);
+insert into t (id,a) values (473,41);
+insert into t (id,a) values (473,42);
+insert into t (id,a) values (473,43);
+insert into t (id,a) values (473,44);
+insert into t (id,a) values (473,45);
+insert into t (id,a) values (473,46);
+insert into t (id,a) values (473,47);
+insert into t (id,a) values (473,48);
+insert into t (id,a) values (473,49);
+insert into t (id,a) values (473,50);
+insert into t (id,a) values (473,51);
+insert into t (id,a) values (473,52);
+insert into t (id,a) values (473,53);
+insert into t (id,a) values (473,54);
+insert into t (id,a) values (473,55);
+insert into t (id,a) values (473,56);
+insert into t (id,a) values (473,57);
+insert into t (id,a) values (473,58);
+insert into t (id,a) values (473,59);
+insert into t (id,a) values (473,60);
+insert into t (id,a) values (473,61);
+insert into t (id,a) values (473,62);
+insert into t (id,a) values (473,63);
+insert into t (id,a) values (473,64);
+insert into t (id,a) values (473,65);
+insert into t (id,a) values (473,66);
+insert into t (id,a) values (473,67);
+insert into t (id,a) values (473,68);
+insert into t (id,a) values (473,69);
+insert into t (id,a) values (473,70);
+insert into t (id,a) values (473,71);
+insert into t (id,a) values (473,72);
+insert into t (id,a) values (473,73);
+insert into t (id,a) values (473,74);
+insert into t (id,a) values (473,75);
+insert into t (id,a) values (473,76);
+insert into t (id,a) values (473,77);
+insert into t (id,a) values (473,78);
+insert into t (id,a) values (473,79);
+insert into t (id,a) values (473,80);
+insert into t (id,a) values (473,81);
+insert into t (id,a) values (473,82);
+insert into t (id,a) values (473,83);
+insert into t (id,a) values (473,84);
+insert into t (id,a) values (473,85);
+insert into t (id,a) values (473,86);
+insert into t (id,a) values (473,87);
+insert into t (id,a) values (473,88);
+insert into t (id,a) values (473,89);
+insert into t (id,a) values (473,90);
+insert into t (id,a) values (473,91);
+insert into t (id,a) values (473,92);
+insert into t (id,a) values (473,93);
+insert into t (id,a) values (473,94);
+insert into t (id,a) values (473,95);
+insert into t (id,a) values (473,96);
+insert into t (id,a) values (473,97);
+insert into t (id,a) values (473,98);
+insert into t (id,a) values (473,99);
+insert into t (id,a) values (474,0);
+insert into t (id,a) values (474,1);
+insert into t (id,a) values (474,2);
+insert into t (id,a) values (474,3);
+insert into t (id,a) values (474,4);
+insert into t (id,a) values (474,5);
+insert into t (id,a) values (474,6);
+insert into t (id,a) values (474,7);
+insert into t (id,a) values (474,8);
+insert into t (id,a) values (474,9);
+insert into t (id,a) values (474,10);
+insert into t (id,a) values (474,11);
+insert into t (id,a) values (474,12);
+insert into t (id,a) values (474,13);
+insert into t (id,a) values (474,14);
+insert into t (id,a) values (474,15);
+insert into t (id,a) values (474,16);
+insert into t (id,a) values (474,17);
+insert into t (id,a) values (474,18);
+insert into t (id,a) values (474,19);
+insert into t (id,a) values (474,20);
+insert into t (id,a) values (474,21);
+insert into t (id,a) values (474,22);
+insert into t (id,a) values (474,23);
+insert into t (id,a) values (474,24);
+insert into t (id,a) values (474,25);
+insert into t (id,a) values (474,26);
+insert into t (id,a) values (474,27);
+insert into t (id,a) values (474,28);
+insert into t (id,a) values (474,29);
+insert into t (id,a) values (474,30);
+insert into t (id,a) values (474,31);
+insert into t (id,a) values (474,32);
+insert into t (id,a) values (474,33);
+insert into t (id,a) values (474,34);
+insert into t (id,a) values (474,35);
+insert into t (id,a) values (474,36);
+insert into t (id,a) values (474,37);
+insert into t (id,a) values (474,38);
+insert into t (id,a) values (474,39);
+insert into t (id,a) values (474,40);
+insert into t (id,a) values (474,41);
+insert into t (id,a) values (474,42);
+insert into t (id,a) values (474,43);
+insert into t (id,a) values (474,44);
+insert into t (id,a) values (474,45);
+insert into t (id,a) values (474,46);
+insert into t (id,a) values (474,47);
+insert into t (id,a) values (474,48);
+insert into t (id,a) values (474,49);
+insert into t (id,a) values (474,50);
+insert into t (id,a) values (474,51);
+insert into t (id,a) values (474,52);
+insert into t (id,a) values (474,53);
+insert into t (id,a) values (474,54);
+insert into t (id,a) values (474,55);
+insert into t (id,a) values (474,56);
+insert into t (id,a) values (474,57);
+insert into t (id,a) values (474,58);
+insert into t (id,a) values (474,59);
+insert into t (id,a) values (474,60);
+insert into t (id,a) values (474,61);
+insert into t (id,a) values (474,62);
+insert into t (id,a) values (474,63);
+insert into t (id,a) values (474,64);
+insert into t (id,a) values (474,65);
+insert into t (id,a) values (474,66);
+insert into t (id,a) values (474,67);
+insert into t (id,a) values (474,68);
+insert into t (id,a) values (474,69);
+insert into t (id,a) values (474,70);
+insert into t (id,a) values (474,71);
+insert into t (id,a) values (474,72);
+insert into t (id,a) values (474,73);
+insert into t (id,a) values (474,74);
+insert into t (id,a) values (474,75);
+insert into t (id,a) values (474,76);
+insert into t (id,a) values (474,77);
+insert into t (id,a) values (474,78);
+insert into t (id,a) values (474,79);
+insert into t (id,a) values (474,80);
+insert into t (id,a) values (474,81);
+insert into t (id,a) values (474,82);
+insert into t (id,a) values (474,83);
+insert into t (id,a) values (474,84);
+insert into t (id,a) values (474,85);
+insert into t (id,a) values (474,86);
+insert into t (id,a) values (474,87);
+insert into t (id,a) values (474,88);
+insert into t (id,a) values (474,89);
+insert into t (id,a) values (474,90);
+insert into t (id,a) values (474,91);
+insert into t (id,a) values (474,92);
+insert into t (id,a) values (474,93);
+insert into t (id,a) values (474,94);
+insert into t (id,a) values (474,95);
+insert into t (id,a) values (474,96);
+insert into t (id,a) values (474,97);
+insert into t (id,a) values (474,98);
+insert into t (id,a) values (474,99);
+insert into t (id,a) values (475,0);
+insert into t (id,a) values (475,1);
+insert into t (id,a) values (475,2);
+insert into t (id,a) values (475,3);
+insert into t (id,a) values (475,4);
+insert into t (id,a) values (475,5);
+insert into t (id,a) values (475,6);
+insert into t (id,a) values (475,7);
+insert into t (id,a) values (475,8);
+insert into t (id,a) values (475,9);
+insert into t (id,a) values (475,10);
+insert into t (id,a) values (475,11);
+insert into t (id,a) values (475,12);
+insert into t (id,a) values (475,13);
+insert into t (id,a) values (475,14);
+insert into t (id,a) values (475,15);
+insert into t (id,a) values (475,16);
+insert into t (id,a) values (475,17);
+insert into t (id,a) values (475,18);
+insert into t (id,a) values (475,19);
+insert into t (id,a) values (475,20);
+insert into t (id,a) values (475,21);
+insert into t (id,a) values (475,22);
+insert into t (id,a) values (475,23);
+insert into t (id,a) values (475,24);
+insert into t (id,a) values (475,25);
+insert into t (id,a) values (475,26);
+insert into t (id,a) values (475,27);
+insert into t (id,a) values (475,28);
+insert into t (id,a) values (475,29);
+insert into t (id,a) values (475,30);
+insert into t (id,a) values (475,31);
+insert into t (id,a) values (475,32);
+insert into t (id,a) values (475,33);
+insert into t (id,a) values (475,34);
+insert into t (id,a) values (475,35);
+insert into t (id,a) values (475,36);
+insert into t (id,a) values (475,37);
+insert into t (id,a) values (475,38);
+insert into t (id,a) values (475,39);
+insert into t (id,a) values (475,40);
+insert into t (id,a) values (475,41);
+insert into t (id,a) values (475,42);
+insert into t (id,a) values (475,43);
+insert into t (id,a) values (475,44);
+insert into t (id,a) values (475,45);
+insert into t (id,a) values (475,46);
+insert into t (id,a) values (475,47);
+insert into t (id,a) values (475,48);
+insert into t (id,a) values (475,49);
+insert into t (id,a) values (475,50);
+insert into t (id,a) values (475,51);
+insert into t (id,a) values (475,52);
+insert into t (id,a) values (475,53);
+insert into t (id,a) values (475,54);
+insert into t (id,a) values (475,55);
+insert into t (id,a) values (475,56);
+insert into t (id,a) values (475,57);
+insert into t (id,a) values (475,58);
+insert into t (id,a) values (475,59);
+insert into t (id,a) values (475,60);
+insert into t (id,a) values (475,61);
+insert into t (id,a) values (475,62);
+insert into t (id,a) values (475,63);
+insert into t (id,a) values (475,64);
+insert into t (id,a) values (475,65);
+insert into t (id,a) values (475,66);
+insert into t (id,a) values (475,67);
+insert into t (id,a) values (475,68);
+insert into t (id,a) values (475,69);
+insert into t (id,a) values (475,70);
+insert into t (id,a) values (475,71);
+insert into t (id,a) values (475,72);
+insert into t (id,a) values (475,73);
+insert into t (id,a) values (475,74);
+insert into t (id,a) values (475,75);
+insert into t (id,a) values (475,76);
+insert into t (id,a) values (475,77);
+insert into t (id,a) values (475,78);
+insert into t (id,a) values (475,79);
+insert into t (id,a) values (475,80);
+insert into t (id,a) values (475,81);
+insert into t (id,a) values (475,82);
+insert into t (id,a) values (475,83);
+insert into t (id,a) values (475,84);
+insert into t (id,a) values (475,85);
+insert into t (id,a) values (475,86);
+insert into t (id,a) values (475,87);
+insert into t (id,a) values (475,88);
+insert into t (id,a) values (475,89);
+insert into t (id,a) values (475,90);
+insert into t (id,a) values (475,91);
+insert into t (id,a) values (475,92);
+insert into t (id,a) values (475,93);
+insert into t (id,a) values (475,94);
+insert into t (id,a) values (475,95);
+insert into t (id,a) values (475,96);
+insert into t (id,a) values (475,97);
+insert into t (id,a) values (475,98);
+insert into t (id,a) values (475,99);
+insert into t (id,a) values (476,0);
+insert into t (id,a) values (476,1);
+insert into t (id,a) values (476,2);
+insert into t (id,a) values (476,3);
+insert into t (id,a) values (476,4);
+insert into t (id,a) values (476,5);
+insert into t (id,a) values (476,6);
+insert into t (id,a) values (476,7);
+insert into t (id,a) values (476,8);
+insert into t (id,a) values (476,9);
+insert into t (id,a) values (476,10);
+insert into t (id,a) values (476,11);
+insert into t (id,a) values (476,12);
+insert into t (id,a) values (476,13);
+insert into t (id,a) values (476,14);
+insert into t (id,a) values (476,15);
+insert into t (id,a) values (476,16);
+insert into t (id,a) values (476,17);
+insert into t (id,a) values (476,18);
+insert into t (id,a) values (476,19);
+insert into t (id,a) values (476,20);
+insert into t (id,a) values (476,21);
+insert into t (id,a) values (476,22);
+insert into t (id,a) values (476,23);
+insert into t (id,a) values (476,24);
+insert into t (id,a) values (476,25);
+insert into t (id,a) values (476,26);
+insert into t (id,a) values (476,27);
+insert into t (id,a) values (476,28);
+insert into t (id,a) values (476,29);
+insert into t (id,a) values (476,30);
+insert into t (id,a) values (476,31);
+insert into t (id,a) values (476,32);
+insert into t (id,a) values (476,33);
+insert into t (id,a) values (476,34);
+insert into t (id,a) values (476,35);
+insert into t (id,a) values (476,36);
+insert into t (id,a) values (476,37);
+insert into t (id,a) values (476,38);
+insert into t (id,a) values (476,39);
+insert into t (id,a) values (476,40);
+insert into t (id,a) values (476,41);
+insert into t (id,a) values (476,42);
+insert into t (id,a) values (476,43);
+insert into t (id,a) values (476,44);
+insert into t (id,a) values (476,45);
+insert into t (id,a) values (476,46);
+insert into t (id,a) values (476,47);
+insert into t (id,a) values (476,48);
+insert into t (id,a) values (476,49);
+insert into t (id,a) values (476,50);
+insert into t (id,a) values (476,51);
+insert into t (id,a) values (476,52);
+insert into t (id,a) values (476,53);
+insert into t (id,a) values (476,54);
+insert into t (id,a) values (476,55);
+insert into t (id,a) values (476,56);
+insert into t (id,a) values (476,57);
+insert into t (id,a) values (476,58);
+insert into t (id,a) values (476,59);
+insert into t (id,a) values (476,60);
+insert into t (id,a) values (476,61);
+insert into t (id,a) values (476,62);
+insert into t (id,a) values (476,63);
+insert into t (id,a) values (476,64);
+insert into t (id,a) values (476,65);
+insert into t (id,a) values (476,66);
+insert into t (id,a) values (476,67);
+insert into t (id,a) values (476,68);
+insert into t (id,a) values (476,69);
+insert into t (id,a) values (476,70);
+insert into t (id,a) values (476,71);
+insert into t (id,a) values (476,72);
+insert into t (id,a) values (476,73);
+insert into t (id,a) values (476,74);
+insert into t (id,a) values (476,75);
+insert into t (id,a) values (476,76);
+insert into t (id,a) values (476,77);
+insert into t (id,a) values (476,78);
+insert into t (id,a) values (476,79);
+insert into t (id,a) values (476,80);
+insert into t (id,a) values (476,81);
+insert into t (id,a) values (476,82);
+insert into t (id,a) values (476,83);
+insert into t (id,a) values (476,84);
+insert into t (id,a) values (476,85);
+insert into t (id,a) values (476,86);
+insert into t (id,a) values (476,87);
+insert into t (id,a) values (476,88);
+insert into t (id,a) values (476,89);
+insert into t (id,a) values (476,90);
+insert into t (id,a) values (476,91);
+insert into t (id,a) values (476,92);
+insert into t (id,a) values (476,93);
+insert into t (id,a) values (476,94);
+insert into t (id,a) values (476,95);
+insert into t (id,a) values (476,96);
+insert into t (id,a) values (476,97);
+insert into t (id,a) values (476,98);
+insert into t (id,a) values (476,99);
+insert into t (id,a) values (477,0);
+insert into t (id,a) values (477,1);
+insert into t (id,a) values (477,2);
+insert into t (id,a) values (477,3);
+insert into t (id,a) values (477,4);
+insert into t (id,a) values (477,5);
+insert into t (id,a) values (477,6);
+insert into t (id,a) values (477,7);
+insert into t (id,a) values (477,8);
+insert into t (id,a) values (477,9);
+insert into t (id,a) values (477,10);
+insert into t (id,a) values (477,11);
+insert into t (id,a) values (477,12);
+insert into t (id,a) values (477,13);
+insert into t (id,a) values (477,14);
+insert into t (id,a) values (477,15);
+insert into t (id,a) values (477,16);
+insert into t (id,a) values (477,17);
+insert into t (id,a) values (477,18);
+insert into t (id,a) values (477,19);
+insert into t (id,a) values (477,20);
+insert into t (id,a) values (477,21);
+insert into t (id,a) values (477,22);
+insert into t (id,a) values (477,23);
+insert into t (id,a) values (477,24);
+insert into t (id,a) values (477,25);
+insert into t (id,a) values (477,26);
+insert into t (id,a) values (477,27);
+insert into t (id,a) values (477,28);
+insert into t (id,a) values (477,29);
+insert into t (id,a) values (477,30);
+insert into t (id,a) values (477,31);
+insert into t (id,a) values (477,32);
+insert into t (id,a) values (477,33);
+insert into t (id,a) values (477,34);
+insert into t (id,a) values (477,35);
+insert into t (id,a) values (477,36);
+insert into t (id,a) values (477,37);
+insert into t (id,a) values (477,38);
+insert into t (id,a) values (477,39);
+insert into t (id,a) values (477,40);
+insert into t (id,a) values (477,41);
+insert into t (id,a) values (477,42);
+insert into t (id,a) values (477,43);
+insert into t (id,a) values (477,44);
+insert into t (id,a) values (477,45);
+insert into t (id,a) values (477,46);
+insert into t (id,a) values (477,47);
+insert into t (id,a) values (477,48);
+insert into t (id,a) values (477,49);
+insert into t (id,a) values (477,50);
+insert into t (id,a) values (477,51);
+insert into t (id,a) values (477,52);
+insert into t (id,a) values (477,53);
+insert into t (id,a) values (477,54);
+insert into t (id,a) values (477,55);
+insert into t (id,a) values (477,56);
+insert into t (id,a) values (477,57);
+insert into t (id,a) values (477,58);
+insert into t (id,a) values (477,59);
+insert into t (id,a) values (477,60);
+insert into t (id,a) values (477,61);
+insert into t (id,a) values (477,62);
+insert into t (id,a) values (477,63);
+insert into t (id,a) values (477,64);
+insert into t (id,a) values (477,65);
+insert into t (id,a) values (477,66);
+insert into t (id,a) values (477,67);
+insert into t (id,a) values (477,68);
+insert into t (id,a) values (477,69);
+insert into t (id,a) values (477,70);
+insert into t (id,a) values (477,71);
+insert into t (id,a) values (477,72);
+insert into t (id,a) values (477,73);
+insert into t (id,a) values (477,74);
+insert into t (id,a) values (477,75);
+insert into t (id,a) values (477,76);
+insert into t (id,a) values (477,77);
+insert into t (id,a) values (477,78);
+insert into t (id,a) values (477,79);
+insert into t (id,a) values (477,80);
+insert into t (id,a) values (477,81);
+insert into t (id,a) values (477,82);
+insert into t (id,a) values (477,83);
+insert into t (id,a) values (477,84);
+insert into t (id,a) values (477,85);
+insert into t (id,a) values (477,86);
+insert into t (id,a) values (477,87);
+insert into t (id,a) values (477,88);
+insert into t (id,a) values (477,89);
+insert into t (id,a) values (477,90);
+insert into t (id,a) values (477,91);
+insert into t (id,a) values (477,92);
+insert into t (id,a) values (477,93);
+insert into t (id,a) values (477,94);
+insert into t (id,a) values (477,95);
+insert into t (id,a) values (477,96);
+insert into t (id,a) values (477,97);
+insert into t (id,a) values (477,98);
+insert into t (id,a) values (477,99);
+insert into t (id,a) values (478,0);
+insert into t (id,a) values (478,1);
+insert into t (id,a) values (478,2);
+insert into t (id,a) values (478,3);
+insert into t (id,a) values (478,4);
+insert into t (id,a) values (478,5);
+insert into t (id,a) values (478,6);
+insert into t (id,a) values (478,7);
+insert into t (id,a) values (478,8);
+insert into t (id,a) values (478,9);
+insert into t (id,a) values (478,10);
+insert into t (id,a) values (478,11);
+insert into t (id,a) values (478,12);
+insert into t (id,a) values (478,13);
+insert into t (id,a) values (478,14);
+insert into t (id,a) values (478,15);
+insert into t (id,a) values (478,16);
+insert into t (id,a) values (478,17);
+insert into t (id,a) values (478,18);
+insert into t (id,a) values (478,19);
+insert into t (id,a) values (478,20);
+insert into t (id,a) values (478,21);
+insert into t (id,a) values (478,22);
+insert into t (id,a) values (478,23);
+insert into t (id,a) values (478,24);
+insert into t (id,a) values (478,25);
+insert into t (id,a) values (478,26);
+insert into t (id,a) values (478,27);
+insert into t (id,a) values (478,28);
+insert into t (id,a) values (478,29);
+insert into t (id,a) values (478,30);
+insert into t (id,a) values (478,31);
+insert into t (id,a) values (478,32);
+insert into t (id,a) values (478,33);
+insert into t (id,a) values (478,34);
+insert into t (id,a) values (478,35);
+insert into t (id,a) values (478,36);
+insert into t (id,a) values (478,37);
+insert into t (id,a) values (478,38);
+insert into t (id,a) values (478,39);
+insert into t (id,a) values (478,40);
+insert into t (id,a) values (478,41);
+insert into t (id,a) values (478,42);
+insert into t (id,a) values (478,43);
+insert into t (id,a) values (478,44);
+insert into t (id,a) values (478,45);
+insert into t (id,a) values (478,46);
+insert into t (id,a) values (478,47);
+insert into t (id,a) values (478,48);
+insert into t (id,a) values (478,49);
+insert into t (id,a) values (478,50);
+insert into t (id,a) values (478,51);
+insert into t (id,a) values (478,52);
+insert into t (id,a) values (478,53);
+insert into t (id,a) values (478,54);
+insert into t (id,a) values (478,55);
+insert into t (id,a) values (478,56);
+insert into t (id,a) values (478,57);
+insert into t (id,a) values (478,58);
+insert into t (id,a) values (478,59);
+insert into t (id,a) values (478,60);
+insert into t (id,a) values (478,61);
+insert into t (id,a) values (478,62);
+insert into t (id,a) values (478,63);
+insert into t (id,a) values (478,64);
+insert into t (id,a) values (478,65);
+insert into t (id,a) values (478,66);
+insert into t (id,a) values (478,67);
+insert into t (id,a) values (478,68);
+insert into t (id,a) values (478,69);
+insert into t (id,a) values (478,70);
+insert into t (id,a) values (478,71);
+insert into t (id,a) values (478,72);
+insert into t (id,a) values (478,73);
+insert into t (id,a) values (478,74);
+insert into t (id,a) values (478,75);
+insert into t (id,a) values (478,76);
+insert into t (id,a) values (478,77);
+insert into t (id,a) values (478,78);
+insert into t (id,a) values (478,79);
+insert into t (id,a) values (478,80);
+insert into t (id,a) values (478,81);
+insert into t (id,a) values (478,82);
+insert into t (id,a) values (478,83);
+insert into t (id,a) values (478,84);
+insert into t (id,a) values (478,85);
+insert into t (id,a) values (478,86);
+insert into t (id,a) values (478,87);
+insert into t (id,a) values (478,88);
+insert into t (id,a) values (478,89);
+insert into t (id,a) values (478,90);
+insert into t (id,a) values (478,91);
+insert into t (id,a) values (478,92);
+insert into t (id,a) values (478,93);
+insert into t (id,a) values (478,94);
+insert into t (id,a) values (478,95);
+insert into t (id,a) values (478,96);
+insert into t (id,a) values (478,97);
+insert into t (id,a) values (478,98);
+insert into t (id,a) values (478,99);
+insert into t (id,a) values (479,0);
+insert into t (id,a) values (479,1);
+insert into t (id,a) values (479,2);
+insert into t (id,a) values (479,3);
+insert into t (id,a) values (479,4);
+insert into t (id,a) values (479,5);
+insert into t (id,a) values (479,6);
+insert into t (id,a) values (479,7);
+insert into t (id,a) values (479,8);
+insert into t (id,a) values (479,9);
+insert into t (id,a) values (479,10);
+insert into t (id,a) values (479,11);
+insert into t (id,a) values (479,12);
+insert into t (id,a) values (479,13);
+insert into t (id,a) values (479,14);
+insert into t (id,a) values (479,15);
+insert into t (id,a) values (479,16);
+insert into t (id,a) values (479,17);
+insert into t (id,a) values (479,18);
+insert into t (id,a) values (479,19);
+insert into t (id,a) values (479,20);
+insert into t (id,a) values (479,21);
+insert into t (id,a) values (479,22);
+insert into t (id,a) values (479,23);
+insert into t (id,a) values (479,24);
+insert into t (id,a) values (479,25);
+insert into t (id,a) values (479,26);
+insert into t (id,a) values (479,27);
+insert into t (id,a) values (479,28);
+insert into t (id,a) values (479,29);
+insert into t (id,a) values (479,30);
+insert into t (id,a) values (479,31);
+insert into t (id,a) values (479,32);
+insert into t (id,a) values (479,33);
+insert into t (id,a) values (479,34);
+insert into t (id,a) values (479,35);
+insert into t (id,a) values (479,36);
+insert into t (id,a) values (479,37);
+insert into t (id,a) values (479,38);
+insert into t (id,a) values (479,39);
+insert into t (id,a) values (479,40);
+insert into t (id,a) values (479,41);
+insert into t (id,a) values (479,42);
+insert into t (id,a) values (479,43);
+insert into t (id,a) values (479,44);
+insert into t (id,a) values (479,45);
+insert into t (id,a) values (479,46);
+insert into t (id,a) values (479,47);
+insert into t (id,a) values (479,48);
+insert into t (id,a) values (479,49);
+insert into t (id,a) values (479,50);
+insert into t (id,a) values (479,51);
+insert into t (id,a) values (479,52);
+insert into t (id,a) values (479,53);
+insert into t (id,a) values (479,54);
+insert into t (id,a) values (479,55);
+insert into t (id,a) values (479,56);
+insert into t (id,a) values (479,57);
+insert into t (id,a) values (479,58);
+insert into t (id,a) values (479,59);
+insert into t (id,a) values (479,60);
+insert into t (id,a) values (479,61);
+insert into t (id,a) values (479,62);
+insert into t (id,a) values (479,63);
+insert into t (id,a) values (479,64);
+insert into t (id,a) values (479,65);
+insert into t (id,a) values (479,66);
+insert into t (id,a) values (479,67);
+insert into t (id,a) values (479,68);
+insert into t (id,a) values (479,69);
+insert into t (id,a) values (479,70);
+insert into t (id,a) values (479,71);
+insert into t (id,a) values (479,72);
+insert into t (id,a) values (479,73);
+insert into t (id,a) values (479,74);
+insert into t (id,a) values (479,75);
+insert into t (id,a) values (479,76);
+insert into t (id,a) values (479,77);
+insert into t (id,a) values (479,78);
+insert into t (id,a) values (479,79);
+insert into t (id,a) values (479,80);
+insert into t (id,a) values (479,81);
+insert into t (id,a) values (479,82);
+insert into t (id,a) values (479,83);
+insert into t (id,a) values (479,84);
+insert into t (id,a) values (479,85);
+insert into t (id,a) values (479,86);
+insert into t (id,a) values (479,87);
+insert into t (id,a) values (479,88);
+insert into t (id,a) values (479,89);
+insert into t (id,a) values (479,90);
+insert into t (id,a) values (479,91);
+insert into t (id,a) values (479,92);
+insert into t (id,a) values (479,93);
+insert into t (id,a) values (479,94);
+insert into t (id,a) values (479,95);
+insert into t (id,a) values (479,96);
+insert into t (id,a) values (479,97);
+insert into t (id,a) values (479,98);
+insert into t (id,a) values (479,99);
+insert into t (id,a) values (480,0);
+insert into t (id,a) values (480,1);
+insert into t (id,a) values (480,2);
+insert into t (id,a) values (480,3);
+insert into t (id,a) values (480,4);
+insert into t (id,a) values (480,5);
+insert into t (id,a) values (480,6);
+insert into t (id,a) values (480,7);
+insert into t (id,a) values (480,8);
+insert into t (id,a) values (480,9);
+insert into t (id,a) values (480,10);
+insert into t (id,a) values (480,11);
+insert into t (id,a) values (480,12);
+insert into t (id,a) values (480,13);
+insert into t (id,a) values (480,14);
+insert into t (id,a) values (480,15);
+insert into t (id,a) values (480,16);
+insert into t (id,a) values (480,17);
+insert into t (id,a) values (480,18);
+insert into t (id,a) values (480,19);
+insert into t (id,a) values (480,20);
+insert into t (id,a) values (480,21);
+insert into t (id,a) values (480,22);
+insert into t (id,a) values (480,23);
+insert into t (id,a) values (480,24);
+insert into t (id,a) values (480,25);
+insert into t (id,a) values (480,26);
+insert into t (id,a) values (480,27);
+insert into t (id,a) values (480,28);
+insert into t (id,a) values (480,29);
+insert into t (id,a) values (480,30);
+insert into t (id,a) values (480,31);
+insert into t (id,a) values (480,32);
+insert into t (id,a) values (480,33);
+insert into t (id,a) values (480,34);
+insert into t (id,a) values (480,35);
+insert into t (id,a) values (480,36);
+insert into t (id,a) values (480,37);
+insert into t (id,a) values (480,38);
+insert into t (id,a) values (480,39);
+insert into t (id,a) values (480,40);
+insert into t (id,a) values (480,41);
+insert into t (id,a) values (480,42);
+insert into t (id,a) values (480,43);
+insert into t (id,a) values (480,44);
+insert into t (id,a) values (480,45);
+insert into t (id,a) values (480,46);
+insert into t (id,a) values (480,47);
+insert into t (id,a) values (480,48);
+insert into t (id,a) values (480,49);
+insert into t (id,a) values (480,50);
+insert into t (id,a) values (480,51);
+insert into t (id,a) values (480,52);
+insert into t (id,a) values (480,53);
+insert into t (id,a) values (480,54);
+insert into t (id,a) values (480,55);
+insert into t (id,a) values (480,56);
+insert into t (id,a) values (480,57);
+insert into t (id,a) values (480,58);
+insert into t (id,a) values (480,59);
+insert into t (id,a) values (480,60);
+insert into t (id,a) values (480,61);
+insert into t (id,a) values (480,62);
+insert into t (id,a) values (480,63);
+insert into t (id,a) values (480,64);
+insert into t (id,a) values (480,65);
+insert into t (id,a) values (480,66);
+insert into t (id,a) values (480,67);
+insert into t (id,a) values (480,68);
+insert into t (id,a) values (480,69);
+insert into t (id,a) values (480,70);
+insert into t (id,a) values (480,71);
+insert into t (id,a) values (480,72);
+insert into t (id,a) values (480,73);
+insert into t (id,a) values (480,74);
+insert into t (id,a) values (480,75);
+insert into t (id,a) values (480,76);
+insert into t (id,a) values (480,77);
+insert into t (id,a) values (480,78);
+insert into t (id,a) values (480,79);
+insert into t (id,a) values (480,80);
+insert into t (id,a) values (480,81);
+insert into t (id,a) values (480,82);
+insert into t (id,a) values (480,83);
+insert into t (id,a) values (480,84);
+insert into t (id,a) values (480,85);
+insert into t (id,a) values (480,86);
+insert into t (id,a) values (480,87);
+insert into t (id,a) values (480,88);
+insert into t (id,a) values (480,89);
+insert into t (id,a) values (480,90);
+insert into t (id,a) values (480,91);
+insert into t (id,a) values (480,92);
+insert into t (id,a) values (480,93);
+insert into t (id,a) values (480,94);
+insert into t (id,a) values (480,95);
+insert into t (id,a) values (480,96);
+insert into t (id,a) values (480,97);
+insert into t (id,a) values (480,98);
+insert into t (id,a) values (480,99);
+insert into t (id,a) values (481,0);
+insert into t (id,a) values (481,1);
+insert into t (id,a) values (481,2);
+insert into t (id,a) values (481,3);
+insert into t (id,a) values (481,4);
+insert into t (id,a) values (481,5);
+insert into t (id,a) values (481,6);
+insert into t (id,a) values (481,7);
+insert into t (id,a) values (481,8);
+insert into t (id,a) values (481,9);
+insert into t (id,a) values (481,10);
+insert into t (id,a) values (481,11);
+insert into t (id,a) values (481,12);
+insert into t (id,a) values (481,13);
+insert into t (id,a) values (481,14);
+insert into t (id,a) values (481,15);
+insert into t (id,a) values (481,16);
+insert into t (id,a) values (481,17);
+insert into t (id,a) values (481,18);
+insert into t (id,a) values (481,19);
+insert into t (id,a) values (481,20);
+insert into t (id,a) values (481,21);
+insert into t (id,a) values (481,22);
+insert into t (id,a) values (481,23);
+insert into t (id,a) values (481,24);
+insert into t (id,a) values (481,25);
+insert into t (id,a) values (481,26);
+insert into t (id,a) values (481,27);
+insert into t (id,a) values (481,28);
+insert into t (id,a) values (481,29);
+insert into t (id,a) values (481,30);
+insert into t (id,a) values (481,31);
+insert into t (id,a) values (481,32);
+insert into t (id,a) values (481,33);
+insert into t (id,a) values (481,34);
+insert into t (id,a) values (481,35);
+insert into t (id,a) values (481,36);
+insert into t (id,a) values (481,37);
+insert into t (id,a) values (481,38);
+insert into t (id,a) values (481,39);
+insert into t (id,a) values (481,40);
+insert into t (id,a) values (481,41);
+insert into t (id,a) values (481,42);
+insert into t (id,a) values (481,43);
+insert into t (id,a) values (481,44);
+insert into t (id,a) values (481,45);
+insert into t (id,a) values (481,46);
+insert into t (id,a) values (481,47);
+insert into t (id,a) values (481,48);
+insert into t (id,a) values (481,49);
+insert into t (id,a) values (481,50);
+insert into t (id,a) values (481,51);
+insert into t (id,a) values (481,52);
+insert into t (id,a) values (481,53);
+insert into t (id,a) values (481,54);
+insert into t (id,a) values (481,55);
+insert into t (id,a) values (481,56);
+insert into t (id,a) values (481,57);
+insert into t (id,a) values (481,58);
+insert into t (id,a) values (481,59);
+insert into t (id,a) values (481,60);
+insert into t (id,a) values (481,61);
+insert into t (id,a) values (481,62);
+insert into t (id,a) values (481,63);
+insert into t (id,a) values (481,64);
+insert into t (id,a) values (481,65);
+insert into t (id,a) values (481,66);
+insert into t (id,a) values (481,67);
+insert into t (id,a) values (481,68);
+insert into t (id,a) values (481,69);
+insert into t (id,a) values (481,70);
+insert into t (id,a) values (481,71);
+insert into t (id,a) values (481,72);
+insert into t (id,a) values (481,73);
+insert into t (id,a) values (481,74);
+insert into t (id,a) values (481,75);
+insert into t (id,a) values (481,76);
+insert into t (id,a) values (481,77);
+insert into t (id,a) values (481,78);
+insert into t (id,a) values (481,79);
+insert into t (id,a) values (481,80);
+insert into t (id,a) values (481,81);
+insert into t (id,a) values (481,82);
+insert into t (id,a) values (481,83);
+insert into t (id,a) values (481,84);
+insert into t (id,a) values (481,85);
+insert into t (id,a) values (481,86);
+insert into t (id,a) values (481,87);
+insert into t (id,a) values (481,88);
+insert into t (id,a) values (481,89);
+insert into t (id,a) values (481,90);
+insert into t (id,a) values (481,91);
+insert into t (id,a) values (481,92);
+insert into t (id,a) values (481,93);
+insert into t (id,a) values (481,94);
+insert into t (id,a) values (481,95);
+insert into t (id,a) values (481,96);
+insert into t (id,a) values (481,97);
+insert into t (id,a) values (481,98);
+insert into t (id,a) values (481,99);
+insert into t (id,a) values (482,0);
+insert into t (id,a) values (482,1);
+insert into t (id,a) values (482,2);
+insert into t (id,a) values (482,3);
+insert into t (id,a) values (482,4);
+insert into t (id,a) values (482,5);
+insert into t (id,a) values (482,6);
+insert into t (id,a) values (482,7);
+insert into t (id,a) values (482,8);
+insert into t (id,a) values (482,9);
+insert into t (id,a) values (482,10);
+insert into t (id,a) values (482,11);
+insert into t (id,a) values (482,12);
+insert into t (id,a) values (482,13);
+insert into t (id,a) values (482,14);
+insert into t (id,a) values (482,15);
+insert into t (id,a) values (482,16);
+insert into t (id,a) values (482,17);
+insert into t (id,a) values (482,18);
+insert into t (id,a) values (482,19);
+insert into t (id,a) values (482,20);
+insert into t (id,a) values (482,21);
+insert into t (id,a) values (482,22);
+insert into t (id,a) values (482,23);
+insert into t (id,a) values (482,24);
+insert into t (id,a) values (482,25);
+insert into t (id,a) values (482,26);
+insert into t (id,a) values (482,27);
+insert into t (id,a) values (482,28);
+insert into t (id,a) values (482,29);
+insert into t (id,a) values (482,30);
+insert into t (id,a) values (482,31);
+insert into t (id,a) values (482,32);
+insert into t (id,a) values (482,33);
+insert into t (id,a) values (482,34);
+insert into t (id,a) values (482,35);
+insert into t (id,a) values (482,36);
+insert into t (id,a) values (482,37);
+insert into t (id,a) values (482,38);
+insert into t (id,a) values (482,39);
+insert into t (id,a) values (482,40);
+insert into t (id,a) values (482,41);
+insert into t (id,a) values (482,42);
+insert into t (id,a) values (482,43);
+insert into t (id,a) values (482,44);
+insert into t (id,a) values (482,45);
+insert into t (id,a) values (482,46);
+insert into t (id,a) values (482,47);
+insert into t (id,a) values (482,48);
+insert into t (id,a) values (482,49);
+insert into t (id,a) values (482,50);
+insert into t (id,a) values (482,51);
+insert into t (id,a) values (482,52);
+insert into t (id,a) values (482,53);
+insert into t (id,a) values (482,54);
+insert into t (id,a) values (482,55);
+insert into t (id,a) values (482,56);
+insert into t (id,a) values (482,57);
+insert into t (id,a) values (482,58);
+insert into t (id,a) values (482,59);
+insert into t (id,a) values (482,60);
+insert into t (id,a) values (482,61);
+insert into t (id,a) values (482,62);
+insert into t (id,a) values (482,63);
+insert into t (id,a) values (482,64);
+insert into t (id,a) values (482,65);
+insert into t (id,a) values (482,66);
+insert into t (id,a) values (482,67);
+insert into t (id,a) values (482,68);
+insert into t (id,a) values (482,69);
+insert into t (id,a) values (482,70);
+insert into t (id,a) values (482,71);
+insert into t (id,a) values (482,72);
+insert into t (id,a) values (482,73);
+insert into t (id,a) values (482,74);
+insert into t (id,a) values (482,75);
+insert into t (id,a) values (482,76);
+insert into t (id,a) values (482,77);
+insert into t (id,a) values (482,78);
+insert into t (id,a) values (482,79);
+insert into t (id,a) values (482,80);
+insert into t (id,a) values (482,81);
+insert into t (id,a) values (482,82);
+insert into t (id,a) values (482,83);
+insert into t (id,a) values (482,84);
+insert into t (id,a) values (482,85);
+insert into t (id,a) values (482,86);
+insert into t (id,a) values (482,87);
+insert into t (id,a) values (482,88);
+insert into t (id,a) values (482,89);
+insert into t (id,a) values (482,90);
+insert into t (id,a) values (482,91);
+insert into t (id,a) values (482,92);
+insert into t (id,a) values (482,93);
+insert into t (id,a) values (482,94);
+insert into t (id,a) values (482,95);
+insert into t (id,a) values (482,96);
+insert into t (id,a) values (482,97);
+insert into t (id,a) values (482,98);
+insert into t (id,a) values (482,99);
+insert into t (id,a) values (483,0);
+insert into t (id,a) values (483,1);
+insert into t (id,a) values (483,2);
+insert into t (id,a) values (483,3);
+insert into t (id,a) values (483,4);
+insert into t (id,a) values (483,5);
+insert into t (id,a) values (483,6);
+insert into t (id,a) values (483,7);
+insert into t (id,a) values (483,8);
+insert into t (id,a) values (483,9);
+insert into t (id,a) values (483,10);
+insert into t (id,a) values (483,11);
+insert into t (id,a) values (483,12);
+insert into t (id,a) values (483,13);
+insert into t (id,a) values (483,14);
+insert into t (id,a) values (483,15);
+insert into t (id,a) values (483,16);
+insert into t (id,a) values (483,17);
+insert into t (id,a) values (483,18);
+insert into t (id,a) values (483,19);
+insert into t (id,a) values (483,20);
+insert into t (id,a) values (483,21);
+insert into t (id,a) values (483,22);
+insert into t (id,a) values (483,23);
+insert into t (id,a) values (483,24);
+insert into t (id,a) values (483,25);
+insert into t (id,a) values (483,26);
+insert into t (id,a) values (483,27);
+insert into t (id,a) values (483,28);
+insert into t (id,a) values (483,29);
+insert into t (id,a) values (483,30);
+insert into t (id,a) values (483,31);
+insert into t (id,a) values (483,32);
+insert into t (id,a) values (483,33);
+insert into t (id,a) values (483,34);
+insert into t (id,a) values (483,35);
+insert into t (id,a) values (483,36);
+insert into t (id,a) values (483,37);
+insert into t (id,a) values (483,38);
+insert into t (id,a) values (483,39);
+insert into t (id,a) values (483,40);
+insert into t (id,a) values (483,41);
+insert into t (id,a) values (483,42);
+insert into t (id,a) values (483,43);
+insert into t (id,a) values (483,44);
+insert into t (id,a) values (483,45);
+insert into t (id,a) values (483,46);
+insert into t (id,a) values (483,47);
+insert into t (id,a) values (483,48);
+insert into t (id,a) values (483,49);
+insert into t (id,a) values (483,50);
+insert into t (id,a) values (483,51);
+insert into t (id,a) values (483,52);
+insert into t (id,a) values (483,53);
+insert into t (id,a) values (483,54);
+insert into t (id,a) values (483,55);
+insert into t (id,a) values (483,56);
+insert into t (id,a) values (483,57);
+insert into t (id,a) values (483,58);
+insert into t (id,a) values (483,59);
+insert into t (id,a) values (483,60);
+insert into t (id,a) values (483,61);
+insert into t (id,a) values (483,62);
+insert into t (id,a) values (483,63);
+insert into t (id,a) values (483,64);
+insert into t (id,a) values (483,65);
+insert into t (id,a) values (483,66);
+insert into t (id,a) values (483,67);
+insert into t (id,a) values (483,68);
+insert into t (id,a) values (483,69);
+insert into t (id,a) values (483,70);
+insert into t (id,a) values (483,71);
+insert into t (id,a) values (483,72);
+insert into t (id,a) values (483,73);
+insert into t (id,a) values (483,74);
+insert into t (id,a) values (483,75);
+insert into t (id,a) values (483,76);
+insert into t (id,a) values (483,77);
+insert into t (id,a) values (483,78);
+insert into t (id,a) values (483,79);
+insert into t (id,a) values (483,80);
+insert into t (id,a) values (483,81);
+insert into t (id,a) values (483,82);
+insert into t (id,a) values (483,83);
+insert into t (id,a) values (483,84);
+insert into t (id,a) values (483,85);
+insert into t (id,a) values (483,86);
+insert into t (id,a) values (483,87);
+insert into t (id,a) values (483,88);
+insert into t (id,a) values (483,89);
+insert into t (id,a) values (483,90);
+insert into t (id,a) values (483,91);
+insert into t (id,a) values (483,92);
+insert into t (id,a) values (483,93);
+insert into t (id,a) values (483,94);
+insert into t (id,a) values (483,95);
+insert into t (id,a) values (483,96);
+insert into t (id,a) values (483,97);
+insert into t (id,a) values (483,98);
+insert into t (id,a) values (483,99);
+insert into t (id,a) values (484,0);
+insert into t (id,a) values (484,1);
+insert into t (id,a) values (484,2);
+insert into t (id,a) values (484,3);
+insert into t (id,a) values (484,4);
+insert into t (id,a) values (484,5);
+insert into t (id,a) values (484,6);
+insert into t (id,a) values (484,7);
+insert into t (id,a) values (484,8);
+insert into t (id,a) values (484,9);
+insert into t (id,a) values (484,10);
+insert into t (id,a) values (484,11);
+insert into t (id,a) values (484,12);
+insert into t (id,a) values (484,13);
+insert into t (id,a) values (484,14);
+insert into t (id,a) values (484,15);
+insert into t (id,a) values (484,16);
+insert into t (id,a) values (484,17);
+insert into t (id,a) values (484,18);
+insert into t (id,a) values (484,19);
+insert into t (id,a) values (484,20);
+insert into t (id,a) values (484,21);
+insert into t (id,a) values (484,22);
+insert into t (id,a) values (484,23);
+insert into t (id,a) values (484,24);
+insert into t (id,a) values (484,25);
+insert into t (id,a) values (484,26);
+insert into t (id,a) values (484,27);
+insert into t (id,a) values (484,28);
+insert into t (id,a) values (484,29);
+insert into t (id,a) values (484,30);
+insert into t (id,a) values (484,31);
+insert into t (id,a) values (484,32);
+insert into t (id,a) values (484,33);
+insert into t (id,a) values (484,34);
+insert into t (id,a) values (484,35);
+insert into t (id,a) values (484,36);
+insert into t (id,a) values (484,37);
+insert into t (id,a) values (484,38);
+insert into t (id,a) values (484,39);
+insert into t (id,a) values (484,40);
+insert into t (id,a) values (484,41);
+insert into t (id,a) values (484,42);
+insert into t (id,a) values (484,43);
+insert into t (id,a) values (484,44);
+insert into t (id,a) values (484,45);
+insert into t (id,a) values (484,46);
+insert into t (id,a) values (484,47);
+insert into t (id,a) values (484,48);
+insert into t (id,a) values (484,49);
+insert into t (id,a) values (484,50);
+insert into t (id,a) values (484,51);
+insert into t (id,a) values (484,52);
+insert into t (id,a) values (484,53);
+insert into t (id,a) values (484,54);
+insert into t (id,a) values (484,55);
+insert into t (id,a) values (484,56);
+insert into t (id,a) values (484,57);
+insert into t (id,a) values (484,58);
+insert into t (id,a) values (484,59);
+insert into t (id,a) values (484,60);
+insert into t (id,a) values (484,61);
+insert into t (id,a) values (484,62);
+insert into t (id,a) values (484,63);
+insert into t (id,a) values (484,64);
+insert into t (id,a) values (484,65);
+insert into t (id,a) values (484,66);
+insert into t (id,a) values (484,67);
+insert into t (id,a) values (484,68);
+insert into t (id,a) values (484,69);
+insert into t (id,a) values (484,70);
+insert into t (id,a) values (484,71);
+insert into t (id,a) values (484,72);
+insert into t (id,a) values (484,73);
+insert into t (id,a) values (484,74);
+insert into t (id,a) values (484,75);
+insert into t (id,a) values (484,76);
+insert into t (id,a) values (484,77);
+insert into t (id,a) values (484,78);
+insert into t (id,a) values (484,79);
+insert into t (id,a) values (484,80);
+insert into t (id,a) values (484,81);
+insert into t (id,a) values (484,82);
+insert into t (id,a) values (484,83);
+insert into t (id,a) values (484,84);
+insert into t (id,a) values (484,85);
+insert into t (id,a) values (484,86);
+insert into t (id,a) values (484,87);
+insert into t (id,a) values (484,88);
+insert into t (id,a) values (484,89);
+insert into t (id,a) values (484,90);
+insert into t (id,a) values (484,91);
+insert into t (id,a) values (484,92);
+insert into t (id,a) values (484,93);
+insert into t (id,a) values (484,94);
+insert into t (id,a) values (484,95);
+insert into t (id,a) values (484,96);
+insert into t (id,a) values (484,97);
+insert into t (id,a) values (484,98);
+insert into t (id,a) values (484,99);
+insert into t (id,a) values (485,0);
+insert into t (id,a) values (485,1);
+insert into t (id,a) values (485,2);
+insert into t (id,a) values (485,3);
+insert into t (id,a) values (485,4);
+insert into t (id,a) values (485,5);
+insert into t (id,a) values (485,6);
+insert into t (id,a) values (485,7);
+insert into t (id,a) values (485,8);
+insert into t (id,a) values (485,9);
+insert into t (id,a) values (485,10);
+insert into t (id,a) values (485,11);
+insert into t (id,a) values (485,12);
+insert into t (id,a) values (485,13);
+insert into t (id,a) values (485,14);
+insert into t (id,a) values (485,15);
+insert into t (id,a) values (485,16);
+insert into t (id,a) values (485,17);
+insert into t (id,a) values (485,18);
+insert into t (id,a) values (485,19);
+insert into t (id,a) values (485,20);
+insert into t (id,a) values (485,21);
+insert into t (id,a) values (485,22);
+insert into t (id,a) values (485,23);
+insert into t (id,a) values (485,24);
+insert into t (id,a) values (485,25);
+insert into t (id,a) values (485,26);
+insert into t (id,a) values (485,27);
+insert into t (id,a) values (485,28);
+insert into t (id,a) values (485,29);
+insert into t (id,a) values (485,30);
+insert into t (id,a) values (485,31);
+insert into t (id,a) values (485,32);
+insert into t (id,a) values (485,33);
+insert into t (id,a) values (485,34);
+insert into t (id,a) values (485,35);
+insert into t (id,a) values (485,36);
+insert into t (id,a) values (485,37);
+insert into t (id,a) values (485,38);
+insert into t (id,a) values (485,39);
+insert into t (id,a) values (485,40);
+insert into t (id,a) values (485,41);
+insert into t (id,a) values (485,42);
+insert into t (id,a) values (485,43);
+insert into t (id,a) values (485,44);
+insert into t (id,a) values (485,45);
+insert into t (id,a) values (485,46);
+insert into t (id,a) values (485,47);
+insert into t (id,a) values (485,48);
+insert into t (id,a) values (485,49);
+insert into t (id,a) values (485,50);
+insert into t (id,a) values (485,51);
+insert into t (id,a) values (485,52);
+insert into t (id,a) values (485,53);
+insert into t (id,a) values (485,54);
+insert into t (id,a) values (485,55);
+insert into t (id,a) values (485,56);
+insert into t (id,a) values (485,57);
+insert into t (id,a) values (485,58);
+insert into t (id,a) values (485,59);
+insert into t (id,a) values (485,60);
+insert into t (id,a) values (485,61);
+insert into t (id,a) values (485,62);
+insert into t (id,a) values (485,63);
+insert into t (id,a) values (485,64);
+insert into t (id,a) values (485,65);
+insert into t (id,a) values (485,66);
+insert into t (id,a) values (485,67);
+insert into t (id,a) values (485,68);
+insert into t (id,a) values (485,69);
+insert into t (id,a) values (485,70);
+insert into t (id,a) values (485,71);
+insert into t (id,a) values (485,72);
+insert into t (id,a) values (485,73);
+insert into t (id,a) values (485,74);
+insert into t (id,a) values (485,75);
+insert into t (id,a) values (485,76);
+insert into t (id,a) values (485,77);
+insert into t (id,a) values (485,78);
+insert into t (id,a) values (485,79);
+insert into t (id,a) values (485,80);
+insert into t (id,a) values (485,81);
+insert into t (id,a) values (485,82);
+insert into t (id,a) values (485,83);
+insert into t (id,a) values (485,84);
+insert into t (id,a) values (485,85);
+insert into t (id,a) values (485,86);
+insert into t (id,a) values (485,87);
+insert into t (id,a) values (485,88);
+insert into t (id,a) values (485,89);
+insert into t (id,a) values (485,90);
+insert into t (id,a) values (485,91);
+insert into t (id,a) values (485,92);
+insert into t (id,a) values (485,93);
+insert into t (id,a) values (485,94);
+insert into t (id,a) values (485,95);
+insert into t (id,a) values (485,96);
+insert into t (id,a) values (485,97);
+insert into t (id,a) values (485,98);
+insert into t (id,a) values (485,99);
+insert into t (id,a) values (486,0);
+insert into t (id,a) values (486,1);
+insert into t (id,a) values (486,2);
+insert into t (id,a) values (486,3);
+insert into t (id,a) values (486,4);
+insert into t (id,a) values (486,5);
+insert into t (id,a) values (486,6);
+insert into t (id,a) values (486,7);
+insert into t (id,a) values (486,8);
+insert into t (id,a) values (486,9);
+insert into t (id,a) values (486,10);
+insert into t (id,a) values (486,11);
+insert into t (id,a) values (486,12);
+insert into t (id,a) values (486,13);
+insert into t (id,a) values (486,14);
+insert into t (id,a) values (486,15);
+insert into t (id,a) values (486,16);
+insert into t (id,a) values (486,17);
+insert into t (id,a) values (486,18);
+insert into t (id,a) values (486,19);
+insert into t (id,a) values (486,20);
+insert into t (id,a) values (486,21);
+insert into t (id,a) values (486,22);
+insert into t (id,a) values (486,23);
+insert into t (id,a) values (486,24);
+insert into t (id,a) values (486,25);
+insert into t (id,a) values (486,26);
+insert into t (id,a) values (486,27);
+insert into t (id,a) values (486,28);
+insert into t (id,a) values (486,29);
+insert into t (id,a) values (486,30);
+insert into t (id,a) values (486,31);
+insert into t (id,a) values (486,32);
+insert into t (id,a) values (486,33);
+insert into t (id,a) values (486,34);
+insert into t (id,a) values (486,35);
+insert into t (id,a) values (486,36);
+insert into t (id,a) values (486,37);
+insert into t (id,a) values (486,38);
+insert into t (id,a) values (486,39);
+insert into t (id,a) values (486,40);
+insert into t (id,a) values (486,41);
+insert into t (id,a) values (486,42);
+insert into t (id,a) values (486,43);
+insert into t (id,a) values (486,44);
+insert into t (id,a) values (486,45);
+insert into t (id,a) values (486,46);
+insert into t (id,a) values (486,47);
+insert into t (id,a) values (486,48);
+insert into t (id,a) values (486,49);
+insert into t (id,a) values (486,50);
+insert into t (id,a) values (486,51);
+insert into t (id,a) values (486,52);
+insert into t (id,a) values (486,53);
+insert into t (id,a) values (486,54);
+insert into t (id,a) values (486,55);
+insert into t (id,a) values (486,56);
+insert into t (id,a) values (486,57);
+insert into t (id,a) values (486,58);
+insert into t (id,a) values (486,59);
+insert into t (id,a) values (486,60);
+insert into t (id,a) values (486,61);
+insert into t (id,a) values (486,62);
+insert into t (id,a) values (486,63);
+insert into t (id,a) values (486,64);
+insert into t (id,a) values (486,65);
+insert into t (id,a) values (486,66);
+insert into t (id,a) values (486,67);
+insert into t (id,a) values (486,68);
+insert into t (id,a) values (486,69);
+insert into t (id,a) values (486,70);
+insert into t (id,a) values (486,71);
+insert into t (id,a) values (486,72);
+insert into t (id,a) values (486,73);
+insert into t (id,a) values (486,74);
+insert into t (id,a) values (486,75);
+insert into t (id,a) values (486,76);
+insert into t (id,a) values (486,77);
+insert into t (id,a) values (486,78);
+insert into t (id,a) values (486,79);
+insert into t (id,a) values (486,80);
+insert into t (id,a) values (486,81);
+insert into t (id,a) values (486,82);
+insert into t (id,a) values (486,83);
+insert into t (id,a) values (486,84);
+insert into t (id,a) values (486,85);
+insert into t (id,a) values (486,86);
+insert into t (id,a) values (486,87);
+insert into t (id,a) values (486,88);
+insert into t (id,a) values (486,89);
+insert into t (id,a) values (486,90);
+insert into t (id,a) values (486,91);
+insert into t (id,a) values (486,92);
+insert into t (id,a) values (486,93);
+insert into t (id,a) values (486,94);
+insert into t (id,a) values (486,95);
+insert into t (id,a) values (486,96);
+insert into t (id,a) values (486,97);
+insert into t (id,a) values (486,98);
+insert into t (id,a) values (486,99);
+insert into t (id,a) values (487,0);
+insert into t (id,a) values (487,1);
+insert into t (id,a) values (487,2);
+insert into t (id,a) values (487,3);
+insert into t (id,a) values (487,4);
+insert into t (id,a) values (487,5);
+insert into t (id,a) values (487,6);
+insert into t (id,a) values (487,7);
+insert into t (id,a) values (487,8);
+insert into t (id,a) values (487,9);
+insert into t (id,a) values (487,10);
+insert into t (id,a) values (487,11);
+insert into t (id,a) values (487,12);
+insert into t (id,a) values (487,13);
+insert into t (id,a) values (487,14);
+insert into t (id,a) values (487,15);
+insert into t (id,a) values (487,16);
+insert into t (id,a) values (487,17);
+insert into t (id,a) values (487,18);
+insert into t (id,a) values (487,19);
+insert into t (id,a) values (487,20);
+insert into t (id,a) values (487,21);
+insert into t (id,a) values (487,22);
+insert into t (id,a) values (487,23);
+insert into t (id,a) values (487,24);
+insert into t (id,a) values (487,25);
+insert into t (id,a) values (487,26);
+insert into t (id,a) values (487,27);
+insert into t (id,a) values (487,28);
+insert into t (id,a) values (487,29);
+insert into t (id,a) values (487,30);
+insert into t (id,a) values (487,31);
+insert into t (id,a) values (487,32);
+insert into t (id,a) values (487,33);
+insert into t (id,a) values (487,34);
+insert into t (id,a) values (487,35);
+insert into t (id,a) values (487,36);
+insert into t (id,a) values (487,37);
+insert into t (id,a) values (487,38);
+insert into t (id,a) values (487,39);
+insert into t (id,a) values (487,40);
+insert into t (id,a) values (487,41);
+insert into t (id,a) values (487,42);
+insert into t (id,a) values (487,43);
+insert into t (id,a) values (487,44);
+insert into t (id,a) values (487,45);
+insert into t (id,a) values (487,46);
+insert into t (id,a) values (487,47);
+insert into t (id,a) values (487,48);
+insert into t (id,a) values (487,49);
+insert into t (id,a) values (487,50);
+insert into t (id,a) values (487,51);
+insert into t (id,a) values (487,52);
+insert into t (id,a) values (487,53);
+insert into t (id,a) values (487,54);
+insert into t (id,a) values (487,55);
+insert into t (id,a) values (487,56);
+insert into t (id,a) values (487,57);
+insert into t (id,a) values (487,58);
+insert into t (id,a) values (487,59);
+insert into t (id,a) values (487,60);
+insert into t (id,a) values (487,61);
+insert into t (id,a) values (487,62);
+insert into t (id,a) values (487,63);
+insert into t (id,a) values (487,64);
+insert into t (id,a) values (487,65);
+insert into t (id,a) values (487,66);
+insert into t (id,a) values (487,67);
+insert into t (id,a) values (487,68);
+insert into t (id,a) values (487,69);
+insert into t (id,a) values (487,70);
+insert into t (id,a) values (487,71);
+insert into t (id,a) values (487,72);
+insert into t (id,a) values (487,73);
+insert into t (id,a) values (487,74);
+insert into t (id,a) values (487,75);
+insert into t (id,a) values (487,76);
+insert into t (id,a) values (487,77);
+insert into t (id,a) values (487,78);
+insert into t (id,a) values (487,79);
+insert into t (id,a) values (487,80);
+insert into t (id,a) values (487,81);
+insert into t (id,a) values (487,82);
+insert into t (id,a) values (487,83);
+insert into t (id,a) values (487,84);
+insert into t (id,a) values (487,85);
+insert into t (id,a) values (487,86);
+insert into t (id,a) values (487,87);
+insert into t (id,a) values (487,88);
+insert into t (id,a) values (487,89);
+insert into t (id,a) values (487,90);
+insert into t (id,a) values (487,91);
+insert into t (id,a) values (487,92);
+insert into t (id,a) values (487,93);
+insert into t (id,a) values (487,94);
+insert into t (id,a) values (487,95);
+insert into t (id,a) values (487,96);
+insert into t (id,a) values (487,97);
+insert into t (id,a) values (487,98);
+insert into t (id,a) values (487,99);
+insert into t (id,a) values (488,0);
+insert into t (id,a) values (488,1);
+insert into t (id,a) values (488,2);
+insert into t (id,a) values (488,3);
+insert into t (id,a) values (488,4);
+insert into t (id,a) values (488,5);
+insert into t (id,a) values (488,6);
+insert into t (id,a) values (488,7);
+insert into t (id,a) values (488,8);
+insert into t (id,a) values (488,9);
+insert into t (id,a) values (488,10);
+insert into t (id,a) values (488,11);
+insert into t (id,a) values (488,12);
+insert into t (id,a) values (488,13);
+insert into t (id,a) values (488,14);
+insert into t (id,a) values (488,15);
+insert into t (id,a) values (488,16);
+insert into t (id,a) values (488,17);
+insert into t (id,a) values (488,18);
+insert into t (id,a) values (488,19);
+insert into t (id,a) values (488,20);
+insert into t (id,a) values (488,21);
+insert into t (id,a) values (488,22);
+insert into t (id,a) values (488,23);
+insert into t (id,a) values (488,24);
+insert into t (id,a) values (488,25);
+insert into t (id,a) values (488,26);
+insert into t (id,a) values (488,27);
+insert into t (id,a) values (488,28);
+insert into t (id,a) values (488,29);
+insert into t (id,a) values (488,30);
+insert into t (id,a) values (488,31);
+insert into t (id,a) values (488,32);
+insert into t (id,a) values (488,33);
+insert into t (id,a) values (488,34);
+insert into t (id,a) values (488,35);
+insert into t (id,a) values (488,36);
+insert into t (id,a) values (488,37);
+insert into t (id,a) values (488,38);
+insert into t (id,a) values (488,39);
+insert into t (id,a) values (488,40);
+insert into t (id,a) values (488,41);
+insert into t (id,a) values (488,42);
+insert into t (id,a) values (488,43);
+insert into t (id,a) values (488,44);
+insert into t (id,a) values (488,45);
+insert into t (id,a) values (488,46);
+insert into t (id,a) values (488,47);
+insert into t (id,a) values (488,48);
+insert into t (id,a) values (488,49);
+insert into t (id,a) values (488,50);
+insert into t (id,a) values (488,51);
+insert into t (id,a) values (488,52);
+insert into t (id,a) values (488,53);
+insert into t (id,a) values (488,54);
+insert into t (id,a) values (488,55);
+insert into t (id,a) values (488,56);
+insert into t (id,a) values (488,57);
+insert into t (id,a) values (488,58);
+insert into t (id,a) values (488,59);
+insert into t (id,a) values (488,60);
+insert into t (id,a) values (488,61);
+insert into t (id,a) values (488,62);
+insert into t (id,a) values (488,63);
+insert into t (id,a) values (488,64);
+insert into t (id,a) values (488,65);
+insert into t (id,a) values (488,66);
+insert into t (id,a) values (488,67);
+insert into t (id,a) values (488,68);
+insert into t (id,a) values (488,69);
+insert into t (id,a) values (488,70);
+insert into t (id,a) values (488,71);
+insert into t (id,a) values (488,72);
+insert into t (id,a) values (488,73);
+insert into t (id,a) values (488,74);
+insert into t (id,a) values (488,75);
+insert into t (id,a) values (488,76);
+insert into t (id,a) values (488,77);
+insert into t (id,a) values (488,78);
+insert into t (id,a) values (488,79);
+insert into t (id,a) values (488,80);
+insert into t (id,a) values (488,81);
+insert into t (id,a) values (488,82);
+insert into t (id,a) values (488,83);
+insert into t (id,a) values (488,84);
+insert into t (id,a) values (488,85);
+insert into t (id,a) values (488,86);
+insert into t (id,a) values (488,87);
+insert into t (id,a) values (488,88);
+insert into t (id,a) values (488,89);
+insert into t (id,a) values (488,90);
+insert into t (id,a) values (488,91);
+insert into t (id,a) values (488,92);
+insert into t (id,a) values (488,93);
+insert into t (id,a) values (488,94);
+insert into t (id,a) values (488,95);
+insert into t (id,a) values (488,96);
+insert into t (id,a) values (488,97);
+insert into t (id,a) values (488,98);
+insert into t (id,a) values (488,99);
+insert into t (id,a) values (489,0);
+insert into t (id,a) values (489,1);
+insert into t (id,a) values (489,2);
+insert into t (id,a) values (489,3);
+insert into t (id,a) values (489,4);
+insert into t (id,a) values (489,5);
+insert into t (id,a) values (489,6);
+insert into t (id,a) values (489,7);
+insert into t (id,a) values (489,8);
+insert into t (id,a) values (489,9);
+insert into t (id,a) values (489,10);
+insert into t (id,a) values (489,11);
+insert into t (id,a) values (489,12);
+insert into t (id,a) values (489,13);
+insert into t (id,a) values (489,14);
+insert into t (id,a) values (489,15);
+insert into t (id,a) values (489,16);
+insert into t (id,a) values (489,17);
+insert into t (id,a) values (489,18);
+insert into t (id,a) values (489,19);
+insert into t (id,a) values (489,20);
+insert into t (id,a) values (489,21);
+insert into t (id,a) values (489,22);
+insert into t (id,a) values (489,23);
+insert into t (id,a) values (489,24);
+insert into t (id,a) values (489,25);
+insert into t (id,a) values (489,26);
+insert into t (id,a) values (489,27);
+insert into t (id,a) values (489,28);
+insert into t (id,a) values (489,29);
+insert into t (id,a) values (489,30);
+insert into t (id,a) values (489,31);
+insert into t (id,a) values (489,32);
+insert into t (id,a) values (489,33);
+insert into t (id,a) values (489,34);
+insert into t (id,a) values (489,35);
+insert into t (id,a) values (489,36);
+insert into t (id,a) values (489,37);
+insert into t (id,a) values (489,38);
+insert into t (id,a) values (489,39);
+insert into t (id,a) values (489,40);
+insert into t (id,a) values (489,41);
+insert into t (id,a) values (489,42);
+insert into t (id,a) values (489,43);
+insert into t (id,a) values (489,44);
+insert into t (id,a) values (489,45);
+insert into t (id,a) values (489,46);
+insert into t (id,a) values (489,47);
+insert into t (id,a) values (489,48);
+insert into t (id,a) values (489,49);
+insert into t (id,a) values (489,50);
+insert into t (id,a) values (489,51);
+insert into t (id,a) values (489,52);
+insert into t (id,a) values (489,53);
+insert into t (id,a) values (489,54);
+insert into t (id,a) values (489,55);
+insert into t (id,a) values (489,56);
+insert into t (id,a) values (489,57);
+insert into t (id,a) values (489,58);
+insert into t (id,a) values (489,59);
+insert into t (id,a) values (489,60);
+insert into t (id,a) values (489,61);
+insert into t (id,a) values (489,62);
+insert into t (id,a) values (489,63);
+insert into t (id,a) values (489,64);
+insert into t (id,a) values (489,65);
+insert into t (id,a) values (489,66);
+insert into t (id,a) values (489,67);
+insert into t (id,a) values (489,68);
+insert into t (id,a) values (489,69);
+insert into t (id,a) values (489,70);
+insert into t (id,a) values (489,71);
+insert into t (id,a) values (489,72);
+insert into t (id,a) values (489,73);
+insert into t (id,a) values (489,74);
+insert into t (id,a) values (489,75);
+insert into t (id,a) values (489,76);
+insert into t (id,a) values (489,77);
+insert into t (id,a) values (489,78);
+insert into t (id,a) values (489,79);
+insert into t (id,a) values (489,80);
+insert into t (id,a) values (489,81);
+insert into t (id,a) values (489,82);
+insert into t (id,a) values (489,83);
+insert into t (id,a) values (489,84);
+insert into t (id,a) values (489,85);
+insert into t (id,a) values (489,86);
+insert into t (id,a) values (489,87);
+insert into t (id,a) values (489,88);
+insert into t (id,a) values (489,89);
+insert into t (id,a) values (489,90);
+insert into t (id,a) values (489,91);
+insert into t (id,a) values (489,92);
+insert into t (id,a) values (489,93);
+insert into t (id,a) values (489,94);
+insert into t (id,a) values (489,95);
+insert into t (id,a) values (489,96);
+insert into t (id,a) values (489,97);
+insert into t (id,a) values (489,98);
+insert into t (id,a) values (489,99);
+insert into t (id,a) values (490,0);
+insert into t (id,a) values (490,1);
+insert into t (id,a) values (490,2);
+insert into t (id,a) values (490,3);
+insert into t (id,a) values (490,4);
+insert into t (id,a) values (490,5);
+insert into t (id,a) values (490,6);
+insert into t (id,a) values (490,7);
+insert into t (id,a) values (490,8);
+insert into t (id,a) values (490,9);
+insert into t (id,a) values (490,10);
+insert into t (id,a) values (490,11);
+insert into t (id,a) values (490,12);
+insert into t (id,a) values (490,13);
+insert into t (id,a) values (490,14);
+insert into t (id,a) values (490,15);
+insert into t (id,a) values (490,16);
+insert into t (id,a) values (490,17);
+insert into t (id,a) values (490,18);
+insert into t (id,a) values (490,19);
+insert into t (id,a) values (490,20);
+insert into t (id,a) values (490,21);
+insert into t (id,a) values (490,22);
+insert into t (id,a) values (490,23);
+insert into t (id,a) values (490,24);
+insert into t (id,a) values (490,25);
+insert into t (id,a) values (490,26);
+insert into t (id,a) values (490,27);
+insert into t (id,a) values (490,28);
+insert into t (id,a) values (490,29);
+insert into t (id,a) values (490,30);
+insert into t (id,a) values (490,31);
+insert into t (id,a) values (490,32);
+insert into t (id,a) values (490,33);
+insert into t (id,a) values (490,34);
+insert into t (id,a) values (490,35);
+insert into t (id,a) values (490,36);
+insert into t (id,a) values (490,37);
+insert into t (id,a) values (490,38);
+insert into t (id,a) values (490,39);
+insert into t (id,a) values (490,40);
+insert into t (id,a) values (490,41);
+insert into t (id,a) values (490,42);
+insert into t (id,a) values (490,43);
+insert into t (id,a) values (490,44);
+insert into t (id,a) values (490,45);
+insert into t (id,a) values (490,46);
+insert into t (id,a) values (490,47);
+insert into t (id,a) values (490,48);
+insert into t (id,a) values (490,49);
+insert into t (id,a) values (490,50);
+insert into t (id,a) values (490,51);
+insert into t (id,a) values (490,52);
+insert into t (id,a) values (490,53);
+insert into t (id,a) values (490,54);
+insert into t (id,a) values (490,55);
+insert into t (id,a) values (490,56);
+insert into t (id,a) values (490,57);
+insert into t (id,a) values (490,58);
+insert into t (id,a) values (490,59);
+insert into t (id,a) values (490,60);
+insert into t (id,a) values (490,61);
+insert into t (id,a) values (490,62);
+insert into t (id,a) values (490,63);
+insert into t (id,a) values (490,64);
+insert into t (id,a) values (490,65);
+insert into t (id,a) values (490,66);
+insert into t (id,a) values (490,67);
+insert into t (id,a) values (490,68);
+insert into t (id,a) values (490,69);
+insert into t (id,a) values (490,70);
+insert into t (id,a) values (490,71);
+insert into t (id,a) values (490,72);
+insert into t (id,a) values (490,73);
+insert into t (id,a) values (490,74);
+insert into t (id,a) values (490,75);
+insert into t (id,a) values (490,76);
+insert into t (id,a) values (490,77);
+insert into t (id,a) values (490,78);
+insert into t (id,a) values (490,79);
+insert into t (id,a) values (490,80);
+insert into t (id,a) values (490,81);
+insert into t (id,a) values (490,82);
+insert into t (id,a) values (490,83);
+insert into t (id,a) values (490,84);
+insert into t (id,a) values (490,85);
+insert into t (id,a) values (490,86);
+insert into t (id,a) values (490,87);
+insert into t (id,a) values (490,88);
+insert into t (id,a) values (490,89);
+insert into t (id,a) values (490,90);
+insert into t (id,a) values (490,91);
+insert into t (id,a) values (490,92);
+insert into t (id,a) values (490,93);
+insert into t (id,a) values (490,94);
+insert into t (id,a) values (490,95);
+insert into t (id,a) values (490,96);
+insert into t (id,a) values (490,97);
+insert into t (id,a) values (490,98);
+insert into t (id,a) values (490,99);
+insert into t (id,a) values (491,0);
+insert into t (id,a) values (491,1);
+insert into t (id,a) values (491,2);
+insert into t (id,a) values (491,3);
+insert into t (id,a) values (491,4);
+insert into t (id,a) values (491,5);
+insert into t (id,a) values (491,6);
+insert into t (id,a) values (491,7);
+insert into t (id,a) values (491,8);
+insert into t (id,a) values (491,9);
+insert into t (id,a) values (491,10);
+insert into t (id,a) values (491,11);
+insert into t (id,a) values (491,12);
+insert into t (id,a) values (491,13);
+insert into t (id,a) values (491,14);
+insert into t (id,a) values (491,15);
+insert into t (id,a) values (491,16);
+insert into t (id,a) values (491,17);
+insert into t (id,a) values (491,18);
+insert into t (id,a) values (491,19);
+insert into t (id,a) values (491,20);
+insert into t (id,a) values (491,21);
+insert into t (id,a) values (491,22);
+insert into t (id,a) values (491,23);
+insert into t (id,a) values (491,24);
+insert into t (id,a) values (491,25);
+insert into t (id,a) values (491,26);
+insert into t (id,a) values (491,27);
+insert into t (id,a) values (491,28);
+insert into t (id,a) values (491,29);
+insert into t (id,a) values (491,30);
+insert into t (id,a) values (491,31);
+insert into t (id,a) values (491,32);
+insert into t (id,a) values (491,33);
+insert into t (id,a) values (491,34);
+insert into t (id,a) values (491,35);
+insert into t (id,a) values (491,36);
+insert into t (id,a) values (491,37);
+insert into t (id,a) values (491,38);
+insert into t (id,a) values (491,39);
+insert into t (id,a) values (491,40);
+insert into t (id,a) values (491,41);
+insert into t (id,a) values (491,42);
+insert into t (id,a) values (491,43);
+insert into t (id,a) values (491,44);
+insert into t (id,a) values (491,45);
+insert into t (id,a) values (491,46);
+insert into t (id,a) values (491,47);
+insert into t (id,a) values (491,48);
+insert into t (id,a) values (491,49);
+insert into t (id,a) values (491,50);
+insert into t (id,a) values (491,51);
+insert into t (id,a) values (491,52);
+insert into t (id,a) values (491,53);
+insert into t (id,a) values (491,54);
+insert into t (id,a) values (491,55);
+insert into t (id,a) values (491,56);
+insert into t (id,a) values (491,57);
+insert into t (id,a) values (491,58);
+insert into t (id,a) values (491,59);
+insert into t (id,a) values (491,60);
+insert into t (id,a) values (491,61);
+insert into t (id,a) values (491,62);
+insert into t (id,a) values (491,63);
+insert into t (id,a) values (491,64);
+insert into t (id,a) values (491,65);
+insert into t (id,a) values (491,66);
+insert into t (id,a) values (491,67);
+insert into t (id,a) values (491,68);
+insert into t (id,a) values (491,69);
+insert into t (id,a) values (491,70);
+insert into t (id,a) values (491,71);
+insert into t (id,a) values (491,72);
+insert into t (id,a) values (491,73);
+insert into t (id,a) values (491,74);
+insert into t (id,a) values (491,75);
+insert into t (id,a) values (491,76);
+insert into t (id,a) values (491,77);
+insert into t (id,a) values (491,78);
+insert into t (id,a) values (491,79);
+insert into t (id,a) values (491,80);
+insert into t (id,a) values (491,81);
+insert into t (id,a) values (491,82);
+insert into t (id,a) values (491,83);
+insert into t (id,a) values (491,84);
+insert into t (id,a) values (491,85);
+insert into t (id,a) values (491,86);
+insert into t (id,a) values (491,87);
+insert into t (id,a) values (491,88);
+insert into t (id,a) values (491,89);
+insert into t (id,a) values (491,90);
+insert into t (id,a) values (491,91);
+insert into t (id,a) values (491,92);
+insert into t (id,a) values (491,93);
+insert into t (id,a) values (491,94);
+insert into t (id,a) values (491,95);
+insert into t (id,a) values (491,96);
+insert into t (id,a) values (491,97);
+insert into t (id,a) values (491,98);
+insert into t (id,a) values (491,99);
+insert into t (id,a) values (492,0);
+insert into t (id,a) values (492,1);
+insert into t (id,a) values (492,2);
+insert into t (id,a) values (492,3);
+insert into t (id,a) values (492,4);
+insert into t (id,a) values (492,5);
+insert into t (id,a) values (492,6);
+insert into t (id,a) values (492,7);
+insert into t (id,a) values (492,8);
+insert into t (id,a) values (492,9);
+insert into t (id,a) values (492,10);
+insert into t (id,a) values (492,11);
+insert into t (id,a) values (492,12);
+insert into t (id,a) values (492,13);
+insert into t (id,a) values (492,14);
+insert into t (id,a) values (492,15);
+insert into t (id,a) values (492,16);
+insert into t (id,a) values (492,17);
+insert into t (id,a) values (492,18);
+insert into t (id,a) values (492,19);
+insert into t (id,a) values (492,20);
+insert into t (id,a) values (492,21);
+insert into t (id,a) values (492,22);
+insert into t (id,a) values (492,23);
+insert into t (id,a) values (492,24);
+insert into t (id,a) values (492,25);
+insert into t (id,a) values (492,26);
+insert into t (id,a) values (492,27);
+insert into t (id,a) values (492,28);
+insert into t (id,a) values (492,29);
+insert into t (id,a) values (492,30);
+insert into t (id,a) values (492,31);
+insert into t (id,a) values (492,32);
+insert into t (id,a) values (492,33);
+insert into t (id,a) values (492,34);
+insert into t (id,a) values (492,35);
+insert into t (id,a) values (492,36);
+insert into t (id,a) values (492,37);
+insert into t (id,a) values (492,38);
+insert into t (id,a) values (492,39);
+insert into t (id,a) values (492,40);
+insert into t (id,a) values (492,41);
+insert into t (id,a) values (492,42);
+insert into t (id,a) values (492,43);
+insert into t (id,a) values (492,44);
+insert into t (id,a) values (492,45);
+insert into t (id,a) values (492,46);
+insert into t (id,a) values (492,47);
+insert into t (id,a) values (492,48);
+insert into t (id,a) values (492,49);
+insert into t (id,a) values (492,50);
+insert into t (id,a) values (492,51);
+insert into t (id,a) values (492,52);
+insert into t (id,a) values (492,53);
+insert into t (id,a) values (492,54);
+insert into t (id,a) values (492,55);
+insert into t (id,a) values (492,56);
+insert into t (id,a) values (492,57);
+insert into t (id,a) values (492,58);
+insert into t (id,a) values (492,59);
+insert into t (id,a) values (492,60);
+insert into t (id,a) values (492,61);
+insert into t (id,a) values (492,62);
+insert into t (id,a) values (492,63);
+insert into t (id,a) values (492,64);
+insert into t (id,a) values (492,65);
+insert into t (id,a) values (492,66);
+insert into t (id,a) values (492,67);
+insert into t (id,a) values (492,68);
+insert into t (id,a) values (492,69);
+insert into t (id,a) values (492,70);
+insert into t (id,a) values (492,71);
+insert into t (id,a) values (492,72);
+insert into t (id,a) values (492,73);
+insert into t (id,a) values (492,74);
+insert into t (id,a) values (492,75);
+insert into t (id,a) values (492,76);
+insert into t (id,a) values (492,77);
+insert into t (id,a) values (492,78);
+insert into t (id,a) values (492,79);
+insert into t (id,a) values (492,80);
+insert into t (id,a) values (492,81);
+insert into t (id,a) values (492,82);
+insert into t (id,a) values (492,83);
+insert into t (id,a) values (492,84);
+insert into t (id,a) values (492,85);
+insert into t (id,a) values (492,86);
+insert into t (id,a) values (492,87);
+insert into t (id,a) values (492,88);
+insert into t (id,a) values (492,89);
+insert into t (id,a) values (492,90);
+insert into t (id,a) values (492,91);
+insert into t (id,a) values (492,92);
+insert into t (id,a) values (492,93);
+insert into t (id,a) values (492,94);
+insert into t (id,a) values (492,95);
+insert into t (id,a) values (492,96);
+insert into t (id,a) values (492,97);
+insert into t (id,a) values (492,98);
+insert into t (id,a) values (492,99);
+insert into t (id,a) values (493,0);
+insert into t (id,a) values (493,1);
+insert into t (id,a) values (493,2);
+insert into t (id,a) values (493,3);
+insert into t (id,a) values (493,4);
+insert into t (id,a) values (493,5);
+insert into t (id,a) values (493,6);
+insert into t (id,a) values (493,7);
+insert into t (id,a) values (493,8);
+insert into t (id,a) values (493,9);
+insert into t (id,a) values (493,10);
+insert into t (id,a) values (493,11);
+insert into t (id,a) values (493,12);
+insert into t (id,a) values (493,13);
+insert into t (id,a) values (493,14);
+insert into t (id,a) values (493,15);
+insert into t (id,a) values (493,16);
+insert into t (id,a) values (493,17);
+insert into t (id,a) values (493,18);
+insert into t (id,a) values (493,19);
+insert into t (id,a) values (493,20);
+insert into t (id,a) values (493,21);
+insert into t (id,a) values (493,22);
+insert into t (id,a) values (493,23);
+insert into t (id,a) values (493,24);
+insert into t (id,a) values (493,25);
+insert into t (id,a) values (493,26);
+insert into t (id,a) values (493,27);
+insert into t (id,a) values (493,28);
+insert into t (id,a) values (493,29);
+insert into t (id,a) values (493,30);
+insert into t (id,a) values (493,31);
+insert into t (id,a) values (493,32);
+insert into t (id,a) values (493,33);
+insert into t (id,a) values (493,34);
+insert into t (id,a) values (493,35);
+insert into t (id,a) values (493,36);
+insert into t (id,a) values (493,37);
+insert into t (id,a) values (493,38);
+insert into t (id,a) values (493,39);
+insert into t (id,a) values (493,40);
+insert into t (id,a) values (493,41);
+insert into t (id,a) values (493,42);
+insert into t (id,a) values (493,43);
+insert into t (id,a) values (493,44);
+insert into t (id,a) values (493,45);
+insert into t (id,a) values (493,46);
+insert into t (id,a) values (493,47);
+insert into t (id,a) values (493,48);
+insert into t (id,a) values (493,49);
+insert into t (id,a) values (493,50);
+insert into t (id,a) values (493,51);
+insert into t (id,a) values (493,52);
+insert into t (id,a) values (493,53);
+insert into t (id,a) values (493,54);
+insert into t (id,a) values (493,55);
+insert into t (id,a) values (493,56);
+insert into t (id,a) values (493,57);
+insert into t (id,a) values (493,58);
+insert into t (id,a) values (493,59);
+insert into t (id,a) values (493,60);
+insert into t (id,a) values (493,61);
+insert into t (id,a) values (493,62);
+insert into t (id,a) values (493,63);
+insert into t (id,a) values (493,64);
+insert into t (id,a) values (493,65);
+insert into t (id,a) values (493,66);
+insert into t (id,a) values (493,67);
+insert into t (id,a) values (493,68);
+insert into t (id,a) values (493,69);
+insert into t (id,a) values (493,70);
+insert into t (id,a) values (493,71);
+insert into t (id,a) values (493,72);
+insert into t (id,a) values (493,73);
+insert into t (id,a) values (493,74);
+insert into t (id,a) values (493,75);
+insert into t (id,a) values (493,76);
+insert into t (id,a) values (493,77);
+insert into t (id,a) values (493,78);
+insert into t (id,a) values (493,79);
+insert into t (id,a) values (493,80);
+insert into t (id,a) values (493,81);
+insert into t (id,a) values (493,82);
+insert into t (id,a) values (493,83);
+insert into t (id,a) values (493,84);
+insert into t (id,a) values (493,85);
+insert into t (id,a) values (493,86);
+insert into t (id,a) values (493,87);
+insert into t (id,a) values (493,88);
+insert into t (id,a) values (493,89);
+insert into t (id,a) values (493,90);
+insert into t (id,a) values (493,91);
+insert into t (id,a) values (493,92);
+insert into t (id,a) values (493,93);
+insert into t (id,a) values (493,94);
+insert into t (id,a) values (493,95);
+insert into t (id,a) values (493,96);
+insert into t (id,a) values (493,97);
+insert into t (id,a) values (493,98);
+insert into t (id,a) values (493,99);
+insert into t (id,a) values (494,0);
+insert into t (id,a) values (494,1);
+insert into t (id,a) values (494,2);
+insert into t (id,a) values (494,3);
+insert into t (id,a) values (494,4);
+insert into t (id,a) values (494,5);
+insert into t (id,a) values (494,6);
+insert into t (id,a) values (494,7);
+insert into t (id,a) values (494,8);
+insert into t (id,a) values (494,9);
+insert into t (id,a) values (494,10);
+insert into t (id,a) values (494,11);
+insert into t (id,a) values (494,12);
+insert into t (id,a) values (494,13);
+insert into t (id,a) values (494,14);
+insert into t (id,a) values (494,15);
+insert into t (id,a) values (494,16);
+insert into t (id,a) values (494,17);
+insert into t (id,a) values (494,18);
+insert into t (id,a) values (494,19);
+insert into t (id,a) values (494,20);
+insert into t (id,a) values (494,21);
+insert into t (id,a) values (494,22);
+insert into t (id,a) values (494,23);
+insert into t (id,a) values (494,24);
+insert into t (id,a) values (494,25);
+insert into t (id,a) values (494,26);
+insert into t (id,a) values (494,27);
+insert into t (id,a) values (494,28);
+insert into t (id,a) values (494,29);
+insert into t (id,a) values (494,30);
+insert into t (id,a) values (494,31);
+insert into t (id,a) values (494,32);
+insert into t (id,a) values (494,33);
+insert into t (id,a) values (494,34);
+insert into t (id,a) values (494,35);
+insert into t (id,a) values (494,36);
+insert into t (id,a) values (494,37);
+insert into t (id,a) values (494,38);
+insert into t (id,a) values (494,39);
+insert into t (id,a) values (494,40);
+insert into t (id,a) values (494,41);
+insert into t (id,a) values (494,42);
+insert into t (id,a) values (494,43);
+insert into t (id,a) values (494,44);
+insert into t (id,a) values (494,45);
+insert into t (id,a) values (494,46);
+insert into t (id,a) values (494,47);
+insert into t (id,a) values (494,48);
+insert into t (id,a) values (494,49);
+insert into t (id,a) values (494,50);
+insert into t (id,a) values (494,51);
+insert into t (id,a) values (494,52);
+insert into t (id,a) values (494,53);
+insert into t (id,a) values (494,54);
+insert into t (id,a) values (494,55);
+insert into t (id,a) values (494,56);
+insert into t (id,a) values (494,57);
+insert into t (id,a) values (494,58);
+insert into t (id,a) values (494,59);
+insert into t (id,a) values (494,60);
+insert into t (id,a) values (494,61);
+insert into t (id,a) values (494,62);
+insert into t (id,a) values (494,63);
+insert into t (id,a) values (494,64);
+insert into t (id,a) values (494,65);
+insert into t (id,a) values (494,66);
+insert into t (id,a) values (494,67);
+insert into t (id,a) values (494,68);
+insert into t (id,a) values (494,69);
+insert into t (id,a) values (494,70);
+insert into t (id,a) values (494,71);
+insert into t (id,a) values (494,72);
+insert into t (id,a) values (494,73);
+insert into t (id,a) values (494,74);
+insert into t (id,a) values (494,75);
+insert into t (id,a) values (494,76);
+insert into t (id,a) values (494,77);
+insert into t (id,a) values (494,78);
+insert into t (id,a) values (494,79);
+insert into t (id,a) values (494,80);
+insert into t (id,a) values (494,81);
+insert into t (id,a) values (494,82);
+insert into t (id,a) values (494,83);
+insert into t (id,a) values (494,84);
+insert into t (id,a) values (494,85);
+insert into t (id,a) values (494,86);
+insert into t (id,a) values (494,87);
+insert into t (id,a) values (494,88);
+insert into t (id,a) values (494,89);
+insert into t (id,a) values (494,90);
+insert into t (id,a) values (494,91);
+insert into t (id,a) values (494,92);
+insert into t (id,a) values (494,93);
+insert into t (id,a) values (494,94);
+insert into t (id,a) values (494,95);
+insert into t (id,a) values (494,96);
+insert into t (id,a) values (494,97);
+insert into t (id,a) values (494,98);
+insert into t (id,a) values (494,99);
+insert into t (id,a) values (495,0);
+insert into t (id,a) values (495,1);
+insert into t (id,a) values (495,2);
+insert into t (id,a) values (495,3);
+insert into t (id,a) values (495,4);
+insert into t (id,a) values (495,5);
+insert into t (id,a) values (495,6);
+insert into t (id,a) values (495,7);
+insert into t (id,a) values (495,8);
+insert into t (id,a) values (495,9);
+insert into t (id,a) values (495,10);
+insert into t (id,a) values (495,11);
+insert into t (id,a) values (495,12);
+insert into t (id,a) values (495,13);
+insert into t (id,a) values (495,14);
+insert into t (id,a) values (495,15);
+insert into t (id,a) values (495,16);
+insert into t (id,a) values (495,17);
+insert into t (id,a) values (495,18);
+insert into t (id,a) values (495,19);
+insert into t (id,a) values (495,20);
+insert into t (id,a) values (495,21);
+insert into t (id,a) values (495,22);
+insert into t (id,a) values (495,23);
+insert into t (id,a) values (495,24);
+insert into t (id,a) values (495,25);
+insert into t (id,a) values (495,26);
+insert into t (id,a) values (495,27);
+insert into t (id,a) values (495,28);
+insert into t (id,a) values (495,29);
+insert into t (id,a) values (495,30);
+insert into t (id,a) values (495,31);
+insert into t (id,a) values (495,32);
+insert into t (id,a) values (495,33);
+insert into t (id,a) values (495,34);
+insert into t (id,a) values (495,35);
+insert into t (id,a) values (495,36);
+insert into t (id,a) values (495,37);
+insert into t (id,a) values (495,38);
+insert into t (id,a) values (495,39);
+insert into t (id,a) values (495,40);
+insert into t (id,a) values (495,41);
+insert into t (id,a) values (495,42);
+insert into t (id,a) values (495,43);
+insert into t (id,a) values (495,44);
+insert into t (id,a) values (495,45);
+insert into t (id,a) values (495,46);
+insert into t (id,a) values (495,47);
+insert into t (id,a) values (495,48);
+insert into t (id,a) values (495,49);
+insert into t (id,a) values (495,50);
+insert into t (id,a) values (495,51);
+insert into t (id,a) values (495,52);
+insert into t (id,a) values (495,53);
+insert into t (id,a) values (495,54);
+insert into t (id,a) values (495,55);
+insert into t (id,a) values (495,56);
+insert into t (id,a) values (495,57);
+insert into t (id,a) values (495,58);
+insert into t (id,a) values (495,59);
+insert into t (id,a) values (495,60);
+insert into t (id,a) values (495,61);
+insert into t (id,a) values (495,62);
+insert into t (id,a) values (495,63);
+insert into t (id,a) values (495,64);
+insert into t (id,a) values (495,65);
+insert into t (id,a) values (495,66);
+insert into t (id,a) values (495,67);
+insert into t (id,a) values (495,68);
+insert into t (id,a) values (495,69);
+insert into t (id,a) values (495,70);
+insert into t (id,a) values (495,71);
+insert into t (id,a) values (495,72);
+insert into t (id,a) values (495,73);
+insert into t (id,a) values (495,74);
+insert into t (id,a) values (495,75);
+insert into t (id,a) values (495,76);
+insert into t (id,a) values (495,77);
+insert into t (id,a) values (495,78);
+insert into t (id,a) values (495,79);
+insert into t (id,a) values (495,80);
+insert into t (id,a) values (495,81);
+insert into t (id,a) values (495,82);
+insert into t (id,a) values (495,83);
+insert into t (id,a) values (495,84);
+insert into t (id,a) values (495,85);
+insert into t (id,a) values (495,86);
+insert into t (id,a) values (495,87);
+insert into t (id,a) values (495,88);
+insert into t (id,a) values (495,89);
+insert into t (id,a) values (495,90);
+insert into t (id,a) values (495,91);
+insert into t (id,a) values (495,92);
+insert into t (id,a) values (495,93);
+insert into t (id,a) values (495,94);
+insert into t (id,a) values (495,95);
+insert into t (id,a) values (495,96);
+insert into t (id,a) values (495,97);
+insert into t (id,a) values (495,98);
+insert into t (id,a) values (495,99);
+insert into t (id,a) values (496,0);
+insert into t (id,a) values (496,1);
+insert into t (id,a) values (496,2);
+insert into t (id,a) values (496,3);
+insert into t (id,a) values (496,4);
+insert into t (id,a) values (496,5);
+insert into t (id,a) values (496,6);
+insert into t (id,a) values (496,7);
+insert into t (id,a) values (496,8);
+insert into t (id,a) values (496,9);
+insert into t (id,a) values (496,10);
+insert into t (id,a) values (496,11);
+insert into t (id,a) values (496,12);
+insert into t (id,a) values (496,13);
+insert into t (id,a) values (496,14);
+insert into t (id,a) values (496,15);
+insert into t (id,a) values (496,16);
+insert into t (id,a) values (496,17);
+insert into t (id,a) values (496,18);
+insert into t (id,a) values (496,19);
+insert into t (id,a) values (496,20);
+insert into t (id,a) values (496,21);
+insert into t (id,a) values (496,22);
+insert into t (id,a) values (496,23);
+insert into t (id,a) values (496,24);
+insert into t (id,a) values (496,25);
+insert into t (id,a) values (496,26);
+insert into t (id,a) values (496,27);
+insert into t (id,a) values (496,28);
+insert into t (id,a) values (496,29);
+insert into t (id,a) values (496,30);
+insert into t (id,a) values (496,31);
+insert into t (id,a) values (496,32);
+insert into t (id,a) values (496,33);
+insert into t (id,a) values (496,34);
+insert into t (id,a) values (496,35);
+insert into t (id,a) values (496,36);
+insert into t (id,a) values (496,37);
+insert into t (id,a) values (496,38);
+insert into t (id,a) values (496,39);
+insert into t (id,a) values (496,40);
+insert into t (id,a) values (496,41);
+insert into t (id,a) values (496,42);
+insert into t (id,a) values (496,43);
+insert into t (id,a) values (496,44);
+insert into t (id,a) values (496,45);
+insert into t (id,a) values (496,46);
+insert into t (id,a) values (496,47);
+insert into t (id,a) values (496,48);
+insert into t (id,a) values (496,49);
+insert into t (id,a) values (496,50);
+insert into t (id,a) values (496,51);
+insert into t (id,a) values (496,52);
+insert into t (id,a) values (496,53);
+insert into t (id,a) values (496,54);
+insert into t (id,a) values (496,55);
+insert into t (id,a) values (496,56);
+insert into t (id,a) values (496,57);
+insert into t (id,a) values (496,58);
+insert into t (id,a) values (496,59);
+insert into t (id,a) values (496,60);
+insert into t (id,a) values (496,61);
+insert into t (id,a) values (496,62);
+insert into t (id,a) values (496,63);
+insert into t (id,a) values (496,64);
+insert into t (id,a) values (496,65);
+insert into t (id,a) values (496,66);
+insert into t (id,a) values (496,67);
+insert into t (id,a) values (496,68);
+insert into t (id,a) values (496,69);
+insert into t (id,a) values (496,70);
+insert into t (id,a) values (496,71);
+insert into t (id,a) values (496,72);
+insert into t (id,a) values (496,73);
+insert into t (id,a) values (496,74);
+insert into t (id,a) values (496,75);
+insert into t (id,a) values (496,76);
+insert into t (id,a) values (496,77);
+insert into t (id,a) values (496,78);
+insert into t (id,a) values (496,79);
+insert into t (id,a) values (496,80);
+insert into t (id,a) values (496,81);
+insert into t (id,a) values (496,82);
+insert into t (id,a) values (496,83);
+insert into t (id,a) values (496,84);
+insert into t (id,a) values (496,85);
+insert into t (id,a) values (496,86);
+insert into t (id,a) values (496,87);
+insert into t (id,a) values (496,88);
+insert into t (id,a) values (496,89);
+insert into t (id,a) values (496,90);
+insert into t (id,a) values (496,91);
+insert into t (id,a) values (496,92);
+insert into t (id,a) values (496,93);
+insert into t (id,a) values (496,94);
+insert into t (id,a) values (496,95);
+insert into t (id,a) values (496,96);
+insert into t (id,a) values (496,97);
+insert into t (id,a) values (496,98);
+insert into t (id,a) values (496,99);
+insert into t (id,a) values (497,0);
+insert into t (id,a) values (497,1);
+insert into t (id,a) values (497,2);
+insert into t (id,a) values (497,3);
+insert into t (id,a) values (497,4);
+insert into t (id,a) values (497,5);
+insert into t (id,a) values (497,6);
+insert into t (id,a) values (497,7);
+insert into t (id,a) values (497,8);
+insert into t (id,a) values (497,9);
+insert into t (id,a) values (497,10);
+insert into t (id,a) values (497,11);
+insert into t (id,a) values (497,12);
+insert into t (id,a) values (497,13);
+insert into t (id,a) values (497,14);
+insert into t (id,a) values (497,15);
+insert into t (id,a) values (497,16);
+insert into t (id,a) values (497,17);
+insert into t (id,a) values (497,18);
+insert into t (id,a) values (497,19);
+insert into t (id,a) values (497,20);
+insert into t (id,a) values (497,21);
+insert into t (id,a) values (497,22);
+insert into t (id,a) values (497,23);
+insert into t (id,a) values (497,24);
+insert into t (id,a) values (497,25);
+insert into t (id,a) values (497,26);
+insert into t (id,a) values (497,27);
+insert into t (id,a) values (497,28);
+insert into t (id,a) values (497,29);
+insert into t (id,a) values (497,30);
+insert into t (id,a) values (497,31);
+insert into t (id,a) values (497,32);
+insert into t (id,a) values (497,33);
+insert into t (id,a) values (497,34);
+insert into t (id,a) values (497,35);
+insert into t (id,a) values (497,36);
+insert into t (id,a) values (497,37);
+insert into t (id,a) values (497,38);
+insert into t (id,a) values (497,39);
+insert into t (id,a) values (497,40);
+insert into t (id,a) values (497,41);
+insert into t (id,a) values (497,42);
+insert into t (id,a) values (497,43);
+insert into t (id,a) values (497,44);
+insert into t (id,a) values (497,45);
+insert into t (id,a) values (497,46);
+insert into t (id,a) values (497,47);
+insert into t (id,a) values (497,48);
+insert into t (id,a) values (497,49);
+insert into t (id,a) values (497,50);
+insert into t (id,a) values (497,51);
+insert into t (id,a) values (497,52);
+insert into t (id,a) values (497,53);
+insert into t (id,a) values (497,54);
+insert into t (id,a) values (497,55);
+insert into t (id,a) values (497,56);
+insert into t (id,a) values (497,57);
+insert into t (id,a) values (497,58);
+insert into t (id,a) values (497,59);
+insert into t (id,a) values (497,60);
+insert into t (id,a) values (497,61);
+insert into t (id,a) values (497,62);
+insert into t (id,a) values (497,63);
+insert into t (id,a) values (497,64);
+insert into t (id,a) values (497,65);
+insert into t (id,a) values (497,66);
+insert into t (id,a) values (497,67);
+insert into t (id,a) values (497,68);
+insert into t (id,a) values (497,69);
+insert into t (id,a) values (497,70);
+insert into t (id,a) values (497,71);
+insert into t (id,a) values (497,72);
+insert into t (id,a) values (497,73);
+insert into t (id,a) values (497,74);
+insert into t (id,a) values (497,75);
+insert into t (id,a) values (497,76);
+insert into t (id,a) values (497,77);
+insert into t (id,a) values (497,78);
+insert into t (id,a) values (497,79);
+insert into t (id,a) values (497,80);
+insert into t (id,a) values (497,81);
+insert into t (id,a) values (497,82);
+insert into t (id,a) values (497,83);
+insert into t (id,a) values (497,84);
+insert into t (id,a) values (497,85);
+insert into t (id,a) values (497,86);
+insert into t (id,a) values (497,87);
+insert into t (id,a) values (497,88);
+insert into t (id,a) values (497,89);
+insert into t (id,a) values (497,90);
+insert into t (id,a) values (497,91);
+insert into t (id,a) values (497,92);
+insert into t (id,a) values (497,93);
+insert into t (id,a) values (497,94);
+insert into t (id,a) values (497,95);
+insert into t (id,a) values (497,96);
+insert into t (id,a) values (497,97);
+insert into t (id,a) values (497,98);
+insert into t (id,a) values (497,99);
+insert into t (id,a) values (498,0);
+insert into t (id,a) values (498,1);
+insert into t (id,a) values (498,2);
+insert into t (id,a) values (498,3);
+insert into t (id,a) values (498,4);
+insert into t (id,a) values (498,5);
+insert into t (id,a) values (498,6);
+insert into t (id,a) values (498,7);
+insert into t (id,a) values (498,8);
+insert into t (id,a) values (498,9);
+insert into t (id,a) values (498,10);
+insert into t (id,a) values (498,11);
+insert into t (id,a) values (498,12);
+insert into t (id,a) values (498,13);
+insert into t (id,a) values (498,14);
+insert into t (id,a) values (498,15);
+insert into t (id,a) values (498,16);
+insert into t (id,a) values (498,17);
+insert into t (id,a) values (498,18);
+insert into t (id,a) values (498,19);
+insert into t (id,a) values (498,20);
+insert into t (id,a) values (498,21);
+insert into t (id,a) values (498,22);
+insert into t (id,a) values (498,23);
+insert into t (id,a) values (498,24);
+insert into t (id,a) values (498,25);
+insert into t (id,a) values (498,26);
+insert into t (id,a) values (498,27);
+insert into t (id,a) values (498,28);
+insert into t (id,a) values (498,29);
+insert into t (id,a) values (498,30);
+insert into t (id,a) values (498,31);
+insert into t (id,a) values (498,32);
+insert into t (id,a) values (498,33);
+insert into t (id,a) values (498,34);
+insert into t (id,a) values (498,35);
+insert into t (id,a) values (498,36);
+insert into t (id,a) values (498,37);
+insert into t (id,a) values (498,38);
+insert into t (id,a) values (498,39);
+insert into t (id,a) values (498,40);
+insert into t (id,a) values (498,41);
+insert into t (id,a) values (498,42);
+insert into t (id,a) values (498,43);
+insert into t (id,a) values (498,44);
+insert into t (id,a) values (498,45);
+insert into t (id,a) values (498,46);
+insert into t (id,a) values (498,47);
+insert into t (id,a) values (498,48);
+insert into t (id,a) values (498,49);
+insert into t (id,a) values (498,50);
+insert into t (id,a) values (498,51);
+insert into t (id,a) values (498,52);
+insert into t (id,a) values (498,53);
+insert into t (id,a) values (498,54);
+insert into t (id,a) values (498,55);
+insert into t (id,a) values (498,56);
+insert into t (id,a) values (498,57);
+insert into t (id,a) values (498,58);
+insert into t (id,a) values (498,59);
+insert into t (id,a) values (498,60);
+insert into t (id,a) values (498,61);
+insert into t (id,a) values (498,62);
+insert into t (id,a) values (498,63);
+insert into t (id,a) values (498,64);
+insert into t (id,a) values (498,65);
+insert into t (id,a) values (498,66);
+insert into t (id,a) values (498,67);
+insert into t (id,a) values (498,68);
+insert into t (id,a) values (498,69);
+insert into t (id,a) values (498,70);
+insert into t (id,a) values (498,71);
+insert into t (id,a) values (498,72);
+insert into t (id,a) values (498,73);
+insert into t (id,a) values (498,74);
+insert into t (id,a) values (498,75);
+insert into t (id,a) values (498,76);
+insert into t (id,a) values (498,77);
+insert into t (id,a) values (498,78);
+insert into t (id,a) values (498,79);
+insert into t (id,a) values (498,80);
+insert into t (id,a) values (498,81);
+insert into t (id,a) values (498,82);
+insert into t (id,a) values (498,83);
+insert into t (id,a) values (498,84);
+insert into t (id,a) values (498,85);
+insert into t (id,a) values (498,86);
+insert into t (id,a) values (498,87);
+insert into t (id,a) values (498,88);
+insert into t (id,a) values (498,89);
+insert into t (id,a) values (498,90);
+insert into t (id,a) values (498,91);
+insert into t (id,a) values (498,92);
+insert into t (id,a) values (498,93);
+insert into t (id,a) values (498,94);
+insert into t (id,a) values (498,95);
+insert into t (id,a) values (498,96);
+insert into t (id,a) values (498,97);
+insert into t (id,a) values (498,98);
+insert into t (id,a) values (498,99);
+insert into t (id,a) values (499,0);
+insert into t (id,a) values (499,1);
+insert into t (id,a) values (499,2);
+insert into t (id,a) values (499,3);
+insert into t (id,a) values (499,4);
+insert into t (id,a) values (499,5);
+insert into t (id,a) values (499,6);
+insert into t (id,a) values (499,7);
+insert into t (id,a) values (499,8);
+insert into t (id,a) values (499,9);
+insert into t (id,a) values (499,10);
+insert into t (id,a) values (499,11);
+insert into t (id,a) values (499,12);
+insert into t (id,a) values (499,13);
+insert into t (id,a) values (499,14);
+insert into t (id,a) values (499,15);
+insert into t (id,a) values (499,16);
+insert into t (id,a) values (499,17);
+insert into t (id,a) values (499,18);
+insert into t (id,a) values (499,19);
+insert into t (id,a) values (499,20);
+insert into t (id,a) values (499,21);
+insert into t (id,a) values (499,22);
+insert into t (id,a) values (499,23);
+insert into t (id,a) values (499,24);
+insert into t (id,a) values (499,25);
+insert into t (id,a) values (499,26);
+insert into t (id,a) values (499,27);
+insert into t (id,a) values (499,28);
+insert into t (id,a) values (499,29);
+insert into t (id,a) values (499,30);
+insert into t (id,a) values (499,31);
+insert into t (id,a) values (499,32);
+insert into t (id,a) values (499,33);
+insert into t (id,a) values (499,34);
+insert into t (id,a) values (499,35);
+insert into t (id,a) values (499,36);
+insert into t (id,a) values (499,37);
+insert into t (id,a) values (499,38);
+insert into t (id,a) values (499,39);
+insert into t (id,a) values (499,40);
+insert into t (id,a) values (499,41);
+insert into t (id,a) values (499,42);
+insert into t (id,a) values (499,43);
+insert into t (id,a) values (499,44);
+insert into t (id,a) values (499,45);
+insert into t (id,a) values (499,46);
+insert into t (id,a) values (499,47);
+insert into t (id,a) values (499,48);
+insert into t (id,a) values (499,49);
+insert into t (id,a) values (499,50);
+insert into t (id,a) values (499,51);
+insert into t (id,a) values (499,52);
+insert into t (id,a) values (499,53);
+insert into t (id,a) values (499,54);
+insert into t (id,a) values (499,55);
+insert into t (id,a) values (499,56);
+insert into t (id,a) values (499,57);
+insert into t (id,a) values (499,58);
+insert into t (id,a) values (499,59);
+insert into t (id,a) values (499,60);
+insert into t (id,a) values (499,61);
+insert into t (id,a) values (499,62);
+insert into t (id,a) values (499,63);
+insert into t (id,a) values (499,64);
+insert into t (id,a) values (499,65);
+insert into t (id,a) values (499,66);
+insert into t (id,a) values (499,67);
+insert into t (id,a) values (499,68);
+insert into t (id,a) values (499,69);
+insert into t (id,a) values (499,70);
+insert into t (id,a) values (499,71);
+insert into t (id,a) values (499,72);
+insert into t (id,a) values (499,73);
+insert into t (id,a) values (499,74);
+insert into t (id,a) values (499,75);
+insert into t (id,a) values (499,76);
+insert into t (id,a) values (499,77);
+insert into t (id,a) values (499,78);
+insert into t (id,a) values (499,79);
+insert into t (id,a) values (499,80);
+insert into t (id,a) values (499,81);
+insert into t (id,a) values (499,82);
+insert into t (id,a) values (499,83);
+insert into t (id,a) values (499,84);
+insert into t (id,a) values (499,85);
+insert into t (id,a) values (499,86);
+insert into t (id,a) values (499,87);
+insert into t (id,a) values (499,88);
+insert into t (id,a) values (499,89);
+insert into t (id,a) values (499,90);
+insert into t (id,a) values (499,91);
+insert into t (id,a) values (499,92);
+insert into t (id,a) values (499,93);
+insert into t (id,a) values (499,94);
+insert into t (id,a) values (499,95);
+insert into t (id,a) values (499,96);
+insert into t (id,a) values (499,97);
+insert into t (id,a) values (499,98);
+insert into t (id,a) values (499,99);
+insert into t (id,a) values (500,0);
+insert into t (id,a) values (500,1);
+insert into t (id,a) values (500,2);
+insert into t (id,a) values (500,3);
+insert into t (id,a) values (500,4);
+insert into t (id,a) values (500,5);
+insert into t (id,a) values (500,6);
+insert into t (id,a) values (500,7);
+insert into t (id,a) values (500,8);
+insert into t (id,a) values (500,9);
+insert into t (id,a) values (500,10);
+insert into t (id,a) values (500,11);
+insert into t (id,a) values (500,12);
+insert into t (id,a) values (500,13);
+insert into t (id,a) values (500,14);
+insert into t (id,a) values (500,15);
+insert into t (id,a) values (500,16);
+insert into t (id,a) values (500,17);
+insert into t (id,a) values (500,18);
+insert into t (id,a) values (500,19);
+insert into t (id,a) values (500,20);
+insert into t (id,a) values (500,21);
+insert into t (id,a) values (500,22);
+insert into t (id,a) values (500,23);
+insert into t (id,a) values (500,24);
+insert into t (id,a) values (500,25);
+insert into t (id,a) values (500,26);
+insert into t (id,a) values (500,27);
+insert into t (id,a) values (500,28);
+insert into t (id,a) values (500,29);
+insert into t (id,a) values (500,30);
+insert into t (id,a) values (500,31);
+insert into t (id,a) values (500,32);
+insert into t (id,a) values (500,33);
+insert into t (id,a) values (500,34);
+insert into t (id,a) values (500,35);
+insert into t (id,a) values (500,36);
+insert into t (id,a) values (500,37);
+insert into t (id,a) values (500,38);
+insert into t (id,a) values (500,39);
+insert into t (id,a) values (500,40);
+insert into t (id,a) values (500,41);
+insert into t (id,a) values (500,42);
+insert into t (id,a) values (500,43);
+insert into t (id,a) values (500,44);
+insert into t (id,a) values (500,45);
+insert into t (id,a) values (500,46);
+insert into t (id,a) values (500,47);
+insert into t (id,a) values (500,48);
+insert into t (id,a) values (500,49);
+insert into t (id,a) values (500,50);
+insert into t (id,a) values (500,51);
+insert into t (id,a) values (500,52);
+insert into t (id,a) values (500,53);
+insert into t (id,a) values (500,54);
+insert into t (id,a) values (500,55);
+insert into t (id,a) values (500,56);
+insert into t (id,a) values (500,57);
+insert into t (id,a) values (500,58);
+insert into t (id,a) values (500,59);
+insert into t (id,a) values (500,60);
+insert into t (id,a) values (500,61);
+insert into t (id,a) values (500,62);
+insert into t (id,a) values (500,63);
+insert into t (id,a) values (500,64);
+insert into t (id,a) values (500,65);
+insert into t (id,a) values (500,66);
+insert into t (id,a) values (500,67);
+insert into t (id,a) values (500,68);
+insert into t (id,a) values (500,69);
+insert into t (id,a) values (500,70);
+insert into t (id,a) values (500,71);
+insert into t (id,a) values (500,72);
+insert into t (id,a) values (500,73);
+insert into t (id,a) values (500,74);
+insert into t (id,a) values (500,75);
+insert into t (id,a) values (500,76);
+insert into t (id,a) values (500,77);
+insert into t (id,a) values (500,78);
+insert into t (id,a) values (500,79);
+insert into t (id,a) values (500,80);
+insert into t (id,a) values (500,81);
+insert into t (id,a) values (500,82);
+insert into t (id,a) values (500,83);
+insert into t (id,a) values (500,84);
+insert into t (id,a) values (500,85);
+insert into t (id,a) values (500,86);
+insert into t (id,a) values (500,87);
+insert into t (id,a) values (500,88);
+insert into t (id,a) values (500,89);
+insert into t (id,a) values (500,90);
+insert into t (id,a) values (500,91);
+insert into t (id,a) values (500,92);
+insert into t (id,a) values (500,93);
+insert into t (id,a) values (500,94);
+insert into t (id,a) values (500,95);
+insert into t (id,a) values (500,96);
+insert into t (id,a) values (500,97);
+insert into t (id,a) values (500,98);
+insert into t (id,a) values (500,99);
+insert into t (id,a) values (501,0);
+insert into t (id,a) values (501,1);
+insert into t (id,a) values (501,2);
+insert into t (id,a) values (501,3);
+insert into t (id,a) values (501,4);
+insert into t (id,a) values (501,5);
+insert into t (id,a) values (501,6);
+insert into t (id,a) values (501,7);
+insert into t (id,a) values (501,8);
+insert into t (id,a) values (501,9);
+insert into t (id,a) values (501,10);
+insert into t (id,a) values (501,11);
+insert into t (id,a) values (501,12);
+insert into t (id,a) values (501,13);
+insert into t (id,a) values (501,14);
+insert into t (id,a) values (501,15);
+insert into t (id,a) values (501,16);
+insert into t (id,a) values (501,17);
+insert into t (id,a) values (501,18);
+insert into t (id,a) values (501,19);
+insert into t (id,a) values (501,20);
+insert into t (id,a) values (501,21);
+insert into t (id,a) values (501,22);
+insert into t (id,a) values (501,23);
+insert into t (id,a) values (501,24);
+insert into t (id,a) values (501,25);
+insert into t (id,a) values (501,26);
+insert into t (id,a) values (501,27);
+insert into t (id,a) values (501,28);
+insert into t (id,a) values (501,29);
+insert into t (id,a) values (501,30);
+insert into t (id,a) values (501,31);
+insert into t (id,a) values (501,32);
+insert into t (id,a) values (501,33);
+insert into t (id,a) values (501,34);
+insert into t (id,a) values (501,35);
+insert into t (id,a) values (501,36);
+insert into t (id,a) values (501,37);
+insert into t (id,a) values (501,38);
+insert into t (id,a) values (501,39);
+insert into t (id,a) values (501,40);
+insert into t (id,a) values (501,41);
+insert into t (id,a) values (501,42);
+insert into t (id,a) values (501,43);
+insert into t (id,a) values (501,44);
+insert into t (id,a) values (501,45);
+insert into t (id,a) values (501,46);
+insert into t (id,a) values (501,47);
+insert into t (id,a) values (501,48);
+insert into t (id,a) values (501,49);
+insert into t (id,a) values (501,50);
+insert into t (id,a) values (501,51);
+insert into t (id,a) values (501,52);
+insert into t (id,a) values (501,53);
+insert into t (id,a) values (501,54);
+insert into t (id,a) values (501,55);
+insert into t (id,a) values (501,56);
+insert into t (id,a) values (501,57);
+insert into t (id,a) values (501,58);
+insert into t (id,a) values (501,59);
+insert into t (id,a) values (501,60);
+insert into t (id,a) values (501,61);
+insert into t (id,a) values (501,62);
+insert into t (id,a) values (501,63);
+insert into t (id,a) values (501,64);
+insert into t (id,a) values (501,65);
+insert into t (id,a) values (501,66);
+insert into t (id,a) values (501,67);
+insert into t (id,a) values (501,68);
+insert into t (id,a) values (501,69);
+insert into t (id,a) values (501,70);
+insert into t (id,a) values (501,71);
+insert into t (id,a) values (501,72);
+insert into t (id,a) values (501,73);
+insert into t (id,a) values (501,74);
+insert into t (id,a) values (501,75);
+insert into t (id,a) values (501,76);
+insert into t (id,a) values (501,77);
+insert into t (id,a) values (501,78);
+insert into t (id,a) values (501,79);
+insert into t (id,a) values (501,80);
+insert into t (id,a) values (501,81);
+insert into t (id,a) values (501,82);
+insert into t (id,a) values (501,83);
+insert into t (id,a) values (501,84);
+insert into t (id,a) values (501,85);
+insert into t (id,a) values (501,86);
+insert into t (id,a) values (501,87);
+insert into t (id,a) values (501,88);
+insert into t (id,a) values (501,89);
+insert into t (id,a) values (501,90);
+insert into t (id,a) values (501,91);
+insert into t (id,a) values (501,92);
+insert into t (id,a) values (501,93);
+insert into t (id,a) values (501,94);
+insert into t (id,a) values (501,95);
+insert into t (id,a) values (501,96);
+insert into t (id,a) values (501,97);
+insert into t (id,a) values (501,98);
+insert into t (id,a) values (501,99);
+insert into t (id,a) values (502,0);
+insert into t (id,a) values (502,1);
+insert into t (id,a) values (502,2);
+insert into t (id,a) values (502,3);
+insert into t (id,a) values (502,4);
+insert into t (id,a) values (502,5);
+insert into t (id,a) values (502,6);
+insert into t (id,a) values (502,7);
+insert into t (id,a) values (502,8);
+insert into t (id,a) values (502,9);
+insert into t (id,a) values (502,10);
+insert into t (id,a) values (502,11);
+insert into t (id,a) values (502,12);
+insert into t (id,a) values (502,13);
+insert into t (id,a) values (502,14);
+insert into t (id,a) values (502,15);
+insert into t (id,a) values (502,16);
+insert into t (id,a) values (502,17);
+insert into t (id,a) values (502,18);
+insert into t (id,a) values (502,19);
+insert into t (id,a) values (502,20);
+insert into t (id,a) values (502,21);
+insert into t (id,a) values (502,22);
+insert into t (id,a) values (502,23);
+insert into t (id,a) values (502,24);
+insert into t (id,a) values (502,25);
+insert into t (id,a) values (502,26);
+insert into t (id,a) values (502,27);
+insert into t (id,a) values (502,28);
+insert into t (id,a) values (502,29);
+insert into t (id,a) values (502,30);
+insert into t (id,a) values (502,31);
+insert into t (id,a) values (502,32);
+insert into t (id,a) values (502,33);
+insert into t (id,a) values (502,34);
+insert into t (id,a) values (502,35);
+insert into t (id,a) values (502,36);
+insert into t (id,a) values (502,37);
+insert into t (id,a) values (502,38);
+insert into t (id,a) values (502,39);
+insert into t (id,a) values (502,40);
+insert into t (id,a) values (502,41);
+insert into t (id,a) values (502,42);
+insert into t (id,a) values (502,43);
+insert into t (id,a) values (502,44);
+insert into t (id,a) values (502,45);
+insert into t (id,a) values (502,46);
+insert into t (id,a) values (502,47);
+insert into t (id,a) values (502,48);
+insert into t (id,a) values (502,49);
+insert into t (id,a) values (502,50);
+insert into t (id,a) values (502,51);
+insert into t (id,a) values (502,52);
+insert into t (id,a) values (502,53);
+insert into t (id,a) values (502,54);
+insert into t (id,a) values (502,55);
+insert into t (id,a) values (502,56);
+insert into t (id,a) values (502,57);
+insert into t (id,a) values (502,58);
+insert into t (id,a) values (502,59);
+insert into t (id,a) values (502,60);
+insert into t (id,a) values (502,61);
+insert into t (id,a) values (502,62);
+insert into t (id,a) values (502,63);
+insert into t (id,a) values (502,64);
+insert into t (id,a) values (502,65);
+insert into t (id,a) values (502,66);
+insert into t (id,a) values (502,67);
+insert into t (id,a) values (502,68);
+insert into t (id,a) values (502,69);
+insert into t (id,a) values (502,70);
+insert into t (id,a) values (502,71);
+insert into t (id,a) values (502,72);
+insert into t (id,a) values (502,73);
+insert into t (id,a) values (502,74);
+insert into t (id,a) values (502,75);
+insert into t (id,a) values (502,76);
+insert into t (id,a) values (502,77);
+insert into t (id,a) values (502,78);
+insert into t (id,a) values (502,79);
+insert into t (id,a) values (502,80);
+insert into t (id,a) values (502,81);
+insert into t (id,a) values (502,82);
+insert into t (id,a) values (502,83);
+insert into t (id,a) values (502,84);
+insert into t (id,a) values (502,85);
+insert into t (id,a) values (502,86);
+insert into t (id,a) values (502,87);
+insert into t (id,a) values (502,88);
+insert into t (id,a) values (502,89);
+insert into t (id,a) values (502,90);
+insert into t (id,a) values (502,91);
+insert into t (id,a) values (502,92);
+insert into t (id,a) values (502,93);
+insert into t (id,a) values (502,94);
+insert into t (id,a) values (502,95);
+insert into t (id,a) values (502,96);
+insert into t (id,a) values (502,97);
+insert into t (id,a) values (502,98);
+insert into t (id,a) values (502,99);
+insert into t (id,a) values (503,0);
+insert into t (id,a) values (503,1);
+insert into t (id,a) values (503,2);
+insert into t (id,a) values (503,3);
+insert into t (id,a) values (503,4);
+insert into t (id,a) values (503,5);
+insert into t (id,a) values (503,6);
+insert into t (id,a) values (503,7);
+insert into t (id,a) values (503,8);
+insert into t (id,a) values (503,9);
+insert into t (id,a) values (503,10);
+insert into t (id,a) values (503,11);
+insert into t (id,a) values (503,12);
+insert into t (id,a) values (503,13);
+insert into t (id,a) values (503,14);
+insert into t (id,a) values (503,15);
+insert into t (id,a) values (503,16);
+insert into t (id,a) values (503,17);
+insert into t (id,a) values (503,18);
+insert into t (id,a) values (503,19);
+insert into t (id,a) values (503,20);
+insert into t (id,a) values (503,21);
+insert into t (id,a) values (503,22);
+insert into t (id,a) values (503,23);
+insert into t (id,a) values (503,24);
+insert into t (id,a) values (503,25);
+insert into t (id,a) values (503,26);
+insert into t (id,a) values (503,27);
+insert into t (id,a) values (503,28);
+insert into t (id,a) values (503,29);
+insert into t (id,a) values (503,30);
+insert into t (id,a) values (503,31);
+insert into t (id,a) values (503,32);
+insert into t (id,a) values (503,33);
+insert into t (id,a) values (503,34);
+insert into t (id,a) values (503,35);
+insert into t (id,a) values (503,36);
+insert into t (id,a) values (503,37);
+insert into t (id,a) values (503,38);
+insert into t (id,a) values (503,39);
+insert into t (id,a) values (503,40);
+insert into t (id,a) values (503,41);
+insert into t (id,a) values (503,42);
+insert into t (id,a) values (503,43);
+insert into t (id,a) values (503,44);
+insert into t (id,a) values (503,45);
+insert into t (id,a) values (503,46);
+insert into t (id,a) values (503,47);
+insert into t (id,a) values (503,48);
+insert into t (id,a) values (503,49);
+insert into t (id,a) values (503,50);
+insert into t (id,a) values (503,51);
+insert into t (id,a) values (503,52);
+insert into t (id,a) values (503,53);
+insert into t (id,a) values (503,54);
+insert into t (id,a) values (503,55);
+insert into t (id,a) values (503,56);
+insert into t (id,a) values (503,57);
+insert into t (id,a) values (503,58);
+insert into t (id,a) values (503,59);
+insert into t (id,a) values (503,60);
+insert into t (id,a) values (503,61);
+insert into t (id,a) values (503,62);
+insert into t (id,a) values (503,63);
+insert into t (id,a) values (503,64);
+insert into t (id,a) values (503,65);
+insert into t (id,a) values (503,66);
+insert into t (id,a) values (503,67);
+insert into t (id,a) values (503,68);
+insert into t (id,a) values (503,69);
+insert into t (id,a) values (503,70);
+insert into t (id,a) values (503,71);
+insert into t (id,a) values (503,72);
+insert into t (id,a) values (503,73);
+insert into t (id,a) values (503,74);
+insert into t (id,a) values (503,75);
+insert into t (id,a) values (503,76);
+insert into t (id,a) values (503,77);
+insert into t (id,a) values (503,78);
+insert into t (id,a) values (503,79);
+insert into t (id,a) values (503,80);
+insert into t (id,a) values (503,81);
+insert into t (id,a) values (503,82);
+insert into t (id,a) values (503,83);
+insert into t (id,a) values (503,84);
+insert into t (id,a) values (503,85);
+insert into t (id,a) values (503,86);
+insert into t (id,a) values (503,87);
+insert into t (id,a) values (503,88);
+insert into t (id,a) values (503,89);
+insert into t (id,a) values (503,90);
+insert into t (id,a) values (503,91);
+insert into t (id,a) values (503,92);
+insert into t (id,a) values (503,93);
+insert into t (id,a) values (503,94);
+insert into t (id,a) values (503,95);
+insert into t (id,a) values (503,96);
+insert into t (id,a) values (503,97);
+insert into t (id,a) values (503,98);
+insert into t (id,a) values (503,99);
+insert into t (id,a) values (504,0);
+insert into t (id,a) values (504,1);
+insert into t (id,a) values (504,2);
+insert into t (id,a) values (504,3);
+insert into t (id,a) values (504,4);
+insert into t (id,a) values (504,5);
+insert into t (id,a) values (504,6);
+insert into t (id,a) values (504,7);
+insert into t (id,a) values (504,8);
+insert into t (id,a) values (504,9);
+insert into t (id,a) values (504,10);
+insert into t (id,a) values (504,11);
+insert into t (id,a) values (504,12);
+insert into t (id,a) values (504,13);
+insert into t (id,a) values (504,14);
+insert into t (id,a) values (504,15);
+insert into t (id,a) values (504,16);
+insert into t (id,a) values (504,17);
+insert into t (id,a) values (504,18);
+insert into t (id,a) values (504,19);
+insert into t (id,a) values (504,20);
+insert into t (id,a) values (504,21);
+insert into t (id,a) values (504,22);
+insert into t (id,a) values (504,23);
+insert into t (id,a) values (504,24);
+insert into t (id,a) values (504,25);
+insert into t (id,a) values (504,26);
+insert into t (id,a) values (504,27);
+insert into t (id,a) values (504,28);
+insert into t (id,a) values (504,29);
+insert into t (id,a) values (504,30);
+insert into t (id,a) values (504,31);
+insert into t (id,a) values (504,32);
+insert into t (id,a) values (504,33);
+insert into t (id,a) values (504,34);
+insert into t (id,a) values (504,35);
+insert into t (id,a) values (504,36);
+insert into t (id,a) values (504,37);
+insert into t (id,a) values (504,38);
+insert into t (id,a) values (504,39);
+insert into t (id,a) values (504,40);
+insert into t (id,a) values (504,41);
+insert into t (id,a) values (504,42);
+insert into t (id,a) values (504,43);
+insert into t (id,a) values (504,44);
+insert into t (id,a) values (504,45);
+insert into t (id,a) values (504,46);
+insert into t (id,a) values (504,47);
+insert into t (id,a) values (504,48);
+insert into t (id,a) values (504,49);
+insert into t (id,a) values (504,50);
+insert into t (id,a) values (504,51);
+insert into t (id,a) values (504,52);
+insert into t (id,a) values (504,53);
+insert into t (id,a) values (504,54);
+insert into t (id,a) values (504,55);
+insert into t (id,a) values (504,56);
+insert into t (id,a) values (504,57);
+insert into t (id,a) values (504,58);
+insert into t (id,a) values (504,59);
+insert into t (id,a) values (504,60);
+insert into t (id,a) values (504,61);
+insert into t (id,a) values (504,62);
+insert into t (id,a) values (504,63);
+insert into t (id,a) values (504,64);
+insert into t (id,a) values (504,65);
+insert into t (id,a) values (504,66);
+insert into t (id,a) values (504,67);
+insert into t (id,a) values (504,68);
+insert into t (id,a) values (504,69);
+insert into t (id,a) values (504,70);
+insert into t (id,a) values (504,71);
+insert into t (id,a) values (504,72);
+insert into t (id,a) values (504,73);
+insert into t (id,a) values (504,74);
+insert into t (id,a) values (504,75);
+insert into t (id,a) values (504,76);
+insert into t (id,a) values (504,77);
+insert into t (id,a) values (504,78);
+insert into t (id,a) values (504,79);
+insert into t (id,a) values (504,80);
+insert into t (id,a) values (504,81);
+insert into t (id,a) values (504,82);
+insert into t (id,a) values (504,83);
+insert into t (id,a) values (504,84);
+insert into t (id,a) values (504,85);
+insert into t (id,a) values (504,86);
+insert into t (id,a) values (504,87);
+insert into t (id,a) values (504,88);
+insert into t (id,a) values (504,89);
+insert into t (id,a) values (504,90);
+insert into t (id,a) values (504,91);
+insert into t (id,a) values (504,92);
+insert into t (id,a) values (504,93);
+insert into t (id,a) values (504,94);
+insert into t (id,a) values (504,95);
+insert into t (id,a) values (504,96);
+insert into t (id,a) values (504,97);
+insert into t (id,a) values (504,98);
+insert into t (id,a) values (504,99);
+insert into t (id,a) values (505,0);
+insert into t (id,a) values (505,1);
+insert into t (id,a) values (505,2);
+insert into t (id,a) values (505,3);
+insert into t (id,a) values (505,4);
+insert into t (id,a) values (505,5);
+insert into t (id,a) values (505,6);
+insert into t (id,a) values (505,7);
+insert into t (id,a) values (505,8);
+insert into t (id,a) values (505,9);
+insert into t (id,a) values (505,10);
+insert into t (id,a) values (505,11);
+insert into t (id,a) values (505,12);
+insert into t (id,a) values (505,13);
+insert into t (id,a) values (505,14);
+insert into t (id,a) values (505,15);
+insert into t (id,a) values (505,16);
+insert into t (id,a) values (505,17);
+insert into t (id,a) values (505,18);
+insert into t (id,a) values (505,19);
+insert into t (id,a) values (505,20);
+insert into t (id,a) values (505,21);
+insert into t (id,a) values (505,22);
+insert into t (id,a) values (505,23);
+insert into t (id,a) values (505,24);
+insert into t (id,a) values (505,25);
+insert into t (id,a) values (505,26);
+insert into t (id,a) values (505,27);
+insert into t (id,a) values (505,28);
+insert into t (id,a) values (505,29);
+insert into t (id,a) values (505,30);
+insert into t (id,a) values (505,31);
+insert into t (id,a) values (505,32);
+insert into t (id,a) values (505,33);
+insert into t (id,a) values (505,34);
+insert into t (id,a) values (505,35);
+insert into t (id,a) values (505,36);
+insert into t (id,a) values (505,37);
+insert into t (id,a) values (505,38);
+insert into t (id,a) values (505,39);
+insert into t (id,a) values (505,40);
+insert into t (id,a) values (505,41);
+insert into t (id,a) values (505,42);
+insert into t (id,a) values (505,43);
+insert into t (id,a) values (505,44);
+insert into t (id,a) values (505,45);
+insert into t (id,a) values (505,46);
+insert into t (id,a) values (505,47);
+insert into t (id,a) values (505,48);
+insert into t (id,a) values (505,49);
+insert into t (id,a) values (505,50);
+insert into t (id,a) values (505,51);
+insert into t (id,a) values (505,52);
+insert into t (id,a) values (505,53);
+insert into t (id,a) values (505,54);
+insert into t (id,a) values (505,55);
+insert into t (id,a) values (505,56);
+insert into t (id,a) values (505,57);
+insert into t (id,a) values (505,58);
+insert into t (id,a) values (505,59);
+insert into t (id,a) values (505,60);
+insert into t (id,a) values (505,61);
+insert into t (id,a) values (505,62);
+insert into t (id,a) values (505,63);
+insert into t (id,a) values (505,64);
+insert into t (id,a) values (505,65);
+insert into t (id,a) values (505,66);
+insert into t (id,a) values (505,67);
+insert into t (id,a) values (505,68);
+insert into t (id,a) values (505,69);
+insert into t (id,a) values (505,70);
+insert into t (id,a) values (505,71);
+insert into t (id,a) values (505,72);
+insert into t (id,a) values (505,73);
+insert into t (id,a) values (505,74);
+insert into t (id,a) values (505,75);
+insert into t (id,a) values (505,76);
+insert into t (id,a) values (505,77);
+insert into t (id,a) values (505,78);
+insert into t (id,a) values (505,79);
+insert into t (id,a) values (505,80);
+insert into t (id,a) values (505,81);
+insert into t (id,a) values (505,82);
+insert into t (id,a) values (505,83);
+insert into t (id,a) values (505,84);
+insert into t (id,a) values (505,85);
+insert into t (id,a) values (505,86);
+insert into t (id,a) values (505,87);
+insert into t (id,a) values (505,88);
+insert into t (id,a) values (505,89);
+insert into t (id,a) values (505,90);
+insert into t (id,a) values (505,91);
+insert into t (id,a) values (505,92);
+insert into t (id,a) values (505,93);
+insert into t (id,a) values (505,94);
+insert into t (id,a) values (505,95);
+insert into t (id,a) values (505,96);
+insert into t (id,a) values (505,97);
+insert into t (id,a) values (505,98);
+insert into t (id,a) values (505,99);
+insert into t (id,a) values (506,0);
+insert into t (id,a) values (506,1);
+insert into t (id,a) values (506,2);
+insert into t (id,a) values (506,3);
+insert into t (id,a) values (506,4);
+insert into t (id,a) values (506,5);
+insert into t (id,a) values (506,6);
+insert into t (id,a) values (506,7);
+insert into t (id,a) values (506,8);
+insert into t (id,a) values (506,9);
+insert into t (id,a) values (506,10);
+insert into t (id,a) values (506,11);
+insert into t (id,a) values (506,12);
+insert into t (id,a) values (506,13);
+insert into t (id,a) values (506,14);
+insert into t (id,a) values (506,15);
+insert into t (id,a) values (506,16);
+insert into t (id,a) values (506,17);
+insert into t (id,a) values (506,18);
+insert into t (id,a) values (506,19);
+insert into t (id,a) values (506,20);
+insert into t (id,a) values (506,21);
+insert into t (id,a) values (506,22);
+insert into t (id,a) values (506,23);
+insert into t (id,a) values (506,24);
+insert into t (id,a) values (506,25);
+insert into t (id,a) values (506,26);
+insert into t (id,a) values (506,27);
+insert into t (id,a) values (506,28);
+insert into t (id,a) values (506,29);
+insert into t (id,a) values (506,30);
+insert into t (id,a) values (506,31);
+insert into t (id,a) values (506,32);
+insert into t (id,a) values (506,33);
+insert into t (id,a) values (506,34);
+insert into t (id,a) values (506,35);
+insert into t (id,a) values (506,36);
+insert into t (id,a) values (506,37);
+insert into t (id,a) values (506,38);
+insert into t (id,a) values (506,39);
+insert into t (id,a) values (506,40);
+insert into t (id,a) values (506,41);
+insert into t (id,a) values (506,42);
+insert into t (id,a) values (506,43);
+insert into t (id,a) values (506,44);
+insert into t (id,a) values (506,45);
+insert into t (id,a) values (506,46);
+insert into t (id,a) values (506,47);
+insert into t (id,a) values (506,48);
+insert into t (id,a) values (506,49);
+insert into t (id,a) values (506,50);
+insert into t (id,a) values (506,51);
+insert into t (id,a) values (506,52);
+insert into t (id,a) values (506,53);
+insert into t (id,a) values (506,54);
+insert into t (id,a) values (506,55);
+insert into t (id,a) values (506,56);
+insert into t (id,a) values (506,57);
+insert into t (id,a) values (506,58);
+insert into t (id,a) values (506,59);
+insert into t (id,a) values (506,60);
+insert into t (id,a) values (506,61);
+insert into t (id,a) values (506,62);
+insert into t (id,a) values (506,63);
+insert into t (id,a) values (506,64);
+insert into t (id,a) values (506,65);
+insert into t (id,a) values (506,66);
+insert into t (id,a) values (506,67);
+insert into t (id,a) values (506,68);
+insert into t (id,a) values (506,69);
+insert into t (id,a) values (506,70);
+insert into t (id,a) values (506,71);
+insert into t (id,a) values (506,72);
+insert into t (id,a) values (506,73);
+insert into t (id,a) values (506,74);
+insert into t (id,a) values (506,75);
+insert into t (id,a) values (506,76);
+insert into t (id,a) values (506,77);
+insert into t (id,a) values (506,78);
+insert into t (id,a) values (506,79);
+insert into t (id,a) values (506,80);
+insert into t (id,a) values (506,81);
+insert into t (id,a) values (506,82);
+insert into t (id,a) values (506,83);
+insert into t (id,a) values (506,84);
+insert into t (id,a) values (506,85);
+insert into t (id,a) values (506,86);
+insert into t (id,a) values (506,87);
+insert into t (id,a) values (506,88);
+insert into t (id,a) values (506,89);
+insert into t (id,a) values (506,90);
+insert into t (id,a) values (506,91);
+insert into t (id,a) values (506,92);
+insert into t (id,a) values (506,93);
+insert into t (id,a) values (506,94);
+insert into t (id,a) values (506,95);
+insert into t (id,a) values (506,96);
+insert into t (id,a) values (506,97);
+insert into t (id,a) values (506,98);
+insert into t (id,a) values (506,99);
+insert into t (id,a) values (507,0);
+insert into t (id,a) values (507,1);
+insert into t (id,a) values (507,2);
+insert into t (id,a) values (507,3);
+insert into t (id,a) values (507,4);
+insert into t (id,a) values (507,5);
+insert into t (id,a) values (507,6);
+insert into t (id,a) values (507,7);
+insert into t (id,a) values (507,8);
+insert into t (id,a) values (507,9);
+insert into t (id,a) values (507,10);
+insert into t (id,a) values (507,11);
+insert into t (id,a) values (507,12);
+insert into t (id,a) values (507,13);
+insert into t (id,a) values (507,14);
+insert into t (id,a) values (507,15);
+insert into t (id,a) values (507,16);
+insert into t (id,a) values (507,17);
+insert into t (id,a) values (507,18);
+insert into t (id,a) values (507,19);
+insert into t (id,a) values (507,20);
+insert into t (id,a) values (507,21);
+insert into t (id,a) values (507,22);
+insert into t (id,a) values (507,23);
+insert into t (id,a) values (507,24);
+insert into t (id,a) values (507,25);
+insert into t (id,a) values (507,26);
+insert into t (id,a) values (507,27);
+insert into t (id,a) values (507,28);
+insert into t (id,a) values (507,29);
+insert into t (id,a) values (507,30);
+insert into t (id,a) values (507,31);
+insert into t (id,a) values (507,32);
+insert into t (id,a) values (507,33);
+insert into t (id,a) values (507,34);
+insert into t (id,a) values (507,35);
+insert into t (id,a) values (507,36);
+insert into t (id,a) values (507,37);
+insert into t (id,a) values (507,38);
+insert into t (id,a) values (507,39);
+insert into t (id,a) values (507,40);
+insert into t (id,a) values (507,41);
+insert into t (id,a) values (507,42);
+insert into t (id,a) values (507,43);
+insert into t (id,a) values (507,44);
+insert into t (id,a) values (507,45);
+insert into t (id,a) values (507,46);
+insert into t (id,a) values (507,47);
+insert into t (id,a) values (507,48);
+insert into t (id,a) values (507,49);
+insert into t (id,a) values (507,50);
+insert into t (id,a) values (507,51);
+insert into t (id,a) values (507,52);
+insert into t (id,a) values (507,53);
+insert into t (id,a) values (507,54);
+insert into t (id,a) values (507,55);
+insert into t (id,a) values (507,56);
+insert into t (id,a) values (507,57);
+insert into t (id,a) values (507,58);
+insert into t (id,a) values (507,59);
+insert into t (id,a) values (507,60);
+insert into t (id,a) values (507,61);
+insert into t (id,a) values (507,62);
+insert into t (id,a) values (507,63);
+insert into t (id,a) values (507,64);
+insert into t (id,a) values (507,65);
+insert into t (id,a) values (507,66);
+insert into t (id,a) values (507,67);
+insert into t (id,a) values (507,68);
+insert into t (id,a) values (507,69);
+insert into t (id,a) values (507,70);
+insert into t (id,a) values (507,71);
+insert into t (id,a) values (507,72);
+insert into t (id,a) values (507,73);
+insert into t (id,a) values (507,74);
+insert into t (id,a) values (507,75);
+insert into t (id,a) values (507,76);
+insert into t (id,a) values (507,77);
+insert into t (id,a) values (507,78);
+insert into t (id,a) values (507,79);
+insert into t (id,a) values (507,80);
+insert into t (id,a) values (507,81);
+insert into t (id,a) values (507,82);
+insert into t (id,a) values (507,83);
+insert into t (id,a) values (507,84);
+insert into t (id,a) values (507,85);
+insert into t (id,a) values (507,86);
+insert into t (id,a) values (507,87);
+insert into t (id,a) values (507,88);
+insert into t (id,a) values (507,89);
+insert into t (id,a) values (507,90);
+insert into t (id,a) values (507,91);
+insert into t (id,a) values (507,92);
+insert into t (id,a) values (507,93);
+insert into t (id,a) values (507,94);
+insert into t (id,a) values (507,95);
+insert into t (id,a) values (507,96);
+insert into t (id,a) values (507,97);
+insert into t (id,a) values (507,98);
+insert into t (id,a) values (507,99);
+insert into t (id,a) values (508,0);
+insert into t (id,a) values (508,1);
+insert into t (id,a) values (508,2);
+insert into t (id,a) values (508,3);
+insert into t (id,a) values (508,4);
+insert into t (id,a) values (508,5);
+insert into t (id,a) values (508,6);
+insert into t (id,a) values (508,7);
+insert into t (id,a) values (508,8);
+insert into t (id,a) values (508,9);
+insert into t (id,a) values (508,10);
+insert into t (id,a) values (508,11);
+insert into t (id,a) values (508,12);
+insert into t (id,a) values (508,13);
+insert into t (id,a) values (508,14);
+insert into t (id,a) values (508,15);
+insert into t (id,a) values (508,16);
+insert into t (id,a) values (508,17);
+insert into t (id,a) values (508,18);
+insert into t (id,a) values (508,19);
+insert into t (id,a) values (508,20);
+insert into t (id,a) values (508,21);
+insert into t (id,a) values (508,22);
+insert into t (id,a) values (508,23);
+insert into t (id,a) values (508,24);
+insert into t (id,a) values (508,25);
+insert into t (id,a) values (508,26);
+insert into t (id,a) values (508,27);
+insert into t (id,a) values (508,28);
+insert into t (id,a) values (508,29);
+insert into t (id,a) values (508,30);
+insert into t (id,a) values (508,31);
+insert into t (id,a) values (508,32);
+insert into t (id,a) values (508,33);
+insert into t (id,a) values (508,34);
+insert into t (id,a) values (508,35);
+insert into t (id,a) values (508,36);
+insert into t (id,a) values (508,37);
+insert into t (id,a) values (508,38);
+insert into t (id,a) values (508,39);
+insert into t (id,a) values (508,40);
+insert into t (id,a) values (508,41);
+insert into t (id,a) values (508,42);
+insert into t (id,a) values (508,43);
+insert into t (id,a) values (508,44);
+insert into t (id,a) values (508,45);
+insert into t (id,a) values (508,46);
+insert into t (id,a) values (508,47);
+insert into t (id,a) values (508,48);
+insert into t (id,a) values (508,49);
+insert into t (id,a) values (508,50);
+insert into t (id,a) values (508,51);
+insert into t (id,a) values (508,52);
+insert into t (id,a) values (508,53);
+insert into t (id,a) values (508,54);
+insert into t (id,a) values (508,55);
+insert into t (id,a) values (508,56);
+insert into t (id,a) values (508,57);
+insert into t (id,a) values (508,58);
+insert into t (id,a) values (508,59);
+insert into t (id,a) values (508,60);
+insert into t (id,a) values (508,61);
+insert into t (id,a) values (508,62);
+insert into t (id,a) values (508,63);
+insert into t (id,a) values (508,64);
+insert into t (id,a) values (508,65);
+insert into t (id,a) values (508,66);
+insert into t (id,a) values (508,67);
+insert into t (id,a) values (508,68);
+insert into t (id,a) values (508,69);
+insert into t (id,a) values (508,70);
+insert into t (id,a) values (508,71);
+insert into t (id,a) values (508,72);
+insert into t (id,a) values (508,73);
+insert into t (id,a) values (508,74);
+insert into t (id,a) values (508,75);
+insert into t (id,a) values (508,76);
+insert into t (id,a) values (508,77);
+insert into t (id,a) values (508,78);
+insert into t (id,a) values (508,79);
+insert into t (id,a) values (508,80);
+insert into t (id,a) values (508,81);
+insert into t (id,a) values (508,82);
+insert into t (id,a) values (508,83);
+insert into t (id,a) values (508,84);
+insert into t (id,a) values (508,85);
+insert into t (id,a) values (508,86);
+insert into t (id,a) values (508,87);
+insert into t (id,a) values (508,88);
+insert into t (id,a) values (508,89);
+insert into t (id,a) values (508,90);
+insert into t (id,a) values (508,91);
+insert into t (id,a) values (508,92);
+insert into t (id,a) values (508,93);
+insert into t (id,a) values (508,94);
+insert into t (id,a) values (508,95);
+insert into t (id,a) values (508,96);
+insert into t (id,a) values (508,97);
+insert into t (id,a) values (508,98);
+insert into t (id,a) values (508,99);
+insert into t (id,a) values (509,0);
+insert into t (id,a) values (509,1);
+insert into t (id,a) values (509,2);
+insert into t (id,a) values (509,3);
+insert into t (id,a) values (509,4);
+insert into t (id,a) values (509,5);
+insert into t (id,a) values (509,6);
+insert into t (id,a) values (509,7);
+insert into t (id,a) values (509,8);
+insert into t (id,a) values (509,9);
+insert into t (id,a) values (509,10);
+insert into t (id,a) values (509,11);
+insert into t (id,a) values (509,12);
+insert into t (id,a) values (509,13);
+insert into t (id,a) values (509,14);
+insert into t (id,a) values (509,15);
+insert into t (id,a) values (509,16);
+insert into t (id,a) values (509,17);
+insert into t (id,a) values (509,18);
+insert into t (id,a) values (509,19);
+insert into t (id,a) values (509,20);
+insert into t (id,a) values (509,21);
+insert into t (id,a) values (509,22);
+insert into t (id,a) values (509,23);
+insert into t (id,a) values (509,24);
+insert into t (id,a) values (509,25);
+insert into t (id,a) values (509,26);
+insert into t (id,a) values (509,27);
+insert into t (id,a) values (509,28);
+insert into t (id,a) values (509,29);
+insert into t (id,a) values (509,30);
+insert into t (id,a) values (509,31);
+insert into t (id,a) values (509,32);
+insert into t (id,a) values (509,33);
+insert into t (id,a) values (509,34);
+insert into t (id,a) values (509,35);
+insert into t (id,a) values (509,36);
+insert into t (id,a) values (509,37);
+insert into t (id,a) values (509,38);
+insert into t (id,a) values (509,39);
+insert into t (id,a) values (509,40);
+insert into t (id,a) values (509,41);
+insert into t (id,a) values (509,42);
+insert into t (id,a) values (509,43);
+insert into t (id,a) values (509,44);
+insert into t (id,a) values (509,45);
+insert into t (id,a) values (509,46);
+insert into t (id,a) values (509,47);
+insert into t (id,a) values (509,48);
+insert into t (id,a) values (509,49);
+insert into t (id,a) values (509,50);
+insert into t (id,a) values (509,51);
+insert into t (id,a) values (509,52);
+insert into t (id,a) values (509,53);
+insert into t (id,a) values (509,54);
+insert into t (id,a) values (509,55);
+insert into t (id,a) values (509,56);
+insert into t (id,a) values (509,57);
+insert into t (id,a) values (509,58);
+insert into t (id,a) values (509,59);
+insert into t (id,a) values (509,60);
+insert into t (id,a) values (509,61);
+insert into t (id,a) values (509,62);
+insert into t (id,a) values (509,63);
+insert into t (id,a) values (509,64);
+insert into t (id,a) values (509,65);
+insert into t (id,a) values (509,66);
+insert into t (id,a) values (509,67);
+insert into t (id,a) values (509,68);
+insert into t (id,a) values (509,69);
+insert into t (id,a) values (509,70);
+insert into t (id,a) values (509,71);
+insert into t (id,a) values (509,72);
+insert into t (id,a) values (509,73);
+insert into t (id,a) values (509,74);
+insert into t (id,a) values (509,75);
+insert into t (id,a) values (509,76);
+insert into t (id,a) values (509,77);
+insert into t (id,a) values (509,78);
+insert into t (id,a) values (509,79);
+insert into t (id,a) values (509,80);
+insert into t (id,a) values (509,81);
+insert into t (id,a) values (509,82);
+insert into t (id,a) values (509,83);
+insert into t (id,a) values (509,84);
+insert into t (id,a) values (509,85);
+insert into t (id,a) values (509,86);
+insert into t (id,a) values (509,87);
+insert into t (id,a) values (509,88);
+insert into t (id,a) values (509,89);
+insert into t (id,a) values (509,90);
+insert into t (id,a) values (509,91);
+insert into t (id,a) values (509,92);
+insert into t (id,a) values (509,93);
+insert into t (id,a) values (509,94);
+insert into t (id,a) values (509,95);
+insert into t (id,a) values (509,96);
+insert into t (id,a) values (509,97);
+insert into t (id,a) values (509,98);
+insert into t (id,a) values (509,99);
+insert into t (id,a) values (510,0);
+insert into t (id,a) values (510,1);
+insert into t (id,a) values (510,2);
+insert into t (id,a) values (510,3);
+insert into t (id,a) values (510,4);
+insert into t (id,a) values (510,5);
+insert into t (id,a) values (510,6);
+insert into t (id,a) values (510,7);
+insert into t (id,a) values (510,8);
+insert into t (id,a) values (510,9);
+insert into t (id,a) values (510,10);
+insert into t (id,a) values (510,11);
+insert into t (id,a) values (510,12);
+insert into t (id,a) values (510,13);
+insert into t (id,a) values (510,14);
+insert into t (id,a) values (510,15);
+insert into t (id,a) values (510,16);
+insert into t (id,a) values (510,17);
+insert into t (id,a) values (510,18);
+insert into t (id,a) values (510,19);
+insert into t (id,a) values (510,20);
+insert into t (id,a) values (510,21);
+insert into t (id,a) values (510,22);
+insert into t (id,a) values (510,23);
+insert into t (id,a) values (510,24);
+insert into t (id,a) values (510,25);
+insert into t (id,a) values (510,26);
+insert into t (id,a) values (510,27);
+insert into t (id,a) values (510,28);
+insert into t (id,a) values (510,29);
+insert into t (id,a) values (510,30);
+insert into t (id,a) values (510,31);
+insert into t (id,a) values (510,32);
+insert into t (id,a) values (510,33);
+insert into t (id,a) values (510,34);
+insert into t (id,a) values (510,35);
+insert into t (id,a) values (510,36);
+insert into t (id,a) values (510,37);
+insert into t (id,a) values (510,38);
+insert into t (id,a) values (510,39);
+insert into t (id,a) values (510,40);
+insert into t (id,a) values (510,41);
+insert into t (id,a) values (510,42);
+insert into t (id,a) values (510,43);
+insert into t (id,a) values (510,44);
+insert into t (id,a) values (510,45);
+insert into t (id,a) values (510,46);
+insert into t (id,a) values (510,47);
+insert into t (id,a) values (510,48);
+insert into t (id,a) values (510,49);
+insert into t (id,a) values (510,50);
+insert into t (id,a) values (510,51);
+insert into t (id,a) values (510,52);
+insert into t (id,a) values (510,53);
+insert into t (id,a) values (510,54);
+insert into t (id,a) values (510,55);
+insert into t (id,a) values (510,56);
+insert into t (id,a) values (510,57);
+insert into t (id,a) values (510,58);
+insert into t (id,a) values (510,59);
+insert into t (id,a) values (510,60);
+insert into t (id,a) values (510,61);
+insert into t (id,a) values (510,62);
+insert into t (id,a) values (510,63);
+insert into t (id,a) values (510,64);
+insert into t (id,a) values (510,65);
+insert into t (id,a) values (510,66);
+insert into t (id,a) values (510,67);
+insert into t (id,a) values (510,68);
+insert into t (id,a) values (510,69);
+insert into t (id,a) values (510,70);
+insert into t (id,a) values (510,71);
+insert into t (id,a) values (510,72);
+insert into t (id,a) values (510,73);
+insert into t (id,a) values (510,74);
+insert into t (id,a) values (510,75);
+insert into t (id,a) values (510,76);
+insert into t (id,a) values (510,77);
+insert into t (id,a) values (510,78);
+insert into t (id,a) values (510,79);
+insert into t (id,a) values (510,80);
+insert into t (id,a) values (510,81);
+insert into t (id,a) values (510,82);
+insert into t (id,a) values (510,83);
+insert into t (id,a) values (510,84);
+insert into t (id,a) values (510,85);
+insert into t (id,a) values (510,86);
+insert into t (id,a) values (510,87);
+insert into t (id,a) values (510,88);
+insert into t (id,a) values (510,89);
+insert into t (id,a) values (510,90);
+insert into t (id,a) values (510,91);
+insert into t (id,a) values (510,92);
+insert into t (id,a) values (510,93);
+insert into t (id,a) values (510,94);
+insert into t (id,a) values (510,95);
+insert into t (id,a) values (510,96);
+insert into t (id,a) values (510,97);
+insert into t (id,a) values (510,98);
+insert into t (id,a) values (510,99);
+insert into t (id,a) values (511,0);
+insert into t (id,a) values (511,1);
+insert into t (id,a) values (511,2);
+insert into t (id,a) values (511,3);
+insert into t (id,a) values (511,4);
+insert into t (id,a) values (511,5);
+insert into t (id,a) values (511,6);
+insert into t (id,a) values (511,7);
+insert into t (id,a) values (511,8);
+insert into t (id,a) values (511,9);
+insert into t (id,a) values (511,10);
+insert into t (id,a) values (511,11);
+insert into t (id,a) values (511,12);
+insert into t (id,a) values (511,13);
+insert into t (id,a) values (511,14);
+insert into t (id,a) values (511,15);
+insert into t (id,a) values (511,16);
+insert into t (id,a) values (511,17);
+insert into t (id,a) values (511,18);
+insert into t (id,a) values (511,19);
+insert into t (id,a) values (511,20);
+insert into t (id,a) values (511,21);
+insert into t (id,a) values (511,22);
+insert into t (id,a) values (511,23);
+insert into t (id,a) values (511,24);
+insert into t (id,a) values (511,25);
+insert into t (id,a) values (511,26);
+insert into t (id,a) values (511,27);
+insert into t (id,a) values (511,28);
+insert into t (id,a) values (511,29);
+insert into t (id,a) values (511,30);
+insert into t (id,a) values (511,31);
+insert into t (id,a) values (511,32);
+insert into t (id,a) values (511,33);
+insert into t (id,a) values (511,34);
+insert into t (id,a) values (511,35);
+insert into t (id,a) values (511,36);
+insert into t (id,a) values (511,37);
+insert into t (id,a) values (511,38);
+insert into t (id,a) values (511,39);
+insert into t (id,a) values (511,40);
+insert into t (id,a) values (511,41);
+insert into t (id,a) values (511,42);
+insert into t (id,a) values (511,43);
+insert into t (id,a) values (511,44);
+insert into t (id,a) values (511,45);
+insert into t (id,a) values (511,46);
+insert into t (id,a) values (511,47);
+insert into t (id,a) values (511,48);
+insert into t (id,a) values (511,49);
+insert into t (id,a) values (511,50);
+insert into t (id,a) values (511,51);
+insert into t (id,a) values (511,52);
+insert into t (id,a) values (511,53);
+insert into t (id,a) values (511,54);
+insert into t (id,a) values (511,55);
+insert into t (id,a) values (511,56);
+insert into t (id,a) values (511,57);
+insert into t (id,a) values (511,58);
+insert into t (id,a) values (511,59);
+insert into t (id,a) values (511,60);
+insert into t (id,a) values (511,61);
+insert into t (id,a) values (511,62);
+insert into t (id,a) values (511,63);
+insert into t (id,a) values (511,64);
+insert into t (id,a) values (511,65);
+insert into t (id,a) values (511,66);
+insert into t (id,a) values (511,67);
+insert into t (id,a) values (511,68);
+insert into t (id,a) values (511,69);
+insert into t (id,a) values (511,70);
+insert into t (id,a) values (511,71);
+insert into t (id,a) values (511,72);
+insert into t (id,a) values (511,73);
+insert into t (id,a) values (511,74);
+insert into t (id,a) values (511,75);
+insert into t (id,a) values (511,76);
+insert into t (id,a) values (511,77);
+insert into t (id,a) values (511,78);
+insert into t (id,a) values (511,79);
+insert into t (id,a) values (511,80);
+insert into t (id,a) values (511,81);
+insert into t (id,a) values (511,82);
+insert into t (id,a) values (511,83);
+insert into t (id,a) values (511,84);
+insert into t (id,a) values (511,85);
+insert into t (id,a) values (511,86);
+insert into t (id,a) values (511,87);
+insert into t (id,a) values (511,88);
+insert into t (id,a) values (511,89);
+insert into t (id,a) values (511,90);
+insert into t (id,a) values (511,91);
+insert into t (id,a) values (511,92);
+insert into t (id,a) values (511,93);
+insert into t (id,a) values (511,94);
+insert into t (id,a) values (511,95);
+insert into t (id,a) values (511,96);
+insert into t (id,a) values (511,97);
+insert into t (id,a) values (511,98);
+insert into t (id,a) values (511,99);
+insert into t (id,a) values (512,0);
+insert into t (id,a) values (512,1);
+insert into t (id,a) values (512,2);
+insert into t (id,a) values (512,3);
+insert into t (id,a) values (512,4);
+insert into t (id,a) values (512,5);
+insert into t (id,a) values (512,6);
+insert into t (id,a) values (512,7);
+insert into t (id,a) values (512,8);
+insert into t (id,a) values (512,9);
+insert into t (id,a) values (512,10);
+insert into t (id,a) values (512,11);
+insert into t (id,a) values (512,12);
+insert into t (id,a) values (512,13);
+insert into t (id,a) values (512,14);
+insert into t (id,a) values (512,15);
+insert into t (id,a) values (512,16);
+insert into t (id,a) values (512,17);
+insert into t (id,a) values (512,18);
+insert into t (id,a) values (512,19);
+insert into t (id,a) values (512,20);
+insert into t (id,a) values (512,21);
+insert into t (id,a) values (512,22);
+insert into t (id,a) values (512,23);
+insert into t (id,a) values (512,24);
+insert into t (id,a) values (512,25);
+insert into t (id,a) values (512,26);
+insert into t (id,a) values (512,27);
+insert into t (id,a) values (512,28);
+insert into t (id,a) values (512,29);
+insert into t (id,a) values (512,30);
+insert into t (id,a) values (512,31);
+insert into t (id,a) values (512,32);
+insert into t (id,a) values (512,33);
+insert into t (id,a) values (512,34);
+insert into t (id,a) values (512,35);
+insert into t (id,a) values (512,36);
+insert into t (id,a) values (512,37);
+insert into t (id,a) values (512,38);
+insert into t (id,a) values (512,39);
+insert into t (id,a) values (512,40);
+insert into t (id,a) values (512,41);
+insert into t (id,a) values (512,42);
+insert into t (id,a) values (512,43);
+insert into t (id,a) values (512,44);
+insert into t (id,a) values (512,45);
+insert into t (id,a) values (512,46);
+insert into t (id,a) values (512,47);
+insert into t (id,a) values (512,48);
+insert into t (id,a) values (512,49);
+insert into t (id,a) values (512,50);
+insert into t (id,a) values (512,51);
+insert into t (id,a) values (512,52);
+insert into t (id,a) values (512,53);
+insert into t (id,a) values (512,54);
+insert into t (id,a) values (512,55);
+insert into t (id,a) values (512,56);
+insert into t (id,a) values (512,57);
+insert into t (id,a) values (512,58);
+insert into t (id,a) values (512,59);
+insert into t (id,a) values (512,60);
+insert into t (id,a) values (512,61);
+insert into t (id,a) values (512,62);
+insert into t (id,a) values (512,63);
+insert into t (id,a) values (512,64);
+insert into t (id,a) values (512,65);
+insert into t (id,a) values (512,66);
+insert into t (id,a) values (512,67);
+insert into t (id,a) values (512,68);
+insert into t (id,a) values (512,69);
+insert into t (id,a) values (512,70);
+insert into t (id,a) values (512,71);
+insert into t (id,a) values (512,72);
+insert into t (id,a) values (512,73);
+insert into t (id,a) values (512,74);
+insert into t (id,a) values (512,75);
+insert into t (id,a) values (512,76);
+insert into t (id,a) values (512,77);
+insert into t (id,a) values (512,78);
+insert into t (id,a) values (512,79);
+insert into t (id,a) values (512,80);
+insert into t (id,a) values (512,81);
+insert into t (id,a) values (512,82);
+insert into t (id,a) values (512,83);
+insert into t (id,a) values (512,84);
+insert into t (id,a) values (512,85);
+insert into t (id,a) values (512,86);
+insert into t (id,a) values (512,87);
+insert into t (id,a) values (512,88);
+insert into t (id,a) values (512,89);
+insert into t (id,a) values (512,90);
+insert into t (id,a) values (512,91);
+insert into t (id,a) values (512,92);
+insert into t (id,a) values (512,93);
+insert into t (id,a) values (512,94);
+insert into t (id,a) values (512,95);
+insert into t (id,a) values (512,96);
+insert into t (id,a) values (512,97);
+insert into t (id,a) values (512,98);
+insert into t (id,a) values (512,99);
+insert into t (id,a) values (513,0);
+insert into t (id,a) values (513,1);
+insert into t (id,a) values (513,2);
+insert into t (id,a) values (513,3);
+insert into t (id,a) values (513,4);
+insert into t (id,a) values (513,5);
+insert into t (id,a) values (513,6);
+insert into t (id,a) values (513,7);
+insert into t (id,a) values (513,8);
+insert into t (id,a) values (513,9);
+insert into t (id,a) values (513,10);
+insert into t (id,a) values (513,11);
+insert into t (id,a) values (513,12);
+insert into t (id,a) values (513,13);
+insert into t (id,a) values (513,14);
+insert into t (id,a) values (513,15);
+insert into t (id,a) values (513,16);
+insert into t (id,a) values (513,17);
+insert into t (id,a) values (513,18);
+insert into t (id,a) values (513,19);
+insert into t (id,a) values (513,20);
+insert into t (id,a) values (513,21);
+insert into t (id,a) values (513,22);
+insert into t (id,a) values (513,23);
+insert into t (id,a) values (513,24);
+insert into t (id,a) values (513,25);
+insert into t (id,a) values (513,26);
+insert into t (id,a) values (513,27);
+insert into t (id,a) values (513,28);
+insert into t (id,a) values (513,29);
+insert into t (id,a) values (513,30);
+insert into t (id,a) values (513,31);
+insert into t (id,a) values (513,32);
+insert into t (id,a) values (513,33);
+insert into t (id,a) values (513,34);
+insert into t (id,a) values (513,35);
+insert into t (id,a) values (513,36);
+insert into t (id,a) values (513,37);
+insert into t (id,a) values (513,38);
+insert into t (id,a) values (513,39);
+insert into t (id,a) values (513,40);
+insert into t (id,a) values (513,41);
+insert into t (id,a) values (513,42);
+insert into t (id,a) values (513,43);
+insert into t (id,a) values (513,44);
+insert into t (id,a) values (513,45);
+insert into t (id,a) values (513,46);
+insert into t (id,a) values (513,47);
+insert into t (id,a) values (513,48);
+insert into t (id,a) values (513,49);
+insert into t (id,a) values (513,50);
+insert into t (id,a) values (513,51);
+insert into t (id,a) values (513,52);
+insert into t (id,a) values (513,53);
+insert into t (id,a) values (513,54);
+insert into t (id,a) values (513,55);
+insert into t (id,a) values (513,56);
+insert into t (id,a) values (513,57);
+insert into t (id,a) values (513,58);
+insert into t (id,a) values (513,59);
+insert into t (id,a) values (513,60);
+insert into t (id,a) values (513,61);
+insert into t (id,a) values (513,62);
+insert into t (id,a) values (513,63);
+insert into t (id,a) values (513,64);
+insert into t (id,a) values (513,65);
+insert into t (id,a) values (513,66);
+insert into t (id,a) values (513,67);
+insert into t (id,a) values (513,68);
+insert into t (id,a) values (513,69);
+insert into t (id,a) values (513,70);
+insert into t (id,a) values (513,71);
+insert into t (id,a) values (513,72);
+insert into t (id,a) values (513,73);
+insert into t (id,a) values (513,74);
+insert into t (id,a) values (513,75);
+insert into t (id,a) values (513,76);
+insert into t (id,a) values (513,77);
+insert into t (id,a) values (513,78);
+insert into t (id,a) values (513,79);
+insert into t (id,a) values (513,80);
+insert into t (id,a) values (513,81);
+insert into t (id,a) values (513,82);
+insert into t (id,a) values (513,83);
+insert into t (id,a) values (513,84);
+insert into t (id,a) values (513,85);
+insert into t (id,a) values (513,86);
+insert into t (id,a) values (513,87);
+insert into t (id,a) values (513,88);
+insert into t (id,a) values (513,89);
+insert into t (id,a) values (513,90);
+insert into t (id,a) values (513,91);
+insert into t (id,a) values (513,92);
+insert into t (id,a) values (513,93);
+insert into t (id,a) values (513,94);
+insert into t (id,a) values (513,95);
+insert into t (id,a) values (513,96);
+insert into t (id,a) values (513,97);
+insert into t (id,a) values (513,98);
+insert into t (id,a) values (513,99);
+insert into t (id,a) values (514,0);
+insert into t (id,a) values (514,1);
+insert into t (id,a) values (514,2);
+insert into t (id,a) values (514,3);
+insert into t (id,a) values (514,4);
+insert into t (id,a) values (514,5);
+insert into t (id,a) values (514,6);
+insert into t (id,a) values (514,7);
+insert into t (id,a) values (514,8);
+insert into t (id,a) values (514,9);
+insert into t (id,a) values (514,10);
+insert into t (id,a) values (514,11);
+insert into t (id,a) values (514,12);
+insert into t (id,a) values (514,13);
+insert into t (id,a) values (514,14);
+insert into t (id,a) values (514,15);
+insert into t (id,a) values (514,16);
+insert into t (id,a) values (514,17);
+insert into t (id,a) values (514,18);
+insert into t (id,a) values (514,19);
+insert into t (id,a) values (514,20);
+insert into t (id,a) values (514,21);
+insert into t (id,a) values (514,22);
+insert into t (id,a) values (514,23);
+insert into t (id,a) values (514,24);
+insert into t (id,a) values (514,25);
+insert into t (id,a) values (514,26);
+insert into t (id,a) values (514,27);
+insert into t (id,a) values (514,28);
+insert into t (id,a) values (514,29);
+insert into t (id,a) values (514,30);
+insert into t (id,a) values (514,31);
+insert into t (id,a) values (514,32);
+insert into t (id,a) values (514,33);
+insert into t (id,a) values (514,34);
+insert into t (id,a) values (514,35);
+insert into t (id,a) values (514,36);
+insert into t (id,a) values (514,37);
+insert into t (id,a) values (514,38);
+insert into t (id,a) values (514,39);
+insert into t (id,a) values (514,40);
+insert into t (id,a) values (514,41);
+insert into t (id,a) values (514,42);
+insert into t (id,a) values (514,43);
+insert into t (id,a) values (514,44);
+insert into t (id,a) values (514,45);
+insert into t (id,a) values (514,46);
+insert into t (id,a) values (514,47);
+insert into t (id,a) values (514,48);
+insert into t (id,a) values (514,49);
+insert into t (id,a) values (514,50);
+insert into t (id,a) values (514,51);
+insert into t (id,a) values (514,52);
+insert into t (id,a) values (514,53);
+insert into t (id,a) values (514,54);
+insert into t (id,a) values (514,55);
+insert into t (id,a) values (514,56);
+insert into t (id,a) values (514,57);
+insert into t (id,a) values (514,58);
+insert into t (id,a) values (514,59);
+insert into t (id,a) values (514,60);
+insert into t (id,a) values (514,61);
+insert into t (id,a) values (514,62);
+insert into t (id,a) values (514,63);
+insert into t (id,a) values (514,64);
+insert into t (id,a) values (514,65);
+insert into t (id,a) values (514,66);
+insert into t (id,a) values (514,67);
+insert into t (id,a) values (514,68);
+insert into t (id,a) values (514,69);
+insert into t (id,a) values (514,70);
+insert into t (id,a) values (514,71);
+insert into t (id,a) values (514,72);
+insert into t (id,a) values (514,73);
+insert into t (id,a) values (514,74);
+insert into t (id,a) values (514,75);
+insert into t (id,a) values (514,76);
+insert into t (id,a) values (514,77);
+insert into t (id,a) values (514,78);
+insert into t (id,a) values (514,79);
+insert into t (id,a) values (514,80);
+insert into t (id,a) values (514,81);
+insert into t (id,a) values (514,82);
+insert into t (id,a) values (514,83);
+insert into t (id,a) values (514,84);
+insert into t (id,a) values (514,85);
+insert into t (id,a) values (514,86);
+insert into t (id,a) values (514,87);
+insert into t (id,a) values (514,88);
+insert into t (id,a) values (514,89);
+insert into t (id,a) values (514,90);
+insert into t (id,a) values (514,91);
+insert into t (id,a) values (514,92);
+insert into t (id,a) values (514,93);
+insert into t (id,a) values (514,94);
+insert into t (id,a) values (514,95);
+insert into t (id,a) values (514,96);
+insert into t (id,a) values (514,97);
+insert into t (id,a) values (514,98);
+insert into t (id,a) values (514,99);
+insert into t (id,a) values (515,0);
+insert into t (id,a) values (515,1);
+insert into t (id,a) values (515,2);
+insert into t (id,a) values (515,3);
+insert into t (id,a) values (515,4);
+insert into t (id,a) values (515,5);
+insert into t (id,a) values (515,6);
+insert into t (id,a) values (515,7);
+insert into t (id,a) values (515,8);
+insert into t (id,a) values (515,9);
+insert into t (id,a) values (515,10);
+insert into t (id,a) values (515,11);
+insert into t (id,a) values (515,12);
+insert into t (id,a) values (515,13);
+insert into t (id,a) values (515,14);
+insert into t (id,a) values (515,15);
+insert into t (id,a) values (515,16);
+insert into t (id,a) values (515,17);
+insert into t (id,a) values (515,18);
+insert into t (id,a) values (515,19);
+insert into t (id,a) values (515,20);
+insert into t (id,a) values (515,21);
+insert into t (id,a) values (515,22);
+insert into t (id,a) values (515,23);
+insert into t (id,a) values (515,24);
+insert into t (id,a) values (515,25);
+insert into t (id,a) values (515,26);
+insert into t (id,a) values (515,27);
+insert into t (id,a) values (515,28);
+insert into t (id,a) values (515,29);
+insert into t (id,a) values (515,30);
+insert into t (id,a) values (515,31);
+insert into t (id,a) values (515,32);
+insert into t (id,a) values (515,33);
+insert into t (id,a) values (515,34);
+insert into t (id,a) values (515,35);
+insert into t (id,a) values (515,36);
+insert into t (id,a) values (515,37);
+insert into t (id,a) values (515,38);
+insert into t (id,a) values (515,39);
+insert into t (id,a) values (515,40);
+insert into t (id,a) values (515,41);
+insert into t (id,a) values (515,42);
+insert into t (id,a) values (515,43);
+insert into t (id,a) values (515,44);
+insert into t (id,a) values (515,45);
+insert into t (id,a) values (515,46);
+insert into t (id,a) values (515,47);
+insert into t (id,a) values (515,48);
+insert into t (id,a) values (515,49);
+insert into t (id,a) values (515,50);
+insert into t (id,a) values (515,51);
+insert into t (id,a) values (515,52);
+insert into t (id,a) values (515,53);
+insert into t (id,a) values (515,54);
+insert into t (id,a) values (515,55);
+insert into t (id,a) values (515,56);
+insert into t (id,a) values (515,57);
+insert into t (id,a) values (515,58);
+insert into t (id,a) values (515,59);
+insert into t (id,a) values (515,60);
+insert into t (id,a) values (515,61);
+insert into t (id,a) values (515,62);
+insert into t (id,a) values (515,63);
+insert into t (id,a) values (515,64);
+insert into t (id,a) values (515,65);
+insert into t (id,a) values (515,66);
+insert into t (id,a) values (515,67);
+insert into t (id,a) values (515,68);
+insert into t (id,a) values (515,69);
+insert into t (id,a) values (515,70);
+insert into t (id,a) values (515,71);
+insert into t (id,a) values (515,72);
+insert into t (id,a) values (515,73);
+insert into t (id,a) values (515,74);
+insert into t (id,a) values (515,75);
+insert into t (id,a) values (515,76);
+insert into t (id,a) values (515,77);
+insert into t (id,a) values (515,78);
+insert into t (id,a) values (515,79);
+insert into t (id,a) values (515,80);
+insert into t (id,a) values (515,81);
+insert into t (id,a) values (515,82);
+insert into t (id,a) values (515,83);
+insert into t (id,a) values (515,84);
+insert into t (id,a) values (515,85);
+insert into t (id,a) values (515,86);
+insert into t (id,a) values (515,87);
+insert into t (id,a) values (515,88);
+insert into t (id,a) values (515,89);
+insert into t (id,a) values (515,90);
+insert into t (id,a) values (515,91);
+insert into t (id,a) values (515,92);
+insert into t (id,a) values (515,93);
+insert into t (id,a) values (515,94);
+insert into t (id,a) values (515,95);
+insert into t (id,a) values (515,96);
+insert into t (id,a) values (515,97);
+insert into t (id,a) values (515,98);
+insert into t (id,a) values (515,99);
+insert into t (id,a) values (516,0);
+insert into t (id,a) values (516,1);
+insert into t (id,a) values (516,2);
+insert into t (id,a) values (516,3);
+insert into t (id,a) values (516,4);
+insert into t (id,a) values (516,5);
+insert into t (id,a) values (516,6);
+insert into t (id,a) values (516,7);
+insert into t (id,a) values (516,8);
+insert into t (id,a) values (516,9);
+insert into t (id,a) values (516,10);
+insert into t (id,a) values (516,11);
+insert into t (id,a) values (516,12);
+insert into t (id,a) values (516,13);
+insert into t (id,a) values (516,14);
+insert into t (id,a) values (516,15);
+insert into t (id,a) values (516,16);
+insert into t (id,a) values (516,17);
+insert into t (id,a) values (516,18);
+insert into t (id,a) values (516,19);
+insert into t (id,a) values (516,20);
+insert into t (id,a) values (516,21);
+insert into t (id,a) values (516,22);
+insert into t (id,a) values (516,23);
+insert into t (id,a) values (516,24);
+insert into t (id,a) values (516,25);
+insert into t (id,a) values (516,26);
+insert into t (id,a) values (516,27);
+insert into t (id,a) values (516,28);
+insert into t (id,a) values (516,29);
+insert into t (id,a) values (516,30);
+insert into t (id,a) values (516,31);
+insert into t (id,a) values (516,32);
+insert into t (id,a) values (516,33);
+insert into t (id,a) values (516,34);
+insert into t (id,a) values (516,35);
+insert into t (id,a) values (516,36);
+insert into t (id,a) values (516,37);
+insert into t (id,a) values (516,38);
+insert into t (id,a) values (516,39);
+insert into t (id,a) values (516,40);
+insert into t (id,a) values (516,41);
+insert into t (id,a) values (516,42);
+insert into t (id,a) values (516,43);
+insert into t (id,a) values (516,44);
+insert into t (id,a) values (516,45);
+insert into t (id,a) values (516,46);
+insert into t (id,a) values (516,47);
+insert into t (id,a) values (516,48);
+insert into t (id,a) values (516,49);
+insert into t (id,a) values (516,50);
+insert into t (id,a) values (516,51);
+insert into t (id,a) values (516,52);
+insert into t (id,a) values (516,53);
+insert into t (id,a) values (516,54);
+insert into t (id,a) values (516,55);
+insert into t (id,a) values (516,56);
+insert into t (id,a) values (516,57);
+insert into t (id,a) values (516,58);
+insert into t (id,a) values (516,59);
+insert into t (id,a) values (516,60);
+insert into t (id,a) values (516,61);
+insert into t (id,a) values (516,62);
+insert into t (id,a) values (516,63);
+insert into t (id,a) values (516,64);
+insert into t (id,a) values (516,65);
+insert into t (id,a) values (516,66);
+insert into t (id,a) values (516,67);
+insert into t (id,a) values (516,68);
+insert into t (id,a) values (516,69);
+insert into t (id,a) values (516,70);
+insert into t (id,a) values (516,71);
+insert into t (id,a) values (516,72);
+insert into t (id,a) values (516,73);
+insert into t (id,a) values (516,74);
+insert into t (id,a) values (516,75);
+insert into t (id,a) values (516,76);
+insert into t (id,a) values (516,77);
+insert into t (id,a) values (516,78);
+insert into t (id,a) values (516,79);
+insert into t (id,a) values (516,80);
+insert into t (id,a) values (516,81);
+insert into t (id,a) values (516,82);
+insert into t (id,a) values (516,83);
+insert into t (id,a) values (516,84);
+insert into t (id,a) values (516,85);
+insert into t (id,a) values (516,86);
+insert into t (id,a) values (516,87);
+insert into t (id,a) values (516,88);
+insert into t (id,a) values (516,89);
+insert into t (id,a) values (516,90);
+insert into t (id,a) values (516,91);
+insert into t (id,a) values (516,92);
+insert into t (id,a) values (516,93);
+insert into t (id,a) values (516,94);
+insert into t (id,a) values (516,95);
+insert into t (id,a) values (516,96);
+insert into t (id,a) values (516,97);
+insert into t (id,a) values (516,98);
+insert into t (id,a) values (516,99);
+insert into t (id,a) values (517,0);
+insert into t (id,a) values (517,1);
+insert into t (id,a) values (517,2);
+insert into t (id,a) values (517,3);
+insert into t (id,a) values (517,4);
+insert into t (id,a) values (517,5);
+insert into t (id,a) values (517,6);
+insert into t (id,a) values (517,7);
+insert into t (id,a) values (517,8);
+insert into t (id,a) values (517,9);
+insert into t (id,a) values (517,10);
+insert into t (id,a) values (517,11);
+insert into t (id,a) values (517,12);
+insert into t (id,a) values (517,13);
+insert into t (id,a) values (517,14);
+insert into t (id,a) values (517,15);
+insert into t (id,a) values (517,16);
+insert into t (id,a) values (517,17);
+insert into t (id,a) values (517,18);
+insert into t (id,a) values (517,19);
+insert into t (id,a) values (517,20);
+insert into t (id,a) values (517,21);
+insert into t (id,a) values (517,22);
+insert into t (id,a) values (517,23);
+insert into t (id,a) values (517,24);
+insert into t (id,a) values (517,25);
+insert into t (id,a) values (517,26);
+insert into t (id,a) values (517,27);
+insert into t (id,a) values (517,28);
+insert into t (id,a) values (517,29);
+insert into t (id,a) values (517,30);
+insert into t (id,a) values (517,31);
+insert into t (id,a) values (517,32);
+insert into t (id,a) values (517,33);
+insert into t (id,a) values (517,34);
+insert into t (id,a) values (517,35);
+insert into t (id,a) values (517,36);
+insert into t (id,a) values (517,37);
+insert into t (id,a) values (517,38);
+insert into t (id,a) values (517,39);
+insert into t (id,a) values (517,40);
+insert into t (id,a) values (517,41);
+insert into t (id,a) values (517,42);
+insert into t (id,a) values (517,43);
+insert into t (id,a) values (517,44);
+insert into t (id,a) values (517,45);
+insert into t (id,a) values (517,46);
+insert into t (id,a) values (517,47);
+insert into t (id,a) values (517,48);
+insert into t (id,a) values (517,49);
+insert into t (id,a) values (517,50);
+insert into t (id,a) values (517,51);
+insert into t (id,a) values (517,52);
+insert into t (id,a) values (517,53);
+insert into t (id,a) values (517,54);
+insert into t (id,a) values (517,55);
+insert into t (id,a) values (517,56);
+insert into t (id,a) values (517,57);
+insert into t (id,a) values (517,58);
+insert into t (id,a) values (517,59);
+insert into t (id,a) values (517,60);
+insert into t (id,a) values (517,61);
+insert into t (id,a) values (517,62);
+insert into t (id,a) values (517,63);
+insert into t (id,a) values (517,64);
+insert into t (id,a) values (517,65);
+insert into t (id,a) values (517,66);
+insert into t (id,a) values (517,67);
+insert into t (id,a) values (517,68);
+insert into t (id,a) values (517,69);
+insert into t (id,a) values (517,70);
+insert into t (id,a) values (517,71);
+insert into t (id,a) values (517,72);
+insert into t (id,a) values (517,73);
+insert into t (id,a) values (517,74);
+insert into t (id,a) values (517,75);
+insert into t (id,a) values (517,76);
+insert into t (id,a) values (517,77);
+insert into t (id,a) values (517,78);
+insert into t (id,a) values (517,79);
+insert into t (id,a) values (517,80);
+insert into t (id,a) values (517,81);
+insert into t (id,a) values (517,82);
+insert into t (id,a) values (517,83);
+insert into t (id,a) values (517,84);
+insert into t (id,a) values (517,85);
+insert into t (id,a) values (517,86);
+insert into t (id,a) values (517,87);
+insert into t (id,a) values (517,88);
+insert into t (id,a) values (517,89);
+insert into t (id,a) values (517,90);
+insert into t (id,a) values (517,91);
+insert into t (id,a) values (517,92);
+insert into t (id,a) values (517,93);
+insert into t (id,a) values (517,94);
+insert into t (id,a) values (517,95);
+insert into t (id,a) values (517,96);
+insert into t (id,a) values (517,97);
+insert into t (id,a) values (517,98);
+insert into t (id,a) values (517,99);
+insert into t (id,a) values (518,0);
+insert into t (id,a) values (518,1);
+insert into t (id,a) values (518,2);
+insert into t (id,a) values (518,3);
+insert into t (id,a) values (518,4);
+insert into t (id,a) values (518,5);
+insert into t (id,a) values (518,6);
+insert into t (id,a) values (518,7);
+insert into t (id,a) values (518,8);
+insert into t (id,a) values (518,9);
+insert into t (id,a) values (518,10);
+insert into t (id,a) values (518,11);
+insert into t (id,a) values (518,12);
+insert into t (id,a) values (518,13);
+insert into t (id,a) values (518,14);
+insert into t (id,a) values (518,15);
+insert into t (id,a) values (518,16);
+insert into t (id,a) values (518,17);
+insert into t (id,a) values (518,18);
+insert into t (id,a) values (518,19);
+insert into t (id,a) values (518,20);
+insert into t (id,a) values (518,21);
+insert into t (id,a) values (518,22);
+insert into t (id,a) values (518,23);
+insert into t (id,a) values (518,24);
+insert into t (id,a) values (518,25);
+insert into t (id,a) values (518,26);
+insert into t (id,a) values (518,27);
+insert into t (id,a) values (518,28);
+insert into t (id,a) values (518,29);
+insert into t (id,a) values (518,30);
+insert into t (id,a) values (518,31);
+insert into t (id,a) values (518,32);
+insert into t (id,a) values (518,33);
+insert into t (id,a) values (518,34);
+insert into t (id,a) values (518,35);
+insert into t (id,a) values (518,36);
+insert into t (id,a) values (518,37);
+insert into t (id,a) values (518,38);
+insert into t (id,a) values (518,39);
+insert into t (id,a) values (518,40);
+insert into t (id,a) values (518,41);
+insert into t (id,a) values (518,42);
+insert into t (id,a) values (518,43);
+insert into t (id,a) values (518,44);
+insert into t (id,a) values (518,45);
+insert into t (id,a) values (518,46);
+insert into t (id,a) values (518,47);
+insert into t (id,a) values (518,48);
+insert into t (id,a) values (518,49);
+insert into t (id,a) values (518,50);
+insert into t (id,a) values (518,51);
+insert into t (id,a) values (518,52);
+insert into t (id,a) values (518,53);
+insert into t (id,a) values (518,54);
+insert into t (id,a) values (518,55);
+insert into t (id,a) values (518,56);
+insert into t (id,a) values (518,57);
+insert into t (id,a) values (518,58);
+insert into t (id,a) values (518,59);
+insert into t (id,a) values (518,60);
+insert into t (id,a) values (518,61);
+insert into t (id,a) values (518,62);
+insert into t (id,a) values (518,63);
+insert into t (id,a) values (518,64);
+insert into t (id,a) values (518,65);
+insert into t (id,a) values (518,66);
+insert into t (id,a) values (518,67);
+insert into t (id,a) values (518,68);
+insert into t (id,a) values (518,69);
+insert into t (id,a) values (518,70);
+insert into t (id,a) values (518,71);
+insert into t (id,a) values (518,72);
+insert into t (id,a) values (518,73);
+insert into t (id,a) values (518,74);
+insert into t (id,a) values (518,75);
+insert into t (id,a) values (518,76);
+insert into t (id,a) values (518,77);
+insert into t (id,a) values (518,78);
+insert into t (id,a) values (518,79);
+insert into t (id,a) values (518,80);
+insert into t (id,a) values (518,81);
+insert into t (id,a) values (518,82);
+insert into t (id,a) values (518,83);
+insert into t (id,a) values (518,84);
+insert into t (id,a) values (518,85);
+insert into t (id,a) values (518,86);
+insert into t (id,a) values (518,87);
+insert into t (id,a) values (518,88);
+insert into t (id,a) values (518,89);
+insert into t (id,a) values (518,90);
+insert into t (id,a) values (518,91);
+insert into t (id,a) values (518,92);
+insert into t (id,a) values (518,93);
+insert into t (id,a) values (518,94);
+insert into t (id,a) values (518,95);
+insert into t (id,a) values (518,96);
+insert into t (id,a) values (518,97);
+insert into t (id,a) values (518,98);
+insert into t (id,a) values (518,99);
+insert into t (id,a) values (519,0);
+insert into t (id,a) values (519,1);
+insert into t (id,a) values (519,2);
+insert into t (id,a) values (519,3);
+insert into t (id,a) values (519,4);
+insert into t (id,a) values (519,5);
+insert into t (id,a) values (519,6);
+insert into t (id,a) values (519,7);
+insert into t (id,a) values (519,8);
+insert into t (id,a) values (519,9);
+insert into t (id,a) values (519,10);
+insert into t (id,a) values (519,11);
+insert into t (id,a) values (519,12);
+insert into t (id,a) values (519,13);
+insert into t (id,a) values (519,14);
+insert into t (id,a) values (519,15);
+insert into t (id,a) values (519,16);
+insert into t (id,a) values (519,17);
+insert into t (id,a) values (519,18);
+insert into t (id,a) values (519,19);
+insert into t (id,a) values (519,20);
+insert into t (id,a) values (519,21);
+insert into t (id,a) values (519,22);
+insert into t (id,a) values (519,23);
+insert into t (id,a) values (519,24);
+insert into t (id,a) values (519,25);
+insert into t (id,a) values (519,26);
+insert into t (id,a) values (519,27);
+insert into t (id,a) values (519,28);
+insert into t (id,a) values (519,29);
+insert into t (id,a) values (519,30);
+insert into t (id,a) values (519,31);
+insert into t (id,a) values (519,32);
+insert into t (id,a) values (519,33);
+insert into t (id,a) values (519,34);
+insert into t (id,a) values (519,35);
+insert into t (id,a) values (519,36);
+insert into t (id,a) values (519,37);
+insert into t (id,a) values (519,38);
+insert into t (id,a) values (519,39);
+insert into t (id,a) values (519,40);
+insert into t (id,a) values (519,41);
+insert into t (id,a) values (519,42);
+insert into t (id,a) values (519,43);
+insert into t (id,a) values (519,44);
+insert into t (id,a) values (519,45);
+insert into t (id,a) values (519,46);
+insert into t (id,a) values (519,47);
+insert into t (id,a) values (519,48);
+insert into t (id,a) values (519,49);
+insert into t (id,a) values (519,50);
+insert into t (id,a) values (519,51);
+insert into t (id,a) values (519,52);
+insert into t (id,a) values (519,53);
+insert into t (id,a) values (519,54);
+insert into t (id,a) values (519,55);
+insert into t (id,a) values (519,56);
+insert into t (id,a) values (519,57);
+insert into t (id,a) values (519,58);
+insert into t (id,a) values (519,59);
+insert into t (id,a) values (519,60);
+insert into t (id,a) values (519,61);
+insert into t (id,a) values (519,62);
+insert into t (id,a) values (519,63);
+insert into t (id,a) values (519,64);
+insert into t (id,a) values (519,65);
+insert into t (id,a) values (519,66);
+insert into t (id,a) values (519,67);
+insert into t (id,a) values (519,68);
+insert into t (id,a) values (519,69);
+insert into t (id,a) values (519,70);
+insert into t (id,a) values (519,71);
+insert into t (id,a) values (519,72);
+insert into t (id,a) values (519,73);
+insert into t (id,a) values (519,74);
+insert into t (id,a) values (519,75);
+insert into t (id,a) values (519,76);
+insert into t (id,a) values (519,77);
+insert into t (id,a) values (519,78);
+insert into t (id,a) values (519,79);
+insert into t (id,a) values (519,80);
+insert into t (id,a) values (519,81);
+insert into t (id,a) values (519,82);
+insert into t (id,a) values (519,83);
+insert into t (id,a) values (519,84);
+insert into t (id,a) values (519,85);
+insert into t (id,a) values (519,86);
+insert into t (id,a) values (519,87);
+insert into t (id,a) values (519,88);
+insert into t (id,a) values (519,89);
+insert into t (id,a) values (519,90);
+insert into t (id,a) values (519,91);
+insert into t (id,a) values (519,92);
+insert into t (id,a) values (519,93);
+insert into t (id,a) values (519,94);
+insert into t (id,a) values (519,95);
+insert into t (id,a) values (519,96);
+insert into t (id,a) values (519,97);
+insert into t (id,a) values (519,98);
+insert into t (id,a) values (519,99);
+insert into t (id,a) values (520,0);
+insert into t (id,a) values (520,1);
+insert into t (id,a) values (520,2);
+insert into t (id,a) values (520,3);
+insert into t (id,a) values (520,4);
+insert into t (id,a) values (520,5);
+insert into t (id,a) values (520,6);
+insert into t (id,a) values (520,7);
+insert into t (id,a) values (520,8);
+insert into t (id,a) values (520,9);
+insert into t (id,a) values (520,10);
+insert into t (id,a) values (520,11);
+insert into t (id,a) values (520,12);
+insert into t (id,a) values (520,13);
+insert into t (id,a) values (520,14);
+insert into t (id,a) values (520,15);
+insert into t (id,a) values (520,16);
+insert into t (id,a) values (520,17);
+insert into t (id,a) values (520,18);
+insert into t (id,a) values (520,19);
+insert into t (id,a) values (520,20);
+insert into t (id,a) values (520,21);
+insert into t (id,a) values (520,22);
+insert into t (id,a) values (520,23);
+insert into t (id,a) values (520,24);
+insert into t (id,a) values (520,25);
+insert into t (id,a) values (520,26);
+insert into t (id,a) values (520,27);
+insert into t (id,a) values (520,28);
+insert into t (id,a) values (520,29);
+insert into t (id,a) values (520,30);
+insert into t (id,a) values (520,31);
+insert into t (id,a) values (520,32);
+insert into t (id,a) values (520,33);
+insert into t (id,a) values (520,34);
+insert into t (id,a) values (520,35);
+insert into t (id,a) values (520,36);
+insert into t (id,a) values (520,37);
+insert into t (id,a) values (520,38);
+insert into t (id,a) values (520,39);
+insert into t (id,a) values (520,40);
+insert into t (id,a) values (520,41);
+insert into t (id,a) values (520,42);
+insert into t (id,a) values (520,43);
+insert into t (id,a) values (520,44);
+insert into t (id,a) values (520,45);
+insert into t (id,a) values (520,46);
+insert into t (id,a) values (520,47);
+insert into t (id,a) values (520,48);
+insert into t (id,a) values (520,49);
+insert into t (id,a) values (520,50);
+insert into t (id,a) values (520,51);
+insert into t (id,a) values (520,52);
+insert into t (id,a) values (520,53);
+insert into t (id,a) values (520,54);
+insert into t (id,a) values (520,55);
+insert into t (id,a) values (520,56);
+insert into t (id,a) values (520,57);
+insert into t (id,a) values (520,58);
+insert into t (id,a) values (520,59);
+insert into t (id,a) values (520,60);
+insert into t (id,a) values (520,61);
+insert into t (id,a) values (520,62);
+insert into t (id,a) values (520,63);
+insert into t (id,a) values (520,64);
+insert into t (id,a) values (520,65);
+insert into t (id,a) values (520,66);
+insert into t (id,a) values (520,67);
+insert into t (id,a) values (520,68);
+insert into t (id,a) values (520,69);
+insert into t (id,a) values (520,70);
+insert into t (id,a) values (520,71);
+insert into t (id,a) values (520,72);
+insert into t (id,a) values (520,73);
+insert into t (id,a) values (520,74);
+insert into t (id,a) values (520,75);
+insert into t (id,a) values (520,76);
+insert into t (id,a) values (520,77);
+insert into t (id,a) values (520,78);
+insert into t (id,a) values (520,79);
+insert into t (id,a) values (520,80);
+insert into t (id,a) values (520,81);
+insert into t (id,a) values (520,82);
+insert into t (id,a) values (520,83);
+insert into t (id,a) values (520,84);
+insert into t (id,a) values (520,85);
+insert into t (id,a) values (520,86);
+insert into t (id,a) values (520,87);
+insert into t (id,a) values (520,88);
+insert into t (id,a) values (520,89);
+insert into t (id,a) values (520,90);
+insert into t (id,a) values (520,91);
+insert into t (id,a) values (520,92);
+insert into t (id,a) values (520,93);
+insert into t (id,a) values (520,94);
+insert into t (id,a) values (520,95);
+insert into t (id,a) values (520,96);
+insert into t (id,a) values (520,97);
+insert into t (id,a) values (520,98);
+insert into t (id,a) values (520,99);
+insert into t (id,a) values (521,0);
+insert into t (id,a) values (521,1);
+insert into t (id,a) values (521,2);
+insert into t (id,a) values (521,3);
+insert into t (id,a) values (521,4);
+insert into t (id,a) values (521,5);
+insert into t (id,a) values (521,6);
+insert into t (id,a) values (521,7);
+insert into t (id,a) values (521,8);
+insert into t (id,a) values (521,9);
+insert into t (id,a) values (521,10);
+insert into t (id,a) values (521,11);
+insert into t (id,a) values (521,12);
+insert into t (id,a) values (521,13);
+insert into t (id,a) values (521,14);
+insert into t (id,a) values (521,15);
+insert into t (id,a) values (521,16);
+insert into t (id,a) values (521,17);
+insert into t (id,a) values (521,18);
+insert into t (id,a) values (521,19);
+insert into t (id,a) values (521,20);
+insert into t (id,a) values (521,21);
+insert into t (id,a) values (521,22);
+insert into t (id,a) values (521,23);
+insert into t (id,a) values (521,24);
+insert into t (id,a) values (521,25);
+insert into t (id,a) values (521,26);
+insert into t (id,a) values (521,27);
+insert into t (id,a) values (521,28);
+insert into t (id,a) values (521,29);
+insert into t (id,a) values (521,30);
+insert into t (id,a) values (521,31);
+insert into t (id,a) values (521,32);
+insert into t (id,a) values (521,33);
+insert into t (id,a) values (521,34);
+insert into t (id,a) values (521,35);
+insert into t (id,a) values (521,36);
+insert into t (id,a) values (521,37);
+insert into t (id,a) values (521,38);
+insert into t (id,a) values (521,39);
+insert into t (id,a) values (521,40);
+insert into t (id,a) values (521,41);
+insert into t (id,a) values (521,42);
+insert into t (id,a) values (521,43);
+insert into t (id,a) values (521,44);
+insert into t (id,a) values (521,45);
+insert into t (id,a) values (521,46);
+insert into t (id,a) values (521,47);
+insert into t (id,a) values (521,48);
+insert into t (id,a) values (521,49);
+insert into t (id,a) values (521,50);
+insert into t (id,a) values (521,51);
+insert into t (id,a) values (521,52);
+insert into t (id,a) values (521,53);
+insert into t (id,a) values (521,54);
+insert into t (id,a) values (521,55);
+insert into t (id,a) values (521,56);
+insert into t (id,a) values (521,57);
+insert into t (id,a) values (521,58);
+insert into t (id,a) values (521,59);
+insert into t (id,a) values (521,60);
+insert into t (id,a) values (521,61);
+insert into t (id,a) values (521,62);
+insert into t (id,a) values (521,63);
+insert into t (id,a) values (521,64);
+insert into t (id,a) values (521,65);
+insert into t (id,a) values (521,66);
+insert into t (id,a) values (521,67);
+insert into t (id,a) values (521,68);
+insert into t (id,a) values (521,69);
+insert into t (id,a) values (521,70);
+insert into t (id,a) values (521,71);
+insert into t (id,a) values (521,72);
+insert into t (id,a) values (521,73);
+insert into t (id,a) values (521,74);
+insert into t (id,a) values (521,75);
+insert into t (id,a) values (521,76);
+insert into t (id,a) values (521,77);
+insert into t (id,a) values (521,78);
+insert into t (id,a) values (521,79);
+insert into t (id,a) values (521,80);
+insert into t (id,a) values (521,81);
+insert into t (id,a) values (521,82);
+insert into t (id,a) values (521,83);
+insert into t (id,a) values (521,84);
+insert into t (id,a) values (521,85);
+insert into t (id,a) values (521,86);
+insert into t (id,a) values (521,87);
+insert into t (id,a) values (521,88);
+insert into t (id,a) values (521,89);
+insert into t (id,a) values (521,90);
+insert into t (id,a) values (521,91);
+insert into t (id,a) values (521,92);
+insert into t (id,a) values (521,93);
+insert into t (id,a) values (521,94);
+insert into t (id,a) values (521,95);
+insert into t (id,a) values (521,96);
+insert into t (id,a) values (521,97);
+insert into t (id,a) values (521,98);
+insert into t (id,a) values (521,99);
+insert into t (id,a) values (522,0);
+insert into t (id,a) values (522,1);
+insert into t (id,a) values (522,2);
+insert into t (id,a) values (522,3);
+insert into t (id,a) values (522,4);
+insert into t (id,a) values (522,5);
+insert into t (id,a) values (522,6);
+insert into t (id,a) values (522,7);
+insert into t (id,a) values (522,8);
+insert into t (id,a) values (522,9);
+insert into t (id,a) values (522,10);
+insert into t (id,a) values (522,11);
+insert into t (id,a) values (522,12);
+insert into t (id,a) values (522,13);
+insert into t (id,a) values (522,14);
+insert into t (id,a) values (522,15);
+insert into t (id,a) values (522,16);
+insert into t (id,a) values (522,17);
+insert into t (id,a) values (522,18);
+insert into t (id,a) values (522,19);
+insert into t (id,a) values (522,20);
+insert into t (id,a) values (522,21);
+insert into t (id,a) values (522,22);
+insert into t (id,a) values (522,23);
+insert into t (id,a) values (522,24);
+insert into t (id,a) values (522,25);
+insert into t (id,a) values (522,26);
+insert into t (id,a) values (522,27);
+insert into t (id,a) values (522,28);
+insert into t (id,a) values (522,29);
+insert into t (id,a) values (522,30);
+insert into t (id,a) values (522,31);
+insert into t (id,a) values (522,32);
+insert into t (id,a) values (522,33);
+insert into t (id,a) values (522,34);
+insert into t (id,a) values (522,35);
+insert into t (id,a) values (522,36);
+insert into t (id,a) values (522,37);
+insert into t (id,a) values (522,38);
+insert into t (id,a) values (522,39);
+insert into t (id,a) values (522,40);
+insert into t (id,a) values (522,41);
+insert into t (id,a) values (522,42);
+insert into t (id,a) values (522,43);
+insert into t (id,a) values (522,44);
+insert into t (id,a) values (522,45);
+insert into t (id,a) values (522,46);
+insert into t (id,a) values (522,47);
+insert into t (id,a) values (522,48);
+insert into t (id,a) values (522,49);
+insert into t (id,a) values (522,50);
+insert into t (id,a) values (522,51);
+insert into t (id,a) values (522,52);
+insert into t (id,a) values (522,53);
+insert into t (id,a) values (522,54);
+insert into t (id,a) values (522,55);
+insert into t (id,a) values (522,56);
+insert into t (id,a) values (522,57);
+insert into t (id,a) values (522,58);
+insert into t (id,a) values (522,59);
+insert into t (id,a) values (522,60);
+insert into t (id,a) values (522,61);
+insert into t (id,a) values (522,62);
+insert into t (id,a) values (522,63);
+insert into t (id,a) values (522,64);
+insert into t (id,a) values (522,65);
+insert into t (id,a) values (522,66);
+insert into t (id,a) values (522,67);
+insert into t (id,a) values (522,68);
+insert into t (id,a) values (522,69);
+insert into t (id,a) values (522,70);
+insert into t (id,a) values (522,71);
+insert into t (id,a) values (522,72);
+insert into t (id,a) values (522,73);
+insert into t (id,a) values (522,74);
+insert into t (id,a) values (522,75);
+insert into t (id,a) values (522,76);
+insert into t (id,a) values (522,77);
+insert into t (id,a) values (522,78);
+insert into t (id,a) values (522,79);
+insert into t (id,a) values (522,80);
+insert into t (id,a) values (522,81);
+insert into t (id,a) values (522,82);
+insert into t (id,a) values (522,83);
+insert into t (id,a) values (522,84);
+insert into t (id,a) values (522,85);
+insert into t (id,a) values (522,86);
+insert into t (id,a) values (522,87);
+insert into t (id,a) values (522,88);
+insert into t (id,a) values (522,89);
+insert into t (id,a) values (522,90);
+insert into t (id,a) values (522,91);
+insert into t (id,a) values (522,92);
+insert into t (id,a) values (522,93);
+insert into t (id,a) values (522,94);
+insert into t (id,a) values (522,95);
+insert into t (id,a) values (522,96);
+insert into t (id,a) values (522,97);
+insert into t (id,a) values (522,98);
+insert into t (id,a) values (522,99);
+insert into t (id,a) values (523,0);
+insert into t (id,a) values (523,1);
+insert into t (id,a) values (523,2);
+insert into t (id,a) values (523,3);
+insert into t (id,a) values (523,4);
+insert into t (id,a) values (523,5);
+insert into t (id,a) values (523,6);
+insert into t (id,a) values (523,7);
+insert into t (id,a) values (523,8);
+insert into t (id,a) values (523,9);
+insert into t (id,a) values (523,10);
+insert into t (id,a) values (523,11);
+insert into t (id,a) values (523,12);
+insert into t (id,a) values (523,13);
+insert into t (id,a) values (523,14);
+insert into t (id,a) values (523,15);
+insert into t (id,a) values (523,16);
+insert into t (id,a) values (523,17);
+insert into t (id,a) values (523,18);
+insert into t (id,a) values (523,19);
+insert into t (id,a) values (523,20);
+insert into t (id,a) values (523,21);
+insert into t (id,a) values (523,22);
+insert into t (id,a) values (523,23);
+insert into t (id,a) values (523,24);
+insert into t (id,a) values (523,25);
+insert into t (id,a) values (523,26);
+insert into t (id,a) values (523,27);
+insert into t (id,a) values (523,28);
+insert into t (id,a) values (523,29);
+insert into t (id,a) values (523,30);
+insert into t (id,a) values (523,31);
+insert into t (id,a) values (523,32);
+insert into t (id,a) values (523,33);
+insert into t (id,a) values (523,34);
+insert into t (id,a) values (523,35);
+insert into t (id,a) values (523,36);
+insert into t (id,a) values (523,37);
+insert into t (id,a) values (523,38);
+insert into t (id,a) values (523,39);
+insert into t (id,a) values (523,40);
+insert into t (id,a) values (523,41);
+insert into t (id,a) values (523,42);
+insert into t (id,a) values (523,43);
+insert into t (id,a) values (523,44);
+insert into t (id,a) values (523,45);
+insert into t (id,a) values (523,46);
+insert into t (id,a) values (523,47);
+insert into t (id,a) values (523,48);
+insert into t (id,a) values (523,49);
+insert into t (id,a) values (523,50);
+insert into t (id,a) values (523,51);
+insert into t (id,a) values (523,52);
+insert into t (id,a) values (523,53);
+insert into t (id,a) values (523,54);
+insert into t (id,a) values (523,55);
+insert into t (id,a) values (523,56);
+insert into t (id,a) values (523,57);
+insert into t (id,a) values (523,58);
+insert into t (id,a) values (523,59);
+insert into t (id,a) values (523,60);
+insert into t (id,a) values (523,61);
+insert into t (id,a) values (523,62);
+insert into t (id,a) values (523,63);
+insert into t (id,a) values (523,64);
+insert into t (id,a) values (523,65);
+insert into t (id,a) values (523,66);
+insert into t (id,a) values (523,67);
+insert into t (id,a) values (523,68);
+insert into t (id,a) values (523,69);
+insert into t (id,a) values (523,70);
+insert into t (id,a) values (523,71);
+insert into t (id,a) values (523,72);
+insert into t (id,a) values (523,73);
+insert into t (id,a) values (523,74);
+insert into t (id,a) values (523,75);
+insert into t (id,a) values (523,76);
+insert into t (id,a) values (523,77);
+insert into t (id,a) values (523,78);
+insert into t (id,a) values (523,79);
+insert into t (id,a) values (523,80);
+insert into t (id,a) values (523,81);
+insert into t (id,a) values (523,82);
+insert into t (id,a) values (523,83);
+insert into t (id,a) values (523,84);
+insert into t (id,a) values (523,85);
+insert into t (id,a) values (523,86);
+insert into t (id,a) values (523,87);
+insert into t (id,a) values (523,88);
+insert into t (id,a) values (523,89);
+insert into t (id,a) values (523,90);
+insert into t (id,a) values (523,91);
+insert into t (id,a) values (523,92);
+insert into t (id,a) values (523,93);
+insert into t (id,a) values (523,94);
+insert into t (id,a) values (523,95);
+insert into t (id,a) values (523,96);
+insert into t (id,a) values (523,97);
+insert into t (id,a) values (523,98);
+insert into t (id,a) values (523,99);
+insert into t (id,a) values (524,0);
+insert into t (id,a) values (524,1);
+insert into t (id,a) values (524,2);
+insert into t (id,a) values (524,3);
+insert into t (id,a) values (524,4);
+insert into t (id,a) values (524,5);
+insert into t (id,a) values (524,6);
+insert into t (id,a) values (524,7);
+insert into t (id,a) values (524,8);
+insert into t (id,a) values (524,9);
+insert into t (id,a) values (524,10);
+insert into t (id,a) values (524,11);
+insert into t (id,a) values (524,12);
+insert into t (id,a) values (524,13);
+insert into t (id,a) values (524,14);
+insert into t (id,a) values (524,15);
+insert into t (id,a) values (524,16);
+insert into t (id,a) values (524,17);
+insert into t (id,a) values (524,18);
+insert into t (id,a) values (524,19);
+insert into t (id,a) values (524,20);
+insert into t (id,a) values (524,21);
+insert into t (id,a) values (524,22);
+insert into t (id,a) values (524,23);
+insert into t (id,a) values (524,24);
+insert into t (id,a) values (524,25);
+insert into t (id,a) values (524,26);
+insert into t (id,a) values (524,27);
+insert into t (id,a) values (524,28);
+insert into t (id,a) values (524,29);
+insert into t (id,a) values (524,30);
+insert into t (id,a) values (524,31);
+insert into t (id,a) values (524,32);
+insert into t (id,a) values (524,33);
+insert into t (id,a) values (524,34);
+insert into t (id,a) values (524,35);
+insert into t (id,a) values (524,36);
+insert into t (id,a) values (524,37);
+insert into t (id,a) values (524,38);
+insert into t (id,a) values (524,39);
+insert into t (id,a) values (524,40);
+insert into t (id,a) values (524,41);
+insert into t (id,a) values (524,42);
+insert into t (id,a) values (524,43);
+insert into t (id,a) values (524,44);
+insert into t (id,a) values (524,45);
+insert into t (id,a) values (524,46);
+insert into t (id,a) values (524,47);
+insert into t (id,a) values (524,48);
+insert into t (id,a) values (524,49);
+insert into t (id,a) values (524,50);
+insert into t (id,a) values (524,51);
+insert into t (id,a) values (524,52);
+insert into t (id,a) values (524,53);
+insert into t (id,a) values (524,54);
+insert into t (id,a) values (524,55);
+insert into t (id,a) values (524,56);
+insert into t (id,a) values (524,57);
+insert into t (id,a) values (524,58);
+insert into t (id,a) values (524,59);
+insert into t (id,a) values (524,60);
+insert into t (id,a) values (524,61);
+insert into t (id,a) values (524,62);
+insert into t (id,a) values (524,63);
+insert into t (id,a) values (524,64);
+insert into t (id,a) values (524,65);
+insert into t (id,a) values (524,66);
+insert into t (id,a) values (524,67);
+insert into t (id,a) values (524,68);
+insert into t (id,a) values (524,69);
+insert into t (id,a) values (524,70);
+insert into t (id,a) values (524,71);
+insert into t (id,a) values (524,72);
+insert into t (id,a) values (524,73);
+insert into t (id,a) values (524,74);
+insert into t (id,a) values (524,75);
+insert into t (id,a) values (524,76);
+insert into t (id,a) values (524,77);
+insert into t (id,a) values (524,78);
+insert into t (id,a) values (524,79);
+insert into t (id,a) values (524,80);
+insert into t (id,a) values (524,81);
+insert into t (id,a) values (524,82);
+insert into t (id,a) values (524,83);
+insert into t (id,a) values (524,84);
+insert into t (id,a) values (524,85);
+insert into t (id,a) values (524,86);
+insert into t (id,a) values (524,87);
+insert into t (id,a) values (524,88);
+insert into t (id,a) values (524,89);
+insert into t (id,a) values (524,90);
+insert into t (id,a) values (524,91);
+insert into t (id,a) values (524,92);
+insert into t (id,a) values (524,93);
+insert into t (id,a) values (524,94);
+insert into t (id,a) values (524,95);
+insert into t (id,a) values (524,96);
+insert into t (id,a) values (524,97);
+insert into t (id,a) values (524,98);
+insert into t (id,a) values (524,99);
+insert into t (id,a) values (525,0);
+insert into t (id,a) values (525,1);
+insert into t (id,a) values (525,2);
+insert into t (id,a) values (525,3);
+insert into t (id,a) values (525,4);
+insert into t (id,a) values (525,5);
+insert into t (id,a) values (525,6);
+insert into t (id,a) values (525,7);
+insert into t (id,a) values (525,8);
+insert into t (id,a) values (525,9);
+insert into t (id,a) values (525,10);
+insert into t (id,a) values (525,11);
+insert into t (id,a) values (525,12);
+insert into t (id,a) values (525,13);
+insert into t (id,a) values (525,14);
+insert into t (id,a) values (525,15);
+insert into t (id,a) values (525,16);
+insert into t (id,a) values (525,17);
+insert into t (id,a) values (525,18);
+insert into t (id,a) values (525,19);
+insert into t (id,a) values (525,20);
+insert into t (id,a) values (525,21);
+insert into t (id,a) values (525,22);
+insert into t (id,a) values (525,23);
+insert into t (id,a) values (525,24);
+insert into t (id,a) values (525,25);
+insert into t (id,a) values (525,26);
+insert into t (id,a) values (525,27);
+insert into t (id,a) values (525,28);
+insert into t (id,a) values (525,29);
+insert into t (id,a) values (525,30);
+insert into t (id,a) values (525,31);
+insert into t (id,a) values (525,32);
+insert into t (id,a) values (525,33);
+insert into t (id,a) values (525,34);
+insert into t (id,a) values (525,35);
+insert into t (id,a) values (525,36);
+insert into t (id,a) values (525,37);
+insert into t (id,a) values (525,38);
+insert into t (id,a) values (525,39);
+insert into t (id,a) values (525,40);
+insert into t (id,a) values (525,41);
+insert into t (id,a) values (525,42);
+insert into t (id,a) values (525,43);
+insert into t (id,a) values (525,44);
+insert into t (id,a) values (525,45);
+insert into t (id,a) values (525,46);
+insert into t (id,a) values (525,47);
+insert into t (id,a) values (525,48);
+insert into t (id,a) values (525,49);
+insert into t (id,a) values (525,50);
+insert into t (id,a) values (525,51);
+insert into t (id,a) values (525,52);
+insert into t (id,a) values (525,53);
+insert into t (id,a) values (525,54);
+insert into t (id,a) values (525,55);
+insert into t (id,a) values (525,56);
+insert into t (id,a) values (525,57);
+insert into t (id,a) values (525,58);
+insert into t (id,a) values (525,59);
+insert into t (id,a) values (525,60);
+insert into t (id,a) values (525,61);
+insert into t (id,a) values (525,62);
+insert into t (id,a) values (525,63);
+insert into t (id,a) values (525,64);
+insert into t (id,a) values (525,65);
+insert into t (id,a) values (525,66);
+insert into t (id,a) values (525,67);
+insert into t (id,a) values (525,68);
+insert into t (id,a) values (525,69);
+insert into t (id,a) values (525,70);
+insert into t (id,a) values (525,71);
+insert into t (id,a) values (525,72);
+insert into t (id,a) values (525,73);
+insert into t (id,a) values (525,74);
+insert into t (id,a) values (525,75);
+insert into t (id,a) values (525,76);
+insert into t (id,a) values (525,77);
+insert into t (id,a) values (525,78);
+insert into t (id,a) values (525,79);
+insert into t (id,a) values (525,80);
+insert into t (id,a) values (525,81);
+insert into t (id,a) values (525,82);
+insert into t (id,a) values (525,83);
+insert into t (id,a) values (525,84);
+insert into t (id,a) values (525,85);
+insert into t (id,a) values (525,86);
+insert into t (id,a) values (525,87);
+insert into t (id,a) values (525,88);
+insert into t (id,a) values (525,89);
+insert into t (id,a) values (525,90);
+insert into t (id,a) values (525,91);
+insert into t (id,a) values (525,92);
+insert into t (id,a) values (525,93);
+insert into t (id,a) values (525,94);
+insert into t (id,a) values (525,95);
+insert into t (id,a) values (525,96);
+insert into t (id,a) values (525,97);
+insert into t (id,a) values (525,98);
+insert into t (id,a) values (525,99);
+insert into t (id,a) values (526,0);
+insert into t (id,a) values (526,1);
+insert into t (id,a) values (526,2);
+insert into t (id,a) values (526,3);
+insert into t (id,a) values (526,4);
+insert into t (id,a) values (526,5);
+insert into t (id,a) values (526,6);
+insert into t (id,a) values (526,7);
+insert into t (id,a) values (526,8);
+insert into t (id,a) values (526,9);
+insert into t (id,a) values (526,10);
+insert into t (id,a) values (526,11);
+insert into t (id,a) values (526,12);
+insert into t (id,a) values (526,13);
+insert into t (id,a) values (526,14);
+insert into t (id,a) values (526,15);
+insert into t (id,a) values (526,16);
+insert into t (id,a) values (526,17);
+insert into t (id,a) values (526,18);
+insert into t (id,a) values (526,19);
+insert into t (id,a) values (526,20);
+insert into t (id,a) values (526,21);
+insert into t (id,a) values (526,22);
+insert into t (id,a) values (526,23);
+insert into t (id,a) values (526,24);
+insert into t (id,a) values (526,25);
+insert into t (id,a) values (526,26);
+insert into t (id,a) values (526,27);
+insert into t (id,a) values (526,28);
+insert into t (id,a) values (526,29);
+insert into t (id,a) values (526,30);
+insert into t (id,a) values (526,31);
+insert into t (id,a) values (526,32);
+insert into t (id,a) values (526,33);
+insert into t (id,a) values (526,34);
+insert into t (id,a) values (526,35);
+insert into t (id,a) values (526,36);
+insert into t (id,a) values (526,37);
+insert into t (id,a) values (526,38);
+insert into t (id,a) values (526,39);
+insert into t (id,a) values (526,40);
+insert into t (id,a) values (526,41);
+insert into t (id,a) values (526,42);
+insert into t (id,a) values (526,43);
+insert into t (id,a) values (526,44);
+insert into t (id,a) values (526,45);
+insert into t (id,a) values (526,46);
+insert into t (id,a) values (526,47);
+insert into t (id,a) values (526,48);
+insert into t (id,a) values (526,49);
+insert into t (id,a) values (526,50);
+insert into t (id,a) values (526,51);
+insert into t (id,a) values (526,52);
+insert into t (id,a) values (526,53);
+insert into t (id,a) values (526,54);
+insert into t (id,a) values (526,55);
+insert into t (id,a) values (526,56);
+insert into t (id,a) values (526,57);
+insert into t (id,a) values (526,58);
+insert into t (id,a) values (526,59);
+insert into t (id,a) values (526,60);
+insert into t (id,a) values (526,61);
+insert into t (id,a) values (526,62);
+insert into t (id,a) values (526,63);
+insert into t (id,a) values (526,64);
+insert into t (id,a) values (526,65);
+insert into t (id,a) values (526,66);
+insert into t (id,a) values (526,67);
+insert into t (id,a) values (526,68);
+insert into t (id,a) values (526,69);
+insert into t (id,a) values (526,70);
+insert into t (id,a) values (526,71);
+insert into t (id,a) values (526,72);
+insert into t (id,a) values (526,73);
+insert into t (id,a) values (526,74);
+insert into t (id,a) values (526,75);
+insert into t (id,a) values (526,76);
+insert into t (id,a) values (526,77);
+insert into t (id,a) values (526,78);
+insert into t (id,a) values (526,79);
+insert into t (id,a) values (526,80);
+insert into t (id,a) values (526,81);
+insert into t (id,a) values (526,82);
+insert into t (id,a) values (526,83);
+insert into t (id,a) values (526,84);
+insert into t (id,a) values (526,85);
+insert into t (id,a) values (526,86);
+insert into t (id,a) values (526,87);
+insert into t (id,a) values (526,88);
+insert into t (id,a) values (526,89);
+insert into t (id,a) values (526,90);
+insert into t (id,a) values (526,91);
+insert into t (id,a) values (526,92);
+insert into t (id,a) values (526,93);
+insert into t (id,a) values (526,94);
+insert into t (id,a) values (526,95);
+insert into t (id,a) values (526,96);
+insert into t (id,a) values (526,97);
+insert into t (id,a) values (526,98);
+insert into t (id,a) values (526,99);
+insert into t (id,a) values (527,0);
+insert into t (id,a) values (527,1);
+insert into t (id,a) values (527,2);
+insert into t (id,a) values (527,3);
+insert into t (id,a) values (527,4);
+insert into t (id,a) values (527,5);
+insert into t (id,a) values (527,6);
+insert into t (id,a) values (527,7);
+insert into t (id,a) values (527,8);
+insert into t (id,a) values (527,9);
+insert into t (id,a) values (527,10);
+insert into t (id,a) values (527,11);
+insert into t (id,a) values (527,12);
+insert into t (id,a) values (527,13);
+insert into t (id,a) values (527,14);
+insert into t (id,a) values (527,15);
+insert into t (id,a) values (527,16);
+insert into t (id,a) values (527,17);
+insert into t (id,a) values (527,18);
+insert into t (id,a) values (527,19);
+insert into t (id,a) values (527,20);
+insert into t (id,a) values (527,21);
+insert into t (id,a) values (527,22);
+insert into t (id,a) values (527,23);
+insert into t (id,a) values (527,24);
+insert into t (id,a) values (527,25);
+insert into t (id,a) values (527,26);
+insert into t (id,a) values (527,27);
+insert into t (id,a) values (527,28);
+insert into t (id,a) values (527,29);
+insert into t (id,a) values (527,30);
+insert into t (id,a) values (527,31);
+insert into t (id,a) values (527,32);
+insert into t (id,a) values (527,33);
+insert into t (id,a) values (527,34);
+insert into t (id,a) values (527,35);
+insert into t (id,a) values (527,36);
+insert into t (id,a) values (527,37);
+insert into t (id,a) values (527,38);
+insert into t (id,a) values (527,39);
+insert into t (id,a) values (527,40);
+insert into t (id,a) values (527,41);
+insert into t (id,a) values (527,42);
+insert into t (id,a) values (527,43);
+insert into t (id,a) values (527,44);
+insert into t (id,a) values (527,45);
+insert into t (id,a) values (527,46);
+insert into t (id,a) values (527,47);
+insert into t (id,a) values (527,48);
+insert into t (id,a) values (527,49);
+insert into t (id,a) values (527,50);
+insert into t (id,a) values (527,51);
+insert into t (id,a) values (527,52);
+insert into t (id,a) values (527,53);
+insert into t (id,a) values (527,54);
+insert into t (id,a) values (527,55);
+insert into t (id,a) values (527,56);
+insert into t (id,a) values (527,57);
+insert into t (id,a) values (527,58);
+insert into t (id,a) values (527,59);
+insert into t (id,a) values (527,60);
+insert into t (id,a) values (527,61);
+insert into t (id,a) values (527,62);
+insert into t (id,a) values (527,63);
+insert into t (id,a) values (527,64);
+insert into t (id,a) values (527,65);
+insert into t (id,a) values (527,66);
+insert into t (id,a) values (527,67);
+insert into t (id,a) values (527,68);
+insert into t (id,a) values (527,69);
+insert into t (id,a) values (527,70);
+insert into t (id,a) values (527,71);
+insert into t (id,a) values (527,72);
+insert into t (id,a) values (527,73);
+insert into t (id,a) values (527,74);
+insert into t (id,a) values (527,75);
+insert into t (id,a) values (527,76);
+insert into t (id,a) values (527,77);
+insert into t (id,a) values (527,78);
+insert into t (id,a) values (527,79);
+insert into t (id,a) values (527,80);
+insert into t (id,a) values (527,81);
+insert into t (id,a) values (527,82);
+insert into t (id,a) values (527,83);
+insert into t (id,a) values (527,84);
+insert into t (id,a) values (527,85);
+insert into t (id,a) values (527,86);
+insert into t (id,a) values (527,87);
+insert into t (id,a) values (527,88);
+insert into t (id,a) values (527,89);
+insert into t (id,a) values (527,90);
+insert into t (id,a) values (527,91);
+insert into t (id,a) values (527,92);
+insert into t (id,a) values (527,93);
+insert into t (id,a) values (527,94);
+insert into t (id,a) values (527,95);
+insert into t (id,a) values (527,96);
+insert into t (id,a) values (527,97);
+insert into t (id,a) values (527,98);
+insert into t (id,a) values (527,99);
+insert into t (id,a) values (528,0);
+insert into t (id,a) values (528,1);
+insert into t (id,a) values (528,2);
+insert into t (id,a) values (528,3);
+insert into t (id,a) values (528,4);
+insert into t (id,a) values (528,5);
+insert into t (id,a) values (528,6);
+insert into t (id,a) values (528,7);
+insert into t (id,a) values (528,8);
+insert into t (id,a) values (528,9);
+insert into t (id,a) values (528,10);
+insert into t (id,a) values (528,11);
+insert into t (id,a) values (528,12);
+insert into t (id,a) values (528,13);
+insert into t (id,a) values (528,14);
+insert into t (id,a) values (528,15);
+insert into t (id,a) values (528,16);
+insert into t (id,a) values (528,17);
+insert into t (id,a) values (528,18);
+insert into t (id,a) values (528,19);
+insert into t (id,a) values (528,20);
+insert into t (id,a) values (528,21);
+insert into t (id,a) values (528,22);
+insert into t (id,a) values (528,23);
+insert into t (id,a) values (528,24);
+insert into t (id,a) values (528,25);
+insert into t (id,a) values (528,26);
+insert into t (id,a) values (528,27);
+insert into t (id,a) values (528,28);
+insert into t (id,a) values (528,29);
+insert into t (id,a) values (528,30);
+insert into t (id,a) values (528,31);
+insert into t (id,a) values (528,32);
+insert into t (id,a) values (528,33);
+insert into t (id,a) values (528,34);
+insert into t (id,a) values (528,35);
+insert into t (id,a) values (528,36);
+insert into t (id,a) values (528,37);
+insert into t (id,a) values (528,38);
+insert into t (id,a) values (528,39);
+insert into t (id,a) values (528,40);
+insert into t (id,a) values (528,41);
+insert into t (id,a) values (528,42);
+insert into t (id,a) values (528,43);
+insert into t (id,a) values (528,44);
+insert into t (id,a) values (528,45);
+insert into t (id,a) values (528,46);
+insert into t (id,a) values (528,47);
+insert into t (id,a) values (528,48);
+insert into t (id,a) values (528,49);
+insert into t (id,a) values (528,50);
+insert into t (id,a) values (528,51);
+insert into t (id,a) values (528,52);
+insert into t (id,a) values (528,53);
+insert into t (id,a) values (528,54);
+insert into t (id,a) values (528,55);
+insert into t (id,a) values (528,56);
+insert into t (id,a) values (528,57);
+insert into t (id,a) values (528,58);
+insert into t (id,a) values (528,59);
+insert into t (id,a) values (528,60);
+insert into t (id,a) values (528,61);
+insert into t (id,a) values (528,62);
+insert into t (id,a) values (528,63);
+insert into t (id,a) values (528,64);
+insert into t (id,a) values (528,65);
+insert into t (id,a) values (528,66);
+insert into t (id,a) values (528,67);
+insert into t (id,a) values (528,68);
+insert into t (id,a) values (528,69);
+insert into t (id,a) values (528,70);
+insert into t (id,a) values (528,71);
+insert into t (id,a) values (528,72);
+insert into t (id,a) values (528,73);
+insert into t (id,a) values (528,74);
+insert into t (id,a) values (528,75);
+insert into t (id,a) values (528,76);
+insert into t (id,a) values (528,77);
+insert into t (id,a) values (528,78);
+insert into t (id,a) values (528,79);
+insert into t (id,a) values (528,80);
+insert into t (id,a) values (528,81);
+insert into t (id,a) values (528,82);
+insert into t (id,a) values (528,83);
+insert into t (id,a) values (528,84);
+insert into t (id,a) values (528,85);
+insert into t (id,a) values (528,86);
+insert into t (id,a) values (528,87);
+insert into t (id,a) values (528,88);
+insert into t (id,a) values (528,89);
+insert into t (id,a) values (528,90);
+insert into t (id,a) values (528,91);
+insert into t (id,a) values (528,92);
+insert into t (id,a) values (528,93);
+insert into t (id,a) values (528,94);
+insert into t (id,a) values (528,95);
+insert into t (id,a) values (528,96);
+insert into t (id,a) values (528,97);
+insert into t (id,a) values (528,98);
+insert into t (id,a) values (528,99);
+insert into t (id,a) values (529,0);
+insert into t (id,a) values (529,1);
+insert into t (id,a) values (529,2);
+insert into t (id,a) values (529,3);
+insert into t (id,a) values (529,4);
+insert into t (id,a) values (529,5);
+insert into t (id,a) values (529,6);
+insert into t (id,a) values (529,7);
+insert into t (id,a) values (529,8);
+insert into t (id,a) values (529,9);
+insert into t (id,a) values (529,10);
+insert into t (id,a) values (529,11);
+insert into t (id,a) values (529,12);
+insert into t (id,a) values (529,13);
+insert into t (id,a) values (529,14);
+insert into t (id,a) values (529,15);
+insert into t (id,a) values (529,16);
+insert into t (id,a) values (529,17);
+insert into t (id,a) values (529,18);
+insert into t (id,a) values (529,19);
+insert into t (id,a) values (529,20);
+insert into t (id,a) values (529,21);
+insert into t (id,a) values (529,22);
+insert into t (id,a) values (529,23);
+insert into t (id,a) values (529,24);
+insert into t (id,a) values (529,25);
+insert into t (id,a) values (529,26);
+insert into t (id,a) values (529,27);
+insert into t (id,a) values (529,28);
+insert into t (id,a) values (529,29);
+insert into t (id,a) values (529,30);
+insert into t (id,a) values (529,31);
+insert into t (id,a) values (529,32);
+insert into t (id,a) values (529,33);
+insert into t (id,a) values (529,34);
+insert into t (id,a) values (529,35);
+insert into t (id,a) values (529,36);
+insert into t (id,a) values (529,37);
+insert into t (id,a) values (529,38);
+insert into t (id,a) values (529,39);
+insert into t (id,a) values (529,40);
+insert into t (id,a) values (529,41);
+insert into t (id,a) values (529,42);
+insert into t (id,a) values (529,43);
+insert into t (id,a) values (529,44);
+insert into t (id,a) values (529,45);
+insert into t (id,a) values (529,46);
+insert into t (id,a) values (529,47);
+insert into t (id,a) values (529,48);
+insert into t (id,a) values (529,49);
+insert into t (id,a) values (529,50);
+insert into t (id,a) values (529,51);
+insert into t (id,a) values (529,52);
+insert into t (id,a) values (529,53);
+insert into t (id,a) values (529,54);
+insert into t (id,a) values (529,55);
+insert into t (id,a) values (529,56);
+insert into t (id,a) values (529,57);
+insert into t (id,a) values (529,58);
+insert into t (id,a) values (529,59);
+insert into t (id,a) values (529,60);
+insert into t (id,a) values (529,61);
+insert into t (id,a) values (529,62);
+insert into t (id,a) values (529,63);
+insert into t (id,a) values (529,64);
+insert into t (id,a) values (529,65);
+insert into t (id,a) values (529,66);
+insert into t (id,a) values (529,67);
+insert into t (id,a) values (529,68);
+insert into t (id,a) values (529,69);
+insert into t (id,a) values (529,70);
+insert into t (id,a) values (529,71);
+insert into t (id,a) values (529,72);
+insert into t (id,a) values (529,73);
+insert into t (id,a) values (529,74);
+insert into t (id,a) values (529,75);
+insert into t (id,a) values (529,76);
+insert into t (id,a) values (529,77);
+insert into t (id,a) values (529,78);
+insert into t (id,a) values (529,79);
+insert into t (id,a) values (529,80);
+insert into t (id,a) values (529,81);
+insert into t (id,a) values (529,82);
+insert into t (id,a) values (529,83);
+insert into t (id,a) values (529,84);
+insert into t (id,a) values (529,85);
+insert into t (id,a) values (529,86);
+insert into t (id,a) values (529,87);
+insert into t (id,a) values (529,88);
+insert into t (id,a) values (529,89);
+insert into t (id,a) values (529,90);
+insert into t (id,a) values (529,91);
+insert into t (id,a) values (529,92);
+insert into t (id,a) values (529,93);
+insert into t (id,a) values (529,94);
+insert into t (id,a) values (529,95);
+insert into t (id,a) values (529,96);
+insert into t (id,a) values (529,97);
+insert into t (id,a) values (529,98);
+insert into t (id,a) values (529,99);
+insert into t (id,a) values (530,0);
+insert into t (id,a) values (530,1);
+insert into t (id,a) values (530,2);
+insert into t (id,a) values (530,3);
+insert into t (id,a) values (530,4);
+insert into t (id,a) values (530,5);
+insert into t (id,a) values (530,6);
+insert into t (id,a) values (530,7);
+insert into t (id,a) values (530,8);
+insert into t (id,a) values (530,9);
+insert into t (id,a) values (530,10);
+insert into t (id,a) values (530,11);
+insert into t (id,a) values (530,12);
+insert into t (id,a) values (530,13);
+insert into t (id,a) values (530,14);
+insert into t (id,a) values (530,15);
+insert into t (id,a) values (530,16);
+insert into t (id,a) values (530,17);
+insert into t (id,a) values (530,18);
+insert into t (id,a) values (530,19);
+insert into t (id,a) values (530,20);
+insert into t (id,a) values (530,21);
+insert into t (id,a) values (530,22);
+insert into t (id,a) values (530,23);
+insert into t (id,a) values (530,24);
+insert into t (id,a) values (530,25);
+insert into t (id,a) values (530,26);
+insert into t (id,a) values (530,27);
+insert into t (id,a) values (530,28);
+insert into t (id,a) values (530,29);
+insert into t (id,a) values (530,30);
+insert into t (id,a) values (530,31);
+insert into t (id,a) values (530,32);
+insert into t (id,a) values (530,33);
+insert into t (id,a) values (530,34);
+insert into t (id,a) values (530,35);
+insert into t (id,a) values (530,36);
+insert into t (id,a) values (530,37);
+insert into t (id,a) values (530,38);
+insert into t (id,a) values (530,39);
+insert into t (id,a) values (530,40);
+insert into t (id,a) values (530,41);
+insert into t (id,a) values (530,42);
+insert into t (id,a) values (530,43);
+insert into t (id,a) values (530,44);
+insert into t (id,a) values (530,45);
+insert into t (id,a) values (530,46);
+insert into t (id,a) values (530,47);
+insert into t (id,a) values (530,48);
+insert into t (id,a) values (530,49);
+insert into t (id,a) values (530,50);
+insert into t (id,a) values (530,51);
+insert into t (id,a) values (530,52);
+insert into t (id,a) values (530,53);
+insert into t (id,a) values (530,54);
+insert into t (id,a) values (530,55);
+insert into t (id,a) values (530,56);
+insert into t (id,a) values (530,57);
+insert into t (id,a) values (530,58);
+insert into t (id,a) values (530,59);
+insert into t (id,a) values (530,60);
+insert into t (id,a) values (530,61);
+insert into t (id,a) values (530,62);
+insert into t (id,a) values (530,63);
+insert into t (id,a) values (530,64);
+insert into t (id,a) values (530,65);
+insert into t (id,a) values (530,66);
+insert into t (id,a) values (530,67);
+insert into t (id,a) values (530,68);
+insert into t (id,a) values (530,69);
+insert into t (id,a) values (530,70);
+insert into t (id,a) values (530,71);
+insert into t (id,a) values (530,72);
+insert into t (id,a) values (530,73);
+insert into t (id,a) values (530,74);
+insert into t (id,a) values (530,75);
+insert into t (id,a) values (530,76);
+insert into t (id,a) values (530,77);
+insert into t (id,a) values (530,78);
+insert into t (id,a) values (530,79);
+insert into t (id,a) values (530,80);
+insert into t (id,a) values (530,81);
+insert into t (id,a) values (530,82);
+insert into t (id,a) values (530,83);
+insert into t (id,a) values (530,84);
+insert into t (id,a) values (530,85);
+insert into t (id,a) values (530,86);
+insert into t (id,a) values (530,87);
+insert into t (id,a) values (530,88);
+insert into t (id,a) values (530,89);
+insert into t (id,a) values (530,90);
+insert into t (id,a) values (530,91);
+insert into t (id,a) values (530,92);
+insert into t (id,a) values (530,93);
+insert into t (id,a) values (530,94);
+insert into t (id,a) values (530,95);
+insert into t (id,a) values (530,96);
+insert into t (id,a) values (530,97);
+insert into t (id,a) values (530,98);
+insert into t (id,a) values (530,99);
+insert into t (id,a) values (531,0);
+insert into t (id,a) values (531,1);
+insert into t (id,a) values (531,2);
+insert into t (id,a) values (531,3);
+insert into t (id,a) values (531,4);
+insert into t (id,a) values (531,5);
+insert into t (id,a) values (531,6);
+insert into t (id,a) values (531,7);
+insert into t (id,a) values (531,8);
+insert into t (id,a) values (531,9);
+insert into t (id,a) values (531,10);
+insert into t (id,a) values (531,11);
+insert into t (id,a) values (531,12);
+insert into t (id,a) values (531,13);
+insert into t (id,a) values (531,14);
+insert into t (id,a) values (531,15);
+insert into t (id,a) values (531,16);
+insert into t (id,a) values (531,17);
+insert into t (id,a) values (531,18);
+insert into t (id,a) values (531,19);
+insert into t (id,a) values (531,20);
+insert into t (id,a) values (531,21);
+insert into t (id,a) values (531,22);
+insert into t (id,a) values (531,23);
+insert into t (id,a) values (531,24);
+insert into t (id,a) values (531,25);
+insert into t (id,a) values (531,26);
+insert into t (id,a) values (531,27);
+insert into t (id,a) values (531,28);
+insert into t (id,a) values (531,29);
+insert into t (id,a) values (531,30);
+insert into t (id,a) values (531,31);
+insert into t (id,a) values (531,32);
+insert into t (id,a) values (531,33);
+insert into t (id,a) values (531,34);
+insert into t (id,a) values (531,35);
+insert into t (id,a) values (531,36);
+insert into t (id,a) values (531,37);
+insert into t (id,a) values (531,38);
+insert into t (id,a) values (531,39);
+insert into t (id,a) values (531,40);
+insert into t (id,a) values (531,41);
+insert into t (id,a) values (531,42);
+insert into t (id,a) values (531,43);
+insert into t (id,a) values (531,44);
+insert into t (id,a) values (531,45);
+insert into t (id,a) values (531,46);
+insert into t (id,a) values (531,47);
+insert into t (id,a) values (531,48);
+insert into t (id,a) values (531,49);
+insert into t (id,a) values (531,50);
+insert into t (id,a) values (531,51);
+insert into t (id,a) values (531,52);
+insert into t (id,a) values (531,53);
+insert into t (id,a) values (531,54);
+insert into t (id,a) values (531,55);
+insert into t (id,a) values (531,56);
+insert into t (id,a) values (531,57);
+insert into t (id,a) values (531,58);
+insert into t (id,a) values (531,59);
+insert into t (id,a) values (531,60);
+insert into t (id,a) values (531,61);
+insert into t (id,a) values (531,62);
+insert into t (id,a) values (531,63);
+insert into t (id,a) values (531,64);
+insert into t (id,a) values (531,65);
+insert into t (id,a) values (531,66);
+insert into t (id,a) values (531,67);
+insert into t (id,a) values (531,68);
+insert into t (id,a) values (531,69);
+insert into t (id,a) values (531,70);
+insert into t (id,a) values (531,71);
+insert into t (id,a) values (531,72);
+insert into t (id,a) values (531,73);
+insert into t (id,a) values (531,74);
+insert into t (id,a) values (531,75);
+insert into t (id,a) values (531,76);
+insert into t (id,a) values (531,77);
+insert into t (id,a) values (531,78);
+insert into t (id,a) values (531,79);
+insert into t (id,a) values (531,80);
+insert into t (id,a) values (531,81);
+insert into t (id,a) values (531,82);
+insert into t (id,a) values (531,83);
+insert into t (id,a) values (531,84);
+insert into t (id,a) values (531,85);
+insert into t (id,a) values (531,86);
+insert into t (id,a) values (531,87);
+insert into t (id,a) values (531,88);
+insert into t (id,a) values (531,89);
+insert into t (id,a) values (531,90);
+insert into t (id,a) values (531,91);
+insert into t (id,a) values (531,92);
+insert into t (id,a) values (531,93);
+insert into t (id,a) values (531,94);
+insert into t (id,a) values (531,95);
+insert into t (id,a) values (531,96);
+insert into t (id,a) values (531,97);
+insert into t (id,a) values (531,98);
+insert into t (id,a) values (531,99);
+insert into t (id,a) values (532,0);
+insert into t (id,a) values (532,1);
+insert into t (id,a) values (532,2);
+insert into t (id,a) values (532,3);
+insert into t (id,a) values (532,4);
+insert into t (id,a) values (532,5);
+insert into t (id,a) values (532,6);
+insert into t (id,a) values (532,7);
+insert into t (id,a) values (532,8);
+insert into t (id,a) values (532,9);
+insert into t (id,a) values (532,10);
+insert into t (id,a) values (532,11);
+insert into t (id,a) values (532,12);
+insert into t (id,a) values (532,13);
+insert into t (id,a) values (532,14);
+insert into t (id,a) values (532,15);
+insert into t (id,a) values (532,16);
+insert into t (id,a) values (532,17);
+insert into t (id,a) values (532,18);
+insert into t (id,a) values (532,19);
+insert into t (id,a) values (532,20);
+insert into t (id,a) values (532,21);
+insert into t (id,a) values (532,22);
+insert into t (id,a) values (532,23);
+insert into t (id,a) values (532,24);
+insert into t (id,a) values (532,25);
+insert into t (id,a) values (532,26);
+insert into t (id,a) values (532,27);
+insert into t (id,a) values (532,28);
+insert into t (id,a) values (532,29);
+insert into t (id,a) values (532,30);
+insert into t (id,a) values (532,31);
+insert into t (id,a) values (532,32);
+insert into t (id,a) values (532,33);
+insert into t (id,a) values (532,34);
+insert into t (id,a) values (532,35);
+insert into t (id,a) values (532,36);
+insert into t (id,a) values (532,37);
+insert into t (id,a) values (532,38);
+insert into t (id,a) values (532,39);
+insert into t (id,a) values (532,40);
+insert into t (id,a) values (532,41);
+insert into t (id,a) values (532,42);
+insert into t (id,a) values (532,43);
+insert into t (id,a) values (532,44);
+insert into t (id,a) values (532,45);
+insert into t (id,a) values (532,46);
+insert into t (id,a) values (532,47);
+insert into t (id,a) values (532,48);
+insert into t (id,a) values (532,49);
+insert into t (id,a) values (532,50);
+insert into t (id,a) values (532,51);
+insert into t (id,a) values (532,52);
+insert into t (id,a) values (532,53);
+insert into t (id,a) values (532,54);
+insert into t (id,a) values (532,55);
+insert into t (id,a) values (532,56);
+insert into t (id,a) values (532,57);
+insert into t (id,a) values (532,58);
+insert into t (id,a) values (532,59);
+insert into t (id,a) values (532,60);
+insert into t (id,a) values (532,61);
+insert into t (id,a) values (532,62);
+insert into t (id,a) values (532,63);
+insert into t (id,a) values (532,64);
+insert into t (id,a) values (532,65);
+insert into t (id,a) values (532,66);
+insert into t (id,a) values (532,67);
+insert into t (id,a) values (532,68);
+insert into t (id,a) values (532,69);
+insert into t (id,a) values (532,70);
+insert into t (id,a) values (532,71);
+insert into t (id,a) values (532,72);
+insert into t (id,a) values (532,73);
+insert into t (id,a) values (532,74);
+insert into t (id,a) values (532,75);
+insert into t (id,a) values (532,76);
+insert into t (id,a) values (532,77);
+insert into t (id,a) values (532,78);
+insert into t (id,a) values (532,79);
+insert into t (id,a) values (532,80);
+insert into t (id,a) values (532,81);
+insert into t (id,a) values (532,82);
+insert into t (id,a) values (532,83);
+insert into t (id,a) values (532,84);
+insert into t (id,a) values (532,85);
+insert into t (id,a) values (532,86);
+insert into t (id,a) values (532,87);
+insert into t (id,a) values (532,88);
+insert into t (id,a) values (532,89);
+insert into t (id,a) values (532,90);
+insert into t (id,a) values (532,91);
+insert into t (id,a) values (532,92);
+insert into t (id,a) values (532,93);
+insert into t (id,a) values (532,94);
+insert into t (id,a) values (532,95);
+insert into t (id,a) values (532,96);
+insert into t (id,a) values (532,97);
+insert into t (id,a) values (532,98);
+insert into t (id,a) values (532,99);
+insert into t (id,a) values (533,0);
+insert into t (id,a) values (533,1);
+insert into t (id,a) values (533,2);
+insert into t (id,a) values (533,3);
+insert into t (id,a) values (533,4);
+insert into t (id,a) values (533,5);
+insert into t (id,a) values (533,6);
+insert into t (id,a) values (533,7);
+insert into t (id,a) values (533,8);
+insert into t (id,a) values (533,9);
+insert into t (id,a) values (533,10);
+insert into t (id,a) values (533,11);
+insert into t (id,a) values (533,12);
+insert into t (id,a) values (533,13);
+insert into t (id,a) values (533,14);
+insert into t (id,a) values (533,15);
+insert into t (id,a) values (533,16);
+insert into t (id,a) values (533,17);
+insert into t (id,a) values (533,18);
+insert into t (id,a) values (533,19);
+insert into t (id,a) values (533,20);
+insert into t (id,a) values (533,21);
+insert into t (id,a) values (533,22);
+insert into t (id,a) values (533,23);
+insert into t (id,a) values (533,24);
+insert into t (id,a) values (533,25);
+insert into t (id,a) values (533,26);
+insert into t (id,a) values (533,27);
+insert into t (id,a) values (533,28);
+insert into t (id,a) values (533,29);
+insert into t (id,a) values (533,30);
+insert into t (id,a) values (533,31);
+insert into t (id,a) values (533,32);
+insert into t (id,a) values (533,33);
+insert into t (id,a) values (533,34);
+insert into t (id,a) values (533,35);
+insert into t (id,a) values (533,36);
+insert into t (id,a) values (533,37);
+insert into t (id,a) values (533,38);
+insert into t (id,a) values (533,39);
+insert into t (id,a) values (533,40);
+insert into t (id,a) values (533,41);
+insert into t (id,a) values (533,42);
+insert into t (id,a) values (533,43);
+insert into t (id,a) values (533,44);
+insert into t (id,a) values (533,45);
+insert into t (id,a) values (533,46);
+insert into t (id,a) values (533,47);
+insert into t (id,a) values (533,48);
+insert into t (id,a) values (533,49);
+insert into t (id,a) values (533,50);
+insert into t (id,a) values (533,51);
+insert into t (id,a) values (533,52);
+insert into t (id,a) values (533,53);
+insert into t (id,a) values (533,54);
+insert into t (id,a) values (533,55);
+insert into t (id,a) values (533,56);
+insert into t (id,a) values (533,57);
+insert into t (id,a) values (533,58);
+insert into t (id,a) values (533,59);
+insert into t (id,a) values (533,60);
+insert into t (id,a) values (533,61);
+insert into t (id,a) values (533,62);
+insert into t (id,a) values (533,63);
+insert into t (id,a) values (533,64);
+insert into t (id,a) values (533,65);
+insert into t (id,a) values (533,66);
+insert into t (id,a) values (533,67);
+insert into t (id,a) values (533,68);
+insert into t (id,a) values (533,69);
+insert into t (id,a) values (533,70);
+insert into t (id,a) values (533,71);
+insert into t (id,a) values (533,72);
+insert into t (id,a) values (533,73);
+insert into t (id,a) values (533,74);
+insert into t (id,a) values (533,75);
+insert into t (id,a) values (533,76);
+insert into t (id,a) values (533,77);
+insert into t (id,a) values (533,78);
+insert into t (id,a) values (533,79);
+insert into t (id,a) values (533,80);
+insert into t (id,a) values (533,81);
+insert into t (id,a) values (533,82);
+insert into t (id,a) values (533,83);
+insert into t (id,a) values (533,84);
+insert into t (id,a) values (533,85);
+insert into t (id,a) values (533,86);
+insert into t (id,a) values (533,87);
+insert into t (id,a) values (533,88);
+insert into t (id,a) values (533,89);
+insert into t (id,a) values (533,90);
+insert into t (id,a) values (533,91);
+insert into t (id,a) values (533,92);
+insert into t (id,a) values (533,93);
+insert into t (id,a) values (533,94);
+insert into t (id,a) values (533,95);
+insert into t (id,a) values (533,96);
+insert into t (id,a) values (533,97);
+insert into t (id,a) values (533,98);
+insert into t (id,a) values (533,99);
+insert into t (id,a) values (534,0);
+insert into t (id,a) values (534,1);
+insert into t (id,a) values (534,2);
+insert into t (id,a) values (534,3);
+insert into t (id,a) values (534,4);
+insert into t (id,a) values (534,5);
+insert into t (id,a) values (534,6);
+insert into t (id,a) values (534,7);
+insert into t (id,a) values (534,8);
+insert into t (id,a) values (534,9);
+insert into t (id,a) values (534,10);
+insert into t (id,a) values (534,11);
+insert into t (id,a) values (534,12);
+insert into t (id,a) values (534,13);
+insert into t (id,a) values (534,14);
+insert into t (id,a) values (534,15);
+insert into t (id,a) values (534,16);
+insert into t (id,a) values (534,17);
+insert into t (id,a) values (534,18);
+insert into t (id,a) values (534,19);
+insert into t (id,a) values (534,20);
+insert into t (id,a) values (534,21);
+insert into t (id,a) values (534,22);
+insert into t (id,a) values (534,23);
+insert into t (id,a) values (534,24);
+insert into t (id,a) values (534,25);
+insert into t (id,a) values (534,26);
+insert into t (id,a) values (534,27);
+insert into t (id,a) values (534,28);
+insert into t (id,a) values (534,29);
+insert into t (id,a) values (534,30);
+insert into t (id,a) values (534,31);
+insert into t (id,a) values (534,32);
+insert into t (id,a) values (534,33);
+insert into t (id,a) values (534,34);
+insert into t (id,a) values (534,35);
+insert into t (id,a) values (534,36);
+insert into t (id,a) values (534,37);
+insert into t (id,a) values (534,38);
+insert into t (id,a) values (534,39);
+insert into t (id,a) values (534,40);
+insert into t (id,a) values (534,41);
+insert into t (id,a) values (534,42);
+insert into t (id,a) values (534,43);
+insert into t (id,a) values (534,44);
+insert into t (id,a) values (534,45);
+insert into t (id,a) values (534,46);
+insert into t (id,a) values (534,47);
+insert into t (id,a) values (534,48);
+insert into t (id,a) values (534,49);
+insert into t (id,a) values (534,50);
+insert into t (id,a) values (534,51);
+insert into t (id,a) values (534,52);
+insert into t (id,a) values (534,53);
+insert into t (id,a) values (534,54);
+insert into t (id,a) values (534,55);
+insert into t (id,a) values (534,56);
+insert into t (id,a) values (534,57);
+insert into t (id,a) values (534,58);
+insert into t (id,a) values (534,59);
+insert into t (id,a) values (534,60);
+insert into t (id,a) values (534,61);
+insert into t (id,a) values (534,62);
+insert into t (id,a) values (534,63);
+insert into t (id,a) values (534,64);
+insert into t (id,a) values (534,65);
+insert into t (id,a) values (534,66);
+insert into t (id,a) values (534,67);
+insert into t (id,a) values (534,68);
+insert into t (id,a) values (534,69);
+insert into t (id,a) values (534,70);
+insert into t (id,a) values (534,71);
+insert into t (id,a) values (534,72);
+insert into t (id,a) values (534,73);
+insert into t (id,a) values (534,74);
+insert into t (id,a) values (534,75);
+insert into t (id,a) values (534,76);
+insert into t (id,a) values (534,77);
+insert into t (id,a) values (534,78);
+insert into t (id,a) values (534,79);
+insert into t (id,a) values (534,80);
+insert into t (id,a) values (534,81);
+insert into t (id,a) values (534,82);
+insert into t (id,a) values (534,83);
+insert into t (id,a) values (534,84);
+insert into t (id,a) values (534,85);
+insert into t (id,a) values (534,86);
+insert into t (id,a) values (534,87);
+insert into t (id,a) values (534,88);
+insert into t (id,a) values (534,89);
+insert into t (id,a) values (534,90);
+insert into t (id,a) values (534,91);
+insert into t (id,a) values (534,92);
+insert into t (id,a) values (534,93);
+insert into t (id,a) values (534,94);
+insert into t (id,a) values (534,95);
+insert into t (id,a) values (534,96);
+insert into t (id,a) values (534,97);
+insert into t (id,a) values (534,98);
+insert into t (id,a) values (534,99);
+insert into t (id,a) values (535,0);
+insert into t (id,a) values (535,1);
+insert into t (id,a) values (535,2);
+insert into t (id,a) values (535,3);
+insert into t (id,a) values (535,4);
+insert into t (id,a) values (535,5);
+insert into t (id,a) values (535,6);
+insert into t (id,a) values (535,7);
+insert into t (id,a) values (535,8);
+insert into t (id,a) values (535,9);
+insert into t (id,a) values (535,10);
+insert into t (id,a) values (535,11);
+insert into t (id,a) values (535,12);
+insert into t (id,a) values (535,13);
+insert into t (id,a) values (535,14);
+insert into t (id,a) values (535,15);
+insert into t (id,a) values (535,16);
+insert into t (id,a) values (535,17);
+insert into t (id,a) values (535,18);
+insert into t (id,a) values (535,19);
+insert into t (id,a) values (535,20);
+insert into t (id,a) values (535,21);
+insert into t (id,a) values (535,22);
+insert into t (id,a) values (535,23);
+insert into t (id,a) values (535,24);
+insert into t (id,a) values (535,25);
+insert into t (id,a) values (535,26);
+insert into t (id,a) values (535,27);
+insert into t (id,a) values (535,28);
+insert into t (id,a) values (535,29);
+insert into t (id,a) values (535,30);
+insert into t (id,a) values (535,31);
+insert into t (id,a) values (535,32);
+insert into t (id,a) values (535,33);
+insert into t (id,a) values (535,34);
+insert into t (id,a) values (535,35);
+insert into t (id,a) values (535,36);
+insert into t (id,a) values (535,37);
+insert into t (id,a) values (535,38);
+insert into t (id,a) values (535,39);
+insert into t (id,a) values (535,40);
+insert into t (id,a) values (535,41);
+insert into t (id,a) values (535,42);
+insert into t (id,a) values (535,43);
+insert into t (id,a) values (535,44);
+insert into t (id,a) values (535,45);
+insert into t (id,a) values (535,46);
+insert into t (id,a) values (535,47);
+insert into t (id,a) values (535,48);
+insert into t (id,a) values (535,49);
+insert into t (id,a) values (535,50);
+insert into t (id,a) values (535,51);
+insert into t (id,a) values (535,52);
+insert into t (id,a) values (535,53);
+insert into t (id,a) values (535,54);
+insert into t (id,a) values (535,55);
+insert into t (id,a) values (535,56);
+insert into t (id,a) values (535,57);
+insert into t (id,a) values (535,58);
+insert into t (id,a) values (535,59);
+insert into t (id,a) values (535,60);
+insert into t (id,a) values (535,61);
+insert into t (id,a) values (535,62);
+insert into t (id,a) values (535,63);
+insert into t (id,a) values (535,64);
+insert into t (id,a) values (535,65);
+insert into t (id,a) values (535,66);
+insert into t (id,a) values (535,67);
+insert into t (id,a) values (535,68);
+insert into t (id,a) values (535,69);
+insert into t (id,a) values (535,70);
+insert into t (id,a) values (535,71);
+insert into t (id,a) values (535,72);
+insert into t (id,a) values (535,73);
+insert into t (id,a) values (535,74);
+insert into t (id,a) values (535,75);
+insert into t (id,a) values (535,76);
+insert into t (id,a) values (535,77);
+insert into t (id,a) values (535,78);
+insert into t (id,a) values (535,79);
+insert into t (id,a) values (535,80);
+insert into t (id,a) values (535,81);
+insert into t (id,a) values (535,82);
+insert into t (id,a) values (535,83);
+insert into t (id,a) values (535,84);
+insert into t (id,a) values (535,85);
+insert into t (id,a) values (535,86);
+insert into t (id,a) values (535,87);
+insert into t (id,a) values (535,88);
+insert into t (id,a) values (535,89);
+insert into t (id,a) values (535,90);
+insert into t (id,a) values (535,91);
+insert into t (id,a) values (535,92);
+insert into t (id,a) values (535,93);
+insert into t (id,a) values (535,94);
+insert into t (id,a) values (535,95);
+insert into t (id,a) values (535,96);
+insert into t (id,a) values (535,97);
+insert into t (id,a) values (535,98);
+insert into t (id,a) values (535,99);
+insert into t (id,a) values (536,0);
+insert into t (id,a) values (536,1);
+insert into t (id,a) values (536,2);
+insert into t (id,a) values (536,3);
+insert into t (id,a) values (536,4);
+insert into t (id,a) values (536,5);
+insert into t (id,a) values (536,6);
+insert into t (id,a) values (536,7);
+insert into t (id,a) values (536,8);
+insert into t (id,a) values (536,9);
+insert into t (id,a) values (536,10);
+insert into t (id,a) values (536,11);
+insert into t (id,a) values (536,12);
+insert into t (id,a) values (536,13);
+insert into t (id,a) values (536,14);
+insert into t (id,a) values (536,15);
+insert into t (id,a) values (536,16);
+insert into t (id,a) values (536,17);
+insert into t (id,a) values (536,18);
+insert into t (id,a) values (536,19);
+insert into t (id,a) values (536,20);
+insert into t (id,a) values (536,21);
+insert into t (id,a) values (536,22);
+insert into t (id,a) values (536,23);
+insert into t (id,a) values (536,24);
+insert into t (id,a) values (536,25);
+insert into t (id,a) values (536,26);
+insert into t (id,a) values (536,27);
+insert into t (id,a) values (536,28);
+insert into t (id,a) values (536,29);
+insert into t (id,a) values (536,30);
+insert into t (id,a) values (536,31);
+insert into t (id,a) values (536,32);
+insert into t (id,a) values (536,33);
+insert into t (id,a) values (536,34);
+insert into t (id,a) values (536,35);
+insert into t (id,a) values (536,36);
+insert into t (id,a) values (536,37);
+insert into t (id,a) values (536,38);
+insert into t (id,a) values (536,39);
+insert into t (id,a) values (536,40);
+insert into t (id,a) values (536,41);
+insert into t (id,a) values (536,42);
+insert into t (id,a) values (536,43);
+insert into t (id,a) values (536,44);
+insert into t (id,a) values (536,45);
+insert into t (id,a) values (536,46);
+insert into t (id,a) values (536,47);
+insert into t (id,a) values (536,48);
+insert into t (id,a) values (536,49);
+insert into t (id,a) values (536,50);
+insert into t (id,a) values (536,51);
+insert into t (id,a) values (536,52);
+insert into t (id,a) values (536,53);
+insert into t (id,a) values (536,54);
+insert into t (id,a) values (536,55);
+insert into t (id,a) values (536,56);
+insert into t (id,a) values (536,57);
+insert into t (id,a) values (536,58);
+insert into t (id,a) values (536,59);
+insert into t (id,a) values (536,60);
+insert into t (id,a) values (536,61);
+insert into t (id,a) values (536,62);
+insert into t (id,a) values (536,63);
+insert into t (id,a) values (536,64);
+insert into t (id,a) values (536,65);
+insert into t (id,a) values (536,66);
+insert into t (id,a) values (536,67);
+insert into t (id,a) values (536,68);
+insert into t (id,a) values (536,69);
+insert into t (id,a) values (536,70);
+insert into t (id,a) values (536,71);
+insert into t (id,a) values (536,72);
+insert into t (id,a) values (536,73);
+insert into t (id,a) values (536,74);
+insert into t (id,a) values (536,75);
+insert into t (id,a) values (536,76);
+insert into t (id,a) values (536,77);
+insert into t (id,a) values (536,78);
+insert into t (id,a) values (536,79);
+insert into t (id,a) values (536,80);
+insert into t (id,a) values (536,81);
+insert into t (id,a) values (536,82);
+insert into t (id,a) values (536,83);
+insert into t (id,a) values (536,84);
+insert into t (id,a) values (536,85);
+insert into t (id,a) values (536,86);
+insert into t (id,a) values (536,87);
+insert into t (id,a) values (536,88);
+insert into t (id,a) values (536,89);
+insert into t (id,a) values (536,90);
+insert into t (id,a) values (536,91);
+insert into t (id,a) values (536,92);
+insert into t (id,a) values (536,93);
+insert into t (id,a) values (536,94);
+insert into t (id,a) values (536,95);
+insert into t (id,a) values (536,96);
+insert into t (id,a) values (536,97);
+insert into t (id,a) values (536,98);
+insert into t (id,a) values (536,99);
+insert into t (id,a) values (537,0);
+insert into t (id,a) values (537,1);
+insert into t (id,a) values (537,2);
+insert into t (id,a) values (537,3);
+insert into t (id,a) values (537,4);
+insert into t (id,a) values (537,5);
+insert into t (id,a) values (537,6);
+insert into t (id,a) values (537,7);
+insert into t (id,a) values (537,8);
+insert into t (id,a) values (537,9);
+insert into t (id,a) values (537,10);
+insert into t (id,a) values (537,11);
+insert into t (id,a) values (537,12);
+insert into t (id,a) values (537,13);
+insert into t (id,a) values (537,14);
+insert into t (id,a) values (537,15);
+insert into t (id,a) values (537,16);
+insert into t (id,a) values (537,17);
+insert into t (id,a) values (537,18);
+insert into t (id,a) values (537,19);
+insert into t (id,a) values (537,20);
+insert into t (id,a) values (537,21);
+insert into t (id,a) values (537,22);
+insert into t (id,a) values (537,23);
+insert into t (id,a) values (537,24);
+insert into t (id,a) values (537,25);
+insert into t (id,a) values (537,26);
+insert into t (id,a) values (537,27);
+insert into t (id,a) values (537,28);
+insert into t (id,a) values (537,29);
+insert into t (id,a) values (537,30);
+insert into t (id,a) values (537,31);
+insert into t (id,a) values (537,32);
+insert into t (id,a) values (537,33);
+insert into t (id,a) values (537,34);
+insert into t (id,a) values (537,35);
+insert into t (id,a) values (537,36);
+insert into t (id,a) values (537,37);
+insert into t (id,a) values (537,38);
+insert into t (id,a) values (537,39);
+insert into t (id,a) values (537,40);
+insert into t (id,a) values (537,41);
+insert into t (id,a) values (537,42);
+insert into t (id,a) values (537,43);
+insert into t (id,a) values (537,44);
+insert into t (id,a) values (537,45);
+insert into t (id,a) values (537,46);
+insert into t (id,a) values (537,47);
+insert into t (id,a) values (537,48);
+insert into t (id,a) values (537,49);
+insert into t (id,a) values (537,50);
+insert into t (id,a) values (537,51);
+insert into t (id,a) values (537,52);
+insert into t (id,a) values (537,53);
+insert into t (id,a) values (537,54);
+insert into t (id,a) values (537,55);
+insert into t (id,a) values (537,56);
+insert into t (id,a) values (537,57);
+insert into t (id,a) values (537,58);
+insert into t (id,a) values (537,59);
+insert into t (id,a) values (537,60);
+insert into t (id,a) values (537,61);
+insert into t (id,a) values (537,62);
+insert into t (id,a) values (537,63);
+insert into t (id,a) values (537,64);
+insert into t (id,a) values (537,65);
+insert into t (id,a) values (537,66);
+insert into t (id,a) values (537,67);
+insert into t (id,a) values (537,68);
+insert into t (id,a) values (537,69);
+insert into t (id,a) values (537,70);
+insert into t (id,a) values (537,71);
+insert into t (id,a) values (537,72);
+insert into t (id,a) values (537,73);
+insert into t (id,a) values (537,74);
+insert into t (id,a) values (537,75);
+insert into t (id,a) values (537,76);
+insert into t (id,a) values (537,77);
+insert into t (id,a) values (537,78);
+insert into t (id,a) values (537,79);
+insert into t (id,a) values (537,80);
+insert into t (id,a) values (537,81);
+insert into t (id,a) values (537,82);
+insert into t (id,a) values (537,83);
+insert into t (id,a) values (537,84);
+insert into t (id,a) values (537,85);
+insert into t (id,a) values (537,86);
+insert into t (id,a) values (537,87);
+insert into t (id,a) values (537,88);
+insert into t (id,a) values (537,89);
+insert into t (id,a) values (537,90);
+insert into t (id,a) values (537,91);
+insert into t (id,a) values (537,92);
+insert into t (id,a) values (537,93);
+insert into t (id,a) values (537,94);
+insert into t (id,a) values (537,95);
+insert into t (id,a) values (537,96);
+insert into t (id,a) values (537,97);
+insert into t (id,a) values (537,98);
+insert into t (id,a) values (537,99);
+insert into t (id,a) values (538,0);
+insert into t (id,a) values (538,1);
+insert into t (id,a) values (538,2);
+insert into t (id,a) values (538,3);
+insert into t (id,a) values (538,4);
+insert into t (id,a) values (538,5);
+insert into t (id,a) values (538,6);
+insert into t (id,a) values (538,7);
+insert into t (id,a) values (538,8);
+insert into t (id,a) values (538,9);
+insert into t (id,a) values (538,10);
+insert into t (id,a) values (538,11);
+insert into t (id,a) values (538,12);
+insert into t (id,a) values (538,13);
+insert into t (id,a) values (538,14);
+insert into t (id,a) values (538,15);
+insert into t (id,a) values (538,16);
+insert into t (id,a) values (538,17);
+insert into t (id,a) values (538,18);
+insert into t (id,a) values (538,19);
+insert into t (id,a) values (538,20);
+insert into t (id,a) values (538,21);
+insert into t (id,a) values (538,22);
+insert into t (id,a) values (538,23);
+insert into t (id,a) values (538,24);
+insert into t (id,a) values (538,25);
+insert into t (id,a) values (538,26);
+insert into t (id,a) values (538,27);
+insert into t (id,a) values (538,28);
+insert into t (id,a) values (538,29);
+insert into t (id,a) values (538,30);
+insert into t (id,a) values (538,31);
+insert into t (id,a) values (538,32);
+insert into t (id,a) values (538,33);
+insert into t (id,a) values (538,34);
+insert into t (id,a) values (538,35);
+insert into t (id,a) values (538,36);
+insert into t (id,a) values (538,37);
+insert into t (id,a) values (538,38);
+insert into t (id,a) values (538,39);
+insert into t (id,a) values (538,40);
+insert into t (id,a) values (538,41);
+insert into t (id,a) values (538,42);
+insert into t (id,a) values (538,43);
+insert into t (id,a) values (538,44);
+insert into t (id,a) values (538,45);
+insert into t (id,a) values (538,46);
+insert into t (id,a) values (538,47);
+insert into t (id,a) values (538,48);
+insert into t (id,a) values (538,49);
+insert into t (id,a) values (538,50);
+insert into t (id,a) values (538,51);
+insert into t (id,a) values (538,52);
+insert into t (id,a) values (538,53);
+insert into t (id,a) values (538,54);
+insert into t (id,a) values (538,55);
+insert into t (id,a) values (538,56);
+insert into t (id,a) values (538,57);
+insert into t (id,a) values (538,58);
+insert into t (id,a) values (538,59);
+insert into t (id,a) values (538,60);
+insert into t (id,a) values (538,61);
+insert into t (id,a) values (538,62);
+insert into t (id,a) values (538,63);
+insert into t (id,a) values (538,64);
+insert into t (id,a) values (538,65);
+insert into t (id,a) values (538,66);
+insert into t (id,a) values (538,67);
+insert into t (id,a) values (538,68);
+insert into t (id,a) values (538,69);
+insert into t (id,a) values (538,70);
+insert into t (id,a) values (538,71);
+insert into t (id,a) values (538,72);
+insert into t (id,a) values (538,73);
+insert into t (id,a) values (538,74);
+insert into t (id,a) values (538,75);
+insert into t (id,a) values (538,76);
+insert into t (id,a) values (538,77);
+insert into t (id,a) values (538,78);
+insert into t (id,a) values (538,79);
+insert into t (id,a) values (538,80);
+insert into t (id,a) values (538,81);
+insert into t (id,a) values (538,82);
+insert into t (id,a) values (538,83);
+insert into t (id,a) values (538,84);
+insert into t (id,a) values (538,85);
+insert into t (id,a) values (538,86);
+insert into t (id,a) values (538,87);
+insert into t (id,a) values (538,88);
+insert into t (id,a) values (538,89);
+insert into t (id,a) values (538,90);
+insert into t (id,a) values (538,91);
+insert into t (id,a) values (538,92);
+insert into t (id,a) values (538,93);
+insert into t (id,a) values (538,94);
+insert into t (id,a) values (538,95);
+insert into t (id,a) values (538,96);
+insert into t (id,a) values (538,97);
+insert into t (id,a) values (538,98);
+insert into t (id,a) values (538,99);
+insert into t (id,a) values (539,0);
+insert into t (id,a) values (539,1);
+insert into t (id,a) values (539,2);
+insert into t (id,a) values (539,3);
+insert into t (id,a) values (539,4);
+insert into t (id,a) values (539,5);
+insert into t (id,a) values (539,6);
+insert into t (id,a) values (539,7);
+insert into t (id,a) values (539,8);
+insert into t (id,a) values (539,9);
+insert into t (id,a) values (539,10);
+insert into t (id,a) values (539,11);
+insert into t (id,a) values (539,12);
+insert into t (id,a) values (539,13);
+insert into t (id,a) values (539,14);
+insert into t (id,a) values (539,15);
+insert into t (id,a) values (539,16);
+insert into t (id,a) values (539,17);
+insert into t (id,a) values (539,18);
+insert into t (id,a) values (539,19);
+insert into t (id,a) values (539,20);
+insert into t (id,a) values (539,21);
+insert into t (id,a) values (539,22);
+insert into t (id,a) values (539,23);
+insert into t (id,a) values (539,24);
+insert into t (id,a) values (539,25);
+insert into t (id,a) values (539,26);
+insert into t (id,a) values (539,27);
+insert into t (id,a) values (539,28);
+insert into t (id,a) values (539,29);
+insert into t (id,a) values (539,30);
+insert into t (id,a) values (539,31);
+insert into t (id,a) values (539,32);
+insert into t (id,a) values (539,33);
+insert into t (id,a) values (539,34);
+insert into t (id,a) values (539,35);
+insert into t (id,a) values (539,36);
+insert into t (id,a) values (539,37);
+insert into t (id,a) values (539,38);
+insert into t (id,a) values (539,39);
+insert into t (id,a) values (539,40);
+insert into t (id,a) values (539,41);
+insert into t (id,a) values (539,42);
+insert into t (id,a) values (539,43);
+insert into t (id,a) values (539,44);
+insert into t (id,a) values (539,45);
+insert into t (id,a) values (539,46);
+insert into t (id,a) values (539,47);
+insert into t (id,a) values (539,48);
+insert into t (id,a) values (539,49);
+insert into t (id,a) values (539,50);
+insert into t (id,a) values (539,51);
+insert into t (id,a) values (539,52);
+insert into t (id,a) values (539,53);
+insert into t (id,a) values (539,54);
+insert into t (id,a) values (539,55);
+insert into t (id,a) values (539,56);
+insert into t (id,a) values (539,57);
+insert into t (id,a) values (539,58);
+insert into t (id,a) values (539,59);
+insert into t (id,a) values (539,60);
+insert into t (id,a) values (539,61);
+insert into t (id,a) values (539,62);
+insert into t (id,a) values (539,63);
+insert into t (id,a) values (539,64);
+insert into t (id,a) values (539,65);
+insert into t (id,a) values (539,66);
+insert into t (id,a) values (539,67);
+insert into t (id,a) values (539,68);
+insert into t (id,a) values (539,69);
+insert into t (id,a) values (539,70);
+insert into t (id,a) values (539,71);
+insert into t (id,a) values (539,72);
+insert into t (id,a) values (539,73);
+insert into t (id,a) values (539,74);
+insert into t (id,a) values (539,75);
+insert into t (id,a) values (539,76);
+insert into t (id,a) values (539,77);
+insert into t (id,a) values (539,78);
+insert into t (id,a) values (539,79);
+insert into t (id,a) values (539,80);
+insert into t (id,a) values (539,81);
+insert into t (id,a) values (539,82);
+insert into t (id,a) values (539,83);
+insert into t (id,a) values (539,84);
+insert into t (id,a) values (539,85);
+insert into t (id,a) values (539,86);
+insert into t (id,a) values (539,87);
+insert into t (id,a) values (539,88);
+insert into t (id,a) values (539,89);
+insert into t (id,a) values (539,90);
+insert into t (id,a) values (539,91);
+insert into t (id,a) values (539,92);
+insert into t (id,a) values (539,93);
+insert into t (id,a) values (539,94);
+insert into t (id,a) values (539,95);
+insert into t (id,a) values (539,96);
+insert into t (id,a) values (539,97);
+insert into t (id,a) values (539,98);
+insert into t (id,a) values (539,99);
+insert into t (id,a) values (540,0);
+insert into t (id,a) values (540,1);
+insert into t (id,a) values (540,2);
+insert into t (id,a) values (540,3);
+insert into t (id,a) values (540,4);
+insert into t (id,a) values (540,5);
+insert into t (id,a) values (540,6);
+insert into t (id,a) values (540,7);
+insert into t (id,a) values (540,8);
+insert into t (id,a) values (540,9);
+insert into t (id,a) values (540,10);
+insert into t (id,a) values (540,11);
+insert into t (id,a) values (540,12);
+insert into t (id,a) values (540,13);
+insert into t (id,a) values (540,14);
+insert into t (id,a) values (540,15);
+insert into t (id,a) values (540,16);
+insert into t (id,a) values (540,17);
+insert into t (id,a) values (540,18);
+insert into t (id,a) values (540,19);
+insert into t (id,a) values (540,20);
+insert into t (id,a) values (540,21);
+insert into t (id,a) values (540,22);
+insert into t (id,a) values (540,23);
+insert into t (id,a) values (540,24);
+insert into t (id,a) values (540,25);
+insert into t (id,a) values (540,26);
+insert into t (id,a) values (540,27);
+insert into t (id,a) values (540,28);
+insert into t (id,a) values (540,29);
+insert into t (id,a) values (540,30);
+insert into t (id,a) values (540,31);
+insert into t (id,a) values (540,32);
+insert into t (id,a) values (540,33);
+insert into t (id,a) values (540,34);
+insert into t (id,a) values (540,35);
+insert into t (id,a) values (540,36);
+insert into t (id,a) values (540,37);
+insert into t (id,a) values (540,38);
+insert into t (id,a) values (540,39);
+insert into t (id,a) values (540,40);
+insert into t (id,a) values (540,41);
+insert into t (id,a) values (540,42);
+insert into t (id,a) values (540,43);
+insert into t (id,a) values (540,44);
+insert into t (id,a) values (540,45);
+insert into t (id,a) values (540,46);
+insert into t (id,a) values (540,47);
+insert into t (id,a) values (540,48);
+insert into t (id,a) values (540,49);
+insert into t (id,a) values (540,50);
+insert into t (id,a) values (540,51);
+insert into t (id,a) values (540,52);
+insert into t (id,a) values (540,53);
+insert into t (id,a) values (540,54);
+insert into t (id,a) values (540,55);
+insert into t (id,a) values (540,56);
+insert into t (id,a) values (540,57);
+insert into t (id,a) values (540,58);
+insert into t (id,a) values (540,59);
+insert into t (id,a) values (540,60);
+insert into t (id,a) values (540,61);
+insert into t (id,a) values (540,62);
+insert into t (id,a) values (540,63);
+insert into t (id,a) values (540,64);
+insert into t (id,a) values (540,65);
+insert into t (id,a) values (540,66);
+insert into t (id,a) values (540,67);
+insert into t (id,a) values (540,68);
+insert into t (id,a) values (540,69);
+insert into t (id,a) values (540,70);
+insert into t (id,a) values (540,71);
+insert into t (id,a) values (540,72);
+insert into t (id,a) values (540,73);
+insert into t (id,a) values (540,74);
+insert into t (id,a) values (540,75);
+insert into t (id,a) values (540,76);
+insert into t (id,a) values (540,77);
+insert into t (id,a) values (540,78);
+insert into t (id,a) values (540,79);
+insert into t (id,a) values (540,80);
+insert into t (id,a) values (540,81);
+insert into t (id,a) values (540,82);
+insert into t (id,a) values (540,83);
+insert into t (id,a) values (540,84);
+insert into t (id,a) values (540,85);
+insert into t (id,a) values (540,86);
+insert into t (id,a) values (540,87);
+insert into t (id,a) values (540,88);
+insert into t (id,a) values (540,89);
+insert into t (id,a) values (540,90);
+insert into t (id,a) values (540,91);
+insert into t (id,a) values (540,92);
+insert into t (id,a) values (540,93);
+insert into t (id,a) values (540,94);
+insert into t (id,a) values (540,95);
+insert into t (id,a) values (540,96);
+insert into t (id,a) values (540,97);
+insert into t (id,a) values (540,98);
+insert into t (id,a) values (540,99);
+insert into t (id,a) values (541,0);
+insert into t (id,a) values (541,1);
+insert into t (id,a) values (541,2);
+insert into t (id,a) values (541,3);
+insert into t (id,a) values (541,4);
+insert into t (id,a) values (541,5);
+insert into t (id,a) values (541,6);
+insert into t (id,a) values (541,7);
+insert into t (id,a) values (541,8);
+insert into t (id,a) values (541,9);
+insert into t (id,a) values (541,10);
+insert into t (id,a) values (541,11);
+insert into t (id,a) values (541,12);
+insert into t (id,a) values (541,13);
+insert into t (id,a) values (541,14);
+insert into t (id,a) values (541,15);
+insert into t (id,a) values (541,16);
+insert into t (id,a) values (541,17);
+insert into t (id,a) values (541,18);
+insert into t (id,a) values (541,19);
+insert into t (id,a) values (541,20);
+insert into t (id,a) values (541,21);
+insert into t (id,a) values (541,22);
+insert into t (id,a) values (541,23);
+insert into t (id,a) values (541,24);
+insert into t (id,a) values (541,25);
+insert into t (id,a) values (541,26);
+insert into t (id,a) values (541,27);
+insert into t (id,a) values (541,28);
+insert into t (id,a) values (541,29);
+insert into t (id,a) values (541,30);
+insert into t (id,a) values (541,31);
+insert into t (id,a) values (541,32);
+insert into t (id,a) values (541,33);
+insert into t (id,a) values (541,34);
+insert into t (id,a) values (541,35);
+insert into t (id,a) values (541,36);
+insert into t (id,a) values (541,37);
+insert into t (id,a) values (541,38);
+insert into t (id,a) values (541,39);
+insert into t (id,a) values (541,40);
+insert into t (id,a) values (541,41);
+insert into t (id,a) values (541,42);
+insert into t (id,a) values (541,43);
+insert into t (id,a) values (541,44);
+insert into t (id,a) values (541,45);
+insert into t (id,a) values (541,46);
+insert into t (id,a) values (541,47);
+insert into t (id,a) values (541,48);
+insert into t (id,a) values (541,49);
+insert into t (id,a) values (541,50);
+insert into t (id,a) values (541,51);
+insert into t (id,a) values (541,52);
+insert into t (id,a) values (541,53);
+insert into t (id,a) values (541,54);
+insert into t (id,a) values (541,55);
+insert into t (id,a) values (541,56);
+insert into t (id,a) values (541,57);
+insert into t (id,a) values (541,58);
+insert into t (id,a) values (541,59);
+insert into t (id,a) values (541,60);
+insert into t (id,a) values (541,61);
+insert into t (id,a) values (541,62);
+insert into t (id,a) values (541,63);
+insert into t (id,a) values (541,64);
+insert into t (id,a) values (541,65);
+insert into t (id,a) values (541,66);
+insert into t (id,a) values (541,67);
+insert into t (id,a) values (541,68);
+insert into t (id,a) values (541,69);
+insert into t (id,a) values (541,70);
+insert into t (id,a) values (541,71);
+insert into t (id,a) values (541,72);
+insert into t (id,a) values (541,73);
+insert into t (id,a) values (541,74);
+insert into t (id,a) values (541,75);
+insert into t (id,a) values (541,76);
+insert into t (id,a) values (541,77);
+insert into t (id,a) values (541,78);
+insert into t (id,a) values (541,79);
+insert into t (id,a) values (541,80);
+insert into t (id,a) values (541,81);
+insert into t (id,a) values (541,82);
+insert into t (id,a) values (541,83);
+insert into t (id,a) values (541,84);
+insert into t (id,a) values (541,85);
+insert into t (id,a) values (541,86);
+insert into t (id,a) values (541,87);
+insert into t (id,a) values (541,88);
+insert into t (id,a) values (541,89);
+insert into t (id,a) values (541,90);
+insert into t (id,a) values (541,91);
+insert into t (id,a) values (541,92);
+insert into t (id,a) values (541,93);
+insert into t (id,a) values (541,94);
+insert into t (id,a) values (541,95);
+insert into t (id,a) values (541,96);
+insert into t (id,a) values (541,97);
+insert into t (id,a) values (541,98);
+insert into t (id,a) values (541,99);
+insert into t (id,a) values (542,0);
+insert into t (id,a) values (542,1);
+insert into t (id,a) values (542,2);
+insert into t (id,a) values (542,3);
+insert into t (id,a) values (542,4);
+insert into t (id,a) values (542,5);
+insert into t (id,a) values (542,6);
+insert into t (id,a) values (542,7);
+insert into t (id,a) values (542,8);
+insert into t (id,a) values (542,9);
+insert into t (id,a) values (542,10);
+insert into t (id,a) values (542,11);
+insert into t (id,a) values (542,12);
+insert into t (id,a) values (542,13);
+insert into t (id,a) values (542,14);
+insert into t (id,a) values (542,15);
+insert into t (id,a) values (542,16);
+insert into t (id,a) values (542,17);
+insert into t (id,a) values (542,18);
+insert into t (id,a) values (542,19);
+insert into t (id,a) values (542,20);
+insert into t (id,a) values (542,21);
+insert into t (id,a) values (542,22);
+insert into t (id,a) values (542,23);
+insert into t (id,a) values (542,24);
+insert into t (id,a) values (542,25);
+insert into t (id,a) values (542,26);
+insert into t (id,a) values (542,27);
+insert into t (id,a) values (542,28);
+insert into t (id,a) values (542,29);
+insert into t (id,a) values (542,30);
+insert into t (id,a) values (542,31);
+insert into t (id,a) values (542,32);
+insert into t (id,a) values (542,33);
+insert into t (id,a) values (542,34);
+insert into t (id,a) values (542,35);
+insert into t (id,a) values (542,36);
+insert into t (id,a) values (542,37);
+insert into t (id,a) values (542,38);
+insert into t (id,a) values (542,39);
+insert into t (id,a) values (542,40);
+insert into t (id,a) values (542,41);
+insert into t (id,a) values (542,42);
+insert into t (id,a) values (542,43);
+insert into t (id,a) values (542,44);
+insert into t (id,a) values (542,45);
+insert into t (id,a) values (542,46);
+insert into t (id,a) values (542,47);
+insert into t (id,a) values (542,48);
+insert into t (id,a) values (542,49);
+insert into t (id,a) values (542,50);
+insert into t (id,a) values (542,51);
+insert into t (id,a) values (542,52);
+insert into t (id,a) values (542,53);
+insert into t (id,a) values (542,54);
+insert into t (id,a) values (542,55);
+insert into t (id,a) values (542,56);
+insert into t (id,a) values (542,57);
+insert into t (id,a) values (542,58);
+insert into t (id,a) values (542,59);
+insert into t (id,a) values (542,60);
+insert into t (id,a) values (542,61);
+insert into t (id,a) values (542,62);
+insert into t (id,a) values (542,63);
+insert into t (id,a) values (542,64);
+insert into t (id,a) values (542,65);
+insert into t (id,a) values (542,66);
+insert into t (id,a) values (542,67);
+insert into t (id,a) values (542,68);
+insert into t (id,a) values (542,69);
+insert into t (id,a) values (542,70);
+insert into t (id,a) values (542,71);
+insert into t (id,a) values (542,72);
+insert into t (id,a) values (542,73);
+insert into t (id,a) values (542,74);
+insert into t (id,a) values (542,75);
+insert into t (id,a) values (542,76);
+insert into t (id,a) values (542,77);
+insert into t (id,a) values (542,78);
+insert into t (id,a) values (542,79);
+insert into t (id,a) values (542,80);
+insert into t (id,a) values (542,81);
+insert into t (id,a) values (542,82);
+insert into t (id,a) values (542,83);
+insert into t (id,a) values (542,84);
+insert into t (id,a) values (542,85);
+insert into t (id,a) values (542,86);
+insert into t (id,a) values (542,87);
+insert into t (id,a) values (542,88);
+insert into t (id,a) values (542,89);
+insert into t (id,a) values (542,90);
+insert into t (id,a) values (542,91);
+insert into t (id,a) values (542,92);
+insert into t (id,a) values (542,93);
+insert into t (id,a) values (542,94);
+insert into t (id,a) values (542,95);
+insert into t (id,a) values (542,96);
+insert into t (id,a) values (542,97);
+insert into t (id,a) values (542,98);
+insert into t (id,a) values (542,99);
+insert into t (id,a) values (543,0);
+insert into t (id,a) values (543,1);
+insert into t (id,a) values (543,2);
+insert into t (id,a) values (543,3);
+insert into t (id,a) values (543,4);
+insert into t (id,a) values (543,5);
+insert into t (id,a) values (543,6);
+insert into t (id,a) values (543,7);
+insert into t (id,a) values (543,8);
+insert into t (id,a) values (543,9);
+insert into t (id,a) values (543,10);
+insert into t (id,a) values (543,11);
+insert into t (id,a) values (543,12);
+insert into t (id,a) values (543,13);
+insert into t (id,a) values (543,14);
+insert into t (id,a) values (543,15);
+insert into t (id,a) values (543,16);
+insert into t (id,a) values (543,17);
+insert into t (id,a) values (543,18);
+insert into t (id,a) values (543,19);
+insert into t (id,a) values (543,20);
+insert into t (id,a) values (543,21);
+insert into t (id,a) values (543,22);
+insert into t (id,a) values (543,23);
+insert into t (id,a) values (543,24);
+insert into t (id,a) values (543,25);
+insert into t (id,a) values (543,26);
+insert into t (id,a) values (543,27);
+insert into t (id,a) values (543,28);
+insert into t (id,a) values (543,29);
+insert into t (id,a) values (543,30);
+insert into t (id,a) values (543,31);
+insert into t (id,a) values (543,32);
+insert into t (id,a) values (543,33);
+insert into t (id,a) values (543,34);
+insert into t (id,a) values (543,35);
+insert into t (id,a) values (543,36);
+insert into t (id,a) values (543,37);
+insert into t (id,a) values (543,38);
+insert into t (id,a) values (543,39);
+insert into t (id,a) values (543,40);
+insert into t (id,a) values (543,41);
+insert into t (id,a) values (543,42);
+insert into t (id,a) values (543,43);
+insert into t (id,a) values (543,44);
+insert into t (id,a) values (543,45);
+insert into t (id,a) values (543,46);
+insert into t (id,a) values (543,47);
+insert into t (id,a) values (543,48);
+insert into t (id,a) values (543,49);
+insert into t (id,a) values (543,50);
+insert into t (id,a) values (543,51);
+insert into t (id,a) values (543,52);
+insert into t (id,a) values (543,53);
+insert into t (id,a) values (543,54);
+insert into t (id,a) values (543,55);
+insert into t (id,a) values (543,56);
+insert into t (id,a) values (543,57);
+insert into t (id,a) values (543,58);
+insert into t (id,a) values (543,59);
+insert into t (id,a) values (543,60);
+insert into t (id,a) values (543,61);
+insert into t (id,a) values (543,62);
+insert into t (id,a) values (543,63);
+insert into t (id,a) values (543,64);
+insert into t (id,a) values (543,65);
+insert into t (id,a) values (543,66);
+insert into t (id,a) values (543,67);
+insert into t (id,a) values (543,68);
+insert into t (id,a) values (543,69);
+insert into t (id,a) values (543,70);
+insert into t (id,a) values (543,71);
+insert into t (id,a) values (543,72);
+insert into t (id,a) values (543,73);
+insert into t (id,a) values (543,74);
+insert into t (id,a) values (543,75);
+insert into t (id,a) values (543,76);
+insert into t (id,a) values (543,77);
+insert into t (id,a) values (543,78);
+insert into t (id,a) values (543,79);
+insert into t (id,a) values (543,80);
+insert into t (id,a) values (543,81);
+insert into t (id,a) values (543,82);
+insert into t (id,a) values (543,83);
+insert into t (id,a) values (543,84);
+insert into t (id,a) values (543,85);
+insert into t (id,a) values (543,86);
+insert into t (id,a) values (543,87);
+insert into t (id,a) values (543,88);
+insert into t (id,a) values (543,89);
+insert into t (id,a) values (543,90);
+insert into t (id,a) values (543,91);
+insert into t (id,a) values (543,92);
+insert into t (id,a) values (543,93);
+insert into t (id,a) values (543,94);
+insert into t (id,a) values (543,95);
+insert into t (id,a) values (543,96);
+insert into t (id,a) values (543,97);
+insert into t (id,a) values (543,98);
+insert into t (id,a) values (543,99);
+insert into t (id,a) values (544,0);
+insert into t (id,a) values (544,1);
+insert into t (id,a) values (544,2);
+insert into t (id,a) values (544,3);
+insert into t (id,a) values (544,4);
+insert into t (id,a) values (544,5);
+insert into t (id,a) values (544,6);
+insert into t (id,a) values (544,7);
+insert into t (id,a) values (544,8);
+insert into t (id,a) values (544,9);
+insert into t (id,a) values (544,10);
+insert into t (id,a) values (544,11);
+insert into t (id,a) values (544,12);
+insert into t (id,a) values (544,13);
+insert into t (id,a) values (544,14);
+insert into t (id,a) values (544,15);
+insert into t (id,a) values (544,16);
+insert into t (id,a) values (544,17);
+insert into t (id,a) values (544,18);
+insert into t (id,a) values (544,19);
+insert into t (id,a) values (544,20);
+insert into t (id,a) values (544,21);
+insert into t (id,a) values (544,22);
+insert into t (id,a) values (544,23);
+insert into t (id,a) values (544,24);
+insert into t (id,a) values (544,25);
+insert into t (id,a) values (544,26);
+insert into t (id,a) values (544,27);
+insert into t (id,a) values (544,28);
+insert into t (id,a) values (544,29);
+insert into t (id,a) values (544,30);
+insert into t (id,a) values (544,31);
+insert into t (id,a) values (544,32);
+insert into t (id,a) values (544,33);
+insert into t (id,a) values (544,34);
+insert into t (id,a) values (544,35);
+insert into t (id,a) values (544,36);
+insert into t (id,a) values (544,37);
+insert into t (id,a) values (544,38);
+insert into t (id,a) values (544,39);
+insert into t (id,a) values (544,40);
+insert into t (id,a) values (544,41);
+insert into t (id,a) values (544,42);
+insert into t (id,a) values (544,43);
+insert into t (id,a) values (544,44);
+insert into t (id,a) values (544,45);
+insert into t (id,a) values (544,46);
+insert into t (id,a) values (544,47);
+insert into t (id,a) values (544,48);
+insert into t (id,a) values (544,49);
+insert into t (id,a) values (544,50);
+insert into t (id,a) values (544,51);
+insert into t (id,a) values (544,52);
+insert into t (id,a) values (544,53);
+insert into t (id,a) values (544,54);
+insert into t (id,a) values (544,55);
+insert into t (id,a) values (544,56);
+insert into t (id,a) values (544,57);
+insert into t (id,a) values (544,58);
+insert into t (id,a) values (544,59);
+insert into t (id,a) values (544,60);
+insert into t (id,a) values (544,61);
+insert into t (id,a) values (544,62);
+insert into t (id,a) values (544,63);
+insert into t (id,a) values (544,64);
+insert into t (id,a) values (544,65);
+insert into t (id,a) values (544,66);
+insert into t (id,a) values (544,67);
+insert into t (id,a) values (544,68);
+insert into t (id,a) values (544,69);
+insert into t (id,a) values (544,70);
+insert into t (id,a) values (544,71);
+insert into t (id,a) values (544,72);
+insert into t (id,a) values (544,73);
+insert into t (id,a) values (544,74);
+insert into t (id,a) values (544,75);
+insert into t (id,a) values (544,76);
+insert into t (id,a) values (544,77);
+insert into t (id,a) values (544,78);
+insert into t (id,a) values (544,79);
+insert into t (id,a) values (544,80);
+insert into t (id,a) values (544,81);
+insert into t (id,a) values (544,82);
+insert into t (id,a) values (544,83);
+insert into t (id,a) values (544,84);
+insert into t (id,a) values (544,85);
+insert into t (id,a) values (544,86);
+insert into t (id,a) values (544,87);
+insert into t (id,a) values (544,88);
+insert into t (id,a) values (544,89);
+insert into t (id,a) values (544,90);
+insert into t (id,a) values (544,91);
+insert into t (id,a) values (544,92);
+insert into t (id,a) values (544,93);
+insert into t (id,a) values (544,94);
+insert into t (id,a) values (544,95);
+insert into t (id,a) values (544,96);
+insert into t (id,a) values (544,97);
+insert into t (id,a) values (544,98);
+insert into t (id,a) values (544,99);
+insert into t (id,a) values (545,0);
+insert into t (id,a) values (545,1);
+insert into t (id,a) values (545,2);
+insert into t (id,a) values (545,3);
+insert into t (id,a) values (545,4);
+insert into t (id,a) values (545,5);
+insert into t (id,a) values (545,6);
+insert into t (id,a) values (545,7);
+insert into t (id,a) values (545,8);
+insert into t (id,a) values (545,9);
+insert into t (id,a) values (545,10);
+insert into t (id,a) values (545,11);
+insert into t (id,a) values (545,12);
+insert into t (id,a) values (545,13);
+insert into t (id,a) values (545,14);
+insert into t (id,a) values (545,15);
+insert into t (id,a) values (545,16);
+insert into t (id,a) values (545,17);
+insert into t (id,a) values (545,18);
+insert into t (id,a) values (545,19);
+insert into t (id,a) values (545,20);
+insert into t (id,a) values (545,21);
+insert into t (id,a) values (545,22);
+insert into t (id,a) values (545,23);
+insert into t (id,a) values (545,24);
+insert into t (id,a) values (545,25);
+insert into t (id,a) values (545,26);
+insert into t (id,a) values (545,27);
+insert into t (id,a) values (545,28);
+insert into t (id,a) values (545,29);
+insert into t (id,a) values (545,30);
+insert into t (id,a) values (545,31);
+insert into t (id,a) values (545,32);
+insert into t (id,a) values (545,33);
+insert into t (id,a) values (545,34);
+insert into t (id,a) values (545,35);
+insert into t (id,a) values (545,36);
+insert into t (id,a) values (545,37);
+insert into t (id,a) values (545,38);
+insert into t (id,a) values (545,39);
+insert into t (id,a) values (545,40);
+insert into t (id,a) values (545,41);
+insert into t (id,a) values (545,42);
+insert into t (id,a) values (545,43);
+insert into t (id,a) values (545,44);
+insert into t (id,a) values (545,45);
+insert into t (id,a) values (545,46);
+insert into t (id,a) values (545,47);
+insert into t (id,a) values (545,48);
+insert into t (id,a) values (545,49);
+insert into t (id,a) values (545,50);
+insert into t (id,a) values (545,51);
+insert into t (id,a) values (545,52);
+insert into t (id,a) values (545,53);
+insert into t (id,a) values (545,54);
+insert into t (id,a) values (545,55);
+insert into t (id,a) values (545,56);
+insert into t (id,a) values (545,57);
+insert into t (id,a) values (545,58);
+insert into t (id,a) values (545,59);
+insert into t (id,a) values (545,60);
+insert into t (id,a) values (545,61);
+insert into t (id,a) values (545,62);
+insert into t (id,a) values (545,63);
+insert into t (id,a) values (545,64);
+insert into t (id,a) values (545,65);
+insert into t (id,a) values (545,66);
+insert into t (id,a) values (545,67);
+insert into t (id,a) values (545,68);
+insert into t (id,a) values (545,69);
+insert into t (id,a) values (545,70);
+insert into t (id,a) values (545,71);
+insert into t (id,a) values (545,72);
+insert into t (id,a) values (545,73);
+insert into t (id,a) values (545,74);
+insert into t (id,a) values (545,75);
+insert into t (id,a) values (545,76);
+insert into t (id,a) values (545,77);
+insert into t (id,a) values (545,78);
+insert into t (id,a) values (545,79);
+insert into t (id,a) values (545,80);
+insert into t (id,a) values (545,81);
+insert into t (id,a) values (545,82);
+insert into t (id,a) values (545,83);
+insert into t (id,a) values (545,84);
+insert into t (id,a) values (545,85);
+insert into t (id,a) values (545,86);
+insert into t (id,a) values (545,87);
+insert into t (id,a) values (545,88);
+insert into t (id,a) values (545,89);
+insert into t (id,a) values (545,90);
+insert into t (id,a) values (545,91);
+insert into t (id,a) values (545,92);
+insert into t (id,a) values (545,93);
+insert into t (id,a) values (545,94);
+insert into t (id,a) values (545,95);
+insert into t (id,a) values (545,96);
+insert into t (id,a) values (545,97);
+insert into t (id,a) values (545,98);
+insert into t (id,a) values (545,99);
+insert into t (id,a) values (546,0);
+insert into t (id,a) values (546,1);
+insert into t (id,a) values (546,2);
+insert into t (id,a) values (546,3);
+insert into t (id,a) values (546,4);
+insert into t (id,a) values (546,5);
+insert into t (id,a) values (546,6);
+insert into t (id,a) values (546,7);
+insert into t (id,a) values (546,8);
+insert into t (id,a) values (546,9);
+insert into t (id,a) values (546,10);
+insert into t (id,a) values (546,11);
+insert into t (id,a) values (546,12);
+insert into t (id,a) values (546,13);
+insert into t (id,a) values (546,14);
+insert into t (id,a) values (546,15);
+insert into t (id,a) values (546,16);
+insert into t (id,a) values (546,17);
+insert into t (id,a) values (546,18);
+insert into t (id,a) values (546,19);
+insert into t (id,a) values (546,20);
+insert into t (id,a) values (546,21);
+insert into t (id,a) values (546,22);
+insert into t (id,a) values (546,23);
+insert into t (id,a) values (546,24);
+insert into t (id,a) values (546,25);
+insert into t (id,a) values (546,26);
+insert into t (id,a) values (546,27);
+insert into t (id,a) values (546,28);
+insert into t (id,a) values (546,29);
+insert into t (id,a) values (546,30);
+insert into t (id,a) values (546,31);
+insert into t (id,a) values (546,32);
+insert into t (id,a) values (546,33);
+insert into t (id,a) values (546,34);
+insert into t (id,a) values (546,35);
+insert into t (id,a) values (546,36);
+insert into t (id,a) values (546,37);
+insert into t (id,a) values (546,38);
+insert into t (id,a) values (546,39);
+insert into t (id,a) values (546,40);
+insert into t (id,a) values (546,41);
+insert into t (id,a) values (546,42);
+insert into t (id,a) values (546,43);
+insert into t (id,a) values (546,44);
+insert into t (id,a) values (546,45);
+insert into t (id,a) values (546,46);
+insert into t (id,a) values (546,47);
+insert into t (id,a) values (546,48);
+insert into t (id,a) values (546,49);
+insert into t (id,a) values (546,50);
+insert into t (id,a) values (546,51);
+insert into t (id,a) values (546,52);
+insert into t (id,a) values (546,53);
+insert into t (id,a) values (546,54);
+insert into t (id,a) values (546,55);
+insert into t (id,a) values (546,56);
+insert into t (id,a) values (546,57);
+insert into t (id,a) values (546,58);
+insert into t (id,a) values (546,59);
+insert into t (id,a) values (546,60);
+insert into t (id,a) values (546,61);
+insert into t (id,a) values (546,62);
+insert into t (id,a) values (546,63);
+insert into t (id,a) values (546,64);
+insert into t (id,a) values (546,65);
+insert into t (id,a) values (546,66);
+insert into t (id,a) values (546,67);
+insert into t (id,a) values (546,68);
+insert into t (id,a) values (546,69);
+insert into t (id,a) values (546,70);
+insert into t (id,a) values (546,71);
+insert into t (id,a) values (546,72);
+insert into t (id,a) values (546,73);
+insert into t (id,a) values (546,74);
+insert into t (id,a) values (546,75);
+insert into t (id,a) values (546,76);
+insert into t (id,a) values (546,77);
+insert into t (id,a) values (546,78);
+insert into t (id,a) values (546,79);
+insert into t (id,a) values (546,80);
+insert into t (id,a) values (546,81);
+insert into t (id,a) values (546,82);
+insert into t (id,a) values (546,83);
+insert into t (id,a) values (546,84);
+insert into t (id,a) values (546,85);
+insert into t (id,a) values (546,86);
+insert into t (id,a) values (546,87);
+insert into t (id,a) values (546,88);
+insert into t (id,a) values (546,89);
+insert into t (id,a) values (546,90);
+insert into t (id,a) values (546,91);
+insert into t (id,a) values (546,92);
+insert into t (id,a) values (546,93);
+insert into t (id,a) values (546,94);
+insert into t (id,a) values (546,95);
+insert into t (id,a) values (546,96);
+insert into t (id,a) values (546,97);
+insert into t (id,a) values (546,98);
+insert into t (id,a) values (546,99);
+insert into t (id,a) values (547,0);
+insert into t (id,a) values (547,1);
+insert into t (id,a) values (547,2);
+insert into t (id,a) values (547,3);
+insert into t (id,a) values (547,4);
+insert into t (id,a) values (547,5);
+insert into t (id,a) values (547,6);
+insert into t (id,a) values (547,7);
+insert into t (id,a) values (547,8);
+insert into t (id,a) values (547,9);
+insert into t (id,a) values (547,10);
+insert into t (id,a) values (547,11);
+insert into t (id,a) values (547,12);
+insert into t (id,a) values (547,13);
+insert into t (id,a) values (547,14);
+insert into t (id,a) values (547,15);
+insert into t (id,a) values (547,16);
+insert into t (id,a) values (547,17);
+insert into t (id,a) values (547,18);
+insert into t (id,a) values (547,19);
+insert into t (id,a) values (547,20);
+insert into t (id,a) values (547,21);
+insert into t (id,a) values (547,22);
+insert into t (id,a) values (547,23);
+insert into t (id,a) values (547,24);
+insert into t (id,a) values (547,25);
+insert into t (id,a) values (547,26);
+insert into t (id,a) values (547,27);
+insert into t (id,a) values (547,28);
+insert into t (id,a) values (547,29);
+insert into t (id,a) values (547,30);
+insert into t (id,a) values (547,31);
+insert into t (id,a) values (547,32);
+insert into t (id,a) values (547,33);
+insert into t (id,a) values (547,34);
+insert into t (id,a) values (547,35);
+insert into t (id,a) values (547,36);
+insert into t (id,a) values (547,37);
+insert into t (id,a) values (547,38);
+insert into t (id,a) values (547,39);
+insert into t (id,a) values (547,40);
+insert into t (id,a) values (547,41);
+insert into t (id,a) values (547,42);
+insert into t (id,a) values (547,43);
+insert into t (id,a) values (547,44);
+insert into t (id,a) values (547,45);
+insert into t (id,a) values (547,46);
+insert into t (id,a) values (547,47);
+insert into t (id,a) values (547,48);
+insert into t (id,a) values (547,49);
+insert into t (id,a) values (547,50);
+insert into t (id,a) values (547,51);
+insert into t (id,a) values (547,52);
+insert into t (id,a) values (547,53);
+insert into t (id,a) values (547,54);
+insert into t (id,a) values (547,55);
+insert into t (id,a) values (547,56);
+insert into t (id,a) values (547,57);
+insert into t (id,a) values (547,58);
+insert into t (id,a) values (547,59);
+insert into t (id,a) values (547,60);
+insert into t (id,a) values (547,61);
+insert into t (id,a) values (547,62);
+insert into t (id,a) values (547,63);
+insert into t (id,a) values (547,64);
+insert into t (id,a) values (547,65);
+insert into t (id,a) values (547,66);
+insert into t (id,a) values (547,67);
+insert into t (id,a) values (547,68);
+insert into t (id,a) values (547,69);
+insert into t (id,a) values (547,70);
+insert into t (id,a) values (547,71);
+insert into t (id,a) values (547,72);
+insert into t (id,a) values (547,73);
+insert into t (id,a) values (547,74);
+insert into t (id,a) values (547,75);
+insert into t (id,a) values (547,76);
+insert into t (id,a) values (547,77);
+insert into t (id,a) values (547,78);
+insert into t (id,a) values (547,79);
+insert into t (id,a) values (547,80);
+insert into t (id,a) values (547,81);
+insert into t (id,a) values (547,82);
+insert into t (id,a) values (547,83);
+insert into t (id,a) values (547,84);
+insert into t (id,a) values (547,85);
+insert into t (id,a) values (547,86);
+insert into t (id,a) values (547,87);
+insert into t (id,a) values (547,88);
+insert into t (id,a) values (547,89);
+insert into t (id,a) values (547,90);
+insert into t (id,a) values (547,91);
+insert into t (id,a) values (547,92);
+insert into t (id,a) values (547,93);
+insert into t (id,a) values (547,94);
+insert into t (id,a) values (547,95);
+insert into t (id,a) values (547,96);
+insert into t (id,a) values (547,97);
+insert into t (id,a) values (547,98);
+insert into t (id,a) values (547,99);
+insert into t (id,a) values (548,0);
+insert into t (id,a) values (548,1);
+insert into t (id,a) values (548,2);
+insert into t (id,a) values (548,3);
+insert into t (id,a) values (548,4);
+insert into t (id,a) values (548,5);
+insert into t (id,a) values (548,6);
+insert into t (id,a) values (548,7);
+insert into t (id,a) values (548,8);
+insert into t (id,a) values (548,9);
+insert into t (id,a) values (548,10);
+insert into t (id,a) values (548,11);
+insert into t (id,a) values (548,12);
+insert into t (id,a) values (548,13);
+insert into t (id,a) values (548,14);
+insert into t (id,a) values (548,15);
+insert into t (id,a) values (548,16);
+insert into t (id,a) values (548,17);
+insert into t (id,a) values (548,18);
+insert into t (id,a) values (548,19);
+insert into t (id,a) values (548,20);
+insert into t (id,a) values (548,21);
+insert into t (id,a) values (548,22);
+insert into t (id,a) values (548,23);
+insert into t (id,a) values (548,24);
+insert into t (id,a) values (548,25);
+insert into t (id,a) values (548,26);
+insert into t (id,a) values (548,27);
+insert into t (id,a) values (548,28);
+insert into t (id,a) values (548,29);
+insert into t (id,a) values (548,30);
+insert into t (id,a) values (548,31);
+insert into t (id,a) values (548,32);
+insert into t (id,a) values (548,33);
+insert into t (id,a) values (548,34);
+insert into t (id,a) values (548,35);
+insert into t (id,a) values (548,36);
+insert into t (id,a) values (548,37);
+insert into t (id,a) values (548,38);
+insert into t (id,a) values (548,39);
+insert into t (id,a) values (548,40);
+insert into t (id,a) values (548,41);
+insert into t (id,a) values (548,42);
+insert into t (id,a) values (548,43);
+insert into t (id,a) values (548,44);
+insert into t (id,a) values (548,45);
+insert into t (id,a) values (548,46);
+insert into t (id,a) values (548,47);
+insert into t (id,a) values (548,48);
+insert into t (id,a) values (548,49);
+insert into t (id,a) values (548,50);
+insert into t (id,a) values (548,51);
+insert into t (id,a) values (548,52);
+insert into t (id,a) values (548,53);
+insert into t (id,a) values (548,54);
+insert into t (id,a) values (548,55);
+insert into t (id,a) values (548,56);
+insert into t (id,a) values (548,57);
+insert into t (id,a) values (548,58);
+insert into t (id,a) values (548,59);
+insert into t (id,a) values (548,60);
+insert into t (id,a) values (548,61);
+insert into t (id,a) values (548,62);
+insert into t (id,a) values (548,63);
+insert into t (id,a) values (548,64);
+insert into t (id,a) values (548,65);
+insert into t (id,a) values (548,66);
+insert into t (id,a) values (548,67);
+insert into t (id,a) values (548,68);
+insert into t (id,a) values (548,69);
+insert into t (id,a) values (548,70);
+insert into t (id,a) values (548,71);
+insert into t (id,a) values (548,72);
+insert into t (id,a) values (548,73);
+insert into t (id,a) values (548,74);
+insert into t (id,a) values (548,75);
+insert into t (id,a) values (548,76);
+insert into t (id,a) values (548,77);
+insert into t (id,a) values (548,78);
+insert into t (id,a) values (548,79);
+insert into t (id,a) values (548,80);
+insert into t (id,a) values (548,81);
+insert into t (id,a) values (548,82);
+insert into t (id,a) values (548,83);
+insert into t (id,a) values (548,84);
+insert into t (id,a) values (548,85);
+insert into t (id,a) values (548,86);
+insert into t (id,a) values (548,87);
+insert into t (id,a) values (548,88);
+insert into t (id,a) values (548,89);
+insert into t (id,a) values (548,90);
+insert into t (id,a) values (548,91);
+insert into t (id,a) values (548,92);
+insert into t (id,a) values (548,93);
+insert into t (id,a) values (548,94);
+insert into t (id,a) values (548,95);
+insert into t (id,a) values (548,96);
+insert into t (id,a) values (548,97);
+insert into t (id,a) values (548,98);
+insert into t (id,a) values (548,99);
+insert into t (id,a) values (549,0);
+insert into t (id,a) values (549,1);
+insert into t (id,a) values (549,2);
+insert into t (id,a) values (549,3);
+insert into t (id,a) values (549,4);
+insert into t (id,a) values (549,5);
+insert into t (id,a) values (549,6);
+insert into t (id,a) values (549,7);
+insert into t (id,a) values (549,8);
+insert into t (id,a) values (549,9);
+insert into t (id,a) values (549,10);
+insert into t (id,a) values (549,11);
+insert into t (id,a) values (549,12);
+insert into t (id,a) values (549,13);
+insert into t (id,a) values (549,14);
+insert into t (id,a) values (549,15);
+insert into t (id,a) values (549,16);
+insert into t (id,a) values (549,17);
+insert into t (id,a) values (549,18);
+insert into t (id,a) values (549,19);
+insert into t (id,a) values (549,20);
+insert into t (id,a) values (549,21);
+insert into t (id,a) values (549,22);
+insert into t (id,a) values (549,23);
+insert into t (id,a) values (549,24);
+insert into t (id,a) values (549,25);
+insert into t (id,a) values (549,26);
+insert into t (id,a) values (549,27);
+insert into t (id,a) values (549,28);
+insert into t (id,a) values (549,29);
+insert into t (id,a) values (549,30);
+insert into t (id,a) values (549,31);
+insert into t (id,a) values (549,32);
+insert into t (id,a) values (549,33);
+insert into t (id,a) values (549,34);
+insert into t (id,a) values (549,35);
+insert into t (id,a) values (549,36);
+insert into t (id,a) values (549,37);
+insert into t (id,a) values (549,38);
+insert into t (id,a) values (549,39);
+insert into t (id,a) values (549,40);
+insert into t (id,a) values (549,41);
+insert into t (id,a) values (549,42);
+insert into t (id,a) values (549,43);
+insert into t (id,a) values (549,44);
+insert into t (id,a) values (549,45);
+insert into t (id,a) values (549,46);
+insert into t (id,a) values (549,47);
+insert into t (id,a) values (549,48);
+insert into t (id,a) values (549,49);
+insert into t (id,a) values (549,50);
+insert into t (id,a) values (549,51);
+insert into t (id,a) values (549,52);
+insert into t (id,a) values (549,53);
+insert into t (id,a) values (549,54);
+insert into t (id,a) values (549,55);
+insert into t (id,a) values (549,56);
+insert into t (id,a) values (549,57);
+insert into t (id,a) values (549,58);
+insert into t (id,a) values (549,59);
+insert into t (id,a) values (549,60);
+insert into t (id,a) values (549,61);
+insert into t (id,a) values (549,62);
+insert into t (id,a) values (549,63);
+insert into t (id,a) values (549,64);
+insert into t (id,a) values (549,65);
+insert into t (id,a) values (549,66);
+insert into t (id,a) values (549,67);
+insert into t (id,a) values (549,68);
+insert into t (id,a) values (549,69);
+insert into t (id,a) values (549,70);
+insert into t (id,a) values (549,71);
+insert into t (id,a) values (549,72);
+insert into t (id,a) values (549,73);
+insert into t (id,a) values (549,74);
+insert into t (id,a) values (549,75);
+insert into t (id,a) values (549,76);
+insert into t (id,a) values (549,77);
+insert into t (id,a) values (549,78);
+insert into t (id,a) values (549,79);
+insert into t (id,a) values (549,80);
+insert into t (id,a) values (549,81);
+insert into t (id,a) values (549,82);
+insert into t (id,a) values (549,83);
+insert into t (id,a) values (549,84);
+insert into t (id,a) values (549,85);
+insert into t (id,a) values (549,86);
+insert into t (id,a) values (549,87);
+insert into t (id,a) values (549,88);
+insert into t (id,a) values (549,89);
+insert into t (id,a) values (549,90);
+insert into t (id,a) values (549,91);
+insert into t (id,a) values (549,92);
+insert into t (id,a) values (549,93);
+insert into t (id,a) values (549,94);
+insert into t (id,a) values (549,95);
+insert into t (id,a) values (549,96);
+insert into t (id,a) values (549,97);
+insert into t (id,a) values (549,98);
+insert into t (id,a) values (549,99);
+insert into t (id,a) values (550,0);
+insert into t (id,a) values (550,1);
+insert into t (id,a) values (550,2);
+insert into t (id,a) values (550,3);
+insert into t (id,a) values (550,4);
+insert into t (id,a) values (550,5);
+insert into t (id,a) values (550,6);
+insert into t (id,a) values (550,7);
+insert into t (id,a) values (550,8);
+insert into t (id,a) values (550,9);
+insert into t (id,a) values (550,10);
+insert into t (id,a) values (550,11);
+insert into t (id,a) values (550,12);
+insert into t (id,a) values (550,13);
+insert into t (id,a) values (550,14);
+insert into t (id,a) values (550,15);
+insert into t (id,a) values (550,16);
+insert into t (id,a) values (550,17);
+insert into t (id,a) values (550,18);
+insert into t (id,a) values (550,19);
+insert into t (id,a) values (550,20);
+insert into t (id,a) values (550,21);
+insert into t (id,a) values (550,22);
+insert into t (id,a) values (550,23);
+insert into t (id,a) values (550,24);
+insert into t (id,a) values (550,25);
+insert into t (id,a) values (550,26);
+insert into t (id,a) values (550,27);
+insert into t (id,a) values (550,28);
+insert into t (id,a) values (550,29);
+insert into t (id,a) values (550,30);
+insert into t (id,a) values (550,31);
+insert into t (id,a) values (550,32);
+insert into t (id,a) values (550,33);
+insert into t (id,a) values (550,34);
+insert into t (id,a) values (550,35);
+insert into t (id,a) values (550,36);
+insert into t (id,a) values (550,37);
+insert into t (id,a) values (550,38);
+insert into t (id,a) values (550,39);
+insert into t (id,a) values (550,40);
+insert into t (id,a) values (550,41);
+insert into t (id,a) values (550,42);
+insert into t (id,a) values (550,43);
+insert into t (id,a) values (550,44);
+insert into t (id,a) values (550,45);
+insert into t (id,a) values (550,46);
+insert into t (id,a) values (550,47);
+insert into t (id,a) values (550,48);
+insert into t (id,a) values (550,49);
+insert into t (id,a) values (550,50);
+insert into t (id,a) values (550,51);
+insert into t (id,a) values (550,52);
+insert into t (id,a) values (550,53);
+insert into t (id,a) values (550,54);
+insert into t (id,a) values (550,55);
+insert into t (id,a) values (550,56);
+insert into t (id,a) values (550,57);
+insert into t (id,a) values (550,58);
+insert into t (id,a) values (550,59);
+insert into t (id,a) values (550,60);
+insert into t (id,a) values (550,61);
+insert into t (id,a) values (550,62);
+insert into t (id,a) values (550,63);
+insert into t (id,a) values (550,64);
+insert into t (id,a) values (550,65);
+insert into t (id,a) values (550,66);
+insert into t (id,a) values (550,67);
+insert into t (id,a) values (550,68);
+insert into t (id,a) values (550,69);
+insert into t (id,a) values (550,70);
+insert into t (id,a) values (550,71);
+insert into t (id,a) values (550,72);
+insert into t (id,a) values (550,73);
+insert into t (id,a) values (550,74);
+insert into t (id,a) values (550,75);
+insert into t (id,a) values (550,76);
+insert into t (id,a) values (550,77);
+insert into t (id,a) values (550,78);
+insert into t (id,a) values (550,79);
+insert into t (id,a) values (550,80);
+insert into t (id,a) values (550,81);
+insert into t (id,a) values (550,82);
+insert into t (id,a) values (550,83);
+insert into t (id,a) values (550,84);
+insert into t (id,a) values (550,85);
+insert into t (id,a) values (550,86);
+insert into t (id,a) values (550,87);
+insert into t (id,a) values (550,88);
+insert into t (id,a) values (550,89);
+insert into t (id,a) values (550,90);
+insert into t (id,a) values (550,91);
+insert into t (id,a) values (550,92);
+insert into t (id,a) values (550,93);
+insert into t (id,a) values (550,94);
+insert into t (id,a) values (550,95);
+insert into t (id,a) values (550,96);
+insert into t (id,a) values (550,97);
+insert into t (id,a) values (550,98);
+insert into t (id,a) values (550,99);
+insert into t (id,a) values (551,0);
+insert into t (id,a) values (551,1);
+insert into t (id,a) values (551,2);
+insert into t (id,a) values (551,3);
+insert into t (id,a) values (551,4);
+insert into t (id,a) values (551,5);
+insert into t (id,a) values (551,6);
+insert into t (id,a) values (551,7);
+insert into t (id,a) values (551,8);
+insert into t (id,a) values (551,9);
+insert into t (id,a) values (551,10);
+insert into t (id,a) values (551,11);
+insert into t (id,a) values (551,12);
+insert into t (id,a) values (551,13);
+insert into t (id,a) values (551,14);
+insert into t (id,a) values (551,15);
+insert into t (id,a) values (551,16);
+insert into t (id,a) values (551,17);
+insert into t (id,a) values (551,18);
+insert into t (id,a) values (551,19);
+insert into t (id,a) values (551,20);
+insert into t (id,a) values (551,21);
+insert into t (id,a) values (551,22);
+insert into t (id,a) values (551,23);
+insert into t (id,a) values (551,24);
+insert into t (id,a) values (551,25);
+insert into t (id,a) values (551,26);
+insert into t (id,a) values (551,27);
+insert into t (id,a) values (551,28);
+insert into t (id,a) values (551,29);
+insert into t (id,a) values (551,30);
+insert into t (id,a) values (551,31);
+insert into t (id,a) values (551,32);
+insert into t (id,a) values (551,33);
+insert into t (id,a) values (551,34);
+insert into t (id,a) values (551,35);
+insert into t (id,a) values (551,36);
+insert into t (id,a) values (551,37);
+insert into t (id,a) values (551,38);
+insert into t (id,a) values (551,39);
+insert into t (id,a) values (551,40);
+insert into t (id,a) values (551,41);
+insert into t (id,a) values (551,42);
+insert into t (id,a) values (551,43);
+insert into t (id,a) values (551,44);
+insert into t (id,a) values (551,45);
+insert into t (id,a) values (551,46);
+insert into t (id,a) values (551,47);
+insert into t (id,a) values (551,48);
+insert into t (id,a) values (551,49);
+insert into t (id,a) values (551,50);
+insert into t (id,a) values (551,51);
+insert into t (id,a) values (551,52);
+insert into t (id,a) values (551,53);
+insert into t (id,a) values (551,54);
+insert into t (id,a) values (551,55);
+insert into t (id,a) values (551,56);
+insert into t (id,a) values (551,57);
+insert into t (id,a) values (551,58);
+insert into t (id,a) values (551,59);
+insert into t (id,a) values (551,60);
+insert into t (id,a) values (551,61);
+insert into t (id,a) values (551,62);
+insert into t (id,a) values (551,63);
+insert into t (id,a) values (551,64);
+insert into t (id,a) values (551,65);
+insert into t (id,a) values (551,66);
+insert into t (id,a) values (551,67);
+insert into t (id,a) values (551,68);
+insert into t (id,a) values (551,69);
+insert into t (id,a) values (551,70);
+insert into t (id,a) values (551,71);
+insert into t (id,a) values (551,72);
+insert into t (id,a) values (551,73);
+insert into t (id,a) values (551,74);
+insert into t (id,a) values (551,75);
+insert into t (id,a) values (551,76);
+insert into t (id,a) values (551,77);
+insert into t (id,a) values (551,78);
+insert into t (id,a) values (551,79);
+insert into t (id,a) values (551,80);
+insert into t (id,a) values (551,81);
+insert into t (id,a) values (551,82);
+insert into t (id,a) values (551,83);
+insert into t (id,a) values (551,84);
+insert into t (id,a) values (551,85);
+insert into t (id,a) values (551,86);
+insert into t (id,a) values (551,87);
+insert into t (id,a) values (551,88);
+insert into t (id,a) values (551,89);
+insert into t (id,a) values (551,90);
+insert into t (id,a) values (551,91);
+insert into t (id,a) values (551,92);
+insert into t (id,a) values (551,93);
+insert into t (id,a) values (551,94);
+insert into t (id,a) values (551,95);
+insert into t (id,a) values (551,96);
+insert into t (id,a) values (551,97);
+insert into t (id,a) values (551,98);
+insert into t (id,a) values (551,99);
+insert into t (id,a) values (552,0);
+insert into t (id,a) values (552,1);
+insert into t (id,a) values (552,2);
+insert into t (id,a) values (552,3);
+insert into t (id,a) values (552,4);
+insert into t (id,a) values (552,5);
+insert into t (id,a) values (552,6);
+insert into t (id,a) values (552,7);
+insert into t (id,a) values (552,8);
+insert into t (id,a) values (552,9);
+insert into t (id,a) values (552,10);
+insert into t (id,a) values (552,11);
+insert into t (id,a) values (552,12);
+insert into t (id,a) values (552,13);
+insert into t (id,a) values (552,14);
+insert into t (id,a) values (552,15);
+insert into t (id,a) values (552,16);
+insert into t (id,a) values (552,17);
+insert into t (id,a) values (552,18);
+insert into t (id,a) values (552,19);
+insert into t (id,a) values (552,20);
+insert into t (id,a) values (552,21);
+insert into t (id,a) values (552,22);
+insert into t (id,a) values (552,23);
+insert into t (id,a) values (552,24);
+insert into t (id,a) values (552,25);
+insert into t (id,a) values (552,26);
+insert into t (id,a) values (552,27);
+insert into t (id,a) values (552,28);
+insert into t (id,a) values (552,29);
+insert into t (id,a) values (552,30);
+insert into t (id,a) values (552,31);
+insert into t (id,a) values (552,32);
+insert into t (id,a) values (552,33);
+insert into t (id,a) values (552,34);
+insert into t (id,a) values (552,35);
+insert into t (id,a) values (552,36);
+insert into t (id,a) values (552,37);
+insert into t (id,a) values (552,38);
+insert into t (id,a) values (552,39);
+insert into t (id,a) values (552,40);
+insert into t (id,a) values (552,41);
+insert into t (id,a) values (552,42);
+insert into t (id,a) values (552,43);
+insert into t (id,a) values (552,44);
+insert into t (id,a) values (552,45);
+insert into t (id,a) values (552,46);
+insert into t (id,a) values (552,47);
+insert into t (id,a) values (552,48);
+insert into t (id,a) values (552,49);
+insert into t (id,a) values (552,50);
+insert into t (id,a) values (552,51);
+insert into t (id,a) values (552,52);
+insert into t (id,a) values (552,53);
+insert into t (id,a) values (552,54);
+insert into t (id,a) values (552,55);
+insert into t (id,a) values (552,56);
+insert into t (id,a) values (552,57);
+insert into t (id,a) values (552,58);
+insert into t (id,a) values (552,59);
+insert into t (id,a) values (552,60);
+insert into t (id,a) values (552,61);
+insert into t (id,a) values (552,62);
+insert into t (id,a) values (552,63);
+insert into t (id,a) values (552,64);
+insert into t (id,a) values (552,65);
+insert into t (id,a) values (552,66);
+insert into t (id,a) values (552,67);
+insert into t (id,a) values (552,68);
+insert into t (id,a) values (552,69);
+insert into t (id,a) values (552,70);
+insert into t (id,a) values (552,71);
+insert into t (id,a) values (552,72);
+insert into t (id,a) values (552,73);
+insert into t (id,a) values (552,74);
+insert into t (id,a) values (552,75);
+insert into t (id,a) values (552,76);
+insert into t (id,a) values (552,77);
+insert into t (id,a) values (552,78);
+insert into t (id,a) values (552,79);
+insert into t (id,a) values (552,80);
+insert into t (id,a) values (552,81);
+insert into t (id,a) values (552,82);
+insert into t (id,a) values (552,83);
+insert into t (id,a) values (552,84);
+insert into t (id,a) values (552,85);
+insert into t (id,a) values (552,86);
+insert into t (id,a) values (552,87);
+insert into t (id,a) values (552,88);
+insert into t (id,a) values (552,89);
+insert into t (id,a) values (552,90);
+insert into t (id,a) values (552,91);
+insert into t (id,a) values (552,92);
+insert into t (id,a) values (552,93);
+insert into t (id,a) values (552,94);
+insert into t (id,a) values (552,95);
+insert into t (id,a) values (552,96);
+insert into t (id,a) values (552,97);
+insert into t (id,a) values (552,98);
+insert into t (id,a) values (552,99);
+insert into t (id,a) values (553,0);
+insert into t (id,a) values (553,1);
+insert into t (id,a) values (553,2);
+insert into t (id,a) values (553,3);
+insert into t (id,a) values (553,4);
+insert into t (id,a) values (553,5);
+insert into t (id,a) values (553,6);
+insert into t (id,a) values (553,7);
+insert into t (id,a) values (553,8);
+insert into t (id,a) values (553,9);
+insert into t (id,a) values (553,10);
+insert into t (id,a) values (553,11);
+insert into t (id,a) values (553,12);
+insert into t (id,a) values (553,13);
+insert into t (id,a) values (553,14);
+insert into t (id,a) values (553,15);
+insert into t (id,a) values (553,16);
+insert into t (id,a) values (553,17);
+insert into t (id,a) values (553,18);
+insert into t (id,a) values (553,19);
+insert into t (id,a) values (553,20);
+insert into t (id,a) values (553,21);
+insert into t (id,a) values (553,22);
+insert into t (id,a) values (553,23);
+insert into t (id,a) values (553,24);
+insert into t (id,a) values (553,25);
+insert into t (id,a) values (553,26);
+insert into t (id,a) values (553,27);
+insert into t (id,a) values (553,28);
+insert into t (id,a) values (553,29);
+insert into t (id,a) values (553,30);
+insert into t (id,a) values (553,31);
+insert into t (id,a) values (553,32);
+insert into t (id,a) values (553,33);
+insert into t (id,a) values (553,34);
+insert into t (id,a) values (553,35);
+insert into t (id,a) values (553,36);
+insert into t (id,a) values (553,37);
+insert into t (id,a) values (553,38);
+insert into t (id,a) values (553,39);
+insert into t (id,a) values (553,40);
+insert into t (id,a) values (553,41);
+insert into t (id,a) values (553,42);
+insert into t (id,a) values (553,43);
+insert into t (id,a) values (553,44);
+insert into t (id,a) values (553,45);
+insert into t (id,a) values (553,46);
+insert into t (id,a) values (553,47);
+insert into t (id,a) values (553,48);
+insert into t (id,a) values (553,49);
+insert into t (id,a) values (553,50);
+insert into t (id,a) values (553,51);
+insert into t (id,a) values (553,52);
+insert into t (id,a) values (553,53);
+insert into t (id,a) values (553,54);
+insert into t (id,a) values (553,55);
+insert into t (id,a) values (553,56);
+insert into t (id,a) values (553,57);
+insert into t (id,a) values (553,58);
+insert into t (id,a) values (553,59);
+insert into t (id,a) values (553,60);
+insert into t (id,a) values (553,61);
+insert into t (id,a) values (553,62);
+insert into t (id,a) values (553,63);
+insert into t (id,a) values (553,64);
+insert into t (id,a) values (553,65);
+insert into t (id,a) values (553,66);
+insert into t (id,a) values (553,67);
+insert into t (id,a) values (553,68);
+insert into t (id,a) values (553,69);
+insert into t (id,a) values (553,70);
+insert into t (id,a) values (553,71);
+insert into t (id,a) values (553,72);
+insert into t (id,a) values (553,73);
+insert into t (id,a) values (553,74);
+insert into t (id,a) values (553,75);
+insert into t (id,a) values (553,76);
+insert into t (id,a) values (553,77);
+insert into t (id,a) values (553,78);
+insert into t (id,a) values (553,79);
+insert into t (id,a) values (553,80);
+insert into t (id,a) values (553,81);
+insert into t (id,a) values (553,82);
+insert into t (id,a) values (553,83);
+insert into t (id,a) values (553,84);
+insert into t (id,a) values (553,85);
+insert into t (id,a) values (553,86);
+insert into t (id,a) values (553,87);
+insert into t (id,a) values (553,88);
+insert into t (id,a) values (553,89);
+insert into t (id,a) values (553,90);
+insert into t (id,a) values (553,91);
+insert into t (id,a) values (553,92);
+insert into t (id,a) values (553,93);
+insert into t (id,a) values (553,94);
+insert into t (id,a) values (553,95);
+insert into t (id,a) values (553,96);
+insert into t (id,a) values (553,97);
+insert into t (id,a) values (553,98);
+insert into t (id,a) values (553,99);
+insert into t (id,a) values (554,0);
+insert into t (id,a) values (554,1);
+insert into t (id,a) values (554,2);
+insert into t (id,a) values (554,3);
+insert into t (id,a) values (554,4);
+insert into t (id,a) values (554,5);
+insert into t (id,a) values (554,6);
+insert into t (id,a) values (554,7);
+insert into t (id,a) values (554,8);
+insert into t (id,a) values (554,9);
+insert into t (id,a) values (554,10);
+insert into t (id,a) values (554,11);
+insert into t (id,a) values (554,12);
+insert into t (id,a) values (554,13);
+insert into t (id,a) values (554,14);
+insert into t (id,a) values (554,15);
+insert into t (id,a) values (554,16);
+insert into t (id,a) values (554,17);
+insert into t (id,a) values (554,18);
+insert into t (id,a) values (554,19);
+insert into t (id,a) values (554,20);
+insert into t (id,a) values (554,21);
+insert into t (id,a) values (554,22);
+insert into t (id,a) values (554,23);
+insert into t (id,a) values (554,24);
+insert into t (id,a) values (554,25);
+insert into t (id,a) values (554,26);
+insert into t (id,a) values (554,27);
+insert into t (id,a) values (554,28);
+insert into t (id,a) values (554,29);
+insert into t (id,a) values (554,30);
+insert into t (id,a) values (554,31);
+insert into t (id,a) values (554,32);
+insert into t (id,a) values (554,33);
+insert into t (id,a) values (554,34);
+insert into t (id,a) values (554,35);
+insert into t (id,a) values (554,36);
+insert into t (id,a) values (554,37);
+insert into t (id,a) values (554,38);
+insert into t (id,a) values (554,39);
+insert into t (id,a) values (554,40);
+insert into t (id,a) values (554,41);
+insert into t (id,a) values (554,42);
+insert into t (id,a) values (554,43);
+insert into t (id,a) values (554,44);
+insert into t (id,a) values (554,45);
+insert into t (id,a) values (554,46);
+insert into t (id,a) values (554,47);
+insert into t (id,a) values (554,48);
+insert into t (id,a) values (554,49);
+insert into t (id,a) values (554,50);
+insert into t (id,a) values (554,51);
+insert into t (id,a) values (554,52);
+insert into t (id,a) values (554,53);
+insert into t (id,a) values (554,54);
+insert into t (id,a) values (554,55);
+insert into t (id,a) values (554,56);
+insert into t (id,a) values (554,57);
+insert into t (id,a) values (554,58);
+insert into t (id,a) values (554,59);
+insert into t (id,a) values (554,60);
+insert into t (id,a) values (554,61);
+insert into t (id,a) values (554,62);
+insert into t (id,a) values (554,63);
+insert into t (id,a) values (554,64);
+insert into t (id,a) values (554,65);
+insert into t (id,a) values (554,66);
+insert into t (id,a) values (554,67);
+insert into t (id,a) values (554,68);
+insert into t (id,a) values (554,69);
+insert into t (id,a) values (554,70);
+insert into t (id,a) values (554,71);
+insert into t (id,a) values (554,72);
+insert into t (id,a) values (554,73);
+insert into t (id,a) values (554,74);
+insert into t (id,a) values (554,75);
+insert into t (id,a) values (554,76);
+insert into t (id,a) values (554,77);
+insert into t (id,a) values (554,78);
+insert into t (id,a) values (554,79);
+insert into t (id,a) values (554,80);
+insert into t (id,a) values (554,81);
+insert into t (id,a) values (554,82);
+insert into t (id,a) values (554,83);
+insert into t (id,a) values (554,84);
+insert into t (id,a) values (554,85);
+insert into t (id,a) values (554,86);
+insert into t (id,a) values (554,87);
+insert into t (id,a) values (554,88);
+insert into t (id,a) values (554,89);
+insert into t (id,a) values (554,90);
+insert into t (id,a) values (554,91);
+insert into t (id,a) values (554,92);
+insert into t (id,a) values (554,93);
+insert into t (id,a) values (554,94);
+insert into t (id,a) values (554,95);
+insert into t (id,a) values (554,96);
+insert into t (id,a) values (554,97);
+insert into t (id,a) values (554,98);
+insert into t (id,a) values (554,99);
+insert into t (id,a) values (555,0);
+insert into t (id,a) values (555,1);
+insert into t (id,a) values (555,2);
+insert into t (id,a) values (555,3);
+insert into t (id,a) values (555,4);
+insert into t (id,a) values (555,5);
+insert into t (id,a) values (555,6);
+insert into t (id,a) values (555,7);
+insert into t (id,a) values (555,8);
+insert into t (id,a) values (555,9);
+insert into t (id,a) values (555,10);
+insert into t (id,a) values (555,11);
+insert into t (id,a) values (555,12);
+insert into t (id,a) values (555,13);
+insert into t (id,a) values (555,14);
+insert into t (id,a) values (555,15);
+insert into t (id,a) values (555,16);
+insert into t (id,a) values (555,17);
+insert into t (id,a) values (555,18);
+insert into t (id,a) values (555,19);
+insert into t (id,a) values (555,20);
+insert into t (id,a) values (555,21);
+insert into t (id,a) values (555,22);
+insert into t (id,a) values (555,23);
+insert into t (id,a) values (555,24);
+insert into t (id,a) values (555,25);
+insert into t (id,a) values (555,26);
+insert into t (id,a) values (555,27);
+insert into t (id,a) values (555,28);
+insert into t (id,a) values (555,29);
+insert into t (id,a) values (555,30);
+insert into t (id,a) values (555,31);
+insert into t (id,a) values (555,32);
+insert into t (id,a) values (555,33);
+insert into t (id,a) values (555,34);
+insert into t (id,a) values (555,35);
+insert into t (id,a) values (555,36);
+insert into t (id,a) values (555,37);
+insert into t (id,a) values (555,38);
+insert into t (id,a) values (555,39);
+insert into t (id,a) values (555,40);
+insert into t (id,a) values (555,41);
+insert into t (id,a) values (555,42);
+insert into t (id,a) values (555,43);
+insert into t (id,a) values (555,44);
+insert into t (id,a) values (555,45);
+insert into t (id,a) values (555,46);
+insert into t (id,a) values (555,47);
+insert into t (id,a) values (555,48);
+insert into t (id,a) values (555,49);
+insert into t (id,a) values (555,50);
+insert into t (id,a) values (555,51);
+insert into t (id,a) values (555,52);
+insert into t (id,a) values (555,53);
+insert into t (id,a) values (555,54);
+insert into t (id,a) values (555,55);
+insert into t (id,a) values (555,56);
+insert into t (id,a) values (555,57);
+insert into t (id,a) values (555,58);
+insert into t (id,a) values (555,59);
+insert into t (id,a) values (555,60);
+insert into t (id,a) values (555,61);
+insert into t (id,a) values (555,62);
+insert into t (id,a) values (555,63);
+insert into t (id,a) values (555,64);
+insert into t (id,a) values (555,65);
+insert into t (id,a) values (555,66);
+insert into t (id,a) values (555,67);
+insert into t (id,a) values (555,68);
+insert into t (id,a) values (555,69);
+insert into t (id,a) values (555,70);
+insert into t (id,a) values (555,71);
+insert into t (id,a) values (555,72);
+insert into t (id,a) values (555,73);
+insert into t (id,a) values (555,74);
+insert into t (id,a) values (555,75);
+insert into t (id,a) values (555,76);
+insert into t (id,a) values (555,77);
+insert into t (id,a) values (555,78);
+insert into t (id,a) values (555,79);
+insert into t (id,a) values (555,80);
+insert into t (id,a) values (555,81);
+insert into t (id,a) values (555,82);
+insert into t (id,a) values (555,83);
+insert into t (id,a) values (555,84);
+insert into t (id,a) values (555,85);
+insert into t (id,a) values (555,86);
+insert into t (id,a) values (555,87);
+insert into t (id,a) values (555,88);
+insert into t (id,a) values (555,89);
+insert into t (id,a) values (555,90);
+insert into t (id,a) values (555,91);
+insert into t (id,a) values (555,92);
+insert into t (id,a) values (555,93);
+insert into t (id,a) values (555,94);
+insert into t (id,a) values (555,95);
+insert into t (id,a) values (555,96);
+insert into t (id,a) values (555,97);
+insert into t (id,a) values (555,98);
+insert into t (id,a) values (555,99);
+insert into t (id,a) values (556,0);
+insert into t (id,a) values (556,1);
+insert into t (id,a) values (556,2);
+insert into t (id,a) values (556,3);
+insert into t (id,a) values (556,4);
+insert into t (id,a) values (556,5);
+insert into t (id,a) values (556,6);
+insert into t (id,a) values (556,7);
+insert into t (id,a) values (556,8);
+insert into t (id,a) values (556,9);
+insert into t (id,a) values (556,10);
+insert into t (id,a) values (556,11);
+insert into t (id,a) values (556,12);
+insert into t (id,a) values (556,13);
+insert into t (id,a) values (556,14);
+insert into t (id,a) values (556,15);
+insert into t (id,a) values (556,16);
+insert into t (id,a) values (556,17);
+insert into t (id,a) values (556,18);
+insert into t (id,a) values (556,19);
+insert into t (id,a) values (556,20);
+insert into t (id,a) values (556,21);
+insert into t (id,a) values (556,22);
+insert into t (id,a) values (556,23);
+insert into t (id,a) values (556,24);
+insert into t (id,a) values (556,25);
+insert into t (id,a) values (556,26);
+insert into t (id,a) values (556,27);
+insert into t (id,a) values (556,28);
+insert into t (id,a) values (556,29);
+insert into t (id,a) values (556,30);
+insert into t (id,a) values (556,31);
+insert into t (id,a) values (556,32);
+insert into t (id,a) values (556,33);
+insert into t (id,a) values (556,34);
+insert into t (id,a) values (556,35);
+insert into t (id,a) values (556,36);
+insert into t (id,a) values (556,37);
+insert into t (id,a) values (556,38);
+insert into t (id,a) values (556,39);
+insert into t (id,a) values (556,40);
+insert into t (id,a) values (556,41);
+insert into t (id,a) values (556,42);
+insert into t (id,a) values (556,43);
+insert into t (id,a) values (556,44);
+insert into t (id,a) values (556,45);
+insert into t (id,a) values (556,46);
+insert into t (id,a) values (556,47);
+insert into t (id,a) values (556,48);
+insert into t (id,a) values (556,49);
+insert into t (id,a) values (556,50);
+insert into t (id,a) values (556,51);
+insert into t (id,a) values (556,52);
+insert into t (id,a) values (556,53);
+insert into t (id,a) values (556,54);
+insert into t (id,a) values (556,55);
+insert into t (id,a) values (556,56);
+insert into t (id,a) values (556,57);
+insert into t (id,a) values (556,58);
+insert into t (id,a) values (556,59);
+insert into t (id,a) values (556,60);
+insert into t (id,a) values (556,61);
+insert into t (id,a) values (556,62);
+insert into t (id,a) values (556,63);
+insert into t (id,a) values (556,64);
+insert into t (id,a) values (556,65);
+insert into t (id,a) values (556,66);
+insert into t (id,a) values (556,67);
+insert into t (id,a) values (556,68);
+insert into t (id,a) values (556,69);
+insert into t (id,a) values (556,70);
+insert into t (id,a) values (556,71);
+insert into t (id,a) values (556,72);
+insert into t (id,a) values (556,73);
+insert into t (id,a) values (556,74);
+insert into t (id,a) values (556,75);
+insert into t (id,a) values (556,76);
+insert into t (id,a) values (556,77);
+insert into t (id,a) values (556,78);
+insert into t (id,a) values (556,79);
+insert into t (id,a) values (556,80);
+insert into t (id,a) values (556,81);
+insert into t (id,a) values (556,82);
+insert into t (id,a) values (556,83);
+insert into t (id,a) values (556,84);
+insert into t (id,a) values (556,85);
+insert into t (id,a) values (556,86);
+insert into t (id,a) values (556,87);
+insert into t (id,a) values (556,88);
+insert into t (id,a) values (556,89);
+insert into t (id,a) values (556,90);
+insert into t (id,a) values (556,91);
+insert into t (id,a) values (556,92);
+insert into t (id,a) values (556,93);
+insert into t (id,a) values (556,94);
+insert into t (id,a) values (556,95);
+insert into t (id,a) values (556,96);
+insert into t (id,a) values (556,97);
+insert into t (id,a) values (556,98);
+insert into t (id,a) values (556,99);
+insert into t (id,a) values (557,0);
+insert into t (id,a) values (557,1);
+insert into t (id,a) values (557,2);
+insert into t (id,a) values (557,3);
+insert into t (id,a) values (557,4);
+insert into t (id,a) values (557,5);
+insert into t (id,a) values (557,6);
+insert into t (id,a) values (557,7);
+insert into t (id,a) values (557,8);
+insert into t (id,a) values (557,9);
+insert into t (id,a) values (557,10);
+insert into t (id,a) values (557,11);
+insert into t (id,a) values (557,12);
+insert into t (id,a) values (557,13);
+insert into t (id,a) values (557,14);
+insert into t (id,a) values (557,15);
+insert into t (id,a) values (557,16);
+insert into t (id,a) values (557,17);
+insert into t (id,a) values (557,18);
+insert into t (id,a) values (557,19);
+insert into t (id,a) values (557,20);
+insert into t (id,a) values (557,21);
+insert into t (id,a) values (557,22);
+insert into t (id,a) values (557,23);
+insert into t (id,a) values (557,24);
+insert into t (id,a) values (557,25);
+insert into t (id,a) values (557,26);
+insert into t (id,a) values (557,27);
+insert into t (id,a) values (557,28);
+insert into t (id,a) values (557,29);
+insert into t (id,a) values (557,30);
+insert into t (id,a) values (557,31);
+insert into t (id,a) values (557,32);
+insert into t (id,a) values (557,33);
+insert into t (id,a) values (557,34);
+insert into t (id,a) values (557,35);
+insert into t (id,a) values (557,36);
+insert into t (id,a) values (557,37);
+insert into t (id,a) values (557,38);
+insert into t (id,a) values (557,39);
+insert into t (id,a) values (557,40);
+insert into t (id,a) values (557,41);
+insert into t (id,a) values (557,42);
+insert into t (id,a) values (557,43);
+insert into t (id,a) values (557,44);
+insert into t (id,a) values (557,45);
+insert into t (id,a) values (557,46);
+insert into t (id,a) values (557,47);
+insert into t (id,a) values (557,48);
+insert into t (id,a) values (557,49);
+insert into t (id,a) values (557,50);
+insert into t (id,a) values (557,51);
+insert into t (id,a) values (557,52);
+insert into t (id,a) values (557,53);
+insert into t (id,a) values (557,54);
+insert into t (id,a) values (557,55);
+insert into t (id,a) values (557,56);
+insert into t (id,a) values (557,57);
+insert into t (id,a) values (557,58);
+insert into t (id,a) values (557,59);
+insert into t (id,a) values (557,60);
+insert into t (id,a) values (557,61);
+insert into t (id,a) values (557,62);
+insert into t (id,a) values (557,63);
+insert into t (id,a) values (557,64);
+insert into t (id,a) values (557,65);
+insert into t (id,a) values (557,66);
+insert into t (id,a) values (557,67);
+insert into t (id,a) values (557,68);
+insert into t (id,a) values (557,69);
+insert into t (id,a) values (557,70);
+insert into t (id,a) values (557,71);
+insert into t (id,a) values (557,72);
+insert into t (id,a) values (557,73);
+insert into t (id,a) values (557,74);
+insert into t (id,a) values (557,75);
+insert into t (id,a) values (557,76);
+insert into t (id,a) values (557,77);
+insert into t (id,a) values (557,78);
+insert into t (id,a) values (557,79);
+insert into t (id,a) values (557,80);
+insert into t (id,a) values (557,81);
+insert into t (id,a) values (557,82);
+insert into t (id,a) values (557,83);
+insert into t (id,a) values (557,84);
+insert into t (id,a) values (557,85);
+insert into t (id,a) values (557,86);
+insert into t (id,a) values (557,87);
+insert into t (id,a) values (557,88);
+insert into t (id,a) values (557,89);
+insert into t (id,a) values (557,90);
+insert into t (id,a) values (557,91);
+insert into t (id,a) values (557,92);
+insert into t (id,a) values (557,93);
+insert into t (id,a) values (557,94);
+insert into t (id,a) values (557,95);
+insert into t (id,a) values (557,96);
+insert into t (id,a) values (557,97);
+insert into t (id,a) values (557,98);
+insert into t (id,a) values (557,99);
+insert into t (id,a) values (558,0);
+insert into t (id,a) values (558,1);
+insert into t (id,a) values (558,2);
+insert into t (id,a) values (558,3);
+insert into t (id,a) values (558,4);
+insert into t (id,a) values (558,5);
+insert into t (id,a) values (558,6);
+insert into t (id,a) values (558,7);
+insert into t (id,a) values (558,8);
+insert into t (id,a) values (558,9);
+insert into t (id,a) values (558,10);
+insert into t (id,a) values (558,11);
+insert into t (id,a) values (558,12);
+insert into t (id,a) values (558,13);
+insert into t (id,a) values (558,14);
+insert into t (id,a) values (558,15);
+insert into t (id,a) values (558,16);
+insert into t (id,a) values (558,17);
+insert into t (id,a) values (558,18);
+insert into t (id,a) values (558,19);
+insert into t (id,a) values (558,20);
+insert into t (id,a) values (558,21);
+insert into t (id,a) values (558,22);
+insert into t (id,a) values (558,23);
+insert into t (id,a) values (558,24);
+insert into t (id,a) values (558,25);
+insert into t (id,a) values (558,26);
+insert into t (id,a) values (558,27);
+insert into t (id,a) values (558,28);
+insert into t (id,a) values (558,29);
+insert into t (id,a) values (558,30);
+insert into t (id,a) values (558,31);
+insert into t (id,a) values (558,32);
+insert into t (id,a) values (558,33);
+insert into t (id,a) values (558,34);
+insert into t (id,a) values (558,35);
+insert into t (id,a) values (558,36);
+insert into t (id,a) values (558,37);
+insert into t (id,a) values (558,38);
+insert into t (id,a) values (558,39);
+insert into t (id,a) values (558,40);
+insert into t (id,a) values (558,41);
+insert into t (id,a) values (558,42);
+insert into t (id,a) values (558,43);
+insert into t (id,a) values (558,44);
+insert into t (id,a) values (558,45);
+insert into t (id,a) values (558,46);
+insert into t (id,a) values (558,47);
+insert into t (id,a) values (558,48);
+insert into t (id,a) values (558,49);
+insert into t (id,a) values (558,50);
+insert into t (id,a) values (558,51);
+insert into t (id,a) values (558,52);
+insert into t (id,a) values (558,53);
+insert into t (id,a) values (558,54);
+insert into t (id,a) values (558,55);
+insert into t (id,a) values (558,56);
+insert into t (id,a) values (558,57);
+insert into t (id,a) values (558,58);
+insert into t (id,a) values (558,59);
+insert into t (id,a) values (558,60);
+insert into t (id,a) values (558,61);
+insert into t (id,a) values (558,62);
+insert into t (id,a) values (558,63);
+insert into t (id,a) values (558,64);
+insert into t (id,a) values (558,65);
+insert into t (id,a) values (558,66);
+insert into t (id,a) values (558,67);
+insert into t (id,a) values (558,68);
+insert into t (id,a) values (558,69);
+insert into t (id,a) values (558,70);
+insert into t (id,a) values (558,71);
+insert into t (id,a) values (558,72);
+insert into t (id,a) values (558,73);
+insert into t (id,a) values (558,74);
+insert into t (id,a) values (558,75);
+insert into t (id,a) values (558,76);
+insert into t (id,a) values (558,77);
+insert into t (id,a) values (558,78);
+insert into t (id,a) values (558,79);
+insert into t (id,a) values (558,80);
+insert into t (id,a) values (558,81);
+insert into t (id,a) values (558,82);
+insert into t (id,a) values (558,83);
+insert into t (id,a) values (558,84);
+insert into t (id,a) values (558,85);
+insert into t (id,a) values (558,86);
+insert into t (id,a) values (558,87);
+insert into t (id,a) values (558,88);
+insert into t (id,a) values (558,89);
+insert into t (id,a) values (558,90);
+insert into t (id,a) values (558,91);
+insert into t (id,a) values (558,92);
+insert into t (id,a) values (558,93);
+insert into t (id,a) values (558,94);
+insert into t (id,a) values (558,95);
+insert into t (id,a) values (558,96);
+insert into t (id,a) values (558,97);
+insert into t (id,a) values (558,98);
+insert into t (id,a) values (558,99);
+insert into t (id,a) values (559,0);
+insert into t (id,a) values (559,1);
+insert into t (id,a) values (559,2);
+insert into t (id,a) values (559,3);
+insert into t (id,a) values (559,4);
+insert into t (id,a) values (559,5);
+insert into t (id,a) values (559,6);
+insert into t (id,a) values (559,7);
+insert into t (id,a) values (559,8);
+insert into t (id,a) values (559,9);
+insert into t (id,a) values (559,10);
+insert into t (id,a) values (559,11);
+insert into t (id,a) values (559,12);
+insert into t (id,a) values (559,13);
+insert into t (id,a) values (559,14);
+insert into t (id,a) values (559,15);
+insert into t (id,a) values (559,16);
+insert into t (id,a) values (559,17);
+insert into t (id,a) values (559,18);
+insert into t (id,a) values (559,19);
+insert into t (id,a) values (559,20);
+insert into t (id,a) values (559,21);
+insert into t (id,a) values (559,22);
+insert into t (id,a) values (559,23);
+insert into t (id,a) values (559,24);
+insert into t (id,a) values (559,25);
+insert into t (id,a) values (559,26);
+insert into t (id,a) values (559,27);
+insert into t (id,a) values (559,28);
+insert into t (id,a) values (559,29);
+insert into t (id,a) values (559,30);
+insert into t (id,a) values (559,31);
+insert into t (id,a) values (559,32);
+insert into t (id,a) values (559,33);
+insert into t (id,a) values (559,34);
+insert into t (id,a) values (559,35);
+insert into t (id,a) values (559,36);
+insert into t (id,a) values (559,37);
+insert into t (id,a) values (559,38);
+insert into t (id,a) values (559,39);
+insert into t (id,a) values (559,40);
+insert into t (id,a) values (559,41);
+insert into t (id,a) values (559,42);
+insert into t (id,a) values (559,43);
+insert into t (id,a) values (559,44);
+insert into t (id,a) values (559,45);
+insert into t (id,a) values (559,46);
+insert into t (id,a) values (559,47);
+insert into t (id,a) values (559,48);
+insert into t (id,a) values (559,49);
+insert into t (id,a) values (559,50);
+insert into t (id,a) values (559,51);
+insert into t (id,a) values (559,52);
+insert into t (id,a) values (559,53);
+insert into t (id,a) values (559,54);
+insert into t (id,a) values (559,55);
+insert into t (id,a) values (559,56);
+insert into t (id,a) values (559,57);
+insert into t (id,a) values (559,58);
+insert into t (id,a) values (559,59);
+insert into t (id,a) values (559,60);
+insert into t (id,a) values (559,61);
+insert into t (id,a) values (559,62);
+insert into t (id,a) values (559,63);
+insert into t (id,a) values (559,64);
+insert into t (id,a) values (559,65);
+insert into t (id,a) values (559,66);
+insert into t (id,a) values (559,67);
+insert into t (id,a) values (559,68);
+insert into t (id,a) values (559,69);
+insert into t (id,a) values (559,70);
+insert into t (id,a) values (559,71);
+insert into t (id,a) values (559,72);
+insert into t (id,a) values (559,73);
+insert into t (id,a) values (559,74);
+insert into t (id,a) values (559,75);
+insert into t (id,a) values (559,76);
+insert into t (id,a) values (559,77);
+insert into t (id,a) values (559,78);
+insert into t (id,a) values (559,79);
+insert into t (id,a) values (559,80);
+insert into t (id,a) values (559,81);
+insert into t (id,a) values (559,82);
+insert into t (id,a) values (559,83);
+insert into t (id,a) values (559,84);
+insert into t (id,a) values (559,85);
+insert into t (id,a) values (559,86);
+insert into t (id,a) values (559,87);
+insert into t (id,a) values (559,88);
+insert into t (id,a) values (559,89);
+insert into t (id,a) values (559,90);
+insert into t (id,a) values (559,91);
+insert into t (id,a) values (559,92);
+insert into t (id,a) values (559,93);
+insert into t (id,a) values (559,94);
+insert into t (id,a) values (559,95);
+insert into t (id,a) values (559,96);
+insert into t (id,a) values (559,97);
+insert into t (id,a) values (559,98);
+insert into t (id,a) values (559,99);
+insert into t (id,a) values (560,0);
+insert into t (id,a) values (560,1);
+insert into t (id,a) values (560,2);
+insert into t (id,a) values (560,3);
+insert into t (id,a) values (560,4);
+insert into t (id,a) values (560,5);
+insert into t (id,a) values (560,6);
+insert into t (id,a) values (560,7);
+insert into t (id,a) values (560,8);
+insert into t (id,a) values (560,9);
+insert into t (id,a) values (560,10);
+insert into t (id,a) values (560,11);
+insert into t (id,a) values (560,12);
+insert into t (id,a) values (560,13);
+insert into t (id,a) values (560,14);
+insert into t (id,a) values (560,15);
+insert into t (id,a) values (560,16);
+insert into t (id,a) values (560,17);
+insert into t (id,a) values (560,18);
+insert into t (id,a) values (560,19);
+insert into t (id,a) values (560,20);
+insert into t (id,a) values (560,21);
+insert into t (id,a) values (560,22);
+insert into t (id,a) values (560,23);
+insert into t (id,a) values (560,24);
+insert into t (id,a) values (560,25);
+insert into t (id,a) values (560,26);
+insert into t (id,a) values (560,27);
+insert into t (id,a) values (560,28);
+insert into t (id,a) values (560,29);
+insert into t (id,a) values (560,30);
+insert into t (id,a) values (560,31);
+insert into t (id,a) values (560,32);
+insert into t (id,a) values (560,33);
+insert into t (id,a) values (560,34);
+insert into t (id,a) values (560,35);
+insert into t (id,a) values (560,36);
+insert into t (id,a) values (560,37);
+insert into t (id,a) values (560,38);
+insert into t (id,a) values (560,39);
+insert into t (id,a) values (560,40);
+insert into t (id,a) values (560,41);
+insert into t (id,a) values (560,42);
+insert into t (id,a) values (560,43);
+insert into t (id,a) values (560,44);
+insert into t (id,a) values (560,45);
+insert into t (id,a) values (560,46);
+insert into t (id,a) values (560,47);
+insert into t (id,a) values (560,48);
+insert into t (id,a) values (560,49);
+insert into t (id,a) values (560,50);
+insert into t (id,a) values (560,51);
+insert into t (id,a) values (560,52);
+insert into t (id,a) values (560,53);
+insert into t (id,a) values (560,54);
+insert into t (id,a) values (560,55);
+insert into t (id,a) values (560,56);
+insert into t (id,a) values (560,57);
+insert into t (id,a) values (560,58);
+insert into t (id,a) values (560,59);
+insert into t (id,a) values (560,60);
+insert into t (id,a) values (560,61);
+insert into t (id,a) values (560,62);
+insert into t (id,a) values (560,63);
+insert into t (id,a) values (560,64);
+insert into t (id,a) values (560,65);
+insert into t (id,a) values (560,66);
+insert into t (id,a) values (560,67);
+insert into t (id,a) values (560,68);
+insert into t (id,a) values (560,69);
+insert into t (id,a) values (560,70);
+insert into t (id,a) values (560,71);
+insert into t (id,a) values (560,72);
+insert into t (id,a) values (560,73);
+insert into t (id,a) values (560,74);
+insert into t (id,a) values (560,75);
+insert into t (id,a) values (560,76);
+insert into t (id,a) values (560,77);
+insert into t (id,a) values (560,78);
+insert into t (id,a) values (560,79);
+insert into t (id,a) values (560,80);
+insert into t (id,a) values (560,81);
+insert into t (id,a) values (560,82);
+insert into t (id,a) values (560,83);
+insert into t (id,a) values (560,84);
+insert into t (id,a) values (560,85);
+insert into t (id,a) values (560,86);
+insert into t (id,a) values (560,87);
+insert into t (id,a) values (560,88);
+insert into t (id,a) values (560,89);
+insert into t (id,a) values (560,90);
+insert into t (id,a) values (560,91);
+insert into t (id,a) values (560,92);
+insert into t (id,a) values (560,93);
+insert into t (id,a) values (560,94);
+insert into t (id,a) values (560,95);
+insert into t (id,a) values (560,96);
+insert into t (id,a) values (560,97);
+insert into t (id,a) values (560,98);
+insert into t (id,a) values (560,99);
+insert into t (id,a) values (561,0);
+insert into t (id,a) values (561,1);
+insert into t (id,a) values (561,2);
+insert into t (id,a) values (561,3);
+insert into t (id,a) values (561,4);
+insert into t (id,a) values (561,5);
+insert into t (id,a) values (561,6);
+insert into t (id,a) values (561,7);
+insert into t (id,a) values (561,8);
+insert into t (id,a) values (561,9);
+insert into t (id,a) values (561,10);
+insert into t (id,a) values (561,11);
+insert into t (id,a) values (561,12);
+insert into t (id,a) values (561,13);
+insert into t (id,a) values (561,14);
+insert into t (id,a) values (561,15);
+insert into t (id,a) values (561,16);
+insert into t (id,a) values (561,17);
+insert into t (id,a) values (561,18);
+insert into t (id,a) values (561,19);
+insert into t (id,a) values (561,20);
+insert into t (id,a) values (561,21);
+insert into t (id,a) values (561,22);
+insert into t (id,a) values (561,23);
+insert into t (id,a) values (561,24);
+insert into t (id,a) values (561,25);
+insert into t (id,a) values (561,26);
+insert into t (id,a) values (561,27);
+insert into t (id,a) values (561,28);
+insert into t (id,a) values (561,29);
+insert into t (id,a) values (561,30);
+insert into t (id,a) values (561,31);
+insert into t (id,a) values (561,32);
+insert into t (id,a) values (561,33);
+insert into t (id,a) values (561,34);
+insert into t (id,a) values (561,35);
+insert into t (id,a) values (561,36);
+insert into t (id,a) values (561,37);
+insert into t (id,a) values (561,38);
+insert into t (id,a) values (561,39);
+insert into t (id,a) values (561,40);
+insert into t (id,a) values (561,41);
+insert into t (id,a) values (561,42);
+insert into t (id,a) values (561,43);
+insert into t (id,a) values (561,44);
+insert into t (id,a) values (561,45);
+insert into t (id,a) values (561,46);
+insert into t (id,a) values (561,47);
+insert into t (id,a) values (561,48);
+insert into t (id,a) values (561,49);
+insert into t (id,a) values (561,50);
+insert into t (id,a) values (561,51);
+insert into t (id,a) values (561,52);
+insert into t (id,a) values (561,53);
+insert into t (id,a) values (561,54);
+insert into t (id,a) values (561,55);
+insert into t (id,a) values (561,56);
+insert into t (id,a) values (561,57);
+insert into t (id,a) values (561,58);
+insert into t (id,a) values (561,59);
+insert into t (id,a) values (561,60);
+insert into t (id,a) values (561,61);
+insert into t (id,a) values (561,62);
+insert into t (id,a) values (561,63);
+insert into t (id,a) values (561,64);
+insert into t (id,a) values (561,65);
+insert into t (id,a) values (561,66);
+insert into t (id,a) values (561,67);
+insert into t (id,a) values (561,68);
+insert into t (id,a) values (561,69);
+insert into t (id,a) values (561,70);
+insert into t (id,a) values (561,71);
+insert into t (id,a) values (561,72);
+insert into t (id,a) values (561,73);
+insert into t (id,a) values (561,74);
+insert into t (id,a) values (561,75);
+insert into t (id,a) values (561,76);
+insert into t (id,a) values (561,77);
+insert into t (id,a) values (561,78);
+insert into t (id,a) values (561,79);
+insert into t (id,a) values (561,80);
+insert into t (id,a) values (561,81);
+insert into t (id,a) values (561,82);
+insert into t (id,a) values (561,83);
+insert into t (id,a) values (561,84);
+insert into t (id,a) values (561,85);
+insert into t (id,a) values (561,86);
+insert into t (id,a) values (561,87);
+insert into t (id,a) values (561,88);
+insert into t (id,a) values (561,89);
+insert into t (id,a) values (561,90);
+insert into t (id,a) values (561,91);
+insert into t (id,a) values (561,92);
+insert into t (id,a) values (561,93);
+insert into t (id,a) values (561,94);
+insert into t (id,a) values (561,95);
+insert into t (id,a) values (561,96);
+insert into t (id,a) values (561,97);
+insert into t (id,a) values (561,98);
+insert into t (id,a) values (561,99);
+insert into t (id,a) values (562,0);
+insert into t (id,a) values (562,1);
+insert into t (id,a) values (562,2);
+insert into t (id,a) values (562,3);
+insert into t (id,a) values (562,4);
+insert into t (id,a) values (562,5);
+insert into t (id,a) values (562,6);
+insert into t (id,a) values (562,7);
+insert into t (id,a) values (562,8);
+insert into t (id,a) values (562,9);
+insert into t (id,a) values (562,10);
+insert into t (id,a) values (562,11);
+insert into t (id,a) values (562,12);
+insert into t (id,a) values (562,13);
+insert into t (id,a) values (562,14);
+insert into t (id,a) values (562,15);
+insert into t (id,a) values (562,16);
+insert into t (id,a) values (562,17);
+insert into t (id,a) values (562,18);
+insert into t (id,a) values (562,19);
+insert into t (id,a) values (562,20);
+insert into t (id,a) values (562,21);
+insert into t (id,a) values (562,22);
+insert into t (id,a) values (562,23);
+insert into t (id,a) values (562,24);
+insert into t (id,a) values (562,25);
+insert into t (id,a) values (562,26);
+insert into t (id,a) values (562,27);
+insert into t (id,a) values (562,28);
+insert into t (id,a) values (562,29);
+insert into t (id,a) values (562,30);
+insert into t (id,a) values (562,31);
+insert into t (id,a) values (562,32);
+insert into t (id,a) values (562,33);
+insert into t (id,a) values (562,34);
+insert into t (id,a) values (562,35);
+insert into t (id,a) values (562,36);
+insert into t (id,a) values (562,37);
+insert into t (id,a) values (562,38);
+insert into t (id,a) values (562,39);
+insert into t (id,a) values (562,40);
+insert into t (id,a) values (562,41);
+insert into t (id,a) values (562,42);
+insert into t (id,a) values (562,43);
+insert into t (id,a) values (562,44);
+insert into t (id,a) values (562,45);
+insert into t (id,a) values (562,46);
+insert into t (id,a) values (562,47);
+insert into t (id,a) values (562,48);
+insert into t (id,a) values (562,49);
+insert into t (id,a) values (562,50);
+insert into t (id,a) values (562,51);
+insert into t (id,a) values (562,52);
+insert into t (id,a) values (562,53);
+insert into t (id,a) values (562,54);
+insert into t (id,a) values (562,55);
+insert into t (id,a) values (562,56);
+insert into t (id,a) values (562,57);
+insert into t (id,a) values (562,58);
+insert into t (id,a) values (562,59);
+insert into t (id,a) values (562,60);
+insert into t (id,a) values (562,61);
+insert into t (id,a) values (562,62);
+insert into t (id,a) values (562,63);
+insert into t (id,a) values (562,64);
+insert into t (id,a) values (562,65);
+insert into t (id,a) values (562,66);
+insert into t (id,a) values (562,67);
+insert into t (id,a) values (562,68);
+insert into t (id,a) values (562,69);
+insert into t (id,a) values (562,70);
+insert into t (id,a) values (562,71);
+insert into t (id,a) values (562,72);
+insert into t (id,a) values (562,73);
+insert into t (id,a) values (562,74);
+insert into t (id,a) values (562,75);
+insert into t (id,a) values (562,76);
+insert into t (id,a) values (562,77);
+insert into t (id,a) values (562,78);
+insert into t (id,a) values (562,79);
+insert into t (id,a) values (562,80);
+insert into t (id,a) values (562,81);
+insert into t (id,a) values (562,82);
+insert into t (id,a) values (562,83);
+insert into t (id,a) values (562,84);
+insert into t (id,a) values (562,85);
+insert into t (id,a) values (562,86);
+insert into t (id,a) values (562,87);
+insert into t (id,a) values (562,88);
+insert into t (id,a) values (562,89);
+insert into t (id,a) values (562,90);
+insert into t (id,a) values (562,91);
+insert into t (id,a) values (562,92);
+insert into t (id,a) values (562,93);
+insert into t (id,a) values (562,94);
+insert into t (id,a) values (562,95);
+insert into t (id,a) values (562,96);
+insert into t (id,a) values (562,97);
+insert into t (id,a) values (562,98);
+insert into t (id,a) values (562,99);
+insert into t (id,a) values (563,0);
+insert into t (id,a) values (563,1);
+insert into t (id,a) values (563,2);
+insert into t (id,a) values (563,3);
+insert into t (id,a) values (563,4);
+insert into t (id,a) values (563,5);
+insert into t (id,a) values (563,6);
+insert into t (id,a) values (563,7);
+insert into t (id,a) values (563,8);
+insert into t (id,a) values (563,9);
+insert into t (id,a) values (563,10);
+insert into t (id,a) values (563,11);
+insert into t (id,a) values (563,12);
+insert into t (id,a) values (563,13);
+insert into t (id,a) values (563,14);
+insert into t (id,a) values (563,15);
+insert into t (id,a) values (563,16);
+insert into t (id,a) values (563,17);
+insert into t (id,a) values (563,18);
+insert into t (id,a) values (563,19);
+insert into t (id,a) values (563,20);
+insert into t (id,a) values (563,21);
+insert into t (id,a) values (563,22);
+insert into t (id,a) values (563,23);
+insert into t (id,a) values (563,24);
+insert into t (id,a) values (563,25);
+insert into t (id,a) values (563,26);
+insert into t (id,a) values (563,27);
+insert into t (id,a) values (563,28);
+insert into t (id,a) values (563,29);
+insert into t (id,a) values (563,30);
+insert into t (id,a) values (563,31);
+insert into t (id,a) values (563,32);
+insert into t (id,a) values (563,33);
+insert into t (id,a) values (563,34);
+insert into t (id,a) values (563,35);
+insert into t (id,a) values (563,36);
+insert into t (id,a) values (563,37);
+insert into t (id,a) values (563,38);
+insert into t (id,a) values (563,39);
+insert into t (id,a) values (563,40);
+insert into t (id,a) values (563,41);
+insert into t (id,a) values (563,42);
+insert into t (id,a) values (563,43);
+insert into t (id,a) values (563,44);
+insert into t (id,a) values (563,45);
+insert into t (id,a) values (563,46);
+insert into t (id,a) values (563,47);
+insert into t (id,a) values (563,48);
+insert into t (id,a) values (563,49);
+insert into t (id,a) values (563,50);
+insert into t (id,a) values (563,51);
+insert into t (id,a) values (563,52);
+insert into t (id,a) values (563,53);
+insert into t (id,a) values (563,54);
+insert into t (id,a) values (563,55);
+insert into t (id,a) values (563,56);
+insert into t (id,a) values (563,57);
+insert into t (id,a) values (563,58);
+insert into t (id,a) values (563,59);
+insert into t (id,a) values (563,60);
+insert into t (id,a) values (563,61);
+insert into t (id,a) values (563,62);
+insert into t (id,a) values (563,63);
+insert into t (id,a) values (563,64);
+insert into t (id,a) values (563,65);
+insert into t (id,a) values (563,66);
+insert into t (id,a) values (563,67);
+insert into t (id,a) values (563,68);
+insert into t (id,a) values (563,69);
+insert into t (id,a) values (563,70);
+insert into t (id,a) values (563,71);
+insert into t (id,a) values (563,72);
+insert into t (id,a) values (563,73);
+insert into t (id,a) values (563,74);
+insert into t (id,a) values (563,75);
+insert into t (id,a) values (563,76);
+insert into t (id,a) values (563,77);
+insert into t (id,a) values (563,78);
+insert into t (id,a) values (563,79);
+insert into t (id,a) values (563,80);
+insert into t (id,a) values (563,81);
+insert into t (id,a) values (563,82);
+insert into t (id,a) values (563,83);
+insert into t (id,a) values (563,84);
+insert into t (id,a) values (563,85);
+insert into t (id,a) values (563,86);
+insert into t (id,a) values (563,87);
+insert into t (id,a) values (563,88);
+insert into t (id,a) values (563,89);
+insert into t (id,a) values (563,90);
+insert into t (id,a) values (563,91);
+insert into t (id,a) values (563,92);
+insert into t (id,a) values (563,93);
+insert into t (id,a) values (563,94);
+insert into t (id,a) values (563,95);
+insert into t (id,a) values (563,96);
+insert into t (id,a) values (563,97);
+insert into t (id,a) values (563,98);
+insert into t (id,a) values (563,99);
+insert into t (id,a) values (564,0);
+insert into t (id,a) values (564,1);
+insert into t (id,a) values (564,2);
+insert into t (id,a) values (564,3);
+insert into t (id,a) values (564,4);
+insert into t (id,a) values (564,5);
+insert into t (id,a) values (564,6);
+insert into t (id,a) values (564,7);
+insert into t (id,a) values (564,8);
+insert into t (id,a) values (564,9);
+insert into t (id,a) values (564,10);
+insert into t (id,a) values (564,11);
+insert into t (id,a) values (564,12);
+insert into t (id,a) values (564,13);
+insert into t (id,a) values (564,14);
+insert into t (id,a) values (564,15);
+insert into t (id,a) values (564,16);
+insert into t (id,a) values (564,17);
+insert into t (id,a) values (564,18);
+insert into t (id,a) values (564,19);
+insert into t (id,a) values (564,20);
+insert into t (id,a) values (564,21);
+insert into t (id,a) values (564,22);
+insert into t (id,a) values (564,23);
+insert into t (id,a) values (564,24);
+insert into t (id,a) values (564,25);
+insert into t (id,a) values (564,26);
+insert into t (id,a) values (564,27);
+insert into t (id,a) values (564,28);
+insert into t (id,a) values (564,29);
+insert into t (id,a) values (564,30);
+insert into t (id,a) values (564,31);
+insert into t (id,a) values (564,32);
+insert into t (id,a) values (564,33);
+insert into t (id,a) values (564,34);
+insert into t (id,a) values (564,35);
+insert into t (id,a) values (564,36);
+insert into t (id,a) values (564,37);
+insert into t (id,a) values (564,38);
+insert into t (id,a) values (564,39);
+insert into t (id,a) values (564,40);
+insert into t (id,a) values (564,41);
+insert into t (id,a) values (564,42);
+insert into t (id,a) values (564,43);
+insert into t (id,a) values (564,44);
+insert into t (id,a) values (564,45);
+insert into t (id,a) values (564,46);
+insert into t (id,a) values (564,47);
+insert into t (id,a) values (564,48);
+insert into t (id,a) values (564,49);
+insert into t (id,a) values (564,50);
+insert into t (id,a) values (564,51);
+insert into t (id,a) values (564,52);
+insert into t (id,a) values (564,53);
+insert into t (id,a) values (564,54);
+insert into t (id,a) values (564,55);
+insert into t (id,a) values (564,56);
+insert into t (id,a) values (564,57);
+insert into t (id,a) values (564,58);
+insert into t (id,a) values (564,59);
+insert into t (id,a) values (564,60);
+insert into t (id,a) values (564,61);
+insert into t (id,a) values (564,62);
+insert into t (id,a) values (564,63);
+insert into t (id,a) values (564,64);
+insert into t (id,a) values (564,65);
+insert into t (id,a) values (564,66);
+insert into t (id,a) values (564,67);
+insert into t (id,a) values (564,68);
+insert into t (id,a) values (564,69);
+insert into t (id,a) values (564,70);
+insert into t (id,a) values (564,71);
+insert into t (id,a) values (564,72);
+insert into t (id,a) values (564,73);
+insert into t (id,a) values (564,74);
+insert into t (id,a) values (564,75);
+insert into t (id,a) values (564,76);
+insert into t (id,a) values (564,77);
+insert into t (id,a) values (564,78);
+insert into t (id,a) values (564,79);
+insert into t (id,a) values (564,80);
+insert into t (id,a) values (564,81);
+insert into t (id,a) values (564,82);
+insert into t (id,a) values (564,83);
+insert into t (id,a) values (564,84);
+insert into t (id,a) values (564,85);
+insert into t (id,a) values (564,86);
+insert into t (id,a) values (564,87);
+insert into t (id,a) values (564,88);
+insert into t (id,a) values (564,89);
+insert into t (id,a) values (564,90);
+insert into t (id,a) values (564,91);
+insert into t (id,a) values (564,92);
+insert into t (id,a) values (564,93);
+insert into t (id,a) values (564,94);
+insert into t (id,a) values (564,95);
+insert into t (id,a) values (564,96);
+insert into t (id,a) values (564,97);
+insert into t (id,a) values (564,98);
+insert into t (id,a) values (564,99);
+insert into t (id,a) values (565,0);
+insert into t (id,a) values (565,1);
+insert into t (id,a) values (565,2);
+insert into t (id,a) values (565,3);
+insert into t (id,a) values (565,4);
+insert into t (id,a) values (565,5);
+insert into t (id,a) values (565,6);
+insert into t (id,a) values (565,7);
+insert into t (id,a) values (565,8);
+insert into t (id,a) values (565,9);
+insert into t (id,a) values (565,10);
+insert into t (id,a) values (565,11);
+insert into t (id,a) values (565,12);
+insert into t (id,a) values (565,13);
+insert into t (id,a) values (565,14);
+insert into t (id,a) values (565,15);
+insert into t (id,a) values (565,16);
+insert into t (id,a) values (565,17);
+insert into t (id,a) values (565,18);
+insert into t (id,a) values (565,19);
+insert into t (id,a) values (565,20);
+insert into t (id,a) values (565,21);
+insert into t (id,a) values (565,22);
+insert into t (id,a) values (565,23);
+insert into t (id,a) values (565,24);
+insert into t (id,a) values (565,25);
+insert into t (id,a) values (565,26);
+insert into t (id,a) values (565,27);
+insert into t (id,a) values (565,28);
+insert into t (id,a) values (565,29);
+insert into t (id,a) values (565,30);
+insert into t (id,a) values (565,31);
+insert into t (id,a) values (565,32);
+insert into t (id,a) values (565,33);
+insert into t (id,a) values (565,34);
+insert into t (id,a) values (565,35);
+insert into t (id,a) values (565,36);
+insert into t (id,a) values (565,37);
+insert into t (id,a) values (565,38);
+insert into t (id,a) values (565,39);
+insert into t (id,a) values (565,40);
+insert into t (id,a) values (565,41);
+insert into t (id,a) values (565,42);
+insert into t (id,a) values (565,43);
+insert into t (id,a) values (565,44);
+insert into t (id,a) values (565,45);
+insert into t (id,a) values (565,46);
+insert into t (id,a) values (565,47);
+insert into t (id,a) values (565,48);
+insert into t (id,a) values (565,49);
+insert into t (id,a) values (565,50);
+insert into t (id,a) values (565,51);
+insert into t (id,a) values (565,52);
+insert into t (id,a) values (565,53);
+insert into t (id,a) values (565,54);
+insert into t (id,a) values (565,55);
+insert into t (id,a) values (565,56);
+insert into t (id,a) values (565,57);
+insert into t (id,a) values (565,58);
+insert into t (id,a) values (565,59);
+insert into t (id,a) values (565,60);
+insert into t (id,a) values (565,61);
+insert into t (id,a) values (565,62);
+insert into t (id,a) values (565,63);
+insert into t (id,a) values (565,64);
+insert into t (id,a) values (565,65);
+insert into t (id,a) values (565,66);
+insert into t (id,a) values (565,67);
+insert into t (id,a) values (565,68);
+insert into t (id,a) values (565,69);
+insert into t (id,a) values (565,70);
+insert into t (id,a) values (565,71);
+insert into t (id,a) values (565,72);
+insert into t (id,a) values (565,73);
+insert into t (id,a) values (565,74);
+insert into t (id,a) values (565,75);
+insert into t (id,a) values (565,76);
+insert into t (id,a) values (565,77);
+insert into t (id,a) values (565,78);
+insert into t (id,a) values (565,79);
+insert into t (id,a) values (565,80);
+insert into t (id,a) values (565,81);
+insert into t (id,a) values (565,82);
+insert into t (id,a) values (565,83);
+insert into t (id,a) values (565,84);
+insert into t (id,a) values (565,85);
+insert into t (id,a) values (565,86);
+insert into t (id,a) values (565,87);
+insert into t (id,a) values (565,88);
+insert into t (id,a) values (565,89);
+insert into t (id,a) values (565,90);
+insert into t (id,a) values (565,91);
+insert into t (id,a) values (565,92);
+insert into t (id,a) values (565,93);
+insert into t (id,a) values (565,94);
+insert into t (id,a) values (565,95);
+insert into t (id,a) values (565,96);
+insert into t (id,a) values (565,97);
+insert into t (id,a) values (565,98);
+insert into t (id,a) values (565,99);
+insert into t (id,a) values (566,0);
+insert into t (id,a) values (566,1);
+insert into t (id,a) values (566,2);
+insert into t (id,a) values (566,3);
+insert into t (id,a) values (566,4);
+insert into t (id,a) values (566,5);
+insert into t (id,a) values (566,6);
+insert into t (id,a) values (566,7);
+insert into t (id,a) values (566,8);
+insert into t (id,a) values (566,9);
+insert into t (id,a) values (566,10);
+insert into t (id,a) values (566,11);
+insert into t (id,a) values (566,12);
+insert into t (id,a) values (566,13);
+insert into t (id,a) values (566,14);
+insert into t (id,a) values (566,15);
+insert into t (id,a) values (566,16);
+insert into t (id,a) values (566,17);
+insert into t (id,a) values (566,18);
+insert into t (id,a) values (566,19);
+insert into t (id,a) values (566,20);
+insert into t (id,a) values (566,21);
+insert into t (id,a) values (566,22);
+insert into t (id,a) values (566,23);
+insert into t (id,a) values (566,24);
+insert into t (id,a) values (566,25);
+insert into t (id,a) values (566,26);
+insert into t (id,a) values (566,27);
+insert into t (id,a) values (566,28);
+insert into t (id,a) values (566,29);
+insert into t (id,a) values (566,30);
+insert into t (id,a) values (566,31);
+insert into t (id,a) values (566,32);
+insert into t (id,a) values (566,33);
+insert into t (id,a) values (566,34);
+insert into t (id,a) values (566,35);
+insert into t (id,a) values (566,36);
+insert into t (id,a) values (566,37);
+insert into t (id,a) values (566,38);
+insert into t (id,a) values (566,39);
+insert into t (id,a) values (566,40);
+insert into t (id,a) values (566,41);
+insert into t (id,a) values (566,42);
+insert into t (id,a) values (566,43);
+insert into t (id,a) values (566,44);
+insert into t (id,a) values (566,45);
+insert into t (id,a) values (566,46);
+insert into t (id,a) values (566,47);
+insert into t (id,a) values (566,48);
+insert into t (id,a) values (566,49);
+insert into t (id,a) values (566,50);
+insert into t (id,a) values (566,51);
+insert into t (id,a) values (566,52);
+insert into t (id,a) values (566,53);
+insert into t (id,a) values (566,54);
+insert into t (id,a) values (566,55);
+insert into t (id,a) values (566,56);
+insert into t (id,a) values (566,57);
+insert into t (id,a) values (566,58);
+insert into t (id,a) values (566,59);
+insert into t (id,a) values (566,60);
+insert into t (id,a) values (566,61);
+insert into t (id,a) values (566,62);
+insert into t (id,a) values (566,63);
+insert into t (id,a) values (566,64);
+insert into t (id,a) values (566,65);
+insert into t (id,a) values (566,66);
+insert into t (id,a) values (566,67);
+insert into t (id,a) values (566,68);
+insert into t (id,a) values (566,69);
+insert into t (id,a) values (566,70);
+insert into t (id,a) values (566,71);
+insert into t (id,a) values (566,72);
+insert into t (id,a) values (566,73);
+insert into t (id,a) values (566,74);
+insert into t (id,a) values (566,75);
+insert into t (id,a) values (566,76);
+insert into t (id,a) values (566,77);
+insert into t (id,a) values (566,78);
+insert into t (id,a) values (566,79);
+insert into t (id,a) values (566,80);
+insert into t (id,a) values (566,81);
+insert into t (id,a) values (566,82);
+insert into t (id,a) values (566,83);
+insert into t (id,a) values (566,84);
+insert into t (id,a) values (566,85);
+insert into t (id,a) values (566,86);
+insert into t (id,a) values (566,87);
+insert into t (id,a) values (566,88);
+insert into t (id,a) values (566,89);
+insert into t (id,a) values (566,90);
+insert into t (id,a) values (566,91);
+insert into t (id,a) values (566,92);
+insert into t (id,a) values (566,93);
+insert into t (id,a) values (566,94);
+insert into t (id,a) values (566,95);
+insert into t (id,a) values (566,96);
+insert into t (id,a) values (566,97);
+insert into t (id,a) values (566,98);
+insert into t (id,a) values (566,99);
+insert into t (id,a) values (567,0);
+insert into t (id,a) values (567,1);
+insert into t (id,a) values (567,2);
+insert into t (id,a) values (567,3);
+insert into t (id,a) values (567,4);
+insert into t (id,a) values (567,5);
+insert into t (id,a) values (567,6);
+insert into t (id,a) values (567,7);
+insert into t (id,a) values (567,8);
+insert into t (id,a) values (567,9);
+insert into t (id,a) values (567,10);
+insert into t (id,a) values (567,11);
+insert into t (id,a) values (567,12);
+insert into t (id,a) values (567,13);
+insert into t (id,a) values (567,14);
+insert into t (id,a) values (567,15);
+insert into t (id,a) values (567,16);
+insert into t (id,a) values (567,17);
+insert into t (id,a) values (567,18);
+insert into t (id,a) values (567,19);
+insert into t (id,a) values (567,20);
+insert into t (id,a) values (567,21);
+insert into t (id,a) values (567,22);
+insert into t (id,a) values (567,23);
+insert into t (id,a) values (567,24);
+insert into t (id,a) values (567,25);
+insert into t (id,a) values (567,26);
+insert into t (id,a) values (567,27);
+insert into t (id,a) values (567,28);
+insert into t (id,a) values (567,29);
+insert into t (id,a) values (567,30);
+insert into t (id,a) values (567,31);
+insert into t (id,a) values (567,32);
+insert into t (id,a) values (567,33);
+insert into t (id,a) values (567,34);
+insert into t (id,a) values (567,35);
+insert into t (id,a) values (567,36);
+insert into t (id,a) values (567,37);
+insert into t (id,a) values (567,38);
+insert into t (id,a) values (567,39);
+insert into t (id,a) values (567,40);
+insert into t (id,a) values (567,41);
+insert into t (id,a) values (567,42);
+insert into t (id,a) values (567,43);
+insert into t (id,a) values (567,44);
+insert into t (id,a) values (567,45);
+insert into t (id,a) values (567,46);
+insert into t (id,a) values (567,47);
+insert into t (id,a) values (567,48);
+insert into t (id,a) values (567,49);
+insert into t (id,a) values (567,50);
+insert into t (id,a) values (567,51);
+insert into t (id,a) values (567,52);
+insert into t (id,a) values (567,53);
+insert into t (id,a) values (567,54);
+insert into t (id,a) values (567,55);
+insert into t (id,a) values (567,56);
+insert into t (id,a) values (567,57);
+insert into t (id,a) values (567,58);
+insert into t (id,a) values (567,59);
+insert into t (id,a) values (567,60);
+insert into t (id,a) values (567,61);
+insert into t (id,a) values (567,62);
+insert into t (id,a) values (567,63);
+insert into t (id,a) values (567,64);
+insert into t (id,a) values (567,65);
+insert into t (id,a) values (567,66);
+insert into t (id,a) values (567,67);
+insert into t (id,a) values (567,68);
+insert into t (id,a) values (567,69);
+insert into t (id,a) values (567,70);
+insert into t (id,a) values (567,71);
+insert into t (id,a) values (567,72);
+insert into t (id,a) values (567,73);
+insert into t (id,a) values (567,74);
+insert into t (id,a) values (567,75);
+insert into t (id,a) values (567,76);
+insert into t (id,a) values (567,77);
+insert into t (id,a) values (567,78);
+insert into t (id,a) values (567,79);
+insert into t (id,a) values (567,80);
+insert into t (id,a) values (567,81);
+insert into t (id,a) values (567,82);
+insert into t (id,a) values (567,83);
+insert into t (id,a) values (567,84);
+insert into t (id,a) values (567,85);
+insert into t (id,a) values (567,86);
+insert into t (id,a) values (567,87);
+insert into t (id,a) values (567,88);
+insert into t (id,a) values (567,89);
+insert into t (id,a) values (567,90);
+insert into t (id,a) values (567,91);
+insert into t (id,a) values (567,92);
+insert into t (id,a) values (567,93);
+insert into t (id,a) values (567,94);
+insert into t (id,a) values (567,95);
+insert into t (id,a) values (567,96);
+insert into t (id,a) values (567,97);
+insert into t (id,a) values (567,98);
+insert into t (id,a) values (567,99);
+insert into t (id,a) values (568,0);
+insert into t (id,a) values (568,1);
+insert into t (id,a) values (568,2);
+insert into t (id,a) values (568,3);
+insert into t (id,a) values (568,4);
+insert into t (id,a) values (568,5);
+insert into t (id,a) values (568,6);
+insert into t (id,a) values (568,7);
+insert into t (id,a) values (568,8);
+insert into t (id,a) values (568,9);
+insert into t (id,a) values (568,10);
+insert into t (id,a) values (568,11);
+insert into t (id,a) values (568,12);
+insert into t (id,a) values (568,13);
+insert into t (id,a) values (568,14);
+insert into t (id,a) values (568,15);
+insert into t (id,a) values (568,16);
+insert into t (id,a) values (568,17);
+insert into t (id,a) values (568,18);
+insert into t (id,a) values (568,19);
+insert into t (id,a) values (568,20);
+insert into t (id,a) values (568,21);
+insert into t (id,a) values (568,22);
+insert into t (id,a) values (568,23);
+insert into t (id,a) values (568,24);
+insert into t (id,a) values (568,25);
+insert into t (id,a) values (568,26);
+insert into t (id,a) values (568,27);
+insert into t (id,a) values (568,28);
+insert into t (id,a) values (568,29);
+insert into t (id,a) values (568,30);
+insert into t (id,a) values (568,31);
+insert into t (id,a) values (568,32);
+insert into t (id,a) values (568,33);
+insert into t (id,a) values (568,34);
+insert into t (id,a) values (568,35);
+insert into t (id,a) values (568,36);
+insert into t (id,a) values (568,37);
+insert into t (id,a) values (568,38);
+insert into t (id,a) values (568,39);
+insert into t (id,a) values (568,40);
+insert into t (id,a) values (568,41);
+insert into t (id,a) values (568,42);
+insert into t (id,a) values (568,43);
+insert into t (id,a) values (568,44);
+insert into t (id,a) values (568,45);
+insert into t (id,a) values (568,46);
+insert into t (id,a) values (568,47);
+insert into t (id,a) values (568,48);
+insert into t (id,a) values (568,49);
+insert into t (id,a) values (568,50);
+insert into t (id,a) values (568,51);
+insert into t (id,a) values (568,52);
+insert into t (id,a) values (568,53);
+insert into t (id,a) values (568,54);
+insert into t (id,a) values (568,55);
+insert into t (id,a) values (568,56);
+insert into t (id,a) values (568,57);
+insert into t (id,a) values (568,58);
+insert into t (id,a) values (568,59);
+insert into t (id,a) values (568,60);
+insert into t (id,a) values (568,61);
+insert into t (id,a) values (568,62);
+insert into t (id,a) values (568,63);
+insert into t (id,a) values (568,64);
+insert into t (id,a) values (568,65);
+insert into t (id,a) values (568,66);
+insert into t (id,a) values (568,67);
+insert into t (id,a) values (568,68);
+insert into t (id,a) values (568,69);
+insert into t (id,a) values (568,70);
+insert into t (id,a) values (568,71);
+insert into t (id,a) values (568,72);
+insert into t (id,a) values (568,73);
+insert into t (id,a) values (568,74);
+insert into t (id,a) values (568,75);
+insert into t (id,a) values (568,76);
+insert into t (id,a) values (568,77);
+insert into t (id,a) values (568,78);
+insert into t (id,a) values (568,79);
+insert into t (id,a) values (568,80);
+insert into t (id,a) values (568,81);
+insert into t (id,a) values (568,82);
+insert into t (id,a) values (568,83);
+insert into t (id,a) values (568,84);
+insert into t (id,a) values (568,85);
+insert into t (id,a) values (568,86);
+insert into t (id,a) values (568,87);
+insert into t (id,a) values (568,88);
+insert into t (id,a) values (568,89);
+insert into t (id,a) values (568,90);
+insert into t (id,a) values (568,91);
+insert into t (id,a) values (568,92);
+insert into t (id,a) values (568,93);
+insert into t (id,a) values (568,94);
+insert into t (id,a) values (568,95);
+insert into t (id,a) values (568,96);
+insert into t (id,a) values (568,97);
+insert into t (id,a) values (568,98);
+insert into t (id,a) values (568,99);
+insert into t (id,a) values (569,0);
+insert into t (id,a) values (569,1);
+insert into t (id,a) values (569,2);
+insert into t (id,a) values (569,3);
+insert into t (id,a) values (569,4);
+insert into t (id,a) values (569,5);
+insert into t (id,a) values (569,6);
+insert into t (id,a) values (569,7);
+insert into t (id,a) values (569,8);
+insert into t (id,a) values (569,9);
+insert into t (id,a) values (569,10);
+insert into t (id,a) values (569,11);
+insert into t (id,a) values (569,12);
+insert into t (id,a) values (569,13);
+insert into t (id,a) values (569,14);
+insert into t (id,a) values (569,15);
+insert into t (id,a) values (569,16);
+insert into t (id,a) values (569,17);
+insert into t (id,a) values (569,18);
+insert into t (id,a) values (569,19);
+insert into t (id,a) values (569,20);
+insert into t (id,a) values (569,21);
+insert into t (id,a) values (569,22);
+insert into t (id,a) values (569,23);
+insert into t (id,a) values (569,24);
+insert into t (id,a) values (569,25);
+insert into t (id,a) values (569,26);
+insert into t (id,a) values (569,27);
+insert into t (id,a) values (569,28);
+insert into t (id,a) values (569,29);
+insert into t (id,a) values (569,30);
+insert into t (id,a) values (569,31);
+insert into t (id,a) values (569,32);
+insert into t (id,a) values (569,33);
+insert into t (id,a) values (569,34);
+insert into t (id,a) values (569,35);
+insert into t (id,a) values (569,36);
+insert into t (id,a) values (569,37);
+insert into t (id,a) values (569,38);
+insert into t (id,a) values (569,39);
+insert into t (id,a) values (569,40);
+insert into t (id,a) values (569,41);
+insert into t (id,a) values (569,42);
+insert into t (id,a) values (569,43);
+insert into t (id,a) values (569,44);
+insert into t (id,a) values (569,45);
+insert into t (id,a) values (569,46);
+insert into t (id,a) values (569,47);
+insert into t (id,a) values (569,48);
+insert into t (id,a) values (569,49);
+insert into t (id,a) values (569,50);
+insert into t (id,a) values (569,51);
+insert into t (id,a) values (569,52);
+insert into t (id,a) values (569,53);
+insert into t (id,a) values (569,54);
+insert into t (id,a) values (569,55);
+insert into t (id,a) values (569,56);
+insert into t (id,a) values (569,57);
+insert into t (id,a) values (569,58);
+insert into t (id,a) values (569,59);
+insert into t (id,a) values (569,60);
+insert into t (id,a) values (569,61);
+insert into t (id,a) values (569,62);
+insert into t (id,a) values (569,63);
+insert into t (id,a) values (569,64);
+insert into t (id,a) values (569,65);
+insert into t (id,a) values (569,66);
+insert into t (id,a) values (569,67);
+insert into t (id,a) values (569,68);
+insert into t (id,a) values (569,69);
+insert into t (id,a) values (569,70);
+insert into t (id,a) values (569,71);
+insert into t (id,a) values (569,72);
+insert into t (id,a) values (569,73);
+insert into t (id,a) values (569,74);
+insert into t (id,a) values (569,75);
+insert into t (id,a) values (569,76);
+insert into t (id,a) values (569,77);
+insert into t (id,a) values (569,78);
+insert into t (id,a) values (569,79);
+insert into t (id,a) values (569,80);
+insert into t (id,a) values (569,81);
+insert into t (id,a) values (569,82);
+insert into t (id,a) values (569,83);
+insert into t (id,a) values (569,84);
+insert into t (id,a) values (569,85);
+insert into t (id,a) values (569,86);
+insert into t (id,a) values (569,87);
+insert into t (id,a) values (569,88);
+insert into t (id,a) values (569,89);
+insert into t (id,a) values (569,90);
+insert into t (id,a) values (569,91);
+insert into t (id,a) values (569,92);
+insert into t (id,a) values (569,93);
+insert into t (id,a) values (569,94);
+insert into t (id,a) values (569,95);
+insert into t (id,a) values (569,96);
+insert into t (id,a) values (569,97);
+insert into t (id,a) values (569,98);
+insert into t (id,a) values (569,99);
+insert into t (id,a) values (570,0);
+insert into t (id,a) values (570,1);
+insert into t (id,a) values (570,2);
+insert into t (id,a) values (570,3);
+insert into t (id,a) values (570,4);
+insert into t (id,a) values (570,5);
+insert into t (id,a) values (570,6);
+insert into t (id,a) values (570,7);
+insert into t (id,a) values (570,8);
+insert into t (id,a) values (570,9);
+insert into t (id,a) values (570,10);
+insert into t (id,a) values (570,11);
+insert into t (id,a) values (570,12);
+insert into t (id,a) values (570,13);
+insert into t (id,a) values (570,14);
+insert into t (id,a) values (570,15);
+insert into t (id,a) values (570,16);
+insert into t (id,a) values (570,17);
+insert into t (id,a) values (570,18);
+insert into t (id,a) values (570,19);
+insert into t (id,a) values (570,20);
+insert into t (id,a) values (570,21);
+insert into t (id,a) values (570,22);
+insert into t (id,a) values (570,23);
+insert into t (id,a) values (570,24);
+insert into t (id,a) values (570,25);
+insert into t (id,a) values (570,26);
+insert into t (id,a) values (570,27);
+insert into t (id,a) values (570,28);
+insert into t (id,a) values (570,29);
+insert into t (id,a) values (570,30);
+insert into t (id,a) values (570,31);
+insert into t (id,a) values (570,32);
+insert into t (id,a) values (570,33);
+insert into t (id,a) values (570,34);
+insert into t (id,a) values (570,35);
+insert into t (id,a) values (570,36);
+insert into t (id,a) values (570,37);
+insert into t (id,a) values (570,38);
+insert into t (id,a) values (570,39);
+insert into t (id,a) values (570,40);
+insert into t (id,a) values (570,41);
+insert into t (id,a) values (570,42);
+insert into t (id,a) values (570,43);
+insert into t (id,a) values (570,44);
+insert into t (id,a) values (570,45);
+insert into t (id,a) values (570,46);
+insert into t (id,a) values (570,47);
+insert into t (id,a) values (570,48);
+insert into t (id,a) values (570,49);
+insert into t (id,a) values (570,50);
+insert into t (id,a) values (570,51);
+insert into t (id,a) values (570,52);
+insert into t (id,a) values (570,53);
+insert into t (id,a) values (570,54);
+insert into t (id,a) values (570,55);
+insert into t (id,a) values (570,56);
+insert into t (id,a) values (570,57);
+insert into t (id,a) values (570,58);
+insert into t (id,a) values (570,59);
+insert into t (id,a) values (570,60);
+insert into t (id,a) values (570,61);
+insert into t (id,a) values (570,62);
+insert into t (id,a) values (570,63);
+insert into t (id,a) values (570,64);
+insert into t (id,a) values (570,65);
+insert into t (id,a) values (570,66);
+insert into t (id,a) values (570,67);
+insert into t (id,a) values (570,68);
+insert into t (id,a) values (570,69);
+insert into t (id,a) values (570,70);
+insert into t (id,a) values (570,71);
+insert into t (id,a) values (570,72);
+insert into t (id,a) values (570,73);
+insert into t (id,a) values (570,74);
+insert into t (id,a) values (570,75);
+insert into t (id,a) values (570,76);
+insert into t (id,a) values (570,77);
+insert into t (id,a) values (570,78);
+insert into t (id,a) values (570,79);
+insert into t (id,a) values (570,80);
+insert into t (id,a) values (570,81);
+insert into t (id,a) values (570,82);
+insert into t (id,a) values (570,83);
+insert into t (id,a) values (570,84);
+insert into t (id,a) values (570,85);
+insert into t (id,a) values (570,86);
+insert into t (id,a) values (570,87);
+insert into t (id,a) values (570,88);
+insert into t (id,a) values (570,89);
+insert into t (id,a) values (570,90);
+insert into t (id,a) values (570,91);
+insert into t (id,a) values (570,92);
+insert into t (id,a) values (570,93);
+insert into t (id,a) values (570,94);
+insert into t (id,a) values (570,95);
+insert into t (id,a) values (570,96);
+insert into t (id,a) values (570,97);
+insert into t (id,a) values (570,98);
+insert into t (id,a) values (570,99);
+insert into t (id,a) values (571,0);
+insert into t (id,a) values (571,1);
+insert into t (id,a) values (571,2);
+insert into t (id,a) values (571,3);
+insert into t (id,a) values (571,4);
+insert into t (id,a) values (571,5);
+insert into t (id,a) values (571,6);
+insert into t (id,a) values (571,7);
+insert into t (id,a) values (571,8);
+insert into t (id,a) values (571,9);
+insert into t (id,a) values (571,10);
+insert into t (id,a) values (571,11);
+insert into t (id,a) values (571,12);
+insert into t (id,a) values (571,13);
+insert into t (id,a) values (571,14);
+insert into t (id,a) values (571,15);
+insert into t (id,a) values (571,16);
+insert into t (id,a) values (571,17);
+insert into t (id,a) values (571,18);
+insert into t (id,a) values (571,19);
+insert into t (id,a) values (571,20);
+insert into t (id,a) values (571,21);
+insert into t (id,a) values (571,22);
+insert into t (id,a) values (571,23);
+insert into t (id,a) values (571,24);
+insert into t (id,a) values (571,25);
+insert into t (id,a) values (571,26);
+insert into t (id,a) values (571,27);
+insert into t (id,a) values (571,28);
+insert into t (id,a) values (571,29);
+insert into t (id,a) values (571,30);
+insert into t (id,a) values (571,31);
+insert into t (id,a) values (571,32);
+insert into t (id,a) values (571,33);
+insert into t (id,a) values (571,34);
+insert into t (id,a) values (571,35);
+insert into t (id,a) values (571,36);
+insert into t (id,a) values (571,37);
+insert into t (id,a) values (571,38);
+insert into t (id,a) values (571,39);
+insert into t (id,a) values (571,40);
+insert into t (id,a) values (571,41);
+insert into t (id,a) values (571,42);
+insert into t (id,a) values (571,43);
+insert into t (id,a) values (571,44);
+insert into t (id,a) values (571,45);
+insert into t (id,a) values (571,46);
+insert into t (id,a) values (571,47);
+insert into t (id,a) values (571,48);
+insert into t (id,a) values (571,49);
+insert into t (id,a) values (571,50);
+insert into t (id,a) values (571,51);
+insert into t (id,a) values (571,52);
+insert into t (id,a) values (571,53);
+insert into t (id,a) values (571,54);
+insert into t (id,a) values (571,55);
+insert into t (id,a) values (571,56);
+insert into t (id,a) values (571,57);
+insert into t (id,a) values (571,58);
+insert into t (id,a) values (571,59);
+insert into t (id,a) values (571,60);
+insert into t (id,a) values (571,61);
+insert into t (id,a) values (571,62);
+insert into t (id,a) values (571,63);
+insert into t (id,a) values (571,64);
+insert into t (id,a) values (571,65);
+insert into t (id,a) values (571,66);
+insert into t (id,a) values (571,67);
+insert into t (id,a) values (571,68);
+insert into t (id,a) values (571,69);
+insert into t (id,a) values (571,70);
+insert into t (id,a) values (571,71);
+insert into t (id,a) values (571,72);
+insert into t (id,a) values (571,73);
+insert into t (id,a) values (571,74);
+insert into t (id,a) values (571,75);
+insert into t (id,a) values (571,76);
+insert into t (id,a) values (571,77);
+insert into t (id,a) values (571,78);
+insert into t (id,a) values (571,79);
+insert into t (id,a) values (571,80);
+insert into t (id,a) values (571,81);
+insert into t (id,a) values (571,82);
+insert into t (id,a) values (571,83);
+insert into t (id,a) values (571,84);
+insert into t (id,a) values (571,85);
+insert into t (id,a) values (571,86);
+insert into t (id,a) values (571,87);
+insert into t (id,a) values (571,88);
+insert into t (id,a) values (571,89);
+insert into t (id,a) values (571,90);
+insert into t (id,a) values (571,91);
+insert into t (id,a) values (571,92);
+insert into t (id,a) values (571,93);
+insert into t (id,a) values (571,94);
+insert into t (id,a) values (571,95);
+insert into t (id,a) values (571,96);
+insert into t (id,a) values (571,97);
+insert into t (id,a) values (571,98);
+insert into t (id,a) values (571,99);
+insert into t (id,a) values (572,0);
+insert into t (id,a) values (572,1);
+insert into t (id,a) values (572,2);
+insert into t (id,a) values (572,3);
+insert into t (id,a) values (572,4);
+insert into t (id,a) values (572,5);
+insert into t (id,a) values (572,6);
+insert into t (id,a) values (572,7);
+insert into t (id,a) values (572,8);
+insert into t (id,a) values (572,9);
+insert into t (id,a) values (572,10);
+insert into t (id,a) values (572,11);
+insert into t (id,a) values (572,12);
+insert into t (id,a) values (572,13);
+insert into t (id,a) values (572,14);
+insert into t (id,a) values (572,15);
+insert into t (id,a) values (572,16);
+insert into t (id,a) values (572,17);
+insert into t (id,a) values (572,18);
+insert into t (id,a) values (572,19);
+insert into t (id,a) values (572,20);
+insert into t (id,a) values (572,21);
+insert into t (id,a) values (572,22);
+insert into t (id,a) values (572,23);
+insert into t (id,a) values (572,24);
+insert into t (id,a) values (572,25);
+insert into t (id,a) values (572,26);
+insert into t (id,a) values (572,27);
+insert into t (id,a) values (572,28);
+insert into t (id,a) values (572,29);
+insert into t (id,a) values (572,30);
+insert into t (id,a) values (572,31);
+insert into t (id,a) values (572,32);
+insert into t (id,a) values (572,33);
+insert into t (id,a) values (572,34);
+insert into t (id,a) values (572,35);
+insert into t (id,a) values (572,36);
+insert into t (id,a) values (572,37);
+insert into t (id,a) values (572,38);
+insert into t (id,a) values (572,39);
+insert into t (id,a) values (572,40);
+insert into t (id,a) values (572,41);
+insert into t (id,a) values (572,42);
+insert into t (id,a) values (572,43);
+insert into t (id,a) values (572,44);
+insert into t (id,a) values (572,45);
+insert into t (id,a) values (572,46);
+insert into t (id,a) values (572,47);
+insert into t (id,a) values (572,48);
+insert into t (id,a) values (572,49);
+insert into t (id,a) values (572,50);
+insert into t (id,a) values (572,51);
+insert into t (id,a) values (572,52);
+insert into t (id,a) values (572,53);
+insert into t (id,a) values (572,54);
+insert into t (id,a) values (572,55);
+insert into t (id,a) values (572,56);
+insert into t (id,a) values (572,57);
+insert into t (id,a) values (572,58);
+insert into t (id,a) values (572,59);
+insert into t (id,a) values (572,60);
+insert into t (id,a) values (572,61);
+insert into t (id,a) values (572,62);
+insert into t (id,a) values (572,63);
+insert into t (id,a) values (572,64);
+insert into t (id,a) values (572,65);
+insert into t (id,a) values (572,66);
+insert into t (id,a) values (572,67);
+insert into t (id,a) values (572,68);
+insert into t (id,a) values (572,69);
+insert into t (id,a) values (572,70);
+insert into t (id,a) values (572,71);
+insert into t (id,a) values (572,72);
+insert into t (id,a) values (572,73);
+insert into t (id,a) values (572,74);
+insert into t (id,a) values (572,75);
+insert into t (id,a) values (572,76);
+insert into t (id,a) values (572,77);
+insert into t (id,a) values (572,78);
+insert into t (id,a) values (572,79);
+insert into t (id,a) values (572,80);
+insert into t (id,a) values (572,81);
+insert into t (id,a) values (572,82);
+insert into t (id,a) values (572,83);
+insert into t (id,a) values (572,84);
+insert into t (id,a) values (572,85);
+insert into t (id,a) values (572,86);
+insert into t (id,a) values (572,87);
+insert into t (id,a) values (572,88);
+insert into t (id,a) values (572,89);
+insert into t (id,a) values (572,90);
+insert into t (id,a) values (572,91);
+insert into t (id,a) values (572,92);
+insert into t (id,a) values (572,93);
+insert into t (id,a) values (572,94);
+insert into t (id,a) values (572,95);
+insert into t (id,a) values (572,96);
+insert into t (id,a) values (572,97);
+insert into t (id,a) values (572,98);
+insert into t (id,a) values (572,99);
+insert into t (id,a) values (573,0);
+insert into t (id,a) values (573,1);
+insert into t (id,a) values (573,2);
+insert into t (id,a) values (573,3);
+insert into t (id,a) values (573,4);
+insert into t (id,a) values (573,5);
+insert into t (id,a) values (573,6);
+insert into t (id,a) values (573,7);
+insert into t (id,a) values (573,8);
+insert into t (id,a) values (573,9);
+insert into t (id,a) values (573,10);
+insert into t (id,a) values (573,11);
+insert into t (id,a) values (573,12);
+insert into t (id,a) values (573,13);
+insert into t (id,a) values (573,14);
+insert into t (id,a) values (573,15);
+insert into t (id,a) values (573,16);
+insert into t (id,a) values (573,17);
+insert into t (id,a) values (573,18);
+insert into t (id,a) values (573,19);
+insert into t (id,a) values (573,20);
+insert into t (id,a) values (573,21);
+insert into t (id,a) values (573,22);
+insert into t (id,a) values (573,23);
+insert into t (id,a) values (573,24);
+insert into t (id,a) values (573,25);
+insert into t (id,a) values (573,26);
+insert into t (id,a) values (573,27);
+insert into t (id,a) values (573,28);
+insert into t (id,a) values (573,29);
+insert into t (id,a) values (573,30);
+insert into t (id,a) values (573,31);
+insert into t (id,a) values (573,32);
+insert into t (id,a) values (573,33);
+insert into t (id,a) values (573,34);
+insert into t (id,a) values (573,35);
+insert into t (id,a) values (573,36);
+insert into t (id,a) values (573,37);
+insert into t (id,a) values (573,38);
+insert into t (id,a) values (573,39);
+insert into t (id,a) values (573,40);
+insert into t (id,a) values (573,41);
+insert into t (id,a) values (573,42);
+insert into t (id,a) values (573,43);
+insert into t (id,a) values (573,44);
+insert into t (id,a) values (573,45);
+insert into t (id,a) values (573,46);
+insert into t (id,a) values (573,47);
+insert into t (id,a) values (573,48);
+insert into t (id,a) values (573,49);
+insert into t (id,a) values (573,50);
+insert into t (id,a) values (573,51);
+insert into t (id,a) values (573,52);
+insert into t (id,a) values (573,53);
+insert into t (id,a) values (573,54);
+insert into t (id,a) values (573,55);
+insert into t (id,a) values (573,56);
+insert into t (id,a) values (573,57);
+insert into t (id,a) values (573,58);
+insert into t (id,a) values (573,59);
+insert into t (id,a) values (573,60);
+insert into t (id,a) values (573,61);
+insert into t (id,a) values (573,62);
+insert into t (id,a) values (573,63);
+insert into t (id,a) values (573,64);
+insert into t (id,a) values (573,65);
+insert into t (id,a) values (573,66);
+insert into t (id,a) values (573,67);
+insert into t (id,a) values (573,68);
+insert into t (id,a) values (573,69);
+insert into t (id,a) values (573,70);
+insert into t (id,a) values (573,71);
+insert into t (id,a) values (573,72);
+insert into t (id,a) values (573,73);
+insert into t (id,a) values (573,74);
+insert into t (id,a) values (573,75);
+insert into t (id,a) values (573,76);
+insert into t (id,a) values (573,77);
+insert into t (id,a) values (573,78);
+insert into t (id,a) values (573,79);
+insert into t (id,a) values (573,80);
+insert into t (id,a) values (573,81);
+insert into t (id,a) values (573,82);
+insert into t (id,a) values (573,83);
+insert into t (id,a) values (573,84);
+insert into t (id,a) values (573,85);
+insert into t (id,a) values (573,86);
+insert into t (id,a) values (573,87);
+insert into t (id,a) values (573,88);
+insert into t (id,a) values (573,89);
+insert into t (id,a) values (573,90);
+insert into t (id,a) values (573,91);
+insert into t (id,a) values (573,92);
+insert into t (id,a) values (573,93);
+insert into t (id,a) values (573,94);
+insert into t (id,a) values (573,95);
+insert into t (id,a) values (573,96);
+insert into t (id,a) values (573,97);
+insert into t (id,a) values (573,98);
+insert into t (id,a) values (573,99);
+insert into t (id,a) values (574,0);
+insert into t (id,a) values (574,1);
+insert into t (id,a) values (574,2);
+insert into t (id,a) values (574,3);
+insert into t (id,a) values (574,4);
+insert into t (id,a) values (574,5);
+insert into t (id,a) values (574,6);
+insert into t (id,a) values (574,7);
+insert into t (id,a) values (574,8);
+insert into t (id,a) values (574,9);
+insert into t (id,a) values (574,10);
+insert into t (id,a) values (574,11);
+insert into t (id,a) values (574,12);
+insert into t (id,a) values (574,13);
+insert into t (id,a) values (574,14);
+insert into t (id,a) values (574,15);
+insert into t (id,a) values (574,16);
+insert into t (id,a) values (574,17);
+insert into t (id,a) values (574,18);
+insert into t (id,a) values (574,19);
+insert into t (id,a) values (574,20);
+insert into t (id,a) values (574,21);
+insert into t (id,a) values (574,22);
+insert into t (id,a) values (574,23);
+insert into t (id,a) values (574,24);
+insert into t (id,a) values (574,25);
+insert into t (id,a) values (574,26);
+insert into t (id,a) values (574,27);
+insert into t (id,a) values (574,28);
+insert into t (id,a) values (574,29);
+insert into t (id,a) values (574,30);
+insert into t (id,a) values (574,31);
+insert into t (id,a) values (574,32);
+insert into t (id,a) values (574,33);
+insert into t (id,a) values (574,34);
+insert into t (id,a) values (574,35);
+insert into t (id,a) values (574,36);
+insert into t (id,a) values (574,37);
+insert into t (id,a) values (574,38);
+insert into t (id,a) values (574,39);
+insert into t (id,a) values (574,40);
+insert into t (id,a) values (574,41);
+insert into t (id,a) values (574,42);
+insert into t (id,a) values (574,43);
+insert into t (id,a) values (574,44);
+insert into t (id,a) values (574,45);
+insert into t (id,a) values (574,46);
+insert into t (id,a) values (574,47);
+insert into t (id,a) values (574,48);
+insert into t (id,a) values (574,49);
+insert into t (id,a) values (574,50);
+insert into t (id,a) values (574,51);
+insert into t (id,a) values (574,52);
+insert into t (id,a) values (574,53);
+insert into t (id,a) values (574,54);
+insert into t (id,a) values (574,55);
+insert into t (id,a) values (574,56);
+insert into t (id,a) values (574,57);
+insert into t (id,a) values (574,58);
+insert into t (id,a) values (574,59);
+insert into t (id,a) values (574,60);
+insert into t (id,a) values (574,61);
+insert into t (id,a) values (574,62);
+insert into t (id,a) values (574,63);
+insert into t (id,a) values (574,64);
+insert into t (id,a) values (574,65);
+insert into t (id,a) values (574,66);
+insert into t (id,a) values (574,67);
+insert into t (id,a) values (574,68);
+insert into t (id,a) values (574,69);
+insert into t (id,a) values (574,70);
+insert into t (id,a) values (574,71);
+insert into t (id,a) values (574,72);
+insert into t (id,a) values (574,73);
+insert into t (id,a) values (574,74);
+insert into t (id,a) values (574,75);
+insert into t (id,a) values (574,76);
+insert into t (id,a) values (574,77);
+insert into t (id,a) values (574,78);
+insert into t (id,a) values (574,79);
+insert into t (id,a) values (574,80);
+insert into t (id,a) values (574,81);
+insert into t (id,a) values (574,82);
+insert into t (id,a) values (574,83);
+insert into t (id,a) values (574,84);
+insert into t (id,a) values (574,85);
+insert into t (id,a) values (574,86);
+insert into t (id,a) values (574,87);
+insert into t (id,a) values (574,88);
+insert into t (id,a) values (574,89);
+insert into t (id,a) values (574,90);
+insert into t (id,a) values (574,91);
+insert into t (id,a) values (574,92);
+insert into t (id,a) values (574,93);
+insert into t (id,a) values (574,94);
+insert into t (id,a) values (574,95);
+insert into t (id,a) values (574,96);
+insert into t (id,a) values (574,97);
+insert into t (id,a) values (574,98);
+insert into t (id,a) values (574,99);
+insert into t (id,a) values (575,0);
+insert into t (id,a) values (575,1);
+insert into t (id,a) values (575,2);
+insert into t (id,a) values (575,3);
+insert into t (id,a) values (575,4);
+insert into t (id,a) values (575,5);
+insert into t (id,a) values (575,6);
+insert into t (id,a) values (575,7);
+insert into t (id,a) values (575,8);
+insert into t (id,a) values (575,9);
+insert into t (id,a) values (575,10);
+insert into t (id,a) values (575,11);
+insert into t (id,a) values (575,12);
+insert into t (id,a) values (575,13);
+insert into t (id,a) values (575,14);
+insert into t (id,a) values (575,15);
+insert into t (id,a) values (575,16);
+insert into t (id,a) values (575,17);
+insert into t (id,a) values (575,18);
+insert into t (id,a) values (575,19);
+insert into t (id,a) values (575,20);
+insert into t (id,a) values (575,21);
+insert into t (id,a) values (575,22);
+insert into t (id,a) values (575,23);
+insert into t (id,a) values (575,24);
+insert into t (id,a) values (575,25);
+insert into t (id,a) values (575,26);
+insert into t (id,a) values (575,27);
+insert into t (id,a) values (575,28);
+insert into t (id,a) values (575,29);
+insert into t (id,a) values (575,30);
+insert into t (id,a) values (575,31);
+insert into t (id,a) values (575,32);
+insert into t (id,a) values (575,33);
+insert into t (id,a) values (575,34);
+insert into t (id,a) values (575,35);
+insert into t (id,a) values (575,36);
+insert into t (id,a) values (575,37);
+insert into t (id,a) values (575,38);
+insert into t (id,a) values (575,39);
+insert into t (id,a) values (575,40);
+insert into t (id,a) values (575,41);
+insert into t (id,a) values (575,42);
+insert into t (id,a) values (575,43);
+insert into t (id,a) values (575,44);
+insert into t (id,a) values (575,45);
+insert into t (id,a) values (575,46);
+insert into t (id,a) values (575,47);
+insert into t (id,a) values (575,48);
+insert into t (id,a) values (575,49);
+insert into t (id,a) values (575,50);
+insert into t (id,a) values (575,51);
+insert into t (id,a) values (575,52);
+insert into t (id,a) values (575,53);
+insert into t (id,a) values (575,54);
+insert into t (id,a) values (575,55);
+insert into t (id,a) values (575,56);
+insert into t (id,a) values (575,57);
+insert into t (id,a) values (575,58);
+insert into t (id,a) values (575,59);
+insert into t (id,a) values (575,60);
+insert into t (id,a) values (575,61);
+insert into t (id,a) values (575,62);
+insert into t (id,a) values (575,63);
+insert into t (id,a) values (575,64);
+insert into t (id,a) values (575,65);
+insert into t (id,a) values (575,66);
+insert into t (id,a) values (575,67);
+insert into t (id,a) values (575,68);
+insert into t (id,a) values (575,69);
+insert into t (id,a) values (575,70);
+insert into t (id,a) values (575,71);
+insert into t (id,a) values (575,72);
+insert into t (id,a) values (575,73);
+insert into t (id,a) values (575,74);
+insert into t (id,a) values (575,75);
+insert into t (id,a) values (575,76);
+insert into t (id,a) values (575,77);
+insert into t (id,a) values (575,78);
+insert into t (id,a) values (575,79);
+insert into t (id,a) values (575,80);
+insert into t (id,a) values (575,81);
+insert into t (id,a) values (575,82);
+insert into t (id,a) values (575,83);
+insert into t (id,a) values (575,84);
+insert into t (id,a) values (575,85);
+insert into t (id,a) values (575,86);
+insert into t (id,a) values (575,87);
+insert into t (id,a) values (575,88);
+insert into t (id,a) values (575,89);
+insert into t (id,a) values (575,90);
+insert into t (id,a) values (575,91);
+insert into t (id,a) values (575,92);
+insert into t (id,a) values (575,93);
+insert into t (id,a) values (575,94);
+insert into t (id,a) values (575,95);
+insert into t (id,a) values (575,96);
+insert into t (id,a) values (575,97);
+insert into t (id,a) values (575,98);
+insert into t (id,a) values (575,99);
+insert into t (id,a) values (576,0);
+insert into t (id,a) values (576,1);
+insert into t (id,a) values (576,2);
+insert into t (id,a) values (576,3);
+insert into t (id,a) values (576,4);
+insert into t (id,a) values (576,5);
+insert into t (id,a) values (576,6);
+insert into t (id,a) values (576,7);
+insert into t (id,a) values (576,8);
+insert into t (id,a) values (576,9);
+insert into t (id,a) values (576,10);
+insert into t (id,a) values (576,11);
+insert into t (id,a) values (576,12);
+insert into t (id,a) values (576,13);
+insert into t (id,a) values (576,14);
+insert into t (id,a) values (576,15);
+insert into t (id,a) values (576,16);
+insert into t (id,a) values (576,17);
+insert into t (id,a) values (576,18);
+insert into t (id,a) values (576,19);
+insert into t (id,a) values (576,20);
+insert into t (id,a) values (576,21);
+insert into t (id,a) values (576,22);
+insert into t (id,a) values (576,23);
+insert into t (id,a) values (576,24);
+insert into t (id,a) values (576,25);
+insert into t (id,a) values (576,26);
+insert into t (id,a) values (576,27);
+insert into t (id,a) values (576,28);
+insert into t (id,a) values (576,29);
+insert into t (id,a) values (576,30);
+insert into t (id,a) values (576,31);
+insert into t (id,a) values (576,32);
+insert into t (id,a) values (576,33);
+insert into t (id,a) values (576,34);
+insert into t (id,a) values (576,35);
+insert into t (id,a) values (576,36);
+insert into t (id,a) values (576,37);
+insert into t (id,a) values (576,38);
+insert into t (id,a) values (576,39);
+insert into t (id,a) values (576,40);
+insert into t (id,a) values (576,41);
+insert into t (id,a) values (576,42);
+insert into t (id,a) values (576,43);
+insert into t (id,a) values (576,44);
+insert into t (id,a) values (576,45);
+insert into t (id,a) values (576,46);
+insert into t (id,a) values (576,47);
+insert into t (id,a) values (576,48);
+insert into t (id,a) values (576,49);
+insert into t (id,a) values (576,50);
+insert into t (id,a) values (576,51);
+insert into t (id,a) values (576,52);
+insert into t (id,a) values (576,53);
+insert into t (id,a) values (576,54);
+insert into t (id,a) values (576,55);
+insert into t (id,a) values (576,56);
+insert into t (id,a) values (576,57);
+insert into t (id,a) values (576,58);
+insert into t (id,a) values (576,59);
+insert into t (id,a) values (576,60);
+insert into t (id,a) values (576,61);
+insert into t (id,a) values (576,62);
+insert into t (id,a) values (576,63);
+insert into t (id,a) values (576,64);
+insert into t (id,a) values (576,65);
+insert into t (id,a) values (576,66);
+insert into t (id,a) values (576,67);
+insert into t (id,a) values (576,68);
+insert into t (id,a) values (576,69);
+insert into t (id,a) values (576,70);
+insert into t (id,a) values (576,71);
+insert into t (id,a) values (576,72);
+insert into t (id,a) values (576,73);
+insert into t (id,a) values (576,74);
+insert into t (id,a) values (576,75);
+insert into t (id,a) values (576,76);
+insert into t (id,a) values (576,77);
+insert into t (id,a) values (576,78);
+insert into t (id,a) values (576,79);
+insert into t (id,a) values (576,80);
+insert into t (id,a) values (576,81);
+insert into t (id,a) values (576,82);
+insert into t (id,a) values (576,83);
+insert into t (id,a) values (576,84);
+insert into t (id,a) values (576,85);
+insert into t (id,a) values (576,86);
+insert into t (id,a) values (576,87);
+insert into t (id,a) values (576,88);
+insert into t (id,a) values (576,89);
+insert into t (id,a) values (576,90);
+insert into t (id,a) values (576,91);
+insert into t (id,a) values (576,92);
+insert into t (id,a) values (576,93);
+insert into t (id,a) values (576,94);
+insert into t (id,a) values (576,95);
+insert into t (id,a) values (576,96);
+insert into t (id,a) values (576,97);
+insert into t (id,a) values (576,98);
+insert into t (id,a) values (576,99);
+insert into t (id,a) values (577,0);
+insert into t (id,a) values (577,1);
+insert into t (id,a) values (577,2);
+insert into t (id,a) values (577,3);
+insert into t (id,a) values (577,4);
+insert into t (id,a) values (577,5);
+insert into t (id,a) values (577,6);
+insert into t (id,a) values (577,7);
+insert into t (id,a) values (577,8);
+insert into t (id,a) values (577,9);
+insert into t (id,a) values (577,10);
+insert into t (id,a) values (577,11);
+insert into t (id,a) values (577,12);
+insert into t (id,a) values (577,13);
+insert into t (id,a) values (577,14);
+insert into t (id,a) values (577,15);
+insert into t (id,a) values (577,16);
+insert into t (id,a) values (577,17);
+insert into t (id,a) values (577,18);
+insert into t (id,a) values (577,19);
+insert into t (id,a) values (577,20);
+insert into t (id,a) values (577,21);
+insert into t (id,a) values (577,22);
+insert into t (id,a) values (577,23);
+insert into t (id,a) values (577,24);
+insert into t (id,a) values (577,25);
+insert into t (id,a) values (577,26);
+insert into t (id,a) values (577,27);
+insert into t (id,a) values (577,28);
+insert into t (id,a) values (577,29);
+insert into t (id,a) values (577,30);
+insert into t (id,a) values (577,31);
+insert into t (id,a) values (577,32);
+insert into t (id,a) values (577,33);
+insert into t (id,a) values (577,34);
+insert into t (id,a) values (577,35);
+insert into t (id,a) values (577,36);
+insert into t (id,a) values (577,37);
+insert into t (id,a) values (577,38);
+insert into t (id,a) values (577,39);
+insert into t (id,a) values (577,40);
+insert into t (id,a) values (577,41);
+insert into t (id,a) values (577,42);
+insert into t (id,a) values (577,43);
+insert into t (id,a) values (577,44);
+insert into t (id,a) values (577,45);
+insert into t (id,a) values (577,46);
+insert into t (id,a) values (577,47);
+insert into t (id,a) values (577,48);
+insert into t (id,a) values (577,49);
+insert into t (id,a) values (577,50);
+insert into t (id,a) values (577,51);
+insert into t (id,a) values (577,52);
+insert into t (id,a) values (577,53);
+insert into t (id,a) values (577,54);
+insert into t (id,a) values (577,55);
+insert into t (id,a) values (577,56);
+insert into t (id,a) values (577,57);
+insert into t (id,a) values (577,58);
+insert into t (id,a) values (577,59);
+insert into t (id,a) values (577,60);
+insert into t (id,a) values (577,61);
+insert into t (id,a) values (577,62);
+insert into t (id,a) values (577,63);
+insert into t (id,a) values (577,64);
+insert into t (id,a) values (577,65);
+insert into t (id,a) values (577,66);
+insert into t (id,a) values (577,67);
+insert into t (id,a) values (577,68);
+insert into t (id,a) values (577,69);
+insert into t (id,a) values (577,70);
+insert into t (id,a) values (577,71);
+insert into t (id,a) values (577,72);
+insert into t (id,a) values (577,73);
+insert into t (id,a) values (577,74);
+insert into t (id,a) values (577,75);
+insert into t (id,a) values (577,76);
+insert into t (id,a) values (577,77);
+insert into t (id,a) values (577,78);
+insert into t (id,a) values (577,79);
+insert into t (id,a) values (577,80);
+insert into t (id,a) values (577,81);
+insert into t (id,a) values (577,82);
+insert into t (id,a) values (577,83);
+insert into t (id,a) values (577,84);
+insert into t (id,a) values (577,85);
+insert into t (id,a) values (577,86);
+insert into t (id,a) values (577,87);
+insert into t (id,a) values (577,88);
+insert into t (id,a) values (577,89);
+insert into t (id,a) values (577,90);
+insert into t (id,a) values (577,91);
+insert into t (id,a) values (577,92);
+insert into t (id,a) values (577,93);
+insert into t (id,a) values (577,94);
+insert into t (id,a) values (577,95);
+insert into t (id,a) values (577,96);
+insert into t (id,a) values (577,97);
+insert into t (id,a) values (577,98);
+insert into t (id,a) values (577,99);
+insert into t (id,a) values (578,0);
+insert into t (id,a) values (578,1);
+insert into t (id,a) values (578,2);
+insert into t (id,a) values (578,3);
+insert into t (id,a) values (578,4);
+insert into t (id,a) values (578,5);
+insert into t (id,a) values (578,6);
+insert into t (id,a) values (578,7);
+insert into t (id,a) values (578,8);
+insert into t (id,a) values (578,9);
+insert into t (id,a) values (578,10);
+insert into t (id,a) values (578,11);
+insert into t (id,a) values (578,12);
+insert into t (id,a) values (578,13);
+insert into t (id,a) values (578,14);
+insert into t (id,a) values (578,15);
+insert into t (id,a) values (578,16);
+insert into t (id,a) values (578,17);
+insert into t (id,a) values (578,18);
+insert into t (id,a) values (578,19);
+insert into t (id,a) values (578,20);
+insert into t (id,a) values (578,21);
+insert into t (id,a) values (578,22);
+insert into t (id,a) values (578,23);
+insert into t (id,a) values (578,24);
+insert into t (id,a) values (578,25);
+insert into t (id,a) values (578,26);
+insert into t (id,a) values (578,27);
+insert into t (id,a) values (578,28);
+insert into t (id,a) values (578,29);
+insert into t (id,a) values (578,30);
+insert into t (id,a) values (578,31);
+insert into t (id,a) values (578,32);
+insert into t (id,a) values (578,33);
+insert into t (id,a) values (578,34);
+insert into t (id,a) values (578,35);
+insert into t (id,a) values (578,36);
+insert into t (id,a) values (578,37);
+insert into t (id,a) values (578,38);
+insert into t (id,a) values (578,39);
+insert into t (id,a) values (578,40);
+insert into t (id,a) values (578,41);
+insert into t (id,a) values (578,42);
+insert into t (id,a) values (578,43);
+insert into t (id,a) values (578,44);
+insert into t (id,a) values (578,45);
+insert into t (id,a) values (578,46);
+insert into t (id,a) values (578,47);
+insert into t (id,a) values (578,48);
+insert into t (id,a) values (578,49);
+insert into t (id,a) values (578,50);
+insert into t (id,a) values (578,51);
+insert into t (id,a) values (578,52);
+insert into t (id,a) values (578,53);
+insert into t (id,a) values (578,54);
+insert into t (id,a) values (578,55);
+insert into t (id,a) values (578,56);
+insert into t (id,a) values (578,57);
+insert into t (id,a) values (578,58);
+insert into t (id,a) values (578,59);
+insert into t (id,a) values (578,60);
+insert into t (id,a) values (578,61);
+insert into t (id,a) values (578,62);
+insert into t (id,a) values (578,63);
+insert into t (id,a) values (578,64);
+insert into t (id,a) values (578,65);
+insert into t (id,a) values (578,66);
+insert into t (id,a) values (578,67);
+insert into t (id,a) values (578,68);
+insert into t (id,a) values (578,69);
+insert into t (id,a) values (578,70);
+insert into t (id,a) values (578,71);
+insert into t (id,a) values (578,72);
+insert into t (id,a) values (578,73);
+insert into t (id,a) values (578,74);
+insert into t (id,a) values (578,75);
+insert into t (id,a) values (578,76);
+insert into t (id,a) values (578,77);
+insert into t (id,a) values (578,78);
+insert into t (id,a) values (578,79);
+insert into t (id,a) values (578,80);
+insert into t (id,a) values (578,81);
+insert into t (id,a) values (578,82);
+insert into t (id,a) values (578,83);
+insert into t (id,a) values (578,84);
+insert into t (id,a) values (578,85);
+insert into t (id,a) values (578,86);
+insert into t (id,a) values (578,87);
+insert into t (id,a) values (578,88);
+insert into t (id,a) values (578,89);
+insert into t (id,a) values (578,90);
+insert into t (id,a) values (578,91);
+insert into t (id,a) values (578,92);
+insert into t (id,a) values (578,93);
+insert into t (id,a) values (578,94);
+insert into t (id,a) values (578,95);
+insert into t (id,a) values (578,96);
+insert into t (id,a) values (578,97);
+insert into t (id,a) values (578,98);
+insert into t (id,a) values (578,99);
+insert into t (id,a) values (579,0);
+insert into t (id,a) values (579,1);
+insert into t (id,a) values (579,2);
+insert into t (id,a) values (579,3);
+insert into t (id,a) values (579,4);
+insert into t (id,a) values (579,5);
+insert into t (id,a) values (579,6);
+insert into t (id,a) values (579,7);
+insert into t (id,a) values (579,8);
+insert into t (id,a) values (579,9);
+insert into t (id,a) values (579,10);
+insert into t (id,a) values (579,11);
+insert into t (id,a) values (579,12);
+insert into t (id,a) values (579,13);
+insert into t (id,a) values (579,14);
+insert into t (id,a) values (579,15);
+insert into t (id,a) values (579,16);
+insert into t (id,a) values (579,17);
+insert into t (id,a) values (579,18);
+insert into t (id,a) values (579,19);
+insert into t (id,a) values (579,20);
+insert into t (id,a) values (579,21);
+insert into t (id,a) values (579,22);
+insert into t (id,a) values (579,23);
+insert into t (id,a) values (579,24);
+insert into t (id,a) values (579,25);
+insert into t (id,a) values (579,26);
+insert into t (id,a) values (579,27);
+insert into t (id,a) values (579,28);
+insert into t (id,a) values (579,29);
+insert into t (id,a) values (579,30);
+insert into t (id,a) values (579,31);
+insert into t (id,a) values (579,32);
+insert into t (id,a) values (579,33);
+insert into t (id,a) values (579,34);
+insert into t (id,a) values (579,35);
+insert into t (id,a) values (579,36);
+insert into t (id,a) values (579,37);
+insert into t (id,a) values (579,38);
+insert into t (id,a) values (579,39);
+insert into t (id,a) values (579,40);
+insert into t (id,a) values (579,41);
+insert into t (id,a) values (579,42);
+insert into t (id,a) values (579,43);
+insert into t (id,a) values (579,44);
+insert into t (id,a) values (579,45);
+insert into t (id,a) values (579,46);
+insert into t (id,a) values (579,47);
+insert into t (id,a) values (579,48);
+insert into t (id,a) values (579,49);
+insert into t (id,a) values (579,50);
+insert into t (id,a) values (579,51);
+insert into t (id,a) values (579,52);
+insert into t (id,a) values (579,53);
+insert into t (id,a) values (579,54);
+insert into t (id,a) values (579,55);
+insert into t (id,a) values (579,56);
+insert into t (id,a) values (579,57);
+insert into t (id,a) values (579,58);
+insert into t (id,a) values (579,59);
+insert into t (id,a) values (579,60);
+insert into t (id,a) values (579,61);
+insert into t (id,a) values (579,62);
+insert into t (id,a) values (579,63);
+insert into t (id,a) values (579,64);
+insert into t (id,a) values (579,65);
+insert into t (id,a) values (579,66);
+insert into t (id,a) values (579,67);
+insert into t (id,a) values (579,68);
+insert into t (id,a) values (579,69);
+insert into t (id,a) values (579,70);
+insert into t (id,a) values (579,71);
+insert into t (id,a) values (579,72);
+insert into t (id,a) values (579,73);
+insert into t (id,a) values (579,74);
+insert into t (id,a) values (579,75);
+insert into t (id,a) values (579,76);
+insert into t (id,a) values (579,77);
+insert into t (id,a) values (579,78);
+insert into t (id,a) values (579,79);
+insert into t (id,a) values (579,80);
+insert into t (id,a) values (579,81);
+insert into t (id,a) values (579,82);
+insert into t (id,a) values (579,83);
+insert into t (id,a) values (579,84);
+insert into t (id,a) values (579,85);
+insert into t (id,a) values (579,86);
+insert into t (id,a) values (579,87);
+insert into t (id,a) values (579,88);
+insert into t (id,a) values (579,89);
+insert into t (id,a) values (579,90);
+insert into t (id,a) values (579,91);
+insert into t (id,a) values (579,92);
+insert into t (id,a) values (579,93);
+insert into t (id,a) values (579,94);
+insert into t (id,a) values (579,95);
+insert into t (id,a) values (579,96);
+insert into t (id,a) values (579,97);
+insert into t (id,a) values (579,98);
+insert into t (id,a) values (579,99);
+insert into t (id,a) values (580,0);
+insert into t (id,a) values (580,1);
+insert into t (id,a) values (580,2);
+insert into t (id,a) values (580,3);
+insert into t (id,a) values (580,4);
+insert into t (id,a) values (580,5);
+insert into t (id,a) values (580,6);
+insert into t (id,a) values (580,7);
+insert into t (id,a) values (580,8);
+insert into t (id,a) values (580,9);
+insert into t (id,a) values (580,10);
+insert into t (id,a) values (580,11);
+insert into t (id,a) values (580,12);
+insert into t (id,a) values (580,13);
+insert into t (id,a) values (580,14);
+insert into t (id,a) values (580,15);
+insert into t (id,a) values (580,16);
+insert into t (id,a) values (580,17);
+insert into t (id,a) values (580,18);
+insert into t (id,a) values (580,19);
+insert into t (id,a) values (580,20);
+insert into t (id,a) values (580,21);
+insert into t (id,a) values (580,22);
+insert into t (id,a) values (580,23);
+insert into t (id,a) values (580,24);
+insert into t (id,a) values (580,25);
+insert into t (id,a) values (580,26);
+insert into t (id,a) values (580,27);
+insert into t (id,a) values (580,28);
+insert into t (id,a) values (580,29);
+insert into t (id,a) values (580,30);
+insert into t (id,a) values (580,31);
+insert into t (id,a) values (580,32);
+insert into t (id,a) values (580,33);
+insert into t (id,a) values (580,34);
+insert into t (id,a) values (580,35);
+insert into t (id,a) values (580,36);
+insert into t (id,a) values (580,37);
+insert into t (id,a) values (580,38);
+insert into t (id,a) values (580,39);
+insert into t (id,a) values (580,40);
+insert into t (id,a) values (580,41);
+insert into t (id,a) values (580,42);
+insert into t (id,a) values (580,43);
+insert into t (id,a) values (580,44);
+insert into t (id,a) values (580,45);
+insert into t (id,a) values (580,46);
+insert into t (id,a) values (580,47);
+insert into t (id,a) values (580,48);
+insert into t (id,a) values (580,49);
+insert into t (id,a) values (580,50);
+insert into t (id,a) values (580,51);
+insert into t (id,a) values (580,52);
+insert into t (id,a) values (580,53);
+insert into t (id,a) values (580,54);
+insert into t (id,a) values (580,55);
+insert into t (id,a) values (580,56);
+insert into t (id,a) values (580,57);
+insert into t (id,a) values (580,58);
+insert into t (id,a) values (580,59);
+insert into t (id,a) values (580,60);
+insert into t (id,a) values (580,61);
+insert into t (id,a) values (580,62);
+insert into t (id,a) values (580,63);
+insert into t (id,a) values (580,64);
+insert into t (id,a) values (580,65);
+insert into t (id,a) values (580,66);
+insert into t (id,a) values (580,67);
+insert into t (id,a) values (580,68);
+insert into t (id,a) values (580,69);
+insert into t (id,a) values (580,70);
+insert into t (id,a) values (580,71);
+insert into t (id,a) values (580,72);
+insert into t (id,a) values (580,73);
+insert into t (id,a) values (580,74);
+insert into t (id,a) values (580,75);
+insert into t (id,a) values (580,76);
+insert into t (id,a) values (580,77);
+insert into t (id,a) values (580,78);
+insert into t (id,a) values (580,79);
+insert into t (id,a) values (580,80);
+insert into t (id,a) values (580,81);
+insert into t (id,a) values (580,82);
+insert into t (id,a) values (580,83);
+insert into t (id,a) values (580,84);
+insert into t (id,a) values (580,85);
+insert into t (id,a) values (580,86);
+insert into t (id,a) values (580,87);
+insert into t (id,a) values (580,88);
+insert into t (id,a) values (580,89);
+insert into t (id,a) values (580,90);
+insert into t (id,a) values (580,91);
+insert into t (id,a) values (580,92);
+insert into t (id,a) values (580,93);
+insert into t (id,a) values (580,94);
+insert into t (id,a) values (580,95);
+insert into t (id,a) values (580,96);
+insert into t (id,a) values (580,97);
+insert into t (id,a) values (580,98);
+insert into t (id,a) values (580,99);
+insert into t (id,a) values (581,0);
+insert into t (id,a) values (581,1);
+insert into t (id,a) values (581,2);
+insert into t (id,a) values (581,3);
+insert into t (id,a) values (581,4);
+insert into t (id,a) values (581,5);
+insert into t (id,a) values (581,6);
+insert into t (id,a) values (581,7);
+insert into t (id,a) values (581,8);
+insert into t (id,a) values (581,9);
+insert into t (id,a) values (581,10);
+insert into t (id,a) values (581,11);
+insert into t (id,a) values (581,12);
+insert into t (id,a) values (581,13);
+insert into t (id,a) values (581,14);
+insert into t (id,a) values (581,15);
+insert into t (id,a) values (581,16);
+insert into t (id,a) values (581,17);
+insert into t (id,a) values (581,18);
+insert into t (id,a) values (581,19);
+insert into t (id,a) values (581,20);
+insert into t (id,a) values (581,21);
+insert into t (id,a) values (581,22);
+insert into t (id,a) values (581,23);
+insert into t (id,a) values (581,24);
+insert into t (id,a) values (581,25);
+insert into t (id,a) values (581,26);
+insert into t (id,a) values (581,27);
+insert into t (id,a) values (581,28);
+insert into t (id,a) values (581,29);
+insert into t (id,a) values (581,30);
+insert into t (id,a) values (581,31);
+insert into t (id,a) values (581,32);
+insert into t (id,a) values (581,33);
+insert into t (id,a) values (581,34);
+insert into t (id,a) values (581,35);
+insert into t (id,a) values (581,36);
+insert into t (id,a) values (581,37);
+insert into t (id,a) values (581,38);
+insert into t (id,a) values (581,39);
+insert into t (id,a) values (581,40);
+insert into t (id,a) values (581,41);
+insert into t (id,a) values (581,42);
+insert into t (id,a) values (581,43);
+insert into t (id,a) values (581,44);
+insert into t (id,a) values (581,45);
+insert into t (id,a) values (581,46);
+insert into t (id,a) values (581,47);
+insert into t (id,a) values (581,48);
+insert into t (id,a) values (581,49);
+insert into t (id,a) values (581,50);
+insert into t (id,a) values (581,51);
+insert into t (id,a) values (581,52);
+insert into t (id,a) values (581,53);
+insert into t (id,a) values (581,54);
+insert into t (id,a) values (581,55);
+insert into t (id,a) values (581,56);
+insert into t (id,a) values (581,57);
+insert into t (id,a) values (581,58);
+insert into t (id,a) values (581,59);
+insert into t (id,a) values (581,60);
+insert into t (id,a) values (581,61);
+insert into t (id,a) values (581,62);
+insert into t (id,a) values (581,63);
+insert into t (id,a) values (581,64);
+insert into t (id,a) values (581,65);
+insert into t (id,a) values (581,66);
+insert into t (id,a) values (581,67);
+insert into t (id,a) values (581,68);
+insert into t (id,a) values (581,69);
+insert into t (id,a) values (581,70);
+insert into t (id,a) values (581,71);
+insert into t (id,a) values (581,72);
+insert into t (id,a) values (581,73);
+insert into t (id,a) values (581,74);
+insert into t (id,a) values (581,75);
+insert into t (id,a) values (581,76);
+insert into t (id,a) values (581,77);
+insert into t (id,a) values (581,78);
+insert into t (id,a) values (581,79);
+insert into t (id,a) values (581,80);
+insert into t (id,a) values (581,81);
+insert into t (id,a) values (581,82);
+insert into t (id,a) values (581,83);
+insert into t (id,a) values (581,84);
+insert into t (id,a) values (581,85);
+insert into t (id,a) values (581,86);
+insert into t (id,a) values (581,87);
+insert into t (id,a) values (581,88);
+insert into t (id,a) values (581,89);
+insert into t (id,a) values (581,90);
+insert into t (id,a) values (581,91);
+insert into t (id,a) values (581,92);
+insert into t (id,a) values (581,93);
+insert into t (id,a) values (581,94);
+insert into t (id,a) values (581,95);
+insert into t (id,a) values (581,96);
+insert into t (id,a) values (581,97);
+insert into t (id,a) values (581,98);
+insert into t (id,a) values (581,99);
+insert into t (id,a) values (582,0);
+insert into t (id,a) values (582,1);
+insert into t (id,a) values (582,2);
+insert into t (id,a) values (582,3);
+insert into t (id,a) values (582,4);
+insert into t (id,a) values (582,5);
+insert into t (id,a) values (582,6);
+insert into t (id,a) values (582,7);
+insert into t (id,a) values (582,8);
+insert into t (id,a) values (582,9);
+insert into t (id,a) values (582,10);
+insert into t (id,a) values (582,11);
+insert into t (id,a) values (582,12);
+insert into t (id,a) values (582,13);
+insert into t (id,a) values (582,14);
+insert into t (id,a) values (582,15);
+insert into t (id,a) values (582,16);
+insert into t (id,a) values (582,17);
+insert into t (id,a) values (582,18);
+insert into t (id,a) values (582,19);
+insert into t (id,a) values (582,20);
+insert into t (id,a) values (582,21);
+insert into t (id,a) values (582,22);
+insert into t (id,a) values (582,23);
+insert into t (id,a) values (582,24);
+insert into t (id,a) values (582,25);
+insert into t (id,a) values (582,26);
+insert into t (id,a) values (582,27);
+insert into t (id,a) values (582,28);
+insert into t (id,a) values (582,29);
+insert into t (id,a) values (582,30);
+insert into t (id,a) values (582,31);
+insert into t (id,a) values (582,32);
+insert into t (id,a) values (582,33);
+insert into t (id,a) values (582,34);
+insert into t (id,a) values (582,35);
+insert into t (id,a) values (582,36);
+insert into t (id,a) values (582,37);
+insert into t (id,a) values (582,38);
+insert into t (id,a) values (582,39);
+insert into t (id,a) values (582,40);
+insert into t (id,a) values (582,41);
+insert into t (id,a) values (582,42);
+insert into t (id,a) values (582,43);
+insert into t (id,a) values (582,44);
+insert into t (id,a) values (582,45);
+insert into t (id,a) values (582,46);
+insert into t (id,a) values (582,47);
+insert into t (id,a) values (582,48);
+insert into t (id,a) values (582,49);
+insert into t (id,a) values (582,50);
+insert into t (id,a) values (582,51);
+insert into t (id,a) values (582,52);
+insert into t (id,a) values (582,53);
+insert into t (id,a) values (582,54);
+insert into t (id,a) values (582,55);
+insert into t (id,a) values (582,56);
+insert into t (id,a) values (582,57);
+insert into t (id,a) values (582,58);
+insert into t (id,a) values (582,59);
+insert into t (id,a) values (582,60);
+insert into t (id,a) values (582,61);
+insert into t (id,a) values (582,62);
+insert into t (id,a) values (582,63);
+insert into t (id,a) values (582,64);
+insert into t (id,a) values (582,65);
+insert into t (id,a) values (582,66);
+insert into t (id,a) values (582,67);
+insert into t (id,a) values (582,68);
+insert into t (id,a) values (582,69);
+insert into t (id,a) values (582,70);
+insert into t (id,a) values (582,71);
+insert into t (id,a) values (582,72);
+insert into t (id,a) values (582,73);
+insert into t (id,a) values (582,74);
+insert into t (id,a) values (582,75);
+insert into t (id,a) values (582,76);
+insert into t (id,a) values (582,77);
+insert into t (id,a) values (582,78);
+insert into t (id,a) values (582,79);
+insert into t (id,a) values (582,80);
+insert into t (id,a) values (582,81);
+insert into t (id,a) values (582,82);
+insert into t (id,a) values (582,83);
+insert into t (id,a) values (582,84);
+insert into t (id,a) values (582,85);
+insert into t (id,a) values (582,86);
+insert into t (id,a) values (582,87);
+insert into t (id,a) values (582,88);
+insert into t (id,a) values (582,89);
+insert into t (id,a) values (582,90);
+insert into t (id,a) values (582,91);
+insert into t (id,a) values (582,92);
+insert into t (id,a) values (582,93);
+insert into t (id,a) values (582,94);
+insert into t (id,a) values (582,95);
+insert into t (id,a) values (582,96);
+insert into t (id,a) values (582,97);
+insert into t (id,a) values (582,98);
+insert into t (id,a) values (582,99);
+insert into t (id,a) values (583,0);
+insert into t (id,a) values (583,1);
+insert into t (id,a) values (583,2);
+insert into t (id,a) values (583,3);
+insert into t (id,a) values (583,4);
+insert into t (id,a) values (583,5);
+insert into t (id,a) values (583,6);
+insert into t (id,a) values (583,7);
+insert into t (id,a) values (583,8);
+insert into t (id,a) values (583,9);
+insert into t (id,a) values (583,10);
+insert into t (id,a) values (583,11);
+insert into t (id,a) values (583,12);
+insert into t (id,a) values (583,13);
+insert into t (id,a) values (583,14);
+insert into t (id,a) values (583,15);
+insert into t (id,a) values (583,16);
+insert into t (id,a) values (583,17);
+insert into t (id,a) values (583,18);
+insert into t (id,a) values (583,19);
+insert into t (id,a) values (583,20);
+insert into t (id,a) values (583,21);
+insert into t (id,a) values (583,22);
+insert into t (id,a) values (583,23);
+insert into t (id,a) values (583,24);
+insert into t (id,a) values (583,25);
+insert into t (id,a) values (583,26);
+insert into t (id,a) values (583,27);
+insert into t (id,a) values (583,28);
+insert into t (id,a) values (583,29);
+insert into t (id,a) values (583,30);
+insert into t (id,a) values (583,31);
+insert into t (id,a) values (583,32);
+insert into t (id,a) values (583,33);
+insert into t (id,a) values (583,34);
+insert into t (id,a) values (583,35);
+insert into t (id,a) values (583,36);
+insert into t (id,a) values (583,37);
+insert into t (id,a) values (583,38);
+insert into t (id,a) values (583,39);
+insert into t (id,a) values (583,40);
+insert into t (id,a) values (583,41);
+insert into t (id,a) values (583,42);
+insert into t (id,a) values (583,43);
+insert into t (id,a) values (583,44);
+insert into t (id,a) values (583,45);
+insert into t (id,a) values (583,46);
+insert into t (id,a) values (583,47);
+insert into t (id,a) values (583,48);
+insert into t (id,a) values (583,49);
+insert into t (id,a) values (583,50);
+insert into t (id,a) values (583,51);
+insert into t (id,a) values (583,52);
+insert into t (id,a) values (583,53);
+insert into t (id,a) values (583,54);
+insert into t (id,a) values (583,55);
+insert into t (id,a) values (583,56);
+insert into t (id,a) values (583,57);
+insert into t (id,a) values (583,58);
+insert into t (id,a) values (583,59);
+insert into t (id,a) values (583,60);
+insert into t (id,a) values (583,61);
+insert into t (id,a) values (583,62);
+insert into t (id,a) values (583,63);
+insert into t (id,a) values (583,64);
+insert into t (id,a) values (583,65);
+insert into t (id,a) values (583,66);
+insert into t (id,a) values (583,67);
+insert into t (id,a) values (583,68);
+insert into t (id,a) values (583,69);
+insert into t (id,a) values (583,70);
+insert into t (id,a) values (583,71);
+insert into t (id,a) values (583,72);
+insert into t (id,a) values (583,73);
+insert into t (id,a) values (583,74);
+insert into t (id,a) values (583,75);
+insert into t (id,a) values (583,76);
+insert into t (id,a) values (583,77);
+insert into t (id,a) values (583,78);
+insert into t (id,a) values (583,79);
+insert into t (id,a) values (583,80);
+insert into t (id,a) values (583,81);
+insert into t (id,a) values (583,82);
+insert into t (id,a) values (583,83);
+insert into t (id,a) values (583,84);
+insert into t (id,a) values (583,85);
+insert into t (id,a) values (583,86);
+insert into t (id,a) values (583,87);
+insert into t (id,a) values (583,88);
+insert into t (id,a) values (583,89);
+insert into t (id,a) values (583,90);
+insert into t (id,a) values (583,91);
+insert into t (id,a) values (583,92);
+insert into t (id,a) values (583,93);
+insert into t (id,a) values (583,94);
+insert into t (id,a) values (583,95);
+insert into t (id,a) values (583,96);
+insert into t (id,a) values (583,97);
+insert into t (id,a) values (583,98);
+insert into t (id,a) values (583,99);
+insert into t (id,a) values (584,0);
+insert into t (id,a) values (584,1);
+insert into t (id,a) values (584,2);
+insert into t (id,a) values (584,3);
+insert into t (id,a) values (584,4);
+insert into t (id,a) values (584,5);
+insert into t (id,a) values (584,6);
+insert into t (id,a) values (584,7);
+insert into t (id,a) values (584,8);
+insert into t (id,a) values (584,9);
+insert into t (id,a) values (584,10);
+insert into t (id,a) values (584,11);
+insert into t (id,a) values (584,12);
+insert into t (id,a) values (584,13);
+insert into t (id,a) values (584,14);
+insert into t (id,a) values (584,15);
+insert into t (id,a) values (584,16);
+insert into t (id,a) values (584,17);
+insert into t (id,a) values (584,18);
+insert into t (id,a) values (584,19);
+insert into t (id,a) values (584,20);
+insert into t (id,a) values (584,21);
+insert into t (id,a) values (584,22);
+insert into t (id,a) values (584,23);
+insert into t (id,a) values (584,24);
+insert into t (id,a) values (584,25);
+insert into t (id,a) values (584,26);
+insert into t (id,a) values (584,27);
+insert into t (id,a) values (584,28);
+insert into t (id,a) values (584,29);
+insert into t (id,a) values (584,30);
+insert into t (id,a) values (584,31);
+insert into t (id,a) values (584,32);
+insert into t (id,a) values (584,33);
+insert into t (id,a) values (584,34);
+insert into t (id,a) values (584,35);
+insert into t (id,a) values (584,36);
+insert into t (id,a) values (584,37);
+insert into t (id,a) values (584,38);
+insert into t (id,a) values (584,39);
+insert into t (id,a) values (584,40);
+insert into t (id,a) values (584,41);
+insert into t (id,a) values (584,42);
+insert into t (id,a) values (584,43);
+insert into t (id,a) values (584,44);
+insert into t (id,a) values (584,45);
+insert into t (id,a) values (584,46);
+insert into t (id,a) values (584,47);
+insert into t (id,a) values (584,48);
+insert into t (id,a) values (584,49);
+insert into t (id,a) values (584,50);
+insert into t (id,a) values (584,51);
+insert into t (id,a) values (584,52);
+insert into t (id,a) values (584,53);
+insert into t (id,a) values (584,54);
+insert into t (id,a) values (584,55);
+insert into t (id,a) values (584,56);
+insert into t (id,a) values (584,57);
+insert into t (id,a) values (584,58);
+insert into t (id,a) values (584,59);
+insert into t (id,a) values (584,60);
+insert into t (id,a) values (584,61);
+insert into t (id,a) values (584,62);
+insert into t (id,a) values (584,63);
+insert into t (id,a) values (584,64);
+insert into t (id,a) values (584,65);
+insert into t (id,a) values (584,66);
+insert into t (id,a) values (584,67);
+insert into t (id,a) values (584,68);
+insert into t (id,a) values (584,69);
+insert into t (id,a) values (584,70);
+insert into t (id,a) values (584,71);
+insert into t (id,a) values (584,72);
+insert into t (id,a) values (584,73);
+insert into t (id,a) values (584,74);
+insert into t (id,a) values (584,75);
+insert into t (id,a) values (584,76);
+insert into t (id,a) values (584,77);
+insert into t (id,a) values (584,78);
+insert into t (id,a) values (584,79);
+insert into t (id,a) values (584,80);
+insert into t (id,a) values (584,81);
+insert into t (id,a) values (584,82);
+insert into t (id,a) values (584,83);
+insert into t (id,a) values (584,84);
+insert into t (id,a) values (584,85);
+insert into t (id,a) values (584,86);
+insert into t (id,a) values (584,87);
+insert into t (id,a) values (584,88);
+insert into t (id,a) values (584,89);
+insert into t (id,a) values (584,90);
+insert into t (id,a) values (584,91);
+insert into t (id,a) values (584,92);
+insert into t (id,a) values (584,93);
+insert into t (id,a) values (584,94);
+insert into t (id,a) values (584,95);
+insert into t (id,a) values (584,96);
+insert into t (id,a) values (584,97);
+insert into t (id,a) values (584,98);
+insert into t (id,a) values (584,99);
+insert into t (id,a) values (585,0);
+insert into t (id,a) values (585,1);
+insert into t (id,a) values (585,2);
+insert into t (id,a) values (585,3);
+insert into t (id,a) values (585,4);
+insert into t (id,a) values (585,5);
+insert into t (id,a) values (585,6);
+insert into t (id,a) values (585,7);
+insert into t (id,a) values (585,8);
+insert into t (id,a) values (585,9);
+insert into t (id,a) values (585,10);
+insert into t (id,a) values (585,11);
+insert into t (id,a) values (585,12);
+insert into t (id,a) values (585,13);
+insert into t (id,a) values (585,14);
+insert into t (id,a) values (585,15);
+insert into t (id,a) values (585,16);
+insert into t (id,a) values (585,17);
+insert into t (id,a) values (585,18);
+insert into t (id,a) values (585,19);
+insert into t (id,a) values (585,20);
+insert into t (id,a) values (585,21);
+insert into t (id,a) values (585,22);
+insert into t (id,a) values (585,23);
+insert into t (id,a) values (585,24);
+insert into t (id,a) values (585,25);
+insert into t (id,a) values (585,26);
+insert into t (id,a) values (585,27);
+insert into t (id,a) values (585,28);
+insert into t (id,a) values (585,29);
+insert into t (id,a) values (585,30);
+insert into t (id,a) values (585,31);
+insert into t (id,a) values (585,32);
+insert into t (id,a) values (585,33);
+insert into t (id,a) values (585,34);
+insert into t (id,a) values (585,35);
+insert into t (id,a) values (585,36);
+insert into t (id,a) values (585,37);
+insert into t (id,a) values (585,38);
+insert into t (id,a) values (585,39);
+insert into t (id,a) values (585,40);
+insert into t (id,a) values (585,41);
+insert into t (id,a) values (585,42);
+insert into t (id,a) values (585,43);
+insert into t (id,a) values (585,44);
+insert into t (id,a) values (585,45);
+insert into t (id,a) values (585,46);
+insert into t (id,a) values (585,47);
+insert into t (id,a) values (585,48);
+insert into t (id,a) values (585,49);
+insert into t (id,a) values (585,50);
+insert into t (id,a) values (585,51);
+insert into t (id,a) values (585,52);
+insert into t (id,a) values (585,53);
+insert into t (id,a) values (585,54);
+insert into t (id,a) values (585,55);
+insert into t (id,a) values (585,56);
+insert into t (id,a) values (585,57);
+insert into t (id,a) values (585,58);
+insert into t (id,a) values (585,59);
+insert into t (id,a) values (585,60);
+insert into t (id,a) values (585,61);
+insert into t (id,a) values (585,62);
+insert into t (id,a) values (585,63);
+insert into t (id,a) values (585,64);
+insert into t (id,a) values (585,65);
+insert into t (id,a) values (585,66);
+insert into t (id,a) values (585,67);
+insert into t (id,a) values (585,68);
+insert into t (id,a) values (585,69);
+insert into t (id,a) values (585,70);
+insert into t (id,a) values (585,71);
+insert into t (id,a) values (585,72);
+insert into t (id,a) values (585,73);
+insert into t (id,a) values (585,74);
+insert into t (id,a) values (585,75);
+insert into t (id,a) values (585,76);
+insert into t (id,a) values (585,77);
+insert into t (id,a) values (585,78);
+insert into t (id,a) values (585,79);
+insert into t (id,a) values (585,80);
+insert into t (id,a) values (585,81);
+insert into t (id,a) values (585,82);
+insert into t (id,a) values (585,83);
+insert into t (id,a) values (585,84);
+insert into t (id,a) values (585,85);
+insert into t (id,a) values (585,86);
+insert into t (id,a) values (585,87);
+insert into t (id,a) values (585,88);
+insert into t (id,a) values (585,89);
+insert into t (id,a) values (585,90);
+insert into t (id,a) values (585,91);
+insert into t (id,a) values (585,92);
+insert into t (id,a) values (585,93);
+insert into t (id,a) values (585,94);
+insert into t (id,a) values (585,95);
+insert into t (id,a) values (585,96);
+insert into t (id,a) values (585,97);
+insert into t (id,a) values (585,98);
+insert into t (id,a) values (585,99);
+insert into t (id,a) values (586,0);
+insert into t (id,a) values (586,1);
+insert into t (id,a) values (586,2);
+insert into t (id,a) values (586,3);
+insert into t (id,a) values (586,4);
+insert into t (id,a) values (586,5);
+insert into t (id,a) values (586,6);
+insert into t (id,a) values (586,7);
+insert into t (id,a) values (586,8);
+insert into t (id,a) values (586,9);
+insert into t (id,a) values (586,10);
+insert into t (id,a) values (586,11);
+insert into t (id,a) values (586,12);
+insert into t (id,a) values (586,13);
+insert into t (id,a) values (586,14);
+insert into t (id,a) values (586,15);
+insert into t (id,a) values (586,16);
+insert into t (id,a) values (586,17);
+insert into t (id,a) values (586,18);
+insert into t (id,a) values (586,19);
+insert into t (id,a) values (586,20);
+insert into t (id,a) values (586,21);
+insert into t (id,a) values (586,22);
+insert into t (id,a) values (586,23);
+insert into t (id,a) values (586,24);
+insert into t (id,a) values (586,25);
+insert into t (id,a) values (586,26);
+insert into t (id,a) values (586,27);
+insert into t (id,a) values (586,28);
+insert into t (id,a) values (586,29);
+insert into t (id,a) values (586,30);
+insert into t (id,a) values (586,31);
+insert into t (id,a) values (586,32);
+insert into t (id,a) values (586,33);
+insert into t (id,a) values (586,34);
+insert into t (id,a) values (586,35);
+insert into t (id,a) values (586,36);
+insert into t (id,a) values (586,37);
+insert into t (id,a) values (586,38);
+insert into t (id,a) values (586,39);
+insert into t (id,a) values (586,40);
+insert into t (id,a) values (586,41);
+insert into t (id,a) values (586,42);
+insert into t (id,a) values (586,43);
+insert into t (id,a) values (586,44);
+insert into t (id,a) values (586,45);
+insert into t (id,a) values (586,46);
+insert into t (id,a) values (586,47);
+insert into t (id,a) values (586,48);
+insert into t (id,a) values (586,49);
+insert into t (id,a) values (586,50);
+insert into t (id,a) values (586,51);
+insert into t (id,a) values (586,52);
+insert into t (id,a) values (586,53);
+insert into t (id,a) values (586,54);
+insert into t (id,a) values (586,55);
+insert into t (id,a) values (586,56);
+insert into t (id,a) values (586,57);
+insert into t (id,a) values (586,58);
+insert into t (id,a) values (586,59);
+insert into t (id,a) values (586,60);
+insert into t (id,a) values (586,61);
+insert into t (id,a) values (586,62);
+insert into t (id,a) values (586,63);
+insert into t (id,a) values (586,64);
+insert into t (id,a) values (586,65);
+insert into t (id,a) values (586,66);
+insert into t (id,a) values (586,67);
+insert into t (id,a) values (586,68);
+insert into t (id,a) values (586,69);
+insert into t (id,a) values (586,70);
+insert into t (id,a) values (586,71);
+insert into t (id,a) values (586,72);
+insert into t (id,a) values (586,73);
+insert into t (id,a) values (586,74);
+insert into t (id,a) values (586,75);
+insert into t (id,a) values (586,76);
+insert into t (id,a) values (586,77);
+insert into t (id,a) values (586,78);
+insert into t (id,a) values (586,79);
+insert into t (id,a) values (586,80);
+insert into t (id,a) values (586,81);
+insert into t (id,a) values (586,82);
+insert into t (id,a) values (586,83);
+insert into t (id,a) values (586,84);
+insert into t (id,a) values (586,85);
+insert into t (id,a) values (586,86);
+insert into t (id,a) values (586,87);
+insert into t (id,a) values (586,88);
+insert into t (id,a) values (586,89);
+insert into t (id,a) values (586,90);
+insert into t (id,a) values (586,91);
+insert into t (id,a) values (586,92);
+insert into t (id,a) values (586,93);
+insert into t (id,a) values (586,94);
+insert into t (id,a) values (586,95);
+insert into t (id,a) values (586,96);
+insert into t (id,a) values (586,97);
+insert into t (id,a) values (586,98);
+insert into t (id,a) values (586,99);
+insert into t (id,a) values (587,0);
+insert into t (id,a) values (587,1);
+insert into t (id,a) values (587,2);
+insert into t (id,a) values (587,3);
+insert into t (id,a) values (587,4);
+insert into t (id,a) values (587,5);
+insert into t (id,a) values (587,6);
+insert into t (id,a) values (587,7);
+insert into t (id,a) values (587,8);
+insert into t (id,a) values (587,9);
+insert into t (id,a) values (587,10);
+insert into t (id,a) values (587,11);
+insert into t (id,a) values (587,12);
+insert into t (id,a) values (587,13);
+insert into t (id,a) values (587,14);
+insert into t (id,a) values (587,15);
+insert into t (id,a) values (587,16);
+insert into t (id,a) values (587,17);
+insert into t (id,a) values (587,18);
+insert into t (id,a) values (587,19);
+insert into t (id,a) values (587,20);
+insert into t (id,a) values (587,21);
+insert into t (id,a) values (587,22);
+insert into t (id,a) values (587,23);
+insert into t (id,a) values (587,24);
+insert into t (id,a) values (587,25);
+insert into t (id,a) values (587,26);
+insert into t (id,a) values (587,27);
+insert into t (id,a) values (587,28);
+insert into t (id,a) values (587,29);
+insert into t (id,a) values (587,30);
+insert into t (id,a) values (587,31);
+insert into t (id,a) values (587,32);
+insert into t (id,a) values (587,33);
+insert into t (id,a) values (587,34);
+insert into t (id,a) values (587,35);
+insert into t (id,a) values (587,36);
+insert into t (id,a) values (587,37);
+insert into t (id,a) values (587,38);
+insert into t (id,a) values (587,39);
+insert into t (id,a) values (587,40);
+insert into t (id,a) values (587,41);
+insert into t (id,a) values (587,42);
+insert into t (id,a) values (587,43);
+insert into t (id,a) values (587,44);
+insert into t (id,a) values (587,45);
+insert into t (id,a) values (587,46);
+insert into t (id,a) values (587,47);
+insert into t (id,a) values (587,48);
+insert into t (id,a) values (587,49);
+insert into t (id,a) values (587,50);
+insert into t (id,a) values (587,51);
+insert into t (id,a) values (587,52);
+insert into t (id,a) values (587,53);
+insert into t (id,a) values (587,54);
+insert into t (id,a) values (587,55);
+insert into t (id,a) values (587,56);
+insert into t (id,a) values (587,57);
+insert into t (id,a) values (587,58);
+insert into t (id,a) values (587,59);
+insert into t (id,a) values (587,60);
+insert into t (id,a) values (587,61);
+insert into t (id,a) values (587,62);
+insert into t (id,a) values (587,63);
+insert into t (id,a) values (587,64);
+insert into t (id,a) values (587,65);
+insert into t (id,a) values (587,66);
+insert into t (id,a) values (587,67);
+insert into t (id,a) values (587,68);
+insert into t (id,a) values (587,69);
+insert into t (id,a) values (587,70);
+insert into t (id,a) values (587,71);
+insert into t (id,a) values (587,72);
+insert into t (id,a) values (587,73);
+insert into t (id,a) values (587,74);
+insert into t (id,a) values (587,75);
+insert into t (id,a) values (587,76);
+insert into t (id,a) values (587,77);
+insert into t (id,a) values (587,78);
+insert into t (id,a) values (587,79);
+insert into t (id,a) values (587,80);
+insert into t (id,a) values (587,81);
+insert into t (id,a) values (587,82);
+insert into t (id,a) values (587,83);
+insert into t (id,a) values (587,84);
+insert into t (id,a) values (587,85);
+insert into t (id,a) values (587,86);
+insert into t (id,a) values (587,87);
+insert into t (id,a) values (587,88);
+insert into t (id,a) values (587,89);
+insert into t (id,a) values (587,90);
+insert into t (id,a) values (587,91);
+insert into t (id,a) values (587,92);
+insert into t (id,a) values (587,93);
+insert into t (id,a) values (587,94);
+insert into t (id,a) values (587,95);
+insert into t (id,a) values (587,96);
+insert into t (id,a) values (587,97);
+insert into t (id,a) values (587,98);
+insert into t (id,a) values (587,99);
+insert into t (id,a) values (588,0);
+insert into t (id,a) values (588,1);
+insert into t (id,a) values (588,2);
+insert into t (id,a) values (588,3);
+insert into t (id,a) values (588,4);
+insert into t (id,a) values (588,5);
+insert into t (id,a) values (588,6);
+insert into t (id,a) values (588,7);
+insert into t (id,a) values (588,8);
+insert into t (id,a) values (588,9);
+insert into t (id,a) values (588,10);
+insert into t (id,a) values (588,11);
+insert into t (id,a) values (588,12);
+insert into t (id,a) values (588,13);
+insert into t (id,a) values (588,14);
+insert into t (id,a) values (588,15);
+insert into t (id,a) values (588,16);
+insert into t (id,a) values (588,17);
+insert into t (id,a) values (588,18);
+insert into t (id,a) values (588,19);
+insert into t (id,a) values (588,20);
+insert into t (id,a) values (588,21);
+insert into t (id,a) values (588,22);
+insert into t (id,a) values (588,23);
+insert into t (id,a) values (588,24);
+insert into t (id,a) values (588,25);
+insert into t (id,a) values (588,26);
+insert into t (id,a) values (588,27);
+insert into t (id,a) values (588,28);
+insert into t (id,a) values (588,29);
+insert into t (id,a) values (588,30);
+insert into t (id,a) values (588,31);
+insert into t (id,a) values (588,32);
+insert into t (id,a) values (588,33);
+insert into t (id,a) values (588,34);
+insert into t (id,a) values (588,35);
+insert into t (id,a) values (588,36);
+insert into t (id,a) values (588,37);
+insert into t (id,a) values (588,38);
+insert into t (id,a) values (588,39);
+insert into t (id,a) values (588,40);
+insert into t (id,a) values (588,41);
+insert into t (id,a) values (588,42);
+insert into t (id,a) values (588,43);
+insert into t (id,a) values (588,44);
+insert into t (id,a) values (588,45);
+insert into t (id,a) values (588,46);
+insert into t (id,a) values (588,47);
+insert into t (id,a) values (588,48);
+insert into t (id,a) values (588,49);
+insert into t (id,a) values (588,50);
+insert into t (id,a) values (588,51);
+insert into t (id,a) values (588,52);
+insert into t (id,a) values (588,53);
+insert into t (id,a) values (588,54);
+insert into t (id,a) values (588,55);
+insert into t (id,a) values (588,56);
+insert into t (id,a) values (588,57);
+insert into t (id,a) values (588,58);
+insert into t (id,a) values (588,59);
+insert into t (id,a) values (588,60);
+insert into t (id,a) values (588,61);
+insert into t (id,a) values (588,62);
+insert into t (id,a) values (588,63);
+insert into t (id,a) values (588,64);
+insert into t (id,a) values (588,65);
+insert into t (id,a) values (588,66);
+insert into t (id,a) values (588,67);
+insert into t (id,a) values (588,68);
+insert into t (id,a) values (588,69);
+insert into t (id,a) values (588,70);
+insert into t (id,a) values (588,71);
+insert into t (id,a) values (588,72);
+insert into t (id,a) values (588,73);
+insert into t (id,a) values (588,74);
+insert into t (id,a) values (588,75);
+insert into t (id,a) values (588,76);
+insert into t (id,a) values (588,77);
+insert into t (id,a) values (588,78);
+insert into t (id,a) values (588,79);
+insert into t (id,a) values (588,80);
+insert into t (id,a) values (588,81);
+insert into t (id,a) values (588,82);
+insert into t (id,a) values (588,83);
+insert into t (id,a) values (588,84);
+insert into t (id,a) values (588,85);
+insert into t (id,a) values (588,86);
+insert into t (id,a) values (588,87);
+insert into t (id,a) values (588,88);
+insert into t (id,a) values (588,89);
+insert into t (id,a) values (588,90);
+insert into t (id,a) values (588,91);
+insert into t (id,a) values (588,92);
+insert into t (id,a) values (588,93);
+insert into t (id,a) values (588,94);
+insert into t (id,a) values (588,95);
+insert into t (id,a) values (588,96);
+insert into t (id,a) values (588,97);
+insert into t (id,a) values (588,98);
+insert into t (id,a) values (588,99);
+insert into t (id,a) values (589,0);
+insert into t (id,a) values (589,1);
+insert into t (id,a) values (589,2);
+insert into t (id,a) values (589,3);
+insert into t (id,a) values (589,4);
+insert into t (id,a) values (589,5);
+insert into t (id,a) values (589,6);
+insert into t (id,a) values (589,7);
+insert into t (id,a) values (589,8);
+insert into t (id,a) values (589,9);
+insert into t (id,a) values (589,10);
+insert into t (id,a) values (589,11);
+insert into t (id,a) values (589,12);
+insert into t (id,a) values (589,13);
+insert into t (id,a) values (589,14);
+insert into t (id,a) values (589,15);
+insert into t (id,a) values (589,16);
+insert into t (id,a) values (589,17);
+insert into t (id,a) values (589,18);
+insert into t (id,a) values (589,19);
+insert into t (id,a) values (589,20);
+insert into t (id,a) values (589,21);
+insert into t (id,a) values (589,22);
+insert into t (id,a) values (589,23);
+insert into t (id,a) values (589,24);
+insert into t (id,a) values (589,25);
+insert into t (id,a) values (589,26);
+insert into t (id,a) values (589,27);
+insert into t (id,a) values (589,28);
+insert into t (id,a) values (589,29);
+insert into t (id,a) values (589,30);
+insert into t (id,a) values (589,31);
+insert into t (id,a) values (589,32);
+insert into t (id,a) values (589,33);
+insert into t (id,a) values (589,34);
+insert into t (id,a) values (589,35);
+insert into t (id,a) values (589,36);
+insert into t (id,a) values (589,37);
+insert into t (id,a) values (589,38);
+insert into t (id,a) values (589,39);
+insert into t (id,a) values (589,40);
+insert into t (id,a) values (589,41);
+insert into t (id,a) values (589,42);
+insert into t (id,a) values (589,43);
+insert into t (id,a) values (589,44);
+insert into t (id,a) values (589,45);
+insert into t (id,a) values (589,46);
+insert into t (id,a) values (589,47);
+insert into t (id,a) values (589,48);
+insert into t (id,a) values (589,49);
+insert into t (id,a) values (589,50);
+insert into t (id,a) values (589,51);
+insert into t (id,a) values (589,52);
+insert into t (id,a) values (589,53);
+insert into t (id,a) values (589,54);
+insert into t (id,a) values (589,55);
+insert into t (id,a) values (589,56);
+insert into t (id,a) values (589,57);
+insert into t (id,a) values (589,58);
+insert into t (id,a) values (589,59);
+insert into t (id,a) values (589,60);
+insert into t (id,a) values (589,61);
+insert into t (id,a) values (589,62);
+insert into t (id,a) values (589,63);
+insert into t (id,a) values (589,64);
+insert into t (id,a) values (589,65);
+insert into t (id,a) values (589,66);
+insert into t (id,a) values (589,67);
+insert into t (id,a) values (589,68);
+insert into t (id,a) values (589,69);
+insert into t (id,a) values (589,70);
+insert into t (id,a) values (589,71);
+insert into t (id,a) values (589,72);
+insert into t (id,a) values (589,73);
+insert into t (id,a) values (589,74);
+insert into t (id,a) values (589,75);
+insert into t (id,a) values (589,76);
+insert into t (id,a) values (589,77);
+insert into t (id,a) values (589,78);
+insert into t (id,a) values (589,79);
+insert into t (id,a) values (589,80);
+insert into t (id,a) values (589,81);
+insert into t (id,a) values (589,82);
+insert into t (id,a) values (589,83);
+insert into t (id,a) values (589,84);
+insert into t (id,a) values (589,85);
+insert into t (id,a) values (589,86);
+insert into t (id,a) values (589,87);
+insert into t (id,a) values (589,88);
+insert into t (id,a) values (589,89);
+insert into t (id,a) values (589,90);
+insert into t (id,a) values (589,91);
+insert into t (id,a) values (589,92);
+insert into t (id,a) values (589,93);
+insert into t (id,a) values (589,94);
+insert into t (id,a) values (589,95);
+insert into t (id,a) values (589,96);
+insert into t (id,a) values (589,97);
+insert into t (id,a) values (589,98);
+insert into t (id,a) values (589,99);
+insert into t (id,a) values (590,0);
+insert into t (id,a) values (590,1);
+insert into t (id,a) values (590,2);
+insert into t (id,a) values (590,3);
+insert into t (id,a) values (590,4);
+insert into t (id,a) values (590,5);
+insert into t (id,a) values (590,6);
+insert into t (id,a) values (590,7);
+insert into t (id,a) values (590,8);
+insert into t (id,a) values (590,9);
+insert into t (id,a) values (590,10);
+insert into t (id,a) values (590,11);
+insert into t (id,a) values (590,12);
+insert into t (id,a) values (590,13);
+insert into t (id,a) values (590,14);
+insert into t (id,a) values (590,15);
+insert into t (id,a) values (590,16);
+insert into t (id,a) values (590,17);
+insert into t (id,a) values (590,18);
+insert into t (id,a) values (590,19);
+insert into t (id,a) values (590,20);
+insert into t (id,a) values (590,21);
+insert into t (id,a) values (590,22);
+insert into t (id,a) values (590,23);
+insert into t (id,a) values (590,24);
+insert into t (id,a) values (590,25);
+insert into t (id,a) values (590,26);
+insert into t (id,a) values (590,27);
+insert into t (id,a) values (590,28);
+insert into t (id,a) values (590,29);
+insert into t (id,a) values (590,30);
+insert into t (id,a) values (590,31);
+insert into t (id,a) values (590,32);
+insert into t (id,a) values (590,33);
+insert into t (id,a) values (590,34);
+insert into t (id,a) values (590,35);
+insert into t (id,a) values (590,36);
+insert into t (id,a) values (590,37);
+insert into t (id,a) values (590,38);
+insert into t (id,a) values (590,39);
+insert into t (id,a) values (590,40);
+insert into t (id,a) values (590,41);
+insert into t (id,a) values (590,42);
+insert into t (id,a) values (590,43);
+insert into t (id,a) values (590,44);
+insert into t (id,a) values (590,45);
+insert into t (id,a) values (590,46);
+insert into t (id,a) values (590,47);
+insert into t (id,a) values (590,48);
+insert into t (id,a) values (590,49);
+insert into t (id,a) values (590,50);
+insert into t (id,a) values (590,51);
+insert into t (id,a) values (590,52);
+insert into t (id,a) values (590,53);
+insert into t (id,a) values (590,54);
+insert into t (id,a) values (590,55);
+insert into t (id,a) values (590,56);
+insert into t (id,a) values (590,57);
+insert into t (id,a) values (590,58);
+insert into t (id,a) values (590,59);
+insert into t (id,a) values (590,60);
+insert into t (id,a) values (590,61);
+insert into t (id,a) values (590,62);
+insert into t (id,a) values (590,63);
+insert into t (id,a) values (590,64);
+insert into t (id,a) values (590,65);
+insert into t (id,a) values (590,66);
+insert into t (id,a) values (590,67);
+insert into t (id,a) values (590,68);
+insert into t (id,a) values (590,69);
+insert into t (id,a) values (590,70);
+insert into t (id,a) values (590,71);
+insert into t (id,a) values (590,72);
+insert into t (id,a) values (590,73);
+insert into t (id,a) values (590,74);
+insert into t (id,a) values (590,75);
+insert into t (id,a) values (590,76);
+insert into t (id,a) values (590,77);
+insert into t (id,a) values (590,78);
+insert into t (id,a) values (590,79);
+insert into t (id,a) values (590,80);
+insert into t (id,a) values (590,81);
+insert into t (id,a) values (590,82);
+insert into t (id,a) values (590,83);
+insert into t (id,a) values (590,84);
+insert into t (id,a) values (590,85);
+insert into t (id,a) values (590,86);
+insert into t (id,a) values (590,87);
+insert into t (id,a) values (590,88);
+insert into t (id,a) values (590,89);
+insert into t (id,a) values (590,90);
+insert into t (id,a) values (590,91);
+insert into t (id,a) values (590,92);
+insert into t (id,a) values (590,93);
+insert into t (id,a) values (590,94);
+insert into t (id,a) values (590,95);
+insert into t (id,a) values (590,96);
+insert into t (id,a) values (590,97);
+insert into t (id,a) values (590,98);
+insert into t (id,a) values (590,99);
+insert into t (id,a) values (591,0);
+insert into t (id,a) values (591,1);
+insert into t (id,a) values (591,2);
+insert into t (id,a) values (591,3);
+insert into t (id,a) values (591,4);
+insert into t (id,a) values (591,5);
+insert into t (id,a) values (591,6);
+insert into t (id,a) values (591,7);
+insert into t (id,a) values (591,8);
+insert into t (id,a) values (591,9);
+insert into t (id,a) values (591,10);
+insert into t (id,a) values (591,11);
+insert into t (id,a) values (591,12);
+insert into t (id,a) values (591,13);
+insert into t (id,a) values (591,14);
+insert into t (id,a) values (591,15);
+insert into t (id,a) values (591,16);
+insert into t (id,a) values (591,17);
+insert into t (id,a) values (591,18);
+insert into t (id,a) values (591,19);
+insert into t (id,a) values (591,20);
+insert into t (id,a) values (591,21);
+insert into t (id,a) values (591,22);
+insert into t (id,a) values (591,23);
+insert into t (id,a) values (591,24);
+insert into t (id,a) values (591,25);
+insert into t (id,a) values (591,26);
+insert into t (id,a) values (591,27);
+insert into t (id,a) values (591,28);
+insert into t (id,a) values (591,29);
+insert into t (id,a) values (591,30);
+insert into t (id,a) values (591,31);
+insert into t (id,a) values (591,32);
+insert into t (id,a) values (591,33);
+insert into t (id,a) values (591,34);
+insert into t (id,a) values (591,35);
+insert into t (id,a) values (591,36);
+insert into t (id,a) values (591,37);
+insert into t (id,a) values (591,38);
+insert into t (id,a) values (591,39);
+insert into t (id,a) values (591,40);
+insert into t (id,a) values (591,41);
+insert into t (id,a) values (591,42);
+insert into t (id,a) values (591,43);
+insert into t (id,a) values (591,44);
+insert into t (id,a) values (591,45);
+insert into t (id,a) values (591,46);
+insert into t (id,a) values (591,47);
+insert into t (id,a) values (591,48);
+insert into t (id,a) values (591,49);
+insert into t (id,a) values (591,50);
+insert into t (id,a) values (591,51);
+insert into t (id,a) values (591,52);
+insert into t (id,a) values (591,53);
+insert into t (id,a) values (591,54);
+insert into t (id,a) values (591,55);
+insert into t (id,a) values (591,56);
+insert into t (id,a) values (591,57);
+insert into t (id,a) values (591,58);
+insert into t (id,a) values (591,59);
+insert into t (id,a) values (591,60);
+insert into t (id,a) values (591,61);
+insert into t (id,a) values (591,62);
+insert into t (id,a) values (591,63);
+insert into t (id,a) values (591,64);
+insert into t (id,a) values (591,65);
+insert into t (id,a) values (591,66);
+insert into t (id,a) values (591,67);
+insert into t (id,a) values (591,68);
+insert into t (id,a) values (591,69);
+insert into t (id,a) values (591,70);
+insert into t (id,a) values (591,71);
+insert into t (id,a) values (591,72);
+insert into t (id,a) values (591,73);
+insert into t (id,a) values (591,74);
+insert into t (id,a) values (591,75);
+insert into t (id,a) values (591,76);
+insert into t (id,a) values (591,77);
+insert into t (id,a) values (591,78);
+insert into t (id,a) values (591,79);
+insert into t (id,a) values (591,80);
+insert into t (id,a) values (591,81);
+insert into t (id,a) values (591,82);
+insert into t (id,a) values (591,83);
+insert into t (id,a) values (591,84);
+insert into t (id,a) values (591,85);
+insert into t (id,a) values (591,86);
+insert into t (id,a) values (591,87);
+insert into t (id,a) values (591,88);
+insert into t (id,a) values (591,89);
+insert into t (id,a) values (591,90);
+insert into t (id,a) values (591,91);
+insert into t (id,a) values (591,92);
+insert into t (id,a) values (591,93);
+insert into t (id,a) values (591,94);
+insert into t (id,a) values (591,95);
+insert into t (id,a) values (591,96);
+insert into t (id,a) values (591,97);
+insert into t (id,a) values (591,98);
+insert into t (id,a) values (591,99);
+insert into t (id,a) values (592,0);
+insert into t (id,a) values (592,1);
+insert into t (id,a) values (592,2);
+insert into t (id,a) values (592,3);
+insert into t (id,a) values (592,4);
+insert into t (id,a) values (592,5);
+insert into t (id,a) values (592,6);
+insert into t (id,a) values (592,7);
+insert into t (id,a) values (592,8);
+insert into t (id,a) values (592,9);
+insert into t (id,a) values (592,10);
+insert into t (id,a) values (592,11);
+insert into t (id,a) values (592,12);
+insert into t (id,a) values (592,13);
+insert into t (id,a) values (592,14);
+insert into t (id,a) values (592,15);
+insert into t (id,a) values (592,16);
+insert into t (id,a) values (592,17);
+insert into t (id,a) values (592,18);
+insert into t (id,a) values (592,19);
+insert into t (id,a) values (592,20);
+insert into t (id,a) values (592,21);
+insert into t (id,a) values (592,22);
+insert into t (id,a) values (592,23);
+insert into t (id,a) values (592,24);
+insert into t (id,a) values (592,25);
+insert into t (id,a) values (592,26);
+insert into t (id,a) values (592,27);
+insert into t (id,a) values (592,28);
+insert into t (id,a) values (592,29);
+insert into t (id,a) values (592,30);
+insert into t (id,a) values (592,31);
+insert into t (id,a) values (592,32);
+insert into t (id,a) values (592,33);
+insert into t (id,a) values (592,34);
+insert into t (id,a) values (592,35);
+insert into t (id,a) values (592,36);
+insert into t (id,a) values (592,37);
+insert into t (id,a) values (592,38);
+insert into t (id,a) values (592,39);
+insert into t (id,a) values (592,40);
+insert into t (id,a) values (592,41);
+insert into t (id,a) values (592,42);
+insert into t (id,a) values (592,43);
+insert into t (id,a) values (592,44);
+insert into t (id,a) values (592,45);
+insert into t (id,a) values (592,46);
+insert into t (id,a) values (592,47);
+insert into t (id,a) values (592,48);
+insert into t (id,a) values (592,49);
+insert into t (id,a) values (592,50);
+insert into t (id,a) values (592,51);
+insert into t (id,a) values (592,52);
+insert into t (id,a) values (592,53);
+insert into t (id,a) values (592,54);
+insert into t (id,a) values (592,55);
+insert into t (id,a) values (592,56);
+insert into t (id,a) values (592,57);
+insert into t (id,a) values (592,58);
+insert into t (id,a) values (592,59);
+insert into t (id,a) values (592,60);
+insert into t (id,a) values (592,61);
+insert into t (id,a) values (592,62);
+insert into t (id,a) values (592,63);
+insert into t (id,a) values (592,64);
+insert into t (id,a) values (592,65);
+insert into t (id,a) values (592,66);
+insert into t (id,a) values (592,67);
+insert into t (id,a) values (592,68);
+insert into t (id,a) values (592,69);
+insert into t (id,a) values (592,70);
+insert into t (id,a) values (592,71);
+insert into t (id,a) values (592,72);
+insert into t (id,a) values (592,73);
+insert into t (id,a) values (592,74);
+insert into t (id,a) values (592,75);
+insert into t (id,a) values (592,76);
+insert into t (id,a) values (592,77);
+insert into t (id,a) values (592,78);
+insert into t (id,a) values (592,79);
+insert into t (id,a) values (592,80);
+insert into t (id,a) values (592,81);
+insert into t (id,a) values (592,82);
+insert into t (id,a) values (592,83);
+insert into t (id,a) values (592,84);
+insert into t (id,a) values (592,85);
+insert into t (id,a) values (592,86);
+insert into t (id,a) values (592,87);
+insert into t (id,a) values (592,88);
+insert into t (id,a) values (592,89);
+insert into t (id,a) values (592,90);
+insert into t (id,a) values (592,91);
+insert into t (id,a) values (592,92);
+insert into t (id,a) values (592,93);
+insert into t (id,a) values (592,94);
+insert into t (id,a) values (592,95);
+insert into t (id,a) values (592,96);
+insert into t (id,a) values (592,97);
+insert into t (id,a) values (592,98);
+insert into t (id,a) values (592,99);
+insert into t (id,a) values (593,0);
+insert into t (id,a) values (593,1);
+insert into t (id,a) values (593,2);
+insert into t (id,a) values (593,3);
+insert into t (id,a) values (593,4);
+insert into t (id,a) values (593,5);
+insert into t (id,a) values (593,6);
+insert into t (id,a) values (593,7);
+insert into t (id,a) values (593,8);
+insert into t (id,a) values (593,9);
+insert into t (id,a) values (593,10);
+insert into t (id,a) values (593,11);
+insert into t (id,a) values (593,12);
+insert into t (id,a) values (593,13);
+insert into t (id,a) values (593,14);
+insert into t (id,a) values (593,15);
+insert into t (id,a) values (593,16);
+insert into t (id,a) values (593,17);
+insert into t (id,a) values (593,18);
+insert into t (id,a) values (593,19);
+insert into t (id,a) values (593,20);
+insert into t (id,a) values (593,21);
+insert into t (id,a) values (593,22);
+insert into t (id,a) values (593,23);
+insert into t (id,a) values (593,24);
+insert into t (id,a) values (593,25);
+insert into t (id,a) values (593,26);
+insert into t (id,a) values (593,27);
+insert into t (id,a) values (593,28);
+insert into t (id,a) values (593,29);
+insert into t (id,a) values (593,30);
+insert into t (id,a) values (593,31);
+insert into t (id,a) values (593,32);
+insert into t (id,a) values (593,33);
+insert into t (id,a) values (593,34);
+insert into t (id,a) values (593,35);
+insert into t (id,a) values (593,36);
+insert into t (id,a) values (593,37);
+insert into t (id,a) values (593,38);
+insert into t (id,a) values (593,39);
+insert into t (id,a) values (593,40);
+insert into t (id,a) values (593,41);
+insert into t (id,a) values (593,42);
+insert into t (id,a) values (593,43);
+insert into t (id,a) values (593,44);
+insert into t (id,a) values (593,45);
+insert into t (id,a) values (593,46);
+insert into t (id,a) values (593,47);
+insert into t (id,a) values (593,48);
+insert into t (id,a) values (593,49);
+insert into t (id,a) values (593,50);
+insert into t (id,a) values (593,51);
+insert into t (id,a) values (593,52);
+insert into t (id,a) values (593,53);
+insert into t (id,a) values (593,54);
+insert into t (id,a) values (593,55);
+insert into t (id,a) values (593,56);
+insert into t (id,a) values (593,57);
+insert into t (id,a) values (593,58);
+insert into t (id,a) values (593,59);
+insert into t (id,a) values (593,60);
+insert into t (id,a) values (593,61);
+insert into t (id,a) values (593,62);
+insert into t (id,a) values (593,63);
+insert into t (id,a) values (593,64);
+insert into t (id,a) values (593,65);
+insert into t (id,a) values (593,66);
+insert into t (id,a) values (593,67);
+insert into t (id,a) values (593,68);
+insert into t (id,a) values (593,69);
+insert into t (id,a) values (593,70);
+insert into t (id,a) values (593,71);
+insert into t (id,a) values (593,72);
+insert into t (id,a) values (593,73);
+insert into t (id,a) values (593,74);
+insert into t (id,a) values (593,75);
+insert into t (id,a) values (593,76);
+insert into t (id,a) values (593,77);
+insert into t (id,a) values (593,78);
+insert into t (id,a) values (593,79);
+insert into t (id,a) values (593,80);
+insert into t (id,a) values (593,81);
+insert into t (id,a) values (593,82);
+insert into t (id,a) values (593,83);
+insert into t (id,a) values (593,84);
+insert into t (id,a) values (593,85);
+insert into t (id,a) values (593,86);
+insert into t (id,a) values (593,87);
+insert into t (id,a) values (593,88);
+insert into t (id,a) values (593,89);
+insert into t (id,a) values (593,90);
+insert into t (id,a) values (593,91);
+insert into t (id,a) values (593,92);
+insert into t (id,a) values (593,93);
+insert into t (id,a) values (593,94);
+insert into t (id,a) values (593,95);
+insert into t (id,a) values (593,96);
+insert into t (id,a) values (593,97);
+insert into t (id,a) values (593,98);
+insert into t (id,a) values (593,99);
+insert into t (id,a) values (594,0);
+insert into t (id,a) values (594,1);
+insert into t (id,a) values (594,2);
+insert into t (id,a) values (594,3);
+insert into t (id,a) values (594,4);
+insert into t (id,a) values (594,5);
+insert into t (id,a) values (594,6);
+insert into t (id,a) values (594,7);
+insert into t (id,a) values (594,8);
+insert into t (id,a) values (594,9);
+insert into t (id,a) values (594,10);
+insert into t (id,a) values (594,11);
+insert into t (id,a) values (594,12);
+insert into t (id,a) values (594,13);
+insert into t (id,a) values (594,14);
+insert into t (id,a) values (594,15);
+insert into t (id,a) values (594,16);
+insert into t (id,a) values (594,17);
+insert into t (id,a) values (594,18);
+insert into t (id,a) values (594,19);
+insert into t (id,a) values (594,20);
+insert into t (id,a) values (594,21);
+insert into t (id,a) values (594,22);
+insert into t (id,a) values (594,23);
+insert into t (id,a) values (594,24);
+insert into t (id,a) values (594,25);
+insert into t (id,a) values (594,26);
+insert into t (id,a) values (594,27);
+insert into t (id,a) values (594,28);
+insert into t (id,a) values (594,29);
+insert into t (id,a) values (594,30);
+insert into t (id,a) values (594,31);
+insert into t (id,a) values (594,32);
+insert into t (id,a) values (594,33);
+insert into t (id,a) values (594,34);
+insert into t (id,a) values (594,35);
+insert into t (id,a) values (594,36);
+insert into t (id,a) values (594,37);
+insert into t (id,a) values (594,38);
+insert into t (id,a) values (594,39);
+insert into t (id,a) values (594,40);
+insert into t (id,a) values (594,41);
+insert into t (id,a) values (594,42);
+insert into t (id,a) values (594,43);
+insert into t (id,a) values (594,44);
+insert into t (id,a) values (594,45);
+insert into t (id,a) values (594,46);
+insert into t (id,a) values (594,47);
+insert into t (id,a) values (594,48);
+insert into t (id,a) values (594,49);
+insert into t (id,a) values (594,50);
+insert into t (id,a) values (594,51);
+insert into t (id,a) values (594,52);
+insert into t (id,a) values (594,53);
+insert into t (id,a) values (594,54);
+insert into t (id,a) values (594,55);
+insert into t (id,a) values (594,56);
+insert into t (id,a) values (594,57);
+insert into t (id,a) values (594,58);
+insert into t (id,a) values (594,59);
+insert into t (id,a) values (594,60);
+insert into t (id,a) values (594,61);
+insert into t (id,a) values (594,62);
+insert into t (id,a) values (594,63);
+insert into t (id,a) values (594,64);
+insert into t (id,a) values (594,65);
+insert into t (id,a) values (594,66);
+insert into t (id,a) values (594,67);
+insert into t (id,a) values (594,68);
+insert into t (id,a) values (594,69);
+insert into t (id,a) values (594,70);
+insert into t (id,a) values (594,71);
+insert into t (id,a) values (594,72);
+insert into t (id,a) values (594,73);
+insert into t (id,a) values (594,74);
+insert into t (id,a) values (594,75);
+insert into t (id,a) values (594,76);
+insert into t (id,a) values (594,77);
+insert into t (id,a) values (594,78);
+insert into t (id,a) values (594,79);
+insert into t (id,a) values (594,80);
+insert into t (id,a) values (594,81);
+insert into t (id,a) values (594,82);
+insert into t (id,a) values (594,83);
+insert into t (id,a) values (594,84);
+insert into t (id,a) values (594,85);
+insert into t (id,a) values (594,86);
+insert into t (id,a) values (594,87);
+insert into t (id,a) values (594,88);
+insert into t (id,a) values (594,89);
+insert into t (id,a) values (594,90);
+insert into t (id,a) values (594,91);
+insert into t (id,a) values (594,92);
+insert into t (id,a) values (594,93);
+insert into t (id,a) values (594,94);
+insert into t (id,a) values (594,95);
+insert into t (id,a) values (594,96);
+insert into t (id,a) values (594,97);
+insert into t (id,a) values (594,98);
+insert into t (id,a) values (594,99);
+insert into t (id,a) values (595,0);
+insert into t (id,a) values (595,1);
+insert into t (id,a) values (595,2);
+insert into t (id,a) values (595,3);
+insert into t (id,a) values (595,4);
+insert into t (id,a) values (595,5);
+insert into t (id,a) values (595,6);
+insert into t (id,a) values (595,7);
+insert into t (id,a) values (595,8);
+insert into t (id,a) values (595,9);
+insert into t (id,a) values (595,10);
+insert into t (id,a) values (595,11);
+insert into t (id,a) values (595,12);
+insert into t (id,a) values (595,13);
+insert into t (id,a) values (595,14);
+insert into t (id,a) values (595,15);
+insert into t (id,a) values (595,16);
+insert into t (id,a) values (595,17);
+insert into t (id,a) values (595,18);
+insert into t (id,a) values (595,19);
+insert into t (id,a) values (595,20);
+insert into t (id,a) values (595,21);
+insert into t (id,a) values (595,22);
+insert into t (id,a) values (595,23);
+insert into t (id,a) values (595,24);
+insert into t (id,a) values (595,25);
+insert into t (id,a) values (595,26);
+insert into t (id,a) values (595,27);
+insert into t (id,a) values (595,28);
+insert into t (id,a) values (595,29);
+insert into t (id,a) values (595,30);
+insert into t (id,a) values (595,31);
+insert into t (id,a) values (595,32);
+insert into t (id,a) values (595,33);
+insert into t (id,a) values (595,34);
+insert into t (id,a) values (595,35);
+insert into t (id,a) values (595,36);
+insert into t (id,a) values (595,37);
+insert into t (id,a) values (595,38);
+insert into t (id,a) values (595,39);
+insert into t (id,a) values (595,40);
+insert into t (id,a) values (595,41);
+insert into t (id,a) values (595,42);
+insert into t (id,a) values (595,43);
+insert into t (id,a) values (595,44);
+insert into t (id,a) values (595,45);
+insert into t (id,a) values (595,46);
+insert into t (id,a) values (595,47);
+insert into t (id,a) values (595,48);
+insert into t (id,a) values (595,49);
+insert into t (id,a) values (595,50);
+insert into t (id,a) values (595,51);
+insert into t (id,a) values (595,52);
+insert into t (id,a) values (595,53);
+insert into t (id,a) values (595,54);
+insert into t (id,a) values (595,55);
+insert into t (id,a) values (595,56);
+insert into t (id,a) values (595,57);
+insert into t (id,a) values (595,58);
+insert into t (id,a) values (595,59);
+insert into t (id,a) values (595,60);
+insert into t (id,a) values (595,61);
+insert into t (id,a) values (595,62);
+insert into t (id,a) values (595,63);
+insert into t (id,a) values (595,64);
+insert into t (id,a) values (595,65);
+insert into t (id,a) values (595,66);
+insert into t (id,a) values (595,67);
+insert into t (id,a) values (595,68);
+insert into t (id,a) values (595,69);
+insert into t (id,a) values (595,70);
+insert into t (id,a) values (595,71);
+insert into t (id,a) values (595,72);
+insert into t (id,a) values (595,73);
+insert into t (id,a) values (595,74);
+insert into t (id,a) values (595,75);
+insert into t (id,a) values (595,76);
+insert into t (id,a) values (595,77);
+insert into t (id,a) values (595,78);
+insert into t (id,a) values (595,79);
+insert into t (id,a) values (595,80);
+insert into t (id,a) values (595,81);
+insert into t (id,a) values (595,82);
+insert into t (id,a) values (595,83);
+insert into t (id,a) values (595,84);
+insert into t (id,a) values (595,85);
+insert into t (id,a) values (595,86);
+insert into t (id,a) values (595,87);
+insert into t (id,a) values (595,88);
+insert into t (id,a) values (595,89);
+insert into t (id,a) values (595,90);
+insert into t (id,a) values (595,91);
+insert into t (id,a) values (595,92);
+insert into t (id,a) values (595,93);
+insert into t (id,a) values (595,94);
+insert into t (id,a) values (595,95);
+insert into t (id,a) values (595,96);
+insert into t (id,a) values (595,97);
+insert into t (id,a) values (595,98);
+insert into t (id,a) values (595,99);
+insert into t (id,a) values (596,0);
+insert into t (id,a) values (596,1);
+insert into t (id,a) values (596,2);
+insert into t (id,a) values (596,3);
+insert into t (id,a) values (596,4);
+insert into t (id,a) values (596,5);
+insert into t (id,a) values (596,6);
+insert into t (id,a) values (596,7);
+insert into t (id,a) values (596,8);
+insert into t (id,a) values (596,9);
+insert into t (id,a) values (596,10);
+insert into t (id,a) values (596,11);
+insert into t (id,a) values (596,12);
+insert into t (id,a) values (596,13);
+insert into t (id,a) values (596,14);
+insert into t (id,a) values (596,15);
+insert into t (id,a) values (596,16);
+insert into t (id,a) values (596,17);
+insert into t (id,a) values (596,18);
+insert into t (id,a) values (596,19);
+insert into t (id,a) values (596,20);
+insert into t (id,a) values (596,21);
+insert into t (id,a) values (596,22);
+insert into t (id,a) values (596,23);
+insert into t (id,a) values (596,24);
+insert into t (id,a) values (596,25);
+insert into t (id,a) values (596,26);
+insert into t (id,a) values (596,27);
+insert into t (id,a) values (596,28);
+insert into t (id,a) values (596,29);
+insert into t (id,a) values (596,30);
+insert into t (id,a) values (596,31);
+insert into t (id,a) values (596,32);
+insert into t (id,a) values (596,33);
+insert into t (id,a) values (596,34);
+insert into t (id,a) values (596,35);
+insert into t (id,a) values (596,36);
+insert into t (id,a) values (596,37);
+insert into t (id,a) values (596,38);
+insert into t (id,a) values (596,39);
+insert into t (id,a) values (596,40);
+insert into t (id,a) values (596,41);
+insert into t (id,a) values (596,42);
+insert into t (id,a) values (596,43);
+insert into t (id,a) values (596,44);
+insert into t (id,a) values (596,45);
+insert into t (id,a) values (596,46);
+insert into t (id,a) values (596,47);
+insert into t (id,a) values (596,48);
+insert into t (id,a) values (596,49);
+insert into t (id,a) values (596,50);
+insert into t (id,a) values (596,51);
+insert into t (id,a) values (596,52);
+insert into t (id,a) values (596,53);
+insert into t (id,a) values (596,54);
+insert into t (id,a) values (596,55);
+insert into t (id,a) values (596,56);
+insert into t (id,a) values (596,57);
+insert into t (id,a) values (596,58);
+insert into t (id,a) values (596,59);
+insert into t (id,a) values (596,60);
+insert into t (id,a) values (596,61);
+insert into t (id,a) values (596,62);
+insert into t (id,a) values (596,63);
+insert into t (id,a) values (596,64);
+insert into t (id,a) values (596,65);
+insert into t (id,a) values (596,66);
+insert into t (id,a) values (596,67);
+insert into t (id,a) values (596,68);
+insert into t (id,a) values (596,69);
+insert into t (id,a) values (596,70);
+insert into t (id,a) values (596,71);
+insert into t (id,a) values (596,72);
+insert into t (id,a) values (596,73);
+insert into t (id,a) values (596,74);
+insert into t (id,a) values (596,75);
+insert into t (id,a) values (596,76);
+insert into t (id,a) values (596,77);
+insert into t (id,a) values (596,78);
+insert into t (id,a) values (596,79);
+insert into t (id,a) values (596,80);
+insert into t (id,a) values (596,81);
+insert into t (id,a) values (596,82);
+insert into t (id,a) values (596,83);
+insert into t (id,a) values (596,84);
+insert into t (id,a) values (596,85);
+insert into t (id,a) values (596,86);
+insert into t (id,a) values (596,87);
+insert into t (id,a) values (596,88);
+insert into t (id,a) values (596,89);
+insert into t (id,a) values (596,90);
+insert into t (id,a) values (596,91);
+insert into t (id,a) values (596,92);
+insert into t (id,a) values (596,93);
+insert into t (id,a) values (596,94);
+insert into t (id,a) values (596,95);
+insert into t (id,a) values (596,96);
+insert into t (id,a) values (596,97);
+insert into t (id,a) values (596,98);
+insert into t (id,a) values (596,99);
+insert into t (id,a) values (597,0);
+insert into t (id,a) values (597,1);
+insert into t (id,a) values (597,2);
+insert into t (id,a) values (597,3);
+insert into t (id,a) values (597,4);
+insert into t (id,a) values (597,5);
+insert into t (id,a) values (597,6);
+insert into t (id,a) values (597,7);
+insert into t (id,a) values (597,8);
+insert into t (id,a) values (597,9);
+insert into t (id,a) values (597,10);
+insert into t (id,a) values (597,11);
+insert into t (id,a) values (597,12);
+insert into t (id,a) values (597,13);
+insert into t (id,a) values (597,14);
+insert into t (id,a) values (597,15);
+insert into t (id,a) values (597,16);
+insert into t (id,a) values (597,17);
+insert into t (id,a) values (597,18);
+insert into t (id,a) values (597,19);
+insert into t (id,a) values (597,20);
+insert into t (id,a) values (597,21);
+insert into t (id,a) values (597,22);
+insert into t (id,a) values (597,23);
+insert into t (id,a) values (597,24);
+insert into t (id,a) values (597,25);
+insert into t (id,a) values (597,26);
+insert into t (id,a) values (597,27);
+insert into t (id,a) values (597,28);
+insert into t (id,a) values (597,29);
+insert into t (id,a) values (597,30);
+insert into t (id,a) values (597,31);
+insert into t (id,a) values (597,32);
+insert into t (id,a) values (597,33);
+insert into t (id,a) values (597,34);
+insert into t (id,a) values (597,35);
+insert into t (id,a) values (597,36);
+insert into t (id,a) values (597,37);
+insert into t (id,a) values (597,38);
+insert into t (id,a) values (597,39);
+insert into t (id,a) values (597,40);
+insert into t (id,a) values (597,41);
+insert into t (id,a) values (597,42);
+insert into t (id,a) values (597,43);
+insert into t (id,a) values (597,44);
+insert into t (id,a) values (597,45);
+insert into t (id,a) values (597,46);
+insert into t (id,a) values (597,47);
+insert into t (id,a) values (597,48);
+insert into t (id,a) values (597,49);
+insert into t (id,a) values (597,50);
+insert into t (id,a) values (597,51);
+insert into t (id,a) values (597,52);
+insert into t (id,a) values (597,53);
+insert into t (id,a) values (597,54);
+insert into t (id,a) values (597,55);
+insert into t (id,a) values (597,56);
+insert into t (id,a) values (597,57);
+insert into t (id,a) values (597,58);
+insert into t (id,a) values (597,59);
+insert into t (id,a) values (597,60);
+insert into t (id,a) values (597,61);
+insert into t (id,a) values (597,62);
+insert into t (id,a) values (597,63);
+insert into t (id,a) values (597,64);
+insert into t (id,a) values (597,65);
+insert into t (id,a) values (597,66);
+insert into t (id,a) values (597,67);
+insert into t (id,a) values (597,68);
+insert into t (id,a) values (597,69);
+insert into t (id,a) values (597,70);
+insert into t (id,a) values (597,71);
+insert into t (id,a) values (597,72);
+insert into t (id,a) values (597,73);
+insert into t (id,a) values (597,74);
+insert into t (id,a) values (597,75);
+insert into t (id,a) values (597,76);
+insert into t (id,a) values (597,77);
+insert into t (id,a) values (597,78);
+insert into t (id,a) values (597,79);
+insert into t (id,a) values (597,80);
+insert into t (id,a) values (597,81);
+insert into t (id,a) values (597,82);
+insert into t (id,a) values (597,83);
+insert into t (id,a) values (597,84);
+insert into t (id,a) values (597,85);
+insert into t (id,a) values (597,86);
+insert into t (id,a) values (597,87);
+insert into t (id,a) values (597,88);
+insert into t (id,a) values (597,89);
+insert into t (id,a) values (597,90);
+insert into t (id,a) values (597,91);
+insert into t (id,a) values (597,92);
+insert into t (id,a) values (597,93);
+insert into t (id,a) values (597,94);
+insert into t (id,a) values (597,95);
+insert into t (id,a) values (597,96);
+insert into t (id,a) values (597,97);
+insert into t (id,a) values (597,98);
+insert into t (id,a) values (597,99);
+insert into t (id,a) values (598,0);
+insert into t (id,a) values (598,1);
+insert into t (id,a) values (598,2);
+insert into t (id,a) values (598,3);
+insert into t (id,a) values (598,4);
+insert into t (id,a) values (598,5);
+insert into t (id,a) values (598,6);
+insert into t (id,a) values (598,7);
+insert into t (id,a) values (598,8);
+insert into t (id,a) values (598,9);
+insert into t (id,a) values (598,10);
+insert into t (id,a) values (598,11);
+insert into t (id,a) values (598,12);
+insert into t (id,a) values (598,13);
+insert into t (id,a) values (598,14);
+insert into t (id,a) values (598,15);
+insert into t (id,a) values (598,16);
+insert into t (id,a) values (598,17);
+insert into t (id,a) values (598,18);
+insert into t (id,a) values (598,19);
+insert into t (id,a) values (598,20);
+insert into t (id,a) values (598,21);
+insert into t (id,a) values (598,22);
+insert into t (id,a) values (598,23);
+insert into t (id,a) values (598,24);
+insert into t (id,a) values (598,25);
+insert into t (id,a) values (598,26);
+insert into t (id,a) values (598,27);
+insert into t (id,a) values (598,28);
+insert into t (id,a) values (598,29);
+insert into t (id,a) values (598,30);
+insert into t (id,a) values (598,31);
+insert into t (id,a) values (598,32);
+insert into t (id,a) values (598,33);
+insert into t (id,a) values (598,34);
+insert into t (id,a) values (598,35);
+insert into t (id,a) values (598,36);
+insert into t (id,a) values (598,37);
+insert into t (id,a) values (598,38);
+insert into t (id,a) values (598,39);
+insert into t (id,a) values (598,40);
+insert into t (id,a) values (598,41);
+insert into t (id,a) values (598,42);
+insert into t (id,a) values (598,43);
+insert into t (id,a) values (598,44);
+insert into t (id,a) values (598,45);
+insert into t (id,a) values (598,46);
+insert into t (id,a) values (598,47);
+insert into t (id,a) values (598,48);
+insert into t (id,a) values (598,49);
+insert into t (id,a) values (598,50);
+insert into t (id,a) values (598,51);
+insert into t (id,a) values (598,52);
+insert into t (id,a) values (598,53);
+insert into t (id,a) values (598,54);
+insert into t (id,a) values (598,55);
+insert into t (id,a) values (598,56);
+insert into t (id,a) values (598,57);
+insert into t (id,a) values (598,58);
+insert into t (id,a) values (598,59);
+insert into t (id,a) values (598,60);
+insert into t (id,a) values (598,61);
+insert into t (id,a) values (598,62);
+insert into t (id,a) values (598,63);
+insert into t (id,a) values (598,64);
+insert into t (id,a) values (598,65);
+insert into t (id,a) values (598,66);
+insert into t (id,a) values (598,67);
+insert into t (id,a) values (598,68);
+insert into t (id,a) values (598,69);
+insert into t (id,a) values (598,70);
+insert into t (id,a) values (598,71);
+insert into t (id,a) values (598,72);
+insert into t (id,a) values (598,73);
+insert into t (id,a) values (598,74);
+insert into t (id,a) values (598,75);
+insert into t (id,a) values (598,76);
+insert into t (id,a) values (598,77);
+insert into t (id,a) values (598,78);
+insert into t (id,a) values (598,79);
+insert into t (id,a) values (598,80);
+insert into t (id,a) values (598,81);
+insert into t (id,a) values (598,82);
+insert into t (id,a) values (598,83);
+insert into t (id,a) values (598,84);
+insert into t (id,a) values (598,85);
+insert into t (id,a) values (598,86);
+insert into t (id,a) values (598,87);
+insert into t (id,a) values (598,88);
+insert into t (id,a) values (598,89);
+insert into t (id,a) values (598,90);
+insert into t (id,a) values (598,91);
+insert into t (id,a) values (598,92);
+insert into t (id,a) values (598,93);
+insert into t (id,a) values (598,94);
+insert into t (id,a) values (598,95);
+insert into t (id,a) values (598,96);
+insert into t (id,a) values (598,97);
+insert into t (id,a) values (598,98);
+insert into t (id,a) values (598,99);
+insert into t (id,a) values (599,0);
+insert into t (id,a) values (599,1);
+insert into t (id,a) values (599,2);
+insert into t (id,a) values (599,3);
+insert into t (id,a) values (599,4);
+insert into t (id,a) values (599,5);
+insert into t (id,a) values (599,6);
+insert into t (id,a) values (599,7);
+insert into t (id,a) values (599,8);
+insert into t (id,a) values (599,9);
+insert into t (id,a) values (599,10);
+insert into t (id,a) values (599,11);
+insert into t (id,a) values (599,12);
+insert into t (id,a) values (599,13);
+insert into t (id,a) values (599,14);
+insert into t (id,a) values (599,15);
+insert into t (id,a) values (599,16);
+insert into t (id,a) values (599,17);
+insert into t (id,a) values (599,18);
+insert into t (id,a) values (599,19);
+insert into t (id,a) values (599,20);
+insert into t (id,a) values (599,21);
+insert into t (id,a) values (599,22);
+insert into t (id,a) values (599,23);
+insert into t (id,a) values (599,24);
+insert into t (id,a) values (599,25);
+insert into t (id,a) values (599,26);
+insert into t (id,a) values (599,27);
+insert into t (id,a) values (599,28);
+insert into t (id,a) values (599,29);
+insert into t (id,a) values (599,30);
+insert into t (id,a) values (599,31);
+insert into t (id,a) values (599,32);
+insert into t (id,a) values (599,33);
+insert into t (id,a) values (599,34);
+insert into t (id,a) values (599,35);
+insert into t (id,a) values (599,36);
+insert into t (id,a) values (599,37);
+insert into t (id,a) values (599,38);
+insert into t (id,a) values (599,39);
+insert into t (id,a) values (599,40);
+insert into t (id,a) values (599,41);
+insert into t (id,a) values (599,42);
+insert into t (id,a) values (599,43);
+insert into t (id,a) values (599,44);
+insert into t (id,a) values (599,45);
+insert into t (id,a) values (599,46);
+insert into t (id,a) values (599,47);
+insert into t (id,a) values (599,48);
+insert into t (id,a) values (599,49);
+insert into t (id,a) values (599,50);
+insert into t (id,a) values (599,51);
+insert into t (id,a) values (599,52);
+insert into t (id,a) values (599,53);
+insert into t (id,a) values (599,54);
+insert into t (id,a) values (599,55);
+insert into t (id,a) values (599,56);
+insert into t (id,a) values (599,57);
+insert into t (id,a) values (599,58);
+insert into t (id,a) values (599,59);
+insert into t (id,a) values (599,60);
+insert into t (id,a) values (599,61);
+insert into t (id,a) values (599,62);
+insert into t (id,a) values (599,63);
+insert into t (id,a) values (599,64);
+insert into t (id,a) values (599,65);
+insert into t (id,a) values (599,66);
+insert into t (id,a) values (599,67);
+insert into t (id,a) values (599,68);
+insert into t (id,a) values (599,69);
+insert into t (id,a) values (599,70);
+insert into t (id,a) values (599,71);
+insert into t (id,a) values (599,72);
+insert into t (id,a) values (599,73);
+insert into t (id,a) values (599,74);
+insert into t (id,a) values (599,75);
+insert into t (id,a) values (599,76);
+insert into t (id,a) values (599,77);
+insert into t (id,a) values (599,78);
+insert into t (id,a) values (599,79);
+insert into t (id,a) values (599,80);
+insert into t (id,a) values (599,81);
+insert into t (id,a) values (599,82);
+insert into t (id,a) values (599,83);
+insert into t (id,a) values (599,84);
+insert into t (id,a) values (599,85);
+insert into t (id,a) values (599,86);
+insert into t (id,a) values (599,87);
+insert into t (id,a) values (599,88);
+insert into t (id,a) values (599,89);
+insert into t (id,a) values (599,90);
+insert into t (id,a) values (599,91);
+insert into t (id,a) values (599,92);
+insert into t (id,a) values (599,93);
+insert into t (id,a) values (599,94);
+insert into t (id,a) values (599,95);
+insert into t (id,a) values (599,96);
+insert into t (id,a) values (599,97);
+insert into t (id,a) values (599,98);
+insert into t (id,a) values (599,99);
+insert into t (id,a) values (600,0);
+insert into t (id,a) values (600,1);
+insert into t (id,a) values (600,2);
+insert into t (id,a) values (600,3);
+insert into t (id,a) values (600,4);
+insert into t (id,a) values (600,5);
+insert into t (id,a) values (600,6);
+insert into t (id,a) values (600,7);
+insert into t (id,a) values (600,8);
+insert into t (id,a) values (600,9);
+insert into t (id,a) values (600,10);
+insert into t (id,a) values (600,11);
+insert into t (id,a) values (600,12);
+insert into t (id,a) values (600,13);
+insert into t (id,a) values (600,14);
+insert into t (id,a) values (600,15);
+insert into t (id,a) values (600,16);
+insert into t (id,a) values (600,17);
+insert into t (id,a) values (600,18);
+insert into t (id,a) values (600,19);
+insert into t (id,a) values (600,20);
+insert into t (id,a) values (600,21);
+insert into t (id,a) values (600,22);
+insert into t (id,a) values (600,23);
+insert into t (id,a) values (600,24);
+insert into t (id,a) values (600,25);
+insert into t (id,a) values (600,26);
+insert into t (id,a) values (600,27);
+insert into t (id,a) values (600,28);
+insert into t (id,a) values (600,29);
+insert into t (id,a) values (600,30);
+insert into t (id,a) values (600,31);
+insert into t (id,a) values (600,32);
+insert into t (id,a) values (600,33);
+insert into t (id,a) values (600,34);
+insert into t (id,a) values (600,35);
+insert into t (id,a) values (600,36);
+insert into t (id,a) values (600,37);
+insert into t (id,a) values (600,38);
+insert into t (id,a) values (600,39);
+insert into t (id,a) values (600,40);
+insert into t (id,a) values (600,41);
+insert into t (id,a) values (600,42);
+insert into t (id,a) values (600,43);
+insert into t (id,a) values (600,44);
+insert into t (id,a) values (600,45);
+insert into t (id,a) values (600,46);
+insert into t (id,a) values (600,47);
+insert into t (id,a) values (600,48);
+insert into t (id,a) values (600,49);
+insert into t (id,a) values (600,50);
+insert into t (id,a) values (600,51);
+insert into t (id,a) values (600,52);
+insert into t (id,a) values (600,53);
+insert into t (id,a) values (600,54);
+insert into t (id,a) values (600,55);
+insert into t (id,a) values (600,56);
+insert into t (id,a) values (600,57);
+insert into t (id,a) values (600,58);
+insert into t (id,a) values (600,59);
+insert into t (id,a) values (600,60);
+insert into t (id,a) values (600,61);
+insert into t (id,a) values (600,62);
+insert into t (id,a) values (600,63);
+insert into t (id,a) values (600,64);
+insert into t (id,a) values (600,65);
+insert into t (id,a) values (600,66);
+insert into t (id,a) values (600,67);
+insert into t (id,a) values (600,68);
+insert into t (id,a) values (600,69);
+insert into t (id,a) values (600,70);
+insert into t (id,a) values (600,71);
+insert into t (id,a) values (600,72);
+insert into t (id,a) values (600,73);
+insert into t (id,a) values (600,74);
+insert into t (id,a) values (600,75);
+insert into t (id,a) values (600,76);
+insert into t (id,a) values (600,77);
+insert into t (id,a) values (600,78);
+insert into t (id,a) values (600,79);
+insert into t (id,a) values (600,80);
+insert into t (id,a) values (600,81);
+insert into t (id,a) values (600,82);
+insert into t (id,a) values (600,83);
+insert into t (id,a) values (600,84);
+insert into t (id,a) values (600,85);
+insert into t (id,a) values (600,86);
+insert into t (id,a) values (600,87);
+insert into t (id,a) values (600,88);
+insert into t (id,a) values (600,89);
+insert into t (id,a) values (600,90);
+insert into t (id,a) values (600,91);
+insert into t (id,a) values (600,92);
+insert into t (id,a) values (600,93);
+insert into t (id,a) values (600,94);
+insert into t (id,a) values (600,95);
+insert into t (id,a) values (600,96);
+insert into t (id,a) values (600,97);
+insert into t (id,a) values (600,98);
+insert into t (id,a) values (600,99);
+insert into t (id,a) values (601,0);
+insert into t (id,a) values (601,1);
+insert into t (id,a) values (601,2);
+insert into t (id,a) values (601,3);
+insert into t (id,a) values (601,4);
+insert into t (id,a) values (601,5);
+insert into t (id,a) values (601,6);
+insert into t (id,a) values (601,7);
+insert into t (id,a) values (601,8);
+insert into t (id,a) values (601,9);
+insert into t (id,a) values (601,10);
+insert into t (id,a) values (601,11);
+insert into t (id,a) values (601,12);
+insert into t (id,a) values (601,13);
+insert into t (id,a) values (601,14);
+insert into t (id,a) values (601,15);
+insert into t (id,a) values (601,16);
+insert into t (id,a) values (601,17);
+insert into t (id,a) values (601,18);
+insert into t (id,a) values (601,19);
+insert into t (id,a) values (601,20);
+insert into t (id,a) values (601,21);
+insert into t (id,a) values (601,22);
+insert into t (id,a) values (601,23);
+insert into t (id,a) values (601,24);
+insert into t (id,a) values (601,25);
+insert into t (id,a) values (601,26);
+insert into t (id,a) values (601,27);
+insert into t (id,a) values (601,28);
+insert into t (id,a) values (601,29);
+insert into t (id,a) values (601,30);
+insert into t (id,a) values (601,31);
+insert into t (id,a) values (601,32);
+insert into t (id,a) values (601,33);
+insert into t (id,a) values (601,34);
+insert into t (id,a) values (601,35);
+insert into t (id,a) values (601,36);
+insert into t (id,a) values (601,37);
+insert into t (id,a) values (601,38);
+insert into t (id,a) values (601,39);
+insert into t (id,a) values (601,40);
+insert into t (id,a) values (601,41);
+insert into t (id,a) values (601,42);
+insert into t (id,a) values (601,43);
+insert into t (id,a) values (601,44);
+insert into t (id,a) values (601,45);
+insert into t (id,a) values (601,46);
+insert into t (id,a) values (601,47);
+insert into t (id,a) values (601,48);
+insert into t (id,a) values (601,49);
+insert into t (id,a) values (601,50);
+insert into t (id,a) values (601,51);
+insert into t (id,a) values (601,52);
+insert into t (id,a) values (601,53);
+insert into t (id,a) values (601,54);
+insert into t (id,a) values (601,55);
+insert into t (id,a) values (601,56);
+insert into t (id,a) values (601,57);
+insert into t (id,a) values (601,58);
+insert into t (id,a) values (601,59);
+insert into t (id,a) values (601,60);
+insert into t (id,a) values (601,61);
+insert into t (id,a) values (601,62);
+insert into t (id,a) values (601,63);
+insert into t (id,a) values (601,64);
+insert into t (id,a) values (601,65);
+insert into t (id,a) values (601,66);
+insert into t (id,a) values (601,67);
+insert into t (id,a) values (601,68);
+insert into t (id,a) values (601,69);
+insert into t (id,a) values (601,70);
+insert into t (id,a) values (601,71);
+insert into t (id,a) values (601,72);
+insert into t (id,a) values (601,73);
+insert into t (id,a) values (601,74);
+insert into t (id,a) values (601,75);
+insert into t (id,a) values (601,76);
+insert into t (id,a) values (601,77);
+insert into t (id,a) values (601,78);
+insert into t (id,a) values (601,79);
+insert into t (id,a) values (601,80);
+insert into t (id,a) values (601,81);
+insert into t (id,a) values (601,82);
+insert into t (id,a) values (601,83);
+insert into t (id,a) values (601,84);
+insert into t (id,a) values (601,85);
+insert into t (id,a) values (601,86);
+insert into t (id,a) values (601,87);
+insert into t (id,a) values (601,88);
+insert into t (id,a) values (601,89);
+insert into t (id,a) values (601,90);
+insert into t (id,a) values (601,91);
+insert into t (id,a) values (601,92);
+insert into t (id,a) values (601,93);
+insert into t (id,a) values (601,94);
+insert into t (id,a) values (601,95);
+insert into t (id,a) values (601,96);
+insert into t (id,a) values (601,97);
+insert into t (id,a) values (601,98);
+insert into t (id,a) values (601,99);
+insert into t (id,a) values (602,0);
+insert into t (id,a) values (602,1);
+insert into t (id,a) values (602,2);
+insert into t (id,a) values (602,3);
+insert into t (id,a) values (602,4);
+insert into t (id,a) values (602,5);
+insert into t (id,a) values (602,6);
+insert into t (id,a) values (602,7);
+insert into t (id,a) values (602,8);
+insert into t (id,a) values (602,9);
+insert into t (id,a) values (602,10);
+insert into t (id,a) values (602,11);
+insert into t (id,a) values (602,12);
+insert into t (id,a) values (602,13);
+insert into t (id,a) values (602,14);
+insert into t (id,a) values (602,15);
+insert into t (id,a) values (602,16);
+insert into t (id,a) values (602,17);
+insert into t (id,a) values (602,18);
+insert into t (id,a) values (602,19);
+insert into t (id,a) values (602,20);
+insert into t (id,a) values (602,21);
+insert into t (id,a) values (602,22);
+insert into t (id,a) values (602,23);
+insert into t (id,a) values (602,24);
+insert into t (id,a) values (602,25);
+insert into t (id,a) values (602,26);
+insert into t (id,a) values (602,27);
+insert into t (id,a) values (602,28);
+insert into t (id,a) values (602,29);
+insert into t (id,a) values (602,30);
+insert into t (id,a) values (602,31);
+insert into t (id,a) values (602,32);
+insert into t (id,a) values (602,33);
+insert into t (id,a) values (602,34);
+insert into t (id,a) values (602,35);
+insert into t (id,a) values (602,36);
+insert into t (id,a) values (602,37);
+insert into t (id,a) values (602,38);
+insert into t (id,a) values (602,39);
+insert into t (id,a) values (602,40);
+insert into t (id,a) values (602,41);
+insert into t (id,a) values (602,42);
+insert into t (id,a) values (602,43);
+insert into t (id,a) values (602,44);
+insert into t (id,a) values (602,45);
+insert into t (id,a) values (602,46);
+insert into t (id,a) values (602,47);
+insert into t (id,a) values (602,48);
+insert into t (id,a) values (602,49);
+insert into t (id,a) values (602,50);
+insert into t (id,a) values (602,51);
+insert into t (id,a) values (602,52);
+insert into t (id,a) values (602,53);
+insert into t (id,a) values (602,54);
+insert into t (id,a) values (602,55);
+insert into t (id,a) values (602,56);
+insert into t (id,a) values (602,57);
+insert into t (id,a) values (602,58);
+insert into t (id,a) values (602,59);
+insert into t (id,a) values (602,60);
+insert into t (id,a) values (602,61);
+insert into t (id,a) values (602,62);
+insert into t (id,a) values (602,63);
+insert into t (id,a) values (602,64);
+insert into t (id,a) values (602,65);
+insert into t (id,a) values (602,66);
+insert into t (id,a) values (602,67);
+insert into t (id,a) values (602,68);
+insert into t (id,a) values (602,69);
+insert into t (id,a) values (602,70);
+insert into t (id,a) values (602,71);
+insert into t (id,a) values (602,72);
+insert into t (id,a) values (602,73);
+insert into t (id,a) values (602,74);
+insert into t (id,a) values (602,75);
+insert into t (id,a) values (602,76);
+insert into t (id,a) values (602,77);
+insert into t (id,a) values (602,78);
+insert into t (id,a) values (602,79);
+insert into t (id,a) values (602,80);
+insert into t (id,a) values (602,81);
+insert into t (id,a) values (602,82);
+insert into t (id,a) values (602,83);
+insert into t (id,a) values (602,84);
+insert into t (id,a) values (602,85);
+insert into t (id,a) values (602,86);
+insert into t (id,a) values (602,87);
+insert into t (id,a) values (602,88);
+insert into t (id,a) values (602,89);
+insert into t (id,a) values (602,90);
+insert into t (id,a) values (602,91);
+insert into t (id,a) values (602,92);
+insert into t (id,a) values (602,93);
+insert into t (id,a) values (602,94);
+insert into t (id,a) values (602,95);
+insert into t (id,a) values (602,96);
+insert into t (id,a) values (602,97);
+insert into t (id,a) values (602,98);
+insert into t (id,a) values (602,99);
+insert into t (id,a) values (603,0);
+insert into t (id,a) values (603,1);
+insert into t (id,a) values (603,2);
+insert into t (id,a) values (603,3);
+insert into t (id,a) values (603,4);
+insert into t (id,a) values (603,5);
+insert into t (id,a) values (603,6);
+insert into t (id,a) values (603,7);
+insert into t (id,a) values (603,8);
+insert into t (id,a) values (603,9);
+insert into t (id,a) values (603,10);
+insert into t (id,a) values (603,11);
+insert into t (id,a) values (603,12);
+insert into t (id,a) values (603,13);
+insert into t (id,a) values (603,14);
+insert into t (id,a) values (603,15);
+insert into t (id,a) values (603,16);
+insert into t (id,a) values (603,17);
+insert into t (id,a) values (603,18);
+insert into t (id,a) values (603,19);
+insert into t (id,a) values (603,20);
+insert into t (id,a) values (603,21);
+insert into t (id,a) values (603,22);
+insert into t (id,a) values (603,23);
+insert into t (id,a) values (603,24);
+insert into t (id,a) values (603,25);
+insert into t (id,a) values (603,26);
+insert into t (id,a) values (603,27);
+insert into t (id,a) values (603,28);
+insert into t (id,a) values (603,29);
+insert into t (id,a) values (603,30);
+insert into t (id,a) values (603,31);
+insert into t (id,a) values (603,32);
+insert into t (id,a) values (603,33);
+insert into t (id,a) values (603,34);
+insert into t (id,a) values (603,35);
+insert into t (id,a) values (603,36);
+insert into t (id,a) values (603,37);
+insert into t (id,a) values (603,38);
+insert into t (id,a) values (603,39);
+insert into t (id,a) values (603,40);
+insert into t (id,a) values (603,41);
+insert into t (id,a) values (603,42);
+insert into t (id,a) values (603,43);
+insert into t (id,a) values (603,44);
+insert into t (id,a) values (603,45);
+insert into t (id,a) values (603,46);
+insert into t (id,a) values (603,47);
+insert into t (id,a) values (603,48);
+insert into t (id,a) values (603,49);
+insert into t (id,a) values (603,50);
+insert into t (id,a) values (603,51);
+insert into t (id,a) values (603,52);
+insert into t (id,a) values (603,53);
+insert into t (id,a) values (603,54);
+insert into t (id,a) values (603,55);
+insert into t (id,a) values (603,56);
+insert into t (id,a) values (603,57);
+insert into t (id,a) values (603,58);
+insert into t (id,a) values (603,59);
+insert into t (id,a) values (603,60);
+insert into t (id,a) values (603,61);
+insert into t (id,a) values (603,62);
+insert into t (id,a) values (603,63);
+insert into t (id,a) values (603,64);
+insert into t (id,a) values (603,65);
+insert into t (id,a) values (603,66);
+insert into t (id,a) values (603,67);
+insert into t (id,a) values (603,68);
+insert into t (id,a) values (603,69);
+insert into t (id,a) values (603,70);
+insert into t (id,a) values (603,71);
+insert into t (id,a) values (603,72);
+insert into t (id,a) values (603,73);
+insert into t (id,a) values (603,74);
+insert into t (id,a) values (603,75);
+insert into t (id,a) values (603,76);
+insert into t (id,a) values (603,77);
+insert into t (id,a) values (603,78);
+insert into t (id,a) values (603,79);
+insert into t (id,a) values (603,80);
+insert into t (id,a) values (603,81);
+insert into t (id,a) values (603,82);
+insert into t (id,a) values (603,83);
+insert into t (id,a) values (603,84);
+insert into t (id,a) values (603,85);
+insert into t (id,a) values (603,86);
+insert into t (id,a) values (603,87);
+insert into t (id,a) values (603,88);
+insert into t (id,a) values (603,89);
+insert into t (id,a) values (603,90);
+insert into t (id,a) values (603,91);
+insert into t (id,a) values (603,92);
+insert into t (id,a) values (603,93);
+insert into t (id,a) values (603,94);
+insert into t (id,a) values (603,95);
+insert into t (id,a) values (603,96);
+insert into t (id,a) values (603,97);
+insert into t (id,a) values (603,98);
+insert into t (id,a) values (603,99);
+insert into t (id,a) values (604,0);
+insert into t (id,a) values (604,1);
+insert into t (id,a) values (604,2);
+insert into t (id,a) values (604,3);
+insert into t (id,a) values (604,4);
+insert into t (id,a) values (604,5);
+insert into t (id,a) values (604,6);
+insert into t (id,a) values (604,7);
+insert into t (id,a) values (604,8);
+insert into t (id,a) values (604,9);
+insert into t (id,a) values (604,10);
+insert into t (id,a) values (604,11);
+insert into t (id,a) values (604,12);
+insert into t (id,a) values (604,13);
+insert into t (id,a) values (604,14);
+insert into t (id,a) values (604,15);
+insert into t (id,a) values (604,16);
+insert into t (id,a) values (604,17);
+insert into t (id,a) values (604,18);
+insert into t (id,a) values (604,19);
+insert into t (id,a) values (604,20);
+insert into t (id,a) values (604,21);
+insert into t (id,a) values (604,22);
+insert into t (id,a) values (604,23);
+insert into t (id,a) values (604,24);
+insert into t (id,a) values (604,25);
+insert into t (id,a) values (604,26);
+insert into t (id,a) values (604,27);
+insert into t (id,a) values (604,28);
+insert into t (id,a) values (604,29);
+insert into t (id,a) values (604,30);
+insert into t (id,a) values (604,31);
+insert into t (id,a) values (604,32);
+insert into t (id,a) values (604,33);
+insert into t (id,a) values (604,34);
+insert into t (id,a) values (604,35);
+insert into t (id,a) values (604,36);
+insert into t (id,a) values (604,37);
+insert into t (id,a) values (604,38);
+insert into t (id,a) values (604,39);
+insert into t (id,a) values (604,40);
+insert into t (id,a) values (604,41);
+insert into t (id,a) values (604,42);
+insert into t (id,a) values (604,43);
+insert into t (id,a) values (604,44);
+insert into t (id,a) values (604,45);
+insert into t (id,a) values (604,46);
+insert into t (id,a) values (604,47);
+insert into t (id,a) values (604,48);
+insert into t (id,a) values (604,49);
+insert into t (id,a) values (604,50);
+insert into t (id,a) values (604,51);
+insert into t (id,a) values (604,52);
+insert into t (id,a) values (604,53);
+insert into t (id,a) values (604,54);
+insert into t (id,a) values (604,55);
+insert into t (id,a) values (604,56);
+insert into t (id,a) values (604,57);
+insert into t (id,a) values (604,58);
+insert into t (id,a) values (604,59);
+insert into t (id,a) values (604,60);
+insert into t (id,a) values (604,61);
+insert into t (id,a) values (604,62);
+insert into t (id,a) values (604,63);
+insert into t (id,a) values (604,64);
+insert into t (id,a) values (604,65);
+insert into t (id,a) values (604,66);
+insert into t (id,a) values (604,67);
+insert into t (id,a) values (604,68);
+insert into t (id,a) values (604,69);
+insert into t (id,a) values (604,70);
+insert into t (id,a) values (604,71);
+insert into t (id,a) values (604,72);
+insert into t (id,a) values (604,73);
+insert into t (id,a) values (604,74);
+insert into t (id,a) values (604,75);
+insert into t (id,a) values (604,76);
+insert into t (id,a) values (604,77);
+insert into t (id,a) values (604,78);
+insert into t (id,a) values (604,79);
+insert into t (id,a) values (604,80);
+insert into t (id,a) values (604,81);
+insert into t (id,a) values (604,82);
+insert into t (id,a) values (604,83);
+insert into t (id,a) values (604,84);
+insert into t (id,a) values (604,85);
+insert into t (id,a) values (604,86);
+insert into t (id,a) values (604,87);
+insert into t (id,a) values (604,88);
+insert into t (id,a) values (604,89);
+insert into t (id,a) values (604,90);
+insert into t (id,a) values (604,91);
+insert into t (id,a) values (604,92);
+insert into t (id,a) values (604,93);
+insert into t (id,a) values (604,94);
+insert into t (id,a) values (604,95);
+insert into t (id,a) values (604,96);
+insert into t (id,a) values (604,97);
+insert into t (id,a) values (604,98);
+insert into t (id,a) values (604,99);
+insert into t (id,a) values (605,0);
+insert into t (id,a) values (605,1);
+insert into t (id,a) values (605,2);
+insert into t (id,a) values (605,3);
+insert into t (id,a) values (605,4);
+insert into t (id,a) values (605,5);
+insert into t (id,a) values (605,6);
+insert into t (id,a) values (605,7);
+insert into t (id,a) values (605,8);
+insert into t (id,a) values (605,9);
+insert into t (id,a) values (605,10);
+insert into t (id,a) values (605,11);
+insert into t (id,a) values (605,12);
+insert into t (id,a) values (605,13);
+insert into t (id,a) values (605,14);
+insert into t (id,a) values (605,15);
+insert into t (id,a) values (605,16);
+insert into t (id,a) values (605,17);
+insert into t (id,a) values (605,18);
+insert into t (id,a) values (605,19);
+insert into t (id,a) values (605,20);
+insert into t (id,a) values (605,21);
+insert into t (id,a) values (605,22);
+insert into t (id,a) values (605,23);
+insert into t (id,a) values (605,24);
+insert into t (id,a) values (605,25);
+insert into t (id,a) values (605,26);
+insert into t (id,a) values (605,27);
+insert into t (id,a) values (605,28);
+insert into t (id,a) values (605,29);
+insert into t (id,a) values (605,30);
+insert into t (id,a) values (605,31);
+insert into t (id,a) values (605,32);
+insert into t (id,a) values (605,33);
+insert into t (id,a) values (605,34);
+insert into t (id,a) values (605,35);
+insert into t (id,a) values (605,36);
+insert into t (id,a) values (605,37);
+insert into t (id,a) values (605,38);
+insert into t (id,a) values (605,39);
+insert into t (id,a) values (605,40);
+insert into t (id,a) values (605,41);
+insert into t (id,a) values (605,42);
+insert into t (id,a) values (605,43);
+insert into t (id,a) values (605,44);
+insert into t (id,a) values (605,45);
+insert into t (id,a) values (605,46);
+insert into t (id,a) values (605,47);
+insert into t (id,a) values (605,48);
+insert into t (id,a) values (605,49);
+insert into t (id,a) values (605,50);
+insert into t (id,a) values (605,51);
+insert into t (id,a) values (605,52);
+insert into t (id,a) values (605,53);
+insert into t (id,a) values (605,54);
+insert into t (id,a) values (605,55);
+insert into t (id,a) values (605,56);
+insert into t (id,a) values (605,57);
+insert into t (id,a) values (605,58);
+insert into t (id,a) values (605,59);
+insert into t (id,a) values (605,60);
+insert into t (id,a) values (605,61);
+insert into t (id,a) values (605,62);
+insert into t (id,a) values (605,63);
+insert into t (id,a) values (605,64);
+insert into t (id,a) values (605,65);
+insert into t (id,a) values (605,66);
+insert into t (id,a) values (605,67);
+insert into t (id,a) values (605,68);
+insert into t (id,a) values (605,69);
+insert into t (id,a) values (605,70);
+insert into t (id,a) values (605,71);
+insert into t (id,a) values (605,72);
+insert into t (id,a) values (605,73);
+insert into t (id,a) values (605,74);
+insert into t (id,a) values (605,75);
+insert into t (id,a) values (605,76);
+insert into t (id,a) values (605,77);
+insert into t (id,a) values (605,78);
+insert into t (id,a) values (605,79);
+insert into t (id,a) values (605,80);
+insert into t (id,a) values (605,81);
+insert into t (id,a) values (605,82);
+insert into t (id,a) values (605,83);
+insert into t (id,a) values (605,84);
+insert into t (id,a) values (605,85);
+insert into t (id,a) values (605,86);
+insert into t (id,a) values (605,87);
+insert into t (id,a) values (605,88);
+insert into t (id,a) values (605,89);
+insert into t (id,a) values (605,90);
+insert into t (id,a) values (605,91);
+insert into t (id,a) values (605,92);
+insert into t (id,a) values (605,93);
+insert into t (id,a) values (605,94);
+insert into t (id,a) values (605,95);
+insert into t (id,a) values (605,96);
+insert into t (id,a) values (605,97);
+insert into t (id,a) values (605,98);
+insert into t (id,a) values (605,99);
+insert into t (id,a) values (606,0);
+insert into t (id,a) values (606,1);
+insert into t (id,a) values (606,2);
+insert into t (id,a) values (606,3);
+insert into t (id,a) values (606,4);
+insert into t (id,a) values (606,5);
+insert into t (id,a) values (606,6);
+insert into t (id,a) values (606,7);
+insert into t (id,a) values (606,8);
+insert into t (id,a) values (606,9);
+insert into t (id,a) values (606,10);
+insert into t (id,a) values (606,11);
+insert into t (id,a) values (606,12);
+insert into t (id,a) values (606,13);
+insert into t (id,a) values (606,14);
+insert into t (id,a) values (606,15);
+insert into t (id,a) values (606,16);
+insert into t (id,a) values (606,17);
+insert into t (id,a) values (606,18);
+insert into t (id,a) values (606,19);
+insert into t (id,a) values (606,20);
+insert into t (id,a) values (606,21);
+insert into t (id,a) values (606,22);
+insert into t (id,a) values (606,23);
+insert into t (id,a) values (606,24);
+insert into t (id,a) values (606,25);
+insert into t (id,a) values (606,26);
+insert into t (id,a) values (606,27);
+insert into t (id,a) values (606,28);
+insert into t (id,a) values (606,29);
+insert into t (id,a) values (606,30);
+insert into t (id,a) values (606,31);
+insert into t (id,a) values (606,32);
+insert into t (id,a) values (606,33);
+insert into t (id,a) values (606,34);
+insert into t (id,a) values (606,35);
+insert into t (id,a) values (606,36);
+insert into t (id,a) values (606,37);
+insert into t (id,a) values (606,38);
+insert into t (id,a) values (606,39);
+insert into t (id,a) values (606,40);
+insert into t (id,a) values (606,41);
+insert into t (id,a) values (606,42);
+insert into t (id,a) values (606,43);
+insert into t (id,a) values (606,44);
+insert into t (id,a) values (606,45);
+insert into t (id,a) values (606,46);
+insert into t (id,a) values (606,47);
+insert into t (id,a) values (606,48);
+insert into t (id,a) values (606,49);
+insert into t (id,a) values (606,50);
+insert into t (id,a) values (606,51);
+insert into t (id,a) values (606,52);
+insert into t (id,a) values (606,53);
+insert into t (id,a) values (606,54);
+insert into t (id,a) values (606,55);
+insert into t (id,a) values (606,56);
+insert into t (id,a) values (606,57);
+insert into t (id,a) values (606,58);
+insert into t (id,a) values (606,59);
+insert into t (id,a) values (606,60);
+insert into t (id,a) values (606,61);
+insert into t (id,a) values (606,62);
+insert into t (id,a) values (606,63);
+insert into t (id,a) values (606,64);
+insert into t (id,a) values (606,65);
+insert into t (id,a) values (606,66);
+insert into t (id,a) values (606,67);
+insert into t (id,a) values (606,68);
+insert into t (id,a) values (606,69);
+insert into t (id,a) values (606,70);
+insert into t (id,a) values (606,71);
+insert into t (id,a) values (606,72);
+insert into t (id,a) values (606,73);
+insert into t (id,a) values (606,74);
+insert into t (id,a) values (606,75);
+insert into t (id,a) values (606,76);
+insert into t (id,a) values (606,77);
+insert into t (id,a) values (606,78);
+insert into t (id,a) values (606,79);
+insert into t (id,a) values (606,80);
+insert into t (id,a) values (606,81);
+insert into t (id,a) values (606,82);
+insert into t (id,a) values (606,83);
+insert into t (id,a) values (606,84);
+insert into t (id,a) values (606,85);
+insert into t (id,a) values (606,86);
+insert into t (id,a) values (606,87);
+insert into t (id,a) values (606,88);
+insert into t (id,a) values (606,89);
+insert into t (id,a) values (606,90);
+insert into t (id,a) values (606,91);
+insert into t (id,a) values (606,92);
+insert into t (id,a) values (606,93);
+insert into t (id,a) values (606,94);
+insert into t (id,a) values (606,95);
+insert into t (id,a) values (606,96);
+insert into t (id,a) values (606,97);
+insert into t (id,a) values (606,98);
+insert into t (id,a) values (606,99);
+insert into t (id,a) values (607,0);
+insert into t (id,a) values (607,1);
+insert into t (id,a) values (607,2);
+insert into t (id,a) values (607,3);
+insert into t (id,a) values (607,4);
+insert into t (id,a) values (607,5);
+insert into t (id,a) values (607,6);
+insert into t (id,a) values (607,7);
+insert into t (id,a) values (607,8);
+insert into t (id,a) values (607,9);
+insert into t (id,a) values (607,10);
+insert into t (id,a) values (607,11);
+insert into t (id,a) values (607,12);
+insert into t (id,a) values (607,13);
+insert into t (id,a) values (607,14);
+insert into t (id,a) values (607,15);
+insert into t (id,a) values (607,16);
+insert into t (id,a) values (607,17);
+insert into t (id,a) values (607,18);
+insert into t (id,a) values (607,19);
+insert into t (id,a) values (607,20);
+insert into t (id,a) values (607,21);
+insert into t (id,a) values (607,22);
+insert into t (id,a) values (607,23);
+insert into t (id,a) values (607,24);
+insert into t (id,a) values (607,25);
+insert into t (id,a) values (607,26);
+insert into t (id,a) values (607,27);
+insert into t (id,a) values (607,28);
+insert into t (id,a) values (607,29);
+insert into t (id,a) values (607,30);
+insert into t (id,a) values (607,31);
+insert into t (id,a) values (607,32);
+insert into t (id,a) values (607,33);
+insert into t (id,a) values (607,34);
+insert into t (id,a) values (607,35);
+insert into t (id,a) values (607,36);
+insert into t (id,a) values (607,37);
+insert into t (id,a) values (607,38);
+insert into t (id,a) values (607,39);
+insert into t (id,a) values (607,40);
+insert into t (id,a) values (607,41);
+insert into t (id,a) values (607,42);
+insert into t (id,a) values (607,43);
+insert into t (id,a) values (607,44);
+insert into t (id,a) values (607,45);
+insert into t (id,a) values (607,46);
+insert into t (id,a) values (607,47);
+insert into t (id,a) values (607,48);
+insert into t (id,a) values (607,49);
+insert into t (id,a) values (607,50);
+insert into t (id,a) values (607,51);
+insert into t (id,a) values (607,52);
+insert into t (id,a) values (607,53);
+insert into t (id,a) values (607,54);
+insert into t (id,a) values (607,55);
+insert into t (id,a) values (607,56);
+insert into t (id,a) values (607,57);
+insert into t (id,a) values (607,58);
+insert into t (id,a) values (607,59);
+insert into t (id,a) values (607,60);
+insert into t (id,a) values (607,61);
+insert into t (id,a) values (607,62);
+insert into t (id,a) values (607,63);
+insert into t (id,a) values (607,64);
+insert into t (id,a) values (607,65);
+insert into t (id,a) values (607,66);
+insert into t (id,a) values (607,67);
+insert into t (id,a) values (607,68);
+insert into t (id,a) values (607,69);
+insert into t (id,a) values (607,70);
+insert into t (id,a) values (607,71);
+insert into t (id,a) values (607,72);
+insert into t (id,a) values (607,73);
+insert into t (id,a) values (607,74);
+insert into t (id,a) values (607,75);
+insert into t (id,a) values (607,76);
+insert into t (id,a) values (607,77);
+insert into t (id,a) values (607,78);
+insert into t (id,a) values (607,79);
+insert into t (id,a) values (607,80);
+insert into t (id,a) values (607,81);
+insert into t (id,a) values (607,82);
+insert into t (id,a) values (607,83);
+insert into t (id,a) values (607,84);
+insert into t (id,a) values (607,85);
+insert into t (id,a) values (607,86);
+insert into t (id,a) values (607,87);
+insert into t (id,a) values (607,88);
+insert into t (id,a) values (607,89);
+insert into t (id,a) values (607,90);
+insert into t (id,a) values (607,91);
+insert into t (id,a) values (607,92);
+insert into t (id,a) values (607,93);
+insert into t (id,a) values (607,94);
+insert into t (id,a) values (607,95);
+insert into t (id,a) values (607,96);
+insert into t (id,a) values (607,97);
+insert into t (id,a) values (607,98);
+insert into t (id,a) values (607,99);
+insert into t (id,a) values (608,0);
+insert into t (id,a) values (608,1);
+insert into t (id,a) values (608,2);
+insert into t (id,a) values (608,3);
+insert into t (id,a) values (608,4);
+insert into t (id,a) values (608,5);
+insert into t (id,a) values (608,6);
+insert into t (id,a) values (608,7);
+insert into t (id,a) values (608,8);
+insert into t (id,a) values (608,9);
+insert into t (id,a) values (608,10);
+insert into t (id,a) values (608,11);
+insert into t (id,a) values (608,12);
+insert into t (id,a) values (608,13);
+insert into t (id,a) values (608,14);
+insert into t (id,a) values (608,15);
+insert into t (id,a) values (608,16);
+insert into t (id,a) values (608,17);
+insert into t (id,a) values (608,18);
+insert into t (id,a) values (608,19);
+insert into t (id,a) values (608,20);
+insert into t (id,a) values (608,21);
+insert into t (id,a) values (608,22);
+insert into t (id,a) values (608,23);
+insert into t (id,a) values (608,24);
+insert into t (id,a) values (608,25);
+insert into t (id,a) values (608,26);
+insert into t (id,a) values (608,27);
+insert into t (id,a) values (608,28);
+insert into t (id,a) values (608,29);
+insert into t (id,a) values (608,30);
+insert into t (id,a) values (608,31);
+insert into t (id,a) values (608,32);
+insert into t (id,a) values (608,33);
+insert into t (id,a) values (608,34);
+insert into t (id,a) values (608,35);
+insert into t (id,a) values (608,36);
+insert into t (id,a) values (608,37);
+insert into t (id,a) values (608,38);
+insert into t (id,a) values (608,39);
+insert into t (id,a) values (608,40);
+insert into t (id,a) values (608,41);
+insert into t (id,a) values (608,42);
+insert into t (id,a) values (608,43);
+insert into t (id,a) values (608,44);
+insert into t (id,a) values (608,45);
+insert into t (id,a) values (608,46);
+insert into t (id,a) values (608,47);
+insert into t (id,a) values (608,48);
+insert into t (id,a) values (608,49);
+insert into t (id,a) values (608,50);
+insert into t (id,a) values (608,51);
+insert into t (id,a) values (608,52);
+insert into t (id,a) values (608,53);
+insert into t (id,a) values (608,54);
+insert into t (id,a) values (608,55);
+insert into t (id,a) values (608,56);
+insert into t (id,a) values (608,57);
+insert into t (id,a) values (608,58);
+insert into t (id,a) values (608,59);
+insert into t (id,a) values (608,60);
+insert into t (id,a) values (608,61);
+insert into t (id,a) values (608,62);
+insert into t (id,a) values (608,63);
+insert into t (id,a) values (608,64);
+insert into t (id,a) values (608,65);
+insert into t (id,a) values (608,66);
+insert into t (id,a) values (608,67);
+insert into t (id,a) values (608,68);
+insert into t (id,a) values (608,69);
+insert into t (id,a) values (608,70);
+insert into t (id,a) values (608,71);
+insert into t (id,a) values (608,72);
+insert into t (id,a) values (608,73);
+insert into t (id,a) values (608,74);
+insert into t (id,a) values (608,75);
+insert into t (id,a) values (608,76);
+insert into t (id,a) values (608,77);
+insert into t (id,a) values (608,78);
+insert into t (id,a) values (608,79);
+insert into t (id,a) values (608,80);
+insert into t (id,a) values (608,81);
+insert into t (id,a) values (608,82);
+insert into t (id,a) values (608,83);
+insert into t (id,a) values (608,84);
+insert into t (id,a) values (608,85);
+insert into t (id,a) values (608,86);
+insert into t (id,a) values (608,87);
+insert into t (id,a) values (608,88);
+insert into t (id,a) values (608,89);
+insert into t (id,a) values (608,90);
+insert into t (id,a) values (608,91);
+insert into t (id,a) values (608,92);
+insert into t (id,a) values (608,93);
+insert into t (id,a) values (608,94);
+insert into t (id,a) values (608,95);
+insert into t (id,a) values (608,96);
+insert into t (id,a) values (608,97);
+insert into t (id,a) values (608,98);
+insert into t (id,a) values (608,99);
+insert into t (id,a) values (609,0);
+insert into t (id,a) values (609,1);
+insert into t (id,a) values (609,2);
+insert into t (id,a) values (609,3);
+insert into t (id,a) values (609,4);
+insert into t (id,a) values (609,5);
+insert into t (id,a) values (609,6);
+insert into t (id,a) values (609,7);
+insert into t (id,a) values (609,8);
+insert into t (id,a) values (609,9);
+insert into t (id,a) values (609,10);
+insert into t (id,a) values (609,11);
+insert into t (id,a) values (609,12);
+insert into t (id,a) values (609,13);
+insert into t (id,a) values (609,14);
+insert into t (id,a) values (609,15);
+insert into t (id,a) values (609,16);
+insert into t (id,a) values (609,17);
+insert into t (id,a) values (609,18);
+insert into t (id,a) values (609,19);
+insert into t (id,a) values (609,20);
+insert into t (id,a) values (609,21);
+insert into t (id,a) values (609,22);
+insert into t (id,a) values (609,23);
+insert into t (id,a) values (609,24);
+insert into t (id,a) values (609,25);
+insert into t (id,a) values (609,26);
+insert into t (id,a) values (609,27);
+insert into t (id,a) values (609,28);
+insert into t (id,a) values (609,29);
+insert into t (id,a) values (609,30);
+insert into t (id,a) values (609,31);
+insert into t (id,a) values (609,32);
+insert into t (id,a) values (609,33);
+insert into t (id,a) values (609,34);
+insert into t (id,a) values (609,35);
+insert into t (id,a) values (609,36);
+insert into t (id,a) values (609,37);
+insert into t (id,a) values (609,38);
+insert into t (id,a) values (609,39);
+insert into t (id,a) values (609,40);
+insert into t (id,a) values (609,41);
+insert into t (id,a) values (609,42);
+insert into t (id,a) values (609,43);
+insert into t (id,a) values (609,44);
+insert into t (id,a) values (609,45);
+insert into t (id,a) values (609,46);
+insert into t (id,a) values (609,47);
+insert into t (id,a) values (609,48);
+insert into t (id,a) values (609,49);
+insert into t (id,a) values (609,50);
+insert into t (id,a) values (609,51);
+insert into t (id,a) values (609,52);
+insert into t (id,a) values (609,53);
+insert into t (id,a) values (609,54);
+insert into t (id,a) values (609,55);
+insert into t (id,a) values (609,56);
+insert into t (id,a) values (609,57);
+insert into t (id,a) values (609,58);
+insert into t (id,a) values (609,59);
+insert into t (id,a) values (609,60);
+insert into t (id,a) values (609,61);
+insert into t (id,a) values (609,62);
+insert into t (id,a) values (609,63);
+insert into t (id,a) values (609,64);
+insert into t (id,a) values (609,65);
+insert into t (id,a) values (609,66);
+insert into t (id,a) values (609,67);
+insert into t (id,a) values (609,68);
+insert into t (id,a) values (609,69);
+insert into t (id,a) values (609,70);
+insert into t (id,a) values (609,71);
+insert into t (id,a) values (609,72);
+insert into t (id,a) values (609,73);
+insert into t (id,a) values (609,74);
+insert into t (id,a) values (609,75);
+insert into t (id,a) values (609,76);
+insert into t (id,a) values (609,77);
+insert into t (id,a) values (609,78);
+insert into t (id,a) values (609,79);
+insert into t (id,a) values (609,80);
+insert into t (id,a) values (609,81);
+insert into t (id,a) values (609,82);
+insert into t (id,a) values (609,83);
+insert into t (id,a) values (609,84);
+insert into t (id,a) values (609,85);
+insert into t (id,a) values (609,86);
+insert into t (id,a) values (609,87);
+insert into t (id,a) values (609,88);
+insert into t (id,a) values (609,89);
+insert into t (id,a) values (609,90);
+insert into t (id,a) values (609,91);
+insert into t (id,a) values (609,92);
+insert into t (id,a) values (609,93);
+insert into t (id,a) values (609,94);
+insert into t (id,a) values (609,95);
+insert into t (id,a) values (609,96);
+insert into t (id,a) values (609,97);
+insert into t (id,a) values (609,98);
+insert into t (id,a) values (609,99);
+insert into t (id,a) values (610,0);
+insert into t (id,a) values (610,1);
+insert into t (id,a) values (610,2);
+insert into t (id,a) values (610,3);
+insert into t (id,a) values (610,4);
+insert into t (id,a) values (610,5);
+insert into t (id,a) values (610,6);
+insert into t (id,a) values (610,7);
+insert into t (id,a) values (610,8);
+insert into t (id,a) values (610,9);
+insert into t (id,a) values (610,10);
+insert into t (id,a) values (610,11);
+insert into t (id,a) values (610,12);
+insert into t (id,a) values (610,13);
+insert into t (id,a) values (610,14);
+insert into t (id,a) values (610,15);
+insert into t (id,a) values (610,16);
+insert into t (id,a) values (610,17);
+insert into t (id,a) values (610,18);
+insert into t (id,a) values (610,19);
+insert into t (id,a) values (610,20);
+insert into t (id,a) values (610,21);
+insert into t (id,a) values (610,22);
+insert into t (id,a) values (610,23);
+insert into t (id,a) values (610,24);
+insert into t (id,a) values (610,25);
+insert into t (id,a) values (610,26);
+insert into t (id,a) values (610,27);
+insert into t (id,a) values (610,28);
+insert into t (id,a) values (610,29);
+insert into t (id,a) values (610,30);
+insert into t (id,a) values (610,31);
+insert into t (id,a) values (610,32);
+insert into t (id,a) values (610,33);
+insert into t (id,a) values (610,34);
+insert into t (id,a) values (610,35);
+insert into t (id,a) values (610,36);
+insert into t (id,a) values (610,37);
+insert into t (id,a) values (610,38);
+insert into t (id,a) values (610,39);
+insert into t (id,a) values (610,40);
+insert into t (id,a) values (610,41);
+insert into t (id,a) values (610,42);
+insert into t (id,a) values (610,43);
+insert into t (id,a) values (610,44);
+insert into t (id,a) values (610,45);
+insert into t (id,a) values (610,46);
+insert into t (id,a) values (610,47);
+insert into t (id,a) values (610,48);
+insert into t (id,a) values (610,49);
+insert into t (id,a) values (610,50);
+insert into t (id,a) values (610,51);
+insert into t (id,a) values (610,52);
+insert into t (id,a) values (610,53);
+insert into t (id,a) values (610,54);
+insert into t (id,a) values (610,55);
+insert into t (id,a) values (610,56);
+insert into t (id,a) values (610,57);
+insert into t (id,a) values (610,58);
+insert into t (id,a) values (610,59);
+insert into t (id,a) values (610,60);
+insert into t (id,a) values (610,61);
+insert into t (id,a) values (610,62);
+insert into t (id,a) values (610,63);
+insert into t (id,a) values (610,64);
+insert into t (id,a) values (610,65);
+insert into t (id,a) values (610,66);
+insert into t (id,a) values (610,67);
+insert into t (id,a) values (610,68);
+insert into t (id,a) values (610,69);
+insert into t (id,a) values (610,70);
+insert into t (id,a) values (610,71);
+insert into t (id,a) values (610,72);
+insert into t (id,a) values (610,73);
+insert into t (id,a) values (610,74);
+insert into t (id,a) values (610,75);
+insert into t (id,a) values (610,76);
+insert into t (id,a) values (610,77);
+insert into t (id,a) values (610,78);
+insert into t (id,a) values (610,79);
+insert into t (id,a) values (610,80);
+insert into t (id,a) values (610,81);
+insert into t (id,a) values (610,82);
+insert into t (id,a) values (610,83);
+insert into t (id,a) values (610,84);
+insert into t (id,a) values (610,85);
+insert into t (id,a) values (610,86);
+insert into t (id,a) values (610,87);
+insert into t (id,a) values (610,88);
+insert into t (id,a) values (610,89);
+insert into t (id,a) values (610,90);
+insert into t (id,a) values (610,91);
+insert into t (id,a) values (610,92);
+insert into t (id,a) values (610,93);
+insert into t (id,a) values (610,94);
+insert into t (id,a) values (610,95);
+insert into t (id,a) values (610,96);
+insert into t (id,a) values (610,97);
+insert into t (id,a) values (610,98);
+insert into t (id,a) values (610,99);
+insert into t (id,a) values (611,0);
+insert into t (id,a) values (611,1);
+insert into t (id,a) values (611,2);
+insert into t (id,a) values (611,3);
+insert into t (id,a) values (611,4);
+insert into t (id,a) values (611,5);
+insert into t (id,a) values (611,6);
+insert into t (id,a) values (611,7);
+insert into t (id,a) values (611,8);
+insert into t (id,a) values (611,9);
+insert into t (id,a) values (611,10);
+insert into t (id,a) values (611,11);
+insert into t (id,a) values (611,12);
+insert into t (id,a) values (611,13);
+insert into t (id,a) values (611,14);
+insert into t (id,a) values (611,15);
+insert into t (id,a) values (611,16);
+insert into t (id,a) values (611,17);
+insert into t (id,a) values (611,18);
+insert into t (id,a) values (611,19);
+insert into t (id,a) values (611,20);
+insert into t (id,a) values (611,21);
+insert into t (id,a) values (611,22);
+insert into t (id,a) values (611,23);
+insert into t (id,a) values (611,24);
+insert into t (id,a) values (611,25);
+insert into t (id,a) values (611,26);
+insert into t (id,a) values (611,27);
+insert into t (id,a) values (611,28);
+insert into t (id,a) values (611,29);
+insert into t (id,a) values (611,30);
+insert into t (id,a) values (611,31);
+insert into t (id,a) values (611,32);
+insert into t (id,a) values (611,33);
+insert into t (id,a) values (611,34);
+insert into t (id,a) values (611,35);
+insert into t (id,a) values (611,36);
+insert into t (id,a) values (611,37);
+insert into t (id,a) values (611,38);
+insert into t (id,a) values (611,39);
+insert into t (id,a) values (611,40);
+insert into t (id,a) values (611,41);
+insert into t (id,a) values (611,42);
+insert into t (id,a) values (611,43);
+insert into t (id,a) values (611,44);
+insert into t (id,a) values (611,45);
+insert into t (id,a) values (611,46);
+insert into t (id,a) values (611,47);
+insert into t (id,a) values (611,48);
+insert into t (id,a) values (611,49);
+insert into t (id,a) values (611,50);
+insert into t (id,a) values (611,51);
+insert into t (id,a) values (611,52);
+insert into t (id,a) values (611,53);
+insert into t (id,a) values (611,54);
+insert into t (id,a) values (611,55);
+insert into t (id,a) values (611,56);
+insert into t (id,a) values (611,57);
+insert into t (id,a) values (611,58);
+insert into t (id,a) values (611,59);
+insert into t (id,a) values (611,60);
+insert into t (id,a) values (611,61);
+insert into t (id,a) values (611,62);
+insert into t (id,a) values (611,63);
+insert into t (id,a) values (611,64);
+insert into t (id,a) values (611,65);
+insert into t (id,a) values (611,66);
+insert into t (id,a) values (611,67);
+insert into t (id,a) values (611,68);
+insert into t (id,a) values (611,69);
+insert into t (id,a) values (611,70);
+insert into t (id,a) values (611,71);
+insert into t (id,a) values (611,72);
+insert into t (id,a) values (611,73);
+insert into t (id,a) values (611,74);
+insert into t (id,a) values (611,75);
+insert into t (id,a) values (611,76);
+insert into t (id,a) values (611,77);
+insert into t (id,a) values (611,78);
+insert into t (id,a) values (611,79);
+insert into t (id,a) values (611,80);
+insert into t (id,a) values (611,81);
+insert into t (id,a) values (611,82);
+insert into t (id,a) values (611,83);
+insert into t (id,a) values (611,84);
+insert into t (id,a) values (611,85);
+insert into t (id,a) values (611,86);
+insert into t (id,a) values (611,87);
+insert into t (id,a) values (611,88);
+insert into t (id,a) values (611,89);
+insert into t (id,a) values (611,90);
+insert into t (id,a) values (611,91);
+insert into t (id,a) values (611,92);
+insert into t (id,a) values (611,93);
+insert into t (id,a) values (611,94);
+insert into t (id,a) values (611,95);
+insert into t (id,a) values (611,96);
+insert into t (id,a) values (611,97);
+insert into t (id,a) values (611,98);
+insert into t (id,a) values (611,99);
+insert into t (id,a) values (612,0);
+insert into t (id,a) values (612,1);
+insert into t (id,a) values (612,2);
+insert into t (id,a) values (612,3);
+insert into t (id,a) values (612,4);
+insert into t (id,a) values (612,5);
+insert into t (id,a) values (612,6);
+insert into t (id,a) values (612,7);
+insert into t (id,a) values (612,8);
+insert into t (id,a) values (612,9);
+insert into t (id,a) values (612,10);
+insert into t (id,a) values (612,11);
+insert into t (id,a) values (612,12);
+insert into t (id,a) values (612,13);
+insert into t (id,a) values (612,14);
+insert into t (id,a) values (612,15);
+insert into t (id,a) values (612,16);
+insert into t (id,a) values (612,17);
+insert into t (id,a) values (612,18);
+insert into t (id,a) values (612,19);
+insert into t (id,a) values (612,20);
+insert into t (id,a) values (612,21);
+insert into t (id,a) values (612,22);
+insert into t (id,a) values (612,23);
+insert into t (id,a) values (612,24);
+insert into t (id,a) values (612,25);
+insert into t (id,a) values (612,26);
+insert into t (id,a) values (612,27);
+insert into t (id,a) values (612,28);
+insert into t (id,a) values (612,29);
+insert into t (id,a) values (612,30);
+insert into t (id,a) values (612,31);
+insert into t (id,a) values (612,32);
+insert into t (id,a) values (612,33);
+insert into t (id,a) values (612,34);
+insert into t (id,a) values (612,35);
+insert into t (id,a) values (612,36);
+insert into t (id,a) values (612,37);
+insert into t (id,a) values (612,38);
+insert into t (id,a) values (612,39);
+insert into t (id,a) values (612,40);
+insert into t (id,a) values (612,41);
+insert into t (id,a) values (612,42);
+insert into t (id,a) values (612,43);
+insert into t (id,a) values (612,44);
+insert into t (id,a) values (612,45);
+insert into t (id,a) values (612,46);
+insert into t (id,a) values (612,47);
+insert into t (id,a) values (612,48);
+insert into t (id,a) values (612,49);
+insert into t (id,a) values (612,50);
+insert into t (id,a) values (612,51);
+insert into t (id,a) values (612,52);
+insert into t (id,a) values (612,53);
+insert into t (id,a) values (612,54);
+insert into t (id,a) values (612,55);
+insert into t (id,a) values (612,56);
+insert into t (id,a) values (612,57);
+insert into t (id,a) values (612,58);
+insert into t (id,a) values (612,59);
+insert into t (id,a) values (612,60);
+insert into t (id,a) values (612,61);
+insert into t (id,a) values (612,62);
+insert into t (id,a) values (612,63);
+insert into t (id,a) values (612,64);
+insert into t (id,a) values (612,65);
+insert into t (id,a) values (612,66);
+insert into t (id,a) values (612,67);
+insert into t (id,a) values (612,68);
+insert into t (id,a) values (612,69);
+insert into t (id,a) values (612,70);
+insert into t (id,a) values (612,71);
+insert into t (id,a) values (612,72);
+insert into t (id,a) values (612,73);
+insert into t (id,a) values (612,74);
+insert into t (id,a) values (612,75);
+insert into t (id,a) values (612,76);
+insert into t (id,a) values (612,77);
+insert into t (id,a) values (612,78);
+insert into t (id,a) values (612,79);
+insert into t (id,a) values (612,80);
+insert into t (id,a) values (612,81);
+insert into t (id,a) values (612,82);
+insert into t (id,a) values (612,83);
+insert into t (id,a) values (612,84);
+insert into t (id,a) values (612,85);
+insert into t (id,a) values (612,86);
+insert into t (id,a) values (612,87);
+insert into t (id,a) values (612,88);
+insert into t (id,a) values (612,89);
+insert into t (id,a) values (612,90);
+insert into t (id,a) values (612,91);
+insert into t (id,a) values (612,92);
+insert into t (id,a) values (612,93);
+insert into t (id,a) values (612,94);
+insert into t (id,a) values (612,95);
+insert into t (id,a) values (612,96);
+insert into t (id,a) values (612,97);
+insert into t (id,a) values (612,98);
+insert into t (id,a) values (612,99);
+insert into t (id,a) values (613,0);
+insert into t (id,a) values (613,1);
+insert into t (id,a) values (613,2);
+insert into t (id,a) values (613,3);
+insert into t (id,a) values (613,4);
+insert into t (id,a) values (613,5);
+insert into t (id,a) values (613,6);
+insert into t (id,a) values (613,7);
+insert into t (id,a) values (613,8);
+insert into t (id,a) values (613,9);
+insert into t (id,a) values (613,10);
+insert into t (id,a) values (613,11);
+insert into t (id,a) values (613,12);
+insert into t (id,a) values (613,13);
+insert into t (id,a) values (613,14);
+insert into t (id,a) values (613,15);
+insert into t (id,a) values (613,16);
+insert into t (id,a) values (613,17);
+insert into t (id,a) values (613,18);
+insert into t (id,a) values (613,19);
+insert into t (id,a) values (613,20);
+insert into t (id,a) values (613,21);
+insert into t (id,a) values (613,22);
+insert into t (id,a) values (613,23);
+insert into t (id,a) values (613,24);
+insert into t (id,a) values (613,25);
+insert into t (id,a) values (613,26);
+insert into t (id,a) values (613,27);
+insert into t (id,a) values (613,28);
+insert into t (id,a) values (613,29);
+insert into t (id,a) values (613,30);
+insert into t (id,a) values (613,31);
+insert into t (id,a) values (613,32);
+insert into t (id,a) values (613,33);
+insert into t (id,a) values (613,34);
+insert into t (id,a) values (613,35);
+insert into t (id,a) values (613,36);
+insert into t (id,a) values (613,37);
+insert into t (id,a) values (613,38);
+insert into t (id,a) values (613,39);
+insert into t (id,a) values (613,40);
+insert into t (id,a) values (613,41);
+insert into t (id,a) values (613,42);
+insert into t (id,a) values (613,43);
+insert into t (id,a) values (613,44);
+insert into t (id,a) values (613,45);
+insert into t (id,a) values (613,46);
+insert into t (id,a) values (613,47);
+insert into t (id,a) values (613,48);
+insert into t (id,a) values (613,49);
+insert into t (id,a) values (613,50);
+insert into t (id,a) values (613,51);
+insert into t (id,a) values (613,52);
+insert into t (id,a) values (613,53);
+insert into t (id,a) values (613,54);
+insert into t (id,a) values (613,55);
+insert into t (id,a) values (613,56);
+insert into t (id,a) values (613,57);
+insert into t (id,a) values (613,58);
+insert into t (id,a) values (613,59);
+insert into t (id,a) values (613,60);
+insert into t (id,a) values (613,61);
+insert into t (id,a) values (613,62);
+insert into t (id,a) values (613,63);
+insert into t (id,a) values (613,64);
+insert into t (id,a) values (613,65);
+insert into t (id,a) values (613,66);
+insert into t (id,a) values (613,67);
+insert into t (id,a) values (613,68);
+insert into t (id,a) values (613,69);
+insert into t (id,a) values (613,70);
+insert into t (id,a) values (613,71);
+insert into t (id,a) values (613,72);
+insert into t (id,a) values (613,73);
+insert into t (id,a) values (613,74);
+insert into t (id,a) values (613,75);
+insert into t (id,a) values (613,76);
+insert into t (id,a) values (613,77);
+insert into t (id,a) values (613,78);
+insert into t (id,a) values (613,79);
+insert into t (id,a) values (613,80);
+insert into t (id,a) values (613,81);
+insert into t (id,a) values (613,82);
+insert into t (id,a) values (613,83);
+insert into t (id,a) values (613,84);
+insert into t (id,a) values (613,85);
+insert into t (id,a) values (613,86);
+insert into t (id,a) values (613,87);
+insert into t (id,a) values (613,88);
+insert into t (id,a) values (613,89);
+insert into t (id,a) values (613,90);
+insert into t (id,a) values (613,91);
+insert into t (id,a) values (613,92);
+insert into t (id,a) values (613,93);
+insert into t (id,a) values (613,94);
+insert into t (id,a) values (613,95);
+insert into t (id,a) values (613,96);
+insert into t (id,a) values (613,97);
+insert into t (id,a) values (613,98);
+insert into t (id,a) values (613,99);
+insert into t (id,a) values (614,0);
+insert into t (id,a) values (614,1);
+insert into t (id,a) values (614,2);
+insert into t (id,a) values (614,3);
+insert into t (id,a) values (614,4);
+insert into t (id,a) values (614,5);
+insert into t (id,a) values (614,6);
+insert into t (id,a) values (614,7);
+insert into t (id,a) values (614,8);
+insert into t (id,a) values (614,9);
+insert into t (id,a) values (614,10);
+insert into t (id,a) values (614,11);
+insert into t (id,a) values (614,12);
+insert into t (id,a) values (614,13);
+insert into t (id,a) values (614,14);
+insert into t (id,a) values (614,15);
+insert into t (id,a) values (614,16);
+insert into t (id,a) values (614,17);
+insert into t (id,a) values (614,18);
+insert into t (id,a) values (614,19);
+insert into t (id,a) values (614,20);
+insert into t (id,a) values (614,21);
+insert into t (id,a) values (614,22);
+insert into t (id,a) values (614,23);
+insert into t (id,a) values (614,24);
+insert into t (id,a) values (614,25);
+insert into t (id,a) values (614,26);
+insert into t (id,a) values (614,27);
+insert into t (id,a) values (614,28);
+insert into t (id,a) values (614,29);
+insert into t (id,a) values (614,30);
+insert into t (id,a) values (614,31);
+insert into t (id,a) values (614,32);
+insert into t (id,a) values (614,33);
+insert into t (id,a) values (614,34);
+insert into t (id,a) values (614,35);
+insert into t (id,a) values (614,36);
+insert into t (id,a) values (614,37);
+insert into t (id,a) values (614,38);
+insert into t (id,a) values (614,39);
+insert into t (id,a) values (614,40);
+insert into t (id,a) values (614,41);
+insert into t (id,a) values (614,42);
+insert into t (id,a) values (614,43);
+insert into t (id,a) values (614,44);
+insert into t (id,a) values (614,45);
+insert into t (id,a) values (614,46);
+insert into t (id,a) values (614,47);
+insert into t (id,a) values (614,48);
+insert into t (id,a) values (614,49);
+insert into t (id,a) values (614,50);
+insert into t (id,a) values (614,51);
+insert into t (id,a) values (614,52);
+insert into t (id,a) values (614,53);
+insert into t (id,a) values (614,54);
+insert into t (id,a) values (614,55);
+insert into t (id,a) values (614,56);
+insert into t (id,a) values (614,57);
+insert into t (id,a) values (614,58);
+insert into t (id,a) values (614,59);
+insert into t (id,a) values (614,60);
+insert into t (id,a) values (614,61);
+insert into t (id,a) values (614,62);
+insert into t (id,a) values (614,63);
+insert into t (id,a) values (614,64);
+insert into t (id,a) values (614,65);
+insert into t (id,a) values (614,66);
+insert into t (id,a) values (614,67);
+insert into t (id,a) values (614,68);
+insert into t (id,a) values (614,69);
+insert into t (id,a) values (614,70);
+insert into t (id,a) values (614,71);
+insert into t (id,a) values (614,72);
+insert into t (id,a) values (614,73);
+insert into t (id,a) values (614,74);
+insert into t (id,a) values (614,75);
+insert into t (id,a) values (614,76);
+insert into t (id,a) values (614,77);
+insert into t (id,a) values (614,78);
+insert into t (id,a) values (614,79);
+insert into t (id,a) values (614,80);
+insert into t (id,a) values (614,81);
+insert into t (id,a) values (614,82);
+insert into t (id,a) values (614,83);
+insert into t (id,a) values (614,84);
+insert into t (id,a) values (614,85);
+insert into t (id,a) values (614,86);
+insert into t (id,a) values (614,87);
+insert into t (id,a) values (614,88);
+insert into t (id,a) values (614,89);
+insert into t (id,a) values (614,90);
+insert into t (id,a) values (614,91);
+insert into t (id,a) values (614,92);
+insert into t (id,a) values (614,93);
+insert into t (id,a) values (614,94);
+insert into t (id,a) values (614,95);
+insert into t (id,a) values (614,96);
+insert into t (id,a) values (614,97);
+insert into t (id,a) values (614,98);
+insert into t (id,a) values (614,99);
+insert into t (id,a) values (615,0);
+insert into t (id,a) values (615,1);
+insert into t (id,a) values (615,2);
+insert into t (id,a) values (615,3);
+insert into t (id,a) values (615,4);
+insert into t (id,a) values (615,5);
+insert into t (id,a) values (615,6);
+insert into t (id,a) values (615,7);
+insert into t (id,a) values (615,8);
+insert into t (id,a) values (615,9);
+insert into t (id,a) values (615,10);
+insert into t (id,a) values (615,11);
+insert into t (id,a) values (615,12);
+insert into t (id,a) values (615,13);
+insert into t (id,a) values (615,14);
+insert into t (id,a) values (615,15);
+insert into t (id,a) values (615,16);
+insert into t (id,a) values (615,17);
+insert into t (id,a) values (615,18);
+insert into t (id,a) values (615,19);
+insert into t (id,a) values (615,20);
+insert into t (id,a) values (615,21);
+insert into t (id,a) values (615,22);
+insert into t (id,a) values (615,23);
+insert into t (id,a) values (615,24);
+insert into t (id,a) values (615,25);
+insert into t (id,a) values (615,26);
+insert into t (id,a) values (615,27);
+insert into t (id,a) values (615,28);
+insert into t (id,a) values (615,29);
+insert into t (id,a) values (615,30);
+insert into t (id,a) values (615,31);
+insert into t (id,a) values (615,32);
+insert into t (id,a) values (615,33);
+insert into t (id,a) values (615,34);
+insert into t (id,a) values (615,35);
+insert into t (id,a) values (615,36);
+insert into t (id,a) values (615,37);
+insert into t (id,a) values (615,38);
+insert into t (id,a) values (615,39);
+insert into t (id,a) values (615,40);
+insert into t (id,a) values (615,41);
+insert into t (id,a) values (615,42);
+insert into t (id,a) values (615,43);
+insert into t (id,a) values (615,44);
+insert into t (id,a) values (615,45);
+insert into t (id,a) values (615,46);
+insert into t (id,a) values (615,47);
+insert into t (id,a) values (615,48);
+insert into t (id,a) values (615,49);
+insert into t (id,a) values (615,50);
+insert into t (id,a) values (615,51);
+insert into t (id,a) values (615,52);
+insert into t (id,a) values (615,53);
+insert into t (id,a) values (615,54);
+insert into t (id,a) values (615,55);
+insert into t (id,a) values (615,56);
+insert into t (id,a) values (615,57);
+insert into t (id,a) values (615,58);
+insert into t (id,a) values (615,59);
+insert into t (id,a) values (615,60);
+insert into t (id,a) values (615,61);
+insert into t (id,a) values (615,62);
+insert into t (id,a) values (615,63);
+insert into t (id,a) values (615,64);
+insert into t (id,a) values (615,65);
+insert into t (id,a) values (615,66);
+insert into t (id,a) values (615,67);
+insert into t (id,a) values (615,68);
+insert into t (id,a) values (615,69);
+insert into t (id,a) values (615,70);
+insert into t (id,a) values (615,71);
+insert into t (id,a) values (615,72);
+insert into t (id,a) values (615,73);
+insert into t (id,a) values (615,74);
+insert into t (id,a) values (615,75);
+insert into t (id,a) values (615,76);
+insert into t (id,a) values (615,77);
+insert into t (id,a) values (615,78);
+insert into t (id,a) values (615,79);
+insert into t (id,a) values (615,80);
+insert into t (id,a) values (615,81);
+insert into t (id,a) values (615,82);
+insert into t (id,a) values (615,83);
+insert into t (id,a) values (615,84);
+insert into t (id,a) values (615,85);
+insert into t (id,a) values (615,86);
+insert into t (id,a) values (615,87);
+insert into t (id,a) values (615,88);
+insert into t (id,a) values (615,89);
+insert into t (id,a) values (615,90);
+insert into t (id,a) values (615,91);
+insert into t (id,a) values (615,92);
+insert into t (id,a) values (615,93);
+insert into t (id,a) values (615,94);
+insert into t (id,a) values (615,95);
+insert into t (id,a) values (615,96);
+insert into t (id,a) values (615,97);
+insert into t (id,a) values (615,98);
+insert into t (id,a) values (615,99);
+insert into t (id,a) values (616,0);
+insert into t (id,a) values (616,1);
+insert into t (id,a) values (616,2);
+insert into t (id,a) values (616,3);
+insert into t (id,a) values (616,4);
+insert into t (id,a) values (616,5);
+insert into t (id,a) values (616,6);
+insert into t (id,a) values (616,7);
+insert into t (id,a) values (616,8);
+insert into t (id,a) values (616,9);
+insert into t (id,a) values (616,10);
+insert into t (id,a) values (616,11);
+insert into t (id,a) values (616,12);
+insert into t (id,a) values (616,13);
+insert into t (id,a) values (616,14);
+insert into t (id,a) values (616,15);
+insert into t (id,a) values (616,16);
+insert into t (id,a) values (616,17);
+insert into t (id,a) values (616,18);
+insert into t (id,a) values (616,19);
+insert into t (id,a) values (616,20);
+insert into t (id,a) values (616,21);
+insert into t (id,a) values (616,22);
+insert into t (id,a) values (616,23);
+insert into t (id,a) values (616,24);
+insert into t (id,a) values (616,25);
+insert into t (id,a) values (616,26);
+insert into t (id,a) values (616,27);
+insert into t (id,a) values (616,28);
+insert into t (id,a) values (616,29);
+insert into t (id,a) values (616,30);
+insert into t (id,a) values (616,31);
+insert into t (id,a) values (616,32);
+insert into t (id,a) values (616,33);
+insert into t (id,a) values (616,34);
+insert into t (id,a) values (616,35);
+insert into t (id,a) values (616,36);
+insert into t (id,a) values (616,37);
+insert into t (id,a) values (616,38);
+insert into t (id,a) values (616,39);
+insert into t (id,a) values (616,40);
+insert into t (id,a) values (616,41);
+insert into t (id,a) values (616,42);
+insert into t (id,a) values (616,43);
+insert into t (id,a) values (616,44);
+insert into t (id,a) values (616,45);
+insert into t (id,a) values (616,46);
+insert into t (id,a) values (616,47);
+insert into t (id,a) values (616,48);
+insert into t (id,a) values (616,49);
+insert into t (id,a) values (616,50);
+insert into t (id,a) values (616,51);
+insert into t (id,a) values (616,52);
+insert into t (id,a) values (616,53);
+insert into t (id,a) values (616,54);
+insert into t (id,a) values (616,55);
+insert into t (id,a) values (616,56);
+insert into t (id,a) values (616,57);
+insert into t (id,a) values (616,58);
+insert into t (id,a) values (616,59);
+insert into t (id,a) values (616,60);
+insert into t (id,a) values (616,61);
+insert into t (id,a) values (616,62);
+insert into t (id,a) values (616,63);
+insert into t (id,a) values (616,64);
+insert into t (id,a) values (616,65);
+insert into t (id,a) values (616,66);
+insert into t (id,a) values (616,67);
+insert into t (id,a) values (616,68);
+insert into t (id,a) values (616,69);
+insert into t (id,a) values (616,70);
+insert into t (id,a) values (616,71);
+insert into t (id,a) values (616,72);
+insert into t (id,a) values (616,73);
+insert into t (id,a) values (616,74);
+insert into t (id,a) values (616,75);
+insert into t (id,a) values (616,76);
+insert into t (id,a) values (616,77);
+insert into t (id,a) values (616,78);
+insert into t (id,a) values (616,79);
+insert into t (id,a) values (616,80);
+insert into t (id,a) values (616,81);
+insert into t (id,a) values (616,82);
+insert into t (id,a) values (616,83);
+insert into t (id,a) values (616,84);
+insert into t (id,a) values (616,85);
+insert into t (id,a) values (616,86);
+insert into t (id,a) values (616,87);
+insert into t (id,a) values (616,88);
+insert into t (id,a) values (616,89);
+insert into t (id,a) values (616,90);
+insert into t (id,a) values (616,91);
+insert into t (id,a) values (616,92);
+insert into t (id,a) values (616,93);
+insert into t (id,a) values (616,94);
+insert into t (id,a) values (616,95);
+insert into t (id,a) values (616,96);
+insert into t (id,a) values (616,97);
+insert into t (id,a) values (616,98);
+insert into t (id,a) values (616,99);
+insert into t (id,a) values (617,0);
+insert into t (id,a) values (617,1);
+insert into t (id,a) values (617,2);
+insert into t (id,a) values (617,3);
+insert into t (id,a) values (617,4);
+insert into t (id,a) values (617,5);
+insert into t (id,a) values (617,6);
+insert into t (id,a) values (617,7);
+insert into t (id,a) values (617,8);
+insert into t (id,a) values (617,9);
+insert into t (id,a) values (617,10);
+insert into t (id,a) values (617,11);
+insert into t (id,a) values (617,12);
+insert into t (id,a) values (617,13);
+insert into t (id,a) values (617,14);
+insert into t (id,a) values (617,15);
+insert into t (id,a) values (617,16);
+insert into t (id,a) values (617,17);
+insert into t (id,a) values (617,18);
+insert into t (id,a) values (617,19);
+insert into t (id,a) values (617,20);
+insert into t (id,a) values (617,21);
+insert into t (id,a) values (617,22);
+insert into t (id,a) values (617,23);
+insert into t (id,a) values (617,24);
+insert into t (id,a) values (617,25);
+insert into t (id,a) values (617,26);
+insert into t (id,a) values (617,27);
+insert into t (id,a) values (617,28);
+insert into t (id,a) values (617,29);
+insert into t (id,a) values (617,30);
+insert into t (id,a) values (617,31);
+insert into t (id,a) values (617,32);
+insert into t (id,a) values (617,33);
+insert into t (id,a) values (617,34);
+insert into t (id,a) values (617,35);
+insert into t (id,a) values (617,36);
+insert into t (id,a) values (617,37);
+insert into t (id,a) values (617,38);
+insert into t (id,a) values (617,39);
+insert into t (id,a) values (617,40);
+insert into t (id,a) values (617,41);
+insert into t (id,a) values (617,42);
+insert into t (id,a) values (617,43);
+insert into t (id,a) values (617,44);
+insert into t (id,a) values (617,45);
+insert into t (id,a) values (617,46);
+insert into t (id,a) values (617,47);
+insert into t (id,a) values (617,48);
+insert into t (id,a) values (617,49);
+insert into t (id,a) values (617,50);
+insert into t (id,a) values (617,51);
+insert into t (id,a) values (617,52);
+insert into t (id,a) values (617,53);
+insert into t (id,a) values (617,54);
+insert into t (id,a) values (617,55);
+insert into t (id,a) values (617,56);
+insert into t (id,a) values (617,57);
+insert into t (id,a) values (617,58);
+insert into t (id,a) values (617,59);
+insert into t (id,a) values (617,60);
+insert into t (id,a) values (617,61);
+insert into t (id,a) values (617,62);
+insert into t (id,a) values (617,63);
+insert into t (id,a) values (617,64);
+insert into t (id,a) values (617,65);
+insert into t (id,a) values (617,66);
+insert into t (id,a) values (617,67);
+insert into t (id,a) values (617,68);
+insert into t (id,a) values (617,69);
+insert into t (id,a) values (617,70);
+insert into t (id,a) values (617,71);
+insert into t (id,a) values (617,72);
+insert into t (id,a) values (617,73);
+insert into t (id,a) values (617,74);
+insert into t (id,a) values (617,75);
+insert into t (id,a) values (617,76);
+insert into t (id,a) values (617,77);
+insert into t (id,a) values (617,78);
+insert into t (id,a) values (617,79);
+insert into t (id,a) values (617,80);
+insert into t (id,a) values (617,81);
+insert into t (id,a) values (617,82);
+insert into t (id,a) values (617,83);
+insert into t (id,a) values (617,84);
+insert into t (id,a) values (617,85);
+insert into t (id,a) values (617,86);
+insert into t (id,a) values (617,87);
+insert into t (id,a) values (617,88);
+insert into t (id,a) values (617,89);
+insert into t (id,a) values (617,90);
+insert into t (id,a) values (617,91);
+insert into t (id,a) values (617,92);
+insert into t (id,a) values (617,93);
+insert into t (id,a) values (617,94);
+insert into t (id,a) values (617,95);
+insert into t (id,a) values (617,96);
+insert into t (id,a) values (617,97);
+insert into t (id,a) values (617,98);
+insert into t (id,a) values (617,99);
+insert into t (id,a) values (618,0);
+insert into t (id,a) values (618,1);
+insert into t (id,a) values (618,2);
+insert into t (id,a) values (618,3);
+insert into t (id,a) values (618,4);
+insert into t (id,a) values (618,5);
+insert into t (id,a) values (618,6);
+insert into t (id,a) values (618,7);
+insert into t (id,a) values (618,8);
+insert into t (id,a) values (618,9);
+insert into t (id,a) values (618,10);
+insert into t (id,a) values (618,11);
+insert into t (id,a) values (618,12);
+insert into t (id,a) values (618,13);
+insert into t (id,a) values (618,14);
+insert into t (id,a) values (618,15);
+insert into t (id,a) values (618,16);
+insert into t (id,a) values (618,17);
+insert into t (id,a) values (618,18);
+insert into t (id,a) values (618,19);
+insert into t (id,a) values (618,20);
+insert into t (id,a) values (618,21);
+insert into t (id,a) values (618,22);
+insert into t (id,a) values (618,23);
+insert into t (id,a) values (618,24);
+insert into t (id,a) values (618,25);
+insert into t (id,a) values (618,26);
+insert into t (id,a) values (618,27);
+insert into t (id,a) values (618,28);
+insert into t (id,a) values (618,29);
+insert into t (id,a) values (618,30);
+insert into t (id,a) values (618,31);
+insert into t (id,a) values (618,32);
+insert into t (id,a) values (618,33);
+insert into t (id,a) values (618,34);
+insert into t (id,a) values (618,35);
+insert into t (id,a) values (618,36);
+insert into t (id,a) values (618,37);
+insert into t (id,a) values (618,38);
+insert into t (id,a) values (618,39);
+insert into t (id,a) values (618,40);
+insert into t (id,a) values (618,41);
+insert into t (id,a) values (618,42);
+insert into t (id,a) values (618,43);
+insert into t (id,a) values (618,44);
+insert into t (id,a) values (618,45);
+insert into t (id,a) values (618,46);
+insert into t (id,a) values (618,47);
+insert into t (id,a) values (618,48);
+insert into t (id,a) values (618,49);
+insert into t (id,a) values (618,50);
+insert into t (id,a) values (618,51);
+insert into t (id,a) values (618,52);
+insert into t (id,a) values (618,53);
+insert into t (id,a) values (618,54);
+insert into t (id,a) values (618,55);
+insert into t (id,a) values (618,56);
+insert into t (id,a) values (618,57);
+insert into t (id,a) values (618,58);
+insert into t (id,a) values (618,59);
+insert into t (id,a) values (618,60);
+insert into t (id,a) values (618,61);
+insert into t (id,a) values (618,62);
+insert into t (id,a) values (618,63);
+insert into t (id,a) values (618,64);
+insert into t (id,a) values (618,65);
+insert into t (id,a) values (618,66);
+insert into t (id,a) values (618,67);
+insert into t (id,a) values (618,68);
+insert into t (id,a) values (618,69);
+insert into t (id,a) values (618,70);
+insert into t (id,a) values (618,71);
+insert into t (id,a) values (618,72);
+insert into t (id,a) values (618,73);
+insert into t (id,a) values (618,74);
+insert into t (id,a) values (618,75);
+insert into t (id,a) values (618,76);
+insert into t (id,a) values (618,77);
+insert into t (id,a) values (618,78);
+insert into t (id,a) values (618,79);
+insert into t (id,a) values (618,80);
+insert into t (id,a) values (618,81);
+insert into t (id,a) values (618,82);
+insert into t (id,a) values (618,83);
+insert into t (id,a) values (618,84);
+insert into t (id,a) values (618,85);
+insert into t (id,a) values (618,86);
+insert into t (id,a) values (618,87);
+insert into t (id,a) values (618,88);
+insert into t (id,a) values (618,89);
+insert into t (id,a) values (618,90);
+insert into t (id,a) values (618,91);
+insert into t (id,a) values (618,92);
+insert into t (id,a) values (618,93);
+insert into t (id,a) values (618,94);
+insert into t (id,a) values (618,95);
+insert into t (id,a) values (618,96);
+insert into t (id,a) values (618,97);
+insert into t (id,a) values (618,98);
+insert into t (id,a) values (618,99);
+insert into t (id,a) values (619,0);
+insert into t (id,a) values (619,1);
+insert into t (id,a) values (619,2);
+insert into t (id,a) values (619,3);
+insert into t (id,a) values (619,4);
+insert into t (id,a) values (619,5);
+insert into t (id,a) values (619,6);
+insert into t (id,a) values (619,7);
+insert into t (id,a) values (619,8);
+insert into t (id,a) values (619,9);
+insert into t (id,a) values (619,10);
+insert into t (id,a) values (619,11);
+insert into t (id,a) values (619,12);
+insert into t (id,a) values (619,13);
+insert into t (id,a) values (619,14);
+insert into t (id,a) values (619,15);
+insert into t (id,a) values (619,16);
+insert into t (id,a) values (619,17);
+insert into t (id,a) values (619,18);
+insert into t (id,a) values (619,19);
+insert into t (id,a) values (619,20);
+insert into t (id,a) values (619,21);
+insert into t (id,a) values (619,22);
+insert into t (id,a) values (619,23);
+insert into t (id,a) values (619,24);
+insert into t (id,a) values (619,25);
+insert into t (id,a) values (619,26);
+insert into t (id,a) values (619,27);
+insert into t (id,a) values (619,28);
+insert into t (id,a) values (619,29);
+insert into t (id,a) values (619,30);
+insert into t (id,a) values (619,31);
+insert into t (id,a) values (619,32);
+insert into t (id,a) values (619,33);
+insert into t (id,a) values (619,34);
+insert into t (id,a) values (619,35);
+insert into t (id,a) values (619,36);
+insert into t (id,a) values (619,37);
+insert into t (id,a) values (619,38);
+insert into t (id,a) values (619,39);
+insert into t (id,a) values (619,40);
+insert into t (id,a) values (619,41);
+insert into t (id,a) values (619,42);
+insert into t (id,a) values (619,43);
+insert into t (id,a) values (619,44);
+insert into t (id,a) values (619,45);
+insert into t (id,a) values (619,46);
+insert into t (id,a) values (619,47);
+insert into t (id,a) values (619,48);
+insert into t (id,a) values (619,49);
+insert into t (id,a) values (619,50);
+insert into t (id,a) values (619,51);
+insert into t (id,a) values (619,52);
+insert into t (id,a) values (619,53);
+insert into t (id,a) values (619,54);
+insert into t (id,a) values (619,55);
+insert into t (id,a) values (619,56);
+insert into t (id,a) values (619,57);
+insert into t (id,a) values (619,58);
+insert into t (id,a) values (619,59);
+insert into t (id,a) values (619,60);
+insert into t (id,a) values (619,61);
+insert into t (id,a) values (619,62);
+insert into t (id,a) values (619,63);
+insert into t (id,a) values (619,64);
+insert into t (id,a) values (619,65);
+insert into t (id,a) values (619,66);
+insert into t (id,a) values (619,67);
+insert into t (id,a) values (619,68);
+insert into t (id,a) values (619,69);
+insert into t (id,a) values (619,70);
+insert into t (id,a) values (619,71);
+insert into t (id,a) values (619,72);
+insert into t (id,a) values (619,73);
+insert into t (id,a) values (619,74);
+insert into t (id,a) values (619,75);
+insert into t (id,a) values (619,76);
+insert into t (id,a) values (619,77);
+insert into t (id,a) values (619,78);
+insert into t (id,a) values (619,79);
+insert into t (id,a) values (619,80);
+insert into t (id,a) values (619,81);
+insert into t (id,a) values (619,82);
+insert into t (id,a) values (619,83);
+insert into t (id,a) values (619,84);
+insert into t (id,a) values (619,85);
+insert into t (id,a) values (619,86);
+insert into t (id,a) values (619,87);
+insert into t (id,a) values (619,88);
+insert into t (id,a) values (619,89);
+insert into t (id,a) values (619,90);
+insert into t (id,a) values (619,91);
+insert into t (id,a) values (619,92);
+insert into t (id,a) values (619,93);
+insert into t (id,a) values (619,94);
+insert into t (id,a) values (619,95);
+insert into t (id,a) values (619,96);
+insert into t (id,a) values (619,97);
+insert into t (id,a) values (619,98);
+insert into t (id,a) values (619,99);
+insert into t (id,a) values (620,0);
+insert into t (id,a) values (620,1);
+insert into t (id,a) values (620,2);
+insert into t (id,a) values (620,3);
+insert into t (id,a) values (620,4);
+insert into t (id,a) values (620,5);
+insert into t (id,a) values (620,6);
+insert into t (id,a) values (620,7);
+insert into t (id,a) values (620,8);
+insert into t (id,a) values (620,9);
+insert into t (id,a) values (620,10);
+insert into t (id,a) values (620,11);
+insert into t (id,a) values (620,12);
+insert into t (id,a) values (620,13);
+insert into t (id,a) values (620,14);
+insert into t (id,a) values (620,15);
+insert into t (id,a) values (620,16);
+insert into t (id,a) values (620,17);
+insert into t (id,a) values (620,18);
+insert into t (id,a) values (620,19);
+insert into t (id,a) values (620,20);
+insert into t (id,a) values (620,21);
+insert into t (id,a) values (620,22);
+insert into t (id,a) values (620,23);
+insert into t (id,a) values (620,24);
+insert into t (id,a) values (620,25);
+insert into t (id,a) values (620,26);
+insert into t (id,a) values (620,27);
+insert into t (id,a) values (620,28);
+insert into t (id,a) values (620,29);
+insert into t (id,a) values (620,30);
+insert into t (id,a) values (620,31);
+insert into t (id,a) values (620,32);
+insert into t (id,a) values (620,33);
+insert into t (id,a) values (620,34);
+insert into t (id,a) values (620,35);
+insert into t (id,a) values (620,36);
+insert into t (id,a) values (620,37);
+insert into t (id,a) values (620,38);
+insert into t (id,a) values (620,39);
+insert into t (id,a) values (620,40);
+insert into t (id,a) values (620,41);
+insert into t (id,a) values (620,42);
+insert into t (id,a) values (620,43);
+insert into t (id,a) values (620,44);
+insert into t (id,a) values (620,45);
+insert into t (id,a) values (620,46);
+insert into t (id,a) values (620,47);
+insert into t (id,a) values (620,48);
+insert into t (id,a) values (620,49);
+insert into t (id,a) values (620,50);
+insert into t (id,a) values (620,51);
+insert into t (id,a) values (620,52);
+insert into t (id,a) values (620,53);
+insert into t (id,a) values (620,54);
+insert into t (id,a) values (620,55);
+insert into t (id,a) values (620,56);
+insert into t (id,a) values (620,57);
+insert into t (id,a) values (620,58);
+insert into t (id,a) values (620,59);
+insert into t (id,a) values (620,60);
+insert into t (id,a) values (620,61);
+insert into t (id,a) values (620,62);
+insert into t (id,a) values (620,63);
+insert into t (id,a) values (620,64);
+insert into t (id,a) values (620,65);
+insert into t (id,a) values (620,66);
+insert into t (id,a) values (620,67);
+insert into t (id,a) values (620,68);
+insert into t (id,a) values (620,69);
+insert into t (id,a) values (620,70);
+insert into t (id,a) values (620,71);
+insert into t (id,a) values (620,72);
+insert into t (id,a) values (620,73);
+insert into t (id,a) values (620,74);
+insert into t (id,a) values (620,75);
+insert into t (id,a) values (620,76);
+insert into t (id,a) values (620,77);
+insert into t (id,a) values (620,78);
+insert into t (id,a) values (620,79);
+insert into t (id,a) values (620,80);
+insert into t (id,a) values (620,81);
+insert into t (id,a) values (620,82);
+insert into t (id,a) values (620,83);
+insert into t (id,a) values (620,84);
+insert into t (id,a) values (620,85);
+insert into t (id,a) values (620,86);
+insert into t (id,a) values (620,87);
+insert into t (id,a) values (620,88);
+insert into t (id,a) values (620,89);
+insert into t (id,a) values (620,90);
+insert into t (id,a) values (620,91);
+insert into t (id,a) values (620,92);
+insert into t (id,a) values (620,93);
+insert into t (id,a) values (620,94);
+insert into t (id,a) values (620,95);
+insert into t (id,a) values (620,96);
+insert into t (id,a) values (620,97);
+insert into t (id,a) values (620,98);
+insert into t (id,a) values (620,99);
+insert into t (id,a) values (621,0);
+insert into t (id,a) values (621,1);
+insert into t (id,a) values (621,2);
+insert into t (id,a) values (621,3);
+insert into t (id,a) values (621,4);
+insert into t (id,a) values (621,5);
+insert into t (id,a) values (621,6);
+insert into t (id,a) values (621,7);
+insert into t (id,a) values (621,8);
+insert into t (id,a) values (621,9);
+insert into t (id,a) values (621,10);
+insert into t (id,a) values (621,11);
+insert into t (id,a) values (621,12);
+insert into t (id,a) values (621,13);
+insert into t (id,a) values (621,14);
+insert into t (id,a) values (621,15);
+insert into t (id,a) values (621,16);
+insert into t (id,a) values (621,17);
+insert into t (id,a) values (621,18);
+insert into t (id,a) values (621,19);
+insert into t (id,a) values (621,20);
+insert into t (id,a) values (621,21);
+insert into t (id,a) values (621,22);
+insert into t (id,a) values (621,23);
+insert into t (id,a) values (621,24);
+insert into t (id,a) values (621,25);
+insert into t (id,a) values (621,26);
+insert into t (id,a) values (621,27);
+insert into t (id,a) values (621,28);
+insert into t (id,a) values (621,29);
+insert into t (id,a) values (621,30);
+insert into t (id,a) values (621,31);
+insert into t (id,a) values (621,32);
+insert into t (id,a) values (621,33);
+insert into t (id,a) values (621,34);
+insert into t (id,a) values (621,35);
+insert into t (id,a) values (621,36);
+insert into t (id,a) values (621,37);
+insert into t (id,a) values (621,38);
+insert into t (id,a) values (621,39);
+insert into t (id,a) values (621,40);
+insert into t (id,a) values (621,41);
+insert into t (id,a) values (621,42);
+insert into t (id,a) values (621,43);
+insert into t (id,a) values (621,44);
+insert into t (id,a) values (621,45);
+insert into t (id,a) values (621,46);
+insert into t (id,a) values (621,47);
+insert into t (id,a) values (621,48);
+insert into t (id,a) values (621,49);
+insert into t (id,a) values (621,50);
+insert into t (id,a) values (621,51);
+insert into t (id,a) values (621,52);
+insert into t (id,a) values (621,53);
+insert into t (id,a) values (621,54);
+insert into t (id,a) values (621,55);
+insert into t (id,a) values (621,56);
+insert into t (id,a) values (621,57);
+insert into t (id,a) values (621,58);
+insert into t (id,a) values (621,59);
+insert into t (id,a) values (621,60);
+insert into t (id,a) values (621,61);
+insert into t (id,a) values (621,62);
+insert into t (id,a) values (621,63);
+insert into t (id,a) values (621,64);
+insert into t (id,a) values (621,65);
+insert into t (id,a) values (621,66);
+insert into t (id,a) values (621,67);
+insert into t (id,a) values (621,68);
+insert into t (id,a) values (621,69);
+insert into t (id,a) values (621,70);
+insert into t (id,a) values (621,71);
+insert into t (id,a) values (621,72);
+insert into t (id,a) values (621,73);
+insert into t (id,a) values (621,74);
+insert into t (id,a) values (621,75);
+insert into t (id,a) values (621,76);
+insert into t (id,a) values (621,77);
+insert into t (id,a) values (621,78);
+insert into t (id,a) values (621,79);
+insert into t (id,a) values (621,80);
+insert into t (id,a) values (621,81);
+insert into t (id,a) values (621,82);
+insert into t (id,a) values (621,83);
+insert into t (id,a) values (621,84);
+insert into t (id,a) values (621,85);
+insert into t (id,a) values (621,86);
+insert into t (id,a) values (621,87);
+insert into t (id,a) values (621,88);
+insert into t (id,a) values (621,89);
+insert into t (id,a) values (621,90);
+insert into t (id,a) values (621,91);
+insert into t (id,a) values (621,92);
+insert into t (id,a) values (621,93);
+insert into t (id,a) values (621,94);
+insert into t (id,a) values (621,95);
+insert into t (id,a) values (621,96);
+insert into t (id,a) values (621,97);
+insert into t (id,a) values (621,98);
+insert into t (id,a) values (621,99);
+insert into t (id,a) values (622,0);
+insert into t (id,a) values (622,1);
+insert into t (id,a) values (622,2);
+insert into t (id,a) values (622,3);
+insert into t (id,a) values (622,4);
+insert into t (id,a) values (622,5);
+insert into t (id,a) values (622,6);
+insert into t (id,a) values (622,7);
+insert into t (id,a) values (622,8);
+insert into t (id,a) values (622,9);
+insert into t (id,a) values (622,10);
+insert into t (id,a) values (622,11);
+insert into t (id,a) values (622,12);
+insert into t (id,a) values (622,13);
+insert into t (id,a) values (622,14);
+insert into t (id,a) values (622,15);
+insert into t (id,a) values (622,16);
+insert into t (id,a) values (622,17);
+insert into t (id,a) values (622,18);
+insert into t (id,a) values (622,19);
+insert into t (id,a) values (622,20);
+insert into t (id,a) values (622,21);
+insert into t (id,a) values (622,22);
+insert into t (id,a) values (622,23);
+insert into t (id,a) values (622,24);
+insert into t (id,a) values (622,25);
+insert into t (id,a) values (622,26);
+insert into t (id,a) values (622,27);
+insert into t (id,a) values (622,28);
+insert into t (id,a) values (622,29);
+insert into t (id,a) values (622,30);
+insert into t (id,a) values (622,31);
+insert into t (id,a) values (622,32);
+insert into t (id,a) values (622,33);
+insert into t (id,a) values (622,34);
+insert into t (id,a) values (622,35);
+insert into t (id,a) values (622,36);
+insert into t (id,a) values (622,37);
+insert into t (id,a) values (622,38);
+insert into t (id,a) values (622,39);
+insert into t (id,a) values (622,40);
+insert into t (id,a) values (622,41);
+insert into t (id,a) values (622,42);
+insert into t (id,a) values (622,43);
+insert into t (id,a) values (622,44);
+insert into t (id,a) values (622,45);
+insert into t (id,a) values (622,46);
+insert into t (id,a) values (622,47);
+insert into t (id,a) values (622,48);
+insert into t (id,a) values (622,49);
+insert into t (id,a) values (622,50);
+insert into t (id,a) values (622,51);
+insert into t (id,a) values (622,52);
+insert into t (id,a) values (622,53);
+insert into t (id,a) values (622,54);
+insert into t (id,a) values (622,55);
+insert into t (id,a) values (622,56);
+insert into t (id,a) values (622,57);
+insert into t (id,a) values (622,58);
+insert into t (id,a) values (622,59);
+insert into t (id,a) values (622,60);
+insert into t (id,a) values (622,61);
+insert into t (id,a) values (622,62);
+insert into t (id,a) values (622,63);
+insert into t (id,a) values (622,64);
+insert into t (id,a) values (622,65);
+insert into t (id,a) values (622,66);
+insert into t (id,a) values (622,67);
+insert into t (id,a) values (622,68);
+insert into t (id,a) values (622,69);
+insert into t (id,a) values (622,70);
+insert into t (id,a) values (622,71);
+insert into t (id,a) values (622,72);
+insert into t (id,a) values (622,73);
+insert into t (id,a) values (622,74);
+insert into t (id,a) values (622,75);
+insert into t (id,a) values (622,76);
+insert into t (id,a) values (622,77);
+insert into t (id,a) values (622,78);
+insert into t (id,a) values (622,79);
+insert into t (id,a) values (622,80);
+insert into t (id,a) values (622,81);
+insert into t (id,a) values (622,82);
+insert into t (id,a) values (622,83);
+insert into t (id,a) values (622,84);
+insert into t (id,a) values (622,85);
+insert into t (id,a) values (622,86);
+insert into t (id,a) values (622,87);
+insert into t (id,a) values (622,88);
+insert into t (id,a) values (622,89);
+insert into t (id,a) values (622,90);
+insert into t (id,a) values (622,91);
+insert into t (id,a) values (622,92);
+insert into t (id,a) values (622,93);
+insert into t (id,a) values (622,94);
+insert into t (id,a) values (622,95);
+insert into t (id,a) values (622,96);
+insert into t (id,a) values (622,97);
+insert into t (id,a) values (622,98);
+insert into t (id,a) values (622,99);
+insert into t (id,a) values (623,0);
+insert into t (id,a) values (623,1);
+insert into t (id,a) values (623,2);
+insert into t (id,a) values (623,3);
+insert into t (id,a) values (623,4);
+insert into t (id,a) values (623,5);
+insert into t (id,a) values (623,6);
+insert into t (id,a) values (623,7);
+insert into t (id,a) values (623,8);
+insert into t (id,a) values (623,9);
+insert into t (id,a) values (623,10);
+insert into t (id,a) values (623,11);
+insert into t (id,a) values (623,12);
+insert into t (id,a) values (623,13);
+insert into t (id,a) values (623,14);
+insert into t (id,a) values (623,15);
+insert into t (id,a) values (623,16);
+insert into t (id,a) values (623,17);
+insert into t (id,a) values (623,18);
+insert into t (id,a) values (623,19);
+insert into t (id,a) values (623,20);
+insert into t (id,a) values (623,21);
+insert into t (id,a) values (623,22);
+insert into t (id,a) values (623,23);
+insert into t (id,a) values (623,24);
+insert into t (id,a) values (623,25);
+insert into t (id,a) values (623,26);
+insert into t (id,a) values (623,27);
+insert into t (id,a) values (623,28);
+insert into t (id,a) values (623,29);
+insert into t (id,a) values (623,30);
+insert into t (id,a) values (623,31);
+insert into t (id,a) values (623,32);
+insert into t (id,a) values (623,33);
+insert into t (id,a) values (623,34);
+insert into t (id,a) values (623,35);
+insert into t (id,a) values (623,36);
+insert into t (id,a) values (623,37);
+insert into t (id,a) values (623,38);
+insert into t (id,a) values (623,39);
+insert into t (id,a) values (623,40);
+insert into t (id,a) values (623,41);
+insert into t (id,a) values (623,42);
+insert into t (id,a) values (623,43);
+insert into t (id,a) values (623,44);
+insert into t (id,a) values (623,45);
+insert into t (id,a) values (623,46);
+insert into t (id,a) values (623,47);
+insert into t (id,a) values (623,48);
+insert into t (id,a) values (623,49);
+insert into t (id,a) values (623,50);
+insert into t (id,a) values (623,51);
+insert into t (id,a) values (623,52);
+insert into t (id,a) values (623,53);
+insert into t (id,a) values (623,54);
+insert into t (id,a) values (623,55);
+insert into t (id,a) values (623,56);
+insert into t (id,a) values (623,57);
+insert into t (id,a) values (623,58);
+insert into t (id,a) values (623,59);
+insert into t (id,a) values (623,60);
+insert into t (id,a) values (623,61);
+insert into t (id,a) values (623,62);
+insert into t (id,a) values (623,63);
+insert into t (id,a) values (623,64);
+insert into t (id,a) values (623,65);
+insert into t (id,a) values (623,66);
+insert into t (id,a) values (623,67);
+insert into t (id,a) values (623,68);
+insert into t (id,a) values (623,69);
+insert into t (id,a) values (623,70);
+insert into t (id,a) values (623,71);
+insert into t (id,a) values (623,72);
+insert into t (id,a) values (623,73);
+insert into t (id,a) values (623,74);
+insert into t (id,a) values (623,75);
+insert into t (id,a) values (623,76);
+insert into t (id,a) values (623,77);
+insert into t (id,a) values (623,78);
+insert into t (id,a) values (623,79);
+insert into t (id,a) values (623,80);
+insert into t (id,a) values (623,81);
+insert into t (id,a) values (623,82);
+insert into t (id,a) values (623,83);
+insert into t (id,a) values (623,84);
+insert into t (id,a) values (623,85);
+insert into t (id,a) values (623,86);
+insert into t (id,a) values (623,87);
+insert into t (id,a) values (623,88);
+insert into t (id,a) values (623,89);
+insert into t (id,a) values (623,90);
+insert into t (id,a) values (623,91);
+insert into t (id,a) values (623,92);
+insert into t (id,a) values (623,93);
+insert into t (id,a) values (623,94);
+insert into t (id,a) values (623,95);
+insert into t (id,a) values (623,96);
+insert into t (id,a) values (623,97);
+insert into t (id,a) values (623,98);
+insert into t (id,a) values (623,99);
+insert into t (id,a) values (624,0);
+insert into t (id,a) values (624,1);
+insert into t (id,a) values (624,2);
+insert into t (id,a) values (624,3);
+insert into t (id,a) values (624,4);
+insert into t (id,a) values (624,5);
+insert into t (id,a) values (624,6);
+insert into t (id,a) values (624,7);
+insert into t (id,a) values (624,8);
+insert into t (id,a) values (624,9);
+insert into t (id,a) values (624,10);
+insert into t (id,a) values (624,11);
+insert into t (id,a) values (624,12);
+insert into t (id,a) values (624,13);
+insert into t (id,a) values (624,14);
+insert into t (id,a) values (624,15);
+insert into t (id,a) values (624,16);
+insert into t (id,a) values (624,17);
+insert into t (id,a) values (624,18);
+insert into t (id,a) values (624,19);
+insert into t (id,a) values (624,20);
+insert into t (id,a) values (624,21);
+insert into t (id,a) values (624,22);
+insert into t (id,a) values (624,23);
+insert into t (id,a) values (624,24);
+insert into t (id,a) values (624,25);
+insert into t (id,a) values (624,26);
+insert into t (id,a) values (624,27);
+insert into t (id,a) values (624,28);
+insert into t (id,a) values (624,29);
+insert into t (id,a) values (624,30);
+insert into t (id,a) values (624,31);
+insert into t (id,a) values (624,32);
+insert into t (id,a) values (624,33);
+insert into t (id,a) values (624,34);
+insert into t (id,a) values (624,35);
+insert into t (id,a) values (624,36);
+insert into t (id,a) values (624,37);
+insert into t (id,a) values (624,38);
+insert into t (id,a) values (624,39);
+insert into t (id,a) values (624,40);
+insert into t (id,a) values (624,41);
+insert into t (id,a) values (624,42);
+insert into t (id,a) values (624,43);
+insert into t (id,a) values (624,44);
+insert into t (id,a) values (624,45);
+insert into t (id,a) values (624,46);
+insert into t (id,a) values (624,47);
+insert into t (id,a) values (624,48);
+insert into t (id,a) values (624,49);
+insert into t (id,a) values (624,50);
+insert into t (id,a) values (624,51);
+insert into t (id,a) values (624,52);
+insert into t (id,a) values (624,53);
+insert into t (id,a) values (624,54);
+insert into t (id,a) values (624,55);
+insert into t (id,a) values (624,56);
+insert into t (id,a) values (624,57);
+insert into t (id,a) values (624,58);
+insert into t (id,a) values (624,59);
+insert into t (id,a) values (624,60);
+insert into t (id,a) values (624,61);
+insert into t (id,a) values (624,62);
+insert into t (id,a) values (624,63);
+insert into t (id,a) values (624,64);
+insert into t (id,a) values (624,65);
+insert into t (id,a) values (624,66);
+insert into t (id,a) values (624,67);
+insert into t (id,a) values (624,68);
+insert into t (id,a) values (624,69);
+insert into t (id,a) values (624,70);
+insert into t (id,a) values (624,71);
+insert into t (id,a) values (624,72);
+insert into t (id,a) values (624,73);
+insert into t (id,a) values (624,74);
+insert into t (id,a) values (624,75);
+insert into t (id,a) values (624,76);
+insert into t (id,a) values (624,77);
+insert into t (id,a) values (624,78);
+insert into t (id,a) values (624,79);
+insert into t (id,a) values (624,80);
+insert into t (id,a) values (624,81);
+insert into t (id,a) values (624,82);
+insert into t (id,a) values (624,83);
+insert into t (id,a) values (624,84);
+insert into t (id,a) values (624,85);
+insert into t (id,a) values (624,86);
+insert into t (id,a) values (624,87);
+insert into t (id,a) values (624,88);
+insert into t (id,a) values (624,89);
+insert into t (id,a) values (624,90);
+insert into t (id,a) values (624,91);
+insert into t (id,a) values (624,92);
+insert into t (id,a) values (624,93);
+insert into t (id,a) values (624,94);
+insert into t (id,a) values (624,95);
+insert into t (id,a) values (624,96);
+insert into t (id,a) values (624,97);
+insert into t (id,a) values (624,98);
+insert into t (id,a) values (624,99);
+insert into t (id,a) values (625,0);
+insert into t (id,a) values (625,1);
+insert into t (id,a) values (625,2);
+insert into t (id,a) values (625,3);
+insert into t (id,a) values (625,4);
+insert into t (id,a) values (625,5);
+insert into t (id,a) values (625,6);
+insert into t (id,a) values (625,7);
+insert into t (id,a) values (625,8);
+insert into t (id,a) values (625,9);
+insert into t (id,a) values (625,10);
+insert into t (id,a) values (625,11);
+insert into t (id,a) values (625,12);
+insert into t (id,a) values (625,13);
+insert into t (id,a) values (625,14);
+insert into t (id,a) values (625,15);
+insert into t (id,a) values (625,16);
+insert into t (id,a) values (625,17);
+insert into t (id,a) values (625,18);
+insert into t (id,a) values (625,19);
+insert into t (id,a) values (625,20);
+insert into t (id,a) values (625,21);
+insert into t (id,a) values (625,22);
+insert into t (id,a) values (625,23);
+insert into t (id,a) values (625,24);
+insert into t (id,a) values (625,25);
+insert into t (id,a) values (625,26);
+insert into t (id,a) values (625,27);
+insert into t (id,a) values (625,28);
+insert into t (id,a) values (625,29);
+insert into t (id,a) values (625,30);
+insert into t (id,a) values (625,31);
+insert into t (id,a) values (625,32);
+insert into t (id,a) values (625,33);
+insert into t (id,a) values (625,34);
+insert into t (id,a) values (625,35);
+insert into t (id,a) values (625,36);
+insert into t (id,a) values (625,37);
+insert into t (id,a) values (625,38);
+insert into t (id,a) values (625,39);
+insert into t (id,a) values (625,40);
+insert into t (id,a) values (625,41);
+insert into t (id,a) values (625,42);
+insert into t (id,a) values (625,43);
+insert into t (id,a) values (625,44);
+insert into t (id,a) values (625,45);
+insert into t (id,a) values (625,46);
+insert into t (id,a) values (625,47);
+insert into t (id,a) values (625,48);
+insert into t (id,a) values (625,49);
+insert into t (id,a) values (625,50);
+insert into t (id,a) values (625,51);
+insert into t (id,a) values (625,52);
+insert into t (id,a) values (625,53);
+insert into t (id,a) values (625,54);
+insert into t (id,a) values (625,55);
+insert into t (id,a) values (625,56);
+insert into t (id,a) values (625,57);
+insert into t (id,a) values (625,58);
+insert into t (id,a) values (625,59);
+insert into t (id,a) values (625,60);
+insert into t (id,a) values (625,61);
+insert into t (id,a) values (625,62);
+insert into t (id,a) values (625,63);
+insert into t (id,a) values (625,64);
+insert into t (id,a) values (625,65);
+insert into t (id,a) values (625,66);
+insert into t (id,a) values (625,67);
+insert into t (id,a) values (625,68);
+insert into t (id,a) values (625,69);
+insert into t (id,a) values (625,70);
+insert into t (id,a) values (625,71);
+insert into t (id,a) values (625,72);
+insert into t (id,a) values (625,73);
+insert into t (id,a) values (625,74);
+insert into t (id,a) values (625,75);
+insert into t (id,a) values (625,76);
+insert into t (id,a) values (625,77);
+insert into t (id,a) values (625,78);
+insert into t (id,a) values (625,79);
+insert into t (id,a) values (625,80);
+insert into t (id,a) values (625,81);
+insert into t (id,a) values (625,82);
+insert into t (id,a) values (625,83);
+insert into t (id,a) values (625,84);
+insert into t (id,a) values (625,85);
+insert into t (id,a) values (625,86);
+insert into t (id,a) values (625,87);
+insert into t (id,a) values (625,88);
+insert into t (id,a) values (625,89);
+insert into t (id,a) values (625,90);
+insert into t (id,a) values (625,91);
+insert into t (id,a) values (625,92);
+insert into t (id,a) values (625,93);
+insert into t (id,a) values (625,94);
+insert into t (id,a) values (625,95);
+insert into t (id,a) values (625,96);
+insert into t (id,a) values (625,97);
+insert into t (id,a) values (625,98);
+insert into t (id,a) values (625,99);
+insert into t (id,a) values (626,0);
+insert into t (id,a) values (626,1);
+insert into t (id,a) values (626,2);
+insert into t (id,a) values (626,3);
+insert into t (id,a) values (626,4);
+insert into t (id,a) values (626,5);
+insert into t (id,a) values (626,6);
+insert into t (id,a) values (626,7);
+insert into t (id,a) values (626,8);
+insert into t (id,a) values (626,9);
+insert into t (id,a) values (626,10);
+insert into t (id,a) values (626,11);
+insert into t (id,a) values (626,12);
+insert into t (id,a) values (626,13);
+insert into t (id,a) values (626,14);
+insert into t (id,a) values (626,15);
+insert into t (id,a) values (626,16);
+insert into t (id,a) values (626,17);
+insert into t (id,a) values (626,18);
+insert into t (id,a) values (626,19);
+insert into t (id,a) values (626,20);
+insert into t (id,a) values (626,21);
+insert into t (id,a) values (626,22);
+insert into t (id,a) values (626,23);
+insert into t (id,a) values (626,24);
+insert into t (id,a) values (626,25);
+insert into t (id,a) values (626,26);
+insert into t (id,a) values (626,27);
+insert into t (id,a) values (626,28);
+insert into t (id,a) values (626,29);
+insert into t (id,a) values (626,30);
+insert into t (id,a) values (626,31);
+insert into t (id,a) values (626,32);
+insert into t (id,a) values (626,33);
+insert into t (id,a) values (626,34);
+insert into t (id,a) values (626,35);
+insert into t (id,a) values (626,36);
+insert into t (id,a) values (626,37);
+insert into t (id,a) values (626,38);
+insert into t (id,a) values (626,39);
+insert into t (id,a) values (626,40);
+insert into t (id,a) values (626,41);
+insert into t (id,a) values (626,42);
+insert into t (id,a) values (626,43);
+insert into t (id,a) values (626,44);
+insert into t (id,a) values (626,45);
+insert into t (id,a) values (626,46);
+insert into t (id,a) values (626,47);
+insert into t (id,a) values (626,48);
+insert into t (id,a) values (626,49);
+insert into t (id,a) values (626,50);
+insert into t (id,a) values (626,51);
+insert into t (id,a) values (626,52);
+insert into t (id,a) values (626,53);
+insert into t (id,a) values (626,54);
+insert into t (id,a) values (626,55);
+insert into t (id,a) values (626,56);
+insert into t (id,a) values (626,57);
+insert into t (id,a) values (626,58);
+insert into t (id,a) values (626,59);
+insert into t (id,a) values (626,60);
+insert into t (id,a) values (626,61);
+insert into t (id,a) values (626,62);
+insert into t (id,a) values (626,63);
+insert into t (id,a) values (626,64);
+insert into t (id,a) values (626,65);
+insert into t (id,a) values (626,66);
+insert into t (id,a) values (626,67);
+insert into t (id,a) values (626,68);
+insert into t (id,a) values (626,69);
+insert into t (id,a) values (626,70);
+insert into t (id,a) values (626,71);
+insert into t (id,a) values (626,72);
+insert into t (id,a) values (626,73);
+insert into t (id,a) values (626,74);
+insert into t (id,a) values (626,75);
+insert into t (id,a) values (626,76);
+insert into t (id,a) values (626,77);
+insert into t (id,a) values (626,78);
+insert into t (id,a) values (626,79);
+insert into t (id,a) values (626,80);
+insert into t (id,a) values (626,81);
+insert into t (id,a) values (626,82);
+insert into t (id,a) values (626,83);
+insert into t (id,a) values (626,84);
+insert into t (id,a) values (626,85);
+insert into t (id,a) values (626,86);
+insert into t (id,a) values (626,87);
+insert into t (id,a) values (626,88);
+insert into t (id,a) values (626,89);
+insert into t (id,a) values (626,90);
+insert into t (id,a) values (626,91);
+insert into t (id,a) values (626,92);
+insert into t (id,a) values (626,93);
+insert into t (id,a) values (626,94);
+insert into t (id,a) values (626,95);
+insert into t (id,a) values (626,96);
+insert into t (id,a) values (626,97);
+insert into t (id,a) values (626,98);
+insert into t (id,a) values (626,99);
+insert into t (id,a) values (627,0);
+insert into t (id,a) values (627,1);
+insert into t (id,a) values (627,2);
+insert into t (id,a) values (627,3);
+insert into t (id,a) values (627,4);
+insert into t (id,a) values (627,5);
+insert into t (id,a) values (627,6);
+insert into t (id,a) values (627,7);
+insert into t (id,a) values (627,8);
+insert into t (id,a) values (627,9);
+insert into t (id,a) values (627,10);
+insert into t (id,a) values (627,11);
+insert into t (id,a) values (627,12);
+insert into t (id,a) values (627,13);
+insert into t (id,a) values (627,14);
+insert into t (id,a) values (627,15);
+insert into t (id,a) values (627,16);
+insert into t (id,a) values (627,17);
+insert into t (id,a) values (627,18);
+insert into t (id,a) values (627,19);
+insert into t (id,a) values (627,20);
+insert into t (id,a) values (627,21);
+insert into t (id,a) values (627,22);
+insert into t (id,a) values (627,23);
+insert into t (id,a) values (627,24);
+insert into t (id,a) values (627,25);
+insert into t (id,a) values (627,26);
+insert into t (id,a) values (627,27);
+insert into t (id,a) values (627,28);
+insert into t (id,a) values (627,29);
+insert into t (id,a) values (627,30);
+insert into t (id,a) values (627,31);
+insert into t (id,a) values (627,32);
+insert into t (id,a) values (627,33);
+insert into t (id,a) values (627,34);
+insert into t (id,a) values (627,35);
+insert into t (id,a) values (627,36);
+insert into t (id,a) values (627,37);
+insert into t (id,a) values (627,38);
+insert into t (id,a) values (627,39);
+insert into t (id,a) values (627,40);
+insert into t (id,a) values (627,41);
+insert into t (id,a) values (627,42);
+insert into t (id,a) values (627,43);
+insert into t (id,a) values (627,44);
+insert into t (id,a) values (627,45);
+insert into t (id,a) values (627,46);
+insert into t (id,a) values (627,47);
+insert into t (id,a) values (627,48);
+insert into t (id,a) values (627,49);
+insert into t (id,a) values (627,50);
+insert into t (id,a) values (627,51);
+insert into t (id,a) values (627,52);
+insert into t (id,a) values (627,53);
+insert into t (id,a) values (627,54);
+insert into t (id,a) values (627,55);
+insert into t (id,a) values (627,56);
+insert into t (id,a) values (627,57);
+insert into t (id,a) values (627,58);
+insert into t (id,a) values (627,59);
+insert into t (id,a) values (627,60);
+insert into t (id,a) values (627,61);
+insert into t (id,a) values (627,62);
+insert into t (id,a) values (627,63);
+insert into t (id,a) values (627,64);
+insert into t (id,a) values (627,65);
+insert into t (id,a) values (627,66);
+insert into t (id,a) values (627,67);
+insert into t (id,a) values (627,68);
+insert into t (id,a) values (627,69);
+insert into t (id,a) values (627,70);
+insert into t (id,a) values (627,71);
+insert into t (id,a) values (627,72);
+insert into t (id,a) values (627,73);
+insert into t (id,a) values (627,74);
+insert into t (id,a) values (627,75);
+insert into t (id,a) values (627,76);
+insert into t (id,a) values (627,77);
+insert into t (id,a) values (627,78);
+insert into t (id,a) values (627,79);
+insert into t (id,a) values (627,80);
+insert into t (id,a) values (627,81);
+insert into t (id,a) values (627,82);
+insert into t (id,a) values (627,83);
+insert into t (id,a) values (627,84);
+insert into t (id,a) values (627,85);
+insert into t (id,a) values (627,86);
+insert into t (id,a) values (627,87);
+insert into t (id,a) values (627,88);
+insert into t (id,a) values (627,89);
+insert into t (id,a) values (627,90);
+insert into t (id,a) values (627,91);
+insert into t (id,a) values (627,92);
+insert into t (id,a) values (627,93);
+insert into t (id,a) values (627,94);
+insert into t (id,a) values (627,95);
+insert into t (id,a) values (627,96);
+insert into t (id,a) values (627,97);
+insert into t (id,a) values (627,98);
+insert into t (id,a) values (627,99);
+insert into t (id,a) values (628,0);
+insert into t (id,a) values (628,1);
+insert into t (id,a) values (628,2);
+insert into t (id,a) values (628,3);
+insert into t (id,a) values (628,4);
+insert into t (id,a) values (628,5);
+insert into t (id,a) values (628,6);
+insert into t (id,a) values (628,7);
+insert into t (id,a) values (628,8);
+insert into t (id,a) values (628,9);
+insert into t (id,a) values (628,10);
+insert into t (id,a) values (628,11);
+insert into t (id,a) values (628,12);
+insert into t (id,a) values (628,13);
+insert into t (id,a) values (628,14);
+insert into t (id,a) values (628,15);
+insert into t (id,a) values (628,16);
+insert into t (id,a) values (628,17);
+insert into t (id,a) values (628,18);
+insert into t (id,a) values (628,19);
+insert into t (id,a) values (628,20);
+insert into t (id,a) values (628,21);
+insert into t (id,a) values (628,22);
+insert into t (id,a) values (628,23);
+insert into t (id,a) values (628,24);
+insert into t (id,a) values (628,25);
+insert into t (id,a) values (628,26);
+insert into t (id,a) values (628,27);
+insert into t (id,a) values (628,28);
+insert into t (id,a) values (628,29);
+insert into t (id,a) values (628,30);
+insert into t (id,a) values (628,31);
+insert into t (id,a) values (628,32);
+insert into t (id,a) values (628,33);
+insert into t (id,a) values (628,34);
+insert into t (id,a) values (628,35);
+insert into t (id,a) values (628,36);
+insert into t (id,a) values (628,37);
+insert into t (id,a) values (628,38);
+insert into t (id,a) values (628,39);
+insert into t (id,a) values (628,40);
+insert into t (id,a) values (628,41);
+insert into t (id,a) values (628,42);
+insert into t (id,a) values (628,43);
+insert into t (id,a) values (628,44);
+insert into t (id,a) values (628,45);
+insert into t (id,a) values (628,46);
+insert into t (id,a) values (628,47);
+insert into t (id,a) values (628,48);
+insert into t (id,a) values (628,49);
+insert into t (id,a) values (628,50);
+insert into t (id,a) values (628,51);
+insert into t (id,a) values (628,52);
+insert into t (id,a) values (628,53);
+insert into t (id,a) values (628,54);
+insert into t (id,a) values (628,55);
+insert into t (id,a) values (628,56);
+insert into t (id,a) values (628,57);
+insert into t (id,a) values (628,58);
+insert into t (id,a) values (628,59);
+insert into t (id,a) values (628,60);
+insert into t (id,a) values (628,61);
+insert into t (id,a) values (628,62);
+insert into t (id,a) values (628,63);
+insert into t (id,a) values (628,64);
+insert into t (id,a) values (628,65);
+insert into t (id,a) values (628,66);
+insert into t (id,a) values (628,67);
+insert into t (id,a) values (628,68);
+insert into t (id,a) values (628,69);
+insert into t (id,a) values (628,70);
+insert into t (id,a) values (628,71);
+insert into t (id,a) values (628,72);
+insert into t (id,a) values (628,73);
+insert into t (id,a) values (628,74);
+insert into t (id,a) values (628,75);
+insert into t (id,a) values (628,76);
+insert into t (id,a) values (628,77);
+insert into t (id,a) values (628,78);
+insert into t (id,a) values (628,79);
+insert into t (id,a) values (628,80);
+insert into t (id,a) values (628,81);
+insert into t (id,a) values (628,82);
+insert into t (id,a) values (628,83);
+insert into t (id,a) values (628,84);
+insert into t (id,a) values (628,85);
+insert into t (id,a) values (628,86);
+insert into t (id,a) values (628,87);
+insert into t (id,a) values (628,88);
+insert into t (id,a) values (628,89);
+insert into t (id,a) values (628,90);
+insert into t (id,a) values (628,91);
+insert into t (id,a) values (628,92);
+insert into t (id,a) values (628,93);
+insert into t (id,a) values (628,94);
+insert into t (id,a) values (628,95);
+insert into t (id,a) values (628,96);
+insert into t (id,a) values (628,97);
+insert into t (id,a) values (628,98);
+insert into t (id,a) values (628,99);
+insert into t (id,a) values (629,0);
+insert into t (id,a) values (629,1);
+insert into t (id,a) values (629,2);
+insert into t (id,a) values (629,3);
+insert into t (id,a) values (629,4);
+insert into t (id,a) values (629,5);
+insert into t (id,a) values (629,6);
+insert into t (id,a) values (629,7);
+insert into t (id,a) values (629,8);
+insert into t (id,a) values (629,9);
+insert into t (id,a) values (629,10);
+insert into t (id,a) values (629,11);
+insert into t (id,a) values (629,12);
+insert into t (id,a) values (629,13);
+insert into t (id,a) values (629,14);
+insert into t (id,a) values (629,15);
+insert into t (id,a) values (629,16);
+insert into t (id,a) values (629,17);
+insert into t (id,a) values (629,18);
+insert into t (id,a) values (629,19);
+insert into t (id,a) values (629,20);
+insert into t (id,a) values (629,21);
+insert into t (id,a) values (629,22);
+insert into t (id,a) values (629,23);
+insert into t (id,a) values (629,24);
+insert into t (id,a) values (629,25);
+insert into t (id,a) values (629,26);
+insert into t (id,a) values (629,27);
+insert into t (id,a) values (629,28);
+insert into t (id,a) values (629,29);
+insert into t (id,a) values (629,30);
+insert into t (id,a) values (629,31);
+insert into t (id,a) values (629,32);
+insert into t (id,a) values (629,33);
+insert into t (id,a) values (629,34);
+insert into t (id,a) values (629,35);
+insert into t (id,a) values (629,36);
+insert into t (id,a) values (629,37);
+insert into t (id,a) values (629,38);
+insert into t (id,a) values (629,39);
+insert into t (id,a) values (629,40);
+insert into t (id,a) values (629,41);
+insert into t (id,a) values (629,42);
+insert into t (id,a) values (629,43);
+insert into t (id,a) values (629,44);
+insert into t (id,a) values (629,45);
+insert into t (id,a) values (629,46);
+insert into t (id,a) values (629,47);
+insert into t (id,a) values (629,48);
+insert into t (id,a) values (629,49);
+insert into t (id,a) values (629,50);
+insert into t (id,a) values (629,51);
+insert into t (id,a) values (629,52);
+insert into t (id,a) values (629,53);
+insert into t (id,a) values (629,54);
+insert into t (id,a) values (629,55);
+insert into t (id,a) values (629,56);
+insert into t (id,a) values (629,57);
+insert into t (id,a) values (629,58);
+insert into t (id,a) values (629,59);
+insert into t (id,a) values (629,60);
+insert into t (id,a) values (629,61);
+insert into t (id,a) values (629,62);
+insert into t (id,a) values (629,63);
+insert into t (id,a) values (629,64);
+insert into t (id,a) values (629,65);
+insert into t (id,a) values (629,66);
+insert into t (id,a) values (629,67);
+insert into t (id,a) values (629,68);
+insert into t (id,a) values (629,69);
+insert into t (id,a) values (629,70);
+insert into t (id,a) values (629,71);
+insert into t (id,a) values (629,72);
+insert into t (id,a) values (629,73);
+insert into t (id,a) values (629,74);
+insert into t (id,a) values (629,75);
+insert into t (id,a) values (629,76);
+insert into t (id,a) values (629,77);
+insert into t (id,a) values (629,78);
+insert into t (id,a) values (629,79);
+insert into t (id,a) values (629,80);
+insert into t (id,a) values (629,81);
+insert into t (id,a) values (629,82);
+insert into t (id,a) values (629,83);
+insert into t (id,a) values (629,84);
+insert into t (id,a) values (629,85);
+insert into t (id,a) values (629,86);
+insert into t (id,a) values (629,87);
+insert into t (id,a) values (629,88);
+insert into t (id,a) values (629,89);
+insert into t (id,a) values (629,90);
+insert into t (id,a) values (629,91);
+insert into t (id,a) values (629,92);
+insert into t (id,a) values (629,93);
+insert into t (id,a) values (629,94);
+insert into t (id,a) values (629,95);
+insert into t (id,a) values (629,96);
+insert into t (id,a) values (629,97);
+insert into t (id,a) values (629,98);
+insert into t (id,a) values (629,99);
+insert into t (id,a) values (630,0);
+insert into t (id,a) values (630,1);
+insert into t (id,a) values (630,2);
+insert into t (id,a) values (630,3);
+insert into t (id,a) values (630,4);
+insert into t (id,a) values (630,5);
+insert into t (id,a) values (630,6);
+insert into t (id,a) values (630,7);
+insert into t (id,a) values (630,8);
+insert into t (id,a) values (630,9);
+insert into t (id,a) values (630,10);
+insert into t (id,a) values (630,11);
+insert into t (id,a) values (630,12);
+insert into t (id,a) values (630,13);
+insert into t (id,a) values (630,14);
+insert into t (id,a) values (630,15);
+insert into t (id,a) values (630,16);
+insert into t (id,a) values (630,17);
+insert into t (id,a) values (630,18);
+insert into t (id,a) values (630,19);
+insert into t (id,a) values (630,20);
+insert into t (id,a) values (630,21);
+insert into t (id,a) values (630,22);
+insert into t (id,a) values (630,23);
+insert into t (id,a) values (630,24);
+insert into t (id,a) values (630,25);
+insert into t (id,a) values (630,26);
+insert into t (id,a) values (630,27);
+insert into t (id,a) values (630,28);
+insert into t (id,a) values (630,29);
+insert into t (id,a) values (630,30);
+insert into t (id,a) values (630,31);
+insert into t (id,a) values (630,32);
+insert into t (id,a) values (630,33);
+insert into t (id,a) values (630,34);
+insert into t (id,a) values (630,35);
+insert into t (id,a) values (630,36);
+insert into t (id,a) values (630,37);
+insert into t (id,a) values (630,38);
+insert into t (id,a) values (630,39);
+insert into t (id,a) values (630,40);
+insert into t (id,a) values (630,41);
+insert into t (id,a) values (630,42);
+insert into t (id,a) values (630,43);
+insert into t (id,a) values (630,44);
+insert into t (id,a) values (630,45);
+insert into t (id,a) values (630,46);
+insert into t (id,a) values (630,47);
+insert into t (id,a) values (630,48);
+insert into t (id,a) values (630,49);
+insert into t (id,a) values (630,50);
+insert into t (id,a) values (630,51);
+insert into t (id,a) values (630,52);
+insert into t (id,a) values (630,53);
+insert into t (id,a) values (630,54);
+insert into t (id,a) values (630,55);
+insert into t (id,a) values (630,56);
+insert into t (id,a) values (630,57);
+insert into t (id,a) values (630,58);
+insert into t (id,a) values (630,59);
+insert into t (id,a) values (630,60);
+insert into t (id,a) values (630,61);
+insert into t (id,a) values (630,62);
+insert into t (id,a) values (630,63);
+insert into t (id,a) values (630,64);
+insert into t (id,a) values (630,65);
+insert into t (id,a) values (630,66);
+insert into t (id,a) values (630,67);
+insert into t (id,a) values (630,68);
+insert into t (id,a) values (630,69);
+insert into t (id,a) values (630,70);
+insert into t (id,a) values (630,71);
+insert into t (id,a) values (630,72);
+insert into t (id,a) values (630,73);
+insert into t (id,a) values (630,74);
+insert into t (id,a) values (630,75);
+insert into t (id,a) values (630,76);
+insert into t (id,a) values (630,77);
+insert into t (id,a) values (630,78);
+insert into t (id,a) values (630,79);
+insert into t (id,a) values (630,80);
+insert into t (id,a) values (630,81);
+insert into t (id,a) values (630,82);
+insert into t (id,a) values (630,83);
+insert into t (id,a) values (630,84);
+insert into t (id,a) values (630,85);
+insert into t (id,a) values (630,86);
+insert into t (id,a) values (630,87);
+insert into t (id,a) values (630,88);
+insert into t (id,a) values (630,89);
+insert into t (id,a) values (630,90);
+insert into t (id,a) values (630,91);
+insert into t (id,a) values (630,92);
+insert into t (id,a) values (630,93);
+insert into t (id,a) values (630,94);
+insert into t (id,a) values (630,95);
+insert into t (id,a) values (630,96);
+insert into t (id,a) values (630,97);
+insert into t (id,a) values (630,98);
+insert into t (id,a) values (630,99);
+insert into t (id,a) values (631,0);
+insert into t (id,a) values (631,1);
+insert into t (id,a) values (631,2);
+insert into t (id,a) values (631,3);
+insert into t (id,a) values (631,4);
+insert into t (id,a) values (631,5);
+insert into t (id,a) values (631,6);
+insert into t (id,a) values (631,7);
+insert into t (id,a) values (631,8);
+insert into t (id,a) values (631,9);
+insert into t (id,a) values (631,10);
+insert into t (id,a) values (631,11);
+insert into t (id,a) values (631,12);
+insert into t (id,a) values (631,13);
+insert into t (id,a) values (631,14);
+insert into t (id,a) values (631,15);
+insert into t (id,a) values (631,16);
+insert into t (id,a) values (631,17);
+insert into t (id,a) values (631,18);
+insert into t (id,a) values (631,19);
+insert into t (id,a) values (631,20);
+insert into t (id,a) values (631,21);
+insert into t (id,a) values (631,22);
+insert into t (id,a) values (631,23);
+insert into t (id,a) values (631,24);
+insert into t (id,a) values (631,25);
+insert into t (id,a) values (631,26);
+insert into t (id,a) values (631,27);
+insert into t (id,a) values (631,28);
+insert into t (id,a) values (631,29);
+insert into t (id,a) values (631,30);
+insert into t (id,a) values (631,31);
+insert into t (id,a) values (631,32);
+insert into t (id,a) values (631,33);
+insert into t (id,a) values (631,34);
+insert into t (id,a) values (631,35);
+insert into t (id,a) values (631,36);
+insert into t (id,a) values (631,37);
+insert into t (id,a) values (631,38);
+insert into t (id,a) values (631,39);
+insert into t (id,a) values (631,40);
+insert into t (id,a) values (631,41);
+insert into t (id,a) values (631,42);
+insert into t (id,a) values (631,43);
+insert into t (id,a) values (631,44);
+insert into t (id,a) values (631,45);
+insert into t (id,a) values (631,46);
+insert into t (id,a) values (631,47);
+insert into t (id,a) values (631,48);
+insert into t (id,a) values (631,49);
+insert into t (id,a) values (631,50);
+insert into t (id,a) values (631,51);
+insert into t (id,a) values (631,52);
+insert into t (id,a) values (631,53);
+insert into t (id,a) values (631,54);
+insert into t (id,a) values (631,55);
+insert into t (id,a) values (631,56);
+insert into t (id,a) values (631,57);
+insert into t (id,a) values (631,58);
+insert into t (id,a) values (631,59);
+insert into t (id,a) values (631,60);
+insert into t (id,a) values (631,61);
+insert into t (id,a) values (631,62);
+insert into t (id,a) values (631,63);
+insert into t (id,a) values (631,64);
+insert into t (id,a) values (631,65);
+insert into t (id,a) values (631,66);
+insert into t (id,a) values (631,67);
+insert into t (id,a) values (631,68);
+insert into t (id,a) values (631,69);
+insert into t (id,a) values (631,70);
+insert into t (id,a) values (631,71);
+insert into t (id,a) values (631,72);
+insert into t (id,a) values (631,73);
+insert into t (id,a) values (631,74);
+insert into t (id,a) values (631,75);
+insert into t (id,a) values (631,76);
+insert into t (id,a) values (631,77);
+insert into t (id,a) values (631,78);
+insert into t (id,a) values (631,79);
+insert into t (id,a) values (631,80);
+insert into t (id,a) values (631,81);
+insert into t (id,a) values (631,82);
+insert into t (id,a) values (631,83);
+insert into t (id,a) values (631,84);
+insert into t (id,a) values (631,85);
+insert into t (id,a) values (631,86);
+insert into t (id,a) values (631,87);
+insert into t (id,a) values (631,88);
+insert into t (id,a) values (631,89);
+insert into t (id,a) values (631,90);
+insert into t (id,a) values (631,91);
+insert into t (id,a) values (631,92);
+insert into t (id,a) values (631,93);
+insert into t (id,a) values (631,94);
+insert into t (id,a) values (631,95);
+insert into t (id,a) values (631,96);
+insert into t (id,a) values (631,97);
+insert into t (id,a) values (631,98);
+insert into t (id,a) values (631,99);
+insert into t (id,a) values (632,0);
+insert into t (id,a) values (632,1);
+insert into t (id,a) values (632,2);
+insert into t (id,a) values (632,3);
+insert into t (id,a) values (632,4);
+insert into t (id,a) values (632,5);
+insert into t (id,a) values (632,6);
+insert into t (id,a) values (632,7);
+insert into t (id,a) values (632,8);
+insert into t (id,a) values (632,9);
+insert into t (id,a) values (632,10);
+insert into t (id,a) values (632,11);
+insert into t (id,a) values (632,12);
+insert into t (id,a) values (632,13);
+insert into t (id,a) values (632,14);
+insert into t (id,a) values (632,15);
+insert into t (id,a) values (632,16);
+insert into t (id,a) values (632,17);
+insert into t (id,a) values (632,18);
+insert into t (id,a) values (632,19);
+insert into t (id,a) values (632,20);
+insert into t (id,a) values (632,21);
+insert into t (id,a) values (632,22);
+insert into t (id,a) values (632,23);
+insert into t (id,a) values (632,24);
+insert into t (id,a) values (632,25);
+insert into t (id,a) values (632,26);
+insert into t (id,a) values (632,27);
+insert into t (id,a) values (632,28);
+insert into t (id,a) values (632,29);
+insert into t (id,a) values (632,30);
+insert into t (id,a) values (632,31);
+insert into t (id,a) values (632,32);
+insert into t (id,a) values (632,33);
+insert into t (id,a) values (632,34);
+insert into t (id,a) values (632,35);
+insert into t (id,a) values (632,36);
+insert into t (id,a) values (632,37);
+insert into t (id,a) values (632,38);
+insert into t (id,a) values (632,39);
+insert into t (id,a) values (632,40);
+insert into t (id,a) values (632,41);
+insert into t (id,a) values (632,42);
+insert into t (id,a) values (632,43);
+insert into t (id,a) values (632,44);
+insert into t (id,a) values (632,45);
+insert into t (id,a) values (632,46);
+insert into t (id,a) values (632,47);
+insert into t (id,a) values (632,48);
+insert into t (id,a) values (632,49);
+insert into t (id,a) values (632,50);
+insert into t (id,a) values (632,51);
+insert into t (id,a) values (632,52);
+insert into t (id,a) values (632,53);
+insert into t (id,a) values (632,54);
+insert into t (id,a) values (632,55);
+insert into t (id,a) values (632,56);
+insert into t (id,a) values (632,57);
+insert into t (id,a) values (632,58);
+insert into t (id,a) values (632,59);
+insert into t (id,a) values (632,60);
+insert into t (id,a) values (632,61);
+insert into t (id,a) values (632,62);
+insert into t (id,a) values (632,63);
+insert into t (id,a) values (632,64);
+insert into t (id,a) values (632,65);
+insert into t (id,a) values (632,66);
+insert into t (id,a) values (632,67);
+insert into t (id,a) values (632,68);
+insert into t (id,a) values (632,69);
+insert into t (id,a) values (632,70);
+insert into t (id,a) values (632,71);
+insert into t (id,a) values (632,72);
+insert into t (id,a) values (632,73);
+insert into t (id,a) values (632,74);
+insert into t (id,a) values (632,75);
+insert into t (id,a) values (632,76);
+insert into t (id,a) values (632,77);
+insert into t (id,a) values (632,78);
+insert into t (id,a) values (632,79);
+insert into t (id,a) values (632,80);
+insert into t (id,a) values (632,81);
+insert into t (id,a) values (632,82);
+insert into t (id,a) values (632,83);
+insert into t (id,a) values (632,84);
+insert into t (id,a) values (632,85);
+insert into t (id,a) values (632,86);
+insert into t (id,a) values (632,87);
+insert into t (id,a) values (632,88);
+insert into t (id,a) values (632,89);
+insert into t (id,a) values (632,90);
+insert into t (id,a) values (632,91);
+insert into t (id,a) values (632,92);
+insert into t (id,a) values (632,93);
+insert into t (id,a) values (632,94);
+insert into t (id,a) values (632,95);
+insert into t (id,a) values (632,96);
+insert into t (id,a) values (632,97);
+insert into t (id,a) values (632,98);
+insert into t (id,a) values (632,99);
+insert into t (id,a) values (633,0);
+insert into t (id,a) values (633,1);
+insert into t (id,a) values (633,2);
+insert into t (id,a) values (633,3);
+insert into t (id,a) values (633,4);
+insert into t (id,a) values (633,5);
+insert into t (id,a) values (633,6);
+insert into t (id,a) values (633,7);
+insert into t (id,a) values (633,8);
+insert into t (id,a) values (633,9);
+insert into t (id,a) values (633,10);
+insert into t (id,a) values (633,11);
+insert into t (id,a) values (633,12);
+insert into t (id,a) values (633,13);
+insert into t (id,a) values (633,14);
+insert into t (id,a) values (633,15);
+insert into t (id,a) values (633,16);
+insert into t (id,a) values (633,17);
+insert into t (id,a) values (633,18);
+insert into t (id,a) values (633,19);
+insert into t (id,a) values (633,20);
+insert into t (id,a) values (633,21);
+insert into t (id,a) values (633,22);
+insert into t (id,a) values (633,23);
+insert into t (id,a) values (633,24);
+insert into t (id,a) values (633,25);
+insert into t (id,a) values (633,26);
+insert into t (id,a) values (633,27);
+insert into t (id,a) values (633,28);
+insert into t (id,a) values (633,29);
+insert into t (id,a) values (633,30);
+insert into t (id,a) values (633,31);
+insert into t (id,a) values (633,32);
+insert into t (id,a) values (633,33);
+insert into t (id,a) values (633,34);
+insert into t (id,a) values (633,35);
+insert into t (id,a) values (633,36);
+insert into t (id,a) values (633,37);
+insert into t (id,a) values (633,38);
+insert into t (id,a) values (633,39);
+insert into t (id,a) values (633,40);
+insert into t (id,a) values (633,41);
+insert into t (id,a) values (633,42);
+insert into t (id,a) values (633,43);
+insert into t (id,a) values (633,44);
+insert into t (id,a) values (633,45);
+insert into t (id,a) values (633,46);
+insert into t (id,a) values (633,47);
+insert into t (id,a) values (633,48);
+insert into t (id,a) values (633,49);
+insert into t (id,a) values (633,50);
+insert into t (id,a) values (633,51);
+insert into t (id,a) values (633,52);
+insert into t (id,a) values (633,53);
+insert into t (id,a) values (633,54);
+insert into t (id,a) values (633,55);
+insert into t (id,a) values (633,56);
+insert into t (id,a) values (633,57);
+insert into t (id,a) values (633,58);
+insert into t (id,a) values (633,59);
+insert into t (id,a) values (633,60);
+insert into t (id,a) values (633,61);
+insert into t (id,a) values (633,62);
+insert into t (id,a) values (633,63);
+insert into t (id,a) values (633,64);
+insert into t (id,a) values (633,65);
+insert into t (id,a) values (633,66);
+insert into t (id,a) values (633,67);
+insert into t (id,a) values (633,68);
+insert into t (id,a) values (633,69);
+insert into t (id,a) values (633,70);
+insert into t (id,a) values (633,71);
+insert into t (id,a) values (633,72);
+insert into t (id,a) values (633,73);
+insert into t (id,a) values (633,74);
+insert into t (id,a) values (633,75);
+insert into t (id,a) values (633,76);
+insert into t (id,a) values (633,77);
+insert into t (id,a) values (633,78);
+insert into t (id,a) values (633,79);
+insert into t (id,a) values (633,80);
+insert into t (id,a) values (633,81);
+insert into t (id,a) values (633,82);
+insert into t (id,a) values (633,83);
+insert into t (id,a) values (633,84);
+insert into t (id,a) values (633,85);
+insert into t (id,a) values (633,86);
+insert into t (id,a) values (633,87);
+insert into t (id,a) values (633,88);
+insert into t (id,a) values (633,89);
+insert into t (id,a) values (633,90);
+insert into t (id,a) values (633,91);
+insert into t (id,a) values (633,92);
+insert into t (id,a) values (633,93);
+insert into t (id,a) values (633,94);
+insert into t (id,a) values (633,95);
+insert into t (id,a) values (633,96);
+insert into t (id,a) values (633,97);
+insert into t (id,a) values (633,98);
+insert into t (id,a) values (633,99);
+insert into t (id,a) values (634,0);
+insert into t (id,a) values (634,1);
+insert into t (id,a) values (634,2);
+insert into t (id,a) values (634,3);
+insert into t (id,a) values (634,4);
+insert into t (id,a) values (634,5);
+insert into t (id,a) values (634,6);
+insert into t (id,a) values (634,7);
+insert into t (id,a) values (634,8);
+insert into t (id,a) values (634,9);
+insert into t (id,a) values (634,10);
+insert into t (id,a) values (634,11);
+insert into t (id,a) values (634,12);
+insert into t (id,a) values (634,13);
+insert into t (id,a) values (634,14);
+insert into t (id,a) values (634,15);
+insert into t (id,a) values (634,16);
+insert into t (id,a) values (634,17);
+insert into t (id,a) values (634,18);
+insert into t (id,a) values (634,19);
+insert into t (id,a) values (634,20);
+insert into t (id,a) values (634,21);
+insert into t (id,a) values (634,22);
+insert into t (id,a) values (634,23);
+insert into t (id,a) values (634,24);
+insert into t (id,a) values (634,25);
+insert into t (id,a) values (634,26);
+insert into t (id,a) values (634,27);
+insert into t (id,a) values (634,28);
+insert into t (id,a) values (634,29);
+insert into t (id,a) values (634,30);
+insert into t (id,a) values (634,31);
+insert into t (id,a) values (634,32);
+insert into t (id,a) values (634,33);
+insert into t (id,a) values (634,34);
+insert into t (id,a) values (634,35);
+insert into t (id,a) values (634,36);
+insert into t (id,a) values (634,37);
+insert into t (id,a) values (634,38);
+insert into t (id,a) values (634,39);
+insert into t (id,a) values (634,40);
+insert into t (id,a) values (634,41);
+insert into t (id,a) values (634,42);
+insert into t (id,a) values (634,43);
+insert into t (id,a) values (634,44);
+insert into t (id,a) values (634,45);
+insert into t (id,a) values (634,46);
+insert into t (id,a) values (634,47);
+insert into t (id,a) values (634,48);
+insert into t (id,a) values (634,49);
+insert into t (id,a) values (634,50);
+insert into t (id,a) values (634,51);
+insert into t (id,a) values (634,52);
+insert into t (id,a) values (634,53);
+insert into t (id,a) values (634,54);
+insert into t (id,a) values (634,55);
+insert into t (id,a) values (634,56);
+insert into t (id,a) values (634,57);
+insert into t (id,a) values (634,58);
+insert into t (id,a) values (634,59);
+insert into t (id,a) values (634,60);
+insert into t (id,a) values (634,61);
+insert into t (id,a) values (634,62);
+insert into t (id,a) values (634,63);
+insert into t (id,a) values (634,64);
+insert into t (id,a) values (634,65);
+insert into t (id,a) values (634,66);
+insert into t (id,a) values (634,67);
+insert into t (id,a) values (634,68);
+insert into t (id,a) values (634,69);
+insert into t (id,a) values (634,70);
+insert into t (id,a) values (634,71);
+insert into t (id,a) values (634,72);
+insert into t (id,a) values (634,73);
+insert into t (id,a) values (634,74);
+insert into t (id,a) values (634,75);
+insert into t (id,a) values (634,76);
+insert into t (id,a) values (634,77);
+insert into t (id,a) values (634,78);
+insert into t (id,a) values (634,79);
+insert into t (id,a) values (634,80);
+insert into t (id,a) values (634,81);
+insert into t (id,a) values (634,82);
+insert into t (id,a) values (634,83);
+insert into t (id,a) values (634,84);
+insert into t (id,a) values (634,85);
+insert into t (id,a) values (634,86);
+insert into t (id,a) values (634,87);
+insert into t (id,a) values (634,88);
+insert into t (id,a) values (634,89);
+insert into t (id,a) values (634,90);
+insert into t (id,a) values (634,91);
+insert into t (id,a) values (634,92);
+insert into t (id,a) values (634,93);
+insert into t (id,a) values (634,94);
+insert into t (id,a) values (634,95);
+insert into t (id,a) values (634,96);
+insert into t (id,a) values (634,97);
+insert into t (id,a) values (634,98);
+insert into t (id,a) values (634,99);
+insert into t (id,a) values (635,0);
+insert into t (id,a) values (635,1);
+insert into t (id,a) values (635,2);
+insert into t (id,a) values (635,3);
+insert into t (id,a) values (635,4);
+insert into t (id,a) values (635,5);
+insert into t (id,a) values (635,6);
+insert into t (id,a) values (635,7);
+insert into t (id,a) values (635,8);
+insert into t (id,a) values (635,9);
+insert into t (id,a) values (635,10);
+insert into t (id,a) values (635,11);
+insert into t (id,a) values (635,12);
+insert into t (id,a) values (635,13);
+insert into t (id,a) values (635,14);
+insert into t (id,a) values (635,15);
+insert into t (id,a) values (635,16);
+insert into t (id,a) values (635,17);
+insert into t (id,a) values (635,18);
+insert into t (id,a) values (635,19);
+insert into t (id,a) values (635,20);
+insert into t (id,a) values (635,21);
+insert into t (id,a) values (635,22);
+insert into t (id,a) values (635,23);
+insert into t (id,a) values (635,24);
+insert into t (id,a) values (635,25);
+insert into t (id,a) values (635,26);
+insert into t (id,a) values (635,27);
+insert into t (id,a) values (635,28);
+insert into t (id,a) values (635,29);
+insert into t (id,a) values (635,30);
+insert into t (id,a) values (635,31);
+insert into t (id,a) values (635,32);
+insert into t (id,a) values (635,33);
+insert into t (id,a) values (635,34);
+insert into t (id,a) values (635,35);
+insert into t (id,a) values (635,36);
+insert into t (id,a) values (635,37);
+insert into t (id,a) values (635,38);
+insert into t (id,a) values (635,39);
+insert into t (id,a) values (635,40);
+insert into t (id,a) values (635,41);
+insert into t (id,a) values (635,42);
+insert into t (id,a) values (635,43);
+insert into t (id,a) values (635,44);
+insert into t (id,a) values (635,45);
+insert into t (id,a) values (635,46);
+insert into t (id,a) values (635,47);
+insert into t (id,a) values (635,48);
+insert into t (id,a) values (635,49);
+insert into t (id,a) values (635,50);
+insert into t (id,a) values (635,51);
+insert into t (id,a) values (635,52);
+insert into t (id,a) values (635,53);
+insert into t (id,a) values (635,54);
+insert into t (id,a) values (635,55);
+insert into t (id,a) values (635,56);
+insert into t (id,a) values (635,57);
+insert into t (id,a) values (635,58);
+insert into t (id,a) values (635,59);
+insert into t (id,a) values (635,60);
+insert into t (id,a) values (635,61);
+insert into t (id,a) values (635,62);
+insert into t (id,a) values (635,63);
+insert into t (id,a) values (635,64);
+insert into t (id,a) values (635,65);
+insert into t (id,a) values (635,66);
+insert into t (id,a) values (635,67);
+insert into t (id,a) values (635,68);
+insert into t (id,a) values (635,69);
+insert into t (id,a) values (635,70);
+insert into t (id,a) values (635,71);
+insert into t (id,a) values (635,72);
+insert into t (id,a) values (635,73);
+insert into t (id,a) values (635,74);
+insert into t (id,a) values (635,75);
+insert into t (id,a) values (635,76);
+insert into t (id,a) values (635,77);
+insert into t (id,a) values (635,78);
+insert into t (id,a) values (635,79);
+insert into t (id,a) values (635,80);
+insert into t (id,a) values (635,81);
+insert into t (id,a) values (635,82);
+insert into t (id,a) values (635,83);
+insert into t (id,a) values (635,84);
+insert into t (id,a) values (635,85);
+insert into t (id,a) values (635,86);
+insert into t (id,a) values (635,87);
+insert into t (id,a) values (635,88);
+insert into t (id,a) values (635,89);
+insert into t (id,a) values (635,90);
+insert into t (id,a) values (635,91);
+insert into t (id,a) values (635,92);
+insert into t (id,a) values (635,93);
+insert into t (id,a) values (635,94);
+insert into t (id,a) values (635,95);
+insert into t (id,a) values (635,96);
+insert into t (id,a) values (635,97);
+insert into t (id,a) values (635,98);
+insert into t (id,a) values (635,99);
+insert into t (id,a) values (636,0);
+insert into t (id,a) values (636,1);
+insert into t (id,a) values (636,2);
+insert into t (id,a) values (636,3);
+insert into t (id,a) values (636,4);
+insert into t (id,a) values (636,5);
+insert into t (id,a) values (636,6);
+insert into t (id,a) values (636,7);
+insert into t (id,a) values (636,8);
+insert into t (id,a) values (636,9);
+insert into t (id,a) values (636,10);
+insert into t (id,a) values (636,11);
+insert into t (id,a) values (636,12);
+insert into t (id,a) values (636,13);
+insert into t (id,a) values (636,14);
+insert into t (id,a) values (636,15);
+insert into t (id,a) values (636,16);
+insert into t (id,a) values (636,17);
+insert into t (id,a) values (636,18);
+insert into t (id,a) values (636,19);
+insert into t (id,a) values (636,20);
+insert into t (id,a) values (636,21);
+insert into t (id,a) values (636,22);
+insert into t (id,a) values (636,23);
+insert into t (id,a) values (636,24);
+insert into t (id,a) values (636,25);
+insert into t (id,a) values (636,26);
+insert into t (id,a) values (636,27);
+insert into t (id,a) values (636,28);
+insert into t (id,a) values (636,29);
+insert into t (id,a) values (636,30);
+insert into t (id,a) values (636,31);
+insert into t (id,a) values (636,32);
+insert into t (id,a) values (636,33);
+insert into t (id,a) values (636,34);
+insert into t (id,a) values (636,35);
+insert into t (id,a) values (636,36);
+insert into t (id,a) values (636,37);
+insert into t (id,a) values (636,38);
+insert into t (id,a) values (636,39);
+insert into t (id,a) values (636,40);
+insert into t (id,a) values (636,41);
+insert into t (id,a) values (636,42);
+insert into t (id,a) values (636,43);
+insert into t (id,a) values (636,44);
+insert into t (id,a) values (636,45);
+insert into t (id,a) values (636,46);
+insert into t (id,a) values (636,47);
+insert into t (id,a) values (636,48);
+insert into t (id,a) values (636,49);
+insert into t (id,a) values (636,50);
+insert into t (id,a) values (636,51);
+insert into t (id,a) values (636,52);
+insert into t (id,a) values (636,53);
+insert into t (id,a) values (636,54);
+insert into t (id,a) values (636,55);
+insert into t (id,a) values (636,56);
+insert into t (id,a) values (636,57);
+insert into t (id,a) values (636,58);
+insert into t (id,a) values (636,59);
+insert into t (id,a) values (636,60);
+insert into t (id,a) values (636,61);
+insert into t (id,a) values (636,62);
+insert into t (id,a) values (636,63);
+insert into t (id,a) values (636,64);
+insert into t (id,a) values (636,65);
+insert into t (id,a) values (636,66);
+insert into t (id,a) values (636,67);
+insert into t (id,a) values (636,68);
+insert into t (id,a) values (636,69);
+insert into t (id,a) values (636,70);
+insert into t (id,a) values (636,71);
+insert into t (id,a) values (636,72);
+insert into t (id,a) values (636,73);
+insert into t (id,a) values (636,74);
+insert into t (id,a) values (636,75);
+insert into t (id,a) values (636,76);
+insert into t (id,a) values (636,77);
+insert into t (id,a) values (636,78);
+insert into t (id,a) values (636,79);
+insert into t (id,a) values (636,80);
+insert into t (id,a) values (636,81);
+insert into t (id,a) values (636,82);
+insert into t (id,a) values (636,83);
+insert into t (id,a) values (636,84);
+insert into t (id,a) values (636,85);
+insert into t (id,a) values (636,86);
+insert into t (id,a) values (636,87);
+insert into t (id,a) values (636,88);
+insert into t (id,a) values (636,89);
+insert into t (id,a) values (636,90);
+insert into t (id,a) values (636,91);
+insert into t (id,a) values (636,92);
+insert into t (id,a) values (636,93);
+insert into t (id,a) values (636,94);
+insert into t (id,a) values (636,95);
+insert into t (id,a) values (636,96);
+insert into t (id,a) values (636,97);
+insert into t (id,a) values (636,98);
+insert into t (id,a) values (636,99);
+insert into t (id,a) values (637,0);
+insert into t (id,a) values (637,1);
+insert into t (id,a) values (637,2);
+insert into t (id,a) values (637,3);
+insert into t (id,a) values (637,4);
+insert into t (id,a) values (637,5);
+insert into t (id,a) values (637,6);
+insert into t (id,a) values (637,7);
+insert into t (id,a) values (637,8);
+insert into t (id,a) values (637,9);
+insert into t (id,a) values (637,10);
+insert into t (id,a) values (637,11);
+insert into t (id,a) values (637,12);
+insert into t (id,a) values (637,13);
+insert into t (id,a) values (637,14);
+insert into t (id,a) values (637,15);
+insert into t (id,a) values (637,16);
+insert into t (id,a) values (637,17);
+insert into t (id,a) values (637,18);
+insert into t (id,a) values (637,19);
+insert into t (id,a) values (637,20);
+insert into t (id,a) values (637,21);
+insert into t (id,a) values (637,22);
+insert into t (id,a) values (637,23);
+insert into t (id,a) values (637,24);
+insert into t (id,a) values (637,25);
+insert into t (id,a) values (637,26);
+insert into t (id,a) values (637,27);
+insert into t (id,a) values (637,28);
+insert into t (id,a) values (637,29);
+insert into t (id,a) values (637,30);
+insert into t (id,a) values (637,31);
+insert into t (id,a) values (637,32);
+insert into t (id,a) values (637,33);
+insert into t (id,a) values (637,34);
+insert into t (id,a) values (637,35);
+insert into t (id,a) values (637,36);
+insert into t (id,a) values (637,37);
+insert into t (id,a) values (637,38);
+insert into t (id,a) values (637,39);
+insert into t (id,a) values (637,40);
+insert into t (id,a) values (637,41);
+insert into t (id,a) values (637,42);
+insert into t (id,a) values (637,43);
+insert into t (id,a) values (637,44);
+insert into t (id,a) values (637,45);
+insert into t (id,a) values (637,46);
+insert into t (id,a) values (637,47);
+insert into t (id,a) values (637,48);
+insert into t (id,a) values (637,49);
+insert into t (id,a) values (637,50);
+insert into t (id,a) values (637,51);
+insert into t (id,a) values (637,52);
+insert into t (id,a) values (637,53);
+insert into t (id,a) values (637,54);
+insert into t (id,a) values (637,55);
+insert into t (id,a) values (637,56);
+insert into t (id,a) values (637,57);
+insert into t (id,a) values (637,58);
+insert into t (id,a) values (637,59);
+insert into t (id,a) values (637,60);
+insert into t (id,a) values (637,61);
+insert into t (id,a) values (637,62);
+insert into t (id,a) values (637,63);
+insert into t (id,a) values (637,64);
+insert into t (id,a) values (637,65);
+insert into t (id,a) values (637,66);
+insert into t (id,a) values (637,67);
+insert into t (id,a) values (637,68);
+insert into t (id,a) values (637,69);
+insert into t (id,a) values (637,70);
+insert into t (id,a) values (637,71);
+insert into t (id,a) values (637,72);
+insert into t (id,a) values (637,73);
+insert into t (id,a) values (637,74);
+insert into t (id,a) values (637,75);
+insert into t (id,a) values (637,76);
+insert into t (id,a) values (637,77);
+insert into t (id,a) values (637,78);
+insert into t (id,a) values (637,79);
+insert into t (id,a) values (637,80);
+insert into t (id,a) values (637,81);
+insert into t (id,a) values (637,82);
+insert into t (id,a) values (637,83);
+insert into t (id,a) values (637,84);
+insert into t (id,a) values (637,85);
+insert into t (id,a) values (637,86);
+insert into t (id,a) values (637,87);
+insert into t (id,a) values (637,88);
+insert into t (id,a) values (637,89);
+insert into t (id,a) values (637,90);
+insert into t (id,a) values (637,91);
+insert into t (id,a) values (637,92);
+insert into t (id,a) values (637,93);
+insert into t (id,a) values (637,94);
+insert into t (id,a) values (637,95);
+insert into t (id,a) values (637,96);
+insert into t (id,a) values (637,97);
+insert into t (id,a) values (637,98);
+insert into t (id,a) values (637,99);
+insert into t (id,a) values (638,0);
+insert into t (id,a) values (638,1);
+insert into t (id,a) values (638,2);
+insert into t (id,a) values (638,3);
+insert into t (id,a) values (638,4);
+insert into t (id,a) values (638,5);
+insert into t (id,a) values (638,6);
+insert into t (id,a) values (638,7);
+insert into t (id,a) values (638,8);
+insert into t (id,a) values (638,9);
+insert into t (id,a) values (638,10);
+insert into t (id,a) values (638,11);
+insert into t (id,a) values (638,12);
+insert into t (id,a) values (638,13);
+insert into t (id,a) values (638,14);
+insert into t (id,a) values (638,15);
+insert into t (id,a) values (638,16);
+insert into t (id,a) values (638,17);
+insert into t (id,a) values (638,18);
+insert into t (id,a) values (638,19);
+insert into t (id,a) values (638,20);
+insert into t (id,a) values (638,21);
+insert into t (id,a) values (638,22);
+insert into t (id,a) values (638,23);
+insert into t (id,a) values (638,24);
+insert into t (id,a) values (638,25);
+insert into t (id,a) values (638,26);
+insert into t (id,a) values (638,27);
+insert into t (id,a) values (638,28);
+insert into t (id,a) values (638,29);
+insert into t (id,a) values (638,30);
+insert into t (id,a) values (638,31);
+insert into t (id,a) values (638,32);
+insert into t (id,a) values (638,33);
+insert into t (id,a) values (638,34);
+insert into t (id,a) values (638,35);
+insert into t (id,a) values (638,36);
+insert into t (id,a) values (638,37);
+insert into t (id,a) values (638,38);
+insert into t (id,a) values (638,39);
+insert into t (id,a) values (638,40);
+insert into t (id,a) values (638,41);
+insert into t (id,a) values (638,42);
+insert into t (id,a) values (638,43);
+insert into t (id,a) values (638,44);
+insert into t (id,a) values (638,45);
+insert into t (id,a) values (638,46);
+insert into t (id,a) values (638,47);
+insert into t (id,a) values (638,48);
+insert into t (id,a) values (638,49);
+insert into t (id,a) values (638,50);
+insert into t (id,a) values (638,51);
+insert into t (id,a) values (638,52);
+insert into t (id,a) values (638,53);
+insert into t (id,a) values (638,54);
+insert into t (id,a) values (638,55);
+insert into t (id,a) values (638,56);
+insert into t (id,a) values (638,57);
+insert into t (id,a) values (638,58);
+insert into t (id,a) values (638,59);
+insert into t (id,a) values (638,60);
+insert into t (id,a) values (638,61);
+insert into t (id,a) values (638,62);
+insert into t (id,a) values (638,63);
+insert into t (id,a) values (638,64);
+insert into t (id,a) values (638,65);
+insert into t (id,a) values (638,66);
+insert into t (id,a) values (638,67);
+insert into t (id,a) values (638,68);
+insert into t (id,a) values (638,69);
+insert into t (id,a) values (638,70);
+insert into t (id,a) values (638,71);
+insert into t (id,a) values (638,72);
+insert into t (id,a) values (638,73);
+insert into t (id,a) values (638,74);
+insert into t (id,a) values (638,75);
+insert into t (id,a) values (638,76);
+insert into t (id,a) values (638,77);
+insert into t (id,a) values (638,78);
+insert into t (id,a) values (638,79);
+insert into t (id,a) values (638,80);
+insert into t (id,a) values (638,81);
+insert into t (id,a) values (638,82);
+insert into t (id,a) values (638,83);
+insert into t (id,a) values (638,84);
+insert into t (id,a) values (638,85);
+insert into t (id,a) values (638,86);
+insert into t (id,a) values (638,87);
+insert into t (id,a) values (638,88);
+insert into t (id,a) values (638,89);
+insert into t (id,a) values (638,90);
+insert into t (id,a) values (638,91);
+insert into t (id,a) values (638,92);
+insert into t (id,a) values (638,93);
+insert into t (id,a) values (638,94);
+insert into t (id,a) values (638,95);
+insert into t (id,a) values (638,96);
+insert into t (id,a) values (638,97);
+insert into t (id,a) values (638,98);
+insert into t (id,a) values (638,99);
+insert into t (id,a) values (639,0);
+insert into t (id,a) values (639,1);
+insert into t (id,a) values (639,2);
+insert into t (id,a) values (639,3);
+insert into t (id,a) values (639,4);
+insert into t (id,a) values (639,5);
+insert into t (id,a) values (639,6);
+insert into t (id,a) values (639,7);
+insert into t (id,a) values (639,8);
+insert into t (id,a) values (639,9);
+insert into t (id,a) values (639,10);
+insert into t (id,a) values (639,11);
+insert into t (id,a) values (639,12);
+insert into t (id,a) values (639,13);
+insert into t (id,a) values (639,14);
+insert into t (id,a) values (639,15);
+insert into t (id,a) values (639,16);
+insert into t (id,a) values (639,17);
+insert into t (id,a) values (639,18);
+insert into t (id,a) values (639,19);
+insert into t (id,a) values (639,20);
+insert into t (id,a) values (639,21);
+insert into t (id,a) values (639,22);
+insert into t (id,a) values (639,23);
+insert into t (id,a) values (639,24);
+insert into t (id,a) values (639,25);
+insert into t (id,a) values (639,26);
+insert into t (id,a) values (639,27);
+insert into t (id,a) values (639,28);
+insert into t (id,a) values (639,29);
+insert into t (id,a) values (639,30);
+insert into t (id,a) values (639,31);
+insert into t (id,a) values (639,32);
+insert into t (id,a) values (639,33);
+insert into t (id,a) values (639,34);
+insert into t (id,a) values (639,35);
+insert into t (id,a) values (639,36);
+insert into t (id,a) values (639,37);
+insert into t (id,a) values (639,38);
+insert into t (id,a) values (639,39);
+insert into t (id,a) values (639,40);
+insert into t (id,a) values (639,41);
+insert into t (id,a) values (639,42);
+insert into t (id,a) values (639,43);
+insert into t (id,a) values (639,44);
+insert into t (id,a) values (639,45);
+insert into t (id,a) values (639,46);
+insert into t (id,a) values (639,47);
+insert into t (id,a) values (639,48);
+insert into t (id,a) values (639,49);
+insert into t (id,a) values (639,50);
+insert into t (id,a) values (639,51);
+insert into t (id,a) values (639,52);
+insert into t (id,a) values (639,53);
+insert into t (id,a) values (639,54);
+insert into t (id,a) values (639,55);
+insert into t (id,a) values (639,56);
+insert into t (id,a) values (639,57);
+insert into t (id,a) values (639,58);
+insert into t (id,a) values (639,59);
+insert into t (id,a) values (639,60);
+insert into t (id,a) values (639,61);
+insert into t (id,a) values (639,62);
+insert into t (id,a) values (639,63);
+insert into t (id,a) values (639,64);
+insert into t (id,a) values (639,65);
+insert into t (id,a) values (639,66);
+insert into t (id,a) values (639,67);
+insert into t (id,a) values (639,68);
+insert into t (id,a) values (639,69);
+insert into t (id,a) values (639,70);
+insert into t (id,a) values (639,71);
+insert into t (id,a) values (639,72);
+insert into t (id,a) values (639,73);
+insert into t (id,a) values (639,74);
+insert into t (id,a) values (639,75);
+insert into t (id,a) values (639,76);
+insert into t (id,a) values (639,77);
+insert into t (id,a) values (639,78);
+insert into t (id,a) values (639,79);
+insert into t (id,a) values (639,80);
+insert into t (id,a) values (639,81);
+insert into t (id,a) values (639,82);
+insert into t (id,a) values (639,83);
+insert into t (id,a) values (639,84);
+insert into t (id,a) values (639,85);
+insert into t (id,a) values (639,86);
+insert into t (id,a) values (639,87);
+insert into t (id,a) values (639,88);
+insert into t (id,a) values (639,89);
+insert into t (id,a) values (639,90);
+insert into t (id,a) values (639,91);
+insert into t (id,a) values (639,92);
+insert into t (id,a) values (639,93);
+insert into t (id,a) values (639,94);
+insert into t (id,a) values (639,95);
+insert into t (id,a) values (639,96);
+insert into t (id,a) values (639,97);
+insert into t (id,a) values (639,98);
+insert into t (id,a) values (639,99);
+insert into t (id,a) values (640,0);
+insert into t (id,a) values (640,1);
+insert into t (id,a) values (640,2);
+insert into t (id,a) values (640,3);
+insert into t (id,a) values (640,4);
+insert into t (id,a) values (640,5);
+insert into t (id,a) values (640,6);
+insert into t (id,a) values (640,7);
+insert into t (id,a) values (640,8);
+insert into t (id,a) values (640,9);
+insert into t (id,a) values (640,10);
+insert into t (id,a) values (640,11);
+insert into t (id,a) values (640,12);
+insert into t (id,a) values (640,13);
+insert into t (id,a) values (640,14);
+insert into t (id,a) values (640,15);
+insert into t (id,a) values (640,16);
+insert into t (id,a) values (640,17);
+insert into t (id,a) values (640,18);
+insert into t (id,a) values (640,19);
+insert into t (id,a) values (640,20);
+insert into t (id,a) values (640,21);
+insert into t (id,a) values (640,22);
+insert into t (id,a) values (640,23);
+insert into t (id,a) values (640,24);
+insert into t (id,a) values (640,25);
+insert into t (id,a) values (640,26);
+insert into t (id,a) values (640,27);
+insert into t (id,a) values (640,28);
+insert into t (id,a) values (640,29);
+insert into t (id,a) values (640,30);
+insert into t (id,a) values (640,31);
+insert into t (id,a) values (640,32);
+insert into t (id,a) values (640,33);
+insert into t (id,a) values (640,34);
+insert into t (id,a) values (640,35);
+insert into t (id,a) values (640,36);
+insert into t (id,a) values (640,37);
+insert into t (id,a) values (640,38);
+insert into t (id,a) values (640,39);
+insert into t (id,a) values (640,40);
+insert into t (id,a) values (640,41);
+insert into t (id,a) values (640,42);
+insert into t (id,a) values (640,43);
+insert into t (id,a) values (640,44);
+insert into t (id,a) values (640,45);
+insert into t (id,a) values (640,46);
+insert into t (id,a) values (640,47);
+insert into t (id,a) values (640,48);
+insert into t (id,a) values (640,49);
+insert into t (id,a) values (640,50);
+insert into t (id,a) values (640,51);
+insert into t (id,a) values (640,52);
+insert into t (id,a) values (640,53);
+insert into t (id,a) values (640,54);
+insert into t (id,a) values (640,55);
+insert into t (id,a) values (640,56);
+insert into t (id,a) values (640,57);
+insert into t (id,a) values (640,58);
+insert into t (id,a) values (640,59);
+insert into t (id,a) values (640,60);
+insert into t (id,a) values (640,61);
+insert into t (id,a) values (640,62);
+insert into t (id,a) values (640,63);
+insert into t (id,a) values (640,64);
+insert into t (id,a) values (640,65);
+insert into t (id,a) values (640,66);
+insert into t (id,a) values (640,67);
+insert into t (id,a) values (640,68);
+insert into t (id,a) values (640,69);
+insert into t (id,a) values (640,70);
+insert into t (id,a) values (640,71);
+insert into t (id,a) values (640,72);
+insert into t (id,a) values (640,73);
+insert into t (id,a) values (640,74);
+insert into t (id,a) values (640,75);
+insert into t (id,a) values (640,76);
+insert into t (id,a) values (640,77);
+insert into t (id,a) values (640,78);
+insert into t (id,a) values (640,79);
+insert into t (id,a) values (640,80);
+insert into t (id,a) values (640,81);
+insert into t (id,a) values (640,82);
+insert into t (id,a) values (640,83);
+insert into t (id,a) values (640,84);
+insert into t (id,a) values (640,85);
+insert into t (id,a) values (640,86);
+insert into t (id,a) values (640,87);
+insert into t (id,a) values (640,88);
+insert into t (id,a) values (640,89);
+insert into t (id,a) values (640,90);
+insert into t (id,a) values (640,91);
+insert into t (id,a) values (640,92);
+insert into t (id,a) values (640,93);
+insert into t (id,a) values (640,94);
+insert into t (id,a) values (640,95);
+insert into t (id,a) values (640,96);
+insert into t (id,a) values (640,97);
+insert into t (id,a) values (640,98);
+insert into t (id,a) values (640,99);
+insert into t (id,a) values (641,0);
+insert into t (id,a) values (641,1);
+insert into t (id,a) values (641,2);
+insert into t (id,a) values (641,3);
+insert into t (id,a) values (641,4);
+insert into t (id,a) values (641,5);
+insert into t (id,a) values (641,6);
+insert into t (id,a) values (641,7);
+insert into t (id,a) values (641,8);
+insert into t (id,a) values (641,9);
+insert into t (id,a) values (641,10);
+insert into t (id,a) values (641,11);
+insert into t (id,a) values (641,12);
+insert into t (id,a) values (641,13);
+insert into t (id,a) values (641,14);
+insert into t (id,a) values (641,15);
+insert into t (id,a) values (641,16);
+insert into t (id,a) values (641,17);
+insert into t (id,a) values (641,18);
+insert into t (id,a) values (641,19);
+insert into t (id,a) values (641,20);
+insert into t (id,a) values (641,21);
+insert into t (id,a) values (641,22);
+insert into t (id,a) values (641,23);
+insert into t (id,a) values (641,24);
+insert into t (id,a) values (641,25);
+insert into t (id,a) values (641,26);
+insert into t (id,a) values (641,27);
+insert into t (id,a) values (641,28);
+insert into t (id,a) values (641,29);
+insert into t (id,a) values (641,30);
+insert into t (id,a) values (641,31);
+insert into t (id,a) values (641,32);
+insert into t (id,a) values (641,33);
+insert into t (id,a) values (641,34);
+insert into t (id,a) values (641,35);
+insert into t (id,a) values (641,36);
+insert into t (id,a) values (641,37);
+insert into t (id,a) values (641,38);
+insert into t (id,a) values (641,39);
+insert into t (id,a) values (641,40);
+insert into t (id,a) values (641,41);
+insert into t (id,a) values (641,42);
+insert into t (id,a) values (641,43);
+insert into t (id,a) values (641,44);
+insert into t (id,a) values (641,45);
+insert into t (id,a) values (641,46);
+insert into t (id,a) values (641,47);
+insert into t (id,a) values (641,48);
+insert into t (id,a) values (641,49);
+insert into t (id,a) values (641,50);
+insert into t (id,a) values (641,51);
+insert into t (id,a) values (641,52);
+insert into t (id,a) values (641,53);
+insert into t (id,a) values (641,54);
+insert into t (id,a) values (641,55);
+insert into t (id,a) values (641,56);
+insert into t (id,a) values (641,57);
+insert into t (id,a) values (641,58);
+insert into t (id,a) values (641,59);
+insert into t (id,a) values (641,60);
+insert into t (id,a) values (641,61);
+insert into t (id,a) values (641,62);
+insert into t (id,a) values (641,63);
+insert into t (id,a) values (641,64);
+insert into t (id,a) values (641,65);
+insert into t (id,a) values (641,66);
+insert into t (id,a) values (641,67);
+insert into t (id,a) values (641,68);
+insert into t (id,a) values (641,69);
+insert into t (id,a) values (641,70);
+insert into t (id,a) values (641,71);
+insert into t (id,a) values (641,72);
+insert into t (id,a) values (641,73);
+insert into t (id,a) values (641,74);
+insert into t (id,a) values (641,75);
+insert into t (id,a) values (641,76);
+insert into t (id,a) values (641,77);
+insert into t (id,a) values (641,78);
+insert into t (id,a) values (641,79);
+insert into t (id,a) values (641,80);
+insert into t (id,a) values (641,81);
+insert into t (id,a) values (641,82);
+insert into t (id,a) values (641,83);
+insert into t (id,a) values (641,84);
+insert into t (id,a) values (641,85);
+insert into t (id,a) values (641,86);
+insert into t (id,a) values (641,87);
+insert into t (id,a) values (641,88);
+insert into t (id,a) values (641,89);
+insert into t (id,a) values (641,90);
+insert into t (id,a) values (641,91);
+insert into t (id,a) values (641,92);
+insert into t (id,a) values (641,93);
+insert into t (id,a) values (641,94);
+insert into t (id,a) values (641,95);
+insert into t (id,a) values (641,96);
+insert into t (id,a) values (641,97);
+insert into t (id,a) values (641,98);
+insert into t (id,a) values (641,99);
+insert into t (id,a) values (642,0);
+insert into t (id,a) values (642,1);
+insert into t (id,a) values (642,2);
+insert into t (id,a) values (642,3);
+insert into t (id,a) values (642,4);
+insert into t (id,a) values (642,5);
+insert into t (id,a) values (642,6);
+insert into t (id,a) values (642,7);
+insert into t (id,a) values (642,8);
+insert into t (id,a) values (642,9);
+insert into t (id,a) values (642,10);
+insert into t (id,a) values (642,11);
+insert into t (id,a) values (642,12);
+insert into t (id,a) values (642,13);
+insert into t (id,a) values (642,14);
+insert into t (id,a) values (642,15);
+insert into t (id,a) values (642,16);
+insert into t (id,a) values (642,17);
+insert into t (id,a) values (642,18);
+insert into t (id,a) values (642,19);
+insert into t (id,a) values (642,20);
+insert into t (id,a) values (642,21);
+insert into t (id,a) values (642,22);
+insert into t (id,a) values (642,23);
+insert into t (id,a) values (642,24);
+insert into t (id,a) values (642,25);
+insert into t (id,a) values (642,26);
+insert into t (id,a) values (642,27);
+insert into t (id,a) values (642,28);
+insert into t (id,a) values (642,29);
+insert into t (id,a) values (642,30);
+insert into t (id,a) values (642,31);
+insert into t (id,a) values (642,32);
+insert into t (id,a) values (642,33);
+insert into t (id,a) values (642,34);
+insert into t (id,a) values (642,35);
+insert into t (id,a) values (642,36);
+insert into t (id,a) values (642,37);
+insert into t (id,a) values (642,38);
+insert into t (id,a) values (642,39);
+insert into t (id,a) values (642,40);
+insert into t (id,a) values (642,41);
+insert into t (id,a) values (642,42);
+insert into t (id,a) values (642,43);
+insert into t (id,a) values (642,44);
+insert into t (id,a) values (642,45);
+insert into t (id,a) values (642,46);
+insert into t (id,a) values (642,47);
+insert into t (id,a) values (642,48);
+insert into t (id,a) values (642,49);
+insert into t (id,a) values (642,50);
+insert into t (id,a) values (642,51);
+insert into t (id,a) values (642,52);
+insert into t (id,a) values (642,53);
+insert into t (id,a) values (642,54);
+insert into t (id,a) values (642,55);
+insert into t (id,a) values (642,56);
+insert into t (id,a) values (642,57);
+insert into t (id,a) values (642,58);
+insert into t (id,a) values (642,59);
+insert into t (id,a) values (642,60);
+insert into t (id,a) values (642,61);
+insert into t (id,a) values (642,62);
+insert into t (id,a) values (642,63);
+insert into t (id,a) values (642,64);
+insert into t (id,a) values (642,65);
+insert into t (id,a) values (642,66);
+insert into t (id,a) values (642,67);
+insert into t (id,a) values (642,68);
+insert into t (id,a) values (642,69);
+insert into t (id,a) values (642,70);
+insert into t (id,a) values (642,71);
+insert into t (id,a) values (642,72);
+insert into t (id,a) values (642,73);
+insert into t (id,a) values (642,74);
+insert into t (id,a) values (642,75);
+insert into t (id,a) values (642,76);
+insert into t (id,a) values (642,77);
+insert into t (id,a) values (642,78);
+insert into t (id,a) values (642,79);
+insert into t (id,a) values (642,80);
+insert into t (id,a) values (642,81);
+insert into t (id,a) values (642,82);
+insert into t (id,a) values (642,83);
+insert into t (id,a) values (642,84);
+insert into t (id,a) values (642,85);
+insert into t (id,a) values (642,86);
+insert into t (id,a) values (642,87);
+insert into t (id,a) values (642,88);
+insert into t (id,a) values (642,89);
+insert into t (id,a) values (642,90);
+insert into t (id,a) values (642,91);
+insert into t (id,a) values (642,92);
+insert into t (id,a) values (642,93);
+insert into t (id,a) values (642,94);
+insert into t (id,a) values (642,95);
+insert into t (id,a) values (642,96);
+insert into t (id,a) values (642,97);
+insert into t (id,a) values (642,98);
+insert into t (id,a) values (642,99);
+insert into t (id,a) values (643,0);
+insert into t (id,a) values (643,1);
+insert into t (id,a) values (643,2);
+insert into t (id,a) values (643,3);
+insert into t (id,a) values (643,4);
+insert into t (id,a) values (643,5);
+insert into t (id,a) values (643,6);
+insert into t (id,a) values (643,7);
+insert into t (id,a) values (643,8);
+insert into t (id,a) values (643,9);
+insert into t (id,a) values (643,10);
+insert into t (id,a) values (643,11);
+insert into t (id,a) values (643,12);
+insert into t (id,a) values (643,13);
+insert into t (id,a) values (643,14);
+insert into t (id,a) values (643,15);
+insert into t (id,a) values (643,16);
+insert into t (id,a) values (643,17);
+insert into t (id,a) values (643,18);
+insert into t (id,a) values (643,19);
+insert into t (id,a) values (643,20);
+insert into t (id,a) values (643,21);
+insert into t (id,a) values (643,22);
+insert into t (id,a) values (643,23);
+insert into t (id,a) values (643,24);
+insert into t (id,a) values (643,25);
+insert into t (id,a) values (643,26);
+insert into t (id,a) values (643,27);
+insert into t (id,a) values (643,28);
+insert into t (id,a) values (643,29);
+insert into t (id,a) values (643,30);
+insert into t (id,a) values (643,31);
+insert into t (id,a) values (643,32);
+insert into t (id,a) values (643,33);
+insert into t (id,a) values (643,34);
+insert into t (id,a) values (643,35);
+insert into t (id,a) values (643,36);
+insert into t (id,a) values (643,37);
+insert into t (id,a) values (643,38);
+insert into t (id,a) values (643,39);
+insert into t (id,a) values (643,40);
+insert into t (id,a) values (643,41);
+insert into t (id,a) values (643,42);
+insert into t (id,a) values (643,43);
+insert into t (id,a) values (643,44);
+insert into t (id,a) values (643,45);
+insert into t (id,a) values (643,46);
+insert into t (id,a) values (643,47);
+insert into t (id,a) values (643,48);
+insert into t (id,a) values (643,49);
+insert into t (id,a) values (643,50);
+insert into t (id,a) values (643,51);
+insert into t (id,a) values (643,52);
+insert into t (id,a) values (643,53);
+insert into t (id,a) values (643,54);
+insert into t (id,a) values (643,55);
+insert into t (id,a) values (643,56);
+insert into t (id,a) values (643,57);
+insert into t (id,a) values (643,58);
+insert into t (id,a) values (643,59);
+insert into t (id,a) values (643,60);
+insert into t (id,a) values (643,61);
+insert into t (id,a) values (643,62);
+insert into t (id,a) values (643,63);
+insert into t (id,a) values (643,64);
+insert into t (id,a) values (643,65);
+insert into t (id,a) values (643,66);
+insert into t (id,a) values (643,67);
+insert into t (id,a) values (643,68);
+insert into t (id,a) values (643,69);
+insert into t (id,a) values (643,70);
+insert into t (id,a) values (643,71);
+insert into t (id,a) values (643,72);
+insert into t (id,a) values (643,73);
+insert into t (id,a) values (643,74);
+insert into t (id,a) values (643,75);
+insert into t (id,a) values (643,76);
+insert into t (id,a) values (643,77);
+insert into t (id,a) values (643,78);
+insert into t (id,a) values (643,79);
+insert into t (id,a) values (643,80);
+insert into t (id,a) values (643,81);
+insert into t (id,a) values (643,82);
+insert into t (id,a) values (643,83);
+insert into t (id,a) values (643,84);
+insert into t (id,a) values (643,85);
+insert into t (id,a) values (643,86);
+insert into t (id,a) values (643,87);
+insert into t (id,a) values (643,88);
+insert into t (id,a) values (643,89);
+insert into t (id,a) values (643,90);
+insert into t (id,a) values (643,91);
+insert into t (id,a) values (643,92);
+insert into t (id,a) values (643,93);
+insert into t (id,a) values (643,94);
+insert into t (id,a) values (643,95);
+insert into t (id,a) values (643,96);
+insert into t (id,a) values (643,97);
+insert into t (id,a) values (643,98);
+insert into t (id,a) values (643,99);
+insert into t (id,a) values (644,0);
+insert into t (id,a) values (644,1);
+insert into t (id,a) values (644,2);
+insert into t (id,a) values (644,3);
+insert into t (id,a) values (644,4);
+insert into t (id,a) values (644,5);
+insert into t (id,a) values (644,6);
+insert into t (id,a) values (644,7);
+insert into t (id,a) values (644,8);
+insert into t (id,a) values (644,9);
+insert into t (id,a) values (644,10);
+insert into t (id,a) values (644,11);
+insert into t (id,a) values (644,12);
+insert into t (id,a) values (644,13);
+insert into t (id,a) values (644,14);
+insert into t (id,a) values (644,15);
+insert into t (id,a) values (644,16);
+insert into t (id,a) values (644,17);
+insert into t (id,a) values (644,18);
+insert into t (id,a) values (644,19);
+insert into t (id,a) values (644,20);
+insert into t (id,a) values (644,21);
+insert into t (id,a) values (644,22);
+insert into t (id,a) values (644,23);
+insert into t (id,a) values (644,24);
+insert into t (id,a) values (644,25);
+insert into t (id,a) values (644,26);
+insert into t (id,a) values (644,27);
+insert into t (id,a) values (644,28);
+insert into t (id,a) values (644,29);
+insert into t (id,a) values (644,30);
+insert into t (id,a) values (644,31);
+insert into t (id,a) values (644,32);
+insert into t (id,a) values (644,33);
+insert into t (id,a) values (644,34);
+insert into t (id,a) values (644,35);
+insert into t (id,a) values (644,36);
+insert into t (id,a) values (644,37);
+insert into t (id,a) values (644,38);
+insert into t (id,a) values (644,39);
+insert into t (id,a) values (644,40);
+insert into t (id,a) values (644,41);
+insert into t (id,a) values (644,42);
+insert into t (id,a) values (644,43);
+insert into t (id,a) values (644,44);
+insert into t (id,a) values (644,45);
+insert into t (id,a) values (644,46);
+insert into t (id,a) values (644,47);
+insert into t (id,a) values (644,48);
+insert into t (id,a) values (644,49);
+insert into t (id,a) values (644,50);
+insert into t (id,a) values (644,51);
+insert into t (id,a) values (644,52);
+insert into t (id,a) values (644,53);
+insert into t (id,a) values (644,54);
+insert into t (id,a) values (644,55);
+insert into t (id,a) values (644,56);
+insert into t (id,a) values (644,57);
+insert into t (id,a) values (644,58);
+insert into t (id,a) values (644,59);
+insert into t (id,a) values (644,60);
+insert into t (id,a) values (644,61);
+insert into t (id,a) values (644,62);
+insert into t (id,a) values (644,63);
+insert into t (id,a) values (644,64);
+insert into t (id,a) values (644,65);
+insert into t (id,a) values (644,66);
+insert into t (id,a) values (644,67);
+insert into t (id,a) values (644,68);
+insert into t (id,a) values (644,69);
+insert into t (id,a) values (644,70);
+insert into t (id,a) values (644,71);
+insert into t (id,a) values (644,72);
+insert into t (id,a) values (644,73);
+insert into t (id,a) values (644,74);
+insert into t (id,a) values (644,75);
+insert into t (id,a) values (644,76);
+insert into t (id,a) values (644,77);
+insert into t (id,a) values (644,78);
+insert into t (id,a) values (644,79);
+insert into t (id,a) values (644,80);
+insert into t (id,a) values (644,81);
+insert into t (id,a) values (644,82);
+insert into t (id,a) values (644,83);
+insert into t (id,a) values (644,84);
+insert into t (id,a) values (644,85);
+insert into t (id,a) values (644,86);
+insert into t (id,a) values (644,87);
+insert into t (id,a) values (644,88);
+insert into t (id,a) values (644,89);
+insert into t (id,a) values (644,90);
+insert into t (id,a) values (644,91);
+insert into t (id,a) values (644,92);
+insert into t (id,a) values (644,93);
+insert into t (id,a) values (644,94);
+insert into t (id,a) values (644,95);
+insert into t (id,a) values (644,96);
+insert into t (id,a) values (644,97);
+insert into t (id,a) values (644,98);
+insert into t (id,a) values (644,99);
+insert into t (id,a) values (645,0);
+insert into t (id,a) values (645,1);
+insert into t (id,a) values (645,2);
+insert into t (id,a) values (645,3);
+insert into t (id,a) values (645,4);
+insert into t (id,a) values (645,5);
+insert into t (id,a) values (645,6);
+insert into t (id,a) values (645,7);
+insert into t (id,a) values (645,8);
+insert into t (id,a) values (645,9);
+insert into t (id,a) values (645,10);
+insert into t (id,a) values (645,11);
+insert into t (id,a) values (645,12);
+insert into t (id,a) values (645,13);
+insert into t (id,a) values (645,14);
+insert into t (id,a) values (645,15);
+insert into t (id,a) values (645,16);
+insert into t (id,a) values (645,17);
+insert into t (id,a) values (645,18);
+insert into t (id,a) values (645,19);
+insert into t (id,a) values (645,20);
+insert into t (id,a) values (645,21);
+insert into t (id,a) values (645,22);
+insert into t (id,a) values (645,23);
+insert into t (id,a) values (645,24);
+insert into t (id,a) values (645,25);
+insert into t (id,a) values (645,26);
+insert into t (id,a) values (645,27);
+insert into t (id,a) values (645,28);
+insert into t (id,a) values (645,29);
+insert into t (id,a) values (645,30);
+insert into t (id,a) values (645,31);
+insert into t (id,a) values (645,32);
+insert into t (id,a) values (645,33);
+insert into t (id,a) values (645,34);
+insert into t (id,a) values (645,35);
+insert into t (id,a) values (645,36);
+insert into t (id,a) values (645,37);
+insert into t (id,a) values (645,38);
+insert into t (id,a) values (645,39);
+insert into t (id,a) values (645,40);
+insert into t (id,a) values (645,41);
+insert into t (id,a) values (645,42);
+insert into t (id,a) values (645,43);
+insert into t (id,a) values (645,44);
+insert into t (id,a) values (645,45);
+insert into t (id,a) values (645,46);
+insert into t (id,a) values (645,47);
+insert into t (id,a) values (645,48);
+insert into t (id,a) values (645,49);
+insert into t (id,a) values (645,50);
+insert into t (id,a) values (645,51);
+insert into t (id,a) values (645,52);
+insert into t (id,a) values (645,53);
+insert into t (id,a) values (645,54);
+insert into t (id,a) values (645,55);
+insert into t (id,a) values (645,56);
+insert into t (id,a) values (645,57);
+insert into t (id,a) values (645,58);
+insert into t (id,a) values (645,59);
+insert into t (id,a) values (645,60);
+insert into t (id,a) values (645,61);
+insert into t (id,a) values (645,62);
+insert into t (id,a) values (645,63);
+insert into t (id,a) values (645,64);
+insert into t (id,a) values (645,65);
+insert into t (id,a) values (645,66);
+insert into t (id,a) values (645,67);
+insert into t (id,a) values (645,68);
+insert into t (id,a) values (645,69);
+insert into t (id,a) values (645,70);
+insert into t (id,a) values (645,71);
+insert into t (id,a) values (645,72);
+insert into t (id,a) values (645,73);
+insert into t (id,a) values (645,74);
+insert into t (id,a) values (645,75);
+insert into t (id,a) values (645,76);
+insert into t (id,a) values (645,77);
+insert into t (id,a) values (645,78);
+insert into t (id,a) values (645,79);
+insert into t (id,a) values (645,80);
+insert into t (id,a) values (645,81);
+insert into t (id,a) values (645,82);
+insert into t (id,a) values (645,83);
+insert into t (id,a) values (645,84);
+insert into t (id,a) values (645,85);
+insert into t (id,a) values (645,86);
+insert into t (id,a) values (645,87);
+insert into t (id,a) values (645,88);
+insert into t (id,a) values (645,89);
+insert into t (id,a) values (645,90);
+insert into t (id,a) values (645,91);
+insert into t (id,a) values (645,92);
+insert into t (id,a) values (645,93);
+insert into t (id,a) values (645,94);
+insert into t (id,a) values (645,95);
+insert into t (id,a) values (645,96);
+insert into t (id,a) values (645,97);
+insert into t (id,a) values (645,98);
+insert into t (id,a) values (645,99);
+insert into t (id,a) values (646,0);
+insert into t (id,a) values (646,1);
+insert into t (id,a) values (646,2);
+insert into t (id,a) values (646,3);
+insert into t (id,a) values (646,4);
+insert into t (id,a) values (646,5);
+insert into t (id,a) values (646,6);
+insert into t (id,a) values (646,7);
+insert into t (id,a) values (646,8);
+insert into t (id,a) values (646,9);
+insert into t (id,a) values (646,10);
+insert into t (id,a) values (646,11);
+insert into t (id,a) values (646,12);
+insert into t (id,a) values (646,13);
+insert into t (id,a) values (646,14);
+insert into t (id,a) values (646,15);
+insert into t (id,a) values (646,16);
+insert into t (id,a) values (646,17);
+insert into t (id,a) values (646,18);
+insert into t (id,a) values (646,19);
+insert into t (id,a) values (646,20);
+insert into t (id,a) values (646,21);
+insert into t (id,a) values (646,22);
+insert into t (id,a) values (646,23);
+insert into t (id,a) values (646,24);
+insert into t (id,a) values (646,25);
+insert into t (id,a) values (646,26);
+insert into t (id,a) values (646,27);
+insert into t (id,a) values (646,28);
+insert into t (id,a) values (646,29);
+insert into t (id,a) values (646,30);
+insert into t (id,a) values (646,31);
+insert into t (id,a) values (646,32);
+insert into t (id,a) values (646,33);
+insert into t (id,a) values (646,34);
+insert into t (id,a) values (646,35);
+insert into t (id,a) values (646,36);
+insert into t (id,a) values (646,37);
+insert into t (id,a) values (646,38);
+insert into t (id,a) values (646,39);
+insert into t (id,a) values (646,40);
+insert into t (id,a) values (646,41);
+insert into t (id,a) values (646,42);
+insert into t (id,a) values (646,43);
+insert into t (id,a) values (646,44);
+insert into t (id,a) values (646,45);
+insert into t (id,a) values (646,46);
+insert into t (id,a) values (646,47);
+insert into t (id,a) values (646,48);
+insert into t (id,a) values (646,49);
+insert into t (id,a) values (646,50);
+insert into t (id,a) values (646,51);
+insert into t (id,a) values (646,52);
+insert into t (id,a) values (646,53);
+insert into t (id,a) values (646,54);
+insert into t (id,a) values (646,55);
+insert into t (id,a) values (646,56);
+insert into t (id,a) values (646,57);
+insert into t (id,a) values (646,58);
+insert into t (id,a) values (646,59);
+insert into t (id,a) values (646,60);
+insert into t (id,a) values (646,61);
+insert into t (id,a) values (646,62);
+insert into t (id,a) values (646,63);
+insert into t (id,a) values (646,64);
+insert into t (id,a) values (646,65);
+insert into t (id,a) values (646,66);
+insert into t (id,a) values (646,67);
+insert into t (id,a) values (646,68);
+insert into t (id,a) values (646,69);
+insert into t (id,a) values (646,70);
+insert into t (id,a) values (646,71);
+insert into t (id,a) values (646,72);
+insert into t (id,a) values (646,73);
+insert into t (id,a) values (646,74);
+insert into t (id,a) values (646,75);
+insert into t (id,a) values (646,76);
+insert into t (id,a) values (646,77);
+insert into t (id,a) values (646,78);
+insert into t (id,a) values (646,79);
+insert into t (id,a) values (646,80);
+insert into t (id,a) values (646,81);
+insert into t (id,a) values (646,82);
+insert into t (id,a) values (646,83);
+insert into t (id,a) values (646,84);
+insert into t (id,a) values (646,85);
+insert into t (id,a) values (646,86);
+insert into t (id,a) values (646,87);
+insert into t (id,a) values (646,88);
+insert into t (id,a) values (646,89);
+insert into t (id,a) values (646,90);
+insert into t (id,a) values (646,91);
+insert into t (id,a) values (646,92);
+insert into t (id,a) values (646,93);
+insert into t (id,a) values (646,94);
+insert into t (id,a) values (646,95);
+insert into t (id,a) values (646,96);
+insert into t (id,a) values (646,97);
+insert into t (id,a) values (646,98);
+insert into t (id,a) values (646,99);
+insert into t (id,a) values (647,0);
+insert into t (id,a) values (647,1);
+insert into t (id,a) values (647,2);
+insert into t (id,a) values (647,3);
+insert into t (id,a) values (647,4);
+insert into t (id,a) values (647,5);
+insert into t (id,a) values (647,6);
+insert into t (id,a) values (647,7);
+insert into t (id,a) values (647,8);
+insert into t (id,a) values (647,9);
+insert into t (id,a) values (647,10);
+insert into t (id,a) values (647,11);
+insert into t (id,a) values (647,12);
+insert into t (id,a) values (647,13);
+insert into t (id,a) values (647,14);
+insert into t (id,a) values (647,15);
+insert into t (id,a) values (647,16);
+insert into t (id,a) values (647,17);
+insert into t (id,a) values (647,18);
+insert into t (id,a) values (647,19);
+insert into t (id,a) values (647,20);
+insert into t (id,a) values (647,21);
+insert into t (id,a) values (647,22);
+insert into t (id,a) values (647,23);
+insert into t (id,a) values (647,24);
+insert into t (id,a) values (647,25);
+insert into t (id,a) values (647,26);
+insert into t (id,a) values (647,27);
+insert into t (id,a) values (647,28);
+insert into t (id,a) values (647,29);
+insert into t (id,a) values (647,30);
+insert into t (id,a) values (647,31);
+insert into t (id,a) values (647,32);
+insert into t (id,a) values (647,33);
+insert into t (id,a) values (647,34);
+insert into t (id,a) values (647,35);
+insert into t (id,a) values (647,36);
+insert into t (id,a) values (647,37);
+insert into t (id,a) values (647,38);
+insert into t (id,a) values (647,39);
+insert into t (id,a) values (647,40);
+insert into t (id,a) values (647,41);
+insert into t (id,a) values (647,42);
+insert into t (id,a) values (647,43);
+insert into t (id,a) values (647,44);
+insert into t (id,a) values (647,45);
+insert into t (id,a) values (647,46);
+insert into t (id,a) values (647,47);
+insert into t (id,a) values (647,48);
+insert into t (id,a) values (647,49);
+insert into t (id,a) values (647,50);
+insert into t (id,a) values (647,51);
+insert into t (id,a) values (647,52);
+insert into t (id,a) values (647,53);
+insert into t (id,a) values (647,54);
+insert into t (id,a) values (647,55);
+insert into t (id,a) values (647,56);
+insert into t (id,a) values (647,57);
+insert into t (id,a) values (647,58);
+insert into t (id,a) values (647,59);
+insert into t (id,a) values (647,60);
+insert into t (id,a) values (647,61);
+insert into t (id,a) values (647,62);
+insert into t (id,a) values (647,63);
+insert into t (id,a) values (647,64);
+insert into t (id,a) values (647,65);
+insert into t (id,a) values (647,66);
+insert into t (id,a) values (647,67);
+insert into t (id,a) values (647,68);
+insert into t (id,a) values (647,69);
+insert into t (id,a) values (647,70);
+insert into t (id,a) values (647,71);
+insert into t (id,a) values (647,72);
+insert into t (id,a) values (647,73);
+insert into t (id,a) values (647,74);
+insert into t (id,a) values (647,75);
+insert into t (id,a) values (647,76);
+insert into t (id,a) values (647,77);
+insert into t (id,a) values (647,78);
+insert into t (id,a) values (647,79);
+insert into t (id,a) values (647,80);
+insert into t (id,a) values (647,81);
+insert into t (id,a) values (647,82);
+insert into t (id,a) values (647,83);
+insert into t (id,a) values (647,84);
+insert into t (id,a) values (647,85);
+insert into t (id,a) values (647,86);
+insert into t (id,a) values (647,87);
+insert into t (id,a) values (647,88);
+insert into t (id,a) values (647,89);
+insert into t (id,a) values (647,90);
+insert into t (id,a) values (647,91);
+insert into t (id,a) values (647,92);
+insert into t (id,a) values (647,93);
+insert into t (id,a) values (647,94);
+insert into t (id,a) values (647,95);
+insert into t (id,a) values (647,96);
+insert into t (id,a) values (647,97);
+insert into t (id,a) values (647,98);
+insert into t (id,a) values (647,99);
+insert into t (id,a) values (648,0);
+insert into t (id,a) values (648,1);
+insert into t (id,a) values (648,2);
+insert into t (id,a) values (648,3);
+insert into t (id,a) values (648,4);
+insert into t (id,a) values (648,5);
+insert into t (id,a) values (648,6);
+insert into t (id,a) values (648,7);
+insert into t (id,a) values (648,8);
+insert into t (id,a) values (648,9);
+insert into t (id,a) values (648,10);
+insert into t (id,a) values (648,11);
+insert into t (id,a) values (648,12);
+insert into t (id,a) values (648,13);
+insert into t (id,a) values (648,14);
+insert into t (id,a) values (648,15);
+insert into t (id,a) values (648,16);
+insert into t (id,a) values (648,17);
+insert into t (id,a) values (648,18);
+insert into t (id,a) values (648,19);
+insert into t (id,a) values (648,20);
+insert into t (id,a) values (648,21);
+insert into t (id,a) values (648,22);
+insert into t (id,a) values (648,23);
+insert into t (id,a) values (648,24);
+insert into t (id,a) values (648,25);
+insert into t (id,a) values (648,26);
+insert into t (id,a) values (648,27);
+insert into t (id,a) values (648,28);
+insert into t (id,a) values (648,29);
+insert into t (id,a) values (648,30);
+insert into t (id,a) values (648,31);
+insert into t (id,a) values (648,32);
+insert into t (id,a) values (648,33);
+insert into t (id,a) values (648,34);
+insert into t (id,a) values (648,35);
+insert into t (id,a) values (648,36);
+insert into t (id,a) values (648,37);
+insert into t (id,a) values (648,38);
+insert into t (id,a) values (648,39);
+insert into t (id,a) values (648,40);
+insert into t (id,a) values (648,41);
+insert into t (id,a) values (648,42);
+insert into t (id,a) values (648,43);
+insert into t (id,a) values (648,44);
+insert into t (id,a) values (648,45);
+insert into t (id,a) values (648,46);
+insert into t (id,a) values (648,47);
+insert into t (id,a) values (648,48);
+insert into t (id,a) values (648,49);
+insert into t (id,a) values (648,50);
+insert into t (id,a) values (648,51);
+insert into t (id,a) values (648,52);
+insert into t (id,a) values (648,53);
+insert into t (id,a) values (648,54);
+insert into t (id,a) values (648,55);
+insert into t (id,a) values (648,56);
+insert into t (id,a) values (648,57);
+insert into t (id,a) values (648,58);
+insert into t (id,a) values (648,59);
+insert into t (id,a) values (648,60);
+insert into t (id,a) values (648,61);
+insert into t (id,a) values (648,62);
+insert into t (id,a) values (648,63);
+insert into t (id,a) values (648,64);
+insert into t (id,a) values (648,65);
+insert into t (id,a) values (648,66);
+insert into t (id,a) values (648,67);
+insert into t (id,a) values (648,68);
+insert into t (id,a) values (648,69);
+insert into t (id,a) values (648,70);
+insert into t (id,a) values (648,71);
+insert into t (id,a) values (648,72);
+insert into t (id,a) values (648,73);
+insert into t (id,a) values (648,74);
+insert into t (id,a) values (648,75);
+insert into t (id,a) values (648,76);
+insert into t (id,a) values (648,77);
+insert into t (id,a) values (648,78);
+insert into t (id,a) values (648,79);
+insert into t (id,a) values (648,80);
+insert into t (id,a) values (648,81);
+insert into t (id,a) values (648,82);
+insert into t (id,a) values (648,83);
+insert into t (id,a) values (648,84);
+insert into t (id,a) values (648,85);
+insert into t (id,a) values (648,86);
+insert into t (id,a) values (648,87);
+insert into t (id,a) values (648,88);
+insert into t (id,a) values (648,89);
+insert into t (id,a) values (648,90);
+insert into t (id,a) values (648,91);
+insert into t (id,a) values (648,92);
+insert into t (id,a) values (648,93);
+insert into t (id,a) values (648,94);
+insert into t (id,a) values (648,95);
+insert into t (id,a) values (648,96);
+insert into t (id,a) values (648,97);
+insert into t (id,a) values (648,98);
+insert into t (id,a) values (648,99);
+insert into t (id,a) values (649,0);
+insert into t (id,a) values (649,1);
+insert into t (id,a) values (649,2);
+insert into t (id,a) values (649,3);
+insert into t (id,a) values (649,4);
+insert into t (id,a) values (649,5);
+insert into t (id,a) values (649,6);
+insert into t (id,a) values (649,7);
+insert into t (id,a) values (649,8);
+insert into t (id,a) values (649,9);
+insert into t (id,a) values (649,10);
+insert into t (id,a) values (649,11);
+insert into t (id,a) values (649,12);
+insert into t (id,a) values (649,13);
+insert into t (id,a) values (649,14);
+insert into t (id,a) values (649,15);
+insert into t (id,a) values (649,16);
+insert into t (id,a) values (649,17);
+insert into t (id,a) values (649,18);
+insert into t (id,a) values (649,19);
+insert into t (id,a) values (649,20);
+insert into t (id,a) values (649,21);
+insert into t (id,a) values (649,22);
+insert into t (id,a) values (649,23);
+insert into t (id,a) values (649,24);
+insert into t (id,a) values (649,25);
+insert into t (id,a) values (649,26);
+insert into t (id,a) values (649,27);
+insert into t (id,a) values (649,28);
+insert into t (id,a) values (649,29);
+insert into t (id,a) values (649,30);
+insert into t (id,a) values (649,31);
+insert into t (id,a) values (649,32);
+insert into t (id,a) values (649,33);
+insert into t (id,a) values (649,34);
+insert into t (id,a) values (649,35);
+insert into t (id,a) values (649,36);
+insert into t (id,a) values (649,37);
+insert into t (id,a) values (649,38);
+insert into t (id,a) values (649,39);
+insert into t (id,a) values (649,40);
+insert into t (id,a) values (649,41);
+insert into t (id,a) values (649,42);
+insert into t (id,a) values (649,43);
+insert into t (id,a) values (649,44);
+insert into t (id,a) values (649,45);
+insert into t (id,a) values (649,46);
+insert into t (id,a) values (649,47);
+insert into t (id,a) values (649,48);
+insert into t (id,a) values (649,49);
+insert into t (id,a) values (649,50);
+insert into t (id,a) values (649,51);
+insert into t (id,a) values (649,52);
+insert into t (id,a) values (649,53);
+insert into t (id,a) values (649,54);
+insert into t (id,a) values (649,55);
+insert into t (id,a) values (649,56);
+insert into t (id,a) values (649,57);
+insert into t (id,a) values (649,58);
+insert into t (id,a) values (649,59);
+insert into t (id,a) values (649,60);
+insert into t (id,a) values (649,61);
+insert into t (id,a) values (649,62);
+insert into t (id,a) values (649,63);
+insert into t (id,a) values (649,64);
+insert into t (id,a) values (649,65);
+insert into t (id,a) values (649,66);
+insert into t (id,a) values (649,67);
+insert into t (id,a) values (649,68);
+insert into t (id,a) values (649,69);
+insert into t (id,a) values (649,70);
+insert into t (id,a) values (649,71);
+insert into t (id,a) values (649,72);
+insert into t (id,a) values (649,73);
+insert into t (id,a) values (649,74);
+insert into t (id,a) values (649,75);
+insert into t (id,a) values (649,76);
+insert into t (id,a) values (649,77);
+insert into t (id,a) values (649,78);
+insert into t (id,a) values (649,79);
+insert into t (id,a) values (649,80);
+insert into t (id,a) values (649,81);
+insert into t (id,a) values (649,82);
+insert into t (id,a) values (649,83);
+insert into t (id,a) values (649,84);
+insert into t (id,a) values (649,85);
+insert into t (id,a) values (649,86);
+insert into t (id,a) values (649,87);
+insert into t (id,a) values (649,88);
+insert into t (id,a) values (649,89);
+insert into t (id,a) values (649,90);
+insert into t (id,a) values (649,91);
+insert into t (id,a) values (649,92);
+insert into t (id,a) values (649,93);
+insert into t (id,a) values (649,94);
+insert into t (id,a) values (649,95);
+insert into t (id,a) values (649,96);
+insert into t (id,a) values (649,97);
+insert into t (id,a) values (649,98);
+insert into t (id,a) values (649,99);
+insert into t (id,a) values (650,0);
+insert into t (id,a) values (650,1);
+insert into t (id,a) values (650,2);
+insert into t (id,a) values (650,3);
+insert into t (id,a) values (650,4);
+insert into t (id,a) values (650,5);
+insert into t (id,a) values (650,6);
+insert into t (id,a) values (650,7);
+insert into t (id,a) values (650,8);
+insert into t (id,a) values (650,9);
+insert into t (id,a) values (650,10);
+insert into t (id,a) values (650,11);
+insert into t (id,a) values (650,12);
+insert into t (id,a) values (650,13);
+insert into t (id,a) values (650,14);
+insert into t (id,a) values (650,15);
+insert into t (id,a) values (650,16);
+insert into t (id,a) values (650,17);
+insert into t (id,a) values (650,18);
+insert into t (id,a) values (650,19);
+insert into t (id,a) values (650,20);
+insert into t (id,a) values (650,21);
+insert into t (id,a) values (650,22);
+insert into t (id,a) values (650,23);
+insert into t (id,a) values (650,24);
+insert into t (id,a) values (650,25);
+insert into t (id,a) values (650,26);
+insert into t (id,a) values (650,27);
+insert into t (id,a) values (650,28);
+insert into t (id,a) values (650,29);
+insert into t (id,a) values (650,30);
+insert into t (id,a) values (650,31);
+insert into t (id,a) values (650,32);
+insert into t (id,a) values (650,33);
+insert into t (id,a) values (650,34);
+insert into t (id,a) values (650,35);
+insert into t (id,a) values (650,36);
+insert into t (id,a) values (650,37);
+insert into t (id,a) values (650,38);
+insert into t (id,a) values (650,39);
+insert into t (id,a) values (650,40);
+insert into t (id,a) values (650,41);
+insert into t (id,a) values (650,42);
+insert into t (id,a) values (650,43);
+insert into t (id,a) values (650,44);
+insert into t (id,a) values (650,45);
+insert into t (id,a) values (650,46);
+insert into t (id,a) values (650,47);
+insert into t (id,a) values (650,48);
+insert into t (id,a) values (650,49);
+insert into t (id,a) values (650,50);
+insert into t (id,a) values (650,51);
+insert into t (id,a) values (650,52);
+insert into t (id,a) values (650,53);
+insert into t (id,a) values (650,54);
+insert into t (id,a) values (650,55);
+insert into t (id,a) values (650,56);
+insert into t (id,a) values (650,57);
+insert into t (id,a) values (650,58);
+insert into t (id,a) values (650,59);
+insert into t (id,a) values (650,60);
+insert into t (id,a) values (650,61);
+insert into t (id,a) values (650,62);
+insert into t (id,a) values (650,63);
+insert into t (id,a) values (650,64);
+insert into t (id,a) values (650,65);
+insert into t (id,a) values (650,66);
+insert into t (id,a) values (650,67);
+insert into t (id,a) values (650,68);
+insert into t (id,a) values (650,69);
+insert into t (id,a) values (650,70);
+insert into t (id,a) values (650,71);
+insert into t (id,a) values (650,72);
+insert into t (id,a) values (650,73);
+insert into t (id,a) values (650,74);
+insert into t (id,a) values (650,75);
+insert into t (id,a) values (650,76);
+insert into t (id,a) values (650,77);
+insert into t (id,a) values (650,78);
+insert into t (id,a) values (650,79);
+insert into t (id,a) values (650,80);
+insert into t (id,a) values (650,81);
+insert into t (id,a) values (650,82);
+insert into t (id,a) values (650,83);
+insert into t (id,a) values (650,84);
+insert into t (id,a) values (650,85);
+insert into t (id,a) values (650,86);
+insert into t (id,a) values (650,87);
+insert into t (id,a) values (650,88);
+insert into t (id,a) values (650,89);
+insert into t (id,a) values (650,90);
+insert into t (id,a) values (650,91);
+insert into t (id,a) values (650,92);
+insert into t (id,a) values (650,93);
+insert into t (id,a) values (650,94);
+insert into t (id,a) values (650,95);
+insert into t (id,a) values (650,96);
+insert into t (id,a) values (650,97);
+insert into t (id,a) values (650,98);
+insert into t (id,a) values (650,99);
+insert into t (id,a) values (651,0);
+insert into t (id,a) values (651,1);
+insert into t (id,a) values (651,2);
+insert into t (id,a) values (651,3);
+insert into t (id,a) values (651,4);
+insert into t (id,a) values (651,5);
+insert into t (id,a) values (651,6);
+insert into t (id,a) values (651,7);
+insert into t (id,a) values (651,8);
+insert into t (id,a) values (651,9);
+insert into t (id,a) values (651,10);
+insert into t (id,a) values (651,11);
+insert into t (id,a) values (651,12);
+insert into t (id,a) values (651,13);
+insert into t (id,a) values (651,14);
+insert into t (id,a) values (651,15);
+insert into t (id,a) values (651,16);
+insert into t (id,a) values (651,17);
+insert into t (id,a) values (651,18);
+insert into t (id,a) values (651,19);
+insert into t (id,a) values (651,20);
+insert into t (id,a) values (651,21);
+insert into t (id,a) values (651,22);
+insert into t (id,a) values (651,23);
+insert into t (id,a) values (651,24);
+insert into t (id,a) values (651,25);
+insert into t (id,a) values (651,26);
+insert into t (id,a) values (651,27);
+insert into t (id,a) values (651,28);
+insert into t (id,a) values (651,29);
+insert into t (id,a) values (651,30);
+insert into t (id,a) values (651,31);
+insert into t (id,a) values (651,32);
+insert into t (id,a) values (651,33);
+insert into t (id,a) values (651,34);
+insert into t (id,a) values (651,35);
+insert into t (id,a) values (651,36);
+insert into t (id,a) values (651,37);
+insert into t (id,a) values (651,38);
+insert into t (id,a) values (651,39);
+insert into t (id,a) values (651,40);
+insert into t (id,a) values (651,41);
+insert into t (id,a) values (651,42);
+insert into t (id,a) values (651,43);
+insert into t (id,a) values (651,44);
+insert into t (id,a) values (651,45);
+insert into t (id,a) values (651,46);
+insert into t (id,a) values (651,47);
+insert into t (id,a) values (651,48);
+insert into t (id,a) values (651,49);
+insert into t (id,a) values (651,50);
+insert into t (id,a) values (651,51);
+insert into t (id,a) values (651,52);
+insert into t (id,a) values (651,53);
+insert into t (id,a) values (651,54);
+insert into t (id,a) values (651,55);
+insert into t (id,a) values (651,56);
+insert into t (id,a) values (651,57);
+insert into t (id,a) values (651,58);
+insert into t (id,a) values (651,59);
+insert into t (id,a) values (651,60);
+insert into t (id,a) values (651,61);
+insert into t (id,a) values (651,62);
+insert into t (id,a) values (651,63);
+insert into t (id,a) values (651,64);
+insert into t (id,a) values (651,65);
+insert into t (id,a) values (651,66);
+insert into t (id,a) values (651,67);
+insert into t (id,a) values (651,68);
+insert into t (id,a) values (651,69);
+insert into t (id,a) values (651,70);
+insert into t (id,a) values (651,71);
+insert into t (id,a) values (651,72);
+insert into t (id,a) values (651,73);
+insert into t (id,a) values (651,74);
+insert into t (id,a) values (651,75);
+insert into t (id,a) values (651,76);
+insert into t (id,a) values (651,77);
+insert into t (id,a) values (651,78);
+insert into t (id,a) values (651,79);
+insert into t (id,a) values (651,80);
+insert into t (id,a) values (651,81);
+insert into t (id,a) values (651,82);
+insert into t (id,a) values (651,83);
+insert into t (id,a) values (651,84);
+insert into t (id,a) values (651,85);
+insert into t (id,a) values (651,86);
+insert into t (id,a) values (651,87);
+insert into t (id,a) values (651,88);
+insert into t (id,a) values (651,89);
+insert into t (id,a) values (651,90);
+insert into t (id,a) values (651,91);
+insert into t (id,a) values (651,92);
+insert into t (id,a) values (651,93);
+insert into t (id,a) values (651,94);
+insert into t (id,a) values (651,95);
+insert into t (id,a) values (651,96);
+insert into t (id,a) values (651,97);
+insert into t (id,a) values (651,98);
+insert into t (id,a) values (651,99);
+insert into t (id,a) values (652,0);
+insert into t (id,a) values (652,1);
+insert into t (id,a) values (652,2);
+insert into t (id,a) values (652,3);
+insert into t (id,a) values (652,4);
+insert into t (id,a) values (652,5);
+insert into t (id,a) values (652,6);
+insert into t (id,a) values (652,7);
+insert into t (id,a) values (652,8);
+insert into t (id,a) values (652,9);
+insert into t (id,a) values (652,10);
+insert into t (id,a) values (652,11);
+insert into t (id,a) values (652,12);
+insert into t (id,a) values (652,13);
+insert into t (id,a) values (652,14);
+insert into t (id,a) values (652,15);
+insert into t (id,a) values (652,16);
+insert into t (id,a) values (652,17);
+insert into t (id,a) values (652,18);
+insert into t (id,a) values (652,19);
+insert into t (id,a) values (652,20);
+insert into t (id,a) values (652,21);
+insert into t (id,a) values (652,22);
+insert into t (id,a) values (652,23);
+insert into t (id,a) values (652,24);
+insert into t (id,a) values (652,25);
+insert into t (id,a) values (652,26);
+insert into t (id,a) values (652,27);
+insert into t (id,a) values (652,28);
+insert into t (id,a) values (652,29);
+insert into t (id,a) values (652,30);
+insert into t (id,a) values (652,31);
+insert into t (id,a) values (652,32);
+insert into t (id,a) values (652,33);
+insert into t (id,a) values (652,34);
+insert into t (id,a) values (652,35);
+insert into t (id,a) values (652,36);
+insert into t (id,a) values (652,37);
+insert into t (id,a) values (652,38);
+insert into t (id,a) values (652,39);
+insert into t (id,a) values (652,40);
+insert into t (id,a) values (652,41);
+insert into t (id,a) values (652,42);
+insert into t (id,a) values (652,43);
+insert into t (id,a) values (652,44);
+insert into t (id,a) values (652,45);
+insert into t (id,a) values (652,46);
+insert into t (id,a) values (652,47);
+insert into t (id,a) values (652,48);
+insert into t (id,a) values (652,49);
+insert into t (id,a) values (652,50);
+insert into t (id,a) values (652,51);
+insert into t (id,a) values (652,52);
+insert into t (id,a) values (652,53);
+insert into t (id,a) values (652,54);
+insert into t (id,a) values (652,55);
+insert into t (id,a) values (652,56);
+insert into t (id,a) values (652,57);
+insert into t (id,a) values (652,58);
+insert into t (id,a) values (652,59);
+insert into t (id,a) values (652,60);
+insert into t (id,a) values (652,61);
+insert into t (id,a) values (652,62);
+insert into t (id,a) values (652,63);
+insert into t (id,a) values (652,64);
+insert into t (id,a) values (652,65);
+insert into t (id,a) values (652,66);
+insert into t (id,a) values (652,67);
+insert into t (id,a) values (652,68);
+insert into t (id,a) values (652,69);
+insert into t (id,a) values (652,70);
+insert into t (id,a) values (652,71);
+insert into t (id,a) values (652,72);
+insert into t (id,a) values (652,73);
+insert into t (id,a) values (652,74);
+insert into t (id,a) values (652,75);
+insert into t (id,a) values (652,76);
+insert into t (id,a) values (652,77);
+insert into t (id,a) values (652,78);
+insert into t (id,a) values (652,79);
+insert into t (id,a) values (652,80);
+insert into t (id,a) values (652,81);
+insert into t (id,a) values (652,82);
+insert into t (id,a) values (652,83);
+insert into t (id,a) values (652,84);
+insert into t (id,a) values (652,85);
+insert into t (id,a) values (652,86);
+insert into t (id,a) values (652,87);
+insert into t (id,a) values (652,88);
+insert into t (id,a) values (652,89);
+insert into t (id,a) values (652,90);
+insert into t (id,a) values (652,91);
+insert into t (id,a) values (652,92);
+insert into t (id,a) values (652,93);
+insert into t (id,a) values (652,94);
+insert into t (id,a) values (652,95);
+insert into t (id,a) values (652,96);
+insert into t (id,a) values (652,97);
+insert into t (id,a) values (652,98);
+insert into t (id,a) values (652,99);
+insert into t (id,a) values (653,0);
+insert into t (id,a) values (653,1);
+insert into t (id,a) values (653,2);
+insert into t (id,a) values (653,3);
+insert into t (id,a) values (653,4);
+insert into t (id,a) values (653,5);
+insert into t (id,a) values (653,6);
+insert into t (id,a) values (653,7);
+insert into t (id,a) values (653,8);
+insert into t (id,a) values (653,9);
+insert into t (id,a) values (653,10);
+insert into t (id,a) values (653,11);
+insert into t (id,a) values (653,12);
+insert into t (id,a) values (653,13);
+insert into t (id,a) values (653,14);
+insert into t (id,a) values (653,15);
+insert into t (id,a) values (653,16);
+insert into t (id,a) values (653,17);
+insert into t (id,a) values (653,18);
+insert into t (id,a) values (653,19);
+insert into t (id,a) values (653,20);
+insert into t (id,a) values (653,21);
+insert into t (id,a) values (653,22);
+insert into t (id,a) values (653,23);
+insert into t (id,a) values (653,24);
+insert into t (id,a) values (653,25);
+insert into t (id,a) values (653,26);
+insert into t (id,a) values (653,27);
+insert into t (id,a) values (653,28);
+insert into t (id,a) values (653,29);
+insert into t (id,a) values (653,30);
+insert into t (id,a) values (653,31);
+insert into t (id,a) values (653,32);
+insert into t (id,a) values (653,33);
+insert into t (id,a) values (653,34);
+insert into t (id,a) values (653,35);
+insert into t (id,a) values (653,36);
+insert into t (id,a) values (653,37);
+insert into t (id,a) values (653,38);
+insert into t (id,a) values (653,39);
+insert into t (id,a) values (653,40);
+insert into t (id,a) values (653,41);
+insert into t (id,a) values (653,42);
+insert into t (id,a) values (653,43);
+insert into t (id,a) values (653,44);
+insert into t (id,a) values (653,45);
+insert into t (id,a) values (653,46);
+insert into t (id,a) values (653,47);
+insert into t (id,a) values (653,48);
+insert into t (id,a) values (653,49);
+insert into t (id,a) values (653,50);
+insert into t (id,a) values (653,51);
+insert into t (id,a) values (653,52);
+insert into t (id,a) values (653,53);
+insert into t (id,a) values (653,54);
+insert into t (id,a) values (653,55);
+insert into t (id,a) values (653,56);
+insert into t (id,a) values (653,57);
+insert into t (id,a) values (653,58);
+insert into t (id,a) values (653,59);
+insert into t (id,a) values (653,60);
+insert into t (id,a) values (653,61);
+insert into t (id,a) values (653,62);
+insert into t (id,a) values (653,63);
+insert into t (id,a) values (653,64);
+insert into t (id,a) values (653,65);
+insert into t (id,a) values (653,66);
+insert into t (id,a) values (653,67);
+insert into t (id,a) values (653,68);
+insert into t (id,a) values (653,69);
+insert into t (id,a) values (653,70);
+insert into t (id,a) values (653,71);
+insert into t (id,a) values (653,72);
+insert into t (id,a) values (653,73);
+insert into t (id,a) values (653,74);
+insert into t (id,a) values (653,75);
+insert into t (id,a) values (653,76);
+insert into t (id,a) values (653,77);
+insert into t (id,a) values (653,78);
+insert into t (id,a) values (653,79);
+insert into t (id,a) values (653,80);
+insert into t (id,a) values (653,81);
+insert into t (id,a) values (653,82);
+insert into t (id,a) values (653,83);
+insert into t (id,a) values (653,84);
+insert into t (id,a) values (653,85);
+insert into t (id,a) values (653,86);
+insert into t (id,a) values (653,87);
+insert into t (id,a) values (653,88);
+insert into t (id,a) values (653,89);
+insert into t (id,a) values (653,90);
+insert into t (id,a) values (653,91);
+insert into t (id,a) values (653,92);
+insert into t (id,a) values (653,93);
+insert into t (id,a) values (653,94);
+insert into t (id,a) values (653,95);
+insert into t (id,a) values (653,96);
+insert into t (id,a) values (653,97);
+insert into t (id,a) values (653,98);
+insert into t (id,a) values (653,99);
+insert into t (id,a) values (654,0);
+insert into t (id,a) values (654,1);
+insert into t (id,a) values (654,2);
+insert into t (id,a) values (654,3);
+insert into t (id,a) values (654,4);
+insert into t (id,a) values (654,5);
+insert into t (id,a) values (654,6);
+insert into t (id,a) values (654,7);
+insert into t (id,a) values (654,8);
+insert into t (id,a) values (654,9);
+insert into t (id,a) values (654,10);
+insert into t (id,a) values (654,11);
+insert into t (id,a) values (654,12);
+insert into t (id,a) values (654,13);
+insert into t (id,a) values (654,14);
+insert into t (id,a) values (654,15);
+insert into t (id,a) values (654,16);
+insert into t (id,a) values (654,17);
+insert into t (id,a) values (654,18);
+insert into t (id,a) values (654,19);
+insert into t (id,a) values (654,20);
+insert into t (id,a) values (654,21);
+insert into t (id,a) values (654,22);
+insert into t (id,a) values (654,23);
+insert into t (id,a) values (654,24);
+insert into t (id,a) values (654,25);
+insert into t (id,a) values (654,26);
+insert into t (id,a) values (654,27);
+insert into t (id,a) values (654,28);
+insert into t (id,a) values (654,29);
+insert into t (id,a) values (654,30);
+insert into t (id,a) values (654,31);
+insert into t (id,a) values (654,32);
+insert into t (id,a) values (654,33);
+insert into t (id,a) values (654,34);
+insert into t (id,a) values (654,35);
+insert into t (id,a) values (654,36);
+insert into t (id,a) values (654,37);
+insert into t (id,a) values (654,38);
+insert into t (id,a) values (654,39);
+insert into t (id,a) values (654,40);
+insert into t (id,a) values (654,41);
+insert into t (id,a) values (654,42);
+insert into t (id,a) values (654,43);
+insert into t (id,a) values (654,44);
+insert into t (id,a) values (654,45);
+insert into t (id,a) values (654,46);
+insert into t (id,a) values (654,47);
+insert into t (id,a) values (654,48);
+insert into t (id,a) values (654,49);
+insert into t (id,a) values (654,50);
+insert into t (id,a) values (654,51);
+insert into t (id,a) values (654,52);
+insert into t (id,a) values (654,53);
+insert into t (id,a) values (654,54);
+insert into t (id,a) values (654,55);
+insert into t (id,a) values (654,56);
+insert into t (id,a) values (654,57);
+insert into t (id,a) values (654,58);
+insert into t (id,a) values (654,59);
+insert into t (id,a) values (654,60);
+insert into t (id,a) values (654,61);
+insert into t (id,a) values (654,62);
+insert into t (id,a) values (654,63);
+insert into t (id,a) values (654,64);
+insert into t (id,a) values (654,65);
+insert into t (id,a) values (654,66);
+insert into t (id,a) values (654,67);
+insert into t (id,a) values (654,68);
+insert into t (id,a) values (654,69);
+insert into t (id,a) values (654,70);
+insert into t (id,a) values (654,71);
+insert into t (id,a) values (654,72);
+insert into t (id,a) values (654,73);
+insert into t (id,a) values (654,74);
+insert into t (id,a) values (654,75);
+insert into t (id,a) values (654,76);
+insert into t (id,a) values (654,77);
+insert into t (id,a) values (654,78);
+insert into t (id,a) values (654,79);
+insert into t (id,a) values (654,80);
+insert into t (id,a) values (654,81);
+insert into t (id,a) values (654,82);
+insert into t (id,a) values (654,83);
+insert into t (id,a) values (654,84);
+insert into t (id,a) values (654,85);
+insert into t (id,a) values (654,86);
+insert into t (id,a) values (654,87);
+insert into t (id,a) values (654,88);
+insert into t (id,a) values (654,89);
+insert into t (id,a) values (654,90);
+insert into t (id,a) values (654,91);
+insert into t (id,a) values (654,92);
+insert into t (id,a) values (654,93);
+insert into t (id,a) values (654,94);
+insert into t (id,a) values (654,95);
+insert into t (id,a) values (654,96);
+insert into t (id,a) values (654,97);
+insert into t (id,a) values (654,98);
+insert into t (id,a) values (654,99);
+insert into t (id,a) values (655,0);
+insert into t (id,a) values (655,1);
+insert into t (id,a) values (655,2);
+insert into t (id,a) values (655,3);
+insert into t (id,a) values (655,4);
+insert into t (id,a) values (655,5);
+insert into t (id,a) values (655,6);
+insert into t (id,a) values (655,7);
+insert into t (id,a) values (655,8);
+insert into t (id,a) values (655,9);
+insert into t (id,a) values (655,10);
+insert into t (id,a) values (655,11);
+insert into t (id,a) values (655,12);
+insert into t (id,a) values (655,13);
+insert into t (id,a) values (655,14);
+insert into t (id,a) values (655,15);
+insert into t (id,a) values (655,16);
+insert into t (id,a) values (655,17);
+insert into t (id,a) values (655,18);
+insert into t (id,a) values (655,19);
+insert into t (id,a) values (655,20);
+insert into t (id,a) values (655,21);
+insert into t (id,a) values (655,22);
+insert into t (id,a) values (655,23);
+insert into t (id,a) values (655,24);
+insert into t (id,a) values (655,25);
+insert into t (id,a) values (655,26);
+insert into t (id,a) values (655,27);
+insert into t (id,a) values (655,28);
+insert into t (id,a) values (655,29);
+insert into t (id,a) values (655,30);
+insert into t (id,a) values (655,31);
+insert into t (id,a) values (655,32);
+insert into t (id,a) values (655,33);
+insert into t (id,a) values (655,34);
+insert into t (id,a) values (655,35);
+insert into t (id,a) values (655,36);
+insert into t (id,a) values (655,37);
+insert into t (id,a) values (655,38);
+insert into t (id,a) values (655,39);
+insert into t (id,a) values (655,40);
+insert into t (id,a) values (655,41);
+insert into t (id,a) values (655,42);
+insert into t (id,a) values (655,43);
+insert into t (id,a) values (655,44);
+insert into t (id,a) values (655,45);
+insert into t (id,a) values (655,46);
+insert into t (id,a) values (655,47);
+insert into t (id,a) values (655,48);
+insert into t (id,a) values (655,49);
+insert into t (id,a) values (655,50);
+insert into t (id,a) values (655,51);
+insert into t (id,a) values (655,52);
+insert into t (id,a) values (655,53);
+insert into t (id,a) values (655,54);
+insert into t (id,a) values (655,55);
+insert into t (id,a) values (655,56);
+insert into t (id,a) values (655,57);
+insert into t (id,a) values (655,58);
+insert into t (id,a) values (655,59);
+insert into t (id,a) values (655,60);
+insert into t (id,a) values (655,61);
+insert into t (id,a) values (655,62);
+insert into t (id,a) values (655,63);
+insert into t (id,a) values (655,64);
+insert into t (id,a) values (655,65);
+insert into t (id,a) values (655,66);
+insert into t (id,a) values (655,67);
+insert into t (id,a) values (655,68);
+insert into t (id,a) values (655,69);
+insert into t (id,a) values (655,70);
+insert into t (id,a) values (655,71);
+insert into t (id,a) values (655,72);
+insert into t (id,a) values (655,73);
+insert into t (id,a) values (655,74);
+insert into t (id,a) values (655,75);
+insert into t (id,a) values (655,76);
+insert into t (id,a) values (655,77);
+insert into t (id,a) values (655,78);
+insert into t (id,a) values (655,79);
+insert into t (id,a) values (655,80);
+insert into t (id,a) values (655,81);
+insert into t (id,a) values (655,82);
+insert into t (id,a) values (655,83);
+insert into t (id,a) values (655,84);
+insert into t (id,a) values (655,85);
+insert into t (id,a) values (655,86);
+insert into t (id,a) values (655,87);
+insert into t (id,a) values (655,88);
+insert into t (id,a) values (655,89);
+insert into t (id,a) values (655,90);
+insert into t (id,a) values (655,91);
+insert into t (id,a) values (655,92);
+insert into t (id,a) values (655,93);
+insert into t (id,a) values (655,94);
+insert into t (id,a) values (655,95);
+insert into t (id,a) values (655,96);
+insert into t (id,a) values (655,97);
+insert into t (id,a) values (655,98);
+insert into t (id,a) values (655,99);
+insert into t (id,a) values (656,0);
+insert into t (id,a) values (656,1);
+insert into t (id,a) values (656,2);
+insert into t (id,a) values (656,3);
+insert into t (id,a) values (656,4);
+insert into t (id,a) values (656,5);
+insert into t (id,a) values (656,6);
+insert into t (id,a) values (656,7);
+insert into t (id,a) values (656,8);
+insert into t (id,a) values (656,9);
+insert into t (id,a) values (656,10);
+insert into t (id,a) values (656,11);
+insert into t (id,a) values (656,12);
+insert into t (id,a) values (656,13);
+insert into t (id,a) values (656,14);
+insert into t (id,a) values (656,15);
+insert into t (id,a) values (656,16);
+insert into t (id,a) values (656,17);
+insert into t (id,a) values (656,18);
+insert into t (id,a) values (656,19);
+insert into t (id,a) values (656,20);
+insert into t (id,a) values (656,21);
+insert into t (id,a) values (656,22);
+insert into t (id,a) values (656,23);
+insert into t (id,a) values (656,24);
+insert into t (id,a) values (656,25);
+insert into t (id,a) values (656,26);
+insert into t (id,a) values (656,27);
+insert into t (id,a) values (656,28);
+insert into t (id,a) values (656,29);
+insert into t (id,a) values (656,30);
+insert into t (id,a) values (656,31);
+insert into t (id,a) values (656,32);
+insert into t (id,a) values (656,33);
+insert into t (id,a) values (656,34);
+insert into t (id,a) values (656,35);
+insert into t (id,a) values (656,36);
+insert into t (id,a) values (656,37);
+insert into t (id,a) values (656,38);
+insert into t (id,a) values (656,39);
+insert into t (id,a) values (656,40);
+insert into t (id,a) values (656,41);
+insert into t (id,a) values (656,42);
+insert into t (id,a) values (656,43);
+insert into t (id,a) values (656,44);
+insert into t (id,a) values (656,45);
+insert into t (id,a) values (656,46);
+insert into t (id,a) values (656,47);
+insert into t (id,a) values (656,48);
+insert into t (id,a) values (656,49);
+insert into t (id,a) values (656,50);
+insert into t (id,a) values (656,51);
+insert into t (id,a) values (656,52);
+insert into t (id,a) values (656,53);
+insert into t (id,a) values (656,54);
+insert into t (id,a) values (656,55);
+insert into t (id,a) values (656,56);
+insert into t (id,a) values (656,57);
+insert into t (id,a) values (656,58);
+insert into t (id,a) values (656,59);
+insert into t (id,a) values (656,60);
+insert into t (id,a) values (656,61);
+insert into t (id,a) values (656,62);
+insert into t (id,a) values (656,63);
+insert into t (id,a) values (656,64);
+insert into t (id,a) values (656,65);
+insert into t (id,a) values (656,66);
+insert into t (id,a) values (656,67);
+insert into t (id,a) values (656,68);
+insert into t (id,a) values (656,69);
+insert into t (id,a) values (656,70);
+insert into t (id,a) values (656,71);
+insert into t (id,a) values (656,72);
+insert into t (id,a) values (656,73);
+insert into t (id,a) values (656,74);
+insert into t (id,a) values (656,75);
+insert into t (id,a) values (656,76);
+insert into t (id,a) values (656,77);
+insert into t (id,a) values (656,78);
+insert into t (id,a) values (656,79);
+insert into t (id,a) values (656,80);
+insert into t (id,a) values (656,81);
+insert into t (id,a) values (656,82);
+insert into t (id,a) values (656,83);
+insert into t (id,a) values (656,84);
+insert into t (id,a) values (656,85);
+insert into t (id,a) values (656,86);
+insert into t (id,a) values (656,87);
+insert into t (id,a) values (656,88);
+insert into t (id,a) values (656,89);
+insert into t (id,a) values (656,90);
+insert into t (id,a) values (656,91);
+insert into t (id,a) values (656,92);
+insert into t (id,a) values (656,93);
+insert into t (id,a) values (656,94);
+insert into t (id,a) values (656,95);
+insert into t (id,a) values (656,96);
+insert into t (id,a) values (656,97);
+insert into t (id,a) values (656,98);
+insert into t (id,a) values (656,99);
+insert into t (id,a) values (657,0);
+insert into t (id,a) values (657,1);
+insert into t (id,a) values (657,2);
+insert into t (id,a) values (657,3);
+insert into t (id,a) values (657,4);
+insert into t (id,a) values (657,5);
+insert into t (id,a) values (657,6);
+insert into t (id,a) values (657,7);
+insert into t (id,a) values (657,8);
+insert into t (id,a) values (657,9);
+insert into t (id,a) values (657,10);
+insert into t (id,a) values (657,11);
+insert into t (id,a) values (657,12);
+insert into t (id,a) values (657,13);
+insert into t (id,a) values (657,14);
+insert into t (id,a) values (657,15);
+insert into t (id,a) values (657,16);
+insert into t (id,a) values (657,17);
+insert into t (id,a) values (657,18);
+insert into t (id,a) values (657,19);
+insert into t (id,a) values (657,20);
+insert into t (id,a) values (657,21);
+insert into t (id,a) values (657,22);
+insert into t (id,a) values (657,23);
+insert into t (id,a) values (657,24);
+insert into t (id,a) values (657,25);
+insert into t (id,a) values (657,26);
+insert into t (id,a) values (657,27);
+insert into t (id,a) values (657,28);
+insert into t (id,a) values (657,29);
+insert into t (id,a) values (657,30);
+insert into t (id,a) values (657,31);
+insert into t (id,a) values (657,32);
+insert into t (id,a) values (657,33);
+insert into t (id,a) values (657,34);
+insert into t (id,a) values (657,35);
+insert into t (id,a) values (657,36);
+insert into t (id,a) values (657,37);
+insert into t (id,a) values (657,38);
+insert into t (id,a) values (657,39);
+insert into t (id,a) values (657,40);
+insert into t (id,a) values (657,41);
+insert into t (id,a) values (657,42);
+insert into t (id,a) values (657,43);
+insert into t (id,a) values (657,44);
+insert into t (id,a) values (657,45);
+insert into t (id,a) values (657,46);
+insert into t (id,a) values (657,47);
+insert into t (id,a) values (657,48);
+insert into t (id,a) values (657,49);
+insert into t (id,a) values (657,50);
+insert into t (id,a) values (657,51);
+insert into t (id,a) values (657,52);
+insert into t (id,a) values (657,53);
+insert into t (id,a) values (657,54);
+insert into t (id,a) values (657,55);
+insert into t (id,a) values (657,56);
+insert into t (id,a) values (657,57);
+insert into t (id,a) values (657,58);
+insert into t (id,a) values (657,59);
+insert into t (id,a) values (657,60);
+insert into t (id,a) values (657,61);
+insert into t (id,a) values (657,62);
+insert into t (id,a) values (657,63);
+insert into t (id,a) values (657,64);
+insert into t (id,a) values (657,65);
+insert into t (id,a) values (657,66);
+insert into t (id,a) values (657,67);
+insert into t (id,a) values (657,68);
+insert into t (id,a) values (657,69);
+insert into t (id,a) values (657,70);
+insert into t (id,a) values (657,71);
+insert into t (id,a) values (657,72);
+insert into t (id,a) values (657,73);
+insert into t (id,a) values (657,74);
+insert into t (id,a) values (657,75);
+insert into t (id,a) values (657,76);
+insert into t (id,a) values (657,77);
+insert into t (id,a) values (657,78);
+insert into t (id,a) values (657,79);
+insert into t (id,a) values (657,80);
+insert into t (id,a) values (657,81);
+insert into t (id,a) values (657,82);
+insert into t (id,a) values (657,83);
+insert into t (id,a) values (657,84);
+insert into t (id,a) values (657,85);
+insert into t (id,a) values (657,86);
+insert into t (id,a) values (657,87);
+insert into t (id,a) values (657,88);
+insert into t (id,a) values (657,89);
+insert into t (id,a) values (657,90);
+insert into t (id,a) values (657,91);
+insert into t (id,a) values (657,92);
+insert into t (id,a) values (657,93);
+insert into t (id,a) values (657,94);
+insert into t (id,a) values (657,95);
+insert into t (id,a) values (657,96);
+insert into t (id,a) values (657,97);
+insert into t (id,a) values (657,98);
+insert into t (id,a) values (657,99);
+insert into t (id,a) values (658,0);
+insert into t (id,a) values (658,1);
+insert into t (id,a) values (658,2);
+insert into t (id,a) values (658,3);
+insert into t (id,a) values (658,4);
+insert into t (id,a) values (658,5);
+insert into t (id,a) values (658,6);
+insert into t (id,a) values (658,7);
+insert into t (id,a) values (658,8);
+insert into t (id,a) values (658,9);
+insert into t (id,a) values (658,10);
+insert into t (id,a) values (658,11);
+insert into t (id,a) values (658,12);
+insert into t (id,a) values (658,13);
+insert into t (id,a) values (658,14);
+insert into t (id,a) values (658,15);
+insert into t (id,a) values (658,16);
+insert into t (id,a) values (658,17);
+insert into t (id,a) values (658,18);
+insert into t (id,a) values (658,19);
+insert into t (id,a) values (658,20);
+insert into t (id,a) values (658,21);
+insert into t (id,a) values (658,22);
+insert into t (id,a) values (658,23);
+insert into t (id,a) values (658,24);
+insert into t (id,a) values (658,25);
+insert into t (id,a) values (658,26);
+insert into t (id,a) values (658,27);
+insert into t (id,a) values (658,28);
+insert into t (id,a) values (658,29);
+insert into t (id,a) values (658,30);
+insert into t (id,a) values (658,31);
+insert into t (id,a) values (658,32);
+insert into t (id,a) values (658,33);
+insert into t (id,a) values (658,34);
+insert into t (id,a) values (658,35);
+insert into t (id,a) values (658,36);
+insert into t (id,a) values (658,37);
+insert into t (id,a) values (658,38);
+insert into t (id,a) values (658,39);
+insert into t (id,a) values (658,40);
+insert into t (id,a) values (658,41);
+insert into t (id,a) values (658,42);
+insert into t (id,a) values (658,43);
+insert into t (id,a) values (658,44);
+insert into t (id,a) values (658,45);
+insert into t (id,a) values (658,46);
+insert into t (id,a) values (658,47);
+insert into t (id,a) values (658,48);
+insert into t (id,a) values (658,49);
+insert into t (id,a) values (658,50);
+insert into t (id,a) values (658,51);
+insert into t (id,a) values (658,52);
+insert into t (id,a) values (658,53);
+insert into t (id,a) values (658,54);
+insert into t (id,a) values (658,55);
+insert into t (id,a) values (658,56);
+insert into t (id,a) values (658,57);
+insert into t (id,a) values (658,58);
+insert into t (id,a) values (658,59);
+insert into t (id,a) values (658,60);
+insert into t (id,a) values (658,61);
+insert into t (id,a) values (658,62);
+insert into t (id,a) values (658,63);
+insert into t (id,a) values (658,64);
+insert into t (id,a) values (658,65);
+insert into t (id,a) values (658,66);
+insert into t (id,a) values (658,67);
+insert into t (id,a) values (658,68);
+insert into t (id,a) values (658,69);
+insert into t (id,a) values (658,70);
+insert into t (id,a) values (658,71);
+insert into t (id,a) values (658,72);
+insert into t (id,a) values (658,73);
+insert into t (id,a) values (658,74);
+insert into t (id,a) values (658,75);
+insert into t (id,a) values (658,76);
+insert into t (id,a) values (658,77);
+insert into t (id,a) values (658,78);
+insert into t (id,a) values (658,79);
+insert into t (id,a) values (658,80);
+insert into t (id,a) values (658,81);
+insert into t (id,a) values (658,82);
+insert into t (id,a) values (658,83);
+insert into t (id,a) values (658,84);
+insert into t (id,a) values (658,85);
+insert into t (id,a) values (658,86);
+insert into t (id,a) values (658,87);
+insert into t (id,a) values (658,88);
+insert into t (id,a) values (658,89);
+insert into t (id,a) values (658,90);
+insert into t (id,a) values (658,91);
+insert into t (id,a) values (658,92);
+insert into t (id,a) values (658,93);
+insert into t (id,a) values (658,94);
+insert into t (id,a) values (658,95);
+insert into t (id,a) values (658,96);
+insert into t (id,a) values (658,97);
+insert into t (id,a) values (658,98);
+insert into t (id,a) values (658,99);
+insert into t (id,a) values (659,0);
+insert into t (id,a) values (659,1);
+insert into t (id,a) values (659,2);
+insert into t (id,a) values (659,3);
+insert into t (id,a) values (659,4);
+insert into t (id,a) values (659,5);
+insert into t (id,a) values (659,6);
+insert into t (id,a) values (659,7);
+insert into t (id,a) values (659,8);
+insert into t (id,a) values (659,9);
+insert into t (id,a) values (659,10);
+insert into t (id,a) values (659,11);
+insert into t (id,a) values (659,12);
+insert into t (id,a) values (659,13);
+insert into t (id,a) values (659,14);
+insert into t (id,a) values (659,15);
+insert into t (id,a) values (659,16);
+insert into t (id,a) values (659,17);
+insert into t (id,a) values (659,18);
+insert into t (id,a) values (659,19);
+insert into t (id,a) values (659,20);
+insert into t (id,a) values (659,21);
+insert into t (id,a) values (659,22);
+insert into t (id,a) values (659,23);
+insert into t (id,a) values (659,24);
+insert into t (id,a) values (659,25);
+insert into t (id,a) values (659,26);
+insert into t (id,a) values (659,27);
+insert into t (id,a) values (659,28);
+insert into t (id,a) values (659,29);
+insert into t (id,a) values (659,30);
+insert into t (id,a) values (659,31);
+insert into t (id,a) values (659,32);
+insert into t (id,a) values (659,33);
+insert into t (id,a) values (659,34);
+insert into t (id,a) values (659,35);
+insert into t (id,a) values (659,36);
+insert into t (id,a) values (659,37);
+insert into t (id,a) values (659,38);
+insert into t (id,a) values (659,39);
+insert into t (id,a) values (659,40);
+insert into t (id,a) values (659,41);
+insert into t (id,a) values (659,42);
+insert into t (id,a) values (659,43);
+insert into t (id,a) values (659,44);
+insert into t (id,a) values (659,45);
+insert into t (id,a) values (659,46);
+insert into t (id,a) values (659,47);
+insert into t (id,a) values (659,48);
+insert into t (id,a) values (659,49);
+insert into t (id,a) values (659,50);
+insert into t (id,a) values (659,51);
+insert into t (id,a) values (659,52);
+insert into t (id,a) values (659,53);
+insert into t (id,a) values (659,54);
+insert into t (id,a) values (659,55);
+insert into t (id,a) values (659,56);
+insert into t (id,a) values (659,57);
+insert into t (id,a) values (659,58);
+insert into t (id,a) values (659,59);
+insert into t (id,a) values (659,60);
+insert into t (id,a) values (659,61);
+insert into t (id,a) values (659,62);
+insert into t (id,a) values (659,63);
+insert into t (id,a) values (659,64);
+insert into t (id,a) values (659,65);
+insert into t (id,a) values (659,66);
+insert into t (id,a) values (659,67);
+insert into t (id,a) values (659,68);
+insert into t (id,a) values (659,69);
+insert into t (id,a) values (659,70);
+insert into t (id,a) values (659,71);
+insert into t (id,a) values (659,72);
+insert into t (id,a) values (659,73);
+insert into t (id,a) values (659,74);
+insert into t (id,a) values (659,75);
+insert into t (id,a) values (659,76);
+insert into t (id,a) values (659,77);
+insert into t (id,a) values (659,78);
+insert into t (id,a) values (659,79);
+insert into t (id,a) values (659,80);
+insert into t (id,a) values (659,81);
+insert into t (id,a) values (659,82);
+insert into t (id,a) values (659,83);
+insert into t (id,a) values (659,84);
+insert into t (id,a) values (659,85);
+insert into t (id,a) values (659,86);
+insert into t (id,a) values (659,87);
+insert into t (id,a) values (659,88);
+insert into t (id,a) values (659,89);
+insert into t (id,a) values (659,90);
+insert into t (id,a) values (659,91);
+insert into t (id,a) values (659,92);
+insert into t (id,a) values (659,93);
+insert into t (id,a) values (659,94);
+insert into t (id,a) values (659,95);
+insert into t (id,a) values (659,96);
+insert into t (id,a) values (659,97);
+insert into t (id,a) values (659,98);
+insert into t (id,a) values (659,99);
+insert into t (id,a) values (660,0);
+insert into t (id,a) values (660,1);
+insert into t (id,a) values (660,2);
+insert into t (id,a) values (660,3);
+insert into t (id,a) values (660,4);
+insert into t (id,a) values (660,5);
+insert into t (id,a) values (660,6);
+insert into t (id,a) values (660,7);
+insert into t (id,a) values (660,8);
+insert into t (id,a) values (660,9);
+insert into t (id,a) values (660,10);
+insert into t (id,a) values (660,11);
+insert into t (id,a) values (660,12);
+insert into t (id,a) values (660,13);
+insert into t (id,a) values (660,14);
+insert into t (id,a) values (660,15);
+insert into t (id,a) values (660,16);
+insert into t (id,a) values (660,17);
+insert into t (id,a) values (660,18);
+insert into t (id,a) values (660,19);
+insert into t (id,a) values (660,20);
+insert into t (id,a) values (660,21);
+insert into t (id,a) values (660,22);
+insert into t (id,a) values (660,23);
+insert into t (id,a) values (660,24);
+insert into t (id,a) values (660,25);
+insert into t (id,a) values (660,26);
+insert into t (id,a) values (660,27);
+insert into t (id,a) values (660,28);
+insert into t (id,a) values (660,29);
+insert into t (id,a) values (660,30);
+insert into t (id,a) values (660,31);
+insert into t (id,a) values (660,32);
+insert into t (id,a) values (660,33);
+insert into t (id,a) values (660,34);
+insert into t (id,a) values (660,35);
+insert into t (id,a) values (660,36);
+insert into t (id,a) values (660,37);
+insert into t (id,a) values (660,38);
+insert into t (id,a) values (660,39);
+insert into t (id,a) values (660,40);
+insert into t (id,a) values (660,41);
+insert into t (id,a) values (660,42);
+insert into t (id,a) values (660,43);
+insert into t (id,a) values (660,44);
+insert into t (id,a) values (660,45);
+insert into t (id,a) values (660,46);
+insert into t (id,a) values (660,47);
+insert into t (id,a) values (660,48);
+insert into t (id,a) values (660,49);
+insert into t (id,a) values (660,50);
+insert into t (id,a) values (660,51);
+insert into t (id,a) values (660,52);
+insert into t (id,a) values (660,53);
+insert into t (id,a) values (660,54);
+insert into t (id,a) values (660,55);
+insert into t (id,a) values (660,56);
+insert into t (id,a) values (660,57);
+insert into t (id,a) values (660,58);
+insert into t (id,a) values (660,59);
+insert into t (id,a) values (660,60);
+insert into t (id,a) values (660,61);
+insert into t (id,a) values (660,62);
+insert into t (id,a) values (660,63);
+insert into t (id,a) values (660,64);
+insert into t (id,a) values (660,65);
+insert into t (id,a) values (660,66);
+insert into t (id,a) values (660,67);
+insert into t (id,a) values (660,68);
+insert into t (id,a) values (660,69);
+insert into t (id,a) values (660,70);
+insert into t (id,a) values (660,71);
+insert into t (id,a) values (660,72);
+insert into t (id,a) values (660,73);
+insert into t (id,a) values (660,74);
+insert into t (id,a) values (660,75);
+insert into t (id,a) values (660,76);
+insert into t (id,a) values (660,77);
+insert into t (id,a) values (660,78);
+insert into t (id,a) values (660,79);
+insert into t (id,a) values (660,80);
+insert into t (id,a) values (660,81);
+insert into t (id,a) values (660,82);
+insert into t (id,a) values (660,83);
+insert into t (id,a) values (660,84);
+insert into t (id,a) values (660,85);
+insert into t (id,a) values (660,86);
+insert into t (id,a) values (660,87);
+insert into t (id,a) values (660,88);
+insert into t (id,a) values (660,89);
+insert into t (id,a) values (660,90);
+insert into t (id,a) values (660,91);
+insert into t (id,a) values (660,92);
+insert into t (id,a) values (660,93);
+insert into t (id,a) values (660,94);
+insert into t (id,a) values (660,95);
+insert into t (id,a) values (660,96);
+insert into t (id,a) values (660,97);
+insert into t (id,a) values (660,98);
+insert into t (id,a) values (660,99);
+insert into t (id,a) values (661,0);
+insert into t (id,a) values (661,1);
+insert into t (id,a) values (661,2);
+insert into t (id,a) values (661,3);
+insert into t (id,a) values (661,4);
+insert into t (id,a) values (661,5);
+insert into t (id,a) values (661,6);
+insert into t (id,a) values (661,7);
+insert into t (id,a) values (661,8);
+insert into t (id,a) values (661,9);
+insert into t (id,a) values (661,10);
+insert into t (id,a) values (661,11);
+insert into t (id,a) values (661,12);
+insert into t (id,a) values (661,13);
+insert into t (id,a) values (661,14);
+insert into t (id,a) values (661,15);
+insert into t (id,a) values (661,16);
+insert into t (id,a) values (661,17);
+insert into t (id,a) values (661,18);
+insert into t (id,a) values (661,19);
+insert into t (id,a) values (661,20);
+insert into t (id,a) values (661,21);
+insert into t (id,a) values (661,22);
+insert into t (id,a) values (661,23);
+insert into t (id,a) values (661,24);
+insert into t (id,a) values (661,25);
+insert into t (id,a) values (661,26);
+insert into t (id,a) values (661,27);
+insert into t (id,a) values (661,28);
+insert into t (id,a) values (661,29);
+insert into t (id,a) values (661,30);
+insert into t (id,a) values (661,31);
+insert into t (id,a) values (661,32);
+insert into t (id,a) values (661,33);
+insert into t (id,a) values (661,34);
+insert into t (id,a) values (661,35);
+insert into t (id,a) values (661,36);
+insert into t (id,a) values (661,37);
+insert into t (id,a) values (661,38);
+insert into t (id,a) values (661,39);
+insert into t (id,a) values (661,40);
+insert into t (id,a) values (661,41);
+insert into t (id,a) values (661,42);
+insert into t (id,a) values (661,43);
+insert into t (id,a) values (661,44);
+insert into t (id,a) values (661,45);
+insert into t (id,a) values (661,46);
+insert into t (id,a) values (661,47);
+insert into t (id,a) values (661,48);
+insert into t (id,a) values (661,49);
+insert into t (id,a) values (661,50);
+insert into t (id,a) values (661,51);
+insert into t (id,a) values (661,52);
+insert into t (id,a) values (661,53);
+insert into t (id,a) values (661,54);
+insert into t (id,a) values (661,55);
+insert into t (id,a) values (661,56);
+insert into t (id,a) values (661,57);
+insert into t (id,a) values (661,58);
+insert into t (id,a) values (661,59);
+insert into t (id,a) values (661,60);
+insert into t (id,a) values (661,61);
+insert into t (id,a) values (661,62);
+insert into t (id,a) values (661,63);
+insert into t (id,a) values (661,64);
+insert into t (id,a) values (661,65);
+insert into t (id,a) values (661,66);
+insert into t (id,a) values (661,67);
+insert into t (id,a) values (661,68);
+insert into t (id,a) values (661,69);
+insert into t (id,a) values (661,70);
+insert into t (id,a) values (661,71);
+insert into t (id,a) values (661,72);
+insert into t (id,a) values (661,73);
+insert into t (id,a) values (661,74);
+insert into t (id,a) values (661,75);
+insert into t (id,a) values (661,76);
+insert into t (id,a) values (661,77);
+insert into t (id,a) values (661,78);
+insert into t (id,a) values (661,79);
+insert into t (id,a) values (661,80);
+insert into t (id,a) values (661,81);
+insert into t (id,a) values (661,82);
+insert into t (id,a) values (661,83);
+insert into t (id,a) values (661,84);
+insert into t (id,a) values (661,85);
+insert into t (id,a) values (661,86);
+insert into t (id,a) values (661,87);
+insert into t (id,a) values (661,88);
+insert into t (id,a) values (661,89);
+insert into t (id,a) values (661,90);
+insert into t (id,a) values (661,91);
+insert into t (id,a) values (661,92);
+insert into t (id,a) values (661,93);
+insert into t (id,a) values (661,94);
+insert into t (id,a) values (661,95);
+insert into t (id,a) values (661,96);
+insert into t (id,a) values (661,97);
+insert into t (id,a) values (661,98);
+insert into t (id,a) values (661,99);
+insert into t (id,a) values (662,0);
+insert into t (id,a) values (662,1);
+insert into t (id,a) values (662,2);
+insert into t (id,a) values (662,3);
+insert into t (id,a) values (662,4);
+insert into t (id,a) values (662,5);
+insert into t (id,a) values (662,6);
+insert into t (id,a) values (662,7);
+insert into t (id,a) values (662,8);
+insert into t (id,a) values (662,9);
+insert into t (id,a) values (662,10);
+insert into t (id,a) values (662,11);
+insert into t (id,a) values (662,12);
+insert into t (id,a) values (662,13);
+insert into t (id,a) values (662,14);
+insert into t (id,a) values (662,15);
+insert into t (id,a) values (662,16);
+insert into t (id,a) values (662,17);
+insert into t (id,a) values (662,18);
+insert into t (id,a) values (662,19);
+insert into t (id,a) values (662,20);
+insert into t (id,a) values (662,21);
+insert into t (id,a) values (662,22);
+insert into t (id,a) values (662,23);
+insert into t (id,a) values (662,24);
+insert into t (id,a) values (662,25);
+insert into t (id,a) values (662,26);
+insert into t (id,a) values (662,27);
+insert into t (id,a) values (662,28);
+insert into t (id,a) values (662,29);
+insert into t (id,a) values (662,30);
+insert into t (id,a) values (662,31);
+insert into t (id,a) values (662,32);
+insert into t (id,a) values (662,33);
+insert into t (id,a) values (662,34);
+insert into t (id,a) values (662,35);
+insert into t (id,a) values (662,36);
+insert into t (id,a) values (662,37);
+insert into t (id,a) values (662,38);
+insert into t (id,a) values (662,39);
+insert into t (id,a) values (662,40);
+insert into t (id,a) values (662,41);
+insert into t (id,a) values (662,42);
+insert into t (id,a) values (662,43);
+insert into t (id,a) values (662,44);
+insert into t (id,a) values (662,45);
+insert into t (id,a) values (662,46);
+insert into t (id,a) values (662,47);
+insert into t (id,a) values (662,48);
+insert into t (id,a) values (662,49);
+insert into t (id,a) values (662,50);
+insert into t (id,a) values (662,51);
+insert into t (id,a) values (662,52);
+insert into t (id,a) values (662,53);
+insert into t (id,a) values (662,54);
+insert into t (id,a) values (662,55);
+insert into t (id,a) values (662,56);
+insert into t (id,a) values (662,57);
+insert into t (id,a) values (662,58);
+insert into t (id,a) values (662,59);
+insert into t (id,a) values (662,60);
+insert into t (id,a) values (662,61);
+insert into t (id,a) values (662,62);
+insert into t (id,a) values (662,63);
+insert into t (id,a) values (662,64);
+insert into t (id,a) values (662,65);
+insert into t (id,a) values (662,66);
+insert into t (id,a) values (662,67);
+insert into t (id,a) values (662,68);
+insert into t (id,a) values (662,69);
+insert into t (id,a) values (662,70);
+insert into t (id,a) values (662,71);
+insert into t (id,a) values (662,72);
+insert into t (id,a) values (662,73);
+insert into t (id,a) values (662,74);
+insert into t (id,a) values (662,75);
+insert into t (id,a) values (662,76);
+insert into t (id,a) values (662,77);
+insert into t (id,a) values (662,78);
+insert into t (id,a) values (662,79);
+insert into t (id,a) values (662,80);
+insert into t (id,a) values (662,81);
+insert into t (id,a) values (662,82);
+insert into t (id,a) values (662,83);
+insert into t (id,a) values (662,84);
+insert into t (id,a) values (662,85);
+insert into t (id,a) values (662,86);
+insert into t (id,a) values (662,87);
+insert into t (id,a) values (662,88);
+insert into t (id,a) values (662,89);
+insert into t (id,a) values (662,90);
+insert into t (id,a) values (662,91);
+insert into t (id,a) values (662,92);
+insert into t (id,a) values (662,93);
+insert into t (id,a) values (662,94);
+insert into t (id,a) values (662,95);
+insert into t (id,a) values (662,96);
+insert into t (id,a) values (662,97);
+insert into t (id,a) values (662,98);
+insert into t (id,a) values (662,99);
+insert into t (id,a) values (663,0);
+insert into t (id,a) values (663,1);
+insert into t (id,a) values (663,2);
+insert into t (id,a) values (663,3);
+insert into t (id,a) values (663,4);
+insert into t (id,a) values (663,5);
+insert into t (id,a) values (663,6);
+insert into t (id,a) values (663,7);
+insert into t (id,a) values (663,8);
+insert into t (id,a) values (663,9);
+insert into t (id,a) values (663,10);
+insert into t (id,a) values (663,11);
+insert into t (id,a) values (663,12);
+insert into t (id,a) values (663,13);
+insert into t (id,a) values (663,14);
+insert into t (id,a) values (663,15);
+insert into t (id,a) values (663,16);
+insert into t (id,a) values (663,17);
+insert into t (id,a) values (663,18);
+insert into t (id,a) values (663,19);
+insert into t (id,a) values (663,20);
+insert into t (id,a) values (663,21);
+insert into t (id,a) values (663,22);
+insert into t (id,a) values (663,23);
+insert into t (id,a) values (663,24);
+insert into t (id,a) values (663,25);
+insert into t (id,a) values (663,26);
+insert into t (id,a) values (663,27);
+insert into t (id,a) values (663,28);
+insert into t (id,a) values (663,29);
+insert into t (id,a) values (663,30);
+insert into t (id,a) values (663,31);
+insert into t (id,a) values (663,32);
+insert into t (id,a) values (663,33);
+insert into t (id,a) values (663,34);
+insert into t (id,a) values (663,35);
+insert into t (id,a) values (663,36);
+insert into t (id,a) values (663,37);
+insert into t (id,a) values (663,38);
+insert into t (id,a) values (663,39);
+insert into t (id,a) values (663,40);
+insert into t (id,a) values (663,41);
+insert into t (id,a) values (663,42);
+insert into t (id,a) values (663,43);
+insert into t (id,a) values (663,44);
+insert into t (id,a) values (663,45);
+insert into t (id,a) values (663,46);
+insert into t (id,a) values (663,47);
+insert into t (id,a) values (663,48);
+insert into t (id,a) values (663,49);
+insert into t (id,a) values (663,50);
+insert into t (id,a) values (663,51);
+insert into t (id,a) values (663,52);
+insert into t (id,a) values (663,53);
+insert into t (id,a) values (663,54);
+insert into t (id,a) values (663,55);
+insert into t (id,a) values (663,56);
+insert into t (id,a) values (663,57);
+insert into t (id,a) values (663,58);
+insert into t (id,a) values (663,59);
+insert into t (id,a) values (663,60);
+insert into t (id,a) values (663,61);
+insert into t (id,a) values (663,62);
+insert into t (id,a) values (663,63);
+insert into t (id,a) values (663,64);
+insert into t (id,a) values (663,65);
+insert into t (id,a) values (663,66);
+insert into t (id,a) values (663,67);
+insert into t (id,a) values (663,68);
+insert into t (id,a) values (663,69);
+insert into t (id,a) values (663,70);
+insert into t (id,a) values (663,71);
+insert into t (id,a) values (663,72);
+insert into t (id,a) values (663,73);
+insert into t (id,a) values (663,74);
+insert into t (id,a) values (663,75);
+insert into t (id,a) values (663,76);
+insert into t (id,a) values (663,77);
+insert into t (id,a) values (663,78);
+insert into t (id,a) values (663,79);
+insert into t (id,a) values (663,80);
+insert into t (id,a) values (663,81);
+insert into t (id,a) values (663,82);
+insert into t (id,a) values (663,83);
+insert into t (id,a) values (663,84);
+insert into t (id,a) values (663,85);
+insert into t (id,a) values (663,86);
+insert into t (id,a) values (663,87);
+insert into t (id,a) values (663,88);
+insert into t (id,a) values (663,89);
+insert into t (id,a) values (663,90);
+insert into t (id,a) values (663,91);
+insert into t (id,a) values (663,92);
+insert into t (id,a) values (663,93);
+insert into t (id,a) values (663,94);
+insert into t (id,a) values (663,95);
+insert into t (id,a) values (663,96);
+insert into t (id,a) values (663,97);
+insert into t (id,a) values (663,98);
+insert into t (id,a) values (663,99);
+insert into t (id,a) values (664,0);
+insert into t (id,a) values (664,1);
+insert into t (id,a) values (664,2);
+insert into t (id,a) values (664,3);
+insert into t (id,a) values (664,4);
+insert into t (id,a) values (664,5);
+insert into t (id,a) values (664,6);
+insert into t (id,a) values (664,7);
+insert into t (id,a) values (664,8);
+insert into t (id,a) values (664,9);
+insert into t (id,a) values (664,10);
+insert into t (id,a) values (664,11);
+insert into t (id,a) values (664,12);
+insert into t (id,a) values (664,13);
+insert into t (id,a) values (664,14);
+insert into t (id,a) values (664,15);
+insert into t (id,a) values (664,16);
+insert into t (id,a) values (664,17);
+insert into t (id,a) values (664,18);
+insert into t (id,a) values (664,19);
+insert into t (id,a) values (664,20);
+insert into t (id,a) values (664,21);
+insert into t (id,a) values (664,22);
+insert into t (id,a) values (664,23);
+insert into t (id,a) values (664,24);
+insert into t (id,a) values (664,25);
+insert into t (id,a) values (664,26);
+insert into t (id,a) values (664,27);
+insert into t (id,a) values (664,28);
+insert into t (id,a) values (664,29);
+insert into t (id,a) values (664,30);
+insert into t (id,a) values (664,31);
+insert into t (id,a) values (664,32);
+insert into t (id,a) values (664,33);
+insert into t (id,a) values (664,34);
+insert into t (id,a) values (664,35);
+insert into t (id,a) values (664,36);
+insert into t (id,a) values (664,37);
+insert into t (id,a) values (664,38);
+insert into t (id,a) values (664,39);
+insert into t (id,a) values (664,40);
+insert into t (id,a) values (664,41);
+insert into t (id,a) values (664,42);
+insert into t (id,a) values (664,43);
+insert into t (id,a) values (664,44);
+insert into t (id,a) values (664,45);
+insert into t (id,a) values (664,46);
+insert into t (id,a) values (664,47);
+insert into t (id,a) values (664,48);
+insert into t (id,a) values (664,49);
+insert into t (id,a) values (664,50);
+insert into t (id,a) values (664,51);
+insert into t (id,a) values (664,52);
+insert into t (id,a) values (664,53);
+insert into t (id,a) values (664,54);
+insert into t (id,a) values (664,55);
+insert into t (id,a) values (664,56);
+insert into t (id,a) values (664,57);
+insert into t (id,a) values (664,58);
+insert into t (id,a) values (664,59);
+insert into t (id,a) values (664,60);
+insert into t (id,a) values (664,61);
+insert into t (id,a) values (664,62);
+insert into t (id,a) values (664,63);
+insert into t (id,a) values (664,64);
+insert into t (id,a) values (664,65);
+insert into t (id,a) values (664,66);
+insert into t (id,a) values (664,67);
+insert into t (id,a) values (664,68);
+insert into t (id,a) values (664,69);
+insert into t (id,a) values (664,70);
+insert into t (id,a) values (664,71);
+insert into t (id,a) values (664,72);
+insert into t (id,a) values (664,73);
+insert into t (id,a) values (664,74);
+insert into t (id,a) values (664,75);
+insert into t (id,a) values (664,76);
+insert into t (id,a) values (664,77);
+insert into t (id,a) values (664,78);
+insert into t (id,a) values (664,79);
+insert into t (id,a) values (664,80);
+insert into t (id,a) values (664,81);
+insert into t (id,a) values (664,82);
+insert into t (id,a) values (664,83);
+insert into t (id,a) values (664,84);
+insert into t (id,a) values (664,85);
+insert into t (id,a) values (664,86);
+insert into t (id,a) values (664,87);
+insert into t (id,a) values (664,88);
+insert into t (id,a) values (664,89);
+insert into t (id,a) values (664,90);
+insert into t (id,a) values (664,91);
+insert into t (id,a) values (664,92);
+insert into t (id,a) values (664,93);
+insert into t (id,a) values (664,94);
+insert into t (id,a) values (664,95);
+insert into t (id,a) values (664,96);
+insert into t (id,a) values (664,97);
+insert into t (id,a) values (664,98);
+insert into t (id,a) values (664,99);
+insert into t (id,a) values (665,0);
+insert into t (id,a) values (665,1);
+insert into t (id,a) values (665,2);
+insert into t (id,a) values (665,3);
+insert into t (id,a) values (665,4);
+insert into t (id,a) values (665,5);
+insert into t (id,a) values (665,6);
+insert into t (id,a) values (665,7);
+insert into t (id,a) values (665,8);
+insert into t (id,a) values (665,9);
+insert into t (id,a) values (665,10);
+insert into t (id,a) values (665,11);
+insert into t (id,a) values (665,12);
+insert into t (id,a) values (665,13);
+insert into t (id,a) values (665,14);
+insert into t (id,a) values (665,15);
+insert into t (id,a) values (665,16);
+insert into t (id,a) values (665,17);
+insert into t (id,a) values (665,18);
+insert into t (id,a) values (665,19);
+insert into t (id,a) values (665,20);
+insert into t (id,a) values (665,21);
+insert into t (id,a) values (665,22);
+insert into t (id,a) values (665,23);
+insert into t (id,a) values (665,24);
+insert into t (id,a) values (665,25);
+insert into t (id,a) values (665,26);
+insert into t (id,a) values (665,27);
+insert into t (id,a) values (665,28);
+insert into t (id,a) values (665,29);
+insert into t (id,a) values (665,30);
+insert into t (id,a) values (665,31);
+insert into t (id,a) values (665,32);
+insert into t (id,a) values (665,33);
+insert into t (id,a) values (665,34);
+insert into t (id,a) values (665,35);
+insert into t (id,a) values (665,36);
+insert into t (id,a) values (665,37);
+insert into t (id,a) values (665,38);
+insert into t (id,a) values (665,39);
+insert into t (id,a) values (665,40);
+insert into t (id,a) values (665,41);
+insert into t (id,a) values (665,42);
+insert into t (id,a) values (665,43);
+insert into t (id,a) values (665,44);
+insert into t (id,a) values (665,45);
+insert into t (id,a) values (665,46);
+insert into t (id,a) values (665,47);
+insert into t (id,a) values (665,48);
+insert into t (id,a) values (665,49);
+insert into t (id,a) values (665,50);
+insert into t (id,a) values (665,51);
+insert into t (id,a) values (665,52);
+insert into t (id,a) values (665,53);
+insert into t (id,a) values (665,54);
+insert into t (id,a) values (665,55);
+insert into t (id,a) values (665,56);
+insert into t (id,a) values (665,57);
+insert into t (id,a) values (665,58);
+insert into t (id,a) values (665,59);
+insert into t (id,a) values (665,60);
+insert into t (id,a) values (665,61);
+insert into t (id,a) values (665,62);
+insert into t (id,a) values (665,63);
+insert into t (id,a) values (665,64);
+insert into t (id,a) values (665,65);
+insert into t (id,a) values (665,66);
+insert into t (id,a) values (665,67);
+insert into t (id,a) values (665,68);
+insert into t (id,a) values (665,69);
+insert into t (id,a) values (665,70);
+insert into t (id,a) values (665,71);
+insert into t (id,a) values (665,72);
+insert into t (id,a) values (665,73);
+insert into t (id,a) values (665,74);
+insert into t (id,a) values (665,75);
+insert into t (id,a) values (665,76);
+insert into t (id,a) values (665,77);
+insert into t (id,a) values (665,78);
+insert into t (id,a) values (665,79);
+insert into t (id,a) values (665,80);
+insert into t (id,a) values (665,81);
+insert into t (id,a) values (665,82);
+insert into t (id,a) values (665,83);
+insert into t (id,a) values (665,84);
+insert into t (id,a) values (665,85);
+insert into t (id,a) values (665,86);
+insert into t (id,a) values (665,87);
+insert into t (id,a) values (665,88);
+insert into t (id,a) values (665,89);
+insert into t (id,a) values (665,90);
+insert into t (id,a) values (665,91);
+insert into t (id,a) values (665,92);
+insert into t (id,a) values (665,93);
+insert into t (id,a) values (665,94);
+insert into t (id,a) values (665,95);
+insert into t (id,a) values (665,96);
+insert into t (id,a) values (665,97);
+insert into t (id,a) values (665,98);
+insert into t (id,a) values (665,99);
+insert into t (id,a) values (666,0);
+insert into t (id,a) values (666,1);
+insert into t (id,a) values (666,2);
+insert into t (id,a) values (666,3);
+insert into t (id,a) values (666,4);
+insert into t (id,a) values (666,5);
+insert into t (id,a) values (666,6);
+insert into t (id,a) values (666,7);
+insert into t (id,a) values (666,8);
+insert into t (id,a) values (666,9);
+insert into t (id,a) values (666,10);
+insert into t (id,a) values (666,11);
+insert into t (id,a) values (666,12);
+insert into t (id,a) values (666,13);
+insert into t (id,a) values (666,14);
+insert into t (id,a) values (666,15);
+insert into t (id,a) values (666,16);
+insert into t (id,a) values (666,17);
+insert into t (id,a) values (666,18);
+insert into t (id,a) values (666,19);
+insert into t (id,a) values (666,20);
+insert into t (id,a) values (666,21);
+insert into t (id,a) values (666,22);
+insert into t (id,a) values (666,23);
+insert into t (id,a) values (666,24);
+insert into t (id,a) values (666,25);
+insert into t (id,a) values (666,26);
+insert into t (id,a) values (666,27);
+insert into t (id,a) values (666,28);
+insert into t (id,a) values (666,29);
+insert into t (id,a) values (666,30);
+insert into t (id,a) values (666,31);
+insert into t (id,a) values (666,32);
+insert into t (id,a) values (666,33);
+insert into t (id,a) values (666,34);
+insert into t (id,a) values (666,35);
+insert into t (id,a) values (666,36);
+insert into t (id,a) values (666,37);
+insert into t (id,a) values (666,38);
+insert into t (id,a) values (666,39);
+insert into t (id,a) values (666,40);
+insert into t (id,a) values (666,41);
+insert into t (id,a) values (666,42);
+insert into t (id,a) values (666,43);
+insert into t (id,a) values (666,44);
+insert into t (id,a) values (666,45);
+insert into t (id,a) values (666,46);
+insert into t (id,a) values (666,47);
+insert into t (id,a) values (666,48);
+insert into t (id,a) values (666,49);
+insert into t (id,a) values (666,50);
+insert into t (id,a) values (666,51);
+insert into t (id,a) values (666,52);
+insert into t (id,a) values (666,53);
+insert into t (id,a) values (666,54);
+insert into t (id,a) values (666,55);
+insert into t (id,a) values (666,56);
+insert into t (id,a) values (666,57);
+insert into t (id,a) values (666,58);
+insert into t (id,a) values (666,59);
+insert into t (id,a) values (666,60);
+insert into t (id,a) values (666,61);
+insert into t (id,a) values (666,62);
+insert into t (id,a) values (666,63);
+insert into t (id,a) values (666,64);
+insert into t (id,a) values (666,65);
+insert into t (id,a) values (666,66);
+insert into t (id,a) values (666,67);
+insert into t (id,a) values (666,68);
+insert into t (id,a) values (666,69);
+insert into t (id,a) values (666,70);
+insert into t (id,a) values (666,71);
+insert into t (id,a) values (666,72);
+insert into t (id,a) values (666,73);
+insert into t (id,a) values (666,74);
+insert into t (id,a) values (666,75);
+insert into t (id,a) values (666,76);
+insert into t (id,a) values (666,77);
+insert into t (id,a) values (666,78);
+insert into t (id,a) values (666,79);
+insert into t (id,a) values (666,80);
+insert into t (id,a) values (666,81);
+insert into t (id,a) values (666,82);
+insert into t (id,a) values (666,83);
+insert into t (id,a) values (666,84);
+insert into t (id,a) values (666,85);
+insert into t (id,a) values (666,86);
+insert into t (id,a) values (666,87);
+insert into t (id,a) values (666,88);
+insert into t (id,a) values (666,89);
+insert into t (id,a) values (666,90);
+insert into t (id,a) values (666,91);
+insert into t (id,a) values (666,92);
+insert into t (id,a) values (666,93);
+insert into t (id,a) values (666,94);
+insert into t (id,a) values (666,95);
+insert into t (id,a) values (666,96);
+insert into t (id,a) values (666,97);
+insert into t (id,a) values (666,98);
+insert into t (id,a) values (666,99);
+insert into t (id,a) values (667,0);
+insert into t (id,a) values (667,1);
+insert into t (id,a) values (667,2);
+insert into t (id,a) values (667,3);
+insert into t (id,a) values (667,4);
+insert into t (id,a) values (667,5);
+insert into t (id,a) values (667,6);
+insert into t (id,a) values (667,7);
+insert into t (id,a) values (667,8);
+insert into t (id,a) values (667,9);
+insert into t (id,a) values (667,10);
+insert into t (id,a) values (667,11);
+insert into t (id,a) values (667,12);
+insert into t (id,a) values (667,13);
+insert into t (id,a) values (667,14);
+insert into t (id,a) values (667,15);
+insert into t (id,a) values (667,16);
+insert into t (id,a) values (667,17);
+insert into t (id,a) values (667,18);
+insert into t (id,a) values (667,19);
+insert into t (id,a) values (667,20);
+insert into t (id,a) values (667,21);
+insert into t (id,a) values (667,22);
+insert into t (id,a) values (667,23);
+insert into t (id,a) values (667,24);
+insert into t (id,a) values (667,25);
+insert into t (id,a) values (667,26);
+insert into t (id,a) values (667,27);
+insert into t (id,a) values (667,28);
+insert into t (id,a) values (667,29);
+insert into t (id,a) values (667,30);
+insert into t (id,a) values (667,31);
+insert into t (id,a) values (667,32);
+insert into t (id,a) values (667,33);
+insert into t (id,a) values (667,34);
+insert into t (id,a) values (667,35);
+insert into t (id,a) values (667,36);
+insert into t (id,a) values (667,37);
+insert into t (id,a) values (667,38);
+insert into t (id,a) values (667,39);
+insert into t (id,a) values (667,40);
+insert into t (id,a) values (667,41);
+insert into t (id,a) values (667,42);
+insert into t (id,a) values (667,43);
+insert into t (id,a) values (667,44);
+insert into t (id,a) values (667,45);
+insert into t (id,a) values (667,46);
+insert into t (id,a) values (667,47);
+insert into t (id,a) values (667,48);
+insert into t (id,a) values (667,49);
+insert into t (id,a) values (667,50);
+insert into t (id,a) values (667,51);
+insert into t (id,a) values (667,52);
+insert into t (id,a) values (667,53);
+insert into t (id,a) values (667,54);
+insert into t (id,a) values (667,55);
+insert into t (id,a) values (667,56);
+insert into t (id,a) values (667,57);
+insert into t (id,a) values (667,58);
+insert into t (id,a) values (667,59);
+insert into t (id,a) values (667,60);
+insert into t (id,a) values (667,61);
+insert into t (id,a) values (667,62);
+insert into t (id,a) values (667,63);
+insert into t (id,a) values (667,64);
+insert into t (id,a) values (667,65);
+insert into t (id,a) values (667,66);
+insert into t (id,a) values (667,67);
+insert into t (id,a) values (667,68);
+insert into t (id,a) values (667,69);
+insert into t (id,a) values (667,70);
+insert into t (id,a) values (667,71);
+insert into t (id,a) values (667,72);
+insert into t (id,a) values (667,73);
+insert into t (id,a) values (667,74);
+insert into t (id,a) values (667,75);
+insert into t (id,a) values (667,76);
+insert into t (id,a) values (667,77);
+insert into t (id,a) values (667,78);
+insert into t (id,a) values (667,79);
+insert into t (id,a) values (667,80);
+insert into t (id,a) values (667,81);
+insert into t (id,a) values (667,82);
+insert into t (id,a) values (667,83);
+insert into t (id,a) values (667,84);
+insert into t (id,a) values (667,85);
+insert into t (id,a) values (667,86);
+insert into t (id,a) values (667,87);
+insert into t (id,a) values (667,88);
+insert into t (id,a) values (667,89);
+insert into t (id,a) values (667,90);
+insert into t (id,a) values (667,91);
+insert into t (id,a) values (667,92);
+insert into t (id,a) values (667,93);
+insert into t (id,a) values (667,94);
+insert into t (id,a) values (667,95);
+insert into t (id,a) values (667,96);
+insert into t (id,a) values (667,97);
+insert into t (id,a) values (667,98);
+insert into t (id,a) values (667,99);
+insert into t (id,a) values (668,0);
+insert into t (id,a) values (668,1);
+insert into t (id,a) values (668,2);
+insert into t (id,a) values (668,3);
+insert into t (id,a) values (668,4);
+insert into t (id,a) values (668,5);
+insert into t (id,a) values (668,6);
+insert into t (id,a) values (668,7);
+insert into t (id,a) values (668,8);
+insert into t (id,a) values (668,9);
+insert into t (id,a) values (668,10);
+insert into t (id,a) values (668,11);
+insert into t (id,a) values (668,12);
+insert into t (id,a) values (668,13);
+insert into t (id,a) values (668,14);
+insert into t (id,a) values (668,15);
+insert into t (id,a) values (668,16);
+insert into t (id,a) values (668,17);
+insert into t (id,a) values (668,18);
+insert into t (id,a) values (668,19);
+insert into t (id,a) values (668,20);
+insert into t (id,a) values (668,21);
+insert into t (id,a) values (668,22);
+insert into t (id,a) values (668,23);
+insert into t (id,a) values (668,24);
+insert into t (id,a) values (668,25);
+insert into t (id,a) values (668,26);
+insert into t (id,a) values (668,27);
+insert into t (id,a) values (668,28);
+insert into t (id,a) values (668,29);
+insert into t (id,a) values (668,30);
+insert into t (id,a) values (668,31);
+insert into t (id,a) values (668,32);
+insert into t (id,a) values (668,33);
+insert into t (id,a) values (668,34);
+insert into t (id,a) values (668,35);
+insert into t (id,a) values (668,36);
+insert into t (id,a) values (668,37);
+insert into t (id,a) values (668,38);
+insert into t (id,a) values (668,39);
+insert into t (id,a) values (668,40);
+insert into t (id,a) values (668,41);
+insert into t (id,a) values (668,42);
+insert into t (id,a) values (668,43);
+insert into t (id,a) values (668,44);
+insert into t (id,a) values (668,45);
+insert into t (id,a) values (668,46);
+insert into t (id,a) values (668,47);
+insert into t (id,a) values (668,48);
+insert into t (id,a) values (668,49);
+insert into t (id,a) values (668,50);
+insert into t (id,a) values (668,51);
+insert into t (id,a) values (668,52);
+insert into t (id,a) values (668,53);
+insert into t (id,a) values (668,54);
+insert into t (id,a) values (668,55);
+insert into t (id,a) values (668,56);
+insert into t (id,a) values (668,57);
+insert into t (id,a) values (668,58);
+insert into t (id,a) values (668,59);
+insert into t (id,a) values (668,60);
+insert into t (id,a) values (668,61);
+insert into t (id,a) values (668,62);
+insert into t (id,a) values (668,63);
+insert into t (id,a) values (668,64);
+insert into t (id,a) values (668,65);
+insert into t (id,a) values (668,66);
+insert into t (id,a) values (668,67);
+insert into t (id,a) values (668,68);
+insert into t (id,a) values (668,69);
+insert into t (id,a) values (668,70);
+insert into t (id,a) values (668,71);
+insert into t (id,a) values (668,72);
+insert into t (id,a) values (668,73);
+insert into t (id,a) values (668,74);
+insert into t (id,a) values (668,75);
+insert into t (id,a) values (668,76);
+insert into t (id,a) values (668,77);
+insert into t (id,a) values (668,78);
+insert into t (id,a) values (668,79);
+insert into t (id,a) values (668,80);
+insert into t (id,a) values (668,81);
+insert into t (id,a) values (668,82);
+insert into t (id,a) values (668,83);
+insert into t (id,a) values (668,84);
+insert into t (id,a) values (668,85);
+insert into t (id,a) values (668,86);
+insert into t (id,a) values (668,87);
+insert into t (id,a) values (668,88);
+insert into t (id,a) values (668,89);
+insert into t (id,a) values (668,90);
+insert into t (id,a) values (668,91);
+insert into t (id,a) values (668,92);
+insert into t (id,a) values (668,93);
+insert into t (id,a) values (668,94);
+insert into t (id,a) values (668,95);
+insert into t (id,a) values (668,96);
+insert into t (id,a) values (668,97);
+insert into t (id,a) values (668,98);
+insert into t (id,a) values (668,99);
+insert into t (id,a) values (669,0);
+insert into t (id,a) values (669,1);
+insert into t (id,a) values (669,2);
+insert into t (id,a) values (669,3);
+insert into t (id,a) values (669,4);
+insert into t (id,a) values (669,5);
+insert into t (id,a) values (669,6);
+insert into t (id,a) values (669,7);
+insert into t (id,a) values (669,8);
+insert into t (id,a) values (669,9);
+insert into t (id,a) values (669,10);
+insert into t (id,a) values (669,11);
+insert into t (id,a) values (669,12);
+insert into t (id,a) values (669,13);
+insert into t (id,a) values (669,14);
+insert into t (id,a) values (669,15);
+insert into t (id,a) values (669,16);
+insert into t (id,a) values (669,17);
+insert into t (id,a) values (669,18);
+insert into t (id,a) values (669,19);
+insert into t (id,a) values (669,20);
+insert into t (id,a) values (669,21);
+insert into t (id,a) values (669,22);
+insert into t (id,a) values (669,23);
+insert into t (id,a) values (669,24);
+insert into t (id,a) values (669,25);
+insert into t (id,a) values (669,26);
+insert into t (id,a) values (669,27);
+insert into t (id,a) values (669,28);
+insert into t (id,a) values (669,29);
+insert into t (id,a) values (669,30);
+insert into t (id,a) values (669,31);
+insert into t (id,a) values (669,32);
+insert into t (id,a) values (669,33);
+insert into t (id,a) values (669,34);
+insert into t (id,a) values (669,35);
+insert into t (id,a) values (669,36);
+insert into t (id,a) values (669,37);
+insert into t (id,a) values (669,38);
+insert into t (id,a) values (669,39);
+insert into t (id,a) values (669,40);
+insert into t (id,a) values (669,41);
+insert into t (id,a) values (669,42);
+insert into t (id,a) values (669,43);
+insert into t (id,a) values (669,44);
+insert into t (id,a) values (669,45);
+insert into t (id,a) values (669,46);
+insert into t (id,a) values (669,47);
+insert into t (id,a) values (669,48);
+insert into t (id,a) values (669,49);
+insert into t (id,a) values (669,50);
+insert into t (id,a) values (669,51);
+insert into t (id,a) values (669,52);
+insert into t (id,a) values (669,53);
+insert into t (id,a) values (669,54);
+insert into t (id,a) values (669,55);
+insert into t (id,a) values (669,56);
+insert into t (id,a) values (669,57);
+insert into t (id,a) values (669,58);
+insert into t (id,a) values (669,59);
+insert into t (id,a) values (669,60);
+insert into t (id,a) values (669,61);
+insert into t (id,a) values (669,62);
+insert into t (id,a) values (669,63);
+insert into t (id,a) values (669,64);
+insert into t (id,a) values (669,65);
+insert into t (id,a) values (669,66);
+insert into t (id,a) values (669,67);
+insert into t (id,a) values (669,68);
+insert into t (id,a) values (669,69);
+insert into t (id,a) values (669,70);
+insert into t (id,a) values (669,71);
+insert into t (id,a) values (669,72);
+insert into t (id,a) values (669,73);
+insert into t (id,a) values (669,74);
+insert into t (id,a) values (669,75);
+insert into t (id,a) values (669,76);
+insert into t (id,a) values (669,77);
+insert into t (id,a) values (669,78);
+insert into t (id,a) values (669,79);
+insert into t (id,a) values (669,80);
+insert into t (id,a) values (669,81);
+insert into t (id,a) values (669,82);
+insert into t (id,a) values (669,83);
+insert into t (id,a) values (669,84);
+insert into t (id,a) values (669,85);
+insert into t (id,a) values (669,86);
+insert into t (id,a) values (669,87);
+insert into t (id,a) values (669,88);
+insert into t (id,a) values (669,89);
+insert into t (id,a) values (669,90);
+insert into t (id,a) values (669,91);
+insert into t (id,a) values (669,92);
+insert into t (id,a) values (669,93);
+insert into t (id,a) values (669,94);
+insert into t (id,a) values (669,95);
+insert into t (id,a) values (669,96);
+insert into t (id,a) values (669,97);
+insert into t (id,a) values (669,98);
+insert into t (id,a) values (669,99);
+insert into t (id,a) values (670,0);
+insert into t (id,a) values (670,1);
+insert into t (id,a) values (670,2);
+insert into t (id,a) values (670,3);
+insert into t (id,a) values (670,4);
+insert into t (id,a) values (670,5);
+insert into t (id,a) values (670,6);
+insert into t (id,a) values (670,7);
+insert into t (id,a) values (670,8);
+insert into t (id,a) values (670,9);
+insert into t (id,a) values (670,10);
+insert into t (id,a) values (670,11);
+insert into t (id,a) values (670,12);
+insert into t (id,a) values (670,13);
+insert into t (id,a) values (670,14);
+insert into t (id,a) values (670,15);
+insert into t (id,a) values (670,16);
+insert into t (id,a) values (670,17);
+insert into t (id,a) values (670,18);
+insert into t (id,a) values (670,19);
+insert into t (id,a) values (670,20);
+insert into t (id,a) values (670,21);
+insert into t (id,a) values (670,22);
+insert into t (id,a) values (670,23);
+insert into t (id,a) values (670,24);
+insert into t (id,a) values (670,25);
+insert into t (id,a) values (670,26);
+insert into t (id,a) values (670,27);
+insert into t (id,a) values (670,28);
+insert into t (id,a) values (670,29);
+insert into t (id,a) values (670,30);
+insert into t (id,a) values (670,31);
+insert into t (id,a) values (670,32);
+insert into t (id,a) values (670,33);
+insert into t (id,a) values (670,34);
+insert into t (id,a) values (670,35);
+insert into t (id,a) values (670,36);
+insert into t (id,a) values (670,37);
+insert into t (id,a) values (670,38);
+insert into t (id,a) values (670,39);
+insert into t (id,a) values (670,40);
+insert into t (id,a) values (670,41);
+insert into t (id,a) values (670,42);
+insert into t (id,a) values (670,43);
+insert into t (id,a) values (670,44);
+insert into t (id,a) values (670,45);
+insert into t (id,a) values (670,46);
+insert into t (id,a) values (670,47);
+insert into t (id,a) values (670,48);
+insert into t (id,a) values (670,49);
+insert into t (id,a) values (670,50);
+insert into t (id,a) values (670,51);
+insert into t (id,a) values (670,52);
+insert into t (id,a) values (670,53);
+insert into t (id,a) values (670,54);
+insert into t (id,a) values (670,55);
+insert into t (id,a) values (670,56);
+insert into t (id,a) values (670,57);
+insert into t (id,a) values (670,58);
+insert into t (id,a) values (670,59);
+insert into t (id,a) values (670,60);
+insert into t (id,a) values (670,61);
+insert into t (id,a) values (670,62);
+insert into t (id,a) values (670,63);
+insert into t (id,a) values (670,64);
+insert into t (id,a) values (670,65);
+insert into t (id,a) values (670,66);
+insert into t (id,a) values (670,67);
+insert into t (id,a) values (670,68);
+insert into t (id,a) values (670,69);
+insert into t (id,a) values (670,70);
+insert into t (id,a) values (670,71);
+insert into t (id,a) values (670,72);
+insert into t (id,a) values (670,73);
+insert into t (id,a) values (670,74);
+insert into t (id,a) values (670,75);
+insert into t (id,a) values (670,76);
+insert into t (id,a) values (670,77);
+insert into t (id,a) values (670,78);
+insert into t (id,a) values (670,79);
+insert into t (id,a) values (670,80);
+insert into t (id,a) values (670,81);
+insert into t (id,a) values (670,82);
+insert into t (id,a) values (670,83);
+insert into t (id,a) values (670,84);
+insert into t (id,a) values (670,85);
+insert into t (id,a) values (670,86);
+insert into t (id,a) values (670,87);
+insert into t (id,a) values (670,88);
+insert into t (id,a) values (670,89);
+insert into t (id,a) values (670,90);
+insert into t (id,a) values (670,91);
+insert into t (id,a) values (670,92);
+insert into t (id,a) values (670,93);
+insert into t (id,a) values (670,94);
+insert into t (id,a) values (670,95);
+insert into t (id,a) values (670,96);
+insert into t (id,a) values (670,97);
+insert into t (id,a) values (670,98);
+insert into t (id,a) values (670,99);
+insert into t (id,a) values (671,0);
+insert into t (id,a) values (671,1);
+insert into t (id,a) values (671,2);
+insert into t (id,a) values (671,3);
+insert into t (id,a) values (671,4);
+insert into t (id,a) values (671,5);
+insert into t (id,a) values (671,6);
+insert into t (id,a) values (671,7);
+insert into t (id,a) values (671,8);
+insert into t (id,a) values (671,9);
+insert into t (id,a) values (671,10);
+insert into t (id,a) values (671,11);
+insert into t (id,a) values (671,12);
+insert into t (id,a) values (671,13);
+insert into t (id,a) values (671,14);
+insert into t (id,a) values (671,15);
+insert into t (id,a) values (671,16);
+insert into t (id,a) values (671,17);
+insert into t (id,a) values (671,18);
+insert into t (id,a) values (671,19);
+insert into t (id,a) values (671,20);
+insert into t (id,a) values (671,21);
+insert into t (id,a) values (671,22);
+insert into t (id,a) values (671,23);
+insert into t (id,a) values (671,24);
+insert into t (id,a) values (671,25);
+insert into t (id,a) values (671,26);
+insert into t (id,a) values (671,27);
+insert into t (id,a) values (671,28);
+insert into t (id,a) values (671,29);
+insert into t (id,a) values (671,30);
+insert into t (id,a) values (671,31);
+insert into t (id,a) values (671,32);
+insert into t (id,a) values (671,33);
+insert into t (id,a) values (671,34);
+insert into t (id,a) values (671,35);
+insert into t (id,a) values (671,36);
+insert into t (id,a) values (671,37);
+insert into t (id,a) values (671,38);
+insert into t (id,a) values (671,39);
+insert into t (id,a) values (671,40);
+insert into t (id,a) values (671,41);
+insert into t (id,a) values (671,42);
+insert into t (id,a) values (671,43);
+insert into t (id,a) values (671,44);
+insert into t (id,a) values (671,45);
+insert into t (id,a) values (671,46);
+insert into t (id,a) values (671,47);
+insert into t (id,a) values (671,48);
+insert into t (id,a) values (671,49);
+insert into t (id,a) values (671,50);
+insert into t (id,a) values (671,51);
+insert into t (id,a) values (671,52);
+insert into t (id,a) values (671,53);
+insert into t (id,a) values (671,54);
+insert into t (id,a) values (671,55);
+insert into t (id,a) values (671,56);
+insert into t (id,a) values (671,57);
+insert into t (id,a) values (671,58);
+insert into t (id,a) values (671,59);
+insert into t (id,a) values (671,60);
+insert into t (id,a) values (671,61);
+insert into t (id,a) values (671,62);
+insert into t (id,a) values (671,63);
+insert into t (id,a) values (671,64);
+insert into t (id,a) values (671,65);
+insert into t (id,a) values (671,66);
+insert into t (id,a) values (671,67);
+insert into t (id,a) values (671,68);
+insert into t (id,a) values (671,69);
+insert into t (id,a) values (671,70);
+insert into t (id,a) values (671,71);
+insert into t (id,a) values (671,72);
+insert into t (id,a) values (671,73);
+insert into t (id,a) values (671,74);
+insert into t (id,a) values (671,75);
+insert into t (id,a) values (671,76);
+insert into t (id,a) values (671,77);
+insert into t (id,a) values (671,78);
+insert into t (id,a) values (671,79);
+insert into t (id,a) values (671,80);
+insert into t (id,a) values (671,81);
+insert into t (id,a) values (671,82);
+insert into t (id,a) values (671,83);
+insert into t (id,a) values (671,84);
+insert into t (id,a) values (671,85);
+insert into t (id,a) values (671,86);
+insert into t (id,a) values (671,87);
+insert into t (id,a) values (671,88);
+insert into t (id,a) values (671,89);
+insert into t (id,a) values (671,90);
+insert into t (id,a) values (671,91);
+insert into t (id,a) values (671,92);
+insert into t (id,a) values (671,93);
+insert into t (id,a) values (671,94);
+insert into t (id,a) values (671,95);
+insert into t (id,a) values (671,96);
+insert into t (id,a) values (671,97);
+insert into t (id,a) values (671,98);
+insert into t (id,a) values (671,99);
+insert into t (id,a) values (672,0);
+insert into t (id,a) values (672,1);
+insert into t (id,a) values (672,2);
+insert into t (id,a) values (672,3);
+insert into t (id,a) values (672,4);
+insert into t (id,a) values (672,5);
+insert into t (id,a) values (672,6);
+insert into t (id,a) values (672,7);
+insert into t (id,a) values (672,8);
+insert into t (id,a) values (672,9);
+insert into t (id,a) values (672,10);
+insert into t (id,a) values (672,11);
+insert into t (id,a) values (672,12);
+insert into t (id,a) values (672,13);
+insert into t (id,a) values (672,14);
+insert into t (id,a) values (672,15);
+insert into t (id,a) values (672,16);
+insert into t (id,a) values (672,17);
+insert into t (id,a) values (672,18);
+insert into t (id,a) values (672,19);
+insert into t (id,a) values (672,20);
+insert into t (id,a) values (672,21);
+insert into t (id,a) values (672,22);
+insert into t (id,a) values (672,23);
+insert into t (id,a) values (672,24);
+insert into t (id,a) values (672,25);
+insert into t (id,a) values (672,26);
+insert into t (id,a) values (672,27);
+insert into t (id,a) values (672,28);
+insert into t (id,a) values (672,29);
+insert into t (id,a) values (672,30);
+insert into t (id,a) values (672,31);
+insert into t (id,a) values (672,32);
+insert into t (id,a) values (672,33);
+insert into t (id,a) values (672,34);
+insert into t (id,a) values (672,35);
+insert into t (id,a) values (672,36);
+insert into t (id,a) values (672,37);
+insert into t (id,a) values (672,38);
+insert into t (id,a) values (672,39);
+insert into t (id,a) values (672,40);
+insert into t (id,a) values (672,41);
+insert into t (id,a) values (672,42);
+insert into t (id,a) values (672,43);
+insert into t (id,a) values (672,44);
+insert into t (id,a) values (672,45);
+insert into t (id,a) values (672,46);
+insert into t (id,a) values (672,47);
+insert into t (id,a) values (672,48);
+insert into t (id,a) values (672,49);
+insert into t (id,a) values (672,50);
+insert into t (id,a) values (672,51);
+insert into t (id,a) values (672,52);
+insert into t (id,a) values (672,53);
+insert into t (id,a) values (672,54);
+insert into t (id,a) values (672,55);
+insert into t (id,a) values (672,56);
+insert into t (id,a) values (672,57);
+insert into t (id,a) values (672,58);
+insert into t (id,a) values (672,59);
+insert into t (id,a) values (672,60);
+insert into t (id,a) values (672,61);
+insert into t (id,a) values (672,62);
+insert into t (id,a) values (672,63);
+insert into t (id,a) values (672,64);
+insert into t (id,a) values (672,65);
+insert into t (id,a) values (672,66);
+insert into t (id,a) values (672,67);
+insert into t (id,a) values (672,68);
+insert into t (id,a) values (672,69);
+insert into t (id,a) values (672,70);
+insert into t (id,a) values (672,71);
+insert into t (id,a) values (672,72);
+insert into t (id,a) values (672,73);
+insert into t (id,a) values (672,74);
+insert into t (id,a) values (672,75);
+insert into t (id,a) values (672,76);
+insert into t (id,a) values (672,77);
+insert into t (id,a) values (672,78);
+insert into t (id,a) values (672,79);
+insert into t (id,a) values (672,80);
+insert into t (id,a) values (672,81);
+insert into t (id,a) values (672,82);
+insert into t (id,a) values (672,83);
+insert into t (id,a) values (672,84);
+insert into t (id,a) values (672,85);
+insert into t (id,a) values (672,86);
+insert into t (id,a) values (672,87);
+insert into t (id,a) values (672,88);
+insert into t (id,a) values (672,89);
+insert into t (id,a) values (672,90);
+insert into t (id,a) values (672,91);
+insert into t (id,a) values (672,92);
+insert into t (id,a) values (672,93);
+insert into t (id,a) values (672,94);
+insert into t (id,a) values (672,95);
+insert into t (id,a) values (672,96);
+insert into t (id,a) values (672,97);
+insert into t (id,a) values (672,98);
+insert into t (id,a) values (672,99);
+insert into t (id,a) values (673,0);
+insert into t (id,a) values (673,1);
+insert into t (id,a) values (673,2);
+insert into t (id,a) values (673,3);
+insert into t (id,a) values (673,4);
+insert into t (id,a) values (673,5);
+insert into t (id,a) values (673,6);
+insert into t (id,a) values (673,7);
+insert into t (id,a) values (673,8);
+insert into t (id,a) values (673,9);
+insert into t (id,a) values (673,10);
+insert into t (id,a) values (673,11);
+insert into t (id,a) values (673,12);
+insert into t (id,a) values (673,13);
+insert into t (id,a) values (673,14);
+insert into t (id,a) values (673,15);
+insert into t (id,a) values (673,16);
+insert into t (id,a) values (673,17);
+insert into t (id,a) values (673,18);
+insert into t (id,a) values (673,19);
+insert into t (id,a) values (673,20);
+insert into t (id,a) values (673,21);
+insert into t (id,a) values (673,22);
+insert into t (id,a) values (673,23);
+insert into t (id,a) values (673,24);
+insert into t (id,a) values (673,25);
+insert into t (id,a) values (673,26);
+insert into t (id,a) values (673,27);
+insert into t (id,a) values (673,28);
+insert into t (id,a) values (673,29);
+insert into t (id,a) values (673,30);
+insert into t (id,a) values (673,31);
+insert into t (id,a) values (673,32);
+insert into t (id,a) values (673,33);
+insert into t (id,a) values (673,34);
+insert into t (id,a) values (673,35);
+insert into t (id,a) values (673,36);
+insert into t (id,a) values (673,37);
+insert into t (id,a) values (673,38);
+insert into t (id,a) values (673,39);
+insert into t (id,a) values (673,40);
+insert into t (id,a) values (673,41);
+insert into t (id,a) values (673,42);
+insert into t (id,a) values (673,43);
+insert into t (id,a) values (673,44);
+insert into t (id,a) values (673,45);
+insert into t (id,a) values (673,46);
+insert into t (id,a) values (673,47);
+insert into t (id,a) values (673,48);
+insert into t (id,a) values (673,49);
+insert into t (id,a) values (673,50);
+insert into t (id,a) values (673,51);
+insert into t (id,a) values (673,52);
+insert into t (id,a) values (673,53);
+insert into t (id,a) values (673,54);
+insert into t (id,a) values (673,55);
+insert into t (id,a) values (673,56);
+insert into t (id,a) values (673,57);
+insert into t (id,a) values (673,58);
+insert into t (id,a) values (673,59);
+insert into t (id,a) values (673,60);
+insert into t (id,a) values (673,61);
+insert into t (id,a) values (673,62);
+insert into t (id,a) values (673,63);
+insert into t (id,a) values (673,64);
+insert into t (id,a) values (673,65);
+insert into t (id,a) values (673,66);
+insert into t (id,a) values (673,67);
+insert into t (id,a) values (673,68);
+insert into t (id,a) values (673,69);
+insert into t (id,a) values (673,70);
+insert into t (id,a) values (673,71);
+insert into t (id,a) values (673,72);
+insert into t (id,a) values (673,73);
+insert into t (id,a) values (673,74);
+insert into t (id,a) values (673,75);
+insert into t (id,a) values (673,76);
+insert into t (id,a) values (673,77);
+insert into t (id,a) values (673,78);
+insert into t (id,a) values (673,79);
+insert into t (id,a) values (673,80);
+insert into t (id,a) values (673,81);
+insert into t (id,a) values (673,82);
+insert into t (id,a) values (673,83);
+insert into t (id,a) values (673,84);
+insert into t (id,a) values (673,85);
+insert into t (id,a) values (673,86);
+insert into t (id,a) values (673,87);
+insert into t (id,a) values (673,88);
+insert into t (id,a) values (673,89);
+insert into t (id,a) values (673,90);
+insert into t (id,a) values (673,91);
+insert into t (id,a) values (673,92);
+insert into t (id,a) values (673,93);
+insert into t (id,a) values (673,94);
+insert into t (id,a) values (673,95);
+insert into t (id,a) values (673,96);
+insert into t (id,a) values (673,97);
+insert into t (id,a) values (673,98);
+insert into t (id,a) values (673,99);
+insert into t (id,a) values (674,0);
+insert into t (id,a) values (674,1);
+insert into t (id,a) values (674,2);
+insert into t (id,a) values (674,3);
+insert into t (id,a) values (674,4);
+insert into t (id,a) values (674,5);
+insert into t (id,a) values (674,6);
+insert into t (id,a) values (674,7);
+insert into t (id,a) values (674,8);
+insert into t (id,a) values (674,9);
+insert into t (id,a) values (674,10);
+insert into t (id,a) values (674,11);
+insert into t (id,a) values (674,12);
+insert into t (id,a) values (674,13);
+insert into t (id,a) values (674,14);
+insert into t (id,a) values (674,15);
+insert into t (id,a) values (674,16);
+insert into t (id,a) values (674,17);
+insert into t (id,a) values (674,18);
+insert into t (id,a) values (674,19);
+insert into t (id,a) values (674,20);
+insert into t (id,a) values (674,21);
+insert into t (id,a) values (674,22);
+insert into t (id,a) values (674,23);
+insert into t (id,a) values (674,24);
+insert into t (id,a) values (674,25);
+insert into t (id,a) values (674,26);
+insert into t (id,a) values (674,27);
+insert into t (id,a) values (674,28);
+insert into t (id,a) values (674,29);
+insert into t (id,a) values (674,30);
+insert into t (id,a) values (674,31);
+insert into t (id,a) values (674,32);
+insert into t (id,a) values (674,33);
+insert into t (id,a) values (674,34);
+insert into t (id,a) values (674,35);
+insert into t (id,a) values (674,36);
+insert into t (id,a) values (674,37);
+insert into t (id,a) values (674,38);
+insert into t (id,a) values (674,39);
+insert into t (id,a) values (674,40);
+insert into t (id,a) values (674,41);
+insert into t (id,a) values (674,42);
+insert into t (id,a) values (674,43);
+insert into t (id,a) values (674,44);
+insert into t (id,a) values (674,45);
+insert into t (id,a) values (674,46);
+insert into t (id,a) values (674,47);
+insert into t (id,a) values (674,48);
+insert into t (id,a) values (674,49);
+insert into t (id,a) values (674,50);
+insert into t (id,a) values (674,51);
+insert into t (id,a) values (674,52);
+insert into t (id,a) values (674,53);
+insert into t (id,a) values (674,54);
+insert into t (id,a) values (674,55);
+insert into t (id,a) values (674,56);
+insert into t (id,a) values (674,57);
+insert into t (id,a) values (674,58);
+insert into t (id,a) values (674,59);
+insert into t (id,a) values (674,60);
+insert into t (id,a) values (674,61);
+insert into t (id,a) values (674,62);
+insert into t (id,a) values (674,63);
+insert into t (id,a) values (674,64);
+insert into t (id,a) values (674,65);
+insert into t (id,a) values (674,66);
+insert into t (id,a) values (674,67);
+insert into t (id,a) values (674,68);
+insert into t (id,a) values (674,69);
+insert into t (id,a) values (674,70);
+insert into t (id,a) values (674,71);
+insert into t (id,a) values (674,72);
+insert into t (id,a) values (674,73);
+insert into t (id,a) values (674,74);
+insert into t (id,a) values (674,75);
+insert into t (id,a) values (674,76);
+insert into t (id,a) values (674,77);
+insert into t (id,a) values (674,78);
+insert into t (id,a) values (674,79);
+insert into t (id,a) values (674,80);
+insert into t (id,a) values (674,81);
+insert into t (id,a) values (674,82);
+insert into t (id,a) values (674,83);
+insert into t (id,a) values (674,84);
+insert into t (id,a) values (674,85);
+insert into t (id,a) values (674,86);
+insert into t (id,a) values (674,87);
+insert into t (id,a) values (674,88);
+insert into t (id,a) values (674,89);
+insert into t (id,a) values (674,90);
+insert into t (id,a) values (674,91);
+insert into t (id,a) values (674,92);
+insert into t (id,a) values (674,93);
+insert into t (id,a) values (674,94);
+insert into t (id,a) values (674,95);
+insert into t (id,a) values (674,96);
+insert into t (id,a) values (674,97);
+insert into t (id,a) values (674,98);
+insert into t (id,a) values (674,99);
+insert into t (id,a) values (675,0);
+insert into t (id,a) values (675,1);
+insert into t (id,a) values (675,2);
+insert into t (id,a) values (675,3);
+insert into t (id,a) values (675,4);
+insert into t (id,a) values (675,5);
+insert into t (id,a) values (675,6);
+insert into t (id,a) values (675,7);
+insert into t (id,a) values (675,8);
+insert into t (id,a) values (675,9);
+insert into t (id,a) values (675,10);
+insert into t (id,a) values (675,11);
+insert into t (id,a) values (675,12);
+insert into t (id,a) values (675,13);
+insert into t (id,a) values (675,14);
+insert into t (id,a) values (675,15);
+insert into t (id,a) values (675,16);
+insert into t (id,a) values (675,17);
+insert into t (id,a) values (675,18);
+insert into t (id,a) values (675,19);
+insert into t (id,a) values (675,20);
+insert into t (id,a) values (675,21);
+insert into t (id,a) values (675,22);
+insert into t (id,a) values (675,23);
+insert into t (id,a) values (675,24);
+insert into t (id,a) values (675,25);
+insert into t (id,a) values (675,26);
+insert into t (id,a) values (675,27);
+insert into t (id,a) values (675,28);
+insert into t (id,a) values (675,29);
+insert into t (id,a) values (675,30);
+insert into t (id,a) values (675,31);
+insert into t (id,a) values (675,32);
+insert into t (id,a) values (675,33);
+insert into t (id,a) values (675,34);
+insert into t (id,a) values (675,35);
+insert into t (id,a) values (675,36);
+insert into t (id,a) values (675,37);
+insert into t (id,a) values (675,38);
+insert into t (id,a) values (675,39);
+insert into t (id,a) values (675,40);
+insert into t (id,a) values (675,41);
+insert into t (id,a) values (675,42);
+insert into t (id,a) values (675,43);
+insert into t (id,a) values (675,44);
+insert into t (id,a) values (675,45);
+insert into t (id,a) values (675,46);
+insert into t (id,a) values (675,47);
+insert into t (id,a) values (675,48);
+insert into t (id,a) values (675,49);
+insert into t (id,a) values (675,50);
+insert into t (id,a) values (675,51);
+insert into t (id,a) values (675,52);
+insert into t (id,a) values (675,53);
+insert into t (id,a) values (675,54);
+insert into t (id,a) values (675,55);
+insert into t (id,a) values (675,56);
+insert into t (id,a) values (675,57);
+insert into t (id,a) values (675,58);
+insert into t (id,a) values (675,59);
+insert into t (id,a) values (675,60);
+insert into t (id,a) values (675,61);
+insert into t (id,a) values (675,62);
+insert into t (id,a) values (675,63);
+insert into t (id,a) values (675,64);
+insert into t (id,a) values (675,65);
+insert into t (id,a) values (675,66);
+insert into t (id,a) values (675,67);
+insert into t (id,a) values (675,68);
+insert into t (id,a) values (675,69);
+insert into t (id,a) values (675,70);
+insert into t (id,a) values (675,71);
+insert into t (id,a) values (675,72);
+insert into t (id,a) values (675,73);
+insert into t (id,a) values (675,74);
+insert into t (id,a) values (675,75);
+insert into t (id,a) values (675,76);
+insert into t (id,a) values (675,77);
+insert into t (id,a) values (675,78);
+insert into t (id,a) values (675,79);
+insert into t (id,a) values (675,80);
+insert into t (id,a) values (675,81);
+insert into t (id,a) values (675,82);
+insert into t (id,a) values (675,83);
+insert into t (id,a) values (675,84);
+insert into t (id,a) values (675,85);
+insert into t (id,a) values (675,86);
+insert into t (id,a) values (675,87);
+insert into t (id,a) values (675,88);
+insert into t (id,a) values (675,89);
+insert into t (id,a) values (675,90);
+insert into t (id,a) values (675,91);
+insert into t (id,a) values (675,92);
+insert into t (id,a) values (675,93);
+insert into t (id,a) values (675,94);
+insert into t (id,a) values (675,95);
+insert into t (id,a) values (675,96);
+insert into t (id,a) values (675,97);
+insert into t (id,a) values (675,98);
+insert into t (id,a) values (675,99);
+insert into t (id,a) values (676,0);
+insert into t (id,a) values (676,1);
+insert into t (id,a) values (676,2);
+insert into t (id,a) values (676,3);
+insert into t (id,a) values (676,4);
+insert into t (id,a) values (676,5);
+insert into t (id,a) values (676,6);
+insert into t (id,a) values (676,7);
+insert into t (id,a) values (676,8);
+insert into t (id,a) values (676,9);
+insert into t (id,a) values (676,10);
+insert into t (id,a) values (676,11);
+insert into t (id,a) values (676,12);
+insert into t (id,a) values (676,13);
+insert into t (id,a) values (676,14);
+insert into t (id,a) values (676,15);
+insert into t (id,a) values (676,16);
+insert into t (id,a) values (676,17);
+insert into t (id,a) values (676,18);
+insert into t (id,a) values (676,19);
+insert into t (id,a) values (676,20);
+insert into t (id,a) values (676,21);
+insert into t (id,a) values (676,22);
+insert into t (id,a) values (676,23);
+insert into t (id,a) values (676,24);
+insert into t (id,a) values (676,25);
+insert into t (id,a) values (676,26);
+insert into t (id,a) values (676,27);
+insert into t (id,a) values (676,28);
+insert into t (id,a) values (676,29);
+insert into t (id,a) values (676,30);
+insert into t (id,a) values (676,31);
+insert into t (id,a) values (676,32);
+insert into t (id,a) values (676,33);
+insert into t (id,a) values (676,34);
+insert into t (id,a) values (676,35);
+insert into t (id,a) values (676,36);
+insert into t (id,a) values (676,37);
+insert into t (id,a) values (676,38);
+insert into t (id,a) values (676,39);
+insert into t (id,a) values (676,40);
+insert into t (id,a) values (676,41);
+insert into t (id,a) values (676,42);
+insert into t (id,a) values (676,43);
+insert into t (id,a) values (676,44);
+insert into t (id,a) values (676,45);
+insert into t (id,a) values (676,46);
+insert into t (id,a) values (676,47);
+insert into t (id,a) values (676,48);
+insert into t (id,a) values (676,49);
+insert into t (id,a) values (676,50);
+insert into t (id,a) values (676,51);
+insert into t (id,a) values (676,52);
+insert into t (id,a) values (676,53);
+insert into t (id,a) values (676,54);
+insert into t (id,a) values (676,55);
+insert into t (id,a) values (676,56);
+insert into t (id,a) values (676,57);
+insert into t (id,a) values (676,58);
+insert into t (id,a) values (676,59);
+insert into t (id,a) values (676,60);
+insert into t (id,a) values (676,61);
+insert into t (id,a) values (676,62);
+insert into t (id,a) values (676,63);
+insert into t (id,a) values (676,64);
+insert into t (id,a) values (676,65);
+insert into t (id,a) values (676,66);
+insert into t (id,a) values (676,67);
+insert into t (id,a) values (676,68);
+insert into t (id,a) values (676,69);
+insert into t (id,a) values (676,70);
+insert into t (id,a) values (676,71);
+insert into t (id,a) values (676,72);
+insert into t (id,a) values (676,73);
+insert into t (id,a) values (676,74);
+insert into t (id,a) values (676,75);
+insert into t (id,a) values (676,76);
+insert into t (id,a) values (676,77);
+insert into t (id,a) values (676,78);
+insert into t (id,a) values (676,79);
+insert into t (id,a) values (676,80);
+insert into t (id,a) values (676,81);
+insert into t (id,a) values (676,82);
+insert into t (id,a) values (676,83);
+insert into t (id,a) values (676,84);
+insert into t (id,a) values (676,85);
+insert into t (id,a) values (676,86);
+insert into t (id,a) values (676,87);
+insert into t (id,a) values (676,88);
+insert into t (id,a) values (676,89);
+insert into t (id,a) values (676,90);
+insert into t (id,a) values (676,91);
+insert into t (id,a) values (676,92);
+insert into t (id,a) values (676,93);
+insert into t (id,a) values (676,94);
+insert into t (id,a) values (676,95);
+insert into t (id,a) values (676,96);
+insert into t (id,a) values (676,97);
+insert into t (id,a) values (676,98);
+insert into t (id,a) values (676,99);
+insert into t (id,a) values (677,0);
+insert into t (id,a) values (677,1);
+insert into t (id,a) values (677,2);
+insert into t (id,a) values (677,3);
+insert into t (id,a) values (677,4);
+insert into t (id,a) values (677,5);
+insert into t (id,a) values (677,6);
+insert into t (id,a) values (677,7);
+insert into t (id,a) values (677,8);
+insert into t (id,a) values (677,9);
+insert into t (id,a) values (677,10);
+insert into t (id,a) values (677,11);
+insert into t (id,a) values (677,12);
+insert into t (id,a) values (677,13);
+insert into t (id,a) values (677,14);
+insert into t (id,a) values (677,15);
+insert into t (id,a) values (677,16);
+insert into t (id,a) values (677,17);
+insert into t (id,a) values (677,18);
+insert into t (id,a) values (677,19);
+insert into t (id,a) values (677,20);
+insert into t (id,a) values (677,21);
+insert into t (id,a) values (677,22);
+insert into t (id,a) values (677,23);
+insert into t (id,a) values (677,24);
+insert into t (id,a) values (677,25);
+insert into t (id,a) values (677,26);
+insert into t (id,a) values (677,27);
+insert into t (id,a) values (677,28);
+insert into t (id,a) values (677,29);
+insert into t (id,a) values (677,30);
+insert into t (id,a) values (677,31);
+insert into t (id,a) values (677,32);
+insert into t (id,a) values (677,33);
+insert into t (id,a) values (677,34);
+insert into t (id,a) values (677,35);
+insert into t (id,a) values (677,36);
+insert into t (id,a) values (677,37);
+insert into t (id,a) values (677,38);
+insert into t (id,a) values (677,39);
+insert into t (id,a) values (677,40);
+insert into t (id,a) values (677,41);
+insert into t (id,a) values (677,42);
+insert into t (id,a) values (677,43);
+insert into t (id,a) values (677,44);
+insert into t (id,a) values (677,45);
+insert into t (id,a) values (677,46);
+insert into t (id,a) values (677,47);
+insert into t (id,a) values (677,48);
+insert into t (id,a) values (677,49);
+insert into t (id,a) values (677,50);
+insert into t (id,a) values (677,51);
+insert into t (id,a) values (677,52);
+insert into t (id,a) values (677,53);
+insert into t (id,a) values (677,54);
+insert into t (id,a) values (677,55);
+insert into t (id,a) values (677,56);
+insert into t (id,a) values (677,57);
+insert into t (id,a) values (677,58);
+insert into t (id,a) values (677,59);
+insert into t (id,a) values (677,60);
+insert into t (id,a) values (677,61);
+insert into t (id,a) values (677,62);
+insert into t (id,a) values (677,63);
+insert into t (id,a) values (677,64);
+insert into t (id,a) values (677,65);
+insert into t (id,a) values (677,66);
+insert into t (id,a) values (677,67);
+insert into t (id,a) values (677,68);
+insert into t (id,a) values (677,69);
+insert into t (id,a) values (677,70);
+insert into t (id,a) values (677,71);
+insert into t (id,a) values (677,72);
+insert into t (id,a) values (677,73);
+insert into t (id,a) values (677,74);
+insert into t (id,a) values (677,75);
+insert into t (id,a) values (677,76);
+insert into t (id,a) values (677,77);
+insert into t (id,a) values (677,78);
+insert into t (id,a) values (677,79);
+insert into t (id,a) values (677,80);
+insert into t (id,a) values (677,81);
+insert into t (id,a) values (677,82);
+insert into t (id,a) values (677,83);
+insert into t (id,a) values (677,84);
+insert into t (id,a) values (677,85);
+insert into t (id,a) values (677,86);
+insert into t (id,a) values (677,87);
+insert into t (id,a) values (677,88);
+insert into t (id,a) values (677,89);
+insert into t (id,a) values (677,90);
+insert into t (id,a) values (677,91);
+insert into t (id,a) values (677,92);
+insert into t (id,a) values (677,93);
+insert into t (id,a) values (677,94);
+insert into t (id,a) values (677,95);
+insert into t (id,a) values (677,96);
+insert into t (id,a) values (677,97);
+insert into t (id,a) values (677,98);
+insert into t (id,a) values (677,99);
+insert into t (id,a) values (678,0);
+insert into t (id,a) values (678,1);
+insert into t (id,a) values (678,2);
+insert into t (id,a) values (678,3);
+insert into t (id,a) values (678,4);
+insert into t (id,a) values (678,5);
+insert into t (id,a) values (678,6);
+insert into t (id,a) values (678,7);
+insert into t (id,a) values (678,8);
+insert into t (id,a) values (678,9);
+insert into t (id,a) values (678,10);
+insert into t (id,a) values (678,11);
+insert into t (id,a) values (678,12);
+insert into t (id,a) values (678,13);
+insert into t (id,a) values (678,14);
+insert into t (id,a) values (678,15);
+insert into t (id,a) values (678,16);
+insert into t (id,a) values (678,17);
+insert into t (id,a) values (678,18);
+insert into t (id,a) values (678,19);
+insert into t (id,a) values (678,20);
+insert into t (id,a) values (678,21);
+insert into t (id,a) values (678,22);
+insert into t (id,a) values (678,23);
+insert into t (id,a) values (678,24);
+insert into t (id,a) values (678,25);
+insert into t (id,a) values (678,26);
+insert into t (id,a) values (678,27);
+insert into t (id,a) values (678,28);
+insert into t (id,a) values (678,29);
+insert into t (id,a) values (678,30);
+insert into t (id,a) values (678,31);
+insert into t (id,a) values (678,32);
+insert into t (id,a) values (678,33);
+insert into t (id,a) values (678,34);
+insert into t (id,a) values (678,35);
+insert into t (id,a) values (678,36);
+insert into t (id,a) values (678,37);
+insert into t (id,a) values (678,38);
+insert into t (id,a) values (678,39);
+insert into t (id,a) values (678,40);
+insert into t (id,a) values (678,41);
+insert into t (id,a) values (678,42);
+insert into t (id,a) values (678,43);
+insert into t (id,a) values (678,44);
+insert into t (id,a) values (678,45);
+insert into t (id,a) values (678,46);
+insert into t (id,a) values (678,47);
+insert into t (id,a) values (678,48);
+insert into t (id,a) values (678,49);
+insert into t (id,a) values (678,50);
+insert into t (id,a) values (678,51);
+insert into t (id,a) values (678,52);
+insert into t (id,a) values (678,53);
+insert into t (id,a) values (678,54);
+insert into t (id,a) values (678,55);
+insert into t (id,a) values (678,56);
+insert into t (id,a) values (678,57);
+insert into t (id,a) values (678,58);
+insert into t (id,a) values (678,59);
+insert into t (id,a) values (678,60);
+insert into t (id,a) values (678,61);
+insert into t (id,a) values (678,62);
+insert into t (id,a) values (678,63);
+insert into t (id,a) values (678,64);
+insert into t (id,a) values (678,65);
+insert into t (id,a) values (678,66);
+insert into t (id,a) values (678,67);
+insert into t (id,a) values (678,68);
+insert into t (id,a) values (678,69);
+insert into t (id,a) values (678,70);
+insert into t (id,a) values (678,71);
+insert into t (id,a) values (678,72);
+insert into t (id,a) values (678,73);
+insert into t (id,a) values (678,74);
+insert into t (id,a) values (678,75);
+insert into t (id,a) values (678,76);
+insert into t (id,a) values (678,77);
+insert into t (id,a) values (678,78);
+insert into t (id,a) values (678,79);
+insert into t (id,a) values (678,80);
+insert into t (id,a) values (678,81);
+insert into t (id,a) values (678,82);
+insert into t (id,a) values (678,83);
+insert into t (id,a) values (678,84);
+insert into t (id,a) values (678,85);
+insert into t (id,a) values (678,86);
+insert into t (id,a) values (678,87);
+insert into t (id,a) values (678,88);
+insert into t (id,a) values (678,89);
+insert into t (id,a) values (678,90);
+insert into t (id,a) values (678,91);
+insert into t (id,a) values (678,92);
+insert into t (id,a) values (678,93);
+insert into t (id,a) values (678,94);
+insert into t (id,a) values (678,95);
+insert into t (id,a) values (678,96);
+insert into t (id,a) values (678,97);
+insert into t (id,a) values (678,98);
+insert into t (id,a) values (678,99);
+insert into t (id,a) values (679,0);
+insert into t (id,a) values (679,1);
+insert into t (id,a) values (679,2);
+insert into t (id,a) values (679,3);
+insert into t (id,a) values (679,4);
+insert into t (id,a) values (679,5);
+insert into t (id,a) values (679,6);
+insert into t (id,a) values (679,7);
+insert into t (id,a) values (679,8);
+insert into t (id,a) values (679,9);
+insert into t (id,a) values (679,10);
+insert into t (id,a) values (679,11);
+insert into t (id,a) values (679,12);
+insert into t (id,a) values (679,13);
+insert into t (id,a) values (679,14);
+insert into t (id,a) values (679,15);
+insert into t (id,a) values (679,16);
+insert into t (id,a) values (679,17);
+insert into t (id,a) values (679,18);
+insert into t (id,a) values (679,19);
+insert into t (id,a) values (679,20);
+insert into t (id,a) values (679,21);
+insert into t (id,a) values (679,22);
+insert into t (id,a) values (679,23);
+insert into t (id,a) values (679,24);
+insert into t (id,a) values (679,25);
+insert into t (id,a) values (679,26);
+insert into t (id,a) values (679,27);
+insert into t (id,a) values (679,28);
+insert into t (id,a) values (679,29);
+insert into t (id,a) values (679,30);
+insert into t (id,a) values (679,31);
+insert into t (id,a) values (679,32);
+insert into t (id,a) values (679,33);
+insert into t (id,a) values (679,34);
+insert into t (id,a) values (679,35);
+insert into t (id,a) values (679,36);
+insert into t (id,a) values (679,37);
+insert into t (id,a) values (679,38);
+insert into t (id,a) values (679,39);
+insert into t (id,a) values (679,40);
+insert into t (id,a) values (679,41);
+insert into t (id,a) values (679,42);
+insert into t (id,a) values (679,43);
+insert into t (id,a) values (679,44);
+insert into t (id,a) values (679,45);
+insert into t (id,a) values (679,46);
+insert into t (id,a) values (679,47);
+insert into t (id,a) values (679,48);
+insert into t (id,a) values (679,49);
+insert into t (id,a) values (679,50);
+insert into t (id,a) values (679,51);
+insert into t (id,a) values (679,52);
+insert into t (id,a) values (679,53);
+insert into t (id,a) values (679,54);
+insert into t (id,a) values (679,55);
+insert into t (id,a) values (679,56);
+insert into t (id,a) values (679,57);
+insert into t (id,a) values (679,58);
+insert into t (id,a) values (679,59);
+insert into t (id,a) values (679,60);
+insert into t (id,a) values (679,61);
+insert into t (id,a) values (679,62);
+insert into t (id,a) values (679,63);
+insert into t (id,a) values (679,64);
+insert into t (id,a) values (679,65);
+insert into t (id,a) values (679,66);
+insert into t (id,a) values (679,67);
+insert into t (id,a) values (679,68);
+insert into t (id,a) values (679,69);
+insert into t (id,a) values (679,70);
+insert into t (id,a) values (679,71);
+insert into t (id,a) values (679,72);
+insert into t (id,a) values (679,73);
+insert into t (id,a) values (679,74);
+insert into t (id,a) values (679,75);
+insert into t (id,a) values (679,76);
+insert into t (id,a) values (679,77);
+insert into t (id,a) values (679,78);
+insert into t (id,a) values (679,79);
+insert into t (id,a) values (679,80);
+insert into t (id,a) values (679,81);
+insert into t (id,a) values (679,82);
+insert into t (id,a) values (679,83);
+insert into t (id,a) values (679,84);
+insert into t (id,a) values (679,85);
+insert into t (id,a) values (679,86);
+insert into t (id,a) values (679,87);
+insert into t (id,a) values (679,88);
+insert into t (id,a) values (679,89);
+insert into t (id,a) values (679,90);
+insert into t (id,a) values (679,91);
+insert into t (id,a) values (679,92);
+insert into t (id,a) values (679,93);
+insert into t (id,a) values (679,94);
+insert into t (id,a) values (679,95);
+insert into t (id,a) values (679,96);
+insert into t (id,a) values (679,97);
+insert into t (id,a) values (679,98);
+insert into t (id,a) values (679,99);
+insert into t (id,a) values (680,0);
+insert into t (id,a) values (680,1);
+insert into t (id,a) values (680,2);
+insert into t (id,a) values (680,3);
+insert into t (id,a) values (680,4);
+insert into t (id,a) values (680,5);
+insert into t (id,a) values (680,6);
+insert into t (id,a) values (680,7);
+insert into t (id,a) values (680,8);
+insert into t (id,a) values (680,9);
+insert into t (id,a) values (680,10);
+insert into t (id,a) values (680,11);
+insert into t (id,a) values (680,12);
+insert into t (id,a) values (680,13);
+insert into t (id,a) values (680,14);
+insert into t (id,a) values (680,15);
+insert into t (id,a) values (680,16);
+insert into t (id,a) values (680,17);
+insert into t (id,a) values (680,18);
+insert into t (id,a) values (680,19);
+insert into t (id,a) values (680,20);
+insert into t (id,a) values (680,21);
+insert into t (id,a) values (680,22);
+insert into t (id,a) values (680,23);
+insert into t (id,a) values (680,24);
+insert into t (id,a) values (680,25);
+insert into t (id,a) values (680,26);
+insert into t (id,a) values (680,27);
+insert into t (id,a) values (680,28);
+insert into t (id,a) values (680,29);
+insert into t (id,a) values (680,30);
+insert into t (id,a) values (680,31);
+insert into t (id,a) values (680,32);
+insert into t (id,a) values (680,33);
+insert into t (id,a) values (680,34);
+insert into t (id,a) values (680,35);
+insert into t (id,a) values (680,36);
+insert into t (id,a) values (680,37);
+insert into t (id,a) values (680,38);
+insert into t (id,a) values (680,39);
+insert into t (id,a) values (680,40);
+insert into t (id,a) values (680,41);
+insert into t (id,a) values (680,42);
+insert into t (id,a) values (680,43);
+insert into t (id,a) values (680,44);
+insert into t (id,a) values (680,45);
+insert into t (id,a) values (680,46);
+insert into t (id,a) values (680,47);
+insert into t (id,a) values (680,48);
+insert into t (id,a) values (680,49);
+insert into t (id,a) values (680,50);
+insert into t (id,a) values (680,51);
+insert into t (id,a) values (680,52);
+insert into t (id,a) values (680,53);
+insert into t (id,a) values (680,54);
+insert into t (id,a) values (680,55);
+insert into t (id,a) values (680,56);
+insert into t (id,a) values (680,57);
+insert into t (id,a) values (680,58);
+insert into t (id,a) values (680,59);
+insert into t (id,a) values (680,60);
+insert into t (id,a) values (680,61);
+insert into t (id,a) values (680,62);
+insert into t (id,a) values (680,63);
+insert into t (id,a) values (680,64);
+insert into t (id,a) values (680,65);
+insert into t (id,a) values (680,66);
+insert into t (id,a) values (680,67);
+insert into t (id,a) values (680,68);
+insert into t (id,a) values (680,69);
+insert into t (id,a) values (680,70);
+insert into t (id,a) values (680,71);
+insert into t (id,a) values (680,72);
+insert into t (id,a) values (680,73);
+insert into t (id,a) values (680,74);
+insert into t (id,a) values (680,75);
+insert into t (id,a) values (680,76);
+insert into t (id,a) values (680,77);
+insert into t (id,a) values (680,78);
+insert into t (id,a) values (680,79);
+insert into t (id,a) values (680,80);
+insert into t (id,a) values (680,81);
+insert into t (id,a) values (680,82);
+insert into t (id,a) values (680,83);
+insert into t (id,a) values (680,84);
+insert into t (id,a) values (680,85);
+insert into t (id,a) values (680,86);
+insert into t (id,a) values (680,87);
+insert into t (id,a) values (680,88);
+insert into t (id,a) values (680,89);
+insert into t (id,a) values (680,90);
+insert into t (id,a) values (680,91);
+insert into t (id,a) values (680,92);
+insert into t (id,a) values (680,93);
+insert into t (id,a) values (680,94);
+insert into t (id,a) values (680,95);
+insert into t (id,a) values (680,96);
+insert into t (id,a) values (680,97);
+insert into t (id,a) values (680,98);
+insert into t (id,a) values (680,99);
+insert into t (id,a) values (681,0);
+insert into t (id,a) values (681,1);
+insert into t (id,a) values (681,2);
+insert into t (id,a) values (681,3);
+insert into t (id,a) values (681,4);
+insert into t (id,a) values (681,5);
+insert into t (id,a) values (681,6);
+insert into t (id,a) values (681,7);
+insert into t (id,a) values (681,8);
+insert into t (id,a) values (681,9);
+insert into t (id,a) values (681,10);
+insert into t (id,a) values (681,11);
+insert into t (id,a) values (681,12);
+insert into t (id,a) values (681,13);
+insert into t (id,a) values (681,14);
+insert into t (id,a) values (681,15);
+insert into t (id,a) values (681,16);
+insert into t (id,a) values (681,17);
+insert into t (id,a) values (681,18);
+insert into t (id,a) values (681,19);
+insert into t (id,a) values (681,20);
+insert into t (id,a) values (681,21);
+insert into t (id,a) values (681,22);
+insert into t (id,a) values (681,23);
+insert into t (id,a) values (681,24);
+insert into t (id,a) values (681,25);
+insert into t (id,a) values (681,26);
+insert into t (id,a) values (681,27);
+insert into t (id,a) values (681,28);
+insert into t (id,a) values (681,29);
+insert into t (id,a) values (681,30);
+insert into t (id,a) values (681,31);
+insert into t (id,a) values (681,32);
+insert into t (id,a) values (681,33);
+insert into t (id,a) values (681,34);
+insert into t (id,a) values (681,35);
+insert into t (id,a) values (681,36);
+insert into t (id,a) values (681,37);
+insert into t (id,a) values (681,38);
+insert into t (id,a) values (681,39);
+insert into t (id,a) values (681,40);
+insert into t (id,a) values (681,41);
+insert into t (id,a) values (681,42);
+insert into t (id,a) values (681,43);
+insert into t (id,a) values (681,44);
+insert into t (id,a) values (681,45);
+insert into t (id,a) values (681,46);
+insert into t (id,a) values (681,47);
+insert into t (id,a) values (681,48);
+insert into t (id,a) values (681,49);
+insert into t (id,a) values (681,50);
+insert into t (id,a) values (681,51);
+insert into t (id,a) values (681,52);
+insert into t (id,a) values (681,53);
+insert into t (id,a) values (681,54);
+insert into t (id,a) values (681,55);
+insert into t (id,a) values (681,56);
+insert into t (id,a) values (681,57);
+insert into t (id,a) values (681,58);
+insert into t (id,a) values (681,59);
+insert into t (id,a) values (681,60);
+insert into t (id,a) values (681,61);
+insert into t (id,a) values (681,62);
+insert into t (id,a) values (681,63);
+insert into t (id,a) values (681,64);
+insert into t (id,a) values (681,65);
+insert into t (id,a) values (681,66);
+insert into t (id,a) values (681,67);
+insert into t (id,a) values (681,68);
+insert into t (id,a) values (681,69);
+insert into t (id,a) values (681,70);
+insert into t (id,a) values (681,71);
+insert into t (id,a) values (681,72);
+insert into t (id,a) values (681,73);
+insert into t (id,a) values (681,74);
+insert into t (id,a) values (681,75);
+insert into t (id,a) values (681,76);
+insert into t (id,a) values (681,77);
+insert into t (id,a) values (681,78);
+insert into t (id,a) values (681,79);
+insert into t (id,a) values (681,80);
+insert into t (id,a) values (681,81);
+insert into t (id,a) values (681,82);
+insert into t (id,a) values (681,83);
+insert into t (id,a) values (681,84);
+insert into t (id,a) values (681,85);
+insert into t (id,a) values (681,86);
+insert into t (id,a) values (681,87);
+insert into t (id,a) values (681,88);
+insert into t (id,a) values (681,89);
+insert into t (id,a) values (681,90);
+insert into t (id,a) values (681,91);
+insert into t (id,a) values (681,92);
+insert into t (id,a) values (681,93);
+insert into t (id,a) values (681,94);
+insert into t (id,a) values (681,95);
+insert into t (id,a) values (681,96);
+insert into t (id,a) values (681,97);
+insert into t (id,a) values (681,98);
+insert into t (id,a) values (681,99);
+insert into t (id,a) values (682,0);
+insert into t (id,a) values (682,1);
+insert into t (id,a) values (682,2);
+insert into t (id,a) values (682,3);
+insert into t (id,a) values (682,4);
+insert into t (id,a) values (682,5);
+insert into t (id,a) values (682,6);
+insert into t (id,a) values (682,7);
+insert into t (id,a) values (682,8);
+insert into t (id,a) values (682,9);
+insert into t (id,a) values (682,10);
+insert into t (id,a) values (682,11);
+insert into t (id,a) values (682,12);
+insert into t (id,a) values (682,13);
+insert into t (id,a) values (682,14);
+insert into t (id,a) values (682,15);
+insert into t (id,a) values (682,16);
+insert into t (id,a) values (682,17);
+insert into t (id,a) values (682,18);
+insert into t (id,a) values (682,19);
+insert into t (id,a) values (682,20);
+insert into t (id,a) values (682,21);
+insert into t (id,a) values (682,22);
+insert into t (id,a) values (682,23);
+insert into t (id,a) values (682,24);
+insert into t (id,a) values (682,25);
+insert into t (id,a) values (682,26);
+insert into t (id,a) values (682,27);
+insert into t (id,a) values (682,28);
+insert into t (id,a) values (682,29);
+insert into t (id,a) values (682,30);
+insert into t (id,a) values (682,31);
+insert into t (id,a) values (682,32);
+insert into t (id,a) values (682,33);
+insert into t (id,a) values (682,34);
+insert into t (id,a) values (682,35);
+insert into t (id,a) values (682,36);
+insert into t (id,a) values (682,37);
+insert into t (id,a) values (682,38);
+insert into t (id,a) values (682,39);
+insert into t (id,a) values (682,40);
+insert into t (id,a) values (682,41);
+insert into t (id,a) values (682,42);
+insert into t (id,a) values (682,43);
+insert into t (id,a) values (682,44);
+insert into t (id,a) values (682,45);
+insert into t (id,a) values (682,46);
+insert into t (id,a) values (682,47);
+insert into t (id,a) values (682,48);
+insert into t (id,a) values (682,49);
+insert into t (id,a) values (682,50);
+insert into t (id,a) values (682,51);
+insert into t (id,a) values (682,52);
+insert into t (id,a) values (682,53);
+insert into t (id,a) values (682,54);
+insert into t (id,a) values (682,55);
+insert into t (id,a) values (682,56);
+insert into t (id,a) values (682,57);
+insert into t (id,a) values (682,58);
+insert into t (id,a) values (682,59);
+insert into t (id,a) values (682,60);
+insert into t (id,a) values (682,61);
+insert into t (id,a) values (682,62);
+insert into t (id,a) values (682,63);
+insert into t (id,a) values (682,64);
+insert into t (id,a) values (682,65);
+insert into t (id,a) values (682,66);
+insert into t (id,a) values (682,67);
+insert into t (id,a) values (682,68);
+insert into t (id,a) values (682,69);
+insert into t (id,a) values (682,70);
+insert into t (id,a) values (682,71);
+insert into t (id,a) values (682,72);
+insert into t (id,a) values (682,73);
+insert into t (id,a) values (682,74);
+insert into t (id,a) values (682,75);
+insert into t (id,a) values (682,76);
+insert into t (id,a) values (682,77);
+insert into t (id,a) values (682,78);
+insert into t (id,a) values (682,79);
+insert into t (id,a) values (682,80);
+insert into t (id,a) values (682,81);
+insert into t (id,a) values (682,82);
+insert into t (id,a) values (682,83);
+insert into t (id,a) values (682,84);
+insert into t (id,a) values (682,85);
+insert into t (id,a) values (682,86);
+insert into t (id,a) values (682,87);
+insert into t (id,a) values (682,88);
+insert into t (id,a) values (682,89);
+insert into t (id,a) values (682,90);
+insert into t (id,a) values (682,91);
+insert into t (id,a) values (682,92);
+insert into t (id,a) values (682,93);
+insert into t (id,a) values (682,94);
+insert into t (id,a) values (682,95);
+insert into t (id,a) values (682,96);
+insert into t (id,a) values (682,97);
+insert into t (id,a) values (682,98);
+insert into t (id,a) values (682,99);
+insert into t (id,a) values (683,0);
+insert into t (id,a) values (683,1);
+insert into t (id,a) values (683,2);
+insert into t (id,a) values (683,3);
+insert into t (id,a) values (683,4);
+insert into t (id,a) values (683,5);
+insert into t (id,a) values (683,6);
+insert into t (id,a) values (683,7);
+insert into t (id,a) values (683,8);
+insert into t (id,a) values (683,9);
+insert into t (id,a) values (683,10);
+insert into t (id,a) values (683,11);
+insert into t (id,a) values (683,12);
+insert into t (id,a) values (683,13);
+insert into t (id,a) values (683,14);
+insert into t (id,a) values (683,15);
+insert into t (id,a) values (683,16);
+insert into t (id,a) values (683,17);
+insert into t (id,a) values (683,18);
+insert into t (id,a) values (683,19);
+insert into t (id,a) values (683,20);
+insert into t (id,a) values (683,21);
+insert into t (id,a) values (683,22);
+insert into t (id,a) values (683,23);
+insert into t (id,a) values (683,24);
+insert into t (id,a) values (683,25);
+insert into t (id,a) values (683,26);
+insert into t (id,a) values (683,27);
+insert into t (id,a) values (683,28);
+insert into t (id,a) values (683,29);
+insert into t (id,a) values (683,30);
+insert into t (id,a) values (683,31);
+insert into t (id,a) values (683,32);
+insert into t (id,a) values (683,33);
+insert into t (id,a) values (683,34);
+insert into t (id,a) values (683,35);
+insert into t (id,a) values (683,36);
+insert into t (id,a) values (683,37);
+insert into t (id,a) values (683,38);
+insert into t (id,a) values (683,39);
+insert into t (id,a) values (683,40);
+insert into t (id,a) values (683,41);
+insert into t (id,a) values (683,42);
+insert into t (id,a) values (683,43);
+insert into t (id,a) values (683,44);
+insert into t (id,a) values (683,45);
+insert into t (id,a) values (683,46);
+insert into t (id,a) values (683,47);
+insert into t (id,a) values (683,48);
+insert into t (id,a) values (683,49);
+insert into t (id,a) values (683,50);
+insert into t (id,a) values (683,51);
+insert into t (id,a) values (683,52);
+insert into t (id,a) values (683,53);
+insert into t (id,a) values (683,54);
+insert into t (id,a) values (683,55);
+insert into t (id,a) values (683,56);
+insert into t (id,a) values (683,57);
+insert into t (id,a) values (683,58);
+insert into t (id,a) values (683,59);
+insert into t (id,a) values (683,60);
+insert into t (id,a) values (683,61);
+insert into t (id,a) values (683,62);
+insert into t (id,a) values (683,63);
+insert into t (id,a) values (683,64);
+insert into t (id,a) values (683,65);
+insert into t (id,a) values (683,66);
+insert into t (id,a) values (683,67);
+insert into t (id,a) values (683,68);
+insert into t (id,a) values (683,69);
+insert into t (id,a) values (683,70);
+insert into t (id,a) values (683,71);
+insert into t (id,a) values (683,72);
+insert into t (id,a) values (683,73);
+insert into t (id,a) values (683,74);
+insert into t (id,a) values (683,75);
+insert into t (id,a) values (683,76);
+insert into t (id,a) values (683,77);
+insert into t (id,a) values (683,78);
+insert into t (id,a) values (683,79);
+insert into t (id,a) values (683,80);
+insert into t (id,a) values (683,81);
+insert into t (id,a) values (683,82);
+insert into t (id,a) values (683,83);
+insert into t (id,a) values (683,84);
+insert into t (id,a) values (683,85);
+insert into t (id,a) values (683,86);
+insert into t (id,a) values (683,87);
+insert into t (id,a) values (683,88);
+insert into t (id,a) values (683,89);
+insert into t (id,a) values (683,90);
+insert into t (id,a) values (683,91);
+insert into t (id,a) values (683,92);
+insert into t (id,a) values (683,93);
+insert into t (id,a) values (683,94);
+insert into t (id,a) values (683,95);
+insert into t (id,a) values (683,96);
+insert into t (id,a) values (683,97);
+insert into t (id,a) values (683,98);
+insert into t (id,a) values (683,99);
+insert into t (id,a) values (684,0);
+insert into t (id,a) values (684,1);
+insert into t (id,a) values (684,2);
+insert into t (id,a) values (684,3);
+insert into t (id,a) values (684,4);
+insert into t (id,a) values (684,5);
+insert into t (id,a) values (684,6);
+insert into t (id,a) values (684,7);
+insert into t (id,a) values (684,8);
+insert into t (id,a) values (684,9);
+insert into t (id,a) values (684,10);
+insert into t (id,a) values (684,11);
+insert into t (id,a) values (684,12);
+insert into t (id,a) values (684,13);
+insert into t (id,a) values (684,14);
+insert into t (id,a) values (684,15);
+insert into t (id,a) values (684,16);
+insert into t (id,a) values (684,17);
+insert into t (id,a) values (684,18);
+insert into t (id,a) values (684,19);
+insert into t (id,a) values (684,20);
+insert into t (id,a) values (684,21);
+insert into t (id,a) values (684,22);
+insert into t (id,a) values (684,23);
+insert into t (id,a) values (684,24);
+insert into t (id,a) values (684,25);
+insert into t (id,a) values (684,26);
+insert into t (id,a) values (684,27);
+insert into t (id,a) values (684,28);
+insert into t (id,a) values (684,29);
+insert into t (id,a) values (684,30);
+insert into t (id,a) values (684,31);
+insert into t (id,a) values (684,32);
+insert into t (id,a) values (684,33);
+insert into t (id,a) values (684,34);
+insert into t (id,a) values (684,35);
+insert into t (id,a) values (684,36);
+insert into t (id,a) values (684,37);
+insert into t (id,a) values (684,38);
+insert into t (id,a) values (684,39);
+insert into t (id,a) values (684,40);
+insert into t (id,a) values (684,41);
+insert into t (id,a) values (684,42);
+insert into t (id,a) values (684,43);
+insert into t (id,a) values (684,44);
+insert into t (id,a) values (684,45);
+insert into t (id,a) values (684,46);
+insert into t (id,a) values (684,47);
+insert into t (id,a) values (684,48);
+insert into t (id,a) values (684,49);
+insert into t (id,a) values (684,50);
+insert into t (id,a) values (684,51);
+insert into t (id,a) values (684,52);
+insert into t (id,a) values (684,53);
+insert into t (id,a) values (684,54);
+insert into t (id,a) values (684,55);
+insert into t (id,a) values (684,56);
+insert into t (id,a) values (684,57);
+insert into t (id,a) values (684,58);
+insert into t (id,a) values (684,59);
+insert into t (id,a) values (684,60);
+insert into t (id,a) values (684,61);
+insert into t (id,a) values (684,62);
+insert into t (id,a) values (684,63);
+insert into t (id,a) values (684,64);
+insert into t (id,a) values (684,65);
+insert into t (id,a) values (684,66);
+insert into t (id,a) values (684,67);
+insert into t (id,a) values (684,68);
+insert into t (id,a) values (684,69);
+insert into t (id,a) values (684,70);
+insert into t (id,a) values (684,71);
+insert into t (id,a) values (684,72);
+insert into t (id,a) values (684,73);
+insert into t (id,a) values (684,74);
+insert into t (id,a) values (684,75);
+insert into t (id,a) values (684,76);
+insert into t (id,a) values (684,77);
+insert into t (id,a) values (684,78);
+insert into t (id,a) values (684,79);
+insert into t (id,a) values (684,80);
+insert into t (id,a) values (684,81);
+insert into t (id,a) values (684,82);
+insert into t (id,a) values (684,83);
+insert into t (id,a) values (684,84);
+insert into t (id,a) values (684,85);
+insert into t (id,a) values (684,86);
+insert into t (id,a) values (684,87);
+insert into t (id,a) values (684,88);
+insert into t (id,a) values (684,89);
+insert into t (id,a) values (684,90);
+insert into t (id,a) values (684,91);
+insert into t (id,a) values (684,92);
+insert into t (id,a) values (684,93);
+insert into t (id,a) values (684,94);
+insert into t (id,a) values (684,95);
+insert into t (id,a) values (684,96);
+insert into t (id,a) values (684,97);
+insert into t (id,a) values (684,98);
+insert into t (id,a) values (684,99);
+insert into t (id,a) values (685,0);
+insert into t (id,a) values (685,1);
+insert into t (id,a) values (685,2);
+insert into t (id,a) values (685,3);
+insert into t (id,a) values (685,4);
+insert into t (id,a) values (685,5);
+insert into t (id,a) values (685,6);
+insert into t (id,a) values (685,7);
+insert into t (id,a) values (685,8);
+insert into t (id,a) values (685,9);
+insert into t (id,a) values (685,10);
+insert into t (id,a) values (685,11);
+insert into t (id,a) values (685,12);
+insert into t (id,a) values (685,13);
+insert into t (id,a) values (685,14);
+insert into t (id,a) values (685,15);
+insert into t (id,a) values (685,16);
+insert into t (id,a) values (685,17);
+insert into t (id,a) values (685,18);
+insert into t (id,a) values (685,19);
+insert into t (id,a) values (685,20);
+insert into t (id,a) values (685,21);
+insert into t (id,a) values (685,22);
+insert into t (id,a) values (685,23);
+insert into t (id,a) values (685,24);
+insert into t (id,a) values (685,25);
+insert into t (id,a) values (685,26);
+insert into t (id,a) values (685,27);
+insert into t (id,a) values (685,28);
+insert into t (id,a) values (685,29);
+insert into t (id,a) values (685,30);
+insert into t (id,a) values (685,31);
+insert into t (id,a) values (685,32);
+insert into t (id,a) values (685,33);
+insert into t (id,a) values (685,34);
+insert into t (id,a) values (685,35);
+insert into t (id,a) values (685,36);
+insert into t (id,a) values (685,37);
+insert into t (id,a) values (685,38);
+insert into t (id,a) values (685,39);
+insert into t (id,a) values (685,40);
+insert into t (id,a) values (685,41);
+insert into t (id,a) values (685,42);
+insert into t (id,a) values (685,43);
+insert into t (id,a) values (685,44);
+insert into t (id,a) values (685,45);
+insert into t (id,a) values (685,46);
+insert into t (id,a) values (685,47);
+insert into t (id,a) values (685,48);
+insert into t (id,a) values (685,49);
+insert into t (id,a) values (685,50);
+insert into t (id,a) values (685,51);
+insert into t (id,a) values (685,52);
+insert into t (id,a) values (685,53);
+insert into t (id,a) values (685,54);
+insert into t (id,a) values (685,55);
+insert into t (id,a) values (685,56);
+insert into t (id,a) values (685,57);
+insert into t (id,a) values (685,58);
+insert into t (id,a) values (685,59);
+insert into t (id,a) values (685,60);
+insert into t (id,a) values (685,61);
+insert into t (id,a) values (685,62);
+insert into t (id,a) values (685,63);
+insert into t (id,a) values (685,64);
+insert into t (id,a) values (685,65);
+insert into t (id,a) values (685,66);
+insert into t (id,a) values (685,67);
+insert into t (id,a) values (685,68);
+insert into t (id,a) values (685,69);
+insert into t (id,a) values (685,70);
+insert into t (id,a) values (685,71);
+insert into t (id,a) values (685,72);
+insert into t (id,a) values (685,73);
+insert into t (id,a) values (685,74);
+insert into t (id,a) values (685,75);
+insert into t (id,a) values (685,76);
+insert into t (id,a) values (685,77);
+insert into t (id,a) values (685,78);
+insert into t (id,a) values (685,79);
+insert into t (id,a) values (685,80);
+insert into t (id,a) values (685,81);
+insert into t (id,a) values (685,82);
+insert into t (id,a) values (685,83);
+insert into t (id,a) values (685,84);
+insert into t (id,a) values (685,85);
+insert into t (id,a) values (685,86);
+insert into t (id,a) values (685,87);
+insert into t (id,a) values (685,88);
+insert into t (id,a) values (685,89);
+insert into t (id,a) values (685,90);
+insert into t (id,a) values (685,91);
+insert into t (id,a) values (685,92);
+insert into t (id,a) values (685,93);
+insert into t (id,a) values (685,94);
+insert into t (id,a) values (685,95);
+insert into t (id,a) values (685,96);
+insert into t (id,a) values (685,97);
+insert into t (id,a) values (685,98);
+insert into t (id,a) values (685,99);
+insert into t (id,a) values (686,0);
+insert into t (id,a) values (686,1);
+insert into t (id,a) values (686,2);
+insert into t (id,a) values (686,3);
+insert into t (id,a) values (686,4);
+insert into t (id,a) values (686,5);
+insert into t (id,a) values (686,6);
+insert into t (id,a) values (686,7);
+insert into t (id,a) values (686,8);
+insert into t (id,a) values (686,9);
+insert into t (id,a) values (686,10);
+insert into t (id,a) values (686,11);
+insert into t (id,a) values (686,12);
+insert into t (id,a) values (686,13);
+insert into t (id,a) values (686,14);
+insert into t (id,a) values (686,15);
+insert into t (id,a) values (686,16);
+insert into t (id,a) values (686,17);
+insert into t (id,a) values (686,18);
+insert into t (id,a) values (686,19);
+insert into t (id,a) values (686,20);
+insert into t (id,a) values (686,21);
+insert into t (id,a) values (686,22);
+insert into t (id,a) values (686,23);
+insert into t (id,a) values (686,24);
+insert into t (id,a) values (686,25);
+insert into t (id,a) values (686,26);
+insert into t (id,a) values (686,27);
+insert into t (id,a) values (686,28);
+insert into t (id,a) values (686,29);
+insert into t (id,a) values (686,30);
+insert into t (id,a) values (686,31);
+insert into t (id,a) values (686,32);
+insert into t (id,a) values (686,33);
+insert into t (id,a) values (686,34);
+insert into t (id,a) values (686,35);
+insert into t (id,a) values (686,36);
+insert into t (id,a) values (686,37);
+insert into t (id,a) values (686,38);
+insert into t (id,a) values (686,39);
+insert into t (id,a) values (686,40);
+insert into t (id,a) values (686,41);
+insert into t (id,a) values (686,42);
+insert into t (id,a) values (686,43);
+insert into t (id,a) values (686,44);
+insert into t (id,a) values (686,45);
+insert into t (id,a) values (686,46);
+insert into t (id,a) values (686,47);
+insert into t (id,a) values (686,48);
+insert into t (id,a) values (686,49);
+insert into t (id,a) values (686,50);
+insert into t (id,a) values (686,51);
+insert into t (id,a) values (686,52);
+insert into t (id,a) values (686,53);
+insert into t (id,a) values (686,54);
+insert into t (id,a) values (686,55);
+insert into t (id,a) values (686,56);
+insert into t (id,a) values (686,57);
+insert into t (id,a) values (686,58);
+insert into t (id,a) values (686,59);
+insert into t (id,a) values (686,60);
+insert into t (id,a) values (686,61);
+insert into t (id,a) values (686,62);
+insert into t (id,a) values (686,63);
+insert into t (id,a) values (686,64);
+insert into t (id,a) values (686,65);
+insert into t (id,a) values (686,66);
+insert into t (id,a) values (686,67);
+insert into t (id,a) values (686,68);
+insert into t (id,a) values (686,69);
+insert into t (id,a) values (686,70);
+insert into t (id,a) values (686,71);
+insert into t (id,a) values (686,72);
+insert into t (id,a) values (686,73);
+insert into t (id,a) values (686,74);
+insert into t (id,a) values (686,75);
+insert into t (id,a) values (686,76);
+insert into t (id,a) values (686,77);
+insert into t (id,a) values (686,78);
+insert into t (id,a) values (686,79);
+insert into t (id,a) values (686,80);
+insert into t (id,a) values (686,81);
+insert into t (id,a) values (686,82);
+insert into t (id,a) values (686,83);
+insert into t (id,a) values (686,84);
+insert into t (id,a) values (686,85);
+insert into t (id,a) values (686,86);
+insert into t (id,a) values (686,87);
+insert into t (id,a) values (686,88);
+insert into t (id,a) values (686,89);
+insert into t (id,a) values (686,90);
+insert into t (id,a) values (686,91);
+insert into t (id,a) values (686,92);
+insert into t (id,a) values (686,93);
+insert into t (id,a) values (686,94);
+insert into t (id,a) values (686,95);
+insert into t (id,a) values (686,96);
+insert into t (id,a) values (686,97);
+insert into t (id,a) values (686,98);
+insert into t (id,a) values (686,99);
+insert into t (id,a) values (687,0);
+insert into t (id,a) values (687,1);
+insert into t (id,a) values (687,2);
+insert into t (id,a) values (687,3);
+insert into t (id,a) values (687,4);
+insert into t (id,a) values (687,5);
+insert into t (id,a) values (687,6);
+insert into t (id,a) values (687,7);
+insert into t (id,a) values (687,8);
+insert into t (id,a) values (687,9);
+insert into t (id,a) values (687,10);
+insert into t (id,a) values (687,11);
+insert into t (id,a) values (687,12);
+insert into t (id,a) values (687,13);
+insert into t (id,a) values (687,14);
+insert into t (id,a) values (687,15);
+insert into t (id,a) values (687,16);
+insert into t (id,a) values (687,17);
+insert into t (id,a) values (687,18);
+insert into t (id,a) values (687,19);
+insert into t (id,a) values (687,20);
+insert into t (id,a) values (687,21);
+insert into t (id,a) values (687,22);
+insert into t (id,a) values (687,23);
+insert into t (id,a) values (687,24);
+insert into t (id,a) values (687,25);
+insert into t (id,a) values (687,26);
+insert into t (id,a) values (687,27);
+insert into t (id,a) values (687,28);
+insert into t (id,a) values (687,29);
+insert into t (id,a) values (687,30);
+insert into t (id,a) values (687,31);
+insert into t (id,a) values (687,32);
+insert into t (id,a) values (687,33);
+insert into t (id,a) values (687,34);
+insert into t (id,a) values (687,35);
+insert into t (id,a) values (687,36);
+insert into t (id,a) values (687,37);
+insert into t (id,a) values (687,38);
+insert into t (id,a) values (687,39);
+insert into t (id,a) values (687,40);
+insert into t (id,a) values (687,41);
+insert into t (id,a) values (687,42);
+insert into t (id,a) values (687,43);
+insert into t (id,a) values (687,44);
+insert into t (id,a) values (687,45);
+insert into t (id,a) values (687,46);
+insert into t (id,a) values (687,47);
+insert into t (id,a) values (687,48);
+insert into t (id,a) values (687,49);
+insert into t (id,a) values (687,50);
+insert into t (id,a) values (687,51);
+insert into t (id,a) values (687,52);
+insert into t (id,a) values (687,53);
+insert into t (id,a) values (687,54);
+insert into t (id,a) values (687,55);
+insert into t (id,a) values (687,56);
+insert into t (id,a) values (687,57);
+insert into t (id,a) values (687,58);
+insert into t (id,a) values (687,59);
+insert into t (id,a) values (687,60);
+insert into t (id,a) values (687,61);
+insert into t (id,a) values (687,62);
+insert into t (id,a) values (687,63);
+insert into t (id,a) values (687,64);
+insert into t (id,a) values (687,65);
+insert into t (id,a) values (687,66);
+insert into t (id,a) values (687,67);
+insert into t (id,a) values (687,68);
+insert into t (id,a) values (687,69);
+insert into t (id,a) values (687,70);
+insert into t (id,a) values (687,71);
+insert into t (id,a) values (687,72);
+insert into t (id,a) values (687,73);
+insert into t (id,a) values (687,74);
+insert into t (id,a) values (687,75);
+insert into t (id,a) values (687,76);
+insert into t (id,a) values (687,77);
+insert into t (id,a) values (687,78);
+insert into t (id,a) values (687,79);
+insert into t (id,a) values (687,80);
+insert into t (id,a) values (687,81);
+insert into t (id,a) values (687,82);
+insert into t (id,a) values (687,83);
+insert into t (id,a) values (687,84);
+insert into t (id,a) values (687,85);
+insert into t (id,a) values (687,86);
+insert into t (id,a) values (687,87);
+insert into t (id,a) values (687,88);
+insert into t (id,a) values (687,89);
+insert into t (id,a) values (687,90);
+insert into t (id,a) values (687,91);
+insert into t (id,a) values (687,92);
+insert into t (id,a) values (687,93);
+insert into t (id,a) values (687,94);
+insert into t (id,a) values (687,95);
+insert into t (id,a) values (687,96);
+insert into t (id,a) values (687,97);
+insert into t (id,a) values (687,98);
+insert into t (id,a) values (687,99);
+insert into t (id,a) values (688,0);
+insert into t (id,a) values (688,1);
+insert into t (id,a) values (688,2);
+insert into t (id,a) values (688,3);
+insert into t (id,a) values (688,4);
+insert into t (id,a) values (688,5);
+insert into t (id,a) values (688,6);
+insert into t (id,a) values (688,7);
+insert into t (id,a) values (688,8);
+insert into t (id,a) values (688,9);
+insert into t (id,a) values (688,10);
+insert into t (id,a) values (688,11);
+insert into t (id,a) values (688,12);
+insert into t (id,a) values (688,13);
+insert into t (id,a) values (688,14);
+insert into t (id,a) values (688,15);
+insert into t (id,a) values (688,16);
+insert into t (id,a) values (688,17);
+insert into t (id,a) values (688,18);
+insert into t (id,a) values (688,19);
+insert into t (id,a) values (688,20);
+insert into t (id,a) values (688,21);
+insert into t (id,a) values (688,22);
+insert into t (id,a) values (688,23);
+insert into t (id,a) values (688,24);
+insert into t (id,a) values (688,25);
+insert into t (id,a) values (688,26);
+insert into t (id,a) values (688,27);
+insert into t (id,a) values (688,28);
+insert into t (id,a) values (688,29);
+insert into t (id,a) values (688,30);
+insert into t (id,a) values (688,31);
+insert into t (id,a) values (688,32);
+insert into t (id,a) values (688,33);
+insert into t (id,a) values (688,34);
+insert into t (id,a) values (688,35);
+insert into t (id,a) values (688,36);
+insert into t (id,a) values (688,37);
+insert into t (id,a) values (688,38);
+insert into t (id,a) values (688,39);
+insert into t (id,a) values (688,40);
+insert into t (id,a) values (688,41);
+insert into t (id,a) values (688,42);
+insert into t (id,a) values (688,43);
+insert into t (id,a) values (688,44);
+insert into t (id,a) values (688,45);
+insert into t (id,a) values (688,46);
+insert into t (id,a) values (688,47);
+insert into t (id,a) values (688,48);
+insert into t (id,a) values (688,49);
+insert into t (id,a) values (688,50);
+insert into t (id,a) values (688,51);
+insert into t (id,a) values (688,52);
+insert into t (id,a) values (688,53);
+insert into t (id,a) values (688,54);
+insert into t (id,a) values (688,55);
+insert into t (id,a) values (688,56);
+insert into t (id,a) values (688,57);
+insert into t (id,a) values (688,58);
+insert into t (id,a) values (688,59);
+insert into t (id,a) values (688,60);
+insert into t (id,a) values (688,61);
+insert into t (id,a) values (688,62);
+insert into t (id,a) values (688,63);
+insert into t (id,a) values (688,64);
+insert into t (id,a) values (688,65);
+insert into t (id,a) values (688,66);
+insert into t (id,a) values (688,67);
+insert into t (id,a) values (688,68);
+insert into t (id,a) values (688,69);
+insert into t (id,a) values (688,70);
+insert into t (id,a) values (688,71);
+insert into t (id,a) values (688,72);
+insert into t (id,a) values (688,73);
+insert into t (id,a) values (688,74);
+insert into t (id,a) values (688,75);
+insert into t (id,a) values (688,76);
+insert into t (id,a) values (688,77);
+insert into t (id,a) values (688,78);
+insert into t (id,a) values (688,79);
+insert into t (id,a) values (688,80);
+insert into t (id,a) values (688,81);
+insert into t (id,a) values (688,82);
+insert into t (id,a) values (688,83);
+insert into t (id,a) values (688,84);
+insert into t (id,a) values (688,85);
+insert into t (id,a) values (688,86);
+insert into t (id,a) values (688,87);
+insert into t (id,a) values (688,88);
+insert into t (id,a) values (688,89);
+insert into t (id,a) values (688,90);
+insert into t (id,a) values (688,91);
+insert into t (id,a) values (688,92);
+insert into t (id,a) values (688,93);
+insert into t (id,a) values (688,94);
+insert into t (id,a) values (688,95);
+insert into t (id,a) values (688,96);
+insert into t (id,a) values (688,97);
+insert into t (id,a) values (688,98);
+insert into t (id,a) values (688,99);
+insert into t (id,a) values (689,0);
+insert into t (id,a) values (689,1);
+insert into t (id,a) values (689,2);
+insert into t (id,a) values (689,3);
+insert into t (id,a) values (689,4);
+insert into t (id,a) values (689,5);
+insert into t (id,a) values (689,6);
+insert into t (id,a) values (689,7);
+insert into t (id,a) values (689,8);
+insert into t (id,a) values (689,9);
+insert into t (id,a) values (689,10);
+insert into t (id,a) values (689,11);
+insert into t (id,a) values (689,12);
+insert into t (id,a) values (689,13);
+insert into t (id,a) values (689,14);
+insert into t (id,a) values (689,15);
+insert into t (id,a) values (689,16);
+insert into t (id,a) values (689,17);
+insert into t (id,a) values (689,18);
+insert into t (id,a) values (689,19);
+insert into t (id,a) values (689,20);
+insert into t (id,a) values (689,21);
+insert into t (id,a) values (689,22);
+insert into t (id,a) values (689,23);
+insert into t (id,a) values (689,24);
+insert into t (id,a) values (689,25);
+insert into t (id,a) values (689,26);
+insert into t (id,a) values (689,27);
+insert into t (id,a) values (689,28);
+insert into t (id,a) values (689,29);
+insert into t (id,a) values (689,30);
+insert into t (id,a) values (689,31);
+insert into t (id,a) values (689,32);
+insert into t (id,a) values (689,33);
+insert into t (id,a) values (689,34);
+insert into t (id,a) values (689,35);
+insert into t (id,a) values (689,36);
+insert into t (id,a) values (689,37);
+insert into t (id,a) values (689,38);
+insert into t (id,a) values (689,39);
+insert into t (id,a) values (689,40);
+insert into t (id,a) values (689,41);
+insert into t (id,a) values (689,42);
+insert into t (id,a) values (689,43);
+insert into t (id,a) values (689,44);
+insert into t (id,a) values (689,45);
+insert into t (id,a) values (689,46);
+insert into t (id,a) values (689,47);
+insert into t (id,a) values (689,48);
+insert into t (id,a) values (689,49);
+insert into t (id,a) values (689,50);
+insert into t (id,a) values (689,51);
+insert into t (id,a) values (689,52);
+insert into t (id,a) values (689,53);
+insert into t (id,a) values (689,54);
+insert into t (id,a) values (689,55);
+insert into t (id,a) values (689,56);
+insert into t (id,a) values (689,57);
+insert into t (id,a) values (689,58);
+insert into t (id,a) values (689,59);
+insert into t (id,a) values (689,60);
+insert into t (id,a) values (689,61);
+insert into t (id,a) values (689,62);
+insert into t (id,a) values (689,63);
+insert into t (id,a) values (689,64);
+insert into t (id,a) values (689,65);
+insert into t (id,a) values (689,66);
+insert into t (id,a) values (689,67);
+insert into t (id,a) values (689,68);
+insert into t (id,a) values (689,69);
+insert into t (id,a) values (689,70);
+insert into t (id,a) values (689,71);
+insert into t (id,a) values (689,72);
+insert into t (id,a) values (689,73);
+insert into t (id,a) values (689,74);
+insert into t (id,a) values (689,75);
+insert into t (id,a) values (689,76);
+insert into t (id,a) values (689,77);
+insert into t (id,a) values (689,78);
+insert into t (id,a) values (689,79);
+insert into t (id,a) values (689,80);
+insert into t (id,a) values (689,81);
+insert into t (id,a) values (689,82);
+insert into t (id,a) values (689,83);
+insert into t (id,a) values (689,84);
+insert into t (id,a) values (689,85);
+insert into t (id,a) values (689,86);
+insert into t (id,a) values (689,87);
+insert into t (id,a) values (689,88);
+insert into t (id,a) values (689,89);
+insert into t (id,a) values (689,90);
+insert into t (id,a) values (689,91);
+insert into t (id,a) values (689,92);
+insert into t (id,a) values (689,93);
+insert into t (id,a) values (689,94);
+insert into t (id,a) values (689,95);
+insert into t (id,a) values (689,96);
+insert into t (id,a) values (689,97);
+insert into t (id,a) values (689,98);
+insert into t (id,a) values (689,99);
+insert into t (id,a) values (690,0);
+insert into t (id,a) values (690,1);
+insert into t (id,a) values (690,2);
+insert into t (id,a) values (690,3);
+insert into t (id,a) values (690,4);
+insert into t (id,a) values (690,5);
+insert into t (id,a) values (690,6);
+insert into t (id,a) values (690,7);
+insert into t (id,a) values (690,8);
+insert into t (id,a) values (690,9);
+insert into t (id,a) values (690,10);
+insert into t (id,a) values (690,11);
+insert into t (id,a) values (690,12);
+insert into t (id,a) values (690,13);
+insert into t (id,a) values (690,14);
+insert into t (id,a) values (690,15);
+insert into t (id,a) values (690,16);
+insert into t (id,a) values (690,17);
+insert into t (id,a) values (690,18);
+insert into t (id,a) values (690,19);
+insert into t (id,a) values (690,20);
+insert into t (id,a) values (690,21);
+insert into t (id,a) values (690,22);
+insert into t (id,a) values (690,23);
+insert into t (id,a) values (690,24);
+insert into t (id,a) values (690,25);
+insert into t (id,a) values (690,26);
+insert into t (id,a) values (690,27);
+insert into t (id,a) values (690,28);
+insert into t (id,a) values (690,29);
+insert into t (id,a) values (690,30);
+insert into t (id,a) values (690,31);
+insert into t (id,a) values (690,32);
+insert into t (id,a) values (690,33);
+insert into t (id,a) values (690,34);
+insert into t (id,a) values (690,35);
+insert into t (id,a) values (690,36);
+insert into t (id,a) values (690,37);
+insert into t (id,a) values (690,38);
+insert into t (id,a) values (690,39);
+insert into t (id,a) values (690,40);
+insert into t (id,a) values (690,41);
+insert into t (id,a) values (690,42);
+insert into t (id,a) values (690,43);
+insert into t (id,a) values (690,44);
+insert into t (id,a) values (690,45);
+insert into t (id,a) values (690,46);
+insert into t (id,a) values (690,47);
+insert into t (id,a) values (690,48);
+insert into t (id,a) values (690,49);
+insert into t (id,a) values (690,50);
+insert into t (id,a) values (690,51);
+insert into t (id,a) values (690,52);
+insert into t (id,a) values (690,53);
+insert into t (id,a) values (690,54);
+insert into t (id,a) values (690,55);
+insert into t (id,a) values (690,56);
+insert into t (id,a) values (690,57);
+insert into t (id,a) values (690,58);
+insert into t (id,a) values (690,59);
+insert into t (id,a) values (690,60);
+insert into t (id,a) values (690,61);
+insert into t (id,a) values (690,62);
+insert into t (id,a) values (690,63);
+insert into t (id,a) values (690,64);
+insert into t (id,a) values (690,65);
+insert into t (id,a) values (690,66);
+insert into t (id,a) values (690,67);
+insert into t (id,a) values (690,68);
+insert into t (id,a) values (690,69);
+insert into t (id,a) values (690,70);
+insert into t (id,a) values (690,71);
+insert into t (id,a) values (690,72);
+insert into t (id,a) values (690,73);
+insert into t (id,a) values (690,74);
+insert into t (id,a) values (690,75);
+insert into t (id,a) values (690,76);
+insert into t (id,a) values (690,77);
+insert into t (id,a) values (690,78);
+insert into t (id,a) values (690,79);
+insert into t (id,a) values (690,80);
+insert into t (id,a) values (690,81);
+insert into t (id,a) values (690,82);
+insert into t (id,a) values (690,83);
+insert into t (id,a) values (690,84);
+insert into t (id,a) values (690,85);
+insert into t (id,a) values (690,86);
+insert into t (id,a) values (690,87);
+insert into t (id,a) values (690,88);
+insert into t (id,a) values (690,89);
+insert into t (id,a) values (690,90);
+insert into t (id,a) values (690,91);
+insert into t (id,a) values (690,92);
+insert into t (id,a) values (690,93);
+insert into t (id,a) values (690,94);
+insert into t (id,a) values (690,95);
+insert into t (id,a) values (690,96);
+insert into t (id,a) values (690,97);
+insert into t (id,a) values (690,98);
+insert into t (id,a) values (690,99);
+insert into t (id,a) values (691,0);
+insert into t (id,a) values (691,1);
+insert into t (id,a) values (691,2);
+insert into t (id,a) values (691,3);
+insert into t (id,a) values (691,4);
+insert into t (id,a) values (691,5);
+insert into t (id,a) values (691,6);
+insert into t (id,a) values (691,7);
+insert into t (id,a) values (691,8);
+insert into t (id,a) values (691,9);
+insert into t (id,a) values (691,10);
+insert into t (id,a) values (691,11);
+insert into t (id,a) values (691,12);
+insert into t (id,a) values (691,13);
+insert into t (id,a) values (691,14);
+insert into t (id,a) values (691,15);
+insert into t (id,a) values (691,16);
+insert into t (id,a) values (691,17);
+insert into t (id,a) values (691,18);
+insert into t (id,a) values (691,19);
+insert into t (id,a) values (691,20);
+insert into t (id,a) values (691,21);
+insert into t (id,a) values (691,22);
+insert into t (id,a) values (691,23);
+insert into t (id,a) values (691,24);
+insert into t (id,a) values (691,25);
+insert into t (id,a) values (691,26);
+insert into t (id,a) values (691,27);
+insert into t (id,a) values (691,28);
+insert into t (id,a) values (691,29);
+insert into t (id,a) values (691,30);
+insert into t (id,a) values (691,31);
+insert into t (id,a) values (691,32);
+insert into t (id,a) values (691,33);
+insert into t (id,a) values (691,34);
+insert into t (id,a) values (691,35);
+insert into t (id,a) values (691,36);
+insert into t (id,a) values (691,37);
+insert into t (id,a) values (691,38);
+insert into t (id,a) values (691,39);
+insert into t (id,a) values (691,40);
+insert into t (id,a) values (691,41);
+insert into t (id,a) values (691,42);
+insert into t (id,a) values (691,43);
+insert into t (id,a) values (691,44);
+insert into t (id,a) values (691,45);
+insert into t (id,a) values (691,46);
+insert into t (id,a) values (691,47);
+insert into t (id,a) values (691,48);
+insert into t (id,a) values (691,49);
+insert into t (id,a) values (691,50);
+insert into t (id,a) values (691,51);
+insert into t (id,a) values (691,52);
+insert into t (id,a) values (691,53);
+insert into t (id,a) values (691,54);
+insert into t (id,a) values (691,55);
+insert into t (id,a) values (691,56);
+insert into t (id,a) values (691,57);
+insert into t (id,a) values (691,58);
+insert into t (id,a) values (691,59);
+insert into t (id,a) values (691,60);
+insert into t (id,a) values (691,61);
+insert into t (id,a) values (691,62);
+insert into t (id,a) values (691,63);
+insert into t (id,a) values (691,64);
+insert into t (id,a) values (691,65);
+insert into t (id,a) values (691,66);
+insert into t (id,a) values (691,67);
+insert into t (id,a) values (691,68);
+insert into t (id,a) values (691,69);
+insert into t (id,a) values (691,70);
+insert into t (id,a) values (691,71);
+insert into t (id,a) values (691,72);
+insert into t (id,a) values (691,73);
+insert into t (id,a) values (691,74);
+insert into t (id,a) values (691,75);
+insert into t (id,a) values (691,76);
+insert into t (id,a) values (691,77);
+insert into t (id,a) values (691,78);
+insert into t (id,a) values (691,79);
+insert into t (id,a) values (691,80);
+insert into t (id,a) values (691,81);
+insert into t (id,a) values (691,82);
+insert into t (id,a) values (691,83);
+insert into t (id,a) values (691,84);
+insert into t (id,a) values (691,85);
+insert into t (id,a) values (691,86);
+insert into t (id,a) values (691,87);
+insert into t (id,a) values (691,88);
+insert into t (id,a) values (691,89);
+insert into t (id,a) values (691,90);
+insert into t (id,a) values (691,91);
+insert into t (id,a) values (691,92);
+insert into t (id,a) values (691,93);
+insert into t (id,a) values (691,94);
+insert into t (id,a) values (691,95);
+insert into t (id,a) values (691,96);
+insert into t (id,a) values (691,97);
+insert into t (id,a) values (691,98);
+insert into t (id,a) values (691,99);
+insert into t (id,a) values (692,0);
+insert into t (id,a) values (692,1);
+insert into t (id,a) values (692,2);
+insert into t (id,a) values (692,3);
+insert into t (id,a) values (692,4);
+insert into t (id,a) values (692,5);
+insert into t (id,a) values (692,6);
+insert into t (id,a) values (692,7);
+insert into t (id,a) values (692,8);
+insert into t (id,a) values (692,9);
+insert into t (id,a) values (692,10);
+insert into t (id,a) values (692,11);
+insert into t (id,a) values (692,12);
+insert into t (id,a) values (692,13);
+insert into t (id,a) values (692,14);
+insert into t (id,a) values (692,15);
+insert into t (id,a) values (692,16);
+insert into t (id,a) values (692,17);
+insert into t (id,a) values (692,18);
+insert into t (id,a) values (692,19);
+insert into t (id,a) values (692,20);
+insert into t (id,a) values (692,21);
+insert into t (id,a) values (692,22);
+insert into t (id,a) values (692,23);
+insert into t (id,a) values (692,24);
+insert into t (id,a) values (692,25);
+insert into t (id,a) values (692,26);
+insert into t (id,a) values (692,27);
+insert into t (id,a) values (692,28);
+insert into t (id,a) values (692,29);
+insert into t (id,a) values (692,30);
+insert into t (id,a) values (692,31);
+insert into t (id,a) values (692,32);
+insert into t (id,a) values (692,33);
+insert into t (id,a) values (692,34);
+insert into t (id,a) values (692,35);
+insert into t (id,a) values (692,36);
+insert into t (id,a) values (692,37);
+insert into t (id,a) values (692,38);
+insert into t (id,a) values (692,39);
+insert into t (id,a) values (692,40);
+insert into t (id,a) values (692,41);
+insert into t (id,a) values (692,42);
+insert into t (id,a) values (692,43);
+insert into t (id,a) values (692,44);
+insert into t (id,a) values (692,45);
+insert into t (id,a) values (692,46);
+insert into t (id,a) values (692,47);
+insert into t (id,a) values (692,48);
+insert into t (id,a) values (692,49);
+insert into t (id,a) values (692,50);
+insert into t (id,a) values (692,51);
+insert into t (id,a) values (692,52);
+insert into t (id,a) values (692,53);
+insert into t (id,a) values (692,54);
+insert into t (id,a) values (692,55);
+insert into t (id,a) values (692,56);
+insert into t (id,a) values (692,57);
+insert into t (id,a) values (692,58);
+insert into t (id,a) values (692,59);
+insert into t (id,a) values (692,60);
+insert into t (id,a) values (692,61);
+insert into t (id,a) values (692,62);
+insert into t (id,a) values (692,63);
+insert into t (id,a) values (692,64);
+insert into t (id,a) values (692,65);
+insert into t (id,a) values (692,66);
+insert into t (id,a) values (692,67);
+insert into t (id,a) values (692,68);
+insert into t (id,a) values (692,69);
+insert into t (id,a) values (692,70);
+insert into t (id,a) values (692,71);
+insert into t (id,a) values (692,72);
+insert into t (id,a) values (692,73);
+insert into t (id,a) values (692,74);
+insert into t (id,a) values (692,75);
+insert into t (id,a) values (692,76);
+insert into t (id,a) values (692,77);
+insert into t (id,a) values (692,78);
+insert into t (id,a) values (692,79);
+insert into t (id,a) values (692,80);
+insert into t (id,a) values (692,81);
+insert into t (id,a) values (692,82);
+insert into t (id,a) values (692,83);
+insert into t (id,a) values (692,84);
+insert into t (id,a) values (692,85);
+insert into t (id,a) values (692,86);
+insert into t (id,a) values (692,87);
+insert into t (id,a) values (692,88);
+insert into t (id,a) values (692,89);
+insert into t (id,a) values (692,90);
+insert into t (id,a) values (692,91);
+insert into t (id,a) values (692,92);
+insert into t (id,a) values (692,93);
+insert into t (id,a) values (692,94);
+insert into t (id,a) values (692,95);
+insert into t (id,a) values (692,96);
+insert into t (id,a) values (692,97);
+insert into t (id,a) values (692,98);
+insert into t (id,a) values (692,99);
+insert into t (id,a) values (693,0);
+insert into t (id,a) values (693,1);
+insert into t (id,a) values (693,2);
+insert into t (id,a) values (693,3);
+insert into t (id,a) values (693,4);
+insert into t (id,a) values (693,5);
+insert into t (id,a) values (693,6);
+insert into t (id,a) values (693,7);
+insert into t (id,a) values (693,8);
+insert into t (id,a) values (693,9);
+insert into t (id,a) values (693,10);
+insert into t (id,a) values (693,11);
+insert into t (id,a) values (693,12);
+insert into t (id,a) values (693,13);
+insert into t (id,a) values (693,14);
+insert into t (id,a) values (693,15);
+insert into t (id,a) values (693,16);
+insert into t (id,a) values (693,17);
+insert into t (id,a) values (693,18);
+insert into t (id,a) values (693,19);
+insert into t (id,a) values (693,20);
+insert into t (id,a) values (693,21);
+insert into t (id,a) values (693,22);
+insert into t (id,a) values (693,23);
+insert into t (id,a) values (693,24);
+insert into t (id,a) values (693,25);
+insert into t (id,a) values (693,26);
+insert into t (id,a) values (693,27);
+insert into t (id,a) values (693,28);
+insert into t (id,a) values (693,29);
+insert into t (id,a) values (693,30);
+insert into t (id,a) values (693,31);
+insert into t (id,a) values (693,32);
+insert into t (id,a) values (693,33);
+insert into t (id,a) values (693,34);
+insert into t (id,a) values (693,35);
+insert into t (id,a) values (693,36);
+insert into t (id,a) values (693,37);
+insert into t (id,a) values (693,38);
+insert into t (id,a) values (693,39);
+insert into t (id,a) values (693,40);
+insert into t (id,a) values (693,41);
+insert into t (id,a) values (693,42);
+insert into t (id,a) values (693,43);
+insert into t (id,a) values (693,44);
+insert into t (id,a) values (693,45);
+insert into t (id,a) values (693,46);
+insert into t (id,a) values (693,47);
+insert into t (id,a) values (693,48);
+insert into t (id,a) values (693,49);
+insert into t (id,a) values (693,50);
+insert into t (id,a) values (693,51);
+insert into t (id,a) values (693,52);
+insert into t (id,a) values (693,53);
+insert into t (id,a) values (693,54);
+insert into t (id,a) values (693,55);
+insert into t (id,a) values (693,56);
+insert into t (id,a) values (693,57);
+insert into t (id,a) values (693,58);
+insert into t (id,a) values (693,59);
+insert into t (id,a) values (693,60);
+insert into t (id,a) values (693,61);
+insert into t (id,a) values (693,62);
+insert into t (id,a) values (693,63);
+insert into t (id,a) values (693,64);
+insert into t (id,a) values (693,65);
+insert into t (id,a) values (693,66);
+insert into t (id,a) values (693,67);
+insert into t (id,a) values (693,68);
+insert into t (id,a) values (693,69);
+insert into t (id,a) values (693,70);
+insert into t (id,a) values (693,71);
+insert into t (id,a) values (693,72);
+insert into t (id,a) values (693,73);
+insert into t (id,a) values (693,74);
+insert into t (id,a) values (693,75);
+insert into t (id,a) values (693,76);
+insert into t (id,a) values (693,77);
+insert into t (id,a) values (693,78);
+insert into t (id,a) values (693,79);
+insert into t (id,a) values (693,80);
+insert into t (id,a) values (693,81);
+insert into t (id,a) values (693,82);
+insert into t (id,a) values (693,83);
+insert into t (id,a) values (693,84);
+insert into t (id,a) values (693,85);
+insert into t (id,a) values (693,86);
+insert into t (id,a) values (693,87);
+insert into t (id,a) values (693,88);
+insert into t (id,a) values (693,89);
+insert into t (id,a) values (693,90);
+insert into t (id,a) values (693,91);
+insert into t (id,a) values (693,92);
+insert into t (id,a) values (693,93);
+insert into t (id,a) values (693,94);
+insert into t (id,a) values (693,95);
+insert into t (id,a) values (693,96);
+insert into t (id,a) values (693,97);
+insert into t (id,a) values (693,98);
+insert into t (id,a) values (693,99);
+insert into t (id,a) values (694,0);
+insert into t (id,a) values (694,1);
+insert into t (id,a) values (694,2);
+insert into t (id,a) values (694,3);
+insert into t (id,a) values (694,4);
+insert into t (id,a) values (694,5);
+insert into t (id,a) values (694,6);
+insert into t (id,a) values (694,7);
+insert into t (id,a) values (694,8);
+insert into t (id,a) values (694,9);
+insert into t (id,a) values (694,10);
+insert into t (id,a) values (694,11);
+insert into t (id,a) values (694,12);
+insert into t (id,a) values (694,13);
+insert into t (id,a) values (694,14);
+insert into t (id,a) values (694,15);
+insert into t (id,a) values (694,16);
+insert into t (id,a) values (694,17);
+insert into t (id,a) values (694,18);
+insert into t (id,a) values (694,19);
+insert into t (id,a) values (694,20);
+insert into t (id,a) values (694,21);
+insert into t (id,a) values (694,22);
+insert into t (id,a) values (694,23);
+insert into t (id,a) values (694,24);
+insert into t (id,a) values (694,25);
+insert into t (id,a) values (694,26);
+insert into t (id,a) values (694,27);
+insert into t (id,a) values (694,28);
+insert into t (id,a) values (694,29);
+insert into t (id,a) values (694,30);
+insert into t (id,a) values (694,31);
+insert into t (id,a) values (694,32);
+insert into t (id,a) values (694,33);
+insert into t (id,a) values (694,34);
+insert into t (id,a) values (694,35);
+insert into t (id,a) values (694,36);
+insert into t (id,a) values (694,37);
+insert into t (id,a) values (694,38);
+insert into t (id,a) values (694,39);
+insert into t (id,a) values (694,40);
+insert into t (id,a) values (694,41);
+insert into t (id,a) values (694,42);
+insert into t (id,a) values (694,43);
+insert into t (id,a) values (694,44);
+insert into t (id,a) values (694,45);
+insert into t (id,a) values (694,46);
+insert into t (id,a) values (694,47);
+insert into t (id,a) values (694,48);
+insert into t (id,a) values (694,49);
+insert into t (id,a) values (694,50);
+insert into t (id,a) values (694,51);
+insert into t (id,a) values (694,52);
+insert into t (id,a) values (694,53);
+insert into t (id,a) values (694,54);
+insert into t (id,a) values (694,55);
+insert into t (id,a) values (694,56);
+insert into t (id,a) values (694,57);
+insert into t (id,a) values (694,58);
+insert into t (id,a) values (694,59);
+insert into t (id,a) values (694,60);
+insert into t (id,a) values (694,61);
+insert into t (id,a) values (694,62);
+insert into t (id,a) values (694,63);
+insert into t (id,a) values (694,64);
+insert into t (id,a) values (694,65);
+insert into t (id,a) values (694,66);
+insert into t (id,a) values (694,67);
+insert into t (id,a) values (694,68);
+insert into t (id,a) values (694,69);
+insert into t (id,a) values (694,70);
+insert into t (id,a) values (694,71);
+insert into t (id,a) values (694,72);
+insert into t (id,a) values (694,73);
+insert into t (id,a) values (694,74);
+insert into t (id,a) values (694,75);
+insert into t (id,a) values (694,76);
+insert into t (id,a) values (694,77);
+insert into t (id,a) values (694,78);
+insert into t (id,a) values (694,79);
+insert into t (id,a) values (694,80);
+insert into t (id,a) values (694,81);
+insert into t (id,a) values (694,82);
+insert into t (id,a) values (694,83);
+insert into t (id,a) values (694,84);
+insert into t (id,a) values (694,85);
+insert into t (id,a) values (694,86);
+insert into t (id,a) values (694,87);
+insert into t (id,a) values (694,88);
+insert into t (id,a) values (694,89);
+insert into t (id,a) values (694,90);
+insert into t (id,a) values (694,91);
+insert into t (id,a) values (694,92);
+insert into t (id,a) values (694,93);
+insert into t (id,a) values (694,94);
+insert into t (id,a) values (694,95);
+insert into t (id,a) values (694,96);
+insert into t (id,a) values (694,97);
+insert into t (id,a) values (694,98);
+insert into t (id,a) values (694,99);
+insert into t (id,a) values (695,0);
+insert into t (id,a) values (695,1);
+insert into t (id,a) values (695,2);
+insert into t (id,a) values (695,3);
+insert into t (id,a) values (695,4);
+insert into t (id,a) values (695,5);
+insert into t (id,a) values (695,6);
+insert into t (id,a) values (695,7);
+insert into t (id,a) values (695,8);
+insert into t (id,a) values (695,9);
+insert into t (id,a) values (695,10);
+insert into t (id,a) values (695,11);
+insert into t (id,a) values (695,12);
+insert into t (id,a) values (695,13);
+insert into t (id,a) values (695,14);
+insert into t (id,a) values (695,15);
+insert into t (id,a) values (695,16);
+insert into t (id,a) values (695,17);
+insert into t (id,a) values (695,18);
+insert into t (id,a) values (695,19);
+insert into t (id,a) values (695,20);
+insert into t (id,a) values (695,21);
+insert into t (id,a) values (695,22);
+insert into t (id,a) values (695,23);
+insert into t (id,a) values (695,24);
+insert into t (id,a) values (695,25);
+insert into t (id,a) values (695,26);
+insert into t (id,a) values (695,27);
+insert into t (id,a) values (695,28);
+insert into t (id,a) values (695,29);
+insert into t (id,a) values (695,30);
+insert into t (id,a) values (695,31);
+insert into t (id,a) values (695,32);
+insert into t (id,a) values (695,33);
+insert into t (id,a) values (695,34);
+insert into t (id,a) values (695,35);
+insert into t (id,a) values (695,36);
+insert into t (id,a) values (695,37);
+insert into t (id,a) values (695,38);
+insert into t (id,a) values (695,39);
+insert into t (id,a) values (695,40);
+insert into t (id,a) values (695,41);
+insert into t (id,a) values (695,42);
+insert into t (id,a) values (695,43);
+insert into t (id,a) values (695,44);
+insert into t (id,a) values (695,45);
+insert into t (id,a) values (695,46);
+insert into t (id,a) values (695,47);
+insert into t (id,a) values (695,48);
+insert into t (id,a) values (695,49);
+insert into t (id,a) values (695,50);
+insert into t (id,a) values (695,51);
+insert into t (id,a) values (695,52);
+insert into t (id,a) values (695,53);
+insert into t (id,a) values (695,54);
+insert into t (id,a) values (695,55);
+insert into t (id,a) values (695,56);
+insert into t (id,a) values (695,57);
+insert into t (id,a) values (695,58);
+insert into t (id,a) values (695,59);
+insert into t (id,a) values (695,60);
+insert into t (id,a) values (695,61);
+insert into t (id,a) values (695,62);
+insert into t (id,a) values (695,63);
+insert into t (id,a) values (695,64);
+insert into t (id,a) values (695,65);
+insert into t (id,a) values (695,66);
+insert into t (id,a) values (695,67);
+insert into t (id,a) values (695,68);
+insert into t (id,a) values (695,69);
+insert into t (id,a) values (695,70);
+insert into t (id,a) values (695,71);
+insert into t (id,a) values (695,72);
+insert into t (id,a) values (695,73);
+insert into t (id,a) values (695,74);
+insert into t (id,a) values (695,75);
+insert into t (id,a) values (695,76);
+insert into t (id,a) values (695,77);
+insert into t (id,a) values (695,78);
+insert into t (id,a) values (695,79);
+insert into t (id,a) values (695,80);
+insert into t (id,a) values (695,81);
+insert into t (id,a) values (695,82);
+insert into t (id,a) values (695,83);
+insert into t (id,a) values (695,84);
+insert into t (id,a) values (695,85);
+insert into t (id,a) values (695,86);
+insert into t (id,a) values (695,87);
+insert into t (id,a) values (695,88);
+insert into t (id,a) values (695,89);
+insert into t (id,a) values (695,90);
+insert into t (id,a) values (695,91);
+insert into t (id,a) values (695,92);
+insert into t (id,a) values (695,93);
+insert into t (id,a) values (695,94);
+insert into t (id,a) values (695,95);
+insert into t (id,a) values (695,96);
+insert into t (id,a) values (695,97);
+insert into t (id,a) values (695,98);
+insert into t (id,a) values (695,99);
+insert into t (id,a) values (696,0);
+insert into t (id,a) values (696,1);
+insert into t (id,a) values (696,2);
+insert into t (id,a) values (696,3);
+insert into t (id,a) values (696,4);
+insert into t (id,a) values (696,5);
+insert into t (id,a) values (696,6);
+insert into t (id,a) values (696,7);
+insert into t (id,a) values (696,8);
+insert into t (id,a) values (696,9);
+insert into t (id,a) values (696,10);
+insert into t (id,a) values (696,11);
+insert into t (id,a) values (696,12);
+insert into t (id,a) values (696,13);
+insert into t (id,a) values (696,14);
+insert into t (id,a) values (696,15);
+insert into t (id,a) values (696,16);
+insert into t (id,a) values (696,17);
+insert into t (id,a) values (696,18);
+insert into t (id,a) values (696,19);
+insert into t (id,a) values (696,20);
+insert into t (id,a) values (696,21);
+insert into t (id,a) values (696,22);
+insert into t (id,a) values (696,23);
+insert into t (id,a) values (696,24);
+insert into t (id,a) values (696,25);
+insert into t (id,a) values (696,26);
+insert into t (id,a) values (696,27);
+insert into t (id,a) values (696,28);
+insert into t (id,a) values (696,29);
+insert into t (id,a) values (696,30);
+insert into t (id,a) values (696,31);
+insert into t (id,a) values (696,32);
+insert into t (id,a) values (696,33);
+insert into t (id,a) values (696,34);
+insert into t (id,a) values (696,35);
+insert into t (id,a) values (696,36);
+insert into t (id,a) values (696,37);
+insert into t (id,a) values (696,38);
+insert into t (id,a) values (696,39);
+insert into t (id,a) values (696,40);
+insert into t (id,a) values (696,41);
+insert into t (id,a) values (696,42);
+insert into t (id,a) values (696,43);
+insert into t (id,a) values (696,44);
+insert into t (id,a) values (696,45);
+insert into t (id,a) values (696,46);
+insert into t (id,a) values (696,47);
+insert into t (id,a) values (696,48);
+insert into t (id,a) values (696,49);
+insert into t (id,a) values (696,50);
+insert into t (id,a) values (696,51);
+insert into t (id,a) values (696,52);
+insert into t (id,a) values (696,53);
+insert into t (id,a) values (696,54);
+insert into t (id,a) values (696,55);
+insert into t (id,a) values (696,56);
+insert into t (id,a) values (696,57);
+insert into t (id,a) values (696,58);
+insert into t (id,a) values (696,59);
+insert into t (id,a) values (696,60);
+insert into t (id,a) values (696,61);
+insert into t (id,a) values (696,62);
+insert into t (id,a) values (696,63);
+insert into t (id,a) values (696,64);
+insert into t (id,a) values (696,65);
+insert into t (id,a) values (696,66);
+insert into t (id,a) values (696,67);
+insert into t (id,a) values (696,68);
+insert into t (id,a) values (696,69);
+insert into t (id,a) values (696,70);
+insert into t (id,a) values (696,71);
+insert into t (id,a) values (696,72);
+insert into t (id,a) values (696,73);
+insert into t (id,a) values (696,74);
+insert into t (id,a) values (696,75);
+insert into t (id,a) values (696,76);
+insert into t (id,a) values (696,77);
+insert into t (id,a) values (696,78);
+insert into t (id,a) values (696,79);
+insert into t (id,a) values (696,80);
+insert into t (id,a) values (696,81);
+insert into t (id,a) values (696,82);
+insert into t (id,a) values (696,83);
+insert into t (id,a) values (696,84);
+insert into t (id,a) values (696,85);
+insert into t (id,a) values (696,86);
+insert into t (id,a) values (696,87);
+insert into t (id,a) values (696,88);
+insert into t (id,a) values (696,89);
+insert into t (id,a) values (696,90);
+insert into t (id,a) values (696,91);
+insert into t (id,a) values (696,92);
+insert into t (id,a) values (696,93);
+insert into t (id,a) values (696,94);
+insert into t (id,a) values (696,95);
+insert into t (id,a) values (696,96);
+insert into t (id,a) values (696,97);
+insert into t (id,a) values (696,98);
+insert into t (id,a) values (696,99);
+insert into t (id,a) values (697,0);
+insert into t (id,a) values (697,1);
+insert into t (id,a) values (697,2);
+insert into t (id,a) values (697,3);
+insert into t (id,a) values (697,4);
+insert into t (id,a) values (697,5);
+insert into t (id,a) values (697,6);
+insert into t (id,a) values (697,7);
+insert into t (id,a) values (697,8);
+insert into t (id,a) values (697,9);
+insert into t (id,a) values (697,10);
+insert into t (id,a) values (697,11);
+insert into t (id,a) values (697,12);
+insert into t (id,a) values (697,13);
+insert into t (id,a) values (697,14);
+insert into t (id,a) values (697,15);
+insert into t (id,a) values (697,16);
+insert into t (id,a) values (697,17);
+insert into t (id,a) values (697,18);
+insert into t (id,a) values (697,19);
+insert into t (id,a) values (697,20);
+insert into t (id,a) values (697,21);
+insert into t (id,a) values (697,22);
+insert into t (id,a) values (697,23);
+insert into t (id,a) values (697,24);
+insert into t (id,a) values (697,25);
+insert into t (id,a) values (697,26);
+insert into t (id,a) values (697,27);
+insert into t (id,a) values (697,28);
+insert into t (id,a) values (697,29);
+insert into t (id,a) values (697,30);
+insert into t (id,a) values (697,31);
+insert into t (id,a) values (697,32);
+insert into t (id,a) values (697,33);
+insert into t (id,a) values (697,34);
+insert into t (id,a) values (697,35);
+insert into t (id,a) values (697,36);
+insert into t (id,a) values (697,37);
+insert into t (id,a) values (697,38);
+insert into t (id,a) values (697,39);
+insert into t (id,a) values (697,40);
+insert into t (id,a) values (697,41);
+insert into t (id,a) values (697,42);
+insert into t (id,a) values (697,43);
+insert into t (id,a) values (697,44);
+insert into t (id,a) values (697,45);
+insert into t (id,a) values (697,46);
+insert into t (id,a) values (697,47);
+insert into t (id,a) values (697,48);
+insert into t (id,a) values (697,49);
+insert into t (id,a) values (697,50);
+insert into t (id,a) values (697,51);
+insert into t (id,a) values (697,52);
+insert into t (id,a) values (697,53);
+insert into t (id,a) values (697,54);
+insert into t (id,a) values (697,55);
+insert into t (id,a) values (697,56);
+insert into t (id,a) values (697,57);
+insert into t (id,a) values (697,58);
+insert into t (id,a) values (697,59);
+insert into t (id,a) values (697,60);
+insert into t (id,a) values (697,61);
+insert into t (id,a) values (697,62);
+insert into t (id,a) values (697,63);
+insert into t (id,a) values (697,64);
+insert into t (id,a) values (697,65);
+insert into t (id,a) values (697,66);
+insert into t (id,a) values (697,67);
+insert into t (id,a) values (697,68);
+insert into t (id,a) values (697,69);
+insert into t (id,a) values (697,70);
+insert into t (id,a) values (697,71);
+insert into t (id,a) values (697,72);
+insert into t (id,a) values (697,73);
+insert into t (id,a) values (697,74);
+insert into t (id,a) values (697,75);
+insert into t (id,a) values (697,76);
+insert into t (id,a) values (697,77);
+insert into t (id,a) values (697,78);
+insert into t (id,a) values (697,79);
+insert into t (id,a) values (697,80);
+insert into t (id,a) values (697,81);
+insert into t (id,a) values (697,82);
+insert into t (id,a) values (697,83);
+insert into t (id,a) values (697,84);
+insert into t (id,a) values (697,85);
+insert into t (id,a) values (697,86);
+insert into t (id,a) values (697,87);
+insert into t (id,a) values (697,88);
+insert into t (id,a) values (697,89);
+insert into t (id,a) values (697,90);
+insert into t (id,a) values (697,91);
+insert into t (id,a) values (697,92);
+insert into t (id,a) values (697,93);
+insert into t (id,a) values (697,94);
+insert into t (id,a) values (697,95);
+insert into t (id,a) values (697,96);
+insert into t (id,a) values (697,97);
+insert into t (id,a) values (697,98);
+insert into t (id,a) values (697,99);
+insert into t (id,a) values (698,0);
+insert into t (id,a) values (698,1);
+insert into t (id,a) values (698,2);
+insert into t (id,a) values (698,3);
+insert into t (id,a) values (698,4);
+insert into t (id,a) values (698,5);
+insert into t (id,a) values (698,6);
+insert into t (id,a) values (698,7);
+insert into t (id,a) values (698,8);
+insert into t (id,a) values (698,9);
+insert into t (id,a) values (698,10);
+insert into t (id,a) values (698,11);
+insert into t (id,a) values (698,12);
+insert into t (id,a) values (698,13);
+insert into t (id,a) values (698,14);
+insert into t (id,a) values (698,15);
+insert into t (id,a) values (698,16);
+insert into t (id,a) values (698,17);
+insert into t (id,a) values (698,18);
+insert into t (id,a) values (698,19);
+insert into t (id,a) values (698,20);
+insert into t (id,a) values (698,21);
+insert into t (id,a) values (698,22);
+insert into t (id,a) values (698,23);
+insert into t (id,a) values (698,24);
+insert into t (id,a) values (698,25);
+insert into t (id,a) values (698,26);
+insert into t (id,a) values (698,27);
+insert into t (id,a) values (698,28);
+insert into t (id,a) values (698,29);
+insert into t (id,a) values (698,30);
+insert into t (id,a) values (698,31);
+insert into t (id,a) values (698,32);
+insert into t (id,a) values (698,33);
+insert into t (id,a) values (698,34);
+insert into t (id,a) values (698,35);
+insert into t (id,a) values (698,36);
+insert into t (id,a) values (698,37);
+insert into t (id,a) values (698,38);
+insert into t (id,a) values (698,39);
+insert into t (id,a) values (698,40);
+insert into t (id,a) values (698,41);
+insert into t (id,a) values (698,42);
+insert into t (id,a) values (698,43);
+insert into t (id,a) values (698,44);
+insert into t (id,a) values (698,45);
+insert into t (id,a) values (698,46);
+insert into t (id,a) values (698,47);
+insert into t (id,a) values (698,48);
+insert into t (id,a) values (698,49);
+insert into t (id,a) values (698,50);
+insert into t (id,a) values (698,51);
+insert into t (id,a) values (698,52);
+insert into t (id,a) values (698,53);
+insert into t (id,a) values (698,54);
+insert into t (id,a) values (698,55);
+insert into t (id,a) values (698,56);
+insert into t (id,a) values (698,57);
+insert into t (id,a) values (698,58);
+insert into t (id,a) values (698,59);
+insert into t (id,a) values (698,60);
+insert into t (id,a) values (698,61);
+insert into t (id,a) values (698,62);
+insert into t (id,a) values (698,63);
+insert into t (id,a) values (698,64);
+insert into t (id,a) values (698,65);
+insert into t (id,a) values (698,66);
+insert into t (id,a) values (698,67);
+insert into t (id,a) values (698,68);
+insert into t (id,a) values (698,69);
+insert into t (id,a) values (698,70);
+insert into t (id,a) values (698,71);
+insert into t (id,a) values (698,72);
+insert into t (id,a) values (698,73);
+insert into t (id,a) values (698,74);
+insert into t (id,a) values (698,75);
+insert into t (id,a) values (698,76);
+insert into t (id,a) values (698,77);
+insert into t (id,a) values (698,78);
+insert into t (id,a) values (698,79);
+insert into t (id,a) values (698,80);
+insert into t (id,a) values (698,81);
+insert into t (id,a) values (698,82);
+insert into t (id,a) values (698,83);
+insert into t (id,a) values (698,84);
+insert into t (id,a) values (698,85);
+insert into t (id,a) values (698,86);
+insert into t (id,a) values (698,87);
+insert into t (id,a) values (698,88);
+insert into t (id,a) values (698,89);
+insert into t (id,a) values (698,90);
+insert into t (id,a) values (698,91);
+insert into t (id,a) values (698,92);
+insert into t (id,a) values (698,93);
+insert into t (id,a) values (698,94);
+insert into t (id,a) values (698,95);
+insert into t (id,a) values (698,96);
+insert into t (id,a) values (698,97);
+insert into t (id,a) values (698,98);
+insert into t (id,a) values (698,99);
+insert into t (id,a) values (699,0);
+insert into t (id,a) values (699,1);
+insert into t (id,a) values (699,2);
+insert into t (id,a) values (699,3);
+insert into t (id,a) values (699,4);
+insert into t (id,a) values (699,5);
+insert into t (id,a) values (699,6);
+insert into t (id,a) values (699,7);
+insert into t (id,a) values (699,8);
+insert into t (id,a) values (699,9);
+insert into t (id,a) values (699,10);
+insert into t (id,a) values (699,11);
+insert into t (id,a) values (699,12);
+insert into t (id,a) values (699,13);
+insert into t (id,a) values (699,14);
+insert into t (id,a) values (699,15);
+insert into t (id,a) values (699,16);
+insert into t (id,a) values (699,17);
+insert into t (id,a) values (699,18);
+insert into t (id,a) values (699,19);
+insert into t (id,a) values (699,20);
+insert into t (id,a) values (699,21);
+insert into t (id,a) values (699,22);
+insert into t (id,a) values (699,23);
+insert into t (id,a) values (699,24);
+insert into t (id,a) values (699,25);
+insert into t (id,a) values (699,26);
+insert into t (id,a) values (699,27);
+insert into t (id,a) values (699,28);
+insert into t (id,a) values (699,29);
+insert into t (id,a) values (699,30);
+insert into t (id,a) values (699,31);
+insert into t (id,a) values (699,32);
+insert into t (id,a) values (699,33);
+insert into t (id,a) values (699,34);
+insert into t (id,a) values (699,35);
+insert into t (id,a) values (699,36);
+insert into t (id,a) values (699,37);
+insert into t (id,a) values (699,38);
+insert into t (id,a) values (699,39);
+insert into t (id,a) values (699,40);
+insert into t (id,a) values (699,41);
+insert into t (id,a) values (699,42);
+insert into t (id,a) values (699,43);
+insert into t (id,a) values (699,44);
+insert into t (id,a) values (699,45);
+insert into t (id,a) values (699,46);
+insert into t (id,a) values (699,47);
+insert into t (id,a) values (699,48);
+insert into t (id,a) values (699,49);
+insert into t (id,a) values (699,50);
+insert into t (id,a) values (699,51);
+insert into t (id,a) values (699,52);
+insert into t (id,a) values (699,53);
+insert into t (id,a) values (699,54);
+insert into t (id,a) values (699,55);
+insert into t (id,a) values (699,56);
+insert into t (id,a) values (699,57);
+insert into t (id,a) values (699,58);
+insert into t (id,a) values (699,59);
+insert into t (id,a) values (699,60);
+insert into t (id,a) values (699,61);
+insert into t (id,a) values (699,62);
+insert into t (id,a) values (699,63);
+insert into t (id,a) values (699,64);
+insert into t (id,a) values (699,65);
+insert into t (id,a) values (699,66);
+insert into t (id,a) values (699,67);
+insert into t (id,a) values (699,68);
+insert into t (id,a) values (699,69);
+insert into t (id,a) values (699,70);
+insert into t (id,a) values (699,71);
+insert into t (id,a) values (699,72);
+insert into t (id,a) values (699,73);
+insert into t (id,a) values (699,74);
+insert into t (id,a) values (699,75);
+insert into t (id,a) values (699,76);
+insert into t (id,a) values (699,77);
+insert into t (id,a) values (699,78);
+insert into t (id,a) values (699,79);
+insert into t (id,a) values (699,80);
+insert into t (id,a) values (699,81);
+insert into t (id,a) values (699,82);
+insert into t (id,a) values (699,83);
+insert into t (id,a) values (699,84);
+insert into t (id,a) values (699,85);
+insert into t (id,a) values (699,86);
+insert into t (id,a) values (699,87);
+insert into t (id,a) values (699,88);
+insert into t (id,a) values (699,89);
+insert into t (id,a) values (699,90);
+insert into t (id,a) values (699,91);
+insert into t (id,a) values (699,92);
+insert into t (id,a) values (699,93);
+insert into t (id,a) values (699,94);
+insert into t (id,a) values (699,95);
+insert into t (id,a) values (699,96);
+insert into t (id,a) values (699,97);
+insert into t (id,a) values (699,98);
+insert into t (id,a) values (699,99);
+insert into t (id,a) values (700,0);
+insert into t (id,a) values (700,1);
+insert into t (id,a) values (700,2);
+insert into t (id,a) values (700,3);
+insert into t (id,a) values (700,4);
+insert into t (id,a) values (700,5);
+insert into t (id,a) values (700,6);
+insert into t (id,a) values (700,7);
+insert into t (id,a) values (700,8);
+insert into t (id,a) values (700,9);
+insert into t (id,a) values (700,10);
+insert into t (id,a) values (700,11);
+insert into t (id,a) values (700,12);
+insert into t (id,a) values (700,13);
+insert into t (id,a) values (700,14);
+insert into t (id,a) values (700,15);
+insert into t (id,a) values (700,16);
+insert into t (id,a) values (700,17);
+insert into t (id,a) values (700,18);
+insert into t (id,a) values (700,19);
+insert into t (id,a) values (700,20);
+insert into t (id,a) values (700,21);
+insert into t (id,a) values (700,22);
+insert into t (id,a) values (700,23);
+insert into t (id,a) values (700,24);
+insert into t (id,a) values (700,25);
+insert into t (id,a) values (700,26);
+insert into t (id,a) values (700,27);
+insert into t (id,a) values (700,28);
+insert into t (id,a) values (700,29);
+insert into t (id,a) values (700,30);
+insert into t (id,a) values (700,31);
+insert into t (id,a) values (700,32);
+insert into t (id,a) values (700,33);
+insert into t (id,a) values (700,34);
+insert into t (id,a) values (700,35);
+insert into t (id,a) values (700,36);
+insert into t (id,a) values (700,37);
+insert into t (id,a) values (700,38);
+insert into t (id,a) values (700,39);
+insert into t (id,a) values (700,40);
+insert into t (id,a) values (700,41);
+insert into t (id,a) values (700,42);
+insert into t (id,a) values (700,43);
+insert into t (id,a) values (700,44);
+insert into t (id,a) values (700,45);
+insert into t (id,a) values (700,46);
+insert into t (id,a) values (700,47);
+insert into t (id,a) values (700,48);
+insert into t (id,a) values (700,49);
+insert into t (id,a) values (700,50);
+insert into t (id,a) values (700,51);
+insert into t (id,a) values (700,52);
+insert into t (id,a) values (700,53);
+insert into t (id,a) values (700,54);
+insert into t (id,a) values (700,55);
+insert into t (id,a) values (700,56);
+insert into t (id,a) values (700,57);
+insert into t (id,a) values (700,58);
+insert into t (id,a) values (700,59);
+insert into t (id,a) values (700,60);
+insert into t (id,a) values (700,61);
+insert into t (id,a) values (700,62);
+insert into t (id,a) values (700,63);
+insert into t (id,a) values (700,64);
+insert into t (id,a) values (700,65);
+insert into t (id,a) values (700,66);
+insert into t (id,a) values (700,67);
+insert into t (id,a) values (700,68);
+insert into t (id,a) values (700,69);
+insert into t (id,a) values (700,70);
+insert into t (id,a) values (700,71);
+insert into t (id,a) values (700,72);
+insert into t (id,a) values (700,73);
+insert into t (id,a) values (700,74);
+insert into t (id,a) values (700,75);
+insert into t (id,a) values (700,76);
+insert into t (id,a) values (700,77);
+insert into t (id,a) values (700,78);
+insert into t (id,a) values (700,79);
+insert into t (id,a) values (700,80);
+insert into t (id,a) values (700,81);
+insert into t (id,a) values (700,82);
+insert into t (id,a) values (700,83);
+insert into t (id,a) values (700,84);
+insert into t (id,a) values (700,85);
+insert into t (id,a) values (700,86);
+insert into t (id,a) values (700,87);
+insert into t (id,a) values (700,88);
+insert into t (id,a) values (700,89);
+insert into t (id,a) values (700,90);
+insert into t (id,a) values (700,91);
+insert into t (id,a) values (700,92);
+insert into t (id,a) values (700,93);
+insert into t (id,a) values (700,94);
+insert into t (id,a) values (700,95);
+insert into t (id,a) values (700,96);
+insert into t (id,a) values (700,97);
+insert into t (id,a) values (700,98);
+insert into t (id,a) values (700,99);
+insert into t (id,a) values (701,0);
+insert into t (id,a) values (701,1);
+insert into t (id,a) values (701,2);
+insert into t (id,a) values (701,3);
+insert into t (id,a) values (701,4);
+insert into t (id,a) values (701,5);
+insert into t (id,a) values (701,6);
+insert into t (id,a) values (701,7);
+insert into t (id,a) values (701,8);
+insert into t (id,a) values (701,9);
+insert into t (id,a) values (701,10);
+insert into t (id,a) values (701,11);
+insert into t (id,a) values (701,12);
+insert into t (id,a) values (701,13);
+insert into t (id,a) values (701,14);
+insert into t (id,a) values (701,15);
+insert into t (id,a) values (701,16);
+insert into t (id,a) values (701,17);
+insert into t (id,a) values (701,18);
+insert into t (id,a) values (701,19);
+insert into t (id,a) values (701,20);
+insert into t (id,a) values (701,21);
+insert into t (id,a) values (701,22);
+insert into t (id,a) values (701,23);
+insert into t (id,a) values (701,24);
+insert into t (id,a) values (701,25);
+insert into t (id,a) values (701,26);
+insert into t (id,a) values (701,27);
+insert into t (id,a) values (701,28);
+insert into t (id,a) values (701,29);
+insert into t (id,a) values (701,30);
+insert into t (id,a) values (701,31);
+insert into t (id,a) values (701,32);
+insert into t (id,a) values (701,33);
+insert into t (id,a) values (701,34);
+insert into t (id,a) values (701,35);
+insert into t (id,a) values (701,36);
+insert into t (id,a) values (701,37);
+insert into t (id,a) values (701,38);
+insert into t (id,a) values (701,39);
+insert into t (id,a) values (701,40);
+insert into t (id,a) values (701,41);
+insert into t (id,a) values (701,42);
+insert into t (id,a) values (701,43);
+insert into t (id,a) values (701,44);
+insert into t (id,a) values (701,45);
+insert into t (id,a) values (701,46);
+insert into t (id,a) values (701,47);
+insert into t (id,a) values (701,48);
+insert into t (id,a) values (701,49);
+insert into t (id,a) values (701,50);
+insert into t (id,a) values (701,51);
+insert into t (id,a) values (701,52);
+insert into t (id,a) values (701,53);
+insert into t (id,a) values (701,54);
+insert into t (id,a) values (701,55);
+insert into t (id,a) values (701,56);
+insert into t (id,a) values (701,57);
+insert into t (id,a) values (701,58);
+insert into t (id,a) values (701,59);
+insert into t (id,a) values (701,60);
+insert into t (id,a) values (701,61);
+insert into t (id,a) values (701,62);
+insert into t (id,a) values (701,63);
+insert into t (id,a) values (701,64);
+insert into t (id,a) values (701,65);
+insert into t (id,a) values (701,66);
+insert into t (id,a) values (701,67);
+insert into t (id,a) values (701,68);
+insert into t (id,a) values (701,69);
+insert into t (id,a) values (701,70);
+insert into t (id,a) values (701,71);
+insert into t (id,a) values (701,72);
+insert into t (id,a) values (701,73);
+insert into t (id,a) values (701,74);
+insert into t (id,a) values (701,75);
+insert into t (id,a) values (701,76);
+insert into t (id,a) values (701,77);
+insert into t (id,a) values (701,78);
+insert into t (id,a) values (701,79);
+insert into t (id,a) values (701,80);
+insert into t (id,a) values (701,81);
+insert into t (id,a) values (701,82);
+insert into t (id,a) values (701,83);
+insert into t (id,a) values (701,84);
+insert into t (id,a) values (701,85);
+insert into t (id,a) values (701,86);
+insert into t (id,a) values (701,87);
+insert into t (id,a) values (701,88);
+insert into t (id,a) values (701,89);
+insert into t (id,a) values (701,90);
+insert into t (id,a) values (701,91);
+insert into t (id,a) values (701,92);
+insert into t (id,a) values (701,93);
+insert into t (id,a) values (701,94);
+insert into t (id,a) values (701,95);
+insert into t (id,a) values (701,96);
+insert into t (id,a) values (701,97);
+insert into t (id,a) values (701,98);
+insert into t (id,a) values (701,99);
+insert into t (id,a) values (702,0);
+insert into t (id,a) values (702,1);
+insert into t (id,a) values (702,2);
+insert into t (id,a) values (702,3);
+insert into t (id,a) values (702,4);
+insert into t (id,a) values (702,5);
+insert into t (id,a) values (702,6);
+insert into t (id,a) values (702,7);
+insert into t (id,a) values (702,8);
+insert into t (id,a) values (702,9);
+insert into t (id,a) values (702,10);
+insert into t (id,a) values (702,11);
+insert into t (id,a) values (702,12);
+insert into t (id,a) values (702,13);
+insert into t (id,a) values (702,14);
+insert into t (id,a) values (702,15);
+insert into t (id,a) values (702,16);
+insert into t (id,a) values (702,17);
+insert into t (id,a) values (702,18);
+insert into t (id,a) values (702,19);
+insert into t (id,a) values (702,20);
+insert into t (id,a) values (702,21);
+insert into t (id,a) values (702,22);
+insert into t (id,a) values (702,23);
+insert into t (id,a) values (702,24);
+insert into t (id,a) values (702,25);
+insert into t (id,a) values (702,26);
+insert into t (id,a) values (702,27);
+insert into t (id,a) values (702,28);
+insert into t (id,a) values (702,29);
+insert into t (id,a) values (702,30);
+insert into t (id,a) values (702,31);
+insert into t (id,a) values (702,32);
+insert into t (id,a) values (702,33);
+insert into t (id,a) values (702,34);
+insert into t (id,a) values (702,35);
+insert into t (id,a) values (702,36);
+insert into t (id,a) values (702,37);
+insert into t (id,a) values (702,38);
+insert into t (id,a) values (702,39);
+insert into t (id,a) values (702,40);
+insert into t (id,a) values (702,41);
+insert into t (id,a) values (702,42);
+insert into t (id,a) values (702,43);
+insert into t (id,a) values (702,44);
+insert into t (id,a) values (702,45);
+insert into t (id,a) values (702,46);
+insert into t (id,a) values (702,47);
+insert into t (id,a) values (702,48);
+insert into t (id,a) values (702,49);
+insert into t (id,a) values (702,50);
+insert into t (id,a) values (702,51);
+insert into t (id,a) values (702,52);
+insert into t (id,a) values (702,53);
+insert into t (id,a) values (702,54);
+insert into t (id,a) values (702,55);
+insert into t (id,a) values (702,56);
+insert into t (id,a) values (702,57);
+insert into t (id,a) values (702,58);
+insert into t (id,a) values (702,59);
+insert into t (id,a) values (702,60);
+insert into t (id,a) values (702,61);
+insert into t (id,a) values (702,62);
+insert into t (id,a) values (702,63);
+insert into t (id,a) values (702,64);
+insert into t (id,a) values (702,65);
+insert into t (id,a) values (702,66);
+insert into t (id,a) values (702,67);
+insert into t (id,a) values (702,68);
+insert into t (id,a) values (702,69);
+insert into t (id,a) values (702,70);
+insert into t (id,a) values (702,71);
+insert into t (id,a) values (702,72);
+insert into t (id,a) values (702,73);
+insert into t (id,a) values (702,74);
+insert into t (id,a) values (702,75);
+insert into t (id,a) values (702,76);
+insert into t (id,a) values (702,77);
+insert into t (id,a) values (702,78);
+insert into t (id,a) values (702,79);
+insert into t (id,a) values (702,80);
+insert into t (id,a) values (702,81);
+insert into t (id,a) values (702,82);
+insert into t (id,a) values (702,83);
+insert into t (id,a) values (702,84);
+insert into t (id,a) values (702,85);
+insert into t (id,a) values (702,86);
+insert into t (id,a) values (702,87);
+insert into t (id,a) values (702,88);
+insert into t (id,a) values (702,89);
+insert into t (id,a) values (702,90);
+insert into t (id,a) values (702,91);
+insert into t (id,a) values (702,92);
+insert into t (id,a) values (702,93);
+insert into t (id,a) values (702,94);
+insert into t (id,a) values (702,95);
+insert into t (id,a) values (702,96);
+insert into t (id,a) values (702,97);
+insert into t (id,a) values (702,98);
+insert into t (id,a) values (702,99);
+insert into t (id,a) values (703,0);
+insert into t (id,a) values (703,1);
+insert into t (id,a) values (703,2);
+insert into t (id,a) values (703,3);
+insert into t (id,a) values (703,4);
+insert into t (id,a) values (703,5);
+insert into t (id,a) values (703,6);
+insert into t (id,a) values (703,7);
+insert into t (id,a) values (703,8);
+insert into t (id,a) values (703,9);
+insert into t (id,a) values (703,10);
+insert into t (id,a) values (703,11);
+insert into t (id,a) values (703,12);
+insert into t (id,a) values (703,13);
+insert into t (id,a) values (703,14);
+insert into t (id,a) values (703,15);
+insert into t (id,a) values (703,16);
+insert into t (id,a) values (703,17);
+insert into t (id,a) values (703,18);
+insert into t (id,a) values (703,19);
+insert into t (id,a) values (703,20);
+insert into t (id,a) values (703,21);
+insert into t (id,a) values (703,22);
+insert into t (id,a) values (703,23);
+insert into t (id,a) values (703,24);
+insert into t (id,a) values (703,25);
+insert into t (id,a) values (703,26);
+insert into t (id,a) values (703,27);
+insert into t (id,a) values (703,28);
+insert into t (id,a) values (703,29);
+insert into t (id,a) values (703,30);
+insert into t (id,a) values (703,31);
+insert into t (id,a) values (703,32);
+insert into t (id,a) values (703,33);
+insert into t (id,a) values (703,34);
+insert into t (id,a) values (703,35);
+insert into t (id,a) values (703,36);
+insert into t (id,a) values (703,37);
+insert into t (id,a) values (703,38);
+insert into t (id,a) values (703,39);
+insert into t (id,a) values (703,40);
+insert into t (id,a) values (703,41);
+insert into t (id,a) values (703,42);
+insert into t (id,a) values (703,43);
+insert into t (id,a) values (703,44);
+insert into t (id,a) values (703,45);
+insert into t (id,a) values (703,46);
+insert into t (id,a) values (703,47);
+insert into t (id,a) values (703,48);
+insert into t (id,a) values (703,49);
+insert into t (id,a) values (703,50);
+insert into t (id,a) values (703,51);
+insert into t (id,a) values (703,52);
+insert into t (id,a) values (703,53);
+insert into t (id,a) values (703,54);
+insert into t (id,a) values (703,55);
+insert into t (id,a) values (703,56);
+insert into t (id,a) values (703,57);
+insert into t (id,a) values (703,58);
+insert into t (id,a) values (703,59);
+insert into t (id,a) values (703,60);
+insert into t (id,a) values (703,61);
+insert into t (id,a) values (703,62);
+insert into t (id,a) values (703,63);
+insert into t (id,a) values (703,64);
+insert into t (id,a) values (703,65);
+insert into t (id,a) values (703,66);
+insert into t (id,a) values (703,67);
+insert into t (id,a) values (703,68);
+insert into t (id,a) values (703,69);
+insert into t (id,a) values (703,70);
+insert into t (id,a) values (703,71);
+insert into t (id,a) values (703,72);
+insert into t (id,a) values (703,73);
+insert into t (id,a) values (703,74);
+insert into t (id,a) values (703,75);
+insert into t (id,a) values (703,76);
+insert into t (id,a) values (703,77);
+insert into t (id,a) values (703,78);
+insert into t (id,a) values (703,79);
+insert into t (id,a) values (703,80);
+insert into t (id,a) values (703,81);
+insert into t (id,a) values (703,82);
+insert into t (id,a) values (703,83);
+insert into t (id,a) values (703,84);
+insert into t (id,a) values (703,85);
+insert into t (id,a) values (703,86);
+insert into t (id,a) values (703,87);
+insert into t (id,a) values (703,88);
+insert into t (id,a) values (703,89);
+insert into t (id,a) values (703,90);
+insert into t (id,a) values (703,91);
+insert into t (id,a) values (703,92);
+insert into t (id,a) values (703,93);
+insert into t (id,a) values (703,94);
+insert into t (id,a) values (703,95);
+insert into t (id,a) values (703,96);
+insert into t (id,a) values (703,97);
+insert into t (id,a) values (703,98);
+insert into t (id,a) values (703,99);
+insert into t (id,a) values (704,0);
+insert into t (id,a) values (704,1);
+insert into t (id,a) values (704,2);
+insert into t (id,a) values (704,3);
+insert into t (id,a) values (704,4);
+insert into t (id,a) values (704,5);
+insert into t (id,a) values (704,6);
+insert into t (id,a) values (704,7);
+insert into t (id,a) values (704,8);
+insert into t (id,a) values (704,9);
+insert into t (id,a) values (704,10);
+insert into t (id,a) values (704,11);
+insert into t (id,a) values (704,12);
+insert into t (id,a) values (704,13);
+insert into t (id,a) values (704,14);
+insert into t (id,a) values (704,15);
+insert into t (id,a) values (704,16);
+insert into t (id,a) values (704,17);
+insert into t (id,a) values (704,18);
+insert into t (id,a) values (704,19);
+insert into t (id,a) values (704,20);
+insert into t (id,a) values (704,21);
+insert into t (id,a) values (704,22);
+insert into t (id,a) values (704,23);
+insert into t (id,a) values (704,24);
+insert into t (id,a) values (704,25);
+insert into t (id,a) values (704,26);
+insert into t (id,a) values (704,27);
+insert into t (id,a) values (704,28);
+insert into t (id,a) values (704,29);
+insert into t (id,a) values (704,30);
+insert into t (id,a) values (704,31);
+insert into t (id,a) values (704,32);
+insert into t (id,a) values (704,33);
+insert into t (id,a) values (704,34);
+insert into t (id,a) values (704,35);
+insert into t (id,a) values (704,36);
+insert into t (id,a) values (704,37);
+insert into t (id,a) values (704,38);
+insert into t (id,a) values (704,39);
+insert into t (id,a) values (704,40);
+insert into t (id,a) values (704,41);
+insert into t (id,a) values (704,42);
+insert into t (id,a) values (704,43);
+insert into t (id,a) values (704,44);
+insert into t (id,a) values (704,45);
+insert into t (id,a) values (704,46);
+insert into t (id,a) values (704,47);
+insert into t (id,a) values (704,48);
+insert into t (id,a) values (704,49);
+insert into t (id,a) values (704,50);
+insert into t (id,a) values (704,51);
+insert into t (id,a) values (704,52);
+insert into t (id,a) values (704,53);
+insert into t (id,a) values (704,54);
+insert into t (id,a) values (704,55);
+insert into t (id,a) values (704,56);
+insert into t (id,a) values (704,57);
+insert into t (id,a) values (704,58);
+insert into t (id,a) values (704,59);
+insert into t (id,a) values (704,60);
+insert into t (id,a) values (704,61);
+insert into t (id,a) values (704,62);
+insert into t (id,a) values (704,63);
+insert into t (id,a) values (704,64);
+insert into t (id,a) values (704,65);
+insert into t (id,a) values (704,66);
+insert into t (id,a) values (704,67);
+insert into t (id,a) values (704,68);
+insert into t (id,a) values (704,69);
+insert into t (id,a) values (704,70);
+insert into t (id,a) values (704,71);
+insert into t (id,a) values (704,72);
+insert into t (id,a) values (704,73);
+insert into t (id,a) values (704,74);
+insert into t (id,a) values (704,75);
+insert into t (id,a) values (704,76);
+insert into t (id,a) values (704,77);
+insert into t (id,a) values (704,78);
+insert into t (id,a) values (704,79);
+insert into t (id,a) values (704,80);
+insert into t (id,a) values (704,81);
+insert into t (id,a) values (704,82);
+insert into t (id,a) values (704,83);
+insert into t (id,a) values (704,84);
+insert into t (id,a) values (704,85);
+insert into t (id,a) values (704,86);
+insert into t (id,a) values (704,87);
+insert into t (id,a) values (704,88);
+insert into t (id,a) values (704,89);
+insert into t (id,a) values (704,90);
+insert into t (id,a) values (704,91);
+insert into t (id,a) values (704,92);
+insert into t (id,a) values (704,93);
+insert into t (id,a) values (704,94);
+insert into t (id,a) values (704,95);
+insert into t (id,a) values (704,96);
+insert into t (id,a) values (704,97);
+insert into t (id,a) values (704,98);
+insert into t (id,a) values (704,99);
+insert into t (id,a) values (705,0);
+insert into t (id,a) values (705,1);
+insert into t (id,a) values (705,2);
+insert into t (id,a) values (705,3);
+insert into t (id,a) values (705,4);
+insert into t (id,a) values (705,5);
+insert into t (id,a) values (705,6);
+insert into t (id,a) values (705,7);
+insert into t (id,a) values (705,8);
+insert into t (id,a) values (705,9);
+insert into t (id,a) values (705,10);
+insert into t (id,a) values (705,11);
+insert into t (id,a) values (705,12);
+insert into t (id,a) values (705,13);
+insert into t (id,a) values (705,14);
+insert into t (id,a) values (705,15);
+insert into t (id,a) values (705,16);
+insert into t (id,a) values (705,17);
+insert into t (id,a) values (705,18);
+insert into t (id,a) values (705,19);
+insert into t (id,a) values (705,20);
+insert into t (id,a) values (705,21);
+insert into t (id,a) values (705,22);
+insert into t (id,a) values (705,23);
+insert into t (id,a) values (705,24);
+insert into t (id,a) values (705,25);
+insert into t (id,a) values (705,26);
+insert into t (id,a) values (705,27);
+insert into t (id,a) values (705,28);
+insert into t (id,a) values (705,29);
+insert into t (id,a) values (705,30);
+insert into t (id,a) values (705,31);
+insert into t (id,a) values (705,32);
+insert into t (id,a) values (705,33);
+insert into t (id,a) values (705,34);
+insert into t (id,a) values (705,35);
+insert into t (id,a) values (705,36);
+insert into t (id,a) values (705,37);
+insert into t (id,a) values (705,38);
+insert into t (id,a) values (705,39);
+insert into t (id,a) values (705,40);
+insert into t (id,a) values (705,41);
+insert into t (id,a) values (705,42);
+insert into t (id,a) values (705,43);
+insert into t (id,a) values (705,44);
+insert into t (id,a) values (705,45);
+insert into t (id,a) values (705,46);
+insert into t (id,a) values (705,47);
+insert into t (id,a) values (705,48);
+insert into t (id,a) values (705,49);
+insert into t (id,a) values (705,50);
+insert into t (id,a) values (705,51);
+insert into t (id,a) values (705,52);
+insert into t (id,a) values (705,53);
+insert into t (id,a) values (705,54);
+insert into t (id,a) values (705,55);
+insert into t (id,a) values (705,56);
+insert into t (id,a) values (705,57);
+insert into t (id,a) values (705,58);
+insert into t (id,a) values (705,59);
+insert into t (id,a) values (705,60);
+insert into t (id,a) values (705,61);
+insert into t (id,a) values (705,62);
+insert into t (id,a) values (705,63);
+insert into t (id,a) values (705,64);
+insert into t (id,a) values (705,65);
+insert into t (id,a) values (705,66);
+insert into t (id,a) values (705,67);
+insert into t (id,a) values (705,68);
+insert into t (id,a) values (705,69);
+insert into t (id,a) values (705,70);
+insert into t (id,a) values (705,71);
+insert into t (id,a) values (705,72);
+insert into t (id,a) values (705,73);
+insert into t (id,a) values (705,74);
+insert into t (id,a) values (705,75);
+insert into t (id,a) values (705,76);
+insert into t (id,a) values (705,77);
+insert into t (id,a) values (705,78);
+insert into t (id,a) values (705,79);
+insert into t (id,a) values (705,80);
+insert into t (id,a) values (705,81);
+insert into t (id,a) values (705,82);
+insert into t (id,a) values (705,83);
+insert into t (id,a) values (705,84);
+insert into t (id,a) values (705,85);
+insert into t (id,a) values (705,86);
+insert into t (id,a) values (705,87);
+insert into t (id,a) values (705,88);
+insert into t (id,a) values (705,89);
+insert into t (id,a) values (705,90);
+insert into t (id,a) values (705,91);
+insert into t (id,a) values (705,92);
+insert into t (id,a) values (705,93);
+insert into t (id,a) values (705,94);
+insert into t (id,a) values (705,95);
+insert into t (id,a) values (705,96);
+insert into t (id,a) values (705,97);
+insert into t (id,a) values (705,98);
+insert into t (id,a) values (705,99);
+insert into t (id,a) values (706,0);
+insert into t (id,a) values (706,1);
+insert into t (id,a) values (706,2);
+insert into t (id,a) values (706,3);
+insert into t (id,a) values (706,4);
+insert into t (id,a) values (706,5);
+insert into t (id,a) values (706,6);
+insert into t (id,a) values (706,7);
+insert into t (id,a) values (706,8);
+insert into t (id,a) values (706,9);
+insert into t (id,a) values (706,10);
+insert into t (id,a) values (706,11);
+insert into t (id,a) values (706,12);
+insert into t (id,a) values (706,13);
+insert into t (id,a) values (706,14);
+insert into t (id,a) values (706,15);
+insert into t (id,a) values (706,16);
+insert into t (id,a) values (706,17);
+insert into t (id,a) values (706,18);
+insert into t (id,a) values (706,19);
+insert into t (id,a) values (706,20);
+insert into t (id,a) values (706,21);
+insert into t (id,a) values (706,22);
+insert into t (id,a) values (706,23);
+insert into t (id,a) values (706,24);
+insert into t (id,a) values (706,25);
+insert into t (id,a) values (706,26);
+insert into t (id,a) values (706,27);
+insert into t (id,a) values (706,28);
+insert into t (id,a) values (706,29);
+insert into t (id,a) values (706,30);
+insert into t (id,a) values (706,31);
+insert into t (id,a) values (706,32);
+insert into t (id,a) values (706,33);
+insert into t (id,a) values (706,34);
+insert into t (id,a) values (706,35);
+insert into t (id,a) values (706,36);
+insert into t (id,a) values (706,37);
+insert into t (id,a) values (706,38);
+insert into t (id,a) values (706,39);
+insert into t (id,a) values (706,40);
+insert into t (id,a) values (706,41);
+insert into t (id,a) values (706,42);
+insert into t (id,a) values (706,43);
+insert into t (id,a) values (706,44);
+insert into t (id,a) values (706,45);
+insert into t (id,a) values (706,46);
+insert into t (id,a) values (706,47);
+insert into t (id,a) values (706,48);
+insert into t (id,a) values (706,49);
+insert into t (id,a) values (706,50);
+insert into t (id,a) values (706,51);
+insert into t (id,a) values (706,52);
+insert into t (id,a) values (706,53);
+insert into t (id,a) values (706,54);
+insert into t (id,a) values (706,55);
+insert into t (id,a) values (706,56);
+insert into t (id,a) values (706,57);
+insert into t (id,a) values (706,58);
+insert into t (id,a) values (706,59);
+insert into t (id,a) values (706,60);
+insert into t (id,a) values (706,61);
+insert into t (id,a) values (706,62);
+insert into t (id,a) values (706,63);
+insert into t (id,a) values (706,64);
+insert into t (id,a) values (706,65);
+insert into t (id,a) values (706,66);
+insert into t (id,a) values (706,67);
+insert into t (id,a) values (706,68);
+insert into t (id,a) values (706,69);
+insert into t (id,a) values (706,70);
+insert into t (id,a) values (706,71);
+insert into t (id,a) values (706,72);
+insert into t (id,a) values (706,73);
+insert into t (id,a) values (706,74);
+insert into t (id,a) values (706,75);
+insert into t (id,a) values (706,76);
+insert into t (id,a) values (706,77);
+insert into t (id,a) values (706,78);
+insert into t (id,a) values (706,79);
+insert into t (id,a) values (706,80);
+insert into t (id,a) values (706,81);
+insert into t (id,a) values (706,82);
+insert into t (id,a) values (706,83);
+insert into t (id,a) values (706,84);
+insert into t (id,a) values (706,85);
+insert into t (id,a) values (706,86);
+insert into t (id,a) values (706,87);
+insert into t (id,a) values (706,88);
+insert into t (id,a) values (706,89);
+insert into t (id,a) values (706,90);
+insert into t (id,a) values (706,91);
+insert into t (id,a) values (706,92);
+insert into t (id,a) values (706,93);
+insert into t (id,a) values (706,94);
+insert into t (id,a) values (706,95);
+insert into t (id,a) values (706,96);
+insert into t (id,a) values (706,97);
+insert into t (id,a) values (706,98);
+insert into t (id,a) values (706,99);
+insert into t (id,a) values (707,0);
+insert into t (id,a) values (707,1);
+insert into t (id,a) values (707,2);
+insert into t (id,a) values (707,3);
+insert into t (id,a) values (707,4);
+insert into t (id,a) values (707,5);
+insert into t (id,a) values (707,6);
+insert into t (id,a) values (707,7);
+insert into t (id,a) values (707,8);
+insert into t (id,a) values (707,9);
+insert into t (id,a) values (707,10);
+insert into t (id,a) values (707,11);
+insert into t (id,a) values (707,12);
+insert into t (id,a) values (707,13);
+insert into t (id,a) values (707,14);
+insert into t (id,a) values (707,15);
+insert into t (id,a) values (707,16);
+insert into t (id,a) values (707,17);
+insert into t (id,a) values (707,18);
+insert into t (id,a) values (707,19);
+insert into t (id,a) values (707,20);
+insert into t (id,a) values (707,21);
+insert into t (id,a) values (707,22);
+insert into t (id,a) values (707,23);
+insert into t (id,a) values (707,24);
+insert into t (id,a) values (707,25);
+insert into t (id,a) values (707,26);
+insert into t (id,a) values (707,27);
+insert into t (id,a) values (707,28);
+insert into t (id,a) values (707,29);
+insert into t (id,a) values (707,30);
+insert into t (id,a) values (707,31);
+insert into t (id,a) values (707,32);
+insert into t (id,a) values (707,33);
+insert into t (id,a) values (707,34);
+insert into t (id,a) values (707,35);
+insert into t (id,a) values (707,36);
+insert into t (id,a) values (707,37);
+insert into t (id,a) values (707,38);
+insert into t (id,a) values (707,39);
+insert into t (id,a) values (707,40);
+insert into t (id,a) values (707,41);
+insert into t (id,a) values (707,42);
+insert into t (id,a) values (707,43);
+insert into t (id,a) values (707,44);
+insert into t (id,a) values (707,45);
+insert into t (id,a) values (707,46);
+insert into t (id,a) values (707,47);
+insert into t (id,a) values (707,48);
+insert into t (id,a) values (707,49);
+insert into t (id,a) values (707,50);
+insert into t (id,a) values (707,51);
+insert into t (id,a) values (707,52);
+insert into t (id,a) values (707,53);
+insert into t (id,a) values (707,54);
+insert into t (id,a) values (707,55);
+insert into t (id,a) values (707,56);
+insert into t (id,a) values (707,57);
+insert into t (id,a) values (707,58);
+insert into t (id,a) values (707,59);
+insert into t (id,a) values (707,60);
+insert into t (id,a) values (707,61);
+insert into t (id,a) values (707,62);
+insert into t (id,a) values (707,63);
+insert into t (id,a) values (707,64);
+insert into t (id,a) values (707,65);
+insert into t (id,a) values (707,66);
+insert into t (id,a) values (707,67);
+insert into t (id,a) values (707,68);
+insert into t (id,a) values (707,69);
+insert into t (id,a) values (707,70);
+insert into t (id,a) values (707,71);
+insert into t (id,a) values (707,72);
+insert into t (id,a) values (707,73);
+insert into t (id,a) values (707,74);
+insert into t (id,a) values (707,75);
+insert into t (id,a) values (707,76);
+insert into t (id,a) values (707,77);
+insert into t (id,a) values (707,78);
+insert into t (id,a) values (707,79);
+insert into t (id,a) values (707,80);
+insert into t (id,a) values (707,81);
+insert into t (id,a) values (707,82);
+insert into t (id,a) values (707,83);
+insert into t (id,a) values (707,84);
+insert into t (id,a) values (707,85);
+insert into t (id,a) values (707,86);
+insert into t (id,a) values (707,87);
+insert into t (id,a) values (707,88);
+insert into t (id,a) values (707,89);
+insert into t (id,a) values (707,90);
+insert into t (id,a) values (707,91);
+insert into t (id,a) values (707,92);
+insert into t (id,a) values (707,93);
+insert into t (id,a) values (707,94);
+insert into t (id,a) values (707,95);
+insert into t (id,a) values (707,96);
+insert into t (id,a) values (707,97);
+insert into t (id,a) values (707,98);
+insert into t (id,a) values (707,99);
+insert into t (id,a) values (708,0);
+insert into t (id,a) values (708,1);
+insert into t (id,a) values (708,2);
+insert into t (id,a) values (708,3);
+insert into t (id,a) values (708,4);
+insert into t (id,a) values (708,5);
+insert into t (id,a) values (708,6);
+insert into t (id,a) values (708,7);
+insert into t (id,a) values (708,8);
+insert into t (id,a) values (708,9);
+insert into t (id,a) values (708,10);
+insert into t (id,a) values (708,11);
+insert into t (id,a) values (708,12);
+insert into t (id,a) values (708,13);
+insert into t (id,a) values (708,14);
+insert into t (id,a) values (708,15);
+insert into t (id,a) values (708,16);
+insert into t (id,a) values (708,17);
+insert into t (id,a) values (708,18);
+insert into t (id,a) values (708,19);
+insert into t (id,a) values (708,20);
+insert into t (id,a) values (708,21);
+insert into t (id,a) values (708,22);
+insert into t (id,a) values (708,23);
+insert into t (id,a) values (708,24);
+insert into t (id,a) values (708,25);
+insert into t (id,a) values (708,26);
+insert into t (id,a) values (708,27);
+insert into t (id,a) values (708,28);
+insert into t (id,a) values (708,29);
+insert into t (id,a) values (708,30);
+insert into t (id,a) values (708,31);
+insert into t (id,a) values (708,32);
+insert into t (id,a) values (708,33);
+insert into t (id,a) values (708,34);
+insert into t (id,a) values (708,35);
+insert into t (id,a) values (708,36);
+insert into t (id,a) values (708,37);
+insert into t (id,a) values (708,38);
+insert into t (id,a) values (708,39);
+insert into t (id,a) values (708,40);
+insert into t (id,a) values (708,41);
+insert into t (id,a) values (708,42);
+insert into t (id,a) values (708,43);
+insert into t (id,a) values (708,44);
+insert into t (id,a) values (708,45);
+insert into t (id,a) values (708,46);
+insert into t (id,a) values (708,47);
+insert into t (id,a) values (708,48);
+insert into t (id,a) values (708,49);
+insert into t (id,a) values (708,50);
+insert into t (id,a) values (708,51);
+insert into t (id,a) values (708,52);
+insert into t (id,a) values (708,53);
+insert into t (id,a) values (708,54);
+insert into t (id,a) values (708,55);
+insert into t (id,a) values (708,56);
+insert into t (id,a) values (708,57);
+insert into t (id,a) values (708,58);
+insert into t (id,a) values (708,59);
+insert into t (id,a) values (708,60);
+insert into t (id,a) values (708,61);
+insert into t (id,a) values (708,62);
+insert into t (id,a) values (708,63);
+insert into t (id,a) values (708,64);
+insert into t (id,a) values (708,65);
+insert into t (id,a) values (708,66);
+insert into t (id,a) values (708,67);
+insert into t (id,a) values (708,68);
+insert into t (id,a) values (708,69);
+insert into t (id,a) values (708,70);
+insert into t (id,a) values (708,71);
+insert into t (id,a) values (708,72);
+insert into t (id,a) values (708,73);
+insert into t (id,a) values (708,74);
+insert into t (id,a) values (708,75);
+insert into t (id,a) values (708,76);
+insert into t (id,a) values (708,77);
+insert into t (id,a) values (708,78);
+insert into t (id,a) values (708,79);
+insert into t (id,a) values (708,80);
+insert into t (id,a) values (708,81);
+insert into t (id,a) values (708,82);
+insert into t (id,a) values (708,83);
+insert into t (id,a) values (708,84);
+insert into t (id,a) values (708,85);
+insert into t (id,a) values (708,86);
+insert into t (id,a) values (708,87);
+insert into t (id,a) values (708,88);
+insert into t (id,a) values (708,89);
+insert into t (id,a) values (708,90);
+insert into t (id,a) values (708,91);
+insert into t (id,a) values (708,92);
+insert into t (id,a) values (708,93);
+insert into t (id,a) values (708,94);
+insert into t (id,a) values (708,95);
+insert into t (id,a) values (708,96);
+insert into t (id,a) values (708,97);
+insert into t (id,a) values (708,98);
+insert into t (id,a) values (708,99);
+insert into t (id,a) values (709,0);
+insert into t (id,a) values (709,1);
+insert into t (id,a) values (709,2);
+insert into t (id,a) values (709,3);
+insert into t (id,a) values (709,4);
+insert into t (id,a) values (709,5);
+insert into t (id,a) values (709,6);
+insert into t (id,a) values (709,7);
+insert into t (id,a) values (709,8);
+insert into t (id,a) values (709,9);
+insert into t (id,a) values (709,10);
+insert into t (id,a) values (709,11);
+insert into t (id,a) values (709,12);
+insert into t (id,a) values (709,13);
+insert into t (id,a) values (709,14);
+insert into t (id,a) values (709,15);
+insert into t (id,a) values (709,16);
+insert into t (id,a) values (709,17);
+insert into t (id,a) values (709,18);
+insert into t (id,a) values (709,19);
+insert into t (id,a) values (709,20);
+insert into t (id,a) values (709,21);
+insert into t (id,a) values (709,22);
+insert into t (id,a) values (709,23);
+insert into t (id,a) values (709,24);
+insert into t (id,a) values (709,25);
+insert into t (id,a) values (709,26);
+insert into t (id,a) values (709,27);
+insert into t (id,a) values (709,28);
+insert into t (id,a) values (709,29);
+insert into t (id,a) values (709,30);
+insert into t (id,a) values (709,31);
+insert into t (id,a) values (709,32);
+insert into t (id,a) values (709,33);
+insert into t (id,a) values (709,34);
+insert into t (id,a) values (709,35);
+insert into t (id,a) values (709,36);
+insert into t (id,a) values (709,37);
+insert into t (id,a) values (709,38);
+insert into t (id,a) values (709,39);
+insert into t (id,a) values (709,40);
+insert into t (id,a) values (709,41);
+insert into t (id,a) values (709,42);
+insert into t (id,a) values (709,43);
+insert into t (id,a) values (709,44);
+insert into t (id,a) values (709,45);
+insert into t (id,a) values (709,46);
+insert into t (id,a) values (709,47);
+insert into t (id,a) values (709,48);
+insert into t (id,a) values (709,49);
+insert into t (id,a) values (709,50);
+insert into t (id,a) values (709,51);
+insert into t (id,a) values (709,52);
+insert into t (id,a) values (709,53);
+insert into t (id,a) values (709,54);
+insert into t (id,a) values (709,55);
+insert into t (id,a) values (709,56);
+insert into t (id,a) values (709,57);
+insert into t (id,a) values (709,58);
+insert into t (id,a) values (709,59);
+insert into t (id,a) values (709,60);
+insert into t (id,a) values (709,61);
+insert into t (id,a) values (709,62);
+insert into t (id,a) values (709,63);
+insert into t (id,a) values (709,64);
+insert into t (id,a) values (709,65);
+insert into t (id,a) values (709,66);
+insert into t (id,a) values (709,67);
+insert into t (id,a) values (709,68);
+insert into t (id,a) values (709,69);
+insert into t (id,a) values (709,70);
+insert into t (id,a) values (709,71);
+insert into t (id,a) values (709,72);
+insert into t (id,a) values (709,73);
+insert into t (id,a) values (709,74);
+insert into t (id,a) values (709,75);
+insert into t (id,a) values (709,76);
+insert into t (id,a) values (709,77);
+insert into t (id,a) values (709,78);
+insert into t (id,a) values (709,79);
+insert into t (id,a) values (709,80);
+insert into t (id,a) values (709,81);
+insert into t (id,a) values (709,82);
+insert into t (id,a) values (709,83);
+insert into t (id,a) values (709,84);
+insert into t (id,a) values (709,85);
+insert into t (id,a) values (709,86);
+insert into t (id,a) values (709,87);
+insert into t (id,a) values (709,88);
+insert into t (id,a) values (709,89);
+insert into t (id,a) values (709,90);
+insert into t (id,a) values (709,91);
+insert into t (id,a) values (709,92);
+insert into t (id,a) values (709,93);
+insert into t (id,a) values (709,94);
+insert into t (id,a) values (709,95);
+insert into t (id,a) values (709,96);
+insert into t (id,a) values (709,97);
+insert into t (id,a) values (709,98);
+insert into t (id,a) values (709,99);
+insert into t (id,a) values (710,0);
+insert into t (id,a) values (710,1);
+insert into t (id,a) values (710,2);
+insert into t (id,a) values (710,3);
+insert into t (id,a) values (710,4);
+insert into t (id,a) values (710,5);
+insert into t (id,a) values (710,6);
+insert into t (id,a) values (710,7);
+insert into t (id,a) values (710,8);
+insert into t (id,a) values (710,9);
+insert into t (id,a) values (710,10);
+insert into t (id,a) values (710,11);
+insert into t (id,a) values (710,12);
+insert into t (id,a) values (710,13);
+insert into t (id,a) values (710,14);
+insert into t (id,a) values (710,15);
+insert into t (id,a) values (710,16);
+insert into t (id,a) values (710,17);
+insert into t (id,a) values (710,18);
+insert into t (id,a) values (710,19);
+insert into t (id,a) values (710,20);
+insert into t (id,a) values (710,21);
+insert into t (id,a) values (710,22);
+insert into t (id,a) values (710,23);
+insert into t (id,a) values (710,24);
+insert into t (id,a) values (710,25);
+insert into t (id,a) values (710,26);
+insert into t (id,a) values (710,27);
+insert into t (id,a) values (710,28);
+insert into t (id,a) values (710,29);
+insert into t (id,a) values (710,30);
+insert into t (id,a) values (710,31);
+insert into t (id,a) values (710,32);
+insert into t (id,a) values (710,33);
+insert into t (id,a) values (710,34);
+insert into t (id,a) values (710,35);
+insert into t (id,a) values (710,36);
+insert into t (id,a) values (710,37);
+insert into t (id,a) values (710,38);
+insert into t (id,a) values (710,39);
+insert into t (id,a) values (710,40);
+insert into t (id,a) values (710,41);
+insert into t (id,a) values (710,42);
+insert into t (id,a) values (710,43);
+insert into t (id,a) values (710,44);
+insert into t (id,a) values (710,45);
+insert into t (id,a) values (710,46);
+insert into t (id,a) values (710,47);
+insert into t (id,a) values (710,48);
+insert into t (id,a) values (710,49);
+insert into t (id,a) values (710,50);
+insert into t (id,a) values (710,51);
+insert into t (id,a) values (710,52);
+insert into t (id,a) values (710,53);
+insert into t (id,a) values (710,54);
+insert into t (id,a) values (710,55);
+insert into t (id,a) values (710,56);
+insert into t (id,a) values (710,57);
+insert into t (id,a) values (710,58);
+insert into t (id,a) values (710,59);
+insert into t (id,a) values (710,60);
+insert into t (id,a) values (710,61);
+insert into t (id,a) values (710,62);
+insert into t (id,a) values (710,63);
+insert into t (id,a) values (710,64);
+insert into t (id,a) values (710,65);
+insert into t (id,a) values (710,66);
+insert into t (id,a) values (710,67);
+insert into t (id,a) values (710,68);
+insert into t (id,a) values (710,69);
+insert into t (id,a) values (710,70);
+insert into t (id,a) values (710,71);
+insert into t (id,a) values (710,72);
+insert into t (id,a) values (710,73);
+insert into t (id,a) values (710,74);
+insert into t (id,a) values (710,75);
+insert into t (id,a) values (710,76);
+insert into t (id,a) values (710,77);
+insert into t (id,a) values (710,78);
+insert into t (id,a) values (710,79);
+insert into t (id,a) values (710,80);
+insert into t (id,a) values (710,81);
+insert into t (id,a) values (710,82);
+insert into t (id,a) values (710,83);
+insert into t (id,a) values (710,84);
+insert into t (id,a) values (710,85);
+insert into t (id,a) values (710,86);
+insert into t (id,a) values (710,87);
+insert into t (id,a) values (710,88);
+insert into t (id,a) values (710,89);
+insert into t (id,a) values (710,90);
+insert into t (id,a) values (710,91);
+insert into t (id,a) values (710,92);
+insert into t (id,a) values (710,93);
+insert into t (id,a) values (710,94);
+insert into t (id,a) values (710,95);
+insert into t (id,a) values (710,96);
+insert into t (id,a) values (710,97);
+insert into t (id,a) values (710,98);
+insert into t (id,a) values (710,99);
+insert into t (id,a) values (711,0);
+insert into t (id,a) values (711,1);
+insert into t (id,a) values (711,2);
+insert into t (id,a) values (711,3);
+insert into t (id,a) values (711,4);
+insert into t (id,a) values (711,5);
+insert into t (id,a) values (711,6);
+insert into t (id,a) values (711,7);
+insert into t (id,a) values (711,8);
+insert into t (id,a) values (711,9);
+insert into t (id,a) values (711,10);
+insert into t (id,a) values (711,11);
+insert into t (id,a) values (711,12);
+insert into t (id,a) values (711,13);
+insert into t (id,a) values (711,14);
+insert into t (id,a) values (711,15);
+insert into t (id,a) values (711,16);
+insert into t (id,a) values (711,17);
+insert into t (id,a) values (711,18);
+insert into t (id,a) values (711,19);
+insert into t (id,a) values (711,20);
+insert into t (id,a) values (711,21);
+insert into t (id,a) values (711,22);
+insert into t (id,a) values (711,23);
+insert into t (id,a) values (711,24);
+insert into t (id,a) values (711,25);
+insert into t (id,a) values (711,26);
+insert into t (id,a) values (711,27);
+insert into t (id,a) values (711,28);
+insert into t (id,a) values (711,29);
+insert into t (id,a) values (711,30);
+insert into t (id,a) values (711,31);
+insert into t (id,a) values (711,32);
+insert into t (id,a) values (711,33);
+insert into t (id,a) values (711,34);
+insert into t (id,a) values (711,35);
+insert into t (id,a) values (711,36);
+insert into t (id,a) values (711,37);
+insert into t (id,a) values (711,38);
+insert into t (id,a) values (711,39);
+insert into t (id,a) values (711,40);
+insert into t (id,a) values (711,41);
+insert into t (id,a) values (711,42);
+insert into t (id,a) values (711,43);
+insert into t (id,a) values (711,44);
+insert into t (id,a) values (711,45);
+insert into t (id,a) values (711,46);
+insert into t (id,a) values (711,47);
+insert into t (id,a) values (711,48);
+insert into t (id,a) values (711,49);
+insert into t (id,a) values (711,50);
+insert into t (id,a) values (711,51);
+insert into t (id,a) values (711,52);
+insert into t (id,a) values (711,53);
+insert into t (id,a) values (711,54);
+insert into t (id,a) values (711,55);
+insert into t (id,a) values (711,56);
+insert into t (id,a) values (711,57);
+insert into t (id,a) values (711,58);
+insert into t (id,a) values (711,59);
+insert into t (id,a) values (711,60);
+insert into t (id,a) values (711,61);
+insert into t (id,a) values (711,62);
+insert into t (id,a) values (711,63);
+insert into t (id,a) values (711,64);
+insert into t (id,a) values (711,65);
+insert into t (id,a) values (711,66);
+insert into t (id,a) values (711,67);
+insert into t (id,a) values (711,68);
+insert into t (id,a) values (711,69);
+insert into t (id,a) values (711,70);
+insert into t (id,a) values (711,71);
+insert into t (id,a) values (711,72);
+insert into t (id,a) values (711,73);
+insert into t (id,a) values (711,74);
+insert into t (id,a) values (711,75);
+insert into t (id,a) values (711,76);
+insert into t (id,a) values (711,77);
+insert into t (id,a) values (711,78);
+insert into t (id,a) values (711,79);
+insert into t (id,a) values (711,80);
+insert into t (id,a) values (711,81);
+insert into t (id,a) values (711,82);
+insert into t (id,a) values (711,83);
+insert into t (id,a) values (711,84);
+insert into t (id,a) values (711,85);
+insert into t (id,a) values (711,86);
+insert into t (id,a) values (711,87);
+insert into t (id,a) values (711,88);
+insert into t (id,a) values (711,89);
+insert into t (id,a) values (711,90);
+insert into t (id,a) values (711,91);
+insert into t (id,a) values (711,92);
+insert into t (id,a) values (711,93);
+insert into t (id,a) values (711,94);
+insert into t (id,a) values (711,95);
+insert into t (id,a) values (711,96);
+insert into t (id,a) values (711,97);
+insert into t (id,a) values (711,98);
+insert into t (id,a) values (711,99);
+insert into t (id,a) values (712,0);
+insert into t (id,a) values (712,1);
+insert into t (id,a) values (712,2);
+insert into t (id,a) values (712,3);
+insert into t (id,a) values (712,4);
+insert into t (id,a) values (712,5);
+insert into t (id,a) values (712,6);
+insert into t (id,a) values (712,7);
+insert into t (id,a) values (712,8);
+insert into t (id,a) values (712,9);
+insert into t (id,a) values (712,10);
+insert into t (id,a) values (712,11);
+insert into t (id,a) values (712,12);
+insert into t (id,a) values (712,13);
+insert into t (id,a) values (712,14);
+insert into t (id,a) values (712,15);
+insert into t (id,a) values (712,16);
+insert into t (id,a) values (712,17);
+insert into t (id,a) values (712,18);
+insert into t (id,a) values (712,19);
+insert into t (id,a) values (712,20);
+insert into t (id,a) values (712,21);
+insert into t (id,a) values (712,22);
+insert into t (id,a) values (712,23);
+insert into t (id,a) values (712,24);
+insert into t (id,a) values (712,25);
+insert into t (id,a) values (712,26);
+insert into t (id,a) values (712,27);
+insert into t (id,a) values (712,28);
+insert into t (id,a) values (712,29);
+insert into t (id,a) values (712,30);
+insert into t (id,a) values (712,31);
+insert into t (id,a) values (712,32);
+insert into t (id,a) values (712,33);
+insert into t (id,a) values (712,34);
+insert into t (id,a) values (712,35);
+insert into t (id,a) values (712,36);
+insert into t (id,a) values (712,37);
+insert into t (id,a) values (712,38);
+insert into t (id,a) values (712,39);
+insert into t (id,a) values (712,40);
+insert into t (id,a) values (712,41);
+insert into t (id,a) values (712,42);
+insert into t (id,a) values (712,43);
+insert into t (id,a) values (712,44);
+insert into t (id,a) values (712,45);
+insert into t (id,a) values (712,46);
+insert into t (id,a) values (712,47);
+insert into t (id,a) values (712,48);
+insert into t (id,a) values (712,49);
+insert into t (id,a) values (712,50);
+insert into t (id,a) values (712,51);
+insert into t (id,a) values (712,52);
+insert into t (id,a) values (712,53);
+insert into t (id,a) values (712,54);
+insert into t (id,a) values (712,55);
+insert into t (id,a) values (712,56);
+insert into t (id,a) values (712,57);
+insert into t (id,a) values (712,58);
+insert into t (id,a) values (712,59);
+insert into t (id,a) values (712,60);
+insert into t (id,a) values (712,61);
+insert into t (id,a) values (712,62);
+insert into t (id,a) values (712,63);
+insert into t (id,a) values (712,64);
+insert into t (id,a) values (712,65);
+insert into t (id,a) values (712,66);
+insert into t (id,a) values (712,67);
+insert into t (id,a) values (712,68);
+insert into t (id,a) values (712,69);
+insert into t (id,a) values (712,70);
+insert into t (id,a) values (712,71);
+insert into t (id,a) values (712,72);
+insert into t (id,a) values (712,73);
+insert into t (id,a) values (712,74);
+insert into t (id,a) values (712,75);
+insert into t (id,a) values (712,76);
+insert into t (id,a) values (712,77);
+insert into t (id,a) values (712,78);
+insert into t (id,a) values (712,79);
+insert into t (id,a) values (712,80);
+insert into t (id,a) values (712,81);
+insert into t (id,a) values (712,82);
+insert into t (id,a) values (712,83);
+insert into t (id,a) values (712,84);
+insert into t (id,a) values (712,85);
+insert into t (id,a) values (712,86);
+insert into t (id,a) values (712,87);
+insert into t (id,a) values (712,88);
+insert into t (id,a) values (712,89);
+insert into t (id,a) values (712,90);
+insert into t (id,a) values (712,91);
+insert into t (id,a) values (712,92);
+insert into t (id,a) values (712,93);
+insert into t (id,a) values (712,94);
+insert into t (id,a) values (712,95);
+insert into t (id,a) values (712,96);
+insert into t (id,a) values (712,97);
+insert into t (id,a) values (712,98);
+insert into t (id,a) values (712,99);
+insert into t (id,a) values (713,0);
+insert into t (id,a) values (713,1);
+insert into t (id,a) values (713,2);
+insert into t (id,a) values (713,3);
+insert into t (id,a) values (713,4);
+insert into t (id,a) values (713,5);
+insert into t (id,a) values (713,6);
+insert into t (id,a) values (713,7);
+insert into t (id,a) values (713,8);
+insert into t (id,a) values (713,9);
+insert into t (id,a) values (713,10);
+insert into t (id,a) values (713,11);
+insert into t (id,a) values (713,12);
+insert into t (id,a) values (713,13);
+insert into t (id,a) values (713,14);
+insert into t (id,a) values (713,15);
+insert into t (id,a) values (713,16);
+insert into t (id,a) values (713,17);
+insert into t (id,a) values (713,18);
+insert into t (id,a) values (713,19);
+insert into t (id,a) values (713,20);
+insert into t (id,a) values (713,21);
+insert into t (id,a) values (713,22);
+insert into t (id,a) values (713,23);
+insert into t (id,a) values (713,24);
+insert into t (id,a) values (713,25);
+insert into t (id,a) values (713,26);
+insert into t (id,a) values (713,27);
+insert into t (id,a) values (713,28);
+insert into t (id,a) values (713,29);
+insert into t (id,a) values (713,30);
+insert into t (id,a) values (713,31);
+insert into t (id,a) values (713,32);
+insert into t (id,a) values (713,33);
+insert into t (id,a) values (713,34);
+insert into t (id,a) values (713,35);
+insert into t (id,a) values (713,36);
+insert into t (id,a) values (713,37);
+insert into t (id,a) values (713,38);
+insert into t (id,a) values (713,39);
+insert into t (id,a) values (713,40);
+insert into t (id,a) values (713,41);
+insert into t (id,a) values (713,42);
+insert into t (id,a) values (713,43);
+insert into t (id,a) values (713,44);
+insert into t (id,a) values (713,45);
+insert into t (id,a) values (713,46);
+insert into t (id,a) values (713,47);
+insert into t (id,a) values (713,48);
+insert into t (id,a) values (713,49);
+insert into t (id,a) values (713,50);
+insert into t (id,a) values (713,51);
+insert into t (id,a) values (713,52);
+insert into t (id,a) values (713,53);
+insert into t (id,a) values (713,54);
+insert into t (id,a) values (713,55);
+insert into t (id,a) values (713,56);
+insert into t (id,a) values (713,57);
+insert into t (id,a) values (713,58);
+insert into t (id,a) values (713,59);
+insert into t (id,a) values (713,60);
+insert into t (id,a) values (713,61);
+insert into t (id,a) values (713,62);
+insert into t (id,a) values (713,63);
+insert into t (id,a) values (713,64);
+insert into t (id,a) values (713,65);
+insert into t (id,a) values (713,66);
+insert into t (id,a) values (713,67);
+insert into t (id,a) values (713,68);
+insert into t (id,a) values (713,69);
+insert into t (id,a) values (713,70);
+insert into t (id,a) values (713,71);
+insert into t (id,a) values (713,72);
+insert into t (id,a) values (713,73);
+insert into t (id,a) values (713,74);
+insert into t (id,a) values (713,75);
+insert into t (id,a) values (713,76);
+insert into t (id,a) values (713,77);
+insert into t (id,a) values (713,78);
+insert into t (id,a) values (713,79);
+insert into t (id,a) values (713,80);
+insert into t (id,a) values (713,81);
+insert into t (id,a) values (713,82);
+insert into t (id,a) values (713,83);
+insert into t (id,a) values (713,84);
+insert into t (id,a) values (713,85);
+insert into t (id,a) values (713,86);
+insert into t (id,a) values (713,87);
+insert into t (id,a) values (713,88);
+insert into t (id,a) values (713,89);
+insert into t (id,a) values (713,90);
+insert into t (id,a) values (713,91);
+insert into t (id,a) values (713,92);
+insert into t (id,a) values (713,93);
+insert into t (id,a) values (713,94);
+insert into t (id,a) values (713,95);
+insert into t (id,a) values (713,96);
+insert into t (id,a) values (713,97);
+insert into t (id,a) values (713,98);
+insert into t (id,a) values (713,99);
+insert into t (id,a) values (714,0);
+insert into t (id,a) values (714,1);
+insert into t (id,a) values (714,2);
+insert into t (id,a) values (714,3);
+insert into t (id,a) values (714,4);
+insert into t (id,a) values (714,5);
+insert into t (id,a) values (714,6);
+insert into t (id,a) values (714,7);
+insert into t (id,a) values (714,8);
+insert into t (id,a) values (714,9);
+insert into t (id,a) values (714,10);
+insert into t (id,a) values (714,11);
+insert into t (id,a) values (714,12);
+insert into t (id,a) values (714,13);
+insert into t (id,a) values (714,14);
+insert into t (id,a) values (714,15);
+insert into t (id,a) values (714,16);
+insert into t (id,a) values (714,17);
+insert into t (id,a) values (714,18);
+insert into t (id,a) values (714,19);
+insert into t (id,a) values (714,20);
+insert into t (id,a) values (714,21);
+insert into t (id,a) values (714,22);
+insert into t (id,a) values (714,23);
+insert into t (id,a) values (714,24);
+insert into t (id,a) values (714,25);
+insert into t (id,a) values (714,26);
+insert into t (id,a) values (714,27);
+insert into t (id,a) values (714,28);
+insert into t (id,a) values (714,29);
+insert into t (id,a) values (714,30);
+insert into t (id,a) values (714,31);
+insert into t (id,a) values (714,32);
+insert into t (id,a) values (714,33);
+insert into t (id,a) values (714,34);
+insert into t (id,a) values (714,35);
+insert into t (id,a) values (714,36);
+insert into t (id,a) values (714,37);
+insert into t (id,a) values (714,38);
+insert into t (id,a) values (714,39);
+insert into t (id,a) values (714,40);
+insert into t (id,a) values (714,41);
+insert into t (id,a) values (714,42);
+insert into t (id,a) values (714,43);
+insert into t (id,a) values (714,44);
+insert into t (id,a) values (714,45);
+insert into t (id,a) values (714,46);
+insert into t (id,a) values (714,47);
+insert into t (id,a) values (714,48);
+insert into t (id,a) values (714,49);
+insert into t (id,a) values (714,50);
+insert into t (id,a) values (714,51);
+insert into t (id,a) values (714,52);
+insert into t (id,a) values (714,53);
+insert into t (id,a) values (714,54);
+insert into t (id,a) values (714,55);
+insert into t (id,a) values (714,56);
+insert into t (id,a) values (714,57);
+insert into t (id,a) values (714,58);
+insert into t (id,a) values (714,59);
+insert into t (id,a) values (714,60);
+insert into t (id,a) values (714,61);
+insert into t (id,a) values (714,62);
+insert into t (id,a) values (714,63);
+insert into t (id,a) values (714,64);
+insert into t (id,a) values (714,65);
+insert into t (id,a) values (714,66);
+insert into t (id,a) values (714,67);
+insert into t (id,a) values (714,68);
+insert into t (id,a) values (714,69);
+insert into t (id,a) values (714,70);
+insert into t (id,a) values (714,71);
+insert into t (id,a) values (714,72);
+insert into t (id,a) values (714,73);
+insert into t (id,a) values (714,74);
+insert into t (id,a) values (714,75);
+insert into t (id,a) values (714,76);
+insert into t (id,a) values (714,77);
+insert into t (id,a) values (714,78);
+insert into t (id,a) values (714,79);
+insert into t (id,a) values (714,80);
+insert into t (id,a) values (714,81);
+insert into t (id,a) values (714,82);
+insert into t (id,a) values (714,83);
+insert into t (id,a) values (714,84);
+insert into t (id,a) values (714,85);
+insert into t (id,a) values (714,86);
+insert into t (id,a) values (714,87);
+insert into t (id,a) values (714,88);
+insert into t (id,a) values (714,89);
+insert into t (id,a) values (714,90);
+insert into t (id,a) values (714,91);
+insert into t (id,a) values (714,92);
+insert into t (id,a) values (714,93);
+insert into t (id,a) values (714,94);
+insert into t (id,a) values (714,95);
+insert into t (id,a) values (714,96);
+insert into t (id,a) values (714,97);
+insert into t (id,a) values (714,98);
+insert into t (id,a) values (714,99);
+insert into t (id,a) values (715,0);
+insert into t (id,a) values (715,1);
+insert into t (id,a) values (715,2);
+insert into t (id,a) values (715,3);
+insert into t (id,a) values (715,4);
+insert into t (id,a) values (715,5);
+insert into t (id,a) values (715,6);
+insert into t (id,a) values (715,7);
+insert into t (id,a) values (715,8);
+insert into t (id,a) values (715,9);
+insert into t (id,a) values (715,10);
+insert into t (id,a) values (715,11);
+insert into t (id,a) values (715,12);
+insert into t (id,a) values (715,13);
+insert into t (id,a) values (715,14);
+insert into t (id,a) values (715,15);
+insert into t (id,a) values (715,16);
+insert into t (id,a) values (715,17);
+insert into t (id,a) values (715,18);
+insert into t (id,a) values (715,19);
+insert into t (id,a) values (715,20);
+insert into t (id,a) values (715,21);
+insert into t (id,a) values (715,22);
+insert into t (id,a) values (715,23);
+insert into t (id,a) values (715,24);
+insert into t (id,a) values (715,25);
+insert into t (id,a) values (715,26);
+insert into t (id,a) values (715,27);
+insert into t (id,a) values (715,28);
+insert into t (id,a) values (715,29);
+insert into t (id,a) values (715,30);
+insert into t (id,a) values (715,31);
+insert into t (id,a) values (715,32);
+insert into t (id,a) values (715,33);
+insert into t (id,a) values (715,34);
+insert into t (id,a) values (715,35);
+insert into t (id,a) values (715,36);
+insert into t (id,a) values (715,37);
+insert into t (id,a) values (715,38);
+insert into t (id,a) values (715,39);
+insert into t (id,a) values (715,40);
+insert into t (id,a) values (715,41);
+insert into t (id,a) values (715,42);
+insert into t (id,a) values (715,43);
+insert into t (id,a) values (715,44);
+insert into t (id,a) values (715,45);
+insert into t (id,a) values (715,46);
+insert into t (id,a) values (715,47);
+insert into t (id,a) values (715,48);
+insert into t (id,a) values (715,49);
+insert into t (id,a) values (715,50);
+insert into t (id,a) values (715,51);
+insert into t (id,a) values (715,52);
+insert into t (id,a) values (715,53);
+insert into t (id,a) values (715,54);
+insert into t (id,a) values (715,55);
+insert into t (id,a) values (715,56);
+insert into t (id,a) values (715,57);
+insert into t (id,a) values (715,58);
+insert into t (id,a) values (715,59);
+insert into t (id,a) values (715,60);
+insert into t (id,a) values (715,61);
+insert into t (id,a) values (715,62);
+insert into t (id,a) values (715,63);
+insert into t (id,a) values (715,64);
+insert into t (id,a) values (715,65);
+insert into t (id,a) values (715,66);
+insert into t (id,a) values (715,67);
+insert into t (id,a) values (715,68);
+insert into t (id,a) values (715,69);
+insert into t (id,a) values (715,70);
+insert into t (id,a) values (715,71);
+insert into t (id,a) values (715,72);
+insert into t (id,a) values (715,73);
+insert into t (id,a) values (715,74);
+insert into t (id,a) values (715,75);
+insert into t (id,a) values (715,76);
+insert into t (id,a) values (715,77);
+insert into t (id,a) values (715,78);
+insert into t (id,a) values (715,79);
+insert into t (id,a) values (715,80);
+insert into t (id,a) values (715,81);
+insert into t (id,a) values (715,82);
+insert into t (id,a) values (715,83);
+insert into t (id,a) values (715,84);
+insert into t (id,a) values (715,85);
+insert into t (id,a) values (715,86);
+insert into t (id,a) values (715,87);
+insert into t (id,a) values (715,88);
+insert into t (id,a) values (715,89);
+insert into t (id,a) values (715,90);
+insert into t (id,a) values (715,91);
+insert into t (id,a) values (715,92);
+insert into t (id,a) values (715,93);
+insert into t (id,a) values (715,94);
+insert into t (id,a) values (715,95);
+insert into t (id,a) values (715,96);
+insert into t (id,a) values (715,97);
+insert into t (id,a) values (715,98);
+insert into t (id,a) values (715,99);
+insert into t (id,a) values (716,0);
+insert into t (id,a) values (716,1);
+insert into t (id,a) values (716,2);
+insert into t (id,a) values (716,3);
+insert into t (id,a) values (716,4);
+insert into t (id,a) values (716,5);
+insert into t (id,a) values (716,6);
+insert into t (id,a) values (716,7);
+insert into t (id,a) values (716,8);
+insert into t (id,a) values (716,9);
+insert into t (id,a) values (716,10);
+insert into t (id,a) values (716,11);
+insert into t (id,a) values (716,12);
+insert into t (id,a) values (716,13);
+insert into t (id,a) values (716,14);
+insert into t (id,a) values (716,15);
+insert into t (id,a) values (716,16);
+insert into t (id,a) values (716,17);
+insert into t (id,a) values (716,18);
+insert into t (id,a) values (716,19);
+insert into t (id,a) values (716,20);
+insert into t (id,a) values (716,21);
+insert into t (id,a) values (716,22);
+insert into t (id,a) values (716,23);
+insert into t (id,a) values (716,24);
+insert into t (id,a) values (716,25);
+insert into t (id,a) values (716,26);
+insert into t (id,a) values (716,27);
+insert into t (id,a) values (716,28);
+insert into t (id,a) values (716,29);
+insert into t (id,a) values (716,30);
+insert into t (id,a) values (716,31);
+insert into t (id,a) values (716,32);
+insert into t (id,a) values (716,33);
+insert into t (id,a) values (716,34);
+insert into t (id,a) values (716,35);
+insert into t (id,a) values (716,36);
+insert into t (id,a) values (716,37);
+insert into t (id,a) values (716,38);
+insert into t (id,a) values (716,39);
+insert into t (id,a) values (716,40);
+insert into t (id,a) values (716,41);
+insert into t (id,a) values (716,42);
+insert into t (id,a) values (716,43);
+insert into t (id,a) values (716,44);
+insert into t (id,a) values (716,45);
+insert into t (id,a) values (716,46);
+insert into t (id,a) values (716,47);
+insert into t (id,a) values (716,48);
+insert into t (id,a) values (716,49);
+insert into t (id,a) values (716,50);
+insert into t (id,a) values (716,51);
+insert into t (id,a) values (716,52);
+insert into t (id,a) values (716,53);
+insert into t (id,a) values (716,54);
+insert into t (id,a) values (716,55);
+insert into t (id,a) values (716,56);
+insert into t (id,a) values (716,57);
+insert into t (id,a) values (716,58);
+insert into t (id,a) values (716,59);
+insert into t (id,a) values (716,60);
+insert into t (id,a) values (716,61);
+insert into t (id,a) values (716,62);
+insert into t (id,a) values (716,63);
+insert into t (id,a) values (716,64);
+insert into t (id,a) values (716,65);
+insert into t (id,a) values (716,66);
+insert into t (id,a) values (716,67);
+insert into t (id,a) values (716,68);
+insert into t (id,a) values (716,69);
+insert into t (id,a) values (716,70);
+insert into t (id,a) values (716,71);
+insert into t (id,a) values (716,72);
+insert into t (id,a) values (716,73);
+insert into t (id,a) values (716,74);
+insert into t (id,a) values (716,75);
+insert into t (id,a) values (716,76);
+insert into t (id,a) values (716,77);
+insert into t (id,a) values (716,78);
+insert into t (id,a) values (716,79);
+insert into t (id,a) values (716,80);
+insert into t (id,a) values (716,81);
+insert into t (id,a) values (716,82);
+insert into t (id,a) values (716,83);
+insert into t (id,a) values (716,84);
+insert into t (id,a) values (716,85);
+insert into t (id,a) values (716,86);
+insert into t (id,a) values (716,87);
+insert into t (id,a) values (716,88);
+insert into t (id,a) values (716,89);
+insert into t (id,a) values (716,90);
+insert into t (id,a) values (716,91);
+insert into t (id,a) values (716,92);
+insert into t (id,a) values (716,93);
+insert into t (id,a) values (716,94);
+insert into t (id,a) values (716,95);
+insert into t (id,a) values (716,96);
+insert into t (id,a) values (716,97);
+insert into t (id,a) values (716,98);
+insert into t (id,a) values (716,99);
+insert into t (id,a) values (717,0);
+insert into t (id,a) values (717,1);
+insert into t (id,a) values (717,2);
+insert into t (id,a) values (717,3);
+insert into t (id,a) values (717,4);
+insert into t (id,a) values (717,5);
+insert into t (id,a) values (717,6);
+insert into t (id,a) values (717,7);
+insert into t (id,a) values (717,8);
+insert into t (id,a) values (717,9);
+insert into t (id,a) values (717,10);
+insert into t (id,a) values (717,11);
+insert into t (id,a) values (717,12);
+insert into t (id,a) values (717,13);
+insert into t (id,a) values (717,14);
+insert into t (id,a) values (717,15);
+insert into t (id,a) values (717,16);
+insert into t (id,a) values (717,17);
+insert into t (id,a) values (717,18);
+insert into t (id,a) values (717,19);
+insert into t (id,a) values (717,20);
+insert into t (id,a) values (717,21);
+insert into t (id,a) values (717,22);
+insert into t (id,a) values (717,23);
+insert into t (id,a) values (717,24);
+insert into t (id,a) values (717,25);
+insert into t (id,a) values (717,26);
+insert into t (id,a) values (717,27);
+insert into t (id,a) values (717,28);
+insert into t (id,a) values (717,29);
+insert into t (id,a) values (717,30);
+insert into t (id,a) values (717,31);
+insert into t (id,a) values (717,32);
+insert into t (id,a) values (717,33);
+insert into t (id,a) values (717,34);
+insert into t (id,a) values (717,35);
+insert into t (id,a) values (717,36);
+insert into t (id,a) values (717,37);
+insert into t (id,a) values (717,38);
+insert into t (id,a) values (717,39);
+insert into t (id,a) values (717,40);
+insert into t (id,a) values (717,41);
+insert into t (id,a) values (717,42);
+insert into t (id,a) values (717,43);
+insert into t (id,a) values (717,44);
+insert into t (id,a) values (717,45);
+insert into t (id,a) values (717,46);
+insert into t (id,a) values (717,47);
+insert into t (id,a) values (717,48);
+insert into t (id,a) values (717,49);
+insert into t (id,a) values (717,50);
+insert into t (id,a) values (717,51);
+insert into t (id,a) values (717,52);
+insert into t (id,a) values (717,53);
+insert into t (id,a) values (717,54);
+insert into t (id,a) values (717,55);
+insert into t (id,a) values (717,56);
+insert into t (id,a) values (717,57);
+insert into t (id,a) values (717,58);
+insert into t (id,a) values (717,59);
+insert into t (id,a) values (717,60);
+insert into t (id,a) values (717,61);
+insert into t (id,a) values (717,62);
+insert into t (id,a) values (717,63);
+insert into t (id,a) values (717,64);
+insert into t (id,a) values (717,65);
+insert into t (id,a) values (717,66);
+insert into t (id,a) values (717,67);
+insert into t (id,a) values (717,68);
+insert into t (id,a) values (717,69);
+insert into t (id,a) values (717,70);
+insert into t (id,a) values (717,71);
+insert into t (id,a) values (717,72);
+insert into t (id,a) values (717,73);
+insert into t (id,a) values (717,74);
+insert into t (id,a) values (717,75);
+insert into t (id,a) values (717,76);
+insert into t (id,a) values (717,77);
+insert into t (id,a) values (717,78);
+insert into t (id,a) values (717,79);
+insert into t (id,a) values (717,80);
+insert into t (id,a) values (717,81);
+insert into t (id,a) values (717,82);
+insert into t (id,a) values (717,83);
+insert into t (id,a) values (717,84);
+insert into t (id,a) values (717,85);
+insert into t (id,a) values (717,86);
+insert into t (id,a) values (717,87);
+insert into t (id,a) values (717,88);
+insert into t (id,a) values (717,89);
+insert into t (id,a) values (717,90);
+insert into t (id,a) values (717,91);
+insert into t (id,a) values (717,92);
+insert into t (id,a) values (717,93);
+insert into t (id,a) values (717,94);
+insert into t (id,a) values (717,95);
+insert into t (id,a) values (717,96);
+insert into t (id,a) values (717,97);
+insert into t (id,a) values (717,98);
+insert into t (id,a) values (717,99);
+insert into t (id,a) values (718,0);
+insert into t (id,a) values (718,1);
+insert into t (id,a) values (718,2);
+insert into t (id,a) values (718,3);
+insert into t (id,a) values (718,4);
+insert into t (id,a) values (718,5);
+insert into t (id,a) values (718,6);
+insert into t (id,a) values (718,7);
+insert into t (id,a) values (718,8);
+insert into t (id,a) values (718,9);
+insert into t (id,a) values (718,10);
+insert into t (id,a) values (718,11);
+insert into t (id,a) values (718,12);
+insert into t (id,a) values (718,13);
+insert into t (id,a) values (718,14);
+insert into t (id,a) values (718,15);
+insert into t (id,a) values (718,16);
+insert into t (id,a) values (718,17);
+insert into t (id,a) values (718,18);
+insert into t (id,a) values (718,19);
+insert into t (id,a) values (718,20);
+insert into t (id,a) values (718,21);
+insert into t (id,a) values (718,22);
+insert into t (id,a) values (718,23);
+insert into t (id,a) values (718,24);
+insert into t (id,a) values (718,25);
+insert into t (id,a) values (718,26);
+insert into t (id,a) values (718,27);
+insert into t (id,a) values (718,28);
+insert into t (id,a) values (718,29);
+insert into t (id,a) values (718,30);
+insert into t (id,a) values (718,31);
+insert into t (id,a) values (718,32);
+insert into t (id,a) values (718,33);
+insert into t (id,a) values (718,34);
+insert into t (id,a) values (718,35);
+insert into t (id,a) values (718,36);
+insert into t (id,a) values (718,37);
+insert into t (id,a) values (718,38);
+insert into t (id,a) values (718,39);
+insert into t (id,a) values (718,40);
+insert into t (id,a) values (718,41);
+insert into t (id,a) values (718,42);
+insert into t (id,a) values (718,43);
+insert into t (id,a) values (718,44);
+insert into t (id,a) values (718,45);
+insert into t (id,a) values (718,46);
+insert into t (id,a) values (718,47);
+insert into t (id,a) values (718,48);
+insert into t (id,a) values (718,49);
+insert into t (id,a) values (718,50);
+insert into t (id,a) values (718,51);
+insert into t (id,a) values (718,52);
+insert into t (id,a) values (718,53);
+insert into t (id,a) values (718,54);
+insert into t (id,a) values (718,55);
+insert into t (id,a) values (718,56);
+insert into t (id,a) values (718,57);
+insert into t (id,a) values (718,58);
+insert into t (id,a) values (718,59);
+insert into t (id,a) values (718,60);
+insert into t (id,a) values (718,61);
+insert into t (id,a) values (718,62);
+insert into t (id,a) values (718,63);
+insert into t (id,a) values (718,64);
+insert into t (id,a) values (718,65);
+insert into t (id,a) values (718,66);
+insert into t (id,a) values (718,67);
+insert into t (id,a) values (718,68);
+insert into t (id,a) values (718,69);
+insert into t (id,a) values (718,70);
+insert into t (id,a) values (718,71);
+insert into t (id,a) values (718,72);
+insert into t (id,a) values (718,73);
+insert into t (id,a) values (718,74);
+insert into t (id,a) values (718,75);
+insert into t (id,a) values (718,76);
+insert into t (id,a) values (718,77);
+insert into t (id,a) values (718,78);
+insert into t (id,a) values (718,79);
+insert into t (id,a) values (718,80);
+insert into t (id,a) values (718,81);
+insert into t (id,a) values (718,82);
+insert into t (id,a) values (718,83);
+insert into t (id,a) values (718,84);
+insert into t (id,a) values (718,85);
+insert into t (id,a) values (718,86);
+insert into t (id,a) values (718,87);
+insert into t (id,a) values (718,88);
+insert into t (id,a) values (718,89);
+insert into t (id,a) values (718,90);
+insert into t (id,a) values (718,91);
+insert into t (id,a) values (718,92);
+insert into t (id,a) values (718,93);
+insert into t (id,a) values (718,94);
+insert into t (id,a) values (718,95);
+insert into t (id,a) values (718,96);
+insert into t (id,a) values (718,97);
+insert into t (id,a) values (718,98);
+insert into t (id,a) values (718,99);
+insert into t (id,a) values (719,0);
+insert into t (id,a) values (719,1);
+insert into t (id,a) values (719,2);
+insert into t (id,a) values (719,3);
+insert into t (id,a) values (719,4);
+insert into t (id,a) values (719,5);
+insert into t (id,a) values (719,6);
+insert into t (id,a) values (719,7);
+insert into t (id,a) values (719,8);
+insert into t (id,a) values (719,9);
+insert into t (id,a) values (719,10);
+insert into t (id,a) values (719,11);
+insert into t (id,a) values (719,12);
+insert into t (id,a) values (719,13);
+insert into t (id,a) values (719,14);
+insert into t (id,a) values (719,15);
+insert into t (id,a) values (719,16);
+insert into t (id,a) values (719,17);
+insert into t (id,a) values (719,18);
+insert into t (id,a) values (719,19);
+insert into t (id,a) values (719,20);
+insert into t (id,a) values (719,21);
+insert into t (id,a) values (719,22);
+insert into t (id,a) values (719,23);
+insert into t (id,a) values (719,24);
+insert into t (id,a) values (719,25);
+insert into t (id,a) values (719,26);
+insert into t (id,a) values (719,27);
+insert into t (id,a) values (719,28);
+insert into t (id,a) values (719,29);
+insert into t (id,a) values (719,30);
+insert into t (id,a) values (719,31);
+insert into t (id,a) values (719,32);
+insert into t (id,a) values (719,33);
+insert into t (id,a) values (719,34);
+insert into t (id,a) values (719,35);
+insert into t (id,a) values (719,36);
+insert into t (id,a) values (719,37);
+insert into t (id,a) values (719,38);
+insert into t (id,a) values (719,39);
+insert into t (id,a) values (719,40);
+insert into t (id,a) values (719,41);
+insert into t (id,a) values (719,42);
+insert into t (id,a) values (719,43);
+insert into t (id,a) values (719,44);
+insert into t (id,a) values (719,45);
+insert into t (id,a) values (719,46);
+insert into t (id,a) values (719,47);
+insert into t (id,a) values (719,48);
+insert into t (id,a) values (719,49);
+insert into t (id,a) values (719,50);
+insert into t (id,a) values (719,51);
+insert into t (id,a) values (719,52);
+insert into t (id,a) values (719,53);
+insert into t (id,a) values (719,54);
+insert into t (id,a) values (719,55);
+insert into t (id,a) values (719,56);
+insert into t (id,a) values (719,57);
+insert into t (id,a) values (719,58);
+insert into t (id,a) values (719,59);
+insert into t (id,a) values (719,60);
+insert into t (id,a) values (719,61);
+insert into t (id,a) values (719,62);
+insert into t (id,a) values (719,63);
+insert into t (id,a) values (719,64);
+insert into t (id,a) values (719,65);
+insert into t (id,a) values (719,66);
+insert into t (id,a) values (719,67);
+insert into t (id,a) values (719,68);
+insert into t (id,a) values (719,69);
+insert into t (id,a) values (719,70);
+insert into t (id,a) values (719,71);
+insert into t (id,a) values (719,72);
+insert into t (id,a) values (719,73);
+insert into t (id,a) values (719,74);
+insert into t (id,a) values (719,75);
+insert into t (id,a) values (719,76);
+insert into t (id,a) values (719,77);
+insert into t (id,a) values (719,78);
+insert into t (id,a) values (719,79);
+insert into t (id,a) values (719,80);
+insert into t (id,a) values (719,81);
+insert into t (id,a) values (719,82);
+insert into t (id,a) values (719,83);
+insert into t (id,a) values (719,84);
+insert into t (id,a) values (719,85);
+insert into t (id,a) values (719,86);
+insert into t (id,a) values (719,87);
+insert into t (id,a) values (719,88);
+insert into t (id,a) values (719,89);
+insert into t (id,a) values (719,90);
+insert into t (id,a) values (719,91);
+insert into t (id,a) values (719,92);
+insert into t (id,a) values (719,93);
+insert into t (id,a) values (719,94);
+insert into t (id,a) values (719,95);
+insert into t (id,a) values (719,96);
+insert into t (id,a) values (719,97);
+insert into t (id,a) values (719,98);
+insert into t (id,a) values (719,99);
+insert into t (id,a) values (720,0);
+insert into t (id,a) values (720,1);
+insert into t (id,a) values (720,2);
+insert into t (id,a) values (720,3);
+insert into t (id,a) values (720,4);
+insert into t (id,a) values (720,5);
+insert into t (id,a) values (720,6);
+insert into t (id,a) values (720,7);
+insert into t (id,a) values (720,8);
+insert into t (id,a) values (720,9);
+insert into t (id,a) values (720,10);
+insert into t (id,a) values (720,11);
+insert into t (id,a) values (720,12);
+insert into t (id,a) values (720,13);
+insert into t (id,a) values (720,14);
+insert into t (id,a) values (720,15);
+insert into t (id,a) values (720,16);
+insert into t (id,a) values (720,17);
+insert into t (id,a) values (720,18);
+insert into t (id,a) values (720,19);
+insert into t (id,a) values (720,20);
+insert into t (id,a) values (720,21);
+insert into t (id,a) values (720,22);
+insert into t (id,a) values (720,23);
+insert into t (id,a) values (720,24);
+insert into t (id,a) values (720,25);
+insert into t (id,a) values (720,26);
+insert into t (id,a) values (720,27);
+insert into t (id,a) values (720,28);
+insert into t (id,a) values (720,29);
+insert into t (id,a) values (720,30);
+insert into t (id,a) values (720,31);
+insert into t (id,a) values (720,32);
+insert into t (id,a) values (720,33);
+insert into t (id,a) values (720,34);
+insert into t (id,a) values (720,35);
+insert into t (id,a) values (720,36);
+insert into t (id,a) values (720,37);
+insert into t (id,a) values (720,38);
+insert into t (id,a) values (720,39);
+insert into t (id,a) values (720,40);
+insert into t (id,a) values (720,41);
+insert into t (id,a) values (720,42);
+insert into t (id,a) values (720,43);
+insert into t (id,a) values (720,44);
+insert into t (id,a) values (720,45);
+insert into t (id,a) values (720,46);
+insert into t (id,a) values (720,47);
+insert into t (id,a) values (720,48);
+insert into t (id,a) values (720,49);
+insert into t (id,a) values (720,50);
+insert into t (id,a) values (720,51);
+insert into t (id,a) values (720,52);
+insert into t (id,a) values (720,53);
+insert into t (id,a) values (720,54);
+insert into t (id,a) values (720,55);
+insert into t (id,a) values (720,56);
+insert into t (id,a) values (720,57);
+insert into t (id,a) values (720,58);
+insert into t (id,a) values (720,59);
+insert into t (id,a) values (720,60);
+insert into t (id,a) values (720,61);
+insert into t (id,a) values (720,62);
+insert into t (id,a) values (720,63);
+insert into t (id,a) values (720,64);
+insert into t (id,a) values (720,65);
+insert into t (id,a) values (720,66);
+insert into t (id,a) values (720,67);
+insert into t (id,a) values (720,68);
+insert into t (id,a) values (720,69);
+insert into t (id,a) values (720,70);
+insert into t (id,a) values (720,71);
+insert into t (id,a) values (720,72);
+insert into t (id,a) values (720,73);
+insert into t (id,a) values (720,74);
+insert into t (id,a) values (720,75);
+insert into t (id,a) values (720,76);
+insert into t (id,a) values (720,77);
+insert into t (id,a) values (720,78);
+insert into t (id,a) values (720,79);
+insert into t (id,a) values (720,80);
+insert into t (id,a) values (720,81);
+insert into t (id,a) values (720,82);
+insert into t (id,a) values (720,83);
+insert into t (id,a) values (720,84);
+insert into t (id,a) values (720,85);
+insert into t (id,a) values (720,86);
+insert into t (id,a) values (720,87);
+insert into t (id,a) values (720,88);
+insert into t (id,a) values (720,89);
+insert into t (id,a) values (720,90);
+insert into t (id,a) values (720,91);
+insert into t (id,a) values (720,92);
+insert into t (id,a) values (720,93);
+insert into t (id,a) values (720,94);
+insert into t (id,a) values (720,95);
+insert into t (id,a) values (720,96);
+insert into t (id,a) values (720,97);
+insert into t (id,a) values (720,98);
+insert into t (id,a) values (720,99);
+insert into t (id,a) values (721,0);
+insert into t (id,a) values (721,1);
+insert into t (id,a) values (721,2);
+insert into t (id,a) values (721,3);
+insert into t (id,a) values (721,4);
+insert into t (id,a) values (721,5);
+insert into t (id,a) values (721,6);
+insert into t (id,a) values (721,7);
+insert into t (id,a) values (721,8);
+insert into t (id,a) values (721,9);
+insert into t (id,a) values (721,10);
+insert into t (id,a) values (721,11);
+insert into t (id,a) values (721,12);
+insert into t (id,a) values (721,13);
+insert into t (id,a) values (721,14);
+insert into t (id,a) values (721,15);
+insert into t (id,a) values (721,16);
+insert into t (id,a) values (721,17);
+insert into t (id,a) values (721,18);
+insert into t (id,a) values (721,19);
+insert into t (id,a) values (721,20);
+insert into t (id,a) values (721,21);
+insert into t (id,a) values (721,22);
+insert into t (id,a) values (721,23);
+insert into t (id,a) values (721,24);
+insert into t (id,a) values (721,25);
+insert into t (id,a) values (721,26);
+insert into t (id,a) values (721,27);
+insert into t (id,a) values (721,28);
+insert into t (id,a) values (721,29);
+insert into t (id,a) values (721,30);
+insert into t (id,a) values (721,31);
+insert into t (id,a) values (721,32);
+insert into t (id,a) values (721,33);
+insert into t (id,a) values (721,34);
+insert into t (id,a) values (721,35);
+insert into t (id,a) values (721,36);
+insert into t (id,a) values (721,37);
+insert into t (id,a) values (721,38);
+insert into t (id,a) values (721,39);
+insert into t (id,a) values (721,40);
+insert into t (id,a) values (721,41);
+insert into t (id,a) values (721,42);
+insert into t (id,a) values (721,43);
+insert into t (id,a) values (721,44);
+insert into t (id,a) values (721,45);
+insert into t (id,a) values (721,46);
+insert into t (id,a) values (721,47);
+insert into t (id,a) values (721,48);
+insert into t (id,a) values (721,49);
+insert into t (id,a) values (721,50);
+insert into t (id,a) values (721,51);
+insert into t (id,a) values (721,52);
+insert into t (id,a) values (721,53);
+insert into t (id,a) values (721,54);
+insert into t (id,a) values (721,55);
+insert into t (id,a) values (721,56);
+insert into t (id,a) values (721,57);
+insert into t (id,a) values (721,58);
+insert into t (id,a) values (721,59);
+insert into t (id,a) values (721,60);
+insert into t (id,a) values (721,61);
+insert into t (id,a) values (721,62);
+insert into t (id,a) values (721,63);
+insert into t (id,a) values (721,64);
+insert into t (id,a) values (721,65);
+insert into t (id,a) values (721,66);
+insert into t (id,a) values (721,67);
+insert into t (id,a) values (721,68);
+insert into t (id,a) values (721,69);
+insert into t (id,a) values (721,70);
+insert into t (id,a) values (721,71);
+insert into t (id,a) values (721,72);
+insert into t (id,a) values (721,73);
+insert into t (id,a) values (721,74);
+insert into t (id,a) values (721,75);
+insert into t (id,a) values (721,76);
+insert into t (id,a) values (721,77);
+insert into t (id,a) values (721,78);
+insert into t (id,a) values (721,79);
+insert into t (id,a) values (721,80);
+insert into t (id,a) values (721,81);
+insert into t (id,a) values (721,82);
+insert into t (id,a) values (721,83);
+insert into t (id,a) values (721,84);
+insert into t (id,a) values (721,85);
+insert into t (id,a) values (721,86);
+insert into t (id,a) values (721,87);
+insert into t (id,a) values (721,88);
+insert into t (id,a) values (721,89);
+insert into t (id,a) values (721,90);
+insert into t (id,a) values (721,91);
+insert into t (id,a) values (721,92);
+insert into t (id,a) values (721,93);
+insert into t (id,a) values (721,94);
+insert into t (id,a) values (721,95);
+insert into t (id,a) values (721,96);
+insert into t (id,a) values (721,97);
+insert into t (id,a) values (721,98);
+insert into t (id,a) values (721,99);
+insert into t (id,a) values (722,0);
+insert into t (id,a) values (722,1);
+insert into t (id,a) values (722,2);
+insert into t (id,a) values (722,3);
+insert into t (id,a) values (722,4);
+insert into t (id,a) values (722,5);
+insert into t (id,a) values (722,6);
+insert into t (id,a) values (722,7);
+insert into t (id,a) values (722,8);
+insert into t (id,a) values (722,9);
+insert into t (id,a) values (722,10);
+insert into t (id,a) values (722,11);
+insert into t (id,a) values (722,12);
+insert into t (id,a) values (722,13);
+insert into t (id,a) values (722,14);
+insert into t (id,a) values (722,15);
+insert into t (id,a) values (722,16);
+insert into t (id,a) values (722,17);
+insert into t (id,a) values (722,18);
+insert into t (id,a) values (722,19);
+insert into t (id,a) values (722,20);
+insert into t (id,a) values (722,21);
+insert into t (id,a) values (722,22);
+insert into t (id,a) values (722,23);
+insert into t (id,a) values (722,24);
+insert into t (id,a) values (722,25);
+insert into t (id,a) values (722,26);
+insert into t (id,a) values (722,27);
+insert into t (id,a) values (722,28);
+insert into t (id,a) values (722,29);
+insert into t (id,a) values (722,30);
+insert into t (id,a) values (722,31);
+insert into t (id,a) values (722,32);
+insert into t (id,a) values (722,33);
+insert into t (id,a) values (722,34);
+insert into t (id,a) values (722,35);
+insert into t (id,a) values (722,36);
+insert into t (id,a) values (722,37);
+insert into t (id,a) values (722,38);
+insert into t (id,a) values (722,39);
+insert into t (id,a) values (722,40);
+insert into t (id,a) values (722,41);
+insert into t (id,a) values (722,42);
+insert into t (id,a) values (722,43);
+insert into t (id,a) values (722,44);
+insert into t (id,a) values (722,45);
+insert into t (id,a) values (722,46);
+insert into t (id,a) values (722,47);
+insert into t (id,a) values (722,48);
+insert into t (id,a) values (722,49);
+insert into t (id,a) values (722,50);
+insert into t (id,a) values (722,51);
+insert into t (id,a) values (722,52);
+insert into t (id,a) values (722,53);
+insert into t (id,a) values (722,54);
+insert into t (id,a) values (722,55);
+insert into t (id,a) values (722,56);
+insert into t (id,a) values (722,57);
+insert into t (id,a) values (722,58);
+insert into t (id,a) values (722,59);
+insert into t (id,a) values (722,60);
+insert into t (id,a) values (722,61);
+insert into t (id,a) values (722,62);
+insert into t (id,a) values (722,63);
+insert into t (id,a) values (722,64);
+insert into t (id,a) values (722,65);
+insert into t (id,a) values (722,66);
+insert into t (id,a) values (722,67);
+insert into t (id,a) values (722,68);
+insert into t (id,a) values (722,69);
+insert into t (id,a) values (722,70);
+insert into t (id,a) values (722,71);
+insert into t (id,a) values (722,72);
+insert into t (id,a) values (722,73);
+insert into t (id,a) values (722,74);
+insert into t (id,a) values (722,75);
+insert into t (id,a) values (722,76);
+insert into t (id,a) values (722,77);
+insert into t (id,a) values (722,78);
+insert into t (id,a) values (722,79);
+insert into t (id,a) values (722,80);
+insert into t (id,a) values (722,81);
+insert into t (id,a) values (722,82);
+insert into t (id,a) values (722,83);
+insert into t (id,a) values (722,84);
+insert into t (id,a) values (722,85);
+insert into t (id,a) values (722,86);
+insert into t (id,a) values (722,87);
+insert into t (id,a) values (722,88);
+insert into t (id,a) values (722,89);
+insert into t (id,a) values (722,90);
+insert into t (id,a) values (722,91);
+insert into t (id,a) values (722,92);
+insert into t (id,a) values (722,93);
+insert into t (id,a) values (722,94);
+insert into t (id,a) values (722,95);
+insert into t (id,a) values (722,96);
+insert into t (id,a) values (722,97);
+insert into t (id,a) values (722,98);
+insert into t (id,a) values (722,99);
+insert into t (id,a) values (723,0);
+insert into t (id,a) values (723,1);
+insert into t (id,a) values (723,2);
+insert into t (id,a) values (723,3);
+insert into t (id,a) values (723,4);
+insert into t (id,a) values (723,5);
+insert into t (id,a) values (723,6);
+insert into t (id,a) values (723,7);
+insert into t (id,a) values (723,8);
+insert into t (id,a) values (723,9);
+insert into t (id,a) values (723,10);
+insert into t (id,a) values (723,11);
+insert into t (id,a) values (723,12);
+insert into t (id,a) values (723,13);
+insert into t (id,a) values (723,14);
+insert into t (id,a) values (723,15);
+insert into t (id,a) values (723,16);
+insert into t (id,a) values (723,17);
+insert into t (id,a) values (723,18);
+insert into t (id,a) values (723,19);
+insert into t (id,a) values (723,20);
+insert into t (id,a) values (723,21);
+insert into t (id,a) values (723,22);
+insert into t (id,a) values (723,23);
+insert into t (id,a) values (723,24);
+insert into t (id,a) values (723,25);
+insert into t (id,a) values (723,26);
+insert into t (id,a) values (723,27);
+insert into t (id,a) values (723,28);
+insert into t (id,a) values (723,29);
+insert into t (id,a) values (723,30);
+insert into t (id,a) values (723,31);
+insert into t (id,a) values (723,32);
+insert into t (id,a) values (723,33);
+insert into t (id,a) values (723,34);
+insert into t (id,a) values (723,35);
+insert into t (id,a) values (723,36);
+insert into t (id,a) values (723,37);
+insert into t (id,a) values (723,38);
+insert into t (id,a) values (723,39);
+insert into t (id,a) values (723,40);
+insert into t (id,a) values (723,41);
+insert into t (id,a) values (723,42);
+insert into t (id,a) values (723,43);
+insert into t (id,a) values (723,44);
+insert into t (id,a) values (723,45);
+insert into t (id,a) values (723,46);
+insert into t (id,a) values (723,47);
+insert into t (id,a) values (723,48);
+insert into t (id,a) values (723,49);
+insert into t (id,a) values (723,50);
+insert into t (id,a) values (723,51);
+insert into t (id,a) values (723,52);
+insert into t (id,a) values (723,53);
+insert into t (id,a) values (723,54);
+insert into t (id,a) values (723,55);
+insert into t (id,a) values (723,56);
+insert into t (id,a) values (723,57);
+insert into t (id,a) values (723,58);
+insert into t (id,a) values (723,59);
+insert into t (id,a) values (723,60);
+insert into t (id,a) values (723,61);
+insert into t (id,a) values (723,62);
+insert into t (id,a) values (723,63);
+insert into t (id,a) values (723,64);
+insert into t (id,a) values (723,65);
+insert into t (id,a) values (723,66);
+insert into t (id,a) values (723,67);
+insert into t (id,a) values (723,68);
+insert into t (id,a) values (723,69);
+insert into t (id,a) values (723,70);
+insert into t (id,a) values (723,71);
+insert into t (id,a) values (723,72);
+insert into t (id,a) values (723,73);
+insert into t (id,a) values (723,74);
+insert into t (id,a) values (723,75);
+insert into t (id,a) values (723,76);
+insert into t (id,a) values (723,77);
+insert into t (id,a) values (723,78);
+insert into t (id,a) values (723,79);
+insert into t (id,a) values (723,80);
+insert into t (id,a) values (723,81);
+insert into t (id,a) values (723,82);
+insert into t (id,a) values (723,83);
+insert into t (id,a) values (723,84);
+insert into t (id,a) values (723,85);
+insert into t (id,a) values (723,86);
+insert into t (id,a) values (723,87);
+insert into t (id,a) values (723,88);
+insert into t (id,a) values (723,89);
+insert into t (id,a) values (723,90);
+insert into t (id,a) values (723,91);
+insert into t (id,a) values (723,92);
+insert into t (id,a) values (723,93);
+insert into t (id,a) values (723,94);
+insert into t (id,a) values (723,95);
+insert into t (id,a) values (723,96);
+insert into t (id,a) values (723,97);
+insert into t (id,a) values (723,98);
+insert into t (id,a) values (723,99);
+insert into t (id,a) values (724,0);
+insert into t (id,a) values (724,1);
+insert into t (id,a) values (724,2);
+insert into t (id,a) values (724,3);
+insert into t (id,a) values (724,4);
+insert into t (id,a) values (724,5);
+insert into t (id,a) values (724,6);
+insert into t (id,a) values (724,7);
+insert into t (id,a) values (724,8);
+insert into t (id,a) values (724,9);
+insert into t (id,a) values (724,10);
+insert into t (id,a) values (724,11);
+insert into t (id,a) values (724,12);
+insert into t (id,a) values (724,13);
+insert into t (id,a) values (724,14);
+insert into t (id,a) values (724,15);
+insert into t (id,a) values (724,16);
+insert into t (id,a) values (724,17);
+insert into t (id,a) values (724,18);
+insert into t (id,a) values (724,19);
+insert into t (id,a) values (724,20);
+insert into t (id,a) values (724,21);
+insert into t (id,a) values (724,22);
+insert into t (id,a) values (724,23);
+insert into t (id,a) values (724,24);
+insert into t (id,a) values (724,25);
+insert into t (id,a) values (724,26);
+insert into t (id,a) values (724,27);
+insert into t (id,a) values (724,28);
+insert into t (id,a) values (724,29);
+insert into t (id,a) values (724,30);
+insert into t (id,a) values (724,31);
+insert into t (id,a) values (724,32);
+insert into t (id,a) values (724,33);
+insert into t (id,a) values (724,34);
+insert into t (id,a) values (724,35);
+insert into t (id,a) values (724,36);
+insert into t (id,a) values (724,37);
+insert into t (id,a) values (724,38);
+insert into t (id,a) values (724,39);
+insert into t (id,a) values (724,40);
+insert into t (id,a) values (724,41);
+insert into t (id,a) values (724,42);
+insert into t (id,a) values (724,43);
+insert into t (id,a) values (724,44);
+insert into t (id,a) values (724,45);
+insert into t (id,a) values (724,46);
+insert into t (id,a) values (724,47);
+insert into t (id,a) values (724,48);
+insert into t (id,a) values (724,49);
+insert into t (id,a) values (724,50);
+insert into t (id,a) values (724,51);
+insert into t (id,a) values (724,52);
+insert into t (id,a) values (724,53);
+insert into t (id,a) values (724,54);
+insert into t (id,a) values (724,55);
+insert into t (id,a) values (724,56);
+insert into t (id,a) values (724,57);
+insert into t (id,a) values (724,58);
+insert into t (id,a) values (724,59);
+insert into t (id,a) values (724,60);
+insert into t (id,a) values (724,61);
+insert into t (id,a) values (724,62);
+insert into t (id,a) values (724,63);
+insert into t (id,a) values (724,64);
+insert into t (id,a) values (724,65);
+insert into t (id,a) values (724,66);
+insert into t (id,a) values (724,67);
+insert into t (id,a) values (724,68);
+insert into t (id,a) values (724,69);
+insert into t (id,a) values (724,70);
+insert into t (id,a) values (724,71);
+insert into t (id,a) values (724,72);
+insert into t (id,a) values (724,73);
+insert into t (id,a) values (724,74);
+insert into t (id,a) values (724,75);
+insert into t (id,a) values (724,76);
+insert into t (id,a) values (724,77);
+insert into t (id,a) values (724,78);
+insert into t (id,a) values (724,79);
+insert into t (id,a) values (724,80);
+insert into t (id,a) values (724,81);
+insert into t (id,a) values (724,82);
+insert into t (id,a) values (724,83);
+insert into t (id,a) values (724,84);
+insert into t (id,a) values (724,85);
+insert into t (id,a) values (724,86);
+insert into t (id,a) values (724,87);
+insert into t (id,a) values (724,88);
+insert into t (id,a) values (724,89);
+insert into t (id,a) values (724,90);
+insert into t (id,a) values (724,91);
+insert into t (id,a) values (724,92);
+insert into t (id,a) values (724,93);
+insert into t (id,a) values (724,94);
+insert into t (id,a) values (724,95);
+insert into t (id,a) values (724,96);
+insert into t (id,a) values (724,97);
+insert into t (id,a) values (724,98);
+insert into t (id,a) values (724,99);
+insert into t (id,a) values (725,0);
+insert into t (id,a) values (725,1);
+insert into t (id,a) values (725,2);
+insert into t (id,a) values (725,3);
+insert into t (id,a) values (725,4);
+insert into t (id,a) values (725,5);
+insert into t (id,a) values (725,6);
+insert into t (id,a) values (725,7);
+insert into t (id,a) values (725,8);
+insert into t (id,a) values (725,9);
+insert into t (id,a) values (725,10);
+insert into t (id,a) values (725,11);
+insert into t (id,a) values (725,12);
+insert into t (id,a) values (725,13);
+insert into t (id,a) values (725,14);
+insert into t (id,a) values (725,15);
+insert into t (id,a) values (725,16);
+insert into t (id,a) values (725,17);
+insert into t (id,a) values (725,18);
+insert into t (id,a) values (725,19);
+insert into t (id,a) values (725,20);
+insert into t (id,a) values (725,21);
+insert into t (id,a) values (725,22);
+insert into t (id,a) values (725,23);
+insert into t (id,a) values (725,24);
+insert into t (id,a) values (725,25);
+insert into t (id,a) values (725,26);
+insert into t (id,a) values (725,27);
+insert into t (id,a) values (725,28);
+insert into t (id,a) values (725,29);
+insert into t (id,a) values (725,30);
+insert into t (id,a) values (725,31);
+insert into t (id,a) values (725,32);
+insert into t (id,a) values (725,33);
+insert into t (id,a) values (725,34);
+insert into t (id,a) values (725,35);
+insert into t (id,a) values (725,36);
+insert into t (id,a) values (725,37);
+insert into t (id,a) values (725,38);
+insert into t (id,a) values (725,39);
+insert into t (id,a) values (725,40);
+insert into t (id,a) values (725,41);
+insert into t (id,a) values (725,42);
+insert into t (id,a) values (725,43);
+insert into t (id,a) values (725,44);
+insert into t (id,a) values (725,45);
+insert into t (id,a) values (725,46);
+insert into t (id,a) values (725,47);
+insert into t (id,a) values (725,48);
+insert into t (id,a) values (725,49);
+insert into t (id,a) values (725,50);
+insert into t (id,a) values (725,51);
+insert into t (id,a) values (725,52);
+insert into t (id,a) values (725,53);
+insert into t (id,a) values (725,54);
+insert into t (id,a) values (725,55);
+insert into t (id,a) values (725,56);
+insert into t (id,a) values (725,57);
+insert into t (id,a) values (725,58);
+insert into t (id,a) values (725,59);
+insert into t (id,a) values (725,60);
+insert into t (id,a) values (725,61);
+insert into t (id,a) values (725,62);
+insert into t (id,a) values (725,63);
+insert into t (id,a) values (725,64);
+insert into t (id,a) values (725,65);
+insert into t (id,a) values (725,66);
+insert into t (id,a) values (725,67);
+insert into t (id,a) values (725,68);
+insert into t (id,a) values (725,69);
+insert into t (id,a) values (725,70);
+insert into t (id,a) values (725,71);
+insert into t (id,a) values (725,72);
+insert into t (id,a) values (725,73);
+insert into t (id,a) values (725,74);
+insert into t (id,a) values (725,75);
+insert into t (id,a) values (725,76);
+insert into t (id,a) values (725,77);
+insert into t (id,a) values (725,78);
+insert into t (id,a) values (725,79);
+insert into t (id,a) values (725,80);
+insert into t (id,a) values (725,81);
+insert into t (id,a) values (725,82);
+insert into t (id,a) values (725,83);
+insert into t (id,a) values (725,84);
+insert into t (id,a) values (725,85);
+insert into t (id,a) values (725,86);
+insert into t (id,a) values (725,87);
+insert into t (id,a) values (725,88);
+insert into t (id,a) values (725,89);
+insert into t (id,a) values (725,90);
+insert into t (id,a) values (725,91);
+insert into t (id,a) values (725,92);
+insert into t (id,a) values (725,93);
+insert into t (id,a) values (725,94);
+insert into t (id,a) values (725,95);
+insert into t (id,a) values (725,96);
+insert into t (id,a) values (725,97);
+insert into t (id,a) values (725,98);
+insert into t (id,a) values (725,99);
+insert into t (id,a) values (726,0);
+insert into t (id,a) values (726,1);
+insert into t (id,a) values (726,2);
+insert into t (id,a) values (726,3);
+insert into t (id,a) values (726,4);
+insert into t (id,a) values (726,5);
+insert into t (id,a) values (726,6);
+insert into t (id,a) values (726,7);
+insert into t (id,a) values (726,8);
+insert into t (id,a) values (726,9);
+insert into t (id,a) values (726,10);
+insert into t (id,a) values (726,11);
+insert into t (id,a) values (726,12);
+insert into t (id,a) values (726,13);
+insert into t (id,a) values (726,14);
+insert into t (id,a) values (726,15);
+insert into t (id,a) values (726,16);
+insert into t (id,a) values (726,17);
+insert into t (id,a) values (726,18);
+insert into t (id,a) values (726,19);
+insert into t (id,a) values (726,20);
+insert into t (id,a) values (726,21);
+insert into t (id,a) values (726,22);
+insert into t (id,a) values (726,23);
+insert into t (id,a) values (726,24);
+insert into t (id,a) values (726,25);
+insert into t (id,a) values (726,26);
+insert into t (id,a) values (726,27);
+insert into t (id,a) values (726,28);
+insert into t (id,a) values (726,29);
+insert into t (id,a) values (726,30);
+insert into t (id,a) values (726,31);
+insert into t (id,a) values (726,32);
+insert into t (id,a) values (726,33);
+insert into t (id,a) values (726,34);
+insert into t (id,a) values (726,35);
+insert into t (id,a) values (726,36);
+insert into t (id,a) values (726,37);
+insert into t (id,a) values (726,38);
+insert into t (id,a) values (726,39);
+insert into t (id,a) values (726,40);
+insert into t (id,a) values (726,41);
+insert into t (id,a) values (726,42);
+insert into t (id,a) values (726,43);
+insert into t (id,a) values (726,44);
+insert into t (id,a) values (726,45);
+insert into t (id,a) values (726,46);
+insert into t (id,a) values (726,47);
+insert into t (id,a) values (726,48);
+insert into t (id,a) values (726,49);
+insert into t (id,a) values (726,50);
+insert into t (id,a) values (726,51);
+insert into t (id,a) values (726,52);
+insert into t (id,a) values (726,53);
+insert into t (id,a) values (726,54);
+insert into t (id,a) values (726,55);
+insert into t (id,a) values (726,56);
+insert into t (id,a) values (726,57);
+insert into t (id,a) values (726,58);
+insert into t (id,a) values (726,59);
+insert into t (id,a) values (726,60);
+insert into t (id,a) values (726,61);
+insert into t (id,a) values (726,62);
+insert into t (id,a) values (726,63);
+insert into t (id,a) values (726,64);
+insert into t (id,a) values (726,65);
+insert into t (id,a) values (726,66);
+insert into t (id,a) values (726,67);
+insert into t (id,a) values (726,68);
+insert into t (id,a) values (726,69);
+insert into t (id,a) values (726,70);
+insert into t (id,a) values (726,71);
+insert into t (id,a) values (726,72);
+insert into t (id,a) values (726,73);
+insert into t (id,a) values (726,74);
+insert into t (id,a) values (726,75);
+insert into t (id,a) values (726,76);
+insert into t (id,a) values (726,77);
+insert into t (id,a) values (726,78);
+insert into t (id,a) values (726,79);
+insert into t (id,a) values (726,80);
+insert into t (id,a) values (726,81);
+insert into t (id,a) values (726,82);
+insert into t (id,a) values (726,83);
+insert into t (id,a) values (726,84);
+insert into t (id,a) values (726,85);
+insert into t (id,a) values (726,86);
+insert into t (id,a) values (726,87);
+insert into t (id,a) values (726,88);
+insert into t (id,a) values (726,89);
+insert into t (id,a) values (726,90);
+insert into t (id,a) values (726,91);
+insert into t (id,a) values (726,92);
+insert into t (id,a) values (726,93);
+insert into t (id,a) values (726,94);
+insert into t (id,a) values (726,95);
+insert into t (id,a) values (726,96);
+insert into t (id,a) values (726,97);
+insert into t (id,a) values (726,98);
+insert into t (id,a) values (726,99);
+insert into t (id,a) values (727,0);
+insert into t (id,a) values (727,1);
+insert into t (id,a) values (727,2);
+insert into t (id,a) values (727,3);
+insert into t (id,a) values (727,4);
+insert into t (id,a) values (727,5);
+insert into t (id,a) values (727,6);
+insert into t (id,a) values (727,7);
+insert into t (id,a) values (727,8);
+insert into t (id,a) values (727,9);
+insert into t (id,a) values (727,10);
+insert into t (id,a) values (727,11);
+insert into t (id,a) values (727,12);
+insert into t (id,a) values (727,13);
+insert into t (id,a) values (727,14);
+insert into t (id,a) values (727,15);
+insert into t (id,a) values (727,16);
+insert into t (id,a) values (727,17);
+insert into t (id,a) values (727,18);
+insert into t (id,a) values (727,19);
+insert into t (id,a) values (727,20);
+insert into t (id,a) values (727,21);
+insert into t (id,a) values (727,22);
+insert into t (id,a) values (727,23);
+insert into t (id,a) values (727,24);
+insert into t (id,a) values (727,25);
+insert into t (id,a) values (727,26);
+insert into t (id,a) values (727,27);
+insert into t (id,a) values (727,28);
+insert into t (id,a) values (727,29);
+insert into t (id,a) values (727,30);
+insert into t (id,a) values (727,31);
+insert into t (id,a) values (727,32);
+insert into t (id,a) values (727,33);
+insert into t (id,a) values (727,34);
+insert into t (id,a) values (727,35);
+insert into t (id,a) values (727,36);
+insert into t (id,a) values (727,37);
+insert into t (id,a) values (727,38);
+insert into t (id,a) values (727,39);
+insert into t (id,a) values (727,40);
+insert into t (id,a) values (727,41);
+insert into t (id,a) values (727,42);
+insert into t (id,a) values (727,43);
+insert into t (id,a) values (727,44);
+insert into t (id,a) values (727,45);
+insert into t (id,a) values (727,46);
+insert into t (id,a) values (727,47);
+insert into t (id,a) values (727,48);
+insert into t (id,a) values (727,49);
+insert into t (id,a) values (727,50);
+insert into t (id,a) values (727,51);
+insert into t (id,a) values (727,52);
+insert into t (id,a) values (727,53);
+insert into t (id,a) values (727,54);
+insert into t (id,a) values (727,55);
+insert into t (id,a) values (727,56);
+insert into t (id,a) values (727,57);
+insert into t (id,a) values (727,58);
+insert into t (id,a) values (727,59);
+insert into t (id,a) values (727,60);
+insert into t (id,a) values (727,61);
+insert into t (id,a) values (727,62);
+insert into t (id,a) values (727,63);
+insert into t (id,a) values (727,64);
+insert into t (id,a) values (727,65);
+insert into t (id,a) values (727,66);
+insert into t (id,a) values (727,67);
+insert into t (id,a) values (727,68);
+insert into t (id,a) values (727,69);
+insert into t (id,a) values (727,70);
+insert into t (id,a) values (727,71);
+insert into t (id,a) values (727,72);
+insert into t (id,a) values (727,73);
+insert into t (id,a) values (727,74);
+insert into t (id,a) values (727,75);
+insert into t (id,a) values (727,76);
+insert into t (id,a) values (727,77);
+insert into t (id,a) values (727,78);
+insert into t (id,a) values (727,79);
+insert into t (id,a) values (727,80);
+insert into t (id,a) values (727,81);
+insert into t (id,a) values (727,82);
+insert into t (id,a) values (727,83);
+insert into t (id,a) values (727,84);
+insert into t (id,a) values (727,85);
+insert into t (id,a) values (727,86);
+insert into t (id,a) values (727,87);
+insert into t (id,a) values (727,88);
+insert into t (id,a) values (727,89);
+insert into t (id,a) values (727,90);
+insert into t (id,a) values (727,91);
+insert into t (id,a) values (727,92);
+insert into t (id,a) values (727,93);
+insert into t (id,a) values (727,94);
+insert into t (id,a) values (727,95);
+insert into t (id,a) values (727,96);
+insert into t (id,a) values (727,97);
+insert into t (id,a) values (727,98);
+insert into t (id,a) values (727,99);
+insert into t (id,a) values (728,0);
+insert into t (id,a) values (728,1);
+insert into t (id,a) values (728,2);
+insert into t (id,a) values (728,3);
+insert into t (id,a) values (728,4);
+insert into t (id,a) values (728,5);
+insert into t (id,a) values (728,6);
+insert into t (id,a) values (728,7);
+insert into t (id,a) values (728,8);
+insert into t (id,a) values (728,9);
+insert into t (id,a) values (728,10);
+insert into t (id,a) values (728,11);
+insert into t (id,a) values (728,12);
+insert into t (id,a) values (728,13);
+insert into t (id,a) values (728,14);
+insert into t (id,a) values (728,15);
+insert into t (id,a) values (728,16);
+insert into t (id,a) values (728,17);
+insert into t (id,a) values (728,18);
+insert into t (id,a) values (728,19);
+insert into t (id,a) values (728,20);
+insert into t (id,a) values (728,21);
+insert into t (id,a) values (728,22);
+insert into t (id,a) values (728,23);
+insert into t (id,a) values (728,24);
+insert into t (id,a) values (728,25);
+insert into t (id,a) values (728,26);
+insert into t (id,a) values (728,27);
+insert into t (id,a) values (728,28);
+insert into t (id,a) values (728,29);
+insert into t (id,a) values (728,30);
+insert into t (id,a) values (728,31);
+insert into t (id,a) values (728,32);
+insert into t (id,a) values (728,33);
+insert into t (id,a) values (728,34);
+insert into t (id,a) values (728,35);
+insert into t (id,a) values (728,36);
+insert into t (id,a) values (728,37);
+insert into t (id,a) values (728,38);
+insert into t (id,a) values (728,39);
+insert into t (id,a) values (728,40);
+insert into t (id,a) values (728,41);
+insert into t (id,a) values (728,42);
+insert into t (id,a) values (728,43);
+insert into t (id,a) values (728,44);
+insert into t (id,a) values (728,45);
+insert into t (id,a) values (728,46);
+insert into t (id,a) values (728,47);
+insert into t (id,a) values (728,48);
+insert into t (id,a) values (728,49);
+insert into t (id,a) values (728,50);
+insert into t (id,a) values (728,51);
+insert into t (id,a) values (728,52);
+insert into t (id,a) values (728,53);
+insert into t (id,a) values (728,54);
+insert into t (id,a) values (728,55);
+insert into t (id,a) values (728,56);
+insert into t (id,a) values (728,57);
+insert into t (id,a) values (728,58);
+insert into t (id,a) values (728,59);
+insert into t (id,a) values (728,60);
+insert into t (id,a) values (728,61);
+insert into t (id,a) values (728,62);
+insert into t (id,a) values (728,63);
+insert into t (id,a) values (728,64);
+insert into t (id,a) values (728,65);
+insert into t (id,a) values (728,66);
+insert into t (id,a) values (728,67);
+insert into t (id,a) values (728,68);
+insert into t (id,a) values (728,69);
+insert into t (id,a) values (728,70);
+insert into t (id,a) values (728,71);
+insert into t (id,a) values (728,72);
+insert into t (id,a) values (728,73);
+insert into t (id,a) values (728,74);
+insert into t (id,a) values (728,75);
+insert into t (id,a) values (728,76);
+insert into t (id,a) values (728,77);
+insert into t (id,a) values (728,78);
+insert into t (id,a) values (728,79);
+insert into t (id,a) values (728,80);
+insert into t (id,a) values (728,81);
+insert into t (id,a) values (728,82);
+insert into t (id,a) values (728,83);
+insert into t (id,a) values (728,84);
+insert into t (id,a) values (728,85);
+insert into t (id,a) values (728,86);
+insert into t (id,a) values (728,87);
+insert into t (id,a) values (728,88);
+insert into t (id,a) values (728,89);
+insert into t (id,a) values (728,90);
+insert into t (id,a) values (728,91);
+insert into t (id,a) values (728,92);
+insert into t (id,a) values (728,93);
+insert into t (id,a) values (728,94);
+insert into t (id,a) values (728,95);
+insert into t (id,a) values (728,96);
+insert into t (id,a) values (728,97);
+insert into t (id,a) values (728,98);
+insert into t (id,a) values (728,99);
+insert into t (id,a) values (729,0);
+insert into t (id,a) values (729,1);
+insert into t (id,a) values (729,2);
+insert into t (id,a) values (729,3);
+insert into t (id,a) values (729,4);
+insert into t (id,a) values (729,5);
+insert into t (id,a) values (729,6);
+insert into t (id,a) values (729,7);
+insert into t (id,a) values (729,8);
+insert into t (id,a) values (729,9);
+insert into t (id,a) values (729,10);
+insert into t (id,a) values (729,11);
+insert into t (id,a) values (729,12);
+insert into t (id,a) values (729,13);
+insert into t (id,a) values (729,14);
+insert into t (id,a) values (729,15);
+insert into t (id,a) values (729,16);
+insert into t (id,a) values (729,17);
+insert into t (id,a) values (729,18);
+insert into t (id,a) values (729,19);
+insert into t (id,a) values (729,20);
+insert into t (id,a) values (729,21);
+insert into t (id,a) values (729,22);
+insert into t (id,a) values (729,23);
+insert into t (id,a) values (729,24);
+insert into t (id,a) values (729,25);
+insert into t (id,a) values (729,26);
+insert into t (id,a) values (729,27);
+insert into t (id,a) values (729,28);
+insert into t (id,a) values (729,29);
+insert into t (id,a) values (729,30);
+insert into t (id,a) values (729,31);
+insert into t (id,a) values (729,32);
+insert into t (id,a) values (729,33);
+insert into t (id,a) values (729,34);
+insert into t (id,a) values (729,35);
+insert into t (id,a) values (729,36);
+insert into t (id,a) values (729,37);
+insert into t (id,a) values (729,38);
+insert into t (id,a) values (729,39);
+insert into t (id,a) values (729,40);
+insert into t (id,a) values (729,41);
+insert into t (id,a) values (729,42);
+insert into t (id,a) values (729,43);
+insert into t (id,a) values (729,44);
+insert into t (id,a) values (729,45);
+insert into t (id,a) values (729,46);
+insert into t (id,a) values (729,47);
+insert into t (id,a) values (729,48);
+insert into t (id,a) values (729,49);
+insert into t (id,a) values (729,50);
+insert into t (id,a) values (729,51);
+insert into t (id,a) values (729,52);
+insert into t (id,a) values (729,53);
+insert into t (id,a) values (729,54);
+insert into t (id,a) values (729,55);
+insert into t (id,a) values (729,56);
+insert into t (id,a) values (729,57);
+insert into t (id,a) values (729,58);
+insert into t (id,a) values (729,59);
+insert into t (id,a) values (729,60);
+insert into t (id,a) values (729,61);
+insert into t (id,a) values (729,62);
+insert into t (id,a) values (729,63);
+insert into t (id,a) values (729,64);
+insert into t (id,a) values (729,65);
+insert into t (id,a) values (729,66);
+insert into t (id,a) values (729,67);
+insert into t (id,a) values (729,68);
+insert into t (id,a) values (729,69);
+insert into t (id,a) values (729,70);
+insert into t (id,a) values (729,71);
+insert into t (id,a) values (729,72);
+insert into t (id,a) values (729,73);
+insert into t (id,a) values (729,74);
+insert into t (id,a) values (729,75);
+insert into t (id,a) values (729,76);
+insert into t (id,a) values (729,77);
+insert into t (id,a) values (729,78);
+insert into t (id,a) values (729,79);
+insert into t (id,a) values (729,80);
+insert into t (id,a) values (729,81);
+insert into t (id,a) values (729,82);
+insert into t (id,a) values (729,83);
+insert into t (id,a) values (729,84);
+insert into t (id,a) values (729,85);
+insert into t (id,a) values (729,86);
+insert into t (id,a) values (729,87);
+insert into t (id,a) values (729,88);
+insert into t (id,a) values (729,89);
+insert into t (id,a) values (729,90);
+insert into t (id,a) values (729,91);
+insert into t (id,a) values (729,92);
+insert into t (id,a) values (729,93);
+insert into t (id,a) values (729,94);
+insert into t (id,a) values (729,95);
+insert into t (id,a) values (729,96);
+insert into t (id,a) values (729,97);
+insert into t (id,a) values (729,98);
+insert into t (id,a) values (729,99);
+insert into t (id,a) values (730,0);
+insert into t (id,a) values (730,1);
+insert into t (id,a) values (730,2);
+insert into t (id,a) values (730,3);
+insert into t (id,a) values (730,4);
+insert into t (id,a) values (730,5);
+insert into t (id,a) values (730,6);
+insert into t (id,a) values (730,7);
+insert into t (id,a) values (730,8);
+insert into t (id,a) values (730,9);
+insert into t (id,a) values (730,10);
+insert into t (id,a) values (730,11);
+insert into t (id,a) values (730,12);
+insert into t (id,a) values (730,13);
+insert into t (id,a) values (730,14);
+insert into t (id,a) values (730,15);
+insert into t (id,a) values (730,16);
+insert into t (id,a) values (730,17);
+insert into t (id,a) values (730,18);
+insert into t (id,a) values (730,19);
+insert into t (id,a) values (730,20);
+insert into t (id,a) values (730,21);
+insert into t (id,a) values (730,22);
+insert into t (id,a) values (730,23);
+insert into t (id,a) values (730,24);
+insert into t (id,a) values (730,25);
+insert into t (id,a) values (730,26);
+insert into t (id,a) values (730,27);
+insert into t (id,a) values (730,28);
+insert into t (id,a) values (730,29);
+insert into t (id,a) values (730,30);
+insert into t (id,a) values (730,31);
+insert into t (id,a) values (730,32);
+insert into t (id,a) values (730,33);
+insert into t (id,a) values (730,34);
+insert into t (id,a) values (730,35);
+insert into t (id,a) values (730,36);
+insert into t (id,a) values (730,37);
+insert into t (id,a) values (730,38);
+insert into t (id,a) values (730,39);
+insert into t (id,a) values (730,40);
+insert into t (id,a) values (730,41);
+insert into t (id,a) values (730,42);
+insert into t (id,a) values (730,43);
+insert into t (id,a) values (730,44);
+insert into t (id,a) values (730,45);
+insert into t (id,a) values (730,46);
+insert into t (id,a) values (730,47);
+insert into t (id,a) values (730,48);
+insert into t (id,a) values (730,49);
+insert into t (id,a) values (730,50);
+insert into t (id,a) values (730,51);
+insert into t (id,a) values (730,52);
+insert into t (id,a) values (730,53);
+insert into t (id,a) values (730,54);
+insert into t (id,a) values (730,55);
+insert into t (id,a) values (730,56);
+insert into t (id,a) values (730,57);
+insert into t (id,a) values (730,58);
+insert into t (id,a) values (730,59);
+insert into t (id,a) values (730,60);
+insert into t (id,a) values (730,61);
+insert into t (id,a) values (730,62);
+insert into t (id,a) values (730,63);
+insert into t (id,a) values (730,64);
+insert into t (id,a) values (730,65);
+insert into t (id,a) values (730,66);
+insert into t (id,a) values (730,67);
+insert into t (id,a) values (730,68);
+insert into t (id,a) values (730,69);
+insert into t (id,a) values (730,70);
+insert into t (id,a) values (730,71);
+insert into t (id,a) values (730,72);
+insert into t (id,a) values (730,73);
+insert into t (id,a) values (730,74);
+insert into t (id,a) values (730,75);
+insert into t (id,a) values (730,76);
+insert into t (id,a) values (730,77);
+insert into t (id,a) values (730,78);
+insert into t (id,a) values (730,79);
+insert into t (id,a) values (730,80);
+insert into t (id,a) values (730,81);
+insert into t (id,a) values (730,82);
+insert into t (id,a) values (730,83);
+insert into t (id,a) values (730,84);
+insert into t (id,a) values (730,85);
+insert into t (id,a) values (730,86);
+insert into t (id,a) values (730,87);
+insert into t (id,a) values (730,88);
+insert into t (id,a) values (730,89);
+insert into t (id,a) values (730,90);
+insert into t (id,a) values (730,91);
+insert into t (id,a) values (730,92);
+insert into t (id,a) values (730,93);
+insert into t (id,a) values (730,94);
+insert into t (id,a) values (730,95);
+insert into t (id,a) values (730,96);
+insert into t (id,a) values (730,97);
+insert into t (id,a) values (730,98);
+insert into t (id,a) values (730,99);
+insert into t (id,a) values (731,0);
+insert into t (id,a) values (731,1);
+insert into t (id,a) values (731,2);
+insert into t (id,a) values (731,3);
+insert into t (id,a) values (731,4);
+insert into t (id,a) values (731,5);
+insert into t (id,a) values (731,6);
+insert into t (id,a) values (731,7);
+insert into t (id,a) values (731,8);
+insert into t (id,a) values (731,9);
+insert into t (id,a) values (731,10);
+insert into t (id,a) values (731,11);
+insert into t (id,a) values (731,12);
+insert into t (id,a) values (731,13);
+insert into t (id,a) values (731,14);
+insert into t (id,a) values (731,15);
+insert into t (id,a) values (731,16);
+insert into t (id,a) values (731,17);
+insert into t (id,a) values (731,18);
+insert into t (id,a) values (731,19);
+insert into t (id,a) values (731,20);
+insert into t (id,a) values (731,21);
+insert into t (id,a) values (731,22);
+insert into t (id,a) values (731,23);
+insert into t (id,a) values (731,24);
+insert into t (id,a) values (731,25);
+insert into t (id,a) values (731,26);
+insert into t (id,a) values (731,27);
+insert into t (id,a) values (731,28);
+insert into t (id,a) values (731,29);
+insert into t (id,a) values (731,30);
+insert into t (id,a) values (731,31);
+insert into t (id,a) values (731,32);
+insert into t (id,a) values (731,33);
+insert into t (id,a) values (731,34);
+insert into t (id,a) values (731,35);
+insert into t (id,a) values (731,36);
+insert into t (id,a) values (731,37);
+insert into t (id,a) values (731,38);
+insert into t (id,a) values (731,39);
+insert into t (id,a) values (731,40);
+insert into t (id,a) values (731,41);
+insert into t (id,a) values (731,42);
+insert into t (id,a) values (731,43);
+insert into t (id,a) values (731,44);
+insert into t (id,a) values (731,45);
+insert into t (id,a) values (731,46);
+insert into t (id,a) values (731,47);
+insert into t (id,a) values (731,48);
+insert into t (id,a) values (731,49);
+insert into t (id,a) values (731,50);
+insert into t (id,a) values (731,51);
+insert into t (id,a) values (731,52);
+insert into t (id,a) values (731,53);
+insert into t (id,a) values (731,54);
+insert into t (id,a) values (731,55);
+insert into t (id,a) values (731,56);
+insert into t (id,a) values (731,57);
+insert into t (id,a) values (731,58);
+insert into t (id,a) values (731,59);
+insert into t (id,a) values (731,60);
+insert into t (id,a) values (731,61);
+insert into t (id,a) values (731,62);
+insert into t (id,a) values (731,63);
+insert into t (id,a) values (731,64);
+insert into t (id,a) values (731,65);
+insert into t (id,a) values (731,66);
+insert into t (id,a) values (731,67);
+insert into t (id,a) values (731,68);
+insert into t (id,a) values (731,69);
+insert into t (id,a) values (731,70);
+insert into t (id,a) values (731,71);
+insert into t (id,a) values (731,72);
+insert into t (id,a) values (731,73);
+insert into t (id,a) values (731,74);
+insert into t (id,a) values (731,75);
+insert into t (id,a) values (731,76);
+insert into t (id,a) values (731,77);
+insert into t (id,a) values (731,78);
+insert into t (id,a) values (731,79);
+insert into t (id,a) values (731,80);
+insert into t (id,a) values (731,81);
+insert into t (id,a) values (731,82);
+insert into t (id,a) values (731,83);
+insert into t (id,a) values (731,84);
+insert into t (id,a) values (731,85);
+insert into t (id,a) values (731,86);
+insert into t (id,a) values (731,87);
+insert into t (id,a) values (731,88);
+insert into t (id,a) values (731,89);
+insert into t (id,a) values (731,90);
+insert into t (id,a) values (731,91);
+insert into t (id,a) values (731,92);
+insert into t (id,a) values (731,93);
+insert into t (id,a) values (731,94);
+insert into t (id,a) values (731,95);
+insert into t (id,a) values (731,96);
+insert into t (id,a) values (731,97);
+insert into t (id,a) values (731,98);
+insert into t (id,a) values (731,99);
+insert into t (id,a) values (732,0);
+insert into t (id,a) values (732,1);
+insert into t (id,a) values (732,2);
+insert into t (id,a) values (732,3);
+insert into t (id,a) values (732,4);
+insert into t (id,a) values (732,5);
+insert into t (id,a) values (732,6);
+insert into t (id,a) values (732,7);
+insert into t (id,a) values (732,8);
+insert into t (id,a) values (732,9);
+insert into t (id,a) values (732,10);
+insert into t (id,a) values (732,11);
+insert into t (id,a) values (732,12);
+insert into t (id,a) values (732,13);
+insert into t (id,a) values (732,14);
+insert into t (id,a) values (732,15);
+insert into t (id,a) values (732,16);
+insert into t (id,a) values (732,17);
+insert into t (id,a) values (732,18);
+insert into t (id,a) values (732,19);
+insert into t (id,a) values (732,20);
+insert into t (id,a) values (732,21);
+insert into t (id,a) values (732,22);
+insert into t (id,a) values (732,23);
+insert into t (id,a) values (732,24);
+insert into t (id,a) values (732,25);
+insert into t (id,a) values (732,26);
+insert into t (id,a) values (732,27);
+insert into t (id,a) values (732,28);
+insert into t (id,a) values (732,29);
+insert into t (id,a) values (732,30);
+insert into t (id,a) values (732,31);
+insert into t (id,a) values (732,32);
+insert into t (id,a) values (732,33);
+insert into t (id,a) values (732,34);
+insert into t (id,a) values (732,35);
+insert into t (id,a) values (732,36);
+insert into t (id,a) values (732,37);
+insert into t (id,a) values (732,38);
+insert into t (id,a) values (732,39);
+insert into t (id,a) values (732,40);
+insert into t (id,a) values (732,41);
+insert into t (id,a) values (732,42);
+insert into t (id,a) values (732,43);
+insert into t (id,a) values (732,44);
+insert into t (id,a) values (732,45);
+insert into t (id,a) values (732,46);
+insert into t (id,a) values (732,47);
+insert into t (id,a) values (732,48);
+insert into t (id,a) values (732,49);
+insert into t (id,a) values (732,50);
+insert into t (id,a) values (732,51);
+insert into t (id,a) values (732,52);
+insert into t (id,a) values (732,53);
+insert into t (id,a) values (732,54);
+insert into t (id,a) values (732,55);
+insert into t (id,a) values (732,56);
+insert into t (id,a) values (732,57);
+insert into t (id,a) values (732,58);
+insert into t (id,a) values (732,59);
+insert into t (id,a) values (732,60);
+insert into t (id,a) values (732,61);
+insert into t (id,a) values (732,62);
+insert into t (id,a) values (732,63);
+insert into t (id,a) values (732,64);
+insert into t (id,a) values (732,65);
+insert into t (id,a) values (732,66);
+insert into t (id,a) values (732,67);
+insert into t (id,a) values (732,68);
+insert into t (id,a) values (732,69);
+insert into t (id,a) values (732,70);
+insert into t (id,a) values (732,71);
+insert into t (id,a) values (732,72);
+insert into t (id,a) values (732,73);
+insert into t (id,a) values (732,74);
+insert into t (id,a) values (732,75);
+insert into t (id,a) values (732,76);
+insert into t (id,a) values (732,77);
+insert into t (id,a) values (732,78);
+insert into t (id,a) values (732,79);
+insert into t (id,a) values (732,80);
+insert into t (id,a) values (732,81);
+insert into t (id,a) values (732,82);
+insert into t (id,a) values (732,83);
+insert into t (id,a) values (732,84);
+insert into t (id,a) values (732,85);
+insert into t (id,a) values (732,86);
+insert into t (id,a) values (732,87);
+insert into t (id,a) values (732,88);
+insert into t (id,a) values (732,89);
+insert into t (id,a) values (732,90);
+insert into t (id,a) values (732,91);
+insert into t (id,a) values (732,92);
+insert into t (id,a) values (732,93);
+insert into t (id,a) values (732,94);
+insert into t (id,a) values (732,95);
+insert into t (id,a) values (732,96);
+insert into t (id,a) values (732,97);
+insert into t (id,a) values (732,98);
+insert into t (id,a) values (732,99);
+insert into t (id,a) values (733,0);
+insert into t (id,a) values (733,1);
+insert into t (id,a) values (733,2);
+insert into t (id,a) values (733,3);
+insert into t (id,a) values (733,4);
+insert into t (id,a) values (733,5);
+insert into t (id,a) values (733,6);
+insert into t (id,a) values (733,7);
+insert into t (id,a) values (733,8);
+insert into t (id,a) values (733,9);
+insert into t (id,a) values (733,10);
+insert into t (id,a) values (733,11);
+insert into t (id,a) values (733,12);
+insert into t (id,a) values (733,13);
+insert into t (id,a) values (733,14);
+insert into t (id,a) values (733,15);
+insert into t (id,a) values (733,16);
+insert into t (id,a) values (733,17);
+insert into t (id,a) values (733,18);
+insert into t (id,a) values (733,19);
+insert into t (id,a) values (733,20);
+insert into t (id,a) values (733,21);
+insert into t (id,a) values (733,22);
+insert into t (id,a) values (733,23);
+insert into t (id,a) values (733,24);
+insert into t (id,a) values (733,25);
+insert into t (id,a) values (733,26);
+insert into t (id,a) values (733,27);
+insert into t (id,a) values (733,28);
+insert into t (id,a) values (733,29);
+insert into t (id,a) values (733,30);
+insert into t (id,a) values (733,31);
+insert into t (id,a) values (733,32);
+insert into t (id,a) values (733,33);
+insert into t (id,a) values (733,34);
+insert into t (id,a) values (733,35);
+insert into t (id,a) values (733,36);
+insert into t (id,a) values (733,37);
+insert into t (id,a) values (733,38);
+insert into t (id,a) values (733,39);
+insert into t (id,a) values (733,40);
+insert into t (id,a) values (733,41);
+insert into t (id,a) values (733,42);
+insert into t (id,a) values (733,43);
+insert into t (id,a) values (733,44);
+insert into t (id,a) values (733,45);
+insert into t (id,a) values (733,46);
+insert into t (id,a) values (733,47);
+insert into t (id,a) values (733,48);
+insert into t (id,a) values (733,49);
+insert into t (id,a) values (733,50);
+insert into t (id,a) values (733,51);
+insert into t (id,a) values (733,52);
+insert into t (id,a) values (733,53);
+insert into t (id,a) values (733,54);
+insert into t (id,a) values (733,55);
+insert into t (id,a) values (733,56);
+insert into t (id,a) values (733,57);
+insert into t (id,a) values (733,58);
+insert into t (id,a) values (733,59);
+insert into t (id,a) values (733,60);
+insert into t (id,a) values (733,61);
+insert into t (id,a) values (733,62);
+insert into t (id,a) values (733,63);
+insert into t (id,a) values (733,64);
+insert into t (id,a) values (733,65);
+insert into t (id,a) values (733,66);
+insert into t (id,a) values (733,67);
+insert into t (id,a) values (733,68);
+insert into t (id,a) values (733,69);
+insert into t (id,a) values (733,70);
+insert into t (id,a) values (733,71);
+insert into t (id,a) values (733,72);
+insert into t (id,a) values (733,73);
+insert into t (id,a) values (733,74);
+insert into t (id,a) values (733,75);
+insert into t (id,a) values (733,76);
+insert into t (id,a) values (733,77);
+insert into t (id,a) values (733,78);
+insert into t (id,a) values (733,79);
+insert into t (id,a) values (733,80);
+insert into t (id,a) values (733,81);
+insert into t (id,a) values (733,82);
+insert into t (id,a) values (733,83);
+insert into t (id,a) values (733,84);
+insert into t (id,a) values (733,85);
+insert into t (id,a) values (733,86);
+insert into t (id,a) values (733,87);
+insert into t (id,a) values (733,88);
+insert into t (id,a) values (733,89);
+insert into t (id,a) values (733,90);
+insert into t (id,a) values (733,91);
+insert into t (id,a) values (733,92);
+insert into t (id,a) values (733,93);
+insert into t (id,a) values (733,94);
+insert into t (id,a) values (733,95);
+insert into t (id,a) values (733,96);
+insert into t (id,a) values (733,97);
+insert into t (id,a) values (733,98);
+insert into t (id,a) values (733,99);
+insert into t (id,a) values (734,0);
+insert into t (id,a) values (734,1);
+insert into t (id,a) values (734,2);
+insert into t (id,a) values (734,3);
+insert into t (id,a) values (734,4);
+insert into t (id,a) values (734,5);
+insert into t (id,a) values (734,6);
+insert into t (id,a) values (734,7);
+insert into t (id,a) values (734,8);
+insert into t (id,a) values (734,9);
+insert into t (id,a) values (734,10);
+insert into t (id,a) values (734,11);
+insert into t (id,a) values (734,12);
+insert into t (id,a) values (734,13);
+insert into t (id,a) values (734,14);
+insert into t (id,a) values (734,15);
+insert into t (id,a) values (734,16);
+insert into t (id,a) values (734,17);
+insert into t (id,a) values (734,18);
+insert into t (id,a) values (734,19);
+insert into t (id,a) values (734,20);
+insert into t (id,a) values (734,21);
+insert into t (id,a) values (734,22);
+insert into t (id,a) values (734,23);
+insert into t (id,a) values (734,24);
+insert into t (id,a) values (734,25);
+insert into t (id,a) values (734,26);
+insert into t (id,a) values (734,27);
+insert into t (id,a) values (734,28);
+insert into t (id,a) values (734,29);
+insert into t (id,a) values (734,30);
+insert into t (id,a) values (734,31);
+insert into t (id,a) values (734,32);
+insert into t (id,a) values (734,33);
+insert into t (id,a) values (734,34);
+insert into t (id,a) values (734,35);
+insert into t (id,a) values (734,36);
+insert into t (id,a) values (734,37);
+insert into t (id,a) values (734,38);
+insert into t (id,a) values (734,39);
+insert into t (id,a) values (734,40);
+insert into t (id,a) values (734,41);
+insert into t (id,a) values (734,42);
+insert into t (id,a) values (734,43);
+insert into t (id,a) values (734,44);
+insert into t (id,a) values (734,45);
+insert into t (id,a) values (734,46);
+insert into t (id,a) values (734,47);
+insert into t (id,a) values (734,48);
+insert into t (id,a) values (734,49);
+insert into t (id,a) values (734,50);
+insert into t (id,a) values (734,51);
+insert into t (id,a) values (734,52);
+insert into t (id,a) values (734,53);
+insert into t (id,a) values (734,54);
+insert into t (id,a) values (734,55);
+insert into t (id,a) values (734,56);
+insert into t (id,a) values (734,57);
+insert into t (id,a) values (734,58);
+insert into t (id,a) values (734,59);
+insert into t (id,a) values (734,60);
+insert into t (id,a) values (734,61);
+insert into t (id,a) values (734,62);
+insert into t (id,a) values (734,63);
+insert into t (id,a) values (734,64);
+insert into t (id,a) values (734,65);
+insert into t (id,a) values (734,66);
+insert into t (id,a) values (734,67);
+insert into t (id,a) values (734,68);
+insert into t (id,a) values (734,69);
+insert into t (id,a) values (734,70);
+insert into t (id,a) values (734,71);
+insert into t (id,a) values (734,72);
+insert into t (id,a) values (734,73);
+insert into t (id,a) values (734,74);
+insert into t (id,a) values (734,75);
+insert into t (id,a) values (734,76);
+insert into t (id,a) values (734,77);
+insert into t (id,a) values (734,78);
+insert into t (id,a) values (734,79);
+insert into t (id,a) values (734,80);
+insert into t (id,a) values (734,81);
+insert into t (id,a) values (734,82);
+insert into t (id,a) values (734,83);
+insert into t (id,a) values (734,84);
+insert into t (id,a) values (734,85);
+insert into t (id,a) values (734,86);
+insert into t (id,a) values (734,87);
+insert into t (id,a) values (734,88);
+insert into t (id,a) values (734,89);
+insert into t (id,a) values (734,90);
+insert into t (id,a) values (734,91);
+insert into t (id,a) values (734,92);
+insert into t (id,a) values (734,93);
+insert into t (id,a) values (734,94);
+insert into t (id,a) values (734,95);
+insert into t (id,a) values (734,96);
+insert into t (id,a) values (734,97);
+insert into t (id,a) values (734,98);
+insert into t (id,a) values (734,99);
+insert into t (id,a) values (735,0);
+insert into t (id,a) values (735,1);
+insert into t (id,a) values (735,2);
+insert into t (id,a) values (735,3);
+insert into t (id,a) values (735,4);
+insert into t (id,a) values (735,5);
+insert into t (id,a) values (735,6);
+insert into t (id,a) values (735,7);
+insert into t (id,a) values (735,8);
+insert into t (id,a) values (735,9);
+insert into t (id,a) values (735,10);
+insert into t (id,a) values (735,11);
+insert into t (id,a) values (735,12);
+insert into t (id,a) values (735,13);
+insert into t (id,a) values (735,14);
+insert into t (id,a) values (735,15);
+insert into t (id,a) values (735,16);
+insert into t (id,a) values (735,17);
+insert into t (id,a) values (735,18);
+insert into t (id,a) values (735,19);
+insert into t (id,a) values (735,20);
+insert into t (id,a) values (735,21);
+insert into t (id,a) values (735,22);
+insert into t (id,a) values (735,23);
+insert into t (id,a) values (735,24);
+insert into t (id,a) values (735,25);
+insert into t (id,a) values (735,26);
+insert into t (id,a) values (735,27);
+insert into t (id,a) values (735,28);
+insert into t (id,a) values (735,29);
+insert into t (id,a) values (735,30);
+insert into t (id,a) values (735,31);
+insert into t (id,a) values (735,32);
+insert into t (id,a) values (735,33);
+insert into t (id,a) values (735,34);
+insert into t (id,a) values (735,35);
+insert into t (id,a) values (735,36);
+insert into t (id,a) values (735,37);
+insert into t (id,a) values (735,38);
+insert into t (id,a) values (735,39);
+insert into t (id,a) values (735,40);
+insert into t (id,a) values (735,41);
+insert into t (id,a) values (735,42);
+insert into t (id,a) values (735,43);
+insert into t (id,a) values (735,44);
+insert into t (id,a) values (735,45);
+insert into t (id,a) values (735,46);
+insert into t (id,a) values (735,47);
+insert into t (id,a) values (735,48);
+insert into t (id,a) values (735,49);
+insert into t (id,a) values (735,50);
+insert into t (id,a) values (735,51);
+insert into t (id,a) values (735,52);
+insert into t (id,a) values (735,53);
+insert into t (id,a) values (735,54);
+insert into t (id,a) values (735,55);
+insert into t (id,a) values (735,56);
+insert into t (id,a) values (735,57);
+insert into t (id,a) values (735,58);
+insert into t (id,a) values (735,59);
+insert into t (id,a) values (735,60);
+insert into t (id,a) values (735,61);
+insert into t (id,a) values (735,62);
+insert into t (id,a) values (735,63);
+insert into t (id,a) values (735,64);
+insert into t (id,a) values (735,65);
+insert into t (id,a) values (735,66);
+insert into t (id,a) values (735,67);
+insert into t (id,a) values (735,68);
+insert into t (id,a) values (735,69);
+insert into t (id,a) values (735,70);
+insert into t (id,a) values (735,71);
+insert into t (id,a) values (735,72);
+insert into t (id,a) values (735,73);
+insert into t (id,a) values (735,74);
+insert into t (id,a) values (735,75);
+insert into t (id,a) values (735,76);
+insert into t (id,a) values (735,77);
+insert into t (id,a) values (735,78);
+insert into t (id,a) values (735,79);
+insert into t (id,a) values (735,80);
+insert into t (id,a) values (735,81);
+insert into t (id,a) values (735,82);
+insert into t (id,a) values (735,83);
+insert into t (id,a) values (735,84);
+insert into t (id,a) values (735,85);
+insert into t (id,a) values (735,86);
+insert into t (id,a) values (735,87);
+insert into t (id,a) values (735,88);
+insert into t (id,a) values (735,89);
+insert into t (id,a) values (735,90);
+insert into t (id,a) values (735,91);
+insert into t (id,a) values (735,92);
+insert into t (id,a) values (735,93);
+insert into t (id,a) values (735,94);
+insert into t (id,a) values (735,95);
+insert into t (id,a) values (735,96);
+insert into t (id,a) values (735,97);
+insert into t (id,a) values (735,98);
+insert into t (id,a) values (735,99);
+insert into t (id,a) values (736,0);
+insert into t (id,a) values (736,1);
+insert into t (id,a) values (736,2);
+insert into t (id,a) values (736,3);
+insert into t (id,a) values (736,4);
+insert into t (id,a) values (736,5);
+insert into t (id,a) values (736,6);
+insert into t (id,a) values (736,7);
+insert into t (id,a) values (736,8);
+insert into t (id,a) values (736,9);
+insert into t (id,a) values (736,10);
+insert into t (id,a) values (736,11);
+insert into t (id,a) values (736,12);
+insert into t (id,a) values (736,13);
+insert into t (id,a) values (736,14);
+insert into t (id,a) values (736,15);
+insert into t (id,a) values (736,16);
+insert into t (id,a) values (736,17);
+insert into t (id,a) values (736,18);
+insert into t (id,a) values (736,19);
+insert into t (id,a) values (736,20);
+insert into t (id,a) values (736,21);
+insert into t (id,a) values (736,22);
+insert into t (id,a) values (736,23);
+insert into t (id,a) values (736,24);
+insert into t (id,a) values (736,25);
+insert into t (id,a) values (736,26);
+insert into t (id,a) values (736,27);
+insert into t (id,a) values (736,28);
+insert into t (id,a) values (736,29);
+insert into t (id,a) values (736,30);
+insert into t (id,a) values (736,31);
+insert into t (id,a) values (736,32);
+insert into t (id,a) values (736,33);
+insert into t (id,a) values (736,34);
+insert into t (id,a) values (736,35);
+insert into t (id,a) values (736,36);
+insert into t (id,a) values (736,37);
+insert into t (id,a) values (736,38);
+insert into t (id,a) values (736,39);
+insert into t (id,a) values (736,40);
+insert into t (id,a) values (736,41);
+insert into t (id,a) values (736,42);
+insert into t (id,a) values (736,43);
+insert into t (id,a) values (736,44);
+insert into t (id,a) values (736,45);
+insert into t (id,a) values (736,46);
+insert into t (id,a) values (736,47);
+insert into t (id,a) values (736,48);
+insert into t (id,a) values (736,49);
+insert into t (id,a) values (736,50);
+insert into t (id,a) values (736,51);
+insert into t (id,a) values (736,52);
+insert into t (id,a) values (736,53);
+insert into t (id,a) values (736,54);
+insert into t (id,a) values (736,55);
+insert into t (id,a) values (736,56);
+insert into t (id,a) values (736,57);
+insert into t (id,a) values (736,58);
+insert into t (id,a) values (736,59);
+insert into t (id,a) values (736,60);
+insert into t (id,a) values (736,61);
+insert into t (id,a) values (736,62);
+insert into t (id,a) values (736,63);
+insert into t (id,a) values (736,64);
+insert into t (id,a) values (736,65);
+insert into t (id,a) values (736,66);
+insert into t (id,a) values (736,67);
+insert into t (id,a) values (736,68);
+insert into t (id,a) values (736,69);
+insert into t (id,a) values (736,70);
+insert into t (id,a) values (736,71);
+insert into t (id,a) values (736,72);
+insert into t (id,a) values (736,73);
+insert into t (id,a) values (736,74);
+insert into t (id,a) values (736,75);
+insert into t (id,a) values (736,76);
+insert into t (id,a) values (736,77);
+insert into t (id,a) values (736,78);
+insert into t (id,a) values (736,79);
+insert into t (id,a) values (736,80);
+insert into t (id,a) values (736,81);
+insert into t (id,a) values (736,82);
+insert into t (id,a) values (736,83);
+insert into t (id,a) values (736,84);
+insert into t (id,a) values (736,85);
+insert into t (id,a) values (736,86);
+insert into t (id,a) values (736,87);
+insert into t (id,a) values (736,88);
+insert into t (id,a) values (736,89);
+insert into t (id,a) values (736,90);
+insert into t (id,a) values (736,91);
+insert into t (id,a) values (736,92);
+insert into t (id,a) values (736,93);
+insert into t (id,a) values (736,94);
+insert into t (id,a) values (736,95);
+insert into t (id,a) values (736,96);
+insert into t (id,a) values (736,97);
+insert into t (id,a) values (736,98);
+insert into t (id,a) values (736,99);
+insert into t (id,a) values (737,0);
+insert into t (id,a) values (737,1);
+insert into t (id,a) values (737,2);
+insert into t (id,a) values (737,3);
+insert into t (id,a) values (737,4);
+insert into t (id,a) values (737,5);
+insert into t (id,a) values (737,6);
+insert into t (id,a) values (737,7);
+insert into t (id,a) values (737,8);
+insert into t (id,a) values (737,9);
+insert into t (id,a) values (737,10);
+insert into t (id,a) values (737,11);
+insert into t (id,a) values (737,12);
+insert into t (id,a) values (737,13);
+insert into t (id,a) values (737,14);
+insert into t (id,a) values (737,15);
+insert into t (id,a) values (737,16);
+insert into t (id,a) values (737,17);
+insert into t (id,a) values (737,18);
+insert into t (id,a) values (737,19);
+insert into t (id,a) values (737,20);
+insert into t (id,a) values (737,21);
+insert into t (id,a) values (737,22);
+insert into t (id,a) values (737,23);
+insert into t (id,a) values (737,24);
+insert into t (id,a) values (737,25);
+insert into t (id,a) values (737,26);
+insert into t (id,a) values (737,27);
+insert into t (id,a) values (737,28);
+insert into t (id,a) values (737,29);
+insert into t (id,a) values (737,30);
+insert into t (id,a) values (737,31);
+insert into t (id,a) values (737,32);
+insert into t (id,a) values (737,33);
+insert into t (id,a) values (737,34);
+insert into t (id,a) values (737,35);
+insert into t (id,a) values (737,36);
+insert into t (id,a) values (737,37);
+insert into t (id,a) values (737,38);
+insert into t (id,a) values (737,39);
+insert into t (id,a) values (737,40);
+insert into t (id,a) values (737,41);
+insert into t (id,a) values (737,42);
+insert into t (id,a) values (737,43);
+insert into t (id,a) values (737,44);
+insert into t (id,a) values (737,45);
+insert into t (id,a) values (737,46);
+insert into t (id,a) values (737,47);
+insert into t (id,a) values (737,48);
+insert into t (id,a) values (737,49);
+insert into t (id,a) values (737,50);
+insert into t (id,a) values (737,51);
+insert into t (id,a) values (737,52);
+insert into t (id,a) values (737,53);
+insert into t (id,a) values (737,54);
+insert into t (id,a) values (737,55);
+insert into t (id,a) values (737,56);
+insert into t (id,a) values (737,57);
+insert into t (id,a) values (737,58);
+insert into t (id,a) values (737,59);
+insert into t (id,a) values (737,60);
+insert into t (id,a) values (737,61);
+insert into t (id,a) values (737,62);
+insert into t (id,a) values (737,63);
+insert into t (id,a) values (737,64);
+insert into t (id,a) values (737,65);
+insert into t (id,a) values (737,66);
+insert into t (id,a) values (737,67);
+insert into t (id,a) values (737,68);
+insert into t (id,a) values (737,69);
+insert into t (id,a) values (737,70);
+insert into t (id,a) values (737,71);
+insert into t (id,a) values (737,72);
+insert into t (id,a) values (737,73);
+insert into t (id,a) values (737,74);
+insert into t (id,a) values (737,75);
+insert into t (id,a) values (737,76);
+insert into t (id,a) values (737,77);
+insert into t (id,a) values (737,78);
+insert into t (id,a) values (737,79);
+insert into t (id,a) values (737,80);
+insert into t (id,a) values (737,81);
+insert into t (id,a) values (737,82);
+insert into t (id,a) values (737,83);
+insert into t (id,a) values (737,84);
+insert into t (id,a) values (737,85);
+insert into t (id,a) values (737,86);
+insert into t (id,a) values (737,87);
+insert into t (id,a) values (737,88);
+insert into t (id,a) values (737,89);
+insert into t (id,a) values (737,90);
+insert into t (id,a) values (737,91);
+insert into t (id,a) values (737,92);
+insert into t (id,a) values (737,93);
+insert into t (id,a) values (737,94);
+insert into t (id,a) values (737,95);
+insert into t (id,a) values (737,96);
+insert into t (id,a) values (737,97);
+insert into t (id,a) values (737,98);
+insert into t (id,a) values (737,99);
+insert into t (id,a) values (738,0);
+insert into t (id,a) values (738,1);
+insert into t (id,a) values (738,2);
+insert into t (id,a) values (738,3);
+insert into t (id,a) values (738,4);
+insert into t (id,a) values (738,5);
+insert into t (id,a) values (738,6);
+insert into t (id,a) values (738,7);
+insert into t (id,a) values (738,8);
+insert into t (id,a) values (738,9);
+insert into t (id,a) values (738,10);
+insert into t (id,a) values (738,11);
+insert into t (id,a) values (738,12);
+insert into t (id,a) values (738,13);
+insert into t (id,a) values (738,14);
+insert into t (id,a) values (738,15);
+insert into t (id,a) values (738,16);
+insert into t (id,a) values (738,17);
+insert into t (id,a) values (738,18);
+insert into t (id,a) values (738,19);
+insert into t (id,a) values (738,20);
+insert into t (id,a) values (738,21);
+insert into t (id,a) values (738,22);
+insert into t (id,a) values (738,23);
+insert into t (id,a) values (738,24);
+insert into t (id,a) values (738,25);
+insert into t (id,a) values (738,26);
+insert into t (id,a) values (738,27);
+insert into t (id,a) values (738,28);
+insert into t (id,a) values (738,29);
+insert into t (id,a) values (738,30);
+insert into t (id,a) values (738,31);
+insert into t (id,a) values (738,32);
+insert into t (id,a) values (738,33);
+insert into t (id,a) values (738,34);
+insert into t (id,a) values (738,35);
+insert into t (id,a) values (738,36);
+insert into t (id,a) values (738,37);
+insert into t (id,a) values (738,38);
+insert into t (id,a) values (738,39);
+insert into t (id,a) values (738,40);
+insert into t (id,a) values (738,41);
+insert into t (id,a) values (738,42);
+insert into t (id,a) values (738,43);
+insert into t (id,a) values (738,44);
+insert into t (id,a) values (738,45);
+insert into t (id,a) values (738,46);
+insert into t (id,a) values (738,47);
+insert into t (id,a) values (738,48);
+insert into t (id,a) values (738,49);
+insert into t (id,a) values (738,50);
+insert into t (id,a) values (738,51);
+insert into t (id,a) values (738,52);
+insert into t (id,a) values (738,53);
+insert into t (id,a) values (738,54);
+insert into t (id,a) values (738,55);
+insert into t (id,a) values (738,56);
+insert into t (id,a) values (738,57);
+insert into t (id,a) values (738,58);
+insert into t (id,a) values (738,59);
+insert into t (id,a) values (738,60);
+insert into t (id,a) values (738,61);
+insert into t (id,a) values (738,62);
+insert into t (id,a) values (738,63);
+insert into t (id,a) values (738,64);
+insert into t (id,a) values (738,65);
+insert into t (id,a) values (738,66);
+insert into t (id,a) values (738,67);
+insert into t (id,a) values (738,68);
+insert into t (id,a) values (738,69);
+insert into t (id,a) values (738,70);
+insert into t (id,a) values (738,71);
+insert into t (id,a) values (738,72);
+insert into t (id,a) values (738,73);
+insert into t (id,a) values (738,74);
+insert into t (id,a) values (738,75);
+insert into t (id,a) values (738,76);
+insert into t (id,a) values (738,77);
+insert into t (id,a) values (738,78);
+insert into t (id,a) values (738,79);
+insert into t (id,a) values (738,80);
+insert into t (id,a) values (738,81);
+insert into t (id,a) values (738,82);
+insert into t (id,a) values (738,83);
+insert into t (id,a) values (738,84);
+insert into t (id,a) values (738,85);
+insert into t (id,a) values (738,86);
+insert into t (id,a) values (738,87);
+insert into t (id,a) values (738,88);
+insert into t (id,a) values (738,89);
+insert into t (id,a) values (738,90);
+insert into t (id,a) values (738,91);
+insert into t (id,a) values (738,92);
+insert into t (id,a) values (738,93);
+insert into t (id,a) values (738,94);
+insert into t (id,a) values (738,95);
+insert into t (id,a) values (738,96);
+insert into t (id,a) values (738,97);
+insert into t (id,a) values (738,98);
+insert into t (id,a) values (738,99);
+insert into t (id,a) values (739,0);
+insert into t (id,a) values (739,1);
+insert into t (id,a) values (739,2);
+insert into t (id,a) values (739,3);
+insert into t (id,a) values (739,4);
+insert into t (id,a) values (739,5);
+insert into t (id,a) values (739,6);
+insert into t (id,a) values (739,7);
+insert into t (id,a) values (739,8);
+insert into t (id,a) values (739,9);
+insert into t (id,a) values (739,10);
+insert into t (id,a) values (739,11);
+insert into t (id,a) values (739,12);
+insert into t (id,a) values (739,13);
+insert into t (id,a) values (739,14);
+insert into t (id,a) values (739,15);
+insert into t (id,a) values (739,16);
+insert into t (id,a) values (739,17);
+insert into t (id,a) values (739,18);
+insert into t (id,a) values (739,19);
+insert into t (id,a) values (739,20);
+insert into t (id,a) values (739,21);
+insert into t (id,a) values (739,22);
+insert into t (id,a) values (739,23);
+insert into t (id,a) values (739,24);
+insert into t (id,a) values (739,25);
+insert into t (id,a) values (739,26);
+insert into t (id,a) values (739,27);
+insert into t (id,a) values (739,28);
+insert into t (id,a) values (739,29);
+insert into t (id,a) values (739,30);
+insert into t (id,a) values (739,31);
+insert into t (id,a) values (739,32);
+insert into t (id,a) values (739,33);
+insert into t (id,a) values (739,34);
+insert into t (id,a) values (739,35);
+insert into t (id,a) values (739,36);
+insert into t (id,a) values (739,37);
+insert into t (id,a) values (739,38);
+insert into t (id,a) values (739,39);
+insert into t (id,a) values (739,40);
+insert into t (id,a) values (739,41);
+insert into t (id,a) values (739,42);
+insert into t (id,a) values (739,43);
+insert into t (id,a) values (739,44);
+insert into t (id,a) values (739,45);
+insert into t (id,a) values (739,46);
+insert into t (id,a) values (739,47);
+insert into t (id,a) values (739,48);
+insert into t (id,a) values (739,49);
+insert into t (id,a) values (739,50);
+insert into t (id,a) values (739,51);
+insert into t (id,a) values (739,52);
+insert into t (id,a) values (739,53);
+insert into t (id,a) values (739,54);
+insert into t (id,a) values (739,55);
+insert into t (id,a) values (739,56);
+insert into t (id,a) values (739,57);
+insert into t (id,a) values (739,58);
+insert into t (id,a) values (739,59);
+insert into t (id,a) values (739,60);
+insert into t (id,a) values (739,61);
+insert into t (id,a) values (739,62);
+insert into t (id,a) values (739,63);
+insert into t (id,a) values (739,64);
+insert into t (id,a) values (739,65);
+insert into t (id,a) values (739,66);
+insert into t (id,a) values (739,67);
+insert into t (id,a) values (739,68);
+insert into t (id,a) values (739,69);
+insert into t (id,a) values (739,70);
+insert into t (id,a) values (739,71);
+insert into t (id,a) values (739,72);
+insert into t (id,a) values (739,73);
+insert into t (id,a) values (739,74);
+insert into t (id,a) values (739,75);
+insert into t (id,a) values (739,76);
+insert into t (id,a) values (739,77);
+insert into t (id,a) values (739,78);
+insert into t (id,a) values (739,79);
+insert into t (id,a) values (739,80);
+insert into t (id,a) values (739,81);
+insert into t (id,a) values (739,82);
+insert into t (id,a) values (739,83);
+insert into t (id,a) values (739,84);
+insert into t (id,a) values (739,85);
+insert into t (id,a) values (739,86);
+insert into t (id,a) values (739,87);
+insert into t (id,a) values (739,88);
+insert into t (id,a) values (739,89);
+insert into t (id,a) values (739,90);
+insert into t (id,a) values (739,91);
+insert into t (id,a) values (739,92);
+insert into t (id,a) values (739,93);
+insert into t (id,a) values (739,94);
+insert into t (id,a) values (739,95);
+insert into t (id,a) values (739,96);
+insert into t (id,a) values (739,97);
+insert into t (id,a) values (739,98);
+insert into t (id,a) values (739,99);
+insert into t (id,a) values (740,0);
+insert into t (id,a) values (740,1);
+insert into t (id,a) values (740,2);
+insert into t (id,a) values (740,3);
+insert into t (id,a) values (740,4);
+insert into t (id,a) values (740,5);
+insert into t (id,a) values (740,6);
+insert into t (id,a) values (740,7);
+insert into t (id,a) values (740,8);
+insert into t (id,a) values (740,9);
+insert into t (id,a) values (740,10);
+insert into t (id,a) values (740,11);
+insert into t (id,a) values (740,12);
+insert into t (id,a) values (740,13);
+insert into t (id,a) values (740,14);
+insert into t (id,a) values (740,15);
+insert into t (id,a) values (740,16);
+insert into t (id,a) values (740,17);
+insert into t (id,a) values (740,18);
+insert into t (id,a) values (740,19);
+insert into t (id,a) values (740,20);
+insert into t (id,a) values (740,21);
+insert into t (id,a) values (740,22);
+insert into t (id,a) values (740,23);
+insert into t (id,a) values (740,24);
+insert into t (id,a) values (740,25);
+insert into t (id,a) values (740,26);
+insert into t (id,a) values (740,27);
+insert into t (id,a) values (740,28);
+insert into t (id,a) values (740,29);
+insert into t (id,a) values (740,30);
+insert into t (id,a) values (740,31);
+insert into t (id,a) values (740,32);
+insert into t (id,a) values (740,33);
+insert into t (id,a) values (740,34);
+insert into t (id,a) values (740,35);
+insert into t (id,a) values (740,36);
+insert into t (id,a) values (740,37);
+insert into t (id,a) values (740,38);
+insert into t (id,a) values (740,39);
+insert into t (id,a) values (740,40);
+insert into t (id,a) values (740,41);
+insert into t (id,a) values (740,42);
+insert into t (id,a) values (740,43);
+insert into t (id,a) values (740,44);
+insert into t (id,a) values (740,45);
+insert into t (id,a) values (740,46);
+insert into t (id,a) values (740,47);
+insert into t (id,a) values (740,48);
+insert into t (id,a) values (740,49);
+insert into t (id,a) values (740,50);
+insert into t (id,a) values (740,51);
+insert into t (id,a) values (740,52);
+insert into t (id,a) values (740,53);
+insert into t (id,a) values (740,54);
+insert into t (id,a) values (740,55);
+insert into t (id,a) values (740,56);
+insert into t (id,a) values (740,57);
+insert into t (id,a) values (740,58);
+insert into t (id,a) values (740,59);
+insert into t (id,a) values (740,60);
+insert into t (id,a) values (740,61);
+insert into t (id,a) values (740,62);
+insert into t (id,a) values (740,63);
+insert into t (id,a) values (740,64);
+insert into t (id,a) values (740,65);
+insert into t (id,a) values (740,66);
+insert into t (id,a) values (740,67);
+insert into t (id,a) values (740,68);
+insert into t (id,a) values (740,69);
+insert into t (id,a) values (740,70);
+insert into t (id,a) values (740,71);
+insert into t (id,a) values (740,72);
+insert into t (id,a) values (740,73);
+insert into t (id,a) values (740,74);
+insert into t (id,a) values (740,75);
+insert into t (id,a) values (740,76);
+insert into t (id,a) values (740,77);
+insert into t (id,a) values (740,78);
+insert into t (id,a) values (740,79);
+insert into t (id,a) values (740,80);
+insert into t (id,a) values (740,81);
+insert into t (id,a) values (740,82);
+insert into t (id,a) values (740,83);
+insert into t (id,a) values (740,84);
+insert into t (id,a) values (740,85);
+insert into t (id,a) values (740,86);
+insert into t (id,a) values (740,87);
+insert into t (id,a) values (740,88);
+insert into t (id,a) values (740,89);
+insert into t (id,a) values (740,90);
+insert into t (id,a) values (740,91);
+insert into t (id,a) values (740,92);
+insert into t (id,a) values (740,93);
+insert into t (id,a) values (740,94);
+insert into t (id,a) values (740,95);
+insert into t (id,a) values (740,96);
+insert into t (id,a) values (740,97);
+insert into t (id,a) values (740,98);
+insert into t (id,a) values (740,99);
+insert into t (id,a) values (741,0);
+insert into t (id,a) values (741,1);
+insert into t (id,a) values (741,2);
+insert into t (id,a) values (741,3);
+insert into t (id,a) values (741,4);
+insert into t (id,a) values (741,5);
+insert into t (id,a) values (741,6);
+insert into t (id,a) values (741,7);
+insert into t (id,a) values (741,8);
+insert into t (id,a) values (741,9);
+insert into t (id,a) values (741,10);
+insert into t (id,a) values (741,11);
+insert into t (id,a) values (741,12);
+insert into t (id,a) values (741,13);
+insert into t (id,a) values (741,14);
+insert into t (id,a) values (741,15);
+insert into t (id,a) values (741,16);
+insert into t (id,a) values (741,17);
+insert into t (id,a) values (741,18);
+insert into t (id,a) values (741,19);
+insert into t (id,a) values (741,20);
+insert into t (id,a) values (741,21);
+insert into t (id,a) values (741,22);
+insert into t (id,a) values (741,23);
+insert into t (id,a) values (741,24);
+insert into t (id,a) values (741,25);
+insert into t (id,a) values (741,26);
+insert into t (id,a) values (741,27);
+insert into t (id,a) values (741,28);
+insert into t (id,a) values (741,29);
+insert into t (id,a) values (741,30);
+insert into t (id,a) values (741,31);
+insert into t (id,a) values (741,32);
+insert into t (id,a) values (741,33);
+insert into t (id,a) values (741,34);
+insert into t (id,a) values (741,35);
+insert into t (id,a) values (741,36);
+insert into t (id,a) values (741,37);
+insert into t (id,a) values (741,38);
+insert into t (id,a) values (741,39);
+insert into t (id,a) values (741,40);
+insert into t (id,a) values (741,41);
+insert into t (id,a) values (741,42);
+insert into t (id,a) values (741,43);
+insert into t (id,a) values (741,44);
+insert into t (id,a) values (741,45);
+insert into t (id,a) values (741,46);
+insert into t (id,a) values (741,47);
+insert into t (id,a) values (741,48);
+insert into t (id,a) values (741,49);
+insert into t (id,a) values (741,50);
+insert into t (id,a) values (741,51);
+insert into t (id,a) values (741,52);
+insert into t (id,a) values (741,53);
+insert into t (id,a) values (741,54);
+insert into t (id,a) values (741,55);
+insert into t (id,a) values (741,56);
+insert into t (id,a) values (741,57);
+insert into t (id,a) values (741,58);
+insert into t (id,a) values (741,59);
+insert into t (id,a) values (741,60);
+insert into t (id,a) values (741,61);
+insert into t (id,a) values (741,62);
+insert into t (id,a) values (741,63);
+insert into t (id,a) values (741,64);
+insert into t (id,a) values (741,65);
+insert into t (id,a) values (741,66);
+insert into t (id,a) values (741,67);
+insert into t (id,a) values (741,68);
+insert into t (id,a) values (741,69);
+insert into t (id,a) values (741,70);
+insert into t (id,a) values (741,71);
+insert into t (id,a) values (741,72);
+insert into t (id,a) values (741,73);
+insert into t (id,a) values (741,74);
+insert into t (id,a) values (741,75);
+insert into t (id,a) values (741,76);
+insert into t (id,a) values (741,77);
+insert into t (id,a) values (741,78);
+insert into t (id,a) values (741,79);
+insert into t (id,a) values (741,80);
+insert into t (id,a) values (741,81);
+insert into t (id,a) values (741,82);
+insert into t (id,a) values (741,83);
+insert into t (id,a) values (741,84);
+insert into t (id,a) values (741,85);
+insert into t (id,a) values (741,86);
+insert into t (id,a) values (741,87);
+insert into t (id,a) values (741,88);
+insert into t (id,a) values (741,89);
+insert into t (id,a) values (741,90);
+insert into t (id,a) values (741,91);
+insert into t (id,a) values (741,92);
+insert into t (id,a) values (741,93);
+insert into t (id,a) values (741,94);
+insert into t (id,a) values (741,95);
+insert into t (id,a) values (741,96);
+insert into t (id,a) values (741,97);
+insert into t (id,a) values (741,98);
+insert into t (id,a) values (741,99);
+insert into t (id,a) values (742,0);
+insert into t (id,a) values (742,1);
+insert into t (id,a) values (742,2);
+insert into t (id,a) values (742,3);
+insert into t (id,a) values (742,4);
+insert into t (id,a) values (742,5);
+insert into t (id,a) values (742,6);
+insert into t (id,a) values (742,7);
+insert into t (id,a) values (742,8);
+insert into t (id,a) values (742,9);
+insert into t (id,a) values (742,10);
+insert into t (id,a) values (742,11);
+insert into t (id,a) values (742,12);
+insert into t (id,a) values (742,13);
+insert into t (id,a) values (742,14);
+insert into t (id,a) values (742,15);
+insert into t (id,a) values (742,16);
+insert into t (id,a) values (742,17);
+insert into t (id,a) values (742,18);
+insert into t (id,a) values (742,19);
+insert into t (id,a) values (742,20);
+insert into t (id,a) values (742,21);
+insert into t (id,a) values (742,22);
+insert into t (id,a) values (742,23);
+insert into t (id,a) values (742,24);
+insert into t (id,a) values (742,25);
+insert into t (id,a) values (742,26);
+insert into t (id,a) values (742,27);
+insert into t (id,a) values (742,28);
+insert into t (id,a) values (742,29);
+insert into t (id,a) values (742,30);
+insert into t (id,a) values (742,31);
+insert into t (id,a) values (742,32);
+insert into t (id,a) values (742,33);
+insert into t (id,a) values (742,34);
+insert into t (id,a) values (742,35);
+insert into t (id,a) values (742,36);
+insert into t (id,a) values (742,37);
+insert into t (id,a) values (742,38);
+insert into t (id,a) values (742,39);
+insert into t (id,a) values (742,40);
+insert into t (id,a) values (742,41);
+insert into t (id,a) values (742,42);
+insert into t (id,a) values (742,43);
+insert into t (id,a) values (742,44);
+insert into t (id,a) values (742,45);
+insert into t (id,a) values (742,46);
+insert into t (id,a) values (742,47);
+insert into t (id,a) values (742,48);
+insert into t (id,a) values (742,49);
+insert into t (id,a) values (742,50);
+insert into t (id,a) values (742,51);
+insert into t (id,a) values (742,52);
+insert into t (id,a) values (742,53);
+insert into t (id,a) values (742,54);
+insert into t (id,a) values (742,55);
+insert into t (id,a) values (742,56);
+insert into t (id,a) values (742,57);
+insert into t (id,a) values (742,58);
+insert into t (id,a) values (742,59);
+insert into t (id,a) values (742,60);
+insert into t (id,a) values (742,61);
+insert into t (id,a) values (742,62);
+insert into t (id,a) values (742,63);
+insert into t (id,a) values (742,64);
+insert into t (id,a) values (742,65);
+insert into t (id,a) values (742,66);
+insert into t (id,a) values (742,67);
+insert into t (id,a) values (742,68);
+insert into t (id,a) values (742,69);
+insert into t (id,a) values (742,70);
+insert into t (id,a) values (742,71);
+insert into t (id,a) values (742,72);
+insert into t (id,a) values (742,73);
+insert into t (id,a) values (742,74);
+insert into t (id,a) values (742,75);
+insert into t (id,a) values (742,76);
+insert into t (id,a) values (742,77);
+insert into t (id,a) values (742,78);
+insert into t (id,a) values (742,79);
+insert into t (id,a) values (742,80);
+insert into t (id,a) values (742,81);
+insert into t (id,a) values (742,82);
+insert into t (id,a) values (742,83);
+insert into t (id,a) values (742,84);
+insert into t (id,a) values (742,85);
+insert into t (id,a) values (742,86);
+insert into t (id,a) values (742,87);
+insert into t (id,a) values (742,88);
+insert into t (id,a) values (742,89);
+insert into t (id,a) values (742,90);
+insert into t (id,a) values (742,91);
+insert into t (id,a) values (742,92);
+insert into t (id,a) values (742,93);
+insert into t (id,a) values (742,94);
+insert into t (id,a) values (742,95);
+insert into t (id,a) values (742,96);
+insert into t (id,a) values (742,97);
+insert into t (id,a) values (742,98);
+insert into t (id,a) values (742,99);
+insert into t (id,a) values (743,0);
+insert into t (id,a) values (743,1);
+insert into t (id,a) values (743,2);
+insert into t (id,a) values (743,3);
+insert into t (id,a) values (743,4);
+insert into t (id,a) values (743,5);
+insert into t (id,a) values (743,6);
+insert into t (id,a) values (743,7);
+insert into t (id,a) values (743,8);
+insert into t (id,a) values (743,9);
+insert into t (id,a) values (743,10);
+insert into t (id,a) values (743,11);
+insert into t (id,a) values (743,12);
+insert into t (id,a) values (743,13);
+insert into t (id,a) values (743,14);
+insert into t (id,a) values (743,15);
+insert into t (id,a) values (743,16);
+insert into t (id,a) values (743,17);
+insert into t (id,a) values (743,18);
+insert into t (id,a) values (743,19);
+insert into t (id,a) values (743,20);
+insert into t (id,a) values (743,21);
+insert into t (id,a) values (743,22);
+insert into t (id,a) values (743,23);
+insert into t (id,a) values (743,24);
+insert into t (id,a) values (743,25);
+insert into t (id,a) values (743,26);
+insert into t (id,a) values (743,27);
+insert into t (id,a) values (743,28);
+insert into t (id,a) values (743,29);
+insert into t (id,a) values (743,30);
+insert into t (id,a) values (743,31);
+insert into t (id,a) values (743,32);
+insert into t (id,a) values (743,33);
+insert into t (id,a) values (743,34);
+insert into t (id,a) values (743,35);
+insert into t (id,a) values (743,36);
+insert into t (id,a) values (743,37);
+insert into t (id,a) values (743,38);
+insert into t (id,a) values (743,39);
+insert into t (id,a) values (743,40);
+insert into t (id,a) values (743,41);
+insert into t (id,a) values (743,42);
+insert into t (id,a) values (743,43);
+insert into t (id,a) values (743,44);
+insert into t (id,a) values (743,45);
+insert into t (id,a) values (743,46);
+insert into t (id,a) values (743,47);
+insert into t (id,a) values (743,48);
+insert into t (id,a) values (743,49);
+insert into t (id,a) values (743,50);
+insert into t (id,a) values (743,51);
+insert into t (id,a) values (743,52);
+insert into t (id,a) values (743,53);
+insert into t (id,a) values (743,54);
+insert into t (id,a) values (743,55);
+insert into t (id,a) values (743,56);
+insert into t (id,a) values (743,57);
+insert into t (id,a) values (743,58);
+insert into t (id,a) values (743,59);
+insert into t (id,a) values (743,60);
+insert into t (id,a) values (743,61);
+insert into t (id,a) values (743,62);
+insert into t (id,a) values (743,63);
+insert into t (id,a) values (743,64);
+insert into t (id,a) values (743,65);
+insert into t (id,a) values (743,66);
+insert into t (id,a) values (743,67);
+insert into t (id,a) values (743,68);
+insert into t (id,a) values (743,69);
+insert into t (id,a) values (743,70);
+insert into t (id,a) values (743,71);
+insert into t (id,a) values (743,72);
+insert into t (id,a) values (743,73);
+insert into t (id,a) values (743,74);
+insert into t (id,a) values (743,75);
+insert into t (id,a) values (743,76);
+insert into t (id,a) values (743,77);
+insert into t (id,a) values (743,78);
+insert into t (id,a) values (743,79);
+insert into t (id,a) values (743,80);
+insert into t (id,a) values (743,81);
+insert into t (id,a) values (743,82);
+insert into t (id,a) values (743,83);
+insert into t (id,a) values (743,84);
+insert into t (id,a) values (743,85);
+insert into t (id,a) values (743,86);
+insert into t (id,a) values (743,87);
+insert into t (id,a) values (743,88);
+insert into t (id,a) values (743,89);
+insert into t (id,a) values (743,90);
+insert into t (id,a) values (743,91);
+insert into t (id,a) values (743,92);
+insert into t (id,a) values (743,93);
+insert into t (id,a) values (743,94);
+insert into t (id,a) values (743,95);
+insert into t (id,a) values (743,96);
+insert into t (id,a) values (743,97);
+insert into t (id,a) values (743,98);
+insert into t (id,a) values (743,99);
+insert into t (id,a) values (744,0);
+insert into t (id,a) values (744,1);
+insert into t (id,a) values (744,2);
+insert into t (id,a) values (744,3);
+insert into t (id,a) values (744,4);
+insert into t (id,a) values (744,5);
+insert into t (id,a) values (744,6);
+insert into t (id,a) values (744,7);
+insert into t (id,a) values (744,8);
+insert into t (id,a) values (744,9);
+insert into t (id,a) values (744,10);
+insert into t (id,a) values (744,11);
+insert into t (id,a) values (744,12);
+insert into t (id,a) values (744,13);
+insert into t (id,a) values (744,14);
+insert into t (id,a) values (744,15);
+insert into t (id,a) values (744,16);
+insert into t (id,a) values (744,17);
+insert into t (id,a) values (744,18);
+insert into t (id,a) values (744,19);
+insert into t (id,a) values (744,20);
+insert into t (id,a) values (744,21);
+insert into t (id,a) values (744,22);
+insert into t (id,a) values (744,23);
+insert into t (id,a) values (744,24);
+insert into t (id,a) values (744,25);
+insert into t (id,a) values (744,26);
+insert into t (id,a) values (744,27);
+insert into t (id,a) values (744,28);
+insert into t (id,a) values (744,29);
+insert into t (id,a) values (744,30);
+insert into t (id,a) values (744,31);
+insert into t (id,a) values (744,32);
+insert into t (id,a) values (744,33);
+insert into t (id,a) values (744,34);
+insert into t (id,a) values (744,35);
+insert into t (id,a) values (744,36);
+insert into t (id,a) values (744,37);
+insert into t (id,a) values (744,38);
+insert into t (id,a) values (744,39);
+insert into t (id,a) values (744,40);
+insert into t (id,a) values (744,41);
+insert into t (id,a) values (744,42);
+insert into t (id,a) values (744,43);
+insert into t (id,a) values (744,44);
+insert into t (id,a) values (744,45);
+insert into t (id,a) values (744,46);
+insert into t (id,a) values (744,47);
+insert into t (id,a) values (744,48);
+insert into t (id,a) values (744,49);
+insert into t (id,a) values (744,50);
+insert into t (id,a) values (744,51);
+insert into t (id,a) values (744,52);
+insert into t (id,a) values (744,53);
+insert into t (id,a) values (744,54);
+insert into t (id,a) values (744,55);
+insert into t (id,a) values (744,56);
+insert into t (id,a) values (744,57);
+insert into t (id,a) values (744,58);
+insert into t (id,a) values (744,59);
+insert into t (id,a) values (744,60);
+insert into t (id,a) values (744,61);
+insert into t (id,a) values (744,62);
+insert into t (id,a) values (744,63);
+insert into t (id,a) values (744,64);
+insert into t (id,a) values (744,65);
+insert into t (id,a) values (744,66);
+insert into t (id,a) values (744,67);
+insert into t (id,a) values (744,68);
+insert into t (id,a) values (744,69);
+insert into t (id,a) values (744,70);
+insert into t (id,a) values (744,71);
+insert into t (id,a) values (744,72);
+insert into t (id,a) values (744,73);
+insert into t (id,a) values (744,74);
+insert into t (id,a) values (744,75);
+insert into t (id,a) values (744,76);
+insert into t (id,a) values (744,77);
+insert into t (id,a) values (744,78);
+insert into t (id,a) values (744,79);
+insert into t (id,a) values (744,80);
+insert into t (id,a) values (744,81);
+insert into t (id,a) values (744,82);
+insert into t (id,a) values (744,83);
+insert into t (id,a) values (744,84);
+insert into t (id,a) values (744,85);
+insert into t (id,a) values (744,86);
+insert into t (id,a) values (744,87);
+insert into t (id,a) values (744,88);
+insert into t (id,a) values (744,89);
+insert into t (id,a) values (744,90);
+insert into t (id,a) values (744,91);
+insert into t (id,a) values (744,92);
+insert into t (id,a) values (744,93);
+insert into t (id,a) values (744,94);
+insert into t (id,a) values (744,95);
+insert into t (id,a) values (744,96);
+insert into t (id,a) values (744,97);
+insert into t (id,a) values (744,98);
+insert into t (id,a) values (744,99);
+insert into t (id,a) values (745,0);
+insert into t (id,a) values (745,1);
+insert into t (id,a) values (745,2);
+insert into t (id,a) values (745,3);
+insert into t (id,a) values (745,4);
+insert into t (id,a) values (745,5);
+insert into t (id,a) values (745,6);
+insert into t (id,a) values (745,7);
+insert into t (id,a) values (745,8);
+insert into t (id,a) values (745,9);
+insert into t (id,a) values (745,10);
+insert into t (id,a) values (745,11);
+insert into t (id,a) values (745,12);
+insert into t (id,a) values (745,13);
+insert into t (id,a) values (745,14);
+insert into t (id,a) values (745,15);
+insert into t (id,a) values (745,16);
+insert into t (id,a) values (745,17);
+insert into t (id,a) values (745,18);
+insert into t (id,a) values (745,19);
+insert into t (id,a) values (745,20);
+insert into t (id,a) values (745,21);
+insert into t (id,a) values (745,22);
+insert into t (id,a) values (745,23);
+insert into t (id,a) values (745,24);
+insert into t (id,a) values (745,25);
+insert into t (id,a) values (745,26);
+insert into t (id,a) values (745,27);
+insert into t (id,a) values (745,28);
+insert into t (id,a) values (745,29);
+insert into t (id,a) values (745,30);
+insert into t (id,a) values (745,31);
+insert into t (id,a) values (745,32);
+insert into t (id,a) values (745,33);
+insert into t (id,a) values (745,34);
+insert into t (id,a) values (745,35);
+insert into t (id,a) values (745,36);
+insert into t (id,a) values (745,37);
+insert into t (id,a) values (745,38);
+insert into t (id,a) values (745,39);
+insert into t (id,a) values (745,40);
+insert into t (id,a) values (745,41);
+insert into t (id,a) values (745,42);
+insert into t (id,a) values (745,43);
+insert into t (id,a) values (745,44);
+insert into t (id,a) values (745,45);
+insert into t (id,a) values (745,46);
+insert into t (id,a) values (745,47);
+insert into t (id,a) values (745,48);
+insert into t (id,a) values (745,49);
+insert into t (id,a) values (745,50);
+insert into t (id,a) values (745,51);
+insert into t (id,a) values (745,52);
+insert into t (id,a) values (745,53);
+insert into t (id,a) values (745,54);
+insert into t (id,a) values (745,55);
+insert into t (id,a) values (745,56);
+insert into t (id,a) values (745,57);
+insert into t (id,a) values (745,58);
+insert into t (id,a) values (745,59);
+insert into t (id,a) values (745,60);
+insert into t (id,a) values (745,61);
+insert into t (id,a) values (745,62);
+insert into t (id,a) values (745,63);
+insert into t (id,a) values (745,64);
+insert into t (id,a) values (745,65);
+insert into t (id,a) values (745,66);
+insert into t (id,a) values (745,67);
+insert into t (id,a) values (745,68);
+insert into t (id,a) values (745,69);
+insert into t (id,a) values (745,70);
+insert into t (id,a) values (745,71);
+insert into t (id,a) values (745,72);
+insert into t (id,a) values (745,73);
+insert into t (id,a) values (745,74);
+insert into t (id,a) values (745,75);
+insert into t (id,a) values (745,76);
+insert into t (id,a) values (745,77);
+insert into t (id,a) values (745,78);
+insert into t (id,a) values (745,79);
+insert into t (id,a) values (745,80);
+insert into t (id,a) values (745,81);
+insert into t (id,a) values (745,82);
+insert into t (id,a) values (745,83);
+insert into t (id,a) values (745,84);
+insert into t (id,a) values (745,85);
+insert into t (id,a) values (745,86);
+insert into t (id,a) values (745,87);
+insert into t (id,a) values (745,88);
+insert into t (id,a) values (745,89);
+insert into t (id,a) values (745,90);
+insert into t (id,a) values (745,91);
+insert into t (id,a) values (745,92);
+insert into t (id,a) values (745,93);
+insert into t (id,a) values (745,94);
+insert into t (id,a) values (745,95);
+insert into t (id,a) values (745,96);
+insert into t (id,a) values (745,97);
+insert into t (id,a) values (745,98);
+insert into t (id,a) values (745,99);
+insert into t (id,a) values (746,0);
+insert into t (id,a) values (746,1);
+insert into t (id,a) values (746,2);
+insert into t (id,a) values (746,3);
+insert into t (id,a) values (746,4);
+insert into t (id,a) values (746,5);
+insert into t (id,a) values (746,6);
+insert into t (id,a) values (746,7);
+insert into t (id,a) values (746,8);
+insert into t (id,a) values (746,9);
+insert into t (id,a) values (746,10);
+insert into t (id,a) values (746,11);
+insert into t (id,a) values (746,12);
+insert into t (id,a) values (746,13);
+insert into t (id,a) values (746,14);
+insert into t (id,a) values (746,15);
+insert into t (id,a) values (746,16);
+insert into t (id,a) values (746,17);
+insert into t (id,a) values (746,18);
+insert into t (id,a) values (746,19);
+insert into t (id,a) values (746,20);
+insert into t (id,a) values (746,21);
+insert into t (id,a) values (746,22);
+insert into t (id,a) values (746,23);
+insert into t (id,a) values (746,24);
+insert into t (id,a) values (746,25);
+insert into t (id,a) values (746,26);
+insert into t (id,a) values (746,27);
+insert into t (id,a) values (746,28);
+insert into t (id,a) values (746,29);
+insert into t (id,a) values (746,30);
+insert into t (id,a) values (746,31);
+insert into t (id,a) values (746,32);
+insert into t (id,a) values (746,33);
+insert into t (id,a) values (746,34);
+insert into t (id,a) values (746,35);
+insert into t (id,a) values (746,36);
+insert into t (id,a) values (746,37);
+insert into t (id,a) values (746,38);
+insert into t (id,a) values (746,39);
+insert into t (id,a) values (746,40);
+insert into t (id,a) values (746,41);
+insert into t (id,a) values (746,42);
+insert into t (id,a) values (746,43);
+insert into t (id,a) values (746,44);
+insert into t (id,a) values (746,45);
+insert into t (id,a) values (746,46);
+insert into t (id,a) values (746,47);
+insert into t (id,a) values (746,48);
+insert into t (id,a) values (746,49);
+insert into t (id,a) values (746,50);
+insert into t (id,a) values (746,51);
+insert into t (id,a) values (746,52);
+insert into t (id,a) values (746,53);
+insert into t (id,a) values (746,54);
+insert into t (id,a) values (746,55);
+insert into t (id,a) values (746,56);
+insert into t (id,a) values (746,57);
+insert into t (id,a) values (746,58);
+insert into t (id,a) values (746,59);
+insert into t (id,a) values (746,60);
+insert into t (id,a) values (746,61);
+insert into t (id,a) values (746,62);
+insert into t (id,a) values (746,63);
+insert into t (id,a) values (746,64);
+insert into t (id,a) values (746,65);
+insert into t (id,a) values (746,66);
+insert into t (id,a) values (746,67);
+insert into t (id,a) values (746,68);
+insert into t (id,a) values (746,69);
+insert into t (id,a) values (746,70);
+insert into t (id,a) values (746,71);
+insert into t (id,a) values (746,72);
+insert into t (id,a) values (746,73);
+insert into t (id,a) values (746,74);
+insert into t (id,a) values (746,75);
+insert into t (id,a) values (746,76);
+insert into t (id,a) values (746,77);
+insert into t (id,a) values (746,78);
+insert into t (id,a) values (746,79);
+insert into t (id,a) values (746,80);
+insert into t (id,a) values (746,81);
+insert into t (id,a) values (746,82);
+insert into t (id,a) values (746,83);
+insert into t (id,a) values (746,84);
+insert into t (id,a) values (746,85);
+insert into t (id,a) values (746,86);
+insert into t (id,a) values (746,87);
+insert into t (id,a) values (746,88);
+insert into t (id,a) values (746,89);
+insert into t (id,a) values (746,90);
+insert into t (id,a) values (746,91);
+insert into t (id,a) values (746,92);
+insert into t (id,a) values (746,93);
+insert into t (id,a) values (746,94);
+insert into t (id,a) values (746,95);
+insert into t (id,a) values (746,96);
+insert into t (id,a) values (746,97);
+insert into t (id,a) values (746,98);
+insert into t (id,a) values (746,99);
+insert into t (id,a) values (747,0);
+insert into t (id,a) values (747,1);
+insert into t (id,a) values (747,2);
+insert into t (id,a) values (747,3);
+insert into t (id,a) values (747,4);
+insert into t (id,a) values (747,5);
+insert into t (id,a) values (747,6);
+insert into t (id,a) values (747,7);
+insert into t (id,a) values (747,8);
+insert into t (id,a) values (747,9);
+insert into t (id,a) values (747,10);
+insert into t (id,a) values (747,11);
+insert into t (id,a) values (747,12);
+insert into t (id,a) values (747,13);
+insert into t (id,a) values (747,14);
+insert into t (id,a) values (747,15);
+insert into t (id,a) values (747,16);
+insert into t (id,a) values (747,17);
+insert into t (id,a) values (747,18);
+insert into t (id,a) values (747,19);
+insert into t (id,a) values (747,20);
+insert into t (id,a) values (747,21);
+insert into t (id,a) values (747,22);
+insert into t (id,a) values (747,23);
+insert into t (id,a) values (747,24);
+insert into t (id,a) values (747,25);
+insert into t (id,a) values (747,26);
+insert into t (id,a) values (747,27);
+insert into t (id,a) values (747,28);
+insert into t (id,a) values (747,29);
+insert into t (id,a) values (747,30);
+insert into t (id,a) values (747,31);
+insert into t (id,a) values (747,32);
+insert into t (id,a) values (747,33);
+insert into t (id,a) values (747,34);
+insert into t (id,a) values (747,35);
+insert into t (id,a) values (747,36);
+insert into t (id,a) values (747,37);
+insert into t (id,a) values (747,38);
+insert into t (id,a) values (747,39);
+insert into t (id,a) values (747,40);
+insert into t (id,a) values (747,41);
+insert into t (id,a) values (747,42);
+insert into t (id,a) values (747,43);
+insert into t (id,a) values (747,44);
+insert into t (id,a) values (747,45);
+insert into t (id,a) values (747,46);
+insert into t (id,a) values (747,47);
+insert into t (id,a) values (747,48);
+insert into t (id,a) values (747,49);
+insert into t (id,a) values (747,50);
+insert into t (id,a) values (747,51);
+insert into t (id,a) values (747,52);
+insert into t (id,a) values (747,53);
+insert into t (id,a) values (747,54);
+insert into t (id,a) values (747,55);
+insert into t (id,a) values (747,56);
+insert into t (id,a) values (747,57);
+insert into t (id,a) values (747,58);
+insert into t (id,a) values (747,59);
+insert into t (id,a) values (747,60);
+insert into t (id,a) values (747,61);
+insert into t (id,a) values (747,62);
+insert into t (id,a) values (747,63);
+insert into t (id,a) values (747,64);
+insert into t (id,a) values (747,65);
+insert into t (id,a) values (747,66);
+insert into t (id,a) values (747,67);
+insert into t (id,a) values (747,68);
+insert into t (id,a) values (747,69);
+insert into t (id,a) values (747,70);
+insert into t (id,a) values (747,71);
+insert into t (id,a) values (747,72);
+insert into t (id,a) values (747,73);
+insert into t (id,a) values (747,74);
+insert into t (id,a) values (747,75);
+insert into t (id,a) values (747,76);
+insert into t (id,a) values (747,77);
+insert into t (id,a) values (747,78);
+insert into t (id,a) values (747,79);
+insert into t (id,a) values (747,80);
+insert into t (id,a) values (747,81);
+insert into t (id,a) values (747,82);
+insert into t (id,a) values (747,83);
+insert into t (id,a) values (747,84);
+insert into t (id,a) values (747,85);
+insert into t (id,a) values (747,86);
+insert into t (id,a) values (747,87);
+insert into t (id,a) values (747,88);
+insert into t (id,a) values (747,89);
+insert into t (id,a) values (747,90);
+insert into t (id,a) values (747,91);
+insert into t (id,a) values (747,92);
+insert into t (id,a) values (747,93);
+insert into t (id,a) values (747,94);
+insert into t (id,a) values (747,95);
+insert into t (id,a) values (747,96);
+insert into t (id,a) values (747,97);
+insert into t (id,a) values (747,98);
+insert into t (id,a) values (747,99);
+insert into t (id,a) values (748,0);
+insert into t (id,a) values (748,1);
+insert into t (id,a) values (748,2);
+insert into t (id,a) values (748,3);
+insert into t (id,a) values (748,4);
+insert into t (id,a) values (748,5);
+insert into t (id,a) values (748,6);
+insert into t (id,a) values (748,7);
+insert into t (id,a) values (748,8);
+insert into t (id,a) values (748,9);
+insert into t (id,a) values (748,10);
+insert into t (id,a) values (748,11);
+insert into t (id,a) values (748,12);
+insert into t (id,a) values (748,13);
+insert into t (id,a) values (748,14);
+insert into t (id,a) values (748,15);
+insert into t (id,a) values (748,16);
+insert into t (id,a) values (748,17);
+insert into t (id,a) values (748,18);
+insert into t (id,a) values (748,19);
+insert into t (id,a) values (748,20);
+insert into t (id,a) values (748,21);
+insert into t (id,a) values (748,22);
+insert into t (id,a) values (748,23);
+insert into t (id,a) values (748,24);
+insert into t (id,a) values (748,25);
+insert into t (id,a) values (748,26);
+insert into t (id,a) values (748,27);
+insert into t (id,a) values (748,28);
+insert into t (id,a) values (748,29);
+insert into t (id,a) values (748,30);
+insert into t (id,a) values (748,31);
+insert into t (id,a) values (748,32);
+insert into t (id,a) values (748,33);
+insert into t (id,a) values (748,34);
+insert into t (id,a) values (748,35);
+insert into t (id,a) values (748,36);
+insert into t (id,a) values (748,37);
+insert into t (id,a) values (748,38);
+insert into t (id,a) values (748,39);
+insert into t (id,a) values (748,40);
+insert into t (id,a) values (748,41);
+insert into t (id,a) values (748,42);
+insert into t (id,a) values (748,43);
+insert into t (id,a) values (748,44);
+insert into t (id,a) values (748,45);
+insert into t (id,a) values (748,46);
+insert into t (id,a) values (748,47);
+insert into t (id,a) values (748,48);
+insert into t (id,a) values (748,49);
+insert into t (id,a) values (748,50);
+insert into t (id,a) values (748,51);
+insert into t (id,a) values (748,52);
+insert into t (id,a) values (748,53);
+insert into t (id,a) values (748,54);
+insert into t (id,a) values (748,55);
+insert into t (id,a) values (748,56);
+insert into t (id,a) values (748,57);
+insert into t (id,a) values (748,58);
+insert into t (id,a) values (748,59);
+insert into t (id,a) values (748,60);
+insert into t (id,a) values (748,61);
+insert into t (id,a) values (748,62);
+insert into t (id,a) values (748,63);
+insert into t (id,a) values (748,64);
+insert into t (id,a) values (748,65);
+insert into t (id,a) values (748,66);
+insert into t (id,a) values (748,67);
+insert into t (id,a) values (748,68);
+insert into t (id,a) values (748,69);
+insert into t (id,a) values (748,70);
+insert into t (id,a) values (748,71);
+insert into t (id,a) values (748,72);
+insert into t (id,a) values (748,73);
+insert into t (id,a) values (748,74);
+insert into t (id,a) values (748,75);
+insert into t (id,a) values (748,76);
+insert into t (id,a) values (748,77);
+insert into t (id,a) values (748,78);
+insert into t (id,a) values (748,79);
+insert into t (id,a) values (748,80);
+insert into t (id,a) values (748,81);
+insert into t (id,a) values (748,82);
+insert into t (id,a) values (748,83);
+insert into t (id,a) values (748,84);
+insert into t (id,a) values (748,85);
+insert into t (id,a) values (748,86);
+insert into t (id,a) values (748,87);
+insert into t (id,a) values (748,88);
+insert into t (id,a) values (748,89);
+insert into t (id,a) values (748,90);
+insert into t (id,a) values (748,91);
+insert into t (id,a) values (748,92);
+insert into t (id,a) values (748,93);
+insert into t (id,a) values (748,94);
+insert into t (id,a) values (748,95);
+insert into t (id,a) values (748,96);
+insert into t (id,a) values (748,97);
+insert into t (id,a) values (748,98);
+insert into t (id,a) values (748,99);
+insert into t (id,a) values (749,0);
+insert into t (id,a) values (749,1);
+insert into t (id,a) values (749,2);
+insert into t (id,a) values (749,3);
+insert into t (id,a) values (749,4);
+insert into t (id,a) values (749,5);
+insert into t (id,a) values (749,6);
+insert into t (id,a) values (749,7);
+insert into t (id,a) values (749,8);
+insert into t (id,a) values (749,9);
+insert into t (id,a) values (749,10);
+insert into t (id,a) values (749,11);
+insert into t (id,a) values (749,12);
+insert into t (id,a) values (749,13);
+insert into t (id,a) values (749,14);
+insert into t (id,a) values (749,15);
+insert into t (id,a) values (749,16);
+insert into t (id,a) values (749,17);
+insert into t (id,a) values (749,18);
+insert into t (id,a) values (749,19);
+insert into t (id,a) values (749,20);
+insert into t (id,a) values (749,21);
+insert into t (id,a) values (749,22);
+insert into t (id,a) values (749,23);
+insert into t (id,a) values (749,24);
+insert into t (id,a) values (749,25);
+insert into t (id,a) values (749,26);
+insert into t (id,a) values (749,27);
+insert into t (id,a) values (749,28);
+insert into t (id,a) values (749,29);
+insert into t (id,a) values (749,30);
+insert into t (id,a) values (749,31);
+insert into t (id,a) values (749,32);
+insert into t (id,a) values (749,33);
+insert into t (id,a) values (749,34);
+insert into t (id,a) values (749,35);
+insert into t (id,a) values (749,36);
+insert into t (id,a) values (749,37);
+insert into t (id,a) values (749,38);
+insert into t (id,a) values (749,39);
+insert into t (id,a) values (749,40);
+insert into t (id,a) values (749,41);
+insert into t (id,a) values (749,42);
+insert into t (id,a) values (749,43);
+insert into t (id,a) values (749,44);
+insert into t (id,a) values (749,45);
+insert into t (id,a) values (749,46);
+insert into t (id,a) values (749,47);
+insert into t (id,a) values (749,48);
+insert into t (id,a) values (749,49);
+insert into t (id,a) values (749,50);
+insert into t (id,a) values (749,51);
+insert into t (id,a) values (749,52);
+insert into t (id,a) values (749,53);
+insert into t (id,a) values (749,54);
+insert into t (id,a) values (749,55);
+insert into t (id,a) values (749,56);
+insert into t (id,a) values (749,57);
+insert into t (id,a) values (749,58);
+insert into t (id,a) values (749,59);
+insert into t (id,a) values (749,60);
+insert into t (id,a) values (749,61);
+insert into t (id,a) values (749,62);
+insert into t (id,a) values (749,63);
+insert into t (id,a) values (749,64);
+insert into t (id,a) values (749,65);
+insert into t (id,a) values (749,66);
+insert into t (id,a) values (749,67);
+insert into t (id,a) values (749,68);
+insert into t (id,a) values (749,69);
+insert into t (id,a) values (749,70);
+insert into t (id,a) values (749,71);
+insert into t (id,a) values (749,72);
+insert into t (id,a) values (749,73);
+insert into t (id,a) values (749,74);
+insert into t (id,a) values (749,75);
+insert into t (id,a) values (749,76);
+insert into t (id,a) values (749,77);
+insert into t (id,a) values (749,78);
+insert into t (id,a) values (749,79);
+insert into t (id,a) values (749,80);
+insert into t (id,a) values (749,81);
+insert into t (id,a) values (749,82);
+insert into t (id,a) values (749,83);
+insert into t (id,a) values (749,84);
+insert into t (id,a) values (749,85);
+insert into t (id,a) values (749,86);
+insert into t (id,a) values (749,87);
+insert into t (id,a) values (749,88);
+insert into t (id,a) values (749,89);
+insert into t (id,a) values (749,90);
+insert into t (id,a) values (749,91);
+insert into t (id,a) values (749,92);
+insert into t (id,a) values (749,93);
+insert into t (id,a) values (749,94);
+insert into t (id,a) values (749,95);
+insert into t (id,a) values (749,96);
+insert into t (id,a) values (749,97);
+insert into t (id,a) values (749,98);
+insert into t (id,a) values (749,99);
+insert into t (id,a) values (750,0);
+insert into t (id,a) values (750,1);
+insert into t (id,a) values (750,2);
+insert into t (id,a) values (750,3);
+insert into t (id,a) values (750,4);
+insert into t (id,a) values (750,5);
+insert into t (id,a) values (750,6);
+insert into t (id,a) values (750,7);
+insert into t (id,a) values (750,8);
+insert into t (id,a) values (750,9);
+insert into t (id,a) values (750,10);
+insert into t (id,a) values (750,11);
+insert into t (id,a) values (750,12);
+insert into t (id,a) values (750,13);
+insert into t (id,a) values (750,14);
+insert into t (id,a) values (750,15);
+insert into t (id,a) values (750,16);
+insert into t (id,a) values (750,17);
+insert into t (id,a) values (750,18);
+insert into t (id,a) values (750,19);
+insert into t (id,a) values (750,20);
+insert into t (id,a) values (750,21);
+insert into t (id,a) values (750,22);
+insert into t (id,a) values (750,23);
+insert into t (id,a) values (750,24);
+insert into t (id,a) values (750,25);
+insert into t (id,a) values (750,26);
+insert into t (id,a) values (750,27);
+insert into t (id,a) values (750,28);
+insert into t (id,a) values (750,29);
+insert into t (id,a) values (750,30);
+insert into t (id,a) values (750,31);
+insert into t (id,a) values (750,32);
+insert into t (id,a) values (750,33);
+insert into t (id,a) values (750,34);
+insert into t (id,a) values (750,35);
+insert into t (id,a) values (750,36);
+insert into t (id,a) values (750,37);
+insert into t (id,a) values (750,38);
+insert into t (id,a) values (750,39);
+insert into t (id,a) values (750,40);
+insert into t (id,a) values (750,41);
+insert into t (id,a) values (750,42);
+insert into t (id,a) values (750,43);
+insert into t (id,a) values (750,44);
+insert into t (id,a) values (750,45);
+insert into t (id,a) values (750,46);
+insert into t (id,a) values (750,47);
+insert into t (id,a) values (750,48);
+insert into t (id,a) values (750,49);
+insert into t (id,a) values (750,50);
+insert into t (id,a) values (750,51);
+insert into t (id,a) values (750,52);
+insert into t (id,a) values (750,53);
+insert into t (id,a) values (750,54);
+insert into t (id,a) values (750,55);
+insert into t (id,a) values (750,56);
+insert into t (id,a) values (750,57);
+insert into t (id,a) values (750,58);
+insert into t (id,a) values (750,59);
+insert into t (id,a) values (750,60);
+insert into t (id,a) values (750,61);
+insert into t (id,a) values (750,62);
+insert into t (id,a) values (750,63);
+insert into t (id,a) values (750,64);
+insert into t (id,a) values (750,65);
+insert into t (id,a) values (750,66);
+insert into t (id,a) values (750,67);
+insert into t (id,a) values (750,68);
+insert into t (id,a) values (750,69);
+insert into t (id,a) values (750,70);
+insert into t (id,a) values (750,71);
+insert into t (id,a) values (750,72);
+insert into t (id,a) values (750,73);
+insert into t (id,a) values (750,74);
+insert into t (id,a) values (750,75);
+insert into t (id,a) values (750,76);
+insert into t (id,a) values (750,77);
+insert into t (id,a) values (750,78);
+insert into t (id,a) values (750,79);
+insert into t (id,a) values (750,80);
+insert into t (id,a) values (750,81);
+insert into t (id,a) values (750,82);
+insert into t (id,a) values (750,83);
+insert into t (id,a) values (750,84);
+insert into t (id,a) values (750,85);
+insert into t (id,a) values (750,86);
+insert into t (id,a) values (750,87);
+insert into t (id,a) values (750,88);
+insert into t (id,a) values (750,89);
+insert into t (id,a) values (750,90);
+insert into t (id,a) values (750,91);
+insert into t (id,a) values (750,92);
+insert into t (id,a) values (750,93);
+insert into t (id,a) values (750,94);
+insert into t (id,a) values (750,95);
+insert into t (id,a) values (750,96);
+insert into t (id,a) values (750,97);
+insert into t (id,a) values (750,98);
+insert into t (id,a) values (750,99);
+insert into t (id,a) values (751,0);
+insert into t (id,a) values (751,1);
+insert into t (id,a) values (751,2);
+insert into t (id,a) values (751,3);
+insert into t (id,a) values (751,4);
+insert into t (id,a) values (751,5);
+insert into t (id,a) values (751,6);
+insert into t (id,a) values (751,7);
+insert into t (id,a) values (751,8);
+insert into t (id,a) values (751,9);
+insert into t (id,a) values (751,10);
+insert into t (id,a) values (751,11);
+insert into t (id,a) values (751,12);
+insert into t (id,a) values (751,13);
+insert into t (id,a) values (751,14);
+insert into t (id,a) values (751,15);
+insert into t (id,a) values (751,16);
+insert into t (id,a) values (751,17);
+insert into t (id,a) values (751,18);
+insert into t (id,a) values (751,19);
+insert into t (id,a) values (751,20);
+insert into t (id,a) values (751,21);
+insert into t (id,a) values (751,22);
+insert into t (id,a) values (751,23);
+insert into t (id,a) values (751,24);
+insert into t (id,a) values (751,25);
+insert into t (id,a) values (751,26);
+insert into t (id,a) values (751,27);
+insert into t (id,a) values (751,28);
+insert into t (id,a) values (751,29);
+insert into t (id,a) values (751,30);
+insert into t (id,a) values (751,31);
+insert into t (id,a) values (751,32);
+insert into t (id,a) values (751,33);
+insert into t (id,a) values (751,34);
+insert into t (id,a) values (751,35);
+insert into t (id,a) values (751,36);
+insert into t (id,a) values (751,37);
+insert into t (id,a) values (751,38);
+insert into t (id,a) values (751,39);
+insert into t (id,a) values (751,40);
+insert into t (id,a) values (751,41);
+insert into t (id,a) values (751,42);
+insert into t (id,a) values (751,43);
+insert into t (id,a) values (751,44);
+insert into t (id,a) values (751,45);
+insert into t (id,a) values (751,46);
+insert into t (id,a) values (751,47);
+insert into t (id,a) values (751,48);
+insert into t (id,a) values (751,49);
+insert into t (id,a) values (751,50);
+insert into t (id,a) values (751,51);
+insert into t (id,a) values (751,52);
+insert into t (id,a) values (751,53);
+insert into t (id,a) values (751,54);
+insert into t (id,a) values (751,55);
+insert into t (id,a) values (751,56);
+insert into t (id,a) values (751,57);
+insert into t (id,a) values (751,58);
+insert into t (id,a) values (751,59);
+insert into t (id,a) values (751,60);
+insert into t (id,a) values (751,61);
+insert into t (id,a) values (751,62);
+insert into t (id,a) values (751,63);
+insert into t (id,a) values (751,64);
+insert into t (id,a) values (751,65);
+insert into t (id,a) values (751,66);
+insert into t (id,a) values (751,67);
+insert into t (id,a) values (751,68);
+insert into t (id,a) values (751,69);
+insert into t (id,a) values (751,70);
+insert into t (id,a) values (751,71);
+insert into t (id,a) values (751,72);
+insert into t (id,a) values (751,73);
+insert into t (id,a) values (751,74);
+insert into t (id,a) values (751,75);
+insert into t (id,a) values (751,76);
+insert into t (id,a) values (751,77);
+insert into t (id,a) values (751,78);
+insert into t (id,a) values (751,79);
+insert into t (id,a) values (751,80);
+insert into t (id,a) values (751,81);
+insert into t (id,a) values (751,82);
+insert into t (id,a) values (751,83);
+insert into t (id,a) values (751,84);
+insert into t (id,a) values (751,85);
+insert into t (id,a) values (751,86);
+insert into t (id,a) values (751,87);
+insert into t (id,a) values (751,88);
+insert into t (id,a) values (751,89);
+insert into t (id,a) values (751,90);
+insert into t (id,a) values (751,91);
+insert into t (id,a) values (751,92);
+insert into t (id,a) values (751,93);
+insert into t (id,a) values (751,94);
+insert into t (id,a) values (751,95);
+insert into t (id,a) values (751,96);
+insert into t (id,a) values (751,97);
+insert into t (id,a) values (751,98);
+insert into t (id,a) values (751,99);
+insert into t (id,a) values (752,0);
+insert into t (id,a) values (752,1);
+insert into t (id,a) values (752,2);
+insert into t (id,a) values (752,3);
+insert into t (id,a) values (752,4);
+insert into t (id,a) values (752,5);
+insert into t (id,a) values (752,6);
+insert into t (id,a) values (752,7);
+insert into t (id,a) values (752,8);
+insert into t (id,a) values (752,9);
+insert into t (id,a) values (752,10);
+insert into t (id,a) values (752,11);
+insert into t (id,a) values (752,12);
+insert into t (id,a) values (752,13);
+insert into t (id,a) values (752,14);
+insert into t (id,a) values (752,15);
+insert into t (id,a) values (752,16);
+insert into t (id,a) values (752,17);
+insert into t (id,a) values (752,18);
+insert into t (id,a) values (752,19);
+insert into t (id,a) values (752,20);
+insert into t (id,a) values (752,21);
+insert into t (id,a) values (752,22);
+insert into t (id,a) values (752,23);
+insert into t (id,a) values (752,24);
+insert into t (id,a) values (752,25);
+insert into t (id,a) values (752,26);
+insert into t (id,a) values (752,27);
+insert into t (id,a) values (752,28);
+insert into t (id,a) values (752,29);
+insert into t (id,a) values (752,30);
+insert into t (id,a) values (752,31);
+insert into t (id,a) values (752,32);
+insert into t (id,a) values (752,33);
+insert into t (id,a) values (752,34);
+insert into t (id,a) values (752,35);
+insert into t (id,a) values (752,36);
+insert into t (id,a) values (752,37);
+insert into t (id,a) values (752,38);
+insert into t (id,a) values (752,39);
+insert into t (id,a) values (752,40);
+insert into t (id,a) values (752,41);
+insert into t (id,a) values (752,42);
+insert into t (id,a) values (752,43);
+insert into t (id,a) values (752,44);
+insert into t (id,a) values (752,45);
+insert into t (id,a) values (752,46);
+insert into t (id,a) values (752,47);
+insert into t (id,a) values (752,48);
+insert into t (id,a) values (752,49);
+insert into t (id,a) values (752,50);
+insert into t (id,a) values (752,51);
+insert into t (id,a) values (752,52);
+insert into t (id,a) values (752,53);
+insert into t (id,a) values (752,54);
+insert into t (id,a) values (752,55);
+insert into t (id,a) values (752,56);
+insert into t (id,a) values (752,57);
+insert into t (id,a) values (752,58);
+insert into t (id,a) values (752,59);
+insert into t (id,a) values (752,60);
+insert into t (id,a) values (752,61);
+insert into t (id,a) values (752,62);
+insert into t (id,a) values (752,63);
+insert into t (id,a) values (752,64);
+insert into t (id,a) values (752,65);
+insert into t (id,a) values (752,66);
+insert into t (id,a) values (752,67);
+insert into t (id,a) values (752,68);
+insert into t (id,a) values (752,69);
+insert into t (id,a) values (752,70);
+insert into t (id,a) values (752,71);
+insert into t (id,a) values (752,72);
+insert into t (id,a) values (752,73);
+insert into t (id,a) values (752,74);
+insert into t (id,a) values (752,75);
+insert into t (id,a) values (752,76);
+insert into t (id,a) values (752,77);
+insert into t (id,a) values (752,78);
+insert into t (id,a) values (752,79);
+insert into t (id,a) values (752,80);
+insert into t (id,a) values (752,81);
+insert into t (id,a) values (752,82);
+insert into t (id,a) values (752,83);
+insert into t (id,a) values (752,84);
+insert into t (id,a) values (752,85);
+insert into t (id,a) values (752,86);
+insert into t (id,a) values (752,87);
+insert into t (id,a) values (752,88);
+insert into t (id,a) values (752,89);
+insert into t (id,a) values (752,90);
+insert into t (id,a) values (752,91);
+insert into t (id,a) values (752,92);
+insert into t (id,a) values (752,93);
+insert into t (id,a) values (752,94);
+insert into t (id,a) values (752,95);
+insert into t (id,a) values (752,96);
+insert into t (id,a) values (752,97);
+insert into t (id,a) values (752,98);
+insert into t (id,a) values (752,99);
+insert into t (id,a) values (753,0);
+insert into t (id,a) values (753,1);
+insert into t (id,a) values (753,2);
+insert into t (id,a) values (753,3);
+insert into t (id,a) values (753,4);
+insert into t (id,a) values (753,5);
+insert into t (id,a) values (753,6);
+insert into t (id,a) values (753,7);
+insert into t (id,a) values (753,8);
+insert into t (id,a) values (753,9);
+insert into t (id,a) values (753,10);
+insert into t (id,a) values (753,11);
+insert into t (id,a) values (753,12);
+insert into t (id,a) values (753,13);
+insert into t (id,a) values (753,14);
+insert into t (id,a) values (753,15);
+insert into t (id,a) values (753,16);
+insert into t (id,a) values (753,17);
+insert into t (id,a) values (753,18);
+insert into t (id,a) values (753,19);
+insert into t (id,a) values (753,20);
+insert into t (id,a) values (753,21);
+insert into t (id,a) values (753,22);
+insert into t (id,a) values (753,23);
+insert into t (id,a) values (753,24);
+insert into t (id,a) values (753,25);
+insert into t (id,a) values (753,26);
+insert into t (id,a) values (753,27);
+insert into t (id,a) values (753,28);
+insert into t (id,a) values (753,29);
+insert into t (id,a) values (753,30);
+insert into t (id,a) values (753,31);
+insert into t (id,a) values (753,32);
+insert into t (id,a) values (753,33);
+insert into t (id,a) values (753,34);
+insert into t (id,a) values (753,35);
+insert into t (id,a) values (753,36);
+insert into t (id,a) values (753,37);
+insert into t (id,a) values (753,38);
+insert into t (id,a) values (753,39);
+insert into t (id,a) values (753,40);
+insert into t (id,a) values (753,41);
+insert into t (id,a) values (753,42);
+insert into t (id,a) values (753,43);
+insert into t (id,a) values (753,44);
+insert into t (id,a) values (753,45);
+insert into t (id,a) values (753,46);
+insert into t (id,a) values (753,47);
+insert into t (id,a) values (753,48);
+insert into t (id,a) values (753,49);
+insert into t (id,a) values (753,50);
+insert into t (id,a) values (753,51);
+insert into t (id,a) values (753,52);
+insert into t (id,a) values (753,53);
+insert into t (id,a) values (753,54);
+insert into t (id,a) values (753,55);
+insert into t (id,a) values (753,56);
+insert into t (id,a) values (753,57);
+insert into t (id,a) values (753,58);
+insert into t (id,a) values (753,59);
+insert into t (id,a) values (753,60);
+insert into t (id,a) values (753,61);
+insert into t (id,a) values (753,62);
+insert into t (id,a) values (753,63);
+insert into t (id,a) values (753,64);
+insert into t (id,a) values (753,65);
+insert into t (id,a) values (753,66);
+insert into t (id,a) values (753,67);
+insert into t (id,a) values (753,68);
+insert into t (id,a) values (753,69);
+insert into t (id,a) values (753,70);
+insert into t (id,a) values (753,71);
+insert into t (id,a) values (753,72);
+insert into t (id,a) values (753,73);
+insert into t (id,a) values (753,74);
+insert into t (id,a) values (753,75);
+insert into t (id,a) values (753,76);
+insert into t (id,a) values (753,77);
+insert into t (id,a) values (753,78);
+insert into t (id,a) values (753,79);
+insert into t (id,a) values (753,80);
+insert into t (id,a) values (753,81);
+insert into t (id,a) values (753,82);
+insert into t (id,a) values (753,83);
+insert into t (id,a) values (753,84);
+insert into t (id,a) values (753,85);
+insert into t (id,a) values (753,86);
+insert into t (id,a) values (753,87);
+insert into t (id,a) values (753,88);
+insert into t (id,a) values (753,89);
+insert into t (id,a) values (753,90);
+insert into t (id,a) values (753,91);
+insert into t (id,a) values (753,92);
+insert into t (id,a) values (753,93);
+insert into t (id,a) values (753,94);
+insert into t (id,a) values (753,95);
+insert into t (id,a) values (753,96);
+insert into t (id,a) values (753,97);
+insert into t (id,a) values (753,98);
+insert into t (id,a) values (753,99);
+insert into t (id,a) values (754,0);
+insert into t (id,a) values (754,1);
+insert into t (id,a) values (754,2);
+insert into t (id,a) values (754,3);
+insert into t (id,a) values (754,4);
+insert into t (id,a) values (754,5);
+insert into t (id,a) values (754,6);
+insert into t (id,a) values (754,7);
+insert into t (id,a) values (754,8);
+insert into t (id,a) values (754,9);
+insert into t (id,a) values (754,10);
+insert into t (id,a) values (754,11);
+insert into t (id,a) values (754,12);
+insert into t (id,a) values (754,13);
+insert into t (id,a) values (754,14);
+insert into t (id,a) values (754,15);
+insert into t (id,a) values (754,16);
+insert into t (id,a) values (754,17);
+insert into t (id,a) values (754,18);
+insert into t (id,a) values (754,19);
+insert into t (id,a) values (754,20);
+insert into t (id,a) values (754,21);
+insert into t (id,a) values (754,22);
+insert into t (id,a) values (754,23);
+insert into t (id,a) values (754,24);
+insert into t (id,a) values (754,25);
+insert into t (id,a) values (754,26);
+insert into t (id,a) values (754,27);
+insert into t (id,a) values (754,28);
+insert into t (id,a) values (754,29);
+insert into t (id,a) values (754,30);
+insert into t (id,a) values (754,31);
+insert into t (id,a) values (754,32);
+insert into t (id,a) values (754,33);
+insert into t (id,a) values (754,34);
+insert into t (id,a) values (754,35);
+insert into t (id,a) values (754,36);
+insert into t (id,a) values (754,37);
+insert into t (id,a) values (754,38);
+insert into t (id,a) values (754,39);
+insert into t (id,a) values (754,40);
+insert into t (id,a) values (754,41);
+insert into t (id,a) values (754,42);
+insert into t (id,a) values (754,43);
+insert into t (id,a) values (754,44);
+insert into t (id,a) values (754,45);
+insert into t (id,a) values (754,46);
+insert into t (id,a) values (754,47);
+insert into t (id,a) values (754,48);
+insert into t (id,a) values (754,49);
+insert into t (id,a) values (754,50);
+insert into t (id,a) values (754,51);
+insert into t (id,a) values (754,52);
+insert into t (id,a) values (754,53);
+insert into t (id,a) values (754,54);
+insert into t (id,a) values (754,55);
+insert into t (id,a) values (754,56);
+insert into t (id,a) values (754,57);
+insert into t (id,a) values (754,58);
+insert into t (id,a) values (754,59);
+insert into t (id,a) values (754,60);
+insert into t (id,a) values (754,61);
+insert into t (id,a) values (754,62);
+insert into t (id,a) values (754,63);
+insert into t (id,a) values (754,64);
+insert into t (id,a) values (754,65);
+insert into t (id,a) values (754,66);
+insert into t (id,a) values (754,67);
+insert into t (id,a) values (754,68);
+insert into t (id,a) values (754,69);
+insert into t (id,a) values (754,70);
+insert into t (id,a) values (754,71);
+insert into t (id,a) values (754,72);
+insert into t (id,a) values (754,73);
+insert into t (id,a) values (754,74);
+insert into t (id,a) values (754,75);
+insert into t (id,a) values (754,76);
+insert into t (id,a) values (754,77);
+insert into t (id,a) values (754,78);
+insert into t (id,a) values (754,79);
+insert into t (id,a) values (754,80);
+insert into t (id,a) values (754,81);
+insert into t (id,a) values (754,82);
+insert into t (id,a) values (754,83);
+insert into t (id,a) values (754,84);
+insert into t (id,a) values (754,85);
+insert into t (id,a) values (754,86);
+insert into t (id,a) values (754,87);
+insert into t (id,a) values (754,88);
+insert into t (id,a) values (754,89);
+insert into t (id,a) values (754,90);
+insert into t (id,a) values (754,91);
+insert into t (id,a) values (754,92);
+insert into t (id,a) values (754,93);
+insert into t (id,a) values (754,94);
+insert into t (id,a) values (754,95);
+insert into t (id,a) values (754,96);
+insert into t (id,a) values (754,97);
+insert into t (id,a) values (754,98);
+insert into t (id,a) values (754,99);
+insert into t (id,a) values (755,0);
+insert into t (id,a) values (755,1);
+insert into t (id,a) values (755,2);
+insert into t (id,a) values (755,3);
+insert into t (id,a) values (755,4);
+insert into t (id,a) values (755,5);
+insert into t (id,a) values (755,6);
+insert into t (id,a) values (755,7);
+insert into t (id,a) values (755,8);
+insert into t (id,a) values (755,9);
+insert into t (id,a) values (755,10);
+insert into t (id,a) values (755,11);
+insert into t (id,a) values (755,12);
+insert into t (id,a) values (755,13);
+insert into t (id,a) values (755,14);
+insert into t (id,a) values (755,15);
+insert into t (id,a) values (755,16);
+insert into t (id,a) values (755,17);
+insert into t (id,a) values (755,18);
+insert into t (id,a) values (755,19);
+insert into t (id,a) values (755,20);
+insert into t (id,a) values (755,21);
+insert into t (id,a) values (755,22);
+insert into t (id,a) values (755,23);
+insert into t (id,a) values (755,24);
+insert into t (id,a) values (755,25);
+insert into t (id,a) values (755,26);
+insert into t (id,a) values (755,27);
+insert into t (id,a) values (755,28);
+insert into t (id,a) values (755,29);
+insert into t (id,a) values (755,30);
+insert into t (id,a) values (755,31);
+insert into t (id,a) values (755,32);
+insert into t (id,a) values (755,33);
+insert into t (id,a) values (755,34);
+insert into t (id,a) values (755,35);
+insert into t (id,a) values (755,36);
+insert into t (id,a) values (755,37);
+insert into t (id,a) values (755,38);
+insert into t (id,a) values (755,39);
+insert into t (id,a) values (755,40);
+insert into t (id,a) values (755,41);
+insert into t (id,a) values (755,42);
+insert into t (id,a) values (755,43);
+insert into t (id,a) values (755,44);
+insert into t (id,a) values (755,45);
+insert into t (id,a) values (755,46);
+insert into t (id,a) values (755,47);
+insert into t (id,a) values (755,48);
+insert into t (id,a) values (755,49);
+insert into t (id,a) values (755,50);
+insert into t (id,a) values (755,51);
+insert into t (id,a) values (755,52);
+insert into t (id,a) values (755,53);
+insert into t (id,a) values (755,54);
+insert into t (id,a) values (755,55);
+insert into t (id,a) values (755,56);
+insert into t (id,a) values (755,57);
+insert into t (id,a) values (755,58);
+insert into t (id,a) values (755,59);
+insert into t (id,a) values (755,60);
+insert into t (id,a) values (755,61);
+insert into t (id,a) values (755,62);
+insert into t (id,a) values (755,63);
+insert into t (id,a) values (755,64);
+insert into t (id,a) values (755,65);
+insert into t (id,a) values (755,66);
+insert into t (id,a) values (755,67);
+insert into t (id,a) values (755,68);
+insert into t (id,a) values (755,69);
+insert into t (id,a) values (755,70);
+insert into t (id,a) values (755,71);
+insert into t (id,a) values (755,72);
+insert into t (id,a) values (755,73);
+insert into t (id,a) values (755,74);
+insert into t (id,a) values (755,75);
+insert into t (id,a) values (755,76);
+insert into t (id,a) values (755,77);
+insert into t (id,a) values (755,78);
+insert into t (id,a) values (755,79);
+insert into t (id,a) values (755,80);
+insert into t (id,a) values (755,81);
+insert into t (id,a) values (755,82);
+insert into t (id,a) values (755,83);
+insert into t (id,a) values (755,84);
+insert into t (id,a) values (755,85);
+insert into t (id,a) values (755,86);
+insert into t (id,a) values (755,87);
+insert into t (id,a) values (755,88);
+insert into t (id,a) values (755,89);
+insert into t (id,a) values (755,90);
+insert into t (id,a) values (755,91);
+insert into t (id,a) values (755,92);
+insert into t (id,a) values (755,93);
+insert into t (id,a) values (755,94);
+insert into t (id,a) values (755,95);
+insert into t (id,a) values (755,96);
+insert into t (id,a) values (755,97);
+insert into t (id,a) values (755,98);
+insert into t (id,a) values (755,99);
+insert into t (id,a) values (756,0);
+insert into t (id,a) values (756,1);
+insert into t (id,a) values (756,2);
+insert into t (id,a) values (756,3);
+insert into t (id,a) values (756,4);
+insert into t (id,a) values (756,5);
+insert into t (id,a) values (756,6);
+insert into t (id,a) values (756,7);
+insert into t (id,a) values (756,8);
+insert into t (id,a) values (756,9);
+insert into t (id,a) values (756,10);
+insert into t (id,a) values (756,11);
+insert into t (id,a) values (756,12);
+insert into t (id,a) values (756,13);
+insert into t (id,a) values (756,14);
+insert into t (id,a) values (756,15);
+insert into t (id,a) values (756,16);
+insert into t (id,a) values (756,17);
+insert into t (id,a) values (756,18);
+insert into t (id,a) values (756,19);
+insert into t (id,a) values (756,20);
+insert into t (id,a) values (756,21);
+insert into t (id,a) values (756,22);
+insert into t (id,a) values (756,23);
+insert into t (id,a) values (756,24);
+insert into t (id,a) values (756,25);
+insert into t (id,a) values (756,26);
+insert into t (id,a) values (756,27);
+insert into t (id,a) values (756,28);
+insert into t (id,a) values (756,29);
+insert into t (id,a) values (756,30);
+insert into t (id,a) values (756,31);
+insert into t (id,a) values (756,32);
+insert into t (id,a) values (756,33);
+insert into t (id,a) values (756,34);
+insert into t (id,a) values (756,35);
+insert into t (id,a) values (756,36);
+insert into t (id,a) values (756,37);
+insert into t (id,a) values (756,38);
+insert into t (id,a) values (756,39);
+insert into t (id,a) values (756,40);
+insert into t (id,a) values (756,41);
+insert into t (id,a) values (756,42);
+insert into t (id,a) values (756,43);
+insert into t (id,a) values (756,44);
+insert into t (id,a) values (756,45);
+insert into t (id,a) values (756,46);
+insert into t (id,a) values (756,47);
+insert into t (id,a) values (756,48);
+insert into t (id,a) values (756,49);
+insert into t (id,a) values (756,50);
+insert into t (id,a) values (756,51);
+insert into t (id,a) values (756,52);
+insert into t (id,a) values (756,53);
+insert into t (id,a) values (756,54);
+insert into t (id,a) values (756,55);
+insert into t (id,a) values (756,56);
+insert into t (id,a) values (756,57);
+insert into t (id,a) values (756,58);
+insert into t (id,a) values (756,59);
+insert into t (id,a) values (756,60);
+insert into t (id,a) values (756,61);
+insert into t (id,a) values (756,62);
+insert into t (id,a) values (756,63);
+insert into t (id,a) values (756,64);
+insert into t (id,a) values (756,65);
+insert into t (id,a) values (756,66);
+insert into t (id,a) values (756,67);
+insert into t (id,a) values (756,68);
+insert into t (id,a) values (756,69);
+insert into t (id,a) values (756,70);
+insert into t (id,a) values (756,71);
+insert into t (id,a) values (756,72);
+insert into t (id,a) values (756,73);
+insert into t (id,a) values (756,74);
+insert into t (id,a) values (756,75);
+insert into t (id,a) values (756,76);
+insert into t (id,a) values (756,77);
+insert into t (id,a) values (756,78);
+insert into t (id,a) values (756,79);
+insert into t (id,a) values (756,80);
+insert into t (id,a) values (756,81);
+insert into t (id,a) values (756,82);
+insert into t (id,a) values (756,83);
+insert into t (id,a) values (756,84);
+insert into t (id,a) values (756,85);
+insert into t (id,a) values (756,86);
+insert into t (id,a) values (756,87);
+insert into t (id,a) values (756,88);
+insert into t (id,a) values (756,89);
+insert into t (id,a) values (756,90);
+insert into t (id,a) values (756,91);
+insert into t (id,a) values (756,92);
+insert into t (id,a) values (756,93);
+insert into t (id,a) values (756,94);
+insert into t (id,a) values (756,95);
+insert into t (id,a) values (756,96);
+insert into t (id,a) values (756,97);
+insert into t (id,a) values (756,98);
+insert into t (id,a) values (756,99);
+insert into t (id,a) values (757,0);
+insert into t (id,a) values (757,1);
+insert into t (id,a) values (757,2);
+insert into t (id,a) values (757,3);
+insert into t (id,a) values (757,4);
+insert into t (id,a) values (757,5);
+insert into t (id,a) values (757,6);
+insert into t (id,a) values (757,7);
+insert into t (id,a) values (757,8);
+insert into t (id,a) values (757,9);
+insert into t (id,a) values (757,10);
+insert into t (id,a) values (757,11);
+insert into t (id,a) values (757,12);
+insert into t (id,a) values (757,13);
+insert into t (id,a) values (757,14);
+insert into t (id,a) values (757,15);
+insert into t (id,a) values (757,16);
+insert into t (id,a) values (757,17);
+insert into t (id,a) values (757,18);
+insert into t (id,a) values (757,19);
+insert into t (id,a) values (757,20);
+insert into t (id,a) values (757,21);
+insert into t (id,a) values (757,22);
+insert into t (id,a) values (757,23);
+insert into t (id,a) values (757,24);
+insert into t (id,a) values (757,25);
+insert into t (id,a) values (757,26);
+insert into t (id,a) values (757,27);
+insert into t (id,a) values (757,28);
+insert into t (id,a) values (757,29);
+insert into t (id,a) values (757,30);
+insert into t (id,a) values (757,31);
+insert into t (id,a) values (757,32);
+insert into t (id,a) values (757,33);
+insert into t (id,a) values (757,34);
+insert into t (id,a) values (757,35);
+insert into t (id,a) values (757,36);
+insert into t (id,a) values (757,37);
+insert into t (id,a) values (757,38);
+insert into t (id,a) values (757,39);
+insert into t (id,a) values (757,40);
+insert into t (id,a) values (757,41);
+insert into t (id,a) values (757,42);
+insert into t (id,a) values (757,43);
+insert into t (id,a) values (757,44);
+insert into t (id,a) values (757,45);
+insert into t (id,a) values (757,46);
+insert into t (id,a) values (757,47);
+insert into t (id,a) values (757,48);
+insert into t (id,a) values (757,49);
+insert into t (id,a) values (757,50);
+insert into t (id,a) values (757,51);
+insert into t (id,a) values (757,52);
+insert into t (id,a) values (757,53);
+insert into t (id,a) values (757,54);
+insert into t (id,a) values (757,55);
+insert into t (id,a) values (757,56);
+insert into t (id,a) values (757,57);
+insert into t (id,a) values (757,58);
+insert into t (id,a) values (757,59);
+insert into t (id,a) values (757,60);
+insert into t (id,a) values (757,61);
+insert into t (id,a) values (757,62);
+insert into t (id,a) values (757,63);
+insert into t (id,a) values (757,64);
+insert into t (id,a) values (757,65);
+insert into t (id,a) values (757,66);
+insert into t (id,a) values (757,67);
+insert into t (id,a) values (757,68);
+insert into t (id,a) values (757,69);
+insert into t (id,a) values (757,70);
+insert into t (id,a) values (757,71);
+insert into t (id,a) values (757,72);
+insert into t (id,a) values (757,73);
+insert into t (id,a) values (757,74);
+insert into t (id,a) values (757,75);
+insert into t (id,a) values (757,76);
+insert into t (id,a) values (757,77);
+insert into t (id,a) values (757,78);
+insert into t (id,a) values (757,79);
+insert into t (id,a) values (757,80);
+insert into t (id,a) values (757,81);
+insert into t (id,a) values (757,82);
+insert into t (id,a) values (757,83);
+insert into t (id,a) values (757,84);
+insert into t (id,a) values (757,85);
+insert into t (id,a) values (757,86);
+insert into t (id,a) values (757,87);
+insert into t (id,a) values (757,88);
+insert into t (id,a) values (757,89);
+insert into t (id,a) values (757,90);
+insert into t (id,a) values (757,91);
+insert into t (id,a) values (757,92);
+insert into t (id,a) values (757,93);
+insert into t (id,a) values (757,94);
+insert into t (id,a) values (757,95);
+insert into t (id,a) values (757,96);
+insert into t (id,a) values (757,97);
+insert into t (id,a) values (757,98);
+insert into t (id,a) values (757,99);
+insert into t (id,a) values (758,0);
+insert into t (id,a) values (758,1);
+insert into t (id,a) values (758,2);
+insert into t (id,a) values (758,3);
+insert into t (id,a) values (758,4);
+insert into t (id,a) values (758,5);
+insert into t (id,a) values (758,6);
+insert into t (id,a) values (758,7);
+insert into t (id,a) values (758,8);
+insert into t (id,a) values (758,9);
+insert into t (id,a) values (758,10);
+insert into t (id,a) values (758,11);
+insert into t (id,a) values (758,12);
+insert into t (id,a) values (758,13);
+insert into t (id,a) values (758,14);
+insert into t (id,a) values (758,15);
+insert into t (id,a) values (758,16);
+insert into t (id,a) values (758,17);
+insert into t (id,a) values (758,18);
+insert into t (id,a) values (758,19);
+insert into t (id,a) values (758,20);
+insert into t (id,a) values (758,21);
+insert into t (id,a) values (758,22);
+insert into t (id,a) values (758,23);
+insert into t (id,a) values (758,24);
+insert into t (id,a) values (758,25);
+insert into t (id,a) values (758,26);
+insert into t (id,a) values (758,27);
+insert into t (id,a) values (758,28);
+insert into t (id,a) values (758,29);
+insert into t (id,a) values (758,30);
+insert into t (id,a) values (758,31);
+insert into t (id,a) values (758,32);
+insert into t (id,a) values (758,33);
+insert into t (id,a) values (758,34);
+insert into t (id,a) values (758,35);
+insert into t (id,a) values (758,36);
+insert into t (id,a) values (758,37);
+insert into t (id,a) values (758,38);
+insert into t (id,a) values (758,39);
+insert into t (id,a) values (758,40);
+insert into t (id,a) values (758,41);
+insert into t (id,a) values (758,42);
+insert into t (id,a) values (758,43);
+insert into t (id,a) values (758,44);
+insert into t (id,a) values (758,45);
+insert into t (id,a) values (758,46);
+insert into t (id,a) values (758,47);
+insert into t (id,a) values (758,48);
+insert into t (id,a) values (758,49);
+insert into t (id,a) values (758,50);
+insert into t (id,a) values (758,51);
+insert into t (id,a) values (758,52);
+insert into t (id,a) values (758,53);
+insert into t (id,a) values (758,54);
+insert into t (id,a) values (758,55);
+insert into t (id,a) values (758,56);
+insert into t (id,a) values (758,57);
+insert into t (id,a) values (758,58);
+insert into t (id,a) values (758,59);
+insert into t (id,a) values (758,60);
+insert into t (id,a) values (758,61);
+insert into t (id,a) values (758,62);
+insert into t (id,a) values (758,63);
+insert into t (id,a) values (758,64);
+insert into t (id,a) values (758,65);
+insert into t (id,a) values (758,66);
+insert into t (id,a) values (758,67);
+insert into t (id,a) values (758,68);
+insert into t (id,a) values (758,69);
+insert into t (id,a) values (758,70);
+insert into t (id,a) values (758,71);
+insert into t (id,a) values (758,72);
+insert into t (id,a) values (758,73);
+insert into t (id,a) values (758,74);
+insert into t (id,a) values (758,75);
+insert into t (id,a) values (758,76);
+insert into t (id,a) values (758,77);
+insert into t (id,a) values (758,78);
+insert into t (id,a) values (758,79);
+insert into t (id,a) values (758,80);
+insert into t (id,a) values (758,81);
+insert into t (id,a) values (758,82);
+insert into t (id,a) values (758,83);
+insert into t (id,a) values (758,84);
+insert into t (id,a) values (758,85);
+insert into t (id,a) values (758,86);
+insert into t (id,a) values (758,87);
+insert into t (id,a) values (758,88);
+insert into t (id,a) values (758,89);
+insert into t (id,a) values (758,90);
+insert into t (id,a) values (758,91);
+insert into t (id,a) values (758,92);
+insert into t (id,a) values (758,93);
+insert into t (id,a) values (758,94);
+insert into t (id,a) values (758,95);
+insert into t (id,a) values (758,96);
+insert into t (id,a) values (758,97);
+insert into t (id,a) values (758,98);
+insert into t (id,a) values (758,99);
+insert into t (id,a) values (759,0);
+insert into t (id,a) values (759,1);
+insert into t (id,a) values (759,2);
+insert into t (id,a) values (759,3);
+insert into t (id,a) values (759,4);
+insert into t (id,a) values (759,5);
+insert into t (id,a) values (759,6);
+insert into t (id,a) values (759,7);
+insert into t (id,a) values (759,8);
+insert into t (id,a) values (759,9);
+insert into t (id,a) values (759,10);
+insert into t (id,a) values (759,11);
+insert into t (id,a) values (759,12);
+insert into t (id,a) values (759,13);
+insert into t (id,a) values (759,14);
+insert into t (id,a) values (759,15);
+insert into t (id,a) values (759,16);
+insert into t (id,a) values (759,17);
+insert into t (id,a) values (759,18);
+insert into t (id,a) values (759,19);
+insert into t (id,a) values (759,20);
+insert into t (id,a) values (759,21);
+insert into t (id,a) values (759,22);
+insert into t (id,a) values (759,23);
+insert into t (id,a) values (759,24);
+insert into t (id,a) values (759,25);
+insert into t (id,a) values (759,26);
+insert into t (id,a) values (759,27);
+insert into t (id,a) values (759,28);
+insert into t (id,a) values (759,29);
+insert into t (id,a) values (759,30);
+insert into t (id,a) values (759,31);
+insert into t (id,a) values (759,32);
+insert into t (id,a) values (759,33);
+insert into t (id,a) values (759,34);
+insert into t (id,a) values (759,35);
+insert into t (id,a) values (759,36);
+insert into t (id,a) values (759,37);
+insert into t (id,a) values (759,38);
+insert into t (id,a) values (759,39);
+insert into t (id,a) values (759,40);
+insert into t (id,a) values (759,41);
+insert into t (id,a) values (759,42);
+insert into t (id,a) values (759,43);
+insert into t (id,a) values (759,44);
+insert into t (id,a) values (759,45);
+insert into t (id,a) values (759,46);
+insert into t (id,a) values (759,47);
+insert into t (id,a) values (759,48);
+insert into t (id,a) values (759,49);
+insert into t (id,a) values (759,50);
+insert into t (id,a) values (759,51);
+insert into t (id,a) values (759,52);
+insert into t (id,a) values (759,53);
+insert into t (id,a) values (759,54);
+insert into t (id,a) values (759,55);
+insert into t (id,a) values (759,56);
+insert into t (id,a) values (759,57);
+insert into t (id,a) values (759,58);
+insert into t (id,a) values (759,59);
+insert into t (id,a) values (759,60);
+insert into t (id,a) values (759,61);
+insert into t (id,a) values (759,62);
+insert into t (id,a) values (759,63);
+insert into t (id,a) values (759,64);
+insert into t (id,a) values (759,65);
+insert into t (id,a) values (759,66);
+insert into t (id,a) values (759,67);
+insert into t (id,a) values (759,68);
+insert into t (id,a) values (759,69);
+insert into t (id,a) values (759,70);
+insert into t (id,a) values (759,71);
+insert into t (id,a) values (759,72);
+insert into t (id,a) values (759,73);
+insert into t (id,a) values (759,74);
+insert into t (id,a) values (759,75);
+insert into t (id,a) values (759,76);
+insert into t (id,a) values (759,77);
+insert into t (id,a) values (759,78);
+insert into t (id,a) values (759,79);
+insert into t (id,a) values (759,80);
+insert into t (id,a) values (759,81);
+insert into t (id,a) values (759,82);
+insert into t (id,a) values (759,83);
+insert into t (id,a) values (759,84);
+insert into t (id,a) values (759,85);
+insert into t (id,a) values (759,86);
+insert into t (id,a) values (759,87);
+insert into t (id,a) values (759,88);
+insert into t (id,a) values (759,89);
+insert into t (id,a) values (759,90);
+insert into t (id,a) values (759,91);
+insert into t (id,a) values (759,92);
+insert into t (id,a) values (759,93);
+insert into t (id,a) values (759,94);
+insert into t (id,a) values (759,95);
+insert into t (id,a) values (759,96);
+insert into t (id,a) values (759,97);
+insert into t (id,a) values (759,98);
+insert into t (id,a) values (759,99);
+insert into t (id,a) values (760,0);
+insert into t (id,a) values (760,1);
+insert into t (id,a) values (760,2);
+insert into t (id,a) values (760,3);
+insert into t (id,a) values (760,4);
+insert into t (id,a) values (760,5);
+insert into t (id,a) values (760,6);
+insert into t (id,a) values (760,7);
+insert into t (id,a) values (760,8);
+insert into t (id,a) values (760,9);
+insert into t (id,a) values (760,10);
+insert into t (id,a) values (760,11);
+insert into t (id,a) values (760,12);
+insert into t (id,a) values (760,13);
+insert into t (id,a) values (760,14);
+insert into t (id,a) values (760,15);
+insert into t (id,a) values (760,16);
+insert into t (id,a) values (760,17);
+insert into t (id,a) values (760,18);
+insert into t (id,a) values (760,19);
+insert into t (id,a) values (760,20);
+insert into t (id,a) values (760,21);
+insert into t (id,a) values (760,22);
+insert into t (id,a) values (760,23);
+insert into t (id,a) values (760,24);
+insert into t (id,a) values (760,25);
+insert into t (id,a) values (760,26);
+insert into t (id,a) values (760,27);
+insert into t (id,a) values (760,28);
+insert into t (id,a) values (760,29);
+insert into t (id,a) values (760,30);
+insert into t (id,a) values (760,31);
+insert into t (id,a) values (760,32);
+insert into t (id,a) values (760,33);
+insert into t (id,a) values (760,34);
+insert into t (id,a) values (760,35);
+insert into t (id,a) values (760,36);
+insert into t (id,a) values (760,37);
+insert into t (id,a) values (760,38);
+insert into t (id,a) values (760,39);
+insert into t (id,a) values (760,40);
+insert into t (id,a) values (760,41);
+insert into t (id,a) values (760,42);
+insert into t (id,a) values (760,43);
+insert into t (id,a) values (760,44);
+insert into t (id,a) values (760,45);
+insert into t (id,a) values (760,46);
+insert into t (id,a) values (760,47);
+insert into t (id,a) values (760,48);
+insert into t (id,a) values (760,49);
+insert into t (id,a) values (760,50);
+insert into t (id,a) values (760,51);
+insert into t (id,a) values (760,52);
+insert into t (id,a) values (760,53);
+insert into t (id,a) values (760,54);
+insert into t (id,a) values (760,55);
+insert into t (id,a) values (760,56);
+insert into t (id,a) values (760,57);
+insert into t (id,a) values (760,58);
+insert into t (id,a) values (760,59);
+insert into t (id,a) values (760,60);
+insert into t (id,a) values (760,61);
+insert into t (id,a) values (760,62);
+insert into t (id,a) values (760,63);
+insert into t (id,a) values (760,64);
+insert into t (id,a) values (760,65);
+insert into t (id,a) values (760,66);
+insert into t (id,a) values (760,67);
+insert into t (id,a) values (760,68);
+insert into t (id,a) values (760,69);
+insert into t (id,a) values (760,70);
+insert into t (id,a) values (760,71);
+insert into t (id,a) values (760,72);
+insert into t (id,a) values (760,73);
+insert into t (id,a) values (760,74);
+insert into t (id,a) values (760,75);
+insert into t (id,a) values (760,76);
+insert into t (id,a) values (760,77);
+insert into t (id,a) values (760,78);
+insert into t (id,a) values (760,79);
+insert into t (id,a) values (760,80);
+insert into t (id,a) values (760,81);
+insert into t (id,a) values (760,82);
+insert into t (id,a) values (760,83);
+insert into t (id,a) values (760,84);
+insert into t (id,a) values (760,85);
+insert into t (id,a) values (760,86);
+insert into t (id,a) values (760,87);
+insert into t (id,a) values (760,88);
+insert into t (id,a) values (760,89);
+insert into t (id,a) values (760,90);
+insert into t (id,a) values (760,91);
+insert into t (id,a) values (760,92);
+insert into t (id,a) values (760,93);
+insert into t (id,a) values (760,94);
+insert into t (id,a) values (760,95);
+insert into t (id,a) values (760,96);
+insert into t (id,a) values (760,97);
+insert into t (id,a) values (760,98);
+insert into t (id,a) values (760,99);
+insert into t (id,a) values (761,0);
+insert into t (id,a) values (761,1);
+insert into t (id,a) values (761,2);
+insert into t (id,a) values (761,3);
+insert into t (id,a) values (761,4);
+insert into t (id,a) values (761,5);
+insert into t (id,a) values (761,6);
+insert into t (id,a) values (761,7);
+insert into t (id,a) values (761,8);
+insert into t (id,a) values (761,9);
+insert into t (id,a) values (761,10);
+insert into t (id,a) values (761,11);
+insert into t (id,a) values (761,12);
+insert into t (id,a) values (761,13);
+insert into t (id,a) values (761,14);
+insert into t (id,a) values (761,15);
+insert into t (id,a) values (761,16);
+insert into t (id,a) values (761,17);
+insert into t (id,a) values (761,18);
+insert into t (id,a) values (761,19);
+insert into t (id,a) values (761,20);
+insert into t (id,a) values (761,21);
+insert into t (id,a) values (761,22);
+insert into t (id,a) values (761,23);
+insert into t (id,a) values (761,24);
+insert into t (id,a) values (761,25);
+insert into t (id,a) values (761,26);
+insert into t (id,a) values (761,27);
+insert into t (id,a) values (761,28);
+insert into t (id,a) values (761,29);
+insert into t (id,a) values (761,30);
+insert into t (id,a) values (761,31);
+insert into t (id,a) values (761,32);
+insert into t (id,a) values (761,33);
+insert into t (id,a) values (761,34);
+insert into t (id,a) values (761,35);
+insert into t (id,a) values (761,36);
+insert into t (id,a) values (761,37);
+insert into t (id,a) values (761,38);
+insert into t (id,a) values (761,39);
+insert into t (id,a) values (761,40);
+insert into t (id,a) values (761,41);
+insert into t (id,a) values (761,42);
+insert into t (id,a) values (761,43);
+insert into t (id,a) values (761,44);
+insert into t (id,a) values (761,45);
+insert into t (id,a) values (761,46);
+insert into t (id,a) values (761,47);
+insert into t (id,a) values (761,48);
+insert into t (id,a) values (761,49);
+insert into t (id,a) values (761,50);
+insert into t (id,a) values (761,51);
+insert into t (id,a) values (761,52);
+insert into t (id,a) values (761,53);
+insert into t (id,a) values (761,54);
+insert into t (id,a) values (761,55);
+insert into t (id,a) values (761,56);
+insert into t (id,a) values (761,57);
+insert into t (id,a) values (761,58);
+insert into t (id,a) values (761,59);
+insert into t (id,a) values (761,60);
+insert into t (id,a) values (761,61);
+insert into t (id,a) values (761,62);
+insert into t (id,a) values (761,63);
+insert into t (id,a) values (761,64);
+insert into t (id,a) values (761,65);
+insert into t (id,a) values (761,66);
+insert into t (id,a) values (761,67);
+insert into t (id,a) values (761,68);
+insert into t (id,a) values (761,69);
+insert into t (id,a) values (761,70);
+insert into t (id,a) values (761,71);
+insert into t (id,a) values (761,72);
+insert into t (id,a) values (761,73);
+insert into t (id,a) values (761,74);
+insert into t (id,a) values (761,75);
+insert into t (id,a) values (761,76);
+insert into t (id,a) values (761,77);
+insert into t (id,a) values (761,78);
+insert into t (id,a) values (761,79);
+insert into t (id,a) values (761,80);
+insert into t (id,a) values (761,81);
+insert into t (id,a) values (761,82);
+insert into t (id,a) values (761,83);
+insert into t (id,a) values (761,84);
+insert into t (id,a) values (761,85);
+insert into t (id,a) values (761,86);
+insert into t (id,a) values (761,87);
+insert into t (id,a) values (761,88);
+insert into t (id,a) values (761,89);
+insert into t (id,a) values (761,90);
+insert into t (id,a) values (761,91);
+insert into t (id,a) values (761,92);
+insert into t (id,a) values (761,93);
+insert into t (id,a) values (761,94);
+insert into t (id,a) values (761,95);
+insert into t (id,a) values (761,96);
+insert into t (id,a) values (761,97);
+insert into t (id,a) values (761,98);
+insert into t (id,a) values (761,99);
+insert into t (id,a) values (762,0);
+insert into t (id,a) values (762,1);
+insert into t (id,a) values (762,2);
+insert into t (id,a) values (762,3);
+insert into t (id,a) values (762,4);
+insert into t (id,a) values (762,5);
+insert into t (id,a) values (762,6);
+insert into t (id,a) values (762,7);
+insert into t (id,a) values (762,8);
+insert into t (id,a) values (762,9);
+insert into t (id,a) values (762,10);
+insert into t (id,a) values (762,11);
+insert into t (id,a) values (762,12);
+insert into t (id,a) values (762,13);
+insert into t (id,a) values (762,14);
+insert into t (id,a) values (762,15);
+insert into t (id,a) values (762,16);
+insert into t (id,a) values (762,17);
+insert into t (id,a) values (762,18);
+insert into t (id,a) values (762,19);
+insert into t (id,a) values (762,20);
+insert into t (id,a) values (762,21);
+insert into t (id,a) values (762,22);
+insert into t (id,a) values (762,23);
+insert into t (id,a) values (762,24);
+insert into t (id,a) values (762,25);
+insert into t (id,a) values (762,26);
+insert into t (id,a) values (762,27);
+insert into t (id,a) values (762,28);
+insert into t (id,a) values (762,29);
+insert into t (id,a) values (762,30);
+insert into t (id,a) values (762,31);
+insert into t (id,a) values (762,32);
+insert into t (id,a) values (762,33);
+insert into t (id,a) values (762,34);
+insert into t (id,a) values (762,35);
+insert into t (id,a) values (762,36);
+insert into t (id,a) values (762,37);
+insert into t (id,a) values (762,38);
+insert into t (id,a) values (762,39);
+insert into t (id,a) values (762,40);
+insert into t (id,a) values (762,41);
+insert into t (id,a) values (762,42);
+insert into t (id,a) values (762,43);
+insert into t (id,a) values (762,44);
+insert into t (id,a) values (762,45);
+insert into t (id,a) values (762,46);
+insert into t (id,a) values (762,47);
+insert into t (id,a) values (762,48);
+insert into t (id,a) values (762,49);
+insert into t (id,a) values (762,50);
+insert into t (id,a) values (762,51);
+insert into t (id,a) values (762,52);
+insert into t (id,a) values (762,53);
+insert into t (id,a) values (762,54);
+insert into t (id,a) values (762,55);
+insert into t (id,a) values (762,56);
+insert into t (id,a) values (762,57);
+insert into t (id,a) values (762,58);
+insert into t (id,a) values (762,59);
+insert into t (id,a) values (762,60);
+insert into t (id,a) values (762,61);
+insert into t (id,a) values (762,62);
+insert into t (id,a) values (762,63);
+insert into t (id,a) values (762,64);
+insert into t (id,a) values (762,65);
+insert into t (id,a) values (762,66);
+insert into t (id,a) values (762,67);
+insert into t (id,a) values (762,68);
+insert into t (id,a) values (762,69);
+insert into t (id,a) values (762,70);
+insert into t (id,a) values (762,71);
+insert into t (id,a) values (762,72);
+insert into t (id,a) values (762,73);
+insert into t (id,a) values (762,74);
+insert into t (id,a) values (762,75);
+insert into t (id,a) values (762,76);
+insert into t (id,a) values (762,77);
+insert into t (id,a) values (762,78);
+insert into t (id,a) values (762,79);
+insert into t (id,a) values (762,80);
+insert into t (id,a) values (762,81);
+insert into t (id,a) values (762,82);
+insert into t (id,a) values (762,83);
+insert into t (id,a) values (762,84);
+insert into t (id,a) values (762,85);
+insert into t (id,a) values (762,86);
+insert into t (id,a) values (762,87);
+insert into t (id,a) values (762,88);
+insert into t (id,a) values (762,89);
+insert into t (id,a) values (762,90);
+insert into t (id,a) values (762,91);
+insert into t (id,a) values (762,92);
+insert into t (id,a) values (762,93);
+insert into t (id,a) values (762,94);
+insert into t (id,a) values (762,95);
+insert into t (id,a) values (762,96);
+insert into t (id,a) values (762,97);
+insert into t (id,a) values (762,98);
+insert into t (id,a) values (762,99);
+insert into t (id,a) values (763,0);
+insert into t (id,a) values (763,1);
+insert into t (id,a) values (763,2);
+insert into t (id,a) values (763,3);
+insert into t (id,a) values (763,4);
+insert into t (id,a) values (763,5);
+insert into t (id,a) values (763,6);
+insert into t (id,a) values (763,7);
+insert into t (id,a) values (763,8);
+insert into t (id,a) values (763,9);
+insert into t (id,a) values (763,10);
+insert into t (id,a) values (763,11);
+insert into t (id,a) values (763,12);
+insert into t (id,a) values (763,13);
+insert into t (id,a) values (763,14);
+insert into t (id,a) values (763,15);
+insert into t (id,a) values (763,16);
+insert into t (id,a) values (763,17);
+insert into t (id,a) values (763,18);
+insert into t (id,a) values (763,19);
+insert into t (id,a) values (763,20);
+insert into t (id,a) values (763,21);
+insert into t (id,a) values (763,22);
+insert into t (id,a) values (763,23);
+insert into t (id,a) values (763,24);
+insert into t (id,a) values (763,25);
+insert into t (id,a) values (763,26);
+insert into t (id,a) values (763,27);
+insert into t (id,a) values (763,28);
+insert into t (id,a) values (763,29);
+insert into t (id,a) values (763,30);
+insert into t (id,a) values (763,31);
+insert into t (id,a) values (763,32);
+insert into t (id,a) values (763,33);
+insert into t (id,a) values (763,34);
+insert into t (id,a) values (763,35);
+insert into t (id,a) values (763,36);
+insert into t (id,a) values (763,37);
+insert into t (id,a) values (763,38);
+insert into t (id,a) values (763,39);
+insert into t (id,a) values (763,40);
+insert into t (id,a) values (763,41);
+insert into t (id,a) values (763,42);
+insert into t (id,a) values (763,43);
+insert into t (id,a) values (763,44);
+insert into t (id,a) values (763,45);
+insert into t (id,a) values (763,46);
+insert into t (id,a) values (763,47);
+insert into t (id,a) values (763,48);
+insert into t (id,a) values (763,49);
+insert into t (id,a) values (763,50);
+insert into t (id,a) values (763,51);
+insert into t (id,a) values (763,52);
+insert into t (id,a) values (763,53);
+insert into t (id,a) values (763,54);
+insert into t (id,a) values (763,55);
+insert into t (id,a) values (763,56);
+insert into t (id,a) values (763,57);
+insert into t (id,a) values (763,58);
+insert into t (id,a) values (763,59);
+insert into t (id,a) values (763,60);
+insert into t (id,a) values (763,61);
+insert into t (id,a) values (763,62);
+insert into t (id,a) values (763,63);
+insert into t (id,a) values (763,64);
+insert into t (id,a) values (763,65);
+insert into t (id,a) values (763,66);
+insert into t (id,a) values (763,67);
+insert into t (id,a) values (763,68);
+insert into t (id,a) values (763,69);
+insert into t (id,a) values (763,70);
+insert into t (id,a) values (763,71);
+insert into t (id,a) values (763,72);
+insert into t (id,a) values (763,73);
+insert into t (id,a) values (763,74);
+insert into t (id,a) values (763,75);
+insert into t (id,a) values (763,76);
+insert into t (id,a) values (763,77);
+insert into t (id,a) values (763,78);
+insert into t (id,a) values (763,79);
+insert into t (id,a) values (763,80);
+insert into t (id,a) values (763,81);
+insert into t (id,a) values (763,82);
+insert into t (id,a) values (763,83);
+insert into t (id,a) values (763,84);
+insert into t (id,a) values (763,85);
+insert into t (id,a) values (763,86);
+insert into t (id,a) values (763,87);
+insert into t (id,a) values (763,88);
+insert into t (id,a) values (763,89);
+insert into t (id,a) values (763,90);
+insert into t (id,a) values (763,91);
+insert into t (id,a) values (763,92);
+insert into t (id,a) values (763,93);
+insert into t (id,a) values (763,94);
+insert into t (id,a) values (763,95);
+insert into t (id,a) values (763,96);
+insert into t (id,a) values (763,97);
+insert into t (id,a) values (763,98);
+insert into t (id,a) values (763,99);
+insert into t (id,a) values (764,0);
+insert into t (id,a) values (764,1);
+insert into t (id,a) values (764,2);
+insert into t (id,a) values (764,3);
+insert into t (id,a) values (764,4);
+insert into t (id,a) values (764,5);
+insert into t (id,a) values (764,6);
+insert into t (id,a) values (764,7);
+insert into t (id,a) values (764,8);
+insert into t (id,a) values (764,9);
+insert into t (id,a) values (764,10);
+insert into t (id,a) values (764,11);
+insert into t (id,a) values (764,12);
+insert into t (id,a) values (764,13);
+insert into t (id,a) values (764,14);
+insert into t (id,a) values (764,15);
+insert into t (id,a) values (764,16);
+insert into t (id,a) values (764,17);
+insert into t (id,a) values (764,18);
+insert into t (id,a) values (764,19);
+insert into t (id,a) values (764,20);
+insert into t (id,a) values (764,21);
+insert into t (id,a) values (764,22);
+insert into t (id,a) values (764,23);
+insert into t (id,a) values (764,24);
+insert into t (id,a) values (764,25);
+insert into t (id,a) values (764,26);
+insert into t (id,a) values (764,27);
+insert into t (id,a) values (764,28);
+insert into t (id,a) values (764,29);
+insert into t (id,a) values (764,30);
+insert into t (id,a) values (764,31);
+insert into t (id,a) values (764,32);
+insert into t (id,a) values (764,33);
+insert into t (id,a) values (764,34);
+insert into t (id,a) values (764,35);
+insert into t (id,a) values (764,36);
+insert into t (id,a) values (764,37);
+insert into t (id,a) values (764,38);
+insert into t (id,a) values (764,39);
+insert into t (id,a) values (764,40);
+insert into t (id,a) values (764,41);
+insert into t (id,a) values (764,42);
+insert into t (id,a) values (764,43);
+insert into t (id,a) values (764,44);
+insert into t (id,a) values (764,45);
+insert into t (id,a) values (764,46);
+insert into t (id,a) values (764,47);
+insert into t (id,a) values (764,48);
+insert into t (id,a) values (764,49);
+insert into t (id,a) values (764,50);
+insert into t (id,a) values (764,51);
+insert into t (id,a) values (764,52);
+insert into t (id,a) values (764,53);
+insert into t (id,a) values (764,54);
+insert into t (id,a) values (764,55);
+insert into t (id,a) values (764,56);
+insert into t (id,a) values (764,57);
+insert into t (id,a) values (764,58);
+insert into t (id,a) values (764,59);
+insert into t (id,a) values (764,60);
+insert into t (id,a) values (764,61);
+insert into t (id,a) values (764,62);
+insert into t (id,a) values (764,63);
+insert into t (id,a) values (764,64);
+insert into t (id,a) values (764,65);
+insert into t (id,a) values (764,66);
+insert into t (id,a) values (764,67);
+insert into t (id,a) values (764,68);
+insert into t (id,a) values (764,69);
+insert into t (id,a) values (764,70);
+insert into t (id,a) values (764,71);
+insert into t (id,a) values (764,72);
+insert into t (id,a) values (764,73);
+insert into t (id,a) values (764,74);
+insert into t (id,a) values (764,75);
+insert into t (id,a) values (764,76);
+insert into t (id,a) values (764,77);
+insert into t (id,a) values (764,78);
+insert into t (id,a) values (764,79);
+insert into t (id,a) values (764,80);
+insert into t (id,a) values (764,81);
+insert into t (id,a) values (764,82);
+insert into t (id,a) values (764,83);
+insert into t (id,a) values (764,84);
+insert into t (id,a) values (764,85);
+insert into t (id,a) values (764,86);
+insert into t (id,a) values (764,87);
+insert into t (id,a) values (764,88);
+insert into t (id,a) values (764,89);
+insert into t (id,a) values (764,90);
+insert into t (id,a) values (764,91);
+insert into t (id,a) values (764,92);
+insert into t (id,a) values (764,93);
+insert into t (id,a) values (764,94);
+insert into t (id,a) values (764,95);
+insert into t (id,a) values (764,96);
+insert into t (id,a) values (764,97);
+insert into t (id,a) values (764,98);
+insert into t (id,a) values (764,99);
+insert into t (id,a) values (765,0);
+insert into t (id,a) values (765,1);
+insert into t (id,a) values (765,2);
+insert into t (id,a) values (765,3);
+insert into t (id,a) values (765,4);
+insert into t (id,a) values (765,5);
+insert into t (id,a) values (765,6);
+insert into t (id,a) values (765,7);
+insert into t (id,a) values (765,8);
+insert into t (id,a) values (765,9);
+insert into t (id,a) values (765,10);
+insert into t (id,a) values (765,11);
+insert into t (id,a) values (765,12);
+insert into t (id,a) values (765,13);
+insert into t (id,a) values (765,14);
+insert into t (id,a) values (765,15);
+insert into t (id,a) values (765,16);
+insert into t (id,a) values (765,17);
+insert into t (id,a) values (765,18);
+insert into t (id,a) values (765,19);
+insert into t (id,a) values (765,20);
+insert into t (id,a) values (765,21);
+insert into t (id,a) values (765,22);
+insert into t (id,a) values (765,23);
+insert into t (id,a) values (765,24);
+insert into t (id,a) values (765,25);
+insert into t (id,a) values (765,26);
+insert into t (id,a) values (765,27);
+insert into t (id,a) values (765,28);
+insert into t (id,a) values (765,29);
+insert into t (id,a) values (765,30);
+insert into t (id,a) values (765,31);
+insert into t (id,a) values (765,32);
+insert into t (id,a) values (765,33);
+insert into t (id,a) values (765,34);
+insert into t (id,a) values (765,35);
+insert into t (id,a) values (765,36);
+insert into t (id,a) values (765,37);
+insert into t (id,a) values (765,38);
+insert into t (id,a) values (765,39);
+insert into t (id,a) values (765,40);
+insert into t (id,a) values (765,41);
+insert into t (id,a) values (765,42);
+insert into t (id,a) values (765,43);
+insert into t (id,a) values (765,44);
+insert into t (id,a) values (765,45);
+insert into t (id,a) values (765,46);
+insert into t (id,a) values (765,47);
+insert into t (id,a) values (765,48);
+insert into t (id,a) values (765,49);
+insert into t (id,a) values (765,50);
+insert into t (id,a) values (765,51);
+insert into t (id,a) values (765,52);
+insert into t (id,a) values (765,53);
+insert into t (id,a) values (765,54);
+insert into t (id,a) values (765,55);
+insert into t (id,a) values (765,56);
+insert into t (id,a) values (765,57);
+insert into t (id,a) values (765,58);
+insert into t (id,a) values (765,59);
+insert into t (id,a) values (765,60);
+insert into t (id,a) values (765,61);
+insert into t (id,a) values (765,62);
+insert into t (id,a) values (765,63);
+insert into t (id,a) values (765,64);
+insert into t (id,a) values (765,65);
+insert into t (id,a) values (765,66);
+insert into t (id,a) values (765,67);
+insert into t (id,a) values (765,68);
+insert into t (id,a) values (765,69);
+insert into t (id,a) values (765,70);
+insert into t (id,a) values (765,71);
+insert into t (id,a) values (765,72);
+insert into t (id,a) values (765,73);
+insert into t (id,a) values (765,74);
+insert into t (id,a) values (765,75);
+insert into t (id,a) values (765,76);
+insert into t (id,a) values (765,77);
+insert into t (id,a) values (765,78);
+insert into t (id,a) values (765,79);
+insert into t (id,a) values (765,80);
+insert into t (id,a) values (765,81);
+insert into t (id,a) values (765,82);
+insert into t (id,a) values (765,83);
+insert into t (id,a) values (765,84);
+insert into t (id,a) values (765,85);
+insert into t (id,a) values (765,86);
+insert into t (id,a) values (765,87);
+insert into t (id,a) values (765,88);
+insert into t (id,a) values (765,89);
+insert into t (id,a) values (765,90);
+insert into t (id,a) values (765,91);
+insert into t (id,a) values (765,92);
+insert into t (id,a) values (765,93);
+insert into t (id,a) values (765,94);
+insert into t (id,a) values (765,95);
+insert into t (id,a) values (765,96);
+insert into t (id,a) values (765,97);
+insert into t (id,a) values (765,98);
+insert into t (id,a) values (765,99);
+insert into t (id,a) values (766,0);
+insert into t (id,a) values (766,1);
+insert into t (id,a) values (766,2);
+insert into t (id,a) values (766,3);
+insert into t (id,a) values (766,4);
+insert into t (id,a) values (766,5);
+insert into t (id,a) values (766,6);
+insert into t (id,a) values (766,7);
+insert into t (id,a) values (766,8);
+insert into t (id,a) values (766,9);
+insert into t (id,a) values (766,10);
+insert into t (id,a) values (766,11);
+insert into t (id,a) values (766,12);
+insert into t (id,a) values (766,13);
+insert into t (id,a) values (766,14);
+insert into t (id,a) values (766,15);
+insert into t (id,a) values (766,16);
+insert into t (id,a) values (766,17);
+insert into t (id,a) values (766,18);
+insert into t (id,a) values (766,19);
+insert into t (id,a) values (766,20);
+insert into t (id,a) values (766,21);
+insert into t (id,a) values (766,22);
+insert into t (id,a) values (766,23);
+insert into t (id,a) values (766,24);
+insert into t (id,a) values (766,25);
+insert into t (id,a) values (766,26);
+insert into t (id,a) values (766,27);
+insert into t (id,a) values (766,28);
+insert into t (id,a) values (766,29);
+insert into t (id,a) values (766,30);
+insert into t (id,a) values (766,31);
+insert into t (id,a) values (766,32);
+insert into t (id,a) values (766,33);
+insert into t (id,a) values (766,34);
+insert into t (id,a) values (766,35);
+insert into t (id,a) values (766,36);
+insert into t (id,a) values (766,37);
+insert into t (id,a) values (766,38);
+insert into t (id,a) values (766,39);
+insert into t (id,a) values (766,40);
+insert into t (id,a) values (766,41);
+insert into t (id,a) values (766,42);
+insert into t (id,a) values (766,43);
+insert into t (id,a) values (766,44);
+insert into t (id,a) values (766,45);
+insert into t (id,a) values (766,46);
+insert into t (id,a) values (766,47);
+insert into t (id,a) values (766,48);
+insert into t (id,a) values (766,49);
+insert into t (id,a) values (766,50);
+insert into t (id,a) values (766,51);
+insert into t (id,a) values (766,52);
+insert into t (id,a) values (766,53);
+insert into t (id,a) values (766,54);
+insert into t (id,a) values (766,55);
+insert into t (id,a) values (766,56);
+insert into t (id,a) values (766,57);
+insert into t (id,a) values (766,58);
+insert into t (id,a) values (766,59);
+insert into t (id,a) values (766,60);
+insert into t (id,a) values (766,61);
+insert into t (id,a) values (766,62);
+insert into t (id,a) values (766,63);
+insert into t (id,a) values (766,64);
+insert into t (id,a) values (766,65);
+insert into t (id,a) values (766,66);
+insert into t (id,a) values (766,67);
+insert into t (id,a) values (766,68);
+insert into t (id,a) values (766,69);
+insert into t (id,a) values (766,70);
+insert into t (id,a) values (766,71);
+insert into t (id,a) values (766,72);
+insert into t (id,a) values (766,73);
+insert into t (id,a) values (766,74);
+insert into t (id,a) values (766,75);
+insert into t (id,a) values (766,76);
+insert into t (id,a) values (766,77);
+insert into t (id,a) values (766,78);
+insert into t (id,a) values (766,79);
+insert into t (id,a) values (766,80);
+insert into t (id,a) values (766,81);
+insert into t (id,a) values (766,82);
+insert into t (id,a) values (766,83);
+insert into t (id,a) values (766,84);
+insert into t (id,a) values (766,85);
+insert into t (id,a) values (766,86);
+insert into t (id,a) values (766,87);
+insert into t (id,a) values (766,88);
+insert into t (id,a) values (766,89);
+insert into t (id,a) values (766,90);
+insert into t (id,a) values (766,91);
+insert into t (id,a) values (766,92);
+insert into t (id,a) values (766,93);
+insert into t (id,a) values (766,94);
+insert into t (id,a) values (766,95);
+insert into t (id,a) values (766,96);
+insert into t (id,a) values (766,97);
+insert into t (id,a) values (766,98);
+insert into t (id,a) values (766,99);
+insert into t (id,a) values (767,0);
+insert into t (id,a) values (767,1);
+insert into t (id,a) values (767,2);
+insert into t (id,a) values (767,3);
+insert into t (id,a) values (767,4);
+insert into t (id,a) values (767,5);
+insert into t (id,a) values (767,6);
+insert into t (id,a) values (767,7);
+insert into t (id,a) values (767,8);
+insert into t (id,a) values (767,9);
+insert into t (id,a) values (767,10);
+insert into t (id,a) values (767,11);
+insert into t (id,a) values (767,12);
+insert into t (id,a) values (767,13);
+insert into t (id,a) values (767,14);
+insert into t (id,a) values (767,15);
+insert into t (id,a) values (767,16);
+insert into t (id,a) values (767,17);
+insert into t (id,a) values (767,18);
+insert into t (id,a) values (767,19);
+insert into t (id,a) values (767,20);
+insert into t (id,a) values (767,21);
+insert into t (id,a) values (767,22);
+insert into t (id,a) values (767,23);
+insert into t (id,a) values (767,24);
+insert into t (id,a) values (767,25);
+insert into t (id,a) values (767,26);
+insert into t (id,a) values (767,27);
+insert into t (id,a) values (767,28);
+insert into t (id,a) values (767,29);
+insert into t (id,a) values (767,30);
+insert into t (id,a) values (767,31);
+insert into t (id,a) values (767,32);
+insert into t (id,a) values (767,33);
+insert into t (id,a) values (767,34);
+insert into t (id,a) values (767,35);
+insert into t (id,a) values (767,36);
+insert into t (id,a) values (767,37);
+insert into t (id,a) values (767,38);
+insert into t (id,a) values (767,39);
+insert into t (id,a) values (767,40);
+insert into t (id,a) values (767,41);
+insert into t (id,a) values (767,42);
+insert into t (id,a) values (767,43);
+insert into t (id,a) values (767,44);
+insert into t (id,a) values (767,45);
+insert into t (id,a) values (767,46);
+insert into t (id,a) values (767,47);
+insert into t (id,a) values (767,48);
+insert into t (id,a) values (767,49);
+insert into t (id,a) values (767,50);
+insert into t (id,a) values (767,51);
+insert into t (id,a) values (767,52);
+insert into t (id,a) values (767,53);
+insert into t (id,a) values (767,54);
+insert into t (id,a) values (767,55);
+insert into t (id,a) values (767,56);
+insert into t (id,a) values (767,57);
+insert into t (id,a) values (767,58);
+insert into t (id,a) values (767,59);
+insert into t (id,a) values (767,60);
+insert into t (id,a) values (767,61);
+insert into t (id,a) values (767,62);
+insert into t (id,a) values (767,63);
+insert into t (id,a) values (767,64);
+insert into t (id,a) values (767,65);
+insert into t (id,a) values (767,66);
+insert into t (id,a) values (767,67);
+insert into t (id,a) values (767,68);
+insert into t (id,a) values (767,69);
+insert into t (id,a) values (767,70);
+insert into t (id,a) values (767,71);
+insert into t (id,a) values (767,72);
+insert into t (id,a) values (767,73);
+insert into t (id,a) values (767,74);
+insert into t (id,a) values (767,75);
+insert into t (id,a) values (767,76);
+insert into t (id,a) values (767,77);
+insert into t (id,a) values (767,78);
+insert into t (id,a) values (767,79);
+insert into t (id,a) values (767,80);
+insert into t (id,a) values (767,81);
+insert into t (id,a) values (767,82);
+insert into t (id,a) values (767,83);
+insert into t (id,a) values (767,84);
+insert into t (id,a) values (767,85);
+insert into t (id,a) values (767,86);
+insert into t (id,a) values (767,87);
+insert into t (id,a) values (767,88);
+insert into t (id,a) values (767,89);
+insert into t (id,a) values (767,90);
+insert into t (id,a) values (767,91);
+insert into t (id,a) values (767,92);
+insert into t (id,a) values (767,93);
+insert into t (id,a) values (767,94);
+insert into t (id,a) values (767,95);
+insert into t (id,a) values (767,96);
+insert into t (id,a) values (767,97);
+insert into t (id,a) values (767,98);
+insert into t (id,a) values (767,99);
+insert into t (id,a) values (768,0);
+insert into t (id,a) values (768,1);
+insert into t (id,a) values (768,2);
+insert into t (id,a) values (768,3);
+insert into t (id,a) values (768,4);
+insert into t (id,a) values (768,5);
+insert into t (id,a) values (768,6);
+insert into t (id,a) values (768,7);
+insert into t (id,a) values (768,8);
+insert into t (id,a) values (768,9);
+insert into t (id,a) values (768,10);
+insert into t (id,a) values (768,11);
+insert into t (id,a) values (768,12);
+insert into t (id,a) values (768,13);
+insert into t (id,a) values (768,14);
+insert into t (id,a) values (768,15);
+insert into t (id,a) values (768,16);
+insert into t (id,a) values (768,17);
+insert into t (id,a) values (768,18);
+insert into t (id,a) values (768,19);
+insert into t (id,a) values (768,20);
+insert into t (id,a) values (768,21);
+insert into t (id,a) values (768,22);
+insert into t (id,a) values (768,23);
+insert into t (id,a) values (768,24);
+insert into t (id,a) values (768,25);
+insert into t (id,a) values (768,26);
+insert into t (id,a) values (768,27);
+insert into t (id,a) values (768,28);
+insert into t (id,a) values (768,29);
+insert into t (id,a) values (768,30);
+insert into t (id,a) values (768,31);
+insert into t (id,a) values (768,32);
+insert into t (id,a) values (768,33);
+insert into t (id,a) values (768,34);
+insert into t (id,a) values (768,35);
+insert into t (id,a) values (768,36);
+insert into t (id,a) values (768,37);
+insert into t (id,a) values (768,38);
+insert into t (id,a) values (768,39);
+insert into t (id,a) values (768,40);
+insert into t (id,a) values (768,41);
+insert into t (id,a) values (768,42);
+insert into t (id,a) values (768,43);
+insert into t (id,a) values (768,44);
+insert into t (id,a) values (768,45);
+insert into t (id,a) values (768,46);
+insert into t (id,a) values (768,47);
+insert into t (id,a) values (768,48);
+insert into t (id,a) values (768,49);
+insert into t (id,a) values (768,50);
+insert into t (id,a) values (768,51);
+insert into t (id,a) values (768,52);
+insert into t (id,a) values (768,53);
+insert into t (id,a) values (768,54);
+insert into t (id,a) values (768,55);
+insert into t (id,a) values (768,56);
+insert into t (id,a) values (768,57);
+insert into t (id,a) values (768,58);
+insert into t (id,a) values (768,59);
+insert into t (id,a) values (768,60);
+insert into t (id,a) values (768,61);
+insert into t (id,a) values (768,62);
+insert into t (id,a) values (768,63);
+insert into t (id,a) values (768,64);
+insert into t (id,a) values (768,65);
+insert into t (id,a) values (768,66);
+insert into t (id,a) values (768,67);
+insert into t (id,a) values (768,68);
+insert into t (id,a) values (768,69);
+insert into t (id,a) values (768,70);
+insert into t (id,a) values (768,71);
+insert into t (id,a) values (768,72);
+insert into t (id,a) values (768,73);
+insert into t (id,a) values (768,74);
+insert into t (id,a) values (768,75);
+insert into t (id,a) values (768,76);
+insert into t (id,a) values (768,77);
+insert into t (id,a) values (768,78);
+insert into t (id,a) values (768,79);
+insert into t (id,a) values (768,80);
+insert into t (id,a) values (768,81);
+insert into t (id,a) values (768,82);
+insert into t (id,a) values (768,83);
+insert into t (id,a) values (768,84);
+insert into t (id,a) values (768,85);
+insert into t (id,a) values (768,86);
+insert into t (id,a) values (768,87);
+insert into t (id,a) values (768,88);
+insert into t (id,a) values (768,89);
+insert into t (id,a) values (768,90);
+insert into t (id,a) values (768,91);
+insert into t (id,a) values (768,92);
+insert into t (id,a) values (768,93);
+insert into t (id,a) values (768,94);
+insert into t (id,a) values (768,95);
+insert into t (id,a) values (768,96);
+insert into t (id,a) values (768,97);
+insert into t (id,a) values (768,98);
+insert into t (id,a) values (768,99);
+insert into t (id,a) values (769,0);
+insert into t (id,a) values (769,1);
+insert into t (id,a) values (769,2);
+insert into t (id,a) values (769,3);
+insert into t (id,a) values (769,4);
+insert into t (id,a) values (769,5);
+insert into t (id,a) values (769,6);
+insert into t (id,a) values (769,7);
+insert into t (id,a) values (769,8);
+insert into t (id,a) values (769,9);
+insert into t (id,a) values (769,10);
+insert into t (id,a) values (769,11);
+insert into t (id,a) values (769,12);
+insert into t (id,a) values (769,13);
+insert into t (id,a) values (769,14);
+insert into t (id,a) values (769,15);
+insert into t (id,a) values (769,16);
+insert into t (id,a) values (769,17);
+insert into t (id,a) values (769,18);
+insert into t (id,a) values (769,19);
+insert into t (id,a) values (769,20);
+insert into t (id,a) values (769,21);
+insert into t (id,a) values (769,22);
+insert into t (id,a) values (769,23);
+insert into t (id,a) values (769,24);
+insert into t (id,a) values (769,25);
+insert into t (id,a) values (769,26);
+insert into t (id,a) values (769,27);
+insert into t (id,a) values (769,28);
+insert into t (id,a) values (769,29);
+insert into t (id,a) values (769,30);
+insert into t (id,a) values (769,31);
+insert into t (id,a) values (769,32);
+insert into t (id,a) values (769,33);
+insert into t (id,a) values (769,34);
+insert into t (id,a) values (769,35);
+insert into t (id,a) values (769,36);
+insert into t (id,a) values (769,37);
+insert into t (id,a) values (769,38);
+insert into t (id,a) values (769,39);
+insert into t (id,a) values (769,40);
+insert into t (id,a) values (769,41);
+insert into t (id,a) values (769,42);
+insert into t (id,a) values (769,43);
+insert into t (id,a) values (769,44);
+insert into t (id,a) values (769,45);
+insert into t (id,a) values (769,46);
+insert into t (id,a) values (769,47);
+insert into t (id,a) values (769,48);
+insert into t (id,a) values (769,49);
+insert into t (id,a) values (769,50);
+insert into t (id,a) values (769,51);
+insert into t (id,a) values (769,52);
+insert into t (id,a) values (769,53);
+insert into t (id,a) values (769,54);
+insert into t (id,a) values (769,55);
+insert into t (id,a) values (769,56);
+insert into t (id,a) values (769,57);
+insert into t (id,a) values (769,58);
+insert into t (id,a) values (769,59);
+insert into t (id,a) values (769,60);
+insert into t (id,a) values (769,61);
+insert into t (id,a) values (769,62);
+insert into t (id,a) values (769,63);
+insert into t (id,a) values (769,64);
+insert into t (id,a) values (769,65);
+insert into t (id,a) values (769,66);
+insert into t (id,a) values (769,67);
+insert into t (id,a) values (769,68);
+insert into t (id,a) values (769,69);
+insert into t (id,a) values (769,70);
+insert into t (id,a) values (769,71);
+insert into t (id,a) values (769,72);
+insert into t (id,a) values (769,73);
+insert into t (id,a) values (769,74);
+insert into t (id,a) values (769,75);
+insert into t (id,a) values (769,76);
+insert into t (id,a) values (769,77);
+insert into t (id,a) values (769,78);
+insert into t (id,a) values (769,79);
+insert into t (id,a) values (769,80);
+insert into t (id,a) values (769,81);
+insert into t (id,a) values (769,82);
+insert into t (id,a) values (769,83);
+insert into t (id,a) values (769,84);
+insert into t (id,a) values (769,85);
+insert into t (id,a) values (769,86);
+insert into t (id,a) values (769,87);
+insert into t (id,a) values (769,88);
+insert into t (id,a) values (769,89);
+insert into t (id,a) values (769,90);
+insert into t (id,a) values (769,91);
+insert into t (id,a) values (769,92);
+insert into t (id,a) values (769,93);
+insert into t (id,a) values (769,94);
+insert into t (id,a) values (769,95);
+insert into t (id,a) values (769,96);
+insert into t (id,a) values (769,97);
+insert into t (id,a) values (769,98);
+insert into t (id,a) values (769,99);
+insert into t (id,a) values (770,0);
+insert into t (id,a) values (770,1);
+insert into t (id,a) values (770,2);
+insert into t (id,a) values (770,3);
+insert into t (id,a) values (770,4);
+insert into t (id,a) values (770,5);
+insert into t (id,a) values (770,6);
+insert into t (id,a) values (770,7);
+insert into t (id,a) values (770,8);
+insert into t (id,a) values (770,9);
+insert into t (id,a) values (770,10);
+insert into t (id,a) values (770,11);
+insert into t (id,a) values (770,12);
+insert into t (id,a) values (770,13);
+insert into t (id,a) values (770,14);
+insert into t (id,a) values (770,15);
+insert into t (id,a) values (770,16);
+insert into t (id,a) values (770,17);
+insert into t (id,a) values (770,18);
+insert into t (id,a) values (770,19);
+insert into t (id,a) values (770,20);
+insert into t (id,a) values (770,21);
+insert into t (id,a) values (770,22);
+insert into t (id,a) values (770,23);
+insert into t (id,a) values (770,24);
+insert into t (id,a) values (770,25);
+insert into t (id,a) values (770,26);
+insert into t (id,a) values (770,27);
+insert into t (id,a) values (770,28);
+insert into t (id,a) values (770,29);
+insert into t (id,a) values (770,30);
+insert into t (id,a) values (770,31);
+insert into t (id,a) values (770,32);
+insert into t (id,a) values (770,33);
+insert into t (id,a) values (770,34);
+insert into t (id,a) values (770,35);
+insert into t (id,a) values (770,36);
+insert into t (id,a) values (770,37);
+insert into t (id,a) values (770,38);
+insert into t (id,a) values (770,39);
+insert into t (id,a) values (770,40);
+insert into t (id,a) values (770,41);
+insert into t (id,a) values (770,42);
+insert into t (id,a) values (770,43);
+insert into t (id,a) values (770,44);
+insert into t (id,a) values (770,45);
+insert into t (id,a) values (770,46);
+insert into t (id,a) values (770,47);
+insert into t (id,a) values (770,48);
+insert into t (id,a) values (770,49);
+insert into t (id,a) values (770,50);
+insert into t (id,a) values (770,51);
+insert into t (id,a) values (770,52);
+insert into t (id,a) values (770,53);
+insert into t (id,a) values (770,54);
+insert into t (id,a) values (770,55);
+insert into t (id,a) values (770,56);
+insert into t (id,a) values (770,57);
+insert into t (id,a) values (770,58);
+insert into t (id,a) values (770,59);
+insert into t (id,a) values (770,60);
+insert into t (id,a) values (770,61);
+insert into t (id,a) values (770,62);
+insert into t (id,a) values (770,63);
+insert into t (id,a) values (770,64);
+insert into t (id,a) values (770,65);
+insert into t (id,a) values (770,66);
+insert into t (id,a) values (770,67);
+insert into t (id,a) values (770,68);
+insert into t (id,a) values (770,69);
+insert into t (id,a) values (770,70);
+insert into t (id,a) values (770,71);
+insert into t (id,a) values (770,72);
+insert into t (id,a) values (770,73);
+insert into t (id,a) values (770,74);
+insert into t (id,a) values (770,75);
+insert into t (id,a) values (770,76);
+insert into t (id,a) values (770,77);
+insert into t (id,a) values (770,78);
+insert into t (id,a) values (770,79);
+insert into t (id,a) values (770,80);
+insert into t (id,a) values (770,81);
+insert into t (id,a) values (770,82);
+insert into t (id,a) values (770,83);
+insert into t (id,a) values (770,84);
+insert into t (id,a) values (770,85);
+insert into t (id,a) values (770,86);
+insert into t (id,a) values (770,87);
+insert into t (id,a) values (770,88);
+insert into t (id,a) values (770,89);
+insert into t (id,a) values (770,90);
+insert into t (id,a) values (770,91);
+insert into t (id,a) values (770,92);
+insert into t (id,a) values (770,93);
+insert into t (id,a) values (770,94);
+insert into t (id,a) values (770,95);
+insert into t (id,a) values (770,96);
+insert into t (id,a) values (770,97);
+insert into t (id,a) values (770,98);
+insert into t (id,a) values (770,99);
+insert into t (id,a) values (771,0);
+insert into t (id,a) values (771,1);
+insert into t (id,a) values (771,2);
+insert into t (id,a) values (771,3);
+insert into t (id,a) values (771,4);
+insert into t (id,a) values (771,5);
+insert into t (id,a) values (771,6);
+insert into t (id,a) values (771,7);
+insert into t (id,a) values (771,8);
+insert into t (id,a) values (771,9);
+insert into t (id,a) values (771,10);
+insert into t (id,a) values (771,11);
+insert into t (id,a) values (771,12);
+insert into t (id,a) values (771,13);
+insert into t (id,a) values (771,14);
+insert into t (id,a) values (771,15);
+insert into t (id,a) values (771,16);
+insert into t (id,a) values (771,17);
+insert into t (id,a) values (771,18);
+insert into t (id,a) values (771,19);
+insert into t (id,a) values (771,20);
+insert into t (id,a) values (771,21);
+insert into t (id,a) values (771,22);
+insert into t (id,a) values (771,23);
+insert into t (id,a) values (771,24);
+insert into t (id,a) values (771,25);
+insert into t (id,a) values (771,26);
+insert into t (id,a) values (771,27);
+insert into t (id,a) values (771,28);
+insert into t (id,a) values (771,29);
+insert into t (id,a) values (771,30);
+insert into t (id,a) values (771,31);
+insert into t (id,a) values (771,32);
+insert into t (id,a) values (771,33);
+insert into t (id,a) values (771,34);
+insert into t (id,a) values (771,35);
+insert into t (id,a) values (771,36);
+insert into t (id,a) values (771,37);
+insert into t (id,a) values (771,38);
+insert into t (id,a) values (771,39);
+insert into t (id,a) values (771,40);
+insert into t (id,a) values (771,41);
+insert into t (id,a) values (771,42);
+insert into t (id,a) values (771,43);
+insert into t (id,a) values (771,44);
+insert into t (id,a) values (771,45);
+insert into t (id,a) values (771,46);
+insert into t (id,a) values (771,47);
+insert into t (id,a) values (771,48);
+insert into t (id,a) values (771,49);
+insert into t (id,a) values (771,50);
+insert into t (id,a) values (771,51);
+insert into t (id,a) values (771,52);
+insert into t (id,a) values (771,53);
+insert into t (id,a) values (771,54);
+insert into t (id,a) values (771,55);
+insert into t (id,a) values (771,56);
+insert into t (id,a) values (771,57);
+insert into t (id,a) values (771,58);
+insert into t (id,a) values (771,59);
+insert into t (id,a) values (771,60);
+insert into t (id,a) values (771,61);
+insert into t (id,a) values (771,62);
+insert into t (id,a) values (771,63);
+insert into t (id,a) values (771,64);
+insert into t (id,a) values (771,65);
+insert into t (id,a) values (771,66);
+insert into t (id,a) values (771,67);
+insert into t (id,a) values (771,68);
+insert into t (id,a) values (771,69);
+insert into t (id,a) values (771,70);
+insert into t (id,a) values (771,71);
+insert into t (id,a) values (771,72);
+insert into t (id,a) values (771,73);
+insert into t (id,a) values (771,74);
+insert into t (id,a) values (771,75);
+insert into t (id,a) values (771,76);
+insert into t (id,a) values (771,77);
+insert into t (id,a) values (771,78);
+insert into t (id,a) values (771,79);
+insert into t (id,a) values (771,80);
+insert into t (id,a) values (771,81);
+insert into t (id,a) values (771,82);
+insert into t (id,a) values (771,83);
+insert into t (id,a) values (771,84);
+insert into t (id,a) values (771,85);
+insert into t (id,a) values (771,86);
+insert into t (id,a) values (771,87);
+insert into t (id,a) values (771,88);
+insert into t (id,a) values (771,89);
+insert into t (id,a) values (771,90);
+insert into t (id,a) values (771,91);
+insert into t (id,a) values (771,92);
+insert into t (id,a) values (771,93);
+insert into t (id,a) values (771,94);
+insert into t (id,a) values (771,95);
+insert into t (id,a) values (771,96);
+insert into t (id,a) values (771,97);
+insert into t (id,a) values (771,98);
+insert into t (id,a) values (771,99);
+insert into t (id,a) values (772,0);
+insert into t (id,a) values (772,1);
+insert into t (id,a) values (772,2);
+insert into t (id,a) values (772,3);
+insert into t (id,a) values (772,4);
+insert into t (id,a) values (772,5);
+insert into t (id,a) values (772,6);
+insert into t (id,a) values (772,7);
+insert into t (id,a) values (772,8);
+insert into t (id,a) values (772,9);
+insert into t (id,a) values (772,10);
+insert into t (id,a) values (772,11);
+insert into t (id,a) values (772,12);
+insert into t (id,a) values (772,13);
+insert into t (id,a) values (772,14);
+insert into t (id,a) values (772,15);
+insert into t (id,a) values (772,16);
+insert into t (id,a) values (772,17);
+insert into t (id,a) values (772,18);
+insert into t (id,a) values (772,19);
+insert into t (id,a) values (772,20);
+insert into t (id,a) values (772,21);
+insert into t (id,a) values (772,22);
+insert into t (id,a) values (772,23);
+insert into t (id,a) values (772,24);
+insert into t (id,a) values (772,25);
+insert into t (id,a) values (772,26);
+insert into t (id,a) values (772,27);
+insert into t (id,a) values (772,28);
+insert into t (id,a) values (772,29);
+insert into t (id,a) values (772,30);
+insert into t (id,a) values (772,31);
+insert into t (id,a) values (772,32);
+insert into t (id,a) values (772,33);
+insert into t (id,a) values (772,34);
+insert into t (id,a) values (772,35);
+insert into t (id,a) values (772,36);
+insert into t (id,a) values (772,37);
+insert into t (id,a) values (772,38);
+insert into t (id,a) values (772,39);
+insert into t (id,a) values (772,40);
+insert into t (id,a) values (772,41);
+insert into t (id,a) values (772,42);
+insert into t (id,a) values (772,43);
+insert into t (id,a) values (772,44);
+insert into t (id,a) values (772,45);
+insert into t (id,a) values (772,46);
+insert into t (id,a) values (772,47);
+insert into t (id,a) values (772,48);
+insert into t (id,a) values (772,49);
+insert into t (id,a) values (772,50);
+insert into t (id,a) values (772,51);
+insert into t (id,a) values (772,52);
+insert into t (id,a) values (772,53);
+insert into t (id,a) values (772,54);
+insert into t (id,a) values (772,55);
+insert into t (id,a) values (772,56);
+insert into t (id,a) values (772,57);
+insert into t (id,a) values (772,58);
+insert into t (id,a) values (772,59);
+insert into t (id,a) values (772,60);
+insert into t (id,a) values (772,61);
+insert into t (id,a) values (772,62);
+insert into t (id,a) values (772,63);
+insert into t (id,a) values (772,64);
+insert into t (id,a) values (772,65);
+insert into t (id,a) values (772,66);
+insert into t (id,a) values (772,67);
+insert into t (id,a) values (772,68);
+insert into t (id,a) values (772,69);
+insert into t (id,a) values (772,70);
+insert into t (id,a) values (772,71);
+insert into t (id,a) values (772,72);
+insert into t (id,a) values (772,73);
+insert into t (id,a) values (772,74);
+insert into t (id,a) values (772,75);
+insert into t (id,a) values (772,76);
+insert into t (id,a) values (772,77);
+insert into t (id,a) values (772,78);
+insert into t (id,a) values (772,79);
+insert into t (id,a) values (772,80);
+insert into t (id,a) values (772,81);
+insert into t (id,a) values (772,82);
+insert into t (id,a) values (772,83);
+insert into t (id,a) values (772,84);
+insert into t (id,a) values (772,85);
+insert into t (id,a) values (772,86);
+insert into t (id,a) values (772,87);
+insert into t (id,a) values (772,88);
+insert into t (id,a) values (772,89);
+insert into t (id,a) values (772,90);
+insert into t (id,a) values (772,91);
+insert into t (id,a) values (772,92);
+insert into t (id,a) values (772,93);
+insert into t (id,a) values (772,94);
+insert into t (id,a) values (772,95);
+insert into t (id,a) values (772,96);
+insert into t (id,a) values (772,97);
+insert into t (id,a) values (772,98);
+insert into t (id,a) values (772,99);
+insert into t (id,a) values (773,0);
+insert into t (id,a) values (773,1);
+insert into t (id,a) values (773,2);
+insert into t (id,a) values (773,3);
+insert into t (id,a) values (773,4);
+insert into t (id,a) values (773,5);
+insert into t (id,a) values (773,6);
+insert into t (id,a) values (773,7);
+insert into t (id,a) values (773,8);
+insert into t (id,a) values (773,9);
+insert into t (id,a) values (773,10);
+insert into t (id,a) values (773,11);
+insert into t (id,a) values (773,12);
+insert into t (id,a) values (773,13);
+insert into t (id,a) values (773,14);
+insert into t (id,a) values (773,15);
+insert into t (id,a) values (773,16);
+insert into t (id,a) values (773,17);
+insert into t (id,a) values (773,18);
+insert into t (id,a) values (773,19);
+insert into t (id,a) values (773,20);
+insert into t (id,a) values (773,21);
+insert into t (id,a) values (773,22);
+insert into t (id,a) values (773,23);
+insert into t (id,a) values (773,24);
+insert into t (id,a) values (773,25);
+insert into t (id,a) values (773,26);
+insert into t (id,a) values (773,27);
+insert into t (id,a) values (773,28);
+insert into t (id,a) values (773,29);
+insert into t (id,a) values (773,30);
+insert into t (id,a) values (773,31);
+insert into t (id,a) values (773,32);
+insert into t (id,a) values (773,33);
+insert into t (id,a) values (773,34);
+insert into t (id,a) values (773,35);
+insert into t (id,a) values (773,36);
+insert into t (id,a) values (773,37);
+insert into t (id,a) values (773,38);
+insert into t (id,a) values (773,39);
+insert into t (id,a) values (773,40);
+insert into t (id,a) values (773,41);
+insert into t (id,a) values (773,42);
+insert into t (id,a) values (773,43);
+insert into t (id,a) values (773,44);
+insert into t (id,a) values (773,45);
+insert into t (id,a) values (773,46);
+insert into t (id,a) values (773,47);
+insert into t (id,a) values (773,48);
+insert into t (id,a) values (773,49);
+insert into t (id,a) values (773,50);
+insert into t (id,a) values (773,51);
+insert into t (id,a) values (773,52);
+insert into t (id,a) values (773,53);
+insert into t (id,a) values (773,54);
+insert into t (id,a) values (773,55);
+insert into t (id,a) values (773,56);
+insert into t (id,a) values (773,57);
+insert into t (id,a) values (773,58);
+insert into t (id,a) values (773,59);
+insert into t (id,a) values (773,60);
+insert into t (id,a) values (773,61);
+insert into t (id,a) values (773,62);
+insert into t (id,a) values (773,63);
+insert into t (id,a) values (773,64);
+insert into t (id,a) values (773,65);
+insert into t (id,a) values (773,66);
+insert into t (id,a) values (773,67);
+insert into t (id,a) values (773,68);
+insert into t (id,a) values (773,69);
+insert into t (id,a) values (773,70);
+insert into t (id,a) values (773,71);
+insert into t (id,a) values (773,72);
+insert into t (id,a) values (773,73);
+insert into t (id,a) values (773,74);
+insert into t (id,a) values (773,75);
+insert into t (id,a) values (773,76);
+insert into t (id,a) values (773,77);
+insert into t (id,a) values (773,78);
+insert into t (id,a) values (773,79);
+insert into t (id,a) values (773,80);
+insert into t (id,a) values (773,81);
+insert into t (id,a) values (773,82);
+insert into t (id,a) values (773,83);
+insert into t (id,a) values (773,84);
+insert into t (id,a) values (773,85);
+insert into t (id,a) values (773,86);
+insert into t (id,a) values (773,87);
+insert into t (id,a) values (773,88);
+insert into t (id,a) values (773,89);
+insert into t (id,a) values (773,90);
+insert into t (id,a) values (773,91);
+insert into t (id,a) values (773,92);
+insert into t (id,a) values (773,93);
+insert into t (id,a) values (773,94);
+insert into t (id,a) values (773,95);
+insert into t (id,a) values (773,96);
+insert into t (id,a) values (773,97);
+insert into t (id,a) values (773,98);
+insert into t (id,a) values (773,99);
+insert into t (id,a) values (774,0);
+insert into t (id,a) values (774,1);
+insert into t (id,a) values (774,2);
+insert into t (id,a) values (774,3);
+insert into t (id,a) values (774,4);
+insert into t (id,a) values (774,5);
+insert into t (id,a) values (774,6);
+insert into t (id,a) values (774,7);
+insert into t (id,a) values (774,8);
+insert into t (id,a) values (774,9);
+insert into t (id,a) values (774,10);
+insert into t (id,a) values (774,11);
+insert into t (id,a) values (774,12);
+insert into t (id,a) values (774,13);
+insert into t (id,a) values (774,14);
+insert into t (id,a) values (774,15);
+insert into t (id,a) values (774,16);
+insert into t (id,a) values (774,17);
+insert into t (id,a) values (774,18);
+insert into t (id,a) values (774,19);
+insert into t (id,a) values (774,20);
+insert into t (id,a) values (774,21);
+insert into t (id,a) values (774,22);
+insert into t (id,a) values (774,23);
+insert into t (id,a) values (774,24);
+insert into t (id,a) values (774,25);
+insert into t (id,a) values (774,26);
+insert into t (id,a) values (774,27);
+insert into t (id,a) values (774,28);
+insert into t (id,a) values (774,29);
+insert into t (id,a) values (774,30);
+insert into t (id,a) values (774,31);
+insert into t (id,a) values (774,32);
+insert into t (id,a) values (774,33);
+insert into t (id,a) values (774,34);
+insert into t (id,a) values (774,35);
+insert into t (id,a) values (774,36);
+insert into t (id,a) values (774,37);
+insert into t (id,a) values (774,38);
+insert into t (id,a) values (774,39);
+insert into t (id,a) values (774,40);
+insert into t (id,a) values (774,41);
+insert into t (id,a) values (774,42);
+insert into t (id,a) values (774,43);
+insert into t (id,a) values (774,44);
+insert into t (id,a) values (774,45);
+insert into t (id,a) values (774,46);
+insert into t (id,a) values (774,47);
+insert into t (id,a) values (774,48);
+insert into t (id,a) values (774,49);
+insert into t (id,a) values (774,50);
+insert into t (id,a) values (774,51);
+insert into t (id,a) values (774,52);
+insert into t (id,a) values (774,53);
+insert into t (id,a) values (774,54);
+insert into t (id,a) values (774,55);
+insert into t (id,a) values (774,56);
+insert into t (id,a) values (774,57);
+insert into t (id,a) values (774,58);
+insert into t (id,a) values (774,59);
+insert into t (id,a) values (774,60);
+insert into t (id,a) values (774,61);
+insert into t (id,a) values (774,62);
+insert into t (id,a) values (774,63);
+insert into t (id,a) values (774,64);
+insert into t (id,a) values (774,65);
+insert into t (id,a) values (774,66);
+insert into t (id,a) values (774,67);
+insert into t (id,a) values (774,68);
+insert into t (id,a) values (774,69);
+insert into t (id,a) values (774,70);
+insert into t (id,a) values (774,71);
+insert into t (id,a) values (774,72);
+insert into t (id,a) values (774,73);
+insert into t (id,a) values (774,74);
+insert into t (id,a) values (774,75);
+insert into t (id,a) values (774,76);
+insert into t (id,a) values (774,77);
+insert into t (id,a) values (774,78);
+insert into t (id,a) values (774,79);
+insert into t (id,a) values (774,80);
+insert into t (id,a) values (774,81);
+insert into t (id,a) values (774,82);
+insert into t (id,a) values (774,83);
+insert into t (id,a) values (774,84);
+insert into t (id,a) values (774,85);
+insert into t (id,a) values (774,86);
+insert into t (id,a) values (774,87);
+insert into t (id,a) values (774,88);
+insert into t (id,a) values (774,89);
+insert into t (id,a) values (774,90);
+insert into t (id,a) values (774,91);
+insert into t (id,a) values (774,92);
+insert into t (id,a) values (774,93);
+insert into t (id,a) values (774,94);
+insert into t (id,a) values (774,95);
+insert into t (id,a) values (774,96);
+insert into t (id,a) values (774,97);
+insert into t (id,a) values (774,98);
+insert into t (id,a) values (774,99);
+insert into t (id,a) values (775,0);
+insert into t (id,a) values (775,1);
+insert into t (id,a) values (775,2);
+insert into t (id,a) values (775,3);
+insert into t (id,a) values (775,4);
+insert into t (id,a) values (775,5);
+insert into t (id,a) values (775,6);
+insert into t (id,a) values (775,7);
+insert into t (id,a) values (775,8);
+insert into t (id,a) values (775,9);
+insert into t (id,a) values (775,10);
+insert into t (id,a) values (775,11);
+insert into t (id,a) values (775,12);
+insert into t (id,a) values (775,13);
+insert into t (id,a) values (775,14);
+insert into t (id,a) values (775,15);
+insert into t (id,a) values (775,16);
+insert into t (id,a) values (775,17);
+insert into t (id,a) values (775,18);
+insert into t (id,a) values (775,19);
+insert into t (id,a) values (775,20);
+insert into t (id,a) values (775,21);
+insert into t (id,a) values (775,22);
+insert into t (id,a) values (775,23);
+insert into t (id,a) values (775,24);
+insert into t (id,a) values (775,25);
+insert into t (id,a) values (775,26);
+insert into t (id,a) values (775,27);
+insert into t (id,a) values (775,28);
+insert into t (id,a) values (775,29);
+insert into t (id,a) values (775,30);
+insert into t (id,a) values (775,31);
+insert into t (id,a) values (775,32);
+insert into t (id,a) values (775,33);
+insert into t (id,a) values (775,34);
+insert into t (id,a) values (775,35);
+insert into t (id,a) values (775,36);
+insert into t (id,a) values (775,37);
+insert into t (id,a) values (775,38);
+insert into t (id,a) values (775,39);
+insert into t (id,a) values (775,40);
+insert into t (id,a) values (775,41);
+insert into t (id,a) values (775,42);
+insert into t (id,a) values (775,43);
+insert into t (id,a) values (775,44);
+insert into t (id,a) values (775,45);
+insert into t (id,a) values (775,46);
+insert into t (id,a) values (775,47);
+insert into t (id,a) values (775,48);
+insert into t (id,a) values (775,49);
+insert into t (id,a) values (775,50);
+insert into t (id,a) values (775,51);
+insert into t (id,a) values (775,52);
+insert into t (id,a) values (775,53);
+insert into t (id,a) values (775,54);
+insert into t (id,a) values (775,55);
+insert into t (id,a) values (775,56);
+insert into t (id,a) values (775,57);
+insert into t (id,a) values (775,58);
+insert into t (id,a) values (775,59);
+insert into t (id,a) values (775,60);
+insert into t (id,a) values (775,61);
+insert into t (id,a) values (775,62);
+insert into t (id,a) values (775,63);
+insert into t (id,a) values (775,64);
+insert into t (id,a) values (775,65);
+insert into t (id,a) values (775,66);
+insert into t (id,a) values (775,67);
+insert into t (id,a) values (775,68);
+insert into t (id,a) values (775,69);
+insert into t (id,a) values (775,70);
+insert into t (id,a) values (775,71);
+insert into t (id,a) values (775,72);
+insert into t (id,a) values (775,73);
+insert into t (id,a) values (775,74);
+insert into t (id,a) values (775,75);
+insert into t (id,a) values (775,76);
+insert into t (id,a) values (775,77);
+insert into t (id,a) values (775,78);
+insert into t (id,a) values (775,79);
+insert into t (id,a) values (775,80);
+insert into t (id,a) values (775,81);
+insert into t (id,a) values (775,82);
+insert into t (id,a) values (775,83);
+insert into t (id,a) values (775,84);
+insert into t (id,a) values (775,85);
+insert into t (id,a) values (775,86);
+insert into t (id,a) values (775,87);
+insert into t (id,a) values (775,88);
+insert into t (id,a) values (775,89);
+insert into t (id,a) values (775,90);
+insert into t (id,a) values (775,91);
+insert into t (id,a) values (775,92);
+insert into t (id,a) values (775,93);
+insert into t (id,a) values (775,94);
+insert into t (id,a) values (775,95);
+insert into t (id,a) values (775,96);
+insert into t (id,a) values (775,97);
+insert into t (id,a) values (775,98);
+insert into t (id,a) values (775,99);
+insert into t (id,a) values (776,0);
+insert into t (id,a) values (776,1);
+insert into t (id,a) values (776,2);
+insert into t (id,a) values (776,3);
+insert into t (id,a) values (776,4);
+insert into t (id,a) values (776,5);
+insert into t (id,a) values (776,6);
+insert into t (id,a) values (776,7);
+insert into t (id,a) values (776,8);
+insert into t (id,a) values (776,9);
+insert into t (id,a) values (776,10);
+insert into t (id,a) values (776,11);
+insert into t (id,a) values (776,12);
+insert into t (id,a) values (776,13);
+insert into t (id,a) values (776,14);
+insert into t (id,a) values (776,15);
+insert into t (id,a) values (776,16);
+insert into t (id,a) values (776,17);
+insert into t (id,a) values (776,18);
+insert into t (id,a) values (776,19);
+insert into t (id,a) values (776,20);
+insert into t (id,a) values (776,21);
+insert into t (id,a) values (776,22);
+insert into t (id,a) values (776,23);
+insert into t (id,a) values (776,24);
+insert into t (id,a) values (776,25);
+insert into t (id,a) values (776,26);
+insert into t (id,a) values (776,27);
+insert into t (id,a) values (776,28);
+insert into t (id,a) values (776,29);
+insert into t (id,a) values (776,30);
+insert into t (id,a) values (776,31);
+insert into t (id,a) values (776,32);
+insert into t (id,a) values (776,33);
+insert into t (id,a) values (776,34);
+insert into t (id,a) values (776,35);
+insert into t (id,a) values (776,36);
+insert into t (id,a) values (776,37);
+insert into t (id,a) values (776,38);
+insert into t (id,a) values (776,39);
+insert into t (id,a) values (776,40);
+insert into t (id,a) values (776,41);
+insert into t (id,a) values (776,42);
+insert into t (id,a) values (776,43);
+insert into t (id,a) values (776,44);
+insert into t (id,a) values (776,45);
+insert into t (id,a) values (776,46);
+insert into t (id,a) values (776,47);
+insert into t (id,a) values (776,48);
+insert into t (id,a) values (776,49);
+insert into t (id,a) values (776,50);
+insert into t (id,a) values (776,51);
+insert into t (id,a) values (776,52);
+insert into t (id,a) values (776,53);
+insert into t (id,a) values (776,54);
+insert into t (id,a) values (776,55);
+insert into t (id,a) values (776,56);
+insert into t (id,a) values (776,57);
+insert into t (id,a) values (776,58);
+insert into t (id,a) values (776,59);
+insert into t (id,a) values (776,60);
+insert into t (id,a) values (776,61);
+insert into t (id,a) values (776,62);
+insert into t (id,a) values (776,63);
+insert into t (id,a) values (776,64);
+insert into t (id,a) values (776,65);
+insert into t (id,a) values (776,66);
+insert into t (id,a) values (776,67);
+insert into t (id,a) values (776,68);
+insert into t (id,a) values (776,69);
+insert into t (id,a) values (776,70);
+insert into t (id,a) values (776,71);
+insert into t (id,a) values (776,72);
+insert into t (id,a) values (776,73);
+insert into t (id,a) values (776,74);
+insert into t (id,a) values (776,75);
+insert into t (id,a) values (776,76);
+insert into t (id,a) values (776,77);
+insert into t (id,a) values (776,78);
+insert into t (id,a) values (776,79);
+insert into t (id,a) values (776,80);
+insert into t (id,a) values (776,81);
+insert into t (id,a) values (776,82);
+insert into t (id,a) values (776,83);
+insert into t (id,a) values (776,84);
+insert into t (id,a) values (776,85);
+insert into t (id,a) values (776,86);
+insert into t (id,a) values (776,87);
+insert into t (id,a) values (776,88);
+insert into t (id,a) values (776,89);
+insert into t (id,a) values (776,90);
+insert into t (id,a) values (776,91);
+insert into t (id,a) values (776,92);
+insert into t (id,a) values (776,93);
+insert into t (id,a) values (776,94);
+insert into t (id,a) values (776,95);
+insert into t (id,a) values (776,96);
+insert into t (id,a) values (776,97);
+insert into t (id,a) values (776,98);
+insert into t (id,a) values (776,99);
+insert into t (id,a) values (777,0);
+insert into t (id,a) values (777,1);
+insert into t (id,a) values (777,2);
+insert into t (id,a) values (777,3);
+insert into t (id,a) values (777,4);
+insert into t (id,a) values (777,5);
+insert into t (id,a) values (777,6);
+insert into t (id,a) values (777,7);
+insert into t (id,a) values (777,8);
+insert into t (id,a) values (777,9);
+insert into t (id,a) values (777,10);
+insert into t (id,a) values (777,11);
+insert into t (id,a) values (777,12);
+insert into t (id,a) values (777,13);
+insert into t (id,a) values (777,14);
+insert into t (id,a) values (777,15);
+insert into t (id,a) values (777,16);
+insert into t (id,a) values (777,17);
+insert into t (id,a) values (777,18);
+insert into t (id,a) values (777,19);
+insert into t (id,a) values (777,20);
+insert into t (id,a) values (777,21);
+insert into t (id,a) values (777,22);
+insert into t (id,a) values (777,23);
+insert into t (id,a) values (777,24);
+insert into t (id,a) values (777,25);
+insert into t (id,a) values (777,26);
+insert into t (id,a) values (777,27);
+insert into t (id,a) values (777,28);
+insert into t (id,a) values (777,29);
+insert into t (id,a) values (777,30);
+insert into t (id,a) values (777,31);
+insert into t (id,a) values (777,32);
+insert into t (id,a) values (777,33);
+insert into t (id,a) values (777,34);
+insert into t (id,a) values (777,35);
+insert into t (id,a) values (777,36);
+insert into t (id,a) values (777,37);
+insert into t (id,a) values (777,38);
+insert into t (id,a) values (777,39);
+insert into t (id,a) values (777,40);
+insert into t (id,a) values (777,41);
+insert into t (id,a) values (777,42);
+insert into t (id,a) values (777,43);
+insert into t (id,a) values (777,44);
+insert into t (id,a) values (777,45);
+insert into t (id,a) values (777,46);
+insert into t (id,a) values (777,47);
+insert into t (id,a) values (777,48);
+insert into t (id,a) values (777,49);
+insert into t (id,a) values (777,50);
+insert into t (id,a) values (777,51);
+insert into t (id,a) values (777,52);
+insert into t (id,a) values (777,53);
+insert into t (id,a) values (777,54);
+insert into t (id,a) values (777,55);
+insert into t (id,a) values (777,56);
+insert into t (id,a) values (777,57);
+insert into t (id,a) values (777,58);
+insert into t (id,a) values (777,59);
+insert into t (id,a) values (777,60);
+insert into t (id,a) values (777,61);
+insert into t (id,a) values (777,62);
+insert into t (id,a) values (777,63);
+insert into t (id,a) values (777,64);
+insert into t (id,a) values (777,65);
+insert into t (id,a) values (777,66);
+insert into t (id,a) values (777,67);
+insert into t (id,a) values (777,68);
+insert into t (id,a) values (777,69);
+insert into t (id,a) values (777,70);
+insert into t (id,a) values (777,71);
+insert into t (id,a) values (777,72);
+insert into t (id,a) values (777,73);
+insert into t (id,a) values (777,74);
+insert into t (id,a) values (777,75);
+insert into t (id,a) values (777,76);
+insert into t (id,a) values (777,77);
+insert into t (id,a) values (777,78);
+insert into t (id,a) values (777,79);
+insert into t (id,a) values (777,80);
+insert into t (id,a) values (777,81);
+insert into t (id,a) values (777,82);
+insert into t (id,a) values (777,83);
+insert into t (id,a) values (777,84);
+insert into t (id,a) values (777,85);
+insert into t (id,a) values (777,86);
+insert into t (id,a) values (777,87);
+insert into t (id,a) values (777,88);
+insert into t (id,a) values (777,89);
+insert into t (id,a) values (777,90);
+insert into t (id,a) values (777,91);
+insert into t (id,a) values (777,92);
+insert into t (id,a) values (777,93);
+insert into t (id,a) values (777,94);
+insert into t (id,a) values (777,95);
+insert into t (id,a) values (777,96);
+insert into t (id,a) values (777,97);
+insert into t (id,a) values (777,98);
+insert into t (id,a) values (777,99);
+insert into t (id,a) values (778,0);
+insert into t (id,a) values (778,1);
+insert into t (id,a) values (778,2);
+insert into t (id,a) values (778,3);
+insert into t (id,a) values (778,4);
+insert into t (id,a) values (778,5);
+insert into t (id,a) values (778,6);
+insert into t (id,a) values (778,7);
+insert into t (id,a) values (778,8);
+insert into t (id,a) values (778,9);
+insert into t (id,a) values (778,10);
+insert into t (id,a) values (778,11);
+insert into t (id,a) values (778,12);
+insert into t (id,a) values (778,13);
+insert into t (id,a) values (778,14);
+insert into t (id,a) values (778,15);
+insert into t (id,a) values (778,16);
+insert into t (id,a) values (778,17);
+insert into t (id,a) values (778,18);
+insert into t (id,a) values (778,19);
+insert into t (id,a) values (778,20);
+insert into t (id,a) values (778,21);
+insert into t (id,a) values (778,22);
+insert into t (id,a) values (778,23);
+insert into t (id,a) values (778,24);
+insert into t (id,a) values (778,25);
+insert into t (id,a) values (778,26);
+insert into t (id,a) values (778,27);
+insert into t (id,a) values (778,28);
+insert into t (id,a) values (778,29);
+insert into t (id,a) values (778,30);
+insert into t (id,a) values (778,31);
+insert into t (id,a) values (778,32);
+insert into t (id,a) values (778,33);
+insert into t (id,a) values (778,34);
+insert into t (id,a) values (778,35);
+insert into t (id,a) values (778,36);
+insert into t (id,a) values (778,37);
+insert into t (id,a) values (778,38);
+insert into t (id,a) values (778,39);
+insert into t (id,a) values (778,40);
+insert into t (id,a) values (778,41);
+insert into t (id,a) values (778,42);
+insert into t (id,a) values (778,43);
+insert into t (id,a) values (778,44);
+insert into t (id,a) values (778,45);
+insert into t (id,a) values (778,46);
+insert into t (id,a) values (778,47);
+insert into t (id,a) values (778,48);
+insert into t (id,a) values (778,49);
+insert into t (id,a) values (778,50);
+insert into t (id,a) values (778,51);
+insert into t (id,a) values (778,52);
+insert into t (id,a) values (778,53);
+insert into t (id,a) values (778,54);
+insert into t (id,a) values (778,55);
+insert into t (id,a) values (778,56);
+insert into t (id,a) values (778,57);
+insert into t (id,a) values (778,58);
+insert into t (id,a) values (778,59);
+insert into t (id,a) values (778,60);
+insert into t (id,a) values (778,61);
+insert into t (id,a) values (778,62);
+insert into t (id,a) values (778,63);
+insert into t (id,a) values (778,64);
+insert into t (id,a) values (778,65);
+insert into t (id,a) values (778,66);
+insert into t (id,a) values (778,67);
+insert into t (id,a) values (778,68);
+insert into t (id,a) values (778,69);
+insert into t (id,a) values (778,70);
+insert into t (id,a) values (778,71);
+insert into t (id,a) values (778,72);
+insert into t (id,a) values (778,73);
+insert into t (id,a) values (778,74);
+insert into t (id,a) values (778,75);
+insert into t (id,a) values (778,76);
+insert into t (id,a) values (778,77);
+insert into t (id,a) values (778,78);
+insert into t (id,a) values (778,79);
+insert into t (id,a) values (778,80);
+insert into t (id,a) values (778,81);
+insert into t (id,a) values (778,82);
+insert into t (id,a) values (778,83);
+insert into t (id,a) values (778,84);
+insert into t (id,a) values (778,85);
+insert into t (id,a) values (778,86);
+insert into t (id,a) values (778,87);
+insert into t (id,a) values (778,88);
+insert into t (id,a) values (778,89);
+insert into t (id,a) values (778,90);
+insert into t (id,a) values (778,91);
+insert into t (id,a) values (778,92);
+insert into t (id,a) values (778,93);
+insert into t (id,a) values (778,94);
+insert into t (id,a) values (778,95);
+insert into t (id,a) values (778,96);
+insert into t (id,a) values (778,97);
+insert into t (id,a) values (778,98);
+insert into t (id,a) values (778,99);
+insert into t (id,a) values (779,0);
+insert into t (id,a) values (779,1);
+insert into t (id,a) values (779,2);
+insert into t (id,a) values (779,3);
+insert into t (id,a) values (779,4);
+insert into t (id,a) values (779,5);
+insert into t (id,a) values (779,6);
+insert into t (id,a) values (779,7);
+insert into t (id,a) values (779,8);
+insert into t (id,a) values (779,9);
+insert into t (id,a) values (779,10);
+insert into t (id,a) values (779,11);
+insert into t (id,a) values (779,12);
+insert into t (id,a) values (779,13);
+insert into t (id,a) values (779,14);
+insert into t (id,a) values (779,15);
+insert into t (id,a) values (779,16);
+insert into t (id,a) values (779,17);
+insert into t (id,a) values (779,18);
+insert into t (id,a) values (779,19);
+insert into t (id,a) values (779,20);
+insert into t (id,a) values (779,21);
+insert into t (id,a) values (779,22);
+insert into t (id,a) values (779,23);
+insert into t (id,a) values (779,24);
+insert into t (id,a) values (779,25);
+insert into t (id,a) values (779,26);
+insert into t (id,a) values (779,27);
+insert into t (id,a) values (779,28);
+insert into t (id,a) values (779,29);
+insert into t (id,a) values (779,30);
+insert into t (id,a) values (779,31);
+insert into t (id,a) values (779,32);
+insert into t (id,a) values (779,33);
+insert into t (id,a) values (779,34);
+insert into t (id,a) values (779,35);
+insert into t (id,a) values (779,36);
+insert into t (id,a) values (779,37);
+insert into t (id,a) values (779,38);
+insert into t (id,a) values (779,39);
+insert into t (id,a) values (779,40);
+insert into t (id,a) values (779,41);
+insert into t (id,a) values (779,42);
+insert into t (id,a) values (779,43);
+insert into t (id,a) values (779,44);
+insert into t (id,a) values (779,45);
+insert into t (id,a) values (779,46);
+insert into t (id,a) values (779,47);
+insert into t (id,a) values (779,48);
+insert into t (id,a) values (779,49);
+insert into t (id,a) values (779,50);
+insert into t (id,a) values (779,51);
+insert into t (id,a) values (779,52);
+insert into t (id,a) values (779,53);
+insert into t (id,a) values (779,54);
+insert into t (id,a) values (779,55);
+insert into t (id,a) values (779,56);
+insert into t (id,a) values (779,57);
+insert into t (id,a) values (779,58);
+insert into t (id,a) values (779,59);
+insert into t (id,a) values (779,60);
+insert into t (id,a) values (779,61);
+insert into t (id,a) values (779,62);
+insert into t (id,a) values (779,63);
+insert into t (id,a) values (779,64);
+insert into t (id,a) values (779,65);
+insert into t (id,a) values (779,66);
+insert into t (id,a) values (779,67);
+insert into t (id,a) values (779,68);
+insert into t (id,a) values (779,69);
+insert into t (id,a) values (779,70);
+insert into t (id,a) values (779,71);
+insert into t (id,a) values (779,72);
+insert into t (id,a) values (779,73);
+insert into t (id,a) values (779,74);
+insert into t (id,a) values (779,75);
+insert into t (id,a) values (779,76);
+insert into t (id,a) values (779,77);
+insert into t (id,a) values (779,78);
+insert into t (id,a) values (779,79);
+insert into t (id,a) values (779,80);
+insert into t (id,a) values (779,81);
+insert into t (id,a) values (779,82);
+insert into t (id,a) values (779,83);
+insert into t (id,a) values (779,84);
+insert into t (id,a) values (779,85);
+insert into t (id,a) values (779,86);
+insert into t (id,a) values (779,87);
+insert into t (id,a) values (779,88);
+insert into t (id,a) values (779,89);
+insert into t (id,a) values (779,90);
+insert into t (id,a) values (779,91);
+insert into t (id,a) values (779,92);
+insert into t (id,a) values (779,93);
+insert into t (id,a) values (779,94);
+insert into t (id,a) values (779,95);
+insert into t (id,a) values (779,96);
+insert into t (id,a) values (779,97);
+insert into t (id,a) values (779,98);
+insert into t (id,a) values (779,99);
+insert into t (id,a) values (780,0);
+insert into t (id,a) values (780,1);
+insert into t (id,a) values (780,2);
+insert into t (id,a) values (780,3);
+insert into t (id,a) values (780,4);
+insert into t (id,a) values (780,5);
+insert into t (id,a) values (780,6);
+insert into t (id,a) values (780,7);
+insert into t (id,a) values (780,8);
+insert into t (id,a) values (780,9);
+insert into t (id,a) values (780,10);
+insert into t (id,a) values (780,11);
+insert into t (id,a) values (780,12);
+insert into t (id,a) values (780,13);
+insert into t (id,a) values (780,14);
+insert into t (id,a) values (780,15);
+insert into t (id,a) values (780,16);
+insert into t (id,a) values (780,17);
+insert into t (id,a) values (780,18);
+insert into t (id,a) values (780,19);
+insert into t (id,a) values (780,20);
+insert into t (id,a) values (780,21);
+insert into t (id,a) values (780,22);
+insert into t (id,a) values (780,23);
+insert into t (id,a) values (780,24);
+insert into t (id,a) values (780,25);
+insert into t (id,a) values (780,26);
+insert into t (id,a) values (780,27);
+insert into t (id,a) values (780,28);
+insert into t (id,a) values (780,29);
+insert into t (id,a) values (780,30);
+insert into t (id,a) values (780,31);
+insert into t (id,a) values (780,32);
+insert into t (id,a) values (780,33);
+insert into t (id,a) values (780,34);
+insert into t (id,a) values (780,35);
+insert into t (id,a) values (780,36);
+insert into t (id,a) values (780,37);
+insert into t (id,a) values (780,38);
+insert into t (id,a) values (780,39);
+insert into t (id,a) values (780,40);
+insert into t (id,a) values (780,41);
+insert into t (id,a) values (780,42);
+insert into t (id,a) values (780,43);
+insert into t (id,a) values (780,44);
+insert into t (id,a) values (780,45);
+insert into t (id,a) values (780,46);
+insert into t (id,a) values (780,47);
+insert into t (id,a) values (780,48);
+insert into t (id,a) values (780,49);
+insert into t (id,a) values (780,50);
+insert into t (id,a) values (780,51);
+insert into t (id,a) values (780,52);
+insert into t (id,a) values (780,53);
+insert into t (id,a) values (780,54);
+insert into t (id,a) values (780,55);
+insert into t (id,a) values (780,56);
+insert into t (id,a) values (780,57);
+insert into t (id,a) values (780,58);
+insert into t (id,a) values (780,59);
+insert into t (id,a) values (780,60);
+insert into t (id,a) values (780,61);
+insert into t (id,a) values (780,62);
+insert into t (id,a) values (780,63);
+insert into t (id,a) values (780,64);
+insert into t (id,a) values (780,65);
+insert into t (id,a) values (780,66);
+insert into t (id,a) values (780,67);
+insert into t (id,a) values (780,68);
+insert into t (id,a) values (780,69);
+insert into t (id,a) values (780,70);
+insert into t (id,a) values (780,71);
+insert into t (id,a) values (780,72);
+insert into t (id,a) values (780,73);
+insert into t (id,a) values (780,74);
+insert into t (id,a) values (780,75);
+insert into t (id,a) values (780,76);
+insert into t (id,a) values (780,77);
+insert into t (id,a) values (780,78);
+insert into t (id,a) values (780,79);
+insert into t (id,a) values (780,80);
+insert into t (id,a) values (780,81);
+insert into t (id,a) values (780,82);
+insert into t (id,a) values (780,83);
+insert into t (id,a) values (780,84);
+insert into t (id,a) values (780,85);
+insert into t (id,a) values (780,86);
+insert into t (id,a) values (780,87);
+insert into t (id,a) values (780,88);
+insert into t (id,a) values (780,89);
+insert into t (id,a) values (780,90);
+insert into t (id,a) values (780,91);
+insert into t (id,a) values (780,92);
+insert into t (id,a) values (780,93);
+insert into t (id,a) values (780,94);
+insert into t (id,a) values (780,95);
+insert into t (id,a) values (780,96);
+insert into t (id,a) values (780,97);
+insert into t (id,a) values (780,98);
+insert into t (id,a) values (780,99);
+insert into t (id,a) values (781,0);
+insert into t (id,a) values (781,1);
+insert into t (id,a) values (781,2);
+insert into t (id,a) values (781,3);
+insert into t (id,a) values (781,4);
+insert into t (id,a) values (781,5);
+insert into t (id,a) values (781,6);
+insert into t (id,a) values (781,7);
+insert into t (id,a) values (781,8);
+insert into t (id,a) values (781,9);
+insert into t (id,a) values (781,10);
+insert into t (id,a) values (781,11);
+insert into t (id,a) values (781,12);
+insert into t (id,a) values (781,13);
+insert into t (id,a) values (781,14);
+insert into t (id,a) values (781,15);
+insert into t (id,a) values (781,16);
+insert into t (id,a) values (781,17);
+insert into t (id,a) values (781,18);
+insert into t (id,a) values (781,19);
+insert into t (id,a) values (781,20);
+insert into t (id,a) values (781,21);
+insert into t (id,a) values (781,22);
+insert into t (id,a) values (781,23);
+insert into t (id,a) values (781,24);
+insert into t (id,a) values (781,25);
+insert into t (id,a) values (781,26);
+insert into t (id,a) values (781,27);
+insert into t (id,a) values (781,28);
+insert into t (id,a) values (781,29);
+insert into t (id,a) values (781,30);
+insert into t (id,a) values (781,31);
+insert into t (id,a) values (781,32);
+insert into t (id,a) values (781,33);
+insert into t (id,a) values (781,34);
+insert into t (id,a) values (781,35);
+insert into t (id,a) values (781,36);
+insert into t (id,a) values (781,37);
+insert into t (id,a) values (781,38);
+insert into t (id,a) values (781,39);
+insert into t (id,a) values (781,40);
+insert into t (id,a) values (781,41);
+insert into t (id,a) values (781,42);
+insert into t (id,a) values (781,43);
+insert into t (id,a) values (781,44);
+insert into t (id,a) values (781,45);
+insert into t (id,a) values (781,46);
+insert into t (id,a) values (781,47);
+insert into t (id,a) values (781,48);
+insert into t (id,a) values (781,49);
+insert into t (id,a) values (781,50);
+insert into t (id,a) values (781,51);
+insert into t (id,a) values (781,52);
+insert into t (id,a) values (781,53);
+insert into t (id,a) values (781,54);
+insert into t (id,a) values (781,55);
+insert into t (id,a) values (781,56);
+insert into t (id,a) values (781,57);
+insert into t (id,a) values (781,58);
+insert into t (id,a) values (781,59);
+insert into t (id,a) values (781,60);
+insert into t (id,a) values (781,61);
+insert into t (id,a) values (781,62);
+insert into t (id,a) values (781,63);
+insert into t (id,a) values (781,64);
+insert into t (id,a) values (781,65);
+insert into t (id,a) values (781,66);
+insert into t (id,a) values (781,67);
+insert into t (id,a) values (781,68);
+insert into t (id,a) values (781,69);
+insert into t (id,a) values (781,70);
+insert into t (id,a) values (781,71);
+insert into t (id,a) values (781,72);
+insert into t (id,a) values (781,73);
+insert into t (id,a) values (781,74);
+insert into t (id,a) values (781,75);
+insert into t (id,a) values (781,76);
+insert into t (id,a) values (781,77);
+insert into t (id,a) values (781,78);
+insert into t (id,a) values (781,79);
+insert into t (id,a) values (781,80);
+insert into t (id,a) values (781,81);
+insert into t (id,a) values (781,82);
+insert into t (id,a) values (781,83);
+insert into t (id,a) values (781,84);
+insert into t (id,a) values (781,85);
+insert into t (id,a) values (781,86);
+insert into t (id,a) values (781,87);
+insert into t (id,a) values (781,88);
+insert into t (id,a) values (781,89);
+insert into t (id,a) values (781,90);
+insert into t (id,a) values (781,91);
+insert into t (id,a) values (781,92);
+insert into t (id,a) values (781,93);
+insert into t (id,a) values (781,94);
+insert into t (id,a) values (781,95);
+insert into t (id,a) values (781,96);
+insert into t (id,a) values (781,97);
+insert into t (id,a) values (781,98);
+insert into t (id,a) values (781,99);
+insert into t (id,a) values (782,0);
+insert into t (id,a) values (782,1);
+insert into t (id,a) values (782,2);
+insert into t (id,a) values (782,3);
+insert into t (id,a) values (782,4);
+insert into t (id,a) values (782,5);
+insert into t (id,a) values (782,6);
+insert into t (id,a) values (782,7);
+insert into t (id,a) values (782,8);
+insert into t (id,a) values (782,9);
+insert into t (id,a) values (782,10);
+insert into t (id,a) values (782,11);
+insert into t (id,a) values (782,12);
+insert into t (id,a) values (782,13);
+insert into t (id,a) values (782,14);
+insert into t (id,a) values (782,15);
+insert into t (id,a) values (782,16);
+insert into t (id,a) values (782,17);
+insert into t (id,a) values (782,18);
+insert into t (id,a) values (782,19);
+insert into t (id,a) values (782,20);
+insert into t (id,a) values (782,21);
+insert into t (id,a) values (782,22);
+insert into t (id,a) values (782,23);
+insert into t (id,a) values (782,24);
+insert into t (id,a) values (782,25);
+insert into t (id,a) values (782,26);
+insert into t (id,a) values (782,27);
+insert into t (id,a) values (782,28);
+insert into t (id,a) values (782,29);
+insert into t (id,a) values (782,30);
+insert into t (id,a) values (782,31);
+insert into t (id,a) values (782,32);
+insert into t (id,a) values (782,33);
+insert into t (id,a) values (782,34);
+insert into t (id,a) values (782,35);
+insert into t (id,a) values (782,36);
+insert into t (id,a) values (782,37);
+insert into t (id,a) values (782,38);
+insert into t (id,a) values (782,39);
+insert into t (id,a) values (782,40);
+insert into t (id,a) values (782,41);
+insert into t (id,a) values (782,42);
+insert into t (id,a) values (782,43);
+insert into t (id,a) values (782,44);
+insert into t (id,a) values (782,45);
+insert into t (id,a) values (782,46);
+insert into t (id,a) values (782,47);
+insert into t (id,a) values (782,48);
+insert into t (id,a) values (782,49);
+insert into t (id,a) values (782,50);
+insert into t (id,a) values (782,51);
+insert into t (id,a) values (782,52);
+insert into t (id,a) values (782,53);
+insert into t (id,a) values (782,54);
+insert into t (id,a) values (782,55);
+insert into t (id,a) values (782,56);
+insert into t (id,a) values (782,57);
+insert into t (id,a) values (782,58);
+insert into t (id,a) values (782,59);
+insert into t (id,a) values (782,60);
+insert into t (id,a) values (782,61);
+insert into t (id,a) values (782,62);
+insert into t (id,a) values (782,63);
+insert into t (id,a) values (782,64);
+insert into t (id,a) values (782,65);
+insert into t (id,a) values (782,66);
+insert into t (id,a) values (782,67);
+insert into t (id,a) values (782,68);
+insert into t (id,a) values (782,69);
+insert into t (id,a) values (782,70);
+insert into t (id,a) values (782,71);
+insert into t (id,a) values (782,72);
+insert into t (id,a) values (782,73);
+insert into t (id,a) values (782,74);
+insert into t (id,a) values (782,75);
+insert into t (id,a) values (782,76);
+insert into t (id,a) values (782,77);
+insert into t (id,a) values (782,78);
+insert into t (id,a) values (782,79);
+insert into t (id,a) values (782,80);
+insert into t (id,a) values (782,81);
+insert into t (id,a) values (782,82);
+insert into t (id,a) values (782,83);
+insert into t (id,a) values (782,84);
+insert into t (id,a) values (782,85);
+insert into t (id,a) values (782,86);
+insert into t (id,a) values (782,87);
+insert into t (id,a) values (782,88);
+insert into t (id,a) values (782,89);
+insert into t (id,a) values (782,90);
+insert into t (id,a) values (782,91);
+insert into t (id,a) values (782,92);
+insert into t (id,a) values (782,93);
+insert into t (id,a) values (782,94);
+insert into t (id,a) values (782,95);
+insert into t (id,a) values (782,96);
+insert into t (id,a) values (782,97);
+insert into t (id,a) values (782,98);
+insert into t (id,a) values (782,99);
+insert into t (id,a) values (783,0);
+insert into t (id,a) values (783,1);
+insert into t (id,a) values (783,2);
+insert into t (id,a) values (783,3);
+insert into t (id,a) values (783,4);
+insert into t (id,a) values (783,5);
+insert into t (id,a) values (783,6);
+insert into t (id,a) values (783,7);
+insert into t (id,a) values (783,8);
+insert into t (id,a) values (783,9);
+insert into t (id,a) values (783,10);
+insert into t (id,a) values (783,11);
+insert into t (id,a) values (783,12);
+insert into t (id,a) values (783,13);
+insert into t (id,a) values (783,14);
+insert into t (id,a) values (783,15);
+insert into t (id,a) values (783,16);
+insert into t (id,a) values (783,17);
+insert into t (id,a) values (783,18);
+insert into t (id,a) values (783,19);
+insert into t (id,a) values (783,20);
+insert into t (id,a) values (783,21);
+insert into t (id,a) values (783,22);
+insert into t (id,a) values (783,23);
+insert into t (id,a) values (783,24);
+insert into t (id,a) values (783,25);
+insert into t (id,a) values (783,26);
+insert into t (id,a) values (783,27);
+insert into t (id,a) values (783,28);
+insert into t (id,a) values (783,29);
+insert into t (id,a) values (783,30);
+insert into t (id,a) values (783,31);
+insert into t (id,a) values (783,32);
+insert into t (id,a) values (783,33);
+insert into t (id,a) values (783,34);
+insert into t (id,a) values (783,35);
+insert into t (id,a) values (783,36);
+insert into t (id,a) values (783,37);
+insert into t (id,a) values (783,38);
+insert into t (id,a) values (783,39);
+insert into t (id,a) values (783,40);
+insert into t (id,a) values (783,41);
+insert into t (id,a) values (783,42);
+insert into t (id,a) values (783,43);
+insert into t (id,a) values (783,44);
+insert into t (id,a) values (783,45);
+insert into t (id,a) values (783,46);
+insert into t (id,a) values (783,47);
+insert into t (id,a) values (783,48);
+insert into t (id,a) values (783,49);
+insert into t (id,a) values (783,50);
+insert into t (id,a) values (783,51);
+insert into t (id,a) values (783,52);
+insert into t (id,a) values (783,53);
+insert into t (id,a) values (783,54);
+insert into t (id,a) values (783,55);
+insert into t (id,a) values (783,56);
+insert into t (id,a) values (783,57);
+insert into t (id,a) values (783,58);
+insert into t (id,a) values (783,59);
+insert into t (id,a) values (783,60);
+insert into t (id,a) values (783,61);
+insert into t (id,a) values (783,62);
+insert into t (id,a) values (783,63);
+insert into t (id,a) values (783,64);
+insert into t (id,a) values (783,65);
+insert into t (id,a) values (783,66);
+insert into t (id,a) values (783,67);
+insert into t (id,a) values (783,68);
+insert into t (id,a) values (783,69);
+insert into t (id,a) values (783,70);
+insert into t (id,a) values (783,71);
+insert into t (id,a) values (783,72);
+insert into t (id,a) values (783,73);
+insert into t (id,a) values (783,74);
+insert into t (id,a) values (783,75);
+insert into t (id,a) values (783,76);
+insert into t (id,a) values (783,77);
+insert into t (id,a) values (783,78);
+insert into t (id,a) values (783,79);
+insert into t (id,a) values (783,80);
+insert into t (id,a) values (783,81);
+insert into t (id,a) values (783,82);
+insert into t (id,a) values (783,83);
+insert into t (id,a) values (783,84);
+insert into t (id,a) values (783,85);
+insert into t (id,a) values (783,86);
+insert into t (id,a) values (783,87);
+insert into t (id,a) values (783,88);
+insert into t (id,a) values (783,89);
+insert into t (id,a) values (783,90);
+insert into t (id,a) values (783,91);
+insert into t (id,a) values (783,92);
+insert into t (id,a) values (783,93);
+insert into t (id,a) values (783,94);
+insert into t (id,a) values (783,95);
+insert into t (id,a) values (783,96);
+insert into t (id,a) values (783,97);
+insert into t (id,a) values (783,98);
+insert into t (id,a) values (783,99);
+insert into t (id,a) values (784,0);
+insert into t (id,a) values (784,1);
+insert into t (id,a) values (784,2);
+insert into t (id,a) values (784,3);
+insert into t (id,a) values (784,4);
+insert into t (id,a) values (784,5);
+insert into t (id,a) values (784,6);
+insert into t (id,a) values (784,7);
+insert into t (id,a) values (784,8);
+insert into t (id,a) values (784,9);
+insert into t (id,a) values (784,10);
+insert into t (id,a) values (784,11);
+insert into t (id,a) values (784,12);
+insert into t (id,a) values (784,13);
+insert into t (id,a) values (784,14);
+insert into t (id,a) values (784,15);
+insert into t (id,a) values (784,16);
+insert into t (id,a) values (784,17);
+insert into t (id,a) values (784,18);
+insert into t (id,a) values (784,19);
+insert into t (id,a) values (784,20);
+insert into t (id,a) values (784,21);
+insert into t (id,a) values (784,22);
+insert into t (id,a) values (784,23);
+insert into t (id,a) values (784,24);
+insert into t (id,a) values (784,25);
+insert into t (id,a) values (784,26);
+insert into t (id,a) values (784,27);
+insert into t (id,a) values (784,28);
+insert into t (id,a) values (784,29);
+insert into t (id,a) values (784,30);
+insert into t (id,a) values (784,31);
+insert into t (id,a) values (784,32);
+insert into t (id,a) values (784,33);
+insert into t (id,a) values (784,34);
+insert into t (id,a) values (784,35);
+insert into t (id,a) values (784,36);
+insert into t (id,a) values (784,37);
+insert into t (id,a) values (784,38);
+insert into t (id,a) values (784,39);
+insert into t (id,a) values (784,40);
+insert into t (id,a) values (784,41);
+insert into t (id,a) values (784,42);
+insert into t (id,a) values (784,43);
+insert into t (id,a) values (784,44);
+insert into t (id,a) values (784,45);
+insert into t (id,a) values (784,46);
+insert into t (id,a) values (784,47);
+insert into t (id,a) values (784,48);
+insert into t (id,a) values (784,49);
+insert into t (id,a) values (784,50);
+insert into t (id,a) values (784,51);
+insert into t (id,a) values (784,52);
+insert into t (id,a) values (784,53);
+insert into t (id,a) values (784,54);
+insert into t (id,a) values (784,55);
+insert into t (id,a) values (784,56);
+insert into t (id,a) values (784,57);
+insert into t (id,a) values (784,58);
+insert into t (id,a) values (784,59);
+insert into t (id,a) values (784,60);
+insert into t (id,a) values (784,61);
+insert into t (id,a) values (784,62);
+insert into t (id,a) values (784,63);
+insert into t (id,a) values (784,64);
+insert into t (id,a) values (784,65);
+insert into t (id,a) values (784,66);
+insert into t (id,a) values (784,67);
+insert into t (id,a) values (784,68);
+insert into t (id,a) values (784,69);
+insert into t (id,a) values (784,70);
+insert into t (id,a) values (784,71);
+insert into t (id,a) values (784,72);
+insert into t (id,a) values (784,73);
+insert into t (id,a) values (784,74);
+insert into t (id,a) values (784,75);
+insert into t (id,a) values (784,76);
+insert into t (id,a) values (784,77);
+insert into t (id,a) values (784,78);
+insert into t (id,a) values (784,79);
+insert into t (id,a) values (784,80);
+insert into t (id,a) values (784,81);
+insert into t (id,a) values (784,82);
+insert into t (id,a) values (784,83);
+insert into t (id,a) values (784,84);
+insert into t (id,a) values (784,85);
+insert into t (id,a) values (784,86);
+insert into t (id,a) values (784,87);
+insert into t (id,a) values (784,88);
+insert into t (id,a) values (784,89);
+insert into t (id,a) values (784,90);
+insert into t (id,a) values (784,91);
+insert into t (id,a) values (784,92);
+insert into t (id,a) values (784,93);
+insert into t (id,a) values (784,94);
+insert into t (id,a) values (784,95);
+insert into t (id,a) values (784,96);
+insert into t (id,a) values (784,97);
+insert into t (id,a) values (784,98);
+insert into t (id,a) values (784,99);
+insert into t (id,a) values (785,0);
+insert into t (id,a) values (785,1);
+insert into t (id,a) values (785,2);
+insert into t (id,a) values (785,3);
+insert into t (id,a) values (785,4);
+insert into t (id,a) values (785,5);
+insert into t (id,a) values (785,6);
+insert into t (id,a) values (785,7);
+insert into t (id,a) values (785,8);
+insert into t (id,a) values (785,9);
+insert into t (id,a) values (785,10);
+insert into t (id,a) values (785,11);
+insert into t (id,a) values (785,12);
+insert into t (id,a) values (785,13);
+insert into t (id,a) values (785,14);
+insert into t (id,a) values (785,15);
+insert into t (id,a) values (785,16);
+insert into t (id,a) values (785,17);
+insert into t (id,a) values (785,18);
+insert into t (id,a) values (785,19);
+insert into t (id,a) values (785,20);
+insert into t (id,a) values (785,21);
+insert into t (id,a) values (785,22);
+insert into t (id,a) values (785,23);
+insert into t (id,a) values (785,24);
+insert into t (id,a) values (785,25);
+insert into t (id,a) values (785,26);
+insert into t (id,a) values (785,27);
+insert into t (id,a) values (785,28);
+insert into t (id,a) values (785,29);
+insert into t (id,a) values (785,30);
+insert into t (id,a) values (785,31);
+insert into t (id,a) values (785,32);
+insert into t (id,a) values (785,33);
+insert into t (id,a) values (785,34);
+insert into t (id,a) values (785,35);
+insert into t (id,a) values (785,36);
+insert into t (id,a) values (785,37);
+insert into t (id,a) values (785,38);
+insert into t (id,a) values (785,39);
+insert into t (id,a) values (785,40);
+insert into t (id,a) values (785,41);
+insert into t (id,a) values (785,42);
+insert into t (id,a) values (785,43);
+insert into t (id,a) values (785,44);
+insert into t (id,a) values (785,45);
+insert into t (id,a) values (785,46);
+insert into t (id,a) values (785,47);
+insert into t (id,a) values (785,48);
+insert into t (id,a) values (785,49);
+insert into t (id,a) values (785,50);
+insert into t (id,a) values (785,51);
+insert into t (id,a) values (785,52);
+insert into t (id,a) values (785,53);
+insert into t (id,a) values (785,54);
+insert into t (id,a) values (785,55);
+insert into t (id,a) values (785,56);
+insert into t (id,a) values (785,57);
+insert into t (id,a) values (785,58);
+insert into t (id,a) values (785,59);
+insert into t (id,a) values (785,60);
+insert into t (id,a) values (785,61);
+insert into t (id,a) values (785,62);
+insert into t (id,a) values (785,63);
+insert into t (id,a) values (785,64);
+insert into t (id,a) values (785,65);
+insert into t (id,a) values (785,66);
+insert into t (id,a) values (785,67);
+insert into t (id,a) values (785,68);
+insert into t (id,a) values (785,69);
+insert into t (id,a) values (785,70);
+insert into t (id,a) values (785,71);
+insert into t (id,a) values (785,72);
+insert into t (id,a) values (785,73);
+insert into t (id,a) values (785,74);
+insert into t (id,a) values (785,75);
+insert into t (id,a) values (785,76);
+insert into t (id,a) values (785,77);
+insert into t (id,a) values (785,78);
+insert into t (id,a) values (785,79);
+insert into t (id,a) values (785,80);
+insert into t (id,a) values (785,81);
+insert into t (id,a) values (785,82);
+insert into t (id,a) values (785,83);
+insert into t (id,a) values (785,84);
+insert into t (id,a) values (785,85);
+insert into t (id,a) values (785,86);
+insert into t (id,a) values (785,87);
+insert into t (id,a) values (785,88);
+insert into t (id,a) values (785,89);
+insert into t (id,a) values (785,90);
+insert into t (id,a) values (785,91);
+insert into t (id,a) values (785,92);
+insert into t (id,a) values (785,93);
+insert into t (id,a) values (785,94);
+insert into t (id,a) values (785,95);
+insert into t (id,a) values (785,96);
+insert into t (id,a) values (785,97);
+insert into t (id,a) values (785,98);
+insert into t (id,a) values (785,99);
+insert into t (id,a) values (786,0);
+insert into t (id,a) values (786,1);
+insert into t (id,a) values (786,2);
+insert into t (id,a) values (786,3);
+insert into t (id,a) values (786,4);
+insert into t (id,a) values (786,5);
+insert into t (id,a) values (786,6);
+insert into t (id,a) values (786,7);
+insert into t (id,a) values (786,8);
+insert into t (id,a) values (786,9);
+insert into t (id,a) values (786,10);
+insert into t (id,a) values (786,11);
+insert into t (id,a) values (786,12);
+insert into t (id,a) values (786,13);
+insert into t (id,a) values (786,14);
+insert into t (id,a) values (786,15);
+insert into t (id,a) values (786,16);
+insert into t (id,a) values (786,17);
+insert into t (id,a) values (786,18);
+insert into t (id,a) values (786,19);
+insert into t (id,a) values (786,20);
+insert into t (id,a) values (786,21);
+insert into t (id,a) values (786,22);
+insert into t (id,a) values (786,23);
+insert into t (id,a) values (786,24);
+insert into t (id,a) values (786,25);
+insert into t (id,a) values (786,26);
+insert into t (id,a) values (786,27);
+insert into t (id,a) values (786,28);
+insert into t (id,a) values (786,29);
+insert into t (id,a) values (786,30);
+insert into t (id,a) values (786,31);
+insert into t (id,a) values (786,32);
+insert into t (id,a) values (786,33);
+insert into t (id,a) values (786,34);
+insert into t (id,a) values (786,35);
+insert into t (id,a) values (786,36);
+insert into t (id,a) values (786,37);
+insert into t (id,a) values (786,38);
+insert into t (id,a) values (786,39);
+insert into t (id,a) values (786,40);
+insert into t (id,a) values (786,41);
+insert into t (id,a) values (786,42);
+insert into t (id,a) values (786,43);
+insert into t (id,a) values (786,44);
+insert into t (id,a) values (786,45);
+insert into t (id,a) values (786,46);
+insert into t (id,a) values (786,47);
+insert into t (id,a) values (786,48);
+insert into t (id,a) values (786,49);
+insert into t (id,a) values (786,50);
+insert into t (id,a) values (786,51);
+insert into t (id,a) values (786,52);
+insert into t (id,a) values (786,53);
+insert into t (id,a) values (786,54);
+insert into t (id,a) values (786,55);
+insert into t (id,a) values (786,56);
+insert into t (id,a) values (786,57);
+insert into t (id,a) values (786,58);
+insert into t (id,a) values (786,59);
+insert into t (id,a) values (786,60);
+insert into t (id,a) values (786,61);
+insert into t (id,a) values (786,62);
+insert into t (id,a) values (786,63);
+insert into t (id,a) values (786,64);
+insert into t (id,a) values (786,65);
+insert into t (id,a) values (786,66);
+insert into t (id,a) values (786,67);
+insert into t (id,a) values (786,68);
+insert into t (id,a) values (786,69);
+insert into t (id,a) values (786,70);
+insert into t (id,a) values (786,71);
+insert into t (id,a) values (786,72);
+insert into t (id,a) values (786,73);
+insert into t (id,a) values (786,74);
+insert into t (id,a) values (786,75);
+insert into t (id,a) values (786,76);
+insert into t (id,a) values (786,77);
+insert into t (id,a) values (786,78);
+insert into t (id,a) values (786,79);
+insert into t (id,a) values (786,80);
+insert into t (id,a) values (786,81);
+insert into t (id,a) values (786,82);
+insert into t (id,a) values (786,83);
+insert into t (id,a) values (786,84);
+insert into t (id,a) values (786,85);
+insert into t (id,a) values (786,86);
+insert into t (id,a) values (786,87);
+insert into t (id,a) values (786,88);
+insert into t (id,a) values (786,89);
+insert into t (id,a) values (786,90);
+insert into t (id,a) values (786,91);
+insert into t (id,a) values (786,92);
+insert into t (id,a) values (786,93);
+insert into t (id,a) values (786,94);
+insert into t (id,a) values (786,95);
+insert into t (id,a) values (786,96);
+insert into t (id,a) values (786,97);
+insert into t (id,a) values (786,98);
+insert into t (id,a) values (786,99);
+insert into t (id,a) values (787,0);
+insert into t (id,a) values (787,1);
+insert into t (id,a) values (787,2);
+insert into t (id,a) values (787,3);
+insert into t (id,a) values (787,4);
+insert into t (id,a) values (787,5);
+insert into t (id,a) values (787,6);
+insert into t (id,a) values (787,7);
+insert into t (id,a) values (787,8);
+insert into t (id,a) values (787,9);
+insert into t (id,a) values (787,10);
+insert into t (id,a) values (787,11);
+insert into t (id,a) values (787,12);
+insert into t (id,a) values (787,13);
+insert into t (id,a) values (787,14);
+insert into t (id,a) values (787,15);
+insert into t (id,a) values (787,16);
+insert into t (id,a) values (787,17);
+insert into t (id,a) values (787,18);
+insert into t (id,a) values (787,19);
+insert into t (id,a) values (787,20);
+insert into t (id,a) values (787,21);
+insert into t (id,a) values (787,22);
+insert into t (id,a) values (787,23);
+insert into t (id,a) values (787,24);
+insert into t (id,a) values (787,25);
+insert into t (id,a) values (787,26);
+insert into t (id,a) values (787,27);
+insert into t (id,a) values (787,28);
+insert into t (id,a) values (787,29);
+insert into t (id,a) values (787,30);
+insert into t (id,a) values (787,31);
+insert into t (id,a) values (787,32);
+insert into t (id,a) values (787,33);
+insert into t (id,a) values (787,34);
+insert into t (id,a) values (787,35);
+insert into t (id,a) values (787,36);
+insert into t (id,a) values (787,37);
+insert into t (id,a) values (787,38);
+insert into t (id,a) values (787,39);
+insert into t (id,a) values (787,40);
+insert into t (id,a) values (787,41);
+insert into t (id,a) values (787,42);
+insert into t (id,a) values (787,43);
+insert into t (id,a) values (787,44);
+insert into t (id,a) values (787,45);
+insert into t (id,a) values (787,46);
+insert into t (id,a) values (787,47);
+insert into t (id,a) values (787,48);
+insert into t (id,a) values (787,49);
+insert into t (id,a) values (787,50);
+insert into t (id,a) values (787,51);
+insert into t (id,a) values (787,52);
+insert into t (id,a) values (787,53);
+insert into t (id,a) values (787,54);
+insert into t (id,a) values (787,55);
+insert into t (id,a) values (787,56);
+insert into t (id,a) values (787,57);
+insert into t (id,a) values (787,58);
+insert into t (id,a) values (787,59);
+insert into t (id,a) values (787,60);
+insert into t (id,a) values (787,61);
+insert into t (id,a) values (787,62);
+insert into t (id,a) values (787,63);
+insert into t (id,a) values (787,64);
+insert into t (id,a) values (787,65);
+insert into t (id,a) values (787,66);
+insert into t (id,a) values (787,67);
+insert into t (id,a) values (787,68);
+insert into t (id,a) values (787,69);
+insert into t (id,a) values (787,70);
+insert into t (id,a) values (787,71);
+insert into t (id,a) values (787,72);
+insert into t (id,a) values (787,73);
+insert into t (id,a) values (787,74);
+insert into t (id,a) values (787,75);
+insert into t (id,a) values (787,76);
+insert into t (id,a) values (787,77);
+insert into t (id,a) values (787,78);
+insert into t (id,a) values (787,79);
+insert into t (id,a) values (787,80);
+insert into t (id,a) values (787,81);
+insert into t (id,a) values (787,82);
+insert into t (id,a) values (787,83);
+insert into t (id,a) values (787,84);
+insert into t (id,a) values (787,85);
+insert into t (id,a) values (787,86);
+insert into t (id,a) values (787,87);
+insert into t (id,a) values (787,88);
+insert into t (id,a) values (787,89);
+insert into t (id,a) values (787,90);
+insert into t (id,a) values (787,91);
+insert into t (id,a) values (787,92);
+insert into t (id,a) values (787,93);
+insert into t (id,a) values (787,94);
+insert into t (id,a) values (787,95);
+insert into t (id,a) values (787,96);
+insert into t (id,a) values (787,97);
+insert into t (id,a) values (787,98);
+insert into t (id,a) values (787,99);
+insert into t (id,a) values (788,0);
+insert into t (id,a) values (788,1);
+insert into t (id,a) values (788,2);
+insert into t (id,a) values (788,3);
+insert into t (id,a) values (788,4);
+insert into t (id,a) values (788,5);
+insert into t (id,a) values (788,6);
+insert into t (id,a) values (788,7);
+insert into t (id,a) values (788,8);
+insert into t (id,a) values (788,9);
+insert into t (id,a) values (788,10);
+insert into t (id,a) values (788,11);
+insert into t (id,a) values (788,12);
+insert into t (id,a) values (788,13);
+insert into t (id,a) values (788,14);
+insert into t (id,a) values (788,15);
+insert into t (id,a) values (788,16);
+insert into t (id,a) values (788,17);
+insert into t (id,a) values (788,18);
+insert into t (id,a) values (788,19);
+insert into t (id,a) values (788,20);
+insert into t (id,a) values (788,21);
+insert into t (id,a) values (788,22);
+insert into t (id,a) values (788,23);
+insert into t (id,a) values (788,24);
+insert into t (id,a) values (788,25);
+insert into t (id,a) values (788,26);
+insert into t (id,a) values (788,27);
+insert into t (id,a) values (788,28);
+insert into t (id,a) values (788,29);
+insert into t (id,a) values (788,30);
+insert into t (id,a) values (788,31);
+insert into t (id,a) values (788,32);
+insert into t (id,a) values (788,33);
+insert into t (id,a) values (788,34);
+insert into t (id,a) values (788,35);
+insert into t (id,a) values (788,36);
+insert into t (id,a) values (788,37);
+insert into t (id,a) values (788,38);
+insert into t (id,a) values (788,39);
+insert into t (id,a) values (788,40);
+insert into t (id,a) values (788,41);
+insert into t (id,a) values (788,42);
+insert into t (id,a) values (788,43);
+insert into t (id,a) values (788,44);
+insert into t (id,a) values (788,45);
+insert into t (id,a) values (788,46);
+insert into t (id,a) values (788,47);
+insert into t (id,a) values (788,48);
+insert into t (id,a) values (788,49);
+insert into t (id,a) values (788,50);
+insert into t (id,a) values (788,51);
+insert into t (id,a) values (788,52);
+insert into t (id,a) values (788,53);
+insert into t (id,a) values (788,54);
+insert into t (id,a) values (788,55);
+insert into t (id,a) values (788,56);
+insert into t (id,a) values (788,57);
+insert into t (id,a) values (788,58);
+insert into t (id,a) values (788,59);
+insert into t (id,a) values (788,60);
+insert into t (id,a) values (788,61);
+insert into t (id,a) values (788,62);
+insert into t (id,a) values (788,63);
+insert into t (id,a) values (788,64);
+insert into t (id,a) values (788,65);
+insert into t (id,a) values (788,66);
+insert into t (id,a) values (788,67);
+insert into t (id,a) values (788,68);
+insert into t (id,a) values (788,69);
+insert into t (id,a) values (788,70);
+insert into t (id,a) values (788,71);
+insert into t (id,a) values (788,72);
+insert into t (id,a) values (788,73);
+insert into t (id,a) values (788,74);
+insert into t (id,a) values (788,75);
+insert into t (id,a) values (788,76);
+insert into t (id,a) values (788,77);
+insert into t (id,a) values (788,78);
+insert into t (id,a) values (788,79);
+insert into t (id,a) values (788,80);
+insert into t (id,a) values (788,81);
+insert into t (id,a) values (788,82);
+insert into t (id,a) values (788,83);
+insert into t (id,a) values (788,84);
+insert into t (id,a) values (788,85);
+insert into t (id,a) values (788,86);
+insert into t (id,a) values (788,87);
+insert into t (id,a) values (788,88);
+insert into t (id,a) values (788,89);
+insert into t (id,a) values (788,90);
+insert into t (id,a) values (788,91);
+insert into t (id,a) values (788,92);
+insert into t (id,a) values (788,93);
+insert into t (id,a) values (788,94);
+insert into t (id,a) values (788,95);
+insert into t (id,a) values (788,96);
+insert into t (id,a) values (788,97);
+insert into t (id,a) values (788,98);
+insert into t (id,a) values (788,99);
+insert into t (id,a) values (789,0);
+insert into t (id,a) values (789,1);
+insert into t (id,a) values (789,2);
+insert into t (id,a) values (789,3);
+insert into t (id,a) values (789,4);
+insert into t (id,a) values (789,5);
+insert into t (id,a) values (789,6);
+insert into t (id,a) values (789,7);
+insert into t (id,a) values (789,8);
+insert into t (id,a) values (789,9);
+insert into t (id,a) values (789,10);
+insert into t (id,a) values (789,11);
+insert into t (id,a) values (789,12);
+insert into t (id,a) values (789,13);
+insert into t (id,a) values (789,14);
+insert into t (id,a) values (789,15);
+insert into t (id,a) values (789,16);
+insert into t (id,a) values (789,17);
+insert into t (id,a) values (789,18);
+insert into t (id,a) values (789,19);
+insert into t (id,a) values (789,20);
+insert into t (id,a) values (789,21);
+insert into t (id,a) values (789,22);
+insert into t (id,a) values (789,23);
+insert into t (id,a) values (789,24);
+insert into t (id,a) values (789,25);
+insert into t (id,a) values (789,26);
+insert into t (id,a) values (789,27);
+insert into t (id,a) values (789,28);
+insert into t (id,a) values (789,29);
+insert into t (id,a) values (789,30);
+insert into t (id,a) values (789,31);
+insert into t (id,a) values (789,32);
+insert into t (id,a) values (789,33);
+insert into t (id,a) values (789,34);
+insert into t (id,a) values (789,35);
+insert into t (id,a) values (789,36);
+insert into t (id,a) values (789,37);
+insert into t (id,a) values (789,38);
+insert into t (id,a) values (789,39);
+insert into t (id,a) values (789,40);
+insert into t (id,a) values (789,41);
+insert into t (id,a) values (789,42);
+insert into t (id,a) values (789,43);
+insert into t (id,a) values (789,44);
+insert into t (id,a) values (789,45);
+insert into t (id,a) values (789,46);
+insert into t (id,a) values (789,47);
+insert into t (id,a) values (789,48);
+insert into t (id,a) values (789,49);
+insert into t (id,a) values (789,50);
+insert into t (id,a) values (789,51);
+insert into t (id,a) values (789,52);
+insert into t (id,a) values (789,53);
+insert into t (id,a) values (789,54);
+insert into t (id,a) values (789,55);
+insert into t (id,a) values (789,56);
+insert into t (id,a) values (789,57);
+insert into t (id,a) values (789,58);
+insert into t (id,a) values (789,59);
+insert into t (id,a) values (789,60);
+insert into t (id,a) values (789,61);
+insert into t (id,a) values (789,62);
+insert into t (id,a) values (789,63);
+insert into t (id,a) values (789,64);
+insert into t (id,a) values (789,65);
+insert into t (id,a) values (789,66);
+insert into t (id,a) values (789,67);
+insert into t (id,a) values (789,68);
+insert into t (id,a) values (789,69);
+insert into t (id,a) values (789,70);
+insert into t (id,a) values (789,71);
+insert into t (id,a) values (789,72);
+insert into t (id,a) values (789,73);
+insert into t (id,a) values (789,74);
+insert into t (id,a) values (789,75);
+insert into t (id,a) values (789,76);
+insert into t (id,a) values (789,77);
+insert into t (id,a) values (789,78);
+insert into t (id,a) values (789,79);
+insert into t (id,a) values (789,80);
+insert into t (id,a) values (789,81);
+insert into t (id,a) values (789,82);
+insert into t (id,a) values (789,83);
+insert into t (id,a) values (789,84);
+insert into t (id,a) values (789,85);
+insert into t (id,a) values (789,86);
+insert into t (id,a) values (789,87);
+insert into t (id,a) values (789,88);
+insert into t (id,a) values (789,89);
+insert into t (id,a) values (789,90);
+insert into t (id,a) values (789,91);
+insert into t (id,a) values (789,92);
+insert into t (id,a) values (789,93);
+insert into t (id,a) values (789,94);
+insert into t (id,a) values (789,95);
+insert into t (id,a) values (789,96);
+insert into t (id,a) values (789,97);
+insert into t (id,a) values (789,98);
+insert into t (id,a) values (789,99);
+insert into t (id,a) values (790,0);
+insert into t (id,a) values (790,1);
+insert into t (id,a) values (790,2);
+insert into t (id,a) values (790,3);
+insert into t (id,a) values (790,4);
+insert into t (id,a) values (790,5);
+insert into t (id,a) values (790,6);
+insert into t (id,a) values (790,7);
+insert into t (id,a) values (790,8);
+insert into t (id,a) values (790,9);
+insert into t (id,a) values (790,10);
+insert into t (id,a) values (790,11);
+insert into t (id,a) values (790,12);
+insert into t (id,a) values (790,13);
+insert into t (id,a) values (790,14);
+insert into t (id,a) values (790,15);
+insert into t (id,a) values (790,16);
+insert into t (id,a) values (790,17);
+insert into t (id,a) values (790,18);
+insert into t (id,a) values (790,19);
+insert into t (id,a) values (790,20);
+insert into t (id,a) values (790,21);
+insert into t (id,a) values (790,22);
+insert into t (id,a) values (790,23);
+insert into t (id,a) values (790,24);
+insert into t (id,a) values (790,25);
+insert into t (id,a) values (790,26);
+insert into t (id,a) values (790,27);
+insert into t (id,a) values (790,28);
+insert into t (id,a) values (790,29);
+insert into t (id,a) values (790,30);
+insert into t (id,a) values (790,31);
+insert into t (id,a) values (790,32);
+insert into t (id,a) values (790,33);
+insert into t (id,a) values (790,34);
+insert into t (id,a) values (790,35);
+insert into t (id,a) values (790,36);
+insert into t (id,a) values (790,37);
+insert into t (id,a) values (790,38);
+insert into t (id,a) values (790,39);
+insert into t (id,a) values (790,40);
+insert into t (id,a) values (790,41);
+insert into t (id,a) values (790,42);
+insert into t (id,a) values (790,43);
+insert into t (id,a) values (790,44);
+insert into t (id,a) values (790,45);
+insert into t (id,a) values (790,46);
+insert into t (id,a) values (790,47);
+insert into t (id,a) values (790,48);
+insert into t (id,a) values (790,49);
+insert into t (id,a) values (790,50);
+insert into t (id,a) values (790,51);
+insert into t (id,a) values (790,52);
+insert into t (id,a) values (790,53);
+insert into t (id,a) values (790,54);
+insert into t (id,a) values (790,55);
+insert into t (id,a) values (790,56);
+insert into t (id,a) values (790,57);
+insert into t (id,a) values (790,58);
+insert into t (id,a) values (790,59);
+insert into t (id,a) values (790,60);
+insert into t (id,a) values (790,61);
+insert into t (id,a) values (790,62);
+insert into t (id,a) values (790,63);
+insert into t (id,a) values (790,64);
+insert into t (id,a) values (790,65);
+insert into t (id,a) values (790,66);
+insert into t (id,a) values (790,67);
+insert into t (id,a) values (790,68);
+insert into t (id,a) values (790,69);
+insert into t (id,a) values (790,70);
+insert into t (id,a) values (790,71);
+insert into t (id,a) values (790,72);
+insert into t (id,a) values (790,73);
+insert into t (id,a) values (790,74);
+insert into t (id,a) values (790,75);
+insert into t (id,a) values (790,76);
+insert into t (id,a) values (790,77);
+insert into t (id,a) values (790,78);
+insert into t (id,a) values (790,79);
+insert into t (id,a) values (790,80);
+insert into t (id,a) values (790,81);
+insert into t (id,a) values (790,82);
+insert into t (id,a) values (790,83);
+insert into t (id,a) values (790,84);
+insert into t (id,a) values (790,85);
+insert into t (id,a) values (790,86);
+insert into t (id,a) values (790,87);
+insert into t (id,a) values (790,88);
+insert into t (id,a) values (790,89);
+insert into t (id,a) values (790,90);
+insert into t (id,a) values (790,91);
+insert into t (id,a) values (790,92);
+insert into t (id,a) values (790,93);
+insert into t (id,a) values (790,94);
+insert into t (id,a) values (790,95);
+insert into t (id,a) values (790,96);
+insert into t (id,a) values (790,97);
+insert into t (id,a) values (790,98);
+insert into t (id,a) values (790,99);
+insert into t (id,a) values (791,0);
+insert into t (id,a) values (791,1);
+insert into t (id,a) values (791,2);
+insert into t (id,a) values (791,3);
+insert into t (id,a) values (791,4);
+insert into t (id,a) values (791,5);
+insert into t (id,a) values (791,6);
+insert into t (id,a) values (791,7);
+insert into t (id,a) values (791,8);
+insert into t (id,a) values (791,9);
+insert into t (id,a) values (791,10);
+insert into t (id,a) values (791,11);
+insert into t (id,a) values (791,12);
+insert into t (id,a) values (791,13);
+insert into t (id,a) values (791,14);
+insert into t (id,a) values (791,15);
+insert into t (id,a) values (791,16);
+insert into t (id,a) values (791,17);
+insert into t (id,a) values (791,18);
+insert into t (id,a) values (791,19);
+insert into t (id,a) values (791,20);
+insert into t (id,a) values (791,21);
+insert into t (id,a) values (791,22);
+insert into t (id,a) values (791,23);
+insert into t (id,a) values (791,24);
+insert into t (id,a) values (791,25);
+insert into t (id,a) values (791,26);
+insert into t (id,a) values (791,27);
+insert into t (id,a) values (791,28);
+insert into t (id,a) values (791,29);
+insert into t (id,a) values (791,30);
+insert into t (id,a) values (791,31);
+insert into t (id,a) values (791,32);
+insert into t (id,a) values (791,33);
+insert into t (id,a) values (791,34);
+insert into t (id,a) values (791,35);
+insert into t (id,a) values (791,36);
+insert into t (id,a) values (791,37);
+insert into t (id,a) values (791,38);
+insert into t (id,a) values (791,39);
+insert into t (id,a) values (791,40);
+insert into t (id,a) values (791,41);
+insert into t (id,a) values (791,42);
+insert into t (id,a) values (791,43);
+insert into t (id,a) values (791,44);
+insert into t (id,a) values (791,45);
+insert into t (id,a) values (791,46);
+insert into t (id,a) values (791,47);
+insert into t (id,a) values (791,48);
+insert into t (id,a) values (791,49);
+insert into t (id,a) values (791,50);
+insert into t (id,a) values (791,51);
+insert into t (id,a) values (791,52);
+insert into t (id,a) values (791,53);
+insert into t (id,a) values (791,54);
+insert into t (id,a) values (791,55);
+insert into t (id,a) values (791,56);
+insert into t (id,a) values (791,57);
+insert into t (id,a) values (791,58);
+insert into t (id,a) values (791,59);
+insert into t (id,a) values (791,60);
+insert into t (id,a) values (791,61);
+insert into t (id,a) values (791,62);
+insert into t (id,a) values (791,63);
+insert into t (id,a) values (791,64);
+insert into t (id,a) values (791,65);
+insert into t (id,a) values (791,66);
+insert into t (id,a) values (791,67);
+insert into t (id,a) values (791,68);
+insert into t (id,a) values (791,69);
+insert into t (id,a) values (791,70);
+insert into t (id,a) values (791,71);
+insert into t (id,a) values (791,72);
+insert into t (id,a) values (791,73);
+insert into t (id,a) values (791,74);
+insert into t (id,a) values (791,75);
+insert into t (id,a) values (791,76);
+insert into t (id,a) values (791,77);
+insert into t (id,a) values (791,78);
+insert into t (id,a) values (791,79);
+insert into t (id,a) values (791,80);
+insert into t (id,a) values (791,81);
+insert into t (id,a) values (791,82);
+insert into t (id,a) values (791,83);
+insert into t (id,a) values (791,84);
+insert into t (id,a) values (791,85);
+insert into t (id,a) values (791,86);
+insert into t (id,a) values (791,87);
+insert into t (id,a) values (791,88);
+insert into t (id,a) values (791,89);
+insert into t (id,a) values (791,90);
+insert into t (id,a) values (791,91);
+insert into t (id,a) values (791,92);
+insert into t (id,a) values (791,93);
+insert into t (id,a) values (791,94);
+insert into t (id,a) values (791,95);
+insert into t (id,a) values (791,96);
+insert into t (id,a) values (791,97);
+insert into t (id,a) values (791,98);
+insert into t (id,a) values (791,99);
+insert into t (id,a) values (792,0);
+insert into t (id,a) values (792,1);
+insert into t (id,a) values (792,2);
+insert into t (id,a) values (792,3);
+insert into t (id,a) values (792,4);
+insert into t (id,a) values (792,5);
+insert into t (id,a) values (792,6);
+insert into t (id,a) values (792,7);
+insert into t (id,a) values (792,8);
+insert into t (id,a) values (792,9);
+insert into t (id,a) values (792,10);
+insert into t (id,a) values (792,11);
+insert into t (id,a) values (792,12);
+insert into t (id,a) values (792,13);
+insert into t (id,a) values (792,14);
+insert into t (id,a) values (792,15);
+insert into t (id,a) values (792,16);
+insert into t (id,a) values (792,17);
+insert into t (id,a) values (792,18);
+insert into t (id,a) values (792,19);
+insert into t (id,a) values (792,20);
+insert into t (id,a) values (792,21);
+insert into t (id,a) values (792,22);
+insert into t (id,a) values (792,23);
+insert into t (id,a) values (792,24);
+insert into t (id,a) values (792,25);
+insert into t (id,a) values (792,26);
+insert into t (id,a) values (792,27);
+insert into t (id,a) values (792,28);
+insert into t (id,a) values (792,29);
+insert into t (id,a) values (792,30);
+insert into t (id,a) values (792,31);
+insert into t (id,a) values (792,32);
+insert into t (id,a) values (792,33);
+insert into t (id,a) values (792,34);
+insert into t (id,a) values (792,35);
+insert into t (id,a) values (792,36);
+insert into t (id,a) values (792,37);
+insert into t (id,a) values (792,38);
+insert into t (id,a) values (792,39);
+insert into t (id,a) values (792,40);
+insert into t (id,a) values (792,41);
+insert into t (id,a) values (792,42);
+insert into t (id,a) values (792,43);
+insert into t (id,a) values (792,44);
+insert into t (id,a) values (792,45);
+insert into t (id,a) values (792,46);
+insert into t (id,a) values (792,47);
+insert into t (id,a) values (792,48);
+insert into t (id,a) values (792,49);
+insert into t (id,a) values (792,50);
+insert into t (id,a) values (792,51);
+insert into t (id,a) values (792,52);
+insert into t (id,a) values (792,53);
+insert into t (id,a) values (792,54);
+insert into t (id,a) values (792,55);
+insert into t (id,a) values (792,56);
+insert into t (id,a) values (792,57);
+insert into t (id,a) values (792,58);
+insert into t (id,a) values (792,59);
+insert into t (id,a) values (792,60);
+insert into t (id,a) values (792,61);
+insert into t (id,a) values (792,62);
+insert into t (id,a) values (792,63);
+insert into t (id,a) values (792,64);
+insert into t (id,a) values (792,65);
+insert into t (id,a) values (792,66);
+insert into t (id,a) values (792,67);
+insert into t (id,a) values (792,68);
+insert into t (id,a) values (792,69);
+insert into t (id,a) values (792,70);
+insert into t (id,a) values (792,71);
+insert into t (id,a) values (792,72);
+insert into t (id,a) values (792,73);
+insert into t (id,a) values (792,74);
+insert into t (id,a) values (792,75);
+insert into t (id,a) values (792,76);
+insert into t (id,a) values (792,77);
+insert into t (id,a) values (792,78);
+insert into t (id,a) values (792,79);
+insert into t (id,a) values (792,80);
+insert into t (id,a) values (792,81);
+insert into t (id,a) values (792,82);
+insert into t (id,a) values (792,83);
+insert into t (id,a) values (792,84);
+insert into t (id,a) values (792,85);
+insert into t (id,a) values (792,86);
+insert into t (id,a) values (792,87);
+insert into t (id,a) values (792,88);
+insert into t (id,a) values (792,89);
+insert into t (id,a) values (792,90);
+insert into t (id,a) values (792,91);
+insert into t (id,a) values (792,92);
+insert into t (id,a) values (792,93);
+insert into t (id,a) values (792,94);
+insert into t (id,a) values (792,95);
+insert into t (id,a) values (792,96);
+insert into t (id,a) values (792,97);
+insert into t (id,a) values (792,98);
+insert into t (id,a) values (792,99);
+insert into t (id,a) values (793,0);
+insert into t (id,a) values (793,1);
+insert into t (id,a) values (793,2);
+insert into t (id,a) values (793,3);
+insert into t (id,a) values (793,4);
+insert into t (id,a) values (793,5);
+insert into t (id,a) values (793,6);
+insert into t (id,a) values (793,7);
+insert into t (id,a) values (793,8);
+insert into t (id,a) values (793,9);
+insert into t (id,a) values (793,10);
+insert into t (id,a) values (793,11);
+insert into t (id,a) values (793,12);
+insert into t (id,a) values (793,13);
+insert into t (id,a) values (793,14);
+insert into t (id,a) values (793,15);
+insert into t (id,a) values (793,16);
+insert into t (id,a) values (793,17);
+insert into t (id,a) values (793,18);
+insert into t (id,a) values (793,19);
+insert into t (id,a) values (793,20);
+insert into t (id,a) values (793,21);
+insert into t (id,a) values (793,22);
+insert into t (id,a) values (793,23);
+insert into t (id,a) values (793,24);
+insert into t (id,a) values (793,25);
+insert into t (id,a) values (793,26);
+insert into t (id,a) values (793,27);
+insert into t (id,a) values (793,28);
+insert into t (id,a) values (793,29);
+insert into t (id,a) values (793,30);
+insert into t (id,a) values (793,31);
+insert into t (id,a) values (793,32);
+insert into t (id,a) values (793,33);
+insert into t (id,a) values (793,34);
+insert into t (id,a) values (793,35);
+insert into t (id,a) values (793,36);
+insert into t (id,a) values (793,37);
+insert into t (id,a) values (793,38);
+insert into t (id,a) values (793,39);
+insert into t (id,a) values (793,40);
+insert into t (id,a) values (793,41);
+insert into t (id,a) values (793,42);
+insert into t (id,a) values (793,43);
+insert into t (id,a) values (793,44);
+insert into t (id,a) values (793,45);
+insert into t (id,a) values (793,46);
+insert into t (id,a) values (793,47);
+insert into t (id,a) values (793,48);
+insert into t (id,a) values (793,49);
+insert into t (id,a) values (793,50);
+insert into t (id,a) values (793,51);
+insert into t (id,a) values (793,52);
+insert into t (id,a) values (793,53);
+insert into t (id,a) values (793,54);
+insert into t (id,a) values (793,55);
+insert into t (id,a) values (793,56);
+insert into t (id,a) values (793,57);
+insert into t (id,a) values (793,58);
+insert into t (id,a) values (793,59);
+insert into t (id,a) values (793,60);
+insert into t (id,a) values (793,61);
+insert into t (id,a) values (793,62);
+insert into t (id,a) values (793,63);
+insert into t (id,a) values (793,64);
+insert into t (id,a) values (793,65);
+insert into t (id,a) values (793,66);
+insert into t (id,a) values (793,67);
+insert into t (id,a) values (793,68);
+insert into t (id,a) values (793,69);
+insert into t (id,a) values (793,70);
+insert into t (id,a) values (793,71);
+insert into t (id,a) values (793,72);
+insert into t (id,a) values (793,73);
+insert into t (id,a) values (793,74);
+insert into t (id,a) values (793,75);
+insert into t (id,a) values (793,76);
+insert into t (id,a) values (793,77);
+insert into t (id,a) values (793,78);
+insert into t (id,a) values (793,79);
+insert into t (id,a) values (793,80);
+insert into t (id,a) values (793,81);
+insert into t (id,a) values (793,82);
+insert into t (id,a) values (793,83);
+insert into t (id,a) values (793,84);
+insert into t (id,a) values (793,85);
+insert into t (id,a) values (793,86);
+insert into t (id,a) values (793,87);
+insert into t (id,a) values (793,88);
+insert into t (id,a) values (793,89);
+insert into t (id,a) values (793,90);
+insert into t (id,a) values (793,91);
+insert into t (id,a) values (793,92);
+insert into t (id,a) values (793,93);
+insert into t (id,a) values (793,94);
+insert into t (id,a) values (793,95);
+insert into t (id,a) values (793,96);
+insert into t (id,a) values (793,97);
+insert into t (id,a) values (793,98);
+insert into t (id,a) values (793,99);
+insert into t (id,a) values (794,0);
+insert into t (id,a) values (794,1);
+insert into t (id,a) values (794,2);
+insert into t (id,a) values (794,3);
+insert into t (id,a) values (794,4);
+insert into t (id,a) values (794,5);
+insert into t (id,a) values (794,6);
+insert into t (id,a) values (794,7);
+insert into t (id,a) values (794,8);
+insert into t (id,a) values (794,9);
+insert into t (id,a) values (794,10);
+insert into t (id,a) values (794,11);
+insert into t (id,a) values (794,12);
+insert into t (id,a) values (794,13);
+insert into t (id,a) values (794,14);
+insert into t (id,a) values (794,15);
+insert into t (id,a) values (794,16);
+insert into t (id,a) values (794,17);
+insert into t (id,a) values (794,18);
+insert into t (id,a) values (794,19);
+insert into t (id,a) values (794,20);
+insert into t (id,a) values (794,21);
+insert into t (id,a) values (794,22);
+insert into t (id,a) values (794,23);
+insert into t (id,a) values (794,24);
+insert into t (id,a) values (794,25);
+insert into t (id,a) values (794,26);
+insert into t (id,a) values (794,27);
+insert into t (id,a) values (794,28);
+insert into t (id,a) values (794,29);
+insert into t (id,a) values (794,30);
+insert into t (id,a) values (794,31);
+insert into t (id,a) values (794,32);
+insert into t (id,a) values (794,33);
+insert into t (id,a) values (794,34);
+insert into t (id,a) values (794,35);
+insert into t (id,a) values (794,36);
+insert into t (id,a) values (794,37);
+insert into t (id,a) values (794,38);
+insert into t (id,a) values (794,39);
+insert into t (id,a) values (794,40);
+insert into t (id,a) values (794,41);
+insert into t (id,a) values (794,42);
+insert into t (id,a) values (794,43);
+insert into t (id,a) values (794,44);
+insert into t (id,a) values (794,45);
+insert into t (id,a) values (794,46);
+insert into t (id,a) values (794,47);
+insert into t (id,a) values (794,48);
+insert into t (id,a) values (794,49);
+insert into t (id,a) values (794,50);
+insert into t (id,a) values (794,51);
+insert into t (id,a) values (794,52);
+insert into t (id,a) values (794,53);
+insert into t (id,a) values (794,54);
+insert into t (id,a) values (794,55);
+insert into t (id,a) values (794,56);
+insert into t (id,a) values (794,57);
+insert into t (id,a) values (794,58);
+insert into t (id,a) values (794,59);
+insert into t (id,a) values (794,60);
+insert into t (id,a) values (794,61);
+insert into t (id,a) values (794,62);
+insert into t (id,a) values (794,63);
+insert into t (id,a) values (794,64);
+insert into t (id,a) values (794,65);
+insert into t (id,a) values (794,66);
+insert into t (id,a) values (794,67);
+insert into t (id,a) values (794,68);
+insert into t (id,a) values (794,69);
+insert into t (id,a) values (794,70);
+insert into t (id,a) values (794,71);
+insert into t (id,a) values (794,72);
+insert into t (id,a) values (794,73);
+insert into t (id,a) values (794,74);
+insert into t (id,a) values (794,75);
+insert into t (id,a) values (794,76);
+insert into t (id,a) values (794,77);
+insert into t (id,a) values (794,78);
+insert into t (id,a) values (794,79);
+insert into t (id,a) values (794,80);
+insert into t (id,a) values (794,81);
+insert into t (id,a) values (794,82);
+insert into t (id,a) values (794,83);
+insert into t (id,a) values (794,84);
+insert into t (id,a) values (794,85);
+insert into t (id,a) values (794,86);
+insert into t (id,a) values (794,87);
+insert into t (id,a) values (794,88);
+insert into t (id,a) values (794,89);
+insert into t (id,a) values (794,90);
+insert into t (id,a) values (794,91);
+insert into t (id,a) values (794,92);
+insert into t (id,a) values (794,93);
+insert into t (id,a) values (794,94);
+insert into t (id,a) values (794,95);
+insert into t (id,a) values (794,96);
+insert into t (id,a) values (794,97);
+insert into t (id,a) values (794,98);
+insert into t (id,a) values (794,99);
+insert into t (id,a) values (795,0);
+insert into t (id,a) values (795,1);
+insert into t (id,a) values (795,2);
+insert into t (id,a) values (795,3);
+insert into t (id,a) values (795,4);
+insert into t (id,a) values (795,5);
+insert into t (id,a) values (795,6);
+insert into t (id,a) values (795,7);
+insert into t (id,a) values (795,8);
+insert into t (id,a) values (795,9);
+insert into t (id,a) values (795,10);
+insert into t (id,a) values (795,11);
+insert into t (id,a) values (795,12);
+insert into t (id,a) values (795,13);
+insert into t (id,a) values (795,14);
+insert into t (id,a) values (795,15);
+insert into t (id,a) values (795,16);
+insert into t (id,a) values (795,17);
+insert into t (id,a) values (795,18);
+insert into t (id,a) values (795,19);
+insert into t (id,a) values (795,20);
+insert into t (id,a) values (795,21);
+insert into t (id,a) values (795,22);
+insert into t (id,a) values (795,23);
+insert into t (id,a) values (795,24);
+insert into t (id,a) values (795,25);
+insert into t (id,a) values (795,26);
+insert into t (id,a) values (795,27);
+insert into t (id,a) values (795,28);
+insert into t (id,a) values (795,29);
+insert into t (id,a) values (795,30);
+insert into t (id,a) values (795,31);
+insert into t (id,a) values (795,32);
+insert into t (id,a) values (795,33);
+insert into t (id,a) values (795,34);
+insert into t (id,a) values (795,35);
+insert into t (id,a) values (795,36);
+insert into t (id,a) values (795,37);
+insert into t (id,a) values (795,38);
+insert into t (id,a) values (795,39);
+insert into t (id,a) values (795,40);
+insert into t (id,a) values (795,41);
+insert into t (id,a) values (795,42);
+insert into t (id,a) values (795,43);
+insert into t (id,a) values (795,44);
+insert into t (id,a) values (795,45);
+insert into t (id,a) values (795,46);
+insert into t (id,a) values (795,47);
+insert into t (id,a) values (795,48);
+insert into t (id,a) values (795,49);
+insert into t (id,a) values (795,50);
+insert into t (id,a) values (795,51);
+insert into t (id,a) values (795,52);
+insert into t (id,a) values (795,53);
+insert into t (id,a) values (795,54);
+insert into t (id,a) values (795,55);
+insert into t (id,a) values (795,56);
+insert into t (id,a) values (795,57);
+insert into t (id,a) values (795,58);
+insert into t (id,a) values (795,59);
+insert into t (id,a) values (795,60);
+insert into t (id,a) values (795,61);
+insert into t (id,a) values (795,62);
+insert into t (id,a) values (795,63);
+insert into t (id,a) values (795,64);
+insert into t (id,a) values (795,65);
+insert into t (id,a) values (795,66);
+insert into t (id,a) values (795,67);
+insert into t (id,a) values (795,68);
+insert into t (id,a) values (795,69);
+insert into t (id,a) values (795,70);
+insert into t (id,a) values (795,71);
+insert into t (id,a) values (795,72);
+insert into t (id,a) values (795,73);
+insert into t (id,a) values (795,74);
+insert into t (id,a) values (795,75);
+insert into t (id,a) values (795,76);
+insert into t (id,a) values (795,77);
+insert into t (id,a) values (795,78);
+insert into t (id,a) values (795,79);
+insert into t (id,a) values (795,80);
+insert into t (id,a) values (795,81);
+insert into t (id,a) values (795,82);
+insert into t (id,a) values (795,83);
+insert into t (id,a) values (795,84);
+insert into t (id,a) values (795,85);
+insert into t (id,a) values (795,86);
+insert into t (id,a) values (795,87);
+insert into t (id,a) values (795,88);
+insert into t (id,a) values (795,89);
+insert into t (id,a) values (795,90);
+insert into t (id,a) values (795,91);
+insert into t (id,a) values (795,92);
+insert into t (id,a) values (795,93);
+insert into t (id,a) values (795,94);
+insert into t (id,a) values (795,95);
+insert into t (id,a) values (795,96);
+insert into t (id,a) values (795,97);
+insert into t (id,a) values (795,98);
+insert into t (id,a) values (795,99);
+insert into t (id,a) values (796,0);
+insert into t (id,a) values (796,1);
+insert into t (id,a) values (796,2);
+insert into t (id,a) values (796,3);
+insert into t (id,a) values (796,4);
+insert into t (id,a) values (796,5);
+insert into t (id,a) values (796,6);
+insert into t (id,a) values (796,7);
+insert into t (id,a) values (796,8);
+insert into t (id,a) values (796,9);
+insert into t (id,a) values (796,10);
+insert into t (id,a) values (796,11);
+insert into t (id,a) values (796,12);
+insert into t (id,a) values (796,13);
+insert into t (id,a) values (796,14);
+insert into t (id,a) values (796,15);
+insert into t (id,a) values (796,16);
+insert into t (id,a) values (796,17);
+insert into t (id,a) values (796,18);
+insert into t (id,a) values (796,19);
+insert into t (id,a) values (796,20);
+insert into t (id,a) values (796,21);
+insert into t (id,a) values (796,22);
+insert into t (id,a) values (796,23);
+insert into t (id,a) values (796,24);
+insert into t (id,a) values (796,25);
+insert into t (id,a) values (796,26);
+insert into t (id,a) values (796,27);
+insert into t (id,a) values (796,28);
+insert into t (id,a) values (796,29);
+insert into t (id,a) values (796,30);
+insert into t (id,a) values (796,31);
+insert into t (id,a) values (796,32);
+insert into t (id,a) values (796,33);
+insert into t (id,a) values (796,34);
+insert into t (id,a) values (796,35);
+insert into t (id,a) values (796,36);
+insert into t (id,a) values (796,37);
+insert into t (id,a) values (796,38);
+insert into t (id,a) values (796,39);
+insert into t (id,a) values (796,40);
+insert into t (id,a) values (796,41);
+insert into t (id,a) values (796,42);
+insert into t (id,a) values (796,43);
+insert into t (id,a) values (796,44);
+insert into t (id,a) values (796,45);
+insert into t (id,a) values (796,46);
+insert into t (id,a) values (796,47);
+insert into t (id,a) values (796,48);
+insert into t (id,a) values (796,49);
+insert into t (id,a) values (796,50);
+insert into t (id,a) values (796,51);
+insert into t (id,a) values (796,52);
+insert into t (id,a) values (796,53);
+insert into t (id,a) values (796,54);
+insert into t (id,a) values (796,55);
+insert into t (id,a) values (796,56);
+insert into t (id,a) values (796,57);
+insert into t (id,a) values (796,58);
+insert into t (id,a) values (796,59);
+insert into t (id,a) values (796,60);
+insert into t (id,a) values (796,61);
+insert into t (id,a) values (796,62);
+insert into t (id,a) values (796,63);
+insert into t (id,a) values (796,64);
+insert into t (id,a) values (796,65);
+insert into t (id,a) values (796,66);
+insert into t (id,a) values (796,67);
+insert into t (id,a) values (796,68);
+insert into t (id,a) values (796,69);
+insert into t (id,a) values (796,70);
+insert into t (id,a) values (796,71);
+insert into t (id,a) values (796,72);
+insert into t (id,a) values (796,73);
+insert into t (id,a) values (796,74);
+insert into t (id,a) values (796,75);
+insert into t (id,a) values (796,76);
+insert into t (id,a) values (796,77);
+insert into t (id,a) values (796,78);
+insert into t (id,a) values (796,79);
+insert into t (id,a) values (796,80);
+insert into t (id,a) values (796,81);
+insert into t (id,a) values (796,82);
+insert into t (id,a) values (796,83);
+insert into t (id,a) values (796,84);
+insert into t (id,a) values (796,85);
+insert into t (id,a) values (796,86);
+insert into t (id,a) values (796,87);
+insert into t (id,a) values (796,88);
+insert into t (id,a) values (796,89);
+insert into t (id,a) values (796,90);
+insert into t (id,a) values (796,91);
+insert into t (id,a) values (796,92);
+insert into t (id,a) values (796,93);
+insert into t (id,a) values (796,94);
+insert into t (id,a) values (796,95);
+insert into t (id,a) values (796,96);
+insert into t (id,a) values (796,97);
+insert into t (id,a) values (796,98);
+insert into t (id,a) values (796,99);
+insert into t (id,a) values (797,0);
+insert into t (id,a) values (797,1);
+insert into t (id,a) values (797,2);
+insert into t (id,a) values (797,3);
+insert into t (id,a) values (797,4);
+insert into t (id,a) values (797,5);
+insert into t (id,a) values (797,6);
+insert into t (id,a) values (797,7);
+insert into t (id,a) values (797,8);
+insert into t (id,a) values (797,9);
+insert into t (id,a) values (797,10);
+insert into t (id,a) values (797,11);
+insert into t (id,a) values (797,12);
+insert into t (id,a) values (797,13);
+insert into t (id,a) values (797,14);
+insert into t (id,a) values (797,15);
+insert into t (id,a) values (797,16);
+insert into t (id,a) values (797,17);
+insert into t (id,a) values (797,18);
+insert into t (id,a) values (797,19);
+insert into t (id,a) values (797,20);
+insert into t (id,a) values (797,21);
+insert into t (id,a) values (797,22);
+insert into t (id,a) values (797,23);
+insert into t (id,a) values (797,24);
+insert into t (id,a) values (797,25);
+insert into t (id,a) values (797,26);
+insert into t (id,a) values (797,27);
+insert into t (id,a) values (797,28);
+insert into t (id,a) values (797,29);
+insert into t (id,a) values (797,30);
+insert into t (id,a) values (797,31);
+insert into t (id,a) values (797,32);
+insert into t (id,a) values (797,33);
+insert into t (id,a) values (797,34);
+insert into t (id,a) values (797,35);
+insert into t (id,a) values (797,36);
+insert into t (id,a) values (797,37);
+insert into t (id,a) values (797,38);
+insert into t (id,a) values (797,39);
+insert into t (id,a) values (797,40);
+insert into t (id,a) values (797,41);
+insert into t (id,a) values (797,42);
+insert into t (id,a) values (797,43);
+insert into t (id,a) values (797,44);
+insert into t (id,a) values (797,45);
+insert into t (id,a) values (797,46);
+insert into t (id,a) values (797,47);
+insert into t (id,a) values (797,48);
+insert into t (id,a) values (797,49);
+insert into t (id,a) values (797,50);
+insert into t (id,a) values (797,51);
+insert into t (id,a) values (797,52);
+insert into t (id,a) values (797,53);
+insert into t (id,a) values (797,54);
+insert into t (id,a) values (797,55);
+insert into t (id,a) values (797,56);
+insert into t (id,a) values (797,57);
+insert into t (id,a) values (797,58);
+insert into t (id,a) values (797,59);
+insert into t (id,a) values (797,60);
+insert into t (id,a) values (797,61);
+insert into t (id,a) values (797,62);
+insert into t (id,a) values (797,63);
+insert into t (id,a) values (797,64);
+insert into t (id,a) values (797,65);
+insert into t (id,a) values (797,66);
+insert into t (id,a) values (797,67);
+insert into t (id,a) values (797,68);
+insert into t (id,a) values (797,69);
+insert into t (id,a) values (797,70);
+insert into t (id,a) values (797,71);
+insert into t (id,a) values (797,72);
+insert into t (id,a) values (797,73);
+insert into t (id,a) values (797,74);
+insert into t (id,a) values (797,75);
+insert into t (id,a) values (797,76);
+insert into t (id,a) values (797,77);
+insert into t (id,a) values (797,78);
+insert into t (id,a) values (797,79);
+insert into t (id,a) values (797,80);
+insert into t (id,a) values (797,81);
+insert into t (id,a) values (797,82);
+insert into t (id,a) values (797,83);
+insert into t (id,a) values (797,84);
+insert into t (id,a) values (797,85);
+insert into t (id,a) values (797,86);
+insert into t (id,a) values (797,87);
+insert into t (id,a) values (797,88);
+insert into t (id,a) values (797,89);
+insert into t (id,a) values (797,90);
+insert into t (id,a) values (797,91);
+insert into t (id,a) values (797,92);
+insert into t (id,a) values (797,93);
+insert into t (id,a) values (797,94);
+insert into t (id,a) values (797,95);
+insert into t (id,a) values (797,96);
+insert into t (id,a) values (797,97);
+insert into t (id,a) values (797,98);
+insert into t (id,a) values (797,99);
+insert into t (id,a) values (798,0);
+insert into t (id,a) values (798,1);
+insert into t (id,a) values (798,2);
+insert into t (id,a) values (798,3);
+insert into t (id,a) values (798,4);
+insert into t (id,a) values (798,5);
+insert into t (id,a) values (798,6);
+insert into t (id,a) values (798,7);
+insert into t (id,a) values (798,8);
+insert into t (id,a) values (798,9);
+insert into t (id,a) values (798,10);
+insert into t (id,a) values (798,11);
+insert into t (id,a) values (798,12);
+insert into t (id,a) values (798,13);
+insert into t (id,a) values (798,14);
+insert into t (id,a) values (798,15);
+insert into t (id,a) values (798,16);
+insert into t (id,a) values (798,17);
+insert into t (id,a) values (798,18);
+insert into t (id,a) values (798,19);
+insert into t (id,a) values (798,20);
+insert into t (id,a) values (798,21);
+insert into t (id,a) values (798,22);
+insert into t (id,a) values (798,23);
+insert into t (id,a) values (798,24);
+insert into t (id,a) values (798,25);
+insert into t (id,a) values (798,26);
+insert into t (id,a) values (798,27);
+insert into t (id,a) values (798,28);
+insert into t (id,a) values (798,29);
+insert into t (id,a) values (798,30);
+insert into t (id,a) values (798,31);
+insert into t (id,a) values (798,32);
+insert into t (id,a) values (798,33);
+insert into t (id,a) values (798,34);
+insert into t (id,a) values (798,35);
+insert into t (id,a) values (798,36);
+insert into t (id,a) values (798,37);
+insert into t (id,a) values (798,38);
+insert into t (id,a) values (798,39);
+insert into t (id,a) values (798,40);
+insert into t (id,a) values (798,41);
+insert into t (id,a) values (798,42);
+insert into t (id,a) values (798,43);
+insert into t (id,a) values (798,44);
+insert into t (id,a) values (798,45);
+insert into t (id,a) values (798,46);
+insert into t (id,a) values (798,47);
+insert into t (id,a) values (798,48);
+insert into t (id,a) values (798,49);
+insert into t (id,a) values (798,50);
+insert into t (id,a) values (798,51);
+insert into t (id,a) values (798,52);
+insert into t (id,a) values (798,53);
+insert into t (id,a) values (798,54);
+insert into t (id,a) values (798,55);
+insert into t (id,a) values (798,56);
+insert into t (id,a) values (798,57);
+insert into t (id,a) values (798,58);
+insert into t (id,a) values (798,59);
+insert into t (id,a) values (798,60);
+insert into t (id,a) values (798,61);
+insert into t (id,a) values (798,62);
+insert into t (id,a) values (798,63);
+insert into t (id,a) values (798,64);
+insert into t (id,a) values (798,65);
+insert into t (id,a) values (798,66);
+insert into t (id,a) values (798,67);
+insert into t (id,a) values (798,68);
+insert into t (id,a) values (798,69);
+insert into t (id,a) values (798,70);
+insert into t (id,a) values (798,71);
+insert into t (id,a) values (798,72);
+insert into t (id,a) values (798,73);
+insert into t (id,a) values (798,74);
+insert into t (id,a) values (798,75);
+insert into t (id,a) values (798,76);
+insert into t (id,a) values (798,77);
+insert into t (id,a) values (798,78);
+insert into t (id,a) values (798,79);
+insert into t (id,a) values (798,80);
+insert into t (id,a) values (798,81);
+insert into t (id,a) values (798,82);
+insert into t (id,a) values (798,83);
+insert into t (id,a) values (798,84);
+insert into t (id,a) values (798,85);
+insert into t (id,a) values (798,86);
+insert into t (id,a) values (798,87);
+insert into t (id,a) values (798,88);
+insert into t (id,a) values (798,89);
+insert into t (id,a) values (798,90);
+insert into t (id,a) values (798,91);
+insert into t (id,a) values (798,92);
+insert into t (id,a) values (798,93);
+insert into t (id,a) values (798,94);
+insert into t (id,a) values (798,95);
+insert into t (id,a) values (798,96);
+insert into t (id,a) values (798,97);
+insert into t (id,a) values (798,98);
+insert into t (id,a) values (798,99);
+insert into t (id,a) values (799,0);
+insert into t (id,a) values (799,1);
+insert into t (id,a) values (799,2);
+insert into t (id,a) values (799,3);
+insert into t (id,a) values (799,4);
+insert into t (id,a) values (799,5);
+insert into t (id,a) values (799,6);
+insert into t (id,a) values (799,7);
+insert into t (id,a) values (799,8);
+insert into t (id,a) values (799,9);
+insert into t (id,a) values (799,10);
+insert into t (id,a) values (799,11);
+insert into t (id,a) values (799,12);
+insert into t (id,a) values (799,13);
+insert into t (id,a) values (799,14);
+insert into t (id,a) values (799,15);
+insert into t (id,a) values (799,16);
+insert into t (id,a) values (799,17);
+insert into t (id,a) values (799,18);
+insert into t (id,a) values (799,19);
+insert into t (id,a) values (799,20);
+insert into t (id,a) values (799,21);
+insert into t (id,a) values (799,22);
+insert into t (id,a) values (799,23);
+insert into t (id,a) values (799,24);
+insert into t (id,a) values (799,25);
+insert into t (id,a) values (799,26);
+insert into t (id,a) values (799,27);
+insert into t (id,a) values (799,28);
+insert into t (id,a) values (799,29);
+insert into t (id,a) values (799,30);
+insert into t (id,a) values (799,31);
+insert into t (id,a) values (799,32);
+insert into t (id,a) values (799,33);
+insert into t (id,a) values (799,34);
+insert into t (id,a) values (799,35);
+insert into t (id,a) values (799,36);
+insert into t (id,a) values (799,37);
+insert into t (id,a) values (799,38);
+insert into t (id,a) values (799,39);
+insert into t (id,a) values (799,40);
+insert into t (id,a) values (799,41);
+insert into t (id,a) values (799,42);
+insert into t (id,a) values (799,43);
+insert into t (id,a) values (799,44);
+insert into t (id,a) values (799,45);
+insert into t (id,a) values (799,46);
+insert into t (id,a) values (799,47);
+insert into t (id,a) values (799,48);
+insert into t (id,a) values (799,49);
+insert into t (id,a) values (799,50);
+insert into t (id,a) values (799,51);
+insert into t (id,a) values (799,52);
+insert into t (id,a) values (799,53);
+insert into t (id,a) values (799,54);
+insert into t (id,a) values (799,55);
+insert into t (id,a) values (799,56);
+insert into t (id,a) values (799,57);
+insert into t (id,a) values (799,58);
+insert into t (id,a) values (799,59);
+insert into t (id,a) values (799,60);
+insert into t (id,a) values (799,61);
+insert into t (id,a) values (799,62);
+insert into t (id,a) values (799,63);
+insert into t (id,a) values (799,64);
+insert into t (id,a) values (799,65);
+insert into t (id,a) values (799,66);
+insert into t (id,a) values (799,67);
+insert into t (id,a) values (799,68);
+insert into t (id,a) values (799,69);
+insert into t (id,a) values (799,70);
+insert into t (id,a) values (799,71);
+insert into t (id,a) values (799,72);
+insert into t (id,a) values (799,73);
+insert into t (id,a) values (799,74);
+insert into t (id,a) values (799,75);
+insert into t (id,a) values (799,76);
+insert into t (id,a) values (799,77);
+insert into t (id,a) values (799,78);
+insert into t (id,a) values (799,79);
+insert into t (id,a) values (799,80);
+insert into t (id,a) values (799,81);
+insert into t (id,a) values (799,82);
+insert into t (id,a) values (799,83);
+insert into t (id,a) values (799,84);
+insert into t (id,a) values (799,85);
+insert into t (id,a) values (799,86);
+insert into t (id,a) values (799,87);
+insert into t (id,a) values (799,88);
+insert into t (id,a) values (799,89);
+insert into t (id,a) values (799,90);
+insert into t (id,a) values (799,91);
+insert into t (id,a) values (799,92);
+insert into t (id,a) values (799,93);
+insert into t (id,a) values (799,94);
+insert into t (id,a) values (799,95);
+insert into t (id,a) values (799,96);
+insert into t (id,a) values (799,97);
+insert into t (id,a) values (799,98);
+insert into t (id,a) values (799,99);
+insert into t (id,a) values (800,0);
+insert into t (id,a) values (800,1);
+insert into t (id,a) values (800,2);
+insert into t (id,a) values (800,3);
+insert into t (id,a) values (800,4);
+insert into t (id,a) values (800,5);
+insert into t (id,a) values (800,6);
+insert into t (id,a) values (800,7);
+insert into t (id,a) values (800,8);
+insert into t (id,a) values (800,9);
+insert into t (id,a) values (800,10);
+insert into t (id,a) values (800,11);
+insert into t (id,a) values (800,12);
+insert into t (id,a) values (800,13);
+insert into t (id,a) values (800,14);
+insert into t (id,a) values (800,15);
+insert into t (id,a) values (800,16);
+insert into t (id,a) values (800,17);
+insert into t (id,a) values (800,18);
+insert into t (id,a) values (800,19);
+insert into t (id,a) values (800,20);
+insert into t (id,a) values (800,21);
+insert into t (id,a) values (800,22);
+insert into t (id,a) values (800,23);
+insert into t (id,a) values (800,24);
+insert into t (id,a) values (800,25);
+insert into t (id,a) values (800,26);
+insert into t (id,a) values (800,27);
+insert into t (id,a) values (800,28);
+insert into t (id,a) values (800,29);
+insert into t (id,a) values (800,30);
+insert into t (id,a) values (800,31);
+insert into t (id,a) values (800,32);
+insert into t (id,a) values (800,33);
+insert into t (id,a) values (800,34);
+insert into t (id,a) values (800,35);
+insert into t (id,a) values (800,36);
+insert into t (id,a) values (800,37);
+insert into t (id,a) values (800,38);
+insert into t (id,a) values (800,39);
+insert into t (id,a) values (800,40);
+insert into t (id,a) values (800,41);
+insert into t (id,a) values (800,42);
+insert into t (id,a) values (800,43);
+insert into t (id,a) values (800,44);
+insert into t (id,a) values (800,45);
+insert into t (id,a) values (800,46);
+insert into t (id,a) values (800,47);
+insert into t (id,a) values (800,48);
+insert into t (id,a) values (800,49);
+insert into t (id,a) values (800,50);
+insert into t (id,a) values (800,51);
+insert into t (id,a) values (800,52);
+insert into t (id,a) values (800,53);
+insert into t (id,a) values (800,54);
+insert into t (id,a) values (800,55);
+insert into t (id,a) values (800,56);
+insert into t (id,a) values (800,57);
+insert into t (id,a) values (800,58);
+insert into t (id,a) values (800,59);
+insert into t (id,a) values (800,60);
+insert into t (id,a) values (800,61);
+insert into t (id,a) values (800,62);
+insert into t (id,a) values (800,63);
+insert into t (id,a) values (800,64);
+insert into t (id,a) values (800,65);
+insert into t (id,a) values (800,66);
+insert into t (id,a) values (800,67);
+insert into t (id,a) values (800,68);
+insert into t (id,a) values (800,69);
+insert into t (id,a) values (800,70);
+insert into t (id,a) values (800,71);
+insert into t (id,a) values (800,72);
+insert into t (id,a) values (800,73);
+insert into t (id,a) values (800,74);
+insert into t (id,a) values (800,75);
+insert into t (id,a) values (800,76);
+insert into t (id,a) values (800,77);
+insert into t (id,a) values (800,78);
+insert into t (id,a) values (800,79);
+insert into t (id,a) values (800,80);
+insert into t (id,a) values (800,81);
+insert into t (id,a) values (800,82);
+insert into t (id,a) values (800,83);
+insert into t (id,a) values (800,84);
+insert into t (id,a) values (800,85);
+insert into t (id,a) values (800,86);
+insert into t (id,a) values (800,87);
+insert into t (id,a) values (800,88);
+insert into t (id,a) values (800,89);
+insert into t (id,a) values (800,90);
+insert into t (id,a) values (800,91);
+insert into t (id,a) values (800,92);
+insert into t (id,a) values (800,93);
+insert into t (id,a) values (800,94);
+insert into t (id,a) values (800,95);
+insert into t (id,a) values (800,96);
+insert into t (id,a) values (800,97);
+insert into t (id,a) values (800,98);
+insert into t (id,a) values (800,99);
+insert into t (id,a) values (801,0);
+insert into t (id,a) values (801,1);
+insert into t (id,a) values (801,2);
+insert into t (id,a) values (801,3);
+insert into t (id,a) values (801,4);
+insert into t (id,a) values (801,5);
+insert into t (id,a) values (801,6);
+insert into t (id,a) values (801,7);
+insert into t (id,a) values (801,8);
+insert into t (id,a) values (801,9);
+insert into t (id,a) values (801,10);
+insert into t (id,a) values (801,11);
+insert into t (id,a) values (801,12);
+insert into t (id,a) values (801,13);
+insert into t (id,a) values (801,14);
+insert into t (id,a) values (801,15);
+insert into t (id,a) values (801,16);
+insert into t (id,a) values (801,17);
+insert into t (id,a) values (801,18);
+insert into t (id,a) values (801,19);
+insert into t (id,a) values (801,20);
+insert into t (id,a) values (801,21);
+insert into t (id,a) values (801,22);
+insert into t (id,a) values (801,23);
+insert into t (id,a) values (801,24);
+insert into t (id,a) values (801,25);
+insert into t (id,a) values (801,26);
+insert into t (id,a) values (801,27);
+insert into t (id,a) values (801,28);
+insert into t (id,a) values (801,29);
+insert into t (id,a) values (801,30);
+insert into t (id,a) values (801,31);
+insert into t (id,a) values (801,32);
+insert into t (id,a) values (801,33);
+insert into t (id,a) values (801,34);
+insert into t (id,a) values (801,35);
+insert into t (id,a) values (801,36);
+insert into t (id,a) values (801,37);
+insert into t (id,a) values (801,38);
+insert into t (id,a) values (801,39);
+insert into t (id,a) values (801,40);
+insert into t (id,a) values (801,41);
+insert into t (id,a) values (801,42);
+insert into t (id,a) values (801,43);
+insert into t (id,a) values (801,44);
+insert into t (id,a) values (801,45);
+insert into t (id,a) values (801,46);
+insert into t (id,a) values (801,47);
+insert into t (id,a) values (801,48);
+insert into t (id,a) values (801,49);
+insert into t (id,a) values (801,50);
+insert into t (id,a) values (801,51);
+insert into t (id,a) values (801,52);
+insert into t (id,a) values (801,53);
+insert into t (id,a) values (801,54);
+insert into t (id,a) values (801,55);
+insert into t (id,a) values (801,56);
+insert into t (id,a) values (801,57);
+insert into t (id,a) values (801,58);
+insert into t (id,a) values (801,59);
+insert into t (id,a) values (801,60);
+insert into t (id,a) values (801,61);
+insert into t (id,a) values (801,62);
+insert into t (id,a) values (801,63);
+insert into t (id,a) values (801,64);
+insert into t (id,a) values (801,65);
+insert into t (id,a) values (801,66);
+insert into t (id,a) values (801,67);
+insert into t (id,a) values (801,68);
+insert into t (id,a) values (801,69);
+insert into t (id,a) values (801,70);
+insert into t (id,a) values (801,71);
+insert into t (id,a) values (801,72);
+insert into t (id,a) values (801,73);
+insert into t (id,a) values (801,74);
+insert into t (id,a) values (801,75);
+insert into t (id,a) values (801,76);
+insert into t (id,a) values (801,77);
+insert into t (id,a) values (801,78);
+insert into t (id,a) values (801,79);
+insert into t (id,a) values (801,80);
+insert into t (id,a) values (801,81);
+insert into t (id,a) values (801,82);
+insert into t (id,a) values (801,83);
+insert into t (id,a) values (801,84);
+insert into t (id,a) values (801,85);
+insert into t (id,a) values (801,86);
+insert into t (id,a) values (801,87);
+insert into t (id,a) values (801,88);
+insert into t (id,a) values (801,89);
+insert into t (id,a) values (801,90);
+insert into t (id,a) values (801,91);
+insert into t (id,a) values (801,92);
+insert into t (id,a) values (801,93);
+insert into t (id,a) values (801,94);
+insert into t (id,a) values (801,95);
+insert into t (id,a) values (801,96);
+insert into t (id,a) values (801,97);
+insert into t (id,a) values (801,98);
+insert into t (id,a) values (801,99);
+insert into t (id,a) values (802,0);
+insert into t (id,a) values (802,1);
+insert into t (id,a) values (802,2);
+insert into t (id,a) values (802,3);
+insert into t (id,a) values (802,4);
+insert into t (id,a) values (802,5);
+insert into t (id,a) values (802,6);
+insert into t (id,a) values (802,7);
+insert into t (id,a) values (802,8);
+insert into t (id,a) values (802,9);
+insert into t (id,a) values (802,10);
+insert into t (id,a) values (802,11);
+insert into t (id,a) values (802,12);
+insert into t (id,a) values (802,13);
+insert into t (id,a) values (802,14);
+insert into t (id,a) values (802,15);
+insert into t (id,a) values (802,16);
+insert into t (id,a) values (802,17);
+insert into t (id,a) values (802,18);
+insert into t (id,a) values (802,19);
+insert into t (id,a) values (802,20);
+insert into t (id,a) values (802,21);
+insert into t (id,a) values (802,22);
+insert into t (id,a) values (802,23);
+insert into t (id,a) values (802,24);
+insert into t (id,a) values (802,25);
+insert into t (id,a) values (802,26);
+insert into t (id,a) values (802,27);
+insert into t (id,a) values (802,28);
+insert into t (id,a) values (802,29);
+insert into t (id,a) values (802,30);
+insert into t (id,a) values (802,31);
+insert into t (id,a) values (802,32);
+insert into t (id,a) values (802,33);
+insert into t (id,a) values (802,34);
+insert into t (id,a) values (802,35);
+insert into t (id,a) values (802,36);
+insert into t (id,a) values (802,37);
+insert into t (id,a) values (802,38);
+insert into t (id,a) values (802,39);
+insert into t (id,a) values (802,40);
+insert into t (id,a) values (802,41);
+insert into t (id,a) values (802,42);
+insert into t (id,a) values (802,43);
+insert into t (id,a) values (802,44);
+insert into t (id,a) values (802,45);
+insert into t (id,a) values (802,46);
+insert into t (id,a) values (802,47);
+insert into t (id,a) values (802,48);
+insert into t (id,a) values (802,49);
+insert into t (id,a) values (802,50);
+insert into t (id,a) values (802,51);
+insert into t (id,a) values (802,52);
+insert into t (id,a) values (802,53);
+insert into t (id,a) values (802,54);
+insert into t (id,a) values (802,55);
+insert into t (id,a) values (802,56);
+insert into t (id,a) values (802,57);
+insert into t (id,a) values (802,58);
+insert into t (id,a) values (802,59);
+insert into t (id,a) values (802,60);
+insert into t (id,a) values (802,61);
+insert into t (id,a) values (802,62);
+insert into t (id,a) values (802,63);
+insert into t (id,a) values (802,64);
+insert into t (id,a) values (802,65);
+insert into t (id,a) values (802,66);
+insert into t (id,a) values (802,67);
+insert into t (id,a) values (802,68);
+insert into t (id,a) values (802,69);
+insert into t (id,a) values (802,70);
+insert into t (id,a) values (802,71);
+insert into t (id,a) values (802,72);
+insert into t (id,a) values (802,73);
+insert into t (id,a) values (802,74);
+insert into t (id,a) values (802,75);
+insert into t (id,a) values (802,76);
+insert into t (id,a) values (802,77);
+insert into t (id,a) values (802,78);
+insert into t (id,a) values (802,79);
+insert into t (id,a) values (802,80);
+insert into t (id,a) values (802,81);
+insert into t (id,a) values (802,82);
+insert into t (id,a) values (802,83);
+insert into t (id,a) values (802,84);
+insert into t (id,a) values (802,85);
+insert into t (id,a) values (802,86);
+insert into t (id,a) values (802,87);
+insert into t (id,a) values (802,88);
+insert into t (id,a) values (802,89);
+insert into t (id,a) values (802,90);
+insert into t (id,a) values (802,91);
+insert into t (id,a) values (802,92);
+insert into t (id,a) values (802,93);
+insert into t (id,a) values (802,94);
+insert into t (id,a) values (802,95);
+insert into t (id,a) values (802,96);
+insert into t (id,a) values (802,97);
+insert into t (id,a) values (802,98);
+insert into t (id,a) values (802,99);
+insert into t (id,a) values (803,0);
+insert into t (id,a) values (803,1);
+insert into t (id,a) values (803,2);
+insert into t (id,a) values (803,3);
+insert into t (id,a) values (803,4);
+insert into t (id,a) values (803,5);
+insert into t (id,a) values (803,6);
+insert into t (id,a) values (803,7);
+insert into t (id,a) values (803,8);
+insert into t (id,a) values (803,9);
+insert into t (id,a) values (803,10);
+insert into t (id,a) values (803,11);
+insert into t (id,a) values (803,12);
+insert into t (id,a) values (803,13);
+insert into t (id,a) values (803,14);
+insert into t (id,a) values (803,15);
+insert into t (id,a) values (803,16);
+insert into t (id,a) values (803,17);
+insert into t (id,a) values (803,18);
+insert into t (id,a) values (803,19);
+insert into t (id,a) values (803,20);
+insert into t (id,a) values (803,21);
+insert into t (id,a) values (803,22);
+insert into t (id,a) values (803,23);
+insert into t (id,a) values (803,24);
+insert into t (id,a) values (803,25);
+insert into t (id,a) values (803,26);
+insert into t (id,a) values (803,27);
+insert into t (id,a) values (803,28);
+insert into t (id,a) values (803,29);
+insert into t (id,a) values (803,30);
+insert into t (id,a) values (803,31);
+insert into t (id,a) values (803,32);
+insert into t (id,a) values (803,33);
+insert into t (id,a) values (803,34);
+insert into t (id,a) values (803,35);
+insert into t (id,a) values (803,36);
+insert into t (id,a) values (803,37);
+insert into t (id,a) values (803,38);
+insert into t (id,a) values (803,39);
+insert into t (id,a) values (803,40);
+insert into t (id,a) values (803,41);
+insert into t (id,a) values (803,42);
+insert into t (id,a) values (803,43);
+insert into t (id,a) values (803,44);
+insert into t (id,a) values (803,45);
+insert into t (id,a) values (803,46);
+insert into t (id,a) values (803,47);
+insert into t (id,a) values (803,48);
+insert into t (id,a) values (803,49);
+insert into t (id,a) values (803,50);
+insert into t (id,a) values (803,51);
+insert into t (id,a) values (803,52);
+insert into t (id,a) values (803,53);
+insert into t (id,a) values (803,54);
+insert into t (id,a) values (803,55);
+insert into t (id,a) values (803,56);
+insert into t (id,a) values (803,57);
+insert into t (id,a) values (803,58);
+insert into t (id,a) values (803,59);
+insert into t (id,a) values (803,60);
+insert into t (id,a) values (803,61);
+insert into t (id,a) values (803,62);
+insert into t (id,a) values (803,63);
+insert into t (id,a) values (803,64);
+insert into t (id,a) values (803,65);
+insert into t (id,a) values (803,66);
+insert into t (id,a) values (803,67);
+insert into t (id,a) values (803,68);
+insert into t (id,a) values (803,69);
+insert into t (id,a) values (803,70);
+insert into t (id,a) values (803,71);
+insert into t (id,a) values (803,72);
+insert into t (id,a) values (803,73);
+insert into t (id,a) values (803,74);
+insert into t (id,a) values (803,75);
+insert into t (id,a) values (803,76);
+insert into t (id,a) values (803,77);
+insert into t (id,a) values (803,78);
+insert into t (id,a) values (803,79);
+insert into t (id,a) values (803,80);
+insert into t (id,a) values (803,81);
+insert into t (id,a) values (803,82);
+insert into t (id,a) values (803,83);
+insert into t (id,a) values (803,84);
+insert into t (id,a) values (803,85);
+insert into t (id,a) values (803,86);
+insert into t (id,a) values (803,87);
+insert into t (id,a) values (803,88);
+insert into t (id,a) values (803,89);
+insert into t (id,a) values (803,90);
+insert into t (id,a) values (803,91);
+insert into t (id,a) values (803,92);
+insert into t (id,a) values (803,93);
+insert into t (id,a) values (803,94);
+insert into t (id,a) values (803,95);
+insert into t (id,a) values (803,96);
+insert into t (id,a) values (803,97);
+insert into t (id,a) values (803,98);
+insert into t (id,a) values (803,99);
+insert into t (id,a) values (804,0);
+insert into t (id,a) values (804,1);
+insert into t (id,a) values (804,2);
+insert into t (id,a) values (804,3);
+insert into t (id,a) values (804,4);
+insert into t (id,a) values (804,5);
+insert into t (id,a) values (804,6);
+insert into t (id,a) values (804,7);
+insert into t (id,a) values (804,8);
+insert into t (id,a) values (804,9);
+insert into t (id,a) values (804,10);
+insert into t (id,a) values (804,11);
+insert into t (id,a) values (804,12);
+insert into t (id,a) values (804,13);
+insert into t (id,a) values (804,14);
+insert into t (id,a) values (804,15);
+insert into t (id,a) values (804,16);
+insert into t (id,a) values (804,17);
+insert into t (id,a) values (804,18);
+insert into t (id,a) values (804,19);
+insert into t (id,a) values (804,20);
+insert into t (id,a) values (804,21);
+insert into t (id,a) values (804,22);
+insert into t (id,a) values (804,23);
+insert into t (id,a) values (804,24);
+insert into t (id,a) values (804,25);
+insert into t (id,a) values (804,26);
+insert into t (id,a) values (804,27);
+insert into t (id,a) values (804,28);
+insert into t (id,a) values (804,29);
+insert into t (id,a) values (804,30);
+insert into t (id,a) values (804,31);
+insert into t (id,a) values (804,32);
+insert into t (id,a) values (804,33);
+insert into t (id,a) values (804,34);
+insert into t (id,a) values (804,35);
+insert into t (id,a) values (804,36);
+insert into t (id,a) values (804,37);
+insert into t (id,a) values (804,38);
+insert into t (id,a) values (804,39);
+insert into t (id,a) values (804,40);
+insert into t (id,a) values (804,41);
+insert into t (id,a) values (804,42);
+insert into t (id,a) values (804,43);
+insert into t (id,a) values (804,44);
+insert into t (id,a) values (804,45);
+insert into t (id,a) values (804,46);
+insert into t (id,a) values (804,47);
+insert into t (id,a) values (804,48);
+insert into t (id,a) values (804,49);
+insert into t (id,a) values (804,50);
+insert into t (id,a) values (804,51);
+insert into t (id,a) values (804,52);
+insert into t (id,a) values (804,53);
+insert into t (id,a) values (804,54);
+insert into t (id,a) values (804,55);
+insert into t (id,a) values (804,56);
+insert into t (id,a) values (804,57);
+insert into t (id,a) values (804,58);
+insert into t (id,a) values (804,59);
+insert into t (id,a) values (804,60);
+insert into t (id,a) values (804,61);
+insert into t (id,a) values (804,62);
+insert into t (id,a) values (804,63);
+insert into t (id,a) values (804,64);
+insert into t (id,a) values (804,65);
+insert into t (id,a) values (804,66);
+insert into t (id,a) values (804,67);
+insert into t (id,a) values (804,68);
+insert into t (id,a) values (804,69);
+insert into t (id,a) values (804,70);
+insert into t (id,a) values (804,71);
+insert into t (id,a) values (804,72);
+insert into t (id,a) values (804,73);
+insert into t (id,a) values (804,74);
+insert into t (id,a) values (804,75);
+insert into t (id,a) values (804,76);
+insert into t (id,a) values (804,77);
+insert into t (id,a) values (804,78);
+insert into t (id,a) values (804,79);
+insert into t (id,a) values (804,80);
+insert into t (id,a) values (804,81);
+insert into t (id,a) values (804,82);
+insert into t (id,a) values (804,83);
+insert into t (id,a) values (804,84);
+insert into t (id,a) values (804,85);
+insert into t (id,a) values (804,86);
+insert into t (id,a) values (804,87);
+insert into t (id,a) values (804,88);
+insert into t (id,a) values (804,89);
+insert into t (id,a) values (804,90);
+insert into t (id,a) values (804,91);
+insert into t (id,a) values (804,92);
+insert into t (id,a) values (804,93);
+insert into t (id,a) values (804,94);
+insert into t (id,a) values (804,95);
+insert into t (id,a) values (804,96);
+insert into t (id,a) values (804,97);
+insert into t (id,a) values (804,98);
+insert into t (id,a) values (804,99);
+insert into t (id,a) values (805,0);
+insert into t (id,a) values (805,1);
+insert into t (id,a) values (805,2);
+insert into t (id,a) values (805,3);
+insert into t (id,a) values (805,4);
+insert into t (id,a) values (805,5);
+insert into t (id,a) values (805,6);
+insert into t (id,a) values (805,7);
+insert into t (id,a) values (805,8);
+insert into t (id,a) values (805,9);
+insert into t (id,a) values (805,10);
+insert into t (id,a) values (805,11);
+insert into t (id,a) values (805,12);
+insert into t (id,a) values (805,13);
+insert into t (id,a) values (805,14);
+insert into t (id,a) values (805,15);
+insert into t (id,a) values (805,16);
+insert into t (id,a) values (805,17);
+insert into t (id,a) values (805,18);
+insert into t (id,a) values (805,19);
+insert into t (id,a) values (805,20);
+insert into t (id,a) values (805,21);
+insert into t (id,a) values (805,22);
+insert into t (id,a) values (805,23);
+insert into t (id,a) values (805,24);
+insert into t (id,a) values (805,25);
+insert into t (id,a) values (805,26);
+insert into t (id,a) values (805,27);
+insert into t (id,a) values (805,28);
+insert into t (id,a) values (805,29);
+insert into t (id,a) values (805,30);
+insert into t (id,a) values (805,31);
+insert into t (id,a) values (805,32);
+insert into t (id,a) values (805,33);
+insert into t (id,a) values (805,34);
+insert into t (id,a) values (805,35);
+insert into t (id,a) values (805,36);
+insert into t (id,a) values (805,37);
+insert into t (id,a) values (805,38);
+insert into t (id,a) values (805,39);
+insert into t (id,a) values (805,40);
+insert into t (id,a) values (805,41);
+insert into t (id,a) values (805,42);
+insert into t (id,a) values (805,43);
+insert into t (id,a) values (805,44);
+insert into t (id,a) values (805,45);
+insert into t (id,a) values (805,46);
+insert into t (id,a) values (805,47);
+insert into t (id,a) values (805,48);
+insert into t (id,a) values (805,49);
+insert into t (id,a) values (805,50);
+insert into t (id,a) values (805,51);
+insert into t (id,a) values (805,52);
+insert into t (id,a) values (805,53);
+insert into t (id,a) values (805,54);
+insert into t (id,a) values (805,55);
+insert into t (id,a) values (805,56);
+insert into t (id,a) values (805,57);
+insert into t (id,a) values (805,58);
+insert into t (id,a) values (805,59);
+insert into t (id,a) values (805,60);
+insert into t (id,a) values (805,61);
+insert into t (id,a) values (805,62);
+insert into t (id,a) values (805,63);
+insert into t (id,a) values (805,64);
+insert into t (id,a) values (805,65);
+insert into t (id,a) values (805,66);
+insert into t (id,a) values (805,67);
+insert into t (id,a) values (805,68);
+insert into t (id,a) values (805,69);
+insert into t (id,a) values (805,70);
+insert into t (id,a) values (805,71);
+insert into t (id,a) values (805,72);
+insert into t (id,a) values (805,73);
+insert into t (id,a) values (805,74);
+insert into t (id,a) values (805,75);
+insert into t (id,a) values (805,76);
+insert into t (id,a) values (805,77);
+insert into t (id,a) values (805,78);
+insert into t (id,a) values (805,79);
+insert into t (id,a) values (805,80);
+insert into t (id,a) values (805,81);
+insert into t (id,a) values (805,82);
+insert into t (id,a) values (805,83);
+insert into t (id,a) values (805,84);
+insert into t (id,a) values (805,85);
+insert into t (id,a) values (805,86);
+insert into t (id,a) values (805,87);
+insert into t (id,a) values (805,88);
+insert into t (id,a) values (805,89);
+insert into t (id,a) values (805,90);
+insert into t (id,a) values (805,91);
+insert into t (id,a) values (805,92);
+insert into t (id,a) values (805,93);
+insert into t (id,a) values (805,94);
+insert into t (id,a) values (805,95);
+insert into t (id,a) values (805,96);
+insert into t (id,a) values (805,97);
+insert into t (id,a) values (805,98);
+insert into t (id,a) values (805,99);
+insert into t (id,a) values (806,0);
+insert into t (id,a) values (806,1);
+insert into t (id,a) values (806,2);
+insert into t (id,a) values (806,3);
+insert into t (id,a) values (806,4);
+insert into t (id,a) values (806,5);
+insert into t (id,a) values (806,6);
+insert into t (id,a) values (806,7);
+insert into t (id,a) values (806,8);
+insert into t (id,a) values (806,9);
+insert into t (id,a) values (806,10);
+insert into t (id,a) values (806,11);
+insert into t (id,a) values (806,12);
+insert into t (id,a) values (806,13);
+insert into t (id,a) values (806,14);
+insert into t (id,a) values (806,15);
+insert into t (id,a) values (806,16);
+insert into t (id,a) values (806,17);
+insert into t (id,a) values (806,18);
+insert into t (id,a) values (806,19);
+insert into t (id,a) values (806,20);
+insert into t (id,a) values (806,21);
+insert into t (id,a) values (806,22);
+insert into t (id,a) values (806,23);
+insert into t (id,a) values (806,24);
+insert into t (id,a) values (806,25);
+insert into t (id,a) values (806,26);
+insert into t (id,a) values (806,27);
+insert into t (id,a) values (806,28);
+insert into t (id,a) values (806,29);
+insert into t (id,a) values (806,30);
+insert into t (id,a) values (806,31);
+insert into t (id,a) values (806,32);
+insert into t (id,a) values (806,33);
+insert into t (id,a) values (806,34);
+insert into t (id,a) values (806,35);
+insert into t (id,a) values (806,36);
+insert into t (id,a) values (806,37);
+insert into t (id,a) values (806,38);
+insert into t (id,a) values (806,39);
+insert into t (id,a) values (806,40);
+insert into t (id,a) values (806,41);
+insert into t (id,a) values (806,42);
+insert into t (id,a) values (806,43);
+insert into t (id,a) values (806,44);
+insert into t (id,a) values (806,45);
+insert into t (id,a) values (806,46);
+insert into t (id,a) values (806,47);
+insert into t (id,a) values (806,48);
+insert into t (id,a) values (806,49);
+insert into t (id,a) values (806,50);
+insert into t (id,a) values (806,51);
+insert into t (id,a) values (806,52);
+insert into t (id,a) values (806,53);
+insert into t (id,a) values (806,54);
+insert into t (id,a) values (806,55);
+insert into t (id,a) values (806,56);
+insert into t (id,a) values (806,57);
+insert into t (id,a) values (806,58);
+insert into t (id,a) values (806,59);
+insert into t (id,a) values (806,60);
+insert into t (id,a) values (806,61);
+insert into t (id,a) values (806,62);
+insert into t (id,a) values (806,63);
+insert into t (id,a) values (806,64);
+insert into t (id,a) values (806,65);
+insert into t (id,a) values (806,66);
+insert into t (id,a) values (806,67);
+insert into t (id,a) values (806,68);
+insert into t (id,a) values (806,69);
+insert into t (id,a) values (806,70);
+insert into t (id,a) values (806,71);
+insert into t (id,a) values (806,72);
+insert into t (id,a) values (806,73);
+insert into t (id,a) values (806,74);
+insert into t (id,a) values (806,75);
+insert into t (id,a) values (806,76);
+insert into t (id,a) values (806,77);
+insert into t (id,a) values (806,78);
+insert into t (id,a) values (806,79);
+insert into t (id,a) values (806,80);
+insert into t (id,a) values (806,81);
+insert into t (id,a) values (806,82);
+insert into t (id,a) values (806,83);
+insert into t (id,a) values (806,84);
+insert into t (id,a) values (806,85);
+insert into t (id,a) values (806,86);
+insert into t (id,a) values (806,87);
+insert into t (id,a) values (806,88);
+insert into t (id,a) values (806,89);
+insert into t (id,a) values (806,90);
+insert into t (id,a) values (806,91);
+insert into t (id,a) values (806,92);
+insert into t (id,a) values (806,93);
+insert into t (id,a) values (806,94);
+insert into t (id,a) values (806,95);
+insert into t (id,a) values (806,96);
+insert into t (id,a) values (806,97);
+insert into t (id,a) values (806,98);
+insert into t (id,a) values (806,99);
+insert into t (id,a) values (807,0);
+insert into t (id,a) values (807,1);
+insert into t (id,a) values (807,2);
+insert into t (id,a) values (807,3);
+insert into t (id,a) values (807,4);
+insert into t (id,a) values (807,5);
+insert into t (id,a) values (807,6);
+insert into t (id,a) values (807,7);
+insert into t (id,a) values (807,8);
+insert into t (id,a) values (807,9);
+insert into t (id,a) values (807,10);
+insert into t (id,a) values (807,11);
+insert into t (id,a) values (807,12);
+insert into t (id,a) values (807,13);
+insert into t (id,a) values (807,14);
+insert into t (id,a) values (807,15);
+insert into t (id,a) values (807,16);
+insert into t (id,a) values (807,17);
+insert into t (id,a) values (807,18);
+insert into t (id,a) values (807,19);
+insert into t (id,a) values (807,20);
+insert into t (id,a) values (807,21);
+insert into t (id,a) values (807,22);
+insert into t (id,a) values (807,23);
+insert into t (id,a) values (807,24);
+insert into t (id,a) values (807,25);
+insert into t (id,a) values (807,26);
+insert into t (id,a) values (807,27);
+insert into t (id,a) values (807,28);
+insert into t (id,a) values (807,29);
+insert into t (id,a) values (807,30);
+insert into t (id,a) values (807,31);
+insert into t (id,a) values (807,32);
+insert into t (id,a) values (807,33);
+insert into t (id,a) values (807,34);
+insert into t (id,a) values (807,35);
+insert into t (id,a) values (807,36);
+insert into t (id,a) values (807,37);
+insert into t (id,a) values (807,38);
+insert into t (id,a) values (807,39);
+insert into t (id,a) values (807,40);
+insert into t (id,a) values (807,41);
+insert into t (id,a) values (807,42);
+insert into t (id,a) values (807,43);
+insert into t (id,a) values (807,44);
+insert into t (id,a) values (807,45);
+insert into t (id,a) values (807,46);
+insert into t (id,a) values (807,47);
+insert into t (id,a) values (807,48);
+insert into t (id,a) values (807,49);
+insert into t (id,a) values (807,50);
+insert into t (id,a) values (807,51);
+insert into t (id,a) values (807,52);
+insert into t (id,a) values (807,53);
+insert into t (id,a) values (807,54);
+insert into t (id,a) values (807,55);
+insert into t (id,a) values (807,56);
+insert into t (id,a) values (807,57);
+insert into t (id,a) values (807,58);
+insert into t (id,a) values (807,59);
+insert into t (id,a) values (807,60);
+insert into t (id,a) values (807,61);
+insert into t (id,a) values (807,62);
+insert into t (id,a) values (807,63);
+insert into t (id,a) values (807,64);
+insert into t (id,a) values (807,65);
+insert into t (id,a) values (807,66);
+insert into t (id,a) values (807,67);
+insert into t (id,a) values (807,68);
+insert into t (id,a) values (807,69);
+insert into t (id,a) values (807,70);
+insert into t (id,a) values (807,71);
+insert into t (id,a) values (807,72);
+insert into t (id,a) values (807,73);
+insert into t (id,a) values (807,74);
+insert into t (id,a) values (807,75);
+insert into t (id,a) values (807,76);
+insert into t (id,a) values (807,77);
+insert into t (id,a) values (807,78);
+insert into t (id,a) values (807,79);
+insert into t (id,a) values (807,80);
+insert into t (id,a) values (807,81);
+insert into t (id,a) values (807,82);
+insert into t (id,a) values (807,83);
+insert into t (id,a) values (807,84);
+insert into t (id,a) values (807,85);
+insert into t (id,a) values (807,86);
+insert into t (id,a) values (807,87);
+insert into t (id,a) values (807,88);
+insert into t (id,a) values (807,89);
+insert into t (id,a) values (807,90);
+insert into t (id,a) values (807,91);
+insert into t (id,a) values (807,92);
+insert into t (id,a) values (807,93);
+insert into t (id,a) values (807,94);
+insert into t (id,a) values (807,95);
+insert into t (id,a) values (807,96);
+insert into t (id,a) values (807,97);
+insert into t (id,a) values (807,98);
+insert into t (id,a) values (807,99);
+insert into t (id,a) values (808,0);
+insert into t (id,a) values (808,1);
+insert into t (id,a) values (808,2);
+insert into t (id,a) values (808,3);
+insert into t (id,a) values (808,4);
+insert into t (id,a) values (808,5);
+insert into t (id,a) values (808,6);
+insert into t (id,a) values (808,7);
+insert into t (id,a) values (808,8);
+insert into t (id,a) values (808,9);
+insert into t (id,a) values (808,10);
+insert into t (id,a) values (808,11);
+insert into t (id,a) values (808,12);
+insert into t (id,a) values (808,13);
+insert into t (id,a) values (808,14);
+insert into t (id,a) values (808,15);
+insert into t (id,a) values (808,16);
+insert into t (id,a) values (808,17);
+insert into t (id,a) values (808,18);
+insert into t (id,a) values (808,19);
+insert into t (id,a) values (808,20);
+insert into t (id,a) values (808,21);
+insert into t (id,a) values (808,22);
+insert into t (id,a) values (808,23);
+insert into t (id,a) values (808,24);
+insert into t (id,a) values (808,25);
+insert into t (id,a) values (808,26);
+insert into t (id,a) values (808,27);
+insert into t (id,a) values (808,28);
+insert into t (id,a) values (808,29);
+insert into t (id,a) values (808,30);
+insert into t (id,a) values (808,31);
+insert into t (id,a) values (808,32);
+insert into t (id,a) values (808,33);
+insert into t (id,a) values (808,34);
+insert into t (id,a) values (808,35);
+insert into t (id,a) values (808,36);
+insert into t (id,a) values (808,37);
+insert into t (id,a) values (808,38);
+insert into t (id,a) values (808,39);
+insert into t (id,a) values (808,40);
+insert into t (id,a) values (808,41);
+insert into t (id,a) values (808,42);
+insert into t (id,a) values (808,43);
+insert into t (id,a) values (808,44);
+insert into t (id,a) values (808,45);
+insert into t (id,a) values (808,46);
+insert into t (id,a) values (808,47);
+insert into t (id,a) values (808,48);
+insert into t (id,a) values (808,49);
+insert into t (id,a) values (808,50);
+insert into t (id,a) values (808,51);
+insert into t (id,a) values (808,52);
+insert into t (id,a) values (808,53);
+insert into t (id,a) values (808,54);
+insert into t (id,a) values (808,55);
+insert into t (id,a) values (808,56);
+insert into t (id,a) values (808,57);
+insert into t (id,a) values (808,58);
+insert into t (id,a) values (808,59);
+insert into t (id,a) values (808,60);
+insert into t (id,a) values (808,61);
+insert into t (id,a) values (808,62);
+insert into t (id,a) values (808,63);
+insert into t (id,a) values (808,64);
+insert into t (id,a) values (808,65);
+insert into t (id,a) values (808,66);
+insert into t (id,a) values (808,67);
+insert into t (id,a) values (808,68);
+insert into t (id,a) values (808,69);
+insert into t (id,a) values (808,70);
+insert into t (id,a) values (808,71);
+insert into t (id,a) values (808,72);
+insert into t (id,a) values (808,73);
+insert into t (id,a) values (808,74);
+insert into t (id,a) values (808,75);
+insert into t (id,a) values (808,76);
+insert into t (id,a) values (808,77);
+insert into t (id,a) values (808,78);
+insert into t (id,a) values (808,79);
+insert into t (id,a) values (808,80);
+insert into t (id,a) values (808,81);
+insert into t (id,a) values (808,82);
+insert into t (id,a) values (808,83);
+insert into t (id,a) values (808,84);
+insert into t (id,a) values (808,85);
+insert into t (id,a) values (808,86);
+insert into t (id,a) values (808,87);
+insert into t (id,a) values (808,88);
+insert into t (id,a) values (808,89);
+insert into t (id,a) values (808,90);
+insert into t (id,a) values (808,91);
+insert into t (id,a) values (808,92);
+insert into t (id,a) values (808,93);
+insert into t (id,a) values (808,94);
+insert into t (id,a) values (808,95);
+insert into t (id,a) values (808,96);
+insert into t (id,a) values (808,97);
+insert into t (id,a) values (808,98);
+insert into t (id,a) values (808,99);
+insert into t (id,a) values (809,0);
+insert into t (id,a) values (809,1);
+insert into t (id,a) values (809,2);
+insert into t (id,a) values (809,3);
+insert into t (id,a) values (809,4);
+insert into t (id,a) values (809,5);
+insert into t (id,a) values (809,6);
+insert into t (id,a) values (809,7);
+insert into t (id,a) values (809,8);
+insert into t (id,a) values (809,9);
+insert into t (id,a) values (809,10);
+insert into t (id,a) values (809,11);
+insert into t (id,a) values (809,12);
+insert into t (id,a) values (809,13);
+insert into t (id,a) values (809,14);
+insert into t (id,a) values (809,15);
+insert into t (id,a) values (809,16);
+insert into t (id,a) values (809,17);
+insert into t (id,a) values (809,18);
+insert into t (id,a) values (809,19);
+insert into t (id,a) values (809,20);
+insert into t (id,a) values (809,21);
+insert into t (id,a) values (809,22);
+insert into t (id,a) values (809,23);
+insert into t (id,a) values (809,24);
+insert into t (id,a) values (809,25);
+insert into t (id,a) values (809,26);
+insert into t (id,a) values (809,27);
+insert into t (id,a) values (809,28);
+insert into t (id,a) values (809,29);
+insert into t (id,a) values (809,30);
+insert into t (id,a) values (809,31);
+insert into t (id,a) values (809,32);
+insert into t (id,a) values (809,33);
+insert into t (id,a) values (809,34);
+insert into t (id,a) values (809,35);
+insert into t (id,a) values (809,36);
+insert into t (id,a) values (809,37);
+insert into t (id,a) values (809,38);
+insert into t (id,a) values (809,39);
+insert into t (id,a) values (809,40);
+insert into t (id,a) values (809,41);
+insert into t (id,a) values (809,42);
+insert into t (id,a) values (809,43);
+insert into t (id,a) values (809,44);
+insert into t (id,a) values (809,45);
+insert into t (id,a) values (809,46);
+insert into t (id,a) values (809,47);
+insert into t (id,a) values (809,48);
+insert into t (id,a) values (809,49);
+insert into t (id,a) values (809,50);
+insert into t (id,a) values (809,51);
+insert into t (id,a) values (809,52);
+insert into t (id,a) values (809,53);
+insert into t (id,a) values (809,54);
+insert into t (id,a) values (809,55);
+insert into t (id,a) values (809,56);
+insert into t (id,a) values (809,57);
+insert into t (id,a) values (809,58);
+insert into t (id,a) values (809,59);
+insert into t (id,a) values (809,60);
+insert into t (id,a) values (809,61);
+insert into t (id,a) values (809,62);
+insert into t (id,a) values (809,63);
+insert into t (id,a) values (809,64);
+insert into t (id,a) values (809,65);
+insert into t (id,a) values (809,66);
+insert into t (id,a) values (809,67);
+insert into t (id,a) values (809,68);
+insert into t (id,a) values (809,69);
+insert into t (id,a) values (809,70);
+insert into t (id,a) values (809,71);
+insert into t (id,a) values (809,72);
+insert into t (id,a) values (809,73);
+insert into t (id,a) values (809,74);
+insert into t (id,a) values (809,75);
+insert into t (id,a) values (809,76);
+insert into t (id,a) values (809,77);
+insert into t (id,a) values (809,78);
+insert into t (id,a) values (809,79);
+insert into t (id,a) values (809,80);
+insert into t (id,a) values (809,81);
+insert into t (id,a) values (809,82);
+insert into t (id,a) values (809,83);
+insert into t (id,a) values (809,84);
+insert into t (id,a) values (809,85);
+insert into t (id,a) values (809,86);
+insert into t (id,a) values (809,87);
+insert into t (id,a) values (809,88);
+insert into t (id,a) values (809,89);
+insert into t (id,a) values (809,90);
+insert into t (id,a) values (809,91);
+insert into t (id,a) values (809,92);
+insert into t (id,a) values (809,93);
+insert into t (id,a) values (809,94);
+insert into t (id,a) values (809,95);
+insert into t (id,a) values (809,96);
+insert into t (id,a) values (809,97);
+insert into t (id,a) values (809,98);
+insert into t (id,a) values (809,99);
+insert into t (id,a) values (810,0);
+insert into t (id,a) values (810,1);
+insert into t (id,a) values (810,2);
+insert into t (id,a) values (810,3);
+insert into t (id,a) values (810,4);
+insert into t (id,a) values (810,5);
+insert into t (id,a) values (810,6);
+insert into t (id,a) values (810,7);
+insert into t (id,a) values (810,8);
+insert into t (id,a) values (810,9);
+insert into t (id,a) values (810,10);
+insert into t (id,a) values (810,11);
+insert into t (id,a) values (810,12);
+insert into t (id,a) values (810,13);
+insert into t (id,a) values (810,14);
+insert into t (id,a) values (810,15);
+insert into t (id,a) values (810,16);
+insert into t (id,a) values (810,17);
+insert into t (id,a) values (810,18);
+insert into t (id,a) values (810,19);
+insert into t (id,a) values (810,20);
+insert into t (id,a) values (810,21);
+insert into t (id,a) values (810,22);
+insert into t (id,a) values (810,23);
+insert into t (id,a) values (810,24);
+insert into t (id,a) values (810,25);
+insert into t (id,a) values (810,26);
+insert into t (id,a) values (810,27);
+insert into t (id,a) values (810,28);
+insert into t (id,a) values (810,29);
+insert into t (id,a) values (810,30);
+insert into t (id,a) values (810,31);
+insert into t (id,a) values (810,32);
+insert into t (id,a) values (810,33);
+insert into t (id,a) values (810,34);
+insert into t (id,a) values (810,35);
+insert into t (id,a) values (810,36);
+insert into t (id,a) values (810,37);
+insert into t (id,a) values (810,38);
+insert into t (id,a) values (810,39);
+insert into t (id,a) values (810,40);
+insert into t (id,a) values (810,41);
+insert into t (id,a) values (810,42);
+insert into t (id,a) values (810,43);
+insert into t (id,a) values (810,44);
+insert into t (id,a) values (810,45);
+insert into t (id,a) values (810,46);
+insert into t (id,a) values (810,47);
+insert into t (id,a) values (810,48);
+insert into t (id,a) values (810,49);
+insert into t (id,a) values (810,50);
+insert into t (id,a) values (810,51);
+insert into t (id,a) values (810,52);
+insert into t (id,a) values (810,53);
+insert into t (id,a) values (810,54);
+insert into t (id,a) values (810,55);
+insert into t (id,a) values (810,56);
+insert into t (id,a) values (810,57);
+insert into t (id,a) values (810,58);
+insert into t (id,a) values (810,59);
+insert into t (id,a) values (810,60);
+insert into t (id,a) values (810,61);
+insert into t (id,a) values (810,62);
+insert into t (id,a) values (810,63);
+insert into t (id,a) values (810,64);
+insert into t (id,a) values (810,65);
+insert into t (id,a) values (810,66);
+insert into t (id,a) values (810,67);
+insert into t (id,a) values (810,68);
+insert into t (id,a) values (810,69);
+insert into t (id,a) values (810,70);
+insert into t (id,a) values (810,71);
+insert into t (id,a) values (810,72);
+insert into t (id,a) values (810,73);
+insert into t (id,a) values (810,74);
+insert into t (id,a) values (810,75);
+insert into t (id,a) values (810,76);
+insert into t (id,a) values (810,77);
+insert into t (id,a) values (810,78);
+insert into t (id,a) values (810,79);
+insert into t (id,a) values (810,80);
+insert into t (id,a) values (810,81);
+insert into t (id,a) values (810,82);
+insert into t (id,a) values (810,83);
+insert into t (id,a) values (810,84);
+insert into t (id,a) values (810,85);
+insert into t (id,a) values (810,86);
+insert into t (id,a) values (810,87);
+insert into t (id,a) values (810,88);
+insert into t (id,a) values (810,89);
+insert into t (id,a) values (810,90);
+insert into t (id,a) values (810,91);
+insert into t (id,a) values (810,92);
+insert into t (id,a) values (810,93);
+insert into t (id,a) values (810,94);
+insert into t (id,a) values (810,95);
+insert into t (id,a) values (810,96);
+insert into t (id,a) values (810,97);
+insert into t (id,a) values (810,98);
+insert into t (id,a) values (810,99);
+insert into t (id,a) values (811,0);
+insert into t (id,a) values (811,1);
+insert into t (id,a) values (811,2);
+insert into t (id,a) values (811,3);
+insert into t (id,a) values (811,4);
+insert into t (id,a) values (811,5);
+insert into t (id,a) values (811,6);
+insert into t (id,a) values (811,7);
+insert into t (id,a) values (811,8);
+insert into t (id,a) values (811,9);
+insert into t (id,a) values (811,10);
+insert into t (id,a) values (811,11);
+insert into t (id,a) values (811,12);
+insert into t (id,a) values (811,13);
+insert into t (id,a) values (811,14);
+insert into t (id,a) values (811,15);
+insert into t (id,a) values (811,16);
+insert into t (id,a) values (811,17);
+insert into t (id,a) values (811,18);
+insert into t (id,a) values (811,19);
+insert into t (id,a) values (811,20);
+insert into t (id,a) values (811,21);
+insert into t (id,a) values (811,22);
+insert into t (id,a) values (811,23);
+insert into t (id,a) values (811,24);
+insert into t (id,a) values (811,25);
+insert into t (id,a) values (811,26);
+insert into t (id,a) values (811,27);
+insert into t (id,a) values (811,28);
+insert into t (id,a) values (811,29);
+insert into t (id,a) values (811,30);
+insert into t (id,a) values (811,31);
+insert into t (id,a) values (811,32);
+insert into t (id,a) values (811,33);
+insert into t (id,a) values (811,34);
+insert into t (id,a) values (811,35);
+insert into t (id,a) values (811,36);
+insert into t (id,a) values (811,37);
+insert into t (id,a) values (811,38);
+insert into t (id,a) values (811,39);
+insert into t (id,a) values (811,40);
+insert into t (id,a) values (811,41);
+insert into t (id,a) values (811,42);
+insert into t (id,a) values (811,43);
+insert into t (id,a) values (811,44);
+insert into t (id,a) values (811,45);
+insert into t (id,a) values (811,46);
+insert into t (id,a) values (811,47);
+insert into t (id,a) values (811,48);
+insert into t (id,a) values (811,49);
+insert into t (id,a) values (811,50);
+insert into t (id,a) values (811,51);
+insert into t (id,a) values (811,52);
+insert into t (id,a) values (811,53);
+insert into t (id,a) values (811,54);
+insert into t (id,a) values (811,55);
+insert into t (id,a) values (811,56);
+insert into t (id,a) values (811,57);
+insert into t (id,a) values (811,58);
+insert into t (id,a) values (811,59);
+insert into t (id,a) values (811,60);
+insert into t (id,a) values (811,61);
+insert into t (id,a) values (811,62);
+insert into t (id,a) values (811,63);
+insert into t (id,a) values (811,64);
+insert into t (id,a) values (811,65);
+insert into t (id,a) values (811,66);
+insert into t (id,a) values (811,67);
+insert into t (id,a) values (811,68);
+insert into t (id,a) values (811,69);
+insert into t (id,a) values (811,70);
+insert into t (id,a) values (811,71);
+insert into t (id,a) values (811,72);
+insert into t (id,a) values (811,73);
+insert into t (id,a) values (811,74);
+insert into t (id,a) values (811,75);
+insert into t (id,a) values (811,76);
+insert into t (id,a) values (811,77);
+insert into t (id,a) values (811,78);
+insert into t (id,a) values (811,79);
+insert into t (id,a) values (811,80);
+insert into t (id,a) values (811,81);
+insert into t (id,a) values (811,82);
+insert into t (id,a) values (811,83);
+insert into t (id,a) values (811,84);
+insert into t (id,a) values (811,85);
+insert into t (id,a) values (811,86);
+insert into t (id,a) values (811,87);
+insert into t (id,a) values (811,88);
+insert into t (id,a) values (811,89);
+insert into t (id,a) values (811,90);
+insert into t (id,a) values (811,91);
+insert into t (id,a) values (811,92);
+insert into t (id,a) values (811,93);
+insert into t (id,a) values (811,94);
+insert into t (id,a) values (811,95);
+insert into t (id,a) values (811,96);
+insert into t (id,a) values (811,97);
+insert into t (id,a) values (811,98);
+insert into t (id,a) values (811,99);
+insert into t (id,a) values (812,0);
+insert into t (id,a) values (812,1);
+insert into t (id,a) values (812,2);
+insert into t (id,a) values (812,3);
+insert into t (id,a) values (812,4);
+insert into t (id,a) values (812,5);
+insert into t (id,a) values (812,6);
+insert into t (id,a) values (812,7);
+insert into t (id,a) values (812,8);
+insert into t (id,a) values (812,9);
+insert into t (id,a) values (812,10);
+insert into t (id,a) values (812,11);
+insert into t (id,a) values (812,12);
+insert into t (id,a) values (812,13);
+insert into t (id,a) values (812,14);
+insert into t (id,a) values (812,15);
+insert into t (id,a) values (812,16);
+insert into t (id,a) values (812,17);
+insert into t (id,a) values (812,18);
+insert into t (id,a) values (812,19);
+insert into t (id,a) values (812,20);
+insert into t (id,a) values (812,21);
+insert into t (id,a) values (812,22);
+insert into t (id,a) values (812,23);
+insert into t (id,a) values (812,24);
+insert into t (id,a) values (812,25);
+insert into t (id,a) values (812,26);
+insert into t (id,a) values (812,27);
+insert into t (id,a) values (812,28);
+insert into t (id,a) values (812,29);
+insert into t (id,a) values (812,30);
+insert into t (id,a) values (812,31);
+insert into t (id,a) values (812,32);
+insert into t (id,a) values (812,33);
+insert into t (id,a) values (812,34);
+insert into t (id,a) values (812,35);
+insert into t (id,a) values (812,36);
+insert into t (id,a) values (812,37);
+insert into t (id,a) values (812,38);
+insert into t (id,a) values (812,39);
+insert into t (id,a) values (812,40);
+insert into t (id,a) values (812,41);
+insert into t (id,a) values (812,42);
+insert into t (id,a) values (812,43);
+insert into t (id,a) values (812,44);
+insert into t (id,a) values (812,45);
+insert into t (id,a) values (812,46);
+insert into t (id,a) values (812,47);
+insert into t (id,a) values (812,48);
+insert into t (id,a) values (812,49);
+insert into t (id,a) values (812,50);
+insert into t (id,a) values (812,51);
+insert into t (id,a) values (812,52);
+insert into t (id,a) values (812,53);
+insert into t (id,a) values (812,54);
+insert into t (id,a) values (812,55);
+insert into t (id,a) values (812,56);
+insert into t (id,a) values (812,57);
+insert into t (id,a) values (812,58);
+insert into t (id,a) values (812,59);
+insert into t (id,a) values (812,60);
+insert into t (id,a) values (812,61);
+insert into t (id,a) values (812,62);
+insert into t (id,a) values (812,63);
+insert into t (id,a) values (812,64);
+insert into t (id,a) values (812,65);
+insert into t (id,a) values (812,66);
+insert into t (id,a) values (812,67);
+insert into t (id,a) values (812,68);
+insert into t (id,a) values (812,69);
+insert into t (id,a) values (812,70);
+insert into t (id,a) values (812,71);
+insert into t (id,a) values (812,72);
+insert into t (id,a) values (812,73);
+insert into t (id,a) values (812,74);
+insert into t (id,a) values (812,75);
+insert into t (id,a) values (812,76);
+insert into t (id,a) values (812,77);
+insert into t (id,a) values (812,78);
+insert into t (id,a) values (812,79);
+insert into t (id,a) values (812,80);
+insert into t (id,a) values (812,81);
+insert into t (id,a) values (812,82);
+insert into t (id,a) values (812,83);
+insert into t (id,a) values (812,84);
+insert into t (id,a) values (812,85);
+insert into t (id,a) values (812,86);
+insert into t (id,a) values (812,87);
+insert into t (id,a) values (812,88);
+insert into t (id,a) values (812,89);
+insert into t (id,a) values (812,90);
+insert into t (id,a) values (812,91);
+insert into t (id,a) values (812,92);
+insert into t (id,a) values (812,93);
+insert into t (id,a) values (812,94);
+insert into t (id,a) values (812,95);
+insert into t (id,a) values (812,96);
+insert into t (id,a) values (812,97);
+insert into t (id,a) values (812,98);
+insert into t (id,a) values (812,99);
+insert into t (id,a) values (813,0);
+insert into t (id,a) values (813,1);
+insert into t (id,a) values (813,2);
+insert into t (id,a) values (813,3);
+insert into t (id,a) values (813,4);
+insert into t (id,a) values (813,5);
+insert into t (id,a) values (813,6);
+insert into t (id,a) values (813,7);
+insert into t (id,a) values (813,8);
+insert into t (id,a) values (813,9);
+insert into t (id,a) values (813,10);
+insert into t (id,a) values (813,11);
+insert into t (id,a) values (813,12);
+insert into t (id,a) values (813,13);
+insert into t (id,a) values (813,14);
+insert into t (id,a) values (813,15);
+insert into t (id,a) values (813,16);
+insert into t (id,a) values (813,17);
+insert into t (id,a) values (813,18);
+insert into t (id,a) values (813,19);
+insert into t (id,a) values (813,20);
+insert into t (id,a) values (813,21);
+insert into t (id,a) values (813,22);
+insert into t (id,a) values (813,23);
+insert into t (id,a) values (813,24);
+insert into t (id,a) values (813,25);
+insert into t (id,a) values (813,26);
+insert into t (id,a) values (813,27);
+insert into t (id,a) values (813,28);
+insert into t (id,a) values (813,29);
+insert into t (id,a) values (813,30);
+insert into t (id,a) values (813,31);
+insert into t (id,a) values (813,32);
+insert into t (id,a) values (813,33);
+insert into t (id,a) values (813,34);
+insert into t (id,a) values (813,35);
+insert into t (id,a) values (813,36);
+insert into t (id,a) values (813,37);
+insert into t (id,a) values (813,38);
+insert into t (id,a) values (813,39);
+insert into t (id,a) values (813,40);
+insert into t (id,a) values (813,41);
+insert into t (id,a) values (813,42);
+insert into t (id,a) values (813,43);
+insert into t (id,a) values (813,44);
+insert into t (id,a) values (813,45);
+insert into t (id,a) values (813,46);
+insert into t (id,a) values (813,47);
+insert into t (id,a) values (813,48);
+insert into t (id,a) values (813,49);
+insert into t (id,a) values (813,50);
+insert into t (id,a) values (813,51);
+insert into t (id,a) values (813,52);
+insert into t (id,a) values (813,53);
+insert into t (id,a) values (813,54);
+insert into t (id,a) values (813,55);
+insert into t (id,a) values (813,56);
+insert into t (id,a) values (813,57);
+insert into t (id,a) values (813,58);
+insert into t (id,a) values (813,59);
+insert into t (id,a) values (813,60);
+insert into t (id,a) values (813,61);
+insert into t (id,a) values (813,62);
+insert into t (id,a) values (813,63);
+insert into t (id,a) values (813,64);
+insert into t (id,a) values (813,65);
+insert into t (id,a) values (813,66);
+insert into t (id,a) values (813,67);
+insert into t (id,a) values (813,68);
+insert into t (id,a) values (813,69);
+insert into t (id,a) values (813,70);
+insert into t (id,a) values (813,71);
+insert into t (id,a) values (813,72);
+insert into t (id,a) values (813,73);
+insert into t (id,a) values (813,74);
+insert into t (id,a) values (813,75);
+insert into t (id,a) values (813,76);
+insert into t (id,a) values (813,77);
+insert into t (id,a) values (813,78);
+insert into t (id,a) values (813,79);
+insert into t (id,a) values (813,80);
+insert into t (id,a) values (813,81);
+insert into t (id,a) values (813,82);
+insert into t (id,a) values (813,83);
+insert into t (id,a) values (813,84);
+insert into t (id,a) values (813,85);
+insert into t (id,a) values (813,86);
+insert into t (id,a) values (813,87);
+insert into t (id,a) values (813,88);
+insert into t (id,a) values (813,89);
+insert into t (id,a) values (813,90);
+insert into t (id,a) values (813,91);
+insert into t (id,a) values (813,92);
+insert into t (id,a) values (813,93);
+insert into t (id,a) values (813,94);
+insert into t (id,a) values (813,95);
+insert into t (id,a) values (813,96);
+insert into t (id,a) values (813,97);
+insert into t (id,a) values (813,98);
+insert into t (id,a) values (813,99);
+insert into t (id,a) values (814,0);
+insert into t (id,a) values (814,1);
+insert into t (id,a) values (814,2);
+insert into t (id,a) values (814,3);
+insert into t (id,a) values (814,4);
+insert into t (id,a) values (814,5);
+insert into t (id,a) values (814,6);
+insert into t (id,a) values (814,7);
+insert into t (id,a) values (814,8);
+insert into t (id,a) values (814,9);
+insert into t (id,a) values (814,10);
+insert into t (id,a) values (814,11);
+insert into t (id,a) values (814,12);
+insert into t (id,a) values (814,13);
+insert into t (id,a) values (814,14);
+insert into t (id,a) values (814,15);
+insert into t (id,a) values (814,16);
+insert into t (id,a) values (814,17);
+insert into t (id,a) values (814,18);
+insert into t (id,a) values (814,19);
+insert into t (id,a) values (814,20);
+insert into t (id,a) values (814,21);
+insert into t (id,a) values (814,22);
+insert into t (id,a) values (814,23);
+insert into t (id,a) values (814,24);
+insert into t (id,a) values (814,25);
+insert into t (id,a) values (814,26);
+insert into t (id,a) values (814,27);
+insert into t (id,a) values (814,28);
+insert into t (id,a) values (814,29);
+insert into t (id,a) values (814,30);
+insert into t (id,a) values (814,31);
+insert into t (id,a) values (814,32);
+insert into t (id,a) values (814,33);
+insert into t (id,a) values (814,34);
+insert into t (id,a) values (814,35);
+insert into t (id,a) values (814,36);
+insert into t (id,a) values (814,37);
+insert into t (id,a) values (814,38);
+insert into t (id,a) values (814,39);
+insert into t (id,a) values (814,40);
+insert into t (id,a) values (814,41);
+insert into t (id,a) values (814,42);
+insert into t (id,a) values (814,43);
+insert into t (id,a) values (814,44);
+insert into t (id,a) values (814,45);
+insert into t (id,a) values (814,46);
+insert into t (id,a) values (814,47);
+insert into t (id,a) values (814,48);
+insert into t (id,a) values (814,49);
+insert into t (id,a) values (814,50);
+insert into t (id,a) values (814,51);
+insert into t (id,a) values (814,52);
+insert into t (id,a) values (814,53);
+insert into t (id,a) values (814,54);
+insert into t (id,a) values (814,55);
+insert into t (id,a) values (814,56);
+insert into t (id,a) values (814,57);
+insert into t (id,a) values (814,58);
+insert into t (id,a) values (814,59);
+insert into t (id,a) values (814,60);
+insert into t (id,a) values (814,61);
+insert into t (id,a) values (814,62);
+insert into t (id,a) values (814,63);
+insert into t (id,a) values (814,64);
+insert into t (id,a) values (814,65);
+insert into t (id,a) values (814,66);
+insert into t (id,a) values (814,67);
+insert into t (id,a) values (814,68);
+insert into t (id,a) values (814,69);
+insert into t (id,a) values (814,70);
+insert into t (id,a) values (814,71);
+insert into t (id,a) values (814,72);
+insert into t (id,a) values (814,73);
+insert into t (id,a) values (814,74);
+insert into t (id,a) values (814,75);
+insert into t (id,a) values (814,76);
+insert into t (id,a) values (814,77);
+insert into t (id,a) values (814,78);
+insert into t (id,a) values (814,79);
+insert into t (id,a) values (814,80);
+insert into t (id,a) values (814,81);
+insert into t (id,a) values (814,82);
+insert into t (id,a) values (814,83);
+insert into t (id,a) values (814,84);
+insert into t (id,a) values (814,85);
+insert into t (id,a) values (814,86);
+insert into t (id,a) values (814,87);
+insert into t (id,a) values (814,88);
+insert into t (id,a) values (814,89);
+insert into t (id,a) values (814,90);
+insert into t (id,a) values (814,91);
+insert into t (id,a) values (814,92);
+insert into t (id,a) values (814,93);
+insert into t (id,a) values (814,94);
+insert into t (id,a) values (814,95);
+insert into t (id,a) values (814,96);
+insert into t (id,a) values (814,97);
+insert into t (id,a) values (814,98);
+insert into t (id,a) values (814,99);
+insert into t (id,a) values (815,0);
+insert into t (id,a) values (815,1);
+insert into t (id,a) values (815,2);
+insert into t (id,a) values (815,3);
+insert into t (id,a) values (815,4);
+insert into t (id,a) values (815,5);
+insert into t (id,a) values (815,6);
+insert into t (id,a) values (815,7);
+insert into t (id,a) values (815,8);
+insert into t (id,a) values (815,9);
+insert into t (id,a) values (815,10);
+insert into t (id,a) values (815,11);
+insert into t (id,a) values (815,12);
+insert into t (id,a) values (815,13);
+insert into t (id,a) values (815,14);
+insert into t (id,a) values (815,15);
+insert into t (id,a) values (815,16);
+insert into t (id,a) values (815,17);
+insert into t (id,a) values (815,18);
+insert into t (id,a) values (815,19);
+insert into t (id,a) values (815,20);
+insert into t (id,a) values (815,21);
+insert into t (id,a) values (815,22);
+insert into t (id,a) values (815,23);
+insert into t (id,a) values (815,24);
+insert into t (id,a) values (815,25);
+insert into t (id,a) values (815,26);
+insert into t (id,a) values (815,27);
+insert into t (id,a) values (815,28);
+insert into t (id,a) values (815,29);
+insert into t (id,a) values (815,30);
+insert into t (id,a) values (815,31);
+insert into t (id,a) values (815,32);
+insert into t (id,a) values (815,33);
+insert into t (id,a) values (815,34);
+insert into t (id,a) values (815,35);
+insert into t (id,a) values (815,36);
+insert into t (id,a) values (815,37);
+insert into t (id,a) values (815,38);
+insert into t (id,a) values (815,39);
+insert into t (id,a) values (815,40);
+insert into t (id,a) values (815,41);
+insert into t (id,a) values (815,42);
+insert into t (id,a) values (815,43);
+insert into t (id,a) values (815,44);
+insert into t (id,a) values (815,45);
+insert into t (id,a) values (815,46);
+insert into t (id,a) values (815,47);
+insert into t (id,a) values (815,48);
+insert into t (id,a) values (815,49);
+insert into t (id,a) values (815,50);
+insert into t (id,a) values (815,51);
+insert into t (id,a) values (815,52);
+insert into t (id,a) values (815,53);
+insert into t (id,a) values (815,54);
+insert into t (id,a) values (815,55);
+insert into t (id,a) values (815,56);
+insert into t (id,a) values (815,57);
+insert into t (id,a) values (815,58);
+insert into t (id,a) values (815,59);
+insert into t (id,a) values (815,60);
+insert into t (id,a) values (815,61);
+insert into t (id,a) values (815,62);
+insert into t (id,a) values (815,63);
+insert into t (id,a) values (815,64);
+insert into t (id,a) values (815,65);
+insert into t (id,a) values (815,66);
+insert into t (id,a) values (815,67);
+insert into t (id,a) values (815,68);
+insert into t (id,a) values (815,69);
+insert into t (id,a) values (815,70);
+insert into t (id,a) values (815,71);
+insert into t (id,a) values (815,72);
+insert into t (id,a) values (815,73);
+insert into t (id,a) values (815,74);
+insert into t (id,a) values (815,75);
+insert into t (id,a) values (815,76);
+insert into t (id,a) values (815,77);
+insert into t (id,a) values (815,78);
+insert into t (id,a) values (815,79);
+insert into t (id,a) values (815,80);
+insert into t (id,a) values (815,81);
+insert into t (id,a) values (815,82);
+insert into t (id,a) values (815,83);
+insert into t (id,a) values (815,84);
+insert into t (id,a) values (815,85);
+insert into t (id,a) values (815,86);
+insert into t (id,a) values (815,87);
+insert into t (id,a) values (815,88);
+insert into t (id,a) values (815,89);
+insert into t (id,a) values (815,90);
+insert into t (id,a) values (815,91);
+insert into t (id,a) values (815,92);
+insert into t (id,a) values (815,93);
+insert into t (id,a) values (815,94);
+insert into t (id,a) values (815,95);
+insert into t (id,a) values (815,96);
+insert into t (id,a) values (815,97);
+insert into t (id,a) values (815,98);
+insert into t (id,a) values (815,99);
+insert into t (id,a) values (816,0);
+insert into t (id,a) values (816,1);
+insert into t (id,a) values (816,2);
+insert into t (id,a) values (816,3);
+insert into t (id,a) values (816,4);
+insert into t (id,a) values (816,5);
+insert into t (id,a) values (816,6);
+insert into t (id,a) values (816,7);
+insert into t (id,a) values (816,8);
+insert into t (id,a) values (816,9);
+insert into t (id,a) values (816,10);
+insert into t (id,a) values (816,11);
+insert into t (id,a) values (816,12);
+insert into t (id,a) values (816,13);
+insert into t (id,a) values (816,14);
+insert into t (id,a) values (816,15);
+insert into t (id,a) values (816,16);
+insert into t (id,a) values (816,17);
+insert into t (id,a) values (816,18);
+insert into t (id,a) values (816,19);
+insert into t (id,a) values (816,20);
+insert into t (id,a) values (816,21);
+insert into t (id,a) values (816,22);
+insert into t (id,a) values (816,23);
+insert into t (id,a) values (816,24);
+insert into t (id,a) values (816,25);
+insert into t (id,a) values (816,26);
+insert into t (id,a) values (816,27);
+insert into t (id,a) values (816,28);
+insert into t (id,a) values (816,29);
+insert into t (id,a) values (816,30);
+insert into t (id,a) values (816,31);
+insert into t (id,a) values (816,32);
+insert into t (id,a) values (816,33);
+insert into t (id,a) values (816,34);
+insert into t (id,a) values (816,35);
+insert into t (id,a) values (816,36);
+insert into t (id,a) values (816,37);
+insert into t (id,a) values (816,38);
+insert into t (id,a) values (816,39);
+insert into t (id,a) values (816,40);
+insert into t (id,a) values (816,41);
+insert into t (id,a) values (816,42);
+insert into t (id,a) values (816,43);
+insert into t (id,a) values (816,44);
+insert into t (id,a) values (816,45);
+insert into t (id,a) values (816,46);
+insert into t (id,a) values (816,47);
+insert into t (id,a) values (816,48);
+insert into t (id,a) values (816,49);
+insert into t (id,a) values (816,50);
+insert into t (id,a) values (816,51);
+insert into t (id,a) values (816,52);
+insert into t (id,a) values (816,53);
+insert into t (id,a) values (816,54);
+insert into t (id,a) values (816,55);
+insert into t (id,a) values (816,56);
+insert into t (id,a) values (816,57);
+insert into t (id,a) values (816,58);
+insert into t (id,a) values (816,59);
+insert into t (id,a) values (816,60);
+insert into t (id,a) values (816,61);
+insert into t (id,a) values (816,62);
+insert into t (id,a) values (816,63);
+insert into t (id,a) values (816,64);
+insert into t (id,a) values (816,65);
+insert into t (id,a) values (816,66);
+insert into t (id,a) values (816,67);
+insert into t (id,a) values (816,68);
+insert into t (id,a) values (816,69);
+insert into t (id,a) values (816,70);
+insert into t (id,a) values (816,71);
+insert into t (id,a) values (816,72);
+insert into t (id,a) values (816,73);
+insert into t (id,a) values (816,74);
+insert into t (id,a) values (816,75);
+insert into t (id,a) values (816,76);
+insert into t (id,a) values (816,77);
+insert into t (id,a) values (816,78);
+insert into t (id,a) values (816,79);
+insert into t (id,a) values (816,80);
+insert into t (id,a) values (816,81);
+insert into t (id,a) values (816,82);
+insert into t (id,a) values (816,83);
+insert into t (id,a) values (816,84);
+insert into t (id,a) values (816,85);
+insert into t (id,a) values (816,86);
+insert into t (id,a) values (816,87);
+insert into t (id,a) values (816,88);
+insert into t (id,a) values (816,89);
+insert into t (id,a) values (816,90);
+insert into t (id,a) values (816,91);
+insert into t (id,a) values (816,92);
+insert into t (id,a) values (816,93);
+insert into t (id,a) values (816,94);
+insert into t (id,a) values (816,95);
+insert into t (id,a) values (816,96);
+insert into t (id,a) values (816,97);
+insert into t (id,a) values (816,98);
+insert into t (id,a) values (816,99);
+insert into t (id,a) values (817,0);
+insert into t (id,a) values (817,1);
+insert into t (id,a) values (817,2);
+insert into t (id,a) values (817,3);
+insert into t (id,a) values (817,4);
+insert into t (id,a) values (817,5);
+insert into t (id,a) values (817,6);
+insert into t (id,a) values (817,7);
+insert into t (id,a) values (817,8);
+insert into t (id,a) values (817,9);
+insert into t (id,a) values (817,10);
+insert into t (id,a) values (817,11);
+insert into t (id,a) values (817,12);
+insert into t (id,a) values (817,13);
+insert into t (id,a) values (817,14);
+insert into t (id,a) values (817,15);
+insert into t (id,a) values (817,16);
+insert into t (id,a) values (817,17);
+insert into t (id,a) values (817,18);
+insert into t (id,a) values (817,19);
+insert into t (id,a) values (817,20);
+insert into t (id,a) values (817,21);
+insert into t (id,a) values (817,22);
+insert into t (id,a) values (817,23);
+insert into t (id,a) values (817,24);
+insert into t (id,a) values (817,25);
+insert into t (id,a) values (817,26);
+insert into t (id,a) values (817,27);
+insert into t (id,a) values (817,28);
+insert into t (id,a) values (817,29);
+insert into t (id,a) values (817,30);
+insert into t (id,a) values (817,31);
+insert into t (id,a) values (817,32);
+insert into t (id,a) values (817,33);
+insert into t (id,a) values (817,34);
+insert into t (id,a) values (817,35);
+insert into t (id,a) values (817,36);
+insert into t (id,a) values (817,37);
+insert into t (id,a) values (817,38);
+insert into t (id,a) values (817,39);
+insert into t (id,a) values (817,40);
+insert into t (id,a) values (817,41);
+insert into t (id,a) values (817,42);
+insert into t (id,a) values (817,43);
+insert into t (id,a) values (817,44);
+insert into t (id,a) values (817,45);
+insert into t (id,a) values (817,46);
+insert into t (id,a) values (817,47);
+insert into t (id,a) values (817,48);
+insert into t (id,a) values (817,49);
+insert into t (id,a) values (817,50);
+insert into t (id,a) values (817,51);
+insert into t (id,a) values (817,52);
+insert into t (id,a) values (817,53);
+insert into t (id,a) values (817,54);
+insert into t (id,a) values (817,55);
+insert into t (id,a) values (817,56);
+insert into t (id,a) values (817,57);
+insert into t (id,a) values (817,58);
+insert into t (id,a) values (817,59);
+insert into t (id,a) values (817,60);
+insert into t (id,a) values (817,61);
+insert into t (id,a) values (817,62);
+insert into t (id,a) values (817,63);
+insert into t (id,a) values (817,64);
+insert into t (id,a) values (817,65);
+insert into t (id,a) values (817,66);
+insert into t (id,a) values (817,67);
+insert into t (id,a) values (817,68);
+insert into t (id,a) values (817,69);
+insert into t (id,a) values (817,70);
+insert into t (id,a) values (817,71);
+insert into t (id,a) values (817,72);
+insert into t (id,a) values (817,73);
+insert into t (id,a) values (817,74);
+insert into t (id,a) values (817,75);
+insert into t (id,a) values (817,76);
+insert into t (id,a) values (817,77);
+insert into t (id,a) values (817,78);
+insert into t (id,a) values (817,79);
+insert into t (id,a) values (817,80);
+insert into t (id,a) values (817,81);
+insert into t (id,a) values (817,82);
+insert into t (id,a) values (817,83);
+insert into t (id,a) values (817,84);
+insert into t (id,a) values (817,85);
+insert into t (id,a) values (817,86);
+insert into t (id,a) values (817,87);
+insert into t (id,a) values (817,88);
+insert into t (id,a) values (817,89);
+insert into t (id,a) values (817,90);
+insert into t (id,a) values (817,91);
+insert into t (id,a) values (817,92);
+insert into t (id,a) values (817,93);
+insert into t (id,a) values (817,94);
+insert into t (id,a) values (817,95);
+insert into t (id,a) values (817,96);
+insert into t (id,a) values (817,97);
+insert into t (id,a) values (817,98);
+insert into t (id,a) values (817,99);
+insert into t (id,a) values (818,0);
+insert into t (id,a) values (818,1);
+insert into t (id,a) values (818,2);
+insert into t (id,a) values (818,3);
+insert into t (id,a) values (818,4);
+insert into t (id,a) values (818,5);
+insert into t (id,a) values (818,6);
+insert into t (id,a) values (818,7);
+insert into t (id,a) values (818,8);
+insert into t (id,a) values (818,9);
+insert into t (id,a) values (818,10);
+insert into t (id,a) values (818,11);
+insert into t (id,a) values (818,12);
+insert into t (id,a) values (818,13);
+insert into t (id,a) values (818,14);
+insert into t (id,a) values (818,15);
+insert into t (id,a) values (818,16);
+insert into t (id,a) values (818,17);
+insert into t (id,a) values (818,18);
+insert into t (id,a) values (818,19);
+insert into t (id,a) values (818,20);
+insert into t (id,a) values (818,21);
+insert into t (id,a) values (818,22);
+insert into t (id,a) values (818,23);
+insert into t (id,a) values (818,24);
+insert into t (id,a) values (818,25);
+insert into t (id,a) values (818,26);
+insert into t (id,a) values (818,27);
+insert into t (id,a) values (818,28);
+insert into t (id,a) values (818,29);
+insert into t (id,a) values (818,30);
+insert into t (id,a) values (818,31);
+insert into t (id,a) values (818,32);
+insert into t (id,a) values (818,33);
+insert into t (id,a) values (818,34);
+insert into t (id,a) values (818,35);
+insert into t (id,a) values (818,36);
+insert into t (id,a) values (818,37);
+insert into t (id,a) values (818,38);
+insert into t (id,a) values (818,39);
+insert into t (id,a) values (818,40);
+insert into t (id,a) values (818,41);
+insert into t (id,a) values (818,42);
+insert into t (id,a) values (818,43);
+insert into t (id,a) values (818,44);
+insert into t (id,a) values (818,45);
+insert into t (id,a) values (818,46);
+insert into t (id,a) values (818,47);
+insert into t (id,a) values (818,48);
+insert into t (id,a) values (818,49);
+insert into t (id,a) values (818,50);
+insert into t (id,a) values (818,51);
+insert into t (id,a) values (818,52);
+insert into t (id,a) values (818,53);
+insert into t (id,a) values (818,54);
+insert into t (id,a) values (818,55);
+insert into t (id,a) values (818,56);
+insert into t (id,a) values (818,57);
+insert into t (id,a) values (818,58);
+insert into t (id,a) values (818,59);
+insert into t (id,a) values (818,60);
+insert into t (id,a) values (818,61);
+insert into t (id,a) values (818,62);
+insert into t (id,a) values (818,63);
+insert into t (id,a) values (818,64);
+insert into t (id,a) values (818,65);
+insert into t (id,a) values (818,66);
+insert into t (id,a) values (818,67);
+insert into t (id,a) values (818,68);
+insert into t (id,a) values (818,69);
+insert into t (id,a) values (818,70);
+insert into t (id,a) values (818,71);
+insert into t (id,a) values (818,72);
+insert into t (id,a) values (818,73);
+insert into t (id,a) values (818,74);
+insert into t (id,a) values (818,75);
+insert into t (id,a) values (818,76);
+insert into t (id,a) values (818,77);
+insert into t (id,a) values (818,78);
+insert into t (id,a) values (818,79);
+insert into t (id,a) values (818,80);
+insert into t (id,a) values (818,81);
+insert into t (id,a) values (818,82);
+insert into t (id,a) values (818,83);
+insert into t (id,a) values (818,84);
+insert into t (id,a) values (818,85);
+insert into t (id,a) values (818,86);
+insert into t (id,a) values (818,87);
+insert into t (id,a) values (818,88);
+insert into t (id,a) values (818,89);
+insert into t (id,a) values (818,90);
+insert into t (id,a) values (818,91);
+insert into t (id,a) values (818,92);
+insert into t (id,a) values (818,93);
+insert into t (id,a) values (818,94);
+insert into t (id,a) values (818,95);
+insert into t (id,a) values (818,96);
+insert into t (id,a) values (818,97);
+insert into t (id,a) values (818,98);
+insert into t (id,a) values (818,99);
+insert into t (id,a) values (819,0);
+insert into t (id,a) values (819,1);
+insert into t (id,a) values (819,2);
+insert into t (id,a) values (819,3);
+insert into t (id,a) values (819,4);
+insert into t (id,a) values (819,5);
+insert into t (id,a) values (819,6);
+insert into t (id,a) values (819,7);
+insert into t (id,a) values (819,8);
+insert into t (id,a) values (819,9);
+insert into t (id,a) values (819,10);
+insert into t (id,a) values (819,11);
+insert into t (id,a) values (819,12);
+insert into t (id,a) values (819,13);
+insert into t (id,a) values (819,14);
+insert into t (id,a) values (819,15);
+insert into t (id,a) values (819,16);
+insert into t (id,a) values (819,17);
+insert into t (id,a) values (819,18);
+insert into t (id,a) values (819,19);
+insert into t (id,a) values (819,20);
+insert into t (id,a) values (819,21);
+insert into t (id,a) values (819,22);
+insert into t (id,a) values (819,23);
+insert into t (id,a) values (819,24);
+insert into t (id,a) values (819,25);
+insert into t (id,a) values (819,26);
+insert into t (id,a) values (819,27);
+insert into t (id,a) values (819,28);
+insert into t (id,a) values (819,29);
+insert into t (id,a) values (819,30);
+insert into t (id,a) values (819,31);
+insert into t (id,a) values (819,32);
+insert into t (id,a) values (819,33);
+insert into t (id,a) values (819,34);
+insert into t (id,a) values (819,35);
+insert into t (id,a) values (819,36);
+insert into t (id,a) values (819,37);
+insert into t (id,a) values (819,38);
+insert into t (id,a) values (819,39);
+insert into t (id,a) values (819,40);
+insert into t (id,a) values (819,41);
+insert into t (id,a) values (819,42);
+insert into t (id,a) values (819,43);
+insert into t (id,a) values (819,44);
+insert into t (id,a) values (819,45);
+insert into t (id,a) values (819,46);
+insert into t (id,a) values (819,47);
+insert into t (id,a) values (819,48);
+insert into t (id,a) values (819,49);
+insert into t (id,a) values (819,50);
+insert into t (id,a) values (819,51);
+insert into t (id,a) values (819,52);
+insert into t (id,a) values (819,53);
+insert into t (id,a) values (819,54);
+insert into t (id,a) values (819,55);
+insert into t (id,a) values (819,56);
+insert into t (id,a) values (819,57);
+insert into t (id,a) values (819,58);
+insert into t (id,a) values (819,59);
+insert into t (id,a) values (819,60);
+insert into t (id,a) values (819,61);
+insert into t (id,a) values (819,62);
+insert into t (id,a) values (819,63);
+insert into t (id,a) values (819,64);
+insert into t (id,a) values (819,65);
+insert into t (id,a) values (819,66);
+insert into t (id,a) values (819,67);
+insert into t (id,a) values (819,68);
+insert into t (id,a) values (819,69);
+insert into t (id,a) values (819,70);
+insert into t (id,a) values (819,71);
+insert into t (id,a) values (819,72);
+insert into t (id,a) values (819,73);
+insert into t (id,a) values (819,74);
+insert into t (id,a) values (819,75);
+insert into t (id,a) values (819,76);
+insert into t (id,a) values (819,77);
+insert into t (id,a) values (819,78);
+insert into t (id,a) values (819,79);
+insert into t (id,a) values (819,80);
+insert into t (id,a) values (819,81);
+insert into t (id,a) values (819,82);
+insert into t (id,a) values (819,83);
+insert into t (id,a) values (819,84);
+insert into t (id,a) values (819,85);
+insert into t (id,a) values (819,86);
+insert into t (id,a) values (819,87);
+insert into t (id,a) values (819,88);
+insert into t (id,a) values (819,89);
+insert into t (id,a) values (819,90);
+insert into t (id,a) values (819,91);
+insert into t (id,a) values (819,92);
+insert into t (id,a) values (819,93);
+insert into t (id,a) values (819,94);
+insert into t (id,a) values (819,95);
+insert into t (id,a) values (819,96);
+insert into t (id,a) values (819,97);
+insert into t (id,a) values (819,98);
+insert into t (id,a) values (819,99);
+insert into t (id,a) values (820,0);
+insert into t (id,a) values (820,1);
+insert into t (id,a) values (820,2);
+insert into t (id,a) values (820,3);
+insert into t (id,a) values (820,4);
+insert into t (id,a) values (820,5);
+insert into t (id,a) values (820,6);
+insert into t (id,a) values (820,7);
+insert into t (id,a) values (820,8);
+insert into t (id,a) values (820,9);
+insert into t (id,a) values (820,10);
+insert into t (id,a) values (820,11);
+insert into t (id,a) values (820,12);
+insert into t (id,a) values (820,13);
+insert into t (id,a) values (820,14);
+insert into t (id,a) values (820,15);
+insert into t (id,a) values (820,16);
+insert into t (id,a) values (820,17);
+insert into t (id,a) values (820,18);
+insert into t (id,a) values (820,19);
+insert into t (id,a) values (820,20);
+insert into t (id,a) values (820,21);
+insert into t (id,a) values (820,22);
+insert into t (id,a) values (820,23);
+insert into t (id,a) values (820,24);
+insert into t (id,a) values (820,25);
+insert into t (id,a) values (820,26);
+insert into t (id,a) values (820,27);
+insert into t (id,a) values (820,28);
+insert into t (id,a) values (820,29);
+insert into t (id,a) values (820,30);
+insert into t (id,a) values (820,31);
+insert into t (id,a) values (820,32);
+insert into t (id,a) values (820,33);
+insert into t (id,a) values (820,34);
+insert into t (id,a) values (820,35);
+insert into t (id,a) values (820,36);
+insert into t (id,a) values (820,37);
+insert into t (id,a) values (820,38);
+insert into t (id,a) values (820,39);
+insert into t (id,a) values (820,40);
+insert into t (id,a) values (820,41);
+insert into t (id,a) values (820,42);
+insert into t (id,a) values (820,43);
+insert into t (id,a) values (820,44);
+insert into t (id,a) values (820,45);
+insert into t (id,a) values (820,46);
+insert into t (id,a) values (820,47);
+insert into t (id,a) values (820,48);
+insert into t (id,a) values (820,49);
+insert into t (id,a) values (820,50);
+insert into t (id,a) values (820,51);
+insert into t (id,a) values (820,52);
+insert into t (id,a) values (820,53);
+insert into t (id,a) values (820,54);
+insert into t (id,a) values (820,55);
+insert into t (id,a) values (820,56);
+insert into t (id,a) values (820,57);
+insert into t (id,a) values (820,58);
+insert into t (id,a) values (820,59);
+insert into t (id,a) values (820,60);
+insert into t (id,a) values (820,61);
+insert into t (id,a) values (820,62);
+insert into t (id,a) values (820,63);
+insert into t (id,a) values (820,64);
+insert into t (id,a) values (820,65);
+insert into t (id,a) values (820,66);
+insert into t (id,a) values (820,67);
+insert into t (id,a) values (820,68);
+insert into t (id,a) values (820,69);
+insert into t (id,a) values (820,70);
+insert into t (id,a) values (820,71);
+insert into t (id,a) values (820,72);
+insert into t (id,a) values (820,73);
+insert into t (id,a) values (820,74);
+insert into t (id,a) values (820,75);
+insert into t (id,a) values (820,76);
+insert into t (id,a) values (820,77);
+insert into t (id,a) values (820,78);
+insert into t (id,a) values (820,79);
+insert into t (id,a) values (820,80);
+insert into t (id,a) values (820,81);
+insert into t (id,a) values (820,82);
+insert into t (id,a) values (820,83);
+insert into t (id,a) values (820,84);
+insert into t (id,a) values (820,85);
+insert into t (id,a) values (820,86);
+insert into t (id,a) values (820,87);
+insert into t (id,a) values (820,88);
+insert into t (id,a) values (820,89);
+insert into t (id,a) values (820,90);
+insert into t (id,a) values (820,91);
+insert into t (id,a) values (820,92);
+insert into t (id,a) values (820,93);
+insert into t (id,a) values (820,94);
+insert into t (id,a) values (820,95);
+insert into t (id,a) values (820,96);
+insert into t (id,a) values (820,97);
+insert into t (id,a) values (820,98);
+insert into t (id,a) values (820,99);
+insert into t (id,a) values (821,0);
+insert into t (id,a) values (821,1);
+insert into t (id,a) values (821,2);
+insert into t (id,a) values (821,3);
+insert into t (id,a) values (821,4);
+insert into t (id,a) values (821,5);
+insert into t (id,a) values (821,6);
+insert into t (id,a) values (821,7);
+insert into t (id,a) values (821,8);
+insert into t (id,a) values (821,9);
+insert into t (id,a) values (821,10);
+insert into t (id,a) values (821,11);
+insert into t (id,a) values (821,12);
+insert into t (id,a) values (821,13);
+insert into t (id,a) values (821,14);
+insert into t (id,a) values (821,15);
+insert into t (id,a) values (821,16);
+insert into t (id,a) values (821,17);
+insert into t (id,a) values (821,18);
+insert into t (id,a) values (821,19);
+insert into t (id,a) values (821,20);
+insert into t (id,a) values (821,21);
+insert into t (id,a) values (821,22);
+insert into t (id,a) values (821,23);
+insert into t (id,a) values (821,24);
+insert into t (id,a) values (821,25);
+insert into t (id,a) values (821,26);
+insert into t (id,a) values (821,27);
+insert into t (id,a) values (821,28);
+insert into t (id,a) values (821,29);
+insert into t (id,a) values (821,30);
+insert into t (id,a) values (821,31);
+insert into t (id,a) values (821,32);
+insert into t (id,a) values (821,33);
+insert into t (id,a) values (821,34);
+insert into t (id,a) values (821,35);
+insert into t (id,a) values (821,36);
+insert into t (id,a) values (821,37);
+insert into t (id,a) values (821,38);
+insert into t (id,a) values (821,39);
+insert into t (id,a) values (821,40);
+insert into t (id,a) values (821,41);
+insert into t (id,a) values (821,42);
+insert into t (id,a) values (821,43);
+insert into t (id,a) values (821,44);
+insert into t (id,a) values (821,45);
+insert into t (id,a) values (821,46);
+insert into t (id,a) values (821,47);
+insert into t (id,a) values (821,48);
+insert into t (id,a) values (821,49);
+insert into t (id,a) values (821,50);
+insert into t (id,a) values (821,51);
+insert into t (id,a) values (821,52);
+insert into t (id,a) values (821,53);
+insert into t (id,a) values (821,54);
+insert into t (id,a) values (821,55);
+insert into t (id,a) values (821,56);
+insert into t (id,a) values (821,57);
+insert into t (id,a) values (821,58);
+insert into t (id,a) values (821,59);
+insert into t (id,a) values (821,60);
+insert into t (id,a) values (821,61);
+insert into t (id,a) values (821,62);
+insert into t (id,a) values (821,63);
+insert into t (id,a) values (821,64);
+insert into t (id,a) values (821,65);
+insert into t (id,a) values (821,66);
+insert into t (id,a) values (821,67);
+insert into t (id,a) values (821,68);
+insert into t (id,a) values (821,69);
+insert into t (id,a) values (821,70);
+insert into t (id,a) values (821,71);
+insert into t (id,a) values (821,72);
+insert into t (id,a) values (821,73);
+insert into t (id,a) values (821,74);
+insert into t (id,a) values (821,75);
+insert into t (id,a) values (821,76);
+insert into t (id,a) values (821,77);
+insert into t (id,a) values (821,78);
+insert into t (id,a) values (821,79);
+insert into t (id,a) values (821,80);
+insert into t (id,a) values (821,81);
+insert into t (id,a) values (821,82);
+insert into t (id,a) values (821,83);
+insert into t (id,a) values (821,84);
+insert into t (id,a) values (821,85);
+insert into t (id,a) values (821,86);
+insert into t (id,a) values (821,87);
+insert into t (id,a) values (821,88);
+insert into t (id,a) values (821,89);
+insert into t (id,a) values (821,90);
+insert into t (id,a) values (821,91);
+insert into t (id,a) values (821,92);
+insert into t (id,a) values (821,93);
+insert into t (id,a) values (821,94);
+insert into t (id,a) values (821,95);
+insert into t (id,a) values (821,96);
+insert into t (id,a) values (821,97);
+insert into t (id,a) values (821,98);
+insert into t (id,a) values (821,99);
+insert into t (id,a) values (822,0);
+insert into t (id,a) values (822,1);
+insert into t (id,a) values (822,2);
+insert into t (id,a) values (822,3);
+insert into t (id,a) values (822,4);
+insert into t (id,a) values (822,5);
+insert into t (id,a) values (822,6);
+insert into t (id,a) values (822,7);
+insert into t (id,a) values (822,8);
+insert into t (id,a) values (822,9);
+insert into t (id,a) values (822,10);
+insert into t (id,a) values (822,11);
+insert into t (id,a) values (822,12);
+insert into t (id,a) values (822,13);
+insert into t (id,a) values (822,14);
+insert into t (id,a) values (822,15);
+insert into t (id,a) values (822,16);
+insert into t (id,a) values (822,17);
+insert into t (id,a) values (822,18);
+insert into t (id,a) values (822,19);
+insert into t (id,a) values (822,20);
+insert into t (id,a) values (822,21);
+insert into t (id,a) values (822,22);
+insert into t (id,a) values (822,23);
+insert into t (id,a) values (822,24);
+insert into t (id,a) values (822,25);
+insert into t (id,a) values (822,26);
+insert into t (id,a) values (822,27);
+insert into t (id,a) values (822,28);
+insert into t (id,a) values (822,29);
+insert into t (id,a) values (822,30);
+insert into t (id,a) values (822,31);
+insert into t (id,a) values (822,32);
+insert into t (id,a) values (822,33);
+insert into t (id,a) values (822,34);
+insert into t (id,a) values (822,35);
+insert into t (id,a) values (822,36);
+insert into t (id,a) values (822,37);
+insert into t (id,a) values (822,38);
+insert into t (id,a) values (822,39);
+insert into t (id,a) values (822,40);
+insert into t (id,a) values (822,41);
+insert into t (id,a) values (822,42);
+insert into t (id,a) values (822,43);
+insert into t (id,a) values (822,44);
+insert into t (id,a) values (822,45);
+insert into t (id,a) values (822,46);
+insert into t (id,a) values (822,47);
+insert into t (id,a) values (822,48);
+insert into t (id,a) values (822,49);
+insert into t (id,a) values (822,50);
+insert into t (id,a) values (822,51);
+insert into t (id,a) values (822,52);
+insert into t (id,a) values (822,53);
+insert into t (id,a) values (822,54);
+insert into t (id,a) values (822,55);
+insert into t (id,a) values (822,56);
+insert into t (id,a) values (822,57);
+insert into t (id,a) values (822,58);
+insert into t (id,a) values (822,59);
+insert into t (id,a) values (822,60);
+insert into t (id,a) values (822,61);
+insert into t (id,a) values (822,62);
+insert into t (id,a) values (822,63);
+insert into t (id,a) values (822,64);
+insert into t (id,a) values (822,65);
+insert into t (id,a) values (822,66);
+insert into t (id,a) values (822,67);
+insert into t (id,a) values (822,68);
+insert into t (id,a) values (822,69);
+insert into t (id,a) values (822,70);
+insert into t (id,a) values (822,71);
+insert into t (id,a) values (822,72);
+insert into t (id,a) values (822,73);
+insert into t (id,a) values (822,74);
+insert into t (id,a) values (822,75);
+insert into t (id,a) values (822,76);
+insert into t (id,a) values (822,77);
+insert into t (id,a) values (822,78);
+insert into t (id,a) values (822,79);
+insert into t (id,a) values (822,80);
+insert into t (id,a) values (822,81);
+insert into t (id,a) values (822,82);
+insert into t (id,a) values (822,83);
+insert into t (id,a) values (822,84);
+insert into t (id,a) values (822,85);
+insert into t (id,a) values (822,86);
+insert into t (id,a) values (822,87);
+insert into t (id,a) values (822,88);
+insert into t (id,a) values (822,89);
+insert into t (id,a) values (822,90);
+insert into t (id,a) values (822,91);
+insert into t (id,a) values (822,92);
+insert into t (id,a) values (822,93);
+insert into t (id,a) values (822,94);
+insert into t (id,a) values (822,95);
+insert into t (id,a) values (822,96);
+insert into t (id,a) values (822,97);
+insert into t (id,a) values (822,98);
+insert into t (id,a) values (822,99);
+insert into t (id,a) values (823,0);
+insert into t (id,a) values (823,1);
+insert into t (id,a) values (823,2);
+insert into t (id,a) values (823,3);
+insert into t (id,a) values (823,4);
+insert into t (id,a) values (823,5);
+insert into t (id,a) values (823,6);
+insert into t (id,a) values (823,7);
+insert into t (id,a) values (823,8);
+insert into t (id,a) values (823,9);
+insert into t (id,a) values (823,10);
+insert into t (id,a) values (823,11);
+insert into t (id,a) values (823,12);
+insert into t (id,a) values (823,13);
+insert into t (id,a) values (823,14);
+insert into t (id,a) values (823,15);
+insert into t (id,a) values (823,16);
+insert into t (id,a) values (823,17);
+insert into t (id,a) values (823,18);
+insert into t (id,a) values (823,19);
+insert into t (id,a) values (823,20);
+insert into t (id,a) values (823,21);
+insert into t (id,a) values (823,22);
+insert into t (id,a) values (823,23);
+insert into t (id,a) values (823,24);
+insert into t (id,a) values (823,25);
+insert into t (id,a) values (823,26);
+insert into t (id,a) values (823,27);
+insert into t (id,a) values (823,28);
+insert into t (id,a) values (823,29);
+insert into t (id,a) values (823,30);
+insert into t (id,a) values (823,31);
+insert into t (id,a) values (823,32);
+insert into t (id,a) values (823,33);
+insert into t (id,a) values (823,34);
+insert into t (id,a) values (823,35);
+insert into t (id,a) values (823,36);
+insert into t (id,a) values (823,37);
+insert into t (id,a) values (823,38);
+insert into t (id,a) values (823,39);
+insert into t (id,a) values (823,40);
+insert into t (id,a) values (823,41);
+insert into t (id,a) values (823,42);
+insert into t (id,a) values (823,43);
+insert into t (id,a) values (823,44);
+insert into t (id,a) values (823,45);
+insert into t (id,a) values (823,46);
+insert into t (id,a) values (823,47);
+insert into t (id,a) values (823,48);
+insert into t (id,a) values (823,49);
+insert into t (id,a) values (823,50);
+insert into t (id,a) values (823,51);
+insert into t (id,a) values (823,52);
+insert into t (id,a) values (823,53);
+insert into t (id,a) values (823,54);
+insert into t (id,a) values (823,55);
+insert into t (id,a) values (823,56);
+insert into t (id,a) values (823,57);
+insert into t (id,a) values (823,58);
+insert into t (id,a) values (823,59);
+insert into t (id,a) values (823,60);
+insert into t (id,a) values (823,61);
+insert into t (id,a) values (823,62);
+insert into t (id,a) values (823,63);
+insert into t (id,a) values (823,64);
+insert into t (id,a) values (823,65);
+insert into t (id,a) values (823,66);
+insert into t (id,a) values (823,67);
+insert into t (id,a) values (823,68);
+insert into t (id,a) values (823,69);
+insert into t (id,a) values (823,70);
+insert into t (id,a) values (823,71);
+insert into t (id,a) values (823,72);
+insert into t (id,a) values (823,73);
+insert into t (id,a) values (823,74);
+insert into t (id,a) values (823,75);
+insert into t (id,a) values (823,76);
+insert into t (id,a) values (823,77);
+insert into t (id,a) values (823,78);
+insert into t (id,a) values (823,79);
+insert into t (id,a) values (823,80);
+insert into t (id,a) values (823,81);
+insert into t (id,a) values (823,82);
+insert into t (id,a) values (823,83);
+insert into t (id,a) values (823,84);
+insert into t (id,a) values (823,85);
+insert into t (id,a) values (823,86);
+insert into t (id,a) values (823,87);
+insert into t (id,a) values (823,88);
+insert into t (id,a) values (823,89);
+insert into t (id,a) values (823,90);
+insert into t (id,a) values (823,91);
+insert into t (id,a) values (823,92);
+insert into t (id,a) values (823,93);
+insert into t (id,a) values (823,94);
+insert into t (id,a) values (823,95);
+insert into t (id,a) values (823,96);
+insert into t (id,a) values (823,97);
+insert into t (id,a) values (823,98);
+insert into t (id,a) values (823,99);
+insert into t (id,a) values (824,0);
+insert into t (id,a) values (824,1);
+insert into t (id,a) values (824,2);
+insert into t (id,a) values (824,3);
+insert into t (id,a) values (824,4);
+insert into t (id,a) values (824,5);
+insert into t (id,a) values (824,6);
+insert into t (id,a) values (824,7);
+insert into t (id,a) values (824,8);
+insert into t (id,a) values (824,9);
+insert into t (id,a) values (824,10);
+insert into t (id,a) values (824,11);
+insert into t (id,a) values (824,12);
+insert into t (id,a) values (824,13);
+insert into t (id,a) values (824,14);
+insert into t (id,a) values (824,15);
+insert into t (id,a) values (824,16);
+insert into t (id,a) values (824,17);
+insert into t (id,a) values (824,18);
+insert into t (id,a) values (824,19);
+insert into t (id,a) values (824,20);
+insert into t (id,a) values (824,21);
+insert into t (id,a) values (824,22);
+insert into t (id,a) values (824,23);
+insert into t (id,a) values (824,24);
+insert into t (id,a) values (824,25);
+insert into t (id,a) values (824,26);
+insert into t (id,a) values (824,27);
+insert into t (id,a) values (824,28);
+insert into t (id,a) values (824,29);
+insert into t (id,a) values (824,30);
+insert into t (id,a) values (824,31);
+insert into t (id,a) values (824,32);
+insert into t (id,a) values (824,33);
+insert into t (id,a) values (824,34);
+insert into t (id,a) values (824,35);
+insert into t (id,a) values (824,36);
+insert into t (id,a) values (824,37);
+insert into t (id,a) values (824,38);
+insert into t (id,a) values (824,39);
+insert into t (id,a) values (824,40);
+insert into t (id,a) values (824,41);
+insert into t (id,a) values (824,42);
+insert into t (id,a) values (824,43);
+insert into t (id,a) values (824,44);
+insert into t (id,a) values (824,45);
+insert into t (id,a) values (824,46);
+insert into t (id,a) values (824,47);
+insert into t (id,a) values (824,48);
+insert into t (id,a) values (824,49);
+insert into t (id,a) values (824,50);
+insert into t (id,a) values (824,51);
+insert into t (id,a) values (824,52);
+insert into t (id,a) values (824,53);
+insert into t (id,a) values (824,54);
+insert into t (id,a) values (824,55);
+insert into t (id,a) values (824,56);
+insert into t (id,a) values (824,57);
+insert into t (id,a) values (824,58);
+insert into t (id,a) values (824,59);
+insert into t (id,a) values (824,60);
+insert into t (id,a) values (824,61);
+insert into t (id,a) values (824,62);
+insert into t (id,a) values (824,63);
+insert into t (id,a) values (824,64);
+insert into t (id,a) values (824,65);
+insert into t (id,a) values (824,66);
+insert into t (id,a) values (824,67);
+insert into t (id,a) values (824,68);
+insert into t (id,a) values (824,69);
+insert into t (id,a) values (824,70);
+insert into t (id,a) values (824,71);
+insert into t (id,a) values (824,72);
+insert into t (id,a) values (824,73);
+insert into t (id,a) values (824,74);
+insert into t (id,a) values (824,75);
+insert into t (id,a) values (824,76);
+insert into t (id,a) values (824,77);
+insert into t (id,a) values (824,78);
+insert into t (id,a) values (824,79);
+insert into t (id,a) values (824,80);
+insert into t (id,a) values (824,81);
+insert into t (id,a) values (824,82);
+insert into t (id,a) values (824,83);
+insert into t (id,a) values (824,84);
+insert into t (id,a) values (824,85);
+insert into t (id,a) values (824,86);
+insert into t (id,a) values (824,87);
+insert into t (id,a) values (824,88);
+insert into t (id,a) values (824,89);
+insert into t (id,a) values (824,90);
+insert into t (id,a) values (824,91);
+insert into t (id,a) values (824,92);
+insert into t (id,a) values (824,93);
+insert into t (id,a) values (824,94);
+insert into t (id,a) values (824,95);
+insert into t (id,a) values (824,96);
+insert into t (id,a) values (824,97);
+insert into t (id,a) values (824,98);
+insert into t (id,a) values (824,99);
+insert into t (id,a) values (825,0);
+insert into t (id,a) values (825,1);
+insert into t (id,a) values (825,2);
+insert into t (id,a) values (825,3);
+insert into t (id,a) values (825,4);
+insert into t (id,a) values (825,5);
+insert into t (id,a) values (825,6);
+insert into t (id,a) values (825,7);
+insert into t (id,a) values (825,8);
+insert into t (id,a) values (825,9);
+insert into t (id,a) values (825,10);
+insert into t (id,a) values (825,11);
+insert into t (id,a) values (825,12);
+insert into t (id,a) values (825,13);
+insert into t (id,a) values (825,14);
+insert into t (id,a) values (825,15);
+insert into t (id,a) values (825,16);
+insert into t (id,a) values (825,17);
+insert into t (id,a) values (825,18);
+insert into t (id,a) values (825,19);
+insert into t (id,a) values (825,20);
+insert into t (id,a) values (825,21);
+insert into t (id,a) values (825,22);
+insert into t (id,a) values (825,23);
+insert into t (id,a) values (825,24);
+insert into t (id,a) values (825,25);
+insert into t (id,a) values (825,26);
+insert into t (id,a) values (825,27);
+insert into t (id,a) values (825,28);
+insert into t (id,a) values (825,29);
+insert into t (id,a) values (825,30);
+insert into t (id,a) values (825,31);
+insert into t (id,a) values (825,32);
+insert into t (id,a) values (825,33);
+insert into t (id,a) values (825,34);
+insert into t (id,a) values (825,35);
+insert into t (id,a) values (825,36);
+insert into t (id,a) values (825,37);
+insert into t (id,a) values (825,38);
+insert into t (id,a) values (825,39);
+insert into t (id,a) values (825,40);
+insert into t (id,a) values (825,41);
+insert into t (id,a) values (825,42);
+insert into t (id,a) values (825,43);
+insert into t (id,a) values (825,44);
+insert into t (id,a) values (825,45);
+insert into t (id,a) values (825,46);
+insert into t (id,a) values (825,47);
+insert into t (id,a) values (825,48);
+insert into t (id,a) values (825,49);
+insert into t (id,a) values (825,50);
+insert into t (id,a) values (825,51);
+insert into t (id,a) values (825,52);
+insert into t (id,a) values (825,53);
+insert into t (id,a) values (825,54);
+insert into t (id,a) values (825,55);
+insert into t (id,a) values (825,56);
+insert into t (id,a) values (825,57);
+insert into t (id,a) values (825,58);
+insert into t (id,a) values (825,59);
+insert into t (id,a) values (825,60);
+insert into t (id,a) values (825,61);
+insert into t (id,a) values (825,62);
+insert into t (id,a) values (825,63);
+insert into t (id,a) values (825,64);
+insert into t (id,a) values (825,65);
+insert into t (id,a) values (825,66);
+insert into t (id,a) values (825,67);
+insert into t (id,a) values (825,68);
+insert into t (id,a) values (825,69);
+insert into t (id,a) values (825,70);
+insert into t (id,a) values (825,71);
+insert into t (id,a) values (825,72);
+insert into t (id,a) values (825,73);
+insert into t (id,a) values (825,74);
+insert into t (id,a) values (825,75);
+insert into t (id,a) values (825,76);
+insert into t (id,a) values (825,77);
+insert into t (id,a) values (825,78);
+insert into t (id,a) values (825,79);
+insert into t (id,a) values (825,80);
+insert into t (id,a) values (825,81);
+insert into t (id,a) values (825,82);
+insert into t (id,a) values (825,83);
+insert into t (id,a) values (825,84);
+insert into t (id,a) values (825,85);
+insert into t (id,a) values (825,86);
+insert into t (id,a) values (825,87);
+insert into t (id,a) values (825,88);
+insert into t (id,a) values (825,89);
+insert into t (id,a) values (825,90);
+insert into t (id,a) values (825,91);
+insert into t (id,a) values (825,92);
+insert into t (id,a) values (825,93);
+insert into t (id,a) values (825,94);
+insert into t (id,a) values (825,95);
+insert into t (id,a) values (825,96);
+insert into t (id,a) values (825,97);
+insert into t (id,a) values (825,98);
+insert into t (id,a) values (825,99);
+insert into t (id,a) values (826,0);
+insert into t (id,a) values (826,1);
+insert into t (id,a) values (826,2);
+insert into t (id,a) values (826,3);
+insert into t (id,a) values (826,4);
+insert into t (id,a) values (826,5);
+insert into t (id,a) values (826,6);
+insert into t (id,a) values (826,7);
+insert into t (id,a) values (826,8);
+insert into t (id,a) values (826,9);
+insert into t (id,a) values (826,10);
+insert into t (id,a) values (826,11);
+insert into t (id,a) values (826,12);
+insert into t (id,a) values (826,13);
+insert into t (id,a) values (826,14);
+insert into t (id,a) values (826,15);
+insert into t (id,a) values (826,16);
+insert into t (id,a) values (826,17);
+insert into t (id,a) values (826,18);
+insert into t (id,a) values (826,19);
+insert into t (id,a) values (826,20);
+insert into t (id,a) values (826,21);
+insert into t (id,a) values (826,22);
+insert into t (id,a) values (826,23);
+insert into t (id,a) values (826,24);
+insert into t (id,a) values (826,25);
+insert into t (id,a) values (826,26);
+insert into t (id,a) values (826,27);
+insert into t (id,a) values (826,28);
+insert into t (id,a) values (826,29);
+insert into t (id,a) values (826,30);
+insert into t (id,a) values (826,31);
+insert into t (id,a) values (826,32);
+insert into t (id,a) values (826,33);
+insert into t (id,a) values (826,34);
+insert into t (id,a) values (826,35);
+insert into t (id,a) values (826,36);
+insert into t (id,a) values (826,37);
+insert into t (id,a) values (826,38);
+insert into t (id,a) values (826,39);
+insert into t (id,a) values (826,40);
+insert into t (id,a) values (826,41);
+insert into t (id,a) values (826,42);
+insert into t (id,a) values (826,43);
+insert into t (id,a) values (826,44);
+insert into t (id,a) values (826,45);
+insert into t (id,a) values (826,46);
+insert into t (id,a) values (826,47);
+insert into t (id,a) values (826,48);
+insert into t (id,a) values (826,49);
+insert into t (id,a) values (826,50);
+insert into t (id,a) values (826,51);
+insert into t (id,a) values (826,52);
+insert into t (id,a) values (826,53);
+insert into t (id,a) values (826,54);
+insert into t (id,a) values (826,55);
+insert into t (id,a) values (826,56);
+insert into t (id,a) values (826,57);
+insert into t (id,a) values (826,58);
+insert into t (id,a) values (826,59);
+insert into t (id,a) values (826,60);
+insert into t (id,a) values (826,61);
+insert into t (id,a) values (826,62);
+insert into t (id,a) values (826,63);
+insert into t (id,a) values (826,64);
+insert into t (id,a) values (826,65);
+insert into t (id,a) values (826,66);
+insert into t (id,a) values (826,67);
+insert into t (id,a) values (826,68);
+insert into t (id,a) values (826,69);
+insert into t (id,a) values (826,70);
+insert into t (id,a) values (826,71);
+insert into t (id,a) values (826,72);
+insert into t (id,a) values (826,73);
+insert into t (id,a) values (826,74);
+insert into t (id,a) values (826,75);
+insert into t (id,a) values (826,76);
+insert into t (id,a) values (826,77);
+insert into t (id,a) values (826,78);
+insert into t (id,a) values (826,79);
+insert into t (id,a) values (826,80);
+insert into t (id,a) values (826,81);
+insert into t (id,a) values (826,82);
+insert into t (id,a) values (826,83);
+insert into t (id,a) values (826,84);
+insert into t (id,a) values (826,85);
+insert into t (id,a) values (826,86);
+insert into t (id,a) values (826,87);
+insert into t (id,a) values (826,88);
+insert into t (id,a) values (826,89);
+insert into t (id,a) values (826,90);
+insert into t (id,a) values (826,91);
+insert into t (id,a) values (826,92);
+insert into t (id,a) values (826,93);
+insert into t (id,a) values (826,94);
+insert into t (id,a) values (826,95);
+insert into t (id,a) values (826,96);
+insert into t (id,a) values (826,97);
+insert into t (id,a) values (826,98);
+insert into t (id,a) values (826,99);
+insert into t (id,a) values (827,0);
+insert into t (id,a) values (827,1);
+insert into t (id,a) values (827,2);
+insert into t (id,a) values (827,3);
+insert into t (id,a) values (827,4);
+insert into t (id,a) values (827,5);
+insert into t (id,a) values (827,6);
+insert into t (id,a) values (827,7);
+insert into t (id,a) values (827,8);
+insert into t (id,a) values (827,9);
+insert into t (id,a) values (827,10);
+insert into t (id,a) values (827,11);
+insert into t (id,a) values (827,12);
+insert into t (id,a) values (827,13);
+insert into t (id,a) values (827,14);
+insert into t (id,a) values (827,15);
+insert into t (id,a) values (827,16);
+insert into t (id,a) values (827,17);
+insert into t (id,a) values (827,18);
+insert into t (id,a) values (827,19);
+insert into t (id,a) values (827,20);
+insert into t (id,a) values (827,21);
+insert into t (id,a) values (827,22);
+insert into t (id,a) values (827,23);
+insert into t (id,a) values (827,24);
+insert into t (id,a) values (827,25);
+insert into t (id,a) values (827,26);
+insert into t (id,a) values (827,27);
+insert into t (id,a) values (827,28);
+insert into t (id,a) values (827,29);
+insert into t (id,a) values (827,30);
+insert into t (id,a) values (827,31);
+insert into t (id,a) values (827,32);
+insert into t (id,a) values (827,33);
+insert into t (id,a) values (827,34);
+insert into t (id,a) values (827,35);
+insert into t (id,a) values (827,36);
+insert into t (id,a) values (827,37);
+insert into t (id,a) values (827,38);
+insert into t (id,a) values (827,39);
+insert into t (id,a) values (827,40);
+insert into t (id,a) values (827,41);
+insert into t (id,a) values (827,42);
+insert into t (id,a) values (827,43);
+insert into t (id,a) values (827,44);
+insert into t (id,a) values (827,45);
+insert into t (id,a) values (827,46);
+insert into t (id,a) values (827,47);
+insert into t (id,a) values (827,48);
+insert into t (id,a) values (827,49);
+insert into t (id,a) values (827,50);
+insert into t (id,a) values (827,51);
+insert into t (id,a) values (827,52);
+insert into t (id,a) values (827,53);
+insert into t (id,a) values (827,54);
+insert into t (id,a) values (827,55);
+insert into t (id,a) values (827,56);
+insert into t (id,a) values (827,57);
+insert into t (id,a) values (827,58);
+insert into t (id,a) values (827,59);
+insert into t (id,a) values (827,60);
+insert into t (id,a) values (827,61);
+insert into t (id,a) values (827,62);
+insert into t (id,a) values (827,63);
+insert into t (id,a) values (827,64);
+insert into t (id,a) values (827,65);
+insert into t (id,a) values (827,66);
+insert into t (id,a) values (827,67);
+insert into t (id,a) values (827,68);
+insert into t (id,a) values (827,69);
+insert into t (id,a) values (827,70);
+insert into t (id,a) values (827,71);
+insert into t (id,a) values (827,72);
+insert into t (id,a) values (827,73);
+insert into t (id,a) values (827,74);
+insert into t (id,a) values (827,75);
+insert into t (id,a) values (827,76);
+insert into t (id,a) values (827,77);
+insert into t (id,a) values (827,78);
+insert into t (id,a) values (827,79);
+insert into t (id,a) values (827,80);
+insert into t (id,a) values (827,81);
+insert into t (id,a) values (827,82);
+insert into t (id,a) values (827,83);
+insert into t (id,a) values (827,84);
+insert into t (id,a) values (827,85);
+insert into t (id,a) values (827,86);
+insert into t (id,a) values (827,87);
+insert into t (id,a) values (827,88);
+insert into t (id,a) values (827,89);
+insert into t (id,a) values (827,90);
+insert into t (id,a) values (827,91);
+insert into t (id,a) values (827,92);
+insert into t (id,a) values (827,93);
+insert into t (id,a) values (827,94);
+insert into t (id,a) values (827,95);
+insert into t (id,a) values (827,96);
+insert into t (id,a) values (827,97);
+insert into t (id,a) values (827,98);
+insert into t (id,a) values (827,99);
+insert into t (id,a) values (828,0);
+insert into t (id,a) values (828,1);
+insert into t (id,a) values (828,2);
+insert into t (id,a) values (828,3);
+insert into t (id,a) values (828,4);
+insert into t (id,a) values (828,5);
+insert into t (id,a) values (828,6);
+insert into t (id,a) values (828,7);
+insert into t (id,a) values (828,8);
+insert into t (id,a) values (828,9);
+insert into t (id,a) values (828,10);
+insert into t (id,a) values (828,11);
+insert into t (id,a) values (828,12);
+insert into t (id,a) values (828,13);
+insert into t (id,a) values (828,14);
+insert into t (id,a) values (828,15);
+insert into t (id,a) values (828,16);
+insert into t (id,a) values (828,17);
+insert into t (id,a) values (828,18);
+insert into t (id,a) values (828,19);
+insert into t (id,a) values (828,20);
+insert into t (id,a) values (828,21);
+insert into t (id,a) values (828,22);
+insert into t (id,a) values (828,23);
+insert into t (id,a) values (828,24);
+insert into t (id,a) values (828,25);
+insert into t (id,a) values (828,26);
+insert into t (id,a) values (828,27);
+insert into t (id,a) values (828,28);
+insert into t (id,a) values (828,29);
+insert into t (id,a) values (828,30);
+insert into t (id,a) values (828,31);
+insert into t (id,a) values (828,32);
+insert into t (id,a) values (828,33);
+insert into t (id,a) values (828,34);
+insert into t (id,a) values (828,35);
+insert into t (id,a) values (828,36);
+insert into t (id,a) values (828,37);
+insert into t (id,a) values (828,38);
+insert into t (id,a) values (828,39);
+insert into t (id,a) values (828,40);
+insert into t (id,a) values (828,41);
+insert into t (id,a) values (828,42);
+insert into t (id,a) values (828,43);
+insert into t (id,a) values (828,44);
+insert into t (id,a) values (828,45);
+insert into t (id,a) values (828,46);
+insert into t (id,a) values (828,47);
+insert into t (id,a) values (828,48);
+insert into t (id,a) values (828,49);
+insert into t (id,a) values (828,50);
+insert into t (id,a) values (828,51);
+insert into t (id,a) values (828,52);
+insert into t (id,a) values (828,53);
+insert into t (id,a) values (828,54);
+insert into t (id,a) values (828,55);
+insert into t (id,a) values (828,56);
+insert into t (id,a) values (828,57);
+insert into t (id,a) values (828,58);
+insert into t (id,a) values (828,59);
+insert into t (id,a) values (828,60);
+insert into t (id,a) values (828,61);
+insert into t (id,a) values (828,62);
+insert into t (id,a) values (828,63);
+insert into t (id,a) values (828,64);
+insert into t (id,a) values (828,65);
+insert into t (id,a) values (828,66);
+insert into t (id,a) values (828,67);
+insert into t (id,a) values (828,68);
+insert into t (id,a) values (828,69);
+insert into t (id,a) values (828,70);
+insert into t (id,a) values (828,71);
+insert into t (id,a) values (828,72);
+insert into t (id,a) values (828,73);
+insert into t (id,a) values (828,74);
+insert into t (id,a) values (828,75);
+insert into t (id,a) values (828,76);
+insert into t (id,a) values (828,77);
+insert into t (id,a) values (828,78);
+insert into t (id,a) values (828,79);
+insert into t (id,a) values (828,80);
+insert into t (id,a) values (828,81);
+insert into t (id,a) values (828,82);
+insert into t (id,a) values (828,83);
+insert into t (id,a) values (828,84);
+insert into t (id,a) values (828,85);
+insert into t (id,a) values (828,86);
+insert into t (id,a) values (828,87);
+insert into t (id,a) values (828,88);
+insert into t (id,a) values (828,89);
+insert into t (id,a) values (828,90);
+insert into t (id,a) values (828,91);
+insert into t (id,a) values (828,92);
+insert into t (id,a) values (828,93);
+insert into t (id,a) values (828,94);
+insert into t (id,a) values (828,95);
+insert into t (id,a) values (828,96);
+insert into t (id,a) values (828,97);
+insert into t (id,a) values (828,98);
+insert into t (id,a) values (828,99);
+insert into t (id,a) values (829,0);
+insert into t (id,a) values (829,1);
+insert into t (id,a) values (829,2);
+insert into t (id,a) values (829,3);
+insert into t (id,a) values (829,4);
+insert into t (id,a) values (829,5);
+insert into t (id,a) values (829,6);
+insert into t (id,a) values (829,7);
+insert into t (id,a) values (829,8);
+insert into t (id,a) values (829,9);
+insert into t (id,a) values (829,10);
+insert into t (id,a) values (829,11);
+insert into t (id,a) values (829,12);
+insert into t (id,a) values (829,13);
+insert into t (id,a) values (829,14);
+insert into t (id,a) values (829,15);
+insert into t (id,a) values (829,16);
+insert into t (id,a) values (829,17);
+insert into t (id,a) values (829,18);
+insert into t (id,a) values (829,19);
+insert into t (id,a) values (829,20);
+insert into t (id,a) values (829,21);
+insert into t (id,a) values (829,22);
+insert into t (id,a) values (829,23);
+insert into t (id,a) values (829,24);
+insert into t (id,a) values (829,25);
+insert into t (id,a) values (829,26);
+insert into t (id,a) values (829,27);
+insert into t (id,a) values (829,28);
+insert into t (id,a) values (829,29);
+insert into t (id,a) values (829,30);
+insert into t (id,a) values (829,31);
+insert into t (id,a) values (829,32);
+insert into t (id,a) values (829,33);
+insert into t (id,a) values (829,34);
+insert into t (id,a) values (829,35);
+insert into t (id,a) values (829,36);
+insert into t (id,a) values (829,37);
+insert into t (id,a) values (829,38);
+insert into t (id,a) values (829,39);
+insert into t (id,a) values (829,40);
+insert into t (id,a) values (829,41);
+insert into t (id,a) values (829,42);
+insert into t (id,a) values (829,43);
+insert into t (id,a) values (829,44);
+insert into t (id,a) values (829,45);
+insert into t (id,a) values (829,46);
+insert into t (id,a) values (829,47);
+insert into t (id,a) values (829,48);
+insert into t (id,a) values (829,49);
+insert into t (id,a) values (829,50);
+insert into t (id,a) values (829,51);
+insert into t (id,a) values (829,52);
+insert into t (id,a) values (829,53);
+insert into t (id,a) values (829,54);
+insert into t (id,a) values (829,55);
+insert into t (id,a) values (829,56);
+insert into t (id,a) values (829,57);
+insert into t (id,a) values (829,58);
+insert into t (id,a) values (829,59);
+insert into t (id,a) values (829,60);
+insert into t (id,a) values (829,61);
+insert into t (id,a) values (829,62);
+insert into t (id,a) values (829,63);
+insert into t (id,a) values (829,64);
+insert into t (id,a) values (829,65);
+insert into t (id,a) values (829,66);
+insert into t (id,a) values (829,67);
+insert into t (id,a) values (829,68);
+insert into t (id,a) values (829,69);
+insert into t (id,a) values (829,70);
+insert into t (id,a) values (829,71);
+insert into t (id,a) values (829,72);
+insert into t (id,a) values (829,73);
+insert into t (id,a) values (829,74);
+insert into t (id,a) values (829,75);
+insert into t (id,a) values (829,76);
+insert into t (id,a) values (829,77);
+insert into t (id,a) values (829,78);
+insert into t (id,a) values (829,79);
+insert into t (id,a) values (829,80);
+insert into t (id,a) values (829,81);
+insert into t (id,a) values (829,82);
+insert into t (id,a) values (829,83);
+insert into t (id,a) values (829,84);
+insert into t (id,a) values (829,85);
+insert into t (id,a) values (829,86);
+insert into t (id,a) values (829,87);
+insert into t (id,a) values (829,88);
+insert into t (id,a) values (829,89);
+insert into t (id,a) values (829,90);
+insert into t (id,a) values (829,91);
+insert into t (id,a) values (829,92);
+insert into t (id,a) values (829,93);
+insert into t (id,a) values (829,94);
+insert into t (id,a) values (829,95);
+insert into t (id,a) values (829,96);
+insert into t (id,a) values (829,97);
+insert into t (id,a) values (829,98);
+insert into t (id,a) values (829,99);
+insert into t (id,a) values (830,0);
+insert into t (id,a) values (830,1);
+insert into t (id,a) values (830,2);
+insert into t (id,a) values (830,3);
+insert into t (id,a) values (830,4);
+insert into t (id,a) values (830,5);
+insert into t (id,a) values (830,6);
+insert into t (id,a) values (830,7);
+insert into t (id,a) values (830,8);
+insert into t (id,a) values (830,9);
+insert into t (id,a) values (830,10);
+insert into t (id,a) values (830,11);
+insert into t (id,a) values (830,12);
+insert into t (id,a) values (830,13);
+insert into t (id,a) values (830,14);
+insert into t (id,a) values (830,15);
+insert into t (id,a) values (830,16);
+insert into t (id,a) values (830,17);
+insert into t (id,a) values (830,18);
+insert into t (id,a) values (830,19);
+insert into t (id,a) values (830,20);
+insert into t (id,a) values (830,21);
+insert into t (id,a) values (830,22);
+insert into t (id,a) values (830,23);
+insert into t (id,a) values (830,24);
+insert into t (id,a) values (830,25);
+insert into t (id,a) values (830,26);
+insert into t (id,a) values (830,27);
+insert into t (id,a) values (830,28);
+insert into t (id,a) values (830,29);
+insert into t (id,a) values (830,30);
+insert into t (id,a) values (830,31);
+insert into t (id,a) values (830,32);
+insert into t (id,a) values (830,33);
+insert into t (id,a) values (830,34);
+insert into t (id,a) values (830,35);
+insert into t (id,a) values (830,36);
+insert into t (id,a) values (830,37);
+insert into t (id,a) values (830,38);
+insert into t (id,a) values (830,39);
+insert into t (id,a) values (830,40);
+insert into t (id,a) values (830,41);
+insert into t (id,a) values (830,42);
+insert into t (id,a) values (830,43);
+insert into t (id,a) values (830,44);
+insert into t (id,a) values (830,45);
+insert into t (id,a) values (830,46);
+insert into t (id,a) values (830,47);
+insert into t (id,a) values (830,48);
+insert into t (id,a) values (830,49);
+insert into t (id,a) values (830,50);
+insert into t (id,a) values (830,51);
+insert into t (id,a) values (830,52);
+insert into t (id,a) values (830,53);
+insert into t (id,a) values (830,54);
+insert into t (id,a) values (830,55);
+insert into t (id,a) values (830,56);
+insert into t (id,a) values (830,57);
+insert into t (id,a) values (830,58);
+insert into t (id,a) values (830,59);
+insert into t (id,a) values (830,60);
+insert into t (id,a) values (830,61);
+insert into t (id,a) values (830,62);
+insert into t (id,a) values (830,63);
+insert into t (id,a) values (830,64);
+insert into t (id,a) values (830,65);
+insert into t (id,a) values (830,66);
+insert into t (id,a) values (830,67);
+insert into t (id,a) values (830,68);
+insert into t (id,a) values (830,69);
+insert into t (id,a) values (830,70);
+insert into t (id,a) values (830,71);
+insert into t (id,a) values (830,72);
+insert into t (id,a) values (830,73);
+insert into t (id,a) values (830,74);
+insert into t (id,a) values (830,75);
+insert into t (id,a) values (830,76);
+insert into t (id,a) values (830,77);
+insert into t (id,a) values (830,78);
+insert into t (id,a) values (830,79);
+insert into t (id,a) values (830,80);
+insert into t (id,a) values (830,81);
+insert into t (id,a) values (830,82);
+insert into t (id,a) values (830,83);
+insert into t (id,a) values (830,84);
+insert into t (id,a) values (830,85);
+insert into t (id,a) values (830,86);
+insert into t (id,a) values (830,87);
+insert into t (id,a) values (830,88);
+insert into t (id,a) values (830,89);
+insert into t (id,a) values (830,90);
+insert into t (id,a) values (830,91);
+insert into t (id,a) values (830,92);
+insert into t (id,a) values (830,93);
+insert into t (id,a) values (830,94);
+insert into t (id,a) values (830,95);
+insert into t (id,a) values (830,96);
+insert into t (id,a) values (830,97);
+insert into t (id,a) values (830,98);
+insert into t (id,a) values (830,99);
+insert into t (id,a) values (831,0);
+insert into t (id,a) values (831,1);
+insert into t (id,a) values (831,2);
+insert into t (id,a) values (831,3);
+insert into t (id,a) values (831,4);
+insert into t (id,a) values (831,5);
+insert into t (id,a) values (831,6);
+insert into t (id,a) values (831,7);
+insert into t (id,a) values (831,8);
+insert into t (id,a) values (831,9);
+insert into t (id,a) values (831,10);
+insert into t (id,a) values (831,11);
+insert into t (id,a) values (831,12);
+insert into t (id,a) values (831,13);
+insert into t (id,a) values (831,14);
+insert into t (id,a) values (831,15);
+insert into t (id,a) values (831,16);
+insert into t (id,a) values (831,17);
+insert into t (id,a) values (831,18);
+insert into t (id,a) values (831,19);
+insert into t (id,a) values (831,20);
+insert into t (id,a) values (831,21);
+insert into t (id,a) values (831,22);
+insert into t (id,a) values (831,23);
+insert into t (id,a) values (831,24);
+insert into t (id,a) values (831,25);
+insert into t (id,a) values (831,26);
+insert into t (id,a) values (831,27);
+insert into t (id,a) values (831,28);
+insert into t (id,a) values (831,29);
+insert into t (id,a) values (831,30);
+insert into t (id,a) values (831,31);
+insert into t (id,a) values (831,32);
+insert into t (id,a) values (831,33);
+insert into t (id,a) values (831,34);
+insert into t (id,a) values (831,35);
+insert into t (id,a) values (831,36);
+insert into t (id,a) values (831,37);
+insert into t (id,a) values (831,38);
+insert into t (id,a) values (831,39);
+insert into t (id,a) values (831,40);
+insert into t (id,a) values (831,41);
+insert into t (id,a) values (831,42);
+insert into t (id,a) values (831,43);
+insert into t (id,a) values (831,44);
+insert into t (id,a) values (831,45);
+insert into t (id,a) values (831,46);
+insert into t (id,a) values (831,47);
+insert into t (id,a) values (831,48);
+insert into t (id,a) values (831,49);
+insert into t (id,a) values (831,50);
+insert into t (id,a) values (831,51);
+insert into t (id,a) values (831,52);
+insert into t (id,a) values (831,53);
+insert into t (id,a) values (831,54);
+insert into t (id,a) values (831,55);
+insert into t (id,a) values (831,56);
+insert into t (id,a) values (831,57);
+insert into t (id,a) values (831,58);
+insert into t (id,a) values (831,59);
+insert into t (id,a) values (831,60);
+insert into t (id,a) values (831,61);
+insert into t (id,a) values (831,62);
+insert into t (id,a) values (831,63);
+insert into t (id,a) values (831,64);
+insert into t (id,a) values (831,65);
+insert into t (id,a) values (831,66);
+insert into t (id,a) values (831,67);
+insert into t (id,a) values (831,68);
+insert into t (id,a) values (831,69);
+insert into t (id,a) values (831,70);
+insert into t (id,a) values (831,71);
+insert into t (id,a) values (831,72);
+insert into t (id,a) values (831,73);
+insert into t (id,a) values (831,74);
+insert into t (id,a) values (831,75);
+insert into t (id,a) values (831,76);
+insert into t (id,a) values (831,77);
+insert into t (id,a) values (831,78);
+insert into t (id,a) values (831,79);
+insert into t (id,a) values (831,80);
+insert into t (id,a) values (831,81);
+insert into t (id,a) values (831,82);
+insert into t (id,a) values (831,83);
+insert into t (id,a) values (831,84);
+insert into t (id,a) values (831,85);
+insert into t (id,a) values (831,86);
+insert into t (id,a) values (831,87);
+insert into t (id,a) values (831,88);
+insert into t (id,a) values (831,89);
+insert into t (id,a) values (831,90);
+insert into t (id,a) values (831,91);
+insert into t (id,a) values (831,92);
+insert into t (id,a) values (831,93);
+insert into t (id,a) values (831,94);
+insert into t (id,a) values (831,95);
+insert into t (id,a) values (831,96);
+insert into t (id,a) values (831,97);
+insert into t (id,a) values (831,98);
+insert into t (id,a) values (831,99);
+insert into t (id,a) values (832,0);
+insert into t (id,a) values (832,1);
+insert into t (id,a) values (832,2);
+insert into t (id,a) values (832,3);
+insert into t (id,a) values (832,4);
+insert into t (id,a) values (832,5);
+insert into t (id,a) values (832,6);
+insert into t (id,a) values (832,7);
+insert into t (id,a) values (832,8);
+insert into t (id,a) values (832,9);
+insert into t (id,a) values (832,10);
+insert into t (id,a) values (832,11);
+insert into t (id,a) values (832,12);
+insert into t (id,a) values (832,13);
+insert into t (id,a) values (832,14);
+insert into t (id,a) values (832,15);
+insert into t (id,a) values (832,16);
+insert into t (id,a) values (832,17);
+insert into t (id,a) values (832,18);
+insert into t (id,a) values (832,19);
+insert into t (id,a) values (832,20);
+insert into t (id,a) values (832,21);
+insert into t (id,a) values (832,22);
+insert into t (id,a) values (832,23);
+insert into t (id,a) values (832,24);
+insert into t (id,a) values (832,25);
+insert into t (id,a) values (832,26);
+insert into t (id,a) values (832,27);
+insert into t (id,a) values (832,28);
+insert into t (id,a) values (832,29);
+insert into t (id,a) values (832,30);
+insert into t (id,a) values (832,31);
+insert into t (id,a) values (832,32);
+insert into t (id,a) values (832,33);
+insert into t (id,a) values (832,34);
+insert into t (id,a) values (832,35);
+insert into t (id,a) values (832,36);
+insert into t (id,a) values (832,37);
+insert into t (id,a) values (832,38);
+insert into t (id,a) values (832,39);
+insert into t (id,a) values (832,40);
+insert into t (id,a) values (832,41);
+insert into t (id,a) values (832,42);
+insert into t (id,a) values (832,43);
+insert into t (id,a) values (832,44);
+insert into t (id,a) values (832,45);
+insert into t (id,a) values (832,46);
+insert into t (id,a) values (832,47);
+insert into t (id,a) values (832,48);
+insert into t (id,a) values (832,49);
+insert into t (id,a) values (832,50);
+insert into t (id,a) values (832,51);
+insert into t (id,a) values (832,52);
+insert into t (id,a) values (832,53);
+insert into t (id,a) values (832,54);
+insert into t (id,a) values (832,55);
+insert into t (id,a) values (832,56);
+insert into t (id,a) values (832,57);
+insert into t (id,a) values (832,58);
+insert into t (id,a) values (832,59);
+insert into t (id,a) values (832,60);
+insert into t (id,a) values (832,61);
+insert into t (id,a) values (832,62);
+insert into t (id,a) values (832,63);
+insert into t (id,a) values (832,64);
+insert into t (id,a) values (832,65);
+insert into t (id,a) values (832,66);
+insert into t (id,a) values (832,67);
+insert into t (id,a) values (832,68);
+insert into t (id,a) values (832,69);
+insert into t (id,a) values (832,70);
+insert into t (id,a) values (832,71);
+insert into t (id,a) values (832,72);
+insert into t (id,a) values (832,73);
+insert into t (id,a) values (832,74);
+insert into t (id,a) values (832,75);
+insert into t (id,a) values (832,76);
+insert into t (id,a) values (832,77);
+insert into t (id,a) values (832,78);
+insert into t (id,a) values (832,79);
+insert into t (id,a) values (832,80);
+insert into t (id,a) values (832,81);
+insert into t (id,a) values (832,82);
+insert into t (id,a) values (832,83);
+insert into t (id,a) values (832,84);
+insert into t (id,a) values (832,85);
+insert into t (id,a) values (832,86);
+insert into t (id,a) values (832,87);
+insert into t (id,a) values (832,88);
+insert into t (id,a) values (832,89);
+insert into t (id,a) values (832,90);
+insert into t (id,a) values (832,91);
+insert into t (id,a) values (832,92);
+insert into t (id,a) values (832,93);
+insert into t (id,a) values (832,94);
+insert into t (id,a) values (832,95);
+insert into t (id,a) values (832,96);
+insert into t (id,a) values (832,97);
+insert into t (id,a) values (832,98);
+insert into t (id,a) values (832,99);
+insert into t (id,a) values (833,0);
+insert into t (id,a) values (833,1);
+insert into t (id,a) values (833,2);
+insert into t (id,a) values (833,3);
+insert into t (id,a) values (833,4);
+insert into t (id,a) values (833,5);
+insert into t (id,a) values (833,6);
+insert into t (id,a) values (833,7);
+insert into t (id,a) values (833,8);
+insert into t (id,a) values (833,9);
+insert into t (id,a) values (833,10);
+insert into t (id,a) values (833,11);
+insert into t (id,a) values (833,12);
+insert into t (id,a) values (833,13);
+insert into t (id,a) values (833,14);
+insert into t (id,a) values (833,15);
+insert into t (id,a) values (833,16);
+insert into t (id,a) values (833,17);
+insert into t (id,a) values (833,18);
+insert into t (id,a) values (833,19);
+insert into t (id,a) values (833,20);
+insert into t (id,a) values (833,21);
+insert into t (id,a) values (833,22);
+insert into t (id,a) values (833,23);
+insert into t (id,a) values (833,24);
+insert into t (id,a) values (833,25);
+insert into t (id,a) values (833,26);
+insert into t (id,a) values (833,27);
+insert into t (id,a) values (833,28);
+insert into t (id,a) values (833,29);
+insert into t (id,a) values (833,30);
+insert into t (id,a) values (833,31);
+insert into t (id,a) values (833,32);
+insert into t (id,a) values (833,33);
+insert into t (id,a) values (833,34);
+insert into t (id,a) values (833,35);
+insert into t (id,a) values (833,36);
+insert into t (id,a) values (833,37);
+insert into t (id,a) values (833,38);
+insert into t (id,a) values (833,39);
+insert into t (id,a) values (833,40);
+insert into t (id,a) values (833,41);
+insert into t (id,a) values (833,42);
+insert into t (id,a) values (833,43);
+insert into t (id,a) values (833,44);
+insert into t (id,a) values (833,45);
+insert into t (id,a) values (833,46);
+insert into t (id,a) values (833,47);
+insert into t (id,a) values (833,48);
+insert into t (id,a) values (833,49);
+insert into t (id,a) values (833,50);
+insert into t (id,a) values (833,51);
+insert into t (id,a) values (833,52);
+insert into t (id,a) values (833,53);
+insert into t (id,a) values (833,54);
+insert into t (id,a) values (833,55);
+insert into t (id,a) values (833,56);
+insert into t (id,a) values (833,57);
+insert into t (id,a) values (833,58);
+insert into t (id,a) values (833,59);
+insert into t (id,a) values (833,60);
+insert into t (id,a) values (833,61);
+insert into t (id,a) values (833,62);
+insert into t (id,a) values (833,63);
+insert into t (id,a) values (833,64);
+insert into t (id,a) values (833,65);
+insert into t (id,a) values (833,66);
+insert into t (id,a) values (833,67);
+insert into t (id,a) values (833,68);
+insert into t (id,a) values (833,69);
+insert into t (id,a) values (833,70);
+insert into t (id,a) values (833,71);
+insert into t (id,a) values (833,72);
+insert into t (id,a) values (833,73);
+insert into t (id,a) values (833,74);
+insert into t (id,a) values (833,75);
+insert into t (id,a) values (833,76);
+insert into t (id,a) values (833,77);
+insert into t (id,a) values (833,78);
+insert into t (id,a) values (833,79);
+insert into t (id,a) values (833,80);
+insert into t (id,a) values (833,81);
+insert into t (id,a) values (833,82);
+insert into t (id,a) values (833,83);
+insert into t (id,a) values (833,84);
+insert into t (id,a) values (833,85);
+insert into t (id,a) values (833,86);
+insert into t (id,a) values (833,87);
+insert into t (id,a) values (833,88);
+insert into t (id,a) values (833,89);
+insert into t (id,a) values (833,90);
+insert into t (id,a) values (833,91);
+insert into t (id,a) values (833,92);
+insert into t (id,a) values (833,93);
+insert into t (id,a) values (833,94);
+insert into t (id,a) values (833,95);
+insert into t (id,a) values (833,96);
+insert into t (id,a) values (833,97);
+insert into t (id,a) values (833,98);
+insert into t (id,a) values (833,99);
+insert into t (id,a) values (834,0);
+insert into t (id,a) values (834,1);
+insert into t (id,a) values (834,2);
+insert into t (id,a) values (834,3);
+insert into t (id,a) values (834,4);
+insert into t (id,a) values (834,5);
+insert into t (id,a) values (834,6);
+insert into t (id,a) values (834,7);
+insert into t (id,a) values (834,8);
+insert into t (id,a) values (834,9);
+insert into t (id,a) values (834,10);
+insert into t (id,a) values (834,11);
+insert into t (id,a) values (834,12);
+insert into t (id,a) values (834,13);
+insert into t (id,a) values (834,14);
+insert into t (id,a) values (834,15);
+insert into t (id,a) values (834,16);
+insert into t (id,a) values (834,17);
+insert into t (id,a) values (834,18);
+insert into t (id,a) values (834,19);
+insert into t (id,a) values (834,20);
+insert into t (id,a) values (834,21);
+insert into t (id,a) values (834,22);
+insert into t (id,a) values (834,23);
+insert into t (id,a) values (834,24);
+insert into t (id,a) values (834,25);
+insert into t (id,a) values (834,26);
+insert into t (id,a) values (834,27);
+insert into t (id,a) values (834,28);
+insert into t (id,a) values (834,29);
+insert into t (id,a) values (834,30);
+insert into t (id,a) values (834,31);
+insert into t (id,a) values (834,32);
+insert into t (id,a) values (834,33);
+insert into t (id,a) values (834,34);
+insert into t (id,a) values (834,35);
+insert into t (id,a) values (834,36);
+insert into t (id,a) values (834,37);
+insert into t (id,a) values (834,38);
+insert into t (id,a) values (834,39);
+insert into t (id,a) values (834,40);
+insert into t (id,a) values (834,41);
+insert into t (id,a) values (834,42);
+insert into t (id,a) values (834,43);
+insert into t (id,a) values (834,44);
+insert into t (id,a) values (834,45);
+insert into t (id,a) values (834,46);
+insert into t (id,a) values (834,47);
+insert into t (id,a) values (834,48);
+insert into t (id,a) values (834,49);
+insert into t (id,a) values (834,50);
+insert into t (id,a) values (834,51);
+insert into t (id,a) values (834,52);
+insert into t (id,a) values (834,53);
+insert into t (id,a) values (834,54);
+insert into t (id,a) values (834,55);
+insert into t (id,a) values (834,56);
+insert into t (id,a) values (834,57);
+insert into t (id,a) values (834,58);
+insert into t (id,a) values (834,59);
+insert into t (id,a) values (834,60);
+insert into t (id,a) values (834,61);
+insert into t (id,a) values (834,62);
+insert into t (id,a) values (834,63);
+insert into t (id,a) values (834,64);
+insert into t (id,a) values (834,65);
+insert into t (id,a) values (834,66);
+insert into t (id,a) values (834,67);
+insert into t (id,a) values (834,68);
+insert into t (id,a) values (834,69);
+insert into t (id,a) values (834,70);
+insert into t (id,a) values (834,71);
+insert into t (id,a) values (834,72);
+insert into t (id,a) values (834,73);
+insert into t (id,a) values (834,74);
+insert into t (id,a) values (834,75);
+insert into t (id,a) values (834,76);
+insert into t (id,a) values (834,77);
+insert into t (id,a) values (834,78);
+insert into t (id,a) values (834,79);
+insert into t (id,a) values (834,80);
+insert into t (id,a) values (834,81);
+insert into t (id,a) values (834,82);
+insert into t (id,a) values (834,83);
+insert into t (id,a) values (834,84);
+insert into t (id,a) values (834,85);
+insert into t (id,a) values (834,86);
+insert into t (id,a) values (834,87);
+insert into t (id,a) values (834,88);
+insert into t (id,a) values (834,89);
+insert into t (id,a) values (834,90);
+insert into t (id,a) values (834,91);
+insert into t (id,a) values (834,92);
+insert into t (id,a) values (834,93);
+insert into t (id,a) values (834,94);
+insert into t (id,a) values (834,95);
+insert into t (id,a) values (834,96);
+insert into t (id,a) values (834,97);
+insert into t (id,a) values (834,98);
+insert into t (id,a) values (834,99);
+insert into t (id,a) values (835,0);
+insert into t (id,a) values (835,1);
+insert into t (id,a) values (835,2);
+insert into t (id,a) values (835,3);
+insert into t (id,a) values (835,4);
+insert into t (id,a) values (835,5);
+insert into t (id,a) values (835,6);
+insert into t (id,a) values (835,7);
+insert into t (id,a) values (835,8);
+insert into t (id,a) values (835,9);
+insert into t (id,a) values (835,10);
+insert into t (id,a) values (835,11);
+insert into t (id,a) values (835,12);
+insert into t (id,a) values (835,13);
+insert into t (id,a) values (835,14);
+insert into t (id,a) values (835,15);
+insert into t (id,a) values (835,16);
+insert into t (id,a) values (835,17);
+insert into t (id,a) values (835,18);
+insert into t (id,a) values (835,19);
+insert into t (id,a) values (835,20);
+insert into t (id,a) values (835,21);
+insert into t (id,a) values (835,22);
+insert into t (id,a) values (835,23);
+insert into t (id,a) values (835,24);
+insert into t (id,a) values (835,25);
+insert into t (id,a) values (835,26);
+insert into t (id,a) values (835,27);
+insert into t (id,a) values (835,28);
+insert into t (id,a) values (835,29);
+insert into t (id,a) values (835,30);
+insert into t (id,a) values (835,31);
+insert into t (id,a) values (835,32);
+insert into t (id,a) values (835,33);
+insert into t (id,a) values (835,34);
+insert into t (id,a) values (835,35);
+insert into t (id,a) values (835,36);
+insert into t (id,a) values (835,37);
+insert into t (id,a) values (835,38);
+insert into t (id,a) values (835,39);
+insert into t (id,a) values (835,40);
+insert into t (id,a) values (835,41);
+insert into t (id,a) values (835,42);
+insert into t (id,a) values (835,43);
+insert into t (id,a) values (835,44);
+insert into t (id,a) values (835,45);
+insert into t (id,a) values (835,46);
+insert into t (id,a) values (835,47);
+insert into t (id,a) values (835,48);
+insert into t (id,a) values (835,49);
+insert into t (id,a) values (835,50);
+insert into t (id,a) values (835,51);
+insert into t (id,a) values (835,52);
+insert into t (id,a) values (835,53);
+insert into t (id,a) values (835,54);
+insert into t (id,a) values (835,55);
+insert into t (id,a) values (835,56);
+insert into t (id,a) values (835,57);
+insert into t (id,a) values (835,58);
+insert into t (id,a) values (835,59);
+insert into t (id,a) values (835,60);
+insert into t (id,a) values (835,61);
+insert into t (id,a) values (835,62);
+insert into t (id,a) values (835,63);
+insert into t (id,a) values (835,64);
+insert into t (id,a) values (835,65);
+insert into t (id,a) values (835,66);
+insert into t (id,a) values (835,67);
+insert into t (id,a) values (835,68);
+insert into t (id,a) values (835,69);
+insert into t (id,a) values (835,70);
+insert into t (id,a) values (835,71);
+insert into t (id,a) values (835,72);
+insert into t (id,a) values (835,73);
+insert into t (id,a) values (835,74);
+insert into t (id,a) values (835,75);
+insert into t (id,a) values (835,76);
+insert into t (id,a) values (835,77);
+insert into t (id,a) values (835,78);
+insert into t (id,a) values (835,79);
+insert into t (id,a) values (835,80);
+insert into t (id,a) values (835,81);
+insert into t (id,a) values (835,82);
+insert into t (id,a) values (835,83);
+insert into t (id,a) values (835,84);
+insert into t (id,a) values (835,85);
+insert into t (id,a) values (835,86);
+insert into t (id,a) values (835,87);
+insert into t (id,a) values (835,88);
+insert into t (id,a) values (835,89);
+insert into t (id,a) values (835,90);
+insert into t (id,a) values (835,91);
+insert into t (id,a) values (835,92);
+insert into t (id,a) values (835,93);
+insert into t (id,a) values (835,94);
+insert into t (id,a) values (835,95);
+insert into t (id,a) values (835,96);
+insert into t (id,a) values (835,97);
+insert into t (id,a) values (835,98);
+insert into t (id,a) values (835,99);
+insert into t (id,a) values (836,0);
+insert into t (id,a) values (836,1);
+insert into t (id,a) values (836,2);
+insert into t (id,a) values (836,3);
+insert into t (id,a) values (836,4);
+insert into t (id,a) values (836,5);
+insert into t (id,a) values (836,6);
+insert into t (id,a) values (836,7);
+insert into t (id,a) values (836,8);
+insert into t (id,a) values (836,9);
+insert into t (id,a) values (836,10);
+insert into t (id,a) values (836,11);
+insert into t (id,a) values (836,12);
+insert into t (id,a) values (836,13);
+insert into t (id,a) values (836,14);
+insert into t (id,a) values (836,15);
+insert into t (id,a) values (836,16);
+insert into t (id,a) values (836,17);
+insert into t (id,a) values (836,18);
+insert into t (id,a) values (836,19);
+insert into t (id,a) values (836,20);
+insert into t (id,a) values (836,21);
+insert into t (id,a) values (836,22);
+insert into t (id,a) values (836,23);
+insert into t (id,a) values (836,24);
+insert into t (id,a) values (836,25);
+insert into t (id,a) values (836,26);
+insert into t (id,a) values (836,27);
+insert into t (id,a) values (836,28);
+insert into t (id,a) values (836,29);
+insert into t (id,a) values (836,30);
+insert into t (id,a) values (836,31);
+insert into t (id,a) values (836,32);
+insert into t (id,a) values (836,33);
+insert into t (id,a) values (836,34);
+insert into t (id,a) values (836,35);
+insert into t (id,a) values (836,36);
+insert into t (id,a) values (836,37);
+insert into t (id,a) values (836,38);
+insert into t (id,a) values (836,39);
+insert into t (id,a) values (836,40);
+insert into t (id,a) values (836,41);
+insert into t (id,a) values (836,42);
+insert into t (id,a) values (836,43);
+insert into t (id,a) values (836,44);
+insert into t (id,a) values (836,45);
+insert into t (id,a) values (836,46);
+insert into t (id,a) values (836,47);
+insert into t (id,a) values (836,48);
+insert into t (id,a) values (836,49);
+insert into t (id,a) values (836,50);
+insert into t (id,a) values (836,51);
+insert into t (id,a) values (836,52);
+insert into t (id,a) values (836,53);
+insert into t (id,a) values (836,54);
+insert into t (id,a) values (836,55);
+insert into t (id,a) values (836,56);
+insert into t (id,a) values (836,57);
+insert into t (id,a) values (836,58);
+insert into t (id,a) values (836,59);
+insert into t (id,a) values (836,60);
+insert into t (id,a) values (836,61);
+insert into t (id,a) values (836,62);
+insert into t (id,a) values (836,63);
+insert into t (id,a) values (836,64);
+insert into t (id,a) values (836,65);
+insert into t (id,a) values (836,66);
+insert into t (id,a) values (836,67);
+insert into t (id,a) values (836,68);
+insert into t (id,a) values (836,69);
+insert into t (id,a) values (836,70);
+insert into t (id,a) values (836,71);
+insert into t (id,a) values (836,72);
+insert into t (id,a) values (836,73);
+insert into t (id,a) values (836,74);
+insert into t (id,a) values (836,75);
+insert into t (id,a) values (836,76);
+insert into t (id,a) values (836,77);
+insert into t (id,a) values (836,78);
+insert into t (id,a) values (836,79);
+insert into t (id,a) values (836,80);
+insert into t (id,a) values (836,81);
+insert into t (id,a) values (836,82);
+insert into t (id,a) values (836,83);
+insert into t (id,a) values (836,84);
+insert into t (id,a) values (836,85);
+insert into t (id,a) values (836,86);
+insert into t (id,a) values (836,87);
+insert into t (id,a) values (836,88);
+insert into t (id,a) values (836,89);
+insert into t (id,a) values (836,90);
+insert into t (id,a) values (836,91);
+insert into t (id,a) values (836,92);
+insert into t (id,a) values (836,93);
+insert into t (id,a) values (836,94);
+insert into t (id,a) values (836,95);
+insert into t (id,a) values (836,96);
+insert into t (id,a) values (836,97);
+insert into t (id,a) values (836,98);
+insert into t (id,a) values (836,99);
+insert into t (id,a) values (837,0);
+insert into t (id,a) values (837,1);
+insert into t (id,a) values (837,2);
+insert into t (id,a) values (837,3);
+insert into t (id,a) values (837,4);
+insert into t (id,a) values (837,5);
+insert into t (id,a) values (837,6);
+insert into t (id,a) values (837,7);
+insert into t (id,a) values (837,8);
+insert into t (id,a) values (837,9);
+insert into t (id,a) values (837,10);
+insert into t (id,a) values (837,11);
+insert into t (id,a) values (837,12);
+insert into t (id,a) values (837,13);
+insert into t (id,a) values (837,14);
+insert into t (id,a) values (837,15);
+insert into t (id,a) values (837,16);
+insert into t (id,a) values (837,17);
+insert into t (id,a) values (837,18);
+insert into t (id,a) values (837,19);
+insert into t (id,a) values (837,20);
+insert into t (id,a) values (837,21);
+insert into t (id,a) values (837,22);
+insert into t (id,a) values (837,23);
+insert into t (id,a) values (837,24);
+insert into t (id,a) values (837,25);
+insert into t (id,a) values (837,26);
+insert into t (id,a) values (837,27);
+insert into t (id,a) values (837,28);
+insert into t (id,a) values (837,29);
+insert into t (id,a) values (837,30);
+insert into t (id,a) values (837,31);
+insert into t (id,a) values (837,32);
+insert into t (id,a) values (837,33);
+insert into t (id,a) values (837,34);
+insert into t (id,a) values (837,35);
+insert into t (id,a) values (837,36);
+insert into t (id,a) values (837,37);
+insert into t (id,a) values (837,38);
+insert into t (id,a) values (837,39);
+insert into t (id,a) values (837,40);
+insert into t (id,a) values (837,41);
+insert into t (id,a) values (837,42);
+insert into t (id,a) values (837,43);
+insert into t (id,a) values (837,44);
+insert into t (id,a) values (837,45);
+insert into t (id,a) values (837,46);
+insert into t (id,a) values (837,47);
+insert into t (id,a) values (837,48);
+insert into t (id,a) values (837,49);
+insert into t (id,a) values (837,50);
+insert into t (id,a) values (837,51);
+insert into t (id,a) values (837,52);
+insert into t (id,a) values (837,53);
+insert into t (id,a) values (837,54);
+insert into t (id,a) values (837,55);
+insert into t (id,a) values (837,56);
+insert into t (id,a) values (837,57);
+insert into t (id,a) values (837,58);
+insert into t (id,a) values (837,59);
+insert into t (id,a) values (837,60);
+insert into t (id,a) values (837,61);
+insert into t (id,a) values (837,62);
+insert into t (id,a) values (837,63);
+insert into t (id,a) values (837,64);
+insert into t (id,a) values (837,65);
+insert into t (id,a) values (837,66);
+insert into t (id,a) values (837,67);
+insert into t (id,a) values (837,68);
+insert into t (id,a) values (837,69);
+insert into t (id,a) values (837,70);
+insert into t (id,a) values (837,71);
+insert into t (id,a) values (837,72);
+insert into t (id,a) values (837,73);
+insert into t (id,a) values (837,74);
+insert into t (id,a) values (837,75);
+insert into t (id,a) values (837,76);
+insert into t (id,a) values (837,77);
+insert into t (id,a) values (837,78);
+insert into t (id,a) values (837,79);
+insert into t (id,a) values (837,80);
+insert into t (id,a) values (837,81);
+insert into t (id,a) values (837,82);
+insert into t (id,a) values (837,83);
+insert into t (id,a) values (837,84);
+insert into t (id,a) values (837,85);
+insert into t (id,a) values (837,86);
+insert into t (id,a) values (837,87);
+insert into t (id,a) values (837,88);
+insert into t (id,a) values (837,89);
+insert into t (id,a) values (837,90);
+insert into t (id,a) values (837,91);
+insert into t (id,a) values (837,92);
+insert into t (id,a) values (837,93);
+insert into t (id,a) values (837,94);
+insert into t (id,a) values (837,95);
+insert into t (id,a) values (837,96);
+insert into t (id,a) values (837,97);
+insert into t (id,a) values (837,98);
+insert into t (id,a) values (837,99);
+insert into t (id,a) values (838,0);
+insert into t (id,a) values (838,1);
+insert into t (id,a) values (838,2);
+insert into t (id,a) values (838,3);
+insert into t (id,a) values (838,4);
+insert into t (id,a) values (838,5);
+insert into t (id,a) values (838,6);
+insert into t (id,a) values (838,7);
+insert into t (id,a) values (838,8);
+insert into t (id,a) values (838,9);
+insert into t (id,a) values (838,10);
+insert into t (id,a) values (838,11);
+insert into t (id,a) values (838,12);
+insert into t (id,a) values (838,13);
+insert into t (id,a) values (838,14);
+insert into t (id,a) values (838,15);
+insert into t (id,a) values (838,16);
+insert into t (id,a) values (838,17);
+insert into t (id,a) values (838,18);
+insert into t (id,a) values (838,19);
+insert into t (id,a) values (838,20);
+insert into t (id,a) values (838,21);
+insert into t (id,a) values (838,22);
+insert into t (id,a) values (838,23);
+insert into t (id,a) values (838,24);
+insert into t (id,a) values (838,25);
+insert into t (id,a) values (838,26);
+insert into t (id,a) values (838,27);
+insert into t (id,a) values (838,28);
+insert into t (id,a) values (838,29);
+insert into t (id,a) values (838,30);
+insert into t (id,a) values (838,31);
+insert into t (id,a) values (838,32);
+insert into t (id,a) values (838,33);
+insert into t (id,a) values (838,34);
+insert into t (id,a) values (838,35);
+insert into t (id,a) values (838,36);
+insert into t (id,a) values (838,37);
+insert into t (id,a) values (838,38);
+insert into t (id,a) values (838,39);
+insert into t (id,a) values (838,40);
+insert into t (id,a) values (838,41);
+insert into t (id,a) values (838,42);
+insert into t (id,a) values (838,43);
+insert into t (id,a) values (838,44);
+insert into t (id,a) values (838,45);
+insert into t (id,a) values (838,46);
+insert into t (id,a) values (838,47);
+insert into t (id,a) values (838,48);
+insert into t (id,a) values (838,49);
+insert into t (id,a) values (838,50);
+insert into t (id,a) values (838,51);
+insert into t (id,a) values (838,52);
+insert into t (id,a) values (838,53);
+insert into t (id,a) values (838,54);
+insert into t (id,a) values (838,55);
+insert into t (id,a) values (838,56);
+insert into t (id,a) values (838,57);
+insert into t (id,a) values (838,58);
+insert into t (id,a) values (838,59);
+insert into t (id,a) values (838,60);
+insert into t (id,a) values (838,61);
+insert into t (id,a) values (838,62);
+insert into t (id,a) values (838,63);
+insert into t (id,a) values (838,64);
+insert into t (id,a) values (838,65);
+insert into t (id,a) values (838,66);
+insert into t (id,a) values (838,67);
+insert into t (id,a) values (838,68);
+insert into t (id,a) values (838,69);
+insert into t (id,a) values (838,70);
+insert into t (id,a) values (838,71);
+insert into t (id,a) values (838,72);
+insert into t (id,a) values (838,73);
+insert into t (id,a) values (838,74);
+insert into t (id,a) values (838,75);
+insert into t (id,a) values (838,76);
+insert into t (id,a) values (838,77);
+insert into t (id,a) values (838,78);
+insert into t (id,a) values (838,79);
+insert into t (id,a) values (838,80);
+insert into t (id,a) values (838,81);
+insert into t (id,a) values (838,82);
+insert into t (id,a) values (838,83);
+insert into t (id,a) values (838,84);
+insert into t (id,a) values (838,85);
+insert into t (id,a) values (838,86);
+insert into t (id,a) values (838,87);
+insert into t (id,a) values (838,88);
+insert into t (id,a) values (838,89);
+insert into t (id,a) values (838,90);
+insert into t (id,a) values (838,91);
+insert into t (id,a) values (838,92);
+insert into t (id,a) values (838,93);
+insert into t (id,a) values (838,94);
+insert into t (id,a) values (838,95);
+insert into t (id,a) values (838,96);
+insert into t (id,a) values (838,97);
+insert into t (id,a) values (838,98);
+insert into t (id,a) values (838,99);
+insert into t (id,a) values (839,0);
+insert into t (id,a) values (839,1);
+insert into t (id,a) values (839,2);
+insert into t (id,a) values (839,3);
+insert into t (id,a) values (839,4);
+insert into t (id,a) values (839,5);
+insert into t (id,a) values (839,6);
+insert into t (id,a) values (839,7);
+insert into t (id,a) values (839,8);
+insert into t (id,a) values (839,9);
+insert into t (id,a) values (839,10);
+insert into t (id,a) values (839,11);
+insert into t (id,a) values (839,12);
+insert into t (id,a) values (839,13);
+insert into t (id,a) values (839,14);
+insert into t (id,a) values (839,15);
+insert into t (id,a) values (839,16);
+insert into t (id,a) values (839,17);
+insert into t (id,a) values (839,18);
+insert into t (id,a) values (839,19);
+insert into t (id,a) values (839,20);
+insert into t (id,a) values (839,21);
+insert into t (id,a) values (839,22);
+insert into t (id,a) values (839,23);
+insert into t (id,a) values (839,24);
+insert into t (id,a) values (839,25);
+insert into t (id,a) values (839,26);
+insert into t (id,a) values (839,27);
+insert into t (id,a) values (839,28);
+insert into t (id,a) values (839,29);
+insert into t (id,a) values (839,30);
+insert into t (id,a) values (839,31);
+insert into t (id,a) values (839,32);
+insert into t (id,a) values (839,33);
+insert into t (id,a) values (839,34);
+insert into t (id,a) values (839,35);
+insert into t (id,a) values (839,36);
+insert into t (id,a) values (839,37);
+insert into t (id,a) values (839,38);
+insert into t (id,a) values (839,39);
+insert into t (id,a) values (839,40);
+insert into t (id,a) values (839,41);
+insert into t (id,a) values (839,42);
+insert into t (id,a) values (839,43);
+insert into t (id,a) values (839,44);
+insert into t (id,a) values (839,45);
+insert into t (id,a) values (839,46);
+insert into t (id,a) values (839,47);
+insert into t (id,a) values (839,48);
+insert into t (id,a) values (839,49);
+insert into t (id,a) values (839,50);
+insert into t (id,a) values (839,51);
+insert into t (id,a) values (839,52);
+insert into t (id,a) values (839,53);
+insert into t (id,a) values (839,54);
+insert into t (id,a) values (839,55);
+insert into t (id,a) values (839,56);
+insert into t (id,a) values (839,57);
+insert into t (id,a) values (839,58);
+insert into t (id,a) values (839,59);
+insert into t (id,a) values (839,60);
+insert into t (id,a) values (839,61);
+insert into t (id,a) values (839,62);
+insert into t (id,a) values (839,63);
+insert into t (id,a) values (839,64);
+insert into t (id,a) values (839,65);
+insert into t (id,a) values (839,66);
+insert into t (id,a) values (839,67);
+insert into t (id,a) values (839,68);
+insert into t (id,a) values (839,69);
+insert into t (id,a) values (839,70);
+insert into t (id,a) values (839,71);
+insert into t (id,a) values (839,72);
+insert into t (id,a) values (839,73);
+insert into t (id,a) values (839,74);
+insert into t (id,a) values (839,75);
+insert into t (id,a) values (839,76);
+insert into t (id,a) values (839,77);
+insert into t (id,a) values (839,78);
+insert into t (id,a) values (839,79);
+insert into t (id,a) values (839,80);
+insert into t (id,a) values (839,81);
+insert into t (id,a) values (839,82);
+insert into t (id,a) values (839,83);
+insert into t (id,a) values (839,84);
+insert into t (id,a) values (839,85);
+insert into t (id,a) values (839,86);
+insert into t (id,a) values (839,87);
+insert into t (id,a) values (839,88);
+insert into t (id,a) values (839,89);
+insert into t (id,a) values (839,90);
+insert into t (id,a) values (839,91);
+insert into t (id,a) values (839,92);
+insert into t (id,a) values (839,93);
+insert into t (id,a) values (839,94);
+insert into t (id,a) values (839,95);
+insert into t (id,a) values (839,96);
+insert into t (id,a) values (839,97);
+insert into t (id,a) values (839,98);
+insert into t (id,a) values (839,99);
+insert into t (id,a) values (840,0);
+insert into t (id,a) values (840,1);
+insert into t (id,a) values (840,2);
+insert into t (id,a) values (840,3);
+insert into t (id,a) values (840,4);
+insert into t (id,a) values (840,5);
+insert into t (id,a) values (840,6);
+insert into t (id,a) values (840,7);
+insert into t (id,a) values (840,8);
+insert into t (id,a) values (840,9);
+insert into t (id,a) values (840,10);
+insert into t (id,a) values (840,11);
+insert into t (id,a) values (840,12);
+insert into t (id,a) values (840,13);
+insert into t (id,a) values (840,14);
+insert into t (id,a) values (840,15);
+insert into t (id,a) values (840,16);
+insert into t (id,a) values (840,17);
+insert into t (id,a) values (840,18);
+insert into t (id,a) values (840,19);
+insert into t (id,a) values (840,20);
+insert into t (id,a) values (840,21);
+insert into t (id,a) values (840,22);
+insert into t (id,a) values (840,23);
+insert into t (id,a) values (840,24);
+insert into t (id,a) values (840,25);
+insert into t (id,a) values (840,26);
+insert into t (id,a) values (840,27);
+insert into t (id,a) values (840,28);
+insert into t (id,a) values (840,29);
+insert into t (id,a) values (840,30);
+insert into t (id,a) values (840,31);
+insert into t (id,a) values (840,32);
+insert into t (id,a) values (840,33);
+insert into t (id,a) values (840,34);
+insert into t (id,a) values (840,35);
+insert into t (id,a) values (840,36);
+insert into t (id,a) values (840,37);
+insert into t (id,a) values (840,38);
+insert into t (id,a) values (840,39);
+insert into t (id,a) values (840,40);
+insert into t (id,a) values (840,41);
+insert into t (id,a) values (840,42);
+insert into t (id,a) values (840,43);
+insert into t (id,a) values (840,44);
+insert into t (id,a) values (840,45);
+insert into t (id,a) values (840,46);
+insert into t (id,a) values (840,47);
+insert into t (id,a) values (840,48);
+insert into t (id,a) values (840,49);
+insert into t (id,a) values (840,50);
+insert into t (id,a) values (840,51);
+insert into t (id,a) values (840,52);
+insert into t (id,a) values (840,53);
+insert into t (id,a) values (840,54);
+insert into t (id,a) values (840,55);
+insert into t (id,a) values (840,56);
+insert into t (id,a) values (840,57);
+insert into t (id,a) values (840,58);
+insert into t (id,a) values (840,59);
+insert into t (id,a) values (840,60);
+insert into t (id,a) values (840,61);
+insert into t (id,a) values (840,62);
+insert into t (id,a) values (840,63);
+insert into t (id,a) values (840,64);
+insert into t (id,a) values (840,65);
+insert into t (id,a) values (840,66);
+insert into t (id,a) values (840,67);
+insert into t (id,a) values (840,68);
+insert into t (id,a) values (840,69);
+insert into t (id,a) values (840,70);
+insert into t (id,a) values (840,71);
+insert into t (id,a) values (840,72);
+insert into t (id,a) values (840,73);
+insert into t (id,a) values (840,74);
+insert into t (id,a) values (840,75);
+insert into t (id,a) values (840,76);
+insert into t (id,a) values (840,77);
+insert into t (id,a) values (840,78);
+insert into t (id,a) values (840,79);
+insert into t (id,a) values (840,80);
+insert into t (id,a) values (840,81);
+insert into t (id,a) values (840,82);
+insert into t (id,a) values (840,83);
+insert into t (id,a) values (840,84);
+insert into t (id,a) values (840,85);
+insert into t (id,a) values (840,86);
+insert into t (id,a) values (840,87);
+insert into t (id,a) values (840,88);
+insert into t (id,a) values (840,89);
+insert into t (id,a) values (840,90);
+insert into t (id,a) values (840,91);
+insert into t (id,a) values (840,92);
+insert into t (id,a) values (840,93);
+insert into t (id,a) values (840,94);
+insert into t (id,a) values (840,95);
+insert into t (id,a) values (840,96);
+insert into t (id,a) values (840,97);
+insert into t (id,a) values (840,98);
+insert into t (id,a) values (840,99);
+insert into t (id,a) values (841,0);
+insert into t (id,a) values (841,1);
+insert into t (id,a) values (841,2);
+insert into t (id,a) values (841,3);
+insert into t (id,a) values (841,4);
+insert into t (id,a) values (841,5);
+insert into t (id,a) values (841,6);
+insert into t (id,a) values (841,7);
+insert into t (id,a) values (841,8);
+insert into t (id,a) values (841,9);
+insert into t (id,a) values (841,10);
+insert into t (id,a) values (841,11);
+insert into t (id,a) values (841,12);
+insert into t (id,a) values (841,13);
+insert into t (id,a) values (841,14);
+insert into t (id,a) values (841,15);
+insert into t (id,a) values (841,16);
+insert into t (id,a) values (841,17);
+insert into t (id,a) values (841,18);
+insert into t (id,a) values (841,19);
+insert into t (id,a) values (841,20);
+insert into t (id,a) values (841,21);
+insert into t (id,a) values (841,22);
+insert into t (id,a) values (841,23);
+insert into t (id,a) values (841,24);
+insert into t (id,a) values (841,25);
+insert into t (id,a) values (841,26);
+insert into t (id,a) values (841,27);
+insert into t (id,a) values (841,28);
+insert into t (id,a) values (841,29);
+insert into t (id,a) values (841,30);
+insert into t (id,a) values (841,31);
+insert into t (id,a) values (841,32);
+insert into t (id,a) values (841,33);
+insert into t (id,a) values (841,34);
+insert into t (id,a) values (841,35);
+insert into t (id,a) values (841,36);
+insert into t (id,a) values (841,37);
+insert into t (id,a) values (841,38);
+insert into t (id,a) values (841,39);
+insert into t (id,a) values (841,40);
+insert into t (id,a) values (841,41);
+insert into t (id,a) values (841,42);
+insert into t (id,a) values (841,43);
+insert into t (id,a) values (841,44);
+insert into t (id,a) values (841,45);
+insert into t (id,a) values (841,46);
+insert into t (id,a) values (841,47);
+insert into t (id,a) values (841,48);
+insert into t (id,a) values (841,49);
+insert into t (id,a) values (841,50);
+insert into t (id,a) values (841,51);
+insert into t (id,a) values (841,52);
+insert into t (id,a) values (841,53);
+insert into t (id,a) values (841,54);
+insert into t (id,a) values (841,55);
+insert into t (id,a) values (841,56);
+insert into t (id,a) values (841,57);
+insert into t (id,a) values (841,58);
+insert into t (id,a) values (841,59);
+insert into t (id,a) values (841,60);
+insert into t (id,a) values (841,61);
+insert into t (id,a) values (841,62);
+insert into t (id,a) values (841,63);
+insert into t (id,a) values (841,64);
+insert into t (id,a) values (841,65);
+insert into t (id,a) values (841,66);
+insert into t (id,a) values (841,67);
+insert into t (id,a) values (841,68);
+insert into t (id,a) values (841,69);
+insert into t (id,a) values (841,70);
+insert into t (id,a) values (841,71);
+insert into t (id,a) values (841,72);
+insert into t (id,a) values (841,73);
+insert into t (id,a) values (841,74);
+insert into t (id,a) values (841,75);
+insert into t (id,a) values (841,76);
+insert into t (id,a) values (841,77);
+insert into t (id,a) values (841,78);
+insert into t (id,a) values (841,79);
+insert into t (id,a) values (841,80);
+insert into t (id,a) values (841,81);
+insert into t (id,a) values (841,82);
+insert into t (id,a) values (841,83);
+insert into t (id,a) values (841,84);
+insert into t (id,a) values (841,85);
+insert into t (id,a) values (841,86);
+insert into t (id,a) values (841,87);
+insert into t (id,a) values (841,88);
+insert into t (id,a) values (841,89);
+insert into t (id,a) values (841,90);
+insert into t (id,a) values (841,91);
+insert into t (id,a) values (841,92);
+insert into t (id,a) values (841,93);
+insert into t (id,a) values (841,94);
+insert into t (id,a) values (841,95);
+insert into t (id,a) values (841,96);
+insert into t (id,a) values (841,97);
+insert into t (id,a) values (841,98);
+insert into t (id,a) values (841,99);
+insert into t (id,a) values (842,0);
+insert into t (id,a) values (842,1);
+insert into t (id,a) values (842,2);
+insert into t (id,a) values (842,3);
+insert into t (id,a) values (842,4);
+insert into t (id,a) values (842,5);
+insert into t (id,a) values (842,6);
+insert into t (id,a) values (842,7);
+insert into t (id,a) values (842,8);
+insert into t (id,a) values (842,9);
+insert into t (id,a) values (842,10);
+insert into t (id,a) values (842,11);
+insert into t (id,a) values (842,12);
+insert into t (id,a) values (842,13);
+insert into t (id,a) values (842,14);
+insert into t (id,a) values (842,15);
+insert into t (id,a) values (842,16);
+insert into t (id,a) values (842,17);
+insert into t (id,a) values (842,18);
+insert into t (id,a) values (842,19);
+insert into t (id,a) values (842,20);
+insert into t (id,a) values (842,21);
+insert into t (id,a) values (842,22);
+insert into t (id,a) values (842,23);
+insert into t (id,a) values (842,24);
+insert into t (id,a) values (842,25);
+insert into t (id,a) values (842,26);
+insert into t (id,a) values (842,27);
+insert into t (id,a) values (842,28);
+insert into t (id,a) values (842,29);
+insert into t (id,a) values (842,30);
+insert into t (id,a) values (842,31);
+insert into t (id,a) values (842,32);
+insert into t (id,a) values (842,33);
+insert into t (id,a) values (842,34);
+insert into t (id,a) values (842,35);
+insert into t (id,a) values (842,36);
+insert into t (id,a) values (842,37);
+insert into t (id,a) values (842,38);
+insert into t (id,a) values (842,39);
+insert into t (id,a) values (842,40);
+insert into t (id,a) values (842,41);
+insert into t (id,a) values (842,42);
+insert into t (id,a) values (842,43);
+insert into t (id,a) values (842,44);
+insert into t (id,a) values (842,45);
+insert into t (id,a) values (842,46);
+insert into t (id,a) values (842,47);
+insert into t (id,a) values (842,48);
+insert into t (id,a) values (842,49);
+insert into t (id,a) values (842,50);
+insert into t (id,a) values (842,51);
+insert into t (id,a) values (842,52);
+insert into t (id,a) values (842,53);
+insert into t (id,a) values (842,54);
+insert into t (id,a) values (842,55);
+insert into t (id,a) values (842,56);
+insert into t (id,a) values (842,57);
+insert into t (id,a) values (842,58);
+insert into t (id,a) values (842,59);
+insert into t (id,a) values (842,60);
+insert into t (id,a) values (842,61);
+insert into t (id,a) values (842,62);
+insert into t (id,a) values (842,63);
+insert into t (id,a) values (842,64);
+insert into t (id,a) values (842,65);
+insert into t (id,a) values (842,66);
+insert into t (id,a) values (842,67);
+insert into t (id,a) values (842,68);
+insert into t (id,a) values (842,69);
+insert into t (id,a) values (842,70);
+insert into t (id,a) values (842,71);
+insert into t (id,a) values (842,72);
+insert into t (id,a) values (842,73);
+insert into t (id,a) values (842,74);
+insert into t (id,a) values (842,75);
+insert into t (id,a) values (842,76);
+insert into t (id,a) values (842,77);
+insert into t (id,a) values (842,78);
+insert into t (id,a) values (842,79);
+insert into t (id,a) values (842,80);
+insert into t (id,a) values (842,81);
+insert into t (id,a) values (842,82);
+insert into t (id,a) values (842,83);
+insert into t (id,a) values (842,84);
+insert into t (id,a) values (842,85);
+insert into t (id,a) values (842,86);
+insert into t (id,a) values (842,87);
+insert into t (id,a) values (842,88);
+insert into t (id,a) values (842,89);
+insert into t (id,a) values (842,90);
+insert into t (id,a) values (842,91);
+insert into t (id,a) values (842,92);
+insert into t (id,a) values (842,93);
+insert into t (id,a) values (842,94);
+insert into t (id,a) values (842,95);
+insert into t (id,a) values (842,96);
+insert into t (id,a) values (842,97);
+insert into t (id,a) values (842,98);
+insert into t (id,a) values (842,99);
+insert into t (id,a) values (843,0);
+insert into t (id,a) values (843,1);
+insert into t (id,a) values (843,2);
+insert into t (id,a) values (843,3);
+insert into t (id,a) values (843,4);
+insert into t (id,a) values (843,5);
+insert into t (id,a) values (843,6);
+insert into t (id,a) values (843,7);
+insert into t (id,a) values (843,8);
+insert into t (id,a) values (843,9);
+insert into t (id,a) values (843,10);
+insert into t (id,a) values (843,11);
+insert into t (id,a) values (843,12);
+insert into t (id,a) values (843,13);
+insert into t (id,a) values (843,14);
+insert into t (id,a) values (843,15);
+insert into t (id,a) values (843,16);
+insert into t (id,a) values (843,17);
+insert into t (id,a) values (843,18);
+insert into t (id,a) values (843,19);
+insert into t (id,a) values (843,20);
+insert into t (id,a) values (843,21);
+insert into t (id,a) values (843,22);
+insert into t (id,a) values (843,23);
+insert into t (id,a) values (843,24);
+insert into t (id,a) values (843,25);
+insert into t (id,a) values (843,26);
+insert into t (id,a) values (843,27);
+insert into t (id,a) values (843,28);
+insert into t (id,a) values (843,29);
+insert into t (id,a) values (843,30);
+insert into t (id,a) values (843,31);
+insert into t (id,a) values (843,32);
+insert into t (id,a) values (843,33);
+insert into t (id,a) values (843,34);
+insert into t (id,a) values (843,35);
+insert into t (id,a) values (843,36);
+insert into t (id,a) values (843,37);
+insert into t (id,a) values (843,38);
+insert into t (id,a) values (843,39);
+insert into t (id,a) values (843,40);
+insert into t (id,a) values (843,41);
+insert into t (id,a) values (843,42);
+insert into t (id,a) values (843,43);
+insert into t (id,a) values (843,44);
+insert into t (id,a) values (843,45);
+insert into t (id,a) values (843,46);
+insert into t (id,a) values (843,47);
+insert into t (id,a) values (843,48);
+insert into t (id,a) values (843,49);
+insert into t (id,a) values (843,50);
+insert into t (id,a) values (843,51);
+insert into t (id,a) values (843,52);
+insert into t (id,a) values (843,53);
+insert into t (id,a) values (843,54);
+insert into t (id,a) values (843,55);
+insert into t (id,a) values (843,56);
+insert into t (id,a) values (843,57);
+insert into t (id,a) values (843,58);
+insert into t (id,a) values (843,59);
+insert into t (id,a) values (843,60);
+insert into t (id,a) values (843,61);
+insert into t (id,a) values (843,62);
+insert into t (id,a) values (843,63);
+insert into t (id,a) values (843,64);
+insert into t (id,a) values (843,65);
+insert into t (id,a) values (843,66);
+insert into t (id,a) values (843,67);
+insert into t (id,a) values (843,68);
+insert into t (id,a) values (843,69);
+insert into t (id,a) values (843,70);
+insert into t (id,a) values (843,71);
+insert into t (id,a) values (843,72);
+insert into t (id,a) values (843,73);
+insert into t (id,a) values (843,74);
+insert into t (id,a) values (843,75);
+insert into t (id,a) values (843,76);
+insert into t (id,a) values (843,77);
+insert into t (id,a) values (843,78);
+insert into t (id,a) values (843,79);
+insert into t (id,a) values (843,80);
+insert into t (id,a) values (843,81);
+insert into t (id,a) values (843,82);
+insert into t (id,a) values (843,83);
+insert into t (id,a) values (843,84);
+insert into t (id,a) values (843,85);
+insert into t (id,a) values (843,86);
+insert into t (id,a) values (843,87);
+insert into t (id,a) values (843,88);
+insert into t (id,a) values (843,89);
+insert into t (id,a) values (843,90);
+insert into t (id,a) values (843,91);
+insert into t (id,a) values (843,92);
+insert into t (id,a) values (843,93);
+insert into t (id,a) values (843,94);
+insert into t (id,a) values (843,95);
+insert into t (id,a) values (843,96);
+insert into t (id,a) values (843,97);
+insert into t (id,a) values (843,98);
+insert into t (id,a) values (843,99);
+insert into t (id,a) values (844,0);
+insert into t (id,a) values (844,1);
+insert into t (id,a) values (844,2);
+insert into t (id,a) values (844,3);
+insert into t (id,a) values (844,4);
+insert into t (id,a) values (844,5);
+insert into t (id,a) values (844,6);
+insert into t (id,a) values (844,7);
+insert into t (id,a) values (844,8);
+insert into t (id,a) values (844,9);
+insert into t (id,a) values (844,10);
+insert into t (id,a) values (844,11);
+insert into t (id,a) values (844,12);
+insert into t (id,a) values (844,13);
+insert into t (id,a) values (844,14);
+insert into t (id,a) values (844,15);
+insert into t (id,a) values (844,16);
+insert into t (id,a) values (844,17);
+insert into t (id,a) values (844,18);
+insert into t (id,a) values (844,19);
+insert into t (id,a) values (844,20);
+insert into t (id,a) values (844,21);
+insert into t (id,a) values (844,22);
+insert into t (id,a) values (844,23);
+insert into t (id,a) values (844,24);
+insert into t (id,a) values (844,25);
+insert into t (id,a) values (844,26);
+insert into t (id,a) values (844,27);
+insert into t (id,a) values (844,28);
+insert into t (id,a) values (844,29);
+insert into t (id,a) values (844,30);
+insert into t (id,a) values (844,31);
+insert into t (id,a) values (844,32);
+insert into t (id,a) values (844,33);
+insert into t (id,a) values (844,34);
+insert into t (id,a) values (844,35);
+insert into t (id,a) values (844,36);
+insert into t (id,a) values (844,37);
+insert into t (id,a) values (844,38);
+insert into t (id,a) values (844,39);
+insert into t (id,a) values (844,40);
+insert into t (id,a) values (844,41);
+insert into t (id,a) values (844,42);
+insert into t (id,a) values (844,43);
+insert into t (id,a) values (844,44);
+insert into t (id,a) values (844,45);
+insert into t (id,a) values (844,46);
+insert into t (id,a) values (844,47);
+insert into t (id,a) values (844,48);
+insert into t (id,a) values (844,49);
+insert into t (id,a) values (844,50);
+insert into t (id,a) values (844,51);
+insert into t (id,a) values (844,52);
+insert into t (id,a) values (844,53);
+insert into t (id,a) values (844,54);
+insert into t (id,a) values (844,55);
+insert into t (id,a) values (844,56);
+insert into t (id,a) values (844,57);
+insert into t (id,a) values (844,58);
+insert into t (id,a) values (844,59);
+insert into t (id,a) values (844,60);
+insert into t (id,a) values (844,61);
+insert into t (id,a) values (844,62);
+insert into t (id,a) values (844,63);
+insert into t (id,a) values (844,64);
+insert into t (id,a) values (844,65);
+insert into t (id,a) values (844,66);
+insert into t (id,a) values (844,67);
+insert into t (id,a) values (844,68);
+insert into t (id,a) values (844,69);
+insert into t (id,a) values (844,70);
+insert into t (id,a) values (844,71);
+insert into t (id,a) values (844,72);
+insert into t (id,a) values (844,73);
+insert into t (id,a) values (844,74);
+insert into t (id,a) values (844,75);
+insert into t (id,a) values (844,76);
+insert into t (id,a) values (844,77);
+insert into t (id,a) values (844,78);
+insert into t (id,a) values (844,79);
+insert into t (id,a) values (844,80);
+insert into t (id,a) values (844,81);
+insert into t (id,a) values (844,82);
+insert into t (id,a) values (844,83);
+insert into t (id,a) values (844,84);
+insert into t (id,a) values (844,85);
+insert into t (id,a) values (844,86);
+insert into t (id,a) values (844,87);
+insert into t (id,a) values (844,88);
+insert into t (id,a) values (844,89);
+insert into t (id,a) values (844,90);
+insert into t (id,a) values (844,91);
+insert into t (id,a) values (844,92);
+insert into t (id,a) values (844,93);
+insert into t (id,a) values (844,94);
+insert into t (id,a) values (844,95);
+insert into t (id,a) values (844,96);
+insert into t (id,a) values (844,97);
+insert into t (id,a) values (844,98);
+insert into t (id,a) values (844,99);
+insert into t (id,a) values (845,0);
+insert into t (id,a) values (845,1);
+insert into t (id,a) values (845,2);
+insert into t (id,a) values (845,3);
+insert into t (id,a) values (845,4);
+insert into t (id,a) values (845,5);
+insert into t (id,a) values (845,6);
+insert into t (id,a) values (845,7);
+insert into t (id,a) values (845,8);
+insert into t (id,a) values (845,9);
+insert into t (id,a) values (845,10);
+insert into t (id,a) values (845,11);
+insert into t (id,a) values (845,12);
+insert into t (id,a) values (845,13);
+insert into t (id,a) values (845,14);
+insert into t (id,a) values (845,15);
+insert into t (id,a) values (845,16);
+insert into t (id,a) values (845,17);
+insert into t (id,a) values (845,18);
+insert into t (id,a) values (845,19);
+insert into t (id,a) values (845,20);
+insert into t (id,a) values (845,21);
+insert into t (id,a) values (845,22);
+insert into t (id,a) values (845,23);
+insert into t (id,a) values (845,24);
+insert into t (id,a) values (845,25);
+insert into t (id,a) values (845,26);
+insert into t (id,a) values (845,27);
+insert into t (id,a) values (845,28);
+insert into t (id,a) values (845,29);
+insert into t (id,a) values (845,30);
+insert into t (id,a) values (845,31);
+insert into t (id,a) values (845,32);
+insert into t (id,a) values (845,33);
+insert into t (id,a) values (845,34);
+insert into t (id,a) values (845,35);
+insert into t (id,a) values (845,36);
+insert into t (id,a) values (845,37);
+insert into t (id,a) values (845,38);
+insert into t (id,a) values (845,39);
+insert into t (id,a) values (845,40);
+insert into t (id,a) values (845,41);
+insert into t (id,a) values (845,42);
+insert into t (id,a) values (845,43);
+insert into t (id,a) values (845,44);
+insert into t (id,a) values (845,45);
+insert into t (id,a) values (845,46);
+insert into t (id,a) values (845,47);
+insert into t (id,a) values (845,48);
+insert into t (id,a) values (845,49);
+insert into t (id,a) values (845,50);
+insert into t (id,a) values (845,51);
+insert into t (id,a) values (845,52);
+insert into t (id,a) values (845,53);
+insert into t (id,a) values (845,54);
+insert into t (id,a) values (845,55);
+insert into t (id,a) values (845,56);
+insert into t (id,a) values (845,57);
+insert into t (id,a) values (845,58);
+insert into t (id,a) values (845,59);
+insert into t (id,a) values (845,60);
+insert into t (id,a) values (845,61);
+insert into t (id,a) values (845,62);
+insert into t (id,a) values (845,63);
+insert into t (id,a) values (845,64);
+insert into t (id,a) values (845,65);
+insert into t (id,a) values (845,66);
+insert into t (id,a) values (845,67);
+insert into t (id,a) values (845,68);
+insert into t (id,a) values (845,69);
+insert into t (id,a) values (845,70);
+insert into t (id,a) values (845,71);
+insert into t (id,a) values (845,72);
+insert into t (id,a) values (845,73);
+insert into t (id,a) values (845,74);
+insert into t (id,a) values (845,75);
+insert into t (id,a) values (845,76);
+insert into t (id,a) values (845,77);
+insert into t (id,a) values (845,78);
+insert into t (id,a) values (845,79);
+insert into t (id,a) values (845,80);
+insert into t (id,a) values (845,81);
+insert into t (id,a) values (845,82);
+insert into t (id,a) values (845,83);
+insert into t (id,a) values (845,84);
+insert into t (id,a) values (845,85);
+insert into t (id,a) values (845,86);
+insert into t (id,a) values (845,87);
+insert into t (id,a) values (845,88);
+insert into t (id,a) values (845,89);
+insert into t (id,a) values (845,90);
+insert into t (id,a) values (845,91);
+insert into t (id,a) values (845,92);
+insert into t (id,a) values (845,93);
+insert into t (id,a) values (845,94);
+insert into t (id,a) values (845,95);
+insert into t (id,a) values (845,96);
+insert into t (id,a) values (845,97);
+insert into t (id,a) values (845,98);
+insert into t (id,a) values (845,99);
+insert into t (id,a) values (846,0);
+insert into t (id,a) values (846,1);
+insert into t (id,a) values (846,2);
+insert into t (id,a) values (846,3);
+insert into t (id,a) values (846,4);
+insert into t (id,a) values (846,5);
+insert into t (id,a) values (846,6);
+insert into t (id,a) values (846,7);
+insert into t (id,a) values (846,8);
+insert into t (id,a) values (846,9);
+insert into t (id,a) values (846,10);
+insert into t (id,a) values (846,11);
+insert into t (id,a) values (846,12);
+insert into t (id,a) values (846,13);
+insert into t (id,a) values (846,14);
+insert into t (id,a) values (846,15);
+insert into t (id,a) values (846,16);
+insert into t (id,a) values (846,17);
+insert into t (id,a) values (846,18);
+insert into t (id,a) values (846,19);
+insert into t (id,a) values (846,20);
+insert into t (id,a) values (846,21);
+insert into t (id,a) values (846,22);
+insert into t (id,a) values (846,23);
+insert into t (id,a) values (846,24);
+insert into t (id,a) values (846,25);
+insert into t (id,a) values (846,26);
+insert into t (id,a) values (846,27);
+insert into t (id,a) values (846,28);
+insert into t (id,a) values (846,29);
+insert into t (id,a) values (846,30);
+insert into t (id,a) values (846,31);
+insert into t (id,a) values (846,32);
+insert into t (id,a) values (846,33);
+insert into t (id,a) values (846,34);
+insert into t (id,a) values (846,35);
+insert into t (id,a) values (846,36);
+insert into t (id,a) values (846,37);
+insert into t (id,a) values (846,38);
+insert into t (id,a) values (846,39);
+insert into t (id,a) values (846,40);
+insert into t (id,a) values (846,41);
+insert into t (id,a) values (846,42);
+insert into t (id,a) values (846,43);
+insert into t (id,a) values (846,44);
+insert into t (id,a) values (846,45);
+insert into t (id,a) values (846,46);
+insert into t (id,a) values (846,47);
+insert into t (id,a) values (846,48);
+insert into t (id,a) values (846,49);
+insert into t (id,a) values (846,50);
+insert into t (id,a) values (846,51);
+insert into t (id,a) values (846,52);
+insert into t (id,a) values (846,53);
+insert into t (id,a) values (846,54);
+insert into t (id,a) values (846,55);
+insert into t (id,a) values (846,56);
+insert into t (id,a) values (846,57);
+insert into t (id,a) values (846,58);
+insert into t (id,a) values (846,59);
+insert into t (id,a) values (846,60);
+insert into t (id,a) values (846,61);
+insert into t (id,a) values (846,62);
+insert into t (id,a) values (846,63);
+insert into t (id,a) values (846,64);
+insert into t (id,a) values (846,65);
+insert into t (id,a) values (846,66);
+insert into t (id,a) values (846,67);
+insert into t (id,a) values (846,68);
+insert into t (id,a) values (846,69);
+insert into t (id,a) values (846,70);
+insert into t (id,a) values (846,71);
+insert into t (id,a) values (846,72);
+insert into t (id,a) values (846,73);
+insert into t (id,a) values (846,74);
+insert into t (id,a) values (846,75);
+insert into t (id,a) values (846,76);
+insert into t (id,a) values (846,77);
+insert into t (id,a) values (846,78);
+insert into t (id,a) values (846,79);
+insert into t (id,a) values (846,80);
+insert into t (id,a) values (846,81);
+insert into t (id,a) values (846,82);
+insert into t (id,a) values (846,83);
+insert into t (id,a) values (846,84);
+insert into t (id,a) values (846,85);
+insert into t (id,a) values (846,86);
+insert into t (id,a) values (846,87);
+insert into t (id,a) values (846,88);
+insert into t (id,a) values (846,89);
+insert into t (id,a) values (846,90);
+insert into t (id,a) values (846,91);
+insert into t (id,a) values (846,92);
+insert into t (id,a) values (846,93);
+insert into t (id,a) values (846,94);
+insert into t (id,a) values (846,95);
+insert into t (id,a) values (846,96);
+insert into t (id,a) values (846,97);
+insert into t (id,a) values (846,98);
+insert into t (id,a) values (846,99);
+insert into t (id,a) values (847,0);
+insert into t (id,a) values (847,1);
+insert into t (id,a) values (847,2);
+insert into t (id,a) values (847,3);
+insert into t (id,a) values (847,4);
+insert into t (id,a) values (847,5);
+insert into t (id,a) values (847,6);
+insert into t (id,a) values (847,7);
+insert into t (id,a) values (847,8);
+insert into t (id,a) values (847,9);
+insert into t (id,a) values (847,10);
+insert into t (id,a) values (847,11);
+insert into t (id,a) values (847,12);
+insert into t (id,a) values (847,13);
+insert into t (id,a) values (847,14);
+insert into t (id,a) values (847,15);
+insert into t (id,a) values (847,16);
+insert into t (id,a) values (847,17);
+insert into t (id,a) values (847,18);
+insert into t (id,a) values (847,19);
+insert into t (id,a) values (847,20);
+insert into t (id,a) values (847,21);
+insert into t (id,a) values (847,22);
+insert into t (id,a) values (847,23);
+insert into t (id,a) values (847,24);
+insert into t (id,a) values (847,25);
+insert into t (id,a) values (847,26);
+insert into t (id,a) values (847,27);
+insert into t (id,a) values (847,28);
+insert into t (id,a) values (847,29);
+insert into t (id,a) values (847,30);
+insert into t (id,a) values (847,31);
+insert into t (id,a) values (847,32);
+insert into t (id,a) values (847,33);
+insert into t (id,a) values (847,34);
+insert into t (id,a) values (847,35);
+insert into t (id,a) values (847,36);
+insert into t (id,a) values (847,37);
+insert into t (id,a) values (847,38);
+insert into t (id,a) values (847,39);
+insert into t (id,a) values (847,40);
+insert into t (id,a) values (847,41);
+insert into t (id,a) values (847,42);
+insert into t (id,a) values (847,43);
+insert into t (id,a) values (847,44);
+insert into t (id,a) values (847,45);
+insert into t (id,a) values (847,46);
+insert into t (id,a) values (847,47);
+insert into t (id,a) values (847,48);
+insert into t (id,a) values (847,49);
+insert into t (id,a) values (847,50);
+insert into t (id,a) values (847,51);
+insert into t (id,a) values (847,52);
+insert into t (id,a) values (847,53);
+insert into t (id,a) values (847,54);
+insert into t (id,a) values (847,55);
+insert into t (id,a) values (847,56);
+insert into t (id,a) values (847,57);
+insert into t (id,a) values (847,58);
+insert into t (id,a) values (847,59);
+insert into t (id,a) values (847,60);
+insert into t (id,a) values (847,61);
+insert into t (id,a) values (847,62);
+insert into t (id,a) values (847,63);
+insert into t (id,a) values (847,64);
+insert into t (id,a) values (847,65);
+insert into t (id,a) values (847,66);
+insert into t (id,a) values (847,67);
+insert into t (id,a) values (847,68);
+insert into t (id,a) values (847,69);
+insert into t (id,a) values (847,70);
+insert into t (id,a) values (847,71);
+insert into t (id,a) values (847,72);
+insert into t (id,a) values (847,73);
+insert into t (id,a) values (847,74);
+insert into t (id,a) values (847,75);
+insert into t (id,a) values (847,76);
+insert into t (id,a) values (847,77);
+insert into t (id,a) values (847,78);
+insert into t (id,a) values (847,79);
+insert into t (id,a) values (847,80);
+insert into t (id,a) values (847,81);
+insert into t (id,a) values (847,82);
+insert into t (id,a) values (847,83);
+insert into t (id,a) values (847,84);
+insert into t (id,a) values (847,85);
+insert into t (id,a) values (847,86);
+insert into t (id,a) values (847,87);
+insert into t (id,a) values (847,88);
+insert into t (id,a) values (847,89);
+insert into t (id,a) values (847,90);
+insert into t (id,a) values (847,91);
+insert into t (id,a) values (847,92);
+insert into t (id,a) values (847,93);
+insert into t (id,a) values (847,94);
+insert into t (id,a) values (847,95);
+insert into t (id,a) values (847,96);
+insert into t (id,a) values (847,97);
+insert into t (id,a) values (847,98);
+insert into t (id,a) values (847,99);
+insert into t (id,a) values (848,0);
+insert into t (id,a) values (848,1);
+insert into t (id,a) values (848,2);
+insert into t (id,a) values (848,3);
+insert into t (id,a) values (848,4);
+insert into t (id,a) values (848,5);
+insert into t (id,a) values (848,6);
+insert into t (id,a) values (848,7);
+insert into t (id,a) values (848,8);
+insert into t (id,a) values (848,9);
+insert into t (id,a) values (848,10);
+insert into t (id,a) values (848,11);
+insert into t (id,a) values (848,12);
+insert into t (id,a) values (848,13);
+insert into t (id,a) values (848,14);
+insert into t (id,a) values (848,15);
+insert into t (id,a) values (848,16);
+insert into t (id,a) values (848,17);
+insert into t (id,a) values (848,18);
+insert into t (id,a) values (848,19);
+insert into t (id,a) values (848,20);
+insert into t (id,a) values (848,21);
+insert into t (id,a) values (848,22);
+insert into t (id,a) values (848,23);
+insert into t (id,a) values (848,24);
+insert into t (id,a) values (848,25);
+insert into t (id,a) values (848,26);
+insert into t (id,a) values (848,27);
+insert into t (id,a) values (848,28);
+insert into t (id,a) values (848,29);
+insert into t (id,a) values (848,30);
+insert into t (id,a) values (848,31);
+insert into t (id,a) values (848,32);
+insert into t (id,a) values (848,33);
+insert into t (id,a) values (848,34);
+insert into t (id,a) values (848,35);
+insert into t (id,a) values (848,36);
+insert into t (id,a) values (848,37);
+insert into t (id,a) values (848,38);
+insert into t (id,a) values (848,39);
+insert into t (id,a) values (848,40);
+insert into t (id,a) values (848,41);
+insert into t (id,a) values (848,42);
+insert into t (id,a) values (848,43);
+insert into t (id,a) values (848,44);
+insert into t (id,a) values (848,45);
+insert into t (id,a) values (848,46);
+insert into t (id,a) values (848,47);
+insert into t (id,a) values (848,48);
+insert into t (id,a) values (848,49);
+insert into t (id,a) values (848,50);
+insert into t (id,a) values (848,51);
+insert into t (id,a) values (848,52);
+insert into t (id,a) values (848,53);
+insert into t (id,a) values (848,54);
+insert into t (id,a) values (848,55);
+insert into t (id,a) values (848,56);
+insert into t (id,a) values (848,57);
+insert into t (id,a) values (848,58);
+insert into t (id,a) values (848,59);
+insert into t (id,a) values (848,60);
+insert into t (id,a) values (848,61);
+insert into t (id,a) values (848,62);
+insert into t (id,a) values (848,63);
+insert into t (id,a) values (848,64);
+insert into t (id,a) values (848,65);
+insert into t (id,a) values (848,66);
+insert into t (id,a) values (848,67);
+insert into t (id,a) values (848,68);
+insert into t (id,a) values (848,69);
+insert into t (id,a) values (848,70);
+insert into t (id,a) values (848,71);
+insert into t (id,a) values (848,72);
+insert into t (id,a) values (848,73);
+insert into t (id,a) values (848,74);
+insert into t (id,a) values (848,75);
+insert into t (id,a) values (848,76);
+insert into t (id,a) values (848,77);
+insert into t (id,a) values (848,78);
+insert into t (id,a) values (848,79);
+insert into t (id,a) values (848,80);
+insert into t (id,a) values (848,81);
+insert into t (id,a) values (848,82);
+insert into t (id,a) values (848,83);
+insert into t (id,a) values (848,84);
+insert into t (id,a) values (848,85);
+insert into t (id,a) values (848,86);
+insert into t (id,a) values (848,87);
+insert into t (id,a) values (848,88);
+insert into t (id,a) values (848,89);
+insert into t (id,a) values (848,90);
+insert into t (id,a) values (848,91);
+insert into t (id,a) values (848,92);
+insert into t (id,a) values (848,93);
+insert into t (id,a) values (848,94);
+insert into t (id,a) values (848,95);
+insert into t (id,a) values (848,96);
+insert into t (id,a) values (848,97);
+insert into t (id,a) values (848,98);
+insert into t (id,a) values (848,99);
+insert into t (id,a) values (849,0);
+insert into t (id,a) values (849,1);
+insert into t (id,a) values (849,2);
+insert into t (id,a) values (849,3);
+insert into t (id,a) values (849,4);
+insert into t (id,a) values (849,5);
+insert into t (id,a) values (849,6);
+insert into t (id,a) values (849,7);
+insert into t (id,a) values (849,8);
+insert into t (id,a) values (849,9);
+insert into t (id,a) values (849,10);
+insert into t (id,a) values (849,11);
+insert into t (id,a) values (849,12);
+insert into t (id,a) values (849,13);
+insert into t (id,a) values (849,14);
+insert into t (id,a) values (849,15);
+insert into t (id,a) values (849,16);
+insert into t (id,a) values (849,17);
+insert into t (id,a) values (849,18);
+insert into t (id,a) values (849,19);
+insert into t (id,a) values (849,20);
+insert into t (id,a) values (849,21);
+insert into t (id,a) values (849,22);
+insert into t (id,a) values (849,23);
+insert into t (id,a) values (849,24);
+insert into t (id,a) values (849,25);
+insert into t (id,a) values (849,26);
+insert into t (id,a) values (849,27);
+insert into t (id,a) values (849,28);
+insert into t (id,a) values (849,29);
+insert into t (id,a) values (849,30);
+insert into t (id,a) values (849,31);
+insert into t (id,a) values (849,32);
+insert into t (id,a) values (849,33);
+insert into t (id,a) values (849,34);
+insert into t (id,a) values (849,35);
+insert into t (id,a) values (849,36);
+insert into t (id,a) values (849,37);
+insert into t (id,a) values (849,38);
+insert into t (id,a) values (849,39);
+insert into t (id,a) values (849,40);
+insert into t (id,a) values (849,41);
+insert into t (id,a) values (849,42);
+insert into t (id,a) values (849,43);
+insert into t (id,a) values (849,44);
+insert into t (id,a) values (849,45);
+insert into t (id,a) values (849,46);
+insert into t (id,a) values (849,47);
+insert into t (id,a) values (849,48);
+insert into t (id,a) values (849,49);
+insert into t (id,a) values (849,50);
+insert into t (id,a) values (849,51);
+insert into t (id,a) values (849,52);
+insert into t (id,a) values (849,53);
+insert into t (id,a) values (849,54);
+insert into t (id,a) values (849,55);
+insert into t (id,a) values (849,56);
+insert into t (id,a) values (849,57);
+insert into t (id,a) values (849,58);
+insert into t (id,a) values (849,59);
+insert into t (id,a) values (849,60);
+insert into t (id,a) values (849,61);
+insert into t (id,a) values (849,62);
+insert into t (id,a) values (849,63);
+insert into t (id,a) values (849,64);
+insert into t (id,a) values (849,65);
+insert into t (id,a) values (849,66);
+insert into t (id,a) values (849,67);
+insert into t (id,a) values (849,68);
+insert into t (id,a) values (849,69);
+insert into t (id,a) values (849,70);
+insert into t (id,a) values (849,71);
+insert into t (id,a) values (849,72);
+insert into t (id,a) values (849,73);
+insert into t (id,a) values (849,74);
+insert into t (id,a) values (849,75);
+insert into t (id,a) values (849,76);
+insert into t (id,a) values (849,77);
+insert into t (id,a) values (849,78);
+insert into t (id,a) values (849,79);
+insert into t (id,a) values (849,80);
+insert into t (id,a) values (849,81);
+insert into t (id,a) values (849,82);
+insert into t (id,a) values (849,83);
+insert into t (id,a) values (849,84);
+insert into t (id,a) values (849,85);
+insert into t (id,a) values (849,86);
+insert into t (id,a) values (849,87);
+insert into t (id,a) values (849,88);
+insert into t (id,a) values (849,89);
+insert into t (id,a) values (849,90);
+insert into t (id,a) values (849,91);
+insert into t (id,a) values (849,92);
+insert into t (id,a) values (849,93);
+insert into t (id,a) values (849,94);
+insert into t (id,a) values (849,95);
+insert into t (id,a) values (849,96);
+insert into t (id,a) values (849,97);
+insert into t (id,a) values (849,98);
+insert into t (id,a) values (849,99);
+insert into t (id,a) values (850,0);
+insert into t (id,a) values (850,1);
+insert into t (id,a) values (850,2);
+insert into t (id,a) values (850,3);
+insert into t (id,a) values (850,4);
+insert into t (id,a) values (850,5);
+insert into t (id,a) values (850,6);
+insert into t (id,a) values (850,7);
+insert into t (id,a) values (850,8);
+insert into t (id,a) values (850,9);
+insert into t (id,a) values (850,10);
+insert into t (id,a) values (850,11);
+insert into t (id,a) values (850,12);
+insert into t (id,a) values (850,13);
+insert into t (id,a) values (850,14);
+insert into t (id,a) values (850,15);
+insert into t (id,a) values (850,16);
+insert into t (id,a) values (850,17);
+insert into t (id,a) values (850,18);
+insert into t (id,a) values (850,19);
+insert into t (id,a) values (850,20);
+insert into t (id,a) values (850,21);
+insert into t (id,a) values (850,22);
+insert into t (id,a) values (850,23);
+insert into t (id,a) values (850,24);
+insert into t (id,a) values (850,25);
+insert into t (id,a) values (850,26);
+insert into t (id,a) values (850,27);
+insert into t (id,a) values (850,28);
+insert into t (id,a) values (850,29);
+insert into t (id,a) values (850,30);
+insert into t (id,a) values (850,31);
+insert into t (id,a) values (850,32);
+insert into t (id,a) values (850,33);
+insert into t (id,a) values (850,34);
+insert into t (id,a) values (850,35);
+insert into t (id,a) values (850,36);
+insert into t (id,a) values (850,37);
+insert into t (id,a) values (850,38);
+insert into t (id,a) values (850,39);
+insert into t (id,a) values (850,40);
+insert into t (id,a) values (850,41);
+insert into t (id,a) values (850,42);
+insert into t (id,a) values (850,43);
+insert into t (id,a) values (850,44);
+insert into t (id,a) values (850,45);
+insert into t (id,a) values (850,46);
+insert into t (id,a) values (850,47);
+insert into t (id,a) values (850,48);
+insert into t (id,a) values (850,49);
+insert into t (id,a) values (850,50);
+insert into t (id,a) values (850,51);
+insert into t (id,a) values (850,52);
+insert into t (id,a) values (850,53);
+insert into t (id,a) values (850,54);
+insert into t (id,a) values (850,55);
+insert into t (id,a) values (850,56);
+insert into t (id,a) values (850,57);
+insert into t (id,a) values (850,58);
+insert into t (id,a) values (850,59);
+insert into t (id,a) values (850,60);
+insert into t (id,a) values (850,61);
+insert into t (id,a) values (850,62);
+insert into t (id,a) values (850,63);
+insert into t (id,a) values (850,64);
+insert into t (id,a) values (850,65);
+insert into t (id,a) values (850,66);
+insert into t (id,a) values (850,67);
+insert into t (id,a) values (850,68);
+insert into t (id,a) values (850,69);
+insert into t (id,a) values (850,70);
+insert into t (id,a) values (850,71);
+insert into t (id,a) values (850,72);
+insert into t (id,a) values (850,73);
+insert into t (id,a) values (850,74);
+insert into t (id,a) values (850,75);
+insert into t (id,a) values (850,76);
+insert into t (id,a) values (850,77);
+insert into t (id,a) values (850,78);
+insert into t (id,a) values (850,79);
+insert into t (id,a) values (850,80);
+insert into t (id,a) values (850,81);
+insert into t (id,a) values (850,82);
+insert into t (id,a) values (850,83);
+insert into t (id,a) values (850,84);
+insert into t (id,a) values (850,85);
+insert into t (id,a) values (850,86);
+insert into t (id,a) values (850,87);
+insert into t (id,a) values (850,88);
+insert into t (id,a) values (850,89);
+insert into t (id,a) values (850,90);
+insert into t (id,a) values (850,91);
+insert into t (id,a) values (850,92);
+insert into t (id,a) values (850,93);
+insert into t (id,a) values (850,94);
+insert into t (id,a) values (850,95);
+insert into t (id,a) values (850,96);
+insert into t (id,a) values (850,97);
+insert into t (id,a) values (850,98);
+insert into t (id,a) values (850,99);
+insert into t (id,a) values (851,0);
+insert into t (id,a) values (851,1);
+insert into t (id,a) values (851,2);
+insert into t (id,a) values (851,3);
+insert into t (id,a) values (851,4);
+insert into t (id,a) values (851,5);
+insert into t (id,a) values (851,6);
+insert into t (id,a) values (851,7);
+insert into t (id,a) values (851,8);
+insert into t (id,a) values (851,9);
+insert into t (id,a) values (851,10);
+insert into t (id,a) values (851,11);
+insert into t (id,a) values (851,12);
+insert into t (id,a) values (851,13);
+insert into t (id,a) values (851,14);
+insert into t (id,a) values (851,15);
+insert into t (id,a) values (851,16);
+insert into t (id,a) values (851,17);
+insert into t (id,a) values (851,18);
+insert into t (id,a) values (851,19);
+insert into t (id,a) values (851,20);
+insert into t (id,a) values (851,21);
+insert into t (id,a) values (851,22);
+insert into t (id,a) values (851,23);
+insert into t (id,a) values (851,24);
+insert into t (id,a) values (851,25);
+insert into t (id,a) values (851,26);
+insert into t (id,a) values (851,27);
+insert into t (id,a) values (851,28);
+insert into t (id,a) values (851,29);
+insert into t (id,a) values (851,30);
+insert into t (id,a) values (851,31);
+insert into t (id,a) values (851,32);
+insert into t (id,a) values (851,33);
+insert into t (id,a) values (851,34);
+insert into t (id,a) values (851,35);
+insert into t (id,a) values (851,36);
+insert into t (id,a) values (851,37);
+insert into t (id,a) values (851,38);
+insert into t (id,a) values (851,39);
+insert into t (id,a) values (851,40);
+insert into t (id,a) values (851,41);
+insert into t (id,a) values (851,42);
+insert into t (id,a) values (851,43);
+insert into t (id,a) values (851,44);
+insert into t (id,a) values (851,45);
+insert into t (id,a) values (851,46);
+insert into t (id,a) values (851,47);
+insert into t (id,a) values (851,48);
+insert into t (id,a) values (851,49);
+insert into t (id,a) values (851,50);
+insert into t (id,a) values (851,51);
+insert into t (id,a) values (851,52);
+insert into t (id,a) values (851,53);
+insert into t (id,a) values (851,54);
+insert into t (id,a) values (851,55);
+insert into t (id,a) values (851,56);
+insert into t (id,a) values (851,57);
+insert into t (id,a) values (851,58);
+insert into t (id,a) values (851,59);
+insert into t (id,a) values (851,60);
+insert into t (id,a) values (851,61);
+insert into t (id,a) values (851,62);
+insert into t (id,a) values (851,63);
+insert into t (id,a) values (851,64);
+insert into t (id,a) values (851,65);
+insert into t (id,a) values (851,66);
+insert into t (id,a) values (851,67);
+insert into t (id,a) values (851,68);
+insert into t (id,a) values (851,69);
+insert into t (id,a) values (851,70);
+insert into t (id,a) values (851,71);
+insert into t (id,a) values (851,72);
+insert into t (id,a) values (851,73);
+insert into t (id,a) values (851,74);
+insert into t (id,a) values (851,75);
+insert into t (id,a) values (851,76);
+insert into t (id,a) values (851,77);
+insert into t (id,a) values (851,78);
+insert into t (id,a) values (851,79);
+insert into t (id,a) values (851,80);
+insert into t (id,a) values (851,81);
+insert into t (id,a) values (851,82);
+insert into t (id,a) values (851,83);
+insert into t (id,a) values (851,84);
+insert into t (id,a) values (851,85);
+insert into t (id,a) values (851,86);
+insert into t (id,a) values (851,87);
+insert into t (id,a) values (851,88);
+insert into t (id,a) values (851,89);
+insert into t (id,a) values (851,90);
+insert into t (id,a) values (851,91);
+insert into t (id,a) values (851,92);
+insert into t (id,a) values (851,93);
+insert into t (id,a) values (851,94);
+insert into t (id,a) values (851,95);
+insert into t (id,a) values (851,96);
+insert into t (id,a) values (851,97);
+insert into t (id,a) values (851,98);
+insert into t (id,a) values (851,99);
+insert into t (id,a) values (852,0);
+insert into t (id,a) values (852,1);
+insert into t (id,a) values (852,2);
+insert into t (id,a) values (852,3);
+insert into t (id,a) values (852,4);
+insert into t (id,a) values (852,5);
+insert into t (id,a) values (852,6);
+insert into t (id,a) values (852,7);
+insert into t (id,a) values (852,8);
+insert into t (id,a) values (852,9);
+insert into t (id,a) values (852,10);
+insert into t (id,a) values (852,11);
+insert into t (id,a) values (852,12);
+insert into t (id,a) values (852,13);
+insert into t (id,a) values (852,14);
+insert into t (id,a) values (852,15);
+insert into t (id,a) values (852,16);
+insert into t (id,a) values (852,17);
+insert into t (id,a) values (852,18);
+insert into t (id,a) values (852,19);
+insert into t (id,a) values (852,20);
+insert into t (id,a) values (852,21);
+insert into t (id,a) values (852,22);
+insert into t (id,a) values (852,23);
+insert into t (id,a) values (852,24);
+insert into t (id,a) values (852,25);
+insert into t (id,a) values (852,26);
+insert into t (id,a) values (852,27);
+insert into t (id,a) values (852,28);
+insert into t (id,a) values (852,29);
+insert into t (id,a) values (852,30);
+insert into t (id,a) values (852,31);
+insert into t (id,a) values (852,32);
+insert into t (id,a) values (852,33);
+insert into t (id,a) values (852,34);
+insert into t (id,a) values (852,35);
+insert into t (id,a) values (852,36);
+insert into t (id,a) values (852,37);
+insert into t (id,a) values (852,38);
+insert into t (id,a) values (852,39);
+insert into t (id,a) values (852,40);
+insert into t (id,a) values (852,41);
+insert into t (id,a) values (852,42);
+insert into t (id,a) values (852,43);
+insert into t (id,a) values (852,44);
+insert into t (id,a) values (852,45);
+insert into t (id,a) values (852,46);
+insert into t (id,a) values (852,47);
+insert into t (id,a) values (852,48);
+insert into t (id,a) values (852,49);
+insert into t (id,a) values (852,50);
+insert into t (id,a) values (852,51);
+insert into t (id,a) values (852,52);
+insert into t (id,a) values (852,53);
+insert into t (id,a) values (852,54);
+insert into t (id,a) values (852,55);
+insert into t (id,a) values (852,56);
+insert into t (id,a) values (852,57);
+insert into t (id,a) values (852,58);
+insert into t (id,a) values (852,59);
+insert into t (id,a) values (852,60);
+insert into t (id,a) values (852,61);
+insert into t (id,a) values (852,62);
+insert into t (id,a) values (852,63);
+insert into t (id,a) values (852,64);
+insert into t (id,a) values (852,65);
+insert into t (id,a) values (852,66);
+insert into t (id,a) values (852,67);
+insert into t (id,a) values (852,68);
+insert into t (id,a) values (852,69);
+insert into t (id,a) values (852,70);
+insert into t (id,a) values (852,71);
+insert into t (id,a) values (852,72);
+insert into t (id,a) values (852,73);
+insert into t (id,a) values (852,74);
+insert into t (id,a) values (852,75);
+insert into t (id,a) values (852,76);
+insert into t (id,a) values (852,77);
+insert into t (id,a) values (852,78);
+insert into t (id,a) values (852,79);
+insert into t (id,a) values (852,80);
+insert into t (id,a) values (852,81);
+insert into t (id,a) values (852,82);
+insert into t (id,a) values (852,83);
+insert into t (id,a) values (852,84);
+insert into t (id,a) values (852,85);
+insert into t (id,a) values (852,86);
+insert into t (id,a) values (852,87);
+insert into t (id,a) values (852,88);
+insert into t (id,a) values (852,89);
+insert into t (id,a) values (852,90);
+insert into t (id,a) values (852,91);
+insert into t (id,a) values (852,92);
+insert into t (id,a) values (852,93);
+insert into t (id,a) values (852,94);
+insert into t (id,a) values (852,95);
+insert into t (id,a) values (852,96);
+insert into t (id,a) values (852,97);
+insert into t (id,a) values (852,98);
+insert into t (id,a) values (852,99);
+insert into t (id,a) values (853,0);
+insert into t (id,a) values (853,1);
+insert into t (id,a) values (853,2);
+insert into t (id,a) values (853,3);
+insert into t (id,a) values (853,4);
+insert into t (id,a) values (853,5);
+insert into t (id,a) values (853,6);
+insert into t (id,a) values (853,7);
+insert into t (id,a) values (853,8);
+insert into t (id,a) values (853,9);
+insert into t (id,a) values (853,10);
+insert into t (id,a) values (853,11);
+insert into t (id,a) values (853,12);
+insert into t (id,a) values (853,13);
+insert into t (id,a) values (853,14);
+insert into t (id,a) values (853,15);
+insert into t (id,a) values (853,16);
+insert into t (id,a) values (853,17);
+insert into t (id,a) values (853,18);
+insert into t (id,a) values (853,19);
+insert into t (id,a) values (853,20);
+insert into t (id,a) values (853,21);
+insert into t (id,a) values (853,22);
+insert into t (id,a) values (853,23);
+insert into t (id,a) values (853,24);
+insert into t (id,a) values (853,25);
+insert into t (id,a) values (853,26);
+insert into t (id,a) values (853,27);
+insert into t (id,a) values (853,28);
+insert into t (id,a) values (853,29);
+insert into t (id,a) values (853,30);
+insert into t (id,a) values (853,31);
+insert into t (id,a) values (853,32);
+insert into t (id,a) values (853,33);
+insert into t (id,a) values (853,34);
+insert into t (id,a) values (853,35);
+insert into t (id,a) values (853,36);
+insert into t (id,a) values (853,37);
+insert into t (id,a) values (853,38);
+insert into t (id,a) values (853,39);
+insert into t (id,a) values (853,40);
+insert into t (id,a) values (853,41);
+insert into t (id,a) values (853,42);
+insert into t (id,a) values (853,43);
+insert into t (id,a) values (853,44);
+insert into t (id,a) values (853,45);
+insert into t (id,a) values (853,46);
+insert into t (id,a) values (853,47);
+insert into t (id,a) values (853,48);
+insert into t (id,a) values (853,49);
+insert into t (id,a) values (853,50);
+insert into t (id,a) values (853,51);
+insert into t (id,a) values (853,52);
+insert into t (id,a) values (853,53);
+insert into t (id,a) values (853,54);
+insert into t (id,a) values (853,55);
+insert into t (id,a) values (853,56);
+insert into t (id,a) values (853,57);
+insert into t (id,a) values (853,58);
+insert into t (id,a) values (853,59);
+insert into t (id,a) values (853,60);
+insert into t (id,a) values (853,61);
+insert into t (id,a) values (853,62);
+insert into t (id,a) values (853,63);
+insert into t (id,a) values (853,64);
+insert into t (id,a) values (853,65);
+insert into t (id,a) values (853,66);
+insert into t (id,a) values (853,67);
+insert into t (id,a) values (853,68);
+insert into t (id,a) values (853,69);
+insert into t (id,a) values (853,70);
+insert into t (id,a) values (853,71);
+insert into t (id,a) values (853,72);
+insert into t (id,a) values (853,73);
+insert into t (id,a) values (853,74);
+insert into t (id,a) values (853,75);
+insert into t (id,a) values (853,76);
+insert into t (id,a) values (853,77);
+insert into t (id,a) values (853,78);
+insert into t (id,a) values (853,79);
+insert into t (id,a) values (853,80);
+insert into t (id,a) values (853,81);
+insert into t (id,a) values (853,82);
+insert into t (id,a) values (853,83);
+insert into t (id,a) values (853,84);
+insert into t (id,a) values (853,85);
+insert into t (id,a) values (853,86);
+insert into t (id,a) values (853,87);
+insert into t (id,a) values (853,88);
+insert into t (id,a) values (853,89);
+insert into t (id,a) values (853,90);
+insert into t (id,a) values (853,91);
+insert into t (id,a) values (853,92);
+insert into t (id,a) values (853,93);
+insert into t (id,a) values (853,94);
+insert into t (id,a) values (853,95);
+insert into t (id,a) values (853,96);
+insert into t (id,a) values (853,97);
+insert into t (id,a) values (853,98);
+insert into t (id,a) values (853,99);
+insert into t (id,a) values (854,0);
+insert into t (id,a) values (854,1);
+insert into t (id,a) values (854,2);
+insert into t (id,a) values (854,3);
+insert into t (id,a) values (854,4);
+insert into t (id,a) values (854,5);
+insert into t (id,a) values (854,6);
+insert into t (id,a) values (854,7);
+insert into t (id,a) values (854,8);
+insert into t (id,a) values (854,9);
+insert into t (id,a) values (854,10);
+insert into t (id,a) values (854,11);
+insert into t (id,a) values (854,12);
+insert into t (id,a) values (854,13);
+insert into t (id,a) values (854,14);
+insert into t (id,a) values (854,15);
+insert into t (id,a) values (854,16);
+insert into t (id,a) values (854,17);
+insert into t (id,a) values (854,18);
+insert into t (id,a) values (854,19);
+insert into t (id,a) values (854,20);
+insert into t (id,a) values (854,21);
+insert into t (id,a) values (854,22);
+insert into t (id,a) values (854,23);
+insert into t (id,a) values (854,24);
+insert into t (id,a) values (854,25);
+insert into t (id,a) values (854,26);
+insert into t (id,a) values (854,27);
+insert into t (id,a) values (854,28);
+insert into t (id,a) values (854,29);
+insert into t (id,a) values (854,30);
+insert into t (id,a) values (854,31);
+insert into t (id,a) values (854,32);
+insert into t (id,a) values (854,33);
+insert into t (id,a) values (854,34);
+insert into t (id,a) values (854,35);
+insert into t (id,a) values (854,36);
+insert into t (id,a) values (854,37);
+insert into t (id,a) values (854,38);
+insert into t (id,a) values (854,39);
+insert into t (id,a) values (854,40);
+insert into t (id,a) values (854,41);
+insert into t (id,a) values (854,42);
+insert into t (id,a) values (854,43);
+insert into t (id,a) values (854,44);
+insert into t (id,a) values (854,45);
+insert into t (id,a) values (854,46);
+insert into t (id,a) values (854,47);
+insert into t (id,a) values (854,48);
+insert into t (id,a) values (854,49);
+insert into t (id,a) values (854,50);
+insert into t (id,a) values (854,51);
+insert into t (id,a) values (854,52);
+insert into t (id,a) values (854,53);
+insert into t (id,a) values (854,54);
+insert into t (id,a) values (854,55);
+insert into t (id,a) values (854,56);
+insert into t (id,a) values (854,57);
+insert into t (id,a) values (854,58);
+insert into t (id,a) values (854,59);
+insert into t (id,a) values (854,60);
+insert into t (id,a) values (854,61);
+insert into t (id,a) values (854,62);
+insert into t (id,a) values (854,63);
+insert into t (id,a) values (854,64);
+insert into t (id,a) values (854,65);
+insert into t (id,a) values (854,66);
+insert into t (id,a) values (854,67);
+insert into t (id,a) values (854,68);
+insert into t (id,a) values (854,69);
+insert into t (id,a) values (854,70);
+insert into t (id,a) values (854,71);
+insert into t (id,a) values (854,72);
+insert into t (id,a) values (854,73);
+insert into t (id,a) values (854,74);
+insert into t (id,a) values (854,75);
+insert into t (id,a) values (854,76);
+insert into t (id,a) values (854,77);
+insert into t (id,a) values (854,78);
+insert into t (id,a) values (854,79);
+insert into t (id,a) values (854,80);
+insert into t (id,a) values (854,81);
+insert into t (id,a) values (854,82);
+insert into t (id,a) values (854,83);
+insert into t (id,a) values (854,84);
+insert into t (id,a) values (854,85);
+insert into t (id,a) values (854,86);
+insert into t (id,a) values (854,87);
+insert into t (id,a) values (854,88);
+insert into t (id,a) values (854,89);
+insert into t (id,a) values (854,90);
+insert into t (id,a) values (854,91);
+insert into t (id,a) values (854,92);
+insert into t (id,a) values (854,93);
+insert into t (id,a) values (854,94);
+insert into t (id,a) values (854,95);
+insert into t (id,a) values (854,96);
+insert into t (id,a) values (854,97);
+insert into t (id,a) values (854,98);
+insert into t (id,a) values (854,99);
+insert into t (id,a) values (855,0);
+insert into t (id,a) values (855,1);
+insert into t (id,a) values (855,2);
+insert into t (id,a) values (855,3);
+insert into t (id,a) values (855,4);
+insert into t (id,a) values (855,5);
+insert into t (id,a) values (855,6);
+insert into t (id,a) values (855,7);
+insert into t (id,a) values (855,8);
+insert into t (id,a) values (855,9);
+insert into t (id,a) values (855,10);
+insert into t (id,a) values (855,11);
+insert into t (id,a) values (855,12);
+insert into t (id,a) values (855,13);
+insert into t (id,a) values (855,14);
+insert into t (id,a) values (855,15);
+insert into t (id,a) values (855,16);
+insert into t (id,a) values (855,17);
+insert into t (id,a) values (855,18);
+insert into t (id,a) values (855,19);
+insert into t (id,a) values (855,20);
+insert into t (id,a) values (855,21);
+insert into t (id,a) values (855,22);
+insert into t (id,a) values (855,23);
+insert into t (id,a) values (855,24);
+insert into t (id,a) values (855,25);
+insert into t (id,a) values (855,26);
+insert into t (id,a) values (855,27);
+insert into t (id,a) values (855,28);
+insert into t (id,a) values (855,29);
+insert into t (id,a) values (855,30);
+insert into t (id,a) values (855,31);
+insert into t (id,a) values (855,32);
+insert into t (id,a) values (855,33);
+insert into t (id,a) values (855,34);
+insert into t (id,a) values (855,35);
+insert into t (id,a) values (855,36);
+insert into t (id,a) values (855,37);
+insert into t (id,a) values (855,38);
+insert into t (id,a) values (855,39);
+insert into t (id,a) values (855,40);
+insert into t (id,a) values (855,41);
+insert into t (id,a) values (855,42);
+insert into t (id,a) values (855,43);
+insert into t (id,a) values (855,44);
+insert into t (id,a) values (855,45);
+insert into t (id,a) values (855,46);
+insert into t (id,a) values (855,47);
+insert into t (id,a) values (855,48);
+insert into t (id,a) values (855,49);
+insert into t (id,a) values (855,50);
+insert into t (id,a) values (855,51);
+insert into t (id,a) values (855,52);
+insert into t (id,a) values (855,53);
+insert into t (id,a) values (855,54);
+insert into t (id,a) values (855,55);
+insert into t (id,a) values (855,56);
+insert into t (id,a) values (855,57);
+insert into t (id,a) values (855,58);
+insert into t (id,a) values (855,59);
+insert into t (id,a) values (855,60);
+insert into t (id,a) values (855,61);
+insert into t (id,a) values (855,62);
+insert into t (id,a) values (855,63);
+insert into t (id,a) values (855,64);
+insert into t (id,a) values (855,65);
+insert into t (id,a) values (855,66);
+insert into t (id,a) values (855,67);
+insert into t (id,a) values (855,68);
+insert into t (id,a) values (855,69);
+insert into t (id,a) values (855,70);
+insert into t (id,a) values (855,71);
+insert into t (id,a) values (855,72);
+insert into t (id,a) values (855,73);
+insert into t (id,a) values (855,74);
+insert into t (id,a) values (855,75);
+insert into t (id,a) values (855,76);
+insert into t (id,a) values (855,77);
+insert into t (id,a) values (855,78);
+insert into t (id,a) values (855,79);
+insert into t (id,a) values (855,80);
+insert into t (id,a) values (855,81);
+insert into t (id,a) values (855,82);
+insert into t (id,a) values (855,83);
+insert into t (id,a) values (855,84);
+insert into t (id,a) values (855,85);
+insert into t (id,a) values (855,86);
+insert into t (id,a) values (855,87);
+insert into t (id,a) values (855,88);
+insert into t (id,a) values (855,89);
+insert into t (id,a) values (855,90);
+insert into t (id,a) values (855,91);
+insert into t (id,a) values (855,92);
+insert into t (id,a) values (855,93);
+insert into t (id,a) values (855,94);
+insert into t (id,a) values (855,95);
+insert into t (id,a) values (855,96);
+insert into t (id,a) values (855,97);
+insert into t (id,a) values (855,98);
+insert into t (id,a) values (855,99);
+insert into t (id,a) values (856,0);
+insert into t (id,a) values (856,1);
+insert into t (id,a) values (856,2);
+insert into t (id,a) values (856,3);
+insert into t (id,a) values (856,4);
+insert into t (id,a) values (856,5);
+insert into t (id,a) values (856,6);
+insert into t (id,a) values (856,7);
+insert into t (id,a) values (856,8);
+insert into t (id,a) values (856,9);
+insert into t (id,a) values (856,10);
+insert into t (id,a) values (856,11);
+insert into t (id,a) values (856,12);
+insert into t (id,a) values (856,13);
+insert into t (id,a) values (856,14);
+insert into t (id,a) values (856,15);
+insert into t (id,a) values (856,16);
+insert into t (id,a) values (856,17);
+insert into t (id,a) values (856,18);
+insert into t (id,a) values (856,19);
+insert into t (id,a) values (856,20);
+insert into t (id,a) values (856,21);
+insert into t (id,a) values (856,22);
+insert into t (id,a) values (856,23);
+insert into t (id,a) values (856,24);
+insert into t (id,a) values (856,25);
+insert into t (id,a) values (856,26);
+insert into t (id,a) values (856,27);
+insert into t (id,a) values (856,28);
+insert into t (id,a) values (856,29);
+insert into t (id,a) values (856,30);
+insert into t (id,a) values (856,31);
+insert into t (id,a) values (856,32);
+insert into t (id,a) values (856,33);
+insert into t (id,a) values (856,34);
+insert into t (id,a) values (856,35);
+insert into t (id,a) values (856,36);
+insert into t (id,a) values (856,37);
+insert into t (id,a) values (856,38);
+insert into t (id,a) values (856,39);
+insert into t (id,a) values (856,40);
+insert into t (id,a) values (856,41);
+insert into t (id,a) values (856,42);
+insert into t (id,a) values (856,43);
+insert into t (id,a) values (856,44);
+insert into t (id,a) values (856,45);
+insert into t (id,a) values (856,46);
+insert into t (id,a) values (856,47);
+insert into t (id,a) values (856,48);
+insert into t (id,a) values (856,49);
+insert into t (id,a) values (856,50);
+insert into t (id,a) values (856,51);
+insert into t (id,a) values (856,52);
+insert into t (id,a) values (856,53);
+insert into t (id,a) values (856,54);
+insert into t (id,a) values (856,55);
+insert into t (id,a) values (856,56);
+insert into t (id,a) values (856,57);
+insert into t (id,a) values (856,58);
+insert into t (id,a) values (856,59);
+insert into t (id,a) values (856,60);
+insert into t (id,a) values (856,61);
+insert into t (id,a) values (856,62);
+insert into t (id,a) values (856,63);
+insert into t (id,a) values (856,64);
+insert into t (id,a) values (856,65);
+insert into t (id,a) values (856,66);
+insert into t (id,a) values (856,67);
+insert into t (id,a) values (856,68);
+insert into t (id,a) values (856,69);
+insert into t (id,a) values (856,70);
+insert into t (id,a) values (856,71);
+insert into t (id,a) values (856,72);
+insert into t (id,a) values (856,73);
+insert into t (id,a) values (856,74);
+insert into t (id,a) values (856,75);
+insert into t (id,a) values (856,76);
+insert into t (id,a) values (856,77);
+insert into t (id,a) values (856,78);
+insert into t (id,a) values (856,79);
+insert into t (id,a) values (856,80);
+insert into t (id,a) values (856,81);
+insert into t (id,a) values (856,82);
+insert into t (id,a) values (856,83);
+insert into t (id,a) values (856,84);
+insert into t (id,a) values (856,85);
+insert into t (id,a) values (856,86);
+insert into t (id,a) values (856,87);
+insert into t (id,a) values (856,88);
+insert into t (id,a) values (856,89);
+insert into t (id,a) values (856,90);
+insert into t (id,a) values (856,91);
+insert into t (id,a) values (856,92);
+insert into t (id,a) values (856,93);
+insert into t (id,a) values (856,94);
+insert into t (id,a) values (856,95);
+insert into t (id,a) values (856,96);
+insert into t (id,a) values (856,97);
+insert into t (id,a) values (856,98);
+insert into t (id,a) values (856,99);
+insert into t (id,a) values (857,0);
+insert into t (id,a) values (857,1);
+insert into t (id,a) values (857,2);
+insert into t (id,a) values (857,3);
+insert into t (id,a) values (857,4);
+insert into t (id,a) values (857,5);
+insert into t (id,a) values (857,6);
+insert into t (id,a) values (857,7);
+insert into t (id,a) values (857,8);
+insert into t (id,a) values (857,9);
+insert into t (id,a) values (857,10);
+insert into t (id,a) values (857,11);
+insert into t (id,a) values (857,12);
+insert into t (id,a) values (857,13);
+insert into t (id,a) values (857,14);
+insert into t (id,a) values (857,15);
+insert into t (id,a) values (857,16);
+insert into t (id,a) values (857,17);
+insert into t (id,a) values (857,18);
+insert into t (id,a) values (857,19);
+insert into t (id,a) values (857,20);
+insert into t (id,a) values (857,21);
+insert into t (id,a) values (857,22);
+insert into t (id,a) values (857,23);
+insert into t (id,a) values (857,24);
+insert into t (id,a) values (857,25);
+insert into t (id,a) values (857,26);
+insert into t (id,a) values (857,27);
+insert into t (id,a) values (857,28);
+insert into t (id,a) values (857,29);
+insert into t (id,a) values (857,30);
+insert into t (id,a) values (857,31);
+insert into t (id,a) values (857,32);
+insert into t (id,a) values (857,33);
+insert into t (id,a) values (857,34);
+insert into t (id,a) values (857,35);
+insert into t (id,a) values (857,36);
+insert into t (id,a) values (857,37);
+insert into t (id,a) values (857,38);
+insert into t (id,a) values (857,39);
+insert into t (id,a) values (857,40);
+insert into t (id,a) values (857,41);
+insert into t (id,a) values (857,42);
+insert into t (id,a) values (857,43);
+insert into t (id,a) values (857,44);
+insert into t (id,a) values (857,45);
+insert into t (id,a) values (857,46);
+insert into t (id,a) values (857,47);
+insert into t (id,a) values (857,48);
+insert into t (id,a) values (857,49);
+insert into t (id,a) values (857,50);
+insert into t (id,a) values (857,51);
+insert into t (id,a) values (857,52);
+insert into t (id,a) values (857,53);
+insert into t (id,a) values (857,54);
+insert into t (id,a) values (857,55);
+insert into t (id,a) values (857,56);
+insert into t (id,a) values (857,57);
+insert into t (id,a) values (857,58);
+insert into t (id,a) values (857,59);
+insert into t (id,a) values (857,60);
+insert into t (id,a) values (857,61);
+insert into t (id,a) values (857,62);
+insert into t (id,a) values (857,63);
+insert into t (id,a) values (857,64);
+insert into t (id,a) values (857,65);
+insert into t (id,a) values (857,66);
+insert into t (id,a) values (857,67);
+insert into t (id,a) values (857,68);
+insert into t (id,a) values (857,69);
+insert into t (id,a) values (857,70);
+insert into t (id,a) values (857,71);
+insert into t (id,a) values (857,72);
+insert into t (id,a) values (857,73);
+insert into t (id,a) values (857,74);
+insert into t (id,a) values (857,75);
+insert into t (id,a) values (857,76);
+insert into t (id,a) values (857,77);
+insert into t (id,a) values (857,78);
+insert into t (id,a) values (857,79);
+insert into t (id,a) values (857,80);
+insert into t (id,a) values (857,81);
+insert into t (id,a) values (857,82);
+insert into t (id,a) values (857,83);
+insert into t (id,a) values (857,84);
+insert into t (id,a) values (857,85);
+insert into t (id,a) values (857,86);
+insert into t (id,a) values (857,87);
+insert into t (id,a) values (857,88);
+insert into t (id,a) values (857,89);
+insert into t (id,a) values (857,90);
+insert into t (id,a) values (857,91);
+insert into t (id,a) values (857,92);
+insert into t (id,a) values (857,93);
+insert into t (id,a) values (857,94);
+insert into t (id,a) values (857,95);
+insert into t (id,a) values (857,96);
+insert into t (id,a) values (857,97);
+insert into t (id,a) values (857,98);
+insert into t (id,a) values (857,99);
+insert into t (id,a) values (858,0);
+insert into t (id,a) values (858,1);
+insert into t (id,a) values (858,2);
+insert into t (id,a) values (858,3);
+insert into t (id,a) values (858,4);
+insert into t (id,a) values (858,5);
+insert into t (id,a) values (858,6);
+insert into t (id,a) values (858,7);
+insert into t (id,a) values (858,8);
+insert into t (id,a) values (858,9);
+insert into t (id,a) values (858,10);
+insert into t (id,a) values (858,11);
+insert into t (id,a) values (858,12);
+insert into t (id,a) values (858,13);
+insert into t (id,a) values (858,14);
+insert into t (id,a) values (858,15);
+insert into t (id,a) values (858,16);
+insert into t (id,a) values (858,17);
+insert into t (id,a) values (858,18);
+insert into t (id,a) values (858,19);
+insert into t (id,a) values (858,20);
+insert into t (id,a) values (858,21);
+insert into t (id,a) values (858,22);
+insert into t (id,a) values (858,23);
+insert into t (id,a) values (858,24);
+insert into t (id,a) values (858,25);
+insert into t (id,a) values (858,26);
+insert into t (id,a) values (858,27);
+insert into t (id,a) values (858,28);
+insert into t (id,a) values (858,29);
+insert into t (id,a) values (858,30);
+insert into t (id,a) values (858,31);
+insert into t (id,a) values (858,32);
+insert into t (id,a) values (858,33);
+insert into t (id,a) values (858,34);
+insert into t (id,a) values (858,35);
+insert into t (id,a) values (858,36);
+insert into t (id,a) values (858,37);
+insert into t (id,a) values (858,38);
+insert into t (id,a) values (858,39);
+insert into t (id,a) values (858,40);
+insert into t (id,a) values (858,41);
+insert into t (id,a) values (858,42);
+insert into t (id,a) values (858,43);
+insert into t (id,a) values (858,44);
+insert into t (id,a) values (858,45);
+insert into t (id,a) values (858,46);
+insert into t (id,a) values (858,47);
+insert into t (id,a) values (858,48);
+insert into t (id,a) values (858,49);
+insert into t (id,a) values (858,50);
+insert into t (id,a) values (858,51);
+insert into t (id,a) values (858,52);
+insert into t (id,a) values (858,53);
+insert into t (id,a) values (858,54);
+insert into t (id,a) values (858,55);
+insert into t (id,a) values (858,56);
+insert into t (id,a) values (858,57);
+insert into t (id,a) values (858,58);
+insert into t (id,a) values (858,59);
+insert into t (id,a) values (858,60);
+insert into t (id,a) values (858,61);
+insert into t (id,a) values (858,62);
+insert into t (id,a) values (858,63);
+insert into t (id,a) values (858,64);
+insert into t (id,a) values (858,65);
+insert into t (id,a) values (858,66);
+insert into t (id,a) values (858,67);
+insert into t (id,a) values (858,68);
+insert into t (id,a) values (858,69);
+insert into t (id,a) values (858,70);
+insert into t (id,a) values (858,71);
+insert into t (id,a) values (858,72);
+insert into t (id,a) values (858,73);
+insert into t (id,a) values (858,74);
+insert into t (id,a) values (858,75);
+insert into t (id,a) values (858,76);
+insert into t (id,a) values (858,77);
+insert into t (id,a) values (858,78);
+insert into t (id,a) values (858,79);
+insert into t (id,a) values (858,80);
+insert into t (id,a) values (858,81);
+insert into t (id,a) values (858,82);
+insert into t (id,a) values (858,83);
+insert into t (id,a) values (858,84);
+insert into t (id,a) values (858,85);
+insert into t (id,a) values (858,86);
+insert into t (id,a) values (858,87);
+insert into t (id,a) values (858,88);
+insert into t (id,a) values (858,89);
+insert into t (id,a) values (858,90);
+insert into t (id,a) values (858,91);
+insert into t (id,a) values (858,92);
+insert into t (id,a) values (858,93);
+insert into t (id,a) values (858,94);
+insert into t (id,a) values (858,95);
+insert into t (id,a) values (858,96);
+insert into t (id,a) values (858,97);
+insert into t (id,a) values (858,98);
+insert into t (id,a) values (858,99);
+insert into t (id,a) values (859,0);
+insert into t (id,a) values (859,1);
+insert into t (id,a) values (859,2);
+insert into t (id,a) values (859,3);
+insert into t (id,a) values (859,4);
+insert into t (id,a) values (859,5);
+insert into t (id,a) values (859,6);
+insert into t (id,a) values (859,7);
+insert into t (id,a) values (859,8);
+insert into t (id,a) values (859,9);
+insert into t (id,a) values (859,10);
+insert into t (id,a) values (859,11);
+insert into t (id,a) values (859,12);
+insert into t (id,a) values (859,13);
+insert into t (id,a) values (859,14);
+insert into t (id,a) values (859,15);
+insert into t (id,a) values (859,16);
+insert into t (id,a) values (859,17);
+insert into t (id,a) values (859,18);
+insert into t (id,a) values (859,19);
+insert into t (id,a) values (859,20);
+insert into t (id,a) values (859,21);
+insert into t (id,a) values (859,22);
+insert into t (id,a) values (859,23);
+insert into t (id,a) values (859,24);
+insert into t (id,a) values (859,25);
+insert into t (id,a) values (859,26);
+insert into t (id,a) values (859,27);
+insert into t (id,a) values (859,28);
+insert into t (id,a) values (859,29);
+insert into t (id,a) values (859,30);
+insert into t (id,a) values (859,31);
+insert into t (id,a) values (859,32);
+insert into t (id,a) values (859,33);
+insert into t (id,a) values (859,34);
+insert into t (id,a) values (859,35);
+insert into t (id,a) values (859,36);
+insert into t (id,a) values (859,37);
+insert into t (id,a) values (859,38);
+insert into t (id,a) values (859,39);
+insert into t (id,a) values (859,40);
+insert into t (id,a) values (859,41);
+insert into t (id,a) values (859,42);
+insert into t (id,a) values (859,43);
+insert into t (id,a) values (859,44);
+insert into t (id,a) values (859,45);
+insert into t (id,a) values (859,46);
+insert into t (id,a) values (859,47);
+insert into t (id,a) values (859,48);
+insert into t (id,a) values (859,49);
+insert into t (id,a) values (859,50);
+insert into t (id,a) values (859,51);
+insert into t (id,a) values (859,52);
+insert into t (id,a) values (859,53);
+insert into t (id,a) values (859,54);
+insert into t (id,a) values (859,55);
+insert into t (id,a) values (859,56);
+insert into t (id,a) values (859,57);
+insert into t (id,a) values (859,58);
+insert into t (id,a) values (859,59);
+insert into t (id,a) values (859,60);
+insert into t (id,a) values (859,61);
+insert into t (id,a) values (859,62);
+insert into t (id,a) values (859,63);
+insert into t (id,a) values (859,64);
+insert into t (id,a) values (859,65);
+insert into t (id,a) values (859,66);
+insert into t (id,a) values (859,67);
+insert into t (id,a) values (859,68);
+insert into t (id,a) values (859,69);
+insert into t (id,a) values (859,70);
+insert into t (id,a) values (859,71);
+insert into t (id,a) values (859,72);
+insert into t (id,a) values (859,73);
+insert into t (id,a) values (859,74);
+insert into t (id,a) values (859,75);
+insert into t (id,a) values (859,76);
+insert into t (id,a) values (859,77);
+insert into t (id,a) values (859,78);
+insert into t (id,a) values (859,79);
+insert into t (id,a) values (859,80);
+insert into t (id,a) values (859,81);
+insert into t (id,a) values (859,82);
+insert into t (id,a) values (859,83);
+insert into t (id,a) values (859,84);
+insert into t (id,a) values (859,85);
+insert into t (id,a) values (859,86);
+insert into t (id,a) values (859,87);
+insert into t (id,a) values (859,88);
+insert into t (id,a) values (859,89);
+insert into t (id,a) values (859,90);
+insert into t (id,a) values (859,91);
+insert into t (id,a) values (859,92);
+insert into t (id,a) values (859,93);
+insert into t (id,a) values (859,94);
+insert into t (id,a) values (859,95);
+insert into t (id,a) values (859,96);
+insert into t (id,a) values (859,97);
+insert into t (id,a) values (859,98);
+insert into t (id,a) values (859,99);
+insert into t (id,a) values (860,0);
+insert into t (id,a) values (860,1);
+insert into t (id,a) values (860,2);
+insert into t (id,a) values (860,3);
+insert into t (id,a) values (860,4);
+insert into t (id,a) values (860,5);
+insert into t (id,a) values (860,6);
+insert into t (id,a) values (860,7);
+insert into t (id,a) values (860,8);
+insert into t (id,a) values (860,9);
+insert into t (id,a) values (860,10);
+insert into t (id,a) values (860,11);
+insert into t (id,a) values (860,12);
+insert into t (id,a) values (860,13);
+insert into t (id,a) values (860,14);
+insert into t (id,a) values (860,15);
+insert into t (id,a) values (860,16);
+insert into t (id,a) values (860,17);
+insert into t (id,a) values (860,18);
+insert into t (id,a) values (860,19);
+insert into t (id,a) values (860,20);
+insert into t (id,a) values (860,21);
+insert into t (id,a) values (860,22);
+insert into t (id,a) values (860,23);
+insert into t (id,a) values (860,24);
+insert into t (id,a) values (860,25);
+insert into t (id,a) values (860,26);
+insert into t (id,a) values (860,27);
+insert into t (id,a) values (860,28);
+insert into t (id,a) values (860,29);
+insert into t (id,a) values (860,30);
+insert into t (id,a) values (860,31);
+insert into t (id,a) values (860,32);
+insert into t (id,a) values (860,33);
+insert into t (id,a) values (860,34);
+insert into t (id,a) values (860,35);
+insert into t (id,a) values (860,36);
+insert into t (id,a) values (860,37);
+insert into t (id,a) values (860,38);
+insert into t (id,a) values (860,39);
+insert into t (id,a) values (860,40);
+insert into t (id,a) values (860,41);
+insert into t (id,a) values (860,42);
+insert into t (id,a) values (860,43);
+insert into t (id,a) values (860,44);
+insert into t (id,a) values (860,45);
+insert into t (id,a) values (860,46);
+insert into t (id,a) values (860,47);
+insert into t (id,a) values (860,48);
+insert into t (id,a) values (860,49);
+insert into t (id,a) values (860,50);
+insert into t (id,a) values (860,51);
+insert into t (id,a) values (860,52);
+insert into t (id,a) values (860,53);
+insert into t (id,a) values (860,54);
+insert into t (id,a) values (860,55);
+insert into t (id,a) values (860,56);
+insert into t (id,a) values (860,57);
+insert into t (id,a) values (860,58);
+insert into t (id,a) values (860,59);
+insert into t (id,a) values (860,60);
+insert into t (id,a) values (860,61);
+insert into t (id,a) values (860,62);
+insert into t (id,a) values (860,63);
+insert into t (id,a) values (860,64);
+insert into t (id,a) values (860,65);
+insert into t (id,a) values (860,66);
+insert into t (id,a) values (860,67);
+insert into t (id,a) values (860,68);
+insert into t (id,a) values (860,69);
+insert into t (id,a) values (860,70);
+insert into t (id,a) values (860,71);
+insert into t (id,a) values (860,72);
+insert into t (id,a) values (860,73);
+insert into t (id,a) values (860,74);
+insert into t (id,a) values (860,75);
+insert into t (id,a) values (860,76);
+insert into t (id,a) values (860,77);
+insert into t (id,a) values (860,78);
+insert into t (id,a) values (860,79);
+insert into t (id,a) values (860,80);
+insert into t (id,a) values (860,81);
+insert into t (id,a) values (860,82);
+insert into t (id,a) values (860,83);
+insert into t (id,a) values (860,84);
+insert into t (id,a) values (860,85);
+insert into t (id,a) values (860,86);
+insert into t (id,a) values (860,87);
+insert into t (id,a) values (860,88);
+insert into t (id,a) values (860,89);
+insert into t (id,a) values (860,90);
+insert into t (id,a) values (860,91);
+insert into t (id,a) values (860,92);
+insert into t (id,a) values (860,93);
+insert into t (id,a) values (860,94);
+insert into t (id,a) values (860,95);
+insert into t (id,a) values (860,96);
+insert into t (id,a) values (860,97);
+insert into t (id,a) values (860,98);
+insert into t (id,a) values (860,99);
+insert into t (id,a) values (861,0);
+insert into t (id,a) values (861,1);
+insert into t (id,a) values (861,2);
+insert into t (id,a) values (861,3);
+insert into t (id,a) values (861,4);
+insert into t (id,a) values (861,5);
+insert into t (id,a) values (861,6);
+insert into t (id,a) values (861,7);
+insert into t (id,a) values (861,8);
+insert into t (id,a) values (861,9);
+insert into t (id,a) values (861,10);
+insert into t (id,a) values (861,11);
+insert into t (id,a) values (861,12);
+insert into t (id,a) values (861,13);
+insert into t (id,a) values (861,14);
+insert into t (id,a) values (861,15);
+insert into t (id,a) values (861,16);
+insert into t (id,a) values (861,17);
+insert into t (id,a) values (861,18);
+insert into t (id,a) values (861,19);
+insert into t (id,a) values (861,20);
+insert into t (id,a) values (861,21);
+insert into t (id,a) values (861,22);
+insert into t (id,a) values (861,23);
+insert into t (id,a) values (861,24);
+insert into t (id,a) values (861,25);
+insert into t (id,a) values (861,26);
+insert into t (id,a) values (861,27);
+insert into t (id,a) values (861,28);
+insert into t (id,a) values (861,29);
+insert into t (id,a) values (861,30);
+insert into t (id,a) values (861,31);
+insert into t (id,a) values (861,32);
+insert into t (id,a) values (861,33);
+insert into t (id,a) values (861,34);
+insert into t (id,a) values (861,35);
+insert into t (id,a) values (861,36);
+insert into t (id,a) values (861,37);
+insert into t (id,a) values (861,38);
+insert into t (id,a) values (861,39);
+insert into t (id,a) values (861,40);
+insert into t (id,a) values (861,41);
+insert into t (id,a) values (861,42);
+insert into t (id,a) values (861,43);
+insert into t (id,a) values (861,44);
+insert into t (id,a) values (861,45);
+insert into t (id,a) values (861,46);
+insert into t (id,a) values (861,47);
+insert into t (id,a) values (861,48);
+insert into t (id,a) values (861,49);
+insert into t (id,a) values (861,50);
+insert into t (id,a) values (861,51);
+insert into t (id,a) values (861,52);
+insert into t (id,a) values (861,53);
+insert into t (id,a) values (861,54);
+insert into t (id,a) values (861,55);
+insert into t (id,a) values (861,56);
+insert into t (id,a) values (861,57);
+insert into t (id,a) values (861,58);
+insert into t (id,a) values (861,59);
+insert into t (id,a) values (861,60);
+insert into t (id,a) values (861,61);
+insert into t (id,a) values (861,62);
+insert into t (id,a) values (861,63);
+insert into t (id,a) values (861,64);
+insert into t (id,a) values (861,65);
+insert into t (id,a) values (861,66);
+insert into t (id,a) values (861,67);
+insert into t (id,a) values (861,68);
+insert into t (id,a) values (861,69);
+insert into t (id,a) values (861,70);
+insert into t (id,a) values (861,71);
+insert into t (id,a) values (861,72);
+insert into t (id,a) values (861,73);
+insert into t (id,a) values (861,74);
+insert into t (id,a) values (861,75);
+insert into t (id,a) values (861,76);
+insert into t (id,a) values (861,77);
+insert into t (id,a) values (861,78);
+insert into t (id,a) values (861,79);
+insert into t (id,a) values (861,80);
+insert into t (id,a) values (861,81);
+insert into t (id,a) values (861,82);
+insert into t (id,a) values (861,83);
+insert into t (id,a) values (861,84);
+insert into t (id,a) values (861,85);
+insert into t (id,a) values (861,86);
+insert into t (id,a) values (861,87);
+insert into t (id,a) values (861,88);
+insert into t (id,a) values (861,89);
+insert into t (id,a) values (861,90);
+insert into t (id,a) values (861,91);
+insert into t (id,a) values (861,92);
+insert into t (id,a) values (861,93);
+insert into t (id,a) values (861,94);
+insert into t (id,a) values (861,95);
+insert into t (id,a) values (861,96);
+insert into t (id,a) values (861,97);
+insert into t (id,a) values (861,98);
+insert into t (id,a) values (861,99);
+insert into t (id,a) values (862,0);
+insert into t (id,a) values (862,1);
+insert into t (id,a) values (862,2);
+insert into t (id,a) values (862,3);
+insert into t (id,a) values (862,4);
+insert into t (id,a) values (862,5);
+insert into t (id,a) values (862,6);
+insert into t (id,a) values (862,7);
+insert into t (id,a) values (862,8);
+insert into t (id,a) values (862,9);
+insert into t (id,a) values (862,10);
+insert into t (id,a) values (862,11);
+insert into t (id,a) values (862,12);
+insert into t (id,a) values (862,13);
+insert into t (id,a) values (862,14);
+insert into t (id,a) values (862,15);
+insert into t (id,a) values (862,16);
+insert into t (id,a) values (862,17);
+insert into t (id,a) values (862,18);
+insert into t (id,a) values (862,19);
+insert into t (id,a) values (862,20);
+insert into t (id,a) values (862,21);
+insert into t (id,a) values (862,22);
+insert into t (id,a) values (862,23);
+insert into t (id,a) values (862,24);
+insert into t (id,a) values (862,25);
+insert into t (id,a) values (862,26);
+insert into t (id,a) values (862,27);
+insert into t (id,a) values (862,28);
+insert into t (id,a) values (862,29);
+insert into t (id,a) values (862,30);
+insert into t (id,a) values (862,31);
+insert into t (id,a) values (862,32);
+insert into t (id,a) values (862,33);
+insert into t (id,a) values (862,34);
+insert into t (id,a) values (862,35);
+insert into t (id,a) values (862,36);
+insert into t (id,a) values (862,37);
+insert into t (id,a) values (862,38);
+insert into t (id,a) values (862,39);
+insert into t (id,a) values (862,40);
+insert into t (id,a) values (862,41);
+insert into t (id,a) values (862,42);
+insert into t (id,a) values (862,43);
+insert into t (id,a) values (862,44);
+insert into t (id,a) values (862,45);
+insert into t (id,a) values (862,46);
+insert into t (id,a) values (862,47);
+insert into t (id,a) values (862,48);
+insert into t (id,a) values (862,49);
+insert into t (id,a) values (862,50);
+insert into t (id,a) values (862,51);
+insert into t (id,a) values (862,52);
+insert into t (id,a) values (862,53);
+insert into t (id,a) values (862,54);
+insert into t (id,a) values (862,55);
+insert into t (id,a) values (862,56);
+insert into t (id,a) values (862,57);
+insert into t (id,a) values (862,58);
+insert into t (id,a) values (862,59);
+insert into t (id,a) values (862,60);
+insert into t (id,a) values (862,61);
+insert into t (id,a) values (862,62);
+insert into t (id,a) values (862,63);
+insert into t (id,a) values (862,64);
+insert into t (id,a) values (862,65);
+insert into t (id,a) values (862,66);
+insert into t (id,a) values (862,67);
+insert into t (id,a) values (862,68);
+insert into t (id,a) values (862,69);
+insert into t (id,a) values (862,70);
+insert into t (id,a) values (862,71);
+insert into t (id,a) values (862,72);
+insert into t (id,a) values (862,73);
+insert into t (id,a) values (862,74);
+insert into t (id,a) values (862,75);
+insert into t (id,a) values (862,76);
+insert into t (id,a) values (862,77);
+insert into t (id,a) values (862,78);
+insert into t (id,a) values (862,79);
+insert into t (id,a) values (862,80);
+insert into t (id,a) values (862,81);
+insert into t (id,a) values (862,82);
+insert into t (id,a) values (862,83);
+insert into t (id,a) values (862,84);
+insert into t (id,a) values (862,85);
+insert into t (id,a) values (862,86);
+insert into t (id,a) values (862,87);
+insert into t (id,a) values (862,88);
+insert into t (id,a) values (862,89);
+insert into t (id,a) values (862,90);
+insert into t (id,a) values (862,91);
+insert into t (id,a) values (862,92);
+insert into t (id,a) values (862,93);
+insert into t (id,a) values (862,94);
+insert into t (id,a) values (862,95);
+insert into t (id,a) values (862,96);
+insert into t (id,a) values (862,97);
+insert into t (id,a) values (862,98);
+insert into t (id,a) values (862,99);
+insert into t (id,a) values (863,0);
+insert into t (id,a) values (863,1);
+insert into t (id,a) values (863,2);
+insert into t (id,a) values (863,3);
+insert into t (id,a) values (863,4);
+insert into t (id,a) values (863,5);
+insert into t (id,a) values (863,6);
+insert into t (id,a) values (863,7);
+insert into t (id,a) values (863,8);
+insert into t (id,a) values (863,9);
+insert into t (id,a) values (863,10);
+insert into t (id,a) values (863,11);
+insert into t (id,a) values (863,12);
+insert into t (id,a) values (863,13);
+insert into t (id,a) values (863,14);
+insert into t (id,a) values (863,15);
+insert into t (id,a) values (863,16);
+insert into t (id,a) values (863,17);
+insert into t (id,a) values (863,18);
+insert into t (id,a) values (863,19);
+insert into t (id,a) values (863,20);
+insert into t (id,a) values (863,21);
+insert into t (id,a) values (863,22);
+insert into t (id,a) values (863,23);
+insert into t (id,a) values (863,24);
+insert into t (id,a) values (863,25);
+insert into t (id,a) values (863,26);
+insert into t (id,a) values (863,27);
+insert into t (id,a) values (863,28);
+insert into t (id,a) values (863,29);
+insert into t (id,a) values (863,30);
+insert into t (id,a) values (863,31);
+insert into t (id,a) values (863,32);
+insert into t (id,a) values (863,33);
+insert into t (id,a) values (863,34);
+insert into t (id,a) values (863,35);
+insert into t (id,a) values (863,36);
+insert into t (id,a) values (863,37);
+insert into t (id,a) values (863,38);
+insert into t (id,a) values (863,39);
+insert into t (id,a) values (863,40);
+insert into t (id,a) values (863,41);
+insert into t (id,a) values (863,42);
+insert into t (id,a) values (863,43);
+insert into t (id,a) values (863,44);
+insert into t (id,a) values (863,45);
+insert into t (id,a) values (863,46);
+insert into t (id,a) values (863,47);
+insert into t (id,a) values (863,48);
+insert into t (id,a) values (863,49);
+insert into t (id,a) values (863,50);
+insert into t (id,a) values (863,51);
+insert into t (id,a) values (863,52);
+insert into t (id,a) values (863,53);
+insert into t (id,a) values (863,54);
+insert into t (id,a) values (863,55);
+insert into t (id,a) values (863,56);
+insert into t (id,a) values (863,57);
+insert into t (id,a) values (863,58);
+insert into t (id,a) values (863,59);
+insert into t (id,a) values (863,60);
+insert into t (id,a) values (863,61);
+insert into t (id,a) values (863,62);
+insert into t (id,a) values (863,63);
+insert into t (id,a) values (863,64);
+insert into t (id,a) values (863,65);
+insert into t (id,a) values (863,66);
+insert into t (id,a) values (863,67);
+insert into t (id,a) values (863,68);
+insert into t (id,a) values (863,69);
+insert into t (id,a) values (863,70);
+insert into t (id,a) values (863,71);
+insert into t (id,a) values (863,72);
+insert into t (id,a) values (863,73);
+insert into t (id,a) values (863,74);
+insert into t (id,a) values (863,75);
+insert into t (id,a) values (863,76);
+insert into t (id,a) values (863,77);
+insert into t (id,a) values (863,78);
+insert into t (id,a) values (863,79);
+insert into t (id,a) values (863,80);
+insert into t (id,a) values (863,81);
+insert into t (id,a) values (863,82);
+insert into t (id,a) values (863,83);
+insert into t (id,a) values (863,84);
+insert into t (id,a) values (863,85);
+insert into t (id,a) values (863,86);
+insert into t (id,a) values (863,87);
+insert into t (id,a) values (863,88);
+insert into t (id,a) values (863,89);
+insert into t (id,a) values (863,90);
+insert into t (id,a) values (863,91);
+insert into t (id,a) values (863,92);
+insert into t (id,a) values (863,93);
+insert into t (id,a) values (863,94);
+insert into t (id,a) values (863,95);
+insert into t (id,a) values (863,96);
+insert into t (id,a) values (863,97);
+insert into t (id,a) values (863,98);
+insert into t (id,a) values (863,99);
+insert into t (id,a) values (864,0);
+insert into t (id,a) values (864,1);
+insert into t (id,a) values (864,2);
+insert into t (id,a) values (864,3);
+insert into t (id,a) values (864,4);
+insert into t (id,a) values (864,5);
+insert into t (id,a) values (864,6);
+insert into t (id,a) values (864,7);
+insert into t (id,a) values (864,8);
+insert into t (id,a) values (864,9);
+insert into t (id,a) values (864,10);
+insert into t (id,a) values (864,11);
+insert into t (id,a) values (864,12);
+insert into t (id,a) values (864,13);
+insert into t (id,a) values (864,14);
+insert into t (id,a) values (864,15);
+insert into t (id,a) values (864,16);
+insert into t (id,a) values (864,17);
+insert into t (id,a) values (864,18);
+insert into t (id,a) values (864,19);
+insert into t (id,a) values (864,20);
+insert into t (id,a) values (864,21);
+insert into t (id,a) values (864,22);
+insert into t (id,a) values (864,23);
+insert into t (id,a) values (864,24);
+insert into t (id,a) values (864,25);
+insert into t (id,a) values (864,26);
+insert into t (id,a) values (864,27);
+insert into t (id,a) values (864,28);
+insert into t (id,a) values (864,29);
+insert into t (id,a) values (864,30);
+insert into t (id,a) values (864,31);
+insert into t (id,a) values (864,32);
+insert into t (id,a) values (864,33);
+insert into t (id,a) values (864,34);
+insert into t (id,a) values (864,35);
+insert into t (id,a) values (864,36);
+insert into t (id,a) values (864,37);
+insert into t (id,a) values (864,38);
+insert into t (id,a) values (864,39);
+insert into t (id,a) values (864,40);
+insert into t (id,a) values (864,41);
+insert into t (id,a) values (864,42);
+insert into t (id,a) values (864,43);
+insert into t (id,a) values (864,44);
+insert into t (id,a) values (864,45);
+insert into t (id,a) values (864,46);
+insert into t (id,a) values (864,47);
+insert into t (id,a) values (864,48);
+insert into t (id,a) values (864,49);
+insert into t (id,a) values (864,50);
+insert into t (id,a) values (864,51);
+insert into t (id,a) values (864,52);
+insert into t (id,a) values (864,53);
+insert into t (id,a) values (864,54);
+insert into t (id,a) values (864,55);
+insert into t (id,a) values (864,56);
+insert into t (id,a) values (864,57);
+insert into t (id,a) values (864,58);
+insert into t (id,a) values (864,59);
+insert into t (id,a) values (864,60);
+insert into t (id,a) values (864,61);
+insert into t (id,a) values (864,62);
+insert into t (id,a) values (864,63);
+insert into t (id,a) values (864,64);
+insert into t (id,a) values (864,65);
+insert into t (id,a) values (864,66);
+insert into t (id,a) values (864,67);
+insert into t (id,a) values (864,68);
+insert into t (id,a) values (864,69);
+insert into t (id,a) values (864,70);
+insert into t (id,a) values (864,71);
+insert into t (id,a) values (864,72);
+insert into t (id,a) values (864,73);
+insert into t (id,a) values (864,74);
+insert into t (id,a) values (864,75);
+insert into t (id,a) values (864,76);
+insert into t (id,a) values (864,77);
+insert into t (id,a) values (864,78);
+insert into t (id,a) values (864,79);
+insert into t (id,a) values (864,80);
+insert into t (id,a) values (864,81);
+insert into t (id,a) values (864,82);
+insert into t (id,a) values (864,83);
+insert into t (id,a) values (864,84);
+insert into t (id,a) values (864,85);
+insert into t (id,a) values (864,86);
+insert into t (id,a) values (864,87);
+insert into t (id,a) values (864,88);
+insert into t (id,a) values (864,89);
+insert into t (id,a) values (864,90);
+insert into t (id,a) values (864,91);
+insert into t (id,a) values (864,92);
+insert into t (id,a) values (864,93);
+insert into t (id,a) values (864,94);
+insert into t (id,a) values (864,95);
+insert into t (id,a) values (864,96);
+insert into t (id,a) values (864,97);
+insert into t (id,a) values (864,98);
+insert into t (id,a) values (864,99);
+insert into t (id,a) values (865,0);
+insert into t (id,a) values (865,1);
+insert into t (id,a) values (865,2);
+insert into t (id,a) values (865,3);
+insert into t (id,a) values (865,4);
+insert into t (id,a) values (865,5);
+insert into t (id,a) values (865,6);
+insert into t (id,a) values (865,7);
+insert into t (id,a) values (865,8);
+insert into t (id,a) values (865,9);
+insert into t (id,a) values (865,10);
+insert into t (id,a) values (865,11);
+insert into t (id,a) values (865,12);
+insert into t (id,a) values (865,13);
+insert into t (id,a) values (865,14);
+insert into t (id,a) values (865,15);
+insert into t (id,a) values (865,16);
+insert into t (id,a) values (865,17);
+insert into t (id,a) values (865,18);
+insert into t (id,a) values (865,19);
+insert into t (id,a) values (865,20);
+insert into t (id,a) values (865,21);
+insert into t (id,a) values (865,22);
+insert into t (id,a) values (865,23);
+insert into t (id,a) values (865,24);
+insert into t (id,a) values (865,25);
+insert into t (id,a) values (865,26);
+insert into t (id,a) values (865,27);
+insert into t (id,a) values (865,28);
+insert into t (id,a) values (865,29);
+insert into t (id,a) values (865,30);
+insert into t (id,a) values (865,31);
+insert into t (id,a) values (865,32);
+insert into t (id,a) values (865,33);
+insert into t (id,a) values (865,34);
+insert into t (id,a) values (865,35);
+insert into t (id,a) values (865,36);
+insert into t (id,a) values (865,37);
+insert into t (id,a) values (865,38);
+insert into t (id,a) values (865,39);
+insert into t (id,a) values (865,40);
+insert into t (id,a) values (865,41);
+insert into t (id,a) values (865,42);
+insert into t (id,a) values (865,43);
+insert into t (id,a) values (865,44);
+insert into t (id,a) values (865,45);
+insert into t (id,a) values (865,46);
+insert into t (id,a) values (865,47);
+insert into t (id,a) values (865,48);
+insert into t (id,a) values (865,49);
+insert into t (id,a) values (865,50);
+insert into t (id,a) values (865,51);
+insert into t (id,a) values (865,52);
+insert into t (id,a) values (865,53);
+insert into t (id,a) values (865,54);
+insert into t (id,a) values (865,55);
+insert into t (id,a) values (865,56);
+insert into t (id,a) values (865,57);
+insert into t (id,a) values (865,58);
+insert into t (id,a) values (865,59);
+insert into t (id,a) values (865,60);
+insert into t (id,a) values (865,61);
+insert into t (id,a) values (865,62);
+insert into t (id,a) values (865,63);
+insert into t (id,a) values (865,64);
+insert into t (id,a) values (865,65);
+insert into t (id,a) values (865,66);
+insert into t (id,a) values (865,67);
+insert into t (id,a) values (865,68);
+insert into t (id,a) values (865,69);
+insert into t (id,a) values (865,70);
+insert into t (id,a) values (865,71);
+insert into t (id,a) values (865,72);
+insert into t (id,a) values (865,73);
+insert into t (id,a) values (865,74);
+insert into t (id,a) values (865,75);
+insert into t (id,a) values (865,76);
+insert into t (id,a) values (865,77);
+insert into t (id,a) values (865,78);
+insert into t (id,a) values (865,79);
+insert into t (id,a) values (865,80);
+insert into t (id,a) values (865,81);
+insert into t (id,a) values (865,82);
+insert into t (id,a) values (865,83);
+insert into t (id,a) values (865,84);
+insert into t (id,a) values (865,85);
+insert into t (id,a) values (865,86);
+insert into t (id,a) values (865,87);
+insert into t (id,a) values (865,88);
+insert into t (id,a) values (865,89);
+insert into t (id,a) values (865,90);
+insert into t (id,a) values (865,91);
+insert into t (id,a) values (865,92);
+insert into t (id,a) values (865,93);
+insert into t (id,a) values (865,94);
+insert into t (id,a) values (865,95);
+insert into t (id,a) values (865,96);
+insert into t (id,a) values (865,97);
+insert into t (id,a) values (865,98);
+insert into t (id,a) values (865,99);
+insert into t (id,a) values (866,0);
+insert into t (id,a) values (866,1);
+insert into t (id,a) values (866,2);
+insert into t (id,a) values (866,3);
+insert into t (id,a) values (866,4);
+insert into t (id,a) values (866,5);
+insert into t (id,a) values (866,6);
+insert into t (id,a) values (866,7);
+insert into t (id,a) values (866,8);
+insert into t (id,a) values (866,9);
+insert into t (id,a) values (866,10);
+insert into t (id,a) values (866,11);
+insert into t (id,a) values (866,12);
+insert into t (id,a) values (866,13);
+insert into t (id,a) values (866,14);
+insert into t (id,a) values (866,15);
+insert into t (id,a) values (866,16);
+insert into t (id,a) values (866,17);
+insert into t (id,a) values (866,18);
+insert into t (id,a) values (866,19);
+insert into t (id,a) values (866,20);
+insert into t (id,a) values (866,21);
+insert into t (id,a) values (866,22);
+insert into t (id,a) values (866,23);
+insert into t (id,a) values (866,24);
+insert into t (id,a) values (866,25);
+insert into t (id,a) values (866,26);
+insert into t (id,a) values (866,27);
+insert into t (id,a) values (866,28);
+insert into t (id,a) values (866,29);
+insert into t (id,a) values (866,30);
+insert into t (id,a) values (866,31);
+insert into t (id,a) values (866,32);
+insert into t (id,a) values (866,33);
+insert into t (id,a) values (866,34);
+insert into t (id,a) values (866,35);
+insert into t (id,a) values (866,36);
+insert into t (id,a) values (866,37);
+insert into t (id,a) values (866,38);
+insert into t (id,a) values (866,39);
+insert into t (id,a) values (866,40);
+insert into t (id,a) values (866,41);
+insert into t (id,a) values (866,42);
+insert into t (id,a) values (866,43);
+insert into t (id,a) values (866,44);
+insert into t (id,a) values (866,45);
+insert into t (id,a) values (866,46);
+insert into t (id,a) values (866,47);
+insert into t (id,a) values (866,48);
+insert into t (id,a) values (866,49);
+insert into t (id,a) values (866,50);
+insert into t (id,a) values (866,51);
+insert into t (id,a) values (866,52);
+insert into t (id,a) values (866,53);
+insert into t (id,a) values (866,54);
+insert into t (id,a) values (866,55);
+insert into t (id,a) values (866,56);
+insert into t (id,a) values (866,57);
+insert into t (id,a) values (866,58);
+insert into t (id,a) values (866,59);
+insert into t (id,a) values (866,60);
+insert into t (id,a) values (866,61);
+insert into t (id,a) values (866,62);
+insert into t (id,a) values (866,63);
+insert into t (id,a) values (866,64);
+insert into t (id,a) values (866,65);
+insert into t (id,a) values (866,66);
+insert into t (id,a) values (866,67);
+insert into t (id,a) values (866,68);
+insert into t (id,a) values (866,69);
+insert into t (id,a) values (866,70);
+insert into t (id,a) values (866,71);
+insert into t (id,a) values (866,72);
+insert into t (id,a) values (866,73);
+insert into t (id,a) values (866,74);
+insert into t (id,a) values (866,75);
+insert into t (id,a) values (866,76);
+insert into t (id,a) values (866,77);
+insert into t (id,a) values (866,78);
+insert into t (id,a) values (866,79);
+insert into t (id,a) values (866,80);
+insert into t (id,a) values (866,81);
+insert into t (id,a) values (866,82);
+insert into t (id,a) values (866,83);
+insert into t (id,a) values (866,84);
+insert into t (id,a) values (866,85);
+insert into t (id,a) values (866,86);
+insert into t (id,a) values (866,87);
+insert into t (id,a) values (866,88);
+insert into t (id,a) values (866,89);
+insert into t (id,a) values (866,90);
+insert into t (id,a) values (866,91);
+insert into t (id,a) values (866,92);
+insert into t (id,a) values (866,93);
+insert into t (id,a) values (866,94);
+insert into t (id,a) values (866,95);
+insert into t (id,a) values (866,96);
+insert into t (id,a) values (866,97);
+insert into t (id,a) values (866,98);
+insert into t (id,a) values (866,99);
+insert into t (id,a) values (867,0);
+insert into t (id,a) values (867,1);
+insert into t (id,a) values (867,2);
+insert into t (id,a) values (867,3);
+insert into t (id,a) values (867,4);
+insert into t (id,a) values (867,5);
+insert into t (id,a) values (867,6);
+insert into t (id,a) values (867,7);
+insert into t (id,a) values (867,8);
+insert into t (id,a) values (867,9);
+insert into t (id,a) values (867,10);
+insert into t (id,a) values (867,11);
+insert into t (id,a) values (867,12);
+insert into t (id,a) values (867,13);
+insert into t (id,a) values (867,14);
+insert into t (id,a) values (867,15);
+insert into t (id,a) values (867,16);
+insert into t (id,a) values (867,17);
+insert into t (id,a) values (867,18);
+insert into t (id,a) values (867,19);
+insert into t (id,a) values (867,20);
+insert into t (id,a) values (867,21);
+insert into t (id,a) values (867,22);
+insert into t (id,a) values (867,23);
+insert into t (id,a) values (867,24);
+insert into t (id,a) values (867,25);
+insert into t (id,a) values (867,26);
+insert into t (id,a) values (867,27);
+insert into t (id,a) values (867,28);
+insert into t (id,a) values (867,29);
+insert into t (id,a) values (867,30);
+insert into t (id,a) values (867,31);
+insert into t (id,a) values (867,32);
+insert into t (id,a) values (867,33);
+insert into t (id,a) values (867,34);
+insert into t (id,a) values (867,35);
+insert into t (id,a) values (867,36);
+insert into t (id,a) values (867,37);
+insert into t (id,a) values (867,38);
+insert into t (id,a) values (867,39);
+insert into t (id,a) values (867,40);
+insert into t (id,a) values (867,41);
+insert into t (id,a) values (867,42);
+insert into t (id,a) values (867,43);
+insert into t (id,a) values (867,44);
+insert into t (id,a) values (867,45);
+insert into t (id,a) values (867,46);
+insert into t (id,a) values (867,47);
+insert into t (id,a) values (867,48);
+insert into t (id,a) values (867,49);
+insert into t (id,a) values (867,50);
+insert into t (id,a) values (867,51);
+insert into t (id,a) values (867,52);
+insert into t (id,a) values (867,53);
+insert into t (id,a) values (867,54);
+insert into t (id,a) values (867,55);
+insert into t (id,a) values (867,56);
+insert into t (id,a) values (867,57);
+insert into t (id,a) values (867,58);
+insert into t (id,a) values (867,59);
+insert into t (id,a) values (867,60);
+insert into t (id,a) values (867,61);
+insert into t (id,a) values (867,62);
+insert into t (id,a) values (867,63);
+insert into t (id,a) values (867,64);
+insert into t (id,a) values (867,65);
+insert into t (id,a) values (867,66);
+insert into t (id,a) values (867,67);
+insert into t (id,a) values (867,68);
+insert into t (id,a) values (867,69);
+insert into t (id,a) values (867,70);
+insert into t (id,a) values (867,71);
+insert into t (id,a) values (867,72);
+insert into t (id,a) values (867,73);
+insert into t (id,a) values (867,74);
+insert into t (id,a) values (867,75);
+insert into t (id,a) values (867,76);
+insert into t (id,a) values (867,77);
+insert into t (id,a) values (867,78);
+insert into t (id,a) values (867,79);
+insert into t (id,a) values (867,80);
+insert into t (id,a) values (867,81);
+insert into t (id,a) values (867,82);
+insert into t (id,a) values (867,83);
+insert into t (id,a) values (867,84);
+insert into t (id,a) values (867,85);
+insert into t (id,a) values (867,86);
+insert into t (id,a) values (867,87);
+insert into t (id,a) values (867,88);
+insert into t (id,a) values (867,89);
+insert into t (id,a) values (867,90);
+insert into t (id,a) values (867,91);
+insert into t (id,a) values (867,92);
+insert into t (id,a) values (867,93);
+insert into t (id,a) values (867,94);
+insert into t (id,a) values (867,95);
+insert into t (id,a) values (867,96);
+insert into t (id,a) values (867,97);
+insert into t (id,a) values (867,98);
+insert into t (id,a) values (867,99);
+insert into t (id,a) values (868,0);
+insert into t (id,a) values (868,1);
+insert into t (id,a) values (868,2);
+insert into t (id,a) values (868,3);
+insert into t (id,a) values (868,4);
+insert into t (id,a) values (868,5);
+insert into t (id,a) values (868,6);
+insert into t (id,a) values (868,7);
+insert into t (id,a) values (868,8);
+insert into t (id,a) values (868,9);
+insert into t (id,a) values (868,10);
+insert into t (id,a) values (868,11);
+insert into t (id,a) values (868,12);
+insert into t (id,a) values (868,13);
+insert into t (id,a) values (868,14);
+insert into t (id,a) values (868,15);
+insert into t (id,a) values (868,16);
+insert into t (id,a) values (868,17);
+insert into t (id,a) values (868,18);
+insert into t (id,a) values (868,19);
+insert into t (id,a) values (868,20);
+insert into t (id,a) values (868,21);
+insert into t (id,a) values (868,22);
+insert into t (id,a) values (868,23);
+insert into t (id,a) values (868,24);
+insert into t (id,a) values (868,25);
+insert into t (id,a) values (868,26);
+insert into t (id,a) values (868,27);
+insert into t (id,a) values (868,28);
+insert into t (id,a) values (868,29);
+insert into t (id,a) values (868,30);
+insert into t (id,a) values (868,31);
+insert into t (id,a) values (868,32);
+insert into t (id,a) values (868,33);
+insert into t (id,a) values (868,34);
+insert into t (id,a) values (868,35);
+insert into t (id,a) values (868,36);
+insert into t (id,a) values (868,37);
+insert into t (id,a) values (868,38);
+insert into t (id,a) values (868,39);
+insert into t (id,a) values (868,40);
+insert into t (id,a) values (868,41);
+insert into t (id,a) values (868,42);
+insert into t (id,a) values (868,43);
+insert into t (id,a) values (868,44);
+insert into t (id,a) values (868,45);
+insert into t (id,a) values (868,46);
+insert into t (id,a) values (868,47);
+insert into t (id,a) values (868,48);
+insert into t (id,a) values (868,49);
+insert into t (id,a) values (868,50);
+insert into t (id,a) values (868,51);
+insert into t (id,a) values (868,52);
+insert into t (id,a) values (868,53);
+insert into t (id,a) values (868,54);
+insert into t (id,a) values (868,55);
+insert into t (id,a) values (868,56);
+insert into t (id,a) values (868,57);
+insert into t (id,a) values (868,58);
+insert into t (id,a) values (868,59);
+insert into t (id,a) values (868,60);
+insert into t (id,a) values (868,61);
+insert into t (id,a) values (868,62);
+insert into t (id,a) values (868,63);
+insert into t (id,a) values (868,64);
+insert into t (id,a) values (868,65);
+insert into t (id,a) values (868,66);
+insert into t (id,a) values (868,67);
+insert into t (id,a) values (868,68);
+insert into t (id,a) values (868,69);
+insert into t (id,a) values (868,70);
+insert into t (id,a) values (868,71);
+insert into t (id,a) values (868,72);
+insert into t (id,a) values (868,73);
+insert into t (id,a) values (868,74);
+insert into t (id,a) values (868,75);
+insert into t (id,a) values (868,76);
+insert into t (id,a) values (868,77);
+insert into t (id,a) values (868,78);
+insert into t (id,a) values (868,79);
+insert into t (id,a) values (868,80);
+insert into t (id,a) values (868,81);
+insert into t (id,a) values (868,82);
+insert into t (id,a) values (868,83);
+insert into t (id,a) values (868,84);
+insert into t (id,a) values (868,85);
+insert into t (id,a) values (868,86);
+insert into t (id,a) values (868,87);
+insert into t (id,a) values (868,88);
+insert into t (id,a) values (868,89);
+insert into t (id,a) values (868,90);
+insert into t (id,a) values (868,91);
+insert into t (id,a) values (868,92);
+insert into t (id,a) values (868,93);
+insert into t (id,a) values (868,94);
+insert into t (id,a) values (868,95);
+insert into t (id,a) values (868,96);
+insert into t (id,a) values (868,97);
+insert into t (id,a) values (868,98);
+insert into t (id,a) values (868,99);
+insert into t (id,a) values (869,0);
+insert into t (id,a) values (869,1);
+insert into t (id,a) values (869,2);
+insert into t (id,a) values (869,3);
+insert into t (id,a) values (869,4);
+insert into t (id,a) values (869,5);
+insert into t (id,a) values (869,6);
+insert into t (id,a) values (869,7);
+insert into t (id,a) values (869,8);
+insert into t (id,a) values (869,9);
+insert into t (id,a) values (869,10);
+insert into t (id,a) values (869,11);
+insert into t (id,a) values (869,12);
+insert into t (id,a) values (869,13);
+insert into t (id,a) values (869,14);
+insert into t (id,a) values (869,15);
+insert into t (id,a) values (869,16);
+insert into t (id,a) values (869,17);
+insert into t (id,a) values (869,18);
+insert into t (id,a) values (869,19);
+insert into t (id,a) values (869,20);
+insert into t (id,a) values (869,21);
+insert into t (id,a) values (869,22);
+insert into t (id,a) values (869,23);
+insert into t (id,a) values (869,24);
+insert into t (id,a) values (869,25);
+insert into t (id,a) values (869,26);
+insert into t (id,a) values (869,27);
+insert into t (id,a) values (869,28);
+insert into t (id,a) values (869,29);
+insert into t (id,a) values (869,30);
+insert into t (id,a) values (869,31);
+insert into t (id,a) values (869,32);
+insert into t (id,a) values (869,33);
+insert into t (id,a) values (869,34);
+insert into t (id,a) values (869,35);
+insert into t (id,a) values (869,36);
+insert into t (id,a) values (869,37);
+insert into t (id,a) values (869,38);
+insert into t (id,a) values (869,39);
+insert into t (id,a) values (869,40);
+insert into t (id,a) values (869,41);
+insert into t (id,a) values (869,42);
+insert into t (id,a) values (869,43);
+insert into t (id,a) values (869,44);
+insert into t (id,a) values (869,45);
+insert into t (id,a) values (869,46);
+insert into t (id,a) values (869,47);
+insert into t (id,a) values (869,48);
+insert into t (id,a) values (869,49);
+insert into t (id,a) values (869,50);
+insert into t (id,a) values (869,51);
+insert into t (id,a) values (869,52);
+insert into t (id,a) values (869,53);
+insert into t (id,a) values (869,54);
+insert into t (id,a) values (869,55);
+insert into t (id,a) values (869,56);
+insert into t (id,a) values (869,57);
+insert into t (id,a) values (869,58);
+insert into t (id,a) values (869,59);
+insert into t (id,a) values (869,60);
+insert into t (id,a) values (869,61);
+insert into t (id,a) values (869,62);
+insert into t (id,a) values (869,63);
+insert into t (id,a) values (869,64);
+insert into t (id,a) values (869,65);
+insert into t (id,a) values (869,66);
+insert into t (id,a) values (869,67);
+insert into t (id,a) values (869,68);
+insert into t (id,a) values (869,69);
+insert into t (id,a) values (869,70);
+insert into t (id,a) values (869,71);
+insert into t (id,a) values (869,72);
+insert into t (id,a) values (869,73);
+insert into t (id,a) values (869,74);
+insert into t (id,a) values (869,75);
+insert into t (id,a) values (869,76);
+insert into t (id,a) values (869,77);
+insert into t (id,a) values (869,78);
+insert into t (id,a) values (869,79);
+insert into t (id,a) values (869,80);
+insert into t (id,a) values (869,81);
+insert into t (id,a) values (869,82);
+insert into t (id,a) values (869,83);
+insert into t (id,a) values (869,84);
+insert into t (id,a) values (869,85);
+insert into t (id,a) values (869,86);
+insert into t (id,a) values (869,87);
+insert into t (id,a) values (869,88);
+insert into t (id,a) values (869,89);
+insert into t (id,a) values (869,90);
+insert into t (id,a) values (869,91);
+insert into t (id,a) values (869,92);
+insert into t (id,a) values (869,93);
+insert into t (id,a) values (869,94);
+insert into t (id,a) values (869,95);
+insert into t (id,a) values (869,96);
+insert into t (id,a) values (869,97);
+insert into t (id,a) values (869,98);
+insert into t (id,a) values (869,99);
+insert into t (id,a) values (870,0);
+insert into t (id,a) values (870,1);
+insert into t (id,a) values (870,2);
+insert into t (id,a) values (870,3);
+insert into t (id,a) values (870,4);
+insert into t (id,a) values (870,5);
+insert into t (id,a) values (870,6);
+insert into t (id,a) values (870,7);
+insert into t (id,a) values (870,8);
+insert into t (id,a) values (870,9);
+insert into t (id,a) values (870,10);
+insert into t (id,a) values (870,11);
+insert into t (id,a) values (870,12);
+insert into t (id,a) values (870,13);
+insert into t (id,a) values (870,14);
+insert into t (id,a) values (870,15);
+insert into t (id,a) values (870,16);
+insert into t (id,a) values (870,17);
+insert into t (id,a) values (870,18);
+insert into t (id,a) values (870,19);
+insert into t (id,a) values (870,20);
+insert into t (id,a) values (870,21);
+insert into t (id,a) values (870,22);
+insert into t (id,a) values (870,23);
+insert into t (id,a) values (870,24);
+insert into t (id,a) values (870,25);
+insert into t (id,a) values (870,26);
+insert into t (id,a) values (870,27);
+insert into t (id,a) values (870,28);
+insert into t (id,a) values (870,29);
+insert into t (id,a) values (870,30);
+insert into t (id,a) values (870,31);
+insert into t (id,a) values (870,32);
+insert into t (id,a) values (870,33);
+insert into t (id,a) values (870,34);
+insert into t (id,a) values (870,35);
+insert into t (id,a) values (870,36);
+insert into t (id,a) values (870,37);
+insert into t (id,a) values (870,38);
+insert into t (id,a) values (870,39);
+insert into t (id,a) values (870,40);
+insert into t (id,a) values (870,41);
+insert into t (id,a) values (870,42);
+insert into t (id,a) values (870,43);
+insert into t (id,a) values (870,44);
+insert into t (id,a) values (870,45);
+insert into t (id,a) values (870,46);
+insert into t (id,a) values (870,47);
+insert into t (id,a) values (870,48);
+insert into t (id,a) values (870,49);
+insert into t (id,a) values (870,50);
+insert into t (id,a) values (870,51);
+insert into t (id,a) values (870,52);
+insert into t (id,a) values (870,53);
+insert into t (id,a) values (870,54);
+insert into t (id,a) values (870,55);
+insert into t (id,a) values (870,56);
+insert into t (id,a) values (870,57);
+insert into t (id,a) values (870,58);
+insert into t (id,a) values (870,59);
+insert into t (id,a) values (870,60);
+insert into t (id,a) values (870,61);
+insert into t (id,a) values (870,62);
+insert into t (id,a) values (870,63);
+insert into t (id,a) values (870,64);
+insert into t (id,a) values (870,65);
+insert into t (id,a) values (870,66);
+insert into t (id,a) values (870,67);
+insert into t (id,a) values (870,68);
+insert into t (id,a) values (870,69);
+insert into t (id,a) values (870,70);
+insert into t (id,a) values (870,71);
+insert into t (id,a) values (870,72);
+insert into t (id,a) values (870,73);
+insert into t (id,a) values (870,74);
+insert into t (id,a) values (870,75);
+insert into t (id,a) values (870,76);
+insert into t (id,a) values (870,77);
+insert into t (id,a) values (870,78);
+insert into t (id,a) values (870,79);
+insert into t (id,a) values (870,80);
+insert into t (id,a) values (870,81);
+insert into t (id,a) values (870,82);
+insert into t (id,a) values (870,83);
+insert into t (id,a) values (870,84);
+insert into t (id,a) values (870,85);
+insert into t (id,a) values (870,86);
+insert into t (id,a) values (870,87);
+insert into t (id,a) values (870,88);
+insert into t (id,a) values (870,89);
+insert into t (id,a) values (870,90);
+insert into t (id,a) values (870,91);
+insert into t (id,a) values (870,92);
+insert into t (id,a) values (870,93);
+insert into t (id,a) values (870,94);
+insert into t (id,a) values (870,95);
+insert into t (id,a) values (870,96);
+insert into t (id,a) values (870,97);
+insert into t (id,a) values (870,98);
+insert into t (id,a) values (870,99);
+insert into t (id,a) values (871,0);
+insert into t (id,a) values (871,1);
+insert into t (id,a) values (871,2);
+insert into t (id,a) values (871,3);
+insert into t (id,a) values (871,4);
+insert into t (id,a) values (871,5);
+insert into t (id,a) values (871,6);
+insert into t (id,a) values (871,7);
+insert into t (id,a) values (871,8);
+insert into t (id,a) values (871,9);
+insert into t (id,a) values (871,10);
+insert into t (id,a) values (871,11);
+insert into t (id,a) values (871,12);
+insert into t (id,a) values (871,13);
+insert into t (id,a) values (871,14);
+insert into t (id,a) values (871,15);
+insert into t (id,a) values (871,16);
+insert into t (id,a) values (871,17);
+insert into t (id,a) values (871,18);
+insert into t (id,a) values (871,19);
+insert into t (id,a) values (871,20);
+insert into t (id,a) values (871,21);
+insert into t (id,a) values (871,22);
+insert into t (id,a) values (871,23);
+insert into t (id,a) values (871,24);
+insert into t (id,a) values (871,25);
+insert into t (id,a) values (871,26);
+insert into t (id,a) values (871,27);
+insert into t (id,a) values (871,28);
+insert into t (id,a) values (871,29);
+insert into t (id,a) values (871,30);
+insert into t (id,a) values (871,31);
+insert into t (id,a) values (871,32);
+insert into t (id,a) values (871,33);
+insert into t (id,a) values (871,34);
+insert into t (id,a) values (871,35);
+insert into t (id,a) values (871,36);
+insert into t (id,a) values (871,37);
+insert into t (id,a) values (871,38);
+insert into t (id,a) values (871,39);
+insert into t (id,a) values (871,40);
+insert into t (id,a) values (871,41);
+insert into t (id,a) values (871,42);
+insert into t (id,a) values (871,43);
+insert into t (id,a) values (871,44);
+insert into t (id,a) values (871,45);
+insert into t (id,a) values (871,46);
+insert into t (id,a) values (871,47);
+insert into t (id,a) values (871,48);
+insert into t (id,a) values (871,49);
+insert into t (id,a) values (871,50);
+insert into t (id,a) values (871,51);
+insert into t (id,a) values (871,52);
+insert into t (id,a) values (871,53);
+insert into t (id,a) values (871,54);
+insert into t (id,a) values (871,55);
+insert into t (id,a) values (871,56);
+insert into t (id,a) values (871,57);
+insert into t (id,a) values (871,58);
+insert into t (id,a) values (871,59);
+insert into t (id,a) values (871,60);
+insert into t (id,a) values (871,61);
+insert into t (id,a) values (871,62);
+insert into t (id,a) values (871,63);
+insert into t (id,a) values (871,64);
+insert into t (id,a) values (871,65);
+insert into t (id,a) values (871,66);
+insert into t (id,a) values (871,67);
+insert into t (id,a) values (871,68);
+insert into t (id,a) values (871,69);
+insert into t (id,a) values (871,70);
+insert into t (id,a) values (871,71);
+insert into t (id,a) values (871,72);
+insert into t (id,a) values (871,73);
+insert into t (id,a) values (871,74);
+insert into t (id,a) values (871,75);
+insert into t (id,a) values (871,76);
+insert into t (id,a) values (871,77);
+insert into t (id,a) values (871,78);
+insert into t (id,a) values (871,79);
+insert into t (id,a) values (871,80);
+insert into t (id,a) values (871,81);
+insert into t (id,a) values (871,82);
+insert into t (id,a) values (871,83);
+insert into t (id,a) values (871,84);
+insert into t (id,a) values (871,85);
+insert into t (id,a) values (871,86);
+insert into t (id,a) values (871,87);
+insert into t (id,a) values (871,88);
+insert into t (id,a) values (871,89);
+insert into t (id,a) values (871,90);
+insert into t (id,a) values (871,91);
+insert into t (id,a) values (871,92);
+insert into t (id,a) values (871,93);
+insert into t (id,a) values (871,94);
+insert into t (id,a) values (871,95);
+insert into t (id,a) values (871,96);
+insert into t (id,a) values (871,97);
+insert into t (id,a) values (871,98);
+insert into t (id,a) values (871,99);
+insert into t (id,a) values (872,0);
+insert into t (id,a) values (872,1);
+insert into t (id,a) values (872,2);
+insert into t (id,a) values (872,3);
+insert into t (id,a) values (872,4);
+insert into t (id,a) values (872,5);
+insert into t (id,a) values (872,6);
+insert into t (id,a) values (872,7);
+insert into t (id,a) values (872,8);
+insert into t (id,a) values (872,9);
+insert into t (id,a) values (872,10);
+insert into t (id,a) values (872,11);
+insert into t (id,a) values (872,12);
+insert into t (id,a) values (872,13);
+insert into t (id,a) values (872,14);
+insert into t (id,a) values (872,15);
+insert into t (id,a) values (872,16);
+insert into t (id,a) values (872,17);
+insert into t (id,a) values (872,18);
+insert into t (id,a) values (872,19);
+insert into t (id,a) values (872,20);
+insert into t (id,a) values (872,21);
+insert into t (id,a) values (872,22);
+insert into t (id,a) values (872,23);
+insert into t (id,a) values (872,24);
+insert into t (id,a) values (872,25);
+insert into t (id,a) values (872,26);
+insert into t (id,a) values (872,27);
+insert into t (id,a) values (872,28);
+insert into t (id,a) values (872,29);
+insert into t (id,a) values (872,30);
+insert into t (id,a) values (872,31);
+insert into t (id,a) values (872,32);
+insert into t (id,a) values (872,33);
+insert into t (id,a) values (872,34);
+insert into t (id,a) values (872,35);
+insert into t (id,a) values (872,36);
+insert into t (id,a) values (872,37);
+insert into t (id,a) values (872,38);
+insert into t (id,a) values (872,39);
+insert into t (id,a) values (872,40);
+insert into t (id,a) values (872,41);
+insert into t (id,a) values (872,42);
+insert into t (id,a) values (872,43);
+insert into t (id,a) values (872,44);
+insert into t (id,a) values (872,45);
+insert into t (id,a) values (872,46);
+insert into t (id,a) values (872,47);
+insert into t (id,a) values (872,48);
+insert into t (id,a) values (872,49);
+insert into t (id,a) values (872,50);
+insert into t (id,a) values (872,51);
+insert into t (id,a) values (872,52);
+insert into t (id,a) values (872,53);
+insert into t (id,a) values (872,54);
+insert into t (id,a) values (872,55);
+insert into t (id,a) values (872,56);
+insert into t (id,a) values (872,57);
+insert into t (id,a) values (872,58);
+insert into t (id,a) values (872,59);
+insert into t (id,a) values (872,60);
+insert into t (id,a) values (872,61);
+insert into t (id,a) values (872,62);
+insert into t (id,a) values (872,63);
+insert into t (id,a) values (872,64);
+insert into t (id,a) values (872,65);
+insert into t (id,a) values (872,66);
+insert into t (id,a) values (872,67);
+insert into t (id,a) values (872,68);
+insert into t (id,a) values (872,69);
+insert into t (id,a) values (872,70);
+insert into t (id,a) values (872,71);
+insert into t (id,a) values (872,72);
+insert into t (id,a) values (872,73);
+insert into t (id,a) values (872,74);
+insert into t (id,a) values (872,75);
+insert into t (id,a) values (872,76);
+insert into t (id,a) values (872,77);
+insert into t (id,a) values (872,78);
+insert into t (id,a) values (872,79);
+insert into t (id,a) values (872,80);
+insert into t (id,a) values (872,81);
+insert into t (id,a) values (872,82);
+insert into t (id,a) values (872,83);
+insert into t (id,a) values (872,84);
+insert into t (id,a) values (872,85);
+insert into t (id,a) values (872,86);
+insert into t (id,a) values (872,87);
+insert into t (id,a) values (872,88);
+insert into t (id,a) values (872,89);
+insert into t (id,a) values (872,90);
+insert into t (id,a) values (872,91);
+insert into t (id,a) values (872,92);
+insert into t (id,a) values (872,93);
+insert into t (id,a) values (872,94);
+insert into t (id,a) values (872,95);
+insert into t (id,a) values (872,96);
+insert into t (id,a) values (872,97);
+insert into t (id,a) values (872,98);
+insert into t (id,a) values (872,99);
+insert into t (id,a) values (873,0);
+insert into t (id,a) values (873,1);
+insert into t (id,a) values (873,2);
+insert into t (id,a) values (873,3);
+insert into t (id,a) values (873,4);
+insert into t (id,a) values (873,5);
+insert into t (id,a) values (873,6);
+insert into t (id,a) values (873,7);
+insert into t (id,a) values (873,8);
+insert into t (id,a) values (873,9);
+insert into t (id,a) values (873,10);
+insert into t (id,a) values (873,11);
+insert into t (id,a) values (873,12);
+insert into t (id,a) values (873,13);
+insert into t (id,a) values (873,14);
+insert into t (id,a) values (873,15);
+insert into t (id,a) values (873,16);
+insert into t (id,a) values (873,17);
+insert into t (id,a) values (873,18);
+insert into t (id,a) values (873,19);
+insert into t (id,a) values (873,20);
+insert into t (id,a) values (873,21);
+insert into t (id,a) values (873,22);
+insert into t (id,a) values (873,23);
+insert into t (id,a) values (873,24);
+insert into t (id,a) values (873,25);
+insert into t (id,a) values (873,26);
+insert into t (id,a) values (873,27);
+insert into t (id,a) values (873,28);
+insert into t (id,a) values (873,29);
+insert into t (id,a) values (873,30);
+insert into t (id,a) values (873,31);
+insert into t (id,a) values (873,32);
+insert into t (id,a) values (873,33);
+insert into t (id,a) values (873,34);
+insert into t (id,a) values (873,35);
+insert into t (id,a) values (873,36);
+insert into t (id,a) values (873,37);
+insert into t (id,a) values (873,38);
+insert into t (id,a) values (873,39);
+insert into t (id,a) values (873,40);
+insert into t (id,a) values (873,41);
+insert into t (id,a) values (873,42);
+insert into t (id,a) values (873,43);
+insert into t (id,a) values (873,44);
+insert into t (id,a) values (873,45);
+insert into t (id,a) values (873,46);
+insert into t (id,a) values (873,47);
+insert into t (id,a) values (873,48);
+insert into t (id,a) values (873,49);
+insert into t (id,a) values (873,50);
+insert into t (id,a) values (873,51);
+insert into t (id,a) values (873,52);
+insert into t (id,a) values (873,53);
+insert into t (id,a) values (873,54);
+insert into t (id,a) values (873,55);
+insert into t (id,a) values (873,56);
+insert into t (id,a) values (873,57);
+insert into t (id,a) values (873,58);
+insert into t (id,a) values (873,59);
+insert into t (id,a) values (873,60);
+insert into t (id,a) values (873,61);
+insert into t (id,a) values (873,62);
+insert into t (id,a) values (873,63);
+insert into t (id,a) values (873,64);
+insert into t (id,a) values (873,65);
+insert into t (id,a) values (873,66);
+insert into t (id,a) values (873,67);
+insert into t (id,a) values (873,68);
+insert into t (id,a) values (873,69);
+insert into t (id,a) values (873,70);
+insert into t (id,a) values (873,71);
+insert into t (id,a) values (873,72);
+insert into t (id,a) values (873,73);
+insert into t (id,a) values (873,74);
+insert into t (id,a) values (873,75);
+insert into t (id,a) values (873,76);
+insert into t (id,a) values (873,77);
+insert into t (id,a) values (873,78);
+insert into t (id,a) values (873,79);
+insert into t (id,a) values (873,80);
+insert into t (id,a) values (873,81);
+insert into t (id,a) values (873,82);
+insert into t (id,a) values (873,83);
+insert into t (id,a) values (873,84);
+insert into t (id,a) values (873,85);
+insert into t (id,a) values (873,86);
+insert into t (id,a) values (873,87);
+insert into t (id,a) values (873,88);
+insert into t (id,a) values (873,89);
+insert into t (id,a) values (873,90);
+insert into t (id,a) values (873,91);
+insert into t (id,a) values (873,92);
+insert into t (id,a) values (873,93);
+insert into t (id,a) values (873,94);
+insert into t (id,a) values (873,95);
+insert into t (id,a) values (873,96);
+insert into t (id,a) values (873,97);
+insert into t (id,a) values (873,98);
+insert into t (id,a) values (873,99);
+insert into t (id,a) values (874,0);
+insert into t (id,a) values (874,1);
+insert into t (id,a) values (874,2);
+insert into t (id,a) values (874,3);
+insert into t (id,a) values (874,4);
+insert into t (id,a) values (874,5);
+insert into t (id,a) values (874,6);
+insert into t (id,a) values (874,7);
+insert into t (id,a) values (874,8);
+insert into t (id,a) values (874,9);
+insert into t (id,a) values (874,10);
+insert into t (id,a) values (874,11);
+insert into t (id,a) values (874,12);
+insert into t (id,a) values (874,13);
+insert into t (id,a) values (874,14);
+insert into t (id,a) values (874,15);
+insert into t (id,a) values (874,16);
+insert into t (id,a) values (874,17);
+insert into t (id,a) values (874,18);
+insert into t (id,a) values (874,19);
+insert into t (id,a) values (874,20);
+insert into t (id,a) values (874,21);
+insert into t (id,a) values (874,22);
+insert into t (id,a) values (874,23);
+insert into t (id,a) values (874,24);
+insert into t (id,a) values (874,25);
+insert into t (id,a) values (874,26);
+insert into t (id,a) values (874,27);
+insert into t (id,a) values (874,28);
+insert into t (id,a) values (874,29);
+insert into t (id,a) values (874,30);
+insert into t (id,a) values (874,31);
+insert into t (id,a) values (874,32);
+insert into t (id,a) values (874,33);
+insert into t (id,a) values (874,34);
+insert into t (id,a) values (874,35);
+insert into t (id,a) values (874,36);
+insert into t (id,a) values (874,37);
+insert into t (id,a) values (874,38);
+insert into t (id,a) values (874,39);
+insert into t (id,a) values (874,40);
+insert into t (id,a) values (874,41);
+insert into t (id,a) values (874,42);
+insert into t (id,a) values (874,43);
+insert into t (id,a) values (874,44);
+insert into t (id,a) values (874,45);
+insert into t (id,a) values (874,46);
+insert into t (id,a) values (874,47);
+insert into t (id,a) values (874,48);
+insert into t (id,a) values (874,49);
+insert into t (id,a) values (874,50);
+insert into t (id,a) values (874,51);
+insert into t (id,a) values (874,52);
+insert into t (id,a) values (874,53);
+insert into t (id,a) values (874,54);
+insert into t (id,a) values (874,55);
+insert into t (id,a) values (874,56);
+insert into t (id,a) values (874,57);
+insert into t (id,a) values (874,58);
+insert into t (id,a) values (874,59);
+insert into t (id,a) values (874,60);
+insert into t (id,a) values (874,61);
+insert into t (id,a) values (874,62);
+insert into t (id,a) values (874,63);
+insert into t (id,a) values (874,64);
+insert into t (id,a) values (874,65);
+insert into t (id,a) values (874,66);
+insert into t (id,a) values (874,67);
+insert into t (id,a) values (874,68);
+insert into t (id,a) values (874,69);
+insert into t (id,a) values (874,70);
+insert into t (id,a) values (874,71);
+insert into t (id,a) values (874,72);
+insert into t (id,a) values (874,73);
+insert into t (id,a) values (874,74);
+insert into t (id,a) values (874,75);
+insert into t (id,a) values (874,76);
+insert into t (id,a) values (874,77);
+insert into t (id,a) values (874,78);
+insert into t (id,a) values (874,79);
+insert into t (id,a) values (874,80);
+insert into t (id,a) values (874,81);
+insert into t (id,a) values (874,82);
+insert into t (id,a) values (874,83);
+insert into t (id,a) values (874,84);
+insert into t (id,a) values (874,85);
+insert into t (id,a) values (874,86);
+insert into t (id,a) values (874,87);
+insert into t (id,a) values (874,88);
+insert into t (id,a) values (874,89);
+insert into t (id,a) values (874,90);
+insert into t (id,a) values (874,91);
+insert into t (id,a) values (874,92);
+insert into t (id,a) values (874,93);
+insert into t (id,a) values (874,94);
+insert into t (id,a) values (874,95);
+insert into t (id,a) values (874,96);
+insert into t (id,a) values (874,97);
+insert into t (id,a) values (874,98);
+insert into t (id,a) values (874,99);
+insert into t (id,a) values (875,0);
+insert into t (id,a) values (875,1);
+insert into t (id,a) values (875,2);
+insert into t (id,a) values (875,3);
+insert into t (id,a) values (875,4);
+insert into t (id,a) values (875,5);
+insert into t (id,a) values (875,6);
+insert into t (id,a) values (875,7);
+insert into t (id,a) values (875,8);
+insert into t (id,a) values (875,9);
+insert into t (id,a) values (875,10);
+insert into t (id,a) values (875,11);
+insert into t (id,a) values (875,12);
+insert into t (id,a) values (875,13);
+insert into t (id,a) values (875,14);
+insert into t (id,a) values (875,15);
+insert into t (id,a) values (875,16);
+insert into t (id,a) values (875,17);
+insert into t (id,a) values (875,18);
+insert into t (id,a) values (875,19);
+insert into t (id,a) values (875,20);
+insert into t (id,a) values (875,21);
+insert into t (id,a) values (875,22);
+insert into t (id,a) values (875,23);
+insert into t (id,a) values (875,24);
+insert into t (id,a) values (875,25);
+insert into t (id,a) values (875,26);
+insert into t (id,a) values (875,27);
+insert into t (id,a) values (875,28);
+insert into t (id,a) values (875,29);
+insert into t (id,a) values (875,30);
+insert into t (id,a) values (875,31);
+insert into t (id,a) values (875,32);
+insert into t (id,a) values (875,33);
+insert into t (id,a) values (875,34);
+insert into t (id,a) values (875,35);
+insert into t (id,a) values (875,36);
+insert into t (id,a) values (875,37);
+insert into t (id,a) values (875,38);
+insert into t (id,a) values (875,39);
+insert into t (id,a) values (875,40);
+insert into t (id,a) values (875,41);
+insert into t (id,a) values (875,42);
+insert into t (id,a) values (875,43);
+insert into t (id,a) values (875,44);
+insert into t (id,a) values (875,45);
+insert into t (id,a) values (875,46);
+insert into t (id,a) values (875,47);
+insert into t (id,a) values (875,48);
+insert into t (id,a) values (875,49);
+insert into t (id,a) values (875,50);
+insert into t (id,a) values (875,51);
+insert into t (id,a) values (875,52);
+insert into t (id,a) values (875,53);
+insert into t (id,a) values (875,54);
+insert into t (id,a) values (875,55);
+insert into t (id,a) values (875,56);
+insert into t (id,a) values (875,57);
+insert into t (id,a) values (875,58);
+insert into t (id,a) values (875,59);
+insert into t (id,a) values (875,60);
+insert into t (id,a) values (875,61);
+insert into t (id,a) values (875,62);
+insert into t (id,a) values (875,63);
+insert into t (id,a) values (875,64);
+insert into t (id,a) values (875,65);
+insert into t (id,a) values (875,66);
+insert into t (id,a) values (875,67);
+insert into t (id,a) values (875,68);
+insert into t (id,a) values (875,69);
+insert into t (id,a) values (875,70);
+insert into t (id,a) values (875,71);
+insert into t (id,a) values (875,72);
+insert into t (id,a) values (875,73);
+insert into t (id,a) values (875,74);
+insert into t (id,a) values (875,75);
+insert into t (id,a) values (875,76);
+insert into t (id,a) values (875,77);
+insert into t (id,a) values (875,78);
+insert into t (id,a) values (875,79);
+insert into t (id,a) values (875,80);
+insert into t (id,a) values (875,81);
+insert into t (id,a) values (875,82);
+insert into t (id,a) values (875,83);
+insert into t (id,a) values (875,84);
+insert into t (id,a) values (875,85);
+insert into t (id,a) values (875,86);
+insert into t (id,a) values (875,87);
+insert into t (id,a) values (875,88);
+insert into t (id,a) values (875,89);
+insert into t (id,a) values (875,90);
+insert into t (id,a) values (875,91);
+insert into t (id,a) values (875,92);
+insert into t (id,a) values (875,93);
+insert into t (id,a) values (875,94);
+insert into t (id,a) values (875,95);
+insert into t (id,a) values (875,96);
+insert into t (id,a) values (875,97);
+insert into t (id,a) values (875,98);
+insert into t (id,a) values (875,99);
+insert into t (id,a) values (876,0);
+insert into t (id,a) values (876,1);
+insert into t (id,a) values (876,2);
+insert into t (id,a) values (876,3);
+insert into t (id,a) values (876,4);
+insert into t (id,a) values (876,5);
+insert into t (id,a) values (876,6);
+insert into t (id,a) values (876,7);
+insert into t (id,a) values (876,8);
+insert into t (id,a) values (876,9);
+insert into t (id,a) values (876,10);
+insert into t (id,a) values (876,11);
+insert into t (id,a) values (876,12);
+insert into t (id,a) values (876,13);
+insert into t (id,a) values (876,14);
+insert into t (id,a) values (876,15);
+insert into t (id,a) values (876,16);
+insert into t (id,a) values (876,17);
+insert into t (id,a) values (876,18);
+insert into t (id,a) values (876,19);
+insert into t (id,a) values (876,20);
+insert into t (id,a) values (876,21);
+insert into t (id,a) values (876,22);
+insert into t (id,a) values (876,23);
+insert into t (id,a) values (876,24);
+insert into t (id,a) values (876,25);
+insert into t (id,a) values (876,26);
+insert into t (id,a) values (876,27);
+insert into t (id,a) values (876,28);
+insert into t (id,a) values (876,29);
+insert into t (id,a) values (876,30);
+insert into t (id,a) values (876,31);
+insert into t (id,a) values (876,32);
+insert into t (id,a) values (876,33);
+insert into t (id,a) values (876,34);
+insert into t (id,a) values (876,35);
+insert into t (id,a) values (876,36);
+insert into t (id,a) values (876,37);
+insert into t (id,a) values (876,38);
+insert into t (id,a) values (876,39);
+insert into t (id,a) values (876,40);
+insert into t (id,a) values (876,41);
+insert into t (id,a) values (876,42);
+insert into t (id,a) values (876,43);
+insert into t (id,a) values (876,44);
+insert into t (id,a) values (876,45);
+insert into t (id,a) values (876,46);
+insert into t (id,a) values (876,47);
+insert into t (id,a) values (876,48);
+insert into t (id,a) values (876,49);
+insert into t (id,a) values (876,50);
+insert into t (id,a) values (876,51);
+insert into t (id,a) values (876,52);
+insert into t (id,a) values (876,53);
+insert into t (id,a) values (876,54);
+insert into t (id,a) values (876,55);
+insert into t (id,a) values (876,56);
+insert into t (id,a) values (876,57);
+insert into t (id,a) values (876,58);
+insert into t (id,a) values (876,59);
+insert into t (id,a) values (876,60);
+insert into t (id,a) values (876,61);
+insert into t (id,a) values (876,62);
+insert into t (id,a) values (876,63);
+insert into t (id,a) values (876,64);
+insert into t (id,a) values (876,65);
+insert into t (id,a) values (876,66);
+insert into t (id,a) values (876,67);
+insert into t (id,a) values (876,68);
+insert into t (id,a) values (876,69);
+insert into t (id,a) values (876,70);
+insert into t (id,a) values (876,71);
+insert into t (id,a) values (876,72);
+insert into t (id,a) values (876,73);
+insert into t (id,a) values (876,74);
+insert into t (id,a) values (876,75);
+insert into t (id,a) values (876,76);
+insert into t (id,a) values (876,77);
+insert into t (id,a) values (876,78);
+insert into t (id,a) values (876,79);
+insert into t (id,a) values (876,80);
+insert into t (id,a) values (876,81);
+insert into t (id,a) values (876,82);
+insert into t (id,a) values (876,83);
+insert into t (id,a) values (876,84);
+insert into t (id,a) values (876,85);
+insert into t (id,a) values (876,86);
+insert into t (id,a) values (876,87);
+insert into t (id,a) values (876,88);
+insert into t (id,a) values (876,89);
+insert into t (id,a) values (876,90);
+insert into t (id,a) values (876,91);
+insert into t (id,a) values (876,92);
+insert into t (id,a) values (876,93);
+insert into t (id,a) values (876,94);
+insert into t (id,a) values (876,95);
+insert into t (id,a) values (876,96);
+insert into t (id,a) values (876,97);
+insert into t (id,a) values (876,98);
+insert into t (id,a) values (876,99);
+insert into t (id,a) values (877,0);
+insert into t (id,a) values (877,1);
+insert into t (id,a) values (877,2);
+insert into t (id,a) values (877,3);
+insert into t (id,a) values (877,4);
+insert into t (id,a) values (877,5);
+insert into t (id,a) values (877,6);
+insert into t (id,a) values (877,7);
+insert into t (id,a) values (877,8);
+insert into t (id,a) values (877,9);
+insert into t (id,a) values (877,10);
+insert into t (id,a) values (877,11);
+insert into t (id,a) values (877,12);
+insert into t (id,a) values (877,13);
+insert into t (id,a) values (877,14);
+insert into t (id,a) values (877,15);
+insert into t (id,a) values (877,16);
+insert into t (id,a) values (877,17);
+insert into t (id,a) values (877,18);
+insert into t (id,a) values (877,19);
+insert into t (id,a) values (877,20);
+insert into t (id,a) values (877,21);
+insert into t (id,a) values (877,22);
+insert into t (id,a) values (877,23);
+insert into t (id,a) values (877,24);
+insert into t (id,a) values (877,25);
+insert into t (id,a) values (877,26);
+insert into t (id,a) values (877,27);
+insert into t (id,a) values (877,28);
+insert into t (id,a) values (877,29);
+insert into t (id,a) values (877,30);
+insert into t (id,a) values (877,31);
+insert into t (id,a) values (877,32);
+insert into t (id,a) values (877,33);
+insert into t (id,a) values (877,34);
+insert into t (id,a) values (877,35);
+insert into t (id,a) values (877,36);
+insert into t (id,a) values (877,37);
+insert into t (id,a) values (877,38);
+insert into t (id,a) values (877,39);
+insert into t (id,a) values (877,40);
+insert into t (id,a) values (877,41);
+insert into t (id,a) values (877,42);
+insert into t (id,a) values (877,43);
+insert into t (id,a) values (877,44);
+insert into t (id,a) values (877,45);
+insert into t (id,a) values (877,46);
+insert into t (id,a) values (877,47);
+insert into t (id,a) values (877,48);
+insert into t (id,a) values (877,49);
+insert into t (id,a) values (877,50);
+insert into t (id,a) values (877,51);
+insert into t (id,a) values (877,52);
+insert into t (id,a) values (877,53);
+insert into t (id,a) values (877,54);
+insert into t (id,a) values (877,55);
+insert into t (id,a) values (877,56);
+insert into t (id,a) values (877,57);
+insert into t (id,a) values (877,58);
+insert into t (id,a) values (877,59);
+insert into t (id,a) values (877,60);
+insert into t (id,a) values (877,61);
+insert into t (id,a) values (877,62);
+insert into t (id,a) values (877,63);
+insert into t (id,a) values (877,64);
+insert into t (id,a) values (877,65);
+insert into t (id,a) values (877,66);
+insert into t (id,a) values (877,67);
+insert into t (id,a) values (877,68);
+insert into t (id,a) values (877,69);
+insert into t (id,a) values (877,70);
+insert into t (id,a) values (877,71);
+insert into t (id,a) values (877,72);
+insert into t (id,a) values (877,73);
+insert into t (id,a) values (877,74);
+insert into t (id,a) values (877,75);
+insert into t (id,a) values (877,76);
+insert into t (id,a) values (877,77);
+insert into t (id,a) values (877,78);
+insert into t (id,a) values (877,79);
+insert into t (id,a) values (877,80);
+insert into t (id,a) values (877,81);
+insert into t (id,a) values (877,82);
+insert into t (id,a) values (877,83);
+insert into t (id,a) values (877,84);
+insert into t (id,a) values (877,85);
+insert into t (id,a) values (877,86);
+insert into t (id,a) values (877,87);
+insert into t (id,a) values (877,88);
+insert into t (id,a) values (877,89);
+insert into t (id,a) values (877,90);
+insert into t (id,a) values (877,91);
+insert into t (id,a) values (877,92);
+insert into t (id,a) values (877,93);
+insert into t (id,a) values (877,94);
+insert into t (id,a) values (877,95);
+insert into t (id,a) values (877,96);
+insert into t (id,a) values (877,97);
+insert into t (id,a) values (877,98);
+insert into t (id,a) values (877,99);
+insert into t (id,a) values (878,0);
+insert into t (id,a) values (878,1);
+insert into t (id,a) values (878,2);
+insert into t (id,a) values (878,3);
+insert into t (id,a) values (878,4);
+insert into t (id,a) values (878,5);
+insert into t (id,a) values (878,6);
+insert into t (id,a) values (878,7);
+insert into t (id,a) values (878,8);
+insert into t (id,a) values (878,9);
+insert into t (id,a) values (878,10);
+insert into t (id,a) values (878,11);
+insert into t (id,a) values (878,12);
+insert into t (id,a) values (878,13);
+insert into t (id,a) values (878,14);
+insert into t (id,a) values (878,15);
+insert into t (id,a) values (878,16);
+insert into t (id,a) values (878,17);
+insert into t (id,a) values (878,18);
+insert into t (id,a) values (878,19);
+insert into t (id,a) values (878,20);
+insert into t (id,a) values (878,21);
+insert into t (id,a) values (878,22);
+insert into t (id,a) values (878,23);
+insert into t (id,a) values (878,24);
+insert into t (id,a) values (878,25);
+insert into t (id,a) values (878,26);
+insert into t (id,a) values (878,27);
+insert into t (id,a) values (878,28);
+insert into t (id,a) values (878,29);
+insert into t (id,a) values (878,30);
+insert into t (id,a) values (878,31);
+insert into t (id,a) values (878,32);
+insert into t (id,a) values (878,33);
+insert into t (id,a) values (878,34);
+insert into t (id,a) values (878,35);
+insert into t (id,a) values (878,36);
+insert into t (id,a) values (878,37);
+insert into t (id,a) values (878,38);
+insert into t (id,a) values (878,39);
+insert into t (id,a) values (878,40);
+insert into t (id,a) values (878,41);
+insert into t (id,a) values (878,42);
+insert into t (id,a) values (878,43);
+insert into t (id,a) values (878,44);
+insert into t (id,a) values (878,45);
+insert into t (id,a) values (878,46);
+insert into t (id,a) values (878,47);
+insert into t (id,a) values (878,48);
+insert into t (id,a) values (878,49);
+insert into t (id,a) values (878,50);
+insert into t (id,a) values (878,51);
+insert into t (id,a) values (878,52);
+insert into t (id,a) values (878,53);
+insert into t (id,a) values (878,54);
+insert into t (id,a) values (878,55);
+insert into t (id,a) values (878,56);
+insert into t (id,a) values (878,57);
+insert into t (id,a) values (878,58);
+insert into t (id,a) values (878,59);
+insert into t (id,a) values (878,60);
+insert into t (id,a) values (878,61);
+insert into t (id,a) values (878,62);
+insert into t (id,a) values (878,63);
+insert into t (id,a) values (878,64);
+insert into t (id,a) values (878,65);
+insert into t (id,a) values (878,66);
+insert into t (id,a) values (878,67);
+insert into t (id,a) values (878,68);
+insert into t (id,a) values (878,69);
+insert into t (id,a) values (878,70);
+insert into t (id,a) values (878,71);
+insert into t (id,a) values (878,72);
+insert into t (id,a) values (878,73);
+insert into t (id,a) values (878,74);
+insert into t (id,a) values (878,75);
+insert into t (id,a) values (878,76);
+insert into t (id,a) values (878,77);
+insert into t (id,a) values (878,78);
+insert into t (id,a) values (878,79);
+insert into t (id,a) values (878,80);
+insert into t (id,a) values (878,81);
+insert into t (id,a) values (878,82);
+insert into t (id,a) values (878,83);
+insert into t (id,a) values (878,84);
+insert into t (id,a) values (878,85);
+insert into t (id,a) values (878,86);
+insert into t (id,a) values (878,87);
+insert into t (id,a) values (878,88);
+insert into t (id,a) values (878,89);
+insert into t (id,a) values (878,90);
+insert into t (id,a) values (878,91);
+insert into t (id,a) values (878,92);
+insert into t (id,a) values (878,93);
+insert into t (id,a) values (878,94);
+insert into t (id,a) values (878,95);
+insert into t (id,a) values (878,96);
+insert into t (id,a) values (878,97);
+insert into t (id,a) values (878,98);
+insert into t (id,a) values (878,99);
+insert into t (id,a) values (879,0);
+insert into t (id,a) values (879,1);
+insert into t (id,a) values (879,2);
+insert into t (id,a) values (879,3);
+insert into t (id,a) values (879,4);
+insert into t (id,a) values (879,5);
+insert into t (id,a) values (879,6);
+insert into t (id,a) values (879,7);
+insert into t (id,a) values (879,8);
+insert into t (id,a) values (879,9);
+insert into t (id,a) values (879,10);
+insert into t (id,a) values (879,11);
+insert into t (id,a) values (879,12);
+insert into t (id,a) values (879,13);
+insert into t (id,a) values (879,14);
+insert into t (id,a) values (879,15);
+insert into t (id,a) values (879,16);
+insert into t (id,a) values (879,17);
+insert into t (id,a) values (879,18);
+insert into t (id,a) values (879,19);
+insert into t (id,a) values (879,20);
+insert into t (id,a) values (879,21);
+insert into t (id,a) values (879,22);
+insert into t (id,a) values (879,23);
+insert into t (id,a) values (879,24);
+insert into t (id,a) values (879,25);
+insert into t (id,a) values (879,26);
+insert into t (id,a) values (879,27);
+insert into t (id,a) values (879,28);
+insert into t (id,a) values (879,29);
+insert into t (id,a) values (879,30);
+insert into t (id,a) values (879,31);
+insert into t (id,a) values (879,32);
+insert into t (id,a) values (879,33);
+insert into t (id,a) values (879,34);
+insert into t (id,a) values (879,35);
+insert into t (id,a) values (879,36);
+insert into t (id,a) values (879,37);
+insert into t (id,a) values (879,38);
+insert into t (id,a) values (879,39);
+insert into t (id,a) values (879,40);
+insert into t (id,a) values (879,41);
+insert into t (id,a) values (879,42);
+insert into t (id,a) values (879,43);
+insert into t (id,a) values (879,44);
+insert into t (id,a) values (879,45);
+insert into t (id,a) values (879,46);
+insert into t (id,a) values (879,47);
+insert into t (id,a) values (879,48);
+insert into t (id,a) values (879,49);
+insert into t (id,a) values (879,50);
+insert into t (id,a) values (879,51);
+insert into t (id,a) values (879,52);
+insert into t (id,a) values (879,53);
+insert into t (id,a) values (879,54);
+insert into t (id,a) values (879,55);
+insert into t (id,a) values (879,56);
+insert into t (id,a) values (879,57);
+insert into t (id,a) values (879,58);
+insert into t (id,a) values (879,59);
+insert into t (id,a) values (879,60);
+insert into t (id,a) values (879,61);
+insert into t (id,a) values (879,62);
+insert into t (id,a) values (879,63);
+insert into t (id,a) values (879,64);
+insert into t (id,a) values (879,65);
+insert into t (id,a) values (879,66);
+insert into t (id,a) values (879,67);
+insert into t (id,a) values (879,68);
+insert into t (id,a) values (879,69);
+insert into t (id,a) values (879,70);
+insert into t (id,a) values (879,71);
+insert into t (id,a) values (879,72);
+insert into t (id,a) values (879,73);
+insert into t (id,a) values (879,74);
+insert into t (id,a) values (879,75);
+insert into t (id,a) values (879,76);
+insert into t (id,a) values (879,77);
+insert into t (id,a) values (879,78);
+insert into t (id,a) values (879,79);
+insert into t (id,a) values (879,80);
+insert into t (id,a) values (879,81);
+insert into t (id,a) values (879,82);
+insert into t (id,a) values (879,83);
+insert into t (id,a) values (879,84);
+insert into t (id,a) values (879,85);
+insert into t (id,a) values (879,86);
+insert into t (id,a) values (879,87);
+insert into t (id,a) values (879,88);
+insert into t (id,a) values (879,89);
+insert into t (id,a) values (879,90);
+insert into t (id,a) values (879,91);
+insert into t (id,a) values (879,92);
+insert into t (id,a) values (879,93);
+insert into t (id,a) values (879,94);
+insert into t (id,a) values (879,95);
+insert into t (id,a) values (879,96);
+insert into t (id,a) values (879,97);
+insert into t (id,a) values (879,98);
+insert into t (id,a) values (879,99);
+insert into t (id,a) values (880,0);
+insert into t (id,a) values (880,1);
+insert into t (id,a) values (880,2);
+insert into t (id,a) values (880,3);
+insert into t (id,a) values (880,4);
+insert into t (id,a) values (880,5);
+insert into t (id,a) values (880,6);
+insert into t (id,a) values (880,7);
+insert into t (id,a) values (880,8);
+insert into t (id,a) values (880,9);
+insert into t (id,a) values (880,10);
+insert into t (id,a) values (880,11);
+insert into t (id,a) values (880,12);
+insert into t (id,a) values (880,13);
+insert into t (id,a) values (880,14);
+insert into t (id,a) values (880,15);
+insert into t (id,a) values (880,16);
+insert into t (id,a) values (880,17);
+insert into t (id,a) values (880,18);
+insert into t (id,a) values (880,19);
+insert into t (id,a) values (880,20);
+insert into t (id,a) values (880,21);
+insert into t (id,a) values (880,22);
+insert into t (id,a) values (880,23);
+insert into t (id,a) values (880,24);
+insert into t (id,a) values (880,25);
+insert into t (id,a) values (880,26);
+insert into t (id,a) values (880,27);
+insert into t (id,a) values (880,28);
+insert into t (id,a) values (880,29);
+insert into t (id,a) values (880,30);
+insert into t (id,a) values (880,31);
+insert into t (id,a) values (880,32);
+insert into t (id,a) values (880,33);
+insert into t (id,a) values (880,34);
+insert into t (id,a) values (880,35);
+insert into t (id,a) values (880,36);
+insert into t (id,a) values (880,37);
+insert into t (id,a) values (880,38);
+insert into t (id,a) values (880,39);
+insert into t (id,a) values (880,40);
+insert into t (id,a) values (880,41);
+insert into t (id,a) values (880,42);
+insert into t (id,a) values (880,43);
+insert into t (id,a) values (880,44);
+insert into t (id,a) values (880,45);
+insert into t (id,a) values (880,46);
+insert into t (id,a) values (880,47);
+insert into t (id,a) values (880,48);
+insert into t (id,a) values (880,49);
+insert into t (id,a) values (880,50);
+insert into t (id,a) values (880,51);
+insert into t (id,a) values (880,52);
+insert into t (id,a) values (880,53);
+insert into t (id,a) values (880,54);
+insert into t (id,a) values (880,55);
+insert into t (id,a) values (880,56);
+insert into t (id,a) values (880,57);
+insert into t (id,a) values (880,58);
+insert into t (id,a) values (880,59);
+insert into t (id,a) values (880,60);
+insert into t (id,a) values (880,61);
+insert into t (id,a) values (880,62);
+insert into t (id,a) values (880,63);
+insert into t (id,a) values (880,64);
+insert into t (id,a) values (880,65);
+insert into t (id,a) values (880,66);
+insert into t (id,a) values (880,67);
+insert into t (id,a) values (880,68);
+insert into t (id,a) values (880,69);
+insert into t (id,a) values (880,70);
+insert into t (id,a) values (880,71);
+insert into t (id,a) values (880,72);
+insert into t (id,a) values (880,73);
+insert into t (id,a) values (880,74);
+insert into t (id,a) values (880,75);
+insert into t (id,a) values (880,76);
+insert into t (id,a) values (880,77);
+insert into t (id,a) values (880,78);
+insert into t (id,a) values (880,79);
+insert into t (id,a) values (880,80);
+insert into t (id,a) values (880,81);
+insert into t (id,a) values (880,82);
+insert into t (id,a) values (880,83);
+insert into t (id,a) values (880,84);
+insert into t (id,a) values (880,85);
+insert into t (id,a) values (880,86);
+insert into t (id,a) values (880,87);
+insert into t (id,a) values (880,88);
+insert into t (id,a) values (880,89);
+insert into t (id,a) values (880,90);
+insert into t (id,a) values (880,91);
+insert into t (id,a) values (880,92);
+insert into t (id,a) values (880,93);
+insert into t (id,a) values (880,94);
+insert into t (id,a) values (880,95);
+insert into t (id,a) values (880,96);
+insert into t (id,a) values (880,97);
+insert into t (id,a) values (880,98);
+insert into t (id,a) values (880,99);
+insert into t (id,a) values (881,0);
+insert into t (id,a) values (881,1);
+insert into t (id,a) values (881,2);
+insert into t (id,a) values (881,3);
+insert into t (id,a) values (881,4);
+insert into t (id,a) values (881,5);
+insert into t (id,a) values (881,6);
+insert into t (id,a) values (881,7);
+insert into t (id,a) values (881,8);
+insert into t (id,a) values (881,9);
+insert into t (id,a) values (881,10);
+insert into t (id,a) values (881,11);
+insert into t (id,a) values (881,12);
+insert into t (id,a) values (881,13);
+insert into t (id,a) values (881,14);
+insert into t (id,a) values (881,15);
+insert into t (id,a) values (881,16);
+insert into t (id,a) values (881,17);
+insert into t (id,a) values (881,18);
+insert into t (id,a) values (881,19);
+insert into t (id,a) values (881,20);
+insert into t (id,a) values (881,21);
+insert into t (id,a) values (881,22);
+insert into t (id,a) values (881,23);
+insert into t (id,a) values (881,24);
+insert into t (id,a) values (881,25);
+insert into t (id,a) values (881,26);
+insert into t (id,a) values (881,27);
+insert into t (id,a) values (881,28);
+insert into t (id,a) values (881,29);
+insert into t (id,a) values (881,30);
+insert into t (id,a) values (881,31);
+insert into t (id,a) values (881,32);
+insert into t (id,a) values (881,33);
+insert into t (id,a) values (881,34);
+insert into t (id,a) values (881,35);
+insert into t (id,a) values (881,36);
+insert into t (id,a) values (881,37);
+insert into t (id,a) values (881,38);
+insert into t (id,a) values (881,39);
+insert into t (id,a) values (881,40);
+insert into t (id,a) values (881,41);
+insert into t (id,a) values (881,42);
+insert into t (id,a) values (881,43);
+insert into t (id,a) values (881,44);
+insert into t (id,a) values (881,45);
+insert into t (id,a) values (881,46);
+insert into t (id,a) values (881,47);
+insert into t (id,a) values (881,48);
+insert into t (id,a) values (881,49);
+insert into t (id,a) values (881,50);
+insert into t (id,a) values (881,51);
+insert into t (id,a) values (881,52);
+insert into t (id,a) values (881,53);
+insert into t (id,a) values (881,54);
+insert into t (id,a) values (881,55);
+insert into t (id,a) values (881,56);
+insert into t (id,a) values (881,57);
+insert into t (id,a) values (881,58);
+insert into t (id,a) values (881,59);
+insert into t (id,a) values (881,60);
+insert into t (id,a) values (881,61);
+insert into t (id,a) values (881,62);
+insert into t (id,a) values (881,63);
+insert into t (id,a) values (881,64);
+insert into t (id,a) values (881,65);
+insert into t (id,a) values (881,66);
+insert into t (id,a) values (881,67);
+insert into t (id,a) values (881,68);
+insert into t (id,a) values (881,69);
+insert into t (id,a) values (881,70);
+insert into t (id,a) values (881,71);
+insert into t (id,a) values (881,72);
+insert into t (id,a) values (881,73);
+insert into t (id,a) values (881,74);
+insert into t (id,a) values (881,75);
+insert into t (id,a) values (881,76);
+insert into t (id,a) values (881,77);
+insert into t (id,a) values (881,78);
+insert into t (id,a) values (881,79);
+insert into t (id,a) values (881,80);
+insert into t (id,a) values (881,81);
+insert into t (id,a) values (881,82);
+insert into t (id,a) values (881,83);
+insert into t (id,a) values (881,84);
+insert into t (id,a) values (881,85);
+insert into t (id,a) values (881,86);
+insert into t (id,a) values (881,87);
+insert into t (id,a) values (881,88);
+insert into t (id,a) values (881,89);
+insert into t (id,a) values (881,90);
+insert into t (id,a) values (881,91);
+insert into t (id,a) values (881,92);
+insert into t (id,a) values (881,93);
+insert into t (id,a) values (881,94);
+insert into t (id,a) values (881,95);
+insert into t (id,a) values (881,96);
+insert into t (id,a) values (881,97);
+insert into t (id,a) values (881,98);
+insert into t (id,a) values (881,99);
+insert into t (id,a) values (882,0);
+insert into t (id,a) values (882,1);
+insert into t (id,a) values (882,2);
+insert into t (id,a) values (882,3);
+insert into t (id,a) values (882,4);
+insert into t (id,a) values (882,5);
+insert into t (id,a) values (882,6);
+insert into t (id,a) values (882,7);
+insert into t (id,a) values (882,8);
+insert into t (id,a) values (882,9);
+insert into t (id,a) values (882,10);
+insert into t (id,a) values (882,11);
+insert into t (id,a) values (882,12);
+insert into t (id,a) values (882,13);
+insert into t (id,a) values (882,14);
+insert into t (id,a) values (882,15);
+insert into t (id,a) values (882,16);
+insert into t (id,a) values (882,17);
+insert into t (id,a) values (882,18);
+insert into t (id,a) values (882,19);
+insert into t (id,a) values (882,20);
+insert into t (id,a) values (882,21);
+insert into t (id,a) values (882,22);
+insert into t (id,a) values (882,23);
+insert into t (id,a) values (882,24);
+insert into t (id,a) values (882,25);
+insert into t (id,a) values (882,26);
+insert into t (id,a) values (882,27);
+insert into t (id,a) values (882,28);
+insert into t (id,a) values (882,29);
+insert into t (id,a) values (882,30);
+insert into t (id,a) values (882,31);
+insert into t (id,a) values (882,32);
+insert into t (id,a) values (882,33);
+insert into t (id,a) values (882,34);
+insert into t (id,a) values (882,35);
+insert into t (id,a) values (882,36);
+insert into t (id,a) values (882,37);
+insert into t (id,a) values (882,38);
+insert into t (id,a) values (882,39);
+insert into t (id,a) values (882,40);
+insert into t (id,a) values (882,41);
+insert into t (id,a) values (882,42);
+insert into t (id,a) values (882,43);
+insert into t (id,a) values (882,44);
+insert into t (id,a) values (882,45);
+insert into t (id,a) values (882,46);
+insert into t (id,a) values (882,47);
+insert into t (id,a) values (882,48);
+insert into t (id,a) values (882,49);
+insert into t (id,a) values (882,50);
+insert into t (id,a) values (882,51);
+insert into t (id,a) values (882,52);
+insert into t (id,a) values (882,53);
+insert into t (id,a) values (882,54);
+insert into t (id,a) values (882,55);
+insert into t (id,a) values (882,56);
+insert into t (id,a) values (882,57);
+insert into t (id,a) values (882,58);
+insert into t (id,a) values (882,59);
+insert into t (id,a) values (882,60);
+insert into t (id,a) values (882,61);
+insert into t (id,a) values (882,62);
+insert into t (id,a) values (882,63);
+insert into t (id,a) values (882,64);
+insert into t (id,a) values (882,65);
+insert into t (id,a) values (882,66);
+insert into t (id,a) values (882,67);
+insert into t (id,a) values (882,68);
+insert into t (id,a) values (882,69);
+insert into t (id,a) values (882,70);
+insert into t (id,a) values (882,71);
+insert into t (id,a) values (882,72);
+insert into t (id,a) values (882,73);
+insert into t (id,a) values (882,74);
+insert into t (id,a) values (882,75);
+insert into t (id,a) values (882,76);
+insert into t (id,a) values (882,77);
+insert into t (id,a) values (882,78);
+insert into t (id,a) values (882,79);
+insert into t (id,a) values (882,80);
+insert into t (id,a) values (882,81);
+insert into t (id,a) values (882,82);
+insert into t (id,a) values (882,83);
+insert into t (id,a) values (882,84);
+insert into t (id,a) values (882,85);
+insert into t (id,a) values (882,86);
+insert into t (id,a) values (882,87);
+insert into t (id,a) values (882,88);
+insert into t (id,a) values (882,89);
+insert into t (id,a) values (882,90);
+insert into t (id,a) values (882,91);
+insert into t (id,a) values (882,92);
+insert into t (id,a) values (882,93);
+insert into t (id,a) values (882,94);
+insert into t (id,a) values (882,95);
+insert into t (id,a) values (882,96);
+insert into t (id,a) values (882,97);
+insert into t (id,a) values (882,98);
+insert into t (id,a) values (882,99);
+insert into t (id,a) values (883,0);
+insert into t (id,a) values (883,1);
+insert into t (id,a) values (883,2);
+insert into t (id,a) values (883,3);
+insert into t (id,a) values (883,4);
+insert into t (id,a) values (883,5);
+insert into t (id,a) values (883,6);
+insert into t (id,a) values (883,7);
+insert into t (id,a) values (883,8);
+insert into t (id,a) values (883,9);
+insert into t (id,a) values (883,10);
+insert into t (id,a) values (883,11);
+insert into t (id,a) values (883,12);
+insert into t (id,a) values (883,13);
+insert into t (id,a) values (883,14);
+insert into t (id,a) values (883,15);
+insert into t (id,a) values (883,16);
+insert into t (id,a) values (883,17);
+insert into t (id,a) values (883,18);
+insert into t (id,a) values (883,19);
+insert into t (id,a) values (883,20);
+insert into t (id,a) values (883,21);
+insert into t (id,a) values (883,22);
+insert into t (id,a) values (883,23);
+insert into t (id,a) values (883,24);
+insert into t (id,a) values (883,25);
+insert into t (id,a) values (883,26);
+insert into t (id,a) values (883,27);
+insert into t (id,a) values (883,28);
+insert into t (id,a) values (883,29);
+insert into t (id,a) values (883,30);
+insert into t (id,a) values (883,31);
+insert into t (id,a) values (883,32);
+insert into t (id,a) values (883,33);
+insert into t (id,a) values (883,34);
+insert into t (id,a) values (883,35);
+insert into t (id,a) values (883,36);
+insert into t (id,a) values (883,37);
+insert into t (id,a) values (883,38);
+insert into t (id,a) values (883,39);
+insert into t (id,a) values (883,40);
+insert into t (id,a) values (883,41);
+insert into t (id,a) values (883,42);
+insert into t (id,a) values (883,43);
+insert into t (id,a) values (883,44);
+insert into t (id,a) values (883,45);
+insert into t (id,a) values (883,46);
+insert into t (id,a) values (883,47);
+insert into t (id,a) values (883,48);
+insert into t (id,a) values (883,49);
+insert into t (id,a) values (883,50);
+insert into t (id,a) values (883,51);
+insert into t (id,a) values (883,52);
+insert into t (id,a) values (883,53);
+insert into t (id,a) values (883,54);
+insert into t (id,a) values (883,55);
+insert into t (id,a) values (883,56);
+insert into t (id,a) values (883,57);
+insert into t (id,a) values (883,58);
+insert into t (id,a) values (883,59);
+insert into t (id,a) values (883,60);
+insert into t (id,a) values (883,61);
+insert into t (id,a) values (883,62);
+insert into t (id,a) values (883,63);
+insert into t (id,a) values (883,64);
+insert into t (id,a) values (883,65);
+insert into t (id,a) values (883,66);
+insert into t (id,a) values (883,67);
+insert into t (id,a) values (883,68);
+insert into t (id,a) values (883,69);
+insert into t (id,a) values (883,70);
+insert into t (id,a) values (883,71);
+insert into t (id,a) values (883,72);
+insert into t (id,a) values (883,73);
+insert into t (id,a) values (883,74);
+insert into t (id,a) values (883,75);
+insert into t (id,a) values (883,76);
+insert into t (id,a) values (883,77);
+insert into t (id,a) values (883,78);
+insert into t (id,a) values (883,79);
+insert into t (id,a) values (883,80);
+insert into t (id,a) values (883,81);
+insert into t (id,a) values (883,82);
+insert into t (id,a) values (883,83);
+insert into t (id,a) values (883,84);
+insert into t (id,a) values (883,85);
+insert into t (id,a) values (883,86);
+insert into t (id,a) values (883,87);
+insert into t (id,a) values (883,88);
+insert into t (id,a) values (883,89);
+insert into t (id,a) values (883,90);
+insert into t (id,a) values (883,91);
+insert into t (id,a) values (883,92);
+insert into t (id,a) values (883,93);
+insert into t (id,a) values (883,94);
+insert into t (id,a) values (883,95);
+insert into t (id,a) values (883,96);
+insert into t (id,a) values (883,97);
+insert into t (id,a) values (883,98);
+insert into t (id,a) values (883,99);
+insert into t (id,a) values (884,0);
+insert into t (id,a) values (884,1);
+insert into t (id,a) values (884,2);
+insert into t (id,a) values (884,3);
+insert into t (id,a) values (884,4);
+insert into t (id,a) values (884,5);
+insert into t (id,a) values (884,6);
+insert into t (id,a) values (884,7);
+insert into t (id,a) values (884,8);
+insert into t (id,a) values (884,9);
+insert into t (id,a) values (884,10);
+insert into t (id,a) values (884,11);
+insert into t (id,a) values (884,12);
+insert into t (id,a) values (884,13);
+insert into t (id,a) values (884,14);
+insert into t (id,a) values (884,15);
+insert into t (id,a) values (884,16);
+insert into t (id,a) values (884,17);
+insert into t (id,a) values (884,18);
+insert into t (id,a) values (884,19);
+insert into t (id,a) values (884,20);
+insert into t (id,a) values (884,21);
+insert into t (id,a) values (884,22);
+insert into t (id,a) values (884,23);
+insert into t (id,a) values (884,24);
+insert into t (id,a) values (884,25);
+insert into t (id,a) values (884,26);
+insert into t (id,a) values (884,27);
+insert into t (id,a) values (884,28);
+insert into t (id,a) values (884,29);
+insert into t (id,a) values (884,30);
+insert into t (id,a) values (884,31);
+insert into t (id,a) values (884,32);
+insert into t (id,a) values (884,33);
+insert into t (id,a) values (884,34);
+insert into t (id,a) values (884,35);
+insert into t (id,a) values (884,36);
+insert into t (id,a) values (884,37);
+insert into t (id,a) values (884,38);
+insert into t (id,a) values (884,39);
+insert into t (id,a) values (884,40);
+insert into t (id,a) values (884,41);
+insert into t (id,a) values (884,42);
+insert into t (id,a) values (884,43);
+insert into t (id,a) values (884,44);
+insert into t (id,a) values (884,45);
+insert into t (id,a) values (884,46);
+insert into t (id,a) values (884,47);
+insert into t (id,a) values (884,48);
+insert into t (id,a) values (884,49);
+insert into t (id,a) values (884,50);
+insert into t (id,a) values (884,51);
+insert into t (id,a) values (884,52);
+insert into t (id,a) values (884,53);
+insert into t (id,a) values (884,54);
+insert into t (id,a) values (884,55);
+insert into t (id,a) values (884,56);
+insert into t (id,a) values (884,57);
+insert into t (id,a) values (884,58);
+insert into t (id,a) values (884,59);
+insert into t (id,a) values (884,60);
+insert into t (id,a) values (884,61);
+insert into t (id,a) values (884,62);
+insert into t (id,a) values (884,63);
+insert into t (id,a) values (884,64);
+insert into t (id,a) values (884,65);
+insert into t (id,a) values (884,66);
+insert into t (id,a) values (884,67);
+insert into t (id,a) values (884,68);
+insert into t (id,a) values (884,69);
+insert into t (id,a) values (884,70);
+insert into t (id,a) values (884,71);
+insert into t (id,a) values (884,72);
+insert into t (id,a) values (884,73);
+insert into t (id,a) values (884,74);
+insert into t (id,a) values (884,75);
+insert into t (id,a) values (884,76);
+insert into t (id,a) values (884,77);
+insert into t (id,a) values (884,78);
+insert into t (id,a) values (884,79);
+insert into t (id,a) values (884,80);
+insert into t (id,a) values (884,81);
+insert into t (id,a) values (884,82);
+insert into t (id,a) values (884,83);
+insert into t (id,a) values (884,84);
+insert into t (id,a) values (884,85);
+insert into t (id,a) values (884,86);
+insert into t (id,a) values (884,87);
+insert into t (id,a) values (884,88);
+insert into t (id,a) values (884,89);
+insert into t (id,a) values (884,90);
+insert into t (id,a) values (884,91);
+insert into t (id,a) values (884,92);
+insert into t (id,a) values (884,93);
+insert into t (id,a) values (884,94);
+insert into t (id,a) values (884,95);
+insert into t (id,a) values (884,96);
+insert into t (id,a) values (884,97);
+insert into t (id,a) values (884,98);
+insert into t (id,a) values (884,99);
+insert into t (id,a) values (885,0);
+insert into t (id,a) values (885,1);
+insert into t (id,a) values (885,2);
+insert into t (id,a) values (885,3);
+insert into t (id,a) values (885,4);
+insert into t (id,a) values (885,5);
+insert into t (id,a) values (885,6);
+insert into t (id,a) values (885,7);
+insert into t (id,a) values (885,8);
+insert into t (id,a) values (885,9);
+insert into t (id,a) values (885,10);
+insert into t (id,a) values (885,11);
+insert into t (id,a) values (885,12);
+insert into t (id,a) values (885,13);
+insert into t (id,a) values (885,14);
+insert into t (id,a) values (885,15);
+insert into t (id,a) values (885,16);
+insert into t (id,a) values (885,17);
+insert into t (id,a) values (885,18);
+insert into t (id,a) values (885,19);
+insert into t (id,a) values (885,20);
+insert into t (id,a) values (885,21);
+insert into t (id,a) values (885,22);
+insert into t (id,a) values (885,23);
+insert into t (id,a) values (885,24);
+insert into t (id,a) values (885,25);
+insert into t (id,a) values (885,26);
+insert into t (id,a) values (885,27);
+insert into t (id,a) values (885,28);
+insert into t (id,a) values (885,29);
+insert into t (id,a) values (885,30);
+insert into t (id,a) values (885,31);
+insert into t (id,a) values (885,32);
+insert into t (id,a) values (885,33);
+insert into t (id,a) values (885,34);
+insert into t (id,a) values (885,35);
+insert into t (id,a) values (885,36);
+insert into t (id,a) values (885,37);
+insert into t (id,a) values (885,38);
+insert into t (id,a) values (885,39);
+insert into t (id,a) values (885,40);
+insert into t (id,a) values (885,41);
+insert into t (id,a) values (885,42);
+insert into t (id,a) values (885,43);
+insert into t (id,a) values (885,44);
+insert into t (id,a) values (885,45);
+insert into t (id,a) values (885,46);
+insert into t (id,a) values (885,47);
+insert into t (id,a) values (885,48);
+insert into t (id,a) values (885,49);
+insert into t (id,a) values (885,50);
+insert into t (id,a) values (885,51);
+insert into t (id,a) values (885,52);
+insert into t (id,a) values (885,53);
+insert into t (id,a) values (885,54);
+insert into t (id,a) values (885,55);
+insert into t (id,a) values (885,56);
+insert into t (id,a) values (885,57);
+insert into t (id,a) values (885,58);
+insert into t (id,a) values (885,59);
+insert into t (id,a) values (885,60);
+insert into t (id,a) values (885,61);
+insert into t (id,a) values (885,62);
+insert into t (id,a) values (885,63);
+insert into t (id,a) values (885,64);
+insert into t (id,a) values (885,65);
+insert into t (id,a) values (885,66);
+insert into t (id,a) values (885,67);
+insert into t (id,a) values (885,68);
+insert into t (id,a) values (885,69);
+insert into t (id,a) values (885,70);
+insert into t (id,a) values (885,71);
+insert into t (id,a) values (885,72);
+insert into t (id,a) values (885,73);
+insert into t (id,a) values (885,74);
+insert into t (id,a) values (885,75);
+insert into t (id,a) values (885,76);
+insert into t (id,a) values (885,77);
+insert into t (id,a) values (885,78);
+insert into t (id,a) values (885,79);
+insert into t (id,a) values (885,80);
+insert into t (id,a) values (885,81);
+insert into t (id,a) values (885,82);
+insert into t (id,a) values (885,83);
+insert into t (id,a) values (885,84);
+insert into t (id,a) values (885,85);
+insert into t (id,a) values (885,86);
+insert into t (id,a) values (885,87);
+insert into t (id,a) values (885,88);
+insert into t (id,a) values (885,89);
+insert into t (id,a) values (885,90);
+insert into t (id,a) values (885,91);
+insert into t (id,a) values (885,92);
+insert into t (id,a) values (885,93);
+insert into t (id,a) values (885,94);
+insert into t (id,a) values (885,95);
+insert into t (id,a) values (885,96);
+insert into t (id,a) values (885,97);
+insert into t (id,a) values (885,98);
+insert into t (id,a) values (885,99);
+insert into t (id,a) values (886,0);
+insert into t (id,a) values (886,1);
+insert into t (id,a) values (886,2);
+insert into t (id,a) values (886,3);
+insert into t (id,a) values (886,4);
+insert into t (id,a) values (886,5);
+insert into t (id,a) values (886,6);
+insert into t (id,a) values (886,7);
+insert into t (id,a) values (886,8);
+insert into t (id,a) values (886,9);
+insert into t (id,a) values (886,10);
+insert into t (id,a) values (886,11);
+insert into t (id,a) values (886,12);
+insert into t (id,a) values (886,13);
+insert into t (id,a) values (886,14);
+insert into t (id,a) values (886,15);
+insert into t (id,a) values (886,16);
+insert into t (id,a) values (886,17);
+insert into t (id,a) values (886,18);
+insert into t (id,a) values (886,19);
+insert into t (id,a) values (886,20);
+insert into t (id,a) values (886,21);
+insert into t (id,a) values (886,22);
+insert into t (id,a) values (886,23);
+insert into t (id,a) values (886,24);
+insert into t (id,a) values (886,25);
+insert into t (id,a) values (886,26);
+insert into t (id,a) values (886,27);
+insert into t (id,a) values (886,28);
+insert into t (id,a) values (886,29);
+insert into t (id,a) values (886,30);
+insert into t (id,a) values (886,31);
+insert into t (id,a) values (886,32);
+insert into t (id,a) values (886,33);
+insert into t (id,a) values (886,34);
+insert into t (id,a) values (886,35);
+insert into t (id,a) values (886,36);
+insert into t (id,a) values (886,37);
+insert into t (id,a) values (886,38);
+insert into t (id,a) values (886,39);
+insert into t (id,a) values (886,40);
+insert into t (id,a) values (886,41);
+insert into t (id,a) values (886,42);
+insert into t (id,a) values (886,43);
+insert into t (id,a) values (886,44);
+insert into t (id,a) values (886,45);
+insert into t (id,a) values (886,46);
+insert into t (id,a) values (886,47);
+insert into t (id,a) values (886,48);
+insert into t (id,a) values (886,49);
+insert into t (id,a) values (886,50);
+insert into t (id,a) values (886,51);
+insert into t (id,a) values (886,52);
+insert into t (id,a) values (886,53);
+insert into t (id,a) values (886,54);
+insert into t (id,a) values (886,55);
+insert into t (id,a) values (886,56);
+insert into t (id,a) values (886,57);
+insert into t (id,a) values (886,58);
+insert into t (id,a) values (886,59);
+insert into t (id,a) values (886,60);
+insert into t (id,a) values (886,61);
+insert into t (id,a) values (886,62);
+insert into t (id,a) values (886,63);
+insert into t (id,a) values (886,64);
+insert into t (id,a) values (886,65);
+insert into t (id,a) values (886,66);
+insert into t (id,a) values (886,67);
+insert into t (id,a) values (886,68);
+insert into t (id,a) values (886,69);
+insert into t (id,a) values (886,70);
+insert into t (id,a) values (886,71);
+insert into t (id,a) values (886,72);
+insert into t (id,a) values (886,73);
+insert into t (id,a) values (886,74);
+insert into t (id,a) values (886,75);
+insert into t (id,a) values (886,76);
+insert into t (id,a) values (886,77);
+insert into t (id,a) values (886,78);
+insert into t (id,a) values (886,79);
+insert into t (id,a) values (886,80);
+insert into t (id,a) values (886,81);
+insert into t (id,a) values (886,82);
+insert into t (id,a) values (886,83);
+insert into t (id,a) values (886,84);
+insert into t (id,a) values (886,85);
+insert into t (id,a) values (886,86);
+insert into t (id,a) values (886,87);
+insert into t (id,a) values (886,88);
+insert into t (id,a) values (886,89);
+insert into t (id,a) values (886,90);
+insert into t (id,a) values (886,91);
+insert into t (id,a) values (886,92);
+insert into t (id,a) values (886,93);
+insert into t (id,a) values (886,94);
+insert into t (id,a) values (886,95);
+insert into t (id,a) values (886,96);
+insert into t (id,a) values (886,97);
+insert into t (id,a) values (886,98);
+insert into t (id,a) values (886,99);
+insert into t (id,a) values (887,0);
+insert into t (id,a) values (887,1);
+insert into t (id,a) values (887,2);
+insert into t (id,a) values (887,3);
+insert into t (id,a) values (887,4);
+insert into t (id,a) values (887,5);
+insert into t (id,a) values (887,6);
+insert into t (id,a) values (887,7);
+insert into t (id,a) values (887,8);
+insert into t (id,a) values (887,9);
+insert into t (id,a) values (887,10);
+insert into t (id,a) values (887,11);
+insert into t (id,a) values (887,12);
+insert into t (id,a) values (887,13);
+insert into t (id,a) values (887,14);
+insert into t (id,a) values (887,15);
+insert into t (id,a) values (887,16);
+insert into t (id,a) values (887,17);
+insert into t (id,a) values (887,18);
+insert into t (id,a) values (887,19);
+insert into t (id,a) values (887,20);
+insert into t (id,a) values (887,21);
+insert into t (id,a) values (887,22);
+insert into t (id,a) values (887,23);
+insert into t (id,a) values (887,24);
+insert into t (id,a) values (887,25);
+insert into t (id,a) values (887,26);
+insert into t (id,a) values (887,27);
+insert into t (id,a) values (887,28);
+insert into t (id,a) values (887,29);
+insert into t (id,a) values (887,30);
+insert into t (id,a) values (887,31);
+insert into t (id,a) values (887,32);
+insert into t (id,a) values (887,33);
+insert into t (id,a) values (887,34);
+insert into t (id,a) values (887,35);
+insert into t (id,a) values (887,36);
+insert into t (id,a) values (887,37);
+insert into t (id,a) values (887,38);
+insert into t (id,a) values (887,39);
+insert into t (id,a) values (887,40);
+insert into t (id,a) values (887,41);
+insert into t (id,a) values (887,42);
+insert into t (id,a) values (887,43);
+insert into t (id,a) values (887,44);
+insert into t (id,a) values (887,45);
+insert into t (id,a) values (887,46);
+insert into t (id,a) values (887,47);
+insert into t (id,a) values (887,48);
+insert into t (id,a) values (887,49);
+insert into t (id,a) values (887,50);
+insert into t (id,a) values (887,51);
+insert into t (id,a) values (887,52);
+insert into t (id,a) values (887,53);
+insert into t (id,a) values (887,54);
+insert into t (id,a) values (887,55);
+insert into t (id,a) values (887,56);
+insert into t (id,a) values (887,57);
+insert into t (id,a) values (887,58);
+insert into t (id,a) values (887,59);
+insert into t (id,a) values (887,60);
+insert into t (id,a) values (887,61);
+insert into t (id,a) values (887,62);
+insert into t (id,a) values (887,63);
+insert into t (id,a) values (887,64);
+insert into t (id,a) values (887,65);
+insert into t (id,a) values (887,66);
+insert into t (id,a) values (887,67);
+insert into t (id,a) values (887,68);
+insert into t (id,a) values (887,69);
+insert into t (id,a) values (887,70);
+insert into t (id,a) values (887,71);
+insert into t (id,a) values (887,72);
+insert into t (id,a) values (887,73);
+insert into t (id,a) values (887,74);
+insert into t (id,a) values (887,75);
+insert into t (id,a) values (887,76);
+insert into t (id,a) values (887,77);
+insert into t (id,a) values (887,78);
+insert into t (id,a) values (887,79);
+insert into t (id,a) values (887,80);
+insert into t (id,a) values (887,81);
+insert into t (id,a) values (887,82);
+insert into t (id,a) values (887,83);
+insert into t (id,a) values (887,84);
+insert into t (id,a) values (887,85);
+insert into t (id,a) values (887,86);
+insert into t (id,a) values (887,87);
+insert into t (id,a) values (887,88);
+insert into t (id,a) values (887,89);
+insert into t (id,a) values (887,90);
+insert into t (id,a) values (887,91);
+insert into t (id,a) values (887,92);
+insert into t (id,a) values (887,93);
+insert into t (id,a) values (887,94);
+insert into t (id,a) values (887,95);
+insert into t (id,a) values (887,96);
+insert into t (id,a) values (887,97);
+insert into t (id,a) values (887,98);
+insert into t (id,a) values (887,99);
+insert into t (id,a) values (888,0);
+insert into t (id,a) values (888,1);
+insert into t (id,a) values (888,2);
+insert into t (id,a) values (888,3);
+insert into t (id,a) values (888,4);
+insert into t (id,a) values (888,5);
+insert into t (id,a) values (888,6);
+insert into t (id,a) values (888,7);
+insert into t (id,a) values (888,8);
+insert into t (id,a) values (888,9);
+insert into t (id,a) values (888,10);
+insert into t (id,a) values (888,11);
+insert into t (id,a) values (888,12);
+insert into t (id,a) values (888,13);
+insert into t (id,a) values (888,14);
+insert into t (id,a) values (888,15);
+insert into t (id,a) values (888,16);
+insert into t (id,a) values (888,17);
+insert into t (id,a) values (888,18);
+insert into t (id,a) values (888,19);
+insert into t (id,a) values (888,20);
+insert into t (id,a) values (888,21);
+insert into t (id,a) values (888,22);
+insert into t (id,a) values (888,23);
+insert into t (id,a) values (888,24);
+insert into t (id,a) values (888,25);
+insert into t (id,a) values (888,26);
+insert into t (id,a) values (888,27);
+insert into t (id,a) values (888,28);
+insert into t (id,a) values (888,29);
+insert into t (id,a) values (888,30);
+insert into t (id,a) values (888,31);
+insert into t (id,a) values (888,32);
+insert into t (id,a) values (888,33);
+insert into t (id,a) values (888,34);
+insert into t (id,a) values (888,35);
+insert into t (id,a) values (888,36);
+insert into t (id,a) values (888,37);
+insert into t (id,a) values (888,38);
+insert into t (id,a) values (888,39);
+insert into t (id,a) values (888,40);
+insert into t (id,a) values (888,41);
+insert into t (id,a) values (888,42);
+insert into t (id,a) values (888,43);
+insert into t (id,a) values (888,44);
+insert into t (id,a) values (888,45);
+insert into t (id,a) values (888,46);
+insert into t (id,a) values (888,47);
+insert into t (id,a) values (888,48);
+insert into t (id,a) values (888,49);
+insert into t (id,a) values (888,50);
+insert into t (id,a) values (888,51);
+insert into t (id,a) values (888,52);
+insert into t (id,a) values (888,53);
+insert into t (id,a) values (888,54);
+insert into t (id,a) values (888,55);
+insert into t (id,a) values (888,56);
+insert into t (id,a) values (888,57);
+insert into t (id,a) values (888,58);
+insert into t (id,a) values (888,59);
+insert into t (id,a) values (888,60);
+insert into t (id,a) values (888,61);
+insert into t (id,a) values (888,62);
+insert into t (id,a) values (888,63);
+insert into t (id,a) values (888,64);
+insert into t (id,a) values (888,65);
+insert into t (id,a) values (888,66);
+insert into t (id,a) values (888,67);
+insert into t (id,a) values (888,68);
+insert into t (id,a) values (888,69);
+insert into t (id,a) values (888,70);
+insert into t (id,a) values (888,71);
+insert into t (id,a) values (888,72);
+insert into t (id,a) values (888,73);
+insert into t (id,a) values (888,74);
+insert into t (id,a) values (888,75);
+insert into t (id,a) values (888,76);
+insert into t (id,a) values (888,77);
+insert into t (id,a) values (888,78);
+insert into t (id,a) values (888,79);
+insert into t (id,a) values (888,80);
+insert into t (id,a) values (888,81);
+insert into t (id,a) values (888,82);
+insert into t (id,a) values (888,83);
+insert into t (id,a) values (888,84);
+insert into t (id,a) values (888,85);
+insert into t (id,a) values (888,86);
+insert into t (id,a) values (888,87);
+insert into t (id,a) values (888,88);
+insert into t (id,a) values (888,89);
+insert into t (id,a) values (888,90);
+insert into t (id,a) values (888,91);
+insert into t (id,a) values (888,92);
+insert into t (id,a) values (888,93);
+insert into t (id,a) values (888,94);
+insert into t (id,a) values (888,95);
+insert into t (id,a) values (888,96);
+insert into t (id,a) values (888,97);
+insert into t (id,a) values (888,98);
+insert into t (id,a) values (888,99);
+insert into t (id,a) values (889,0);
+insert into t (id,a) values (889,1);
+insert into t (id,a) values (889,2);
+insert into t (id,a) values (889,3);
+insert into t (id,a) values (889,4);
+insert into t (id,a) values (889,5);
+insert into t (id,a) values (889,6);
+insert into t (id,a) values (889,7);
+insert into t (id,a) values (889,8);
+insert into t (id,a) values (889,9);
+insert into t (id,a) values (889,10);
+insert into t (id,a) values (889,11);
+insert into t (id,a) values (889,12);
+insert into t (id,a) values (889,13);
+insert into t (id,a) values (889,14);
+insert into t (id,a) values (889,15);
+insert into t (id,a) values (889,16);
+insert into t (id,a) values (889,17);
+insert into t (id,a) values (889,18);
+insert into t (id,a) values (889,19);
+insert into t (id,a) values (889,20);
+insert into t (id,a) values (889,21);
+insert into t (id,a) values (889,22);
+insert into t (id,a) values (889,23);
+insert into t (id,a) values (889,24);
+insert into t (id,a) values (889,25);
+insert into t (id,a) values (889,26);
+insert into t (id,a) values (889,27);
+insert into t (id,a) values (889,28);
+insert into t (id,a) values (889,29);
+insert into t (id,a) values (889,30);
+insert into t (id,a) values (889,31);
+insert into t (id,a) values (889,32);
+insert into t (id,a) values (889,33);
+insert into t (id,a) values (889,34);
+insert into t (id,a) values (889,35);
+insert into t (id,a) values (889,36);
+insert into t (id,a) values (889,37);
+insert into t (id,a) values (889,38);
+insert into t (id,a) values (889,39);
+insert into t (id,a) values (889,40);
+insert into t (id,a) values (889,41);
+insert into t (id,a) values (889,42);
+insert into t (id,a) values (889,43);
+insert into t (id,a) values (889,44);
+insert into t (id,a) values (889,45);
+insert into t (id,a) values (889,46);
+insert into t (id,a) values (889,47);
+insert into t (id,a) values (889,48);
+insert into t (id,a) values (889,49);
+insert into t (id,a) values (889,50);
+insert into t (id,a) values (889,51);
+insert into t (id,a) values (889,52);
+insert into t (id,a) values (889,53);
+insert into t (id,a) values (889,54);
+insert into t (id,a) values (889,55);
+insert into t (id,a) values (889,56);
+insert into t (id,a) values (889,57);
+insert into t (id,a) values (889,58);
+insert into t (id,a) values (889,59);
+insert into t (id,a) values (889,60);
+insert into t (id,a) values (889,61);
+insert into t (id,a) values (889,62);
+insert into t (id,a) values (889,63);
+insert into t (id,a) values (889,64);
+insert into t (id,a) values (889,65);
+insert into t (id,a) values (889,66);
+insert into t (id,a) values (889,67);
+insert into t (id,a) values (889,68);
+insert into t (id,a) values (889,69);
+insert into t (id,a) values (889,70);
+insert into t (id,a) values (889,71);
+insert into t (id,a) values (889,72);
+insert into t (id,a) values (889,73);
+insert into t (id,a) values (889,74);
+insert into t (id,a) values (889,75);
+insert into t (id,a) values (889,76);
+insert into t (id,a) values (889,77);
+insert into t (id,a) values (889,78);
+insert into t (id,a) values (889,79);
+insert into t (id,a) values (889,80);
+insert into t (id,a) values (889,81);
+insert into t (id,a) values (889,82);
+insert into t (id,a) values (889,83);
+insert into t (id,a) values (889,84);
+insert into t (id,a) values (889,85);
+insert into t (id,a) values (889,86);
+insert into t (id,a) values (889,87);
+insert into t (id,a) values (889,88);
+insert into t (id,a) values (889,89);
+insert into t (id,a) values (889,90);
+insert into t (id,a) values (889,91);
+insert into t (id,a) values (889,92);
+insert into t (id,a) values (889,93);
+insert into t (id,a) values (889,94);
+insert into t (id,a) values (889,95);
+insert into t (id,a) values (889,96);
+insert into t (id,a) values (889,97);
+insert into t (id,a) values (889,98);
+insert into t (id,a) values (889,99);
+insert into t (id,a) values (890,0);
+insert into t (id,a) values (890,1);
+insert into t (id,a) values (890,2);
+insert into t (id,a) values (890,3);
+insert into t (id,a) values (890,4);
+insert into t (id,a) values (890,5);
+insert into t (id,a) values (890,6);
+insert into t (id,a) values (890,7);
+insert into t (id,a) values (890,8);
+insert into t (id,a) values (890,9);
+insert into t (id,a) values (890,10);
+insert into t (id,a) values (890,11);
+insert into t (id,a) values (890,12);
+insert into t (id,a) values (890,13);
+insert into t (id,a) values (890,14);
+insert into t (id,a) values (890,15);
+insert into t (id,a) values (890,16);
+insert into t (id,a) values (890,17);
+insert into t (id,a) values (890,18);
+insert into t (id,a) values (890,19);
+insert into t (id,a) values (890,20);
+insert into t (id,a) values (890,21);
+insert into t (id,a) values (890,22);
+insert into t (id,a) values (890,23);
+insert into t (id,a) values (890,24);
+insert into t (id,a) values (890,25);
+insert into t (id,a) values (890,26);
+insert into t (id,a) values (890,27);
+insert into t (id,a) values (890,28);
+insert into t (id,a) values (890,29);
+insert into t (id,a) values (890,30);
+insert into t (id,a) values (890,31);
+insert into t (id,a) values (890,32);
+insert into t (id,a) values (890,33);
+insert into t (id,a) values (890,34);
+insert into t (id,a) values (890,35);
+insert into t (id,a) values (890,36);
+insert into t (id,a) values (890,37);
+insert into t (id,a) values (890,38);
+insert into t (id,a) values (890,39);
+insert into t (id,a) values (890,40);
+insert into t (id,a) values (890,41);
+insert into t (id,a) values (890,42);
+insert into t (id,a) values (890,43);
+insert into t (id,a) values (890,44);
+insert into t (id,a) values (890,45);
+insert into t (id,a) values (890,46);
+insert into t (id,a) values (890,47);
+insert into t (id,a) values (890,48);
+insert into t (id,a) values (890,49);
+insert into t (id,a) values (890,50);
+insert into t (id,a) values (890,51);
+insert into t (id,a) values (890,52);
+insert into t (id,a) values (890,53);
+insert into t (id,a) values (890,54);
+insert into t (id,a) values (890,55);
+insert into t (id,a) values (890,56);
+insert into t (id,a) values (890,57);
+insert into t (id,a) values (890,58);
+insert into t (id,a) values (890,59);
+insert into t (id,a) values (890,60);
+insert into t (id,a) values (890,61);
+insert into t (id,a) values (890,62);
+insert into t (id,a) values (890,63);
+insert into t (id,a) values (890,64);
+insert into t (id,a) values (890,65);
+insert into t (id,a) values (890,66);
+insert into t (id,a) values (890,67);
+insert into t (id,a) values (890,68);
+insert into t (id,a) values (890,69);
+insert into t (id,a) values (890,70);
+insert into t (id,a) values (890,71);
+insert into t (id,a) values (890,72);
+insert into t (id,a) values (890,73);
+insert into t (id,a) values (890,74);
+insert into t (id,a) values (890,75);
+insert into t (id,a) values (890,76);
+insert into t (id,a) values (890,77);
+insert into t (id,a) values (890,78);
+insert into t (id,a) values (890,79);
+insert into t (id,a) values (890,80);
+insert into t (id,a) values (890,81);
+insert into t (id,a) values (890,82);
+insert into t (id,a) values (890,83);
+insert into t (id,a) values (890,84);
+insert into t (id,a) values (890,85);
+insert into t (id,a) values (890,86);
+insert into t (id,a) values (890,87);
+insert into t (id,a) values (890,88);
+insert into t (id,a) values (890,89);
+insert into t (id,a) values (890,90);
+insert into t (id,a) values (890,91);
+insert into t (id,a) values (890,92);
+insert into t (id,a) values (890,93);
+insert into t (id,a) values (890,94);
+insert into t (id,a) values (890,95);
+insert into t (id,a) values (890,96);
+insert into t (id,a) values (890,97);
+insert into t (id,a) values (890,98);
+insert into t (id,a) values (890,99);
+insert into t (id,a) values (891,0);
+insert into t (id,a) values (891,1);
+insert into t (id,a) values (891,2);
+insert into t (id,a) values (891,3);
+insert into t (id,a) values (891,4);
+insert into t (id,a) values (891,5);
+insert into t (id,a) values (891,6);
+insert into t (id,a) values (891,7);
+insert into t (id,a) values (891,8);
+insert into t (id,a) values (891,9);
+insert into t (id,a) values (891,10);
+insert into t (id,a) values (891,11);
+insert into t (id,a) values (891,12);
+insert into t (id,a) values (891,13);
+insert into t (id,a) values (891,14);
+insert into t (id,a) values (891,15);
+insert into t (id,a) values (891,16);
+insert into t (id,a) values (891,17);
+insert into t (id,a) values (891,18);
+insert into t (id,a) values (891,19);
+insert into t (id,a) values (891,20);
+insert into t (id,a) values (891,21);
+insert into t (id,a) values (891,22);
+insert into t (id,a) values (891,23);
+insert into t (id,a) values (891,24);
+insert into t (id,a) values (891,25);
+insert into t (id,a) values (891,26);
+insert into t (id,a) values (891,27);
+insert into t (id,a) values (891,28);
+insert into t (id,a) values (891,29);
+insert into t (id,a) values (891,30);
+insert into t (id,a) values (891,31);
+insert into t (id,a) values (891,32);
+insert into t (id,a) values (891,33);
+insert into t (id,a) values (891,34);
+insert into t (id,a) values (891,35);
+insert into t (id,a) values (891,36);
+insert into t (id,a) values (891,37);
+insert into t (id,a) values (891,38);
+insert into t (id,a) values (891,39);
+insert into t (id,a) values (891,40);
+insert into t (id,a) values (891,41);
+insert into t (id,a) values (891,42);
+insert into t (id,a) values (891,43);
+insert into t (id,a) values (891,44);
+insert into t (id,a) values (891,45);
+insert into t (id,a) values (891,46);
+insert into t (id,a) values (891,47);
+insert into t (id,a) values (891,48);
+insert into t (id,a) values (891,49);
+insert into t (id,a) values (891,50);
+insert into t (id,a) values (891,51);
+insert into t (id,a) values (891,52);
+insert into t (id,a) values (891,53);
+insert into t (id,a) values (891,54);
+insert into t (id,a) values (891,55);
+insert into t (id,a) values (891,56);
+insert into t (id,a) values (891,57);
+insert into t (id,a) values (891,58);
+insert into t (id,a) values (891,59);
+insert into t (id,a) values (891,60);
+insert into t (id,a) values (891,61);
+insert into t (id,a) values (891,62);
+insert into t (id,a) values (891,63);
+insert into t (id,a) values (891,64);
+insert into t (id,a) values (891,65);
+insert into t (id,a) values (891,66);
+insert into t (id,a) values (891,67);
+insert into t (id,a) values (891,68);
+insert into t (id,a) values (891,69);
+insert into t (id,a) values (891,70);
+insert into t (id,a) values (891,71);
+insert into t (id,a) values (891,72);
+insert into t (id,a) values (891,73);
+insert into t (id,a) values (891,74);
+insert into t (id,a) values (891,75);
+insert into t (id,a) values (891,76);
+insert into t (id,a) values (891,77);
+insert into t (id,a) values (891,78);
+insert into t (id,a) values (891,79);
+insert into t (id,a) values (891,80);
+insert into t (id,a) values (891,81);
+insert into t (id,a) values (891,82);
+insert into t (id,a) values (891,83);
+insert into t (id,a) values (891,84);
+insert into t (id,a) values (891,85);
+insert into t (id,a) values (891,86);
+insert into t (id,a) values (891,87);
+insert into t (id,a) values (891,88);
+insert into t (id,a) values (891,89);
+insert into t (id,a) values (891,90);
+insert into t (id,a) values (891,91);
+insert into t (id,a) values (891,92);
+insert into t (id,a) values (891,93);
+insert into t (id,a) values (891,94);
+insert into t (id,a) values (891,95);
+insert into t (id,a) values (891,96);
+insert into t (id,a) values (891,97);
+insert into t (id,a) values (891,98);
+insert into t (id,a) values (891,99);
+insert into t (id,a) values (892,0);
+insert into t (id,a) values (892,1);
+insert into t (id,a) values (892,2);
+insert into t (id,a) values (892,3);
+insert into t (id,a) values (892,4);
+insert into t (id,a) values (892,5);
+insert into t (id,a) values (892,6);
+insert into t (id,a) values (892,7);
+insert into t (id,a) values (892,8);
+insert into t (id,a) values (892,9);
+insert into t (id,a) values (892,10);
+insert into t (id,a) values (892,11);
+insert into t (id,a) values (892,12);
+insert into t (id,a) values (892,13);
+insert into t (id,a) values (892,14);
+insert into t (id,a) values (892,15);
+insert into t (id,a) values (892,16);
+insert into t (id,a) values (892,17);
+insert into t (id,a) values (892,18);
+insert into t (id,a) values (892,19);
+insert into t (id,a) values (892,20);
+insert into t (id,a) values (892,21);
+insert into t (id,a) values (892,22);
+insert into t (id,a) values (892,23);
+insert into t (id,a) values (892,24);
+insert into t (id,a) values (892,25);
+insert into t (id,a) values (892,26);
+insert into t (id,a) values (892,27);
+insert into t (id,a) values (892,28);
+insert into t (id,a) values (892,29);
+insert into t (id,a) values (892,30);
+insert into t (id,a) values (892,31);
+insert into t (id,a) values (892,32);
+insert into t (id,a) values (892,33);
+insert into t (id,a) values (892,34);
+insert into t (id,a) values (892,35);
+insert into t (id,a) values (892,36);
+insert into t (id,a) values (892,37);
+insert into t (id,a) values (892,38);
+insert into t (id,a) values (892,39);
+insert into t (id,a) values (892,40);
+insert into t (id,a) values (892,41);
+insert into t (id,a) values (892,42);
+insert into t (id,a) values (892,43);
+insert into t (id,a) values (892,44);
+insert into t (id,a) values (892,45);
+insert into t (id,a) values (892,46);
+insert into t (id,a) values (892,47);
+insert into t (id,a) values (892,48);
+insert into t (id,a) values (892,49);
+insert into t (id,a) values (892,50);
+insert into t (id,a) values (892,51);
+insert into t (id,a) values (892,52);
+insert into t (id,a) values (892,53);
+insert into t (id,a) values (892,54);
+insert into t (id,a) values (892,55);
+insert into t (id,a) values (892,56);
+insert into t (id,a) values (892,57);
+insert into t (id,a) values (892,58);
+insert into t (id,a) values (892,59);
+insert into t (id,a) values (892,60);
+insert into t (id,a) values (892,61);
+insert into t (id,a) values (892,62);
+insert into t (id,a) values (892,63);
+insert into t (id,a) values (892,64);
+insert into t (id,a) values (892,65);
+insert into t (id,a) values (892,66);
+insert into t (id,a) values (892,67);
+insert into t (id,a) values (892,68);
+insert into t (id,a) values (892,69);
+insert into t (id,a) values (892,70);
+insert into t (id,a) values (892,71);
+insert into t (id,a) values (892,72);
+insert into t (id,a) values (892,73);
+insert into t (id,a) values (892,74);
+insert into t (id,a) values (892,75);
+insert into t (id,a) values (892,76);
+insert into t (id,a) values (892,77);
+insert into t (id,a) values (892,78);
+insert into t (id,a) values (892,79);
+insert into t (id,a) values (892,80);
+insert into t (id,a) values (892,81);
+insert into t (id,a) values (892,82);
+insert into t (id,a) values (892,83);
+insert into t (id,a) values (892,84);
+insert into t (id,a) values (892,85);
+insert into t (id,a) values (892,86);
+insert into t (id,a) values (892,87);
+insert into t (id,a) values (892,88);
+insert into t (id,a) values (892,89);
+insert into t (id,a) values (892,90);
+insert into t (id,a) values (892,91);
+insert into t (id,a) values (892,92);
+insert into t (id,a) values (892,93);
+insert into t (id,a) values (892,94);
+insert into t (id,a) values (892,95);
+insert into t (id,a) values (892,96);
+insert into t (id,a) values (892,97);
+insert into t (id,a) values (892,98);
+insert into t (id,a) values (892,99);
+insert into t (id,a) values (893,0);
+insert into t (id,a) values (893,1);
+insert into t (id,a) values (893,2);
+insert into t (id,a) values (893,3);
+insert into t (id,a) values (893,4);
+insert into t (id,a) values (893,5);
+insert into t (id,a) values (893,6);
+insert into t (id,a) values (893,7);
+insert into t (id,a) values (893,8);
+insert into t (id,a) values (893,9);
+insert into t (id,a) values (893,10);
+insert into t (id,a) values (893,11);
+insert into t (id,a) values (893,12);
+insert into t (id,a) values (893,13);
+insert into t (id,a) values (893,14);
+insert into t (id,a) values (893,15);
+insert into t (id,a) values (893,16);
+insert into t (id,a) values (893,17);
+insert into t (id,a) values (893,18);
+insert into t (id,a) values (893,19);
+insert into t (id,a) values (893,20);
+insert into t (id,a) values (893,21);
+insert into t (id,a) values (893,22);
+insert into t (id,a) values (893,23);
+insert into t (id,a) values (893,24);
+insert into t (id,a) values (893,25);
+insert into t (id,a) values (893,26);
+insert into t (id,a) values (893,27);
+insert into t (id,a) values (893,28);
+insert into t (id,a) values (893,29);
+insert into t (id,a) values (893,30);
+insert into t (id,a) values (893,31);
+insert into t (id,a) values (893,32);
+insert into t (id,a) values (893,33);
+insert into t (id,a) values (893,34);
+insert into t (id,a) values (893,35);
+insert into t (id,a) values (893,36);
+insert into t (id,a) values (893,37);
+insert into t (id,a) values (893,38);
+insert into t (id,a) values (893,39);
+insert into t (id,a) values (893,40);
+insert into t (id,a) values (893,41);
+insert into t (id,a) values (893,42);
+insert into t (id,a) values (893,43);
+insert into t (id,a) values (893,44);
+insert into t (id,a) values (893,45);
+insert into t (id,a) values (893,46);
+insert into t (id,a) values (893,47);
+insert into t (id,a) values (893,48);
+insert into t (id,a) values (893,49);
+insert into t (id,a) values (893,50);
+insert into t (id,a) values (893,51);
+insert into t (id,a) values (893,52);
+insert into t (id,a) values (893,53);
+insert into t (id,a) values (893,54);
+insert into t (id,a) values (893,55);
+insert into t (id,a) values (893,56);
+insert into t (id,a) values (893,57);
+insert into t (id,a) values (893,58);
+insert into t (id,a) values (893,59);
+insert into t (id,a) values (893,60);
+insert into t (id,a) values (893,61);
+insert into t (id,a) values (893,62);
+insert into t (id,a) values (893,63);
+insert into t (id,a) values (893,64);
+insert into t (id,a) values (893,65);
+insert into t (id,a) values (893,66);
+insert into t (id,a) values (893,67);
+insert into t (id,a) values (893,68);
+insert into t (id,a) values (893,69);
+insert into t (id,a) values (893,70);
+insert into t (id,a) values (893,71);
+insert into t (id,a) values (893,72);
+insert into t (id,a) values (893,73);
+insert into t (id,a) values (893,74);
+insert into t (id,a) values (893,75);
+insert into t (id,a) values (893,76);
+insert into t (id,a) values (893,77);
+insert into t (id,a) values (893,78);
+insert into t (id,a) values (893,79);
+insert into t (id,a) values (893,80);
+insert into t (id,a) values (893,81);
+insert into t (id,a) values (893,82);
+insert into t (id,a) values (893,83);
+insert into t (id,a) values (893,84);
+insert into t (id,a) values (893,85);
+insert into t (id,a) values (893,86);
+insert into t (id,a) values (893,87);
+insert into t (id,a) values (893,88);
+insert into t (id,a) values (893,89);
+insert into t (id,a) values (893,90);
+insert into t (id,a) values (893,91);
+insert into t (id,a) values (893,92);
+insert into t (id,a) values (893,93);
+insert into t (id,a) values (893,94);
+insert into t (id,a) values (893,95);
+insert into t (id,a) values (893,96);
+insert into t (id,a) values (893,97);
+insert into t (id,a) values (893,98);
+insert into t (id,a) values (893,99);
+insert into t (id,a) values (894,0);
+insert into t (id,a) values (894,1);
+insert into t (id,a) values (894,2);
+insert into t (id,a) values (894,3);
+insert into t (id,a) values (894,4);
+insert into t (id,a) values (894,5);
+insert into t (id,a) values (894,6);
+insert into t (id,a) values (894,7);
+insert into t (id,a) values (894,8);
+insert into t (id,a) values (894,9);
+insert into t (id,a) values (894,10);
+insert into t (id,a) values (894,11);
+insert into t (id,a) values (894,12);
+insert into t (id,a) values (894,13);
+insert into t (id,a) values (894,14);
+insert into t (id,a) values (894,15);
+insert into t (id,a) values (894,16);
+insert into t (id,a) values (894,17);
+insert into t (id,a) values (894,18);
+insert into t (id,a) values (894,19);
+insert into t (id,a) values (894,20);
+insert into t (id,a) values (894,21);
+insert into t (id,a) values (894,22);
+insert into t (id,a) values (894,23);
+insert into t (id,a) values (894,24);
+insert into t (id,a) values (894,25);
+insert into t (id,a) values (894,26);
+insert into t (id,a) values (894,27);
+insert into t (id,a) values (894,28);
+insert into t (id,a) values (894,29);
+insert into t (id,a) values (894,30);
+insert into t (id,a) values (894,31);
+insert into t (id,a) values (894,32);
+insert into t (id,a) values (894,33);
+insert into t (id,a) values (894,34);
+insert into t (id,a) values (894,35);
+insert into t (id,a) values (894,36);
+insert into t (id,a) values (894,37);
+insert into t (id,a) values (894,38);
+insert into t (id,a) values (894,39);
+insert into t (id,a) values (894,40);
+insert into t (id,a) values (894,41);
+insert into t (id,a) values (894,42);
+insert into t (id,a) values (894,43);
+insert into t (id,a) values (894,44);
+insert into t (id,a) values (894,45);
+insert into t (id,a) values (894,46);
+insert into t (id,a) values (894,47);
+insert into t (id,a) values (894,48);
+insert into t (id,a) values (894,49);
+insert into t (id,a) values (894,50);
+insert into t (id,a) values (894,51);
+insert into t (id,a) values (894,52);
+insert into t (id,a) values (894,53);
+insert into t (id,a) values (894,54);
+insert into t (id,a) values (894,55);
+insert into t (id,a) values (894,56);
+insert into t (id,a) values (894,57);
+insert into t (id,a) values (894,58);
+insert into t (id,a) values (894,59);
+insert into t (id,a) values (894,60);
+insert into t (id,a) values (894,61);
+insert into t (id,a) values (894,62);
+insert into t (id,a) values (894,63);
+insert into t (id,a) values (894,64);
+insert into t (id,a) values (894,65);
+insert into t (id,a) values (894,66);
+insert into t (id,a) values (894,67);
+insert into t (id,a) values (894,68);
+insert into t (id,a) values (894,69);
+insert into t (id,a) values (894,70);
+insert into t (id,a) values (894,71);
+insert into t (id,a) values (894,72);
+insert into t (id,a) values (894,73);
+insert into t (id,a) values (894,74);
+insert into t (id,a) values (894,75);
+insert into t (id,a) values (894,76);
+insert into t (id,a) values (894,77);
+insert into t (id,a) values (894,78);
+insert into t (id,a) values (894,79);
+insert into t (id,a) values (894,80);
+insert into t (id,a) values (894,81);
+insert into t (id,a) values (894,82);
+insert into t (id,a) values (894,83);
+insert into t (id,a) values (894,84);
+insert into t (id,a) values (894,85);
+insert into t (id,a) values (894,86);
+insert into t (id,a) values (894,87);
+insert into t (id,a) values (894,88);
+insert into t (id,a) values (894,89);
+insert into t (id,a) values (894,90);
+insert into t (id,a) values (894,91);
+insert into t (id,a) values (894,92);
+insert into t (id,a) values (894,93);
+insert into t (id,a) values (894,94);
+insert into t (id,a) values (894,95);
+insert into t (id,a) values (894,96);
+insert into t (id,a) values (894,97);
+insert into t (id,a) values (894,98);
+insert into t (id,a) values (894,99);
+insert into t (id,a) values (895,0);
+insert into t (id,a) values (895,1);
+insert into t (id,a) values (895,2);
+insert into t (id,a) values (895,3);
+insert into t (id,a) values (895,4);
+insert into t (id,a) values (895,5);
+insert into t (id,a) values (895,6);
+insert into t (id,a) values (895,7);
+insert into t (id,a) values (895,8);
+insert into t (id,a) values (895,9);
+insert into t (id,a) values (895,10);
+insert into t (id,a) values (895,11);
+insert into t (id,a) values (895,12);
+insert into t (id,a) values (895,13);
+insert into t (id,a) values (895,14);
+insert into t (id,a) values (895,15);
+insert into t (id,a) values (895,16);
+insert into t (id,a) values (895,17);
+insert into t (id,a) values (895,18);
+insert into t (id,a) values (895,19);
+insert into t (id,a) values (895,20);
+insert into t (id,a) values (895,21);
+insert into t (id,a) values (895,22);
+insert into t (id,a) values (895,23);
+insert into t (id,a) values (895,24);
+insert into t (id,a) values (895,25);
+insert into t (id,a) values (895,26);
+insert into t (id,a) values (895,27);
+insert into t (id,a) values (895,28);
+insert into t (id,a) values (895,29);
+insert into t (id,a) values (895,30);
+insert into t (id,a) values (895,31);
+insert into t (id,a) values (895,32);
+insert into t (id,a) values (895,33);
+insert into t (id,a) values (895,34);
+insert into t (id,a) values (895,35);
+insert into t (id,a) values (895,36);
+insert into t (id,a) values (895,37);
+insert into t (id,a) values (895,38);
+insert into t (id,a) values (895,39);
+insert into t (id,a) values (895,40);
+insert into t (id,a) values (895,41);
+insert into t (id,a) values (895,42);
+insert into t (id,a) values (895,43);
+insert into t (id,a) values (895,44);
+insert into t (id,a) values (895,45);
+insert into t (id,a) values (895,46);
+insert into t (id,a) values (895,47);
+insert into t (id,a) values (895,48);
+insert into t (id,a) values (895,49);
+insert into t (id,a) values (895,50);
+insert into t (id,a) values (895,51);
+insert into t (id,a) values (895,52);
+insert into t (id,a) values (895,53);
+insert into t (id,a) values (895,54);
+insert into t (id,a) values (895,55);
+insert into t (id,a) values (895,56);
+insert into t (id,a) values (895,57);
+insert into t (id,a) values (895,58);
+insert into t (id,a) values (895,59);
+insert into t (id,a) values (895,60);
+insert into t (id,a) values (895,61);
+insert into t (id,a) values (895,62);
+insert into t (id,a) values (895,63);
+insert into t (id,a) values (895,64);
+insert into t (id,a) values (895,65);
+insert into t (id,a) values (895,66);
+insert into t (id,a) values (895,67);
+insert into t (id,a) values (895,68);
+insert into t (id,a) values (895,69);
+insert into t (id,a) values (895,70);
+insert into t (id,a) values (895,71);
+insert into t (id,a) values (895,72);
+insert into t (id,a) values (895,73);
+insert into t (id,a) values (895,74);
+insert into t (id,a) values (895,75);
+insert into t (id,a) values (895,76);
+insert into t (id,a) values (895,77);
+insert into t (id,a) values (895,78);
+insert into t (id,a) values (895,79);
+insert into t (id,a) values (895,80);
+insert into t (id,a) values (895,81);
+insert into t (id,a) values (895,82);
+insert into t (id,a) values (895,83);
+insert into t (id,a) values (895,84);
+insert into t (id,a) values (895,85);
+insert into t (id,a) values (895,86);
+insert into t (id,a) values (895,87);
+insert into t (id,a) values (895,88);
+insert into t (id,a) values (895,89);
+insert into t (id,a) values (895,90);
+insert into t (id,a) values (895,91);
+insert into t (id,a) values (895,92);
+insert into t (id,a) values (895,93);
+insert into t (id,a) values (895,94);
+insert into t (id,a) values (895,95);
+insert into t (id,a) values (895,96);
+insert into t (id,a) values (895,97);
+insert into t (id,a) values (895,98);
+insert into t (id,a) values (895,99);
+insert into t (id,a) values (896,0);
+insert into t (id,a) values (896,1);
+insert into t (id,a) values (896,2);
+insert into t (id,a) values (896,3);
+insert into t (id,a) values (896,4);
+insert into t (id,a) values (896,5);
+insert into t (id,a) values (896,6);
+insert into t (id,a) values (896,7);
+insert into t (id,a) values (896,8);
+insert into t (id,a) values (896,9);
+insert into t (id,a) values (896,10);
+insert into t (id,a) values (896,11);
+insert into t (id,a) values (896,12);
+insert into t (id,a) values (896,13);
+insert into t (id,a) values (896,14);
+insert into t (id,a) values (896,15);
+insert into t (id,a) values (896,16);
+insert into t (id,a) values (896,17);
+insert into t (id,a) values (896,18);
+insert into t (id,a) values (896,19);
+insert into t (id,a) values (896,20);
+insert into t (id,a) values (896,21);
+insert into t (id,a) values (896,22);
+insert into t (id,a) values (896,23);
+insert into t (id,a) values (896,24);
+insert into t (id,a) values (896,25);
+insert into t (id,a) values (896,26);
+insert into t (id,a) values (896,27);
+insert into t (id,a) values (896,28);
+insert into t (id,a) values (896,29);
+insert into t (id,a) values (896,30);
+insert into t (id,a) values (896,31);
+insert into t (id,a) values (896,32);
+insert into t (id,a) values (896,33);
+insert into t (id,a) values (896,34);
+insert into t (id,a) values (896,35);
+insert into t (id,a) values (896,36);
+insert into t (id,a) values (896,37);
+insert into t (id,a) values (896,38);
+insert into t (id,a) values (896,39);
+insert into t (id,a) values (896,40);
+insert into t (id,a) values (896,41);
+insert into t (id,a) values (896,42);
+insert into t (id,a) values (896,43);
+insert into t (id,a) values (896,44);
+insert into t (id,a) values (896,45);
+insert into t (id,a) values (896,46);
+insert into t (id,a) values (896,47);
+insert into t (id,a) values (896,48);
+insert into t (id,a) values (896,49);
+insert into t (id,a) values (896,50);
+insert into t (id,a) values (896,51);
+insert into t (id,a) values (896,52);
+insert into t (id,a) values (896,53);
+insert into t (id,a) values (896,54);
+insert into t (id,a) values (896,55);
+insert into t (id,a) values (896,56);
+insert into t (id,a) values (896,57);
+insert into t (id,a) values (896,58);
+insert into t (id,a) values (896,59);
+insert into t (id,a) values (896,60);
+insert into t (id,a) values (896,61);
+insert into t (id,a) values (896,62);
+insert into t (id,a) values (896,63);
+insert into t (id,a) values (896,64);
+insert into t (id,a) values (896,65);
+insert into t (id,a) values (896,66);
+insert into t (id,a) values (896,67);
+insert into t (id,a) values (896,68);
+insert into t (id,a) values (896,69);
+insert into t (id,a) values (896,70);
+insert into t (id,a) values (896,71);
+insert into t (id,a) values (896,72);
+insert into t (id,a) values (896,73);
+insert into t (id,a) values (896,74);
+insert into t (id,a) values (896,75);
+insert into t (id,a) values (896,76);
+insert into t (id,a) values (896,77);
+insert into t (id,a) values (896,78);
+insert into t (id,a) values (896,79);
+insert into t (id,a) values (896,80);
+insert into t (id,a) values (896,81);
+insert into t (id,a) values (896,82);
+insert into t (id,a) values (896,83);
+insert into t (id,a) values (896,84);
+insert into t (id,a) values (896,85);
+insert into t (id,a) values (896,86);
+insert into t (id,a) values (896,87);
+insert into t (id,a) values (896,88);
+insert into t (id,a) values (896,89);
+insert into t (id,a) values (896,90);
+insert into t (id,a) values (896,91);
+insert into t (id,a) values (896,92);
+insert into t (id,a) values (896,93);
+insert into t (id,a) values (896,94);
+insert into t (id,a) values (896,95);
+insert into t (id,a) values (896,96);
+insert into t (id,a) values (896,97);
+insert into t (id,a) values (896,98);
+insert into t (id,a) values (896,99);
+insert into t (id,a) values (897,0);
+insert into t (id,a) values (897,1);
+insert into t (id,a) values (897,2);
+insert into t (id,a) values (897,3);
+insert into t (id,a) values (897,4);
+insert into t (id,a) values (897,5);
+insert into t (id,a) values (897,6);
+insert into t (id,a) values (897,7);
+insert into t (id,a) values (897,8);
+insert into t (id,a) values (897,9);
+insert into t (id,a) values (897,10);
+insert into t (id,a) values (897,11);
+insert into t (id,a) values (897,12);
+insert into t (id,a) values (897,13);
+insert into t (id,a) values (897,14);
+insert into t (id,a) values (897,15);
+insert into t (id,a) values (897,16);
+insert into t (id,a) values (897,17);
+insert into t (id,a) values (897,18);
+insert into t (id,a) values (897,19);
+insert into t (id,a) values (897,20);
+insert into t (id,a) values (897,21);
+insert into t (id,a) values (897,22);
+insert into t (id,a) values (897,23);
+insert into t (id,a) values (897,24);
+insert into t (id,a) values (897,25);
+insert into t (id,a) values (897,26);
+insert into t (id,a) values (897,27);
+insert into t (id,a) values (897,28);
+insert into t (id,a) values (897,29);
+insert into t (id,a) values (897,30);
+insert into t (id,a) values (897,31);
+insert into t (id,a) values (897,32);
+insert into t (id,a) values (897,33);
+insert into t (id,a) values (897,34);
+insert into t (id,a) values (897,35);
+insert into t (id,a) values (897,36);
+insert into t (id,a) values (897,37);
+insert into t (id,a) values (897,38);
+insert into t (id,a) values (897,39);
+insert into t (id,a) values (897,40);
+insert into t (id,a) values (897,41);
+insert into t (id,a) values (897,42);
+insert into t (id,a) values (897,43);
+insert into t (id,a) values (897,44);
+insert into t (id,a) values (897,45);
+insert into t (id,a) values (897,46);
+insert into t (id,a) values (897,47);
+insert into t (id,a) values (897,48);
+insert into t (id,a) values (897,49);
+insert into t (id,a) values (897,50);
+insert into t (id,a) values (897,51);
+insert into t (id,a) values (897,52);
+insert into t (id,a) values (897,53);
+insert into t (id,a) values (897,54);
+insert into t (id,a) values (897,55);
+insert into t (id,a) values (897,56);
+insert into t (id,a) values (897,57);
+insert into t (id,a) values (897,58);
+insert into t (id,a) values (897,59);
+insert into t (id,a) values (897,60);
+insert into t (id,a) values (897,61);
+insert into t (id,a) values (897,62);
+insert into t (id,a) values (897,63);
+insert into t (id,a) values (897,64);
+insert into t (id,a) values (897,65);
+insert into t (id,a) values (897,66);
+insert into t (id,a) values (897,67);
+insert into t (id,a) values (897,68);
+insert into t (id,a) values (897,69);
+insert into t (id,a) values (897,70);
+insert into t (id,a) values (897,71);
+insert into t (id,a) values (897,72);
+insert into t (id,a) values (897,73);
+insert into t (id,a) values (897,74);
+insert into t (id,a) values (897,75);
+insert into t (id,a) values (897,76);
+insert into t (id,a) values (897,77);
+insert into t (id,a) values (897,78);
+insert into t (id,a) values (897,79);
+insert into t (id,a) values (897,80);
+insert into t (id,a) values (897,81);
+insert into t (id,a) values (897,82);
+insert into t (id,a) values (897,83);
+insert into t (id,a) values (897,84);
+insert into t (id,a) values (897,85);
+insert into t (id,a) values (897,86);
+insert into t (id,a) values (897,87);
+insert into t (id,a) values (897,88);
+insert into t (id,a) values (897,89);
+insert into t (id,a) values (897,90);
+insert into t (id,a) values (897,91);
+insert into t (id,a) values (897,92);
+insert into t (id,a) values (897,93);
+insert into t (id,a) values (897,94);
+insert into t (id,a) values (897,95);
+insert into t (id,a) values (897,96);
+insert into t (id,a) values (897,97);
+insert into t (id,a) values (897,98);
+insert into t (id,a) values (897,99);
+insert into t (id,a) values (898,0);
+insert into t (id,a) values (898,1);
+insert into t (id,a) values (898,2);
+insert into t (id,a) values (898,3);
+insert into t (id,a) values (898,4);
+insert into t (id,a) values (898,5);
+insert into t (id,a) values (898,6);
+insert into t (id,a) values (898,7);
+insert into t (id,a) values (898,8);
+insert into t (id,a) values (898,9);
+insert into t (id,a) values (898,10);
+insert into t (id,a) values (898,11);
+insert into t (id,a) values (898,12);
+insert into t (id,a) values (898,13);
+insert into t (id,a) values (898,14);
+insert into t (id,a) values (898,15);
+insert into t (id,a) values (898,16);
+insert into t (id,a) values (898,17);
+insert into t (id,a) values (898,18);
+insert into t (id,a) values (898,19);
+insert into t (id,a) values (898,20);
+insert into t (id,a) values (898,21);
+insert into t (id,a) values (898,22);
+insert into t (id,a) values (898,23);
+insert into t (id,a) values (898,24);
+insert into t (id,a) values (898,25);
+insert into t (id,a) values (898,26);
+insert into t (id,a) values (898,27);
+insert into t (id,a) values (898,28);
+insert into t (id,a) values (898,29);
+insert into t (id,a) values (898,30);
+insert into t (id,a) values (898,31);
+insert into t (id,a) values (898,32);
+insert into t (id,a) values (898,33);
+insert into t (id,a) values (898,34);
+insert into t (id,a) values (898,35);
+insert into t (id,a) values (898,36);
+insert into t (id,a) values (898,37);
+insert into t (id,a) values (898,38);
+insert into t (id,a) values (898,39);
+insert into t (id,a) values (898,40);
+insert into t (id,a) values (898,41);
+insert into t (id,a) values (898,42);
+insert into t (id,a) values (898,43);
+insert into t (id,a) values (898,44);
+insert into t (id,a) values (898,45);
+insert into t (id,a) values (898,46);
+insert into t (id,a) values (898,47);
+insert into t (id,a) values (898,48);
+insert into t (id,a) values (898,49);
+insert into t (id,a) values (898,50);
+insert into t (id,a) values (898,51);
+insert into t (id,a) values (898,52);
+insert into t (id,a) values (898,53);
+insert into t (id,a) values (898,54);
+insert into t (id,a) values (898,55);
+insert into t (id,a) values (898,56);
+insert into t (id,a) values (898,57);
+insert into t (id,a) values (898,58);
+insert into t (id,a) values (898,59);
+insert into t (id,a) values (898,60);
+insert into t (id,a) values (898,61);
+insert into t (id,a) values (898,62);
+insert into t (id,a) values (898,63);
+insert into t (id,a) values (898,64);
+insert into t (id,a) values (898,65);
+insert into t (id,a) values (898,66);
+insert into t (id,a) values (898,67);
+insert into t (id,a) values (898,68);
+insert into t (id,a) values (898,69);
+insert into t (id,a) values (898,70);
+insert into t (id,a) values (898,71);
+insert into t (id,a) values (898,72);
+insert into t (id,a) values (898,73);
+insert into t (id,a) values (898,74);
+insert into t (id,a) values (898,75);
+insert into t (id,a) values (898,76);
+insert into t (id,a) values (898,77);
+insert into t (id,a) values (898,78);
+insert into t (id,a) values (898,79);
+insert into t (id,a) values (898,80);
+insert into t (id,a) values (898,81);
+insert into t (id,a) values (898,82);
+insert into t (id,a) values (898,83);
+insert into t (id,a) values (898,84);
+insert into t (id,a) values (898,85);
+insert into t (id,a) values (898,86);
+insert into t (id,a) values (898,87);
+insert into t (id,a) values (898,88);
+insert into t (id,a) values (898,89);
+insert into t (id,a) values (898,90);
+insert into t (id,a) values (898,91);
+insert into t (id,a) values (898,92);
+insert into t (id,a) values (898,93);
+insert into t (id,a) values (898,94);
+insert into t (id,a) values (898,95);
+insert into t (id,a) values (898,96);
+insert into t (id,a) values (898,97);
+insert into t (id,a) values (898,98);
+insert into t (id,a) values (898,99);
+insert into t (id,a) values (899,0);
+insert into t (id,a) values (899,1);
+insert into t (id,a) values (899,2);
+insert into t (id,a) values (899,3);
+insert into t (id,a) values (899,4);
+insert into t (id,a) values (899,5);
+insert into t (id,a) values (899,6);
+insert into t (id,a) values (899,7);
+insert into t (id,a) values (899,8);
+insert into t (id,a) values (899,9);
+insert into t (id,a) values (899,10);
+insert into t (id,a) values (899,11);
+insert into t (id,a) values (899,12);
+insert into t (id,a) values (899,13);
+insert into t (id,a) values (899,14);
+insert into t (id,a) values (899,15);
+insert into t (id,a) values (899,16);
+insert into t (id,a) values (899,17);
+insert into t (id,a) values (899,18);
+insert into t (id,a) values (899,19);
+insert into t (id,a) values (899,20);
+insert into t (id,a) values (899,21);
+insert into t (id,a) values (899,22);
+insert into t (id,a) values (899,23);
+insert into t (id,a) values (899,24);
+insert into t (id,a) values (899,25);
+insert into t (id,a) values (899,26);
+insert into t (id,a) values (899,27);
+insert into t (id,a) values (899,28);
+insert into t (id,a) values (899,29);
+insert into t (id,a) values (899,30);
+insert into t (id,a) values (899,31);
+insert into t (id,a) values (899,32);
+insert into t (id,a) values (899,33);
+insert into t (id,a) values (899,34);
+insert into t (id,a) values (899,35);
+insert into t (id,a) values (899,36);
+insert into t (id,a) values (899,37);
+insert into t (id,a) values (899,38);
+insert into t (id,a) values (899,39);
+insert into t (id,a) values (899,40);
+insert into t (id,a) values (899,41);
+insert into t (id,a) values (899,42);
+insert into t (id,a) values (899,43);
+insert into t (id,a) values (899,44);
+insert into t (id,a) values (899,45);
+insert into t (id,a) values (899,46);
+insert into t (id,a) values (899,47);
+insert into t (id,a) values (899,48);
+insert into t (id,a) values (899,49);
+insert into t (id,a) values (899,50);
+insert into t (id,a) values (899,51);
+insert into t (id,a) values (899,52);
+insert into t (id,a) values (899,53);
+insert into t (id,a) values (899,54);
+insert into t (id,a) values (899,55);
+insert into t (id,a) values (899,56);
+insert into t (id,a) values (899,57);
+insert into t (id,a) values (899,58);
+insert into t (id,a) values (899,59);
+insert into t (id,a) values (899,60);
+insert into t (id,a) values (899,61);
+insert into t (id,a) values (899,62);
+insert into t (id,a) values (899,63);
+insert into t (id,a) values (899,64);
+insert into t (id,a) values (899,65);
+insert into t (id,a) values (899,66);
+insert into t (id,a) values (899,67);
+insert into t (id,a) values (899,68);
+insert into t (id,a) values (899,69);
+insert into t (id,a) values (899,70);
+insert into t (id,a) values (899,71);
+insert into t (id,a) values (899,72);
+insert into t (id,a) values (899,73);
+insert into t (id,a) values (899,74);
+insert into t (id,a) values (899,75);
+insert into t (id,a) values (899,76);
+insert into t (id,a) values (899,77);
+insert into t (id,a) values (899,78);
+insert into t (id,a) values (899,79);
+insert into t (id,a) values (899,80);
+insert into t (id,a) values (899,81);
+insert into t (id,a) values (899,82);
+insert into t (id,a) values (899,83);
+insert into t (id,a) values (899,84);
+insert into t (id,a) values (899,85);
+insert into t (id,a) values (899,86);
+insert into t (id,a) values (899,87);
+insert into t (id,a) values (899,88);
+insert into t (id,a) values (899,89);
+insert into t (id,a) values (899,90);
+insert into t (id,a) values (899,91);
+insert into t (id,a) values (899,92);
+insert into t (id,a) values (899,93);
+insert into t (id,a) values (899,94);
+insert into t (id,a) values (899,95);
+insert into t (id,a) values (899,96);
+insert into t (id,a) values (899,97);
+insert into t (id,a) values (899,98);
+insert into t (id,a) values (899,99);
+insert into t (id,a) values (900,0);
+insert into t (id,a) values (900,1);
+insert into t (id,a) values (900,2);
+insert into t (id,a) values (900,3);
+insert into t (id,a) values (900,4);
+insert into t (id,a) values (900,5);
+insert into t (id,a) values (900,6);
+insert into t (id,a) values (900,7);
+insert into t (id,a) values (900,8);
+insert into t (id,a) values (900,9);
+insert into t (id,a) values (900,10);
+insert into t (id,a) values (900,11);
+insert into t (id,a) values (900,12);
+insert into t (id,a) values (900,13);
+insert into t (id,a) values (900,14);
+insert into t (id,a) values (900,15);
+insert into t (id,a) values (900,16);
+insert into t (id,a) values (900,17);
+insert into t (id,a) values (900,18);
+insert into t (id,a) values (900,19);
+insert into t (id,a) values (900,20);
+insert into t (id,a) values (900,21);
+insert into t (id,a) values (900,22);
+insert into t (id,a) values (900,23);
+insert into t (id,a) values (900,24);
+insert into t (id,a) values (900,25);
+insert into t (id,a) values (900,26);
+insert into t (id,a) values (900,27);
+insert into t (id,a) values (900,28);
+insert into t (id,a) values (900,29);
+insert into t (id,a) values (900,30);
+insert into t (id,a) values (900,31);
+insert into t (id,a) values (900,32);
+insert into t (id,a) values (900,33);
+insert into t (id,a) values (900,34);
+insert into t (id,a) values (900,35);
+insert into t (id,a) values (900,36);
+insert into t (id,a) values (900,37);
+insert into t (id,a) values (900,38);
+insert into t (id,a) values (900,39);
+insert into t (id,a) values (900,40);
+insert into t (id,a) values (900,41);
+insert into t (id,a) values (900,42);
+insert into t (id,a) values (900,43);
+insert into t (id,a) values (900,44);
+insert into t (id,a) values (900,45);
+insert into t (id,a) values (900,46);
+insert into t (id,a) values (900,47);
+insert into t (id,a) values (900,48);
+insert into t (id,a) values (900,49);
+insert into t (id,a) values (900,50);
+insert into t (id,a) values (900,51);
+insert into t (id,a) values (900,52);
+insert into t (id,a) values (900,53);
+insert into t (id,a) values (900,54);
+insert into t (id,a) values (900,55);
+insert into t (id,a) values (900,56);
+insert into t (id,a) values (900,57);
+insert into t (id,a) values (900,58);
+insert into t (id,a) values (900,59);
+insert into t (id,a) values (900,60);
+insert into t (id,a) values (900,61);
+insert into t (id,a) values (900,62);
+insert into t (id,a) values (900,63);
+insert into t (id,a) values (900,64);
+insert into t (id,a) values (900,65);
+insert into t (id,a) values (900,66);
+insert into t (id,a) values (900,67);
+insert into t (id,a) values (900,68);
+insert into t (id,a) values (900,69);
+insert into t (id,a) values (900,70);
+insert into t (id,a) values (900,71);
+insert into t (id,a) values (900,72);
+insert into t (id,a) values (900,73);
+insert into t (id,a) values (900,74);
+insert into t (id,a) values (900,75);
+insert into t (id,a) values (900,76);
+insert into t (id,a) values (900,77);
+insert into t (id,a) values (900,78);
+insert into t (id,a) values (900,79);
+insert into t (id,a) values (900,80);
+insert into t (id,a) values (900,81);
+insert into t (id,a) values (900,82);
+insert into t (id,a) values (900,83);
+insert into t (id,a) values (900,84);
+insert into t (id,a) values (900,85);
+insert into t (id,a) values (900,86);
+insert into t (id,a) values (900,87);
+insert into t (id,a) values (900,88);
+insert into t (id,a) values (900,89);
+insert into t (id,a) values (900,90);
+insert into t (id,a) values (900,91);
+insert into t (id,a) values (900,92);
+insert into t (id,a) values (900,93);
+insert into t (id,a) values (900,94);
+insert into t (id,a) values (900,95);
+insert into t (id,a) values (900,96);
+insert into t (id,a) values (900,97);
+insert into t (id,a) values (900,98);
+insert into t (id,a) values (900,99);
+insert into t (id,a) values (901,0);
+insert into t (id,a) values (901,1);
+insert into t (id,a) values (901,2);
+insert into t (id,a) values (901,3);
+insert into t (id,a) values (901,4);
+insert into t (id,a) values (901,5);
+insert into t (id,a) values (901,6);
+insert into t (id,a) values (901,7);
+insert into t (id,a) values (901,8);
+insert into t (id,a) values (901,9);
+insert into t (id,a) values (901,10);
+insert into t (id,a) values (901,11);
+insert into t (id,a) values (901,12);
+insert into t (id,a) values (901,13);
+insert into t (id,a) values (901,14);
+insert into t (id,a) values (901,15);
+insert into t (id,a) values (901,16);
+insert into t (id,a) values (901,17);
+insert into t (id,a) values (901,18);
+insert into t (id,a) values (901,19);
+insert into t (id,a) values (901,20);
+insert into t (id,a) values (901,21);
+insert into t (id,a) values (901,22);
+insert into t (id,a) values (901,23);
+insert into t (id,a) values (901,24);
+insert into t (id,a) values (901,25);
+insert into t (id,a) values (901,26);
+insert into t (id,a) values (901,27);
+insert into t (id,a) values (901,28);
+insert into t (id,a) values (901,29);
+insert into t (id,a) values (901,30);
+insert into t (id,a) values (901,31);
+insert into t (id,a) values (901,32);
+insert into t (id,a) values (901,33);
+insert into t (id,a) values (901,34);
+insert into t (id,a) values (901,35);
+insert into t (id,a) values (901,36);
+insert into t (id,a) values (901,37);
+insert into t (id,a) values (901,38);
+insert into t (id,a) values (901,39);
+insert into t (id,a) values (901,40);
+insert into t (id,a) values (901,41);
+insert into t (id,a) values (901,42);
+insert into t (id,a) values (901,43);
+insert into t (id,a) values (901,44);
+insert into t (id,a) values (901,45);
+insert into t (id,a) values (901,46);
+insert into t (id,a) values (901,47);
+insert into t (id,a) values (901,48);
+insert into t (id,a) values (901,49);
+insert into t (id,a) values (901,50);
+insert into t (id,a) values (901,51);
+insert into t (id,a) values (901,52);
+insert into t (id,a) values (901,53);
+insert into t (id,a) values (901,54);
+insert into t (id,a) values (901,55);
+insert into t (id,a) values (901,56);
+insert into t (id,a) values (901,57);
+insert into t (id,a) values (901,58);
+insert into t (id,a) values (901,59);
+insert into t (id,a) values (901,60);
+insert into t (id,a) values (901,61);
+insert into t (id,a) values (901,62);
+insert into t (id,a) values (901,63);
+insert into t (id,a) values (901,64);
+insert into t (id,a) values (901,65);
+insert into t (id,a) values (901,66);
+insert into t (id,a) values (901,67);
+insert into t (id,a) values (901,68);
+insert into t (id,a) values (901,69);
+insert into t (id,a) values (901,70);
+insert into t (id,a) values (901,71);
+insert into t (id,a) values (901,72);
+insert into t (id,a) values (901,73);
+insert into t (id,a) values (901,74);
+insert into t (id,a) values (901,75);
+insert into t (id,a) values (901,76);
+insert into t (id,a) values (901,77);
+insert into t (id,a) values (901,78);
+insert into t (id,a) values (901,79);
+insert into t (id,a) values (901,80);
+insert into t (id,a) values (901,81);
+insert into t (id,a) values (901,82);
+insert into t (id,a) values (901,83);
+insert into t (id,a) values (901,84);
+insert into t (id,a) values (901,85);
+insert into t (id,a) values (901,86);
+insert into t (id,a) values (901,87);
+insert into t (id,a) values (901,88);
+insert into t (id,a) values (901,89);
+insert into t (id,a) values (901,90);
+insert into t (id,a) values (901,91);
+insert into t (id,a) values (901,92);
+insert into t (id,a) values (901,93);
+insert into t (id,a) values (901,94);
+insert into t (id,a) values (901,95);
+insert into t (id,a) values (901,96);
+insert into t (id,a) values (901,97);
+insert into t (id,a) values (901,98);
+insert into t (id,a) values (901,99);
+insert into t (id,a) values (902,0);
+insert into t (id,a) values (902,1);
+insert into t (id,a) values (902,2);
+insert into t (id,a) values (902,3);
+insert into t (id,a) values (902,4);
+insert into t (id,a) values (902,5);
+insert into t (id,a) values (902,6);
+insert into t (id,a) values (902,7);
+insert into t (id,a) values (902,8);
+insert into t (id,a) values (902,9);
+insert into t (id,a) values (902,10);
+insert into t (id,a) values (902,11);
+insert into t (id,a) values (902,12);
+insert into t (id,a) values (902,13);
+insert into t (id,a) values (902,14);
+insert into t (id,a) values (902,15);
+insert into t (id,a) values (902,16);
+insert into t (id,a) values (902,17);
+insert into t (id,a) values (902,18);
+insert into t (id,a) values (902,19);
+insert into t (id,a) values (902,20);
+insert into t (id,a) values (902,21);
+insert into t (id,a) values (902,22);
+insert into t (id,a) values (902,23);
+insert into t (id,a) values (902,24);
+insert into t (id,a) values (902,25);
+insert into t (id,a) values (902,26);
+insert into t (id,a) values (902,27);
+insert into t (id,a) values (902,28);
+insert into t (id,a) values (902,29);
+insert into t (id,a) values (902,30);
+insert into t (id,a) values (902,31);
+insert into t (id,a) values (902,32);
+insert into t (id,a) values (902,33);
+insert into t (id,a) values (902,34);
+insert into t (id,a) values (902,35);
+insert into t (id,a) values (902,36);
+insert into t (id,a) values (902,37);
+insert into t (id,a) values (902,38);
+insert into t (id,a) values (902,39);
+insert into t (id,a) values (902,40);
+insert into t (id,a) values (902,41);
+insert into t (id,a) values (902,42);
+insert into t (id,a) values (902,43);
+insert into t (id,a) values (902,44);
+insert into t (id,a) values (902,45);
+insert into t (id,a) values (902,46);
+insert into t (id,a) values (902,47);
+insert into t (id,a) values (902,48);
+insert into t (id,a) values (902,49);
+insert into t (id,a) values (902,50);
+insert into t (id,a) values (902,51);
+insert into t (id,a) values (902,52);
+insert into t (id,a) values (902,53);
+insert into t (id,a) values (902,54);
+insert into t (id,a) values (902,55);
+insert into t (id,a) values (902,56);
+insert into t (id,a) values (902,57);
+insert into t (id,a) values (902,58);
+insert into t (id,a) values (902,59);
+insert into t (id,a) values (902,60);
+insert into t (id,a) values (902,61);
+insert into t (id,a) values (902,62);
+insert into t (id,a) values (902,63);
+insert into t (id,a) values (902,64);
+insert into t (id,a) values (902,65);
+insert into t (id,a) values (902,66);
+insert into t (id,a) values (902,67);
+insert into t (id,a) values (902,68);
+insert into t (id,a) values (902,69);
+insert into t (id,a) values (902,70);
+insert into t (id,a) values (902,71);
+insert into t (id,a) values (902,72);
+insert into t (id,a) values (902,73);
+insert into t (id,a) values (902,74);
+insert into t (id,a) values (902,75);
+insert into t (id,a) values (902,76);
+insert into t (id,a) values (902,77);
+insert into t (id,a) values (902,78);
+insert into t (id,a) values (902,79);
+insert into t (id,a) values (902,80);
+insert into t (id,a) values (902,81);
+insert into t (id,a) values (902,82);
+insert into t (id,a) values (902,83);
+insert into t (id,a) values (902,84);
+insert into t (id,a) values (902,85);
+insert into t (id,a) values (902,86);
+insert into t (id,a) values (902,87);
+insert into t (id,a) values (902,88);
+insert into t (id,a) values (902,89);
+insert into t (id,a) values (902,90);
+insert into t (id,a) values (902,91);
+insert into t (id,a) values (902,92);
+insert into t (id,a) values (902,93);
+insert into t (id,a) values (902,94);
+insert into t (id,a) values (902,95);
+insert into t (id,a) values (902,96);
+insert into t (id,a) values (902,97);
+insert into t (id,a) values (902,98);
+insert into t (id,a) values (902,99);
+insert into t (id,a) values (903,0);
+insert into t (id,a) values (903,1);
+insert into t (id,a) values (903,2);
+insert into t (id,a) values (903,3);
+insert into t (id,a) values (903,4);
+insert into t (id,a) values (903,5);
+insert into t (id,a) values (903,6);
+insert into t (id,a) values (903,7);
+insert into t (id,a) values (903,8);
+insert into t (id,a) values (903,9);
+insert into t (id,a) values (903,10);
+insert into t (id,a) values (903,11);
+insert into t (id,a) values (903,12);
+insert into t (id,a) values (903,13);
+insert into t (id,a) values (903,14);
+insert into t (id,a) values (903,15);
+insert into t (id,a) values (903,16);
+insert into t (id,a) values (903,17);
+insert into t (id,a) values (903,18);
+insert into t (id,a) values (903,19);
+insert into t (id,a) values (903,20);
+insert into t (id,a) values (903,21);
+insert into t (id,a) values (903,22);
+insert into t (id,a) values (903,23);
+insert into t (id,a) values (903,24);
+insert into t (id,a) values (903,25);
+insert into t (id,a) values (903,26);
+insert into t (id,a) values (903,27);
+insert into t (id,a) values (903,28);
+insert into t (id,a) values (903,29);
+insert into t (id,a) values (903,30);
+insert into t (id,a) values (903,31);
+insert into t (id,a) values (903,32);
+insert into t (id,a) values (903,33);
+insert into t (id,a) values (903,34);
+insert into t (id,a) values (903,35);
+insert into t (id,a) values (903,36);
+insert into t (id,a) values (903,37);
+insert into t (id,a) values (903,38);
+insert into t (id,a) values (903,39);
+insert into t (id,a) values (903,40);
+insert into t (id,a) values (903,41);
+insert into t (id,a) values (903,42);
+insert into t (id,a) values (903,43);
+insert into t (id,a) values (903,44);
+insert into t (id,a) values (903,45);
+insert into t (id,a) values (903,46);
+insert into t (id,a) values (903,47);
+insert into t (id,a) values (903,48);
+insert into t (id,a) values (903,49);
+insert into t (id,a) values (903,50);
+insert into t (id,a) values (903,51);
+insert into t (id,a) values (903,52);
+insert into t (id,a) values (903,53);
+insert into t (id,a) values (903,54);
+insert into t (id,a) values (903,55);
+insert into t (id,a) values (903,56);
+insert into t (id,a) values (903,57);
+insert into t (id,a) values (903,58);
+insert into t (id,a) values (903,59);
+insert into t (id,a) values (903,60);
+insert into t (id,a) values (903,61);
+insert into t (id,a) values (903,62);
+insert into t (id,a) values (903,63);
+insert into t (id,a) values (903,64);
+insert into t (id,a) values (903,65);
+insert into t (id,a) values (903,66);
+insert into t (id,a) values (903,67);
+insert into t (id,a) values (903,68);
+insert into t (id,a) values (903,69);
+insert into t (id,a) values (903,70);
+insert into t (id,a) values (903,71);
+insert into t (id,a) values (903,72);
+insert into t (id,a) values (903,73);
+insert into t (id,a) values (903,74);
+insert into t (id,a) values (903,75);
+insert into t (id,a) values (903,76);
+insert into t (id,a) values (903,77);
+insert into t (id,a) values (903,78);
+insert into t (id,a) values (903,79);
+insert into t (id,a) values (903,80);
+insert into t (id,a) values (903,81);
+insert into t (id,a) values (903,82);
+insert into t (id,a) values (903,83);
+insert into t (id,a) values (903,84);
+insert into t (id,a) values (903,85);
+insert into t (id,a) values (903,86);
+insert into t (id,a) values (903,87);
+insert into t (id,a) values (903,88);
+insert into t (id,a) values (903,89);
+insert into t (id,a) values (903,90);
+insert into t (id,a) values (903,91);
+insert into t (id,a) values (903,92);
+insert into t (id,a) values (903,93);
+insert into t (id,a) values (903,94);
+insert into t (id,a) values (903,95);
+insert into t (id,a) values (903,96);
+insert into t (id,a) values (903,97);
+insert into t (id,a) values (903,98);
+insert into t (id,a) values (903,99);
+insert into t (id,a) values (904,0);
+insert into t (id,a) values (904,1);
+insert into t (id,a) values (904,2);
+insert into t (id,a) values (904,3);
+insert into t (id,a) values (904,4);
+insert into t (id,a) values (904,5);
+insert into t (id,a) values (904,6);
+insert into t (id,a) values (904,7);
+insert into t (id,a) values (904,8);
+insert into t (id,a) values (904,9);
+insert into t (id,a) values (904,10);
+insert into t (id,a) values (904,11);
+insert into t (id,a) values (904,12);
+insert into t (id,a) values (904,13);
+insert into t (id,a) values (904,14);
+insert into t (id,a) values (904,15);
+insert into t (id,a) values (904,16);
+insert into t (id,a) values (904,17);
+insert into t (id,a) values (904,18);
+insert into t (id,a) values (904,19);
+insert into t (id,a) values (904,20);
+insert into t (id,a) values (904,21);
+insert into t (id,a) values (904,22);
+insert into t (id,a) values (904,23);
+insert into t (id,a) values (904,24);
+insert into t (id,a) values (904,25);
+insert into t (id,a) values (904,26);
+insert into t (id,a) values (904,27);
+insert into t (id,a) values (904,28);
+insert into t (id,a) values (904,29);
+insert into t (id,a) values (904,30);
+insert into t (id,a) values (904,31);
+insert into t (id,a) values (904,32);
+insert into t (id,a) values (904,33);
+insert into t (id,a) values (904,34);
+insert into t (id,a) values (904,35);
+insert into t (id,a) values (904,36);
+insert into t (id,a) values (904,37);
+insert into t (id,a) values (904,38);
+insert into t (id,a) values (904,39);
+insert into t (id,a) values (904,40);
+insert into t (id,a) values (904,41);
+insert into t (id,a) values (904,42);
+insert into t (id,a) values (904,43);
+insert into t (id,a) values (904,44);
+insert into t (id,a) values (904,45);
+insert into t (id,a) values (904,46);
+insert into t (id,a) values (904,47);
+insert into t (id,a) values (904,48);
+insert into t (id,a) values (904,49);
+insert into t (id,a) values (904,50);
+insert into t (id,a) values (904,51);
+insert into t (id,a) values (904,52);
+insert into t (id,a) values (904,53);
+insert into t (id,a) values (904,54);
+insert into t (id,a) values (904,55);
+insert into t (id,a) values (904,56);
+insert into t (id,a) values (904,57);
+insert into t (id,a) values (904,58);
+insert into t (id,a) values (904,59);
+insert into t (id,a) values (904,60);
+insert into t (id,a) values (904,61);
+insert into t (id,a) values (904,62);
+insert into t (id,a) values (904,63);
+insert into t (id,a) values (904,64);
+insert into t (id,a) values (904,65);
+insert into t (id,a) values (904,66);
+insert into t (id,a) values (904,67);
+insert into t (id,a) values (904,68);
+insert into t (id,a) values (904,69);
+insert into t (id,a) values (904,70);
+insert into t (id,a) values (904,71);
+insert into t (id,a) values (904,72);
+insert into t (id,a) values (904,73);
+insert into t (id,a) values (904,74);
+insert into t (id,a) values (904,75);
+insert into t (id,a) values (904,76);
+insert into t (id,a) values (904,77);
+insert into t (id,a) values (904,78);
+insert into t (id,a) values (904,79);
+insert into t (id,a) values (904,80);
+insert into t (id,a) values (904,81);
+insert into t (id,a) values (904,82);
+insert into t (id,a) values (904,83);
+insert into t (id,a) values (904,84);
+insert into t (id,a) values (904,85);
+insert into t (id,a) values (904,86);
+insert into t (id,a) values (904,87);
+insert into t (id,a) values (904,88);
+insert into t (id,a) values (904,89);
+insert into t (id,a) values (904,90);
+insert into t (id,a) values (904,91);
+insert into t (id,a) values (904,92);
+insert into t (id,a) values (904,93);
+insert into t (id,a) values (904,94);
+insert into t (id,a) values (904,95);
+insert into t (id,a) values (904,96);
+insert into t (id,a) values (904,97);
+insert into t (id,a) values (904,98);
+insert into t (id,a) values (904,99);
+insert into t (id,a) values (905,0);
+insert into t (id,a) values (905,1);
+insert into t (id,a) values (905,2);
+insert into t (id,a) values (905,3);
+insert into t (id,a) values (905,4);
+insert into t (id,a) values (905,5);
+insert into t (id,a) values (905,6);
+insert into t (id,a) values (905,7);
+insert into t (id,a) values (905,8);
+insert into t (id,a) values (905,9);
+insert into t (id,a) values (905,10);
+insert into t (id,a) values (905,11);
+insert into t (id,a) values (905,12);
+insert into t (id,a) values (905,13);
+insert into t (id,a) values (905,14);
+insert into t (id,a) values (905,15);
+insert into t (id,a) values (905,16);
+insert into t (id,a) values (905,17);
+insert into t (id,a) values (905,18);
+insert into t (id,a) values (905,19);
+insert into t (id,a) values (905,20);
+insert into t (id,a) values (905,21);
+insert into t (id,a) values (905,22);
+insert into t (id,a) values (905,23);
+insert into t (id,a) values (905,24);
+insert into t (id,a) values (905,25);
+insert into t (id,a) values (905,26);
+insert into t (id,a) values (905,27);
+insert into t (id,a) values (905,28);
+insert into t (id,a) values (905,29);
+insert into t (id,a) values (905,30);
+insert into t (id,a) values (905,31);
+insert into t (id,a) values (905,32);
+insert into t (id,a) values (905,33);
+insert into t (id,a) values (905,34);
+insert into t (id,a) values (905,35);
+insert into t (id,a) values (905,36);
+insert into t (id,a) values (905,37);
+insert into t (id,a) values (905,38);
+insert into t (id,a) values (905,39);
+insert into t (id,a) values (905,40);
+insert into t (id,a) values (905,41);
+insert into t (id,a) values (905,42);
+insert into t (id,a) values (905,43);
+insert into t (id,a) values (905,44);
+insert into t (id,a) values (905,45);
+insert into t (id,a) values (905,46);
+insert into t (id,a) values (905,47);
+insert into t (id,a) values (905,48);
+insert into t (id,a) values (905,49);
+insert into t (id,a) values (905,50);
+insert into t (id,a) values (905,51);
+insert into t (id,a) values (905,52);
+insert into t (id,a) values (905,53);
+insert into t (id,a) values (905,54);
+insert into t (id,a) values (905,55);
+insert into t (id,a) values (905,56);
+insert into t (id,a) values (905,57);
+insert into t (id,a) values (905,58);
+insert into t (id,a) values (905,59);
+insert into t (id,a) values (905,60);
+insert into t (id,a) values (905,61);
+insert into t (id,a) values (905,62);
+insert into t (id,a) values (905,63);
+insert into t (id,a) values (905,64);
+insert into t (id,a) values (905,65);
+insert into t (id,a) values (905,66);
+insert into t (id,a) values (905,67);
+insert into t (id,a) values (905,68);
+insert into t (id,a) values (905,69);
+insert into t (id,a) values (905,70);
+insert into t (id,a) values (905,71);
+insert into t (id,a) values (905,72);
+insert into t (id,a) values (905,73);
+insert into t (id,a) values (905,74);
+insert into t (id,a) values (905,75);
+insert into t (id,a) values (905,76);
+insert into t (id,a) values (905,77);
+insert into t (id,a) values (905,78);
+insert into t (id,a) values (905,79);
+insert into t (id,a) values (905,80);
+insert into t (id,a) values (905,81);
+insert into t (id,a) values (905,82);
+insert into t (id,a) values (905,83);
+insert into t (id,a) values (905,84);
+insert into t (id,a) values (905,85);
+insert into t (id,a) values (905,86);
+insert into t (id,a) values (905,87);
+insert into t (id,a) values (905,88);
+insert into t (id,a) values (905,89);
+insert into t (id,a) values (905,90);
+insert into t (id,a) values (905,91);
+insert into t (id,a) values (905,92);
+insert into t (id,a) values (905,93);
+insert into t (id,a) values (905,94);
+insert into t (id,a) values (905,95);
+insert into t (id,a) values (905,96);
+insert into t (id,a) values (905,97);
+insert into t (id,a) values (905,98);
+insert into t (id,a) values (905,99);
+insert into t (id,a) values (906,0);
+insert into t (id,a) values (906,1);
+insert into t (id,a) values (906,2);
+insert into t (id,a) values (906,3);
+insert into t (id,a) values (906,4);
+insert into t (id,a) values (906,5);
+insert into t (id,a) values (906,6);
+insert into t (id,a) values (906,7);
+insert into t (id,a) values (906,8);
+insert into t (id,a) values (906,9);
+insert into t (id,a) values (906,10);
+insert into t (id,a) values (906,11);
+insert into t (id,a) values (906,12);
+insert into t (id,a) values (906,13);
+insert into t (id,a) values (906,14);
+insert into t (id,a) values (906,15);
+insert into t (id,a) values (906,16);
+insert into t (id,a) values (906,17);
+insert into t (id,a) values (906,18);
+insert into t (id,a) values (906,19);
+insert into t (id,a) values (906,20);
+insert into t (id,a) values (906,21);
+insert into t (id,a) values (906,22);
+insert into t (id,a) values (906,23);
+insert into t (id,a) values (906,24);
+insert into t (id,a) values (906,25);
+insert into t (id,a) values (906,26);
+insert into t (id,a) values (906,27);
+insert into t (id,a) values (906,28);
+insert into t (id,a) values (906,29);
+insert into t (id,a) values (906,30);
+insert into t (id,a) values (906,31);
+insert into t (id,a) values (906,32);
+insert into t (id,a) values (906,33);
+insert into t (id,a) values (906,34);
+insert into t (id,a) values (906,35);
+insert into t (id,a) values (906,36);
+insert into t (id,a) values (906,37);
+insert into t (id,a) values (906,38);
+insert into t (id,a) values (906,39);
+insert into t (id,a) values (906,40);
+insert into t (id,a) values (906,41);
+insert into t (id,a) values (906,42);
+insert into t (id,a) values (906,43);
+insert into t (id,a) values (906,44);
+insert into t (id,a) values (906,45);
+insert into t (id,a) values (906,46);
+insert into t (id,a) values (906,47);
+insert into t (id,a) values (906,48);
+insert into t (id,a) values (906,49);
+insert into t (id,a) values (906,50);
+insert into t (id,a) values (906,51);
+insert into t (id,a) values (906,52);
+insert into t (id,a) values (906,53);
+insert into t (id,a) values (906,54);
+insert into t (id,a) values (906,55);
+insert into t (id,a) values (906,56);
+insert into t (id,a) values (906,57);
+insert into t (id,a) values (906,58);
+insert into t (id,a) values (906,59);
+insert into t (id,a) values (906,60);
+insert into t (id,a) values (906,61);
+insert into t (id,a) values (906,62);
+insert into t (id,a) values (906,63);
+insert into t (id,a) values (906,64);
+insert into t (id,a) values (906,65);
+insert into t (id,a) values (906,66);
+insert into t (id,a) values (906,67);
+insert into t (id,a) values (906,68);
+insert into t (id,a) values (906,69);
+insert into t (id,a) values (906,70);
+insert into t (id,a) values (906,71);
+insert into t (id,a) values (906,72);
+insert into t (id,a) values (906,73);
+insert into t (id,a) values (906,74);
+insert into t (id,a) values (906,75);
+insert into t (id,a) values (906,76);
+insert into t (id,a) values (906,77);
+insert into t (id,a) values (906,78);
+insert into t (id,a) values (906,79);
+insert into t (id,a) values (906,80);
+insert into t (id,a) values (906,81);
+insert into t (id,a) values (906,82);
+insert into t (id,a) values (906,83);
+insert into t (id,a) values (906,84);
+insert into t (id,a) values (906,85);
+insert into t (id,a) values (906,86);
+insert into t (id,a) values (906,87);
+insert into t (id,a) values (906,88);
+insert into t (id,a) values (906,89);
+insert into t (id,a) values (906,90);
+insert into t (id,a) values (906,91);
+insert into t (id,a) values (906,92);
+insert into t (id,a) values (906,93);
+insert into t (id,a) values (906,94);
+insert into t (id,a) values (906,95);
+insert into t (id,a) values (906,96);
+insert into t (id,a) values (906,97);
+insert into t (id,a) values (906,98);
+insert into t (id,a) values (906,99);
+insert into t (id,a) values (907,0);
+insert into t (id,a) values (907,1);
+insert into t (id,a) values (907,2);
+insert into t (id,a) values (907,3);
+insert into t (id,a) values (907,4);
+insert into t (id,a) values (907,5);
+insert into t (id,a) values (907,6);
+insert into t (id,a) values (907,7);
+insert into t (id,a) values (907,8);
+insert into t (id,a) values (907,9);
+insert into t (id,a) values (907,10);
+insert into t (id,a) values (907,11);
+insert into t (id,a) values (907,12);
+insert into t (id,a) values (907,13);
+insert into t (id,a) values (907,14);
+insert into t (id,a) values (907,15);
+insert into t (id,a) values (907,16);
+insert into t (id,a) values (907,17);
+insert into t (id,a) values (907,18);
+insert into t (id,a) values (907,19);
+insert into t (id,a) values (907,20);
+insert into t (id,a) values (907,21);
+insert into t (id,a) values (907,22);
+insert into t (id,a) values (907,23);
+insert into t (id,a) values (907,24);
+insert into t (id,a) values (907,25);
+insert into t (id,a) values (907,26);
+insert into t (id,a) values (907,27);
+insert into t (id,a) values (907,28);
+insert into t (id,a) values (907,29);
+insert into t (id,a) values (907,30);
+insert into t (id,a) values (907,31);
+insert into t (id,a) values (907,32);
+insert into t (id,a) values (907,33);
+insert into t (id,a) values (907,34);
+insert into t (id,a) values (907,35);
+insert into t (id,a) values (907,36);
+insert into t (id,a) values (907,37);
+insert into t (id,a) values (907,38);
+insert into t (id,a) values (907,39);
+insert into t (id,a) values (907,40);
+insert into t (id,a) values (907,41);
+insert into t (id,a) values (907,42);
+insert into t (id,a) values (907,43);
+insert into t (id,a) values (907,44);
+insert into t (id,a) values (907,45);
+insert into t (id,a) values (907,46);
+insert into t (id,a) values (907,47);
+insert into t (id,a) values (907,48);
+insert into t (id,a) values (907,49);
+insert into t (id,a) values (907,50);
+insert into t (id,a) values (907,51);
+insert into t (id,a) values (907,52);
+insert into t (id,a) values (907,53);
+insert into t (id,a) values (907,54);
+insert into t (id,a) values (907,55);
+insert into t (id,a) values (907,56);
+insert into t (id,a) values (907,57);
+insert into t (id,a) values (907,58);
+insert into t (id,a) values (907,59);
+insert into t (id,a) values (907,60);
+insert into t (id,a) values (907,61);
+insert into t (id,a) values (907,62);
+insert into t (id,a) values (907,63);
+insert into t (id,a) values (907,64);
+insert into t (id,a) values (907,65);
+insert into t (id,a) values (907,66);
+insert into t (id,a) values (907,67);
+insert into t (id,a) values (907,68);
+insert into t (id,a) values (907,69);
+insert into t (id,a) values (907,70);
+insert into t (id,a) values (907,71);
+insert into t (id,a) values (907,72);
+insert into t (id,a) values (907,73);
+insert into t (id,a) values (907,74);
+insert into t (id,a) values (907,75);
+insert into t (id,a) values (907,76);
+insert into t (id,a) values (907,77);
+insert into t (id,a) values (907,78);
+insert into t (id,a) values (907,79);
+insert into t (id,a) values (907,80);
+insert into t (id,a) values (907,81);
+insert into t (id,a) values (907,82);
+insert into t (id,a) values (907,83);
+insert into t (id,a) values (907,84);
+insert into t (id,a) values (907,85);
+insert into t (id,a) values (907,86);
+insert into t (id,a) values (907,87);
+insert into t (id,a) values (907,88);
+insert into t (id,a) values (907,89);
+insert into t (id,a) values (907,90);
+insert into t (id,a) values (907,91);
+insert into t (id,a) values (907,92);
+insert into t (id,a) values (907,93);
+insert into t (id,a) values (907,94);
+insert into t (id,a) values (907,95);
+insert into t (id,a) values (907,96);
+insert into t (id,a) values (907,97);
+insert into t (id,a) values (907,98);
+insert into t (id,a) values (907,99);
+insert into t (id,a) values (908,0);
+insert into t (id,a) values (908,1);
+insert into t (id,a) values (908,2);
+insert into t (id,a) values (908,3);
+insert into t (id,a) values (908,4);
+insert into t (id,a) values (908,5);
+insert into t (id,a) values (908,6);
+insert into t (id,a) values (908,7);
+insert into t (id,a) values (908,8);
+insert into t (id,a) values (908,9);
+insert into t (id,a) values (908,10);
+insert into t (id,a) values (908,11);
+insert into t (id,a) values (908,12);
+insert into t (id,a) values (908,13);
+insert into t (id,a) values (908,14);
+insert into t (id,a) values (908,15);
+insert into t (id,a) values (908,16);
+insert into t (id,a) values (908,17);
+insert into t (id,a) values (908,18);
+insert into t (id,a) values (908,19);
+insert into t (id,a) values (908,20);
+insert into t (id,a) values (908,21);
+insert into t (id,a) values (908,22);
+insert into t (id,a) values (908,23);
+insert into t (id,a) values (908,24);
+insert into t (id,a) values (908,25);
+insert into t (id,a) values (908,26);
+insert into t (id,a) values (908,27);
+insert into t (id,a) values (908,28);
+insert into t (id,a) values (908,29);
+insert into t (id,a) values (908,30);
+insert into t (id,a) values (908,31);
+insert into t (id,a) values (908,32);
+insert into t (id,a) values (908,33);
+insert into t (id,a) values (908,34);
+insert into t (id,a) values (908,35);
+insert into t (id,a) values (908,36);
+insert into t (id,a) values (908,37);
+insert into t (id,a) values (908,38);
+insert into t (id,a) values (908,39);
+insert into t (id,a) values (908,40);
+insert into t (id,a) values (908,41);
+insert into t (id,a) values (908,42);
+insert into t (id,a) values (908,43);
+insert into t (id,a) values (908,44);
+insert into t (id,a) values (908,45);
+insert into t (id,a) values (908,46);
+insert into t (id,a) values (908,47);
+insert into t (id,a) values (908,48);
+insert into t (id,a) values (908,49);
+insert into t (id,a) values (908,50);
+insert into t (id,a) values (908,51);
+insert into t (id,a) values (908,52);
+insert into t (id,a) values (908,53);
+insert into t (id,a) values (908,54);
+insert into t (id,a) values (908,55);
+insert into t (id,a) values (908,56);
+insert into t (id,a) values (908,57);
+insert into t (id,a) values (908,58);
+insert into t (id,a) values (908,59);
+insert into t (id,a) values (908,60);
+insert into t (id,a) values (908,61);
+insert into t (id,a) values (908,62);
+insert into t (id,a) values (908,63);
+insert into t (id,a) values (908,64);
+insert into t (id,a) values (908,65);
+insert into t (id,a) values (908,66);
+insert into t (id,a) values (908,67);
+insert into t (id,a) values (908,68);
+insert into t (id,a) values (908,69);
+insert into t (id,a) values (908,70);
+insert into t (id,a) values (908,71);
+insert into t (id,a) values (908,72);
+insert into t (id,a) values (908,73);
+insert into t (id,a) values (908,74);
+insert into t (id,a) values (908,75);
+insert into t (id,a) values (908,76);
+insert into t (id,a) values (908,77);
+insert into t (id,a) values (908,78);
+insert into t (id,a) values (908,79);
+insert into t (id,a) values (908,80);
+insert into t (id,a) values (908,81);
+insert into t (id,a) values (908,82);
+insert into t (id,a) values (908,83);
+insert into t (id,a) values (908,84);
+insert into t (id,a) values (908,85);
+insert into t (id,a) values (908,86);
+insert into t (id,a) values (908,87);
+insert into t (id,a) values (908,88);
+insert into t (id,a) values (908,89);
+insert into t (id,a) values (908,90);
+insert into t (id,a) values (908,91);
+insert into t (id,a) values (908,92);
+insert into t (id,a) values (908,93);
+insert into t (id,a) values (908,94);
+insert into t (id,a) values (908,95);
+insert into t (id,a) values (908,96);
+insert into t (id,a) values (908,97);
+insert into t (id,a) values (908,98);
+insert into t (id,a) values (908,99);
+insert into t (id,a) values (909,0);
+insert into t (id,a) values (909,1);
+insert into t (id,a) values (909,2);
+insert into t (id,a) values (909,3);
+insert into t (id,a) values (909,4);
+insert into t (id,a) values (909,5);
+insert into t (id,a) values (909,6);
+insert into t (id,a) values (909,7);
+insert into t (id,a) values (909,8);
+insert into t (id,a) values (909,9);
+insert into t (id,a) values (909,10);
+insert into t (id,a) values (909,11);
+insert into t (id,a) values (909,12);
+insert into t (id,a) values (909,13);
+insert into t (id,a) values (909,14);
+insert into t (id,a) values (909,15);
+insert into t (id,a) values (909,16);
+insert into t (id,a) values (909,17);
+insert into t (id,a) values (909,18);
+insert into t (id,a) values (909,19);
+insert into t (id,a) values (909,20);
+insert into t (id,a) values (909,21);
+insert into t (id,a) values (909,22);
+insert into t (id,a) values (909,23);
+insert into t (id,a) values (909,24);
+insert into t (id,a) values (909,25);
+insert into t (id,a) values (909,26);
+insert into t (id,a) values (909,27);
+insert into t (id,a) values (909,28);
+insert into t (id,a) values (909,29);
+insert into t (id,a) values (909,30);
+insert into t (id,a) values (909,31);
+insert into t (id,a) values (909,32);
+insert into t (id,a) values (909,33);
+insert into t (id,a) values (909,34);
+insert into t (id,a) values (909,35);
+insert into t (id,a) values (909,36);
+insert into t (id,a) values (909,37);
+insert into t (id,a) values (909,38);
+insert into t (id,a) values (909,39);
+insert into t (id,a) values (909,40);
+insert into t (id,a) values (909,41);
+insert into t (id,a) values (909,42);
+insert into t (id,a) values (909,43);
+insert into t (id,a) values (909,44);
+insert into t (id,a) values (909,45);
+insert into t (id,a) values (909,46);
+insert into t (id,a) values (909,47);
+insert into t (id,a) values (909,48);
+insert into t (id,a) values (909,49);
+insert into t (id,a) values (909,50);
+insert into t (id,a) values (909,51);
+insert into t (id,a) values (909,52);
+insert into t (id,a) values (909,53);
+insert into t (id,a) values (909,54);
+insert into t (id,a) values (909,55);
+insert into t (id,a) values (909,56);
+insert into t (id,a) values (909,57);
+insert into t (id,a) values (909,58);
+insert into t (id,a) values (909,59);
+insert into t (id,a) values (909,60);
+insert into t (id,a) values (909,61);
+insert into t (id,a) values (909,62);
+insert into t (id,a) values (909,63);
+insert into t (id,a) values (909,64);
+insert into t (id,a) values (909,65);
+insert into t (id,a) values (909,66);
+insert into t (id,a) values (909,67);
+insert into t (id,a) values (909,68);
+insert into t (id,a) values (909,69);
+insert into t (id,a) values (909,70);
+insert into t (id,a) values (909,71);
+insert into t (id,a) values (909,72);
+insert into t (id,a) values (909,73);
+insert into t (id,a) values (909,74);
+insert into t (id,a) values (909,75);
+insert into t (id,a) values (909,76);
+insert into t (id,a) values (909,77);
+insert into t (id,a) values (909,78);
+insert into t (id,a) values (909,79);
+insert into t (id,a) values (909,80);
+insert into t (id,a) values (909,81);
+insert into t (id,a) values (909,82);
+insert into t (id,a) values (909,83);
+insert into t (id,a) values (909,84);
+insert into t (id,a) values (909,85);
+insert into t (id,a) values (909,86);
+insert into t (id,a) values (909,87);
+insert into t (id,a) values (909,88);
+insert into t (id,a) values (909,89);
+insert into t (id,a) values (909,90);
+insert into t (id,a) values (909,91);
+insert into t (id,a) values (909,92);
+insert into t (id,a) values (909,93);
+insert into t (id,a) values (909,94);
+insert into t (id,a) values (909,95);
+insert into t (id,a) values (909,96);
+insert into t (id,a) values (909,97);
+insert into t (id,a) values (909,98);
+insert into t (id,a) values (909,99);
+insert into t (id,a) values (910,0);
+insert into t (id,a) values (910,1);
+insert into t (id,a) values (910,2);
+insert into t (id,a) values (910,3);
+insert into t (id,a) values (910,4);
+insert into t (id,a) values (910,5);
+insert into t (id,a) values (910,6);
+insert into t (id,a) values (910,7);
+insert into t (id,a) values (910,8);
+insert into t (id,a) values (910,9);
+insert into t (id,a) values (910,10);
+insert into t (id,a) values (910,11);
+insert into t (id,a) values (910,12);
+insert into t (id,a) values (910,13);
+insert into t (id,a) values (910,14);
+insert into t (id,a) values (910,15);
+insert into t (id,a) values (910,16);
+insert into t (id,a) values (910,17);
+insert into t (id,a) values (910,18);
+insert into t (id,a) values (910,19);
+insert into t (id,a) values (910,20);
+insert into t (id,a) values (910,21);
+insert into t (id,a) values (910,22);
+insert into t (id,a) values (910,23);
+insert into t (id,a) values (910,24);
+insert into t (id,a) values (910,25);
+insert into t (id,a) values (910,26);
+insert into t (id,a) values (910,27);
+insert into t (id,a) values (910,28);
+insert into t (id,a) values (910,29);
+insert into t (id,a) values (910,30);
+insert into t (id,a) values (910,31);
+insert into t (id,a) values (910,32);
+insert into t (id,a) values (910,33);
+insert into t (id,a) values (910,34);
+insert into t (id,a) values (910,35);
+insert into t (id,a) values (910,36);
+insert into t (id,a) values (910,37);
+insert into t (id,a) values (910,38);
+insert into t (id,a) values (910,39);
+insert into t (id,a) values (910,40);
+insert into t (id,a) values (910,41);
+insert into t (id,a) values (910,42);
+insert into t (id,a) values (910,43);
+insert into t (id,a) values (910,44);
+insert into t (id,a) values (910,45);
+insert into t (id,a) values (910,46);
+insert into t (id,a) values (910,47);
+insert into t (id,a) values (910,48);
+insert into t (id,a) values (910,49);
+insert into t (id,a) values (910,50);
+insert into t (id,a) values (910,51);
+insert into t (id,a) values (910,52);
+insert into t (id,a) values (910,53);
+insert into t (id,a) values (910,54);
+insert into t (id,a) values (910,55);
+insert into t (id,a) values (910,56);
+insert into t (id,a) values (910,57);
+insert into t (id,a) values (910,58);
+insert into t (id,a) values (910,59);
+insert into t (id,a) values (910,60);
+insert into t (id,a) values (910,61);
+insert into t (id,a) values (910,62);
+insert into t (id,a) values (910,63);
+insert into t (id,a) values (910,64);
+insert into t (id,a) values (910,65);
+insert into t (id,a) values (910,66);
+insert into t (id,a) values (910,67);
+insert into t (id,a) values (910,68);
+insert into t (id,a) values (910,69);
+insert into t (id,a) values (910,70);
+insert into t (id,a) values (910,71);
+insert into t (id,a) values (910,72);
+insert into t (id,a) values (910,73);
+insert into t (id,a) values (910,74);
+insert into t (id,a) values (910,75);
+insert into t (id,a) values (910,76);
+insert into t (id,a) values (910,77);
+insert into t (id,a) values (910,78);
+insert into t (id,a) values (910,79);
+insert into t (id,a) values (910,80);
+insert into t (id,a) values (910,81);
+insert into t (id,a) values (910,82);
+insert into t (id,a) values (910,83);
+insert into t (id,a) values (910,84);
+insert into t (id,a) values (910,85);
+insert into t (id,a) values (910,86);
+insert into t (id,a) values (910,87);
+insert into t (id,a) values (910,88);
+insert into t (id,a) values (910,89);
+insert into t (id,a) values (910,90);
+insert into t (id,a) values (910,91);
+insert into t (id,a) values (910,92);
+insert into t (id,a) values (910,93);
+insert into t (id,a) values (910,94);
+insert into t (id,a) values (910,95);
+insert into t (id,a) values (910,96);
+insert into t (id,a) values (910,97);
+insert into t (id,a) values (910,98);
+insert into t (id,a) values (910,99);
+insert into t (id,a) values (911,0);
+insert into t (id,a) values (911,1);
+insert into t (id,a) values (911,2);
+insert into t (id,a) values (911,3);
+insert into t (id,a) values (911,4);
+insert into t (id,a) values (911,5);
+insert into t (id,a) values (911,6);
+insert into t (id,a) values (911,7);
+insert into t (id,a) values (911,8);
+insert into t (id,a) values (911,9);
+insert into t (id,a) values (911,10);
+insert into t (id,a) values (911,11);
+insert into t (id,a) values (911,12);
+insert into t (id,a) values (911,13);
+insert into t (id,a) values (911,14);
+insert into t (id,a) values (911,15);
+insert into t (id,a) values (911,16);
+insert into t (id,a) values (911,17);
+insert into t (id,a) values (911,18);
+insert into t (id,a) values (911,19);
+insert into t (id,a) values (911,20);
+insert into t (id,a) values (911,21);
+insert into t (id,a) values (911,22);
+insert into t (id,a) values (911,23);
+insert into t (id,a) values (911,24);
+insert into t (id,a) values (911,25);
+insert into t (id,a) values (911,26);
+insert into t (id,a) values (911,27);
+insert into t (id,a) values (911,28);
+insert into t (id,a) values (911,29);
+insert into t (id,a) values (911,30);
+insert into t (id,a) values (911,31);
+insert into t (id,a) values (911,32);
+insert into t (id,a) values (911,33);
+insert into t (id,a) values (911,34);
+insert into t (id,a) values (911,35);
+insert into t (id,a) values (911,36);
+insert into t (id,a) values (911,37);
+insert into t (id,a) values (911,38);
+insert into t (id,a) values (911,39);
+insert into t (id,a) values (911,40);
+insert into t (id,a) values (911,41);
+insert into t (id,a) values (911,42);
+insert into t (id,a) values (911,43);
+insert into t (id,a) values (911,44);
+insert into t (id,a) values (911,45);
+insert into t (id,a) values (911,46);
+insert into t (id,a) values (911,47);
+insert into t (id,a) values (911,48);
+insert into t (id,a) values (911,49);
+insert into t (id,a) values (911,50);
+insert into t (id,a) values (911,51);
+insert into t (id,a) values (911,52);
+insert into t (id,a) values (911,53);
+insert into t (id,a) values (911,54);
+insert into t (id,a) values (911,55);
+insert into t (id,a) values (911,56);
+insert into t (id,a) values (911,57);
+insert into t (id,a) values (911,58);
+insert into t (id,a) values (911,59);
+insert into t (id,a) values (911,60);
+insert into t (id,a) values (911,61);
+insert into t (id,a) values (911,62);
+insert into t (id,a) values (911,63);
+insert into t (id,a) values (911,64);
+insert into t (id,a) values (911,65);
+insert into t (id,a) values (911,66);
+insert into t (id,a) values (911,67);
+insert into t (id,a) values (911,68);
+insert into t (id,a) values (911,69);
+insert into t (id,a) values (911,70);
+insert into t (id,a) values (911,71);
+insert into t (id,a) values (911,72);
+insert into t (id,a) values (911,73);
+insert into t (id,a) values (911,74);
+insert into t (id,a) values (911,75);
+insert into t (id,a) values (911,76);
+insert into t (id,a) values (911,77);
+insert into t (id,a) values (911,78);
+insert into t (id,a) values (911,79);
+insert into t (id,a) values (911,80);
+insert into t (id,a) values (911,81);
+insert into t (id,a) values (911,82);
+insert into t (id,a) values (911,83);
+insert into t (id,a) values (911,84);
+insert into t (id,a) values (911,85);
+insert into t (id,a) values (911,86);
+insert into t (id,a) values (911,87);
+insert into t (id,a) values (911,88);
+insert into t (id,a) values (911,89);
+insert into t (id,a) values (911,90);
+insert into t (id,a) values (911,91);
+insert into t (id,a) values (911,92);
+insert into t (id,a) values (911,93);
+insert into t (id,a) values (911,94);
+insert into t (id,a) values (911,95);
+insert into t (id,a) values (911,96);
+insert into t (id,a) values (911,97);
+insert into t (id,a) values (911,98);
+insert into t (id,a) values (911,99);
+insert into t (id,a) values (912,0);
+insert into t (id,a) values (912,1);
+insert into t (id,a) values (912,2);
+insert into t (id,a) values (912,3);
+insert into t (id,a) values (912,4);
+insert into t (id,a) values (912,5);
+insert into t (id,a) values (912,6);
+insert into t (id,a) values (912,7);
+insert into t (id,a) values (912,8);
+insert into t (id,a) values (912,9);
+insert into t (id,a) values (912,10);
+insert into t (id,a) values (912,11);
+insert into t (id,a) values (912,12);
+insert into t (id,a) values (912,13);
+insert into t (id,a) values (912,14);
+insert into t (id,a) values (912,15);
+insert into t (id,a) values (912,16);
+insert into t (id,a) values (912,17);
+insert into t (id,a) values (912,18);
+insert into t (id,a) values (912,19);
+insert into t (id,a) values (912,20);
+insert into t (id,a) values (912,21);
+insert into t (id,a) values (912,22);
+insert into t (id,a) values (912,23);
+insert into t (id,a) values (912,24);
+insert into t (id,a) values (912,25);
+insert into t (id,a) values (912,26);
+insert into t (id,a) values (912,27);
+insert into t (id,a) values (912,28);
+insert into t (id,a) values (912,29);
+insert into t (id,a) values (912,30);
+insert into t (id,a) values (912,31);
+insert into t (id,a) values (912,32);
+insert into t (id,a) values (912,33);
+insert into t (id,a) values (912,34);
+insert into t (id,a) values (912,35);
+insert into t (id,a) values (912,36);
+insert into t (id,a) values (912,37);
+insert into t (id,a) values (912,38);
+insert into t (id,a) values (912,39);
+insert into t (id,a) values (912,40);
+insert into t (id,a) values (912,41);
+insert into t (id,a) values (912,42);
+insert into t (id,a) values (912,43);
+insert into t (id,a) values (912,44);
+insert into t (id,a) values (912,45);
+insert into t (id,a) values (912,46);
+insert into t (id,a) values (912,47);
+insert into t (id,a) values (912,48);
+insert into t (id,a) values (912,49);
+insert into t (id,a) values (912,50);
+insert into t (id,a) values (912,51);
+insert into t (id,a) values (912,52);
+insert into t (id,a) values (912,53);
+insert into t (id,a) values (912,54);
+insert into t (id,a) values (912,55);
+insert into t (id,a) values (912,56);
+insert into t (id,a) values (912,57);
+insert into t (id,a) values (912,58);
+insert into t (id,a) values (912,59);
+insert into t (id,a) values (912,60);
+insert into t (id,a) values (912,61);
+insert into t (id,a) values (912,62);
+insert into t (id,a) values (912,63);
+insert into t (id,a) values (912,64);
+insert into t (id,a) values (912,65);
+insert into t (id,a) values (912,66);
+insert into t (id,a) values (912,67);
+insert into t (id,a) values (912,68);
+insert into t (id,a) values (912,69);
+insert into t (id,a) values (912,70);
+insert into t (id,a) values (912,71);
+insert into t (id,a) values (912,72);
+insert into t (id,a) values (912,73);
+insert into t (id,a) values (912,74);
+insert into t (id,a) values (912,75);
+insert into t (id,a) values (912,76);
+insert into t (id,a) values (912,77);
+insert into t (id,a) values (912,78);
+insert into t (id,a) values (912,79);
+insert into t (id,a) values (912,80);
+insert into t (id,a) values (912,81);
+insert into t (id,a) values (912,82);
+insert into t (id,a) values (912,83);
+insert into t (id,a) values (912,84);
+insert into t (id,a) values (912,85);
+insert into t (id,a) values (912,86);
+insert into t (id,a) values (912,87);
+insert into t (id,a) values (912,88);
+insert into t (id,a) values (912,89);
+insert into t (id,a) values (912,90);
+insert into t (id,a) values (912,91);
+insert into t (id,a) values (912,92);
+insert into t (id,a) values (912,93);
+insert into t (id,a) values (912,94);
+insert into t (id,a) values (912,95);
+insert into t (id,a) values (912,96);
+insert into t (id,a) values (912,97);
+insert into t (id,a) values (912,98);
+insert into t (id,a) values (912,99);
+insert into t (id,a) values (913,0);
+insert into t (id,a) values (913,1);
+insert into t (id,a) values (913,2);
+insert into t (id,a) values (913,3);
+insert into t (id,a) values (913,4);
+insert into t (id,a) values (913,5);
+insert into t (id,a) values (913,6);
+insert into t (id,a) values (913,7);
+insert into t (id,a) values (913,8);
+insert into t (id,a) values (913,9);
+insert into t (id,a) values (913,10);
+insert into t (id,a) values (913,11);
+insert into t (id,a) values (913,12);
+insert into t (id,a) values (913,13);
+insert into t (id,a) values (913,14);
+insert into t (id,a) values (913,15);
+insert into t (id,a) values (913,16);
+insert into t (id,a) values (913,17);
+insert into t (id,a) values (913,18);
+insert into t (id,a) values (913,19);
+insert into t (id,a) values (913,20);
+insert into t (id,a) values (913,21);
+insert into t (id,a) values (913,22);
+insert into t (id,a) values (913,23);
+insert into t (id,a) values (913,24);
+insert into t (id,a) values (913,25);
+insert into t (id,a) values (913,26);
+insert into t (id,a) values (913,27);
+insert into t (id,a) values (913,28);
+insert into t (id,a) values (913,29);
+insert into t (id,a) values (913,30);
+insert into t (id,a) values (913,31);
+insert into t (id,a) values (913,32);
+insert into t (id,a) values (913,33);
+insert into t (id,a) values (913,34);
+insert into t (id,a) values (913,35);
+insert into t (id,a) values (913,36);
+insert into t (id,a) values (913,37);
+insert into t (id,a) values (913,38);
+insert into t (id,a) values (913,39);
+insert into t (id,a) values (913,40);
+insert into t (id,a) values (913,41);
+insert into t (id,a) values (913,42);
+insert into t (id,a) values (913,43);
+insert into t (id,a) values (913,44);
+insert into t (id,a) values (913,45);
+insert into t (id,a) values (913,46);
+insert into t (id,a) values (913,47);
+insert into t (id,a) values (913,48);
+insert into t (id,a) values (913,49);
+insert into t (id,a) values (913,50);
+insert into t (id,a) values (913,51);
+insert into t (id,a) values (913,52);
+insert into t (id,a) values (913,53);
+insert into t (id,a) values (913,54);
+insert into t (id,a) values (913,55);
+insert into t (id,a) values (913,56);
+insert into t (id,a) values (913,57);
+insert into t (id,a) values (913,58);
+insert into t (id,a) values (913,59);
+insert into t (id,a) values (913,60);
+insert into t (id,a) values (913,61);
+insert into t (id,a) values (913,62);
+insert into t (id,a) values (913,63);
+insert into t (id,a) values (913,64);
+insert into t (id,a) values (913,65);
+insert into t (id,a) values (913,66);
+insert into t (id,a) values (913,67);
+insert into t (id,a) values (913,68);
+insert into t (id,a) values (913,69);
+insert into t (id,a) values (913,70);
+insert into t (id,a) values (913,71);
+insert into t (id,a) values (913,72);
+insert into t (id,a) values (913,73);
+insert into t (id,a) values (913,74);
+insert into t (id,a) values (913,75);
+insert into t (id,a) values (913,76);
+insert into t (id,a) values (913,77);
+insert into t (id,a) values (913,78);
+insert into t (id,a) values (913,79);
+insert into t (id,a) values (913,80);
+insert into t (id,a) values (913,81);
+insert into t (id,a) values (913,82);
+insert into t (id,a) values (913,83);
+insert into t (id,a) values (913,84);
+insert into t (id,a) values (913,85);
+insert into t (id,a) values (913,86);
+insert into t (id,a) values (913,87);
+insert into t (id,a) values (913,88);
+insert into t (id,a) values (913,89);
+insert into t (id,a) values (913,90);
+insert into t (id,a) values (913,91);
+insert into t (id,a) values (913,92);
+insert into t (id,a) values (913,93);
+insert into t (id,a) values (913,94);
+insert into t (id,a) values (913,95);
+insert into t (id,a) values (913,96);
+insert into t (id,a) values (913,97);
+insert into t (id,a) values (913,98);
+insert into t (id,a) values (913,99);
+insert into t (id,a) values (914,0);
+insert into t (id,a) values (914,1);
+insert into t (id,a) values (914,2);
+insert into t (id,a) values (914,3);
+insert into t (id,a) values (914,4);
+insert into t (id,a) values (914,5);
+insert into t (id,a) values (914,6);
+insert into t (id,a) values (914,7);
+insert into t (id,a) values (914,8);
+insert into t (id,a) values (914,9);
+insert into t (id,a) values (914,10);
+insert into t (id,a) values (914,11);
+insert into t (id,a) values (914,12);
+insert into t (id,a) values (914,13);
+insert into t (id,a) values (914,14);
+insert into t (id,a) values (914,15);
+insert into t (id,a) values (914,16);
+insert into t (id,a) values (914,17);
+insert into t (id,a) values (914,18);
+insert into t (id,a) values (914,19);
+insert into t (id,a) values (914,20);
+insert into t (id,a) values (914,21);
+insert into t (id,a) values (914,22);
+insert into t (id,a) values (914,23);
+insert into t (id,a) values (914,24);
+insert into t (id,a) values (914,25);
+insert into t (id,a) values (914,26);
+insert into t (id,a) values (914,27);
+insert into t (id,a) values (914,28);
+insert into t (id,a) values (914,29);
+insert into t (id,a) values (914,30);
+insert into t (id,a) values (914,31);
+insert into t (id,a) values (914,32);
+insert into t (id,a) values (914,33);
+insert into t (id,a) values (914,34);
+insert into t (id,a) values (914,35);
+insert into t (id,a) values (914,36);
+insert into t (id,a) values (914,37);
+insert into t (id,a) values (914,38);
+insert into t (id,a) values (914,39);
+insert into t (id,a) values (914,40);
+insert into t (id,a) values (914,41);
+insert into t (id,a) values (914,42);
+insert into t (id,a) values (914,43);
+insert into t (id,a) values (914,44);
+insert into t (id,a) values (914,45);
+insert into t (id,a) values (914,46);
+insert into t (id,a) values (914,47);
+insert into t (id,a) values (914,48);
+insert into t (id,a) values (914,49);
+insert into t (id,a) values (914,50);
+insert into t (id,a) values (914,51);
+insert into t (id,a) values (914,52);
+insert into t (id,a) values (914,53);
+insert into t (id,a) values (914,54);
+insert into t (id,a) values (914,55);
+insert into t (id,a) values (914,56);
+insert into t (id,a) values (914,57);
+insert into t (id,a) values (914,58);
+insert into t (id,a) values (914,59);
+insert into t (id,a) values (914,60);
+insert into t (id,a) values (914,61);
+insert into t (id,a) values (914,62);
+insert into t (id,a) values (914,63);
+insert into t (id,a) values (914,64);
+insert into t (id,a) values (914,65);
+insert into t (id,a) values (914,66);
+insert into t (id,a) values (914,67);
+insert into t (id,a) values (914,68);
+insert into t (id,a) values (914,69);
+insert into t (id,a) values (914,70);
+insert into t (id,a) values (914,71);
+insert into t (id,a) values (914,72);
+insert into t (id,a) values (914,73);
+insert into t (id,a) values (914,74);
+insert into t (id,a) values (914,75);
+insert into t (id,a) values (914,76);
+insert into t (id,a) values (914,77);
+insert into t (id,a) values (914,78);
+insert into t (id,a) values (914,79);
+insert into t (id,a) values (914,80);
+insert into t (id,a) values (914,81);
+insert into t (id,a) values (914,82);
+insert into t (id,a) values (914,83);
+insert into t (id,a) values (914,84);
+insert into t (id,a) values (914,85);
+insert into t (id,a) values (914,86);
+insert into t (id,a) values (914,87);
+insert into t (id,a) values (914,88);
+insert into t (id,a) values (914,89);
+insert into t (id,a) values (914,90);
+insert into t (id,a) values (914,91);
+insert into t (id,a) values (914,92);
+insert into t (id,a) values (914,93);
+insert into t (id,a) values (914,94);
+insert into t (id,a) values (914,95);
+insert into t (id,a) values (914,96);
+insert into t (id,a) values (914,97);
+insert into t (id,a) values (914,98);
+insert into t (id,a) values (914,99);
+insert into t (id,a) values (915,0);
+insert into t (id,a) values (915,1);
+insert into t (id,a) values (915,2);
+insert into t (id,a) values (915,3);
+insert into t (id,a) values (915,4);
+insert into t (id,a) values (915,5);
+insert into t (id,a) values (915,6);
+insert into t (id,a) values (915,7);
+insert into t (id,a) values (915,8);
+insert into t (id,a) values (915,9);
+insert into t (id,a) values (915,10);
+insert into t (id,a) values (915,11);
+insert into t (id,a) values (915,12);
+insert into t (id,a) values (915,13);
+insert into t (id,a) values (915,14);
+insert into t (id,a) values (915,15);
+insert into t (id,a) values (915,16);
+insert into t (id,a) values (915,17);
+insert into t (id,a) values (915,18);
+insert into t (id,a) values (915,19);
+insert into t (id,a) values (915,20);
+insert into t (id,a) values (915,21);
+insert into t (id,a) values (915,22);
+insert into t (id,a) values (915,23);
+insert into t (id,a) values (915,24);
+insert into t (id,a) values (915,25);
+insert into t (id,a) values (915,26);
+insert into t (id,a) values (915,27);
+insert into t (id,a) values (915,28);
+insert into t (id,a) values (915,29);
+insert into t (id,a) values (915,30);
+insert into t (id,a) values (915,31);
+insert into t (id,a) values (915,32);
+insert into t (id,a) values (915,33);
+insert into t (id,a) values (915,34);
+insert into t (id,a) values (915,35);
+insert into t (id,a) values (915,36);
+insert into t (id,a) values (915,37);
+insert into t (id,a) values (915,38);
+insert into t (id,a) values (915,39);
+insert into t (id,a) values (915,40);
+insert into t (id,a) values (915,41);
+insert into t (id,a) values (915,42);
+insert into t (id,a) values (915,43);
+insert into t (id,a) values (915,44);
+insert into t (id,a) values (915,45);
+insert into t (id,a) values (915,46);
+insert into t (id,a) values (915,47);
+insert into t (id,a) values (915,48);
+insert into t (id,a) values (915,49);
+insert into t (id,a) values (915,50);
+insert into t (id,a) values (915,51);
+insert into t (id,a) values (915,52);
+insert into t (id,a) values (915,53);
+insert into t (id,a) values (915,54);
+insert into t (id,a) values (915,55);
+insert into t (id,a) values (915,56);
+insert into t (id,a) values (915,57);
+insert into t (id,a) values (915,58);
+insert into t (id,a) values (915,59);
+insert into t (id,a) values (915,60);
+insert into t (id,a) values (915,61);
+insert into t (id,a) values (915,62);
+insert into t (id,a) values (915,63);
+insert into t (id,a) values (915,64);
+insert into t (id,a) values (915,65);
+insert into t (id,a) values (915,66);
+insert into t (id,a) values (915,67);
+insert into t (id,a) values (915,68);
+insert into t (id,a) values (915,69);
+insert into t (id,a) values (915,70);
+insert into t (id,a) values (915,71);
+insert into t (id,a) values (915,72);
+insert into t (id,a) values (915,73);
+insert into t (id,a) values (915,74);
+insert into t (id,a) values (915,75);
+insert into t (id,a) values (915,76);
+insert into t (id,a) values (915,77);
+insert into t (id,a) values (915,78);
+insert into t (id,a) values (915,79);
+insert into t (id,a) values (915,80);
+insert into t (id,a) values (915,81);
+insert into t (id,a) values (915,82);
+insert into t (id,a) values (915,83);
+insert into t (id,a) values (915,84);
+insert into t (id,a) values (915,85);
+insert into t (id,a) values (915,86);
+insert into t (id,a) values (915,87);
+insert into t (id,a) values (915,88);
+insert into t (id,a) values (915,89);
+insert into t (id,a) values (915,90);
+insert into t (id,a) values (915,91);
+insert into t (id,a) values (915,92);
+insert into t (id,a) values (915,93);
+insert into t (id,a) values (915,94);
+insert into t (id,a) values (915,95);
+insert into t (id,a) values (915,96);
+insert into t (id,a) values (915,97);
+insert into t (id,a) values (915,98);
+insert into t (id,a) values (915,99);
+insert into t (id,a) values (916,0);
+insert into t (id,a) values (916,1);
+insert into t (id,a) values (916,2);
+insert into t (id,a) values (916,3);
+insert into t (id,a) values (916,4);
+insert into t (id,a) values (916,5);
+insert into t (id,a) values (916,6);
+insert into t (id,a) values (916,7);
+insert into t (id,a) values (916,8);
+insert into t (id,a) values (916,9);
+insert into t (id,a) values (916,10);
+insert into t (id,a) values (916,11);
+insert into t (id,a) values (916,12);
+insert into t (id,a) values (916,13);
+insert into t (id,a) values (916,14);
+insert into t (id,a) values (916,15);
+insert into t (id,a) values (916,16);
+insert into t (id,a) values (916,17);
+insert into t (id,a) values (916,18);
+insert into t (id,a) values (916,19);
+insert into t (id,a) values (916,20);
+insert into t (id,a) values (916,21);
+insert into t (id,a) values (916,22);
+insert into t (id,a) values (916,23);
+insert into t (id,a) values (916,24);
+insert into t (id,a) values (916,25);
+insert into t (id,a) values (916,26);
+insert into t (id,a) values (916,27);
+insert into t (id,a) values (916,28);
+insert into t (id,a) values (916,29);
+insert into t (id,a) values (916,30);
+insert into t (id,a) values (916,31);
+insert into t (id,a) values (916,32);
+insert into t (id,a) values (916,33);
+insert into t (id,a) values (916,34);
+insert into t (id,a) values (916,35);
+insert into t (id,a) values (916,36);
+insert into t (id,a) values (916,37);
+insert into t (id,a) values (916,38);
+insert into t (id,a) values (916,39);
+insert into t (id,a) values (916,40);
+insert into t (id,a) values (916,41);
+insert into t (id,a) values (916,42);
+insert into t (id,a) values (916,43);
+insert into t (id,a) values (916,44);
+insert into t (id,a) values (916,45);
+insert into t (id,a) values (916,46);
+insert into t (id,a) values (916,47);
+insert into t (id,a) values (916,48);
+insert into t (id,a) values (916,49);
+insert into t (id,a) values (916,50);
+insert into t (id,a) values (916,51);
+insert into t (id,a) values (916,52);
+insert into t (id,a) values (916,53);
+insert into t (id,a) values (916,54);
+insert into t (id,a) values (916,55);
+insert into t (id,a) values (916,56);
+insert into t (id,a) values (916,57);
+insert into t (id,a) values (916,58);
+insert into t (id,a) values (916,59);
+insert into t (id,a) values (916,60);
+insert into t (id,a) values (916,61);
+insert into t (id,a) values (916,62);
+insert into t (id,a) values (916,63);
+insert into t (id,a) values (916,64);
+insert into t (id,a) values (916,65);
+insert into t (id,a) values (916,66);
+insert into t (id,a) values (916,67);
+insert into t (id,a) values (916,68);
+insert into t (id,a) values (916,69);
+insert into t (id,a) values (916,70);
+insert into t (id,a) values (916,71);
+insert into t (id,a) values (916,72);
+insert into t (id,a) values (916,73);
+insert into t (id,a) values (916,74);
+insert into t (id,a) values (916,75);
+insert into t (id,a) values (916,76);
+insert into t (id,a) values (916,77);
+insert into t (id,a) values (916,78);
+insert into t (id,a) values (916,79);
+insert into t (id,a) values (916,80);
+insert into t (id,a) values (916,81);
+insert into t (id,a) values (916,82);
+insert into t (id,a) values (916,83);
+insert into t (id,a) values (916,84);
+insert into t (id,a) values (916,85);
+insert into t (id,a) values (916,86);
+insert into t (id,a) values (916,87);
+insert into t (id,a) values (916,88);
+insert into t (id,a) values (916,89);
+insert into t (id,a) values (916,90);
+insert into t (id,a) values (916,91);
+insert into t (id,a) values (916,92);
+insert into t (id,a) values (916,93);
+insert into t (id,a) values (916,94);
+insert into t (id,a) values (916,95);
+insert into t (id,a) values (916,96);
+insert into t (id,a) values (916,97);
+insert into t (id,a) values (916,98);
+insert into t (id,a) values (916,99);
+insert into t (id,a) values (917,0);
+insert into t (id,a) values (917,1);
+insert into t (id,a) values (917,2);
+insert into t (id,a) values (917,3);
+insert into t (id,a) values (917,4);
+insert into t (id,a) values (917,5);
+insert into t (id,a) values (917,6);
+insert into t (id,a) values (917,7);
+insert into t (id,a) values (917,8);
+insert into t (id,a) values (917,9);
+insert into t (id,a) values (917,10);
+insert into t (id,a) values (917,11);
+insert into t (id,a) values (917,12);
+insert into t (id,a) values (917,13);
+insert into t (id,a) values (917,14);
+insert into t (id,a) values (917,15);
+insert into t (id,a) values (917,16);
+insert into t (id,a) values (917,17);
+insert into t (id,a) values (917,18);
+insert into t (id,a) values (917,19);
+insert into t (id,a) values (917,20);
+insert into t (id,a) values (917,21);
+insert into t (id,a) values (917,22);
+insert into t (id,a) values (917,23);
+insert into t (id,a) values (917,24);
+insert into t (id,a) values (917,25);
+insert into t (id,a) values (917,26);
+insert into t (id,a) values (917,27);
+insert into t (id,a) values (917,28);
+insert into t (id,a) values (917,29);
+insert into t (id,a) values (917,30);
+insert into t (id,a) values (917,31);
+insert into t (id,a) values (917,32);
+insert into t (id,a) values (917,33);
+insert into t (id,a) values (917,34);
+insert into t (id,a) values (917,35);
+insert into t (id,a) values (917,36);
+insert into t (id,a) values (917,37);
+insert into t (id,a) values (917,38);
+insert into t (id,a) values (917,39);
+insert into t (id,a) values (917,40);
+insert into t (id,a) values (917,41);
+insert into t (id,a) values (917,42);
+insert into t (id,a) values (917,43);
+insert into t (id,a) values (917,44);
+insert into t (id,a) values (917,45);
+insert into t (id,a) values (917,46);
+insert into t (id,a) values (917,47);
+insert into t (id,a) values (917,48);
+insert into t (id,a) values (917,49);
+insert into t (id,a) values (917,50);
+insert into t (id,a) values (917,51);
+insert into t (id,a) values (917,52);
+insert into t (id,a) values (917,53);
+insert into t (id,a) values (917,54);
+insert into t (id,a) values (917,55);
+insert into t (id,a) values (917,56);
+insert into t (id,a) values (917,57);
+insert into t (id,a) values (917,58);
+insert into t (id,a) values (917,59);
+insert into t (id,a) values (917,60);
+insert into t (id,a) values (917,61);
+insert into t (id,a) values (917,62);
+insert into t (id,a) values (917,63);
+insert into t (id,a) values (917,64);
+insert into t (id,a) values (917,65);
+insert into t (id,a) values (917,66);
+insert into t (id,a) values (917,67);
+insert into t (id,a) values (917,68);
+insert into t (id,a) values (917,69);
+insert into t (id,a) values (917,70);
+insert into t (id,a) values (917,71);
+insert into t (id,a) values (917,72);
+insert into t (id,a) values (917,73);
+insert into t (id,a) values (917,74);
+insert into t (id,a) values (917,75);
+insert into t (id,a) values (917,76);
+insert into t (id,a) values (917,77);
+insert into t (id,a) values (917,78);
+insert into t (id,a) values (917,79);
+insert into t (id,a) values (917,80);
+insert into t (id,a) values (917,81);
+insert into t (id,a) values (917,82);
+insert into t (id,a) values (917,83);
+insert into t (id,a) values (917,84);
+insert into t (id,a) values (917,85);
+insert into t (id,a) values (917,86);
+insert into t (id,a) values (917,87);
+insert into t (id,a) values (917,88);
+insert into t (id,a) values (917,89);
+insert into t (id,a) values (917,90);
+insert into t (id,a) values (917,91);
+insert into t (id,a) values (917,92);
+insert into t (id,a) values (917,93);
+insert into t (id,a) values (917,94);
+insert into t (id,a) values (917,95);
+insert into t (id,a) values (917,96);
+insert into t (id,a) values (917,97);
+insert into t (id,a) values (917,98);
+insert into t (id,a) values (917,99);
+insert into t (id,a) values (918,0);
+insert into t (id,a) values (918,1);
+insert into t (id,a) values (918,2);
+insert into t (id,a) values (918,3);
+insert into t (id,a) values (918,4);
+insert into t (id,a) values (918,5);
+insert into t (id,a) values (918,6);
+insert into t (id,a) values (918,7);
+insert into t (id,a) values (918,8);
+insert into t (id,a) values (918,9);
+insert into t (id,a) values (918,10);
+insert into t (id,a) values (918,11);
+insert into t (id,a) values (918,12);
+insert into t (id,a) values (918,13);
+insert into t (id,a) values (918,14);
+insert into t (id,a) values (918,15);
+insert into t (id,a) values (918,16);
+insert into t (id,a) values (918,17);
+insert into t (id,a) values (918,18);
+insert into t (id,a) values (918,19);
+insert into t (id,a) values (918,20);
+insert into t (id,a) values (918,21);
+insert into t (id,a) values (918,22);
+insert into t (id,a) values (918,23);
+insert into t (id,a) values (918,24);
+insert into t (id,a) values (918,25);
+insert into t (id,a) values (918,26);
+insert into t (id,a) values (918,27);
+insert into t (id,a) values (918,28);
+insert into t (id,a) values (918,29);
+insert into t (id,a) values (918,30);
+insert into t (id,a) values (918,31);
+insert into t (id,a) values (918,32);
+insert into t (id,a) values (918,33);
+insert into t (id,a) values (918,34);
+insert into t (id,a) values (918,35);
+insert into t (id,a) values (918,36);
+insert into t (id,a) values (918,37);
+insert into t (id,a) values (918,38);
+insert into t (id,a) values (918,39);
+insert into t (id,a) values (918,40);
+insert into t (id,a) values (918,41);
+insert into t (id,a) values (918,42);
+insert into t (id,a) values (918,43);
+insert into t (id,a) values (918,44);
+insert into t (id,a) values (918,45);
+insert into t (id,a) values (918,46);
+insert into t (id,a) values (918,47);
+insert into t (id,a) values (918,48);
+insert into t (id,a) values (918,49);
+insert into t (id,a) values (918,50);
+insert into t (id,a) values (918,51);
+insert into t (id,a) values (918,52);
+insert into t (id,a) values (918,53);
+insert into t (id,a) values (918,54);
+insert into t (id,a) values (918,55);
+insert into t (id,a) values (918,56);
+insert into t (id,a) values (918,57);
+insert into t (id,a) values (918,58);
+insert into t (id,a) values (918,59);
+insert into t (id,a) values (918,60);
+insert into t (id,a) values (918,61);
+insert into t (id,a) values (918,62);
+insert into t (id,a) values (918,63);
+insert into t (id,a) values (918,64);
+insert into t (id,a) values (918,65);
+insert into t (id,a) values (918,66);
+insert into t (id,a) values (918,67);
+insert into t (id,a) values (918,68);
+insert into t (id,a) values (918,69);
+insert into t (id,a) values (918,70);
+insert into t (id,a) values (918,71);
+insert into t (id,a) values (918,72);
+insert into t (id,a) values (918,73);
+insert into t (id,a) values (918,74);
+insert into t (id,a) values (918,75);
+insert into t (id,a) values (918,76);
+insert into t (id,a) values (918,77);
+insert into t (id,a) values (918,78);
+insert into t (id,a) values (918,79);
+insert into t (id,a) values (918,80);
+insert into t (id,a) values (918,81);
+insert into t (id,a) values (918,82);
+insert into t (id,a) values (918,83);
+insert into t (id,a) values (918,84);
+insert into t (id,a) values (918,85);
+insert into t (id,a) values (918,86);
+insert into t (id,a) values (918,87);
+insert into t (id,a) values (918,88);
+insert into t (id,a) values (918,89);
+insert into t (id,a) values (918,90);
+insert into t (id,a) values (918,91);
+insert into t (id,a) values (918,92);
+insert into t (id,a) values (918,93);
+insert into t (id,a) values (918,94);
+insert into t (id,a) values (918,95);
+insert into t (id,a) values (918,96);
+insert into t (id,a) values (918,97);
+insert into t (id,a) values (918,98);
+insert into t (id,a) values (918,99);
+insert into t (id,a) values (919,0);
+insert into t (id,a) values (919,1);
+insert into t (id,a) values (919,2);
+insert into t (id,a) values (919,3);
+insert into t (id,a) values (919,4);
+insert into t (id,a) values (919,5);
+insert into t (id,a) values (919,6);
+insert into t (id,a) values (919,7);
+insert into t (id,a) values (919,8);
+insert into t (id,a) values (919,9);
+insert into t (id,a) values (919,10);
+insert into t (id,a) values (919,11);
+insert into t (id,a) values (919,12);
+insert into t (id,a) values (919,13);
+insert into t (id,a) values (919,14);
+insert into t (id,a) values (919,15);
+insert into t (id,a) values (919,16);
+insert into t (id,a) values (919,17);
+insert into t (id,a) values (919,18);
+insert into t (id,a) values (919,19);
+insert into t (id,a) values (919,20);
+insert into t (id,a) values (919,21);
+insert into t (id,a) values (919,22);
+insert into t (id,a) values (919,23);
+insert into t (id,a) values (919,24);
+insert into t (id,a) values (919,25);
+insert into t (id,a) values (919,26);
+insert into t (id,a) values (919,27);
+insert into t (id,a) values (919,28);
+insert into t (id,a) values (919,29);
+insert into t (id,a) values (919,30);
+insert into t (id,a) values (919,31);
+insert into t (id,a) values (919,32);
+insert into t (id,a) values (919,33);
+insert into t (id,a) values (919,34);
+insert into t (id,a) values (919,35);
+insert into t (id,a) values (919,36);
+insert into t (id,a) values (919,37);
+insert into t (id,a) values (919,38);
+insert into t (id,a) values (919,39);
+insert into t (id,a) values (919,40);
+insert into t (id,a) values (919,41);
+insert into t (id,a) values (919,42);
+insert into t (id,a) values (919,43);
+insert into t (id,a) values (919,44);
+insert into t (id,a) values (919,45);
+insert into t (id,a) values (919,46);
+insert into t (id,a) values (919,47);
+insert into t (id,a) values (919,48);
+insert into t (id,a) values (919,49);
+insert into t (id,a) values (919,50);
+insert into t (id,a) values (919,51);
+insert into t (id,a) values (919,52);
+insert into t (id,a) values (919,53);
+insert into t (id,a) values (919,54);
+insert into t (id,a) values (919,55);
+insert into t (id,a) values (919,56);
+insert into t (id,a) values (919,57);
+insert into t (id,a) values (919,58);
+insert into t (id,a) values (919,59);
+insert into t (id,a) values (919,60);
+insert into t (id,a) values (919,61);
+insert into t (id,a) values (919,62);
+insert into t (id,a) values (919,63);
+insert into t (id,a) values (919,64);
+insert into t (id,a) values (919,65);
+insert into t (id,a) values (919,66);
+insert into t (id,a) values (919,67);
+insert into t (id,a) values (919,68);
+insert into t (id,a) values (919,69);
+insert into t (id,a) values (919,70);
+insert into t (id,a) values (919,71);
+insert into t (id,a) values (919,72);
+insert into t (id,a) values (919,73);
+insert into t (id,a) values (919,74);
+insert into t (id,a) values (919,75);
+insert into t (id,a) values (919,76);
+insert into t (id,a) values (919,77);
+insert into t (id,a) values (919,78);
+insert into t (id,a) values (919,79);
+insert into t (id,a) values (919,80);
+insert into t (id,a) values (919,81);
+insert into t (id,a) values (919,82);
+insert into t (id,a) values (919,83);
+insert into t (id,a) values (919,84);
+insert into t (id,a) values (919,85);
+insert into t (id,a) values (919,86);
+insert into t (id,a) values (919,87);
+insert into t (id,a) values (919,88);
+insert into t (id,a) values (919,89);
+insert into t (id,a) values (919,90);
+insert into t (id,a) values (919,91);
+insert into t (id,a) values (919,92);
+insert into t (id,a) values (919,93);
+insert into t (id,a) values (919,94);
+insert into t (id,a) values (919,95);
+insert into t (id,a) values (919,96);
+insert into t (id,a) values (919,97);
+insert into t (id,a) values (919,98);
+insert into t (id,a) values (919,99);
+insert into t (id,a) values (920,0);
+insert into t (id,a) values (920,1);
+insert into t (id,a) values (920,2);
+insert into t (id,a) values (920,3);
+insert into t (id,a) values (920,4);
+insert into t (id,a) values (920,5);
+insert into t (id,a) values (920,6);
+insert into t (id,a) values (920,7);
+insert into t (id,a) values (920,8);
+insert into t (id,a) values (920,9);
+insert into t (id,a) values (920,10);
+insert into t (id,a) values (920,11);
+insert into t (id,a) values (920,12);
+insert into t (id,a) values (920,13);
+insert into t (id,a) values (920,14);
+insert into t (id,a) values (920,15);
+insert into t (id,a) values (920,16);
+insert into t (id,a) values (920,17);
+insert into t (id,a) values (920,18);
+insert into t (id,a) values (920,19);
+insert into t (id,a) values (920,20);
+insert into t (id,a) values (920,21);
+insert into t (id,a) values (920,22);
+insert into t (id,a) values (920,23);
+insert into t (id,a) values (920,24);
+insert into t (id,a) values (920,25);
+insert into t (id,a) values (920,26);
+insert into t (id,a) values (920,27);
+insert into t (id,a) values (920,28);
+insert into t (id,a) values (920,29);
+insert into t (id,a) values (920,30);
+insert into t (id,a) values (920,31);
+insert into t (id,a) values (920,32);
+insert into t (id,a) values (920,33);
+insert into t (id,a) values (920,34);
+insert into t (id,a) values (920,35);
+insert into t (id,a) values (920,36);
+insert into t (id,a) values (920,37);
+insert into t (id,a) values (920,38);
+insert into t (id,a) values (920,39);
+insert into t (id,a) values (920,40);
+insert into t (id,a) values (920,41);
+insert into t (id,a) values (920,42);
+insert into t (id,a) values (920,43);
+insert into t (id,a) values (920,44);
+insert into t (id,a) values (920,45);
+insert into t (id,a) values (920,46);
+insert into t (id,a) values (920,47);
+insert into t (id,a) values (920,48);
+insert into t (id,a) values (920,49);
+insert into t (id,a) values (920,50);
+insert into t (id,a) values (920,51);
+insert into t (id,a) values (920,52);
+insert into t (id,a) values (920,53);
+insert into t (id,a) values (920,54);
+insert into t (id,a) values (920,55);
+insert into t (id,a) values (920,56);
+insert into t (id,a) values (920,57);
+insert into t (id,a) values (920,58);
+insert into t (id,a) values (920,59);
+insert into t (id,a) values (920,60);
+insert into t (id,a) values (920,61);
+insert into t (id,a) values (920,62);
+insert into t (id,a) values (920,63);
+insert into t (id,a) values (920,64);
+insert into t (id,a) values (920,65);
+insert into t (id,a) values (920,66);
+insert into t (id,a) values (920,67);
+insert into t (id,a) values (920,68);
+insert into t (id,a) values (920,69);
+insert into t (id,a) values (920,70);
+insert into t (id,a) values (920,71);
+insert into t (id,a) values (920,72);
+insert into t (id,a) values (920,73);
+insert into t (id,a) values (920,74);
+insert into t (id,a) values (920,75);
+insert into t (id,a) values (920,76);
+insert into t (id,a) values (920,77);
+insert into t (id,a) values (920,78);
+insert into t (id,a) values (920,79);
+insert into t (id,a) values (920,80);
+insert into t (id,a) values (920,81);
+insert into t (id,a) values (920,82);
+insert into t (id,a) values (920,83);
+insert into t (id,a) values (920,84);
+insert into t (id,a) values (920,85);
+insert into t (id,a) values (920,86);
+insert into t (id,a) values (920,87);
+insert into t (id,a) values (920,88);
+insert into t (id,a) values (920,89);
+insert into t (id,a) values (920,90);
+insert into t (id,a) values (920,91);
+insert into t (id,a) values (920,92);
+insert into t (id,a) values (920,93);
+insert into t (id,a) values (920,94);
+insert into t (id,a) values (920,95);
+insert into t (id,a) values (920,96);
+insert into t (id,a) values (920,97);
+insert into t (id,a) values (920,98);
+insert into t (id,a) values (920,99);
+insert into t (id,a) values (921,0);
+insert into t (id,a) values (921,1);
+insert into t (id,a) values (921,2);
+insert into t (id,a) values (921,3);
+insert into t (id,a) values (921,4);
+insert into t (id,a) values (921,5);
+insert into t (id,a) values (921,6);
+insert into t (id,a) values (921,7);
+insert into t (id,a) values (921,8);
+insert into t (id,a) values (921,9);
+insert into t (id,a) values (921,10);
+insert into t (id,a) values (921,11);
+insert into t (id,a) values (921,12);
+insert into t (id,a) values (921,13);
+insert into t (id,a) values (921,14);
+insert into t (id,a) values (921,15);
+insert into t (id,a) values (921,16);
+insert into t (id,a) values (921,17);
+insert into t (id,a) values (921,18);
+insert into t (id,a) values (921,19);
+insert into t (id,a) values (921,20);
+insert into t (id,a) values (921,21);
+insert into t (id,a) values (921,22);
+insert into t (id,a) values (921,23);
+insert into t (id,a) values (921,24);
+insert into t (id,a) values (921,25);
+insert into t (id,a) values (921,26);
+insert into t (id,a) values (921,27);
+insert into t (id,a) values (921,28);
+insert into t (id,a) values (921,29);
+insert into t (id,a) values (921,30);
+insert into t (id,a) values (921,31);
+insert into t (id,a) values (921,32);
+insert into t (id,a) values (921,33);
+insert into t (id,a) values (921,34);
+insert into t (id,a) values (921,35);
+insert into t (id,a) values (921,36);
+insert into t (id,a) values (921,37);
+insert into t (id,a) values (921,38);
+insert into t (id,a) values (921,39);
+insert into t (id,a) values (921,40);
+insert into t (id,a) values (921,41);
+insert into t (id,a) values (921,42);
+insert into t (id,a) values (921,43);
+insert into t (id,a) values (921,44);
+insert into t (id,a) values (921,45);
+insert into t (id,a) values (921,46);
+insert into t (id,a) values (921,47);
+insert into t (id,a) values (921,48);
+insert into t (id,a) values (921,49);
+insert into t (id,a) values (921,50);
+insert into t (id,a) values (921,51);
+insert into t (id,a) values (921,52);
+insert into t (id,a) values (921,53);
+insert into t (id,a) values (921,54);
+insert into t (id,a) values (921,55);
+insert into t (id,a) values (921,56);
+insert into t (id,a) values (921,57);
+insert into t (id,a) values (921,58);
+insert into t (id,a) values (921,59);
+insert into t (id,a) values (921,60);
+insert into t (id,a) values (921,61);
+insert into t (id,a) values (921,62);
+insert into t (id,a) values (921,63);
+insert into t (id,a) values (921,64);
+insert into t (id,a) values (921,65);
+insert into t (id,a) values (921,66);
+insert into t (id,a) values (921,67);
+insert into t (id,a) values (921,68);
+insert into t (id,a) values (921,69);
+insert into t (id,a) values (921,70);
+insert into t (id,a) values (921,71);
+insert into t (id,a) values (921,72);
+insert into t (id,a) values (921,73);
+insert into t (id,a) values (921,74);
+insert into t (id,a) values (921,75);
+insert into t (id,a) values (921,76);
+insert into t (id,a) values (921,77);
+insert into t (id,a) values (921,78);
+insert into t (id,a) values (921,79);
+insert into t (id,a) values (921,80);
+insert into t (id,a) values (921,81);
+insert into t (id,a) values (921,82);
+insert into t (id,a) values (921,83);
+insert into t (id,a) values (921,84);
+insert into t (id,a) values (921,85);
+insert into t (id,a) values (921,86);
+insert into t (id,a) values (921,87);
+insert into t (id,a) values (921,88);
+insert into t (id,a) values (921,89);
+insert into t (id,a) values (921,90);
+insert into t (id,a) values (921,91);
+insert into t (id,a) values (921,92);
+insert into t (id,a) values (921,93);
+insert into t (id,a) values (921,94);
+insert into t (id,a) values (921,95);
+insert into t (id,a) values (921,96);
+insert into t (id,a) values (921,97);
+insert into t (id,a) values (921,98);
+insert into t (id,a) values (921,99);
+insert into t (id,a) values (922,0);
+insert into t (id,a) values (922,1);
+insert into t (id,a) values (922,2);
+insert into t (id,a) values (922,3);
+insert into t (id,a) values (922,4);
+insert into t (id,a) values (922,5);
+insert into t (id,a) values (922,6);
+insert into t (id,a) values (922,7);
+insert into t (id,a) values (922,8);
+insert into t (id,a) values (922,9);
+insert into t (id,a) values (922,10);
+insert into t (id,a) values (922,11);
+insert into t (id,a) values (922,12);
+insert into t (id,a) values (922,13);
+insert into t (id,a) values (922,14);
+insert into t (id,a) values (922,15);
+insert into t (id,a) values (922,16);
+insert into t (id,a) values (922,17);
+insert into t (id,a) values (922,18);
+insert into t (id,a) values (922,19);
+insert into t (id,a) values (922,20);
+insert into t (id,a) values (922,21);
+insert into t (id,a) values (922,22);
+insert into t (id,a) values (922,23);
+insert into t (id,a) values (922,24);
+insert into t (id,a) values (922,25);
+insert into t (id,a) values (922,26);
+insert into t (id,a) values (922,27);
+insert into t (id,a) values (922,28);
+insert into t (id,a) values (922,29);
+insert into t (id,a) values (922,30);
+insert into t (id,a) values (922,31);
+insert into t (id,a) values (922,32);
+insert into t (id,a) values (922,33);
+insert into t (id,a) values (922,34);
+insert into t (id,a) values (922,35);
+insert into t (id,a) values (922,36);
+insert into t (id,a) values (922,37);
+insert into t (id,a) values (922,38);
+insert into t (id,a) values (922,39);
+insert into t (id,a) values (922,40);
+insert into t (id,a) values (922,41);
+insert into t (id,a) values (922,42);
+insert into t (id,a) values (922,43);
+insert into t (id,a) values (922,44);
+insert into t (id,a) values (922,45);
+insert into t (id,a) values (922,46);
+insert into t (id,a) values (922,47);
+insert into t (id,a) values (922,48);
+insert into t (id,a) values (922,49);
+insert into t (id,a) values (922,50);
+insert into t (id,a) values (922,51);
+insert into t (id,a) values (922,52);
+insert into t (id,a) values (922,53);
+insert into t (id,a) values (922,54);
+insert into t (id,a) values (922,55);
+insert into t (id,a) values (922,56);
+insert into t (id,a) values (922,57);
+insert into t (id,a) values (922,58);
+insert into t (id,a) values (922,59);
+insert into t (id,a) values (922,60);
+insert into t (id,a) values (922,61);
+insert into t (id,a) values (922,62);
+insert into t (id,a) values (922,63);
+insert into t (id,a) values (922,64);
+insert into t (id,a) values (922,65);
+insert into t (id,a) values (922,66);
+insert into t (id,a) values (922,67);
+insert into t (id,a) values (922,68);
+insert into t (id,a) values (922,69);
+insert into t (id,a) values (922,70);
+insert into t (id,a) values (922,71);
+insert into t (id,a) values (922,72);
+insert into t (id,a) values (922,73);
+insert into t (id,a) values (922,74);
+insert into t (id,a) values (922,75);
+insert into t (id,a) values (922,76);
+insert into t (id,a) values (922,77);
+insert into t (id,a) values (922,78);
+insert into t (id,a) values (922,79);
+insert into t (id,a) values (922,80);
+insert into t (id,a) values (922,81);
+insert into t (id,a) values (922,82);
+insert into t (id,a) values (922,83);
+insert into t (id,a) values (922,84);
+insert into t (id,a) values (922,85);
+insert into t (id,a) values (922,86);
+insert into t (id,a) values (922,87);
+insert into t (id,a) values (922,88);
+insert into t (id,a) values (922,89);
+insert into t (id,a) values (922,90);
+insert into t (id,a) values (922,91);
+insert into t (id,a) values (922,92);
+insert into t (id,a) values (922,93);
+insert into t (id,a) values (922,94);
+insert into t (id,a) values (922,95);
+insert into t (id,a) values (922,96);
+insert into t (id,a) values (922,97);
+insert into t (id,a) values (922,98);
+insert into t (id,a) values (922,99);
+insert into t (id,a) values (923,0);
+insert into t (id,a) values (923,1);
+insert into t (id,a) values (923,2);
+insert into t (id,a) values (923,3);
+insert into t (id,a) values (923,4);
+insert into t (id,a) values (923,5);
+insert into t (id,a) values (923,6);
+insert into t (id,a) values (923,7);
+insert into t (id,a) values (923,8);
+insert into t (id,a) values (923,9);
+insert into t (id,a) values (923,10);
+insert into t (id,a) values (923,11);
+insert into t (id,a) values (923,12);
+insert into t (id,a) values (923,13);
+insert into t (id,a) values (923,14);
+insert into t (id,a) values (923,15);
+insert into t (id,a) values (923,16);
+insert into t (id,a) values (923,17);
+insert into t (id,a) values (923,18);
+insert into t (id,a) values (923,19);
+insert into t (id,a) values (923,20);
+insert into t (id,a) values (923,21);
+insert into t (id,a) values (923,22);
+insert into t (id,a) values (923,23);
+insert into t (id,a) values (923,24);
+insert into t (id,a) values (923,25);
+insert into t (id,a) values (923,26);
+insert into t (id,a) values (923,27);
+insert into t (id,a) values (923,28);
+insert into t (id,a) values (923,29);
+insert into t (id,a) values (923,30);
+insert into t (id,a) values (923,31);
+insert into t (id,a) values (923,32);
+insert into t (id,a) values (923,33);
+insert into t (id,a) values (923,34);
+insert into t (id,a) values (923,35);
+insert into t (id,a) values (923,36);
+insert into t (id,a) values (923,37);
+insert into t (id,a) values (923,38);
+insert into t (id,a) values (923,39);
+insert into t (id,a) values (923,40);
+insert into t (id,a) values (923,41);
+insert into t (id,a) values (923,42);
+insert into t (id,a) values (923,43);
+insert into t (id,a) values (923,44);
+insert into t (id,a) values (923,45);
+insert into t (id,a) values (923,46);
+insert into t (id,a) values (923,47);
+insert into t (id,a) values (923,48);
+insert into t (id,a) values (923,49);
+insert into t (id,a) values (923,50);
+insert into t (id,a) values (923,51);
+insert into t (id,a) values (923,52);
+insert into t (id,a) values (923,53);
+insert into t (id,a) values (923,54);
+insert into t (id,a) values (923,55);
+insert into t (id,a) values (923,56);
+insert into t (id,a) values (923,57);
+insert into t (id,a) values (923,58);
+insert into t (id,a) values (923,59);
+insert into t (id,a) values (923,60);
+insert into t (id,a) values (923,61);
+insert into t (id,a) values (923,62);
+insert into t (id,a) values (923,63);
+insert into t (id,a) values (923,64);
+insert into t (id,a) values (923,65);
+insert into t (id,a) values (923,66);
+insert into t (id,a) values (923,67);
+insert into t (id,a) values (923,68);
+insert into t (id,a) values (923,69);
+insert into t (id,a) values (923,70);
+insert into t (id,a) values (923,71);
+insert into t (id,a) values (923,72);
+insert into t (id,a) values (923,73);
+insert into t (id,a) values (923,74);
+insert into t (id,a) values (923,75);
+insert into t (id,a) values (923,76);
+insert into t (id,a) values (923,77);
+insert into t (id,a) values (923,78);
+insert into t (id,a) values (923,79);
+insert into t (id,a) values (923,80);
+insert into t (id,a) values (923,81);
+insert into t (id,a) values (923,82);
+insert into t (id,a) values (923,83);
+insert into t (id,a) values (923,84);
+insert into t (id,a) values (923,85);
+insert into t (id,a) values (923,86);
+insert into t (id,a) values (923,87);
+insert into t (id,a) values (923,88);
+insert into t (id,a) values (923,89);
+insert into t (id,a) values (923,90);
+insert into t (id,a) values (923,91);
+insert into t (id,a) values (923,92);
+insert into t (id,a) values (923,93);
+insert into t (id,a) values (923,94);
+insert into t (id,a) values (923,95);
+insert into t (id,a) values (923,96);
+insert into t (id,a) values (923,97);
+insert into t (id,a) values (923,98);
+insert into t (id,a) values (923,99);
+insert into t (id,a) values (924,0);
+insert into t (id,a) values (924,1);
+insert into t (id,a) values (924,2);
+insert into t (id,a) values (924,3);
+insert into t (id,a) values (924,4);
+insert into t (id,a) values (924,5);
+insert into t (id,a) values (924,6);
+insert into t (id,a) values (924,7);
+insert into t (id,a) values (924,8);
+insert into t (id,a) values (924,9);
+insert into t (id,a) values (924,10);
+insert into t (id,a) values (924,11);
+insert into t (id,a) values (924,12);
+insert into t (id,a) values (924,13);
+insert into t (id,a) values (924,14);
+insert into t (id,a) values (924,15);
+insert into t (id,a) values (924,16);
+insert into t (id,a) values (924,17);
+insert into t (id,a) values (924,18);
+insert into t (id,a) values (924,19);
+insert into t (id,a) values (924,20);
+insert into t (id,a) values (924,21);
+insert into t (id,a) values (924,22);
+insert into t (id,a) values (924,23);
+insert into t (id,a) values (924,24);
+insert into t (id,a) values (924,25);
+insert into t (id,a) values (924,26);
+insert into t (id,a) values (924,27);
+insert into t (id,a) values (924,28);
+insert into t (id,a) values (924,29);
+insert into t (id,a) values (924,30);
+insert into t (id,a) values (924,31);
+insert into t (id,a) values (924,32);
+insert into t (id,a) values (924,33);
+insert into t (id,a) values (924,34);
+insert into t (id,a) values (924,35);
+insert into t (id,a) values (924,36);
+insert into t (id,a) values (924,37);
+insert into t (id,a) values (924,38);
+insert into t (id,a) values (924,39);
+insert into t (id,a) values (924,40);
+insert into t (id,a) values (924,41);
+insert into t (id,a) values (924,42);
+insert into t (id,a) values (924,43);
+insert into t (id,a) values (924,44);
+insert into t (id,a) values (924,45);
+insert into t (id,a) values (924,46);
+insert into t (id,a) values (924,47);
+insert into t (id,a) values (924,48);
+insert into t (id,a) values (924,49);
+insert into t (id,a) values (924,50);
+insert into t (id,a) values (924,51);
+insert into t (id,a) values (924,52);
+insert into t (id,a) values (924,53);
+insert into t (id,a) values (924,54);
+insert into t (id,a) values (924,55);
+insert into t (id,a) values (924,56);
+insert into t (id,a) values (924,57);
+insert into t (id,a) values (924,58);
+insert into t (id,a) values (924,59);
+insert into t (id,a) values (924,60);
+insert into t (id,a) values (924,61);
+insert into t (id,a) values (924,62);
+insert into t (id,a) values (924,63);
+insert into t (id,a) values (924,64);
+insert into t (id,a) values (924,65);
+insert into t (id,a) values (924,66);
+insert into t (id,a) values (924,67);
+insert into t (id,a) values (924,68);
+insert into t (id,a) values (924,69);
+insert into t (id,a) values (924,70);
+insert into t (id,a) values (924,71);
+insert into t (id,a) values (924,72);
+insert into t (id,a) values (924,73);
+insert into t (id,a) values (924,74);
+insert into t (id,a) values (924,75);
+insert into t (id,a) values (924,76);
+insert into t (id,a) values (924,77);
+insert into t (id,a) values (924,78);
+insert into t (id,a) values (924,79);
+insert into t (id,a) values (924,80);
+insert into t (id,a) values (924,81);
+insert into t (id,a) values (924,82);
+insert into t (id,a) values (924,83);
+insert into t (id,a) values (924,84);
+insert into t (id,a) values (924,85);
+insert into t (id,a) values (924,86);
+insert into t (id,a) values (924,87);
+insert into t (id,a) values (924,88);
+insert into t (id,a) values (924,89);
+insert into t (id,a) values (924,90);
+insert into t (id,a) values (924,91);
+insert into t (id,a) values (924,92);
+insert into t (id,a) values (924,93);
+insert into t (id,a) values (924,94);
+insert into t (id,a) values (924,95);
+insert into t (id,a) values (924,96);
+insert into t (id,a) values (924,97);
+insert into t (id,a) values (924,98);
+insert into t (id,a) values (924,99);
+insert into t (id,a) values (925,0);
+insert into t (id,a) values (925,1);
+insert into t (id,a) values (925,2);
+insert into t (id,a) values (925,3);
+insert into t (id,a) values (925,4);
+insert into t (id,a) values (925,5);
+insert into t (id,a) values (925,6);
+insert into t (id,a) values (925,7);
+insert into t (id,a) values (925,8);
+insert into t (id,a) values (925,9);
+insert into t (id,a) values (925,10);
+insert into t (id,a) values (925,11);
+insert into t (id,a) values (925,12);
+insert into t (id,a) values (925,13);
+insert into t (id,a) values (925,14);
+insert into t (id,a) values (925,15);
+insert into t (id,a) values (925,16);
+insert into t (id,a) values (925,17);
+insert into t (id,a) values (925,18);
+insert into t (id,a) values (925,19);
+insert into t (id,a) values (925,20);
+insert into t (id,a) values (925,21);
+insert into t (id,a) values (925,22);
+insert into t (id,a) values (925,23);
+insert into t (id,a) values (925,24);
+insert into t (id,a) values (925,25);
+insert into t (id,a) values (925,26);
+insert into t (id,a) values (925,27);
+insert into t (id,a) values (925,28);
+insert into t (id,a) values (925,29);
+insert into t (id,a) values (925,30);
+insert into t (id,a) values (925,31);
+insert into t (id,a) values (925,32);
+insert into t (id,a) values (925,33);
+insert into t (id,a) values (925,34);
+insert into t (id,a) values (925,35);
+insert into t (id,a) values (925,36);
+insert into t (id,a) values (925,37);
+insert into t (id,a) values (925,38);
+insert into t (id,a) values (925,39);
+insert into t (id,a) values (925,40);
+insert into t (id,a) values (925,41);
+insert into t (id,a) values (925,42);
+insert into t (id,a) values (925,43);
+insert into t (id,a) values (925,44);
+insert into t (id,a) values (925,45);
+insert into t (id,a) values (925,46);
+insert into t (id,a) values (925,47);
+insert into t (id,a) values (925,48);
+insert into t (id,a) values (925,49);
+insert into t (id,a) values (925,50);
+insert into t (id,a) values (925,51);
+insert into t (id,a) values (925,52);
+insert into t (id,a) values (925,53);
+insert into t (id,a) values (925,54);
+insert into t (id,a) values (925,55);
+insert into t (id,a) values (925,56);
+insert into t (id,a) values (925,57);
+insert into t (id,a) values (925,58);
+insert into t (id,a) values (925,59);
+insert into t (id,a) values (925,60);
+insert into t (id,a) values (925,61);
+insert into t (id,a) values (925,62);
+insert into t (id,a) values (925,63);
+insert into t (id,a) values (925,64);
+insert into t (id,a) values (925,65);
+insert into t (id,a) values (925,66);
+insert into t (id,a) values (925,67);
+insert into t (id,a) values (925,68);
+insert into t (id,a) values (925,69);
+insert into t (id,a) values (925,70);
+insert into t (id,a) values (925,71);
+insert into t (id,a) values (925,72);
+insert into t (id,a) values (925,73);
+insert into t (id,a) values (925,74);
+insert into t (id,a) values (925,75);
+insert into t (id,a) values (925,76);
+insert into t (id,a) values (925,77);
+insert into t (id,a) values (925,78);
+insert into t (id,a) values (925,79);
+insert into t (id,a) values (925,80);
+insert into t (id,a) values (925,81);
+insert into t (id,a) values (925,82);
+insert into t (id,a) values (925,83);
+insert into t (id,a) values (925,84);
+insert into t (id,a) values (925,85);
+insert into t (id,a) values (925,86);
+insert into t (id,a) values (925,87);
+insert into t (id,a) values (925,88);
+insert into t (id,a) values (925,89);
+insert into t (id,a) values (925,90);
+insert into t (id,a) values (925,91);
+insert into t (id,a) values (925,92);
+insert into t (id,a) values (925,93);
+insert into t (id,a) values (925,94);
+insert into t (id,a) values (925,95);
+insert into t (id,a) values (925,96);
+insert into t (id,a) values (925,97);
+insert into t (id,a) values (925,98);
+insert into t (id,a) values (925,99);
+insert into t (id,a) values (926,0);
+insert into t (id,a) values (926,1);
+insert into t (id,a) values (926,2);
+insert into t (id,a) values (926,3);
+insert into t (id,a) values (926,4);
+insert into t (id,a) values (926,5);
+insert into t (id,a) values (926,6);
+insert into t (id,a) values (926,7);
+insert into t (id,a) values (926,8);
+insert into t (id,a) values (926,9);
+insert into t (id,a) values (926,10);
+insert into t (id,a) values (926,11);
+insert into t (id,a) values (926,12);
+insert into t (id,a) values (926,13);
+insert into t (id,a) values (926,14);
+insert into t (id,a) values (926,15);
+insert into t (id,a) values (926,16);
+insert into t (id,a) values (926,17);
+insert into t (id,a) values (926,18);
+insert into t (id,a) values (926,19);
+insert into t (id,a) values (926,20);
+insert into t (id,a) values (926,21);
+insert into t (id,a) values (926,22);
+insert into t (id,a) values (926,23);
+insert into t (id,a) values (926,24);
+insert into t (id,a) values (926,25);
+insert into t (id,a) values (926,26);
+insert into t (id,a) values (926,27);
+insert into t (id,a) values (926,28);
+insert into t (id,a) values (926,29);
+insert into t (id,a) values (926,30);
+insert into t (id,a) values (926,31);
+insert into t (id,a) values (926,32);
+insert into t (id,a) values (926,33);
+insert into t (id,a) values (926,34);
+insert into t (id,a) values (926,35);
+insert into t (id,a) values (926,36);
+insert into t (id,a) values (926,37);
+insert into t (id,a) values (926,38);
+insert into t (id,a) values (926,39);
+insert into t (id,a) values (926,40);
+insert into t (id,a) values (926,41);
+insert into t (id,a) values (926,42);
+insert into t (id,a) values (926,43);
+insert into t (id,a) values (926,44);
+insert into t (id,a) values (926,45);
+insert into t (id,a) values (926,46);
+insert into t (id,a) values (926,47);
+insert into t (id,a) values (926,48);
+insert into t (id,a) values (926,49);
+insert into t (id,a) values (926,50);
+insert into t (id,a) values (926,51);
+insert into t (id,a) values (926,52);
+insert into t (id,a) values (926,53);
+insert into t (id,a) values (926,54);
+insert into t (id,a) values (926,55);
+insert into t (id,a) values (926,56);
+insert into t (id,a) values (926,57);
+insert into t (id,a) values (926,58);
+insert into t (id,a) values (926,59);
+insert into t (id,a) values (926,60);
+insert into t (id,a) values (926,61);
+insert into t (id,a) values (926,62);
+insert into t (id,a) values (926,63);
+insert into t (id,a) values (926,64);
+insert into t (id,a) values (926,65);
+insert into t (id,a) values (926,66);
+insert into t (id,a) values (926,67);
+insert into t (id,a) values (926,68);
+insert into t (id,a) values (926,69);
+insert into t (id,a) values (926,70);
+insert into t (id,a) values (926,71);
+insert into t (id,a) values (926,72);
+insert into t (id,a) values (926,73);
+insert into t (id,a) values (926,74);
+insert into t (id,a) values (926,75);
+insert into t (id,a) values (926,76);
+insert into t (id,a) values (926,77);
+insert into t (id,a) values (926,78);
+insert into t (id,a) values (926,79);
+insert into t (id,a) values (926,80);
+insert into t (id,a) values (926,81);
+insert into t (id,a) values (926,82);
+insert into t (id,a) values (926,83);
+insert into t (id,a) values (926,84);
+insert into t (id,a) values (926,85);
+insert into t (id,a) values (926,86);
+insert into t (id,a) values (926,87);
+insert into t (id,a) values (926,88);
+insert into t (id,a) values (926,89);
+insert into t (id,a) values (926,90);
+insert into t (id,a) values (926,91);
+insert into t (id,a) values (926,92);
+insert into t (id,a) values (926,93);
+insert into t (id,a) values (926,94);
+insert into t (id,a) values (926,95);
+insert into t (id,a) values (926,96);
+insert into t (id,a) values (926,97);
+insert into t (id,a) values (926,98);
+insert into t (id,a) values (926,99);
+insert into t (id,a) values (927,0);
+insert into t (id,a) values (927,1);
+insert into t (id,a) values (927,2);
+insert into t (id,a) values (927,3);
+insert into t (id,a) values (927,4);
+insert into t (id,a) values (927,5);
+insert into t (id,a) values (927,6);
+insert into t (id,a) values (927,7);
+insert into t (id,a) values (927,8);
+insert into t (id,a) values (927,9);
+insert into t (id,a) values (927,10);
+insert into t (id,a) values (927,11);
+insert into t (id,a) values (927,12);
+insert into t (id,a) values (927,13);
+insert into t (id,a) values (927,14);
+insert into t (id,a) values (927,15);
+insert into t (id,a) values (927,16);
+insert into t (id,a) values (927,17);
+insert into t (id,a) values (927,18);
+insert into t (id,a) values (927,19);
+insert into t (id,a) values (927,20);
+insert into t (id,a) values (927,21);
+insert into t (id,a) values (927,22);
+insert into t (id,a) values (927,23);
+insert into t (id,a) values (927,24);
+insert into t (id,a) values (927,25);
+insert into t (id,a) values (927,26);
+insert into t (id,a) values (927,27);
+insert into t (id,a) values (927,28);
+insert into t (id,a) values (927,29);
+insert into t (id,a) values (927,30);
+insert into t (id,a) values (927,31);
+insert into t (id,a) values (927,32);
+insert into t (id,a) values (927,33);
+insert into t (id,a) values (927,34);
+insert into t (id,a) values (927,35);
+insert into t (id,a) values (927,36);
+insert into t (id,a) values (927,37);
+insert into t (id,a) values (927,38);
+insert into t (id,a) values (927,39);
+insert into t (id,a) values (927,40);
+insert into t (id,a) values (927,41);
+insert into t (id,a) values (927,42);
+insert into t (id,a) values (927,43);
+insert into t (id,a) values (927,44);
+insert into t (id,a) values (927,45);
+insert into t (id,a) values (927,46);
+insert into t (id,a) values (927,47);
+insert into t (id,a) values (927,48);
+insert into t (id,a) values (927,49);
+insert into t (id,a) values (927,50);
+insert into t (id,a) values (927,51);
+insert into t (id,a) values (927,52);
+insert into t (id,a) values (927,53);
+insert into t (id,a) values (927,54);
+insert into t (id,a) values (927,55);
+insert into t (id,a) values (927,56);
+insert into t (id,a) values (927,57);
+insert into t (id,a) values (927,58);
+insert into t (id,a) values (927,59);
+insert into t (id,a) values (927,60);
+insert into t (id,a) values (927,61);
+insert into t (id,a) values (927,62);
+insert into t (id,a) values (927,63);
+insert into t (id,a) values (927,64);
+insert into t (id,a) values (927,65);
+insert into t (id,a) values (927,66);
+insert into t (id,a) values (927,67);
+insert into t (id,a) values (927,68);
+insert into t (id,a) values (927,69);
+insert into t (id,a) values (927,70);
+insert into t (id,a) values (927,71);
+insert into t (id,a) values (927,72);
+insert into t (id,a) values (927,73);
+insert into t (id,a) values (927,74);
+insert into t (id,a) values (927,75);
+insert into t (id,a) values (927,76);
+insert into t (id,a) values (927,77);
+insert into t (id,a) values (927,78);
+insert into t (id,a) values (927,79);
+insert into t (id,a) values (927,80);
+insert into t (id,a) values (927,81);
+insert into t (id,a) values (927,82);
+insert into t (id,a) values (927,83);
+insert into t (id,a) values (927,84);
+insert into t (id,a) values (927,85);
+insert into t (id,a) values (927,86);
+insert into t (id,a) values (927,87);
+insert into t (id,a) values (927,88);
+insert into t (id,a) values (927,89);
+insert into t (id,a) values (927,90);
+insert into t (id,a) values (927,91);
+insert into t (id,a) values (927,92);
+insert into t (id,a) values (927,93);
+insert into t (id,a) values (927,94);
+insert into t (id,a) values (927,95);
+insert into t (id,a) values (927,96);
+insert into t (id,a) values (927,97);
+insert into t (id,a) values (927,98);
+insert into t (id,a) values (927,99);
+insert into t (id,a) values (928,0);
+insert into t (id,a) values (928,1);
+insert into t (id,a) values (928,2);
+insert into t (id,a) values (928,3);
+insert into t (id,a) values (928,4);
+insert into t (id,a) values (928,5);
+insert into t (id,a) values (928,6);
+insert into t (id,a) values (928,7);
+insert into t (id,a) values (928,8);
+insert into t (id,a) values (928,9);
+insert into t (id,a) values (928,10);
+insert into t (id,a) values (928,11);
+insert into t (id,a) values (928,12);
+insert into t (id,a) values (928,13);
+insert into t (id,a) values (928,14);
+insert into t (id,a) values (928,15);
+insert into t (id,a) values (928,16);
+insert into t (id,a) values (928,17);
+insert into t (id,a) values (928,18);
+insert into t (id,a) values (928,19);
+insert into t (id,a) values (928,20);
+insert into t (id,a) values (928,21);
+insert into t (id,a) values (928,22);
+insert into t (id,a) values (928,23);
+insert into t (id,a) values (928,24);
+insert into t (id,a) values (928,25);
+insert into t (id,a) values (928,26);
+insert into t (id,a) values (928,27);
+insert into t (id,a) values (928,28);
+insert into t (id,a) values (928,29);
+insert into t (id,a) values (928,30);
+insert into t (id,a) values (928,31);
+insert into t (id,a) values (928,32);
+insert into t (id,a) values (928,33);
+insert into t (id,a) values (928,34);
+insert into t (id,a) values (928,35);
+insert into t (id,a) values (928,36);
+insert into t (id,a) values (928,37);
+insert into t (id,a) values (928,38);
+insert into t (id,a) values (928,39);
+insert into t (id,a) values (928,40);
+insert into t (id,a) values (928,41);
+insert into t (id,a) values (928,42);
+insert into t (id,a) values (928,43);
+insert into t (id,a) values (928,44);
+insert into t (id,a) values (928,45);
+insert into t (id,a) values (928,46);
+insert into t (id,a) values (928,47);
+insert into t (id,a) values (928,48);
+insert into t (id,a) values (928,49);
+insert into t (id,a) values (928,50);
+insert into t (id,a) values (928,51);
+insert into t (id,a) values (928,52);
+insert into t (id,a) values (928,53);
+insert into t (id,a) values (928,54);
+insert into t (id,a) values (928,55);
+insert into t (id,a) values (928,56);
+insert into t (id,a) values (928,57);
+insert into t (id,a) values (928,58);
+insert into t (id,a) values (928,59);
+insert into t (id,a) values (928,60);
+insert into t (id,a) values (928,61);
+insert into t (id,a) values (928,62);
+insert into t (id,a) values (928,63);
+insert into t (id,a) values (928,64);
+insert into t (id,a) values (928,65);
+insert into t (id,a) values (928,66);
+insert into t (id,a) values (928,67);
+insert into t (id,a) values (928,68);
+insert into t (id,a) values (928,69);
+insert into t (id,a) values (928,70);
+insert into t (id,a) values (928,71);
+insert into t (id,a) values (928,72);
+insert into t (id,a) values (928,73);
+insert into t (id,a) values (928,74);
+insert into t (id,a) values (928,75);
+insert into t (id,a) values (928,76);
+insert into t (id,a) values (928,77);
+insert into t (id,a) values (928,78);
+insert into t (id,a) values (928,79);
+insert into t (id,a) values (928,80);
+insert into t (id,a) values (928,81);
+insert into t (id,a) values (928,82);
+insert into t (id,a) values (928,83);
+insert into t (id,a) values (928,84);
+insert into t (id,a) values (928,85);
+insert into t (id,a) values (928,86);
+insert into t (id,a) values (928,87);
+insert into t (id,a) values (928,88);
+insert into t (id,a) values (928,89);
+insert into t (id,a) values (928,90);
+insert into t (id,a) values (928,91);
+insert into t (id,a) values (928,92);
+insert into t (id,a) values (928,93);
+insert into t (id,a) values (928,94);
+insert into t (id,a) values (928,95);
+insert into t (id,a) values (928,96);
+insert into t (id,a) values (928,97);
+insert into t (id,a) values (928,98);
+insert into t (id,a) values (928,99);
+insert into t (id,a) values (929,0);
+insert into t (id,a) values (929,1);
+insert into t (id,a) values (929,2);
+insert into t (id,a) values (929,3);
+insert into t (id,a) values (929,4);
+insert into t (id,a) values (929,5);
+insert into t (id,a) values (929,6);
+insert into t (id,a) values (929,7);
+insert into t (id,a) values (929,8);
+insert into t (id,a) values (929,9);
+insert into t (id,a) values (929,10);
+insert into t (id,a) values (929,11);
+insert into t (id,a) values (929,12);
+insert into t (id,a) values (929,13);
+insert into t (id,a) values (929,14);
+insert into t (id,a) values (929,15);
+insert into t (id,a) values (929,16);
+insert into t (id,a) values (929,17);
+insert into t (id,a) values (929,18);
+insert into t (id,a) values (929,19);
+insert into t (id,a) values (929,20);
+insert into t (id,a) values (929,21);
+insert into t (id,a) values (929,22);
+insert into t (id,a) values (929,23);
+insert into t (id,a) values (929,24);
+insert into t (id,a) values (929,25);
+insert into t (id,a) values (929,26);
+insert into t (id,a) values (929,27);
+insert into t (id,a) values (929,28);
+insert into t (id,a) values (929,29);
+insert into t (id,a) values (929,30);
+insert into t (id,a) values (929,31);
+insert into t (id,a) values (929,32);
+insert into t (id,a) values (929,33);
+insert into t (id,a) values (929,34);
+insert into t (id,a) values (929,35);
+insert into t (id,a) values (929,36);
+insert into t (id,a) values (929,37);
+insert into t (id,a) values (929,38);
+insert into t (id,a) values (929,39);
+insert into t (id,a) values (929,40);
+insert into t (id,a) values (929,41);
+insert into t (id,a) values (929,42);
+insert into t (id,a) values (929,43);
+insert into t (id,a) values (929,44);
+insert into t (id,a) values (929,45);
+insert into t (id,a) values (929,46);
+insert into t (id,a) values (929,47);
+insert into t (id,a) values (929,48);
+insert into t (id,a) values (929,49);
+insert into t (id,a) values (929,50);
+insert into t (id,a) values (929,51);
+insert into t (id,a) values (929,52);
+insert into t (id,a) values (929,53);
+insert into t (id,a) values (929,54);
+insert into t (id,a) values (929,55);
+insert into t (id,a) values (929,56);
+insert into t (id,a) values (929,57);
+insert into t (id,a) values (929,58);
+insert into t (id,a) values (929,59);
+insert into t (id,a) values (929,60);
+insert into t (id,a) values (929,61);
+insert into t (id,a) values (929,62);
+insert into t (id,a) values (929,63);
+insert into t (id,a) values (929,64);
+insert into t (id,a) values (929,65);
+insert into t (id,a) values (929,66);
+insert into t (id,a) values (929,67);
+insert into t (id,a) values (929,68);
+insert into t (id,a) values (929,69);
+insert into t (id,a) values (929,70);
+insert into t (id,a) values (929,71);
+insert into t (id,a) values (929,72);
+insert into t (id,a) values (929,73);
+insert into t (id,a) values (929,74);
+insert into t (id,a) values (929,75);
+insert into t (id,a) values (929,76);
+insert into t (id,a) values (929,77);
+insert into t (id,a) values (929,78);
+insert into t (id,a) values (929,79);
+insert into t (id,a) values (929,80);
+insert into t (id,a) values (929,81);
+insert into t (id,a) values (929,82);
+insert into t (id,a) values (929,83);
+insert into t (id,a) values (929,84);
+insert into t (id,a) values (929,85);
+insert into t (id,a) values (929,86);
+insert into t (id,a) values (929,87);
+insert into t (id,a) values (929,88);
+insert into t (id,a) values (929,89);
+insert into t (id,a) values (929,90);
+insert into t (id,a) values (929,91);
+insert into t (id,a) values (929,92);
+insert into t (id,a) values (929,93);
+insert into t (id,a) values (929,94);
+insert into t (id,a) values (929,95);
+insert into t (id,a) values (929,96);
+insert into t (id,a) values (929,97);
+insert into t (id,a) values (929,98);
+insert into t (id,a) values (929,99);
+insert into t (id,a) values (930,0);
+insert into t (id,a) values (930,1);
+insert into t (id,a) values (930,2);
+insert into t (id,a) values (930,3);
+insert into t (id,a) values (930,4);
+insert into t (id,a) values (930,5);
+insert into t (id,a) values (930,6);
+insert into t (id,a) values (930,7);
+insert into t (id,a) values (930,8);
+insert into t (id,a) values (930,9);
+insert into t (id,a) values (930,10);
+insert into t (id,a) values (930,11);
+insert into t (id,a) values (930,12);
+insert into t (id,a) values (930,13);
+insert into t (id,a) values (930,14);
+insert into t (id,a) values (930,15);
+insert into t (id,a) values (930,16);
+insert into t (id,a) values (930,17);
+insert into t (id,a) values (930,18);
+insert into t (id,a) values (930,19);
+insert into t (id,a) values (930,20);
+insert into t (id,a) values (930,21);
+insert into t (id,a) values (930,22);
+insert into t (id,a) values (930,23);
+insert into t (id,a) values (930,24);
+insert into t (id,a) values (930,25);
+insert into t (id,a) values (930,26);
+insert into t (id,a) values (930,27);
+insert into t (id,a) values (930,28);
+insert into t (id,a) values (930,29);
+insert into t (id,a) values (930,30);
+insert into t (id,a) values (930,31);
+insert into t (id,a) values (930,32);
+insert into t (id,a) values (930,33);
+insert into t (id,a) values (930,34);
+insert into t (id,a) values (930,35);
+insert into t (id,a) values (930,36);
+insert into t (id,a) values (930,37);
+insert into t (id,a) values (930,38);
+insert into t (id,a) values (930,39);
+insert into t (id,a) values (930,40);
+insert into t (id,a) values (930,41);
+insert into t (id,a) values (930,42);
+insert into t (id,a) values (930,43);
+insert into t (id,a) values (930,44);
+insert into t (id,a) values (930,45);
+insert into t (id,a) values (930,46);
+insert into t (id,a) values (930,47);
+insert into t (id,a) values (930,48);
+insert into t (id,a) values (930,49);
+insert into t (id,a) values (930,50);
+insert into t (id,a) values (930,51);
+insert into t (id,a) values (930,52);
+insert into t (id,a) values (930,53);
+insert into t (id,a) values (930,54);
+insert into t (id,a) values (930,55);
+insert into t (id,a) values (930,56);
+insert into t (id,a) values (930,57);
+insert into t (id,a) values (930,58);
+insert into t (id,a) values (930,59);
+insert into t (id,a) values (930,60);
+insert into t (id,a) values (930,61);
+insert into t (id,a) values (930,62);
+insert into t (id,a) values (930,63);
+insert into t (id,a) values (930,64);
+insert into t (id,a) values (930,65);
+insert into t (id,a) values (930,66);
+insert into t (id,a) values (930,67);
+insert into t (id,a) values (930,68);
+insert into t (id,a) values (930,69);
+insert into t (id,a) values (930,70);
+insert into t (id,a) values (930,71);
+insert into t (id,a) values (930,72);
+insert into t (id,a) values (930,73);
+insert into t (id,a) values (930,74);
+insert into t (id,a) values (930,75);
+insert into t (id,a) values (930,76);
+insert into t (id,a) values (930,77);
+insert into t (id,a) values (930,78);
+insert into t (id,a) values (930,79);
+insert into t (id,a) values (930,80);
+insert into t (id,a) values (930,81);
+insert into t (id,a) values (930,82);
+insert into t (id,a) values (930,83);
+insert into t (id,a) values (930,84);
+insert into t (id,a) values (930,85);
+insert into t (id,a) values (930,86);
+insert into t (id,a) values (930,87);
+insert into t (id,a) values (930,88);
+insert into t (id,a) values (930,89);
+insert into t (id,a) values (930,90);
+insert into t (id,a) values (930,91);
+insert into t (id,a) values (930,92);
+insert into t (id,a) values (930,93);
+insert into t (id,a) values (930,94);
+insert into t (id,a) values (930,95);
+insert into t (id,a) values (930,96);
+insert into t (id,a) values (930,97);
+insert into t (id,a) values (930,98);
+insert into t (id,a) values (930,99);
+insert into t (id,a) values (931,0);
+insert into t (id,a) values (931,1);
+insert into t (id,a) values (931,2);
+insert into t (id,a) values (931,3);
+insert into t (id,a) values (931,4);
+insert into t (id,a) values (931,5);
+insert into t (id,a) values (931,6);
+insert into t (id,a) values (931,7);
+insert into t (id,a) values (931,8);
+insert into t (id,a) values (931,9);
+insert into t (id,a) values (931,10);
+insert into t (id,a) values (931,11);
+insert into t (id,a) values (931,12);
+insert into t (id,a) values (931,13);
+insert into t (id,a) values (931,14);
+insert into t (id,a) values (931,15);
+insert into t (id,a) values (931,16);
+insert into t (id,a) values (931,17);
+insert into t (id,a) values (931,18);
+insert into t (id,a) values (931,19);
+insert into t (id,a) values (931,20);
+insert into t (id,a) values (931,21);
+insert into t (id,a) values (931,22);
+insert into t (id,a) values (931,23);
+insert into t (id,a) values (931,24);
+insert into t (id,a) values (931,25);
+insert into t (id,a) values (931,26);
+insert into t (id,a) values (931,27);
+insert into t (id,a) values (931,28);
+insert into t (id,a) values (931,29);
+insert into t (id,a) values (931,30);
+insert into t (id,a) values (931,31);
+insert into t (id,a) values (931,32);
+insert into t (id,a) values (931,33);
+insert into t (id,a) values (931,34);
+insert into t (id,a) values (931,35);
+insert into t (id,a) values (931,36);
+insert into t (id,a) values (931,37);
+insert into t (id,a) values (931,38);
+insert into t (id,a) values (931,39);
+insert into t (id,a) values (931,40);
+insert into t (id,a) values (931,41);
+insert into t (id,a) values (931,42);
+insert into t (id,a) values (931,43);
+insert into t (id,a) values (931,44);
+insert into t (id,a) values (931,45);
+insert into t (id,a) values (931,46);
+insert into t (id,a) values (931,47);
+insert into t (id,a) values (931,48);
+insert into t (id,a) values (931,49);
+insert into t (id,a) values (931,50);
+insert into t (id,a) values (931,51);
+insert into t (id,a) values (931,52);
+insert into t (id,a) values (931,53);
+insert into t (id,a) values (931,54);
+insert into t (id,a) values (931,55);
+insert into t (id,a) values (931,56);
+insert into t (id,a) values (931,57);
+insert into t (id,a) values (931,58);
+insert into t (id,a) values (931,59);
+insert into t (id,a) values (931,60);
+insert into t (id,a) values (931,61);
+insert into t (id,a) values (931,62);
+insert into t (id,a) values (931,63);
+insert into t (id,a) values (931,64);
+insert into t (id,a) values (931,65);
+insert into t (id,a) values (931,66);
+insert into t (id,a) values (931,67);
+insert into t (id,a) values (931,68);
+insert into t (id,a) values (931,69);
+insert into t (id,a) values (931,70);
+insert into t (id,a) values (931,71);
+insert into t (id,a) values (931,72);
+insert into t (id,a) values (931,73);
+insert into t (id,a) values (931,74);
+insert into t (id,a) values (931,75);
+insert into t (id,a) values (931,76);
+insert into t (id,a) values (931,77);
+insert into t (id,a) values (931,78);
+insert into t (id,a) values (931,79);
+insert into t (id,a) values (931,80);
+insert into t (id,a) values (931,81);
+insert into t (id,a) values (931,82);
+insert into t (id,a) values (931,83);
+insert into t (id,a) values (931,84);
+insert into t (id,a) values (931,85);
+insert into t (id,a) values (931,86);
+insert into t (id,a) values (931,87);
+insert into t (id,a) values (931,88);
+insert into t (id,a) values (931,89);
+insert into t (id,a) values (931,90);
+insert into t (id,a) values (931,91);
+insert into t (id,a) values (931,92);
+insert into t (id,a) values (931,93);
+insert into t (id,a) values (931,94);
+insert into t (id,a) values (931,95);
+insert into t (id,a) values (931,96);
+insert into t (id,a) values (931,97);
+insert into t (id,a) values (931,98);
+insert into t (id,a) values (931,99);
+insert into t (id,a) values (932,0);
+insert into t (id,a) values (932,1);
+insert into t (id,a) values (932,2);
+insert into t (id,a) values (932,3);
+insert into t (id,a) values (932,4);
+insert into t (id,a) values (932,5);
+insert into t (id,a) values (932,6);
+insert into t (id,a) values (932,7);
+insert into t (id,a) values (932,8);
+insert into t (id,a) values (932,9);
+insert into t (id,a) values (932,10);
+insert into t (id,a) values (932,11);
+insert into t (id,a) values (932,12);
+insert into t (id,a) values (932,13);
+insert into t (id,a) values (932,14);
+insert into t (id,a) values (932,15);
+insert into t (id,a) values (932,16);
+insert into t (id,a) values (932,17);
+insert into t (id,a) values (932,18);
+insert into t (id,a) values (932,19);
+insert into t (id,a) values (932,20);
+insert into t (id,a) values (932,21);
+insert into t (id,a) values (932,22);
+insert into t (id,a) values (932,23);
+insert into t (id,a) values (932,24);
+insert into t (id,a) values (932,25);
+insert into t (id,a) values (932,26);
+insert into t (id,a) values (932,27);
+insert into t (id,a) values (932,28);
+insert into t (id,a) values (932,29);
+insert into t (id,a) values (932,30);
+insert into t (id,a) values (932,31);
+insert into t (id,a) values (932,32);
+insert into t (id,a) values (932,33);
+insert into t (id,a) values (932,34);
+insert into t (id,a) values (932,35);
+insert into t (id,a) values (932,36);
+insert into t (id,a) values (932,37);
+insert into t (id,a) values (932,38);
+insert into t (id,a) values (932,39);
+insert into t (id,a) values (932,40);
+insert into t (id,a) values (932,41);
+insert into t (id,a) values (932,42);
+insert into t (id,a) values (932,43);
+insert into t (id,a) values (932,44);
+insert into t (id,a) values (932,45);
+insert into t (id,a) values (932,46);
+insert into t (id,a) values (932,47);
+insert into t (id,a) values (932,48);
+insert into t (id,a) values (932,49);
+insert into t (id,a) values (932,50);
+insert into t (id,a) values (932,51);
+insert into t (id,a) values (932,52);
+insert into t (id,a) values (932,53);
+insert into t (id,a) values (932,54);
+insert into t (id,a) values (932,55);
+insert into t (id,a) values (932,56);
+insert into t (id,a) values (932,57);
+insert into t (id,a) values (932,58);
+insert into t (id,a) values (932,59);
+insert into t (id,a) values (932,60);
+insert into t (id,a) values (932,61);
+insert into t (id,a) values (932,62);
+insert into t (id,a) values (932,63);
+insert into t (id,a) values (932,64);
+insert into t (id,a) values (932,65);
+insert into t (id,a) values (932,66);
+insert into t (id,a) values (932,67);
+insert into t (id,a) values (932,68);
+insert into t (id,a) values (932,69);
+insert into t (id,a) values (932,70);
+insert into t (id,a) values (932,71);
+insert into t (id,a) values (932,72);
+insert into t (id,a) values (932,73);
+insert into t (id,a) values (932,74);
+insert into t (id,a) values (932,75);
+insert into t (id,a) values (932,76);
+insert into t (id,a) values (932,77);
+insert into t (id,a) values (932,78);
+insert into t (id,a) values (932,79);
+insert into t (id,a) values (932,80);
+insert into t (id,a) values (932,81);
+insert into t (id,a) values (932,82);
+insert into t (id,a) values (932,83);
+insert into t (id,a) values (932,84);
+insert into t (id,a) values (932,85);
+insert into t (id,a) values (932,86);
+insert into t (id,a) values (932,87);
+insert into t (id,a) values (932,88);
+insert into t (id,a) values (932,89);
+insert into t (id,a) values (932,90);
+insert into t (id,a) values (932,91);
+insert into t (id,a) values (932,92);
+insert into t (id,a) values (932,93);
+insert into t (id,a) values (932,94);
+insert into t (id,a) values (932,95);
+insert into t (id,a) values (932,96);
+insert into t (id,a) values (932,97);
+insert into t (id,a) values (932,98);
+insert into t (id,a) values (932,99);
+insert into t (id,a) values (933,0);
+insert into t (id,a) values (933,1);
+insert into t (id,a) values (933,2);
+insert into t (id,a) values (933,3);
+insert into t (id,a) values (933,4);
+insert into t (id,a) values (933,5);
+insert into t (id,a) values (933,6);
+insert into t (id,a) values (933,7);
+insert into t (id,a) values (933,8);
+insert into t (id,a) values (933,9);
+insert into t (id,a) values (933,10);
+insert into t (id,a) values (933,11);
+insert into t (id,a) values (933,12);
+insert into t (id,a) values (933,13);
+insert into t (id,a) values (933,14);
+insert into t (id,a) values (933,15);
+insert into t (id,a) values (933,16);
+insert into t (id,a) values (933,17);
+insert into t (id,a) values (933,18);
+insert into t (id,a) values (933,19);
+insert into t (id,a) values (933,20);
+insert into t (id,a) values (933,21);
+insert into t (id,a) values (933,22);
+insert into t (id,a) values (933,23);
+insert into t (id,a) values (933,24);
+insert into t (id,a) values (933,25);
+insert into t (id,a) values (933,26);
+insert into t (id,a) values (933,27);
+insert into t (id,a) values (933,28);
+insert into t (id,a) values (933,29);
+insert into t (id,a) values (933,30);
+insert into t (id,a) values (933,31);
+insert into t (id,a) values (933,32);
+insert into t (id,a) values (933,33);
+insert into t (id,a) values (933,34);
+insert into t (id,a) values (933,35);
+insert into t (id,a) values (933,36);
+insert into t (id,a) values (933,37);
+insert into t (id,a) values (933,38);
+insert into t (id,a) values (933,39);
+insert into t (id,a) values (933,40);
+insert into t (id,a) values (933,41);
+insert into t (id,a) values (933,42);
+insert into t (id,a) values (933,43);
+insert into t (id,a) values (933,44);
+insert into t (id,a) values (933,45);
+insert into t (id,a) values (933,46);
+insert into t (id,a) values (933,47);
+insert into t (id,a) values (933,48);
+insert into t (id,a) values (933,49);
+insert into t (id,a) values (933,50);
+insert into t (id,a) values (933,51);
+insert into t (id,a) values (933,52);
+insert into t (id,a) values (933,53);
+insert into t (id,a) values (933,54);
+insert into t (id,a) values (933,55);
+insert into t (id,a) values (933,56);
+insert into t (id,a) values (933,57);
+insert into t (id,a) values (933,58);
+insert into t (id,a) values (933,59);
+insert into t (id,a) values (933,60);
+insert into t (id,a) values (933,61);
+insert into t (id,a) values (933,62);
+insert into t (id,a) values (933,63);
+insert into t (id,a) values (933,64);
+insert into t (id,a) values (933,65);
+insert into t (id,a) values (933,66);
+insert into t (id,a) values (933,67);
+insert into t (id,a) values (933,68);
+insert into t (id,a) values (933,69);
+insert into t (id,a) values (933,70);
+insert into t (id,a) values (933,71);
+insert into t (id,a) values (933,72);
+insert into t (id,a) values (933,73);
+insert into t (id,a) values (933,74);
+insert into t (id,a) values (933,75);
+insert into t (id,a) values (933,76);
+insert into t (id,a) values (933,77);
+insert into t (id,a) values (933,78);
+insert into t (id,a) values (933,79);
+insert into t (id,a) values (933,80);
+insert into t (id,a) values (933,81);
+insert into t (id,a) values (933,82);
+insert into t (id,a) values (933,83);
+insert into t (id,a) values (933,84);
+insert into t (id,a) values (933,85);
+insert into t (id,a) values (933,86);
+insert into t (id,a) values (933,87);
+insert into t (id,a) values (933,88);
+insert into t (id,a) values (933,89);
+insert into t (id,a) values (933,90);
+insert into t (id,a) values (933,91);
+insert into t (id,a) values (933,92);
+insert into t (id,a) values (933,93);
+insert into t (id,a) values (933,94);
+insert into t (id,a) values (933,95);
+insert into t (id,a) values (933,96);
+insert into t (id,a) values (933,97);
+insert into t (id,a) values (933,98);
+insert into t (id,a) values (933,99);
+insert into t (id,a) values (934,0);
+insert into t (id,a) values (934,1);
+insert into t (id,a) values (934,2);
+insert into t (id,a) values (934,3);
+insert into t (id,a) values (934,4);
+insert into t (id,a) values (934,5);
+insert into t (id,a) values (934,6);
+insert into t (id,a) values (934,7);
+insert into t (id,a) values (934,8);
+insert into t (id,a) values (934,9);
+insert into t (id,a) values (934,10);
+insert into t (id,a) values (934,11);
+insert into t (id,a) values (934,12);
+insert into t (id,a) values (934,13);
+insert into t (id,a) values (934,14);
+insert into t (id,a) values (934,15);
+insert into t (id,a) values (934,16);
+insert into t (id,a) values (934,17);
+insert into t (id,a) values (934,18);
+insert into t (id,a) values (934,19);
+insert into t (id,a) values (934,20);
+insert into t (id,a) values (934,21);
+insert into t (id,a) values (934,22);
+insert into t (id,a) values (934,23);
+insert into t (id,a) values (934,24);
+insert into t (id,a) values (934,25);
+insert into t (id,a) values (934,26);
+insert into t (id,a) values (934,27);
+insert into t (id,a) values (934,28);
+insert into t (id,a) values (934,29);
+insert into t (id,a) values (934,30);
+insert into t (id,a) values (934,31);
+insert into t (id,a) values (934,32);
+insert into t (id,a) values (934,33);
+insert into t (id,a) values (934,34);
+insert into t (id,a) values (934,35);
+insert into t (id,a) values (934,36);
+insert into t (id,a) values (934,37);
+insert into t (id,a) values (934,38);
+insert into t (id,a) values (934,39);
+insert into t (id,a) values (934,40);
+insert into t (id,a) values (934,41);
+insert into t (id,a) values (934,42);
+insert into t (id,a) values (934,43);
+insert into t (id,a) values (934,44);
+insert into t (id,a) values (934,45);
+insert into t (id,a) values (934,46);
+insert into t (id,a) values (934,47);
+insert into t (id,a) values (934,48);
+insert into t (id,a) values (934,49);
+insert into t (id,a) values (934,50);
+insert into t (id,a) values (934,51);
+insert into t (id,a) values (934,52);
+insert into t (id,a) values (934,53);
+insert into t (id,a) values (934,54);
+insert into t (id,a) values (934,55);
+insert into t (id,a) values (934,56);
+insert into t (id,a) values (934,57);
+insert into t (id,a) values (934,58);
+insert into t (id,a) values (934,59);
+insert into t (id,a) values (934,60);
+insert into t (id,a) values (934,61);
+insert into t (id,a) values (934,62);
+insert into t (id,a) values (934,63);
+insert into t (id,a) values (934,64);
+insert into t (id,a) values (934,65);
+insert into t (id,a) values (934,66);
+insert into t (id,a) values (934,67);
+insert into t (id,a) values (934,68);
+insert into t (id,a) values (934,69);
+insert into t (id,a) values (934,70);
+insert into t (id,a) values (934,71);
+insert into t (id,a) values (934,72);
+insert into t (id,a) values (934,73);
+insert into t (id,a) values (934,74);
+insert into t (id,a) values (934,75);
+insert into t (id,a) values (934,76);
+insert into t (id,a) values (934,77);
+insert into t (id,a) values (934,78);
+insert into t (id,a) values (934,79);
+insert into t (id,a) values (934,80);
+insert into t (id,a) values (934,81);
+insert into t (id,a) values (934,82);
+insert into t (id,a) values (934,83);
+insert into t (id,a) values (934,84);
+insert into t (id,a) values (934,85);
+insert into t (id,a) values (934,86);
+insert into t (id,a) values (934,87);
+insert into t (id,a) values (934,88);
+insert into t (id,a) values (934,89);
+insert into t (id,a) values (934,90);
+insert into t (id,a) values (934,91);
+insert into t (id,a) values (934,92);
+insert into t (id,a) values (934,93);
+insert into t (id,a) values (934,94);
+insert into t (id,a) values (934,95);
+insert into t (id,a) values (934,96);
+insert into t (id,a) values (934,97);
+insert into t (id,a) values (934,98);
+insert into t (id,a) values (934,99);
+insert into t (id,a) values (935,0);
+insert into t (id,a) values (935,1);
+insert into t (id,a) values (935,2);
+insert into t (id,a) values (935,3);
+insert into t (id,a) values (935,4);
+insert into t (id,a) values (935,5);
+insert into t (id,a) values (935,6);
+insert into t (id,a) values (935,7);
+insert into t (id,a) values (935,8);
+insert into t (id,a) values (935,9);
+insert into t (id,a) values (935,10);
+insert into t (id,a) values (935,11);
+insert into t (id,a) values (935,12);
+insert into t (id,a) values (935,13);
+insert into t (id,a) values (935,14);
+insert into t (id,a) values (935,15);
+insert into t (id,a) values (935,16);
+insert into t (id,a) values (935,17);
+insert into t (id,a) values (935,18);
+insert into t (id,a) values (935,19);
+insert into t (id,a) values (935,20);
+insert into t (id,a) values (935,21);
+insert into t (id,a) values (935,22);
+insert into t (id,a) values (935,23);
+insert into t (id,a) values (935,24);
+insert into t (id,a) values (935,25);
+insert into t (id,a) values (935,26);
+insert into t (id,a) values (935,27);
+insert into t (id,a) values (935,28);
+insert into t (id,a) values (935,29);
+insert into t (id,a) values (935,30);
+insert into t (id,a) values (935,31);
+insert into t (id,a) values (935,32);
+insert into t (id,a) values (935,33);
+insert into t (id,a) values (935,34);
+insert into t (id,a) values (935,35);
+insert into t (id,a) values (935,36);
+insert into t (id,a) values (935,37);
+insert into t (id,a) values (935,38);
+insert into t (id,a) values (935,39);
+insert into t (id,a) values (935,40);
+insert into t (id,a) values (935,41);
+insert into t (id,a) values (935,42);
+insert into t (id,a) values (935,43);
+insert into t (id,a) values (935,44);
+insert into t (id,a) values (935,45);
+insert into t (id,a) values (935,46);
+insert into t (id,a) values (935,47);
+insert into t (id,a) values (935,48);
+insert into t (id,a) values (935,49);
+insert into t (id,a) values (935,50);
+insert into t (id,a) values (935,51);
+insert into t (id,a) values (935,52);
+insert into t (id,a) values (935,53);
+insert into t (id,a) values (935,54);
+insert into t (id,a) values (935,55);
+insert into t (id,a) values (935,56);
+insert into t (id,a) values (935,57);
+insert into t (id,a) values (935,58);
+insert into t (id,a) values (935,59);
+insert into t (id,a) values (935,60);
+insert into t (id,a) values (935,61);
+insert into t (id,a) values (935,62);
+insert into t (id,a) values (935,63);
+insert into t (id,a) values (935,64);
+insert into t (id,a) values (935,65);
+insert into t (id,a) values (935,66);
+insert into t (id,a) values (935,67);
+insert into t (id,a) values (935,68);
+insert into t (id,a) values (935,69);
+insert into t (id,a) values (935,70);
+insert into t (id,a) values (935,71);
+insert into t (id,a) values (935,72);
+insert into t (id,a) values (935,73);
+insert into t (id,a) values (935,74);
+insert into t (id,a) values (935,75);
+insert into t (id,a) values (935,76);
+insert into t (id,a) values (935,77);
+insert into t (id,a) values (935,78);
+insert into t (id,a) values (935,79);
+insert into t (id,a) values (935,80);
+insert into t (id,a) values (935,81);
+insert into t (id,a) values (935,82);
+insert into t (id,a) values (935,83);
+insert into t (id,a) values (935,84);
+insert into t (id,a) values (935,85);
+insert into t (id,a) values (935,86);
+insert into t (id,a) values (935,87);
+insert into t (id,a) values (935,88);
+insert into t (id,a) values (935,89);
+insert into t (id,a) values (935,90);
+insert into t (id,a) values (935,91);
+insert into t (id,a) values (935,92);
+insert into t (id,a) values (935,93);
+insert into t (id,a) values (935,94);
+insert into t (id,a) values (935,95);
+insert into t (id,a) values (935,96);
+insert into t (id,a) values (935,97);
+insert into t (id,a) values (935,98);
+insert into t (id,a) values (935,99);
+insert into t (id,a) values (936,0);
+insert into t (id,a) values (936,1);
+insert into t (id,a) values (936,2);
+insert into t (id,a) values (936,3);
+insert into t (id,a) values (936,4);
+insert into t (id,a) values (936,5);
+insert into t (id,a) values (936,6);
+insert into t (id,a) values (936,7);
+insert into t (id,a) values (936,8);
+insert into t (id,a) values (936,9);
+insert into t (id,a) values (936,10);
+insert into t (id,a) values (936,11);
+insert into t (id,a) values (936,12);
+insert into t (id,a) values (936,13);
+insert into t (id,a) values (936,14);
+insert into t (id,a) values (936,15);
+insert into t (id,a) values (936,16);
+insert into t (id,a) values (936,17);
+insert into t (id,a) values (936,18);
+insert into t (id,a) values (936,19);
+insert into t (id,a) values (936,20);
+insert into t (id,a) values (936,21);
+insert into t (id,a) values (936,22);
+insert into t (id,a) values (936,23);
+insert into t (id,a) values (936,24);
+insert into t (id,a) values (936,25);
+insert into t (id,a) values (936,26);
+insert into t (id,a) values (936,27);
+insert into t (id,a) values (936,28);
+insert into t (id,a) values (936,29);
+insert into t (id,a) values (936,30);
+insert into t (id,a) values (936,31);
+insert into t (id,a) values (936,32);
+insert into t (id,a) values (936,33);
+insert into t (id,a) values (936,34);
+insert into t (id,a) values (936,35);
+insert into t (id,a) values (936,36);
+insert into t (id,a) values (936,37);
+insert into t (id,a) values (936,38);
+insert into t (id,a) values (936,39);
+insert into t (id,a) values (936,40);
+insert into t (id,a) values (936,41);
+insert into t (id,a) values (936,42);
+insert into t (id,a) values (936,43);
+insert into t (id,a) values (936,44);
+insert into t (id,a) values (936,45);
+insert into t (id,a) values (936,46);
+insert into t (id,a) values (936,47);
+insert into t (id,a) values (936,48);
+insert into t (id,a) values (936,49);
+insert into t (id,a) values (936,50);
+insert into t (id,a) values (936,51);
+insert into t (id,a) values (936,52);
+insert into t (id,a) values (936,53);
+insert into t (id,a) values (936,54);
+insert into t (id,a) values (936,55);
+insert into t (id,a) values (936,56);
+insert into t (id,a) values (936,57);
+insert into t (id,a) values (936,58);
+insert into t (id,a) values (936,59);
+insert into t (id,a) values (936,60);
+insert into t (id,a) values (936,61);
+insert into t (id,a) values (936,62);
+insert into t (id,a) values (936,63);
+insert into t (id,a) values (936,64);
+insert into t (id,a) values (936,65);
+insert into t (id,a) values (936,66);
+insert into t (id,a) values (936,67);
+insert into t (id,a) values (936,68);
+insert into t (id,a) values (936,69);
+insert into t (id,a) values (936,70);
+insert into t (id,a) values (936,71);
+insert into t (id,a) values (936,72);
+insert into t (id,a) values (936,73);
+insert into t (id,a) values (936,74);
+insert into t (id,a) values (936,75);
+insert into t (id,a) values (936,76);
+insert into t (id,a) values (936,77);
+insert into t (id,a) values (936,78);
+insert into t (id,a) values (936,79);
+insert into t (id,a) values (936,80);
+insert into t (id,a) values (936,81);
+insert into t (id,a) values (936,82);
+insert into t (id,a) values (936,83);
+insert into t (id,a) values (936,84);
+insert into t (id,a) values (936,85);
+insert into t (id,a) values (936,86);
+insert into t (id,a) values (936,87);
+insert into t (id,a) values (936,88);
+insert into t (id,a) values (936,89);
+insert into t (id,a) values (936,90);
+insert into t (id,a) values (936,91);
+insert into t (id,a) values (936,92);
+insert into t (id,a) values (936,93);
+insert into t (id,a) values (936,94);
+insert into t (id,a) values (936,95);
+insert into t (id,a) values (936,96);
+insert into t (id,a) values (936,97);
+insert into t (id,a) values (936,98);
+insert into t (id,a) values (936,99);
+insert into t (id,a) values (937,0);
+insert into t (id,a) values (937,1);
+insert into t (id,a) values (937,2);
+insert into t (id,a) values (937,3);
+insert into t (id,a) values (937,4);
+insert into t (id,a) values (937,5);
+insert into t (id,a) values (937,6);
+insert into t (id,a) values (937,7);
+insert into t (id,a) values (937,8);
+insert into t (id,a) values (937,9);
+insert into t (id,a) values (937,10);
+insert into t (id,a) values (937,11);
+insert into t (id,a) values (937,12);
+insert into t (id,a) values (937,13);
+insert into t (id,a) values (937,14);
+insert into t (id,a) values (937,15);
+insert into t (id,a) values (937,16);
+insert into t (id,a) values (937,17);
+insert into t (id,a) values (937,18);
+insert into t (id,a) values (937,19);
+insert into t (id,a) values (937,20);
+insert into t (id,a) values (937,21);
+insert into t (id,a) values (937,22);
+insert into t (id,a) values (937,23);
+insert into t (id,a) values (937,24);
+insert into t (id,a) values (937,25);
+insert into t (id,a) values (937,26);
+insert into t (id,a) values (937,27);
+insert into t (id,a) values (937,28);
+insert into t (id,a) values (937,29);
+insert into t (id,a) values (937,30);
+insert into t (id,a) values (937,31);
+insert into t (id,a) values (937,32);
+insert into t (id,a) values (937,33);
+insert into t (id,a) values (937,34);
+insert into t (id,a) values (937,35);
+insert into t (id,a) values (937,36);
+insert into t (id,a) values (937,37);
+insert into t (id,a) values (937,38);
+insert into t (id,a) values (937,39);
+insert into t (id,a) values (937,40);
+insert into t (id,a) values (937,41);
+insert into t (id,a) values (937,42);
+insert into t (id,a) values (937,43);
+insert into t (id,a) values (937,44);
+insert into t (id,a) values (937,45);
+insert into t (id,a) values (937,46);
+insert into t (id,a) values (937,47);
+insert into t (id,a) values (937,48);
+insert into t (id,a) values (937,49);
+insert into t (id,a) values (937,50);
+insert into t (id,a) values (937,51);
+insert into t (id,a) values (937,52);
+insert into t (id,a) values (937,53);
+insert into t (id,a) values (937,54);
+insert into t (id,a) values (937,55);
+insert into t (id,a) values (937,56);
+insert into t (id,a) values (937,57);
+insert into t (id,a) values (937,58);
+insert into t (id,a) values (937,59);
+insert into t (id,a) values (937,60);
+insert into t (id,a) values (937,61);
+insert into t (id,a) values (937,62);
+insert into t (id,a) values (937,63);
+insert into t (id,a) values (937,64);
+insert into t (id,a) values (937,65);
+insert into t (id,a) values (937,66);
+insert into t (id,a) values (937,67);
+insert into t (id,a) values (937,68);
+insert into t (id,a) values (937,69);
+insert into t (id,a) values (937,70);
+insert into t (id,a) values (937,71);
+insert into t (id,a) values (937,72);
+insert into t (id,a) values (937,73);
+insert into t (id,a) values (937,74);
+insert into t (id,a) values (937,75);
+insert into t (id,a) values (937,76);
+insert into t (id,a) values (937,77);
+insert into t (id,a) values (937,78);
+insert into t (id,a) values (937,79);
+insert into t (id,a) values (937,80);
+insert into t (id,a) values (937,81);
+insert into t (id,a) values (937,82);
+insert into t (id,a) values (937,83);
+insert into t (id,a) values (937,84);
+insert into t (id,a) values (937,85);
+insert into t (id,a) values (937,86);
+insert into t (id,a) values (937,87);
+insert into t (id,a) values (937,88);
+insert into t (id,a) values (937,89);
+insert into t (id,a) values (937,90);
+insert into t (id,a) values (937,91);
+insert into t (id,a) values (937,92);
+insert into t (id,a) values (937,93);
+insert into t (id,a) values (937,94);
+insert into t (id,a) values (937,95);
+insert into t (id,a) values (937,96);
+insert into t (id,a) values (937,97);
+insert into t (id,a) values (937,98);
+insert into t (id,a) values (937,99);
+insert into t (id,a) values (938,0);
+insert into t (id,a) values (938,1);
+insert into t (id,a) values (938,2);
+insert into t (id,a) values (938,3);
+insert into t (id,a) values (938,4);
+insert into t (id,a) values (938,5);
+insert into t (id,a) values (938,6);
+insert into t (id,a) values (938,7);
+insert into t (id,a) values (938,8);
+insert into t (id,a) values (938,9);
+insert into t (id,a) values (938,10);
+insert into t (id,a) values (938,11);
+insert into t (id,a) values (938,12);
+insert into t (id,a) values (938,13);
+insert into t (id,a) values (938,14);
+insert into t (id,a) values (938,15);
+insert into t (id,a) values (938,16);
+insert into t (id,a) values (938,17);
+insert into t (id,a) values (938,18);
+insert into t (id,a) values (938,19);
+insert into t (id,a) values (938,20);
+insert into t (id,a) values (938,21);
+insert into t (id,a) values (938,22);
+insert into t (id,a) values (938,23);
+insert into t (id,a) values (938,24);
+insert into t (id,a) values (938,25);
+insert into t (id,a) values (938,26);
+insert into t (id,a) values (938,27);
+insert into t (id,a) values (938,28);
+insert into t (id,a) values (938,29);
+insert into t (id,a) values (938,30);
+insert into t (id,a) values (938,31);
+insert into t (id,a) values (938,32);
+insert into t (id,a) values (938,33);
+insert into t (id,a) values (938,34);
+insert into t (id,a) values (938,35);
+insert into t (id,a) values (938,36);
+insert into t (id,a) values (938,37);
+insert into t (id,a) values (938,38);
+insert into t (id,a) values (938,39);
+insert into t (id,a) values (938,40);
+insert into t (id,a) values (938,41);
+insert into t (id,a) values (938,42);
+insert into t (id,a) values (938,43);
+insert into t (id,a) values (938,44);
+insert into t (id,a) values (938,45);
+insert into t (id,a) values (938,46);
+insert into t (id,a) values (938,47);
+insert into t (id,a) values (938,48);
+insert into t (id,a) values (938,49);
+insert into t (id,a) values (938,50);
+insert into t (id,a) values (938,51);
+insert into t (id,a) values (938,52);
+insert into t (id,a) values (938,53);
+insert into t (id,a) values (938,54);
+insert into t (id,a) values (938,55);
+insert into t (id,a) values (938,56);
+insert into t (id,a) values (938,57);
+insert into t (id,a) values (938,58);
+insert into t (id,a) values (938,59);
+insert into t (id,a) values (938,60);
+insert into t (id,a) values (938,61);
+insert into t (id,a) values (938,62);
+insert into t (id,a) values (938,63);
+insert into t (id,a) values (938,64);
+insert into t (id,a) values (938,65);
+insert into t (id,a) values (938,66);
+insert into t (id,a) values (938,67);
+insert into t (id,a) values (938,68);
+insert into t (id,a) values (938,69);
+insert into t (id,a) values (938,70);
+insert into t (id,a) values (938,71);
+insert into t (id,a) values (938,72);
+insert into t (id,a) values (938,73);
+insert into t (id,a) values (938,74);
+insert into t (id,a) values (938,75);
+insert into t (id,a) values (938,76);
+insert into t (id,a) values (938,77);
+insert into t (id,a) values (938,78);
+insert into t (id,a) values (938,79);
+insert into t (id,a) values (938,80);
+insert into t (id,a) values (938,81);
+insert into t (id,a) values (938,82);
+insert into t (id,a) values (938,83);
+insert into t (id,a) values (938,84);
+insert into t (id,a) values (938,85);
+insert into t (id,a) values (938,86);
+insert into t (id,a) values (938,87);
+insert into t (id,a) values (938,88);
+insert into t (id,a) values (938,89);
+insert into t (id,a) values (938,90);
+insert into t (id,a) values (938,91);
+insert into t (id,a) values (938,92);
+insert into t (id,a) values (938,93);
+insert into t (id,a) values (938,94);
+insert into t (id,a) values (938,95);
+insert into t (id,a) values (938,96);
+insert into t (id,a) values (938,97);
+insert into t (id,a) values (938,98);
+insert into t (id,a) values (938,99);
+insert into t (id,a) values (939,0);
+insert into t (id,a) values (939,1);
+insert into t (id,a) values (939,2);
+insert into t (id,a) values (939,3);
+insert into t (id,a) values (939,4);
+insert into t (id,a) values (939,5);
+insert into t (id,a) values (939,6);
+insert into t (id,a) values (939,7);
+insert into t (id,a) values (939,8);
+insert into t (id,a) values (939,9);
+insert into t (id,a) values (939,10);
+insert into t (id,a) values (939,11);
+insert into t (id,a) values (939,12);
+insert into t (id,a) values (939,13);
+insert into t (id,a) values (939,14);
+insert into t (id,a) values (939,15);
+insert into t (id,a) values (939,16);
+insert into t (id,a) values (939,17);
+insert into t (id,a) values (939,18);
+insert into t (id,a) values (939,19);
+insert into t (id,a) values (939,20);
+insert into t (id,a) values (939,21);
+insert into t (id,a) values (939,22);
+insert into t (id,a) values (939,23);
+insert into t (id,a) values (939,24);
+insert into t (id,a) values (939,25);
+insert into t (id,a) values (939,26);
+insert into t (id,a) values (939,27);
+insert into t (id,a) values (939,28);
+insert into t (id,a) values (939,29);
+insert into t (id,a) values (939,30);
+insert into t (id,a) values (939,31);
+insert into t (id,a) values (939,32);
+insert into t (id,a) values (939,33);
+insert into t (id,a) values (939,34);
+insert into t (id,a) values (939,35);
+insert into t (id,a) values (939,36);
+insert into t (id,a) values (939,37);
+insert into t (id,a) values (939,38);
+insert into t (id,a) values (939,39);
+insert into t (id,a) values (939,40);
+insert into t (id,a) values (939,41);
+insert into t (id,a) values (939,42);
+insert into t (id,a) values (939,43);
+insert into t (id,a) values (939,44);
+insert into t (id,a) values (939,45);
+insert into t (id,a) values (939,46);
+insert into t (id,a) values (939,47);
+insert into t (id,a) values (939,48);
+insert into t (id,a) values (939,49);
+insert into t (id,a) values (939,50);
+insert into t (id,a) values (939,51);
+insert into t (id,a) values (939,52);
+insert into t (id,a) values (939,53);
+insert into t (id,a) values (939,54);
+insert into t (id,a) values (939,55);
+insert into t (id,a) values (939,56);
+insert into t (id,a) values (939,57);
+insert into t (id,a) values (939,58);
+insert into t (id,a) values (939,59);
+insert into t (id,a) values (939,60);
+insert into t (id,a) values (939,61);
+insert into t (id,a) values (939,62);
+insert into t (id,a) values (939,63);
+insert into t (id,a) values (939,64);
+insert into t (id,a) values (939,65);
+insert into t (id,a) values (939,66);
+insert into t (id,a) values (939,67);
+insert into t (id,a) values (939,68);
+insert into t (id,a) values (939,69);
+insert into t (id,a) values (939,70);
+insert into t (id,a) values (939,71);
+insert into t (id,a) values (939,72);
+insert into t (id,a) values (939,73);
+insert into t (id,a) values (939,74);
+insert into t (id,a) values (939,75);
+insert into t (id,a) values (939,76);
+insert into t (id,a) values (939,77);
+insert into t (id,a) values (939,78);
+insert into t (id,a) values (939,79);
+insert into t (id,a) values (939,80);
+insert into t (id,a) values (939,81);
+insert into t (id,a) values (939,82);
+insert into t (id,a) values (939,83);
+insert into t (id,a) values (939,84);
+insert into t (id,a) values (939,85);
+insert into t (id,a) values (939,86);
+insert into t (id,a) values (939,87);
+insert into t (id,a) values (939,88);
+insert into t (id,a) values (939,89);
+insert into t (id,a) values (939,90);
+insert into t (id,a) values (939,91);
+insert into t (id,a) values (939,92);
+insert into t (id,a) values (939,93);
+insert into t (id,a) values (939,94);
+insert into t (id,a) values (939,95);
+insert into t (id,a) values (939,96);
+insert into t (id,a) values (939,97);
+insert into t (id,a) values (939,98);
+insert into t (id,a) values (939,99);
+insert into t (id,a) values (940,0);
+insert into t (id,a) values (940,1);
+insert into t (id,a) values (940,2);
+insert into t (id,a) values (940,3);
+insert into t (id,a) values (940,4);
+insert into t (id,a) values (940,5);
+insert into t (id,a) values (940,6);
+insert into t (id,a) values (940,7);
+insert into t (id,a) values (940,8);
+insert into t (id,a) values (940,9);
+insert into t (id,a) values (940,10);
+insert into t (id,a) values (940,11);
+insert into t (id,a) values (940,12);
+insert into t (id,a) values (940,13);
+insert into t (id,a) values (940,14);
+insert into t (id,a) values (940,15);
+insert into t (id,a) values (940,16);
+insert into t (id,a) values (940,17);
+insert into t (id,a) values (940,18);
+insert into t (id,a) values (940,19);
+insert into t (id,a) values (940,20);
+insert into t (id,a) values (940,21);
+insert into t (id,a) values (940,22);
+insert into t (id,a) values (940,23);
+insert into t (id,a) values (940,24);
+insert into t (id,a) values (940,25);
+insert into t (id,a) values (940,26);
+insert into t (id,a) values (940,27);
+insert into t (id,a) values (940,28);
+insert into t (id,a) values (940,29);
+insert into t (id,a) values (940,30);
+insert into t (id,a) values (940,31);
+insert into t (id,a) values (940,32);
+insert into t (id,a) values (940,33);
+insert into t (id,a) values (940,34);
+insert into t (id,a) values (940,35);
+insert into t (id,a) values (940,36);
+insert into t (id,a) values (940,37);
+insert into t (id,a) values (940,38);
+insert into t (id,a) values (940,39);
+insert into t (id,a) values (940,40);
+insert into t (id,a) values (940,41);
+insert into t (id,a) values (940,42);
+insert into t (id,a) values (940,43);
+insert into t (id,a) values (940,44);
+insert into t (id,a) values (940,45);
+insert into t (id,a) values (940,46);
+insert into t (id,a) values (940,47);
+insert into t (id,a) values (940,48);
+insert into t (id,a) values (940,49);
+insert into t (id,a) values (940,50);
+insert into t (id,a) values (940,51);
+insert into t (id,a) values (940,52);
+insert into t (id,a) values (940,53);
+insert into t (id,a) values (940,54);
+insert into t (id,a) values (940,55);
+insert into t (id,a) values (940,56);
+insert into t (id,a) values (940,57);
+insert into t (id,a) values (940,58);
+insert into t (id,a) values (940,59);
+insert into t (id,a) values (940,60);
+insert into t (id,a) values (940,61);
+insert into t (id,a) values (940,62);
+insert into t (id,a) values (940,63);
+insert into t (id,a) values (940,64);
+insert into t (id,a) values (940,65);
+insert into t (id,a) values (940,66);
+insert into t (id,a) values (940,67);
+insert into t (id,a) values (940,68);
+insert into t (id,a) values (940,69);
+insert into t (id,a) values (940,70);
+insert into t (id,a) values (940,71);
+insert into t (id,a) values (940,72);
+insert into t (id,a) values (940,73);
+insert into t (id,a) values (940,74);
+insert into t (id,a) values (940,75);
+insert into t (id,a) values (940,76);
+insert into t (id,a) values (940,77);
+insert into t (id,a) values (940,78);
+insert into t (id,a) values (940,79);
+insert into t (id,a) values (940,80);
+insert into t (id,a) values (940,81);
+insert into t (id,a) values (940,82);
+insert into t (id,a) values (940,83);
+insert into t (id,a) values (940,84);
+insert into t (id,a) values (940,85);
+insert into t (id,a) values (940,86);
+insert into t (id,a) values (940,87);
+insert into t (id,a) values (940,88);
+insert into t (id,a) values (940,89);
+insert into t (id,a) values (940,90);
+insert into t (id,a) values (940,91);
+insert into t (id,a) values (940,92);
+insert into t (id,a) values (940,93);
+insert into t (id,a) values (940,94);
+insert into t (id,a) values (940,95);
+insert into t (id,a) values (940,96);
+insert into t (id,a) values (940,97);
+insert into t (id,a) values (940,98);
+insert into t (id,a) values (940,99);
+insert into t (id,a) values (941,0);
+insert into t (id,a) values (941,1);
+insert into t (id,a) values (941,2);
+insert into t (id,a) values (941,3);
+insert into t (id,a) values (941,4);
+insert into t (id,a) values (941,5);
+insert into t (id,a) values (941,6);
+insert into t (id,a) values (941,7);
+insert into t (id,a) values (941,8);
+insert into t (id,a) values (941,9);
+insert into t (id,a) values (941,10);
+insert into t (id,a) values (941,11);
+insert into t (id,a) values (941,12);
+insert into t (id,a) values (941,13);
+insert into t (id,a) values (941,14);
+insert into t (id,a) values (941,15);
+insert into t (id,a) values (941,16);
+insert into t (id,a) values (941,17);
+insert into t (id,a) values (941,18);
+insert into t (id,a) values (941,19);
+insert into t (id,a) values (941,20);
+insert into t (id,a) values (941,21);
+insert into t (id,a) values (941,22);
+insert into t (id,a) values (941,23);
+insert into t (id,a) values (941,24);
+insert into t (id,a) values (941,25);
+insert into t (id,a) values (941,26);
+insert into t (id,a) values (941,27);
+insert into t (id,a) values (941,28);
+insert into t (id,a) values (941,29);
+insert into t (id,a) values (941,30);
+insert into t (id,a) values (941,31);
+insert into t (id,a) values (941,32);
+insert into t (id,a) values (941,33);
+insert into t (id,a) values (941,34);
+insert into t (id,a) values (941,35);
+insert into t (id,a) values (941,36);
+insert into t (id,a) values (941,37);
+insert into t (id,a) values (941,38);
+insert into t (id,a) values (941,39);
+insert into t (id,a) values (941,40);
+insert into t (id,a) values (941,41);
+insert into t (id,a) values (941,42);
+insert into t (id,a) values (941,43);
+insert into t (id,a) values (941,44);
+insert into t (id,a) values (941,45);
+insert into t (id,a) values (941,46);
+insert into t (id,a) values (941,47);
+insert into t (id,a) values (941,48);
+insert into t (id,a) values (941,49);
+insert into t (id,a) values (941,50);
+insert into t (id,a) values (941,51);
+insert into t (id,a) values (941,52);
+insert into t (id,a) values (941,53);
+insert into t (id,a) values (941,54);
+insert into t (id,a) values (941,55);
+insert into t (id,a) values (941,56);
+insert into t (id,a) values (941,57);
+insert into t (id,a) values (941,58);
+insert into t (id,a) values (941,59);
+insert into t (id,a) values (941,60);
+insert into t (id,a) values (941,61);
+insert into t (id,a) values (941,62);
+insert into t (id,a) values (941,63);
+insert into t (id,a) values (941,64);
+insert into t (id,a) values (941,65);
+insert into t (id,a) values (941,66);
+insert into t (id,a) values (941,67);
+insert into t (id,a) values (941,68);
+insert into t (id,a) values (941,69);
+insert into t (id,a) values (941,70);
+insert into t (id,a) values (941,71);
+insert into t (id,a) values (941,72);
+insert into t (id,a) values (941,73);
+insert into t (id,a) values (941,74);
+insert into t (id,a) values (941,75);
+insert into t (id,a) values (941,76);
+insert into t (id,a) values (941,77);
+insert into t (id,a) values (941,78);
+insert into t (id,a) values (941,79);
+insert into t (id,a) values (941,80);
+insert into t (id,a) values (941,81);
+insert into t (id,a) values (941,82);
+insert into t (id,a) values (941,83);
+insert into t (id,a) values (941,84);
+insert into t (id,a) values (941,85);
+insert into t (id,a) values (941,86);
+insert into t (id,a) values (941,87);
+insert into t (id,a) values (941,88);
+insert into t (id,a) values (941,89);
+insert into t (id,a) values (941,90);
+insert into t (id,a) values (941,91);
+insert into t (id,a) values (941,92);
+insert into t (id,a) values (941,93);
+insert into t (id,a) values (941,94);
+insert into t (id,a) values (941,95);
+insert into t (id,a) values (941,96);
+insert into t (id,a) values (941,97);
+insert into t (id,a) values (941,98);
+insert into t (id,a) values (941,99);
+insert into t (id,a) values (942,0);
+insert into t (id,a) values (942,1);
+insert into t (id,a) values (942,2);
+insert into t (id,a) values (942,3);
+insert into t (id,a) values (942,4);
+insert into t (id,a) values (942,5);
+insert into t (id,a) values (942,6);
+insert into t (id,a) values (942,7);
+insert into t (id,a) values (942,8);
+insert into t (id,a) values (942,9);
+insert into t (id,a) values (942,10);
+insert into t (id,a) values (942,11);
+insert into t (id,a) values (942,12);
+insert into t (id,a) values (942,13);
+insert into t (id,a) values (942,14);
+insert into t (id,a) values (942,15);
+insert into t (id,a) values (942,16);
+insert into t (id,a) values (942,17);
+insert into t (id,a) values (942,18);
+insert into t (id,a) values (942,19);
+insert into t (id,a) values (942,20);
+insert into t (id,a) values (942,21);
+insert into t (id,a) values (942,22);
+insert into t (id,a) values (942,23);
+insert into t (id,a) values (942,24);
+insert into t (id,a) values (942,25);
+insert into t (id,a) values (942,26);
+insert into t (id,a) values (942,27);
+insert into t (id,a) values (942,28);
+insert into t (id,a) values (942,29);
+insert into t (id,a) values (942,30);
+insert into t (id,a) values (942,31);
+insert into t (id,a) values (942,32);
+insert into t (id,a) values (942,33);
+insert into t (id,a) values (942,34);
+insert into t (id,a) values (942,35);
+insert into t (id,a) values (942,36);
+insert into t (id,a) values (942,37);
+insert into t (id,a) values (942,38);
+insert into t (id,a) values (942,39);
+insert into t (id,a) values (942,40);
+insert into t (id,a) values (942,41);
+insert into t (id,a) values (942,42);
+insert into t (id,a) values (942,43);
+insert into t (id,a) values (942,44);
+insert into t (id,a) values (942,45);
+insert into t (id,a) values (942,46);
+insert into t (id,a) values (942,47);
+insert into t (id,a) values (942,48);
+insert into t (id,a) values (942,49);
+insert into t (id,a) values (942,50);
+insert into t (id,a) values (942,51);
+insert into t (id,a) values (942,52);
+insert into t (id,a) values (942,53);
+insert into t (id,a) values (942,54);
+insert into t (id,a) values (942,55);
+insert into t (id,a) values (942,56);
+insert into t (id,a) values (942,57);
+insert into t (id,a) values (942,58);
+insert into t (id,a) values (942,59);
+insert into t (id,a) values (942,60);
+insert into t (id,a) values (942,61);
+insert into t (id,a) values (942,62);
+insert into t (id,a) values (942,63);
+insert into t (id,a) values (942,64);
+insert into t (id,a) values (942,65);
+insert into t (id,a) values (942,66);
+insert into t (id,a) values (942,67);
+insert into t (id,a) values (942,68);
+insert into t (id,a) values (942,69);
+insert into t (id,a) values (942,70);
+insert into t (id,a) values (942,71);
+insert into t (id,a) values (942,72);
+insert into t (id,a) values (942,73);
+insert into t (id,a) values (942,74);
+insert into t (id,a) values (942,75);
+insert into t (id,a) values (942,76);
+insert into t (id,a) values (942,77);
+insert into t (id,a) values (942,78);
+insert into t (id,a) values (942,79);
+insert into t (id,a) values (942,80);
+insert into t (id,a) values (942,81);
+insert into t (id,a) values (942,82);
+insert into t (id,a) values (942,83);
+insert into t (id,a) values (942,84);
+insert into t (id,a) values (942,85);
+insert into t (id,a) values (942,86);
+insert into t (id,a) values (942,87);
+insert into t (id,a) values (942,88);
+insert into t (id,a) values (942,89);
+insert into t (id,a) values (942,90);
+insert into t (id,a) values (942,91);
+insert into t (id,a) values (942,92);
+insert into t (id,a) values (942,93);
+insert into t (id,a) values (942,94);
+insert into t (id,a) values (942,95);
+insert into t (id,a) values (942,96);
+insert into t (id,a) values (942,97);
+insert into t (id,a) values (942,98);
+insert into t (id,a) values (942,99);
+insert into t (id,a) values (943,0);
+insert into t (id,a) values (943,1);
+insert into t (id,a) values (943,2);
+insert into t (id,a) values (943,3);
+insert into t (id,a) values (943,4);
+insert into t (id,a) values (943,5);
+insert into t (id,a) values (943,6);
+insert into t (id,a) values (943,7);
+insert into t (id,a) values (943,8);
+insert into t (id,a) values (943,9);
+insert into t (id,a) values (943,10);
+insert into t (id,a) values (943,11);
+insert into t (id,a) values (943,12);
+insert into t (id,a) values (943,13);
+insert into t (id,a) values (943,14);
+insert into t (id,a) values (943,15);
+insert into t (id,a) values (943,16);
+insert into t (id,a) values (943,17);
+insert into t (id,a) values (943,18);
+insert into t (id,a) values (943,19);
+insert into t (id,a) values (943,20);
+insert into t (id,a) values (943,21);
+insert into t (id,a) values (943,22);
+insert into t (id,a) values (943,23);
+insert into t (id,a) values (943,24);
+insert into t (id,a) values (943,25);
+insert into t (id,a) values (943,26);
+insert into t (id,a) values (943,27);
+insert into t (id,a) values (943,28);
+insert into t (id,a) values (943,29);
+insert into t (id,a) values (943,30);
+insert into t (id,a) values (943,31);
+insert into t (id,a) values (943,32);
+insert into t (id,a) values (943,33);
+insert into t (id,a) values (943,34);
+insert into t (id,a) values (943,35);
+insert into t (id,a) values (943,36);
+insert into t (id,a) values (943,37);
+insert into t (id,a) values (943,38);
+insert into t (id,a) values (943,39);
+insert into t (id,a) values (943,40);
+insert into t (id,a) values (943,41);
+insert into t (id,a) values (943,42);
+insert into t (id,a) values (943,43);
+insert into t (id,a) values (943,44);
+insert into t (id,a) values (943,45);
+insert into t (id,a) values (943,46);
+insert into t (id,a) values (943,47);
+insert into t (id,a) values (943,48);
+insert into t (id,a) values (943,49);
+insert into t (id,a) values (943,50);
+insert into t (id,a) values (943,51);
+insert into t (id,a) values (943,52);
+insert into t (id,a) values (943,53);
+insert into t (id,a) values (943,54);
+insert into t (id,a) values (943,55);
+insert into t (id,a) values (943,56);
+insert into t (id,a) values (943,57);
+insert into t (id,a) values (943,58);
+insert into t (id,a) values (943,59);
+insert into t (id,a) values (943,60);
+insert into t (id,a) values (943,61);
+insert into t (id,a) values (943,62);
+insert into t (id,a) values (943,63);
+insert into t (id,a) values (943,64);
+insert into t (id,a) values (943,65);
+insert into t (id,a) values (943,66);
+insert into t (id,a) values (943,67);
+insert into t (id,a) values (943,68);
+insert into t (id,a) values (943,69);
+insert into t (id,a) values (943,70);
+insert into t (id,a) values (943,71);
+insert into t (id,a) values (943,72);
+insert into t (id,a) values (943,73);
+insert into t (id,a) values (943,74);
+insert into t (id,a) values (943,75);
+insert into t (id,a) values (943,76);
+insert into t (id,a) values (943,77);
+insert into t (id,a) values (943,78);
+insert into t (id,a) values (943,79);
+insert into t (id,a) values (943,80);
+insert into t (id,a) values (943,81);
+insert into t (id,a) values (943,82);
+insert into t (id,a) values (943,83);
+insert into t (id,a) values (943,84);
+insert into t (id,a) values (943,85);
+insert into t (id,a) values (943,86);
+insert into t (id,a) values (943,87);
+insert into t (id,a) values (943,88);
+insert into t (id,a) values (943,89);
+insert into t (id,a) values (943,90);
+insert into t (id,a) values (943,91);
+insert into t (id,a) values (943,92);
+insert into t (id,a) values (943,93);
+insert into t (id,a) values (943,94);
+insert into t (id,a) values (943,95);
+insert into t (id,a) values (943,96);
+insert into t (id,a) values (943,97);
+insert into t (id,a) values (943,98);
+insert into t (id,a) values (943,99);
+insert into t (id,a) values (944,0);
+insert into t (id,a) values (944,1);
+insert into t (id,a) values (944,2);
+insert into t (id,a) values (944,3);
+insert into t (id,a) values (944,4);
+insert into t (id,a) values (944,5);
+insert into t (id,a) values (944,6);
+insert into t (id,a) values (944,7);
+insert into t (id,a) values (944,8);
+insert into t (id,a) values (944,9);
+insert into t (id,a) values (944,10);
+insert into t (id,a) values (944,11);
+insert into t (id,a) values (944,12);
+insert into t (id,a) values (944,13);
+insert into t (id,a) values (944,14);
+insert into t (id,a) values (944,15);
+insert into t (id,a) values (944,16);
+insert into t (id,a) values (944,17);
+insert into t (id,a) values (944,18);
+insert into t (id,a) values (944,19);
+insert into t (id,a) values (944,20);
+insert into t (id,a) values (944,21);
+insert into t (id,a) values (944,22);
+insert into t (id,a) values (944,23);
+insert into t (id,a) values (944,24);
+insert into t (id,a) values (944,25);
+insert into t (id,a) values (944,26);
+insert into t (id,a) values (944,27);
+insert into t (id,a) values (944,28);
+insert into t (id,a) values (944,29);
+insert into t (id,a) values (944,30);
+insert into t (id,a) values (944,31);
+insert into t (id,a) values (944,32);
+insert into t (id,a) values (944,33);
+insert into t (id,a) values (944,34);
+insert into t (id,a) values (944,35);
+insert into t (id,a) values (944,36);
+insert into t (id,a) values (944,37);
+insert into t (id,a) values (944,38);
+insert into t (id,a) values (944,39);
+insert into t (id,a) values (944,40);
+insert into t (id,a) values (944,41);
+insert into t (id,a) values (944,42);
+insert into t (id,a) values (944,43);
+insert into t (id,a) values (944,44);
+insert into t (id,a) values (944,45);
+insert into t (id,a) values (944,46);
+insert into t (id,a) values (944,47);
+insert into t (id,a) values (944,48);
+insert into t (id,a) values (944,49);
+insert into t (id,a) values (944,50);
+insert into t (id,a) values (944,51);
+insert into t (id,a) values (944,52);
+insert into t (id,a) values (944,53);
+insert into t (id,a) values (944,54);
+insert into t (id,a) values (944,55);
+insert into t (id,a) values (944,56);
+insert into t (id,a) values (944,57);
+insert into t (id,a) values (944,58);
+insert into t (id,a) values (944,59);
+insert into t (id,a) values (944,60);
+insert into t (id,a) values (944,61);
+insert into t (id,a) values (944,62);
+insert into t (id,a) values (944,63);
+insert into t (id,a) values (944,64);
+insert into t (id,a) values (944,65);
+insert into t (id,a) values (944,66);
+insert into t (id,a) values (944,67);
+insert into t (id,a) values (944,68);
+insert into t (id,a) values (944,69);
+insert into t (id,a) values (944,70);
+insert into t (id,a) values (944,71);
+insert into t (id,a) values (944,72);
+insert into t (id,a) values (944,73);
+insert into t (id,a) values (944,74);
+insert into t (id,a) values (944,75);
+insert into t (id,a) values (944,76);
+insert into t (id,a) values (944,77);
+insert into t (id,a) values (944,78);
+insert into t (id,a) values (944,79);
+insert into t (id,a) values (944,80);
+insert into t (id,a) values (944,81);
+insert into t (id,a) values (944,82);
+insert into t (id,a) values (944,83);
+insert into t (id,a) values (944,84);
+insert into t (id,a) values (944,85);
+insert into t (id,a) values (944,86);
+insert into t (id,a) values (944,87);
+insert into t (id,a) values (944,88);
+insert into t (id,a) values (944,89);
+insert into t (id,a) values (944,90);
+insert into t (id,a) values (944,91);
+insert into t (id,a) values (944,92);
+insert into t (id,a) values (944,93);
+insert into t (id,a) values (944,94);
+insert into t (id,a) values (944,95);
+insert into t (id,a) values (944,96);
+insert into t (id,a) values (944,97);
+insert into t (id,a) values (944,98);
+insert into t (id,a) values (944,99);
+insert into t (id,a) values (945,0);
+insert into t (id,a) values (945,1);
+insert into t (id,a) values (945,2);
+insert into t (id,a) values (945,3);
+insert into t (id,a) values (945,4);
+insert into t (id,a) values (945,5);
+insert into t (id,a) values (945,6);
+insert into t (id,a) values (945,7);
+insert into t (id,a) values (945,8);
+insert into t (id,a) values (945,9);
+insert into t (id,a) values (945,10);
+insert into t (id,a) values (945,11);
+insert into t (id,a) values (945,12);
+insert into t (id,a) values (945,13);
+insert into t (id,a) values (945,14);
+insert into t (id,a) values (945,15);
+insert into t (id,a) values (945,16);
+insert into t (id,a) values (945,17);
+insert into t (id,a) values (945,18);
+insert into t (id,a) values (945,19);
+insert into t (id,a) values (945,20);
+insert into t (id,a) values (945,21);
+insert into t (id,a) values (945,22);
+insert into t (id,a) values (945,23);
+insert into t (id,a) values (945,24);
+insert into t (id,a) values (945,25);
+insert into t (id,a) values (945,26);
+insert into t (id,a) values (945,27);
+insert into t (id,a) values (945,28);
+insert into t (id,a) values (945,29);
+insert into t (id,a) values (945,30);
+insert into t (id,a) values (945,31);
+insert into t (id,a) values (945,32);
+insert into t (id,a) values (945,33);
+insert into t (id,a) values (945,34);
+insert into t (id,a) values (945,35);
+insert into t (id,a) values (945,36);
+insert into t (id,a) values (945,37);
+insert into t (id,a) values (945,38);
+insert into t (id,a) values (945,39);
+insert into t (id,a) values (945,40);
+insert into t (id,a) values (945,41);
+insert into t (id,a) values (945,42);
+insert into t (id,a) values (945,43);
+insert into t (id,a) values (945,44);
+insert into t (id,a) values (945,45);
+insert into t (id,a) values (945,46);
+insert into t (id,a) values (945,47);
+insert into t (id,a) values (945,48);
+insert into t (id,a) values (945,49);
+insert into t (id,a) values (945,50);
+insert into t (id,a) values (945,51);
+insert into t (id,a) values (945,52);
+insert into t (id,a) values (945,53);
+insert into t (id,a) values (945,54);
+insert into t (id,a) values (945,55);
+insert into t (id,a) values (945,56);
+insert into t (id,a) values (945,57);
+insert into t (id,a) values (945,58);
+insert into t (id,a) values (945,59);
+insert into t (id,a) values (945,60);
+insert into t (id,a) values (945,61);
+insert into t (id,a) values (945,62);
+insert into t (id,a) values (945,63);
+insert into t (id,a) values (945,64);
+insert into t (id,a) values (945,65);
+insert into t (id,a) values (945,66);
+insert into t (id,a) values (945,67);
+insert into t (id,a) values (945,68);
+insert into t (id,a) values (945,69);
+insert into t (id,a) values (945,70);
+insert into t (id,a) values (945,71);
+insert into t (id,a) values (945,72);
+insert into t (id,a) values (945,73);
+insert into t (id,a) values (945,74);
+insert into t (id,a) values (945,75);
+insert into t (id,a) values (945,76);
+insert into t (id,a) values (945,77);
+insert into t (id,a) values (945,78);
+insert into t (id,a) values (945,79);
+insert into t (id,a) values (945,80);
+insert into t (id,a) values (945,81);
+insert into t (id,a) values (945,82);
+insert into t (id,a) values (945,83);
+insert into t (id,a) values (945,84);
+insert into t (id,a) values (945,85);
+insert into t (id,a) values (945,86);
+insert into t (id,a) values (945,87);
+insert into t (id,a) values (945,88);
+insert into t (id,a) values (945,89);
+insert into t (id,a) values (945,90);
+insert into t (id,a) values (945,91);
+insert into t (id,a) values (945,92);
+insert into t (id,a) values (945,93);
+insert into t (id,a) values (945,94);
+insert into t (id,a) values (945,95);
+insert into t (id,a) values (945,96);
+insert into t (id,a) values (945,97);
+insert into t (id,a) values (945,98);
+insert into t (id,a) values (945,99);
+insert into t (id,a) values (946,0);
+insert into t (id,a) values (946,1);
+insert into t (id,a) values (946,2);
+insert into t (id,a) values (946,3);
+insert into t (id,a) values (946,4);
+insert into t (id,a) values (946,5);
+insert into t (id,a) values (946,6);
+insert into t (id,a) values (946,7);
+insert into t (id,a) values (946,8);
+insert into t (id,a) values (946,9);
+insert into t (id,a) values (946,10);
+insert into t (id,a) values (946,11);
+insert into t (id,a) values (946,12);
+insert into t (id,a) values (946,13);
+insert into t (id,a) values (946,14);
+insert into t (id,a) values (946,15);
+insert into t (id,a) values (946,16);
+insert into t (id,a) values (946,17);
+insert into t (id,a) values (946,18);
+insert into t (id,a) values (946,19);
+insert into t (id,a) values (946,20);
+insert into t (id,a) values (946,21);
+insert into t (id,a) values (946,22);
+insert into t (id,a) values (946,23);
+insert into t (id,a) values (946,24);
+insert into t (id,a) values (946,25);
+insert into t (id,a) values (946,26);
+insert into t (id,a) values (946,27);
+insert into t (id,a) values (946,28);
+insert into t (id,a) values (946,29);
+insert into t (id,a) values (946,30);
+insert into t (id,a) values (946,31);
+insert into t (id,a) values (946,32);
+insert into t (id,a) values (946,33);
+insert into t (id,a) values (946,34);
+insert into t (id,a) values (946,35);
+insert into t (id,a) values (946,36);
+insert into t (id,a) values (946,37);
+insert into t (id,a) values (946,38);
+insert into t (id,a) values (946,39);
+insert into t (id,a) values (946,40);
+insert into t (id,a) values (946,41);
+insert into t (id,a) values (946,42);
+insert into t (id,a) values (946,43);
+insert into t (id,a) values (946,44);
+insert into t (id,a) values (946,45);
+insert into t (id,a) values (946,46);
+insert into t (id,a) values (946,47);
+insert into t (id,a) values (946,48);
+insert into t (id,a) values (946,49);
+insert into t (id,a) values (946,50);
+insert into t (id,a) values (946,51);
+insert into t (id,a) values (946,52);
+insert into t (id,a) values (946,53);
+insert into t (id,a) values (946,54);
+insert into t (id,a) values (946,55);
+insert into t (id,a) values (946,56);
+insert into t (id,a) values (946,57);
+insert into t (id,a) values (946,58);
+insert into t (id,a) values (946,59);
+insert into t (id,a) values (946,60);
+insert into t (id,a) values (946,61);
+insert into t (id,a) values (946,62);
+insert into t (id,a) values (946,63);
+insert into t (id,a) values (946,64);
+insert into t (id,a) values (946,65);
+insert into t (id,a) values (946,66);
+insert into t (id,a) values (946,67);
+insert into t (id,a) values (946,68);
+insert into t (id,a) values (946,69);
+insert into t (id,a) values (946,70);
+insert into t (id,a) values (946,71);
+insert into t (id,a) values (946,72);
+insert into t (id,a) values (946,73);
+insert into t (id,a) values (946,74);
+insert into t (id,a) values (946,75);
+insert into t (id,a) values (946,76);
+insert into t (id,a) values (946,77);
+insert into t (id,a) values (946,78);
+insert into t (id,a) values (946,79);
+insert into t (id,a) values (946,80);
+insert into t (id,a) values (946,81);
+insert into t (id,a) values (946,82);
+insert into t (id,a) values (946,83);
+insert into t (id,a) values (946,84);
+insert into t (id,a) values (946,85);
+insert into t (id,a) values (946,86);
+insert into t (id,a) values (946,87);
+insert into t (id,a) values (946,88);
+insert into t (id,a) values (946,89);
+insert into t (id,a) values (946,90);
+insert into t (id,a) values (946,91);
+insert into t (id,a) values (946,92);
+insert into t (id,a) values (946,93);
+insert into t (id,a) values (946,94);
+insert into t (id,a) values (946,95);
+insert into t (id,a) values (946,96);
+insert into t (id,a) values (946,97);
+insert into t (id,a) values (946,98);
+insert into t (id,a) values (946,99);
+insert into t (id,a) values (947,0);
+insert into t (id,a) values (947,1);
+insert into t (id,a) values (947,2);
+insert into t (id,a) values (947,3);
+insert into t (id,a) values (947,4);
+insert into t (id,a) values (947,5);
+insert into t (id,a) values (947,6);
+insert into t (id,a) values (947,7);
+insert into t (id,a) values (947,8);
+insert into t (id,a) values (947,9);
+insert into t (id,a) values (947,10);
+insert into t (id,a) values (947,11);
+insert into t (id,a) values (947,12);
+insert into t (id,a) values (947,13);
+insert into t (id,a) values (947,14);
+insert into t (id,a) values (947,15);
+insert into t (id,a) values (947,16);
+insert into t (id,a) values (947,17);
+insert into t (id,a) values (947,18);
+insert into t (id,a) values (947,19);
+insert into t (id,a) values (947,20);
+insert into t (id,a) values (947,21);
+insert into t (id,a) values (947,22);
+insert into t (id,a) values (947,23);
+insert into t (id,a) values (947,24);
+insert into t (id,a) values (947,25);
+insert into t (id,a) values (947,26);
+insert into t (id,a) values (947,27);
+insert into t (id,a) values (947,28);
+insert into t (id,a) values (947,29);
+insert into t (id,a) values (947,30);
+insert into t (id,a) values (947,31);
+insert into t (id,a) values (947,32);
+insert into t (id,a) values (947,33);
+insert into t (id,a) values (947,34);
+insert into t (id,a) values (947,35);
+insert into t (id,a) values (947,36);
+insert into t (id,a) values (947,37);
+insert into t (id,a) values (947,38);
+insert into t (id,a) values (947,39);
+insert into t (id,a) values (947,40);
+insert into t (id,a) values (947,41);
+insert into t (id,a) values (947,42);
+insert into t (id,a) values (947,43);
+insert into t (id,a) values (947,44);
+insert into t (id,a) values (947,45);
+insert into t (id,a) values (947,46);
+insert into t (id,a) values (947,47);
+insert into t (id,a) values (947,48);
+insert into t (id,a) values (947,49);
+insert into t (id,a) values (947,50);
+insert into t (id,a) values (947,51);
+insert into t (id,a) values (947,52);
+insert into t (id,a) values (947,53);
+insert into t (id,a) values (947,54);
+insert into t (id,a) values (947,55);
+insert into t (id,a) values (947,56);
+insert into t (id,a) values (947,57);
+insert into t (id,a) values (947,58);
+insert into t (id,a) values (947,59);
+insert into t (id,a) values (947,60);
+insert into t (id,a) values (947,61);
+insert into t (id,a) values (947,62);
+insert into t (id,a) values (947,63);
+insert into t (id,a) values (947,64);
+insert into t (id,a) values (947,65);
+insert into t (id,a) values (947,66);
+insert into t (id,a) values (947,67);
+insert into t (id,a) values (947,68);
+insert into t (id,a) values (947,69);
+insert into t (id,a) values (947,70);
+insert into t (id,a) values (947,71);
+insert into t (id,a) values (947,72);
+insert into t (id,a) values (947,73);
+insert into t (id,a) values (947,74);
+insert into t (id,a) values (947,75);
+insert into t (id,a) values (947,76);
+insert into t (id,a) values (947,77);
+insert into t (id,a) values (947,78);
+insert into t (id,a) values (947,79);
+insert into t (id,a) values (947,80);
+insert into t (id,a) values (947,81);
+insert into t (id,a) values (947,82);
+insert into t (id,a) values (947,83);
+insert into t (id,a) values (947,84);
+insert into t (id,a) values (947,85);
+insert into t (id,a) values (947,86);
+insert into t (id,a) values (947,87);
+insert into t (id,a) values (947,88);
+insert into t (id,a) values (947,89);
+insert into t (id,a) values (947,90);
+insert into t (id,a) values (947,91);
+insert into t (id,a) values (947,92);
+insert into t (id,a) values (947,93);
+insert into t (id,a) values (947,94);
+insert into t (id,a) values (947,95);
+insert into t (id,a) values (947,96);
+insert into t (id,a) values (947,97);
+insert into t (id,a) values (947,98);
+insert into t (id,a) values (947,99);
+insert into t (id,a) values (948,0);
+insert into t (id,a) values (948,1);
+insert into t (id,a) values (948,2);
+insert into t (id,a) values (948,3);
+insert into t (id,a) values (948,4);
+insert into t (id,a) values (948,5);
+insert into t (id,a) values (948,6);
+insert into t (id,a) values (948,7);
+insert into t (id,a) values (948,8);
+insert into t (id,a) values (948,9);
+insert into t (id,a) values (948,10);
+insert into t (id,a) values (948,11);
+insert into t (id,a) values (948,12);
+insert into t (id,a) values (948,13);
+insert into t (id,a) values (948,14);
+insert into t (id,a) values (948,15);
+insert into t (id,a) values (948,16);
+insert into t (id,a) values (948,17);
+insert into t (id,a) values (948,18);
+insert into t (id,a) values (948,19);
+insert into t (id,a) values (948,20);
+insert into t (id,a) values (948,21);
+insert into t (id,a) values (948,22);
+insert into t (id,a) values (948,23);
+insert into t (id,a) values (948,24);
+insert into t (id,a) values (948,25);
+insert into t (id,a) values (948,26);
+insert into t (id,a) values (948,27);
+insert into t (id,a) values (948,28);
+insert into t (id,a) values (948,29);
+insert into t (id,a) values (948,30);
+insert into t (id,a) values (948,31);
+insert into t (id,a) values (948,32);
+insert into t (id,a) values (948,33);
+insert into t (id,a) values (948,34);
+insert into t (id,a) values (948,35);
+insert into t (id,a) values (948,36);
+insert into t (id,a) values (948,37);
+insert into t (id,a) values (948,38);
+insert into t (id,a) values (948,39);
+insert into t (id,a) values (948,40);
+insert into t (id,a) values (948,41);
+insert into t (id,a) values (948,42);
+insert into t (id,a) values (948,43);
+insert into t (id,a) values (948,44);
+insert into t (id,a) values (948,45);
+insert into t (id,a) values (948,46);
+insert into t (id,a) values (948,47);
+insert into t (id,a) values (948,48);
+insert into t (id,a) values (948,49);
+insert into t (id,a) values (948,50);
+insert into t (id,a) values (948,51);
+insert into t (id,a) values (948,52);
+insert into t (id,a) values (948,53);
+insert into t (id,a) values (948,54);
+insert into t (id,a) values (948,55);
+insert into t (id,a) values (948,56);
+insert into t (id,a) values (948,57);
+insert into t (id,a) values (948,58);
+insert into t (id,a) values (948,59);
+insert into t (id,a) values (948,60);
+insert into t (id,a) values (948,61);
+insert into t (id,a) values (948,62);
+insert into t (id,a) values (948,63);
+insert into t (id,a) values (948,64);
+insert into t (id,a) values (948,65);
+insert into t (id,a) values (948,66);
+insert into t (id,a) values (948,67);
+insert into t (id,a) values (948,68);
+insert into t (id,a) values (948,69);
+insert into t (id,a) values (948,70);
+insert into t (id,a) values (948,71);
+insert into t (id,a) values (948,72);
+insert into t (id,a) values (948,73);
+insert into t (id,a) values (948,74);
+insert into t (id,a) values (948,75);
+insert into t (id,a) values (948,76);
+insert into t (id,a) values (948,77);
+insert into t (id,a) values (948,78);
+insert into t (id,a) values (948,79);
+insert into t (id,a) values (948,80);
+insert into t (id,a) values (948,81);
+insert into t (id,a) values (948,82);
+insert into t (id,a) values (948,83);
+insert into t (id,a) values (948,84);
+insert into t (id,a) values (948,85);
+insert into t (id,a) values (948,86);
+insert into t (id,a) values (948,87);
+insert into t (id,a) values (948,88);
+insert into t (id,a) values (948,89);
+insert into t (id,a) values (948,90);
+insert into t (id,a) values (948,91);
+insert into t (id,a) values (948,92);
+insert into t (id,a) values (948,93);
+insert into t (id,a) values (948,94);
+insert into t (id,a) values (948,95);
+insert into t (id,a) values (948,96);
+insert into t (id,a) values (948,97);
+insert into t (id,a) values (948,98);
+insert into t (id,a) values (948,99);
+insert into t (id,a) values (949,0);
+insert into t (id,a) values (949,1);
+insert into t (id,a) values (949,2);
+insert into t (id,a) values (949,3);
+insert into t (id,a) values (949,4);
+insert into t (id,a) values (949,5);
+insert into t (id,a) values (949,6);
+insert into t (id,a) values (949,7);
+insert into t (id,a) values (949,8);
+insert into t (id,a) values (949,9);
+insert into t (id,a) values (949,10);
+insert into t (id,a) values (949,11);
+insert into t (id,a) values (949,12);
+insert into t (id,a) values (949,13);
+insert into t (id,a) values (949,14);
+insert into t (id,a) values (949,15);
+insert into t (id,a) values (949,16);
+insert into t (id,a) values (949,17);
+insert into t (id,a) values (949,18);
+insert into t (id,a) values (949,19);
+insert into t (id,a) values (949,20);
+insert into t (id,a) values (949,21);
+insert into t (id,a) values (949,22);
+insert into t (id,a) values (949,23);
+insert into t (id,a) values (949,24);
+insert into t (id,a) values (949,25);
+insert into t (id,a) values (949,26);
+insert into t (id,a) values (949,27);
+insert into t (id,a) values (949,28);
+insert into t (id,a) values (949,29);
+insert into t (id,a) values (949,30);
+insert into t (id,a) values (949,31);
+insert into t (id,a) values (949,32);
+insert into t (id,a) values (949,33);
+insert into t (id,a) values (949,34);
+insert into t (id,a) values (949,35);
+insert into t (id,a) values (949,36);
+insert into t (id,a) values (949,37);
+insert into t (id,a) values (949,38);
+insert into t (id,a) values (949,39);
+insert into t (id,a) values (949,40);
+insert into t (id,a) values (949,41);
+insert into t (id,a) values (949,42);
+insert into t (id,a) values (949,43);
+insert into t (id,a) values (949,44);
+insert into t (id,a) values (949,45);
+insert into t (id,a) values (949,46);
+insert into t (id,a) values (949,47);
+insert into t (id,a) values (949,48);
+insert into t (id,a) values (949,49);
+insert into t (id,a) values (949,50);
+insert into t (id,a) values (949,51);
+insert into t (id,a) values (949,52);
+insert into t (id,a) values (949,53);
+insert into t (id,a) values (949,54);
+insert into t (id,a) values (949,55);
+insert into t (id,a) values (949,56);
+insert into t (id,a) values (949,57);
+insert into t (id,a) values (949,58);
+insert into t (id,a) values (949,59);
+insert into t (id,a) values (949,60);
+insert into t (id,a) values (949,61);
+insert into t (id,a) values (949,62);
+insert into t (id,a) values (949,63);
+insert into t (id,a) values (949,64);
+insert into t (id,a) values (949,65);
+insert into t (id,a) values (949,66);
+insert into t (id,a) values (949,67);
+insert into t (id,a) values (949,68);
+insert into t (id,a) values (949,69);
+insert into t (id,a) values (949,70);
+insert into t (id,a) values (949,71);
+insert into t (id,a) values (949,72);
+insert into t (id,a) values (949,73);
+insert into t (id,a) values (949,74);
+insert into t (id,a) values (949,75);
+insert into t (id,a) values (949,76);
+insert into t (id,a) values (949,77);
+insert into t (id,a) values (949,78);
+insert into t (id,a) values (949,79);
+insert into t (id,a) values (949,80);
+insert into t (id,a) values (949,81);
+insert into t (id,a) values (949,82);
+insert into t (id,a) values (949,83);
+insert into t (id,a) values (949,84);
+insert into t (id,a) values (949,85);
+insert into t (id,a) values (949,86);
+insert into t (id,a) values (949,87);
+insert into t (id,a) values (949,88);
+insert into t (id,a) values (949,89);
+insert into t (id,a) values (949,90);
+insert into t (id,a) values (949,91);
+insert into t (id,a) values (949,92);
+insert into t (id,a) values (949,93);
+insert into t (id,a) values (949,94);
+insert into t (id,a) values (949,95);
+insert into t (id,a) values (949,96);
+insert into t (id,a) values (949,97);
+insert into t (id,a) values (949,98);
+insert into t (id,a) values (949,99);
+insert into t (id,a) values (950,0);
+insert into t (id,a) values (950,1);
+insert into t (id,a) values (950,2);
+insert into t (id,a) values (950,3);
+insert into t (id,a) values (950,4);
+insert into t (id,a) values (950,5);
+insert into t (id,a) values (950,6);
+insert into t (id,a) values (950,7);
+insert into t (id,a) values (950,8);
+insert into t (id,a) values (950,9);
+insert into t (id,a) values (950,10);
+insert into t (id,a) values (950,11);
+insert into t (id,a) values (950,12);
+insert into t (id,a) values (950,13);
+insert into t (id,a) values (950,14);
+insert into t (id,a) values (950,15);
+insert into t (id,a) values (950,16);
+insert into t (id,a) values (950,17);
+insert into t (id,a) values (950,18);
+insert into t (id,a) values (950,19);
+insert into t (id,a) values (950,20);
+insert into t (id,a) values (950,21);
+insert into t (id,a) values (950,22);
+insert into t (id,a) values (950,23);
+insert into t (id,a) values (950,24);
+insert into t (id,a) values (950,25);
+insert into t (id,a) values (950,26);
+insert into t (id,a) values (950,27);
+insert into t (id,a) values (950,28);
+insert into t (id,a) values (950,29);
+insert into t (id,a) values (950,30);
+insert into t (id,a) values (950,31);
+insert into t (id,a) values (950,32);
+insert into t (id,a) values (950,33);
+insert into t (id,a) values (950,34);
+insert into t (id,a) values (950,35);
+insert into t (id,a) values (950,36);
+insert into t (id,a) values (950,37);
+insert into t (id,a) values (950,38);
+insert into t (id,a) values (950,39);
+insert into t (id,a) values (950,40);
+insert into t (id,a) values (950,41);
+insert into t (id,a) values (950,42);
+insert into t (id,a) values (950,43);
+insert into t (id,a) values (950,44);
+insert into t (id,a) values (950,45);
+insert into t (id,a) values (950,46);
+insert into t (id,a) values (950,47);
+insert into t (id,a) values (950,48);
+insert into t (id,a) values (950,49);
+insert into t (id,a) values (950,50);
+insert into t (id,a) values (950,51);
+insert into t (id,a) values (950,52);
+insert into t (id,a) values (950,53);
+insert into t (id,a) values (950,54);
+insert into t (id,a) values (950,55);
+insert into t (id,a) values (950,56);
+insert into t (id,a) values (950,57);
+insert into t (id,a) values (950,58);
+insert into t (id,a) values (950,59);
+insert into t (id,a) values (950,60);
+insert into t (id,a) values (950,61);
+insert into t (id,a) values (950,62);
+insert into t (id,a) values (950,63);
+insert into t (id,a) values (950,64);
+insert into t (id,a) values (950,65);
+insert into t (id,a) values (950,66);
+insert into t (id,a) values (950,67);
+insert into t (id,a) values (950,68);
+insert into t (id,a) values (950,69);
+insert into t (id,a) values (950,70);
+insert into t (id,a) values (950,71);
+insert into t (id,a) values (950,72);
+insert into t (id,a) values (950,73);
+insert into t (id,a) values (950,74);
+insert into t (id,a) values (950,75);
+insert into t (id,a) values (950,76);
+insert into t (id,a) values (950,77);
+insert into t (id,a) values (950,78);
+insert into t (id,a) values (950,79);
+insert into t (id,a) values (950,80);
+insert into t (id,a) values (950,81);
+insert into t (id,a) values (950,82);
+insert into t (id,a) values (950,83);
+insert into t (id,a) values (950,84);
+insert into t (id,a) values (950,85);
+insert into t (id,a) values (950,86);
+insert into t (id,a) values (950,87);
+insert into t (id,a) values (950,88);
+insert into t (id,a) values (950,89);
+insert into t (id,a) values (950,90);
+insert into t (id,a) values (950,91);
+insert into t (id,a) values (950,92);
+insert into t (id,a) values (950,93);
+insert into t (id,a) values (950,94);
+insert into t (id,a) values (950,95);
+insert into t (id,a) values (950,96);
+insert into t (id,a) values (950,97);
+insert into t (id,a) values (950,98);
+insert into t (id,a) values (950,99);
+insert into t (id,a) values (951,0);
+insert into t (id,a) values (951,1);
+insert into t (id,a) values (951,2);
+insert into t (id,a) values (951,3);
+insert into t (id,a) values (951,4);
+insert into t (id,a) values (951,5);
+insert into t (id,a) values (951,6);
+insert into t (id,a) values (951,7);
+insert into t (id,a) values (951,8);
+insert into t (id,a) values (951,9);
+insert into t (id,a) values (951,10);
+insert into t (id,a) values (951,11);
+insert into t (id,a) values (951,12);
+insert into t (id,a) values (951,13);
+insert into t (id,a) values (951,14);
+insert into t (id,a) values (951,15);
+insert into t (id,a) values (951,16);
+insert into t (id,a) values (951,17);
+insert into t (id,a) values (951,18);
+insert into t (id,a) values (951,19);
+insert into t (id,a) values (951,20);
+insert into t (id,a) values (951,21);
+insert into t (id,a) values (951,22);
+insert into t (id,a) values (951,23);
+insert into t (id,a) values (951,24);
+insert into t (id,a) values (951,25);
+insert into t (id,a) values (951,26);
+insert into t (id,a) values (951,27);
+insert into t (id,a) values (951,28);
+insert into t (id,a) values (951,29);
+insert into t (id,a) values (951,30);
+insert into t (id,a) values (951,31);
+insert into t (id,a) values (951,32);
+insert into t (id,a) values (951,33);
+insert into t (id,a) values (951,34);
+insert into t (id,a) values (951,35);
+insert into t (id,a) values (951,36);
+insert into t (id,a) values (951,37);
+insert into t (id,a) values (951,38);
+insert into t (id,a) values (951,39);
+insert into t (id,a) values (951,40);
+insert into t (id,a) values (951,41);
+insert into t (id,a) values (951,42);
+insert into t (id,a) values (951,43);
+insert into t (id,a) values (951,44);
+insert into t (id,a) values (951,45);
+insert into t (id,a) values (951,46);
+insert into t (id,a) values (951,47);
+insert into t (id,a) values (951,48);
+insert into t (id,a) values (951,49);
+insert into t (id,a) values (951,50);
+insert into t (id,a) values (951,51);
+insert into t (id,a) values (951,52);
+insert into t (id,a) values (951,53);
+insert into t (id,a) values (951,54);
+insert into t (id,a) values (951,55);
+insert into t (id,a) values (951,56);
+insert into t (id,a) values (951,57);
+insert into t (id,a) values (951,58);
+insert into t (id,a) values (951,59);
+insert into t (id,a) values (951,60);
+insert into t (id,a) values (951,61);
+insert into t (id,a) values (951,62);
+insert into t (id,a) values (951,63);
+insert into t (id,a) values (951,64);
+insert into t (id,a) values (951,65);
+insert into t (id,a) values (951,66);
+insert into t (id,a) values (951,67);
+insert into t (id,a) values (951,68);
+insert into t (id,a) values (951,69);
+insert into t (id,a) values (951,70);
+insert into t (id,a) values (951,71);
+insert into t (id,a) values (951,72);
+insert into t (id,a) values (951,73);
+insert into t (id,a) values (951,74);
+insert into t (id,a) values (951,75);
+insert into t (id,a) values (951,76);
+insert into t (id,a) values (951,77);
+insert into t (id,a) values (951,78);
+insert into t (id,a) values (951,79);
+insert into t (id,a) values (951,80);
+insert into t (id,a) values (951,81);
+insert into t (id,a) values (951,82);
+insert into t (id,a) values (951,83);
+insert into t (id,a) values (951,84);
+insert into t (id,a) values (951,85);
+insert into t (id,a) values (951,86);
+insert into t (id,a) values (951,87);
+insert into t (id,a) values (951,88);
+insert into t (id,a) values (951,89);
+insert into t (id,a) values (951,90);
+insert into t (id,a) values (951,91);
+insert into t (id,a) values (951,92);
+insert into t (id,a) values (951,93);
+insert into t (id,a) values (951,94);
+insert into t (id,a) values (951,95);
+insert into t (id,a) values (951,96);
+insert into t (id,a) values (951,97);
+insert into t (id,a) values (951,98);
+insert into t (id,a) values (951,99);
+insert into t (id,a) values (952,0);
+insert into t (id,a) values (952,1);
+insert into t (id,a) values (952,2);
+insert into t (id,a) values (952,3);
+insert into t (id,a) values (952,4);
+insert into t (id,a) values (952,5);
+insert into t (id,a) values (952,6);
+insert into t (id,a) values (952,7);
+insert into t (id,a) values (952,8);
+insert into t (id,a) values (952,9);
+insert into t (id,a) values (952,10);
+insert into t (id,a) values (952,11);
+insert into t (id,a) values (952,12);
+insert into t (id,a) values (952,13);
+insert into t (id,a) values (952,14);
+insert into t (id,a) values (952,15);
+insert into t (id,a) values (952,16);
+insert into t (id,a) values (952,17);
+insert into t (id,a) values (952,18);
+insert into t (id,a) values (952,19);
+insert into t (id,a) values (952,20);
+insert into t (id,a) values (952,21);
+insert into t (id,a) values (952,22);
+insert into t (id,a) values (952,23);
+insert into t (id,a) values (952,24);
+insert into t (id,a) values (952,25);
+insert into t (id,a) values (952,26);
+insert into t (id,a) values (952,27);
+insert into t (id,a) values (952,28);
+insert into t (id,a) values (952,29);
+insert into t (id,a) values (952,30);
+insert into t (id,a) values (952,31);
+insert into t (id,a) values (952,32);
+insert into t (id,a) values (952,33);
+insert into t (id,a) values (952,34);
+insert into t (id,a) values (952,35);
+insert into t (id,a) values (952,36);
+insert into t (id,a) values (952,37);
+insert into t (id,a) values (952,38);
+insert into t (id,a) values (952,39);
+insert into t (id,a) values (952,40);
+insert into t (id,a) values (952,41);
+insert into t (id,a) values (952,42);
+insert into t (id,a) values (952,43);
+insert into t (id,a) values (952,44);
+insert into t (id,a) values (952,45);
+insert into t (id,a) values (952,46);
+insert into t (id,a) values (952,47);
+insert into t (id,a) values (952,48);
+insert into t (id,a) values (952,49);
+insert into t (id,a) values (952,50);
+insert into t (id,a) values (952,51);
+insert into t (id,a) values (952,52);
+insert into t (id,a) values (952,53);
+insert into t (id,a) values (952,54);
+insert into t (id,a) values (952,55);
+insert into t (id,a) values (952,56);
+insert into t (id,a) values (952,57);
+insert into t (id,a) values (952,58);
+insert into t (id,a) values (952,59);
+insert into t (id,a) values (952,60);
+insert into t (id,a) values (952,61);
+insert into t (id,a) values (952,62);
+insert into t (id,a) values (952,63);
+insert into t (id,a) values (952,64);
+insert into t (id,a) values (952,65);
+insert into t (id,a) values (952,66);
+insert into t (id,a) values (952,67);
+insert into t (id,a) values (952,68);
+insert into t (id,a) values (952,69);
+insert into t (id,a) values (952,70);
+insert into t (id,a) values (952,71);
+insert into t (id,a) values (952,72);
+insert into t (id,a) values (952,73);
+insert into t (id,a) values (952,74);
+insert into t (id,a) values (952,75);
+insert into t (id,a) values (952,76);
+insert into t (id,a) values (952,77);
+insert into t (id,a) values (952,78);
+insert into t (id,a) values (952,79);
+insert into t (id,a) values (952,80);
+insert into t (id,a) values (952,81);
+insert into t (id,a) values (952,82);
+insert into t (id,a) values (952,83);
+insert into t (id,a) values (952,84);
+insert into t (id,a) values (952,85);
+insert into t (id,a) values (952,86);
+insert into t (id,a) values (952,87);
+insert into t (id,a) values (952,88);
+insert into t (id,a) values (952,89);
+insert into t (id,a) values (952,90);
+insert into t (id,a) values (952,91);
+insert into t (id,a) values (952,92);
+insert into t (id,a) values (952,93);
+insert into t (id,a) values (952,94);
+insert into t (id,a) values (952,95);
+insert into t (id,a) values (952,96);
+insert into t (id,a) values (952,97);
+insert into t (id,a) values (952,98);
+insert into t (id,a) values (952,99);
+insert into t (id,a) values (953,0);
+insert into t (id,a) values (953,1);
+insert into t (id,a) values (953,2);
+insert into t (id,a) values (953,3);
+insert into t (id,a) values (953,4);
+insert into t (id,a) values (953,5);
+insert into t (id,a) values (953,6);
+insert into t (id,a) values (953,7);
+insert into t (id,a) values (953,8);
+insert into t (id,a) values (953,9);
+insert into t (id,a) values (953,10);
+insert into t (id,a) values (953,11);
+insert into t (id,a) values (953,12);
+insert into t (id,a) values (953,13);
+insert into t (id,a) values (953,14);
+insert into t (id,a) values (953,15);
+insert into t (id,a) values (953,16);
+insert into t (id,a) values (953,17);
+insert into t (id,a) values (953,18);
+insert into t (id,a) values (953,19);
+insert into t (id,a) values (953,20);
+insert into t (id,a) values (953,21);
+insert into t (id,a) values (953,22);
+insert into t (id,a) values (953,23);
+insert into t (id,a) values (953,24);
+insert into t (id,a) values (953,25);
+insert into t (id,a) values (953,26);
+insert into t (id,a) values (953,27);
+insert into t (id,a) values (953,28);
+insert into t (id,a) values (953,29);
+insert into t (id,a) values (953,30);
+insert into t (id,a) values (953,31);
+insert into t (id,a) values (953,32);
+insert into t (id,a) values (953,33);
+insert into t (id,a) values (953,34);
+insert into t (id,a) values (953,35);
+insert into t (id,a) values (953,36);
+insert into t (id,a) values (953,37);
+insert into t (id,a) values (953,38);
+insert into t (id,a) values (953,39);
+insert into t (id,a) values (953,40);
+insert into t (id,a) values (953,41);
+insert into t (id,a) values (953,42);
+insert into t (id,a) values (953,43);
+insert into t (id,a) values (953,44);
+insert into t (id,a) values (953,45);
+insert into t (id,a) values (953,46);
+insert into t (id,a) values (953,47);
+insert into t (id,a) values (953,48);
+insert into t (id,a) values (953,49);
+insert into t (id,a) values (953,50);
+insert into t (id,a) values (953,51);
+insert into t (id,a) values (953,52);
+insert into t (id,a) values (953,53);
+insert into t (id,a) values (953,54);
+insert into t (id,a) values (953,55);
+insert into t (id,a) values (953,56);
+insert into t (id,a) values (953,57);
+insert into t (id,a) values (953,58);
+insert into t (id,a) values (953,59);
+insert into t (id,a) values (953,60);
+insert into t (id,a) values (953,61);
+insert into t (id,a) values (953,62);
+insert into t (id,a) values (953,63);
+insert into t (id,a) values (953,64);
+insert into t (id,a) values (953,65);
+insert into t (id,a) values (953,66);
+insert into t (id,a) values (953,67);
+insert into t (id,a) values (953,68);
+insert into t (id,a) values (953,69);
+insert into t (id,a) values (953,70);
+insert into t (id,a) values (953,71);
+insert into t (id,a) values (953,72);
+insert into t (id,a) values (953,73);
+insert into t (id,a) values (953,74);
+insert into t (id,a) values (953,75);
+insert into t (id,a) values (953,76);
+insert into t (id,a) values (953,77);
+insert into t (id,a) values (953,78);
+insert into t (id,a) values (953,79);
+insert into t (id,a) values (953,80);
+insert into t (id,a) values (953,81);
+insert into t (id,a) values (953,82);
+insert into t (id,a) values (953,83);
+insert into t (id,a) values (953,84);
+insert into t (id,a) values (953,85);
+insert into t (id,a) values (953,86);
+insert into t (id,a) values (953,87);
+insert into t (id,a) values (953,88);
+insert into t (id,a) values (953,89);
+insert into t (id,a) values (953,90);
+insert into t (id,a) values (953,91);
+insert into t (id,a) values (953,92);
+insert into t (id,a) values (953,93);
+insert into t (id,a) values (953,94);
+insert into t (id,a) values (953,95);
+insert into t (id,a) values (953,96);
+insert into t (id,a) values (953,97);
+insert into t (id,a) values (953,98);
+insert into t (id,a) values (953,99);
+insert into t (id,a) values (954,0);
+insert into t (id,a) values (954,1);
+insert into t (id,a) values (954,2);
+insert into t (id,a) values (954,3);
+insert into t (id,a) values (954,4);
+insert into t (id,a) values (954,5);
+insert into t (id,a) values (954,6);
+insert into t (id,a) values (954,7);
+insert into t (id,a) values (954,8);
+insert into t (id,a) values (954,9);
+insert into t (id,a) values (954,10);
+insert into t (id,a) values (954,11);
+insert into t (id,a) values (954,12);
+insert into t (id,a) values (954,13);
+insert into t (id,a) values (954,14);
+insert into t (id,a) values (954,15);
+insert into t (id,a) values (954,16);
+insert into t (id,a) values (954,17);
+insert into t (id,a) values (954,18);
+insert into t (id,a) values (954,19);
+insert into t (id,a) values (954,20);
+insert into t (id,a) values (954,21);
+insert into t (id,a) values (954,22);
+insert into t (id,a) values (954,23);
+insert into t (id,a) values (954,24);
+insert into t (id,a) values (954,25);
+insert into t (id,a) values (954,26);
+insert into t (id,a) values (954,27);
+insert into t (id,a) values (954,28);
+insert into t (id,a) values (954,29);
+insert into t (id,a) values (954,30);
+insert into t (id,a) values (954,31);
+insert into t (id,a) values (954,32);
+insert into t (id,a) values (954,33);
+insert into t (id,a) values (954,34);
+insert into t (id,a) values (954,35);
+insert into t (id,a) values (954,36);
+insert into t (id,a) values (954,37);
+insert into t (id,a) values (954,38);
+insert into t (id,a) values (954,39);
+insert into t (id,a) values (954,40);
+insert into t (id,a) values (954,41);
+insert into t (id,a) values (954,42);
+insert into t (id,a) values (954,43);
+insert into t (id,a) values (954,44);
+insert into t (id,a) values (954,45);
+insert into t (id,a) values (954,46);
+insert into t (id,a) values (954,47);
+insert into t (id,a) values (954,48);
+insert into t (id,a) values (954,49);
+insert into t (id,a) values (954,50);
+insert into t (id,a) values (954,51);
+insert into t (id,a) values (954,52);
+insert into t (id,a) values (954,53);
+insert into t (id,a) values (954,54);
+insert into t (id,a) values (954,55);
+insert into t (id,a) values (954,56);
+insert into t (id,a) values (954,57);
+insert into t (id,a) values (954,58);
+insert into t (id,a) values (954,59);
+insert into t (id,a) values (954,60);
+insert into t (id,a) values (954,61);
+insert into t (id,a) values (954,62);
+insert into t (id,a) values (954,63);
+insert into t (id,a) values (954,64);
+insert into t (id,a) values (954,65);
+insert into t (id,a) values (954,66);
+insert into t (id,a) values (954,67);
+insert into t (id,a) values (954,68);
+insert into t (id,a) values (954,69);
+insert into t (id,a) values (954,70);
+insert into t (id,a) values (954,71);
+insert into t (id,a) values (954,72);
+insert into t (id,a) values (954,73);
+insert into t (id,a) values (954,74);
+insert into t (id,a) values (954,75);
+insert into t (id,a) values (954,76);
+insert into t (id,a) values (954,77);
+insert into t (id,a) values (954,78);
+insert into t (id,a) values (954,79);
+insert into t (id,a) values (954,80);
+insert into t (id,a) values (954,81);
+insert into t (id,a) values (954,82);
+insert into t (id,a) values (954,83);
+insert into t (id,a) values (954,84);
+insert into t (id,a) values (954,85);
+insert into t (id,a) values (954,86);
+insert into t (id,a) values (954,87);
+insert into t (id,a) values (954,88);
+insert into t (id,a) values (954,89);
+insert into t (id,a) values (954,90);
+insert into t (id,a) values (954,91);
+insert into t (id,a) values (954,92);
+insert into t (id,a) values (954,93);
+insert into t (id,a) values (954,94);
+insert into t (id,a) values (954,95);
+insert into t (id,a) values (954,96);
+insert into t (id,a) values (954,97);
+insert into t (id,a) values (954,98);
+insert into t (id,a) values (954,99);
+insert into t (id,a) values (955,0);
+insert into t (id,a) values (955,1);
+insert into t (id,a) values (955,2);
+insert into t (id,a) values (955,3);
+insert into t (id,a) values (955,4);
+insert into t (id,a) values (955,5);
+insert into t (id,a) values (955,6);
+insert into t (id,a) values (955,7);
+insert into t (id,a) values (955,8);
+insert into t (id,a) values (955,9);
+insert into t (id,a) values (955,10);
+insert into t (id,a) values (955,11);
+insert into t (id,a) values (955,12);
+insert into t (id,a) values (955,13);
+insert into t (id,a) values (955,14);
+insert into t (id,a) values (955,15);
+insert into t (id,a) values (955,16);
+insert into t (id,a) values (955,17);
+insert into t (id,a) values (955,18);
+insert into t (id,a) values (955,19);
+insert into t (id,a) values (955,20);
+insert into t (id,a) values (955,21);
+insert into t (id,a) values (955,22);
+insert into t (id,a) values (955,23);
+insert into t (id,a) values (955,24);
+insert into t (id,a) values (955,25);
+insert into t (id,a) values (955,26);
+insert into t (id,a) values (955,27);
+insert into t (id,a) values (955,28);
+insert into t (id,a) values (955,29);
+insert into t (id,a) values (955,30);
+insert into t (id,a) values (955,31);
+insert into t (id,a) values (955,32);
+insert into t (id,a) values (955,33);
+insert into t (id,a) values (955,34);
+insert into t (id,a) values (955,35);
+insert into t (id,a) values (955,36);
+insert into t (id,a) values (955,37);
+insert into t (id,a) values (955,38);
+insert into t (id,a) values (955,39);
+insert into t (id,a) values (955,40);
+insert into t (id,a) values (955,41);
+insert into t (id,a) values (955,42);
+insert into t (id,a) values (955,43);
+insert into t (id,a) values (955,44);
+insert into t (id,a) values (955,45);
+insert into t (id,a) values (955,46);
+insert into t (id,a) values (955,47);
+insert into t (id,a) values (955,48);
+insert into t (id,a) values (955,49);
+insert into t (id,a) values (955,50);
+insert into t (id,a) values (955,51);
+insert into t (id,a) values (955,52);
+insert into t (id,a) values (955,53);
+insert into t (id,a) values (955,54);
+insert into t (id,a) values (955,55);
+insert into t (id,a) values (955,56);
+insert into t (id,a) values (955,57);
+insert into t (id,a) values (955,58);
+insert into t (id,a) values (955,59);
+insert into t (id,a) values (955,60);
+insert into t (id,a) values (955,61);
+insert into t (id,a) values (955,62);
+insert into t (id,a) values (955,63);
+insert into t (id,a) values (955,64);
+insert into t (id,a) values (955,65);
+insert into t (id,a) values (955,66);
+insert into t (id,a) values (955,67);
+insert into t (id,a) values (955,68);
+insert into t (id,a) values (955,69);
+insert into t (id,a) values (955,70);
+insert into t (id,a) values (955,71);
+insert into t (id,a) values (955,72);
+insert into t (id,a) values (955,73);
+insert into t (id,a) values (955,74);
+insert into t (id,a) values (955,75);
+insert into t (id,a) values (955,76);
+insert into t (id,a) values (955,77);
+insert into t (id,a) values (955,78);
+insert into t (id,a) values (955,79);
+insert into t (id,a) values (955,80);
+insert into t (id,a) values (955,81);
+insert into t (id,a) values (955,82);
+insert into t (id,a) values (955,83);
+insert into t (id,a) values (955,84);
+insert into t (id,a) values (955,85);
+insert into t (id,a) values (955,86);
+insert into t (id,a) values (955,87);
+insert into t (id,a) values (955,88);
+insert into t (id,a) values (955,89);
+insert into t (id,a) values (955,90);
+insert into t (id,a) values (955,91);
+insert into t (id,a) values (955,92);
+insert into t (id,a) values (955,93);
+insert into t (id,a) values (955,94);
+insert into t (id,a) values (955,95);
+insert into t (id,a) values (955,96);
+insert into t (id,a) values (955,97);
+insert into t (id,a) values (955,98);
+insert into t (id,a) values (955,99);
+insert into t (id,a) values (956,0);
+insert into t (id,a) values (956,1);
+insert into t (id,a) values (956,2);
+insert into t (id,a) values (956,3);
+insert into t (id,a) values (956,4);
+insert into t (id,a) values (956,5);
+insert into t (id,a) values (956,6);
+insert into t (id,a) values (956,7);
+insert into t (id,a) values (956,8);
+insert into t (id,a) values (956,9);
+insert into t (id,a) values (956,10);
+insert into t (id,a) values (956,11);
+insert into t (id,a) values (956,12);
+insert into t (id,a) values (956,13);
+insert into t (id,a) values (956,14);
+insert into t (id,a) values (956,15);
+insert into t (id,a) values (956,16);
+insert into t (id,a) values (956,17);
+insert into t (id,a) values (956,18);
+insert into t (id,a) values (956,19);
+insert into t (id,a) values (956,20);
+insert into t (id,a) values (956,21);
+insert into t (id,a) values (956,22);
+insert into t (id,a) values (956,23);
+insert into t (id,a) values (956,24);
+insert into t (id,a) values (956,25);
+insert into t (id,a) values (956,26);
+insert into t (id,a) values (956,27);
+insert into t (id,a) values (956,28);
+insert into t (id,a) values (956,29);
+insert into t (id,a) values (956,30);
+insert into t (id,a) values (956,31);
+insert into t (id,a) values (956,32);
+insert into t (id,a) values (956,33);
+insert into t (id,a) values (956,34);
+insert into t (id,a) values (956,35);
+insert into t (id,a) values (956,36);
+insert into t (id,a) values (956,37);
+insert into t (id,a) values (956,38);
+insert into t (id,a) values (956,39);
+insert into t (id,a) values (956,40);
+insert into t (id,a) values (956,41);
+insert into t (id,a) values (956,42);
+insert into t (id,a) values (956,43);
+insert into t (id,a) values (956,44);
+insert into t (id,a) values (956,45);
+insert into t (id,a) values (956,46);
+insert into t (id,a) values (956,47);
+insert into t (id,a) values (956,48);
+insert into t (id,a) values (956,49);
+insert into t (id,a) values (956,50);
+insert into t (id,a) values (956,51);
+insert into t (id,a) values (956,52);
+insert into t (id,a) values (956,53);
+insert into t (id,a) values (956,54);
+insert into t (id,a) values (956,55);
+insert into t (id,a) values (956,56);
+insert into t (id,a) values (956,57);
+insert into t (id,a) values (956,58);
+insert into t (id,a) values (956,59);
+insert into t (id,a) values (956,60);
+insert into t (id,a) values (956,61);
+insert into t (id,a) values (956,62);
+insert into t (id,a) values (956,63);
+insert into t (id,a) values (956,64);
+insert into t (id,a) values (956,65);
+insert into t (id,a) values (956,66);
+insert into t (id,a) values (956,67);
+insert into t (id,a) values (956,68);
+insert into t (id,a) values (956,69);
+insert into t (id,a) values (956,70);
+insert into t (id,a) values (956,71);
+insert into t (id,a) values (956,72);
+insert into t (id,a) values (956,73);
+insert into t (id,a) values (956,74);
+insert into t (id,a) values (956,75);
+insert into t (id,a) values (956,76);
+insert into t (id,a) values (956,77);
+insert into t (id,a) values (956,78);
+insert into t (id,a) values (956,79);
+insert into t (id,a) values (956,80);
+insert into t (id,a) values (956,81);
+insert into t (id,a) values (956,82);
+insert into t (id,a) values (956,83);
+insert into t (id,a) values (956,84);
+insert into t (id,a) values (956,85);
+insert into t (id,a) values (956,86);
+insert into t (id,a) values (956,87);
+insert into t (id,a) values (956,88);
+insert into t (id,a) values (956,89);
+insert into t (id,a) values (956,90);
+insert into t (id,a) values (956,91);
+insert into t (id,a) values (956,92);
+insert into t (id,a) values (956,93);
+insert into t (id,a) values (956,94);
+insert into t (id,a) values (956,95);
+insert into t (id,a) values (956,96);
+insert into t (id,a) values (956,97);
+insert into t (id,a) values (956,98);
+insert into t (id,a) values (956,99);
+insert into t (id,a) values (957,0);
+insert into t (id,a) values (957,1);
+insert into t (id,a) values (957,2);
+insert into t (id,a) values (957,3);
+insert into t (id,a) values (957,4);
+insert into t (id,a) values (957,5);
+insert into t (id,a) values (957,6);
+insert into t (id,a) values (957,7);
+insert into t (id,a) values (957,8);
+insert into t (id,a) values (957,9);
+insert into t (id,a) values (957,10);
+insert into t (id,a) values (957,11);
+insert into t (id,a) values (957,12);
+insert into t (id,a) values (957,13);
+insert into t (id,a) values (957,14);
+insert into t (id,a) values (957,15);
+insert into t (id,a) values (957,16);
+insert into t (id,a) values (957,17);
+insert into t (id,a) values (957,18);
+insert into t (id,a) values (957,19);
+insert into t (id,a) values (957,20);
+insert into t (id,a) values (957,21);
+insert into t (id,a) values (957,22);
+insert into t (id,a) values (957,23);
+insert into t (id,a) values (957,24);
+insert into t (id,a) values (957,25);
+insert into t (id,a) values (957,26);
+insert into t (id,a) values (957,27);
+insert into t (id,a) values (957,28);
+insert into t (id,a) values (957,29);
+insert into t (id,a) values (957,30);
+insert into t (id,a) values (957,31);
+insert into t (id,a) values (957,32);
+insert into t (id,a) values (957,33);
+insert into t (id,a) values (957,34);
+insert into t (id,a) values (957,35);
+insert into t (id,a) values (957,36);
+insert into t (id,a) values (957,37);
+insert into t (id,a) values (957,38);
+insert into t (id,a) values (957,39);
+insert into t (id,a) values (957,40);
+insert into t (id,a) values (957,41);
+insert into t (id,a) values (957,42);
+insert into t (id,a) values (957,43);
+insert into t (id,a) values (957,44);
+insert into t (id,a) values (957,45);
+insert into t (id,a) values (957,46);
+insert into t (id,a) values (957,47);
+insert into t (id,a) values (957,48);
+insert into t (id,a) values (957,49);
+insert into t (id,a) values (957,50);
+insert into t (id,a) values (957,51);
+insert into t (id,a) values (957,52);
+insert into t (id,a) values (957,53);
+insert into t (id,a) values (957,54);
+insert into t (id,a) values (957,55);
+insert into t (id,a) values (957,56);
+insert into t (id,a) values (957,57);
+insert into t (id,a) values (957,58);
+insert into t (id,a) values (957,59);
+insert into t (id,a) values (957,60);
+insert into t (id,a) values (957,61);
+insert into t (id,a) values (957,62);
+insert into t (id,a) values (957,63);
+insert into t (id,a) values (957,64);
+insert into t (id,a) values (957,65);
+insert into t (id,a) values (957,66);
+insert into t (id,a) values (957,67);
+insert into t (id,a) values (957,68);
+insert into t (id,a) values (957,69);
+insert into t (id,a) values (957,70);
+insert into t (id,a) values (957,71);
+insert into t (id,a) values (957,72);
+insert into t (id,a) values (957,73);
+insert into t (id,a) values (957,74);
+insert into t (id,a) values (957,75);
+insert into t (id,a) values (957,76);
+insert into t (id,a) values (957,77);
+insert into t (id,a) values (957,78);
+insert into t (id,a) values (957,79);
+insert into t (id,a) values (957,80);
+insert into t (id,a) values (957,81);
+insert into t (id,a) values (957,82);
+insert into t (id,a) values (957,83);
+insert into t (id,a) values (957,84);
+insert into t (id,a) values (957,85);
+insert into t (id,a) values (957,86);
+insert into t (id,a) values (957,87);
+insert into t (id,a) values (957,88);
+insert into t (id,a) values (957,89);
+insert into t (id,a) values (957,90);
+insert into t (id,a) values (957,91);
+insert into t (id,a) values (957,92);
+insert into t (id,a) values (957,93);
+insert into t (id,a) values (957,94);
+insert into t (id,a) values (957,95);
+insert into t (id,a) values (957,96);
+insert into t (id,a) values (957,97);
+insert into t (id,a) values (957,98);
+insert into t (id,a) values (957,99);
+insert into t (id,a) values (958,0);
+insert into t (id,a) values (958,1);
+insert into t (id,a) values (958,2);
+insert into t (id,a) values (958,3);
+insert into t (id,a) values (958,4);
+insert into t (id,a) values (958,5);
+insert into t (id,a) values (958,6);
+insert into t (id,a) values (958,7);
+insert into t (id,a) values (958,8);
+insert into t (id,a) values (958,9);
+insert into t (id,a) values (958,10);
+insert into t (id,a) values (958,11);
+insert into t (id,a) values (958,12);
+insert into t (id,a) values (958,13);
+insert into t (id,a) values (958,14);
+insert into t (id,a) values (958,15);
+insert into t (id,a) values (958,16);
+insert into t (id,a) values (958,17);
+insert into t (id,a) values (958,18);
+insert into t (id,a) values (958,19);
+insert into t (id,a) values (958,20);
+insert into t (id,a) values (958,21);
+insert into t (id,a) values (958,22);
+insert into t (id,a) values (958,23);
+insert into t (id,a) values (958,24);
+insert into t (id,a) values (958,25);
+insert into t (id,a) values (958,26);
+insert into t (id,a) values (958,27);
+insert into t (id,a) values (958,28);
+insert into t (id,a) values (958,29);
+insert into t (id,a) values (958,30);
+insert into t (id,a) values (958,31);
+insert into t (id,a) values (958,32);
+insert into t (id,a) values (958,33);
+insert into t (id,a) values (958,34);
+insert into t (id,a) values (958,35);
+insert into t (id,a) values (958,36);
+insert into t (id,a) values (958,37);
+insert into t (id,a) values (958,38);
+insert into t (id,a) values (958,39);
+insert into t (id,a) values (958,40);
+insert into t (id,a) values (958,41);
+insert into t (id,a) values (958,42);
+insert into t (id,a) values (958,43);
+insert into t (id,a) values (958,44);
+insert into t (id,a) values (958,45);
+insert into t (id,a) values (958,46);
+insert into t (id,a) values (958,47);
+insert into t (id,a) values (958,48);
+insert into t (id,a) values (958,49);
+insert into t (id,a) values (958,50);
+insert into t (id,a) values (958,51);
+insert into t (id,a) values (958,52);
+insert into t (id,a) values (958,53);
+insert into t (id,a) values (958,54);
+insert into t (id,a) values (958,55);
+insert into t (id,a) values (958,56);
+insert into t (id,a) values (958,57);
+insert into t (id,a) values (958,58);
+insert into t (id,a) values (958,59);
+insert into t (id,a) values (958,60);
+insert into t (id,a) values (958,61);
+insert into t (id,a) values (958,62);
+insert into t (id,a) values (958,63);
+insert into t (id,a) values (958,64);
+insert into t (id,a) values (958,65);
+insert into t (id,a) values (958,66);
+insert into t (id,a) values (958,67);
+insert into t (id,a) values (958,68);
+insert into t (id,a) values (958,69);
+insert into t (id,a) values (958,70);
+insert into t (id,a) values (958,71);
+insert into t (id,a) values (958,72);
+insert into t (id,a) values (958,73);
+insert into t (id,a) values (958,74);
+insert into t (id,a) values (958,75);
+insert into t (id,a) values (958,76);
+insert into t (id,a) values (958,77);
+insert into t (id,a) values (958,78);
+insert into t (id,a) values (958,79);
+insert into t (id,a) values (958,80);
+insert into t (id,a) values (958,81);
+insert into t (id,a) values (958,82);
+insert into t (id,a) values (958,83);
+insert into t (id,a) values (958,84);
+insert into t (id,a) values (958,85);
+insert into t (id,a) values (958,86);
+insert into t (id,a) values (958,87);
+insert into t (id,a) values (958,88);
+insert into t (id,a) values (958,89);
+insert into t (id,a) values (958,90);
+insert into t (id,a) values (958,91);
+insert into t (id,a) values (958,92);
+insert into t (id,a) values (958,93);
+insert into t (id,a) values (958,94);
+insert into t (id,a) values (958,95);
+insert into t (id,a) values (958,96);
+insert into t (id,a) values (958,97);
+insert into t (id,a) values (958,98);
+insert into t (id,a) values (958,99);
+insert into t (id,a) values (959,0);
+insert into t (id,a) values (959,1);
+insert into t (id,a) values (959,2);
+insert into t (id,a) values (959,3);
+insert into t (id,a) values (959,4);
+insert into t (id,a) values (959,5);
+insert into t (id,a) values (959,6);
+insert into t (id,a) values (959,7);
+insert into t (id,a) values (959,8);
+insert into t (id,a) values (959,9);
+insert into t (id,a) values (959,10);
+insert into t (id,a) values (959,11);
+insert into t (id,a) values (959,12);
+insert into t (id,a) values (959,13);
+insert into t (id,a) values (959,14);
+insert into t (id,a) values (959,15);
+insert into t (id,a) values (959,16);
+insert into t (id,a) values (959,17);
+insert into t (id,a) values (959,18);
+insert into t (id,a) values (959,19);
+insert into t (id,a) values (959,20);
+insert into t (id,a) values (959,21);
+insert into t (id,a) values (959,22);
+insert into t (id,a) values (959,23);
+insert into t (id,a) values (959,24);
+insert into t (id,a) values (959,25);
+insert into t (id,a) values (959,26);
+insert into t (id,a) values (959,27);
+insert into t (id,a) values (959,28);
+insert into t (id,a) values (959,29);
+insert into t (id,a) values (959,30);
+insert into t (id,a) values (959,31);
+insert into t (id,a) values (959,32);
+insert into t (id,a) values (959,33);
+insert into t (id,a) values (959,34);
+insert into t (id,a) values (959,35);
+insert into t (id,a) values (959,36);
+insert into t (id,a) values (959,37);
+insert into t (id,a) values (959,38);
+insert into t (id,a) values (959,39);
+insert into t (id,a) values (959,40);
+insert into t (id,a) values (959,41);
+insert into t (id,a) values (959,42);
+insert into t (id,a) values (959,43);
+insert into t (id,a) values (959,44);
+insert into t (id,a) values (959,45);
+insert into t (id,a) values (959,46);
+insert into t (id,a) values (959,47);
+insert into t (id,a) values (959,48);
+insert into t (id,a) values (959,49);
+insert into t (id,a) values (959,50);
+insert into t (id,a) values (959,51);
+insert into t (id,a) values (959,52);
+insert into t (id,a) values (959,53);
+insert into t (id,a) values (959,54);
+insert into t (id,a) values (959,55);
+insert into t (id,a) values (959,56);
+insert into t (id,a) values (959,57);
+insert into t (id,a) values (959,58);
+insert into t (id,a) values (959,59);
+insert into t (id,a) values (959,60);
+insert into t (id,a) values (959,61);
+insert into t (id,a) values (959,62);
+insert into t (id,a) values (959,63);
+insert into t (id,a) values (959,64);
+insert into t (id,a) values (959,65);
+insert into t (id,a) values (959,66);
+insert into t (id,a) values (959,67);
+insert into t (id,a) values (959,68);
+insert into t (id,a) values (959,69);
+insert into t (id,a) values (959,70);
+insert into t (id,a) values (959,71);
+insert into t (id,a) values (959,72);
+insert into t (id,a) values (959,73);
+insert into t (id,a) values (959,74);
+insert into t (id,a) values (959,75);
+insert into t (id,a) values (959,76);
+insert into t (id,a) values (959,77);
+insert into t (id,a) values (959,78);
+insert into t (id,a) values (959,79);
+insert into t (id,a) values (959,80);
+insert into t (id,a) values (959,81);
+insert into t (id,a) values (959,82);
+insert into t (id,a) values (959,83);
+insert into t (id,a) values (959,84);
+insert into t (id,a) values (959,85);
+insert into t (id,a) values (959,86);
+insert into t (id,a) values (959,87);
+insert into t (id,a) values (959,88);
+insert into t (id,a) values (959,89);
+insert into t (id,a) values (959,90);
+insert into t (id,a) values (959,91);
+insert into t (id,a) values (959,92);
+insert into t (id,a) values (959,93);
+insert into t (id,a) values (959,94);
+insert into t (id,a) values (959,95);
+insert into t (id,a) values (959,96);
+insert into t (id,a) values (959,97);
+insert into t (id,a) values (959,98);
+insert into t (id,a) values (959,99);
+insert into t (id,a) values (960,0);
+insert into t (id,a) values (960,1);
+insert into t (id,a) values (960,2);
+insert into t (id,a) values (960,3);
+insert into t (id,a) values (960,4);
+insert into t (id,a) values (960,5);
+insert into t (id,a) values (960,6);
+insert into t (id,a) values (960,7);
+insert into t (id,a) values (960,8);
+insert into t (id,a) values (960,9);
+insert into t (id,a) values (960,10);
+insert into t (id,a) values (960,11);
+insert into t (id,a) values (960,12);
+insert into t (id,a) values (960,13);
+insert into t (id,a) values (960,14);
+insert into t (id,a) values (960,15);
+insert into t (id,a) values (960,16);
+insert into t (id,a) values (960,17);
+insert into t (id,a) values (960,18);
+insert into t (id,a) values (960,19);
+insert into t (id,a) values (960,20);
+insert into t (id,a) values (960,21);
+insert into t (id,a) values (960,22);
+insert into t (id,a) values (960,23);
+insert into t (id,a) values (960,24);
+insert into t (id,a) values (960,25);
+insert into t (id,a) values (960,26);
+insert into t (id,a) values (960,27);
+insert into t (id,a) values (960,28);
+insert into t (id,a) values (960,29);
+insert into t (id,a) values (960,30);
+insert into t (id,a) values (960,31);
+insert into t (id,a) values (960,32);
+insert into t (id,a) values (960,33);
+insert into t (id,a) values (960,34);
+insert into t (id,a) values (960,35);
+insert into t (id,a) values (960,36);
+insert into t (id,a) values (960,37);
+insert into t (id,a) values (960,38);
+insert into t (id,a) values (960,39);
+insert into t (id,a) values (960,40);
+insert into t (id,a) values (960,41);
+insert into t (id,a) values (960,42);
+insert into t (id,a) values (960,43);
+insert into t (id,a) values (960,44);
+insert into t (id,a) values (960,45);
+insert into t (id,a) values (960,46);
+insert into t (id,a) values (960,47);
+insert into t (id,a) values (960,48);
+insert into t (id,a) values (960,49);
+insert into t (id,a) values (960,50);
+insert into t (id,a) values (960,51);
+insert into t (id,a) values (960,52);
+insert into t (id,a) values (960,53);
+insert into t (id,a) values (960,54);
+insert into t (id,a) values (960,55);
+insert into t (id,a) values (960,56);
+insert into t (id,a) values (960,57);
+insert into t (id,a) values (960,58);
+insert into t (id,a) values (960,59);
+insert into t (id,a) values (960,60);
+insert into t (id,a) values (960,61);
+insert into t (id,a) values (960,62);
+insert into t (id,a) values (960,63);
+insert into t (id,a) values (960,64);
+insert into t (id,a) values (960,65);
+insert into t (id,a) values (960,66);
+insert into t (id,a) values (960,67);
+insert into t (id,a) values (960,68);
+insert into t (id,a) values (960,69);
+insert into t (id,a) values (960,70);
+insert into t (id,a) values (960,71);
+insert into t (id,a) values (960,72);
+insert into t (id,a) values (960,73);
+insert into t (id,a) values (960,74);
+insert into t (id,a) values (960,75);
+insert into t (id,a) values (960,76);
+insert into t (id,a) values (960,77);
+insert into t (id,a) values (960,78);
+insert into t (id,a) values (960,79);
+insert into t (id,a) values (960,80);
+insert into t (id,a) values (960,81);
+insert into t (id,a) values (960,82);
+insert into t (id,a) values (960,83);
+insert into t (id,a) values (960,84);
+insert into t (id,a) values (960,85);
+insert into t (id,a) values (960,86);
+insert into t (id,a) values (960,87);
+insert into t (id,a) values (960,88);
+insert into t (id,a) values (960,89);
+insert into t (id,a) values (960,90);
+insert into t (id,a) values (960,91);
+insert into t (id,a) values (960,92);
+insert into t (id,a) values (960,93);
+insert into t (id,a) values (960,94);
+insert into t (id,a) values (960,95);
+insert into t (id,a) values (960,96);
+insert into t (id,a) values (960,97);
+insert into t (id,a) values (960,98);
+insert into t (id,a) values (960,99);
+insert into t (id,a) values (961,0);
+insert into t (id,a) values (961,1);
+insert into t (id,a) values (961,2);
+insert into t (id,a) values (961,3);
+insert into t (id,a) values (961,4);
+insert into t (id,a) values (961,5);
+insert into t (id,a) values (961,6);
+insert into t (id,a) values (961,7);
+insert into t (id,a) values (961,8);
+insert into t (id,a) values (961,9);
+insert into t (id,a) values (961,10);
+insert into t (id,a) values (961,11);
+insert into t (id,a) values (961,12);
+insert into t (id,a) values (961,13);
+insert into t (id,a) values (961,14);
+insert into t (id,a) values (961,15);
+insert into t (id,a) values (961,16);
+insert into t (id,a) values (961,17);
+insert into t (id,a) values (961,18);
+insert into t (id,a) values (961,19);
+insert into t (id,a) values (961,20);
+insert into t (id,a) values (961,21);
+insert into t (id,a) values (961,22);
+insert into t (id,a) values (961,23);
+insert into t (id,a) values (961,24);
+insert into t (id,a) values (961,25);
+insert into t (id,a) values (961,26);
+insert into t (id,a) values (961,27);
+insert into t (id,a) values (961,28);
+insert into t (id,a) values (961,29);
+insert into t (id,a) values (961,30);
+insert into t (id,a) values (961,31);
+insert into t (id,a) values (961,32);
+insert into t (id,a) values (961,33);
+insert into t (id,a) values (961,34);
+insert into t (id,a) values (961,35);
+insert into t (id,a) values (961,36);
+insert into t (id,a) values (961,37);
+insert into t (id,a) values (961,38);
+insert into t (id,a) values (961,39);
+insert into t (id,a) values (961,40);
+insert into t (id,a) values (961,41);
+insert into t (id,a) values (961,42);
+insert into t (id,a) values (961,43);
+insert into t (id,a) values (961,44);
+insert into t (id,a) values (961,45);
+insert into t (id,a) values (961,46);
+insert into t (id,a) values (961,47);
+insert into t (id,a) values (961,48);
+insert into t (id,a) values (961,49);
+insert into t (id,a) values (961,50);
+insert into t (id,a) values (961,51);
+insert into t (id,a) values (961,52);
+insert into t (id,a) values (961,53);
+insert into t (id,a) values (961,54);
+insert into t (id,a) values (961,55);
+insert into t (id,a) values (961,56);
+insert into t (id,a) values (961,57);
+insert into t (id,a) values (961,58);
+insert into t (id,a) values (961,59);
+insert into t (id,a) values (961,60);
+insert into t (id,a) values (961,61);
+insert into t (id,a) values (961,62);
+insert into t (id,a) values (961,63);
+insert into t (id,a) values (961,64);
+insert into t (id,a) values (961,65);
+insert into t (id,a) values (961,66);
+insert into t (id,a) values (961,67);
+insert into t (id,a) values (961,68);
+insert into t (id,a) values (961,69);
+insert into t (id,a) values (961,70);
+insert into t (id,a) values (961,71);
+insert into t (id,a) values (961,72);
+insert into t (id,a) values (961,73);
+insert into t (id,a) values (961,74);
+insert into t (id,a) values (961,75);
+insert into t (id,a) values (961,76);
+insert into t (id,a) values (961,77);
+insert into t (id,a) values (961,78);
+insert into t (id,a) values (961,79);
+insert into t (id,a) values (961,80);
+insert into t (id,a) values (961,81);
+insert into t (id,a) values (961,82);
+insert into t (id,a) values (961,83);
+insert into t (id,a) values (961,84);
+insert into t (id,a) values (961,85);
+insert into t (id,a) values (961,86);
+insert into t (id,a) values (961,87);
+insert into t (id,a) values (961,88);
+insert into t (id,a) values (961,89);
+insert into t (id,a) values (961,90);
+insert into t (id,a) values (961,91);
+insert into t (id,a) values (961,92);
+insert into t (id,a) values (961,93);
+insert into t (id,a) values (961,94);
+insert into t (id,a) values (961,95);
+insert into t (id,a) values (961,96);
+insert into t (id,a) values (961,97);
+insert into t (id,a) values (961,98);
+insert into t (id,a) values (961,99);
+insert into t (id,a) values (962,0);
+insert into t (id,a) values (962,1);
+insert into t (id,a) values (962,2);
+insert into t (id,a) values (962,3);
+insert into t (id,a) values (962,4);
+insert into t (id,a) values (962,5);
+insert into t (id,a) values (962,6);
+insert into t (id,a) values (962,7);
+insert into t (id,a) values (962,8);
+insert into t (id,a) values (962,9);
+insert into t (id,a) values (962,10);
+insert into t (id,a) values (962,11);
+insert into t (id,a) values (962,12);
+insert into t (id,a) values (962,13);
+insert into t (id,a) values (962,14);
+insert into t (id,a) values (962,15);
+insert into t (id,a) values (962,16);
+insert into t (id,a) values (962,17);
+insert into t (id,a) values (962,18);
+insert into t (id,a) values (962,19);
+insert into t (id,a) values (962,20);
+insert into t (id,a) values (962,21);
+insert into t (id,a) values (962,22);
+insert into t (id,a) values (962,23);
+insert into t (id,a) values (962,24);
+insert into t (id,a) values (962,25);
+insert into t (id,a) values (962,26);
+insert into t (id,a) values (962,27);
+insert into t (id,a) values (962,28);
+insert into t (id,a) values (962,29);
+insert into t (id,a) values (962,30);
+insert into t (id,a) values (962,31);
+insert into t (id,a) values (962,32);
+insert into t (id,a) values (962,33);
+insert into t (id,a) values (962,34);
+insert into t (id,a) values (962,35);
+insert into t (id,a) values (962,36);
+insert into t (id,a) values (962,37);
+insert into t (id,a) values (962,38);
+insert into t (id,a) values (962,39);
+insert into t (id,a) values (962,40);
+insert into t (id,a) values (962,41);
+insert into t (id,a) values (962,42);
+insert into t (id,a) values (962,43);
+insert into t (id,a) values (962,44);
+insert into t (id,a) values (962,45);
+insert into t (id,a) values (962,46);
+insert into t (id,a) values (962,47);
+insert into t (id,a) values (962,48);
+insert into t (id,a) values (962,49);
+insert into t (id,a) values (962,50);
+insert into t (id,a) values (962,51);
+insert into t (id,a) values (962,52);
+insert into t (id,a) values (962,53);
+insert into t (id,a) values (962,54);
+insert into t (id,a) values (962,55);
+insert into t (id,a) values (962,56);
+insert into t (id,a) values (962,57);
+insert into t (id,a) values (962,58);
+insert into t (id,a) values (962,59);
+insert into t (id,a) values (962,60);
+insert into t (id,a) values (962,61);
+insert into t (id,a) values (962,62);
+insert into t (id,a) values (962,63);
+insert into t (id,a) values (962,64);
+insert into t (id,a) values (962,65);
+insert into t (id,a) values (962,66);
+insert into t (id,a) values (962,67);
+insert into t (id,a) values (962,68);
+insert into t (id,a) values (962,69);
+insert into t (id,a) values (962,70);
+insert into t (id,a) values (962,71);
+insert into t (id,a) values (962,72);
+insert into t (id,a) values (962,73);
+insert into t (id,a) values (962,74);
+insert into t (id,a) values (962,75);
+insert into t (id,a) values (962,76);
+insert into t (id,a) values (962,77);
+insert into t (id,a) values (962,78);
+insert into t (id,a) values (962,79);
+insert into t (id,a) values (962,80);
+insert into t (id,a) values (962,81);
+insert into t (id,a) values (962,82);
+insert into t (id,a) values (962,83);
+insert into t (id,a) values (962,84);
+insert into t (id,a) values (962,85);
+insert into t (id,a) values (962,86);
+insert into t (id,a) values (962,87);
+insert into t (id,a) values (962,88);
+insert into t (id,a) values (962,89);
+insert into t (id,a) values (962,90);
+insert into t (id,a) values (962,91);
+insert into t (id,a) values (962,92);
+insert into t (id,a) values (962,93);
+insert into t (id,a) values (962,94);
+insert into t (id,a) values (962,95);
+insert into t (id,a) values (962,96);
+insert into t (id,a) values (962,97);
+insert into t (id,a) values (962,98);
+insert into t (id,a) values (962,99);
+insert into t (id,a) values (963,0);
+insert into t (id,a) values (963,1);
+insert into t (id,a) values (963,2);
+insert into t (id,a) values (963,3);
+insert into t (id,a) values (963,4);
+insert into t (id,a) values (963,5);
+insert into t (id,a) values (963,6);
+insert into t (id,a) values (963,7);
+insert into t (id,a) values (963,8);
+insert into t (id,a) values (963,9);
+insert into t (id,a) values (963,10);
+insert into t (id,a) values (963,11);
+insert into t (id,a) values (963,12);
+insert into t (id,a) values (963,13);
+insert into t (id,a) values (963,14);
+insert into t (id,a) values (963,15);
+insert into t (id,a) values (963,16);
+insert into t (id,a) values (963,17);
+insert into t (id,a) values (963,18);
+insert into t (id,a) values (963,19);
+insert into t (id,a) values (963,20);
+insert into t (id,a) values (963,21);
+insert into t (id,a) values (963,22);
+insert into t (id,a) values (963,23);
+insert into t (id,a) values (963,24);
+insert into t (id,a) values (963,25);
+insert into t (id,a) values (963,26);
+insert into t (id,a) values (963,27);
+insert into t (id,a) values (963,28);
+insert into t (id,a) values (963,29);
+insert into t (id,a) values (963,30);
+insert into t (id,a) values (963,31);
+insert into t (id,a) values (963,32);
+insert into t (id,a) values (963,33);
+insert into t (id,a) values (963,34);
+insert into t (id,a) values (963,35);
+insert into t (id,a) values (963,36);
+insert into t (id,a) values (963,37);
+insert into t (id,a) values (963,38);
+insert into t (id,a) values (963,39);
+insert into t (id,a) values (963,40);
+insert into t (id,a) values (963,41);
+insert into t (id,a) values (963,42);
+insert into t (id,a) values (963,43);
+insert into t (id,a) values (963,44);
+insert into t (id,a) values (963,45);
+insert into t (id,a) values (963,46);
+insert into t (id,a) values (963,47);
+insert into t (id,a) values (963,48);
+insert into t (id,a) values (963,49);
+insert into t (id,a) values (963,50);
+insert into t (id,a) values (963,51);
+insert into t (id,a) values (963,52);
+insert into t (id,a) values (963,53);
+insert into t (id,a) values (963,54);
+insert into t (id,a) values (963,55);
+insert into t (id,a) values (963,56);
+insert into t (id,a) values (963,57);
+insert into t (id,a) values (963,58);
+insert into t (id,a) values (963,59);
+insert into t (id,a) values (963,60);
+insert into t (id,a) values (963,61);
+insert into t (id,a) values (963,62);
+insert into t (id,a) values (963,63);
+insert into t (id,a) values (963,64);
+insert into t (id,a) values (963,65);
+insert into t (id,a) values (963,66);
+insert into t (id,a) values (963,67);
+insert into t (id,a) values (963,68);
+insert into t (id,a) values (963,69);
+insert into t (id,a) values (963,70);
+insert into t (id,a) values (963,71);
+insert into t (id,a) values (963,72);
+insert into t (id,a) values (963,73);
+insert into t (id,a) values (963,74);
+insert into t (id,a) values (963,75);
+insert into t (id,a) values (963,76);
+insert into t (id,a) values (963,77);
+insert into t (id,a) values (963,78);
+insert into t (id,a) values (963,79);
+insert into t (id,a) values (963,80);
+insert into t (id,a) values (963,81);
+insert into t (id,a) values (963,82);
+insert into t (id,a) values (963,83);
+insert into t (id,a) values (963,84);
+insert into t (id,a) values (963,85);
+insert into t (id,a) values (963,86);
+insert into t (id,a) values (963,87);
+insert into t (id,a) values (963,88);
+insert into t (id,a) values (963,89);
+insert into t (id,a) values (963,90);
+insert into t (id,a) values (963,91);
+insert into t (id,a) values (963,92);
+insert into t (id,a) values (963,93);
+insert into t (id,a) values (963,94);
+insert into t (id,a) values (963,95);
+insert into t (id,a) values (963,96);
+insert into t (id,a) values (963,97);
+insert into t (id,a) values (963,98);
+insert into t (id,a) values (963,99);
+insert into t (id,a) values (964,0);
+insert into t (id,a) values (964,1);
+insert into t (id,a) values (964,2);
+insert into t (id,a) values (964,3);
+insert into t (id,a) values (964,4);
+insert into t (id,a) values (964,5);
+insert into t (id,a) values (964,6);
+insert into t (id,a) values (964,7);
+insert into t (id,a) values (964,8);
+insert into t (id,a) values (964,9);
+insert into t (id,a) values (964,10);
+insert into t (id,a) values (964,11);
+insert into t (id,a) values (964,12);
+insert into t (id,a) values (964,13);
+insert into t (id,a) values (964,14);
+insert into t (id,a) values (964,15);
+insert into t (id,a) values (964,16);
+insert into t (id,a) values (964,17);
+insert into t (id,a) values (964,18);
+insert into t (id,a) values (964,19);
+insert into t (id,a) values (964,20);
+insert into t (id,a) values (964,21);
+insert into t (id,a) values (964,22);
+insert into t (id,a) values (964,23);
+insert into t (id,a) values (964,24);
+insert into t (id,a) values (964,25);
+insert into t (id,a) values (964,26);
+insert into t (id,a) values (964,27);
+insert into t (id,a) values (964,28);
+insert into t (id,a) values (964,29);
+insert into t (id,a) values (964,30);
+insert into t (id,a) values (964,31);
+insert into t (id,a) values (964,32);
+insert into t (id,a) values (964,33);
+insert into t (id,a) values (964,34);
+insert into t (id,a) values (964,35);
+insert into t (id,a) values (964,36);
+insert into t (id,a) values (964,37);
+insert into t (id,a) values (964,38);
+insert into t (id,a) values (964,39);
+insert into t (id,a) values (964,40);
+insert into t (id,a) values (964,41);
+insert into t (id,a) values (964,42);
+insert into t (id,a) values (964,43);
+insert into t (id,a) values (964,44);
+insert into t (id,a) values (964,45);
+insert into t (id,a) values (964,46);
+insert into t (id,a) values (964,47);
+insert into t (id,a) values (964,48);
+insert into t (id,a) values (964,49);
+insert into t (id,a) values (964,50);
+insert into t (id,a) values (964,51);
+insert into t (id,a) values (964,52);
+insert into t (id,a) values (964,53);
+insert into t (id,a) values (964,54);
+insert into t (id,a) values (964,55);
+insert into t (id,a) values (964,56);
+insert into t (id,a) values (964,57);
+insert into t (id,a) values (964,58);
+insert into t (id,a) values (964,59);
+insert into t (id,a) values (964,60);
+insert into t (id,a) values (964,61);
+insert into t (id,a) values (964,62);
+insert into t (id,a) values (964,63);
+insert into t (id,a) values (964,64);
+insert into t (id,a) values (964,65);
+insert into t (id,a) values (964,66);
+insert into t (id,a) values (964,67);
+insert into t (id,a) values (964,68);
+insert into t (id,a) values (964,69);
+insert into t (id,a) values (964,70);
+insert into t (id,a) values (964,71);
+insert into t (id,a) values (964,72);
+insert into t (id,a) values (964,73);
+insert into t (id,a) values (964,74);
+insert into t (id,a) values (964,75);
+insert into t (id,a) values (964,76);
+insert into t (id,a) values (964,77);
+insert into t (id,a) values (964,78);
+insert into t (id,a) values (964,79);
+insert into t (id,a) values (964,80);
+insert into t (id,a) values (964,81);
+insert into t (id,a) values (964,82);
+insert into t (id,a) values (964,83);
+insert into t (id,a) values (964,84);
+insert into t (id,a) values (964,85);
+insert into t (id,a) values (964,86);
+insert into t (id,a) values (964,87);
+insert into t (id,a) values (964,88);
+insert into t (id,a) values (964,89);
+insert into t (id,a) values (964,90);
+insert into t (id,a) values (964,91);
+insert into t (id,a) values (964,92);
+insert into t (id,a) values (964,93);
+insert into t (id,a) values (964,94);
+insert into t (id,a) values (964,95);
+insert into t (id,a) values (964,96);
+insert into t (id,a) values (964,97);
+insert into t (id,a) values (964,98);
+insert into t (id,a) values (964,99);
+insert into t (id,a) values (965,0);
+insert into t (id,a) values (965,1);
+insert into t (id,a) values (965,2);
+insert into t (id,a) values (965,3);
+insert into t (id,a) values (965,4);
+insert into t (id,a) values (965,5);
+insert into t (id,a) values (965,6);
+insert into t (id,a) values (965,7);
+insert into t (id,a) values (965,8);
+insert into t (id,a) values (965,9);
+insert into t (id,a) values (965,10);
+insert into t (id,a) values (965,11);
+insert into t (id,a) values (965,12);
+insert into t (id,a) values (965,13);
+insert into t (id,a) values (965,14);
+insert into t (id,a) values (965,15);
+insert into t (id,a) values (965,16);
+insert into t (id,a) values (965,17);
+insert into t (id,a) values (965,18);
+insert into t (id,a) values (965,19);
+insert into t (id,a) values (965,20);
+insert into t (id,a) values (965,21);
+insert into t (id,a) values (965,22);
+insert into t (id,a) values (965,23);
+insert into t (id,a) values (965,24);
+insert into t (id,a) values (965,25);
+insert into t (id,a) values (965,26);
+insert into t (id,a) values (965,27);
+insert into t (id,a) values (965,28);
+insert into t (id,a) values (965,29);
+insert into t (id,a) values (965,30);
+insert into t (id,a) values (965,31);
+insert into t (id,a) values (965,32);
+insert into t (id,a) values (965,33);
+insert into t (id,a) values (965,34);
+insert into t (id,a) values (965,35);
+insert into t (id,a) values (965,36);
+insert into t (id,a) values (965,37);
+insert into t (id,a) values (965,38);
+insert into t (id,a) values (965,39);
+insert into t (id,a) values (965,40);
+insert into t (id,a) values (965,41);
+insert into t (id,a) values (965,42);
+insert into t (id,a) values (965,43);
+insert into t (id,a) values (965,44);
+insert into t (id,a) values (965,45);
+insert into t (id,a) values (965,46);
+insert into t (id,a) values (965,47);
+insert into t (id,a) values (965,48);
+insert into t (id,a) values (965,49);
+insert into t (id,a) values (965,50);
+insert into t (id,a) values (965,51);
+insert into t (id,a) values (965,52);
+insert into t (id,a) values (965,53);
+insert into t (id,a) values (965,54);
+insert into t (id,a) values (965,55);
+insert into t (id,a) values (965,56);
+insert into t (id,a) values (965,57);
+insert into t (id,a) values (965,58);
+insert into t (id,a) values (965,59);
+insert into t (id,a) values (965,60);
+insert into t (id,a) values (965,61);
+insert into t (id,a) values (965,62);
+insert into t (id,a) values (965,63);
+insert into t (id,a) values (965,64);
+insert into t (id,a) values (965,65);
+insert into t (id,a) values (965,66);
+insert into t (id,a) values (965,67);
+insert into t (id,a) values (965,68);
+insert into t (id,a) values (965,69);
+insert into t (id,a) values (965,70);
+insert into t (id,a) values (965,71);
+insert into t (id,a) values (965,72);
+insert into t (id,a) values (965,73);
+insert into t (id,a) values (965,74);
+insert into t (id,a) values (965,75);
+insert into t (id,a) values (965,76);
+insert into t (id,a) values (965,77);
+insert into t (id,a) values (965,78);
+insert into t (id,a) values (965,79);
+insert into t (id,a) values (965,80);
+insert into t (id,a) values (965,81);
+insert into t (id,a) values (965,82);
+insert into t (id,a) values (965,83);
+insert into t (id,a) values (965,84);
+insert into t (id,a) values (965,85);
+insert into t (id,a) values (965,86);
+insert into t (id,a) values (965,87);
+insert into t (id,a) values (965,88);
+insert into t (id,a) values (965,89);
+insert into t (id,a) values (965,90);
+insert into t (id,a) values (965,91);
+insert into t (id,a) values (965,92);
+insert into t (id,a) values (965,93);
+insert into t (id,a) values (965,94);
+insert into t (id,a) values (965,95);
+insert into t (id,a) values (965,96);
+insert into t (id,a) values (965,97);
+insert into t (id,a) values (965,98);
+insert into t (id,a) values (965,99);
+insert into t (id,a) values (966,0);
+insert into t (id,a) values (966,1);
+insert into t (id,a) values (966,2);
+insert into t (id,a) values (966,3);
+insert into t (id,a) values (966,4);
+insert into t (id,a) values (966,5);
+insert into t (id,a) values (966,6);
+insert into t (id,a) values (966,7);
+insert into t (id,a) values (966,8);
+insert into t (id,a) values (966,9);
+insert into t (id,a) values (966,10);
+insert into t (id,a) values (966,11);
+insert into t (id,a) values (966,12);
+insert into t (id,a) values (966,13);
+insert into t (id,a) values (966,14);
+insert into t (id,a) values (966,15);
+insert into t (id,a) values (966,16);
+insert into t (id,a) values (966,17);
+insert into t (id,a) values (966,18);
+insert into t (id,a) values (966,19);
+insert into t (id,a) values (966,20);
+insert into t (id,a) values (966,21);
+insert into t (id,a) values (966,22);
+insert into t (id,a) values (966,23);
+insert into t (id,a) values (966,24);
+insert into t (id,a) values (966,25);
+insert into t (id,a) values (966,26);
+insert into t (id,a) values (966,27);
+insert into t (id,a) values (966,28);
+insert into t (id,a) values (966,29);
+insert into t (id,a) values (966,30);
+insert into t (id,a) values (966,31);
+insert into t (id,a) values (966,32);
+insert into t (id,a) values (966,33);
+insert into t (id,a) values (966,34);
+insert into t (id,a) values (966,35);
+insert into t (id,a) values (966,36);
+insert into t (id,a) values (966,37);
+insert into t (id,a) values (966,38);
+insert into t (id,a) values (966,39);
+insert into t (id,a) values (966,40);
+insert into t (id,a) values (966,41);
+insert into t (id,a) values (966,42);
+insert into t (id,a) values (966,43);
+insert into t (id,a) values (966,44);
+insert into t (id,a) values (966,45);
+insert into t (id,a) values (966,46);
+insert into t (id,a) values (966,47);
+insert into t (id,a) values (966,48);
+insert into t (id,a) values (966,49);
+insert into t (id,a) values (966,50);
+insert into t (id,a) values (966,51);
+insert into t (id,a) values (966,52);
+insert into t (id,a) values (966,53);
+insert into t (id,a) values (966,54);
+insert into t (id,a) values (966,55);
+insert into t (id,a) values (966,56);
+insert into t (id,a) values (966,57);
+insert into t (id,a) values (966,58);
+insert into t (id,a) values (966,59);
+insert into t (id,a) values (966,60);
+insert into t (id,a) values (966,61);
+insert into t (id,a) values (966,62);
+insert into t (id,a) values (966,63);
+insert into t (id,a) values (966,64);
+insert into t (id,a) values (966,65);
+insert into t (id,a) values (966,66);
+insert into t (id,a) values (966,67);
+insert into t (id,a) values (966,68);
+insert into t (id,a) values (966,69);
+insert into t (id,a) values (966,70);
+insert into t (id,a) values (966,71);
+insert into t (id,a) values (966,72);
+insert into t (id,a) values (966,73);
+insert into t (id,a) values (966,74);
+insert into t (id,a) values (966,75);
+insert into t (id,a) values (966,76);
+insert into t (id,a) values (966,77);
+insert into t (id,a) values (966,78);
+insert into t (id,a) values (966,79);
+insert into t (id,a) values (966,80);
+insert into t (id,a) values (966,81);
+insert into t (id,a) values (966,82);
+insert into t (id,a) values (966,83);
+insert into t (id,a) values (966,84);
+insert into t (id,a) values (966,85);
+insert into t (id,a) values (966,86);
+insert into t (id,a) values (966,87);
+insert into t (id,a) values (966,88);
+insert into t (id,a) values (966,89);
+insert into t (id,a) values (966,90);
+insert into t (id,a) values (966,91);
+insert into t (id,a) values (966,92);
+insert into t (id,a) values (966,93);
+insert into t (id,a) values (966,94);
+insert into t (id,a) values (966,95);
+insert into t (id,a) values (966,96);
+insert into t (id,a) values (966,97);
+insert into t (id,a) values (966,98);
+insert into t (id,a) values (966,99);
+insert into t (id,a) values (967,0);
+insert into t (id,a) values (967,1);
+insert into t (id,a) values (967,2);
+insert into t (id,a) values (967,3);
+insert into t (id,a) values (967,4);
+insert into t (id,a) values (967,5);
+insert into t (id,a) values (967,6);
+insert into t (id,a) values (967,7);
+insert into t (id,a) values (967,8);
+insert into t (id,a) values (967,9);
+insert into t (id,a) values (967,10);
+insert into t (id,a) values (967,11);
+insert into t (id,a) values (967,12);
+insert into t (id,a) values (967,13);
+insert into t (id,a) values (967,14);
+insert into t (id,a) values (967,15);
+insert into t (id,a) values (967,16);
+insert into t (id,a) values (967,17);
+insert into t (id,a) values (967,18);
+insert into t (id,a) values (967,19);
+insert into t (id,a) values (967,20);
+insert into t (id,a) values (967,21);
+insert into t (id,a) values (967,22);
+insert into t (id,a) values (967,23);
+insert into t (id,a) values (967,24);
+insert into t (id,a) values (967,25);
+insert into t (id,a) values (967,26);
+insert into t (id,a) values (967,27);
+insert into t (id,a) values (967,28);
+insert into t (id,a) values (967,29);
+insert into t (id,a) values (967,30);
+insert into t (id,a) values (967,31);
+insert into t (id,a) values (967,32);
+insert into t (id,a) values (967,33);
+insert into t (id,a) values (967,34);
+insert into t (id,a) values (967,35);
+insert into t (id,a) values (967,36);
+insert into t (id,a) values (967,37);
+insert into t (id,a) values (967,38);
+insert into t (id,a) values (967,39);
+insert into t (id,a) values (967,40);
+insert into t (id,a) values (967,41);
+insert into t (id,a) values (967,42);
+insert into t (id,a) values (967,43);
+insert into t (id,a) values (967,44);
+insert into t (id,a) values (967,45);
+insert into t (id,a) values (967,46);
+insert into t (id,a) values (967,47);
+insert into t (id,a) values (967,48);
+insert into t (id,a) values (967,49);
+insert into t (id,a) values (967,50);
+insert into t (id,a) values (967,51);
+insert into t (id,a) values (967,52);
+insert into t (id,a) values (967,53);
+insert into t (id,a) values (967,54);
+insert into t (id,a) values (967,55);
+insert into t (id,a) values (967,56);
+insert into t (id,a) values (967,57);
+insert into t (id,a) values (967,58);
+insert into t (id,a) values (967,59);
+insert into t (id,a) values (967,60);
+insert into t (id,a) values (967,61);
+insert into t (id,a) values (967,62);
+insert into t (id,a) values (967,63);
+insert into t (id,a) values (967,64);
+insert into t (id,a) values (967,65);
+insert into t (id,a) values (967,66);
+insert into t (id,a) values (967,67);
+insert into t (id,a) values (967,68);
+insert into t (id,a) values (967,69);
+insert into t (id,a) values (967,70);
+insert into t (id,a) values (967,71);
+insert into t (id,a) values (967,72);
+insert into t (id,a) values (967,73);
+insert into t (id,a) values (967,74);
+insert into t (id,a) values (967,75);
+insert into t (id,a) values (967,76);
+insert into t (id,a) values (967,77);
+insert into t (id,a) values (967,78);
+insert into t (id,a) values (967,79);
+insert into t (id,a) values (967,80);
+insert into t (id,a) values (967,81);
+insert into t (id,a) values (967,82);
+insert into t (id,a) values (967,83);
+insert into t (id,a) values (967,84);
+insert into t (id,a) values (967,85);
+insert into t (id,a) values (967,86);
+insert into t (id,a) values (967,87);
+insert into t (id,a) values (967,88);
+insert into t (id,a) values (967,89);
+insert into t (id,a) values (967,90);
+insert into t (id,a) values (967,91);
+insert into t (id,a) values (967,92);
+insert into t (id,a) values (967,93);
+insert into t (id,a) values (967,94);
+insert into t (id,a) values (967,95);
+insert into t (id,a) values (967,96);
+insert into t (id,a) values (967,97);
+insert into t (id,a) values (967,98);
+insert into t (id,a) values (967,99);
+insert into t (id,a) values (968,0);
+insert into t (id,a) values (968,1);
+insert into t (id,a) values (968,2);
+insert into t (id,a) values (968,3);
+insert into t (id,a) values (968,4);
+insert into t (id,a) values (968,5);
+insert into t (id,a) values (968,6);
+insert into t (id,a) values (968,7);
+insert into t (id,a) values (968,8);
+insert into t (id,a) values (968,9);
+insert into t (id,a) values (968,10);
+insert into t (id,a) values (968,11);
+insert into t (id,a) values (968,12);
+insert into t (id,a) values (968,13);
+insert into t (id,a) values (968,14);
+insert into t (id,a) values (968,15);
+insert into t (id,a) values (968,16);
+insert into t (id,a) values (968,17);
+insert into t (id,a) values (968,18);
+insert into t (id,a) values (968,19);
+insert into t (id,a) values (968,20);
+insert into t (id,a) values (968,21);
+insert into t (id,a) values (968,22);
+insert into t (id,a) values (968,23);
+insert into t (id,a) values (968,24);
+insert into t (id,a) values (968,25);
+insert into t (id,a) values (968,26);
+insert into t (id,a) values (968,27);
+insert into t (id,a) values (968,28);
+insert into t (id,a) values (968,29);
+insert into t (id,a) values (968,30);
+insert into t (id,a) values (968,31);
+insert into t (id,a) values (968,32);
+insert into t (id,a) values (968,33);
+insert into t (id,a) values (968,34);
+insert into t (id,a) values (968,35);
+insert into t (id,a) values (968,36);
+insert into t (id,a) values (968,37);
+insert into t (id,a) values (968,38);
+insert into t (id,a) values (968,39);
+insert into t (id,a) values (968,40);
+insert into t (id,a) values (968,41);
+insert into t (id,a) values (968,42);
+insert into t (id,a) values (968,43);
+insert into t (id,a) values (968,44);
+insert into t (id,a) values (968,45);
+insert into t (id,a) values (968,46);
+insert into t (id,a) values (968,47);
+insert into t (id,a) values (968,48);
+insert into t (id,a) values (968,49);
+insert into t (id,a) values (968,50);
+insert into t (id,a) values (968,51);
+insert into t (id,a) values (968,52);
+insert into t (id,a) values (968,53);
+insert into t (id,a) values (968,54);
+insert into t (id,a) values (968,55);
+insert into t (id,a) values (968,56);
+insert into t (id,a) values (968,57);
+insert into t (id,a) values (968,58);
+insert into t (id,a) values (968,59);
+insert into t (id,a) values (968,60);
+insert into t (id,a) values (968,61);
+insert into t (id,a) values (968,62);
+insert into t (id,a) values (968,63);
+insert into t (id,a) values (968,64);
+insert into t (id,a) values (968,65);
+insert into t (id,a) values (968,66);
+insert into t (id,a) values (968,67);
+insert into t (id,a) values (968,68);
+insert into t (id,a) values (968,69);
+insert into t (id,a) values (968,70);
+insert into t (id,a) values (968,71);
+insert into t (id,a) values (968,72);
+insert into t (id,a) values (968,73);
+insert into t (id,a) values (968,74);
+insert into t (id,a) values (968,75);
+insert into t (id,a) values (968,76);
+insert into t (id,a) values (968,77);
+insert into t (id,a) values (968,78);
+insert into t (id,a) values (968,79);
+insert into t (id,a) values (968,80);
+insert into t (id,a) values (968,81);
+insert into t (id,a) values (968,82);
+insert into t (id,a) values (968,83);
+insert into t (id,a) values (968,84);
+insert into t (id,a) values (968,85);
+insert into t (id,a) values (968,86);
+insert into t (id,a) values (968,87);
+insert into t (id,a) values (968,88);
+insert into t (id,a) values (968,89);
+insert into t (id,a) values (968,90);
+insert into t (id,a) values (968,91);
+insert into t (id,a) values (968,92);
+insert into t (id,a) values (968,93);
+insert into t (id,a) values (968,94);
+insert into t (id,a) values (968,95);
+insert into t (id,a) values (968,96);
+insert into t (id,a) values (968,97);
+insert into t (id,a) values (968,98);
+insert into t (id,a) values (968,99);
+insert into t (id,a) values (969,0);
+insert into t (id,a) values (969,1);
+insert into t (id,a) values (969,2);
+insert into t (id,a) values (969,3);
+insert into t (id,a) values (969,4);
+insert into t (id,a) values (969,5);
+insert into t (id,a) values (969,6);
+insert into t (id,a) values (969,7);
+insert into t (id,a) values (969,8);
+insert into t (id,a) values (969,9);
+insert into t (id,a) values (969,10);
+insert into t (id,a) values (969,11);
+insert into t (id,a) values (969,12);
+insert into t (id,a) values (969,13);
+insert into t (id,a) values (969,14);
+insert into t (id,a) values (969,15);
+insert into t (id,a) values (969,16);
+insert into t (id,a) values (969,17);
+insert into t (id,a) values (969,18);
+insert into t (id,a) values (969,19);
+insert into t (id,a) values (969,20);
+insert into t (id,a) values (969,21);
+insert into t (id,a) values (969,22);
+insert into t (id,a) values (969,23);
+insert into t (id,a) values (969,24);
+insert into t (id,a) values (969,25);
+insert into t (id,a) values (969,26);
+insert into t (id,a) values (969,27);
+insert into t (id,a) values (969,28);
+insert into t (id,a) values (969,29);
+insert into t (id,a) values (969,30);
+insert into t (id,a) values (969,31);
+insert into t (id,a) values (969,32);
+insert into t (id,a) values (969,33);
+insert into t (id,a) values (969,34);
+insert into t (id,a) values (969,35);
+insert into t (id,a) values (969,36);
+insert into t (id,a) values (969,37);
+insert into t (id,a) values (969,38);
+insert into t (id,a) values (969,39);
+insert into t (id,a) values (969,40);
+insert into t (id,a) values (969,41);
+insert into t (id,a) values (969,42);
+insert into t (id,a) values (969,43);
+insert into t (id,a) values (969,44);
+insert into t (id,a) values (969,45);
+insert into t (id,a) values (969,46);
+insert into t (id,a) values (969,47);
+insert into t (id,a) values (969,48);
+insert into t (id,a) values (969,49);
+insert into t (id,a) values (969,50);
+insert into t (id,a) values (969,51);
+insert into t (id,a) values (969,52);
+insert into t (id,a) values (969,53);
+insert into t (id,a) values (969,54);
+insert into t (id,a) values (969,55);
+insert into t (id,a) values (969,56);
+insert into t (id,a) values (969,57);
+insert into t (id,a) values (969,58);
+insert into t (id,a) values (969,59);
+insert into t (id,a) values (969,60);
+insert into t (id,a) values (969,61);
+insert into t (id,a) values (969,62);
+insert into t (id,a) values (969,63);
+insert into t (id,a) values (969,64);
+insert into t (id,a) values (969,65);
+insert into t (id,a) values (969,66);
+insert into t (id,a) values (969,67);
+insert into t (id,a) values (969,68);
+insert into t (id,a) values (969,69);
+insert into t (id,a) values (969,70);
+insert into t (id,a) values (969,71);
+insert into t (id,a) values (969,72);
+insert into t (id,a) values (969,73);
+insert into t (id,a) values (969,74);
+insert into t (id,a) values (969,75);
+insert into t (id,a) values (969,76);
+insert into t (id,a) values (969,77);
+insert into t (id,a) values (969,78);
+insert into t (id,a) values (969,79);
+insert into t (id,a) values (969,80);
+insert into t (id,a) values (969,81);
+insert into t (id,a) values (969,82);
+insert into t (id,a) values (969,83);
+insert into t (id,a) values (969,84);
+insert into t (id,a) values (969,85);
+insert into t (id,a) values (969,86);
+insert into t (id,a) values (969,87);
+insert into t (id,a) values (969,88);
+insert into t (id,a) values (969,89);
+insert into t (id,a) values (969,90);
+insert into t (id,a) values (969,91);
+insert into t (id,a) values (969,92);
+insert into t (id,a) values (969,93);
+insert into t (id,a) values (969,94);
+insert into t (id,a) values (969,95);
+insert into t (id,a) values (969,96);
+insert into t (id,a) values (969,97);
+insert into t (id,a) values (969,98);
+insert into t (id,a) values (969,99);
+insert into t (id,a) values (970,0);
+insert into t (id,a) values (970,1);
+insert into t (id,a) values (970,2);
+insert into t (id,a) values (970,3);
+insert into t (id,a) values (970,4);
+insert into t (id,a) values (970,5);
+insert into t (id,a) values (970,6);
+insert into t (id,a) values (970,7);
+insert into t (id,a) values (970,8);
+insert into t (id,a) values (970,9);
+insert into t (id,a) values (970,10);
+insert into t (id,a) values (970,11);
+insert into t (id,a) values (970,12);
+insert into t (id,a) values (970,13);
+insert into t (id,a) values (970,14);
+insert into t (id,a) values (970,15);
+insert into t (id,a) values (970,16);
+insert into t (id,a) values (970,17);
+insert into t (id,a) values (970,18);
+insert into t (id,a) values (970,19);
+insert into t (id,a) values (970,20);
+insert into t (id,a) values (970,21);
+insert into t (id,a) values (970,22);
+insert into t (id,a) values (970,23);
+insert into t (id,a) values (970,24);
+insert into t (id,a) values (970,25);
+insert into t (id,a) values (970,26);
+insert into t (id,a) values (970,27);
+insert into t (id,a) values (970,28);
+insert into t (id,a) values (970,29);
+insert into t (id,a) values (970,30);
+insert into t (id,a) values (970,31);
+insert into t (id,a) values (970,32);
+insert into t (id,a) values (970,33);
+insert into t (id,a) values (970,34);
+insert into t (id,a) values (970,35);
+insert into t (id,a) values (970,36);
+insert into t (id,a) values (970,37);
+insert into t (id,a) values (970,38);
+insert into t (id,a) values (970,39);
+insert into t (id,a) values (970,40);
+insert into t (id,a) values (970,41);
+insert into t (id,a) values (970,42);
+insert into t (id,a) values (970,43);
+insert into t (id,a) values (970,44);
+insert into t (id,a) values (970,45);
+insert into t (id,a) values (970,46);
+insert into t (id,a) values (970,47);
+insert into t (id,a) values (970,48);
+insert into t (id,a) values (970,49);
+insert into t (id,a) values (970,50);
+insert into t (id,a) values (970,51);
+insert into t (id,a) values (970,52);
+insert into t (id,a) values (970,53);
+insert into t (id,a) values (970,54);
+insert into t (id,a) values (970,55);
+insert into t (id,a) values (970,56);
+insert into t (id,a) values (970,57);
+insert into t (id,a) values (970,58);
+insert into t (id,a) values (970,59);
+insert into t (id,a) values (970,60);
+insert into t (id,a) values (970,61);
+insert into t (id,a) values (970,62);
+insert into t (id,a) values (970,63);
+insert into t (id,a) values (970,64);
+insert into t (id,a) values (970,65);
+insert into t (id,a) values (970,66);
+insert into t (id,a) values (970,67);
+insert into t (id,a) values (970,68);
+insert into t (id,a) values (970,69);
+insert into t (id,a) values (970,70);
+insert into t (id,a) values (970,71);
+insert into t (id,a) values (970,72);
+insert into t (id,a) values (970,73);
+insert into t (id,a) values (970,74);
+insert into t (id,a) values (970,75);
+insert into t (id,a) values (970,76);
+insert into t (id,a) values (970,77);
+insert into t (id,a) values (970,78);
+insert into t (id,a) values (970,79);
+insert into t (id,a) values (970,80);
+insert into t (id,a) values (970,81);
+insert into t (id,a) values (970,82);
+insert into t (id,a) values (970,83);
+insert into t (id,a) values (970,84);
+insert into t (id,a) values (970,85);
+insert into t (id,a) values (970,86);
+insert into t (id,a) values (970,87);
+insert into t (id,a) values (970,88);
+insert into t (id,a) values (970,89);
+insert into t (id,a) values (970,90);
+insert into t (id,a) values (970,91);
+insert into t (id,a) values (970,92);
+insert into t (id,a) values (970,93);
+insert into t (id,a) values (970,94);
+insert into t (id,a) values (970,95);
+insert into t (id,a) values (970,96);
+insert into t (id,a) values (970,97);
+insert into t (id,a) values (970,98);
+insert into t (id,a) values (970,99);
+insert into t (id,a) values (971,0);
+insert into t (id,a) values (971,1);
+insert into t (id,a) values (971,2);
+insert into t (id,a) values (971,3);
+insert into t (id,a) values (971,4);
+insert into t (id,a) values (971,5);
+insert into t (id,a) values (971,6);
+insert into t (id,a) values (971,7);
+insert into t (id,a) values (971,8);
+insert into t (id,a) values (971,9);
+insert into t (id,a) values (971,10);
+insert into t (id,a) values (971,11);
+insert into t (id,a) values (971,12);
+insert into t (id,a) values (971,13);
+insert into t (id,a) values (971,14);
+insert into t (id,a) values (971,15);
+insert into t (id,a) values (971,16);
+insert into t (id,a) values (971,17);
+insert into t (id,a) values (971,18);
+insert into t (id,a) values (971,19);
+insert into t (id,a) values (971,20);
+insert into t (id,a) values (971,21);
+insert into t (id,a) values (971,22);
+insert into t (id,a) values (971,23);
+insert into t (id,a) values (971,24);
+insert into t (id,a) values (971,25);
+insert into t (id,a) values (971,26);
+insert into t (id,a) values (971,27);
+insert into t (id,a) values (971,28);
+insert into t (id,a) values (971,29);
+insert into t (id,a) values (971,30);
+insert into t (id,a) values (971,31);
+insert into t (id,a) values (971,32);
+insert into t (id,a) values (971,33);
+insert into t (id,a) values (971,34);
+insert into t (id,a) values (971,35);
+insert into t (id,a) values (971,36);
+insert into t (id,a) values (971,37);
+insert into t (id,a) values (971,38);
+insert into t (id,a) values (971,39);
+insert into t (id,a) values (971,40);
+insert into t (id,a) values (971,41);
+insert into t (id,a) values (971,42);
+insert into t (id,a) values (971,43);
+insert into t (id,a) values (971,44);
+insert into t (id,a) values (971,45);
+insert into t (id,a) values (971,46);
+insert into t (id,a) values (971,47);
+insert into t (id,a) values (971,48);
+insert into t (id,a) values (971,49);
+insert into t (id,a) values (971,50);
+insert into t (id,a) values (971,51);
+insert into t (id,a) values (971,52);
+insert into t (id,a) values (971,53);
+insert into t (id,a) values (971,54);
+insert into t (id,a) values (971,55);
+insert into t (id,a) values (971,56);
+insert into t (id,a) values (971,57);
+insert into t (id,a) values (971,58);
+insert into t (id,a) values (971,59);
+insert into t (id,a) values (971,60);
+insert into t (id,a) values (971,61);
+insert into t (id,a) values (971,62);
+insert into t (id,a) values (971,63);
+insert into t (id,a) values (971,64);
+insert into t (id,a) values (971,65);
+insert into t (id,a) values (971,66);
+insert into t (id,a) values (971,67);
+insert into t (id,a) values (971,68);
+insert into t (id,a) values (971,69);
+insert into t (id,a) values (971,70);
+insert into t (id,a) values (971,71);
+insert into t (id,a) values (971,72);
+insert into t (id,a) values (971,73);
+insert into t (id,a) values (971,74);
+insert into t (id,a) values (971,75);
+insert into t (id,a) values (971,76);
+insert into t (id,a) values (971,77);
+insert into t (id,a) values (971,78);
+insert into t (id,a) values (971,79);
+insert into t (id,a) values (971,80);
+insert into t (id,a) values (971,81);
+insert into t (id,a) values (971,82);
+insert into t (id,a) values (971,83);
+insert into t (id,a) values (971,84);
+insert into t (id,a) values (971,85);
+insert into t (id,a) values (971,86);
+insert into t (id,a) values (971,87);
+insert into t (id,a) values (971,88);
+insert into t (id,a) values (971,89);
+insert into t (id,a) values (971,90);
+insert into t (id,a) values (971,91);
+insert into t (id,a) values (971,92);
+insert into t (id,a) values (971,93);
+insert into t (id,a) values (971,94);
+insert into t (id,a) values (971,95);
+insert into t (id,a) values (971,96);
+insert into t (id,a) values (971,97);
+insert into t (id,a) values (971,98);
+insert into t (id,a) values (971,99);
+insert into t (id,a) values (972,0);
+insert into t (id,a) values (972,1);
+insert into t (id,a) values (972,2);
+insert into t (id,a) values (972,3);
+insert into t (id,a) values (972,4);
+insert into t (id,a) values (972,5);
+insert into t (id,a) values (972,6);
+insert into t (id,a) values (972,7);
+insert into t (id,a) values (972,8);
+insert into t (id,a) values (972,9);
+insert into t (id,a) values (972,10);
+insert into t (id,a) values (972,11);
+insert into t (id,a) values (972,12);
+insert into t (id,a) values (972,13);
+insert into t (id,a) values (972,14);
+insert into t (id,a) values (972,15);
+insert into t (id,a) values (972,16);
+insert into t (id,a) values (972,17);
+insert into t (id,a) values (972,18);
+insert into t (id,a) values (972,19);
+insert into t (id,a) values (972,20);
+insert into t (id,a) values (972,21);
+insert into t (id,a) values (972,22);
+insert into t (id,a) values (972,23);
+insert into t (id,a) values (972,24);
+insert into t (id,a) values (972,25);
+insert into t (id,a) values (972,26);
+insert into t (id,a) values (972,27);
+insert into t (id,a) values (972,28);
+insert into t (id,a) values (972,29);
+insert into t (id,a) values (972,30);
+insert into t (id,a) values (972,31);
+insert into t (id,a) values (972,32);
+insert into t (id,a) values (972,33);
+insert into t (id,a) values (972,34);
+insert into t (id,a) values (972,35);
+insert into t (id,a) values (972,36);
+insert into t (id,a) values (972,37);
+insert into t (id,a) values (972,38);
+insert into t (id,a) values (972,39);
+insert into t (id,a) values (972,40);
+insert into t (id,a) values (972,41);
+insert into t (id,a) values (972,42);
+insert into t (id,a) values (972,43);
+insert into t (id,a) values (972,44);
+insert into t (id,a) values (972,45);
+insert into t (id,a) values (972,46);
+insert into t (id,a) values (972,47);
+insert into t (id,a) values (972,48);
+insert into t (id,a) values (972,49);
+insert into t (id,a) values (972,50);
+insert into t (id,a) values (972,51);
+insert into t (id,a) values (972,52);
+insert into t (id,a) values (972,53);
+insert into t (id,a) values (972,54);
+insert into t (id,a) values (972,55);
+insert into t (id,a) values (972,56);
+insert into t (id,a) values (972,57);
+insert into t (id,a) values (972,58);
+insert into t (id,a) values (972,59);
+insert into t (id,a) values (972,60);
+insert into t (id,a) values (972,61);
+insert into t (id,a) values (972,62);
+insert into t (id,a) values (972,63);
+insert into t (id,a) values (972,64);
+insert into t (id,a) values (972,65);
+insert into t (id,a) values (972,66);
+insert into t (id,a) values (972,67);
+insert into t (id,a) values (972,68);
+insert into t (id,a) values (972,69);
+insert into t (id,a) values (972,70);
+insert into t (id,a) values (972,71);
+insert into t (id,a) values (972,72);
+insert into t (id,a) values (972,73);
+insert into t (id,a) values (972,74);
+insert into t (id,a) values (972,75);
+insert into t (id,a) values (972,76);
+insert into t (id,a) values (972,77);
+insert into t (id,a) values (972,78);
+insert into t (id,a) values (972,79);
+insert into t (id,a) values (972,80);
+insert into t (id,a) values (972,81);
+insert into t (id,a) values (972,82);
+insert into t (id,a) values (972,83);
+insert into t (id,a) values (972,84);
+insert into t (id,a) values (972,85);
+insert into t (id,a) values (972,86);
+insert into t (id,a) values (972,87);
+insert into t (id,a) values (972,88);
+insert into t (id,a) values (972,89);
+insert into t (id,a) values (972,90);
+insert into t (id,a) values (972,91);
+insert into t (id,a) values (972,92);
+insert into t (id,a) values (972,93);
+insert into t (id,a) values (972,94);
+insert into t (id,a) values (972,95);
+insert into t (id,a) values (972,96);
+insert into t (id,a) values (972,97);
+insert into t (id,a) values (972,98);
+insert into t (id,a) values (972,99);
+insert into t (id,a) values (973,0);
+insert into t (id,a) values (973,1);
+insert into t (id,a) values (973,2);
+insert into t (id,a) values (973,3);
+insert into t (id,a) values (973,4);
+insert into t (id,a) values (973,5);
+insert into t (id,a) values (973,6);
+insert into t (id,a) values (973,7);
+insert into t (id,a) values (973,8);
+insert into t (id,a) values (973,9);
+insert into t (id,a) values (973,10);
+insert into t (id,a) values (973,11);
+insert into t (id,a) values (973,12);
+insert into t (id,a) values (973,13);
+insert into t (id,a) values (973,14);
+insert into t (id,a) values (973,15);
+insert into t (id,a) values (973,16);
+insert into t (id,a) values (973,17);
+insert into t (id,a) values (973,18);
+insert into t (id,a) values (973,19);
+insert into t (id,a) values (973,20);
+insert into t (id,a) values (973,21);
+insert into t (id,a) values (973,22);
+insert into t (id,a) values (973,23);
+insert into t (id,a) values (973,24);
+insert into t (id,a) values (973,25);
+insert into t (id,a) values (973,26);
+insert into t (id,a) values (973,27);
+insert into t (id,a) values (973,28);
+insert into t (id,a) values (973,29);
+insert into t (id,a) values (973,30);
+insert into t (id,a) values (973,31);
+insert into t (id,a) values (973,32);
+insert into t (id,a) values (973,33);
+insert into t (id,a) values (973,34);
+insert into t (id,a) values (973,35);
+insert into t (id,a) values (973,36);
+insert into t (id,a) values (973,37);
+insert into t (id,a) values (973,38);
+insert into t (id,a) values (973,39);
+insert into t (id,a) values (973,40);
+insert into t (id,a) values (973,41);
+insert into t (id,a) values (973,42);
+insert into t (id,a) values (973,43);
+insert into t (id,a) values (973,44);
+insert into t (id,a) values (973,45);
+insert into t (id,a) values (973,46);
+insert into t (id,a) values (973,47);
+insert into t (id,a) values (973,48);
+insert into t (id,a) values (973,49);
+insert into t (id,a) values (973,50);
+insert into t (id,a) values (973,51);
+insert into t (id,a) values (973,52);
+insert into t (id,a) values (973,53);
+insert into t (id,a) values (973,54);
+insert into t (id,a) values (973,55);
+insert into t (id,a) values (973,56);
+insert into t (id,a) values (973,57);
+insert into t (id,a) values (973,58);
+insert into t (id,a) values (973,59);
+insert into t (id,a) values (973,60);
+insert into t (id,a) values (973,61);
+insert into t (id,a) values (973,62);
+insert into t (id,a) values (973,63);
+insert into t (id,a) values (973,64);
+insert into t (id,a) values (973,65);
+insert into t (id,a) values (973,66);
+insert into t (id,a) values (973,67);
+insert into t (id,a) values (973,68);
+insert into t (id,a) values (973,69);
+insert into t (id,a) values (973,70);
+insert into t (id,a) values (973,71);
+insert into t (id,a) values (973,72);
+insert into t (id,a) values (973,73);
+insert into t (id,a) values (973,74);
+insert into t (id,a) values (973,75);
+insert into t (id,a) values (973,76);
+insert into t (id,a) values (973,77);
+insert into t (id,a) values (973,78);
+insert into t (id,a) values (973,79);
+insert into t (id,a) values (973,80);
+insert into t (id,a) values (973,81);
+insert into t (id,a) values (973,82);
+insert into t (id,a) values (973,83);
+insert into t (id,a) values (973,84);
+insert into t (id,a) values (973,85);
+insert into t (id,a) values (973,86);
+insert into t (id,a) values (973,87);
+insert into t (id,a) values (973,88);
+insert into t (id,a) values (973,89);
+insert into t (id,a) values (973,90);
+insert into t (id,a) values (973,91);
+insert into t (id,a) values (973,92);
+insert into t (id,a) values (973,93);
+insert into t (id,a) values (973,94);
+insert into t (id,a) values (973,95);
+insert into t (id,a) values (973,96);
+insert into t (id,a) values (973,97);
+insert into t (id,a) values (973,98);
+insert into t (id,a) values (973,99);
+insert into t (id,a) values (974,0);
+insert into t (id,a) values (974,1);
+insert into t (id,a) values (974,2);
+insert into t (id,a) values (974,3);
+insert into t (id,a) values (974,4);
+insert into t (id,a) values (974,5);
+insert into t (id,a) values (974,6);
+insert into t (id,a) values (974,7);
+insert into t (id,a) values (974,8);
+insert into t (id,a) values (974,9);
+insert into t (id,a) values (974,10);
+insert into t (id,a) values (974,11);
+insert into t (id,a) values (974,12);
+insert into t (id,a) values (974,13);
+insert into t (id,a) values (974,14);
+insert into t (id,a) values (974,15);
+insert into t (id,a) values (974,16);
+insert into t (id,a) values (974,17);
+insert into t (id,a) values (974,18);
+insert into t (id,a) values (974,19);
+insert into t (id,a) values (974,20);
+insert into t (id,a) values (974,21);
+insert into t (id,a) values (974,22);
+insert into t (id,a) values (974,23);
+insert into t (id,a) values (974,24);
+insert into t (id,a) values (974,25);
+insert into t (id,a) values (974,26);
+insert into t (id,a) values (974,27);
+insert into t (id,a) values (974,28);
+insert into t (id,a) values (974,29);
+insert into t (id,a) values (974,30);
+insert into t (id,a) values (974,31);
+insert into t (id,a) values (974,32);
+insert into t (id,a) values (974,33);
+insert into t (id,a) values (974,34);
+insert into t (id,a) values (974,35);
+insert into t (id,a) values (974,36);
+insert into t (id,a) values (974,37);
+insert into t (id,a) values (974,38);
+insert into t (id,a) values (974,39);
+insert into t (id,a) values (974,40);
+insert into t (id,a) values (974,41);
+insert into t (id,a) values (974,42);
+insert into t (id,a) values (974,43);
+insert into t (id,a) values (974,44);
+insert into t (id,a) values (974,45);
+insert into t (id,a) values (974,46);
+insert into t (id,a) values (974,47);
+insert into t (id,a) values (974,48);
+insert into t (id,a) values (974,49);
+insert into t (id,a) values (974,50);
+insert into t (id,a) values (974,51);
+insert into t (id,a) values (974,52);
+insert into t (id,a) values (974,53);
+insert into t (id,a) values (974,54);
+insert into t (id,a) values (974,55);
+insert into t (id,a) values (974,56);
+insert into t (id,a) values (974,57);
+insert into t (id,a) values (974,58);
+insert into t (id,a) values (974,59);
+insert into t (id,a) values (974,60);
+insert into t (id,a) values (974,61);
+insert into t (id,a) values (974,62);
+insert into t (id,a) values (974,63);
+insert into t (id,a) values (974,64);
+insert into t (id,a) values (974,65);
+insert into t (id,a) values (974,66);
+insert into t (id,a) values (974,67);
+insert into t (id,a) values (974,68);
+insert into t (id,a) values (974,69);
+insert into t (id,a) values (974,70);
+insert into t (id,a) values (974,71);
+insert into t (id,a) values (974,72);
+insert into t (id,a) values (974,73);
+insert into t (id,a) values (974,74);
+insert into t (id,a) values (974,75);
+insert into t (id,a) values (974,76);
+insert into t (id,a) values (974,77);
+insert into t (id,a) values (974,78);
+insert into t (id,a) values (974,79);
+insert into t (id,a) values (974,80);
+insert into t (id,a) values (974,81);
+insert into t (id,a) values (974,82);
+insert into t (id,a) values (974,83);
+insert into t (id,a) values (974,84);
+insert into t (id,a) values (974,85);
+insert into t (id,a) values (974,86);
+insert into t (id,a) values (974,87);
+insert into t (id,a) values (974,88);
+insert into t (id,a) values (974,89);
+insert into t (id,a) values (974,90);
+insert into t (id,a) values (974,91);
+insert into t (id,a) values (974,92);
+insert into t (id,a) values (974,93);
+insert into t (id,a) values (974,94);
+insert into t (id,a) values (974,95);
+insert into t (id,a) values (974,96);
+insert into t (id,a) values (974,97);
+insert into t (id,a) values (974,98);
+insert into t (id,a) values (974,99);
+insert into t (id,a) values (975,0);
+insert into t (id,a) values (975,1);
+insert into t (id,a) values (975,2);
+insert into t (id,a) values (975,3);
+insert into t (id,a) values (975,4);
+insert into t (id,a) values (975,5);
+insert into t (id,a) values (975,6);
+insert into t (id,a) values (975,7);
+insert into t (id,a) values (975,8);
+insert into t (id,a) values (975,9);
+insert into t (id,a) values (975,10);
+insert into t (id,a) values (975,11);
+insert into t (id,a) values (975,12);
+insert into t (id,a) values (975,13);
+insert into t (id,a) values (975,14);
+insert into t (id,a) values (975,15);
+insert into t (id,a) values (975,16);
+insert into t (id,a) values (975,17);
+insert into t (id,a) values (975,18);
+insert into t (id,a) values (975,19);
+insert into t (id,a) values (975,20);
+insert into t (id,a) values (975,21);
+insert into t (id,a) values (975,22);
+insert into t (id,a) values (975,23);
+insert into t (id,a) values (975,24);
+insert into t (id,a) values (975,25);
+insert into t (id,a) values (975,26);
+insert into t (id,a) values (975,27);
+insert into t (id,a) values (975,28);
+insert into t (id,a) values (975,29);
+insert into t (id,a) values (975,30);
+insert into t (id,a) values (975,31);
+insert into t (id,a) values (975,32);
+insert into t (id,a) values (975,33);
+insert into t (id,a) values (975,34);
+insert into t (id,a) values (975,35);
+insert into t (id,a) values (975,36);
+insert into t (id,a) values (975,37);
+insert into t (id,a) values (975,38);
+insert into t (id,a) values (975,39);
+insert into t (id,a) values (975,40);
+insert into t (id,a) values (975,41);
+insert into t (id,a) values (975,42);
+insert into t (id,a) values (975,43);
+insert into t (id,a) values (975,44);
+insert into t (id,a) values (975,45);
+insert into t (id,a) values (975,46);
+insert into t (id,a) values (975,47);
+insert into t (id,a) values (975,48);
+insert into t (id,a) values (975,49);
+insert into t (id,a) values (975,50);
+insert into t (id,a) values (975,51);
+insert into t (id,a) values (975,52);
+insert into t (id,a) values (975,53);
+insert into t (id,a) values (975,54);
+insert into t (id,a) values (975,55);
+insert into t (id,a) values (975,56);
+insert into t (id,a) values (975,57);
+insert into t (id,a) values (975,58);
+insert into t (id,a) values (975,59);
+insert into t (id,a) values (975,60);
+insert into t (id,a) values (975,61);
+insert into t (id,a) values (975,62);
+insert into t (id,a) values (975,63);
+insert into t (id,a) values (975,64);
+insert into t (id,a) values (975,65);
+insert into t (id,a) values (975,66);
+insert into t (id,a) values (975,67);
+insert into t (id,a) values (975,68);
+insert into t (id,a) values (975,69);
+insert into t (id,a) values (975,70);
+insert into t (id,a) values (975,71);
+insert into t (id,a) values (975,72);
+insert into t (id,a) values (975,73);
+insert into t (id,a) values (975,74);
+insert into t (id,a) values (975,75);
+insert into t (id,a) values (975,76);
+insert into t (id,a) values (975,77);
+insert into t (id,a) values (975,78);
+insert into t (id,a) values (975,79);
+insert into t (id,a) values (975,80);
+insert into t (id,a) values (975,81);
+insert into t (id,a) values (975,82);
+insert into t (id,a) values (975,83);
+insert into t (id,a) values (975,84);
+insert into t (id,a) values (975,85);
+insert into t (id,a) values (975,86);
+insert into t (id,a) values (975,87);
+insert into t (id,a) values (975,88);
+insert into t (id,a) values (975,89);
+insert into t (id,a) values (975,90);
+insert into t (id,a) values (975,91);
+insert into t (id,a) values (975,92);
+insert into t (id,a) values (975,93);
+insert into t (id,a) values (975,94);
+insert into t (id,a) values (975,95);
+insert into t (id,a) values (975,96);
+insert into t (id,a) values (975,97);
+insert into t (id,a) values (975,98);
+insert into t (id,a) values (975,99);
+insert into t (id,a) values (976,0);
+insert into t (id,a) values (976,1);
+insert into t (id,a) values (976,2);
+insert into t (id,a) values (976,3);
+insert into t (id,a) values (976,4);
+insert into t (id,a) values (976,5);
+insert into t (id,a) values (976,6);
+insert into t (id,a) values (976,7);
+insert into t (id,a) values (976,8);
+insert into t (id,a) values (976,9);
+insert into t (id,a) values (976,10);
+insert into t (id,a) values (976,11);
+insert into t (id,a) values (976,12);
+insert into t (id,a) values (976,13);
+insert into t (id,a) values (976,14);
+insert into t (id,a) values (976,15);
+insert into t (id,a) values (976,16);
+insert into t (id,a) values (976,17);
+insert into t (id,a) values (976,18);
+insert into t (id,a) values (976,19);
+insert into t (id,a) values (976,20);
+insert into t (id,a) values (976,21);
+insert into t (id,a) values (976,22);
+insert into t (id,a) values (976,23);
+insert into t (id,a) values (976,24);
+insert into t (id,a) values (976,25);
+insert into t (id,a) values (976,26);
+insert into t (id,a) values (976,27);
+insert into t (id,a) values (976,28);
+insert into t (id,a) values (976,29);
+insert into t (id,a) values (976,30);
+insert into t (id,a) values (976,31);
+insert into t (id,a) values (976,32);
+insert into t (id,a) values (976,33);
+insert into t (id,a) values (976,34);
+insert into t (id,a) values (976,35);
+insert into t (id,a) values (976,36);
+insert into t (id,a) values (976,37);
+insert into t (id,a) values (976,38);
+insert into t (id,a) values (976,39);
+insert into t (id,a) values (976,40);
+insert into t (id,a) values (976,41);
+insert into t (id,a) values (976,42);
+insert into t (id,a) values (976,43);
+insert into t (id,a) values (976,44);
+insert into t (id,a) values (976,45);
+insert into t (id,a) values (976,46);
+insert into t (id,a) values (976,47);
+insert into t (id,a) values (976,48);
+insert into t (id,a) values (976,49);
+insert into t (id,a) values (976,50);
+insert into t (id,a) values (976,51);
+insert into t (id,a) values (976,52);
+insert into t (id,a) values (976,53);
+insert into t (id,a) values (976,54);
+insert into t (id,a) values (976,55);
+insert into t (id,a) values (976,56);
+insert into t (id,a) values (976,57);
+insert into t (id,a) values (976,58);
+insert into t (id,a) values (976,59);
+insert into t (id,a) values (976,60);
+insert into t (id,a) values (976,61);
+insert into t (id,a) values (976,62);
+insert into t (id,a) values (976,63);
+insert into t (id,a) values (976,64);
+insert into t (id,a) values (976,65);
+insert into t (id,a) values (976,66);
+insert into t (id,a) values (976,67);
+insert into t (id,a) values (976,68);
+insert into t (id,a) values (976,69);
+insert into t (id,a) values (976,70);
+insert into t (id,a) values (976,71);
+insert into t (id,a) values (976,72);
+insert into t (id,a) values (976,73);
+insert into t (id,a) values (976,74);
+insert into t (id,a) values (976,75);
+insert into t (id,a) values (976,76);
+insert into t (id,a) values (976,77);
+insert into t (id,a) values (976,78);
+insert into t (id,a) values (976,79);
+insert into t (id,a) values (976,80);
+insert into t (id,a) values (976,81);
+insert into t (id,a) values (976,82);
+insert into t (id,a) values (976,83);
+insert into t (id,a) values (976,84);
+insert into t (id,a) values (976,85);
+insert into t (id,a) values (976,86);
+insert into t (id,a) values (976,87);
+insert into t (id,a) values (976,88);
+insert into t (id,a) values (976,89);
+insert into t (id,a) values (976,90);
+insert into t (id,a) values (976,91);
+insert into t (id,a) values (976,92);
+insert into t (id,a) values (976,93);
+insert into t (id,a) values (976,94);
+insert into t (id,a) values (976,95);
+insert into t (id,a) values (976,96);
+insert into t (id,a) values (976,97);
+insert into t (id,a) values (976,98);
+insert into t (id,a) values (976,99);
+insert into t (id,a) values (977,0);
+insert into t (id,a) values (977,1);
+insert into t (id,a) values (977,2);
+insert into t (id,a) values (977,3);
+insert into t (id,a) values (977,4);
+insert into t (id,a) values (977,5);
+insert into t (id,a) values (977,6);
+insert into t (id,a) values (977,7);
+insert into t (id,a) values (977,8);
+insert into t (id,a) values (977,9);
+insert into t (id,a) values (977,10);
+insert into t (id,a) values (977,11);
+insert into t (id,a) values (977,12);
+insert into t (id,a) values (977,13);
+insert into t (id,a) values (977,14);
+insert into t (id,a) values (977,15);
+insert into t (id,a) values (977,16);
+insert into t (id,a) values (977,17);
+insert into t (id,a) values (977,18);
+insert into t (id,a) values (977,19);
+insert into t (id,a) values (977,20);
+insert into t (id,a) values (977,21);
+insert into t (id,a) values (977,22);
+insert into t (id,a) values (977,23);
+insert into t (id,a) values (977,24);
+insert into t (id,a) values (977,25);
+insert into t (id,a) values (977,26);
+insert into t (id,a) values (977,27);
+insert into t (id,a) values (977,28);
+insert into t (id,a) values (977,29);
+insert into t (id,a) values (977,30);
+insert into t (id,a) values (977,31);
+insert into t (id,a) values (977,32);
+insert into t (id,a) values (977,33);
+insert into t (id,a) values (977,34);
+insert into t (id,a) values (977,35);
+insert into t (id,a) values (977,36);
+insert into t (id,a) values (977,37);
+insert into t (id,a) values (977,38);
+insert into t (id,a) values (977,39);
+insert into t (id,a) values (977,40);
+insert into t (id,a) values (977,41);
+insert into t (id,a) values (977,42);
+insert into t (id,a) values (977,43);
+insert into t (id,a) values (977,44);
+insert into t (id,a) values (977,45);
+insert into t (id,a) values (977,46);
+insert into t (id,a) values (977,47);
+insert into t (id,a) values (977,48);
+insert into t (id,a) values (977,49);
+insert into t (id,a) values (977,50);
+insert into t (id,a) values (977,51);
+insert into t (id,a) values (977,52);
+insert into t (id,a) values (977,53);
+insert into t (id,a) values (977,54);
+insert into t (id,a) values (977,55);
+insert into t (id,a) values (977,56);
+insert into t (id,a) values (977,57);
+insert into t (id,a) values (977,58);
+insert into t (id,a) values (977,59);
+insert into t (id,a) values (977,60);
+insert into t (id,a) values (977,61);
+insert into t (id,a) values (977,62);
+insert into t (id,a) values (977,63);
+insert into t (id,a) values (977,64);
+insert into t (id,a) values (977,65);
+insert into t (id,a) values (977,66);
+insert into t (id,a) values (977,67);
+insert into t (id,a) values (977,68);
+insert into t (id,a) values (977,69);
+insert into t (id,a) values (977,70);
+insert into t (id,a) values (977,71);
+insert into t (id,a) values (977,72);
+insert into t (id,a) values (977,73);
+insert into t (id,a) values (977,74);
+insert into t (id,a) values (977,75);
+insert into t (id,a) values (977,76);
+insert into t (id,a) values (977,77);
+insert into t (id,a) values (977,78);
+insert into t (id,a) values (977,79);
+insert into t (id,a) values (977,80);
+insert into t (id,a) values (977,81);
+insert into t (id,a) values (977,82);
+insert into t (id,a) values (977,83);
+insert into t (id,a) values (977,84);
+insert into t (id,a) values (977,85);
+insert into t (id,a) values (977,86);
+insert into t (id,a) values (977,87);
+insert into t (id,a) values (977,88);
+insert into t (id,a) values (977,89);
+insert into t (id,a) values (977,90);
+insert into t (id,a) values (977,91);
+insert into t (id,a) values (977,92);
+insert into t (id,a) values (977,93);
+insert into t (id,a) values (977,94);
+insert into t (id,a) values (977,95);
+insert into t (id,a) values (977,96);
+insert into t (id,a) values (977,97);
+insert into t (id,a) values (977,98);
+insert into t (id,a) values (977,99);
+insert into t (id,a) values (978,0);
+insert into t (id,a) values (978,1);
+insert into t (id,a) values (978,2);
+insert into t (id,a) values (978,3);
+insert into t (id,a) values (978,4);
+insert into t (id,a) values (978,5);
+insert into t (id,a) values (978,6);
+insert into t (id,a) values (978,7);
+insert into t (id,a) values (978,8);
+insert into t (id,a) values (978,9);
+insert into t (id,a) values (978,10);
+insert into t (id,a) values (978,11);
+insert into t (id,a) values (978,12);
+insert into t (id,a) values (978,13);
+insert into t (id,a) values (978,14);
+insert into t (id,a) values (978,15);
+insert into t (id,a) values (978,16);
+insert into t (id,a) values (978,17);
+insert into t (id,a) values (978,18);
+insert into t (id,a) values (978,19);
+insert into t (id,a) values (978,20);
+insert into t (id,a) values (978,21);
+insert into t (id,a) values (978,22);
+insert into t (id,a) values (978,23);
+insert into t (id,a) values (978,24);
+insert into t (id,a) values (978,25);
+insert into t (id,a) values (978,26);
+insert into t (id,a) values (978,27);
+insert into t (id,a) values (978,28);
+insert into t (id,a) values (978,29);
+insert into t (id,a) values (978,30);
+insert into t (id,a) values (978,31);
+insert into t (id,a) values (978,32);
+insert into t (id,a) values (978,33);
+insert into t (id,a) values (978,34);
+insert into t (id,a) values (978,35);
+insert into t (id,a) values (978,36);
+insert into t (id,a) values (978,37);
+insert into t (id,a) values (978,38);
+insert into t (id,a) values (978,39);
+insert into t (id,a) values (978,40);
+insert into t (id,a) values (978,41);
+insert into t (id,a) values (978,42);
+insert into t (id,a) values (978,43);
+insert into t (id,a) values (978,44);
+insert into t (id,a) values (978,45);
+insert into t (id,a) values (978,46);
+insert into t (id,a) values (978,47);
+insert into t (id,a) values (978,48);
+insert into t (id,a) values (978,49);
+insert into t (id,a) values (978,50);
+insert into t (id,a) values (978,51);
+insert into t (id,a) values (978,52);
+insert into t (id,a) values (978,53);
+insert into t (id,a) values (978,54);
+insert into t (id,a) values (978,55);
+insert into t (id,a) values (978,56);
+insert into t (id,a) values (978,57);
+insert into t (id,a) values (978,58);
+insert into t (id,a) values (978,59);
+insert into t (id,a) values (978,60);
+insert into t (id,a) values (978,61);
+insert into t (id,a) values (978,62);
+insert into t (id,a) values (978,63);
+insert into t (id,a) values (978,64);
+insert into t (id,a) values (978,65);
+insert into t (id,a) values (978,66);
+insert into t (id,a) values (978,67);
+insert into t (id,a) values (978,68);
+insert into t (id,a) values (978,69);
+insert into t (id,a) values (978,70);
+insert into t (id,a) values (978,71);
+insert into t (id,a) values (978,72);
+insert into t (id,a) values (978,73);
+insert into t (id,a) values (978,74);
+insert into t (id,a) values (978,75);
+insert into t (id,a) values (978,76);
+insert into t (id,a) values (978,77);
+insert into t (id,a) values (978,78);
+insert into t (id,a) values (978,79);
+insert into t (id,a) values (978,80);
+insert into t (id,a) values (978,81);
+insert into t (id,a) values (978,82);
+insert into t (id,a) values (978,83);
+insert into t (id,a) values (978,84);
+insert into t (id,a) values (978,85);
+insert into t (id,a) values (978,86);
+insert into t (id,a) values (978,87);
+insert into t (id,a) values (978,88);
+insert into t (id,a) values (978,89);
+insert into t (id,a) values (978,90);
+insert into t (id,a) values (978,91);
+insert into t (id,a) values (978,92);
+insert into t (id,a) values (978,93);
+insert into t (id,a) values (978,94);
+insert into t (id,a) values (978,95);
+insert into t (id,a) values (978,96);
+insert into t (id,a) values (978,97);
+insert into t (id,a) values (978,98);
+insert into t (id,a) values (978,99);
+insert into t (id,a) values (979,0);
+insert into t (id,a) values (979,1);
+insert into t (id,a) values (979,2);
+insert into t (id,a) values (979,3);
+insert into t (id,a) values (979,4);
+insert into t (id,a) values (979,5);
+insert into t (id,a) values (979,6);
+insert into t (id,a) values (979,7);
+insert into t (id,a) values (979,8);
+insert into t (id,a) values (979,9);
+insert into t (id,a) values (979,10);
+insert into t (id,a) values (979,11);
+insert into t (id,a) values (979,12);
+insert into t (id,a) values (979,13);
+insert into t (id,a) values (979,14);
+insert into t (id,a) values (979,15);
+insert into t (id,a) values (979,16);
+insert into t (id,a) values (979,17);
+insert into t (id,a) values (979,18);
+insert into t (id,a) values (979,19);
+insert into t (id,a) values (979,20);
+insert into t (id,a) values (979,21);
+insert into t (id,a) values (979,22);
+insert into t (id,a) values (979,23);
+insert into t (id,a) values (979,24);
+insert into t (id,a) values (979,25);
+insert into t (id,a) values (979,26);
+insert into t (id,a) values (979,27);
+insert into t (id,a) values (979,28);
+insert into t (id,a) values (979,29);
+insert into t (id,a) values (979,30);
+insert into t (id,a) values (979,31);
+insert into t (id,a) values (979,32);
+insert into t (id,a) values (979,33);
+insert into t (id,a) values (979,34);
+insert into t (id,a) values (979,35);
+insert into t (id,a) values (979,36);
+insert into t (id,a) values (979,37);
+insert into t (id,a) values (979,38);
+insert into t (id,a) values (979,39);
+insert into t (id,a) values (979,40);
+insert into t (id,a) values (979,41);
+insert into t (id,a) values (979,42);
+insert into t (id,a) values (979,43);
+insert into t (id,a) values (979,44);
+insert into t (id,a) values (979,45);
+insert into t (id,a) values (979,46);
+insert into t (id,a) values (979,47);
+insert into t (id,a) values (979,48);
+insert into t (id,a) values (979,49);
+insert into t (id,a) values (979,50);
+insert into t (id,a) values (979,51);
+insert into t (id,a) values (979,52);
+insert into t (id,a) values (979,53);
+insert into t (id,a) values (979,54);
+insert into t (id,a) values (979,55);
+insert into t (id,a) values (979,56);
+insert into t (id,a) values (979,57);
+insert into t (id,a) values (979,58);
+insert into t (id,a) values (979,59);
+insert into t (id,a) values (979,60);
+insert into t (id,a) values (979,61);
+insert into t (id,a) values (979,62);
+insert into t (id,a) values (979,63);
+insert into t (id,a) values (979,64);
+insert into t (id,a) values (979,65);
+insert into t (id,a) values (979,66);
+insert into t (id,a) values (979,67);
+insert into t (id,a) values (979,68);
+insert into t (id,a) values (979,69);
+insert into t (id,a) values (979,70);
+insert into t (id,a) values (979,71);
+insert into t (id,a) values (979,72);
+insert into t (id,a) values (979,73);
+insert into t (id,a) values (979,74);
+insert into t (id,a) values (979,75);
+insert into t (id,a) values (979,76);
+insert into t (id,a) values (979,77);
+insert into t (id,a) values (979,78);
+insert into t (id,a) values (979,79);
+insert into t (id,a) values (979,80);
+insert into t (id,a) values (979,81);
+insert into t (id,a) values (979,82);
+insert into t (id,a) values (979,83);
+insert into t (id,a) values (979,84);
+insert into t (id,a) values (979,85);
+insert into t (id,a) values (979,86);
+insert into t (id,a) values (979,87);
+insert into t (id,a) values (979,88);
+insert into t (id,a) values (979,89);
+insert into t (id,a) values (979,90);
+insert into t (id,a) values (979,91);
+insert into t (id,a) values (979,92);
+insert into t (id,a) values (979,93);
+insert into t (id,a) values (979,94);
+insert into t (id,a) values (979,95);
+insert into t (id,a) values (979,96);
+insert into t (id,a) values (979,97);
+insert into t (id,a) values (979,98);
+insert into t (id,a) values (979,99);
+insert into t (id,a) values (980,0);
+insert into t (id,a) values (980,1);
+insert into t (id,a) values (980,2);
+insert into t (id,a) values (980,3);
+insert into t (id,a) values (980,4);
+insert into t (id,a) values (980,5);
+insert into t (id,a) values (980,6);
+insert into t (id,a) values (980,7);
+insert into t (id,a) values (980,8);
+insert into t (id,a) values (980,9);
+insert into t (id,a) values (980,10);
+insert into t (id,a) values (980,11);
+insert into t (id,a) values (980,12);
+insert into t (id,a) values (980,13);
+insert into t (id,a) values (980,14);
+insert into t (id,a) values (980,15);
+insert into t (id,a) values (980,16);
+insert into t (id,a) values (980,17);
+insert into t (id,a) values (980,18);
+insert into t (id,a) values (980,19);
+insert into t (id,a) values (980,20);
+insert into t (id,a) values (980,21);
+insert into t (id,a) values (980,22);
+insert into t (id,a) values (980,23);
+insert into t (id,a) values (980,24);
+insert into t (id,a) values (980,25);
+insert into t (id,a) values (980,26);
+insert into t (id,a) values (980,27);
+insert into t (id,a) values (980,28);
+insert into t (id,a) values (980,29);
+insert into t (id,a) values (980,30);
+insert into t (id,a) values (980,31);
+insert into t (id,a) values (980,32);
+insert into t (id,a) values (980,33);
+insert into t (id,a) values (980,34);
+insert into t (id,a) values (980,35);
+insert into t (id,a) values (980,36);
+insert into t (id,a) values (980,37);
+insert into t (id,a) values (980,38);
+insert into t (id,a) values (980,39);
+insert into t (id,a) values (980,40);
+insert into t (id,a) values (980,41);
+insert into t (id,a) values (980,42);
+insert into t (id,a) values (980,43);
+insert into t (id,a) values (980,44);
+insert into t (id,a) values (980,45);
+insert into t (id,a) values (980,46);
+insert into t (id,a) values (980,47);
+insert into t (id,a) values (980,48);
+insert into t (id,a) values (980,49);
+insert into t (id,a) values (980,50);
+insert into t (id,a) values (980,51);
+insert into t (id,a) values (980,52);
+insert into t (id,a) values (980,53);
+insert into t (id,a) values (980,54);
+insert into t (id,a) values (980,55);
+insert into t (id,a) values (980,56);
+insert into t (id,a) values (980,57);
+insert into t (id,a) values (980,58);
+insert into t (id,a) values (980,59);
+insert into t (id,a) values (980,60);
+insert into t (id,a) values (980,61);
+insert into t (id,a) values (980,62);
+insert into t (id,a) values (980,63);
+insert into t (id,a) values (980,64);
+insert into t (id,a) values (980,65);
+insert into t (id,a) values (980,66);
+insert into t (id,a) values (980,67);
+insert into t (id,a) values (980,68);
+insert into t (id,a) values (980,69);
+insert into t (id,a) values (980,70);
+insert into t (id,a) values (980,71);
+insert into t (id,a) values (980,72);
+insert into t (id,a) values (980,73);
+insert into t (id,a) values (980,74);
+insert into t (id,a) values (980,75);
+insert into t (id,a) values (980,76);
+insert into t (id,a) values (980,77);
+insert into t (id,a) values (980,78);
+insert into t (id,a) values (980,79);
+insert into t (id,a) values (980,80);
+insert into t (id,a) values (980,81);
+insert into t (id,a) values (980,82);
+insert into t (id,a) values (980,83);
+insert into t (id,a) values (980,84);
+insert into t (id,a) values (980,85);
+insert into t (id,a) values (980,86);
+insert into t (id,a) values (980,87);
+insert into t (id,a) values (980,88);
+insert into t (id,a) values (980,89);
+insert into t (id,a) values (980,90);
+insert into t (id,a) values (980,91);
+insert into t (id,a) values (980,92);
+insert into t (id,a) values (980,93);
+insert into t (id,a) values (980,94);
+insert into t (id,a) values (980,95);
+insert into t (id,a) values (980,96);
+insert into t (id,a) values (980,97);
+insert into t (id,a) values (980,98);
+insert into t (id,a) values (980,99);
+insert into t (id,a) values (981,0);
+insert into t (id,a) values (981,1);
+insert into t (id,a) values (981,2);
+insert into t (id,a) values (981,3);
+insert into t (id,a) values (981,4);
+insert into t (id,a) values (981,5);
+insert into t (id,a) values (981,6);
+insert into t (id,a) values (981,7);
+insert into t (id,a) values (981,8);
+insert into t (id,a) values (981,9);
+insert into t (id,a) values (981,10);
+insert into t (id,a) values (981,11);
+insert into t (id,a) values (981,12);
+insert into t (id,a) values (981,13);
+insert into t (id,a) values (981,14);
+insert into t (id,a) values (981,15);
+insert into t (id,a) values (981,16);
+insert into t (id,a) values (981,17);
+insert into t (id,a) values (981,18);
+insert into t (id,a) values (981,19);
+insert into t (id,a) values (981,20);
+insert into t (id,a) values (981,21);
+insert into t (id,a) values (981,22);
+insert into t (id,a) values (981,23);
+insert into t (id,a) values (981,24);
+insert into t (id,a) values (981,25);
+insert into t (id,a) values (981,26);
+insert into t (id,a) values (981,27);
+insert into t (id,a) values (981,28);
+insert into t (id,a) values (981,29);
+insert into t (id,a) values (981,30);
+insert into t (id,a) values (981,31);
+insert into t (id,a) values (981,32);
+insert into t (id,a) values (981,33);
+insert into t (id,a) values (981,34);
+insert into t (id,a) values (981,35);
+insert into t (id,a) values (981,36);
+insert into t (id,a) values (981,37);
+insert into t (id,a) values (981,38);
+insert into t (id,a) values (981,39);
+insert into t (id,a) values (981,40);
+insert into t (id,a) values (981,41);
+insert into t (id,a) values (981,42);
+insert into t (id,a) values (981,43);
+insert into t (id,a) values (981,44);
+insert into t (id,a) values (981,45);
+insert into t (id,a) values (981,46);
+insert into t (id,a) values (981,47);
+insert into t (id,a) values (981,48);
+insert into t (id,a) values (981,49);
+insert into t (id,a) values (981,50);
+insert into t (id,a) values (981,51);
+insert into t (id,a) values (981,52);
+insert into t (id,a) values (981,53);
+insert into t (id,a) values (981,54);
+insert into t (id,a) values (981,55);
+insert into t (id,a) values (981,56);
+insert into t (id,a) values (981,57);
+insert into t (id,a) values (981,58);
+insert into t (id,a) values (981,59);
+insert into t (id,a) values (981,60);
+insert into t (id,a) values (981,61);
+insert into t (id,a) values (981,62);
+insert into t (id,a) values (981,63);
+insert into t (id,a) values (981,64);
+insert into t (id,a) values (981,65);
+insert into t (id,a) values (981,66);
+insert into t (id,a) values (981,67);
+insert into t (id,a) values (981,68);
+insert into t (id,a) values (981,69);
+insert into t (id,a) values (981,70);
+insert into t (id,a) values (981,71);
+insert into t (id,a) values (981,72);
+insert into t (id,a) values (981,73);
+insert into t (id,a) values (981,74);
+insert into t (id,a) values (981,75);
+insert into t (id,a) values (981,76);
+insert into t (id,a) values (981,77);
+insert into t (id,a) values (981,78);
+insert into t (id,a) values (981,79);
+insert into t (id,a) values (981,80);
+insert into t (id,a) values (981,81);
+insert into t (id,a) values (981,82);
+insert into t (id,a) values (981,83);
+insert into t (id,a) values (981,84);
+insert into t (id,a) values (981,85);
+insert into t (id,a) values (981,86);
+insert into t (id,a) values (981,87);
+insert into t (id,a) values (981,88);
+insert into t (id,a) values (981,89);
+insert into t (id,a) values (981,90);
+insert into t (id,a) values (981,91);
+insert into t (id,a) values (981,92);
+insert into t (id,a) values (981,93);
+insert into t (id,a) values (981,94);
+insert into t (id,a) values (981,95);
+insert into t (id,a) values (981,96);
+insert into t (id,a) values (981,97);
+insert into t (id,a) values (981,98);
+insert into t (id,a) values (981,99);
+insert into t (id,a) values (982,0);
+insert into t (id,a) values (982,1);
+insert into t (id,a) values (982,2);
+insert into t (id,a) values (982,3);
+insert into t (id,a) values (982,4);
+insert into t (id,a) values (982,5);
+insert into t (id,a) values (982,6);
+insert into t (id,a) values (982,7);
+insert into t (id,a) values (982,8);
+insert into t (id,a) values (982,9);
+insert into t (id,a) values (982,10);
+insert into t (id,a) values (982,11);
+insert into t (id,a) values (982,12);
+insert into t (id,a) values (982,13);
+insert into t (id,a) values (982,14);
+insert into t (id,a) values (982,15);
+insert into t (id,a) values (982,16);
+insert into t (id,a) values (982,17);
+insert into t (id,a) values (982,18);
+insert into t (id,a) values (982,19);
+insert into t (id,a) values (982,20);
+insert into t (id,a) values (982,21);
+insert into t (id,a) values (982,22);
+insert into t (id,a) values (982,23);
+insert into t (id,a) values (982,24);
+insert into t (id,a) values (982,25);
+insert into t (id,a) values (982,26);
+insert into t (id,a) values (982,27);
+insert into t (id,a) values (982,28);
+insert into t (id,a) values (982,29);
+insert into t (id,a) values (982,30);
+insert into t (id,a) values (982,31);
+insert into t (id,a) values (982,32);
+insert into t (id,a) values (982,33);
+insert into t (id,a) values (982,34);
+insert into t (id,a) values (982,35);
+insert into t (id,a) values (982,36);
+insert into t (id,a) values (982,37);
+insert into t (id,a) values (982,38);
+insert into t (id,a) values (982,39);
+insert into t (id,a) values (982,40);
+insert into t (id,a) values (982,41);
+insert into t (id,a) values (982,42);
+insert into t (id,a) values (982,43);
+insert into t (id,a) values (982,44);
+insert into t (id,a) values (982,45);
+insert into t (id,a) values (982,46);
+insert into t (id,a) values (982,47);
+insert into t (id,a) values (982,48);
+insert into t (id,a) values (982,49);
+insert into t (id,a) values (982,50);
+insert into t (id,a) values (982,51);
+insert into t (id,a) values (982,52);
+insert into t (id,a) values (982,53);
+insert into t (id,a) values (982,54);
+insert into t (id,a) values (982,55);
+insert into t (id,a) values (982,56);
+insert into t (id,a) values (982,57);
+insert into t (id,a) values (982,58);
+insert into t (id,a) values (982,59);
+insert into t (id,a) values (982,60);
+insert into t (id,a) values (982,61);
+insert into t (id,a) values (982,62);
+insert into t (id,a) values (982,63);
+insert into t (id,a) values (982,64);
+insert into t (id,a) values (982,65);
+insert into t (id,a) values (982,66);
+insert into t (id,a) values (982,67);
+insert into t (id,a) values (982,68);
+insert into t (id,a) values (982,69);
+insert into t (id,a) values (982,70);
+insert into t (id,a) values (982,71);
+insert into t (id,a) values (982,72);
+insert into t (id,a) values (982,73);
+insert into t (id,a) values (982,74);
+insert into t (id,a) values (982,75);
+insert into t (id,a) values (982,76);
+insert into t (id,a) values (982,77);
+insert into t (id,a) values (982,78);
+insert into t (id,a) values (982,79);
+insert into t (id,a) values (982,80);
+insert into t (id,a) values (982,81);
+insert into t (id,a) values (982,82);
+insert into t (id,a) values (982,83);
+insert into t (id,a) values (982,84);
+insert into t (id,a) values (982,85);
+insert into t (id,a) values (982,86);
+insert into t (id,a) values (982,87);
+insert into t (id,a) values (982,88);
+insert into t (id,a) values (982,89);
+insert into t (id,a) values (982,90);
+insert into t (id,a) values (982,91);
+insert into t (id,a) values (982,92);
+insert into t (id,a) values (982,93);
+insert into t (id,a) values (982,94);
+insert into t (id,a) values (982,95);
+insert into t (id,a) values (982,96);
+insert into t (id,a) values (982,97);
+insert into t (id,a) values (982,98);
+insert into t (id,a) values (982,99);
+insert into t (id,a) values (983,0);
+insert into t (id,a) values (983,1);
+insert into t (id,a) values (983,2);
+insert into t (id,a) values (983,3);
+insert into t (id,a) values (983,4);
+insert into t (id,a) values (983,5);
+insert into t (id,a) values (983,6);
+insert into t (id,a) values (983,7);
+insert into t (id,a) values (983,8);
+insert into t (id,a) values (983,9);
+insert into t (id,a) values (983,10);
+insert into t (id,a) values (983,11);
+insert into t (id,a) values (983,12);
+insert into t (id,a) values (983,13);
+insert into t (id,a) values (983,14);
+insert into t (id,a) values (983,15);
+insert into t (id,a) values (983,16);
+insert into t (id,a) values (983,17);
+insert into t (id,a) values (983,18);
+insert into t (id,a) values (983,19);
+insert into t (id,a) values (983,20);
+insert into t (id,a) values (983,21);
+insert into t (id,a) values (983,22);
+insert into t (id,a) values (983,23);
+insert into t (id,a) values (983,24);
+insert into t (id,a) values (983,25);
+insert into t (id,a) values (983,26);
+insert into t (id,a) values (983,27);
+insert into t (id,a) values (983,28);
+insert into t (id,a) values (983,29);
+insert into t (id,a) values (983,30);
+insert into t (id,a) values (983,31);
+insert into t (id,a) values (983,32);
+insert into t (id,a) values (983,33);
+insert into t (id,a) values (983,34);
+insert into t (id,a) values (983,35);
+insert into t (id,a) values (983,36);
+insert into t (id,a) values (983,37);
+insert into t (id,a) values (983,38);
+insert into t (id,a) values (983,39);
+insert into t (id,a) values (983,40);
+insert into t (id,a) values (983,41);
+insert into t (id,a) values (983,42);
+insert into t (id,a) values (983,43);
+insert into t (id,a) values (983,44);
+insert into t (id,a) values (983,45);
+insert into t (id,a) values (983,46);
+insert into t (id,a) values (983,47);
+insert into t (id,a) values (983,48);
+insert into t (id,a) values (983,49);
+insert into t (id,a) values (983,50);
+insert into t (id,a) values (983,51);
+insert into t (id,a) values (983,52);
+insert into t (id,a) values (983,53);
+insert into t (id,a) values (983,54);
+insert into t (id,a) values (983,55);
+insert into t (id,a) values (983,56);
+insert into t (id,a) values (983,57);
+insert into t (id,a) values (983,58);
+insert into t (id,a) values (983,59);
+insert into t (id,a) values (983,60);
+insert into t (id,a) values (983,61);
+insert into t (id,a) values (983,62);
+insert into t (id,a) values (983,63);
+insert into t (id,a) values (983,64);
+insert into t (id,a) values (983,65);
+insert into t (id,a) values (983,66);
+insert into t (id,a) values (983,67);
+insert into t (id,a) values (983,68);
+insert into t (id,a) values (983,69);
+insert into t (id,a) values (983,70);
+insert into t (id,a) values (983,71);
+insert into t (id,a) values (983,72);
+insert into t (id,a) values (983,73);
+insert into t (id,a) values (983,74);
+insert into t (id,a) values (983,75);
+insert into t (id,a) values (983,76);
+insert into t (id,a) values (983,77);
+insert into t (id,a) values (983,78);
+insert into t (id,a) values (983,79);
+insert into t (id,a) values (983,80);
+insert into t (id,a) values (983,81);
+insert into t (id,a) values (983,82);
+insert into t (id,a) values (983,83);
+insert into t (id,a) values (983,84);
+insert into t (id,a) values (983,85);
+insert into t (id,a) values (983,86);
+insert into t (id,a) values (983,87);
+insert into t (id,a) values (983,88);
+insert into t (id,a) values (983,89);
+insert into t (id,a) values (983,90);
+insert into t (id,a) values (983,91);
+insert into t (id,a) values (983,92);
+insert into t (id,a) values (983,93);
+insert into t (id,a) values (983,94);
+insert into t (id,a) values (983,95);
+insert into t (id,a) values (983,96);
+insert into t (id,a) values (983,97);
+insert into t (id,a) values (983,98);
+insert into t (id,a) values (983,99);
+insert into t (id,a) values (984,0);
+insert into t (id,a) values (984,1);
+insert into t (id,a) values (984,2);
+insert into t (id,a) values (984,3);
+insert into t (id,a) values (984,4);
+insert into t (id,a) values (984,5);
+insert into t (id,a) values (984,6);
+insert into t (id,a) values (984,7);
+insert into t (id,a) values (984,8);
+insert into t (id,a) values (984,9);
+insert into t (id,a) values (984,10);
+insert into t (id,a) values (984,11);
+insert into t (id,a) values (984,12);
+insert into t (id,a) values (984,13);
+insert into t (id,a) values (984,14);
+insert into t (id,a) values (984,15);
+insert into t (id,a) values (984,16);
+insert into t (id,a) values (984,17);
+insert into t (id,a) values (984,18);
+insert into t (id,a) values (984,19);
+insert into t (id,a) values (984,20);
+insert into t (id,a) values (984,21);
+insert into t (id,a) values (984,22);
+insert into t (id,a) values (984,23);
+insert into t (id,a) values (984,24);
+insert into t (id,a) values (984,25);
+insert into t (id,a) values (984,26);
+insert into t (id,a) values (984,27);
+insert into t (id,a) values (984,28);
+insert into t (id,a) values (984,29);
+insert into t (id,a) values (984,30);
+insert into t (id,a) values (984,31);
+insert into t (id,a) values (984,32);
+insert into t (id,a) values (984,33);
+insert into t (id,a) values (984,34);
+insert into t (id,a) values (984,35);
+insert into t (id,a) values (984,36);
+insert into t (id,a) values (984,37);
+insert into t (id,a) values (984,38);
+insert into t (id,a) values (984,39);
+insert into t (id,a) values (984,40);
+insert into t (id,a) values (984,41);
+insert into t (id,a) values (984,42);
+insert into t (id,a) values (984,43);
+insert into t (id,a) values (984,44);
+insert into t (id,a) values (984,45);
+insert into t (id,a) values (984,46);
+insert into t (id,a) values (984,47);
+insert into t (id,a) values (984,48);
+insert into t (id,a) values (984,49);
+insert into t (id,a) values (984,50);
+insert into t (id,a) values (984,51);
+insert into t (id,a) values (984,52);
+insert into t (id,a) values (984,53);
+insert into t (id,a) values (984,54);
+insert into t (id,a) values (984,55);
+insert into t (id,a) values (984,56);
+insert into t (id,a) values (984,57);
+insert into t (id,a) values (984,58);
+insert into t (id,a) values (984,59);
+insert into t (id,a) values (984,60);
+insert into t (id,a) values (984,61);
+insert into t (id,a) values (984,62);
+insert into t (id,a) values (984,63);
+insert into t (id,a) values (984,64);
+insert into t (id,a) values (984,65);
+insert into t (id,a) values (984,66);
+insert into t (id,a) values (984,67);
+insert into t (id,a) values (984,68);
+insert into t (id,a) values (984,69);
+insert into t (id,a) values (984,70);
+insert into t (id,a) values (984,71);
+insert into t (id,a) values (984,72);
+insert into t (id,a) values (984,73);
+insert into t (id,a) values (984,74);
+insert into t (id,a) values (984,75);
+insert into t (id,a) values (984,76);
+insert into t (id,a) values (984,77);
+insert into t (id,a) values (984,78);
+insert into t (id,a) values (984,79);
+insert into t (id,a) values (984,80);
+insert into t (id,a) values (984,81);
+insert into t (id,a) values (984,82);
+insert into t (id,a) values (984,83);
+insert into t (id,a) values (984,84);
+insert into t (id,a) values (984,85);
+insert into t (id,a) values (984,86);
+insert into t (id,a) values (984,87);
+insert into t (id,a) values (984,88);
+insert into t (id,a) values (984,89);
+insert into t (id,a) values (984,90);
+insert into t (id,a) values (984,91);
+insert into t (id,a) values (984,92);
+insert into t (id,a) values (984,93);
+insert into t (id,a) values (984,94);
+insert into t (id,a) values (984,95);
+insert into t (id,a) values (984,96);
+insert into t (id,a) values (984,97);
+insert into t (id,a) values (984,98);
+insert into t (id,a) values (984,99);
+insert into t (id,a) values (985,0);
+insert into t (id,a) values (985,1);
+insert into t (id,a) values (985,2);
+insert into t (id,a) values (985,3);
+insert into t (id,a) values (985,4);
+insert into t (id,a) values (985,5);
+insert into t (id,a) values (985,6);
+insert into t (id,a) values (985,7);
+insert into t (id,a) values (985,8);
+insert into t (id,a) values (985,9);
+insert into t (id,a) values (985,10);
+insert into t (id,a) values (985,11);
+insert into t (id,a) values (985,12);
+insert into t (id,a) values (985,13);
+insert into t (id,a) values (985,14);
+insert into t (id,a) values (985,15);
+insert into t (id,a) values (985,16);
+insert into t (id,a) values (985,17);
+insert into t (id,a) values (985,18);
+insert into t (id,a) values (985,19);
+insert into t (id,a) values (985,20);
+insert into t (id,a) values (985,21);
+insert into t (id,a) values (985,22);
+insert into t (id,a) values (985,23);
+insert into t (id,a) values (985,24);
+insert into t (id,a) values (985,25);
+insert into t (id,a) values (985,26);
+insert into t (id,a) values (985,27);
+insert into t (id,a) values (985,28);
+insert into t (id,a) values (985,29);
+insert into t (id,a) values (985,30);
+insert into t (id,a) values (985,31);
+insert into t (id,a) values (985,32);
+insert into t (id,a) values (985,33);
+insert into t (id,a) values (985,34);
+insert into t (id,a) values (985,35);
+insert into t (id,a) values (985,36);
+insert into t (id,a) values (985,37);
+insert into t (id,a) values (985,38);
+insert into t (id,a) values (985,39);
+insert into t (id,a) values (985,40);
+insert into t (id,a) values (985,41);
+insert into t (id,a) values (985,42);
+insert into t (id,a) values (985,43);
+insert into t (id,a) values (985,44);
+insert into t (id,a) values (985,45);
+insert into t (id,a) values (985,46);
+insert into t (id,a) values (985,47);
+insert into t (id,a) values (985,48);
+insert into t (id,a) values (985,49);
+insert into t (id,a) values (985,50);
+insert into t (id,a) values (985,51);
+insert into t (id,a) values (985,52);
+insert into t (id,a) values (985,53);
+insert into t (id,a) values (985,54);
+insert into t (id,a) values (985,55);
+insert into t (id,a) values (985,56);
+insert into t (id,a) values (985,57);
+insert into t (id,a) values (985,58);
+insert into t (id,a) values (985,59);
+insert into t (id,a) values (985,60);
+insert into t (id,a) values (985,61);
+insert into t (id,a) values (985,62);
+insert into t (id,a) values (985,63);
+insert into t (id,a) values (985,64);
+insert into t (id,a) values (985,65);
+insert into t (id,a) values (985,66);
+insert into t (id,a) values (985,67);
+insert into t (id,a) values (985,68);
+insert into t (id,a) values (985,69);
+insert into t (id,a) values (985,70);
+insert into t (id,a) values (985,71);
+insert into t (id,a) values (985,72);
+insert into t (id,a) values (985,73);
+insert into t (id,a) values (985,74);
+insert into t (id,a) values (985,75);
+insert into t (id,a) values (985,76);
+insert into t (id,a) values (985,77);
+insert into t (id,a) values (985,78);
+insert into t (id,a) values (985,79);
+insert into t (id,a) values (985,80);
+insert into t (id,a) values (985,81);
+insert into t (id,a) values (985,82);
+insert into t (id,a) values (985,83);
+insert into t (id,a) values (985,84);
+insert into t (id,a) values (985,85);
+insert into t (id,a) values (985,86);
+insert into t (id,a) values (985,87);
+insert into t (id,a) values (985,88);
+insert into t (id,a) values (985,89);
+insert into t (id,a) values (985,90);
+insert into t (id,a) values (985,91);
+insert into t (id,a) values (985,92);
+insert into t (id,a) values (985,93);
+insert into t (id,a) values (985,94);
+insert into t (id,a) values (985,95);
+insert into t (id,a) values (985,96);
+insert into t (id,a) values (985,97);
+insert into t (id,a) values (985,98);
+insert into t (id,a) values (985,99);
+insert into t (id,a) values (986,0);
+insert into t (id,a) values (986,1);
+insert into t (id,a) values (986,2);
+insert into t (id,a) values (986,3);
+insert into t (id,a) values (986,4);
+insert into t (id,a) values (986,5);
+insert into t (id,a) values (986,6);
+insert into t (id,a) values (986,7);
+insert into t (id,a) values (986,8);
+insert into t (id,a) values (986,9);
+insert into t (id,a) values (986,10);
+insert into t (id,a) values (986,11);
+insert into t (id,a) values (986,12);
+insert into t (id,a) values (986,13);
+insert into t (id,a) values (986,14);
+insert into t (id,a) values (986,15);
+insert into t (id,a) values (986,16);
+insert into t (id,a) values (986,17);
+insert into t (id,a) values (986,18);
+insert into t (id,a) values (986,19);
+insert into t (id,a) values (986,20);
+insert into t (id,a) values (986,21);
+insert into t (id,a) values (986,22);
+insert into t (id,a) values (986,23);
+insert into t (id,a) values (986,24);
+insert into t (id,a) values (986,25);
+insert into t (id,a) values (986,26);
+insert into t (id,a) values (986,27);
+insert into t (id,a) values (986,28);
+insert into t (id,a) values (986,29);
+insert into t (id,a) values (986,30);
+insert into t (id,a) values (986,31);
+insert into t (id,a) values (986,32);
+insert into t (id,a) values (986,33);
+insert into t (id,a) values (986,34);
+insert into t (id,a) values (986,35);
+insert into t (id,a) values (986,36);
+insert into t (id,a) values (986,37);
+insert into t (id,a) values (986,38);
+insert into t (id,a) values (986,39);
+insert into t (id,a) values (986,40);
+insert into t (id,a) values (986,41);
+insert into t (id,a) values (986,42);
+insert into t (id,a) values (986,43);
+insert into t (id,a) values (986,44);
+insert into t (id,a) values (986,45);
+insert into t (id,a) values (986,46);
+insert into t (id,a) values (986,47);
+insert into t (id,a) values (986,48);
+insert into t (id,a) values (986,49);
+insert into t (id,a) values (986,50);
+insert into t (id,a) values (986,51);
+insert into t (id,a) values (986,52);
+insert into t (id,a) values (986,53);
+insert into t (id,a) values (986,54);
+insert into t (id,a) values (986,55);
+insert into t (id,a) values (986,56);
+insert into t (id,a) values (986,57);
+insert into t (id,a) values (986,58);
+insert into t (id,a) values (986,59);
+insert into t (id,a) values (986,60);
+insert into t (id,a) values (986,61);
+insert into t (id,a) values (986,62);
+insert into t (id,a) values (986,63);
+insert into t (id,a) values (986,64);
+insert into t (id,a) values (986,65);
+insert into t (id,a) values (986,66);
+insert into t (id,a) values (986,67);
+insert into t (id,a) values (986,68);
+insert into t (id,a) values (986,69);
+insert into t (id,a) values (986,70);
+insert into t (id,a) values (986,71);
+insert into t (id,a) values (986,72);
+insert into t (id,a) values (986,73);
+insert into t (id,a) values (986,74);
+insert into t (id,a) values (986,75);
+insert into t (id,a) values (986,76);
+insert into t (id,a) values (986,77);
+insert into t (id,a) values (986,78);
+insert into t (id,a) values (986,79);
+insert into t (id,a) values (986,80);
+insert into t (id,a) values (986,81);
+insert into t (id,a) values (986,82);
+insert into t (id,a) values (986,83);
+insert into t (id,a) values (986,84);
+insert into t (id,a) values (986,85);
+insert into t (id,a) values (986,86);
+insert into t (id,a) values (986,87);
+insert into t (id,a) values (986,88);
+insert into t (id,a) values (986,89);
+insert into t (id,a) values (986,90);
+insert into t (id,a) values (986,91);
+insert into t (id,a) values (986,92);
+insert into t (id,a) values (986,93);
+insert into t (id,a) values (986,94);
+insert into t (id,a) values (986,95);
+insert into t (id,a) values (986,96);
+insert into t (id,a) values (986,97);
+insert into t (id,a) values (986,98);
+insert into t (id,a) values (986,99);
+insert into t (id,a) values (987,0);
+insert into t (id,a) values (987,1);
+insert into t (id,a) values (987,2);
+insert into t (id,a) values (987,3);
+insert into t (id,a) values (987,4);
+insert into t (id,a) values (987,5);
+insert into t (id,a) values (987,6);
+insert into t (id,a) values (987,7);
+insert into t (id,a) values (987,8);
+insert into t (id,a) values (987,9);
+insert into t (id,a) values (987,10);
+insert into t (id,a) values (987,11);
+insert into t (id,a) values (987,12);
+insert into t (id,a) values (987,13);
+insert into t (id,a) values (987,14);
+insert into t (id,a) values (987,15);
+insert into t (id,a) values (987,16);
+insert into t (id,a) values (987,17);
+insert into t (id,a) values (987,18);
+insert into t (id,a) values (987,19);
+insert into t (id,a) values (987,20);
+insert into t (id,a) values (987,21);
+insert into t (id,a) values (987,22);
+insert into t (id,a) values (987,23);
+insert into t (id,a) values (987,24);
+insert into t (id,a) values (987,25);
+insert into t (id,a) values (987,26);
+insert into t (id,a) values (987,27);
+insert into t (id,a) values (987,28);
+insert into t (id,a) values (987,29);
+insert into t (id,a) values (987,30);
+insert into t (id,a) values (987,31);
+insert into t (id,a) values (987,32);
+insert into t (id,a) values (987,33);
+insert into t (id,a) values (987,34);
+insert into t (id,a) values (987,35);
+insert into t (id,a) values (987,36);
+insert into t (id,a) values (987,37);
+insert into t (id,a) values (987,38);
+insert into t (id,a) values (987,39);
+insert into t (id,a) values (987,40);
+insert into t (id,a) values (987,41);
+insert into t (id,a) values (987,42);
+insert into t (id,a) values (987,43);
+insert into t (id,a) values (987,44);
+insert into t (id,a) values (987,45);
+insert into t (id,a) values (987,46);
+insert into t (id,a) values (987,47);
+insert into t (id,a) values (987,48);
+insert into t (id,a) values (987,49);
+insert into t (id,a) values (987,50);
+insert into t (id,a) values (987,51);
+insert into t (id,a) values (987,52);
+insert into t (id,a) values (987,53);
+insert into t (id,a) values (987,54);
+insert into t (id,a) values (987,55);
+insert into t (id,a) values (987,56);
+insert into t (id,a) values (987,57);
+insert into t (id,a) values (987,58);
+insert into t (id,a) values (987,59);
+insert into t (id,a) values (987,60);
+insert into t (id,a) values (987,61);
+insert into t (id,a) values (987,62);
+insert into t (id,a) values (987,63);
+insert into t (id,a) values (987,64);
+insert into t (id,a) values (987,65);
+insert into t (id,a) values (987,66);
+insert into t (id,a) values (987,67);
+insert into t (id,a) values (987,68);
+insert into t (id,a) values (987,69);
+insert into t (id,a) values (987,70);
+insert into t (id,a) values (987,71);
+insert into t (id,a) values (987,72);
+insert into t (id,a) values (987,73);
+insert into t (id,a) values (987,74);
+insert into t (id,a) values (987,75);
+insert into t (id,a) values (987,76);
+insert into t (id,a) values (987,77);
+insert into t (id,a) values (987,78);
+insert into t (id,a) values (987,79);
+insert into t (id,a) values (987,80);
+insert into t (id,a) values (987,81);
+insert into t (id,a) values (987,82);
+insert into t (id,a) values (987,83);
+insert into t (id,a) values (987,84);
+insert into t (id,a) values (987,85);
+insert into t (id,a) values (987,86);
+insert into t (id,a) values (987,87);
+insert into t (id,a) values (987,88);
+insert into t (id,a) values (987,89);
+insert into t (id,a) values (987,90);
+insert into t (id,a) values (987,91);
+insert into t (id,a) values (987,92);
+insert into t (id,a) values (987,93);
+insert into t (id,a) values (987,94);
+insert into t (id,a) values (987,95);
+insert into t (id,a) values (987,96);
+insert into t (id,a) values (987,97);
+insert into t (id,a) values (987,98);
+insert into t (id,a) values (987,99);
+insert into t (id,a) values (988,0);
+insert into t (id,a) values (988,1);
+insert into t (id,a) values (988,2);
+insert into t (id,a) values (988,3);
+insert into t (id,a) values (988,4);
+insert into t (id,a) values (988,5);
+insert into t (id,a) values (988,6);
+insert into t (id,a) values (988,7);
+insert into t (id,a) values (988,8);
+insert into t (id,a) values (988,9);
+insert into t (id,a) values (988,10);
+insert into t (id,a) values (988,11);
+insert into t (id,a) values (988,12);
+insert into t (id,a) values (988,13);
+insert into t (id,a) values (988,14);
+insert into t (id,a) values (988,15);
+insert into t (id,a) values (988,16);
+insert into t (id,a) values (988,17);
+insert into t (id,a) values (988,18);
+insert into t (id,a) values (988,19);
+insert into t (id,a) values (988,20);
+insert into t (id,a) values (988,21);
+insert into t (id,a) values (988,22);
+insert into t (id,a) values (988,23);
+insert into t (id,a) values (988,24);
+insert into t (id,a) values (988,25);
+insert into t (id,a) values (988,26);
+insert into t (id,a) values (988,27);
+insert into t (id,a) values (988,28);
+insert into t (id,a) values (988,29);
+insert into t (id,a) values (988,30);
+insert into t (id,a) values (988,31);
+insert into t (id,a) values (988,32);
+insert into t (id,a) values (988,33);
+insert into t (id,a) values (988,34);
+insert into t (id,a) values (988,35);
+insert into t (id,a) values (988,36);
+insert into t (id,a) values (988,37);
+insert into t (id,a) values (988,38);
+insert into t (id,a) values (988,39);
+insert into t (id,a) values (988,40);
+insert into t (id,a) values (988,41);
+insert into t (id,a) values (988,42);
+insert into t (id,a) values (988,43);
+insert into t (id,a) values (988,44);
+insert into t (id,a) values (988,45);
+insert into t (id,a) values (988,46);
+insert into t (id,a) values (988,47);
+insert into t (id,a) values (988,48);
+insert into t (id,a) values (988,49);
+insert into t (id,a) values (988,50);
+insert into t (id,a) values (988,51);
+insert into t (id,a) values (988,52);
+insert into t (id,a) values (988,53);
+insert into t (id,a) values (988,54);
+insert into t (id,a) values (988,55);
+insert into t (id,a) values (988,56);
+insert into t (id,a) values (988,57);
+insert into t (id,a) values (988,58);
+insert into t (id,a) values (988,59);
+insert into t (id,a) values (988,60);
+insert into t (id,a) values (988,61);
+insert into t (id,a) values (988,62);
+insert into t (id,a) values (988,63);
+insert into t (id,a) values (988,64);
+insert into t (id,a) values (988,65);
+insert into t (id,a) values (988,66);
+insert into t (id,a) values (988,67);
+insert into t (id,a) values (988,68);
+insert into t (id,a) values (988,69);
+insert into t (id,a) values (988,70);
+insert into t (id,a) values (988,71);
+insert into t (id,a) values (988,72);
+insert into t (id,a) values (988,73);
+insert into t (id,a) values (988,74);
+insert into t (id,a) values (988,75);
+insert into t (id,a) values (988,76);
+insert into t (id,a) values (988,77);
+insert into t (id,a) values (988,78);
+insert into t (id,a) values (988,79);
+insert into t (id,a) values (988,80);
+insert into t (id,a) values (988,81);
+insert into t (id,a) values (988,82);
+insert into t (id,a) values (988,83);
+insert into t (id,a) values (988,84);
+insert into t (id,a) values (988,85);
+insert into t (id,a) values (988,86);
+insert into t (id,a) values (988,87);
+insert into t (id,a) values (988,88);
+insert into t (id,a) values (988,89);
+insert into t (id,a) values (988,90);
+insert into t (id,a) values (988,91);
+insert into t (id,a) values (988,92);
+insert into t (id,a) values (988,93);
+insert into t (id,a) values (988,94);
+insert into t (id,a) values (988,95);
+insert into t (id,a) values (988,96);
+insert into t (id,a) values (988,97);
+insert into t (id,a) values (988,98);
+insert into t (id,a) values (988,99);
+insert into t (id,a) values (989,0);
+insert into t (id,a) values (989,1);
+insert into t (id,a) values (989,2);
+insert into t (id,a) values (989,3);
+insert into t (id,a) values (989,4);
+insert into t (id,a) values (989,5);
+insert into t (id,a) values (989,6);
+insert into t (id,a) values (989,7);
+insert into t (id,a) values (989,8);
+insert into t (id,a) values (989,9);
+insert into t (id,a) values (989,10);
+insert into t (id,a) values (989,11);
+insert into t (id,a) values (989,12);
+insert into t (id,a) values (989,13);
+insert into t (id,a) values (989,14);
+insert into t (id,a) values (989,15);
+insert into t (id,a) values (989,16);
+insert into t (id,a) values (989,17);
+insert into t (id,a) values (989,18);
+insert into t (id,a) values (989,19);
+insert into t (id,a) values (989,20);
+insert into t (id,a) values (989,21);
+insert into t (id,a) values (989,22);
+insert into t (id,a) values (989,23);
+insert into t (id,a) values (989,24);
+insert into t (id,a) values (989,25);
+insert into t (id,a) values (989,26);
+insert into t (id,a) values (989,27);
+insert into t (id,a) values (989,28);
+insert into t (id,a) values (989,29);
+insert into t (id,a) values (989,30);
+insert into t (id,a) values (989,31);
+insert into t (id,a) values (989,32);
+insert into t (id,a) values (989,33);
+insert into t (id,a) values (989,34);
+insert into t (id,a) values (989,35);
+insert into t (id,a) values (989,36);
+insert into t (id,a) values (989,37);
+insert into t (id,a) values (989,38);
+insert into t (id,a) values (989,39);
+insert into t (id,a) values (989,40);
+insert into t (id,a) values (989,41);
+insert into t (id,a) values (989,42);
+insert into t (id,a) values (989,43);
+insert into t (id,a) values (989,44);
+insert into t (id,a) values (989,45);
+insert into t (id,a) values (989,46);
+insert into t (id,a) values (989,47);
+insert into t (id,a) values (989,48);
+insert into t (id,a) values (989,49);
+insert into t (id,a) values (989,50);
+insert into t (id,a) values (989,51);
+insert into t (id,a) values (989,52);
+insert into t (id,a) values (989,53);
+insert into t (id,a) values (989,54);
+insert into t (id,a) values (989,55);
+insert into t (id,a) values (989,56);
+insert into t (id,a) values (989,57);
+insert into t (id,a) values (989,58);
+insert into t (id,a) values (989,59);
+insert into t (id,a) values (989,60);
+insert into t (id,a) values (989,61);
+insert into t (id,a) values (989,62);
+insert into t (id,a) values (989,63);
+insert into t (id,a) values (989,64);
+insert into t (id,a) values (989,65);
+insert into t (id,a) values (989,66);
+insert into t (id,a) values (989,67);
+insert into t (id,a) values (989,68);
+insert into t (id,a) values (989,69);
+insert into t (id,a) values (989,70);
+insert into t (id,a) values (989,71);
+insert into t (id,a) values (989,72);
+insert into t (id,a) values (989,73);
+insert into t (id,a) values (989,74);
+insert into t (id,a) values (989,75);
+insert into t (id,a) values (989,76);
+insert into t (id,a) values (989,77);
+insert into t (id,a) values (989,78);
+insert into t (id,a) values (989,79);
+insert into t (id,a) values (989,80);
+insert into t (id,a) values (989,81);
+insert into t (id,a) values (989,82);
+insert into t (id,a) values (989,83);
+insert into t (id,a) values (989,84);
+insert into t (id,a) values (989,85);
+insert into t (id,a) values (989,86);
+insert into t (id,a) values (989,87);
+insert into t (id,a) values (989,88);
+insert into t (id,a) values (989,89);
+insert into t (id,a) values (989,90);
+insert into t (id,a) values (989,91);
+insert into t (id,a) values (989,92);
+insert into t (id,a) values (989,93);
+insert into t (id,a) values (989,94);
+insert into t (id,a) values (989,95);
+insert into t (id,a) values (989,96);
+insert into t (id,a) values (989,97);
+insert into t (id,a) values (989,98);
+insert into t (id,a) values (989,99);
+insert into t (id,a) values (990,0);
+insert into t (id,a) values (990,1);
+insert into t (id,a) values (990,2);
+insert into t (id,a) values (990,3);
+insert into t (id,a) values (990,4);
+insert into t (id,a) values (990,5);
+insert into t (id,a) values (990,6);
+insert into t (id,a) values (990,7);
+insert into t (id,a) values (990,8);
+insert into t (id,a) values (990,9);
+insert into t (id,a) values (990,10);
+insert into t (id,a) values (990,11);
+insert into t (id,a) values (990,12);
+insert into t (id,a) values (990,13);
+insert into t (id,a) values (990,14);
+insert into t (id,a) values (990,15);
+insert into t (id,a) values (990,16);
+insert into t (id,a) values (990,17);
+insert into t (id,a) values (990,18);
+insert into t (id,a) values (990,19);
+insert into t (id,a) values (990,20);
+insert into t (id,a) values (990,21);
+insert into t (id,a) values (990,22);
+insert into t (id,a) values (990,23);
+insert into t (id,a) values (990,24);
+insert into t (id,a) values (990,25);
+insert into t (id,a) values (990,26);
+insert into t (id,a) values (990,27);
+insert into t (id,a) values (990,28);
+insert into t (id,a) values (990,29);
+insert into t (id,a) values (990,30);
+insert into t (id,a) values (990,31);
+insert into t (id,a) values (990,32);
+insert into t (id,a) values (990,33);
+insert into t (id,a) values (990,34);
+insert into t (id,a) values (990,35);
+insert into t (id,a) values (990,36);
+insert into t (id,a) values (990,37);
+insert into t (id,a) values (990,38);
+insert into t (id,a) values (990,39);
+insert into t (id,a) values (990,40);
+insert into t (id,a) values (990,41);
+insert into t (id,a) values (990,42);
+insert into t (id,a) values (990,43);
+insert into t (id,a) values (990,44);
+insert into t (id,a) values (990,45);
+insert into t (id,a) values (990,46);
+insert into t (id,a) values (990,47);
+insert into t (id,a) values (990,48);
+insert into t (id,a) values (990,49);
+insert into t (id,a) values (990,50);
+insert into t (id,a) values (990,51);
+insert into t (id,a) values (990,52);
+insert into t (id,a) values (990,53);
+insert into t (id,a) values (990,54);
+insert into t (id,a) values (990,55);
+insert into t (id,a) values (990,56);
+insert into t (id,a) values (990,57);
+insert into t (id,a) values (990,58);
+insert into t (id,a) values (990,59);
+insert into t (id,a) values (990,60);
+insert into t (id,a) values (990,61);
+insert into t (id,a) values (990,62);
+insert into t (id,a) values (990,63);
+insert into t (id,a) values (990,64);
+insert into t (id,a) values (990,65);
+insert into t (id,a) values (990,66);
+insert into t (id,a) values (990,67);
+insert into t (id,a) values (990,68);
+insert into t (id,a) values (990,69);
+insert into t (id,a) values (990,70);
+insert into t (id,a) values (990,71);
+insert into t (id,a) values (990,72);
+insert into t (id,a) values (990,73);
+insert into t (id,a) values (990,74);
+insert into t (id,a) values (990,75);
+insert into t (id,a) values (990,76);
+insert into t (id,a) values (990,77);
+insert into t (id,a) values (990,78);
+insert into t (id,a) values (990,79);
+insert into t (id,a) values (990,80);
+insert into t (id,a) values (990,81);
+insert into t (id,a) values (990,82);
+insert into t (id,a) values (990,83);
+insert into t (id,a) values (990,84);
+insert into t (id,a) values (990,85);
+insert into t (id,a) values (990,86);
+insert into t (id,a) values (990,87);
+insert into t (id,a) values (990,88);
+insert into t (id,a) values (990,89);
+insert into t (id,a) values (990,90);
+insert into t (id,a) values (990,91);
+insert into t (id,a) values (990,92);
+insert into t (id,a) values (990,93);
+insert into t (id,a) values (990,94);
+insert into t (id,a) values (990,95);
+insert into t (id,a) values (990,96);
+insert into t (id,a) values (990,97);
+insert into t (id,a) values (990,98);
+insert into t (id,a) values (990,99);
+insert into t (id,a) values (991,0);
+insert into t (id,a) values (991,1);
+insert into t (id,a) values (991,2);
+insert into t (id,a) values (991,3);
+insert into t (id,a) values (991,4);
+insert into t (id,a) values (991,5);
+insert into t (id,a) values (991,6);
+insert into t (id,a) values (991,7);
+insert into t (id,a) values (991,8);
+insert into t (id,a) values (991,9);
+insert into t (id,a) values (991,10);
+insert into t (id,a) values (991,11);
+insert into t (id,a) values (991,12);
+insert into t (id,a) values (991,13);
+insert into t (id,a) values (991,14);
+insert into t (id,a) values (991,15);
+insert into t (id,a) values (991,16);
+insert into t (id,a) values (991,17);
+insert into t (id,a) values (991,18);
+insert into t (id,a) values (991,19);
+insert into t (id,a) values (991,20);
+insert into t (id,a) values (991,21);
+insert into t (id,a) values (991,22);
+insert into t (id,a) values (991,23);
+insert into t (id,a) values (991,24);
+insert into t (id,a) values (991,25);
+insert into t (id,a) values (991,26);
+insert into t (id,a) values (991,27);
+insert into t (id,a) values (991,28);
+insert into t (id,a) values (991,29);
+insert into t (id,a) values (991,30);
+insert into t (id,a) values (991,31);
+insert into t (id,a) values (991,32);
+insert into t (id,a) values (991,33);
+insert into t (id,a) values (991,34);
+insert into t (id,a) values (991,35);
+insert into t (id,a) values (991,36);
+insert into t (id,a) values (991,37);
+insert into t (id,a) values (991,38);
+insert into t (id,a) values (991,39);
+insert into t (id,a) values (991,40);
+insert into t (id,a) values (991,41);
+insert into t (id,a) values (991,42);
+insert into t (id,a) values (991,43);
+insert into t (id,a) values (991,44);
+insert into t (id,a) values (991,45);
+insert into t (id,a) values (991,46);
+insert into t (id,a) values (991,47);
+insert into t (id,a) values (991,48);
+insert into t (id,a) values (991,49);
+insert into t (id,a) values (991,50);
+insert into t (id,a) values (991,51);
+insert into t (id,a) values (991,52);
+insert into t (id,a) values (991,53);
+insert into t (id,a) values (991,54);
+insert into t (id,a) values (991,55);
+insert into t (id,a) values (991,56);
+insert into t (id,a) values (991,57);
+insert into t (id,a) values (991,58);
+insert into t (id,a) values (991,59);
+insert into t (id,a) values (991,60);
+insert into t (id,a) values (991,61);
+insert into t (id,a) values (991,62);
+insert into t (id,a) values (991,63);
+insert into t (id,a) values (991,64);
+insert into t (id,a) values (991,65);
+insert into t (id,a) values (991,66);
+insert into t (id,a) values (991,67);
+insert into t (id,a) values (991,68);
+insert into t (id,a) values (991,69);
+insert into t (id,a) values (991,70);
+insert into t (id,a) values (991,71);
+insert into t (id,a) values (991,72);
+insert into t (id,a) values (991,73);
+insert into t (id,a) values (991,74);
+insert into t (id,a) values (991,75);
+insert into t (id,a) values (991,76);
+insert into t (id,a) values (991,77);
+insert into t (id,a) values (991,78);
+insert into t (id,a) values (991,79);
+insert into t (id,a) values (991,80);
+insert into t (id,a) values (991,81);
+insert into t (id,a) values (991,82);
+insert into t (id,a) values (991,83);
+insert into t (id,a) values (991,84);
+insert into t (id,a) values (991,85);
+insert into t (id,a) values (991,86);
+insert into t (id,a) values (991,87);
+insert into t (id,a) values (991,88);
+insert into t (id,a) values (991,89);
+insert into t (id,a) values (991,90);
+insert into t (id,a) values (991,91);
+insert into t (id,a) values (991,92);
+insert into t (id,a) values (991,93);
+insert into t (id,a) values (991,94);
+insert into t (id,a) values (991,95);
+insert into t (id,a) values (991,96);
+insert into t (id,a) values (991,97);
+insert into t (id,a) values (991,98);
+insert into t (id,a) values (991,99);
+insert into t (id,a) values (992,0);
+insert into t (id,a) values (992,1);
+insert into t (id,a) values (992,2);
+insert into t (id,a) values (992,3);
+insert into t (id,a) values (992,4);
+insert into t (id,a) values (992,5);
+insert into t (id,a) values (992,6);
+insert into t (id,a) values (992,7);
+insert into t (id,a) values (992,8);
+insert into t (id,a) values (992,9);
+insert into t (id,a) values (992,10);
+insert into t (id,a) values (992,11);
+insert into t (id,a) values (992,12);
+insert into t (id,a) values (992,13);
+insert into t (id,a) values (992,14);
+insert into t (id,a) values (992,15);
+insert into t (id,a) values (992,16);
+insert into t (id,a) values (992,17);
+insert into t (id,a) values (992,18);
+insert into t (id,a) values (992,19);
+insert into t (id,a) values (992,20);
+insert into t (id,a) values (992,21);
+insert into t (id,a) values (992,22);
+insert into t (id,a) values (992,23);
+insert into t (id,a) values (992,24);
+insert into t (id,a) values (992,25);
+insert into t (id,a) values (992,26);
+insert into t (id,a) values (992,27);
+insert into t (id,a) values (992,28);
+insert into t (id,a) values (992,29);
+insert into t (id,a) values (992,30);
+insert into t (id,a) values (992,31);
+insert into t (id,a) values (992,32);
+insert into t (id,a) values (992,33);
+insert into t (id,a) values (992,34);
+insert into t (id,a) values (992,35);
+insert into t (id,a) values (992,36);
+insert into t (id,a) values (992,37);
+insert into t (id,a) values (992,38);
+insert into t (id,a) values (992,39);
+insert into t (id,a) values (992,40);
+insert into t (id,a) values (992,41);
+insert into t (id,a) values (992,42);
+insert into t (id,a) values (992,43);
+insert into t (id,a) values (992,44);
+insert into t (id,a) values (992,45);
+insert into t (id,a) values (992,46);
+insert into t (id,a) values (992,47);
+insert into t (id,a) values (992,48);
+insert into t (id,a) values (992,49);
+insert into t (id,a) values (992,50);
+insert into t (id,a) values (992,51);
+insert into t (id,a) values (992,52);
+insert into t (id,a) values (992,53);
+insert into t (id,a) values (992,54);
+insert into t (id,a) values (992,55);
+insert into t (id,a) values (992,56);
+insert into t (id,a) values (992,57);
+insert into t (id,a) values (992,58);
+insert into t (id,a) values (992,59);
+insert into t (id,a) values (992,60);
+insert into t (id,a) values (992,61);
+insert into t (id,a) values (992,62);
+insert into t (id,a) values (992,63);
+insert into t (id,a) values (992,64);
+insert into t (id,a) values (992,65);
+insert into t (id,a) values (992,66);
+insert into t (id,a) values (992,67);
+insert into t (id,a) values (992,68);
+insert into t (id,a) values (992,69);
+insert into t (id,a) values (992,70);
+insert into t (id,a) values (992,71);
+insert into t (id,a) values (992,72);
+insert into t (id,a) values (992,73);
+insert into t (id,a) values (992,74);
+insert into t (id,a) values (992,75);
+insert into t (id,a) values (992,76);
+insert into t (id,a) values (992,77);
+insert into t (id,a) values (992,78);
+insert into t (id,a) values (992,79);
+insert into t (id,a) values (992,80);
+insert into t (id,a) values (992,81);
+insert into t (id,a) values (992,82);
+insert into t (id,a) values (992,83);
+insert into t (id,a) values (992,84);
+insert into t (id,a) values (992,85);
+insert into t (id,a) values (992,86);
+insert into t (id,a) values (992,87);
+insert into t (id,a) values (992,88);
+insert into t (id,a) values (992,89);
+insert into t (id,a) values (992,90);
+insert into t (id,a) values (992,91);
+insert into t (id,a) values (992,92);
+insert into t (id,a) values (992,93);
+insert into t (id,a) values (992,94);
+insert into t (id,a) values (992,95);
+insert into t (id,a) values (992,96);
+insert into t (id,a) values (992,97);
+insert into t (id,a) values (992,98);
+insert into t (id,a) values (992,99);
+insert into t (id,a) values (993,0);
+insert into t (id,a) values (993,1);
+insert into t (id,a) values (993,2);
+insert into t (id,a) values (993,3);
+insert into t (id,a) values (993,4);
+insert into t (id,a) values (993,5);
+insert into t (id,a) values (993,6);
+insert into t (id,a) values (993,7);
+insert into t (id,a) values (993,8);
+insert into t (id,a) values (993,9);
+insert into t (id,a) values (993,10);
+insert into t (id,a) values (993,11);
+insert into t (id,a) values (993,12);
+insert into t (id,a) values (993,13);
+insert into t (id,a) values (993,14);
+insert into t (id,a) values (993,15);
+insert into t (id,a) values (993,16);
+insert into t (id,a) values (993,17);
+insert into t (id,a) values (993,18);
+insert into t (id,a) values (993,19);
+insert into t (id,a) values (993,20);
+insert into t (id,a) values (993,21);
+insert into t (id,a) values (993,22);
+insert into t (id,a) values (993,23);
+insert into t (id,a) values (993,24);
+insert into t (id,a) values (993,25);
+insert into t (id,a) values (993,26);
+insert into t (id,a) values (993,27);
+insert into t (id,a) values (993,28);
+insert into t (id,a) values (993,29);
+insert into t (id,a) values (993,30);
+insert into t (id,a) values (993,31);
+insert into t (id,a) values (993,32);
+insert into t (id,a) values (993,33);
+insert into t (id,a) values (993,34);
+insert into t (id,a) values (993,35);
+insert into t (id,a) values (993,36);
+insert into t (id,a) values (993,37);
+insert into t (id,a) values (993,38);
+insert into t (id,a) values (993,39);
+insert into t (id,a) values (993,40);
+insert into t (id,a) values (993,41);
+insert into t (id,a) values (993,42);
+insert into t (id,a) values (993,43);
+insert into t (id,a) values (993,44);
+insert into t (id,a) values (993,45);
+insert into t (id,a) values (993,46);
+insert into t (id,a) values (993,47);
+insert into t (id,a) values (993,48);
+insert into t (id,a) values (993,49);
+insert into t (id,a) values (993,50);
+insert into t (id,a) values (993,51);
+insert into t (id,a) values (993,52);
+insert into t (id,a) values (993,53);
+insert into t (id,a) values (993,54);
+insert into t (id,a) values (993,55);
+insert into t (id,a) values (993,56);
+insert into t (id,a) values (993,57);
+insert into t (id,a) values (993,58);
+insert into t (id,a) values (993,59);
+insert into t (id,a) values (993,60);
+insert into t (id,a) values (993,61);
+insert into t (id,a) values (993,62);
+insert into t (id,a) values (993,63);
+insert into t (id,a) values (993,64);
+insert into t (id,a) values (993,65);
+insert into t (id,a) values (993,66);
+insert into t (id,a) values (993,67);
+insert into t (id,a) values (993,68);
+insert into t (id,a) values (993,69);
+insert into t (id,a) values (993,70);
+insert into t (id,a) values (993,71);
+insert into t (id,a) values (993,72);
+insert into t (id,a) values (993,73);
+insert into t (id,a) values (993,74);
+insert into t (id,a) values (993,75);
+insert into t (id,a) values (993,76);
+insert into t (id,a) values (993,77);
+insert into t (id,a) values (993,78);
+insert into t (id,a) values (993,79);
+insert into t (id,a) values (993,80);
+insert into t (id,a) values (993,81);
+insert into t (id,a) values (993,82);
+insert into t (id,a) values (993,83);
+insert into t (id,a) values (993,84);
+insert into t (id,a) values (993,85);
+insert into t (id,a) values (993,86);
+insert into t (id,a) values (993,87);
+insert into t (id,a) values (993,88);
+insert into t (id,a) values (993,89);
+insert into t (id,a) values (993,90);
+insert into t (id,a) values (993,91);
+insert into t (id,a) values (993,92);
+insert into t (id,a) values (993,93);
+insert into t (id,a) values (993,94);
+insert into t (id,a) values (993,95);
+insert into t (id,a) values (993,96);
+insert into t (id,a) values (993,97);
+insert into t (id,a) values (993,98);
+insert into t (id,a) values (993,99);
+insert into t (id,a) values (994,0);
+insert into t (id,a) values (994,1);
+insert into t (id,a) values (994,2);
+insert into t (id,a) values (994,3);
+insert into t (id,a) values (994,4);
+insert into t (id,a) values (994,5);
+insert into t (id,a) values (994,6);
+insert into t (id,a) values (994,7);
+insert into t (id,a) values (994,8);
+insert into t (id,a) values (994,9);
+insert into t (id,a) values (994,10);
+insert into t (id,a) values (994,11);
+insert into t (id,a) values (994,12);
+insert into t (id,a) values (994,13);
+insert into t (id,a) values (994,14);
+insert into t (id,a) values (994,15);
+insert into t (id,a) values (994,16);
+insert into t (id,a) values (994,17);
+insert into t (id,a) values (994,18);
+insert into t (id,a) values (994,19);
+insert into t (id,a) values (994,20);
+insert into t (id,a) values (994,21);
+insert into t (id,a) values (994,22);
+insert into t (id,a) values (994,23);
+insert into t (id,a) values (994,24);
+insert into t (id,a) values (994,25);
+insert into t (id,a) values (994,26);
+insert into t (id,a) values (994,27);
+insert into t (id,a) values (994,28);
+insert into t (id,a) values (994,29);
+insert into t (id,a) values (994,30);
+insert into t (id,a) values (994,31);
+insert into t (id,a) values (994,32);
+insert into t (id,a) values (994,33);
+insert into t (id,a) values (994,34);
+insert into t (id,a) values (994,35);
+insert into t (id,a) values (994,36);
+insert into t (id,a) values (994,37);
+insert into t (id,a) values (994,38);
+insert into t (id,a) values (994,39);
+insert into t (id,a) values (994,40);
+insert into t (id,a) values (994,41);
+insert into t (id,a) values (994,42);
+insert into t (id,a) values (994,43);
+insert into t (id,a) values (994,44);
+insert into t (id,a) values (994,45);
+insert into t (id,a) values (994,46);
+insert into t (id,a) values (994,47);
+insert into t (id,a) values (994,48);
+insert into t (id,a) values (994,49);
+insert into t (id,a) values (994,50);
+insert into t (id,a) values (994,51);
+insert into t (id,a) values (994,52);
+insert into t (id,a) values (994,53);
+insert into t (id,a) values (994,54);
+insert into t (id,a) values (994,55);
+insert into t (id,a) values (994,56);
+insert into t (id,a) values (994,57);
+insert into t (id,a) values (994,58);
+insert into t (id,a) values (994,59);
+insert into t (id,a) values (994,60);
+insert into t (id,a) values (994,61);
+insert into t (id,a) values (994,62);
+insert into t (id,a) values (994,63);
+insert into t (id,a) values (994,64);
+insert into t (id,a) values (994,65);
+insert into t (id,a) values (994,66);
+insert into t (id,a) values (994,67);
+insert into t (id,a) values (994,68);
+insert into t (id,a) values (994,69);
+insert into t (id,a) values (994,70);
+insert into t (id,a) values (994,71);
+insert into t (id,a) values (994,72);
+insert into t (id,a) values (994,73);
+insert into t (id,a) values (994,74);
+insert into t (id,a) values (994,75);
+insert into t (id,a) values (994,76);
+insert into t (id,a) values (994,77);
+insert into t (id,a) values (994,78);
+insert into t (id,a) values (994,79);
+insert into t (id,a) values (994,80);
+insert into t (id,a) values (994,81);
+insert into t (id,a) values (994,82);
+insert into t (id,a) values (994,83);
+insert into t (id,a) values (994,84);
+insert into t (id,a) values (994,85);
+insert into t (id,a) values (994,86);
+insert into t (id,a) values (994,87);
+insert into t (id,a) values (994,88);
+insert into t (id,a) values (994,89);
+insert into t (id,a) values (994,90);
+insert into t (id,a) values (994,91);
+insert into t (id,a) values (994,92);
+insert into t (id,a) values (994,93);
+insert into t (id,a) values (994,94);
+insert into t (id,a) values (994,95);
+insert into t (id,a) values (994,96);
+insert into t (id,a) values (994,97);
+insert into t (id,a) values (994,98);
+insert into t (id,a) values (994,99);
+insert into t (id,a) values (995,0);
+insert into t (id,a) values (995,1);
+insert into t (id,a) values (995,2);
+insert into t (id,a) values (995,3);
+insert into t (id,a) values (995,4);
+insert into t (id,a) values (995,5);
+insert into t (id,a) values (995,6);
+insert into t (id,a) values (995,7);
+insert into t (id,a) values (995,8);
+insert into t (id,a) values (995,9);
+insert into t (id,a) values (995,10);
+insert into t (id,a) values (995,11);
+insert into t (id,a) values (995,12);
+insert into t (id,a) values (995,13);
+insert into t (id,a) values (995,14);
+insert into t (id,a) values (995,15);
+insert into t (id,a) values (995,16);
+insert into t (id,a) values (995,17);
+insert into t (id,a) values (995,18);
+insert into t (id,a) values (995,19);
+insert into t (id,a) values (995,20);
+insert into t (id,a) values (995,21);
+insert into t (id,a) values (995,22);
+insert into t (id,a) values (995,23);
+insert into t (id,a) values (995,24);
+insert into t (id,a) values (995,25);
+insert into t (id,a) values (995,26);
+insert into t (id,a) values (995,27);
+insert into t (id,a) values (995,28);
+insert into t (id,a) values (995,29);
+insert into t (id,a) values (995,30);
+insert into t (id,a) values (995,31);
+insert into t (id,a) values (995,32);
+insert into t (id,a) values (995,33);
+insert into t (id,a) values (995,34);
+insert into t (id,a) values (995,35);
+insert into t (id,a) values (995,36);
+insert into t (id,a) values (995,37);
+insert into t (id,a) values (995,38);
+insert into t (id,a) values (995,39);
+insert into t (id,a) values (995,40);
+insert into t (id,a) values (995,41);
+insert into t (id,a) values (995,42);
+insert into t (id,a) values (995,43);
+insert into t (id,a) values (995,44);
+insert into t (id,a) values (995,45);
+insert into t (id,a) values (995,46);
+insert into t (id,a) values (995,47);
+insert into t (id,a) values (995,48);
+insert into t (id,a) values (995,49);
+insert into t (id,a) values (995,50);
+insert into t (id,a) values (995,51);
+insert into t (id,a) values (995,52);
+insert into t (id,a) values (995,53);
+insert into t (id,a) values (995,54);
+insert into t (id,a) values (995,55);
+insert into t (id,a) values (995,56);
+insert into t (id,a) values (995,57);
+insert into t (id,a) values (995,58);
+insert into t (id,a) values (995,59);
+insert into t (id,a) values (995,60);
+insert into t (id,a) values (995,61);
+insert into t (id,a) values (995,62);
+insert into t (id,a) values (995,63);
+insert into t (id,a) values (995,64);
+insert into t (id,a) values (995,65);
+insert into t (id,a) values (995,66);
+insert into t (id,a) values (995,67);
+insert into t (id,a) values (995,68);
+insert into t (id,a) values (995,69);
+insert into t (id,a) values (995,70);
+insert into t (id,a) values (995,71);
+insert into t (id,a) values (995,72);
+insert into t (id,a) values (995,73);
+insert into t (id,a) values (995,74);
+insert into t (id,a) values (995,75);
+insert into t (id,a) values (995,76);
+insert into t (id,a) values (995,77);
+insert into t (id,a) values (995,78);
+insert into t (id,a) values (995,79);
+insert into t (id,a) values (995,80);
+insert into t (id,a) values (995,81);
+insert into t (id,a) values (995,82);
+insert into t (id,a) values (995,83);
+insert into t (id,a) values (995,84);
+insert into t (id,a) values (995,85);
+insert into t (id,a) values (995,86);
+insert into t (id,a) values (995,87);
+insert into t (id,a) values (995,88);
+insert into t (id,a) values (995,89);
+insert into t (id,a) values (995,90);
+insert into t (id,a) values (995,91);
+insert into t (id,a) values (995,92);
+insert into t (id,a) values (995,93);
+insert into t (id,a) values (995,94);
+insert into t (id,a) values (995,95);
+insert into t (id,a) values (995,96);
+insert into t (id,a) values (995,97);
+insert into t (id,a) values (995,98);
+insert into t (id,a) values (995,99);
+insert into t (id,a) values (996,0);
+insert into t (id,a) values (996,1);
+insert into t (id,a) values (996,2);
+insert into t (id,a) values (996,3);
+insert into t (id,a) values (996,4);
+insert into t (id,a) values (996,5);
+insert into t (id,a) values (996,6);
+insert into t (id,a) values (996,7);
+insert into t (id,a) values (996,8);
+insert into t (id,a) values (996,9);
+insert into t (id,a) values (996,10);
+insert into t (id,a) values (996,11);
+insert into t (id,a) values (996,12);
+insert into t (id,a) values (996,13);
+insert into t (id,a) values (996,14);
+insert into t (id,a) values (996,15);
+insert into t (id,a) values (996,16);
+insert into t (id,a) values (996,17);
+insert into t (id,a) values (996,18);
+insert into t (id,a) values (996,19);
+insert into t (id,a) values (996,20);
+insert into t (id,a) values (996,21);
+insert into t (id,a) values (996,22);
+insert into t (id,a) values (996,23);
+insert into t (id,a) values (996,24);
+insert into t (id,a) values (996,25);
+insert into t (id,a) values (996,26);
+insert into t (id,a) values (996,27);
+insert into t (id,a) values (996,28);
+insert into t (id,a) values (996,29);
+insert into t (id,a) values (996,30);
+insert into t (id,a) values (996,31);
+insert into t (id,a) values (996,32);
+insert into t (id,a) values (996,33);
+insert into t (id,a) values (996,34);
+insert into t (id,a) values (996,35);
+insert into t (id,a) values (996,36);
+insert into t (id,a) values (996,37);
+insert into t (id,a) values (996,38);
+insert into t (id,a) values (996,39);
+insert into t (id,a) values (996,40);
+insert into t (id,a) values (996,41);
+insert into t (id,a) values (996,42);
+insert into t (id,a) values (996,43);
+insert into t (id,a) values (996,44);
+insert into t (id,a) values (996,45);
+insert into t (id,a) values (996,46);
+insert into t (id,a) values (996,47);
+insert into t (id,a) values (996,48);
+insert into t (id,a) values (996,49);
+insert into t (id,a) values (996,50);
+insert into t (id,a) values (996,51);
+insert into t (id,a) values (996,52);
+insert into t (id,a) values (996,53);
+insert into t (id,a) values (996,54);
+insert into t (id,a) values (996,55);
+insert into t (id,a) values (996,56);
+insert into t (id,a) values (996,57);
+insert into t (id,a) values (996,58);
+insert into t (id,a) values (996,59);
+insert into t (id,a) values (996,60);
+insert into t (id,a) values (996,61);
+insert into t (id,a) values (996,62);
+insert into t (id,a) values (996,63);
+insert into t (id,a) values (996,64);
+insert into t (id,a) values (996,65);
+insert into t (id,a) values (996,66);
+insert into t (id,a) values (996,67);
+insert into t (id,a) values (996,68);
+insert into t (id,a) values (996,69);
+insert into t (id,a) values (996,70);
+insert into t (id,a) values (996,71);
+insert into t (id,a) values (996,72);
+insert into t (id,a) values (996,73);
+insert into t (id,a) values (996,74);
+insert into t (id,a) values (996,75);
+insert into t (id,a) values (996,76);
+insert into t (id,a) values (996,77);
+insert into t (id,a) values (996,78);
+insert into t (id,a) values (996,79);
+insert into t (id,a) values (996,80);
+insert into t (id,a) values (996,81);
+insert into t (id,a) values (996,82);
+insert into t (id,a) values (996,83);
+insert into t (id,a) values (996,84);
+insert into t (id,a) values (996,85);
+insert into t (id,a) values (996,86);
+insert into t (id,a) values (996,87);
+insert into t (id,a) values (996,88);
+insert into t (id,a) values (996,89);
+insert into t (id,a) values (996,90);
+insert into t (id,a) values (996,91);
+insert into t (id,a) values (996,92);
+insert into t (id,a) values (996,93);
+insert into t (id,a) values (996,94);
+insert into t (id,a) values (996,95);
+insert into t (id,a) values (996,96);
+insert into t (id,a) values (996,97);
+insert into t (id,a) values (996,98);
+insert into t (id,a) values (996,99);
+insert into t (id,a) values (997,0);
+insert into t (id,a) values (997,1);
+insert into t (id,a) values (997,2);
+insert into t (id,a) values (997,3);
+insert into t (id,a) values (997,4);
+insert into t (id,a) values (997,5);
+insert into t (id,a) values (997,6);
+insert into t (id,a) values (997,7);
+insert into t (id,a) values (997,8);
+insert into t (id,a) values (997,9);
+insert into t (id,a) values (997,10);
+insert into t (id,a) values (997,11);
+insert into t (id,a) values (997,12);
+insert into t (id,a) values (997,13);
+insert into t (id,a) values (997,14);
+insert into t (id,a) values (997,15);
+insert into t (id,a) values (997,16);
+insert into t (id,a) values (997,17);
+insert into t (id,a) values (997,18);
+insert into t (id,a) values (997,19);
+insert into t (id,a) values (997,20);
+insert into t (id,a) values (997,21);
+insert into t (id,a) values (997,22);
+insert into t (id,a) values (997,23);
+insert into t (id,a) values (997,24);
+insert into t (id,a) values (997,25);
+insert into t (id,a) values (997,26);
+insert into t (id,a) values (997,27);
+insert into t (id,a) values (997,28);
+insert into t (id,a) values (997,29);
+insert into t (id,a) values (997,30);
+insert into t (id,a) values (997,31);
+insert into t (id,a) values (997,32);
+insert into t (id,a) values (997,33);
+insert into t (id,a) values (997,34);
+insert into t (id,a) values (997,35);
+insert into t (id,a) values (997,36);
+insert into t (id,a) values (997,37);
+insert into t (id,a) values (997,38);
+insert into t (id,a) values (997,39);
+insert into t (id,a) values (997,40);
+insert into t (id,a) values (997,41);
+insert into t (id,a) values (997,42);
+insert into t (id,a) values (997,43);
+insert into t (id,a) values (997,44);
+insert into t (id,a) values (997,45);
+insert into t (id,a) values (997,46);
+insert into t (id,a) values (997,47);
+insert into t (id,a) values (997,48);
+insert into t (id,a) values (997,49);
+insert into t (id,a) values (997,50);
+insert into t (id,a) values (997,51);
+insert into t (id,a) values (997,52);
+insert into t (id,a) values (997,53);
+insert into t (id,a) values (997,54);
+insert into t (id,a) values (997,55);
+insert into t (id,a) values (997,56);
+insert into t (id,a) values (997,57);
+insert into t (id,a) values (997,58);
+insert into t (id,a) values (997,59);
+insert into t (id,a) values (997,60);
+insert into t (id,a) values (997,61);
+insert into t (id,a) values (997,62);
+insert into t (id,a) values (997,63);
+insert into t (id,a) values (997,64);
+insert into t (id,a) values (997,65);
+insert into t (id,a) values (997,66);
+insert into t (id,a) values (997,67);
+insert into t (id,a) values (997,68);
+insert into t (id,a) values (997,69);
+insert into t (id,a) values (997,70);
+insert into t (id,a) values (997,71);
+insert into t (id,a) values (997,72);
+insert into t (id,a) values (997,73);
+insert into t (id,a) values (997,74);
+insert into t (id,a) values (997,75);
+insert into t (id,a) values (997,76);
+insert into t (id,a) values (997,77);
+insert into t (id,a) values (997,78);
+insert into t (id,a) values (997,79);
+insert into t (id,a) values (997,80);
+insert into t (id,a) values (997,81);
+insert into t (id,a) values (997,82);
+insert into t (id,a) values (997,83);
+insert into t (id,a) values (997,84);
+insert into t (id,a) values (997,85);
+insert into t (id,a) values (997,86);
+insert into t (id,a) values (997,87);
+insert into t (id,a) values (997,88);
+insert into t (id,a) values (997,89);
+insert into t (id,a) values (997,90);
+insert into t (id,a) values (997,91);
+insert into t (id,a) values (997,92);
+insert into t (id,a) values (997,93);
+insert into t (id,a) values (997,94);
+insert into t (id,a) values (997,95);
+insert into t (id,a) values (997,96);
+insert into t (id,a) values (997,97);
+insert into t (id,a) values (997,98);
+insert into t (id,a) values (997,99);
+insert into t (id,a) values (998,0);
+insert into t (id,a) values (998,1);
+insert into t (id,a) values (998,2);
+insert into t (id,a) values (998,3);
+insert into t (id,a) values (998,4);
+insert into t (id,a) values (998,5);
+insert into t (id,a) values (998,6);
+insert into t (id,a) values (998,7);
+insert into t (id,a) values (998,8);
+insert into t (id,a) values (998,9);
+insert into t (id,a) values (998,10);
+insert into t (id,a) values (998,11);
+insert into t (id,a) values (998,12);
+insert into t (id,a) values (998,13);
+insert into t (id,a) values (998,14);
+insert into t (id,a) values (998,15);
+insert into t (id,a) values (998,16);
+insert into t (id,a) values (998,17);
+insert into t (id,a) values (998,18);
+insert into t (id,a) values (998,19);
+insert into t (id,a) values (998,20);
+insert into t (id,a) values (998,21);
+insert into t (id,a) values (998,22);
+insert into t (id,a) values (998,23);
+insert into t (id,a) values (998,24);
+insert into t (id,a) values (998,25);
+insert into t (id,a) values (998,26);
+insert into t (id,a) values (998,27);
+insert into t (id,a) values (998,28);
+insert into t (id,a) values (998,29);
+insert into t (id,a) values (998,30);
+insert into t (id,a) values (998,31);
+insert into t (id,a) values (998,32);
+insert into t (id,a) values (998,33);
+insert into t (id,a) values (998,34);
+insert into t (id,a) values (998,35);
+insert into t (id,a) values (998,36);
+insert into t (id,a) values (998,37);
+insert into t (id,a) values (998,38);
+insert into t (id,a) values (998,39);
+insert into t (id,a) values (998,40);
+insert into t (id,a) values (998,41);
+insert into t (id,a) values (998,42);
+insert into t (id,a) values (998,43);
+insert into t (id,a) values (998,44);
+insert into t (id,a) values (998,45);
+insert into t (id,a) values (998,46);
+insert into t (id,a) values (998,47);
+insert into t (id,a) values (998,48);
+insert into t (id,a) values (998,49);
+insert into t (id,a) values (998,50);
+insert into t (id,a) values (998,51);
+insert into t (id,a) values (998,52);
+insert into t (id,a) values (998,53);
+insert into t (id,a) values (998,54);
+insert into t (id,a) values (998,55);
+insert into t (id,a) values (998,56);
+insert into t (id,a) values (998,57);
+insert into t (id,a) values (998,58);
+insert into t (id,a) values (998,59);
+insert into t (id,a) values (998,60);
+insert into t (id,a) values (998,61);
+insert into t (id,a) values (998,62);
+insert into t (id,a) values (998,63);
+insert into t (id,a) values (998,64);
+insert into t (id,a) values (998,65);
+insert into t (id,a) values (998,66);
+insert into t (id,a) values (998,67);
+insert into t (id,a) values (998,68);
+insert into t (id,a) values (998,69);
+insert into t (id,a) values (998,70);
+insert into t (id,a) values (998,71);
+insert into t (id,a) values (998,72);
+insert into t (id,a) values (998,73);
+insert into t (id,a) values (998,74);
+insert into t (id,a) values (998,75);
+insert into t (id,a) values (998,76);
+insert into t (id,a) values (998,77);
+insert into t (id,a) values (998,78);
+insert into t (id,a) values (998,79);
+insert into t (id,a) values (998,80);
+insert into t (id,a) values (998,81);
+insert into t (id,a) values (998,82);
+insert into t (id,a) values (998,83);
+insert into t (id,a) values (998,84);
+insert into t (id,a) values (998,85);
+insert into t (id,a) values (998,86);
+insert into t (id,a) values (998,87);
+insert into t (id,a) values (998,88);
+insert into t (id,a) values (998,89);
+insert into t (id,a) values (998,90);
+insert into t (id,a) values (998,91);
+insert into t (id,a) values (998,92);
+insert into t (id,a) values (998,93);
+insert into t (id,a) values (998,94);
+insert into t (id,a) values (998,95);
+insert into t (id,a) values (998,96);
+insert into t (id,a) values (998,97);
+insert into t (id,a) values (998,98);
+insert into t (id,a) values (998,99);
+insert into t (id,a) values (999,0);
+insert into t (id,a) values (999,1);
+insert into t (id,a) values (999,2);
+insert into t (id,a) values (999,3);
+insert into t (id,a) values (999,4);
+insert into t (id,a) values (999,5);
+insert into t (id,a) values (999,6);
+insert into t (id,a) values (999,7);
+insert into t (id,a) values (999,8);
+insert into t (id,a) values (999,9);
+insert into t (id,a) values (999,10);
+insert into t (id,a) values (999,11);
+insert into t (id,a) values (999,12);
+insert into t (id,a) values (999,13);
+insert into t (id,a) values (999,14);
+insert into t (id,a) values (999,15);
+insert into t (id,a) values (999,16);
+insert into t (id,a) values (999,17);
+insert into t (id,a) values (999,18);
+insert into t (id,a) values (999,19);
+insert into t (id,a) values (999,20);
+insert into t (id,a) values (999,21);
+insert into t (id,a) values (999,22);
+insert into t (id,a) values (999,23);
+insert into t (id,a) values (999,24);
+insert into t (id,a) values (999,25);
+insert into t (id,a) values (999,26);
+insert into t (id,a) values (999,27);
+insert into t (id,a) values (999,28);
+insert into t (id,a) values (999,29);
+insert into t (id,a) values (999,30);
+insert into t (id,a) values (999,31);
+insert into t (id,a) values (999,32);
+insert into t (id,a) values (999,33);
+insert into t (id,a) values (999,34);
+insert into t (id,a) values (999,35);
+insert into t (id,a) values (999,36);
+insert into t (id,a) values (999,37);
+insert into t (id,a) values (999,38);
+insert into t (id,a) values (999,39);
+insert into t (id,a) values (999,40);
+insert into t (id,a) values (999,41);
+insert into t (id,a) values (999,42);
+insert into t (id,a) values (999,43);
+insert into t (id,a) values (999,44);
+insert into t (id,a) values (999,45);
+insert into t (id,a) values (999,46);
+insert into t (id,a) values (999,47);
+insert into t (id,a) values (999,48);
+insert into t (id,a) values (999,49);
+insert into t (id,a) values (999,50);
+insert into t (id,a) values (999,51);
+insert into t (id,a) values (999,52);
+insert into t (id,a) values (999,53);
+insert into t (id,a) values (999,54);
+insert into t (id,a) values (999,55);
+insert into t (id,a) values (999,56);
+insert into t (id,a) values (999,57);
+insert into t (id,a) values (999,58);
+insert into t (id,a) values (999,59);
+insert into t (id,a) values (999,60);
+insert into t (id,a) values (999,61);
+insert into t (id,a) values (999,62);
+insert into t (id,a) values (999,63);
+insert into t (id,a) values (999,64);
+insert into t (id,a) values (999,65);
+insert into t (id,a) values (999,66);
+insert into t (id,a) values (999,67);
+insert into t (id,a) values (999,68);
+insert into t (id,a) values (999,69);
+insert into t (id,a) values (999,70);
+insert into t (id,a) values (999,71);
+insert into t (id,a) values (999,72);
+insert into t (id,a) values (999,73);
+insert into t (id,a) values (999,74);
+insert into t (id,a) values (999,75);
+insert into t (id,a) values (999,76);
+insert into t (id,a) values (999,77);
+insert into t (id,a) values (999,78);
+insert into t (id,a) values (999,79);
+insert into t (id,a) values (999,80);
+insert into t (id,a) values (999,81);
+insert into t (id,a) values (999,82);
+insert into t (id,a) values (999,83);
+insert into t (id,a) values (999,84);
+insert into t (id,a) values (999,85);
+insert into t (id,a) values (999,86);
+insert into t (id,a) values (999,87);
+insert into t (id,a) values (999,88);
+insert into t (id,a) values (999,89);
+insert into t (id,a) values (999,90);
+insert into t (id,a) values (999,91);
+insert into t (id,a) values (999,92);
+insert into t (id,a) values (999,93);
+insert into t (id,a) values (999,94);
+insert into t (id,a) values (999,95);
+insert into t (id,a) values (999,96);
+insert into t (id,a) values (999,97);
+insert into t (id,a) values (999,98);
+insert into t (id,a) values (999,99);
+delete from t where id=404;
+set tokudb_pk_insert_mode=2;
+replace into t values (404,0,0,0);
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db739_upsert.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_upsert.result
new file mode 100644
index 00000000000..44281b674f8
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db739_upsert.result
@@ -0,0 +1,100013 @@
+set default_storage_engine=tokudb;
+drop table if exists t;
+create table t (
+id bigint not null,
+a bigint not null default 0,
+b bigint not null default 0,
+c bigint not null default 0,
+primary key(id, a)
+);
+set tokudb_commit_sync=0;
+insert into t (id,a) values (0,0);
+insert into t (id,a) values (0,1);
+insert into t (id,a) values (0,2);
+insert into t (id,a) values (0,3);
+insert into t (id,a) values (0,4);
+insert into t (id,a) values (0,5);
+insert into t (id,a) values (0,6);
+insert into t (id,a) values (0,7);
+insert into t (id,a) values (0,8);
+insert into t (id,a) values (0,9);
+insert into t (id,a) values (0,10);
+insert into t (id,a) values (0,11);
+insert into t (id,a) values (0,12);
+insert into t (id,a) values (0,13);
+insert into t (id,a) values (0,14);
+insert into t (id,a) values (0,15);
+insert into t (id,a) values (0,16);
+insert into t (id,a) values (0,17);
+insert into t (id,a) values (0,18);
+insert into t (id,a) values (0,19);
+insert into t (id,a) values (0,20);
+insert into t (id,a) values (0,21);
+insert into t (id,a) values (0,22);
+insert into t (id,a) values (0,23);
+insert into t (id,a) values (0,24);
+insert into t (id,a) values (0,25);
+insert into t (id,a) values (0,26);
+insert into t (id,a) values (0,27);
+insert into t (id,a) values (0,28);
+insert into t (id,a) values (0,29);
+insert into t (id,a) values (0,30);
+insert into t (id,a) values (0,31);
+insert into t (id,a) values (0,32);
+insert into t (id,a) values (0,33);
+insert into t (id,a) values (0,34);
+insert into t (id,a) values (0,35);
+insert into t (id,a) values (0,36);
+insert into t (id,a) values (0,37);
+insert into t (id,a) values (0,38);
+insert into t (id,a) values (0,39);
+insert into t (id,a) values (0,40);
+insert into t (id,a) values (0,41);
+insert into t (id,a) values (0,42);
+insert into t (id,a) values (0,43);
+insert into t (id,a) values (0,44);
+insert into t (id,a) values (0,45);
+insert into t (id,a) values (0,46);
+insert into t (id,a) values (0,47);
+insert into t (id,a) values (0,48);
+insert into t (id,a) values (0,49);
+insert into t (id,a) values (0,50);
+insert into t (id,a) values (0,51);
+insert into t (id,a) values (0,52);
+insert into t (id,a) values (0,53);
+insert into t (id,a) values (0,54);
+insert into t (id,a) values (0,55);
+insert into t (id,a) values (0,56);
+insert into t (id,a) values (0,57);
+insert into t (id,a) values (0,58);
+insert into t (id,a) values (0,59);
+insert into t (id,a) values (0,60);
+insert into t (id,a) values (0,61);
+insert into t (id,a) values (0,62);
+insert into t (id,a) values (0,63);
+insert into t (id,a) values (0,64);
+insert into t (id,a) values (0,65);
+insert into t (id,a) values (0,66);
+insert into t (id,a) values (0,67);
+insert into t (id,a) values (0,68);
+insert into t (id,a) values (0,69);
+insert into t (id,a) values (0,70);
+insert into t (id,a) values (0,71);
+insert into t (id,a) values (0,72);
+insert into t (id,a) values (0,73);
+insert into t (id,a) values (0,74);
+insert into t (id,a) values (0,75);
+insert into t (id,a) values (0,76);
+insert into t (id,a) values (0,77);
+insert into t (id,a) values (0,78);
+insert into t (id,a) values (0,79);
+insert into t (id,a) values (0,80);
+insert into t (id,a) values (0,81);
+insert into t (id,a) values (0,82);
+insert into t (id,a) values (0,83);
+insert into t (id,a) values (0,84);
+insert into t (id,a) values (0,85);
+insert into t (id,a) values (0,86);
+insert into t (id,a) values (0,87);
+insert into t (id,a) values (0,88);
+insert into t (id,a) values (0,89);
+insert into t (id,a) values (0,90);
+insert into t (id,a) values (0,91);
+insert into t (id,a) values (0,92);
+insert into t (id,a) values (0,93);
+insert into t (id,a) values (0,94);
+insert into t (id,a) values (0,95);
+insert into t (id,a) values (0,96);
+insert into t (id,a) values (0,97);
+insert into t (id,a) values (0,98);
+insert into t (id,a) values (0,99);
+insert into t (id,a) values (1,0);
+insert into t (id,a) values (1,1);
+insert into t (id,a) values (1,2);
+insert into t (id,a) values (1,3);
+insert into t (id,a) values (1,4);
+insert into t (id,a) values (1,5);
+insert into t (id,a) values (1,6);
+insert into t (id,a) values (1,7);
+insert into t (id,a) values (1,8);
+insert into t (id,a) values (1,9);
+insert into t (id,a) values (1,10);
+insert into t (id,a) values (1,11);
+insert into t (id,a) values (1,12);
+insert into t (id,a) values (1,13);
+insert into t (id,a) values (1,14);
+insert into t (id,a) values (1,15);
+insert into t (id,a) values (1,16);
+insert into t (id,a) values (1,17);
+insert into t (id,a) values (1,18);
+insert into t (id,a) values (1,19);
+insert into t (id,a) values (1,20);
+insert into t (id,a) values (1,21);
+insert into t (id,a) values (1,22);
+insert into t (id,a) values (1,23);
+insert into t (id,a) values (1,24);
+insert into t (id,a) values (1,25);
+insert into t (id,a) values (1,26);
+insert into t (id,a) values (1,27);
+insert into t (id,a) values (1,28);
+insert into t (id,a) values (1,29);
+insert into t (id,a) values (1,30);
+insert into t (id,a) values (1,31);
+insert into t (id,a) values (1,32);
+insert into t (id,a) values (1,33);
+insert into t (id,a) values (1,34);
+insert into t (id,a) values (1,35);
+insert into t (id,a) values (1,36);
+insert into t (id,a) values (1,37);
+insert into t (id,a) values (1,38);
+insert into t (id,a) values (1,39);
+insert into t (id,a) values (1,40);
+insert into t (id,a) values (1,41);
+insert into t (id,a) values (1,42);
+insert into t (id,a) values (1,43);
+insert into t (id,a) values (1,44);
+insert into t (id,a) values (1,45);
+insert into t (id,a) values (1,46);
+insert into t (id,a) values (1,47);
+insert into t (id,a) values (1,48);
+insert into t (id,a) values (1,49);
+insert into t (id,a) values (1,50);
+insert into t (id,a) values (1,51);
+insert into t (id,a) values (1,52);
+insert into t (id,a) values (1,53);
+insert into t (id,a) values (1,54);
+insert into t (id,a) values (1,55);
+insert into t (id,a) values (1,56);
+insert into t (id,a) values (1,57);
+insert into t (id,a) values (1,58);
+insert into t (id,a) values (1,59);
+insert into t (id,a) values (1,60);
+insert into t (id,a) values (1,61);
+insert into t (id,a) values (1,62);
+insert into t (id,a) values (1,63);
+insert into t (id,a) values (1,64);
+insert into t (id,a) values (1,65);
+insert into t (id,a) values (1,66);
+insert into t (id,a) values (1,67);
+insert into t (id,a) values (1,68);
+insert into t (id,a) values (1,69);
+insert into t (id,a) values (1,70);
+insert into t (id,a) values (1,71);
+insert into t (id,a) values (1,72);
+insert into t (id,a) values (1,73);
+insert into t (id,a) values (1,74);
+insert into t (id,a) values (1,75);
+insert into t (id,a) values (1,76);
+insert into t (id,a) values (1,77);
+insert into t (id,a) values (1,78);
+insert into t (id,a) values (1,79);
+insert into t (id,a) values (1,80);
+insert into t (id,a) values (1,81);
+insert into t (id,a) values (1,82);
+insert into t (id,a) values (1,83);
+insert into t (id,a) values (1,84);
+insert into t (id,a) values (1,85);
+insert into t (id,a) values (1,86);
+insert into t (id,a) values (1,87);
+insert into t (id,a) values (1,88);
+insert into t (id,a) values (1,89);
+insert into t (id,a) values (1,90);
+insert into t (id,a) values (1,91);
+insert into t (id,a) values (1,92);
+insert into t (id,a) values (1,93);
+insert into t (id,a) values (1,94);
+insert into t (id,a) values (1,95);
+insert into t (id,a) values (1,96);
+insert into t (id,a) values (1,97);
+insert into t (id,a) values (1,98);
+insert into t (id,a) values (1,99);
+insert into t (id,a) values (2,0);
+insert into t (id,a) values (2,1);
+insert into t (id,a) values (2,2);
+insert into t (id,a) values (2,3);
+insert into t (id,a) values (2,4);
+insert into t (id,a) values (2,5);
+insert into t (id,a) values (2,6);
+insert into t (id,a) values (2,7);
+insert into t (id,a) values (2,8);
+insert into t (id,a) values (2,9);
+insert into t (id,a) values (2,10);
+insert into t (id,a) values (2,11);
+insert into t (id,a) values (2,12);
+insert into t (id,a) values (2,13);
+insert into t (id,a) values (2,14);
+insert into t (id,a) values (2,15);
+insert into t (id,a) values (2,16);
+insert into t (id,a) values (2,17);
+insert into t (id,a) values (2,18);
+insert into t (id,a) values (2,19);
+insert into t (id,a) values (2,20);
+insert into t (id,a) values (2,21);
+insert into t (id,a) values (2,22);
+insert into t (id,a) values (2,23);
+insert into t (id,a) values (2,24);
+insert into t (id,a) values (2,25);
+insert into t (id,a) values (2,26);
+insert into t (id,a) values (2,27);
+insert into t (id,a) values (2,28);
+insert into t (id,a) values (2,29);
+insert into t (id,a) values (2,30);
+insert into t (id,a) values (2,31);
+insert into t (id,a) values (2,32);
+insert into t (id,a) values (2,33);
+insert into t (id,a) values (2,34);
+insert into t (id,a) values (2,35);
+insert into t (id,a) values (2,36);
+insert into t (id,a) values (2,37);
+insert into t (id,a) values (2,38);
+insert into t (id,a) values (2,39);
+insert into t (id,a) values (2,40);
+insert into t (id,a) values (2,41);
+insert into t (id,a) values (2,42);
+insert into t (id,a) values (2,43);
+insert into t (id,a) values (2,44);
+insert into t (id,a) values (2,45);
+insert into t (id,a) values (2,46);
+insert into t (id,a) values (2,47);
+insert into t (id,a) values (2,48);
+insert into t (id,a) values (2,49);
+insert into t (id,a) values (2,50);
+insert into t (id,a) values (2,51);
+insert into t (id,a) values (2,52);
+insert into t (id,a) values (2,53);
+insert into t (id,a) values (2,54);
+insert into t (id,a) values (2,55);
+insert into t (id,a) values (2,56);
+insert into t (id,a) values (2,57);
+insert into t (id,a) values (2,58);
+insert into t (id,a) values (2,59);
+insert into t (id,a) values (2,60);
+insert into t (id,a) values (2,61);
+insert into t (id,a) values (2,62);
+insert into t (id,a) values (2,63);
+insert into t (id,a) values (2,64);
+insert into t (id,a) values (2,65);
+insert into t (id,a) values (2,66);
+insert into t (id,a) values (2,67);
+insert into t (id,a) values (2,68);
+insert into t (id,a) values (2,69);
+insert into t (id,a) values (2,70);
+insert into t (id,a) values (2,71);
+insert into t (id,a) values (2,72);
+insert into t (id,a) values (2,73);
+insert into t (id,a) values (2,74);
+insert into t (id,a) values (2,75);
+insert into t (id,a) values (2,76);
+insert into t (id,a) values (2,77);
+insert into t (id,a) values (2,78);
+insert into t (id,a) values (2,79);
+insert into t (id,a) values (2,80);
+insert into t (id,a) values (2,81);
+insert into t (id,a) values (2,82);
+insert into t (id,a) values (2,83);
+insert into t (id,a) values (2,84);
+insert into t (id,a) values (2,85);
+insert into t (id,a) values (2,86);
+insert into t (id,a) values (2,87);
+insert into t (id,a) values (2,88);
+insert into t (id,a) values (2,89);
+insert into t (id,a) values (2,90);
+insert into t (id,a) values (2,91);
+insert into t (id,a) values (2,92);
+insert into t (id,a) values (2,93);
+insert into t (id,a) values (2,94);
+insert into t (id,a) values (2,95);
+insert into t (id,a) values (2,96);
+insert into t (id,a) values (2,97);
+insert into t (id,a) values (2,98);
+insert into t (id,a) values (2,99);
+insert into t (id,a) values (3,0);
+insert into t (id,a) values (3,1);
+insert into t (id,a) values (3,2);
+insert into t (id,a) values (3,3);
+insert into t (id,a) values (3,4);
+insert into t (id,a) values (3,5);
+insert into t (id,a) values (3,6);
+insert into t (id,a) values (3,7);
+insert into t (id,a) values (3,8);
+insert into t (id,a) values (3,9);
+insert into t (id,a) values (3,10);
+insert into t (id,a) values (3,11);
+insert into t (id,a) values (3,12);
+insert into t (id,a) values (3,13);
+insert into t (id,a) values (3,14);
+insert into t (id,a) values (3,15);
+insert into t (id,a) values (3,16);
+insert into t (id,a) values (3,17);
+insert into t (id,a) values (3,18);
+insert into t (id,a) values (3,19);
+insert into t (id,a) values (3,20);
+insert into t (id,a) values (3,21);
+insert into t (id,a) values (3,22);
+insert into t (id,a) values (3,23);
+insert into t (id,a) values (3,24);
+insert into t (id,a) values (3,25);
+insert into t (id,a) values (3,26);
+insert into t (id,a) values (3,27);
+insert into t (id,a) values (3,28);
+insert into t (id,a) values (3,29);
+insert into t (id,a) values (3,30);
+insert into t (id,a) values (3,31);
+insert into t (id,a) values (3,32);
+insert into t (id,a) values (3,33);
+insert into t (id,a) values (3,34);
+insert into t (id,a) values (3,35);
+insert into t (id,a) values (3,36);
+insert into t (id,a) values (3,37);
+insert into t (id,a) values (3,38);
+insert into t (id,a) values (3,39);
+insert into t (id,a) values (3,40);
+insert into t (id,a) values (3,41);
+insert into t (id,a) values (3,42);
+insert into t (id,a) values (3,43);
+insert into t (id,a) values (3,44);
+insert into t (id,a) values (3,45);
+insert into t (id,a) values (3,46);
+insert into t (id,a) values (3,47);
+insert into t (id,a) values (3,48);
+insert into t (id,a) values (3,49);
+insert into t (id,a) values (3,50);
+insert into t (id,a) values (3,51);
+insert into t (id,a) values (3,52);
+insert into t (id,a) values (3,53);
+insert into t (id,a) values (3,54);
+insert into t (id,a) values (3,55);
+insert into t (id,a) values (3,56);
+insert into t (id,a) values (3,57);
+insert into t (id,a) values (3,58);
+insert into t (id,a) values (3,59);
+insert into t (id,a) values (3,60);
+insert into t (id,a) values (3,61);
+insert into t (id,a) values (3,62);
+insert into t (id,a) values (3,63);
+insert into t (id,a) values (3,64);
+insert into t (id,a) values (3,65);
+insert into t (id,a) values (3,66);
+insert into t (id,a) values (3,67);
+insert into t (id,a) values (3,68);
+insert into t (id,a) values (3,69);
+insert into t (id,a) values (3,70);
+insert into t (id,a) values (3,71);
+insert into t (id,a) values (3,72);
+insert into t (id,a) values (3,73);
+insert into t (id,a) values (3,74);
+insert into t (id,a) values (3,75);
+insert into t (id,a) values (3,76);
+insert into t (id,a) values (3,77);
+insert into t (id,a) values (3,78);
+insert into t (id,a) values (3,79);
+insert into t (id,a) values (3,80);
+insert into t (id,a) values (3,81);
+insert into t (id,a) values (3,82);
+insert into t (id,a) values (3,83);
+insert into t (id,a) values (3,84);
+insert into t (id,a) values (3,85);
+insert into t (id,a) values (3,86);
+insert into t (id,a) values (3,87);
+insert into t (id,a) values (3,88);
+insert into t (id,a) values (3,89);
+insert into t (id,a) values (3,90);
+insert into t (id,a) values (3,91);
+insert into t (id,a) values (3,92);
+insert into t (id,a) values (3,93);
+insert into t (id,a) values (3,94);
+insert into t (id,a) values (3,95);
+insert into t (id,a) values (3,96);
+insert into t (id,a) values (3,97);
+insert into t (id,a) values (3,98);
+insert into t (id,a) values (3,99);
+insert into t (id,a) values (4,0);
+insert into t (id,a) values (4,1);
+insert into t (id,a) values (4,2);
+insert into t (id,a) values (4,3);
+insert into t (id,a) values (4,4);
+insert into t (id,a) values (4,5);
+insert into t (id,a) values (4,6);
+insert into t (id,a) values (4,7);
+insert into t (id,a) values (4,8);
+insert into t (id,a) values (4,9);
+insert into t (id,a) values (4,10);
+insert into t (id,a) values (4,11);
+insert into t (id,a) values (4,12);
+insert into t (id,a) values (4,13);
+insert into t (id,a) values (4,14);
+insert into t (id,a) values (4,15);
+insert into t (id,a) values (4,16);
+insert into t (id,a) values (4,17);
+insert into t (id,a) values (4,18);
+insert into t (id,a) values (4,19);
+insert into t (id,a) values (4,20);
+insert into t (id,a) values (4,21);
+insert into t (id,a) values (4,22);
+insert into t (id,a) values (4,23);
+insert into t (id,a) values (4,24);
+insert into t (id,a) values (4,25);
+insert into t (id,a) values (4,26);
+insert into t (id,a) values (4,27);
+insert into t (id,a) values (4,28);
+insert into t (id,a) values (4,29);
+insert into t (id,a) values (4,30);
+insert into t (id,a) values (4,31);
+insert into t (id,a) values (4,32);
+insert into t (id,a) values (4,33);
+insert into t (id,a) values (4,34);
+insert into t (id,a) values (4,35);
+insert into t (id,a) values (4,36);
+insert into t (id,a) values (4,37);
+insert into t (id,a) values (4,38);
+insert into t (id,a) values (4,39);
+insert into t (id,a) values (4,40);
+insert into t (id,a) values (4,41);
+insert into t (id,a) values (4,42);
+insert into t (id,a) values (4,43);
+insert into t (id,a) values (4,44);
+insert into t (id,a) values (4,45);
+insert into t (id,a) values (4,46);
+insert into t (id,a) values (4,47);
+insert into t (id,a) values (4,48);
+insert into t (id,a) values (4,49);
+insert into t (id,a) values (4,50);
+insert into t (id,a) values (4,51);
+insert into t (id,a) values (4,52);
+insert into t (id,a) values (4,53);
+insert into t (id,a) values (4,54);
+insert into t (id,a) values (4,55);
+insert into t (id,a) values (4,56);
+insert into t (id,a) values (4,57);
+insert into t (id,a) values (4,58);
+insert into t (id,a) values (4,59);
+insert into t (id,a) values (4,60);
+insert into t (id,a) values (4,61);
+insert into t (id,a) values (4,62);
+insert into t (id,a) values (4,63);
+insert into t (id,a) values (4,64);
+insert into t (id,a) values (4,65);
+insert into t (id,a) values (4,66);
+insert into t (id,a) values (4,67);
+insert into t (id,a) values (4,68);
+insert into t (id,a) values (4,69);
+insert into t (id,a) values (4,70);
+insert into t (id,a) values (4,71);
+insert into t (id,a) values (4,72);
+insert into t (id,a) values (4,73);
+insert into t (id,a) values (4,74);
+insert into t (id,a) values (4,75);
+insert into t (id,a) values (4,76);
+insert into t (id,a) values (4,77);
+insert into t (id,a) values (4,78);
+insert into t (id,a) values (4,79);
+insert into t (id,a) values (4,80);
+insert into t (id,a) values (4,81);
+insert into t (id,a) values (4,82);
+insert into t (id,a) values (4,83);
+insert into t (id,a) values (4,84);
+insert into t (id,a) values (4,85);
+insert into t (id,a) values (4,86);
+insert into t (id,a) values (4,87);
+insert into t (id,a) values (4,88);
+insert into t (id,a) values (4,89);
+insert into t (id,a) values (4,90);
+insert into t (id,a) values (4,91);
+insert into t (id,a) values (4,92);
+insert into t (id,a) values (4,93);
+insert into t (id,a) values (4,94);
+insert into t (id,a) values (4,95);
+insert into t (id,a) values (4,96);
+insert into t (id,a) values (4,97);
+insert into t (id,a) values (4,98);
+insert into t (id,a) values (4,99);
+insert into t (id,a) values (5,0);
+insert into t (id,a) values (5,1);
+insert into t (id,a) values (5,2);
+insert into t (id,a) values (5,3);
+insert into t (id,a) values (5,4);
+insert into t (id,a) values (5,5);
+insert into t (id,a) values (5,6);
+insert into t (id,a) values (5,7);
+insert into t (id,a) values (5,8);
+insert into t (id,a) values (5,9);
+insert into t (id,a) values (5,10);
+insert into t (id,a) values (5,11);
+insert into t (id,a) values (5,12);
+insert into t (id,a) values (5,13);
+insert into t (id,a) values (5,14);
+insert into t (id,a) values (5,15);
+insert into t (id,a) values (5,16);
+insert into t (id,a) values (5,17);
+insert into t (id,a) values (5,18);
+insert into t (id,a) values (5,19);
+insert into t (id,a) values (5,20);
+insert into t (id,a) values (5,21);
+insert into t (id,a) values (5,22);
+insert into t (id,a) values (5,23);
+insert into t (id,a) values (5,24);
+insert into t (id,a) values (5,25);
+insert into t (id,a) values (5,26);
+insert into t (id,a) values (5,27);
+insert into t (id,a) values (5,28);
+insert into t (id,a) values (5,29);
+insert into t (id,a) values (5,30);
+insert into t (id,a) values (5,31);
+insert into t (id,a) values (5,32);
+insert into t (id,a) values (5,33);
+insert into t (id,a) values (5,34);
+insert into t (id,a) values (5,35);
+insert into t (id,a) values (5,36);
+insert into t (id,a) values (5,37);
+insert into t (id,a) values (5,38);
+insert into t (id,a) values (5,39);
+insert into t (id,a) values (5,40);
+insert into t (id,a) values (5,41);
+insert into t (id,a) values (5,42);
+insert into t (id,a) values (5,43);
+insert into t (id,a) values (5,44);
+insert into t (id,a) values (5,45);
+insert into t (id,a) values (5,46);
+insert into t (id,a) values (5,47);
+insert into t (id,a) values (5,48);
+insert into t (id,a) values (5,49);
+insert into t (id,a) values (5,50);
+insert into t (id,a) values (5,51);
+insert into t (id,a) values (5,52);
+insert into t (id,a) values (5,53);
+insert into t (id,a) values (5,54);
+insert into t (id,a) values (5,55);
+insert into t (id,a) values (5,56);
+insert into t (id,a) values (5,57);
+insert into t (id,a) values (5,58);
+insert into t (id,a) values (5,59);
+insert into t (id,a) values (5,60);
+insert into t (id,a) values (5,61);
+insert into t (id,a) values (5,62);
+insert into t (id,a) values (5,63);
+insert into t (id,a) values (5,64);
+insert into t (id,a) values (5,65);
+insert into t (id,a) values (5,66);
+insert into t (id,a) values (5,67);
+insert into t (id,a) values (5,68);
+insert into t (id,a) values (5,69);
+insert into t (id,a) values (5,70);
+insert into t (id,a) values (5,71);
+insert into t (id,a) values (5,72);
+insert into t (id,a) values (5,73);
+insert into t (id,a) values (5,74);
+insert into t (id,a) values (5,75);
+insert into t (id,a) values (5,76);
+insert into t (id,a) values (5,77);
+insert into t (id,a) values (5,78);
+insert into t (id,a) values (5,79);
+insert into t (id,a) values (5,80);
+insert into t (id,a) values (5,81);
+insert into t (id,a) values (5,82);
+insert into t (id,a) values (5,83);
+insert into t (id,a) values (5,84);
+insert into t (id,a) values (5,85);
+insert into t (id,a) values (5,86);
+insert into t (id,a) values (5,87);
+insert into t (id,a) values (5,88);
+insert into t (id,a) values (5,89);
+insert into t (id,a) values (5,90);
+insert into t (id,a) values (5,91);
+insert into t (id,a) values (5,92);
+insert into t (id,a) values (5,93);
+insert into t (id,a) values (5,94);
+insert into t (id,a) values (5,95);
+insert into t (id,a) values (5,96);
+insert into t (id,a) values (5,97);
+insert into t (id,a) values (5,98);
+insert into t (id,a) values (5,99);
+insert into t (id,a) values (6,0);
+insert into t (id,a) values (6,1);
+insert into t (id,a) values (6,2);
+insert into t (id,a) values (6,3);
+insert into t (id,a) values (6,4);
+insert into t (id,a) values (6,5);
+insert into t (id,a) values (6,6);
+insert into t (id,a) values (6,7);
+insert into t (id,a) values (6,8);
+insert into t (id,a) values (6,9);
+insert into t (id,a) values (6,10);
+insert into t (id,a) values (6,11);
+insert into t (id,a) values (6,12);
+insert into t (id,a) values (6,13);
+insert into t (id,a) values (6,14);
+insert into t (id,a) values (6,15);
+insert into t (id,a) values (6,16);
+insert into t (id,a) values (6,17);
+insert into t (id,a) values (6,18);
+insert into t (id,a) values (6,19);
+insert into t (id,a) values (6,20);
+insert into t (id,a) values (6,21);
+insert into t (id,a) values (6,22);
+insert into t (id,a) values (6,23);
+insert into t (id,a) values (6,24);
+insert into t (id,a) values (6,25);
+insert into t (id,a) values (6,26);
+insert into t (id,a) values (6,27);
+insert into t (id,a) values (6,28);
+insert into t (id,a) values (6,29);
+insert into t (id,a) values (6,30);
+insert into t (id,a) values (6,31);
+insert into t (id,a) values (6,32);
+insert into t (id,a) values (6,33);
+insert into t (id,a) values (6,34);
+insert into t (id,a) values (6,35);
+insert into t (id,a) values (6,36);
+insert into t (id,a) values (6,37);
+insert into t (id,a) values (6,38);
+insert into t (id,a) values (6,39);
+insert into t (id,a) values (6,40);
+insert into t (id,a) values (6,41);
+insert into t (id,a) values (6,42);
+insert into t (id,a) values (6,43);
+insert into t (id,a) values (6,44);
+insert into t (id,a) values (6,45);
+insert into t (id,a) values (6,46);
+insert into t (id,a) values (6,47);
+insert into t (id,a) values (6,48);
+insert into t (id,a) values (6,49);
+insert into t (id,a) values (6,50);
+insert into t (id,a) values (6,51);
+insert into t (id,a) values (6,52);
+insert into t (id,a) values (6,53);
+insert into t (id,a) values (6,54);
+insert into t (id,a) values (6,55);
+insert into t (id,a) values (6,56);
+insert into t (id,a) values (6,57);
+insert into t (id,a) values (6,58);
+insert into t (id,a) values (6,59);
+insert into t (id,a) values (6,60);
+insert into t (id,a) values (6,61);
+insert into t (id,a) values (6,62);
+insert into t (id,a) values (6,63);
+insert into t (id,a) values (6,64);
+insert into t (id,a) values (6,65);
+insert into t (id,a) values (6,66);
+insert into t (id,a) values (6,67);
+insert into t (id,a) values (6,68);
+insert into t (id,a) values (6,69);
+insert into t (id,a) values (6,70);
+insert into t (id,a) values (6,71);
+insert into t (id,a) values (6,72);
+insert into t (id,a) values (6,73);
+insert into t (id,a) values (6,74);
+insert into t (id,a) values (6,75);
+insert into t (id,a) values (6,76);
+insert into t (id,a) values (6,77);
+insert into t (id,a) values (6,78);
+insert into t (id,a) values (6,79);
+insert into t (id,a) values (6,80);
+insert into t (id,a) values (6,81);
+insert into t (id,a) values (6,82);
+insert into t (id,a) values (6,83);
+insert into t (id,a) values (6,84);
+insert into t (id,a) values (6,85);
+insert into t (id,a) values (6,86);
+insert into t (id,a) values (6,87);
+insert into t (id,a) values (6,88);
+insert into t (id,a) values (6,89);
+insert into t (id,a) values (6,90);
+insert into t (id,a) values (6,91);
+insert into t (id,a) values (6,92);
+insert into t (id,a) values (6,93);
+insert into t (id,a) values (6,94);
+insert into t (id,a) values (6,95);
+insert into t (id,a) values (6,96);
+insert into t (id,a) values (6,97);
+insert into t (id,a) values (6,98);
+insert into t (id,a) values (6,99);
+insert into t (id,a) values (7,0);
+insert into t (id,a) values (7,1);
+insert into t (id,a) values (7,2);
+insert into t (id,a) values (7,3);
+insert into t (id,a) values (7,4);
+insert into t (id,a) values (7,5);
+insert into t (id,a) values (7,6);
+insert into t (id,a) values (7,7);
+insert into t (id,a) values (7,8);
+insert into t (id,a) values (7,9);
+insert into t (id,a) values (7,10);
+insert into t (id,a) values (7,11);
+insert into t (id,a) values (7,12);
+insert into t (id,a) values (7,13);
+insert into t (id,a) values (7,14);
+insert into t (id,a) values (7,15);
+insert into t (id,a) values (7,16);
+insert into t (id,a) values (7,17);
+insert into t (id,a) values (7,18);
+insert into t (id,a) values (7,19);
+insert into t (id,a) values (7,20);
+insert into t (id,a) values (7,21);
+insert into t (id,a) values (7,22);
+insert into t (id,a) values (7,23);
+insert into t (id,a) values (7,24);
+insert into t (id,a) values (7,25);
+insert into t (id,a) values (7,26);
+insert into t (id,a) values (7,27);
+insert into t (id,a) values (7,28);
+insert into t (id,a) values (7,29);
+insert into t (id,a) values (7,30);
+insert into t (id,a) values (7,31);
+insert into t (id,a) values (7,32);
+insert into t (id,a) values (7,33);
+insert into t (id,a) values (7,34);
+insert into t (id,a) values (7,35);
+insert into t (id,a) values (7,36);
+insert into t (id,a) values (7,37);
+insert into t (id,a) values (7,38);
+insert into t (id,a) values (7,39);
+insert into t (id,a) values (7,40);
+insert into t (id,a) values (7,41);
+insert into t (id,a) values (7,42);
+insert into t (id,a) values (7,43);
+insert into t (id,a) values (7,44);
+insert into t (id,a) values (7,45);
+insert into t (id,a) values (7,46);
+insert into t (id,a) values (7,47);
+insert into t (id,a) values (7,48);
+insert into t (id,a) values (7,49);
+insert into t (id,a) values (7,50);
+insert into t (id,a) values (7,51);
+insert into t (id,a) values (7,52);
+insert into t (id,a) values (7,53);
+insert into t (id,a) values (7,54);
+insert into t (id,a) values (7,55);
+insert into t (id,a) values (7,56);
+insert into t (id,a) values (7,57);
+insert into t (id,a) values (7,58);
+insert into t (id,a) values (7,59);
+insert into t (id,a) values (7,60);
+insert into t (id,a) values (7,61);
+insert into t (id,a) values (7,62);
+insert into t (id,a) values (7,63);
+insert into t (id,a) values (7,64);
+insert into t (id,a) values (7,65);
+insert into t (id,a) values (7,66);
+insert into t (id,a) values (7,67);
+insert into t (id,a) values (7,68);
+insert into t (id,a) values (7,69);
+insert into t (id,a) values (7,70);
+insert into t (id,a) values (7,71);
+insert into t (id,a) values (7,72);
+insert into t (id,a) values (7,73);
+insert into t (id,a) values (7,74);
+insert into t (id,a) values (7,75);
+insert into t (id,a) values (7,76);
+insert into t (id,a) values (7,77);
+insert into t (id,a) values (7,78);
+insert into t (id,a) values (7,79);
+insert into t (id,a) values (7,80);
+insert into t (id,a) values (7,81);
+insert into t (id,a) values (7,82);
+insert into t (id,a) values (7,83);
+insert into t (id,a) values (7,84);
+insert into t (id,a) values (7,85);
+insert into t (id,a) values (7,86);
+insert into t (id,a) values (7,87);
+insert into t (id,a) values (7,88);
+insert into t (id,a) values (7,89);
+insert into t (id,a) values (7,90);
+insert into t (id,a) values (7,91);
+insert into t (id,a) values (7,92);
+insert into t (id,a) values (7,93);
+insert into t (id,a) values (7,94);
+insert into t (id,a) values (7,95);
+insert into t (id,a) values (7,96);
+insert into t (id,a) values (7,97);
+insert into t (id,a) values (7,98);
+insert into t (id,a) values (7,99);
+insert into t (id,a) values (8,0);
+insert into t (id,a) values (8,1);
+insert into t (id,a) values (8,2);
+insert into t (id,a) values (8,3);
+insert into t (id,a) values (8,4);
+insert into t (id,a) values (8,5);
+insert into t (id,a) values (8,6);
+insert into t (id,a) values (8,7);
+insert into t (id,a) values (8,8);
+insert into t (id,a) values (8,9);
+insert into t (id,a) values (8,10);
+insert into t (id,a) values (8,11);
+insert into t (id,a) values (8,12);
+insert into t (id,a) values (8,13);
+insert into t (id,a) values (8,14);
+insert into t (id,a) values (8,15);
+insert into t (id,a) values (8,16);
+insert into t (id,a) values (8,17);
+insert into t (id,a) values (8,18);
+insert into t (id,a) values (8,19);
+insert into t (id,a) values (8,20);
+insert into t (id,a) values (8,21);
+insert into t (id,a) values (8,22);
+insert into t (id,a) values (8,23);
+insert into t (id,a) values (8,24);
+insert into t (id,a) values (8,25);
+insert into t (id,a) values (8,26);
+insert into t (id,a) values (8,27);
+insert into t (id,a) values (8,28);
+insert into t (id,a) values (8,29);
+insert into t (id,a) values (8,30);
+insert into t (id,a) values (8,31);
+insert into t (id,a) values (8,32);
+insert into t (id,a) values (8,33);
+insert into t (id,a) values (8,34);
+insert into t (id,a) values (8,35);
+insert into t (id,a) values (8,36);
+insert into t (id,a) values (8,37);
+insert into t (id,a) values (8,38);
+insert into t (id,a) values (8,39);
+insert into t (id,a) values (8,40);
+insert into t (id,a) values (8,41);
+insert into t (id,a) values (8,42);
+insert into t (id,a) values (8,43);
+insert into t (id,a) values (8,44);
+insert into t (id,a) values (8,45);
+insert into t (id,a) values (8,46);
+insert into t (id,a) values (8,47);
+insert into t (id,a) values (8,48);
+insert into t (id,a) values (8,49);
+insert into t (id,a) values (8,50);
+insert into t (id,a) values (8,51);
+insert into t (id,a) values (8,52);
+insert into t (id,a) values (8,53);
+insert into t (id,a) values (8,54);
+insert into t (id,a) values (8,55);
+insert into t (id,a) values (8,56);
+insert into t (id,a) values (8,57);
+insert into t (id,a) values (8,58);
+insert into t (id,a) values (8,59);
+insert into t (id,a) values (8,60);
+insert into t (id,a) values (8,61);
+insert into t (id,a) values (8,62);
+insert into t (id,a) values (8,63);
+insert into t (id,a) values (8,64);
+insert into t (id,a) values (8,65);
+insert into t (id,a) values (8,66);
+insert into t (id,a) values (8,67);
+insert into t (id,a) values (8,68);
+insert into t (id,a) values (8,69);
+insert into t (id,a) values (8,70);
+insert into t (id,a) values (8,71);
+insert into t (id,a) values (8,72);
+insert into t (id,a) values (8,73);
+insert into t (id,a) values (8,74);
+insert into t (id,a) values (8,75);
+insert into t (id,a) values (8,76);
+insert into t (id,a) values (8,77);
+insert into t (id,a) values (8,78);
+insert into t (id,a) values (8,79);
+insert into t (id,a) values (8,80);
+insert into t (id,a) values (8,81);
+insert into t (id,a) values (8,82);
+insert into t (id,a) values (8,83);
+insert into t (id,a) values (8,84);
+insert into t (id,a) values (8,85);
+insert into t (id,a) values (8,86);
+insert into t (id,a) values (8,87);
+insert into t (id,a) values (8,88);
+insert into t (id,a) values (8,89);
+insert into t (id,a) values (8,90);
+insert into t (id,a) values (8,91);
+insert into t (id,a) values (8,92);
+insert into t (id,a) values (8,93);
+insert into t (id,a) values (8,94);
+insert into t (id,a) values (8,95);
+insert into t (id,a) values (8,96);
+insert into t (id,a) values (8,97);
+insert into t (id,a) values (8,98);
+insert into t (id,a) values (8,99);
+insert into t (id,a) values (9,0);
+insert into t (id,a) values (9,1);
+insert into t (id,a) values (9,2);
+insert into t (id,a) values (9,3);
+insert into t (id,a) values (9,4);
+insert into t (id,a) values (9,5);
+insert into t (id,a) values (9,6);
+insert into t (id,a) values (9,7);
+insert into t (id,a) values (9,8);
+insert into t (id,a) values (9,9);
+insert into t (id,a) values (9,10);
+insert into t (id,a) values (9,11);
+insert into t (id,a) values (9,12);
+insert into t (id,a) values (9,13);
+insert into t (id,a) values (9,14);
+insert into t (id,a) values (9,15);
+insert into t (id,a) values (9,16);
+insert into t (id,a) values (9,17);
+insert into t (id,a) values (9,18);
+insert into t (id,a) values (9,19);
+insert into t (id,a) values (9,20);
+insert into t (id,a) values (9,21);
+insert into t (id,a) values (9,22);
+insert into t (id,a) values (9,23);
+insert into t (id,a) values (9,24);
+insert into t (id,a) values (9,25);
+insert into t (id,a) values (9,26);
+insert into t (id,a) values (9,27);
+insert into t (id,a) values (9,28);
+insert into t (id,a) values (9,29);
+insert into t (id,a) values (9,30);
+insert into t (id,a) values (9,31);
+insert into t (id,a) values (9,32);
+insert into t (id,a) values (9,33);
+insert into t (id,a) values (9,34);
+insert into t (id,a) values (9,35);
+insert into t (id,a) values (9,36);
+insert into t (id,a) values (9,37);
+insert into t (id,a) values (9,38);
+insert into t (id,a) values (9,39);
+insert into t (id,a) values (9,40);
+insert into t (id,a) values (9,41);
+insert into t (id,a) values (9,42);
+insert into t (id,a) values (9,43);
+insert into t (id,a) values (9,44);
+insert into t (id,a) values (9,45);
+insert into t (id,a) values (9,46);
+insert into t (id,a) values (9,47);
+insert into t (id,a) values (9,48);
+insert into t (id,a) values (9,49);
+insert into t (id,a) values (9,50);
+insert into t (id,a) values (9,51);
+insert into t (id,a) values (9,52);
+insert into t (id,a) values (9,53);
+insert into t (id,a) values (9,54);
+insert into t (id,a) values (9,55);
+insert into t (id,a) values (9,56);
+insert into t (id,a) values (9,57);
+insert into t (id,a) values (9,58);
+insert into t (id,a) values (9,59);
+insert into t (id,a) values (9,60);
+insert into t (id,a) values (9,61);
+insert into t (id,a) values (9,62);
+insert into t (id,a) values (9,63);
+insert into t (id,a) values (9,64);
+insert into t (id,a) values (9,65);
+insert into t (id,a) values (9,66);
+insert into t (id,a) values (9,67);
+insert into t (id,a) values (9,68);
+insert into t (id,a) values (9,69);
+insert into t (id,a) values (9,70);
+insert into t (id,a) values (9,71);
+insert into t (id,a) values (9,72);
+insert into t (id,a) values (9,73);
+insert into t (id,a) values (9,74);
+insert into t (id,a) values (9,75);
+insert into t (id,a) values (9,76);
+insert into t (id,a) values (9,77);
+insert into t (id,a) values (9,78);
+insert into t (id,a) values (9,79);
+insert into t (id,a) values (9,80);
+insert into t (id,a) values (9,81);
+insert into t (id,a) values (9,82);
+insert into t (id,a) values (9,83);
+insert into t (id,a) values (9,84);
+insert into t (id,a) values (9,85);
+insert into t (id,a) values (9,86);
+insert into t (id,a) values (9,87);
+insert into t (id,a) values (9,88);
+insert into t (id,a) values (9,89);
+insert into t (id,a) values (9,90);
+insert into t (id,a) values (9,91);
+insert into t (id,a) values (9,92);
+insert into t (id,a) values (9,93);
+insert into t (id,a) values (9,94);
+insert into t (id,a) values (9,95);
+insert into t (id,a) values (9,96);
+insert into t (id,a) values (9,97);
+insert into t (id,a) values (9,98);
+insert into t (id,a) values (9,99);
+insert into t (id,a) values (10,0);
+insert into t (id,a) values (10,1);
+insert into t (id,a) values (10,2);
+insert into t (id,a) values (10,3);
+insert into t (id,a) values (10,4);
+insert into t (id,a) values (10,5);
+insert into t (id,a) values (10,6);
+insert into t (id,a) values (10,7);
+insert into t (id,a) values (10,8);
+insert into t (id,a) values (10,9);
+insert into t (id,a) values (10,10);
+insert into t (id,a) values (10,11);
+insert into t (id,a) values (10,12);
+insert into t (id,a) values (10,13);
+insert into t (id,a) values (10,14);
+insert into t (id,a) values (10,15);
+insert into t (id,a) values (10,16);
+insert into t (id,a) values (10,17);
+insert into t (id,a) values (10,18);
+insert into t (id,a) values (10,19);
+insert into t (id,a) values (10,20);
+insert into t (id,a) values (10,21);
+insert into t (id,a) values (10,22);
+insert into t (id,a) values (10,23);
+insert into t (id,a) values (10,24);
+insert into t (id,a) values (10,25);
+insert into t (id,a) values (10,26);
+insert into t (id,a) values (10,27);
+insert into t (id,a) values (10,28);
+insert into t (id,a) values (10,29);
+insert into t (id,a) values (10,30);
+insert into t (id,a) values (10,31);
+insert into t (id,a) values (10,32);
+insert into t (id,a) values (10,33);
+insert into t (id,a) values (10,34);
+insert into t (id,a) values (10,35);
+insert into t (id,a) values (10,36);
+insert into t (id,a) values (10,37);
+insert into t (id,a) values (10,38);
+insert into t (id,a) values (10,39);
+insert into t (id,a) values (10,40);
+insert into t (id,a) values (10,41);
+insert into t (id,a) values (10,42);
+insert into t (id,a) values (10,43);
+insert into t (id,a) values (10,44);
+insert into t (id,a) values (10,45);
+insert into t (id,a) values (10,46);
+insert into t (id,a) values (10,47);
+insert into t (id,a) values (10,48);
+insert into t (id,a) values (10,49);
+insert into t (id,a) values (10,50);
+insert into t (id,a) values (10,51);
+insert into t (id,a) values (10,52);
+insert into t (id,a) values (10,53);
+insert into t (id,a) values (10,54);
+insert into t (id,a) values (10,55);
+insert into t (id,a) values (10,56);
+insert into t (id,a) values (10,57);
+insert into t (id,a) values (10,58);
+insert into t (id,a) values (10,59);
+insert into t (id,a) values (10,60);
+insert into t (id,a) values (10,61);
+insert into t (id,a) values (10,62);
+insert into t (id,a) values (10,63);
+insert into t (id,a) values (10,64);
+insert into t (id,a) values (10,65);
+insert into t (id,a) values (10,66);
+insert into t (id,a) values (10,67);
+insert into t (id,a) values (10,68);
+insert into t (id,a) values (10,69);
+insert into t (id,a) values (10,70);
+insert into t (id,a) values (10,71);
+insert into t (id,a) values (10,72);
+insert into t (id,a) values (10,73);
+insert into t (id,a) values (10,74);
+insert into t (id,a) values (10,75);
+insert into t (id,a) values (10,76);
+insert into t (id,a) values (10,77);
+insert into t (id,a) values (10,78);
+insert into t (id,a) values (10,79);
+insert into t (id,a) values (10,80);
+insert into t (id,a) values (10,81);
+insert into t (id,a) values (10,82);
+insert into t (id,a) values (10,83);
+insert into t (id,a) values (10,84);
+insert into t (id,a) values (10,85);
+insert into t (id,a) values (10,86);
+insert into t (id,a) values (10,87);
+insert into t (id,a) values (10,88);
+insert into t (id,a) values (10,89);
+insert into t (id,a) values (10,90);
+insert into t (id,a) values (10,91);
+insert into t (id,a) values (10,92);
+insert into t (id,a) values (10,93);
+insert into t (id,a) values (10,94);
+insert into t (id,a) values (10,95);
+insert into t (id,a) values (10,96);
+insert into t (id,a) values (10,97);
+insert into t (id,a) values (10,98);
+insert into t (id,a) values (10,99);
+insert into t (id,a) values (11,0);
+insert into t (id,a) values (11,1);
+insert into t (id,a) values (11,2);
+insert into t (id,a) values (11,3);
+insert into t (id,a) values (11,4);
+insert into t (id,a) values (11,5);
+insert into t (id,a) values (11,6);
+insert into t (id,a) values (11,7);
+insert into t (id,a) values (11,8);
+insert into t (id,a) values (11,9);
+insert into t (id,a) values (11,10);
+insert into t (id,a) values (11,11);
+insert into t (id,a) values (11,12);
+insert into t (id,a) values (11,13);
+insert into t (id,a) values (11,14);
+insert into t (id,a) values (11,15);
+insert into t (id,a) values (11,16);
+insert into t (id,a) values (11,17);
+insert into t (id,a) values (11,18);
+insert into t (id,a) values (11,19);
+insert into t (id,a) values (11,20);
+insert into t (id,a) values (11,21);
+insert into t (id,a) values (11,22);
+insert into t (id,a) values (11,23);
+insert into t (id,a) values (11,24);
+insert into t (id,a) values (11,25);
+insert into t (id,a) values (11,26);
+insert into t (id,a) values (11,27);
+insert into t (id,a) values (11,28);
+insert into t (id,a) values (11,29);
+insert into t (id,a) values (11,30);
+insert into t (id,a) values (11,31);
+insert into t (id,a) values (11,32);
+insert into t (id,a) values (11,33);
+insert into t (id,a) values (11,34);
+insert into t (id,a) values (11,35);
+insert into t (id,a) values (11,36);
+insert into t (id,a) values (11,37);
+insert into t (id,a) values (11,38);
+insert into t (id,a) values (11,39);
+insert into t (id,a) values (11,40);
+insert into t (id,a) values (11,41);
+insert into t (id,a) values (11,42);
+insert into t (id,a) values (11,43);
+insert into t (id,a) values (11,44);
+insert into t (id,a) values (11,45);
+insert into t (id,a) values (11,46);
+insert into t (id,a) values (11,47);
+insert into t (id,a) values (11,48);
+insert into t (id,a) values (11,49);
+insert into t (id,a) values (11,50);
+insert into t (id,a) values (11,51);
+insert into t (id,a) values (11,52);
+insert into t (id,a) values (11,53);
+insert into t (id,a) values (11,54);
+insert into t (id,a) values (11,55);
+insert into t (id,a) values (11,56);
+insert into t (id,a) values (11,57);
+insert into t (id,a) values (11,58);
+insert into t (id,a) values (11,59);
+insert into t (id,a) values (11,60);
+insert into t (id,a) values (11,61);
+insert into t (id,a) values (11,62);
+insert into t (id,a) values (11,63);
+insert into t (id,a) values (11,64);
+insert into t (id,a) values (11,65);
+insert into t (id,a) values (11,66);
+insert into t (id,a) values (11,67);
+insert into t (id,a) values (11,68);
+insert into t (id,a) values (11,69);
+insert into t (id,a) values (11,70);
+insert into t (id,a) values (11,71);
+insert into t (id,a) values (11,72);
+insert into t (id,a) values (11,73);
+insert into t (id,a) values (11,74);
+insert into t (id,a) values (11,75);
+insert into t (id,a) values (11,76);
+insert into t (id,a) values (11,77);
+insert into t (id,a) values (11,78);
+insert into t (id,a) values (11,79);
+insert into t (id,a) values (11,80);
+insert into t (id,a) values (11,81);
+insert into t (id,a) values (11,82);
+insert into t (id,a) values (11,83);
+insert into t (id,a) values (11,84);
+insert into t (id,a) values (11,85);
+insert into t (id,a) values (11,86);
+insert into t (id,a) values (11,87);
+insert into t (id,a) values (11,88);
+insert into t (id,a) values (11,89);
+insert into t (id,a) values (11,90);
+insert into t (id,a) values (11,91);
+insert into t (id,a) values (11,92);
+insert into t (id,a) values (11,93);
+insert into t (id,a) values (11,94);
+insert into t (id,a) values (11,95);
+insert into t (id,a) values (11,96);
+insert into t (id,a) values (11,97);
+insert into t (id,a) values (11,98);
+insert into t (id,a) values (11,99);
+insert into t (id,a) values (12,0);
+insert into t (id,a) values (12,1);
+insert into t (id,a) values (12,2);
+insert into t (id,a) values (12,3);
+insert into t (id,a) values (12,4);
+insert into t (id,a) values (12,5);
+insert into t (id,a) values (12,6);
+insert into t (id,a) values (12,7);
+insert into t (id,a) values (12,8);
+insert into t (id,a) values (12,9);
+insert into t (id,a) values (12,10);
+insert into t (id,a) values (12,11);
+insert into t (id,a) values (12,12);
+insert into t (id,a) values (12,13);
+insert into t (id,a) values (12,14);
+insert into t (id,a) values (12,15);
+insert into t (id,a) values (12,16);
+insert into t (id,a) values (12,17);
+insert into t (id,a) values (12,18);
+insert into t (id,a) values (12,19);
+insert into t (id,a) values (12,20);
+insert into t (id,a) values (12,21);
+insert into t (id,a) values (12,22);
+insert into t (id,a) values (12,23);
+insert into t (id,a) values (12,24);
+insert into t (id,a) values (12,25);
+insert into t (id,a) values (12,26);
+insert into t (id,a) values (12,27);
+insert into t (id,a) values (12,28);
+insert into t (id,a) values (12,29);
+insert into t (id,a) values (12,30);
+insert into t (id,a) values (12,31);
+insert into t (id,a) values (12,32);
+insert into t (id,a) values (12,33);
+insert into t (id,a) values (12,34);
+insert into t (id,a) values (12,35);
+insert into t (id,a) values (12,36);
+insert into t (id,a) values (12,37);
+insert into t (id,a) values (12,38);
+insert into t (id,a) values (12,39);
+insert into t (id,a) values (12,40);
+insert into t (id,a) values (12,41);
+insert into t (id,a) values (12,42);
+insert into t (id,a) values (12,43);
+insert into t (id,a) values (12,44);
+insert into t (id,a) values (12,45);
+insert into t (id,a) values (12,46);
+insert into t (id,a) values (12,47);
+insert into t (id,a) values (12,48);
+insert into t (id,a) values (12,49);
+insert into t (id,a) values (12,50);
+insert into t (id,a) values (12,51);
+insert into t (id,a) values (12,52);
+insert into t (id,a) values (12,53);
+insert into t (id,a) values (12,54);
+insert into t (id,a) values (12,55);
+insert into t (id,a) values (12,56);
+insert into t (id,a) values (12,57);
+insert into t (id,a) values (12,58);
+insert into t (id,a) values (12,59);
+insert into t (id,a) values (12,60);
+insert into t (id,a) values (12,61);
+insert into t (id,a) values (12,62);
+insert into t (id,a) values (12,63);
+insert into t (id,a) values (12,64);
+insert into t (id,a) values (12,65);
+insert into t (id,a) values (12,66);
+insert into t (id,a) values (12,67);
+insert into t (id,a) values (12,68);
+insert into t (id,a) values (12,69);
+insert into t (id,a) values (12,70);
+insert into t (id,a) values (12,71);
+insert into t (id,a) values (12,72);
+insert into t (id,a) values (12,73);
+insert into t (id,a) values (12,74);
+insert into t (id,a) values (12,75);
+insert into t (id,a) values (12,76);
+insert into t (id,a) values (12,77);
+insert into t (id,a) values (12,78);
+insert into t (id,a) values (12,79);
+insert into t (id,a) values (12,80);
+insert into t (id,a) values (12,81);
+insert into t (id,a) values (12,82);
+insert into t (id,a) values (12,83);
+insert into t (id,a) values (12,84);
+insert into t (id,a) values (12,85);
+insert into t (id,a) values (12,86);
+insert into t (id,a) values (12,87);
+insert into t (id,a) values (12,88);
+insert into t (id,a) values (12,89);
+insert into t (id,a) values (12,90);
+insert into t (id,a) values (12,91);
+insert into t (id,a) values (12,92);
+insert into t (id,a) values (12,93);
+insert into t (id,a) values (12,94);
+insert into t (id,a) values (12,95);
+insert into t (id,a) values (12,96);
+insert into t (id,a) values (12,97);
+insert into t (id,a) values (12,98);
+insert into t (id,a) values (12,99);
+insert into t (id,a) values (13,0);
+insert into t (id,a) values (13,1);
+insert into t (id,a) values (13,2);
+insert into t (id,a) values (13,3);
+insert into t (id,a) values (13,4);
+insert into t (id,a) values (13,5);
+insert into t (id,a) values (13,6);
+insert into t (id,a) values (13,7);
+insert into t (id,a) values (13,8);
+insert into t (id,a) values (13,9);
+insert into t (id,a) values (13,10);
+insert into t (id,a) values (13,11);
+insert into t (id,a) values (13,12);
+insert into t (id,a) values (13,13);
+insert into t (id,a) values (13,14);
+insert into t (id,a) values (13,15);
+insert into t (id,a) values (13,16);
+insert into t (id,a) values (13,17);
+insert into t (id,a) values (13,18);
+insert into t (id,a) values (13,19);
+insert into t (id,a) values (13,20);
+insert into t (id,a) values (13,21);
+insert into t (id,a) values (13,22);
+insert into t (id,a) values (13,23);
+insert into t (id,a) values (13,24);
+insert into t (id,a) values (13,25);
+insert into t (id,a) values (13,26);
+insert into t (id,a) values (13,27);
+insert into t (id,a) values (13,28);
+insert into t (id,a) values (13,29);
+insert into t (id,a) values (13,30);
+insert into t (id,a) values (13,31);
+insert into t (id,a) values (13,32);
+insert into t (id,a) values (13,33);
+insert into t (id,a) values (13,34);
+insert into t (id,a) values (13,35);
+insert into t (id,a) values (13,36);
+insert into t (id,a) values (13,37);
+insert into t (id,a) values (13,38);
+insert into t (id,a) values (13,39);
+insert into t (id,a) values (13,40);
+insert into t (id,a) values (13,41);
+insert into t (id,a) values (13,42);
+insert into t (id,a) values (13,43);
+insert into t (id,a) values (13,44);
+insert into t (id,a) values (13,45);
+insert into t (id,a) values (13,46);
+insert into t (id,a) values (13,47);
+insert into t (id,a) values (13,48);
+insert into t (id,a) values (13,49);
+insert into t (id,a) values (13,50);
+insert into t (id,a) values (13,51);
+insert into t (id,a) values (13,52);
+insert into t (id,a) values (13,53);
+insert into t (id,a) values (13,54);
+insert into t (id,a) values (13,55);
+insert into t (id,a) values (13,56);
+insert into t (id,a) values (13,57);
+insert into t (id,a) values (13,58);
+insert into t (id,a) values (13,59);
+insert into t (id,a) values (13,60);
+insert into t (id,a) values (13,61);
+insert into t (id,a) values (13,62);
+insert into t (id,a) values (13,63);
+insert into t (id,a) values (13,64);
+insert into t (id,a) values (13,65);
+insert into t (id,a) values (13,66);
+insert into t (id,a) values (13,67);
+insert into t (id,a) values (13,68);
+insert into t (id,a) values (13,69);
+insert into t (id,a) values (13,70);
+insert into t (id,a) values (13,71);
+insert into t (id,a) values (13,72);
+insert into t (id,a) values (13,73);
+insert into t (id,a) values (13,74);
+insert into t (id,a) values (13,75);
+insert into t (id,a) values (13,76);
+insert into t (id,a) values (13,77);
+insert into t (id,a) values (13,78);
+insert into t (id,a) values (13,79);
+insert into t (id,a) values (13,80);
+insert into t (id,a) values (13,81);
+insert into t (id,a) values (13,82);
+insert into t (id,a) values (13,83);
+insert into t (id,a) values (13,84);
+insert into t (id,a) values (13,85);
+insert into t (id,a) values (13,86);
+insert into t (id,a) values (13,87);
+insert into t (id,a) values (13,88);
+insert into t (id,a) values (13,89);
+insert into t (id,a) values (13,90);
+insert into t (id,a) values (13,91);
+insert into t (id,a) values (13,92);
+insert into t (id,a) values (13,93);
+insert into t (id,a) values (13,94);
+insert into t (id,a) values (13,95);
+insert into t (id,a) values (13,96);
+insert into t (id,a) values (13,97);
+insert into t (id,a) values (13,98);
+insert into t (id,a) values (13,99);
+insert into t (id,a) values (14,0);
+insert into t (id,a) values (14,1);
+insert into t (id,a) values (14,2);
+insert into t (id,a) values (14,3);
+insert into t (id,a) values (14,4);
+insert into t (id,a) values (14,5);
+insert into t (id,a) values (14,6);
+insert into t (id,a) values (14,7);
+insert into t (id,a) values (14,8);
+insert into t (id,a) values (14,9);
+insert into t (id,a) values (14,10);
+insert into t (id,a) values (14,11);
+insert into t (id,a) values (14,12);
+insert into t (id,a) values (14,13);
+insert into t (id,a) values (14,14);
+insert into t (id,a) values (14,15);
+insert into t (id,a) values (14,16);
+insert into t (id,a) values (14,17);
+insert into t (id,a) values (14,18);
+insert into t (id,a) values (14,19);
+insert into t (id,a) values (14,20);
+insert into t (id,a) values (14,21);
+insert into t (id,a) values (14,22);
+insert into t (id,a) values (14,23);
+insert into t (id,a) values (14,24);
+insert into t (id,a) values (14,25);
+insert into t (id,a) values (14,26);
+insert into t (id,a) values (14,27);
+insert into t (id,a) values (14,28);
+insert into t (id,a) values (14,29);
+insert into t (id,a) values (14,30);
+insert into t (id,a) values (14,31);
+insert into t (id,a) values (14,32);
+insert into t (id,a) values (14,33);
+insert into t (id,a) values (14,34);
+insert into t (id,a) values (14,35);
+insert into t (id,a) values (14,36);
+insert into t (id,a) values (14,37);
+insert into t (id,a) values (14,38);
+insert into t (id,a) values (14,39);
+insert into t (id,a) values (14,40);
+insert into t (id,a) values (14,41);
+insert into t (id,a) values (14,42);
+insert into t (id,a) values (14,43);
+insert into t (id,a) values (14,44);
+insert into t (id,a) values (14,45);
+insert into t (id,a) values (14,46);
+insert into t (id,a) values (14,47);
+insert into t (id,a) values (14,48);
+insert into t (id,a) values (14,49);
+insert into t (id,a) values (14,50);
+insert into t (id,a) values (14,51);
+insert into t (id,a) values (14,52);
+insert into t (id,a) values (14,53);
+insert into t (id,a) values (14,54);
+insert into t (id,a) values (14,55);
+insert into t (id,a) values (14,56);
+insert into t (id,a) values (14,57);
+insert into t (id,a) values (14,58);
+insert into t (id,a) values (14,59);
+insert into t (id,a) values (14,60);
+insert into t (id,a) values (14,61);
+insert into t (id,a) values (14,62);
+insert into t (id,a) values (14,63);
+insert into t (id,a) values (14,64);
+insert into t (id,a) values (14,65);
+insert into t (id,a) values (14,66);
+insert into t (id,a) values (14,67);
+insert into t (id,a) values (14,68);
+insert into t (id,a) values (14,69);
+insert into t (id,a) values (14,70);
+insert into t (id,a) values (14,71);
+insert into t (id,a) values (14,72);
+insert into t (id,a) values (14,73);
+insert into t (id,a) values (14,74);
+insert into t (id,a) values (14,75);
+insert into t (id,a) values (14,76);
+insert into t (id,a) values (14,77);
+insert into t (id,a) values (14,78);
+insert into t (id,a) values (14,79);
+insert into t (id,a) values (14,80);
+insert into t (id,a) values (14,81);
+insert into t (id,a) values (14,82);
+insert into t (id,a) values (14,83);
+insert into t (id,a) values (14,84);
+insert into t (id,a) values (14,85);
+insert into t (id,a) values (14,86);
+insert into t (id,a) values (14,87);
+insert into t (id,a) values (14,88);
+insert into t (id,a) values (14,89);
+insert into t (id,a) values (14,90);
+insert into t (id,a) values (14,91);
+insert into t (id,a) values (14,92);
+insert into t (id,a) values (14,93);
+insert into t (id,a) values (14,94);
+insert into t (id,a) values (14,95);
+insert into t (id,a) values (14,96);
+insert into t (id,a) values (14,97);
+insert into t (id,a) values (14,98);
+insert into t (id,a) values (14,99);
+insert into t (id,a) values (15,0);
+insert into t (id,a) values (15,1);
+insert into t (id,a) values (15,2);
+insert into t (id,a) values (15,3);
+insert into t (id,a) values (15,4);
+insert into t (id,a) values (15,5);
+insert into t (id,a) values (15,6);
+insert into t (id,a) values (15,7);
+insert into t (id,a) values (15,8);
+insert into t (id,a) values (15,9);
+insert into t (id,a) values (15,10);
+insert into t (id,a) values (15,11);
+insert into t (id,a) values (15,12);
+insert into t (id,a) values (15,13);
+insert into t (id,a) values (15,14);
+insert into t (id,a) values (15,15);
+insert into t (id,a) values (15,16);
+insert into t (id,a) values (15,17);
+insert into t (id,a) values (15,18);
+insert into t (id,a) values (15,19);
+insert into t (id,a) values (15,20);
+insert into t (id,a) values (15,21);
+insert into t (id,a) values (15,22);
+insert into t (id,a) values (15,23);
+insert into t (id,a) values (15,24);
+insert into t (id,a) values (15,25);
+insert into t (id,a) values (15,26);
+insert into t (id,a) values (15,27);
+insert into t (id,a) values (15,28);
+insert into t (id,a) values (15,29);
+insert into t (id,a) values (15,30);
+insert into t (id,a) values (15,31);
+insert into t (id,a) values (15,32);
+insert into t (id,a) values (15,33);
+insert into t (id,a) values (15,34);
+insert into t (id,a) values (15,35);
+insert into t (id,a) values (15,36);
+insert into t (id,a) values (15,37);
+insert into t (id,a) values (15,38);
+insert into t (id,a) values (15,39);
+insert into t (id,a) values (15,40);
+insert into t (id,a) values (15,41);
+insert into t (id,a) values (15,42);
+insert into t (id,a) values (15,43);
+insert into t (id,a) values (15,44);
+insert into t (id,a) values (15,45);
+insert into t (id,a) values (15,46);
+insert into t (id,a) values (15,47);
+insert into t (id,a) values (15,48);
+insert into t (id,a) values (15,49);
+insert into t (id,a) values (15,50);
+insert into t (id,a) values (15,51);
+insert into t (id,a) values (15,52);
+insert into t (id,a) values (15,53);
+insert into t (id,a) values (15,54);
+insert into t (id,a) values (15,55);
+insert into t (id,a) values (15,56);
+insert into t (id,a) values (15,57);
+insert into t (id,a) values (15,58);
+insert into t (id,a) values (15,59);
+insert into t (id,a) values (15,60);
+insert into t (id,a) values (15,61);
+insert into t (id,a) values (15,62);
+insert into t (id,a) values (15,63);
+insert into t (id,a) values (15,64);
+insert into t (id,a) values (15,65);
+insert into t (id,a) values (15,66);
+insert into t (id,a) values (15,67);
+insert into t (id,a) values (15,68);
+insert into t (id,a) values (15,69);
+insert into t (id,a) values (15,70);
+insert into t (id,a) values (15,71);
+insert into t (id,a) values (15,72);
+insert into t (id,a) values (15,73);
+insert into t (id,a) values (15,74);
+insert into t (id,a) values (15,75);
+insert into t (id,a) values (15,76);
+insert into t (id,a) values (15,77);
+insert into t (id,a) values (15,78);
+insert into t (id,a) values (15,79);
+insert into t (id,a) values (15,80);
+insert into t (id,a) values (15,81);
+insert into t (id,a) values (15,82);
+insert into t (id,a) values (15,83);
+insert into t (id,a) values (15,84);
+insert into t (id,a) values (15,85);
+insert into t (id,a) values (15,86);
+insert into t (id,a) values (15,87);
+insert into t (id,a) values (15,88);
+insert into t (id,a) values (15,89);
+insert into t (id,a) values (15,90);
+insert into t (id,a) values (15,91);
+insert into t (id,a) values (15,92);
+insert into t (id,a) values (15,93);
+insert into t (id,a) values (15,94);
+insert into t (id,a) values (15,95);
+insert into t (id,a) values (15,96);
+insert into t (id,a) values (15,97);
+insert into t (id,a) values (15,98);
+insert into t (id,a) values (15,99);
+insert into t (id,a) values (16,0);
+insert into t (id,a) values (16,1);
+insert into t (id,a) values (16,2);
+insert into t (id,a) values (16,3);
+insert into t (id,a) values (16,4);
+insert into t (id,a) values (16,5);
+insert into t (id,a) values (16,6);
+insert into t (id,a) values (16,7);
+insert into t (id,a) values (16,8);
+insert into t (id,a) values (16,9);
+insert into t (id,a) values (16,10);
+insert into t (id,a) values (16,11);
+insert into t (id,a) values (16,12);
+insert into t (id,a) values (16,13);
+insert into t (id,a) values (16,14);
+insert into t (id,a) values (16,15);
+insert into t (id,a) values (16,16);
+insert into t (id,a) values (16,17);
+insert into t (id,a) values (16,18);
+insert into t (id,a) values (16,19);
+insert into t (id,a) values (16,20);
+insert into t (id,a) values (16,21);
+insert into t (id,a) values (16,22);
+insert into t (id,a) values (16,23);
+insert into t (id,a) values (16,24);
+insert into t (id,a) values (16,25);
+insert into t (id,a) values (16,26);
+insert into t (id,a) values (16,27);
+insert into t (id,a) values (16,28);
+insert into t (id,a) values (16,29);
+insert into t (id,a) values (16,30);
+insert into t (id,a) values (16,31);
+insert into t (id,a) values (16,32);
+insert into t (id,a) values (16,33);
+insert into t (id,a) values (16,34);
+insert into t (id,a) values (16,35);
+insert into t (id,a) values (16,36);
+insert into t (id,a) values (16,37);
+insert into t (id,a) values (16,38);
+insert into t (id,a) values (16,39);
+insert into t (id,a) values (16,40);
+insert into t (id,a) values (16,41);
+insert into t (id,a) values (16,42);
+insert into t (id,a) values (16,43);
+insert into t (id,a) values (16,44);
+insert into t (id,a) values (16,45);
+insert into t (id,a) values (16,46);
+insert into t (id,a) values (16,47);
+insert into t (id,a) values (16,48);
+insert into t (id,a) values (16,49);
+insert into t (id,a) values (16,50);
+insert into t (id,a) values (16,51);
+insert into t (id,a) values (16,52);
+insert into t (id,a) values (16,53);
+insert into t (id,a) values (16,54);
+insert into t (id,a) values (16,55);
+insert into t (id,a) values (16,56);
+insert into t (id,a) values (16,57);
+insert into t (id,a) values (16,58);
+insert into t (id,a) values (16,59);
+insert into t (id,a) values (16,60);
+insert into t (id,a) values (16,61);
+insert into t (id,a) values (16,62);
+insert into t (id,a) values (16,63);
+insert into t (id,a) values (16,64);
+insert into t (id,a) values (16,65);
+insert into t (id,a) values (16,66);
+insert into t (id,a) values (16,67);
+insert into t (id,a) values (16,68);
+insert into t (id,a) values (16,69);
+insert into t (id,a) values (16,70);
+insert into t (id,a) values (16,71);
+insert into t (id,a) values (16,72);
+insert into t (id,a) values (16,73);
+insert into t (id,a) values (16,74);
+insert into t (id,a) values (16,75);
+insert into t (id,a) values (16,76);
+insert into t (id,a) values (16,77);
+insert into t (id,a) values (16,78);
+insert into t (id,a) values (16,79);
+insert into t (id,a) values (16,80);
+insert into t (id,a) values (16,81);
+insert into t (id,a) values (16,82);
+insert into t (id,a) values (16,83);
+insert into t (id,a) values (16,84);
+insert into t (id,a) values (16,85);
+insert into t (id,a) values (16,86);
+insert into t (id,a) values (16,87);
+insert into t (id,a) values (16,88);
+insert into t (id,a) values (16,89);
+insert into t (id,a) values (16,90);
+insert into t (id,a) values (16,91);
+insert into t (id,a) values (16,92);
+insert into t (id,a) values (16,93);
+insert into t (id,a) values (16,94);
+insert into t (id,a) values (16,95);
+insert into t (id,a) values (16,96);
+insert into t (id,a) values (16,97);
+insert into t (id,a) values (16,98);
+insert into t (id,a) values (16,99);
+insert into t (id,a) values (17,0);
+insert into t (id,a) values (17,1);
+insert into t (id,a) values (17,2);
+insert into t (id,a) values (17,3);
+insert into t (id,a) values (17,4);
+insert into t (id,a) values (17,5);
+insert into t (id,a) values (17,6);
+insert into t (id,a) values (17,7);
+insert into t (id,a) values (17,8);
+insert into t (id,a) values (17,9);
+insert into t (id,a) values (17,10);
+insert into t (id,a) values (17,11);
+insert into t (id,a) values (17,12);
+insert into t (id,a) values (17,13);
+insert into t (id,a) values (17,14);
+insert into t (id,a) values (17,15);
+insert into t (id,a) values (17,16);
+insert into t (id,a) values (17,17);
+insert into t (id,a) values (17,18);
+insert into t (id,a) values (17,19);
+insert into t (id,a) values (17,20);
+insert into t (id,a) values (17,21);
+insert into t (id,a) values (17,22);
+insert into t (id,a) values (17,23);
+insert into t (id,a) values (17,24);
+insert into t (id,a) values (17,25);
+insert into t (id,a) values (17,26);
+insert into t (id,a) values (17,27);
+insert into t (id,a) values (17,28);
+insert into t (id,a) values (17,29);
+insert into t (id,a) values (17,30);
+insert into t (id,a) values (17,31);
+insert into t (id,a) values (17,32);
+insert into t (id,a) values (17,33);
+insert into t (id,a) values (17,34);
+insert into t (id,a) values (17,35);
+insert into t (id,a) values (17,36);
+insert into t (id,a) values (17,37);
+insert into t (id,a) values (17,38);
+insert into t (id,a) values (17,39);
+insert into t (id,a) values (17,40);
+insert into t (id,a) values (17,41);
+insert into t (id,a) values (17,42);
+insert into t (id,a) values (17,43);
+insert into t (id,a) values (17,44);
+insert into t (id,a) values (17,45);
+insert into t (id,a) values (17,46);
+insert into t (id,a) values (17,47);
+insert into t (id,a) values (17,48);
+insert into t (id,a) values (17,49);
+insert into t (id,a) values (17,50);
+insert into t (id,a) values (17,51);
+insert into t (id,a) values (17,52);
+insert into t (id,a) values (17,53);
+insert into t (id,a) values (17,54);
+insert into t (id,a) values (17,55);
+insert into t (id,a) values (17,56);
+insert into t (id,a) values (17,57);
+insert into t (id,a) values (17,58);
+insert into t (id,a) values (17,59);
+insert into t (id,a) values (17,60);
+insert into t (id,a) values (17,61);
+insert into t (id,a) values (17,62);
+insert into t (id,a) values (17,63);
+insert into t (id,a) values (17,64);
+insert into t (id,a) values (17,65);
+insert into t (id,a) values (17,66);
+insert into t (id,a) values (17,67);
+insert into t (id,a) values (17,68);
+insert into t (id,a) values (17,69);
+insert into t (id,a) values (17,70);
+insert into t (id,a) values (17,71);
+insert into t (id,a) values (17,72);
+insert into t (id,a) values (17,73);
+insert into t (id,a) values (17,74);
+insert into t (id,a) values (17,75);
+insert into t (id,a) values (17,76);
+insert into t (id,a) values (17,77);
+insert into t (id,a) values (17,78);
+insert into t (id,a) values (17,79);
+insert into t (id,a) values (17,80);
+insert into t (id,a) values (17,81);
+insert into t (id,a) values (17,82);
+insert into t (id,a) values (17,83);
+insert into t (id,a) values (17,84);
+insert into t (id,a) values (17,85);
+insert into t (id,a) values (17,86);
+insert into t (id,a) values (17,87);
+insert into t (id,a) values (17,88);
+insert into t (id,a) values (17,89);
+insert into t (id,a) values (17,90);
+insert into t (id,a) values (17,91);
+insert into t (id,a) values (17,92);
+insert into t (id,a) values (17,93);
+insert into t (id,a) values (17,94);
+insert into t (id,a) values (17,95);
+insert into t (id,a) values (17,96);
+insert into t (id,a) values (17,97);
+insert into t (id,a) values (17,98);
+insert into t (id,a) values (17,99);
+insert into t (id,a) values (18,0);
+insert into t (id,a) values (18,1);
+insert into t (id,a) values (18,2);
+insert into t (id,a) values (18,3);
+insert into t (id,a) values (18,4);
+insert into t (id,a) values (18,5);
+insert into t (id,a) values (18,6);
+insert into t (id,a) values (18,7);
+insert into t (id,a) values (18,8);
+insert into t (id,a) values (18,9);
+insert into t (id,a) values (18,10);
+insert into t (id,a) values (18,11);
+insert into t (id,a) values (18,12);
+insert into t (id,a) values (18,13);
+insert into t (id,a) values (18,14);
+insert into t (id,a) values (18,15);
+insert into t (id,a) values (18,16);
+insert into t (id,a) values (18,17);
+insert into t (id,a) values (18,18);
+insert into t (id,a) values (18,19);
+insert into t (id,a) values (18,20);
+insert into t (id,a) values (18,21);
+insert into t (id,a) values (18,22);
+insert into t (id,a) values (18,23);
+insert into t (id,a) values (18,24);
+insert into t (id,a) values (18,25);
+insert into t (id,a) values (18,26);
+insert into t (id,a) values (18,27);
+insert into t (id,a) values (18,28);
+insert into t (id,a) values (18,29);
+insert into t (id,a) values (18,30);
+insert into t (id,a) values (18,31);
+insert into t (id,a) values (18,32);
+insert into t (id,a) values (18,33);
+insert into t (id,a) values (18,34);
+insert into t (id,a) values (18,35);
+insert into t (id,a) values (18,36);
+insert into t (id,a) values (18,37);
+insert into t (id,a) values (18,38);
+insert into t (id,a) values (18,39);
+insert into t (id,a) values (18,40);
+insert into t (id,a) values (18,41);
+insert into t (id,a) values (18,42);
+insert into t (id,a) values (18,43);
+insert into t (id,a) values (18,44);
+insert into t (id,a) values (18,45);
+insert into t (id,a) values (18,46);
+insert into t (id,a) values (18,47);
+insert into t (id,a) values (18,48);
+insert into t (id,a) values (18,49);
+insert into t (id,a) values (18,50);
+insert into t (id,a) values (18,51);
+insert into t (id,a) values (18,52);
+insert into t (id,a) values (18,53);
+insert into t (id,a) values (18,54);
+insert into t (id,a) values (18,55);
+insert into t (id,a) values (18,56);
+insert into t (id,a) values (18,57);
+insert into t (id,a) values (18,58);
+insert into t (id,a) values (18,59);
+insert into t (id,a) values (18,60);
+insert into t (id,a) values (18,61);
+insert into t (id,a) values (18,62);
+insert into t (id,a) values (18,63);
+insert into t (id,a) values (18,64);
+insert into t (id,a) values (18,65);
+insert into t (id,a) values (18,66);
+insert into t (id,a) values (18,67);
+insert into t (id,a) values (18,68);
+insert into t (id,a) values (18,69);
+insert into t (id,a) values (18,70);
+insert into t (id,a) values (18,71);
+insert into t (id,a) values (18,72);
+insert into t (id,a) values (18,73);
+insert into t (id,a) values (18,74);
+insert into t (id,a) values (18,75);
+insert into t (id,a) values (18,76);
+insert into t (id,a) values (18,77);
+insert into t (id,a) values (18,78);
+insert into t (id,a) values (18,79);
+insert into t (id,a) values (18,80);
+insert into t (id,a) values (18,81);
+insert into t (id,a) values (18,82);
+insert into t (id,a) values (18,83);
+insert into t (id,a) values (18,84);
+insert into t (id,a) values (18,85);
+insert into t (id,a) values (18,86);
+insert into t (id,a) values (18,87);
+insert into t (id,a) values (18,88);
+insert into t (id,a) values (18,89);
+insert into t (id,a) values (18,90);
+insert into t (id,a) values (18,91);
+insert into t (id,a) values (18,92);
+insert into t (id,a) values (18,93);
+insert into t (id,a) values (18,94);
+insert into t (id,a) values (18,95);
+insert into t (id,a) values (18,96);
+insert into t (id,a) values (18,97);
+insert into t (id,a) values (18,98);
+insert into t (id,a) values (18,99);
+insert into t (id,a) values (19,0);
+insert into t (id,a) values (19,1);
+insert into t (id,a) values (19,2);
+insert into t (id,a) values (19,3);
+insert into t (id,a) values (19,4);
+insert into t (id,a) values (19,5);
+insert into t (id,a) values (19,6);
+insert into t (id,a) values (19,7);
+insert into t (id,a) values (19,8);
+insert into t (id,a) values (19,9);
+insert into t (id,a) values (19,10);
+insert into t (id,a) values (19,11);
+insert into t (id,a) values (19,12);
+insert into t (id,a) values (19,13);
+insert into t (id,a) values (19,14);
+insert into t (id,a) values (19,15);
+insert into t (id,a) values (19,16);
+insert into t (id,a) values (19,17);
+insert into t (id,a) values (19,18);
+insert into t (id,a) values (19,19);
+insert into t (id,a) values (19,20);
+insert into t (id,a) values (19,21);
+insert into t (id,a) values (19,22);
+insert into t (id,a) values (19,23);
+insert into t (id,a) values (19,24);
+insert into t (id,a) values (19,25);
+insert into t (id,a) values (19,26);
+insert into t (id,a) values (19,27);
+insert into t (id,a) values (19,28);
+insert into t (id,a) values (19,29);
+insert into t (id,a) values (19,30);
+insert into t (id,a) values (19,31);
+insert into t (id,a) values (19,32);
+insert into t (id,a) values (19,33);
+insert into t (id,a) values (19,34);
+insert into t (id,a) values (19,35);
+insert into t (id,a) values (19,36);
+insert into t (id,a) values (19,37);
+insert into t (id,a) values (19,38);
+insert into t (id,a) values (19,39);
+insert into t (id,a) values (19,40);
+insert into t (id,a) values (19,41);
+insert into t (id,a) values (19,42);
+insert into t (id,a) values (19,43);
+insert into t (id,a) values (19,44);
+insert into t (id,a) values (19,45);
+insert into t (id,a) values (19,46);
+insert into t (id,a) values (19,47);
+insert into t (id,a) values (19,48);
+insert into t (id,a) values (19,49);
+insert into t (id,a) values (19,50);
+insert into t (id,a) values (19,51);
+insert into t (id,a) values (19,52);
+insert into t (id,a) values (19,53);
+insert into t (id,a) values (19,54);
+insert into t (id,a) values (19,55);
+insert into t (id,a) values (19,56);
+insert into t (id,a) values (19,57);
+insert into t (id,a) values (19,58);
+insert into t (id,a) values (19,59);
+insert into t (id,a) values (19,60);
+insert into t (id,a) values (19,61);
+insert into t (id,a) values (19,62);
+insert into t (id,a) values (19,63);
+insert into t (id,a) values (19,64);
+insert into t (id,a) values (19,65);
+insert into t (id,a) values (19,66);
+insert into t (id,a) values (19,67);
+insert into t (id,a) values (19,68);
+insert into t (id,a) values (19,69);
+insert into t (id,a) values (19,70);
+insert into t (id,a) values (19,71);
+insert into t (id,a) values (19,72);
+insert into t (id,a) values (19,73);
+insert into t (id,a) values (19,74);
+insert into t (id,a) values (19,75);
+insert into t (id,a) values (19,76);
+insert into t (id,a) values (19,77);
+insert into t (id,a) values (19,78);
+insert into t (id,a) values (19,79);
+insert into t (id,a) values (19,80);
+insert into t (id,a) values (19,81);
+insert into t (id,a) values (19,82);
+insert into t (id,a) values (19,83);
+insert into t (id,a) values (19,84);
+insert into t (id,a) values (19,85);
+insert into t (id,a) values (19,86);
+insert into t (id,a) values (19,87);
+insert into t (id,a) values (19,88);
+insert into t (id,a) values (19,89);
+insert into t (id,a) values (19,90);
+insert into t (id,a) values (19,91);
+insert into t (id,a) values (19,92);
+insert into t (id,a) values (19,93);
+insert into t (id,a) values (19,94);
+insert into t (id,a) values (19,95);
+insert into t (id,a) values (19,96);
+insert into t (id,a) values (19,97);
+insert into t (id,a) values (19,98);
+insert into t (id,a) values (19,99);
+insert into t (id,a) values (20,0);
+insert into t (id,a) values (20,1);
+insert into t (id,a) values (20,2);
+insert into t (id,a) values (20,3);
+insert into t (id,a) values (20,4);
+insert into t (id,a) values (20,5);
+insert into t (id,a) values (20,6);
+insert into t (id,a) values (20,7);
+insert into t (id,a) values (20,8);
+insert into t (id,a) values (20,9);
+insert into t (id,a) values (20,10);
+insert into t (id,a) values (20,11);
+insert into t (id,a) values (20,12);
+insert into t (id,a) values (20,13);
+insert into t (id,a) values (20,14);
+insert into t (id,a) values (20,15);
+insert into t (id,a) values (20,16);
+insert into t (id,a) values (20,17);
+insert into t (id,a) values (20,18);
+insert into t (id,a) values (20,19);
+insert into t (id,a) values (20,20);
+insert into t (id,a) values (20,21);
+insert into t (id,a) values (20,22);
+insert into t (id,a) values (20,23);
+insert into t (id,a) values (20,24);
+insert into t (id,a) values (20,25);
+insert into t (id,a) values (20,26);
+insert into t (id,a) values (20,27);
+insert into t (id,a) values (20,28);
+insert into t (id,a) values (20,29);
+insert into t (id,a) values (20,30);
+insert into t (id,a) values (20,31);
+insert into t (id,a) values (20,32);
+insert into t (id,a) values (20,33);
+insert into t (id,a) values (20,34);
+insert into t (id,a) values (20,35);
+insert into t (id,a) values (20,36);
+insert into t (id,a) values (20,37);
+insert into t (id,a) values (20,38);
+insert into t (id,a) values (20,39);
+insert into t (id,a) values (20,40);
+insert into t (id,a) values (20,41);
+insert into t (id,a) values (20,42);
+insert into t (id,a) values (20,43);
+insert into t (id,a) values (20,44);
+insert into t (id,a) values (20,45);
+insert into t (id,a) values (20,46);
+insert into t (id,a) values (20,47);
+insert into t (id,a) values (20,48);
+insert into t (id,a) values (20,49);
+insert into t (id,a) values (20,50);
+insert into t (id,a) values (20,51);
+insert into t (id,a) values (20,52);
+insert into t (id,a) values (20,53);
+insert into t (id,a) values (20,54);
+insert into t (id,a) values (20,55);
+insert into t (id,a) values (20,56);
+insert into t (id,a) values (20,57);
+insert into t (id,a) values (20,58);
+insert into t (id,a) values (20,59);
+insert into t (id,a) values (20,60);
+insert into t (id,a) values (20,61);
+insert into t (id,a) values (20,62);
+insert into t (id,a) values (20,63);
+insert into t (id,a) values (20,64);
+insert into t (id,a) values (20,65);
+insert into t (id,a) values (20,66);
+insert into t (id,a) values (20,67);
+insert into t (id,a) values (20,68);
+insert into t (id,a) values (20,69);
+insert into t (id,a) values (20,70);
+insert into t (id,a) values (20,71);
+insert into t (id,a) values (20,72);
+insert into t (id,a) values (20,73);
+insert into t (id,a) values (20,74);
+insert into t (id,a) values (20,75);
+insert into t (id,a) values (20,76);
+insert into t (id,a) values (20,77);
+insert into t (id,a) values (20,78);
+insert into t (id,a) values (20,79);
+insert into t (id,a) values (20,80);
+insert into t (id,a) values (20,81);
+insert into t (id,a) values (20,82);
+insert into t (id,a) values (20,83);
+insert into t (id,a) values (20,84);
+insert into t (id,a) values (20,85);
+insert into t (id,a) values (20,86);
+insert into t (id,a) values (20,87);
+insert into t (id,a) values (20,88);
+insert into t (id,a) values (20,89);
+insert into t (id,a) values (20,90);
+insert into t (id,a) values (20,91);
+insert into t (id,a) values (20,92);
+insert into t (id,a) values (20,93);
+insert into t (id,a) values (20,94);
+insert into t (id,a) values (20,95);
+insert into t (id,a) values (20,96);
+insert into t (id,a) values (20,97);
+insert into t (id,a) values (20,98);
+insert into t (id,a) values (20,99);
+insert into t (id,a) values (21,0);
+insert into t (id,a) values (21,1);
+insert into t (id,a) values (21,2);
+insert into t (id,a) values (21,3);
+insert into t (id,a) values (21,4);
+insert into t (id,a) values (21,5);
+insert into t (id,a) values (21,6);
+insert into t (id,a) values (21,7);
+insert into t (id,a) values (21,8);
+insert into t (id,a) values (21,9);
+insert into t (id,a) values (21,10);
+insert into t (id,a) values (21,11);
+insert into t (id,a) values (21,12);
+insert into t (id,a) values (21,13);
+insert into t (id,a) values (21,14);
+insert into t (id,a) values (21,15);
+insert into t (id,a) values (21,16);
+insert into t (id,a) values (21,17);
+insert into t (id,a) values (21,18);
+insert into t (id,a) values (21,19);
+insert into t (id,a) values (21,20);
+insert into t (id,a) values (21,21);
+insert into t (id,a) values (21,22);
+insert into t (id,a) values (21,23);
+insert into t (id,a) values (21,24);
+insert into t (id,a) values (21,25);
+insert into t (id,a) values (21,26);
+insert into t (id,a) values (21,27);
+insert into t (id,a) values (21,28);
+insert into t (id,a) values (21,29);
+insert into t (id,a) values (21,30);
+insert into t (id,a) values (21,31);
+insert into t (id,a) values (21,32);
+insert into t (id,a) values (21,33);
+insert into t (id,a) values (21,34);
+insert into t (id,a) values (21,35);
+insert into t (id,a) values (21,36);
+insert into t (id,a) values (21,37);
+insert into t (id,a) values (21,38);
+insert into t (id,a) values (21,39);
+insert into t (id,a) values (21,40);
+insert into t (id,a) values (21,41);
+insert into t (id,a) values (21,42);
+insert into t (id,a) values (21,43);
+insert into t (id,a) values (21,44);
+insert into t (id,a) values (21,45);
+insert into t (id,a) values (21,46);
+insert into t (id,a) values (21,47);
+insert into t (id,a) values (21,48);
+insert into t (id,a) values (21,49);
+insert into t (id,a) values (21,50);
+insert into t (id,a) values (21,51);
+insert into t (id,a) values (21,52);
+insert into t (id,a) values (21,53);
+insert into t (id,a) values (21,54);
+insert into t (id,a) values (21,55);
+insert into t (id,a) values (21,56);
+insert into t (id,a) values (21,57);
+insert into t (id,a) values (21,58);
+insert into t (id,a) values (21,59);
+insert into t (id,a) values (21,60);
+insert into t (id,a) values (21,61);
+insert into t (id,a) values (21,62);
+insert into t (id,a) values (21,63);
+insert into t (id,a) values (21,64);
+insert into t (id,a) values (21,65);
+insert into t (id,a) values (21,66);
+insert into t (id,a) values (21,67);
+insert into t (id,a) values (21,68);
+insert into t (id,a) values (21,69);
+insert into t (id,a) values (21,70);
+insert into t (id,a) values (21,71);
+insert into t (id,a) values (21,72);
+insert into t (id,a) values (21,73);
+insert into t (id,a) values (21,74);
+insert into t (id,a) values (21,75);
+insert into t (id,a) values (21,76);
+insert into t (id,a) values (21,77);
+insert into t (id,a) values (21,78);
+insert into t (id,a) values (21,79);
+insert into t (id,a) values (21,80);
+insert into t (id,a) values (21,81);
+insert into t (id,a) values (21,82);
+insert into t (id,a) values (21,83);
+insert into t (id,a) values (21,84);
+insert into t (id,a) values (21,85);
+insert into t (id,a) values (21,86);
+insert into t (id,a) values (21,87);
+insert into t (id,a) values (21,88);
+insert into t (id,a) values (21,89);
+insert into t (id,a) values (21,90);
+insert into t (id,a) values (21,91);
+insert into t (id,a) values (21,92);
+insert into t (id,a) values (21,93);
+insert into t (id,a) values (21,94);
+insert into t (id,a) values (21,95);
+insert into t (id,a) values (21,96);
+insert into t (id,a) values (21,97);
+insert into t (id,a) values (21,98);
+insert into t (id,a) values (21,99);
+insert into t (id,a) values (22,0);
+insert into t (id,a) values (22,1);
+insert into t (id,a) values (22,2);
+insert into t (id,a) values (22,3);
+insert into t (id,a) values (22,4);
+insert into t (id,a) values (22,5);
+insert into t (id,a) values (22,6);
+insert into t (id,a) values (22,7);
+insert into t (id,a) values (22,8);
+insert into t (id,a) values (22,9);
+insert into t (id,a) values (22,10);
+insert into t (id,a) values (22,11);
+insert into t (id,a) values (22,12);
+insert into t (id,a) values (22,13);
+insert into t (id,a) values (22,14);
+insert into t (id,a) values (22,15);
+insert into t (id,a) values (22,16);
+insert into t (id,a) values (22,17);
+insert into t (id,a) values (22,18);
+insert into t (id,a) values (22,19);
+insert into t (id,a) values (22,20);
+insert into t (id,a) values (22,21);
+insert into t (id,a) values (22,22);
+insert into t (id,a) values (22,23);
+insert into t (id,a) values (22,24);
+insert into t (id,a) values (22,25);
+insert into t (id,a) values (22,26);
+insert into t (id,a) values (22,27);
+insert into t (id,a) values (22,28);
+insert into t (id,a) values (22,29);
+insert into t (id,a) values (22,30);
+insert into t (id,a) values (22,31);
+insert into t (id,a) values (22,32);
+insert into t (id,a) values (22,33);
+insert into t (id,a) values (22,34);
+insert into t (id,a) values (22,35);
+insert into t (id,a) values (22,36);
+insert into t (id,a) values (22,37);
+insert into t (id,a) values (22,38);
+insert into t (id,a) values (22,39);
+insert into t (id,a) values (22,40);
+insert into t (id,a) values (22,41);
+insert into t (id,a) values (22,42);
+insert into t (id,a) values (22,43);
+insert into t (id,a) values (22,44);
+insert into t (id,a) values (22,45);
+insert into t (id,a) values (22,46);
+insert into t (id,a) values (22,47);
+insert into t (id,a) values (22,48);
+insert into t (id,a) values (22,49);
+insert into t (id,a) values (22,50);
+insert into t (id,a) values (22,51);
+insert into t (id,a) values (22,52);
+insert into t (id,a) values (22,53);
+insert into t (id,a) values (22,54);
+insert into t (id,a) values (22,55);
+insert into t (id,a) values (22,56);
+insert into t (id,a) values (22,57);
+insert into t (id,a) values (22,58);
+insert into t (id,a) values (22,59);
+insert into t (id,a) values (22,60);
+insert into t (id,a) values (22,61);
+insert into t (id,a) values (22,62);
+insert into t (id,a) values (22,63);
+insert into t (id,a) values (22,64);
+insert into t (id,a) values (22,65);
+insert into t (id,a) values (22,66);
+insert into t (id,a) values (22,67);
+insert into t (id,a) values (22,68);
+insert into t (id,a) values (22,69);
+insert into t (id,a) values (22,70);
+insert into t (id,a) values (22,71);
+insert into t (id,a) values (22,72);
+insert into t (id,a) values (22,73);
+insert into t (id,a) values (22,74);
+insert into t (id,a) values (22,75);
+insert into t (id,a) values (22,76);
+insert into t (id,a) values (22,77);
+insert into t (id,a) values (22,78);
+insert into t (id,a) values (22,79);
+insert into t (id,a) values (22,80);
+insert into t (id,a) values (22,81);
+insert into t (id,a) values (22,82);
+insert into t (id,a) values (22,83);
+insert into t (id,a) values (22,84);
+insert into t (id,a) values (22,85);
+insert into t (id,a) values (22,86);
+insert into t (id,a) values (22,87);
+insert into t (id,a) values (22,88);
+insert into t (id,a) values (22,89);
+insert into t (id,a) values (22,90);
+insert into t (id,a) values (22,91);
+insert into t (id,a) values (22,92);
+insert into t (id,a) values (22,93);
+insert into t (id,a) values (22,94);
+insert into t (id,a) values (22,95);
+insert into t (id,a) values (22,96);
+insert into t (id,a) values (22,97);
+insert into t (id,a) values (22,98);
+insert into t (id,a) values (22,99);
+insert into t (id,a) values (23,0);
+insert into t (id,a) values (23,1);
+insert into t (id,a) values (23,2);
+insert into t (id,a) values (23,3);
+insert into t (id,a) values (23,4);
+insert into t (id,a) values (23,5);
+insert into t (id,a) values (23,6);
+insert into t (id,a) values (23,7);
+insert into t (id,a) values (23,8);
+insert into t (id,a) values (23,9);
+insert into t (id,a) values (23,10);
+insert into t (id,a) values (23,11);
+insert into t (id,a) values (23,12);
+insert into t (id,a) values (23,13);
+insert into t (id,a) values (23,14);
+insert into t (id,a) values (23,15);
+insert into t (id,a) values (23,16);
+insert into t (id,a) values (23,17);
+insert into t (id,a) values (23,18);
+insert into t (id,a) values (23,19);
+insert into t (id,a) values (23,20);
+insert into t (id,a) values (23,21);
+insert into t (id,a) values (23,22);
+insert into t (id,a) values (23,23);
+insert into t (id,a) values (23,24);
+insert into t (id,a) values (23,25);
+insert into t (id,a) values (23,26);
+insert into t (id,a) values (23,27);
+insert into t (id,a) values (23,28);
+insert into t (id,a) values (23,29);
+insert into t (id,a) values (23,30);
+insert into t (id,a) values (23,31);
+insert into t (id,a) values (23,32);
+insert into t (id,a) values (23,33);
+insert into t (id,a) values (23,34);
+insert into t (id,a) values (23,35);
+insert into t (id,a) values (23,36);
+insert into t (id,a) values (23,37);
+insert into t (id,a) values (23,38);
+insert into t (id,a) values (23,39);
+insert into t (id,a) values (23,40);
+insert into t (id,a) values (23,41);
+insert into t (id,a) values (23,42);
+insert into t (id,a) values (23,43);
+insert into t (id,a) values (23,44);
+insert into t (id,a) values (23,45);
+insert into t (id,a) values (23,46);
+insert into t (id,a) values (23,47);
+insert into t (id,a) values (23,48);
+insert into t (id,a) values (23,49);
+insert into t (id,a) values (23,50);
+insert into t (id,a) values (23,51);
+insert into t (id,a) values (23,52);
+insert into t (id,a) values (23,53);
+insert into t (id,a) values (23,54);
+insert into t (id,a) values (23,55);
+insert into t (id,a) values (23,56);
+insert into t (id,a) values (23,57);
+insert into t (id,a) values (23,58);
+insert into t (id,a) values (23,59);
+insert into t (id,a) values (23,60);
+insert into t (id,a) values (23,61);
+insert into t (id,a) values (23,62);
+insert into t (id,a) values (23,63);
+insert into t (id,a) values (23,64);
+insert into t (id,a) values (23,65);
+insert into t (id,a) values (23,66);
+insert into t (id,a) values (23,67);
+insert into t (id,a) values (23,68);
+insert into t (id,a) values (23,69);
+insert into t (id,a) values (23,70);
+insert into t (id,a) values (23,71);
+insert into t (id,a) values (23,72);
+insert into t (id,a) values (23,73);
+insert into t (id,a) values (23,74);
+insert into t (id,a) values (23,75);
+insert into t (id,a) values (23,76);
+insert into t (id,a) values (23,77);
+insert into t (id,a) values (23,78);
+insert into t (id,a) values (23,79);
+insert into t (id,a) values (23,80);
+insert into t (id,a) values (23,81);
+insert into t (id,a) values (23,82);
+insert into t (id,a) values (23,83);
+insert into t (id,a) values (23,84);
+insert into t (id,a) values (23,85);
+insert into t (id,a) values (23,86);
+insert into t (id,a) values (23,87);
+insert into t (id,a) values (23,88);
+insert into t (id,a) values (23,89);
+insert into t (id,a) values (23,90);
+insert into t (id,a) values (23,91);
+insert into t (id,a) values (23,92);
+insert into t (id,a) values (23,93);
+insert into t (id,a) values (23,94);
+insert into t (id,a) values (23,95);
+insert into t (id,a) values (23,96);
+insert into t (id,a) values (23,97);
+insert into t (id,a) values (23,98);
+insert into t (id,a) values (23,99);
+insert into t (id,a) values (24,0);
+insert into t (id,a) values (24,1);
+insert into t (id,a) values (24,2);
+insert into t (id,a) values (24,3);
+insert into t (id,a) values (24,4);
+insert into t (id,a) values (24,5);
+insert into t (id,a) values (24,6);
+insert into t (id,a) values (24,7);
+insert into t (id,a) values (24,8);
+insert into t (id,a) values (24,9);
+insert into t (id,a) values (24,10);
+insert into t (id,a) values (24,11);
+insert into t (id,a) values (24,12);
+insert into t (id,a) values (24,13);
+insert into t (id,a) values (24,14);
+insert into t (id,a) values (24,15);
+insert into t (id,a) values (24,16);
+insert into t (id,a) values (24,17);
+insert into t (id,a) values (24,18);
+insert into t (id,a) values (24,19);
+insert into t (id,a) values (24,20);
+insert into t (id,a) values (24,21);
+insert into t (id,a) values (24,22);
+insert into t (id,a) values (24,23);
+insert into t (id,a) values (24,24);
+insert into t (id,a) values (24,25);
+insert into t (id,a) values (24,26);
+insert into t (id,a) values (24,27);
+insert into t (id,a) values (24,28);
+insert into t (id,a) values (24,29);
+insert into t (id,a) values (24,30);
+insert into t (id,a) values (24,31);
+insert into t (id,a) values (24,32);
+insert into t (id,a) values (24,33);
+insert into t (id,a) values (24,34);
+insert into t (id,a) values (24,35);
+insert into t (id,a) values (24,36);
+insert into t (id,a) values (24,37);
+insert into t (id,a) values (24,38);
+insert into t (id,a) values (24,39);
+insert into t (id,a) values (24,40);
+insert into t (id,a) values (24,41);
+insert into t (id,a) values (24,42);
+insert into t (id,a) values (24,43);
+insert into t (id,a) values (24,44);
+insert into t (id,a) values (24,45);
+insert into t (id,a) values (24,46);
+insert into t (id,a) values (24,47);
+insert into t (id,a) values (24,48);
+insert into t (id,a) values (24,49);
+insert into t (id,a) values (24,50);
+insert into t (id,a) values (24,51);
+insert into t (id,a) values (24,52);
+insert into t (id,a) values (24,53);
+insert into t (id,a) values (24,54);
+insert into t (id,a) values (24,55);
+insert into t (id,a) values (24,56);
+insert into t (id,a) values (24,57);
+insert into t (id,a) values (24,58);
+insert into t (id,a) values (24,59);
+insert into t (id,a) values (24,60);
+insert into t (id,a) values (24,61);
+insert into t (id,a) values (24,62);
+insert into t (id,a) values (24,63);
+insert into t (id,a) values (24,64);
+insert into t (id,a) values (24,65);
+insert into t (id,a) values (24,66);
+insert into t (id,a) values (24,67);
+insert into t (id,a) values (24,68);
+insert into t (id,a) values (24,69);
+insert into t (id,a) values (24,70);
+insert into t (id,a) values (24,71);
+insert into t (id,a) values (24,72);
+insert into t (id,a) values (24,73);
+insert into t (id,a) values (24,74);
+insert into t (id,a) values (24,75);
+insert into t (id,a) values (24,76);
+insert into t (id,a) values (24,77);
+insert into t (id,a) values (24,78);
+insert into t (id,a) values (24,79);
+insert into t (id,a) values (24,80);
+insert into t (id,a) values (24,81);
+insert into t (id,a) values (24,82);
+insert into t (id,a) values (24,83);
+insert into t (id,a) values (24,84);
+insert into t (id,a) values (24,85);
+insert into t (id,a) values (24,86);
+insert into t (id,a) values (24,87);
+insert into t (id,a) values (24,88);
+insert into t (id,a) values (24,89);
+insert into t (id,a) values (24,90);
+insert into t (id,a) values (24,91);
+insert into t (id,a) values (24,92);
+insert into t (id,a) values (24,93);
+insert into t (id,a) values (24,94);
+insert into t (id,a) values (24,95);
+insert into t (id,a) values (24,96);
+insert into t (id,a) values (24,97);
+insert into t (id,a) values (24,98);
+insert into t (id,a) values (24,99);
+insert into t (id,a) values (25,0);
+insert into t (id,a) values (25,1);
+insert into t (id,a) values (25,2);
+insert into t (id,a) values (25,3);
+insert into t (id,a) values (25,4);
+insert into t (id,a) values (25,5);
+insert into t (id,a) values (25,6);
+insert into t (id,a) values (25,7);
+insert into t (id,a) values (25,8);
+insert into t (id,a) values (25,9);
+insert into t (id,a) values (25,10);
+insert into t (id,a) values (25,11);
+insert into t (id,a) values (25,12);
+insert into t (id,a) values (25,13);
+insert into t (id,a) values (25,14);
+insert into t (id,a) values (25,15);
+insert into t (id,a) values (25,16);
+insert into t (id,a) values (25,17);
+insert into t (id,a) values (25,18);
+insert into t (id,a) values (25,19);
+insert into t (id,a) values (25,20);
+insert into t (id,a) values (25,21);
+insert into t (id,a) values (25,22);
+insert into t (id,a) values (25,23);
+insert into t (id,a) values (25,24);
+insert into t (id,a) values (25,25);
+insert into t (id,a) values (25,26);
+insert into t (id,a) values (25,27);
+insert into t (id,a) values (25,28);
+insert into t (id,a) values (25,29);
+insert into t (id,a) values (25,30);
+insert into t (id,a) values (25,31);
+insert into t (id,a) values (25,32);
+insert into t (id,a) values (25,33);
+insert into t (id,a) values (25,34);
+insert into t (id,a) values (25,35);
+insert into t (id,a) values (25,36);
+insert into t (id,a) values (25,37);
+insert into t (id,a) values (25,38);
+insert into t (id,a) values (25,39);
+insert into t (id,a) values (25,40);
+insert into t (id,a) values (25,41);
+insert into t (id,a) values (25,42);
+insert into t (id,a) values (25,43);
+insert into t (id,a) values (25,44);
+insert into t (id,a) values (25,45);
+insert into t (id,a) values (25,46);
+insert into t (id,a) values (25,47);
+insert into t (id,a) values (25,48);
+insert into t (id,a) values (25,49);
+insert into t (id,a) values (25,50);
+insert into t (id,a) values (25,51);
+insert into t (id,a) values (25,52);
+insert into t (id,a) values (25,53);
+insert into t (id,a) values (25,54);
+insert into t (id,a) values (25,55);
+insert into t (id,a) values (25,56);
+insert into t (id,a) values (25,57);
+insert into t (id,a) values (25,58);
+insert into t (id,a) values (25,59);
+insert into t (id,a) values (25,60);
+insert into t (id,a) values (25,61);
+insert into t (id,a) values (25,62);
+insert into t (id,a) values (25,63);
+insert into t (id,a) values (25,64);
+insert into t (id,a) values (25,65);
+insert into t (id,a) values (25,66);
+insert into t (id,a) values (25,67);
+insert into t (id,a) values (25,68);
+insert into t (id,a) values (25,69);
+insert into t (id,a) values (25,70);
+insert into t (id,a) values (25,71);
+insert into t (id,a) values (25,72);
+insert into t (id,a) values (25,73);
+insert into t (id,a) values (25,74);
+insert into t (id,a) values (25,75);
+insert into t (id,a) values (25,76);
+insert into t (id,a) values (25,77);
+insert into t (id,a) values (25,78);
+insert into t (id,a) values (25,79);
+insert into t (id,a) values (25,80);
+insert into t (id,a) values (25,81);
+insert into t (id,a) values (25,82);
+insert into t (id,a) values (25,83);
+insert into t (id,a) values (25,84);
+insert into t (id,a) values (25,85);
+insert into t (id,a) values (25,86);
+insert into t (id,a) values (25,87);
+insert into t (id,a) values (25,88);
+insert into t (id,a) values (25,89);
+insert into t (id,a) values (25,90);
+insert into t (id,a) values (25,91);
+insert into t (id,a) values (25,92);
+insert into t (id,a) values (25,93);
+insert into t (id,a) values (25,94);
+insert into t (id,a) values (25,95);
+insert into t (id,a) values (25,96);
+insert into t (id,a) values (25,97);
+insert into t (id,a) values (25,98);
+insert into t (id,a) values (25,99);
+insert into t (id,a) values (26,0);
+insert into t (id,a) values (26,1);
+insert into t (id,a) values (26,2);
+insert into t (id,a) values (26,3);
+insert into t (id,a) values (26,4);
+insert into t (id,a) values (26,5);
+insert into t (id,a) values (26,6);
+insert into t (id,a) values (26,7);
+insert into t (id,a) values (26,8);
+insert into t (id,a) values (26,9);
+insert into t (id,a) values (26,10);
+insert into t (id,a) values (26,11);
+insert into t (id,a) values (26,12);
+insert into t (id,a) values (26,13);
+insert into t (id,a) values (26,14);
+insert into t (id,a) values (26,15);
+insert into t (id,a) values (26,16);
+insert into t (id,a) values (26,17);
+insert into t (id,a) values (26,18);
+insert into t (id,a) values (26,19);
+insert into t (id,a) values (26,20);
+insert into t (id,a) values (26,21);
+insert into t (id,a) values (26,22);
+insert into t (id,a) values (26,23);
+insert into t (id,a) values (26,24);
+insert into t (id,a) values (26,25);
+insert into t (id,a) values (26,26);
+insert into t (id,a) values (26,27);
+insert into t (id,a) values (26,28);
+insert into t (id,a) values (26,29);
+insert into t (id,a) values (26,30);
+insert into t (id,a) values (26,31);
+insert into t (id,a) values (26,32);
+insert into t (id,a) values (26,33);
+insert into t (id,a) values (26,34);
+insert into t (id,a) values (26,35);
+insert into t (id,a) values (26,36);
+insert into t (id,a) values (26,37);
+insert into t (id,a) values (26,38);
+insert into t (id,a) values (26,39);
+insert into t (id,a) values (26,40);
+insert into t (id,a) values (26,41);
+insert into t (id,a) values (26,42);
+insert into t (id,a) values (26,43);
+insert into t (id,a) values (26,44);
+insert into t (id,a) values (26,45);
+insert into t (id,a) values (26,46);
+insert into t (id,a) values (26,47);
+insert into t (id,a) values (26,48);
+insert into t (id,a) values (26,49);
+insert into t (id,a) values (26,50);
+insert into t (id,a) values (26,51);
+insert into t (id,a) values (26,52);
+insert into t (id,a) values (26,53);
+insert into t (id,a) values (26,54);
+insert into t (id,a) values (26,55);
+insert into t (id,a) values (26,56);
+insert into t (id,a) values (26,57);
+insert into t (id,a) values (26,58);
+insert into t (id,a) values (26,59);
+insert into t (id,a) values (26,60);
+insert into t (id,a) values (26,61);
+insert into t (id,a) values (26,62);
+insert into t (id,a) values (26,63);
+insert into t (id,a) values (26,64);
+insert into t (id,a) values (26,65);
+insert into t (id,a) values (26,66);
+insert into t (id,a) values (26,67);
+insert into t (id,a) values (26,68);
+insert into t (id,a) values (26,69);
+insert into t (id,a) values (26,70);
+insert into t (id,a) values (26,71);
+insert into t (id,a) values (26,72);
+insert into t (id,a) values (26,73);
+insert into t (id,a) values (26,74);
+insert into t (id,a) values (26,75);
+insert into t (id,a) values (26,76);
+insert into t (id,a) values (26,77);
+insert into t (id,a) values (26,78);
+insert into t (id,a) values (26,79);
+insert into t (id,a) values (26,80);
+insert into t (id,a) values (26,81);
+insert into t (id,a) values (26,82);
+insert into t (id,a) values (26,83);
+insert into t (id,a) values (26,84);
+insert into t (id,a) values (26,85);
+insert into t (id,a) values (26,86);
+insert into t (id,a) values (26,87);
+insert into t (id,a) values (26,88);
+insert into t (id,a) values (26,89);
+insert into t (id,a) values (26,90);
+insert into t (id,a) values (26,91);
+insert into t (id,a) values (26,92);
+insert into t (id,a) values (26,93);
+insert into t (id,a) values (26,94);
+insert into t (id,a) values (26,95);
+insert into t (id,a) values (26,96);
+insert into t (id,a) values (26,97);
+insert into t (id,a) values (26,98);
+insert into t (id,a) values (26,99);
+insert into t (id,a) values (27,0);
+insert into t (id,a) values (27,1);
+insert into t (id,a) values (27,2);
+insert into t (id,a) values (27,3);
+insert into t (id,a) values (27,4);
+insert into t (id,a) values (27,5);
+insert into t (id,a) values (27,6);
+insert into t (id,a) values (27,7);
+insert into t (id,a) values (27,8);
+insert into t (id,a) values (27,9);
+insert into t (id,a) values (27,10);
+insert into t (id,a) values (27,11);
+insert into t (id,a) values (27,12);
+insert into t (id,a) values (27,13);
+insert into t (id,a) values (27,14);
+insert into t (id,a) values (27,15);
+insert into t (id,a) values (27,16);
+insert into t (id,a) values (27,17);
+insert into t (id,a) values (27,18);
+insert into t (id,a) values (27,19);
+insert into t (id,a) values (27,20);
+insert into t (id,a) values (27,21);
+insert into t (id,a) values (27,22);
+insert into t (id,a) values (27,23);
+insert into t (id,a) values (27,24);
+insert into t (id,a) values (27,25);
+insert into t (id,a) values (27,26);
+insert into t (id,a) values (27,27);
+insert into t (id,a) values (27,28);
+insert into t (id,a) values (27,29);
+insert into t (id,a) values (27,30);
+insert into t (id,a) values (27,31);
+insert into t (id,a) values (27,32);
+insert into t (id,a) values (27,33);
+insert into t (id,a) values (27,34);
+insert into t (id,a) values (27,35);
+insert into t (id,a) values (27,36);
+insert into t (id,a) values (27,37);
+insert into t (id,a) values (27,38);
+insert into t (id,a) values (27,39);
+insert into t (id,a) values (27,40);
+insert into t (id,a) values (27,41);
+insert into t (id,a) values (27,42);
+insert into t (id,a) values (27,43);
+insert into t (id,a) values (27,44);
+insert into t (id,a) values (27,45);
+insert into t (id,a) values (27,46);
+insert into t (id,a) values (27,47);
+insert into t (id,a) values (27,48);
+insert into t (id,a) values (27,49);
+insert into t (id,a) values (27,50);
+insert into t (id,a) values (27,51);
+insert into t (id,a) values (27,52);
+insert into t (id,a) values (27,53);
+insert into t (id,a) values (27,54);
+insert into t (id,a) values (27,55);
+insert into t (id,a) values (27,56);
+insert into t (id,a) values (27,57);
+insert into t (id,a) values (27,58);
+insert into t (id,a) values (27,59);
+insert into t (id,a) values (27,60);
+insert into t (id,a) values (27,61);
+insert into t (id,a) values (27,62);
+insert into t (id,a) values (27,63);
+insert into t (id,a) values (27,64);
+insert into t (id,a) values (27,65);
+insert into t (id,a) values (27,66);
+insert into t (id,a) values (27,67);
+insert into t (id,a) values (27,68);
+insert into t (id,a) values (27,69);
+insert into t (id,a) values (27,70);
+insert into t (id,a) values (27,71);
+insert into t (id,a) values (27,72);
+insert into t (id,a) values (27,73);
+insert into t (id,a) values (27,74);
+insert into t (id,a) values (27,75);
+insert into t (id,a) values (27,76);
+insert into t (id,a) values (27,77);
+insert into t (id,a) values (27,78);
+insert into t (id,a) values (27,79);
+insert into t (id,a) values (27,80);
+insert into t (id,a) values (27,81);
+insert into t (id,a) values (27,82);
+insert into t (id,a) values (27,83);
+insert into t (id,a) values (27,84);
+insert into t (id,a) values (27,85);
+insert into t (id,a) values (27,86);
+insert into t (id,a) values (27,87);
+insert into t (id,a) values (27,88);
+insert into t (id,a) values (27,89);
+insert into t (id,a) values (27,90);
+insert into t (id,a) values (27,91);
+insert into t (id,a) values (27,92);
+insert into t (id,a) values (27,93);
+insert into t (id,a) values (27,94);
+insert into t (id,a) values (27,95);
+insert into t (id,a) values (27,96);
+insert into t (id,a) values (27,97);
+insert into t (id,a) values (27,98);
+insert into t (id,a) values (27,99);
+insert into t (id,a) values (28,0);
+insert into t (id,a) values (28,1);
+insert into t (id,a) values (28,2);
+insert into t (id,a) values (28,3);
+insert into t (id,a) values (28,4);
+insert into t (id,a) values (28,5);
+insert into t (id,a) values (28,6);
+insert into t (id,a) values (28,7);
+insert into t (id,a) values (28,8);
+insert into t (id,a) values (28,9);
+insert into t (id,a) values (28,10);
+insert into t (id,a) values (28,11);
+insert into t (id,a) values (28,12);
+insert into t (id,a) values (28,13);
+insert into t (id,a) values (28,14);
+insert into t (id,a) values (28,15);
+insert into t (id,a) values (28,16);
+insert into t (id,a) values (28,17);
+insert into t (id,a) values (28,18);
+insert into t (id,a) values (28,19);
+insert into t (id,a) values (28,20);
+insert into t (id,a) values (28,21);
+insert into t (id,a) values (28,22);
+insert into t (id,a) values (28,23);
+insert into t (id,a) values (28,24);
+insert into t (id,a) values (28,25);
+insert into t (id,a) values (28,26);
+insert into t (id,a) values (28,27);
+insert into t (id,a) values (28,28);
+insert into t (id,a) values (28,29);
+insert into t (id,a) values (28,30);
+insert into t (id,a) values (28,31);
+insert into t (id,a) values (28,32);
+insert into t (id,a) values (28,33);
+insert into t (id,a) values (28,34);
+insert into t (id,a) values (28,35);
+insert into t (id,a) values (28,36);
+insert into t (id,a) values (28,37);
+insert into t (id,a) values (28,38);
+insert into t (id,a) values (28,39);
+insert into t (id,a) values (28,40);
+insert into t (id,a) values (28,41);
+insert into t (id,a) values (28,42);
+insert into t (id,a) values (28,43);
+insert into t (id,a) values (28,44);
+insert into t (id,a) values (28,45);
+insert into t (id,a) values (28,46);
+insert into t (id,a) values (28,47);
+insert into t (id,a) values (28,48);
+insert into t (id,a) values (28,49);
+insert into t (id,a) values (28,50);
+insert into t (id,a) values (28,51);
+insert into t (id,a) values (28,52);
+insert into t (id,a) values (28,53);
+insert into t (id,a) values (28,54);
+insert into t (id,a) values (28,55);
+insert into t (id,a) values (28,56);
+insert into t (id,a) values (28,57);
+insert into t (id,a) values (28,58);
+insert into t (id,a) values (28,59);
+insert into t (id,a) values (28,60);
+insert into t (id,a) values (28,61);
+insert into t (id,a) values (28,62);
+insert into t (id,a) values (28,63);
+insert into t (id,a) values (28,64);
+insert into t (id,a) values (28,65);
+insert into t (id,a) values (28,66);
+insert into t (id,a) values (28,67);
+insert into t (id,a) values (28,68);
+insert into t (id,a) values (28,69);
+insert into t (id,a) values (28,70);
+insert into t (id,a) values (28,71);
+insert into t (id,a) values (28,72);
+insert into t (id,a) values (28,73);
+insert into t (id,a) values (28,74);
+insert into t (id,a) values (28,75);
+insert into t (id,a) values (28,76);
+insert into t (id,a) values (28,77);
+insert into t (id,a) values (28,78);
+insert into t (id,a) values (28,79);
+insert into t (id,a) values (28,80);
+insert into t (id,a) values (28,81);
+insert into t (id,a) values (28,82);
+insert into t (id,a) values (28,83);
+insert into t (id,a) values (28,84);
+insert into t (id,a) values (28,85);
+insert into t (id,a) values (28,86);
+insert into t (id,a) values (28,87);
+insert into t (id,a) values (28,88);
+insert into t (id,a) values (28,89);
+insert into t (id,a) values (28,90);
+insert into t (id,a) values (28,91);
+insert into t (id,a) values (28,92);
+insert into t (id,a) values (28,93);
+insert into t (id,a) values (28,94);
+insert into t (id,a) values (28,95);
+insert into t (id,a) values (28,96);
+insert into t (id,a) values (28,97);
+insert into t (id,a) values (28,98);
+insert into t (id,a) values (28,99);
+insert into t (id,a) values (29,0);
+insert into t (id,a) values (29,1);
+insert into t (id,a) values (29,2);
+insert into t (id,a) values (29,3);
+insert into t (id,a) values (29,4);
+insert into t (id,a) values (29,5);
+insert into t (id,a) values (29,6);
+insert into t (id,a) values (29,7);
+insert into t (id,a) values (29,8);
+insert into t (id,a) values (29,9);
+insert into t (id,a) values (29,10);
+insert into t (id,a) values (29,11);
+insert into t (id,a) values (29,12);
+insert into t (id,a) values (29,13);
+insert into t (id,a) values (29,14);
+insert into t (id,a) values (29,15);
+insert into t (id,a) values (29,16);
+insert into t (id,a) values (29,17);
+insert into t (id,a) values (29,18);
+insert into t (id,a) values (29,19);
+insert into t (id,a) values (29,20);
+insert into t (id,a) values (29,21);
+insert into t (id,a) values (29,22);
+insert into t (id,a) values (29,23);
+insert into t (id,a) values (29,24);
+insert into t (id,a) values (29,25);
+insert into t (id,a) values (29,26);
+insert into t (id,a) values (29,27);
+insert into t (id,a) values (29,28);
+insert into t (id,a) values (29,29);
+insert into t (id,a) values (29,30);
+insert into t (id,a) values (29,31);
+insert into t (id,a) values (29,32);
+insert into t (id,a) values (29,33);
+insert into t (id,a) values (29,34);
+insert into t (id,a) values (29,35);
+insert into t (id,a) values (29,36);
+insert into t (id,a) values (29,37);
+insert into t (id,a) values (29,38);
+insert into t (id,a) values (29,39);
+insert into t (id,a) values (29,40);
+insert into t (id,a) values (29,41);
+insert into t (id,a) values (29,42);
+insert into t (id,a) values (29,43);
+insert into t (id,a) values (29,44);
+insert into t (id,a) values (29,45);
+insert into t (id,a) values (29,46);
+insert into t (id,a) values (29,47);
+insert into t (id,a) values (29,48);
+insert into t (id,a) values (29,49);
+insert into t (id,a) values (29,50);
+insert into t (id,a) values (29,51);
+insert into t (id,a) values (29,52);
+insert into t (id,a) values (29,53);
+insert into t (id,a) values (29,54);
+insert into t (id,a) values (29,55);
+insert into t (id,a) values (29,56);
+insert into t (id,a) values (29,57);
+insert into t (id,a) values (29,58);
+insert into t (id,a) values (29,59);
+insert into t (id,a) values (29,60);
+insert into t (id,a) values (29,61);
+insert into t (id,a) values (29,62);
+insert into t (id,a) values (29,63);
+insert into t (id,a) values (29,64);
+insert into t (id,a) values (29,65);
+insert into t (id,a) values (29,66);
+insert into t (id,a) values (29,67);
+insert into t (id,a) values (29,68);
+insert into t (id,a) values (29,69);
+insert into t (id,a) values (29,70);
+insert into t (id,a) values (29,71);
+insert into t (id,a) values (29,72);
+insert into t (id,a) values (29,73);
+insert into t (id,a) values (29,74);
+insert into t (id,a) values (29,75);
+insert into t (id,a) values (29,76);
+insert into t (id,a) values (29,77);
+insert into t (id,a) values (29,78);
+insert into t (id,a) values (29,79);
+insert into t (id,a) values (29,80);
+insert into t (id,a) values (29,81);
+insert into t (id,a) values (29,82);
+insert into t (id,a) values (29,83);
+insert into t (id,a) values (29,84);
+insert into t (id,a) values (29,85);
+insert into t (id,a) values (29,86);
+insert into t (id,a) values (29,87);
+insert into t (id,a) values (29,88);
+insert into t (id,a) values (29,89);
+insert into t (id,a) values (29,90);
+insert into t (id,a) values (29,91);
+insert into t (id,a) values (29,92);
+insert into t (id,a) values (29,93);
+insert into t (id,a) values (29,94);
+insert into t (id,a) values (29,95);
+insert into t (id,a) values (29,96);
+insert into t (id,a) values (29,97);
+insert into t (id,a) values (29,98);
+insert into t (id,a) values (29,99);
+insert into t (id,a) values (30,0);
+insert into t (id,a) values (30,1);
+insert into t (id,a) values (30,2);
+insert into t (id,a) values (30,3);
+insert into t (id,a) values (30,4);
+insert into t (id,a) values (30,5);
+insert into t (id,a) values (30,6);
+insert into t (id,a) values (30,7);
+insert into t (id,a) values (30,8);
+insert into t (id,a) values (30,9);
+insert into t (id,a) values (30,10);
+insert into t (id,a) values (30,11);
+insert into t (id,a) values (30,12);
+insert into t (id,a) values (30,13);
+insert into t (id,a) values (30,14);
+insert into t (id,a) values (30,15);
+insert into t (id,a) values (30,16);
+insert into t (id,a) values (30,17);
+insert into t (id,a) values (30,18);
+insert into t (id,a) values (30,19);
+insert into t (id,a) values (30,20);
+insert into t (id,a) values (30,21);
+insert into t (id,a) values (30,22);
+insert into t (id,a) values (30,23);
+insert into t (id,a) values (30,24);
+insert into t (id,a) values (30,25);
+insert into t (id,a) values (30,26);
+insert into t (id,a) values (30,27);
+insert into t (id,a) values (30,28);
+insert into t (id,a) values (30,29);
+insert into t (id,a) values (30,30);
+insert into t (id,a) values (30,31);
+insert into t (id,a) values (30,32);
+insert into t (id,a) values (30,33);
+insert into t (id,a) values (30,34);
+insert into t (id,a) values (30,35);
+insert into t (id,a) values (30,36);
+insert into t (id,a) values (30,37);
+insert into t (id,a) values (30,38);
+insert into t (id,a) values (30,39);
+insert into t (id,a) values (30,40);
+insert into t (id,a) values (30,41);
+insert into t (id,a) values (30,42);
+insert into t (id,a) values (30,43);
+insert into t (id,a) values (30,44);
+insert into t (id,a) values (30,45);
+insert into t (id,a) values (30,46);
+insert into t (id,a) values (30,47);
+insert into t (id,a) values (30,48);
+insert into t (id,a) values (30,49);
+insert into t (id,a) values (30,50);
+insert into t (id,a) values (30,51);
+insert into t (id,a) values (30,52);
+insert into t (id,a) values (30,53);
+insert into t (id,a) values (30,54);
+insert into t (id,a) values (30,55);
+insert into t (id,a) values (30,56);
+insert into t (id,a) values (30,57);
+insert into t (id,a) values (30,58);
+insert into t (id,a) values (30,59);
+insert into t (id,a) values (30,60);
+insert into t (id,a) values (30,61);
+insert into t (id,a) values (30,62);
+insert into t (id,a) values (30,63);
+insert into t (id,a) values (30,64);
+insert into t (id,a) values (30,65);
+insert into t (id,a) values (30,66);
+insert into t (id,a) values (30,67);
+insert into t (id,a) values (30,68);
+insert into t (id,a) values (30,69);
+insert into t (id,a) values (30,70);
+insert into t (id,a) values (30,71);
+insert into t (id,a) values (30,72);
+insert into t (id,a) values (30,73);
+insert into t (id,a) values (30,74);
+insert into t (id,a) values (30,75);
+insert into t (id,a) values (30,76);
+insert into t (id,a) values (30,77);
+insert into t (id,a) values (30,78);
+insert into t (id,a) values (30,79);
+insert into t (id,a) values (30,80);
+insert into t (id,a) values (30,81);
+insert into t (id,a) values (30,82);
+insert into t (id,a) values (30,83);
+insert into t (id,a) values (30,84);
+insert into t (id,a) values (30,85);
+insert into t (id,a) values (30,86);
+insert into t (id,a) values (30,87);
+insert into t (id,a) values (30,88);
+insert into t (id,a) values (30,89);
+insert into t (id,a) values (30,90);
+insert into t (id,a) values (30,91);
+insert into t (id,a) values (30,92);
+insert into t (id,a) values (30,93);
+insert into t (id,a) values (30,94);
+insert into t (id,a) values (30,95);
+insert into t (id,a) values (30,96);
+insert into t (id,a) values (30,97);
+insert into t (id,a) values (30,98);
+insert into t (id,a) values (30,99);
+insert into t (id,a) values (31,0);
+insert into t (id,a) values (31,1);
+insert into t (id,a) values (31,2);
+insert into t (id,a) values (31,3);
+insert into t (id,a) values (31,4);
+insert into t (id,a) values (31,5);
+insert into t (id,a) values (31,6);
+insert into t (id,a) values (31,7);
+insert into t (id,a) values (31,8);
+insert into t (id,a) values (31,9);
+insert into t (id,a) values (31,10);
+insert into t (id,a) values (31,11);
+insert into t (id,a) values (31,12);
+insert into t (id,a) values (31,13);
+insert into t (id,a) values (31,14);
+insert into t (id,a) values (31,15);
+insert into t (id,a) values (31,16);
+insert into t (id,a) values (31,17);
+insert into t (id,a) values (31,18);
+insert into t (id,a) values (31,19);
+insert into t (id,a) values (31,20);
+insert into t (id,a) values (31,21);
+insert into t (id,a) values (31,22);
+insert into t (id,a) values (31,23);
+insert into t (id,a) values (31,24);
+insert into t (id,a) values (31,25);
+insert into t (id,a) values (31,26);
+insert into t (id,a) values (31,27);
+insert into t (id,a) values (31,28);
+insert into t (id,a) values (31,29);
+insert into t (id,a) values (31,30);
+insert into t (id,a) values (31,31);
+insert into t (id,a) values (31,32);
+insert into t (id,a) values (31,33);
+insert into t (id,a) values (31,34);
+insert into t (id,a) values (31,35);
+insert into t (id,a) values (31,36);
+insert into t (id,a) values (31,37);
+insert into t (id,a) values (31,38);
+insert into t (id,a) values (31,39);
+insert into t (id,a) values (31,40);
+insert into t (id,a) values (31,41);
+insert into t (id,a) values (31,42);
+insert into t (id,a) values (31,43);
+insert into t (id,a) values (31,44);
+insert into t (id,a) values (31,45);
+insert into t (id,a) values (31,46);
+insert into t (id,a) values (31,47);
+insert into t (id,a) values (31,48);
+insert into t (id,a) values (31,49);
+insert into t (id,a) values (31,50);
+insert into t (id,a) values (31,51);
+insert into t (id,a) values (31,52);
+insert into t (id,a) values (31,53);
+insert into t (id,a) values (31,54);
+insert into t (id,a) values (31,55);
+insert into t (id,a) values (31,56);
+insert into t (id,a) values (31,57);
+insert into t (id,a) values (31,58);
+insert into t (id,a) values (31,59);
+insert into t (id,a) values (31,60);
+insert into t (id,a) values (31,61);
+insert into t (id,a) values (31,62);
+insert into t (id,a) values (31,63);
+insert into t (id,a) values (31,64);
+insert into t (id,a) values (31,65);
+insert into t (id,a) values (31,66);
+insert into t (id,a) values (31,67);
+insert into t (id,a) values (31,68);
+insert into t (id,a) values (31,69);
+insert into t (id,a) values (31,70);
+insert into t (id,a) values (31,71);
+insert into t (id,a) values (31,72);
+insert into t (id,a) values (31,73);
+insert into t (id,a) values (31,74);
+insert into t (id,a) values (31,75);
+insert into t (id,a) values (31,76);
+insert into t (id,a) values (31,77);
+insert into t (id,a) values (31,78);
+insert into t (id,a) values (31,79);
+insert into t (id,a) values (31,80);
+insert into t (id,a) values (31,81);
+insert into t (id,a) values (31,82);
+insert into t (id,a) values (31,83);
+insert into t (id,a) values (31,84);
+insert into t (id,a) values (31,85);
+insert into t (id,a) values (31,86);
+insert into t (id,a) values (31,87);
+insert into t (id,a) values (31,88);
+insert into t (id,a) values (31,89);
+insert into t (id,a) values (31,90);
+insert into t (id,a) values (31,91);
+insert into t (id,a) values (31,92);
+insert into t (id,a) values (31,93);
+insert into t (id,a) values (31,94);
+insert into t (id,a) values (31,95);
+insert into t (id,a) values (31,96);
+insert into t (id,a) values (31,97);
+insert into t (id,a) values (31,98);
+insert into t (id,a) values (31,99);
+insert into t (id,a) values (32,0);
+insert into t (id,a) values (32,1);
+insert into t (id,a) values (32,2);
+insert into t (id,a) values (32,3);
+insert into t (id,a) values (32,4);
+insert into t (id,a) values (32,5);
+insert into t (id,a) values (32,6);
+insert into t (id,a) values (32,7);
+insert into t (id,a) values (32,8);
+insert into t (id,a) values (32,9);
+insert into t (id,a) values (32,10);
+insert into t (id,a) values (32,11);
+insert into t (id,a) values (32,12);
+insert into t (id,a) values (32,13);
+insert into t (id,a) values (32,14);
+insert into t (id,a) values (32,15);
+insert into t (id,a) values (32,16);
+insert into t (id,a) values (32,17);
+insert into t (id,a) values (32,18);
+insert into t (id,a) values (32,19);
+insert into t (id,a) values (32,20);
+insert into t (id,a) values (32,21);
+insert into t (id,a) values (32,22);
+insert into t (id,a) values (32,23);
+insert into t (id,a) values (32,24);
+insert into t (id,a) values (32,25);
+insert into t (id,a) values (32,26);
+insert into t (id,a) values (32,27);
+insert into t (id,a) values (32,28);
+insert into t (id,a) values (32,29);
+insert into t (id,a) values (32,30);
+insert into t (id,a) values (32,31);
+insert into t (id,a) values (32,32);
+insert into t (id,a) values (32,33);
+insert into t (id,a) values (32,34);
+insert into t (id,a) values (32,35);
+insert into t (id,a) values (32,36);
+insert into t (id,a) values (32,37);
+insert into t (id,a) values (32,38);
+insert into t (id,a) values (32,39);
+insert into t (id,a) values (32,40);
+insert into t (id,a) values (32,41);
+insert into t (id,a) values (32,42);
+insert into t (id,a) values (32,43);
+insert into t (id,a) values (32,44);
+insert into t (id,a) values (32,45);
+insert into t (id,a) values (32,46);
+insert into t (id,a) values (32,47);
+insert into t (id,a) values (32,48);
+insert into t (id,a) values (32,49);
+insert into t (id,a) values (32,50);
+insert into t (id,a) values (32,51);
+insert into t (id,a) values (32,52);
+insert into t (id,a) values (32,53);
+insert into t (id,a) values (32,54);
+insert into t (id,a) values (32,55);
+insert into t (id,a) values (32,56);
+insert into t (id,a) values (32,57);
+insert into t (id,a) values (32,58);
+insert into t (id,a) values (32,59);
+insert into t (id,a) values (32,60);
+insert into t (id,a) values (32,61);
+insert into t (id,a) values (32,62);
+insert into t (id,a) values (32,63);
+insert into t (id,a) values (32,64);
+insert into t (id,a) values (32,65);
+insert into t (id,a) values (32,66);
+insert into t (id,a) values (32,67);
+insert into t (id,a) values (32,68);
+insert into t (id,a) values (32,69);
+insert into t (id,a) values (32,70);
+insert into t (id,a) values (32,71);
+insert into t (id,a) values (32,72);
+insert into t (id,a) values (32,73);
+insert into t (id,a) values (32,74);
+insert into t (id,a) values (32,75);
+insert into t (id,a) values (32,76);
+insert into t (id,a) values (32,77);
+insert into t (id,a) values (32,78);
+insert into t (id,a) values (32,79);
+insert into t (id,a) values (32,80);
+insert into t (id,a) values (32,81);
+insert into t (id,a) values (32,82);
+insert into t (id,a) values (32,83);
+insert into t (id,a) values (32,84);
+insert into t (id,a) values (32,85);
+insert into t (id,a) values (32,86);
+insert into t (id,a) values (32,87);
+insert into t (id,a) values (32,88);
+insert into t (id,a) values (32,89);
+insert into t (id,a) values (32,90);
+insert into t (id,a) values (32,91);
+insert into t (id,a) values (32,92);
+insert into t (id,a) values (32,93);
+insert into t (id,a) values (32,94);
+insert into t (id,a) values (32,95);
+insert into t (id,a) values (32,96);
+insert into t (id,a) values (32,97);
+insert into t (id,a) values (32,98);
+insert into t (id,a) values (32,99);
+insert into t (id,a) values (33,0);
+insert into t (id,a) values (33,1);
+insert into t (id,a) values (33,2);
+insert into t (id,a) values (33,3);
+insert into t (id,a) values (33,4);
+insert into t (id,a) values (33,5);
+insert into t (id,a) values (33,6);
+insert into t (id,a) values (33,7);
+insert into t (id,a) values (33,8);
+insert into t (id,a) values (33,9);
+insert into t (id,a) values (33,10);
+insert into t (id,a) values (33,11);
+insert into t (id,a) values (33,12);
+insert into t (id,a) values (33,13);
+insert into t (id,a) values (33,14);
+insert into t (id,a) values (33,15);
+insert into t (id,a) values (33,16);
+insert into t (id,a) values (33,17);
+insert into t (id,a) values (33,18);
+insert into t (id,a) values (33,19);
+insert into t (id,a) values (33,20);
+insert into t (id,a) values (33,21);
+insert into t (id,a) values (33,22);
+insert into t (id,a) values (33,23);
+insert into t (id,a) values (33,24);
+insert into t (id,a) values (33,25);
+insert into t (id,a) values (33,26);
+insert into t (id,a) values (33,27);
+insert into t (id,a) values (33,28);
+insert into t (id,a) values (33,29);
+insert into t (id,a) values (33,30);
+insert into t (id,a) values (33,31);
+insert into t (id,a) values (33,32);
+insert into t (id,a) values (33,33);
+insert into t (id,a) values (33,34);
+insert into t (id,a) values (33,35);
+insert into t (id,a) values (33,36);
+insert into t (id,a) values (33,37);
+insert into t (id,a) values (33,38);
+insert into t (id,a) values (33,39);
+insert into t (id,a) values (33,40);
+insert into t (id,a) values (33,41);
+insert into t (id,a) values (33,42);
+insert into t (id,a) values (33,43);
+insert into t (id,a) values (33,44);
+insert into t (id,a) values (33,45);
+insert into t (id,a) values (33,46);
+insert into t (id,a) values (33,47);
+insert into t (id,a) values (33,48);
+insert into t (id,a) values (33,49);
+insert into t (id,a) values (33,50);
+insert into t (id,a) values (33,51);
+insert into t (id,a) values (33,52);
+insert into t (id,a) values (33,53);
+insert into t (id,a) values (33,54);
+insert into t (id,a) values (33,55);
+insert into t (id,a) values (33,56);
+insert into t (id,a) values (33,57);
+insert into t (id,a) values (33,58);
+insert into t (id,a) values (33,59);
+insert into t (id,a) values (33,60);
+insert into t (id,a) values (33,61);
+insert into t (id,a) values (33,62);
+insert into t (id,a) values (33,63);
+insert into t (id,a) values (33,64);
+insert into t (id,a) values (33,65);
+insert into t (id,a) values (33,66);
+insert into t (id,a) values (33,67);
+insert into t (id,a) values (33,68);
+insert into t (id,a) values (33,69);
+insert into t (id,a) values (33,70);
+insert into t (id,a) values (33,71);
+insert into t (id,a) values (33,72);
+insert into t (id,a) values (33,73);
+insert into t (id,a) values (33,74);
+insert into t (id,a) values (33,75);
+insert into t (id,a) values (33,76);
+insert into t (id,a) values (33,77);
+insert into t (id,a) values (33,78);
+insert into t (id,a) values (33,79);
+insert into t (id,a) values (33,80);
+insert into t (id,a) values (33,81);
+insert into t (id,a) values (33,82);
+insert into t (id,a) values (33,83);
+insert into t (id,a) values (33,84);
+insert into t (id,a) values (33,85);
+insert into t (id,a) values (33,86);
+insert into t (id,a) values (33,87);
+insert into t (id,a) values (33,88);
+insert into t (id,a) values (33,89);
+insert into t (id,a) values (33,90);
+insert into t (id,a) values (33,91);
+insert into t (id,a) values (33,92);
+insert into t (id,a) values (33,93);
+insert into t (id,a) values (33,94);
+insert into t (id,a) values (33,95);
+insert into t (id,a) values (33,96);
+insert into t (id,a) values (33,97);
+insert into t (id,a) values (33,98);
+insert into t (id,a) values (33,99);
+insert into t (id,a) values (34,0);
+insert into t (id,a) values (34,1);
+insert into t (id,a) values (34,2);
+insert into t (id,a) values (34,3);
+insert into t (id,a) values (34,4);
+insert into t (id,a) values (34,5);
+insert into t (id,a) values (34,6);
+insert into t (id,a) values (34,7);
+insert into t (id,a) values (34,8);
+insert into t (id,a) values (34,9);
+insert into t (id,a) values (34,10);
+insert into t (id,a) values (34,11);
+insert into t (id,a) values (34,12);
+insert into t (id,a) values (34,13);
+insert into t (id,a) values (34,14);
+insert into t (id,a) values (34,15);
+insert into t (id,a) values (34,16);
+insert into t (id,a) values (34,17);
+insert into t (id,a) values (34,18);
+insert into t (id,a) values (34,19);
+insert into t (id,a) values (34,20);
+insert into t (id,a) values (34,21);
+insert into t (id,a) values (34,22);
+insert into t (id,a) values (34,23);
+insert into t (id,a) values (34,24);
+insert into t (id,a) values (34,25);
+insert into t (id,a) values (34,26);
+insert into t (id,a) values (34,27);
+insert into t (id,a) values (34,28);
+insert into t (id,a) values (34,29);
+insert into t (id,a) values (34,30);
+insert into t (id,a) values (34,31);
+insert into t (id,a) values (34,32);
+insert into t (id,a) values (34,33);
+insert into t (id,a) values (34,34);
+insert into t (id,a) values (34,35);
+insert into t (id,a) values (34,36);
+insert into t (id,a) values (34,37);
+insert into t (id,a) values (34,38);
+insert into t (id,a) values (34,39);
+insert into t (id,a) values (34,40);
+insert into t (id,a) values (34,41);
+insert into t (id,a) values (34,42);
+insert into t (id,a) values (34,43);
+insert into t (id,a) values (34,44);
+insert into t (id,a) values (34,45);
+insert into t (id,a) values (34,46);
+insert into t (id,a) values (34,47);
+insert into t (id,a) values (34,48);
+insert into t (id,a) values (34,49);
+insert into t (id,a) values (34,50);
+insert into t (id,a) values (34,51);
+insert into t (id,a) values (34,52);
+insert into t (id,a) values (34,53);
+insert into t (id,a) values (34,54);
+insert into t (id,a) values (34,55);
+insert into t (id,a) values (34,56);
+insert into t (id,a) values (34,57);
+insert into t (id,a) values (34,58);
+insert into t (id,a) values (34,59);
+insert into t (id,a) values (34,60);
+insert into t (id,a) values (34,61);
+insert into t (id,a) values (34,62);
+insert into t (id,a) values (34,63);
+insert into t (id,a) values (34,64);
+insert into t (id,a) values (34,65);
+insert into t (id,a) values (34,66);
+insert into t (id,a) values (34,67);
+insert into t (id,a) values (34,68);
+insert into t (id,a) values (34,69);
+insert into t (id,a) values (34,70);
+insert into t (id,a) values (34,71);
+insert into t (id,a) values (34,72);
+insert into t (id,a) values (34,73);
+insert into t (id,a) values (34,74);
+insert into t (id,a) values (34,75);
+insert into t (id,a) values (34,76);
+insert into t (id,a) values (34,77);
+insert into t (id,a) values (34,78);
+insert into t (id,a) values (34,79);
+insert into t (id,a) values (34,80);
+insert into t (id,a) values (34,81);
+insert into t (id,a) values (34,82);
+insert into t (id,a) values (34,83);
+insert into t (id,a) values (34,84);
+insert into t (id,a) values (34,85);
+insert into t (id,a) values (34,86);
+insert into t (id,a) values (34,87);
+insert into t (id,a) values (34,88);
+insert into t (id,a) values (34,89);
+insert into t (id,a) values (34,90);
+insert into t (id,a) values (34,91);
+insert into t (id,a) values (34,92);
+insert into t (id,a) values (34,93);
+insert into t (id,a) values (34,94);
+insert into t (id,a) values (34,95);
+insert into t (id,a) values (34,96);
+insert into t (id,a) values (34,97);
+insert into t (id,a) values (34,98);
+insert into t (id,a) values (34,99);
+insert into t (id,a) values (35,0);
+insert into t (id,a) values (35,1);
+insert into t (id,a) values (35,2);
+insert into t (id,a) values (35,3);
+insert into t (id,a) values (35,4);
+insert into t (id,a) values (35,5);
+insert into t (id,a) values (35,6);
+insert into t (id,a) values (35,7);
+insert into t (id,a) values (35,8);
+insert into t (id,a) values (35,9);
+insert into t (id,a) values (35,10);
+insert into t (id,a) values (35,11);
+insert into t (id,a) values (35,12);
+insert into t (id,a) values (35,13);
+insert into t (id,a) values (35,14);
+insert into t (id,a) values (35,15);
+insert into t (id,a) values (35,16);
+insert into t (id,a) values (35,17);
+insert into t (id,a) values (35,18);
+insert into t (id,a) values (35,19);
+insert into t (id,a) values (35,20);
+insert into t (id,a) values (35,21);
+insert into t (id,a) values (35,22);
+insert into t (id,a) values (35,23);
+insert into t (id,a) values (35,24);
+insert into t (id,a) values (35,25);
+insert into t (id,a) values (35,26);
+insert into t (id,a) values (35,27);
+insert into t (id,a) values (35,28);
+insert into t (id,a) values (35,29);
+insert into t (id,a) values (35,30);
+insert into t (id,a) values (35,31);
+insert into t (id,a) values (35,32);
+insert into t (id,a) values (35,33);
+insert into t (id,a) values (35,34);
+insert into t (id,a) values (35,35);
+insert into t (id,a) values (35,36);
+insert into t (id,a) values (35,37);
+insert into t (id,a) values (35,38);
+insert into t (id,a) values (35,39);
+insert into t (id,a) values (35,40);
+insert into t (id,a) values (35,41);
+insert into t (id,a) values (35,42);
+insert into t (id,a) values (35,43);
+insert into t (id,a) values (35,44);
+insert into t (id,a) values (35,45);
+insert into t (id,a) values (35,46);
+insert into t (id,a) values (35,47);
+insert into t (id,a) values (35,48);
+insert into t (id,a) values (35,49);
+insert into t (id,a) values (35,50);
+insert into t (id,a) values (35,51);
+insert into t (id,a) values (35,52);
+insert into t (id,a) values (35,53);
+insert into t (id,a) values (35,54);
+insert into t (id,a) values (35,55);
+insert into t (id,a) values (35,56);
+insert into t (id,a) values (35,57);
+insert into t (id,a) values (35,58);
+insert into t (id,a) values (35,59);
+insert into t (id,a) values (35,60);
+insert into t (id,a) values (35,61);
+insert into t (id,a) values (35,62);
+insert into t (id,a) values (35,63);
+insert into t (id,a) values (35,64);
+insert into t (id,a) values (35,65);
+insert into t (id,a) values (35,66);
+insert into t (id,a) values (35,67);
+insert into t (id,a) values (35,68);
+insert into t (id,a) values (35,69);
+insert into t (id,a) values (35,70);
+insert into t (id,a) values (35,71);
+insert into t (id,a) values (35,72);
+insert into t (id,a) values (35,73);
+insert into t (id,a) values (35,74);
+insert into t (id,a) values (35,75);
+insert into t (id,a) values (35,76);
+insert into t (id,a) values (35,77);
+insert into t (id,a) values (35,78);
+insert into t (id,a) values (35,79);
+insert into t (id,a) values (35,80);
+insert into t (id,a) values (35,81);
+insert into t (id,a) values (35,82);
+insert into t (id,a) values (35,83);
+insert into t (id,a) values (35,84);
+insert into t (id,a) values (35,85);
+insert into t (id,a) values (35,86);
+insert into t (id,a) values (35,87);
+insert into t (id,a) values (35,88);
+insert into t (id,a) values (35,89);
+insert into t (id,a) values (35,90);
+insert into t (id,a) values (35,91);
+insert into t (id,a) values (35,92);
+insert into t (id,a) values (35,93);
+insert into t (id,a) values (35,94);
+insert into t (id,a) values (35,95);
+insert into t (id,a) values (35,96);
+insert into t (id,a) values (35,97);
+insert into t (id,a) values (35,98);
+insert into t (id,a) values (35,99);
+insert into t (id,a) values (36,0);
+insert into t (id,a) values (36,1);
+insert into t (id,a) values (36,2);
+insert into t (id,a) values (36,3);
+insert into t (id,a) values (36,4);
+insert into t (id,a) values (36,5);
+insert into t (id,a) values (36,6);
+insert into t (id,a) values (36,7);
+insert into t (id,a) values (36,8);
+insert into t (id,a) values (36,9);
+insert into t (id,a) values (36,10);
+insert into t (id,a) values (36,11);
+insert into t (id,a) values (36,12);
+insert into t (id,a) values (36,13);
+insert into t (id,a) values (36,14);
+insert into t (id,a) values (36,15);
+insert into t (id,a) values (36,16);
+insert into t (id,a) values (36,17);
+insert into t (id,a) values (36,18);
+insert into t (id,a) values (36,19);
+insert into t (id,a) values (36,20);
+insert into t (id,a) values (36,21);
+insert into t (id,a) values (36,22);
+insert into t (id,a) values (36,23);
+insert into t (id,a) values (36,24);
+insert into t (id,a) values (36,25);
+insert into t (id,a) values (36,26);
+insert into t (id,a) values (36,27);
+insert into t (id,a) values (36,28);
+insert into t (id,a) values (36,29);
+insert into t (id,a) values (36,30);
+insert into t (id,a) values (36,31);
+insert into t (id,a) values (36,32);
+insert into t (id,a) values (36,33);
+insert into t (id,a) values (36,34);
+insert into t (id,a) values (36,35);
+insert into t (id,a) values (36,36);
+insert into t (id,a) values (36,37);
+insert into t (id,a) values (36,38);
+insert into t (id,a) values (36,39);
+insert into t (id,a) values (36,40);
+insert into t (id,a) values (36,41);
+insert into t (id,a) values (36,42);
+insert into t (id,a) values (36,43);
+insert into t (id,a) values (36,44);
+insert into t (id,a) values (36,45);
+insert into t (id,a) values (36,46);
+insert into t (id,a) values (36,47);
+insert into t (id,a) values (36,48);
+insert into t (id,a) values (36,49);
+insert into t (id,a) values (36,50);
+insert into t (id,a) values (36,51);
+insert into t (id,a) values (36,52);
+insert into t (id,a) values (36,53);
+insert into t (id,a) values (36,54);
+insert into t (id,a) values (36,55);
+insert into t (id,a) values (36,56);
+insert into t (id,a) values (36,57);
+insert into t (id,a) values (36,58);
+insert into t (id,a) values (36,59);
+insert into t (id,a) values (36,60);
+insert into t (id,a) values (36,61);
+insert into t (id,a) values (36,62);
+insert into t (id,a) values (36,63);
+insert into t (id,a) values (36,64);
+insert into t (id,a) values (36,65);
+insert into t (id,a) values (36,66);
+insert into t (id,a) values (36,67);
+insert into t (id,a) values (36,68);
+insert into t (id,a) values (36,69);
+insert into t (id,a) values (36,70);
+insert into t (id,a) values (36,71);
+insert into t (id,a) values (36,72);
+insert into t (id,a) values (36,73);
+insert into t (id,a) values (36,74);
+insert into t (id,a) values (36,75);
+insert into t (id,a) values (36,76);
+insert into t (id,a) values (36,77);
+insert into t (id,a) values (36,78);
+insert into t (id,a) values (36,79);
+insert into t (id,a) values (36,80);
+insert into t (id,a) values (36,81);
+insert into t (id,a) values (36,82);
+insert into t (id,a) values (36,83);
+insert into t (id,a) values (36,84);
+insert into t (id,a) values (36,85);
+insert into t (id,a) values (36,86);
+insert into t (id,a) values (36,87);
+insert into t (id,a) values (36,88);
+insert into t (id,a) values (36,89);
+insert into t (id,a) values (36,90);
+insert into t (id,a) values (36,91);
+insert into t (id,a) values (36,92);
+insert into t (id,a) values (36,93);
+insert into t (id,a) values (36,94);
+insert into t (id,a) values (36,95);
+insert into t (id,a) values (36,96);
+insert into t (id,a) values (36,97);
+insert into t (id,a) values (36,98);
+insert into t (id,a) values (36,99);
+insert into t (id,a) values (37,0);
+insert into t (id,a) values (37,1);
+insert into t (id,a) values (37,2);
+insert into t (id,a) values (37,3);
+insert into t (id,a) values (37,4);
+insert into t (id,a) values (37,5);
+insert into t (id,a) values (37,6);
+insert into t (id,a) values (37,7);
+insert into t (id,a) values (37,8);
+insert into t (id,a) values (37,9);
+insert into t (id,a) values (37,10);
+insert into t (id,a) values (37,11);
+insert into t (id,a) values (37,12);
+insert into t (id,a) values (37,13);
+insert into t (id,a) values (37,14);
+insert into t (id,a) values (37,15);
+insert into t (id,a) values (37,16);
+insert into t (id,a) values (37,17);
+insert into t (id,a) values (37,18);
+insert into t (id,a) values (37,19);
+insert into t (id,a) values (37,20);
+insert into t (id,a) values (37,21);
+insert into t (id,a) values (37,22);
+insert into t (id,a) values (37,23);
+insert into t (id,a) values (37,24);
+insert into t (id,a) values (37,25);
+insert into t (id,a) values (37,26);
+insert into t (id,a) values (37,27);
+insert into t (id,a) values (37,28);
+insert into t (id,a) values (37,29);
+insert into t (id,a) values (37,30);
+insert into t (id,a) values (37,31);
+insert into t (id,a) values (37,32);
+insert into t (id,a) values (37,33);
+insert into t (id,a) values (37,34);
+insert into t (id,a) values (37,35);
+insert into t (id,a) values (37,36);
+insert into t (id,a) values (37,37);
+insert into t (id,a) values (37,38);
+insert into t (id,a) values (37,39);
+insert into t (id,a) values (37,40);
+insert into t (id,a) values (37,41);
+insert into t (id,a) values (37,42);
+insert into t (id,a) values (37,43);
+insert into t (id,a) values (37,44);
+insert into t (id,a) values (37,45);
+insert into t (id,a) values (37,46);
+insert into t (id,a) values (37,47);
+insert into t (id,a) values (37,48);
+insert into t (id,a) values (37,49);
+insert into t (id,a) values (37,50);
+insert into t (id,a) values (37,51);
+insert into t (id,a) values (37,52);
+insert into t (id,a) values (37,53);
+insert into t (id,a) values (37,54);
+insert into t (id,a) values (37,55);
+insert into t (id,a) values (37,56);
+insert into t (id,a) values (37,57);
+insert into t (id,a) values (37,58);
+insert into t (id,a) values (37,59);
+insert into t (id,a) values (37,60);
+insert into t (id,a) values (37,61);
+insert into t (id,a) values (37,62);
+insert into t (id,a) values (37,63);
+insert into t (id,a) values (37,64);
+insert into t (id,a) values (37,65);
+insert into t (id,a) values (37,66);
+insert into t (id,a) values (37,67);
+insert into t (id,a) values (37,68);
+insert into t (id,a) values (37,69);
+insert into t (id,a) values (37,70);
+insert into t (id,a) values (37,71);
+insert into t (id,a) values (37,72);
+insert into t (id,a) values (37,73);
+insert into t (id,a) values (37,74);
+insert into t (id,a) values (37,75);
+insert into t (id,a) values (37,76);
+insert into t (id,a) values (37,77);
+insert into t (id,a) values (37,78);
+insert into t (id,a) values (37,79);
+insert into t (id,a) values (37,80);
+insert into t (id,a) values (37,81);
+insert into t (id,a) values (37,82);
+insert into t (id,a) values (37,83);
+insert into t (id,a) values (37,84);
+insert into t (id,a) values (37,85);
+insert into t (id,a) values (37,86);
+insert into t (id,a) values (37,87);
+insert into t (id,a) values (37,88);
+insert into t (id,a) values (37,89);
+insert into t (id,a) values (37,90);
+insert into t (id,a) values (37,91);
+insert into t (id,a) values (37,92);
+insert into t (id,a) values (37,93);
+insert into t (id,a) values (37,94);
+insert into t (id,a) values (37,95);
+insert into t (id,a) values (37,96);
+insert into t (id,a) values (37,97);
+insert into t (id,a) values (37,98);
+insert into t (id,a) values (37,99);
+insert into t (id,a) values (38,0);
+insert into t (id,a) values (38,1);
+insert into t (id,a) values (38,2);
+insert into t (id,a) values (38,3);
+insert into t (id,a) values (38,4);
+insert into t (id,a) values (38,5);
+insert into t (id,a) values (38,6);
+insert into t (id,a) values (38,7);
+insert into t (id,a) values (38,8);
+insert into t (id,a) values (38,9);
+insert into t (id,a) values (38,10);
+insert into t (id,a) values (38,11);
+insert into t (id,a) values (38,12);
+insert into t (id,a) values (38,13);
+insert into t (id,a) values (38,14);
+insert into t (id,a) values (38,15);
+insert into t (id,a) values (38,16);
+insert into t (id,a) values (38,17);
+insert into t (id,a) values (38,18);
+insert into t (id,a) values (38,19);
+insert into t (id,a) values (38,20);
+insert into t (id,a) values (38,21);
+insert into t (id,a) values (38,22);
+insert into t (id,a) values (38,23);
+insert into t (id,a) values (38,24);
+insert into t (id,a) values (38,25);
+insert into t (id,a) values (38,26);
+insert into t (id,a) values (38,27);
+insert into t (id,a) values (38,28);
+insert into t (id,a) values (38,29);
+insert into t (id,a) values (38,30);
+insert into t (id,a) values (38,31);
+insert into t (id,a) values (38,32);
+insert into t (id,a) values (38,33);
+insert into t (id,a) values (38,34);
+insert into t (id,a) values (38,35);
+insert into t (id,a) values (38,36);
+insert into t (id,a) values (38,37);
+insert into t (id,a) values (38,38);
+insert into t (id,a) values (38,39);
+insert into t (id,a) values (38,40);
+insert into t (id,a) values (38,41);
+insert into t (id,a) values (38,42);
+insert into t (id,a) values (38,43);
+insert into t (id,a) values (38,44);
+insert into t (id,a) values (38,45);
+insert into t (id,a) values (38,46);
+insert into t (id,a) values (38,47);
+insert into t (id,a) values (38,48);
+insert into t (id,a) values (38,49);
+insert into t (id,a) values (38,50);
+insert into t (id,a) values (38,51);
+insert into t (id,a) values (38,52);
+insert into t (id,a) values (38,53);
+insert into t (id,a) values (38,54);
+insert into t (id,a) values (38,55);
+insert into t (id,a) values (38,56);
+insert into t (id,a) values (38,57);
+insert into t (id,a) values (38,58);
+insert into t (id,a) values (38,59);
+insert into t (id,a) values (38,60);
+insert into t (id,a) values (38,61);
+insert into t (id,a) values (38,62);
+insert into t (id,a) values (38,63);
+insert into t (id,a) values (38,64);
+insert into t (id,a) values (38,65);
+insert into t (id,a) values (38,66);
+insert into t (id,a) values (38,67);
+insert into t (id,a) values (38,68);
+insert into t (id,a) values (38,69);
+insert into t (id,a) values (38,70);
+insert into t (id,a) values (38,71);
+insert into t (id,a) values (38,72);
+insert into t (id,a) values (38,73);
+insert into t (id,a) values (38,74);
+insert into t (id,a) values (38,75);
+insert into t (id,a) values (38,76);
+insert into t (id,a) values (38,77);
+insert into t (id,a) values (38,78);
+insert into t (id,a) values (38,79);
+insert into t (id,a) values (38,80);
+insert into t (id,a) values (38,81);
+insert into t (id,a) values (38,82);
+insert into t (id,a) values (38,83);
+insert into t (id,a) values (38,84);
+insert into t (id,a) values (38,85);
+insert into t (id,a) values (38,86);
+insert into t (id,a) values (38,87);
+insert into t (id,a) values (38,88);
+insert into t (id,a) values (38,89);
+insert into t (id,a) values (38,90);
+insert into t (id,a) values (38,91);
+insert into t (id,a) values (38,92);
+insert into t (id,a) values (38,93);
+insert into t (id,a) values (38,94);
+insert into t (id,a) values (38,95);
+insert into t (id,a) values (38,96);
+insert into t (id,a) values (38,97);
+insert into t (id,a) values (38,98);
+insert into t (id,a) values (38,99);
+insert into t (id,a) values (39,0);
+insert into t (id,a) values (39,1);
+insert into t (id,a) values (39,2);
+insert into t (id,a) values (39,3);
+insert into t (id,a) values (39,4);
+insert into t (id,a) values (39,5);
+insert into t (id,a) values (39,6);
+insert into t (id,a) values (39,7);
+insert into t (id,a) values (39,8);
+insert into t (id,a) values (39,9);
+insert into t (id,a) values (39,10);
+insert into t (id,a) values (39,11);
+insert into t (id,a) values (39,12);
+insert into t (id,a) values (39,13);
+insert into t (id,a) values (39,14);
+insert into t (id,a) values (39,15);
+insert into t (id,a) values (39,16);
+insert into t (id,a) values (39,17);
+insert into t (id,a) values (39,18);
+insert into t (id,a) values (39,19);
+insert into t (id,a) values (39,20);
+insert into t (id,a) values (39,21);
+insert into t (id,a) values (39,22);
+insert into t (id,a) values (39,23);
+insert into t (id,a) values (39,24);
+insert into t (id,a) values (39,25);
+insert into t (id,a) values (39,26);
+insert into t (id,a) values (39,27);
+insert into t (id,a) values (39,28);
+insert into t (id,a) values (39,29);
+insert into t (id,a) values (39,30);
+insert into t (id,a) values (39,31);
+insert into t (id,a) values (39,32);
+insert into t (id,a) values (39,33);
+insert into t (id,a) values (39,34);
+insert into t (id,a) values (39,35);
+insert into t (id,a) values (39,36);
+insert into t (id,a) values (39,37);
+insert into t (id,a) values (39,38);
+insert into t (id,a) values (39,39);
+insert into t (id,a) values (39,40);
+insert into t (id,a) values (39,41);
+insert into t (id,a) values (39,42);
+insert into t (id,a) values (39,43);
+insert into t (id,a) values (39,44);
+insert into t (id,a) values (39,45);
+insert into t (id,a) values (39,46);
+insert into t (id,a) values (39,47);
+insert into t (id,a) values (39,48);
+insert into t (id,a) values (39,49);
+insert into t (id,a) values (39,50);
+insert into t (id,a) values (39,51);
+insert into t (id,a) values (39,52);
+insert into t (id,a) values (39,53);
+insert into t (id,a) values (39,54);
+insert into t (id,a) values (39,55);
+insert into t (id,a) values (39,56);
+insert into t (id,a) values (39,57);
+insert into t (id,a) values (39,58);
+insert into t (id,a) values (39,59);
+insert into t (id,a) values (39,60);
+insert into t (id,a) values (39,61);
+insert into t (id,a) values (39,62);
+insert into t (id,a) values (39,63);
+insert into t (id,a) values (39,64);
+insert into t (id,a) values (39,65);
+insert into t (id,a) values (39,66);
+insert into t (id,a) values (39,67);
+insert into t (id,a) values (39,68);
+insert into t (id,a) values (39,69);
+insert into t (id,a) values (39,70);
+insert into t (id,a) values (39,71);
+insert into t (id,a) values (39,72);
+insert into t (id,a) values (39,73);
+insert into t (id,a) values (39,74);
+insert into t (id,a) values (39,75);
+insert into t (id,a) values (39,76);
+insert into t (id,a) values (39,77);
+insert into t (id,a) values (39,78);
+insert into t (id,a) values (39,79);
+insert into t (id,a) values (39,80);
+insert into t (id,a) values (39,81);
+insert into t (id,a) values (39,82);
+insert into t (id,a) values (39,83);
+insert into t (id,a) values (39,84);
+insert into t (id,a) values (39,85);
+insert into t (id,a) values (39,86);
+insert into t (id,a) values (39,87);
+insert into t (id,a) values (39,88);
+insert into t (id,a) values (39,89);
+insert into t (id,a) values (39,90);
+insert into t (id,a) values (39,91);
+insert into t (id,a) values (39,92);
+insert into t (id,a) values (39,93);
+insert into t (id,a) values (39,94);
+insert into t (id,a) values (39,95);
+insert into t (id,a) values (39,96);
+insert into t (id,a) values (39,97);
+insert into t (id,a) values (39,98);
+insert into t (id,a) values (39,99);
+insert into t (id,a) values (40,0);
+insert into t (id,a) values (40,1);
+insert into t (id,a) values (40,2);
+insert into t (id,a) values (40,3);
+insert into t (id,a) values (40,4);
+insert into t (id,a) values (40,5);
+insert into t (id,a) values (40,6);
+insert into t (id,a) values (40,7);
+insert into t (id,a) values (40,8);
+insert into t (id,a) values (40,9);
+insert into t (id,a) values (40,10);
+insert into t (id,a) values (40,11);
+insert into t (id,a) values (40,12);
+insert into t (id,a) values (40,13);
+insert into t (id,a) values (40,14);
+insert into t (id,a) values (40,15);
+insert into t (id,a) values (40,16);
+insert into t (id,a) values (40,17);
+insert into t (id,a) values (40,18);
+insert into t (id,a) values (40,19);
+insert into t (id,a) values (40,20);
+insert into t (id,a) values (40,21);
+insert into t (id,a) values (40,22);
+insert into t (id,a) values (40,23);
+insert into t (id,a) values (40,24);
+insert into t (id,a) values (40,25);
+insert into t (id,a) values (40,26);
+insert into t (id,a) values (40,27);
+insert into t (id,a) values (40,28);
+insert into t (id,a) values (40,29);
+insert into t (id,a) values (40,30);
+insert into t (id,a) values (40,31);
+insert into t (id,a) values (40,32);
+insert into t (id,a) values (40,33);
+insert into t (id,a) values (40,34);
+insert into t (id,a) values (40,35);
+insert into t (id,a) values (40,36);
+insert into t (id,a) values (40,37);
+insert into t (id,a) values (40,38);
+insert into t (id,a) values (40,39);
+insert into t (id,a) values (40,40);
+insert into t (id,a) values (40,41);
+insert into t (id,a) values (40,42);
+insert into t (id,a) values (40,43);
+insert into t (id,a) values (40,44);
+insert into t (id,a) values (40,45);
+insert into t (id,a) values (40,46);
+insert into t (id,a) values (40,47);
+insert into t (id,a) values (40,48);
+insert into t (id,a) values (40,49);
+insert into t (id,a) values (40,50);
+insert into t (id,a) values (40,51);
+insert into t (id,a) values (40,52);
+insert into t (id,a) values (40,53);
+insert into t (id,a) values (40,54);
+insert into t (id,a) values (40,55);
+insert into t (id,a) values (40,56);
+insert into t (id,a) values (40,57);
+insert into t (id,a) values (40,58);
+insert into t (id,a) values (40,59);
+insert into t (id,a) values (40,60);
+insert into t (id,a) values (40,61);
+insert into t (id,a) values (40,62);
+insert into t (id,a) values (40,63);
+insert into t (id,a) values (40,64);
+insert into t (id,a) values (40,65);
+insert into t (id,a) values (40,66);
+insert into t (id,a) values (40,67);
+insert into t (id,a) values (40,68);
+insert into t (id,a) values (40,69);
+insert into t (id,a) values (40,70);
+insert into t (id,a) values (40,71);
+insert into t (id,a) values (40,72);
+insert into t (id,a) values (40,73);
+insert into t (id,a) values (40,74);
+insert into t (id,a) values (40,75);
+insert into t (id,a) values (40,76);
+insert into t (id,a) values (40,77);
+insert into t (id,a) values (40,78);
+insert into t (id,a) values (40,79);
+insert into t (id,a) values (40,80);
+insert into t (id,a) values (40,81);
+insert into t (id,a) values (40,82);
+insert into t (id,a) values (40,83);
+insert into t (id,a) values (40,84);
+insert into t (id,a) values (40,85);
+insert into t (id,a) values (40,86);
+insert into t (id,a) values (40,87);
+insert into t (id,a) values (40,88);
+insert into t (id,a) values (40,89);
+insert into t (id,a) values (40,90);
+insert into t (id,a) values (40,91);
+insert into t (id,a) values (40,92);
+insert into t (id,a) values (40,93);
+insert into t (id,a) values (40,94);
+insert into t (id,a) values (40,95);
+insert into t (id,a) values (40,96);
+insert into t (id,a) values (40,97);
+insert into t (id,a) values (40,98);
+insert into t (id,a) values (40,99);
+insert into t (id,a) values (41,0);
+insert into t (id,a) values (41,1);
+insert into t (id,a) values (41,2);
+insert into t (id,a) values (41,3);
+insert into t (id,a) values (41,4);
+insert into t (id,a) values (41,5);
+insert into t (id,a) values (41,6);
+insert into t (id,a) values (41,7);
+insert into t (id,a) values (41,8);
+insert into t (id,a) values (41,9);
+insert into t (id,a) values (41,10);
+insert into t (id,a) values (41,11);
+insert into t (id,a) values (41,12);
+insert into t (id,a) values (41,13);
+insert into t (id,a) values (41,14);
+insert into t (id,a) values (41,15);
+insert into t (id,a) values (41,16);
+insert into t (id,a) values (41,17);
+insert into t (id,a) values (41,18);
+insert into t (id,a) values (41,19);
+insert into t (id,a) values (41,20);
+insert into t (id,a) values (41,21);
+insert into t (id,a) values (41,22);
+insert into t (id,a) values (41,23);
+insert into t (id,a) values (41,24);
+insert into t (id,a) values (41,25);
+insert into t (id,a) values (41,26);
+insert into t (id,a) values (41,27);
+insert into t (id,a) values (41,28);
+insert into t (id,a) values (41,29);
+insert into t (id,a) values (41,30);
+insert into t (id,a) values (41,31);
+insert into t (id,a) values (41,32);
+insert into t (id,a) values (41,33);
+insert into t (id,a) values (41,34);
+insert into t (id,a) values (41,35);
+insert into t (id,a) values (41,36);
+insert into t (id,a) values (41,37);
+insert into t (id,a) values (41,38);
+insert into t (id,a) values (41,39);
+insert into t (id,a) values (41,40);
+insert into t (id,a) values (41,41);
+insert into t (id,a) values (41,42);
+insert into t (id,a) values (41,43);
+insert into t (id,a) values (41,44);
+insert into t (id,a) values (41,45);
+insert into t (id,a) values (41,46);
+insert into t (id,a) values (41,47);
+insert into t (id,a) values (41,48);
+insert into t (id,a) values (41,49);
+insert into t (id,a) values (41,50);
+insert into t (id,a) values (41,51);
+insert into t (id,a) values (41,52);
+insert into t (id,a) values (41,53);
+insert into t (id,a) values (41,54);
+insert into t (id,a) values (41,55);
+insert into t (id,a) values (41,56);
+insert into t (id,a) values (41,57);
+insert into t (id,a) values (41,58);
+insert into t (id,a) values (41,59);
+insert into t (id,a) values (41,60);
+insert into t (id,a) values (41,61);
+insert into t (id,a) values (41,62);
+insert into t (id,a) values (41,63);
+insert into t (id,a) values (41,64);
+insert into t (id,a) values (41,65);
+insert into t (id,a) values (41,66);
+insert into t (id,a) values (41,67);
+insert into t (id,a) values (41,68);
+insert into t (id,a) values (41,69);
+insert into t (id,a) values (41,70);
+insert into t (id,a) values (41,71);
+insert into t (id,a) values (41,72);
+insert into t (id,a) values (41,73);
+insert into t (id,a) values (41,74);
+insert into t (id,a) values (41,75);
+insert into t (id,a) values (41,76);
+insert into t (id,a) values (41,77);
+insert into t (id,a) values (41,78);
+insert into t (id,a) values (41,79);
+insert into t (id,a) values (41,80);
+insert into t (id,a) values (41,81);
+insert into t (id,a) values (41,82);
+insert into t (id,a) values (41,83);
+insert into t (id,a) values (41,84);
+insert into t (id,a) values (41,85);
+insert into t (id,a) values (41,86);
+insert into t (id,a) values (41,87);
+insert into t (id,a) values (41,88);
+insert into t (id,a) values (41,89);
+insert into t (id,a) values (41,90);
+insert into t (id,a) values (41,91);
+insert into t (id,a) values (41,92);
+insert into t (id,a) values (41,93);
+insert into t (id,a) values (41,94);
+insert into t (id,a) values (41,95);
+insert into t (id,a) values (41,96);
+insert into t (id,a) values (41,97);
+insert into t (id,a) values (41,98);
+insert into t (id,a) values (41,99);
+insert into t (id,a) values (42,0);
+insert into t (id,a) values (42,1);
+insert into t (id,a) values (42,2);
+insert into t (id,a) values (42,3);
+insert into t (id,a) values (42,4);
+insert into t (id,a) values (42,5);
+insert into t (id,a) values (42,6);
+insert into t (id,a) values (42,7);
+insert into t (id,a) values (42,8);
+insert into t (id,a) values (42,9);
+insert into t (id,a) values (42,10);
+insert into t (id,a) values (42,11);
+insert into t (id,a) values (42,12);
+insert into t (id,a) values (42,13);
+insert into t (id,a) values (42,14);
+insert into t (id,a) values (42,15);
+insert into t (id,a) values (42,16);
+insert into t (id,a) values (42,17);
+insert into t (id,a) values (42,18);
+insert into t (id,a) values (42,19);
+insert into t (id,a) values (42,20);
+insert into t (id,a) values (42,21);
+insert into t (id,a) values (42,22);
+insert into t (id,a) values (42,23);
+insert into t (id,a) values (42,24);
+insert into t (id,a) values (42,25);
+insert into t (id,a) values (42,26);
+insert into t (id,a) values (42,27);
+insert into t (id,a) values (42,28);
+insert into t (id,a) values (42,29);
+insert into t (id,a) values (42,30);
+insert into t (id,a) values (42,31);
+insert into t (id,a) values (42,32);
+insert into t (id,a) values (42,33);
+insert into t (id,a) values (42,34);
+insert into t (id,a) values (42,35);
+insert into t (id,a) values (42,36);
+insert into t (id,a) values (42,37);
+insert into t (id,a) values (42,38);
+insert into t (id,a) values (42,39);
+insert into t (id,a) values (42,40);
+insert into t (id,a) values (42,41);
+insert into t (id,a) values (42,42);
+insert into t (id,a) values (42,43);
+insert into t (id,a) values (42,44);
+insert into t (id,a) values (42,45);
+insert into t (id,a) values (42,46);
+insert into t (id,a) values (42,47);
+insert into t (id,a) values (42,48);
+insert into t (id,a) values (42,49);
+insert into t (id,a) values (42,50);
+insert into t (id,a) values (42,51);
+insert into t (id,a) values (42,52);
+insert into t (id,a) values (42,53);
+insert into t (id,a) values (42,54);
+insert into t (id,a) values (42,55);
+insert into t (id,a) values (42,56);
+insert into t (id,a) values (42,57);
+insert into t (id,a) values (42,58);
+insert into t (id,a) values (42,59);
+insert into t (id,a) values (42,60);
+insert into t (id,a) values (42,61);
+insert into t (id,a) values (42,62);
+insert into t (id,a) values (42,63);
+insert into t (id,a) values (42,64);
+insert into t (id,a) values (42,65);
+insert into t (id,a) values (42,66);
+insert into t (id,a) values (42,67);
+insert into t (id,a) values (42,68);
+insert into t (id,a) values (42,69);
+insert into t (id,a) values (42,70);
+insert into t (id,a) values (42,71);
+insert into t (id,a) values (42,72);
+insert into t (id,a) values (42,73);
+insert into t (id,a) values (42,74);
+insert into t (id,a) values (42,75);
+insert into t (id,a) values (42,76);
+insert into t (id,a) values (42,77);
+insert into t (id,a) values (42,78);
+insert into t (id,a) values (42,79);
+insert into t (id,a) values (42,80);
+insert into t (id,a) values (42,81);
+insert into t (id,a) values (42,82);
+insert into t (id,a) values (42,83);
+insert into t (id,a) values (42,84);
+insert into t (id,a) values (42,85);
+insert into t (id,a) values (42,86);
+insert into t (id,a) values (42,87);
+insert into t (id,a) values (42,88);
+insert into t (id,a) values (42,89);
+insert into t (id,a) values (42,90);
+insert into t (id,a) values (42,91);
+insert into t (id,a) values (42,92);
+insert into t (id,a) values (42,93);
+insert into t (id,a) values (42,94);
+insert into t (id,a) values (42,95);
+insert into t (id,a) values (42,96);
+insert into t (id,a) values (42,97);
+insert into t (id,a) values (42,98);
+insert into t (id,a) values (42,99);
+insert into t (id,a) values (43,0);
+insert into t (id,a) values (43,1);
+insert into t (id,a) values (43,2);
+insert into t (id,a) values (43,3);
+insert into t (id,a) values (43,4);
+insert into t (id,a) values (43,5);
+insert into t (id,a) values (43,6);
+insert into t (id,a) values (43,7);
+insert into t (id,a) values (43,8);
+insert into t (id,a) values (43,9);
+insert into t (id,a) values (43,10);
+insert into t (id,a) values (43,11);
+insert into t (id,a) values (43,12);
+insert into t (id,a) values (43,13);
+insert into t (id,a) values (43,14);
+insert into t (id,a) values (43,15);
+insert into t (id,a) values (43,16);
+insert into t (id,a) values (43,17);
+insert into t (id,a) values (43,18);
+insert into t (id,a) values (43,19);
+insert into t (id,a) values (43,20);
+insert into t (id,a) values (43,21);
+insert into t (id,a) values (43,22);
+insert into t (id,a) values (43,23);
+insert into t (id,a) values (43,24);
+insert into t (id,a) values (43,25);
+insert into t (id,a) values (43,26);
+insert into t (id,a) values (43,27);
+insert into t (id,a) values (43,28);
+insert into t (id,a) values (43,29);
+insert into t (id,a) values (43,30);
+insert into t (id,a) values (43,31);
+insert into t (id,a) values (43,32);
+insert into t (id,a) values (43,33);
+insert into t (id,a) values (43,34);
+insert into t (id,a) values (43,35);
+insert into t (id,a) values (43,36);
+insert into t (id,a) values (43,37);
+insert into t (id,a) values (43,38);
+insert into t (id,a) values (43,39);
+insert into t (id,a) values (43,40);
+insert into t (id,a) values (43,41);
+insert into t (id,a) values (43,42);
+insert into t (id,a) values (43,43);
+insert into t (id,a) values (43,44);
+insert into t (id,a) values (43,45);
+insert into t (id,a) values (43,46);
+insert into t (id,a) values (43,47);
+insert into t (id,a) values (43,48);
+insert into t (id,a) values (43,49);
+insert into t (id,a) values (43,50);
+insert into t (id,a) values (43,51);
+insert into t (id,a) values (43,52);
+insert into t (id,a) values (43,53);
+insert into t (id,a) values (43,54);
+insert into t (id,a) values (43,55);
+insert into t (id,a) values (43,56);
+insert into t (id,a) values (43,57);
+insert into t (id,a) values (43,58);
+insert into t (id,a) values (43,59);
+insert into t (id,a) values (43,60);
+insert into t (id,a) values (43,61);
+insert into t (id,a) values (43,62);
+insert into t (id,a) values (43,63);
+insert into t (id,a) values (43,64);
+insert into t (id,a) values (43,65);
+insert into t (id,a) values (43,66);
+insert into t (id,a) values (43,67);
+insert into t (id,a) values (43,68);
+insert into t (id,a) values (43,69);
+insert into t (id,a) values (43,70);
+insert into t (id,a) values (43,71);
+insert into t (id,a) values (43,72);
+insert into t (id,a) values (43,73);
+insert into t (id,a) values (43,74);
+insert into t (id,a) values (43,75);
+insert into t (id,a) values (43,76);
+insert into t (id,a) values (43,77);
+insert into t (id,a) values (43,78);
+insert into t (id,a) values (43,79);
+insert into t (id,a) values (43,80);
+insert into t (id,a) values (43,81);
+insert into t (id,a) values (43,82);
+insert into t (id,a) values (43,83);
+insert into t (id,a) values (43,84);
+insert into t (id,a) values (43,85);
+insert into t (id,a) values (43,86);
+insert into t (id,a) values (43,87);
+insert into t (id,a) values (43,88);
+insert into t (id,a) values (43,89);
+insert into t (id,a) values (43,90);
+insert into t (id,a) values (43,91);
+insert into t (id,a) values (43,92);
+insert into t (id,a) values (43,93);
+insert into t (id,a) values (43,94);
+insert into t (id,a) values (43,95);
+insert into t (id,a) values (43,96);
+insert into t (id,a) values (43,97);
+insert into t (id,a) values (43,98);
+insert into t (id,a) values (43,99);
+insert into t (id,a) values (44,0);
+insert into t (id,a) values (44,1);
+insert into t (id,a) values (44,2);
+insert into t (id,a) values (44,3);
+insert into t (id,a) values (44,4);
+insert into t (id,a) values (44,5);
+insert into t (id,a) values (44,6);
+insert into t (id,a) values (44,7);
+insert into t (id,a) values (44,8);
+insert into t (id,a) values (44,9);
+insert into t (id,a) values (44,10);
+insert into t (id,a) values (44,11);
+insert into t (id,a) values (44,12);
+insert into t (id,a) values (44,13);
+insert into t (id,a) values (44,14);
+insert into t (id,a) values (44,15);
+insert into t (id,a) values (44,16);
+insert into t (id,a) values (44,17);
+insert into t (id,a) values (44,18);
+insert into t (id,a) values (44,19);
+insert into t (id,a) values (44,20);
+insert into t (id,a) values (44,21);
+insert into t (id,a) values (44,22);
+insert into t (id,a) values (44,23);
+insert into t (id,a) values (44,24);
+insert into t (id,a) values (44,25);
+insert into t (id,a) values (44,26);
+insert into t (id,a) values (44,27);
+insert into t (id,a) values (44,28);
+insert into t (id,a) values (44,29);
+insert into t (id,a) values (44,30);
+insert into t (id,a) values (44,31);
+insert into t (id,a) values (44,32);
+insert into t (id,a) values (44,33);
+insert into t (id,a) values (44,34);
+insert into t (id,a) values (44,35);
+insert into t (id,a) values (44,36);
+insert into t (id,a) values (44,37);
+insert into t (id,a) values (44,38);
+insert into t (id,a) values (44,39);
+insert into t (id,a) values (44,40);
+insert into t (id,a) values (44,41);
+insert into t (id,a) values (44,42);
+insert into t (id,a) values (44,43);
+insert into t (id,a) values (44,44);
+insert into t (id,a) values (44,45);
+insert into t (id,a) values (44,46);
+insert into t (id,a) values (44,47);
+insert into t (id,a) values (44,48);
+insert into t (id,a) values (44,49);
+insert into t (id,a) values (44,50);
+insert into t (id,a) values (44,51);
+insert into t (id,a) values (44,52);
+insert into t (id,a) values (44,53);
+insert into t (id,a) values (44,54);
+insert into t (id,a) values (44,55);
+insert into t (id,a) values (44,56);
+insert into t (id,a) values (44,57);
+insert into t (id,a) values (44,58);
+insert into t (id,a) values (44,59);
+insert into t (id,a) values (44,60);
+insert into t (id,a) values (44,61);
+insert into t (id,a) values (44,62);
+insert into t (id,a) values (44,63);
+insert into t (id,a) values (44,64);
+insert into t (id,a) values (44,65);
+insert into t (id,a) values (44,66);
+insert into t (id,a) values (44,67);
+insert into t (id,a) values (44,68);
+insert into t (id,a) values (44,69);
+insert into t (id,a) values (44,70);
+insert into t (id,a) values (44,71);
+insert into t (id,a) values (44,72);
+insert into t (id,a) values (44,73);
+insert into t (id,a) values (44,74);
+insert into t (id,a) values (44,75);
+insert into t (id,a) values (44,76);
+insert into t (id,a) values (44,77);
+insert into t (id,a) values (44,78);
+insert into t (id,a) values (44,79);
+insert into t (id,a) values (44,80);
+insert into t (id,a) values (44,81);
+insert into t (id,a) values (44,82);
+insert into t (id,a) values (44,83);
+insert into t (id,a) values (44,84);
+insert into t (id,a) values (44,85);
+insert into t (id,a) values (44,86);
+insert into t (id,a) values (44,87);
+insert into t (id,a) values (44,88);
+insert into t (id,a) values (44,89);
+insert into t (id,a) values (44,90);
+insert into t (id,a) values (44,91);
+insert into t (id,a) values (44,92);
+insert into t (id,a) values (44,93);
+insert into t (id,a) values (44,94);
+insert into t (id,a) values (44,95);
+insert into t (id,a) values (44,96);
+insert into t (id,a) values (44,97);
+insert into t (id,a) values (44,98);
+insert into t (id,a) values (44,99);
+insert into t (id,a) values (45,0);
+insert into t (id,a) values (45,1);
+insert into t (id,a) values (45,2);
+insert into t (id,a) values (45,3);
+insert into t (id,a) values (45,4);
+insert into t (id,a) values (45,5);
+insert into t (id,a) values (45,6);
+insert into t (id,a) values (45,7);
+insert into t (id,a) values (45,8);
+insert into t (id,a) values (45,9);
+insert into t (id,a) values (45,10);
+insert into t (id,a) values (45,11);
+insert into t (id,a) values (45,12);
+insert into t (id,a) values (45,13);
+insert into t (id,a) values (45,14);
+insert into t (id,a) values (45,15);
+insert into t (id,a) values (45,16);
+insert into t (id,a) values (45,17);
+insert into t (id,a) values (45,18);
+insert into t (id,a) values (45,19);
+insert into t (id,a) values (45,20);
+insert into t (id,a) values (45,21);
+insert into t (id,a) values (45,22);
+insert into t (id,a) values (45,23);
+insert into t (id,a) values (45,24);
+insert into t (id,a) values (45,25);
+insert into t (id,a) values (45,26);
+insert into t (id,a) values (45,27);
+insert into t (id,a) values (45,28);
+insert into t (id,a) values (45,29);
+insert into t (id,a) values (45,30);
+insert into t (id,a) values (45,31);
+insert into t (id,a) values (45,32);
+insert into t (id,a) values (45,33);
+insert into t (id,a) values (45,34);
+insert into t (id,a) values (45,35);
+insert into t (id,a) values (45,36);
+insert into t (id,a) values (45,37);
+insert into t (id,a) values (45,38);
+insert into t (id,a) values (45,39);
+insert into t (id,a) values (45,40);
+insert into t (id,a) values (45,41);
+insert into t (id,a) values (45,42);
+insert into t (id,a) values (45,43);
+insert into t (id,a) values (45,44);
+insert into t (id,a) values (45,45);
+insert into t (id,a) values (45,46);
+insert into t (id,a) values (45,47);
+insert into t (id,a) values (45,48);
+insert into t (id,a) values (45,49);
+insert into t (id,a) values (45,50);
+insert into t (id,a) values (45,51);
+insert into t (id,a) values (45,52);
+insert into t (id,a) values (45,53);
+insert into t (id,a) values (45,54);
+insert into t (id,a) values (45,55);
+insert into t (id,a) values (45,56);
+insert into t (id,a) values (45,57);
+insert into t (id,a) values (45,58);
+insert into t (id,a) values (45,59);
+insert into t (id,a) values (45,60);
+insert into t (id,a) values (45,61);
+insert into t (id,a) values (45,62);
+insert into t (id,a) values (45,63);
+insert into t (id,a) values (45,64);
+insert into t (id,a) values (45,65);
+insert into t (id,a) values (45,66);
+insert into t (id,a) values (45,67);
+insert into t (id,a) values (45,68);
+insert into t (id,a) values (45,69);
+insert into t (id,a) values (45,70);
+insert into t (id,a) values (45,71);
+insert into t (id,a) values (45,72);
+insert into t (id,a) values (45,73);
+insert into t (id,a) values (45,74);
+insert into t (id,a) values (45,75);
+insert into t (id,a) values (45,76);
+insert into t (id,a) values (45,77);
+insert into t (id,a) values (45,78);
+insert into t (id,a) values (45,79);
+insert into t (id,a) values (45,80);
+insert into t (id,a) values (45,81);
+insert into t (id,a) values (45,82);
+insert into t (id,a) values (45,83);
+insert into t (id,a) values (45,84);
+insert into t (id,a) values (45,85);
+insert into t (id,a) values (45,86);
+insert into t (id,a) values (45,87);
+insert into t (id,a) values (45,88);
+insert into t (id,a) values (45,89);
+insert into t (id,a) values (45,90);
+insert into t (id,a) values (45,91);
+insert into t (id,a) values (45,92);
+insert into t (id,a) values (45,93);
+insert into t (id,a) values (45,94);
+insert into t (id,a) values (45,95);
+insert into t (id,a) values (45,96);
+insert into t (id,a) values (45,97);
+insert into t (id,a) values (45,98);
+insert into t (id,a) values (45,99);
+insert into t (id,a) values (46,0);
+insert into t (id,a) values (46,1);
+insert into t (id,a) values (46,2);
+insert into t (id,a) values (46,3);
+insert into t (id,a) values (46,4);
+insert into t (id,a) values (46,5);
+insert into t (id,a) values (46,6);
+insert into t (id,a) values (46,7);
+insert into t (id,a) values (46,8);
+insert into t (id,a) values (46,9);
+insert into t (id,a) values (46,10);
+insert into t (id,a) values (46,11);
+insert into t (id,a) values (46,12);
+insert into t (id,a) values (46,13);
+insert into t (id,a) values (46,14);
+insert into t (id,a) values (46,15);
+insert into t (id,a) values (46,16);
+insert into t (id,a) values (46,17);
+insert into t (id,a) values (46,18);
+insert into t (id,a) values (46,19);
+insert into t (id,a) values (46,20);
+insert into t (id,a) values (46,21);
+insert into t (id,a) values (46,22);
+insert into t (id,a) values (46,23);
+insert into t (id,a) values (46,24);
+insert into t (id,a) values (46,25);
+insert into t (id,a) values (46,26);
+insert into t (id,a) values (46,27);
+insert into t (id,a) values (46,28);
+insert into t (id,a) values (46,29);
+insert into t (id,a) values (46,30);
+insert into t (id,a) values (46,31);
+insert into t (id,a) values (46,32);
+insert into t (id,a) values (46,33);
+insert into t (id,a) values (46,34);
+insert into t (id,a) values (46,35);
+insert into t (id,a) values (46,36);
+insert into t (id,a) values (46,37);
+insert into t (id,a) values (46,38);
+insert into t (id,a) values (46,39);
+insert into t (id,a) values (46,40);
+insert into t (id,a) values (46,41);
+insert into t (id,a) values (46,42);
+insert into t (id,a) values (46,43);
+insert into t (id,a) values (46,44);
+insert into t (id,a) values (46,45);
+insert into t (id,a) values (46,46);
+insert into t (id,a) values (46,47);
+insert into t (id,a) values (46,48);
+insert into t (id,a) values (46,49);
+insert into t (id,a) values (46,50);
+insert into t (id,a) values (46,51);
+insert into t (id,a) values (46,52);
+insert into t (id,a) values (46,53);
+insert into t (id,a) values (46,54);
+insert into t (id,a) values (46,55);
+insert into t (id,a) values (46,56);
+insert into t (id,a) values (46,57);
+insert into t (id,a) values (46,58);
+insert into t (id,a) values (46,59);
+insert into t (id,a) values (46,60);
+insert into t (id,a) values (46,61);
+insert into t (id,a) values (46,62);
+insert into t (id,a) values (46,63);
+insert into t (id,a) values (46,64);
+insert into t (id,a) values (46,65);
+insert into t (id,a) values (46,66);
+insert into t (id,a) values (46,67);
+insert into t (id,a) values (46,68);
+insert into t (id,a) values (46,69);
+insert into t (id,a) values (46,70);
+insert into t (id,a) values (46,71);
+insert into t (id,a) values (46,72);
+insert into t (id,a) values (46,73);
+insert into t (id,a) values (46,74);
+insert into t (id,a) values (46,75);
+insert into t (id,a) values (46,76);
+insert into t (id,a) values (46,77);
+insert into t (id,a) values (46,78);
+insert into t (id,a) values (46,79);
+insert into t (id,a) values (46,80);
+insert into t (id,a) values (46,81);
+insert into t (id,a) values (46,82);
+insert into t (id,a) values (46,83);
+insert into t (id,a) values (46,84);
+insert into t (id,a) values (46,85);
+insert into t (id,a) values (46,86);
+insert into t (id,a) values (46,87);
+insert into t (id,a) values (46,88);
+insert into t (id,a) values (46,89);
+insert into t (id,a) values (46,90);
+insert into t (id,a) values (46,91);
+insert into t (id,a) values (46,92);
+insert into t (id,a) values (46,93);
+insert into t (id,a) values (46,94);
+insert into t (id,a) values (46,95);
+insert into t (id,a) values (46,96);
+insert into t (id,a) values (46,97);
+insert into t (id,a) values (46,98);
+insert into t (id,a) values (46,99);
+insert into t (id,a) values (47,0);
+insert into t (id,a) values (47,1);
+insert into t (id,a) values (47,2);
+insert into t (id,a) values (47,3);
+insert into t (id,a) values (47,4);
+insert into t (id,a) values (47,5);
+insert into t (id,a) values (47,6);
+insert into t (id,a) values (47,7);
+insert into t (id,a) values (47,8);
+insert into t (id,a) values (47,9);
+insert into t (id,a) values (47,10);
+insert into t (id,a) values (47,11);
+insert into t (id,a) values (47,12);
+insert into t (id,a) values (47,13);
+insert into t (id,a) values (47,14);
+insert into t (id,a) values (47,15);
+insert into t (id,a) values (47,16);
+insert into t (id,a) values (47,17);
+insert into t (id,a) values (47,18);
+insert into t (id,a) values (47,19);
+insert into t (id,a) values (47,20);
+insert into t (id,a) values (47,21);
+insert into t (id,a) values (47,22);
+insert into t (id,a) values (47,23);
+insert into t (id,a) values (47,24);
+insert into t (id,a) values (47,25);
+insert into t (id,a) values (47,26);
+insert into t (id,a) values (47,27);
+insert into t (id,a) values (47,28);
+insert into t (id,a) values (47,29);
+insert into t (id,a) values (47,30);
+insert into t (id,a) values (47,31);
+insert into t (id,a) values (47,32);
+insert into t (id,a) values (47,33);
+insert into t (id,a) values (47,34);
+insert into t (id,a) values (47,35);
+insert into t (id,a) values (47,36);
+insert into t (id,a) values (47,37);
+insert into t (id,a) values (47,38);
+insert into t (id,a) values (47,39);
+insert into t (id,a) values (47,40);
+insert into t (id,a) values (47,41);
+insert into t (id,a) values (47,42);
+insert into t (id,a) values (47,43);
+insert into t (id,a) values (47,44);
+insert into t (id,a) values (47,45);
+insert into t (id,a) values (47,46);
+insert into t (id,a) values (47,47);
+insert into t (id,a) values (47,48);
+insert into t (id,a) values (47,49);
+insert into t (id,a) values (47,50);
+insert into t (id,a) values (47,51);
+insert into t (id,a) values (47,52);
+insert into t (id,a) values (47,53);
+insert into t (id,a) values (47,54);
+insert into t (id,a) values (47,55);
+insert into t (id,a) values (47,56);
+insert into t (id,a) values (47,57);
+insert into t (id,a) values (47,58);
+insert into t (id,a) values (47,59);
+insert into t (id,a) values (47,60);
+insert into t (id,a) values (47,61);
+insert into t (id,a) values (47,62);
+insert into t (id,a) values (47,63);
+insert into t (id,a) values (47,64);
+insert into t (id,a) values (47,65);
+insert into t (id,a) values (47,66);
+insert into t (id,a) values (47,67);
+insert into t (id,a) values (47,68);
+insert into t (id,a) values (47,69);
+insert into t (id,a) values (47,70);
+insert into t (id,a) values (47,71);
+insert into t (id,a) values (47,72);
+insert into t (id,a) values (47,73);
+insert into t (id,a) values (47,74);
+insert into t (id,a) values (47,75);
+insert into t (id,a) values (47,76);
+insert into t (id,a) values (47,77);
+insert into t (id,a) values (47,78);
+insert into t (id,a) values (47,79);
+insert into t (id,a) values (47,80);
+insert into t (id,a) values (47,81);
+insert into t (id,a) values (47,82);
+insert into t (id,a) values (47,83);
+insert into t (id,a) values (47,84);
+insert into t (id,a) values (47,85);
+insert into t (id,a) values (47,86);
+insert into t (id,a) values (47,87);
+insert into t (id,a) values (47,88);
+insert into t (id,a) values (47,89);
+insert into t (id,a) values (47,90);
+insert into t (id,a) values (47,91);
+insert into t (id,a) values (47,92);
+insert into t (id,a) values (47,93);
+insert into t (id,a) values (47,94);
+insert into t (id,a) values (47,95);
+insert into t (id,a) values (47,96);
+insert into t (id,a) values (47,97);
+insert into t (id,a) values (47,98);
+insert into t (id,a) values (47,99);
+insert into t (id,a) values (48,0);
+insert into t (id,a) values (48,1);
+insert into t (id,a) values (48,2);
+insert into t (id,a) values (48,3);
+insert into t (id,a) values (48,4);
+insert into t (id,a) values (48,5);
+insert into t (id,a) values (48,6);
+insert into t (id,a) values (48,7);
+insert into t (id,a) values (48,8);
+insert into t (id,a) values (48,9);
+insert into t (id,a) values (48,10);
+insert into t (id,a) values (48,11);
+insert into t (id,a) values (48,12);
+insert into t (id,a) values (48,13);
+insert into t (id,a) values (48,14);
+insert into t (id,a) values (48,15);
+insert into t (id,a) values (48,16);
+insert into t (id,a) values (48,17);
+insert into t (id,a) values (48,18);
+insert into t (id,a) values (48,19);
+insert into t (id,a) values (48,20);
+insert into t (id,a) values (48,21);
+insert into t (id,a) values (48,22);
+insert into t (id,a) values (48,23);
+insert into t (id,a) values (48,24);
+insert into t (id,a) values (48,25);
+insert into t (id,a) values (48,26);
+insert into t (id,a) values (48,27);
+insert into t (id,a) values (48,28);
+insert into t (id,a) values (48,29);
+insert into t (id,a) values (48,30);
+insert into t (id,a) values (48,31);
+insert into t (id,a) values (48,32);
+insert into t (id,a) values (48,33);
+insert into t (id,a) values (48,34);
+insert into t (id,a) values (48,35);
+insert into t (id,a) values (48,36);
+insert into t (id,a) values (48,37);
+insert into t (id,a) values (48,38);
+insert into t (id,a) values (48,39);
+insert into t (id,a) values (48,40);
+insert into t (id,a) values (48,41);
+insert into t (id,a) values (48,42);
+insert into t (id,a) values (48,43);
+insert into t (id,a) values (48,44);
+insert into t (id,a) values (48,45);
+insert into t (id,a) values (48,46);
+insert into t (id,a) values (48,47);
+insert into t (id,a) values (48,48);
+insert into t (id,a) values (48,49);
+insert into t (id,a) values (48,50);
+insert into t (id,a) values (48,51);
+insert into t (id,a) values (48,52);
+insert into t (id,a) values (48,53);
+insert into t (id,a) values (48,54);
+insert into t (id,a) values (48,55);
+insert into t (id,a) values (48,56);
+insert into t (id,a) values (48,57);
+insert into t (id,a) values (48,58);
+insert into t (id,a) values (48,59);
+insert into t (id,a) values (48,60);
+insert into t (id,a) values (48,61);
+insert into t (id,a) values (48,62);
+insert into t (id,a) values (48,63);
+insert into t (id,a) values (48,64);
+insert into t (id,a) values (48,65);
+insert into t (id,a) values (48,66);
+insert into t (id,a) values (48,67);
+insert into t (id,a) values (48,68);
+insert into t (id,a) values (48,69);
+insert into t (id,a) values (48,70);
+insert into t (id,a) values (48,71);
+insert into t (id,a) values (48,72);
+insert into t (id,a) values (48,73);
+insert into t (id,a) values (48,74);
+insert into t (id,a) values (48,75);
+insert into t (id,a) values (48,76);
+insert into t (id,a) values (48,77);
+insert into t (id,a) values (48,78);
+insert into t (id,a) values (48,79);
+insert into t (id,a) values (48,80);
+insert into t (id,a) values (48,81);
+insert into t (id,a) values (48,82);
+insert into t (id,a) values (48,83);
+insert into t (id,a) values (48,84);
+insert into t (id,a) values (48,85);
+insert into t (id,a) values (48,86);
+insert into t (id,a) values (48,87);
+insert into t (id,a) values (48,88);
+insert into t (id,a) values (48,89);
+insert into t (id,a) values (48,90);
+insert into t (id,a) values (48,91);
+insert into t (id,a) values (48,92);
+insert into t (id,a) values (48,93);
+insert into t (id,a) values (48,94);
+insert into t (id,a) values (48,95);
+insert into t (id,a) values (48,96);
+insert into t (id,a) values (48,97);
+insert into t (id,a) values (48,98);
+insert into t (id,a) values (48,99);
+insert into t (id,a) values (49,0);
+insert into t (id,a) values (49,1);
+insert into t (id,a) values (49,2);
+insert into t (id,a) values (49,3);
+insert into t (id,a) values (49,4);
+insert into t (id,a) values (49,5);
+insert into t (id,a) values (49,6);
+insert into t (id,a) values (49,7);
+insert into t (id,a) values (49,8);
+insert into t (id,a) values (49,9);
+insert into t (id,a) values (49,10);
+insert into t (id,a) values (49,11);
+insert into t (id,a) values (49,12);
+insert into t (id,a) values (49,13);
+insert into t (id,a) values (49,14);
+insert into t (id,a) values (49,15);
+insert into t (id,a) values (49,16);
+insert into t (id,a) values (49,17);
+insert into t (id,a) values (49,18);
+insert into t (id,a) values (49,19);
+insert into t (id,a) values (49,20);
+insert into t (id,a) values (49,21);
+insert into t (id,a) values (49,22);
+insert into t (id,a) values (49,23);
+insert into t (id,a) values (49,24);
+insert into t (id,a) values (49,25);
+insert into t (id,a) values (49,26);
+insert into t (id,a) values (49,27);
+insert into t (id,a) values (49,28);
+insert into t (id,a) values (49,29);
+insert into t (id,a) values (49,30);
+insert into t (id,a) values (49,31);
+insert into t (id,a) values (49,32);
+insert into t (id,a) values (49,33);
+insert into t (id,a) values (49,34);
+insert into t (id,a) values (49,35);
+insert into t (id,a) values (49,36);
+insert into t (id,a) values (49,37);
+insert into t (id,a) values (49,38);
+insert into t (id,a) values (49,39);
+insert into t (id,a) values (49,40);
+insert into t (id,a) values (49,41);
+insert into t (id,a) values (49,42);
+insert into t (id,a) values (49,43);
+insert into t (id,a) values (49,44);
+insert into t (id,a) values (49,45);
+insert into t (id,a) values (49,46);
+insert into t (id,a) values (49,47);
+insert into t (id,a) values (49,48);
+insert into t (id,a) values (49,49);
+insert into t (id,a) values (49,50);
+insert into t (id,a) values (49,51);
+insert into t (id,a) values (49,52);
+insert into t (id,a) values (49,53);
+insert into t (id,a) values (49,54);
+insert into t (id,a) values (49,55);
+insert into t (id,a) values (49,56);
+insert into t (id,a) values (49,57);
+insert into t (id,a) values (49,58);
+insert into t (id,a) values (49,59);
+insert into t (id,a) values (49,60);
+insert into t (id,a) values (49,61);
+insert into t (id,a) values (49,62);
+insert into t (id,a) values (49,63);
+insert into t (id,a) values (49,64);
+insert into t (id,a) values (49,65);
+insert into t (id,a) values (49,66);
+insert into t (id,a) values (49,67);
+insert into t (id,a) values (49,68);
+insert into t (id,a) values (49,69);
+insert into t (id,a) values (49,70);
+insert into t (id,a) values (49,71);
+insert into t (id,a) values (49,72);
+insert into t (id,a) values (49,73);
+insert into t (id,a) values (49,74);
+insert into t (id,a) values (49,75);
+insert into t (id,a) values (49,76);
+insert into t (id,a) values (49,77);
+insert into t (id,a) values (49,78);
+insert into t (id,a) values (49,79);
+insert into t (id,a) values (49,80);
+insert into t (id,a) values (49,81);
+insert into t (id,a) values (49,82);
+insert into t (id,a) values (49,83);
+insert into t (id,a) values (49,84);
+insert into t (id,a) values (49,85);
+insert into t (id,a) values (49,86);
+insert into t (id,a) values (49,87);
+insert into t (id,a) values (49,88);
+insert into t (id,a) values (49,89);
+insert into t (id,a) values (49,90);
+insert into t (id,a) values (49,91);
+insert into t (id,a) values (49,92);
+insert into t (id,a) values (49,93);
+insert into t (id,a) values (49,94);
+insert into t (id,a) values (49,95);
+insert into t (id,a) values (49,96);
+insert into t (id,a) values (49,97);
+insert into t (id,a) values (49,98);
+insert into t (id,a) values (49,99);
+insert into t (id,a) values (50,0);
+insert into t (id,a) values (50,1);
+insert into t (id,a) values (50,2);
+insert into t (id,a) values (50,3);
+insert into t (id,a) values (50,4);
+insert into t (id,a) values (50,5);
+insert into t (id,a) values (50,6);
+insert into t (id,a) values (50,7);
+insert into t (id,a) values (50,8);
+insert into t (id,a) values (50,9);
+insert into t (id,a) values (50,10);
+insert into t (id,a) values (50,11);
+insert into t (id,a) values (50,12);
+insert into t (id,a) values (50,13);
+insert into t (id,a) values (50,14);
+insert into t (id,a) values (50,15);
+insert into t (id,a) values (50,16);
+insert into t (id,a) values (50,17);
+insert into t (id,a) values (50,18);
+insert into t (id,a) values (50,19);
+insert into t (id,a) values (50,20);
+insert into t (id,a) values (50,21);
+insert into t (id,a) values (50,22);
+insert into t (id,a) values (50,23);
+insert into t (id,a) values (50,24);
+insert into t (id,a) values (50,25);
+insert into t (id,a) values (50,26);
+insert into t (id,a) values (50,27);
+insert into t (id,a) values (50,28);
+insert into t (id,a) values (50,29);
+insert into t (id,a) values (50,30);
+insert into t (id,a) values (50,31);
+insert into t (id,a) values (50,32);
+insert into t (id,a) values (50,33);
+insert into t (id,a) values (50,34);
+insert into t (id,a) values (50,35);
+insert into t (id,a) values (50,36);
+insert into t (id,a) values (50,37);
+insert into t (id,a) values (50,38);
+insert into t (id,a) values (50,39);
+insert into t (id,a) values (50,40);
+insert into t (id,a) values (50,41);
+insert into t (id,a) values (50,42);
+insert into t (id,a) values (50,43);
+insert into t (id,a) values (50,44);
+insert into t (id,a) values (50,45);
+insert into t (id,a) values (50,46);
+insert into t (id,a) values (50,47);
+insert into t (id,a) values (50,48);
+insert into t (id,a) values (50,49);
+insert into t (id,a) values (50,50);
+insert into t (id,a) values (50,51);
+insert into t (id,a) values (50,52);
+insert into t (id,a) values (50,53);
+insert into t (id,a) values (50,54);
+insert into t (id,a) values (50,55);
+insert into t (id,a) values (50,56);
+insert into t (id,a) values (50,57);
+insert into t (id,a) values (50,58);
+insert into t (id,a) values (50,59);
+insert into t (id,a) values (50,60);
+insert into t (id,a) values (50,61);
+insert into t (id,a) values (50,62);
+insert into t (id,a) values (50,63);
+insert into t (id,a) values (50,64);
+insert into t (id,a) values (50,65);
+insert into t (id,a) values (50,66);
+insert into t (id,a) values (50,67);
+insert into t (id,a) values (50,68);
+insert into t (id,a) values (50,69);
+insert into t (id,a) values (50,70);
+insert into t (id,a) values (50,71);
+insert into t (id,a) values (50,72);
+insert into t (id,a) values (50,73);
+insert into t (id,a) values (50,74);
+insert into t (id,a) values (50,75);
+insert into t (id,a) values (50,76);
+insert into t (id,a) values (50,77);
+insert into t (id,a) values (50,78);
+insert into t (id,a) values (50,79);
+insert into t (id,a) values (50,80);
+insert into t (id,a) values (50,81);
+insert into t (id,a) values (50,82);
+insert into t (id,a) values (50,83);
+insert into t (id,a) values (50,84);
+insert into t (id,a) values (50,85);
+insert into t (id,a) values (50,86);
+insert into t (id,a) values (50,87);
+insert into t (id,a) values (50,88);
+insert into t (id,a) values (50,89);
+insert into t (id,a) values (50,90);
+insert into t (id,a) values (50,91);
+insert into t (id,a) values (50,92);
+insert into t (id,a) values (50,93);
+insert into t (id,a) values (50,94);
+insert into t (id,a) values (50,95);
+insert into t (id,a) values (50,96);
+insert into t (id,a) values (50,97);
+insert into t (id,a) values (50,98);
+insert into t (id,a) values (50,99);
+insert into t (id,a) values (51,0);
+insert into t (id,a) values (51,1);
+insert into t (id,a) values (51,2);
+insert into t (id,a) values (51,3);
+insert into t (id,a) values (51,4);
+insert into t (id,a) values (51,5);
+insert into t (id,a) values (51,6);
+insert into t (id,a) values (51,7);
+insert into t (id,a) values (51,8);
+insert into t (id,a) values (51,9);
+insert into t (id,a) values (51,10);
+insert into t (id,a) values (51,11);
+insert into t (id,a) values (51,12);
+insert into t (id,a) values (51,13);
+insert into t (id,a) values (51,14);
+insert into t (id,a) values (51,15);
+insert into t (id,a) values (51,16);
+insert into t (id,a) values (51,17);
+insert into t (id,a) values (51,18);
+insert into t (id,a) values (51,19);
+insert into t (id,a) values (51,20);
+insert into t (id,a) values (51,21);
+insert into t (id,a) values (51,22);
+insert into t (id,a) values (51,23);
+insert into t (id,a) values (51,24);
+insert into t (id,a) values (51,25);
+insert into t (id,a) values (51,26);
+insert into t (id,a) values (51,27);
+insert into t (id,a) values (51,28);
+insert into t (id,a) values (51,29);
+insert into t (id,a) values (51,30);
+insert into t (id,a) values (51,31);
+insert into t (id,a) values (51,32);
+insert into t (id,a) values (51,33);
+insert into t (id,a) values (51,34);
+insert into t (id,a) values (51,35);
+insert into t (id,a) values (51,36);
+insert into t (id,a) values (51,37);
+insert into t (id,a) values (51,38);
+insert into t (id,a) values (51,39);
+insert into t (id,a) values (51,40);
+insert into t (id,a) values (51,41);
+insert into t (id,a) values (51,42);
+insert into t (id,a) values (51,43);
+insert into t (id,a) values (51,44);
+insert into t (id,a) values (51,45);
+insert into t (id,a) values (51,46);
+insert into t (id,a) values (51,47);
+insert into t (id,a) values (51,48);
+insert into t (id,a) values (51,49);
+insert into t (id,a) values (51,50);
+insert into t (id,a) values (51,51);
+insert into t (id,a) values (51,52);
+insert into t (id,a) values (51,53);
+insert into t (id,a) values (51,54);
+insert into t (id,a) values (51,55);
+insert into t (id,a) values (51,56);
+insert into t (id,a) values (51,57);
+insert into t (id,a) values (51,58);
+insert into t (id,a) values (51,59);
+insert into t (id,a) values (51,60);
+insert into t (id,a) values (51,61);
+insert into t (id,a) values (51,62);
+insert into t (id,a) values (51,63);
+insert into t (id,a) values (51,64);
+insert into t (id,a) values (51,65);
+insert into t (id,a) values (51,66);
+insert into t (id,a) values (51,67);
+insert into t (id,a) values (51,68);
+insert into t (id,a) values (51,69);
+insert into t (id,a) values (51,70);
+insert into t (id,a) values (51,71);
+insert into t (id,a) values (51,72);
+insert into t (id,a) values (51,73);
+insert into t (id,a) values (51,74);
+insert into t (id,a) values (51,75);
+insert into t (id,a) values (51,76);
+insert into t (id,a) values (51,77);
+insert into t (id,a) values (51,78);
+insert into t (id,a) values (51,79);
+insert into t (id,a) values (51,80);
+insert into t (id,a) values (51,81);
+insert into t (id,a) values (51,82);
+insert into t (id,a) values (51,83);
+insert into t (id,a) values (51,84);
+insert into t (id,a) values (51,85);
+insert into t (id,a) values (51,86);
+insert into t (id,a) values (51,87);
+insert into t (id,a) values (51,88);
+insert into t (id,a) values (51,89);
+insert into t (id,a) values (51,90);
+insert into t (id,a) values (51,91);
+insert into t (id,a) values (51,92);
+insert into t (id,a) values (51,93);
+insert into t (id,a) values (51,94);
+insert into t (id,a) values (51,95);
+insert into t (id,a) values (51,96);
+insert into t (id,a) values (51,97);
+insert into t (id,a) values (51,98);
+insert into t (id,a) values (51,99);
+insert into t (id,a) values (52,0);
+insert into t (id,a) values (52,1);
+insert into t (id,a) values (52,2);
+insert into t (id,a) values (52,3);
+insert into t (id,a) values (52,4);
+insert into t (id,a) values (52,5);
+insert into t (id,a) values (52,6);
+insert into t (id,a) values (52,7);
+insert into t (id,a) values (52,8);
+insert into t (id,a) values (52,9);
+insert into t (id,a) values (52,10);
+insert into t (id,a) values (52,11);
+insert into t (id,a) values (52,12);
+insert into t (id,a) values (52,13);
+insert into t (id,a) values (52,14);
+insert into t (id,a) values (52,15);
+insert into t (id,a) values (52,16);
+insert into t (id,a) values (52,17);
+insert into t (id,a) values (52,18);
+insert into t (id,a) values (52,19);
+insert into t (id,a) values (52,20);
+insert into t (id,a) values (52,21);
+insert into t (id,a) values (52,22);
+insert into t (id,a) values (52,23);
+insert into t (id,a) values (52,24);
+insert into t (id,a) values (52,25);
+insert into t (id,a) values (52,26);
+insert into t (id,a) values (52,27);
+insert into t (id,a) values (52,28);
+insert into t (id,a) values (52,29);
+insert into t (id,a) values (52,30);
+insert into t (id,a) values (52,31);
+insert into t (id,a) values (52,32);
+insert into t (id,a) values (52,33);
+insert into t (id,a) values (52,34);
+insert into t (id,a) values (52,35);
+insert into t (id,a) values (52,36);
+insert into t (id,a) values (52,37);
+insert into t (id,a) values (52,38);
+insert into t (id,a) values (52,39);
+insert into t (id,a) values (52,40);
+insert into t (id,a) values (52,41);
+insert into t (id,a) values (52,42);
+insert into t (id,a) values (52,43);
+insert into t (id,a) values (52,44);
+insert into t (id,a) values (52,45);
+insert into t (id,a) values (52,46);
+insert into t (id,a) values (52,47);
+insert into t (id,a) values (52,48);
+insert into t (id,a) values (52,49);
+insert into t (id,a) values (52,50);
+insert into t (id,a) values (52,51);
+insert into t (id,a) values (52,52);
+insert into t (id,a) values (52,53);
+insert into t (id,a) values (52,54);
+insert into t (id,a) values (52,55);
+insert into t (id,a) values (52,56);
+insert into t (id,a) values (52,57);
+insert into t (id,a) values (52,58);
+insert into t (id,a) values (52,59);
+insert into t (id,a) values (52,60);
+insert into t (id,a) values (52,61);
+insert into t (id,a) values (52,62);
+insert into t (id,a) values (52,63);
+insert into t (id,a) values (52,64);
+insert into t (id,a) values (52,65);
+insert into t (id,a) values (52,66);
+insert into t (id,a) values (52,67);
+insert into t (id,a) values (52,68);
+insert into t (id,a) values (52,69);
+insert into t (id,a) values (52,70);
+insert into t (id,a) values (52,71);
+insert into t (id,a) values (52,72);
+insert into t (id,a) values (52,73);
+insert into t (id,a) values (52,74);
+insert into t (id,a) values (52,75);
+insert into t (id,a) values (52,76);
+insert into t (id,a) values (52,77);
+insert into t (id,a) values (52,78);
+insert into t (id,a) values (52,79);
+insert into t (id,a) values (52,80);
+insert into t (id,a) values (52,81);
+insert into t (id,a) values (52,82);
+insert into t (id,a) values (52,83);
+insert into t (id,a) values (52,84);
+insert into t (id,a) values (52,85);
+insert into t (id,a) values (52,86);
+insert into t (id,a) values (52,87);
+insert into t (id,a) values (52,88);
+insert into t (id,a) values (52,89);
+insert into t (id,a) values (52,90);
+insert into t (id,a) values (52,91);
+insert into t (id,a) values (52,92);
+insert into t (id,a) values (52,93);
+insert into t (id,a) values (52,94);
+insert into t (id,a) values (52,95);
+insert into t (id,a) values (52,96);
+insert into t (id,a) values (52,97);
+insert into t (id,a) values (52,98);
+insert into t (id,a) values (52,99);
+insert into t (id,a) values (53,0);
+insert into t (id,a) values (53,1);
+insert into t (id,a) values (53,2);
+insert into t (id,a) values (53,3);
+insert into t (id,a) values (53,4);
+insert into t (id,a) values (53,5);
+insert into t (id,a) values (53,6);
+insert into t (id,a) values (53,7);
+insert into t (id,a) values (53,8);
+insert into t (id,a) values (53,9);
+insert into t (id,a) values (53,10);
+insert into t (id,a) values (53,11);
+insert into t (id,a) values (53,12);
+insert into t (id,a) values (53,13);
+insert into t (id,a) values (53,14);
+insert into t (id,a) values (53,15);
+insert into t (id,a) values (53,16);
+insert into t (id,a) values (53,17);
+insert into t (id,a) values (53,18);
+insert into t (id,a) values (53,19);
+insert into t (id,a) values (53,20);
+insert into t (id,a) values (53,21);
+insert into t (id,a) values (53,22);
+insert into t (id,a) values (53,23);
+insert into t (id,a) values (53,24);
+insert into t (id,a) values (53,25);
+insert into t (id,a) values (53,26);
+insert into t (id,a) values (53,27);
+insert into t (id,a) values (53,28);
+insert into t (id,a) values (53,29);
+insert into t (id,a) values (53,30);
+insert into t (id,a) values (53,31);
+insert into t (id,a) values (53,32);
+insert into t (id,a) values (53,33);
+insert into t (id,a) values (53,34);
+insert into t (id,a) values (53,35);
+insert into t (id,a) values (53,36);
+insert into t (id,a) values (53,37);
+insert into t (id,a) values (53,38);
+insert into t (id,a) values (53,39);
+insert into t (id,a) values (53,40);
+insert into t (id,a) values (53,41);
+insert into t (id,a) values (53,42);
+insert into t (id,a) values (53,43);
+insert into t (id,a) values (53,44);
+insert into t (id,a) values (53,45);
+insert into t (id,a) values (53,46);
+insert into t (id,a) values (53,47);
+insert into t (id,a) values (53,48);
+insert into t (id,a) values (53,49);
+insert into t (id,a) values (53,50);
+insert into t (id,a) values (53,51);
+insert into t (id,a) values (53,52);
+insert into t (id,a) values (53,53);
+insert into t (id,a) values (53,54);
+insert into t (id,a) values (53,55);
+insert into t (id,a) values (53,56);
+insert into t (id,a) values (53,57);
+insert into t (id,a) values (53,58);
+insert into t (id,a) values (53,59);
+insert into t (id,a) values (53,60);
+insert into t (id,a) values (53,61);
+insert into t (id,a) values (53,62);
+insert into t (id,a) values (53,63);
+insert into t (id,a) values (53,64);
+insert into t (id,a) values (53,65);
+insert into t (id,a) values (53,66);
+insert into t (id,a) values (53,67);
+insert into t (id,a) values (53,68);
+insert into t (id,a) values (53,69);
+insert into t (id,a) values (53,70);
+insert into t (id,a) values (53,71);
+insert into t (id,a) values (53,72);
+insert into t (id,a) values (53,73);
+insert into t (id,a) values (53,74);
+insert into t (id,a) values (53,75);
+insert into t (id,a) values (53,76);
+insert into t (id,a) values (53,77);
+insert into t (id,a) values (53,78);
+insert into t (id,a) values (53,79);
+insert into t (id,a) values (53,80);
+insert into t (id,a) values (53,81);
+insert into t (id,a) values (53,82);
+insert into t (id,a) values (53,83);
+insert into t (id,a) values (53,84);
+insert into t (id,a) values (53,85);
+insert into t (id,a) values (53,86);
+insert into t (id,a) values (53,87);
+insert into t (id,a) values (53,88);
+insert into t (id,a) values (53,89);
+insert into t (id,a) values (53,90);
+insert into t (id,a) values (53,91);
+insert into t (id,a) values (53,92);
+insert into t (id,a) values (53,93);
+insert into t (id,a) values (53,94);
+insert into t (id,a) values (53,95);
+insert into t (id,a) values (53,96);
+insert into t (id,a) values (53,97);
+insert into t (id,a) values (53,98);
+insert into t (id,a) values (53,99);
+insert into t (id,a) values (54,0);
+insert into t (id,a) values (54,1);
+insert into t (id,a) values (54,2);
+insert into t (id,a) values (54,3);
+insert into t (id,a) values (54,4);
+insert into t (id,a) values (54,5);
+insert into t (id,a) values (54,6);
+insert into t (id,a) values (54,7);
+insert into t (id,a) values (54,8);
+insert into t (id,a) values (54,9);
+insert into t (id,a) values (54,10);
+insert into t (id,a) values (54,11);
+insert into t (id,a) values (54,12);
+insert into t (id,a) values (54,13);
+insert into t (id,a) values (54,14);
+insert into t (id,a) values (54,15);
+insert into t (id,a) values (54,16);
+insert into t (id,a) values (54,17);
+insert into t (id,a) values (54,18);
+insert into t (id,a) values (54,19);
+insert into t (id,a) values (54,20);
+insert into t (id,a) values (54,21);
+insert into t (id,a) values (54,22);
+insert into t (id,a) values (54,23);
+insert into t (id,a) values (54,24);
+insert into t (id,a) values (54,25);
+insert into t (id,a) values (54,26);
+insert into t (id,a) values (54,27);
+insert into t (id,a) values (54,28);
+insert into t (id,a) values (54,29);
+insert into t (id,a) values (54,30);
+insert into t (id,a) values (54,31);
+insert into t (id,a) values (54,32);
+insert into t (id,a) values (54,33);
+insert into t (id,a) values (54,34);
+insert into t (id,a) values (54,35);
+insert into t (id,a) values (54,36);
+insert into t (id,a) values (54,37);
+insert into t (id,a) values (54,38);
+insert into t (id,a) values (54,39);
+insert into t (id,a) values (54,40);
+insert into t (id,a) values (54,41);
+insert into t (id,a) values (54,42);
+insert into t (id,a) values (54,43);
+insert into t (id,a) values (54,44);
+insert into t (id,a) values (54,45);
+insert into t (id,a) values (54,46);
+insert into t (id,a) values (54,47);
+insert into t (id,a) values (54,48);
+insert into t (id,a) values (54,49);
+insert into t (id,a) values (54,50);
+insert into t (id,a) values (54,51);
+insert into t (id,a) values (54,52);
+insert into t (id,a) values (54,53);
+insert into t (id,a) values (54,54);
+insert into t (id,a) values (54,55);
+insert into t (id,a) values (54,56);
+insert into t (id,a) values (54,57);
+insert into t (id,a) values (54,58);
+insert into t (id,a) values (54,59);
+insert into t (id,a) values (54,60);
+insert into t (id,a) values (54,61);
+insert into t (id,a) values (54,62);
+insert into t (id,a) values (54,63);
+insert into t (id,a) values (54,64);
+insert into t (id,a) values (54,65);
+insert into t (id,a) values (54,66);
+insert into t (id,a) values (54,67);
+insert into t (id,a) values (54,68);
+insert into t (id,a) values (54,69);
+insert into t (id,a) values (54,70);
+insert into t (id,a) values (54,71);
+insert into t (id,a) values (54,72);
+insert into t (id,a) values (54,73);
+insert into t (id,a) values (54,74);
+insert into t (id,a) values (54,75);
+insert into t (id,a) values (54,76);
+insert into t (id,a) values (54,77);
+insert into t (id,a) values (54,78);
+insert into t (id,a) values (54,79);
+insert into t (id,a) values (54,80);
+insert into t (id,a) values (54,81);
+insert into t (id,a) values (54,82);
+insert into t (id,a) values (54,83);
+insert into t (id,a) values (54,84);
+insert into t (id,a) values (54,85);
+insert into t (id,a) values (54,86);
+insert into t (id,a) values (54,87);
+insert into t (id,a) values (54,88);
+insert into t (id,a) values (54,89);
+insert into t (id,a) values (54,90);
+insert into t (id,a) values (54,91);
+insert into t (id,a) values (54,92);
+insert into t (id,a) values (54,93);
+insert into t (id,a) values (54,94);
+insert into t (id,a) values (54,95);
+insert into t (id,a) values (54,96);
+insert into t (id,a) values (54,97);
+insert into t (id,a) values (54,98);
+insert into t (id,a) values (54,99);
+insert into t (id,a) values (55,0);
+insert into t (id,a) values (55,1);
+insert into t (id,a) values (55,2);
+insert into t (id,a) values (55,3);
+insert into t (id,a) values (55,4);
+insert into t (id,a) values (55,5);
+insert into t (id,a) values (55,6);
+insert into t (id,a) values (55,7);
+insert into t (id,a) values (55,8);
+insert into t (id,a) values (55,9);
+insert into t (id,a) values (55,10);
+insert into t (id,a) values (55,11);
+insert into t (id,a) values (55,12);
+insert into t (id,a) values (55,13);
+insert into t (id,a) values (55,14);
+insert into t (id,a) values (55,15);
+insert into t (id,a) values (55,16);
+insert into t (id,a) values (55,17);
+insert into t (id,a) values (55,18);
+insert into t (id,a) values (55,19);
+insert into t (id,a) values (55,20);
+insert into t (id,a) values (55,21);
+insert into t (id,a) values (55,22);
+insert into t (id,a) values (55,23);
+insert into t (id,a) values (55,24);
+insert into t (id,a) values (55,25);
+insert into t (id,a) values (55,26);
+insert into t (id,a) values (55,27);
+insert into t (id,a) values (55,28);
+insert into t (id,a) values (55,29);
+insert into t (id,a) values (55,30);
+insert into t (id,a) values (55,31);
+insert into t (id,a) values (55,32);
+insert into t (id,a) values (55,33);
+insert into t (id,a) values (55,34);
+insert into t (id,a) values (55,35);
+insert into t (id,a) values (55,36);
+insert into t (id,a) values (55,37);
+insert into t (id,a) values (55,38);
+insert into t (id,a) values (55,39);
+insert into t (id,a) values (55,40);
+insert into t (id,a) values (55,41);
+insert into t (id,a) values (55,42);
+insert into t (id,a) values (55,43);
+insert into t (id,a) values (55,44);
+insert into t (id,a) values (55,45);
+insert into t (id,a) values (55,46);
+insert into t (id,a) values (55,47);
+insert into t (id,a) values (55,48);
+insert into t (id,a) values (55,49);
+insert into t (id,a) values (55,50);
+insert into t (id,a) values (55,51);
+insert into t (id,a) values (55,52);
+insert into t (id,a) values (55,53);
+insert into t (id,a) values (55,54);
+insert into t (id,a) values (55,55);
+insert into t (id,a) values (55,56);
+insert into t (id,a) values (55,57);
+insert into t (id,a) values (55,58);
+insert into t (id,a) values (55,59);
+insert into t (id,a) values (55,60);
+insert into t (id,a) values (55,61);
+insert into t (id,a) values (55,62);
+insert into t (id,a) values (55,63);
+insert into t (id,a) values (55,64);
+insert into t (id,a) values (55,65);
+insert into t (id,a) values (55,66);
+insert into t (id,a) values (55,67);
+insert into t (id,a) values (55,68);
+insert into t (id,a) values (55,69);
+insert into t (id,a) values (55,70);
+insert into t (id,a) values (55,71);
+insert into t (id,a) values (55,72);
+insert into t (id,a) values (55,73);
+insert into t (id,a) values (55,74);
+insert into t (id,a) values (55,75);
+insert into t (id,a) values (55,76);
+insert into t (id,a) values (55,77);
+insert into t (id,a) values (55,78);
+insert into t (id,a) values (55,79);
+insert into t (id,a) values (55,80);
+insert into t (id,a) values (55,81);
+insert into t (id,a) values (55,82);
+insert into t (id,a) values (55,83);
+insert into t (id,a) values (55,84);
+insert into t (id,a) values (55,85);
+insert into t (id,a) values (55,86);
+insert into t (id,a) values (55,87);
+insert into t (id,a) values (55,88);
+insert into t (id,a) values (55,89);
+insert into t (id,a) values (55,90);
+insert into t (id,a) values (55,91);
+insert into t (id,a) values (55,92);
+insert into t (id,a) values (55,93);
+insert into t (id,a) values (55,94);
+insert into t (id,a) values (55,95);
+insert into t (id,a) values (55,96);
+insert into t (id,a) values (55,97);
+insert into t (id,a) values (55,98);
+insert into t (id,a) values (55,99);
+insert into t (id,a) values (56,0);
+insert into t (id,a) values (56,1);
+insert into t (id,a) values (56,2);
+insert into t (id,a) values (56,3);
+insert into t (id,a) values (56,4);
+insert into t (id,a) values (56,5);
+insert into t (id,a) values (56,6);
+insert into t (id,a) values (56,7);
+insert into t (id,a) values (56,8);
+insert into t (id,a) values (56,9);
+insert into t (id,a) values (56,10);
+insert into t (id,a) values (56,11);
+insert into t (id,a) values (56,12);
+insert into t (id,a) values (56,13);
+insert into t (id,a) values (56,14);
+insert into t (id,a) values (56,15);
+insert into t (id,a) values (56,16);
+insert into t (id,a) values (56,17);
+insert into t (id,a) values (56,18);
+insert into t (id,a) values (56,19);
+insert into t (id,a) values (56,20);
+insert into t (id,a) values (56,21);
+insert into t (id,a) values (56,22);
+insert into t (id,a) values (56,23);
+insert into t (id,a) values (56,24);
+insert into t (id,a) values (56,25);
+insert into t (id,a) values (56,26);
+insert into t (id,a) values (56,27);
+insert into t (id,a) values (56,28);
+insert into t (id,a) values (56,29);
+insert into t (id,a) values (56,30);
+insert into t (id,a) values (56,31);
+insert into t (id,a) values (56,32);
+insert into t (id,a) values (56,33);
+insert into t (id,a) values (56,34);
+insert into t (id,a) values (56,35);
+insert into t (id,a) values (56,36);
+insert into t (id,a) values (56,37);
+insert into t (id,a) values (56,38);
+insert into t (id,a) values (56,39);
+insert into t (id,a) values (56,40);
+insert into t (id,a) values (56,41);
+insert into t (id,a) values (56,42);
+insert into t (id,a) values (56,43);
+insert into t (id,a) values (56,44);
+insert into t (id,a) values (56,45);
+insert into t (id,a) values (56,46);
+insert into t (id,a) values (56,47);
+insert into t (id,a) values (56,48);
+insert into t (id,a) values (56,49);
+insert into t (id,a) values (56,50);
+insert into t (id,a) values (56,51);
+insert into t (id,a) values (56,52);
+insert into t (id,a) values (56,53);
+insert into t (id,a) values (56,54);
+insert into t (id,a) values (56,55);
+insert into t (id,a) values (56,56);
+insert into t (id,a) values (56,57);
+insert into t (id,a) values (56,58);
+insert into t (id,a) values (56,59);
+insert into t (id,a) values (56,60);
+insert into t (id,a) values (56,61);
+insert into t (id,a) values (56,62);
+insert into t (id,a) values (56,63);
+insert into t (id,a) values (56,64);
+insert into t (id,a) values (56,65);
+insert into t (id,a) values (56,66);
+insert into t (id,a) values (56,67);
+insert into t (id,a) values (56,68);
+insert into t (id,a) values (56,69);
+insert into t (id,a) values (56,70);
+insert into t (id,a) values (56,71);
+insert into t (id,a) values (56,72);
+insert into t (id,a) values (56,73);
+insert into t (id,a) values (56,74);
+insert into t (id,a) values (56,75);
+insert into t (id,a) values (56,76);
+insert into t (id,a) values (56,77);
+insert into t (id,a) values (56,78);
+insert into t (id,a) values (56,79);
+insert into t (id,a) values (56,80);
+insert into t (id,a) values (56,81);
+insert into t (id,a) values (56,82);
+insert into t (id,a) values (56,83);
+insert into t (id,a) values (56,84);
+insert into t (id,a) values (56,85);
+insert into t (id,a) values (56,86);
+insert into t (id,a) values (56,87);
+insert into t (id,a) values (56,88);
+insert into t (id,a) values (56,89);
+insert into t (id,a) values (56,90);
+insert into t (id,a) values (56,91);
+insert into t (id,a) values (56,92);
+insert into t (id,a) values (56,93);
+insert into t (id,a) values (56,94);
+insert into t (id,a) values (56,95);
+insert into t (id,a) values (56,96);
+insert into t (id,a) values (56,97);
+insert into t (id,a) values (56,98);
+insert into t (id,a) values (56,99);
+insert into t (id,a) values (57,0);
+insert into t (id,a) values (57,1);
+insert into t (id,a) values (57,2);
+insert into t (id,a) values (57,3);
+insert into t (id,a) values (57,4);
+insert into t (id,a) values (57,5);
+insert into t (id,a) values (57,6);
+insert into t (id,a) values (57,7);
+insert into t (id,a) values (57,8);
+insert into t (id,a) values (57,9);
+insert into t (id,a) values (57,10);
+insert into t (id,a) values (57,11);
+insert into t (id,a) values (57,12);
+insert into t (id,a) values (57,13);
+insert into t (id,a) values (57,14);
+insert into t (id,a) values (57,15);
+insert into t (id,a) values (57,16);
+insert into t (id,a) values (57,17);
+insert into t (id,a) values (57,18);
+insert into t (id,a) values (57,19);
+insert into t (id,a) values (57,20);
+insert into t (id,a) values (57,21);
+insert into t (id,a) values (57,22);
+insert into t (id,a) values (57,23);
+insert into t (id,a) values (57,24);
+insert into t (id,a) values (57,25);
+insert into t (id,a) values (57,26);
+insert into t (id,a) values (57,27);
+insert into t (id,a) values (57,28);
+insert into t (id,a) values (57,29);
+insert into t (id,a) values (57,30);
+insert into t (id,a) values (57,31);
+insert into t (id,a) values (57,32);
+insert into t (id,a) values (57,33);
+insert into t (id,a) values (57,34);
+insert into t (id,a) values (57,35);
+insert into t (id,a) values (57,36);
+insert into t (id,a) values (57,37);
+insert into t (id,a) values (57,38);
+insert into t (id,a) values (57,39);
+insert into t (id,a) values (57,40);
+insert into t (id,a) values (57,41);
+insert into t (id,a) values (57,42);
+insert into t (id,a) values (57,43);
+insert into t (id,a) values (57,44);
+insert into t (id,a) values (57,45);
+insert into t (id,a) values (57,46);
+insert into t (id,a) values (57,47);
+insert into t (id,a) values (57,48);
+insert into t (id,a) values (57,49);
+insert into t (id,a) values (57,50);
+insert into t (id,a) values (57,51);
+insert into t (id,a) values (57,52);
+insert into t (id,a) values (57,53);
+insert into t (id,a) values (57,54);
+insert into t (id,a) values (57,55);
+insert into t (id,a) values (57,56);
+insert into t (id,a) values (57,57);
+insert into t (id,a) values (57,58);
+insert into t (id,a) values (57,59);
+insert into t (id,a) values (57,60);
+insert into t (id,a) values (57,61);
+insert into t (id,a) values (57,62);
+insert into t (id,a) values (57,63);
+insert into t (id,a) values (57,64);
+insert into t (id,a) values (57,65);
+insert into t (id,a) values (57,66);
+insert into t (id,a) values (57,67);
+insert into t (id,a) values (57,68);
+insert into t (id,a) values (57,69);
+insert into t (id,a) values (57,70);
+insert into t (id,a) values (57,71);
+insert into t (id,a) values (57,72);
+insert into t (id,a) values (57,73);
+insert into t (id,a) values (57,74);
+insert into t (id,a) values (57,75);
+insert into t (id,a) values (57,76);
+insert into t (id,a) values (57,77);
+insert into t (id,a) values (57,78);
+insert into t (id,a) values (57,79);
+insert into t (id,a) values (57,80);
+insert into t (id,a) values (57,81);
+insert into t (id,a) values (57,82);
+insert into t (id,a) values (57,83);
+insert into t (id,a) values (57,84);
+insert into t (id,a) values (57,85);
+insert into t (id,a) values (57,86);
+insert into t (id,a) values (57,87);
+insert into t (id,a) values (57,88);
+insert into t (id,a) values (57,89);
+insert into t (id,a) values (57,90);
+insert into t (id,a) values (57,91);
+insert into t (id,a) values (57,92);
+insert into t (id,a) values (57,93);
+insert into t (id,a) values (57,94);
+insert into t (id,a) values (57,95);
+insert into t (id,a) values (57,96);
+insert into t (id,a) values (57,97);
+insert into t (id,a) values (57,98);
+insert into t (id,a) values (57,99);
+insert into t (id,a) values (58,0);
+insert into t (id,a) values (58,1);
+insert into t (id,a) values (58,2);
+insert into t (id,a) values (58,3);
+insert into t (id,a) values (58,4);
+insert into t (id,a) values (58,5);
+insert into t (id,a) values (58,6);
+insert into t (id,a) values (58,7);
+insert into t (id,a) values (58,8);
+insert into t (id,a) values (58,9);
+insert into t (id,a) values (58,10);
+insert into t (id,a) values (58,11);
+insert into t (id,a) values (58,12);
+insert into t (id,a) values (58,13);
+insert into t (id,a) values (58,14);
+insert into t (id,a) values (58,15);
+insert into t (id,a) values (58,16);
+insert into t (id,a) values (58,17);
+insert into t (id,a) values (58,18);
+insert into t (id,a) values (58,19);
+insert into t (id,a) values (58,20);
+insert into t (id,a) values (58,21);
+insert into t (id,a) values (58,22);
+insert into t (id,a) values (58,23);
+insert into t (id,a) values (58,24);
+insert into t (id,a) values (58,25);
+insert into t (id,a) values (58,26);
+insert into t (id,a) values (58,27);
+insert into t (id,a) values (58,28);
+insert into t (id,a) values (58,29);
+insert into t (id,a) values (58,30);
+insert into t (id,a) values (58,31);
+insert into t (id,a) values (58,32);
+insert into t (id,a) values (58,33);
+insert into t (id,a) values (58,34);
+insert into t (id,a) values (58,35);
+insert into t (id,a) values (58,36);
+insert into t (id,a) values (58,37);
+insert into t (id,a) values (58,38);
+insert into t (id,a) values (58,39);
+insert into t (id,a) values (58,40);
+insert into t (id,a) values (58,41);
+insert into t (id,a) values (58,42);
+insert into t (id,a) values (58,43);
+insert into t (id,a) values (58,44);
+insert into t (id,a) values (58,45);
+insert into t (id,a) values (58,46);
+insert into t (id,a) values (58,47);
+insert into t (id,a) values (58,48);
+insert into t (id,a) values (58,49);
+insert into t (id,a) values (58,50);
+insert into t (id,a) values (58,51);
+insert into t (id,a) values (58,52);
+insert into t (id,a) values (58,53);
+insert into t (id,a) values (58,54);
+insert into t (id,a) values (58,55);
+insert into t (id,a) values (58,56);
+insert into t (id,a) values (58,57);
+insert into t (id,a) values (58,58);
+insert into t (id,a) values (58,59);
+insert into t (id,a) values (58,60);
+insert into t (id,a) values (58,61);
+insert into t (id,a) values (58,62);
+insert into t (id,a) values (58,63);
+insert into t (id,a) values (58,64);
+insert into t (id,a) values (58,65);
+insert into t (id,a) values (58,66);
+insert into t (id,a) values (58,67);
+insert into t (id,a) values (58,68);
+insert into t (id,a) values (58,69);
+insert into t (id,a) values (58,70);
+insert into t (id,a) values (58,71);
+insert into t (id,a) values (58,72);
+insert into t (id,a) values (58,73);
+insert into t (id,a) values (58,74);
+insert into t (id,a) values (58,75);
+insert into t (id,a) values (58,76);
+insert into t (id,a) values (58,77);
+insert into t (id,a) values (58,78);
+insert into t (id,a) values (58,79);
+insert into t (id,a) values (58,80);
+insert into t (id,a) values (58,81);
+insert into t (id,a) values (58,82);
+insert into t (id,a) values (58,83);
+insert into t (id,a) values (58,84);
+insert into t (id,a) values (58,85);
+insert into t (id,a) values (58,86);
+insert into t (id,a) values (58,87);
+insert into t (id,a) values (58,88);
+insert into t (id,a) values (58,89);
+insert into t (id,a) values (58,90);
+insert into t (id,a) values (58,91);
+insert into t (id,a) values (58,92);
+insert into t (id,a) values (58,93);
+insert into t (id,a) values (58,94);
+insert into t (id,a) values (58,95);
+insert into t (id,a) values (58,96);
+insert into t (id,a) values (58,97);
+insert into t (id,a) values (58,98);
+insert into t (id,a) values (58,99);
+insert into t (id,a) values (59,0);
+insert into t (id,a) values (59,1);
+insert into t (id,a) values (59,2);
+insert into t (id,a) values (59,3);
+insert into t (id,a) values (59,4);
+insert into t (id,a) values (59,5);
+insert into t (id,a) values (59,6);
+insert into t (id,a) values (59,7);
+insert into t (id,a) values (59,8);
+insert into t (id,a) values (59,9);
+insert into t (id,a) values (59,10);
+insert into t (id,a) values (59,11);
+insert into t (id,a) values (59,12);
+insert into t (id,a) values (59,13);
+insert into t (id,a) values (59,14);
+insert into t (id,a) values (59,15);
+insert into t (id,a) values (59,16);
+insert into t (id,a) values (59,17);
+insert into t (id,a) values (59,18);
+insert into t (id,a) values (59,19);
+insert into t (id,a) values (59,20);
+insert into t (id,a) values (59,21);
+insert into t (id,a) values (59,22);
+insert into t (id,a) values (59,23);
+insert into t (id,a) values (59,24);
+insert into t (id,a) values (59,25);
+insert into t (id,a) values (59,26);
+insert into t (id,a) values (59,27);
+insert into t (id,a) values (59,28);
+insert into t (id,a) values (59,29);
+insert into t (id,a) values (59,30);
+insert into t (id,a) values (59,31);
+insert into t (id,a) values (59,32);
+insert into t (id,a) values (59,33);
+insert into t (id,a) values (59,34);
+insert into t (id,a) values (59,35);
+insert into t (id,a) values (59,36);
+insert into t (id,a) values (59,37);
+insert into t (id,a) values (59,38);
+insert into t (id,a) values (59,39);
+insert into t (id,a) values (59,40);
+insert into t (id,a) values (59,41);
+insert into t (id,a) values (59,42);
+insert into t (id,a) values (59,43);
+insert into t (id,a) values (59,44);
+insert into t (id,a) values (59,45);
+insert into t (id,a) values (59,46);
+insert into t (id,a) values (59,47);
+insert into t (id,a) values (59,48);
+insert into t (id,a) values (59,49);
+insert into t (id,a) values (59,50);
+insert into t (id,a) values (59,51);
+insert into t (id,a) values (59,52);
+insert into t (id,a) values (59,53);
+insert into t (id,a) values (59,54);
+insert into t (id,a) values (59,55);
+insert into t (id,a) values (59,56);
+insert into t (id,a) values (59,57);
+insert into t (id,a) values (59,58);
+insert into t (id,a) values (59,59);
+insert into t (id,a) values (59,60);
+insert into t (id,a) values (59,61);
+insert into t (id,a) values (59,62);
+insert into t (id,a) values (59,63);
+insert into t (id,a) values (59,64);
+insert into t (id,a) values (59,65);
+insert into t (id,a) values (59,66);
+insert into t (id,a) values (59,67);
+insert into t (id,a) values (59,68);
+insert into t (id,a) values (59,69);
+insert into t (id,a) values (59,70);
+insert into t (id,a) values (59,71);
+insert into t (id,a) values (59,72);
+insert into t (id,a) values (59,73);
+insert into t (id,a) values (59,74);
+insert into t (id,a) values (59,75);
+insert into t (id,a) values (59,76);
+insert into t (id,a) values (59,77);
+insert into t (id,a) values (59,78);
+insert into t (id,a) values (59,79);
+insert into t (id,a) values (59,80);
+insert into t (id,a) values (59,81);
+insert into t (id,a) values (59,82);
+insert into t (id,a) values (59,83);
+insert into t (id,a) values (59,84);
+insert into t (id,a) values (59,85);
+insert into t (id,a) values (59,86);
+insert into t (id,a) values (59,87);
+insert into t (id,a) values (59,88);
+insert into t (id,a) values (59,89);
+insert into t (id,a) values (59,90);
+insert into t (id,a) values (59,91);
+insert into t (id,a) values (59,92);
+insert into t (id,a) values (59,93);
+insert into t (id,a) values (59,94);
+insert into t (id,a) values (59,95);
+insert into t (id,a) values (59,96);
+insert into t (id,a) values (59,97);
+insert into t (id,a) values (59,98);
+insert into t (id,a) values (59,99);
+insert into t (id,a) values (60,0);
+insert into t (id,a) values (60,1);
+insert into t (id,a) values (60,2);
+insert into t (id,a) values (60,3);
+insert into t (id,a) values (60,4);
+insert into t (id,a) values (60,5);
+insert into t (id,a) values (60,6);
+insert into t (id,a) values (60,7);
+insert into t (id,a) values (60,8);
+insert into t (id,a) values (60,9);
+insert into t (id,a) values (60,10);
+insert into t (id,a) values (60,11);
+insert into t (id,a) values (60,12);
+insert into t (id,a) values (60,13);
+insert into t (id,a) values (60,14);
+insert into t (id,a) values (60,15);
+insert into t (id,a) values (60,16);
+insert into t (id,a) values (60,17);
+insert into t (id,a) values (60,18);
+insert into t (id,a) values (60,19);
+insert into t (id,a) values (60,20);
+insert into t (id,a) values (60,21);
+insert into t (id,a) values (60,22);
+insert into t (id,a) values (60,23);
+insert into t (id,a) values (60,24);
+insert into t (id,a) values (60,25);
+insert into t (id,a) values (60,26);
+insert into t (id,a) values (60,27);
+insert into t (id,a) values (60,28);
+insert into t (id,a) values (60,29);
+insert into t (id,a) values (60,30);
+insert into t (id,a) values (60,31);
+insert into t (id,a) values (60,32);
+insert into t (id,a) values (60,33);
+insert into t (id,a) values (60,34);
+insert into t (id,a) values (60,35);
+insert into t (id,a) values (60,36);
+insert into t (id,a) values (60,37);
+insert into t (id,a) values (60,38);
+insert into t (id,a) values (60,39);
+insert into t (id,a) values (60,40);
+insert into t (id,a) values (60,41);
+insert into t (id,a) values (60,42);
+insert into t (id,a) values (60,43);
+insert into t (id,a) values (60,44);
+insert into t (id,a) values (60,45);
+insert into t (id,a) values (60,46);
+insert into t (id,a) values (60,47);
+insert into t (id,a) values (60,48);
+insert into t (id,a) values (60,49);
+insert into t (id,a) values (60,50);
+insert into t (id,a) values (60,51);
+insert into t (id,a) values (60,52);
+insert into t (id,a) values (60,53);
+insert into t (id,a) values (60,54);
+insert into t (id,a) values (60,55);
+insert into t (id,a) values (60,56);
+insert into t (id,a) values (60,57);
+insert into t (id,a) values (60,58);
+insert into t (id,a) values (60,59);
+insert into t (id,a) values (60,60);
+insert into t (id,a) values (60,61);
+insert into t (id,a) values (60,62);
+insert into t (id,a) values (60,63);
+insert into t (id,a) values (60,64);
+insert into t (id,a) values (60,65);
+insert into t (id,a) values (60,66);
+insert into t (id,a) values (60,67);
+insert into t (id,a) values (60,68);
+insert into t (id,a) values (60,69);
+insert into t (id,a) values (60,70);
+insert into t (id,a) values (60,71);
+insert into t (id,a) values (60,72);
+insert into t (id,a) values (60,73);
+insert into t (id,a) values (60,74);
+insert into t (id,a) values (60,75);
+insert into t (id,a) values (60,76);
+insert into t (id,a) values (60,77);
+insert into t (id,a) values (60,78);
+insert into t (id,a) values (60,79);
+insert into t (id,a) values (60,80);
+insert into t (id,a) values (60,81);
+insert into t (id,a) values (60,82);
+insert into t (id,a) values (60,83);
+insert into t (id,a) values (60,84);
+insert into t (id,a) values (60,85);
+insert into t (id,a) values (60,86);
+insert into t (id,a) values (60,87);
+insert into t (id,a) values (60,88);
+insert into t (id,a) values (60,89);
+insert into t (id,a) values (60,90);
+insert into t (id,a) values (60,91);
+insert into t (id,a) values (60,92);
+insert into t (id,a) values (60,93);
+insert into t (id,a) values (60,94);
+insert into t (id,a) values (60,95);
+insert into t (id,a) values (60,96);
+insert into t (id,a) values (60,97);
+insert into t (id,a) values (60,98);
+insert into t (id,a) values (60,99);
+insert into t (id,a) values (61,0);
+insert into t (id,a) values (61,1);
+insert into t (id,a) values (61,2);
+insert into t (id,a) values (61,3);
+insert into t (id,a) values (61,4);
+insert into t (id,a) values (61,5);
+insert into t (id,a) values (61,6);
+insert into t (id,a) values (61,7);
+insert into t (id,a) values (61,8);
+insert into t (id,a) values (61,9);
+insert into t (id,a) values (61,10);
+insert into t (id,a) values (61,11);
+insert into t (id,a) values (61,12);
+insert into t (id,a) values (61,13);
+insert into t (id,a) values (61,14);
+insert into t (id,a) values (61,15);
+insert into t (id,a) values (61,16);
+insert into t (id,a) values (61,17);
+insert into t (id,a) values (61,18);
+insert into t (id,a) values (61,19);
+insert into t (id,a) values (61,20);
+insert into t (id,a) values (61,21);
+insert into t (id,a) values (61,22);
+insert into t (id,a) values (61,23);
+insert into t (id,a) values (61,24);
+insert into t (id,a) values (61,25);
+insert into t (id,a) values (61,26);
+insert into t (id,a) values (61,27);
+insert into t (id,a) values (61,28);
+insert into t (id,a) values (61,29);
+insert into t (id,a) values (61,30);
+insert into t (id,a) values (61,31);
+insert into t (id,a) values (61,32);
+insert into t (id,a) values (61,33);
+insert into t (id,a) values (61,34);
+insert into t (id,a) values (61,35);
+insert into t (id,a) values (61,36);
+insert into t (id,a) values (61,37);
+insert into t (id,a) values (61,38);
+insert into t (id,a) values (61,39);
+insert into t (id,a) values (61,40);
+insert into t (id,a) values (61,41);
+insert into t (id,a) values (61,42);
+insert into t (id,a) values (61,43);
+insert into t (id,a) values (61,44);
+insert into t (id,a) values (61,45);
+insert into t (id,a) values (61,46);
+insert into t (id,a) values (61,47);
+insert into t (id,a) values (61,48);
+insert into t (id,a) values (61,49);
+insert into t (id,a) values (61,50);
+insert into t (id,a) values (61,51);
+insert into t (id,a) values (61,52);
+insert into t (id,a) values (61,53);
+insert into t (id,a) values (61,54);
+insert into t (id,a) values (61,55);
+insert into t (id,a) values (61,56);
+insert into t (id,a) values (61,57);
+insert into t (id,a) values (61,58);
+insert into t (id,a) values (61,59);
+insert into t (id,a) values (61,60);
+insert into t (id,a) values (61,61);
+insert into t (id,a) values (61,62);
+insert into t (id,a) values (61,63);
+insert into t (id,a) values (61,64);
+insert into t (id,a) values (61,65);
+insert into t (id,a) values (61,66);
+insert into t (id,a) values (61,67);
+insert into t (id,a) values (61,68);
+insert into t (id,a) values (61,69);
+insert into t (id,a) values (61,70);
+insert into t (id,a) values (61,71);
+insert into t (id,a) values (61,72);
+insert into t (id,a) values (61,73);
+insert into t (id,a) values (61,74);
+insert into t (id,a) values (61,75);
+insert into t (id,a) values (61,76);
+insert into t (id,a) values (61,77);
+insert into t (id,a) values (61,78);
+insert into t (id,a) values (61,79);
+insert into t (id,a) values (61,80);
+insert into t (id,a) values (61,81);
+insert into t (id,a) values (61,82);
+insert into t (id,a) values (61,83);
+insert into t (id,a) values (61,84);
+insert into t (id,a) values (61,85);
+insert into t (id,a) values (61,86);
+insert into t (id,a) values (61,87);
+insert into t (id,a) values (61,88);
+insert into t (id,a) values (61,89);
+insert into t (id,a) values (61,90);
+insert into t (id,a) values (61,91);
+insert into t (id,a) values (61,92);
+insert into t (id,a) values (61,93);
+insert into t (id,a) values (61,94);
+insert into t (id,a) values (61,95);
+insert into t (id,a) values (61,96);
+insert into t (id,a) values (61,97);
+insert into t (id,a) values (61,98);
+insert into t (id,a) values (61,99);
+insert into t (id,a) values (62,0);
+insert into t (id,a) values (62,1);
+insert into t (id,a) values (62,2);
+insert into t (id,a) values (62,3);
+insert into t (id,a) values (62,4);
+insert into t (id,a) values (62,5);
+insert into t (id,a) values (62,6);
+insert into t (id,a) values (62,7);
+insert into t (id,a) values (62,8);
+insert into t (id,a) values (62,9);
+insert into t (id,a) values (62,10);
+insert into t (id,a) values (62,11);
+insert into t (id,a) values (62,12);
+insert into t (id,a) values (62,13);
+insert into t (id,a) values (62,14);
+insert into t (id,a) values (62,15);
+insert into t (id,a) values (62,16);
+insert into t (id,a) values (62,17);
+insert into t (id,a) values (62,18);
+insert into t (id,a) values (62,19);
+insert into t (id,a) values (62,20);
+insert into t (id,a) values (62,21);
+insert into t (id,a) values (62,22);
+insert into t (id,a) values (62,23);
+insert into t (id,a) values (62,24);
+insert into t (id,a) values (62,25);
+insert into t (id,a) values (62,26);
+insert into t (id,a) values (62,27);
+insert into t (id,a) values (62,28);
+insert into t (id,a) values (62,29);
+insert into t (id,a) values (62,30);
+insert into t (id,a) values (62,31);
+insert into t (id,a) values (62,32);
+insert into t (id,a) values (62,33);
+insert into t (id,a) values (62,34);
+insert into t (id,a) values (62,35);
+insert into t (id,a) values (62,36);
+insert into t (id,a) values (62,37);
+insert into t (id,a) values (62,38);
+insert into t (id,a) values (62,39);
+insert into t (id,a) values (62,40);
+insert into t (id,a) values (62,41);
+insert into t (id,a) values (62,42);
+insert into t (id,a) values (62,43);
+insert into t (id,a) values (62,44);
+insert into t (id,a) values (62,45);
+insert into t (id,a) values (62,46);
+insert into t (id,a) values (62,47);
+insert into t (id,a) values (62,48);
+insert into t (id,a) values (62,49);
+insert into t (id,a) values (62,50);
+insert into t (id,a) values (62,51);
+insert into t (id,a) values (62,52);
+insert into t (id,a) values (62,53);
+insert into t (id,a) values (62,54);
+insert into t (id,a) values (62,55);
+insert into t (id,a) values (62,56);
+insert into t (id,a) values (62,57);
+insert into t (id,a) values (62,58);
+insert into t (id,a) values (62,59);
+insert into t (id,a) values (62,60);
+insert into t (id,a) values (62,61);
+insert into t (id,a) values (62,62);
+insert into t (id,a) values (62,63);
+insert into t (id,a) values (62,64);
+insert into t (id,a) values (62,65);
+insert into t (id,a) values (62,66);
+insert into t (id,a) values (62,67);
+insert into t (id,a) values (62,68);
+insert into t (id,a) values (62,69);
+insert into t (id,a) values (62,70);
+insert into t (id,a) values (62,71);
+insert into t (id,a) values (62,72);
+insert into t (id,a) values (62,73);
+insert into t (id,a) values (62,74);
+insert into t (id,a) values (62,75);
+insert into t (id,a) values (62,76);
+insert into t (id,a) values (62,77);
+insert into t (id,a) values (62,78);
+insert into t (id,a) values (62,79);
+insert into t (id,a) values (62,80);
+insert into t (id,a) values (62,81);
+insert into t (id,a) values (62,82);
+insert into t (id,a) values (62,83);
+insert into t (id,a) values (62,84);
+insert into t (id,a) values (62,85);
+insert into t (id,a) values (62,86);
+insert into t (id,a) values (62,87);
+insert into t (id,a) values (62,88);
+insert into t (id,a) values (62,89);
+insert into t (id,a) values (62,90);
+insert into t (id,a) values (62,91);
+insert into t (id,a) values (62,92);
+insert into t (id,a) values (62,93);
+insert into t (id,a) values (62,94);
+insert into t (id,a) values (62,95);
+insert into t (id,a) values (62,96);
+insert into t (id,a) values (62,97);
+insert into t (id,a) values (62,98);
+insert into t (id,a) values (62,99);
+insert into t (id,a) values (63,0);
+insert into t (id,a) values (63,1);
+insert into t (id,a) values (63,2);
+insert into t (id,a) values (63,3);
+insert into t (id,a) values (63,4);
+insert into t (id,a) values (63,5);
+insert into t (id,a) values (63,6);
+insert into t (id,a) values (63,7);
+insert into t (id,a) values (63,8);
+insert into t (id,a) values (63,9);
+insert into t (id,a) values (63,10);
+insert into t (id,a) values (63,11);
+insert into t (id,a) values (63,12);
+insert into t (id,a) values (63,13);
+insert into t (id,a) values (63,14);
+insert into t (id,a) values (63,15);
+insert into t (id,a) values (63,16);
+insert into t (id,a) values (63,17);
+insert into t (id,a) values (63,18);
+insert into t (id,a) values (63,19);
+insert into t (id,a) values (63,20);
+insert into t (id,a) values (63,21);
+insert into t (id,a) values (63,22);
+insert into t (id,a) values (63,23);
+insert into t (id,a) values (63,24);
+insert into t (id,a) values (63,25);
+insert into t (id,a) values (63,26);
+insert into t (id,a) values (63,27);
+insert into t (id,a) values (63,28);
+insert into t (id,a) values (63,29);
+insert into t (id,a) values (63,30);
+insert into t (id,a) values (63,31);
+insert into t (id,a) values (63,32);
+insert into t (id,a) values (63,33);
+insert into t (id,a) values (63,34);
+insert into t (id,a) values (63,35);
+insert into t (id,a) values (63,36);
+insert into t (id,a) values (63,37);
+insert into t (id,a) values (63,38);
+insert into t (id,a) values (63,39);
+insert into t (id,a) values (63,40);
+insert into t (id,a) values (63,41);
+insert into t (id,a) values (63,42);
+insert into t (id,a) values (63,43);
+insert into t (id,a) values (63,44);
+insert into t (id,a) values (63,45);
+insert into t (id,a) values (63,46);
+insert into t (id,a) values (63,47);
+insert into t (id,a) values (63,48);
+insert into t (id,a) values (63,49);
+insert into t (id,a) values (63,50);
+insert into t (id,a) values (63,51);
+insert into t (id,a) values (63,52);
+insert into t (id,a) values (63,53);
+insert into t (id,a) values (63,54);
+insert into t (id,a) values (63,55);
+insert into t (id,a) values (63,56);
+insert into t (id,a) values (63,57);
+insert into t (id,a) values (63,58);
+insert into t (id,a) values (63,59);
+insert into t (id,a) values (63,60);
+insert into t (id,a) values (63,61);
+insert into t (id,a) values (63,62);
+insert into t (id,a) values (63,63);
+insert into t (id,a) values (63,64);
+insert into t (id,a) values (63,65);
+insert into t (id,a) values (63,66);
+insert into t (id,a) values (63,67);
+insert into t (id,a) values (63,68);
+insert into t (id,a) values (63,69);
+insert into t (id,a) values (63,70);
+insert into t (id,a) values (63,71);
+insert into t (id,a) values (63,72);
+insert into t (id,a) values (63,73);
+insert into t (id,a) values (63,74);
+insert into t (id,a) values (63,75);
+insert into t (id,a) values (63,76);
+insert into t (id,a) values (63,77);
+insert into t (id,a) values (63,78);
+insert into t (id,a) values (63,79);
+insert into t (id,a) values (63,80);
+insert into t (id,a) values (63,81);
+insert into t (id,a) values (63,82);
+insert into t (id,a) values (63,83);
+insert into t (id,a) values (63,84);
+insert into t (id,a) values (63,85);
+insert into t (id,a) values (63,86);
+insert into t (id,a) values (63,87);
+insert into t (id,a) values (63,88);
+insert into t (id,a) values (63,89);
+insert into t (id,a) values (63,90);
+insert into t (id,a) values (63,91);
+insert into t (id,a) values (63,92);
+insert into t (id,a) values (63,93);
+insert into t (id,a) values (63,94);
+insert into t (id,a) values (63,95);
+insert into t (id,a) values (63,96);
+insert into t (id,a) values (63,97);
+insert into t (id,a) values (63,98);
+insert into t (id,a) values (63,99);
+insert into t (id,a) values (64,0);
+insert into t (id,a) values (64,1);
+insert into t (id,a) values (64,2);
+insert into t (id,a) values (64,3);
+insert into t (id,a) values (64,4);
+insert into t (id,a) values (64,5);
+insert into t (id,a) values (64,6);
+insert into t (id,a) values (64,7);
+insert into t (id,a) values (64,8);
+insert into t (id,a) values (64,9);
+insert into t (id,a) values (64,10);
+insert into t (id,a) values (64,11);
+insert into t (id,a) values (64,12);
+insert into t (id,a) values (64,13);
+insert into t (id,a) values (64,14);
+insert into t (id,a) values (64,15);
+insert into t (id,a) values (64,16);
+insert into t (id,a) values (64,17);
+insert into t (id,a) values (64,18);
+insert into t (id,a) values (64,19);
+insert into t (id,a) values (64,20);
+insert into t (id,a) values (64,21);
+insert into t (id,a) values (64,22);
+insert into t (id,a) values (64,23);
+insert into t (id,a) values (64,24);
+insert into t (id,a) values (64,25);
+insert into t (id,a) values (64,26);
+insert into t (id,a) values (64,27);
+insert into t (id,a) values (64,28);
+insert into t (id,a) values (64,29);
+insert into t (id,a) values (64,30);
+insert into t (id,a) values (64,31);
+insert into t (id,a) values (64,32);
+insert into t (id,a) values (64,33);
+insert into t (id,a) values (64,34);
+insert into t (id,a) values (64,35);
+insert into t (id,a) values (64,36);
+insert into t (id,a) values (64,37);
+insert into t (id,a) values (64,38);
+insert into t (id,a) values (64,39);
+insert into t (id,a) values (64,40);
+insert into t (id,a) values (64,41);
+insert into t (id,a) values (64,42);
+insert into t (id,a) values (64,43);
+insert into t (id,a) values (64,44);
+insert into t (id,a) values (64,45);
+insert into t (id,a) values (64,46);
+insert into t (id,a) values (64,47);
+insert into t (id,a) values (64,48);
+insert into t (id,a) values (64,49);
+insert into t (id,a) values (64,50);
+insert into t (id,a) values (64,51);
+insert into t (id,a) values (64,52);
+insert into t (id,a) values (64,53);
+insert into t (id,a) values (64,54);
+insert into t (id,a) values (64,55);
+insert into t (id,a) values (64,56);
+insert into t (id,a) values (64,57);
+insert into t (id,a) values (64,58);
+insert into t (id,a) values (64,59);
+insert into t (id,a) values (64,60);
+insert into t (id,a) values (64,61);
+insert into t (id,a) values (64,62);
+insert into t (id,a) values (64,63);
+insert into t (id,a) values (64,64);
+insert into t (id,a) values (64,65);
+insert into t (id,a) values (64,66);
+insert into t (id,a) values (64,67);
+insert into t (id,a) values (64,68);
+insert into t (id,a) values (64,69);
+insert into t (id,a) values (64,70);
+insert into t (id,a) values (64,71);
+insert into t (id,a) values (64,72);
+insert into t (id,a) values (64,73);
+insert into t (id,a) values (64,74);
+insert into t (id,a) values (64,75);
+insert into t (id,a) values (64,76);
+insert into t (id,a) values (64,77);
+insert into t (id,a) values (64,78);
+insert into t (id,a) values (64,79);
+insert into t (id,a) values (64,80);
+insert into t (id,a) values (64,81);
+insert into t (id,a) values (64,82);
+insert into t (id,a) values (64,83);
+insert into t (id,a) values (64,84);
+insert into t (id,a) values (64,85);
+insert into t (id,a) values (64,86);
+insert into t (id,a) values (64,87);
+insert into t (id,a) values (64,88);
+insert into t (id,a) values (64,89);
+insert into t (id,a) values (64,90);
+insert into t (id,a) values (64,91);
+insert into t (id,a) values (64,92);
+insert into t (id,a) values (64,93);
+insert into t (id,a) values (64,94);
+insert into t (id,a) values (64,95);
+insert into t (id,a) values (64,96);
+insert into t (id,a) values (64,97);
+insert into t (id,a) values (64,98);
+insert into t (id,a) values (64,99);
+insert into t (id,a) values (65,0);
+insert into t (id,a) values (65,1);
+insert into t (id,a) values (65,2);
+insert into t (id,a) values (65,3);
+insert into t (id,a) values (65,4);
+insert into t (id,a) values (65,5);
+insert into t (id,a) values (65,6);
+insert into t (id,a) values (65,7);
+insert into t (id,a) values (65,8);
+insert into t (id,a) values (65,9);
+insert into t (id,a) values (65,10);
+insert into t (id,a) values (65,11);
+insert into t (id,a) values (65,12);
+insert into t (id,a) values (65,13);
+insert into t (id,a) values (65,14);
+insert into t (id,a) values (65,15);
+insert into t (id,a) values (65,16);
+insert into t (id,a) values (65,17);
+insert into t (id,a) values (65,18);
+insert into t (id,a) values (65,19);
+insert into t (id,a) values (65,20);
+insert into t (id,a) values (65,21);
+insert into t (id,a) values (65,22);
+insert into t (id,a) values (65,23);
+insert into t (id,a) values (65,24);
+insert into t (id,a) values (65,25);
+insert into t (id,a) values (65,26);
+insert into t (id,a) values (65,27);
+insert into t (id,a) values (65,28);
+insert into t (id,a) values (65,29);
+insert into t (id,a) values (65,30);
+insert into t (id,a) values (65,31);
+insert into t (id,a) values (65,32);
+insert into t (id,a) values (65,33);
+insert into t (id,a) values (65,34);
+insert into t (id,a) values (65,35);
+insert into t (id,a) values (65,36);
+insert into t (id,a) values (65,37);
+insert into t (id,a) values (65,38);
+insert into t (id,a) values (65,39);
+insert into t (id,a) values (65,40);
+insert into t (id,a) values (65,41);
+insert into t (id,a) values (65,42);
+insert into t (id,a) values (65,43);
+insert into t (id,a) values (65,44);
+insert into t (id,a) values (65,45);
+insert into t (id,a) values (65,46);
+insert into t (id,a) values (65,47);
+insert into t (id,a) values (65,48);
+insert into t (id,a) values (65,49);
+insert into t (id,a) values (65,50);
+insert into t (id,a) values (65,51);
+insert into t (id,a) values (65,52);
+insert into t (id,a) values (65,53);
+insert into t (id,a) values (65,54);
+insert into t (id,a) values (65,55);
+insert into t (id,a) values (65,56);
+insert into t (id,a) values (65,57);
+insert into t (id,a) values (65,58);
+insert into t (id,a) values (65,59);
+insert into t (id,a) values (65,60);
+insert into t (id,a) values (65,61);
+insert into t (id,a) values (65,62);
+insert into t (id,a) values (65,63);
+insert into t (id,a) values (65,64);
+insert into t (id,a) values (65,65);
+insert into t (id,a) values (65,66);
+insert into t (id,a) values (65,67);
+insert into t (id,a) values (65,68);
+insert into t (id,a) values (65,69);
+insert into t (id,a) values (65,70);
+insert into t (id,a) values (65,71);
+insert into t (id,a) values (65,72);
+insert into t (id,a) values (65,73);
+insert into t (id,a) values (65,74);
+insert into t (id,a) values (65,75);
+insert into t (id,a) values (65,76);
+insert into t (id,a) values (65,77);
+insert into t (id,a) values (65,78);
+insert into t (id,a) values (65,79);
+insert into t (id,a) values (65,80);
+insert into t (id,a) values (65,81);
+insert into t (id,a) values (65,82);
+insert into t (id,a) values (65,83);
+insert into t (id,a) values (65,84);
+insert into t (id,a) values (65,85);
+insert into t (id,a) values (65,86);
+insert into t (id,a) values (65,87);
+insert into t (id,a) values (65,88);
+insert into t (id,a) values (65,89);
+insert into t (id,a) values (65,90);
+insert into t (id,a) values (65,91);
+insert into t (id,a) values (65,92);
+insert into t (id,a) values (65,93);
+insert into t (id,a) values (65,94);
+insert into t (id,a) values (65,95);
+insert into t (id,a) values (65,96);
+insert into t (id,a) values (65,97);
+insert into t (id,a) values (65,98);
+insert into t (id,a) values (65,99);
+insert into t (id,a) values (66,0);
+insert into t (id,a) values (66,1);
+insert into t (id,a) values (66,2);
+insert into t (id,a) values (66,3);
+insert into t (id,a) values (66,4);
+insert into t (id,a) values (66,5);
+insert into t (id,a) values (66,6);
+insert into t (id,a) values (66,7);
+insert into t (id,a) values (66,8);
+insert into t (id,a) values (66,9);
+insert into t (id,a) values (66,10);
+insert into t (id,a) values (66,11);
+insert into t (id,a) values (66,12);
+insert into t (id,a) values (66,13);
+insert into t (id,a) values (66,14);
+insert into t (id,a) values (66,15);
+insert into t (id,a) values (66,16);
+insert into t (id,a) values (66,17);
+insert into t (id,a) values (66,18);
+insert into t (id,a) values (66,19);
+insert into t (id,a) values (66,20);
+insert into t (id,a) values (66,21);
+insert into t (id,a) values (66,22);
+insert into t (id,a) values (66,23);
+insert into t (id,a) values (66,24);
+insert into t (id,a) values (66,25);
+insert into t (id,a) values (66,26);
+insert into t (id,a) values (66,27);
+insert into t (id,a) values (66,28);
+insert into t (id,a) values (66,29);
+insert into t (id,a) values (66,30);
+insert into t (id,a) values (66,31);
+insert into t (id,a) values (66,32);
+insert into t (id,a) values (66,33);
+insert into t (id,a) values (66,34);
+insert into t (id,a) values (66,35);
+insert into t (id,a) values (66,36);
+insert into t (id,a) values (66,37);
+insert into t (id,a) values (66,38);
+insert into t (id,a) values (66,39);
+insert into t (id,a) values (66,40);
+insert into t (id,a) values (66,41);
+insert into t (id,a) values (66,42);
+insert into t (id,a) values (66,43);
+insert into t (id,a) values (66,44);
+insert into t (id,a) values (66,45);
+insert into t (id,a) values (66,46);
+insert into t (id,a) values (66,47);
+insert into t (id,a) values (66,48);
+insert into t (id,a) values (66,49);
+insert into t (id,a) values (66,50);
+insert into t (id,a) values (66,51);
+insert into t (id,a) values (66,52);
+insert into t (id,a) values (66,53);
+insert into t (id,a) values (66,54);
+insert into t (id,a) values (66,55);
+insert into t (id,a) values (66,56);
+insert into t (id,a) values (66,57);
+insert into t (id,a) values (66,58);
+insert into t (id,a) values (66,59);
+insert into t (id,a) values (66,60);
+insert into t (id,a) values (66,61);
+insert into t (id,a) values (66,62);
+insert into t (id,a) values (66,63);
+insert into t (id,a) values (66,64);
+insert into t (id,a) values (66,65);
+insert into t (id,a) values (66,66);
+insert into t (id,a) values (66,67);
+insert into t (id,a) values (66,68);
+insert into t (id,a) values (66,69);
+insert into t (id,a) values (66,70);
+insert into t (id,a) values (66,71);
+insert into t (id,a) values (66,72);
+insert into t (id,a) values (66,73);
+insert into t (id,a) values (66,74);
+insert into t (id,a) values (66,75);
+insert into t (id,a) values (66,76);
+insert into t (id,a) values (66,77);
+insert into t (id,a) values (66,78);
+insert into t (id,a) values (66,79);
+insert into t (id,a) values (66,80);
+insert into t (id,a) values (66,81);
+insert into t (id,a) values (66,82);
+insert into t (id,a) values (66,83);
+insert into t (id,a) values (66,84);
+insert into t (id,a) values (66,85);
+insert into t (id,a) values (66,86);
+insert into t (id,a) values (66,87);
+insert into t (id,a) values (66,88);
+insert into t (id,a) values (66,89);
+insert into t (id,a) values (66,90);
+insert into t (id,a) values (66,91);
+insert into t (id,a) values (66,92);
+insert into t (id,a) values (66,93);
+insert into t (id,a) values (66,94);
+insert into t (id,a) values (66,95);
+insert into t (id,a) values (66,96);
+insert into t (id,a) values (66,97);
+insert into t (id,a) values (66,98);
+insert into t (id,a) values (66,99);
+insert into t (id,a) values (67,0);
+insert into t (id,a) values (67,1);
+insert into t (id,a) values (67,2);
+insert into t (id,a) values (67,3);
+insert into t (id,a) values (67,4);
+insert into t (id,a) values (67,5);
+insert into t (id,a) values (67,6);
+insert into t (id,a) values (67,7);
+insert into t (id,a) values (67,8);
+insert into t (id,a) values (67,9);
+insert into t (id,a) values (67,10);
+insert into t (id,a) values (67,11);
+insert into t (id,a) values (67,12);
+insert into t (id,a) values (67,13);
+insert into t (id,a) values (67,14);
+insert into t (id,a) values (67,15);
+insert into t (id,a) values (67,16);
+insert into t (id,a) values (67,17);
+insert into t (id,a) values (67,18);
+insert into t (id,a) values (67,19);
+insert into t (id,a) values (67,20);
+insert into t (id,a) values (67,21);
+insert into t (id,a) values (67,22);
+insert into t (id,a) values (67,23);
+insert into t (id,a) values (67,24);
+insert into t (id,a) values (67,25);
+insert into t (id,a) values (67,26);
+insert into t (id,a) values (67,27);
+insert into t (id,a) values (67,28);
+insert into t (id,a) values (67,29);
+insert into t (id,a) values (67,30);
+insert into t (id,a) values (67,31);
+insert into t (id,a) values (67,32);
+insert into t (id,a) values (67,33);
+insert into t (id,a) values (67,34);
+insert into t (id,a) values (67,35);
+insert into t (id,a) values (67,36);
+insert into t (id,a) values (67,37);
+insert into t (id,a) values (67,38);
+insert into t (id,a) values (67,39);
+insert into t (id,a) values (67,40);
+insert into t (id,a) values (67,41);
+insert into t (id,a) values (67,42);
+insert into t (id,a) values (67,43);
+insert into t (id,a) values (67,44);
+insert into t (id,a) values (67,45);
+insert into t (id,a) values (67,46);
+insert into t (id,a) values (67,47);
+insert into t (id,a) values (67,48);
+insert into t (id,a) values (67,49);
+insert into t (id,a) values (67,50);
+insert into t (id,a) values (67,51);
+insert into t (id,a) values (67,52);
+insert into t (id,a) values (67,53);
+insert into t (id,a) values (67,54);
+insert into t (id,a) values (67,55);
+insert into t (id,a) values (67,56);
+insert into t (id,a) values (67,57);
+insert into t (id,a) values (67,58);
+insert into t (id,a) values (67,59);
+insert into t (id,a) values (67,60);
+insert into t (id,a) values (67,61);
+insert into t (id,a) values (67,62);
+insert into t (id,a) values (67,63);
+insert into t (id,a) values (67,64);
+insert into t (id,a) values (67,65);
+insert into t (id,a) values (67,66);
+insert into t (id,a) values (67,67);
+insert into t (id,a) values (67,68);
+insert into t (id,a) values (67,69);
+insert into t (id,a) values (67,70);
+insert into t (id,a) values (67,71);
+insert into t (id,a) values (67,72);
+insert into t (id,a) values (67,73);
+insert into t (id,a) values (67,74);
+insert into t (id,a) values (67,75);
+insert into t (id,a) values (67,76);
+insert into t (id,a) values (67,77);
+insert into t (id,a) values (67,78);
+insert into t (id,a) values (67,79);
+insert into t (id,a) values (67,80);
+insert into t (id,a) values (67,81);
+insert into t (id,a) values (67,82);
+insert into t (id,a) values (67,83);
+insert into t (id,a) values (67,84);
+insert into t (id,a) values (67,85);
+insert into t (id,a) values (67,86);
+insert into t (id,a) values (67,87);
+insert into t (id,a) values (67,88);
+insert into t (id,a) values (67,89);
+insert into t (id,a) values (67,90);
+insert into t (id,a) values (67,91);
+insert into t (id,a) values (67,92);
+insert into t (id,a) values (67,93);
+insert into t (id,a) values (67,94);
+insert into t (id,a) values (67,95);
+insert into t (id,a) values (67,96);
+insert into t (id,a) values (67,97);
+insert into t (id,a) values (67,98);
+insert into t (id,a) values (67,99);
+insert into t (id,a) values (68,0);
+insert into t (id,a) values (68,1);
+insert into t (id,a) values (68,2);
+insert into t (id,a) values (68,3);
+insert into t (id,a) values (68,4);
+insert into t (id,a) values (68,5);
+insert into t (id,a) values (68,6);
+insert into t (id,a) values (68,7);
+insert into t (id,a) values (68,8);
+insert into t (id,a) values (68,9);
+insert into t (id,a) values (68,10);
+insert into t (id,a) values (68,11);
+insert into t (id,a) values (68,12);
+insert into t (id,a) values (68,13);
+insert into t (id,a) values (68,14);
+insert into t (id,a) values (68,15);
+insert into t (id,a) values (68,16);
+insert into t (id,a) values (68,17);
+insert into t (id,a) values (68,18);
+insert into t (id,a) values (68,19);
+insert into t (id,a) values (68,20);
+insert into t (id,a) values (68,21);
+insert into t (id,a) values (68,22);
+insert into t (id,a) values (68,23);
+insert into t (id,a) values (68,24);
+insert into t (id,a) values (68,25);
+insert into t (id,a) values (68,26);
+insert into t (id,a) values (68,27);
+insert into t (id,a) values (68,28);
+insert into t (id,a) values (68,29);
+insert into t (id,a) values (68,30);
+insert into t (id,a) values (68,31);
+insert into t (id,a) values (68,32);
+insert into t (id,a) values (68,33);
+insert into t (id,a) values (68,34);
+insert into t (id,a) values (68,35);
+insert into t (id,a) values (68,36);
+insert into t (id,a) values (68,37);
+insert into t (id,a) values (68,38);
+insert into t (id,a) values (68,39);
+insert into t (id,a) values (68,40);
+insert into t (id,a) values (68,41);
+insert into t (id,a) values (68,42);
+insert into t (id,a) values (68,43);
+insert into t (id,a) values (68,44);
+insert into t (id,a) values (68,45);
+insert into t (id,a) values (68,46);
+insert into t (id,a) values (68,47);
+insert into t (id,a) values (68,48);
+insert into t (id,a) values (68,49);
+insert into t (id,a) values (68,50);
+insert into t (id,a) values (68,51);
+insert into t (id,a) values (68,52);
+insert into t (id,a) values (68,53);
+insert into t (id,a) values (68,54);
+insert into t (id,a) values (68,55);
+insert into t (id,a) values (68,56);
+insert into t (id,a) values (68,57);
+insert into t (id,a) values (68,58);
+insert into t (id,a) values (68,59);
+insert into t (id,a) values (68,60);
+insert into t (id,a) values (68,61);
+insert into t (id,a) values (68,62);
+insert into t (id,a) values (68,63);
+insert into t (id,a) values (68,64);
+insert into t (id,a) values (68,65);
+insert into t (id,a) values (68,66);
+insert into t (id,a) values (68,67);
+insert into t (id,a) values (68,68);
+insert into t (id,a) values (68,69);
+insert into t (id,a) values (68,70);
+insert into t (id,a) values (68,71);
+insert into t (id,a) values (68,72);
+insert into t (id,a) values (68,73);
+insert into t (id,a) values (68,74);
+insert into t (id,a) values (68,75);
+insert into t (id,a) values (68,76);
+insert into t (id,a) values (68,77);
+insert into t (id,a) values (68,78);
+insert into t (id,a) values (68,79);
+insert into t (id,a) values (68,80);
+insert into t (id,a) values (68,81);
+insert into t (id,a) values (68,82);
+insert into t (id,a) values (68,83);
+insert into t (id,a) values (68,84);
+insert into t (id,a) values (68,85);
+insert into t (id,a) values (68,86);
+insert into t (id,a) values (68,87);
+insert into t (id,a) values (68,88);
+insert into t (id,a) values (68,89);
+insert into t (id,a) values (68,90);
+insert into t (id,a) values (68,91);
+insert into t (id,a) values (68,92);
+insert into t (id,a) values (68,93);
+insert into t (id,a) values (68,94);
+insert into t (id,a) values (68,95);
+insert into t (id,a) values (68,96);
+insert into t (id,a) values (68,97);
+insert into t (id,a) values (68,98);
+insert into t (id,a) values (68,99);
+insert into t (id,a) values (69,0);
+insert into t (id,a) values (69,1);
+insert into t (id,a) values (69,2);
+insert into t (id,a) values (69,3);
+insert into t (id,a) values (69,4);
+insert into t (id,a) values (69,5);
+insert into t (id,a) values (69,6);
+insert into t (id,a) values (69,7);
+insert into t (id,a) values (69,8);
+insert into t (id,a) values (69,9);
+insert into t (id,a) values (69,10);
+insert into t (id,a) values (69,11);
+insert into t (id,a) values (69,12);
+insert into t (id,a) values (69,13);
+insert into t (id,a) values (69,14);
+insert into t (id,a) values (69,15);
+insert into t (id,a) values (69,16);
+insert into t (id,a) values (69,17);
+insert into t (id,a) values (69,18);
+insert into t (id,a) values (69,19);
+insert into t (id,a) values (69,20);
+insert into t (id,a) values (69,21);
+insert into t (id,a) values (69,22);
+insert into t (id,a) values (69,23);
+insert into t (id,a) values (69,24);
+insert into t (id,a) values (69,25);
+insert into t (id,a) values (69,26);
+insert into t (id,a) values (69,27);
+insert into t (id,a) values (69,28);
+insert into t (id,a) values (69,29);
+insert into t (id,a) values (69,30);
+insert into t (id,a) values (69,31);
+insert into t (id,a) values (69,32);
+insert into t (id,a) values (69,33);
+insert into t (id,a) values (69,34);
+insert into t (id,a) values (69,35);
+insert into t (id,a) values (69,36);
+insert into t (id,a) values (69,37);
+insert into t (id,a) values (69,38);
+insert into t (id,a) values (69,39);
+insert into t (id,a) values (69,40);
+insert into t (id,a) values (69,41);
+insert into t (id,a) values (69,42);
+insert into t (id,a) values (69,43);
+insert into t (id,a) values (69,44);
+insert into t (id,a) values (69,45);
+insert into t (id,a) values (69,46);
+insert into t (id,a) values (69,47);
+insert into t (id,a) values (69,48);
+insert into t (id,a) values (69,49);
+insert into t (id,a) values (69,50);
+insert into t (id,a) values (69,51);
+insert into t (id,a) values (69,52);
+insert into t (id,a) values (69,53);
+insert into t (id,a) values (69,54);
+insert into t (id,a) values (69,55);
+insert into t (id,a) values (69,56);
+insert into t (id,a) values (69,57);
+insert into t (id,a) values (69,58);
+insert into t (id,a) values (69,59);
+insert into t (id,a) values (69,60);
+insert into t (id,a) values (69,61);
+insert into t (id,a) values (69,62);
+insert into t (id,a) values (69,63);
+insert into t (id,a) values (69,64);
+insert into t (id,a) values (69,65);
+insert into t (id,a) values (69,66);
+insert into t (id,a) values (69,67);
+insert into t (id,a) values (69,68);
+insert into t (id,a) values (69,69);
+insert into t (id,a) values (69,70);
+insert into t (id,a) values (69,71);
+insert into t (id,a) values (69,72);
+insert into t (id,a) values (69,73);
+insert into t (id,a) values (69,74);
+insert into t (id,a) values (69,75);
+insert into t (id,a) values (69,76);
+insert into t (id,a) values (69,77);
+insert into t (id,a) values (69,78);
+insert into t (id,a) values (69,79);
+insert into t (id,a) values (69,80);
+insert into t (id,a) values (69,81);
+insert into t (id,a) values (69,82);
+insert into t (id,a) values (69,83);
+insert into t (id,a) values (69,84);
+insert into t (id,a) values (69,85);
+insert into t (id,a) values (69,86);
+insert into t (id,a) values (69,87);
+insert into t (id,a) values (69,88);
+insert into t (id,a) values (69,89);
+insert into t (id,a) values (69,90);
+insert into t (id,a) values (69,91);
+insert into t (id,a) values (69,92);
+insert into t (id,a) values (69,93);
+insert into t (id,a) values (69,94);
+insert into t (id,a) values (69,95);
+insert into t (id,a) values (69,96);
+insert into t (id,a) values (69,97);
+insert into t (id,a) values (69,98);
+insert into t (id,a) values (69,99);
+insert into t (id,a) values (70,0);
+insert into t (id,a) values (70,1);
+insert into t (id,a) values (70,2);
+insert into t (id,a) values (70,3);
+insert into t (id,a) values (70,4);
+insert into t (id,a) values (70,5);
+insert into t (id,a) values (70,6);
+insert into t (id,a) values (70,7);
+insert into t (id,a) values (70,8);
+insert into t (id,a) values (70,9);
+insert into t (id,a) values (70,10);
+insert into t (id,a) values (70,11);
+insert into t (id,a) values (70,12);
+insert into t (id,a) values (70,13);
+insert into t (id,a) values (70,14);
+insert into t (id,a) values (70,15);
+insert into t (id,a) values (70,16);
+insert into t (id,a) values (70,17);
+insert into t (id,a) values (70,18);
+insert into t (id,a) values (70,19);
+insert into t (id,a) values (70,20);
+insert into t (id,a) values (70,21);
+insert into t (id,a) values (70,22);
+insert into t (id,a) values (70,23);
+insert into t (id,a) values (70,24);
+insert into t (id,a) values (70,25);
+insert into t (id,a) values (70,26);
+insert into t (id,a) values (70,27);
+insert into t (id,a) values (70,28);
+insert into t (id,a) values (70,29);
+insert into t (id,a) values (70,30);
+insert into t (id,a) values (70,31);
+insert into t (id,a) values (70,32);
+insert into t (id,a) values (70,33);
+insert into t (id,a) values (70,34);
+insert into t (id,a) values (70,35);
+insert into t (id,a) values (70,36);
+insert into t (id,a) values (70,37);
+insert into t (id,a) values (70,38);
+insert into t (id,a) values (70,39);
+insert into t (id,a) values (70,40);
+insert into t (id,a) values (70,41);
+insert into t (id,a) values (70,42);
+insert into t (id,a) values (70,43);
+insert into t (id,a) values (70,44);
+insert into t (id,a) values (70,45);
+insert into t (id,a) values (70,46);
+insert into t (id,a) values (70,47);
+insert into t (id,a) values (70,48);
+insert into t (id,a) values (70,49);
+insert into t (id,a) values (70,50);
+insert into t (id,a) values (70,51);
+insert into t (id,a) values (70,52);
+insert into t (id,a) values (70,53);
+insert into t (id,a) values (70,54);
+insert into t (id,a) values (70,55);
+insert into t (id,a) values (70,56);
+insert into t (id,a) values (70,57);
+insert into t (id,a) values (70,58);
+insert into t (id,a) values (70,59);
+insert into t (id,a) values (70,60);
+insert into t (id,a) values (70,61);
+insert into t (id,a) values (70,62);
+insert into t (id,a) values (70,63);
+insert into t (id,a) values (70,64);
+insert into t (id,a) values (70,65);
+insert into t (id,a) values (70,66);
+insert into t (id,a) values (70,67);
+insert into t (id,a) values (70,68);
+insert into t (id,a) values (70,69);
+insert into t (id,a) values (70,70);
+insert into t (id,a) values (70,71);
+insert into t (id,a) values (70,72);
+insert into t (id,a) values (70,73);
+insert into t (id,a) values (70,74);
+insert into t (id,a) values (70,75);
+insert into t (id,a) values (70,76);
+insert into t (id,a) values (70,77);
+insert into t (id,a) values (70,78);
+insert into t (id,a) values (70,79);
+insert into t (id,a) values (70,80);
+insert into t (id,a) values (70,81);
+insert into t (id,a) values (70,82);
+insert into t (id,a) values (70,83);
+insert into t (id,a) values (70,84);
+insert into t (id,a) values (70,85);
+insert into t (id,a) values (70,86);
+insert into t (id,a) values (70,87);
+insert into t (id,a) values (70,88);
+insert into t (id,a) values (70,89);
+insert into t (id,a) values (70,90);
+insert into t (id,a) values (70,91);
+insert into t (id,a) values (70,92);
+insert into t (id,a) values (70,93);
+insert into t (id,a) values (70,94);
+insert into t (id,a) values (70,95);
+insert into t (id,a) values (70,96);
+insert into t (id,a) values (70,97);
+insert into t (id,a) values (70,98);
+insert into t (id,a) values (70,99);
+insert into t (id,a) values (71,0);
+insert into t (id,a) values (71,1);
+insert into t (id,a) values (71,2);
+insert into t (id,a) values (71,3);
+insert into t (id,a) values (71,4);
+insert into t (id,a) values (71,5);
+insert into t (id,a) values (71,6);
+insert into t (id,a) values (71,7);
+insert into t (id,a) values (71,8);
+insert into t (id,a) values (71,9);
+insert into t (id,a) values (71,10);
+insert into t (id,a) values (71,11);
+insert into t (id,a) values (71,12);
+insert into t (id,a) values (71,13);
+insert into t (id,a) values (71,14);
+insert into t (id,a) values (71,15);
+insert into t (id,a) values (71,16);
+insert into t (id,a) values (71,17);
+insert into t (id,a) values (71,18);
+insert into t (id,a) values (71,19);
+insert into t (id,a) values (71,20);
+insert into t (id,a) values (71,21);
+insert into t (id,a) values (71,22);
+insert into t (id,a) values (71,23);
+insert into t (id,a) values (71,24);
+insert into t (id,a) values (71,25);
+insert into t (id,a) values (71,26);
+insert into t (id,a) values (71,27);
+insert into t (id,a) values (71,28);
+insert into t (id,a) values (71,29);
+insert into t (id,a) values (71,30);
+insert into t (id,a) values (71,31);
+insert into t (id,a) values (71,32);
+insert into t (id,a) values (71,33);
+insert into t (id,a) values (71,34);
+insert into t (id,a) values (71,35);
+insert into t (id,a) values (71,36);
+insert into t (id,a) values (71,37);
+insert into t (id,a) values (71,38);
+insert into t (id,a) values (71,39);
+insert into t (id,a) values (71,40);
+insert into t (id,a) values (71,41);
+insert into t (id,a) values (71,42);
+insert into t (id,a) values (71,43);
+insert into t (id,a) values (71,44);
+insert into t (id,a) values (71,45);
+insert into t (id,a) values (71,46);
+insert into t (id,a) values (71,47);
+insert into t (id,a) values (71,48);
+insert into t (id,a) values (71,49);
+insert into t (id,a) values (71,50);
+insert into t (id,a) values (71,51);
+insert into t (id,a) values (71,52);
+insert into t (id,a) values (71,53);
+insert into t (id,a) values (71,54);
+insert into t (id,a) values (71,55);
+insert into t (id,a) values (71,56);
+insert into t (id,a) values (71,57);
+insert into t (id,a) values (71,58);
+insert into t (id,a) values (71,59);
+insert into t (id,a) values (71,60);
+insert into t (id,a) values (71,61);
+insert into t (id,a) values (71,62);
+insert into t (id,a) values (71,63);
+insert into t (id,a) values (71,64);
+insert into t (id,a) values (71,65);
+insert into t (id,a) values (71,66);
+insert into t (id,a) values (71,67);
+insert into t (id,a) values (71,68);
+insert into t (id,a) values (71,69);
+insert into t (id,a) values (71,70);
+insert into t (id,a) values (71,71);
+insert into t (id,a) values (71,72);
+insert into t (id,a) values (71,73);
+insert into t (id,a) values (71,74);
+insert into t (id,a) values (71,75);
+insert into t (id,a) values (71,76);
+insert into t (id,a) values (71,77);
+insert into t (id,a) values (71,78);
+insert into t (id,a) values (71,79);
+insert into t (id,a) values (71,80);
+insert into t (id,a) values (71,81);
+insert into t (id,a) values (71,82);
+insert into t (id,a) values (71,83);
+insert into t (id,a) values (71,84);
+insert into t (id,a) values (71,85);
+insert into t (id,a) values (71,86);
+insert into t (id,a) values (71,87);
+insert into t (id,a) values (71,88);
+insert into t (id,a) values (71,89);
+insert into t (id,a) values (71,90);
+insert into t (id,a) values (71,91);
+insert into t (id,a) values (71,92);
+insert into t (id,a) values (71,93);
+insert into t (id,a) values (71,94);
+insert into t (id,a) values (71,95);
+insert into t (id,a) values (71,96);
+insert into t (id,a) values (71,97);
+insert into t (id,a) values (71,98);
+insert into t (id,a) values (71,99);
+insert into t (id,a) values (72,0);
+insert into t (id,a) values (72,1);
+insert into t (id,a) values (72,2);
+insert into t (id,a) values (72,3);
+insert into t (id,a) values (72,4);
+insert into t (id,a) values (72,5);
+insert into t (id,a) values (72,6);
+insert into t (id,a) values (72,7);
+insert into t (id,a) values (72,8);
+insert into t (id,a) values (72,9);
+insert into t (id,a) values (72,10);
+insert into t (id,a) values (72,11);
+insert into t (id,a) values (72,12);
+insert into t (id,a) values (72,13);
+insert into t (id,a) values (72,14);
+insert into t (id,a) values (72,15);
+insert into t (id,a) values (72,16);
+insert into t (id,a) values (72,17);
+insert into t (id,a) values (72,18);
+insert into t (id,a) values (72,19);
+insert into t (id,a) values (72,20);
+insert into t (id,a) values (72,21);
+insert into t (id,a) values (72,22);
+insert into t (id,a) values (72,23);
+insert into t (id,a) values (72,24);
+insert into t (id,a) values (72,25);
+insert into t (id,a) values (72,26);
+insert into t (id,a) values (72,27);
+insert into t (id,a) values (72,28);
+insert into t (id,a) values (72,29);
+insert into t (id,a) values (72,30);
+insert into t (id,a) values (72,31);
+insert into t (id,a) values (72,32);
+insert into t (id,a) values (72,33);
+insert into t (id,a) values (72,34);
+insert into t (id,a) values (72,35);
+insert into t (id,a) values (72,36);
+insert into t (id,a) values (72,37);
+insert into t (id,a) values (72,38);
+insert into t (id,a) values (72,39);
+insert into t (id,a) values (72,40);
+insert into t (id,a) values (72,41);
+insert into t (id,a) values (72,42);
+insert into t (id,a) values (72,43);
+insert into t (id,a) values (72,44);
+insert into t (id,a) values (72,45);
+insert into t (id,a) values (72,46);
+insert into t (id,a) values (72,47);
+insert into t (id,a) values (72,48);
+insert into t (id,a) values (72,49);
+insert into t (id,a) values (72,50);
+insert into t (id,a) values (72,51);
+insert into t (id,a) values (72,52);
+insert into t (id,a) values (72,53);
+insert into t (id,a) values (72,54);
+insert into t (id,a) values (72,55);
+insert into t (id,a) values (72,56);
+insert into t (id,a) values (72,57);
+insert into t (id,a) values (72,58);
+insert into t (id,a) values (72,59);
+insert into t (id,a) values (72,60);
+insert into t (id,a) values (72,61);
+insert into t (id,a) values (72,62);
+insert into t (id,a) values (72,63);
+insert into t (id,a) values (72,64);
+insert into t (id,a) values (72,65);
+insert into t (id,a) values (72,66);
+insert into t (id,a) values (72,67);
+insert into t (id,a) values (72,68);
+insert into t (id,a) values (72,69);
+insert into t (id,a) values (72,70);
+insert into t (id,a) values (72,71);
+insert into t (id,a) values (72,72);
+insert into t (id,a) values (72,73);
+insert into t (id,a) values (72,74);
+insert into t (id,a) values (72,75);
+insert into t (id,a) values (72,76);
+insert into t (id,a) values (72,77);
+insert into t (id,a) values (72,78);
+insert into t (id,a) values (72,79);
+insert into t (id,a) values (72,80);
+insert into t (id,a) values (72,81);
+insert into t (id,a) values (72,82);
+insert into t (id,a) values (72,83);
+insert into t (id,a) values (72,84);
+insert into t (id,a) values (72,85);
+insert into t (id,a) values (72,86);
+insert into t (id,a) values (72,87);
+insert into t (id,a) values (72,88);
+insert into t (id,a) values (72,89);
+insert into t (id,a) values (72,90);
+insert into t (id,a) values (72,91);
+insert into t (id,a) values (72,92);
+insert into t (id,a) values (72,93);
+insert into t (id,a) values (72,94);
+insert into t (id,a) values (72,95);
+insert into t (id,a) values (72,96);
+insert into t (id,a) values (72,97);
+insert into t (id,a) values (72,98);
+insert into t (id,a) values (72,99);
+insert into t (id,a) values (73,0);
+insert into t (id,a) values (73,1);
+insert into t (id,a) values (73,2);
+insert into t (id,a) values (73,3);
+insert into t (id,a) values (73,4);
+insert into t (id,a) values (73,5);
+insert into t (id,a) values (73,6);
+insert into t (id,a) values (73,7);
+insert into t (id,a) values (73,8);
+insert into t (id,a) values (73,9);
+insert into t (id,a) values (73,10);
+insert into t (id,a) values (73,11);
+insert into t (id,a) values (73,12);
+insert into t (id,a) values (73,13);
+insert into t (id,a) values (73,14);
+insert into t (id,a) values (73,15);
+insert into t (id,a) values (73,16);
+insert into t (id,a) values (73,17);
+insert into t (id,a) values (73,18);
+insert into t (id,a) values (73,19);
+insert into t (id,a) values (73,20);
+insert into t (id,a) values (73,21);
+insert into t (id,a) values (73,22);
+insert into t (id,a) values (73,23);
+insert into t (id,a) values (73,24);
+insert into t (id,a) values (73,25);
+insert into t (id,a) values (73,26);
+insert into t (id,a) values (73,27);
+insert into t (id,a) values (73,28);
+insert into t (id,a) values (73,29);
+insert into t (id,a) values (73,30);
+insert into t (id,a) values (73,31);
+insert into t (id,a) values (73,32);
+insert into t (id,a) values (73,33);
+insert into t (id,a) values (73,34);
+insert into t (id,a) values (73,35);
+insert into t (id,a) values (73,36);
+insert into t (id,a) values (73,37);
+insert into t (id,a) values (73,38);
+insert into t (id,a) values (73,39);
+insert into t (id,a) values (73,40);
+insert into t (id,a) values (73,41);
+insert into t (id,a) values (73,42);
+insert into t (id,a) values (73,43);
+insert into t (id,a) values (73,44);
+insert into t (id,a) values (73,45);
+insert into t (id,a) values (73,46);
+insert into t (id,a) values (73,47);
+insert into t (id,a) values (73,48);
+insert into t (id,a) values (73,49);
+insert into t (id,a) values (73,50);
+insert into t (id,a) values (73,51);
+insert into t (id,a) values (73,52);
+insert into t (id,a) values (73,53);
+insert into t (id,a) values (73,54);
+insert into t (id,a) values (73,55);
+insert into t (id,a) values (73,56);
+insert into t (id,a) values (73,57);
+insert into t (id,a) values (73,58);
+insert into t (id,a) values (73,59);
+insert into t (id,a) values (73,60);
+insert into t (id,a) values (73,61);
+insert into t (id,a) values (73,62);
+insert into t (id,a) values (73,63);
+insert into t (id,a) values (73,64);
+insert into t (id,a) values (73,65);
+insert into t (id,a) values (73,66);
+insert into t (id,a) values (73,67);
+insert into t (id,a) values (73,68);
+insert into t (id,a) values (73,69);
+insert into t (id,a) values (73,70);
+insert into t (id,a) values (73,71);
+insert into t (id,a) values (73,72);
+insert into t (id,a) values (73,73);
+insert into t (id,a) values (73,74);
+insert into t (id,a) values (73,75);
+insert into t (id,a) values (73,76);
+insert into t (id,a) values (73,77);
+insert into t (id,a) values (73,78);
+insert into t (id,a) values (73,79);
+insert into t (id,a) values (73,80);
+insert into t (id,a) values (73,81);
+insert into t (id,a) values (73,82);
+insert into t (id,a) values (73,83);
+insert into t (id,a) values (73,84);
+insert into t (id,a) values (73,85);
+insert into t (id,a) values (73,86);
+insert into t (id,a) values (73,87);
+insert into t (id,a) values (73,88);
+insert into t (id,a) values (73,89);
+insert into t (id,a) values (73,90);
+insert into t (id,a) values (73,91);
+insert into t (id,a) values (73,92);
+insert into t (id,a) values (73,93);
+insert into t (id,a) values (73,94);
+insert into t (id,a) values (73,95);
+insert into t (id,a) values (73,96);
+insert into t (id,a) values (73,97);
+insert into t (id,a) values (73,98);
+insert into t (id,a) values (73,99);
+insert into t (id,a) values (74,0);
+insert into t (id,a) values (74,1);
+insert into t (id,a) values (74,2);
+insert into t (id,a) values (74,3);
+insert into t (id,a) values (74,4);
+insert into t (id,a) values (74,5);
+insert into t (id,a) values (74,6);
+insert into t (id,a) values (74,7);
+insert into t (id,a) values (74,8);
+insert into t (id,a) values (74,9);
+insert into t (id,a) values (74,10);
+insert into t (id,a) values (74,11);
+insert into t (id,a) values (74,12);
+insert into t (id,a) values (74,13);
+insert into t (id,a) values (74,14);
+insert into t (id,a) values (74,15);
+insert into t (id,a) values (74,16);
+insert into t (id,a) values (74,17);
+insert into t (id,a) values (74,18);
+insert into t (id,a) values (74,19);
+insert into t (id,a) values (74,20);
+insert into t (id,a) values (74,21);
+insert into t (id,a) values (74,22);
+insert into t (id,a) values (74,23);
+insert into t (id,a) values (74,24);
+insert into t (id,a) values (74,25);
+insert into t (id,a) values (74,26);
+insert into t (id,a) values (74,27);
+insert into t (id,a) values (74,28);
+insert into t (id,a) values (74,29);
+insert into t (id,a) values (74,30);
+insert into t (id,a) values (74,31);
+insert into t (id,a) values (74,32);
+insert into t (id,a) values (74,33);
+insert into t (id,a) values (74,34);
+insert into t (id,a) values (74,35);
+insert into t (id,a) values (74,36);
+insert into t (id,a) values (74,37);
+insert into t (id,a) values (74,38);
+insert into t (id,a) values (74,39);
+insert into t (id,a) values (74,40);
+insert into t (id,a) values (74,41);
+insert into t (id,a) values (74,42);
+insert into t (id,a) values (74,43);
+insert into t (id,a) values (74,44);
+insert into t (id,a) values (74,45);
+insert into t (id,a) values (74,46);
+insert into t (id,a) values (74,47);
+insert into t (id,a) values (74,48);
+insert into t (id,a) values (74,49);
+insert into t (id,a) values (74,50);
+insert into t (id,a) values (74,51);
+insert into t (id,a) values (74,52);
+insert into t (id,a) values (74,53);
+insert into t (id,a) values (74,54);
+insert into t (id,a) values (74,55);
+insert into t (id,a) values (74,56);
+insert into t (id,a) values (74,57);
+insert into t (id,a) values (74,58);
+insert into t (id,a) values (74,59);
+insert into t (id,a) values (74,60);
+insert into t (id,a) values (74,61);
+insert into t (id,a) values (74,62);
+insert into t (id,a) values (74,63);
+insert into t (id,a) values (74,64);
+insert into t (id,a) values (74,65);
+insert into t (id,a) values (74,66);
+insert into t (id,a) values (74,67);
+insert into t (id,a) values (74,68);
+insert into t (id,a) values (74,69);
+insert into t (id,a) values (74,70);
+insert into t (id,a) values (74,71);
+insert into t (id,a) values (74,72);
+insert into t (id,a) values (74,73);
+insert into t (id,a) values (74,74);
+insert into t (id,a) values (74,75);
+insert into t (id,a) values (74,76);
+insert into t (id,a) values (74,77);
+insert into t (id,a) values (74,78);
+insert into t (id,a) values (74,79);
+insert into t (id,a) values (74,80);
+insert into t (id,a) values (74,81);
+insert into t (id,a) values (74,82);
+insert into t (id,a) values (74,83);
+insert into t (id,a) values (74,84);
+insert into t (id,a) values (74,85);
+insert into t (id,a) values (74,86);
+insert into t (id,a) values (74,87);
+insert into t (id,a) values (74,88);
+insert into t (id,a) values (74,89);
+insert into t (id,a) values (74,90);
+insert into t (id,a) values (74,91);
+insert into t (id,a) values (74,92);
+insert into t (id,a) values (74,93);
+insert into t (id,a) values (74,94);
+insert into t (id,a) values (74,95);
+insert into t (id,a) values (74,96);
+insert into t (id,a) values (74,97);
+insert into t (id,a) values (74,98);
+insert into t (id,a) values (74,99);
+insert into t (id,a) values (75,0);
+insert into t (id,a) values (75,1);
+insert into t (id,a) values (75,2);
+insert into t (id,a) values (75,3);
+insert into t (id,a) values (75,4);
+insert into t (id,a) values (75,5);
+insert into t (id,a) values (75,6);
+insert into t (id,a) values (75,7);
+insert into t (id,a) values (75,8);
+insert into t (id,a) values (75,9);
+insert into t (id,a) values (75,10);
+insert into t (id,a) values (75,11);
+insert into t (id,a) values (75,12);
+insert into t (id,a) values (75,13);
+insert into t (id,a) values (75,14);
+insert into t (id,a) values (75,15);
+insert into t (id,a) values (75,16);
+insert into t (id,a) values (75,17);
+insert into t (id,a) values (75,18);
+insert into t (id,a) values (75,19);
+insert into t (id,a) values (75,20);
+insert into t (id,a) values (75,21);
+insert into t (id,a) values (75,22);
+insert into t (id,a) values (75,23);
+insert into t (id,a) values (75,24);
+insert into t (id,a) values (75,25);
+insert into t (id,a) values (75,26);
+insert into t (id,a) values (75,27);
+insert into t (id,a) values (75,28);
+insert into t (id,a) values (75,29);
+insert into t (id,a) values (75,30);
+insert into t (id,a) values (75,31);
+insert into t (id,a) values (75,32);
+insert into t (id,a) values (75,33);
+insert into t (id,a) values (75,34);
+insert into t (id,a) values (75,35);
+insert into t (id,a) values (75,36);
+insert into t (id,a) values (75,37);
+insert into t (id,a) values (75,38);
+insert into t (id,a) values (75,39);
+insert into t (id,a) values (75,40);
+insert into t (id,a) values (75,41);
+insert into t (id,a) values (75,42);
+insert into t (id,a) values (75,43);
+insert into t (id,a) values (75,44);
+insert into t (id,a) values (75,45);
+insert into t (id,a) values (75,46);
+insert into t (id,a) values (75,47);
+insert into t (id,a) values (75,48);
+insert into t (id,a) values (75,49);
+insert into t (id,a) values (75,50);
+insert into t (id,a) values (75,51);
+insert into t (id,a) values (75,52);
+insert into t (id,a) values (75,53);
+insert into t (id,a) values (75,54);
+insert into t (id,a) values (75,55);
+insert into t (id,a) values (75,56);
+insert into t (id,a) values (75,57);
+insert into t (id,a) values (75,58);
+insert into t (id,a) values (75,59);
+insert into t (id,a) values (75,60);
+insert into t (id,a) values (75,61);
+insert into t (id,a) values (75,62);
+insert into t (id,a) values (75,63);
+insert into t (id,a) values (75,64);
+insert into t (id,a) values (75,65);
+insert into t (id,a) values (75,66);
+insert into t (id,a) values (75,67);
+insert into t (id,a) values (75,68);
+insert into t (id,a) values (75,69);
+insert into t (id,a) values (75,70);
+insert into t (id,a) values (75,71);
+insert into t (id,a) values (75,72);
+insert into t (id,a) values (75,73);
+insert into t (id,a) values (75,74);
+insert into t (id,a) values (75,75);
+insert into t (id,a) values (75,76);
+insert into t (id,a) values (75,77);
+insert into t (id,a) values (75,78);
+insert into t (id,a) values (75,79);
+insert into t (id,a) values (75,80);
+insert into t (id,a) values (75,81);
+insert into t (id,a) values (75,82);
+insert into t (id,a) values (75,83);
+insert into t (id,a) values (75,84);
+insert into t (id,a) values (75,85);
+insert into t (id,a) values (75,86);
+insert into t (id,a) values (75,87);
+insert into t (id,a) values (75,88);
+insert into t (id,a) values (75,89);
+insert into t (id,a) values (75,90);
+insert into t (id,a) values (75,91);
+insert into t (id,a) values (75,92);
+insert into t (id,a) values (75,93);
+insert into t (id,a) values (75,94);
+insert into t (id,a) values (75,95);
+insert into t (id,a) values (75,96);
+insert into t (id,a) values (75,97);
+insert into t (id,a) values (75,98);
+insert into t (id,a) values (75,99);
+insert into t (id,a) values (76,0);
+insert into t (id,a) values (76,1);
+insert into t (id,a) values (76,2);
+insert into t (id,a) values (76,3);
+insert into t (id,a) values (76,4);
+insert into t (id,a) values (76,5);
+insert into t (id,a) values (76,6);
+insert into t (id,a) values (76,7);
+insert into t (id,a) values (76,8);
+insert into t (id,a) values (76,9);
+insert into t (id,a) values (76,10);
+insert into t (id,a) values (76,11);
+insert into t (id,a) values (76,12);
+insert into t (id,a) values (76,13);
+insert into t (id,a) values (76,14);
+insert into t (id,a) values (76,15);
+insert into t (id,a) values (76,16);
+insert into t (id,a) values (76,17);
+insert into t (id,a) values (76,18);
+insert into t (id,a) values (76,19);
+insert into t (id,a) values (76,20);
+insert into t (id,a) values (76,21);
+insert into t (id,a) values (76,22);
+insert into t (id,a) values (76,23);
+insert into t (id,a) values (76,24);
+insert into t (id,a) values (76,25);
+insert into t (id,a) values (76,26);
+insert into t (id,a) values (76,27);
+insert into t (id,a) values (76,28);
+insert into t (id,a) values (76,29);
+insert into t (id,a) values (76,30);
+insert into t (id,a) values (76,31);
+insert into t (id,a) values (76,32);
+insert into t (id,a) values (76,33);
+insert into t (id,a) values (76,34);
+insert into t (id,a) values (76,35);
+insert into t (id,a) values (76,36);
+insert into t (id,a) values (76,37);
+insert into t (id,a) values (76,38);
+insert into t (id,a) values (76,39);
+insert into t (id,a) values (76,40);
+insert into t (id,a) values (76,41);
+insert into t (id,a) values (76,42);
+insert into t (id,a) values (76,43);
+insert into t (id,a) values (76,44);
+insert into t (id,a) values (76,45);
+insert into t (id,a) values (76,46);
+insert into t (id,a) values (76,47);
+insert into t (id,a) values (76,48);
+insert into t (id,a) values (76,49);
+insert into t (id,a) values (76,50);
+insert into t (id,a) values (76,51);
+insert into t (id,a) values (76,52);
+insert into t (id,a) values (76,53);
+insert into t (id,a) values (76,54);
+insert into t (id,a) values (76,55);
+insert into t (id,a) values (76,56);
+insert into t (id,a) values (76,57);
+insert into t (id,a) values (76,58);
+insert into t (id,a) values (76,59);
+insert into t (id,a) values (76,60);
+insert into t (id,a) values (76,61);
+insert into t (id,a) values (76,62);
+insert into t (id,a) values (76,63);
+insert into t (id,a) values (76,64);
+insert into t (id,a) values (76,65);
+insert into t (id,a) values (76,66);
+insert into t (id,a) values (76,67);
+insert into t (id,a) values (76,68);
+insert into t (id,a) values (76,69);
+insert into t (id,a) values (76,70);
+insert into t (id,a) values (76,71);
+insert into t (id,a) values (76,72);
+insert into t (id,a) values (76,73);
+insert into t (id,a) values (76,74);
+insert into t (id,a) values (76,75);
+insert into t (id,a) values (76,76);
+insert into t (id,a) values (76,77);
+insert into t (id,a) values (76,78);
+insert into t (id,a) values (76,79);
+insert into t (id,a) values (76,80);
+insert into t (id,a) values (76,81);
+insert into t (id,a) values (76,82);
+insert into t (id,a) values (76,83);
+insert into t (id,a) values (76,84);
+insert into t (id,a) values (76,85);
+insert into t (id,a) values (76,86);
+insert into t (id,a) values (76,87);
+insert into t (id,a) values (76,88);
+insert into t (id,a) values (76,89);
+insert into t (id,a) values (76,90);
+insert into t (id,a) values (76,91);
+insert into t (id,a) values (76,92);
+insert into t (id,a) values (76,93);
+insert into t (id,a) values (76,94);
+insert into t (id,a) values (76,95);
+insert into t (id,a) values (76,96);
+insert into t (id,a) values (76,97);
+insert into t (id,a) values (76,98);
+insert into t (id,a) values (76,99);
+insert into t (id,a) values (77,0);
+insert into t (id,a) values (77,1);
+insert into t (id,a) values (77,2);
+insert into t (id,a) values (77,3);
+insert into t (id,a) values (77,4);
+insert into t (id,a) values (77,5);
+insert into t (id,a) values (77,6);
+insert into t (id,a) values (77,7);
+insert into t (id,a) values (77,8);
+insert into t (id,a) values (77,9);
+insert into t (id,a) values (77,10);
+insert into t (id,a) values (77,11);
+insert into t (id,a) values (77,12);
+insert into t (id,a) values (77,13);
+insert into t (id,a) values (77,14);
+insert into t (id,a) values (77,15);
+insert into t (id,a) values (77,16);
+insert into t (id,a) values (77,17);
+insert into t (id,a) values (77,18);
+insert into t (id,a) values (77,19);
+insert into t (id,a) values (77,20);
+insert into t (id,a) values (77,21);
+insert into t (id,a) values (77,22);
+insert into t (id,a) values (77,23);
+insert into t (id,a) values (77,24);
+insert into t (id,a) values (77,25);
+insert into t (id,a) values (77,26);
+insert into t (id,a) values (77,27);
+insert into t (id,a) values (77,28);
+insert into t (id,a) values (77,29);
+insert into t (id,a) values (77,30);
+insert into t (id,a) values (77,31);
+insert into t (id,a) values (77,32);
+insert into t (id,a) values (77,33);
+insert into t (id,a) values (77,34);
+insert into t (id,a) values (77,35);
+insert into t (id,a) values (77,36);
+insert into t (id,a) values (77,37);
+insert into t (id,a) values (77,38);
+insert into t (id,a) values (77,39);
+insert into t (id,a) values (77,40);
+insert into t (id,a) values (77,41);
+insert into t (id,a) values (77,42);
+insert into t (id,a) values (77,43);
+insert into t (id,a) values (77,44);
+insert into t (id,a) values (77,45);
+insert into t (id,a) values (77,46);
+insert into t (id,a) values (77,47);
+insert into t (id,a) values (77,48);
+insert into t (id,a) values (77,49);
+insert into t (id,a) values (77,50);
+insert into t (id,a) values (77,51);
+insert into t (id,a) values (77,52);
+insert into t (id,a) values (77,53);
+insert into t (id,a) values (77,54);
+insert into t (id,a) values (77,55);
+insert into t (id,a) values (77,56);
+insert into t (id,a) values (77,57);
+insert into t (id,a) values (77,58);
+insert into t (id,a) values (77,59);
+insert into t (id,a) values (77,60);
+insert into t (id,a) values (77,61);
+insert into t (id,a) values (77,62);
+insert into t (id,a) values (77,63);
+insert into t (id,a) values (77,64);
+insert into t (id,a) values (77,65);
+insert into t (id,a) values (77,66);
+insert into t (id,a) values (77,67);
+insert into t (id,a) values (77,68);
+insert into t (id,a) values (77,69);
+insert into t (id,a) values (77,70);
+insert into t (id,a) values (77,71);
+insert into t (id,a) values (77,72);
+insert into t (id,a) values (77,73);
+insert into t (id,a) values (77,74);
+insert into t (id,a) values (77,75);
+insert into t (id,a) values (77,76);
+insert into t (id,a) values (77,77);
+insert into t (id,a) values (77,78);
+insert into t (id,a) values (77,79);
+insert into t (id,a) values (77,80);
+insert into t (id,a) values (77,81);
+insert into t (id,a) values (77,82);
+insert into t (id,a) values (77,83);
+insert into t (id,a) values (77,84);
+insert into t (id,a) values (77,85);
+insert into t (id,a) values (77,86);
+insert into t (id,a) values (77,87);
+insert into t (id,a) values (77,88);
+insert into t (id,a) values (77,89);
+insert into t (id,a) values (77,90);
+insert into t (id,a) values (77,91);
+insert into t (id,a) values (77,92);
+insert into t (id,a) values (77,93);
+insert into t (id,a) values (77,94);
+insert into t (id,a) values (77,95);
+insert into t (id,a) values (77,96);
+insert into t (id,a) values (77,97);
+insert into t (id,a) values (77,98);
+insert into t (id,a) values (77,99);
+insert into t (id,a) values (78,0);
+insert into t (id,a) values (78,1);
+insert into t (id,a) values (78,2);
+insert into t (id,a) values (78,3);
+insert into t (id,a) values (78,4);
+insert into t (id,a) values (78,5);
+insert into t (id,a) values (78,6);
+insert into t (id,a) values (78,7);
+insert into t (id,a) values (78,8);
+insert into t (id,a) values (78,9);
+insert into t (id,a) values (78,10);
+insert into t (id,a) values (78,11);
+insert into t (id,a) values (78,12);
+insert into t (id,a) values (78,13);
+insert into t (id,a) values (78,14);
+insert into t (id,a) values (78,15);
+insert into t (id,a) values (78,16);
+insert into t (id,a) values (78,17);
+insert into t (id,a) values (78,18);
+insert into t (id,a) values (78,19);
+insert into t (id,a) values (78,20);
+insert into t (id,a) values (78,21);
+insert into t (id,a) values (78,22);
+insert into t (id,a) values (78,23);
+insert into t (id,a) values (78,24);
+insert into t (id,a) values (78,25);
+insert into t (id,a) values (78,26);
+insert into t (id,a) values (78,27);
+insert into t (id,a) values (78,28);
+insert into t (id,a) values (78,29);
+insert into t (id,a) values (78,30);
+insert into t (id,a) values (78,31);
+insert into t (id,a) values (78,32);
+insert into t (id,a) values (78,33);
+insert into t (id,a) values (78,34);
+insert into t (id,a) values (78,35);
+insert into t (id,a) values (78,36);
+insert into t (id,a) values (78,37);
+insert into t (id,a) values (78,38);
+insert into t (id,a) values (78,39);
+insert into t (id,a) values (78,40);
+insert into t (id,a) values (78,41);
+insert into t (id,a) values (78,42);
+insert into t (id,a) values (78,43);
+insert into t (id,a) values (78,44);
+insert into t (id,a) values (78,45);
+insert into t (id,a) values (78,46);
+insert into t (id,a) values (78,47);
+insert into t (id,a) values (78,48);
+insert into t (id,a) values (78,49);
+insert into t (id,a) values (78,50);
+insert into t (id,a) values (78,51);
+insert into t (id,a) values (78,52);
+insert into t (id,a) values (78,53);
+insert into t (id,a) values (78,54);
+insert into t (id,a) values (78,55);
+insert into t (id,a) values (78,56);
+insert into t (id,a) values (78,57);
+insert into t (id,a) values (78,58);
+insert into t (id,a) values (78,59);
+insert into t (id,a) values (78,60);
+insert into t (id,a) values (78,61);
+insert into t (id,a) values (78,62);
+insert into t (id,a) values (78,63);
+insert into t (id,a) values (78,64);
+insert into t (id,a) values (78,65);
+insert into t (id,a) values (78,66);
+insert into t (id,a) values (78,67);
+insert into t (id,a) values (78,68);
+insert into t (id,a) values (78,69);
+insert into t (id,a) values (78,70);
+insert into t (id,a) values (78,71);
+insert into t (id,a) values (78,72);
+insert into t (id,a) values (78,73);
+insert into t (id,a) values (78,74);
+insert into t (id,a) values (78,75);
+insert into t (id,a) values (78,76);
+insert into t (id,a) values (78,77);
+insert into t (id,a) values (78,78);
+insert into t (id,a) values (78,79);
+insert into t (id,a) values (78,80);
+insert into t (id,a) values (78,81);
+insert into t (id,a) values (78,82);
+insert into t (id,a) values (78,83);
+insert into t (id,a) values (78,84);
+insert into t (id,a) values (78,85);
+insert into t (id,a) values (78,86);
+insert into t (id,a) values (78,87);
+insert into t (id,a) values (78,88);
+insert into t (id,a) values (78,89);
+insert into t (id,a) values (78,90);
+insert into t (id,a) values (78,91);
+insert into t (id,a) values (78,92);
+insert into t (id,a) values (78,93);
+insert into t (id,a) values (78,94);
+insert into t (id,a) values (78,95);
+insert into t (id,a) values (78,96);
+insert into t (id,a) values (78,97);
+insert into t (id,a) values (78,98);
+insert into t (id,a) values (78,99);
+insert into t (id,a) values (79,0);
+insert into t (id,a) values (79,1);
+insert into t (id,a) values (79,2);
+insert into t (id,a) values (79,3);
+insert into t (id,a) values (79,4);
+insert into t (id,a) values (79,5);
+insert into t (id,a) values (79,6);
+insert into t (id,a) values (79,7);
+insert into t (id,a) values (79,8);
+insert into t (id,a) values (79,9);
+insert into t (id,a) values (79,10);
+insert into t (id,a) values (79,11);
+insert into t (id,a) values (79,12);
+insert into t (id,a) values (79,13);
+insert into t (id,a) values (79,14);
+insert into t (id,a) values (79,15);
+insert into t (id,a) values (79,16);
+insert into t (id,a) values (79,17);
+insert into t (id,a) values (79,18);
+insert into t (id,a) values (79,19);
+insert into t (id,a) values (79,20);
+insert into t (id,a) values (79,21);
+insert into t (id,a) values (79,22);
+insert into t (id,a) values (79,23);
+insert into t (id,a) values (79,24);
+insert into t (id,a) values (79,25);
+insert into t (id,a) values (79,26);
+insert into t (id,a) values (79,27);
+insert into t (id,a) values (79,28);
+insert into t (id,a) values (79,29);
+insert into t (id,a) values (79,30);
+insert into t (id,a) values (79,31);
+insert into t (id,a) values (79,32);
+insert into t (id,a) values (79,33);
+insert into t (id,a) values (79,34);
+insert into t (id,a) values (79,35);
+insert into t (id,a) values (79,36);
+insert into t (id,a) values (79,37);
+insert into t (id,a) values (79,38);
+insert into t (id,a) values (79,39);
+insert into t (id,a) values (79,40);
+insert into t (id,a) values (79,41);
+insert into t (id,a) values (79,42);
+insert into t (id,a) values (79,43);
+insert into t (id,a) values (79,44);
+insert into t (id,a) values (79,45);
+insert into t (id,a) values (79,46);
+insert into t (id,a) values (79,47);
+insert into t (id,a) values (79,48);
+insert into t (id,a) values (79,49);
+insert into t (id,a) values (79,50);
+insert into t (id,a) values (79,51);
+insert into t (id,a) values (79,52);
+insert into t (id,a) values (79,53);
+insert into t (id,a) values (79,54);
+insert into t (id,a) values (79,55);
+insert into t (id,a) values (79,56);
+insert into t (id,a) values (79,57);
+insert into t (id,a) values (79,58);
+insert into t (id,a) values (79,59);
+insert into t (id,a) values (79,60);
+insert into t (id,a) values (79,61);
+insert into t (id,a) values (79,62);
+insert into t (id,a) values (79,63);
+insert into t (id,a) values (79,64);
+insert into t (id,a) values (79,65);
+insert into t (id,a) values (79,66);
+insert into t (id,a) values (79,67);
+insert into t (id,a) values (79,68);
+insert into t (id,a) values (79,69);
+insert into t (id,a) values (79,70);
+insert into t (id,a) values (79,71);
+insert into t (id,a) values (79,72);
+insert into t (id,a) values (79,73);
+insert into t (id,a) values (79,74);
+insert into t (id,a) values (79,75);
+insert into t (id,a) values (79,76);
+insert into t (id,a) values (79,77);
+insert into t (id,a) values (79,78);
+insert into t (id,a) values (79,79);
+insert into t (id,a) values (79,80);
+insert into t (id,a) values (79,81);
+insert into t (id,a) values (79,82);
+insert into t (id,a) values (79,83);
+insert into t (id,a) values (79,84);
+insert into t (id,a) values (79,85);
+insert into t (id,a) values (79,86);
+insert into t (id,a) values (79,87);
+insert into t (id,a) values (79,88);
+insert into t (id,a) values (79,89);
+insert into t (id,a) values (79,90);
+insert into t (id,a) values (79,91);
+insert into t (id,a) values (79,92);
+insert into t (id,a) values (79,93);
+insert into t (id,a) values (79,94);
+insert into t (id,a) values (79,95);
+insert into t (id,a) values (79,96);
+insert into t (id,a) values (79,97);
+insert into t (id,a) values (79,98);
+insert into t (id,a) values (79,99);
+insert into t (id,a) values (80,0);
+insert into t (id,a) values (80,1);
+insert into t (id,a) values (80,2);
+insert into t (id,a) values (80,3);
+insert into t (id,a) values (80,4);
+insert into t (id,a) values (80,5);
+insert into t (id,a) values (80,6);
+insert into t (id,a) values (80,7);
+insert into t (id,a) values (80,8);
+insert into t (id,a) values (80,9);
+insert into t (id,a) values (80,10);
+insert into t (id,a) values (80,11);
+insert into t (id,a) values (80,12);
+insert into t (id,a) values (80,13);
+insert into t (id,a) values (80,14);
+insert into t (id,a) values (80,15);
+insert into t (id,a) values (80,16);
+insert into t (id,a) values (80,17);
+insert into t (id,a) values (80,18);
+insert into t (id,a) values (80,19);
+insert into t (id,a) values (80,20);
+insert into t (id,a) values (80,21);
+insert into t (id,a) values (80,22);
+insert into t (id,a) values (80,23);
+insert into t (id,a) values (80,24);
+insert into t (id,a) values (80,25);
+insert into t (id,a) values (80,26);
+insert into t (id,a) values (80,27);
+insert into t (id,a) values (80,28);
+insert into t (id,a) values (80,29);
+insert into t (id,a) values (80,30);
+insert into t (id,a) values (80,31);
+insert into t (id,a) values (80,32);
+insert into t (id,a) values (80,33);
+insert into t (id,a) values (80,34);
+insert into t (id,a) values (80,35);
+insert into t (id,a) values (80,36);
+insert into t (id,a) values (80,37);
+insert into t (id,a) values (80,38);
+insert into t (id,a) values (80,39);
+insert into t (id,a) values (80,40);
+insert into t (id,a) values (80,41);
+insert into t (id,a) values (80,42);
+insert into t (id,a) values (80,43);
+insert into t (id,a) values (80,44);
+insert into t (id,a) values (80,45);
+insert into t (id,a) values (80,46);
+insert into t (id,a) values (80,47);
+insert into t (id,a) values (80,48);
+insert into t (id,a) values (80,49);
+insert into t (id,a) values (80,50);
+insert into t (id,a) values (80,51);
+insert into t (id,a) values (80,52);
+insert into t (id,a) values (80,53);
+insert into t (id,a) values (80,54);
+insert into t (id,a) values (80,55);
+insert into t (id,a) values (80,56);
+insert into t (id,a) values (80,57);
+insert into t (id,a) values (80,58);
+insert into t (id,a) values (80,59);
+insert into t (id,a) values (80,60);
+insert into t (id,a) values (80,61);
+insert into t (id,a) values (80,62);
+insert into t (id,a) values (80,63);
+insert into t (id,a) values (80,64);
+insert into t (id,a) values (80,65);
+insert into t (id,a) values (80,66);
+insert into t (id,a) values (80,67);
+insert into t (id,a) values (80,68);
+insert into t (id,a) values (80,69);
+insert into t (id,a) values (80,70);
+insert into t (id,a) values (80,71);
+insert into t (id,a) values (80,72);
+insert into t (id,a) values (80,73);
+insert into t (id,a) values (80,74);
+insert into t (id,a) values (80,75);
+insert into t (id,a) values (80,76);
+insert into t (id,a) values (80,77);
+insert into t (id,a) values (80,78);
+insert into t (id,a) values (80,79);
+insert into t (id,a) values (80,80);
+insert into t (id,a) values (80,81);
+insert into t (id,a) values (80,82);
+insert into t (id,a) values (80,83);
+insert into t (id,a) values (80,84);
+insert into t (id,a) values (80,85);
+insert into t (id,a) values (80,86);
+insert into t (id,a) values (80,87);
+insert into t (id,a) values (80,88);
+insert into t (id,a) values (80,89);
+insert into t (id,a) values (80,90);
+insert into t (id,a) values (80,91);
+insert into t (id,a) values (80,92);
+insert into t (id,a) values (80,93);
+insert into t (id,a) values (80,94);
+insert into t (id,a) values (80,95);
+insert into t (id,a) values (80,96);
+insert into t (id,a) values (80,97);
+insert into t (id,a) values (80,98);
+insert into t (id,a) values (80,99);
+insert into t (id,a) values (81,0);
+insert into t (id,a) values (81,1);
+insert into t (id,a) values (81,2);
+insert into t (id,a) values (81,3);
+insert into t (id,a) values (81,4);
+insert into t (id,a) values (81,5);
+insert into t (id,a) values (81,6);
+insert into t (id,a) values (81,7);
+insert into t (id,a) values (81,8);
+insert into t (id,a) values (81,9);
+insert into t (id,a) values (81,10);
+insert into t (id,a) values (81,11);
+insert into t (id,a) values (81,12);
+insert into t (id,a) values (81,13);
+insert into t (id,a) values (81,14);
+insert into t (id,a) values (81,15);
+insert into t (id,a) values (81,16);
+insert into t (id,a) values (81,17);
+insert into t (id,a) values (81,18);
+insert into t (id,a) values (81,19);
+insert into t (id,a) values (81,20);
+insert into t (id,a) values (81,21);
+insert into t (id,a) values (81,22);
+insert into t (id,a) values (81,23);
+insert into t (id,a) values (81,24);
+insert into t (id,a) values (81,25);
+insert into t (id,a) values (81,26);
+insert into t (id,a) values (81,27);
+insert into t (id,a) values (81,28);
+insert into t (id,a) values (81,29);
+insert into t (id,a) values (81,30);
+insert into t (id,a) values (81,31);
+insert into t (id,a) values (81,32);
+insert into t (id,a) values (81,33);
+insert into t (id,a) values (81,34);
+insert into t (id,a) values (81,35);
+insert into t (id,a) values (81,36);
+insert into t (id,a) values (81,37);
+insert into t (id,a) values (81,38);
+insert into t (id,a) values (81,39);
+insert into t (id,a) values (81,40);
+insert into t (id,a) values (81,41);
+insert into t (id,a) values (81,42);
+insert into t (id,a) values (81,43);
+insert into t (id,a) values (81,44);
+insert into t (id,a) values (81,45);
+insert into t (id,a) values (81,46);
+insert into t (id,a) values (81,47);
+insert into t (id,a) values (81,48);
+insert into t (id,a) values (81,49);
+insert into t (id,a) values (81,50);
+insert into t (id,a) values (81,51);
+insert into t (id,a) values (81,52);
+insert into t (id,a) values (81,53);
+insert into t (id,a) values (81,54);
+insert into t (id,a) values (81,55);
+insert into t (id,a) values (81,56);
+insert into t (id,a) values (81,57);
+insert into t (id,a) values (81,58);
+insert into t (id,a) values (81,59);
+insert into t (id,a) values (81,60);
+insert into t (id,a) values (81,61);
+insert into t (id,a) values (81,62);
+insert into t (id,a) values (81,63);
+insert into t (id,a) values (81,64);
+insert into t (id,a) values (81,65);
+insert into t (id,a) values (81,66);
+insert into t (id,a) values (81,67);
+insert into t (id,a) values (81,68);
+insert into t (id,a) values (81,69);
+insert into t (id,a) values (81,70);
+insert into t (id,a) values (81,71);
+insert into t (id,a) values (81,72);
+insert into t (id,a) values (81,73);
+insert into t (id,a) values (81,74);
+insert into t (id,a) values (81,75);
+insert into t (id,a) values (81,76);
+insert into t (id,a) values (81,77);
+insert into t (id,a) values (81,78);
+insert into t (id,a) values (81,79);
+insert into t (id,a) values (81,80);
+insert into t (id,a) values (81,81);
+insert into t (id,a) values (81,82);
+insert into t (id,a) values (81,83);
+insert into t (id,a) values (81,84);
+insert into t (id,a) values (81,85);
+insert into t (id,a) values (81,86);
+insert into t (id,a) values (81,87);
+insert into t (id,a) values (81,88);
+insert into t (id,a) values (81,89);
+insert into t (id,a) values (81,90);
+insert into t (id,a) values (81,91);
+insert into t (id,a) values (81,92);
+insert into t (id,a) values (81,93);
+insert into t (id,a) values (81,94);
+insert into t (id,a) values (81,95);
+insert into t (id,a) values (81,96);
+insert into t (id,a) values (81,97);
+insert into t (id,a) values (81,98);
+insert into t (id,a) values (81,99);
+insert into t (id,a) values (82,0);
+insert into t (id,a) values (82,1);
+insert into t (id,a) values (82,2);
+insert into t (id,a) values (82,3);
+insert into t (id,a) values (82,4);
+insert into t (id,a) values (82,5);
+insert into t (id,a) values (82,6);
+insert into t (id,a) values (82,7);
+insert into t (id,a) values (82,8);
+insert into t (id,a) values (82,9);
+insert into t (id,a) values (82,10);
+insert into t (id,a) values (82,11);
+insert into t (id,a) values (82,12);
+insert into t (id,a) values (82,13);
+insert into t (id,a) values (82,14);
+insert into t (id,a) values (82,15);
+insert into t (id,a) values (82,16);
+insert into t (id,a) values (82,17);
+insert into t (id,a) values (82,18);
+insert into t (id,a) values (82,19);
+insert into t (id,a) values (82,20);
+insert into t (id,a) values (82,21);
+insert into t (id,a) values (82,22);
+insert into t (id,a) values (82,23);
+insert into t (id,a) values (82,24);
+insert into t (id,a) values (82,25);
+insert into t (id,a) values (82,26);
+insert into t (id,a) values (82,27);
+insert into t (id,a) values (82,28);
+insert into t (id,a) values (82,29);
+insert into t (id,a) values (82,30);
+insert into t (id,a) values (82,31);
+insert into t (id,a) values (82,32);
+insert into t (id,a) values (82,33);
+insert into t (id,a) values (82,34);
+insert into t (id,a) values (82,35);
+insert into t (id,a) values (82,36);
+insert into t (id,a) values (82,37);
+insert into t (id,a) values (82,38);
+insert into t (id,a) values (82,39);
+insert into t (id,a) values (82,40);
+insert into t (id,a) values (82,41);
+insert into t (id,a) values (82,42);
+insert into t (id,a) values (82,43);
+insert into t (id,a) values (82,44);
+insert into t (id,a) values (82,45);
+insert into t (id,a) values (82,46);
+insert into t (id,a) values (82,47);
+insert into t (id,a) values (82,48);
+insert into t (id,a) values (82,49);
+insert into t (id,a) values (82,50);
+insert into t (id,a) values (82,51);
+insert into t (id,a) values (82,52);
+insert into t (id,a) values (82,53);
+insert into t (id,a) values (82,54);
+insert into t (id,a) values (82,55);
+insert into t (id,a) values (82,56);
+insert into t (id,a) values (82,57);
+insert into t (id,a) values (82,58);
+insert into t (id,a) values (82,59);
+insert into t (id,a) values (82,60);
+insert into t (id,a) values (82,61);
+insert into t (id,a) values (82,62);
+insert into t (id,a) values (82,63);
+insert into t (id,a) values (82,64);
+insert into t (id,a) values (82,65);
+insert into t (id,a) values (82,66);
+insert into t (id,a) values (82,67);
+insert into t (id,a) values (82,68);
+insert into t (id,a) values (82,69);
+insert into t (id,a) values (82,70);
+insert into t (id,a) values (82,71);
+insert into t (id,a) values (82,72);
+insert into t (id,a) values (82,73);
+insert into t (id,a) values (82,74);
+insert into t (id,a) values (82,75);
+insert into t (id,a) values (82,76);
+insert into t (id,a) values (82,77);
+insert into t (id,a) values (82,78);
+insert into t (id,a) values (82,79);
+insert into t (id,a) values (82,80);
+insert into t (id,a) values (82,81);
+insert into t (id,a) values (82,82);
+insert into t (id,a) values (82,83);
+insert into t (id,a) values (82,84);
+insert into t (id,a) values (82,85);
+insert into t (id,a) values (82,86);
+insert into t (id,a) values (82,87);
+insert into t (id,a) values (82,88);
+insert into t (id,a) values (82,89);
+insert into t (id,a) values (82,90);
+insert into t (id,a) values (82,91);
+insert into t (id,a) values (82,92);
+insert into t (id,a) values (82,93);
+insert into t (id,a) values (82,94);
+insert into t (id,a) values (82,95);
+insert into t (id,a) values (82,96);
+insert into t (id,a) values (82,97);
+insert into t (id,a) values (82,98);
+insert into t (id,a) values (82,99);
+insert into t (id,a) values (83,0);
+insert into t (id,a) values (83,1);
+insert into t (id,a) values (83,2);
+insert into t (id,a) values (83,3);
+insert into t (id,a) values (83,4);
+insert into t (id,a) values (83,5);
+insert into t (id,a) values (83,6);
+insert into t (id,a) values (83,7);
+insert into t (id,a) values (83,8);
+insert into t (id,a) values (83,9);
+insert into t (id,a) values (83,10);
+insert into t (id,a) values (83,11);
+insert into t (id,a) values (83,12);
+insert into t (id,a) values (83,13);
+insert into t (id,a) values (83,14);
+insert into t (id,a) values (83,15);
+insert into t (id,a) values (83,16);
+insert into t (id,a) values (83,17);
+insert into t (id,a) values (83,18);
+insert into t (id,a) values (83,19);
+insert into t (id,a) values (83,20);
+insert into t (id,a) values (83,21);
+insert into t (id,a) values (83,22);
+insert into t (id,a) values (83,23);
+insert into t (id,a) values (83,24);
+insert into t (id,a) values (83,25);
+insert into t (id,a) values (83,26);
+insert into t (id,a) values (83,27);
+insert into t (id,a) values (83,28);
+insert into t (id,a) values (83,29);
+insert into t (id,a) values (83,30);
+insert into t (id,a) values (83,31);
+insert into t (id,a) values (83,32);
+insert into t (id,a) values (83,33);
+insert into t (id,a) values (83,34);
+insert into t (id,a) values (83,35);
+insert into t (id,a) values (83,36);
+insert into t (id,a) values (83,37);
+insert into t (id,a) values (83,38);
+insert into t (id,a) values (83,39);
+insert into t (id,a) values (83,40);
+insert into t (id,a) values (83,41);
+insert into t (id,a) values (83,42);
+insert into t (id,a) values (83,43);
+insert into t (id,a) values (83,44);
+insert into t (id,a) values (83,45);
+insert into t (id,a) values (83,46);
+insert into t (id,a) values (83,47);
+insert into t (id,a) values (83,48);
+insert into t (id,a) values (83,49);
+insert into t (id,a) values (83,50);
+insert into t (id,a) values (83,51);
+insert into t (id,a) values (83,52);
+insert into t (id,a) values (83,53);
+insert into t (id,a) values (83,54);
+insert into t (id,a) values (83,55);
+insert into t (id,a) values (83,56);
+insert into t (id,a) values (83,57);
+insert into t (id,a) values (83,58);
+insert into t (id,a) values (83,59);
+insert into t (id,a) values (83,60);
+insert into t (id,a) values (83,61);
+insert into t (id,a) values (83,62);
+insert into t (id,a) values (83,63);
+insert into t (id,a) values (83,64);
+insert into t (id,a) values (83,65);
+insert into t (id,a) values (83,66);
+insert into t (id,a) values (83,67);
+insert into t (id,a) values (83,68);
+insert into t (id,a) values (83,69);
+insert into t (id,a) values (83,70);
+insert into t (id,a) values (83,71);
+insert into t (id,a) values (83,72);
+insert into t (id,a) values (83,73);
+insert into t (id,a) values (83,74);
+insert into t (id,a) values (83,75);
+insert into t (id,a) values (83,76);
+insert into t (id,a) values (83,77);
+insert into t (id,a) values (83,78);
+insert into t (id,a) values (83,79);
+insert into t (id,a) values (83,80);
+insert into t (id,a) values (83,81);
+insert into t (id,a) values (83,82);
+insert into t (id,a) values (83,83);
+insert into t (id,a) values (83,84);
+insert into t (id,a) values (83,85);
+insert into t (id,a) values (83,86);
+insert into t (id,a) values (83,87);
+insert into t (id,a) values (83,88);
+insert into t (id,a) values (83,89);
+insert into t (id,a) values (83,90);
+insert into t (id,a) values (83,91);
+insert into t (id,a) values (83,92);
+insert into t (id,a) values (83,93);
+insert into t (id,a) values (83,94);
+insert into t (id,a) values (83,95);
+insert into t (id,a) values (83,96);
+insert into t (id,a) values (83,97);
+insert into t (id,a) values (83,98);
+insert into t (id,a) values (83,99);
+insert into t (id,a) values (84,0);
+insert into t (id,a) values (84,1);
+insert into t (id,a) values (84,2);
+insert into t (id,a) values (84,3);
+insert into t (id,a) values (84,4);
+insert into t (id,a) values (84,5);
+insert into t (id,a) values (84,6);
+insert into t (id,a) values (84,7);
+insert into t (id,a) values (84,8);
+insert into t (id,a) values (84,9);
+insert into t (id,a) values (84,10);
+insert into t (id,a) values (84,11);
+insert into t (id,a) values (84,12);
+insert into t (id,a) values (84,13);
+insert into t (id,a) values (84,14);
+insert into t (id,a) values (84,15);
+insert into t (id,a) values (84,16);
+insert into t (id,a) values (84,17);
+insert into t (id,a) values (84,18);
+insert into t (id,a) values (84,19);
+insert into t (id,a) values (84,20);
+insert into t (id,a) values (84,21);
+insert into t (id,a) values (84,22);
+insert into t (id,a) values (84,23);
+insert into t (id,a) values (84,24);
+insert into t (id,a) values (84,25);
+insert into t (id,a) values (84,26);
+insert into t (id,a) values (84,27);
+insert into t (id,a) values (84,28);
+insert into t (id,a) values (84,29);
+insert into t (id,a) values (84,30);
+insert into t (id,a) values (84,31);
+insert into t (id,a) values (84,32);
+insert into t (id,a) values (84,33);
+insert into t (id,a) values (84,34);
+insert into t (id,a) values (84,35);
+insert into t (id,a) values (84,36);
+insert into t (id,a) values (84,37);
+insert into t (id,a) values (84,38);
+insert into t (id,a) values (84,39);
+insert into t (id,a) values (84,40);
+insert into t (id,a) values (84,41);
+insert into t (id,a) values (84,42);
+insert into t (id,a) values (84,43);
+insert into t (id,a) values (84,44);
+insert into t (id,a) values (84,45);
+insert into t (id,a) values (84,46);
+insert into t (id,a) values (84,47);
+insert into t (id,a) values (84,48);
+insert into t (id,a) values (84,49);
+insert into t (id,a) values (84,50);
+insert into t (id,a) values (84,51);
+insert into t (id,a) values (84,52);
+insert into t (id,a) values (84,53);
+insert into t (id,a) values (84,54);
+insert into t (id,a) values (84,55);
+insert into t (id,a) values (84,56);
+insert into t (id,a) values (84,57);
+insert into t (id,a) values (84,58);
+insert into t (id,a) values (84,59);
+insert into t (id,a) values (84,60);
+insert into t (id,a) values (84,61);
+insert into t (id,a) values (84,62);
+insert into t (id,a) values (84,63);
+insert into t (id,a) values (84,64);
+insert into t (id,a) values (84,65);
+insert into t (id,a) values (84,66);
+insert into t (id,a) values (84,67);
+insert into t (id,a) values (84,68);
+insert into t (id,a) values (84,69);
+insert into t (id,a) values (84,70);
+insert into t (id,a) values (84,71);
+insert into t (id,a) values (84,72);
+insert into t (id,a) values (84,73);
+insert into t (id,a) values (84,74);
+insert into t (id,a) values (84,75);
+insert into t (id,a) values (84,76);
+insert into t (id,a) values (84,77);
+insert into t (id,a) values (84,78);
+insert into t (id,a) values (84,79);
+insert into t (id,a) values (84,80);
+insert into t (id,a) values (84,81);
+insert into t (id,a) values (84,82);
+insert into t (id,a) values (84,83);
+insert into t (id,a) values (84,84);
+insert into t (id,a) values (84,85);
+insert into t (id,a) values (84,86);
+insert into t (id,a) values (84,87);
+insert into t (id,a) values (84,88);
+insert into t (id,a) values (84,89);
+insert into t (id,a) values (84,90);
+insert into t (id,a) values (84,91);
+insert into t (id,a) values (84,92);
+insert into t (id,a) values (84,93);
+insert into t (id,a) values (84,94);
+insert into t (id,a) values (84,95);
+insert into t (id,a) values (84,96);
+insert into t (id,a) values (84,97);
+insert into t (id,a) values (84,98);
+insert into t (id,a) values (84,99);
+insert into t (id,a) values (85,0);
+insert into t (id,a) values (85,1);
+insert into t (id,a) values (85,2);
+insert into t (id,a) values (85,3);
+insert into t (id,a) values (85,4);
+insert into t (id,a) values (85,5);
+insert into t (id,a) values (85,6);
+insert into t (id,a) values (85,7);
+insert into t (id,a) values (85,8);
+insert into t (id,a) values (85,9);
+insert into t (id,a) values (85,10);
+insert into t (id,a) values (85,11);
+insert into t (id,a) values (85,12);
+insert into t (id,a) values (85,13);
+insert into t (id,a) values (85,14);
+insert into t (id,a) values (85,15);
+insert into t (id,a) values (85,16);
+insert into t (id,a) values (85,17);
+insert into t (id,a) values (85,18);
+insert into t (id,a) values (85,19);
+insert into t (id,a) values (85,20);
+insert into t (id,a) values (85,21);
+insert into t (id,a) values (85,22);
+insert into t (id,a) values (85,23);
+insert into t (id,a) values (85,24);
+insert into t (id,a) values (85,25);
+insert into t (id,a) values (85,26);
+insert into t (id,a) values (85,27);
+insert into t (id,a) values (85,28);
+insert into t (id,a) values (85,29);
+insert into t (id,a) values (85,30);
+insert into t (id,a) values (85,31);
+insert into t (id,a) values (85,32);
+insert into t (id,a) values (85,33);
+insert into t (id,a) values (85,34);
+insert into t (id,a) values (85,35);
+insert into t (id,a) values (85,36);
+insert into t (id,a) values (85,37);
+insert into t (id,a) values (85,38);
+insert into t (id,a) values (85,39);
+insert into t (id,a) values (85,40);
+insert into t (id,a) values (85,41);
+insert into t (id,a) values (85,42);
+insert into t (id,a) values (85,43);
+insert into t (id,a) values (85,44);
+insert into t (id,a) values (85,45);
+insert into t (id,a) values (85,46);
+insert into t (id,a) values (85,47);
+insert into t (id,a) values (85,48);
+insert into t (id,a) values (85,49);
+insert into t (id,a) values (85,50);
+insert into t (id,a) values (85,51);
+insert into t (id,a) values (85,52);
+insert into t (id,a) values (85,53);
+insert into t (id,a) values (85,54);
+insert into t (id,a) values (85,55);
+insert into t (id,a) values (85,56);
+insert into t (id,a) values (85,57);
+insert into t (id,a) values (85,58);
+insert into t (id,a) values (85,59);
+insert into t (id,a) values (85,60);
+insert into t (id,a) values (85,61);
+insert into t (id,a) values (85,62);
+insert into t (id,a) values (85,63);
+insert into t (id,a) values (85,64);
+insert into t (id,a) values (85,65);
+insert into t (id,a) values (85,66);
+insert into t (id,a) values (85,67);
+insert into t (id,a) values (85,68);
+insert into t (id,a) values (85,69);
+insert into t (id,a) values (85,70);
+insert into t (id,a) values (85,71);
+insert into t (id,a) values (85,72);
+insert into t (id,a) values (85,73);
+insert into t (id,a) values (85,74);
+insert into t (id,a) values (85,75);
+insert into t (id,a) values (85,76);
+insert into t (id,a) values (85,77);
+insert into t (id,a) values (85,78);
+insert into t (id,a) values (85,79);
+insert into t (id,a) values (85,80);
+insert into t (id,a) values (85,81);
+insert into t (id,a) values (85,82);
+insert into t (id,a) values (85,83);
+insert into t (id,a) values (85,84);
+insert into t (id,a) values (85,85);
+insert into t (id,a) values (85,86);
+insert into t (id,a) values (85,87);
+insert into t (id,a) values (85,88);
+insert into t (id,a) values (85,89);
+insert into t (id,a) values (85,90);
+insert into t (id,a) values (85,91);
+insert into t (id,a) values (85,92);
+insert into t (id,a) values (85,93);
+insert into t (id,a) values (85,94);
+insert into t (id,a) values (85,95);
+insert into t (id,a) values (85,96);
+insert into t (id,a) values (85,97);
+insert into t (id,a) values (85,98);
+insert into t (id,a) values (85,99);
+insert into t (id,a) values (86,0);
+insert into t (id,a) values (86,1);
+insert into t (id,a) values (86,2);
+insert into t (id,a) values (86,3);
+insert into t (id,a) values (86,4);
+insert into t (id,a) values (86,5);
+insert into t (id,a) values (86,6);
+insert into t (id,a) values (86,7);
+insert into t (id,a) values (86,8);
+insert into t (id,a) values (86,9);
+insert into t (id,a) values (86,10);
+insert into t (id,a) values (86,11);
+insert into t (id,a) values (86,12);
+insert into t (id,a) values (86,13);
+insert into t (id,a) values (86,14);
+insert into t (id,a) values (86,15);
+insert into t (id,a) values (86,16);
+insert into t (id,a) values (86,17);
+insert into t (id,a) values (86,18);
+insert into t (id,a) values (86,19);
+insert into t (id,a) values (86,20);
+insert into t (id,a) values (86,21);
+insert into t (id,a) values (86,22);
+insert into t (id,a) values (86,23);
+insert into t (id,a) values (86,24);
+insert into t (id,a) values (86,25);
+insert into t (id,a) values (86,26);
+insert into t (id,a) values (86,27);
+insert into t (id,a) values (86,28);
+insert into t (id,a) values (86,29);
+insert into t (id,a) values (86,30);
+insert into t (id,a) values (86,31);
+insert into t (id,a) values (86,32);
+insert into t (id,a) values (86,33);
+insert into t (id,a) values (86,34);
+insert into t (id,a) values (86,35);
+insert into t (id,a) values (86,36);
+insert into t (id,a) values (86,37);
+insert into t (id,a) values (86,38);
+insert into t (id,a) values (86,39);
+insert into t (id,a) values (86,40);
+insert into t (id,a) values (86,41);
+insert into t (id,a) values (86,42);
+insert into t (id,a) values (86,43);
+insert into t (id,a) values (86,44);
+insert into t (id,a) values (86,45);
+insert into t (id,a) values (86,46);
+insert into t (id,a) values (86,47);
+insert into t (id,a) values (86,48);
+insert into t (id,a) values (86,49);
+insert into t (id,a) values (86,50);
+insert into t (id,a) values (86,51);
+insert into t (id,a) values (86,52);
+insert into t (id,a) values (86,53);
+insert into t (id,a) values (86,54);
+insert into t (id,a) values (86,55);
+insert into t (id,a) values (86,56);
+insert into t (id,a) values (86,57);
+insert into t (id,a) values (86,58);
+insert into t (id,a) values (86,59);
+insert into t (id,a) values (86,60);
+insert into t (id,a) values (86,61);
+insert into t (id,a) values (86,62);
+insert into t (id,a) values (86,63);
+insert into t (id,a) values (86,64);
+insert into t (id,a) values (86,65);
+insert into t (id,a) values (86,66);
+insert into t (id,a) values (86,67);
+insert into t (id,a) values (86,68);
+insert into t (id,a) values (86,69);
+insert into t (id,a) values (86,70);
+insert into t (id,a) values (86,71);
+insert into t (id,a) values (86,72);
+insert into t (id,a) values (86,73);
+insert into t (id,a) values (86,74);
+insert into t (id,a) values (86,75);
+insert into t (id,a) values (86,76);
+insert into t (id,a) values (86,77);
+insert into t (id,a) values (86,78);
+insert into t (id,a) values (86,79);
+insert into t (id,a) values (86,80);
+insert into t (id,a) values (86,81);
+insert into t (id,a) values (86,82);
+insert into t (id,a) values (86,83);
+insert into t (id,a) values (86,84);
+insert into t (id,a) values (86,85);
+insert into t (id,a) values (86,86);
+insert into t (id,a) values (86,87);
+insert into t (id,a) values (86,88);
+insert into t (id,a) values (86,89);
+insert into t (id,a) values (86,90);
+insert into t (id,a) values (86,91);
+insert into t (id,a) values (86,92);
+insert into t (id,a) values (86,93);
+insert into t (id,a) values (86,94);
+insert into t (id,a) values (86,95);
+insert into t (id,a) values (86,96);
+insert into t (id,a) values (86,97);
+insert into t (id,a) values (86,98);
+insert into t (id,a) values (86,99);
+insert into t (id,a) values (87,0);
+insert into t (id,a) values (87,1);
+insert into t (id,a) values (87,2);
+insert into t (id,a) values (87,3);
+insert into t (id,a) values (87,4);
+insert into t (id,a) values (87,5);
+insert into t (id,a) values (87,6);
+insert into t (id,a) values (87,7);
+insert into t (id,a) values (87,8);
+insert into t (id,a) values (87,9);
+insert into t (id,a) values (87,10);
+insert into t (id,a) values (87,11);
+insert into t (id,a) values (87,12);
+insert into t (id,a) values (87,13);
+insert into t (id,a) values (87,14);
+insert into t (id,a) values (87,15);
+insert into t (id,a) values (87,16);
+insert into t (id,a) values (87,17);
+insert into t (id,a) values (87,18);
+insert into t (id,a) values (87,19);
+insert into t (id,a) values (87,20);
+insert into t (id,a) values (87,21);
+insert into t (id,a) values (87,22);
+insert into t (id,a) values (87,23);
+insert into t (id,a) values (87,24);
+insert into t (id,a) values (87,25);
+insert into t (id,a) values (87,26);
+insert into t (id,a) values (87,27);
+insert into t (id,a) values (87,28);
+insert into t (id,a) values (87,29);
+insert into t (id,a) values (87,30);
+insert into t (id,a) values (87,31);
+insert into t (id,a) values (87,32);
+insert into t (id,a) values (87,33);
+insert into t (id,a) values (87,34);
+insert into t (id,a) values (87,35);
+insert into t (id,a) values (87,36);
+insert into t (id,a) values (87,37);
+insert into t (id,a) values (87,38);
+insert into t (id,a) values (87,39);
+insert into t (id,a) values (87,40);
+insert into t (id,a) values (87,41);
+insert into t (id,a) values (87,42);
+insert into t (id,a) values (87,43);
+insert into t (id,a) values (87,44);
+insert into t (id,a) values (87,45);
+insert into t (id,a) values (87,46);
+insert into t (id,a) values (87,47);
+insert into t (id,a) values (87,48);
+insert into t (id,a) values (87,49);
+insert into t (id,a) values (87,50);
+insert into t (id,a) values (87,51);
+insert into t (id,a) values (87,52);
+insert into t (id,a) values (87,53);
+insert into t (id,a) values (87,54);
+insert into t (id,a) values (87,55);
+insert into t (id,a) values (87,56);
+insert into t (id,a) values (87,57);
+insert into t (id,a) values (87,58);
+insert into t (id,a) values (87,59);
+insert into t (id,a) values (87,60);
+insert into t (id,a) values (87,61);
+insert into t (id,a) values (87,62);
+insert into t (id,a) values (87,63);
+insert into t (id,a) values (87,64);
+insert into t (id,a) values (87,65);
+insert into t (id,a) values (87,66);
+insert into t (id,a) values (87,67);
+insert into t (id,a) values (87,68);
+insert into t (id,a) values (87,69);
+insert into t (id,a) values (87,70);
+insert into t (id,a) values (87,71);
+insert into t (id,a) values (87,72);
+insert into t (id,a) values (87,73);
+insert into t (id,a) values (87,74);
+insert into t (id,a) values (87,75);
+insert into t (id,a) values (87,76);
+insert into t (id,a) values (87,77);
+insert into t (id,a) values (87,78);
+insert into t (id,a) values (87,79);
+insert into t (id,a) values (87,80);
+insert into t (id,a) values (87,81);
+insert into t (id,a) values (87,82);
+insert into t (id,a) values (87,83);
+insert into t (id,a) values (87,84);
+insert into t (id,a) values (87,85);
+insert into t (id,a) values (87,86);
+insert into t (id,a) values (87,87);
+insert into t (id,a) values (87,88);
+insert into t (id,a) values (87,89);
+insert into t (id,a) values (87,90);
+insert into t (id,a) values (87,91);
+insert into t (id,a) values (87,92);
+insert into t (id,a) values (87,93);
+insert into t (id,a) values (87,94);
+insert into t (id,a) values (87,95);
+insert into t (id,a) values (87,96);
+insert into t (id,a) values (87,97);
+insert into t (id,a) values (87,98);
+insert into t (id,a) values (87,99);
+insert into t (id,a) values (88,0);
+insert into t (id,a) values (88,1);
+insert into t (id,a) values (88,2);
+insert into t (id,a) values (88,3);
+insert into t (id,a) values (88,4);
+insert into t (id,a) values (88,5);
+insert into t (id,a) values (88,6);
+insert into t (id,a) values (88,7);
+insert into t (id,a) values (88,8);
+insert into t (id,a) values (88,9);
+insert into t (id,a) values (88,10);
+insert into t (id,a) values (88,11);
+insert into t (id,a) values (88,12);
+insert into t (id,a) values (88,13);
+insert into t (id,a) values (88,14);
+insert into t (id,a) values (88,15);
+insert into t (id,a) values (88,16);
+insert into t (id,a) values (88,17);
+insert into t (id,a) values (88,18);
+insert into t (id,a) values (88,19);
+insert into t (id,a) values (88,20);
+insert into t (id,a) values (88,21);
+insert into t (id,a) values (88,22);
+insert into t (id,a) values (88,23);
+insert into t (id,a) values (88,24);
+insert into t (id,a) values (88,25);
+insert into t (id,a) values (88,26);
+insert into t (id,a) values (88,27);
+insert into t (id,a) values (88,28);
+insert into t (id,a) values (88,29);
+insert into t (id,a) values (88,30);
+insert into t (id,a) values (88,31);
+insert into t (id,a) values (88,32);
+insert into t (id,a) values (88,33);
+insert into t (id,a) values (88,34);
+insert into t (id,a) values (88,35);
+insert into t (id,a) values (88,36);
+insert into t (id,a) values (88,37);
+insert into t (id,a) values (88,38);
+insert into t (id,a) values (88,39);
+insert into t (id,a) values (88,40);
+insert into t (id,a) values (88,41);
+insert into t (id,a) values (88,42);
+insert into t (id,a) values (88,43);
+insert into t (id,a) values (88,44);
+insert into t (id,a) values (88,45);
+insert into t (id,a) values (88,46);
+insert into t (id,a) values (88,47);
+insert into t (id,a) values (88,48);
+insert into t (id,a) values (88,49);
+insert into t (id,a) values (88,50);
+insert into t (id,a) values (88,51);
+insert into t (id,a) values (88,52);
+insert into t (id,a) values (88,53);
+insert into t (id,a) values (88,54);
+insert into t (id,a) values (88,55);
+insert into t (id,a) values (88,56);
+insert into t (id,a) values (88,57);
+insert into t (id,a) values (88,58);
+insert into t (id,a) values (88,59);
+insert into t (id,a) values (88,60);
+insert into t (id,a) values (88,61);
+insert into t (id,a) values (88,62);
+insert into t (id,a) values (88,63);
+insert into t (id,a) values (88,64);
+insert into t (id,a) values (88,65);
+insert into t (id,a) values (88,66);
+insert into t (id,a) values (88,67);
+insert into t (id,a) values (88,68);
+insert into t (id,a) values (88,69);
+insert into t (id,a) values (88,70);
+insert into t (id,a) values (88,71);
+insert into t (id,a) values (88,72);
+insert into t (id,a) values (88,73);
+insert into t (id,a) values (88,74);
+insert into t (id,a) values (88,75);
+insert into t (id,a) values (88,76);
+insert into t (id,a) values (88,77);
+insert into t (id,a) values (88,78);
+insert into t (id,a) values (88,79);
+insert into t (id,a) values (88,80);
+insert into t (id,a) values (88,81);
+insert into t (id,a) values (88,82);
+insert into t (id,a) values (88,83);
+insert into t (id,a) values (88,84);
+insert into t (id,a) values (88,85);
+insert into t (id,a) values (88,86);
+insert into t (id,a) values (88,87);
+insert into t (id,a) values (88,88);
+insert into t (id,a) values (88,89);
+insert into t (id,a) values (88,90);
+insert into t (id,a) values (88,91);
+insert into t (id,a) values (88,92);
+insert into t (id,a) values (88,93);
+insert into t (id,a) values (88,94);
+insert into t (id,a) values (88,95);
+insert into t (id,a) values (88,96);
+insert into t (id,a) values (88,97);
+insert into t (id,a) values (88,98);
+insert into t (id,a) values (88,99);
+insert into t (id,a) values (89,0);
+insert into t (id,a) values (89,1);
+insert into t (id,a) values (89,2);
+insert into t (id,a) values (89,3);
+insert into t (id,a) values (89,4);
+insert into t (id,a) values (89,5);
+insert into t (id,a) values (89,6);
+insert into t (id,a) values (89,7);
+insert into t (id,a) values (89,8);
+insert into t (id,a) values (89,9);
+insert into t (id,a) values (89,10);
+insert into t (id,a) values (89,11);
+insert into t (id,a) values (89,12);
+insert into t (id,a) values (89,13);
+insert into t (id,a) values (89,14);
+insert into t (id,a) values (89,15);
+insert into t (id,a) values (89,16);
+insert into t (id,a) values (89,17);
+insert into t (id,a) values (89,18);
+insert into t (id,a) values (89,19);
+insert into t (id,a) values (89,20);
+insert into t (id,a) values (89,21);
+insert into t (id,a) values (89,22);
+insert into t (id,a) values (89,23);
+insert into t (id,a) values (89,24);
+insert into t (id,a) values (89,25);
+insert into t (id,a) values (89,26);
+insert into t (id,a) values (89,27);
+insert into t (id,a) values (89,28);
+insert into t (id,a) values (89,29);
+insert into t (id,a) values (89,30);
+insert into t (id,a) values (89,31);
+insert into t (id,a) values (89,32);
+insert into t (id,a) values (89,33);
+insert into t (id,a) values (89,34);
+insert into t (id,a) values (89,35);
+insert into t (id,a) values (89,36);
+insert into t (id,a) values (89,37);
+insert into t (id,a) values (89,38);
+insert into t (id,a) values (89,39);
+insert into t (id,a) values (89,40);
+insert into t (id,a) values (89,41);
+insert into t (id,a) values (89,42);
+insert into t (id,a) values (89,43);
+insert into t (id,a) values (89,44);
+insert into t (id,a) values (89,45);
+insert into t (id,a) values (89,46);
+insert into t (id,a) values (89,47);
+insert into t (id,a) values (89,48);
+insert into t (id,a) values (89,49);
+insert into t (id,a) values (89,50);
+insert into t (id,a) values (89,51);
+insert into t (id,a) values (89,52);
+insert into t (id,a) values (89,53);
+insert into t (id,a) values (89,54);
+insert into t (id,a) values (89,55);
+insert into t (id,a) values (89,56);
+insert into t (id,a) values (89,57);
+insert into t (id,a) values (89,58);
+insert into t (id,a) values (89,59);
+insert into t (id,a) values (89,60);
+insert into t (id,a) values (89,61);
+insert into t (id,a) values (89,62);
+insert into t (id,a) values (89,63);
+insert into t (id,a) values (89,64);
+insert into t (id,a) values (89,65);
+insert into t (id,a) values (89,66);
+insert into t (id,a) values (89,67);
+insert into t (id,a) values (89,68);
+insert into t (id,a) values (89,69);
+insert into t (id,a) values (89,70);
+insert into t (id,a) values (89,71);
+insert into t (id,a) values (89,72);
+insert into t (id,a) values (89,73);
+insert into t (id,a) values (89,74);
+insert into t (id,a) values (89,75);
+insert into t (id,a) values (89,76);
+insert into t (id,a) values (89,77);
+insert into t (id,a) values (89,78);
+insert into t (id,a) values (89,79);
+insert into t (id,a) values (89,80);
+insert into t (id,a) values (89,81);
+insert into t (id,a) values (89,82);
+insert into t (id,a) values (89,83);
+insert into t (id,a) values (89,84);
+insert into t (id,a) values (89,85);
+insert into t (id,a) values (89,86);
+insert into t (id,a) values (89,87);
+insert into t (id,a) values (89,88);
+insert into t (id,a) values (89,89);
+insert into t (id,a) values (89,90);
+insert into t (id,a) values (89,91);
+insert into t (id,a) values (89,92);
+insert into t (id,a) values (89,93);
+insert into t (id,a) values (89,94);
+insert into t (id,a) values (89,95);
+insert into t (id,a) values (89,96);
+insert into t (id,a) values (89,97);
+insert into t (id,a) values (89,98);
+insert into t (id,a) values (89,99);
+insert into t (id,a) values (90,0);
+insert into t (id,a) values (90,1);
+insert into t (id,a) values (90,2);
+insert into t (id,a) values (90,3);
+insert into t (id,a) values (90,4);
+insert into t (id,a) values (90,5);
+insert into t (id,a) values (90,6);
+insert into t (id,a) values (90,7);
+insert into t (id,a) values (90,8);
+insert into t (id,a) values (90,9);
+insert into t (id,a) values (90,10);
+insert into t (id,a) values (90,11);
+insert into t (id,a) values (90,12);
+insert into t (id,a) values (90,13);
+insert into t (id,a) values (90,14);
+insert into t (id,a) values (90,15);
+insert into t (id,a) values (90,16);
+insert into t (id,a) values (90,17);
+insert into t (id,a) values (90,18);
+insert into t (id,a) values (90,19);
+insert into t (id,a) values (90,20);
+insert into t (id,a) values (90,21);
+insert into t (id,a) values (90,22);
+insert into t (id,a) values (90,23);
+insert into t (id,a) values (90,24);
+insert into t (id,a) values (90,25);
+insert into t (id,a) values (90,26);
+insert into t (id,a) values (90,27);
+insert into t (id,a) values (90,28);
+insert into t (id,a) values (90,29);
+insert into t (id,a) values (90,30);
+insert into t (id,a) values (90,31);
+insert into t (id,a) values (90,32);
+insert into t (id,a) values (90,33);
+insert into t (id,a) values (90,34);
+insert into t (id,a) values (90,35);
+insert into t (id,a) values (90,36);
+insert into t (id,a) values (90,37);
+insert into t (id,a) values (90,38);
+insert into t (id,a) values (90,39);
+insert into t (id,a) values (90,40);
+insert into t (id,a) values (90,41);
+insert into t (id,a) values (90,42);
+insert into t (id,a) values (90,43);
+insert into t (id,a) values (90,44);
+insert into t (id,a) values (90,45);
+insert into t (id,a) values (90,46);
+insert into t (id,a) values (90,47);
+insert into t (id,a) values (90,48);
+insert into t (id,a) values (90,49);
+insert into t (id,a) values (90,50);
+insert into t (id,a) values (90,51);
+insert into t (id,a) values (90,52);
+insert into t (id,a) values (90,53);
+insert into t (id,a) values (90,54);
+insert into t (id,a) values (90,55);
+insert into t (id,a) values (90,56);
+insert into t (id,a) values (90,57);
+insert into t (id,a) values (90,58);
+insert into t (id,a) values (90,59);
+insert into t (id,a) values (90,60);
+insert into t (id,a) values (90,61);
+insert into t (id,a) values (90,62);
+insert into t (id,a) values (90,63);
+insert into t (id,a) values (90,64);
+insert into t (id,a) values (90,65);
+insert into t (id,a) values (90,66);
+insert into t (id,a) values (90,67);
+insert into t (id,a) values (90,68);
+insert into t (id,a) values (90,69);
+insert into t (id,a) values (90,70);
+insert into t (id,a) values (90,71);
+insert into t (id,a) values (90,72);
+insert into t (id,a) values (90,73);
+insert into t (id,a) values (90,74);
+insert into t (id,a) values (90,75);
+insert into t (id,a) values (90,76);
+insert into t (id,a) values (90,77);
+insert into t (id,a) values (90,78);
+insert into t (id,a) values (90,79);
+insert into t (id,a) values (90,80);
+insert into t (id,a) values (90,81);
+insert into t (id,a) values (90,82);
+insert into t (id,a) values (90,83);
+insert into t (id,a) values (90,84);
+insert into t (id,a) values (90,85);
+insert into t (id,a) values (90,86);
+insert into t (id,a) values (90,87);
+insert into t (id,a) values (90,88);
+insert into t (id,a) values (90,89);
+insert into t (id,a) values (90,90);
+insert into t (id,a) values (90,91);
+insert into t (id,a) values (90,92);
+insert into t (id,a) values (90,93);
+insert into t (id,a) values (90,94);
+insert into t (id,a) values (90,95);
+insert into t (id,a) values (90,96);
+insert into t (id,a) values (90,97);
+insert into t (id,a) values (90,98);
+insert into t (id,a) values (90,99);
+insert into t (id,a) values (91,0);
+insert into t (id,a) values (91,1);
+insert into t (id,a) values (91,2);
+insert into t (id,a) values (91,3);
+insert into t (id,a) values (91,4);
+insert into t (id,a) values (91,5);
+insert into t (id,a) values (91,6);
+insert into t (id,a) values (91,7);
+insert into t (id,a) values (91,8);
+insert into t (id,a) values (91,9);
+insert into t (id,a) values (91,10);
+insert into t (id,a) values (91,11);
+insert into t (id,a) values (91,12);
+insert into t (id,a) values (91,13);
+insert into t (id,a) values (91,14);
+insert into t (id,a) values (91,15);
+insert into t (id,a) values (91,16);
+insert into t (id,a) values (91,17);
+insert into t (id,a) values (91,18);
+insert into t (id,a) values (91,19);
+insert into t (id,a) values (91,20);
+insert into t (id,a) values (91,21);
+insert into t (id,a) values (91,22);
+insert into t (id,a) values (91,23);
+insert into t (id,a) values (91,24);
+insert into t (id,a) values (91,25);
+insert into t (id,a) values (91,26);
+insert into t (id,a) values (91,27);
+insert into t (id,a) values (91,28);
+insert into t (id,a) values (91,29);
+insert into t (id,a) values (91,30);
+insert into t (id,a) values (91,31);
+insert into t (id,a) values (91,32);
+insert into t (id,a) values (91,33);
+insert into t (id,a) values (91,34);
+insert into t (id,a) values (91,35);
+insert into t (id,a) values (91,36);
+insert into t (id,a) values (91,37);
+insert into t (id,a) values (91,38);
+insert into t (id,a) values (91,39);
+insert into t (id,a) values (91,40);
+insert into t (id,a) values (91,41);
+insert into t (id,a) values (91,42);
+insert into t (id,a) values (91,43);
+insert into t (id,a) values (91,44);
+insert into t (id,a) values (91,45);
+insert into t (id,a) values (91,46);
+insert into t (id,a) values (91,47);
+insert into t (id,a) values (91,48);
+insert into t (id,a) values (91,49);
+insert into t (id,a) values (91,50);
+insert into t (id,a) values (91,51);
+insert into t (id,a) values (91,52);
+insert into t (id,a) values (91,53);
+insert into t (id,a) values (91,54);
+insert into t (id,a) values (91,55);
+insert into t (id,a) values (91,56);
+insert into t (id,a) values (91,57);
+insert into t (id,a) values (91,58);
+insert into t (id,a) values (91,59);
+insert into t (id,a) values (91,60);
+insert into t (id,a) values (91,61);
+insert into t (id,a) values (91,62);
+insert into t (id,a) values (91,63);
+insert into t (id,a) values (91,64);
+insert into t (id,a) values (91,65);
+insert into t (id,a) values (91,66);
+insert into t (id,a) values (91,67);
+insert into t (id,a) values (91,68);
+insert into t (id,a) values (91,69);
+insert into t (id,a) values (91,70);
+insert into t (id,a) values (91,71);
+insert into t (id,a) values (91,72);
+insert into t (id,a) values (91,73);
+insert into t (id,a) values (91,74);
+insert into t (id,a) values (91,75);
+insert into t (id,a) values (91,76);
+insert into t (id,a) values (91,77);
+insert into t (id,a) values (91,78);
+insert into t (id,a) values (91,79);
+insert into t (id,a) values (91,80);
+insert into t (id,a) values (91,81);
+insert into t (id,a) values (91,82);
+insert into t (id,a) values (91,83);
+insert into t (id,a) values (91,84);
+insert into t (id,a) values (91,85);
+insert into t (id,a) values (91,86);
+insert into t (id,a) values (91,87);
+insert into t (id,a) values (91,88);
+insert into t (id,a) values (91,89);
+insert into t (id,a) values (91,90);
+insert into t (id,a) values (91,91);
+insert into t (id,a) values (91,92);
+insert into t (id,a) values (91,93);
+insert into t (id,a) values (91,94);
+insert into t (id,a) values (91,95);
+insert into t (id,a) values (91,96);
+insert into t (id,a) values (91,97);
+insert into t (id,a) values (91,98);
+insert into t (id,a) values (91,99);
+insert into t (id,a) values (92,0);
+insert into t (id,a) values (92,1);
+insert into t (id,a) values (92,2);
+insert into t (id,a) values (92,3);
+insert into t (id,a) values (92,4);
+insert into t (id,a) values (92,5);
+insert into t (id,a) values (92,6);
+insert into t (id,a) values (92,7);
+insert into t (id,a) values (92,8);
+insert into t (id,a) values (92,9);
+insert into t (id,a) values (92,10);
+insert into t (id,a) values (92,11);
+insert into t (id,a) values (92,12);
+insert into t (id,a) values (92,13);
+insert into t (id,a) values (92,14);
+insert into t (id,a) values (92,15);
+insert into t (id,a) values (92,16);
+insert into t (id,a) values (92,17);
+insert into t (id,a) values (92,18);
+insert into t (id,a) values (92,19);
+insert into t (id,a) values (92,20);
+insert into t (id,a) values (92,21);
+insert into t (id,a) values (92,22);
+insert into t (id,a) values (92,23);
+insert into t (id,a) values (92,24);
+insert into t (id,a) values (92,25);
+insert into t (id,a) values (92,26);
+insert into t (id,a) values (92,27);
+insert into t (id,a) values (92,28);
+insert into t (id,a) values (92,29);
+insert into t (id,a) values (92,30);
+insert into t (id,a) values (92,31);
+insert into t (id,a) values (92,32);
+insert into t (id,a) values (92,33);
+insert into t (id,a) values (92,34);
+insert into t (id,a) values (92,35);
+insert into t (id,a) values (92,36);
+insert into t (id,a) values (92,37);
+insert into t (id,a) values (92,38);
+insert into t (id,a) values (92,39);
+insert into t (id,a) values (92,40);
+insert into t (id,a) values (92,41);
+insert into t (id,a) values (92,42);
+insert into t (id,a) values (92,43);
+insert into t (id,a) values (92,44);
+insert into t (id,a) values (92,45);
+insert into t (id,a) values (92,46);
+insert into t (id,a) values (92,47);
+insert into t (id,a) values (92,48);
+insert into t (id,a) values (92,49);
+insert into t (id,a) values (92,50);
+insert into t (id,a) values (92,51);
+insert into t (id,a) values (92,52);
+insert into t (id,a) values (92,53);
+insert into t (id,a) values (92,54);
+insert into t (id,a) values (92,55);
+insert into t (id,a) values (92,56);
+insert into t (id,a) values (92,57);
+insert into t (id,a) values (92,58);
+insert into t (id,a) values (92,59);
+insert into t (id,a) values (92,60);
+insert into t (id,a) values (92,61);
+insert into t (id,a) values (92,62);
+insert into t (id,a) values (92,63);
+insert into t (id,a) values (92,64);
+insert into t (id,a) values (92,65);
+insert into t (id,a) values (92,66);
+insert into t (id,a) values (92,67);
+insert into t (id,a) values (92,68);
+insert into t (id,a) values (92,69);
+insert into t (id,a) values (92,70);
+insert into t (id,a) values (92,71);
+insert into t (id,a) values (92,72);
+insert into t (id,a) values (92,73);
+insert into t (id,a) values (92,74);
+insert into t (id,a) values (92,75);
+insert into t (id,a) values (92,76);
+insert into t (id,a) values (92,77);
+insert into t (id,a) values (92,78);
+insert into t (id,a) values (92,79);
+insert into t (id,a) values (92,80);
+insert into t (id,a) values (92,81);
+insert into t (id,a) values (92,82);
+insert into t (id,a) values (92,83);
+insert into t (id,a) values (92,84);
+insert into t (id,a) values (92,85);
+insert into t (id,a) values (92,86);
+insert into t (id,a) values (92,87);
+insert into t (id,a) values (92,88);
+insert into t (id,a) values (92,89);
+insert into t (id,a) values (92,90);
+insert into t (id,a) values (92,91);
+insert into t (id,a) values (92,92);
+insert into t (id,a) values (92,93);
+insert into t (id,a) values (92,94);
+insert into t (id,a) values (92,95);
+insert into t (id,a) values (92,96);
+insert into t (id,a) values (92,97);
+insert into t (id,a) values (92,98);
+insert into t (id,a) values (92,99);
+insert into t (id,a) values (93,0);
+insert into t (id,a) values (93,1);
+insert into t (id,a) values (93,2);
+insert into t (id,a) values (93,3);
+insert into t (id,a) values (93,4);
+insert into t (id,a) values (93,5);
+insert into t (id,a) values (93,6);
+insert into t (id,a) values (93,7);
+insert into t (id,a) values (93,8);
+insert into t (id,a) values (93,9);
+insert into t (id,a) values (93,10);
+insert into t (id,a) values (93,11);
+insert into t (id,a) values (93,12);
+insert into t (id,a) values (93,13);
+insert into t (id,a) values (93,14);
+insert into t (id,a) values (93,15);
+insert into t (id,a) values (93,16);
+insert into t (id,a) values (93,17);
+insert into t (id,a) values (93,18);
+insert into t (id,a) values (93,19);
+insert into t (id,a) values (93,20);
+insert into t (id,a) values (93,21);
+insert into t (id,a) values (93,22);
+insert into t (id,a) values (93,23);
+insert into t (id,a) values (93,24);
+insert into t (id,a) values (93,25);
+insert into t (id,a) values (93,26);
+insert into t (id,a) values (93,27);
+insert into t (id,a) values (93,28);
+insert into t (id,a) values (93,29);
+insert into t (id,a) values (93,30);
+insert into t (id,a) values (93,31);
+insert into t (id,a) values (93,32);
+insert into t (id,a) values (93,33);
+insert into t (id,a) values (93,34);
+insert into t (id,a) values (93,35);
+insert into t (id,a) values (93,36);
+insert into t (id,a) values (93,37);
+insert into t (id,a) values (93,38);
+insert into t (id,a) values (93,39);
+insert into t (id,a) values (93,40);
+insert into t (id,a) values (93,41);
+insert into t (id,a) values (93,42);
+insert into t (id,a) values (93,43);
+insert into t (id,a) values (93,44);
+insert into t (id,a) values (93,45);
+insert into t (id,a) values (93,46);
+insert into t (id,a) values (93,47);
+insert into t (id,a) values (93,48);
+insert into t (id,a) values (93,49);
+insert into t (id,a) values (93,50);
+insert into t (id,a) values (93,51);
+insert into t (id,a) values (93,52);
+insert into t (id,a) values (93,53);
+insert into t (id,a) values (93,54);
+insert into t (id,a) values (93,55);
+insert into t (id,a) values (93,56);
+insert into t (id,a) values (93,57);
+insert into t (id,a) values (93,58);
+insert into t (id,a) values (93,59);
+insert into t (id,a) values (93,60);
+insert into t (id,a) values (93,61);
+insert into t (id,a) values (93,62);
+insert into t (id,a) values (93,63);
+insert into t (id,a) values (93,64);
+insert into t (id,a) values (93,65);
+insert into t (id,a) values (93,66);
+insert into t (id,a) values (93,67);
+insert into t (id,a) values (93,68);
+insert into t (id,a) values (93,69);
+insert into t (id,a) values (93,70);
+insert into t (id,a) values (93,71);
+insert into t (id,a) values (93,72);
+insert into t (id,a) values (93,73);
+insert into t (id,a) values (93,74);
+insert into t (id,a) values (93,75);
+insert into t (id,a) values (93,76);
+insert into t (id,a) values (93,77);
+insert into t (id,a) values (93,78);
+insert into t (id,a) values (93,79);
+insert into t (id,a) values (93,80);
+insert into t (id,a) values (93,81);
+insert into t (id,a) values (93,82);
+insert into t (id,a) values (93,83);
+insert into t (id,a) values (93,84);
+insert into t (id,a) values (93,85);
+insert into t (id,a) values (93,86);
+insert into t (id,a) values (93,87);
+insert into t (id,a) values (93,88);
+insert into t (id,a) values (93,89);
+insert into t (id,a) values (93,90);
+insert into t (id,a) values (93,91);
+insert into t (id,a) values (93,92);
+insert into t (id,a) values (93,93);
+insert into t (id,a) values (93,94);
+insert into t (id,a) values (93,95);
+insert into t (id,a) values (93,96);
+insert into t (id,a) values (93,97);
+insert into t (id,a) values (93,98);
+insert into t (id,a) values (93,99);
+insert into t (id,a) values (94,0);
+insert into t (id,a) values (94,1);
+insert into t (id,a) values (94,2);
+insert into t (id,a) values (94,3);
+insert into t (id,a) values (94,4);
+insert into t (id,a) values (94,5);
+insert into t (id,a) values (94,6);
+insert into t (id,a) values (94,7);
+insert into t (id,a) values (94,8);
+insert into t (id,a) values (94,9);
+insert into t (id,a) values (94,10);
+insert into t (id,a) values (94,11);
+insert into t (id,a) values (94,12);
+insert into t (id,a) values (94,13);
+insert into t (id,a) values (94,14);
+insert into t (id,a) values (94,15);
+insert into t (id,a) values (94,16);
+insert into t (id,a) values (94,17);
+insert into t (id,a) values (94,18);
+insert into t (id,a) values (94,19);
+insert into t (id,a) values (94,20);
+insert into t (id,a) values (94,21);
+insert into t (id,a) values (94,22);
+insert into t (id,a) values (94,23);
+insert into t (id,a) values (94,24);
+insert into t (id,a) values (94,25);
+insert into t (id,a) values (94,26);
+insert into t (id,a) values (94,27);
+insert into t (id,a) values (94,28);
+insert into t (id,a) values (94,29);
+insert into t (id,a) values (94,30);
+insert into t (id,a) values (94,31);
+insert into t (id,a) values (94,32);
+insert into t (id,a) values (94,33);
+insert into t (id,a) values (94,34);
+insert into t (id,a) values (94,35);
+insert into t (id,a) values (94,36);
+insert into t (id,a) values (94,37);
+insert into t (id,a) values (94,38);
+insert into t (id,a) values (94,39);
+insert into t (id,a) values (94,40);
+insert into t (id,a) values (94,41);
+insert into t (id,a) values (94,42);
+insert into t (id,a) values (94,43);
+insert into t (id,a) values (94,44);
+insert into t (id,a) values (94,45);
+insert into t (id,a) values (94,46);
+insert into t (id,a) values (94,47);
+insert into t (id,a) values (94,48);
+insert into t (id,a) values (94,49);
+insert into t (id,a) values (94,50);
+insert into t (id,a) values (94,51);
+insert into t (id,a) values (94,52);
+insert into t (id,a) values (94,53);
+insert into t (id,a) values (94,54);
+insert into t (id,a) values (94,55);
+insert into t (id,a) values (94,56);
+insert into t (id,a) values (94,57);
+insert into t (id,a) values (94,58);
+insert into t (id,a) values (94,59);
+insert into t (id,a) values (94,60);
+insert into t (id,a) values (94,61);
+insert into t (id,a) values (94,62);
+insert into t (id,a) values (94,63);
+insert into t (id,a) values (94,64);
+insert into t (id,a) values (94,65);
+insert into t (id,a) values (94,66);
+insert into t (id,a) values (94,67);
+insert into t (id,a) values (94,68);
+insert into t (id,a) values (94,69);
+insert into t (id,a) values (94,70);
+insert into t (id,a) values (94,71);
+insert into t (id,a) values (94,72);
+insert into t (id,a) values (94,73);
+insert into t (id,a) values (94,74);
+insert into t (id,a) values (94,75);
+insert into t (id,a) values (94,76);
+insert into t (id,a) values (94,77);
+insert into t (id,a) values (94,78);
+insert into t (id,a) values (94,79);
+insert into t (id,a) values (94,80);
+insert into t (id,a) values (94,81);
+insert into t (id,a) values (94,82);
+insert into t (id,a) values (94,83);
+insert into t (id,a) values (94,84);
+insert into t (id,a) values (94,85);
+insert into t (id,a) values (94,86);
+insert into t (id,a) values (94,87);
+insert into t (id,a) values (94,88);
+insert into t (id,a) values (94,89);
+insert into t (id,a) values (94,90);
+insert into t (id,a) values (94,91);
+insert into t (id,a) values (94,92);
+insert into t (id,a) values (94,93);
+insert into t (id,a) values (94,94);
+insert into t (id,a) values (94,95);
+insert into t (id,a) values (94,96);
+insert into t (id,a) values (94,97);
+insert into t (id,a) values (94,98);
+insert into t (id,a) values (94,99);
+insert into t (id,a) values (95,0);
+insert into t (id,a) values (95,1);
+insert into t (id,a) values (95,2);
+insert into t (id,a) values (95,3);
+insert into t (id,a) values (95,4);
+insert into t (id,a) values (95,5);
+insert into t (id,a) values (95,6);
+insert into t (id,a) values (95,7);
+insert into t (id,a) values (95,8);
+insert into t (id,a) values (95,9);
+insert into t (id,a) values (95,10);
+insert into t (id,a) values (95,11);
+insert into t (id,a) values (95,12);
+insert into t (id,a) values (95,13);
+insert into t (id,a) values (95,14);
+insert into t (id,a) values (95,15);
+insert into t (id,a) values (95,16);
+insert into t (id,a) values (95,17);
+insert into t (id,a) values (95,18);
+insert into t (id,a) values (95,19);
+insert into t (id,a) values (95,20);
+insert into t (id,a) values (95,21);
+insert into t (id,a) values (95,22);
+insert into t (id,a) values (95,23);
+insert into t (id,a) values (95,24);
+insert into t (id,a) values (95,25);
+insert into t (id,a) values (95,26);
+insert into t (id,a) values (95,27);
+insert into t (id,a) values (95,28);
+insert into t (id,a) values (95,29);
+insert into t (id,a) values (95,30);
+insert into t (id,a) values (95,31);
+insert into t (id,a) values (95,32);
+insert into t (id,a) values (95,33);
+insert into t (id,a) values (95,34);
+insert into t (id,a) values (95,35);
+insert into t (id,a) values (95,36);
+insert into t (id,a) values (95,37);
+insert into t (id,a) values (95,38);
+insert into t (id,a) values (95,39);
+insert into t (id,a) values (95,40);
+insert into t (id,a) values (95,41);
+insert into t (id,a) values (95,42);
+insert into t (id,a) values (95,43);
+insert into t (id,a) values (95,44);
+insert into t (id,a) values (95,45);
+insert into t (id,a) values (95,46);
+insert into t (id,a) values (95,47);
+insert into t (id,a) values (95,48);
+insert into t (id,a) values (95,49);
+insert into t (id,a) values (95,50);
+insert into t (id,a) values (95,51);
+insert into t (id,a) values (95,52);
+insert into t (id,a) values (95,53);
+insert into t (id,a) values (95,54);
+insert into t (id,a) values (95,55);
+insert into t (id,a) values (95,56);
+insert into t (id,a) values (95,57);
+insert into t (id,a) values (95,58);
+insert into t (id,a) values (95,59);
+insert into t (id,a) values (95,60);
+insert into t (id,a) values (95,61);
+insert into t (id,a) values (95,62);
+insert into t (id,a) values (95,63);
+insert into t (id,a) values (95,64);
+insert into t (id,a) values (95,65);
+insert into t (id,a) values (95,66);
+insert into t (id,a) values (95,67);
+insert into t (id,a) values (95,68);
+insert into t (id,a) values (95,69);
+insert into t (id,a) values (95,70);
+insert into t (id,a) values (95,71);
+insert into t (id,a) values (95,72);
+insert into t (id,a) values (95,73);
+insert into t (id,a) values (95,74);
+insert into t (id,a) values (95,75);
+insert into t (id,a) values (95,76);
+insert into t (id,a) values (95,77);
+insert into t (id,a) values (95,78);
+insert into t (id,a) values (95,79);
+insert into t (id,a) values (95,80);
+insert into t (id,a) values (95,81);
+insert into t (id,a) values (95,82);
+insert into t (id,a) values (95,83);
+insert into t (id,a) values (95,84);
+insert into t (id,a) values (95,85);
+insert into t (id,a) values (95,86);
+insert into t (id,a) values (95,87);
+insert into t (id,a) values (95,88);
+insert into t (id,a) values (95,89);
+insert into t (id,a) values (95,90);
+insert into t (id,a) values (95,91);
+insert into t (id,a) values (95,92);
+insert into t (id,a) values (95,93);
+insert into t (id,a) values (95,94);
+insert into t (id,a) values (95,95);
+insert into t (id,a) values (95,96);
+insert into t (id,a) values (95,97);
+insert into t (id,a) values (95,98);
+insert into t (id,a) values (95,99);
+insert into t (id,a) values (96,0);
+insert into t (id,a) values (96,1);
+insert into t (id,a) values (96,2);
+insert into t (id,a) values (96,3);
+insert into t (id,a) values (96,4);
+insert into t (id,a) values (96,5);
+insert into t (id,a) values (96,6);
+insert into t (id,a) values (96,7);
+insert into t (id,a) values (96,8);
+insert into t (id,a) values (96,9);
+insert into t (id,a) values (96,10);
+insert into t (id,a) values (96,11);
+insert into t (id,a) values (96,12);
+insert into t (id,a) values (96,13);
+insert into t (id,a) values (96,14);
+insert into t (id,a) values (96,15);
+insert into t (id,a) values (96,16);
+insert into t (id,a) values (96,17);
+insert into t (id,a) values (96,18);
+insert into t (id,a) values (96,19);
+insert into t (id,a) values (96,20);
+insert into t (id,a) values (96,21);
+insert into t (id,a) values (96,22);
+insert into t (id,a) values (96,23);
+insert into t (id,a) values (96,24);
+insert into t (id,a) values (96,25);
+insert into t (id,a) values (96,26);
+insert into t (id,a) values (96,27);
+insert into t (id,a) values (96,28);
+insert into t (id,a) values (96,29);
+insert into t (id,a) values (96,30);
+insert into t (id,a) values (96,31);
+insert into t (id,a) values (96,32);
+insert into t (id,a) values (96,33);
+insert into t (id,a) values (96,34);
+insert into t (id,a) values (96,35);
+insert into t (id,a) values (96,36);
+insert into t (id,a) values (96,37);
+insert into t (id,a) values (96,38);
+insert into t (id,a) values (96,39);
+insert into t (id,a) values (96,40);
+insert into t (id,a) values (96,41);
+insert into t (id,a) values (96,42);
+insert into t (id,a) values (96,43);
+insert into t (id,a) values (96,44);
+insert into t (id,a) values (96,45);
+insert into t (id,a) values (96,46);
+insert into t (id,a) values (96,47);
+insert into t (id,a) values (96,48);
+insert into t (id,a) values (96,49);
+insert into t (id,a) values (96,50);
+insert into t (id,a) values (96,51);
+insert into t (id,a) values (96,52);
+insert into t (id,a) values (96,53);
+insert into t (id,a) values (96,54);
+insert into t (id,a) values (96,55);
+insert into t (id,a) values (96,56);
+insert into t (id,a) values (96,57);
+insert into t (id,a) values (96,58);
+insert into t (id,a) values (96,59);
+insert into t (id,a) values (96,60);
+insert into t (id,a) values (96,61);
+insert into t (id,a) values (96,62);
+insert into t (id,a) values (96,63);
+insert into t (id,a) values (96,64);
+insert into t (id,a) values (96,65);
+insert into t (id,a) values (96,66);
+insert into t (id,a) values (96,67);
+insert into t (id,a) values (96,68);
+insert into t (id,a) values (96,69);
+insert into t (id,a) values (96,70);
+insert into t (id,a) values (96,71);
+insert into t (id,a) values (96,72);
+insert into t (id,a) values (96,73);
+insert into t (id,a) values (96,74);
+insert into t (id,a) values (96,75);
+insert into t (id,a) values (96,76);
+insert into t (id,a) values (96,77);
+insert into t (id,a) values (96,78);
+insert into t (id,a) values (96,79);
+insert into t (id,a) values (96,80);
+insert into t (id,a) values (96,81);
+insert into t (id,a) values (96,82);
+insert into t (id,a) values (96,83);
+insert into t (id,a) values (96,84);
+insert into t (id,a) values (96,85);
+insert into t (id,a) values (96,86);
+insert into t (id,a) values (96,87);
+insert into t (id,a) values (96,88);
+insert into t (id,a) values (96,89);
+insert into t (id,a) values (96,90);
+insert into t (id,a) values (96,91);
+insert into t (id,a) values (96,92);
+insert into t (id,a) values (96,93);
+insert into t (id,a) values (96,94);
+insert into t (id,a) values (96,95);
+insert into t (id,a) values (96,96);
+insert into t (id,a) values (96,97);
+insert into t (id,a) values (96,98);
+insert into t (id,a) values (96,99);
+insert into t (id,a) values (97,0);
+insert into t (id,a) values (97,1);
+insert into t (id,a) values (97,2);
+insert into t (id,a) values (97,3);
+insert into t (id,a) values (97,4);
+insert into t (id,a) values (97,5);
+insert into t (id,a) values (97,6);
+insert into t (id,a) values (97,7);
+insert into t (id,a) values (97,8);
+insert into t (id,a) values (97,9);
+insert into t (id,a) values (97,10);
+insert into t (id,a) values (97,11);
+insert into t (id,a) values (97,12);
+insert into t (id,a) values (97,13);
+insert into t (id,a) values (97,14);
+insert into t (id,a) values (97,15);
+insert into t (id,a) values (97,16);
+insert into t (id,a) values (97,17);
+insert into t (id,a) values (97,18);
+insert into t (id,a) values (97,19);
+insert into t (id,a) values (97,20);
+insert into t (id,a) values (97,21);
+insert into t (id,a) values (97,22);
+insert into t (id,a) values (97,23);
+insert into t (id,a) values (97,24);
+insert into t (id,a) values (97,25);
+insert into t (id,a) values (97,26);
+insert into t (id,a) values (97,27);
+insert into t (id,a) values (97,28);
+insert into t (id,a) values (97,29);
+insert into t (id,a) values (97,30);
+insert into t (id,a) values (97,31);
+insert into t (id,a) values (97,32);
+insert into t (id,a) values (97,33);
+insert into t (id,a) values (97,34);
+insert into t (id,a) values (97,35);
+insert into t (id,a) values (97,36);
+insert into t (id,a) values (97,37);
+insert into t (id,a) values (97,38);
+insert into t (id,a) values (97,39);
+insert into t (id,a) values (97,40);
+insert into t (id,a) values (97,41);
+insert into t (id,a) values (97,42);
+insert into t (id,a) values (97,43);
+insert into t (id,a) values (97,44);
+insert into t (id,a) values (97,45);
+insert into t (id,a) values (97,46);
+insert into t (id,a) values (97,47);
+insert into t (id,a) values (97,48);
+insert into t (id,a) values (97,49);
+insert into t (id,a) values (97,50);
+insert into t (id,a) values (97,51);
+insert into t (id,a) values (97,52);
+insert into t (id,a) values (97,53);
+insert into t (id,a) values (97,54);
+insert into t (id,a) values (97,55);
+insert into t (id,a) values (97,56);
+insert into t (id,a) values (97,57);
+insert into t (id,a) values (97,58);
+insert into t (id,a) values (97,59);
+insert into t (id,a) values (97,60);
+insert into t (id,a) values (97,61);
+insert into t (id,a) values (97,62);
+insert into t (id,a) values (97,63);
+insert into t (id,a) values (97,64);
+insert into t (id,a) values (97,65);
+insert into t (id,a) values (97,66);
+insert into t (id,a) values (97,67);
+insert into t (id,a) values (97,68);
+insert into t (id,a) values (97,69);
+insert into t (id,a) values (97,70);
+insert into t (id,a) values (97,71);
+insert into t (id,a) values (97,72);
+insert into t (id,a) values (97,73);
+insert into t (id,a) values (97,74);
+insert into t (id,a) values (97,75);
+insert into t (id,a) values (97,76);
+insert into t (id,a) values (97,77);
+insert into t (id,a) values (97,78);
+insert into t (id,a) values (97,79);
+insert into t (id,a) values (97,80);
+insert into t (id,a) values (97,81);
+insert into t (id,a) values (97,82);
+insert into t (id,a) values (97,83);
+insert into t (id,a) values (97,84);
+insert into t (id,a) values (97,85);
+insert into t (id,a) values (97,86);
+insert into t (id,a) values (97,87);
+insert into t (id,a) values (97,88);
+insert into t (id,a) values (97,89);
+insert into t (id,a) values (97,90);
+insert into t (id,a) values (97,91);
+insert into t (id,a) values (97,92);
+insert into t (id,a) values (97,93);
+insert into t (id,a) values (97,94);
+insert into t (id,a) values (97,95);
+insert into t (id,a) values (97,96);
+insert into t (id,a) values (97,97);
+insert into t (id,a) values (97,98);
+insert into t (id,a) values (97,99);
+insert into t (id,a) values (98,0);
+insert into t (id,a) values (98,1);
+insert into t (id,a) values (98,2);
+insert into t (id,a) values (98,3);
+insert into t (id,a) values (98,4);
+insert into t (id,a) values (98,5);
+insert into t (id,a) values (98,6);
+insert into t (id,a) values (98,7);
+insert into t (id,a) values (98,8);
+insert into t (id,a) values (98,9);
+insert into t (id,a) values (98,10);
+insert into t (id,a) values (98,11);
+insert into t (id,a) values (98,12);
+insert into t (id,a) values (98,13);
+insert into t (id,a) values (98,14);
+insert into t (id,a) values (98,15);
+insert into t (id,a) values (98,16);
+insert into t (id,a) values (98,17);
+insert into t (id,a) values (98,18);
+insert into t (id,a) values (98,19);
+insert into t (id,a) values (98,20);
+insert into t (id,a) values (98,21);
+insert into t (id,a) values (98,22);
+insert into t (id,a) values (98,23);
+insert into t (id,a) values (98,24);
+insert into t (id,a) values (98,25);
+insert into t (id,a) values (98,26);
+insert into t (id,a) values (98,27);
+insert into t (id,a) values (98,28);
+insert into t (id,a) values (98,29);
+insert into t (id,a) values (98,30);
+insert into t (id,a) values (98,31);
+insert into t (id,a) values (98,32);
+insert into t (id,a) values (98,33);
+insert into t (id,a) values (98,34);
+insert into t (id,a) values (98,35);
+insert into t (id,a) values (98,36);
+insert into t (id,a) values (98,37);
+insert into t (id,a) values (98,38);
+insert into t (id,a) values (98,39);
+insert into t (id,a) values (98,40);
+insert into t (id,a) values (98,41);
+insert into t (id,a) values (98,42);
+insert into t (id,a) values (98,43);
+insert into t (id,a) values (98,44);
+insert into t (id,a) values (98,45);
+insert into t (id,a) values (98,46);
+insert into t (id,a) values (98,47);
+insert into t (id,a) values (98,48);
+insert into t (id,a) values (98,49);
+insert into t (id,a) values (98,50);
+insert into t (id,a) values (98,51);
+insert into t (id,a) values (98,52);
+insert into t (id,a) values (98,53);
+insert into t (id,a) values (98,54);
+insert into t (id,a) values (98,55);
+insert into t (id,a) values (98,56);
+insert into t (id,a) values (98,57);
+insert into t (id,a) values (98,58);
+insert into t (id,a) values (98,59);
+insert into t (id,a) values (98,60);
+insert into t (id,a) values (98,61);
+insert into t (id,a) values (98,62);
+insert into t (id,a) values (98,63);
+insert into t (id,a) values (98,64);
+insert into t (id,a) values (98,65);
+insert into t (id,a) values (98,66);
+insert into t (id,a) values (98,67);
+insert into t (id,a) values (98,68);
+insert into t (id,a) values (98,69);
+insert into t (id,a) values (98,70);
+insert into t (id,a) values (98,71);
+insert into t (id,a) values (98,72);
+insert into t (id,a) values (98,73);
+insert into t (id,a) values (98,74);
+insert into t (id,a) values (98,75);
+insert into t (id,a) values (98,76);
+insert into t (id,a) values (98,77);
+insert into t (id,a) values (98,78);
+insert into t (id,a) values (98,79);
+insert into t (id,a) values (98,80);
+insert into t (id,a) values (98,81);
+insert into t (id,a) values (98,82);
+insert into t (id,a) values (98,83);
+insert into t (id,a) values (98,84);
+insert into t (id,a) values (98,85);
+insert into t (id,a) values (98,86);
+insert into t (id,a) values (98,87);
+insert into t (id,a) values (98,88);
+insert into t (id,a) values (98,89);
+insert into t (id,a) values (98,90);
+insert into t (id,a) values (98,91);
+insert into t (id,a) values (98,92);
+insert into t (id,a) values (98,93);
+insert into t (id,a) values (98,94);
+insert into t (id,a) values (98,95);
+insert into t (id,a) values (98,96);
+insert into t (id,a) values (98,97);
+insert into t (id,a) values (98,98);
+insert into t (id,a) values (98,99);
+insert into t (id,a) values (99,0);
+insert into t (id,a) values (99,1);
+insert into t (id,a) values (99,2);
+insert into t (id,a) values (99,3);
+insert into t (id,a) values (99,4);
+insert into t (id,a) values (99,5);
+insert into t (id,a) values (99,6);
+insert into t (id,a) values (99,7);
+insert into t (id,a) values (99,8);
+insert into t (id,a) values (99,9);
+insert into t (id,a) values (99,10);
+insert into t (id,a) values (99,11);
+insert into t (id,a) values (99,12);
+insert into t (id,a) values (99,13);
+insert into t (id,a) values (99,14);
+insert into t (id,a) values (99,15);
+insert into t (id,a) values (99,16);
+insert into t (id,a) values (99,17);
+insert into t (id,a) values (99,18);
+insert into t (id,a) values (99,19);
+insert into t (id,a) values (99,20);
+insert into t (id,a) values (99,21);
+insert into t (id,a) values (99,22);
+insert into t (id,a) values (99,23);
+insert into t (id,a) values (99,24);
+insert into t (id,a) values (99,25);
+insert into t (id,a) values (99,26);
+insert into t (id,a) values (99,27);
+insert into t (id,a) values (99,28);
+insert into t (id,a) values (99,29);
+insert into t (id,a) values (99,30);
+insert into t (id,a) values (99,31);
+insert into t (id,a) values (99,32);
+insert into t (id,a) values (99,33);
+insert into t (id,a) values (99,34);
+insert into t (id,a) values (99,35);
+insert into t (id,a) values (99,36);
+insert into t (id,a) values (99,37);
+insert into t (id,a) values (99,38);
+insert into t (id,a) values (99,39);
+insert into t (id,a) values (99,40);
+insert into t (id,a) values (99,41);
+insert into t (id,a) values (99,42);
+insert into t (id,a) values (99,43);
+insert into t (id,a) values (99,44);
+insert into t (id,a) values (99,45);
+insert into t (id,a) values (99,46);
+insert into t (id,a) values (99,47);
+insert into t (id,a) values (99,48);
+insert into t (id,a) values (99,49);
+insert into t (id,a) values (99,50);
+insert into t (id,a) values (99,51);
+insert into t (id,a) values (99,52);
+insert into t (id,a) values (99,53);
+insert into t (id,a) values (99,54);
+insert into t (id,a) values (99,55);
+insert into t (id,a) values (99,56);
+insert into t (id,a) values (99,57);
+insert into t (id,a) values (99,58);
+insert into t (id,a) values (99,59);
+insert into t (id,a) values (99,60);
+insert into t (id,a) values (99,61);
+insert into t (id,a) values (99,62);
+insert into t (id,a) values (99,63);
+insert into t (id,a) values (99,64);
+insert into t (id,a) values (99,65);
+insert into t (id,a) values (99,66);
+insert into t (id,a) values (99,67);
+insert into t (id,a) values (99,68);
+insert into t (id,a) values (99,69);
+insert into t (id,a) values (99,70);
+insert into t (id,a) values (99,71);
+insert into t (id,a) values (99,72);
+insert into t (id,a) values (99,73);
+insert into t (id,a) values (99,74);
+insert into t (id,a) values (99,75);
+insert into t (id,a) values (99,76);
+insert into t (id,a) values (99,77);
+insert into t (id,a) values (99,78);
+insert into t (id,a) values (99,79);
+insert into t (id,a) values (99,80);
+insert into t (id,a) values (99,81);
+insert into t (id,a) values (99,82);
+insert into t (id,a) values (99,83);
+insert into t (id,a) values (99,84);
+insert into t (id,a) values (99,85);
+insert into t (id,a) values (99,86);
+insert into t (id,a) values (99,87);
+insert into t (id,a) values (99,88);
+insert into t (id,a) values (99,89);
+insert into t (id,a) values (99,90);
+insert into t (id,a) values (99,91);
+insert into t (id,a) values (99,92);
+insert into t (id,a) values (99,93);
+insert into t (id,a) values (99,94);
+insert into t (id,a) values (99,95);
+insert into t (id,a) values (99,96);
+insert into t (id,a) values (99,97);
+insert into t (id,a) values (99,98);
+insert into t (id,a) values (99,99);
+insert into t (id,a) values (100,0);
+insert into t (id,a) values (100,1);
+insert into t (id,a) values (100,2);
+insert into t (id,a) values (100,3);
+insert into t (id,a) values (100,4);
+insert into t (id,a) values (100,5);
+insert into t (id,a) values (100,6);
+insert into t (id,a) values (100,7);
+insert into t (id,a) values (100,8);
+insert into t (id,a) values (100,9);
+insert into t (id,a) values (100,10);
+insert into t (id,a) values (100,11);
+insert into t (id,a) values (100,12);
+insert into t (id,a) values (100,13);
+insert into t (id,a) values (100,14);
+insert into t (id,a) values (100,15);
+insert into t (id,a) values (100,16);
+insert into t (id,a) values (100,17);
+insert into t (id,a) values (100,18);
+insert into t (id,a) values (100,19);
+insert into t (id,a) values (100,20);
+insert into t (id,a) values (100,21);
+insert into t (id,a) values (100,22);
+insert into t (id,a) values (100,23);
+insert into t (id,a) values (100,24);
+insert into t (id,a) values (100,25);
+insert into t (id,a) values (100,26);
+insert into t (id,a) values (100,27);
+insert into t (id,a) values (100,28);
+insert into t (id,a) values (100,29);
+insert into t (id,a) values (100,30);
+insert into t (id,a) values (100,31);
+insert into t (id,a) values (100,32);
+insert into t (id,a) values (100,33);
+insert into t (id,a) values (100,34);
+insert into t (id,a) values (100,35);
+insert into t (id,a) values (100,36);
+insert into t (id,a) values (100,37);
+insert into t (id,a) values (100,38);
+insert into t (id,a) values (100,39);
+insert into t (id,a) values (100,40);
+insert into t (id,a) values (100,41);
+insert into t (id,a) values (100,42);
+insert into t (id,a) values (100,43);
+insert into t (id,a) values (100,44);
+insert into t (id,a) values (100,45);
+insert into t (id,a) values (100,46);
+insert into t (id,a) values (100,47);
+insert into t (id,a) values (100,48);
+insert into t (id,a) values (100,49);
+insert into t (id,a) values (100,50);
+insert into t (id,a) values (100,51);
+insert into t (id,a) values (100,52);
+insert into t (id,a) values (100,53);
+insert into t (id,a) values (100,54);
+insert into t (id,a) values (100,55);
+insert into t (id,a) values (100,56);
+insert into t (id,a) values (100,57);
+insert into t (id,a) values (100,58);
+insert into t (id,a) values (100,59);
+insert into t (id,a) values (100,60);
+insert into t (id,a) values (100,61);
+insert into t (id,a) values (100,62);
+insert into t (id,a) values (100,63);
+insert into t (id,a) values (100,64);
+insert into t (id,a) values (100,65);
+insert into t (id,a) values (100,66);
+insert into t (id,a) values (100,67);
+insert into t (id,a) values (100,68);
+insert into t (id,a) values (100,69);
+insert into t (id,a) values (100,70);
+insert into t (id,a) values (100,71);
+insert into t (id,a) values (100,72);
+insert into t (id,a) values (100,73);
+insert into t (id,a) values (100,74);
+insert into t (id,a) values (100,75);
+insert into t (id,a) values (100,76);
+insert into t (id,a) values (100,77);
+insert into t (id,a) values (100,78);
+insert into t (id,a) values (100,79);
+insert into t (id,a) values (100,80);
+insert into t (id,a) values (100,81);
+insert into t (id,a) values (100,82);
+insert into t (id,a) values (100,83);
+insert into t (id,a) values (100,84);
+insert into t (id,a) values (100,85);
+insert into t (id,a) values (100,86);
+insert into t (id,a) values (100,87);
+insert into t (id,a) values (100,88);
+insert into t (id,a) values (100,89);
+insert into t (id,a) values (100,90);
+insert into t (id,a) values (100,91);
+insert into t (id,a) values (100,92);
+insert into t (id,a) values (100,93);
+insert into t (id,a) values (100,94);
+insert into t (id,a) values (100,95);
+insert into t (id,a) values (100,96);
+insert into t (id,a) values (100,97);
+insert into t (id,a) values (100,98);
+insert into t (id,a) values (100,99);
+insert into t (id,a) values (101,0);
+insert into t (id,a) values (101,1);
+insert into t (id,a) values (101,2);
+insert into t (id,a) values (101,3);
+insert into t (id,a) values (101,4);
+insert into t (id,a) values (101,5);
+insert into t (id,a) values (101,6);
+insert into t (id,a) values (101,7);
+insert into t (id,a) values (101,8);
+insert into t (id,a) values (101,9);
+insert into t (id,a) values (101,10);
+insert into t (id,a) values (101,11);
+insert into t (id,a) values (101,12);
+insert into t (id,a) values (101,13);
+insert into t (id,a) values (101,14);
+insert into t (id,a) values (101,15);
+insert into t (id,a) values (101,16);
+insert into t (id,a) values (101,17);
+insert into t (id,a) values (101,18);
+insert into t (id,a) values (101,19);
+insert into t (id,a) values (101,20);
+insert into t (id,a) values (101,21);
+insert into t (id,a) values (101,22);
+insert into t (id,a) values (101,23);
+insert into t (id,a) values (101,24);
+insert into t (id,a) values (101,25);
+insert into t (id,a) values (101,26);
+insert into t (id,a) values (101,27);
+insert into t (id,a) values (101,28);
+insert into t (id,a) values (101,29);
+insert into t (id,a) values (101,30);
+insert into t (id,a) values (101,31);
+insert into t (id,a) values (101,32);
+insert into t (id,a) values (101,33);
+insert into t (id,a) values (101,34);
+insert into t (id,a) values (101,35);
+insert into t (id,a) values (101,36);
+insert into t (id,a) values (101,37);
+insert into t (id,a) values (101,38);
+insert into t (id,a) values (101,39);
+insert into t (id,a) values (101,40);
+insert into t (id,a) values (101,41);
+insert into t (id,a) values (101,42);
+insert into t (id,a) values (101,43);
+insert into t (id,a) values (101,44);
+insert into t (id,a) values (101,45);
+insert into t (id,a) values (101,46);
+insert into t (id,a) values (101,47);
+insert into t (id,a) values (101,48);
+insert into t (id,a) values (101,49);
+insert into t (id,a) values (101,50);
+insert into t (id,a) values (101,51);
+insert into t (id,a) values (101,52);
+insert into t (id,a) values (101,53);
+insert into t (id,a) values (101,54);
+insert into t (id,a) values (101,55);
+insert into t (id,a) values (101,56);
+insert into t (id,a) values (101,57);
+insert into t (id,a) values (101,58);
+insert into t (id,a) values (101,59);
+insert into t (id,a) values (101,60);
+insert into t (id,a) values (101,61);
+insert into t (id,a) values (101,62);
+insert into t (id,a) values (101,63);
+insert into t (id,a) values (101,64);
+insert into t (id,a) values (101,65);
+insert into t (id,a) values (101,66);
+insert into t (id,a) values (101,67);
+insert into t (id,a) values (101,68);
+insert into t (id,a) values (101,69);
+insert into t (id,a) values (101,70);
+insert into t (id,a) values (101,71);
+insert into t (id,a) values (101,72);
+insert into t (id,a) values (101,73);
+insert into t (id,a) values (101,74);
+insert into t (id,a) values (101,75);
+insert into t (id,a) values (101,76);
+insert into t (id,a) values (101,77);
+insert into t (id,a) values (101,78);
+insert into t (id,a) values (101,79);
+insert into t (id,a) values (101,80);
+insert into t (id,a) values (101,81);
+insert into t (id,a) values (101,82);
+insert into t (id,a) values (101,83);
+insert into t (id,a) values (101,84);
+insert into t (id,a) values (101,85);
+insert into t (id,a) values (101,86);
+insert into t (id,a) values (101,87);
+insert into t (id,a) values (101,88);
+insert into t (id,a) values (101,89);
+insert into t (id,a) values (101,90);
+insert into t (id,a) values (101,91);
+insert into t (id,a) values (101,92);
+insert into t (id,a) values (101,93);
+insert into t (id,a) values (101,94);
+insert into t (id,a) values (101,95);
+insert into t (id,a) values (101,96);
+insert into t (id,a) values (101,97);
+insert into t (id,a) values (101,98);
+insert into t (id,a) values (101,99);
+insert into t (id,a) values (102,0);
+insert into t (id,a) values (102,1);
+insert into t (id,a) values (102,2);
+insert into t (id,a) values (102,3);
+insert into t (id,a) values (102,4);
+insert into t (id,a) values (102,5);
+insert into t (id,a) values (102,6);
+insert into t (id,a) values (102,7);
+insert into t (id,a) values (102,8);
+insert into t (id,a) values (102,9);
+insert into t (id,a) values (102,10);
+insert into t (id,a) values (102,11);
+insert into t (id,a) values (102,12);
+insert into t (id,a) values (102,13);
+insert into t (id,a) values (102,14);
+insert into t (id,a) values (102,15);
+insert into t (id,a) values (102,16);
+insert into t (id,a) values (102,17);
+insert into t (id,a) values (102,18);
+insert into t (id,a) values (102,19);
+insert into t (id,a) values (102,20);
+insert into t (id,a) values (102,21);
+insert into t (id,a) values (102,22);
+insert into t (id,a) values (102,23);
+insert into t (id,a) values (102,24);
+insert into t (id,a) values (102,25);
+insert into t (id,a) values (102,26);
+insert into t (id,a) values (102,27);
+insert into t (id,a) values (102,28);
+insert into t (id,a) values (102,29);
+insert into t (id,a) values (102,30);
+insert into t (id,a) values (102,31);
+insert into t (id,a) values (102,32);
+insert into t (id,a) values (102,33);
+insert into t (id,a) values (102,34);
+insert into t (id,a) values (102,35);
+insert into t (id,a) values (102,36);
+insert into t (id,a) values (102,37);
+insert into t (id,a) values (102,38);
+insert into t (id,a) values (102,39);
+insert into t (id,a) values (102,40);
+insert into t (id,a) values (102,41);
+insert into t (id,a) values (102,42);
+insert into t (id,a) values (102,43);
+insert into t (id,a) values (102,44);
+insert into t (id,a) values (102,45);
+insert into t (id,a) values (102,46);
+insert into t (id,a) values (102,47);
+insert into t (id,a) values (102,48);
+insert into t (id,a) values (102,49);
+insert into t (id,a) values (102,50);
+insert into t (id,a) values (102,51);
+insert into t (id,a) values (102,52);
+insert into t (id,a) values (102,53);
+insert into t (id,a) values (102,54);
+insert into t (id,a) values (102,55);
+insert into t (id,a) values (102,56);
+insert into t (id,a) values (102,57);
+insert into t (id,a) values (102,58);
+insert into t (id,a) values (102,59);
+insert into t (id,a) values (102,60);
+insert into t (id,a) values (102,61);
+insert into t (id,a) values (102,62);
+insert into t (id,a) values (102,63);
+insert into t (id,a) values (102,64);
+insert into t (id,a) values (102,65);
+insert into t (id,a) values (102,66);
+insert into t (id,a) values (102,67);
+insert into t (id,a) values (102,68);
+insert into t (id,a) values (102,69);
+insert into t (id,a) values (102,70);
+insert into t (id,a) values (102,71);
+insert into t (id,a) values (102,72);
+insert into t (id,a) values (102,73);
+insert into t (id,a) values (102,74);
+insert into t (id,a) values (102,75);
+insert into t (id,a) values (102,76);
+insert into t (id,a) values (102,77);
+insert into t (id,a) values (102,78);
+insert into t (id,a) values (102,79);
+insert into t (id,a) values (102,80);
+insert into t (id,a) values (102,81);
+insert into t (id,a) values (102,82);
+insert into t (id,a) values (102,83);
+insert into t (id,a) values (102,84);
+insert into t (id,a) values (102,85);
+insert into t (id,a) values (102,86);
+insert into t (id,a) values (102,87);
+insert into t (id,a) values (102,88);
+insert into t (id,a) values (102,89);
+insert into t (id,a) values (102,90);
+insert into t (id,a) values (102,91);
+insert into t (id,a) values (102,92);
+insert into t (id,a) values (102,93);
+insert into t (id,a) values (102,94);
+insert into t (id,a) values (102,95);
+insert into t (id,a) values (102,96);
+insert into t (id,a) values (102,97);
+insert into t (id,a) values (102,98);
+insert into t (id,a) values (102,99);
+insert into t (id,a) values (103,0);
+insert into t (id,a) values (103,1);
+insert into t (id,a) values (103,2);
+insert into t (id,a) values (103,3);
+insert into t (id,a) values (103,4);
+insert into t (id,a) values (103,5);
+insert into t (id,a) values (103,6);
+insert into t (id,a) values (103,7);
+insert into t (id,a) values (103,8);
+insert into t (id,a) values (103,9);
+insert into t (id,a) values (103,10);
+insert into t (id,a) values (103,11);
+insert into t (id,a) values (103,12);
+insert into t (id,a) values (103,13);
+insert into t (id,a) values (103,14);
+insert into t (id,a) values (103,15);
+insert into t (id,a) values (103,16);
+insert into t (id,a) values (103,17);
+insert into t (id,a) values (103,18);
+insert into t (id,a) values (103,19);
+insert into t (id,a) values (103,20);
+insert into t (id,a) values (103,21);
+insert into t (id,a) values (103,22);
+insert into t (id,a) values (103,23);
+insert into t (id,a) values (103,24);
+insert into t (id,a) values (103,25);
+insert into t (id,a) values (103,26);
+insert into t (id,a) values (103,27);
+insert into t (id,a) values (103,28);
+insert into t (id,a) values (103,29);
+insert into t (id,a) values (103,30);
+insert into t (id,a) values (103,31);
+insert into t (id,a) values (103,32);
+insert into t (id,a) values (103,33);
+insert into t (id,a) values (103,34);
+insert into t (id,a) values (103,35);
+insert into t (id,a) values (103,36);
+insert into t (id,a) values (103,37);
+insert into t (id,a) values (103,38);
+insert into t (id,a) values (103,39);
+insert into t (id,a) values (103,40);
+insert into t (id,a) values (103,41);
+insert into t (id,a) values (103,42);
+insert into t (id,a) values (103,43);
+insert into t (id,a) values (103,44);
+insert into t (id,a) values (103,45);
+insert into t (id,a) values (103,46);
+insert into t (id,a) values (103,47);
+insert into t (id,a) values (103,48);
+insert into t (id,a) values (103,49);
+insert into t (id,a) values (103,50);
+insert into t (id,a) values (103,51);
+insert into t (id,a) values (103,52);
+insert into t (id,a) values (103,53);
+insert into t (id,a) values (103,54);
+insert into t (id,a) values (103,55);
+insert into t (id,a) values (103,56);
+insert into t (id,a) values (103,57);
+insert into t (id,a) values (103,58);
+insert into t (id,a) values (103,59);
+insert into t (id,a) values (103,60);
+insert into t (id,a) values (103,61);
+insert into t (id,a) values (103,62);
+insert into t (id,a) values (103,63);
+insert into t (id,a) values (103,64);
+insert into t (id,a) values (103,65);
+insert into t (id,a) values (103,66);
+insert into t (id,a) values (103,67);
+insert into t (id,a) values (103,68);
+insert into t (id,a) values (103,69);
+insert into t (id,a) values (103,70);
+insert into t (id,a) values (103,71);
+insert into t (id,a) values (103,72);
+insert into t (id,a) values (103,73);
+insert into t (id,a) values (103,74);
+insert into t (id,a) values (103,75);
+insert into t (id,a) values (103,76);
+insert into t (id,a) values (103,77);
+insert into t (id,a) values (103,78);
+insert into t (id,a) values (103,79);
+insert into t (id,a) values (103,80);
+insert into t (id,a) values (103,81);
+insert into t (id,a) values (103,82);
+insert into t (id,a) values (103,83);
+insert into t (id,a) values (103,84);
+insert into t (id,a) values (103,85);
+insert into t (id,a) values (103,86);
+insert into t (id,a) values (103,87);
+insert into t (id,a) values (103,88);
+insert into t (id,a) values (103,89);
+insert into t (id,a) values (103,90);
+insert into t (id,a) values (103,91);
+insert into t (id,a) values (103,92);
+insert into t (id,a) values (103,93);
+insert into t (id,a) values (103,94);
+insert into t (id,a) values (103,95);
+insert into t (id,a) values (103,96);
+insert into t (id,a) values (103,97);
+insert into t (id,a) values (103,98);
+insert into t (id,a) values (103,99);
+insert into t (id,a) values (104,0);
+insert into t (id,a) values (104,1);
+insert into t (id,a) values (104,2);
+insert into t (id,a) values (104,3);
+insert into t (id,a) values (104,4);
+insert into t (id,a) values (104,5);
+insert into t (id,a) values (104,6);
+insert into t (id,a) values (104,7);
+insert into t (id,a) values (104,8);
+insert into t (id,a) values (104,9);
+insert into t (id,a) values (104,10);
+insert into t (id,a) values (104,11);
+insert into t (id,a) values (104,12);
+insert into t (id,a) values (104,13);
+insert into t (id,a) values (104,14);
+insert into t (id,a) values (104,15);
+insert into t (id,a) values (104,16);
+insert into t (id,a) values (104,17);
+insert into t (id,a) values (104,18);
+insert into t (id,a) values (104,19);
+insert into t (id,a) values (104,20);
+insert into t (id,a) values (104,21);
+insert into t (id,a) values (104,22);
+insert into t (id,a) values (104,23);
+insert into t (id,a) values (104,24);
+insert into t (id,a) values (104,25);
+insert into t (id,a) values (104,26);
+insert into t (id,a) values (104,27);
+insert into t (id,a) values (104,28);
+insert into t (id,a) values (104,29);
+insert into t (id,a) values (104,30);
+insert into t (id,a) values (104,31);
+insert into t (id,a) values (104,32);
+insert into t (id,a) values (104,33);
+insert into t (id,a) values (104,34);
+insert into t (id,a) values (104,35);
+insert into t (id,a) values (104,36);
+insert into t (id,a) values (104,37);
+insert into t (id,a) values (104,38);
+insert into t (id,a) values (104,39);
+insert into t (id,a) values (104,40);
+insert into t (id,a) values (104,41);
+insert into t (id,a) values (104,42);
+insert into t (id,a) values (104,43);
+insert into t (id,a) values (104,44);
+insert into t (id,a) values (104,45);
+insert into t (id,a) values (104,46);
+insert into t (id,a) values (104,47);
+insert into t (id,a) values (104,48);
+insert into t (id,a) values (104,49);
+insert into t (id,a) values (104,50);
+insert into t (id,a) values (104,51);
+insert into t (id,a) values (104,52);
+insert into t (id,a) values (104,53);
+insert into t (id,a) values (104,54);
+insert into t (id,a) values (104,55);
+insert into t (id,a) values (104,56);
+insert into t (id,a) values (104,57);
+insert into t (id,a) values (104,58);
+insert into t (id,a) values (104,59);
+insert into t (id,a) values (104,60);
+insert into t (id,a) values (104,61);
+insert into t (id,a) values (104,62);
+insert into t (id,a) values (104,63);
+insert into t (id,a) values (104,64);
+insert into t (id,a) values (104,65);
+insert into t (id,a) values (104,66);
+insert into t (id,a) values (104,67);
+insert into t (id,a) values (104,68);
+insert into t (id,a) values (104,69);
+insert into t (id,a) values (104,70);
+insert into t (id,a) values (104,71);
+insert into t (id,a) values (104,72);
+insert into t (id,a) values (104,73);
+insert into t (id,a) values (104,74);
+insert into t (id,a) values (104,75);
+insert into t (id,a) values (104,76);
+insert into t (id,a) values (104,77);
+insert into t (id,a) values (104,78);
+insert into t (id,a) values (104,79);
+insert into t (id,a) values (104,80);
+insert into t (id,a) values (104,81);
+insert into t (id,a) values (104,82);
+insert into t (id,a) values (104,83);
+insert into t (id,a) values (104,84);
+insert into t (id,a) values (104,85);
+insert into t (id,a) values (104,86);
+insert into t (id,a) values (104,87);
+insert into t (id,a) values (104,88);
+insert into t (id,a) values (104,89);
+insert into t (id,a) values (104,90);
+insert into t (id,a) values (104,91);
+insert into t (id,a) values (104,92);
+insert into t (id,a) values (104,93);
+insert into t (id,a) values (104,94);
+insert into t (id,a) values (104,95);
+insert into t (id,a) values (104,96);
+insert into t (id,a) values (104,97);
+insert into t (id,a) values (104,98);
+insert into t (id,a) values (104,99);
+insert into t (id,a) values (105,0);
+insert into t (id,a) values (105,1);
+insert into t (id,a) values (105,2);
+insert into t (id,a) values (105,3);
+insert into t (id,a) values (105,4);
+insert into t (id,a) values (105,5);
+insert into t (id,a) values (105,6);
+insert into t (id,a) values (105,7);
+insert into t (id,a) values (105,8);
+insert into t (id,a) values (105,9);
+insert into t (id,a) values (105,10);
+insert into t (id,a) values (105,11);
+insert into t (id,a) values (105,12);
+insert into t (id,a) values (105,13);
+insert into t (id,a) values (105,14);
+insert into t (id,a) values (105,15);
+insert into t (id,a) values (105,16);
+insert into t (id,a) values (105,17);
+insert into t (id,a) values (105,18);
+insert into t (id,a) values (105,19);
+insert into t (id,a) values (105,20);
+insert into t (id,a) values (105,21);
+insert into t (id,a) values (105,22);
+insert into t (id,a) values (105,23);
+insert into t (id,a) values (105,24);
+insert into t (id,a) values (105,25);
+insert into t (id,a) values (105,26);
+insert into t (id,a) values (105,27);
+insert into t (id,a) values (105,28);
+insert into t (id,a) values (105,29);
+insert into t (id,a) values (105,30);
+insert into t (id,a) values (105,31);
+insert into t (id,a) values (105,32);
+insert into t (id,a) values (105,33);
+insert into t (id,a) values (105,34);
+insert into t (id,a) values (105,35);
+insert into t (id,a) values (105,36);
+insert into t (id,a) values (105,37);
+insert into t (id,a) values (105,38);
+insert into t (id,a) values (105,39);
+insert into t (id,a) values (105,40);
+insert into t (id,a) values (105,41);
+insert into t (id,a) values (105,42);
+insert into t (id,a) values (105,43);
+insert into t (id,a) values (105,44);
+insert into t (id,a) values (105,45);
+insert into t (id,a) values (105,46);
+insert into t (id,a) values (105,47);
+insert into t (id,a) values (105,48);
+insert into t (id,a) values (105,49);
+insert into t (id,a) values (105,50);
+insert into t (id,a) values (105,51);
+insert into t (id,a) values (105,52);
+insert into t (id,a) values (105,53);
+insert into t (id,a) values (105,54);
+insert into t (id,a) values (105,55);
+insert into t (id,a) values (105,56);
+insert into t (id,a) values (105,57);
+insert into t (id,a) values (105,58);
+insert into t (id,a) values (105,59);
+insert into t (id,a) values (105,60);
+insert into t (id,a) values (105,61);
+insert into t (id,a) values (105,62);
+insert into t (id,a) values (105,63);
+insert into t (id,a) values (105,64);
+insert into t (id,a) values (105,65);
+insert into t (id,a) values (105,66);
+insert into t (id,a) values (105,67);
+insert into t (id,a) values (105,68);
+insert into t (id,a) values (105,69);
+insert into t (id,a) values (105,70);
+insert into t (id,a) values (105,71);
+insert into t (id,a) values (105,72);
+insert into t (id,a) values (105,73);
+insert into t (id,a) values (105,74);
+insert into t (id,a) values (105,75);
+insert into t (id,a) values (105,76);
+insert into t (id,a) values (105,77);
+insert into t (id,a) values (105,78);
+insert into t (id,a) values (105,79);
+insert into t (id,a) values (105,80);
+insert into t (id,a) values (105,81);
+insert into t (id,a) values (105,82);
+insert into t (id,a) values (105,83);
+insert into t (id,a) values (105,84);
+insert into t (id,a) values (105,85);
+insert into t (id,a) values (105,86);
+insert into t (id,a) values (105,87);
+insert into t (id,a) values (105,88);
+insert into t (id,a) values (105,89);
+insert into t (id,a) values (105,90);
+insert into t (id,a) values (105,91);
+insert into t (id,a) values (105,92);
+insert into t (id,a) values (105,93);
+insert into t (id,a) values (105,94);
+insert into t (id,a) values (105,95);
+insert into t (id,a) values (105,96);
+insert into t (id,a) values (105,97);
+insert into t (id,a) values (105,98);
+insert into t (id,a) values (105,99);
+insert into t (id,a) values (106,0);
+insert into t (id,a) values (106,1);
+insert into t (id,a) values (106,2);
+insert into t (id,a) values (106,3);
+insert into t (id,a) values (106,4);
+insert into t (id,a) values (106,5);
+insert into t (id,a) values (106,6);
+insert into t (id,a) values (106,7);
+insert into t (id,a) values (106,8);
+insert into t (id,a) values (106,9);
+insert into t (id,a) values (106,10);
+insert into t (id,a) values (106,11);
+insert into t (id,a) values (106,12);
+insert into t (id,a) values (106,13);
+insert into t (id,a) values (106,14);
+insert into t (id,a) values (106,15);
+insert into t (id,a) values (106,16);
+insert into t (id,a) values (106,17);
+insert into t (id,a) values (106,18);
+insert into t (id,a) values (106,19);
+insert into t (id,a) values (106,20);
+insert into t (id,a) values (106,21);
+insert into t (id,a) values (106,22);
+insert into t (id,a) values (106,23);
+insert into t (id,a) values (106,24);
+insert into t (id,a) values (106,25);
+insert into t (id,a) values (106,26);
+insert into t (id,a) values (106,27);
+insert into t (id,a) values (106,28);
+insert into t (id,a) values (106,29);
+insert into t (id,a) values (106,30);
+insert into t (id,a) values (106,31);
+insert into t (id,a) values (106,32);
+insert into t (id,a) values (106,33);
+insert into t (id,a) values (106,34);
+insert into t (id,a) values (106,35);
+insert into t (id,a) values (106,36);
+insert into t (id,a) values (106,37);
+insert into t (id,a) values (106,38);
+insert into t (id,a) values (106,39);
+insert into t (id,a) values (106,40);
+insert into t (id,a) values (106,41);
+insert into t (id,a) values (106,42);
+insert into t (id,a) values (106,43);
+insert into t (id,a) values (106,44);
+insert into t (id,a) values (106,45);
+insert into t (id,a) values (106,46);
+insert into t (id,a) values (106,47);
+insert into t (id,a) values (106,48);
+insert into t (id,a) values (106,49);
+insert into t (id,a) values (106,50);
+insert into t (id,a) values (106,51);
+insert into t (id,a) values (106,52);
+insert into t (id,a) values (106,53);
+insert into t (id,a) values (106,54);
+insert into t (id,a) values (106,55);
+insert into t (id,a) values (106,56);
+insert into t (id,a) values (106,57);
+insert into t (id,a) values (106,58);
+insert into t (id,a) values (106,59);
+insert into t (id,a) values (106,60);
+insert into t (id,a) values (106,61);
+insert into t (id,a) values (106,62);
+insert into t (id,a) values (106,63);
+insert into t (id,a) values (106,64);
+insert into t (id,a) values (106,65);
+insert into t (id,a) values (106,66);
+insert into t (id,a) values (106,67);
+insert into t (id,a) values (106,68);
+insert into t (id,a) values (106,69);
+insert into t (id,a) values (106,70);
+insert into t (id,a) values (106,71);
+insert into t (id,a) values (106,72);
+insert into t (id,a) values (106,73);
+insert into t (id,a) values (106,74);
+insert into t (id,a) values (106,75);
+insert into t (id,a) values (106,76);
+insert into t (id,a) values (106,77);
+insert into t (id,a) values (106,78);
+insert into t (id,a) values (106,79);
+insert into t (id,a) values (106,80);
+insert into t (id,a) values (106,81);
+insert into t (id,a) values (106,82);
+insert into t (id,a) values (106,83);
+insert into t (id,a) values (106,84);
+insert into t (id,a) values (106,85);
+insert into t (id,a) values (106,86);
+insert into t (id,a) values (106,87);
+insert into t (id,a) values (106,88);
+insert into t (id,a) values (106,89);
+insert into t (id,a) values (106,90);
+insert into t (id,a) values (106,91);
+insert into t (id,a) values (106,92);
+insert into t (id,a) values (106,93);
+insert into t (id,a) values (106,94);
+insert into t (id,a) values (106,95);
+insert into t (id,a) values (106,96);
+insert into t (id,a) values (106,97);
+insert into t (id,a) values (106,98);
+insert into t (id,a) values (106,99);
+insert into t (id,a) values (107,0);
+insert into t (id,a) values (107,1);
+insert into t (id,a) values (107,2);
+insert into t (id,a) values (107,3);
+insert into t (id,a) values (107,4);
+insert into t (id,a) values (107,5);
+insert into t (id,a) values (107,6);
+insert into t (id,a) values (107,7);
+insert into t (id,a) values (107,8);
+insert into t (id,a) values (107,9);
+insert into t (id,a) values (107,10);
+insert into t (id,a) values (107,11);
+insert into t (id,a) values (107,12);
+insert into t (id,a) values (107,13);
+insert into t (id,a) values (107,14);
+insert into t (id,a) values (107,15);
+insert into t (id,a) values (107,16);
+insert into t (id,a) values (107,17);
+insert into t (id,a) values (107,18);
+insert into t (id,a) values (107,19);
+insert into t (id,a) values (107,20);
+insert into t (id,a) values (107,21);
+insert into t (id,a) values (107,22);
+insert into t (id,a) values (107,23);
+insert into t (id,a) values (107,24);
+insert into t (id,a) values (107,25);
+insert into t (id,a) values (107,26);
+insert into t (id,a) values (107,27);
+insert into t (id,a) values (107,28);
+insert into t (id,a) values (107,29);
+insert into t (id,a) values (107,30);
+insert into t (id,a) values (107,31);
+insert into t (id,a) values (107,32);
+insert into t (id,a) values (107,33);
+insert into t (id,a) values (107,34);
+insert into t (id,a) values (107,35);
+insert into t (id,a) values (107,36);
+insert into t (id,a) values (107,37);
+insert into t (id,a) values (107,38);
+insert into t (id,a) values (107,39);
+insert into t (id,a) values (107,40);
+insert into t (id,a) values (107,41);
+insert into t (id,a) values (107,42);
+insert into t (id,a) values (107,43);
+insert into t (id,a) values (107,44);
+insert into t (id,a) values (107,45);
+insert into t (id,a) values (107,46);
+insert into t (id,a) values (107,47);
+insert into t (id,a) values (107,48);
+insert into t (id,a) values (107,49);
+insert into t (id,a) values (107,50);
+insert into t (id,a) values (107,51);
+insert into t (id,a) values (107,52);
+insert into t (id,a) values (107,53);
+insert into t (id,a) values (107,54);
+insert into t (id,a) values (107,55);
+insert into t (id,a) values (107,56);
+insert into t (id,a) values (107,57);
+insert into t (id,a) values (107,58);
+insert into t (id,a) values (107,59);
+insert into t (id,a) values (107,60);
+insert into t (id,a) values (107,61);
+insert into t (id,a) values (107,62);
+insert into t (id,a) values (107,63);
+insert into t (id,a) values (107,64);
+insert into t (id,a) values (107,65);
+insert into t (id,a) values (107,66);
+insert into t (id,a) values (107,67);
+insert into t (id,a) values (107,68);
+insert into t (id,a) values (107,69);
+insert into t (id,a) values (107,70);
+insert into t (id,a) values (107,71);
+insert into t (id,a) values (107,72);
+insert into t (id,a) values (107,73);
+insert into t (id,a) values (107,74);
+insert into t (id,a) values (107,75);
+insert into t (id,a) values (107,76);
+insert into t (id,a) values (107,77);
+insert into t (id,a) values (107,78);
+insert into t (id,a) values (107,79);
+insert into t (id,a) values (107,80);
+insert into t (id,a) values (107,81);
+insert into t (id,a) values (107,82);
+insert into t (id,a) values (107,83);
+insert into t (id,a) values (107,84);
+insert into t (id,a) values (107,85);
+insert into t (id,a) values (107,86);
+insert into t (id,a) values (107,87);
+insert into t (id,a) values (107,88);
+insert into t (id,a) values (107,89);
+insert into t (id,a) values (107,90);
+insert into t (id,a) values (107,91);
+insert into t (id,a) values (107,92);
+insert into t (id,a) values (107,93);
+insert into t (id,a) values (107,94);
+insert into t (id,a) values (107,95);
+insert into t (id,a) values (107,96);
+insert into t (id,a) values (107,97);
+insert into t (id,a) values (107,98);
+insert into t (id,a) values (107,99);
+insert into t (id,a) values (108,0);
+insert into t (id,a) values (108,1);
+insert into t (id,a) values (108,2);
+insert into t (id,a) values (108,3);
+insert into t (id,a) values (108,4);
+insert into t (id,a) values (108,5);
+insert into t (id,a) values (108,6);
+insert into t (id,a) values (108,7);
+insert into t (id,a) values (108,8);
+insert into t (id,a) values (108,9);
+insert into t (id,a) values (108,10);
+insert into t (id,a) values (108,11);
+insert into t (id,a) values (108,12);
+insert into t (id,a) values (108,13);
+insert into t (id,a) values (108,14);
+insert into t (id,a) values (108,15);
+insert into t (id,a) values (108,16);
+insert into t (id,a) values (108,17);
+insert into t (id,a) values (108,18);
+insert into t (id,a) values (108,19);
+insert into t (id,a) values (108,20);
+insert into t (id,a) values (108,21);
+insert into t (id,a) values (108,22);
+insert into t (id,a) values (108,23);
+insert into t (id,a) values (108,24);
+insert into t (id,a) values (108,25);
+insert into t (id,a) values (108,26);
+insert into t (id,a) values (108,27);
+insert into t (id,a) values (108,28);
+insert into t (id,a) values (108,29);
+insert into t (id,a) values (108,30);
+insert into t (id,a) values (108,31);
+insert into t (id,a) values (108,32);
+insert into t (id,a) values (108,33);
+insert into t (id,a) values (108,34);
+insert into t (id,a) values (108,35);
+insert into t (id,a) values (108,36);
+insert into t (id,a) values (108,37);
+insert into t (id,a) values (108,38);
+insert into t (id,a) values (108,39);
+insert into t (id,a) values (108,40);
+insert into t (id,a) values (108,41);
+insert into t (id,a) values (108,42);
+insert into t (id,a) values (108,43);
+insert into t (id,a) values (108,44);
+insert into t (id,a) values (108,45);
+insert into t (id,a) values (108,46);
+insert into t (id,a) values (108,47);
+insert into t (id,a) values (108,48);
+insert into t (id,a) values (108,49);
+insert into t (id,a) values (108,50);
+insert into t (id,a) values (108,51);
+insert into t (id,a) values (108,52);
+insert into t (id,a) values (108,53);
+insert into t (id,a) values (108,54);
+insert into t (id,a) values (108,55);
+insert into t (id,a) values (108,56);
+insert into t (id,a) values (108,57);
+insert into t (id,a) values (108,58);
+insert into t (id,a) values (108,59);
+insert into t (id,a) values (108,60);
+insert into t (id,a) values (108,61);
+insert into t (id,a) values (108,62);
+insert into t (id,a) values (108,63);
+insert into t (id,a) values (108,64);
+insert into t (id,a) values (108,65);
+insert into t (id,a) values (108,66);
+insert into t (id,a) values (108,67);
+insert into t (id,a) values (108,68);
+insert into t (id,a) values (108,69);
+insert into t (id,a) values (108,70);
+insert into t (id,a) values (108,71);
+insert into t (id,a) values (108,72);
+insert into t (id,a) values (108,73);
+insert into t (id,a) values (108,74);
+insert into t (id,a) values (108,75);
+insert into t (id,a) values (108,76);
+insert into t (id,a) values (108,77);
+insert into t (id,a) values (108,78);
+insert into t (id,a) values (108,79);
+insert into t (id,a) values (108,80);
+insert into t (id,a) values (108,81);
+insert into t (id,a) values (108,82);
+insert into t (id,a) values (108,83);
+insert into t (id,a) values (108,84);
+insert into t (id,a) values (108,85);
+insert into t (id,a) values (108,86);
+insert into t (id,a) values (108,87);
+insert into t (id,a) values (108,88);
+insert into t (id,a) values (108,89);
+insert into t (id,a) values (108,90);
+insert into t (id,a) values (108,91);
+insert into t (id,a) values (108,92);
+insert into t (id,a) values (108,93);
+insert into t (id,a) values (108,94);
+insert into t (id,a) values (108,95);
+insert into t (id,a) values (108,96);
+insert into t (id,a) values (108,97);
+insert into t (id,a) values (108,98);
+insert into t (id,a) values (108,99);
+insert into t (id,a) values (109,0);
+insert into t (id,a) values (109,1);
+insert into t (id,a) values (109,2);
+insert into t (id,a) values (109,3);
+insert into t (id,a) values (109,4);
+insert into t (id,a) values (109,5);
+insert into t (id,a) values (109,6);
+insert into t (id,a) values (109,7);
+insert into t (id,a) values (109,8);
+insert into t (id,a) values (109,9);
+insert into t (id,a) values (109,10);
+insert into t (id,a) values (109,11);
+insert into t (id,a) values (109,12);
+insert into t (id,a) values (109,13);
+insert into t (id,a) values (109,14);
+insert into t (id,a) values (109,15);
+insert into t (id,a) values (109,16);
+insert into t (id,a) values (109,17);
+insert into t (id,a) values (109,18);
+insert into t (id,a) values (109,19);
+insert into t (id,a) values (109,20);
+insert into t (id,a) values (109,21);
+insert into t (id,a) values (109,22);
+insert into t (id,a) values (109,23);
+insert into t (id,a) values (109,24);
+insert into t (id,a) values (109,25);
+insert into t (id,a) values (109,26);
+insert into t (id,a) values (109,27);
+insert into t (id,a) values (109,28);
+insert into t (id,a) values (109,29);
+insert into t (id,a) values (109,30);
+insert into t (id,a) values (109,31);
+insert into t (id,a) values (109,32);
+insert into t (id,a) values (109,33);
+insert into t (id,a) values (109,34);
+insert into t (id,a) values (109,35);
+insert into t (id,a) values (109,36);
+insert into t (id,a) values (109,37);
+insert into t (id,a) values (109,38);
+insert into t (id,a) values (109,39);
+insert into t (id,a) values (109,40);
+insert into t (id,a) values (109,41);
+insert into t (id,a) values (109,42);
+insert into t (id,a) values (109,43);
+insert into t (id,a) values (109,44);
+insert into t (id,a) values (109,45);
+insert into t (id,a) values (109,46);
+insert into t (id,a) values (109,47);
+insert into t (id,a) values (109,48);
+insert into t (id,a) values (109,49);
+insert into t (id,a) values (109,50);
+insert into t (id,a) values (109,51);
+insert into t (id,a) values (109,52);
+insert into t (id,a) values (109,53);
+insert into t (id,a) values (109,54);
+insert into t (id,a) values (109,55);
+insert into t (id,a) values (109,56);
+insert into t (id,a) values (109,57);
+insert into t (id,a) values (109,58);
+insert into t (id,a) values (109,59);
+insert into t (id,a) values (109,60);
+insert into t (id,a) values (109,61);
+insert into t (id,a) values (109,62);
+insert into t (id,a) values (109,63);
+insert into t (id,a) values (109,64);
+insert into t (id,a) values (109,65);
+insert into t (id,a) values (109,66);
+insert into t (id,a) values (109,67);
+insert into t (id,a) values (109,68);
+insert into t (id,a) values (109,69);
+insert into t (id,a) values (109,70);
+insert into t (id,a) values (109,71);
+insert into t (id,a) values (109,72);
+insert into t (id,a) values (109,73);
+insert into t (id,a) values (109,74);
+insert into t (id,a) values (109,75);
+insert into t (id,a) values (109,76);
+insert into t (id,a) values (109,77);
+insert into t (id,a) values (109,78);
+insert into t (id,a) values (109,79);
+insert into t (id,a) values (109,80);
+insert into t (id,a) values (109,81);
+insert into t (id,a) values (109,82);
+insert into t (id,a) values (109,83);
+insert into t (id,a) values (109,84);
+insert into t (id,a) values (109,85);
+insert into t (id,a) values (109,86);
+insert into t (id,a) values (109,87);
+insert into t (id,a) values (109,88);
+insert into t (id,a) values (109,89);
+insert into t (id,a) values (109,90);
+insert into t (id,a) values (109,91);
+insert into t (id,a) values (109,92);
+insert into t (id,a) values (109,93);
+insert into t (id,a) values (109,94);
+insert into t (id,a) values (109,95);
+insert into t (id,a) values (109,96);
+insert into t (id,a) values (109,97);
+insert into t (id,a) values (109,98);
+insert into t (id,a) values (109,99);
+insert into t (id,a) values (110,0);
+insert into t (id,a) values (110,1);
+insert into t (id,a) values (110,2);
+insert into t (id,a) values (110,3);
+insert into t (id,a) values (110,4);
+insert into t (id,a) values (110,5);
+insert into t (id,a) values (110,6);
+insert into t (id,a) values (110,7);
+insert into t (id,a) values (110,8);
+insert into t (id,a) values (110,9);
+insert into t (id,a) values (110,10);
+insert into t (id,a) values (110,11);
+insert into t (id,a) values (110,12);
+insert into t (id,a) values (110,13);
+insert into t (id,a) values (110,14);
+insert into t (id,a) values (110,15);
+insert into t (id,a) values (110,16);
+insert into t (id,a) values (110,17);
+insert into t (id,a) values (110,18);
+insert into t (id,a) values (110,19);
+insert into t (id,a) values (110,20);
+insert into t (id,a) values (110,21);
+insert into t (id,a) values (110,22);
+insert into t (id,a) values (110,23);
+insert into t (id,a) values (110,24);
+insert into t (id,a) values (110,25);
+insert into t (id,a) values (110,26);
+insert into t (id,a) values (110,27);
+insert into t (id,a) values (110,28);
+insert into t (id,a) values (110,29);
+insert into t (id,a) values (110,30);
+insert into t (id,a) values (110,31);
+insert into t (id,a) values (110,32);
+insert into t (id,a) values (110,33);
+insert into t (id,a) values (110,34);
+insert into t (id,a) values (110,35);
+insert into t (id,a) values (110,36);
+insert into t (id,a) values (110,37);
+insert into t (id,a) values (110,38);
+insert into t (id,a) values (110,39);
+insert into t (id,a) values (110,40);
+insert into t (id,a) values (110,41);
+insert into t (id,a) values (110,42);
+insert into t (id,a) values (110,43);
+insert into t (id,a) values (110,44);
+insert into t (id,a) values (110,45);
+insert into t (id,a) values (110,46);
+insert into t (id,a) values (110,47);
+insert into t (id,a) values (110,48);
+insert into t (id,a) values (110,49);
+insert into t (id,a) values (110,50);
+insert into t (id,a) values (110,51);
+insert into t (id,a) values (110,52);
+insert into t (id,a) values (110,53);
+insert into t (id,a) values (110,54);
+insert into t (id,a) values (110,55);
+insert into t (id,a) values (110,56);
+insert into t (id,a) values (110,57);
+insert into t (id,a) values (110,58);
+insert into t (id,a) values (110,59);
+insert into t (id,a) values (110,60);
+insert into t (id,a) values (110,61);
+insert into t (id,a) values (110,62);
+insert into t (id,a) values (110,63);
+insert into t (id,a) values (110,64);
+insert into t (id,a) values (110,65);
+insert into t (id,a) values (110,66);
+insert into t (id,a) values (110,67);
+insert into t (id,a) values (110,68);
+insert into t (id,a) values (110,69);
+insert into t (id,a) values (110,70);
+insert into t (id,a) values (110,71);
+insert into t (id,a) values (110,72);
+insert into t (id,a) values (110,73);
+insert into t (id,a) values (110,74);
+insert into t (id,a) values (110,75);
+insert into t (id,a) values (110,76);
+insert into t (id,a) values (110,77);
+insert into t (id,a) values (110,78);
+insert into t (id,a) values (110,79);
+insert into t (id,a) values (110,80);
+insert into t (id,a) values (110,81);
+insert into t (id,a) values (110,82);
+insert into t (id,a) values (110,83);
+insert into t (id,a) values (110,84);
+insert into t (id,a) values (110,85);
+insert into t (id,a) values (110,86);
+insert into t (id,a) values (110,87);
+insert into t (id,a) values (110,88);
+insert into t (id,a) values (110,89);
+insert into t (id,a) values (110,90);
+insert into t (id,a) values (110,91);
+insert into t (id,a) values (110,92);
+insert into t (id,a) values (110,93);
+insert into t (id,a) values (110,94);
+insert into t (id,a) values (110,95);
+insert into t (id,a) values (110,96);
+insert into t (id,a) values (110,97);
+insert into t (id,a) values (110,98);
+insert into t (id,a) values (110,99);
+insert into t (id,a) values (111,0);
+insert into t (id,a) values (111,1);
+insert into t (id,a) values (111,2);
+insert into t (id,a) values (111,3);
+insert into t (id,a) values (111,4);
+insert into t (id,a) values (111,5);
+insert into t (id,a) values (111,6);
+insert into t (id,a) values (111,7);
+insert into t (id,a) values (111,8);
+insert into t (id,a) values (111,9);
+insert into t (id,a) values (111,10);
+insert into t (id,a) values (111,11);
+insert into t (id,a) values (111,12);
+insert into t (id,a) values (111,13);
+insert into t (id,a) values (111,14);
+insert into t (id,a) values (111,15);
+insert into t (id,a) values (111,16);
+insert into t (id,a) values (111,17);
+insert into t (id,a) values (111,18);
+insert into t (id,a) values (111,19);
+insert into t (id,a) values (111,20);
+insert into t (id,a) values (111,21);
+insert into t (id,a) values (111,22);
+insert into t (id,a) values (111,23);
+insert into t (id,a) values (111,24);
+insert into t (id,a) values (111,25);
+insert into t (id,a) values (111,26);
+insert into t (id,a) values (111,27);
+insert into t (id,a) values (111,28);
+insert into t (id,a) values (111,29);
+insert into t (id,a) values (111,30);
+insert into t (id,a) values (111,31);
+insert into t (id,a) values (111,32);
+insert into t (id,a) values (111,33);
+insert into t (id,a) values (111,34);
+insert into t (id,a) values (111,35);
+insert into t (id,a) values (111,36);
+insert into t (id,a) values (111,37);
+insert into t (id,a) values (111,38);
+insert into t (id,a) values (111,39);
+insert into t (id,a) values (111,40);
+insert into t (id,a) values (111,41);
+insert into t (id,a) values (111,42);
+insert into t (id,a) values (111,43);
+insert into t (id,a) values (111,44);
+insert into t (id,a) values (111,45);
+insert into t (id,a) values (111,46);
+insert into t (id,a) values (111,47);
+insert into t (id,a) values (111,48);
+insert into t (id,a) values (111,49);
+insert into t (id,a) values (111,50);
+insert into t (id,a) values (111,51);
+insert into t (id,a) values (111,52);
+insert into t (id,a) values (111,53);
+insert into t (id,a) values (111,54);
+insert into t (id,a) values (111,55);
+insert into t (id,a) values (111,56);
+insert into t (id,a) values (111,57);
+insert into t (id,a) values (111,58);
+insert into t (id,a) values (111,59);
+insert into t (id,a) values (111,60);
+insert into t (id,a) values (111,61);
+insert into t (id,a) values (111,62);
+insert into t (id,a) values (111,63);
+insert into t (id,a) values (111,64);
+insert into t (id,a) values (111,65);
+insert into t (id,a) values (111,66);
+insert into t (id,a) values (111,67);
+insert into t (id,a) values (111,68);
+insert into t (id,a) values (111,69);
+insert into t (id,a) values (111,70);
+insert into t (id,a) values (111,71);
+insert into t (id,a) values (111,72);
+insert into t (id,a) values (111,73);
+insert into t (id,a) values (111,74);
+insert into t (id,a) values (111,75);
+insert into t (id,a) values (111,76);
+insert into t (id,a) values (111,77);
+insert into t (id,a) values (111,78);
+insert into t (id,a) values (111,79);
+insert into t (id,a) values (111,80);
+insert into t (id,a) values (111,81);
+insert into t (id,a) values (111,82);
+insert into t (id,a) values (111,83);
+insert into t (id,a) values (111,84);
+insert into t (id,a) values (111,85);
+insert into t (id,a) values (111,86);
+insert into t (id,a) values (111,87);
+insert into t (id,a) values (111,88);
+insert into t (id,a) values (111,89);
+insert into t (id,a) values (111,90);
+insert into t (id,a) values (111,91);
+insert into t (id,a) values (111,92);
+insert into t (id,a) values (111,93);
+insert into t (id,a) values (111,94);
+insert into t (id,a) values (111,95);
+insert into t (id,a) values (111,96);
+insert into t (id,a) values (111,97);
+insert into t (id,a) values (111,98);
+insert into t (id,a) values (111,99);
+insert into t (id,a) values (112,0);
+insert into t (id,a) values (112,1);
+insert into t (id,a) values (112,2);
+insert into t (id,a) values (112,3);
+insert into t (id,a) values (112,4);
+insert into t (id,a) values (112,5);
+insert into t (id,a) values (112,6);
+insert into t (id,a) values (112,7);
+insert into t (id,a) values (112,8);
+insert into t (id,a) values (112,9);
+insert into t (id,a) values (112,10);
+insert into t (id,a) values (112,11);
+insert into t (id,a) values (112,12);
+insert into t (id,a) values (112,13);
+insert into t (id,a) values (112,14);
+insert into t (id,a) values (112,15);
+insert into t (id,a) values (112,16);
+insert into t (id,a) values (112,17);
+insert into t (id,a) values (112,18);
+insert into t (id,a) values (112,19);
+insert into t (id,a) values (112,20);
+insert into t (id,a) values (112,21);
+insert into t (id,a) values (112,22);
+insert into t (id,a) values (112,23);
+insert into t (id,a) values (112,24);
+insert into t (id,a) values (112,25);
+insert into t (id,a) values (112,26);
+insert into t (id,a) values (112,27);
+insert into t (id,a) values (112,28);
+insert into t (id,a) values (112,29);
+insert into t (id,a) values (112,30);
+insert into t (id,a) values (112,31);
+insert into t (id,a) values (112,32);
+insert into t (id,a) values (112,33);
+insert into t (id,a) values (112,34);
+insert into t (id,a) values (112,35);
+insert into t (id,a) values (112,36);
+insert into t (id,a) values (112,37);
+insert into t (id,a) values (112,38);
+insert into t (id,a) values (112,39);
+insert into t (id,a) values (112,40);
+insert into t (id,a) values (112,41);
+insert into t (id,a) values (112,42);
+insert into t (id,a) values (112,43);
+insert into t (id,a) values (112,44);
+insert into t (id,a) values (112,45);
+insert into t (id,a) values (112,46);
+insert into t (id,a) values (112,47);
+insert into t (id,a) values (112,48);
+insert into t (id,a) values (112,49);
+insert into t (id,a) values (112,50);
+insert into t (id,a) values (112,51);
+insert into t (id,a) values (112,52);
+insert into t (id,a) values (112,53);
+insert into t (id,a) values (112,54);
+insert into t (id,a) values (112,55);
+insert into t (id,a) values (112,56);
+insert into t (id,a) values (112,57);
+insert into t (id,a) values (112,58);
+insert into t (id,a) values (112,59);
+insert into t (id,a) values (112,60);
+insert into t (id,a) values (112,61);
+insert into t (id,a) values (112,62);
+insert into t (id,a) values (112,63);
+insert into t (id,a) values (112,64);
+insert into t (id,a) values (112,65);
+insert into t (id,a) values (112,66);
+insert into t (id,a) values (112,67);
+insert into t (id,a) values (112,68);
+insert into t (id,a) values (112,69);
+insert into t (id,a) values (112,70);
+insert into t (id,a) values (112,71);
+insert into t (id,a) values (112,72);
+insert into t (id,a) values (112,73);
+insert into t (id,a) values (112,74);
+insert into t (id,a) values (112,75);
+insert into t (id,a) values (112,76);
+insert into t (id,a) values (112,77);
+insert into t (id,a) values (112,78);
+insert into t (id,a) values (112,79);
+insert into t (id,a) values (112,80);
+insert into t (id,a) values (112,81);
+insert into t (id,a) values (112,82);
+insert into t (id,a) values (112,83);
+insert into t (id,a) values (112,84);
+insert into t (id,a) values (112,85);
+insert into t (id,a) values (112,86);
+insert into t (id,a) values (112,87);
+insert into t (id,a) values (112,88);
+insert into t (id,a) values (112,89);
+insert into t (id,a) values (112,90);
+insert into t (id,a) values (112,91);
+insert into t (id,a) values (112,92);
+insert into t (id,a) values (112,93);
+insert into t (id,a) values (112,94);
+insert into t (id,a) values (112,95);
+insert into t (id,a) values (112,96);
+insert into t (id,a) values (112,97);
+insert into t (id,a) values (112,98);
+insert into t (id,a) values (112,99);
+insert into t (id,a) values (113,0);
+insert into t (id,a) values (113,1);
+insert into t (id,a) values (113,2);
+insert into t (id,a) values (113,3);
+insert into t (id,a) values (113,4);
+insert into t (id,a) values (113,5);
+insert into t (id,a) values (113,6);
+insert into t (id,a) values (113,7);
+insert into t (id,a) values (113,8);
+insert into t (id,a) values (113,9);
+insert into t (id,a) values (113,10);
+insert into t (id,a) values (113,11);
+insert into t (id,a) values (113,12);
+insert into t (id,a) values (113,13);
+insert into t (id,a) values (113,14);
+insert into t (id,a) values (113,15);
+insert into t (id,a) values (113,16);
+insert into t (id,a) values (113,17);
+insert into t (id,a) values (113,18);
+insert into t (id,a) values (113,19);
+insert into t (id,a) values (113,20);
+insert into t (id,a) values (113,21);
+insert into t (id,a) values (113,22);
+insert into t (id,a) values (113,23);
+insert into t (id,a) values (113,24);
+insert into t (id,a) values (113,25);
+insert into t (id,a) values (113,26);
+insert into t (id,a) values (113,27);
+insert into t (id,a) values (113,28);
+insert into t (id,a) values (113,29);
+insert into t (id,a) values (113,30);
+insert into t (id,a) values (113,31);
+insert into t (id,a) values (113,32);
+insert into t (id,a) values (113,33);
+insert into t (id,a) values (113,34);
+insert into t (id,a) values (113,35);
+insert into t (id,a) values (113,36);
+insert into t (id,a) values (113,37);
+insert into t (id,a) values (113,38);
+insert into t (id,a) values (113,39);
+insert into t (id,a) values (113,40);
+insert into t (id,a) values (113,41);
+insert into t (id,a) values (113,42);
+insert into t (id,a) values (113,43);
+insert into t (id,a) values (113,44);
+insert into t (id,a) values (113,45);
+insert into t (id,a) values (113,46);
+insert into t (id,a) values (113,47);
+insert into t (id,a) values (113,48);
+insert into t (id,a) values (113,49);
+insert into t (id,a) values (113,50);
+insert into t (id,a) values (113,51);
+insert into t (id,a) values (113,52);
+insert into t (id,a) values (113,53);
+insert into t (id,a) values (113,54);
+insert into t (id,a) values (113,55);
+insert into t (id,a) values (113,56);
+insert into t (id,a) values (113,57);
+insert into t (id,a) values (113,58);
+insert into t (id,a) values (113,59);
+insert into t (id,a) values (113,60);
+insert into t (id,a) values (113,61);
+insert into t (id,a) values (113,62);
+insert into t (id,a) values (113,63);
+insert into t (id,a) values (113,64);
+insert into t (id,a) values (113,65);
+insert into t (id,a) values (113,66);
+insert into t (id,a) values (113,67);
+insert into t (id,a) values (113,68);
+insert into t (id,a) values (113,69);
+insert into t (id,a) values (113,70);
+insert into t (id,a) values (113,71);
+insert into t (id,a) values (113,72);
+insert into t (id,a) values (113,73);
+insert into t (id,a) values (113,74);
+insert into t (id,a) values (113,75);
+insert into t (id,a) values (113,76);
+insert into t (id,a) values (113,77);
+insert into t (id,a) values (113,78);
+insert into t (id,a) values (113,79);
+insert into t (id,a) values (113,80);
+insert into t (id,a) values (113,81);
+insert into t (id,a) values (113,82);
+insert into t (id,a) values (113,83);
+insert into t (id,a) values (113,84);
+insert into t (id,a) values (113,85);
+insert into t (id,a) values (113,86);
+insert into t (id,a) values (113,87);
+insert into t (id,a) values (113,88);
+insert into t (id,a) values (113,89);
+insert into t (id,a) values (113,90);
+insert into t (id,a) values (113,91);
+insert into t (id,a) values (113,92);
+insert into t (id,a) values (113,93);
+insert into t (id,a) values (113,94);
+insert into t (id,a) values (113,95);
+insert into t (id,a) values (113,96);
+insert into t (id,a) values (113,97);
+insert into t (id,a) values (113,98);
+insert into t (id,a) values (113,99);
+insert into t (id,a) values (114,0);
+insert into t (id,a) values (114,1);
+insert into t (id,a) values (114,2);
+insert into t (id,a) values (114,3);
+insert into t (id,a) values (114,4);
+insert into t (id,a) values (114,5);
+insert into t (id,a) values (114,6);
+insert into t (id,a) values (114,7);
+insert into t (id,a) values (114,8);
+insert into t (id,a) values (114,9);
+insert into t (id,a) values (114,10);
+insert into t (id,a) values (114,11);
+insert into t (id,a) values (114,12);
+insert into t (id,a) values (114,13);
+insert into t (id,a) values (114,14);
+insert into t (id,a) values (114,15);
+insert into t (id,a) values (114,16);
+insert into t (id,a) values (114,17);
+insert into t (id,a) values (114,18);
+insert into t (id,a) values (114,19);
+insert into t (id,a) values (114,20);
+insert into t (id,a) values (114,21);
+insert into t (id,a) values (114,22);
+insert into t (id,a) values (114,23);
+insert into t (id,a) values (114,24);
+insert into t (id,a) values (114,25);
+insert into t (id,a) values (114,26);
+insert into t (id,a) values (114,27);
+insert into t (id,a) values (114,28);
+insert into t (id,a) values (114,29);
+insert into t (id,a) values (114,30);
+insert into t (id,a) values (114,31);
+insert into t (id,a) values (114,32);
+insert into t (id,a) values (114,33);
+insert into t (id,a) values (114,34);
+insert into t (id,a) values (114,35);
+insert into t (id,a) values (114,36);
+insert into t (id,a) values (114,37);
+insert into t (id,a) values (114,38);
+insert into t (id,a) values (114,39);
+insert into t (id,a) values (114,40);
+insert into t (id,a) values (114,41);
+insert into t (id,a) values (114,42);
+insert into t (id,a) values (114,43);
+insert into t (id,a) values (114,44);
+insert into t (id,a) values (114,45);
+insert into t (id,a) values (114,46);
+insert into t (id,a) values (114,47);
+insert into t (id,a) values (114,48);
+insert into t (id,a) values (114,49);
+insert into t (id,a) values (114,50);
+insert into t (id,a) values (114,51);
+insert into t (id,a) values (114,52);
+insert into t (id,a) values (114,53);
+insert into t (id,a) values (114,54);
+insert into t (id,a) values (114,55);
+insert into t (id,a) values (114,56);
+insert into t (id,a) values (114,57);
+insert into t (id,a) values (114,58);
+insert into t (id,a) values (114,59);
+insert into t (id,a) values (114,60);
+insert into t (id,a) values (114,61);
+insert into t (id,a) values (114,62);
+insert into t (id,a) values (114,63);
+insert into t (id,a) values (114,64);
+insert into t (id,a) values (114,65);
+insert into t (id,a) values (114,66);
+insert into t (id,a) values (114,67);
+insert into t (id,a) values (114,68);
+insert into t (id,a) values (114,69);
+insert into t (id,a) values (114,70);
+insert into t (id,a) values (114,71);
+insert into t (id,a) values (114,72);
+insert into t (id,a) values (114,73);
+insert into t (id,a) values (114,74);
+insert into t (id,a) values (114,75);
+insert into t (id,a) values (114,76);
+insert into t (id,a) values (114,77);
+insert into t (id,a) values (114,78);
+insert into t (id,a) values (114,79);
+insert into t (id,a) values (114,80);
+insert into t (id,a) values (114,81);
+insert into t (id,a) values (114,82);
+insert into t (id,a) values (114,83);
+insert into t (id,a) values (114,84);
+insert into t (id,a) values (114,85);
+insert into t (id,a) values (114,86);
+insert into t (id,a) values (114,87);
+insert into t (id,a) values (114,88);
+insert into t (id,a) values (114,89);
+insert into t (id,a) values (114,90);
+insert into t (id,a) values (114,91);
+insert into t (id,a) values (114,92);
+insert into t (id,a) values (114,93);
+insert into t (id,a) values (114,94);
+insert into t (id,a) values (114,95);
+insert into t (id,a) values (114,96);
+insert into t (id,a) values (114,97);
+insert into t (id,a) values (114,98);
+insert into t (id,a) values (114,99);
+insert into t (id,a) values (115,0);
+insert into t (id,a) values (115,1);
+insert into t (id,a) values (115,2);
+insert into t (id,a) values (115,3);
+insert into t (id,a) values (115,4);
+insert into t (id,a) values (115,5);
+insert into t (id,a) values (115,6);
+insert into t (id,a) values (115,7);
+insert into t (id,a) values (115,8);
+insert into t (id,a) values (115,9);
+insert into t (id,a) values (115,10);
+insert into t (id,a) values (115,11);
+insert into t (id,a) values (115,12);
+insert into t (id,a) values (115,13);
+insert into t (id,a) values (115,14);
+insert into t (id,a) values (115,15);
+insert into t (id,a) values (115,16);
+insert into t (id,a) values (115,17);
+insert into t (id,a) values (115,18);
+insert into t (id,a) values (115,19);
+insert into t (id,a) values (115,20);
+insert into t (id,a) values (115,21);
+insert into t (id,a) values (115,22);
+insert into t (id,a) values (115,23);
+insert into t (id,a) values (115,24);
+insert into t (id,a) values (115,25);
+insert into t (id,a) values (115,26);
+insert into t (id,a) values (115,27);
+insert into t (id,a) values (115,28);
+insert into t (id,a) values (115,29);
+insert into t (id,a) values (115,30);
+insert into t (id,a) values (115,31);
+insert into t (id,a) values (115,32);
+insert into t (id,a) values (115,33);
+insert into t (id,a) values (115,34);
+insert into t (id,a) values (115,35);
+insert into t (id,a) values (115,36);
+insert into t (id,a) values (115,37);
+insert into t (id,a) values (115,38);
+insert into t (id,a) values (115,39);
+insert into t (id,a) values (115,40);
+insert into t (id,a) values (115,41);
+insert into t (id,a) values (115,42);
+insert into t (id,a) values (115,43);
+insert into t (id,a) values (115,44);
+insert into t (id,a) values (115,45);
+insert into t (id,a) values (115,46);
+insert into t (id,a) values (115,47);
+insert into t (id,a) values (115,48);
+insert into t (id,a) values (115,49);
+insert into t (id,a) values (115,50);
+insert into t (id,a) values (115,51);
+insert into t (id,a) values (115,52);
+insert into t (id,a) values (115,53);
+insert into t (id,a) values (115,54);
+insert into t (id,a) values (115,55);
+insert into t (id,a) values (115,56);
+insert into t (id,a) values (115,57);
+insert into t (id,a) values (115,58);
+insert into t (id,a) values (115,59);
+insert into t (id,a) values (115,60);
+insert into t (id,a) values (115,61);
+insert into t (id,a) values (115,62);
+insert into t (id,a) values (115,63);
+insert into t (id,a) values (115,64);
+insert into t (id,a) values (115,65);
+insert into t (id,a) values (115,66);
+insert into t (id,a) values (115,67);
+insert into t (id,a) values (115,68);
+insert into t (id,a) values (115,69);
+insert into t (id,a) values (115,70);
+insert into t (id,a) values (115,71);
+insert into t (id,a) values (115,72);
+insert into t (id,a) values (115,73);
+insert into t (id,a) values (115,74);
+insert into t (id,a) values (115,75);
+insert into t (id,a) values (115,76);
+insert into t (id,a) values (115,77);
+insert into t (id,a) values (115,78);
+insert into t (id,a) values (115,79);
+insert into t (id,a) values (115,80);
+insert into t (id,a) values (115,81);
+insert into t (id,a) values (115,82);
+insert into t (id,a) values (115,83);
+insert into t (id,a) values (115,84);
+insert into t (id,a) values (115,85);
+insert into t (id,a) values (115,86);
+insert into t (id,a) values (115,87);
+insert into t (id,a) values (115,88);
+insert into t (id,a) values (115,89);
+insert into t (id,a) values (115,90);
+insert into t (id,a) values (115,91);
+insert into t (id,a) values (115,92);
+insert into t (id,a) values (115,93);
+insert into t (id,a) values (115,94);
+insert into t (id,a) values (115,95);
+insert into t (id,a) values (115,96);
+insert into t (id,a) values (115,97);
+insert into t (id,a) values (115,98);
+insert into t (id,a) values (115,99);
+insert into t (id,a) values (116,0);
+insert into t (id,a) values (116,1);
+insert into t (id,a) values (116,2);
+insert into t (id,a) values (116,3);
+insert into t (id,a) values (116,4);
+insert into t (id,a) values (116,5);
+insert into t (id,a) values (116,6);
+insert into t (id,a) values (116,7);
+insert into t (id,a) values (116,8);
+insert into t (id,a) values (116,9);
+insert into t (id,a) values (116,10);
+insert into t (id,a) values (116,11);
+insert into t (id,a) values (116,12);
+insert into t (id,a) values (116,13);
+insert into t (id,a) values (116,14);
+insert into t (id,a) values (116,15);
+insert into t (id,a) values (116,16);
+insert into t (id,a) values (116,17);
+insert into t (id,a) values (116,18);
+insert into t (id,a) values (116,19);
+insert into t (id,a) values (116,20);
+insert into t (id,a) values (116,21);
+insert into t (id,a) values (116,22);
+insert into t (id,a) values (116,23);
+insert into t (id,a) values (116,24);
+insert into t (id,a) values (116,25);
+insert into t (id,a) values (116,26);
+insert into t (id,a) values (116,27);
+insert into t (id,a) values (116,28);
+insert into t (id,a) values (116,29);
+insert into t (id,a) values (116,30);
+insert into t (id,a) values (116,31);
+insert into t (id,a) values (116,32);
+insert into t (id,a) values (116,33);
+insert into t (id,a) values (116,34);
+insert into t (id,a) values (116,35);
+insert into t (id,a) values (116,36);
+insert into t (id,a) values (116,37);
+insert into t (id,a) values (116,38);
+insert into t (id,a) values (116,39);
+insert into t (id,a) values (116,40);
+insert into t (id,a) values (116,41);
+insert into t (id,a) values (116,42);
+insert into t (id,a) values (116,43);
+insert into t (id,a) values (116,44);
+insert into t (id,a) values (116,45);
+insert into t (id,a) values (116,46);
+insert into t (id,a) values (116,47);
+insert into t (id,a) values (116,48);
+insert into t (id,a) values (116,49);
+insert into t (id,a) values (116,50);
+insert into t (id,a) values (116,51);
+insert into t (id,a) values (116,52);
+insert into t (id,a) values (116,53);
+insert into t (id,a) values (116,54);
+insert into t (id,a) values (116,55);
+insert into t (id,a) values (116,56);
+insert into t (id,a) values (116,57);
+insert into t (id,a) values (116,58);
+insert into t (id,a) values (116,59);
+insert into t (id,a) values (116,60);
+insert into t (id,a) values (116,61);
+insert into t (id,a) values (116,62);
+insert into t (id,a) values (116,63);
+insert into t (id,a) values (116,64);
+insert into t (id,a) values (116,65);
+insert into t (id,a) values (116,66);
+insert into t (id,a) values (116,67);
+insert into t (id,a) values (116,68);
+insert into t (id,a) values (116,69);
+insert into t (id,a) values (116,70);
+insert into t (id,a) values (116,71);
+insert into t (id,a) values (116,72);
+insert into t (id,a) values (116,73);
+insert into t (id,a) values (116,74);
+insert into t (id,a) values (116,75);
+insert into t (id,a) values (116,76);
+insert into t (id,a) values (116,77);
+insert into t (id,a) values (116,78);
+insert into t (id,a) values (116,79);
+insert into t (id,a) values (116,80);
+insert into t (id,a) values (116,81);
+insert into t (id,a) values (116,82);
+insert into t (id,a) values (116,83);
+insert into t (id,a) values (116,84);
+insert into t (id,a) values (116,85);
+insert into t (id,a) values (116,86);
+insert into t (id,a) values (116,87);
+insert into t (id,a) values (116,88);
+insert into t (id,a) values (116,89);
+insert into t (id,a) values (116,90);
+insert into t (id,a) values (116,91);
+insert into t (id,a) values (116,92);
+insert into t (id,a) values (116,93);
+insert into t (id,a) values (116,94);
+insert into t (id,a) values (116,95);
+insert into t (id,a) values (116,96);
+insert into t (id,a) values (116,97);
+insert into t (id,a) values (116,98);
+insert into t (id,a) values (116,99);
+insert into t (id,a) values (117,0);
+insert into t (id,a) values (117,1);
+insert into t (id,a) values (117,2);
+insert into t (id,a) values (117,3);
+insert into t (id,a) values (117,4);
+insert into t (id,a) values (117,5);
+insert into t (id,a) values (117,6);
+insert into t (id,a) values (117,7);
+insert into t (id,a) values (117,8);
+insert into t (id,a) values (117,9);
+insert into t (id,a) values (117,10);
+insert into t (id,a) values (117,11);
+insert into t (id,a) values (117,12);
+insert into t (id,a) values (117,13);
+insert into t (id,a) values (117,14);
+insert into t (id,a) values (117,15);
+insert into t (id,a) values (117,16);
+insert into t (id,a) values (117,17);
+insert into t (id,a) values (117,18);
+insert into t (id,a) values (117,19);
+insert into t (id,a) values (117,20);
+insert into t (id,a) values (117,21);
+insert into t (id,a) values (117,22);
+insert into t (id,a) values (117,23);
+insert into t (id,a) values (117,24);
+insert into t (id,a) values (117,25);
+insert into t (id,a) values (117,26);
+insert into t (id,a) values (117,27);
+insert into t (id,a) values (117,28);
+insert into t (id,a) values (117,29);
+insert into t (id,a) values (117,30);
+insert into t (id,a) values (117,31);
+insert into t (id,a) values (117,32);
+insert into t (id,a) values (117,33);
+insert into t (id,a) values (117,34);
+insert into t (id,a) values (117,35);
+insert into t (id,a) values (117,36);
+insert into t (id,a) values (117,37);
+insert into t (id,a) values (117,38);
+insert into t (id,a) values (117,39);
+insert into t (id,a) values (117,40);
+insert into t (id,a) values (117,41);
+insert into t (id,a) values (117,42);
+insert into t (id,a) values (117,43);
+insert into t (id,a) values (117,44);
+insert into t (id,a) values (117,45);
+insert into t (id,a) values (117,46);
+insert into t (id,a) values (117,47);
+insert into t (id,a) values (117,48);
+insert into t (id,a) values (117,49);
+insert into t (id,a) values (117,50);
+insert into t (id,a) values (117,51);
+insert into t (id,a) values (117,52);
+insert into t (id,a) values (117,53);
+insert into t (id,a) values (117,54);
+insert into t (id,a) values (117,55);
+insert into t (id,a) values (117,56);
+insert into t (id,a) values (117,57);
+insert into t (id,a) values (117,58);
+insert into t (id,a) values (117,59);
+insert into t (id,a) values (117,60);
+insert into t (id,a) values (117,61);
+insert into t (id,a) values (117,62);
+insert into t (id,a) values (117,63);
+insert into t (id,a) values (117,64);
+insert into t (id,a) values (117,65);
+insert into t (id,a) values (117,66);
+insert into t (id,a) values (117,67);
+insert into t (id,a) values (117,68);
+insert into t (id,a) values (117,69);
+insert into t (id,a) values (117,70);
+insert into t (id,a) values (117,71);
+insert into t (id,a) values (117,72);
+insert into t (id,a) values (117,73);
+insert into t (id,a) values (117,74);
+insert into t (id,a) values (117,75);
+insert into t (id,a) values (117,76);
+insert into t (id,a) values (117,77);
+insert into t (id,a) values (117,78);
+insert into t (id,a) values (117,79);
+insert into t (id,a) values (117,80);
+insert into t (id,a) values (117,81);
+insert into t (id,a) values (117,82);
+insert into t (id,a) values (117,83);
+insert into t (id,a) values (117,84);
+insert into t (id,a) values (117,85);
+insert into t (id,a) values (117,86);
+insert into t (id,a) values (117,87);
+insert into t (id,a) values (117,88);
+insert into t (id,a) values (117,89);
+insert into t (id,a) values (117,90);
+insert into t (id,a) values (117,91);
+insert into t (id,a) values (117,92);
+insert into t (id,a) values (117,93);
+insert into t (id,a) values (117,94);
+insert into t (id,a) values (117,95);
+insert into t (id,a) values (117,96);
+insert into t (id,a) values (117,97);
+insert into t (id,a) values (117,98);
+insert into t (id,a) values (117,99);
+insert into t (id,a) values (118,0);
+insert into t (id,a) values (118,1);
+insert into t (id,a) values (118,2);
+insert into t (id,a) values (118,3);
+insert into t (id,a) values (118,4);
+insert into t (id,a) values (118,5);
+insert into t (id,a) values (118,6);
+insert into t (id,a) values (118,7);
+insert into t (id,a) values (118,8);
+insert into t (id,a) values (118,9);
+insert into t (id,a) values (118,10);
+insert into t (id,a) values (118,11);
+insert into t (id,a) values (118,12);
+insert into t (id,a) values (118,13);
+insert into t (id,a) values (118,14);
+insert into t (id,a) values (118,15);
+insert into t (id,a) values (118,16);
+insert into t (id,a) values (118,17);
+insert into t (id,a) values (118,18);
+insert into t (id,a) values (118,19);
+insert into t (id,a) values (118,20);
+insert into t (id,a) values (118,21);
+insert into t (id,a) values (118,22);
+insert into t (id,a) values (118,23);
+insert into t (id,a) values (118,24);
+insert into t (id,a) values (118,25);
+insert into t (id,a) values (118,26);
+insert into t (id,a) values (118,27);
+insert into t (id,a) values (118,28);
+insert into t (id,a) values (118,29);
+insert into t (id,a) values (118,30);
+insert into t (id,a) values (118,31);
+insert into t (id,a) values (118,32);
+insert into t (id,a) values (118,33);
+insert into t (id,a) values (118,34);
+insert into t (id,a) values (118,35);
+insert into t (id,a) values (118,36);
+insert into t (id,a) values (118,37);
+insert into t (id,a) values (118,38);
+insert into t (id,a) values (118,39);
+insert into t (id,a) values (118,40);
+insert into t (id,a) values (118,41);
+insert into t (id,a) values (118,42);
+insert into t (id,a) values (118,43);
+insert into t (id,a) values (118,44);
+insert into t (id,a) values (118,45);
+insert into t (id,a) values (118,46);
+insert into t (id,a) values (118,47);
+insert into t (id,a) values (118,48);
+insert into t (id,a) values (118,49);
+insert into t (id,a) values (118,50);
+insert into t (id,a) values (118,51);
+insert into t (id,a) values (118,52);
+insert into t (id,a) values (118,53);
+insert into t (id,a) values (118,54);
+insert into t (id,a) values (118,55);
+insert into t (id,a) values (118,56);
+insert into t (id,a) values (118,57);
+insert into t (id,a) values (118,58);
+insert into t (id,a) values (118,59);
+insert into t (id,a) values (118,60);
+insert into t (id,a) values (118,61);
+insert into t (id,a) values (118,62);
+insert into t (id,a) values (118,63);
+insert into t (id,a) values (118,64);
+insert into t (id,a) values (118,65);
+insert into t (id,a) values (118,66);
+insert into t (id,a) values (118,67);
+insert into t (id,a) values (118,68);
+insert into t (id,a) values (118,69);
+insert into t (id,a) values (118,70);
+insert into t (id,a) values (118,71);
+insert into t (id,a) values (118,72);
+insert into t (id,a) values (118,73);
+insert into t (id,a) values (118,74);
+insert into t (id,a) values (118,75);
+insert into t (id,a) values (118,76);
+insert into t (id,a) values (118,77);
+insert into t (id,a) values (118,78);
+insert into t (id,a) values (118,79);
+insert into t (id,a) values (118,80);
+insert into t (id,a) values (118,81);
+insert into t (id,a) values (118,82);
+insert into t (id,a) values (118,83);
+insert into t (id,a) values (118,84);
+insert into t (id,a) values (118,85);
+insert into t (id,a) values (118,86);
+insert into t (id,a) values (118,87);
+insert into t (id,a) values (118,88);
+insert into t (id,a) values (118,89);
+insert into t (id,a) values (118,90);
+insert into t (id,a) values (118,91);
+insert into t (id,a) values (118,92);
+insert into t (id,a) values (118,93);
+insert into t (id,a) values (118,94);
+insert into t (id,a) values (118,95);
+insert into t (id,a) values (118,96);
+insert into t (id,a) values (118,97);
+insert into t (id,a) values (118,98);
+insert into t (id,a) values (118,99);
+insert into t (id,a) values (119,0);
+insert into t (id,a) values (119,1);
+insert into t (id,a) values (119,2);
+insert into t (id,a) values (119,3);
+insert into t (id,a) values (119,4);
+insert into t (id,a) values (119,5);
+insert into t (id,a) values (119,6);
+insert into t (id,a) values (119,7);
+insert into t (id,a) values (119,8);
+insert into t (id,a) values (119,9);
+insert into t (id,a) values (119,10);
+insert into t (id,a) values (119,11);
+insert into t (id,a) values (119,12);
+insert into t (id,a) values (119,13);
+insert into t (id,a) values (119,14);
+insert into t (id,a) values (119,15);
+insert into t (id,a) values (119,16);
+insert into t (id,a) values (119,17);
+insert into t (id,a) values (119,18);
+insert into t (id,a) values (119,19);
+insert into t (id,a) values (119,20);
+insert into t (id,a) values (119,21);
+insert into t (id,a) values (119,22);
+insert into t (id,a) values (119,23);
+insert into t (id,a) values (119,24);
+insert into t (id,a) values (119,25);
+insert into t (id,a) values (119,26);
+insert into t (id,a) values (119,27);
+insert into t (id,a) values (119,28);
+insert into t (id,a) values (119,29);
+insert into t (id,a) values (119,30);
+insert into t (id,a) values (119,31);
+insert into t (id,a) values (119,32);
+insert into t (id,a) values (119,33);
+insert into t (id,a) values (119,34);
+insert into t (id,a) values (119,35);
+insert into t (id,a) values (119,36);
+insert into t (id,a) values (119,37);
+insert into t (id,a) values (119,38);
+insert into t (id,a) values (119,39);
+insert into t (id,a) values (119,40);
+insert into t (id,a) values (119,41);
+insert into t (id,a) values (119,42);
+insert into t (id,a) values (119,43);
+insert into t (id,a) values (119,44);
+insert into t (id,a) values (119,45);
+insert into t (id,a) values (119,46);
+insert into t (id,a) values (119,47);
+insert into t (id,a) values (119,48);
+insert into t (id,a) values (119,49);
+insert into t (id,a) values (119,50);
+insert into t (id,a) values (119,51);
+insert into t (id,a) values (119,52);
+insert into t (id,a) values (119,53);
+insert into t (id,a) values (119,54);
+insert into t (id,a) values (119,55);
+insert into t (id,a) values (119,56);
+insert into t (id,a) values (119,57);
+insert into t (id,a) values (119,58);
+insert into t (id,a) values (119,59);
+insert into t (id,a) values (119,60);
+insert into t (id,a) values (119,61);
+insert into t (id,a) values (119,62);
+insert into t (id,a) values (119,63);
+insert into t (id,a) values (119,64);
+insert into t (id,a) values (119,65);
+insert into t (id,a) values (119,66);
+insert into t (id,a) values (119,67);
+insert into t (id,a) values (119,68);
+insert into t (id,a) values (119,69);
+insert into t (id,a) values (119,70);
+insert into t (id,a) values (119,71);
+insert into t (id,a) values (119,72);
+insert into t (id,a) values (119,73);
+insert into t (id,a) values (119,74);
+insert into t (id,a) values (119,75);
+insert into t (id,a) values (119,76);
+insert into t (id,a) values (119,77);
+insert into t (id,a) values (119,78);
+insert into t (id,a) values (119,79);
+insert into t (id,a) values (119,80);
+insert into t (id,a) values (119,81);
+insert into t (id,a) values (119,82);
+insert into t (id,a) values (119,83);
+insert into t (id,a) values (119,84);
+insert into t (id,a) values (119,85);
+insert into t (id,a) values (119,86);
+insert into t (id,a) values (119,87);
+insert into t (id,a) values (119,88);
+insert into t (id,a) values (119,89);
+insert into t (id,a) values (119,90);
+insert into t (id,a) values (119,91);
+insert into t (id,a) values (119,92);
+insert into t (id,a) values (119,93);
+insert into t (id,a) values (119,94);
+insert into t (id,a) values (119,95);
+insert into t (id,a) values (119,96);
+insert into t (id,a) values (119,97);
+insert into t (id,a) values (119,98);
+insert into t (id,a) values (119,99);
+insert into t (id,a) values (120,0);
+insert into t (id,a) values (120,1);
+insert into t (id,a) values (120,2);
+insert into t (id,a) values (120,3);
+insert into t (id,a) values (120,4);
+insert into t (id,a) values (120,5);
+insert into t (id,a) values (120,6);
+insert into t (id,a) values (120,7);
+insert into t (id,a) values (120,8);
+insert into t (id,a) values (120,9);
+insert into t (id,a) values (120,10);
+insert into t (id,a) values (120,11);
+insert into t (id,a) values (120,12);
+insert into t (id,a) values (120,13);
+insert into t (id,a) values (120,14);
+insert into t (id,a) values (120,15);
+insert into t (id,a) values (120,16);
+insert into t (id,a) values (120,17);
+insert into t (id,a) values (120,18);
+insert into t (id,a) values (120,19);
+insert into t (id,a) values (120,20);
+insert into t (id,a) values (120,21);
+insert into t (id,a) values (120,22);
+insert into t (id,a) values (120,23);
+insert into t (id,a) values (120,24);
+insert into t (id,a) values (120,25);
+insert into t (id,a) values (120,26);
+insert into t (id,a) values (120,27);
+insert into t (id,a) values (120,28);
+insert into t (id,a) values (120,29);
+insert into t (id,a) values (120,30);
+insert into t (id,a) values (120,31);
+insert into t (id,a) values (120,32);
+insert into t (id,a) values (120,33);
+insert into t (id,a) values (120,34);
+insert into t (id,a) values (120,35);
+insert into t (id,a) values (120,36);
+insert into t (id,a) values (120,37);
+insert into t (id,a) values (120,38);
+insert into t (id,a) values (120,39);
+insert into t (id,a) values (120,40);
+insert into t (id,a) values (120,41);
+insert into t (id,a) values (120,42);
+insert into t (id,a) values (120,43);
+insert into t (id,a) values (120,44);
+insert into t (id,a) values (120,45);
+insert into t (id,a) values (120,46);
+insert into t (id,a) values (120,47);
+insert into t (id,a) values (120,48);
+insert into t (id,a) values (120,49);
+insert into t (id,a) values (120,50);
+insert into t (id,a) values (120,51);
+insert into t (id,a) values (120,52);
+insert into t (id,a) values (120,53);
+insert into t (id,a) values (120,54);
+insert into t (id,a) values (120,55);
+insert into t (id,a) values (120,56);
+insert into t (id,a) values (120,57);
+insert into t (id,a) values (120,58);
+insert into t (id,a) values (120,59);
+insert into t (id,a) values (120,60);
+insert into t (id,a) values (120,61);
+insert into t (id,a) values (120,62);
+insert into t (id,a) values (120,63);
+insert into t (id,a) values (120,64);
+insert into t (id,a) values (120,65);
+insert into t (id,a) values (120,66);
+insert into t (id,a) values (120,67);
+insert into t (id,a) values (120,68);
+insert into t (id,a) values (120,69);
+insert into t (id,a) values (120,70);
+insert into t (id,a) values (120,71);
+insert into t (id,a) values (120,72);
+insert into t (id,a) values (120,73);
+insert into t (id,a) values (120,74);
+insert into t (id,a) values (120,75);
+insert into t (id,a) values (120,76);
+insert into t (id,a) values (120,77);
+insert into t (id,a) values (120,78);
+insert into t (id,a) values (120,79);
+insert into t (id,a) values (120,80);
+insert into t (id,a) values (120,81);
+insert into t (id,a) values (120,82);
+insert into t (id,a) values (120,83);
+insert into t (id,a) values (120,84);
+insert into t (id,a) values (120,85);
+insert into t (id,a) values (120,86);
+insert into t (id,a) values (120,87);
+insert into t (id,a) values (120,88);
+insert into t (id,a) values (120,89);
+insert into t (id,a) values (120,90);
+insert into t (id,a) values (120,91);
+insert into t (id,a) values (120,92);
+insert into t (id,a) values (120,93);
+insert into t (id,a) values (120,94);
+insert into t (id,a) values (120,95);
+insert into t (id,a) values (120,96);
+insert into t (id,a) values (120,97);
+insert into t (id,a) values (120,98);
+insert into t (id,a) values (120,99);
+insert into t (id,a) values (121,0);
+insert into t (id,a) values (121,1);
+insert into t (id,a) values (121,2);
+insert into t (id,a) values (121,3);
+insert into t (id,a) values (121,4);
+insert into t (id,a) values (121,5);
+insert into t (id,a) values (121,6);
+insert into t (id,a) values (121,7);
+insert into t (id,a) values (121,8);
+insert into t (id,a) values (121,9);
+insert into t (id,a) values (121,10);
+insert into t (id,a) values (121,11);
+insert into t (id,a) values (121,12);
+insert into t (id,a) values (121,13);
+insert into t (id,a) values (121,14);
+insert into t (id,a) values (121,15);
+insert into t (id,a) values (121,16);
+insert into t (id,a) values (121,17);
+insert into t (id,a) values (121,18);
+insert into t (id,a) values (121,19);
+insert into t (id,a) values (121,20);
+insert into t (id,a) values (121,21);
+insert into t (id,a) values (121,22);
+insert into t (id,a) values (121,23);
+insert into t (id,a) values (121,24);
+insert into t (id,a) values (121,25);
+insert into t (id,a) values (121,26);
+insert into t (id,a) values (121,27);
+insert into t (id,a) values (121,28);
+insert into t (id,a) values (121,29);
+insert into t (id,a) values (121,30);
+insert into t (id,a) values (121,31);
+insert into t (id,a) values (121,32);
+insert into t (id,a) values (121,33);
+insert into t (id,a) values (121,34);
+insert into t (id,a) values (121,35);
+insert into t (id,a) values (121,36);
+insert into t (id,a) values (121,37);
+insert into t (id,a) values (121,38);
+insert into t (id,a) values (121,39);
+insert into t (id,a) values (121,40);
+insert into t (id,a) values (121,41);
+insert into t (id,a) values (121,42);
+insert into t (id,a) values (121,43);
+insert into t (id,a) values (121,44);
+insert into t (id,a) values (121,45);
+insert into t (id,a) values (121,46);
+insert into t (id,a) values (121,47);
+insert into t (id,a) values (121,48);
+insert into t (id,a) values (121,49);
+insert into t (id,a) values (121,50);
+insert into t (id,a) values (121,51);
+insert into t (id,a) values (121,52);
+insert into t (id,a) values (121,53);
+insert into t (id,a) values (121,54);
+insert into t (id,a) values (121,55);
+insert into t (id,a) values (121,56);
+insert into t (id,a) values (121,57);
+insert into t (id,a) values (121,58);
+insert into t (id,a) values (121,59);
+insert into t (id,a) values (121,60);
+insert into t (id,a) values (121,61);
+insert into t (id,a) values (121,62);
+insert into t (id,a) values (121,63);
+insert into t (id,a) values (121,64);
+insert into t (id,a) values (121,65);
+insert into t (id,a) values (121,66);
+insert into t (id,a) values (121,67);
+insert into t (id,a) values (121,68);
+insert into t (id,a) values (121,69);
+insert into t (id,a) values (121,70);
+insert into t (id,a) values (121,71);
+insert into t (id,a) values (121,72);
+insert into t (id,a) values (121,73);
+insert into t (id,a) values (121,74);
+insert into t (id,a) values (121,75);
+insert into t (id,a) values (121,76);
+insert into t (id,a) values (121,77);
+insert into t (id,a) values (121,78);
+insert into t (id,a) values (121,79);
+insert into t (id,a) values (121,80);
+insert into t (id,a) values (121,81);
+insert into t (id,a) values (121,82);
+insert into t (id,a) values (121,83);
+insert into t (id,a) values (121,84);
+insert into t (id,a) values (121,85);
+insert into t (id,a) values (121,86);
+insert into t (id,a) values (121,87);
+insert into t (id,a) values (121,88);
+insert into t (id,a) values (121,89);
+insert into t (id,a) values (121,90);
+insert into t (id,a) values (121,91);
+insert into t (id,a) values (121,92);
+insert into t (id,a) values (121,93);
+insert into t (id,a) values (121,94);
+insert into t (id,a) values (121,95);
+insert into t (id,a) values (121,96);
+insert into t (id,a) values (121,97);
+insert into t (id,a) values (121,98);
+insert into t (id,a) values (121,99);
+insert into t (id,a) values (122,0);
+insert into t (id,a) values (122,1);
+insert into t (id,a) values (122,2);
+insert into t (id,a) values (122,3);
+insert into t (id,a) values (122,4);
+insert into t (id,a) values (122,5);
+insert into t (id,a) values (122,6);
+insert into t (id,a) values (122,7);
+insert into t (id,a) values (122,8);
+insert into t (id,a) values (122,9);
+insert into t (id,a) values (122,10);
+insert into t (id,a) values (122,11);
+insert into t (id,a) values (122,12);
+insert into t (id,a) values (122,13);
+insert into t (id,a) values (122,14);
+insert into t (id,a) values (122,15);
+insert into t (id,a) values (122,16);
+insert into t (id,a) values (122,17);
+insert into t (id,a) values (122,18);
+insert into t (id,a) values (122,19);
+insert into t (id,a) values (122,20);
+insert into t (id,a) values (122,21);
+insert into t (id,a) values (122,22);
+insert into t (id,a) values (122,23);
+insert into t (id,a) values (122,24);
+insert into t (id,a) values (122,25);
+insert into t (id,a) values (122,26);
+insert into t (id,a) values (122,27);
+insert into t (id,a) values (122,28);
+insert into t (id,a) values (122,29);
+insert into t (id,a) values (122,30);
+insert into t (id,a) values (122,31);
+insert into t (id,a) values (122,32);
+insert into t (id,a) values (122,33);
+insert into t (id,a) values (122,34);
+insert into t (id,a) values (122,35);
+insert into t (id,a) values (122,36);
+insert into t (id,a) values (122,37);
+insert into t (id,a) values (122,38);
+insert into t (id,a) values (122,39);
+insert into t (id,a) values (122,40);
+insert into t (id,a) values (122,41);
+insert into t (id,a) values (122,42);
+insert into t (id,a) values (122,43);
+insert into t (id,a) values (122,44);
+insert into t (id,a) values (122,45);
+insert into t (id,a) values (122,46);
+insert into t (id,a) values (122,47);
+insert into t (id,a) values (122,48);
+insert into t (id,a) values (122,49);
+insert into t (id,a) values (122,50);
+insert into t (id,a) values (122,51);
+insert into t (id,a) values (122,52);
+insert into t (id,a) values (122,53);
+insert into t (id,a) values (122,54);
+insert into t (id,a) values (122,55);
+insert into t (id,a) values (122,56);
+insert into t (id,a) values (122,57);
+insert into t (id,a) values (122,58);
+insert into t (id,a) values (122,59);
+insert into t (id,a) values (122,60);
+insert into t (id,a) values (122,61);
+insert into t (id,a) values (122,62);
+insert into t (id,a) values (122,63);
+insert into t (id,a) values (122,64);
+insert into t (id,a) values (122,65);
+insert into t (id,a) values (122,66);
+insert into t (id,a) values (122,67);
+insert into t (id,a) values (122,68);
+insert into t (id,a) values (122,69);
+insert into t (id,a) values (122,70);
+insert into t (id,a) values (122,71);
+insert into t (id,a) values (122,72);
+insert into t (id,a) values (122,73);
+insert into t (id,a) values (122,74);
+insert into t (id,a) values (122,75);
+insert into t (id,a) values (122,76);
+insert into t (id,a) values (122,77);
+insert into t (id,a) values (122,78);
+insert into t (id,a) values (122,79);
+insert into t (id,a) values (122,80);
+insert into t (id,a) values (122,81);
+insert into t (id,a) values (122,82);
+insert into t (id,a) values (122,83);
+insert into t (id,a) values (122,84);
+insert into t (id,a) values (122,85);
+insert into t (id,a) values (122,86);
+insert into t (id,a) values (122,87);
+insert into t (id,a) values (122,88);
+insert into t (id,a) values (122,89);
+insert into t (id,a) values (122,90);
+insert into t (id,a) values (122,91);
+insert into t (id,a) values (122,92);
+insert into t (id,a) values (122,93);
+insert into t (id,a) values (122,94);
+insert into t (id,a) values (122,95);
+insert into t (id,a) values (122,96);
+insert into t (id,a) values (122,97);
+insert into t (id,a) values (122,98);
+insert into t (id,a) values (122,99);
+insert into t (id,a) values (123,0);
+insert into t (id,a) values (123,1);
+insert into t (id,a) values (123,2);
+insert into t (id,a) values (123,3);
+insert into t (id,a) values (123,4);
+insert into t (id,a) values (123,5);
+insert into t (id,a) values (123,6);
+insert into t (id,a) values (123,7);
+insert into t (id,a) values (123,8);
+insert into t (id,a) values (123,9);
+insert into t (id,a) values (123,10);
+insert into t (id,a) values (123,11);
+insert into t (id,a) values (123,12);
+insert into t (id,a) values (123,13);
+insert into t (id,a) values (123,14);
+insert into t (id,a) values (123,15);
+insert into t (id,a) values (123,16);
+insert into t (id,a) values (123,17);
+insert into t (id,a) values (123,18);
+insert into t (id,a) values (123,19);
+insert into t (id,a) values (123,20);
+insert into t (id,a) values (123,21);
+insert into t (id,a) values (123,22);
+insert into t (id,a) values (123,23);
+insert into t (id,a) values (123,24);
+insert into t (id,a) values (123,25);
+insert into t (id,a) values (123,26);
+insert into t (id,a) values (123,27);
+insert into t (id,a) values (123,28);
+insert into t (id,a) values (123,29);
+insert into t (id,a) values (123,30);
+insert into t (id,a) values (123,31);
+insert into t (id,a) values (123,32);
+insert into t (id,a) values (123,33);
+insert into t (id,a) values (123,34);
+insert into t (id,a) values (123,35);
+insert into t (id,a) values (123,36);
+insert into t (id,a) values (123,37);
+insert into t (id,a) values (123,38);
+insert into t (id,a) values (123,39);
+insert into t (id,a) values (123,40);
+insert into t (id,a) values (123,41);
+insert into t (id,a) values (123,42);
+insert into t (id,a) values (123,43);
+insert into t (id,a) values (123,44);
+insert into t (id,a) values (123,45);
+insert into t (id,a) values (123,46);
+insert into t (id,a) values (123,47);
+insert into t (id,a) values (123,48);
+insert into t (id,a) values (123,49);
+insert into t (id,a) values (123,50);
+insert into t (id,a) values (123,51);
+insert into t (id,a) values (123,52);
+insert into t (id,a) values (123,53);
+insert into t (id,a) values (123,54);
+insert into t (id,a) values (123,55);
+insert into t (id,a) values (123,56);
+insert into t (id,a) values (123,57);
+insert into t (id,a) values (123,58);
+insert into t (id,a) values (123,59);
+insert into t (id,a) values (123,60);
+insert into t (id,a) values (123,61);
+insert into t (id,a) values (123,62);
+insert into t (id,a) values (123,63);
+insert into t (id,a) values (123,64);
+insert into t (id,a) values (123,65);
+insert into t (id,a) values (123,66);
+insert into t (id,a) values (123,67);
+insert into t (id,a) values (123,68);
+insert into t (id,a) values (123,69);
+insert into t (id,a) values (123,70);
+insert into t (id,a) values (123,71);
+insert into t (id,a) values (123,72);
+insert into t (id,a) values (123,73);
+insert into t (id,a) values (123,74);
+insert into t (id,a) values (123,75);
+insert into t (id,a) values (123,76);
+insert into t (id,a) values (123,77);
+insert into t (id,a) values (123,78);
+insert into t (id,a) values (123,79);
+insert into t (id,a) values (123,80);
+insert into t (id,a) values (123,81);
+insert into t (id,a) values (123,82);
+insert into t (id,a) values (123,83);
+insert into t (id,a) values (123,84);
+insert into t (id,a) values (123,85);
+insert into t (id,a) values (123,86);
+insert into t (id,a) values (123,87);
+insert into t (id,a) values (123,88);
+insert into t (id,a) values (123,89);
+insert into t (id,a) values (123,90);
+insert into t (id,a) values (123,91);
+insert into t (id,a) values (123,92);
+insert into t (id,a) values (123,93);
+insert into t (id,a) values (123,94);
+insert into t (id,a) values (123,95);
+insert into t (id,a) values (123,96);
+insert into t (id,a) values (123,97);
+insert into t (id,a) values (123,98);
+insert into t (id,a) values (123,99);
+insert into t (id,a) values (124,0);
+insert into t (id,a) values (124,1);
+insert into t (id,a) values (124,2);
+insert into t (id,a) values (124,3);
+insert into t (id,a) values (124,4);
+insert into t (id,a) values (124,5);
+insert into t (id,a) values (124,6);
+insert into t (id,a) values (124,7);
+insert into t (id,a) values (124,8);
+insert into t (id,a) values (124,9);
+insert into t (id,a) values (124,10);
+insert into t (id,a) values (124,11);
+insert into t (id,a) values (124,12);
+insert into t (id,a) values (124,13);
+insert into t (id,a) values (124,14);
+insert into t (id,a) values (124,15);
+insert into t (id,a) values (124,16);
+insert into t (id,a) values (124,17);
+insert into t (id,a) values (124,18);
+insert into t (id,a) values (124,19);
+insert into t (id,a) values (124,20);
+insert into t (id,a) values (124,21);
+insert into t (id,a) values (124,22);
+insert into t (id,a) values (124,23);
+insert into t (id,a) values (124,24);
+insert into t (id,a) values (124,25);
+insert into t (id,a) values (124,26);
+insert into t (id,a) values (124,27);
+insert into t (id,a) values (124,28);
+insert into t (id,a) values (124,29);
+insert into t (id,a) values (124,30);
+insert into t (id,a) values (124,31);
+insert into t (id,a) values (124,32);
+insert into t (id,a) values (124,33);
+insert into t (id,a) values (124,34);
+insert into t (id,a) values (124,35);
+insert into t (id,a) values (124,36);
+insert into t (id,a) values (124,37);
+insert into t (id,a) values (124,38);
+insert into t (id,a) values (124,39);
+insert into t (id,a) values (124,40);
+insert into t (id,a) values (124,41);
+insert into t (id,a) values (124,42);
+insert into t (id,a) values (124,43);
+insert into t (id,a) values (124,44);
+insert into t (id,a) values (124,45);
+insert into t (id,a) values (124,46);
+insert into t (id,a) values (124,47);
+insert into t (id,a) values (124,48);
+insert into t (id,a) values (124,49);
+insert into t (id,a) values (124,50);
+insert into t (id,a) values (124,51);
+insert into t (id,a) values (124,52);
+insert into t (id,a) values (124,53);
+insert into t (id,a) values (124,54);
+insert into t (id,a) values (124,55);
+insert into t (id,a) values (124,56);
+insert into t (id,a) values (124,57);
+insert into t (id,a) values (124,58);
+insert into t (id,a) values (124,59);
+insert into t (id,a) values (124,60);
+insert into t (id,a) values (124,61);
+insert into t (id,a) values (124,62);
+insert into t (id,a) values (124,63);
+insert into t (id,a) values (124,64);
+insert into t (id,a) values (124,65);
+insert into t (id,a) values (124,66);
+insert into t (id,a) values (124,67);
+insert into t (id,a) values (124,68);
+insert into t (id,a) values (124,69);
+insert into t (id,a) values (124,70);
+insert into t (id,a) values (124,71);
+insert into t (id,a) values (124,72);
+insert into t (id,a) values (124,73);
+insert into t (id,a) values (124,74);
+insert into t (id,a) values (124,75);
+insert into t (id,a) values (124,76);
+insert into t (id,a) values (124,77);
+insert into t (id,a) values (124,78);
+insert into t (id,a) values (124,79);
+insert into t (id,a) values (124,80);
+insert into t (id,a) values (124,81);
+insert into t (id,a) values (124,82);
+insert into t (id,a) values (124,83);
+insert into t (id,a) values (124,84);
+insert into t (id,a) values (124,85);
+insert into t (id,a) values (124,86);
+insert into t (id,a) values (124,87);
+insert into t (id,a) values (124,88);
+insert into t (id,a) values (124,89);
+insert into t (id,a) values (124,90);
+insert into t (id,a) values (124,91);
+insert into t (id,a) values (124,92);
+insert into t (id,a) values (124,93);
+insert into t (id,a) values (124,94);
+insert into t (id,a) values (124,95);
+insert into t (id,a) values (124,96);
+insert into t (id,a) values (124,97);
+insert into t (id,a) values (124,98);
+insert into t (id,a) values (124,99);
+insert into t (id,a) values (125,0);
+insert into t (id,a) values (125,1);
+insert into t (id,a) values (125,2);
+insert into t (id,a) values (125,3);
+insert into t (id,a) values (125,4);
+insert into t (id,a) values (125,5);
+insert into t (id,a) values (125,6);
+insert into t (id,a) values (125,7);
+insert into t (id,a) values (125,8);
+insert into t (id,a) values (125,9);
+insert into t (id,a) values (125,10);
+insert into t (id,a) values (125,11);
+insert into t (id,a) values (125,12);
+insert into t (id,a) values (125,13);
+insert into t (id,a) values (125,14);
+insert into t (id,a) values (125,15);
+insert into t (id,a) values (125,16);
+insert into t (id,a) values (125,17);
+insert into t (id,a) values (125,18);
+insert into t (id,a) values (125,19);
+insert into t (id,a) values (125,20);
+insert into t (id,a) values (125,21);
+insert into t (id,a) values (125,22);
+insert into t (id,a) values (125,23);
+insert into t (id,a) values (125,24);
+insert into t (id,a) values (125,25);
+insert into t (id,a) values (125,26);
+insert into t (id,a) values (125,27);
+insert into t (id,a) values (125,28);
+insert into t (id,a) values (125,29);
+insert into t (id,a) values (125,30);
+insert into t (id,a) values (125,31);
+insert into t (id,a) values (125,32);
+insert into t (id,a) values (125,33);
+insert into t (id,a) values (125,34);
+insert into t (id,a) values (125,35);
+insert into t (id,a) values (125,36);
+insert into t (id,a) values (125,37);
+insert into t (id,a) values (125,38);
+insert into t (id,a) values (125,39);
+insert into t (id,a) values (125,40);
+insert into t (id,a) values (125,41);
+insert into t (id,a) values (125,42);
+insert into t (id,a) values (125,43);
+insert into t (id,a) values (125,44);
+insert into t (id,a) values (125,45);
+insert into t (id,a) values (125,46);
+insert into t (id,a) values (125,47);
+insert into t (id,a) values (125,48);
+insert into t (id,a) values (125,49);
+insert into t (id,a) values (125,50);
+insert into t (id,a) values (125,51);
+insert into t (id,a) values (125,52);
+insert into t (id,a) values (125,53);
+insert into t (id,a) values (125,54);
+insert into t (id,a) values (125,55);
+insert into t (id,a) values (125,56);
+insert into t (id,a) values (125,57);
+insert into t (id,a) values (125,58);
+insert into t (id,a) values (125,59);
+insert into t (id,a) values (125,60);
+insert into t (id,a) values (125,61);
+insert into t (id,a) values (125,62);
+insert into t (id,a) values (125,63);
+insert into t (id,a) values (125,64);
+insert into t (id,a) values (125,65);
+insert into t (id,a) values (125,66);
+insert into t (id,a) values (125,67);
+insert into t (id,a) values (125,68);
+insert into t (id,a) values (125,69);
+insert into t (id,a) values (125,70);
+insert into t (id,a) values (125,71);
+insert into t (id,a) values (125,72);
+insert into t (id,a) values (125,73);
+insert into t (id,a) values (125,74);
+insert into t (id,a) values (125,75);
+insert into t (id,a) values (125,76);
+insert into t (id,a) values (125,77);
+insert into t (id,a) values (125,78);
+insert into t (id,a) values (125,79);
+insert into t (id,a) values (125,80);
+insert into t (id,a) values (125,81);
+insert into t (id,a) values (125,82);
+insert into t (id,a) values (125,83);
+insert into t (id,a) values (125,84);
+insert into t (id,a) values (125,85);
+insert into t (id,a) values (125,86);
+insert into t (id,a) values (125,87);
+insert into t (id,a) values (125,88);
+insert into t (id,a) values (125,89);
+insert into t (id,a) values (125,90);
+insert into t (id,a) values (125,91);
+insert into t (id,a) values (125,92);
+insert into t (id,a) values (125,93);
+insert into t (id,a) values (125,94);
+insert into t (id,a) values (125,95);
+insert into t (id,a) values (125,96);
+insert into t (id,a) values (125,97);
+insert into t (id,a) values (125,98);
+insert into t (id,a) values (125,99);
+insert into t (id,a) values (126,0);
+insert into t (id,a) values (126,1);
+insert into t (id,a) values (126,2);
+insert into t (id,a) values (126,3);
+insert into t (id,a) values (126,4);
+insert into t (id,a) values (126,5);
+insert into t (id,a) values (126,6);
+insert into t (id,a) values (126,7);
+insert into t (id,a) values (126,8);
+insert into t (id,a) values (126,9);
+insert into t (id,a) values (126,10);
+insert into t (id,a) values (126,11);
+insert into t (id,a) values (126,12);
+insert into t (id,a) values (126,13);
+insert into t (id,a) values (126,14);
+insert into t (id,a) values (126,15);
+insert into t (id,a) values (126,16);
+insert into t (id,a) values (126,17);
+insert into t (id,a) values (126,18);
+insert into t (id,a) values (126,19);
+insert into t (id,a) values (126,20);
+insert into t (id,a) values (126,21);
+insert into t (id,a) values (126,22);
+insert into t (id,a) values (126,23);
+insert into t (id,a) values (126,24);
+insert into t (id,a) values (126,25);
+insert into t (id,a) values (126,26);
+insert into t (id,a) values (126,27);
+insert into t (id,a) values (126,28);
+insert into t (id,a) values (126,29);
+insert into t (id,a) values (126,30);
+insert into t (id,a) values (126,31);
+insert into t (id,a) values (126,32);
+insert into t (id,a) values (126,33);
+insert into t (id,a) values (126,34);
+insert into t (id,a) values (126,35);
+insert into t (id,a) values (126,36);
+insert into t (id,a) values (126,37);
+insert into t (id,a) values (126,38);
+insert into t (id,a) values (126,39);
+insert into t (id,a) values (126,40);
+insert into t (id,a) values (126,41);
+insert into t (id,a) values (126,42);
+insert into t (id,a) values (126,43);
+insert into t (id,a) values (126,44);
+insert into t (id,a) values (126,45);
+insert into t (id,a) values (126,46);
+insert into t (id,a) values (126,47);
+insert into t (id,a) values (126,48);
+insert into t (id,a) values (126,49);
+insert into t (id,a) values (126,50);
+insert into t (id,a) values (126,51);
+insert into t (id,a) values (126,52);
+insert into t (id,a) values (126,53);
+insert into t (id,a) values (126,54);
+insert into t (id,a) values (126,55);
+insert into t (id,a) values (126,56);
+insert into t (id,a) values (126,57);
+insert into t (id,a) values (126,58);
+insert into t (id,a) values (126,59);
+insert into t (id,a) values (126,60);
+insert into t (id,a) values (126,61);
+insert into t (id,a) values (126,62);
+insert into t (id,a) values (126,63);
+insert into t (id,a) values (126,64);
+insert into t (id,a) values (126,65);
+insert into t (id,a) values (126,66);
+insert into t (id,a) values (126,67);
+insert into t (id,a) values (126,68);
+insert into t (id,a) values (126,69);
+insert into t (id,a) values (126,70);
+insert into t (id,a) values (126,71);
+insert into t (id,a) values (126,72);
+insert into t (id,a) values (126,73);
+insert into t (id,a) values (126,74);
+insert into t (id,a) values (126,75);
+insert into t (id,a) values (126,76);
+insert into t (id,a) values (126,77);
+insert into t (id,a) values (126,78);
+insert into t (id,a) values (126,79);
+insert into t (id,a) values (126,80);
+insert into t (id,a) values (126,81);
+insert into t (id,a) values (126,82);
+insert into t (id,a) values (126,83);
+insert into t (id,a) values (126,84);
+insert into t (id,a) values (126,85);
+insert into t (id,a) values (126,86);
+insert into t (id,a) values (126,87);
+insert into t (id,a) values (126,88);
+insert into t (id,a) values (126,89);
+insert into t (id,a) values (126,90);
+insert into t (id,a) values (126,91);
+insert into t (id,a) values (126,92);
+insert into t (id,a) values (126,93);
+insert into t (id,a) values (126,94);
+insert into t (id,a) values (126,95);
+insert into t (id,a) values (126,96);
+insert into t (id,a) values (126,97);
+insert into t (id,a) values (126,98);
+insert into t (id,a) values (126,99);
+insert into t (id,a) values (127,0);
+insert into t (id,a) values (127,1);
+insert into t (id,a) values (127,2);
+insert into t (id,a) values (127,3);
+insert into t (id,a) values (127,4);
+insert into t (id,a) values (127,5);
+insert into t (id,a) values (127,6);
+insert into t (id,a) values (127,7);
+insert into t (id,a) values (127,8);
+insert into t (id,a) values (127,9);
+insert into t (id,a) values (127,10);
+insert into t (id,a) values (127,11);
+insert into t (id,a) values (127,12);
+insert into t (id,a) values (127,13);
+insert into t (id,a) values (127,14);
+insert into t (id,a) values (127,15);
+insert into t (id,a) values (127,16);
+insert into t (id,a) values (127,17);
+insert into t (id,a) values (127,18);
+insert into t (id,a) values (127,19);
+insert into t (id,a) values (127,20);
+insert into t (id,a) values (127,21);
+insert into t (id,a) values (127,22);
+insert into t (id,a) values (127,23);
+insert into t (id,a) values (127,24);
+insert into t (id,a) values (127,25);
+insert into t (id,a) values (127,26);
+insert into t (id,a) values (127,27);
+insert into t (id,a) values (127,28);
+insert into t (id,a) values (127,29);
+insert into t (id,a) values (127,30);
+insert into t (id,a) values (127,31);
+insert into t (id,a) values (127,32);
+insert into t (id,a) values (127,33);
+insert into t (id,a) values (127,34);
+insert into t (id,a) values (127,35);
+insert into t (id,a) values (127,36);
+insert into t (id,a) values (127,37);
+insert into t (id,a) values (127,38);
+insert into t (id,a) values (127,39);
+insert into t (id,a) values (127,40);
+insert into t (id,a) values (127,41);
+insert into t (id,a) values (127,42);
+insert into t (id,a) values (127,43);
+insert into t (id,a) values (127,44);
+insert into t (id,a) values (127,45);
+insert into t (id,a) values (127,46);
+insert into t (id,a) values (127,47);
+insert into t (id,a) values (127,48);
+insert into t (id,a) values (127,49);
+insert into t (id,a) values (127,50);
+insert into t (id,a) values (127,51);
+insert into t (id,a) values (127,52);
+insert into t (id,a) values (127,53);
+insert into t (id,a) values (127,54);
+insert into t (id,a) values (127,55);
+insert into t (id,a) values (127,56);
+insert into t (id,a) values (127,57);
+insert into t (id,a) values (127,58);
+insert into t (id,a) values (127,59);
+insert into t (id,a) values (127,60);
+insert into t (id,a) values (127,61);
+insert into t (id,a) values (127,62);
+insert into t (id,a) values (127,63);
+insert into t (id,a) values (127,64);
+insert into t (id,a) values (127,65);
+insert into t (id,a) values (127,66);
+insert into t (id,a) values (127,67);
+insert into t (id,a) values (127,68);
+insert into t (id,a) values (127,69);
+insert into t (id,a) values (127,70);
+insert into t (id,a) values (127,71);
+insert into t (id,a) values (127,72);
+insert into t (id,a) values (127,73);
+insert into t (id,a) values (127,74);
+insert into t (id,a) values (127,75);
+insert into t (id,a) values (127,76);
+insert into t (id,a) values (127,77);
+insert into t (id,a) values (127,78);
+insert into t (id,a) values (127,79);
+insert into t (id,a) values (127,80);
+insert into t (id,a) values (127,81);
+insert into t (id,a) values (127,82);
+insert into t (id,a) values (127,83);
+insert into t (id,a) values (127,84);
+insert into t (id,a) values (127,85);
+insert into t (id,a) values (127,86);
+insert into t (id,a) values (127,87);
+insert into t (id,a) values (127,88);
+insert into t (id,a) values (127,89);
+insert into t (id,a) values (127,90);
+insert into t (id,a) values (127,91);
+insert into t (id,a) values (127,92);
+insert into t (id,a) values (127,93);
+insert into t (id,a) values (127,94);
+insert into t (id,a) values (127,95);
+insert into t (id,a) values (127,96);
+insert into t (id,a) values (127,97);
+insert into t (id,a) values (127,98);
+insert into t (id,a) values (127,99);
+insert into t (id,a) values (128,0);
+insert into t (id,a) values (128,1);
+insert into t (id,a) values (128,2);
+insert into t (id,a) values (128,3);
+insert into t (id,a) values (128,4);
+insert into t (id,a) values (128,5);
+insert into t (id,a) values (128,6);
+insert into t (id,a) values (128,7);
+insert into t (id,a) values (128,8);
+insert into t (id,a) values (128,9);
+insert into t (id,a) values (128,10);
+insert into t (id,a) values (128,11);
+insert into t (id,a) values (128,12);
+insert into t (id,a) values (128,13);
+insert into t (id,a) values (128,14);
+insert into t (id,a) values (128,15);
+insert into t (id,a) values (128,16);
+insert into t (id,a) values (128,17);
+insert into t (id,a) values (128,18);
+insert into t (id,a) values (128,19);
+insert into t (id,a) values (128,20);
+insert into t (id,a) values (128,21);
+insert into t (id,a) values (128,22);
+insert into t (id,a) values (128,23);
+insert into t (id,a) values (128,24);
+insert into t (id,a) values (128,25);
+insert into t (id,a) values (128,26);
+insert into t (id,a) values (128,27);
+insert into t (id,a) values (128,28);
+insert into t (id,a) values (128,29);
+insert into t (id,a) values (128,30);
+insert into t (id,a) values (128,31);
+insert into t (id,a) values (128,32);
+insert into t (id,a) values (128,33);
+insert into t (id,a) values (128,34);
+insert into t (id,a) values (128,35);
+insert into t (id,a) values (128,36);
+insert into t (id,a) values (128,37);
+insert into t (id,a) values (128,38);
+insert into t (id,a) values (128,39);
+insert into t (id,a) values (128,40);
+insert into t (id,a) values (128,41);
+insert into t (id,a) values (128,42);
+insert into t (id,a) values (128,43);
+insert into t (id,a) values (128,44);
+insert into t (id,a) values (128,45);
+insert into t (id,a) values (128,46);
+insert into t (id,a) values (128,47);
+insert into t (id,a) values (128,48);
+insert into t (id,a) values (128,49);
+insert into t (id,a) values (128,50);
+insert into t (id,a) values (128,51);
+insert into t (id,a) values (128,52);
+insert into t (id,a) values (128,53);
+insert into t (id,a) values (128,54);
+insert into t (id,a) values (128,55);
+insert into t (id,a) values (128,56);
+insert into t (id,a) values (128,57);
+insert into t (id,a) values (128,58);
+insert into t (id,a) values (128,59);
+insert into t (id,a) values (128,60);
+insert into t (id,a) values (128,61);
+insert into t (id,a) values (128,62);
+insert into t (id,a) values (128,63);
+insert into t (id,a) values (128,64);
+insert into t (id,a) values (128,65);
+insert into t (id,a) values (128,66);
+insert into t (id,a) values (128,67);
+insert into t (id,a) values (128,68);
+insert into t (id,a) values (128,69);
+insert into t (id,a) values (128,70);
+insert into t (id,a) values (128,71);
+insert into t (id,a) values (128,72);
+insert into t (id,a) values (128,73);
+insert into t (id,a) values (128,74);
+insert into t (id,a) values (128,75);
+insert into t (id,a) values (128,76);
+insert into t (id,a) values (128,77);
+insert into t (id,a) values (128,78);
+insert into t (id,a) values (128,79);
+insert into t (id,a) values (128,80);
+insert into t (id,a) values (128,81);
+insert into t (id,a) values (128,82);
+insert into t (id,a) values (128,83);
+insert into t (id,a) values (128,84);
+insert into t (id,a) values (128,85);
+insert into t (id,a) values (128,86);
+insert into t (id,a) values (128,87);
+insert into t (id,a) values (128,88);
+insert into t (id,a) values (128,89);
+insert into t (id,a) values (128,90);
+insert into t (id,a) values (128,91);
+insert into t (id,a) values (128,92);
+insert into t (id,a) values (128,93);
+insert into t (id,a) values (128,94);
+insert into t (id,a) values (128,95);
+insert into t (id,a) values (128,96);
+insert into t (id,a) values (128,97);
+insert into t (id,a) values (128,98);
+insert into t (id,a) values (128,99);
+insert into t (id,a) values (129,0);
+insert into t (id,a) values (129,1);
+insert into t (id,a) values (129,2);
+insert into t (id,a) values (129,3);
+insert into t (id,a) values (129,4);
+insert into t (id,a) values (129,5);
+insert into t (id,a) values (129,6);
+insert into t (id,a) values (129,7);
+insert into t (id,a) values (129,8);
+insert into t (id,a) values (129,9);
+insert into t (id,a) values (129,10);
+insert into t (id,a) values (129,11);
+insert into t (id,a) values (129,12);
+insert into t (id,a) values (129,13);
+insert into t (id,a) values (129,14);
+insert into t (id,a) values (129,15);
+insert into t (id,a) values (129,16);
+insert into t (id,a) values (129,17);
+insert into t (id,a) values (129,18);
+insert into t (id,a) values (129,19);
+insert into t (id,a) values (129,20);
+insert into t (id,a) values (129,21);
+insert into t (id,a) values (129,22);
+insert into t (id,a) values (129,23);
+insert into t (id,a) values (129,24);
+insert into t (id,a) values (129,25);
+insert into t (id,a) values (129,26);
+insert into t (id,a) values (129,27);
+insert into t (id,a) values (129,28);
+insert into t (id,a) values (129,29);
+insert into t (id,a) values (129,30);
+insert into t (id,a) values (129,31);
+insert into t (id,a) values (129,32);
+insert into t (id,a) values (129,33);
+insert into t (id,a) values (129,34);
+insert into t (id,a) values (129,35);
+insert into t (id,a) values (129,36);
+insert into t (id,a) values (129,37);
+insert into t (id,a) values (129,38);
+insert into t (id,a) values (129,39);
+insert into t (id,a) values (129,40);
+insert into t (id,a) values (129,41);
+insert into t (id,a) values (129,42);
+insert into t (id,a) values (129,43);
+insert into t (id,a) values (129,44);
+insert into t (id,a) values (129,45);
+insert into t (id,a) values (129,46);
+insert into t (id,a) values (129,47);
+insert into t (id,a) values (129,48);
+insert into t (id,a) values (129,49);
+insert into t (id,a) values (129,50);
+insert into t (id,a) values (129,51);
+insert into t (id,a) values (129,52);
+insert into t (id,a) values (129,53);
+insert into t (id,a) values (129,54);
+insert into t (id,a) values (129,55);
+insert into t (id,a) values (129,56);
+insert into t (id,a) values (129,57);
+insert into t (id,a) values (129,58);
+insert into t (id,a) values (129,59);
+insert into t (id,a) values (129,60);
+insert into t (id,a) values (129,61);
+insert into t (id,a) values (129,62);
+insert into t (id,a) values (129,63);
+insert into t (id,a) values (129,64);
+insert into t (id,a) values (129,65);
+insert into t (id,a) values (129,66);
+insert into t (id,a) values (129,67);
+insert into t (id,a) values (129,68);
+insert into t (id,a) values (129,69);
+insert into t (id,a) values (129,70);
+insert into t (id,a) values (129,71);
+insert into t (id,a) values (129,72);
+insert into t (id,a) values (129,73);
+insert into t (id,a) values (129,74);
+insert into t (id,a) values (129,75);
+insert into t (id,a) values (129,76);
+insert into t (id,a) values (129,77);
+insert into t (id,a) values (129,78);
+insert into t (id,a) values (129,79);
+insert into t (id,a) values (129,80);
+insert into t (id,a) values (129,81);
+insert into t (id,a) values (129,82);
+insert into t (id,a) values (129,83);
+insert into t (id,a) values (129,84);
+insert into t (id,a) values (129,85);
+insert into t (id,a) values (129,86);
+insert into t (id,a) values (129,87);
+insert into t (id,a) values (129,88);
+insert into t (id,a) values (129,89);
+insert into t (id,a) values (129,90);
+insert into t (id,a) values (129,91);
+insert into t (id,a) values (129,92);
+insert into t (id,a) values (129,93);
+insert into t (id,a) values (129,94);
+insert into t (id,a) values (129,95);
+insert into t (id,a) values (129,96);
+insert into t (id,a) values (129,97);
+insert into t (id,a) values (129,98);
+insert into t (id,a) values (129,99);
+insert into t (id,a) values (130,0);
+insert into t (id,a) values (130,1);
+insert into t (id,a) values (130,2);
+insert into t (id,a) values (130,3);
+insert into t (id,a) values (130,4);
+insert into t (id,a) values (130,5);
+insert into t (id,a) values (130,6);
+insert into t (id,a) values (130,7);
+insert into t (id,a) values (130,8);
+insert into t (id,a) values (130,9);
+insert into t (id,a) values (130,10);
+insert into t (id,a) values (130,11);
+insert into t (id,a) values (130,12);
+insert into t (id,a) values (130,13);
+insert into t (id,a) values (130,14);
+insert into t (id,a) values (130,15);
+insert into t (id,a) values (130,16);
+insert into t (id,a) values (130,17);
+insert into t (id,a) values (130,18);
+insert into t (id,a) values (130,19);
+insert into t (id,a) values (130,20);
+insert into t (id,a) values (130,21);
+insert into t (id,a) values (130,22);
+insert into t (id,a) values (130,23);
+insert into t (id,a) values (130,24);
+insert into t (id,a) values (130,25);
+insert into t (id,a) values (130,26);
+insert into t (id,a) values (130,27);
+insert into t (id,a) values (130,28);
+insert into t (id,a) values (130,29);
+insert into t (id,a) values (130,30);
+insert into t (id,a) values (130,31);
+insert into t (id,a) values (130,32);
+insert into t (id,a) values (130,33);
+insert into t (id,a) values (130,34);
+insert into t (id,a) values (130,35);
+insert into t (id,a) values (130,36);
+insert into t (id,a) values (130,37);
+insert into t (id,a) values (130,38);
+insert into t (id,a) values (130,39);
+insert into t (id,a) values (130,40);
+insert into t (id,a) values (130,41);
+insert into t (id,a) values (130,42);
+insert into t (id,a) values (130,43);
+insert into t (id,a) values (130,44);
+insert into t (id,a) values (130,45);
+insert into t (id,a) values (130,46);
+insert into t (id,a) values (130,47);
+insert into t (id,a) values (130,48);
+insert into t (id,a) values (130,49);
+insert into t (id,a) values (130,50);
+insert into t (id,a) values (130,51);
+insert into t (id,a) values (130,52);
+insert into t (id,a) values (130,53);
+insert into t (id,a) values (130,54);
+insert into t (id,a) values (130,55);
+insert into t (id,a) values (130,56);
+insert into t (id,a) values (130,57);
+insert into t (id,a) values (130,58);
+insert into t (id,a) values (130,59);
+insert into t (id,a) values (130,60);
+insert into t (id,a) values (130,61);
+insert into t (id,a) values (130,62);
+insert into t (id,a) values (130,63);
+insert into t (id,a) values (130,64);
+insert into t (id,a) values (130,65);
+insert into t (id,a) values (130,66);
+insert into t (id,a) values (130,67);
+insert into t (id,a) values (130,68);
+insert into t (id,a) values (130,69);
+insert into t (id,a) values (130,70);
+insert into t (id,a) values (130,71);
+insert into t (id,a) values (130,72);
+insert into t (id,a) values (130,73);
+insert into t (id,a) values (130,74);
+insert into t (id,a) values (130,75);
+insert into t (id,a) values (130,76);
+insert into t (id,a) values (130,77);
+insert into t (id,a) values (130,78);
+insert into t (id,a) values (130,79);
+insert into t (id,a) values (130,80);
+insert into t (id,a) values (130,81);
+insert into t (id,a) values (130,82);
+insert into t (id,a) values (130,83);
+insert into t (id,a) values (130,84);
+insert into t (id,a) values (130,85);
+insert into t (id,a) values (130,86);
+insert into t (id,a) values (130,87);
+insert into t (id,a) values (130,88);
+insert into t (id,a) values (130,89);
+insert into t (id,a) values (130,90);
+insert into t (id,a) values (130,91);
+insert into t (id,a) values (130,92);
+insert into t (id,a) values (130,93);
+insert into t (id,a) values (130,94);
+insert into t (id,a) values (130,95);
+insert into t (id,a) values (130,96);
+insert into t (id,a) values (130,97);
+insert into t (id,a) values (130,98);
+insert into t (id,a) values (130,99);
+insert into t (id,a) values (131,0);
+insert into t (id,a) values (131,1);
+insert into t (id,a) values (131,2);
+insert into t (id,a) values (131,3);
+insert into t (id,a) values (131,4);
+insert into t (id,a) values (131,5);
+insert into t (id,a) values (131,6);
+insert into t (id,a) values (131,7);
+insert into t (id,a) values (131,8);
+insert into t (id,a) values (131,9);
+insert into t (id,a) values (131,10);
+insert into t (id,a) values (131,11);
+insert into t (id,a) values (131,12);
+insert into t (id,a) values (131,13);
+insert into t (id,a) values (131,14);
+insert into t (id,a) values (131,15);
+insert into t (id,a) values (131,16);
+insert into t (id,a) values (131,17);
+insert into t (id,a) values (131,18);
+insert into t (id,a) values (131,19);
+insert into t (id,a) values (131,20);
+insert into t (id,a) values (131,21);
+insert into t (id,a) values (131,22);
+insert into t (id,a) values (131,23);
+insert into t (id,a) values (131,24);
+insert into t (id,a) values (131,25);
+insert into t (id,a) values (131,26);
+insert into t (id,a) values (131,27);
+insert into t (id,a) values (131,28);
+insert into t (id,a) values (131,29);
+insert into t (id,a) values (131,30);
+insert into t (id,a) values (131,31);
+insert into t (id,a) values (131,32);
+insert into t (id,a) values (131,33);
+insert into t (id,a) values (131,34);
+insert into t (id,a) values (131,35);
+insert into t (id,a) values (131,36);
+insert into t (id,a) values (131,37);
+insert into t (id,a) values (131,38);
+insert into t (id,a) values (131,39);
+insert into t (id,a) values (131,40);
+insert into t (id,a) values (131,41);
+insert into t (id,a) values (131,42);
+insert into t (id,a) values (131,43);
+insert into t (id,a) values (131,44);
+insert into t (id,a) values (131,45);
+insert into t (id,a) values (131,46);
+insert into t (id,a) values (131,47);
+insert into t (id,a) values (131,48);
+insert into t (id,a) values (131,49);
+insert into t (id,a) values (131,50);
+insert into t (id,a) values (131,51);
+insert into t (id,a) values (131,52);
+insert into t (id,a) values (131,53);
+insert into t (id,a) values (131,54);
+insert into t (id,a) values (131,55);
+insert into t (id,a) values (131,56);
+insert into t (id,a) values (131,57);
+insert into t (id,a) values (131,58);
+insert into t (id,a) values (131,59);
+insert into t (id,a) values (131,60);
+insert into t (id,a) values (131,61);
+insert into t (id,a) values (131,62);
+insert into t (id,a) values (131,63);
+insert into t (id,a) values (131,64);
+insert into t (id,a) values (131,65);
+insert into t (id,a) values (131,66);
+insert into t (id,a) values (131,67);
+insert into t (id,a) values (131,68);
+insert into t (id,a) values (131,69);
+insert into t (id,a) values (131,70);
+insert into t (id,a) values (131,71);
+insert into t (id,a) values (131,72);
+insert into t (id,a) values (131,73);
+insert into t (id,a) values (131,74);
+insert into t (id,a) values (131,75);
+insert into t (id,a) values (131,76);
+insert into t (id,a) values (131,77);
+insert into t (id,a) values (131,78);
+insert into t (id,a) values (131,79);
+insert into t (id,a) values (131,80);
+insert into t (id,a) values (131,81);
+insert into t (id,a) values (131,82);
+insert into t (id,a) values (131,83);
+insert into t (id,a) values (131,84);
+insert into t (id,a) values (131,85);
+insert into t (id,a) values (131,86);
+insert into t (id,a) values (131,87);
+insert into t (id,a) values (131,88);
+insert into t (id,a) values (131,89);
+insert into t (id,a) values (131,90);
+insert into t (id,a) values (131,91);
+insert into t (id,a) values (131,92);
+insert into t (id,a) values (131,93);
+insert into t (id,a) values (131,94);
+insert into t (id,a) values (131,95);
+insert into t (id,a) values (131,96);
+insert into t (id,a) values (131,97);
+insert into t (id,a) values (131,98);
+insert into t (id,a) values (131,99);
+insert into t (id,a) values (132,0);
+insert into t (id,a) values (132,1);
+insert into t (id,a) values (132,2);
+insert into t (id,a) values (132,3);
+insert into t (id,a) values (132,4);
+insert into t (id,a) values (132,5);
+insert into t (id,a) values (132,6);
+insert into t (id,a) values (132,7);
+insert into t (id,a) values (132,8);
+insert into t (id,a) values (132,9);
+insert into t (id,a) values (132,10);
+insert into t (id,a) values (132,11);
+insert into t (id,a) values (132,12);
+insert into t (id,a) values (132,13);
+insert into t (id,a) values (132,14);
+insert into t (id,a) values (132,15);
+insert into t (id,a) values (132,16);
+insert into t (id,a) values (132,17);
+insert into t (id,a) values (132,18);
+insert into t (id,a) values (132,19);
+insert into t (id,a) values (132,20);
+insert into t (id,a) values (132,21);
+insert into t (id,a) values (132,22);
+insert into t (id,a) values (132,23);
+insert into t (id,a) values (132,24);
+insert into t (id,a) values (132,25);
+insert into t (id,a) values (132,26);
+insert into t (id,a) values (132,27);
+insert into t (id,a) values (132,28);
+insert into t (id,a) values (132,29);
+insert into t (id,a) values (132,30);
+insert into t (id,a) values (132,31);
+insert into t (id,a) values (132,32);
+insert into t (id,a) values (132,33);
+insert into t (id,a) values (132,34);
+insert into t (id,a) values (132,35);
+insert into t (id,a) values (132,36);
+insert into t (id,a) values (132,37);
+insert into t (id,a) values (132,38);
+insert into t (id,a) values (132,39);
+insert into t (id,a) values (132,40);
+insert into t (id,a) values (132,41);
+insert into t (id,a) values (132,42);
+insert into t (id,a) values (132,43);
+insert into t (id,a) values (132,44);
+insert into t (id,a) values (132,45);
+insert into t (id,a) values (132,46);
+insert into t (id,a) values (132,47);
+insert into t (id,a) values (132,48);
+insert into t (id,a) values (132,49);
+insert into t (id,a) values (132,50);
+insert into t (id,a) values (132,51);
+insert into t (id,a) values (132,52);
+insert into t (id,a) values (132,53);
+insert into t (id,a) values (132,54);
+insert into t (id,a) values (132,55);
+insert into t (id,a) values (132,56);
+insert into t (id,a) values (132,57);
+insert into t (id,a) values (132,58);
+insert into t (id,a) values (132,59);
+insert into t (id,a) values (132,60);
+insert into t (id,a) values (132,61);
+insert into t (id,a) values (132,62);
+insert into t (id,a) values (132,63);
+insert into t (id,a) values (132,64);
+insert into t (id,a) values (132,65);
+insert into t (id,a) values (132,66);
+insert into t (id,a) values (132,67);
+insert into t (id,a) values (132,68);
+insert into t (id,a) values (132,69);
+insert into t (id,a) values (132,70);
+insert into t (id,a) values (132,71);
+insert into t (id,a) values (132,72);
+insert into t (id,a) values (132,73);
+insert into t (id,a) values (132,74);
+insert into t (id,a) values (132,75);
+insert into t (id,a) values (132,76);
+insert into t (id,a) values (132,77);
+insert into t (id,a) values (132,78);
+insert into t (id,a) values (132,79);
+insert into t (id,a) values (132,80);
+insert into t (id,a) values (132,81);
+insert into t (id,a) values (132,82);
+insert into t (id,a) values (132,83);
+insert into t (id,a) values (132,84);
+insert into t (id,a) values (132,85);
+insert into t (id,a) values (132,86);
+insert into t (id,a) values (132,87);
+insert into t (id,a) values (132,88);
+insert into t (id,a) values (132,89);
+insert into t (id,a) values (132,90);
+insert into t (id,a) values (132,91);
+insert into t (id,a) values (132,92);
+insert into t (id,a) values (132,93);
+insert into t (id,a) values (132,94);
+insert into t (id,a) values (132,95);
+insert into t (id,a) values (132,96);
+insert into t (id,a) values (132,97);
+insert into t (id,a) values (132,98);
+insert into t (id,a) values (132,99);
+insert into t (id,a) values (133,0);
+insert into t (id,a) values (133,1);
+insert into t (id,a) values (133,2);
+insert into t (id,a) values (133,3);
+insert into t (id,a) values (133,4);
+insert into t (id,a) values (133,5);
+insert into t (id,a) values (133,6);
+insert into t (id,a) values (133,7);
+insert into t (id,a) values (133,8);
+insert into t (id,a) values (133,9);
+insert into t (id,a) values (133,10);
+insert into t (id,a) values (133,11);
+insert into t (id,a) values (133,12);
+insert into t (id,a) values (133,13);
+insert into t (id,a) values (133,14);
+insert into t (id,a) values (133,15);
+insert into t (id,a) values (133,16);
+insert into t (id,a) values (133,17);
+insert into t (id,a) values (133,18);
+insert into t (id,a) values (133,19);
+insert into t (id,a) values (133,20);
+insert into t (id,a) values (133,21);
+insert into t (id,a) values (133,22);
+insert into t (id,a) values (133,23);
+insert into t (id,a) values (133,24);
+insert into t (id,a) values (133,25);
+insert into t (id,a) values (133,26);
+insert into t (id,a) values (133,27);
+insert into t (id,a) values (133,28);
+insert into t (id,a) values (133,29);
+insert into t (id,a) values (133,30);
+insert into t (id,a) values (133,31);
+insert into t (id,a) values (133,32);
+insert into t (id,a) values (133,33);
+insert into t (id,a) values (133,34);
+insert into t (id,a) values (133,35);
+insert into t (id,a) values (133,36);
+insert into t (id,a) values (133,37);
+insert into t (id,a) values (133,38);
+insert into t (id,a) values (133,39);
+insert into t (id,a) values (133,40);
+insert into t (id,a) values (133,41);
+insert into t (id,a) values (133,42);
+insert into t (id,a) values (133,43);
+insert into t (id,a) values (133,44);
+insert into t (id,a) values (133,45);
+insert into t (id,a) values (133,46);
+insert into t (id,a) values (133,47);
+insert into t (id,a) values (133,48);
+insert into t (id,a) values (133,49);
+insert into t (id,a) values (133,50);
+insert into t (id,a) values (133,51);
+insert into t (id,a) values (133,52);
+insert into t (id,a) values (133,53);
+insert into t (id,a) values (133,54);
+insert into t (id,a) values (133,55);
+insert into t (id,a) values (133,56);
+insert into t (id,a) values (133,57);
+insert into t (id,a) values (133,58);
+insert into t (id,a) values (133,59);
+insert into t (id,a) values (133,60);
+insert into t (id,a) values (133,61);
+insert into t (id,a) values (133,62);
+insert into t (id,a) values (133,63);
+insert into t (id,a) values (133,64);
+insert into t (id,a) values (133,65);
+insert into t (id,a) values (133,66);
+insert into t (id,a) values (133,67);
+insert into t (id,a) values (133,68);
+insert into t (id,a) values (133,69);
+insert into t (id,a) values (133,70);
+insert into t (id,a) values (133,71);
+insert into t (id,a) values (133,72);
+insert into t (id,a) values (133,73);
+insert into t (id,a) values (133,74);
+insert into t (id,a) values (133,75);
+insert into t (id,a) values (133,76);
+insert into t (id,a) values (133,77);
+insert into t (id,a) values (133,78);
+insert into t (id,a) values (133,79);
+insert into t (id,a) values (133,80);
+insert into t (id,a) values (133,81);
+insert into t (id,a) values (133,82);
+insert into t (id,a) values (133,83);
+insert into t (id,a) values (133,84);
+insert into t (id,a) values (133,85);
+insert into t (id,a) values (133,86);
+insert into t (id,a) values (133,87);
+insert into t (id,a) values (133,88);
+insert into t (id,a) values (133,89);
+insert into t (id,a) values (133,90);
+insert into t (id,a) values (133,91);
+insert into t (id,a) values (133,92);
+insert into t (id,a) values (133,93);
+insert into t (id,a) values (133,94);
+insert into t (id,a) values (133,95);
+insert into t (id,a) values (133,96);
+insert into t (id,a) values (133,97);
+insert into t (id,a) values (133,98);
+insert into t (id,a) values (133,99);
+insert into t (id,a) values (134,0);
+insert into t (id,a) values (134,1);
+insert into t (id,a) values (134,2);
+insert into t (id,a) values (134,3);
+insert into t (id,a) values (134,4);
+insert into t (id,a) values (134,5);
+insert into t (id,a) values (134,6);
+insert into t (id,a) values (134,7);
+insert into t (id,a) values (134,8);
+insert into t (id,a) values (134,9);
+insert into t (id,a) values (134,10);
+insert into t (id,a) values (134,11);
+insert into t (id,a) values (134,12);
+insert into t (id,a) values (134,13);
+insert into t (id,a) values (134,14);
+insert into t (id,a) values (134,15);
+insert into t (id,a) values (134,16);
+insert into t (id,a) values (134,17);
+insert into t (id,a) values (134,18);
+insert into t (id,a) values (134,19);
+insert into t (id,a) values (134,20);
+insert into t (id,a) values (134,21);
+insert into t (id,a) values (134,22);
+insert into t (id,a) values (134,23);
+insert into t (id,a) values (134,24);
+insert into t (id,a) values (134,25);
+insert into t (id,a) values (134,26);
+insert into t (id,a) values (134,27);
+insert into t (id,a) values (134,28);
+insert into t (id,a) values (134,29);
+insert into t (id,a) values (134,30);
+insert into t (id,a) values (134,31);
+insert into t (id,a) values (134,32);
+insert into t (id,a) values (134,33);
+insert into t (id,a) values (134,34);
+insert into t (id,a) values (134,35);
+insert into t (id,a) values (134,36);
+insert into t (id,a) values (134,37);
+insert into t (id,a) values (134,38);
+insert into t (id,a) values (134,39);
+insert into t (id,a) values (134,40);
+insert into t (id,a) values (134,41);
+insert into t (id,a) values (134,42);
+insert into t (id,a) values (134,43);
+insert into t (id,a) values (134,44);
+insert into t (id,a) values (134,45);
+insert into t (id,a) values (134,46);
+insert into t (id,a) values (134,47);
+insert into t (id,a) values (134,48);
+insert into t (id,a) values (134,49);
+insert into t (id,a) values (134,50);
+insert into t (id,a) values (134,51);
+insert into t (id,a) values (134,52);
+insert into t (id,a) values (134,53);
+insert into t (id,a) values (134,54);
+insert into t (id,a) values (134,55);
+insert into t (id,a) values (134,56);
+insert into t (id,a) values (134,57);
+insert into t (id,a) values (134,58);
+insert into t (id,a) values (134,59);
+insert into t (id,a) values (134,60);
+insert into t (id,a) values (134,61);
+insert into t (id,a) values (134,62);
+insert into t (id,a) values (134,63);
+insert into t (id,a) values (134,64);
+insert into t (id,a) values (134,65);
+insert into t (id,a) values (134,66);
+insert into t (id,a) values (134,67);
+insert into t (id,a) values (134,68);
+insert into t (id,a) values (134,69);
+insert into t (id,a) values (134,70);
+insert into t (id,a) values (134,71);
+insert into t (id,a) values (134,72);
+insert into t (id,a) values (134,73);
+insert into t (id,a) values (134,74);
+insert into t (id,a) values (134,75);
+insert into t (id,a) values (134,76);
+insert into t (id,a) values (134,77);
+insert into t (id,a) values (134,78);
+insert into t (id,a) values (134,79);
+insert into t (id,a) values (134,80);
+insert into t (id,a) values (134,81);
+insert into t (id,a) values (134,82);
+insert into t (id,a) values (134,83);
+insert into t (id,a) values (134,84);
+insert into t (id,a) values (134,85);
+insert into t (id,a) values (134,86);
+insert into t (id,a) values (134,87);
+insert into t (id,a) values (134,88);
+insert into t (id,a) values (134,89);
+insert into t (id,a) values (134,90);
+insert into t (id,a) values (134,91);
+insert into t (id,a) values (134,92);
+insert into t (id,a) values (134,93);
+insert into t (id,a) values (134,94);
+insert into t (id,a) values (134,95);
+insert into t (id,a) values (134,96);
+insert into t (id,a) values (134,97);
+insert into t (id,a) values (134,98);
+insert into t (id,a) values (134,99);
+insert into t (id,a) values (135,0);
+insert into t (id,a) values (135,1);
+insert into t (id,a) values (135,2);
+insert into t (id,a) values (135,3);
+insert into t (id,a) values (135,4);
+insert into t (id,a) values (135,5);
+insert into t (id,a) values (135,6);
+insert into t (id,a) values (135,7);
+insert into t (id,a) values (135,8);
+insert into t (id,a) values (135,9);
+insert into t (id,a) values (135,10);
+insert into t (id,a) values (135,11);
+insert into t (id,a) values (135,12);
+insert into t (id,a) values (135,13);
+insert into t (id,a) values (135,14);
+insert into t (id,a) values (135,15);
+insert into t (id,a) values (135,16);
+insert into t (id,a) values (135,17);
+insert into t (id,a) values (135,18);
+insert into t (id,a) values (135,19);
+insert into t (id,a) values (135,20);
+insert into t (id,a) values (135,21);
+insert into t (id,a) values (135,22);
+insert into t (id,a) values (135,23);
+insert into t (id,a) values (135,24);
+insert into t (id,a) values (135,25);
+insert into t (id,a) values (135,26);
+insert into t (id,a) values (135,27);
+insert into t (id,a) values (135,28);
+insert into t (id,a) values (135,29);
+insert into t (id,a) values (135,30);
+insert into t (id,a) values (135,31);
+insert into t (id,a) values (135,32);
+insert into t (id,a) values (135,33);
+insert into t (id,a) values (135,34);
+insert into t (id,a) values (135,35);
+insert into t (id,a) values (135,36);
+insert into t (id,a) values (135,37);
+insert into t (id,a) values (135,38);
+insert into t (id,a) values (135,39);
+insert into t (id,a) values (135,40);
+insert into t (id,a) values (135,41);
+insert into t (id,a) values (135,42);
+insert into t (id,a) values (135,43);
+insert into t (id,a) values (135,44);
+insert into t (id,a) values (135,45);
+insert into t (id,a) values (135,46);
+insert into t (id,a) values (135,47);
+insert into t (id,a) values (135,48);
+insert into t (id,a) values (135,49);
+insert into t (id,a) values (135,50);
+insert into t (id,a) values (135,51);
+insert into t (id,a) values (135,52);
+insert into t (id,a) values (135,53);
+insert into t (id,a) values (135,54);
+insert into t (id,a) values (135,55);
+insert into t (id,a) values (135,56);
+insert into t (id,a) values (135,57);
+insert into t (id,a) values (135,58);
+insert into t (id,a) values (135,59);
+insert into t (id,a) values (135,60);
+insert into t (id,a) values (135,61);
+insert into t (id,a) values (135,62);
+insert into t (id,a) values (135,63);
+insert into t (id,a) values (135,64);
+insert into t (id,a) values (135,65);
+insert into t (id,a) values (135,66);
+insert into t (id,a) values (135,67);
+insert into t (id,a) values (135,68);
+insert into t (id,a) values (135,69);
+insert into t (id,a) values (135,70);
+insert into t (id,a) values (135,71);
+insert into t (id,a) values (135,72);
+insert into t (id,a) values (135,73);
+insert into t (id,a) values (135,74);
+insert into t (id,a) values (135,75);
+insert into t (id,a) values (135,76);
+insert into t (id,a) values (135,77);
+insert into t (id,a) values (135,78);
+insert into t (id,a) values (135,79);
+insert into t (id,a) values (135,80);
+insert into t (id,a) values (135,81);
+insert into t (id,a) values (135,82);
+insert into t (id,a) values (135,83);
+insert into t (id,a) values (135,84);
+insert into t (id,a) values (135,85);
+insert into t (id,a) values (135,86);
+insert into t (id,a) values (135,87);
+insert into t (id,a) values (135,88);
+insert into t (id,a) values (135,89);
+insert into t (id,a) values (135,90);
+insert into t (id,a) values (135,91);
+insert into t (id,a) values (135,92);
+insert into t (id,a) values (135,93);
+insert into t (id,a) values (135,94);
+insert into t (id,a) values (135,95);
+insert into t (id,a) values (135,96);
+insert into t (id,a) values (135,97);
+insert into t (id,a) values (135,98);
+insert into t (id,a) values (135,99);
+insert into t (id,a) values (136,0);
+insert into t (id,a) values (136,1);
+insert into t (id,a) values (136,2);
+insert into t (id,a) values (136,3);
+insert into t (id,a) values (136,4);
+insert into t (id,a) values (136,5);
+insert into t (id,a) values (136,6);
+insert into t (id,a) values (136,7);
+insert into t (id,a) values (136,8);
+insert into t (id,a) values (136,9);
+insert into t (id,a) values (136,10);
+insert into t (id,a) values (136,11);
+insert into t (id,a) values (136,12);
+insert into t (id,a) values (136,13);
+insert into t (id,a) values (136,14);
+insert into t (id,a) values (136,15);
+insert into t (id,a) values (136,16);
+insert into t (id,a) values (136,17);
+insert into t (id,a) values (136,18);
+insert into t (id,a) values (136,19);
+insert into t (id,a) values (136,20);
+insert into t (id,a) values (136,21);
+insert into t (id,a) values (136,22);
+insert into t (id,a) values (136,23);
+insert into t (id,a) values (136,24);
+insert into t (id,a) values (136,25);
+insert into t (id,a) values (136,26);
+insert into t (id,a) values (136,27);
+insert into t (id,a) values (136,28);
+insert into t (id,a) values (136,29);
+insert into t (id,a) values (136,30);
+insert into t (id,a) values (136,31);
+insert into t (id,a) values (136,32);
+insert into t (id,a) values (136,33);
+insert into t (id,a) values (136,34);
+insert into t (id,a) values (136,35);
+insert into t (id,a) values (136,36);
+insert into t (id,a) values (136,37);
+insert into t (id,a) values (136,38);
+insert into t (id,a) values (136,39);
+insert into t (id,a) values (136,40);
+insert into t (id,a) values (136,41);
+insert into t (id,a) values (136,42);
+insert into t (id,a) values (136,43);
+insert into t (id,a) values (136,44);
+insert into t (id,a) values (136,45);
+insert into t (id,a) values (136,46);
+insert into t (id,a) values (136,47);
+insert into t (id,a) values (136,48);
+insert into t (id,a) values (136,49);
+insert into t (id,a) values (136,50);
+insert into t (id,a) values (136,51);
+insert into t (id,a) values (136,52);
+insert into t (id,a) values (136,53);
+insert into t (id,a) values (136,54);
+insert into t (id,a) values (136,55);
+insert into t (id,a) values (136,56);
+insert into t (id,a) values (136,57);
+insert into t (id,a) values (136,58);
+insert into t (id,a) values (136,59);
+insert into t (id,a) values (136,60);
+insert into t (id,a) values (136,61);
+insert into t (id,a) values (136,62);
+insert into t (id,a) values (136,63);
+insert into t (id,a) values (136,64);
+insert into t (id,a) values (136,65);
+insert into t (id,a) values (136,66);
+insert into t (id,a) values (136,67);
+insert into t (id,a) values (136,68);
+insert into t (id,a) values (136,69);
+insert into t (id,a) values (136,70);
+insert into t (id,a) values (136,71);
+insert into t (id,a) values (136,72);
+insert into t (id,a) values (136,73);
+insert into t (id,a) values (136,74);
+insert into t (id,a) values (136,75);
+insert into t (id,a) values (136,76);
+insert into t (id,a) values (136,77);
+insert into t (id,a) values (136,78);
+insert into t (id,a) values (136,79);
+insert into t (id,a) values (136,80);
+insert into t (id,a) values (136,81);
+insert into t (id,a) values (136,82);
+insert into t (id,a) values (136,83);
+insert into t (id,a) values (136,84);
+insert into t (id,a) values (136,85);
+insert into t (id,a) values (136,86);
+insert into t (id,a) values (136,87);
+insert into t (id,a) values (136,88);
+insert into t (id,a) values (136,89);
+insert into t (id,a) values (136,90);
+insert into t (id,a) values (136,91);
+insert into t (id,a) values (136,92);
+insert into t (id,a) values (136,93);
+insert into t (id,a) values (136,94);
+insert into t (id,a) values (136,95);
+insert into t (id,a) values (136,96);
+insert into t (id,a) values (136,97);
+insert into t (id,a) values (136,98);
+insert into t (id,a) values (136,99);
+insert into t (id,a) values (137,0);
+insert into t (id,a) values (137,1);
+insert into t (id,a) values (137,2);
+insert into t (id,a) values (137,3);
+insert into t (id,a) values (137,4);
+insert into t (id,a) values (137,5);
+insert into t (id,a) values (137,6);
+insert into t (id,a) values (137,7);
+insert into t (id,a) values (137,8);
+insert into t (id,a) values (137,9);
+insert into t (id,a) values (137,10);
+insert into t (id,a) values (137,11);
+insert into t (id,a) values (137,12);
+insert into t (id,a) values (137,13);
+insert into t (id,a) values (137,14);
+insert into t (id,a) values (137,15);
+insert into t (id,a) values (137,16);
+insert into t (id,a) values (137,17);
+insert into t (id,a) values (137,18);
+insert into t (id,a) values (137,19);
+insert into t (id,a) values (137,20);
+insert into t (id,a) values (137,21);
+insert into t (id,a) values (137,22);
+insert into t (id,a) values (137,23);
+insert into t (id,a) values (137,24);
+insert into t (id,a) values (137,25);
+insert into t (id,a) values (137,26);
+insert into t (id,a) values (137,27);
+insert into t (id,a) values (137,28);
+insert into t (id,a) values (137,29);
+insert into t (id,a) values (137,30);
+insert into t (id,a) values (137,31);
+insert into t (id,a) values (137,32);
+insert into t (id,a) values (137,33);
+insert into t (id,a) values (137,34);
+insert into t (id,a) values (137,35);
+insert into t (id,a) values (137,36);
+insert into t (id,a) values (137,37);
+insert into t (id,a) values (137,38);
+insert into t (id,a) values (137,39);
+insert into t (id,a) values (137,40);
+insert into t (id,a) values (137,41);
+insert into t (id,a) values (137,42);
+insert into t (id,a) values (137,43);
+insert into t (id,a) values (137,44);
+insert into t (id,a) values (137,45);
+insert into t (id,a) values (137,46);
+insert into t (id,a) values (137,47);
+insert into t (id,a) values (137,48);
+insert into t (id,a) values (137,49);
+insert into t (id,a) values (137,50);
+insert into t (id,a) values (137,51);
+insert into t (id,a) values (137,52);
+insert into t (id,a) values (137,53);
+insert into t (id,a) values (137,54);
+insert into t (id,a) values (137,55);
+insert into t (id,a) values (137,56);
+insert into t (id,a) values (137,57);
+insert into t (id,a) values (137,58);
+insert into t (id,a) values (137,59);
+insert into t (id,a) values (137,60);
+insert into t (id,a) values (137,61);
+insert into t (id,a) values (137,62);
+insert into t (id,a) values (137,63);
+insert into t (id,a) values (137,64);
+insert into t (id,a) values (137,65);
+insert into t (id,a) values (137,66);
+insert into t (id,a) values (137,67);
+insert into t (id,a) values (137,68);
+insert into t (id,a) values (137,69);
+insert into t (id,a) values (137,70);
+insert into t (id,a) values (137,71);
+insert into t (id,a) values (137,72);
+insert into t (id,a) values (137,73);
+insert into t (id,a) values (137,74);
+insert into t (id,a) values (137,75);
+insert into t (id,a) values (137,76);
+insert into t (id,a) values (137,77);
+insert into t (id,a) values (137,78);
+insert into t (id,a) values (137,79);
+insert into t (id,a) values (137,80);
+insert into t (id,a) values (137,81);
+insert into t (id,a) values (137,82);
+insert into t (id,a) values (137,83);
+insert into t (id,a) values (137,84);
+insert into t (id,a) values (137,85);
+insert into t (id,a) values (137,86);
+insert into t (id,a) values (137,87);
+insert into t (id,a) values (137,88);
+insert into t (id,a) values (137,89);
+insert into t (id,a) values (137,90);
+insert into t (id,a) values (137,91);
+insert into t (id,a) values (137,92);
+insert into t (id,a) values (137,93);
+insert into t (id,a) values (137,94);
+insert into t (id,a) values (137,95);
+insert into t (id,a) values (137,96);
+insert into t (id,a) values (137,97);
+insert into t (id,a) values (137,98);
+insert into t (id,a) values (137,99);
+insert into t (id,a) values (138,0);
+insert into t (id,a) values (138,1);
+insert into t (id,a) values (138,2);
+insert into t (id,a) values (138,3);
+insert into t (id,a) values (138,4);
+insert into t (id,a) values (138,5);
+insert into t (id,a) values (138,6);
+insert into t (id,a) values (138,7);
+insert into t (id,a) values (138,8);
+insert into t (id,a) values (138,9);
+insert into t (id,a) values (138,10);
+insert into t (id,a) values (138,11);
+insert into t (id,a) values (138,12);
+insert into t (id,a) values (138,13);
+insert into t (id,a) values (138,14);
+insert into t (id,a) values (138,15);
+insert into t (id,a) values (138,16);
+insert into t (id,a) values (138,17);
+insert into t (id,a) values (138,18);
+insert into t (id,a) values (138,19);
+insert into t (id,a) values (138,20);
+insert into t (id,a) values (138,21);
+insert into t (id,a) values (138,22);
+insert into t (id,a) values (138,23);
+insert into t (id,a) values (138,24);
+insert into t (id,a) values (138,25);
+insert into t (id,a) values (138,26);
+insert into t (id,a) values (138,27);
+insert into t (id,a) values (138,28);
+insert into t (id,a) values (138,29);
+insert into t (id,a) values (138,30);
+insert into t (id,a) values (138,31);
+insert into t (id,a) values (138,32);
+insert into t (id,a) values (138,33);
+insert into t (id,a) values (138,34);
+insert into t (id,a) values (138,35);
+insert into t (id,a) values (138,36);
+insert into t (id,a) values (138,37);
+insert into t (id,a) values (138,38);
+insert into t (id,a) values (138,39);
+insert into t (id,a) values (138,40);
+insert into t (id,a) values (138,41);
+insert into t (id,a) values (138,42);
+insert into t (id,a) values (138,43);
+insert into t (id,a) values (138,44);
+insert into t (id,a) values (138,45);
+insert into t (id,a) values (138,46);
+insert into t (id,a) values (138,47);
+insert into t (id,a) values (138,48);
+insert into t (id,a) values (138,49);
+insert into t (id,a) values (138,50);
+insert into t (id,a) values (138,51);
+insert into t (id,a) values (138,52);
+insert into t (id,a) values (138,53);
+insert into t (id,a) values (138,54);
+insert into t (id,a) values (138,55);
+insert into t (id,a) values (138,56);
+insert into t (id,a) values (138,57);
+insert into t (id,a) values (138,58);
+insert into t (id,a) values (138,59);
+insert into t (id,a) values (138,60);
+insert into t (id,a) values (138,61);
+insert into t (id,a) values (138,62);
+insert into t (id,a) values (138,63);
+insert into t (id,a) values (138,64);
+insert into t (id,a) values (138,65);
+insert into t (id,a) values (138,66);
+insert into t (id,a) values (138,67);
+insert into t (id,a) values (138,68);
+insert into t (id,a) values (138,69);
+insert into t (id,a) values (138,70);
+insert into t (id,a) values (138,71);
+insert into t (id,a) values (138,72);
+insert into t (id,a) values (138,73);
+insert into t (id,a) values (138,74);
+insert into t (id,a) values (138,75);
+insert into t (id,a) values (138,76);
+insert into t (id,a) values (138,77);
+insert into t (id,a) values (138,78);
+insert into t (id,a) values (138,79);
+insert into t (id,a) values (138,80);
+insert into t (id,a) values (138,81);
+insert into t (id,a) values (138,82);
+insert into t (id,a) values (138,83);
+insert into t (id,a) values (138,84);
+insert into t (id,a) values (138,85);
+insert into t (id,a) values (138,86);
+insert into t (id,a) values (138,87);
+insert into t (id,a) values (138,88);
+insert into t (id,a) values (138,89);
+insert into t (id,a) values (138,90);
+insert into t (id,a) values (138,91);
+insert into t (id,a) values (138,92);
+insert into t (id,a) values (138,93);
+insert into t (id,a) values (138,94);
+insert into t (id,a) values (138,95);
+insert into t (id,a) values (138,96);
+insert into t (id,a) values (138,97);
+insert into t (id,a) values (138,98);
+insert into t (id,a) values (138,99);
+insert into t (id,a) values (139,0);
+insert into t (id,a) values (139,1);
+insert into t (id,a) values (139,2);
+insert into t (id,a) values (139,3);
+insert into t (id,a) values (139,4);
+insert into t (id,a) values (139,5);
+insert into t (id,a) values (139,6);
+insert into t (id,a) values (139,7);
+insert into t (id,a) values (139,8);
+insert into t (id,a) values (139,9);
+insert into t (id,a) values (139,10);
+insert into t (id,a) values (139,11);
+insert into t (id,a) values (139,12);
+insert into t (id,a) values (139,13);
+insert into t (id,a) values (139,14);
+insert into t (id,a) values (139,15);
+insert into t (id,a) values (139,16);
+insert into t (id,a) values (139,17);
+insert into t (id,a) values (139,18);
+insert into t (id,a) values (139,19);
+insert into t (id,a) values (139,20);
+insert into t (id,a) values (139,21);
+insert into t (id,a) values (139,22);
+insert into t (id,a) values (139,23);
+insert into t (id,a) values (139,24);
+insert into t (id,a) values (139,25);
+insert into t (id,a) values (139,26);
+insert into t (id,a) values (139,27);
+insert into t (id,a) values (139,28);
+insert into t (id,a) values (139,29);
+insert into t (id,a) values (139,30);
+insert into t (id,a) values (139,31);
+insert into t (id,a) values (139,32);
+insert into t (id,a) values (139,33);
+insert into t (id,a) values (139,34);
+insert into t (id,a) values (139,35);
+insert into t (id,a) values (139,36);
+insert into t (id,a) values (139,37);
+insert into t (id,a) values (139,38);
+insert into t (id,a) values (139,39);
+insert into t (id,a) values (139,40);
+insert into t (id,a) values (139,41);
+insert into t (id,a) values (139,42);
+insert into t (id,a) values (139,43);
+insert into t (id,a) values (139,44);
+insert into t (id,a) values (139,45);
+insert into t (id,a) values (139,46);
+insert into t (id,a) values (139,47);
+insert into t (id,a) values (139,48);
+insert into t (id,a) values (139,49);
+insert into t (id,a) values (139,50);
+insert into t (id,a) values (139,51);
+insert into t (id,a) values (139,52);
+insert into t (id,a) values (139,53);
+insert into t (id,a) values (139,54);
+insert into t (id,a) values (139,55);
+insert into t (id,a) values (139,56);
+insert into t (id,a) values (139,57);
+insert into t (id,a) values (139,58);
+insert into t (id,a) values (139,59);
+insert into t (id,a) values (139,60);
+insert into t (id,a) values (139,61);
+insert into t (id,a) values (139,62);
+insert into t (id,a) values (139,63);
+insert into t (id,a) values (139,64);
+insert into t (id,a) values (139,65);
+insert into t (id,a) values (139,66);
+insert into t (id,a) values (139,67);
+insert into t (id,a) values (139,68);
+insert into t (id,a) values (139,69);
+insert into t (id,a) values (139,70);
+insert into t (id,a) values (139,71);
+insert into t (id,a) values (139,72);
+insert into t (id,a) values (139,73);
+insert into t (id,a) values (139,74);
+insert into t (id,a) values (139,75);
+insert into t (id,a) values (139,76);
+insert into t (id,a) values (139,77);
+insert into t (id,a) values (139,78);
+insert into t (id,a) values (139,79);
+insert into t (id,a) values (139,80);
+insert into t (id,a) values (139,81);
+insert into t (id,a) values (139,82);
+insert into t (id,a) values (139,83);
+insert into t (id,a) values (139,84);
+insert into t (id,a) values (139,85);
+insert into t (id,a) values (139,86);
+insert into t (id,a) values (139,87);
+insert into t (id,a) values (139,88);
+insert into t (id,a) values (139,89);
+insert into t (id,a) values (139,90);
+insert into t (id,a) values (139,91);
+insert into t (id,a) values (139,92);
+insert into t (id,a) values (139,93);
+insert into t (id,a) values (139,94);
+insert into t (id,a) values (139,95);
+insert into t (id,a) values (139,96);
+insert into t (id,a) values (139,97);
+insert into t (id,a) values (139,98);
+insert into t (id,a) values (139,99);
+insert into t (id,a) values (140,0);
+insert into t (id,a) values (140,1);
+insert into t (id,a) values (140,2);
+insert into t (id,a) values (140,3);
+insert into t (id,a) values (140,4);
+insert into t (id,a) values (140,5);
+insert into t (id,a) values (140,6);
+insert into t (id,a) values (140,7);
+insert into t (id,a) values (140,8);
+insert into t (id,a) values (140,9);
+insert into t (id,a) values (140,10);
+insert into t (id,a) values (140,11);
+insert into t (id,a) values (140,12);
+insert into t (id,a) values (140,13);
+insert into t (id,a) values (140,14);
+insert into t (id,a) values (140,15);
+insert into t (id,a) values (140,16);
+insert into t (id,a) values (140,17);
+insert into t (id,a) values (140,18);
+insert into t (id,a) values (140,19);
+insert into t (id,a) values (140,20);
+insert into t (id,a) values (140,21);
+insert into t (id,a) values (140,22);
+insert into t (id,a) values (140,23);
+insert into t (id,a) values (140,24);
+insert into t (id,a) values (140,25);
+insert into t (id,a) values (140,26);
+insert into t (id,a) values (140,27);
+insert into t (id,a) values (140,28);
+insert into t (id,a) values (140,29);
+insert into t (id,a) values (140,30);
+insert into t (id,a) values (140,31);
+insert into t (id,a) values (140,32);
+insert into t (id,a) values (140,33);
+insert into t (id,a) values (140,34);
+insert into t (id,a) values (140,35);
+insert into t (id,a) values (140,36);
+insert into t (id,a) values (140,37);
+insert into t (id,a) values (140,38);
+insert into t (id,a) values (140,39);
+insert into t (id,a) values (140,40);
+insert into t (id,a) values (140,41);
+insert into t (id,a) values (140,42);
+insert into t (id,a) values (140,43);
+insert into t (id,a) values (140,44);
+insert into t (id,a) values (140,45);
+insert into t (id,a) values (140,46);
+insert into t (id,a) values (140,47);
+insert into t (id,a) values (140,48);
+insert into t (id,a) values (140,49);
+insert into t (id,a) values (140,50);
+insert into t (id,a) values (140,51);
+insert into t (id,a) values (140,52);
+insert into t (id,a) values (140,53);
+insert into t (id,a) values (140,54);
+insert into t (id,a) values (140,55);
+insert into t (id,a) values (140,56);
+insert into t (id,a) values (140,57);
+insert into t (id,a) values (140,58);
+insert into t (id,a) values (140,59);
+insert into t (id,a) values (140,60);
+insert into t (id,a) values (140,61);
+insert into t (id,a) values (140,62);
+insert into t (id,a) values (140,63);
+insert into t (id,a) values (140,64);
+insert into t (id,a) values (140,65);
+insert into t (id,a) values (140,66);
+insert into t (id,a) values (140,67);
+insert into t (id,a) values (140,68);
+insert into t (id,a) values (140,69);
+insert into t (id,a) values (140,70);
+insert into t (id,a) values (140,71);
+insert into t (id,a) values (140,72);
+insert into t (id,a) values (140,73);
+insert into t (id,a) values (140,74);
+insert into t (id,a) values (140,75);
+insert into t (id,a) values (140,76);
+insert into t (id,a) values (140,77);
+insert into t (id,a) values (140,78);
+insert into t (id,a) values (140,79);
+insert into t (id,a) values (140,80);
+insert into t (id,a) values (140,81);
+insert into t (id,a) values (140,82);
+insert into t (id,a) values (140,83);
+insert into t (id,a) values (140,84);
+insert into t (id,a) values (140,85);
+insert into t (id,a) values (140,86);
+insert into t (id,a) values (140,87);
+insert into t (id,a) values (140,88);
+insert into t (id,a) values (140,89);
+insert into t (id,a) values (140,90);
+insert into t (id,a) values (140,91);
+insert into t (id,a) values (140,92);
+insert into t (id,a) values (140,93);
+insert into t (id,a) values (140,94);
+insert into t (id,a) values (140,95);
+insert into t (id,a) values (140,96);
+insert into t (id,a) values (140,97);
+insert into t (id,a) values (140,98);
+insert into t (id,a) values (140,99);
+insert into t (id,a) values (141,0);
+insert into t (id,a) values (141,1);
+insert into t (id,a) values (141,2);
+insert into t (id,a) values (141,3);
+insert into t (id,a) values (141,4);
+insert into t (id,a) values (141,5);
+insert into t (id,a) values (141,6);
+insert into t (id,a) values (141,7);
+insert into t (id,a) values (141,8);
+insert into t (id,a) values (141,9);
+insert into t (id,a) values (141,10);
+insert into t (id,a) values (141,11);
+insert into t (id,a) values (141,12);
+insert into t (id,a) values (141,13);
+insert into t (id,a) values (141,14);
+insert into t (id,a) values (141,15);
+insert into t (id,a) values (141,16);
+insert into t (id,a) values (141,17);
+insert into t (id,a) values (141,18);
+insert into t (id,a) values (141,19);
+insert into t (id,a) values (141,20);
+insert into t (id,a) values (141,21);
+insert into t (id,a) values (141,22);
+insert into t (id,a) values (141,23);
+insert into t (id,a) values (141,24);
+insert into t (id,a) values (141,25);
+insert into t (id,a) values (141,26);
+insert into t (id,a) values (141,27);
+insert into t (id,a) values (141,28);
+insert into t (id,a) values (141,29);
+insert into t (id,a) values (141,30);
+insert into t (id,a) values (141,31);
+insert into t (id,a) values (141,32);
+insert into t (id,a) values (141,33);
+insert into t (id,a) values (141,34);
+insert into t (id,a) values (141,35);
+insert into t (id,a) values (141,36);
+insert into t (id,a) values (141,37);
+insert into t (id,a) values (141,38);
+insert into t (id,a) values (141,39);
+insert into t (id,a) values (141,40);
+insert into t (id,a) values (141,41);
+insert into t (id,a) values (141,42);
+insert into t (id,a) values (141,43);
+insert into t (id,a) values (141,44);
+insert into t (id,a) values (141,45);
+insert into t (id,a) values (141,46);
+insert into t (id,a) values (141,47);
+insert into t (id,a) values (141,48);
+insert into t (id,a) values (141,49);
+insert into t (id,a) values (141,50);
+insert into t (id,a) values (141,51);
+insert into t (id,a) values (141,52);
+insert into t (id,a) values (141,53);
+insert into t (id,a) values (141,54);
+insert into t (id,a) values (141,55);
+insert into t (id,a) values (141,56);
+insert into t (id,a) values (141,57);
+insert into t (id,a) values (141,58);
+insert into t (id,a) values (141,59);
+insert into t (id,a) values (141,60);
+insert into t (id,a) values (141,61);
+insert into t (id,a) values (141,62);
+insert into t (id,a) values (141,63);
+insert into t (id,a) values (141,64);
+insert into t (id,a) values (141,65);
+insert into t (id,a) values (141,66);
+insert into t (id,a) values (141,67);
+insert into t (id,a) values (141,68);
+insert into t (id,a) values (141,69);
+insert into t (id,a) values (141,70);
+insert into t (id,a) values (141,71);
+insert into t (id,a) values (141,72);
+insert into t (id,a) values (141,73);
+insert into t (id,a) values (141,74);
+insert into t (id,a) values (141,75);
+insert into t (id,a) values (141,76);
+insert into t (id,a) values (141,77);
+insert into t (id,a) values (141,78);
+insert into t (id,a) values (141,79);
+insert into t (id,a) values (141,80);
+insert into t (id,a) values (141,81);
+insert into t (id,a) values (141,82);
+insert into t (id,a) values (141,83);
+insert into t (id,a) values (141,84);
+insert into t (id,a) values (141,85);
+insert into t (id,a) values (141,86);
+insert into t (id,a) values (141,87);
+insert into t (id,a) values (141,88);
+insert into t (id,a) values (141,89);
+insert into t (id,a) values (141,90);
+insert into t (id,a) values (141,91);
+insert into t (id,a) values (141,92);
+insert into t (id,a) values (141,93);
+insert into t (id,a) values (141,94);
+insert into t (id,a) values (141,95);
+insert into t (id,a) values (141,96);
+insert into t (id,a) values (141,97);
+insert into t (id,a) values (141,98);
+insert into t (id,a) values (141,99);
+insert into t (id,a) values (142,0);
+insert into t (id,a) values (142,1);
+insert into t (id,a) values (142,2);
+insert into t (id,a) values (142,3);
+insert into t (id,a) values (142,4);
+insert into t (id,a) values (142,5);
+insert into t (id,a) values (142,6);
+insert into t (id,a) values (142,7);
+insert into t (id,a) values (142,8);
+insert into t (id,a) values (142,9);
+insert into t (id,a) values (142,10);
+insert into t (id,a) values (142,11);
+insert into t (id,a) values (142,12);
+insert into t (id,a) values (142,13);
+insert into t (id,a) values (142,14);
+insert into t (id,a) values (142,15);
+insert into t (id,a) values (142,16);
+insert into t (id,a) values (142,17);
+insert into t (id,a) values (142,18);
+insert into t (id,a) values (142,19);
+insert into t (id,a) values (142,20);
+insert into t (id,a) values (142,21);
+insert into t (id,a) values (142,22);
+insert into t (id,a) values (142,23);
+insert into t (id,a) values (142,24);
+insert into t (id,a) values (142,25);
+insert into t (id,a) values (142,26);
+insert into t (id,a) values (142,27);
+insert into t (id,a) values (142,28);
+insert into t (id,a) values (142,29);
+insert into t (id,a) values (142,30);
+insert into t (id,a) values (142,31);
+insert into t (id,a) values (142,32);
+insert into t (id,a) values (142,33);
+insert into t (id,a) values (142,34);
+insert into t (id,a) values (142,35);
+insert into t (id,a) values (142,36);
+insert into t (id,a) values (142,37);
+insert into t (id,a) values (142,38);
+insert into t (id,a) values (142,39);
+insert into t (id,a) values (142,40);
+insert into t (id,a) values (142,41);
+insert into t (id,a) values (142,42);
+insert into t (id,a) values (142,43);
+insert into t (id,a) values (142,44);
+insert into t (id,a) values (142,45);
+insert into t (id,a) values (142,46);
+insert into t (id,a) values (142,47);
+insert into t (id,a) values (142,48);
+insert into t (id,a) values (142,49);
+insert into t (id,a) values (142,50);
+insert into t (id,a) values (142,51);
+insert into t (id,a) values (142,52);
+insert into t (id,a) values (142,53);
+insert into t (id,a) values (142,54);
+insert into t (id,a) values (142,55);
+insert into t (id,a) values (142,56);
+insert into t (id,a) values (142,57);
+insert into t (id,a) values (142,58);
+insert into t (id,a) values (142,59);
+insert into t (id,a) values (142,60);
+insert into t (id,a) values (142,61);
+insert into t (id,a) values (142,62);
+insert into t (id,a) values (142,63);
+insert into t (id,a) values (142,64);
+insert into t (id,a) values (142,65);
+insert into t (id,a) values (142,66);
+insert into t (id,a) values (142,67);
+insert into t (id,a) values (142,68);
+insert into t (id,a) values (142,69);
+insert into t (id,a) values (142,70);
+insert into t (id,a) values (142,71);
+insert into t (id,a) values (142,72);
+insert into t (id,a) values (142,73);
+insert into t (id,a) values (142,74);
+insert into t (id,a) values (142,75);
+insert into t (id,a) values (142,76);
+insert into t (id,a) values (142,77);
+insert into t (id,a) values (142,78);
+insert into t (id,a) values (142,79);
+insert into t (id,a) values (142,80);
+insert into t (id,a) values (142,81);
+insert into t (id,a) values (142,82);
+insert into t (id,a) values (142,83);
+insert into t (id,a) values (142,84);
+insert into t (id,a) values (142,85);
+insert into t (id,a) values (142,86);
+insert into t (id,a) values (142,87);
+insert into t (id,a) values (142,88);
+insert into t (id,a) values (142,89);
+insert into t (id,a) values (142,90);
+insert into t (id,a) values (142,91);
+insert into t (id,a) values (142,92);
+insert into t (id,a) values (142,93);
+insert into t (id,a) values (142,94);
+insert into t (id,a) values (142,95);
+insert into t (id,a) values (142,96);
+insert into t (id,a) values (142,97);
+insert into t (id,a) values (142,98);
+insert into t (id,a) values (142,99);
+insert into t (id,a) values (143,0);
+insert into t (id,a) values (143,1);
+insert into t (id,a) values (143,2);
+insert into t (id,a) values (143,3);
+insert into t (id,a) values (143,4);
+insert into t (id,a) values (143,5);
+insert into t (id,a) values (143,6);
+insert into t (id,a) values (143,7);
+insert into t (id,a) values (143,8);
+insert into t (id,a) values (143,9);
+insert into t (id,a) values (143,10);
+insert into t (id,a) values (143,11);
+insert into t (id,a) values (143,12);
+insert into t (id,a) values (143,13);
+insert into t (id,a) values (143,14);
+insert into t (id,a) values (143,15);
+insert into t (id,a) values (143,16);
+insert into t (id,a) values (143,17);
+insert into t (id,a) values (143,18);
+insert into t (id,a) values (143,19);
+insert into t (id,a) values (143,20);
+insert into t (id,a) values (143,21);
+insert into t (id,a) values (143,22);
+insert into t (id,a) values (143,23);
+insert into t (id,a) values (143,24);
+insert into t (id,a) values (143,25);
+insert into t (id,a) values (143,26);
+insert into t (id,a) values (143,27);
+insert into t (id,a) values (143,28);
+insert into t (id,a) values (143,29);
+insert into t (id,a) values (143,30);
+insert into t (id,a) values (143,31);
+insert into t (id,a) values (143,32);
+insert into t (id,a) values (143,33);
+insert into t (id,a) values (143,34);
+insert into t (id,a) values (143,35);
+insert into t (id,a) values (143,36);
+insert into t (id,a) values (143,37);
+insert into t (id,a) values (143,38);
+insert into t (id,a) values (143,39);
+insert into t (id,a) values (143,40);
+insert into t (id,a) values (143,41);
+insert into t (id,a) values (143,42);
+insert into t (id,a) values (143,43);
+insert into t (id,a) values (143,44);
+insert into t (id,a) values (143,45);
+insert into t (id,a) values (143,46);
+insert into t (id,a) values (143,47);
+insert into t (id,a) values (143,48);
+insert into t (id,a) values (143,49);
+insert into t (id,a) values (143,50);
+insert into t (id,a) values (143,51);
+insert into t (id,a) values (143,52);
+insert into t (id,a) values (143,53);
+insert into t (id,a) values (143,54);
+insert into t (id,a) values (143,55);
+insert into t (id,a) values (143,56);
+insert into t (id,a) values (143,57);
+insert into t (id,a) values (143,58);
+insert into t (id,a) values (143,59);
+insert into t (id,a) values (143,60);
+insert into t (id,a) values (143,61);
+insert into t (id,a) values (143,62);
+insert into t (id,a) values (143,63);
+insert into t (id,a) values (143,64);
+insert into t (id,a) values (143,65);
+insert into t (id,a) values (143,66);
+insert into t (id,a) values (143,67);
+insert into t (id,a) values (143,68);
+insert into t (id,a) values (143,69);
+insert into t (id,a) values (143,70);
+insert into t (id,a) values (143,71);
+insert into t (id,a) values (143,72);
+insert into t (id,a) values (143,73);
+insert into t (id,a) values (143,74);
+insert into t (id,a) values (143,75);
+insert into t (id,a) values (143,76);
+insert into t (id,a) values (143,77);
+insert into t (id,a) values (143,78);
+insert into t (id,a) values (143,79);
+insert into t (id,a) values (143,80);
+insert into t (id,a) values (143,81);
+insert into t (id,a) values (143,82);
+insert into t (id,a) values (143,83);
+insert into t (id,a) values (143,84);
+insert into t (id,a) values (143,85);
+insert into t (id,a) values (143,86);
+insert into t (id,a) values (143,87);
+insert into t (id,a) values (143,88);
+insert into t (id,a) values (143,89);
+insert into t (id,a) values (143,90);
+insert into t (id,a) values (143,91);
+insert into t (id,a) values (143,92);
+insert into t (id,a) values (143,93);
+insert into t (id,a) values (143,94);
+insert into t (id,a) values (143,95);
+insert into t (id,a) values (143,96);
+insert into t (id,a) values (143,97);
+insert into t (id,a) values (143,98);
+insert into t (id,a) values (143,99);
+insert into t (id,a) values (144,0);
+insert into t (id,a) values (144,1);
+insert into t (id,a) values (144,2);
+insert into t (id,a) values (144,3);
+insert into t (id,a) values (144,4);
+insert into t (id,a) values (144,5);
+insert into t (id,a) values (144,6);
+insert into t (id,a) values (144,7);
+insert into t (id,a) values (144,8);
+insert into t (id,a) values (144,9);
+insert into t (id,a) values (144,10);
+insert into t (id,a) values (144,11);
+insert into t (id,a) values (144,12);
+insert into t (id,a) values (144,13);
+insert into t (id,a) values (144,14);
+insert into t (id,a) values (144,15);
+insert into t (id,a) values (144,16);
+insert into t (id,a) values (144,17);
+insert into t (id,a) values (144,18);
+insert into t (id,a) values (144,19);
+insert into t (id,a) values (144,20);
+insert into t (id,a) values (144,21);
+insert into t (id,a) values (144,22);
+insert into t (id,a) values (144,23);
+insert into t (id,a) values (144,24);
+insert into t (id,a) values (144,25);
+insert into t (id,a) values (144,26);
+insert into t (id,a) values (144,27);
+insert into t (id,a) values (144,28);
+insert into t (id,a) values (144,29);
+insert into t (id,a) values (144,30);
+insert into t (id,a) values (144,31);
+insert into t (id,a) values (144,32);
+insert into t (id,a) values (144,33);
+insert into t (id,a) values (144,34);
+insert into t (id,a) values (144,35);
+insert into t (id,a) values (144,36);
+insert into t (id,a) values (144,37);
+insert into t (id,a) values (144,38);
+insert into t (id,a) values (144,39);
+insert into t (id,a) values (144,40);
+insert into t (id,a) values (144,41);
+insert into t (id,a) values (144,42);
+insert into t (id,a) values (144,43);
+insert into t (id,a) values (144,44);
+insert into t (id,a) values (144,45);
+insert into t (id,a) values (144,46);
+insert into t (id,a) values (144,47);
+insert into t (id,a) values (144,48);
+insert into t (id,a) values (144,49);
+insert into t (id,a) values (144,50);
+insert into t (id,a) values (144,51);
+insert into t (id,a) values (144,52);
+insert into t (id,a) values (144,53);
+insert into t (id,a) values (144,54);
+insert into t (id,a) values (144,55);
+insert into t (id,a) values (144,56);
+insert into t (id,a) values (144,57);
+insert into t (id,a) values (144,58);
+insert into t (id,a) values (144,59);
+insert into t (id,a) values (144,60);
+insert into t (id,a) values (144,61);
+insert into t (id,a) values (144,62);
+insert into t (id,a) values (144,63);
+insert into t (id,a) values (144,64);
+insert into t (id,a) values (144,65);
+insert into t (id,a) values (144,66);
+insert into t (id,a) values (144,67);
+insert into t (id,a) values (144,68);
+insert into t (id,a) values (144,69);
+insert into t (id,a) values (144,70);
+insert into t (id,a) values (144,71);
+insert into t (id,a) values (144,72);
+insert into t (id,a) values (144,73);
+insert into t (id,a) values (144,74);
+insert into t (id,a) values (144,75);
+insert into t (id,a) values (144,76);
+insert into t (id,a) values (144,77);
+insert into t (id,a) values (144,78);
+insert into t (id,a) values (144,79);
+insert into t (id,a) values (144,80);
+insert into t (id,a) values (144,81);
+insert into t (id,a) values (144,82);
+insert into t (id,a) values (144,83);
+insert into t (id,a) values (144,84);
+insert into t (id,a) values (144,85);
+insert into t (id,a) values (144,86);
+insert into t (id,a) values (144,87);
+insert into t (id,a) values (144,88);
+insert into t (id,a) values (144,89);
+insert into t (id,a) values (144,90);
+insert into t (id,a) values (144,91);
+insert into t (id,a) values (144,92);
+insert into t (id,a) values (144,93);
+insert into t (id,a) values (144,94);
+insert into t (id,a) values (144,95);
+insert into t (id,a) values (144,96);
+insert into t (id,a) values (144,97);
+insert into t (id,a) values (144,98);
+insert into t (id,a) values (144,99);
+insert into t (id,a) values (145,0);
+insert into t (id,a) values (145,1);
+insert into t (id,a) values (145,2);
+insert into t (id,a) values (145,3);
+insert into t (id,a) values (145,4);
+insert into t (id,a) values (145,5);
+insert into t (id,a) values (145,6);
+insert into t (id,a) values (145,7);
+insert into t (id,a) values (145,8);
+insert into t (id,a) values (145,9);
+insert into t (id,a) values (145,10);
+insert into t (id,a) values (145,11);
+insert into t (id,a) values (145,12);
+insert into t (id,a) values (145,13);
+insert into t (id,a) values (145,14);
+insert into t (id,a) values (145,15);
+insert into t (id,a) values (145,16);
+insert into t (id,a) values (145,17);
+insert into t (id,a) values (145,18);
+insert into t (id,a) values (145,19);
+insert into t (id,a) values (145,20);
+insert into t (id,a) values (145,21);
+insert into t (id,a) values (145,22);
+insert into t (id,a) values (145,23);
+insert into t (id,a) values (145,24);
+insert into t (id,a) values (145,25);
+insert into t (id,a) values (145,26);
+insert into t (id,a) values (145,27);
+insert into t (id,a) values (145,28);
+insert into t (id,a) values (145,29);
+insert into t (id,a) values (145,30);
+insert into t (id,a) values (145,31);
+insert into t (id,a) values (145,32);
+insert into t (id,a) values (145,33);
+insert into t (id,a) values (145,34);
+insert into t (id,a) values (145,35);
+insert into t (id,a) values (145,36);
+insert into t (id,a) values (145,37);
+insert into t (id,a) values (145,38);
+insert into t (id,a) values (145,39);
+insert into t (id,a) values (145,40);
+insert into t (id,a) values (145,41);
+insert into t (id,a) values (145,42);
+insert into t (id,a) values (145,43);
+insert into t (id,a) values (145,44);
+insert into t (id,a) values (145,45);
+insert into t (id,a) values (145,46);
+insert into t (id,a) values (145,47);
+insert into t (id,a) values (145,48);
+insert into t (id,a) values (145,49);
+insert into t (id,a) values (145,50);
+insert into t (id,a) values (145,51);
+insert into t (id,a) values (145,52);
+insert into t (id,a) values (145,53);
+insert into t (id,a) values (145,54);
+insert into t (id,a) values (145,55);
+insert into t (id,a) values (145,56);
+insert into t (id,a) values (145,57);
+insert into t (id,a) values (145,58);
+insert into t (id,a) values (145,59);
+insert into t (id,a) values (145,60);
+insert into t (id,a) values (145,61);
+insert into t (id,a) values (145,62);
+insert into t (id,a) values (145,63);
+insert into t (id,a) values (145,64);
+insert into t (id,a) values (145,65);
+insert into t (id,a) values (145,66);
+insert into t (id,a) values (145,67);
+insert into t (id,a) values (145,68);
+insert into t (id,a) values (145,69);
+insert into t (id,a) values (145,70);
+insert into t (id,a) values (145,71);
+insert into t (id,a) values (145,72);
+insert into t (id,a) values (145,73);
+insert into t (id,a) values (145,74);
+insert into t (id,a) values (145,75);
+insert into t (id,a) values (145,76);
+insert into t (id,a) values (145,77);
+insert into t (id,a) values (145,78);
+insert into t (id,a) values (145,79);
+insert into t (id,a) values (145,80);
+insert into t (id,a) values (145,81);
+insert into t (id,a) values (145,82);
+insert into t (id,a) values (145,83);
+insert into t (id,a) values (145,84);
+insert into t (id,a) values (145,85);
+insert into t (id,a) values (145,86);
+insert into t (id,a) values (145,87);
+insert into t (id,a) values (145,88);
+insert into t (id,a) values (145,89);
+insert into t (id,a) values (145,90);
+insert into t (id,a) values (145,91);
+insert into t (id,a) values (145,92);
+insert into t (id,a) values (145,93);
+insert into t (id,a) values (145,94);
+insert into t (id,a) values (145,95);
+insert into t (id,a) values (145,96);
+insert into t (id,a) values (145,97);
+insert into t (id,a) values (145,98);
+insert into t (id,a) values (145,99);
+insert into t (id,a) values (146,0);
+insert into t (id,a) values (146,1);
+insert into t (id,a) values (146,2);
+insert into t (id,a) values (146,3);
+insert into t (id,a) values (146,4);
+insert into t (id,a) values (146,5);
+insert into t (id,a) values (146,6);
+insert into t (id,a) values (146,7);
+insert into t (id,a) values (146,8);
+insert into t (id,a) values (146,9);
+insert into t (id,a) values (146,10);
+insert into t (id,a) values (146,11);
+insert into t (id,a) values (146,12);
+insert into t (id,a) values (146,13);
+insert into t (id,a) values (146,14);
+insert into t (id,a) values (146,15);
+insert into t (id,a) values (146,16);
+insert into t (id,a) values (146,17);
+insert into t (id,a) values (146,18);
+insert into t (id,a) values (146,19);
+insert into t (id,a) values (146,20);
+insert into t (id,a) values (146,21);
+insert into t (id,a) values (146,22);
+insert into t (id,a) values (146,23);
+insert into t (id,a) values (146,24);
+insert into t (id,a) values (146,25);
+insert into t (id,a) values (146,26);
+insert into t (id,a) values (146,27);
+insert into t (id,a) values (146,28);
+insert into t (id,a) values (146,29);
+insert into t (id,a) values (146,30);
+insert into t (id,a) values (146,31);
+insert into t (id,a) values (146,32);
+insert into t (id,a) values (146,33);
+insert into t (id,a) values (146,34);
+insert into t (id,a) values (146,35);
+insert into t (id,a) values (146,36);
+insert into t (id,a) values (146,37);
+insert into t (id,a) values (146,38);
+insert into t (id,a) values (146,39);
+insert into t (id,a) values (146,40);
+insert into t (id,a) values (146,41);
+insert into t (id,a) values (146,42);
+insert into t (id,a) values (146,43);
+insert into t (id,a) values (146,44);
+insert into t (id,a) values (146,45);
+insert into t (id,a) values (146,46);
+insert into t (id,a) values (146,47);
+insert into t (id,a) values (146,48);
+insert into t (id,a) values (146,49);
+insert into t (id,a) values (146,50);
+insert into t (id,a) values (146,51);
+insert into t (id,a) values (146,52);
+insert into t (id,a) values (146,53);
+insert into t (id,a) values (146,54);
+insert into t (id,a) values (146,55);
+insert into t (id,a) values (146,56);
+insert into t (id,a) values (146,57);
+insert into t (id,a) values (146,58);
+insert into t (id,a) values (146,59);
+insert into t (id,a) values (146,60);
+insert into t (id,a) values (146,61);
+insert into t (id,a) values (146,62);
+insert into t (id,a) values (146,63);
+insert into t (id,a) values (146,64);
+insert into t (id,a) values (146,65);
+insert into t (id,a) values (146,66);
+insert into t (id,a) values (146,67);
+insert into t (id,a) values (146,68);
+insert into t (id,a) values (146,69);
+insert into t (id,a) values (146,70);
+insert into t (id,a) values (146,71);
+insert into t (id,a) values (146,72);
+insert into t (id,a) values (146,73);
+insert into t (id,a) values (146,74);
+insert into t (id,a) values (146,75);
+insert into t (id,a) values (146,76);
+insert into t (id,a) values (146,77);
+insert into t (id,a) values (146,78);
+insert into t (id,a) values (146,79);
+insert into t (id,a) values (146,80);
+insert into t (id,a) values (146,81);
+insert into t (id,a) values (146,82);
+insert into t (id,a) values (146,83);
+insert into t (id,a) values (146,84);
+insert into t (id,a) values (146,85);
+insert into t (id,a) values (146,86);
+insert into t (id,a) values (146,87);
+insert into t (id,a) values (146,88);
+insert into t (id,a) values (146,89);
+insert into t (id,a) values (146,90);
+insert into t (id,a) values (146,91);
+insert into t (id,a) values (146,92);
+insert into t (id,a) values (146,93);
+insert into t (id,a) values (146,94);
+insert into t (id,a) values (146,95);
+insert into t (id,a) values (146,96);
+insert into t (id,a) values (146,97);
+insert into t (id,a) values (146,98);
+insert into t (id,a) values (146,99);
+insert into t (id,a) values (147,0);
+insert into t (id,a) values (147,1);
+insert into t (id,a) values (147,2);
+insert into t (id,a) values (147,3);
+insert into t (id,a) values (147,4);
+insert into t (id,a) values (147,5);
+insert into t (id,a) values (147,6);
+insert into t (id,a) values (147,7);
+insert into t (id,a) values (147,8);
+insert into t (id,a) values (147,9);
+insert into t (id,a) values (147,10);
+insert into t (id,a) values (147,11);
+insert into t (id,a) values (147,12);
+insert into t (id,a) values (147,13);
+insert into t (id,a) values (147,14);
+insert into t (id,a) values (147,15);
+insert into t (id,a) values (147,16);
+insert into t (id,a) values (147,17);
+insert into t (id,a) values (147,18);
+insert into t (id,a) values (147,19);
+insert into t (id,a) values (147,20);
+insert into t (id,a) values (147,21);
+insert into t (id,a) values (147,22);
+insert into t (id,a) values (147,23);
+insert into t (id,a) values (147,24);
+insert into t (id,a) values (147,25);
+insert into t (id,a) values (147,26);
+insert into t (id,a) values (147,27);
+insert into t (id,a) values (147,28);
+insert into t (id,a) values (147,29);
+insert into t (id,a) values (147,30);
+insert into t (id,a) values (147,31);
+insert into t (id,a) values (147,32);
+insert into t (id,a) values (147,33);
+insert into t (id,a) values (147,34);
+insert into t (id,a) values (147,35);
+insert into t (id,a) values (147,36);
+insert into t (id,a) values (147,37);
+insert into t (id,a) values (147,38);
+insert into t (id,a) values (147,39);
+insert into t (id,a) values (147,40);
+insert into t (id,a) values (147,41);
+insert into t (id,a) values (147,42);
+insert into t (id,a) values (147,43);
+insert into t (id,a) values (147,44);
+insert into t (id,a) values (147,45);
+insert into t (id,a) values (147,46);
+insert into t (id,a) values (147,47);
+insert into t (id,a) values (147,48);
+insert into t (id,a) values (147,49);
+insert into t (id,a) values (147,50);
+insert into t (id,a) values (147,51);
+insert into t (id,a) values (147,52);
+insert into t (id,a) values (147,53);
+insert into t (id,a) values (147,54);
+insert into t (id,a) values (147,55);
+insert into t (id,a) values (147,56);
+insert into t (id,a) values (147,57);
+insert into t (id,a) values (147,58);
+insert into t (id,a) values (147,59);
+insert into t (id,a) values (147,60);
+insert into t (id,a) values (147,61);
+insert into t (id,a) values (147,62);
+insert into t (id,a) values (147,63);
+insert into t (id,a) values (147,64);
+insert into t (id,a) values (147,65);
+insert into t (id,a) values (147,66);
+insert into t (id,a) values (147,67);
+insert into t (id,a) values (147,68);
+insert into t (id,a) values (147,69);
+insert into t (id,a) values (147,70);
+insert into t (id,a) values (147,71);
+insert into t (id,a) values (147,72);
+insert into t (id,a) values (147,73);
+insert into t (id,a) values (147,74);
+insert into t (id,a) values (147,75);
+insert into t (id,a) values (147,76);
+insert into t (id,a) values (147,77);
+insert into t (id,a) values (147,78);
+insert into t (id,a) values (147,79);
+insert into t (id,a) values (147,80);
+insert into t (id,a) values (147,81);
+insert into t (id,a) values (147,82);
+insert into t (id,a) values (147,83);
+insert into t (id,a) values (147,84);
+insert into t (id,a) values (147,85);
+insert into t (id,a) values (147,86);
+insert into t (id,a) values (147,87);
+insert into t (id,a) values (147,88);
+insert into t (id,a) values (147,89);
+insert into t (id,a) values (147,90);
+insert into t (id,a) values (147,91);
+insert into t (id,a) values (147,92);
+insert into t (id,a) values (147,93);
+insert into t (id,a) values (147,94);
+insert into t (id,a) values (147,95);
+insert into t (id,a) values (147,96);
+insert into t (id,a) values (147,97);
+insert into t (id,a) values (147,98);
+insert into t (id,a) values (147,99);
+insert into t (id,a) values (148,0);
+insert into t (id,a) values (148,1);
+insert into t (id,a) values (148,2);
+insert into t (id,a) values (148,3);
+insert into t (id,a) values (148,4);
+insert into t (id,a) values (148,5);
+insert into t (id,a) values (148,6);
+insert into t (id,a) values (148,7);
+insert into t (id,a) values (148,8);
+insert into t (id,a) values (148,9);
+insert into t (id,a) values (148,10);
+insert into t (id,a) values (148,11);
+insert into t (id,a) values (148,12);
+insert into t (id,a) values (148,13);
+insert into t (id,a) values (148,14);
+insert into t (id,a) values (148,15);
+insert into t (id,a) values (148,16);
+insert into t (id,a) values (148,17);
+insert into t (id,a) values (148,18);
+insert into t (id,a) values (148,19);
+insert into t (id,a) values (148,20);
+insert into t (id,a) values (148,21);
+insert into t (id,a) values (148,22);
+insert into t (id,a) values (148,23);
+insert into t (id,a) values (148,24);
+insert into t (id,a) values (148,25);
+insert into t (id,a) values (148,26);
+insert into t (id,a) values (148,27);
+insert into t (id,a) values (148,28);
+insert into t (id,a) values (148,29);
+insert into t (id,a) values (148,30);
+insert into t (id,a) values (148,31);
+insert into t (id,a) values (148,32);
+insert into t (id,a) values (148,33);
+insert into t (id,a) values (148,34);
+insert into t (id,a) values (148,35);
+insert into t (id,a) values (148,36);
+insert into t (id,a) values (148,37);
+insert into t (id,a) values (148,38);
+insert into t (id,a) values (148,39);
+insert into t (id,a) values (148,40);
+insert into t (id,a) values (148,41);
+insert into t (id,a) values (148,42);
+insert into t (id,a) values (148,43);
+insert into t (id,a) values (148,44);
+insert into t (id,a) values (148,45);
+insert into t (id,a) values (148,46);
+insert into t (id,a) values (148,47);
+insert into t (id,a) values (148,48);
+insert into t (id,a) values (148,49);
+insert into t (id,a) values (148,50);
+insert into t (id,a) values (148,51);
+insert into t (id,a) values (148,52);
+insert into t (id,a) values (148,53);
+insert into t (id,a) values (148,54);
+insert into t (id,a) values (148,55);
+insert into t (id,a) values (148,56);
+insert into t (id,a) values (148,57);
+insert into t (id,a) values (148,58);
+insert into t (id,a) values (148,59);
+insert into t (id,a) values (148,60);
+insert into t (id,a) values (148,61);
+insert into t (id,a) values (148,62);
+insert into t (id,a) values (148,63);
+insert into t (id,a) values (148,64);
+insert into t (id,a) values (148,65);
+insert into t (id,a) values (148,66);
+insert into t (id,a) values (148,67);
+insert into t (id,a) values (148,68);
+insert into t (id,a) values (148,69);
+insert into t (id,a) values (148,70);
+insert into t (id,a) values (148,71);
+insert into t (id,a) values (148,72);
+insert into t (id,a) values (148,73);
+insert into t (id,a) values (148,74);
+insert into t (id,a) values (148,75);
+insert into t (id,a) values (148,76);
+insert into t (id,a) values (148,77);
+insert into t (id,a) values (148,78);
+insert into t (id,a) values (148,79);
+insert into t (id,a) values (148,80);
+insert into t (id,a) values (148,81);
+insert into t (id,a) values (148,82);
+insert into t (id,a) values (148,83);
+insert into t (id,a) values (148,84);
+insert into t (id,a) values (148,85);
+insert into t (id,a) values (148,86);
+insert into t (id,a) values (148,87);
+insert into t (id,a) values (148,88);
+insert into t (id,a) values (148,89);
+insert into t (id,a) values (148,90);
+insert into t (id,a) values (148,91);
+insert into t (id,a) values (148,92);
+insert into t (id,a) values (148,93);
+insert into t (id,a) values (148,94);
+insert into t (id,a) values (148,95);
+insert into t (id,a) values (148,96);
+insert into t (id,a) values (148,97);
+insert into t (id,a) values (148,98);
+insert into t (id,a) values (148,99);
+insert into t (id,a) values (149,0);
+insert into t (id,a) values (149,1);
+insert into t (id,a) values (149,2);
+insert into t (id,a) values (149,3);
+insert into t (id,a) values (149,4);
+insert into t (id,a) values (149,5);
+insert into t (id,a) values (149,6);
+insert into t (id,a) values (149,7);
+insert into t (id,a) values (149,8);
+insert into t (id,a) values (149,9);
+insert into t (id,a) values (149,10);
+insert into t (id,a) values (149,11);
+insert into t (id,a) values (149,12);
+insert into t (id,a) values (149,13);
+insert into t (id,a) values (149,14);
+insert into t (id,a) values (149,15);
+insert into t (id,a) values (149,16);
+insert into t (id,a) values (149,17);
+insert into t (id,a) values (149,18);
+insert into t (id,a) values (149,19);
+insert into t (id,a) values (149,20);
+insert into t (id,a) values (149,21);
+insert into t (id,a) values (149,22);
+insert into t (id,a) values (149,23);
+insert into t (id,a) values (149,24);
+insert into t (id,a) values (149,25);
+insert into t (id,a) values (149,26);
+insert into t (id,a) values (149,27);
+insert into t (id,a) values (149,28);
+insert into t (id,a) values (149,29);
+insert into t (id,a) values (149,30);
+insert into t (id,a) values (149,31);
+insert into t (id,a) values (149,32);
+insert into t (id,a) values (149,33);
+insert into t (id,a) values (149,34);
+insert into t (id,a) values (149,35);
+insert into t (id,a) values (149,36);
+insert into t (id,a) values (149,37);
+insert into t (id,a) values (149,38);
+insert into t (id,a) values (149,39);
+insert into t (id,a) values (149,40);
+insert into t (id,a) values (149,41);
+insert into t (id,a) values (149,42);
+insert into t (id,a) values (149,43);
+insert into t (id,a) values (149,44);
+insert into t (id,a) values (149,45);
+insert into t (id,a) values (149,46);
+insert into t (id,a) values (149,47);
+insert into t (id,a) values (149,48);
+insert into t (id,a) values (149,49);
+insert into t (id,a) values (149,50);
+insert into t (id,a) values (149,51);
+insert into t (id,a) values (149,52);
+insert into t (id,a) values (149,53);
+insert into t (id,a) values (149,54);
+insert into t (id,a) values (149,55);
+insert into t (id,a) values (149,56);
+insert into t (id,a) values (149,57);
+insert into t (id,a) values (149,58);
+insert into t (id,a) values (149,59);
+insert into t (id,a) values (149,60);
+insert into t (id,a) values (149,61);
+insert into t (id,a) values (149,62);
+insert into t (id,a) values (149,63);
+insert into t (id,a) values (149,64);
+insert into t (id,a) values (149,65);
+insert into t (id,a) values (149,66);
+insert into t (id,a) values (149,67);
+insert into t (id,a) values (149,68);
+insert into t (id,a) values (149,69);
+insert into t (id,a) values (149,70);
+insert into t (id,a) values (149,71);
+insert into t (id,a) values (149,72);
+insert into t (id,a) values (149,73);
+insert into t (id,a) values (149,74);
+insert into t (id,a) values (149,75);
+insert into t (id,a) values (149,76);
+insert into t (id,a) values (149,77);
+insert into t (id,a) values (149,78);
+insert into t (id,a) values (149,79);
+insert into t (id,a) values (149,80);
+insert into t (id,a) values (149,81);
+insert into t (id,a) values (149,82);
+insert into t (id,a) values (149,83);
+insert into t (id,a) values (149,84);
+insert into t (id,a) values (149,85);
+insert into t (id,a) values (149,86);
+insert into t (id,a) values (149,87);
+insert into t (id,a) values (149,88);
+insert into t (id,a) values (149,89);
+insert into t (id,a) values (149,90);
+insert into t (id,a) values (149,91);
+insert into t (id,a) values (149,92);
+insert into t (id,a) values (149,93);
+insert into t (id,a) values (149,94);
+insert into t (id,a) values (149,95);
+insert into t (id,a) values (149,96);
+insert into t (id,a) values (149,97);
+insert into t (id,a) values (149,98);
+insert into t (id,a) values (149,99);
+insert into t (id,a) values (150,0);
+insert into t (id,a) values (150,1);
+insert into t (id,a) values (150,2);
+insert into t (id,a) values (150,3);
+insert into t (id,a) values (150,4);
+insert into t (id,a) values (150,5);
+insert into t (id,a) values (150,6);
+insert into t (id,a) values (150,7);
+insert into t (id,a) values (150,8);
+insert into t (id,a) values (150,9);
+insert into t (id,a) values (150,10);
+insert into t (id,a) values (150,11);
+insert into t (id,a) values (150,12);
+insert into t (id,a) values (150,13);
+insert into t (id,a) values (150,14);
+insert into t (id,a) values (150,15);
+insert into t (id,a) values (150,16);
+insert into t (id,a) values (150,17);
+insert into t (id,a) values (150,18);
+insert into t (id,a) values (150,19);
+insert into t (id,a) values (150,20);
+insert into t (id,a) values (150,21);
+insert into t (id,a) values (150,22);
+insert into t (id,a) values (150,23);
+insert into t (id,a) values (150,24);
+insert into t (id,a) values (150,25);
+insert into t (id,a) values (150,26);
+insert into t (id,a) values (150,27);
+insert into t (id,a) values (150,28);
+insert into t (id,a) values (150,29);
+insert into t (id,a) values (150,30);
+insert into t (id,a) values (150,31);
+insert into t (id,a) values (150,32);
+insert into t (id,a) values (150,33);
+insert into t (id,a) values (150,34);
+insert into t (id,a) values (150,35);
+insert into t (id,a) values (150,36);
+insert into t (id,a) values (150,37);
+insert into t (id,a) values (150,38);
+insert into t (id,a) values (150,39);
+insert into t (id,a) values (150,40);
+insert into t (id,a) values (150,41);
+insert into t (id,a) values (150,42);
+insert into t (id,a) values (150,43);
+insert into t (id,a) values (150,44);
+insert into t (id,a) values (150,45);
+insert into t (id,a) values (150,46);
+insert into t (id,a) values (150,47);
+insert into t (id,a) values (150,48);
+insert into t (id,a) values (150,49);
+insert into t (id,a) values (150,50);
+insert into t (id,a) values (150,51);
+insert into t (id,a) values (150,52);
+insert into t (id,a) values (150,53);
+insert into t (id,a) values (150,54);
+insert into t (id,a) values (150,55);
+insert into t (id,a) values (150,56);
+insert into t (id,a) values (150,57);
+insert into t (id,a) values (150,58);
+insert into t (id,a) values (150,59);
+insert into t (id,a) values (150,60);
+insert into t (id,a) values (150,61);
+insert into t (id,a) values (150,62);
+insert into t (id,a) values (150,63);
+insert into t (id,a) values (150,64);
+insert into t (id,a) values (150,65);
+insert into t (id,a) values (150,66);
+insert into t (id,a) values (150,67);
+insert into t (id,a) values (150,68);
+insert into t (id,a) values (150,69);
+insert into t (id,a) values (150,70);
+insert into t (id,a) values (150,71);
+insert into t (id,a) values (150,72);
+insert into t (id,a) values (150,73);
+insert into t (id,a) values (150,74);
+insert into t (id,a) values (150,75);
+insert into t (id,a) values (150,76);
+insert into t (id,a) values (150,77);
+insert into t (id,a) values (150,78);
+insert into t (id,a) values (150,79);
+insert into t (id,a) values (150,80);
+insert into t (id,a) values (150,81);
+insert into t (id,a) values (150,82);
+insert into t (id,a) values (150,83);
+insert into t (id,a) values (150,84);
+insert into t (id,a) values (150,85);
+insert into t (id,a) values (150,86);
+insert into t (id,a) values (150,87);
+insert into t (id,a) values (150,88);
+insert into t (id,a) values (150,89);
+insert into t (id,a) values (150,90);
+insert into t (id,a) values (150,91);
+insert into t (id,a) values (150,92);
+insert into t (id,a) values (150,93);
+insert into t (id,a) values (150,94);
+insert into t (id,a) values (150,95);
+insert into t (id,a) values (150,96);
+insert into t (id,a) values (150,97);
+insert into t (id,a) values (150,98);
+insert into t (id,a) values (150,99);
+insert into t (id,a) values (151,0);
+insert into t (id,a) values (151,1);
+insert into t (id,a) values (151,2);
+insert into t (id,a) values (151,3);
+insert into t (id,a) values (151,4);
+insert into t (id,a) values (151,5);
+insert into t (id,a) values (151,6);
+insert into t (id,a) values (151,7);
+insert into t (id,a) values (151,8);
+insert into t (id,a) values (151,9);
+insert into t (id,a) values (151,10);
+insert into t (id,a) values (151,11);
+insert into t (id,a) values (151,12);
+insert into t (id,a) values (151,13);
+insert into t (id,a) values (151,14);
+insert into t (id,a) values (151,15);
+insert into t (id,a) values (151,16);
+insert into t (id,a) values (151,17);
+insert into t (id,a) values (151,18);
+insert into t (id,a) values (151,19);
+insert into t (id,a) values (151,20);
+insert into t (id,a) values (151,21);
+insert into t (id,a) values (151,22);
+insert into t (id,a) values (151,23);
+insert into t (id,a) values (151,24);
+insert into t (id,a) values (151,25);
+insert into t (id,a) values (151,26);
+insert into t (id,a) values (151,27);
+insert into t (id,a) values (151,28);
+insert into t (id,a) values (151,29);
+insert into t (id,a) values (151,30);
+insert into t (id,a) values (151,31);
+insert into t (id,a) values (151,32);
+insert into t (id,a) values (151,33);
+insert into t (id,a) values (151,34);
+insert into t (id,a) values (151,35);
+insert into t (id,a) values (151,36);
+insert into t (id,a) values (151,37);
+insert into t (id,a) values (151,38);
+insert into t (id,a) values (151,39);
+insert into t (id,a) values (151,40);
+insert into t (id,a) values (151,41);
+insert into t (id,a) values (151,42);
+insert into t (id,a) values (151,43);
+insert into t (id,a) values (151,44);
+insert into t (id,a) values (151,45);
+insert into t (id,a) values (151,46);
+insert into t (id,a) values (151,47);
+insert into t (id,a) values (151,48);
+insert into t (id,a) values (151,49);
+insert into t (id,a) values (151,50);
+insert into t (id,a) values (151,51);
+insert into t (id,a) values (151,52);
+insert into t (id,a) values (151,53);
+insert into t (id,a) values (151,54);
+insert into t (id,a) values (151,55);
+insert into t (id,a) values (151,56);
+insert into t (id,a) values (151,57);
+insert into t (id,a) values (151,58);
+insert into t (id,a) values (151,59);
+insert into t (id,a) values (151,60);
+insert into t (id,a) values (151,61);
+insert into t (id,a) values (151,62);
+insert into t (id,a) values (151,63);
+insert into t (id,a) values (151,64);
+insert into t (id,a) values (151,65);
+insert into t (id,a) values (151,66);
+insert into t (id,a) values (151,67);
+insert into t (id,a) values (151,68);
+insert into t (id,a) values (151,69);
+insert into t (id,a) values (151,70);
+insert into t (id,a) values (151,71);
+insert into t (id,a) values (151,72);
+insert into t (id,a) values (151,73);
+insert into t (id,a) values (151,74);
+insert into t (id,a) values (151,75);
+insert into t (id,a) values (151,76);
+insert into t (id,a) values (151,77);
+insert into t (id,a) values (151,78);
+insert into t (id,a) values (151,79);
+insert into t (id,a) values (151,80);
+insert into t (id,a) values (151,81);
+insert into t (id,a) values (151,82);
+insert into t (id,a) values (151,83);
+insert into t (id,a) values (151,84);
+insert into t (id,a) values (151,85);
+insert into t (id,a) values (151,86);
+insert into t (id,a) values (151,87);
+insert into t (id,a) values (151,88);
+insert into t (id,a) values (151,89);
+insert into t (id,a) values (151,90);
+insert into t (id,a) values (151,91);
+insert into t (id,a) values (151,92);
+insert into t (id,a) values (151,93);
+insert into t (id,a) values (151,94);
+insert into t (id,a) values (151,95);
+insert into t (id,a) values (151,96);
+insert into t (id,a) values (151,97);
+insert into t (id,a) values (151,98);
+insert into t (id,a) values (151,99);
+insert into t (id,a) values (152,0);
+insert into t (id,a) values (152,1);
+insert into t (id,a) values (152,2);
+insert into t (id,a) values (152,3);
+insert into t (id,a) values (152,4);
+insert into t (id,a) values (152,5);
+insert into t (id,a) values (152,6);
+insert into t (id,a) values (152,7);
+insert into t (id,a) values (152,8);
+insert into t (id,a) values (152,9);
+insert into t (id,a) values (152,10);
+insert into t (id,a) values (152,11);
+insert into t (id,a) values (152,12);
+insert into t (id,a) values (152,13);
+insert into t (id,a) values (152,14);
+insert into t (id,a) values (152,15);
+insert into t (id,a) values (152,16);
+insert into t (id,a) values (152,17);
+insert into t (id,a) values (152,18);
+insert into t (id,a) values (152,19);
+insert into t (id,a) values (152,20);
+insert into t (id,a) values (152,21);
+insert into t (id,a) values (152,22);
+insert into t (id,a) values (152,23);
+insert into t (id,a) values (152,24);
+insert into t (id,a) values (152,25);
+insert into t (id,a) values (152,26);
+insert into t (id,a) values (152,27);
+insert into t (id,a) values (152,28);
+insert into t (id,a) values (152,29);
+insert into t (id,a) values (152,30);
+insert into t (id,a) values (152,31);
+insert into t (id,a) values (152,32);
+insert into t (id,a) values (152,33);
+insert into t (id,a) values (152,34);
+insert into t (id,a) values (152,35);
+insert into t (id,a) values (152,36);
+insert into t (id,a) values (152,37);
+insert into t (id,a) values (152,38);
+insert into t (id,a) values (152,39);
+insert into t (id,a) values (152,40);
+insert into t (id,a) values (152,41);
+insert into t (id,a) values (152,42);
+insert into t (id,a) values (152,43);
+insert into t (id,a) values (152,44);
+insert into t (id,a) values (152,45);
+insert into t (id,a) values (152,46);
+insert into t (id,a) values (152,47);
+insert into t (id,a) values (152,48);
+insert into t (id,a) values (152,49);
+insert into t (id,a) values (152,50);
+insert into t (id,a) values (152,51);
+insert into t (id,a) values (152,52);
+insert into t (id,a) values (152,53);
+insert into t (id,a) values (152,54);
+insert into t (id,a) values (152,55);
+insert into t (id,a) values (152,56);
+insert into t (id,a) values (152,57);
+insert into t (id,a) values (152,58);
+insert into t (id,a) values (152,59);
+insert into t (id,a) values (152,60);
+insert into t (id,a) values (152,61);
+insert into t (id,a) values (152,62);
+insert into t (id,a) values (152,63);
+insert into t (id,a) values (152,64);
+insert into t (id,a) values (152,65);
+insert into t (id,a) values (152,66);
+insert into t (id,a) values (152,67);
+insert into t (id,a) values (152,68);
+insert into t (id,a) values (152,69);
+insert into t (id,a) values (152,70);
+insert into t (id,a) values (152,71);
+insert into t (id,a) values (152,72);
+insert into t (id,a) values (152,73);
+insert into t (id,a) values (152,74);
+insert into t (id,a) values (152,75);
+insert into t (id,a) values (152,76);
+insert into t (id,a) values (152,77);
+insert into t (id,a) values (152,78);
+insert into t (id,a) values (152,79);
+insert into t (id,a) values (152,80);
+insert into t (id,a) values (152,81);
+insert into t (id,a) values (152,82);
+insert into t (id,a) values (152,83);
+insert into t (id,a) values (152,84);
+insert into t (id,a) values (152,85);
+insert into t (id,a) values (152,86);
+insert into t (id,a) values (152,87);
+insert into t (id,a) values (152,88);
+insert into t (id,a) values (152,89);
+insert into t (id,a) values (152,90);
+insert into t (id,a) values (152,91);
+insert into t (id,a) values (152,92);
+insert into t (id,a) values (152,93);
+insert into t (id,a) values (152,94);
+insert into t (id,a) values (152,95);
+insert into t (id,a) values (152,96);
+insert into t (id,a) values (152,97);
+insert into t (id,a) values (152,98);
+insert into t (id,a) values (152,99);
+insert into t (id,a) values (153,0);
+insert into t (id,a) values (153,1);
+insert into t (id,a) values (153,2);
+insert into t (id,a) values (153,3);
+insert into t (id,a) values (153,4);
+insert into t (id,a) values (153,5);
+insert into t (id,a) values (153,6);
+insert into t (id,a) values (153,7);
+insert into t (id,a) values (153,8);
+insert into t (id,a) values (153,9);
+insert into t (id,a) values (153,10);
+insert into t (id,a) values (153,11);
+insert into t (id,a) values (153,12);
+insert into t (id,a) values (153,13);
+insert into t (id,a) values (153,14);
+insert into t (id,a) values (153,15);
+insert into t (id,a) values (153,16);
+insert into t (id,a) values (153,17);
+insert into t (id,a) values (153,18);
+insert into t (id,a) values (153,19);
+insert into t (id,a) values (153,20);
+insert into t (id,a) values (153,21);
+insert into t (id,a) values (153,22);
+insert into t (id,a) values (153,23);
+insert into t (id,a) values (153,24);
+insert into t (id,a) values (153,25);
+insert into t (id,a) values (153,26);
+insert into t (id,a) values (153,27);
+insert into t (id,a) values (153,28);
+insert into t (id,a) values (153,29);
+insert into t (id,a) values (153,30);
+insert into t (id,a) values (153,31);
+insert into t (id,a) values (153,32);
+insert into t (id,a) values (153,33);
+insert into t (id,a) values (153,34);
+insert into t (id,a) values (153,35);
+insert into t (id,a) values (153,36);
+insert into t (id,a) values (153,37);
+insert into t (id,a) values (153,38);
+insert into t (id,a) values (153,39);
+insert into t (id,a) values (153,40);
+insert into t (id,a) values (153,41);
+insert into t (id,a) values (153,42);
+insert into t (id,a) values (153,43);
+insert into t (id,a) values (153,44);
+insert into t (id,a) values (153,45);
+insert into t (id,a) values (153,46);
+insert into t (id,a) values (153,47);
+insert into t (id,a) values (153,48);
+insert into t (id,a) values (153,49);
+insert into t (id,a) values (153,50);
+insert into t (id,a) values (153,51);
+insert into t (id,a) values (153,52);
+insert into t (id,a) values (153,53);
+insert into t (id,a) values (153,54);
+insert into t (id,a) values (153,55);
+insert into t (id,a) values (153,56);
+insert into t (id,a) values (153,57);
+insert into t (id,a) values (153,58);
+insert into t (id,a) values (153,59);
+insert into t (id,a) values (153,60);
+insert into t (id,a) values (153,61);
+insert into t (id,a) values (153,62);
+insert into t (id,a) values (153,63);
+insert into t (id,a) values (153,64);
+insert into t (id,a) values (153,65);
+insert into t (id,a) values (153,66);
+insert into t (id,a) values (153,67);
+insert into t (id,a) values (153,68);
+insert into t (id,a) values (153,69);
+insert into t (id,a) values (153,70);
+insert into t (id,a) values (153,71);
+insert into t (id,a) values (153,72);
+insert into t (id,a) values (153,73);
+insert into t (id,a) values (153,74);
+insert into t (id,a) values (153,75);
+insert into t (id,a) values (153,76);
+insert into t (id,a) values (153,77);
+insert into t (id,a) values (153,78);
+insert into t (id,a) values (153,79);
+insert into t (id,a) values (153,80);
+insert into t (id,a) values (153,81);
+insert into t (id,a) values (153,82);
+insert into t (id,a) values (153,83);
+insert into t (id,a) values (153,84);
+insert into t (id,a) values (153,85);
+insert into t (id,a) values (153,86);
+insert into t (id,a) values (153,87);
+insert into t (id,a) values (153,88);
+insert into t (id,a) values (153,89);
+insert into t (id,a) values (153,90);
+insert into t (id,a) values (153,91);
+insert into t (id,a) values (153,92);
+insert into t (id,a) values (153,93);
+insert into t (id,a) values (153,94);
+insert into t (id,a) values (153,95);
+insert into t (id,a) values (153,96);
+insert into t (id,a) values (153,97);
+insert into t (id,a) values (153,98);
+insert into t (id,a) values (153,99);
+insert into t (id,a) values (154,0);
+insert into t (id,a) values (154,1);
+insert into t (id,a) values (154,2);
+insert into t (id,a) values (154,3);
+insert into t (id,a) values (154,4);
+insert into t (id,a) values (154,5);
+insert into t (id,a) values (154,6);
+insert into t (id,a) values (154,7);
+insert into t (id,a) values (154,8);
+insert into t (id,a) values (154,9);
+insert into t (id,a) values (154,10);
+insert into t (id,a) values (154,11);
+insert into t (id,a) values (154,12);
+insert into t (id,a) values (154,13);
+insert into t (id,a) values (154,14);
+insert into t (id,a) values (154,15);
+insert into t (id,a) values (154,16);
+insert into t (id,a) values (154,17);
+insert into t (id,a) values (154,18);
+insert into t (id,a) values (154,19);
+insert into t (id,a) values (154,20);
+insert into t (id,a) values (154,21);
+insert into t (id,a) values (154,22);
+insert into t (id,a) values (154,23);
+insert into t (id,a) values (154,24);
+insert into t (id,a) values (154,25);
+insert into t (id,a) values (154,26);
+insert into t (id,a) values (154,27);
+insert into t (id,a) values (154,28);
+insert into t (id,a) values (154,29);
+insert into t (id,a) values (154,30);
+insert into t (id,a) values (154,31);
+insert into t (id,a) values (154,32);
+insert into t (id,a) values (154,33);
+insert into t (id,a) values (154,34);
+insert into t (id,a) values (154,35);
+insert into t (id,a) values (154,36);
+insert into t (id,a) values (154,37);
+insert into t (id,a) values (154,38);
+insert into t (id,a) values (154,39);
+insert into t (id,a) values (154,40);
+insert into t (id,a) values (154,41);
+insert into t (id,a) values (154,42);
+insert into t (id,a) values (154,43);
+insert into t (id,a) values (154,44);
+insert into t (id,a) values (154,45);
+insert into t (id,a) values (154,46);
+insert into t (id,a) values (154,47);
+insert into t (id,a) values (154,48);
+insert into t (id,a) values (154,49);
+insert into t (id,a) values (154,50);
+insert into t (id,a) values (154,51);
+insert into t (id,a) values (154,52);
+insert into t (id,a) values (154,53);
+insert into t (id,a) values (154,54);
+insert into t (id,a) values (154,55);
+insert into t (id,a) values (154,56);
+insert into t (id,a) values (154,57);
+insert into t (id,a) values (154,58);
+insert into t (id,a) values (154,59);
+insert into t (id,a) values (154,60);
+insert into t (id,a) values (154,61);
+insert into t (id,a) values (154,62);
+insert into t (id,a) values (154,63);
+insert into t (id,a) values (154,64);
+insert into t (id,a) values (154,65);
+insert into t (id,a) values (154,66);
+insert into t (id,a) values (154,67);
+insert into t (id,a) values (154,68);
+insert into t (id,a) values (154,69);
+insert into t (id,a) values (154,70);
+insert into t (id,a) values (154,71);
+insert into t (id,a) values (154,72);
+insert into t (id,a) values (154,73);
+insert into t (id,a) values (154,74);
+insert into t (id,a) values (154,75);
+insert into t (id,a) values (154,76);
+insert into t (id,a) values (154,77);
+insert into t (id,a) values (154,78);
+insert into t (id,a) values (154,79);
+insert into t (id,a) values (154,80);
+insert into t (id,a) values (154,81);
+insert into t (id,a) values (154,82);
+insert into t (id,a) values (154,83);
+insert into t (id,a) values (154,84);
+insert into t (id,a) values (154,85);
+insert into t (id,a) values (154,86);
+insert into t (id,a) values (154,87);
+insert into t (id,a) values (154,88);
+insert into t (id,a) values (154,89);
+insert into t (id,a) values (154,90);
+insert into t (id,a) values (154,91);
+insert into t (id,a) values (154,92);
+insert into t (id,a) values (154,93);
+insert into t (id,a) values (154,94);
+insert into t (id,a) values (154,95);
+insert into t (id,a) values (154,96);
+insert into t (id,a) values (154,97);
+insert into t (id,a) values (154,98);
+insert into t (id,a) values (154,99);
+insert into t (id,a) values (155,0);
+insert into t (id,a) values (155,1);
+insert into t (id,a) values (155,2);
+insert into t (id,a) values (155,3);
+insert into t (id,a) values (155,4);
+insert into t (id,a) values (155,5);
+insert into t (id,a) values (155,6);
+insert into t (id,a) values (155,7);
+insert into t (id,a) values (155,8);
+insert into t (id,a) values (155,9);
+insert into t (id,a) values (155,10);
+insert into t (id,a) values (155,11);
+insert into t (id,a) values (155,12);
+insert into t (id,a) values (155,13);
+insert into t (id,a) values (155,14);
+insert into t (id,a) values (155,15);
+insert into t (id,a) values (155,16);
+insert into t (id,a) values (155,17);
+insert into t (id,a) values (155,18);
+insert into t (id,a) values (155,19);
+insert into t (id,a) values (155,20);
+insert into t (id,a) values (155,21);
+insert into t (id,a) values (155,22);
+insert into t (id,a) values (155,23);
+insert into t (id,a) values (155,24);
+insert into t (id,a) values (155,25);
+insert into t (id,a) values (155,26);
+insert into t (id,a) values (155,27);
+insert into t (id,a) values (155,28);
+insert into t (id,a) values (155,29);
+insert into t (id,a) values (155,30);
+insert into t (id,a) values (155,31);
+insert into t (id,a) values (155,32);
+insert into t (id,a) values (155,33);
+insert into t (id,a) values (155,34);
+insert into t (id,a) values (155,35);
+insert into t (id,a) values (155,36);
+insert into t (id,a) values (155,37);
+insert into t (id,a) values (155,38);
+insert into t (id,a) values (155,39);
+insert into t (id,a) values (155,40);
+insert into t (id,a) values (155,41);
+insert into t (id,a) values (155,42);
+insert into t (id,a) values (155,43);
+insert into t (id,a) values (155,44);
+insert into t (id,a) values (155,45);
+insert into t (id,a) values (155,46);
+insert into t (id,a) values (155,47);
+insert into t (id,a) values (155,48);
+insert into t (id,a) values (155,49);
+insert into t (id,a) values (155,50);
+insert into t (id,a) values (155,51);
+insert into t (id,a) values (155,52);
+insert into t (id,a) values (155,53);
+insert into t (id,a) values (155,54);
+insert into t (id,a) values (155,55);
+insert into t (id,a) values (155,56);
+insert into t (id,a) values (155,57);
+insert into t (id,a) values (155,58);
+insert into t (id,a) values (155,59);
+insert into t (id,a) values (155,60);
+insert into t (id,a) values (155,61);
+insert into t (id,a) values (155,62);
+insert into t (id,a) values (155,63);
+insert into t (id,a) values (155,64);
+insert into t (id,a) values (155,65);
+insert into t (id,a) values (155,66);
+insert into t (id,a) values (155,67);
+insert into t (id,a) values (155,68);
+insert into t (id,a) values (155,69);
+insert into t (id,a) values (155,70);
+insert into t (id,a) values (155,71);
+insert into t (id,a) values (155,72);
+insert into t (id,a) values (155,73);
+insert into t (id,a) values (155,74);
+insert into t (id,a) values (155,75);
+insert into t (id,a) values (155,76);
+insert into t (id,a) values (155,77);
+insert into t (id,a) values (155,78);
+insert into t (id,a) values (155,79);
+insert into t (id,a) values (155,80);
+insert into t (id,a) values (155,81);
+insert into t (id,a) values (155,82);
+insert into t (id,a) values (155,83);
+insert into t (id,a) values (155,84);
+insert into t (id,a) values (155,85);
+insert into t (id,a) values (155,86);
+insert into t (id,a) values (155,87);
+insert into t (id,a) values (155,88);
+insert into t (id,a) values (155,89);
+insert into t (id,a) values (155,90);
+insert into t (id,a) values (155,91);
+insert into t (id,a) values (155,92);
+insert into t (id,a) values (155,93);
+insert into t (id,a) values (155,94);
+insert into t (id,a) values (155,95);
+insert into t (id,a) values (155,96);
+insert into t (id,a) values (155,97);
+insert into t (id,a) values (155,98);
+insert into t (id,a) values (155,99);
+insert into t (id,a) values (156,0);
+insert into t (id,a) values (156,1);
+insert into t (id,a) values (156,2);
+insert into t (id,a) values (156,3);
+insert into t (id,a) values (156,4);
+insert into t (id,a) values (156,5);
+insert into t (id,a) values (156,6);
+insert into t (id,a) values (156,7);
+insert into t (id,a) values (156,8);
+insert into t (id,a) values (156,9);
+insert into t (id,a) values (156,10);
+insert into t (id,a) values (156,11);
+insert into t (id,a) values (156,12);
+insert into t (id,a) values (156,13);
+insert into t (id,a) values (156,14);
+insert into t (id,a) values (156,15);
+insert into t (id,a) values (156,16);
+insert into t (id,a) values (156,17);
+insert into t (id,a) values (156,18);
+insert into t (id,a) values (156,19);
+insert into t (id,a) values (156,20);
+insert into t (id,a) values (156,21);
+insert into t (id,a) values (156,22);
+insert into t (id,a) values (156,23);
+insert into t (id,a) values (156,24);
+insert into t (id,a) values (156,25);
+insert into t (id,a) values (156,26);
+insert into t (id,a) values (156,27);
+insert into t (id,a) values (156,28);
+insert into t (id,a) values (156,29);
+insert into t (id,a) values (156,30);
+insert into t (id,a) values (156,31);
+insert into t (id,a) values (156,32);
+insert into t (id,a) values (156,33);
+insert into t (id,a) values (156,34);
+insert into t (id,a) values (156,35);
+insert into t (id,a) values (156,36);
+insert into t (id,a) values (156,37);
+insert into t (id,a) values (156,38);
+insert into t (id,a) values (156,39);
+insert into t (id,a) values (156,40);
+insert into t (id,a) values (156,41);
+insert into t (id,a) values (156,42);
+insert into t (id,a) values (156,43);
+insert into t (id,a) values (156,44);
+insert into t (id,a) values (156,45);
+insert into t (id,a) values (156,46);
+insert into t (id,a) values (156,47);
+insert into t (id,a) values (156,48);
+insert into t (id,a) values (156,49);
+insert into t (id,a) values (156,50);
+insert into t (id,a) values (156,51);
+insert into t (id,a) values (156,52);
+insert into t (id,a) values (156,53);
+insert into t (id,a) values (156,54);
+insert into t (id,a) values (156,55);
+insert into t (id,a) values (156,56);
+insert into t (id,a) values (156,57);
+insert into t (id,a) values (156,58);
+insert into t (id,a) values (156,59);
+insert into t (id,a) values (156,60);
+insert into t (id,a) values (156,61);
+insert into t (id,a) values (156,62);
+insert into t (id,a) values (156,63);
+insert into t (id,a) values (156,64);
+insert into t (id,a) values (156,65);
+insert into t (id,a) values (156,66);
+insert into t (id,a) values (156,67);
+insert into t (id,a) values (156,68);
+insert into t (id,a) values (156,69);
+insert into t (id,a) values (156,70);
+insert into t (id,a) values (156,71);
+insert into t (id,a) values (156,72);
+insert into t (id,a) values (156,73);
+insert into t (id,a) values (156,74);
+insert into t (id,a) values (156,75);
+insert into t (id,a) values (156,76);
+insert into t (id,a) values (156,77);
+insert into t (id,a) values (156,78);
+insert into t (id,a) values (156,79);
+insert into t (id,a) values (156,80);
+insert into t (id,a) values (156,81);
+insert into t (id,a) values (156,82);
+insert into t (id,a) values (156,83);
+insert into t (id,a) values (156,84);
+insert into t (id,a) values (156,85);
+insert into t (id,a) values (156,86);
+insert into t (id,a) values (156,87);
+insert into t (id,a) values (156,88);
+insert into t (id,a) values (156,89);
+insert into t (id,a) values (156,90);
+insert into t (id,a) values (156,91);
+insert into t (id,a) values (156,92);
+insert into t (id,a) values (156,93);
+insert into t (id,a) values (156,94);
+insert into t (id,a) values (156,95);
+insert into t (id,a) values (156,96);
+insert into t (id,a) values (156,97);
+insert into t (id,a) values (156,98);
+insert into t (id,a) values (156,99);
+insert into t (id,a) values (157,0);
+insert into t (id,a) values (157,1);
+insert into t (id,a) values (157,2);
+insert into t (id,a) values (157,3);
+insert into t (id,a) values (157,4);
+insert into t (id,a) values (157,5);
+insert into t (id,a) values (157,6);
+insert into t (id,a) values (157,7);
+insert into t (id,a) values (157,8);
+insert into t (id,a) values (157,9);
+insert into t (id,a) values (157,10);
+insert into t (id,a) values (157,11);
+insert into t (id,a) values (157,12);
+insert into t (id,a) values (157,13);
+insert into t (id,a) values (157,14);
+insert into t (id,a) values (157,15);
+insert into t (id,a) values (157,16);
+insert into t (id,a) values (157,17);
+insert into t (id,a) values (157,18);
+insert into t (id,a) values (157,19);
+insert into t (id,a) values (157,20);
+insert into t (id,a) values (157,21);
+insert into t (id,a) values (157,22);
+insert into t (id,a) values (157,23);
+insert into t (id,a) values (157,24);
+insert into t (id,a) values (157,25);
+insert into t (id,a) values (157,26);
+insert into t (id,a) values (157,27);
+insert into t (id,a) values (157,28);
+insert into t (id,a) values (157,29);
+insert into t (id,a) values (157,30);
+insert into t (id,a) values (157,31);
+insert into t (id,a) values (157,32);
+insert into t (id,a) values (157,33);
+insert into t (id,a) values (157,34);
+insert into t (id,a) values (157,35);
+insert into t (id,a) values (157,36);
+insert into t (id,a) values (157,37);
+insert into t (id,a) values (157,38);
+insert into t (id,a) values (157,39);
+insert into t (id,a) values (157,40);
+insert into t (id,a) values (157,41);
+insert into t (id,a) values (157,42);
+insert into t (id,a) values (157,43);
+insert into t (id,a) values (157,44);
+insert into t (id,a) values (157,45);
+insert into t (id,a) values (157,46);
+insert into t (id,a) values (157,47);
+insert into t (id,a) values (157,48);
+insert into t (id,a) values (157,49);
+insert into t (id,a) values (157,50);
+insert into t (id,a) values (157,51);
+insert into t (id,a) values (157,52);
+insert into t (id,a) values (157,53);
+insert into t (id,a) values (157,54);
+insert into t (id,a) values (157,55);
+insert into t (id,a) values (157,56);
+insert into t (id,a) values (157,57);
+insert into t (id,a) values (157,58);
+insert into t (id,a) values (157,59);
+insert into t (id,a) values (157,60);
+insert into t (id,a) values (157,61);
+insert into t (id,a) values (157,62);
+insert into t (id,a) values (157,63);
+insert into t (id,a) values (157,64);
+insert into t (id,a) values (157,65);
+insert into t (id,a) values (157,66);
+insert into t (id,a) values (157,67);
+insert into t (id,a) values (157,68);
+insert into t (id,a) values (157,69);
+insert into t (id,a) values (157,70);
+insert into t (id,a) values (157,71);
+insert into t (id,a) values (157,72);
+insert into t (id,a) values (157,73);
+insert into t (id,a) values (157,74);
+insert into t (id,a) values (157,75);
+insert into t (id,a) values (157,76);
+insert into t (id,a) values (157,77);
+insert into t (id,a) values (157,78);
+insert into t (id,a) values (157,79);
+insert into t (id,a) values (157,80);
+insert into t (id,a) values (157,81);
+insert into t (id,a) values (157,82);
+insert into t (id,a) values (157,83);
+insert into t (id,a) values (157,84);
+insert into t (id,a) values (157,85);
+insert into t (id,a) values (157,86);
+insert into t (id,a) values (157,87);
+insert into t (id,a) values (157,88);
+insert into t (id,a) values (157,89);
+insert into t (id,a) values (157,90);
+insert into t (id,a) values (157,91);
+insert into t (id,a) values (157,92);
+insert into t (id,a) values (157,93);
+insert into t (id,a) values (157,94);
+insert into t (id,a) values (157,95);
+insert into t (id,a) values (157,96);
+insert into t (id,a) values (157,97);
+insert into t (id,a) values (157,98);
+insert into t (id,a) values (157,99);
+insert into t (id,a) values (158,0);
+insert into t (id,a) values (158,1);
+insert into t (id,a) values (158,2);
+insert into t (id,a) values (158,3);
+insert into t (id,a) values (158,4);
+insert into t (id,a) values (158,5);
+insert into t (id,a) values (158,6);
+insert into t (id,a) values (158,7);
+insert into t (id,a) values (158,8);
+insert into t (id,a) values (158,9);
+insert into t (id,a) values (158,10);
+insert into t (id,a) values (158,11);
+insert into t (id,a) values (158,12);
+insert into t (id,a) values (158,13);
+insert into t (id,a) values (158,14);
+insert into t (id,a) values (158,15);
+insert into t (id,a) values (158,16);
+insert into t (id,a) values (158,17);
+insert into t (id,a) values (158,18);
+insert into t (id,a) values (158,19);
+insert into t (id,a) values (158,20);
+insert into t (id,a) values (158,21);
+insert into t (id,a) values (158,22);
+insert into t (id,a) values (158,23);
+insert into t (id,a) values (158,24);
+insert into t (id,a) values (158,25);
+insert into t (id,a) values (158,26);
+insert into t (id,a) values (158,27);
+insert into t (id,a) values (158,28);
+insert into t (id,a) values (158,29);
+insert into t (id,a) values (158,30);
+insert into t (id,a) values (158,31);
+insert into t (id,a) values (158,32);
+insert into t (id,a) values (158,33);
+insert into t (id,a) values (158,34);
+insert into t (id,a) values (158,35);
+insert into t (id,a) values (158,36);
+insert into t (id,a) values (158,37);
+insert into t (id,a) values (158,38);
+insert into t (id,a) values (158,39);
+insert into t (id,a) values (158,40);
+insert into t (id,a) values (158,41);
+insert into t (id,a) values (158,42);
+insert into t (id,a) values (158,43);
+insert into t (id,a) values (158,44);
+insert into t (id,a) values (158,45);
+insert into t (id,a) values (158,46);
+insert into t (id,a) values (158,47);
+insert into t (id,a) values (158,48);
+insert into t (id,a) values (158,49);
+insert into t (id,a) values (158,50);
+insert into t (id,a) values (158,51);
+insert into t (id,a) values (158,52);
+insert into t (id,a) values (158,53);
+insert into t (id,a) values (158,54);
+insert into t (id,a) values (158,55);
+insert into t (id,a) values (158,56);
+insert into t (id,a) values (158,57);
+insert into t (id,a) values (158,58);
+insert into t (id,a) values (158,59);
+insert into t (id,a) values (158,60);
+insert into t (id,a) values (158,61);
+insert into t (id,a) values (158,62);
+insert into t (id,a) values (158,63);
+insert into t (id,a) values (158,64);
+insert into t (id,a) values (158,65);
+insert into t (id,a) values (158,66);
+insert into t (id,a) values (158,67);
+insert into t (id,a) values (158,68);
+insert into t (id,a) values (158,69);
+insert into t (id,a) values (158,70);
+insert into t (id,a) values (158,71);
+insert into t (id,a) values (158,72);
+insert into t (id,a) values (158,73);
+insert into t (id,a) values (158,74);
+insert into t (id,a) values (158,75);
+insert into t (id,a) values (158,76);
+insert into t (id,a) values (158,77);
+insert into t (id,a) values (158,78);
+insert into t (id,a) values (158,79);
+insert into t (id,a) values (158,80);
+insert into t (id,a) values (158,81);
+insert into t (id,a) values (158,82);
+insert into t (id,a) values (158,83);
+insert into t (id,a) values (158,84);
+insert into t (id,a) values (158,85);
+insert into t (id,a) values (158,86);
+insert into t (id,a) values (158,87);
+insert into t (id,a) values (158,88);
+insert into t (id,a) values (158,89);
+insert into t (id,a) values (158,90);
+insert into t (id,a) values (158,91);
+insert into t (id,a) values (158,92);
+insert into t (id,a) values (158,93);
+insert into t (id,a) values (158,94);
+insert into t (id,a) values (158,95);
+insert into t (id,a) values (158,96);
+insert into t (id,a) values (158,97);
+insert into t (id,a) values (158,98);
+insert into t (id,a) values (158,99);
+insert into t (id,a) values (159,0);
+insert into t (id,a) values (159,1);
+insert into t (id,a) values (159,2);
+insert into t (id,a) values (159,3);
+insert into t (id,a) values (159,4);
+insert into t (id,a) values (159,5);
+insert into t (id,a) values (159,6);
+insert into t (id,a) values (159,7);
+insert into t (id,a) values (159,8);
+insert into t (id,a) values (159,9);
+insert into t (id,a) values (159,10);
+insert into t (id,a) values (159,11);
+insert into t (id,a) values (159,12);
+insert into t (id,a) values (159,13);
+insert into t (id,a) values (159,14);
+insert into t (id,a) values (159,15);
+insert into t (id,a) values (159,16);
+insert into t (id,a) values (159,17);
+insert into t (id,a) values (159,18);
+insert into t (id,a) values (159,19);
+insert into t (id,a) values (159,20);
+insert into t (id,a) values (159,21);
+insert into t (id,a) values (159,22);
+insert into t (id,a) values (159,23);
+insert into t (id,a) values (159,24);
+insert into t (id,a) values (159,25);
+insert into t (id,a) values (159,26);
+insert into t (id,a) values (159,27);
+insert into t (id,a) values (159,28);
+insert into t (id,a) values (159,29);
+insert into t (id,a) values (159,30);
+insert into t (id,a) values (159,31);
+insert into t (id,a) values (159,32);
+insert into t (id,a) values (159,33);
+insert into t (id,a) values (159,34);
+insert into t (id,a) values (159,35);
+insert into t (id,a) values (159,36);
+insert into t (id,a) values (159,37);
+insert into t (id,a) values (159,38);
+insert into t (id,a) values (159,39);
+insert into t (id,a) values (159,40);
+insert into t (id,a) values (159,41);
+insert into t (id,a) values (159,42);
+insert into t (id,a) values (159,43);
+insert into t (id,a) values (159,44);
+insert into t (id,a) values (159,45);
+insert into t (id,a) values (159,46);
+insert into t (id,a) values (159,47);
+insert into t (id,a) values (159,48);
+insert into t (id,a) values (159,49);
+insert into t (id,a) values (159,50);
+insert into t (id,a) values (159,51);
+insert into t (id,a) values (159,52);
+insert into t (id,a) values (159,53);
+insert into t (id,a) values (159,54);
+insert into t (id,a) values (159,55);
+insert into t (id,a) values (159,56);
+insert into t (id,a) values (159,57);
+insert into t (id,a) values (159,58);
+insert into t (id,a) values (159,59);
+insert into t (id,a) values (159,60);
+insert into t (id,a) values (159,61);
+insert into t (id,a) values (159,62);
+insert into t (id,a) values (159,63);
+insert into t (id,a) values (159,64);
+insert into t (id,a) values (159,65);
+insert into t (id,a) values (159,66);
+insert into t (id,a) values (159,67);
+insert into t (id,a) values (159,68);
+insert into t (id,a) values (159,69);
+insert into t (id,a) values (159,70);
+insert into t (id,a) values (159,71);
+insert into t (id,a) values (159,72);
+insert into t (id,a) values (159,73);
+insert into t (id,a) values (159,74);
+insert into t (id,a) values (159,75);
+insert into t (id,a) values (159,76);
+insert into t (id,a) values (159,77);
+insert into t (id,a) values (159,78);
+insert into t (id,a) values (159,79);
+insert into t (id,a) values (159,80);
+insert into t (id,a) values (159,81);
+insert into t (id,a) values (159,82);
+insert into t (id,a) values (159,83);
+insert into t (id,a) values (159,84);
+insert into t (id,a) values (159,85);
+insert into t (id,a) values (159,86);
+insert into t (id,a) values (159,87);
+insert into t (id,a) values (159,88);
+insert into t (id,a) values (159,89);
+insert into t (id,a) values (159,90);
+insert into t (id,a) values (159,91);
+insert into t (id,a) values (159,92);
+insert into t (id,a) values (159,93);
+insert into t (id,a) values (159,94);
+insert into t (id,a) values (159,95);
+insert into t (id,a) values (159,96);
+insert into t (id,a) values (159,97);
+insert into t (id,a) values (159,98);
+insert into t (id,a) values (159,99);
+insert into t (id,a) values (160,0);
+insert into t (id,a) values (160,1);
+insert into t (id,a) values (160,2);
+insert into t (id,a) values (160,3);
+insert into t (id,a) values (160,4);
+insert into t (id,a) values (160,5);
+insert into t (id,a) values (160,6);
+insert into t (id,a) values (160,7);
+insert into t (id,a) values (160,8);
+insert into t (id,a) values (160,9);
+insert into t (id,a) values (160,10);
+insert into t (id,a) values (160,11);
+insert into t (id,a) values (160,12);
+insert into t (id,a) values (160,13);
+insert into t (id,a) values (160,14);
+insert into t (id,a) values (160,15);
+insert into t (id,a) values (160,16);
+insert into t (id,a) values (160,17);
+insert into t (id,a) values (160,18);
+insert into t (id,a) values (160,19);
+insert into t (id,a) values (160,20);
+insert into t (id,a) values (160,21);
+insert into t (id,a) values (160,22);
+insert into t (id,a) values (160,23);
+insert into t (id,a) values (160,24);
+insert into t (id,a) values (160,25);
+insert into t (id,a) values (160,26);
+insert into t (id,a) values (160,27);
+insert into t (id,a) values (160,28);
+insert into t (id,a) values (160,29);
+insert into t (id,a) values (160,30);
+insert into t (id,a) values (160,31);
+insert into t (id,a) values (160,32);
+insert into t (id,a) values (160,33);
+insert into t (id,a) values (160,34);
+insert into t (id,a) values (160,35);
+insert into t (id,a) values (160,36);
+insert into t (id,a) values (160,37);
+insert into t (id,a) values (160,38);
+insert into t (id,a) values (160,39);
+insert into t (id,a) values (160,40);
+insert into t (id,a) values (160,41);
+insert into t (id,a) values (160,42);
+insert into t (id,a) values (160,43);
+insert into t (id,a) values (160,44);
+insert into t (id,a) values (160,45);
+insert into t (id,a) values (160,46);
+insert into t (id,a) values (160,47);
+insert into t (id,a) values (160,48);
+insert into t (id,a) values (160,49);
+insert into t (id,a) values (160,50);
+insert into t (id,a) values (160,51);
+insert into t (id,a) values (160,52);
+insert into t (id,a) values (160,53);
+insert into t (id,a) values (160,54);
+insert into t (id,a) values (160,55);
+insert into t (id,a) values (160,56);
+insert into t (id,a) values (160,57);
+insert into t (id,a) values (160,58);
+insert into t (id,a) values (160,59);
+insert into t (id,a) values (160,60);
+insert into t (id,a) values (160,61);
+insert into t (id,a) values (160,62);
+insert into t (id,a) values (160,63);
+insert into t (id,a) values (160,64);
+insert into t (id,a) values (160,65);
+insert into t (id,a) values (160,66);
+insert into t (id,a) values (160,67);
+insert into t (id,a) values (160,68);
+insert into t (id,a) values (160,69);
+insert into t (id,a) values (160,70);
+insert into t (id,a) values (160,71);
+insert into t (id,a) values (160,72);
+insert into t (id,a) values (160,73);
+insert into t (id,a) values (160,74);
+insert into t (id,a) values (160,75);
+insert into t (id,a) values (160,76);
+insert into t (id,a) values (160,77);
+insert into t (id,a) values (160,78);
+insert into t (id,a) values (160,79);
+insert into t (id,a) values (160,80);
+insert into t (id,a) values (160,81);
+insert into t (id,a) values (160,82);
+insert into t (id,a) values (160,83);
+insert into t (id,a) values (160,84);
+insert into t (id,a) values (160,85);
+insert into t (id,a) values (160,86);
+insert into t (id,a) values (160,87);
+insert into t (id,a) values (160,88);
+insert into t (id,a) values (160,89);
+insert into t (id,a) values (160,90);
+insert into t (id,a) values (160,91);
+insert into t (id,a) values (160,92);
+insert into t (id,a) values (160,93);
+insert into t (id,a) values (160,94);
+insert into t (id,a) values (160,95);
+insert into t (id,a) values (160,96);
+insert into t (id,a) values (160,97);
+insert into t (id,a) values (160,98);
+insert into t (id,a) values (160,99);
+insert into t (id,a) values (161,0);
+insert into t (id,a) values (161,1);
+insert into t (id,a) values (161,2);
+insert into t (id,a) values (161,3);
+insert into t (id,a) values (161,4);
+insert into t (id,a) values (161,5);
+insert into t (id,a) values (161,6);
+insert into t (id,a) values (161,7);
+insert into t (id,a) values (161,8);
+insert into t (id,a) values (161,9);
+insert into t (id,a) values (161,10);
+insert into t (id,a) values (161,11);
+insert into t (id,a) values (161,12);
+insert into t (id,a) values (161,13);
+insert into t (id,a) values (161,14);
+insert into t (id,a) values (161,15);
+insert into t (id,a) values (161,16);
+insert into t (id,a) values (161,17);
+insert into t (id,a) values (161,18);
+insert into t (id,a) values (161,19);
+insert into t (id,a) values (161,20);
+insert into t (id,a) values (161,21);
+insert into t (id,a) values (161,22);
+insert into t (id,a) values (161,23);
+insert into t (id,a) values (161,24);
+insert into t (id,a) values (161,25);
+insert into t (id,a) values (161,26);
+insert into t (id,a) values (161,27);
+insert into t (id,a) values (161,28);
+insert into t (id,a) values (161,29);
+insert into t (id,a) values (161,30);
+insert into t (id,a) values (161,31);
+insert into t (id,a) values (161,32);
+insert into t (id,a) values (161,33);
+insert into t (id,a) values (161,34);
+insert into t (id,a) values (161,35);
+insert into t (id,a) values (161,36);
+insert into t (id,a) values (161,37);
+insert into t (id,a) values (161,38);
+insert into t (id,a) values (161,39);
+insert into t (id,a) values (161,40);
+insert into t (id,a) values (161,41);
+insert into t (id,a) values (161,42);
+insert into t (id,a) values (161,43);
+insert into t (id,a) values (161,44);
+insert into t (id,a) values (161,45);
+insert into t (id,a) values (161,46);
+insert into t (id,a) values (161,47);
+insert into t (id,a) values (161,48);
+insert into t (id,a) values (161,49);
+insert into t (id,a) values (161,50);
+insert into t (id,a) values (161,51);
+insert into t (id,a) values (161,52);
+insert into t (id,a) values (161,53);
+insert into t (id,a) values (161,54);
+insert into t (id,a) values (161,55);
+insert into t (id,a) values (161,56);
+insert into t (id,a) values (161,57);
+insert into t (id,a) values (161,58);
+insert into t (id,a) values (161,59);
+insert into t (id,a) values (161,60);
+insert into t (id,a) values (161,61);
+insert into t (id,a) values (161,62);
+insert into t (id,a) values (161,63);
+insert into t (id,a) values (161,64);
+insert into t (id,a) values (161,65);
+insert into t (id,a) values (161,66);
+insert into t (id,a) values (161,67);
+insert into t (id,a) values (161,68);
+insert into t (id,a) values (161,69);
+insert into t (id,a) values (161,70);
+insert into t (id,a) values (161,71);
+insert into t (id,a) values (161,72);
+insert into t (id,a) values (161,73);
+insert into t (id,a) values (161,74);
+insert into t (id,a) values (161,75);
+insert into t (id,a) values (161,76);
+insert into t (id,a) values (161,77);
+insert into t (id,a) values (161,78);
+insert into t (id,a) values (161,79);
+insert into t (id,a) values (161,80);
+insert into t (id,a) values (161,81);
+insert into t (id,a) values (161,82);
+insert into t (id,a) values (161,83);
+insert into t (id,a) values (161,84);
+insert into t (id,a) values (161,85);
+insert into t (id,a) values (161,86);
+insert into t (id,a) values (161,87);
+insert into t (id,a) values (161,88);
+insert into t (id,a) values (161,89);
+insert into t (id,a) values (161,90);
+insert into t (id,a) values (161,91);
+insert into t (id,a) values (161,92);
+insert into t (id,a) values (161,93);
+insert into t (id,a) values (161,94);
+insert into t (id,a) values (161,95);
+insert into t (id,a) values (161,96);
+insert into t (id,a) values (161,97);
+insert into t (id,a) values (161,98);
+insert into t (id,a) values (161,99);
+insert into t (id,a) values (162,0);
+insert into t (id,a) values (162,1);
+insert into t (id,a) values (162,2);
+insert into t (id,a) values (162,3);
+insert into t (id,a) values (162,4);
+insert into t (id,a) values (162,5);
+insert into t (id,a) values (162,6);
+insert into t (id,a) values (162,7);
+insert into t (id,a) values (162,8);
+insert into t (id,a) values (162,9);
+insert into t (id,a) values (162,10);
+insert into t (id,a) values (162,11);
+insert into t (id,a) values (162,12);
+insert into t (id,a) values (162,13);
+insert into t (id,a) values (162,14);
+insert into t (id,a) values (162,15);
+insert into t (id,a) values (162,16);
+insert into t (id,a) values (162,17);
+insert into t (id,a) values (162,18);
+insert into t (id,a) values (162,19);
+insert into t (id,a) values (162,20);
+insert into t (id,a) values (162,21);
+insert into t (id,a) values (162,22);
+insert into t (id,a) values (162,23);
+insert into t (id,a) values (162,24);
+insert into t (id,a) values (162,25);
+insert into t (id,a) values (162,26);
+insert into t (id,a) values (162,27);
+insert into t (id,a) values (162,28);
+insert into t (id,a) values (162,29);
+insert into t (id,a) values (162,30);
+insert into t (id,a) values (162,31);
+insert into t (id,a) values (162,32);
+insert into t (id,a) values (162,33);
+insert into t (id,a) values (162,34);
+insert into t (id,a) values (162,35);
+insert into t (id,a) values (162,36);
+insert into t (id,a) values (162,37);
+insert into t (id,a) values (162,38);
+insert into t (id,a) values (162,39);
+insert into t (id,a) values (162,40);
+insert into t (id,a) values (162,41);
+insert into t (id,a) values (162,42);
+insert into t (id,a) values (162,43);
+insert into t (id,a) values (162,44);
+insert into t (id,a) values (162,45);
+insert into t (id,a) values (162,46);
+insert into t (id,a) values (162,47);
+insert into t (id,a) values (162,48);
+insert into t (id,a) values (162,49);
+insert into t (id,a) values (162,50);
+insert into t (id,a) values (162,51);
+insert into t (id,a) values (162,52);
+insert into t (id,a) values (162,53);
+insert into t (id,a) values (162,54);
+insert into t (id,a) values (162,55);
+insert into t (id,a) values (162,56);
+insert into t (id,a) values (162,57);
+insert into t (id,a) values (162,58);
+insert into t (id,a) values (162,59);
+insert into t (id,a) values (162,60);
+insert into t (id,a) values (162,61);
+insert into t (id,a) values (162,62);
+insert into t (id,a) values (162,63);
+insert into t (id,a) values (162,64);
+insert into t (id,a) values (162,65);
+insert into t (id,a) values (162,66);
+insert into t (id,a) values (162,67);
+insert into t (id,a) values (162,68);
+insert into t (id,a) values (162,69);
+insert into t (id,a) values (162,70);
+insert into t (id,a) values (162,71);
+insert into t (id,a) values (162,72);
+insert into t (id,a) values (162,73);
+insert into t (id,a) values (162,74);
+insert into t (id,a) values (162,75);
+insert into t (id,a) values (162,76);
+insert into t (id,a) values (162,77);
+insert into t (id,a) values (162,78);
+insert into t (id,a) values (162,79);
+insert into t (id,a) values (162,80);
+insert into t (id,a) values (162,81);
+insert into t (id,a) values (162,82);
+insert into t (id,a) values (162,83);
+insert into t (id,a) values (162,84);
+insert into t (id,a) values (162,85);
+insert into t (id,a) values (162,86);
+insert into t (id,a) values (162,87);
+insert into t (id,a) values (162,88);
+insert into t (id,a) values (162,89);
+insert into t (id,a) values (162,90);
+insert into t (id,a) values (162,91);
+insert into t (id,a) values (162,92);
+insert into t (id,a) values (162,93);
+insert into t (id,a) values (162,94);
+insert into t (id,a) values (162,95);
+insert into t (id,a) values (162,96);
+insert into t (id,a) values (162,97);
+insert into t (id,a) values (162,98);
+insert into t (id,a) values (162,99);
+insert into t (id,a) values (163,0);
+insert into t (id,a) values (163,1);
+insert into t (id,a) values (163,2);
+insert into t (id,a) values (163,3);
+insert into t (id,a) values (163,4);
+insert into t (id,a) values (163,5);
+insert into t (id,a) values (163,6);
+insert into t (id,a) values (163,7);
+insert into t (id,a) values (163,8);
+insert into t (id,a) values (163,9);
+insert into t (id,a) values (163,10);
+insert into t (id,a) values (163,11);
+insert into t (id,a) values (163,12);
+insert into t (id,a) values (163,13);
+insert into t (id,a) values (163,14);
+insert into t (id,a) values (163,15);
+insert into t (id,a) values (163,16);
+insert into t (id,a) values (163,17);
+insert into t (id,a) values (163,18);
+insert into t (id,a) values (163,19);
+insert into t (id,a) values (163,20);
+insert into t (id,a) values (163,21);
+insert into t (id,a) values (163,22);
+insert into t (id,a) values (163,23);
+insert into t (id,a) values (163,24);
+insert into t (id,a) values (163,25);
+insert into t (id,a) values (163,26);
+insert into t (id,a) values (163,27);
+insert into t (id,a) values (163,28);
+insert into t (id,a) values (163,29);
+insert into t (id,a) values (163,30);
+insert into t (id,a) values (163,31);
+insert into t (id,a) values (163,32);
+insert into t (id,a) values (163,33);
+insert into t (id,a) values (163,34);
+insert into t (id,a) values (163,35);
+insert into t (id,a) values (163,36);
+insert into t (id,a) values (163,37);
+insert into t (id,a) values (163,38);
+insert into t (id,a) values (163,39);
+insert into t (id,a) values (163,40);
+insert into t (id,a) values (163,41);
+insert into t (id,a) values (163,42);
+insert into t (id,a) values (163,43);
+insert into t (id,a) values (163,44);
+insert into t (id,a) values (163,45);
+insert into t (id,a) values (163,46);
+insert into t (id,a) values (163,47);
+insert into t (id,a) values (163,48);
+insert into t (id,a) values (163,49);
+insert into t (id,a) values (163,50);
+insert into t (id,a) values (163,51);
+insert into t (id,a) values (163,52);
+insert into t (id,a) values (163,53);
+insert into t (id,a) values (163,54);
+insert into t (id,a) values (163,55);
+insert into t (id,a) values (163,56);
+insert into t (id,a) values (163,57);
+insert into t (id,a) values (163,58);
+insert into t (id,a) values (163,59);
+insert into t (id,a) values (163,60);
+insert into t (id,a) values (163,61);
+insert into t (id,a) values (163,62);
+insert into t (id,a) values (163,63);
+insert into t (id,a) values (163,64);
+insert into t (id,a) values (163,65);
+insert into t (id,a) values (163,66);
+insert into t (id,a) values (163,67);
+insert into t (id,a) values (163,68);
+insert into t (id,a) values (163,69);
+insert into t (id,a) values (163,70);
+insert into t (id,a) values (163,71);
+insert into t (id,a) values (163,72);
+insert into t (id,a) values (163,73);
+insert into t (id,a) values (163,74);
+insert into t (id,a) values (163,75);
+insert into t (id,a) values (163,76);
+insert into t (id,a) values (163,77);
+insert into t (id,a) values (163,78);
+insert into t (id,a) values (163,79);
+insert into t (id,a) values (163,80);
+insert into t (id,a) values (163,81);
+insert into t (id,a) values (163,82);
+insert into t (id,a) values (163,83);
+insert into t (id,a) values (163,84);
+insert into t (id,a) values (163,85);
+insert into t (id,a) values (163,86);
+insert into t (id,a) values (163,87);
+insert into t (id,a) values (163,88);
+insert into t (id,a) values (163,89);
+insert into t (id,a) values (163,90);
+insert into t (id,a) values (163,91);
+insert into t (id,a) values (163,92);
+insert into t (id,a) values (163,93);
+insert into t (id,a) values (163,94);
+insert into t (id,a) values (163,95);
+insert into t (id,a) values (163,96);
+insert into t (id,a) values (163,97);
+insert into t (id,a) values (163,98);
+insert into t (id,a) values (163,99);
+insert into t (id,a) values (164,0);
+insert into t (id,a) values (164,1);
+insert into t (id,a) values (164,2);
+insert into t (id,a) values (164,3);
+insert into t (id,a) values (164,4);
+insert into t (id,a) values (164,5);
+insert into t (id,a) values (164,6);
+insert into t (id,a) values (164,7);
+insert into t (id,a) values (164,8);
+insert into t (id,a) values (164,9);
+insert into t (id,a) values (164,10);
+insert into t (id,a) values (164,11);
+insert into t (id,a) values (164,12);
+insert into t (id,a) values (164,13);
+insert into t (id,a) values (164,14);
+insert into t (id,a) values (164,15);
+insert into t (id,a) values (164,16);
+insert into t (id,a) values (164,17);
+insert into t (id,a) values (164,18);
+insert into t (id,a) values (164,19);
+insert into t (id,a) values (164,20);
+insert into t (id,a) values (164,21);
+insert into t (id,a) values (164,22);
+insert into t (id,a) values (164,23);
+insert into t (id,a) values (164,24);
+insert into t (id,a) values (164,25);
+insert into t (id,a) values (164,26);
+insert into t (id,a) values (164,27);
+insert into t (id,a) values (164,28);
+insert into t (id,a) values (164,29);
+insert into t (id,a) values (164,30);
+insert into t (id,a) values (164,31);
+insert into t (id,a) values (164,32);
+insert into t (id,a) values (164,33);
+insert into t (id,a) values (164,34);
+insert into t (id,a) values (164,35);
+insert into t (id,a) values (164,36);
+insert into t (id,a) values (164,37);
+insert into t (id,a) values (164,38);
+insert into t (id,a) values (164,39);
+insert into t (id,a) values (164,40);
+insert into t (id,a) values (164,41);
+insert into t (id,a) values (164,42);
+insert into t (id,a) values (164,43);
+insert into t (id,a) values (164,44);
+insert into t (id,a) values (164,45);
+insert into t (id,a) values (164,46);
+insert into t (id,a) values (164,47);
+insert into t (id,a) values (164,48);
+insert into t (id,a) values (164,49);
+insert into t (id,a) values (164,50);
+insert into t (id,a) values (164,51);
+insert into t (id,a) values (164,52);
+insert into t (id,a) values (164,53);
+insert into t (id,a) values (164,54);
+insert into t (id,a) values (164,55);
+insert into t (id,a) values (164,56);
+insert into t (id,a) values (164,57);
+insert into t (id,a) values (164,58);
+insert into t (id,a) values (164,59);
+insert into t (id,a) values (164,60);
+insert into t (id,a) values (164,61);
+insert into t (id,a) values (164,62);
+insert into t (id,a) values (164,63);
+insert into t (id,a) values (164,64);
+insert into t (id,a) values (164,65);
+insert into t (id,a) values (164,66);
+insert into t (id,a) values (164,67);
+insert into t (id,a) values (164,68);
+insert into t (id,a) values (164,69);
+insert into t (id,a) values (164,70);
+insert into t (id,a) values (164,71);
+insert into t (id,a) values (164,72);
+insert into t (id,a) values (164,73);
+insert into t (id,a) values (164,74);
+insert into t (id,a) values (164,75);
+insert into t (id,a) values (164,76);
+insert into t (id,a) values (164,77);
+insert into t (id,a) values (164,78);
+insert into t (id,a) values (164,79);
+insert into t (id,a) values (164,80);
+insert into t (id,a) values (164,81);
+insert into t (id,a) values (164,82);
+insert into t (id,a) values (164,83);
+insert into t (id,a) values (164,84);
+insert into t (id,a) values (164,85);
+insert into t (id,a) values (164,86);
+insert into t (id,a) values (164,87);
+insert into t (id,a) values (164,88);
+insert into t (id,a) values (164,89);
+insert into t (id,a) values (164,90);
+insert into t (id,a) values (164,91);
+insert into t (id,a) values (164,92);
+insert into t (id,a) values (164,93);
+insert into t (id,a) values (164,94);
+insert into t (id,a) values (164,95);
+insert into t (id,a) values (164,96);
+insert into t (id,a) values (164,97);
+insert into t (id,a) values (164,98);
+insert into t (id,a) values (164,99);
+insert into t (id,a) values (165,0);
+insert into t (id,a) values (165,1);
+insert into t (id,a) values (165,2);
+insert into t (id,a) values (165,3);
+insert into t (id,a) values (165,4);
+insert into t (id,a) values (165,5);
+insert into t (id,a) values (165,6);
+insert into t (id,a) values (165,7);
+insert into t (id,a) values (165,8);
+insert into t (id,a) values (165,9);
+insert into t (id,a) values (165,10);
+insert into t (id,a) values (165,11);
+insert into t (id,a) values (165,12);
+insert into t (id,a) values (165,13);
+insert into t (id,a) values (165,14);
+insert into t (id,a) values (165,15);
+insert into t (id,a) values (165,16);
+insert into t (id,a) values (165,17);
+insert into t (id,a) values (165,18);
+insert into t (id,a) values (165,19);
+insert into t (id,a) values (165,20);
+insert into t (id,a) values (165,21);
+insert into t (id,a) values (165,22);
+insert into t (id,a) values (165,23);
+insert into t (id,a) values (165,24);
+insert into t (id,a) values (165,25);
+insert into t (id,a) values (165,26);
+insert into t (id,a) values (165,27);
+insert into t (id,a) values (165,28);
+insert into t (id,a) values (165,29);
+insert into t (id,a) values (165,30);
+insert into t (id,a) values (165,31);
+insert into t (id,a) values (165,32);
+insert into t (id,a) values (165,33);
+insert into t (id,a) values (165,34);
+insert into t (id,a) values (165,35);
+insert into t (id,a) values (165,36);
+insert into t (id,a) values (165,37);
+insert into t (id,a) values (165,38);
+insert into t (id,a) values (165,39);
+insert into t (id,a) values (165,40);
+insert into t (id,a) values (165,41);
+insert into t (id,a) values (165,42);
+insert into t (id,a) values (165,43);
+insert into t (id,a) values (165,44);
+insert into t (id,a) values (165,45);
+insert into t (id,a) values (165,46);
+insert into t (id,a) values (165,47);
+insert into t (id,a) values (165,48);
+insert into t (id,a) values (165,49);
+insert into t (id,a) values (165,50);
+insert into t (id,a) values (165,51);
+insert into t (id,a) values (165,52);
+insert into t (id,a) values (165,53);
+insert into t (id,a) values (165,54);
+insert into t (id,a) values (165,55);
+insert into t (id,a) values (165,56);
+insert into t (id,a) values (165,57);
+insert into t (id,a) values (165,58);
+insert into t (id,a) values (165,59);
+insert into t (id,a) values (165,60);
+insert into t (id,a) values (165,61);
+insert into t (id,a) values (165,62);
+insert into t (id,a) values (165,63);
+insert into t (id,a) values (165,64);
+insert into t (id,a) values (165,65);
+insert into t (id,a) values (165,66);
+insert into t (id,a) values (165,67);
+insert into t (id,a) values (165,68);
+insert into t (id,a) values (165,69);
+insert into t (id,a) values (165,70);
+insert into t (id,a) values (165,71);
+insert into t (id,a) values (165,72);
+insert into t (id,a) values (165,73);
+insert into t (id,a) values (165,74);
+insert into t (id,a) values (165,75);
+insert into t (id,a) values (165,76);
+insert into t (id,a) values (165,77);
+insert into t (id,a) values (165,78);
+insert into t (id,a) values (165,79);
+insert into t (id,a) values (165,80);
+insert into t (id,a) values (165,81);
+insert into t (id,a) values (165,82);
+insert into t (id,a) values (165,83);
+insert into t (id,a) values (165,84);
+insert into t (id,a) values (165,85);
+insert into t (id,a) values (165,86);
+insert into t (id,a) values (165,87);
+insert into t (id,a) values (165,88);
+insert into t (id,a) values (165,89);
+insert into t (id,a) values (165,90);
+insert into t (id,a) values (165,91);
+insert into t (id,a) values (165,92);
+insert into t (id,a) values (165,93);
+insert into t (id,a) values (165,94);
+insert into t (id,a) values (165,95);
+insert into t (id,a) values (165,96);
+insert into t (id,a) values (165,97);
+insert into t (id,a) values (165,98);
+insert into t (id,a) values (165,99);
+insert into t (id,a) values (166,0);
+insert into t (id,a) values (166,1);
+insert into t (id,a) values (166,2);
+insert into t (id,a) values (166,3);
+insert into t (id,a) values (166,4);
+insert into t (id,a) values (166,5);
+insert into t (id,a) values (166,6);
+insert into t (id,a) values (166,7);
+insert into t (id,a) values (166,8);
+insert into t (id,a) values (166,9);
+insert into t (id,a) values (166,10);
+insert into t (id,a) values (166,11);
+insert into t (id,a) values (166,12);
+insert into t (id,a) values (166,13);
+insert into t (id,a) values (166,14);
+insert into t (id,a) values (166,15);
+insert into t (id,a) values (166,16);
+insert into t (id,a) values (166,17);
+insert into t (id,a) values (166,18);
+insert into t (id,a) values (166,19);
+insert into t (id,a) values (166,20);
+insert into t (id,a) values (166,21);
+insert into t (id,a) values (166,22);
+insert into t (id,a) values (166,23);
+insert into t (id,a) values (166,24);
+insert into t (id,a) values (166,25);
+insert into t (id,a) values (166,26);
+insert into t (id,a) values (166,27);
+insert into t (id,a) values (166,28);
+insert into t (id,a) values (166,29);
+insert into t (id,a) values (166,30);
+insert into t (id,a) values (166,31);
+insert into t (id,a) values (166,32);
+insert into t (id,a) values (166,33);
+insert into t (id,a) values (166,34);
+insert into t (id,a) values (166,35);
+insert into t (id,a) values (166,36);
+insert into t (id,a) values (166,37);
+insert into t (id,a) values (166,38);
+insert into t (id,a) values (166,39);
+insert into t (id,a) values (166,40);
+insert into t (id,a) values (166,41);
+insert into t (id,a) values (166,42);
+insert into t (id,a) values (166,43);
+insert into t (id,a) values (166,44);
+insert into t (id,a) values (166,45);
+insert into t (id,a) values (166,46);
+insert into t (id,a) values (166,47);
+insert into t (id,a) values (166,48);
+insert into t (id,a) values (166,49);
+insert into t (id,a) values (166,50);
+insert into t (id,a) values (166,51);
+insert into t (id,a) values (166,52);
+insert into t (id,a) values (166,53);
+insert into t (id,a) values (166,54);
+insert into t (id,a) values (166,55);
+insert into t (id,a) values (166,56);
+insert into t (id,a) values (166,57);
+insert into t (id,a) values (166,58);
+insert into t (id,a) values (166,59);
+insert into t (id,a) values (166,60);
+insert into t (id,a) values (166,61);
+insert into t (id,a) values (166,62);
+insert into t (id,a) values (166,63);
+insert into t (id,a) values (166,64);
+insert into t (id,a) values (166,65);
+insert into t (id,a) values (166,66);
+insert into t (id,a) values (166,67);
+insert into t (id,a) values (166,68);
+insert into t (id,a) values (166,69);
+insert into t (id,a) values (166,70);
+insert into t (id,a) values (166,71);
+insert into t (id,a) values (166,72);
+insert into t (id,a) values (166,73);
+insert into t (id,a) values (166,74);
+insert into t (id,a) values (166,75);
+insert into t (id,a) values (166,76);
+insert into t (id,a) values (166,77);
+insert into t (id,a) values (166,78);
+insert into t (id,a) values (166,79);
+insert into t (id,a) values (166,80);
+insert into t (id,a) values (166,81);
+insert into t (id,a) values (166,82);
+insert into t (id,a) values (166,83);
+insert into t (id,a) values (166,84);
+insert into t (id,a) values (166,85);
+insert into t (id,a) values (166,86);
+insert into t (id,a) values (166,87);
+insert into t (id,a) values (166,88);
+insert into t (id,a) values (166,89);
+insert into t (id,a) values (166,90);
+insert into t (id,a) values (166,91);
+insert into t (id,a) values (166,92);
+insert into t (id,a) values (166,93);
+insert into t (id,a) values (166,94);
+insert into t (id,a) values (166,95);
+insert into t (id,a) values (166,96);
+insert into t (id,a) values (166,97);
+insert into t (id,a) values (166,98);
+insert into t (id,a) values (166,99);
+insert into t (id,a) values (167,0);
+insert into t (id,a) values (167,1);
+insert into t (id,a) values (167,2);
+insert into t (id,a) values (167,3);
+insert into t (id,a) values (167,4);
+insert into t (id,a) values (167,5);
+insert into t (id,a) values (167,6);
+insert into t (id,a) values (167,7);
+insert into t (id,a) values (167,8);
+insert into t (id,a) values (167,9);
+insert into t (id,a) values (167,10);
+insert into t (id,a) values (167,11);
+insert into t (id,a) values (167,12);
+insert into t (id,a) values (167,13);
+insert into t (id,a) values (167,14);
+insert into t (id,a) values (167,15);
+insert into t (id,a) values (167,16);
+insert into t (id,a) values (167,17);
+insert into t (id,a) values (167,18);
+insert into t (id,a) values (167,19);
+insert into t (id,a) values (167,20);
+insert into t (id,a) values (167,21);
+insert into t (id,a) values (167,22);
+insert into t (id,a) values (167,23);
+insert into t (id,a) values (167,24);
+insert into t (id,a) values (167,25);
+insert into t (id,a) values (167,26);
+insert into t (id,a) values (167,27);
+insert into t (id,a) values (167,28);
+insert into t (id,a) values (167,29);
+insert into t (id,a) values (167,30);
+insert into t (id,a) values (167,31);
+insert into t (id,a) values (167,32);
+insert into t (id,a) values (167,33);
+insert into t (id,a) values (167,34);
+insert into t (id,a) values (167,35);
+insert into t (id,a) values (167,36);
+insert into t (id,a) values (167,37);
+insert into t (id,a) values (167,38);
+insert into t (id,a) values (167,39);
+insert into t (id,a) values (167,40);
+insert into t (id,a) values (167,41);
+insert into t (id,a) values (167,42);
+insert into t (id,a) values (167,43);
+insert into t (id,a) values (167,44);
+insert into t (id,a) values (167,45);
+insert into t (id,a) values (167,46);
+insert into t (id,a) values (167,47);
+insert into t (id,a) values (167,48);
+insert into t (id,a) values (167,49);
+insert into t (id,a) values (167,50);
+insert into t (id,a) values (167,51);
+insert into t (id,a) values (167,52);
+insert into t (id,a) values (167,53);
+insert into t (id,a) values (167,54);
+insert into t (id,a) values (167,55);
+insert into t (id,a) values (167,56);
+insert into t (id,a) values (167,57);
+insert into t (id,a) values (167,58);
+insert into t (id,a) values (167,59);
+insert into t (id,a) values (167,60);
+insert into t (id,a) values (167,61);
+insert into t (id,a) values (167,62);
+insert into t (id,a) values (167,63);
+insert into t (id,a) values (167,64);
+insert into t (id,a) values (167,65);
+insert into t (id,a) values (167,66);
+insert into t (id,a) values (167,67);
+insert into t (id,a) values (167,68);
+insert into t (id,a) values (167,69);
+insert into t (id,a) values (167,70);
+insert into t (id,a) values (167,71);
+insert into t (id,a) values (167,72);
+insert into t (id,a) values (167,73);
+insert into t (id,a) values (167,74);
+insert into t (id,a) values (167,75);
+insert into t (id,a) values (167,76);
+insert into t (id,a) values (167,77);
+insert into t (id,a) values (167,78);
+insert into t (id,a) values (167,79);
+insert into t (id,a) values (167,80);
+insert into t (id,a) values (167,81);
+insert into t (id,a) values (167,82);
+insert into t (id,a) values (167,83);
+insert into t (id,a) values (167,84);
+insert into t (id,a) values (167,85);
+insert into t (id,a) values (167,86);
+insert into t (id,a) values (167,87);
+insert into t (id,a) values (167,88);
+insert into t (id,a) values (167,89);
+insert into t (id,a) values (167,90);
+insert into t (id,a) values (167,91);
+insert into t (id,a) values (167,92);
+insert into t (id,a) values (167,93);
+insert into t (id,a) values (167,94);
+insert into t (id,a) values (167,95);
+insert into t (id,a) values (167,96);
+insert into t (id,a) values (167,97);
+insert into t (id,a) values (167,98);
+insert into t (id,a) values (167,99);
+insert into t (id,a) values (168,0);
+insert into t (id,a) values (168,1);
+insert into t (id,a) values (168,2);
+insert into t (id,a) values (168,3);
+insert into t (id,a) values (168,4);
+insert into t (id,a) values (168,5);
+insert into t (id,a) values (168,6);
+insert into t (id,a) values (168,7);
+insert into t (id,a) values (168,8);
+insert into t (id,a) values (168,9);
+insert into t (id,a) values (168,10);
+insert into t (id,a) values (168,11);
+insert into t (id,a) values (168,12);
+insert into t (id,a) values (168,13);
+insert into t (id,a) values (168,14);
+insert into t (id,a) values (168,15);
+insert into t (id,a) values (168,16);
+insert into t (id,a) values (168,17);
+insert into t (id,a) values (168,18);
+insert into t (id,a) values (168,19);
+insert into t (id,a) values (168,20);
+insert into t (id,a) values (168,21);
+insert into t (id,a) values (168,22);
+insert into t (id,a) values (168,23);
+insert into t (id,a) values (168,24);
+insert into t (id,a) values (168,25);
+insert into t (id,a) values (168,26);
+insert into t (id,a) values (168,27);
+insert into t (id,a) values (168,28);
+insert into t (id,a) values (168,29);
+insert into t (id,a) values (168,30);
+insert into t (id,a) values (168,31);
+insert into t (id,a) values (168,32);
+insert into t (id,a) values (168,33);
+insert into t (id,a) values (168,34);
+insert into t (id,a) values (168,35);
+insert into t (id,a) values (168,36);
+insert into t (id,a) values (168,37);
+insert into t (id,a) values (168,38);
+insert into t (id,a) values (168,39);
+insert into t (id,a) values (168,40);
+insert into t (id,a) values (168,41);
+insert into t (id,a) values (168,42);
+insert into t (id,a) values (168,43);
+insert into t (id,a) values (168,44);
+insert into t (id,a) values (168,45);
+insert into t (id,a) values (168,46);
+insert into t (id,a) values (168,47);
+insert into t (id,a) values (168,48);
+insert into t (id,a) values (168,49);
+insert into t (id,a) values (168,50);
+insert into t (id,a) values (168,51);
+insert into t (id,a) values (168,52);
+insert into t (id,a) values (168,53);
+insert into t (id,a) values (168,54);
+insert into t (id,a) values (168,55);
+insert into t (id,a) values (168,56);
+insert into t (id,a) values (168,57);
+insert into t (id,a) values (168,58);
+insert into t (id,a) values (168,59);
+insert into t (id,a) values (168,60);
+insert into t (id,a) values (168,61);
+insert into t (id,a) values (168,62);
+insert into t (id,a) values (168,63);
+insert into t (id,a) values (168,64);
+insert into t (id,a) values (168,65);
+insert into t (id,a) values (168,66);
+insert into t (id,a) values (168,67);
+insert into t (id,a) values (168,68);
+insert into t (id,a) values (168,69);
+insert into t (id,a) values (168,70);
+insert into t (id,a) values (168,71);
+insert into t (id,a) values (168,72);
+insert into t (id,a) values (168,73);
+insert into t (id,a) values (168,74);
+insert into t (id,a) values (168,75);
+insert into t (id,a) values (168,76);
+insert into t (id,a) values (168,77);
+insert into t (id,a) values (168,78);
+insert into t (id,a) values (168,79);
+insert into t (id,a) values (168,80);
+insert into t (id,a) values (168,81);
+insert into t (id,a) values (168,82);
+insert into t (id,a) values (168,83);
+insert into t (id,a) values (168,84);
+insert into t (id,a) values (168,85);
+insert into t (id,a) values (168,86);
+insert into t (id,a) values (168,87);
+insert into t (id,a) values (168,88);
+insert into t (id,a) values (168,89);
+insert into t (id,a) values (168,90);
+insert into t (id,a) values (168,91);
+insert into t (id,a) values (168,92);
+insert into t (id,a) values (168,93);
+insert into t (id,a) values (168,94);
+insert into t (id,a) values (168,95);
+insert into t (id,a) values (168,96);
+insert into t (id,a) values (168,97);
+insert into t (id,a) values (168,98);
+insert into t (id,a) values (168,99);
+insert into t (id,a) values (169,0);
+insert into t (id,a) values (169,1);
+insert into t (id,a) values (169,2);
+insert into t (id,a) values (169,3);
+insert into t (id,a) values (169,4);
+insert into t (id,a) values (169,5);
+insert into t (id,a) values (169,6);
+insert into t (id,a) values (169,7);
+insert into t (id,a) values (169,8);
+insert into t (id,a) values (169,9);
+insert into t (id,a) values (169,10);
+insert into t (id,a) values (169,11);
+insert into t (id,a) values (169,12);
+insert into t (id,a) values (169,13);
+insert into t (id,a) values (169,14);
+insert into t (id,a) values (169,15);
+insert into t (id,a) values (169,16);
+insert into t (id,a) values (169,17);
+insert into t (id,a) values (169,18);
+insert into t (id,a) values (169,19);
+insert into t (id,a) values (169,20);
+insert into t (id,a) values (169,21);
+insert into t (id,a) values (169,22);
+insert into t (id,a) values (169,23);
+insert into t (id,a) values (169,24);
+insert into t (id,a) values (169,25);
+insert into t (id,a) values (169,26);
+insert into t (id,a) values (169,27);
+insert into t (id,a) values (169,28);
+insert into t (id,a) values (169,29);
+insert into t (id,a) values (169,30);
+insert into t (id,a) values (169,31);
+insert into t (id,a) values (169,32);
+insert into t (id,a) values (169,33);
+insert into t (id,a) values (169,34);
+insert into t (id,a) values (169,35);
+insert into t (id,a) values (169,36);
+insert into t (id,a) values (169,37);
+insert into t (id,a) values (169,38);
+insert into t (id,a) values (169,39);
+insert into t (id,a) values (169,40);
+insert into t (id,a) values (169,41);
+insert into t (id,a) values (169,42);
+insert into t (id,a) values (169,43);
+insert into t (id,a) values (169,44);
+insert into t (id,a) values (169,45);
+insert into t (id,a) values (169,46);
+insert into t (id,a) values (169,47);
+insert into t (id,a) values (169,48);
+insert into t (id,a) values (169,49);
+insert into t (id,a) values (169,50);
+insert into t (id,a) values (169,51);
+insert into t (id,a) values (169,52);
+insert into t (id,a) values (169,53);
+insert into t (id,a) values (169,54);
+insert into t (id,a) values (169,55);
+insert into t (id,a) values (169,56);
+insert into t (id,a) values (169,57);
+insert into t (id,a) values (169,58);
+insert into t (id,a) values (169,59);
+insert into t (id,a) values (169,60);
+insert into t (id,a) values (169,61);
+insert into t (id,a) values (169,62);
+insert into t (id,a) values (169,63);
+insert into t (id,a) values (169,64);
+insert into t (id,a) values (169,65);
+insert into t (id,a) values (169,66);
+insert into t (id,a) values (169,67);
+insert into t (id,a) values (169,68);
+insert into t (id,a) values (169,69);
+insert into t (id,a) values (169,70);
+insert into t (id,a) values (169,71);
+insert into t (id,a) values (169,72);
+insert into t (id,a) values (169,73);
+insert into t (id,a) values (169,74);
+insert into t (id,a) values (169,75);
+insert into t (id,a) values (169,76);
+insert into t (id,a) values (169,77);
+insert into t (id,a) values (169,78);
+insert into t (id,a) values (169,79);
+insert into t (id,a) values (169,80);
+insert into t (id,a) values (169,81);
+insert into t (id,a) values (169,82);
+insert into t (id,a) values (169,83);
+insert into t (id,a) values (169,84);
+insert into t (id,a) values (169,85);
+insert into t (id,a) values (169,86);
+insert into t (id,a) values (169,87);
+insert into t (id,a) values (169,88);
+insert into t (id,a) values (169,89);
+insert into t (id,a) values (169,90);
+insert into t (id,a) values (169,91);
+insert into t (id,a) values (169,92);
+insert into t (id,a) values (169,93);
+insert into t (id,a) values (169,94);
+insert into t (id,a) values (169,95);
+insert into t (id,a) values (169,96);
+insert into t (id,a) values (169,97);
+insert into t (id,a) values (169,98);
+insert into t (id,a) values (169,99);
+insert into t (id,a) values (170,0);
+insert into t (id,a) values (170,1);
+insert into t (id,a) values (170,2);
+insert into t (id,a) values (170,3);
+insert into t (id,a) values (170,4);
+insert into t (id,a) values (170,5);
+insert into t (id,a) values (170,6);
+insert into t (id,a) values (170,7);
+insert into t (id,a) values (170,8);
+insert into t (id,a) values (170,9);
+insert into t (id,a) values (170,10);
+insert into t (id,a) values (170,11);
+insert into t (id,a) values (170,12);
+insert into t (id,a) values (170,13);
+insert into t (id,a) values (170,14);
+insert into t (id,a) values (170,15);
+insert into t (id,a) values (170,16);
+insert into t (id,a) values (170,17);
+insert into t (id,a) values (170,18);
+insert into t (id,a) values (170,19);
+insert into t (id,a) values (170,20);
+insert into t (id,a) values (170,21);
+insert into t (id,a) values (170,22);
+insert into t (id,a) values (170,23);
+insert into t (id,a) values (170,24);
+insert into t (id,a) values (170,25);
+insert into t (id,a) values (170,26);
+insert into t (id,a) values (170,27);
+insert into t (id,a) values (170,28);
+insert into t (id,a) values (170,29);
+insert into t (id,a) values (170,30);
+insert into t (id,a) values (170,31);
+insert into t (id,a) values (170,32);
+insert into t (id,a) values (170,33);
+insert into t (id,a) values (170,34);
+insert into t (id,a) values (170,35);
+insert into t (id,a) values (170,36);
+insert into t (id,a) values (170,37);
+insert into t (id,a) values (170,38);
+insert into t (id,a) values (170,39);
+insert into t (id,a) values (170,40);
+insert into t (id,a) values (170,41);
+insert into t (id,a) values (170,42);
+insert into t (id,a) values (170,43);
+insert into t (id,a) values (170,44);
+insert into t (id,a) values (170,45);
+insert into t (id,a) values (170,46);
+insert into t (id,a) values (170,47);
+insert into t (id,a) values (170,48);
+insert into t (id,a) values (170,49);
+insert into t (id,a) values (170,50);
+insert into t (id,a) values (170,51);
+insert into t (id,a) values (170,52);
+insert into t (id,a) values (170,53);
+insert into t (id,a) values (170,54);
+insert into t (id,a) values (170,55);
+insert into t (id,a) values (170,56);
+insert into t (id,a) values (170,57);
+insert into t (id,a) values (170,58);
+insert into t (id,a) values (170,59);
+insert into t (id,a) values (170,60);
+insert into t (id,a) values (170,61);
+insert into t (id,a) values (170,62);
+insert into t (id,a) values (170,63);
+insert into t (id,a) values (170,64);
+insert into t (id,a) values (170,65);
+insert into t (id,a) values (170,66);
+insert into t (id,a) values (170,67);
+insert into t (id,a) values (170,68);
+insert into t (id,a) values (170,69);
+insert into t (id,a) values (170,70);
+insert into t (id,a) values (170,71);
+insert into t (id,a) values (170,72);
+insert into t (id,a) values (170,73);
+insert into t (id,a) values (170,74);
+insert into t (id,a) values (170,75);
+insert into t (id,a) values (170,76);
+insert into t (id,a) values (170,77);
+insert into t (id,a) values (170,78);
+insert into t (id,a) values (170,79);
+insert into t (id,a) values (170,80);
+insert into t (id,a) values (170,81);
+insert into t (id,a) values (170,82);
+insert into t (id,a) values (170,83);
+insert into t (id,a) values (170,84);
+insert into t (id,a) values (170,85);
+insert into t (id,a) values (170,86);
+insert into t (id,a) values (170,87);
+insert into t (id,a) values (170,88);
+insert into t (id,a) values (170,89);
+insert into t (id,a) values (170,90);
+insert into t (id,a) values (170,91);
+insert into t (id,a) values (170,92);
+insert into t (id,a) values (170,93);
+insert into t (id,a) values (170,94);
+insert into t (id,a) values (170,95);
+insert into t (id,a) values (170,96);
+insert into t (id,a) values (170,97);
+insert into t (id,a) values (170,98);
+insert into t (id,a) values (170,99);
+insert into t (id,a) values (171,0);
+insert into t (id,a) values (171,1);
+insert into t (id,a) values (171,2);
+insert into t (id,a) values (171,3);
+insert into t (id,a) values (171,4);
+insert into t (id,a) values (171,5);
+insert into t (id,a) values (171,6);
+insert into t (id,a) values (171,7);
+insert into t (id,a) values (171,8);
+insert into t (id,a) values (171,9);
+insert into t (id,a) values (171,10);
+insert into t (id,a) values (171,11);
+insert into t (id,a) values (171,12);
+insert into t (id,a) values (171,13);
+insert into t (id,a) values (171,14);
+insert into t (id,a) values (171,15);
+insert into t (id,a) values (171,16);
+insert into t (id,a) values (171,17);
+insert into t (id,a) values (171,18);
+insert into t (id,a) values (171,19);
+insert into t (id,a) values (171,20);
+insert into t (id,a) values (171,21);
+insert into t (id,a) values (171,22);
+insert into t (id,a) values (171,23);
+insert into t (id,a) values (171,24);
+insert into t (id,a) values (171,25);
+insert into t (id,a) values (171,26);
+insert into t (id,a) values (171,27);
+insert into t (id,a) values (171,28);
+insert into t (id,a) values (171,29);
+insert into t (id,a) values (171,30);
+insert into t (id,a) values (171,31);
+insert into t (id,a) values (171,32);
+insert into t (id,a) values (171,33);
+insert into t (id,a) values (171,34);
+insert into t (id,a) values (171,35);
+insert into t (id,a) values (171,36);
+insert into t (id,a) values (171,37);
+insert into t (id,a) values (171,38);
+insert into t (id,a) values (171,39);
+insert into t (id,a) values (171,40);
+insert into t (id,a) values (171,41);
+insert into t (id,a) values (171,42);
+insert into t (id,a) values (171,43);
+insert into t (id,a) values (171,44);
+insert into t (id,a) values (171,45);
+insert into t (id,a) values (171,46);
+insert into t (id,a) values (171,47);
+insert into t (id,a) values (171,48);
+insert into t (id,a) values (171,49);
+insert into t (id,a) values (171,50);
+insert into t (id,a) values (171,51);
+insert into t (id,a) values (171,52);
+insert into t (id,a) values (171,53);
+insert into t (id,a) values (171,54);
+insert into t (id,a) values (171,55);
+insert into t (id,a) values (171,56);
+insert into t (id,a) values (171,57);
+insert into t (id,a) values (171,58);
+insert into t (id,a) values (171,59);
+insert into t (id,a) values (171,60);
+insert into t (id,a) values (171,61);
+insert into t (id,a) values (171,62);
+insert into t (id,a) values (171,63);
+insert into t (id,a) values (171,64);
+insert into t (id,a) values (171,65);
+insert into t (id,a) values (171,66);
+insert into t (id,a) values (171,67);
+insert into t (id,a) values (171,68);
+insert into t (id,a) values (171,69);
+insert into t (id,a) values (171,70);
+insert into t (id,a) values (171,71);
+insert into t (id,a) values (171,72);
+insert into t (id,a) values (171,73);
+insert into t (id,a) values (171,74);
+insert into t (id,a) values (171,75);
+insert into t (id,a) values (171,76);
+insert into t (id,a) values (171,77);
+insert into t (id,a) values (171,78);
+insert into t (id,a) values (171,79);
+insert into t (id,a) values (171,80);
+insert into t (id,a) values (171,81);
+insert into t (id,a) values (171,82);
+insert into t (id,a) values (171,83);
+insert into t (id,a) values (171,84);
+insert into t (id,a) values (171,85);
+insert into t (id,a) values (171,86);
+insert into t (id,a) values (171,87);
+insert into t (id,a) values (171,88);
+insert into t (id,a) values (171,89);
+insert into t (id,a) values (171,90);
+insert into t (id,a) values (171,91);
+insert into t (id,a) values (171,92);
+insert into t (id,a) values (171,93);
+insert into t (id,a) values (171,94);
+insert into t (id,a) values (171,95);
+insert into t (id,a) values (171,96);
+insert into t (id,a) values (171,97);
+insert into t (id,a) values (171,98);
+insert into t (id,a) values (171,99);
+insert into t (id,a) values (172,0);
+insert into t (id,a) values (172,1);
+insert into t (id,a) values (172,2);
+insert into t (id,a) values (172,3);
+insert into t (id,a) values (172,4);
+insert into t (id,a) values (172,5);
+insert into t (id,a) values (172,6);
+insert into t (id,a) values (172,7);
+insert into t (id,a) values (172,8);
+insert into t (id,a) values (172,9);
+insert into t (id,a) values (172,10);
+insert into t (id,a) values (172,11);
+insert into t (id,a) values (172,12);
+insert into t (id,a) values (172,13);
+insert into t (id,a) values (172,14);
+insert into t (id,a) values (172,15);
+insert into t (id,a) values (172,16);
+insert into t (id,a) values (172,17);
+insert into t (id,a) values (172,18);
+insert into t (id,a) values (172,19);
+insert into t (id,a) values (172,20);
+insert into t (id,a) values (172,21);
+insert into t (id,a) values (172,22);
+insert into t (id,a) values (172,23);
+insert into t (id,a) values (172,24);
+insert into t (id,a) values (172,25);
+insert into t (id,a) values (172,26);
+insert into t (id,a) values (172,27);
+insert into t (id,a) values (172,28);
+insert into t (id,a) values (172,29);
+insert into t (id,a) values (172,30);
+insert into t (id,a) values (172,31);
+insert into t (id,a) values (172,32);
+insert into t (id,a) values (172,33);
+insert into t (id,a) values (172,34);
+insert into t (id,a) values (172,35);
+insert into t (id,a) values (172,36);
+insert into t (id,a) values (172,37);
+insert into t (id,a) values (172,38);
+insert into t (id,a) values (172,39);
+insert into t (id,a) values (172,40);
+insert into t (id,a) values (172,41);
+insert into t (id,a) values (172,42);
+insert into t (id,a) values (172,43);
+insert into t (id,a) values (172,44);
+insert into t (id,a) values (172,45);
+insert into t (id,a) values (172,46);
+insert into t (id,a) values (172,47);
+insert into t (id,a) values (172,48);
+insert into t (id,a) values (172,49);
+insert into t (id,a) values (172,50);
+insert into t (id,a) values (172,51);
+insert into t (id,a) values (172,52);
+insert into t (id,a) values (172,53);
+insert into t (id,a) values (172,54);
+insert into t (id,a) values (172,55);
+insert into t (id,a) values (172,56);
+insert into t (id,a) values (172,57);
+insert into t (id,a) values (172,58);
+insert into t (id,a) values (172,59);
+insert into t (id,a) values (172,60);
+insert into t (id,a) values (172,61);
+insert into t (id,a) values (172,62);
+insert into t (id,a) values (172,63);
+insert into t (id,a) values (172,64);
+insert into t (id,a) values (172,65);
+insert into t (id,a) values (172,66);
+insert into t (id,a) values (172,67);
+insert into t (id,a) values (172,68);
+insert into t (id,a) values (172,69);
+insert into t (id,a) values (172,70);
+insert into t (id,a) values (172,71);
+insert into t (id,a) values (172,72);
+insert into t (id,a) values (172,73);
+insert into t (id,a) values (172,74);
+insert into t (id,a) values (172,75);
+insert into t (id,a) values (172,76);
+insert into t (id,a) values (172,77);
+insert into t (id,a) values (172,78);
+insert into t (id,a) values (172,79);
+insert into t (id,a) values (172,80);
+insert into t (id,a) values (172,81);
+insert into t (id,a) values (172,82);
+insert into t (id,a) values (172,83);
+insert into t (id,a) values (172,84);
+insert into t (id,a) values (172,85);
+insert into t (id,a) values (172,86);
+insert into t (id,a) values (172,87);
+insert into t (id,a) values (172,88);
+insert into t (id,a) values (172,89);
+insert into t (id,a) values (172,90);
+insert into t (id,a) values (172,91);
+insert into t (id,a) values (172,92);
+insert into t (id,a) values (172,93);
+insert into t (id,a) values (172,94);
+insert into t (id,a) values (172,95);
+insert into t (id,a) values (172,96);
+insert into t (id,a) values (172,97);
+insert into t (id,a) values (172,98);
+insert into t (id,a) values (172,99);
+insert into t (id,a) values (173,0);
+insert into t (id,a) values (173,1);
+insert into t (id,a) values (173,2);
+insert into t (id,a) values (173,3);
+insert into t (id,a) values (173,4);
+insert into t (id,a) values (173,5);
+insert into t (id,a) values (173,6);
+insert into t (id,a) values (173,7);
+insert into t (id,a) values (173,8);
+insert into t (id,a) values (173,9);
+insert into t (id,a) values (173,10);
+insert into t (id,a) values (173,11);
+insert into t (id,a) values (173,12);
+insert into t (id,a) values (173,13);
+insert into t (id,a) values (173,14);
+insert into t (id,a) values (173,15);
+insert into t (id,a) values (173,16);
+insert into t (id,a) values (173,17);
+insert into t (id,a) values (173,18);
+insert into t (id,a) values (173,19);
+insert into t (id,a) values (173,20);
+insert into t (id,a) values (173,21);
+insert into t (id,a) values (173,22);
+insert into t (id,a) values (173,23);
+insert into t (id,a) values (173,24);
+insert into t (id,a) values (173,25);
+insert into t (id,a) values (173,26);
+insert into t (id,a) values (173,27);
+insert into t (id,a) values (173,28);
+insert into t (id,a) values (173,29);
+insert into t (id,a) values (173,30);
+insert into t (id,a) values (173,31);
+insert into t (id,a) values (173,32);
+insert into t (id,a) values (173,33);
+insert into t (id,a) values (173,34);
+insert into t (id,a) values (173,35);
+insert into t (id,a) values (173,36);
+insert into t (id,a) values (173,37);
+insert into t (id,a) values (173,38);
+insert into t (id,a) values (173,39);
+insert into t (id,a) values (173,40);
+insert into t (id,a) values (173,41);
+insert into t (id,a) values (173,42);
+insert into t (id,a) values (173,43);
+insert into t (id,a) values (173,44);
+insert into t (id,a) values (173,45);
+insert into t (id,a) values (173,46);
+insert into t (id,a) values (173,47);
+insert into t (id,a) values (173,48);
+insert into t (id,a) values (173,49);
+insert into t (id,a) values (173,50);
+insert into t (id,a) values (173,51);
+insert into t (id,a) values (173,52);
+insert into t (id,a) values (173,53);
+insert into t (id,a) values (173,54);
+insert into t (id,a) values (173,55);
+insert into t (id,a) values (173,56);
+insert into t (id,a) values (173,57);
+insert into t (id,a) values (173,58);
+insert into t (id,a) values (173,59);
+insert into t (id,a) values (173,60);
+insert into t (id,a) values (173,61);
+insert into t (id,a) values (173,62);
+insert into t (id,a) values (173,63);
+insert into t (id,a) values (173,64);
+insert into t (id,a) values (173,65);
+insert into t (id,a) values (173,66);
+insert into t (id,a) values (173,67);
+insert into t (id,a) values (173,68);
+insert into t (id,a) values (173,69);
+insert into t (id,a) values (173,70);
+insert into t (id,a) values (173,71);
+insert into t (id,a) values (173,72);
+insert into t (id,a) values (173,73);
+insert into t (id,a) values (173,74);
+insert into t (id,a) values (173,75);
+insert into t (id,a) values (173,76);
+insert into t (id,a) values (173,77);
+insert into t (id,a) values (173,78);
+insert into t (id,a) values (173,79);
+insert into t (id,a) values (173,80);
+insert into t (id,a) values (173,81);
+insert into t (id,a) values (173,82);
+insert into t (id,a) values (173,83);
+insert into t (id,a) values (173,84);
+insert into t (id,a) values (173,85);
+insert into t (id,a) values (173,86);
+insert into t (id,a) values (173,87);
+insert into t (id,a) values (173,88);
+insert into t (id,a) values (173,89);
+insert into t (id,a) values (173,90);
+insert into t (id,a) values (173,91);
+insert into t (id,a) values (173,92);
+insert into t (id,a) values (173,93);
+insert into t (id,a) values (173,94);
+insert into t (id,a) values (173,95);
+insert into t (id,a) values (173,96);
+insert into t (id,a) values (173,97);
+insert into t (id,a) values (173,98);
+insert into t (id,a) values (173,99);
+insert into t (id,a) values (174,0);
+insert into t (id,a) values (174,1);
+insert into t (id,a) values (174,2);
+insert into t (id,a) values (174,3);
+insert into t (id,a) values (174,4);
+insert into t (id,a) values (174,5);
+insert into t (id,a) values (174,6);
+insert into t (id,a) values (174,7);
+insert into t (id,a) values (174,8);
+insert into t (id,a) values (174,9);
+insert into t (id,a) values (174,10);
+insert into t (id,a) values (174,11);
+insert into t (id,a) values (174,12);
+insert into t (id,a) values (174,13);
+insert into t (id,a) values (174,14);
+insert into t (id,a) values (174,15);
+insert into t (id,a) values (174,16);
+insert into t (id,a) values (174,17);
+insert into t (id,a) values (174,18);
+insert into t (id,a) values (174,19);
+insert into t (id,a) values (174,20);
+insert into t (id,a) values (174,21);
+insert into t (id,a) values (174,22);
+insert into t (id,a) values (174,23);
+insert into t (id,a) values (174,24);
+insert into t (id,a) values (174,25);
+insert into t (id,a) values (174,26);
+insert into t (id,a) values (174,27);
+insert into t (id,a) values (174,28);
+insert into t (id,a) values (174,29);
+insert into t (id,a) values (174,30);
+insert into t (id,a) values (174,31);
+insert into t (id,a) values (174,32);
+insert into t (id,a) values (174,33);
+insert into t (id,a) values (174,34);
+insert into t (id,a) values (174,35);
+insert into t (id,a) values (174,36);
+insert into t (id,a) values (174,37);
+insert into t (id,a) values (174,38);
+insert into t (id,a) values (174,39);
+insert into t (id,a) values (174,40);
+insert into t (id,a) values (174,41);
+insert into t (id,a) values (174,42);
+insert into t (id,a) values (174,43);
+insert into t (id,a) values (174,44);
+insert into t (id,a) values (174,45);
+insert into t (id,a) values (174,46);
+insert into t (id,a) values (174,47);
+insert into t (id,a) values (174,48);
+insert into t (id,a) values (174,49);
+insert into t (id,a) values (174,50);
+insert into t (id,a) values (174,51);
+insert into t (id,a) values (174,52);
+insert into t (id,a) values (174,53);
+insert into t (id,a) values (174,54);
+insert into t (id,a) values (174,55);
+insert into t (id,a) values (174,56);
+insert into t (id,a) values (174,57);
+insert into t (id,a) values (174,58);
+insert into t (id,a) values (174,59);
+insert into t (id,a) values (174,60);
+insert into t (id,a) values (174,61);
+insert into t (id,a) values (174,62);
+insert into t (id,a) values (174,63);
+insert into t (id,a) values (174,64);
+insert into t (id,a) values (174,65);
+insert into t (id,a) values (174,66);
+insert into t (id,a) values (174,67);
+insert into t (id,a) values (174,68);
+insert into t (id,a) values (174,69);
+insert into t (id,a) values (174,70);
+insert into t (id,a) values (174,71);
+insert into t (id,a) values (174,72);
+insert into t (id,a) values (174,73);
+insert into t (id,a) values (174,74);
+insert into t (id,a) values (174,75);
+insert into t (id,a) values (174,76);
+insert into t (id,a) values (174,77);
+insert into t (id,a) values (174,78);
+insert into t (id,a) values (174,79);
+insert into t (id,a) values (174,80);
+insert into t (id,a) values (174,81);
+insert into t (id,a) values (174,82);
+insert into t (id,a) values (174,83);
+insert into t (id,a) values (174,84);
+insert into t (id,a) values (174,85);
+insert into t (id,a) values (174,86);
+insert into t (id,a) values (174,87);
+insert into t (id,a) values (174,88);
+insert into t (id,a) values (174,89);
+insert into t (id,a) values (174,90);
+insert into t (id,a) values (174,91);
+insert into t (id,a) values (174,92);
+insert into t (id,a) values (174,93);
+insert into t (id,a) values (174,94);
+insert into t (id,a) values (174,95);
+insert into t (id,a) values (174,96);
+insert into t (id,a) values (174,97);
+insert into t (id,a) values (174,98);
+insert into t (id,a) values (174,99);
+insert into t (id,a) values (175,0);
+insert into t (id,a) values (175,1);
+insert into t (id,a) values (175,2);
+insert into t (id,a) values (175,3);
+insert into t (id,a) values (175,4);
+insert into t (id,a) values (175,5);
+insert into t (id,a) values (175,6);
+insert into t (id,a) values (175,7);
+insert into t (id,a) values (175,8);
+insert into t (id,a) values (175,9);
+insert into t (id,a) values (175,10);
+insert into t (id,a) values (175,11);
+insert into t (id,a) values (175,12);
+insert into t (id,a) values (175,13);
+insert into t (id,a) values (175,14);
+insert into t (id,a) values (175,15);
+insert into t (id,a) values (175,16);
+insert into t (id,a) values (175,17);
+insert into t (id,a) values (175,18);
+insert into t (id,a) values (175,19);
+insert into t (id,a) values (175,20);
+insert into t (id,a) values (175,21);
+insert into t (id,a) values (175,22);
+insert into t (id,a) values (175,23);
+insert into t (id,a) values (175,24);
+insert into t (id,a) values (175,25);
+insert into t (id,a) values (175,26);
+insert into t (id,a) values (175,27);
+insert into t (id,a) values (175,28);
+insert into t (id,a) values (175,29);
+insert into t (id,a) values (175,30);
+insert into t (id,a) values (175,31);
+insert into t (id,a) values (175,32);
+insert into t (id,a) values (175,33);
+insert into t (id,a) values (175,34);
+insert into t (id,a) values (175,35);
+insert into t (id,a) values (175,36);
+insert into t (id,a) values (175,37);
+insert into t (id,a) values (175,38);
+insert into t (id,a) values (175,39);
+insert into t (id,a) values (175,40);
+insert into t (id,a) values (175,41);
+insert into t (id,a) values (175,42);
+insert into t (id,a) values (175,43);
+insert into t (id,a) values (175,44);
+insert into t (id,a) values (175,45);
+insert into t (id,a) values (175,46);
+insert into t (id,a) values (175,47);
+insert into t (id,a) values (175,48);
+insert into t (id,a) values (175,49);
+insert into t (id,a) values (175,50);
+insert into t (id,a) values (175,51);
+insert into t (id,a) values (175,52);
+insert into t (id,a) values (175,53);
+insert into t (id,a) values (175,54);
+insert into t (id,a) values (175,55);
+insert into t (id,a) values (175,56);
+insert into t (id,a) values (175,57);
+insert into t (id,a) values (175,58);
+insert into t (id,a) values (175,59);
+insert into t (id,a) values (175,60);
+insert into t (id,a) values (175,61);
+insert into t (id,a) values (175,62);
+insert into t (id,a) values (175,63);
+insert into t (id,a) values (175,64);
+insert into t (id,a) values (175,65);
+insert into t (id,a) values (175,66);
+insert into t (id,a) values (175,67);
+insert into t (id,a) values (175,68);
+insert into t (id,a) values (175,69);
+insert into t (id,a) values (175,70);
+insert into t (id,a) values (175,71);
+insert into t (id,a) values (175,72);
+insert into t (id,a) values (175,73);
+insert into t (id,a) values (175,74);
+insert into t (id,a) values (175,75);
+insert into t (id,a) values (175,76);
+insert into t (id,a) values (175,77);
+insert into t (id,a) values (175,78);
+insert into t (id,a) values (175,79);
+insert into t (id,a) values (175,80);
+insert into t (id,a) values (175,81);
+insert into t (id,a) values (175,82);
+insert into t (id,a) values (175,83);
+insert into t (id,a) values (175,84);
+insert into t (id,a) values (175,85);
+insert into t (id,a) values (175,86);
+insert into t (id,a) values (175,87);
+insert into t (id,a) values (175,88);
+insert into t (id,a) values (175,89);
+insert into t (id,a) values (175,90);
+insert into t (id,a) values (175,91);
+insert into t (id,a) values (175,92);
+insert into t (id,a) values (175,93);
+insert into t (id,a) values (175,94);
+insert into t (id,a) values (175,95);
+insert into t (id,a) values (175,96);
+insert into t (id,a) values (175,97);
+insert into t (id,a) values (175,98);
+insert into t (id,a) values (175,99);
+insert into t (id,a) values (176,0);
+insert into t (id,a) values (176,1);
+insert into t (id,a) values (176,2);
+insert into t (id,a) values (176,3);
+insert into t (id,a) values (176,4);
+insert into t (id,a) values (176,5);
+insert into t (id,a) values (176,6);
+insert into t (id,a) values (176,7);
+insert into t (id,a) values (176,8);
+insert into t (id,a) values (176,9);
+insert into t (id,a) values (176,10);
+insert into t (id,a) values (176,11);
+insert into t (id,a) values (176,12);
+insert into t (id,a) values (176,13);
+insert into t (id,a) values (176,14);
+insert into t (id,a) values (176,15);
+insert into t (id,a) values (176,16);
+insert into t (id,a) values (176,17);
+insert into t (id,a) values (176,18);
+insert into t (id,a) values (176,19);
+insert into t (id,a) values (176,20);
+insert into t (id,a) values (176,21);
+insert into t (id,a) values (176,22);
+insert into t (id,a) values (176,23);
+insert into t (id,a) values (176,24);
+insert into t (id,a) values (176,25);
+insert into t (id,a) values (176,26);
+insert into t (id,a) values (176,27);
+insert into t (id,a) values (176,28);
+insert into t (id,a) values (176,29);
+insert into t (id,a) values (176,30);
+insert into t (id,a) values (176,31);
+insert into t (id,a) values (176,32);
+insert into t (id,a) values (176,33);
+insert into t (id,a) values (176,34);
+insert into t (id,a) values (176,35);
+insert into t (id,a) values (176,36);
+insert into t (id,a) values (176,37);
+insert into t (id,a) values (176,38);
+insert into t (id,a) values (176,39);
+insert into t (id,a) values (176,40);
+insert into t (id,a) values (176,41);
+insert into t (id,a) values (176,42);
+insert into t (id,a) values (176,43);
+insert into t (id,a) values (176,44);
+insert into t (id,a) values (176,45);
+insert into t (id,a) values (176,46);
+insert into t (id,a) values (176,47);
+insert into t (id,a) values (176,48);
+insert into t (id,a) values (176,49);
+insert into t (id,a) values (176,50);
+insert into t (id,a) values (176,51);
+insert into t (id,a) values (176,52);
+insert into t (id,a) values (176,53);
+insert into t (id,a) values (176,54);
+insert into t (id,a) values (176,55);
+insert into t (id,a) values (176,56);
+insert into t (id,a) values (176,57);
+insert into t (id,a) values (176,58);
+insert into t (id,a) values (176,59);
+insert into t (id,a) values (176,60);
+insert into t (id,a) values (176,61);
+insert into t (id,a) values (176,62);
+insert into t (id,a) values (176,63);
+insert into t (id,a) values (176,64);
+insert into t (id,a) values (176,65);
+insert into t (id,a) values (176,66);
+insert into t (id,a) values (176,67);
+insert into t (id,a) values (176,68);
+insert into t (id,a) values (176,69);
+insert into t (id,a) values (176,70);
+insert into t (id,a) values (176,71);
+insert into t (id,a) values (176,72);
+insert into t (id,a) values (176,73);
+insert into t (id,a) values (176,74);
+insert into t (id,a) values (176,75);
+insert into t (id,a) values (176,76);
+insert into t (id,a) values (176,77);
+insert into t (id,a) values (176,78);
+insert into t (id,a) values (176,79);
+insert into t (id,a) values (176,80);
+insert into t (id,a) values (176,81);
+insert into t (id,a) values (176,82);
+insert into t (id,a) values (176,83);
+insert into t (id,a) values (176,84);
+insert into t (id,a) values (176,85);
+insert into t (id,a) values (176,86);
+insert into t (id,a) values (176,87);
+insert into t (id,a) values (176,88);
+insert into t (id,a) values (176,89);
+insert into t (id,a) values (176,90);
+insert into t (id,a) values (176,91);
+insert into t (id,a) values (176,92);
+insert into t (id,a) values (176,93);
+insert into t (id,a) values (176,94);
+insert into t (id,a) values (176,95);
+insert into t (id,a) values (176,96);
+insert into t (id,a) values (176,97);
+insert into t (id,a) values (176,98);
+insert into t (id,a) values (176,99);
+insert into t (id,a) values (177,0);
+insert into t (id,a) values (177,1);
+insert into t (id,a) values (177,2);
+insert into t (id,a) values (177,3);
+insert into t (id,a) values (177,4);
+insert into t (id,a) values (177,5);
+insert into t (id,a) values (177,6);
+insert into t (id,a) values (177,7);
+insert into t (id,a) values (177,8);
+insert into t (id,a) values (177,9);
+insert into t (id,a) values (177,10);
+insert into t (id,a) values (177,11);
+insert into t (id,a) values (177,12);
+insert into t (id,a) values (177,13);
+insert into t (id,a) values (177,14);
+insert into t (id,a) values (177,15);
+insert into t (id,a) values (177,16);
+insert into t (id,a) values (177,17);
+insert into t (id,a) values (177,18);
+insert into t (id,a) values (177,19);
+insert into t (id,a) values (177,20);
+insert into t (id,a) values (177,21);
+insert into t (id,a) values (177,22);
+insert into t (id,a) values (177,23);
+insert into t (id,a) values (177,24);
+insert into t (id,a) values (177,25);
+insert into t (id,a) values (177,26);
+insert into t (id,a) values (177,27);
+insert into t (id,a) values (177,28);
+insert into t (id,a) values (177,29);
+insert into t (id,a) values (177,30);
+insert into t (id,a) values (177,31);
+insert into t (id,a) values (177,32);
+insert into t (id,a) values (177,33);
+insert into t (id,a) values (177,34);
+insert into t (id,a) values (177,35);
+insert into t (id,a) values (177,36);
+insert into t (id,a) values (177,37);
+insert into t (id,a) values (177,38);
+insert into t (id,a) values (177,39);
+insert into t (id,a) values (177,40);
+insert into t (id,a) values (177,41);
+insert into t (id,a) values (177,42);
+insert into t (id,a) values (177,43);
+insert into t (id,a) values (177,44);
+insert into t (id,a) values (177,45);
+insert into t (id,a) values (177,46);
+insert into t (id,a) values (177,47);
+insert into t (id,a) values (177,48);
+insert into t (id,a) values (177,49);
+insert into t (id,a) values (177,50);
+insert into t (id,a) values (177,51);
+insert into t (id,a) values (177,52);
+insert into t (id,a) values (177,53);
+insert into t (id,a) values (177,54);
+insert into t (id,a) values (177,55);
+insert into t (id,a) values (177,56);
+insert into t (id,a) values (177,57);
+insert into t (id,a) values (177,58);
+insert into t (id,a) values (177,59);
+insert into t (id,a) values (177,60);
+insert into t (id,a) values (177,61);
+insert into t (id,a) values (177,62);
+insert into t (id,a) values (177,63);
+insert into t (id,a) values (177,64);
+insert into t (id,a) values (177,65);
+insert into t (id,a) values (177,66);
+insert into t (id,a) values (177,67);
+insert into t (id,a) values (177,68);
+insert into t (id,a) values (177,69);
+insert into t (id,a) values (177,70);
+insert into t (id,a) values (177,71);
+insert into t (id,a) values (177,72);
+insert into t (id,a) values (177,73);
+insert into t (id,a) values (177,74);
+insert into t (id,a) values (177,75);
+insert into t (id,a) values (177,76);
+insert into t (id,a) values (177,77);
+insert into t (id,a) values (177,78);
+insert into t (id,a) values (177,79);
+insert into t (id,a) values (177,80);
+insert into t (id,a) values (177,81);
+insert into t (id,a) values (177,82);
+insert into t (id,a) values (177,83);
+insert into t (id,a) values (177,84);
+insert into t (id,a) values (177,85);
+insert into t (id,a) values (177,86);
+insert into t (id,a) values (177,87);
+insert into t (id,a) values (177,88);
+insert into t (id,a) values (177,89);
+insert into t (id,a) values (177,90);
+insert into t (id,a) values (177,91);
+insert into t (id,a) values (177,92);
+insert into t (id,a) values (177,93);
+insert into t (id,a) values (177,94);
+insert into t (id,a) values (177,95);
+insert into t (id,a) values (177,96);
+insert into t (id,a) values (177,97);
+insert into t (id,a) values (177,98);
+insert into t (id,a) values (177,99);
+insert into t (id,a) values (178,0);
+insert into t (id,a) values (178,1);
+insert into t (id,a) values (178,2);
+insert into t (id,a) values (178,3);
+insert into t (id,a) values (178,4);
+insert into t (id,a) values (178,5);
+insert into t (id,a) values (178,6);
+insert into t (id,a) values (178,7);
+insert into t (id,a) values (178,8);
+insert into t (id,a) values (178,9);
+insert into t (id,a) values (178,10);
+insert into t (id,a) values (178,11);
+insert into t (id,a) values (178,12);
+insert into t (id,a) values (178,13);
+insert into t (id,a) values (178,14);
+insert into t (id,a) values (178,15);
+insert into t (id,a) values (178,16);
+insert into t (id,a) values (178,17);
+insert into t (id,a) values (178,18);
+insert into t (id,a) values (178,19);
+insert into t (id,a) values (178,20);
+insert into t (id,a) values (178,21);
+insert into t (id,a) values (178,22);
+insert into t (id,a) values (178,23);
+insert into t (id,a) values (178,24);
+insert into t (id,a) values (178,25);
+insert into t (id,a) values (178,26);
+insert into t (id,a) values (178,27);
+insert into t (id,a) values (178,28);
+insert into t (id,a) values (178,29);
+insert into t (id,a) values (178,30);
+insert into t (id,a) values (178,31);
+insert into t (id,a) values (178,32);
+insert into t (id,a) values (178,33);
+insert into t (id,a) values (178,34);
+insert into t (id,a) values (178,35);
+insert into t (id,a) values (178,36);
+insert into t (id,a) values (178,37);
+insert into t (id,a) values (178,38);
+insert into t (id,a) values (178,39);
+insert into t (id,a) values (178,40);
+insert into t (id,a) values (178,41);
+insert into t (id,a) values (178,42);
+insert into t (id,a) values (178,43);
+insert into t (id,a) values (178,44);
+insert into t (id,a) values (178,45);
+insert into t (id,a) values (178,46);
+insert into t (id,a) values (178,47);
+insert into t (id,a) values (178,48);
+insert into t (id,a) values (178,49);
+insert into t (id,a) values (178,50);
+insert into t (id,a) values (178,51);
+insert into t (id,a) values (178,52);
+insert into t (id,a) values (178,53);
+insert into t (id,a) values (178,54);
+insert into t (id,a) values (178,55);
+insert into t (id,a) values (178,56);
+insert into t (id,a) values (178,57);
+insert into t (id,a) values (178,58);
+insert into t (id,a) values (178,59);
+insert into t (id,a) values (178,60);
+insert into t (id,a) values (178,61);
+insert into t (id,a) values (178,62);
+insert into t (id,a) values (178,63);
+insert into t (id,a) values (178,64);
+insert into t (id,a) values (178,65);
+insert into t (id,a) values (178,66);
+insert into t (id,a) values (178,67);
+insert into t (id,a) values (178,68);
+insert into t (id,a) values (178,69);
+insert into t (id,a) values (178,70);
+insert into t (id,a) values (178,71);
+insert into t (id,a) values (178,72);
+insert into t (id,a) values (178,73);
+insert into t (id,a) values (178,74);
+insert into t (id,a) values (178,75);
+insert into t (id,a) values (178,76);
+insert into t (id,a) values (178,77);
+insert into t (id,a) values (178,78);
+insert into t (id,a) values (178,79);
+insert into t (id,a) values (178,80);
+insert into t (id,a) values (178,81);
+insert into t (id,a) values (178,82);
+insert into t (id,a) values (178,83);
+insert into t (id,a) values (178,84);
+insert into t (id,a) values (178,85);
+insert into t (id,a) values (178,86);
+insert into t (id,a) values (178,87);
+insert into t (id,a) values (178,88);
+insert into t (id,a) values (178,89);
+insert into t (id,a) values (178,90);
+insert into t (id,a) values (178,91);
+insert into t (id,a) values (178,92);
+insert into t (id,a) values (178,93);
+insert into t (id,a) values (178,94);
+insert into t (id,a) values (178,95);
+insert into t (id,a) values (178,96);
+insert into t (id,a) values (178,97);
+insert into t (id,a) values (178,98);
+insert into t (id,a) values (178,99);
+insert into t (id,a) values (179,0);
+insert into t (id,a) values (179,1);
+insert into t (id,a) values (179,2);
+insert into t (id,a) values (179,3);
+insert into t (id,a) values (179,4);
+insert into t (id,a) values (179,5);
+insert into t (id,a) values (179,6);
+insert into t (id,a) values (179,7);
+insert into t (id,a) values (179,8);
+insert into t (id,a) values (179,9);
+insert into t (id,a) values (179,10);
+insert into t (id,a) values (179,11);
+insert into t (id,a) values (179,12);
+insert into t (id,a) values (179,13);
+insert into t (id,a) values (179,14);
+insert into t (id,a) values (179,15);
+insert into t (id,a) values (179,16);
+insert into t (id,a) values (179,17);
+insert into t (id,a) values (179,18);
+insert into t (id,a) values (179,19);
+insert into t (id,a) values (179,20);
+insert into t (id,a) values (179,21);
+insert into t (id,a) values (179,22);
+insert into t (id,a) values (179,23);
+insert into t (id,a) values (179,24);
+insert into t (id,a) values (179,25);
+insert into t (id,a) values (179,26);
+insert into t (id,a) values (179,27);
+insert into t (id,a) values (179,28);
+insert into t (id,a) values (179,29);
+insert into t (id,a) values (179,30);
+insert into t (id,a) values (179,31);
+insert into t (id,a) values (179,32);
+insert into t (id,a) values (179,33);
+insert into t (id,a) values (179,34);
+insert into t (id,a) values (179,35);
+insert into t (id,a) values (179,36);
+insert into t (id,a) values (179,37);
+insert into t (id,a) values (179,38);
+insert into t (id,a) values (179,39);
+insert into t (id,a) values (179,40);
+insert into t (id,a) values (179,41);
+insert into t (id,a) values (179,42);
+insert into t (id,a) values (179,43);
+insert into t (id,a) values (179,44);
+insert into t (id,a) values (179,45);
+insert into t (id,a) values (179,46);
+insert into t (id,a) values (179,47);
+insert into t (id,a) values (179,48);
+insert into t (id,a) values (179,49);
+insert into t (id,a) values (179,50);
+insert into t (id,a) values (179,51);
+insert into t (id,a) values (179,52);
+insert into t (id,a) values (179,53);
+insert into t (id,a) values (179,54);
+insert into t (id,a) values (179,55);
+insert into t (id,a) values (179,56);
+insert into t (id,a) values (179,57);
+insert into t (id,a) values (179,58);
+insert into t (id,a) values (179,59);
+insert into t (id,a) values (179,60);
+insert into t (id,a) values (179,61);
+insert into t (id,a) values (179,62);
+insert into t (id,a) values (179,63);
+insert into t (id,a) values (179,64);
+insert into t (id,a) values (179,65);
+insert into t (id,a) values (179,66);
+insert into t (id,a) values (179,67);
+insert into t (id,a) values (179,68);
+insert into t (id,a) values (179,69);
+insert into t (id,a) values (179,70);
+insert into t (id,a) values (179,71);
+insert into t (id,a) values (179,72);
+insert into t (id,a) values (179,73);
+insert into t (id,a) values (179,74);
+insert into t (id,a) values (179,75);
+insert into t (id,a) values (179,76);
+insert into t (id,a) values (179,77);
+insert into t (id,a) values (179,78);
+insert into t (id,a) values (179,79);
+insert into t (id,a) values (179,80);
+insert into t (id,a) values (179,81);
+insert into t (id,a) values (179,82);
+insert into t (id,a) values (179,83);
+insert into t (id,a) values (179,84);
+insert into t (id,a) values (179,85);
+insert into t (id,a) values (179,86);
+insert into t (id,a) values (179,87);
+insert into t (id,a) values (179,88);
+insert into t (id,a) values (179,89);
+insert into t (id,a) values (179,90);
+insert into t (id,a) values (179,91);
+insert into t (id,a) values (179,92);
+insert into t (id,a) values (179,93);
+insert into t (id,a) values (179,94);
+insert into t (id,a) values (179,95);
+insert into t (id,a) values (179,96);
+insert into t (id,a) values (179,97);
+insert into t (id,a) values (179,98);
+insert into t (id,a) values (179,99);
+insert into t (id,a) values (180,0);
+insert into t (id,a) values (180,1);
+insert into t (id,a) values (180,2);
+insert into t (id,a) values (180,3);
+insert into t (id,a) values (180,4);
+insert into t (id,a) values (180,5);
+insert into t (id,a) values (180,6);
+insert into t (id,a) values (180,7);
+insert into t (id,a) values (180,8);
+insert into t (id,a) values (180,9);
+insert into t (id,a) values (180,10);
+insert into t (id,a) values (180,11);
+insert into t (id,a) values (180,12);
+insert into t (id,a) values (180,13);
+insert into t (id,a) values (180,14);
+insert into t (id,a) values (180,15);
+insert into t (id,a) values (180,16);
+insert into t (id,a) values (180,17);
+insert into t (id,a) values (180,18);
+insert into t (id,a) values (180,19);
+insert into t (id,a) values (180,20);
+insert into t (id,a) values (180,21);
+insert into t (id,a) values (180,22);
+insert into t (id,a) values (180,23);
+insert into t (id,a) values (180,24);
+insert into t (id,a) values (180,25);
+insert into t (id,a) values (180,26);
+insert into t (id,a) values (180,27);
+insert into t (id,a) values (180,28);
+insert into t (id,a) values (180,29);
+insert into t (id,a) values (180,30);
+insert into t (id,a) values (180,31);
+insert into t (id,a) values (180,32);
+insert into t (id,a) values (180,33);
+insert into t (id,a) values (180,34);
+insert into t (id,a) values (180,35);
+insert into t (id,a) values (180,36);
+insert into t (id,a) values (180,37);
+insert into t (id,a) values (180,38);
+insert into t (id,a) values (180,39);
+insert into t (id,a) values (180,40);
+insert into t (id,a) values (180,41);
+insert into t (id,a) values (180,42);
+insert into t (id,a) values (180,43);
+insert into t (id,a) values (180,44);
+insert into t (id,a) values (180,45);
+insert into t (id,a) values (180,46);
+insert into t (id,a) values (180,47);
+insert into t (id,a) values (180,48);
+insert into t (id,a) values (180,49);
+insert into t (id,a) values (180,50);
+insert into t (id,a) values (180,51);
+insert into t (id,a) values (180,52);
+insert into t (id,a) values (180,53);
+insert into t (id,a) values (180,54);
+insert into t (id,a) values (180,55);
+insert into t (id,a) values (180,56);
+insert into t (id,a) values (180,57);
+insert into t (id,a) values (180,58);
+insert into t (id,a) values (180,59);
+insert into t (id,a) values (180,60);
+insert into t (id,a) values (180,61);
+insert into t (id,a) values (180,62);
+insert into t (id,a) values (180,63);
+insert into t (id,a) values (180,64);
+insert into t (id,a) values (180,65);
+insert into t (id,a) values (180,66);
+insert into t (id,a) values (180,67);
+insert into t (id,a) values (180,68);
+insert into t (id,a) values (180,69);
+insert into t (id,a) values (180,70);
+insert into t (id,a) values (180,71);
+insert into t (id,a) values (180,72);
+insert into t (id,a) values (180,73);
+insert into t (id,a) values (180,74);
+insert into t (id,a) values (180,75);
+insert into t (id,a) values (180,76);
+insert into t (id,a) values (180,77);
+insert into t (id,a) values (180,78);
+insert into t (id,a) values (180,79);
+insert into t (id,a) values (180,80);
+insert into t (id,a) values (180,81);
+insert into t (id,a) values (180,82);
+insert into t (id,a) values (180,83);
+insert into t (id,a) values (180,84);
+insert into t (id,a) values (180,85);
+insert into t (id,a) values (180,86);
+insert into t (id,a) values (180,87);
+insert into t (id,a) values (180,88);
+insert into t (id,a) values (180,89);
+insert into t (id,a) values (180,90);
+insert into t (id,a) values (180,91);
+insert into t (id,a) values (180,92);
+insert into t (id,a) values (180,93);
+insert into t (id,a) values (180,94);
+insert into t (id,a) values (180,95);
+insert into t (id,a) values (180,96);
+insert into t (id,a) values (180,97);
+insert into t (id,a) values (180,98);
+insert into t (id,a) values (180,99);
+insert into t (id,a) values (181,0);
+insert into t (id,a) values (181,1);
+insert into t (id,a) values (181,2);
+insert into t (id,a) values (181,3);
+insert into t (id,a) values (181,4);
+insert into t (id,a) values (181,5);
+insert into t (id,a) values (181,6);
+insert into t (id,a) values (181,7);
+insert into t (id,a) values (181,8);
+insert into t (id,a) values (181,9);
+insert into t (id,a) values (181,10);
+insert into t (id,a) values (181,11);
+insert into t (id,a) values (181,12);
+insert into t (id,a) values (181,13);
+insert into t (id,a) values (181,14);
+insert into t (id,a) values (181,15);
+insert into t (id,a) values (181,16);
+insert into t (id,a) values (181,17);
+insert into t (id,a) values (181,18);
+insert into t (id,a) values (181,19);
+insert into t (id,a) values (181,20);
+insert into t (id,a) values (181,21);
+insert into t (id,a) values (181,22);
+insert into t (id,a) values (181,23);
+insert into t (id,a) values (181,24);
+insert into t (id,a) values (181,25);
+insert into t (id,a) values (181,26);
+insert into t (id,a) values (181,27);
+insert into t (id,a) values (181,28);
+insert into t (id,a) values (181,29);
+insert into t (id,a) values (181,30);
+insert into t (id,a) values (181,31);
+insert into t (id,a) values (181,32);
+insert into t (id,a) values (181,33);
+insert into t (id,a) values (181,34);
+insert into t (id,a) values (181,35);
+insert into t (id,a) values (181,36);
+insert into t (id,a) values (181,37);
+insert into t (id,a) values (181,38);
+insert into t (id,a) values (181,39);
+insert into t (id,a) values (181,40);
+insert into t (id,a) values (181,41);
+insert into t (id,a) values (181,42);
+insert into t (id,a) values (181,43);
+insert into t (id,a) values (181,44);
+insert into t (id,a) values (181,45);
+insert into t (id,a) values (181,46);
+insert into t (id,a) values (181,47);
+insert into t (id,a) values (181,48);
+insert into t (id,a) values (181,49);
+insert into t (id,a) values (181,50);
+insert into t (id,a) values (181,51);
+insert into t (id,a) values (181,52);
+insert into t (id,a) values (181,53);
+insert into t (id,a) values (181,54);
+insert into t (id,a) values (181,55);
+insert into t (id,a) values (181,56);
+insert into t (id,a) values (181,57);
+insert into t (id,a) values (181,58);
+insert into t (id,a) values (181,59);
+insert into t (id,a) values (181,60);
+insert into t (id,a) values (181,61);
+insert into t (id,a) values (181,62);
+insert into t (id,a) values (181,63);
+insert into t (id,a) values (181,64);
+insert into t (id,a) values (181,65);
+insert into t (id,a) values (181,66);
+insert into t (id,a) values (181,67);
+insert into t (id,a) values (181,68);
+insert into t (id,a) values (181,69);
+insert into t (id,a) values (181,70);
+insert into t (id,a) values (181,71);
+insert into t (id,a) values (181,72);
+insert into t (id,a) values (181,73);
+insert into t (id,a) values (181,74);
+insert into t (id,a) values (181,75);
+insert into t (id,a) values (181,76);
+insert into t (id,a) values (181,77);
+insert into t (id,a) values (181,78);
+insert into t (id,a) values (181,79);
+insert into t (id,a) values (181,80);
+insert into t (id,a) values (181,81);
+insert into t (id,a) values (181,82);
+insert into t (id,a) values (181,83);
+insert into t (id,a) values (181,84);
+insert into t (id,a) values (181,85);
+insert into t (id,a) values (181,86);
+insert into t (id,a) values (181,87);
+insert into t (id,a) values (181,88);
+insert into t (id,a) values (181,89);
+insert into t (id,a) values (181,90);
+insert into t (id,a) values (181,91);
+insert into t (id,a) values (181,92);
+insert into t (id,a) values (181,93);
+insert into t (id,a) values (181,94);
+insert into t (id,a) values (181,95);
+insert into t (id,a) values (181,96);
+insert into t (id,a) values (181,97);
+insert into t (id,a) values (181,98);
+insert into t (id,a) values (181,99);
+insert into t (id,a) values (182,0);
+insert into t (id,a) values (182,1);
+insert into t (id,a) values (182,2);
+insert into t (id,a) values (182,3);
+insert into t (id,a) values (182,4);
+insert into t (id,a) values (182,5);
+insert into t (id,a) values (182,6);
+insert into t (id,a) values (182,7);
+insert into t (id,a) values (182,8);
+insert into t (id,a) values (182,9);
+insert into t (id,a) values (182,10);
+insert into t (id,a) values (182,11);
+insert into t (id,a) values (182,12);
+insert into t (id,a) values (182,13);
+insert into t (id,a) values (182,14);
+insert into t (id,a) values (182,15);
+insert into t (id,a) values (182,16);
+insert into t (id,a) values (182,17);
+insert into t (id,a) values (182,18);
+insert into t (id,a) values (182,19);
+insert into t (id,a) values (182,20);
+insert into t (id,a) values (182,21);
+insert into t (id,a) values (182,22);
+insert into t (id,a) values (182,23);
+insert into t (id,a) values (182,24);
+insert into t (id,a) values (182,25);
+insert into t (id,a) values (182,26);
+insert into t (id,a) values (182,27);
+insert into t (id,a) values (182,28);
+insert into t (id,a) values (182,29);
+insert into t (id,a) values (182,30);
+insert into t (id,a) values (182,31);
+insert into t (id,a) values (182,32);
+insert into t (id,a) values (182,33);
+insert into t (id,a) values (182,34);
+insert into t (id,a) values (182,35);
+insert into t (id,a) values (182,36);
+insert into t (id,a) values (182,37);
+insert into t (id,a) values (182,38);
+insert into t (id,a) values (182,39);
+insert into t (id,a) values (182,40);
+insert into t (id,a) values (182,41);
+insert into t (id,a) values (182,42);
+insert into t (id,a) values (182,43);
+insert into t (id,a) values (182,44);
+insert into t (id,a) values (182,45);
+insert into t (id,a) values (182,46);
+insert into t (id,a) values (182,47);
+insert into t (id,a) values (182,48);
+insert into t (id,a) values (182,49);
+insert into t (id,a) values (182,50);
+insert into t (id,a) values (182,51);
+insert into t (id,a) values (182,52);
+insert into t (id,a) values (182,53);
+insert into t (id,a) values (182,54);
+insert into t (id,a) values (182,55);
+insert into t (id,a) values (182,56);
+insert into t (id,a) values (182,57);
+insert into t (id,a) values (182,58);
+insert into t (id,a) values (182,59);
+insert into t (id,a) values (182,60);
+insert into t (id,a) values (182,61);
+insert into t (id,a) values (182,62);
+insert into t (id,a) values (182,63);
+insert into t (id,a) values (182,64);
+insert into t (id,a) values (182,65);
+insert into t (id,a) values (182,66);
+insert into t (id,a) values (182,67);
+insert into t (id,a) values (182,68);
+insert into t (id,a) values (182,69);
+insert into t (id,a) values (182,70);
+insert into t (id,a) values (182,71);
+insert into t (id,a) values (182,72);
+insert into t (id,a) values (182,73);
+insert into t (id,a) values (182,74);
+insert into t (id,a) values (182,75);
+insert into t (id,a) values (182,76);
+insert into t (id,a) values (182,77);
+insert into t (id,a) values (182,78);
+insert into t (id,a) values (182,79);
+insert into t (id,a) values (182,80);
+insert into t (id,a) values (182,81);
+insert into t (id,a) values (182,82);
+insert into t (id,a) values (182,83);
+insert into t (id,a) values (182,84);
+insert into t (id,a) values (182,85);
+insert into t (id,a) values (182,86);
+insert into t (id,a) values (182,87);
+insert into t (id,a) values (182,88);
+insert into t (id,a) values (182,89);
+insert into t (id,a) values (182,90);
+insert into t (id,a) values (182,91);
+insert into t (id,a) values (182,92);
+insert into t (id,a) values (182,93);
+insert into t (id,a) values (182,94);
+insert into t (id,a) values (182,95);
+insert into t (id,a) values (182,96);
+insert into t (id,a) values (182,97);
+insert into t (id,a) values (182,98);
+insert into t (id,a) values (182,99);
+insert into t (id,a) values (183,0);
+insert into t (id,a) values (183,1);
+insert into t (id,a) values (183,2);
+insert into t (id,a) values (183,3);
+insert into t (id,a) values (183,4);
+insert into t (id,a) values (183,5);
+insert into t (id,a) values (183,6);
+insert into t (id,a) values (183,7);
+insert into t (id,a) values (183,8);
+insert into t (id,a) values (183,9);
+insert into t (id,a) values (183,10);
+insert into t (id,a) values (183,11);
+insert into t (id,a) values (183,12);
+insert into t (id,a) values (183,13);
+insert into t (id,a) values (183,14);
+insert into t (id,a) values (183,15);
+insert into t (id,a) values (183,16);
+insert into t (id,a) values (183,17);
+insert into t (id,a) values (183,18);
+insert into t (id,a) values (183,19);
+insert into t (id,a) values (183,20);
+insert into t (id,a) values (183,21);
+insert into t (id,a) values (183,22);
+insert into t (id,a) values (183,23);
+insert into t (id,a) values (183,24);
+insert into t (id,a) values (183,25);
+insert into t (id,a) values (183,26);
+insert into t (id,a) values (183,27);
+insert into t (id,a) values (183,28);
+insert into t (id,a) values (183,29);
+insert into t (id,a) values (183,30);
+insert into t (id,a) values (183,31);
+insert into t (id,a) values (183,32);
+insert into t (id,a) values (183,33);
+insert into t (id,a) values (183,34);
+insert into t (id,a) values (183,35);
+insert into t (id,a) values (183,36);
+insert into t (id,a) values (183,37);
+insert into t (id,a) values (183,38);
+insert into t (id,a) values (183,39);
+insert into t (id,a) values (183,40);
+insert into t (id,a) values (183,41);
+insert into t (id,a) values (183,42);
+insert into t (id,a) values (183,43);
+insert into t (id,a) values (183,44);
+insert into t (id,a) values (183,45);
+insert into t (id,a) values (183,46);
+insert into t (id,a) values (183,47);
+insert into t (id,a) values (183,48);
+insert into t (id,a) values (183,49);
+insert into t (id,a) values (183,50);
+insert into t (id,a) values (183,51);
+insert into t (id,a) values (183,52);
+insert into t (id,a) values (183,53);
+insert into t (id,a) values (183,54);
+insert into t (id,a) values (183,55);
+insert into t (id,a) values (183,56);
+insert into t (id,a) values (183,57);
+insert into t (id,a) values (183,58);
+insert into t (id,a) values (183,59);
+insert into t (id,a) values (183,60);
+insert into t (id,a) values (183,61);
+insert into t (id,a) values (183,62);
+insert into t (id,a) values (183,63);
+insert into t (id,a) values (183,64);
+insert into t (id,a) values (183,65);
+insert into t (id,a) values (183,66);
+insert into t (id,a) values (183,67);
+insert into t (id,a) values (183,68);
+insert into t (id,a) values (183,69);
+insert into t (id,a) values (183,70);
+insert into t (id,a) values (183,71);
+insert into t (id,a) values (183,72);
+insert into t (id,a) values (183,73);
+insert into t (id,a) values (183,74);
+insert into t (id,a) values (183,75);
+insert into t (id,a) values (183,76);
+insert into t (id,a) values (183,77);
+insert into t (id,a) values (183,78);
+insert into t (id,a) values (183,79);
+insert into t (id,a) values (183,80);
+insert into t (id,a) values (183,81);
+insert into t (id,a) values (183,82);
+insert into t (id,a) values (183,83);
+insert into t (id,a) values (183,84);
+insert into t (id,a) values (183,85);
+insert into t (id,a) values (183,86);
+insert into t (id,a) values (183,87);
+insert into t (id,a) values (183,88);
+insert into t (id,a) values (183,89);
+insert into t (id,a) values (183,90);
+insert into t (id,a) values (183,91);
+insert into t (id,a) values (183,92);
+insert into t (id,a) values (183,93);
+insert into t (id,a) values (183,94);
+insert into t (id,a) values (183,95);
+insert into t (id,a) values (183,96);
+insert into t (id,a) values (183,97);
+insert into t (id,a) values (183,98);
+insert into t (id,a) values (183,99);
+insert into t (id,a) values (184,0);
+insert into t (id,a) values (184,1);
+insert into t (id,a) values (184,2);
+insert into t (id,a) values (184,3);
+insert into t (id,a) values (184,4);
+insert into t (id,a) values (184,5);
+insert into t (id,a) values (184,6);
+insert into t (id,a) values (184,7);
+insert into t (id,a) values (184,8);
+insert into t (id,a) values (184,9);
+insert into t (id,a) values (184,10);
+insert into t (id,a) values (184,11);
+insert into t (id,a) values (184,12);
+insert into t (id,a) values (184,13);
+insert into t (id,a) values (184,14);
+insert into t (id,a) values (184,15);
+insert into t (id,a) values (184,16);
+insert into t (id,a) values (184,17);
+insert into t (id,a) values (184,18);
+insert into t (id,a) values (184,19);
+insert into t (id,a) values (184,20);
+insert into t (id,a) values (184,21);
+insert into t (id,a) values (184,22);
+insert into t (id,a) values (184,23);
+insert into t (id,a) values (184,24);
+insert into t (id,a) values (184,25);
+insert into t (id,a) values (184,26);
+insert into t (id,a) values (184,27);
+insert into t (id,a) values (184,28);
+insert into t (id,a) values (184,29);
+insert into t (id,a) values (184,30);
+insert into t (id,a) values (184,31);
+insert into t (id,a) values (184,32);
+insert into t (id,a) values (184,33);
+insert into t (id,a) values (184,34);
+insert into t (id,a) values (184,35);
+insert into t (id,a) values (184,36);
+insert into t (id,a) values (184,37);
+insert into t (id,a) values (184,38);
+insert into t (id,a) values (184,39);
+insert into t (id,a) values (184,40);
+insert into t (id,a) values (184,41);
+insert into t (id,a) values (184,42);
+insert into t (id,a) values (184,43);
+insert into t (id,a) values (184,44);
+insert into t (id,a) values (184,45);
+insert into t (id,a) values (184,46);
+insert into t (id,a) values (184,47);
+insert into t (id,a) values (184,48);
+insert into t (id,a) values (184,49);
+insert into t (id,a) values (184,50);
+insert into t (id,a) values (184,51);
+insert into t (id,a) values (184,52);
+insert into t (id,a) values (184,53);
+insert into t (id,a) values (184,54);
+insert into t (id,a) values (184,55);
+insert into t (id,a) values (184,56);
+insert into t (id,a) values (184,57);
+insert into t (id,a) values (184,58);
+insert into t (id,a) values (184,59);
+insert into t (id,a) values (184,60);
+insert into t (id,a) values (184,61);
+insert into t (id,a) values (184,62);
+insert into t (id,a) values (184,63);
+insert into t (id,a) values (184,64);
+insert into t (id,a) values (184,65);
+insert into t (id,a) values (184,66);
+insert into t (id,a) values (184,67);
+insert into t (id,a) values (184,68);
+insert into t (id,a) values (184,69);
+insert into t (id,a) values (184,70);
+insert into t (id,a) values (184,71);
+insert into t (id,a) values (184,72);
+insert into t (id,a) values (184,73);
+insert into t (id,a) values (184,74);
+insert into t (id,a) values (184,75);
+insert into t (id,a) values (184,76);
+insert into t (id,a) values (184,77);
+insert into t (id,a) values (184,78);
+insert into t (id,a) values (184,79);
+insert into t (id,a) values (184,80);
+insert into t (id,a) values (184,81);
+insert into t (id,a) values (184,82);
+insert into t (id,a) values (184,83);
+insert into t (id,a) values (184,84);
+insert into t (id,a) values (184,85);
+insert into t (id,a) values (184,86);
+insert into t (id,a) values (184,87);
+insert into t (id,a) values (184,88);
+insert into t (id,a) values (184,89);
+insert into t (id,a) values (184,90);
+insert into t (id,a) values (184,91);
+insert into t (id,a) values (184,92);
+insert into t (id,a) values (184,93);
+insert into t (id,a) values (184,94);
+insert into t (id,a) values (184,95);
+insert into t (id,a) values (184,96);
+insert into t (id,a) values (184,97);
+insert into t (id,a) values (184,98);
+insert into t (id,a) values (184,99);
+insert into t (id,a) values (185,0);
+insert into t (id,a) values (185,1);
+insert into t (id,a) values (185,2);
+insert into t (id,a) values (185,3);
+insert into t (id,a) values (185,4);
+insert into t (id,a) values (185,5);
+insert into t (id,a) values (185,6);
+insert into t (id,a) values (185,7);
+insert into t (id,a) values (185,8);
+insert into t (id,a) values (185,9);
+insert into t (id,a) values (185,10);
+insert into t (id,a) values (185,11);
+insert into t (id,a) values (185,12);
+insert into t (id,a) values (185,13);
+insert into t (id,a) values (185,14);
+insert into t (id,a) values (185,15);
+insert into t (id,a) values (185,16);
+insert into t (id,a) values (185,17);
+insert into t (id,a) values (185,18);
+insert into t (id,a) values (185,19);
+insert into t (id,a) values (185,20);
+insert into t (id,a) values (185,21);
+insert into t (id,a) values (185,22);
+insert into t (id,a) values (185,23);
+insert into t (id,a) values (185,24);
+insert into t (id,a) values (185,25);
+insert into t (id,a) values (185,26);
+insert into t (id,a) values (185,27);
+insert into t (id,a) values (185,28);
+insert into t (id,a) values (185,29);
+insert into t (id,a) values (185,30);
+insert into t (id,a) values (185,31);
+insert into t (id,a) values (185,32);
+insert into t (id,a) values (185,33);
+insert into t (id,a) values (185,34);
+insert into t (id,a) values (185,35);
+insert into t (id,a) values (185,36);
+insert into t (id,a) values (185,37);
+insert into t (id,a) values (185,38);
+insert into t (id,a) values (185,39);
+insert into t (id,a) values (185,40);
+insert into t (id,a) values (185,41);
+insert into t (id,a) values (185,42);
+insert into t (id,a) values (185,43);
+insert into t (id,a) values (185,44);
+insert into t (id,a) values (185,45);
+insert into t (id,a) values (185,46);
+insert into t (id,a) values (185,47);
+insert into t (id,a) values (185,48);
+insert into t (id,a) values (185,49);
+insert into t (id,a) values (185,50);
+insert into t (id,a) values (185,51);
+insert into t (id,a) values (185,52);
+insert into t (id,a) values (185,53);
+insert into t (id,a) values (185,54);
+insert into t (id,a) values (185,55);
+insert into t (id,a) values (185,56);
+insert into t (id,a) values (185,57);
+insert into t (id,a) values (185,58);
+insert into t (id,a) values (185,59);
+insert into t (id,a) values (185,60);
+insert into t (id,a) values (185,61);
+insert into t (id,a) values (185,62);
+insert into t (id,a) values (185,63);
+insert into t (id,a) values (185,64);
+insert into t (id,a) values (185,65);
+insert into t (id,a) values (185,66);
+insert into t (id,a) values (185,67);
+insert into t (id,a) values (185,68);
+insert into t (id,a) values (185,69);
+insert into t (id,a) values (185,70);
+insert into t (id,a) values (185,71);
+insert into t (id,a) values (185,72);
+insert into t (id,a) values (185,73);
+insert into t (id,a) values (185,74);
+insert into t (id,a) values (185,75);
+insert into t (id,a) values (185,76);
+insert into t (id,a) values (185,77);
+insert into t (id,a) values (185,78);
+insert into t (id,a) values (185,79);
+insert into t (id,a) values (185,80);
+insert into t (id,a) values (185,81);
+insert into t (id,a) values (185,82);
+insert into t (id,a) values (185,83);
+insert into t (id,a) values (185,84);
+insert into t (id,a) values (185,85);
+insert into t (id,a) values (185,86);
+insert into t (id,a) values (185,87);
+insert into t (id,a) values (185,88);
+insert into t (id,a) values (185,89);
+insert into t (id,a) values (185,90);
+insert into t (id,a) values (185,91);
+insert into t (id,a) values (185,92);
+insert into t (id,a) values (185,93);
+insert into t (id,a) values (185,94);
+insert into t (id,a) values (185,95);
+insert into t (id,a) values (185,96);
+insert into t (id,a) values (185,97);
+insert into t (id,a) values (185,98);
+insert into t (id,a) values (185,99);
+insert into t (id,a) values (186,0);
+insert into t (id,a) values (186,1);
+insert into t (id,a) values (186,2);
+insert into t (id,a) values (186,3);
+insert into t (id,a) values (186,4);
+insert into t (id,a) values (186,5);
+insert into t (id,a) values (186,6);
+insert into t (id,a) values (186,7);
+insert into t (id,a) values (186,8);
+insert into t (id,a) values (186,9);
+insert into t (id,a) values (186,10);
+insert into t (id,a) values (186,11);
+insert into t (id,a) values (186,12);
+insert into t (id,a) values (186,13);
+insert into t (id,a) values (186,14);
+insert into t (id,a) values (186,15);
+insert into t (id,a) values (186,16);
+insert into t (id,a) values (186,17);
+insert into t (id,a) values (186,18);
+insert into t (id,a) values (186,19);
+insert into t (id,a) values (186,20);
+insert into t (id,a) values (186,21);
+insert into t (id,a) values (186,22);
+insert into t (id,a) values (186,23);
+insert into t (id,a) values (186,24);
+insert into t (id,a) values (186,25);
+insert into t (id,a) values (186,26);
+insert into t (id,a) values (186,27);
+insert into t (id,a) values (186,28);
+insert into t (id,a) values (186,29);
+insert into t (id,a) values (186,30);
+insert into t (id,a) values (186,31);
+insert into t (id,a) values (186,32);
+insert into t (id,a) values (186,33);
+insert into t (id,a) values (186,34);
+insert into t (id,a) values (186,35);
+insert into t (id,a) values (186,36);
+insert into t (id,a) values (186,37);
+insert into t (id,a) values (186,38);
+insert into t (id,a) values (186,39);
+insert into t (id,a) values (186,40);
+insert into t (id,a) values (186,41);
+insert into t (id,a) values (186,42);
+insert into t (id,a) values (186,43);
+insert into t (id,a) values (186,44);
+insert into t (id,a) values (186,45);
+insert into t (id,a) values (186,46);
+insert into t (id,a) values (186,47);
+insert into t (id,a) values (186,48);
+insert into t (id,a) values (186,49);
+insert into t (id,a) values (186,50);
+insert into t (id,a) values (186,51);
+insert into t (id,a) values (186,52);
+insert into t (id,a) values (186,53);
+insert into t (id,a) values (186,54);
+insert into t (id,a) values (186,55);
+insert into t (id,a) values (186,56);
+insert into t (id,a) values (186,57);
+insert into t (id,a) values (186,58);
+insert into t (id,a) values (186,59);
+insert into t (id,a) values (186,60);
+insert into t (id,a) values (186,61);
+insert into t (id,a) values (186,62);
+insert into t (id,a) values (186,63);
+insert into t (id,a) values (186,64);
+insert into t (id,a) values (186,65);
+insert into t (id,a) values (186,66);
+insert into t (id,a) values (186,67);
+insert into t (id,a) values (186,68);
+insert into t (id,a) values (186,69);
+insert into t (id,a) values (186,70);
+insert into t (id,a) values (186,71);
+insert into t (id,a) values (186,72);
+insert into t (id,a) values (186,73);
+insert into t (id,a) values (186,74);
+insert into t (id,a) values (186,75);
+insert into t (id,a) values (186,76);
+insert into t (id,a) values (186,77);
+insert into t (id,a) values (186,78);
+insert into t (id,a) values (186,79);
+insert into t (id,a) values (186,80);
+insert into t (id,a) values (186,81);
+insert into t (id,a) values (186,82);
+insert into t (id,a) values (186,83);
+insert into t (id,a) values (186,84);
+insert into t (id,a) values (186,85);
+insert into t (id,a) values (186,86);
+insert into t (id,a) values (186,87);
+insert into t (id,a) values (186,88);
+insert into t (id,a) values (186,89);
+insert into t (id,a) values (186,90);
+insert into t (id,a) values (186,91);
+insert into t (id,a) values (186,92);
+insert into t (id,a) values (186,93);
+insert into t (id,a) values (186,94);
+insert into t (id,a) values (186,95);
+insert into t (id,a) values (186,96);
+insert into t (id,a) values (186,97);
+insert into t (id,a) values (186,98);
+insert into t (id,a) values (186,99);
+insert into t (id,a) values (187,0);
+insert into t (id,a) values (187,1);
+insert into t (id,a) values (187,2);
+insert into t (id,a) values (187,3);
+insert into t (id,a) values (187,4);
+insert into t (id,a) values (187,5);
+insert into t (id,a) values (187,6);
+insert into t (id,a) values (187,7);
+insert into t (id,a) values (187,8);
+insert into t (id,a) values (187,9);
+insert into t (id,a) values (187,10);
+insert into t (id,a) values (187,11);
+insert into t (id,a) values (187,12);
+insert into t (id,a) values (187,13);
+insert into t (id,a) values (187,14);
+insert into t (id,a) values (187,15);
+insert into t (id,a) values (187,16);
+insert into t (id,a) values (187,17);
+insert into t (id,a) values (187,18);
+insert into t (id,a) values (187,19);
+insert into t (id,a) values (187,20);
+insert into t (id,a) values (187,21);
+insert into t (id,a) values (187,22);
+insert into t (id,a) values (187,23);
+insert into t (id,a) values (187,24);
+insert into t (id,a) values (187,25);
+insert into t (id,a) values (187,26);
+insert into t (id,a) values (187,27);
+insert into t (id,a) values (187,28);
+insert into t (id,a) values (187,29);
+insert into t (id,a) values (187,30);
+insert into t (id,a) values (187,31);
+insert into t (id,a) values (187,32);
+insert into t (id,a) values (187,33);
+insert into t (id,a) values (187,34);
+insert into t (id,a) values (187,35);
+insert into t (id,a) values (187,36);
+insert into t (id,a) values (187,37);
+insert into t (id,a) values (187,38);
+insert into t (id,a) values (187,39);
+insert into t (id,a) values (187,40);
+insert into t (id,a) values (187,41);
+insert into t (id,a) values (187,42);
+insert into t (id,a) values (187,43);
+insert into t (id,a) values (187,44);
+insert into t (id,a) values (187,45);
+insert into t (id,a) values (187,46);
+insert into t (id,a) values (187,47);
+insert into t (id,a) values (187,48);
+insert into t (id,a) values (187,49);
+insert into t (id,a) values (187,50);
+insert into t (id,a) values (187,51);
+insert into t (id,a) values (187,52);
+insert into t (id,a) values (187,53);
+insert into t (id,a) values (187,54);
+insert into t (id,a) values (187,55);
+insert into t (id,a) values (187,56);
+insert into t (id,a) values (187,57);
+insert into t (id,a) values (187,58);
+insert into t (id,a) values (187,59);
+insert into t (id,a) values (187,60);
+insert into t (id,a) values (187,61);
+insert into t (id,a) values (187,62);
+insert into t (id,a) values (187,63);
+insert into t (id,a) values (187,64);
+insert into t (id,a) values (187,65);
+insert into t (id,a) values (187,66);
+insert into t (id,a) values (187,67);
+insert into t (id,a) values (187,68);
+insert into t (id,a) values (187,69);
+insert into t (id,a) values (187,70);
+insert into t (id,a) values (187,71);
+insert into t (id,a) values (187,72);
+insert into t (id,a) values (187,73);
+insert into t (id,a) values (187,74);
+insert into t (id,a) values (187,75);
+insert into t (id,a) values (187,76);
+insert into t (id,a) values (187,77);
+insert into t (id,a) values (187,78);
+insert into t (id,a) values (187,79);
+insert into t (id,a) values (187,80);
+insert into t (id,a) values (187,81);
+insert into t (id,a) values (187,82);
+insert into t (id,a) values (187,83);
+insert into t (id,a) values (187,84);
+insert into t (id,a) values (187,85);
+insert into t (id,a) values (187,86);
+insert into t (id,a) values (187,87);
+insert into t (id,a) values (187,88);
+insert into t (id,a) values (187,89);
+insert into t (id,a) values (187,90);
+insert into t (id,a) values (187,91);
+insert into t (id,a) values (187,92);
+insert into t (id,a) values (187,93);
+insert into t (id,a) values (187,94);
+insert into t (id,a) values (187,95);
+insert into t (id,a) values (187,96);
+insert into t (id,a) values (187,97);
+insert into t (id,a) values (187,98);
+insert into t (id,a) values (187,99);
+insert into t (id,a) values (188,0);
+insert into t (id,a) values (188,1);
+insert into t (id,a) values (188,2);
+insert into t (id,a) values (188,3);
+insert into t (id,a) values (188,4);
+insert into t (id,a) values (188,5);
+insert into t (id,a) values (188,6);
+insert into t (id,a) values (188,7);
+insert into t (id,a) values (188,8);
+insert into t (id,a) values (188,9);
+insert into t (id,a) values (188,10);
+insert into t (id,a) values (188,11);
+insert into t (id,a) values (188,12);
+insert into t (id,a) values (188,13);
+insert into t (id,a) values (188,14);
+insert into t (id,a) values (188,15);
+insert into t (id,a) values (188,16);
+insert into t (id,a) values (188,17);
+insert into t (id,a) values (188,18);
+insert into t (id,a) values (188,19);
+insert into t (id,a) values (188,20);
+insert into t (id,a) values (188,21);
+insert into t (id,a) values (188,22);
+insert into t (id,a) values (188,23);
+insert into t (id,a) values (188,24);
+insert into t (id,a) values (188,25);
+insert into t (id,a) values (188,26);
+insert into t (id,a) values (188,27);
+insert into t (id,a) values (188,28);
+insert into t (id,a) values (188,29);
+insert into t (id,a) values (188,30);
+insert into t (id,a) values (188,31);
+insert into t (id,a) values (188,32);
+insert into t (id,a) values (188,33);
+insert into t (id,a) values (188,34);
+insert into t (id,a) values (188,35);
+insert into t (id,a) values (188,36);
+insert into t (id,a) values (188,37);
+insert into t (id,a) values (188,38);
+insert into t (id,a) values (188,39);
+insert into t (id,a) values (188,40);
+insert into t (id,a) values (188,41);
+insert into t (id,a) values (188,42);
+insert into t (id,a) values (188,43);
+insert into t (id,a) values (188,44);
+insert into t (id,a) values (188,45);
+insert into t (id,a) values (188,46);
+insert into t (id,a) values (188,47);
+insert into t (id,a) values (188,48);
+insert into t (id,a) values (188,49);
+insert into t (id,a) values (188,50);
+insert into t (id,a) values (188,51);
+insert into t (id,a) values (188,52);
+insert into t (id,a) values (188,53);
+insert into t (id,a) values (188,54);
+insert into t (id,a) values (188,55);
+insert into t (id,a) values (188,56);
+insert into t (id,a) values (188,57);
+insert into t (id,a) values (188,58);
+insert into t (id,a) values (188,59);
+insert into t (id,a) values (188,60);
+insert into t (id,a) values (188,61);
+insert into t (id,a) values (188,62);
+insert into t (id,a) values (188,63);
+insert into t (id,a) values (188,64);
+insert into t (id,a) values (188,65);
+insert into t (id,a) values (188,66);
+insert into t (id,a) values (188,67);
+insert into t (id,a) values (188,68);
+insert into t (id,a) values (188,69);
+insert into t (id,a) values (188,70);
+insert into t (id,a) values (188,71);
+insert into t (id,a) values (188,72);
+insert into t (id,a) values (188,73);
+insert into t (id,a) values (188,74);
+insert into t (id,a) values (188,75);
+insert into t (id,a) values (188,76);
+insert into t (id,a) values (188,77);
+insert into t (id,a) values (188,78);
+insert into t (id,a) values (188,79);
+insert into t (id,a) values (188,80);
+insert into t (id,a) values (188,81);
+insert into t (id,a) values (188,82);
+insert into t (id,a) values (188,83);
+insert into t (id,a) values (188,84);
+insert into t (id,a) values (188,85);
+insert into t (id,a) values (188,86);
+insert into t (id,a) values (188,87);
+insert into t (id,a) values (188,88);
+insert into t (id,a) values (188,89);
+insert into t (id,a) values (188,90);
+insert into t (id,a) values (188,91);
+insert into t (id,a) values (188,92);
+insert into t (id,a) values (188,93);
+insert into t (id,a) values (188,94);
+insert into t (id,a) values (188,95);
+insert into t (id,a) values (188,96);
+insert into t (id,a) values (188,97);
+insert into t (id,a) values (188,98);
+insert into t (id,a) values (188,99);
+insert into t (id,a) values (189,0);
+insert into t (id,a) values (189,1);
+insert into t (id,a) values (189,2);
+insert into t (id,a) values (189,3);
+insert into t (id,a) values (189,4);
+insert into t (id,a) values (189,5);
+insert into t (id,a) values (189,6);
+insert into t (id,a) values (189,7);
+insert into t (id,a) values (189,8);
+insert into t (id,a) values (189,9);
+insert into t (id,a) values (189,10);
+insert into t (id,a) values (189,11);
+insert into t (id,a) values (189,12);
+insert into t (id,a) values (189,13);
+insert into t (id,a) values (189,14);
+insert into t (id,a) values (189,15);
+insert into t (id,a) values (189,16);
+insert into t (id,a) values (189,17);
+insert into t (id,a) values (189,18);
+insert into t (id,a) values (189,19);
+insert into t (id,a) values (189,20);
+insert into t (id,a) values (189,21);
+insert into t (id,a) values (189,22);
+insert into t (id,a) values (189,23);
+insert into t (id,a) values (189,24);
+insert into t (id,a) values (189,25);
+insert into t (id,a) values (189,26);
+insert into t (id,a) values (189,27);
+insert into t (id,a) values (189,28);
+insert into t (id,a) values (189,29);
+insert into t (id,a) values (189,30);
+insert into t (id,a) values (189,31);
+insert into t (id,a) values (189,32);
+insert into t (id,a) values (189,33);
+insert into t (id,a) values (189,34);
+insert into t (id,a) values (189,35);
+insert into t (id,a) values (189,36);
+insert into t (id,a) values (189,37);
+insert into t (id,a) values (189,38);
+insert into t (id,a) values (189,39);
+insert into t (id,a) values (189,40);
+insert into t (id,a) values (189,41);
+insert into t (id,a) values (189,42);
+insert into t (id,a) values (189,43);
+insert into t (id,a) values (189,44);
+insert into t (id,a) values (189,45);
+insert into t (id,a) values (189,46);
+insert into t (id,a) values (189,47);
+insert into t (id,a) values (189,48);
+insert into t (id,a) values (189,49);
+insert into t (id,a) values (189,50);
+insert into t (id,a) values (189,51);
+insert into t (id,a) values (189,52);
+insert into t (id,a) values (189,53);
+insert into t (id,a) values (189,54);
+insert into t (id,a) values (189,55);
+insert into t (id,a) values (189,56);
+insert into t (id,a) values (189,57);
+insert into t (id,a) values (189,58);
+insert into t (id,a) values (189,59);
+insert into t (id,a) values (189,60);
+insert into t (id,a) values (189,61);
+insert into t (id,a) values (189,62);
+insert into t (id,a) values (189,63);
+insert into t (id,a) values (189,64);
+insert into t (id,a) values (189,65);
+insert into t (id,a) values (189,66);
+insert into t (id,a) values (189,67);
+insert into t (id,a) values (189,68);
+insert into t (id,a) values (189,69);
+insert into t (id,a) values (189,70);
+insert into t (id,a) values (189,71);
+insert into t (id,a) values (189,72);
+insert into t (id,a) values (189,73);
+insert into t (id,a) values (189,74);
+insert into t (id,a) values (189,75);
+insert into t (id,a) values (189,76);
+insert into t (id,a) values (189,77);
+insert into t (id,a) values (189,78);
+insert into t (id,a) values (189,79);
+insert into t (id,a) values (189,80);
+insert into t (id,a) values (189,81);
+insert into t (id,a) values (189,82);
+insert into t (id,a) values (189,83);
+insert into t (id,a) values (189,84);
+insert into t (id,a) values (189,85);
+insert into t (id,a) values (189,86);
+insert into t (id,a) values (189,87);
+insert into t (id,a) values (189,88);
+insert into t (id,a) values (189,89);
+insert into t (id,a) values (189,90);
+insert into t (id,a) values (189,91);
+insert into t (id,a) values (189,92);
+insert into t (id,a) values (189,93);
+insert into t (id,a) values (189,94);
+insert into t (id,a) values (189,95);
+insert into t (id,a) values (189,96);
+insert into t (id,a) values (189,97);
+insert into t (id,a) values (189,98);
+insert into t (id,a) values (189,99);
+insert into t (id,a) values (190,0);
+insert into t (id,a) values (190,1);
+insert into t (id,a) values (190,2);
+insert into t (id,a) values (190,3);
+insert into t (id,a) values (190,4);
+insert into t (id,a) values (190,5);
+insert into t (id,a) values (190,6);
+insert into t (id,a) values (190,7);
+insert into t (id,a) values (190,8);
+insert into t (id,a) values (190,9);
+insert into t (id,a) values (190,10);
+insert into t (id,a) values (190,11);
+insert into t (id,a) values (190,12);
+insert into t (id,a) values (190,13);
+insert into t (id,a) values (190,14);
+insert into t (id,a) values (190,15);
+insert into t (id,a) values (190,16);
+insert into t (id,a) values (190,17);
+insert into t (id,a) values (190,18);
+insert into t (id,a) values (190,19);
+insert into t (id,a) values (190,20);
+insert into t (id,a) values (190,21);
+insert into t (id,a) values (190,22);
+insert into t (id,a) values (190,23);
+insert into t (id,a) values (190,24);
+insert into t (id,a) values (190,25);
+insert into t (id,a) values (190,26);
+insert into t (id,a) values (190,27);
+insert into t (id,a) values (190,28);
+insert into t (id,a) values (190,29);
+insert into t (id,a) values (190,30);
+insert into t (id,a) values (190,31);
+insert into t (id,a) values (190,32);
+insert into t (id,a) values (190,33);
+insert into t (id,a) values (190,34);
+insert into t (id,a) values (190,35);
+insert into t (id,a) values (190,36);
+insert into t (id,a) values (190,37);
+insert into t (id,a) values (190,38);
+insert into t (id,a) values (190,39);
+insert into t (id,a) values (190,40);
+insert into t (id,a) values (190,41);
+insert into t (id,a) values (190,42);
+insert into t (id,a) values (190,43);
+insert into t (id,a) values (190,44);
+insert into t (id,a) values (190,45);
+insert into t (id,a) values (190,46);
+insert into t (id,a) values (190,47);
+insert into t (id,a) values (190,48);
+insert into t (id,a) values (190,49);
+insert into t (id,a) values (190,50);
+insert into t (id,a) values (190,51);
+insert into t (id,a) values (190,52);
+insert into t (id,a) values (190,53);
+insert into t (id,a) values (190,54);
+insert into t (id,a) values (190,55);
+insert into t (id,a) values (190,56);
+insert into t (id,a) values (190,57);
+insert into t (id,a) values (190,58);
+insert into t (id,a) values (190,59);
+insert into t (id,a) values (190,60);
+insert into t (id,a) values (190,61);
+insert into t (id,a) values (190,62);
+insert into t (id,a) values (190,63);
+insert into t (id,a) values (190,64);
+insert into t (id,a) values (190,65);
+insert into t (id,a) values (190,66);
+insert into t (id,a) values (190,67);
+insert into t (id,a) values (190,68);
+insert into t (id,a) values (190,69);
+insert into t (id,a) values (190,70);
+insert into t (id,a) values (190,71);
+insert into t (id,a) values (190,72);
+insert into t (id,a) values (190,73);
+insert into t (id,a) values (190,74);
+insert into t (id,a) values (190,75);
+insert into t (id,a) values (190,76);
+insert into t (id,a) values (190,77);
+insert into t (id,a) values (190,78);
+insert into t (id,a) values (190,79);
+insert into t (id,a) values (190,80);
+insert into t (id,a) values (190,81);
+insert into t (id,a) values (190,82);
+insert into t (id,a) values (190,83);
+insert into t (id,a) values (190,84);
+insert into t (id,a) values (190,85);
+insert into t (id,a) values (190,86);
+insert into t (id,a) values (190,87);
+insert into t (id,a) values (190,88);
+insert into t (id,a) values (190,89);
+insert into t (id,a) values (190,90);
+insert into t (id,a) values (190,91);
+insert into t (id,a) values (190,92);
+insert into t (id,a) values (190,93);
+insert into t (id,a) values (190,94);
+insert into t (id,a) values (190,95);
+insert into t (id,a) values (190,96);
+insert into t (id,a) values (190,97);
+insert into t (id,a) values (190,98);
+insert into t (id,a) values (190,99);
+insert into t (id,a) values (191,0);
+insert into t (id,a) values (191,1);
+insert into t (id,a) values (191,2);
+insert into t (id,a) values (191,3);
+insert into t (id,a) values (191,4);
+insert into t (id,a) values (191,5);
+insert into t (id,a) values (191,6);
+insert into t (id,a) values (191,7);
+insert into t (id,a) values (191,8);
+insert into t (id,a) values (191,9);
+insert into t (id,a) values (191,10);
+insert into t (id,a) values (191,11);
+insert into t (id,a) values (191,12);
+insert into t (id,a) values (191,13);
+insert into t (id,a) values (191,14);
+insert into t (id,a) values (191,15);
+insert into t (id,a) values (191,16);
+insert into t (id,a) values (191,17);
+insert into t (id,a) values (191,18);
+insert into t (id,a) values (191,19);
+insert into t (id,a) values (191,20);
+insert into t (id,a) values (191,21);
+insert into t (id,a) values (191,22);
+insert into t (id,a) values (191,23);
+insert into t (id,a) values (191,24);
+insert into t (id,a) values (191,25);
+insert into t (id,a) values (191,26);
+insert into t (id,a) values (191,27);
+insert into t (id,a) values (191,28);
+insert into t (id,a) values (191,29);
+insert into t (id,a) values (191,30);
+insert into t (id,a) values (191,31);
+insert into t (id,a) values (191,32);
+insert into t (id,a) values (191,33);
+insert into t (id,a) values (191,34);
+insert into t (id,a) values (191,35);
+insert into t (id,a) values (191,36);
+insert into t (id,a) values (191,37);
+insert into t (id,a) values (191,38);
+insert into t (id,a) values (191,39);
+insert into t (id,a) values (191,40);
+insert into t (id,a) values (191,41);
+insert into t (id,a) values (191,42);
+insert into t (id,a) values (191,43);
+insert into t (id,a) values (191,44);
+insert into t (id,a) values (191,45);
+insert into t (id,a) values (191,46);
+insert into t (id,a) values (191,47);
+insert into t (id,a) values (191,48);
+insert into t (id,a) values (191,49);
+insert into t (id,a) values (191,50);
+insert into t (id,a) values (191,51);
+insert into t (id,a) values (191,52);
+insert into t (id,a) values (191,53);
+insert into t (id,a) values (191,54);
+insert into t (id,a) values (191,55);
+insert into t (id,a) values (191,56);
+insert into t (id,a) values (191,57);
+insert into t (id,a) values (191,58);
+insert into t (id,a) values (191,59);
+insert into t (id,a) values (191,60);
+insert into t (id,a) values (191,61);
+insert into t (id,a) values (191,62);
+insert into t (id,a) values (191,63);
+insert into t (id,a) values (191,64);
+insert into t (id,a) values (191,65);
+insert into t (id,a) values (191,66);
+insert into t (id,a) values (191,67);
+insert into t (id,a) values (191,68);
+insert into t (id,a) values (191,69);
+insert into t (id,a) values (191,70);
+insert into t (id,a) values (191,71);
+insert into t (id,a) values (191,72);
+insert into t (id,a) values (191,73);
+insert into t (id,a) values (191,74);
+insert into t (id,a) values (191,75);
+insert into t (id,a) values (191,76);
+insert into t (id,a) values (191,77);
+insert into t (id,a) values (191,78);
+insert into t (id,a) values (191,79);
+insert into t (id,a) values (191,80);
+insert into t (id,a) values (191,81);
+insert into t (id,a) values (191,82);
+insert into t (id,a) values (191,83);
+insert into t (id,a) values (191,84);
+insert into t (id,a) values (191,85);
+insert into t (id,a) values (191,86);
+insert into t (id,a) values (191,87);
+insert into t (id,a) values (191,88);
+insert into t (id,a) values (191,89);
+insert into t (id,a) values (191,90);
+insert into t (id,a) values (191,91);
+insert into t (id,a) values (191,92);
+insert into t (id,a) values (191,93);
+insert into t (id,a) values (191,94);
+insert into t (id,a) values (191,95);
+insert into t (id,a) values (191,96);
+insert into t (id,a) values (191,97);
+insert into t (id,a) values (191,98);
+insert into t (id,a) values (191,99);
+insert into t (id,a) values (192,0);
+insert into t (id,a) values (192,1);
+insert into t (id,a) values (192,2);
+insert into t (id,a) values (192,3);
+insert into t (id,a) values (192,4);
+insert into t (id,a) values (192,5);
+insert into t (id,a) values (192,6);
+insert into t (id,a) values (192,7);
+insert into t (id,a) values (192,8);
+insert into t (id,a) values (192,9);
+insert into t (id,a) values (192,10);
+insert into t (id,a) values (192,11);
+insert into t (id,a) values (192,12);
+insert into t (id,a) values (192,13);
+insert into t (id,a) values (192,14);
+insert into t (id,a) values (192,15);
+insert into t (id,a) values (192,16);
+insert into t (id,a) values (192,17);
+insert into t (id,a) values (192,18);
+insert into t (id,a) values (192,19);
+insert into t (id,a) values (192,20);
+insert into t (id,a) values (192,21);
+insert into t (id,a) values (192,22);
+insert into t (id,a) values (192,23);
+insert into t (id,a) values (192,24);
+insert into t (id,a) values (192,25);
+insert into t (id,a) values (192,26);
+insert into t (id,a) values (192,27);
+insert into t (id,a) values (192,28);
+insert into t (id,a) values (192,29);
+insert into t (id,a) values (192,30);
+insert into t (id,a) values (192,31);
+insert into t (id,a) values (192,32);
+insert into t (id,a) values (192,33);
+insert into t (id,a) values (192,34);
+insert into t (id,a) values (192,35);
+insert into t (id,a) values (192,36);
+insert into t (id,a) values (192,37);
+insert into t (id,a) values (192,38);
+insert into t (id,a) values (192,39);
+insert into t (id,a) values (192,40);
+insert into t (id,a) values (192,41);
+insert into t (id,a) values (192,42);
+insert into t (id,a) values (192,43);
+insert into t (id,a) values (192,44);
+insert into t (id,a) values (192,45);
+insert into t (id,a) values (192,46);
+insert into t (id,a) values (192,47);
+insert into t (id,a) values (192,48);
+insert into t (id,a) values (192,49);
+insert into t (id,a) values (192,50);
+insert into t (id,a) values (192,51);
+insert into t (id,a) values (192,52);
+insert into t (id,a) values (192,53);
+insert into t (id,a) values (192,54);
+insert into t (id,a) values (192,55);
+insert into t (id,a) values (192,56);
+insert into t (id,a) values (192,57);
+insert into t (id,a) values (192,58);
+insert into t (id,a) values (192,59);
+insert into t (id,a) values (192,60);
+insert into t (id,a) values (192,61);
+insert into t (id,a) values (192,62);
+insert into t (id,a) values (192,63);
+insert into t (id,a) values (192,64);
+insert into t (id,a) values (192,65);
+insert into t (id,a) values (192,66);
+insert into t (id,a) values (192,67);
+insert into t (id,a) values (192,68);
+insert into t (id,a) values (192,69);
+insert into t (id,a) values (192,70);
+insert into t (id,a) values (192,71);
+insert into t (id,a) values (192,72);
+insert into t (id,a) values (192,73);
+insert into t (id,a) values (192,74);
+insert into t (id,a) values (192,75);
+insert into t (id,a) values (192,76);
+insert into t (id,a) values (192,77);
+insert into t (id,a) values (192,78);
+insert into t (id,a) values (192,79);
+insert into t (id,a) values (192,80);
+insert into t (id,a) values (192,81);
+insert into t (id,a) values (192,82);
+insert into t (id,a) values (192,83);
+insert into t (id,a) values (192,84);
+insert into t (id,a) values (192,85);
+insert into t (id,a) values (192,86);
+insert into t (id,a) values (192,87);
+insert into t (id,a) values (192,88);
+insert into t (id,a) values (192,89);
+insert into t (id,a) values (192,90);
+insert into t (id,a) values (192,91);
+insert into t (id,a) values (192,92);
+insert into t (id,a) values (192,93);
+insert into t (id,a) values (192,94);
+insert into t (id,a) values (192,95);
+insert into t (id,a) values (192,96);
+insert into t (id,a) values (192,97);
+insert into t (id,a) values (192,98);
+insert into t (id,a) values (192,99);
+insert into t (id,a) values (193,0);
+insert into t (id,a) values (193,1);
+insert into t (id,a) values (193,2);
+insert into t (id,a) values (193,3);
+insert into t (id,a) values (193,4);
+insert into t (id,a) values (193,5);
+insert into t (id,a) values (193,6);
+insert into t (id,a) values (193,7);
+insert into t (id,a) values (193,8);
+insert into t (id,a) values (193,9);
+insert into t (id,a) values (193,10);
+insert into t (id,a) values (193,11);
+insert into t (id,a) values (193,12);
+insert into t (id,a) values (193,13);
+insert into t (id,a) values (193,14);
+insert into t (id,a) values (193,15);
+insert into t (id,a) values (193,16);
+insert into t (id,a) values (193,17);
+insert into t (id,a) values (193,18);
+insert into t (id,a) values (193,19);
+insert into t (id,a) values (193,20);
+insert into t (id,a) values (193,21);
+insert into t (id,a) values (193,22);
+insert into t (id,a) values (193,23);
+insert into t (id,a) values (193,24);
+insert into t (id,a) values (193,25);
+insert into t (id,a) values (193,26);
+insert into t (id,a) values (193,27);
+insert into t (id,a) values (193,28);
+insert into t (id,a) values (193,29);
+insert into t (id,a) values (193,30);
+insert into t (id,a) values (193,31);
+insert into t (id,a) values (193,32);
+insert into t (id,a) values (193,33);
+insert into t (id,a) values (193,34);
+insert into t (id,a) values (193,35);
+insert into t (id,a) values (193,36);
+insert into t (id,a) values (193,37);
+insert into t (id,a) values (193,38);
+insert into t (id,a) values (193,39);
+insert into t (id,a) values (193,40);
+insert into t (id,a) values (193,41);
+insert into t (id,a) values (193,42);
+insert into t (id,a) values (193,43);
+insert into t (id,a) values (193,44);
+insert into t (id,a) values (193,45);
+insert into t (id,a) values (193,46);
+insert into t (id,a) values (193,47);
+insert into t (id,a) values (193,48);
+insert into t (id,a) values (193,49);
+insert into t (id,a) values (193,50);
+insert into t (id,a) values (193,51);
+insert into t (id,a) values (193,52);
+insert into t (id,a) values (193,53);
+insert into t (id,a) values (193,54);
+insert into t (id,a) values (193,55);
+insert into t (id,a) values (193,56);
+insert into t (id,a) values (193,57);
+insert into t (id,a) values (193,58);
+insert into t (id,a) values (193,59);
+insert into t (id,a) values (193,60);
+insert into t (id,a) values (193,61);
+insert into t (id,a) values (193,62);
+insert into t (id,a) values (193,63);
+insert into t (id,a) values (193,64);
+insert into t (id,a) values (193,65);
+insert into t (id,a) values (193,66);
+insert into t (id,a) values (193,67);
+insert into t (id,a) values (193,68);
+insert into t (id,a) values (193,69);
+insert into t (id,a) values (193,70);
+insert into t (id,a) values (193,71);
+insert into t (id,a) values (193,72);
+insert into t (id,a) values (193,73);
+insert into t (id,a) values (193,74);
+insert into t (id,a) values (193,75);
+insert into t (id,a) values (193,76);
+insert into t (id,a) values (193,77);
+insert into t (id,a) values (193,78);
+insert into t (id,a) values (193,79);
+insert into t (id,a) values (193,80);
+insert into t (id,a) values (193,81);
+insert into t (id,a) values (193,82);
+insert into t (id,a) values (193,83);
+insert into t (id,a) values (193,84);
+insert into t (id,a) values (193,85);
+insert into t (id,a) values (193,86);
+insert into t (id,a) values (193,87);
+insert into t (id,a) values (193,88);
+insert into t (id,a) values (193,89);
+insert into t (id,a) values (193,90);
+insert into t (id,a) values (193,91);
+insert into t (id,a) values (193,92);
+insert into t (id,a) values (193,93);
+insert into t (id,a) values (193,94);
+insert into t (id,a) values (193,95);
+insert into t (id,a) values (193,96);
+insert into t (id,a) values (193,97);
+insert into t (id,a) values (193,98);
+insert into t (id,a) values (193,99);
+insert into t (id,a) values (194,0);
+insert into t (id,a) values (194,1);
+insert into t (id,a) values (194,2);
+insert into t (id,a) values (194,3);
+insert into t (id,a) values (194,4);
+insert into t (id,a) values (194,5);
+insert into t (id,a) values (194,6);
+insert into t (id,a) values (194,7);
+insert into t (id,a) values (194,8);
+insert into t (id,a) values (194,9);
+insert into t (id,a) values (194,10);
+insert into t (id,a) values (194,11);
+insert into t (id,a) values (194,12);
+insert into t (id,a) values (194,13);
+insert into t (id,a) values (194,14);
+insert into t (id,a) values (194,15);
+insert into t (id,a) values (194,16);
+insert into t (id,a) values (194,17);
+insert into t (id,a) values (194,18);
+insert into t (id,a) values (194,19);
+insert into t (id,a) values (194,20);
+insert into t (id,a) values (194,21);
+insert into t (id,a) values (194,22);
+insert into t (id,a) values (194,23);
+insert into t (id,a) values (194,24);
+insert into t (id,a) values (194,25);
+insert into t (id,a) values (194,26);
+insert into t (id,a) values (194,27);
+insert into t (id,a) values (194,28);
+insert into t (id,a) values (194,29);
+insert into t (id,a) values (194,30);
+insert into t (id,a) values (194,31);
+insert into t (id,a) values (194,32);
+insert into t (id,a) values (194,33);
+insert into t (id,a) values (194,34);
+insert into t (id,a) values (194,35);
+insert into t (id,a) values (194,36);
+insert into t (id,a) values (194,37);
+insert into t (id,a) values (194,38);
+insert into t (id,a) values (194,39);
+insert into t (id,a) values (194,40);
+insert into t (id,a) values (194,41);
+insert into t (id,a) values (194,42);
+insert into t (id,a) values (194,43);
+insert into t (id,a) values (194,44);
+insert into t (id,a) values (194,45);
+insert into t (id,a) values (194,46);
+insert into t (id,a) values (194,47);
+insert into t (id,a) values (194,48);
+insert into t (id,a) values (194,49);
+insert into t (id,a) values (194,50);
+insert into t (id,a) values (194,51);
+insert into t (id,a) values (194,52);
+insert into t (id,a) values (194,53);
+insert into t (id,a) values (194,54);
+insert into t (id,a) values (194,55);
+insert into t (id,a) values (194,56);
+insert into t (id,a) values (194,57);
+insert into t (id,a) values (194,58);
+insert into t (id,a) values (194,59);
+insert into t (id,a) values (194,60);
+insert into t (id,a) values (194,61);
+insert into t (id,a) values (194,62);
+insert into t (id,a) values (194,63);
+insert into t (id,a) values (194,64);
+insert into t (id,a) values (194,65);
+insert into t (id,a) values (194,66);
+insert into t (id,a) values (194,67);
+insert into t (id,a) values (194,68);
+insert into t (id,a) values (194,69);
+insert into t (id,a) values (194,70);
+insert into t (id,a) values (194,71);
+insert into t (id,a) values (194,72);
+insert into t (id,a) values (194,73);
+insert into t (id,a) values (194,74);
+insert into t (id,a) values (194,75);
+insert into t (id,a) values (194,76);
+insert into t (id,a) values (194,77);
+insert into t (id,a) values (194,78);
+insert into t (id,a) values (194,79);
+insert into t (id,a) values (194,80);
+insert into t (id,a) values (194,81);
+insert into t (id,a) values (194,82);
+insert into t (id,a) values (194,83);
+insert into t (id,a) values (194,84);
+insert into t (id,a) values (194,85);
+insert into t (id,a) values (194,86);
+insert into t (id,a) values (194,87);
+insert into t (id,a) values (194,88);
+insert into t (id,a) values (194,89);
+insert into t (id,a) values (194,90);
+insert into t (id,a) values (194,91);
+insert into t (id,a) values (194,92);
+insert into t (id,a) values (194,93);
+insert into t (id,a) values (194,94);
+insert into t (id,a) values (194,95);
+insert into t (id,a) values (194,96);
+insert into t (id,a) values (194,97);
+insert into t (id,a) values (194,98);
+insert into t (id,a) values (194,99);
+insert into t (id,a) values (195,0);
+insert into t (id,a) values (195,1);
+insert into t (id,a) values (195,2);
+insert into t (id,a) values (195,3);
+insert into t (id,a) values (195,4);
+insert into t (id,a) values (195,5);
+insert into t (id,a) values (195,6);
+insert into t (id,a) values (195,7);
+insert into t (id,a) values (195,8);
+insert into t (id,a) values (195,9);
+insert into t (id,a) values (195,10);
+insert into t (id,a) values (195,11);
+insert into t (id,a) values (195,12);
+insert into t (id,a) values (195,13);
+insert into t (id,a) values (195,14);
+insert into t (id,a) values (195,15);
+insert into t (id,a) values (195,16);
+insert into t (id,a) values (195,17);
+insert into t (id,a) values (195,18);
+insert into t (id,a) values (195,19);
+insert into t (id,a) values (195,20);
+insert into t (id,a) values (195,21);
+insert into t (id,a) values (195,22);
+insert into t (id,a) values (195,23);
+insert into t (id,a) values (195,24);
+insert into t (id,a) values (195,25);
+insert into t (id,a) values (195,26);
+insert into t (id,a) values (195,27);
+insert into t (id,a) values (195,28);
+insert into t (id,a) values (195,29);
+insert into t (id,a) values (195,30);
+insert into t (id,a) values (195,31);
+insert into t (id,a) values (195,32);
+insert into t (id,a) values (195,33);
+insert into t (id,a) values (195,34);
+insert into t (id,a) values (195,35);
+insert into t (id,a) values (195,36);
+insert into t (id,a) values (195,37);
+insert into t (id,a) values (195,38);
+insert into t (id,a) values (195,39);
+insert into t (id,a) values (195,40);
+insert into t (id,a) values (195,41);
+insert into t (id,a) values (195,42);
+insert into t (id,a) values (195,43);
+insert into t (id,a) values (195,44);
+insert into t (id,a) values (195,45);
+insert into t (id,a) values (195,46);
+insert into t (id,a) values (195,47);
+insert into t (id,a) values (195,48);
+insert into t (id,a) values (195,49);
+insert into t (id,a) values (195,50);
+insert into t (id,a) values (195,51);
+insert into t (id,a) values (195,52);
+insert into t (id,a) values (195,53);
+insert into t (id,a) values (195,54);
+insert into t (id,a) values (195,55);
+insert into t (id,a) values (195,56);
+insert into t (id,a) values (195,57);
+insert into t (id,a) values (195,58);
+insert into t (id,a) values (195,59);
+insert into t (id,a) values (195,60);
+insert into t (id,a) values (195,61);
+insert into t (id,a) values (195,62);
+insert into t (id,a) values (195,63);
+insert into t (id,a) values (195,64);
+insert into t (id,a) values (195,65);
+insert into t (id,a) values (195,66);
+insert into t (id,a) values (195,67);
+insert into t (id,a) values (195,68);
+insert into t (id,a) values (195,69);
+insert into t (id,a) values (195,70);
+insert into t (id,a) values (195,71);
+insert into t (id,a) values (195,72);
+insert into t (id,a) values (195,73);
+insert into t (id,a) values (195,74);
+insert into t (id,a) values (195,75);
+insert into t (id,a) values (195,76);
+insert into t (id,a) values (195,77);
+insert into t (id,a) values (195,78);
+insert into t (id,a) values (195,79);
+insert into t (id,a) values (195,80);
+insert into t (id,a) values (195,81);
+insert into t (id,a) values (195,82);
+insert into t (id,a) values (195,83);
+insert into t (id,a) values (195,84);
+insert into t (id,a) values (195,85);
+insert into t (id,a) values (195,86);
+insert into t (id,a) values (195,87);
+insert into t (id,a) values (195,88);
+insert into t (id,a) values (195,89);
+insert into t (id,a) values (195,90);
+insert into t (id,a) values (195,91);
+insert into t (id,a) values (195,92);
+insert into t (id,a) values (195,93);
+insert into t (id,a) values (195,94);
+insert into t (id,a) values (195,95);
+insert into t (id,a) values (195,96);
+insert into t (id,a) values (195,97);
+insert into t (id,a) values (195,98);
+insert into t (id,a) values (195,99);
+insert into t (id,a) values (196,0);
+insert into t (id,a) values (196,1);
+insert into t (id,a) values (196,2);
+insert into t (id,a) values (196,3);
+insert into t (id,a) values (196,4);
+insert into t (id,a) values (196,5);
+insert into t (id,a) values (196,6);
+insert into t (id,a) values (196,7);
+insert into t (id,a) values (196,8);
+insert into t (id,a) values (196,9);
+insert into t (id,a) values (196,10);
+insert into t (id,a) values (196,11);
+insert into t (id,a) values (196,12);
+insert into t (id,a) values (196,13);
+insert into t (id,a) values (196,14);
+insert into t (id,a) values (196,15);
+insert into t (id,a) values (196,16);
+insert into t (id,a) values (196,17);
+insert into t (id,a) values (196,18);
+insert into t (id,a) values (196,19);
+insert into t (id,a) values (196,20);
+insert into t (id,a) values (196,21);
+insert into t (id,a) values (196,22);
+insert into t (id,a) values (196,23);
+insert into t (id,a) values (196,24);
+insert into t (id,a) values (196,25);
+insert into t (id,a) values (196,26);
+insert into t (id,a) values (196,27);
+insert into t (id,a) values (196,28);
+insert into t (id,a) values (196,29);
+insert into t (id,a) values (196,30);
+insert into t (id,a) values (196,31);
+insert into t (id,a) values (196,32);
+insert into t (id,a) values (196,33);
+insert into t (id,a) values (196,34);
+insert into t (id,a) values (196,35);
+insert into t (id,a) values (196,36);
+insert into t (id,a) values (196,37);
+insert into t (id,a) values (196,38);
+insert into t (id,a) values (196,39);
+insert into t (id,a) values (196,40);
+insert into t (id,a) values (196,41);
+insert into t (id,a) values (196,42);
+insert into t (id,a) values (196,43);
+insert into t (id,a) values (196,44);
+insert into t (id,a) values (196,45);
+insert into t (id,a) values (196,46);
+insert into t (id,a) values (196,47);
+insert into t (id,a) values (196,48);
+insert into t (id,a) values (196,49);
+insert into t (id,a) values (196,50);
+insert into t (id,a) values (196,51);
+insert into t (id,a) values (196,52);
+insert into t (id,a) values (196,53);
+insert into t (id,a) values (196,54);
+insert into t (id,a) values (196,55);
+insert into t (id,a) values (196,56);
+insert into t (id,a) values (196,57);
+insert into t (id,a) values (196,58);
+insert into t (id,a) values (196,59);
+insert into t (id,a) values (196,60);
+insert into t (id,a) values (196,61);
+insert into t (id,a) values (196,62);
+insert into t (id,a) values (196,63);
+insert into t (id,a) values (196,64);
+insert into t (id,a) values (196,65);
+insert into t (id,a) values (196,66);
+insert into t (id,a) values (196,67);
+insert into t (id,a) values (196,68);
+insert into t (id,a) values (196,69);
+insert into t (id,a) values (196,70);
+insert into t (id,a) values (196,71);
+insert into t (id,a) values (196,72);
+insert into t (id,a) values (196,73);
+insert into t (id,a) values (196,74);
+insert into t (id,a) values (196,75);
+insert into t (id,a) values (196,76);
+insert into t (id,a) values (196,77);
+insert into t (id,a) values (196,78);
+insert into t (id,a) values (196,79);
+insert into t (id,a) values (196,80);
+insert into t (id,a) values (196,81);
+insert into t (id,a) values (196,82);
+insert into t (id,a) values (196,83);
+insert into t (id,a) values (196,84);
+insert into t (id,a) values (196,85);
+insert into t (id,a) values (196,86);
+insert into t (id,a) values (196,87);
+insert into t (id,a) values (196,88);
+insert into t (id,a) values (196,89);
+insert into t (id,a) values (196,90);
+insert into t (id,a) values (196,91);
+insert into t (id,a) values (196,92);
+insert into t (id,a) values (196,93);
+insert into t (id,a) values (196,94);
+insert into t (id,a) values (196,95);
+insert into t (id,a) values (196,96);
+insert into t (id,a) values (196,97);
+insert into t (id,a) values (196,98);
+insert into t (id,a) values (196,99);
+insert into t (id,a) values (197,0);
+insert into t (id,a) values (197,1);
+insert into t (id,a) values (197,2);
+insert into t (id,a) values (197,3);
+insert into t (id,a) values (197,4);
+insert into t (id,a) values (197,5);
+insert into t (id,a) values (197,6);
+insert into t (id,a) values (197,7);
+insert into t (id,a) values (197,8);
+insert into t (id,a) values (197,9);
+insert into t (id,a) values (197,10);
+insert into t (id,a) values (197,11);
+insert into t (id,a) values (197,12);
+insert into t (id,a) values (197,13);
+insert into t (id,a) values (197,14);
+insert into t (id,a) values (197,15);
+insert into t (id,a) values (197,16);
+insert into t (id,a) values (197,17);
+insert into t (id,a) values (197,18);
+insert into t (id,a) values (197,19);
+insert into t (id,a) values (197,20);
+insert into t (id,a) values (197,21);
+insert into t (id,a) values (197,22);
+insert into t (id,a) values (197,23);
+insert into t (id,a) values (197,24);
+insert into t (id,a) values (197,25);
+insert into t (id,a) values (197,26);
+insert into t (id,a) values (197,27);
+insert into t (id,a) values (197,28);
+insert into t (id,a) values (197,29);
+insert into t (id,a) values (197,30);
+insert into t (id,a) values (197,31);
+insert into t (id,a) values (197,32);
+insert into t (id,a) values (197,33);
+insert into t (id,a) values (197,34);
+insert into t (id,a) values (197,35);
+insert into t (id,a) values (197,36);
+insert into t (id,a) values (197,37);
+insert into t (id,a) values (197,38);
+insert into t (id,a) values (197,39);
+insert into t (id,a) values (197,40);
+insert into t (id,a) values (197,41);
+insert into t (id,a) values (197,42);
+insert into t (id,a) values (197,43);
+insert into t (id,a) values (197,44);
+insert into t (id,a) values (197,45);
+insert into t (id,a) values (197,46);
+insert into t (id,a) values (197,47);
+insert into t (id,a) values (197,48);
+insert into t (id,a) values (197,49);
+insert into t (id,a) values (197,50);
+insert into t (id,a) values (197,51);
+insert into t (id,a) values (197,52);
+insert into t (id,a) values (197,53);
+insert into t (id,a) values (197,54);
+insert into t (id,a) values (197,55);
+insert into t (id,a) values (197,56);
+insert into t (id,a) values (197,57);
+insert into t (id,a) values (197,58);
+insert into t (id,a) values (197,59);
+insert into t (id,a) values (197,60);
+insert into t (id,a) values (197,61);
+insert into t (id,a) values (197,62);
+insert into t (id,a) values (197,63);
+insert into t (id,a) values (197,64);
+insert into t (id,a) values (197,65);
+insert into t (id,a) values (197,66);
+insert into t (id,a) values (197,67);
+insert into t (id,a) values (197,68);
+insert into t (id,a) values (197,69);
+insert into t (id,a) values (197,70);
+insert into t (id,a) values (197,71);
+insert into t (id,a) values (197,72);
+insert into t (id,a) values (197,73);
+insert into t (id,a) values (197,74);
+insert into t (id,a) values (197,75);
+insert into t (id,a) values (197,76);
+insert into t (id,a) values (197,77);
+insert into t (id,a) values (197,78);
+insert into t (id,a) values (197,79);
+insert into t (id,a) values (197,80);
+insert into t (id,a) values (197,81);
+insert into t (id,a) values (197,82);
+insert into t (id,a) values (197,83);
+insert into t (id,a) values (197,84);
+insert into t (id,a) values (197,85);
+insert into t (id,a) values (197,86);
+insert into t (id,a) values (197,87);
+insert into t (id,a) values (197,88);
+insert into t (id,a) values (197,89);
+insert into t (id,a) values (197,90);
+insert into t (id,a) values (197,91);
+insert into t (id,a) values (197,92);
+insert into t (id,a) values (197,93);
+insert into t (id,a) values (197,94);
+insert into t (id,a) values (197,95);
+insert into t (id,a) values (197,96);
+insert into t (id,a) values (197,97);
+insert into t (id,a) values (197,98);
+insert into t (id,a) values (197,99);
+insert into t (id,a) values (198,0);
+insert into t (id,a) values (198,1);
+insert into t (id,a) values (198,2);
+insert into t (id,a) values (198,3);
+insert into t (id,a) values (198,4);
+insert into t (id,a) values (198,5);
+insert into t (id,a) values (198,6);
+insert into t (id,a) values (198,7);
+insert into t (id,a) values (198,8);
+insert into t (id,a) values (198,9);
+insert into t (id,a) values (198,10);
+insert into t (id,a) values (198,11);
+insert into t (id,a) values (198,12);
+insert into t (id,a) values (198,13);
+insert into t (id,a) values (198,14);
+insert into t (id,a) values (198,15);
+insert into t (id,a) values (198,16);
+insert into t (id,a) values (198,17);
+insert into t (id,a) values (198,18);
+insert into t (id,a) values (198,19);
+insert into t (id,a) values (198,20);
+insert into t (id,a) values (198,21);
+insert into t (id,a) values (198,22);
+insert into t (id,a) values (198,23);
+insert into t (id,a) values (198,24);
+insert into t (id,a) values (198,25);
+insert into t (id,a) values (198,26);
+insert into t (id,a) values (198,27);
+insert into t (id,a) values (198,28);
+insert into t (id,a) values (198,29);
+insert into t (id,a) values (198,30);
+insert into t (id,a) values (198,31);
+insert into t (id,a) values (198,32);
+insert into t (id,a) values (198,33);
+insert into t (id,a) values (198,34);
+insert into t (id,a) values (198,35);
+insert into t (id,a) values (198,36);
+insert into t (id,a) values (198,37);
+insert into t (id,a) values (198,38);
+insert into t (id,a) values (198,39);
+insert into t (id,a) values (198,40);
+insert into t (id,a) values (198,41);
+insert into t (id,a) values (198,42);
+insert into t (id,a) values (198,43);
+insert into t (id,a) values (198,44);
+insert into t (id,a) values (198,45);
+insert into t (id,a) values (198,46);
+insert into t (id,a) values (198,47);
+insert into t (id,a) values (198,48);
+insert into t (id,a) values (198,49);
+insert into t (id,a) values (198,50);
+insert into t (id,a) values (198,51);
+insert into t (id,a) values (198,52);
+insert into t (id,a) values (198,53);
+insert into t (id,a) values (198,54);
+insert into t (id,a) values (198,55);
+insert into t (id,a) values (198,56);
+insert into t (id,a) values (198,57);
+insert into t (id,a) values (198,58);
+insert into t (id,a) values (198,59);
+insert into t (id,a) values (198,60);
+insert into t (id,a) values (198,61);
+insert into t (id,a) values (198,62);
+insert into t (id,a) values (198,63);
+insert into t (id,a) values (198,64);
+insert into t (id,a) values (198,65);
+insert into t (id,a) values (198,66);
+insert into t (id,a) values (198,67);
+insert into t (id,a) values (198,68);
+insert into t (id,a) values (198,69);
+insert into t (id,a) values (198,70);
+insert into t (id,a) values (198,71);
+insert into t (id,a) values (198,72);
+insert into t (id,a) values (198,73);
+insert into t (id,a) values (198,74);
+insert into t (id,a) values (198,75);
+insert into t (id,a) values (198,76);
+insert into t (id,a) values (198,77);
+insert into t (id,a) values (198,78);
+insert into t (id,a) values (198,79);
+insert into t (id,a) values (198,80);
+insert into t (id,a) values (198,81);
+insert into t (id,a) values (198,82);
+insert into t (id,a) values (198,83);
+insert into t (id,a) values (198,84);
+insert into t (id,a) values (198,85);
+insert into t (id,a) values (198,86);
+insert into t (id,a) values (198,87);
+insert into t (id,a) values (198,88);
+insert into t (id,a) values (198,89);
+insert into t (id,a) values (198,90);
+insert into t (id,a) values (198,91);
+insert into t (id,a) values (198,92);
+insert into t (id,a) values (198,93);
+insert into t (id,a) values (198,94);
+insert into t (id,a) values (198,95);
+insert into t (id,a) values (198,96);
+insert into t (id,a) values (198,97);
+insert into t (id,a) values (198,98);
+insert into t (id,a) values (198,99);
+insert into t (id,a) values (199,0);
+insert into t (id,a) values (199,1);
+insert into t (id,a) values (199,2);
+insert into t (id,a) values (199,3);
+insert into t (id,a) values (199,4);
+insert into t (id,a) values (199,5);
+insert into t (id,a) values (199,6);
+insert into t (id,a) values (199,7);
+insert into t (id,a) values (199,8);
+insert into t (id,a) values (199,9);
+insert into t (id,a) values (199,10);
+insert into t (id,a) values (199,11);
+insert into t (id,a) values (199,12);
+insert into t (id,a) values (199,13);
+insert into t (id,a) values (199,14);
+insert into t (id,a) values (199,15);
+insert into t (id,a) values (199,16);
+insert into t (id,a) values (199,17);
+insert into t (id,a) values (199,18);
+insert into t (id,a) values (199,19);
+insert into t (id,a) values (199,20);
+insert into t (id,a) values (199,21);
+insert into t (id,a) values (199,22);
+insert into t (id,a) values (199,23);
+insert into t (id,a) values (199,24);
+insert into t (id,a) values (199,25);
+insert into t (id,a) values (199,26);
+insert into t (id,a) values (199,27);
+insert into t (id,a) values (199,28);
+insert into t (id,a) values (199,29);
+insert into t (id,a) values (199,30);
+insert into t (id,a) values (199,31);
+insert into t (id,a) values (199,32);
+insert into t (id,a) values (199,33);
+insert into t (id,a) values (199,34);
+insert into t (id,a) values (199,35);
+insert into t (id,a) values (199,36);
+insert into t (id,a) values (199,37);
+insert into t (id,a) values (199,38);
+insert into t (id,a) values (199,39);
+insert into t (id,a) values (199,40);
+insert into t (id,a) values (199,41);
+insert into t (id,a) values (199,42);
+insert into t (id,a) values (199,43);
+insert into t (id,a) values (199,44);
+insert into t (id,a) values (199,45);
+insert into t (id,a) values (199,46);
+insert into t (id,a) values (199,47);
+insert into t (id,a) values (199,48);
+insert into t (id,a) values (199,49);
+insert into t (id,a) values (199,50);
+insert into t (id,a) values (199,51);
+insert into t (id,a) values (199,52);
+insert into t (id,a) values (199,53);
+insert into t (id,a) values (199,54);
+insert into t (id,a) values (199,55);
+insert into t (id,a) values (199,56);
+insert into t (id,a) values (199,57);
+insert into t (id,a) values (199,58);
+insert into t (id,a) values (199,59);
+insert into t (id,a) values (199,60);
+insert into t (id,a) values (199,61);
+insert into t (id,a) values (199,62);
+insert into t (id,a) values (199,63);
+insert into t (id,a) values (199,64);
+insert into t (id,a) values (199,65);
+insert into t (id,a) values (199,66);
+insert into t (id,a) values (199,67);
+insert into t (id,a) values (199,68);
+insert into t (id,a) values (199,69);
+insert into t (id,a) values (199,70);
+insert into t (id,a) values (199,71);
+insert into t (id,a) values (199,72);
+insert into t (id,a) values (199,73);
+insert into t (id,a) values (199,74);
+insert into t (id,a) values (199,75);
+insert into t (id,a) values (199,76);
+insert into t (id,a) values (199,77);
+insert into t (id,a) values (199,78);
+insert into t (id,a) values (199,79);
+insert into t (id,a) values (199,80);
+insert into t (id,a) values (199,81);
+insert into t (id,a) values (199,82);
+insert into t (id,a) values (199,83);
+insert into t (id,a) values (199,84);
+insert into t (id,a) values (199,85);
+insert into t (id,a) values (199,86);
+insert into t (id,a) values (199,87);
+insert into t (id,a) values (199,88);
+insert into t (id,a) values (199,89);
+insert into t (id,a) values (199,90);
+insert into t (id,a) values (199,91);
+insert into t (id,a) values (199,92);
+insert into t (id,a) values (199,93);
+insert into t (id,a) values (199,94);
+insert into t (id,a) values (199,95);
+insert into t (id,a) values (199,96);
+insert into t (id,a) values (199,97);
+insert into t (id,a) values (199,98);
+insert into t (id,a) values (199,99);
+insert into t (id,a) values (200,0);
+insert into t (id,a) values (200,1);
+insert into t (id,a) values (200,2);
+insert into t (id,a) values (200,3);
+insert into t (id,a) values (200,4);
+insert into t (id,a) values (200,5);
+insert into t (id,a) values (200,6);
+insert into t (id,a) values (200,7);
+insert into t (id,a) values (200,8);
+insert into t (id,a) values (200,9);
+insert into t (id,a) values (200,10);
+insert into t (id,a) values (200,11);
+insert into t (id,a) values (200,12);
+insert into t (id,a) values (200,13);
+insert into t (id,a) values (200,14);
+insert into t (id,a) values (200,15);
+insert into t (id,a) values (200,16);
+insert into t (id,a) values (200,17);
+insert into t (id,a) values (200,18);
+insert into t (id,a) values (200,19);
+insert into t (id,a) values (200,20);
+insert into t (id,a) values (200,21);
+insert into t (id,a) values (200,22);
+insert into t (id,a) values (200,23);
+insert into t (id,a) values (200,24);
+insert into t (id,a) values (200,25);
+insert into t (id,a) values (200,26);
+insert into t (id,a) values (200,27);
+insert into t (id,a) values (200,28);
+insert into t (id,a) values (200,29);
+insert into t (id,a) values (200,30);
+insert into t (id,a) values (200,31);
+insert into t (id,a) values (200,32);
+insert into t (id,a) values (200,33);
+insert into t (id,a) values (200,34);
+insert into t (id,a) values (200,35);
+insert into t (id,a) values (200,36);
+insert into t (id,a) values (200,37);
+insert into t (id,a) values (200,38);
+insert into t (id,a) values (200,39);
+insert into t (id,a) values (200,40);
+insert into t (id,a) values (200,41);
+insert into t (id,a) values (200,42);
+insert into t (id,a) values (200,43);
+insert into t (id,a) values (200,44);
+insert into t (id,a) values (200,45);
+insert into t (id,a) values (200,46);
+insert into t (id,a) values (200,47);
+insert into t (id,a) values (200,48);
+insert into t (id,a) values (200,49);
+insert into t (id,a) values (200,50);
+insert into t (id,a) values (200,51);
+insert into t (id,a) values (200,52);
+insert into t (id,a) values (200,53);
+insert into t (id,a) values (200,54);
+insert into t (id,a) values (200,55);
+insert into t (id,a) values (200,56);
+insert into t (id,a) values (200,57);
+insert into t (id,a) values (200,58);
+insert into t (id,a) values (200,59);
+insert into t (id,a) values (200,60);
+insert into t (id,a) values (200,61);
+insert into t (id,a) values (200,62);
+insert into t (id,a) values (200,63);
+insert into t (id,a) values (200,64);
+insert into t (id,a) values (200,65);
+insert into t (id,a) values (200,66);
+insert into t (id,a) values (200,67);
+insert into t (id,a) values (200,68);
+insert into t (id,a) values (200,69);
+insert into t (id,a) values (200,70);
+insert into t (id,a) values (200,71);
+insert into t (id,a) values (200,72);
+insert into t (id,a) values (200,73);
+insert into t (id,a) values (200,74);
+insert into t (id,a) values (200,75);
+insert into t (id,a) values (200,76);
+insert into t (id,a) values (200,77);
+insert into t (id,a) values (200,78);
+insert into t (id,a) values (200,79);
+insert into t (id,a) values (200,80);
+insert into t (id,a) values (200,81);
+insert into t (id,a) values (200,82);
+insert into t (id,a) values (200,83);
+insert into t (id,a) values (200,84);
+insert into t (id,a) values (200,85);
+insert into t (id,a) values (200,86);
+insert into t (id,a) values (200,87);
+insert into t (id,a) values (200,88);
+insert into t (id,a) values (200,89);
+insert into t (id,a) values (200,90);
+insert into t (id,a) values (200,91);
+insert into t (id,a) values (200,92);
+insert into t (id,a) values (200,93);
+insert into t (id,a) values (200,94);
+insert into t (id,a) values (200,95);
+insert into t (id,a) values (200,96);
+insert into t (id,a) values (200,97);
+insert into t (id,a) values (200,98);
+insert into t (id,a) values (200,99);
+insert into t (id,a) values (201,0);
+insert into t (id,a) values (201,1);
+insert into t (id,a) values (201,2);
+insert into t (id,a) values (201,3);
+insert into t (id,a) values (201,4);
+insert into t (id,a) values (201,5);
+insert into t (id,a) values (201,6);
+insert into t (id,a) values (201,7);
+insert into t (id,a) values (201,8);
+insert into t (id,a) values (201,9);
+insert into t (id,a) values (201,10);
+insert into t (id,a) values (201,11);
+insert into t (id,a) values (201,12);
+insert into t (id,a) values (201,13);
+insert into t (id,a) values (201,14);
+insert into t (id,a) values (201,15);
+insert into t (id,a) values (201,16);
+insert into t (id,a) values (201,17);
+insert into t (id,a) values (201,18);
+insert into t (id,a) values (201,19);
+insert into t (id,a) values (201,20);
+insert into t (id,a) values (201,21);
+insert into t (id,a) values (201,22);
+insert into t (id,a) values (201,23);
+insert into t (id,a) values (201,24);
+insert into t (id,a) values (201,25);
+insert into t (id,a) values (201,26);
+insert into t (id,a) values (201,27);
+insert into t (id,a) values (201,28);
+insert into t (id,a) values (201,29);
+insert into t (id,a) values (201,30);
+insert into t (id,a) values (201,31);
+insert into t (id,a) values (201,32);
+insert into t (id,a) values (201,33);
+insert into t (id,a) values (201,34);
+insert into t (id,a) values (201,35);
+insert into t (id,a) values (201,36);
+insert into t (id,a) values (201,37);
+insert into t (id,a) values (201,38);
+insert into t (id,a) values (201,39);
+insert into t (id,a) values (201,40);
+insert into t (id,a) values (201,41);
+insert into t (id,a) values (201,42);
+insert into t (id,a) values (201,43);
+insert into t (id,a) values (201,44);
+insert into t (id,a) values (201,45);
+insert into t (id,a) values (201,46);
+insert into t (id,a) values (201,47);
+insert into t (id,a) values (201,48);
+insert into t (id,a) values (201,49);
+insert into t (id,a) values (201,50);
+insert into t (id,a) values (201,51);
+insert into t (id,a) values (201,52);
+insert into t (id,a) values (201,53);
+insert into t (id,a) values (201,54);
+insert into t (id,a) values (201,55);
+insert into t (id,a) values (201,56);
+insert into t (id,a) values (201,57);
+insert into t (id,a) values (201,58);
+insert into t (id,a) values (201,59);
+insert into t (id,a) values (201,60);
+insert into t (id,a) values (201,61);
+insert into t (id,a) values (201,62);
+insert into t (id,a) values (201,63);
+insert into t (id,a) values (201,64);
+insert into t (id,a) values (201,65);
+insert into t (id,a) values (201,66);
+insert into t (id,a) values (201,67);
+insert into t (id,a) values (201,68);
+insert into t (id,a) values (201,69);
+insert into t (id,a) values (201,70);
+insert into t (id,a) values (201,71);
+insert into t (id,a) values (201,72);
+insert into t (id,a) values (201,73);
+insert into t (id,a) values (201,74);
+insert into t (id,a) values (201,75);
+insert into t (id,a) values (201,76);
+insert into t (id,a) values (201,77);
+insert into t (id,a) values (201,78);
+insert into t (id,a) values (201,79);
+insert into t (id,a) values (201,80);
+insert into t (id,a) values (201,81);
+insert into t (id,a) values (201,82);
+insert into t (id,a) values (201,83);
+insert into t (id,a) values (201,84);
+insert into t (id,a) values (201,85);
+insert into t (id,a) values (201,86);
+insert into t (id,a) values (201,87);
+insert into t (id,a) values (201,88);
+insert into t (id,a) values (201,89);
+insert into t (id,a) values (201,90);
+insert into t (id,a) values (201,91);
+insert into t (id,a) values (201,92);
+insert into t (id,a) values (201,93);
+insert into t (id,a) values (201,94);
+insert into t (id,a) values (201,95);
+insert into t (id,a) values (201,96);
+insert into t (id,a) values (201,97);
+insert into t (id,a) values (201,98);
+insert into t (id,a) values (201,99);
+insert into t (id,a) values (202,0);
+insert into t (id,a) values (202,1);
+insert into t (id,a) values (202,2);
+insert into t (id,a) values (202,3);
+insert into t (id,a) values (202,4);
+insert into t (id,a) values (202,5);
+insert into t (id,a) values (202,6);
+insert into t (id,a) values (202,7);
+insert into t (id,a) values (202,8);
+insert into t (id,a) values (202,9);
+insert into t (id,a) values (202,10);
+insert into t (id,a) values (202,11);
+insert into t (id,a) values (202,12);
+insert into t (id,a) values (202,13);
+insert into t (id,a) values (202,14);
+insert into t (id,a) values (202,15);
+insert into t (id,a) values (202,16);
+insert into t (id,a) values (202,17);
+insert into t (id,a) values (202,18);
+insert into t (id,a) values (202,19);
+insert into t (id,a) values (202,20);
+insert into t (id,a) values (202,21);
+insert into t (id,a) values (202,22);
+insert into t (id,a) values (202,23);
+insert into t (id,a) values (202,24);
+insert into t (id,a) values (202,25);
+insert into t (id,a) values (202,26);
+insert into t (id,a) values (202,27);
+insert into t (id,a) values (202,28);
+insert into t (id,a) values (202,29);
+insert into t (id,a) values (202,30);
+insert into t (id,a) values (202,31);
+insert into t (id,a) values (202,32);
+insert into t (id,a) values (202,33);
+insert into t (id,a) values (202,34);
+insert into t (id,a) values (202,35);
+insert into t (id,a) values (202,36);
+insert into t (id,a) values (202,37);
+insert into t (id,a) values (202,38);
+insert into t (id,a) values (202,39);
+insert into t (id,a) values (202,40);
+insert into t (id,a) values (202,41);
+insert into t (id,a) values (202,42);
+insert into t (id,a) values (202,43);
+insert into t (id,a) values (202,44);
+insert into t (id,a) values (202,45);
+insert into t (id,a) values (202,46);
+insert into t (id,a) values (202,47);
+insert into t (id,a) values (202,48);
+insert into t (id,a) values (202,49);
+insert into t (id,a) values (202,50);
+insert into t (id,a) values (202,51);
+insert into t (id,a) values (202,52);
+insert into t (id,a) values (202,53);
+insert into t (id,a) values (202,54);
+insert into t (id,a) values (202,55);
+insert into t (id,a) values (202,56);
+insert into t (id,a) values (202,57);
+insert into t (id,a) values (202,58);
+insert into t (id,a) values (202,59);
+insert into t (id,a) values (202,60);
+insert into t (id,a) values (202,61);
+insert into t (id,a) values (202,62);
+insert into t (id,a) values (202,63);
+insert into t (id,a) values (202,64);
+insert into t (id,a) values (202,65);
+insert into t (id,a) values (202,66);
+insert into t (id,a) values (202,67);
+insert into t (id,a) values (202,68);
+insert into t (id,a) values (202,69);
+insert into t (id,a) values (202,70);
+insert into t (id,a) values (202,71);
+insert into t (id,a) values (202,72);
+insert into t (id,a) values (202,73);
+insert into t (id,a) values (202,74);
+insert into t (id,a) values (202,75);
+insert into t (id,a) values (202,76);
+insert into t (id,a) values (202,77);
+insert into t (id,a) values (202,78);
+insert into t (id,a) values (202,79);
+insert into t (id,a) values (202,80);
+insert into t (id,a) values (202,81);
+insert into t (id,a) values (202,82);
+insert into t (id,a) values (202,83);
+insert into t (id,a) values (202,84);
+insert into t (id,a) values (202,85);
+insert into t (id,a) values (202,86);
+insert into t (id,a) values (202,87);
+insert into t (id,a) values (202,88);
+insert into t (id,a) values (202,89);
+insert into t (id,a) values (202,90);
+insert into t (id,a) values (202,91);
+insert into t (id,a) values (202,92);
+insert into t (id,a) values (202,93);
+insert into t (id,a) values (202,94);
+insert into t (id,a) values (202,95);
+insert into t (id,a) values (202,96);
+insert into t (id,a) values (202,97);
+insert into t (id,a) values (202,98);
+insert into t (id,a) values (202,99);
+insert into t (id,a) values (203,0);
+insert into t (id,a) values (203,1);
+insert into t (id,a) values (203,2);
+insert into t (id,a) values (203,3);
+insert into t (id,a) values (203,4);
+insert into t (id,a) values (203,5);
+insert into t (id,a) values (203,6);
+insert into t (id,a) values (203,7);
+insert into t (id,a) values (203,8);
+insert into t (id,a) values (203,9);
+insert into t (id,a) values (203,10);
+insert into t (id,a) values (203,11);
+insert into t (id,a) values (203,12);
+insert into t (id,a) values (203,13);
+insert into t (id,a) values (203,14);
+insert into t (id,a) values (203,15);
+insert into t (id,a) values (203,16);
+insert into t (id,a) values (203,17);
+insert into t (id,a) values (203,18);
+insert into t (id,a) values (203,19);
+insert into t (id,a) values (203,20);
+insert into t (id,a) values (203,21);
+insert into t (id,a) values (203,22);
+insert into t (id,a) values (203,23);
+insert into t (id,a) values (203,24);
+insert into t (id,a) values (203,25);
+insert into t (id,a) values (203,26);
+insert into t (id,a) values (203,27);
+insert into t (id,a) values (203,28);
+insert into t (id,a) values (203,29);
+insert into t (id,a) values (203,30);
+insert into t (id,a) values (203,31);
+insert into t (id,a) values (203,32);
+insert into t (id,a) values (203,33);
+insert into t (id,a) values (203,34);
+insert into t (id,a) values (203,35);
+insert into t (id,a) values (203,36);
+insert into t (id,a) values (203,37);
+insert into t (id,a) values (203,38);
+insert into t (id,a) values (203,39);
+insert into t (id,a) values (203,40);
+insert into t (id,a) values (203,41);
+insert into t (id,a) values (203,42);
+insert into t (id,a) values (203,43);
+insert into t (id,a) values (203,44);
+insert into t (id,a) values (203,45);
+insert into t (id,a) values (203,46);
+insert into t (id,a) values (203,47);
+insert into t (id,a) values (203,48);
+insert into t (id,a) values (203,49);
+insert into t (id,a) values (203,50);
+insert into t (id,a) values (203,51);
+insert into t (id,a) values (203,52);
+insert into t (id,a) values (203,53);
+insert into t (id,a) values (203,54);
+insert into t (id,a) values (203,55);
+insert into t (id,a) values (203,56);
+insert into t (id,a) values (203,57);
+insert into t (id,a) values (203,58);
+insert into t (id,a) values (203,59);
+insert into t (id,a) values (203,60);
+insert into t (id,a) values (203,61);
+insert into t (id,a) values (203,62);
+insert into t (id,a) values (203,63);
+insert into t (id,a) values (203,64);
+insert into t (id,a) values (203,65);
+insert into t (id,a) values (203,66);
+insert into t (id,a) values (203,67);
+insert into t (id,a) values (203,68);
+insert into t (id,a) values (203,69);
+insert into t (id,a) values (203,70);
+insert into t (id,a) values (203,71);
+insert into t (id,a) values (203,72);
+insert into t (id,a) values (203,73);
+insert into t (id,a) values (203,74);
+insert into t (id,a) values (203,75);
+insert into t (id,a) values (203,76);
+insert into t (id,a) values (203,77);
+insert into t (id,a) values (203,78);
+insert into t (id,a) values (203,79);
+insert into t (id,a) values (203,80);
+insert into t (id,a) values (203,81);
+insert into t (id,a) values (203,82);
+insert into t (id,a) values (203,83);
+insert into t (id,a) values (203,84);
+insert into t (id,a) values (203,85);
+insert into t (id,a) values (203,86);
+insert into t (id,a) values (203,87);
+insert into t (id,a) values (203,88);
+insert into t (id,a) values (203,89);
+insert into t (id,a) values (203,90);
+insert into t (id,a) values (203,91);
+insert into t (id,a) values (203,92);
+insert into t (id,a) values (203,93);
+insert into t (id,a) values (203,94);
+insert into t (id,a) values (203,95);
+insert into t (id,a) values (203,96);
+insert into t (id,a) values (203,97);
+insert into t (id,a) values (203,98);
+insert into t (id,a) values (203,99);
+insert into t (id,a) values (204,0);
+insert into t (id,a) values (204,1);
+insert into t (id,a) values (204,2);
+insert into t (id,a) values (204,3);
+insert into t (id,a) values (204,4);
+insert into t (id,a) values (204,5);
+insert into t (id,a) values (204,6);
+insert into t (id,a) values (204,7);
+insert into t (id,a) values (204,8);
+insert into t (id,a) values (204,9);
+insert into t (id,a) values (204,10);
+insert into t (id,a) values (204,11);
+insert into t (id,a) values (204,12);
+insert into t (id,a) values (204,13);
+insert into t (id,a) values (204,14);
+insert into t (id,a) values (204,15);
+insert into t (id,a) values (204,16);
+insert into t (id,a) values (204,17);
+insert into t (id,a) values (204,18);
+insert into t (id,a) values (204,19);
+insert into t (id,a) values (204,20);
+insert into t (id,a) values (204,21);
+insert into t (id,a) values (204,22);
+insert into t (id,a) values (204,23);
+insert into t (id,a) values (204,24);
+insert into t (id,a) values (204,25);
+insert into t (id,a) values (204,26);
+insert into t (id,a) values (204,27);
+insert into t (id,a) values (204,28);
+insert into t (id,a) values (204,29);
+insert into t (id,a) values (204,30);
+insert into t (id,a) values (204,31);
+insert into t (id,a) values (204,32);
+insert into t (id,a) values (204,33);
+insert into t (id,a) values (204,34);
+insert into t (id,a) values (204,35);
+insert into t (id,a) values (204,36);
+insert into t (id,a) values (204,37);
+insert into t (id,a) values (204,38);
+insert into t (id,a) values (204,39);
+insert into t (id,a) values (204,40);
+insert into t (id,a) values (204,41);
+insert into t (id,a) values (204,42);
+insert into t (id,a) values (204,43);
+insert into t (id,a) values (204,44);
+insert into t (id,a) values (204,45);
+insert into t (id,a) values (204,46);
+insert into t (id,a) values (204,47);
+insert into t (id,a) values (204,48);
+insert into t (id,a) values (204,49);
+insert into t (id,a) values (204,50);
+insert into t (id,a) values (204,51);
+insert into t (id,a) values (204,52);
+insert into t (id,a) values (204,53);
+insert into t (id,a) values (204,54);
+insert into t (id,a) values (204,55);
+insert into t (id,a) values (204,56);
+insert into t (id,a) values (204,57);
+insert into t (id,a) values (204,58);
+insert into t (id,a) values (204,59);
+insert into t (id,a) values (204,60);
+insert into t (id,a) values (204,61);
+insert into t (id,a) values (204,62);
+insert into t (id,a) values (204,63);
+insert into t (id,a) values (204,64);
+insert into t (id,a) values (204,65);
+insert into t (id,a) values (204,66);
+insert into t (id,a) values (204,67);
+insert into t (id,a) values (204,68);
+insert into t (id,a) values (204,69);
+insert into t (id,a) values (204,70);
+insert into t (id,a) values (204,71);
+insert into t (id,a) values (204,72);
+insert into t (id,a) values (204,73);
+insert into t (id,a) values (204,74);
+insert into t (id,a) values (204,75);
+insert into t (id,a) values (204,76);
+insert into t (id,a) values (204,77);
+insert into t (id,a) values (204,78);
+insert into t (id,a) values (204,79);
+insert into t (id,a) values (204,80);
+insert into t (id,a) values (204,81);
+insert into t (id,a) values (204,82);
+insert into t (id,a) values (204,83);
+insert into t (id,a) values (204,84);
+insert into t (id,a) values (204,85);
+insert into t (id,a) values (204,86);
+insert into t (id,a) values (204,87);
+insert into t (id,a) values (204,88);
+insert into t (id,a) values (204,89);
+insert into t (id,a) values (204,90);
+insert into t (id,a) values (204,91);
+insert into t (id,a) values (204,92);
+insert into t (id,a) values (204,93);
+insert into t (id,a) values (204,94);
+insert into t (id,a) values (204,95);
+insert into t (id,a) values (204,96);
+insert into t (id,a) values (204,97);
+insert into t (id,a) values (204,98);
+insert into t (id,a) values (204,99);
+insert into t (id,a) values (205,0);
+insert into t (id,a) values (205,1);
+insert into t (id,a) values (205,2);
+insert into t (id,a) values (205,3);
+insert into t (id,a) values (205,4);
+insert into t (id,a) values (205,5);
+insert into t (id,a) values (205,6);
+insert into t (id,a) values (205,7);
+insert into t (id,a) values (205,8);
+insert into t (id,a) values (205,9);
+insert into t (id,a) values (205,10);
+insert into t (id,a) values (205,11);
+insert into t (id,a) values (205,12);
+insert into t (id,a) values (205,13);
+insert into t (id,a) values (205,14);
+insert into t (id,a) values (205,15);
+insert into t (id,a) values (205,16);
+insert into t (id,a) values (205,17);
+insert into t (id,a) values (205,18);
+insert into t (id,a) values (205,19);
+insert into t (id,a) values (205,20);
+insert into t (id,a) values (205,21);
+insert into t (id,a) values (205,22);
+insert into t (id,a) values (205,23);
+insert into t (id,a) values (205,24);
+insert into t (id,a) values (205,25);
+insert into t (id,a) values (205,26);
+insert into t (id,a) values (205,27);
+insert into t (id,a) values (205,28);
+insert into t (id,a) values (205,29);
+insert into t (id,a) values (205,30);
+insert into t (id,a) values (205,31);
+insert into t (id,a) values (205,32);
+insert into t (id,a) values (205,33);
+insert into t (id,a) values (205,34);
+insert into t (id,a) values (205,35);
+insert into t (id,a) values (205,36);
+insert into t (id,a) values (205,37);
+insert into t (id,a) values (205,38);
+insert into t (id,a) values (205,39);
+insert into t (id,a) values (205,40);
+insert into t (id,a) values (205,41);
+insert into t (id,a) values (205,42);
+insert into t (id,a) values (205,43);
+insert into t (id,a) values (205,44);
+insert into t (id,a) values (205,45);
+insert into t (id,a) values (205,46);
+insert into t (id,a) values (205,47);
+insert into t (id,a) values (205,48);
+insert into t (id,a) values (205,49);
+insert into t (id,a) values (205,50);
+insert into t (id,a) values (205,51);
+insert into t (id,a) values (205,52);
+insert into t (id,a) values (205,53);
+insert into t (id,a) values (205,54);
+insert into t (id,a) values (205,55);
+insert into t (id,a) values (205,56);
+insert into t (id,a) values (205,57);
+insert into t (id,a) values (205,58);
+insert into t (id,a) values (205,59);
+insert into t (id,a) values (205,60);
+insert into t (id,a) values (205,61);
+insert into t (id,a) values (205,62);
+insert into t (id,a) values (205,63);
+insert into t (id,a) values (205,64);
+insert into t (id,a) values (205,65);
+insert into t (id,a) values (205,66);
+insert into t (id,a) values (205,67);
+insert into t (id,a) values (205,68);
+insert into t (id,a) values (205,69);
+insert into t (id,a) values (205,70);
+insert into t (id,a) values (205,71);
+insert into t (id,a) values (205,72);
+insert into t (id,a) values (205,73);
+insert into t (id,a) values (205,74);
+insert into t (id,a) values (205,75);
+insert into t (id,a) values (205,76);
+insert into t (id,a) values (205,77);
+insert into t (id,a) values (205,78);
+insert into t (id,a) values (205,79);
+insert into t (id,a) values (205,80);
+insert into t (id,a) values (205,81);
+insert into t (id,a) values (205,82);
+insert into t (id,a) values (205,83);
+insert into t (id,a) values (205,84);
+insert into t (id,a) values (205,85);
+insert into t (id,a) values (205,86);
+insert into t (id,a) values (205,87);
+insert into t (id,a) values (205,88);
+insert into t (id,a) values (205,89);
+insert into t (id,a) values (205,90);
+insert into t (id,a) values (205,91);
+insert into t (id,a) values (205,92);
+insert into t (id,a) values (205,93);
+insert into t (id,a) values (205,94);
+insert into t (id,a) values (205,95);
+insert into t (id,a) values (205,96);
+insert into t (id,a) values (205,97);
+insert into t (id,a) values (205,98);
+insert into t (id,a) values (205,99);
+insert into t (id,a) values (206,0);
+insert into t (id,a) values (206,1);
+insert into t (id,a) values (206,2);
+insert into t (id,a) values (206,3);
+insert into t (id,a) values (206,4);
+insert into t (id,a) values (206,5);
+insert into t (id,a) values (206,6);
+insert into t (id,a) values (206,7);
+insert into t (id,a) values (206,8);
+insert into t (id,a) values (206,9);
+insert into t (id,a) values (206,10);
+insert into t (id,a) values (206,11);
+insert into t (id,a) values (206,12);
+insert into t (id,a) values (206,13);
+insert into t (id,a) values (206,14);
+insert into t (id,a) values (206,15);
+insert into t (id,a) values (206,16);
+insert into t (id,a) values (206,17);
+insert into t (id,a) values (206,18);
+insert into t (id,a) values (206,19);
+insert into t (id,a) values (206,20);
+insert into t (id,a) values (206,21);
+insert into t (id,a) values (206,22);
+insert into t (id,a) values (206,23);
+insert into t (id,a) values (206,24);
+insert into t (id,a) values (206,25);
+insert into t (id,a) values (206,26);
+insert into t (id,a) values (206,27);
+insert into t (id,a) values (206,28);
+insert into t (id,a) values (206,29);
+insert into t (id,a) values (206,30);
+insert into t (id,a) values (206,31);
+insert into t (id,a) values (206,32);
+insert into t (id,a) values (206,33);
+insert into t (id,a) values (206,34);
+insert into t (id,a) values (206,35);
+insert into t (id,a) values (206,36);
+insert into t (id,a) values (206,37);
+insert into t (id,a) values (206,38);
+insert into t (id,a) values (206,39);
+insert into t (id,a) values (206,40);
+insert into t (id,a) values (206,41);
+insert into t (id,a) values (206,42);
+insert into t (id,a) values (206,43);
+insert into t (id,a) values (206,44);
+insert into t (id,a) values (206,45);
+insert into t (id,a) values (206,46);
+insert into t (id,a) values (206,47);
+insert into t (id,a) values (206,48);
+insert into t (id,a) values (206,49);
+insert into t (id,a) values (206,50);
+insert into t (id,a) values (206,51);
+insert into t (id,a) values (206,52);
+insert into t (id,a) values (206,53);
+insert into t (id,a) values (206,54);
+insert into t (id,a) values (206,55);
+insert into t (id,a) values (206,56);
+insert into t (id,a) values (206,57);
+insert into t (id,a) values (206,58);
+insert into t (id,a) values (206,59);
+insert into t (id,a) values (206,60);
+insert into t (id,a) values (206,61);
+insert into t (id,a) values (206,62);
+insert into t (id,a) values (206,63);
+insert into t (id,a) values (206,64);
+insert into t (id,a) values (206,65);
+insert into t (id,a) values (206,66);
+insert into t (id,a) values (206,67);
+insert into t (id,a) values (206,68);
+insert into t (id,a) values (206,69);
+insert into t (id,a) values (206,70);
+insert into t (id,a) values (206,71);
+insert into t (id,a) values (206,72);
+insert into t (id,a) values (206,73);
+insert into t (id,a) values (206,74);
+insert into t (id,a) values (206,75);
+insert into t (id,a) values (206,76);
+insert into t (id,a) values (206,77);
+insert into t (id,a) values (206,78);
+insert into t (id,a) values (206,79);
+insert into t (id,a) values (206,80);
+insert into t (id,a) values (206,81);
+insert into t (id,a) values (206,82);
+insert into t (id,a) values (206,83);
+insert into t (id,a) values (206,84);
+insert into t (id,a) values (206,85);
+insert into t (id,a) values (206,86);
+insert into t (id,a) values (206,87);
+insert into t (id,a) values (206,88);
+insert into t (id,a) values (206,89);
+insert into t (id,a) values (206,90);
+insert into t (id,a) values (206,91);
+insert into t (id,a) values (206,92);
+insert into t (id,a) values (206,93);
+insert into t (id,a) values (206,94);
+insert into t (id,a) values (206,95);
+insert into t (id,a) values (206,96);
+insert into t (id,a) values (206,97);
+insert into t (id,a) values (206,98);
+insert into t (id,a) values (206,99);
+insert into t (id,a) values (207,0);
+insert into t (id,a) values (207,1);
+insert into t (id,a) values (207,2);
+insert into t (id,a) values (207,3);
+insert into t (id,a) values (207,4);
+insert into t (id,a) values (207,5);
+insert into t (id,a) values (207,6);
+insert into t (id,a) values (207,7);
+insert into t (id,a) values (207,8);
+insert into t (id,a) values (207,9);
+insert into t (id,a) values (207,10);
+insert into t (id,a) values (207,11);
+insert into t (id,a) values (207,12);
+insert into t (id,a) values (207,13);
+insert into t (id,a) values (207,14);
+insert into t (id,a) values (207,15);
+insert into t (id,a) values (207,16);
+insert into t (id,a) values (207,17);
+insert into t (id,a) values (207,18);
+insert into t (id,a) values (207,19);
+insert into t (id,a) values (207,20);
+insert into t (id,a) values (207,21);
+insert into t (id,a) values (207,22);
+insert into t (id,a) values (207,23);
+insert into t (id,a) values (207,24);
+insert into t (id,a) values (207,25);
+insert into t (id,a) values (207,26);
+insert into t (id,a) values (207,27);
+insert into t (id,a) values (207,28);
+insert into t (id,a) values (207,29);
+insert into t (id,a) values (207,30);
+insert into t (id,a) values (207,31);
+insert into t (id,a) values (207,32);
+insert into t (id,a) values (207,33);
+insert into t (id,a) values (207,34);
+insert into t (id,a) values (207,35);
+insert into t (id,a) values (207,36);
+insert into t (id,a) values (207,37);
+insert into t (id,a) values (207,38);
+insert into t (id,a) values (207,39);
+insert into t (id,a) values (207,40);
+insert into t (id,a) values (207,41);
+insert into t (id,a) values (207,42);
+insert into t (id,a) values (207,43);
+insert into t (id,a) values (207,44);
+insert into t (id,a) values (207,45);
+insert into t (id,a) values (207,46);
+insert into t (id,a) values (207,47);
+insert into t (id,a) values (207,48);
+insert into t (id,a) values (207,49);
+insert into t (id,a) values (207,50);
+insert into t (id,a) values (207,51);
+insert into t (id,a) values (207,52);
+insert into t (id,a) values (207,53);
+insert into t (id,a) values (207,54);
+insert into t (id,a) values (207,55);
+insert into t (id,a) values (207,56);
+insert into t (id,a) values (207,57);
+insert into t (id,a) values (207,58);
+insert into t (id,a) values (207,59);
+insert into t (id,a) values (207,60);
+insert into t (id,a) values (207,61);
+insert into t (id,a) values (207,62);
+insert into t (id,a) values (207,63);
+insert into t (id,a) values (207,64);
+insert into t (id,a) values (207,65);
+insert into t (id,a) values (207,66);
+insert into t (id,a) values (207,67);
+insert into t (id,a) values (207,68);
+insert into t (id,a) values (207,69);
+insert into t (id,a) values (207,70);
+insert into t (id,a) values (207,71);
+insert into t (id,a) values (207,72);
+insert into t (id,a) values (207,73);
+insert into t (id,a) values (207,74);
+insert into t (id,a) values (207,75);
+insert into t (id,a) values (207,76);
+insert into t (id,a) values (207,77);
+insert into t (id,a) values (207,78);
+insert into t (id,a) values (207,79);
+insert into t (id,a) values (207,80);
+insert into t (id,a) values (207,81);
+insert into t (id,a) values (207,82);
+insert into t (id,a) values (207,83);
+insert into t (id,a) values (207,84);
+insert into t (id,a) values (207,85);
+insert into t (id,a) values (207,86);
+insert into t (id,a) values (207,87);
+insert into t (id,a) values (207,88);
+insert into t (id,a) values (207,89);
+insert into t (id,a) values (207,90);
+insert into t (id,a) values (207,91);
+insert into t (id,a) values (207,92);
+insert into t (id,a) values (207,93);
+insert into t (id,a) values (207,94);
+insert into t (id,a) values (207,95);
+insert into t (id,a) values (207,96);
+insert into t (id,a) values (207,97);
+insert into t (id,a) values (207,98);
+insert into t (id,a) values (207,99);
+insert into t (id,a) values (208,0);
+insert into t (id,a) values (208,1);
+insert into t (id,a) values (208,2);
+insert into t (id,a) values (208,3);
+insert into t (id,a) values (208,4);
+insert into t (id,a) values (208,5);
+insert into t (id,a) values (208,6);
+insert into t (id,a) values (208,7);
+insert into t (id,a) values (208,8);
+insert into t (id,a) values (208,9);
+insert into t (id,a) values (208,10);
+insert into t (id,a) values (208,11);
+insert into t (id,a) values (208,12);
+insert into t (id,a) values (208,13);
+insert into t (id,a) values (208,14);
+insert into t (id,a) values (208,15);
+insert into t (id,a) values (208,16);
+insert into t (id,a) values (208,17);
+insert into t (id,a) values (208,18);
+insert into t (id,a) values (208,19);
+insert into t (id,a) values (208,20);
+insert into t (id,a) values (208,21);
+insert into t (id,a) values (208,22);
+insert into t (id,a) values (208,23);
+insert into t (id,a) values (208,24);
+insert into t (id,a) values (208,25);
+insert into t (id,a) values (208,26);
+insert into t (id,a) values (208,27);
+insert into t (id,a) values (208,28);
+insert into t (id,a) values (208,29);
+insert into t (id,a) values (208,30);
+insert into t (id,a) values (208,31);
+insert into t (id,a) values (208,32);
+insert into t (id,a) values (208,33);
+insert into t (id,a) values (208,34);
+insert into t (id,a) values (208,35);
+insert into t (id,a) values (208,36);
+insert into t (id,a) values (208,37);
+insert into t (id,a) values (208,38);
+insert into t (id,a) values (208,39);
+insert into t (id,a) values (208,40);
+insert into t (id,a) values (208,41);
+insert into t (id,a) values (208,42);
+insert into t (id,a) values (208,43);
+insert into t (id,a) values (208,44);
+insert into t (id,a) values (208,45);
+insert into t (id,a) values (208,46);
+insert into t (id,a) values (208,47);
+insert into t (id,a) values (208,48);
+insert into t (id,a) values (208,49);
+insert into t (id,a) values (208,50);
+insert into t (id,a) values (208,51);
+insert into t (id,a) values (208,52);
+insert into t (id,a) values (208,53);
+insert into t (id,a) values (208,54);
+insert into t (id,a) values (208,55);
+insert into t (id,a) values (208,56);
+insert into t (id,a) values (208,57);
+insert into t (id,a) values (208,58);
+insert into t (id,a) values (208,59);
+insert into t (id,a) values (208,60);
+insert into t (id,a) values (208,61);
+insert into t (id,a) values (208,62);
+insert into t (id,a) values (208,63);
+insert into t (id,a) values (208,64);
+insert into t (id,a) values (208,65);
+insert into t (id,a) values (208,66);
+insert into t (id,a) values (208,67);
+insert into t (id,a) values (208,68);
+insert into t (id,a) values (208,69);
+insert into t (id,a) values (208,70);
+insert into t (id,a) values (208,71);
+insert into t (id,a) values (208,72);
+insert into t (id,a) values (208,73);
+insert into t (id,a) values (208,74);
+insert into t (id,a) values (208,75);
+insert into t (id,a) values (208,76);
+insert into t (id,a) values (208,77);
+insert into t (id,a) values (208,78);
+insert into t (id,a) values (208,79);
+insert into t (id,a) values (208,80);
+insert into t (id,a) values (208,81);
+insert into t (id,a) values (208,82);
+insert into t (id,a) values (208,83);
+insert into t (id,a) values (208,84);
+insert into t (id,a) values (208,85);
+insert into t (id,a) values (208,86);
+insert into t (id,a) values (208,87);
+insert into t (id,a) values (208,88);
+insert into t (id,a) values (208,89);
+insert into t (id,a) values (208,90);
+insert into t (id,a) values (208,91);
+insert into t (id,a) values (208,92);
+insert into t (id,a) values (208,93);
+insert into t (id,a) values (208,94);
+insert into t (id,a) values (208,95);
+insert into t (id,a) values (208,96);
+insert into t (id,a) values (208,97);
+insert into t (id,a) values (208,98);
+insert into t (id,a) values (208,99);
+insert into t (id,a) values (209,0);
+insert into t (id,a) values (209,1);
+insert into t (id,a) values (209,2);
+insert into t (id,a) values (209,3);
+insert into t (id,a) values (209,4);
+insert into t (id,a) values (209,5);
+insert into t (id,a) values (209,6);
+insert into t (id,a) values (209,7);
+insert into t (id,a) values (209,8);
+insert into t (id,a) values (209,9);
+insert into t (id,a) values (209,10);
+insert into t (id,a) values (209,11);
+insert into t (id,a) values (209,12);
+insert into t (id,a) values (209,13);
+insert into t (id,a) values (209,14);
+insert into t (id,a) values (209,15);
+insert into t (id,a) values (209,16);
+insert into t (id,a) values (209,17);
+insert into t (id,a) values (209,18);
+insert into t (id,a) values (209,19);
+insert into t (id,a) values (209,20);
+insert into t (id,a) values (209,21);
+insert into t (id,a) values (209,22);
+insert into t (id,a) values (209,23);
+insert into t (id,a) values (209,24);
+insert into t (id,a) values (209,25);
+insert into t (id,a) values (209,26);
+insert into t (id,a) values (209,27);
+insert into t (id,a) values (209,28);
+insert into t (id,a) values (209,29);
+insert into t (id,a) values (209,30);
+insert into t (id,a) values (209,31);
+insert into t (id,a) values (209,32);
+insert into t (id,a) values (209,33);
+insert into t (id,a) values (209,34);
+insert into t (id,a) values (209,35);
+insert into t (id,a) values (209,36);
+insert into t (id,a) values (209,37);
+insert into t (id,a) values (209,38);
+insert into t (id,a) values (209,39);
+insert into t (id,a) values (209,40);
+insert into t (id,a) values (209,41);
+insert into t (id,a) values (209,42);
+insert into t (id,a) values (209,43);
+insert into t (id,a) values (209,44);
+insert into t (id,a) values (209,45);
+insert into t (id,a) values (209,46);
+insert into t (id,a) values (209,47);
+insert into t (id,a) values (209,48);
+insert into t (id,a) values (209,49);
+insert into t (id,a) values (209,50);
+insert into t (id,a) values (209,51);
+insert into t (id,a) values (209,52);
+insert into t (id,a) values (209,53);
+insert into t (id,a) values (209,54);
+insert into t (id,a) values (209,55);
+insert into t (id,a) values (209,56);
+insert into t (id,a) values (209,57);
+insert into t (id,a) values (209,58);
+insert into t (id,a) values (209,59);
+insert into t (id,a) values (209,60);
+insert into t (id,a) values (209,61);
+insert into t (id,a) values (209,62);
+insert into t (id,a) values (209,63);
+insert into t (id,a) values (209,64);
+insert into t (id,a) values (209,65);
+insert into t (id,a) values (209,66);
+insert into t (id,a) values (209,67);
+insert into t (id,a) values (209,68);
+insert into t (id,a) values (209,69);
+insert into t (id,a) values (209,70);
+insert into t (id,a) values (209,71);
+insert into t (id,a) values (209,72);
+insert into t (id,a) values (209,73);
+insert into t (id,a) values (209,74);
+insert into t (id,a) values (209,75);
+insert into t (id,a) values (209,76);
+insert into t (id,a) values (209,77);
+insert into t (id,a) values (209,78);
+insert into t (id,a) values (209,79);
+insert into t (id,a) values (209,80);
+insert into t (id,a) values (209,81);
+insert into t (id,a) values (209,82);
+insert into t (id,a) values (209,83);
+insert into t (id,a) values (209,84);
+insert into t (id,a) values (209,85);
+insert into t (id,a) values (209,86);
+insert into t (id,a) values (209,87);
+insert into t (id,a) values (209,88);
+insert into t (id,a) values (209,89);
+insert into t (id,a) values (209,90);
+insert into t (id,a) values (209,91);
+insert into t (id,a) values (209,92);
+insert into t (id,a) values (209,93);
+insert into t (id,a) values (209,94);
+insert into t (id,a) values (209,95);
+insert into t (id,a) values (209,96);
+insert into t (id,a) values (209,97);
+insert into t (id,a) values (209,98);
+insert into t (id,a) values (209,99);
+insert into t (id,a) values (210,0);
+insert into t (id,a) values (210,1);
+insert into t (id,a) values (210,2);
+insert into t (id,a) values (210,3);
+insert into t (id,a) values (210,4);
+insert into t (id,a) values (210,5);
+insert into t (id,a) values (210,6);
+insert into t (id,a) values (210,7);
+insert into t (id,a) values (210,8);
+insert into t (id,a) values (210,9);
+insert into t (id,a) values (210,10);
+insert into t (id,a) values (210,11);
+insert into t (id,a) values (210,12);
+insert into t (id,a) values (210,13);
+insert into t (id,a) values (210,14);
+insert into t (id,a) values (210,15);
+insert into t (id,a) values (210,16);
+insert into t (id,a) values (210,17);
+insert into t (id,a) values (210,18);
+insert into t (id,a) values (210,19);
+insert into t (id,a) values (210,20);
+insert into t (id,a) values (210,21);
+insert into t (id,a) values (210,22);
+insert into t (id,a) values (210,23);
+insert into t (id,a) values (210,24);
+insert into t (id,a) values (210,25);
+insert into t (id,a) values (210,26);
+insert into t (id,a) values (210,27);
+insert into t (id,a) values (210,28);
+insert into t (id,a) values (210,29);
+insert into t (id,a) values (210,30);
+insert into t (id,a) values (210,31);
+insert into t (id,a) values (210,32);
+insert into t (id,a) values (210,33);
+insert into t (id,a) values (210,34);
+insert into t (id,a) values (210,35);
+insert into t (id,a) values (210,36);
+insert into t (id,a) values (210,37);
+insert into t (id,a) values (210,38);
+insert into t (id,a) values (210,39);
+insert into t (id,a) values (210,40);
+insert into t (id,a) values (210,41);
+insert into t (id,a) values (210,42);
+insert into t (id,a) values (210,43);
+insert into t (id,a) values (210,44);
+insert into t (id,a) values (210,45);
+insert into t (id,a) values (210,46);
+insert into t (id,a) values (210,47);
+insert into t (id,a) values (210,48);
+insert into t (id,a) values (210,49);
+insert into t (id,a) values (210,50);
+insert into t (id,a) values (210,51);
+insert into t (id,a) values (210,52);
+insert into t (id,a) values (210,53);
+insert into t (id,a) values (210,54);
+insert into t (id,a) values (210,55);
+insert into t (id,a) values (210,56);
+insert into t (id,a) values (210,57);
+insert into t (id,a) values (210,58);
+insert into t (id,a) values (210,59);
+insert into t (id,a) values (210,60);
+insert into t (id,a) values (210,61);
+insert into t (id,a) values (210,62);
+insert into t (id,a) values (210,63);
+insert into t (id,a) values (210,64);
+insert into t (id,a) values (210,65);
+insert into t (id,a) values (210,66);
+insert into t (id,a) values (210,67);
+insert into t (id,a) values (210,68);
+insert into t (id,a) values (210,69);
+insert into t (id,a) values (210,70);
+insert into t (id,a) values (210,71);
+insert into t (id,a) values (210,72);
+insert into t (id,a) values (210,73);
+insert into t (id,a) values (210,74);
+insert into t (id,a) values (210,75);
+insert into t (id,a) values (210,76);
+insert into t (id,a) values (210,77);
+insert into t (id,a) values (210,78);
+insert into t (id,a) values (210,79);
+insert into t (id,a) values (210,80);
+insert into t (id,a) values (210,81);
+insert into t (id,a) values (210,82);
+insert into t (id,a) values (210,83);
+insert into t (id,a) values (210,84);
+insert into t (id,a) values (210,85);
+insert into t (id,a) values (210,86);
+insert into t (id,a) values (210,87);
+insert into t (id,a) values (210,88);
+insert into t (id,a) values (210,89);
+insert into t (id,a) values (210,90);
+insert into t (id,a) values (210,91);
+insert into t (id,a) values (210,92);
+insert into t (id,a) values (210,93);
+insert into t (id,a) values (210,94);
+insert into t (id,a) values (210,95);
+insert into t (id,a) values (210,96);
+insert into t (id,a) values (210,97);
+insert into t (id,a) values (210,98);
+insert into t (id,a) values (210,99);
+insert into t (id,a) values (211,0);
+insert into t (id,a) values (211,1);
+insert into t (id,a) values (211,2);
+insert into t (id,a) values (211,3);
+insert into t (id,a) values (211,4);
+insert into t (id,a) values (211,5);
+insert into t (id,a) values (211,6);
+insert into t (id,a) values (211,7);
+insert into t (id,a) values (211,8);
+insert into t (id,a) values (211,9);
+insert into t (id,a) values (211,10);
+insert into t (id,a) values (211,11);
+insert into t (id,a) values (211,12);
+insert into t (id,a) values (211,13);
+insert into t (id,a) values (211,14);
+insert into t (id,a) values (211,15);
+insert into t (id,a) values (211,16);
+insert into t (id,a) values (211,17);
+insert into t (id,a) values (211,18);
+insert into t (id,a) values (211,19);
+insert into t (id,a) values (211,20);
+insert into t (id,a) values (211,21);
+insert into t (id,a) values (211,22);
+insert into t (id,a) values (211,23);
+insert into t (id,a) values (211,24);
+insert into t (id,a) values (211,25);
+insert into t (id,a) values (211,26);
+insert into t (id,a) values (211,27);
+insert into t (id,a) values (211,28);
+insert into t (id,a) values (211,29);
+insert into t (id,a) values (211,30);
+insert into t (id,a) values (211,31);
+insert into t (id,a) values (211,32);
+insert into t (id,a) values (211,33);
+insert into t (id,a) values (211,34);
+insert into t (id,a) values (211,35);
+insert into t (id,a) values (211,36);
+insert into t (id,a) values (211,37);
+insert into t (id,a) values (211,38);
+insert into t (id,a) values (211,39);
+insert into t (id,a) values (211,40);
+insert into t (id,a) values (211,41);
+insert into t (id,a) values (211,42);
+insert into t (id,a) values (211,43);
+insert into t (id,a) values (211,44);
+insert into t (id,a) values (211,45);
+insert into t (id,a) values (211,46);
+insert into t (id,a) values (211,47);
+insert into t (id,a) values (211,48);
+insert into t (id,a) values (211,49);
+insert into t (id,a) values (211,50);
+insert into t (id,a) values (211,51);
+insert into t (id,a) values (211,52);
+insert into t (id,a) values (211,53);
+insert into t (id,a) values (211,54);
+insert into t (id,a) values (211,55);
+insert into t (id,a) values (211,56);
+insert into t (id,a) values (211,57);
+insert into t (id,a) values (211,58);
+insert into t (id,a) values (211,59);
+insert into t (id,a) values (211,60);
+insert into t (id,a) values (211,61);
+insert into t (id,a) values (211,62);
+insert into t (id,a) values (211,63);
+insert into t (id,a) values (211,64);
+insert into t (id,a) values (211,65);
+insert into t (id,a) values (211,66);
+insert into t (id,a) values (211,67);
+insert into t (id,a) values (211,68);
+insert into t (id,a) values (211,69);
+insert into t (id,a) values (211,70);
+insert into t (id,a) values (211,71);
+insert into t (id,a) values (211,72);
+insert into t (id,a) values (211,73);
+insert into t (id,a) values (211,74);
+insert into t (id,a) values (211,75);
+insert into t (id,a) values (211,76);
+insert into t (id,a) values (211,77);
+insert into t (id,a) values (211,78);
+insert into t (id,a) values (211,79);
+insert into t (id,a) values (211,80);
+insert into t (id,a) values (211,81);
+insert into t (id,a) values (211,82);
+insert into t (id,a) values (211,83);
+insert into t (id,a) values (211,84);
+insert into t (id,a) values (211,85);
+insert into t (id,a) values (211,86);
+insert into t (id,a) values (211,87);
+insert into t (id,a) values (211,88);
+insert into t (id,a) values (211,89);
+insert into t (id,a) values (211,90);
+insert into t (id,a) values (211,91);
+insert into t (id,a) values (211,92);
+insert into t (id,a) values (211,93);
+insert into t (id,a) values (211,94);
+insert into t (id,a) values (211,95);
+insert into t (id,a) values (211,96);
+insert into t (id,a) values (211,97);
+insert into t (id,a) values (211,98);
+insert into t (id,a) values (211,99);
+insert into t (id,a) values (212,0);
+insert into t (id,a) values (212,1);
+insert into t (id,a) values (212,2);
+insert into t (id,a) values (212,3);
+insert into t (id,a) values (212,4);
+insert into t (id,a) values (212,5);
+insert into t (id,a) values (212,6);
+insert into t (id,a) values (212,7);
+insert into t (id,a) values (212,8);
+insert into t (id,a) values (212,9);
+insert into t (id,a) values (212,10);
+insert into t (id,a) values (212,11);
+insert into t (id,a) values (212,12);
+insert into t (id,a) values (212,13);
+insert into t (id,a) values (212,14);
+insert into t (id,a) values (212,15);
+insert into t (id,a) values (212,16);
+insert into t (id,a) values (212,17);
+insert into t (id,a) values (212,18);
+insert into t (id,a) values (212,19);
+insert into t (id,a) values (212,20);
+insert into t (id,a) values (212,21);
+insert into t (id,a) values (212,22);
+insert into t (id,a) values (212,23);
+insert into t (id,a) values (212,24);
+insert into t (id,a) values (212,25);
+insert into t (id,a) values (212,26);
+insert into t (id,a) values (212,27);
+insert into t (id,a) values (212,28);
+insert into t (id,a) values (212,29);
+insert into t (id,a) values (212,30);
+insert into t (id,a) values (212,31);
+insert into t (id,a) values (212,32);
+insert into t (id,a) values (212,33);
+insert into t (id,a) values (212,34);
+insert into t (id,a) values (212,35);
+insert into t (id,a) values (212,36);
+insert into t (id,a) values (212,37);
+insert into t (id,a) values (212,38);
+insert into t (id,a) values (212,39);
+insert into t (id,a) values (212,40);
+insert into t (id,a) values (212,41);
+insert into t (id,a) values (212,42);
+insert into t (id,a) values (212,43);
+insert into t (id,a) values (212,44);
+insert into t (id,a) values (212,45);
+insert into t (id,a) values (212,46);
+insert into t (id,a) values (212,47);
+insert into t (id,a) values (212,48);
+insert into t (id,a) values (212,49);
+insert into t (id,a) values (212,50);
+insert into t (id,a) values (212,51);
+insert into t (id,a) values (212,52);
+insert into t (id,a) values (212,53);
+insert into t (id,a) values (212,54);
+insert into t (id,a) values (212,55);
+insert into t (id,a) values (212,56);
+insert into t (id,a) values (212,57);
+insert into t (id,a) values (212,58);
+insert into t (id,a) values (212,59);
+insert into t (id,a) values (212,60);
+insert into t (id,a) values (212,61);
+insert into t (id,a) values (212,62);
+insert into t (id,a) values (212,63);
+insert into t (id,a) values (212,64);
+insert into t (id,a) values (212,65);
+insert into t (id,a) values (212,66);
+insert into t (id,a) values (212,67);
+insert into t (id,a) values (212,68);
+insert into t (id,a) values (212,69);
+insert into t (id,a) values (212,70);
+insert into t (id,a) values (212,71);
+insert into t (id,a) values (212,72);
+insert into t (id,a) values (212,73);
+insert into t (id,a) values (212,74);
+insert into t (id,a) values (212,75);
+insert into t (id,a) values (212,76);
+insert into t (id,a) values (212,77);
+insert into t (id,a) values (212,78);
+insert into t (id,a) values (212,79);
+insert into t (id,a) values (212,80);
+insert into t (id,a) values (212,81);
+insert into t (id,a) values (212,82);
+insert into t (id,a) values (212,83);
+insert into t (id,a) values (212,84);
+insert into t (id,a) values (212,85);
+insert into t (id,a) values (212,86);
+insert into t (id,a) values (212,87);
+insert into t (id,a) values (212,88);
+insert into t (id,a) values (212,89);
+insert into t (id,a) values (212,90);
+insert into t (id,a) values (212,91);
+insert into t (id,a) values (212,92);
+insert into t (id,a) values (212,93);
+insert into t (id,a) values (212,94);
+insert into t (id,a) values (212,95);
+insert into t (id,a) values (212,96);
+insert into t (id,a) values (212,97);
+insert into t (id,a) values (212,98);
+insert into t (id,a) values (212,99);
+insert into t (id,a) values (213,0);
+insert into t (id,a) values (213,1);
+insert into t (id,a) values (213,2);
+insert into t (id,a) values (213,3);
+insert into t (id,a) values (213,4);
+insert into t (id,a) values (213,5);
+insert into t (id,a) values (213,6);
+insert into t (id,a) values (213,7);
+insert into t (id,a) values (213,8);
+insert into t (id,a) values (213,9);
+insert into t (id,a) values (213,10);
+insert into t (id,a) values (213,11);
+insert into t (id,a) values (213,12);
+insert into t (id,a) values (213,13);
+insert into t (id,a) values (213,14);
+insert into t (id,a) values (213,15);
+insert into t (id,a) values (213,16);
+insert into t (id,a) values (213,17);
+insert into t (id,a) values (213,18);
+insert into t (id,a) values (213,19);
+insert into t (id,a) values (213,20);
+insert into t (id,a) values (213,21);
+insert into t (id,a) values (213,22);
+insert into t (id,a) values (213,23);
+insert into t (id,a) values (213,24);
+insert into t (id,a) values (213,25);
+insert into t (id,a) values (213,26);
+insert into t (id,a) values (213,27);
+insert into t (id,a) values (213,28);
+insert into t (id,a) values (213,29);
+insert into t (id,a) values (213,30);
+insert into t (id,a) values (213,31);
+insert into t (id,a) values (213,32);
+insert into t (id,a) values (213,33);
+insert into t (id,a) values (213,34);
+insert into t (id,a) values (213,35);
+insert into t (id,a) values (213,36);
+insert into t (id,a) values (213,37);
+insert into t (id,a) values (213,38);
+insert into t (id,a) values (213,39);
+insert into t (id,a) values (213,40);
+insert into t (id,a) values (213,41);
+insert into t (id,a) values (213,42);
+insert into t (id,a) values (213,43);
+insert into t (id,a) values (213,44);
+insert into t (id,a) values (213,45);
+insert into t (id,a) values (213,46);
+insert into t (id,a) values (213,47);
+insert into t (id,a) values (213,48);
+insert into t (id,a) values (213,49);
+insert into t (id,a) values (213,50);
+insert into t (id,a) values (213,51);
+insert into t (id,a) values (213,52);
+insert into t (id,a) values (213,53);
+insert into t (id,a) values (213,54);
+insert into t (id,a) values (213,55);
+insert into t (id,a) values (213,56);
+insert into t (id,a) values (213,57);
+insert into t (id,a) values (213,58);
+insert into t (id,a) values (213,59);
+insert into t (id,a) values (213,60);
+insert into t (id,a) values (213,61);
+insert into t (id,a) values (213,62);
+insert into t (id,a) values (213,63);
+insert into t (id,a) values (213,64);
+insert into t (id,a) values (213,65);
+insert into t (id,a) values (213,66);
+insert into t (id,a) values (213,67);
+insert into t (id,a) values (213,68);
+insert into t (id,a) values (213,69);
+insert into t (id,a) values (213,70);
+insert into t (id,a) values (213,71);
+insert into t (id,a) values (213,72);
+insert into t (id,a) values (213,73);
+insert into t (id,a) values (213,74);
+insert into t (id,a) values (213,75);
+insert into t (id,a) values (213,76);
+insert into t (id,a) values (213,77);
+insert into t (id,a) values (213,78);
+insert into t (id,a) values (213,79);
+insert into t (id,a) values (213,80);
+insert into t (id,a) values (213,81);
+insert into t (id,a) values (213,82);
+insert into t (id,a) values (213,83);
+insert into t (id,a) values (213,84);
+insert into t (id,a) values (213,85);
+insert into t (id,a) values (213,86);
+insert into t (id,a) values (213,87);
+insert into t (id,a) values (213,88);
+insert into t (id,a) values (213,89);
+insert into t (id,a) values (213,90);
+insert into t (id,a) values (213,91);
+insert into t (id,a) values (213,92);
+insert into t (id,a) values (213,93);
+insert into t (id,a) values (213,94);
+insert into t (id,a) values (213,95);
+insert into t (id,a) values (213,96);
+insert into t (id,a) values (213,97);
+insert into t (id,a) values (213,98);
+insert into t (id,a) values (213,99);
+insert into t (id,a) values (214,0);
+insert into t (id,a) values (214,1);
+insert into t (id,a) values (214,2);
+insert into t (id,a) values (214,3);
+insert into t (id,a) values (214,4);
+insert into t (id,a) values (214,5);
+insert into t (id,a) values (214,6);
+insert into t (id,a) values (214,7);
+insert into t (id,a) values (214,8);
+insert into t (id,a) values (214,9);
+insert into t (id,a) values (214,10);
+insert into t (id,a) values (214,11);
+insert into t (id,a) values (214,12);
+insert into t (id,a) values (214,13);
+insert into t (id,a) values (214,14);
+insert into t (id,a) values (214,15);
+insert into t (id,a) values (214,16);
+insert into t (id,a) values (214,17);
+insert into t (id,a) values (214,18);
+insert into t (id,a) values (214,19);
+insert into t (id,a) values (214,20);
+insert into t (id,a) values (214,21);
+insert into t (id,a) values (214,22);
+insert into t (id,a) values (214,23);
+insert into t (id,a) values (214,24);
+insert into t (id,a) values (214,25);
+insert into t (id,a) values (214,26);
+insert into t (id,a) values (214,27);
+insert into t (id,a) values (214,28);
+insert into t (id,a) values (214,29);
+insert into t (id,a) values (214,30);
+insert into t (id,a) values (214,31);
+insert into t (id,a) values (214,32);
+insert into t (id,a) values (214,33);
+insert into t (id,a) values (214,34);
+insert into t (id,a) values (214,35);
+insert into t (id,a) values (214,36);
+insert into t (id,a) values (214,37);
+insert into t (id,a) values (214,38);
+insert into t (id,a) values (214,39);
+insert into t (id,a) values (214,40);
+insert into t (id,a) values (214,41);
+insert into t (id,a) values (214,42);
+insert into t (id,a) values (214,43);
+insert into t (id,a) values (214,44);
+insert into t (id,a) values (214,45);
+insert into t (id,a) values (214,46);
+insert into t (id,a) values (214,47);
+insert into t (id,a) values (214,48);
+insert into t (id,a) values (214,49);
+insert into t (id,a) values (214,50);
+insert into t (id,a) values (214,51);
+insert into t (id,a) values (214,52);
+insert into t (id,a) values (214,53);
+insert into t (id,a) values (214,54);
+insert into t (id,a) values (214,55);
+insert into t (id,a) values (214,56);
+insert into t (id,a) values (214,57);
+insert into t (id,a) values (214,58);
+insert into t (id,a) values (214,59);
+insert into t (id,a) values (214,60);
+insert into t (id,a) values (214,61);
+insert into t (id,a) values (214,62);
+insert into t (id,a) values (214,63);
+insert into t (id,a) values (214,64);
+insert into t (id,a) values (214,65);
+insert into t (id,a) values (214,66);
+insert into t (id,a) values (214,67);
+insert into t (id,a) values (214,68);
+insert into t (id,a) values (214,69);
+insert into t (id,a) values (214,70);
+insert into t (id,a) values (214,71);
+insert into t (id,a) values (214,72);
+insert into t (id,a) values (214,73);
+insert into t (id,a) values (214,74);
+insert into t (id,a) values (214,75);
+insert into t (id,a) values (214,76);
+insert into t (id,a) values (214,77);
+insert into t (id,a) values (214,78);
+insert into t (id,a) values (214,79);
+insert into t (id,a) values (214,80);
+insert into t (id,a) values (214,81);
+insert into t (id,a) values (214,82);
+insert into t (id,a) values (214,83);
+insert into t (id,a) values (214,84);
+insert into t (id,a) values (214,85);
+insert into t (id,a) values (214,86);
+insert into t (id,a) values (214,87);
+insert into t (id,a) values (214,88);
+insert into t (id,a) values (214,89);
+insert into t (id,a) values (214,90);
+insert into t (id,a) values (214,91);
+insert into t (id,a) values (214,92);
+insert into t (id,a) values (214,93);
+insert into t (id,a) values (214,94);
+insert into t (id,a) values (214,95);
+insert into t (id,a) values (214,96);
+insert into t (id,a) values (214,97);
+insert into t (id,a) values (214,98);
+insert into t (id,a) values (214,99);
+insert into t (id,a) values (215,0);
+insert into t (id,a) values (215,1);
+insert into t (id,a) values (215,2);
+insert into t (id,a) values (215,3);
+insert into t (id,a) values (215,4);
+insert into t (id,a) values (215,5);
+insert into t (id,a) values (215,6);
+insert into t (id,a) values (215,7);
+insert into t (id,a) values (215,8);
+insert into t (id,a) values (215,9);
+insert into t (id,a) values (215,10);
+insert into t (id,a) values (215,11);
+insert into t (id,a) values (215,12);
+insert into t (id,a) values (215,13);
+insert into t (id,a) values (215,14);
+insert into t (id,a) values (215,15);
+insert into t (id,a) values (215,16);
+insert into t (id,a) values (215,17);
+insert into t (id,a) values (215,18);
+insert into t (id,a) values (215,19);
+insert into t (id,a) values (215,20);
+insert into t (id,a) values (215,21);
+insert into t (id,a) values (215,22);
+insert into t (id,a) values (215,23);
+insert into t (id,a) values (215,24);
+insert into t (id,a) values (215,25);
+insert into t (id,a) values (215,26);
+insert into t (id,a) values (215,27);
+insert into t (id,a) values (215,28);
+insert into t (id,a) values (215,29);
+insert into t (id,a) values (215,30);
+insert into t (id,a) values (215,31);
+insert into t (id,a) values (215,32);
+insert into t (id,a) values (215,33);
+insert into t (id,a) values (215,34);
+insert into t (id,a) values (215,35);
+insert into t (id,a) values (215,36);
+insert into t (id,a) values (215,37);
+insert into t (id,a) values (215,38);
+insert into t (id,a) values (215,39);
+insert into t (id,a) values (215,40);
+insert into t (id,a) values (215,41);
+insert into t (id,a) values (215,42);
+insert into t (id,a) values (215,43);
+insert into t (id,a) values (215,44);
+insert into t (id,a) values (215,45);
+insert into t (id,a) values (215,46);
+insert into t (id,a) values (215,47);
+insert into t (id,a) values (215,48);
+insert into t (id,a) values (215,49);
+insert into t (id,a) values (215,50);
+insert into t (id,a) values (215,51);
+insert into t (id,a) values (215,52);
+insert into t (id,a) values (215,53);
+insert into t (id,a) values (215,54);
+insert into t (id,a) values (215,55);
+insert into t (id,a) values (215,56);
+insert into t (id,a) values (215,57);
+insert into t (id,a) values (215,58);
+insert into t (id,a) values (215,59);
+insert into t (id,a) values (215,60);
+insert into t (id,a) values (215,61);
+insert into t (id,a) values (215,62);
+insert into t (id,a) values (215,63);
+insert into t (id,a) values (215,64);
+insert into t (id,a) values (215,65);
+insert into t (id,a) values (215,66);
+insert into t (id,a) values (215,67);
+insert into t (id,a) values (215,68);
+insert into t (id,a) values (215,69);
+insert into t (id,a) values (215,70);
+insert into t (id,a) values (215,71);
+insert into t (id,a) values (215,72);
+insert into t (id,a) values (215,73);
+insert into t (id,a) values (215,74);
+insert into t (id,a) values (215,75);
+insert into t (id,a) values (215,76);
+insert into t (id,a) values (215,77);
+insert into t (id,a) values (215,78);
+insert into t (id,a) values (215,79);
+insert into t (id,a) values (215,80);
+insert into t (id,a) values (215,81);
+insert into t (id,a) values (215,82);
+insert into t (id,a) values (215,83);
+insert into t (id,a) values (215,84);
+insert into t (id,a) values (215,85);
+insert into t (id,a) values (215,86);
+insert into t (id,a) values (215,87);
+insert into t (id,a) values (215,88);
+insert into t (id,a) values (215,89);
+insert into t (id,a) values (215,90);
+insert into t (id,a) values (215,91);
+insert into t (id,a) values (215,92);
+insert into t (id,a) values (215,93);
+insert into t (id,a) values (215,94);
+insert into t (id,a) values (215,95);
+insert into t (id,a) values (215,96);
+insert into t (id,a) values (215,97);
+insert into t (id,a) values (215,98);
+insert into t (id,a) values (215,99);
+insert into t (id,a) values (216,0);
+insert into t (id,a) values (216,1);
+insert into t (id,a) values (216,2);
+insert into t (id,a) values (216,3);
+insert into t (id,a) values (216,4);
+insert into t (id,a) values (216,5);
+insert into t (id,a) values (216,6);
+insert into t (id,a) values (216,7);
+insert into t (id,a) values (216,8);
+insert into t (id,a) values (216,9);
+insert into t (id,a) values (216,10);
+insert into t (id,a) values (216,11);
+insert into t (id,a) values (216,12);
+insert into t (id,a) values (216,13);
+insert into t (id,a) values (216,14);
+insert into t (id,a) values (216,15);
+insert into t (id,a) values (216,16);
+insert into t (id,a) values (216,17);
+insert into t (id,a) values (216,18);
+insert into t (id,a) values (216,19);
+insert into t (id,a) values (216,20);
+insert into t (id,a) values (216,21);
+insert into t (id,a) values (216,22);
+insert into t (id,a) values (216,23);
+insert into t (id,a) values (216,24);
+insert into t (id,a) values (216,25);
+insert into t (id,a) values (216,26);
+insert into t (id,a) values (216,27);
+insert into t (id,a) values (216,28);
+insert into t (id,a) values (216,29);
+insert into t (id,a) values (216,30);
+insert into t (id,a) values (216,31);
+insert into t (id,a) values (216,32);
+insert into t (id,a) values (216,33);
+insert into t (id,a) values (216,34);
+insert into t (id,a) values (216,35);
+insert into t (id,a) values (216,36);
+insert into t (id,a) values (216,37);
+insert into t (id,a) values (216,38);
+insert into t (id,a) values (216,39);
+insert into t (id,a) values (216,40);
+insert into t (id,a) values (216,41);
+insert into t (id,a) values (216,42);
+insert into t (id,a) values (216,43);
+insert into t (id,a) values (216,44);
+insert into t (id,a) values (216,45);
+insert into t (id,a) values (216,46);
+insert into t (id,a) values (216,47);
+insert into t (id,a) values (216,48);
+insert into t (id,a) values (216,49);
+insert into t (id,a) values (216,50);
+insert into t (id,a) values (216,51);
+insert into t (id,a) values (216,52);
+insert into t (id,a) values (216,53);
+insert into t (id,a) values (216,54);
+insert into t (id,a) values (216,55);
+insert into t (id,a) values (216,56);
+insert into t (id,a) values (216,57);
+insert into t (id,a) values (216,58);
+insert into t (id,a) values (216,59);
+insert into t (id,a) values (216,60);
+insert into t (id,a) values (216,61);
+insert into t (id,a) values (216,62);
+insert into t (id,a) values (216,63);
+insert into t (id,a) values (216,64);
+insert into t (id,a) values (216,65);
+insert into t (id,a) values (216,66);
+insert into t (id,a) values (216,67);
+insert into t (id,a) values (216,68);
+insert into t (id,a) values (216,69);
+insert into t (id,a) values (216,70);
+insert into t (id,a) values (216,71);
+insert into t (id,a) values (216,72);
+insert into t (id,a) values (216,73);
+insert into t (id,a) values (216,74);
+insert into t (id,a) values (216,75);
+insert into t (id,a) values (216,76);
+insert into t (id,a) values (216,77);
+insert into t (id,a) values (216,78);
+insert into t (id,a) values (216,79);
+insert into t (id,a) values (216,80);
+insert into t (id,a) values (216,81);
+insert into t (id,a) values (216,82);
+insert into t (id,a) values (216,83);
+insert into t (id,a) values (216,84);
+insert into t (id,a) values (216,85);
+insert into t (id,a) values (216,86);
+insert into t (id,a) values (216,87);
+insert into t (id,a) values (216,88);
+insert into t (id,a) values (216,89);
+insert into t (id,a) values (216,90);
+insert into t (id,a) values (216,91);
+insert into t (id,a) values (216,92);
+insert into t (id,a) values (216,93);
+insert into t (id,a) values (216,94);
+insert into t (id,a) values (216,95);
+insert into t (id,a) values (216,96);
+insert into t (id,a) values (216,97);
+insert into t (id,a) values (216,98);
+insert into t (id,a) values (216,99);
+insert into t (id,a) values (217,0);
+insert into t (id,a) values (217,1);
+insert into t (id,a) values (217,2);
+insert into t (id,a) values (217,3);
+insert into t (id,a) values (217,4);
+insert into t (id,a) values (217,5);
+insert into t (id,a) values (217,6);
+insert into t (id,a) values (217,7);
+insert into t (id,a) values (217,8);
+insert into t (id,a) values (217,9);
+insert into t (id,a) values (217,10);
+insert into t (id,a) values (217,11);
+insert into t (id,a) values (217,12);
+insert into t (id,a) values (217,13);
+insert into t (id,a) values (217,14);
+insert into t (id,a) values (217,15);
+insert into t (id,a) values (217,16);
+insert into t (id,a) values (217,17);
+insert into t (id,a) values (217,18);
+insert into t (id,a) values (217,19);
+insert into t (id,a) values (217,20);
+insert into t (id,a) values (217,21);
+insert into t (id,a) values (217,22);
+insert into t (id,a) values (217,23);
+insert into t (id,a) values (217,24);
+insert into t (id,a) values (217,25);
+insert into t (id,a) values (217,26);
+insert into t (id,a) values (217,27);
+insert into t (id,a) values (217,28);
+insert into t (id,a) values (217,29);
+insert into t (id,a) values (217,30);
+insert into t (id,a) values (217,31);
+insert into t (id,a) values (217,32);
+insert into t (id,a) values (217,33);
+insert into t (id,a) values (217,34);
+insert into t (id,a) values (217,35);
+insert into t (id,a) values (217,36);
+insert into t (id,a) values (217,37);
+insert into t (id,a) values (217,38);
+insert into t (id,a) values (217,39);
+insert into t (id,a) values (217,40);
+insert into t (id,a) values (217,41);
+insert into t (id,a) values (217,42);
+insert into t (id,a) values (217,43);
+insert into t (id,a) values (217,44);
+insert into t (id,a) values (217,45);
+insert into t (id,a) values (217,46);
+insert into t (id,a) values (217,47);
+insert into t (id,a) values (217,48);
+insert into t (id,a) values (217,49);
+insert into t (id,a) values (217,50);
+insert into t (id,a) values (217,51);
+insert into t (id,a) values (217,52);
+insert into t (id,a) values (217,53);
+insert into t (id,a) values (217,54);
+insert into t (id,a) values (217,55);
+insert into t (id,a) values (217,56);
+insert into t (id,a) values (217,57);
+insert into t (id,a) values (217,58);
+insert into t (id,a) values (217,59);
+insert into t (id,a) values (217,60);
+insert into t (id,a) values (217,61);
+insert into t (id,a) values (217,62);
+insert into t (id,a) values (217,63);
+insert into t (id,a) values (217,64);
+insert into t (id,a) values (217,65);
+insert into t (id,a) values (217,66);
+insert into t (id,a) values (217,67);
+insert into t (id,a) values (217,68);
+insert into t (id,a) values (217,69);
+insert into t (id,a) values (217,70);
+insert into t (id,a) values (217,71);
+insert into t (id,a) values (217,72);
+insert into t (id,a) values (217,73);
+insert into t (id,a) values (217,74);
+insert into t (id,a) values (217,75);
+insert into t (id,a) values (217,76);
+insert into t (id,a) values (217,77);
+insert into t (id,a) values (217,78);
+insert into t (id,a) values (217,79);
+insert into t (id,a) values (217,80);
+insert into t (id,a) values (217,81);
+insert into t (id,a) values (217,82);
+insert into t (id,a) values (217,83);
+insert into t (id,a) values (217,84);
+insert into t (id,a) values (217,85);
+insert into t (id,a) values (217,86);
+insert into t (id,a) values (217,87);
+insert into t (id,a) values (217,88);
+insert into t (id,a) values (217,89);
+insert into t (id,a) values (217,90);
+insert into t (id,a) values (217,91);
+insert into t (id,a) values (217,92);
+insert into t (id,a) values (217,93);
+insert into t (id,a) values (217,94);
+insert into t (id,a) values (217,95);
+insert into t (id,a) values (217,96);
+insert into t (id,a) values (217,97);
+insert into t (id,a) values (217,98);
+insert into t (id,a) values (217,99);
+insert into t (id,a) values (218,0);
+insert into t (id,a) values (218,1);
+insert into t (id,a) values (218,2);
+insert into t (id,a) values (218,3);
+insert into t (id,a) values (218,4);
+insert into t (id,a) values (218,5);
+insert into t (id,a) values (218,6);
+insert into t (id,a) values (218,7);
+insert into t (id,a) values (218,8);
+insert into t (id,a) values (218,9);
+insert into t (id,a) values (218,10);
+insert into t (id,a) values (218,11);
+insert into t (id,a) values (218,12);
+insert into t (id,a) values (218,13);
+insert into t (id,a) values (218,14);
+insert into t (id,a) values (218,15);
+insert into t (id,a) values (218,16);
+insert into t (id,a) values (218,17);
+insert into t (id,a) values (218,18);
+insert into t (id,a) values (218,19);
+insert into t (id,a) values (218,20);
+insert into t (id,a) values (218,21);
+insert into t (id,a) values (218,22);
+insert into t (id,a) values (218,23);
+insert into t (id,a) values (218,24);
+insert into t (id,a) values (218,25);
+insert into t (id,a) values (218,26);
+insert into t (id,a) values (218,27);
+insert into t (id,a) values (218,28);
+insert into t (id,a) values (218,29);
+insert into t (id,a) values (218,30);
+insert into t (id,a) values (218,31);
+insert into t (id,a) values (218,32);
+insert into t (id,a) values (218,33);
+insert into t (id,a) values (218,34);
+insert into t (id,a) values (218,35);
+insert into t (id,a) values (218,36);
+insert into t (id,a) values (218,37);
+insert into t (id,a) values (218,38);
+insert into t (id,a) values (218,39);
+insert into t (id,a) values (218,40);
+insert into t (id,a) values (218,41);
+insert into t (id,a) values (218,42);
+insert into t (id,a) values (218,43);
+insert into t (id,a) values (218,44);
+insert into t (id,a) values (218,45);
+insert into t (id,a) values (218,46);
+insert into t (id,a) values (218,47);
+insert into t (id,a) values (218,48);
+insert into t (id,a) values (218,49);
+insert into t (id,a) values (218,50);
+insert into t (id,a) values (218,51);
+insert into t (id,a) values (218,52);
+insert into t (id,a) values (218,53);
+insert into t (id,a) values (218,54);
+insert into t (id,a) values (218,55);
+insert into t (id,a) values (218,56);
+insert into t (id,a) values (218,57);
+insert into t (id,a) values (218,58);
+insert into t (id,a) values (218,59);
+insert into t (id,a) values (218,60);
+insert into t (id,a) values (218,61);
+insert into t (id,a) values (218,62);
+insert into t (id,a) values (218,63);
+insert into t (id,a) values (218,64);
+insert into t (id,a) values (218,65);
+insert into t (id,a) values (218,66);
+insert into t (id,a) values (218,67);
+insert into t (id,a) values (218,68);
+insert into t (id,a) values (218,69);
+insert into t (id,a) values (218,70);
+insert into t (id,a) values (218,71);
+insert into t (id,a) values (218,72);
+insert into t (id,a) values (218,73);
+insert into t (id,a) values (218,74);
+insert into t (id,a) values (218,75);
+insert into t (id,a) values (218,76);
+insert into t (id,a) values (218,77);
+insert into t (id,a) values (218,78);
+insert into t (id,a) values (218,79);
+insert into t (id,a) values (218,80);
+insert into t (id,a) values (218,81);
+insert into t (id,a) values (218,82);
+insert into t (id,a) values (218,83);
+insert into t (id,a) values (218,84);
+insert into t (id,a) values (218,85);
+insert into t (id,a) values (218,86);
+insert into t (id,a) values (218,87);
+insert into t (id,a) values (218,88);
+insert into t (id,a) values (218,89);
+insert into t (id,a) values (218,90);
+insert into t (id,a) values (218,91);
+insert into t (id,a) values (218,92);
+insert into t (id,a) values (218,93);
+insert into t (id,a) values (218,94);
+insert into t (id,a) values (218,95);
+insert into t (id,a) values (218,96);
+insert into t (id,a) values (218,97);
+insert into t (id,a) values (218,98);
+insert into t (id,a) values (218,99);
+insert into t (id,a) values (219,0);
+insert into t (id,a) values (219,1);
+insert into t (id,a) values (219,2);
+insert into t (id,a) values (219,3);
+insert into t (id,a) values (219,4);
+insert into t (id,a) values (219,5);
+insert into t (id,a) values (219,6);
+insert into t (id,a) values (219,7);
+insert into t (id,a) values (219,8);
+insert into t (id,a) values (219,9);
+insert into t (id,a) values (219,10);
+insert into t (id,a) values (219,11);
+insert into t (id,a) values (219,12);
+insert into t (id,a) values (219,13);
+insert into t (id,a) values (219,14);
+insert into t (id,a) values (219,15);
+insert into t (id,a) values (219,16);
+insert into t (id,a) values (219,17);
+insert into t (id,a) values (219,18);
+insert into t (id,a) values (219,19);
+insert into t (id,a) values (219,20);
+insert into t (id,a) values (219,21);
+insert into t (id,a) values (219,22);
+insert into t (id,a) values (219,23);
+insert into t (id,a) values (219,24);
+insert into t (id,a) values (219,25);
+insert into t (id,a) values (219,26);
+insert into t (id,a) values (219,27);
+insert into t (id,a) values (219,28);
+insert into t (id,a) values (219,29);
+insert into t (id,a) values (219,30);
+insert into t (id,a) values (219,31);
+insert into t (id,a) values (219,32);
+insert into t (id,a) values (219,33);
+insert into t (id,a) values (219,34);
+insert into t (id,a) values (219,35);
+insert into t (id,a) values (219,36);
+insert into t (id,a) values (219,37);
+insert into t (id,a) values (219,38);
+insert into t (id,a) values (219,39);
+insert into t (id,a) values (219,40);
+insert into t (id,a) values (219,41);
+insert into t (id,a) values (219,42);
+insert into t (id,a) values (219,43);
+insert into t (id,a) values (219,44);
+insert into t (id,a) values (219,45);
+insert into t (id,a) values (219,46);
+insert into t (id,a) values (219,47);
+insert into t (id,a) values (219,48);
+insert into t (id,a) values (219,49);
+insert into t (id,a) values (219,50);
+insert into t (id,a) values (219,51);
+insert into t (id,a) values (219,52);
+insert into t (id,a) values (219,53);
+insert into t (id,a) values (219,54);
+insert into t (id,a) values (219,55);
+insert into t (id,a) values (219,56);
+insert into t (id,a) values (219,57);
+insert into t (id,a) values (219,58);
+insert into t (id,a) values (219,59);
+insert into t (id,a) values (219,60);
+insert into t (id,a) values (219,61);
+insert into t (id,a) values (219,62);
+insert into t (id,a) values (219,63);
+insert into t (id,a) values (219,64);
+insert into t (id,a) values (219,65);
+insert into t (id,a) values (219,66);
+insert into t (id,a) values (219,67);
+insert into t (id,a) values (219,68);
+insert into t (id,a) values (219,69);
+insert into t (id,a) values (219,70);
+insert into t (id,a) values (219,71);
+insert into t (id,a) values (219,72);
+insert into t (id,a) values (219,73);
+insert into t (id,a) values (219,74);
+insert into t (id,a) values (219,75);
+insert into t (id,a) values (219,76);
+insert into t (id,a) values (219,77);
+insert into t (id,a) values (219,78);
+insert into t (id,a) values (219,79);
+insert into t (id,a) values (219,80);
+insert into t (id,a) values (219,81);
+insert into t (id,a) values (219,82);
+insert into t (id,a) values (219,83);
+insert into t (id,a) values (219,84);
+insert into t (id,a) values (219,85);
+insert into t (id,a) values (219,86);
+insert into t (id,a) values (219,87);
+insert into t (id,a) values (219,88);
+insert into t (id,a) values (219,89);
+insert into t (id,a) values (219,90);
+insert into t (id,a) values (219,91);
+insert into t (id,a) values (219,92);
+insert into t (id,a) values (219,93);
+insert into t (id,a) values (219,94);
+insert into t (id,a) values (219,95);
+insert into t (id,a) values (219,96);
+insert into t (id,a) values (219,97);
+insert into t (id,a) values (219,98);
+insert into t (id,a) values (219,99);
+insert into t (id,a) values (220,0);
+insert into t (id,a) values (220,1);
+insert into t (id,a) values (220,2);
+insert into t (id,a) values (220,3);
+insert into t (id,a) values (220,4);
+insert into t (id,a) values (220,5);
+insert into t (id,a) values (220,6);
+insert into t (id,a) values (220,7);
+insert into t (id,a) values (220,8);
+insert into t (id,a) values (220,9);
+insert into t (id,a) values (220,10);
+insert into t (id,a) values (220,11);
+insert into t (id,a) values (220,12);
+insert into t (id,a) values (220,13);
+insert into t (id,a) values (220,14);
+insert into t (id,a) values (220,15);
+insert into t (id,a) values (220,16);
+insert into t (id,a) values (220,17);
+insert into t (id,a) values (220,18);
+insert into t (id,a) values (220,19);
+insert into t (id,a) values (220,20);
+insert into t (id,a) values (220,21);
+insert into t (id,a) values (220,22);
+insert into t (id,a) values (220,23);
+insert into t (id,a) values (220,24);
+insert into t (id,a) values (220,25);
+insert into t (id,a) values (220,26);
+insert into t (id,a) values (220,27);
+insert into t (id,a) values (220,28);
+insert into t (id,a) values (220,29);
+insert into t (id,a) values (220,30);
+insert into t (id,a) values (220,31);
+insert into t (id,a) values (220,32);
+insert into t (id,a) values (220,33);
+insert into t (id,a) values (220,34);
+insert into t (id,a) values (220,35);
+insert into t (id,a) values (220,36);
+insert into t (id,a) values (220,37);
+insert into t (id,a) values (220,38);
+insert into t (id,a) values (220,39);
+insert into t (id,a) values (220,40);
+insert into t (id,a) values (220,41);
+insert into t (id,a) values (220,42);
+insert into t (id,a) values (220,43);
+insert into t (id,a) values (220,44);
+insert into t (id,a) values (220,45);
+insert into t (id,a) values (220,46);
+insert into t (id,a) values (220,47);
+insert into t (id,a) values (220,48);
+insert into t (id,a) values (220,49);
+insert into t (id,a) values (220,50);
+insert into t (id,a) values (220,51);
+insert into t (id,a) values (220,52);
+insert into t (id,a) values (220,53);
+insert into t (id,a) values (220,54);
+insert into t (id,a) values (220,55);
+insert into t (id,a) values (220,56);
+insert into t (id,a) values (220,57);
+insert into t (id,a) values (220,58);
+insert into t (id,a) values (220,59);
+insert into t (id,a) values (220,60);
+insert into t (id,a) values (220,61);
+insert into t (id,a) values (220,62);
+insert into t (id,a) values (220,63);
+insert into t (id,a) values (220,64);
+insert into t (id,a) values (220,65);
+insert into t (id,a) values (220,66);
+insert into t (id,a) values (220,67);
+insert into t (id,a) values (220,68);
+insert into t (id,a) values (220,69);
+insert into t (id,a) values (220,70);
+insert into t (id,a) values (220,71);
+insert into t (id,a) values (220,72);
+insert into t (id,a) values (220,73);
+insert into t (id,a) values (220,74);
+insert into t (id,a) values (220,75);
+insert into t (id,a) values (220,76);
+insert into t (id,a) values (220,77);
+insert into t (id,a) values (220,78);
+insert into t (id,a) values (220,79);
+insert into t (id,a) values (220,80);
+insert into t (id,a) values (220,81);
+insert into t (id,a) values (220,82);
+insert into t (id,a) values (220,83);
+insert into t (id,a) values (220,84);
+insert into t (id,a) values (220,85);
+insert into t (id,a) values (220,86);
+insert into t (id,a) values (220,87);
+insert into t (id,a) values (220,88);
+insert into t (id,a) values (220,89);
+insert into t (id,a) values (220,90);
+insert into t (id,a) values (220,91);
+insert into t (id,a) values (220,92);
+insert into t (id,a) values (220,93);
+insert into t (id,a) values (220,94);
+insert into t (id,a) values (220,95);
+insert into t (id,a) values (220,96);
+insert into t (id,a) values (220,97);
+insert into t (id,a) values (220,98);
+insert into t (id,a) values (220,99);
+insert into t (id,a) values (221,0);
+insert into t (id,a) values (221,1);
+insert into t (id,a) values (221,2);
+insert into t (id,a) values (221,3);
+insert into t (id,a) values (221,4);
+insert into t (id,a) values (221,5);
+insert into t (id,a) values (221,6);
+insert into t (id,a) values (221,7);
+insert into t (id,a) values (221,8);
+insert into t (id,a) values (221,9);
+insert into t (id,a) values (221,10);
+insert into t (id,a) values (221,11);
+insert into t (id,a) values (221,12);
+insert into t (id,a) values (221,13);
+insert into t (id,a) values (221,14);
+insert into t (id,a) values (221,15);
+insert into t (id,a) values (221,16);
+insert into t (id,a) values (221,17);
+insert into t (id,a) values (221,18);
+insert into t (id,a) values (221,19);
+insert into t (id,a) values (221,20);
+insert into t (id,a) values (221,21);
+insert into t (id,a) values (221,22);
+insert into t (id,a) values (221,23);
+insert into t (id,a) values (221,24);
+insert into t (id,a) values (221,25);
+insert into t (id,a) values (221,26);
+insert into t (id,a) values (221,27);
+insert into t (id,a) values (221,28);
+insert into t (id,a) values (221,29);
+insert into t (id,a) values (221,30);
+insert into t (id,a) values (221,31);
+insert into t (id,a) values (221,32);
+insert into t (id,a) values (221,33);
+insert into t (id,a) values (221,34);
+insert into t (id,a) values (221,35);
+insert into t (id,a) values (221,36);
+insert into t (id,a) values (221,37);
+insert into t (id,a) values (221,38);
+insert into t (id,a) values (221,39);
+insert into t (id,a) values (221,40);
+insert into t (id,a) values (221,41);
+insert into t (id,a) values (221,42);
+insert into t (id,a) values (221,43);
+insert into t (id,a) values (221,44);
+insert into t (id,a) values (221,45);
+insert into t (id,a) values (221,46);
+insert into t (id,a) values (221,47);
+insert into t (id,a) values (221,48);
+insert into t (id,a) values (221,49);
+insert into t (id,a) values (221,50);
+insert into t (id,a) values (221,51);
+insert into t (id,a) values (221,52);
+insert into t (id,a) values (221,53);
+insert into t (id,a) values (221,54);
+insert into t (id,a) values (221,55);
+insert into t (id,a) values (221,56);
+insert into t (id,a) values (221,57);
+insert into t (id,a) values (221,58);
+insert into t (id,a) values (221,59);
+insert into t (id,a) values (221,60);
+insert into t (id,a) values (221,61);
+insert into t (id,a) values (221,62);
+insert into t (id,a) values (221,63);
+insert into t (id,a) values (221,64);
+insert into t (id,a) values (221,65);
+insert into t (id,a) values (221,66);
+insert into t (id,a) values (221,67);
+insert into t (id,a) values (221,68);
+insert into t (id,a) values (221,69);
+insert into t (id,a) values (221,70);
+insert into t (id,a) values (221,71);
+insert into t (id,a) values (221,72);
+insert into t (id,a) values (221,73);
+insert into t (id,a) values (221,74);
+insert into t (id,a) values (221,75);
+insert into t (id,a) values (221,76);
+insert into t (id,a) values (221,77);
+insert into t (id,a) values (221,78);
+insert into t (id,a) values (221,79);
+insert into t (id,a) values (221,80);
+insert into t (id,a) values (221,81);
+insert into t (id,a) values (221,82);
+insert into t (id,a) values (221,83);
+insert into t (id,a) values (221,84);
+insert into t (id,a) values (221,85);
+insert into t (id,a) values (221,86);
+insert into t (id,a) values (221,87);
+insert into t (id,a) values (221,88);
+insert into t (id,a) values (221,89);
+insert into t (id,a) values (221,90);
+insert into t (id,a) values (221,91);
+insert into t (id,a) values (221,92);
+insert into t (id,a) values (221,93);
+insert into t (id,a) values (221,94);
+insert into t (id,a) values (221,95);
+insert into t (id,a) values (221,96);
+insert into t (id,a) values (221,97);
+insert into t (id,a) values (221,98);
+insert into t (id,a) values (221,99);
+insert into t (id,a) values (222,0);
+insert into t (id,a) values (222,1);
+insert into t (id,a) values (222,2);
+insert into t (id,a) values (222,3);
+insert into t (id,a) values (222,4);
+insert into t (id,a) values (222,5);
+insert into t (id,a) values (222,6);
+insert into t (id,a) values (222,7);
+insert into t (id,a) values (222,8);
+insert into t (id,a) values (222,9);
+insert into t (id,a) values (222,10);
+insert into t (id,a) values (222,11);
+insert into t (id,a) values (222,12);
+insert into t (id,a) values (222,13);
+insert into t (id,a) values (222,14);
+insert into t (id,a) values (222,15);
+insert into t (id,a) values (222,16);
+insert into t (id,a) values (222,17);
+insert into t (id,a) values (222,18);
+insert into t (id,a) values (222,19);
+insert into t (id,a) values (222,20);
+insert into t (id,a) values (222,21);
+insert into t (id,a) values (222,22);
+insert into t (id,a) values (222,23);
+insert into t (id,a) values (222,24);
+insert into t (id,a) values (222,25);
+insert into t (id,a) values (222,26);
+insert into t (id,a) values (222,27);
+insert into t (id,a) values (222,28);
+insert into t (id,a) values (222,29);
+insert into t (id,a) values (222,30);
+insert into t (id,a) values (222,31);
+insert into t (id,a) values (222,32);
+insert into t (id,a) values (222,33);
+insert into t (id,a) values (222,34);
+insert into t (id,a) values (222,35);
+insert into t (id,a) values (222,36);
+insert into t (id,a) values (222,37);
+insert into t (id,a) values (222,38);
+insert into t (id,a) values (222,39);
+insert into t (id,a) values (222,40);
+insert into t (id,a) values (222,41);
+insert into t (id,a) values (222,42);
+insert into t (id,a) values (222,43);
+insert into t (id,a) values (222,44);
+insert into t (id,a) values (222,45);
+insert into t (id,a) values (222,46);
+insert into t (id,a) values (222,47);
+insert into t (id,a) values (222,48);
+insert into t (id,a) values (222,49);
+insert into t (id,a) values (222,50);
+insert into t (id,a) values (222,51);
+insert into t (id,a) values (222,52);
+insert into t (id,a) values (222,53);
+insert into t (id,a) values (222,54);
+insert into t (id,a) values (222,55);
+insert into t (id,a) values (222,56);
+insert into t (id,a) values (222,57);
+insert into t (id,a) values (222,58);
+insert into t (id,a) values (222,59);
+insert into t (id,a) values (222,60);
+insert into t (id,a) values (222,61);
+insert into t (id,a) values (222,62);
+insert into t (id,a) values (222,63);
+insert into t (id,a) values (222,64);
+insert into t (id,a) values (222,65);
+insert into t (id,a) values (222,66);
+insert into t (id,a) values (222,67);
+insert into t (id,a) values (222,68);
+insert into t (id,a) values (222,69);
+insert into t (id,a) values (222,70);
+insert into t (id,a) values (222,71);
+insert into t (id,a) values (222,72);
+insert into t (id,a) values (222,73);
+insert into t (id,a) values (222,74);
+insert into t (id,a) values (222,75);
+insert into t (id,a) values (222,76);
+insert into t (id,a) values (222,77);
+insert into t (id,a) values (222,78);
+insert into t (id,a) values (222,79);
+insert into t (id,a) values (222,80);
+insert into t (id,a) values (222,81);
+insert into t (id,a) values (222,82);
+insert into t (id,a) values (222,83);
+insert into t (id,a) values (222,84);
+insert into t (id,a) values (222,85);
+insert into t (id,a) values (222,86);
+insert into t (id,a) values (222,87);
+insert into t (id,a) values (222,88);
+insert into t (id,a) values (222,89);
+insert into t (id,a) values (222,90);
+insert into t (id,a) values (222,91);
+insert into t (id,a) values (222,92);
+insert into t (id,a) values (222,93);
+insert into t (id,a) values (222,94);
+insert into t (id,a) values (222,95);
+insert into t (id,a) values (222,96);
+insert into t (id,a) values (222,97);
+insert into t (id,a) values (222,98);
+insert into t (id,a) values (222,99);
+insert into t (id,a) values (223,0);
+insert into t (id,a) values (223,1);
+insert into t (id,a) values (223,2);
+insert into t (id,a) values (223,3);
+insert into t (id,a) values (223,4);
+insert into t (id,a) values (223,5);
+insert into t (id,a) values (223,6);
+insert into t (id,a) values (223,7);
+insert into t (id,a) values (223,8);
+insert into t (id,a) values (223,9);
+insert into t (id,a) values (223,10);
+insert into t (id,a) values (223,11);
+insert into t (id,a) values (223,12);
+insert into t (id,a) values (223,13);
+insert into t (id,a) values (223,14);
+insert into t (id,a) values (223,15);
+insert into t (id,a) values (223,16);
+insert into t (id,a) values (223,17);
+insert into t (id,a) values (223,18);
+insert into t (id,a) values (223,19);
+insert into t (id,a) values (223,20);
+insert into t (id,a) values (223,21);
+insert into t (id,a) values (223,22);
+insert into t (id,a) values (223,23);
+insert into t (id,a) values (223,24);
+insert into t (id,a) values (223,25);
+insert into t (id,a) values (223,26);
+insert into t (id,a) values (223,27);
+insert into t (id,a) values (223,28);
+insert into t (id,a) values (223,29);
+insert into t (id,a) values (223,30);
+insert into t (id,a) values (223,31);
+insert into t (id,a) values (223,32);
+insert into t (id,a) values (223,33);
+insert into t (id,a) values (223,34);
+insert into t (id,a) values (223,35);
+insert into t (id,a) values (223,36);
+insert into t (id,a) values (223,37);
+insert into t (id,a) values (223,38);
+insert into t (id,a) values (223,39);
+insert into t (id,a) values (223,40);
+insert into t (id,a) values (223,41);
+insert into t (id,a) values (223,42);
+insert into t (id,a) values (223,43);
+insert into t (id,a) values (223,44);
+insert into t (id,a) values (223,45);
+insert into t (id,a) values (223,46);
+insert into t (id,a) values (223,47);
+insert into t (id,a) values (223,48);
+insert into t (id,a) values (223,49);
+insert into t (id,a) values (223,50);
+insert into t (id,a) values (223,51);
+insert into t (id,a) values (223,52);
+insert into t (id,a) values (223,53);
+insert into t (id,a) values (223,54);
+insert into t (id,a) values (223,55);
+insert into t (id,a) values (223,56);
+insert into t (id,a) values (223,57);
+insert into t (id,a) values (223,58);
+insert into t (id,a) values (223,59);
+insert into t (id,a) values (223,60);
+insert into t (id,a) values (223,61);
+insert into t (id,a) values (223,62);
+insert into t (id,a) values (223,63);
+insert into t (id,a) values (223,64);
+insert into t (id,a) values (223,65);
+insert into t (id,a) values (223,66);
+insert into t (id,a) values (223,67);
+insert into t (id,a) values (223,68);
+insert into t (id,a) values (223,69);
+insert into t (id,a) values (223,70);
+insert into t (id,a) values (223,71);
+insert into t (id,a) values (223,72);
+insert into t (id,a) values (223,73);
+insert into t (id,a) values (223,74);
+insert into t (id,a) values (223,75);
+insert into t (id,a) values (223,76);
+insert into t (id,a) values (223,77);
+insert into t (id,a) values (223,78);
+insert into t (id,a) values (223,79);
+insert into t (id,a) values (223,80);
+insert into t (id,a) values (223,81);
+insert into t (id,a) values (223,82);
+insert into t (id,a) values (223,83);
+insert into t (id,a) values (223,84);
+insert into t (id,a) values (223,85);
+insert into t (id,a) values (223,86);
+insert into t (id,a) values (223,87);
+insert into t (id,a) values (223,88);
+insert into t (id,a) values (223,89);
+insert into t (id,a) values (223,90);
+insert into t (id,a) values (223,91);
+insert into t (id,a) values (223,92);
+insert into t (id,a) values (223,93);
+insert into t (id,a) values (223,94);
+insert into t (id,a) values (223,95);
+insert into t (id,a) values (223,96);
+insert into t (id,a) values (223,97);
+insert into t (id,a) values (223,98);
+insert into t (id,a) values (223,99);
+insert into t (id,a) values (224,0);
+insert into t (id,a) values (224,1);
+insert into t (id,a) values (224,2);
+insert into t (id,a) values (224,3);
+insert into t (id,a) values (224,4);
+insert into t (id,a) values (224,5);
+insert into t (id,a) values (224,6);
+insert into t (id,a) values (224,7);
+insert into t (id,a) values (224,8);
+insert into t (id,a) values (224,9);
+insert into t (id,a) values (224,10);
+insert into t (id,a) values (224,11);
+insert into t (id,a) values (224,12);
+insert into t (id,a) values (224,13);
+insert into t (id,a) values (224,14);
+insert into t (id,a) values (224,15);
+insert into t (id,a) values (224,16);
+insert into t (id,a) values (224,17);
+insert into t (id,a) values (224,18);
+insert into t (id,a) values (224,19);
+insert into t (id,a) values (224,20);
+insert into t (id,a) values (224,21);
+insert into t (id,a) values (224,22);
+insert into t (id,a) values (224,23);
+insert into t (id,a) values (224,24);
+insert into t (id,a) values (224,25);
+insert into t (id,a) values (224,26);
+insert into t (id,a) values (224,27);
+insert into t (id,a) values (224,28);
+insert into t (id,a) values (224,29);
+insert into t (id,a) values (224,30);
+insert into t (id,a) values (224,31);
+insert into t (id,a) values (224,32);
+insert into t (id,a) values (224,33);
+insert into t (id,a) values (224,34);
+insert into t (id,a) values (224,35);
+insert into t (id,a) values (224,36);
+insert into t (id,a) values (224,37);
+insert into t (id,a) values (224,38);
+insert into t (id,a) values (224,39);
+insert into t (id,a) values (224,40);
+insert into t (id,a) values (224,41);
+insert into t (id,a) values (224,42);
+insert into t (id,a) values (224,43);
+insert into t (id,a) values (224,44);
+insert into t (id,a) values (224,45);
+insert into t (id,a) values (224,46);
+insert into t (id,a) values (224,47);
+insert into t (id,a) values (224,48);
+insert into t (id,a) values (224,49);
+insert into t (id,a) values (224,50);
+insert into t (id,a) values (224,51);
+insert into t (id,a) values (224,52);
+insert into t (id,a) values (224,53);
+insert into t (id,a) values (224,54);
+insert into t (id,a) values (224,55);
+insert into t (id,a) values (224,56);
+insert into t (id,a) values (224,57);
+insert into t (id,a) values (224,58);
+insert into t (id,a) values (224,59);
+insert into t (id,a) values (224,60);
+insert into t (id,a) values (224,61);
+insert into t (id,a) values (224,62);
+insert into t (id,a) values (224,63);
+insert into t (id,a) values (224,64);
+insert into t (id,a) values (224,65);
+insert into t (id,a) values (224,66);
+insert into t (id,a) values (224,67);
+insert into t (id,a) values (224,68);
+insert into t (id,a) values (224,69);
+insert into t (id,a) values (224,70);
+insert into t (id,a) values (224,71);
+insert into t (id,a) values (224,72);
+insert into t (id,a) values (224,73);
+insert into t (id,a) values (224,74);
+insert into t (id,a) values (224,75);
+insert into t (id,a) values (224,76);
+insert into t (id,a) values (224,77);
+insert into t (id,a) values (224,78);
+insert into t (id,a) values (224,79);
+insert into t (id,a) values (224,80);
+insert into t (id,a) values (224,81);
+insert into t (id,a) values (224,82);
+insert into t (id,a) values (224,83);
+insert into t (id,a) values (224,84);
+insert into t (id,a) values (224,85);
+insert into t (id,a) values (224,86);
+insert into t (id,a) values (224,87);
+insert into t (id,a) values (224,88);
+insert into t (id,a) values (224,89);
+insert into t (id,a) values (224,90);
+insert into t (id,a) values (224,91);
+insert into t (id,a) values (224,92);
+insert into t (id,a) values (224,93);
+insert into t (id,a) values (224,94);
+insert into t (id,a) values (224,95);
+insert into t (id,a) values (224,96);
+insert into t (id,a) values (224,97);
+insert into t (id,a) values (224,98);
+insert into t (id,a) values (224,99);
+insert into t (id,a) values (225,0);
+insert into t (id,a) values (225,1);
+insert into t (id,a) values (225,2);
+insert into t (id,a) values (225,3);
+insert into t (id,a) values (225,4);
+insert into t (id,a) values (225,5);
+insert into t (id,a) values (225,6);
+insert into t (id,a) values (225,7);
+insert into t (id,a) values (225,8);
+insert into t (id,a) values (225,9);
+insert into t (id,a) values (225,10);
+insert into t (id,a) values (225,11);
+insert into t (id,a) values (225,12);
+insert into t (id,a) values (225,13);
+insert into t (id,a) values (225,14);
+insert into t (id,a) values (225,15);
+insert into t (id,a) values (225,16);
+insert into t (id,a) values (225,17);
+insert into t (id,a) values (225,18);
+insert into t (id,a) values (225,19);
+insert into t (id,a) values (225,20);
+insert into t (id,a) values (225,21);
+insert into t (id,a) values (225,22);
+insert into t (id,a) values (225,23);
+insert into t (id,a) values (225,24);
+insert into t (id,a) values (225,25);
+insert into t (id,a) values (225,26);
+insert into t (id,a) values (225,27);
+insert into t (id,a) values (225,28);
+insert into t (id,a) values (225,29);
+insert into t (id,a) values (225,30);
+insert into t (id,a) values (225,31);
+insert into t (id,a) values (225,32);
+insert into t (id,a) values (225,33);
+insert into t (id,a) values (225,34);
+insert into t (id,a) values (225,35);
+insert into t (id,a) values (225,36);
+insert into t (id,a) values (225,37);
+insert into t (id,a) values (225,38);
+insert into t (id,a) values (225,39);
+insert into t (id,a) values (225,40);
+insert into t (id,a) values (225,41);
+insert into t (id,a) values (225,42);
+insert into t (id,a) values (225,43);
+insert into t (id,a) values (225,44);
+insert into t (id,a) values (225,45);
+insert into t (id,a) values (225,46);
+insert into t (id,a) values (225,47);
+insert into t (id,a) values (225,48);
+insert into t (id,a) values (225,49);
+insert into t (id,a) values (225,50);
+insert into t (id,a) values (225,51);
+insert into t (id,a) values (225,52);
+insert into t (id,a) values (225,53);
+insert into t (id,a) values (225,54);
+insert into t (id,a) values (225,55);
+insert into t (id,a) values (225,56);
+insert into t (id,a) values (225,57);
+insert into t (id,a) values (225,58);
+insert into t (id,a) values (225,59);
+insert into t (id,a) values (225,60);
+insert into t (id,a) values (225,61);
+insert into t (id,a) values (225,62);
+insert into t (id,a) values (225,63);
+insert into t (id,a) values (225,64);
+insert into t (id,a) values (225,65);
+insert into t (id,a) values (225,66);
+insert into t (id,a) values (225,67);
+insert into t (id,a) values (225,68);
+insert into t (id,a) values (225,69);
+insert into t (id,a) values (225,70);
+insert into t (id,a) values (225,71);
+insert into t (id,a) values (225,72);
+insert into t (id,a) values (225,73);
+insert into t (id,a) values (225,74);
+insert into t (id,a) values (225,75);
+insert into t (id,a) values (225,76);
+insert into t (id,a) values (225,77);
+insert into t (id,a) values (225,78);
+insert into t (id,a) values (225,79);
+insert into t (id,a) values (225,80);
+insert into t (id,a) values (225,81);
+insert into t (id,a) values (225,82);
+insert into t (id,a) values (225,83);
+insert into t (id,a) values (225,84);
+insert into t (id,a) values (225,85);
+insert into t (id,a) values (225,86);
+insert into t (id,a) values (225,87);
+insert into t (id,a) values (225,88);
+insert into t (id,a) values (225,89);
+insert into t (id,a) values (225,90);
+insert into t (id,a) values (225,91);
+insert into t (id,a) values (225,92);
+insert into t (id,a) values (225,93);
+insert into t (id,a) values (225,94);
+insert into t (id,a) values (225,95);
+insert into t (id,a) values (225,96);
+insert into t (id,a) values (225,97);
+insert into t (id,a) values (225,98);
+insert into t (id,a) values (225,99);
+insert into t (id,a) values (226,0);
+insert into t (id,a) values (226,1);
+insert into t (id,a) values (226,2);
+insert into t (id,a) values (226,3);
+insert into t (id,a) values (226,4);
+insert into t (id,a) values (226,5);
+insert into t (id,a) values (226,6);
+insert into t (id,a) values (226,7);
+insert into t (id,a) values (226,8);
+insert into t (id,a) values (226,9);
+insert into t (id,a) values (226,10);
+insert into t (id,a) values (226,11);
+insert into t (id,a) values (226,12);
+insert into t (id,a) values (226,13);
+insert into t (id,a) values (226,14);
+insert into t (id,a) values (226,15);
+insert into t (id,a) values (226,16);
+insert into t (id,a) values (226,17);
+insert into t (id,a) values (226,18);
+insert into t (id,a) values (226,19);
+insert into t (id,a) values (226,20);
+insert into t (id,a) values (226,21);
+insert into t (id,a) values (226,22);
+insert into t (id,a) values (226,23);
+insert into t (id,a) values (226,24);
+insert into t (id,a) values (226,25);
+insert into t (id,a) values (226,26);
+insert into t (id,a) values (226,27);
+insert into t (id,a) values (226,28);
+insert into t (id,a) values (226,29);
+insert into t (id,a) values (226,30);
+insert into t (id,a) values (226,31);
+insert into t (id,a) values (226,32);
+insert into t (id,a) values (226,33);
+insert into t (id,a) values (226,34);
+insert into t (id,a) values (226,35);
+insert into t (id,a) values (226,36);
+insert into t (id,a) values (226,37);
+insert into t (id,a) values (226,38);
+insert into t (id,a) values (226,39);
+insert into t (id,a) values (226,40);
+insert into t (id,a) values (226,41);
+insert into t (id,a) values (226,42);
+insert into t (id,a) values (226,43);
+insert into t (id,a) values (226,44);
+insert into t (id,a) values (226,45);
+insert into t (id,a) values (226,46);
+insert into t (id,a) values (226,47);
+insert into t (id,a) values (226,48);
+insert into t (id,a) values (226,49);
+insert into t (id,a) values (226,50);
+insert into t (id,a) values (226,51);
+insert into t (id,a) values (226,52);
+insert into t (id,a) values (226,53);
+insert into t (id,a) values (226,54);
+insert into t (id,a) values (226,55);
+insert into t (id,a) values (226,56);
+insert into t (id,a) values (226,57);
+insert into t (id,a) values (226,58);
+insert into t (id,a) values (226,59);
+insert into t (id,a) values (226,60);
+insert into t (id,a) values (226,61);
+insert into t (id,a) values (226,62);
+insert into t (id,a) values (226,63);
+insert into t (id,a) values (226,64);
+insert into t (id,a) values (226,65);
+insert into t (id,a) values (226,66);
+insert into t (id,a) values (226,67);
+insert into t (id,a) values (226,68);
+insert into t (id,a) values (226,69);
+insert into t (id,a) values (226,70);
+insert into t (id,a) values (226,71);
+insert into t (id,a) values (226,72);
+insert into t (id,a) values (226,73);
+insert into t (id,a) values (226,74);
+insert into t (id,a) values (226,75);
+insert into t (id,a) values (226,76);
+insert into t (id,a) values (226,77);
+insert into t (id,a) values (226,78);
+insert into t (id,a) values (226,79);
+insert into t (id,a) values (226,80);
+insert into t (id,a) values (226,81);
+insert into t (id,a) values (226,82);
+insert into t (id,a) values (226,83);
+insert into t (id,a) values (226,84);
+insert into t (id,a) values (226,85);
+insert into t (id,a) values (226,86);
+insert into t (id,a) values (226,87);
+insert into t (id,a) values (226,88);
+insert into t (id,a) values (226,89);
+insert into t (id,a) values (226,90);
+insert into t (id,a) values (226,91);
+insert into t (id,a) values (226,92);
+insert into t (id,a) values (226,93);
+insert into t (id,a) values (226,94);
+insert into t (id,a) values (226,95);
+insert into t (id,a) values (226,96);
+insert into t (id,a) values (226,97);
+insert into t (id,a) values (226,98);
+insert into t (id,a) values (226,99);
+insert into t (id,a) values (227,0);
+insert into t (id,a) values (227,1);
+insert into t (id,a) values (227,2);
+insert into t (id,a) values (227,3);
+insert into t (id,a) values (227,4);
+insert into t (id,a) values (227,5);
+insert into t (id,a) values (227,6);
+insert into t (id,a) values (227,7);
+insert into t (id,a) values (227,8);
+insert into t (id,a) values (227,9);
+insert into t (id,a) values (227,10);
+insert into t (id,a) values (227,11);
+insert into t (id,a) values (227,12);
+insert into t (id,a) values (227,13);
+insert into t (id,a) values (227,14);
+insert into t (id,a) values (227,15);
+insert into t (id,a) values (227,16);
+insert into t (id,a) values (227,17);
+insert into t (id,a) values (227,18);
+insert into t (id,a) values (227,19);
+insert into t (id,a) values (227,20);
+insert into t (id,a) values (227,21);
+insert into t (id,a) values (227,22);
+insert into t (id,a) values (227,23);
+insert into t (id,a) values (227,24);
+insert into t (id,a) values (227,25);
+insert into t (id,a) values (227,26);
+insert into t (id,a) values (227,27);
+insert into t (id,a) values (227,28);
+insert into t (id,a) values (227,29);
+insert into t (id,a) values (227,30);
+insert into t (id,a) values (227,31);
+insert into t (id,a) values (227,32);
+insert into t (id,a) values (227,33);
+insert into t (id,a) values (227,34);
+insert into t (id,a) values (227,35);
+insert into t (id,a) values (227,36);
+insert into t (id,a) values (227,37);
+insert into t (id,a) values (227,38);
+insert into t (id,a) values (227,39);
+insert into t (id,a) values (227,40);
+insert into t (id,a) values (227,41);
+insert into t (id,a) values (227,42);
+insert into t (id,a) values (227,43);
+insert into t (id,a) values (227,44);
+insert into t (id,a) values (227,45);
+insert into t (id,a) values (227,46);
+insert into t (id,a) values (227,47);
+insert into t (id,a) values (227,48);
+insert into t (id,a) values (227,49);
+insert into t (id,a) values (227,50);
+insert into t (id,a) values (227,51);
+insert into t (id,a) values (227,52);
+insert into t (id,a) values (227,53);
+insert into t (id,a) values (227,54);
+insert into t (id,a) values (227,55);
+insert into t (id,a) values (227,56);
+insert into t (id,a) values (227,57);
+insert into t (id,a) values (227,58);
+insert into t (id,a) values (227,59);
+insert into t (id,a) values (227,60);
+insert into t (id,a) values (227,61);
+insert into t (id,a) values (227,62);
+insert into t (id,a) values (227,63);
+insert into t (id,a) values (227,64);
+insert into t (id,a) values (227,65);
+insert into t (id,a) values (227,66);
+insert into t (id,a) values (227,67);
+insert into t (id,a) values (227,68);
+insert into t (id,a) values (227,69);
+insert into t (id,a) values (227,70);
+insert into t (id,a) values (227,71);
+insert into t (id,a) values (227,72);
+insert into t (id,a) values (227,73);
+insert into t (id,a) values (227,74);
+insert into t (id,a) values (227,75);
+insert into t (id,a) values (227,76);
+insert into t (id,a) values (227,77);
+insert into t (id,a) values (227,78);
+insert into t (id,a) values (227,79);
+insert into t (id,a) values (227,80);
+insert into t (id,a) values (227,81);
+insert into t (id,a) values (227,82);
+insert into t (id,a) values (227,83);
+insert into t (id,a) values (227,84);
+insert into t (id,a) values (227,85);
+insert into t (id,a) values (227,86);
+insert into t (id,a) values (227,87);
+insert into t (id,a) values (227,88);
+insert into t (id,a) values (227,89);
+insert into t (id,a) values (227,90);
+insert into t (id,a) values (227,91);
+insert into t (id,a) values (227,92);
+insert into t (id,a) values (227,93);
+insert into t (id,a) values (227,94);
+insert into t (id,a) values (227,95);
+insert into t (id,a) values (227,96);
+insert into t (id,a) values (227,97);
+insert into t (id,a) values (227,98);
+insert into t (id,a) values (227,99);
+insert into t (id,a) values (228,0);
+insert into t (id,a) values (228,1);
+insert into t (id,a) values (228,2);
+insert into t (id,a) values (228,3);
+insert into t (id,a) values (228,4);
+insert into t (id,a) values (228,5);
+insert into t (id,a) values (228,6);
+insert into t (id,a) values (228,7);
+insert into t (id,a) values (228,8);
+insert into t (id,a) values (228,9);
+insert into t (id,a) values (228,10);
+insert into t (id,a) values (228,11);
+insert into t (id,a) values (228,12);
+insert into t (id,a) values (228,13);
+insert into t (id,a) values (228,14);
+insert into t (id,a) values (228,15);
+insert into t (id,a) values (228,16);
+insert into t (id,a) values (228,17);
+insert into t (id,a) values (228,18);
+insert into t (id,a) values (228,19);
+insert into t (id,a) values (228,20);
+insert into t (id,a) values (228,21);
+insert into t (id,a) values (228,22);
+insert into t (id,a) values (228,23);
+insert into t (id,a) values (228,24);
+insert into t (id,a) values (228,25);
+insert into t (id,a) values (228,26);
+insert into t (id,a) values (228,27);
+insert into t (id,a) values (228,28);
+insert into t (id,a) values (228,29);
+insert into t (id,a) values (228,30);
+insert into t (id,a) values (228,31);
+insert into t (id,a) values (228,32);
+insert into t (id,a) values (228,33);
+insert into t (id,a) values (228,34);
+insert into t (id,a) values (228,35);
+insert into t (id,a) values (228,36);
+insert into t (id,a) values (228,37);
+insert into t (id,a) values (228,38);
+insert into t (id,a) values (228,39);
+insert into t (id,a) values (228,40);
+insert into t (id,a) values (228,41);
+insert into t (id,a) values (228,42);
+insert into t (id,a) values (228,43);
+insert into t (id,a) values (228,44);
+insert into t (id,a) values (228,45);
+insert into t (id,a) values (228,46);
+insert into t (id,a) values (228,47);
+insert into t (id,a) values (228,48);
+insert into t (id,a) values (228,49);
+insert into t (id,a) values (228,50);
+insert into t (id,a) values (228,51);
+insert into t (id,a) values (228,52);
+insert into t (id,a) values (228,53);
+insert into t (id,a) values (228,54);
+insert into t (id,a) values (228,55);
+insert into t (id,a) values (228,56);
+insert into t (id,a) values (228,57);
+insert into t (id,a) values (228,58);
+insert into t (id,a) values (228,59);
+insert into t (id,a) values (228,60);
+insert into t (id,a) values (228,61);
+insert into t (id,a) values (228,62);
+insert into t (id,a) values (228,63);
+insert into t (id,a) values (228,64);
+insert into t (id,a) values (228,65);
+insert into t (id,a) values (228,66);
+insert into t (id,a) values (228,67);
+insert into t (id,a) values (228,68);
+insert into t (id,a) values (228,69);
+insert into t (id,a) values (228,70);
+insert into t (id,a) values (228,71);
+insert into t (id,a) values (228,72);
+insert into t (id,a) values (228,73);
+insert into t (id,a) values (228,74);
+insert into t (id,a) values (228,75);
+insert into t (id,a) values (228,76);
+insert into t (id,a) values (228,77);
+insert into t (id,a) values (228,78);
+insert into t (id,a) values (228,79);
+insert into t (id,a) values (228,80);
+insert into t (id,a) values (228,81);
+insert into t (id,a) values (228,82);
+insert into t (id,a) values (228,83);
+insert into t (id,a) values (228,84);
+insert into t (id,a) values (228,85);
+insert into t (id,a) values (228,86);
+insert into t (id,a) values (228,87);
+insert into t (id,a) values (228,88);
+insert into t (id,a) values (228,89);
+insert into t (id,a) values (228,90);
+insert into t (id,a) values (228,91);
+insert into t (id,a) values (228,92);
+insert into t (id,a) values (228,93);
+insert into t (id,a) values (228,94);
+insert into t (id,a) values (228,95);
+insert into t (id,a) values (228,96);
+insert into t (id,a) values (228,97);
+insert into t (id,a) values (228,98);
+insert into t (id,a) values (228,99);
+insert into t (id,a) values (229,0);
+insert into t (id,a) values (229,1);
+insert into t (id,a) values (229,2);
+insert into t (id,a) values (229,3);
+insert into t (id,a) values (229,4);
+insert into t (id,a) values (229,5);
+insert into t (id,a) values (229,6);
+insert into t (id,a) values (229,7);
+insert into t (id,a) values (229,8);
+insert into t (id,a) values (229,9);
+insert into t (id,a) values (229,10);
+insert into t (id,a) values (229,11);
+insert into t (id,a) values (229,12);
+insert into t (id,a) values (229,13);
+insert into t (id,a) values (229,14);
+insert into t (id,a) values (229,15);
+insert into t (id,a) values (229,16);
+insert into t (id,a) values (229,17);
+insert into t (id,a) values (229,18);
+insert into t (id,a) values (229,19);
+insert into t (id,a) values (229,20);
+insert into t (id,a) values (229,21);
+insert into t (id,a) values (229,22);
+insert into t (id,a) values (229,23);
+insert into t (id,a) values (229,24);
+insert into t (id,a) values (229,25);
+insert into t (id,a) values (229,26);
+insert into t (id,a) values (229,27);
+insert into t (id,a) values (229,28);
+insert into t (id,a) values (229,29);
+insert into t (id,a) values (229,30);
+insert into t (id,a) values (229,31);
+insert into t (id,a) values (229,32);
+insert into t (id,a) values (229,33);
+insert into t (id,a) values (229,34);
+insert into t (id,a) values (229,35);
+insert into t (id,a) values (229,36);
+insert into t (id,a) values (229,37);
+insert into t (id,a) values (229,38);
+insert into t (id,a) values (229,39);
+insert into t (id,a) values (229,40);
+insert into t (id,a) values (229,41);
+insert into t (id,a) values (229,42);
+insert into t (id,a) values (229,43);
+insert into t (id,a) values (229,44);
+insert into t (id,a) values (229,45);
+insert into t (id,a) values (229,46);
+insert into t (id,a) values (229,47);
+insert into t (id,a) values (229,48);
+insert into t (id,a) values (229,49);
+insert into t (id,a) values (229,50);
+insert into t (id,a) values (229,51);
+insert into t (id,a) values (229,52);
+insert into t (id,a) values (229,53);
+insert into t (id,a) values (229,54);
+insert into t (id,a) values (229,55);
+insert into t (id,a) values (229,56);
+insert into t (id,a) values (229,57);
+insert into t (id,a) values (229,58);
+insert into t (id,a) values (229,59);
+insert into t (id,a) values (229,60);
+insert into t (id,a) values (229,61);
+insert into t (id,a) values (229,62);
+insert into t (id,a) values (229,63);
+insert into t (id,a) values (229,64);
+insert into t (id,a) values (229,65);
+insert into t (id,a) values (229,66);
+insert into t (id,a) values (229,67);
+insert into t (id,a) values (229,68);
+insert into t (id,a) values (229,69);
+insert into t (id,a) values (229,70);
+insert into t (id,a) values (229,71);
+insert into t (id,a) values (229,72);
+insert into t (id,a) values (229,73);
+insert into t (id,a) values (229,74);
+insert into t (id,a) values (229,75);
+insert into t (id,a) values (229,76);
+insert into t (id,a) values (229,77);
+insert into t (id,a) values (229,78);
+insert into t (id,a) values (229,79);
+insert into t (id,a) values (229,80);
+insert into t (id,a) values (229,81);
+insert into t (id,a) values (229,82);
+insert into t (id,a) values (229,83);
+insert into t (id,a) values (229,84);
+insert into t (id,a) values (229,85);
+insert into t (id,a) values (229,86);
+insert into t (id,a) values (229,87);
+insert into t (id,a) values (229,88);
+insert into t (id,a) values (229,89);
+insert into t (id,a) values (229,90);
+insert into t (id,a) values (229,91);
+insert into t (id,a) values (229,92);
+insert into t (id,a) values (229,93);
+insert into t (id,a) values (229,94);
+insert into t (id,a) values (229,95);
+insert into t (id,a) values (229,96);
+insert into t (id,a) values (229,97);
+insert into t (id,a) values (229,98);
+insert into t (id,a) values (229,99);
+insert into t (id,a) values (230,0);
+insert into t (id,a) values (230,1);
+insert into t (id,a) values (230,2);
+insert into t (id,a) values (230,3);
+insert into t (id,a) values (230,4);
+insert into t (id,a) values (230,5);
+insert into t (id,a) values (230,6);
+insert into t (id,a) values (230,7);
+insert into t (id,a) values (230,8);
+insert into t (id,a) values (230,9);
+insert into t (id,a) values (230,10);
+insert into t (id,a) values (230,11);
+insert into t (id,a) values (230,12);
+insert into t (id,a) values (230,13);
+insert into t (id,a) values (230,14);
+insert into t (id,a) values (230,15);
+insert into t (id,a) values (230,16);
+insert into t (id,a) values (230,17);
+insert into t (id,a) values (230,18);
+insert into t (id,a) values (230,19);
+insert into t (id,a) values (230,20);
+insert into t (id,a) values (230,21);
+insert into t (id,a) values (230,22);
+insert into t (id,a) values (230,23);
+insert into t (id,a) values (230,24);
+insert into t (id,a) values (230,25);
+insert into t (id,a) values (230,26);
+insert into t (id,a) values (230,27);
+insert into t (id,a) values (230,28);
+insert into t (id,a) values (230,29);
+insert into t (id,a) values (230,30);
+insert into t (id,a) values (230,31);
+insert into t (id,a) values (230,32);
+insert into t (id,a) values (230,33);
+insert into t (id,a) values (230,34);
+insert into t (id,a) values (230,35);
+insert into t (id,a) values (230,36);
+insert into t (id,a) values (230,37);
+insert into t (id,a) values (230,38);
+insert into t (id,a) values (230,39);
+insert into t (id,a) values (230,40);
+insert into t (id,a) values (230,41);
+insert into t (id,a) values (230,42);
+insert into t (id,a) values (230,43);
+insert into t (id,a) values (230,44);
+insert into t (id,a) values (230,45);
+insert into t (id,a) values (230,46);
+insert into t (id,a) values (230,47);
+insert into t (id,a) values (230,48);
+insert into t (id,a) values (230,49);
+insert into t (id,a) values (230,50);
+insert into t (id,a) values (230,51);
+insert into t (id,a) values (230,52);
+insert into t (id,a) values (230,53);
+insert into t (id,a) values (230,54);
+insert into t (id,a) values (230,55);
+insert into t (id,a) values (230,56);
+insert into t (id,a) values (230,57);
+insert into t (id,a) values (230,58);
+insert into t (id,a) values (230,59);
+insert into t (id,a) values (230,60);
+insert into t (id,a) values (230,61);
+insert into t (id,a) values (230,62);
+insert into t (id,a) values (230,63);
+insert into t (id,a) values (230,64);
+insert into t (id,a) values (230,65);
+insert into t (id,a) values (230,66);
+insert into t (id,a) values (230,67);
+insert into t (id,a) values (230,68);
+insert into t (id,a) values (230,69);
+insert into t (id,a) values (230,70);
+insert into t (id,a) values (230,71);
+insert into t (id,a) values (230,72);
+insert into t (id,a) values (230,73);
+insert into t (id,a) values (230,74);
+insert into t (id,a) values (230,75);
+insert into t (id,a) values (230,76);
+insert into t (id,a) values (230,77);
+insert into t (id,a) values (230,78);
+insert into t (id,a) values (230,79);
+insert into t (id,a) values (230,80);
+insert into t (id,a) values (230,81);
+insert into t (id,a) values (230,82);
+insert into t (id,a) values (230,83);
+insert into t (id,a) values (230,84);
+insert into t (id,a) values (230,85);
+insert into t (id,a) values (230,86);
+insert into t (id,a) values (230,87);
+insert into t (id,a) values (230,88);
+insert into t (id,a) values (230,89);
+insert into t (id,a) values (230,90);
+insert into t (id,a) values (230,91);
+insert into t (id,a) values (230,92);
+insert into t (id,a) values (230,93);
+insert into t (id,a) values (230,94);
+insert into t (id,a) values (230,95);
+insert into t (id,a) values (230,96);
+insert into t (id,a) values (230,97);
+insert into t (id,a) values (230,98);
+insert into t (id,a) values (230,99);
+insert into t (id,a) values (231,0);
+insert into t (id,a) values (231,1);
+insert into t (id,a) values (231,2);
+insert into t (id,a) values (231,3);
+insert into t (id,a) values (231,4);
+insert into t (id,a) values (231,5);
+insert into t (id,a) values (231,6);
+insert into t (id,a) values (231,7);
+insert into t (id,a) values (231,8);
+insert into t (id,a) values (231,9);
+insert into t (id,a) values (231,10);
+insert into t (id,a) values (231,11);
+insert into t (id,a) values (231,12);
+insert into t (id,a) values (231,13);
+insert into t (id,a) values (231,14);
+insert into t (id,a) values (231,15);
+insert into t (id,a) values (231,16);
+insert into t (id,a) values (231,17);
+insert into t (id,a) values (231,18);
+insert into t (id,a) values (231,19);
+insert into t (id,a) values (231,20);
+insert into t (id,a) values (231,21);
+insert into t (id,a) values (231,22);
+insert into t (id,a) values (231,23);
+insert into t (id,a) values (231,24);
+insert into t (id,a) values (231,25);
+insert into t (id,a) values (231,26);
+insert into t (id,a) values (231,27);
+insert into t (id,a) values (231,28);
+insert into t (id,a) values (231,29);
+insert into t (id,a) values (231,30);
+insert into t (id,a) values (231,31);
+insert into t (id,a) values (231,32);
+insert into t (id,a) values (231,33);
+insert into t (id,a) values (231,34);
+insert into t (id,a) values (231,35);
+insert into t (id,a) values (231,36);
+insert into t (id,a) values (231,37);
+insert into t (id,a) values (231,38);
+insert into t (id,a) values (231,39);
+insert into t (id,a) values (231,40);
+insert into t (id,a) values (231,41);
+insert into t (id,a) values (231,42);
+insert into t (id,a) values (231,43);
+insert into t (id,a) values (231,44);
+insert into t (id,a) values (231,45);
+insert into t (id,a) values (231,46);
+insert into t (id,a) values (231,47);
+insert into t (id,a) values (231,48);
+insert into t (id,a) values (231,49);
+insert into t (id,a) values (231,50);
+insert into t (id,a) values (231,51);
+insert into t (id,a) values (231,52);
+insert into t (id,a) values (231,53);
+insert into t (id,a) values (231,54);
+insert into t (id,a) values (231,55);
+insert into t (id,a) values (231,56);
+insert into t (id,a) values (231,57);
+insert into t (id,a) values (231,58);
+insert into t (id,a) values (231,59);
+insert into t (id,a) values (231,60);
+insert into t (id,a) values (231,61);
+insert into t (id,a) values (231,62);
+insert into t (id,a) values (231,63);
+insert into t (id,a) values (231,64);
+insert into t (id,a) values (231,65);
+insert into t (id,a) values (231,66);
+insert into t (id,a) values (231,67);
+insert into t (id,a) values (231,68);
+insert into t (id,a) values (231,69);
+insert into t (id,a) values (231,70);
+insert into t (id,a) values (231,71);
+insert into t (id,a) values (231,72);
+insert into t (id,a) values (231,73);
+insert into t (id,a) values (231,74);
+insert into t (id,a) values (231,75);
+insert into t (id,a) values (231,76);
+insert into t (id,a) values (231,77);
+insert into t (id,a) values (231,78);
+insert into t (id,a) values (231,79);
+insert into t (id,a) values (231,80);
+insert into t (id,a) values (231,81);
+insert into t (id,a) values (231,82);
+insert into t (id,a) values (231,83);
+insert into t (id,a) values (231,84);
+insert into t (id,a) values (231,85);
+insert into t (id,a) values (231,86);
+insert into t (id,a) values (231,87);
+insert into t (id,a) values (231,88);
+insert into t (id,a) values (231,89);
+insert into t (id,a) values (231,90);
+insert into t (id,a) values (231,91);
+insert into t (id,a) values (231,92);
+insert into t (id,a) values (231,93);
+insert into t (id,a) values (231,94);
+insert into t (id,a) values (231,95);
+insert into t (id,a) values (231,96);
+insert into t (id,a) values (231,97);
+insert into t (id,a) values (231,98);
+insert into t (id,a) values (231,99);
+insert into t (id,a) values (232,0);
+insert into t (id,a) values (232,1);
+insert into t (id,a) values (232,2);
+insert into t (id,a) values (232,3);
+insert into t (id,a) values (232,4);
+insert into t (id,a) values (232,5);
+insert into t (id,a) values (232,6);
+insert into t (id,a) values (232,7);
+insert into t (id,a) values (232,8);
+insert into t (id,a) values (232,9);
+insert into t (id,a) values (232,10);
+insert into t (id,a) values (232,11);
+insert into t (id,a) values (232,12);
+insert into t (id,a) values (232,13);
+insert into t (id,a) values (232,14);
+insert into t (id,a) values (232,15);
+insert into t (id,a) values (232,16);
+insert into t (id,a) values (232,17);
+insert into t (id,a) values (232,18);
+insert into t (id,a) values (232,19);
+insert into t (id,a) values (232,20);
+insert into t (id,a) values (232,21);
+insert into t (id,a) values (232,22);
+insert into t (id,a) values (232,23);
+insert into t (id,a) values (232,24);
+insert into t (id,a) values (232,25);
+insert into t (id,a) values (232,26);
+insert into t (id,a) values (232,27);
+insert into t (id,a) values (232,28);
+insert into t (id,a) values (232,29);
+insert into t (id,a) values (232,30);
+insert into t (id,a) values (232,31);
+insert into t (id,a) values (232,32);
+insert into t (id,a) values (232,33);
+insert into t (id,a) values (232,34);
+insert into t (id,a) values (232,35);
+insert into t (id,a) values (232,36);
+insert into t (id,a) values (232,37);
+insert into t (id,a) values (232,38);
+insert into t (id,a) values (232,39);
+insert into t (id,a) values (232,40);
+insert into t (id,a) values (232,41);
+insert into t (id,a) values (232,42);
+insert into t (id,a) values (232,43);
+insert into t (id,a) values (232,44);
+insert into t (id,a) values (232,45);
+insert into t (id,a) values (232,46);
+insert into t (id,a) values (232,47);
+insert into t (id,a) values (232,48);
+insert into t (id,a) values (232,49);
+insert into t (id,a) values (232,50);
+insert into t (id,a) values (232,51);
+insert into t (id,a) values (232,52);
+insert into t (id,a) values (232,53);
+insert into t (id,a) values (232,54);
+insert into t (id,a) values (232,55);
+insert into t (id,a) values (232,56);
+insert into t (id,a) values (232,57);
+insert into t (id,a) values (232,58);
+insert into t (id,a) values (232,59);
+insert into t (id,a) values (232,60);
+insert into t (id,a) values (232,61);
+insert into t (id,a) values (232,62);
+insert into t (id,a) values (232,63);
+insert into t (id,a) values (232,64);
+insert into t (id,a) values (232,65);
+insert into t (id,a) values (232,66);
+insert into t (id,a) values (232,67);
+insert into t (id,a) values (232,68);
+insert into t (id,a) values (232,69);
+insert into t (id,a) values (232,70);
+insert into t (id,a) values (232,71);
+insert into t (id,a) values (232,72);
+insert into t (id,a) values (232,73);
+insert into t (id,a) values (232,74);
+insert into t (id,a) values (232,75);
+insert into t (id,a) values (232,76);
+insert into t (id,a) values (232,77);
+insert into t (id,a) values (232,78);
+insert into t (id,a) values (232,79);
+insert into t (id,a) values (232,80);
+insert into t (id,a) values (232,81);
+insert into t (id,a) values (232,82);
+insert into t (id,a) values (232,83);
+insert into t (id,a) values (232,84);
+insert into t (id,a) values (232,85);
+insert into t (id,a) values (232,86);
+insert into t (id,a) values (232,87);
+insert into t (id,a) values (232,88);
+insert into t (id,a) values (232,89);
+insert into t (id,a) values (232,90);
+insert into t (id,a) values (232,91);
+insert into t (id,a) values (232,92);
+insert into t (id,a) values (232,93);
+insert into t (id,a) values (232,94);
+insert into t (id,a) values (232,95);
+insert into t (id,a) values (232,96);
+insert into t (id,a) values (232,97);
+insert into t (id,a) values (232,98);
+insert into t (id,a) values (232,99);
+insert into t (id,a) values (233,0);
+insert into t (id,a) values (233,1);
+insert into t (id,a) values (233,2);
+insert into t (id,a) values (233,3);
+insert into t (id,a) values (233,4);
+insert into t (id,a) values (233,5);
+insert into t (id,a) values (233,6);
+insert into t (id,a) values (233,7);
+insert into t (id,a) values (233,8);
+insert into t (id,a) values (233,9);
+insert into t (id,a) values (233,10);
+insert into t (id,a) values (233,11);
+insert into t (id,a) values (233,12);
+insert into t (id,a) values (233,13);
+insert into t (id,a) values (233,14);
+insert into t (id,a) values (233,15);
+insert into t (id,a) values (233,16);
+insert into t (id,a) values (233,17);
+insert into t (id,a) values (233,18);
+insert into t (id,a) values (233,19);
+insert into t (id,a) values (233,20);
+insert into t (id,a) values (233,21);
+insert into t (id,a) values (233,22);
+insert into t (id,a) values (233,23);
+insert into t (id,a) values (233,24);
+insert into t (id,a) values (233,25);
+insert into t (id,a) values (233,26);
+insert into t (id,a) values (233,27);
+insert into t (id,a) values (233,28);
+insert into t (id,a) values (233,29);
+insert into t (id,a) values (233,30);
+insert into t (id,a) values (233,31);
+insert into t (id,a) values (233,32);
+insert into t (id,a) values (233,33);
+insert into t (id,a) values (233,34);
+insert into t (id,a) values (233,35);
+insert into t (id,a) values (233,36);
+insert into t (id,a) values (233,37);
+insert into t (id,a) values (233,38);
+insert into t (id,a) values (233,39);
+insert into t (id,a) values (233,40);
+insert into t (id,a) values (233,41);
+insert into t (id,a) values (233,42);
+insert into t (id,a) values (233,43);
+insert into t (id,a) values (233,44);
+insert into t (id,a) values (233,45);
+insert into t (id,a) values (233,46);
+insert into t (id,a) values (233,47);
+insert into t (id,a) values (233,48);
+insert into t (id,a) values (233,49);
+insert into t (id,a) values (233,50);
+insert into t (id,a) values (233,51);
+insert into t (id,a) values (233,52);
+insert into t (id,a) values (233,53);
+insert into t (id,a) values (233,54);
+insert into t (id,a) values (233,55);
+insert into t (id,a) values (233,56);
+insert into t (id,a) values (233,57);
+insert into t (id,a) values (233,58);
+insert into t (id,a) values (233,59);
+insert into t (id,a) values (233,60);
+insert into t (id,a) values (233,61);
+insert into t (id,a) values (233,62);
+insert into t (id,a) values (233,63);
+insert into t (id,a) values (233,64);
+insert into t (id,a) values (233,65);
+insert into t (id,a) values (233,66);
+insert into t (id,a) values (233,67);
+insert into t (id,a) values (233,68);
+insert into t (id,a) values (233,69);
+insert into t (id,a) values (233,70);
+insert into t (id,a) values (233,71);
+insert into t (id,a) values (233,72);
+insert into t (id,a) values (233,73);
+insert into t (id,a) values (233,74);
+insert into t (id,a) values (233,75);
+insert into t (id,a) values (233,76);
+insert into t (id,a) values (233,77);
+insert into t (id,a) values (233,78);
+insert into t (id,a) values (233,79);
+insert into t (id,a) values (233,80);
+insert into t (id,a) values (233,81);
+insert into t (id,a) values (233,82);
+insert into t (id,a) values (233,83);
+insert into t (id,a) values (233,84);
+insert into t (id,a) values (233,85);
+insert into t (id,a) values (233,86);
+insert into t (id,a) values (233,87);
+insert into t (id,a) values (233,88);
+insert into t (id,a) values (233,89);
+insert into t (id,a) values (233,90);
+insert into t (id,a) values (233,91);
+insert into t (id,a) values (233,92);
+insert into t (id,a) values (233,93);
+insert into t (id,a) values (233,94);
+insert into t (id,a) values (233,95);
+insert into t (id,a) values (233,96);
+insert into t (id,a) values (233,97);
+insert into t (id,a) values (233,98);
+insert into t (id,a) values (233,99);
+insert into t (id,a) values (234,0);
+insert into t (id,a) values (234,1);
+insert into t (id,a) values (234,2);
+insert into t (id,a) values (234,3);
+insert into t (id,a) values (234,4);
+insert into t (id,a) values (234,5);
+insert into t (id,a) values (234,6);
+insert into t (id,a) values (234,7);
+insert into t (id,a) values (234,8);
+insert into t (id,a) values (234,9);
+insert into t (id,a) values (234,10);
+insert into t (id,a) values (234,11);
+insert into t (id,a) values (234,12);
+insert into t (id,a) values (234,13);
+insert into t (id,a) values (234,14);
+insert into t (id,a) values (234,15);
+insert into t (id,a) values (234,16);
+insert into t (id,a) values (234,17);
+insert into t (id,a) values (234,18);
+insert into t (id,a) values (234,19);
+insert into t (id,a) values (234,20);
+insert into t (id,a) values (234,21);
+insert into t (id,a) values (234,22);
+insert into t (id,a) values (234,23);
+insert into t (id,a) values (234,24);
+insert into t (id,a) values (234,25);
+insert into t (id,a) values (234,26);
+insert into t (id,a) values (234,27);
+insert into t (id,a) values (234,28);
+insert into t (id,a) values (234,29);
+insert into t (id,a) values (234,30);
+insert into t (id,a) values (234,31);
+insert into t (id,a) values (234,32);
+insert into t (id,a) values (234,33);
+insert into t (id,a) values (234,34);
+insert into t (id,a) values (234,35);
+insert into t (id,a) values (234,36);
+insert into t (id,a) values (234,37);
+insert into t (id,a) values (234,38);
+insert into t (id,a) values (234,39);
+insert into t (id,a) values (234,40);
+insert into t (id,a) values (234,41);
+insert into t (id,a) values (234,42);
+insert into t (id,a) values (234,43);
+insert into t (id,a) values (234,44);
+insert into t (id,a) values (234,45);
+insert into t (id,a) values (234,46);
+insert into t (id,a) values (234,47);
+insert into t (id,a) values (234,48);
+insert into t (id,a) values (234,49);
+insert into t (id,a) values (234,50);
+insert into t (id,a) values (234,51);
+insert into t (id,a) values (234,52);
+insert into t (id,a) values (234,53);
+insert into t (id,a) values (234,54);
+insert into t (id,a) values (234,55);
+insert into t (id,a) values (234,56);
+insert into t (id,a) values (234,57);
+insert into t (id,a) values (234,58);
+insert into t (id,a) values (234,59);
+insert into t (id,a) values (234,60);
+insert into t (id,a) values (234,61);
+insert into t (id,a) values (234,62);
+insert into t (id,a) values (234,63);
+insert into t (id,a) values (234,64);
+insert into t (id,a) values (234,65);
+insert into t (id,a) values (234,66);
+insert into t (id,a) values (234,67);
+insert into t (id,a) values (234,68);
+insert into t (id,a) values (234,69);
+insert into t (id,a) values (234,70);
+insert into t (id,a) values (234,71);
+insert into t (id,a) values (234,72);
+insert into t (id,a) values (234,73);
+insert into t (id,a) values (234,74);
+insert into t (id,a) values (234,75);
+insert into t (id,a) values (234,76);
+insert into t (id,a) values (234,77);
+insert into t (id,a) values (234,78);
+insert into t (id,a) values (234,79);
+insert into t (id,a) values (234,80);
+insert into t (id,a) values (234,81);
+insert into t (id,a) values (234,82);
+insert into t (id,a) values (234,83);
+insert into t (id,a) values (234,84);
+insert into t (id,a) values (234,85);
+insert into t (id,a) values (234,86);
+insert into t (id,a) values (234,87);
+insert into t (id,a) values (234,88);
+insert into t (id,a) values (234,89);
+insert into t (id,a) values (234,90);
+insert into t (id,a) values (234,91);
+insert into t (id,a) values (234,92);
+insert into t (id,a) values (234,93);
+insert into t (id,a) values (234,94);
+insert into t (id,a) values (234,95);
+insert into t (id,a) values (234,96);
+insert into t (id,a) values (234,97);
+insert into t (id,a) values (234,98);
+insert into t (id,a) values (234,99);
+insert into t (id,a) values (235,0);
+insert into t (id,a) values (235,1);
+insert into t (id,a) values (235,2);
+insert into t (id,a) values (235,3);
+insert into t (id,a) values (235,4);
+insert into t (id,a) values (235,5);
+insert into t (id,a) values (235,6);
+insert into t (id,a) values (235,7);
+insert into t (id,a) values (235,8);
+insert into t (id,a) values (235,9);
+insert into t (id,a) values (235,10);
+insert into t (id,a) values (235,11);
+insert into t (id,a) values (235,12);
+insert into t (id,a) values (235,13);
+insert into t (id,a) values (235,14);
+insert into t (id,a) values (235,15);
+insert into t (id,a) values (235,16);
+insert into t (id,a) values (235,17);
+insert into t (id,a) values (235,18);
+insert into t (id,a) values (235,19);
+insert into t (id,a) values (235,20);
+insert into t (id,a) values (235,21);
+insert into t (id,a) values (235,22);
+insert into t (id,a) values (235,23);
+insert into t (id,a) values (235,24);
+insert into t (id,a) values (235,25);
+insert into t (id,a) values (235,26);
+insert into t (id,a) values (235,27);
+insert into t (id,a) values (235,28);
+insert into t (id,a) values (235,29);
+insert into t (id,a) values (235,30);
+insert into t (id,a) values (235,31);
+insert into t (id,a) values (235,32);
+insert into t (id,a) values (235,33);
+insert into t (id,a) values (235,34);
+insert into t (id,a) values (235,35);
+insert into t (id,a) values (235,36);
+insert into t (id,a) values (235,37);
+insert into t (id,a) values (235,38);
+insert into t (id,a) values (235,39);
+insert into t (id,a) values (235,40);
+insert into t (id,a) values (235,41);
+insert into t (id,a) values (235,42);
+insert into t (id,a) values (235,43);
+insert into t (id,a) values (235,44);
+insert into t (id,a) values (235,45);
+insert into t (id,a) values (235,46);
+insert into t (id,a) values (235,47);
+insert into t (id,a) values (235,48);
+insert into t (id,a) values (235,49);
+insert into t (id,a) values (235,50);
+insert into t (id,a) values (235,51);
+insert into t (id,a) values (235,52);
+insert into t (id,a) values (235,53);
+insert into t (id,a) values (235,54);
+insert into t (id,a) values (235,55);
+insert into t (id,a) values (235,56);
+insert into t (id,a) values (235,57);
+insert into t (id,a) values (235,58);
+insert into t (id,a) values (235,59);
+insert into t (id,a) values (235,60);
+insert into t (id,a) values (235,61);
+insert into t (id,a) values (235,62);
+insert into t (id,a) values (235,63);
+insert into t (id,a) values (235,64);
+insert into t (id,a) values (235,65);
+insert into t (id,a) values (235,66);
+insert into t (id,a) values (235,67);
+insert into t (id,a) values (235,68);
+insert into t (id,a) values (235,69);
+insert into t (id,a) values (235,70);
+insert into t (id,a) values (235,71);
+insert into t (id,a) values (235,72);
+insert into t (id,a) values (235,73);
+insert into t (id,a) values (235,74);
+insert into t (id,a) values (235,75);
+insert into t (id,a) values (235,76);
+insert into t (id,a) values (235,77);
+insert into t (id,a) values (235,78);
+insert into t (id,a) values (235,79);
+insert into t (id,a) values (235,80);
+insert into t (id,a) values (235,81);
+insert into t (id,a) values (235,82);
+insert into t (id,a) values (235,83);
+insert into t (id,a) values (235,84);
+insert into t (id,a) values (235,85);
+insert into t (id,a) values (235,86);
+insert into t (id,a) values (235,87);
+insert into t (id,a) values (235,88);
+insert into t (id,a) values (235,89);
+insert into t (id,a) values (235,90);
+insert into t (id,a) values (235,91);
+insert into t (id,a) values (235,92);
+insert into t (id,a) values (235,93);
+insert into t (id,a) values (235,94);
+insert into t (id,a) values (235,95);
+insert into t (id,a) values (235,96);
+insert into t (id,a) values (235,97);
+insert into t (id,a) values (235,98);
+insert into t (id,a) values (235,99);
+insert into t (id,a) values (236,0);
+insert into t (id,a) values (236,1);
+insert into t (id,a) values (236,2);
+insert into t (id,a) values (236,3);
+insert into t (id,a) values (236,4);
+insert into t (id,a) values (236,5);
+insert into t (id,a) values (236,6);
+insert into t (id,a) values (236,7);
+insert into t (id,a) values (236,8);
+insert into t (id,a) values (236,9);
+insert into t (id,a) values (236,10);
+insert into t (id,a) values (236,11);
+insert into t (id,a) values (236,12);
+insert into t (id,a) values (236,13);
+insert into t (id,a) values (236,14);
+insert into t (id,a) values (236,15);
+insert into t (id,a) values (236,16);
+insert into t (id,a) values (236,17);
+insert into t (id,a) values (236,18);
+insert into t (id,a) values (236,19);
+insert into t (id,a) values (236,20);
+insert into t (id,a) values (236,21);
+insert into t (id,a) values (236,22);
+insert into t (id,a) values (236,23);
+insert into t (id,a) values (236,24);
+insert into t (id,a) values (236,25);
+insert into t (id,a) values (236,26);
+insert into t (id,a) values (236,27);
+insert into t (id,a) values (236,28);
+insert into t (id,a) values (236,29);
+insert into t (id,a) values (236,30);
+insert into t (id,a) values (236,31);
+insert into t (id,a) values (236,32);
+insert into t (id,a) values (236,33);
+insert into t (id,a) values (236,34);
+insert into t (id,a) values (236,35);
+insert into t (id,a) values (236,36);
+insert into t (id,a) values (236,37);
+insert into t (id,a) values (236,38);
+insert into t (id,a) values (236,39);
+insert into t (id,a) values (236,40);
+insert into t (id,a) values (236,41);
+insert into t (id,a) values (236,42);
+insert into t (id,a) values (236,43);
+insert into t (id,a) values (236,44);
+insert into t (id,a) values (236,45);
+insert into t (id,a) values (236,46);
+insert into t (id,a) values (236,47);
+insert into t (id,a) values (236,48);
+insert into t (id,a) values (236,49);
+insert into t (id,a) values (236,50);
+insert into t (id,a) values (236,51);
+insert into t (id,a) values (236,52);
+insert into t (id,a) values (236,53);
+insert into t (id,a) values (236,54);
+insert into t (id,a) values (236,55);
+insert into t (id,a) values (236,56);
+insert into t (id,a) values (236,57);
+insert into t (id,a) values (236,58);
+insert into t (id,a) values (236,59);
+insert into t (id,a) values (236,60);
+insert into t (id,a) values (236,61);
+insert into t (id,a) values (236,62);
+insert into t (id,a) values (236,63);
+insert into t (id,a) values (236,64);
+insert into t (id,a) values (236,65);
+insert into t (id,a) values (236,66);
+insert into t (id,a) values (236,67);
+insert into t (id,a) values (236,68);
+insert into t (id,a) values (236,69);
+insert into t (id,a) values (236,70);
+insert into t (id,a) values (236,71);
+insert into t (id,a) values (236,72);
+insert into t (id,a) values (236,73);
+insert into t (id,a) values (236,74);
+insert into t (id,a) values (236,75);
+insert into t (id,a) values (236,76);
+insert into t (id,a) values (236,77);
+insert into t (id,a) values (236,78);
+insert into t (id,a) values (236,79);
+insert into t (id,a) values (236,80);
+insert into t (id,a) values (236,81);
+insert into t (id,a) values (236,82);
+insert into t (id,a) values (236,83);
+insert into t (id,a) values (236,84);
+insert into t (id,a) values (236,85);
+insert into t (id,a) values (236,86);
+insert into t (id,a) values (236,87);
+insert into t (id,a) values (236,88);
+insert into t (id,a) values (236,89);
+insert into t (id,a) values (236,90);
+insert into t (id,a) values (236,91);
+insert into t (id,a) values (236,92);
+insert into t (id,a) values (236,93);
+insert into t (id,a) values (236,94);
+insert into t (id,a) values (236,95);
+insert into t (id,a) values (236,96);
+insert into t (id,a) values (236,97);
+insert into t (id,a) values (236,98);
+insert into t (id,a) values (236,99);
+insert into t (id,a) values (237,0);
+insert into t (id,a) values (237,1);
+insert into t (id,a) values (237,2);
+insert into t (id,a) values (237,3);
+insert into t (id,a) values (237,4);
+insert into t (id,a) values (237,5);
+insert into t (id,a) values (237,6);
+insert into t (id,a) values (237,7);
+insert into t (id,a) values (237,8);
+insert into t (id,a) values (237,9);
+insert into t (id,a) values (237,10);
+insert into t (id,a) values (237,11);
+insert into t (id,a) values (237,12);
+insert into t (id,a) values (237,13);
+insert into t (id,a) values (237,14);
+insert into t (id,a) values (237,15);
+insert into t (id,a) values (237,16);
+insert into t (id,a) values (237,17);
+insert into t (id,a) values (237,18);
+insert into t (id,a) values (237,19);
+insert into t (id,a) values (237,20);
+insert into t (id,a) values (237,21);
+insert into t (id,a) values (237,22);
+insert into t (id,a) values (237,23);
+insert into t (id,a) values (237,24);
+insert into t (id,a) values (237,25);
+insert into t (id,a) values (237,26);
+insert into t (id,a) values (237,27);
+insert into t (id,a) values (237,28);
+insert into t (id,a) values (237,29);
+insert into t (id,a) values (237,30);
+insert into t (id,a) values (237,31);
+insert into t (id,a) values (237,32);
+insert into t (id,a) values (237,33);
+insert into t (id,a) values (237,34);
+insert into t (id,a) values (237,35);
+insert into t (id,a) values (237,36);
+insert into t (id,a) values (237,37);
+insert into t (id,a) values (237,38);
+insert into t (id,a) values (237,39);
+insert into t (id,a) values (237,40);
+insert into t (id,a) values (237,41);
+insert into t (id,a) values (237,42);
+insert into t (id,a) values (237,43);
+insert into t (id,a) values (237,44);
+insert into t (id,a) values (237,45);
+insert into t (id,a) values (237,46);
+insert into t (id,a) values (237,47);
+insert into t (id,a) values (237,48);
+insert into t (id,a) values (237,49);
+insert into t (id,a) values (237,50);
+insert into t (id,a) values (237,51);
+insert into t (id,a) values (237,52);
+insert into t (id,a) values (237,53);
+insert into t (id,a) values (237,54);
+insert into t (id,a) values (237,55);
+insert into t (id,a) values (237,56);
+insert into t (id,a) values (237,57);
+insert into t (id,a) values (237,58);
+insert into t (id,a) values (237,59);
+insert into t (id,a) values (237,60);
+insert into t (id,a) values (237,61);
+insert into t (id,a) values (237,62);
+insert into t (id,a) values (237,63);
+insert into t (id,a) values (237,64);
+insert into t (id,a) values (237,65);
+insert into t (id,a) values (237,66);
+insert into t (id,a) values (237,67);
+insert into t (id,a) values (237,68);
+insert into t (id,a) values (237,69);
+insert into t (id,a) values (237,70);
+insert into t (id,a) values (237,71);
+insert into t (id,a) values (237,72);
+insert into t (id,a) values (237,73);
+insert into t (id,a) values (237,74);
+insert into t (id,a) values (237,75);
+insert into t (id,a) values (237,76);
+insert into t (id,a) values (237,77);
+insert into t (id,a) values (237,78);
+insert into t (id,a) values (237,79);
+insert into t (id,a) values (237,80);
+insert into t (id,a) values (237,81);
+insert into t (id,a) values (237,82);
+insert into t (id,a) values (237,83);
+insert into t (id,a) values (237,84);
+insert into t (id,a) values (237,85);
+insert into t (id,a) values (237,86);
+insert into t (id,a) values (237,87);
+insert into t (id,a) values (237,88);
+insert into t (id,a) values (237,89);
+insert into t (id,a) values (237,90);
+insert into t (id,a) values (237,91);
+insert into t (id,a) values (237,92);
+insert into t (id,a) values (237,93);
+insert into t (id,a) values (237,94);
+insert into t (id,a) values (237,95);
+insert into t (id,a) values (237,96);
+insert into t (id,a) values (237,97);
+insert into t (id,a) values (237,98);
+insert into t (id,a) values (237,99);
+insert into t (id,a) values (238,0);
+insert into t (id,a) values (238,1);
+insert into t (id,a) values (238,2);
+insert into t (id,a) values (238,3);
+insert into t (id,a) values (238,4);
+insert into t (id,a) values (238,5);
+insert into t (id,a) values (238,6);
+insert into t (id,a) values (238,7);
+insert into t (id,a) values (238,8);
+insert into t (id,a) values (238,9);
+insert into t (id,a) values (238,10);
+insert into t (id,a) values (238,11);
+insert into t (id,a) values (238,12);
+insert into t (id,a) values (238,13);
+insert into t (id,a) values (238,14);
+insert into t (id,a) values (238,15);
+insert into t (id,a) values (238,16);
+insert into t (id,a) values (238,17);
+insert into t (id,a) values (238,18);
+insert into t (id,a) values (238,19);
+insert into t (id,a) values (238,20);
+insert into t (id,a) values (238,21);
+insert into t (id,a) values (238,22);
+insert into t (id,a) values (238,23);
+insert into t (id,a) values (238,24);
+insert into t (id,a) values (238,25);
+insert into t (id,a) values (238,26);
+insert into t (id,a) values (238,27);
+insert into t (id,a) values (238,28);
+insert into t (id,a) values (238,29);
+insert into t (id,a) values (238,30);
+insert into t (id,a) values (238,31);
+insert into t (id,a) values (238,32);
+insert into t (id,a) values (238,33);
+insert into t (id,a) values (238,34);
+insert into t (id,a) values (238,35);
+insert into t (id,a) values (238,36);
+insert into t (id,a) values (238,37);
+insert into t (id,a) values (238,38);
+insert into t (id,a) values (238,39);
+insert into t (id,a) values (238,40);
+insert into t (id,a) values (238,41);
+insert into t (id,a) values (238,42);
+insert into t (id,a) values (238,43);
+insert into t (id,a) values (238,44);
+insert into t (id,a) values (238,45);
+insert into t (id,a) values (238,46);
+insert into t (id,a) values (238,47);
+insert into t (id,a) values (238,48);
+insert into t (id,a) values (238,49);
+insert into t (id,a) values (238,50);
+insert into t (id,a) values (238,51);
+insert into t (id,a) values (238,52);
+insert into t (id,a) values (238,53);
+insert into t (id,a) values (238,54);
+insert into t (id,a) values (238,55);
+insert into t (id,a) values (238,56);
+insert into t (id,a) values (238,57);
+insert into t (id,a) values (238,58);
+insert into t (id,a) values (238,59);
+insert into t (id,a) values (238,60);
+insert into t (id,a) values (238,61);
+insert into t (id,a) values (238,62);
+insert into t (id,a) values (238,63);
+insert into t (id,a) values (238,64);
+insert into t (id,a) values (238,65);
+insert into t (id,a) values (238,66);
+insert into t (id,a) values (238,67);
+insert into t (id,a) values (238,68);
+insert into t (id,a) values (238,69);
+insert into t (id,a) values (238,70);
+insert into t (id,a) values (238,71);
+insert into t (id,a) values (238,72);
+insert into t (id,a) values (238,73);
+insert into t (id,a) values (238,74);
+insert into t (id,a) values (238,75);
+insert into t (id,a) values (238,76);
+insert into t (id,a) values (238,77);
+insert into t (id,a) values (238,78);
+insert into t (id,a) values (238,79);
+insert into t (id,a) values (238,80);
+insert into t (id,a) values (238,81);
+insert into t (id,a) values (238,82);
+insert into t (id,a) values (238,83);
+insert into t (id,a) values (238,84);
+insert into t (id,a) values (238,85);
+insert into t (id,a) values (238,86);
+insert into t (id,a) values (238,87);
+insert into t (id,a) values (238,88);
+insert into t (id,a) values (238,89);
+insert into t (id,a) values (238,90);
+insert into t (id,a) values (238,91);
+insert into t (id,a) values (238,92);
+insert into t (id,a) values (238,93);
+insert into t (id,a) values (238,94);
+insert into t (id,a) values (238,95);
+insert into t (id,a) values (238,96);
+insert into t (id,a) values (238,97);
+insert into t (id,a) values (238,98);
+insert into t (id,a) values (238,99);
+insert into t (id,a) values (239,0);
+insert into t (id,a) values (239,1);
+insert into t (id,a) values (239,2);
+insert into t (id,a) values (239,3);
+insert into t (id,a) values (239,4);
+insert into t (id,a) values (239,5);
+insert into t (id,a) values (239,6);
+insert into t (id,a) values (239,7);
+insert into t (id,a) values (239,8);
+insert into t (id,a) values (239,9);
+insert into t (id,a) values (239,10);
+insert into t (id,a) values (239,11);
+insert into t (id,a) values (239,12);
+insert into t (id,a) values (239,13);
+insert into t (id,a) values (239,14);
+insert into t (id,a) values (239,15);
+insert into t (id,a) values (239,16);
+insert into t (id,a) values (239,17);
+insert into t (id,a) values (239,18);
+insert into t (id,a) values (239,19);
+insert into t (id,a) values (239,20);
+insert into t (id,a) values (239,21);
+insert into t (id,a) values (239,22);
+insert into t (id,a) values (239,23);
+insert into t (id,a) values (239,24);
+insert into t (id,a) values (239,25);
+insert into t (id,a) values (239,26);
+insert into t (id,a) values (239,27);
+insert into t (id,a) values (239,28);
+insert into t (id,a) values (239,29);
+insert into t (id,a) values (239,30);
+insert into t (id,a) values (239,31);
+insert into t (id,a) values (239,32);
+insert into t (id,a) values (239,33);
+insert into t (id,a) values (239,34);
+insert into t (id,a) values (239,35);
+insert into t (id,a) values (239,36);
+insert into t (id,a) values (239,37);
+insert into t (id,a) values (239,38);
+insert into t (id,a) values (239,39);
+insert into t (id,a) values (239,40);
+insert into t (id,a) values (239,41);
+insert into t (id,a) values (239,42);
+insert into t (id,a) values (239,43);
+insert into t (id,a) values (239,44);
+insert into t (id,a) values (239,45);
+insert into t (id,a) values (239,46);
+insert into t (id,a) values (239,47);
+insert into t (id,a) values (239,48);
+insert into t (id,a) values (239,49);
+insert into t (id,a) values (239,50);
+insert into t (id,a) values (239,51);
+insert into t (id,a) values (239,52);
+insert into t (id,a) values (239,53);
+insert into t (id,a) values (239,54);
+insert into t (id,a) values (239,55);
+insert into t (id,a) values (239,56);
+insert into t (id,a) values (239,57);
+insert into t (id,a) values (239,58);
+insert into t (id,a) values (239,59);
+insert into t (id,a) values (239,60);
+insert into t (id,a) values (239,61);
+insert into t (id,a) values (239,62);
+insert into t (id,a) values (239,63);
+insert into t (id,a) values (239,64);
+insert into t (id,a) values (239,65);
+insert into t (id,a) values (239,66);
+insert into t (id,a) values (239,67);
+insert into t (id,a) values (239,68);
+insert into t (id,a) values (239,69);
+insert into t (id,a) values (239,70);
+insert into t (id,a) values (239,71);
+insert into t (id,a) values (239,72);
+insert into t (id,a) values (239,73);
+insert into t (id,a) values (239,74);
+insert into t (id,a) values (239,75);
+insert into t (id,a) values (239,76);
+insert into t (id,a) values (239,77);
+insert into t (id,a) values (239,78);
+insert into t (id,a) values (239,79);
+insert into t (id,a) values (239,80);
+insert into t (id,a) values (239,81);
+insert into t (id,a) values (239,82);
+insert into t (id,a) values (239,83);
+insert into t (id,a) values (239,84);
+insert into t (id,a) values (239,85);
+insert into t (id,a) values (239,86);
+insert into t (id,a) values (239,87);
+insert into t (id,a) values (239,88);
+insert into t (id,a) values (239,89);
+insert into t (id,a) values (239,90);
+insert into t (id,a) values (239,91);
+insert into t (id,a) values (239,92);
+insert into t (id,a) values (239,93);
+insert into t (id,a) values (239,94);
+insert into t (id,a) values (239,95);
+insert into t (id,a) values (239,96);
+insert into t (id,a) values (239,97);
+insert into t (id,a) values (239,98);
+insert into t (id,a) values (239,99);
+insert into t (id,a) values (240,0);
+insert into t (id,a) values (240,1);
+insert into t (id,a) values (240,2);
+insert into t (id,a) values (240,3);
+insert into t (id,a) values (240,4);
+insert into t (id,a) values (240,5);
+insert into t (id,a) values (240,6);
+insert into t (id,a) values (240,7);
+insert into t (id,a) values (240,8);
+insert into t (id,a) values (240,9);
+insert into t (id,a) values (240,10);
+insert into t (id,a) values (240,11);
+insert into t (id,a) values (240,12);
+insert into t (id,a) values (240,13);
+insert into t (id,a) values (240,14);
+insert into t (id,a) values (240,15);
+insert into t (id,a) values (240,16);
+insert into t (id,a) values (240,17);
+insert into t (id,a) values (240,18);
+insert into t (id,a) values (240,19);
+insert into t (id,a) values (240,20);
+insert into t (id,a) values (240,21);
+insert into t (id,a) values (240,22);
+insert into t (id,a) values (240,23);
+insert into t (id,a) values (240,24);
+insert into t (id,a) values (240,25);
+insert into t (id,a) values (240,26);
+insert into t (id,a) values (240,27);
+insert into t (id,a) values (240,28);
+insert into t (id,a) values (240,29);
+insert into t (id,a) values (240,30);
+insert into t (id,a) values (240,31);
+insert into t (id,a) values (240,32);
+insert into t (id,a) values (240,33);
+insert into t (id,a) values (240,34);
+insert into t (id,a) values (240,35);
+insert into t (id,a) values (240,36);
+insert into t (id,a) values (240,37);
+insert into t (id,a) values (240,38);
+insert into t (id,a) values (240,39);
+insert into t (id,a) values (240,40);
+insert into t (id,a) values (240,41);
+insert into t (id,a) values (240,42);
+insert into t (id,a) values (240,43);
+insert into t (id,a) values (240,44);
+insert into t (id,a) values (240,45);
+insert into t (id,a) values (240,46);
+insert into t (id,a) values (240,47);
+insert into t (id,a) values (240,48);
+insert into t (id,a) values (240,49);
+insert into t (id,a) values (240,50);
+insert into t (id,a) values (240,51);
+insert into t (id,a) values (240,52);
+insert into t (id,a) values (240,53);
+insert into t (id,a) values (240,54);
+insert into t (id,a) values (240,55);
+insert into t (id,a) values (240,56);
+insert into t (id,a) values (240,57);
+insert into t (id,a) values (240,58);
+insert into t (id,a) values (240,59);
+insert into t (id,a) values (240,60);
+insert into t (id,a) values (240,61);
+insert into t (id,a) values (240,62);
+insert into t (id,a) values (240,63);
+insert into t (id,a) values (240,64);
+insert into t (id,a) values (240,65);
+insert into t (id,a) values (240,66);
+insert into t (id,a) values (240,67);
+insert into t (id,a) values (240,68);
+insert into t (id,a) values (240,69);
+insert into t (id,a) values (240,70);
+insert into t (id,a) values (240,71);
+insert into t (id,a) values (240,72);
+insert into t (id,a) values (240,73);
+insert into t (id,a) values (240,74);
+insert into t (id,a) values (240,75);
+insert into t (id,a) values (240,76);
+insert into t (id,a) values (240,77);
+insert into t (id,a) values (240,78);
+insert into t (id,a) values (240,79);
+insert into t (id,a) values (240,80);
+insert into t (id,a) values (240,81);
+insert into t (id,a) values (240,82);
+insert into t (id,a) values (240,83);
+insert into t (id,a) values (240,84);
+insert into t (id,a) values (240,85);
+insert into t (id,a) values (240,86);
+insert into t (id,a) values (240,87);
+insert into t (id,a) values (240,88);
+insert into t (id,a) values (240,89);
+insert into t (id,a) values (240,90);
+insert into t (id,a) values (240,91);
+insert into t (id,a) values (240,92);
+insert into t (id,a) values (240,93);
+insert into t (id,a) values (240,94);
+insert into t (id,a) values (240,95);
+insert into t (id,a) values (240,96);
+insert into t (id,a) values (240,97);
+insert into t (id,a) values (240,98);
+insert into t (id,a) values (240,99);
+insert into t (id,a) values (241,0);
+insert into t (id,a) values (241,1);
+insert into t (id,a) values (241,2);
+insert into t (id,a) values (241,3);
+insert into t (id,a) values (241,4);
+insert into t (id,a) values (241,5);
+insert into t (id,a) values (241,6);
+insert into t (id,a) values (241,7);
+insert into t (id,a) values (241,8);
+insert into t (id,a) values (241,9);
+insert into t (id,a) values (241,10);
+insert into t (id,a) values (241,11);
+insert into t (id,a) values (241,12);
+insert into t (id,a) values (241,13);
+insert into t (id,a) values (241,14);
+insert into t (id,a) values (241,15);
+insert into t (id,a) values (241,16);
+insert into t (id,a) values (241,17);
+insert into t (id,a) values (241,18);
+insert into t (id,a) values (241,19);
+insert into t (id,a) values (241,20);
+insert into t (id,a) values (241,21);
+insert into t (id,a) values (241,22);
+insert into t (id,a) values (241,23);
+insert into t (id,a) values (241,24);
+insert into t (id,a) values (241,25);
+insert into t (id,a) values (241,26);
+insert into t (id,a) values (241,27);
+insert into t (id,a) values (241,28);
+insert into t (id,a) values (241,29);
+insert into t (id,a) values (241,30);
+insert into t (id,a) values (241,31);
+insert into t (id,a) values (241,32);
+insert into t (id,a) values (241,33);
+insert into t (id,a) values (241,34);
+insert into t (id,a) values (241,35);
+insert into t (id,a) values (241,36);
+insert into t (id,a) values (241,37);
+insert into t (id,a) values (241,38);
+insert into t (id,a) values (241,39);
+insert into t (id,a) values (241,40);
+insert into t (id,a) values (241,41);
+insert into t (id,a) values (241,42);
+insert into t (id,a) values (241,43);
+insert into t (id,a) values (241,44);
+insert into t (id,a) values (241,45);
+insert into t (id,a) values (241,46);
+insert into t (id,a) values (241,47);
+insert into t (id,a) values (241,48);
+insert into t (id,a) values (241,49);
+insert into t (id,a) values (241,50);
+insert into t (id,a) values (241,51);
+insert into t (id,a) values (241,52);
+insert into t (id,a) values (241,53);
+insert into t (id,a) values (241,54);
+insert into t (id,a) values (241,55);
+insert into t (id,a) values (241,56);
+insert into t (id,a) values (241,57);
+insert into t (id,a) values (241,58);
+insert into t (id,a) values (241,59);
+insert into t (id,a) values (241,60);
+insert into t (id,a) values (241,61);
+insert into t (id,a) values (241,62);
+insert into t (id,a) values (241,63);
+insert into t (id,a) values (241,64);
+insert into t (id,a) values (241,65);
+insert into t (id,a) values (241,66);
+insert into t (id,a) values (241,67);
+insert into t (id,a) values (241,68);
+insert into t (id,a) values (241,69);
+insert into t (id,a) values (241,70);
+insert into t (id,a) values (241,71);
+insert into t (id,a) values (241,72);
+insert into t (id,a) values (241,73);
+insert into t (id,a) values (241,74);
+insert into t (id,a) values (241,75);
+insert into t (id,a) values (241,76);
+insert into t (id,a) values (241,77);
+insert into t (id,a) values (241,78);
+insert into t (id,a) values (241,79);
+insert into t (id,a) values (241,80);
+insert into t (id,a) values (241,81);
+insert into t (id,a) values (241,82);
+insert into t (id,a) values (241,83);
+insert into t (id,a) values (241,84);
+insert into t (id,a) values (241,85);
+insert into t (id,a) values (241,86);
+insert into t (id,a) values (241,87);
+insert into t (id,a) values (241,88);
+insert into t (id,a) values (241,89);
+insert into t (id,a) values (241,90);
+insert into t (id,a) values (241,91);
+insert into t (id,a) values (241,92);
+insert into t (id,a) values (241,93);
+insert into t (id,a) values (241,94);
+insert into t (id,a) values (241,95);
+insert into t (id,a) values (241,96);
+insert into t (id,a) values (241,97);
+insert into t (id,a) values (241,98);
+insert into t (id,a) values (241,99);
+insert into t (id,a) values (242,0);
+insert into t (id,a) values (242,1);
+insert into t (id,a) values (242,2);
+insert into t (id,a) values (242,3);
+insert into t (id,a) values (242,4);
+insert into t (id,a) values (242,5);
+insert into t (id,a) values (242,6);
+insert into t (id,a) values (242,7);
+insert into t (id,a) values (242,8);
+insert into t (id,a) values (242,9);
+insert into t (id,a) values (242,10);
+insert into t (id,a) values (242,11);
+insert into t (id,a) values (242,12);
+insert into t (id,a) values (242,13);
+insert into t (id,a) values (242,14);
+insert into t (id,a) values (242,15);
+insert into t (id,a) values (242,16);
+insert into t (id,a) values (242,17);
+insert into t (id,a) values (242,18);
+insert into t (id,a) values (242,19);
+insert into t (id,a) values (242,20);
+insert into t (id,a) values (242,21);
+insert into t (id,a) values (242,22);
+insert into t (id,a) values (242,23);
+insert into t (id,a) values (242,24);
+insert into t (id,a) values (242,25);
+insert into t (id,a) values (242,26);
+insert into t (id,a) values (242,27);
+insert into t (id,a) values (242,28);
+insert into t (id,a) values (242,29);
+insert into t (id,a) values (242,30);
+insert into t (id,a) values (242,31);
+insert into t (id,a) values (242,32);
+insert into t (id,a) values (242,33);
+insert into t (id,a) values (242,34);
+insert into t (id,a) values (242,35);
+insert into t (id,a) values (242,36);
+insert into t (id,a) values (242,37);
+insert into t (id,a) values (242,38);
+insert into t (id,a) values (242,39);
+insert into t (id,a) values (242,40);
+insert into t (id,a) values (242,41);
+insert into t (id,a) values (242,42);
+insert into t (id,a) values (242,43);
+insert into t (id,a) values (242,44);
+insert into t (id,a) values (242,45);
+insert into t (id,a) values (242,46);
+insert into t (id,a) values (242,47);
+insert into t (id,a) values (242,48);
+insert into t (id,a) values (242,49);
+insert into t (id,a) values (242,50);
+insert into t (id,a) values (242,51);
+insert into t (id,a) values (242,52);
+insert into t (id,a) values (242,53);
+insert into t (id,a) values (242,54);
+insert into t (id,a) values (242,55);
+insert into t (id,a) values (242,56);
+insert into t (id,a) values (242,57);
+insert into t (id,a) values (242,58);
+insert into t (id,a) values (242,59);
+insert into t (id,a) values (242,60);
+insert into t (id,a) values (242,61);
+insert into t (id,a) values (242,62);
+insert into t (id,a) values (242,63);
+insert into t (id,a) values (242,64);
+insert into t (id,a) values (242,65);
+insert into t (id,a) values (242,66);
+insert into t (id,a) values (242,67);
+insert into t (id,a) values (242,68);
+insert into t (id,a) values (242,69);
+insert into t (id,a) values (242,70);
+insert into t (id,a) values (242,71);
+insert into t (id,a) values (242,72);
+insert into t (id,a) values (242,73);
+insert into t (id,a) values (242,74);
+insert into t (id,a) values (242,75);
+insert into t (id,a) values (242,76);
+insert into t (id,a) values (242,77);
+insert into t (id,a) values (242,78);
+insert into t (id,a) values (242,79);
+insert into t (id,a) values (242,80);
+insert into t (id,a) values (242,81);
+insert into t (id,a) values (242,82);
+insert into t (id,a) values (242,83);
+insert into t (id,a) values (242,84);
+insert into t (id,a) values (242,85);
+insert into t (id,a) values (242,86);
+insert into t (id,a) values (242,87);
+insert into t (id,a) values (242,88);
+insert into t (id,a) values (242,89);
+insert into t (id,a) values (242,90);
+insert into t (id,a) values (242,91);
+insert into t (id,a) values (242,92);
+insert into t (id,a) values (242,93);
+insert into t (id,a) values (242,94);
+insert into t (id,a) values (242,95);
+insert into t (id,a) values (242,96);
+insert into t (id,a) values (242,97);
+insert into t (id,a) values (242,98);
+insert into t (id,a) values (242,99);
+insert into t (id,a) values (243,0);
+insert into t (id,a) values (243,1);
+insert into t (id,a) values (243,2);
+insert into t (id,a) values (243,3);
+insert into t (id,a) values (243,4);
+insert into t (id,a) values (243,5);
+insert into t (id,a) values (243,6);
+insert into t (id,a) values (243,7);
+insert into t (id,a) values (243,8);
+insert into t (id,a) values (243,9);
+insert into t (id,a) values (243,10);
+insert into t (id,a) values (243,11);
+insert into t (id,a) values (243,12);
+insert into t (id,a) values (243,13);
+insert into t (id,a) values (243,14);
+insert into t (id,a) values (243,15);
+insert into t (id,a) values (243,16);
+insert into t (id,a) values (243,17);
+insert into t (id,a) values (243,18);
+insert into t (id,a) values (243,19);
+insert into t (id,a) values (243,20);
+insert into t (id,a) values (243,21);
+insert into t (id,a) values (243,22);
+insert into t (id,a) values (243,23);
+insert into t (id,a) values (243,24);
+insert into t (id,a) values (243,25);
+insert into t (id,a) values (243,26);
+insert into t (id,a) values (243,27);
+insert into t (id,a) values (243,28);
+insert into t (id,a) values (243,29);
+insert into t (id,a) values (243,30);
+insert into t (id,a) values (243,31);
+insert into t (id,a) values (243,32);
+insert into t (id,a) values (243,33);
+insert into t (id,a) values (243,34);
+insert into t (id,a) values (243,35);
+insert into t (id,a) values (243,36);
+insert into t (id,a) values (243,37);
+insert into t (id,a) values (243,38);
+insert into t (id,a) values (243,39);
+insert into t (id,a) values (243,40);
+insert into t (id,a) values (243,41);
+insert into t (id,a) values (243,42);
+insert into t (id,a) values (243,43);
+insert into t (id,a) values (243,44);
+insert into t (id,a) values (243,45);
+insert into t (id,a) values (243,46);
+insert into t (id,a) values (243,47);
+insert into t (id,a) values (243,48);
+insert into t (id,a) values (243,49);
+insert into t (id,a) values (243,50);
+insert into t (id,a) values (243,51);
+insert into t (id,a) values (243,52);
+insert into t (id,a) values (243,53);
+insert into t (id,a) values (243,54);
+insert into t (id,a) values (243,55);
+insert into t (id,a) values (243,56);
+insert into t (id,a) values (243,57);
+insert into t (id,a) values (243,58);
+insert into t (id,a) values (243,59);
+insert into t (id,a) values (243,60);
+insert into t (id,a) values (243,61);
+insert into t (id,a) values (243,62);
+insert into t (id,a) values (243,63);
+insert into t (id,a) values (243,64);
+insert into t (id,a) values (243,65);
+insert into t (id,a) values (243,66);
+insert into t (id,a) values (243,67);
+insert into t (id,a) values (243,68);
+insert into t (id,a) values (243,69);
+insert into t (id,a) values (243,70);
+insert into t (id,a) values (243,71);
+insert into t (id,a) values (243,72);
+insert into t (id,a) values (243,73);
+insert into t (id,a) values (243,74);
+insert into t (id,a) values (243,75);
+insert into t (id,a) values (243,76);
+insert into t (id,a) values (243,77);
+insert into t (id,a) values (243,78);
+insert into t (id,a) values (243,79);
+insert into t (id,a) values (243,80);
+insert into t (id,a) values (243,81);
+insert into t (id,a) values (243,82);
+insert into t (id,a) values (243,83);
+insert into t (id,a) values (243,84);
+insert into t (id,a) values (243,85);
+insert into t (id,a) values (243,86);
+insert into t (id,a) values (243,87);
+insert into t (id,a) values (243,88);
+insert into t (id,a) values (243,89);
+insert into t (id,a) values (243,90);
+insert into t (id,a) values (243,91);
+insert into t (id,a) values (243,92);
+insert into t (id,a) values (243,93);
+insert into t (id,a) values (243,94);
+insert into t (id,a) values (243,95);
+insert into t (id,a) values (243,96);
+insert into t (id,a) values (243,97);
+insert into t (id,a) values (243,98);
+insert into t (id,a) values (243,99);
+insert into t (id,a) values (244,0);
+insert into t (id,a) values (244,1);
+insert into t (id,a) values (244,2);
+insert into t (id,a) values (244,3);
+insert into t (id,a) values (244,4);
+insert into t (id,a) values (244,5);
+insert into t (id,a) values (244,6);
+insert into t (id,a) values (244,7);
+insert into t (id,a) values (244,8);
+insert into t (id,a) values (244,9);
+insert into t (id,a) values (244,10);
+insert into t (id,a) values (244,11);
+insert into t (id,a) values (244,12);
+insert into t (id,a) values (244,13);
+insert into t (id,a) values (244,14);
+insert into t (id,a) values (244,15);
+insert into t (id,a) values (244,16);
+insert into t (id,a) values (244,17);
+insert into t (id,a) values (244,18);
+insert into t (id,a) values (244,19);
+insert into t (id,a) values (244,20);
+insert into t (id,a) values (244,21);
+insert into t (id,a) values (244,22);
+insert into t (id,a) values (244,23);
+insert into t (id,a) values (244,24);
+insert into t (id,a) values (244,25);
+insert into t (id,a) values (244,26);
+insert into t (id,a) values (244,27);
+insert into t (id,a) values (244,28);
+insert into t (id,a) values (244,29);
+insert into t (id,a) values (244,30);
+insert into t (id,a) values (244,31);
+insert into t (id,a) values (244,32);
+insert into t (id,a) values (244,33);
+insert into t (id,a) values (244,34);
+insert into t (id,a) values (244,35);
+insert into t (id,a) values (244,36);
+insert into t (id,a) values (244,37);
+insert into t (id,a) values (244,38);
+insert into t (id,a) values (244,39);
+insert into t (id,a) values (244,40);
+insert into t (id,a) values (244,41);
+insert into t (id,a) values (244,42);
+insert into t (id,a) values (244,43);
+insert into t (id,a) values (244,44);
+insert into t (id,a) values (244,45);
+insert into t (id,a) values (244,46);
+insert into t (id,a) values (244,47);
+insert into t (id,a) values (244,48);
+insert into t (id,a) values (244,49);
+insert into t (id,a) values (244,50);
+insert into t (id,a) values (244,51);
+insert into t (id,a) values (244,52);
+insert into t (id,a) values (244,53);
+insert into t (id,a) values (244,54);
+insert into t (id,a) values (244,55);
+insert into t (id,a) values (244,56);
+insert into t (id,a) values (244,57);
+insert into t (id,a) values (244,58);
+insert into t (id,a) values (244,59);
+insert into t (id,a) values (244,60);
+insert into t (id,a) values (244,61);
+insert into t (id,a) values (244,62);
+insert into t (id,a) values (244,63);
+insert into t (id,a) values (244,64);
+insert into t (id,a) values (244,65);
+insert into t (id,a) values (244,66);
+insert into t (id,a) values (244,67);
+insert into t (id,a) values (244,68);
+insert into t (id,a) values (244,69);
+insert into t (id,a) values (244,70);
+insert into t (id,a) values (244,71);
+insert into t (id,a) values (244,72);
+insert into t (id,a) values (244,73);
+insert into t (id,a) values (244,74);
+insert into t (id,a) values (244,75);
+insert into t (id,a) values (244,76);
+insert into t (id,a) values (244,77);
+insert into t (id,a) values (244,78);
+insert into t (id,a) values (244,79);
+insert into t (id,a) values (244,80);
+insert into t (id,a) values (244,81);
+insert into t (id,a) values (244,82);
+insert into t (id,a) values (244,83);
+insert into t (id,a) values (244,84);
+insert into t (id,a) values (244,85);
+insert into t (id,a) values (244,86);
+insert into t (id,a) values (244,87);
+insert into t (id,a) values (244,88);
+insert into t (id,a) values (244,89);
+insert into t (id,a) values (244,90);
+insert into t (id,a) values (244,91);
+insert into t (id,a) values (244,92);
+insert into t (id,a) values (244,93);
+insert into t (id,a) values (244,94);
+insert into t (id,a) values (244,95);
+insert into t (id,a) values (244,96);
+insert into t (id,a) values (244,97);
+insert into t (id,a) values (244,98);
+insert into t (id,a) values (244,99);
+insert into t (id,a) values (245,0);
+insert into t (id,a) values (245,1);
+insert into t (id,a) values (245,2);
+insert into t (id,a) values (245,3);
+insert into t (id,a) values (245,4);
+insert into t (id,a) values (245,5);
+insert into t (id,a) values (245,6);
+insert into t (id,a) values (245,7);
+insert into t (id,a) values (245,8);
+insert into t (id,a) values (245,9);
+insert into t (id,a) values (245,10);
+insert into t (id,a) values (245,11);
+insert into t (id,a) values (245,12);
+insert into t (id,a) values (245,13);
+insert into t (id,a) values (245,14);
+insert into t (id,a) values (245,15);
+insert into t (id,a) values (245,16);
+insert into t (id,a) values (245,17);
+insert into t (id,a) values (245,18);
+insert into t (id,a) values (245,19);
+insert into t (id,a) values (245,20);
+insert into t (id,a) values (245,21);
+insert into t (id,a) values (245,22);
+insert into t (id,a) values (245,23);
+insert into t (id,a) values (245,24);
+insert into t (id,a) values (245,25);
+insert into t (id,a) values (245,26);
+insert into t (id,a) values (245,27);
+insert into t (id,a) values (245,28);
+insert into t (id,a) values (245,29);
+insert into t (id,a) values (245,30);
+insert into t (id,a) values (245,31);
+insert into t (id,a) values (245,32);
+insert into t (id,a) values (245,33);
+insert into t (id,a) values (245,34);
+insert into t (id,a) values (245,35);
+insert into t (id,a) values (245,36);
+insert into t (id,a) values (245,37);
+insert into t (id,a) values (245,38);
+insert into t (id,a) values (245,39);
+insert into t (id,a) values (245,40);
+insert into t (id,a) values (245,41);
+insert into t (id,a) values (245,42);
+insert into t (id,a) values (245,43);
+insert into t (id,a) values (245,44);
+insert into t (id,a) values (245,45);
+insert into t (id,a) values (245,46);
+insert into t (id,a) values (245,47);
+insert into t (id,a) values (245,48);
+insert into t (id,a) values (245,49);
+insert into t (id,a) values (245,50);
+insert into t (id,a) values (245,51);
+insert into t (id,a) values (245,52);
+insert into t (id,a) values (245,53);
+insert into t (id,a) values (245,54);
+insert into t (id,a) values (245,55);
+insert into t (id,a) values (245,56);
+insert into t (id,a) values (245,57);
+insert into t (id,a) values (245,58);
+insert into t (id,a) values (245,59);
+insert into t (id,a) values (245,60);
+insert into t (id,a) values (245,61);
+insert into t (id,a) values (245,62);
+insert into t (id,a) values (245,63);
+insert into t (id,a) values (245,64);
+insert into t (id,a) values (245,65);
+insert into t (id,a) values (245,66);
+insert into t (id,a) values (245,67);
+insert into t (id,a) values (245,68);
+insert into t (id,a) values (245,69);
+insert into t (id,a) values (245,70);
+insert into t (id,a) values (245,71);
+insert into t (id,a) values (245,72);
+insert into t (id,a) values (245,73);
+insert into t (id,a) values (245,74);
+insert into t (id,a) values (245,75);
+insert into t (id,a) values (245,76);
+insert into t (id,a) values (245,77);
+insert into t (id,a) values (245,78);
+insert into t (id,a) values (245,79);
+insert into t (id,a) values (245,80);
+insert into t (id,a) values (245,81);
+insert into t (id,a) values (245,82);
+insert into t (id,a) values (245,83);
+insert into t (id,a) values (245,84);
+insert into t (id,a) values (245,85);
+insert into t (id,a) values (245,86);
+insert into t (id,a) values (245,87);
+insert into t (id,a) values (245,88);
+insert into t (id,a) values (245,89);
+insert into t (id,a) values (245,90);
+insert into t (id,a) values (245,91);
+insert into t (id,a) values (245,92);
+insert into t (id,a) values (245,93);
+insert into t (id,a) values (245,94);
+insert into t (id,a) values (245,95);
+insert into t (id,a) values (245,96);
+insert into t (id,a) values (245,97);
+insert into t (id,a) values (245,98);
+insert into t (id,a) values (245,99);
+insert into t (id,a) values (246,0);
+insert into t (id,a) values (246,1);
+insert into t (id,a) values (246,2);
+insert into t (id,a) values (246,3);
+insert into t (id,a) values (246,4);
+insert into t (id,a) values (246,5);
+insert into t (id,a) values (246,6);
+insert into t (id,a) values (246,7);
+insert into t (id,a) values (246,8);
+insert into t (id,a) values (246,9);
+insert into t (id,a) values (246,10);
+insert into t (id,a) values (246,11);
+insert into t (id,a) values (246,12);
+insert into t (id,a) values (246,13);
+insert into t (id,a) values (246,14);
+insert into t (id,a) values (246,15);
+insert into t (id,a) values (246,16);
+insert into t (id,a) values (246,17);
+insert into t (id,a) values (246,18);
+insert into t (id,a) values (246,19);
+insert into t (id,a) values (246,20);
+insert into t (id,a) values (246,21);
+insert into t (id,a) values (246,22);
+insert into t (id,a) values (246,23);
+insert into t (id,a) values (246,24);
+insert into t (id,a) values (246,25);
+insert into t (id,a) values (246,26);
+insert into t (id,a) values (246,27);
+insert into t (id,a) values (246,28);
+insert into t (id,a) values (246,29);
+insert into t (id,a) values (246,30);
+insert into t (id,a) values (246,31);
+insert into t (id,a) values (246,32);
+insert into t (id,a) values (246,33);
+insert into t (id,a) values (246,34);
+insert into t (id,a) values (246,35);
+insert into t (id,a) values (246,36);
+insert into t (id,a) values (246,37);
+insert into t (id,a) values (246,38);
+insert into t (id,a) values (246,39);
+insert into t (id,a) values (246,40);
+insert into t (id,a) values (246,41);
+insert into t (id,a) values (246,42);
+insert into t (id,a) values (246,43);
+insert into t (id,a) values (246,44);
+insert into t (id,a) values (246,45);
+insert into t (id,a) values (246,46);
+insert into t (id,a) values (246,47);
+insert into t (id,a) values (246,48);
+insert into t (id,a) values (246,49);
+insert into t (id,a) values (246,50);
+insert into t (id,a) values (246,51);
+insert into t (id,a) values (246,52);
+insert into t (id,a) values (246,53);
+insert into t (id,a) values (246,54);
+insert into t (id,a) values (246,55);
+insert into t (id,a) values (246,56);
+insert into t (id,a) values (246,57);
+insert into t (id,a) values (246,58);
+insert into t (id,a) values (246,59);
+insert into t (id,a) values (246,60);
+insert into t (id,a) values (246,61);
+insert into t (id,a) values (246,62);
+insert into t (id,a) values (246,63);
+insert into t (id,a) values (246,64);
+insert into t (id,a) values (246,65);
+insert into t (id,a) values (246,66);
+insert into t (id,a) values (246,67);
+insert into t (id,a) values (246,68);
+insert into t (id,a) values (246,69);
+insert into t (id,a) values (246,70);
+insert into t (id,a) values (246,71);
+insert into t (id,a) values (246,72);
+insert into t (id,a) values (246,73);
+insert into t (id,a) values (246,74);
+insert into t (id,a) values (246,75);
+insert into t (id,a) values (246,76);
+insert into t (id,a) values (246,77);
+insert into t (id,a) values (246,78);
+insert into t (id,a) values (246,79);
+insert into t (id,a) values (246,80);
+insert into t (id,a) values (246,81);
+insert into t (id,a) values (246,82);
+insert into t (id,a) values (246,83);
+insert into t (id,a) values (246,84);
+insert into t (id,a) values (246,85);
+insert into t (id,a) values (246,86);
+insert into t (id,a) values (246,87);
+insert into t (id,a) values (246,88);
+insert into t (id,a) values (246,89);
+insert into t (id,a) values (246,90);
+insert into t (id,a) values (246,91);
+insert into t (id,a) values (246,92);
+insert into t (id,a) values (246,93);
+insert into t (id,a) values (246,94);
+insert into t (id,a) values (246,95);
+insert into t (id,a) values (246,96);
+insert into t (id,a) values (246,97);
+insert into t (id,a) values (246,98);
+insert into t (id,a) values (246,99);
+insert into t (id,a) values (247,0);
+insert into t (id,a) values (247,1);
+insert into t (id,a) values (247,2);
+insert into t (id,a) values (247,3);
+insert into t (id,a) values (247,4);
+insert into t (id,a) values (247,5);
+insert into t (id,a) values (247,6);
+insert into t (id,a) values (247,7);
+insert into t (id,a) values (247,8);
+insert into t (id,a) values (247,9);
+insert into t (id,a) values (247,10);
+insert into t (id,a) values (247,11);
+insert into t (id,a) values (247,12);
+insert into t (id,a) values (247,13);
+insert into t (id,a) values (247,14);
+insert into t (id,a) values (247,15);
+insert into t (id,a) values (247,16);
+insert into t (id,a) values (247,17);
+insert into t (id,a) values (247,18);
+insert into t (id,a) values (247,19);
+insert into t (id,a) values (247,20);
+insert into t (id,a) values (247,21);
+insert into t (id,a) values (247,22);
+insert into t (id,a) values (247,23);
+insert into t (id,a) values (247,24);
+insert into t (id,a) values (247,25);
+insert into t (id,a) values (247,26);
+insert into t (id,a) values (247,27);
+insert into t (id,a) values (247,28);
+insert into t (id,a) values (247,29);
+insert into t (id,a) values (247,30);
+insert into t (id,a) values (247,31);
+insert into t (id,a) values (247,32);
+insert into t (id,a) values (247,33);
+insert into t (id,a) values (247,34);
+insert into t (id,a) values (247,35);
+insert into t (id,a) values (247,36);
+insert into t (id,a) values (247,37);
+insert into t (id,a) values (247,38);
+insert into t (id,a) values (247,39);
+insert into t (id,a) values (247,40);
+insert into t (id,a) values (247,41);
+insert into t (id,a) values (247,42);
+insert into t (id,a) values (247,43);
+insert into t (id,a) values (247,44);
+insert into t (id,a) values (247,45);
+insert into t (id,a) values (247,46);
+insert into t (id,a) values (247,47);
+insert into t (id,a) values (247,48);
+insert into t (id,a) values (247,49);
+insert into t (id,a) values (247,50);
+insert into t (id,a) values (247,51);
+insert into t (id,a) values (247,52);
+insert into t (id,a) values (247,53);
+insert into t (id,a) values (247,54);
+insert into t (id,a) values (247,55);
+insert into t (id,a) values (247,56);
+insert into t (id,a) values (247,57);
+insert into t (id,a) values (247,58);
+insert into t (id,a) values (247,59);
+insert into t (id,a) values (247,60);
+insert into t (id,a) values (247,61);
+insert into t (id,a) values (247,62);
+insert into t (id,a) values (247,63);
+insert into t (id,a) values (247,64);
+insert into t (id,a) values (247,65);
+insert into t (id,a) values (247,66);
+insert into t (id,a) values (247,67);
+insert into t (id,a) values (247,68);
+insert into t (id,a) values (247,69);
+insert into t (id,a) values (247,70);
+insert into t (id,a) values (247,71);
+insert into t (id,a) values (247,72);
+insert into t (id,a) values (247,73);
+insert into t (id,a) values (247,74);
+insert into t (id,a) values (247,75);
+insert into t (id,a) values (247,76);
+insert into t (id,a) values (247,77);
+insert into t (id,a) values (247,78);
+insert into t (id,a) values (247,79);
+insert into t (id,a) values (247,80);
+insert into t (id,a) values (247,81);
+insert into t (id,a) values (247,82);
+insert into t (id,a) values (247,83);
+insert into t (id,a) values (247,84);
+insert into t (id,a) values (247,85);
+insert into t (id,a) values (247,86);
+insert into t (id,a) values (247,87);
+insert into t (id,a) values (247,88);
+insert into t (id,a) values (247,89);
+insert into t (id,a) values (247,90);
+insert into t (id,a) values (247,91);
+insert into t (id,a) values (247,92);
+insert into t (id,a) values (247,93);
+insert into t (id,a) values (247,94);
+insert into t (id,a) values (247,95);
+insert into t (id,a) values (247,96);
+insert into t (id,a) values (247,97);
+insert into t (id,a) values (247,98);
+insert into t (id,a) values (247,99);
+insert into t (id,a) values (248,0);
+insert into t (id,a) values (248,1);
+insert into t (id,a) values (248,2);
+insert into t (id,a) values (248,3);
+insert into t (id,a) values (248,4);
+insert into t (id,a) values (248,5);
+insert into t (id,a) values (248,6);
+insert into t (id,a) values (248,7);
+insert into t (id,a) values (248,8);
+insert into t (id,a) values (248,9);
+insert into t (id,a) values (248,10);
+insert into t (id,a) values (248,11);
+insert into t (id,a) values (248,12);
+insert into t (id,a) values (248,13);
+insert into t (id,a) values (248,14);
+insert into t (id,a) values (248,15);
+insert into t (id,a) values (248,16);
+insert into t (id,a) values (248,17);
+insert into t (id,a) values (248,18);
+insert into t (id,a) values (248,19);
+insert into t (id,a) values (248,20);
+insert into t (id,a) values (248,21);
+insert into t (id,a) values (248,22);
+insert into t (id,a) values (248,23);
+insert into t (id,a) values (248,24);
+insert into t (id,a) values (248,25);
+insert into t (id,a) values (248,26);
+insert into t (id,a) values (248,27);
+insert into t (id,a) values (248,28);
+insert into t (id,a) values (248,29);
+insert into t (id,a) values (248,30);
+insert into t (id,a) values (248,31);
+insert into t (id,a) values (248,32);
+insert into t (id,a) values (248,33);
+insert into t (id,a) values (248,34);
+insert into t (id,a) values (248,35);
+insert into t (id,a) values (248,36);
+insert into t (id,a) values (248,37);
+insert into t (id,a) values (248,38);
+insert into t (id,a) values (248,39);
+insert into t (id,a) values (248,40);
+insert into t (id,a) values (248,41);
+insert into t (id,a) values (248,42);
+insert into t (id,a) values (248,43);
+insert into t (id,a) values (248,44);
+insert into t (id,a) values (248,45);
+insert into t (id,a) values (248,46);
+insert into t (id,a) values (248,47);
+insert into t (id,a) values (248,48);
+insert into t (id,a) values (248,49);
+insert into t (id,a) values (248,50);
+insert into t (id,a) values (248,51);
+insert into t (id,a) values (248,52);
+insert into t (id,a) values (248,53);
+insert into t (id,a) values (248,54);
+insert into t (id,a) values (248,55);
+insert into t (id,a) values (248,56);
+insert into t (id,a) values (248,57);
+insert into t (id,a) values (248,58);
+insert into t (id,a) values (248,59);
+insert into t (id,a) values (248,60);
+insert into t (id,a) values (248,61);
+insert into t (id,a) values (248,62);
+insert into t (id,a) values (248,63);
+insert into t (id,a) values (248,64);
+insert into t (id,a) values (248,65);
+insert into t (id,a) values (248,66);
+insert into t (id,a) values (248,67);
+insert into t (id,a) values (248,68);
+insert into t (id,a) values (248,69);
+insert into t (id,a) values (248,70);
+insert into t (id,a) values (248,71);
+insert into t (id,a) values (248,72);
+insert into t (id,a) values (248,73);
+insert into t (id,a) values (248,74);
+insert into t (id,a) values (248,75);
+insert into t (id,a) values (248,76);
+insert into t (id,a) values (248,77);
+insert into t (id,a) values (248,78);
+insert into t (id,a) values (248,79);
+insert into t (id,a) values (248,80);
+insert into t (id,a) values (248,81);
+insert into t (id,a) values (248,82);
+insert into t (id,a) values (248,83);
+insert into t (id,a) values (248,84);
+insert into t (id,a) values (248,85);
+insert into t (id,a) values (248,86);
+insert into t (id,a) values (248,87);
+insert into t (id,a) values (248,88);
+insert into t (id,a) values (248,89);
+insert into t (id,a) values (248,90);
+insert into t (id,a) values (248,91);
+insert into t (id,a) values (248,92);
+insert into t (id,a) values (248,93);
+insert into t (id,a) values (248,94);
+insert into t (id,a) values (248,95);
+insert into t (id,a) values (248,96);
+insert into t (id,a) values (248,97);
+insert into t (id,a) values (248,98);
+insert into t (id,a) values (248,99);
+insert into t (id,a) values (249,0);
+insert into t (id,a) values (249,1);
+insert into t (id,a) values (249,2);
+insert into t (id,a) values (249,3);
+insert into t (id,a) values (249,4);
+insert into t (id,a) values (249,5);
+insert into t (id,a) values (249,6);
+insert into t (id,a) values (249,7);
+insert into t (id,a) values (249,8);
+insert into t (id,a) values (249,9);
+insert into t (id,a) values (249,10);
+insert into t (id,a) values (249,11);
+insert into t (id,a) values (249,12);
+insert into t (id,a) values (249,13);
+insert into t (id,a) values (249,14);
+insert into t (id,a) values (249,15);
+insert into t (id,a) values (249,16);
+insert into t (id,a) values (249,17);
+insert into t (id,a) values (249,18);
+insert into t (id,a) values (249,19);
+insert into t (id,a) values (249,20);
+insert into t (id,a) values (249,21);
+insert into t (id,a) values (249,22);
+insert into t (id,a) values (249,23);
+insert into t (id,a) values (249,24);
+insert into t (id,a) values (249,25);
+insert into t (id,a) values (249,26);
+insert into t (id,a) values (249,27);
+insert into t (id,a) values (249,28);
+insert into t (id,a) values (249,29);
+insert into t (id,a) values (249,30);
+insert into t (id,a) values (249,31);
+insert into t (id,a) values (249,32);
+insert into t (id,a) values (249,33);
+insert into t (id,a) values (249,34);
+insert into t (id,a) values (249,35);
+insert into t (id,a) values (249,36);
+insert into t (id,a) values (249,37);
+insert into t (id,a) values (249,38);
+insert into t (id,a) values (249,39);
+insert into t (id,a) values (249,40);
+insert into t (id,a) values (249,41);
+insert into t (id,a) values (249,42);
+insert into t (id,a) values (249,43);
+insert into t (id,a) values (249,44);
+insert into t (id,a) values (249,45);
+insert into t (id,a) values (249,46);
+insert into t (id,a) values (249,47);
+insert into t (id,a) values (249,48);
+insert into t (id,a) values (249,49);
+insert into t (id,a) values (249,50);
+insert into t (id,a) values (249,51);
+insert into t (id,a) values (249,52);
+insert into t (id,a) values (249,53);
+insert into t (id,a) values (249,54);
+insert into t (id,a) values (249,55);
+insert into t (id,a) values (249,56);
+insert into t (id,a) values (249,57);
+insert into t (id,a) values (249,58);
+insert into t (id,a) values (249,59);
+insert into t (id,a) values (249,60);
+insert into t (id,a) values (249,61);
+insert into t (id,a) values (249,62);
+insert into t (id,a) values (249,63);
+insert into t (id,a) values (249,64);
+insert into t (id,a) values (249,65);
+insert into t (id,a) values (249,66);
+insert into t (id,a) values (249,67);
+insert into t (id,a) values (249,68);
+insert into t (id,a) values (249,69);
+insert into t (id,a) values (249,70);
+insert into t (id,a) values (249,71);
+insert into t (id,a) values (249,72);
+insert into t (id,a) values (249,73);
+insert into t (id,a) values (249,74);
+insert into t (id,a) values (249,75);
+insert into t (id,a) values (249,76);
+insert into t (id,a) values (249,77);
+insert into t (id,a) values (249,78);
+insert into t (id,a) values (249,79);
+insert into t (id,a) values (249,80);
+insert into t (id,a) values (249,81);
+insert into t (id,a) values (249,82);
+insert into t (id,a) values (249,83);
+insert into t (id,a) values (249,84);
+insert into t (id,a) values (249,85);
+insert into t (id,a) values (249,86);
+insert into t (id,a) values (249,87);
+insert into t (id,a) values (249,88);
+insert into t (id,a) values (249,89);
+insert into t (id,a) values (249,90);
+insert into t (id,a) values (249,91);
+insert into t (id,a) values (249,92);
+insert into t (id,a) values (249,93);
+insert into t (id,a) values (249,94);
+insert into t (id,a) values (249,95);
+insert into t (id,a) values (249,96);
+insert into t (id,a) values (249,97);
+insert into t (id,a) values (249,98);
+insert into t (id,a) values (249,99);
+insert into t (id,a) values (250,0);
+insert into t (id,a) values (250,1);
+insert into t (id,a) values (250,2);
+insert into t (id,a) values (250,3);
+insert into t (id,a) values (250,4);
+insert into t (id,a) values (250,5);
+insert into t (id,a) values (250,6);
+insert into t (id,a) values (250,7);
+insert into t (id,a) values (250,8);
+insert into t (id,a) values (250,9);
+insert into t (id,a) values (250,10);
+insert into t (id,a) values (250,11);
+insert into t (id,a) values (250,12);
+insert into t (id,a) values (250,13);
+insert into t (id,a) values (250,14);
+insert into t (id,a) values (250,15);
+insert into t (id,a) values (250,16);
+insert into t (id,a) values (250,17);
+insert into t (id,a) values (250,18);
+insert into t (id,a) values (250,19);
+insert into t (id,a) values (250,20);
+insert into t (id,a) values (250,21);
+insert into t (id,a) values (250,22);
+insert into t (id,a) values (250,23);
+insert into t (id,a) values (250,24);
+insert into t (id,a) values (250,25);
+insert into t (id,a) values (250,26);
+insert into t (id,a) values (250,27);
+insert into t (id,a) values (250,28);
+insert into t (id,a) values (250,29);
+insert into t (id,a) values (250,30);
+insert into t (id,a) values (250,31);
+insert into t (id,a) values (250,32);
+insert into t (id,a) values (250,33);
+insert into t (id,a) values (250,34);
+insert into t (id,a) values (250,35);
+insert into t (id,a) values (250,36);
+insert into t (id,a) values (250,37);
+insert into t (id,a) values (250,38);
+insert into t (id,a) values (250,39);
+insert into t (id,a) values (250,40);
+insert into t (id,a) values (250,41);
+insert into t (id,a) values (250,42);
+insert into t (id,a) values (250,43);
+insert into t (id,a) values (250,44);
+insert into t (id,a) values (250,45);
+insert into t (id,a) values (250,46);
+insert into t (id,a) values (250,47);
+insert into t (id,a) values (250,48);
+insert into t (id,a) values (250,49);
+insert into t (id,a) values (250,50);
+insert into t (id,a) values (250,51);
+insert into t (id,a) values (250,52);
+insert into t (id,a) values (250,53);
+insert into t (id,a) values (250,54);
+insert into t (id,a) values (250,55);
+insert into t (id,a) values (250,56);
+insert into t (id,a) values (250,57);
+insert into t (id,a) values (250,58);
+insert into t (id,a) values (250,59);
+insert into t (id,a) values (250,60);
+insert into t (id,a) values (250,61);
+insert into t (id,a) values (250,62);
+insert into t (id,a) values (250,63);
+insert into t (id,a) values (250,64);
+insert into t (id,a) values (250,65);
+insert into t (id,a) values (250,66);
+insert into t (id,a) values (250,67);
+insert into t (id,a) values (250,68);
+insert into t (id,a) values (250,69);
+insert into t (id,a) values (250,70);
+insert into t (id,a) values (250,71);
+insert into t (id,a) values (250,72);
+insert into t (id,a) values (250,73);
+insert into t (id,a) values (250,74);
+insert into t (id,a) values (250,75);
+insert into t (id,a) values (250,76);
+insert into t (id,a) values (250,77);
+insert into t (id,a) values (250,78);
+insert into t (id,a) values (250,79);
+insert into t (id,a) values (250,80);
+insert into t (id,a) values (250,81);
+insert into t (id,a) values (250,82);
+insert into t (id,a) values (250,83);
+insert into t (id,a) values (250,84);
+insert into t (id,a) values (250,85);
+insert into t (id,a) values (250,86);
+insert into t (id,a) values (250,87);
+insert into t (id,a) values (250,88);
+insert into t (id,a) values (250,89);
+insert into t (id,a) values (250,90);
+insert into t (id,a) values (250,91);
+insert into t (id,a) values (250,92);
+insert into t (id,a) values (250,93);
+insert into t (id,a) values (250,94);
+insert into t (id,a) values (250,95);
+insert into t (id,a) values (250,96);
+insert into t (id,a) values (250,97);
+insert into t (id,a) values (250,98);
+insert into t (id,a) values (250,99);
+insert into t (id,a) values (251,0);
+insert into t (id,a) values (251,1);
+insert into t (id,a) values (251,2);
+insert into t (id,a) values (251,3);
+insert into t (id,a) values (251,4);
+insert into t (id,a) values (251,5);
+insert into t (id,a) values (251,6);
+insert into t (id,a) values (251,7);
+insert into t (id,a) values (251,8);
+insert into t (id,a) values (251,9);
+insert into t (id,a) values (251,10);
+insert into t (id,a) values (251,11);
+insert into t (id,a) values (251,12);
+insert into t (id,a) values (251,13);
+insert into t (id,a) values (251,14);
+insert into t (id,a) values (251,15);
+insert into t (id,a) values (251,16);
+insert into t (id,a) values (251,17);
+insert into t (id,a) values (251,18);
+insert into t (id,a) values (251,19);
+insert into t (id,a) values (251,20);
+insert into t (id,a) values (251,21);
+insert into t (id,a) values (251,22);
+insert into t (id,a) values (251,23);
+insert into t (id,a) values (251,24);
+insert into t (id,a) values (251,25);
+insert into t (id,a) values (251,26);
+insert into t (id,a) values (251,27);
+insert into t (id,a) values (251,28);
+insert into t (id,a) values (251,29);
+insert into t (id,a) values (251,30);
+insert into t (id,a) values (251,31);
+insert into t (id,a) values (251,32);
+insert into t (id,a) values (251,33);
+insert into t (id,a) values (251,34);
+insert into t (id,a) values (251,35);
+insert into t (id,a) values (251,36);
+insert into t (id,a) values (251,37);
+insert into t (id,a) values (251,38);
+insert into t (id,a) values (251,39);
+insert into t (id,a) values (251,40);
+insert into t (id,a) values (251,41);
+insert into t (id,a) values (251,42);
+insert into t (id,a) values (251,43);
+insert into t (id,a) values (251,44);
+insert into t (id,a) values (251,45);
+insert into t (id,a) values (251,46);
+insert into t (id,a) values (251,47);
+insert into t (id,a) values (251,48);
+insert into t (id,a) values (251,49);
+insert into t (id,a) values (251,50);
+insert into t (id,a) values (251,51);
+insert into t (id,a) values (251,52);
+insert into t (id,a) values (251,53);
+insert into t (id,a) values (251,54);
+insert into t (id,a) values (251,55);
+insert into t (id,a) values (251,56);
+insert into t (id,a) values (251,57);
+insert into t (id,a) values (251,58);
+insert into t (id,a) values (251,59);
+insert into t (id,a) values (251,60);
+insert into t (id,a) values (251,61);
+insert into t (id,a) values (251,62);
+insert into t (id,a) values (251,63);
+insert into t (id,a) values (251,64);
+insert into t (id,a) values (251,65);
+insert into t (id,a) values (251,66);
+insert into t (id,a) values (251,67);
+insert into t (id,a) values (251,68);
+insert into t (id,a) values (251,69);
+insert into t (id,a) values (251,70);
+insert into t (id,a) values (251,71);
+insert into t (id,a) values (251,72);
+insert into t (id,a) values (251,73);
+insert into t (id,a) values (251,74);
+insert into t (id,a) values (251,75);
+insert into t (id,a) values (251,76);
+insert into t (id,a) values (251,77);
+insert into t (id,a) values (251,78);
+insert into t (id,a) values (251,79);
+insert into t (id,a) values (251,80);
+insert into t (id,a) values (251,81);
+insert into t (id,a) values (251,82);
+insert into t (id,a) values (251,83);
+insert into t (id,a) values (251,84);
+insert into t (id,a) values (251,85);
+insert into t (id,a) values (251,86);
+insert into t (id,a) values (251,87);
+insert into t (id,a) values (251,88);
+insert into t (id,a) values (251,89);
+insert into t (id,a) values (251,90);
+insert into t (id,a) values (251,91);
+insert into t (id,a) values (251,92);
+insert into t (id,a) values (251,93);
+insert into t (id,a) values (251,94);
+insert into t (id,a) values (251,95);
+insert into t (id,a) values (251,96);
+insert into t (id,a) values (251,97);
+insert into t (id,a) values (251,98);
+insert into t (id,a) values (251,99);
+insert into t (id,a) values (252,0);
+insert into t (id,a) values (252,1);
+insert into t (id,a) values (252,2);
+insert into t (id,a) values (252,3);
+insert into t (id,a) values (252,4);
+insert into t (id,a) values (252,5);
+insert into t (id,a) values (252,6);
+insert into t (id,a) values (252,7);
+insert into t (id,a) values (252,8);
+insert into t (id,a) values (252,9);
+insert into t (id,a) values (252,10);
+insert into t (id,a) values (252,11);
+insert into t (id,a) values (252,12);
+insert into t (id,a) values (252,13);
+insert into t (id,a) values (252,14);
+insert into t (id,a) values (252,15);
+insert into t (id,a) values (252,16);
+insert into t (id,a) values (252,17);
+insert into t (id,a) values (252,18);
+insert into t (id,a) values (252,19);
+insert into t (id,a) values (252,20);
+insert into t (id,a) values (252,21);
+insert into t (id,a) values (252,22);
+insert into t (id,a) values (252,23);
+insert into t (id,a) values (252,24);
+insert into t (id,a) values (252,25);
+insert into t (id,a) values (252,26);
+insert into t (id,a) values (252,27);
+insert into t (id,a) values (252,28);
+insert into t (id,a) values (252,29);
+insert into t (id,a) values (252,30);
+insert into t (id,a) values (252,31);
+insert into t (id,a) values (252,32);
+insert into t (id,a) values (252,33);
+insert into t (id,a) values (252,34);
+insert into t (id,a) values (252,35);
+insert into t (id,a) values (252,36);
+insert into t (id,a) values (252,37);
+insert into t (id,a) values (252,38);
+insert into t (id,a) values (252,39);
+insert into t (id,a) values (252,40);
+insert into t (id,a) values (252,41);
+insert into t (id,a) values (252,42);
+insert into t (id,a) values (252,43);
+insert into t (id,a) values (252,44);
+insert into t (id,a) values (252,45);
+insert into t (id,a) values (252,46);
+insert into t (id,a) values (252,47);
+insert into t (id,a) values (252,48);
+insert into t (id,a) values (252,49);
+insert into t (id,a) values (252,50);
+insert into t (id,a) values (252,51);
+insert into t (id,a) values (252,52);
+insert into t (id,a) values (252,53);
+insert into t (id,a) values (252,54);
+insert into t (id,a) values (252,55);
+insert into t (id,a) values (252,56);
+insert into t (id,a) values (252,57);
+insert into t (id,a) values (252,58);
+insert into t (id,a) values (252,59);
+insert into t (id,a) values (252,60);
+insert into t (id,a) values (252,61);
+insert into t (id,a) values (252,62);
+insert into t (id,a) values (252,63);
+insert into t (id,a) values (252,64);
+insert into t (id,a) values (252,65);
+insert into t (id,a) values (252,66);
+insert into t (id,a) values (252,67);
+insert into t (id,a) values (252,68);
+insert into t (id,a) values (252,69);
+insert into t (id,a) values (252,70);
+insert into t (id,a) values (252,71);
+insert into t (id,a) values (252,72);
+insert into t (id,a) values (252,73);
+insert into t (id,a) values (252,74);
+insert into t (id,a) values (252,75);
+insert into t (id,a) values (252,76);
+insert into t (id,a) values (252,77);
+insert into t (id,a) values (252,78);
+insert into t (id,a) values (252,79);
+insert into t (id,a) values (252,80);
+insert into t (id,a) values (252,81);
+insert into t (id,a) values (252,82);
+insert into t (id,a) values (252,83);
+insert into t (id,a) values (252,84);
+insert into t (id,a) values (252,85);
+insert into t (id,a) values (252,86);
+insert into t (id,a) values (252,87);
+insert into t (id,a) values (252,88);
+insert into t (id,a) values (252,89);
+insert into t (id,a) values (252,90);
+insert into t (id,a) values (252,91);
+insert into t (id,a) values (252,92);
+insert into t (id,a) values (252,93);
+insert into t (id,a) values (252,94);
+insert into t (id,a) values (252,95);
+insert into t (id,a) values (252,96);
+insert into t (id,a) values (252,97);
+insert into t (id,a) values (252,98);
+insert into t (id,a) values (252,99);
+insert into t (id,a) values (253,0);
+insert into t (id,a) values (253,1);
+insert into t (id,a) values (253,2);
+insert into t (id,a) values (253,3);
+insert into t (id,a) values (253,4);
+insert into t (id,a) values (253,5);
+insert into t (id,a) values (253,6);
+insert into t (id,a) values (253,7);
+insert into t (id,a) values (253,8);
+insert into t (id,a) values (253,9);
+insert into t (id,a) values (253,10);
+insert into t (id,a) values (253,11);
+insert into t (id,a) values (253,12);
+insert into t (id,a) values (253,13);
+insert into t (id,a) values (253,14);
+insert into t (id,a) values (253,15);
+insert into t (id,a) values (253,16);
+insert into t (id,a) values (253,17);
+insert into t (id,a) values (253,18);
+insert into t (id,a) values (253,19);
+insert into t (id,a) values (253,20);
+insert into t (id,a) values (253,21);
+insert into t (id,a) values (253,22);
+insert into t (id,a) values (253,23);
+insert into t (id,a) values (253,24);
+insert into t (id,a) values (253,25);
+insert into t (id,a) values (253,26);
+insert into t (id,a) values (253,27);
+insert into t (id,a) values (253,28);
+insert into t (id,a) values (253,29);
+insert into t (id,a) values (253,30);
+insert into t (id,a) values (253,31);
+insert into t (id,a) values (253,32);
+insert into t (id,a) values (253,33);
+insert into t (id,a) values (253,34);
+insert into t (id,a) values (253,35);
+insert into t (id,a) values (253,36);
+insert into t (id,a) values (253,37);
+insert into t (id,a) values (253,38);
+insert into t (id,a) values (253,39);
+insert into t (id,a) values (253,40);
+insert into t (id,a) values (253,41);
+insert into t (id,a) values (253,42);
+insert into t (id,a) values (253,43);
+insert into t (id,a) values (253,44);
+insert into t (id,a) values (253,45);
+insert into t (id,a) values (253,46);
+insert into t (id,a) values (253,47);
+insert into t (id,a) values (253,48);
+insert into t (id,a) values (253,49);
+insert into t (id,a) values (253,50);
+insert into t (id,a) values (253,51);
+insert into t (id,a) values (253,52);
+insert into t (id,a) values (253,53);
+insert into t (id,a) values (253,54);
+insert into t (id,a) values (253,55);
+insert into t (id,a) values (253,56);
+insert into t (id,a) values (253,57);
+insert into t (id,a) values (253,58);
+insert into t (id,a) values (253,59);
+insert into t (id,a) values (253,60);
+insert into t (id,a) values (253,61);
+insert into t (id,a) values (253,62);
+insert into t (id,a) values (253,63);
+insert into t (id,a) values (253,64);
+insert into t (id,a) values (253,65);
+insert into t (id,a) values (253,66);
+insert into t (id,a) values (253,67);
+insert into t (id,a) values (253,68);
+insert into t (id,a) values (253,69);
+insert into t (id,a) values (253,70);
+insert into t (id,a) values (253,71);
+insert into t (id,a) values (253,72);
+insert into t (id,a) values (253,73);
+insert into t (id,a) values (253,74);
+insert into t (id,a) values (253,75);
+insert into t (id,a) values (253,76);
+insert into t (id,a) values (253,77);
+insert into t (id,a) values (253,78);
+insert into t (id,a) values (253,79);
+insert into t (id,a) values (253,80);
+insert into t (id,a) values (253,81);
+insert into t (id,a) values (253,82);
+insert into t (id,a) values (253,83);
+insert into t (id,a) values (253,84);
+insert into t (id,a) values (253,85);
+insert into t (id,a) values (253,86);
+insert into t (id,a) values (253,87);
+insert into t (id,a) values (253,88);
+insert into t (id,a) values (253,89);
+insert into t (id,a) values (253,90);
+insert into t (id,a) values (253,91);
+insert into t (id,a) values (253,92);
+insert into t (id,a) values (253,93);
+insert into t (id,a) values (253,94);
+insert into t (id,a) values (253,95);
+insert into t (id,a) values (253,96);
+insert into t (id,a) values (253,97);
+insert into t (id,a) values (253,98);
+insert into t (id,a) values (253,99);
+insert into t (id,a) values (254,0);
+insert into t (id,a) values (254,1);
+insert into t (id,a) values (254,2);
+insert into t (id,a) values (254,3);
+insert into t (id,a) values (254,4);
+insert into t (id,a) values (254,5);
+insert into t (id,a) values (254,6);
+insert into t (id,a) values (254,7);
+insert into t (id,a) values (254,8);
+insert into t (id,a) values (254,9);
+insert into t (id,a) values (254,10);
+insert into t (id,a) values (254,11);
+insert into t (id,a) values (254,12);
+insert into t (id,a) values (254,13);
+insert into t (id,a) values (254,14);
+insert into t (id,a) values (254,15);
+insert into t (id,a) values (254,16);
+insert into t (id,a) values (254,17);
+insert into t (id,a) values (254,18);
+insert into t (id,a) values (254,19);
+insert into t (id,a) values (254,20);
+insert into t (id,a) values (254,21);
+insert into t (id,a) values (254,22);
+insert into t (id,a) values (254,23);
+insert into t (id,a) values (254,24);
+insert into t (id,a) values (254,25);
+insert into t (id,a) values (254,26);
+insert into t (id,a) values (254,27);
+insert into t (id,a) values (254,28);
+insert into t (id,a) values (254,29);
+insert into t (id,a) values (254,30);
+insert into t (id,a) values (254,31);
+insert into t (id,a) values (254,32);
+insert into t (id,a) values (254,33);
+insert into t (id,a) values (254,34);
+insert into t (id,a) values (254,35);
+insert into t (id,a) values (254,36);
+insert into t (id,a) values (254,37);
+insert into t (id,a) values (254,38);
+insert into t (id,a) values (254,39);
+insert into t (id,a) values (254,40);
+insert into t (id,a) values (254,41);
+insert into t (id,a) values (254,42);
+insert into t (id,a) values (254,43);
+insert into t (id,a) values (254,44);
+insert into t (id,a) values (254,45);
+insert into t (id,a) values (254,46);
+insert into t (id,a) values (254,47);
+insert into t (id,a) values (254,48);
+insert into t (id,a) values (254,49);
+insert into t (id,a) values (254,50);
+insert into t (id,a) values (254,51);
+insert into t (id,a) values (254,52);
+insert into t (id,a) values (254,53);
+insert into t (id,a) values (254,54);
+insert into t (id,a) values (254,55);
+insert into t (id,a) values (254,56);
+insert into t (id,a) values (254,57);
+insert into t (id,a) values (254,58);
+insert into t (id,a) values (254,59);
+insert into t (id,a) values (254,60);
+insert into t (id,a) values (254,61);
+insert into t (id,a) values (254,62);
+insert into t (id,a) values (254,63);
+insert into t (id,a) values (254,64);
+insert into t (id,a) values (254,65);
+insert into t (id,a) values (254,66);
+insert into t (id,a) values (254,67);
+insert into t (id,a) values (254,68);
+insert into t (id,a) values (254,69);
+insert into t (id,a) values (254,70);
+insert into t (id,a) values (254,71);
+insert into t (id,a) values (254,72);
+insert into t (id,a) values (254,73);
+insert into t (id,a) values (254,74);
+insert into t (id,a) values (254,75);
+insert into t (id,a) values (254,76);
+insert into t (id,a) values (254,77);
+insert into t (id,a) values (254,78);
+insert into t (id,a) values (254,79);
+insert into t (id,a) values (254,80);
+insert into t (id,a) values (254,81);
+insert into t (id,a) values (254,82);
+insert into t (id,a) values (254,83);
+insert into t (id,a) values (254,84);
+insert into t (id,a) values (254,85);
+insert into t (id,a) values (254,86);
+insert into t (id,a) values (254,87);
+insert into t (id,a) values (254,88);
+insert into t (id,a) values (254,89);
+insert into t (id,a) values (254,90);
+insert into t (id,a) values (254,91);
+insert into t (id,a) values (254,92);
+insert into t (id,a) values (254,93);
+insert into t (id,a) values (254,94);
+insert into t (id,a) values (254,95);
+insert into t (id,a) values (254,96);
+insert into t (id,a) values (254,97);
+insert into t (id,a) values (254,98);
+insert into t (id,a) values (254,99);
+insert into t (id,a) values (255,0);
+insert into t (id,a) values (255,1);
+insert into t (id,a) values (255,2);
+insert into t (id,a) values (255,3);
+insert into t (id,a) values (255,4);
+insert into t (id,a) values (255,5);
+insert into t (id,a) values (255,6);
+insert into t (id,a) values (255,7);
+insert into t (id,a) values (255,8);
+insert into t (id,a) values (255,9);
+insert into t (id,a) values (255,10);
+insert into t (id,a) values (255,11);
+insert into t (id,a) values (255,12);
+insert into t (id,a) values (255,13);
+insert into t (id,a) values (255,14);
+insert into t (id,a) values (255,15);
+insert into t (id,a) values (255,16);
+insert into t (id,a) values (255,17);
+insert into t (id,a) values (255,18);
+insert into t (id,a) values (255,19);
+insert into t (id,a) values (255,20);
+insert into t (id,a) values (255,21);
+insert into t (id,a) values (255,22);
+insert into t (id,a) values (255,23);
+insert into t (id,a) values (255,24);
+insert into t (id,a) values (255,25);
+insert into t (id,a) values (255,26);
+insert into t (id,a) values (255,27);
+insert into t (id,a) values (255,28);
+insert into t (id,a) values (255,29);
+insert into t (id,a) values (255,30);
+insert into t (id,a) values (255,31);
+insert into t (id,a) values (255,32);
+insert into t (id,a) values (255,33);
+insert into t (id,a) values (255,34);
+insert into t (id,a) values (255,35);
+insert into t (id,a) values (255,36);
+insert into t (id,a) values (255,37);
+insert into t (id,a) values (255,38);
+insert into t (id,a) values (255,39);
+insert into t (id,a) values (255,40);
+insert into t (id,a) values (255,41);
+insert into t (id,a) values (255,42);
+insert into t (id,a) values (255,43);
+insert into t (id,a) values (255,44);
+insert into t (id,a) values (255,45);
+insert into t (id,a) values (255,46);
+insert into t (id,a) values (255,47);
+insert into t (id,a) values (255,48);
+insert into t (id,a) values (255,49);
+insert into t (id,a) values (255,50);
+insert into t (id,a) values (255,51);
+insert into t (id,a) values (255,52);
+insert into t (id,a) values (255,53);
+insert into t (id,a) values (255,54);
+insert into t (id,a) values (255,55);
+insert into t (id,a) values (255,56);
+insert into t (id,a) values (255,57);
+insert into t (id,a) values (255,58);
+insert into t (id,a) values (255,59);
+insert into t (id,a) values (255,60);
+insert into t (id,a) values (255,61);
+insert into t (id,a) values (255,62);
+insert into t (id,a) values (255,63);
+insert into t (id,a) values (255,64);
+insert into t (id,a) values (255,65);
+insert into t (id,a) values (255,66);
+insert into t (id,a) values (255,67);
+insert into t (id,a) values (255,68);
+insert into t (id,a) values (255,69);
+insert into t (id,a) values (255,70);
+insert into t (id,a) values (255,71);
+insert into t (id,a) values (255,72);
+insert into t (id,a) values (255,73);
+insert into t (id,a) values (255,74);
+insert into t (id,a) values (255,75);
+insert into t (id,a) values (255,76);
+insert into t (id,a) values (255,77);
+insert into t (id,a) values (255,78);
+insert into t (id,a) values (255,79);
+insert into t (id,a) values (255,80);
+insert into t (id,a) values (255,81);
+insert into t (id,a) values (255,82);
+insert into t (id,a) values (255,83);
+insert into t (id,a) values (255,84);
+insert into t (id,a) values (255,85);
+insert into t (id,a) values (255,86);
+insert into t (id,a) values (255,87);
+insert into t (id,a) values (255,88);
+insert into t (id,a) values (255,89);
+insert into t (id,a) values (255,90);
+insert into t (id,a) values (255,91);
+insert into t (id,a) values (255,92);
+insert into t (id,a) values (255,93);
+insert into t (id,a) values (255,94);
+insert into t (id,a) values (255,95);
+insert into t (id,a) values (255,96);
+insert into t (id,a) values (255,97);
+insert into t (id,a) values (255,98);
+insert into t (id,a) values (255,99);
+insert into t (id,a) values (256,0);
+insert into t (id,a) values (256,1);
+insert into t (id,a) values (256,2);
+insert into t (id,a) values (256,3);
+insert into t (id,a) values (256,4);
+insert into t (id,a) values (256,5);
+insert into t (id,a) values (256,6);
+insert into t (id,a) values (256,7);
+insert into t (id,a) values (256,8);
+insert into t (id,a) values (256,9);
+insert into t (id,a) values (256,10);
+insert into t (id,a) values (256,11);
+insert into t (id,a) values (256,12);
+insert into t (id,a) values (256,13);
+insert into t (id,a) values (256,14);
+insert into t (id,a) values (256,15);
+insert into t (id,a) values (256,16);
+insert into t (id,a) values (256,17);
+insert into t (id,a) values (256,18);
+insert into t (id,a) values (256,19);
+insert into t (id,a) values (256,20);
+insert into t (id,a) values (256,21);
+insert into t (id,a) values (256,22);
+insert into t (id,a) values (256,23);
+insert into t (id,a) values (256,24);
+insert into t (id,a) values (256,25);
+insert into t (id,a) values (256,26);
+insert into t (id,a) values (256,27);
+insert into t (id,a) values (256,28);
+insert into t (id,a) values (256,29);
+insert into t (id,a) values (256,30);
+insert into t (id,a) values (256,31);
+insert into t (id,a) values (256,32);
+insert into t (id,a) values (256,33);
+insert into t (id,a) values (256,34);
+insert into t (id,a) values (256,35);
+insert into t (id,a) values (256,36);
+insert into t (id,a) values (256,37);
+insert into t (id,a) values (256,38);
+insert into t (id,a) values (256,39);
+insert into t (id,a) values (256,40);
+insert into t (id,a) values (256,41);
+insert into t (id,a) values (256,42);
+insert into t (id,a) values (256,43);
+insert into t (id,a) values (256,44);
+insert into t (id,a) values (256,45);
+insert into t (id,a) values (256,46);
+insert into t (id,a) values (256,47);
+insert into t (id,a) values (256,48);
+insert into t (id,a) values (256,49);
+insert into t (id,a) values (256,50);
+insert into t (id,a) values (256,51);
+insert into t (id,a) values (256,52);
+insert into t (id,a) values (256,53);
+insert into t (id,a) values (256,54);
+insert into t (id,a) values (256,55);
+insert into t (id,a) values (256,56);
+insert into t (id,a) values (256,57);
+insert into t (id,a) values (256,58);
+insert into t (id,a) values (256,59);
+insert into t (id,a) values (256,60);
+insert into t (id,a) values (256,61);
+insert into t (id,a) values (256,62);
+insert into t (id,a) values (256,63);
+insert into t (id,a) values (256,64);
+insert into t (id,a) values (256,65);
+insert into t (id,a) values (256,66);
+insert into t (id,a) values (256,67);
+insert into t (id,a) values (256,68);
+insert into t (id,a) values (256,69);
+insert into t (id,a) values (256,70);
+insert into t (id,a) values (256,71);
+insert into t (id,a) values (256,72);
+insert into t (id,a) values (256,73);
+insert into t (id,a) values (256,74);
+insert into t (id,a) values (256,75);
+insert into t (id,a) values (256,76);
+insert into t (id,a) values (256,77);
+insert into t (id,a) values (256,78);
+insert into t (id,a) values (256,79);
+insert into t (id,a) values (256,80);
+insert into t (id,a) values (256,81);
+insert into t (id,a) values (256,82);
+insert into t (id,a) values (256,83);
+insert into t (id,a) values (256,84);
+insert into t (id,a) values (256,85);
+insert into t (id,a) values (256,86);
+insert into t (id,a) values (256,87);
+insert into t (id,a) values (256,88);
+insert into t (id,a) values (256,89);
+insert into t (id,a) values (256,90);
+insert into t (id,a) values (256,91);
+insert into t (id,a) values (256,92);
+insert into t (id,a) values (256,93);
+insert into t (id,a) values (256,94);
+insert into t (id,a) values (256,95);
+insert into t (id,a) values (256,96);
+insert into t (id,a) values (256,97);
+insert into t (id,a) values (256,98);
+insert into t (id,a) values (256,99);
+insert into t (id,a) values (257,0);
+insert into t (id,a) values (257,1);
+insert into t (id,a) values (257,2);
+insert into t (id,a) values (257,3);
+insert into t (id,a) values (257,4);
+insert into t (id,a) values (257,5);
+insert into t (id,a) values (257,6);
+insert into t (id,a) values (257,7);
+insert into t (id,a) values (257,8);
+insert into t (id,a) values (257,9);
+insert into t (id,a) values (257,10);
+insert into t (id,a) values (257,11);
+insert into t (id,a) values (257,12);
+insert into t (id,a) values (257,13);
+insert into t (id,a) values (257,14);
+insert into t (id,a) values (257,15);
+insert into t (id,a) values (257,16);
+insert into t (id,a) values (257,17);
+insert into t (id,a) values (257,18);
+insert into t (id,a) values (257,19);
+insert into t (id,a) values (257,20);
+insert into t (id,a) values (257,21);
+insert into t (id,a) values (257,22);
+insert into t (id,a) values (257,23);
+insert into t (id,a) values (257,24);
+insert into t (id,a) values (257,25);
+insert into t (id,a) values (257,26);
+insert into t (id,a) values (257,27);
+insert into t (id,a) values (257,28);
+insert into t (id,a) values (257,29);
+insert into t (id,a) values (257,30);
+insert into t (id,a) values (257,31);
+insert into t (id,a) values (257,32);
+insert into t (id,a) values (257,33);
+insert into t (id,a) values (257,34);
+insert into t (id,a) values (257,35);
+insert into t (id,a) values (257,36);
+insert into t (id,a) values (257,37);
+insert into t (id,a) values (257,38);
+insert into t (id,a) values (257,39);
+insert into t (id,a) values (257,40);
+insert into t (id,a) values (257,41);
+insert into t (id,a) values (257,42);
+insert into t (id,a) values (257,43);
+insert into t (id,a) values (257,44);
+insert into t (id,a) values (257,45);
+insert into t (id,a) values (257,46);
+insert into t (id,a) values (257,47);
+insert into t (id,a) values (257,48);
+insert into t (id,a) values (257,49);
+insert into t (id,a) values (257,50);
+insert into t (id,a) values (257,51);
+insert into t (id,a) values (257,52);
+insert into t (id,a) values (257,53);
+insert into t (id,a) values (257,54);
+insert into t (id,a) values (257,55);
+insert into t (id,a) values (257,56);
+insert into t (id,a) values (257,57);
+insert into t (id,a) values (257,58);
+insert into t (id,a) values (257,59);
+insert into t (id,a) values (257,60);
+insert into t (id,a) values (257,61);
+insert into t (id,a) values (257,62);
+insert into t (id,a) values (257,63);
+insert into t (id,a) values (257,64);
+insert into t (id,a) values (257,65);
+insert into t (id,a) values (257,66);
+insert into t (id,a) values (257,67);
+insert into t (id,a) values (257,68);
+insert into t (id,a) values (257,69);
+insert into t (id,a) values (257,70);
+insert into t (id,a) values (257,71);
+insert into t (id,a) values (257,72);
+insert into t (id,a) values (257,73);
+insert into t (id,a) values (257,74);
+insert into t (id,a) values (257,75);
+insert into t (id,a) values (257,76);
+insert into t (id,a) values (257,77);
+insert into t (id,a) values (257,78);
+insert into t (id,a) values (257,79);
+insert into t (id,a) values (257,80);
+insert into t (id,a) values (257,81);
+insert into t (id,a) values (257,82);
+insert into t (id,a) values (257,83);
+insert into t (id,a) values (257,84);
+insert into t (id,a) values (257,85);
+insert into t (id,a) values (257,86);
+insert into t (id,a) values (257,87);
+insert into t (id,a) values (257,88);
+insert into t (id,a) values (257,89);
+insert into t (id,a) values (257,90);
+insert into t (id,a) values (257,91);
+insert into t (id,a) values (257,92);
+insert into t (id,a) values (257,93);
+insert into t (id,a) values (257,94);
+insert into t (id,a) values (257,95);
+insert into t (id,a) values (257,96);
+insert into t (id,a) values (257,97);
+insert into t (id,a) values (257,98);
+insert into t (id,a) values (257,99);
+insert into t (id,a) values (258,0);
+insert into t (id,a) values (258,1);
+insert into t (id,a) values (258,2);
+insert into t (id,a) values (258,3);
+insert into t (id,a) values (258,4);
+insert into t (id,a) values (258,5);
+insert into t (id,a) values (258,6);
+insert into t (id,a) values (258,7);
+insert into t (id,a) values (258,8);
+insert into t (id,a) values (258,9);
+insert into t (id,a) values (258,10);
+insert into t (id,a) values (258,11);
+insert into t (id,a) values (258,12);
+insert into t (id,a) values (258,13);
+insert into t (id,a) values (258,14);
+insert into t (id,a) values (258,15);
+insert into t (id,a) values (258,16);
+insert into t (id,a) values (258,17);
+insert into t (id,a) values (258,18);
+insert into t (id,a) values (258,19);
+insert into t (id,a) values (258,20);
+insert into t (id,a) values (258,21);
+insert into t (id,a) values (258,22);
+insert into t (id,a) values (258,23);
+insert into t (id,a) values (258,24);
+insert into t (id,a) values (258,25);
+insert into t (id,a) values (258,26);
+insert into t (id,a) values (258,27);
+insert into t (id,a) values (258,28);
+insert into t (id,a) values (258,29);
+insert into t (id,a) values (258,30);
+insert into t (id,a) values (258,31);
+insert into t (id,a) values (258,32);
+insert into t (id,a) values (258,33);
+insert into t (id,a) values (258,34);
+insert into t (id,a) values (258,35);
+insert into t (id,a) values (258,36);
+insert into t (id,a) values (258,37);
+insert into t (id,a) values (258,38);
+insert into t (id,a) values (258,39);
+insert into t (id,a) values (258,40);
+insert into t (id,a) values (258,41);
+insert into t (id,a) values (258,42);
+insert into t (id,a) values (258,43);
+insert into t (id,a) values (258,44);
+insert into t (id,a) values (258,45);
+insert into t (id,a) values (258,46);
+insert into t (id,a) values (258,47);
+insert into t (id,a) values (258,48);
+insert into t (id,a) values (258,49);
+insert into t (id,a) values (258,50);
+insert into t (id,a) values (258,51);
+insert into t (id,a) values (258,52);
+insert into t (id,a) values (258,53);
+insert into t (id,a) values (258,54);
+insert into t (id,a) values (258,55);
+insert into t (id,a) values (258,56);
+insert into t (id,a) values (258,57);
+insert into t (id,a) values (258,58);
+insert into t (id,a) values (258,59);
+insert into t (id,a) values (258,60);
+insert into t (id,a) values (258,61);
+insert into t (id,a) values (258,62);
+insert into t (id,a) values (258,63);
+insert into t (id,a) values (258,64);
+insert into t (id,a) values (258,65);
+insert into t (id,a) values (258,66);
+insert into t (id,a) values (258,67);
+insert into t (id,a) values (258,68);
+insert into t (id,a) values (258,69);
+insert into t (id,a) values (258,70);
+insert into t (id,a) values (258,71);
+insert into t (id,a) values (258,72);
+insert into t (id,a) values (258,73);
+insert into t (id,a) values (258,74);
+insert into t (id,a) values (258,75);
+insert into t (id,a) values (258,76);
+insert into t (id,a) values (258,77);
+insert into t (id,a) values (258,78);
+insert into t (id,a) values (258,79);
+insert into t (id,a) values (258,80);
+insert into t (id,a) values (258,81);
+insert into t (id,a) values (258,82);
+insert into t (id,a) values (258,83);
+insert into t (id,a) values (258,84);
+insert into t (id,a) values (258,85);
+insert into t (id,a) values (258,86);
+insert into t (id,a) values (258,87);
+insert into t (id,a) values (258,88);
+insert into t (id,a) values (258,89);
+insert into t (id,a) values (258,90);
+insert into t (id,a) values (258,91);
+insert into t (id,a) values (258,92);
+insert into t (id,a) values (258,93);
+insert into t (id,a) values (258,94);
+insert into t (id,a) values (258,95);
+insert into t (id,a) values (258,96);
+insert into t (id,a) values (258,97);
+insert into t (id,a) values (258,98);
+insert into t (id,a) values (258,99);
+insert into t (id,a) values (259,0);
+insert into t (id,a) values (259,1);
+insert into t (id,a) values (259,2);
+insert into t (id,a) values (259,3);
+insert into t (id,a) values (259,4);
+insert into t (id,a) values (259,5);
+insert into t (id,a) values (259,6);
+insert into t (id,a) values (259,7);
+insert into t (id,a) values (259,8);
+insert into t (id,a) values (259,9);
+insert into t (id,a) values (259,10);
+insert into t (id,a) values (259,11);
+insert into t (id,a) values (259,12);
+insert into t (id,a) values (259,13);
+insert into t (id,a) values (259,14);
+insert into t (id,a) values (259,15);
+insert into t (id,a) values (259,16);
+insert into t (id,a) values (259,17);
+insert into t (id,a) values (259,18);
+insert into t (id,a) values (259,19);
+insert into t (id,a) values (259,20);
+insert into t (id,a) values (259,21);
+insert into t (id,a) values (259,22);
+insert into t (id,a) values (259,23);
+insert into t (id,a) values (259,24);
+insert into t (id,a) values (259,25);
+insert into t (id,a) values (259,26);
+insert into t (id,a) values (259,27);
+insert into t (id,a) values (259,28);
+insert into t (id,a) values (259,29);
+insert into t (id,a) values (259,30);
+insert into t (id,a) values (259,31);
+insert into t (id,a) values (259,32);
+insert into t (id,a) values (259,33);
+insert into t (id,a) values (259,34);
+insert into t (id,a) values (259,35);
+insert into t (id,a) values (259,36);
+insert into t (id,a) values (259,37);
+insert into t (id,a) values (259,38);
+insert into t (id,a) values (259,39);
+insert into t (id,a) values (259,40);
+insert into t (id,a) values (259,41);
+insert into t (id,a) values (259,42);
+insert into t (id,a) values (259,43);
+insert into t (id,a) values (259,44);
+insert into t (id,a) values (259,45);
+insert into t (id,a) values (259,46);
+insert into t (id,a) values (259,47);
+insert into t (id,a) values (259,48);
+insert into t (id,a) values (259,49);
+insert into t (id,a) values (259,50);
+insert into t (id,a) values (259,51);
+insert into t (id,a) values (259,52);
+insert into t (id,a) values (259,53);
+insert into t (id,a) values (259,54);
+insert into t (id,a) values (259,55);
+insert into t (id,a) values (259,56);
+insert into t (id,a) values (259,57);
+insert into t (id,a) values (259,58);
+insert into t (id,a) values (259,59);
+insert into t (id,a) values (259,60);
+insert into t (id,a) values (259,61);
+insert into t (id,a) values (259,62);
+insert into t (id,a) values (259,63);
+insert into t (id,a) values (259,64);
+insert into t (id,a) values (259,65);
+insert into t (id,a) values (259,66);
+insert into t (id,a) values (259,67);
+insert into t (id,a) values (259,68);
+insert into t (id,a) values (259,69);
+insert into t (id,a) values (259,70);
+insert into t (id,a) values (259,71);
+insert into t (id,a) values (259,72);
+insert into t (id,a) values (259,73);
+insert into t (id,a) values (259,74);
+insert into t (id,a) values (259,75);
+insert into t (id,a) values (259,76);
+insert into t (id,a) values (259,77);
+insert into t (id,a) values (259,78);
+insert into t (id,a) values (259,79);
+insert into t (id,a) values (259,80);
+insert into t (id,a) values (259,81);
+insert into t (id,a) values (259,82);
+insert into t (id,a) values (259,83);
+insert into t (id,a) values (259,84);
+insert into t (id,a) values (259,85);
+insert into t (id,a) values (259,86);
+insert into t (id,a) values (259,87);
+insert into t (id,a) values (259,88);
+insert into t (id,a) values (259,89);
+insert into t (id,a) values (259,90);
+insert into t (id,a) values (259,91);
+insert into t (id,a) values (259,92);
+insert into t (id,a) values (259,93);
+insert into t (id,a) values (259,94);
+insert into t (id,a) values (259,95);
+insert into t (id,a) values (259,96);
+insert into t (id,a) values (259,97);
+insert into t (id,a) values (259,98);
+insert into t (id,a) values (259,99);
+insert into t (id,a) values (260,0);
+insert into t (id,a) values (260,1);
+insert into t (id,a) values (260,2);
+insert into t (id,a) values (260,3);
+insert into t (id,a) values (260,4);
+insert into t (id,a) values (260,5);
+insert into t (id,a) values (260,6);
+insert into t (id,a) values (260,7);
+insert into t (id,a) values (260,8);
+insert into t (id,a) values (260,9);
+insert into t (id,a) values (260,10);
+insert into t (id,a) values (260,11);
+insert into t (id,a) values (260,12);
+insert into t (id,a) values (260,13);
+insert into t (id,a) values (260,14);
+insert into t (id,a) values (260,15);
+insert into t (id,a) values (260,16);
+insert into t (id,a) values (260,17);
+insert into t (id,a) values (260,18);
+insert into t (id,a) values (260,19);
+insert into t (id,a) values (260,20);
+insert into t (id,a) values (260,21);
+insert into t (id,a) values (260,22);
+insert into t (id,a) values (260,23);
+insert into t (id,a) values (260,24);
+insert into t (id,a) values (260,25);
+insert into t (id,a) values (260,26);
+insert into t (id,a) values (260,27);
+insert into t (id,a) values (260,28);
+insert into t (id,a) values (260,29);
+insert into t (id,a) values (260,30);
+insert into t (id,a) values (260,31);
+insert into t (id,a) values (260,32);
+insert into t (id,a) values (260,33);
+insert into t (id,a) values (260,34);
+insert into t (id,a) values (260,35);
+insert into t (id,a) values (260,36);
+insert into t (id,a) values (260,37);
+insert into t (id,a) values (260,38);
+insert into t (id,a) values (260,39);
+insert into t (id,a) values (260,40);
+insert into t (id,a) values (260,41);
+insert into t (id,a) values (260,42);
+insert into t (id,a) values (260,43);
+insert into t (id,a) values (260,44);
+insert into t (id,a) values (260,45);
+insert into t (id,a) values (260,46);
+insert into t (id,a) values (260,47);
+insert into t (id,a) values (260,48);
+insert into t (id,a) values (260,49);
+insert into t (id,a) values (260,50);
+insert into t (id,a) values (260,51);
+insert into t (id,a) values (260,52);
+insert into t (id,a) values (260,53);
+insert into t (id,a) values (260,54);
+insert into t (id,a) values (260,55);
+insert into t (id,a) values (260,56);
+insert into t (id,a) values (260,57);
+insert into t (id,a) values (260,58);
+insert into t (id,a) values (260,59);
+insert into t (id,a) values (260,60);
+insert into t (id,a) values (260,61);
+insert into t (id,a) values (260,62);
+insert into t (id,a) values (260,63);
+insert into t (id,a) values (260,64);
+insert into t (id,a) values (260,65);
+insert into t (id,a) values (260,66);
+insert into t (id,a) values (260,67);
+insert into t (id,a) values (260,68);
+insert into t (id,a) values (260,69);
+insert into t (id,a) values (260,70);
+insert into t (id,a) values (260,71);
+insert into t (id,a) values (260,72);
+insert into t (id,a) values (260,73);
+insert into t (id,a) values (260,74);
+insert into t (id,a) values (260,75);
+insert into t (id,a) values (260,76);
+insert into t (id,a) values (260,77);
+insert into t (id,a) values (260,78);
+insert into t (id,a) values (260,79);
+insert into t (id,a) values (260,80);
+insert into t (id,a) values (260,81);
+insert into t (id,a) values (260,82);
+insert into t (id,a) values (260,83);
+insert into t (id,a) values (260,84);
+insert into t (id,a) values (260,85);
+insert into t (id,a) values (260,86);
+insert into t (id,a) values (260,87);
+insert into t (id,a) values (260,88);
+insert into t (id,a) values (260,89);
+insert into t (id,a) values (260,90);
+insert into t (id,a) values (260,91);
+insert into t (id,a) values (260,92);
+insert into t (id,a) values (260,93);
+insert into t (id,a) values (260,94);
+insert into t (id,a) values (260,95);
+insert into t (id,a) values (260,96);
+insert into t (id,a) values (260,97);
+insert into t (id,a) values (260,98);
+insert into t (id,a) values (260,99);
+insert into t (id,a) values (261,0);
+insert into t (id,a) values (261,1);
+insert into t (id,a) values (261,2);
+insert into t (id,a) values (261,3);
+insert into t (id,a) values (261,4);
+insert into t (id,a) values (261,5);
+insert into t (id,a) values (261,6);
+insert into t (id,a) values (261,7);
+insert into t (id,a) values (261,8);
+insert into t (id,a) values (261,9);
+insert into t (id,a) values (261,10);
+insert into t (id,a) values (261,11);
+insert into t (id,a) values (261,12);
+insert into t (id,a) values (261,13);
+insert into t (id,a) values (261,14);
+insert into t (id,a) values (261,15);
+insert into t (id,a) values (261,16);
+insert into t (id,a) values (261,17);
+insert into t (id,a) values (261,18);
+insert into t (id,a) values (261,19);
+insert into t (id,a) values (261,20);
+insert into t (id,a) values (261,21);
+insert into t (id,a) values (261,22);
+insert into t (id,a) values (261,23);
+insert into t (id,a) values (261,24);
+insert into t (id,a) values (261,25);
+insert into t (id,a) values (261,26);
+insert into t (id,a) values (261,27);
+insert into t (id,a) values (261,28);
+insert into t (id,a) values (261,29);
+insert into t (id,a) values (261,30);
+insert into t (id,a) values (261,31);
+insert into t (id,a) values (261,32);
+insert into t (id,a) values (261,33);
+insert into t (id,a) values (261,34);
+insert into t (id,a) values (261,35);
+insert into t (id,a) values (261,36);
+insert into t (id,a) values (261,37);
+insert into t (id,a) values (261,38);
+insert into t (id,a) values (261,39);
+insert into t (id,a) values (261,40);
+insert into t (id,a) values (261,41);
+insert into t (id,a) values (261,42);
+insert into t (id,a) values (261,43);
+insert into t (id,a) values (261,44);
+insert into t (id,a) values (261,45);
+insert into t (id,a) values (261,46);
+insert into t (id,a) values (261,47);
+insert into t (id,a) values (261,48);
+insert into t (id,a) values (261,49);
+insert into t (id,a) values (261,50);
+insert into t (id,a) values (261,51);
+insert into t (id,a) values (261,52);
+insert into t (id,a) values (261,53);
+insert into t (id,a) values (261,54);
+insert into t (id,a) values (261,55);
+insert into t (id,a) values (261,56);
+insert into t (id,a) values (261,57);
+insert into t (id,a) values (261,58);
+insert into t (id,a) values (261,59);
+insert into t (id,a) values (261,60);
+insert into t (id,a) values (261,61);
+insert into t (id,a) values (261,62);
+insert into t (id,a) values (261,63);
+insert into t (id,a) values (261,64);
+insert into t (id,a) values (261,65);
+insert into t (id,a) values (261,66);
+insert into t (id,a) values (261,67);
+insert into t (id,a) values (261,68);
+insert into t (id,a) values (261,69);
+insert into t (id,a) values (261,70);
+insert into t (id,a) values (261,71);
+insert into t (id,a) values (261,72);
+insert into t (id,a) values (261,73);
+insert into t (id,a) values (261,74);
+insert into t (id,a) values (261,75);
+insert into t (id,a) values (261,76);
+insert into t (id,a) values (261,77);
+insert into t (id,a) values (261,78);
+insert into t (id,a) values (261,79);
+insert into t (id,a) values (261,80);
+insert into t (id,a) values (261,81);
+insert into t (id,a) values (261,82);
+insert into t (id,a) values (261,83);
+insert into t (id,a) values (261,84);
+insert into t (id,a) values (261,85);
+insert into t (id,a) values (261,86);
+insert into t (id,a) values (261,87);
+insert into t (id,a) values (261,88);
+insert into t (id,a) values (261,89);
+insert into t (id,a) values (261,90);
+insert into t (id,a) values (261,91);
+insert into t (id,a) values (261,92);
+insert into t (id,a) values (261,93);
+insert into t (id,a) values (261,94);
+insert into t (id,a) values (261,95);
+insert into t (id,a) values (261,96);
+insert into t (id,a) values (261,97);
+insert into t (id,a) values (261,98);
+insert into t (id,a) values (261,99);
+insert into t (id,a) values (262,0);
+insert into t (id,a) values (262,1);
+insert into t (id,a) values (262,2);
+insert into t (id,a) values (262,3);
+insert into t (id,a) values (262,4);
+insert into t (id,a) values (262,5);
+insert into t (id,a) values (262,6);
+insert into t (id,a) values (262,7);
+insert into t (id,a) values (262,8);
+insert into t (id,a) values (262,9);
+insert into t (id,a) values (262,10);
+insert into t (id,a) values (262,11);
+insert into t (id,a) values (262,12);
+insert into t (id,a) values (262,13);
+insert into t (id,a) values (262,14);
+insert into t (id,a) values (262,15);
+insert into t (id,a) values (262,16);
+insert into t (id,a) values (262,17);
+insert into t (id,a) values (262,18);
+insert into t (id,a) values (262,19);
+insert into t (id,a) values (262,20);
+insert into t (id,a) values (262,21);
+insert into t (id,a) values (262,22);
+insert into t (id,a) values (262,23);
+insert into t (id,a) values (262,24);
+insert into t (id,a) values (262,25);
+insert into t (id,a) values (262,26);
+insert into t (id,a) values (262,27);
+insert into t (id,a) values (262,28);
+insert into t (id,a) values (262,29);
+insert into t (id,a) values (262,30);
+insert into t (id,a) values (262,31);
+insert into t (id,a) values (262,32);
+insert into t (id,a) values (262,33);
+insert into t (id,a) values (262,34);
+insert into t (id,a) values (262,35);
+insert into t (id,a) values (262,36);
+insert into t (id,a) values (262,37);
+insert into t (id,a) values (262,38);
+insert into t (id,a) values (262,39);
+insert into t (id,a) values (262,40);
+insert into t (id,a) values (262,41);
+insert into t (id,a) values (262,42);
+insert into t (id,a) values (262,43);
+insert into t (id,a) values (262,44);
+insert into t (id,a) values (262,45);
+insert into t (id,a) values (262,46);
+insert into t (id,a) values (262,47);
+insert into t (id,a) values (262,48);
+insert into t (id,a) values (262,49);
+insert into t (id,a) values (262,50);
+insert into t (id,a) values (262,51);
+insert into t (id,a) values (262,52);
+insert into t (id,a) values (262,53);
+insert into t (id,a) values (262,54);
+insert into t (id,a) values (262,55);
+insert into t (id,a) values (262,56);
+insert into t (id,a) values (262,57);
+insert into t (id,a) values (262,58);
+insert into t (id,a) values (262,59);
+insert into t (id,a) values (262,60);
+insert into t (id,a) values (262,61);
+insert into t (id,a) values (262,62);
+insert into t (id,a) values (262,63);
+insert into t (id,a) values (262,64);
+insert into t (id,a) values (262,65);
+insert into t (id,a) values (262,66);
+insert into t (id,a) values (262,67);
+insert into t (id,a) values (262,68);
+insert into t (id,a) values (262,69);
+insert into t (id,a) values (262,70);
+insert into t (id,a) values (262,71);
+insert into t (id,a) values (262,72);
+insert into t (id,a) values (262,73);
+insert into t (id,a) values (262,74);
+insert into t (id,a) values (262,75);
+insert into t (id,a) values (262,76);
+insert into t (id,a) values (262,77);
+insert into t (id,a) values (262,78);
+insert into t (id,a) values (262,79);
+insert into t (id,a) values (262,80);
+insert into t (id,a) values (262,81);
+insert into t (id,a) values (262,82);
+insert into t (id,a) values (262,83);
+insert into t (id,a) values (262,84);
+insert into t (id,a) values (262,85);
+insert into t (id,a) values (262,86);
+insert into t (id,a) values (262,87);
+insert into t (id,a) values (262,88);
+insert into t (id,a) values (262,89);
+insert into t (id,a) values (262,90);
+insert into t (id,a) values (262,91);
+insert into t (id,a) values (262,92);
+insert into t (id,a) values (262,93);
+insert into t (id,a) values (262,94);
+insert into t (id,a) values (262,95);
+insert into t (id,a) values (262,96);
+insert into t (id,a) values (262,97);
+insert into t (id,a) values (262,98);
+insert into t (id,a) values (262,99);
+insert into t (id,a) values (263,0);
+insert into t (id,a) values (263,1);
+insert into t (id,a) values (263,2);
+insert into t (id,a) values (263,3);
+insert into t (id,a) values (263,4);
+insert into t (id,a) values (263,5);
+insert into t (id,a) values (263,6);
+insert into t (id,a) values (263,7);
+insert into t (id,a) values (263,8);
+insert into t (id,a) values (263,9);
+insert into t (id,a) values (263,10);
+insert into t (id,a) values (263,11);
+insert into t (id,a) values (263,12);
+insert into t (id,a) values (263,13);
+insert into t (id,a) values (263,14);
+insert into t (id,a) values (263,15);
+insert into t (id,a) values (263,16);
+insert into t (id,a) values (263,17);
+insert into t (id,a) values (263,18);
+insert into t (id,a) values (263,19);
+insert into t (id,a) values (263,20);
+insert into t (id,a) values (263,21);
+insert into t (id,a) values (263,22);
+insert into t (id,a) values (263,23);
+insert into t (id,a) values (263,24);
+insert into t (id,a) values (263,25);
+insert into t (id,a) values (263,26);
+insert into t (id,a) values (263,27);
+insert into t (id,a) values (263,28);
+insert into t (id,a) values (263,29);
+insert into t (id,a) values (263,30);
+insert into t (id,a) values (263,31);
+insert into t (id,a) values (263,32);
+insert into t (id,a) values (263,33);
+insert into t (id,a) values (263,34);
+insert into t (id,a) values (263,35);
+insert into t (id,a) values (263,36);
+insert into t (id,a) values (263,37);
+insert into t (id,a) values (263,38);
+insert into t (id,a) values (263,39);
+insert into t (id,a) values (263,40);
+insert into t (id,a) values (263,41);
+insert into t (id,a) values (263,42);
+insert into t (id,a) values (263,43);
+insert into t (id,a) values (263,44);
+insert into t (id,a) values (263,45);
+insert into t (id,a) values (263,46);
+insert into t (id,a) values (263,47);
+insert into t (id,a) values (263,48);
+insert into t (id,a) values (263,49);
+insert into t (id,a) values (263,50);
+insert into t (id,a) values (263,51);
+insert into t (id,a) values (263,52);
+insert into t (id,a) values (263,53);
+insert into t (id,a) values (263,54);
+insert into t (id,a) values (263,55);
+insert into t (id,a) values (263,56);
+insert into t (id,a) values (263,57);
+insert into t (id,a) values (263,58);
+insert into t (id,a) values (263,59);
+insert into t (id,a) values (263,60);
+insert into t (id,a) values (263,61);
+insert into t (id,a) values (263,62);
+insert into t (id,a) values (263,63);
+insert into t (id,a) values (263,64);
+insert into t (id,a) values (263,65);
+insert into t (id,a) values (263,66);
+insert into t (id,a) values (263,67);
+insert into t (id,a) values (263,68);
+insert into t (id,a) values (263,69);
+insert into t (id,a) values (263,70);
+insert into t (id,a) values (263,71);
+insert into t (id,a) values (263,72);
+insert into t (id,a) values (263,73);
+insert into t (id,a) values (263,74);
+insert into t (id,a) values (263,75);
+insert into t (id,a) values (263,76);
+insert into t (id,a) values (263,77);
+insert into t (id,a) values (263,78);
+insert into t (id,a) values (263,79);
+insert into t (id,a) values (263,80);
+insert into t (id,a) values (263,81);
+insert into t (id,a) values (263,82);
+insert into t (id,a) values (263,83);
+insert into t (id,a) values (263,84);
+insert into t (id,a) values (263,85);
+insert into t (id,a) values (263,86);
+insert into t (id,a) values (263,87);
+insert into t (id,a) values (263,88);
+insert into t (id,a) values (263,89);
+insert into t (id,a) values (263,90);
+insert into t (id,a) values (263,91);
+insert into t (id,a) values (263,92);
+insert into t (id,a) values (263,93);
+insert into t (id,a) values (263,94);
+insert into t (id,a) values (263,95);
+insert into t (id,a) values (263,96);
+insert into t (id,a) values (263,97);
+insert into t (id,a) values (263,98);
+insert into t (id,a) values (263,99);
+insert into t (id,a) values (264,0);
+insert into t (id,a) values (264,1);
+insert into t (id,a) values (264,2);
+insert into t (id,a) values (264,3);
+insert into t (id,a) values (264,4);
+insert into t (id,a) values (264,5);
+insert into t (id,a) values (264,6);
+insert into t (id,a) values (264,7);
+insert into t (id,a) values (264,8);
+insert into t (id,a) values (264,9);
+insert into t (id,a) values (264,10);
+insert into t (id,a) values (264,11);
+insert into t (id,a) values (264,12);
+insert into t (id,a) values (264,13);
+insert into t (id,a) values (264,14);
+insert into t (id,a) values (264,15);
+insert into t (id,a) values (264,16);
+insert into t (id,a) values (264,17);
+insert into t (id,a) values (264,18);
+insert into t (id,a) values (264,19);
+insert into t (id,a) values (264,20);
+insert into t (id,a) values (264,21);
+insert into t (id,a) values (264,22);
+insert into t (id,a) values (264,23);
+insert into t (id,a) values (264,24);
+insert into t (id,a) values (264,25);
+insert into t (id,a) values (264,26);
+insert into t (id,a) values (264,27);
+insert into t (id,a) values (264,28);
+insert into t (id,a) values (264,29);
+insert into t (id,a) values (264,30);
+insert into t (id,a) values (264,31);
+insert into t (id,a) values (264,32);
+insert into t (id,a) values (264,33);
+insert into t (id,a) values (264,34);
+insert into t (id,a) values (264,35);
+insert into t (id,a) values (264,36);
+insert into t (id,a) values (264,37);
+insert into t (id,a) values (264,38);
+insert into t (id,a) values (264,39);
+insert into t (id,a) values (264,40);
+insert into t (id,a) values (264,41);
+insert into t (id,a) values (264,42);
+insert into t (id,a) values (264,43);
+insert into t (id,a) values (264,44);
+insert into t (id,a) values (264,45);
+insert into t (id,a) values (264,46);
+insert into t (id,a) values (264,47);
+insert into t (id,a) values (264,48);
+insert into t (id,a) values (264,49);
+insert into t (id,a) values (264,50);
+insert into t (id,a) values (264,51);
+insert into t (id,a) values (264,52);
+insert into t (id,a) values (264,53);
+insert into t (id,a) values (264,54);
+insert into t (id,a) values (264,55);
+insert into t (id,a) values (264,56);
+insert into t (id,a) values (264,57);
+insert into t (id,a) values (264,58);
+insert into t (id,a) values (264,59);
+insert into t (id,a) values (264,60);
+insert into t (id,a) values (264,61);
+insert into t (id,a) values (264,62);
+insert into t (id,a) values (264,63);
+insert into t (id,a) values (264,64);
+insert into t (id,a) values (264,65);
+insert into t (id,a) values (264,66);
+insert into t (id,a) values (264,67);
+insert into t (id,a) values (264,68);
+insert into t (id,a) values (264,69);
+insert into t (id,a) values (264,70);
+insert into t (id,a) values (264,71);
+insert into t (id,a) values (264,72);
+insert into t (id,a) values (264,73);
+insert into t (id,a) values (264,74);
+insert into t (id,a) values (264,75);
+insert into t (id,a) values (264,76);
+insert into t (id,a) values (264,77);
+insert into t (id,a) values (264,78);
+insert into t (id,a) values (264,79);
+insert into t (id,a) values (264,80);
+insert into t (id,a) values (264,81);
+insert into t (id,a) values (264,82);
+insert into t (id,a) values (264,83);
+insert into t (id,a) values (264,84);
+insert into t (id,a) values (264,85);
+insert into t (id,a) values (264,86);
+insert into t (id,a) values (264,87);
+insert into t (id,a) values (264,88);
+insert into t (id,a) values (264,89);
+insert into t (id,a) values (264,90);
+insert into t (id,a) values (264,91);
+insert into t (id,a) values (264,92);
+insert into t (id,a) values (264,93);
+insert into t (id,a) values (264,94);
+insert into t (id,a) values (264,95);
+insert into t (id,a) values (264,96);
+insert into t (id,a) values (264,97);
+insert into t (id,a) values (264,98);
+insert into t (id,a) values (264,99);
+insert into t (id,a) values (265,0);
+insert into t (id,a) values (265,1);
+insert into t (id,a) values (265,2);
+insert into t (id,a) values (265,3);
+insert into t (id,a) values (265,4);
+insert into t (id,a) values (265,5);
+insert into t (id,a) values (265,6);
+insert into t (id,a) values (265,7);
+insert into t (id,a) values (265,8);
+insert into t (id,a) values (265,9);
+insert into t (id,a) values (265,10);
+insert into t (id,a) values (265,11);
+insert into t (id,a) values (265,12);
+insert into t (id,a) values (265,13);
+insert into t (id,a) values (265,14);
+insert into t (id,a) values (265,15);
+insert into t (id,a) values (265,16);
+insert into t (id,a) values (265,17);
+insert into t (id,a) values (265,18);
+insert into t (id,a) values (265,19);
+insert into t (id,a) values (265,20);
+insert into t (id,a) values (265,21);
+insert into t (id,a) values (265,22);
+insert into t (id,a) values (265,23);
+insert into t (id,a) values (265,24);
+insert into t (id,a) values (265,25);
+insert into t (id,a) values (265,26);
+insert into t (id,a) values (265,27);
+insert into t (id,a) values (265,28);
+insert into t (id,a) values (265,29);
+insert into t (id,a) values (265,30);
+insert into t (id,a) values (265,31);
+insert into t (id,a) values (265,32);
+insert into t (id,a) values (265,33);
+insert into t (id,a) values (265,34);
+insert into t (id,a) values (265,35);
+insert into t (id,a) values (265,36);
+insert into t (id,a) values (265,37);
+insert into t (id,a) values (265,38);
+insert into t (id,a) values (265,39);
+insert into t (id,a) values (265,40);
+insert into t (id,a) values (265,41);
+insert into t (id,a) values (265,42);
+insert into t (id,a) values (265,43);
+insert into t (id,a) values (265,44);
+insert into t (id,a) values (265,45);
+insert into t (id,a) values (265,46);
+insert into t (id,a) values (265,47);
+insert into t (id,a) values (265,48);
+insert into t (id,a) values (265,49);
+insert into t (id,a) values (265,50);
+insert into t (id,a) values (265,51);
+insert into t (id,a) values (265,52);
+insert into t (id,a) values (265,53);
+insert into t (id,a) values (265,54);
+insert into t (id,a) values (265,55);
+insert into t (id,a) values (265,56);
+insert into t (id,a) values (265,57);
+insert into t (id,a) values (265,58);
+insert into t (id,a) values (265,59);
+insert into t (id,a) values (265,60);
+insert into t (id,a) values (265,61);
+insert into t (id,a) values (265,62);
+insert into t (id,a) values (265,63);
+insert into t (id,a) values (265,64);
+insert into t (id,a) values (265,65);
+insert into t (id,a) values (265,66);
+insert into t (id,a) values (265,67);
+insert into t (id,a) values (265,68);
+insert into t (id,a) values (265,69);
+insert into t (id,a) values (265,70);
+insert into t (id,a) values (265,71);
+insert into t (id,a) values (265,72);
+insert into t (id,a) values (265,73);
+insert into t (id,a) values (265,74);
+insert into t (id,a) values (265,75);
+insert into t (id,a) values (265,76);
+insert into t (id,a) values (265,77);
+insert into t (id,a) values (265,78);
+insert into t (id,a) values (265,79);
+insert into t (id,a) values (265,80);
+insert into t (id,a) values (265,81);
+insert into t (id,a) values (265,82);
+insert into t (id,a) values (265,83);
+insert into t (id,a) values (265,84);
+insert into t (id,a) values (265,85);
+insert into t (id,a) values (265,86);
+insert into t (id,a) values (265,87);
+insert into t (id,a) values (265,88);
+insert into t (id,a) values (265,89);
+insert into t (id,a) values (265,90);
+insert into t (id,a) values (265,91);
+insert into t (id,a) values (265,92);
+insert into t (id,a) values (265,93);
+insert into t (id,a) values (265,94);
+insert into t (id,a) values (265,95);
+insert into t (id,a) values (265,96);
+insert into t (id,a) values (265,97);
+insert into t (id,a) values (265,98);
+insert into t (id,a) values (265,99);
+insert into t (id,a) values (266,0);
+insert into t (id,a) values (266,1);
+insert into t (id,a) values (266,2);
+insert into t (id,a) values (266,3);
+insert into t (id,a) values (266,4);
+insert into t (id,a) values (266,5);
+insert into t (id,a) values (266,6);
+insert into t (id,a) values (266,7);
+insert into t (id,a) values (266,8);
+insert into t (id,a) values (266,9);
+insert into t (id,a) values (266,10);
+insert into t (id,a) values (266,11);
+insert into t (id,a) values (266,12);
+insert into t (id,a) values (266,13);
+insert into t (id,a) values (266,14);
+insert into t (id,a) values (266,15);
+insert into t (id,a) values (266,16);
+insert into t (id,a) values (266,17);
+insert into t (id,a) values (266,18);
+insert into t (id,a) values (266,19);
+insert into t (id,a) values (266,20);
+insert into t (id,a) values (266,21);
+insert into t (id,a) values (266,22);
+insert into t (id,a) values (266,23);
+insert into t (id,a) values (266,24);
+insert into t (id,a) values (266,25);
+insert into t (id,a) values (266,26);
+insert into t (id,a) values (266,27);
+insert into t (id,a) values (266,28);
+insert into t (id,a) values (266,29);
+insert into t (id,a) values (266,30);
+insert into t (id,a) values (266,31);
+insert into t (id,a) values (266,32);
+insert into t (id,a) values (266,33);
+insert into t (id,a) values (266,34);
+insert into t (id,a) values (266,35);
+insert into t (id,a) values (266,36);
+insert into t (id,a) values (266,37);
+insert into t (id,a) values (266,38);
+insert into t (id,a) values (266,39);
+insert into t (id,a) values (266,40);
+insert into t (id,a) values (266,41);
+insert into t (id,a) values (266,42);
+insert into t (id,a) values (266,43);
+insert into t (id,a) values (266,44);
+insert into t (id,a) values (266,45);
+insert into t (id,a) values (266,46);
+insert into t (id,a) values (266,47);
+insert into t (id,a) values (266,48);
+insert into t (id,a) values (266,49);
+insert into t (id,a) values (266,50);
+insert into t (id,a) values (266,51);
+insert into t (id,a) values (266,52);
+insert into t (id,a) values (266,53);
+insert into t (id,a) values (266,54);
+insert into t (id,a) values (266,55);
+insert into t (id,a) values (266,56);
+insert into t (id,a) values (266,57);
+insert into t (id,a) values (266,58);
+insert into t (id,a) values (266,59);
+insert into t (id,a) values (266,60);
+insert into t (id,a) values (266,61);
+insert into t (id,a) values (266,62);
+insert into t (id,a) values (266,63);
+insert into t (id,a) values (266,64);
+insert into t (id,a) values (266,65);
+insert into t (id,a) values (266,66);
+insert into t (id,a) values (266,67);
+insert into t (id,a) values (266,68);
+insert into t (id,a) values (266,69);
+insert into t (id,a) values (266,70);
+insert into t (id,a) values (266,71);
+insert into t (id,a) values (266,72);
+insert into t (id,a) values (266,73);
+insert into t (id,a) values (266,74);
+insert into t (id,a) values (266,75);
+insert into t (id,a) values (266,76);
+insert into t (id,a) values (266,77);
+insert into t (id,a) values (266,78);
+insert into t (id,a) values (266,79);
+insert into t (id,a) values (266,80);
+insert into t (id,a) values (266,81);
+insert into t (id,a) values (266,82);
+insert into t (id,a) values (266,83);
+insert into t (id,a) values (266,84);
+insert into t (id,a) values (266,85);
+insert into t (id,a) values (266,86);
+insert into t (id,a) values (266,87);
+insert into t (id,a) values (266,88);
+insert into t (id,a) values (266,89);
+insert into t (id,a) values (266,90);
+insert into t (id,a) values (266,91);
+insert into t (id,a) values (266,92);
+insert into t (id,a) values (266,93);
+insert into t (id,a) values (266,94);
+insert into t (id,a) values (266,95);
+insert into t (id,a) values (266,96);
+insert into t (id,a) values (266,97);
+insert into t (id,a) values (266,98);
+insert into t (id,a) values (266,99);
+insert into t (id,a) values (267,0);
+insert into t (id,a) values (267,1);
+insert into t (id,a) values (267,2);
+insert into t (id,a) values (267,3);
+insert into t (id,a) values (267,4);
+insert into t (id,a) values (267,5);
+insert into t (id,a) values (267,6);
+insert into t (id,a) values (267,7);
+insert into t (id,a) values (267,8);
+insert into t (id,a) values (267,9);
+insert into t (id,a) values (267,10);
+insert into t (id,a) values (267,11);
+insert into t (id,a) values (267,12);
+insert into t (id,a) values (267,13);
+insert into t (id,a) values (267,14);
+insert into t (id,a) values (267,15);
+insert into t (id,a) values (267,16);
+insert into t (id,a) values (267,17);
+insert into t (id,a) values (267,18);
+insert into t (id,a) values (267,19);
+insert into t (id,a) values (267,20);
+insert into t (id,a) values (267,21);
+insert into t (id,a) values (267,22);
+insert into t (id,a) values (267,23);
+insert into t (id,a) values (267,24);
+insert into t (id,a) values (267,25);
+insert into t (id,a) values (267,26);
+insert into t (id,a) values (267,27);
+insert into t (id,a) values (267,28);
+insert into t (id,a) values (267,29);
+insert into t (id,a) values (267,30);
+insert into t (id,a) values (267,31);
+insert into t (id,a) values (267,32);
+insert into t (id,a) values (267,33);
+insert into t (id,a) values (267,34);
+insert into t (id,a) values (267,35);
+insert into t (id,a) values (267,36);
+insert into t (id,a) values (267,37);
+insert into t (id,a) values (267,38);
+insert into t (id,a) values (267,39);
+insert into t (id,a) values (267,40);
+insert into t (id,a) values (267,41);
+insert into t (id,a) values (267,42);
+insert into t (id,a) values (267,43);
+insert into t (id,a) values (267,44);
+insert into t (id,a) values (267,45);
+insert into t (id,a) values (267,46);
+insert into t (id,a) values (267,47);
+insert into t (id,a) values (267,48);
+insert into t (id,a) values (267,49);
+insert into t (id,a) values (267,50);
+insert into t (id,a) values (267,51);
+insert into t (id,a) values (267,52);
+insert into t (id,a) values (267,53);
+insert into t (id,a) values (267,54);
+insert into t (id,a) values (267,55);
+insert into t (id,a) values (267,56);
+insert into t (id,a) values (267,57);
+insert into t (id,a) values (267,58);
+insert into t (id,a) values (267,59);
+insert into t (id,a) values (267,60);
+insert into t (id,a) values (267,61);
+insert into t (id,a) values (267,62);
+insert into t (id,a) values (267,63);
+insert into t (id,a) values (267,64);
+insert into t (id,a) values (267,65);
+insert into t (id,a) values (267,66);
+insert into t (id,a) values (267,67);
+insert into t (id,a) values (267,68);
+insert into t (id,a) values (267,69);
+insert into t (id,a) values (267,70);
+insert into t (id,a) values (267,71);
+insert into t (id,a) values (267,72);
+insert into t (id,a) values (267,73);
+insert into t (id,a) values (267,74);
+insert into t (id,a) values (267,75);
+insert into t (id,a) values (267,76);
+insert into t (id,a) values (267,77);
+insert into t (id,a) values (267,78);
+insert into t (id,a) values (267,79);
+insert into t (id,a) values (267,80);
+insert into t (id,a) values (267,81);
+insert into t (id,a) values (267,82);
+insert into t (id,a) values (267,83);
+insert into t (id,a) values (267,84);
+insert into t (id,a) values (267,85);
+insert into t (id,a) values (267,86);
+insert into t (id,a) values (267,87);
+insert into t (id,a) values (267,88);
+insert into t (id,a) values (267,89);
+insert into t (id,a) values (267,90);
+insert into t (id,a) values (267,91);
+insert into t (id,a) values (267,92);
+insert into t (id,a) values (267,93);
+insert into t (id,a) values (267,94);
+insert into t (id,a) values (267,95);
+insert into t (id,a) values (267,96);
+insert into t (id,a) values (267,97);
+insert into t (id,a) values (267,98);
+insert into t (id,a) values (267,99);
+insert into t (id,a) values (268,0);
+insert into t (id,a) values (268,1);
+insert into t (id,a) values (268,2);
+insert into t (id,a) values (268,3);
+insert into t (id,a) values (268,4);
+insert into t (id,a) values (268,5);
+insert into t (id,a) values (268,6);
+insert into t (id,a) values (268,7);
+insert into t (id,a) values (268,8);
+insert into t (id,a) values (268,9);
+insert into t (id,a) values (268,10);
+insert into t (id,a) values (268,11);
+insert into t (id,a) values (268,12);
+insert into t (id,a) values (268,13);
+insert into t (id,a) values (268,14);
+insert into t (id,a) values (268,15);
+insert into t (id,a) values (268,16);
+insert into t (id,a) values (268,17);
+insert into t (id,a) values (268,18);
+insert into t (id,a) values (268,19);
+insert into t (id,a) values (268,20);
+insert into t (id,a) values (268,21);
+insert into t (id,a) values (268,22);
+insert into t (id,a) values (268,23);
+insert into t (id,a) values (268,24);
+insert into t (id,a) values (268,25);
+insert into t (id,a) values (268,26);
+insert into t (id,a) values (268,27);
+insert into t (id,a) values (268,28);
+insert into t (id,a) values (268,29);
+insert into t (id,a) values (268,30);
+insert into t (id,a) values (268,31);
+insert into t (id,a) values (268,32);
+insert into t (id,a) values (268,33);
+insert into t (id,a) values (268,34);
+insert into t (id,a) values (268,35);
+insert into t (id,a) values (268,36);
+insert into t (id,a) values (268,37);
+insert into t (id,a) values (268,38);
+insert into t (id,a) values (268,39);
+insert into t (id,a) values (268,40);
+insert into t (id,a) values (268,41);
+insert into t (id,a) values (268,42);
+insert into t (id,a) values (268,43);
+insert into t (id,a) values (268,44);
+insert into t (id,a) values (268,45);
+insert into t (id,a) values (268,46);
+insert into t (id,a) values (268,47);
+insert into t (id,a) values (268,48);
+insert into t (id,a) values (268,49);
+insert into t (id,a) values (268,50);
+insert into t (id,a) values (268,51);
+insert into t (id,a) values (268,52);
+insert into t (id,a) values (268,53);
+insert into t (id,a) values (268,54);
+insert into t (id,a) values (268,55);
+insert into t (id,a) values (268,56);
+insert into t (id,a) values (268,57);
+insert into t (id,a) values (268,58);
+insert into t (id,a) values (268,59);
+insert into t (id,a) values (268,60);
+insert into t (id,a) values (268,61);
+insert into t (id,a) values (268,62);
+insert into t (id,a) values (268,63);
+insert into t (id,a) values (268,64);
+insert into t (id,a) values (268,65);
+insert into t (id,a) values (268,66);
+insert into t (id,a) values (268,67);
+insert into t (id,a) values (268,68);
+insert into t (id,a) values (268,69);
+insert into t (id,a) values (268,70);
+insert into t (id,a) values (268,71);
+insert into t (id,a) values (268,72);
+insert into t (id,a) values (268,73);
+insert into t (id,a) values (268,74);
+insert into t (id,a) values (268,75);
+insert into t (id,a) values (268,76);
+insert into t (id,a) values (268,77);
+insert into t (id,a) values (268,78);
+insert into t (id,a) values (268,79);
+insert into t (id,a) values (268,80);
+insert into t (id,a) values (268,81);
+insert into t (id,a) values (268,82);
+insert into t (id,a) values (268,83);
+insert into t (id,a) values (268,84);
+insert into t (id,a) values (268,85);
+insert into t (id,a) values (268,86);
+insert into t (id,a) values (268,87);
+insert into t (id,a) values (268,88);
+insert into t (id,a) values (268,89);
+insert into t (id,a) values (268,90);
+insert into t (id,a) values (268,91);
+insert into t (id,a) values (268,92);
+insert into t (id,a) values (268,93);
+insert into t (id,a) values (268,94);
+insert into t (id,a) values (268,95);
+insert into t (id,a) values (268,96);
+insert into t (id,a) values (268,97);
+insert into t (id,a) values (268,98);
+insert into t (id,a) values (268,99);
+insert into t (id,a) values (269,0);
+insert into t (id,a) values (269,1);
+insert into t (id,a) values (269,2);
+insert into t (id,a) values (269,3);
+insert into t (id,a) values (269,4);
+insert into t (id,a) values (269,5);
+insert into t (id,a) values (269,6);
+insert into t (id,a) values (269,7);
+insert into t (id,a) values (269,8);
+insert into t (id,a) values (269,9);
+insert into t (id,a) values (269,10);
+insert into t (id,a) values (269,11);
+insert into t (id,a) values (269,12);
+insert into t (id,a) values (269,13);
+insert into t (id,a) values (269,14);
+insert into t (id,a) values (269,15);
+insert into t (id,a) values (269,16);
+insert into t (id,a) values (269,17);
+insert into t (id,a) values (269,18);
+insert into t (id,a) values (269,19);
+insert into t (id,a) values (269,20);
+insert into t (id,a) values (269,21);
+insert into t (id,a) values (269,22);
+insert into t (id,a) values (269,23);
+insert into t (id,a) values (269,24);
+insert into t (id,a) values (269,25);
+insert into t (id,a) values (269,26);
+insert into t (id,a) values (269,27);
+insert into t (id,a) values (269,28);
+insert into t (id,a) values (269,29);
+insert into t (id,a) values (269,30);
+insert into t (id,a) values (269,31);
+insert into t (id,a) values (269,32);
+insert into t (id,a) values (269,33);
+insert into t (id,a) values (269,34);
+insert into t (id,a) values (269,35);
+insert into t (id,a) values (269,36);
+insert into t (id,a) values (269,37);
+insert into t (id,a) values (269,38);
+insert into t (id,a) values (269,39);
+insert into t (id,a) values (269,40);
+insert into t (id,a) values (269,41);
+insert into t (id,a) values (269,42);
+insert into t (id,a) values (269,43);
+insert into t (id,a) values (269,44);
+insert into t (id,a) values (269,45);
+insert into t (id,a) values (269,46);
+insert into t (id,a) values (269,47);
+insert into t (id,a) values (269,48);
+insert into t (id,a) values (269,49);
+insert into t (id,a) values (269,50);
+insert into t (id,a) values (269,51);
+insert into t (id,a) values (269,52);
+insert into t (id,a) values (269,53);
+insert into t (id,a) values (269,54);
+insert into t (id,a) values (269,55);
+insert into t (id,a) values (269,56);
+insert into t (id,a) values (269,57);
+insert into t (id,a) values (269,58);
+insert into t (id,a) values (269,59);
+insert into t (id,a) values (269,60);
+insert into t (id,a) values (269,61);
+insert into t (id,a) values (269,62);
+insert into t (id,a) values (269,63);
+insert into t (id,a) values (269,64);
+insert into t (id,a) values (269,65);
+insert into t (id,a) values (269,66);
+insert into t (id,a) values (269,67);
+insert into t (id,a) values (269,68);
+insert into t (id,a) values (269,69);
+insert into t (id,a) values (269,70);
+insert into t (id,a) values (269,71);
+insert into t (id,a) values (269,72);
+insert into t (id,a) values (269,73);
+insert into t (id,a) values (269,74);
+insert into t (id,a) values (269,75);
+insert into t (id,a) values (269,76);
+insert into t (id,a) values (269,77);
+insert into t (id,a) values (269,78);
+insert into t (id,a) values (269,79);
+insert into t (id,a) values (269,80);
+insert into t (id,a) values (269,81);
+insert into t (id,a) values (269,82);
+insert into t (id,a) values (269,83);
+insert into t (id,a) values (269,84);
+insert into t (id,a) values (269,85);
+insert into t (id,a) values (269,86);
+insert into t (id,a) values (269,87);
+insert into t (id,a) values (269,88);
+insert into t (id,a) values (269,89);
+insert into t (id,a) values (269,90);
+insert into t (id,a) values (269,91);
+insert into t (id,a) values (269,92);
+insert into t (id,a) values (269,93);
+insert into t (id,a) values (269,94);
+insert into t (id,a) values (269,95);
+insert into t (id,a) values (269,96);
+insert into t (id,a) values (269,97);
+insert into t (id,a) values (269,98);
+insert into t (id,a) values (269,99);
+insert into t (id,a) values (270,0);
+insert into t (id,a) values (270,1);
+insert into t (id,a) values (270,2);
+insert into t (id,a) values (270,3);
+insert into t (id,a) values (270,4);
+insert into t (id,a) values (270,5);
+insert into t (id,a) values (270,6);
+insert into t (id,a) values (270,7);
+insert into t (id,a) values (270,8);
+insert into t (id,a) values (270,9);
+insert into t (id,a) values (270,10);
+insert into t (id,a) values (270,11);
+insert into t (id,a) values (270,12);
+insert into t (id,a) values (270,13);
+insert into t (id,a) values (270,14);
+insert into t (id,a) values (270,15);
+insert into t (id,a) values (270,16);
+insert into t (id,a) values (270,17);
+insert into t (id,a) values (270,18);
+insert into t (id,a) values (270,19);
+insert into t (id,a) values (270,20);
+insert into t (id,a) values (270,21);
+insert into t (id,a) values (270,22);
+insert into t (id,a) values (270,23);
+insert into t (id,a) values (270,24);
+insert into t (id,a) values (270,25);
+insert into t (id,a) values (270,26);
+insert into t (id,a) values (270,27);
+insert into t (id,a) values (270,28);
+insert into t (id,a) values (270,29);
+insert into t (id,a) values (270,30);
+insert into t (id,a) values (270,31);
+insert into t (id,a) values (270,32);
+insert into t (id,a) values (270,33);
+insert into t (id,a) values (270,34);
+insert into t (id,a) values (270,35);
+insert into t (id,a) values (270,36);
+insert into t (id,a) values (270,37);
+insert into t (id,a) values (270,38);
+insert into t (id,a) values (270,39);
+insert into t (id,a) values (270,40);
+insert into t (id,a) values (270,41);
+insert into t (id,a) values (270,42);
+insert into t (id,a) values (270,43);
+insert into t (id,a) values (270,44);
+insert into t (id,a) values (270,45);
+insert into t (id,a) values (270,46);
+insert into t (id,a) values (270,47);
+insert into t (id,a) values (270,48);
+insert into t (id,a) values (270,49);
+insert into t (id,a) values (270,50);
+insert into t (id,a) values (270,51);
+insert into t (id,a) values (270,52);
+insert into t (id,a) values (270,53);
+insert into t (id,a) values (270,54);
+insert into t (id,a) values (270,55);
+insert into t (id,a) values (270,56);
+insert into t (id,a) values (270,57);
+insert into t (id,a) values (270,58);
+insert into t (id,a) values (270,59);
+insert into t (id,a) values (270,60);
+insert into t (id,a) values (270,61);
+insert into t (id,a) values (270,62);
+insert into t (id,a) values (270,63);
+insert into t (id,a) values (270,64);
+insert into t (id,a) values (270,65);
+insert into t (id,a) values (270,66);
+insert into t (id,a) values (270,67);
+insert into t (id,a) values (270,68);
+insert into t (id,a) values (270,69);
+insert into t (id,a) values (270,70);
+insert into t (id,a) values (270,71);
+insert into t (id,a) values (270,72);
+insert into t (id,a) values (270,73);
+insert into t (id,a) values (270,74);
+insert into t (id,a) values (270,75);
+insert into t (id,a) values (270,76);
+insert into t (id,a) values (270,77);
+insert into t (id,a) values (270,78);
+insert into t (id,a) values (270,79);
+insert into t (id,a) values (270,80);
+insert into t (id,a) values (270,81);
+insert into t (id,a) values (270,82);
+insert into t (id,a) values (270,83);
+insert into t (id,a) values (270,84);
+insert into t (id,a) values (270,85);
+insert into t (id,a) values (270,86);
+insert into t (id,a) values (270,87);
+insert into t (id,a) values (270,88);
+insert into t (id,a) values (270,89);
+insert into t (id,a) values (270,90);
+insert into t (id,a) values (270,91);
+insert into t (id,a) values (270,92);
+insert into t (id,a) values (270,93);
+insert into t (id,a) values (270,94);
+insert into t (id,a) values (270,95);
+insert into t (id,a) values (270,96);
+insert into t (id,a) values (270,97);
+insert into t (id,a) values (270,98);
+insert into t (id,a) values (270,99);
+insert into t (id,a) values (271,0);
+insert into t (id,a) values (271,1);
+insert into t (id,a) values (271,2);
+insert into t (id,a) values (271,3);
+insert into t (id,a) values (271,4);
+insert into t (id,a) values (271,5);
+insert into t (id,a) values (271,6);
+insert into t (id,a) values (271,7);
+insert into t (id,a) values (271,8);
+insert into t (id,a) values (271,9);
+insert into t (id,a) values (271,10);
+insert into t (id,a) values (271,11);
+insert into t (id,a) values (271,12);
+insert into t (id,a) values (271,13);
+insert into t (id,a) values (271,14);
+insert into t (id,a) values (271,15);
+insert into t (id,a) values (271,16);
+insert into t (id,a) values (271,17);
+insert into t (id,a) values (271,18);
+insert into t (id,a) values (271,19);
+insert into t (id,a) values (271,20);
+insert into t (id,a) values (271,21);
+insert into t (id,a) values (271,22);
+insert into t (id,a) values (271,23);
+insert into t (id,a) values (271,24);
+insert into t (id,a) values (271,25);
+insert into t (id,a) values (271,26);
+insert into t (id,a) values (271,27);
+insert into t (id,a) values (271,28);
+insert into t (id,a) values (271,29);
+insert into t (id,a) values (271,30);
+insert into t (id,a) values (271,31);
+insert into t (id,a) values (271,32);
+insert into t (id,a) values (271,33);
+insert into t (id,a) values (271,34);
+insert into t (id,a) values (271,35);
+insert into t (id,a) values (271,36);
+insert into t (id,a) values (271,37);
+insert into t (id,a) values (271,38);
+insert into t (id,a) values (271,39);
+insert into t (id,a) values (271,40);
+insert into t (id,a) values (271,41);
+insert into t (id,a) values (271,42);
+insert into t (id,a) values (271,43);
+insert into t (id,a) values (271,44);
+insert into t (id,a) values (271,45);
+insert into t (id,a) values (271,46);
+insert into t (id,a) values (271,47);
+insert into t (id,a) values (271,48);
+insert into t (id,a) values (271,49);
+insert into t (id,a) values (271,50);
+insert into t (id,a) values (271,51);
+insert into t (id,a) values (271,52);
+insert into t (id,a) values (271,53);
+insert into t (id,a) values (271,54);
+insert into t (id,a) values (271,55);
+insert into t (id,a) values (271,56);
+insert into t (id,a) values (271,57);
+insert into t (id,a) values (271,58);
+insert into t (id,a) values (271,59);
+insert into t (id,a) values (271,60);
+insert into t (id,a) values (271,61);
+insert into t (id,a) values (271,62);
+insert into t (id,a) values (271,63);
+insert into t (id,a) values (271,64);
+insert into t (id,a) values (271,65);
+insert into t (id,a) values (271,66);
+insert into t (id,a) values (271,67);
+insert into t (id,a) values (271,68);
+insert into t (id,a) values (271,69);
+insert into t (id,a) values (271,70);
+insert into t (id,a) values (271,71);
+insert into t (id,a) values (271,72);
+insert into t (id,a) values (271,73);
+insert into t (id,a) values (271,74);
+insert into t (id,a) values (271,75);
+insert into t (id,a) values (271,76);
+insert into t (id,a) values (271,77);
+insert into t (id,a) values (271,78);
+insert into t (id,a) values (271,79);
+insert into t (id,a) values (271,80);
+insert into t (id,a) values (271,81);
+insert into t (id,a) values (271,82);
+insert into t (id,a) values (271,83);
+insert into t (id,a) values (271,84);
+insert into t (id,a) values (271,85);
+insert into t (id,a) values (271,86);
+insert into t (id,a) values (271,87);
+insert into t (id,a) values (271,88);
+insert into t (id,a) values (271,89);
+insert into t (id,a) values (271,90);
+insert into t (id,a) values (271,91);
+insert into t (id,a) values (271,92);
+insert into t (id,a) values (271,93);
+insert into t (id,a) values (271,94);
+insert into t (id,a) values (271,95);
+insert into t (id,a) values (271,96);
+insert into t (id,a) values (271,97);
+insert into t (id,a) values (271,98);
+insert into t (id,a) values (271,99);
+insert into t (id,a) values (272,0);
+insert into t (id,a) values (272,1);
+insert into t (id,a) values (272,2);
+insert into t (id,a) values (272,3);
+insert into t (id,a) values (272,4);
+insert into t (id,a) values (272,5);
+insert into t (id,a) values (272,6);
+insert into t (id,a) values (272,7);
+insert into t (id,a) values (272,8);
+insert into t (id,a) values (272,9);
+insert into t (id,a) values (272,10);
+insert into t (id,a) values (272,11);
+insert into t (id,a) values (272,12);
+insert into t (id,a) values (272,13);
+insert into t (id,a) values (272,14);
+insert into t (id,a) values (272,15);
+insert into t (id,a) values (272,16);
+insert into t (id,a) values (272,17);
+insert into t (id,a) values (272,18);
+insert into t (id,a) values (272,19);
+insert into t (id,a) values (272,20);
+insert into t (id,a) values (272,21);
+insert into t (id,a) values (272,22);
+insert into t (id,a) values (272,23);
+insert into t (id,a) values (272,24);
+insert into t (id,a) values (272,25);
+insert into t (id,a) values (272,26);
+insert into t (id,a) values (272,27);
+insert into t (id,a) values (272,28);
+insert into t (id,a) values (272,29);
+insert into t (id,a) values (272,30);
+insert into t (id,a) values (272,31);
+insert into t (id,a) values (272,32);
+insert into t (id,a) values (272,33);
+insert into t (id,a) values (272,34);
+insert into t (id,a) values (272,35);
+insert into t (id,a) values (272,36);
+insert into t (id,a) values (272,37);
+insert into t (id,a) values (272,38);
+insert into t (id,a) values (272,39);
+insert into t (id,a) values (272,40);
+insert into t (id,a) values (272,41);
+insert into t (id,a) values (272,42);
+insert into t (id,a) values (272,43);
+insert into t (id,a) values (272,44);
+insert into t (id,a) values (272,45);
+insert into t (id,a) values (272,46);
+insert into t (id,a) values (272,47);
+insert into t (id,a) values (272,48);
+insert into t (id,a) values (272,49);
+insert into t (id,a) values (272,50);
+insert into t (id,a) values (272,51);
+insert into t (id,a) values (272,52);
+insert into t (id,a) values (272,53);
+insert into t (id,a) values (272,54);
+insert into t (id,a) values (272,55);
+insert into t (id,a) values (272,56);
+insert into t (id,a) values (272,57);
+insert into t (id,a) values (272,58);
+insert into t (id,a) values (272,59);
+insert into t (id,a) values (272,60);
+insert into t (id,a) values (272,61);
+insert into t (id,a) values (272,62);
+insert into t (id,a) values (272,63);
+insert into t (id,a) values (272,64);
+insert into t (id,a) values (272,65);
+insert into t (id,a) values (272,66);
+insert into t (id,a) values (272,67);
+insert into t (id,a) values (272,68);
+insert into t (id,a) values (272,69);
+insert into t (id,a) values (272,70);
+insert into t (id,a) values (272,71);
+insert into t (id,a) values (272,72);
+insert into t (id,a) values (272,73);
+insert into t (id,a) values (272,74);
+insert into t (id,a) values (272,75);
+insert into t (id,a) values (272,76);
+insert into t (id,a) values (272,77);
+insert into t (id,a) values (272,78);
+insert into t (id,a) values (272,79);
+insert into t (id,a) values (272,80);
+insert into t (id,a) values (272,81);
+insert into t (id,a) values (272,82);
+insert into t (id,a) values (272,83);
+insert into t (id,a) values (272,84);
+insert into t (id,a) values (272,85);
+insert into t (id,a) values (272,86);
+insert into t (id,a) values (272,87);
+insert into t (id,a) values (272,88);
+insert into t (id,a) values (272,89);
+insert into t (id,a) values (272,90);
+insert into t (id,a) values (272,91);
+insert into t (id,a) values (272,92);
+insert into t (id,a) values (272,93);
+insert into t (id,a) values (272,94);
+insert into t (id,a) values (272,95);
+insert into t (id,a) values (272,96);
+insert into t (id,a) values (272,97);
+insert into t (id,a) values (272,98);
+insert into t (id,a) values (272,99);
+insert into t (id,a) values (273,0);
+insert into t (id,a) values (273,1);
+insert into t (id,a) values (273,2);
+insert into t (id,a) values (273,3);
+insert into t (id,a) values (273,4);
+insert into t (id,a) values (273,5);
+insert into t (id,a) values (273,6);
+insert into t (id,a) values (273,7);
+insert into t (id,a) values (273,8);
+insert into t (id,a) values (273,9);
+insert into t (id,a) values (273,10);
+insert into t (id,a) values (273,11);
+insert into t (id,a) values (273,12);
+insert into t (id,a) values (273,13);
+insert into t (id,a) values (273,14);
+insert into t (id,a) values (273,15);
+insert into t (id,a) values (273,16);
+insert into t (id,a) values (273,17);
+insert into t (id,a) values (273,18);
+insert into t (id,a) values (273,19);
+insert into t (id,a) values (273,20);
+insert into t (id,a) values (273,21);
+insert into t (id,a) values (273,22);
+insert into t (id,a) values (273,23);
+insert into t (id,a) values (273,24);
+insert into t (id,a) values (273,25);
+insert into t (id,a) values (273,26);
+insert into t (id,a) values (273,27);
+insert into t (id,a) values (273,28);
+insert into t (id,a) values (273,29);
+insert into t (id,a) values (273,30);
+insert into t (id,a) values (273,31);
+insert into t (id,a) values (273,32);
+insert into t (id,a) values (273,33);
+insert into t (id,a) values (273,34);
+insert into t (id,a) values (273,35);
+insert into t (id,a) values (273,36);
+insert into t (id,a) values (273,37);
+insert into t (id,a) values (273,38);
+insert into t (id,a) values (273,39);
+insert into t (id,a) values (273,40);
+insert into t (id,a) values (273,41);
+insert into t (id,a) values (273,42);
+insert into t (id,a) values (273,43);
+insert into t (id,a) values (273,44);
+insert into t (id,a) values (273,45);
+insert into t (id,a) values (273,46);
+insert into t (id,a) values (273,47);
+insert into t (id,a) values (273,48);
+insert into t (id,a) values (273,49);
+insert into t (id,a) values (273,50);
+insert into t (id,a) values (273,51);
+insert into t (id,a) values (273,52);
+insert into t (id,a) values (273,53);
+insert into t (id,a) values (273,54);
+insert into t (id,a) values (273,55);
+insert into t (id,a) values (273,56);
+insert into t (id,a) values (273,57);
+insert into t (id,a) values (273,58);
+insert into t (id,a) values (273,59);
+insert into t (id,a) values (273,60);
+insert into t (id,a) values (273,61);
+insert into t (id,a) values (273,62);
+insert into t (id,a) values (273,63);
+insert into t (id,a) values (273,64);
+insert into t (id,a) values (273,65);
+insert into t (id,a) values (273,66);
+insert into t (id,a) values (273,67);
+insert into t (id,a) values (273,68);
+insert into t (id,a) values (273,69);
+insert into t (id,a) values (273,70);
+insert into t (id,a) values (273,71);
+insert into t (id,a) values (273,72);
+insert into t (id,a) values (273,73);
+insert into t (id,a) values (273,74);
+insert into t (id,a) values (273,75);
+insert into t (id,a) values (273,76);
+insert into t (id,a) values (273,77);
+insert into t (id,a) values (273,78);
+insert into t (id,a) values (273,79);
+insert into t (id,a) values (273,80);
+insert into t (id,a) values (273,81);
+insert into t (id,a) values (273,82);
+insert into t (id,a) values (273,83);
+insert into t (id,a) values (273,84);
+insert into t (id,a) values (273,85);
+insert into t (id,a) values (273,86);
+insert into t (id,a) values (273,87);
+insert into t (id,a) values (273,88);
+insert into t (id,a) values (273,89);
+insert into t (id,a) values (273,90);
+insert into t (id,a) values (273,91);
+insert into t (id,a) values (273,92);
+insert into t (id,a) values (273,93);
+insert into t (id,a) values (273,94);
+insert into t (id,a) values (273,95);
+insert into t (id,a) values (273,96);
+insert into t (id,a) values (273,97);
+insert into t (id,a) values (273,98);
+insert into t (id,a) values (273,99);
+insert into t (id,a) values (274,0);
+insert into t (id,a) values (274,1);
+insert into t (id,a) values (274,2);
+insert into t (id,a) values (274,3);
+insert into t (id,a) values (274,4);
+insert into t (id,a) values (274,5);
+insert into t (id,a) values (274,6);
+insert into t (id,a) values (274,7);
+insert into t (id,a) values (274,8);
+insert into t (id,a) values (274,9);
+insert into t (id,a) values (274,10);
+insert into t (id,a) values (274,11);
+insert into t (id,a) values (274,12);
+insert into t (id,a) values (274,13);
+insert into t (id,a) values (274,14);
+insert into t (id,a) values (274,15);
+insert into t (id,a) values (274,16);
+insert into t (id,a) values (274,17);
+insert into t (id,a) values (274,18);
+insert into t (id,a) values (274,19);
+insert into t (id,a) values (274,20);
+insert into t (id,a) values (274,21);
+insert into t (id,a) values (274,22);
+insert into t (id,a) values (274,23);
+insert into t (id,a) values (274,24);
+insert into t (id,a) values (274,25);
+insert into t (id,a) values (274,26);
+insert into t (id,a) values (274,27);
+insert into t (id,a) values (274,28);
+insert into t (id,a) values (274,29);
+insert into t (id,a) values (274,30);
+insert into t (id,a) values (274,31);
+insert into t (id,a) values (274,32);
+insert into t (id,a) values (274,33);
+insert into t (id,a) values (274,34);
+insert into t (id,a) values (274,35);
+insert into t (id,a) values (274,36);
+insert into t (id,a) values (274,37);
+insert into t (id,a) values (274,38);
+insert into t (id,a) values (274,39);
+insert into t (id,a) values (274,40);
+insert into t (id,a) values (274,41);
+insert into t (id,a) values (274,42);
+insert into t (id,a) values (274,43);
+insert into t (id,a) values (274,44);
+insert into t (id,a) values (274,45);
+insert into t (id,a) values (274,46);
+insert into t (id,a) values (274,47);
+insert into t (id,a) values (274,48);
+insert into t (id,a) values (274,49);
+insert into t (id,a) values (274,50);
+insert into t (id,a) values (274,51);
+insert into t (id,a) values (274,52);
+insert into t (id,a) values (274,53);
+insert into t (id,a) values (274,54);
+insert into t (id,a) values (274,55);
+insert into t (id,a) values (274,56);
+insert into t (id,a) values (274,57);
+insert into t (id,a) values (274,58);
+insert into t (id,a) values (274,59);
+insert into t (id,a) values (274,60);
+insert into t (id,a) values (274,61);
+insert into t (id,a) values (274,62);
+insert into t (id,a) values (274,63);
+insert into t (id,a) values (274,64);
+insert into t (id,a) values (274,65);
+insert into t (id,a) values (274,66);
+insert into t (id,a) values (274,67);
+insert into t (id,a) values (274,68);
+insert into t (id,a) values (274,69);
+insert into t (id,a) values (274,70);
+insert into t (id,a) values (274,71);
+insert into t (id,a) values (274,72);
+insert into t (id,a) values (274,73);
+insert into t (id,a) values (274,74);
+insert into t (id,a) values (274,75);
+insert into t (id,a) values (274,76);
+insert into t (id,a) values (274,77);
+insert into t (id,a) values (274,78);
+insert into t (id,a) values (274,79);
+insert into t (id,a) values (274,80);
+insert into t (id,a) values (274,81);
+insert into t (id,a) values (274,82);
+insert into t (id,a) values (274,83);
+insert into t (id,a) values (274,84);
+insert into t (id,a) values (274,85);
+insert into t (id,a) values (274,86);
+insert into t (id,a) values (274,87);
+insert into t (id,a) values (274,88);
+insert into t (id,a) values (274,89);
+insert into t (id,a) values (274,90);
+insert into t (id,a) values (274,91);
+insert into t (id,a) values (274,92);
+insert into t (id,a) values (274,93);
+insert into t (id,a) values (274,94);
+insert into t (id,a) values (274,95);
+insert into t (id,a) values (274,96);
+insert into t (id,a) values (274,97);
+insert into t (id,a) values (274,98);
+insert into t (id,a) values (274,99);
+insert into t (id,a) values (275,0);
+insert into t (id,a) values (275,1);
+insert into t (id,a) values (275,2);
+insert into t (id,a) values (275,3);
+insert into t (id,a) values (275,4);
+insert into t (id,a) values (275,5);
+insert into t (id,a) values (275,6);
+insert into t (id,a) values (275,7);
+insert into t (id,a) values (275,8);
+insert into t (id,a) values (275,9);
+insert into t (id,a) values (275,10);
+insert into t (id,a) values (275,11);
+insert into t (id,a) values (275,12);
+insert into t (id,a) values (275,13);
+insert into t (id,a) values (275,14);
+insert into t (id,a) values (275,15);
+insert into t (id,a) values (275,16);
+insert into t (id,a) values (275,17);
+insert into t (id,a) values (275,18);
+insert into t (id,a) values (275,19);
+insert into t (id,a) values (275,20);
+insert into t (id,a) values (275,21);
+insert into t (id,a) values (275,22);
+insert into t (id,a) values (275,23);
+insert into t (id,a) values (275,24);
+insert into t (id,a) values (275,25);
+insert into t (id,a) values (275,26);
+insert into t (id,a) values (275,27);
+insert into t (id,a) values (275,28);
+insert into t (id,a) values (275,29);
+insert into t (id,a) values (275,30);
+insert into t (id,a) values (275,31);
+insert into t (id,a) values (275,32);
+insert into t (id,a) values (275,33);
+insert into t (id,a) values (275,34);
+insert into t (id,a) values (275,35);
+insert into t (id,a) values (275,36);
+insert into t (id,a) values (275,37);
+insert into t (id,a) values (275,38);
+insert into t (id,a) values (275,39);
+insert into t (id,a) values (275,40);
+insert into t (id,a) values (275,41);
+insert into t (id,a) values (275,42);
+insert into t (id,a) values (275,43);
+insert into t (id,a) values (275,44);
+insert into t (id,a) values (275,45);
+insert into t (id,a) values (275,46);
+insert into t (id,a) values (275,47);
+insert into t (id,a) values (275,48);
+insert into t (id,a) values (275,49);
+insert into t (id,a) values (275,50);
+insert into t (id,a) values (275,51);
+insert into t (id,a) values (275,52);
+insert into t (id,a) values (275,53);
+insert into t (id,a) values (275,54);
+insert into t (id,a) values (275,55);
+insert into t (id,a) values (275,56);
+insert into t (id,a) values (275,57);
+insert into t (id,a) values (275,58);
+insert into t (id,a) values (275,59);
+insert into t (id,a) values (275,60);
+insert into t (id,a) values (275,61);
+insert into t (id,a) values (275,62);
+insert into t (id,a) values (275,63);
+insert into t (id,a) values (275,64);
+insert into t (id,a) values (275,65);
+insert into t (id,a) values (275,66);
+insert into t (id,a) values (275,67);
+insert into t (id,a) values (275,68);
+insert into t (id,a) values (275,69);
+insert into t (id,a) values (275,70);
+insert into t (id,a) values (275,71);
+insert into t (id,a) values (275,72);
+insert into t (id,a) values (275,73);
+insert into t (id,a) values (275,74);
+insert into t (id,a) values (275,75);
+insert into t (id,a) values (275,76);
+insert into t (id,a) values (275,77);
+insert into t (id,a) values (275,78);
+insert into t (id,a) values (275,79);
+insert into t (id,a) values (275,80);
+insert into t (id,a) values (275,81);
+insert into t (id,a) values (275,82);
+insert into t (id,a) values (275,83);
+insert into t (id,a) values (275,84);
+insert into t (id,a) values (275,85);
+insert into t (id,a) values (275,86);
+insert into t (id,a) values (275,87);
+insert into t (id,a) values (275,88);
+insert into t (id,a) values (275,89);
+insert into t (id,a) values (275,90);
+insert into t (id,a) values (275,91);
+insert into t (id,a) values (275,92);
+insert into t (id,a) values (275,93);
+insert into t (id,a) values (275,94);
+insert into t (id,a) values (275,95);
+insert into t (id,a) values (275,96);
+insert into t (id,a) values (275,97);
+insert into t (id,a) values (275,98);
+insert into t (id,a) values (275,99);
+insert into t (id,a) values (276,0);
+insert into t (id,a) values (276,1);
+insert into t (id,a) values (276,2);
+insert into t (id,a) values (276,3);
+insert into t (id,a) values (276,4);
+insert into t (id,a) values (276,5);
+insert into t (id,a) values (276,6);
+insert into t (id,a) values (276,7);
+insert into t (id,a) values (276,8);
+insert into t (id,a) values (276,9);
+insert into t (id,a) values (276,10);
+insert into t (id,a) values (276,11);
+insert into t (id,a) values (276,12);
+insert into t (id,a) values (276,13);
+insert into t (id,a) values (276,14);
+insert into t (id,a) values (276,15);
+insert into t (id,a) values (276,16);
+insert into t (id,a) values (276,17);
+insert into t (id,a) values (276,18);
+insert into t (id,a) values (276,19);
+insert into t (id,a) values (276,20);
+insert into t (id,a) values (276,21);
+insert into t (id,a) values (276,22);
+insert into t (id,a) values (276,23);
+insert into t (id,a) values (276,24);
+insert into t (id,a) values (276,25);
+insert into t (id,a) values (276,26);
+insert into t (id,a) values (276,27);
+insert into t (id,a) values (276,28);
+insert into t (id,a) values (276,29);
+insert into t (id,a) values (276,30);
+insert into t (id,a) values (276,31);
+insert into t (id,a) values (276,32);
+insert into t (id,a) values (276,33);
+insert into t (id,a) values (276,34);
+insert into t (id,a) values (276,35);
+insert into t (id,a) values (276,36);
+insert into t (id,a) values (276,37);
+insert into t (id,a) values (276,38);
+insert into t (id,a) values (276,39);
+insert into t (id,a) values (276,40);
+insert into t (id,a) values (276,41);
+insert into t (id,a) values (276,42);
+insert into t (id,a) values (276,43);
+insert into t (id,a) values (276,44);
+insert into t (id,a) values (276,45);
+insert into t (id,a) values (276,46);
+insert into t (id,a) values (276,47);
+insert into t (id,a) values (276,48);
+insert into t (id,a) values (276,49);
+insert into t (id,a) values (276,50);
+insert into t (id,a) values (276,51);
+insert into t (id,a) values (276,52);
+insert into t (id,a) values (276,53);
+insert into t (id,a) values (276,54);
+insert into t (id,a) values (276,55);
+insert into t (id,a) values (276,56);
+insert into t (id,a) values (276,57);
+insert into t (id,a) values (276,58);
+insert into t (id,a) values (276,59);
+insert into t (id,a) values (276,60);
+insert into t (id,a) values (276,61);
+insert into t (id,a) values (276,62);
+insert into t (id,a) values (276,63);
+insert into t (id,a) values (276,64);
+insert into t (id,a) values (276,65);
+insert into t (id,a) values (276,66);
+insert into t (id,a) values (276,67);
+insert into t (id,a) values (276,68);
+insert into t (id,a) values (276,69);
+insert into t (id,a) values (276,70);
+insert into t (id,a) values (276,71);
+insert into t (id,a) values (276,72);
+insert into t (id,a) values (276,73);
+insert into t (id,a) values (276,74);
+insert into t (id,a) values (276,75);
+insert into t (id,a) values (276,76);
+insert into t (id,a) values (276,77);
+insert into t (id,a) values (276,78);
+insert into t (id,a) values (276,79);
+insert into t (id,a) values (276,80);
+insert into t (id,a) values (276,81);
+insert into t (id,a) values (276,82);
+insert into t (id,a) values (276,83);
+insert into t (id,a) values (276,84);
+insert into t (id,a) values (276,85);
+insert into t (id,a) values (276,86);
+insert into t (id,a) values (276,87);
+insert into t (id,a) values (276,88);
+insert into t (id,a) values (276,89);
+insert into t (id,a) values (276,90);
+insert into t (id,a) values (276,91);
+insert into t (id,a) values (276,92);
+insert into t (id,a) values (276,93);
+insert into t (id,a) values (276,94);
+insert into t (id,a) values (276,95);
+insert into t (id,a) values (276,96);
+insert into t (id,a) values (276,97);
+insert into t (id,a) values (276,98);
+insert into t (id,a) values (276,99);
+insert into t (id,a) values (277,0);
+insert into t (id,a) values (277,1);
+insert into t (id,a) values (277,2);
+insert into t (id,a) values (277,3);
+insert into t (id,a) values (277,4);
+insert into t (id,a) values (277,5);
+insert into t (id,a) values (277,6);
+insert into t (id,a) values (277,7);
+insert into t (id,a) values (277,8);
+insert into t (id,a) values (277,9);
+insert into t (id,a) values (277,10);
+insert into t (id,a) values (277,11);
+insert into t (id,a) values (277,12);
+insert into t (id,a) values (277,13);
+insert into t (id,a) values (277,14);
+insert into t (id,a) values (277,15);
+insert into t (id,a) values (277,16);
+insert into t (id,a) values (277,17);
+insert into t (id,a) values (277,18);
+insert into t (id,a) values (277,19);
+insert into t (id,a) values (277,20);
+insert into t (id,a) values (277,21);
+insert into t (id,a) values (277,22);
+insert into t (id,a) values (277,23);
+insert into t (id,a) values (277,24);
+insert into t (id,a) values (277,25);
+insert into t (id,a) values (277,26);
+insert into t (id,a) values (277,27);
+insert into t (id,a) values (277,28);
+insert into t (id,a) values (277,29);
+insert into t (id,a) values (277,30);
+insert into t (id,a) values (277,31);
+insert into t (id,a) values (277,32);
+insert into t (id,a) values (277,33);
+insert into t (id,a) values (277,34);
+insert into t (id,a) values (277,35);
+insert into t (id,a) values (277,36);
+insert into t (id,a) values (277,37);
+insert into t (id,a) values (277,38);
+insert into t (id,a) values (277,39);
+insert into t (id,a) values (277,40);
+insert into t (id,a) values (277,41);
+insert into t (id,a) values (277,42);
+insert into t (id,a) values (277,43);
+insert into t (id,a) values (277,44);
+insert into t (id,a) values (277,45);
+insert into t (id,a) values (277,46);
+insert into t (id,a) values (277,47);
+insert into t (id,a) values (277,48);
+insert into t (id,a) values (277,49);
+insert into t (id,a) values (277,50);
+insert into t (id,a) values (277,51);
+insert into t (id,a) values (277,52);
+insert into t (id,a) values (277,53);
+insert into t (id,a) values (277,54);
+insert into t (id,a) values (277,55);
+insert into t (id,a) values (277,56);
+insert into t (id,a) values (277,57);
+insert into t (id,a) values (277,58);
+insert into t (id,a) values (277,59);
+insert into t (id,a) values (277,60);
+insert into t (id,a) values (277,61);
+insert into t (id,a) values (277,62);
+insert into t (id,a) values (277,63);
+insert into t (id,a) values (277,64);
+insert into t (id,a) values (277,65);
+insert into t (id,a) values (277,66);
+insert into t (id,a) values (277,67);
+insert into t (id,a) values (277,68);
+insert into t (id,a) values (277,69);
+insert into t (id,a) values (277,70);
+insert into t (id,a) values (277,71);
+insert into t (id,a) values (277,72);
+insert into t (id,a) values (277,73);
+insert into t (id,a) values (277,74);
+insert into t (id,a) values (277,75);
+insert into t (id,a) values (277,76);
+insert into t (id,a) values (277,77);
+insert into t (id,a) values (277,78);
+insert into t (id,a) values (277,79);
+insert into t (id,a) values (277,80);
+insert into t (id,a) values (277,81);
+insert into t (id,a) values (277,82);
+insert into t (id,a) values (277,83);
+insert into t (id,a) values (277,84);
+insert into t (id,a) values (277,85);
+insert into t (id,a) values (277,86);
+insert into t (id,a) values (277,87);
+insert into t (id,a) values (277,88);
+insert into t (id,a) values (277,89);
+insert into t (id,a) values (277,90);
+insert into t (id,a) values (277,91);
+insert into t (id,a) values (277,92);
+insert into t (id,a) values (277,93);
+insert into t (id,a) values (277,94);
+insert into t (id,a) values (277,95);
+insert into t (id,a) values (277,96);
+insert into t (id,a) values (277,97);
+insert into t (id,a) values (277,98);
+insert into t (id,a) values (277,99);
+insert into t (id,a) values (278,0);
+insert into t (id,a) values (278,1);
+insert into t (id,a) values (278,2);
+insert into t (id,a) values (278,3);
+insert into t (id,a) values (278,4);
+insert into t (id,a) values (278,5);
+insert into t (id,a) values (278,6);
+insert into t (id,a) values (278,7);
+insert into t (id,a) values (278,8);
+insert into t (id,a) values (278,9);
+insert into t (id,a) values (278,10);
+insert into t (id,a) values (278,11);
+insert into t (id,a) values (278,12);
+insert into t (id,a) values (278,13);
+insert into t (id,a) values (278,14);
+insert into t (id,a) values (278,15);
+insert into t (id,a) values (278,16);
+insert into t (id,a) values (278,17);
+insert into t (id,a) values (278,18);
+insert into t (id,a) values (278,19);
+insert into t (id,a) values (278,20);
+insert into t (id,a) values (278,21);
+insert into t (id,a) values (278,22);
+insert into t (id,a) values (278,23);
+insert into t (id,a) values (278,24);
+insert into t (id,a) values (278,25);
+insert into t (id,a) values (278,26);
+insert into t (id,a) values (278,27);
+insert into t (id,a) values (278,28);
+insert into t (id,a) values (278,29);
+insert into t (id,a) values (278,30);
+insert into t (id,a) values (278,31);
+insert into t (id,a) values (278,32);
+insert into t (id,a) values (278,33);
+insert into t (id,a) values (278,34);
+insert into t (id,a) values (278,35);
+insert into t (id,a) values (278,36);
+insert into t (id,a) values (278,37);
+insert into t (id,a) values (278,38);
+insert into t (id,a) values (278,39);
+insert into t (id,a) values (278,40);
+insert into t (id,a) values (278,41);
+insert into t (id,a) values (278,42);
+insert into t (id,a) values (278,43);
+insert into t (id,a) values (278,44);
+insert into t (id,a) values (278,45);
+insert into t (id,a) values (278,46);
+insert into t (id,a) values (278,47);
+insert into t (id,a) values (278,48);
+insert into t (id,a) values (278,49);
+insert into t (id,a) values (278,50);
+insert into t (id,a) values (278,51);
+insert into t (id,a) values (278,52);
+insert into t (id,a) values (278,53);
+insert into t (id,a) values (278,54);
+insert into t (id,a) values (278,55);
+insert into t (id,a) values (278,56);
+insert into t (id,a) values (278,57);
+insert into t (id,a) values (278,58);
+insert into t (id,a) values (278,59);
+insert into t (id,a) values (278,60);
+insert into t (id,a) values (278,61);
+insert into t (id,a) values (278,62);
+insert into t (id,a) values (278,63);
+insert into t (id,a) values (278,64);
+insert into t (id,a) values (278,65);
+insert into t (id,a) values (278,66);
+insert into t (id,a) values (278,67);
+insert into t (id,a) values (278,68);
+insert into t (id,a) values (278,69);
+insert into t (id,a) values (278,70);
+insert into t (id,a) values (278,71);
+insert into t (id,a) values (278,72);
+insert into t (id,a) values (278,73);
+insert into t (id,a) values (278,74);
+insert into t (id,a) values (278,75);
+insert into t (id,a) values (278,76);
+insert into t (id,a) values (278,77);
+insert into t (id,a) values (278,78);
+insert into t (id,a) values (278,79);
+insert into t (id,a) values (278,80);
+insert into t (id,a) values (278,81);
+insert into t (id,a) values (278,82);
+insert into t (id,a) values (278,83);
+insert into t (id,a) values (278,84);
+insert into t (id,a) values (278,85);
+insert into t (id,a) values (278,86);
+insert into t (id,a) values (278,87);
+insert into t (id,a) values (278,88);
+insert into t (id,a) values (278,89);
+insert into t (id,a) values (278,90);
+insert into t (id,a) values (278,91);
+insert into t (id,a) values (278,92);
+insert into t (id,a) values (278,93);
+insert into t (id,a) values (278,94);
+insert into t (id,a) values (278,95);
+insert into t (id,a) values (278,96);
+insert into t (id,a) values (278,97);
+insert into t (id,a) values (278,98);
+insert into t (id,a) values (278,99);
+insert into t (id,a) values (279,0);
+insert into t (id,a) values (279,1);
+insert into t (id,a) values (279,2);
+insert into t (id,a) values (279,3);
+insert into t (id,a) values (279,4);
+insert into t (id,a) values (279,5);
+insert into t (id,a) values (279,6);
+insert into t (id,a) values (279,7);
+insert into t (id,a) values (279,8);
+insert into t (id,a) values (279,9);
+insert into t (id,a) values (279,10);
+insert into t (id,a) values (279,11);
+insert into t (id,a) values (279,12);
+insert into t (id,a) values (279,13);
+insert into t (id,a) values (279,14);
+insert into t (id,a) values (279,15);
+insert into t (id,a) values (279,16);
+insert into t (id,a) values (279,17);
+insert into t (id,a) values (279,18);
+insert into t (id,a) values (279,19);
+insert into t (id,a) values (279,20);
+insert into t (id,a) values (279,21);
+insert into t (id,a) values (279,22);
+insert into t (id,a) values (279,23);
+insert into t (id,a) values (279,24);
+insert into t (id,a) values (279,25);
+insert into t (id,a) values (279,26);
+insert into t (id,a) values (279,27);
+insert into t (id,a) values (279,28);
+insert into t (id,a) values (279,29);
+insert into t (id,a) values (279,30);
+insert into t (id,a) values (279,31);
+insert into t (id,a) values (279,32);
+insert into t (id,a) values (279,33);
+insert into t (id,a) values (279,34);
+insert into t (id,a) values (279,35);
+insert into t (id,a) values (279,36);
+insert into t (id,a) values (279,37);
+insert into t (id,a) values (279,38);
+insert into t (id,a) values (279,39);
+insert into t (id,a) values (279,40);
+insert into t (id,a) values (279,41);
+insert into t (id,a) values (279,42);
+insert into t (id,a) values (279,43);
+insert into t (id,a) values (279,44);
+insert into t (id,a) values (279,45);
+insert into t (id,a) values (279,46);
+insert into t (id,a) values (279,47);
+insert into t (id,a) values (279,48);
+insert into t (id,a) values (279,49);
+insert into t (id,a) values (279,50);
+insert into t (id,a) values (279,51);
+insert into t (id,a) values (279,52);
+insert into t (id,a) values (279,53);
+insert into t (id,a) values (279,54);
+insert into t (id,a) values (279,55);
+insert into t (id,a) values (279,56);
+insert into t (id,a) values (279,57);
+insert into t (id,a) values (279,58);
+insert into t (id,a) values (279,59);
+insert into t (id,a) values (279,60);
+insert into t (id,a) values (279,61);
+insert into t (id,a) values (279,62);
+insert into t (id,a) values (279,63);
+insert into t (id,a) values (279,64);
+insert into t (id,a) values (279,65);
+insert into t (id,a) values (279,66);
+insert into t (id,a) values (279,67);
+insert into t (id,a) values (279,68);
+insert into t (id,a) values (279,69);
+insert into t (id,a) values (279,70);
+insert into t (id,a) values (279,71);
+insert into t (id,a) values (279,72);
+insert into t (id,a) values (279,73);
+insert into t (id,a) values (279,74);
+insert into t (id,a) values (279,75);
+insert into t (id,a) values (279,76);
+insert into t (id,a) values (279,77);
+insert into t (id,a) values (279,78);
+insert into t (id,a) values (279,79);
+insert into t (id,a) values (279,80);
+insert into t (id,a) values (279,81);
+insert into t (id,a) values (279,82);
+insert into t (id,a) values (279,83);
+insert into t (id,a) values (279,84);
+insert into t (id,a) values (279,85);
+insert into t (id,a) values (279,86);
+insert into t (id,a) values (279,87);
+insert into t (id,a) values (279,88);
+insert into t (id,a) values (279,89);
+insert into t (id,a) values (279,90);
+insert into t (id,a) values (279,91);
+insert into t (id,a) values (279,92);
+insert into t (id,a) values (279,93);
+insert into t (id,a) values (279,94);
+insert into t (id,a) values (279,95);
+insert into t (id,a) values (279,96);
+insert into t (id,a) values (279,97);
+insert into t (id,a) values (279,98);
+insert into t (id,a) values (279,99);
+insert into t (id,a) values (280,0);
+insert into t (id,a) values (280,1);
+insert into t (id,a) values (280,2);
+insert into t (id,a) values (280,3);
+insert into t (id,a) values (280,4);
+insert into t (id,a) values (280,5);
+insert into t (id,a) values (280,6);
+insert into t (id,a) values (280,7);
+insert into t (id,a) values (280,8);
+insert into t (id,a) values (280,9);
+insert into t (id,a) values (280,10);
+insert into t (id,a) values (280,11);
+insert into t (id,a) values (280,12);
+insert into t (id,a) values (280,13);
+insert into t (id,a) values (280,14);
+insert into t (id,a) values (280,15);
+insert into t (id,a) values (280,16);
+insert into t (id,a) values (280,17);
+insert into t (id,a) values (280,18);
+insert into t (id,a) values (280,19);
+insert into t (id,a) values (280,20);
+insert into t (id,a) values (280,21);
+insert into t (id,a) values (280,22);
+insert into t (id,a) values (280,23);
+insert into t (id,a) values (280,24);
+insert into t (id,a) values (280,25);
+insert into t (id,a) values (280,26);
+insert into t (id,a) values (280,27);
+insert into t (id,a) values (280,28);
+insert into t (id,a) values (280,29);
+insert into t (id,a) values (280,30);
+insert into t (id,a) values (280,31);
+insert into t (id,a) values (280,32);
+insert into t (id,a) values (280,33);
+insert into t (id,a) values (280,34);
+insert into t (id,a) values (280,35);
+insert into t (id,a) values (280,36);
+insert into t (id,a) values (280,37);
+insert into t (id,a) values (280,38);
+insert into t (id,a) values (280,39);
+insert into t (id,a) values (280,40);
+insert into t (id,a) values (280,41);
+insert into t (id,a) values (280,42);
+insert into t (id,a) values (280,43);
+insert into t (id,a) values (280,44);
+insert into t (id,a) values (280,45);
+insert into t (id,a) values (280,46);
+insert into t (id,a) values (280,47);
+insert into t (id,a) values (280,48);
+insert into t (id,a) values (280,49);
+insert into t (id,a) values (280,50);
+insert into t (id,a) values (280,51);
+insert into t (id,a) values (280,52);
+insert into t (id,a) values (280,53);
+insert into t (id,a) values (280,54);
+insert into t (id,a) values (280,55);
+insert into t (id,a) values (280,56);
+insert into t (id,a) values (280,57);
+insert into t (id,a) values (280,58);
+insert into t (id,a) values (280,59);
+insert into t (id,a) values (280,60);
+insert into t (id,a) values (280,61);
+insert into t (id,a) values (280,62);
+insert into t (id,a) values (280,63);
+insert into t (id,a) values (280,64);
+insert into t (id,a) values (280,65);
+insert into t (id,a) values (280,66);
+insert into t (id,a) values (280,67);
+insert into t (id,a) values (280,68);
+insert into t (id,a) values (280,69);
+insert into t (id,a) values (280,70);
+insert into t (id,a) values (280,71);
+insert into t (id,a) values (280,72);
+insert into t (id,a) values (280,73);
+insert into t (id,a) values (280,74);
+insert into t (id,a) values (280,75);
+insert into t (id,a) values (280,76);
+insert into t (id,a) values (280,77);
+insert into t (id,a) values (280,78);
+insert into t (id,a) values (280,79);
+insert into t (id,a) values (280,80);
+insert into t (id,a) values (280,81);
+insert into t (id,a) values (280,82);
+insert into t (id,a) values (280,83);
+insert into t (id,a) values (280,84);
+insert into t (id,a) values (280,85);
+insert into t (id,a) values (280,86);
+insert into t (id,a) values (280,87);
+insert into t (id,a) values (280,88);
+insert into t (id,a) values (280,89);
+insert into t (id,a) values (280,90);
+insert into t (id,a) values (280,91);
+insert into t (id,a) values (280,92);
+insert into t (id,a) values (280,93);
+insert into t (id,a) values (280,94);
+insert into t (id,a) values (280,95);
+insert into t (id,a) values (280,96);
+insert into t (id,a) values (280,97);
+insert into t (id,a) values (280,98);
+insert into t (id,a) values (280,99);
+insert into t (id,a) values (281,0);
+insert into t (id,a) values (281,1);
+insert into t (id,a) values (281,2);
+insert into t (id,a) values (281,3);
+insert into t (id,a) values (281,4);
+insert into t (id,a) values (281,5);
+insert into t (id,a) values (281,6);
+insert into t (id,a) values (281,7);
+insert into t (id,a) values (281,8);
+insert into t (id,a) values (281,9);
+insert into t (id,a) values (281,10);
+insert into t (id,a) values (281,11);
+insert into t (id,a) values (281,12);
+insert into t (id,a) values (281,13);
+insert into t (id,a) values (281,14);
+insert into t (id,a) values (281,15);
+insert into t (id,a) values (281,16);
+insert into t (id,a) values (281,17);
+insert into t (id,a) values (281,18);
+insert into t (id,a) values (281,19);
+insert into t (id,a) values (281,20);
+insert into t (id,a) values (281,21);
+insert into t (id,a) values (281,22);
+insert into t (id,a) values (281,23);
+insert into t (id,a) values (281,24);
+insert into t (id,a) values (281,25);
+insert into t (id,a) values (281,26);
+insert into t (id,a) values (281,27);
+insert into t (id,a) values (281,28);
+insert into t (id,a) values (281,29);
+insert into t (id,a) values (281,30);
+insert into t (id,a) values (281,31);
+insert into t (id,a) values (281,32);
+insert into t (id,a) values (281,33);
+insert into t (id,a) values (281,34);
+insert into t (id,a) values (281,35);
+insert into t (id,a) values (281,36);
+insert into t (id,a) values (281,37);
+insert into t (id,a) values (281,38);
+insert into t (id,a) values (281,39);
+insert into t (id,a) values (281,40);
+insert into t (id,a) values (281,41);
+insert into t (id,a) values (281,42);
+insert into t (id,a) values (281,43);
+insert into t (id,a) values (281,44);
+insert into t (id,a) values (281,45);
+insert into t (id,a) values (281,46);
+insert into t (id,a) values (281,47);
+insert into t (id,a) values (281,48);
+insert into t (id,a) values (281,49);
+insert into t (id,a) values (281,50);
+insert into t (id,a) values (281,51);
+insert into t (id,a) values (281,52);
+insert into t (id,a) values (281,53);
+insert into t (id,a) values (281,54);
+insert into t (id,a) values (281,55);
+insert into t (id,a) values (281,56);
+insert into t (id,a) values (281,57);
+insert into t (id,a) values (281,58);
+insert into t (id,a) values (281,59);
+insert into t (id,a) values (281,60);
+insert into t (id,a) values (281,61);
+insert into t (id,a) values (281,62);
+insert into t (id,a) values (281,63);
+insert into t (id,a) values (281,64);
+insert into t (id,a) values (281,65);
+insert into t (id,a) values (281,66);
+insert into t (id,a) values (281,67);
+insert into t (id,a) values (281,68);
+insert into t (id,a) values (281,69);
+insert into t (id,a) values (281,70);
+insert into t (id,a) values (281,71);
+insert into t (id,a) values (281,72);
+insert into t (id,a) values (281,73);
+insert into t (id,a) values (281,74);
+insert into t (id,a) values (281,75);
+insert into t (id,a) values (281,76);
+insert into t (id,a) values (281,77);
+insert into t (id,a) values (281,78);
+insert into t (id,a) values (281,79);
+insert into t (id,a) values (281,80);
+insert into t (id,a) values (281,81);
+insert into t (id,a) values (281,82);
+insert into t (id,a) values (281,83);
+insert into t (id,a) values (281,84);
+insert into t (id,a) values (281,85);
+insert into t (id,a) values (281,86);
+insert into t (id,a) values (281,87);
+insert into t (id,a) values (281,88);
+insert into t (id,a) values (281,89);
+insert into t (id,a) values (281,90);
+insert into t (id,a) values (281,91);
+insert into t (id,a) values (281,92);
+insert into t (id,a) values (281,93);
+insert into t (id,a) values (281,94);
+insert into t (id,a) values (281,95);
+insert into t (id,a) values (281,96);
+insert into t (id,a) values (281,97);
+insert into t (id,a) values (281,98);
+insert into t (id,a) values (281,99);
+insert into t (id,a) values (282,0);
+insert into t (id,a) values (282,1);
+insert into t (id,a) values (282,2);
+insert into t (id,a) values (282,3);
+insert into t (id,a) values (282,4);
+insert into t (id,a) values (282,5);
+insert into t (id,a) values (282,6);
+insert into t (id,a) values (282,7);
+insert into t (id,a) values (282,8);
+insert into t (id,a) values (282,9);
+insert into t (id,a) values (282,10);
+insert into t (id,a) values (282,11);
+insert into t (id,a) values (282,12);
+insert into t (id,a) values (282,13);
+insert into t (id,a) values (282,14);
+insert into t (id,a) values (282,15);
+insert into t (id,a) values (282,16);
+insert into t (id,a) values (282,17);
+insert into t (id,a) values (282,18);
+insert into t (id,a) values (282,19);
+insert into t (id,a) values (282,20);
+insert into t (id,a) values (282,21);
+insert into t (id,a) values (282,22);
+insert into t (id,a) values (282,23);
+insert into t (id,a) values (282,24);
+insert into t (id,a) values (282,25);
+insert into t (id,a) values (282,26);
+insert into t (id,a) values (282,27);
+insert into t (id,a) values (282,28);
+insert into t (id,a) values (282,29);
+insert into t (id,a) values (282,30);
+insert into t (id,a) values (282,31);
+insert into t (id,a) values (282,32);
+insert into t (id,a) values (282,33);
+insert into t (id,a) values (282,34);
+insert into t (id,a) values (282,35);
+insert into t (id,a) values (282,36);
+insert into t (id,a) values (282,37);
+insert into t (id,a) values (282,38);
+insert into t (id,a) values (282,39);
+insert into t (id,a) values (282,40);
+insert into t (id,a) values (282,41);
+insert into t (id,a) values (282,42);
+insert into t (id,a) values (282,43);
+insert into t (id,a) values (282,44);
+insert into t (id,a) values (282,45);
+insert into t (id,a) values (282,46);
+insert into t (id,a) values (282,47);
+insert into t (id,a) values (282,48);
+insert into t (id,a) values (282,49);
+insert into t (id,a) values (282,50);
+insert into t (id,a) values (282,51);
+insert into t (id,a) values (282,52);
+insert into t (id,a) values (282,53);
+insert into t (id,a) values (282,54);
+insert into t (id,a) values (282,55);
+insert into t (id,a) values (282,56);
+insert into t (id,a) values (282,57);
+insert into t (id,a) values (282,58);
+insert into t (id,a) values (282,59);
+insert into t (id,a) values (282,60);
+insert into t (id,a) values (282,61);
+insert into t (id,a) values (282,62);
+insert into t (id,a) values (282,63);
+insert into t (id,a) values (282,64);
+insert into t (id,a) values (282,65);
+insert into t (id,a) values (282,66);
+insert into t (id,a) values (282,67);
+insert into t (id,a) values (282,68);
+insert into t (id,a) values (282,69);
+insert into t (id,a) values (282,70);
+insert into t (id,a) values (282,71);
+insert into t (id,a) values (282,72);
+insert into t (id,a) values (282,73);
+insert into t (id,a) values (282,74);
+insert into t (id,a) values (282,75);
+insert into t (id,a) values (282,76);
+insert into t (id,a) values (282,77);
+insert into t (id,a) values (282,78);
+insert into t (id,a) values (282,79);
+insert into t (id,a) values (282,80);
+insert into t (id,a) values (282,81);
+insert into t (id,a) values (282,82);
+insert into t (id,a) values (282,83);
+insert into t (id,a) values (282,84);
+insert into t (id,a) values (282,85);
+insert into t (id,a) values (282,86);
+insert into t (id,a) values (282,87);
+insert into t (id,a) values (282,88);
+insert into t (id,a) values (282,89);
+insert into t (id,a) values (282,90);
+insert into t (id,a) values (282,91);
+insert into t (id,a) values (282,92);
+insert into t (id,a) values (282,93);
+insert into t (id,a) values (282,94);
+insert into t (id,a) values (282,95);
+insert into t (id,a) values (282,96);
+insert into t (id,a) values (282,97);
+insert into t (id,a) values (282,98);
+insert into t (id,a) values (282,99);
+insert into t (id,a) values (283,0);
+insert into t (id,a) values (283,1);
+insert into t (id,a) values (283,2);
+insert into t (id,a) values (283,3);
+insert into t (id,a) values (283,4);
+insert into t (id,a) values (283,5);
+insert into t (id,a) values (283,6);
+insert into t (id,a) values (283,7);
+insert into t (id,a) values (283,8);
+insert into t (id,a) values (283,9);
+insert into t (id,a) values (283,10);
+insert into t (id,a) values (283,11);
+insert into t (id,a) values (283,12);
+insert into t (id,a) values (283,13);
+insert into t (id,a) values (283,14);
+insert into t (id,a) values (283,15);
+insert into t (id,a) values (283,16);
+insert into t (id,a) values (283,17);
+insert into t (id,a) values (283,18);
+insert into t (id,a) values (283,19);
+insert into t (id,a) values (283,20);
+insert into t (id,a) values (283,21);
+insert into t (id,a) values (283,22);
+insert into t (id,a) values (283,23);
+insert into t (id,a) values (283,24);
+insert into t (id,a) values (283,25);
+insert into t (id,a) values (283,26);
+insert into t (id,a) values (283,27);
+insert into t (id,a) values (283,28);
+insert into t (id,a) values (283,29);
+insert into t (id,a) values (283,30);
+insert into t (id,a) values (283,31);
+insert into t (id,a) values (283,32);
+insert into t (id,a) values (283,33);
+insert into t (id,a) values (283,34);
+insert into t (id,a) values (283,35);
+insert into t (id,a) values (283,36);
+insert into t (id,a) values (283,37);
+insert into t (id,a) values (283,38);
+insert into t (id,a) values (283,39);
+insert into t (id,a) values (283,40);
+insert into t (id,a) values (283,41);
+insert into t (id,a) values (283,42);
+insert into t (id,a) values (283,43);
+insert into t (id,a) values (283,44);
+insert into t (id,a) values (283,45);
+insert into t (id,a) values (283,46);
+insert into t (id,a) values (283,47);
+insert into t (id,a) values (283,48);
+insert into t (id,a) values (283,49);
+insert into t (id,a) values (283,50);
+insert into t (id,a) values (283,51);
+insert into t (id,a) values (283,52);
+insert into t (id,a) values (283,53);
+insert into t (id,a) values (283,54);
+insert into t (id,a) values (283,55);
+insert into t (id,a) values (283,56);
+insert into t (id,a) values (283,57);
+insert into t (id,a) values (283,58);
+insert into t (id,a) values (283,59);
+insert into t (id,a) values (283,60);
+insert into t (id,a) values (283,61);
+insert into t (id,a) values (283,62);
+insert into t (id,a) values (283,63);
+insert into t (id,a) values (283,64);
+insert into t (id,a) values (283,65);
+insert into t (id,a) values (283,66);
+insert into t (id,a) values (283,67);
+insert into t (id,a) values (283,68);
+insert into t (id,a) values (283,69);
+insert into t (id,a) values (283,70);
+insert into t (id,a) values (283,71);
+insert into t (id,a) values (283,72);
+insert into t (id,a) values (283,73);
+insert into t (id,a) values (283,74);
+insert into t (id,a) values (283,75);
+insert into t (id,a) values (283,76);
+insert into t (id,a) values (283,77);
+insert into t (id,a) values (283,78);
+insert into t (id,a) values (283,79);
+insert into t (id,a) values (283,80);
+insert into t (id,a) values (283,81);
+insert into t (id,a) values (283,82);
+insert into t (id,a) values (283,83);
+insert into t (id,a) values (283,84);
+insert into t (id,a) values (283,85);
+insert into t (id,a) values (283,86);
+insert into t (id,a) values (283,87);
+insert into t (id,a) values (283,88);
+insert into t (id,a) values (283,89);
+insert into t (id,a) values (283,90);
+insert into t (id,a) values (283,91);
+insert into t (id,a) values (283,92);
+insert into t (id,a) values (283,93);
+insert into t (id,a) values (283,94);
+insert into t (id,a) values (283,95);
+insert into t (id,a) values (283,96);
+insert into t (id,a) values (283,97);
+insert into t (id,a) values (283,98);
+insert into t (id,a) values (283,99);
+insert into t (id,a) values (284,0);
+insert into t (id,a) values (284,1);
+insert into t (id,a) values (284,2);
+insert into t (id,a) values (284,3);
+insert into t (id,a) values (284,4);
+insert into t (id,a) values (284,5);
+insert into t (id,a) values (284,6);
+insert into t (id,a) values (284,7);
+insert into t (id,a) values (284,8);
+insert into t (id,a) values (284,9);
+insert into t (id,a) values (284,10);
+insert into t (id,a) values (284,11);
+insert into t (id,a) values (284,12);
+insert into t (id,a) values (284,13);
+insert into t (id,a) values (284,14);
+insert into t (id,a) values (284,15);
+insert into t (id,a) values (284,16);
+insert into t (id,a) values (284,17);
+insert into t (id,a) values (284,18);
+insert into t (id,a) values (284,19);
+insert into t (id,a) values (284,20);
+insert into t (id,a) values (284,21);
+insert into t (id,a) values (284,22);
+insert into t (id,a) values (284,23);
+insert into t (id,a) values (284,24);
+insert into t (id,a) values (284,25);
+insert into t (id,a) values (284,26);
+insert into t (id,a) values (284,27);
+insert into t (id,a) values (284,28);
+insert into t (id,a) values (284,29);
+insert into t (id,a) values (284,30);
+insert into t (id,a) values (284,31);
+insert into t (id,a) values (284,32);
+insert into t (id,a) values (284,33);
+insert into t (id,a) values (284,34);
+insert into t (id,a) values (284,35);
+insert into t (id,a) values (284,36);
+insert into t (id,a) values (284,37);
+insert into t (id,a) values (284,38);
+insert into t (id,a) values (284,39);
+insert into t (id,a) values (284,40);
+insert into t (id,a) values (284,41);
+insert into t (id,a) values (284,42);
+insert into t (id,a) values (284,43);
+insert into t (id,a) values (284,44);
+insert into t (id,a) values (284,45);
+insert into t (id,a) values (284,46);
+insert into t (id,a) values (284,47);
+insert into t (id,a) values (284,48);
+insert into t (id,a) values (284,49);
+insert into t (id,a) values (284,50);
+insert into t (id,a) values (284,51);
+insert into t (id,a) values (284,52);
+insert into t (id,a) values (284,53);
+insert into t (id,a) values (284,54);
+insert into t (id,a) values (284,55);
+insert into t (id,a) values (284,56);
+insert into t (id,a) values (284,57);
+insert into t (id,a) values (284,58);
+insert into t (id,a) values (284,59);
+insert into t (id,a) values (284,60);
+insert into t (id,a) values (284,61);
+insert into t (id,a) values (284,62);
+insert into t (id,a) values (284,63);
+insert into t (id,a) values (284,64);
+insert into t (id,a) values (284,65);
+insert into t (id,a) values (284,66);
+insert into t (id,a) values (284,67);
+insert into t (id,a) values (284,68);
+insert into t (id,a) values (284,69);
+insert into t (id,a) values (284,70);
+insert into t (id,a) values (284,71);
+insert into t (id,a) values (284,72);
+insert into t (id,a) values (284,73);
+insert into t (id,a) values (284,74);
+insert into t (id,a) values (284,75);
+insert into t (id,a) values (284,76);
+insert into t (id,a) values (284,77);
+insert into t (id,a) values (284,78);
+insert into t (id,a) values (284,79);
+insert into t (id,a) values (284,80);
+insert into t (id,a) values (284,81);
+insert into t (id,a) values (284,82);
+insert into t (id,a) values (284,83);
+insert into t (id,a) values (284,84);
+insert into t (id,a) values (284,85);
+insert into t (id,a) values (284,86);
+insert into t (id,a) values (284,87);
+insert into t (id,a) values (284,88);
+insert into t (id,a) values (284,89);
+insert into t (id,a) values (284,90);
+insert into t (id,a) values (284,91);
+insert into t (id,a) values (284,92);
+insert into t (id,a) values (284,93);
+insert into t (id,a) values (284,94);
+insert into t (id,a) values (284,95);
+insert into t (id,a) values (284,96);
+insert into t (id,a) values (284,97);
+insert into t (id,a) values (284,98);
+insert into t (id,a) values (284,99);
+insert into t (id,a) values (285,0);
+insert into t (id,a) values (285,1);
+insert into t (id,a) values (285,2);
+insert into t (id,a) values (285,3);
+insert into t (id,a) values (285,4);
+insert into t (id,a) values (285,5);
+insert into t (id,a) values (285,6);
+insert into t (id,a) values (285,7);
+insert into t (id,a) values (285,8);
+insert into t (id,a) values (285,9);
+insert into t (id,a) values (285,10);
+insert into t (id,a) values (285,11);
+insert into t (id,a) values (285,12);
+insert into t (id,a) values (285,13);
+insert into t (id,a) values (285,14);
+insert into t (id,a) values (285,15);
+insert into t (id,a) values (285,16);
+insert into t (id,a) values (285,17);
+insert into t (id,a) values (285,18);
+insert into t (id,a) values (285,19);
+insert into t (id,a) values (285,20);
+insert into t (id,a) values (285,21);
+insert into t (id,a) values (285,22);
+insert into t (id,a) values (285,23);
+insert into t (id,a) values (285,24);
+insert into t (id,a) values (285,25);
+insert into t (id,a) values (285,26);
+insert into t (id,a) values (285,27);
+insert into t (id,a) values (285,28);
+insert into t (id,a) values (285,29);
+insert into t (id,a) values (285,30);
+insert into t (id,a) values (285,31);
+insert into t (id,a) values (285,32);
+insert into t (id,a) values (285,33);
+insert into t (id,a) values (285,34);
+insert into t (id,a) values (285,35);
+insert into t (id,a) values (285,36);
+insert into t (id,a) values (285,37);
+insert into t (id,a) values (285,38);
+insert into t (id,a) values (285,39);
+insert into t (id,a) values (285,40);
+insert into t (id,a) values (285,41);
+insert into t (id,a) values (285,42);
+insert into t (id,a) values (285,43);
+insert into t (id,a) values (285,44);
+insert into t (id,a) values (285,45);
+insert into t (id,a) values (285,46);
+insert into t (id,a) values (285,47);
+insert into t (id,a) values (285,48);
+insert into t (id,a) values (285,49);
+insert into t (id,a) values (285,50);
+insert into t (id,a) values (285,51);
+insert into t (id,a) values (285,52);
+insert into t (id,a) values (285,53);
+insert into t (id,a) values (285,54);
+insert into t (id,a) values (285,55);
+insert into t (id,a) values (285,56);
+insert into t (id,a) values (285,57);
+insert into t (id,a) values (285,58);
+insert into t (id,a) values (285,59);
+insert into t (id,a) values (285,60);
+insert into t (id,a) values (285,61);
+insert into t (id,a) values (285,62);
+insert into t (id,a) values (285,63);
+insert into t (id,a) values (285,64);
+insert into t (id,a) values (285,65);
+insert into t (id,a) values (285,66);
+insert into t (id,a) values (285,67);
+insert into t (id,a) values (285,68);
+insert into t (id,a) values (285,69);
+insert into t (id,a) values (285,70);
+insert into t (id,a) values (285,71);
+insert into t (id,a) values (285,72);
+insert into t (id,a) values (285,73);
+insert into t (id,a) values (285,74);
+insert into t (id,a) values (285,75);
+insert into t (id,a) values (285,76);
+insert into t (id,a) values (285,77);
+insert into t (id,a) values (285,78);
+insert into t (id,a) values (285,79);
+insert into t (id,a) values (285,80);
+insert into t (id,a) values (285,81);
+insert into t (id,a) values (285,82);
+insert into t (id,a) values (285,83);
+insert into t (id,a) values (285,84);
+insert into t (id,a) values (285,85);
+insert into t (id,a) values (285,86);
+insert into t (id,a) values (285,87);
+insert into t (id,a) values (285,88);
+insert into t (id,a) values (285,89);
+insert into t (id,a) values (285,90);
+insert into t (id,a) values (285,91);
+insert into t (id,a) values (285,92);
+insert into t (id,a) values (285,93);
+insert into t (id,a) values (285,94);
+insert into t (id,a) values (285,95);
+insert into t (id,a) values (285,96);
+insert into t (id,a) values (285,97);
+insert into t (id,a) values (285,98);
+insert into t (id,a) values (285,99);
+insert into t (id,a) values (286,0);
+insert into t (id,a) values (286,1);
+insert into t (id,a) values (286,2);
+insert into t (id,a) values (286,3);
+insert into t (id,a) values (286,4);
+insert into t (id,a) values (286,5);
+insert into t (id,a) values (286,6);
+insert into t (id,a) values (286,7);
+insert into t (id,a) values (286,8);
+insert into t (id,a) values (286,9);
+insert into t (id,a) values (286,10);
+insert into t (id,a) values (286,11);
+insert into t (id,a) values (286,12);
+insert into t (id,a) values (286,13);
+insert into t (id,a) values (286,14);
+insert into t (id,a) values (286,15);
+insert into t (id,a) values (286,16);
+insert into t (id,a) values (286,17);
+insert into t (id,a) values (286,18);
+insert into t (id,a) values (286,19);
+insert into t (id,a) values (286,20);
+insert into t (id,a) values (286,21);
+insert into t (id,a) values (286,22);
+insert into t (id,a) values (286,23);
+insert into t (id,a) values (286,24);
+insert into t (id,a) values (286,25);
+insert into t (id,a) values (286,26);
+insert into t (id,a) values (286,27);
+insert into t (id,a) values (286,28);
+insert into t (id,a) values (286,29);
+insert into t (id,a) values (286,30);
+insert into t (id,a) values (286,31);
+insert into t (id,a) values (286,32);
+insert into t (id,a) values (286,33);
+insert into t (id,a) values (286,34);
+insert into t (id,a) values (286,35);
+insert into t (id,a) values (286,36);
+insert into t (id,a) values (286,37);
+insert into t (id,a) values (286,38);
+insert into t (id,a) values (286,39);
+insert into t (id,a) values (286,40);
+insert into t (id,a) values (286,41);
+insert into t (id,a) values (286,42);
+insert into t (id,a) values (286,43);
+insert into t (id,a) values (286,44);
+insert into t (id,a) values (286,45);
+insert into t (id,a) values (286,46);
+insert into t (id,a) values (286,47);
+insert into t (id,a) values (286,48);
+insert into t (id,a) values (286,49);
+insert into t (id,a) values (286,50);
+insert into t (id,a) values (286,51);
+insert into t (id,a) values (286,52);
+insert into t (id,a) values (286,53);
+insert into t (id,a) values (286,54);
+insert into t (id,a) values (286,55);
+insert into t (id,a) values (286,56);
+insert into t (id,a) values (286,57);
+insert into t (id,a) values (286,58);
+insert into t (id,a) values (286,59);
+insert into t (id,a) values (286,60);
+insert into t (id,a) values (286,61);
+insert into t (id,a) values (286,62);
+insert into t (id,a) values (286,63);
+insert into t (id,a) values (286,64);
+insert into t (id,a) values (286,65);
+insert into t (id,a) values (286,66);
+insert into t (id,a) values (286,67);
+insert into t (id,a) values (286,68);
+insert into t (id,a) values (286,69);
+insert into t (id,a) values (286,70);
+insert into t (id,a) values (286,71);
+insert into t (id,a) values (286,72);
+insert into t (id,a) values (286,73);
+insert into t (id,a) values (286,74);
+insert into t (id,a) values (286,75);
+insert into t (id,a) values (286,76);
+insert into t (id,a) values (286,77);
+insert into t (id,a) values (286,78);
+insert into t (id,a) values (286,79);
+insert into t (id,a) values (286,80);
+insert into t (id,a) values (286,81);
+insert into t (id,a) values (286,82);
+insert into t (id,a) values (286,83);
+insert into t (id,a) values (286,84);
+insert into t (id,a) values (286,85);
+insert into t (id,a) values (286,86);
+insert into t (id,a) values (286,87);
+insert into t (id,a) values (286,88);
+insert into t (id,a) values (286,89);
+insert into t (id,a) values (286,90);
+insert into t (id,a) values (286,91);
+insert into t (id,a) values (286,92);
+insert into t (id,a) values (286,93);
+insert into t (id,a) values (286,94);
+insert into t (id,a) values (286,95);
+insert into t (id,a) values (286,96);
+insert into t (id,a) values (286,97);
+insert into t (id,a) values (286,98);
+insert into t (id,a) values (286,99);
+insert into t (id,a) values (287,0);
+insert into t (id,a) values (287,1);
+insert into t (id,a) values (287,2);
+insert into t (id,a) values (287,3);
+insert into t (id,a) values (287,4);
+insert into t (id,a) values (287,5);
+insert into t (id,a) values (287,6);
+insert into t (id,a) values (287,7);
+insert into t (id,a) values (287,8);
+insert into t (id,a) values (287,9);
+insert into t (id,a) values (287,10);
+insert into t (id,a) values (287,11);
+insert into t (id,a) values (287,12);
+insert into t (id,a) values (287,13);
+insert into t (id,a) values (287,14);
+insert into t (id,a) values (287,15);
+insert into t (id,a) values (287,16);
+insert into t (id,a) values (287,17);
+insert into t (id,a) values (287,18);
+insert into t (id,a) values (287,19);
+insert into t (id,a) values (287,20);
+insert into t (id,a) values (287,21);
+insert into t (id,a) values (287,22);
+insert into t (id,a) values (287,23);
+insert into t (id,a) values (287,24);
+insert into t (id,a) values (287,25);
+insert into t (id,a) values (287,26);
+insert into t (id,a) values (287,27);
+insert into t (id,a) values (287,28);
+insert into t (id,a) values (287,29);
+insert into t (id,a) values (287,30);
+insert into t (id,a) values (287,31);
+insert into t (id,a) values (287,32);
+insert into t (id,a) values (287,33);
+insert into t (id,a) values (287,34);
+insert into t (id,a) values (287,35);
+insert into t (id,a) values (287,36);
+insert into t (id,a) values (287,37);
+insert into t (id,a) values (287,38);
+insert into t (id,a) values (287,39);
+insert into t (id,a) values (287,40);
+insert into t (id,a) values (287,41);
+insert into t (id,a) values (287,42);
+insert into t (id,a) values (287,43);
+insert into t (id,a) values (287,44);
+insert into t (id,a) values (287,45);
+insert into t (id,a) values (287,46);
+insert into t (id,a) values (287,47);
+insert into t (id,a) values (287,48);
+insert into t (id,a) values (287,49);
+insert into t (id,a) values (287,50);
+insert into t (id,a) values (287,51);
+insert into t (id,a) values (287,52);
+insert into t (id,a) values (287,53);
+insert into t (id,a) values (287,54);
+insert into t (id,a) values (287,55);
+insert into t (id,a) values (287,56);
+insert into t (id,a) values (287,57);
+insert into t (id,a) values (287,58);
+insert into t (id,a) values (287,59);
+insert into t (id,a) values (287,60);
+insert into t (id,a) values (287,61);
+insert into t (id,a) values (287,62);
+insert into t (id,a) values (287,63);
+insert into t (id,a) values (287,64);
+insert into t (id,a) values (287,65);
+insert into t (id,a) values (287,66);
+insert into t (id,a) values (287,67);
+insert into t (id,a) values (287,68);
+insert into t (id,a) values (287,69);
+insert into t (id,a) values (287,70);
+insert into t (id,a) values (287,71);
+insert into t (id,a) values (287,72);
+insert into t (id,a) values (287,73);
+insert into t (id,a) values (287,74);
+insert into t (id,a) values (287,75);
+insert into t (id,a) values (287,76);
+insert into t (id,a) values (287,77);
+insert into t (id,a) values (287,78);
+insert into t (id,a) values (287,79);
+insert into t (id,a) values (287,80);
+insert into t (id,a) values (287,81);
+insert into t (id,a) values (287,82);
+insert into t (id,a) values (287,83);
+insert into t (id,a) values (287,84);
+insert into t (id,a) values (287,85);
+insert into t (id,a) values (287,86);
+insert into t (id,a) values (287,87);
+insert into t (id,a) values (287,88);
+insert into t (id,a) values (287,89);
+insert into t (id,a) values (287,90);
+insert into t (id,a) values (287,91);
+insert into t (id,a) values (287,92);
+insert into t (id,a) values (287,93);
+insert into t (id,a) values (287,94);
+insert into t (id,a) values (287,95);
+insert into t (id,a) values (287,96);
+insert into t (id,a) values (287,97);
+insert into t (id,a) values (287,98);
+insert into t (id,a) values (287,99);
+insert into t (id,a) values (288,0);
+insert into t (id,a) values (288,1);
+insert into t (id,a) values (288,2);
+insert into t (id,a) values (288,3);
+insert into t (id,a) values (288,4);
+insert into t (id,a) values (288,5);
+insert into t (id,a) values (288,6);
+insert into t (id,a) values (288,7);
+insert into t (id,a) values (288,8);
+insert into t (id,a) values (288,9);
+insert into t (id,a) values (288,10);
+insert into t (id,a) values (288,11);
+insert into t (id,a) values (288,12);
+insert into t (id,a) values (288,13);
+insert into t (id,a) values (288,14);
+insert into t (id,a) values (288,15);
+insert into t (id,a) values (288,16);
+insert into t (id,a) values (288,17);
+insert into t (id,a) values (288,18);
+insert into t (id,a) values (288,19);
+insert into t (id,a) values (288,20);
+insert into t (id,a) values (288,21);
+insert into t (id,a) values (288,22);
+insert into t (id,a) values (288,23);
+insert into t (id,a) values (288,24);
+insert into t (id,a) values (288,25);
+insert into t (id,a) values (288,26);
+insert into t (id,a) values (288,27);
+insert into t (id,a) values (288,28);
+insert into t (id,a) values (288,29);
+insert into t (id,a) values (288,30);
+insert into t (id,a) values (288,31);
+insert into t (id,a) values (288,32);
+insert into t (id,a) values (288,33);
+insert into t (id,a) values (288,34);
+insert into t (id,a) values (288,35);
+insert into t (id,a) values (288,36);
+insert into t (id,a) values (288,37);
+insert into t (id,a) values (288,38);
+insert into t (id,a) values (288,39);
+insert into t (id,a) values (288,40);
+insert into t (id,a) values (288,41);
+insert into t (id,a) values (288,42);
+insert into t (id,a) values (288,43);
+insert into t (id,a) values (288,44);
+insert into t (id,a) values (288,45);
+insert into t (id,a) values (288,46);
+insert into t (id,a) values (288,47);
+insert into t (id,a) values (288,48);
+insert into t (id,a) values (288,49);
+insert into t (id,a) values (288,50);
+insert into t (id,a) values (288,51);
+insert into t (id,a) values (288,52);
+insert into t (id,a) values (288,53);
+insert into t (id,a) values (288,54);
+insert into t (id,a) values (288,55);
+insert into t (id,a) values (288,56);
+insert into t (id,a) values (288,57);
+insert into t (id,a) values (288,58);
+insert into t (id,a) values (288,59);
+insert into t (id,a) values (288,60);
+insert into t (id,a) values (288,61);
+insert into t (id,a) values (288,62);
+insert into t (id,a) values (288,63);
+insert into t (id,a) values (288,64);
+insert into t (id,a) values (288,65);
+insert into t (id,a) values (288,66);
+insert into t (id,a) values (288,67);
+insert into t (id,a) values (288,68);
+insert into t (id,a) values (288,69);
+insert into t (id,a) values (288,70);
+insert into t (id,a) values (288,71);
+insert into t (id,a) values (288,72);
+insert into t (id,a) values (288,73);
+insert into t (id,a) values (288,74);
+insert into t (id,a) values (288,75);
+insert into t (id,a) values (288,76);
+insert into t (id,a) values (288,77);
+insert into t (id,a) values (288,78);
+insert into t (id,a) values (288,79);
+insert into t (id,a) values (288,80);
+insert into t (id,a) values (288,81);
+insert into t (id,a) values (288,82);
+insert into t (id,a) values (288,83);
+insert into t (id,a) values (288,84);
+insert into t (id,a) values (288,85);
+insert into t (id,a) values (288,86);
+insert into t (id,a) values (288,87);
+insert into t (id,a) values (288,88);
+insert into t (id,a) values (288,89);
+insert into t (id,a) values (288,90);
+insert into t (id,a) values (288,91);
+insert into t (id,a) values (288,92);
+insert into t (id,a) values (288,93);
+insert into t (id,a) values (288,94);
+insert into t (id,a) values (288,95);
+insert into t (id,a) values (288,96);
+insert into t (id,a) values (288,97);
+insert into t (id,a) values (288,98);
+insert into t (id,a) values (288,99);
+insert into t (id,a) values (289,0);
+insert into t (id,a) values (289,1);
+insert into t (id,a) values (289,2);
+insert into t (id,a) values (289,3);
+insert into t (id,a) values (289,4);
+insert into t (id,a) values (289,5);
+insert into t (id,a) values (289,6);
+insert into t (id,a) values (289,7);
+insert into t (id,a) values (289,8);
+insert into t (id,a) values (289,9);
+insert into t (id,a) values (289,10);
+insert into t (id,a) values (289,11);
+insert into t (id,a) values (289,12);
+insert into t (id,a) values (289,13);
+insert into t (id,a) values (289,14);
+insert into t (id,a) values (289,15);
+insert into t (id,a) values (289,16);
+insert into t (id,a) values (289,17);
+insert into t (id,a) values (289,18);
+insert into t (id,a) values (289,19);
+insert into t (id,a) values (289,20);
+insert into t (id,a) values (289,21);
+insert into t (id,a) values (289,22);
+insert into t (id,a) values (289,23);
+insert into t (id,a) values (289,24);
+insert into t (id,a) values (289,25);
+insert into t (id,a) values (289,26);
+insert into t (id,a) values (289,27);
+insert into t (id,a) values (289,28);
+insert into t (id,a) values (289,29);
+insert into t (id,a) values (289,30);
+insert into t (id,a) values (289,31);
+insert into t (id,a) values (289,32);
+insert into t (id,a) values (289,33);
+insert into t (id,a) values (289,34);
+insert into t (id,a) values (289,35);
+insert into t (id,a) values (289,36);
+insert into t (id,a) values (289,37);
+insert into t (id,a) values (289,38);
+insert into t (id,a) values (289,39);
+insert into t (id,a) values (289,40);
+insert into t (id,a) values (289,41);
+insert into t (id,a) values (289,42);
+insert into t (id,a) values (289,43);
+insert into t (id,a) values (289,44);
+insert into t (id,a) values (289,45);
+insert into t (id,a) values (289,46);
+insert into t (id,a) values (289,47);
+insert into t (id,a) values (289,48);
+insert into t (id,a) values (289,49);
+insert into t (id,a) values (289,50);
+insert into t (id,a) values (289,51);
+insert into t (id,a) values (289,52);
+insert into t (id,a) values (289,53);
+insert into t (id,a) values (289,54);
+insert into t (id,a) values (289,55);
+insert into t (id,a) values (289,56);
+insert into t (id,a) values (289,57);
+insert into t (id,a) values (289,58);
+insert into t (id,a) values (289,59);
+insert into t (id,a) values (289,60);
+insert into t (id,a) values (289,61);
+insert into t (id,a) values (289,62);
+insert into t (id,a) values (289,63);
+insert into t (id,a) values (289,64);
+insert into t (id,a) values (289,65);
+insert into t (id,a) values (289,66);
+insert into t (id,a) values (289,67);
+insert into t (id,a) values (289,68);
+insert into t (id,a) values (289,69);
+insert into t (id,a) values (289,70);
+insert into t (id,a) values (289,71);
+insert into t (id,a) values (289,72);
+insert into t (id,a) values (289,73);
+insert into t (id,a) values (289,74);
+insert into t (id,a) values (289,75);
+insert into t (id,a) values (289,76);
+insert into t (id,a) values (289,77);
+insert into t (id,a) values (289,78);
+insert into t (id,a) values (289,79);
+insert into t (id,a) values (289,80);
+insert into t (id,a) values (289,81);
+insert into t (id,a) values (289,82);
+insert into t (id,a) values (289,83);
+insert into t (id,a) values (289,84);
+insert into t (id,a) values (289,85);
+insert into t (id,a) values (289,86);
+insert into t (id,a) values (289,87);
+insert into t (id,a) values (289,88);
+insert into t (id,a) values (289,89);
+insert into t (id,a) values (289,90);
+insert into t (id,a) values (289,91);
+insert into t (id,a) values (289,92);
+insert into t (id,a) values (289,93);
+insert into t (id,a) values (289,94);
+insert into t (id,a) values (289,95);
+insert into t (id,a) values (289,96);
+insert into t (id,a) values (289,97);
+insert into t (id,a) values (289,98);
+insert into t (id,a) values (289,99);
+insert into t (id,a) values (290,0);
+insert into t (id,a) values (290,1);
+insert into t (id,a) values (290,2);
+insert into t (id,a) values (290,3);
+insert into t (id,a) values (290,4);
+insert into t (id,a) values (290,5);
+insert into t (id,a) values (290,6);
+insert into t (id,a) values (290,7);
+insert into t (id,a) values (290,8);
+insert into t (id,a) values (290,9);
+insert into t (id,a) values (290,10);
+insert into t (id,a) values (290,11);
+insert into t (id,a) values (290,12);
+insert into t (id,a) values (290,13);
+insert into t (id,a) values (290,14);
+insert into t (id,a) values (290,15);
+insert into t (id,a) values (290,16);
+insert into t (id,a) values (290,17);
+insert into t (id,a) values (290,18);
+insert into t (id,a) values (290,19);
+insert into t (id,a) values (290,20);
+insert into t (id,a) values (290,21);
+insert into t (id,a) values (290,22);
+insert into t (id,a) values (290,23);
+insert into t (id,a) values (290,24);
+insert into t (id,a) values (290,25);
+insert into t (id,a) values (290,26);
+insert into t (id,a) values (290,27);
+insert into t (id,a) values (290,28);
+insert into t (id,a) values (290,29);
+insert into t (id,a) values (290,30);
+insert into t (id,a) values (290,31);
+insert into t (id,a) values (290,32);
+insert into t (id,a) values (290,33);
+insert into t (id,a) values (290,34);
+insert into t (id,a) values (290,35);
+insert into t (id,a) values (290,36);
+insert into t (id,a) values (290,37);
+insert into t (id,a) values (290,38);
+insert into t (id,a) values (290,39);
+insert into t (id,a) values (290,40);
+insert into t (id,a) values (290,41);
+insert into t (id,a) values (290,42);
+insert into t (id,a) values (290,43);
+insert into t (id,a) values (290,44);
+insert into t (id,a) values (290,45);
+insert into t (id,a) values (290,46);
+insert into t (id,a) values (290,47);
+insert into t (id,a) values (290,48);
+insert into t (id,a) values (290,49);
+insert into t (id,a) values (290,50);
+insert into t (id,a) values (290,51);
+insert into t (id,a) values (290,52);
+insert into t (id,a) values (290,53);
+insert into t (id,a) values (290,54);
+insert into t (id,a) values (290,55);
+insert into t (id,a) values (290,56);
+insert into t (id,a) values (290,57);
+insert into t (id,a) values (290,58);
+insert into t (id,a) values (290,59);
+insert into t (id,a) values (290,60);
+insert into t (id,a) values (290,61);
+insert into t (id,a) values (290,62);
+insert into t (id,a) values (290,63);
+insert into t (id,a) values (290,64);
+insert into t (id,a) values (290,65);
+insert into t (id,a) values (290,66);
+insert into t (id,a) values (290,67);
+insert into t (id,a) values (290,68);
+insert into t (id,a) values (290,69);
+insert into t (id,a) values (290,70);
+insert into t (id,a) values (290,71);
+insert into t (id,a) values (290,72);
+insert into t (id,a) values (290,73);
+insert into t (id,a) values (290,74);
+insert into t (id,a) values (290,75);
+insert into t (id,a) values (290,76);
+insert into t (id,a) values (290,77);
+insert into t (id,a) values (290,78);
+insert into t (id,a) values (290,79);
+insert into t (id,a) values (290,80);
+insert into t (id,a) values (290,81);
+insert into t (id,a) values (290,82);
+insert into t (id,a) values (290,83);
+insert into t (id,a) values (290,84);
+insert into t (id,a) values (290,85);
+insert into t (id,a) values (290,86);
+insert into t (id,a) values (290,87);
+insert into t (id,a) values (290,88);
+insert into t (id,a) values (290,89);
+insert into t (id,a) values (290,90);
+insert into t (id,a) values (290,91);
+insert into t (id,a) values (290,92);
+insert into t (id,a) values (290,93);
+insert into t (id,a) values (290,94);
+insert into t (id,a) values (290,95);
+insert into t (id,a) values (290,96);
+insert into t (id,a) values (290,97);
+insert into t (id,a) values (290,98);
+insert into t (id,a) values (290,99);
+insert into t (id,a) values (291,0);
+insert into t (id,a) values (291,1);
+insert into t (id,a) values (291,2);
+insert into t (id,a) values (291,3);
+insert into t (id,a) values (291,4);
+insert into t (id,a) values (291,5);
+insert into t (id,a) values (291,6);
+insert into t (id,a) values (291,7);
+insert into t (id,a) values (291,8);
+insert into t (id,a) values (291,9);
+insert into t (id,a) values (291,10);
+insert into t (id,a) values (291,11);
+insert into t (id,a) values (291,12);
+insert into t (id,a) values (291,13);
+insert into t (id,a) values (291,14);
+insert into t (id,a) values (291,15);
+insert into t (id,a) values (291,16);
+insert into t (id,a) values (291,17);
+insert into t (id,a) values (291,18);
+insert into t (id,a) values (291,19);
+insert into t (id,a) values (291,20);
+insert into t (id,a) values (291,21);
+insert into t (id,a) values (291,22);
+insert into t (id,a) values (291,23);
+insert into t (id,a) values (291,24);
+insert into t (id,a) values (291,25);
+insert into t (id,a) values (291,26);
+insert into t (id,a) values (291,27);
+insert into t (id,a) values (291,28);
+insert into t (id,a) values (291,29);
+insert into t (id,a) values (291,30);
+insert into t (id,a) values (291,31);
+insert into t (id,a) values (291,32);
+insert into t (id,a) values (291,33);
+insert into t (id,a) values (291,34);
+insert into t (id,a) values (291,35);
+insert into t (id,a) values (291,36);
+insert into t (id,a) values (291,37);
+insert into t (id,a) values (291,38);
+insert into t (id,a) values (291,39);
+insert into t (id,a) values (291,40);
+insert into t (id,a) values (291,41);
+insert into t (id,a) values (291,42);
+insert into t (id,a) values (291,43);
+insert into t (id,a) values (291,44);
+insert into t (id,a) values (291,45);
+insert into t (id,a) values (291,46);
+insert into t (id,a) values (291,47);
+insert into t (id,a) values (291,48);
+insert into t (id,a) values (291,49);
+insert into t (id,a) values (291,50);
+insert into t (id,a) values (291,51);
+insert into t (id,a) values (291,52);
+insert into t (id,a) values (291,53);
+insert into t (id,a) values (291,54);
+insert into t (id,a) values (291,55);
+insert into t (id,a) values (291,56);
+insert into t (id,a) values (291,57);
+insert into t (id,a) values (291,58);
+insert into t (id,a) values (291,59);
+insert into t (id,a) values (291,60);
+insert into t (id,a) values (291,61);
+insert into t (id,a) values (291,62);
+insert into t (id,a) values (291,63);
+insert into t (id,a) values (291,64);
+insert into t (id,a) values (291,65);
+insert into t (id,a) values (291,66);
+insert into t (id,a) values (291,67);
+insert into t (id,a) values (291,68);
+insert into t (id,a) values (291,69);
+insert into t (id,a) values (291,70);
+insert into t (id,a) values (291,71);
+insert into t (id,a) values (291,72);
+insert into t (id,a) values (291,73);
+insert into t (id,a) values (291,74);
+insert into t (id,a) values (291,75);
+insert into t (id,a) values (291,76);
+insert into t (id,a) values (291,77);
+insert into t (id,a) values (291,78);
+insert into t (id,a) values (291,79);
+insert into t (id,a) values (291,80);
+insert into t (id,a) values (291,81);
+insert into t (id,a) values (291,82);
+insert into t (id,a) values (291,83);
+insert into t (id,a) values (291,84);
+insert into t (id,a) values (291,85);
+insert into t (id,a) values (291,86);
+insert into t (id,a) values (291,87);
+insert into t (id,a) values (291,88);
+insert into t (id,a) values (291,89);
+insert into t (id,a) values (291,90);
+insert into t (id,a) values (291,91);
+insert into t (id,a) values (291,92);
+insert into t (id,a) values (291,93);
+insert into t (id,a) values (291,94);
+insert into t (id,a) values (291,95);
+insert into t (id,a) values (291,96);
+insert into t (id,a) values (291,97);
+insert into t (id,a) values (291,98);
+insert into t (id,a) values (291,99);
+insert into t (id,a) values (292,0);
+insert into t (id,a) values (292,1);
+insert into t (id,a) values (292,2);
+insert into t (id,a) values (292,3);
+insert into t (id,a) values (292,4);
+insert into t (id,a) values (292,5);
+insert into t (id,a) values (292,6);
+insert into t (id,a) values (292,7);
+insert into t (id,a) values (292,8);
+insert into t (id,a) values (292,9);
+insert into t (id,a) values (292,10);
+insert into t (id,a) values (292,11);
+insert into t (id,a) values (292,12);
+insert into t (id,a) values (292,13);
+insert into t (id,a) values (292,14);
+insert into t (id,a) values (292,15);
+insert into t (id,a) values (292,16);
+insert into t (id,a) values (292,17);
+insert into t (id,a) values (292,18);
+insert into t (id,a) values (292,19);
+insert into t (id,a) values (292,20);
+insert into t (id,a) values (292,21);
+insert into t (id,a) values (292,22);
+insert into t (id,a) values (292,23);
+insert into t (id,a) values (292,24);
+insert into t (id,a) values (292,25);
+insert into t (id,a) values (292,26);
+insert into t (id,a) values (292,27);
+insert into t (id,a) values (292,28);
+insert into t (id,a) values (292,29);
+insert into t (id,a) values (292,30);
+insert into t (id,a) values (292,31);
+insert into t (id,a) values (292,32);
+insert into t (id,a) values (292,33);
+insert into t (id,a) values (292,34);
+insert into t (id,a) values (292,35);
+insert into t (id,a) values (292,36);
+insert into t (id,a) values (292,37);
+insert into t (id,a) values (292,38);
+insert into t (id,a) values (292,39);
+insert into t (id,a) values (292,40);
+insert into t (id,a) values (292,41);
+insert into t (id,a) values (292,42);
+insert into t (id,a) values (292,43);
+insert into t (id,a) values (292,44);
+insert into t (id,a) values (292,45);
+insert into t (id,a) values (292,46);
+insert into t (id,a) values (292,47);
+insert into t (id,a) values (292,48);
+insert into t (id,a) values (292,49);
+insert into t (id,a) values (292,50);
+insert into t (id,a) values (292,51);
+insert into t (id,a) values (292,52);
+insert into t (id,a) values (292,53);
+insert into t (id,a) values (292,54);
+insert into t (id,a) values (292,55);
+insert into t (id,a) values (292,56);
+insert into t (id,a) values (292,57);
+insert into t (id,a) values (292,58);
+insert into t (id,a) values (292,59);
+insert into t (id,a) values (292,60);
+insert into t (id,a) values (292,61);
+insert into t (id,a) values (292,62);
+insert into t (id,a) values (292,63);
+insert into t (id,a) values (292,64);
+insert into t (id,a) values (292,65);
+insert into t (id,a) values (292,66);
+insert into t (id,a) values (292,67);
+insert into t (id,a) values (292,68);
+insert into t (id,a) values (292,69);
+insert into t (id,a) values (292,70);
+insert into t (id,a) values (292,71);
+insert into t (id,a) values (292,72);
+insert into t (id,a) values (292,73);
+insert into t (id,a) values (292,74);
+insert into t (id,a) values (292,75);
+insert into t (id,a) values (292,76);
+insert into t (id,a) values (292,77);
+insert into t (id,a) values (292,78);
+insert into t (id,a) values (292,79);
+insert into t (id,a) values (292,80);
+insert into t (id,a) values (292,81);
+insert into t (id,a) values (292,82);
+insert into t (id,a) values (292,83);
+insert into t (id,a) values (292,84);
+insert into t (id,a) values (292,85);
+insert into t (id,a) values (292,86);
+insert into t (id,a) values (292,87);
+insert into t (id,a) values (292,88);
+insert into t (id,a) values (292,89);
+insert into t (id,a) values (292,90);
+insert into t (id,a) values (292,91);
+insert into t (id,a) values (292,92);
+insert into t (id,a) values (292,93);
+insert into t (id,a) values (292,94);
+insert into t (id,a) values (292,95);
+insert into t (id,a) values (292,96);
+insert into t (id,a) values (292,97);
+insert into t (id,a) values (292,98);
+insert into t (id,a) values (292,99);
+insert into t (id,a) values (293,0);
+insert into t (id,a) values (293,1);
+insert into t (id,a) values (293,2);
+insert into t (id,a) values (293,3);
+insert into t (id,a) values (293,4);
+insert into t (id,a) values (293,5);
+insert into t (id,a) values (293,6);
+insert into t (id,a) values (293,7);
+insert into t (id,a) values (293,8);
+insert into t (id,a) values (293,9);
+insert into t (id,a) values (293,10);
+insert into t (id,a) values (293,11);
+insert into t (id,a) values (293,12);
+insert into t (id,a) values (293,13);
+insert into t (id,a) values (293,14);
+insert into t (id,a) values (293,15);
+insert into t (id,a) values (293,16);
+insert into t (id,a) values (293,17);
+insert into t (id,a) values (293,18);
+insert into t (id,a) values (293,19);
+insert into t (id,a) values (293,20);
+insert into t (id,a) values (293,21);
+insert into t (id,a) values (293,22);
+insert into t (id,a) values (293,23);
+insert into t (id,a) values (293,24);
+insert into t (id,a) values (293,25);
+insert into t (id,a) values (293,26);
+insert into t (id,a) values (293,27);
+insert into t (id,a) values (293,28);
+insert into t (id,a) values (293,29);
+insert into t (id,a) values (293,30);
+insert into t (id,a) values (293,31);
+insert into t (id,a) values (293,32);
+insert into t (id,a) values (293,33);
+insert into t (id,a) values (293,34);
+insert into t (id,a) values (293,35);
+insert into t (id,a) values (293,36);
+insert into t (id,a) values (293,37);
+insert into t (id,a) values (293,38);
+insert into t (id,a) values (293,39);
+insert into t (id,a) values (293,40);
+insert into t (id,a) values (293,41);
+insert into t (id,a) values (293,42);
+insert into t (id,a) values (293,43);
+insert into t (id,a) values (293,44);
+insert into t (id,a) values (293,45);
+insert into t (id,a) values (293,46);
+insert into t (id,a) values (293,47);
+insert into t (id,a) values (293,48);
+insert into t (id,a) values (293,49);
+insert into t (id,a) values (293,50);
+insert into t (id,a) values (293,51);
+insert into t (id,a) values (293,52);
+insert into t (id,a) values (293,53);
+insert into t (id,a) values (293,54);
+insert into t (id,a) values (293,55);
+insert into t (id,a) values (293,56);
+insert into t (id,a) values (293,57);
+insert into t (id,a) values (293,58);
+insert into t (id,a) values (293,59);
+insert into t (id,a) values (293,60);
+insert into t (id,a) values (293,61);
+insert into t (id,a) values (293,62);
+insert into t (id,a) values (293,63);
+insert into t (id,a) values (293,64);
+insert into t (id,a) values (293,65);
+insert into t (id,a) values (293,66);
+insert into t (id,a) values (293,67);
+insert into t (id,a) values (293,68);
+insert into t (id,a) values (293,69);
+insert into t (id,a) values (293,70);
+insert into t (id,a) values (293,71);
+insert into t (id,a) values (293,72);
+insert into t (id,a) values (293,73);
+insert into t (id,a) values (293,74);
+insert into t (id,a) values (293,75);
+insert into t (id,a) values (293,76);
+insert into t (id,a) values (293,77);
+insert into t (id,a) values (293,78);
+insert into t (id,a) values (293,79);
+insert into t (id,a) values (293,80);
+insert into t (id,a) values (293,81);
+insert into t (id,a) values (293,82);
+insert into t (id,a) values (293,83);
+insert into t (id,a) values (293,84);
+insert into t (id,a) values (293,85);
+insert into t (id,a) values (293,86);
+insert into t (id,a) values (293,87);
+insert into t (id,a) values (293,88);
+insert into t (id,a) values (293,89);
+insert into t (id,a) values (293,90);
+insert into t (id,a) values (293,91);
+insert into t (id,a) values (293,92);
+insert into t (id,a) values (293,93);
+insert into t (id,a) values (293,94);
+insert into t (id,a) values (293,95);
+insert into t (id,a) values (293,96);
+insert into t (id,a) values (293,97);
+insert into t (id,a) values (293,98);
+insert into t (id,a) values (293,99);
+insert into t (id,a) values (294,0);
+insert into t (id,a) values (294,1);
+insert into t (id,a) values (294,2);
+insert into t (id,a) values (294,3);
+insert into t (id,a) values (294,4);
+insert into t (id,a) values (294,5);
+insert into t (id,a) values (294,6);
+insert into t (id,a) values (294,7);
+insert into t (id,a) values (294,8);
+insert into t (id,a) values (294,9);
+insert into t (id,a) values (294,10);
+insert into t (id,a) values (294,11);
+insert into t (id,a) values (294,12);
+insert into t (id,a) values (294,13);
+insert into t (id,a) values (294,14);
+insert into t (id,a) values (294,15);
+insert into t (id,a) values (294,16);
+insert into t (id,a) values (294,17);
+insert into t (id,a) values (294,18);
+insert into t (id,a) values (294,19);
+insert into t (id,a) values (294,20);
+insert into t (id,a) values (294,21);
+insert into t (id,a) values (294,22);
+insert into t (id,a) values (294,23);
+insert into t (id,a) values (294,24);
+insert into t (id,a) values (294,25);
+insert into t (id,a) values (294,26);
+insert into t (id,a) values (294,27);
+insert into t (id,a) values (294,28);
+insert into t (id,a) values (294,29);
+insert into t (id,a) values (294,30);
+insert into t (id,a) values (294,31);
+insert into t (id,a) values (294,32);
+insert into t (id,a) values (294,33);
+insert into t (id,a) values (294,34);
+insert into t (id,a) values (294,35);
+insert into t (id,a) values (294,36);
+insert into t (id,a) values (294,37);
+insert into t (id,a) values (294,38);
+insert into t (id,a) values (294,39);
+insert into t (id,a) values (294,40);
+insert into t (id,a) values (294,41);
+insert into t (id,a) values (294,42);
+insert into t (id,a) values (294,43);
+insert into t (id,a) values (294,44);
+insert into t (id,a) values (294,45);
+insert into t (id,a) values (294,46);
+insert into t (id,a) values (294,47);
+insert into t (id,a) values (294,48);
+insert into t (id,a) values (294,49);
+insert into t (id,a) values (294,50);
+insert into t (id,a) values (294,51);
+insert into t (id,a) values (294,52);
+insert into t (id,a) values (294,53);
+insert into t (id,a) values (294,54);
+insert into t (id,a) values (294,55);
+insert into t (id,a) values (294,56);
+insert into t (id,a) values (294,57);
+insert into t (id,a) values (294,58);
+insert into t (id,a) values (294,59);
+insert into t (id,a) values (294,60);
+insert into t (id,a) values (294,61);
+insert into t (id,a) values (294,62);
+insert into t (id,a) values (294,63);
+insert into t (id,a) values (294,64);
+insert into t (id,a) values (294,65);
+insert into t (id,a) values (294,66);
+insert into t (id,a) values (294,67);
+insert into t (id,a) values (294,68);
+insert into t (id,a) values (294,69);
+insert into t (id,a) values (294,70);
+insert into t (id,a) values (294,71);
+insert into t (id,a) values (294,72);
+insert into t (id,a) values (294,73);
+insert into t (id,a) values (294,74);
+insert into t (id,a) values (294,75);
+insert into t (id,a) values (294,76);
+insert into t (id,a) values (294,77);
+insert into t (id,a) values (294,78);
+insert into t (id,a) values (294,79);
+insert into t (id,a) values (294,80);
+insert into t (id,a) values (294,81);
+insert into t (id,a) values (294,82);
+insert into t (id,a) values (294,83);
+insert into t (id,a) values (294,84);
+insert into t (id,a) values (294,85);
+insert into t (id,a) values (294,86);
+insert into t (id,a) values (294,87);
+insert into t (id,a) values (294,88);
+insert into t (id,a) values (294,89);
+insert into t (id,a) values (294,90);
+insert into t (id,a) values (294,91);
+insert into t (id,a) values (294,92);
+insert into t (id,a) values (294,93);
+insert into t (id,a) values (294,94);
+insert into t (id,a) values (294,95);
+insert into t (id,a) values (294,96);
+insert into t (id,a) values (294,97);
+insert into t (id,a) values (294,98);
+insert into t (id,a) values (294,99);
+insert into t (id,a) values (295,0);
+insert into t (id,a) values (295,1);
+insert into t (id,a) values (295,2);
+insert into t (id,a) values (295,3);
+insert into t (id,a) values (295,4);
+insert into t (id,a) values (295,5);
+insert into t (id,a) values (295,6);
+insert into t (id,a) values (295,7);
+insert into t (id,a) values (295,8);
+insert into t (id,a) values (295,9);
+insert into t (id,a) values (295,10);
+insert into t (id,a) values (295,11);
+insert into t (id,a) values (295,12);
+insert into t (id,a) values (295,13);
+insert into t (id,a) values (295,14);
+insert into t (id,a) values (295,15);
+insert into t (id,a) values (295,16);
+insert into t (id,a) values (295,17);
+insert into t (id,a) values (295,18);
+insert into t (id,a) values (295,19);
+insert into t (id,a) values (295,20);
+insert into t (id,a) values (295,21);
+insert into t (id,a) values (295,22);
+insert into t (id,a) values (295,23);
+insert into t (id,a) values (295,24);
+insert into t (id,a) values (295,25);
+insert into t (id,a) values (295,26);
+insert into t (id,a) values (295,27);
+insert into t (id,a) values (295,28);
+insert into t (id,a) values (295,29);
+insert into t (id,a) values (295,30);
+insert into t (id,a) values (295,31);
+insert into t (id,a) values (295,32);
+insert into t (id,a) values (295,33);
+insert into t (id,a) values (295,34);
+insert into t (id,a) values (295,35);
+insert into t (id,a) values (295,36);
+insert into t (id,a) values (295,37);
+insert into t (id,a) values (295,38);
+insert into t (id,a) values (295,39);
+insert into t (id,a) values (295,40);
+insert into t (id,a) values (295,41);
+insert into t (id,a) values (295,42);
+insert into t (id,a) values (295,43);
+insert into t (id,a) values (295,44);
+insert into t (id,a) values (295,45);
+insert into t (id,a) values (295,46);
+insert into t (id,a) values (295,47);
+insert into t (id,a) values (295,48);
+insert into t (id,a) values (295,49);
+insert into t (id,a) values (295,50);
+insert into t (id,a) values (295,51);
+insert into t (id,a) values (295,52);
+insert into t (id,a) values (295,53);
+insert into t (id,a) values (295,54);
+insert into t (id,a) values (295,55);
+insert into t (id,a) values (295,56);
+insert into t (id,a) values (295,57);
+insert into t (id,a) values (295,58);
+insert into t (id,a) values (295,59);
+insert into t (id,a) values (295,60);
+insert into t (id,a) values (295,61);
+insert into t (id,a) values (295,62);
+insert into t (id,a) values (295,63);
+insert into t (id,a) values (295,64);
+insert into t (id,a) values (295,65);
+insert into t (id,a) values (295,66);
+insert into t (id,a) values (295,67);
+insert into t (id,a) values (295,68);
+insert into t (id,a) values (295,69);
+insert into t (id,a) values (295,70);
+insert into t (id,a) values (295,71);
+insert into t (id,a) values (295,72);
+insert into t (id,a) values (295,73);
+insert into t (id,a) values (295,74);
+insert into t (id,a) values (295,75);
+insert into t (id,a) values (295,76);
+insert into t (id,a) values (295,77);
+insert into t (id,a) values (295,78);
+insert into t (id,a) values (295,79);
+insert into t (id,a) values (295,80);
+insert into t (id,a) values (295,81);
+insert into t (id,a) values (295,82);
+insert into t (id,a) values (295,83);
+insert into t (id,a) values (295,84);
+insert into t (id,a) values (295,85);
+insert into t (id,a) values (295,86);
+insert into t (id,a) values (295,87);
+insert into t (id,a) values (295,88);
+insert into t (id,a) values (295,89);
+insert into t (id,a) values (295,90);
+insert into t (id,a) values (295,91);
+insert into t (id,a) values (295,92);
+insert into t (id,a) values (295,93);
+insert into t (id,a) values (295,94);
+insert into t (id,a) values (295,95);
+insert into t (id,a) values (295,96);
+insert into t (id,a) values (295,97);
+insert into t (id,a) values (295,98);
+insert into t (id,a) values (295,99);
+insert into t (id,a) values (296,0);
+insert into t (id,a) values (296,1);
+insert into t (id,a) values (296,2);
+insert into t (id,a) values (296,3);
+insert into t (id,a) values (296,4);
+insert into t (id,a) values (296,5);
+insert into t (id,a) values (296,6);
+insert into t (id,a) values (296,7);
+insert into t (id,a) values (296,8);
+insert into t (id,a) values (296,9);
+insert into t (id,a) values (296,10);
+insert into t (id,a) values (296,11);
+insert into t (id,a) values (296,12);
+insert into t (id,a) values (296,13);
+insert into t (id,a) values (296,14);
+insert into t (id,a) values (296,15);
+insert into t (id,a) values (296,16);
+insert into t (id,a) values (296,17);
+insert into t (id,a) values (296,18);
+insert into t (id,a) values (296,19);
+insert into t (id,a) values (296,20);
+insert into t (id,a) values (296,21);
+insert into t (id,a) values (296,22);
+insert into t (id,a) values (296,23);
+insert into t (id,a) values (296,24);
+insert into t (id,a) values (296,25);
+insert into t (id,a) values (296,26);
+insert into t (id,a) values (296,27);
+insert into t (id,a) values (296,28);
+insert into t (id,a) values (296,29);
+insert into t (id,a) values (296,30);
+insert into t (id,a) values (296,31);
+insert into t (id,a) values (296,32);
+insert into t (id,a) values (296,33);
+insert into t (id,a) values (296,34);
+insert into t (id,a) values (296,35);
+insert into t (id,a) values (296,36);
+insert into t (id,a) values (296,37);
+insert into t (id,a) values (296,38);
+insert into t (id,a) values (296,39);
+insert into t (id,a) values (296,40);
+insert into t (id,a) values (296,41);
+insert into t (id,a) values (296,42);
+insert into t (id,a) values (296,43);
+insert into t (id,a) values (296,44);
+insert into t (id,a) values (296,45);
+insert into t (id,a) values (296,46);
+insert into t (id,a) values (296,47);
+insert into t (id,a) values (296,48);
+insert into t (id,a) values (296,49);
+insert into t (id,a) values (296,50);
+insert into t (id,a) values (296,51);
+insert into t (id,a) values (296,52);
+insert into t (id,a) values (296,53);
+insert into t (id,a) values (296,54);
+insert into t (id,a) values (296,55);
+insert into t (id,a) values (296,56);
+insert into t (id,a) values (296,57);
+insert into t (id,a) values (296,58);
+insert into t (id,a) values (296,59);
+insert into t (id,a) values (296,60);
+insert into t (id,a) values (296,61);
+insert into t (id,a) values (296,62);
+insert into t (id,a) values (296,63);
+insert into t (id,a) values (296,64);
+insert into t (id,a) values (296,65);
+insert into t (id,a) values (296,66);
+insert into t (id,a) values (296,67);
+insert into t (id,a) values (296,68);
+insert into t (id,a) values (296,69);
+insert into t (id,a) values (296,70);
+insert into t (id,a) values (296,71);
+insert into t (id,a) values (296,72);
+insert into t (id,a) values (296,73);
+insert into t (id,a) values (296,74);
+insert into t (id,a) values (296,75);
+insert into t (id,a) values (296,76);
+insert into t (id,a) values (296,77);
+insert into t (id,a) values (296,78);
+insert into t (id,a) values (296,79);
+insert into t (id,a) values (296,80);
+insert into t (id,a) values (296,81);
+insert into t (id,a) values (296,82);
+insert into t (id,a) values (296,83);
+insert into t (id,a) values (296,84);
+insert into t (id,a) values (296,85);
+insert into t (id,a) values (296,86);
+insert into t (id,a) values (296,87);
+insert into t (id,a) values (296,88);
+insert into t (id,a) values (296,89);
+insert into t (id,a) values (296,90);
+insert into t (id,a) values (296,91);
+insert into t (id,a) values (296,92);
+insert into t (id,a) values (296,93);
+insert into t (id,a) values (296,94);
+insert into t (id,a) values (296,95);
+insert into t (id,a) values (296,96);
+insert into t (id,a) values (296,97);
+insert into t (id,a) values (296,98);
+insert into t (id,a) values (296,99);
+insert into t (id,a) values (297,0);
+insert into t (id,a) values (297,1);
+insert into t (id,a) values (297,2);
+insert into t (id,a) values (297,3);
+insert into t (id,a) values (297,4);
+insert into t (id,a) values (297,5);
+insert into t (id,a) values (297,6);
+insert into t (id,a) values (297,7);
+insert into t (id,a) values (297,8);
+insert into t (id,a) values (297,9);
+insert into t (id,a) values (297,10);
+insert into t (id,a) values (297,11);
+insert into t (id,a) values (297,12);
+insert into t (id,a) values (297,13);
+insert into t (id,a) values (297,14);
+insert into t (id,a) values (297,15);
+insert into t (id,a) values (297,16);
+insert into t (id,a) values (297,17);
+insert into t (id,a) values (297,18);
+insert into t (id,a) values (297,19);
+insert into t (id,a) values (297,20);
+insert into t (id,a) values (297,21);
+insert into t (id,a) values (297,22);
+insert into t (id,a) values (297,23);
+insert into t (id,a) values (297,24);
+insert into t (id,a) values (297,25);
+insert into t (id,a) values (297,26);
+insert into t (id,a) values (297,27);
+insert into t (id,a) values (297,28);
+insert into t (id,a) values (297,29);
+insert into t (id,a) values (297,30);
+insert into t (id,a) values (297,31);
+insert into t (id,a) values (297,32);
+insert into t (id,a) values (297,33);
+insert into t (id,a) values (297,34);
+insert into t (id,a) values (297,35);
+insert into t (id,a) values (297,36);
+insert into t (id,a) values (297,37);
+insert into t (id,a) values (297,38);
+insert into t (id,a) values (297,39);
+insert into t (id,a) values (297,40);
+insert into t (id,a) values (297,41);
+insert into t (id,a) values (297,42);
+insert into t (id,a) values (297,43);
+insert into t (id,a) values (297,44);
+insert into t (id,a) values (297,45);
+insert into t (id,a) values (297,46);
+insert into t (id,a) values (297,47);
+insert into t (id,a) values (297,48);
+insert into t (id,a) values (297,49);
+insert into t (id,a) values (297,50);
+insert into t (id,a) values (297,51);
+insert into t (id,a) values (297,52);
+insert into t (id,a) values (297,53);
+insert into t (id,a) values (297,54);
+insert into t (id,a) values (297,55);
+insert into t (id,a) values (297,56);
+insert into t (id,a) values (297,57);
+insert into t (id,a) values (297,58);
+insert into t (id,a) values (297,59);
+insert into t (id,a) values (297,60);
+insert into t (id,a) values (297,61);
+insert into t (id,a) values (297,62);
+insert into t (id,a) values (297,63);
+insert into t (id,a) values (297,64);
+insert into t (id,a) values (297,65);
+insert into t (id,a) values (297,66);
+insert into t (id,a) values (297,67);
+insert into t (id,a) values (297,68);
+insert into t (id,a) values (297,69);
+insert into t (id,a) values (297,70);
+insert into t (id,a) values (297,71);
+insert into t (id,a) values (297,72);
+insert into t (id,a) values (297,73);
+insert into t (id,a) values (297,74);
+insert into t (id,a) values (297,75);
+insert into t (id,a) values (297,76);
+insert into t (id,a) values (297,77);
+insert into t (id,a) values (297,78);
+insert into t (id,a) values (297,79);
+insert into t (id,a) values (297,80);
+insert into t (id,a) values (297,81);
+insert into t (id,a) values (297,82);
+insert into t (id,a) values (297,83);
+insert into t (id,a) values (297,84);
+insert into t (id,a) values (297,85);
+insert into t (id,a) values (297,86);
+insert into t (id,a) values (297,87);
+insert into t (id,a) values (297,88);
+insert into t (id,a) values (297,89);
+insert into t (id,a) values (297,90);
+insert into t (id,a) values (297,91);
+insert into t (id,a) values (297,92);
+insert into t (id,a) values (297,93);
+insert into t (id,a) values (297,94);
+insert into t (id,a) values (297,95);
+insert into t (id,a) values (297,96);
+insert into t (id,a) values (297,97);
+insert into t (id,a) values (297,98);
+insert into t (id,a) values (297,99);
+insert into t (id,a) values (298,0);
+insert into t (id,a) values (298,1);
+insert into t (id,a) values (298,2);
+insert into t (id,a) values (298,3);
+insert into t (id,a) values (298,4);
+insert into t (id,a) values (298,5);
+insert into t (id,a) values (298,6);
+insert into t (id,a) values (298,7);
+insert into t (id,a) values (298,8);
+insert into t (id,a) values (298,9);
+insert into t (id,a) values (298,10);
+insert into t (id,a) values (298,11);
+insert into t (id,a) values (298,12);
+insert into t (id,a) values (298,13);
+insert into t (id,a) values (298,14);
+insert into t (id,a) values (298,15);
+insert into t (id,a) values (298,16);
+insert into t (id,a) values (298,17);
+insert into t (id,a) values (298,18);
+insert into t (id,a) values (298,19);
+insert into t (id,a) values (298,20);
+insert into t (id,a) values (298,21);
+insert into t (id,a) values (298,22);
+insert into t (id,a) values (298,23);
+insert into t (id,a) values (298,24);
+insert into t (id,a) values (298,25);
+insert into t (id,a) values (298,26);
+insert into t (id,a) values (298,27);
+insert into t (id,a) values (298,28);
+insert into t (id,a) values (298,29);
+insert into t (id,a) values (298,30);
+insert into t (id,a) values (298,31);
+insert into t (id,a) values (298,32);
+insert into t (id,a) values (298,33);
+insert into t (id,a) values (298,34);
+insert into t (id,a) values (298,35);
+insert into t (id,a) values (298,36);
+insert into t (id,a) values (298,37);
+insert into t (id,a) values (298,38);
+insert into t (id,a) values (298,39);
+insert into t (id,a) values (298,40);
+insert into t (id,a) values (298,41);
+insert into t (id,a) values (298,42);
+insert into t (id,a) values (298,43);
+insert into t (id,a) values (298,44);
+insert into t (id,a) values (298,45);
+insert into t (id,a) values (298,46);
+insert into t (id,a) values (298,47);
+insert into t (id,a) values (298,48);
+insert into t (id,a) values (298,49);
+insert into t (id,a) values (298,50);
+insert into t (id,a) values (298,51);
+insert into t (id,a) values (298,52);
+insert into t (id,a) values (298,53);
+insert into t (id,a) values (298,54);
+insert into t (id,a) values (298,55);
+insert into t (id,a) values (298,56);
+insert into t (id,a) values (298,57);
+insert into t (id,a) values (298,58);
+insert into t (id,a) values (298,59);
+insert into t (id,a) values (298,60);
+insert into t (id,a) values (298,61);
+insert into t (id,a) values (298,62);
+insert into t (id,a) values (298,63);
+insert into t (id,a) values (298,64);
+insert into t (id,a) values (298,65);
+insert into t (id,a) values (298,66);
+insert into t (id,a) values (298,67);
+insert into t (id,a) values (298,68);
+insert into t (id,a) values (298,69);
+insert into t (id,a) values (298,70);
+insert into t (id,a) values (298,71);
+insert into t (id,a) values (298,72);
+insert into t (id,a) values (298,73);
+insert into t (id,a) values (298,74);
+insert into t (id,a) values (298,75);
+insert into t (id,a) values (298,76);
+insert into t (id,a) values (298,77);
+insert into t (id,a) values (298,78);
+insert into t (id,a) values (298,79);
+insert into t (id,a) values (298,80);
+insert into t (id,a) values (298,81);
+insert into t (id,a) values (298,82);
+insert into t (id,a) values (298,83);
+insert into t (id,a) values (298,84);
+insert into t (id,a) values (298,85);
+insert into t (id,a) values (298,86);
+insert into t (id,a) values (298,87);
+insert into t (id,a) values (298,88);
+insert into t (id,a) values (298,89);
+insert into t (id,a) values (298,90);
+insert into t (id,a) values (298,91);
+insert into t (id,a) values (298,92);
+insert into t (id,a) values (298,93);
+insert into t (id,a) values (298,94);
+insert into t (id,a) values (298,95);
+insert into t (id,a) values (298,96);
+insert into t (id,a) values (298,97);
+insert into t (id,a) values (298,98);
+insert into t (id,a) values (298,99);
+insert into t (id,a) values (299,0);
+insert into t (id,a) values (299,1);
+insert into t (id,a) values (299,2);
+insert into t (id,a) values (299,3);
+insert into t (id,a) values (299,4);
+insert into t (id,a) values (299,5);
+insert into t (id,a) values (299,6);
+insert into t (id,a) values (299,7);
+insert into t (id,a) values (299,8);
+insert into t (id,a) values (299,9);
+insert into t (id,a) values (299,10);
+insert into t (id,a) values (299,11);
+insert into t (id,a) values (299,12);
+insert into t (id,a) values (299,13);
+insert into t (id,a) values (299,14);
+insert into t (id,a) values (299,15);
+insert into t (id,a) values (299,16);
+insert into t (id,a) values (299,17);
+insert into t (id,a) values (299,18);
+insert into t (id,a) values (299,19);
+insert into t (id,a) values (299,20);
+insert into t (id,a) values (299,21);
+insert into t (id,a) values (299,22);
+insert into t (id,a) values (299,23);
+insert into t (id,a) values (299,24);
+insert into t (id,a) values (299,25);
+insert into t (id,a) values (299,26);
+insert into t (id,a) values (299,27);
+insert into t (id,a) values (299,28);
+insert into t (id,a) values (299,29);
+insert into t (id,a) values (299,30);
+insert into t (id,a) values (299,31);
+insert into t (id,a) values (299,32);
+insert into t (id,a) values (299,33);
+insert into t (id,a) values (299,34);
+insert into t (id,a) values (299,35);
+insert into t (id,a) values (299,36);
+insert into t (id,a) values (299,37);
+insert into t (id,a) values (299,38);
+insert into t (id,a) values (299,39);
+insert into t (id,a) values (299,40);
+insert into t (id,a) values (299,41);
+insert into t (id,a) values (299,42);
+insert into t (id,a) values (299,43);
+insert into t (id,a) values (299,44);
+insert into t (id,a) values (299,45);
+insert into t (id,a) values (299,46);
+insert into t (id,a) values (299,47);
+insert into t (id,a) values (299,48);
+insert into t (id,a) values (299,49);
+insert into t (id,a) values (299,50);
+insert into t (id,a) values (299,51);
+insert into t (id,a) values (299,52);
+insert into t (id,a) values (299,53);
+insert into t (id,a) values (299,54);
+insert into t (id,a) values (299,55);
+insert into t (id,a) values (299,56);
+insert into t (id,a) values (299,57);
+insert into t (id,a) values (299,58);
+insert into t (id,a) values (299,59);
+insert into t (id,a) values (299,60);
+insert into t (id,a) values (299,61);
+insert into t (id,a) values (299,62);
+insert into t (id,a) values (299,63);
+insert into t (id,a) values (299,64);
+insert into t (id,a) values (299,65);
+insert into t (id,a) values (299,66);
+insert into t (id,a) values (299,67);
+insert into t (id,a) values (299,68);
+insert into t (id,a) values (299,69);
+insert into t (id,a) values (299,70);
+insert into t (id,a) values (299,71);
+insert into t (id,a) values (299,72);
+insert into t (id,a) values (299,73);
+insert into t (id,a) values (299,74);
+insert into t (id,a) values (299,75);
+insert into t (id,a) values (299,76);
+insert into t (id,a) values (299,77);
+insert into t (id,a) values (299,78);
+insert into t (id,a) values (299,79);
+insert into t (id,a) values (299,80);
+insert into t (id,a) values (299,81);
+insert into t (id,a) values (299,82);
+insert into t (id,a) values (299,83);
+insert into t (id,a) values (299,84);
+insert into t (id,a) values (299,85);
+insert into t (id,a) values (299,86);
+insert into t (id,a) values (299,87);
+insert into t (id,a) values (299,88);
+insert into t (id,a) values (299,89);
+insert into t (id,a) values (299,90);
+insert into t (id,a) values (299,91);
+insert into t (id,a) values (299,92);
+insert into t (id,a) values (299,93);
+insert into t (id,a) values (299,94);
+insert into t (id,a) values (299,95);
+insert into t (id,a) values (299,96);
+insert into t (id,a) values (299,97);
+insert into t (id,a) values (299,98);
+insert into t (id,a) values (299,99);
+insert into t (id,a) values (300,0);
+insert into t (id,a) values (300,1);
+insert into t (id,a) values (300,2);
+insert into t (id,a) values (300,3);
+insert into t (id,a) values (300,4);
+insert into t (id,a) values (300,5);
+insert into t (id,a) values (300,6);
+insert into t (id,a) values (300,7);
+insert into t (id,a) values (300,8);
+insert into t (id,a) values (300,9);
+insert into t (id,a) values (300,10);
+insert into t (id,a) values (300,11);
+insert into t (id,a) values (300,12);
+insert into t (id,a) values (300,13);
+insert into t (id,a) values (300,14);
+insert into t (id,a) values (300,15);
+insert into t (id,a) values (300,16);
+insert into t (id,a) values (300,17);
+insert into t (id,a) values (300,18);
+insert into t (id,a) values (300,19);
+insert into t (id,a) values (300,20);
+insert into t (id,a) values (300,21);
+insert into t (id,a) values (300,22);
+insert into t (id,a) values (300,23);
+insert into t (id,a) values (300,24);
+insert into t (id,a) values (300,25);
+insert into t (id,a) values (300,26);
+insert into t (id,a) values (300,27);
+insert into t (id,a) values (300,28);
+insert into t (id,a) values (300,29);
+insert into t (id,a) values (300,30);
+insert into t (id,a) values (300,31);
+insert into t (id,a) values (300,32);
+insert into t (id,a) values (300,33);
+insert into t (id,a) values (300,34);
+insert into t (id,a) values (300,35);
+insert into t (id,a) values (300,36);
+insert into t (id,a) values (300,37);
+insert into t (id,a) values (300,38);
+insert into t (id,a) values (300,39);
+insert into t (id,a) values (300,40);
+insert into t (id,a) values (300,41);
+insert into t (id,a) values (300,42);
+insert into t (id,a) values (300,43);
+insert into t (id,a) values (300,44);
+insert into t (id,a) values (300,45);
+insert into t (id,a) values (300,46);
+insert into t (id,a) values (300,47);
+insert into t (id,a) values (300,48);
+insert into t (id,a) values (300,49);
+insert into t (id,a) values (300,50);
+insert into t (id,a) values (300,51);
+insert into t (id,a) values (300,52);
+insert into t (id,a) values (300,53);
+insert into t (id,a) values (300,54);
+insert into t (id,a) values (300,55);
+insert into t (id,a) values (300,56);
+insert into t (id,a) values (300,57);
+insert into t (id,a) values (300,58);
+insert into t (id,a) values (300,59);
+insert into t (id,a) values (300,60);
+insert into t (id,a) values (300,61);
+insert into t (id,a) values (300,62);
+insert into t (id,a) values (300,63);
+insert into t (id,a) values (300,64);
+insert into t (id,a) values (300,65);
+insert into t (id,a) values (300,66);
+insert into t (id,a) values (300,67);
+insert into t (id,a) values (300,68);
+insert into t (id,a) values (300,69);
+insert into t (id,a) values (300,70);
+insert into t (id,a) values (300,71);
+insert into t (id,a) values (300,72);
+insert into t (id,a) values (300,73);
+insert into t (id,a) values (300,74);
+insert into t (id,a) values (300,75);
+insert into t (id,a) values (300,76);
+insert into t (id,a) values (300,77);
+insert into t (id,a) values (300,78);
+insert into t (id,a) values (300,79);
+insert into t (id,a) values (300,80);
+insert into t (id,a) values (300,81);
+insert into t (id,a) values (300,82);
+insert into t (id,a) values (300,83);
+insert into t (id,a) values (300,84);
+insert into t (id,a) values (300,85);
+insert into t (id,a) values (300,86);
+insert into t (id,a) values (300,87);
+insert into t (id,a) values (300,88);
+insert into t (id,a) values (300,89);
+insert into t (id,a) values (300,90);
+insert into t (id,a) values (300,91);
+insert into t (id,a) values (300,92);
+insert into t (id,a) values (300,93);
+insert into t (id,a) values (300,94);
+insert into t (id,a) values (300,95);
+insert into t (id,a) values (300,96);
+insert into t (id,a) values (300,97);
+insert into t (id,a) values (300,98);
+insert into t (id,a) values (300,99);
+insert into t (id,a) values (301,0);
+insert into t (id,a) values (301,1);
+insert into t (id,a) values (301,2);
+insert into t (id,a) values (301,3);
+insert into t (id,a) values (301,4);
+insert into t (id,a) values (301,5);
+insert into t (id,a) values (301,6);
+insert into t (id,a) values (301,7);
+insert into t (id,a) values (301,8);
+insert into t (id,a) values (301,9);
+insert into t (id,a) values (301,10);
+insert into t (id,a) values (301,11);
+insert into t (id,a) values (301,12);
+insert into t (id,a) values (301,13);
+insert into t (id,a) values (301,14);
+insert into t (id,a) values (301,15);
+insert into t (id,a) values (301,16);
+insert into t (id,a) values (301,17);
+insert into t (id,a) values (301,18);
+insert into t (id,a) values (301,19);
+insert into t (id,a) values (301,20);
+insert into t (id,a) values (301,21);
+insert into t (id,a) values (301,22);
+insert into t (id,a) values (301,23);
+insert into t (id,a) values (301,24);
+insert into t (id,a) values (301,25);
+insert into t (id,a) values (301,26);
+insert into t (id,a) values (301,27);
+insert into t (id,a) values (301,28);
+insert into t (id,a) values (301,29);
+insert into t (id,a) values (301,30);
+insert into t (id,a) values (301,31);
+insert into t (id,a) values (301,32);
+insert into t (id,a) values (301,33);
+insert into t (id,a) values (301,34);
+insert into t (id,a) values (301,35);
+insert into t (id,a) values (301,36);
+insert into t (id,a) values (301,37);
+insert into t (id,a) values (301,38);
+insert into t (id,a) values (301,39);
+insert into t (id,a) values (301,40);
+insert into t (id,a) values (301,41);
+insert into t (id,a) values (301,42);
+insert into t (id,a) values (301,43);
+insert into t (id,a) values (301,44);
+insert into t (id,a) values (301,45);
+insert into t (id,a) values (301,46);
+insert into t (id,a) values (301,47);
+insert into t (id,a) values (301,48);
+insert into t (id,a) values (301,49);
+insert into t (id,a) values (301,50);
+insert into t (id,a) values (301,51);
+insert into t (id,a) values (301,52);
+insert into t (id,a) values (301,53);
+insert into t (id,a) values (301,54);
+insert into t (id,a) values (301,55);
+insert into t (id,a) values (301,56);
+insert into t (id,a) values (301,57);
+insert into t (id,a) values (301,58);
+insert into t (id,a) values (301,59);
+insert into t (id,a) values (301,60);
+insert into t (id,a) values (301,61);
+insert into t (id,a) values (301,62);
+insert into t (id,a) values (301,63);
+insert into t (id,a) values (301,64);
+insert into t (id,a) values (301,65);
+insert into t (id,a) values (301,66);
+insert into t (id,a) values (301,67);
+insert into t (id,a) values (301,68);
+insert into t (id,a) values (301,69);
+insert into t (id,a) values (301,70);
+insert into t (id,a) values (301,71);
+insert into t (id,a) values (301,72);
+insert into t (id,a) values (301,73);
+insert into t (id,a) values (301,74);
+insert into t (id,a) values (301,75);
+insert into t (id,a) values (301,76);
+insert into t (id,a) values (301,77);
+insert into t (id,a) values (301,78);
+insert into t (id,a) values (301,79);
+insert into t (id,a) values (301,80);
+insert into t (id,a) values (301,81);
+insert into t (id,a) values (301,82);
+insert into t (id,a) values (301,83);
+insert into t (id,a) values (301,84);
+insert into t (id,a) values (301,85);
+insert into t (id,a) values (301,86);
+insert into t (id,a) values (301,87);
+insert into t (id,a) values (301,88);
+insert into t (id,a) values (301,89);
+insert into t (id,a) values (301,90);
+insert into t (id,a) values (301,91);
+insert into t (id,a) values (301,92);
+insert into t (id,a) values (301,93);
+insert into t (id,a) values (301,94);
+insert into t (id,a) values (301,95);
+insert into t (id,a) values (301,96);
+insert into t (id,a) values (301,97);
+insert into t (id,a) values (301,98);
+insert into t (id,a) values (301,99);
+insert into t (id,a) values (302,0);
+insert into t (id,a) values (302,1);
+insert into t (id,a) values (302,2);
+insert into t (id,a) values (302,3);
+insert into t (id,a) values (302,4);
+insert into t (id,a) values (302,5);
+insert into t (id,a) values (302,6);
+insert into t (id,a) values (302,7);
+insert into t (id,a) values (302,8);
+insert into t (id,a) values (302,9);
+insert into t (id,a) values (302,10);
+insert into t (id,a) values (302,11);
+insert into t (id,a) values (302,12);
+insert into t (id,a) values (302,13);
+insert into t (id,a) values (302,14);
+insert into t (id,a) values (302,15);
+insert into t (id,a) values (302,16);
+insert into t (id,a) values (302,17);
+insert into t (id,a) values (302,18);
+insert into t (id,a) values (302,19);
+insert into t (id,a) values (302,20);
+insert into t (id,a) values (302,21);
+insert into t (id,a) values (302,22);
+insert into t (id,a) values (302,23);
+insert into t (id,a) values (302,24);
+insert into t (id,a) values (302,25);
+insert into t (id,a) values (302,26);
+insert into t (id,a) values (302,27);
+insert into t (id,a) values (302,28);
+insert into t (id,a) values (302,29);
+insert into t (id,a) values (302,30);
+insert into t (id,a) values (302,31);
+insert into t (id,a) values (302,32);
+insert into t (id,a) values (302,33);
+insert into t (id,a) values (302,34);
+insert into t (id,a) values (302,35);
+insert into t (id,a) values (302,36);
+insert into t (id,a) values (302,37);
+insert into t (id,a) values (302,38);
+insert into t (id,a) values (302,39);
+insert into t (id,a) values (302,40);
+insert into t (id,a) values (302,41);
+insert into t (id,a) values (302,42);
+insert into t (id,a) values (302,43);
+insert into t (id,a) values (302,44);
+insert into t (id,a) values (302,45);
+insert into t (id,a) values (302,46);
+insert into t (id,a) values (302,47);
+insert into t (id,a) values (302,48);
+insert into t (id,a) values (302,49);
+insert into t (id,a) values (302,50);
+insert into t (id,a) values (302,51);
+insert into t (id,a) values (302,52);
+insert into t (id,a) values (302,53);
+insert into t (id,a) values (302,54);
+insert into t (id,a) values (302,55);
+insert into t (id,a) values (302,56);
+insert into t (id,a) values (302,57);
+insert into t (id,a) values (302,58);
+insert into t (id,a) values (302,59);
+insert into t (id,a) values (302,60);
+insert into t (id,a) values (302,61);
+insert into t (id,a) values (302,62);
+insert into t (id,a) values (302,63);
+insert into t (id,a) values (302,64);
+insert into t (id,a) values (302,65);
+insert into t (id,a) values (302,66);
+insert into t (id,a) values (302,67);
+insert into t (id,a) values (302,68);
+insert into t (id,a) values (302,69);
+insert into t (id,a) values (302,70);
+insert into t (id,a) values (302,71);
+insert into t (id,a) values (302,72);
+insert into t (id,a) values (302,73);
+insert into t (id,a) values (302,74);
+insert into t (id,a) values (302,75);
+insert into t (id,a) values (302,76);
+insert into t (id,a) values (302,77);
+insert into t (id,a) values (302,78);
+insert into t (id,a) values (302,79);
+insert into t (id,a) values (302,80);
+insert into t (id,a) values (302,81);
+insert into t (id,a) values (302,82);
+insert into t (id,a) values (302,83);
+insert into t (id,a) values (302,84);
+insert into t (id,a) values (302,85);
+insert into t (id,a) values (302,86);
+insert into t (id,a) values (302,87);
+insert into t (id,a) values (302,88);
+insert into t (id,a) values (302,89);
+insert into t (id,a) values (302,90);
+insert into t (id,a) values (302,91);
+insert into t (id,a) values (302,92);
+insert into t (id,a) values (302,93);
+insert into t (id,a) values (302,94);
+insert into t (id,a) values (302,95);
+insert into t (id,a) values (302,96);
+insert into t (id,a) values (302,97);
+insert into t (id,a) values (302,98);
+insert into t (id,a) values (302,99);
+insert into t (id,a) values (303,0);
+insert into t (id,a) values (303,1);
+insert into t (id,a) values (303,2);
+insert into t (id,a) values (303,3);
+insert into t (id,a) values (303,4);
+insert into t (id,a) values (303,5);
+insert into t (id,a) values (303,6);
+insert into t (id,a) values (303,7);
+insert into t (id,a) values (303,8);
+insert into t (id,a) values (303,9);
+insert into t (id,a) values (303,10);
+insert into t (id,a) values (303,11);
+insert into t (id,a) values (303,12);
+insert into t (id,a) values (303,13);
+insert into t (id,a) values (303,14);
+insert into t (id,a) values (303,15);
+insert into t (id,a) values (303,16);
+insert into t (id,a) values (303,17);
+insert into t (id,a) values (303,18);
+insert into t (id,a) values (303,19);
+insert into t (id,a) values (303,20);
+insert into t (id,a) values (303,21);
+insert into t (id,a) values (303,22);
+insert into t (id,a) values (303,23);
+insert into t (id,a) values (303,24);
+insert into t (id,a) values (303,25);
+insert into t (id,a) values (303,26);
+insert into t (id,a) values (303,27);
+insert into t (id,a) values (303,28);
+insert into t (id,a) values (303,29);
+insert into t (id,a) values (303,30);
+insert into t (id,a) values (303,31);
+insert into t (id,a) values (303,32);
+insert into t (id,a) values (303,33);
+insert into t (id,a) values (303,34);
+insert into t (id,a) values (303,35);
+insert into t (id,a) values (303,36);
+insert into t (id,a) values (303,37);
+insert into t (id,a) values (303,38);
+insert into t (id,a) values (303,39);
+insert into t (id,a) values (303,40);
+insert into t (id,a) values (303,41);
+insert into t (id,a) values (303,42);
+insert into t (id,a) values (303,43);
+insert into t (id,a) values (303,44);
+insert into t (id,a) values (303,45);
+insert into t (id,a) values (303,46);
+insert into t (id,a) values (303,47);
+insert into t (id,a) values (303,48);
+insert into t (id,a) values (303,49);
+insert into t (id,a) values (303,50);
+insert into t (id,a) values (303,51);
+insert into t (id,a) values (303,52);
+insert into t (id,a) values (303,53);
+insert into t (id,a) values (303,54);
+insert into t (id,a) values (303,55);
+insert into t (id,a) values (303,56);
+insert into t (id,a) values (303,57);
+insert into t (id,a) values (303,58);
+insert into t (id,a) values (303,59);
+insert into t (id,a) values (303,60);
+insert into t (id,a) values (303,61);
+insert into t (id,a) values (303,62);
+insert into t (id,a) values (303,63);
+insert into t (id,a) values (303,64);
+insert into t (id,a) values (303,65);
+insert into t (id,a) values (303,66);
+insert into t (id,a) values (303,67);
+insert into t (id,a) values (303,68);
+insert into t (id,a) values (303,69);
+insert into t (id,a) values (303,70);
+insert into t (id,a) values (303,71);
+insert into t (id,a) values (303,72);
+insert into t (id,a) values (303,73);
+insert into t (id,a) values (303,74);
+insert into t (id,a) values (303,75);
+insert into t (id,a) values (303,76);
+insert into t (id,a) values (303,77);
+insert into t (id,a) values (303,78);
+insert into t (id,a) values (303,79);
+insert into t (id,a) values (303,80);
+insert into t (id,a) values (303,81);
+insert into t (id,a) values (303,82);
+insert into t (id,a) values (303,83);
+insert into t (id,a) values (303,84);
+insert into t (id,a) values (303,85);
+insert into t (id,a) values (303,86);
+insert into t (id,a) values (303,87);
+insert into t (id,a) values (303,88);
+insert into t (id,a) values (303,89);
+insert into t (id,a) values (303,90);
+insert into t (id,a) values (303,91);
+insert into t (id,a) values (303,92);
+insert into t (id,a) values (303,93);
+insert into t (id,a) values (303,94);
+insert into t (id,a) values (303,95);
+insert into t (id,a) values (303,96);
+insert into t (id,a) values (303,97);
+insert into t (id,a) values (303,98);
+insert into t (id,a) values (303,99);
+insert into t (id,a) values (304,0);
+insert into t (id,a) values (304,1);
+insert into t (id,a) values (304,2);
+insert into t (id,a) values (304,3);
+insert into t (id,a) values (304,4);
+insert into t (id,a) values (304,5);
+insert into t (id,a) values (304,6);
+insert into t (id,a) values (304,7);
+insert into t (id,a) values (304,8);
+insert into t (id,a) values (304,9);
+insert into t (id,a) values (304,10);
+insert into t (id,a) values (304,11);
+insert into t (id,a) values (304,12);
+insert into t (id,a) values (304,13);
+insert into t (id,a) values (304,14);
+insert into t (id,a) values (304,15);
+insert into t (id,a) values (304,16);
+insert into t (id,a) values (304,17);
+insert into t (id,a) values (304,18);
+insert into t (id,a) values (304,19);
+insert into t (id,a) values (304,20);
+insert into t (id,a) values (304,21);
+insert into t (id,a) values (304,22);
+insert into t (id,a) values (304,23);
+insert into t (id,a) values (304,24);
+insert into t (id,a) values (304,25);
+insert into t (id,a) values (304,26);
+insert into t (id,a) values (304,27);
+insert into t (id,a) values (304,28);
+insert into t (id,a) values (304,29);
+insert into t (id,a) values (304,30);
+insert into t (id,a) values (304,31);
+insert into t (id,a) values (304,32);
+insert into t (id,a) values (304,33);
+insert into t (id,a) values (304,34);
+insert into t (id,a) values (304,35);
+insert into t (id,a) values (304,36);
+insert into t (id,a) values (304,37);
+insert into t (id,a) values (304,38);
+insert into t (id,a) values (304,39);
+insert into t (id,a) values (304,40);
+insert into t (id,a) values (304,41);
+insert into t (id,a) values (304,42);
+insert into t (id,a) values (304,43);
+insert into t (id,a) values (304,44);
+insert into t (id,a) values (304,45);
+insert into t (id,a) values (304,46);
+insert into t (id,a) values (304,47);
+insert into t (id,a) values (304,48);
+insert into t (id,a) values (304,49);
+insert into t (id,a) values (304,50);
+insert into t (id,a) values (304,51);
+insert into t (id,a) values (304,52);
+insert into t (id,a) values (304,53);
+insert into t (id,a) values (304,54);
+insert into t (id,a) values (304,55);
+insert into t (id,a) values (304,56);
+insert into t (id,a) values (304,57);
+insert into t (id,a) values (304,58);
+insert into t (id,a) values (304,59);
+insert into t (id,a) values (304,60);
+insert into t (id,a) values (304,61);
+insert into t (id,a) values (304,62);
+insert into t (id,a) values (304,63);
+insert into t (id,a) values (304,64);
+insert into t (id,a) values (304,65);
+insert into t (id,a) values (304,66);
+insert into t (id,a) values (304,67);
+insert into t (id,a) values (304,68);
+insert into t (id,a) values (304,69);
+insert into t (id,a) values (304,70);
+insert into t (id,a) values (304,71);
+insert into t (id,a) values (304,72);
+insert into t (id,a) values (304,73);
+insert into t (id,a) values (304,74);
+insert into t (id,a) values (304,75);
+insert into t (id,a) values (304,76);
+insert into t (id,a) values (304,77);
+insert into t (id,a) values (304,78);
+insert into t (id,a) values (304,79);
+insert into t (id,a) values (304,80);
+insert into t (id,a) values (304,81);
+insert into t (id,a) values (304,82);
+insert into t (id,a) values (304,83);
+insert into t (id,a) values (304,84);
+insert into t (id,a) values (304,85);
+insert into t (id,a) values (304,86);
+insert into t (id,a) values (304,87);
+insert into t (id,a) values (304,88);
+insert into t (id,a) values (304,89);
+insert into t (id,a) values (304,90);
+insert into t (id,a) values (304,91);
+insert into t (id,a) values (304,92);
+insert into t (id,a) values (304,93);
+insert into t (id,a) values (304,94);
+insert into t (id,a) values (304,95);
+insert into t (id,a) values (304,96);
+insert into t (id,a) values (304,97);
+insert into t (id,a) values (304,98);
+insert into t (id,a) values (304,99);
+insert into t (id,a) values (305,0);
+insert into t (id,a) values (305,1);
+insert into t (id,a) values (305,2);
+insert into t (id,a) values (305,3);
+insert into t (id,a) values (305,4);
+insert into t (id,a) values (305,5);
+insert into t (id,a) values (305,6);
+insert into t (id,a) values (305,7);
+insert into t (id,a) values (305,8);
+insert into t (id,a) values (305,9);
+insert into t (id,a) values (305,10);
+insert into t (id,a) values (305,11);
+insert into t (id,a) values (305,12);
+insert into t (id,a) values (305,13);
+insert into t (id,a) values (305,14);
+insert into t (id,a) values (305,15);
+insert into t (id,a) values (305,16);
+insert into t (id,a) values (305,17);
+insert into t (id,a) values (305,18);
+insert into t (id,a) values (305,19);
+insert into t (id,a) values (305,20);
+insert into t (id,a) values (305,21);
+insert into t (id,a) values (305,22);
+insert into t (id,a) values (305,23);
+insert into t (id,a) values (305,24);
+insert into t (id,a) values (305,25);
+insert into t (id,a) values (305,26);
+insert into t (id,a) values (305,27);
+insert into t (id,a) values (305,28);
+insert into t (id,a) values (305,29);
+insert into t (id,a) values (305,30);
+insert into t (id,a) values (305,31);
+insert into t (id,a) values (305,32);
+insert into t (id,a) values (305,33);
+insert into t (id,a) values (305,34);
+insert into t (id,a) values (305,35);
+insert into t (id,a) values (305,36);
+insert into t (id,a) values (305,37);
+insert into t (id,a) values (305,38);
+insert into t (id,a) values (305,39);
+insert into t (id,a) values (305,40);
+insert into t (id,a) values (305,41);
+insert into t (id,a) values (305,42);
+insert into t (id,a) values (305,43);
+insert into t (id,a) values (305,44);
+insert into t (id,a) values (305,45);
+insert into t (id,a) values (305,46);
+insert into t (id,a) values (305,47);
+insert into t (id,a) values (305,48);
+insert into t (id,a) values (305,49);
+insert into t (id,a) values (305,50);
+insert into t (id,a) values (305,51);
+insert into t (id,a) values (305,52);
+insert into t (id,a) values (305,53);
+insert into t (id,a) values (305,54);
+insert into t (id,a) values (305,55);
+insert into t (id,a) values (305,56);
+insert into t (id,a) values (305,57);
+insert into t (id,a) values (305,58);
+insert into t (id,a) values (305,59);
+insert into t (id,a) values (305,60);
+insert into t (id,a) values (305,61);
+insert into t (id,a) values (305,62);
+insert into t (id,a) values (305,63);
+insert into t (id,a) values (305,64);
+insert into t (id,a) values (305,65);
+insert into t (id,a) values (305,66);
+insert into t (id,a) values (305,67);
+insert into t (id,a) values (305,68);
+insert into t (id,a) values (305,69);
+insert into t (id,a) values (305,70);
+insert into t (id,a) values (305,71);
+insert into t (id,a) values (305,72);
+insert into t (id,a) values (305,73);
+insert into t (id,a) values (305,74);
+insert into t (id,a) values (305,75);
+insert into t (id,a) values (305,76);
+insert into t (id,a) values (305,77);
+insert into t (id,a) values (305,78);
+insert into t (id,a) values (305,79);
+insert into t (id,a) values (305,80);
+insert into t (id,a) values (305,81);
+insert into t (id,a) values (305,82);
+insert into t (id,a) values (305,83);
+insert into t (id,a) values (305,84);
+insert into t (id,a) values (305,85);
+insert into t (id,a) values (305,86);
+insert into t (id,a) values (305,87);
+insert into t (id,a) values (305,88);
+insert into t (id,a) values (305,89);
+insert into t (id,a) values (305,90);
+insert into t (id,a) values (305,91);
+insert into t (id,a) values (305,92);
+insert into t (id,a) values (305,93);
+insert into t (id,a) values (305,94);
+insert into t (id,a) values (305,95);
+insert into t (id,a) values (305,96);
+insert into t (id,a) values (305,97);
+insert into t (id,a) values (305,98);
+insert into t (id,a) values (305,99);
+insert into t (id,a) values (306,0);
+insert into t (id,a) values (306,1);
+insert into t (id,a) values (306,2);
+insert into t (id,a) values (306,3);
+insert into t (id,a) values (306,4);
+insert into t (id,a) values (306,5);
+insert into t (id,a) values (306,6);
+insert into t (id,a) values (306,7);
+insert into t (id,a) values (306,8);
+insert into t (id,a) values (306,9);
+insert into t (id,a) values (306,10);
+insert into t (id,a) values (306,11);
+insert into t (id,a) values (306,12);
+insert into t (id,a) values (306,13);
+insert into t (id,a) values (306,14);
+insert into t (id,a) values (306,15);
+insert into t (id,a) values (306,16);
+insert into t (id,a) values (306,17);
+insert into t (id,a) values (306,18);
+insert into t (id,a) values (306,19);
+insert into t (id,a) values (306,20);
+insert into t (id,a) values (306,21);
+insert into t (id,a) values (306,22);
+insert into t (id,a) values (306,23);
+insert into t (id,a) values (306,24);
+insert into t (id,a) values (306,25);
+insert into t (id,a) values (306,26);
+insert into t (id,a) values (306,27);
+insert into t (id,a) values (306,28);
+insert into t (id,a) values (306,29);
+insert into t (id,a) values (306,30);
+insert into t (id,a) values (306,31);
+insert into t (id,a) values (306,32);
+insert into t (id,a) values (306,33);
+insert into t (id,a) values (306,34);
+insert into t (id,a) values (306,35);
+insert into t (id,a) values (306,36);
+insert into t (id,a) values (306,37);
+insert into t (id,a) values (306,38);
+insert into t (id,a) values (306,39);
+insert into t (id,a) values (306,40);
+insert into t (id,a) values (306,41);
+insert into t (id,a) values (306,42);
+insert into t (id,a) values (306,43);
+insert into t (id,a) values (306,44);
+insert into t (id,a) values (306,45);
+insert into t (id,a) values (306,46);
+insert into t (id,a) values (306,47);
+insert into t (id,a) values (306,48);
+insert into t (id,a) values (306,49);
+insert into t (id,a) values (306,50);
+insert into t (id,a) values (306,51);
+insert into t (id,a) values (306,52);
+insert into t (id,a) values (306,53);
+insert into t (id,a) values (306,54);
+insert into t (id,a) values (306,55);
+insert into t (id,a) values (306,56);
+insert into t (id,a) values (306,57);
+insert into t (id,a) values (306,58);
+insert into t (id,a) values (306,59);
+insert into t (id,a) values (306,60);
+insert into t (id,a) values (306,61);
+insert into t (id,a) values (306,62);
+insert into t (id,a) values (306,63);
+insert into t (id,a) values (306,64);
+insert into t (id,a) values (306,65);
+insert into t (id,a) values (306,66);
+insert into t (id,a) values (306,67);
+insert into t (id,a) values (306,68);
+insert into t (id,a) values (306,69);
+insert into t (id,a) values (306,70);
+insert into t (id,a) values (306,71);
+insert into t (id,a) values (306,72);
+insert into t (id,a) values (306,73);
+insert into t (id,a) values (306,74);
+insert into t (id,a) values (306,75);
+insert into t (id,a) values (306,76);
+insert into t (id,a) values (306,77);
+insert into t (id,a) values (306,78);
+insert into t (id,a) values (306,79);
+insert into t (id,a) values (306,80);
+insert into t (id,a) values (306,81);
+insert into t (id,a) values (306,82);
+insert into t (id,a) values (306,83);
+insert into t (id,a) values (306,84);
+insert into t (id,a) values (306,85);
+insert into t (id,a) values (306,86);
+insert into t (id,a) values (306,87);
+insert into t (id,a) values (306,88);
+insert into t (id,a) values (306,89);
+insert into t (id,a) values (306,90);
+insert into t (id,a) values (306,91);
+insert into t (id,a) values (306,92);
+insert into t (id,a) values (306,93);
+insert into t (id,a) values (306,94);
+insert into t (id,a) values (306,95);
+insert into t (id,a) values (306,96);
+insert into t (id,a) values (306,97);
+insert into t (id,a) values (306,98);
+insert into t (id,a) values (306,99);
+insert into t (id,a) values (307,0);
+insert into t (id,a) values (307,1);
+insert into t (id,a) values (307,2);
+insert into t (id,a) values (307,3);
+insert into t (id,a) values (307,4);
+insert into t (id,a) values (307,5);
+insert into t (id,a) values (307,6);
+insert into t (id,a) values (307,7);
+insert into t (id,a) values (307,8);
+insert into t (id,a) values (307,9);
+insert into t (id,a) values (307,10);
+insert into t (id,a) values (307,11);
+insert into t (id,a) values (307,12);
+insert into t (id,a) values (307,13);
+insert into t (id,a) values (307,14);
+insert into t (id,a) values (307,15);
+insert into t (id,a) values (307,16);
+insert into t (id,a) values (307,17);
+insert into t (id,a) values (307,18);
+insert into t (id,a) values (307,19);
+insert into t (id,a) values (307,20);
+insert into t (id,a) values (307,21);
+insert into t (id,a) values (307,22);
+insert into t (id,a) values (307,23);
+insert into t (id,a) values (307,24);
+insert into t (id,a) values (307,25);
+insert into t (id,a) values (307,26);
+insert into t (id,a) values (307,27);
+insert into t (id,a) values (307,28);
+insert into t (id,a) values (307,29);
+insert into t (id,a) values (307,30);
+insert into t (id,a) values (307,31);
+insert into t (id,a) values (307,32);
+insert into t (id,a) values (307,33);
+insert into t (id,a) values (307,34);
+insert into t (id,a) values (307,35);
+insert into t (id,a) values (307,36);
+insert into t (id,a) values (307,37);
+insert into t (id,a) values (307,38);
+insert into t (id,a) values (307,39);
+insert into t (id,a) values (307,40);
+insert into t (id,a) values (307,41);
+insert into t (id,a) values (307,42);
+insert into t (id,a) values (307,43);
+insert into t (id,a) values (307,44);
+insert into t (id,a) values (307,45);
+insert into t (id,a) values (307,46);
+insert into t (id,a) values (307,47);
+insert into t (id,a) values (307,48);
+insert into t (id,a) values (307,49);
+insert into t (id,a) values (307,50);
+insert into t (id,a) values (307,51);
+insert into t (id,a) values (307,52);
+insert into t (id,a) values (307,53);
+insert into t (id,a) values (307,54);
+insert into t (id,a) values (307,55);
+insert into t (id,a) values (307,56);
+insert into t (id,a) values (307,57);
+insert into t (id,a) values (307,58);
+insert into t (id,a) values (307,59);
+insert into t (id,a) values (307,60);
+insert into t (id,a) values (307,61);
+insert into t (id,a) values (307,62);
+insert into t (id,a) values (307,63);
+insert into t (id,a) values (307,64);
+insert into t (id,a) values (307,65);
+insert into t (id,a) values (307,66);
+insert into t (id,a) values (307,67);
+insert into t (id,a) values (307,68);
+insert into t (id,a) values (307,69);
+insert into t (id,a) values (307,70);
+insert into t (id,a) values (307,71);
+insert into t (id,a) values (307,72);
+insert into t (id,a) values (307,73);
+insert into t (id,a) values (307,74);
+insert into t (id,a) values (307,75);
+insert into t (id,a) values (307,76);
+insert into t (id,a) values (307,77);
+insert into t (id,a) values (307,78);
+insert into t (id,a) values (307,79);
+insert into t (id,a) values (307,80);
+insert into t (id,a) values (307,81);
+insert into t (id,a) values (307,82);
+insert into t (id,a) values (307,83);
+insert into t (id,a) values (307,84);
+insert into t (id,a) values (307,85);
+insert into t (id,a) values (307,86);
+insert into t (id,a) values (307,87);
+insert into t (id,a) values (307,88);
+insert into t (id,a) values (307,89);
+insert into t (id,a) values (307,90);
+insert into t (id,a) values (307,91);
+insert into t (id,a) values (307,92);
+insert into t (id,a) values (307,93);
+insert into t (id,a) values (307,94);
+insert into t (id,a) values (307,95);
+insert into t (id,a) values (307,96);
+insert into t (id,a) values (307,97);
+insert into t (id,a) values (307,98);
+insert into t (id,a) values (307,99);
+insert into t (id,a) values (308,0);
+insert into t (id,a) values (308,1);
+insert into t (id,a) values (308,2);
+insert into t (id,a) values (308,3);
+insert into t (id,a) values (308,4);
+insert into t (id,a) values (308,5);
+insert into t (id,a) values (308,6);
+insert into t (id,a) values (308,7);
+insert into t (id,a) values (308,8);
+insert into t (id,a) values (308,9);
+insert into t (id,a) values (308,10);
+insert into t (id,a) values (308,11);
+insert into t (id,a) values (308,12);
+insert into t (id,a) values (308,13);
+insert into t (id,a) values (308,14);
+insert into t (id,a) values (308,15);
+insert into t (id,a) values (308,16);
+insert into t (id,a) values (308,17);
+insert into t (id,a) values (308,18);
+insert into t (id,a) values (308,19);
+insert into t (id,a) values (308,20);
+insert into t (id,a) values (308,21);
+insert into t (id,a) values (308,22);
+insert into t (id,a) values (308,23);
+insert into t (id,a) values (308,24);
+insert into t (id,a) values (308,25);
+insert into t (id,a) values (308,26);
+insert into t (id,a) values (308,27);
+insert into t (id,a) values (308,28);
+insert into t (id,a) values (308,29);
+insert into t (id,a) values (308,30);
+insert into t (id,a) values (308,31);
+insert into t (id,a) values (308,32);
+insert into t (id,a) values (308,33);
+insert into t (id,a) values (308,34);
+insert into t (id,a) values (308,35);
+insert into t (id,a) values (308,36);
+insert into t (id,a) values (308,37);
+insert into t (id,a) values (308,38);
+insert into t (id,a) values (308,39);
+insert into t (id,a) values (308,40);
+insert into t (id,a) values (308,41);
+insert into t (id,a) values (308,42);
+insert into t (id,a) values (308,43);
+insert into t (id,a) values (308,44);
+insert into t (id,a) values (308,45);
+insert into t (id,a) values (308,46);
+insert into t (id,a) values (308,47);
+insert into t (id,a) values (308,48);
+insert into t (id,a) values (308,49);
+insert into t (id,a) values (308,50);
+insert into t (id,a) values (308,51);
+insert into t (id,a) values (308,52);
+insert into t (id,a) values (308,53);
+insert into t (id,a) values (308,54);
+insert into t (id,a) values (308,55);
+insert into t (id,a) values (308,56);
+insert into t (id,a) values (308,57);
+insert into t (id,a) values (308,58);
+insert into t (id,a) values (308,59);
+insert into t (id,a) values (308,60);
+insert into t (id,a) values (308,61);
+insert into t (id,a) values (308,62);
+insert into t (id,a) values (308,63);
+insert into t (id,a) values (308,64);
+insert into t (id,a) values (308,65);
+insert into t (id,a) values (308,66);
+insert into t (id,a) values (308,67);
+insert into t (id,a) values (308,68);
+insert into t (id,a) values (308,69);
+insert into t (id,a) values (308,70);
+insert into t (id,a) values (308,71);
+insert into t (id,a) values (308,72);
+insert into t (id,a) values (308,73);
+insert into t (id,a) values (308,74);
+insert into t (id,a) values (308,75);
+insert into t (id,a) values (308,76);
+insert into t (id,a) values (308,77);
+insert into t (id,a) values (308,78);
+insert into t (id,a) values (308,79);
+insert into t (id,a) values (308,80);
+insert into t (id,a) values (308,81);
+insert into t (id,a) values (308,82);
+insert into t (id,a) values (308,83);
+insert into t (id,a) values (308,84);
+insert into t (id,a) values (308,85);
+insert into t (id,a) values (308,86);
+insert into t (id,a) values (308,87);
+insert into t (id,a) values (308,88);
+insert into t (id,a) values (308,89);
+insert into t (id,a) values (308,90);
+insert into t (id,a) values (308,91);
+insert into t (id,a) values (308,92);
+insert into t (id,a) values (308,93);
+insert into t (id,a) values (308,94);
+insert into t (id,a) values (308,95);
+insert into t (id,a) values (308,96);
+insert into t (id,a) values (308,97);
+insert into t (id,a) values (308,98);
+insert into t (id,a) values (308,99);
+insert into t (id,a) values (309,0);
+insert into t (id,a) values (309,1);
+insert into t (id,a) values (309,2);
+insert into t (id,a) values (309,3);
+insert into t (id,a) values (309,4);
+insert into t (id,a) values (309,5);
+insert into t (id,a) values (309,6);
+insert into t (id,a) values (309,7);
+insert into t (id,a) values (309,8);
+insert into t (id,a) values (309,9);
+insert into t (id,a) values (309,10);
+insert into t (id,a) values (309,11);
+insert into t (id,a) values (309,12);
+insert into t (id,a) values (309,13);
+insert into t (id,a) values (309,14);
+insert into t (id,a) values (309,15);
+insert into t (id,a) values (309,16);
+insert into t (id,a) values (309,17);
+insert into t (id,a) values (309,18);
+insert into t (id,a) values (309,19);
+insert into t (id,a) values (309,20);
+insert into t (id,a) values (309,21);
+insert into t (id,a) values (309,22);
+insert into t (id,a) values (309,23);
+insert into t (id,a) values (309,24);
+insert into t (id,a) values (309,25);
+insert into t (id,a) values (309,26);
+insert into t (id,a) values (309,27);
+insert into t (id,a) values (309,28);
+insert into t (id,a) values (309,29);
+insert into t (id,a) values (309,30);
+insert into t (id,a) values (309,31);
+insert into t (id,a) values (309,32);
+insert into t (id,a) values (309,33);
+insert into t (id,a) values (309,34);
+insert into t (id,a) values (309,35);
+insert into t (id,a) values (309,36);
+insert into t (id,a) values (309,37);
+insert into t (id,a) values (309,38);
+insert into t (id,a) values (309,39);
+insert into t (id,a) values (309,40);
+insert into t (id,a) values (309,41);
+insert into t (id,a) values (309,42);
+insert into t (id,a) values (309,43);
+insert into t (id,a) values (309,44);
+insert into t (id,a) values (309,45);
+insert into t (id,a) values (309,46);
+insert into t (id,a) values (309,47);
+insert into t (id,a) values (309,48);
+insert into t (id,a) values (309,49);
+insert into t (id,a) values (309,50);
+insert into t (id,a) values (309,51);
+insert into t (id,a) values (309,52);
+insert into t (id,a) values (309,53);
+insert into t (id,a) values (309,54);
+insert into t (id,a) values (309,55);
+insert into t (id,a) values (309,56);
+insert into t (id,a) values (309,57);
+insert into t (id,a) values (309,58);
+insert into t (id,a) values (309,59);
+insert into t (id,a) values (309,60);
+insert into t (id,a) values (309,61);
+insert into t (id,a) values (309,62);
+insert into t (id,a) values (309,63);
+insert into t (id,a) values (309,64);
+insert into t (id,a) values (309,65);
+insert into t (id,a) values (309,66);
+insert into t (id,a) values (309,67);
+insert into t (id,a) values (309,68);
+insert into t (id,a) values (309,69);
+insert into t (id,a) values (309,70);
+insert into t (id,a) values (309,71);
+insert into t (id,a) values (309,72);
+insert into t (id,a) values (309,73);
+insert into t (id,a) values (309,74);
+insert into t (id,a) values (309,75);
+insert into t (id,a) values (309,76);
+insert into t (id,a) values (309,77);
+insert into t (id,a) values (309,78);
+insert into t (id,a) values (309,79);
+insert into t (id,a) values (309,80);
+insert into t (id,a) values (309,81);
+insert into t (id,a) values (309,82);
+insert into t (id,a) values (309,83);
+insert into t (id,a) values (309,84);
+insert into t (id,a) values (309,85);
+insert into t (id,a) values (309,86);
+insert into t (id,a) values (309,87);
+insert into t (id,a) values (309,88);
+insert into t (id,a) values (309,89);
+insert into t (id,a) values (309,90);
+insert into t (id,a) values (309,91);
+insert into t (id,a) values (309,92);
+insert into t (id,a) values (309,93);
+insert into t (id,a) values (309,94);
+insert into t (id,a) values (309,95);
+insert into t (id,a) values (309,96);
+insert into t (id,a) values (309,97);
+insert into t (id,a) values (309,98);
+insert into t (id,a) values (309,99);
+insert into t (id,a) values (310,0);
+insert into t (id,a) values (310,1);
+insert into t (id,a) values (310,2);
+insert into t (id,a) values (310,3);
+insert into t (id,a) values (310,4);
+insert into t (id,a) values (310,5);
+insert into t (id,a) values (310,6);
+insert into t (id,a) values (310,7);
+insert into t (id,a) values (310,8);
+insert into t (id,a) values (310,9);
+insert into t (id,a) values (310,10);
+insert into t (id,a) values (310,11);
+insert into t (id,a) values (310,12);
+insert into t (id,a) values (310,13);
+insert into t (id,a) values (310,14);
+insert into t (id,a) values (310,15);
+insert into t (id,a) values (310,16);
+insert into t (id,a) values (310,17);
+insert into t (id,a) values (310,18);
+insert into t (id,a) values (310,19);
+insert into t (id,a) values (310,20);
+insert into t (id,a) values (310,21);
+insert into t (id,a) values (310,22);
+insert into t (id,a) values (310,23);
+insert into t (id,a) values (310,24);
+insert into t (id,a) values (310,25);
+insert into t (id,a) values (310,26);
+insert into t (id,a) values (310,27);
+insert into t (id,a) values (310,28);
+insert into t (id,a) values (310,29);
+insert into t (id,a) values (310,30);
+insert into t (id,a) values (310,31);
+insert into t (id,a) values (310,32);
+insert into t (id,a) values (310,33);
+insert into t (id,a) values (310,34);
+insert into t (id,a) values (310,35);
+insert into t (id,a) values (310,36);
+insert into t (id,a) values (310,37);
+insert into t (id,a) values (310,38);
+insert into t (id,a) values (310,39);
+insert into t (id,a) values (310,40);
+insert into t (id,a) values (310,41);
+insert into t (id,a) values (310,42);
+insert into t (id,a) values (310,43);
+insert into t (id,a) values (310,44);
+insert into t (id,a) values (310,45);
+insert into t (id,a) values (310,46);
+insert into t (id,a) values (310,47);
+insert into t (id,a) values (310,48);
+insert into t (id,a) values (310,49);
+insert into t (id,a) values (310,50);
+insert into t (id,a) values (310,51);
+insert into t (id,a) values (310,52);
+insert into t (id,a) values (310,53);
+insert into t (id,a) values (310,54);
+insert into t (id,a) values (310,55);
+insert into t (id,a) values (310,56);
+insert into t (id,a) values (310,57);
+insert into t (id,a) values (310,58);
+insert into t (id,a) values (310,59);
+insert into t (id,a) values (310,60);
+insert into t (id,a) values (310,61);
+insert into t (id,a) values (310,62);
+insert into t (id,a) values (310,63);
+insert into t (id,a) values (310,64);
+insert into t (id,a) values (310,65);
+insert into t (id,a) values (310,66);
+insert into t (id,a) values (310,67);
+insert into t (id,a) values (310,68);
+insert into t (id,a) values (310,69);
+insert into t (id,a) values (310,70);
+insert into t (id,a) values (310,71);
+insert into t (id,a) values (310,72);
+insert into t (id,a) values (310,73);
+insert into t (id,a) values (310,74);
+insert into t (id,a) values (310,75);
+insert into t (id,a) values (310,76);
+insert into t (id,a) values (310,77);
+insert into t (id,a) values (310,78);
+insert into t (id,a) values (310,79);
+insert into t (id,a) values (310,80);
+insert into t (id,a) values (310,81);
+insert into t (id,a) values (310,82);
+insert into t (id,a) values (310,83);
+insert into t (id,a) values (310,84);
+insert into t (id,a) values (310,85);
+insert into t (id,a) values (310,86);
+insert into t (id,a) values (310,87);
+insert into t (id,a) values (310,88);
+insert into t (id,a) values (310,89);
+insert into t (id,a) values (310,90);
+insert into t (id,a) values (310,91);
+insert into t (id,a) values (310,92);
+insert into t (id,a) values (310,93);
+insert into t (id,a) values (310,94);
+insert into t (id,a) values (310,95);
+insert into t (id,a) values (310,96);
+insert into t (id,a) values (310,97);
+insert into t (id,a) values (310,98);
+insert into t (id,a) values (310,99);
+insert into t (id,a) values (311,0);
+insert into t (id,a) values (311,1);
+insert into t (id,a) values (311,2);
+insert into t (id,a) values (311,3);
+insert into t (id,a) values (311,4);
+insert into t (id,a) values (311,5);
+insert into t (id,a) values (311,6);
+insert into t (id,a) values (311,7);
+insert into t (id,a) values (311,8);
+insert into t (id,a) values (311,9);
+insert into t (id,a) values (311,10);
+insert into t (id,a) values (311,11);
+insert into t (id,a) values (311,12);
+insert into t (id,a) values (311,13);
+insert into t (id,a) values (311,14);
+insert into t (id,a) values (311,15);
+insert into t (id,a) values (311,16);
+insert into t (id,a) values (311,17);
+insert into t (id,a) values (311,18);
+insert into t (id,a) values (311,19);
+insert into t (id,a) values (311,20);
+insert into t (id,a) values (311,21);
+insert into t (id,a) values (311,22);
+insert into t (id,a) values (311,23);
+insert into t (id,a) values (311,24);
+insert into t (id,a) values (311,25);
+insert into t (id,a) values (311,26);
+insert into t (id,a) values (311,27);
+insert into t (id,a) values (311,28);
+insert into t (id,a) values (311,29);
+insert into t (id,a) values (311,30);
+insert into t (id,a) values (311,31);
+insert into t (id,a) values (311,32);
+insert into t (id,a) values (311,33);
+insert into t (id,a) values (311,34);
+insert into t (id,a) values (311,35);
+insert into t (id,a) values (311,36);
+insert into t (id,a) values (311,37);
+insert into t (id,a) values (311,38);
+insert into t (id,a) values (311,39);
+insert into t (id,a) values (311,40);
+insert into t (id,a) values (311,41);
+insert into t (id,a) values (311,42);
+insert into t (id,a) values (311,43);
+insert into t (id,a) values (311,44);
+insert into t (id,a) values (311,45);
+insert into t (id,a) values (311,46);
+insert into t (id,a) values (311,47);
+insert into t (id,a) values (311,48);
+insert into t (id,a) values (311,49);
+insert into t (id,a) values (311,50);
+insert into t (id,a) values (311,51);
+insert into t (id,a) values (311,52);
+insert into t (id,a) values (311,53);
+insert into t (id,a) values (311,54);
+insert into t (id,a) values (311,55);
+insert into t (id,a) values (311,56);
+insert into t (id,a) values (311,57);
+insert into t (id,a) values (311,58);
+insert into t (id,a) values (311,59);
+insert into t (id,a) values (311,60);
+insert into t (id,a) values (311,61);
+insert into t (id,a) values (311,62);
+insert into t (id,a) values (311,63);
+insert into t (id,a) values (311,64);
+insert into t (id,a) values (311,65);
+insert into t (id,a) values (311,66);
+insert into t (id,a) values (311,67);
+insert into t (id,a) values (311,68);
+insert into t (id,a) values (311,69);
+insert into t (id,a) values (311,70);
+insert into t (id,a) values (311,71);
+insert into t (id,a) values (311,72);
+insert into t (id,a) values (311,73);
+insert into t (id,a) values (311,74);
+insert into t (id,a) values (311,75);
+insert into t (id,a) values (311,76);
+insert into t (id,a) values (311,77);
+insert into t (id,a) values (311,78);
+insert into t (id,a) values (311,79);
+insert into t (id,a) values (311,80);
+insert into t (id,a) values (311,81);
+insert into t (id,a) values (311,82);
+insert into t (id,a) values (311,83);
+insert into t (id,a) values (311,84);
+insert into t (id,a) values (311,85);
+insert into t (id,a) values (311,86);
+insert into t (id,a) values (311,87);
+insert into t (id,a) values (311,88);
+insert into t (id,a) values (311,89);
+insert into t (id,a) values (311,90);
+insert into t (id,a) values (311,91);
+insert into t (id,a) values (311,92);
+insert into t (id,a) values (311,93);
+insert into t (id,a) values (311,94);
+insert into t (id,a) values (311,95);
+insert into t (id,a) values (311,96);
+insert into t (id,a) values (311,97);
+insert into t (id,a) values (311,98);
+insert into t (id,a) values (311,99);
+insert into t (id,a) values (312,0);
+insert into t (id,a) values (312,1);
+insert into t (id,a) values (312,2);
+insert into t (id,a) values (312,3);
+insert into t (id,a) values (312,4);
+insert into t (id,a) values (312,5);
+insert into t (id,a) values (312,6);
+insert into t (id,a) values (312,7);
+insert into t (id,a) values (312,8);
+insert into t (id,a) values (312,9);
+insert into t (id,a) values (312,10);
+insert into t (id,a) values (312,11);
+insert into t (id,a) values (312,12);
+insert into t (id,a) values (312,13);
+insert into t (id,a) values (312,14);
+insert into t (id,a) values (312,15);
+insert into t (id,a) values (312,16);
+insert into t (id,a) values (312,17);
+insert into t (id,a) values (312,18);
+insert into t (id,a) values (312,19);
+insert into t (id,a) values (312,20);
+insert into t (id,a) values (312,21);
+insert into t (id,a) values (312,22);
+insert into t (id,a) values (312,23);
+insert into t (id,a) values (312,24);
+insert into t (id,a) values (312,25);
+insert into t (id,a) values (312,26);
+insert into t (id,a) values (312,27);
+insert into t (id,a) values (312,28);
+insert into t (id,a) values (312,29);
+insert into t (id,a) values (312,30);
+insert into t (id,a) values (312,31);
+insert into t (id,a) values (312,32);
+insert into t (id,a) values (312,33);
+insert into t (id,a) values (312,34);
+insert into t (id,a) values (312,35);
+insert into t (id,a) values (312,36);
+insert into t (id,a) values (312,37);
+insert into t (id,a) values (312,38);
+insert into t (id,a) values (312,39);
+insert into t (id,a) values (312,40);
+insert into t (id,a) values (312,41);
+insert into t (id,a) values (312,42);
+insert into t (id,a) values (312,43);
+insert into t (id,a) values (312,44);
+insert into t (id,a) values (312,45);
+insert into t (id,a) values (312,46);
+insert into t (id,a) values (312,47);
+insert into t (id,a) values (312,48);
+insert into t (id,a) values (312,49);
+insert into t (id,a) values (312,50);
+insert into t (id,a) values (312,51);
+insert into t (id,a) values (312,52);
+insert into t (id,a) values (312,53);
+insert into t (id,a) values (312,54);
+insert into t (id,a) values (312,55);
+insert into t (id,a) values (312,56);
+insert into t (id,a) values (312,57);
+insert into t (id,a) values (312,58);
+insert into t (id,a) values (312,59);
+insert into t (id,a) values (312,60);
+insert into t (id,a) values (312,61);
+insert into t (id,a) values (312,62);
+insert into t (id,a) values (312,63);
+insert into t (id,a) values (312,64);
+insert into t (id,a) values (312,65);
+insert into t (id,a) values (312,66);
+insert into t (id,a) values (312,67);
+insert into t (id,a) values (312,68);
+insert into t (id,a) values (312,69);
+insert into t (id,a) values (312,70);
+insert into t (id,a) values (312,71);
+insert into t (id,a) values (312,72);
+insert into t (id,a) values (312,73);
+insert into t (id,a) values (312,74);
+insert into t (id,a) values (312,75);
+insert into t (id,a) values (312,76);
+insert into t (id,a) values (312,77);
+insert into t (id,a) values (312,78);
+insert into t (id,a) values (312,79);
+insert into t (id,a) values (312,80);
+insert into t (id,a) values (312,81);
+insert into t (id,a) values (312,82);
+insert into t (id,a) values (312,83);
+insert into t (id,a) values (312,84);
+insert into t (id,a) values (312,85);
+insert into t (id,a) values (312,86);
+insert into t (id,a) values (312,87);
+insert into t (id,a) values (312,88);
+insert into t (id,a) values (312,89);
+insert into t (id,a) values (312,90);
+insert into t (id,a) values (312,91);
+insert into t (id,a) values (312,92);
+insert into t (id,a) values (312,93);
+insert into t (id,a) values (312,94);
+insert into t (id,a) values (312,95);
+insert into t (id,a) values (312,96);
+insert into t (id,a) values (312,97);
+insert into t (id,a) values (312,98);
+insert into t (id,a) values (312,99);
+insert into t (id,a) values (313,0);
+insert into t (id,a) values (313,1);
+insert into t (id,a) values (313,2);
+insert into t (id,a) values (313,3);
+insert into t (id,a) values (313,4);
+insert into t (id,a) values (313,5);
+insert into t (id,a) values (313,6);
+insert into t (id,a) values (313,7);
+insert into t (id,a) values (313,8);
+insert into t (id,a) values (313,9);
+insert into t (id,a) values (313,10);
+insert into t (id,a) values (313,11);
+insert into t (id,a) values (313,12);
+insert into t (id,a) values (313,13);
+insert into t (id,a) values (313,14);
+insert into t (id,a) values (313,15);
+insert into t (id,a) values (313,16);
+insert into t (id,a) values (313,17);
+insert into t (id,a) values (313,18);
+insert into t (id,a) values (313,19);
+insert into t (id,a) values (313,20);
+insert into t (id,a) values (313,21);
+insert into t (id,a) values (313,22);
+insert into t (id,a) values (313,23);
+insert into t (id,a) values (313,24);
+insert into t (id,a) values (313,25);
+insert into t (id,a) values (313,26);
+insert into t (id,a) values (313,27);
+insert into t (id,a) values (313,28);
+insert into t (id,a) values (313,29);
+insert into t (id,a) values (313,30);
+insert into t (id,a) values (313,31);
+insert into t (id,a) values (313,32);
+insert into t (id,a) values (313,33);
+insert into t (id,a) values (313,34);
+insert into t (id,a) values (313,35);
+insert into t (id,a) values (313,36);
+insert into t (id,a) values (313,37);
+insert into t (id,a) values (313,38);
+insert into t (id,a) values (313,39);
+insert into t (id,a) values (313,40);
+insert into t (id,a) values (313,41);
+insert into t (id,a) values (313,42);
+insert into t (id,a) values (313,43);
+insert into t (id,a) values (313,44);
+insert into t (id,a) values (313,45);
+insert into t (id,a) values (313,46);
+insert into t (id,a) values (313,47);
+insert into t (id,a) values (313,48);
+insert into t (id,a) values (313,49);
+insert into t (id,a) values (313,50);
+insert into t (id,a) values (313,51);
+insert into t (id,a) values (313,52);
+insert into t (id,a) values (313,53);
+insert into t (id,a) values (313,54);
+insert into t (id,a) values (313,55);
+insert into t (id,a) values (313,56);
+insert into t (id,a) values (313,57);
+insert into t (id,a) values (313,58);
+insert into t (id,a) values (313,59);
+insert into t (id,a) values (313,60);
+insert into t (id,a) values (313,61);
+insert into t (id,a) values (313,62);
+insert into t (id,a) values (313,63);
+insert into t (id,a) values (313,64);
+insert into t (id,a) values (313,65);
+insert into t (id,a) values (313,66);
+insert into t (id,a) values (313,67);
+insert into t (id,a) values (313,68);
+insert into t (id,a) values (313,69);
+insert into t (id,a) values (313,70);
+insert into t (id,a) values (313,71);
+insert into t (id,a) values (313,72);
+insert into t (id,a) values (313,73);
+insert into t (id,a) values (313,74);
+insert into t (id,a) values (313,75);
+insert into t (id,a) values (313,76);
+insert into t (id,a) values (313,77);
+insert into t (id,a) values (313,78);
+insert into t (id,a) values (313,79);
+insert into t (id,a) values (313,80);
+insert into t (id,a) values (313,81);
+insert into t (id,a) values (313,82);
+insert into t (id,a) values (313,83);
+insert into t (id,a) values (313,84);
+insert into t (id,a) values (313,85);
+insert into t (id,a) values (313,86);
+insert into t (id,a) values (313,87);
+insert into t (id,a) values (313,88);
+insert into t (id,a) values (313,89);
+insert into t (id,a) values (313,90);
+insert into t (id,a) values (313,91);
+insert into t (id,a) values (313,92);
+insert into t (id,a) values (313,93);
+insert into t (id,a) values (313,94);
+insert into t (id,a) values (313,95);
+insert into t (id,a) values (313,96);
+insert into t (id,a) values (313,97);
+insert into t (id,a) values (313,98);
+insert into t (id,a) values (313,99);
+insert into t (id,a) values (314,0);
+insert into t (id,a) values (314,1);
+insert into t (id,a) values (314,2);
+insert into t (id,a) values (314,3);
+insert into t (id,a) values (314,4);
+insert into t (id,a) values (314,5);
+insert into t (id,a) values (314,6);
+insert into t (id,a) values (314,7);
+insert into t (id,a) values (314,8);
+insert into t (id,a) values (314,9);
+insert into t (id,a) values (314,10);
+insert into t (id,a) values (314,11);
+insert into t (id,a) values (314,12);
+insert into t (id,a) values (314,13);
+insert into t (id,a) values (314,14);
+insert into t (id,a) values (314,15);
+insert into t (id,a) values (314,16);
+insert into t (id,a) values (314,17);
+insert into t (id,a) values (314,18);
+insert into t (id,a) values (314,19);
+insert into t (id,a) values (314,20);
+insert into t (id,a) values (314,21);
+insert into t (id,a) values (314,22);
+insert into t (id,a) values (314,23);
+insert into t (id,a) values (314,24);
+insert into t (id,a) values (314,25);
+insert into t (id,a) values (314,26);
+insert into t (id,a) values (314,27);
+insert into t (id,a) values (314,28);
+insert into t (id,a) values (314,29);
+insert into t (id,a) values (314,30);
+insert into t (id,a) values (314,31);
+insert into t (id,a) values (314,32);
+insert into t (id,a) values (314,33);
+insert into t (id,a) values (314,34);
+insert into t (id,a) values (314,35);
+insert into t (id,a) values (314,36);
+insert into t (id,a) values (314,37);
+insert into t (id,a) values (314,38);
+insert into t (id,a) values (314,39);
+insert into t (id,a) values (314,40);
+insert into t (id,a) values (314,41);
+insert into t (id,a) values (314,42);
+insert into t (id,a) values (314,43);
+insert into t (id,a) values (314,44);
+insert into t (id,a) values (314,45);
+insert into t (id,a) values (314,46);
+insert into t (id,a) values (314,47);
+insert into t (id,a) values (314,48);
+insert into t (id,a) values (314,49);
+insert into t (id,a) values (314,50);
+insert into t (id,a) values (314,51);
+insert into t (id,a) values (314,52);
+insert into t (id,a) values (314,53);
+insert into t (id,a) values (314,54);
+insert into t (id,a) values (314,55);
+insert into t (id,a) values (314,56);
+insert into t (id,a) values (314,57);
+insert into t (id,a) values (314,58);
+insert into t (id,a) values (314,59);
+insert into t (id,a) values (314,60);
+insert into t (id,a) values (314,61);
+insert into t (id,a) values (314,62);
+insert into t (id,a) values (314,63);
+insert into t (id,a) values (314,64);
+insert into t (id,a) values (314,65);
+insert into t (id,a) values (314,66);
+insert into t (id,a) values (314,67);
+insert into t (id,a) values (314,68);
+insert into t (id,a) values (314,69);
+insert into t (id,a) values (314,70);
+insert into t (id,a) values (314,71);
+insert into t (id,a) values (314,72);
+insert into t (id,a) values (314,73);
+insert into t (id,a) values (314,74);
+insert into t (id,a) values (314,75);
+insert into t (id,a) values (314,76);
+insert into t (id,a) values (314,77);
+insert into t (id,a) values (314,78);
+insert into t (id,a) values (314,79);
+insert into t (id,a) values (314,80);
+insert into t (id,a) values (314,81);
+insert into t (id,a) values (314,82);
+insert into t (id,a) values (314,83);
+insert into t (id,a) values (314,84);
+insert into t (id,a) values (314,85);
+insert into t (id,a) values (314,86);
+insert into t (id,a) values (314,87);
+insert into t (id,a) values (314,88);
+insert into t (id,a) values (314,89);
+insert into t (id,a) values (314,90);
+insert into t (id,a) values (314,91);
+insert into t (id,a) values (314,92);
+insert into t (id,a) values (314,93);
+insert into t (id,a) values (314,94);
+insert into t (id,a) values (314,95);
+insert into t (id,a) values (314,96);
+insert into t (id,a) values (314,97);
+insert into t (id,a) values (314,98);
+insert into t (id,a) values (314,99);
+insert into t (id,a) values (315,0);
+insert into t (id,a) values (315,1);
+insert into t (id,a) values (315,2);
+insert into t (id,a) values (315,3);
+insert into t (id,a) values (315,4);
+insert into t (id,a) values (315,5);
+insert into t (id,a) values (315,6);
+insert into t (id,a) values (315,7);
+insert into t (id,a) values (315,8);
+insert into t (id,a) values (315,9);
+insert into t (id,a) values (315,10);
+insert into t (id,a) values (315,11);
+insert into t (id,a) values (315,12);
+insert into t (id,a) values (315,13);
+insert into t (id,a) values (315,14);
+insert into t (id,a) values (315,15);
+insert into t (id,a) values (315,16);
+insert into t (id,a) values (315,17);
+insert into t (id,a) values (315,18);
+insert into t (id,a) values (315,19);
+insert into t (id,a) values (315,20);
+insert into t (id,a) values (315,21);
+insert into t (id,a) values (315,22);
+insert into t (id,a) values (315,23);
+insert into t (id,a) values (315,24);
+insert into t (id,a) values (315,25);
+insert into t (id,a) values (315,26);
+insert into t (id,a) values (315,27);
+insert into t (id,a) values (315,28);
+insert into t (id,a) values (315,29);
+insert into t (id,a) values (315,30);
+insert into t (id,a) values (315,31);
+insert into t (id,a) values (315,32);
+insert into t (id,a) values (315,33);
+insert into t (id,a) values (315,34);
+insert into t (id,a) values (315,35);
+insert into t (id,a) values (315,36);
+insert into t (id,a) values (315,37);
+insert into t (id,a) values (315,38);
+insert into t (id,a) values (315,39);
+insert into t (id,a) values (315,40);
+insert into t (id,a) values (315,41);
+insert into t (id,a) values (315,42);
+insert into t (id,a) values (315,43);
+insert into t (id,a) values (315,44);
+insert into t (id,a) values (315,45);
+insert into t (id,a) values (315,46);
+insert into t (id,a) values (315,47);
+insert into t (id,a) values (315,48);
+insert into t (id,a) values (315,49);
+insert into t (id,a) values (315,50);
+insert into t (id,a) values (315,51);
+insert into t (id,a) values (315,52);
+insert into t (id,a) values (315,53);
+insert into t (id,a) values (315,54);
+insert into t (id,a) values (315,55);
+insert into t (id,a) values (315,56);
+insert into t (id,a) values (315,57);
+insert into t (id,a) values (315,58);
+insert into t (id,a) values (315,59);
+insert into t (id,a) values (315,60);
+insert into t (id,a) values (315,61);
+insert into t (id,a) values (315,62);
+insert into t (id,a) values (315,63);
+insert into t (id,a) values (315,64);
+insert into t (id,a) values (315,65);
+insert into t (id,a) values (315,66);
+insert into t (id,a) values (315,67);
+insert into t (id,a) values (315,68);
+insert into t (id,a) values (315,69);
+insert into t (id,a) values (315,70);
+insert into t (id,a) values (315,71);
+insert into t (id,a) values (315,72);
+insert into t (id,a) values (315,73);
+insert into t (id,a) values (315,74);
+insert into t (id,a) values (315,75);
+insert into t (id,a) values (315,76);
+insert into t (id,a) values (315,77);
+insert into t (id,a) values (315,78);
+insert into t (id,a) values (315,79);
+insert into t (id,a) values (315,80);
+insert into t (id,a) values (315,81);
+insert into t (id,a) values (315,82);
+insert into t (id,a) values (315,83);
+insert into t (id,a) values (315,84);
+insert into t (id,a) values (315,85);
+insert into t (id,a) values (315,86);
+insert into t (id,a) values (315,87);
+insert into t (id,a) values (315,88);
+insert into t (id,a) values (315,89);
+insert into t (id,a) values (315,90);
+insert into t (id,a) values (315,91);
+insert into t (id,a) values (315,92);
+insert into t (id,a) values (315,93);
+insert into t (id,a) values (315,94);
+insert into t (id,a) values (315,95);
+insert into t (id,a) values (315,96);
+insert into t (id,a) values (315,97);
+insert into t (id,a) values (315,98);
+insert into t (id,a) values (315,99);
+insert into t (id,a) values (316,0);
+insert into t (id,a) values (316,1);
+insert into t (id,a) values (316,2);
+insert into t (id,a) values (316,3);
+insert into t (id,a) values (316,4);
+insert into t (id,a) values (316,5);
+insert into t (id,a) values (316,6);
+insert into t (id,a) values (316,7);
+insert into t (id,a) values (316,8);
+insert into t (id,a) values (316,9);
+insert into t (id,a) values (316,10);
+insert into t (id,a) values (316,11);
+insert into t (id,a) values (316,12);
+insert into t (id,a) values (316,13);
+insert into t (id,a) values (316,14);
+insert into t (id,a) values (316,15);
+insert into t (id,a) values (316,16);
+insert into t (id,a) values (316,17);
+insert into t (id,a) values (316,18);
+insert into t (id,a) values (316,19);
+insert into t (id,a) values (316,20);
+insert into t (id,a) values (316,21);
+insert into t (id,a) values (316,22);
+insert into t (id,a) values (316,23);
+insert into t (id,a) values (316,24);
+insert into t (id,a) values (316,25);
+insert into t (id,a) values (316,26);
+insert into t (id,a) values (316,27);
+insert into t (id,a) values (316,28);
+insert into t (id,a) values (316,29);
+insert into t (id,a) values (316,30);
+insert into t (id,a) values (316,31);
+insert into t (id,a) values (316,32);
+insert into t (id,a) values (316,33);
+insert into t (id,a) values (316,34);
+insert into t (id,a) values (316,35);
+insert into t (id,a) values (316,36);
+insert into t (id,a) values (316,37);
+insert into t (id,a) values (316,38);
+insert into t (id,a) values (316,39);
+insert into t (id,a) values (316,40);
+insert into t (id,a) values (316,41);
+insert into t (id,a) values (316,42);
+insert into t (id,a) values (316,43);
+insert into t (id,a) values (316,44);
+insert into t (id,a) values (316,45);
+insert into t (id,a) values (316,46);
+insert into t (id,a) values (316,47);
+insert into t (id,a) values (316,48);
+insert into t (id,a) values (316,49);
+insert into t (id,a) values (316,50);
+insert into t (id,a) values (316,51);
+insert into t (id,a) values (316,52);
+insert into t (id,a) values (316,53);
+insert into t (id,a) values (316,54);
+insert into t (id,a) values (316,55);
+insert into t (id,a) values (316,56);
+insert into t (id,a) values (316,57);
+insert into t (id,a) values (316,58);
+insert into t (id,a) values (316,59);
+insert into t (id,a) values (316,60);
+insert into t (id,a) values (316,61);
+insert into t (id,a) values (316,62);
+insert into t (id,a) values (316,63);
+insert into t (id,a) values (316,64);
+insert into t (id,a) values (316,65);
+insert into t (id,a) values (316,66);
+insert into t (id,a) values (316,67);
+insert into t (id,a) values (316,68);
+insert into t (id,a) values (316,69);
+insert into t (id,a) values (316,70);
+insert into t (id,a) values (316,71);
+insert into t (id,a) values (316,72);
+insert into t (id,a) values (316,73);
+insert into t (id,a) values (316,74);
+insert into t (id,a) values (316,75);
+insert into t (id,a) values (316,76);
+insert into t (id,a) values (316,77);
+insert into t (id,a) values (316,78);
+insert into t (id,a) values (316,79);
+insert into t (id,a) values (316,80);
+insert into t (id,a) values (316,81);
+insert into t (id,a) values (316,82);
+insert into t (id,a) values (316,83);
+insert into t (id,a) values (316,84);
+insert into t (id,a) values (316,85);
+insert into t (id,a) values (316,86);
+insert into t (id,a) values (316,87);
+insert into t (id,a) values (316,88);
+insert into t (id,a) values (316,89);
+insert into t (id,a) values (316,90);
+insert into t (id,a) values (316,91);
+insert into t (id,a) values (316,92);
+insert into t (id,a) values (316,93);
+insert into t (id,a) values (316,94);
+insert into t (id,a) values (316,95);
+insert into t (id,a) values (316,96);
+insert into t (id,a) values (316,97);
+insert into t (id,a) values (316,98);
+insert into t (id,a) values (316,99);
+insert into t (id,a) values (317,0);
+insert into t (id,a) values (317,1);
+insert into t (id,a) values (317,2);
+insert into t (id,a) values (317,3);
+insert into t (id,a) values (317,4);
+insert into t (id,a) values (317,5);
+insert into t (id,a) values (317,6);
+insert into t (id,a) values (317,7);
+insert into t (id,a) values (317,8);
+insert into t (id,a) values (317,9);
+insert into t (id,a) values (317,10);
+insert into t (id,a) values (317,11);
+insert into t (id,a) values (317,12);
+insert into t (id,a) values (317,13);
+insert into t (id,a) values (317,14);
+insert into t (id,a) values (317,15);
+insert into t (id,a) values (317,16);
+insert into t (id,a) values (317,17);
+insert into t (id,a) values (317,18);
+insert into t (id,a) values (317,19);
+insert into t (id,a) values (317,20);
+insert into t (id,a) values (317,21);
+insert into t (id,a) values (317,22);
+insert into t (id,a) values (317,23);
+insert into t (id,a) values (317,24);
+insert into t (id,a) values (317,25);
+insert into t (id,a) values (317,26);
+insert into t (id,a) values (317,27);
+insert into t (id,a) values (317,28);
+insert into t (id,a) values (317,29);
+insert into t (id,a) values (317,30);
+insert into t (id,a) values (317,31);
+insert into t (id,a) values (317,32);
+insert into t (id,a) values (317,33);
+insert into t (id,a) values (317,34);
+insert into t (id,a) values (317,35);
+insert into t (id,a) values (317,36);
+insert into t (id,a) values (317,37);
+insert into t (id,a) values (317,38);
+insert into t (id,a) values (317,39);
+insert into t (id,a) values (317,40);
+insert into t (id,a) values (317,41);
+insert into t (id,a) values (317,42);
+insert into t (id,a) values (317,43);
+insert into t (id,a) values (317,44);
+insert into t (id,a) values (317,45);
+insert into t (id,a) values (317,46);
+insert into t (id,a) values (317,47);
+insert into t (id,a) values (317,48);
+insert into t (id,a) values (317,49);
+insert into t (id,a) values (317,50);
+insert into t (id,a) values (317,51);
+insert into t (id,a) values (317,52);
+insert into t (id,a) values (317,53);
+insert into t (id,a) values (317,54);
+insert into t (id,a) values (317,55);
+insert into t (id,a) values (317,56);
+insert into t (id,a) values (317,57);
+insert into t (id,a) values (317,58);
+insert into t (id,a) values (317,59);
+insert into t (id,a) values (317,60);
+insert into t (id,a) values (317,61);
+insert into t (id,a) values (317,62);
+insert into t (id,a) values (317,63);
+insert into t (id,a) values (317,64);
+insert into t (id,a) values (317,65);
+insert into t (id,a) values (317,66);
+insert into t (id,a) values (317,67);
+insert into t (id,a) values (317,68);
+insert into t (id,a) values (317,69);
+insert into t (id,a) values (317,70);
+insert into t (id,a) values (317,71);
+insert into t (id,a) values (317,72);
+insert into t (id,a) values (317,73);
+insert into t (id,a) values (317,74);
+insert into t (id,a) values (317,75);
+insert into t (id,a) values (317,76);
+insert into t (id,a) values (317,77);
+insert into t (id,a) values (317,78);
+insert into t (id,a) values (317,79);
+insert into t (id,a) values (317,80);
+insert into t (id,a) values (317,81);
+insert into t (id,a) values (317,82);
+insert into t (id,a) values (317,83);
+insert into t (id,a) values (317,84);
+insert into t (id,a) values (317,85);
+insert into t (id,a) values (317,86);
+insert into t (id,a) values (317,87);
+insert into t (id,a) values (317,88);
+insert into t (id,a) values (317,89);
+insert into t (id,a) values (317,90);
+insert into t (id,a) values (317,91);
+insert into t (id,a) values (317,92);
+insert into t (id,a) values (317,93);
+insert into t (id,a) values (317,94);
+insert into t (id,a) values (317,95);
+insert into t (id,a) values (317,96);
+insert into t (id,a) values (317,97);
+insert into t (id,a) values (317,98);
+insert into t (id,a) values (317,99);
+insert into t (id,a) values (318,0);
+insert into t (id,a) values (318,1);
+insert into t (id,a) values (318,2);
+insert into t (id,a) values (318,3);
+insert into t (id,a) values (318,4);
+insert into t (id,a) values (318,5);
+insert into t (id,a) values (318,6);
+insert into t (id,a) values (318,7);
+insert into t (id,a) values (318,8);
+insert into t (id,a) values (318,9);
+insert into t (id,a) values (318,10);
+insert into t (id,a) values (318,11);
+insert into t (id,a) values (318,12);
+insert into t (id,a) values (318,13);
+insert into t (id,a) values (318,14);
+insert into t (id,a) values (318,15);
+insert into t (id,a) values (318,16);
+insert into t (id,a) values (318,17);
+insert into t (id,a) values (318,18);
+insert into t (id,a) values (318,19);
+insert into t (id,a) values (318,20);
+insert into t (id,a) values (318,21);
+insert into t (id,a) values (318,22);
+insert into t (id,a) values (318,23);
+insert into t (id,a) values (318,24);
+insert into t (id,a) values (318,25);
+insert into t (id,a) values (318,26);
+insert into t (id,a) values (318,27);
+insert into t (id,a) values (318,28);
+insert into t (id,a) values (318,29);
+insert into t (id,a) values (318,30);
+insert into t (id,a) values (318,31);
+insert into t (id,a) values (318,32);
+insert into t (id,a) values (318,33);
+insert into t (id,a) values (318,34);
+insert into t (id,a) values (318,35);
+insert into t (id,a) values (318,36);
+insert into t (id,a) values (318,37);
+insert into t (id,a) values (318,38);
+insert into t (id,a) values (318,39);
+insert into t (id,a) values (318,40);
+insert into t (id,a) values (318,41);
+insert into t (id,a) values (318,42);
+insert into t (id,a) values (318,43);
+insert into t (id,a) values (318,44);
+insert into t (id,a) values (318,45);
+insert into t (id,a) values (318,46);
+insert into t (id,a) values (318,47);
+insert into t (id,a) values (318,48);
+insert into t (id,a) values (318,49);
+insert into t (id,a) values (318,50);
+insert into t (id,a) values (318,51);
+insert into t (id,a) values (318,52);
+insert into t (id,a) values (318,53);
+insert into t (id,a) values (318,54);
+insert into t (id,a) values (318,55);
+insert into t (id,a) values (318,56);
+insert into t (id,a) values (318,57);
+insert into t (id,a) values (318,58);
+insert into t (id,a) values (318,59);
+insert into t (id,a) values (318,60);
+insert into t (id,a) values (318,61);
+insert into t (id,a) values (318,62);
+insert into t (id,a) values (318,63);
+insert into t (id,a) values (318,64);
+insert into t (id,a) values (318,65);
+insert into t (id,a) values (318,66);
+insert into t (id,a) values (318,67);
+insert into t (id,a) values (318,68);
+insert into t (id,a) values (318,69);
+insert into t (id,a) values (318,70);
+insert into t (id,a) values (318,71);
+insert into t (id,a) values (318,72);
+insert into t (id,a) values (318,73);
+insert into t (id,a) values (318,74);
+insert into t (id,a) values (318,75);
+insert into t (id,a) values (318,76);
+insert into t (id,a) values (318,77);
+insert into t (id,a) values (318,78);
+insert into t (id,a) values (318,79);
+insert into t (id,a) values (318,80);
+insert into t (id,a) values (318,81);
+insert into t (id,a) values (318,82);
+insert into t (id,a) values (318,83);
+insert into t (id,a) values (318,84);
+insert into t (id,a) values (318,85);
+insert into t (id,a) values (318,86);
+insert into t (id,a) values (318,87);
+insert into t (id,a) values (318,88);
+insert into t (id,a) values (318,89);
+insert into t (id,a) values (318,90);
+insert into t (id,a) values (318,91);
+insert into t (id,a) values (318,92);
+insert into t (id,a) values (318,93);
+insert into t (id,a) values (318,94);
+insert into t (id,a) values (318,95);
+insert into t (id,a) values (318,96);
+insert into t (id,a) values (318,97);
+insert into t (id,a) values (318,98);
+insert into t (id,a) values (318,99);
+insert into t (id,a) values (319,0);
+insert into t (id,a) values (319,1);
+insert into t (id,a) values (319,2);
+insert into t (id,a) values (319,3);
+insert into t (id,a) values (319,4);
+insert into t (id,a) values (319,5);
+insert into t (id,a) values (319,6);
+insert into t (id,a) values (319,7);
+insert into t (id,a) values (319,8);
+insert into t (id,a) values (319,9);
+insert into t (id,a) values (319,10);
+insert into t (id,a) values (319,11);
+insert into t (id,a) values (319,12);
+insert into t (id,a) values (319,13);
+insert into t (id,a) values (319,14);
+insert into t (id,a) values (319,15);
+insert into t (id,a) values (319,16);
+insert into t (id,a) values (319,17);
+insert into t (id,a) values (319,18);
+insert into t (id,a) values (319,19);
+insert into t (id,a) values (319,20);
+insert into t (id,a) values (319,21);
+insert into t (id,a) values (319,22);
+insert into t (id,a) values (319,23);
+insert into t (id,a) values (319,24);
+insert into t (id,a) values (319,25);
+insert into t (id,a) values (319,26);
+insert into t (id,a) values (319,27);
+insert into t (id,a) values (319,28);
+insert into t (id,a) values (319,29);
+insert into t (id,a) values (319,30);
+insert into t (id,a) values (319,31);
+insert into t (id,a) values (319,32);
+insert into t (id,a) values (319,33);
+insert into t (id,a) values (319,34);
+insert into t (id,a) values (319,35);
+insert into t (id,a) values (319,36);
+insert into t (id,a) values (319,37);
+insert into t (id,a) values (319,38);
+insert into t (id,a) values (319,39);
+insert into t (id,a) values (319,40);
+insert into t (id,a) values (319,41);
+insert into t (id,a) values (319,42);
+insert into t (id,a) values (319,43);
+insert into t (id,a) values (319,44);
+insert into t (id,a) values (319,45);
+insert into t (id,a) values (319,46);
+insert into t (id,a) values (319,47);
+insert into t (id,a) values (319,48);
+insert into t (id,a) values (319,49);
+insert into t (id,a) values (319,50);
+insert into t (id,a) values (319,51);
+insert into t (id,a) values (319,52);
+insert into t (id,a) values (319,53);
+insert into t (id,a) values (319,54);
+insert into t (id,a) values (319,55);
+insert into t (id,a) values (319,56);
+insert into t (id,a) values (319,57);
+insert into t (id,a) values (319,58);
+insert into t (id,a) values (319,59);
+insert into t (id,a) values (319,60);
+insert into t (id,a) values (319,61);
+insert into t (id,a) values (319,62);
+insert into t (id,a) values (319,63);
+insert into t (id,a) values (319,64);
+insert into t (id,a) values (319,65);
+insert into t (id,a) values (319,66);
+insert into t (id,a) values (319,67);
+insert into t (id,a) values (319,68);
+insert into t (id,a) values (319,69);
+insert into t (id,a) values (319,70);
+insert into t (id,a) values (319,71);
+insert into t (id,a) values (319,72);
+insert into t (id,a) values (319,73);
+insert into t (id,a) values (319,74);
+insert into t (id,a) values (319,75);
+insert into t (id,a) values (319,76);
+insert into t (id,a) values (319,77);
+insert into t (id,a) values (319,78);
+insert into t (id,a) values (319,79);
+insert into t (id,a) values (319,80);
+insert into t (id,a) values (319,81);
+insert into t (id,a) values (319,82);
+insert into t (id,a) values (319,83);
+insert into t (id,a) values (319,84);
+insert into t (id,a) values (319,85);
+insert into t (id,a) values (319,86);
+insert into t (id,a) values (319,87);
+insert into t (id,a) values (319,88);
+insert into t (id,a) values (319,89);
+insert into t (id,a) values (319,90);
+insert into t (id,a) values (319,91);
+insert into t (id,a) values (319,92);
+insert into t (id,a) values (319,93);
+insert into t (id,a) values (319,94);
+insert into t (id,a) values (319,95);
+insert into t (id,a) values (319,96);
+insert into t (id,a) values (319,97);
+insert into t (id,a) values (319,98);
+insert into t (id,a) values (319,99);
+insert into t (id,a) values (320,0);
+insert into t (id,a) values (320,1);
+insert into t (id,a) values (320,2);
+insert into t (id,a) values (320,3);
+insert into t (id,a) values (320,4);
+insert into t (id,a) values (320,5);
+insert into t (id,a) values (320,6);
+insert into t (id,a) values (320,7);
+insert into t (id,a) values (320,8);
+insert into t (id,a) values (320,9);
+insert into t (id,a) values (320,10);
+insert into t (id,a) values (320,11);
+insert into t (id,a) values (320,12);
+insert into t (id,a) values (320,13);
+insert into t (id,a) values (320,14);
+insert into t (id,a) values (320,15);
+insert into t (id,a) values (320,16);
+insert into t (id,a) values (320,17);
+insert into t (id,a) values (320,18);
+insert into t (id,a) values (320,19);
+insert into t (id,a) values (320,20);
+insert into t (id,a) values (320,21);
+insert into t (id,a) values (320,22);
+insert into t (id,a) values (320,23);
+insert into t (id,a) values (320,24);
+insert into t (id,a) values (320,25);
+insert into t (id,a) values (320,26);
+insert into t (id,a) values (320,27);
+insert into t (id,a) values (320,28);
+insert into t (id,a) values (320,29);
+insert into t (id,a) values (320,30);
+insert into t (id,a) values (320,31);
+insert into t (id,a) values (320,32);
+insert into t (id,a) values (320,33);
+insert into t (id,a) values (320,34);
+insert into t (id,a) values (320,35);
+insert into t (id,a) values (320,36);
+insert into t (id,a) values (320,37);
+insert into t (id,a) values (320,38);
+insert into t (id,a) values (320,39);
+insert into t (id,a) values (320,40);
+insert into t (id,a) values (320,41);
+insert into t (id,a) values (320,42);
+insert into t (id,a) values (320,43);
+insert into t (id,a) values (320,44);
+insert into t (id,a) values (320,45);
+insert into t (id,a) values (320,46);
+insert into t (id,a) values (320,47);
+insert into t (id,a) values (320,48);
+insert into t (id,a) values (320,49);
+insert into t (id,a) values (320,50);
+insert into t (id,a) values (320,51);
+insert into t (id,a) values (320,52);
+insert into t (id,a) values (320,53);
+insert into t (id,a) values (320,54);
+insert into t (id,a) values (320,55);
+insert into t (id,a) values (320,56);
+insert into t (id,a) values (320,57);
+insert into t (id,a) values (320,58);
+insert into t (id,a) values (320,59);
+insert into t (id,a) values (320,60);
+insert into t (id,a) values (320,61);
+insert into t (id,a) values (320,62);
+insert into t (id,a) values (320,63);
+insert into t (id,a) values (320,64);
+insert into t (id,a) values (320,65);
+insert into t (id,a) values (320,66);
+insert into t (id,a) values (320,67);
+insert into t (id,a) values (320,68);
+insert into t (id,a) values (320,69);
+insert into t (id,a) values (320,70);
+insert into t (id,a) values (320,71);
+insert into t (id,a) values (320,72);
+insert into t (id,a) values (320,73);
+insert into t (id,a) values (320,74);
+insert into t (id,a) values (320,75);
+insert into t (id,a) values (320,76);
+insert into t (id,a) values (320,77);
+insert into t (id,a) values (320,78);
+insert into t (id,a) values (320,79);
+insert into t (id,a) values (320,80);
+insert into t (id,a) values (320,81);
+insert into t (id,a) values (320,82);
+insert into t (id,a) values (320,83);
+insert into t (id,a) values (320,84);
+insert into t (id,a) values (320,85);
+insert into t (id,a) values (320,86);
+insert into t (id,a) values (320,87);
+insert into t (id,a) values (320,88);
+insert into t (id,a) values (320,89);
+insert into t (id,a) values (320,90);
+insert into t (id,a) values (320,91);
+insert into t (id,a) values (320,92);
+insert into t (id,a) values (320,93);
+insert into t (id,a) values (320,94);
+insert into t (id,a) values (320,95);
+insert into t (id,a) values (320,96);
+insert into t (id,a) values (320,97);
+insert into t (id,a) values (320,98);
+insert into t (id,a) values (320,99);
+insert into t (id,a) values (321,0);
+insert into t (id,a) values (321,1);
+insert into t (id,a) values (321,2);
+insert into t (id,a) values (321,3);
+insert into t (id,a) values (321,4);
+insert into t (id,a) values (321,5);
+insert into t (id,a) values (321,6);
+insert into t (id,a) values (321,7);
+insert into t (id,a) values (321,8);
+insert into t (id,a) values (321,9);
+insert into t (id,a) values (321,10);
+insert into t (id,a) values (321,11);
+insert into t (id,a) values (321,12);
+insert into t (id,a) values (321,13);
+insert into t (id,a) values (321,14);
+insert into t (id,a) values (321,15);
+insert into t (id,a) values (321,16);
+insert into t (id,a) values (321,17);
+insert into t (id,a) values (321,18);
+insert into t (id,a) values (321,19);
+insert into t (id,a) values (321,20);
+insert into t (id,a) values (321,21);
+insert into t (id,a) values (321,22);
+insert into t (id,a) values (321,23);
+insert into t (id,a) values (321,24);
+insert into t (id,a) values (321,25);
+insert into t (id,a) values (321,26);
+insert into t (id,a) values (321,27);
+insert into t (id,a) values (321,28);
+insert into t (id,a) values (321,29);
+insert into t (id,a) values (321,30);
+insert into t (id,a) values (321,31);
+insert into t (id,a) values (321,32);
+insert into t (id,a) values (321,33);
+insert into t (id,a) values (321,34);
+insert into t (id,a) values (321,35);
+insert into t (id,a) values (321,36);
+insert into t (id,a) values (321,37);
+insert into t (id,a) values (321,38);
+insert into t (id,a) values (321,39);
+insert into t (id,a) values (321,40);
+insert into t (id,a) values (321,41);
+insert into t (id,a) values (321,42);
+insert into t (id,a) values (321,43);
+insert into t (id,a) values (321,44);
+insert into t (id,a) values (321,45);
+insert into t (id,a) values (321,46);
+insert into t (id,a) values (321,47);
+insert into t (id,a) values (321,48);
+insert into t (id,a) values (321,49);
+insert into t (id,a) values (321,50);
+insert into t (id,a) values (321,51);
+insert into t (id,a) values (321,52);
+insert into t (id,a) values (321,53);
+insert into t (id,a) values (321,54);
+insert into t (id,a) values (321,55);
+insert into t (id,a) values (321,56);
+insert into t (id,a) values (321,57);
+insert into t (id,a) values (321,58);
+insert into t (id,a) values (321,59);
+insert into t (id,a) values (321,60);
+insert into t (id,a) values (321,61);
+insert into t (id,a) values (321,62);
+insert into t (id,a) values (321,63);
+insert into t (id,a) values (321,64);
+insert into t (id,a) values (321,65);
+insert into t (id,a) values (321,66);
+insert into t (id,a) values (321,67);
+insert into t (id,a) values (321,68);
+insert into t (id,a) values (321,69);
+insert into t (id,a) values (321,70);
+insert into t (id,a) values (321,71);
+insert into t (id,a) values (321,72);
+insert into t (id,a) values (321,73);
+insert into t (id,a) values (321,74);
+insert into t (id,a) values (321,75);
+insert into t (id,a) values (321,76);
+insert into t (id,a) values (321,77);
+insert into t (id,a) values (321,78);
+insert into t (id,a) values (321,79);
+insert into t (id,a) values (321,80);
+insert into t (id,a) values (321,81);
+insert into t (id,a) values (321,82);
+insert into t (id,a) values (321,83);
+insert into t (id,a) values (321,84);
+insert into t (id,a) values (321,85);
+insert into t (id,a) values (321,86);
+insert into t (id,a) values (321,87);
+insert into t (id,a) values (321,88);
+insert into t (id,a) values (321,89);
+insert into t (id,a) values (321,90);
+insert into t (id,a) values (321,91);
+insert into t (id,a) values (321,92);
+insert into t (id,a) values (321,93);
+insert into t (id,a) values (321,94);
+insert into t (id,a) values (321,95);
+insert into t (id,a) values (321,96);
+insert into t (id,a) values (321,97);
+insert into t (id,a) values (321,98);
+insert into t (id,a) values (321,99);
+insert into t (id,a) values (322,0);
+insert into t (id,a) values (322,1);
+insert into t (id,a) values (322,2);
+insert into t (id,a) values (322,3);
+insert into t (id,a) values (322,4);
+insert into t (id,a) values (322,5);
+insert into t (id,a) values (322,6);
+insert into t (id,a) values (322,7);
+insert into t (id,a) values (322,8);
+insert into t (id,a) values (322,9);
+insert into t (id,a) values (322,10);
+insert into t (id,a) values (322,11);
+insert into t (id,a) values (322,12);
+insert into t (id,a) values (322,13);
+insert into t (id,a) values (322,14);
+insert into t (id,a) values (322,15);
+insert into t (id,a) values (322,16);
+insert into t (id,a) values (322,17);
+insert into t (id,a) values (322,18);
+insert into t (id,a) values (322,19);
+insert into t (id,a) values (322,20);
+insert into t (id,a) values (322,21);
+insert into t (id,a) values (322,22);
+insert into t (id,a) values (322,23);
+insert into t (id,a) values (322,24);
+insert into t (id,a) values (322,25);
+insert into t (id,a) values (322,26);
+insert into t (id,a) values (322,27);
+insert into t (id,a) values (322,28);
+insert into t (id,a) values (322,29);
+insert into t (id,a) values (322,30);
+insert into t (id,a) values (322,31);
+insert into t (id,a) values (322,32);
+insert into t (id,a) values (322,33);
+insert into t (id,a) values (322,34);
+insert into t (id,a) values (322,35);
+insert into t (id,a) values (322,36);
+insert into t (id,a) values (322,37);
+insert into t (id,a) values (322,38);
+insert into t (id,a) values (322,39);
+insert into t (id,a) values (322,40);
+insert into t (id,a) values (322,41);
+insert into t (id,a) values (322,42);
+insert into t (id,a) values (322,43);
+insert into t (id,a) values (322,44);
+insert into t (id,a) values (322,45);
+insert into t (id,a) values (322,46);
+insert into t (id,a) values (322,47);
+insert into t (id,a) values (322,48);
+insert into t (id,a) values (322,49);
+insert into t (id,a) values (322,50);
+insert into t (id,a) values (322,51);
+insert into t (id,a) values (322,52);
+insert into t (id,a) values (322,53);
+insert into t (id,a) values (322,54);
+insert into t (id,a) values (322,55);
+insert into t (id,a) values (322,56);
+insert into t (id,a) values (322,57);
+insert into t (id,a) values (322,58);
+insert into t (id,a) values (322,59);
+insert into t (id,a) values (322,60);
+insert into t (id,a) values (322,61);
+insert into t (id,a) values (322,62);
+insert into t (id,a) values (322,63);
+insert into t (id,a) values (322,64);
+insert into t (id,a) values (322,65);
+insert into t (id,a) values (322,66);
+insert into t (id,a) values (322,67);
+insert into t (id,a) values (322,68);
+insert into t (id,a) values (322,69);
+insert into t (id,a) values (322,70);
+insert into t (id,a) values (322,71);
+insert into t (id,a) values (322,72);
+insert into t (id,a) values (322,73);
+insert into t (id,a) values (322,74);
+insert into t (id,a) values (322,75);
+insert into t (id,a) values (322,76);
+insert into t (id,a) values (322,77);
+insert into t (id,a) values (322,78);
+insert into t (id,a) values (322,79);
+insert into t (id,a) values (322,80);
+insert into t (id,a) values (322,81);
+insert into t (id,a) values (322,82);
+insert into t (id,a) values (322,83);
+insert into t (id,a) values (322,84);
+insert into t (id,a) values (322,85);
+insert into t (id,a) values (322,86);
+insert into t (id,a) values (322,87);
+insert into t (id,a) values (322,88);
+insert into t (id,a) values (322,89);
+insert into t (id,a) values (322,90);
+insert into t (id,a) values (322,91);
+insert into t (id,a) values (322,92);
+insert into t (id,a) values (322,93);
+insert into t (id,a) values (322,94);
+insert into t (id,a) values (322,95);
+insert into t (id,a) values (322,96);
+insert into t (id,a) values (322,97);
+insert into t (id,a) values (322,98);
+insert into t (id,a) values (322,99);
+insert into t (id,a) values (323,0);
+insert into t (id,a) values (323,1);
+insert into t (id,a) values (323,2);
+insert into t (id,a) values (323,3);
+insert into t (id,a) values (323,4);
+insert into t (id,a) values (323,5);
+insert into t (id,a) values (323,6);
+insert into t (id,a) values (323,7);
+insert into t (id,a) values (323,8);
+insert into t (id,a) values (323,9);
+insert into t (id,a) values (323,10);
+insert into t (id,a) values (323,11);
+insert into t (id,a) values (323,12);
+insert into t (id,a) values (323,13);
+insert into t (id,a) values (323,14);
+insert into t (id,a) values (323,15);
+insert into t (id,a) values (323,16);
+insert into t (id,a) values (323,17);
+insert into t (id,a) values (323,18);
+insert into t (id,a) values (323,19);
+insert into t (id,a) values (323,20);
+insert into t (id,a) values (323,21);
+insert into t (id,a) values (323,22);
+insert into t (id,a) values (323,23);
+insert into t (id,a) values (323,24);
+insert into t (id,a) values (323,25);
+insert into t (id,a) values (323,26);
+insert into t (id,a) values (323,27);
+insert into t (id,a) values (323,28);
+insert into t (id,a) values (323,29);
+insert into t (id,a) values (323,30);
+insert into t (id,a) values (323,31);
+insert into t (id,a) values (323,32);
+insert into t (id,a) values (323,33);
+insert into t (id,a) values (323,34);
+insert into t (id,a) values (323,35);
+insert into t (id,a) values (323,36);
+insert into t (id,a) values (323,37);
+insert into t (id,a) values (323,38);
+insert into t (id,a) values (323,39);
+insert into t (id,a) values (323,40);
+insert into t (id,a) values (323,41);
+insert into t (id,a) values (323,42);
+insert into t (id,a) values (323,43);
+insert into t (id,a) values (323,44);
+insert into t (id,a) values (323,45);
+insert into t (id,a) values (323,46);
+insert into t (id,a) values (323,47);
+insert into t (id,a) values (323,48);
+insert into t (id,a) values (323,49);
+insert into t (id,a) values (323,50);
+insert into t (id,a) values (323,51);
+insert into t (id,a) values (323,52);
+insert into t (id,a) values (323,53);
+insert into t (id,a) values (323,54);
+insert into t (id,a) values (323,55);
+insert into t (id,a) values (323,56);
+insert into t (id,a) values (323,57);
+insert into t (id,a) values (323,58);
+insert into t (id,a) values (323,59);
+insert into t (id,a) values (323,60);
+insert into t (id,a) values (323,61);
+insert into t (id,a) values (323,62);
+insert into t (id,a) values (323,63);
+insert into t (id,a) values (323,64);
+insert into t (id,a) values (323,65);
+insert into t (id,a) values (323,66);
+insert into t (id,a) values (323,67);
+insert into t (id,a) values (323,68);
+insert into t (id,a) values (323,69);
+insert into t (id,a) values (323,70);
+insert into t (id,a) values (323,71);
+insert into t (id,a) values (323,72);
+insert into t (id,a) values (323,73);
+insert into t (id,a) values (323,74);
+insert into t (id,a) values (323,75);
+insert into t (id,a) values (323,76);
+insert into t (id,a) values (323,77);
+insert into t (id,a) values (323,78);
+insert into t (id,a) values (323,79);
+insert into t (id,a) values (323,80);
+insert into t (id,a) values (323,81);
+insert into t (id,a) values (323,82);
+insert into t (id,a) values (323,83);
+insert into t (id,a) values (323,84);
+insert into t (id,a) values (323,85);
+insert into t (id,a) values (323,86);
+insert into t (id,a) values (323,87);
+insert into t (id,a) values (323,88);
+insert into t (id,a) values (323,89);
+insert into t (id,a) values (323,90);
+insert into t (id,a) values (323,91);
+insert into t (id,a) values (323,92);
+insert into t (id,a) values (323,93);
+insert into t (id,a) values (323,94);
+insert into t (id,a) values (323,95);
+insert into t (id,a) values (323,96);
+insert into t (id,a) values (323,97);
+insert into t (id,a) values (323,98);
+insert into t (id,a) values (323,99);
+insert into t (id,a) values (324,0);
+insert into t (id,a) values (324,1);
+insert into t (id,a) values (324,2);
+insert into t (id,a) values (324,3);
+insert into t (id,a) values (324,4);
+insert into t (id,a) values (324,5);
+insert into t (id,a) values (324,6);
+insert into t (id,a) values (324,7);
+insert into t (id,a) values (324,8);
+insert into t (id,a) values (324,9);
+insert into t (id,a) values (324,10);
+insert into t (id,a) values (324,11);
+insert into t (id,a) values (324,12);
+insert into t (id,a) values (324,13);
+insert into t (id,a) values (324,14);
+insert into t (id,a) values (324,15);
+insert into t (id,a) values (324,16);
+insert into t (id,a) values (324,17);
+insert into t (id,a) values (324,18);
+insert into t (id,a) values (324,19);
+insert into t (id,a) values (324,20);
+insert into t (id,a) values (324,21);
+insert into t (id,a) values (324,22);
+insert into t (id,a) values (324,23);
+insert into t (id,a) values (324,24);
+insert into t (id,a) values (324,25);
+insert into t (id,a) values (324,26);
+insert into t (id,a) values (324,27);
+insert into t (id,a) values (324,28);
+insert into t (id,a) values (324,29);
+insert into t (id,a) values (324,30);
+insert into t (id,a) values (324,31);
+insert into t (id,a) values (324,32);
+insert into t (id,a) values (324,33);
+insert into t (id,a) values (324,34);
+insert into t (id,a) values (324,35);
+insert into t (id,a) values (324,36);
+insert into t (id,a) values (324,37);
+insert into t (id,a) values (324,38);
+insert into t (id,a) values (324,39);
+insert into t (id,a) values (324,40);
+insert into t (id,a) values (324,41);
+insert into t (id,a) values (324,42);
+insert into t (id,a) values (324,43);
+insert into t (id,a) values (324,44);
+insert into t (id,a) values (324,45);
+insert into t (id,a) values (324,46);
+insert into t (id,a) values (324,47);
+insert into t (id,a) values (324,48);
+insert into t (id,a) values (324,49);
+insert into t (id,a) values (324,50);
+insert into t (id,a) values (324,51);
+insert into t (id,a) values (324,52);
+insert into t (id,a) values (324,53);
+insert into t (id,a) values (324,54);
+insert into t (id,a) values (324,55);
+insert into t (id,a) values (324,56);
+insert into t (id,a) values (324,57);
+insert into t (id,a) values (324,58);
+insert into t (id,a) values (324,59);
+insert into t (id,a) values (324,60);
+insert into t (id,a) values (324,61);
+insert into t (id,a) values (324,62);
+insert into t (id,a) values (324,63);
+insert into t (id,a) values (324,64);
+insert into t (id,a) values (324,65);
+insert into t (id,a) values (324,66);
+insert into t (id,a) values (324,67);
+insert into t (id,a) values (324,68);
+insert into t (id,a) values (324,69);
+insert into t (id,a) values (324,70);
+insert into t (id,a) values (324,71);
+insert into t (id,a) values (324,72);
+insert into t (id,a) values (324,73);
+insert into t (id,a) values (324,74);
+insert into t (id,a) values (324,75);
+insert into t (id,a) values (324,76);
+insert into t (id,a) values (324,77);
+insert into t (id,a) values (324,78);
+insert into t (id,a) values (324,79);
+insert into t (id,a) values (324,80);
+insert into t (id,a) values (324,81);
+insert into t (id,a) values (324,82);
+insert into t (id,a) values (324,83);
+insert into t (id,a) values (324,84);
+insert into t (id,a) values (324,85);
+insert into t (id,a) values (324,86);
+insert into t (id,a) values (324,87);
+insert into t (id,a) values (324,88);
+insert into t (id,a) values (324,89);
+insert into t (id,a) values (324,90);
+insert into t (id,a) values (324,91);
+insert into t (id,a) values (324,92);
+insert into t (id,a) values (324,93);
+insert into t (id,a) values (324,94);
+insert into t (id,a) values (324,95);
+insert into t (id,a) values (324,96);
+insert into t (id,a) values (324,97);
+insert into t (id,a) values (324,98);
+insert into t (id,a) values (324,99);
+insert into t (id,a) values (325,0);
+insert into t (id,a) values (325,1);
+insert into t (id,a) values (325,2);
+insert into t (id,a) values (325,3);
+insert into t (id,a) values (325,4);
+insert into t (id,a) values (325,5);
+insert into t (id,a) values (325,6);
+insert into t (id,a) values (325,7);
+insert into t (id,a) values (325,8);
+insert into t (id,a) values (325,9);
+insert into t (id,a) values (325,10);
+insert into t (id,a) values (325,11);
+insert into t (id,a) values (325,12);
+insert into t (id,a) values (325,13);
+insert into t (id,a) values (325,14);
+insert into t (id,a) values (325,15);
+insert into t (id,a) values (325,16);
+insert into t (id,a) values (325,17);
+insert into t (id,a) values (325,18);
+insert into t (id,a) values (325,19);
+insert into t (id,a) values (325,20);
+insert into t (id,a) values (325,21);
+insert into t (id,a) values (325,22);
+insert into t (id,a) values (325,23);
+insert into t (id,a) values (325,24);
+insert into t (id,a) values (325,25);
+insert into t (id,a) values (325,26);
+insert into t (id,a) values (325,27);
+insert into t (id,a) values (325,28);
+insert into t (id,a) values (325,29);
+insert into t (id,a) values (325,30);
+insert into t (id,a) values (325,31);
+insert into t (id,a) values (325,32);
+insert into t (id,a) values (325,33);
+insert into t (id,a) values (325,34);
+insert into t (id,a) values (325,35);
+insert into t (id,a) values (325,36);
+insert into t (id,a) values (325,37);
+insert into t (id,a) values (325,38);
+insert into t (id,a) values (325,39);
+insert into t (id,a) values (325,40);
+insert into t (id,a) values (325,41);
+insert into t (id,a) values (325,42);
+insert into t (id,a) values (325,43);
+insert into t (id,a) values (325,44);
+insert into t (id,a) values (325,45);
+insert into t (id,a) values (325,46);
+insert into t (id,a) values (325,47);
+insert into t (id,a) values (325,48);
+insert into t (id,a) values (325,49);
+insert into t (id,a) values (325,50);
+insert into t (id,a) values (325,51);
+insert into t (id,a) values (325,52);
+insert into t (id,a) values (325,53);
+insert into t (id,a) values (325,54);
+insert into t (id,a) values (325,55);
+insert into t (id,a) values (325,56);
+insert into t (id,a) values (325,57);
+insert into t (id,a) values (325,58);
+insert into t (id,a) values (325,59);
+insert into t (id,a) values (325,60);
+insert into t (id,a) values (325,61);
+insert into t (id,a) values (325,62);
+insert into t (id,a) values (325,63);
+insert into t (id,a) values (325,64);
+insert into t (id,a) values (325,65);
+insert into t (id,a) values (325,66);
+insert into t (id,a) values (325,67);
+insert into t (id,a) values (325,68);
+insert into t (id,a) values (325,69);
+insert into t (id,a) values (325,70);
+insert into t (id,a) values (325,71);
+insert into t (id,a) values (325,72);
+insert into t (id,a) values (325,73);
+insert into t (id,a) values (325,74);
+insert into t (id,a) values (325,75);
+insert into t (id,a) values (325,76);
+insert into t (id,a) values (325,77);
+insert into t (id,a) values (325,78);
+insert into t (id,a) values (325,79);
+insert into t (id,a) values (325,80);
+insert into t (id,a) values (325,81);
+insert into t (id,a) values (325,82);
+insert into t (id,a) values (325,83);
+insert into t (id,a) values (325,84);
+insert into t (id,a) values (325,85);
+insert into t (id,a) values (325,86);
+insert into t (id,a) values (325,87);
+insert into t (id,a) values (325,88);
+insert into t (id,a) values (325,89);
+insert into t (id,a) values (325,90);
+insert into t (id,a) values (325,91);
+insert into t (id,a) values (325,92);
+insert into t (id,a) values (325,93);
+insert into t (id,a) values (325,94);
+insert into t (id,a) values (325,95);
+insert into t (id,a) values (325,96);
+insert into t (id,a) values (325,97);
+insert into t (id,a) values (325,98);
+insert into t (id,a) values (325,99);
+insert into t (id,a) values (326,0);
+insert into t (id,a) values (326,1);
+insert into t (id,a) values (326,2);
+insert into t (id,a) values (326,3);
+insert into t (id,a) values (326,4);
+insert into t (id,a) values (326,5);
+insert into t (id,a) values (326,6);
+insert into t (id,a) values (326,7);
+insert into t (id,a) values (326,8);
+insert into t (id,a) values (326,9);
+insert into t (id,a) values (326,10);
+insert into t (id,a) values (326,11);
+insert into t (id,a) values (326,12);
+insert into t (id,a) values (326,13);
+insert into t (id,a) values (326,14);
+insert into t (id,a) values (326,15);
+insert into t (id,a) values (326,16);
+insert into t (id,a) values (326,17);
+insert into t (id,a) values (326,18);
+insert into t (id,a) values (326,19);
+insert into t (id,a) values (326,20);
+insert into t (id,a) values (326,21);
+insert into t (id,a) values (326,22);
+insert into t (id,a) values (326,23);
+insert into t (id,a) values (326,24);
+insert into t (id,a) values (326,25);
+insert into t (id,a) values (326,26);
+insert into t (id,a) values (326,27);
+insert into t (id,a) values (326,28);
+insert into t (id,a) values (326,29);
+insert into t (id,a) values (326,30);
+insert into t (id,a) values (326,31);
+insert into t (id,a) values (326,32);
+insert into t (id,a) values (326,33);
+insert into t (id,a) values (326,34);
+insert into t (id,a) values (326,35);
+insert into t (id,a) values (326,36);
+insert into t (id,a) values (326,37);
+insert into t (id,a) values (326,38);
+insert into t (id,a) values (326,39);
+insert into t (id,a) values (326,40);
+insert into t (id,a) values (326,41);
+insert into t (id,a) values (326,42);
+insert into t (id,a) values (326,43);
+insert into t (id,a) values (326,44);
+insert into t (id,a) values (326,45);
+insert into t (id,a) values (326,46);
+insert into t (id,a) values (326,47);
+insert into t (id,a) values (326,48);
+insert into t (id,a) values (326,49);
+insert into t (id,a) values (326,50);
+insert into t (id,a) values (326,51);
+insert into t (id,a) values (326,52);
+insert into t (id,a) values (326,53);
+insert into t (id,a) values (326,54);
+insert into t (id,a) values (326,55);
+insert into t (id,a) values (326,56);
+insert into t (id,a) values (326,57);
+insert into t (id,a) values (326,58);
+insert into t (id,a) values (326,59);
+insert into t (id,a) values (326,60);
+insert into t (id,a) values (326,61);
+insert into t (id,a) values (326,62);
+insert into t (id,a) values (326,63);
+insert into t (id,a) values (326,64);
+insert into t (id,a) values (326,65);
+insert into t (id,a) values (326,66);
+insert into t (id,a) values (326,67);
+insert into t (id,a) values (326,68);
+insert into t (id,a) values (326,69);
+insert into t (id,a) values (326,70);
+insert into t (id,a) values (326,71);
+insert into t (id,a) values (326,72);
+insert into t (id,a) values (326,73);
+insert into t (id,a) values (326,74);
+insert into t (id,a) values (326,75);
+insert into t (id,a) values (326,76);
+insert into t (id,a) values (326,77);
+insert into t (id,a) values (326,78);
+insert into t (id,a) values (326,79);
+insert into t (id,a) values (326,80);
+insert into t (id,a) values (326,81);
+insert into t (id,a) values (326,82);
+insert into t (id,a) values (326,83);
+insert into t (id,a) values (326,84);
+insert into t (id,a) values (326,85);
+insert into t (id,a) values (326,86);
+insert into t (id,a) values (326,87);
+insert into t (id,a) values (326,88);
+insert into t (id,a) values (326,89);
+insert into t (id,a) values (326,90);
+insert into t (id,a) values (326,91);
+insert into t (id,a) values (326,92);
+insert into t (id,a) values (326,93);
+insert into t (id,a) values (326,94);
+insert into t (id,a) values (326,95);
+insert into t (id,a) values (326,96);
+insert into t (id,a) values (326,97);
+insert into t (id,a) values (326,98);
+insert into t (id,a) values (326,99);
+insert into t (id,a) values (327,0);
+insert into t (id,a) values (327,1);
+insert into t (id,a) values (327,2);
+insert into t (id,a) values (327,3);
+insert into t (id,a) values (327,4);
+insert into t (id,a) values (327,5);
+insert into t (id,a) values (327,6);
+insert into t (id,a) values (327,7);
+insert into t (id,a) values (327,8);
+insert into t (id,a) values (327,9);
+insert into t (id,a) values (327,10);
+insert into t (id,a) values (327,11);
+insert into t (id,a) values (327,12);
+insert into t (id,a) values (327,13);
+insert into t (id,a) values (327,14);
+insert into t (id,a) values (327,15);
+insert into t (id,a) values (327,16);
+insert into t (id,a) values (327,17);
+insert into t (id,a) values (327,18);
+insert into t (id,a) values (327,19);
+insert into t (id,a) values (327,20);
+insert into t (id,a) values (327,21);
+insert into t (id,a) values (327,22);
+insert into t (id,a) values (327,23);
+insert into t (id,a) values (327,24);
+insert into t (id,a) values (327,25);
+insert into t (id,a) values (327,26);
+insert into t (id,a) values (327,27);
+insert into t (id,a) values (327,28);
+insert into t (id,a) values (327,29);
+insert into t (id,a) values (327,30);
+insert into t (id,a) values (327,31);
+insert into t (id,a) values (327,32);
+insert into t (id,a) values (327,33);
+insert into t (id,a) values (327,34);
+insert into t (id,a) values (327,35);
+insert into t (id,a) values (327,36);
+insert into t (id,a) values (327,37);
+insert into t (id,a) values (327,38);
+insert into t (id,a) values (327,39);
+insert into t (id,a) values (327,40);
+insert into t (id,a) values (327,41);
+insert into t (id,a) values (327,42);
+insert into t (id,a) values (327,43);
+insert into t (id,a) values (327,44);
+insert into t (id,a) values (327,45);
+insert into t (id,a) values (327,46);
+insert into t (id,a) values (327,47);
+insert into t (id,a) values (327,48);
+insert into t (id,a) values (327,49);
+insert into t (id,a) values (327,50);
+insert into t (id,a) values (327,51);
+insert into t (id,a) values (327,52);
+insert into t (id,a) values (327,53);
+insert into t (id,a) values (327,54);
+insert into t (id,a) values (327,55);
+insert into t (id,a) values (327,56);
+insert into t (id,a) values (327,57);
+insert into t (id,a) values (327,58);
+insert into t (id,a) values (327,59);
+insert into t (id,a) values (327,60);
+insert into t (id,a) values (327,61);
+insert into t (id,a) values (327,62);
+insert into t (id,a) values (327,63);
+insert into t (id,a) values (327,64);
+insert into t (id,a) values (327,65);
+insert into t (id,a) values (327,66);
+insert into t (id,a) values (327,67);
+insert into t (id,a) values (327,68);
+insert into t (id,a) values (327,69);
+insert into t (id,a) values (327,70);
+insert into t (id,a) values (327,71);
+insert into t (id,a) values (327,72);
+insert into t (id,a) values (327,73);
+insert into t (id,a) values (327,74);
+insert into t (id,a) values (327,75);
+insert into t (id,a) values (327,76);
+insert into t (id,a) values (327,77);
+insert into t (id,a) values (327,78);
+insert into t (id,a) values (327,79);
+insert into t (id,a) values (327,80);
+insert into t (id,a) values (327,81);
+insert into t (id,a) values (327,82);
+insert into t (id,a) values (327,83);
+insert into t (id,a) values (327,84);
+insert into t (id,a) values (327,85);
+insert into t (id,a) values (327,86);
+insert into t (id,a) values (327,87);
+insert into t (id,a) values (327,88);
+insert into t (id,a) values (327,89);
+insert into t (id,a) values (327,90);
+insert into t (id,a) values (327,91);
+insert into t (id,a) values (327,92);
+insert into t (id,a) values (327,93);
+insert into t (id,a) values (327,94);
+insert into t (id,a) values (327,95);
+insert into t (id,a) values (327,96);
+insert into t (id,a) values (327,97);
+insert into t (id,a) values (327,98);
+insert into t (id,a) values (327,99);
+insert into t (id,a) values (328,0);
+insert into t (id,a) values (328,1);
+insert into t (id,a) values (328,2);
+insert into t (id,a) values (328,3);
+insert into t (id,a) values (328,4);
+insert into t (id,a) values (328,5);
+insert into t (id,a) values (328,6);
+insert into t (id,a) values (328,7);
+insert into t (id,a) values (328,8);
+insert into t (id,a) values (328,9);
+insert into t (id,a) values (328,10);
+insert into t (id,a) values (328,11);
+insert into t (id,a) values (328,12);
+insert into t (id,a) values (328,13);
+insert into t (id,a) values (328,14);
+insert into t (id,a) values (328,15);
+insert into t (id,a) values (328,16);
+insert into t (id,a) values (328,17);
+insert into t (id,a) values (328,18);
+insert into t (id,a) values (328,19);
+insert into t (id,a) values (328,20);
+insert into t (id,a) values (328,21);
+insert into t (id,a) values (328,22);
+insert into t (id,a) values (328,23);
+insert into t (id,a) values (328,24);
+insert into t (id,a) values (328,25);
+insert into t (id,a) values (328,26);
+insert into t (id,a) values (328,27);
+insert into t (id,a) values (328,28);
+insert into t (id,a) values (328,29);
+insert into t (id,a) values (328,30);
+insert into t (id,a) values (328,31);
+insert into t (id,a) values (328,32);
+insert into t (id,a) values (328,33);
+insert into t (id,a) values (328,34);
+insert into t (id,a) values (328,35);
+insert into t (id,a) values (328,36);
+insert into t (id,a) values (328,37);
+insert into t (id,a) values (328,38);
+insert into t (id,a) values (328,39);
+insert into t (id,a) values (328,40);
+insert into t (id,a) values (328,41);
+insert into t (id,a) values (328,42);
+insert into t (id,a) values (328,43);
+insert into t (id,a) values (328,44);
+insert into t (id,a) values (328,45);
+insert into t (id,a) values (328,46);
+insert into t (id,a) values (328,47);
+insert into t (id,a) values (328,48);
+insert into t (id,a) values (328,49);
+insert into t (id,a) values (328,50);
+insert into t (id,a) values (328,51);
+insert into t (id,a) values (328,52);
+insert into t (id,a) values (328,53);
+insert into t (id,a) values (328,54);
+insert into t (id,a) values (328,55);
+insert into t (id,a) values (328,56);
+insert into t (id,a) values (328,57);
+insert into t (id,a) values (328,58);
+insert into t (id,a) values (328,59);
+insert into t (id,a) values (328,60);
+insert into t (id,a) values (328,61);
+insert into t (id,a) values (328,62);
+insert into t (id,a) values (328,63);
+insert into t (id,a) values (328,64);
+insert into t (id,a) values (328,65);
+insert into t (id,a) values (328,66);
+insert into t (id,a) values (328,67);
+insert into t (id,a) values (328,68);
+insert into t (id,a) values (328,69);
+insert into t (id,a) values (328,70);
+insert into t (id,a) values (328,71);
+insert into t (id,a) values (328,72);
+insert into t (id,a) values (328,73);
+insert into t (id,a) values (328,74);
+insert into t (id,a) values (328,75);
+insert into t (id,a) values (328,76);
+insert into t (id,a) values (328,77);
+insert into t (id,a) values (328,78);
+insert into t (id,a) values (328,79);
+insert into t (id,a) values (328,80);
+insert into t (id,a) values (328,81);
+insert into t (id,a) values (328,82);
+insert into t (id,a) values (328,83);
+insert into t (id,a) values (328,84);
+insert into t (id,a) values (328,85);
+insert into t (id,a) values (328,86);
+insert into t (id,a) values (328,87);
+insert into t (id,a) values (328,88);
+insert into t (id,a) values (328,89);
+insert into t (id,a) values (328,90);
+insert into t (id,a) values (328,91);
+insert into t (id,a) values (328,92);
+insert into t (id,a) values (328,93);
+insert into t (id,a) values (328,94);
+insert into t (id,a) values (328,95);
+insert into t (id,a) values (328,96);
+insert into t (id,a) values (328,97);
+insert into t (id,a) values (328,98);
+insert into t (id,a) values (328,99);
+insert into t (id,a) values (329,0);
+insert into t (id,a) values (329,1);
+insert into t (id,a) values (329,2);
+insert into t (id,a) values (329,3);
+insert into t (id,a) values (329,4);
+insert into t (id,a) values (329,5);
+insert into t (id,a) values (329,6);
+insert into t (id,a) values (329,7);
+insert into t (id,a) values (329,8);
+insert into t (id,a) values (329,9);
+insert into t (id,a) values (329,10);
+insert into t (id,a) values (329,11);
+insert into t (id,a) values (329,12);
+insert into t (id,a) values (329,13);
+insert into t (id,a) values (329,14);
+insert into t (id,a) values (329,15);
+insert into t (id,a) values (329,16);
+insert into t (id,a) values (329,17);
+insert into t (id,a) values (329,18);
+insert into t (id,a) values (329,19);
+insert into t (id,a) values (329,20);
+insert into t (id,a) values (329,21);
+insert into t (id,a) values (329,22);
+insert into t (id,a) values (329,23);
+insert into t (id,a) values (329,24);
+insert into t (id,a) values (329,25);
+insert into t (id,a) values (329,26);
+insert into t (id,a) values (329,27);
+insert into t (id,a) values (329,28);
+insert into t (id,a) values (329,29);
+insert into t (id,a) values (329,30);
+insert into t (id,a) values (329,31);
+insert into t (id,a) values (329,32);
+insert into t (id,a) values (329,33);
+insert into t (id,a) values (329,34);
+insert into t (id,a) values (329,35);
+insert into t (id,a) values (329,36);
+insert into t (id,a) values (329,37);
+insert into t (id,a) values (329,38);
+insert into t (id,a) values (329,39);
+insert into t (id,a) values (329,40);
+insert into t (id,a) values (329,41);
+insert into t (id,a) values (329,42);
+insert into t (id,a) values (329,43);
+insert into t (id,a) values (329,44);
+insert into t (id,a) values (329,45);
+insert into t (id,a) values (329,46);
+insert into t (id,a) values (329,47);
+insert into t (id,a) values (329,48);
+insert into t (id,a) values (329,49);
+insert into t (id,a) values (329,50);
+insert into t (id,a) values (329,51);
+insert into t (id,a) values (329,52);
+insert into t (id,a) values (329,53);
+insert into t (id,a) values (329,54);
+insert into t (id,a) values (329,55);
+insert into t (id,a) values (329,56);
+insert into t (id,a) values (329,57);
+insert into t (id,a) values (329,58);
+insert into t (id,a) values (329,59);
+insert into t (id,a) values (329,60);
+insert into t (id,a) values (329,61);
+insert into t (id,a) values (329,62);
+insert into t (id,a) values (329,63);
+insert into t (id,a) values (329,64);
+insert into t (id,a) values (329,65);
+insert into t (id,a) values (329,66);
+insert into t (id,a) values (329,67);
+insert into t (id,a) values (329,68);
+insert into t (id,a) values (329,69);
+insert into t (id,a) values (329,70);
+insert into t (id,a) values (329,71);
+insert into t (id,a) values (329,72);
+insert into t (id,a) values (329,73);
+insert into t (id,a) values (329,74);
+insert into t (id,a) values (329,75);
+insert into t (id,a) values (329,76);
+insert into t (id,a) values (329,77);
+insert into t (id,a) values (329,78);
+insert into t (id,a) values (329,79);
+insert into t (id,a) values (329,80);
+insert into t (id,a) values (329,81);
+insert into t (id,a) values (329,82);
+insert into t (id,a) values (329,83);
+insert into t (id,a) values (329,84);
+insert into t (id,a) values (329,85);
+insert into t (id,a) values (329,86);
+insert into t (id,a) values (329,87);
+insert into t (id,a) values (329,88);
+insert into t (id,a) values (329,89);
+insert into t (id,a) values (329,90);
+insert into t (id,a) values (329,91);
+insert into t (id,a) values (329,92);
+insert into t (id,a) values (329,93);
+insert into t (id,a) values (329,94);
+insert into t (id,a) values (329,95);
+insert into t (id,a) values (329,96);
+insert into t (id,a) values (329,97);
+insert into t (id,a) values (329,98);
+insert into t (id,a) values (329,99);
+insert into t (id,a) values (330,0);
+insert into t (id,a) values (330,1);
+insert into t (id,a) values (330,2);
+insert into t (id,a) values (330,3);
+insert into t (id,a) values (330,4);
+insert into t (id,a) values (330,5);
+insert into t (id,a) values (330,6);
+insert into t (id,a) values (330,7);
+insert into t (id,a) values (330,8);
+insert into t (id,a) values (330,9);
+insert into t (id,a) values (330,10);
+insert into t (id,a) values (330,11);
+insert into t (id,a) values (330,12);
+insert into t (id,a) values (330,13);
+insert into t (id,a) values (330,14);
+insert into t (id,a) values (330,15);
+insert into t (id,a) values (330,16);
+insert into t (id,a) values (330,17);
+insert into t (id,a) values (330,18);
+insert into t (id,a) values (330,19);
+insert into t (id,a) values (330,20);
+insert into t (id,a) values (330,21);
+insert into t (id,a) values (330,22);
+insert into t (id,a) values (330,23);
+insert into t (id,a) values (330,24);
+insert into t (id,a) values (330,25);
+insert into t (id,a) values (330,26);
+insert into t (id,a) values (330,27);
+insert into t (id,a) values (330,28);
+insert into t (id,a) values (330,29);
+insert into t (id,a) values (330,30);
+insert into t (id,a) values (330,31);
+insert into t (id,a) values (330,32);
+insert into t (id,a) values (330,33);
+insert into t (id,a) values (330,34);
+insert into t (id,a) values (330,35);
+insert into t (id,a) values (330,36);
+insert into t (id,a) values (330,37);
+insert into t (id,a) values (330,38);
+insert into t (id,a) values (330,39);
+insert into t (id,a) values (330,40);
+insert into t (id,a) values (330,41);
+insert into t (id,a) values (330,42);
+insert into t (id,a) values (330,43);
+insert into t (id,a) values (330,44);
+insert into t (id,a) values (330,45);
+insert into t (id,a) values (330,46);
+insert into t (id,a) values (330,47);
+insert into t (id,a) values (330,48);
+insert into t (id,a) values (330,49);
+insert into t (id,a) values (330,50);
+insert into t (id,a) values (330,51);
+insert into t (id,a) values (330,52);
+insert into t (id,a) values (330,53);
+insert into t (id,a) values (330,54);
+insert into t (id,a) values (330,55);
+insert into t (id,a) values (330,56);
+insert into t (id,a) values (330,57);
+insert into t (id,a) values (330,58);
+insert into t (id,a) values (330,59);
+insert into t (id,a) values (330,60);
+insert into t (id,a) values (330,61);
+insert into t (id,a) values (330,62);
+insert into t (id,a) values (330,63);
+insert into t (id,a) values (330,64);
+insert into t (id,a) values (330,65);
+insert into t (id,a) values (330,66);
+insert into t (id,a) values (330,67);
+insert into t (id,a) values (330,68);
+insert into t (id,a) values (330,69);
+insert into t (id,a) values (330,70);
+insert into t (id,a) values (330,71);
+insert into t (id,a) values (330,72);
+insert into t (id,a) values (330,73);
+insert into t (id,a) values (330,74);
+insert into t (id,a) values (330,75);
+insert into t (id,a) values (330,76);
+insert into t (id,a) values (330,77);
+insert into t (id,a) values (330,78);
+insert into t (id,a) values (330,79);
+insert into t (id,a) values (330,80);
+insert into t (id,a) values (330,81);
+insert into t (id,a) values (330,82);
+insert into t (id,a) values (330,83);
+insert into t (id,a) values (330,84);
+insert into t (id,a) values (330,85);
+insert into t (id,a) values (330,86);
+insert into t (id,a) values (330,87);
+insert into t (id,a) values (330,88);
+insert into t (id,a) values (330,89);
+insert into t (id,a) values (330,90);
+insert into t (id,a) values (330,91);
+insert into t (id,a) values (330,92);
+insert into t (id,a) values (330,93);
+insert into t (id,a) values (330,94);
+insert into t (id,a) values (330,95);
+insert into t (id,a) values (330,96);
+insert into t (id,a) values (330,97);
+insert into t (id,a) values (330,98);
+insert into t (id,a) values (330,99);
+insert into t (id,a) values (331,0);
+insert into t (id,a) values (331,1);
+insert into t (id,a) values (331,2);
+insert into t (id,a) values (331,3);
+insert into t (id,a) values (331,4);
+insert into t (id,a) values (331,5);
+insert into t (id,a) values (331,6);
+insert into t (id,a) values (331,7);
+insert into t (id,a) values (331,8);
+insert into t (id,a) values (331,9);
+insert into t (id,a) values (331,10);
+insert into t (id,a) values (331,11);
+insert into t (id,a) values (331,12);
+insert into t (id,a) values (331,13);
+insert into t (id,a) values (331,14);
+insert into t (id,a) values (331,15);
+insert into t (id,a) values (331,16);
+insert into t (id,a) values (331,17);
+insert into t (id,a) values (331,18);
+insert into t (id,a) values (331,19);
+insert into t (id,a) values (331,20);
+insert into t (id,a) values (331,21);
+insert into t (id,a) values (331,22);
+insert into t (id,a) values (331,23);
+insert into t (id,a) values (331,24);
+insert into t (id,a) values (331,25);
+insert into t (id,a) values (331,26);
+insert into t (id,a) values (331,27);
+insert into t (id,a) values (331,28);
+insert into t (id,a) values (331,29);
+insert into t (id,a) values (331,30);
+insert into t (id,a) values (331,31);
+insert into t (id,a) values (331,32);
+insert into t (id,a) values (331,33);
+insert into t (id,a) values (331,34);
+insert into t (id,a) values (331,35);
+insert into t (id,a) values (331,36);
+insert into t (id,a) values (331,37);
+insert into t (id,a) values (331,38);
+insert into t (id,a) values (331,39);
+insert into t (id,a) values (331,40);
+insert into t (id,a) values (331,41);
+insert into t (id,a) values (331,42);
+insert into t (id,a) values (331,43);
+insert into t (id,a) values (331,44);
+insert into t (id,a) values (331,45);
+insert into t (id,a) values (331,46);
+insert into t (id,a) values (331,47);
+insert into t (id,a) values (331,48);
+insert into t (id,a) values (331,49);
+insert into t (id,a) values (331,50);
+insert into t (id,a) values (331,51);
+insert into t (id,a) values (331,52);
+insert into t (id,a) values (331,53);
+insert into t (id,a) values (331,54);
+insert into t (id,a) values (331,55);
+insert into t (id,a) values (331,56);
+insert into t (id,a) values (331,57);
+insert into t (id,a) values (331,58);
+insert into t (id,a) values (331,59);
+insert into t (id,a) values (331,60);
+insert into t (id,a) values (331,61);
+insert into t (id,a) values (331,62);
+insert into t (id,a) values (331,63);
+insert into t (id,a) values (331,64);
+insert into t (id,a) values (331,65);
+insert into t (id,a) values (331,66);
+insert into t (id,a) values (331,67);
+insert into t (id,a) values (331,68);
+insert into t (id,a) values (331,69);
+insert into t (id,a) values (331,70);
+insert into t (id,a) values (331,71);
+insert into t (id,a) values (331,72);
+insert into t (id,a) values (331,73);
+insert into t (id,a) values (331,74);
+insert into t (id,a) values (331,75);
+insert into t (id,a) values (331,76);
+insert into t (id,a) values (331,77);
+insert into t (id,a) values (331,78);
+insert into t (id,a) values (331,79);
+insert into t (id,a) values (331,80);
+insert into t (id,a) values (331,81);
+insert into t (id,a) values (331,82);
+insert into t (id,a) values (331,83);
+insert into t (id,a) values (331,84);
+insert into t (id,a) values (331,85);
+insert into t (id,a) values (331,86);
+insert into t (id,a) values (331,87);
+insert into t (id,a) values (331,88);
+insert into t (id,a) values (331,89);
+insert into t (id,a) values (331,90);
+insert into t (id,a) values (331,91);
+insert into t (id,a) values (331,92);
+insert into t (id,a) values (331,93);
+insert into t (id,a) values (331,94);
+insert into t (id,a) values (331,95);
+insert into t (id,a) values (331,96);
+insert into t (id,a) values (331,97);
+insert into t (id,a) values (331,98);
+insert into t (id,a) values (331,99);
+insert into t (id,a) values (332,0);
+insert into t (id,a) values (332,1);
+insert into t (id,a) values (332,2);
+insert into t (id,a) values (332,3);
+insert into t (id,a) values (332,4);
+insert into t (id,a) values (332,5);
+insert into t (id,a) values (332,6);
+insert into t (id,a) values (332,7);
+insert into t (id,a) values (332,8);
+insert into t (id,a) values (332,9);
+insert into t (id,a) values (332,10);
+insert into t (id,a) values (332,11);
+insert into t (id,a) values (332,12);
+insert into t (id,a) values (332,13);
+insert into t (id,a) values (332,14);
+insert into t (id,a) values (332,15);
+insert into t (id,a) values (332,16);
+insert into t (id,a) values (332,17);
+insert into t (id,a) values (332,18);
+insert into t (id,a) values (332,19);
+insert into t (id,a) values (332,20);
+insert into t (id,a) values (332,21);
+insert into t (id,a) values (332,22);
+insert into t (id,a) values (332,23);
+insert into t (id,a) values (332,24);
+insert into t (id,a) values (332,25);
+insert into t (id,a) values (332,26);
+insert into t (id,a) values (332,27);
+insert into t (id,a) values (332,28);
+insert into t (id,a) values (332,29);
+insert into t (id,a) values (332,30);
+insert into t (id,a) values (332,31);
+insert into t (id,a) values (332,32);
+insert into t (id,a) values (332,33);
+insert into t (id,a) values (332,34);
+insert into t (id,a) values (332,35);
+insert into t (id,a) values (332,36);
+insert into t (id,a) values (332,37);
+insert into t (id,a) values (332,38);
+insert into t (id,a) values (332,39);
+insert into t (id,a) values (332,40);
+insert into t (id,a) values (332,41);
+insert into t (id,a) values (332,42);
+insert into t (id,a) values (332,43);
+insert into t (id,a) values (332,44);
+insert into t (id,a) values (332,45);
+insert into t (id,a) values (332,46);
+insert into t (id,a) values (332,47);
+insert into t (id,a) values (332,48);
+insert into t (id,a) values (332,49);
+insert into t (id,a) values (332,50);
+insert into t (id,a) values (332,51);
+insert into t (id,a) values (332,52);
+insert into t (id,a) values (332,53);
+insert into t (id,a) values (332,54);
+insert into t (id,a) values (332,55);
+insert into t (id,a) values (332,56);
+insert into t (id,a) values (332,57);
+insert into t (id,a) values (332,58);
+insert into t (id,a) values (332,59);
+insert into t (id,a) values (332,60);
+insert into t (id,a) values (332,61);
+insert into t (id,a) values (332,62);
+insert into t (id,a) values (332,63);
+insert into t (id,a) values (332,64);
+insert into t (id,a) values (332,65);
+insert into t (id,a) values (332,66);
+insert into t (id,a) values (332,67);
+insert into t (id,a) values (332,68);
+insert into t (id,a) values (332,69);
+insert into t (id,a) values (332,70);
+insert into t (id,a) values (332,71);
+insert into t (id,a) values (332,72);
+insert into t (id,a) values (332,73);
+insert into t (id,a) values (332,74);
+insert into t (id,a) values (332,75);
+insert into t (id,a) values (332,76);
+insert into t (id,a) values (332,77);
+insert into t (id,a) values (332,78);
+insert into t (id,a) values (332,79);
+insert into t (id,a) values (332,80);
+insert into t (id,a) values (332,81);
+insert into t (id,a) values (332,82);
+insert into t (id,a) values (332,83);
+insert into t (id,a) values (332,84);
+insert into t (id,a) values (332,85);
+insert into t (id,a) values (332,86);
+insert into t (id,a) values (332,87);
+insert into t (id,a) values (332,88);
+insert into t (id,a) values (332,89);
+insert into t (id,a) values (332,90);
+insert into t (id,a) values (332,91);
+insert into t (id,a) values (332,92);
+insert into t (id,a) values (332,93);
+insert into t (id,a) values (332,94);
+insert into t (id,a) values (332,95);
+insert into t (id,a) values (332,96);
+insert into t (id,a) values (332,97);
+insert into t (id,a) values (332,98);
+insert into t (id,a) values (332,99);
+insert into t (id,a) values (333,0);
+insert into t (id,a) values (333,1);
+insert into t (id,a) values (333,2);
+insert into t (id,a) values (333,3);
+insert into t (id,a) values (333,4);
+insert into t (id,a) values (333,5);
+insert into t (id,a) values (333,6);
+insert into t (id,a) values (333,7);
+insert into t (id,a) values (333,8);
+insert into t (id,a) values (333,9);
+insert into t (id,a) values (333,10);
+insert into t (id,a) values (333,11);
+insert into t (id,a) values (333,12);
+insert into t (id,a) values (333,13);
+insert into t (id,a) values (333,14);
+insert into t (id,a) values (333,15);
+insert into t (id,a) values (333,16);
+insert into t (id,a) values (333,17);
+insert into t (id,a) values (333,18);
+insert into t (id,a) values (333,19);
+insert into t (id,a) values (333,20);
+insert into t (id,a) values (333,21);
+insert into t (id,a) values (333,22);
+insert into t (id,a) values (333,23);
+insert into t (id,a) values (333,24);
+insert into t (id,a) values (333,25);
+insert into t (id,a) values (333,26);
+insert into t (id,a) values (333,27);
+insert into t (id,a) values (333,28);
+insert into t (id,a) values (333,29);
+insert into t (id,a) values (333,30);
+insert into t (id,a) values (333,31);
+insert into t (id,a) values (333,32);
+insert into t (id,a) values (333,33);
+insert into t (id,a) values (333,34);
+insert into t (id,a) values (333,35);
+insert into t (id,a) values (333,36);
+insert into t (id,a) values (333,37);
+insert into t (id,a) values (333,38);
+insert into t (id,a) values (333,39);
+insert into t (id,a) values (333,40);
+insert into t (id,a) values (333,41);
+insert into t (id,a) values (333,42);
+insert into t (id,a) values (333,43);
+insert into t (id,a) values (333,44);
+insert into t (id,a) values (333,45);
+insert into t (id,a) values (333,46);
+insert into t (id,a) values (333,47);
+insert into t (id,a) values (333,48);
+insert into t (id,a) values (333,49);
+insert into t (id,a) values (333,50);
+insert into t (id,a) values (333,51);
+insert into t (id,a) values (333,52);
+insert into t (id,a) values (333,53);
+insert into t (id,a) values (333,54);
+insert into t (id,a) values (333,55);
+insert into t (id,a) values (333,56);
+insert into t (id,a) values (333,57);
+insert into t (id,a) values (333,58);
+insert into t (id,a) values (333,59);
+insert into t (id,a) values (333,60);
+insert into t (id,a) values (333,61);
+insert into t (id,a) values (333,62);
+insert into t (id,a) values (333,63);
+insert into t (id,a) values (333,64);
+insert into t (id,a) values (333,65);
+insert into t (id,a) values (333,66);
+insert into t (id,a) values (333,67);
+insert into t (id,a) values (333,68);
+insert into t (id,a) values (333,69);
+insert into t (id,a) values (333,70);
+insert into t (id,a) values (333,71);
+insert into t (id,a) values (333,72);
+insert into t (id,a) values (333,73);
+insert into t (id,a) values (333,74);
+insert into t (id,a) values (333,75);
+insert into t (id,a) values (333,76);
+insert into t (id,a) values (333,77);
+insert into t (id,a) values (333,78);
+insert into t (id,a) values (333,79);
+insert into t (id,a) values (333,80);
+insert into t (id,a) values (333,81);
+insert into t (id,a) values (333,82);
+insert into t (id,a) values (333,83);
+insert into t (id,a) values (333,84);
+insert into t (id,a) values (333,85);
+insert into t (id,a) values (333,86);
+insert into t (id,a) values (333,87);
+insert into t (id,a) values (333,88);
+insert into t (id,a) values (333,89);
+insert into t (id,a) values (333,90);
+insert into t (id,a) values (333,91);
+insert into t (id,a) values (333,92);
+insert into t (id,a) values (333,93);
+insert into t (id,a) values (333,94);
+insert into t (id,a) values (333,95);
+insert into t (id,a) values (333,96);
+insert into t (id,a) values (333,97);
+insert into t (id,a) values (333,98);
+insert into t (id,a) values (333,99);
+insert into t (id,a) values (334,0);
+insert into t (id,a) values (334,1);
+insert into t (id,a) values (334,2);
+insert into t (id,a) values (334,3);
+insert into t (id,a) values (334,4);
+insert into t (id,a) values (334,5);
+insert into t (id,a) values (334,6);
+insert into t (id,a) values (334,7);
+insert into t (id,a) values (334,8);
+insert into t (id,a) values (334,9);
+insert into t (id,a) values (334,10);
+insert into t (id,a) values (334,11);
+insert into t (id,a) values (334,12);
+insert into t (id,a) values (334,13);
+insert into t (id,a) values (334,14);
+insert into t (id,a) values (334,15);
+insert into t (id,a) values (334,16);
+insert into t (id,a) values (334,17);
+insert into t (id,a) values (334,18);
+insert into t (id,a) values (334,19);
+insert into t (id,a) values (334,20);
+insert into t (id,a) values (334,21);
+insert into t (id,a) values (334,22);
+insert into t (id,a) values (334,23);
+insert into t (id,a) values (334,24);
+insert into t (id,a) values (334,25);
+insert into t (id,a) values (334,26);
+insert into t (id,a) values (334,27);
+insert into t (id,a) values (334,28);
+insert into t (id,a) values (334,29);
+insert into t (id,a) values (334,30);
+insert into t (id,a) values (334,31);
+insert into t (id,a) values (334,32);
+insert into t (id,a) values (334,33);
+insert into t (id,a) values (334,34);
+insert into t (id,a) values (334,35);
+insert into t (id,a) values (334,36);
+insert into t (id,a) values (334,37);
+insert into t (id,a) values (334,38);
+insert into t (id,a) values (334,39);
+insert into t (id,a) values (334,40);
+insert into t (id,a) values (334,41);
+insert into t (id,a) values (334,42);
+insert into t (id,a) values (334,43);
+insert into t (id,a) values (334,44);
+insert into t (id,a) values (334,45);
+insert into t (id,a) values (334,46);
+insert into t (id,a) values (334,47);
+insert into t (id,a) values (334,48);
+insert into t (id,a) values (334,49);
+insert into t (id,a) values (334,50);
+insert into t (id,a) values (334,51);
+insert into t (id,a) values (334,52);
+insert into t (id,a) values (334,53);
+insert into t (id,a) values (334,54);
+insert into t (id,a) values (334,55);
+insert into t (id,a) values (334,56);
+insert into t (id,a) values (334,57);
+insert into t (id,a) values (334,58);
+insert into t (id,a) values (334,59);
+insert into t (id,a) values (334,60);
+insert into t (id,a) values (334,61);
+insert into t (id,a) values (334,62);
+insert into t (id,a) values (334,63);
+insert into t (id,a) values (334,64);
+insert into t (id,a) values (334,65);
+insert into t (id,a) values (334,66);
+insert into t (id,a) values (334,67);
+insert into t (id,a) values (334,68);
+insert into t (id,a) values (334,69);
+insert into t (id,a) values (334,70);
+insert into t (id,a) values (334,71);
+insert into t (id,a) values (334,72);
+insert into t (id,a) values (334,73);
+insert into t (id,a) values (334,74);
+insert into t (id,a) values (334,75);
+insert into t (id,a) values (334,76);
+insert into t (id,a) values (334,77);
+insert into t (id,a) values (334,78);
+insert into t (id,a) values (334,79);
+insert into t (id,a) values (334,80);
+insert into t (id,a) values (334,81);
+insert into t (id,a) values (334,82);
+insert into t (id,a) values (334,83);
+insert into t (id,a) values (334,84);
+insert into t (id,a) values (334,85);
+insert into t (id,a) values (334,86);
+insert into t (id,a) values (334,87);
+insert into t (id,a) values (334,88);
+insert into t (id,a) values (334,89);
+insert into t (id,a) values (334,90);
+insert into t (id,a) values (334,91);
+insert into t (id,a) values (334,92);
+insert into t (id,a) values (334,93);
+insert into t (id,a) values (334,94);
+insert into t (id,a) values (334,95);
+insert into t (id,a) values (334,96);
+insert into t (id,a) values (334,97);
+insert into t (id,a) values (334,98);
+insert into t (id,a) values (334,99);
+insert into t (id,a) values (335,0);
+insert into t (id,a) values (335,1);
+insert into t (id,a) values (335,2);
+insert into t (id,a) values (335,3);
+insert into t (id,a) values (335,4);
+insert into t (id,a) values (335,5);
+insert into t (id,a) values (335,6);
+insert into t (id,a) values (335,7);
+insert into t (id,a) values (335,8);
+insert into t (id,a) values (335,9);
+insert into t (id,a) values (335,10);
+insert into t (id,a) values (335,11);
+insert into t (id,a) values (335,12);
+insert into t (id,a) values (335,13);
+insert into t (id,a) values (335,14);
+insert into t (id,a) values (335,15);
+insert into t (id,a) values (335,16);
+insert into t (id,a) values (335,17);
+insert into t (id,a) values (335,18);
+insert into t (id,a) values (335,19);
+insert into t (id,a) values (335,20);
+insert into t (id,a) values (335,21);
+insert into t (id,a) values (335,22);
+insert into t (id,a) values (335,23);
+insert into t (id,a) values (335,24);
+insert into t (id,a) values (335,25);
+insert into t (id,a) values (335,26);
+insert into t (id,a) values (335,27);
+insert into t (id,a) values (335,28);
+insert into t (id,a) values (335,29);
+insert into t (id,a) values (335,30);
+insert into t (id,a) values (335,31);
+insert into t (id,a) values (335,32);
+insert into t (id,a) values (335,33);
+insert into t (id,a) values (335,34);
+insert into t (id,a) values (335,35);
+insert into t (id,a) values (335,36);
+insert into t (id,a) values (335,37);
+insert into t (id,a) values (335,38);
+insert into t (id,a) values (335,39);
+insert into t (id,a) values (335,40);
+insert into t (id,a) values (335,41);
+insert into t (id,a) values (335,42);
+insert into t (id,a) values (335,43);
+insert into t (id,a) values (335,44);
+insert into t (id,a) values (335,45);
+insert into t (id,a) values (335,46);
+insert into t (id,a) values (335,47);
+insert into t (id,a) values (335,48);
+insert into t (id,a) values (335,49);
+insert into t (id,a) values (335,50);
+insert into t (id,a) values (335,51);
+insert into t (id,a) values (335,52);
+insert into t (id,a) values (335,53);
+insert into t (id,a) values (335,54);
+insert into t (id,a) values (335,55);
+insert into t (id,a) values (335,56);
+insert into t (id,a) values (335,57);
+insert into t (id,a) values (335,58);
+insert into t (id,a) values (335,59);
+insert into t (id,a) values (335,60);
+insert into t (id,a) values (335,61);
+insert into t (id,a) values (335,62);
+insert into t (id,a) values (335,63);
+insert into t (id,a) values (335,64);
+insert into t (id,a) values (335,65);
+insert into t (id,a) values (335,66);
+insert into t (id,a) values (335,67);
+insert into t (id,a) values (335,68);
+insert into t (id,a) values (335,69);
+insert into t (id,a) values (335,70);
+insert into t (id,a) values (335,71);
+insert into t (id,a) values (335,72);
+insert into t (id,a) values (335,73);
+insert into t (id,a) values (335,74);
+insert into t (id,a) values (335,75);
+insert into t (id,a) values (335,76);
+insert into t (id,a) values (335,77);
+insert into t (id,a) values (335,78);
+insert into t (id,a) values (335,79);
+insert into t (id,a) values (335,80);
+insert into t (id,a) values (335,81);
+insert into t (id,a) values (335,82);
+insert into t (id,a) values (335,83);
+insert into t (id,a) values (335,84);
+insert into t (id,a) values (335,85);
+insert into t (id,a) values (335,86);
+insert into t (id,a) values (335,87);
+insert into t (id,a) values (335,88);
+insert into t (id,a) values (335,89);
+insert into t (id,a) values (335,90);
+insert into t (id,a) values (335,91);
+insert into t (id,a) values (335,92);
+insert into t (id,a) values (335,93);
+insert into t (id,a) values (335,94);
+insert into t (id,a) values (335,95);
+insert into t (id,a) values (335,96);
+insert into t (id,a) values (335,97);
+insert into t (id,a) values (335,98);
+insert into t (id,a) values (335,99);
+insert into t (id,a) values (336,0);
+insert into t (id,a) values (336,1);
+insert into t (id,a) values (336,2);
+insert into t (id,a) values (336,3);
+insert into t (id,a) values (336,4);
+insert into t (id,a) values (336,5);
+insert into t (id,a) values (336,6);
+insert into t (id,a) values (336,7);
+insert into t (id,a) values (336,8);
+insert into t (id,a) values (336,9);
+insert into t (id,a) values (336,10);
+insert into t (id,a) values (336,11);
+insert into t (id,a) values (336,12);
+insert into t (id,a) values (336,13);
+insert into t (id,a) values (336,14);
+insert into t (id,a) values (336,15);
+insert into t (id,a) values (336,16);
+insert into t (id,a) values (336,17);
+insert into t (id,a) values (336,18);
+insert into t (id,a) values (336,19);
+insert into t (id,a) values (336,20);
+insert into t (id,a) values (336,21);
+insert into t (id,a) values (336,22);
+insert into t (id,a) values (336,23);
+insert into t (id,a) values (336,24);
+insert into t (id,a) values (336,25);
+insert into t (id,a) values (336,26);
+insert into t (id,a) values (336,27);
+insert into t (id,a) values (336,28);
+insert into t (id,a) values (336,29);
+insert into t (id,a) values (336,30);
+insert into t (id,a) values (336,31);
+insert into t (id,a) values (336,32);
+insert into t (id,a) values (336,33);
+insert into t (id,a) values (336,34);
+insert into t (id,a) values (336,35);
+insert into t (id,a) values (336,36);
+insert into t (id,a) values (336,37);
+insert into t (id,a) values (336,38);
+insert into t (id,a) values (336,39);
+insert into t (id,a) values (336,40);
+insert into t (id,a) values (336,41);
+insert into t (id,a) values (336,42);
+insert into t (id,a) values (336,43);
+insert into t (id,a) values (336,44);
+insert into t (id,a) values (336,45);
+insert into t (id,a) values (336,46);
+insert into t (id,a) values (336,47);
+insert into t (id,a) values (336,48);
+insert into t (id,a) values (336,49);
+insert into t (id,a) values (336,50);
+insert into t (id,a) values (336,51);
+insert into t (id,a) values (336,52);
+insert into t (id,a) values (336,53);
+insert into t (id,a) values (336,54);
+insert into t (id,a) values (336,55);
+insert into t (id,a) values (336,56);
+insert into t (id,a) values (336,57);
+insert into t (id,a) values (336,58);
+insert into t (id,a) values (336,59);
+insert into t (id,a) values (336,60);
+insert into t (id,a) values (336,61);
+insert into t (id,a) values (336,62);
+insert into t (id,a) values (336,63);
+insert into t (id,a) values (336,64);
+insert into t (id,a) values (336,65);
+insert into t (id,a) values (336,66);
+insert into t (id,a) values (336,67);
+insert into t (id,a) values (336,68);
+insert into t (id,a) values (336,69);
+insert into t (id,a) values (336,70);
+insert into t (id,a) values (336,71);
+insert into t (id,a) values (336,72);
+insert into t (id,a) values (336,73);
+insert into t (id,a) values (336,74);
+insert into t (id,a) values (336,75);
+insert into t (id,a) values (336,76);
+insert into t (id,a) values (336,77);
+insert into t (id,a) values (336,78);
+insert into t (id,a) values (336,79);
+insert into t (id,a) values (336,80);
+insert into t (id,a) values (336,81);
+insert into t (id,a) values (336,82);
+insert into t (id,a) values (336,83);
+insert into t (id,a) values (336,84);
+insert into t (id,a) values (336,85);
+insert into t (id,a) values (336,86);
+insert into t (id,a) values (336,87);
+insert into t (id,a) values (336,88);
+insert into t (id,a) values (336,89);
+insert into t (id,a) values (336,90);
+insert into t (id,a) values (336,91);
+insert into t (id,a) values (336,92);
+insert into t (id,a) values (336,93);
+insert into t (id,a) values (336,94);
+insert into t (id,a) values (336,95);
+insert into t (id,a) values (336,96);
+insert into t (id,a) values (336,97);
+insert into t (id,a) values (336,98);
+insert into t (id,a) values (336,99);
+insert into t (id,a) values (337,0);
+insert into t (id,a) values (337,1);
+insert into t (id,a) values (337,2);
+insert into t (id,a) values (337,3);
+insert into t (id,a) values (337,4);
+insert into t (id,a) values (337,5);
+insert into t (id,a) values (337,6);
+insert into t (id,a) values (337,7);
+insert into t (id,a) values (337,8);
+insert into t (id,a) values (337,9);
+insert into t (id,a) values (337,10);
+insert into t (id,a) values (337,11);
+insert into t (id,a) values (337,12);
+insert into t (id,a) values (337,13);
+insert into t (id,a) values (337,14);
+insert into t (id,a) values (337,15);
+insert into t (id,a) values (337,16);
+insert into t (id,a) values (337,17);
+insert into t (id,a) values (337,18);
+insert into t (id,a) values (337,19);
+insert into t (id,a) values (337,20);
+insert into t (id,a) values (337,21);
+insert into t (id,a) values (337,22);
+insert into t (id,a) values (337,23);
+insert into t (id,a) values (337,24);
+insert into t (id,a) values (337,25);
+insert into t (id,a) values (337,26);
+insert into t (id,a) values (337,27);
+insert into t (id,a) values (337,28);
+insert into t (id,a) values (337,29);
+insert into t (id,a) values (337,30);
+insert into t (id,a) values (337,31);
+insert into t (id,a) values (337,32);
+insert into t (id,a) values (337,33);
+insert into t (id,a) values (337,34);
+insert into t (id,a) values (337,35);
+insert into t (id,a) values (337,36);
+insert into t (id,a) values (337,37);
+insert into t (id,a) values (337,38);
+insert into t (id,a) values (337,39);
+insert into t (id,a) values (337,40);
+insert into t (id,a) values (337,41);
+insert into t (id,a) values (337,42);
+insert into t (id,a) values (337,43);
+insert into t (id,a) values (337,44);
+insert into t (id,a) values (337,45);
+insert into t (id,a) values (337,46);
+insert into t (id,a) values (337,47);
+insert into t (id,a) values (337,48);
+insert into t (id,a) values (337,49);
+insert into t (id,a) values (337,50);
+insert into t (id,a) values (337,51);
+insert into t (id,a) values (337,52);
+insert into t (id,a) values (337,53);
+insert into t (id,a) values (337,54);
+insert into t (id,a) values (337,55);
+insert into t (id,a) values (337,56);
+insert into t (id,a) values (337,57);
+insert into t (id,a) values (337,58);
+insert into t (id,a) values (337,59);
+insert into t (id,a) values (337,60);
+insert into t (id,a) values (337,61);
+insert into t (id,a) values (337,62);
+insert into t (id,a) values (337,63);
+insert into t (id,a) values (337,64);
+insert into t (id,a) values (337,65);
+insert into t (id,a) values (337,66);
+insert into t (id,a) values (337,67);
+insert into t (id,a) values (337,68);
+insert into t (id,a) values (337,69);
+insert into t (id,a) values (337,70);
+insert into t (id,a) values (337,71);
+insert into t (id,a) values (337,72);
+insert into t (id,a) values (337,73);
+insert into t (id,a) values (337,74);
+insert into t (id,a) values (337,75);
+insert into t (id,a) values (337,76);
+insert into t (id,a) values (337,77);
+insert into t (id,a) values (337,78);
+insert into t (id,a) values (337,79);
+insert into t (id,a) values (337,80);
+insert into t (id,a) values (337,81);
+insert into t (id,a) values (337,82);
+insert into t (id,a) values (337,83);
+insert into t (id,a) values (337,84);
+insert into t (id,a) values (337,85);
+insert into t (id,a) values (337,86);
+insert into t (id,a) values (337,87);
+insert into t (id,a) values (337,88);
+insert into t (id,a) values (337,89);
+insert into t (id,a) values (337,90);
+insert into t (id,a) values (337,91);
+insert into t (id,a) values (337,92);
+insert into t (id,a) values (337,93);
+insert into t (id,a) values (337,94);
+insert into t (id,a) values (337,95);
+insert into t (id,a) values (337,96);
+insert into t (id,a) values (337,97);
+insert into t (id,a) values (337,98);
+insert into t (id,a) values (337,99);
+insert into t (id,a) values (338,0);
+insert into t (id,a) values (338,1);
+insert into t (id,a) values (338,2);
+insert into t (id,a) values (338,3);
+insert into t (id,a) values (338,4);
+insert into t (id,a) values (338,5);
+insert into t (id,a) values (338,6);
+insert into t (id,a) values (338,7);
+insert into t (id,a) values (338,8);
+insert into t (id,a) values (338,9);
+insert into t (id,a) values (338,10);
+insert into t (id,a) values (338,11);
+insert into t (id,a) values (338,12);
+insert into t (id,a) values (338,13);
+insert into t (id,a) values (338,14);
+insert into t (id,a) values (338,15);
+insert into t (id,a) values (338,16);
+insert into t (id,a) values (338,17);
+insert into t (id,a) values (338,18);
+insert into t (id,a) values (338,19);
+insert into t (id,a) values (338,20);
+insert into t (id,a) values (338,21);
+insert into t (id,a) values (338,22);
+insert into t (id,a) values (338,23);
+insert into t (id,a) values (338,24);
+insert into t (id,a) values (338,25);
+insert into t (id,a) values (338,26);
+insert into t (id,a) values (338,27);
+insert into t (id,a) values (338,28);
+insert into t (id,a) values (338,29);
+insert into t (id,a) values (338,30);
+insert into t (id,a) values (338,31);
+insert into t (id,a) values (338,32);
+insert into t (id,a) values (338,33);
+insert into t (id,a) values (338,34);
+insert into t (id,a) values (338,35);
+insert into t (id,a) values (338,36);
+insert into t (id,a) values (338,37);
+insert into t (id,a) values (338,38);
+insert into t (id,a) values (338,39);
+insert into t (id,a) values (338,40);
+insert into t (id,a) values (338,41);
+insert into t (id,a) values (338,42);
+insert into t (id,a) values (338,43);
+insert into t (id,a) values (338,44);
+insert into t (id,a) values (338,45);
+insert into t (id,a) values (338,46);
+insert into t (id,a) values (338,47);
+insert into t (id,a) values (338,48);
+insert into t (id,a) values (338,49);
+insert into t (id,a) values (338,50);
+insert into t (id,a) values (338,51);
+insert into t (id,a) values (338,52);
+insert into t (id,a) values (338,53);
+insert into t (id,a) values (338,54);
+insert into t (id,a) values (338,55);
+insert into t (id,a) values (338,56);
+insert into t (id,a) values (338,57);
+insert into t (id,a) values (338,58);
+insert into t (id,a) values (338,59);
+insert into t (id,a) values (338,60);
+insert into t (id,a) values (338,61);
+insert into t (id,a) values (338,62);
+insert into t (id,a) values (338,63);
+insert into t (id,a) values (338,64);
+insert into t (id,a) values (338,65);
+insert into t (id,a) values (338,66);
+insert into t (id,a) values (338,67);
+insert into t (id,a) values (338,68);
+insert into t (id,a) values (338,69);
+insert into t (id,a) values (338,70);
+insert into t (id,a) values (338,71);
+insert into t (id,a) values (338,72);
+insert into t (id,a) values (338,73);
+insert into t (id,a) values (338,74);
+insert into t (id,a) values (338,75);
+insert into t (id,a) values (338,76);
+insert into t (id,a) values (338,77);
+insert into t (id,a) values (338,78);
+insert into t (id,a) values (338,79);
+insert into t (id,a) values (338,80);
+insert into t (id,a) values (338,81);
+insert into t (id,a) values (338,82);
+insert into t (id,a) values (338,83);
+insert into t (id,a) values (338,84);
+insert into t (id,a) values (338,85);
+insert into t (id,a) values (338,86);
+insert into t (id,a) values (338,87);
+insert into t (id,a) values (338,88);
+insert into t (id,a) values (338,89);
+insert into t (id,a) values (338,90);
+insert into t (id,a) values (338,91);
+insert into t (id,a) values (338,92);
+insert into t (id,a) values (338,93);
+insert into t (id,a) values (338,94);
+insert into t (id,a) values (338,95);
+insert into t (id,a) values (338,96);
+insert into t (id,a) values (338,97);
+insert into t (id,a) values (338,98);
+insert into t (id,a) values (338,99);
+insert into t (id,a) values (339,0);
+insert into t (id,a) values (339,1);
+insert into t (id,a) values (339,2);
+insert into t (id,a) values (339,3);
+insert into t (id,a) values (339,4);
+insert into t (id,a) values (339,5);
+insert into t (id,a) values (339,6);
+insert into t (id,a) values (339,7);
+insert into t (id,a) values (339,8);
+insert into t (id,a) values (339,9);
+insert into t (id,a) values (339,10);
+insert into t (id,a) values (339,11);
+insert into t (id,a) values (339,12);
+insert into t (id,a) values (339,13);
+insert into t (id,a) values (339,14);
+insert into t (id,a) values (339,15);
+insert into t (id,a) values (339,16);
+insert into t (id,a) values (339,17);
+insert into t (id,a) values (339,18);
+insert into t (id,a) values (339,19);
+insert into t (id,a) values (339,20);
+insert into t (id,a) values (339,21);
+insert into t (id,a) values (339,22);
+insert into t (id,a) values (339,23);
+insert into t (id,a) values (339,24);
+insert into t (id,a) values (339,25);
+insert into t (id,a) values (339,26);
+insert into t (id,a) values (339,27);
+insert into t (id,a) values (339,28);
+insert into t (id,a) values (339,29);
+insert into t (id,a) values (339,30);
+insert into t (id,a) values (339,31);
+insert into t (id,a) values (339,32);
+insert into t (id,a) values (339,33);
+insert into t (id,a) values (339,34);
+insert into t (id,a) values (339,35);
+insert into t (id,a) values (339,36);
+insert into t (id,a) values (339,37);
+insert into t (id,a) values (339,38);
+insert into t (id,a) values (339,39);
+insert into t (id,a) values (339,40);
+insert into t (id,a) values (339,41);
+insert into t (id,a) values (339,42);
+insert into t (id,a) values (339,43);
+insert into t (id,a) values (339,44);
+insert into t (id,a) values (339,45);
+insert into t (id,a) values (339,46);
+insert into t (id,a) values (339,47);
+insert into t (id,a) values (339,48);
+insert into t (id,a) values (339,49);
+insert into t (id,a) values (339,50);
+insert into t (id,a) values (339,51);
+insert into t (id,a) values (339,52);
+insert into t (id,a) values (339,53);
+insert into t (id,a) values (339,54);
+insert into t (id,a) values (339,55);
+insert into t (id,a) values (339,56);
+insert into t (id,a) values (339,57);
+insert into t (id,a) values (339,58);
+insert into t (id,a) values (339,59);
+insert into t (id,a) values (339,60);
+insert into t (id,a) values (339,61);
+insert into t (id,a) values (339,62);
+insert into t (id,a) values (339,63);
+insert into t (id,a) values (339,64);
+insert into t (id,a) values (339,65);
+insert into t (id,a) values (339,66);
+insert into t (id,a) values (339,67);
+insert into t (id,a) values (339,68);
+insert into t (id,a) values (339,69);
+insert into t (id,a) values (339,70);
+insert into t (id,a) values (339,71);
+insert into t (id,a) values (339,72);
+insert into t (id,a) values (339,73);
+insert into t (id,a) values (339,74);
+insert into t (id,a) values (339,75);
+insert into t (id,a) values (339,76);
+insert into t (id,a) values (339,77);
+insert into t (id,a) values (339,78);
+insert into t (id,a) values (339,79);
+insert into t (id,a) values (339,80);
+insert into t (id,a) values (339,81);
+insert into t (id,a) values (339,82);
+insert into t (id,a) values (339,83);
+insert into t (id,a) values (339,84);
+insert into t (id,a) values (339,85);
+insert into t (id,a) values (339,86);
+insert into t (id,a) values (339,87);
+insert into t (id,a) values (339,88);
+insert into t (id,a) values (339,89);
+insert into t (id,a) values (339,90);
+insert into t (id,a) values (339,91);
+insert into t (id,a) values (339,92);
+insert into t (id,a) values (339,93);
+insert into t (id,a) values (339,94);
+insert into t (id,a) values (339,95);
+insert into t (id,a) values (339,96);
+insert into t (id,a) values (339,97);
+insert into t (id,a) values (339,98);
+insert into t (id,a) values (339,99);
+insert into t (id,a) values (340,0);
+insert into t (id,a) values (340,1);
+insert into t (id,a) values (340,2);
+insert into t (id,a) values (340,3);
+insert into t (id,a) values (340,4);
+insert into t (id,a) values (340,5);
+insert into t (id,a) values (340,6);
+insert into t (id,a) values (340,7);
+insert into t (id,a) values (340,8);
+insert into t (id,a) values (340,9);
+insert into t (id,a) values (340,10);
+insert into t (id,a) values (340,11);
+insert into t (id,a) values (340,12);
+insert into t (id,a) values (340,13);
+insert into t (id,a) values (340,14);
+insert into t (id,a) values (340,15);
+insert into t (id,a) values (340,16);
+insert into t (id,a) values (340,17);
+insert into t (id,a) values (340,18);
+insert into t (id,a) values (340,19);
+insert into t (id,a) values (340,20);
+insert into t (id,a) values (340,21);
+insert into t (id,a) values (340,22);
+insert into t (id,a) values (340,23);
+insert into t (id,a) values (340,24);
+insert into t (id,a) values (340,25);
+insert into t (id,a) values (340,26);
+insert into t (id,a) values (340,27);
+insert into t (id,a) values (340,28);
+insert into t (id,a) values (340,29);
+insert into t (id,a) values (340,30);
+insert into t (id,a) values (340,31);
+insert into t (id,a) values (340,32);
+insert into t (id,a) values (340,33);
+insert into t (id,a) values (340,34);
+insert into t (id,a) values (340,35);
+insert into t (id,a) values (340,36);
+insert into t (id,a) values (340,37);
+insert into t (id,a) values (340,38);
+insert into t (id,a) values (340,39);
+insert into t (id,a) values (340,40);
+insert into t (id,a) values (340,41);
+insert into t (id,a) values (340,42);
+insert into t (id,a) values (340,43);
+insert into t (id,a) values (340,44);
+insert into t (id,a) values (340,45);
+insert into t (id,a) values (340,46);
+insert into t (id,a) values (340,47);
+insert into t (id,a) values (340,48);
+insert into t (id,a) values (340,49);
+insert into t (id,a) values (340,50);
+insert into t (id,a) values (340,51);
+insert into t (id,a) values (340,52);
+insert into t (id,a) values (340,53);
+insert into t (id,a) values (340,54);
+insert into t (id,a) values (340,55);
+insert into t (id,a) values (340,56);
+insert into t (id,a) values (340,57);
+insert into t (id,a) values (340,58);
+insert into t (id,a) values (340,59);
+insert into t (id,a) values (340,60);
+insert into t (id,a) values (340,61);
+insert into t (id,a) values (340,62);
+insert into t (id,a) values (340,63);
+insert into t (id,a) values (340,64);
+insert into t (id,a) values (340,65);
+insert into t (id,a) values (340,66);
+insert into t (id,a) values (340,67);
+insert into t (id,a) values (340,68);
+insert into t (id,a) values (340,69);
+insert into t (id,a) values (340,70);
+insert into t (id,a) values (340,71);
+insert into t (id,a) values (340,72);
+insert into t (id,a) values (340,73);
+insert into t (id,a) values (340,74);
+insert into t (id,a) values (340,75);
+insert into t (id,a) values (340,76);
+insert into t (id,a) values (340,77);
+insert into t (id,a) values (340,78);
+insert into t (id,a) values (340,79);
+insert into t (id,a) values (340,80);
+insert into t (id,a) values (340,81);
+insert into t (id,a) values (340,82);
+insert into t (id,a) values (340,83);
+insert into t (id,a) values (340,84);
+insert into t (id,a) values (340,85);
+insert into t (id,a) values (340,86);
+insert into t (id,a) values (340,87);
+insert into t (id,a) values (340,88);
+insert into t (id,a) values (340,89);
+insert into t (id,a) values (340,90);
+insert into t (id,a) values (340,91);
+insert into t (id,a) values (340,92);
+insert into t (id,a) values (340,93);
+insert into t (id,a) values (340,94);
+insert into t (id,a) values (340,95);
+insert into t (id,a) values (340,96);
+insert into t (id,a) values (340,97);
+insert into t (id,a) values (340,98);
+insert into t (id,a) values (340,99);
+insert into t (id,a) values (341,0);
+insert into t (id,a) values (341,1);
+insert into t (id,a) values (341,2);
+insert into t (id,a) values (341,3);
+insert into t (id,a) values (341,4);
+insert into t (id,a) values (341,5);
+insert into t (id,a) values (341,6);
+insert into t (id,a) values (341,7);
+insert into t (id,a) values (341,8);
+insert into t (id,a) values (341,9);
+insert into t (id,a) values (341,10);
+insert into t (id,a) values (341,11);
+insert into t (id,a) values (341,12);
+insert into t (id,a) values (341,13);
+insert into t (id,a) values (341,14);
+insert into t (id,a) values (341,15);
+insert into t (id,a) values (341,16);
+insert into t (id,a) values (341,17);
+insert into t (id,a) values (341,18);
+insert into t (id,a) values (341,19);
+insert into t (id,a) values (341,20);
+insert into t (id,a) values (341,21);
+insert into t (id,a) values (341,22);
+insert into t (id,a) values (341,23);
+insert into t (id,a) values (341,24);
+insert into t (id,a) values (341,25);
+insert into t (id,a) values (341,26);
+insert into t (id,a) values (341,27);
+insert into t (id,a) values (341,28);
+insert into t (id,a) values (341,29);
+insert into t (id,a) values (341,30);
+insert into t (id,a) values (341,31);
+insert into t (id,a) values (341,32);
+insert into t (id,a) values (341,33);
+insert into t (id,a) values (341,34);
+insert into t (id,a) values (341,35);
+insert into t (id,a) values (341,36);
+insert into t (id,a) values (341,37);
+insert into t (id,a) values (341,38);
+insert into t (id,a) values (341,39);
+insert into t (id,a) values (341,40);
+insert into t (id,a) values (341,41);
+insert into t (id,a) values (341,42);
+insert into t (id,a) values (341,43);
+insert into t (id,a) values (341,44);
+insert into t (id,a) values (341,45);
+insert into t (id,a) values (341,46);
+insert into t (id,a) values (341,47);
+insert into t (id,a) values (341,48);
+insert into t (id,a) values (341,49);
+insert into t (id,a) values (341,50);
+insert into t (id,a) values (341,51);
+insert into t (id,a) values (341,52);
+insert into t (id,a) values (341,53);
+insert into t (id,a) values (341,54);
+insert into t (id,a) values (341,55);
+insert into t (id,a) values (341,56);
+insert into t (id,a) values (341,57);
+insert into t (id,a) values (341,58);
+insert into t (id,a) values (341,59);
+insert into t (id,a) values (341,60);
+insert into t (id,a) values (341,61);
+insert into t (id,a) values (341,62);
+insert into t (id,a) values (341,63);
+insert into t (id,a) values (341,64);
+insert into t (id,a) values (341,65);
+insert into t (id,a) values (341,66);
+insert into t (id,a) values (341,67);
+insert into t (id,a) values (341,68);
+insert into t (id,a) values (341,69);
+insert into t (id,a) values (341,70);
+insert into t (id,a) values (341,71);
+insert into t (id,a) values (341,72);
+insert into t (id,a) values (341,73);
+insert into t (id,a) values (341,74);
+insert into t (id,a) values (341,75);
+insert into t (id,a) values (341,76);
+insert into t (id,a) values (341,77);
+insert into t (id,a) values (341,78);
+insert into t (id,a) values (341,79);
+insert into t (id,a) values (341,80);
+insert into t (id,a) values (341,81);
+insert into t (id,a) values (341,82);
+insert into t (id,a) values (341,83);
+insert into t (id,a) values (341,84);
+insert into t (id,a) values (341,85);
+insert into t (id,a) values (341,86);
+insert into t (id,a) values (341,87);
+insert into t (id,a) values (341,88);
+insert into t (id,a) values (341,89);
+insert into t (id,a) values (341,90);
+insert into t (id,a) values (341,91);
+insert into t (id,a) values (341,92);
+insert into t (id,a) values (341,93);
+insert into t (id,a) values (341,94);
+insert into t (id,a) values (341,95);
+insert into t (id,a) values (341,96);
+insert into t (id,a) values (341,97);
+insert into t (id,a) values (341,98);
+insert into t (id,a) values (341,99);
+insert into t (id,a) values (342,0);
+insert into t (id,a) values (342,1);
+insert into t (id,a) values (342,2);
+insert into t (id,a) values (342,3);
+insert into t (id,a) values (342,4);
+insert into t (id,a) values (342,5);
+insert into t (id,a) values (342,6);
+insert into t (id,a) values (342,7);
+insert into t (id,a) values (342,8);
+insert into t (id,a) values (342,9);
+insert into t (id,a) values (342,10);
+insert into t (id,a) values (342,11);
+insert into t (id,a) values (342,12);
+insert into t (id,a) values (342,13);
+insert into t (id,a) values (342,14);
+insert into t (id,a) values (342,15);
+insert into t (id,a) values (342,16);
+insert into t (id,a) values (342,17);
+insert into t (id,a) values (342,18);
+insert into t (id,a) values (342,19);
+insert into t (id,a) values (342,20);
+insert into t (id,a) values (342,21);
+insert into t (id,a) values (342,22);
+insert into t (id,a) values (342,23);
+insert into t (id,a) values (342,24);
+insert into t (id,a) values (342,25);
+insert into t (id,a) values (342,26);
+insert into t (id,a) values (342,27);
+insert into t (id,a) values (342,28);
+insert into t (id,a) values (342,29);
+insert into t (id,a) values (342,30);
+insert into t (id,a) values (342,31);
+insert into t (id,a) values (342,32);
+insert into t (id,a) values (342,33);
+insert into t (id,a) values (342,34);
+insert into t (id,a) values (342,35);
+insert into t (id,a) values (342,36);
+insert into t (id,a) values (342,37);
+insert into t (id,a) values (342,38);
+insert into t (id,a) values (342,39);
+insert into t (id,a) values (342,40);
+insert into t (id,a) values (342,41);
+insert into t (id,a) values (342,42);
+insert into t (id,a) values (342,43);
+insert into t (id,a) values (342,44);
+insert into t (id,a) values (342,45);
+insert into t (id,a) values (342,46);
+insert into t (id,a) values (342,47);
+insert into t (id,a) values (342,48);
+insert into t (id,a) values (342,49);
+insert into t (id,a) values (342,50);
+insert into t (id,a) values (342,51);
+insert into t (id,a) values (342,52);
+insert into t (id,a) values (342,53);
+insert into t (id,a) values (342,54);
+insert into t (id,a) values (342,55);
+insert into t (id,a) values (342,56);
+insert into t (id,a) values (342,57);
+insert into t (id,a) values (342,58);
+insert into t (id,a) values (342,59);
+insert into t (id,a) values (342,60);
+insert into t (id,a) values (342,61);
+insert into t (id,a) values (342,62);
+insert into t (id,a) values (342,63);
+insert into t (id,a) values (342,64);
+insert into t (id,a) values (342,65);
+insert into t (id,a) values (342,66);
+insert into t (id,a) values (342,67);
+insert into t (id,a) values (342,68);
+insert into t (id,a) values (342,69);
+insert into t (id,a) values (342,70);
+insert into t (id,a) values (342,71);
+insert into t (id,a) values (342,72);
+insert into t (id,a) values (342,73);
+insert into t (id,a) values (342,74);
+insert into t (id,a) values (342,75);
+insert into t (id,a) values (342,76);
+insert into t (id,a) values (342,77);
+insert into t (id,a) values (342,78);
+insert into t (id,a) values (342,79);
+insert into t (id,a) values (342,80);
+insert into t (id,a) values (342,81);
+insert into t (id,a) values (342,82);
+insert into t (id,a) values (342,83);
+insert into t (id,a) values (342,84);
+insert into t (id,a) values (342,85);
+insert into t (id,a) values (342,86);
+insert into t (id,a) values (342,87);
+insert into t (id,a) values (342,88);
+insert into t (id,a) values (342,89);
+insert into t (id,a) values (342,90);
+insert into t (id,a) values (342,91);
+insert into t (id,a) values (342,92);
+insert into t (id,a) values (342,93);
+insert into t (id,a) values (342,94);
+insert into t (id,a) values (342,95);
+insert into t (id,a) values (342,96);
+insert into t (id,a) values (342,97);
+insert into t (id,a) values (342,98);
+insert into t (id,a) values (342,99);
+insert into t (id,a) values (343,0);
+insert into t (id,a) values (343,1);
+insert into t (id,a) values (343,2);
+insert into t (id,a) values (343,3);
+insert into t (id,a) values (343,4);
+insert into t (id,a) values (343,5);
+insert into t (id,a) values (343,6);
+insert into t (id,a) values (343,7);
+insert into t (id,a) values (343,8);
+insert into t (id,a) values (343,9);
+insert into t (id,a) values (343,10);
+insert into t (id,a) values (343,11);
+insert into t (id,a) values (343,12);
+insert into t (id,a) values (343,13);
+insert into t (id,a) values (343,14);
+insert into t (id,a) values (343,15);
+insert into t (id,a) values (343,16);
+insert into t (id,a) values (343,17);
+insert into t (id,a) values (343,18);
+insert into t (id,a) values (343,19);
+insert into t (id,a) values (343,20);
+insert into t (id,a) values (343,21);
+insert into t (id,a) values (343,22);
+insert into t (id,a) values (343,23);
+insert into t (id,a) values (343,24);
+insert into t (id,a) values (343,25);
+insert into t (id,a) values (343,26);
+insert into t (id,a) values (343,27);
+insert into t (id,a) values (343,28);
+insert into t (id,a) values (343,29);
+insert into t (id,a) values (343,30);
+insert into t (id,a) values (343,31);
+insert into t (id,a) values (343,32);
+insert into t (id,a) values (343,33);
+insert into t (id,a) values (343,34);
+insert into t (id,a) values (343,35);
+insert into t (id,a) values (343,36);
+insert into t (id,a) values (343,37);
+insert into t (id,a) values (343,38);
+insert into t (id,a) values (343,39);
+insert into t (id,a) values (343,40);
+insert into t (id,a) values (343,41);
+insert into t (id,a) values (343,42);
+insert into t (id,a) values (343,43);
+insert into t (id,a) values (343,44);
+insert into t (id,a) values (343,45);
+insert into t (id,a) values (343,46);
+insert into t (id,a) values (343,47);
+insert into t (id,a) values (343,48);
+insert into t (id,a) values (343,49);
+insert into t (id,a) values (343,50);
+insert into t (id,a) values (343,51);
+insert into t (id,a) values (343,52);
+insert into t (id,a) values (343,53);
+insert into t (id,a) values (343,54);
+insert into t (id,a) values (343,55);
+insert into t (id,a) values (343,56);
+insert into t (id,a) values (343,57);
+insert into t (id,a) values (343,58);
+insert into t (id,a) values (343,59);
+insert into t (id,a) values (343,60);
+insert into t (id,a) values (343,61);
+insert into t (id,a) values (343,62);
+insert into t (id,a) values (343,63);
+insert into t (id,a) values (343,64);
+insert into t (id,a) values (343,65);
+insert into t (id,a) values (343,66);
+insert into t (id,a) values (343,67);
+insert into t (id,a) values (343,68);
+insert into t (id,a) values (343,69);
+insert into t (id,a) values (343,70);
+insert into t (id,a) values (343,71);
+insert into t (id,a) values (343,72);
+insert into t (id,a) values (343,73);
+insert into t (id,a) values (343,74);
+insert into t (id,a) values (343,75);
+insert into t (id,a) values (343,76);
+insert into t (id,a) values (343,77);
+insert into t (id,a) values (343,78);
+insert into t (id,a) values (343,79);
+insert into t (id,a) values (343,80);
+insert into t (id,a) values (343,81);
+insert into t (id,a) values (343,82);
+insert into t (id,a) values (343,83);
+insert into t (id,a) values (343,84);
+insert into t (id,a) values (343,85);
+insert into t (id,a) values (343,86);
+insert into t (id,a) values (343,87);
+insert into t (id,a) values (343,88);
+insert into t (id,a) values (343,89);
+insert into t (id,a) values (343,90);
+insert into t (id,a) values (343,91);
+insert into t (id,a) values (343,92);
+insert into t (id,a) values (343,93);
+insert into t (id,a) values (343,94);
+insert into t (id,a) values (343,95);
+insert into t (id,a) values (343,96);
+insert into t (id,a) values (343,97);
+insert into t (id,a) values (343,98);
+insert into t (id,a) values (343,99);
+insert into t (id,a) values (344,0);
+insert into t (id,a) values (344,1);
+insert into t (id,a) values (344,2);
+insert into t (id,a) values (344,3);
+insert into t (id,a) values (344,4);
+insert into t (id,a) values (344,5);
+insert into t (id,a) values (344,6);
+insert into t (id,a) values (344,7);
+insert into t (id,a) values (344,8);
+insert into t (id,a) values (344,9);
+insert into t (id,a) values (344,10);
+insert into t (id,a) values (344,11);
+insert into t (id,a) values (344,12);
+insert into t (id,a) values (344,13);
+insert into t (id,a) values (344,14);
+insert into t (id,a) values (344,15);
+insert into t (id,a) values (344,16);
+insert into t (id,a) values (344,17);
+insert into t (id,a) values (344,18);
+insert into t (id,a) values (344,19);
+insert into t (id,a) values (344,20);
+insert into t (id,a) values (344,21);
+insert into t (id,a) values (344,22);
+insert into t (id,a) values (344,23);
+insert into t (id,a) values (344,24);
+insert into t (id,a) values (344,25);
+insert into t (id,a) values (344,26);
+insert into t (id,a) values (344,27);
+insert into t (id,a) values (344,28);
+insert into t (id,a) values (344,29);
+insert into t (id,a) values (344,30);
+insert into t (id,a) values (344,31);
+insert into t (id,a) values (344,32);
+insert into t (id,a) values (344,33);
+insert into t (id,a) values (344,34);
+insert into t (id,a) values (344,35);
+insert into t (id,a) values (344,36);
+insert into t (id,a) values (344,37);
+insert into t (id,a) values (344,38);
+insert into t (id,a) values (344,39);
+insert into t (id,a) values (344,40);
+insert into t (id,a) values (344,41);
+insert into t (id,a) values (344,42);
+insert into t (id,a) values (344,43);
+insert into t (id,a) values (344,44);
+insert into t (id,a) values (344,45);
+insert into t (id,a) values (344,46);
+insert into t (id,a) values (344,47);
+insert into t (id,a) values (344,48);
+insert into t (id,a) values (344,49);
+insert into t (id,a) values (344,50);
+insert into t (id,a) values (344,51);
+insert into t (id,a) values (344,52);
+insert into t (id,a) values (344,53);
+insert into t (id,a) values (344,54);
+insert into t (id,a) values (344,55);
+insert into t (id,a) values (344,56);
+insert into t (id,a) values (344,57);
+insert into t (id,a) values (344,58);
+insert into t (id,a) values (344,59);
+insert into t (id,a) values (344,60);
+insert into t (id,a) values (344,61);
+insert into t (id,a) values (344,62);
+insert into t (id,a) values (344,63);
+insert into t (id,a) values (344,64);
+insert into t (id,a) values (344,65);
+insert into t (id,a) values (344,66);
+insert into t (id,a) values (344,67);
+insert into t (id,a) values (344,68);
+insert into t (id,a) values (344,69);
+insert into t (id,a) values (344,70);
+insert into t (id,a) values (344,71);
+insert into t (id,a) values (344,72);
+insert into t (id,a) values (344,73);
+insert into t (id,a) values (344,74);
+insert into t (id,a) values (344,75);
+insert into t (id,a) values (344,76);
+insert into t (id,a) values (344,77);
+insert into t (id,a) values (344,78);
+insert into t (id,a) values (344,79);
+insert into t (id,a) values (344,80);
+insert into t (id,a) values (344,81);
+insert into t (id,a) values (344,82);
+insert into t (id,a) values (344,83);
+insert into t (id,a) values (344,84);
+insert into t (id,a) values (344,85);
+insert into t (id,a) values (344,86);
+insert into t (id,a) values (344,87);
+insert into t (id,a) values (344,88);
+insert into t (id,a) values (344,89);
+insert into t (id,a) values (344,90);
+insert into t (id,a) values (344,91);
+insert into t (id,a) values (344,92);
+insert into t (id,a) values (344,93);
+insert into t (id,a) values (344,94);
+insert into t (id,a) values (344,95);
+insert into t (id,a) values (344,96);
+insert into t (id,a) values (344,97);
+insert into t (id,a) values (344,98);
+insert into t (id,a) values (344,99);
+insert into t (id,a) values (345,0);
+insert into t (id,a) values (345,1);
+insert into t (id,a) values (345,2);
+insert into t (id,a) values (345,3);
+insert into t (id,a) values (345,4);
+insert into t (id,a) values (345,5);
+insert into t (id,a) values (345,6);
+insert into t (id,a) values (345,7);
+insert into t (id,a) values (345,8);
+insert into t (id,a) values (345,9);
+insert into t (id,a) values (345,10);
+insert into t (id,a) values (345,11);
+insert into t (id,a) values (345,12);
+insert into t (id,a) values (345,13);
+insert into t (id,a) values (345,14);
+insert into t (id,a) values (345,15);
+insert into t (id,a) values (345,16);
+insert into t (id,a) values (345,17);
+insert into t (id,a) values (345,18);
+insert into t (id,a) values (345,19);
+insert into t (id,a) values (345,20);
+insert into t (id,a) values (345,21);
+insert into t (id,a) values (345,22);
+insert into t (id,a) values (345,23);
+insert into t (id,a) values (345,24);
+insert into t (id,a) values (345,25);
+insert into t (id,a) values (345,26);
+insert into t (id,a) values (345,27);
+insert into t (id,a) values (345,28);
+insert into t (id,a) values (345,29);
+insert into t (id,a) values (345,30);
+insert into t (id,a) values (345,31);
+insert into t (id,a) values (345,32);
+insert into t (id,a) values (345,33);
+insert into t (id,a) values (345,34);
+insert into t (id,a) values (345,35);
+insert into t (id,a) values (345,36);
+insert into t (id,a) values (345,37);
+insert into t (id,a) values (345,38);
+insert into t (id,a) values (345,39);
+insert into t (id,a) values (345,40);
+insert into t (id,a) values (345,41);
+insert into t (id,a) values (345,42);
+insert into t (id,a) values (345,43);
+insert into t (id,a) values (345,44);
+insert into t (id,a) values (345,45);
+insert into t (id,a) values (345,46);
+insert into t (id,a) values (345,47);
+insert into t (id,a) values (345,48);
+insert into t (id,a) values (345,49);
+insert into t (id,a) values (345,50);
+insert into t (id,a) values (345,51);
+insert into t (id,a) values (345,52);
+insert into t (id,a) values (345,53);
+insert into t (id,a) values (345,54);
+insert into t (id,a) values (345,55);
+insert into t (id,a) values (345,56);
+insert into t (id,a) values (345,57);
+insert into t (id,a) values (345,58);
+insert into t (id,a) values (345,59);
+insert into t (id,a) values (345,60);
+insert into t (id,a) values (345,61);
+insert into t (id,a) values (345,62);
+insert into t (id,a) values (345,63);
+insert into t (id,a) values (345,64);
+insert into t (id,a) values (345,65);
+insert into t (id,a) values (345,66);
+insert into t (id,a) values (345,67);
+insert into t (id,a) values (345,68);
+insert into t (id,a) values (345,69);
+insert into t (id,a) values (345,70);
+insert into t (id,a) values (345,71);
+insert into t (id,a) values (345,72);
+insert into t (id,a) values (345,73);
+insert into t (id,a) values (345,74);
+insert into t (id,a) values (345,75);
+insert into t (id,a) values (345,76);
+insert into t (id,a) values (345,77);
+insert into t (id,a) values (345,78);
+insert into t (id,a) values (345,79);
+insert into t (id,a) values (345,80);
+insert into t (id,a) values (345,81);
+insert into t (id,a) values (345,82);
+insert into t (id,a) values (345,83);
+insert into t (id,a) values (345,84);
+insert into t (id,a) values (345,85);
+insert into t (id,a) values (345,86);
+insert into t (id,a) values (345,87);
+insert into t (id,a) values (345,88);
+insert into t (id,a) values (345,89);
+insert into t (id,a) values (345,90);
+insert into t (id,a) values (345,91);
+insert into t (id,a) values (345,92);
+insert into t (id,a) values (345,93);
+insert into t (id,a) values (345,94);
+insert into t (id,a) values (345,95);
+insert into t (id,a) values (345,96);
+insert into t (id,a) values (345,97);
+insert into t (id,a) values (345,98);
+insert into t (id,a) values (345,99);
+insert into t (id,a) values (346,0);
+insert into t (id,a) values (346,1);
+insert into t (id,a) values (346,2);
+insert into t (id,a) values (346,3);
+insert into t (id,a) values (346,4);
+insert into t (id,a) values (346,5);
+insert into t (id,a) values (346,6);
+insert into t (id,a) values (346,7);
+insert into t (id,a) values (346,8);
+insert into t (id,a) values (346,9);
+insert into t (id,a) values (346,10);
+insert into t (id,a) values (346,11);
+insert into t (id,a) values (346,12);
+insert into t (id,a) values (346,13);
+insert into t (id,a) values (346,14);
+insert into t (id,a) values (346,15);
+insert into t (id,a) values (346,16);
+insert into t (id,a) values (346,17);
+insert into t (id,a) values (346,18);
+insert into t (id,a) values (346,19);
+insert into t (id,a) values (346,20);
+insert into t (id,a) values (346,21);
+insert into t (id,a) values (346,22);
+insert into t (id,a) values (346,23);
+insert into t (id,a) values (346,24);
+insert into t (id,a) values (346,25);
+insert into t (id,a) values (346,26);
+insert into t (id,a) values (346,27);
+insert into t (id,a) values (346,28);
+insert into t (id,a) values (346,29);
+insert into t (id,a) values (346,30);
+insert into t (id,a) values (346,31);
+insert into t (id,a) values (346,32);
+insert into t (id,a) values (346,33);
+insert into t (id,a) values (346,34);
+insert into t (id,a) values (346,35);
+insert into t (id,a) values (346,36);
+insert into t (id,a) values (346,37);
+insert into t (id,a) values (346,38);
+insert into t (id,a) values (346,39);
+insert into t (id,a) values (346,40);
+insert into t (id,a) values (346,41);
+insert into t (id,a) values (346,42);
+insert into t (id,a) values (346,43);
+insert into t (id,a) values (346,44);
+insert into t (id,a) values (346,45);
+insert into t (id,a) values (346,46);
+insert into t (id,a) values (346,47);
+insert into t (id,a) values (346,48);
+insert into t (id,a) values (346,49);
+insert into t (id,a) values (346,50);
+insert into t (id,a) values (346,51);
+insert into t (id,a) values (346,52);
+insert into t (id,a) values (346,53);
+insert into t (id,a) values (346,54);
+insert into t (id,a) values (346,55);
+insert into t (id,a) values (346,56);
+insert into t (id,a) values (346,57);
+insert into t (id,a) values (346,58);
+insert into t (id,a) values (346,59);
+insert into t (id,a) values (346,60);
+insert into t (id,a) values (346,61);
+insert into t (id,a) values (346,62);
+insert into t (id,a) values (346,63);
+insert into t (id,a) values (346,64);
+insert into t (id,a) values (346,65);
+insert into t (id,a) values (346,66);
+insert into t (id,a) values (346,67);
+insert into t (id,a) values (346,68);
+insert into t (id,a) values (346,69);
+insert into t (id,a) values (346,70);
+insert into t (id,a) values (346,71);
+insert into t (id,a) values (346,72);
+insert into t (id,a) values (346,73);
+insert into t (id,a) values (346,74);
+insert into t (id,a) values (346,75);
+insert into t (id,a) values (346,76);
+insert into t (id,a) values (346,77);
+insert into t (id,a) values (346,78);
+insert into t (id,a) values (346,79);
+insert into t (id,a) values (346,80);
+insert into t (id,a) values (346,81);
+insert into t (id,a) values (346,82);
+insert into t (id,a) values (346,83);
+insert into t (id,a) values (346,84);
+insert into t (id,a) values (346,85);
+insert into t (id,a) values (346,86);
+insert into t (id,a) values (346,87);
+insert into t (id,a) values (346,88);
+insert into t (id,a) values (346,89);
+insert into t (id,a) values (346,90);
+insert into t (id,a) values (346,91);
+insert into t (id,a) values (346,92);
+insert into t (id,a) values (346,93);
+insert into t (id,a) values (346,94);
+insert into t (id,a) values (346,95);
+insert into t (id,a) values (346,96);
+insert into t (id,a) values (346,97);
+insert into t (id,a) values (346,98);
+insert into t (id,a) values (346,99);
+insert into t (id,a) values (347,0);
+insert into t (id,a) values (347,1);
+insert into t (id,a) values (347,2);
+insert into t (id,a) values (347,3);
+insert into t (id,a) values (347,4);
+insert into t (id,a) values (347,5);
+insert into t (id,a) values (347,6);
+insert into t (id,a) values (347,7);
+insert into t (id,a) values (347,8);
+insert into t (id,a) values (347,9);
+insert into t (id,a) values (347,10);
+insert into t (id,a) values (347,11);
+insert into t (id,a) values (347,12);
+insert into t (id,a) values (347,13);
+insert into t (id,a) values (347,14);
+insert into t (id,a) values (347,15);
+insert into t (id,a) values (347,16);
+insert into t (id,a) values (347,17);
+insert into t (id,a) values (347,18);
+insert into t (id,a) values (347,19);
+insert into t (id,a) values (347,20);
+insert into t (id,a) values (347,21);
+insert into t (id,a) values (347,22);
+insert into t (id,a) values (347,23);
+insert into t (id,a) values (347,24);
+insert into t (id,a) values (347,25);
+insert into t (id,a) values (347,26);
+insert into t (id,a) values (347,27);
+insert into t (id,a) values (347,28);
+insert into t (id,a) values (347,29);
+insert into t (id,a) values (347,30);
+insert into t (id,a) values (347,31);
+insert into t (id,a) values (347,32);
+insert into t (id,a) values (347,33);
+insert into t (id,a) values (347,34);
+insert into t (id,a) values (347,35);
+insert into t (id,a) values (347,36);
+insert into t (id,a) values (347,37);
+insert into t (id,a) values (347,38);
+insert into t (id,a) values (347,39);
+insert into t (id,a) values (347,40);
+insert into t (id,a) values (347,41);
+insert into t (id,a) values (347,42);
+insert into t (id,a) values (347,43);
+insert into t (id,a) values (347,44);
+insert into t (id,a) values (347,45);
+insert into t (id,a) values (347,46);
+insert into t (id,a) values (347,47);
+insert into t (id,a) values (347,48);
+insert into t (id,a) values (347,49);
+insert into t (id,a) values (347,50);
+insert into t (id,a) values (347,51);
+insert into t (id,a) values (347,52);
+insert into t (id,a) values (347,53);
+insert into t (id,a) values (347,54);
+insert into t (id,a) values (347,55);
+insert into t (id,a) values (347,56);
+insert into t (id,a) values (347,57);
+insert into t (id,a) values (347,58);
+insert into t (id,a) values (347,59);
+insert into t (id,a) values (347,60);
+insert into t (id,a) values (347,61);
+insert into t (id,a) values (347,62);
+insert into t (id,a) values (347,63);
+insert into t (id,a) values (347,64);
+insert into t (id,a) values (347,65);
+insert into t (id,a) values (347,66);
+insert into t (id,a) values (347,67);
+insert into t (id,a) values (347,68);
+insert into t (id,a) values (347,69);
+insert into t (id,a) values (347,70);
+insert into t (id,a) values (347,71);
+insert into t (id,a) values (347,72);
+insert into t (id,a) values (347,73);
+insert into t (id,a) values (347,74);
+insert into t (id,a) values (347,75);
+insert into t (id,a) values (347,76);
+insert into t (id,a) values (347,77);
+insert into t (id,a) values (347,78);
+insert into t (id,a) values (347,79);
+insert into t (id,a) values (347,80);
+insert into t (id,a) values (347,81);
+insert into t (id,a) values (347,82);
+insert into t (id,a) values (347,83);
+insert into t (id,a) values (347,84);
+insert into t (id,a) values (347,85);
+insert into t (id,a) values (347,86);
+insert into t (id,a) values (347,87);
+insert into t (id,a) values (347,88);
+insert into t (id,a) values (347,89);
+insert into t (id,a) values (347,90);
+insert into t (id,a) values (347,91);
+insert into t (id,a) values (347,92);
+insert into t (id,a) values (347,93);
+insert into t (id,a) values (347,94);
+insert into t (id,a) values (347,95);
+insert into t (id,a) values (347,96);
+insert into t (id,a) values (347,97);
+insert into t (id,a) values (347,98);
+insert into t (id,a) values (347,99);
+insert into t (id,a) values (348,0);
+insert into t (id,a) values (348,1);
+insert into t (id,a) values (348,2);
+insert into t (id,a) values (348,3);
+insert into t (id,a) values (348,4);
+insert into t (id,a) values (348,5);
+insert into t (id,a) values (348,6);
+insert into t (id,a) values (348,7);
+insert into t (id,a) values (348,8);
+insert into t (id,a) values (348,9);
+insert into t (id,a) values (348,10);
+insert into t (id,a) values (348,11);
+insert into t (id,a) values (348,12);
+insert into t (id,a) values (348,13);
+insert into t (id,a) values (348,14);
+insert into t (id,a) values (348,15);
+insert into t (id,a) values (348,16);
+insert into t (id,a) values (348,17);
+insert into t (id,a) values (348,18);
+insert into t (id,a) values (348,19);
+insert into t (id,a) values (348,20);
+insert into t (id,a) values (348,21);
+insert into t (id,a) values (348,22);
+insert into t (id,a) values (348,23);
+insert into t (id,a) values (348,24);
+insert into t (id,a) values (348,25);
+insert into t (id,a) values (348,26);
+insert into t (id,a) values (348,27);
+insert into t (id,a) values (348,28);
+insert into t (id,a) values (348,29);
+insert into t (id,a) values (348,30);
+insert into t (id,a) values (348,31);
+insert into t (id,a) values (348,32);
+insert into t (id,a) values (348,33);
+insert into t (id,a) values (348,34);
+insert into t (id,a) values (348,35);
+insert into t (id,a) values (348,36);
+insert into t (id,a) values (348,37);
+insert into t (id,a) values (348,38);
+insert into t (id,a) values (348,39);
+insert into t (id,a) values (348,40);
+insert into t (id,a) values (348,41);
+insert into t (id,a) values (348,42);
+insert into t (id,a) values (348,43);
+insert into t (id,a) values (348,44);
+insert into t (id,a) values (348,45);
+insert into t (id,a) values (348,46);
+insert into t (id,a) values (348,47);
+insert into t (id,a) values (348,48);
+insert into t (id,a) values (348,49);
+insert into t (id,a) values (348,50);
+insert into t (id,a) values (348,51);
+insert into t (id,a) values (348,52);
+insert into t (id,a) values (348,53);
+insert into t (id,a) values (348,54);
+insert into t (id,a) values (348,55);
+insert into t (id,a) values (348,56);
+insert into t (id,a) values (348,57);
+insert into t (id,a) values (348,58);
+insert into t (id,a) values (348,59);
+insert into t (id,a) values (348,60);
+insert into t (id,a) values (348,61);
+insert into t (id,a) values (348,62);
+insert into t (id,a) values (348,63);
+insert into t (id,a) values (348,64);
+insert into t (id,a) values (348,65);
+insert into t (id,a) values (348,66);
+insert into t (id,a) values (348,67);
+insert into t (id,a) values (348,68);
+insert into t (id,a) values (348,69);
+insert into t (id,a) values (348,70);
+insert into t (id,a) values (348,71);
+insert into t (id,a) values (348,72);
+insert into t (id,a) values (348,73);
+insert into t (id,a) values (348,74);
+insert into t (id,a) values (348,75);
+insert into t (id,a) values (348,76);
+insert into t (id,a) values (348,77);
+insert into t (id,a) values (348,78);
+insert into t (id,a) values (348,79);
+insert into t (id,a) values (348,80);
+insert into t (id,a) values (348,81);
+insert into t (id,a) values (348,82);
+insert into t (id,a) values (348,83);
+insert into t (id,a) values (348,84);
+insert into t (id,a) values (348,85);
+insert into t (id,a) values (348,86);
+insert into t (id,a) values (348,87);
+insert into t (id,a) values (348,88);
+insert into t (id,a) values (348,89);
+insert into t (id,a) values (348,90);
+insert into t (id,a) values (348,91);
+insert into t (id,a) values (348,92);
+insert into t (id,a) values (348,93);
+insert into t (id,a) values (348,94);
+insert into t (id,a) values (348,95);
+insert into t (id,a) values (348,96);
+insert into t (id,a) values (348,97);
+insert into t (id,a) values (348,98);
+insert into t (id,a) values (348,99);
+insert into t (id,a) values (349,0);
+insert into t (id,a) values (349,1);
+insert into t (id,a) values (349,2);
+insert into t (id,a) values (349,3);
+insert into t (id,a) values (349,4);
+insert into t (id,a) values (349,5);
+insert into t (id,a) values (349,6);
+insert into t (id,a) values (349,7);
+insert into t (id,a) values (349,8);
+insert into t (id,a) values (349,9);
+insert into t (id,a) values (349,10);
+insert into t (id,a) values (349,11);
+insert into t (id,a) values (349,12);
+insert into t (id,a) values (349,13);
+insert into t (id,a) values (349,14);
+insert into t (id,a) values (349,15);
+insert into t (id,a) values (349,16);
+insert into t (id,a) values (349,17);
+insert into t (id,a) values (349,18);
+insert into t (id,a) values (349,19);
+insert into t (id,a) values (349,20);
+insert into t (id,a) values (349,21);
+insert into t (id,a) values (349,22);
+insert into t (id,a) values (349,23);
+insert into t (id,a) values (349,24);
+insert into t (id,a) values (349,25);
+insert into t (id,a) values (349,26);
+insert into t (id,a) values (349,27);
+insert into t (id,a) values (349,28);
+insert into t (id,a) values (349,29);
+insert into t (id,a) values (349,30);
+insert into t (id,a) values (349,31);
+insert into t (id,a) values (349,32);
+insert into t (id,a) values (349,33);
+insert into t (id,a) values (349,34);
+insert into t (id,a) values (349,35);
+insert into t (id,a) values (349,36);
+insert into t (id,a) values (349,37);
+insert into t (id,a) values (349,38);
+insert into t (id,a) values (349,39);
+insert into t (id,a) values (349,40);
+insert into t (id,a) values (349,41);
+insert into t (id,a) values (349,42);
+insert into t (id,a) values (349,43);
+insert into t (id,a) values (349,44);
+insert into t (id,a) values (349,45);
+insert into t (id,a) values (349,46);
+insert into t (id,a) values (349,47);
+insert into t (id,a) values (349,48);
+insert into t (id,a) values (349,49);
+insert into t (id,a) values (349,50);
+insert into t (id,a) values (349,51);
+insert into t (id,a) values (349,52);
+insert into t (id,a) values (349,53);
+insert into t (id,a) values (349,54);
+insert into t (id,a) values (349,55);
+insert into t (id,a) values (349,56);
+insert into t (id,a) values (349,57);
+insert into t (id,a) values (349,58);
+insert into t (id,a) values (349,59);
+insert into t (id,a) values (349,60);
+insert into t (id,a) values (349,61);
+insert into t (id,a) values (349,62);
+insert into t (id,a) values (349,63);
+insert into t (id,a) values (349,64);
+insert into t (id,a) values (349,65);
+insert into t (id,a) values (349,66);
+insert into t (id,a) values (349,67);
+insert into t (id,a) values (349,68);
+insert into t (id,a) values (349,69);
+insert into t (id,a) values (349,70);
+insert into t (id,a) values (349,71);
+insert into t (id,a) values (349,72);
+insert into t (id,a) values (349,73);
+insert into t (id,a) values (349,74);
+insert into t (id,a) values (349,75);
+insert into t (id,a) values (349,76);
+insert into t (id,a) values (349,77);
+insert into t (id,a) values (349,78);
+insert into t (id,a) values (349,79);
+insert into t (id,a) values (349,80);
+insert into t (id,a) values (349,81);
+insert into t (id,a) values (349,82);
+insert into t (id,a) values (349,83);
+insert into t (id,a) values (349,84);
+insert into t (id,a) values (349,85);
+insert into t (id,a) values (349,86);
+insert into t (id,a) values (349,87);
+insert into t (id,a) values (349,88);
+insert into t (id,a) values (349,89);
+insert into t (id,a) values (349,90);
+insert into t (id,a) values (349,91);
+insert into t (id,a) values (349,92);
+insert into t (id,a) values (349,93);
+insert into t (id,a) values (349,94);
+insert into t (id,a) values (349,95);
+insert into t (id,a) values (349,96);
+insert into t (id,a) values (349,97);
+insert into t (id,a) values (349,98);
+insert into t (id,a) values (349,99);
+insert into t (id,a) values (350,0);
+insert into t (id,a) values (350,1);
+insert into t (id,a) values (350,2);
+insert into t (id,a) values (350,3);
+insert into t (id,a) values (350,4);
+insert into t (id,a) values (350,5);
+insert into t (id,a) values (350,6);
+insert into t (id,a) values (350,7);
+insert into t (id,a) values (350,8);
+insert into t (id,a) values (350,9);
+insert into t (id,a) values (350,10);
+insert into t (id,a) values (350,11);
+insert into t (id,a) values (350,12);
+insert into t (id,a) values (350,13);
+insert into t (id,a) values (350,14);
+insert into t (id,a) values (350,15);
+insert into t (id,a) values (350,16);
+insert into t (id,a) values (350,17);
+insert into t (id,a) values (350,18);
+insert into t (id,a) values (350,19);
+insert into t (id,a) values (350,20);
+insert into t (id,a) values (350,21);
+insert into t (id,a) values (350,22);
+insert into t (id,a) values (350,23);
+insert into t (id,a) values (350,24);
+insert into t (id,a) values (350,25);
+insert into t (id,a) values (350,26);
+insert into t (id,a) values (350,27);
+insert into t (id,a) values (350,28);
+insert into t (id,a) values (350,29);
+insert into t (id,a) values (350,30);
+insert into t (id,a) values (350,31);
+insert into t (id,a) values (350,32);
+insert into t (id,a) values (350,33);
+insert into t (id,a) values (350,34);
+insert into t (id,a) values (350,35);
+insert into t (id,a) values (350,36);
+insert into t (id,a) values (350,37);
+insert into t (id,a) values (350,38);
+insert into t (id,a) values (350,39);
+insert into t (id,a) values (350,40);
+insert into t (id,a) values (350,41);
+insert into t (id,a) values (350,42);
+insert into t (id,a) values (350,43);
+insert into t (id,a) values (350,44);
+insert into t (id,a) values (350,45);
+insert into t (id,a) values (350,46);
+insert into t (id,a) values (350,47);
+insert into t (id,a) values (350,48);
+insert into t (id,a) values (350,49);
+insert into t (id,a) values (350,50);
+insert into t (id,a) values (350,51);
+insert into t (id,a) values (350,52);
+insert into t (id,a) values (350,53);
+insert into t (id,a) values (350,54);
+insert into t (id,a) values (350,55);
+insert into t (id,a) values (350,56);
+insert into t (id,a) values (350,57);
+insert into t (id,a) values (350,58);
+insert into t (id,a) values (350,59);
+insert into t (id,a) values (350,60);
+insert into t (id,a) values (350,61);
+insert into t (id,a) values (350,62);
+insert into t (id,a) values (350,63);
+insert into t (id,a) values (350,64);
+insert into t (id,a) values (350,65);
+insert into t (id,a) values (350,66);
+insert into t (id,a) values (350,67);
+insert into t (id,a) values (350,68);
+insert into t (id,a) values (350,69);
+insert into t (id,a) values (350,70);
+insert into t (id,a) values (350,71);
+insert into t (id,a) values (350,72);
+insert into t (id,a) values (350,73);
+insert into t (id,a) values (350,74);
+insert into t (id,a) values (350,75);
+insert into t (id,a) values (350,76);
+insert into t (id,a) values (350,77);
+insert into t (id,a) values (350,78);
+insert into t (id,a) values (350,79);
+insert into t (id,a) values (350,80);
+insert into t (id,a) values (350,81);
+insert into t (id,a) values (350,82);
+insert into t (id,a) values (350,83);
+insert into t (id,a) values (350,84);
+insert into t (id,a) values (350,85);
+insert into t (id,a) values (350,86);
+insert into t (id,a) values (350,87);
+insert into t (id,a) values (350,88);
+insert into t (id,a) values (350,89);
+insert into t (id,a) values (350,90);
+insert into t (id,a) values (350,91);
+insert into t (id,a) values (350,92);
+insert into t (id,a) values (350,93);
+insert into t (id,a) values (350,94);
+insert into t (id,a) values (350,95);
+insert into t (id,a) values (350,96);
+insert into t (id,a) values (350,97);
+insert into t (id,a) values (350,98);
+insert into t (id,a) values (350,99);
+insert into t (id,a) values (351,0);
+insert into t (id,a) values (351,1);
+insert into t (id,a) values (351,2);
+insert into t (id,a) values (351,3);
+insert into t (id,a) values (351,4);
+insert into t (id,a) values (351,5);
+insert into t (id,a) values (351,6);
+insert into t (id,a) values (351,7);
+insert into t (id,a) values (351,8);
+insert into t (id,a) values (351,9);
+insert into t (id,a) values (351,10);
+insert into t (id,a) values (351,11);
+insert into t (id,a) values (351,12);
+insert into t (id,a) values (351,13);
+insert into t (id,a) values (351,14);
+insert into t (id,a) values (351,15);
+insert into t (id,a) values (351,16);
+insert into t (id,a) values (351,17);
+insert into t (id,a) values (351,18);
+insert into t (id,a) values (351,19);
+insert into t (id,a) values (351,20);
+insert into t (id,a) values (351,21);
+insert into t (id,a) values (351,22);
+insert into t (id,a) values (351,23);
+insert into t (id,a) values (351,24);
+insert into t (id,a) values (351,25);
+insert into t (id,a) values (351,26);
+insert into t (id,a) values (351,27);
+insert into t (id,a) values (351,28);
+insert into t (id,a) values (351,29);
+insert into t (id,a) values (351,30);
+insert into t (id,a) values (351,31);
+insert into t (id,a) values (351,32);
+insert into t (id,a) values (351,33);
+insert into t (id,a) values (351,34);
+insert into t (id,a) values (351,35);
+insert into t (id,a) values (351,36);
+insert into t (id,a) values (351,37);
+insert into t (id,a) values (351,38);
+insert into t (id,a) values (351,39);
+insert into t (id,a) values (351,40);
+insert into t (id,a) values (351,41);
+insert into t (id,a) values (351,42);
+insert into t (id,a) values (351,43);
+insert into t (id,a) values (351,44);
+insert into t (id,a) values (351,45);
+insert into t (id,a) values (351,46);
+insert into t (id,a) values (351,47);
+insert into t (id,a) values (351,48);
+insert into t (id,a) values (351,49);
+insert into t (id,a) values (351,50);
+insert into t (id,a) values (351,51);
+insert into t (id,a) values (351,52);
+insert into t (id,a) values (351,53);
+insert into t (id,a) values (351,54);
+insert into t (id,a) values (351,55);
+insert into t (id,a) values (351,56);
+insert into t (id,a) values (351,57);
+insert into t (id,a) values (351,58);
+insert into t (id,a) values (351,59);
+insert into t (id,a) values (351,60);
+insert into t (id,a) values (351,61);
+insert into t (id,a) values (351,62);
+insert into t (id,a) values (351,63);
+insert into t (id,a) values (351,64);
+insert into t (id,a) values (351,65);
+insert into t (id,a) values (351,66);
+insert into t (id,a) values (351,67);
+insert into t (id,a) values (351,68);
+insert into t (id,a) values (351,69);
+insert into t (id,a) values (351,70);
+insert into t (id,a) values (351,71);
+insert into t (id,a) values (351,72);
+insert into t (id,a) values (351,73);
+insert into t (id,a) values (351,74);
+insert into t (id,a) values (351,75);
+insert into t (id,a) values (351,76);
+insert into t (id,a) values (351,77);
+insert into t (id,a) values (351,78);
+insert into t (id,a) values (351,79);
+insert into t (id,a) values (351,80);
+insert into t (id,a) values (351,81);
+insert into t (id,a) values (351,82);
+insert into t (id,a) values (351,83);
+insert into t (id,a) values (351,84);
+insert into t (id,a) values (351,85);
+insert into t (id,a) values (351,86);
+insert into t (id,a) values (351,87);
+insert into t (id,a) values (351,88);
+insert into t (id,a) values (351,89);
+insert into t (id,a) values (351,90);
+insert into t (id,a) values (351,91);
+insert into t (id,a) values (351,92);
+insert into t (id,a) values (351,93);
+insert into t (id,a) values (351,94);
+insert into t (id,a) values (351,95);
+insert into t (id,a) values (351,96);
+insert into t (id,a) values (351,97);
+insert into t (id,a) values (351,98);
+insert into t (id,a) values (351,99);
+insert into t (id,a) values (352,0);
+insert into t (id,a) values (352,1);
+insert into t (id,a) values (352,2);
+insert into t (id,a) values (352,3);
+insert into t (id,a) values (352,4);
+insert into t (id,a) values (352,5);
+insert into t (id,a) values (352,6);
+insert into t (id,a) values (352,7);
+insert into t (id,a) values (352,8);
+insert into t (id,a) values (352,9);
+insert into t (id,a) values (352,10);
+insert into t (id,a) values (352,11);
+insert into t (id,a) values (352,12);
+insert into t (id,a) values (352,13);
+insert into t (id,a) values (352,14);
+insert into t (id,a) values (352,15);
+insert into t (id,a) values (352,16);
+insert into t (id,a) values (352,17);
+insert into t (id,a) values (352,18);
+insert into t (id,a) values (352,19);
+insert into t (id,a) values (352,20);
+insert into t (id,a) values (352,21);
+insert into t (id,a) values (352,22);
+insert into t (id,a) values (352,23);
+insert into t (id,a) values (352,24);
+insert into t (id,a) values (352,25);
+insert into t (id,a) values (352,26);
+insert into t (id,a) values (352,27);
+insert into t (id,a) values (352,28);
+insert into t (id,a) values (352,29);
+insert into t (id,a) values (352,30);
+insert into t (id,a) values (352,31);
+insert into t (id,a) values (352,32);
+insert into t (id,a) values (352,33);
+insert into t (id,a) values (352,34);
+insert into t (id,a) values (352,35);
+insert into t (id,a) values (352,36);
+insert into t (id,a) values (352,37);
+insert into t (id,a) values (352,38);
+insert into t (id,a) values (352,39);
+insert into t (id,a) values (352,40);
+insert into t (id,a) values (352,41);
+insert into t (id,a) values (352,42);
+insert into t (id,a) values (352,43);
+insert into t (id,a) values (352,44);
+insert into t (id,a) values (352,45);
+insert into t (id,a) values (352,46);
+insert into t (id,a) values (352,47);
+insert into t (id,a) values (352,48);
+insert into t (id,a) values (352,49);
+insert into t (id,a) values (352,50);
+insert into t (id,a) values (352,51);
+insert into t (id,a) values (352,52);
+insert into t (id,a) values (352,53);
+insert into t (id,a) values (352,54);
+insert into t (id,a) values (352,55);
+insert into t (id,a) values (352,56);
+insert into t (id,a) values (352,57);
+insert into t (id,a) values (352,58);
+insert into t (id,a) values (352,59);
+insert into t (id,a) values (352,60);
+insert into t (id,a) values (352,61);
+insert into t (id,a) values (352,62);
+insert into t (id,a) values (352,63);
+insert into t (id,a) values (352,64);
+insert into t (id,a) values (352,65);
+insert into t (id,a) values (352,66);
+insert into t (id,a) values (352,67);
+insert into t (id,a) values (352,68);
+insert into t (id,a) values (352,69);
+insert into t (id,a) values (352,70);
+insert into t (id,a) values (352,71);
+insert into t (id,a) values (352,72);
+insert into t (id,a) values (352,73);
+insert into t (id,a) values (352,74);
+insert into t (id,a) values (352,75);
+insert into t (id,a) values (352,76);
+insert into t (id,a) values (352,77);
+insert into t (id,a) values (352,78);
+insert into t (id,a) values (352,79);
+insert into t (id,a) values (352,80);
+insert into t (id,a) values (352,81);
+insert into t (id,a) values (352,82);
+insert into t (id,a) values (352,83);
+insert into t (id,a) values (352,84);
+insert into t (id,a) values (352,85);
+insert into t (id,a) values (352,86);
+insert into t (id,a) values (352,87);
+insert into t (id,a) values (352,88);
+insert into t (id,a) values (352,89);
+insert into t (id,a) values (352,90);
+insert into t (id,a) values (352,91);
+insert into t (id,a) values (352,92);
+insert into t (id,a) values (352,93);
+insert into t (id,a) values (352,94);
+insert into t (id,a) values (352,95);
+insert into t (id,a) values (352,96);
+insert into t (id,a) values (352,97);
+insert into t (id,a) values (352,98);
+insert into t (id,a) values (352,99);
+insert into t (id,a) values (353,0);
+insert into t (id,a) values (353,1);
+insert into t (id,a) values (353,2);
+insert into t (id,a) values (353,3);
+insert into t (id,a) values (353,4);
+insert into t (id,a) values (353,5);
+insert into t (id,a) values (353,6);
+insert into t (id,a) values (353,7);
+insert into t (id,a) values (353,8);
+insert into t (id,a) values (353,9);
+insert into t (id,a) values (353,10);
+insert into t (id,a) values (353,11);
+insert into t (id,a) values (353,12);
+insert into t (id,a) values (353,13);
+insert into t (id,a) values (353,14);
+insert into t (id,a) values (353,15);
+insert into t (id,a) values (353,16);
+insert into t (id,a) values (353,17);
+insert into t (id,a) values (353,18);
+insert into t (id,a) values (353,19);
+insert into t (id,a) values (353,20);
+insert into t (id,a) values (353,21);
+insert into t (id,a) values (353,22);
+insert into t (id,a) values (353,23);
+insert into t (id,a) values (353,24);
+insert into t (id,a) values (353,25);
+insert into t (id,a) values (353,26);
+insert into t (id,a) values (353,27);
+insert into t (id,a) values (353,28);
+insert into t (id,a) values (353,29);
+insert into t (id,a) values (353,30);
+insert into t (id,a) values (353,31);
+insert into t (id,a) values (353,32);
+insert into t (id,a) values (353,33);
+insert into t (id,a) values (353,34);
+insert into t (id,a) values (353,35);
+insert into t (id,a) values (353,36);
+insert into t (id,a) values (353,37);
+insert into t (id,a) values (353,38);
+insert into t (id,a) values (353,39);
+insert into t (id,a) values (353,40);
+insert into t (id,a) values (353,41);
+insert into t (id,a) values (353,42);
+insert into t (id,a) values (353,43);
+insert into t (id,a) values (353,44);
+insert into t (id,a) values (353,45);
+insert into t (id,a) values (353,46);
+insert into t (id,a) values (353,47);
+insert into t (id,a) values (353,48);
+insert into t (id,a) values (353,49);
+insert into t (id,a) values (353,50);
+insert into t (id,a) values (353,51);
+insert into t (id,a) values (353,52);
+insert into t (id,a) values (353,53);
+insert into t (id,a) values (353,54);
+insert into t (id,a) values (353,55);
+insert into t (id,a) values (353,56);
+insert into t (id,a) values (353,57);
+insert into t (id,a) values (353,58);
+insert into t (id,a) values (353,59);
+insert into t (id,a) values (353,60);
+insert into t (id,a) values (353,61);
+insert into t (id,a) values (353,62);
+insert into t (id,a) values (353,63);
+insert into t (id,a) values (353,64);
+insert into t (id,a) values (353,65);
+insert into t (id,a) values (353,66);
+insert into t (id,a) values (353,67);
+insert into t (id,a) values (353,68);
+insert into t (id,a) values (353,69);
+insert into t (id,a) values (353,70);
+insert into t (id,a) values (353,71);
+insert into t (id,a) values (353,72);
+insert into t (id,a) values (353,73);
+insert into t (id,a) values (353,74);
+insert into t (id,a) values (353,75);
+insert into t (id,a) values (353,76);
+insert into t (id,a) values (353,77);
+insert into t (id,a) values (353,78);
+insert into t (id,a) values (353,79);
+insert into t (id,a) values (353,80);
+insert into t (id,a) values (353,81);
+insert into t (id,a) values (353,82);
+insert into t (id,a) values (353,83);
+insert into t (id,a) values (353,84);
+insert into t (id,a) values (353,85);
+insert into t (id,a) values (353,86);
+insert into t (id,a) values (353,87);
+insert into t (id,a) values (353,88);
+insert into t (id,a) values (353,89);
+insert into t (id,a) values (353,90);
+insert into t (id,a) values (353,91);
+insert into t (id,a) values (353,92);
+insert into t (id,a) values (353,93);
+insert into t (id,a) values (353,94);
+insert into t (id,a) values (353,95);
+insert into t (id,a) values (353,96);
+insert into t (id,a) values (353,97);
+insert into t (id,a) values (353,98);
+insert into t (id,a) values (353,99);
+insert into t (id,a) values (354,0);
+insert into t (id,a) values (354,1);
+insert into t (id,a) values (354,2);
+insert into t (id,a) values (354,3);
+insert into t (id,a) values (354,4);
+insert into t (id,a) values (354,5);
+insert into t (id,a) values (354,6);
+insert into t (id,a) values (354,7);
+insert into t (id,a) values (354,8);
+insert into t (id,a) values (354,9);
+insert into t (id,a) values (354,10);
+insert into t (id,a) values (354,11);
+insert into t (id,a) values (354,12);
+insert into t (id,a) values (354,13);
+insert into t (id,a) values (354,14);
+insert into t (id,a) values (354,15);
+insert into t (id,a) values (354,16);
+insert into t (id,a) values (354,17);
+insert into t (id,a) values (354,18);
+insert into t (id,a) values (354,19);
+insert into t (id,a) values (354,20);
+insert into t (id,a) values (354,21);
+insert into t (id,a) values (354,22);
+insert into t (id,a) values (354,23);
+insert into t (id,a) values (354,24);
+insert into t (id,a) values (354,25);
+insert into t (id,a) values (354,26);
+insert into t (id,a) values (354,27);
+insert into t (id,a) values (354,28);
+insert into t (id,a) values (354,29);
+insert into t (id,a) values (354,30);
+insert into t (id,a) values (354,31);
+insert into t (id,a) values (354,32);
+insert into t (id,a) values (354,33);
+insert into t (id,a) values (354,34);
+insert into t (id,a) values (354,35);
+insert into t (id,a) values (354,36);
+insert into t (id,a) values (354,37);
+insert into t (id,a) values (354,38);
+insert into t (id,a) values (354,39);
+insert into t (id,a) values (354,40);
+insert into t (id,a) values (354,41);
+insert into t (id,a) values (354,42);
+insert into t (id,a) values (354,43);
+insert into t (id,a) values (354,44);
+insert into t (id,a) values (354,45);
+insert into t (id,a) values (354,46);
+insert into t (id,a) values (354,47);
+insert into t (id,a) values (354,48);
+insert into t (id,a) values (354,49);
+insert into t (id,a) values (354,50);
+insert into t (id,a) values (354,51);
+insert into t (id,a) values (354,52);
+insert into t (id,a) values (354,53);
+insert into t (id,a) values (354,54);
+insert into t (id,a) values (354,55);
+insert into t (id,a) values (354,56);
+insert into t (id,a) values (354,57);
+insert into t (id,a) values (354,58);
+insert into t (id,a) values (354,59);
+insert into t (id,a) values (354,60);
+insert into t (id,a) values (354,61);
+insert into t (id,a) values (354,62);
+insert into t (id,a) values (354,63);
+insert into t (id,a) values (354,64);
+insert into t (id,a) values (354,65);
+insert into t (id,a) values (354,66);
+insert into t (id,a) values (354,67);
+insert into t (id,a) values (354,68);
+insert into t (id,a) values (354,69);
+insert into t (id,a) values (354,70);
+insert into t (id,a) values (354,71);
+insert into t (id,a) values (354,72);
+insert into t (id,a) values (354,73);
+insert into t (id,a) values (354,74);
+insert into t (id,a) values (354,75);
+insert into t (id,a) values (354,76);
+insert into t (id,a) values (354,77);
+insert into t (id,a) values (354,78);
+insert into t (id,a) values (354,79);
+insert into t (id,a) values (354,80);
+insert into t (id,a) values (354,81);
+insert into t (id,a) values (354,82);
+insert into t (id,a) values (354,83);
+insert into t (id,a) values (354,84);
+insert into t (id,a) values (354,85);
+insert into t (id,a) values (354,86);
+insert into t (id,a) values (354,87);
+insert into t (id,a) values (354,88);
+insert into t (id,a) values (354,89);
+insert into t (id,a) values (354,90);
+insert into t (id,a) values (354,91);
+insert into t (id,a) values (354,92);
+insert into t (id,a) values (354,93);
+insert into t (id,a) values (354,94);
+insert into t (id,a) values (354,95);
+insert into t (id,a) values (354,96);
+insert into t (id,a) values (354,97);
+insert into t (id,a) values (354,98);
+insert into t (id,a) values (354,99);
+insert into t (id,a) values (355,0);
+insert into t (id,a) values (355,1);
+insert into t (id,a) values (355,2);
+insert into t (id,a) values (355,3);
+insert into t (id,a) values (355,4);
+insert into t (id,a) values (355,5);
+insert into t (id,a) values (355,6);
+insert into t (id,a) values (355,7);
+insert into t (id,a) values (355,8);
+insert into t (id,a) values (355,9);
+insert into t (id,a) values (355,10);
+insert into t (id,a) values (355,11);
+insert into t (id,a) values (355,12);
+insert into t (id,a) values (355,13);
+insert into t (id,a) values (355,14);
+insert into t (id,a) values (355,15);
+insert into t (id,a) values (355,16);
+insert into t (id,a) values (355,17);
+insert into t (id,a) values (355,18);
+insert into t (id,a) values (355,19);
+insert into t (id,a) values (355,20);
+insert into t (id,a) values (355,21);
+insert into t (id,a) values (355,22);
+insert into t (id,a) values (355,23);
+insert into t (id,a) values (355,24);
+insert into t (id,a) values (355,25);
+insert into t (id,a) values (355,26);
+insert into t (id,a) values (355,27);
+insert into t (id,a) values (355,28);
+insert into t (id,a) values (355,29);
+insert into t (id,a) values (355,30);
+insert into t (id,a) values (355,31);
+insert into t (id,a) values (355,32);
+insert into t (id,a) values (355,33);
+insert into t (id,a) values (355,34);
+insert into t (id,a) values (355,35);
+insert into t (id,a) values (355,36);
+insert into t (id,a) values (355,37);
+insert into t (id,a) values (355,38);
+insert into t (id,a) values (355,39);
+insert into t (id,a) values (355,40);
+insert into t (id,a) values (355,41);
+insert into t (id,a) values (355,42);
+insert into t (id,a) values (355,43);
+insert into t (id,a) values (355,44);
+insert into t (id,a) values (355,45);
+insert into t (id,a) values (355,46);
+insert into t (id,a) values (355,47);
+insert into t (id,a) values (355,48);
+insert into t (id,a) values (355,49);
+insert into t (id,a) values (355,50);
+insert into t (id,a) values (355,51);
+insert into t (id,a) values (355,52);
+insert into t (id,a) values (355,53);
+insert into t (id,a) values (355,54);
+insert into t (id,a) values (355,55);
+insert into t (id,a) values (355,56);
+insert into t (id,a) values (355,57);
+insert into t (id,a) values (355,58);
+insert into t (id,a) values (355,59);
+insert into t (id,a) values (355,60);
+insert into t (id,a) values (355,61);
+insert into t (id,a) values (355,62);
+insert into t (id,a) values (355,63);
+insert into t (id,a) values (355,64);
+insert into t (id,a) values (355,65);
+insert into t (id,a) values (355,66);
+insert into t (id,a) values (355,67);
+insert into t (id,a) values (355,68);
+insert into t (id,a) values (355,69);
+insert into t (id,a) values (355,70);
+insert into t (id,a) values (355,71);
+insert into t (id,a) values (355,72);
+insert into t (id,a) values (355,73);
+insert into t (id,a) values (355,74);
+insert into t (id,a) values (355,75);
+insert into t (id,a) values (355,76);
+insert into t (id,a) values (355,77);
+insert into t (id,a) values (355,78);
+insert into t (id,a) values (355,79);
+insert into t (id,a) values (355,80);
+insert into t (id,a) values (355,81);
+insert into t (id,a) values (355,82);
+insert into t (id,a) values (355,83);
+insert into t (id,a) values (355,84);
+insert into t (id,a) values (355,85);
+insert into t (id,a) values (355,86);
+insert into t (id,a) values (355,87);
+insert into t (id,a) values (355,88);
+insert into t (id,a) values (355,89);
+insert into t (id,a) values (355,90);
+insert into t (id,a) values (355,91);
+insert into t (id,a) values (355,92);
+insert into t (id,a) values (355,93);
+insert into t (id,a) values (355,94);
+insert into t (id,a) values (355,95);
+insert into t (id,a) values (355,96);
+insert into t (id,a) values (355,97);
+insert into t (id,a) values (355,98);
+insert into t (id,a) values (355,99);
+insert into t (id,a) values (356,0);
+insert into t (id,a) values (356,1);
+insert into t (id,a) values (356,2);
+insert into t (id,a) values (356,3);
+insert into t (id,a) values (356,4);
+insert into t (id,a) values (356,5);
+insert into t (id,a) values (356,6);
+insert into t (id,a) values (356,7);
+insert into t (id,a) values (356,8);
+insert into t (id,a) values (356,9);
+insert into t (id,a) values (356,10);
+insert into t (id,a) values (356,11);
+insert into t (id,a) values (356,12);
+insert into t (id,a) values (356,13);
+insert into t (id,a) values (356,14);
+insert into t (id,a) values (356,15);
+insert into t (id,a) values (356,16);
+insert into t (id,a) values (356,17);
+insert into t (id,a) values (356,18);
+insert into t (id,a) values (356,19);
+insert into t (id,a) values (356,20);
+insert into t (id,a) values (356,21);
+insert into t (id,a) values (356,22);
+insert into t (id,a) values (356,23);
+insert into t (id,a) values (356,24);
+insert into t (id,a) values (356,25);
+insert into t (id,a) values (356,26);
+insert into t (id,a) values (356,27);
+insert into t (id,a) values (356,28);
+insert into t (id,a) values (356,29);
+insert into t (id,a) values (356,30);
+insert into t (id,a) values (356,31);
+insert into t (id,a) values (356,32);
+insert into t (id,a) values (356,33);
+insert into t (id,a) values (356,34);
+insert into t (id,a) values (356,35);
+insert into t (id,a) values (356,36);
+insert into t (id,a) values (356,37);
+insert into t (id,a) values (356,38);
+insert into t (id,a) values (356,39);
+insert into t (id,a) values (356,40);
+insert into t (id,a) values (356,41);
+insert into t (id,a) values (356,42);
+insert into t (id,a) values (356,43);
+insert into t (id,a) values (356,44);
+insert into t (id,a) values (356,45);
+insert into t (id,a) values (356,46);
+insert into t (id,a) values (356,47);
+insert into t (id,a) values (356,48);
+insert into t (id,a) values (356,49);
+insert into t (id,a) values (356,50);
+insert into t (id,a) values (356,51);
+insert into t (id,a) values (356,52);
+insert into t (id,a) values (356,53);
+insert into t (id,a) values (356,54);
+insert into t (id,a) values (356,55);
+insert into t (id,a) values (356,56);
+insert into t (id,a) values (356,57);
+insert into t (id,a) values (356,58);
+insert into t (id,a) values (356,59);
+insert into t (id,a) values (356,60);
+insert into t (id,a) values (356,61);
+insert into t (id,a) values (356,62);
+insert into t (id,a) values (356,63);
+insert into t (id,a) values (356,64);
+insert into t (id,a) values (356,65);
+insert into t (id,a) values (356,66);
+insert into t (id,a) values (356,67);
+insert into t (id,a) values (356,68);
+insert into t (id,a) values (356,69);
+insert into t (id,a) values (356,70);
+insert into t (id,a) values (356,71);
+insert into t (id,a) values (356,72);
+insert into t (id,a) values (356,73);
+insert into t (id,a) values (356,74);
+insert into t (id,a) values (356,75);
+insert into t (id,a) values (356,76);
+insert into t (id,a) values (356,77);
+insert into t (id,a) values (356,78);
+insert into t (id,a) values (356,79);
+insert into t (id,a) values (356,80);
+insert into t (id,a) values (356,81);
+insert into t (id,a) values (356,82);
+insert into t (id,a) values (356,83);
+insert into t (id,a) values (356,84);
+insert into t (id,a) values (356,85);
+insert into t (id,a) values (356,86);
+insert into t (id,a) values (356,87);
+insert into t (id,a) values (356,88);
+insert into t (id,a) values (356,89);
+insert into t (id,a) values (356,90);
+insert into t (id,a) values (356,91);
+insert into t (id,a) values (356,92);
+insert into t (id,a) values (356,93);
+insert into t (id,a) values (356,94);
+insert into t (id,a) values (356,95);
+insert into t (id,a) values (356,96);
+insert into t (id,a) values (356,97);
+insert into t (id,a) values (356,98);
+insert into t (id,a) values (356,99);
+insert into t (id,a) values (357,0);
+insert into t (id,a) values (357,1);
+insert into t (id,a) values (357,2);
+insert into t (id,a) values (357,3);
+insert into t (id,a) values (357,4);
+insert into t (id,a) values (357,5);
+insert into t (id,a) values (357,6);
+insert into t (id,a) values (357,7);
+insert into t (id,a) values (357,8);
+insert into t (id,a) values (357,9);
+insert into t (id,a) values (357,10);
+insert into t (id,a) values (357,11);
+insert into t (id,a) values (357,12);
+insert into t (id,a) values (357,13);
+insert into t (id,a) values (357,14);
+insert into t (id,a) values (357,15);
+insert into t (id,a) values (357,16);
+insert into t (id,a) values (357,17);
+insert into t (id,a) values (357,18);
+insert into t (id,a) values (357,19);
+insert into t (id,a) values (357,20);
+insert into t (id,a) values (357,21);
+insert into t (id,a) values (357,22);
+insert into t (id,a) values (357,23);
+insert into t (id,a) values (357,24);
+insert into t (id,a) values (357,25);
+insert into t (id,a) values (357,26);
+insert into t (id,a) values (357,27);
+insert into t (id,a) values (357,28);
+insert into t (id,a) values (357,29);
+insert into t (id,a) values (357,30);
+insert into t (id,a) values (357,31);
+insert into t (id,a) values (357,32);
+insert into t (id,a) values (357,33);
+insert into t (id,a) values (357,34);
+insert into t (id,a) values (357,35);
+insert into t (id,a) values (357,36);
+insert into t (id,a) values (357,37);
+insert into t (id,a) values (357,38);
+insert into t (id,a) values (357,39);
+insert into t (id,a) values (357,40);
+insert into t (id,a) values (357,41);
+insert into t (id,a) values (357,42);
+insert into t (id,a) values (357,43);
+insert into t (id,a) values (357,44);
+insert into t (id,a) values (357,45);
+insert into t (id,a) values (357,46);
+insert into t (id,a) values (357,47);
+insert into t (id,a) values (357,48);
+insert into t (id,a) values (357,49);
+insert into t (id,a) values (357,50);
+insert into t (id,a) values (357,51);
+insert into t (id,a) values (357,52);
+insert into t (id,a) values (357,53);
+insert into t (id,a) values (357,54);
+insert into t (id,a) values (357,55);
+insert into t (id,a) values (357,56);
+insert into t (id,a) values (357,57);
+insert into t (id,a) values (357,58);
+insert into t (id,a) values (357,59);
+insert into t (id,a) values (357,60);
+insert into t (id,a) values (357,61);
+insert into t (id,a) values (357,62);
+insert into t (id,a) values (357,63);
+insert into t (id,a) values (357,64);
+insert into t (id,a) values (357,65);
+insert into t (id,a) values (357,66);
+insert into t (id,a) values (357,67);
+insert into t (id,a) values (357,68);
+insert into t (id,a) values (357,69);
+insert into t (id,a) values (357,70);
+insert into t (id,a) values (357,71);
+insert into t (id,a) values (357,72);
+insert into t (id,a) values (357,73);
+insert into t (id,a) values (357,74);
+insert into t (id,a) values (357,75);
+insert into t (id,a) values (357,76);
+insert into t (id,a) values (357,77);
+insert into t (id,a) values (357,78);
+insert into t (id,a) values (357,79);
+insert into t (id,a) values (357,80);
+insert into t (id,a) values (357,81);
+insert into t (id,a) values (357,82);
+insert into t (id,a) values (357,83);
+insert into t (id,a) values (357,84);
+insert into t (id,a) values (357,85);
+insert into t (id,a) values (357,86);
+insert into t (id,a) values (357,87);
+insert into t (id,a) values (357,88);
+insert into t (id,a) values (357,89);
+insert into t (id,a) values (357,90);
+insert into t (id,a) values (357,91);
+insert into t (id,a) values (357,92);
+insert into t (id,a) values (357,93);
+insert into t (id,a) values (357,94);
+insert into t (id,a) values (357,95);
+insert into t (id,a) values (357,96);
+insert into t (id,a) values (357,97);
+insert into t (id,a) values (357,98);
+insert into t (id,a) values (357,99);
+insert into t (id,a) values (358,0);
+insert into t (id,a) values (358,1);
+insert into t (id,a) values (358,2);
+insert into t (id,a) values (358,3);
+insert into t (id,a) values (358,4);
+insert into t (id,a) values (358,5);
+insert into t (id,a) values (358,6);
+insert into t (id,a) values (358,7);
+insert into t (id,a) values (358,8);
+insert into t (id,a) values (358,9);
+insert into t (id,a) values (358,10);
+insert into t (id,a) values (358,11);
+insert into t (id,a) values (358,12);
+insert into t (id,a) values (358,13);
+insert into t (id,a) values (358,14);
+insert into t (id,a) values (358,15);
+insert into t (id,a) values (358,16);
+insert into t (id,a) values (358,17);
+insert into t (id,a) values (358,18);
+insert into t (id,a) values (358,19);
+insert into t (id,a) values (358,20);
+insert into t (id,a) values (358,21);
+insert into t (id,a) values (358,22);
+insert into t (id,a) values (358,23);
+insert into t (id,a) values (358,24);
+insert into t (id,a) values (358,25);
+insert into t (id,a) values (358,26);
+insert into t (id,a) values (358,27);
+insert into t (id,a) values (358,28);
+insert into t (id,a) values (358,29);
+insert into t (id,a) values (358,30);
+insert into t (id,a) values (358,31);
+insert into t (id,a) values (358,32);
+insert into t (id,a) values (358,33);
+insert into t (id,a) values (358,34);
+insert into t (id,a) values (358,35);
+insert into t (id,a) values (358,36);
+insert into t (id,a) values (358,37);
+insert into t (id,a) values (358,38);
+insert into t (id,a) values (358,39);
+insert into t (id,a) values (358,40);
+insert into t (id,a) values (358,41);
+insert into t (id,a) values (358,42);
+insert into t (id,a) values (358,43);
+insert into t (id,a) values (358,44);
+insert into t (id,a) values (358,45);
+insert into t (id,a) values (358,46);
+insert into t (id,a) values (358,47);
+insert into t (id,a) values (358,48);
+insert into t (id,a) values (358,49);
+insert into t (id,a) values (358,50);
+insert into t (id,a) values (358,51);
+insert into t (id,a) values (358,52);
+insert into t (id,a) values (358,53);
+insert into t (id,a) values (358,54);
+insert into t (id,a) values (358,55);
+insert into t (id,a) values (358,56);
+insert into t (id,a) values (358,57);
+insert into t (id,a) values (358,58);
+insert into t (id,a) values (358,59);
+insert into t (id,a) values (358,60);
+insert into t (id,a) values (358,61);
+insert into t (id,a) values (358,62);
+insert into t (id,a) values (358,63);
+insert into t (id,a) values (358,64);
+insert into t (id,a) values (358,65);
+insert into t (id,a) values (358,66);
+insert into t (id,a) values (358,67);
+insert into t (id,a) values (358,68);
+insert into t (id,a) values (358,69);
+insert into t (id,a) values (358,70);
+insert into t (id,a) values (358,71);
+insert into t (id,a) values (358,72);
+insert into t (id,a) values (358,73);
+insert into t (id,a) values (358,74);
+insert into t (id,a) values (358,75);
+insert into t (id,a) values (358,76);
+insert into t (id,a) values (358,77);
+insert into t (id,a) values (358,78);
+insert into t (id,a) values (358,79);
+insert into t (id,a) values (358,80);
+insert into t (id,a) values (358,81);
+insert into t (id,a) values (358,82);
+insert into t (id,a) values (358,83);
+insert into t (id,a) values (358,84);
+insert into t (id,a) values (358,85);
+insert into t (id,a) values (358,86);
+insert into t (id,a) values (358,87);
+insert into t (id,a) values (358,88);
+insert into t (id,a) values (358,89);
+insert into t (id,a) values (358,90);
+insert into t (id,a) values (358,91);
+insert into t (id,a) values (358,92);
+insert into t (id,a) values (358,93);
+insert into t (id,a) values (358,94);
+insert into t (id,a) values (358,95);
+insert into t (id,a) values (358,96);
+insert into t (id,a) values (358,97);
+insert into t (id,a) values (358,98);
+insert into t (id,a) values (358,99);
+insert into t (id,a) values (359,0);
+insert into t (id,a) values (359,1);
+insert into t (id,a) values (359,2);
+insert into t (id,a) values (359,3);
+insert into t (id,a) values (359,4);
+insert into t (id,a) values (359,5);
+insert into t (id,a) values (359,6);
+insert into t (id,a) values (359,7);
+insert into t (id,a) values (359,8);
+insert into t (id,a) values (359,9);
+insert into t (id,a) values (359,10);
+insert into t (id,a) values (359,11);
+insert into t (id,a) values (359,12);
+insert into t (id,a) values (359,13);
+insert into t (id,a) values (359,14);
+insert into t (id,a) values (359,15);
+insert into t (id,a) values (359,16);
+insert into t (id,a) values (359,17);
+insert into t (id,a) values (359,18);
+insert into t (id,a) values (359,19);
+insert into t (id,a) values (359,20);
+insert into t (id,a) values (359,21);
+insert into t (id,a) values (359,22);
+insert into t (id,a) values (359,23);
+insert into t (id,a) values (359,24);
+insert into t (id,a) values (359,25);
+insert into t (id,a) values (359,26);
+insert into t (id,a) values (359,27);
+insert into t (id,a) values (359,28);
+insert into t (id,a) values (359,29);
+insert into t (id,a) values (359,30);
+insert into t (id,a) values (359,31);
+insert into t (id,a) values (359,32);
+insert into t (id,a) values (359,33);
+insert into t (id,a) values (359,34);
+insert into t (id,a) values (359,35);
+insert into t (id,a) values (359,36);
+insert into t (id,a) values (359,37);
+insert into t (id,a) values (359,38);
+insert into t (id,a) values (359,39);
+insert into t (id,a) values (359,40);
+insert into t (id,a) values (359,41);
+insert into t (id,a) values (359,42);
+insert into t (id,a) values (359,43);
+insert into t (id,a) values (359,44);
+insert into t (id,a) values (359,45);
+insert into t (id,a) values (359,46);
+insert into t (id,a) values (359,47);
+insert into t (id,a) values (359,48);
+insert into t (id,a) values (359,49);
+insert into t (id,a) values (359,50);
+insert into t (id,a) values (359,51);
+insert into t (id,a) values (359,52);
+insert into t (id,a) values (359,53);
+insert into t (id,a) values (359,54);
+insert into t (id,a) values (359,55);
+insert into t (id,a) values (359,56);
+insert into t (id,a) values (359,57);
+insert into t (id,a) values (359,58);
+insert into t (id,a) values (359,59);
+insert into t (id,a) values (359,60);
+insert into t (id,a) values (359,61);
+insert into t (id,a) values (359,62);
+insert into t (id,a) values (359,63);
+insert into t (id,a) values (359,64);
+insert into t (id,a) values (359,65);
+insert into t (id,a) values (359,66);
+insert into t (id,a) values (359,67);
+insert into t (id,a) values (359,68);
+insert into t (id,a) values (359,69);
+insert into t (id,a) values (359,70);
+insert into t (id,a) values (359,71);
+insert into t (id,a) values (359,72);
+insert into t (id,a) values (359,73);
+insert into t (id,a) values (359,74);
+insert into t (id,a) values (359,75);
+insert into t (id,a) values (359,76);
+insert into t (id,a) values (359,77);
+insert into t (id,a) values (359,78);
+insert into t (id,a) values (359,79);
+insert into t (id,a) values (359,80);
+insert into t (id,a) values (359,81);
+insert into t (id,a) values (359,82);
+insert into t (id,a) values (359,83);
+insert into t (id,a) values (359,84);
+insert into t (id,a) values (359,85);
+insert into t (id,a) values (359,86);
+insert into t (id,a) values (359,87);
+insert into t (id,a) values (359,88);
+insert into t (id,a) values (359,89);
+insert into t (id,a) values (359,90);
+insert into t (id,a) values (359,91);
+insert into t (id,a) values (359,92);
+insert into t (id,a) values (359,93);
+insert into t (id,a) values (359,94);
+insert into t (id,a) values (359,95);
+insert into t (id,a) values (359,96);
+insert into t (id,a) values (359,97);
+insert into t (id,a) values (359,98);
+insert into t (id,a) values (359,99);
+insert into t (id,a) values (360,0);
+insert into t (id,a) values (360,1);
+insert into t (id,a) values (360,2);
+insert into t (id,a) values (360,3);
+insert into t (id,a) values (360,4);
+insert into t (id,a) values (360,5);
+insert into t (id,a) values (360,6);
+insert into t (id,a) values (360,7);
+insert into t (id,a) values (360,8);
+insert into t (id,a) values (360,9);
+insert into t (id,a) values (360,10);
+insert into t (id,a) values (360,11);
+insert into t (id,a) values (360,12);
+insert into t (id,a) values (360,13);
+insert into t (id,a) values (360,14);
+insert into t (id,a) values (360,15);
+insert into t (id,a) values (360,16);
+insert into t (id,a) values (360,17);
+insert into t (id,a) values (360,18);
+insert into t (id,a) values (360,19);
+insert into t (id,a) values (360,20);
+insert into t (id,a) values (360,21);
+insert into t (id,a) values (360,22);
+insert into t (id,a) values (360,23);
+insert into t (id,a) values (360,24);
+insert into t (id,a) values (360,25);
+insert into t (id,a) values (360,26);
+insert into t (id,a) values (360,27);
+insert into t (id,a) values (360,28);
+insert into t (id,a) values (360,29);
+insert into t (id,a) values (360,30);
+insert into t (id,a) values (360,31);
+insert into t (id,a) values (360,32);
+insert into t (id,a) values (360,33);
+insert into t (id,a) values (360,34);
+insert into t (id,a) values (360,35);
+insert into t (id,a) values (360,36);
+insert into t (id,a) values (360,37);
+insert into t (id,a) values (360,38);
+insert into t (id,a) values (360,39);
+insert into t (id,a) values (360,40);
+insert into t (id,a) values (360,41);
+insert into t (id,a) values (360,42);
+insert into t (id,a) values (360,43);
+insert into t (id,a) values (360,44);
+insert into t (id,a) values (360,45);
+insert into t (id,a) values (360,46);
+insert into t (id,a) values (360,47);
+insert into t (id,a) values (360,48);
+insert into t (id,a) values (360,49);
+insert into t (id,a) values (360,50);
+insert into t (id,a) values (360,51);
+insert into t (id,a) values (360,52);
+insert into t (id,a) values (360,53);
+insert into t (id,a) values (360,54);
+insert into t (id,a) values (360,55);
+insert into t (id,a) values (360,56);
+insert into t (id,a) values (360,57);
+insert into t (id,a) values (360,58);
+insert into t (id,a) values (360,59);
+insert into t (id,a) values (360,60);
+insert into t (id,a) values (360,61);
+insert into t (id,a) values (360,62);
+insert into t (id,a) values (360,63);
+insert into t (id,a) values (360,64);
+insert into t (id,a) values (360,65);
+insert into t (id,a) values (360,66);
+insert into t (id,a) values (360,67);
+insert into t (id,a) values (360,68);
+insert into t (id,a) values (360,69);
+insert into t (id,a) values (360,70);
+insert into t (id,a) values (360,71);
+insert into t (id,a) values (360,72);
+insert into t (id,a) values (360,73);
+insert into t (id,a) values (360,74);
+insert into t (id,a) values (360,75);
+insert into t (id,a) values (360,76);
+insert into t (id,a) values (360,77);
+insert into t (id,a) values (360,78);
+insert into t (id,a) values (360,79);
+insert into t (id,a) values (360,80);
+insert into t (id,a) values (360,81);
+insert into t (id,a) values (360,82);
+insert into t (id,a) values (360,83);
+insert into t (id,a) values (360,84);
+insert into t (id,a) values (360,85);
+insert into t (id,a) values (360,86);
+insert into t (id,a) values (360,87);
+insert into t (id,a) values (360,88);
+insert into t (id,a) values (360,89);
+insert into t (id,a) values (360,90);
+insert into t (id,a) values (360,91);
+insert into t (id,a) values (360,92);
+insert into t (id,a) values (360,93);
+insert into t (id,a) values (360,94);
+insert into t (id,a) values (360,95);
+insert into t (id,a) values (360,96);
+insert into t (id,a) values (360,97);
+insert into t (id,a) values (360,98);
+insert into t (id,a) values (360,99);
+insert into t (id,a) values (361,0);
+insert into t (id,a) values (361,1);
+insert into t (id,a) values (361,2);
+insert into t (id,a) values (361,3);
+insert into t (id,a) values (361,4);
+insert into t (id,a) values (361,5);
+insert into t (id,a) values (361,6);
+insert into t (id,a) values (361,7);
+insert into t (id,a) values (361,8);
+insert into t (id,a) values (361,9);
+insert into t (id,a) values (361,10);
+insert into t (id,a) values (361,11);
+insert into t (id,a) values (361,12);
+insert into t (id,a) values (361,13);
+insert into t (id,a) values (361,14);
+insert into t (id,a) values (361,15);
+insert into t (id,a) values (361,16);
+insert into t (id,a) values (361,17);
+insert into t (id,a) values (361,18);
+insert into t (id,a) values (361,19);
+insert into t (id,a) values (361,20);
+insert into t (id,a) values (361,21);
+insert into t (id,a) values (361,22);
+insert into t (id,a) values (361,23);
+insert into t (id,a) values (361,24);
+insert into t (id,a) values (361,25);
+insert into t (id,a) values (361,26);
+insert into t (id,a) values (361,27);
+insert into t (id,a) values (361,28);
+insert into t (id,a) values (361,29);
+insert into t (id,a) values (361,30);
+insert into t (id,a) values (361,31);
+insert into t (id,a) values (361,32);
+insert into t (id,a) values (361,33);
+insert into t (id,a) values (361,34);
+insert into t (id,a) values (361,35);
+insert into t (id,a) values (361,36);
+insert into t (id,a) values (361,37);
+insert into t (id,a) values (361,38);
+insert into t (id,a) values (361,39);
+insert into t (id,a) values (361,40);
+insert into t (id,a) values (361,41);
+insert into t (id,a) values (361,42);
+insert into t (id,a) values (361,43);
+insert into t (id,a) values (361,44);
+insert into t (id,a) values (361,45);
+insert into t (id,a) values (361,46);
+insert into t (id,a) values (361,47);
+insert into t (id,a) values (361,48);
+insert into t (id,a) values (361,49);
+insert into t (id,a) values (361,50);
+insert into t (id,a) values (361,51);
+insert into t (id,a) values (361,52);
+insert into t (id,a) values (361,53);
+insert into t (id,a) values (361,54);
+insert into t (id,a) values (361,55);
+insert into t (id,a) values (361,56);
+insert into t (id,a) values (361,57);
+insert into t (id,a) values (361,58);
+insert into t (id,a) values (361,59);
+insert into t (id,a) values (361,60);
+insert into t (id,a) values (361,61);
+insert into t (id,a) values (361,62);
+insert into t (id,a) values (361,63);
+insert into t (id,a) values (361,64);
+insert into t (id,a) values (361,65);
+insert into t (id,a) values (361,66);
+insert into t (id,a) values (361,67);
+insert into t (id,a) values (361,68);
+insert into t (id,a) values (361,69);
+insert into t (id,a) values (361,70);
+insert into t (id,a) values (361,71);
+insert into t (id,a) values (361,72);
+insert into t (id,a) values (361,73);
+insert into t (id,a) values (361,74);
+insert into t (id,a) values (361,75);
+insert into t (id,a) values (361,76);
+insert into t (id,a) values (361,77);
+insert into t (id,a) values (361,78);
+insert into t (id,a) values (361,79);
+insert into t (id,a) values (361,80);
+insert into t (id,a) values (361,81);
+insert into t (id,a) values (361,82);
+insert into t (id,a) values (361,83);
+insert into t (id,a) values (361,84);
+insert into t (id,a) values (361,85);
+insert into t (id,a) values (361,86);
+insert into t (id,a) values (361,87);
+insert into t (id,a) values (361,88);
+insert into t (id,a) values (361,89);
+insert into t (id,a) values (361,90);
+insert into t (id,a) values (361,91);
+insert into t (id,a) values (361,92);
+insert into t (id,a) values (361,93);
+insert into t (id,a) values (361,94);
+insert into t (id,a) values (361,95);
+insert into t (id,a) values (361,96);
+insert into t (id,a) values (361,97);
+insert into t (id,a) values (361,98);
+insert into t (id,a) values (361,99);
+insert into t (id,a) values (362,0);
+insert into t (id,a) values (362,1);
+insert into t (id,a) values (362,2);
+insert into t (id,a) values (362,3);
+insert into t (id,a) values (362,4);
+insert into t (id,a) values (362,5);
+insert into t (id,a) values (362,6);
+insert into t (id,a) values (362,7);
+insert into t (id,a) values (362,8);
+insert into t (id,a) values (362,9);
+insert into t (id,a) values (362,10);
+insert into t (id,a) values (362,11);
+insert into t (id,a) values (362,12);
+insert into t (id,a) values (362,13);
+insert into t (id,a) values (362,14);
+insert into t (id,a) values (362,15);
+insert into t (id,a) values (362,16);
+insert into t (id,a) values (362,17);
+insert into t (id,a) values (362,18);
+insert into t (id,a) values (362,19);
+insert into t (id,a) values (362,20);
+insert into t (id,a) values (362,21);
+insert into t (id,a) values (362,22);
+insert into t (id,a) values (362,23);
+insert into t (id,a) values (362,24);
+insert into t (id,a) values (362,25);
+insert into t (id,a) values (362,26);
+insert into t (id,a) values (362,27);
+insert into t (id,a) values (362,28);
+insert into t (id,a) values (362,29);
+insert into t (id,a) values (362,30);
+insert into t (id,a) values (362,31);
+insert into t (id,a) values (362,32);
+insert into t (id,a) values (362,33);
+insert into t (id,a) values (362,34);
+insert into t (id,a) values (362,35);
+insert into t (id,a) values (362,36);
+insert into t (id,a) values (362,37);
+insert into t (id,a) values (362,38);
+insert into t (id,a) values (362,39);
+insert into t (id,a) values (362,40);
+insert into t (id,a) values (362,41);
+insert into t (id,a) values (362,42);
+insert into t (id,a) values (362,43);
+insert into t (id,a) values (362,44);
+insert into t (id,a) values (362,45);
+insert into t (id,a) values (362,46);
+insert into t (id,a) values (362,47);
+insert into t (id,a) values (362,48);
+insert into t (id,a) values (362,49);
+insert into t (id,a) values (362,50);
+insert into t (id,a) values (362,51);
+insert into t (id,a) values (362,52);
+insert into t (id,a) values (362,53);
+insert into t (id,a) values (362,54);
+insert into t (id,a) values (362,55);
+insert into t (id,a) values (362,56);
+insert into t (id,a) values (362,57);
+insert into t (id,a) values (362,58);
+insert into t (id,a) values (362,59);
+insert into t (id,a) values (362,60);
+insert into t (id,a) values (362,61);
+insert into t (id,a) values (362,62);
+insert into t (id,a) values (362,63);
+insert into t (id,a) values (362,64);
+insert into t (id,a) values (362,65);
+insert into t (id,a) values (362,66);
+insert into t (id,a) values (362,67);
+insert into t (id,a) values (362,68);
+insert into t (id,a) values (362,69);
+insert into t (id,a) values (362,70);
+insert into t (id,a) values (362,71);
+insert into t (id,a) values (362,72);
+insert into t (id,a) values (362,73);
+insert into t (id,a) values (362,74);
+insert into t (id,a) values (362,75);
+insert into t (id,a) values (362,76);
+insert into t (id,a) values (362,77);
+insert into t (id,a) values (362,78);
+insert into t (id,a) values (362,79);
+insert into t (id,a) values (362,80);
+insert into t (id,a) values (362,81);
+insert into t (id,a) values (362,82);
+insert into t (id,a) values (362,83);
+insert into t (id,a) values (362,84);
+insert into t (id,a) values (362,85);
+insert into t (id,a) values (362,86);
+insert into t (id,a) values (362,87);
+insert into t (id,a) values (362,88);
+insert into t (id,a) values (362,89);
+insert into t (id,a) values (362,90);
+insert into t (id,a) values (362,91);
+insert into t (id,a) values (362,92);
+insert into t (id,a) values (362,93);
+insert into t (id,a) values (362,94);
+insert into t (id,a) values (362,95);
+insert into t (id,a) values (362,96);
+insert into t (id,a) values (362,97);
+insert into t (id,a) values (362,98);
+insert into t (id,a) values (362,99);
+insert into t (id,a) values (363,0);
+insert into t (id,a) values (363,1);
+insert into t (id,a) values (363,2);
+insert into t (id,a) values (363,3);
+insert into t (id,a) values (363,4);
+insert into t (id,a) values (363,5);
+insert into t (id,a) values (363,6);
+insert into t (id,a) values (363,7);
+insert into t (id,a) values (363,8);
+insert into t (id,a) values (363,9);
+insert into t (id,a) values (363,10);
+insert into t (id,a) values (363,11);
+insert into t (id,a) values (363,12);
+insert into t (id,a) values (363,13);
+insert into t (id,a) values (363,14);
+insert into t (id,a) values (363,15);
+insert into t (id,a) values (363,16);
+insert into t (id,a) values (363,17);
+insert into t (id,a) values (363,18);
+insert into t (id,a) values (363,19);
+insert into t (id,a) values (363,20);
+insert into t (id,a) values (363,21);
+insert into t (id,a) values (363,22);
+insert into t (id,a) values (363,23);
+insert into t (id,a) values (363,24);
+insert into t (id,a) values (363,25);
+insert into t (id,a) values (363,26);
+insert into t (id,a) values (363,27);
+insert into t (id,a) values (363,28);
+insert into t (id,a) values (363,29);
+insert into t (id,a) values (363,30);
+insert into t (id,a) values (363,31);
+insert into t (id,a) values (363,32);
+insert into t (id,a) values (363,33);
+insert into t (id,a) values (363,34);
+insert into t (id,a) values (363,35);
+insert into t (id,a) values (363,36);
+insert into t (id,a) values (363,37);
+insert into t (id,a) values (363,38);
+insert into t (id,a) values (363,39);
+insert into t (id,a) values (363,40);
+insert into t (id,a) values (363,41);
+insert into t (id,a) values (363,42);
+insert into t (id,a) values (363,43);
+insert into t (id,a) values (363,44);
+insert into t (id,a) values (363,45);
+insert into t (id,a) values (363,46);
+insert into t (id,a) values (363,47);
+insert into t (id,a) values (363,48);
+insert into t (id,a) values (363,49);
+insert into t (id,a) values (363,50);
+insert into t (id,a) values (363,51);
+insert into t (id,a) values (363,52);
+insert into t (id,a) values (363,53);
+insert into t (id,a) values (363,54);
+insert into t (id,a) values (363,55);
+insert into t (id,a) values (363,56);
+insert into t (id,a) values (363,57);
+insert into t (id,a) values (363,58);
+insert into t (id,a) values (363,59);
+insert into t (id,a) values (363,60);
+insert into t (id,a) values (363,61);
+insert into t (id,a) values (363,62);
+insert into t (id,a) values (363,63);
+insert into t (id,a) values (363,64);
+insert into t (id,a) values (363,65);
+insert into t (id,a) values (363,66);
+insert into t (id,a) values (363,67);
+insert into t (id,a) values (363,68);
+insert into t (id,a) values (363,69);
+insert into t (id,a) values (363,70);
+insert into t (id,a) values (363,71);
+insert into t (id,a) values (363,72);
+insert into t (id,a) values (363,73);
+insert into t (id,a) values (363,74);
+insert into t (id,a) values (363,75);
+insert into t (id,a) values (363,76);
+insert into t (id,a) values (363,77);
+insert into t (id,a) values (363,78);
+insert into t (id,a) values (363,79);
+insert into t (id,a) values (363,80);
+insert into t (id,a) values (363,81);
+insert into t (id,a) values (363,82);
+insert into t (id,a) values (363,83);
+insert into t (id,a) values (363,84);
+insert into t (id,a) values (363,85);
+insert into t (id,a) values (363,86);
+insert into t (id,a) values (363,87);
+insert into t (id,a) values (363,88);
+insert into t (id,a) values (363,89);
+insert into t (id,a) values (363,90);
+insert into t (id,a) values (363,91);
+insert into t (id,a) values (363,92);
+insert into t (id,a) values (363,93);
+insert into t (id,a) values (363,94);
+insert into t (id,a) values (363,95);
+insert into t (id,a) values (363,96);
+insert into t (id,a) values (363,97);
+insert into t (id,a) values (363,98);
+insert into t (id,a) values (363,99);
+insert into t (id,a) values (364,0);
+insert into t (id,a) values (364,1);
+insert into t (id,a) values (364,2);
+insert into t (id,a) values (364,3);
+insert into t (id,a) values (364,4);
+insert into t (id,a) values (364,5);
+insert into t (id,a) values (364,6);
+insert into t (id,a) values (364,7);
+insert into t (id,a) values (364,8);
+insert into t (id,a) values (364,9);
+insert into t (id,a) values (364,10);
+insert into t (id,a) values (364,11);
+insert into t (id,a) values (364,12);
+insert into t (id,a) values (364,13);
+insert into t (id,a) values (364,14);
+insert into t (id,a) values (364,15);
+insert into t (id,a) values (364,16);
+insert into t (id,a) values (364,17);
+insert into t (id,a) values (364,18);
+insert into t (id,a) values (364,19);
+insert into t (id,a) values (364,20);
+insert into t (id,a) values (364,21);
+insert into t (id,a) values (364,22);
+insert into t (id,a) values (364,23);
+insert into t (id,a) values (364,24);
+insert into t (id,a) values (364,25);
+insert into t (id,a) values (364,26);
+insert into t (id,a) values (364,27);
+insert into t (id,a) values (364,28);
+insert into t (id,a) values (364,29);
+insert into t (id,a) values (364,30);
+insert into t (id,a) values (364,31);
+insert into t (id,a) values (364,32);
+insert into t (id,a) values (364,33);
+insert into t (id,a) values (364,34);
+insert into t (id,a) values (364,35);
+insert into t (id,a) values (364,36);
+insert into t (id,a) values (364,37);
+insert into t (id,a) values (364,38);
+insert into t (id,a) values (364,39);
+insert into t (id,a) values (364,40);
+insert into t (id,a) values (364,41);
+insert into t (id,a) values (364,42);
+insert into t (id,a) values (364,43);
+insert into t (id,a) values (364,44);
+insert into t (id,a) values (364,45);
+insert into t (id,a) values (364,46);
+insert into t (id,a) values (364,47);
+insert into t (id,a) values (364,48);
+insert into t (id,a) values (364,49);
+insert into t (id,a) values (364,50);
+insert into t (id,a) values (364,51);
+insert into t (id,a) values (364,52);
+insert into t (id,a) values (364,53);
+insert into t (id,a) values (364,54);
+insert into t (id,a) values (364,55);
+insert into t (id,a) values (364,56);
+insert into t (id,a) values (364,57);
+insert into t (id,a) values (364,58);
+insert into t (id,a) values (364,59);
+insert into t (id,a) values (364,60);
+insert into t (id,a) values (364,61);
+insert into t (id,a) values (364,62);
+insert into t (id,a) values (364,63);
+insert into t (id,a) values (364,64);
+insert into t (id,a) values (364,65);
+insert into t (id,a) values (364,66);
+insert into t (id,a) values (364,67);
+insert into t (id,a) values (364,68);
+insert into t (id,a) values (364,69);
+insert into t (id,a) values (364,70);
+insert into t (id,a) values (364,71);
+insert into t (id,a) values (364,72);
+insert into t (id,a) values (364,73);
+insert into t (id,a) values (364,74);
+insert into t (id,a) values (364,75);
+insert into t (id,a) values (364,76);
+insert into t (id,a) values (364,77);
+insert into t (id,a) values (364,78);
+insert into t (id,a) values (364,79);
+insert into t (id,a) values (364,80);
+insert into t (id,a) values (364,81);
+insert into t (id,a) values (364,82);
+insert into t (id,a) values (364,83);
+insert into t (id,a) values (364,84);
+insert into t (id,a) values (364,85);
+insert into t (id,a) values (364,86);
+insert into t (id,a) values (364,87);
+insert into t (id,a) values (364,88);
+insert into t (id,a) values (364,89);
+insert into t (id,a) values (364,90);
+insert into t (id,a) values (364,91);
+insert into t (id,a) values (364,92);
+insert into t (id,a) values (364,93);
+insert into t (id,a) values (364,94);
+insert into t (id,a) values (364,95);
+insert into t (id,a) values (364,96);
+insert into t (id,a) values (364,97);
+insert into t (id,a) values (364,98);
+insert into t (id,a) values (364,99);
+insert into t (id,a) values (365,0);
+insert into t (id,a) values (365,1);
+insert into t (id,a) values (365,2);
+insert into t (id,a) values (365,3);
+insert into t (id,a) values (365,4);
+insert into t (id,a) values (365,5);
+insert into t (id,a) values (365,6);
+insert into t (id,a) values (365,7);
+insert into t (id,a) values (365,8);
+insert into t (id,a) values (365,9);
+insert into t (id,a) values (365,10);
+insert into t (id,a) values (365,11);
+insert into t (id,a) values (365,12);
+insert into t (id,a) values (365,13);
+insert into t (id,a) values (365,14);
+insert into t (id,a) values (365,15);
+insert into t (id,a) values (365,16);
+insert into t (id,a) values (365,17);
+insert into t (id,a) values (365,18);
+insert into t (id,a) values (365,19);
+insert into t (id,a) values (365,20);
+insert into t (id,a) values (365,21);
+insert into t (id,a) values (365,22);
+insert into t (id,a) values (365,23);
+insert into t (id,a) values (365,24);
+insert into t (id,a) values (365,25);
+insert into t (id,a) values (365,26);
+insert into t (id,a) values (365,27);
+insert into t (id,a) values (365,28);
+insert into t (id,a) values (365,29);
+insert into t (id,a) values (365,30);
+insert into t (id,a) values (365,31);
+insert into t (id,a) values (365,32);
+insert into t (id,a) values (365,33);
+insert into t (id,a) values (365,34);
+insert into t (id,a) values (365,35);
+insert into t (id,a) values (365,36);
+insert into t (id,a) values (365,37);
+insert into t (id,a) values (365,38);
+insert into t (id,a) values (365,39);
+insert into t (id,a) values (365,40);
+insert into t (id,a) values (365,41);
+insert into t (id,a) values (365,42);
+insert into t (id,a) values (365,43);
+insert into t (id,a) values (365,44);
+insert into t (id,a) values (365,45);
+insert into t (id,a) values (365,46);
+insert into t (id,a) values (365,47);
+insert into t (id,a) values (365,48);
+insert into t (id,a) values (365,49);
+insert into t (id,a) values (365,50);
+insert into t (id,a) values (365,51);
+insert into t (id,a) values (365,52);
+insert into t (id,a) values (365,53);
+insert into t (id,a) values (365,54);
+insert into t (id,a) values (365,55);
+insert into t (id,a) values (365,56);
+insert into t (id,a) values (365,57);
+insert into t (id,a) values (365,58);
+insert into t (id,a) values (365,59);
+insert into t (id,a) values (365,60);
+insert into t (id,a) values (365,61);
+insert into t (id,a) values (365,62);
+insert into t (id,a) values (365,63);
+insert into t (id,a) values (365,64);
+insert into t (id,a) values (365,65);
+insert into t (id,a) values (365,66);
+insert into t (id,a) values (365,67);
+insert into t (id,a) values (365,68);
+insert into t (id,a) values (365,69);
+insert into t (id,a) values (365,70);
+insert into t (id,a) values (365,71);
+insert into t (id,a) values (365,72);
+insert into t (id,a) values (365,73);
+insert into t (id,a) values (365,74);
+insert into t (id,a) values (365,75);
+insert into t (id,a) values (365,76);
+insert into t (id,a) values (365,77);
+insert into t (id,a) values (365,78);
+insert into t (id,a) values (365,79);
+insert into t (id,a) values (365,80);
+insert into t (id,a) values (365,81);
+insert into t (id,a) values (365,82);
+insert into t (id,a) values (365,83);
+insert into t (id,a) values (365,84);
+insert into t (id,a) values (365,85);
+insert into t (id,a) values (365,86);
+insert into t (id,a) values (365,87);
+insert into t (id,a) values (365,88);
+insert into t (id,a) values (365,89);
+insert into t (id,a) values (365,90);
+insert into t (id,a) values (365,91);
+insert into t (id,a) values (365,92);
+insert into t (id,a) values (365,93);
+insert into t (id,a) values (365,94);
+insert into t (id,a) values (365,95);
+insert into t (id,a) values (365,96);
+insert into t (id,a) values (365,97);
+insert into t (id,a) values (365,98);
+insert into t (id,a) values (365,99);
+insert into t (id,a) values (366,0);
+insert into t (id,a) values (366,1);
+insert into t (id,a) values (366,2);
+insert into t (id,a) values (366,3);
+insert into t (id,a) values (366,4);
+insert into t (id,a) values (366,5);
+insert into t (id,a) values (366,6);
+insert into t (id,a) values (366,7);
+insert into t (id,a) values (366,8);
+insert into t (id,a) values (366,9);
+insert into t (id,a) values (366,10);
+insert into t (id,a) values (366,11);
+insert into t (id,a) values (366,12);
+insert into t (id,a) values (366,13);
+insert into t (id,a) values (366,14);
+insert into t (id,a) values (366,15);
+insert into t (id,a) values (366,16);
+insert into t (id,a) values (366,17);
+insert into t (id,a) values (366,18);
+insert into t (id,a) values (366,19);
+insert into t (id,a) values (366,20);
+insert into t (id,a) values (366,21);
+insert into t (id,a) values (366,22);
+insert into t (id,a) values (366,23);
+insert into t (id,a) values (366,24);
+insert into t (id,a) values (366,25);
+insert into t (id,a) values (366,26);
+insert into t (id,a) values (366,27);
+insert into t (id,a) values (366,28);
+insert into t (id,a) values (366,29);
+insert into t (id,a) values (366,30);
+insert into t (id,a) values (366,31);
+insert into t (id,a) values (366,32);
+insert into t (id,a) values (366,33);
+insert into t (id,a) values (366,34);
+insert into t (id,a) values (366,35);
+insert into t (id,a) values (366,36);
+insert into t (id,a) values (366,37);
+insert into t (id,a) values (366,38);
+insert into t (id,a) values (366,39);
+insert into t (id,a) values (366,40);
+insert into t (id,a) values (366,41);
+insert into t (id,a) values (366,42);
+insert into t (id,a) values (366,43);
+insert into t (id,a) values (366,44);
+insert into t (id,a) values (366,45);
+insert into t (id,a) values (366,46);
+insert into t (id,a) values (366,47);
+insert into t (id,a) values (366,48);
+insert into t (id,a) values (366,49);
+insert into t (id,a) values (366,50);
+insert into t (id,a) values (366,51);
+insert into t (id,a) values (366,52);
+insert into t (id,a) values (366,53);
+insert into t (id,a) values (366,54);
+insert into t (id,a) values (366,55);
+insert into t (id,a) values (366,56);
+insert into t (id,a) values (366,57);
+insert into t (id,a) values (366,58);
+insert into t (id,a) values (366,59);
+insert into t (id,a) values (366,60);
+insert into t (id,a) values (366,61);
+insert into t (id,a) values (366,62);
+insert into t (id,a) values (366,63);
+insert into t (id,a) values (366,64);
+insert into t (id,a) values (366,65);
+insert into t (id,a) values (366,66);
+insert into t (id,a) values (366,67);
+insert into t (id,a) values (366,68);
+insert into t (id,a) values (366,69);
+insert into t (id,a) values (366,70);
+insert into t (id,a) values (366,71);
+insert into t (id,a) values (366,72);
+insert into t (id,a) values (366,73);
+insert into t (id,a) values (366,74);
+insert into t (id,a) values (366,75);
+insert into t (id,a) values (366,76);
+insert into t (id,a) values (366,77);
+insert into t (id,a) values (366,78);
+insert into t (id,a) values (366,79);
+insert into t (id,a) values (366,80);
+insert into t (id,a) values (366,81);
+insert into t (id,a) values (366,82);
+insert into t (id,a) values (366,83);
+insert into t (id,a) values (366,84);
+insert into t (id,a) values (366,85);
+insert into t (id,a) values (366,86);
+insert into t (id,a) values (366,87);
+insert into t (id,a) values (366,88);
+insert into t (id,a) values (366,89);
+insert into t (id,a) values (366,90);
+insert into t (id,a) values (366,91);
+insert into t (id,a) values (366,92);
+insert into t (id,a) values (366,93);
+insert into t (id,a) values (366,94);
+insert into t (id,a) values (366,95);
+insert into t (id,a) values (366,96);
+insert into t (id,a) values (366,97);
+insert into t (id,a) values (366,98);
+insert into t (id,a) values (366,99);
+insert into t (id,a) values (367,0);
+insert into t (id,a) values (367,1);
+insert into t (id,a) values (367,2);
+insert into t (id,a) values (367,3);
+insert into t (id,a) values (367,4);
+insert into t (id,a) values (367,5);
+insert into t (id,a) values (367,6);
+insert into t (id,a) values (367,7);
+insert into t (id,a) values (367,8);
+insert into t (id,a) values (367,9);
+insert into t (id,a) values (367,10);
+insert into t (id,a) values (367,11);
+insert into t (id,a) values (367,12);
+insert into t (id,a) values (367,13);
+insert into t (id,a) values (367,14);
+insert into t (id,a) values (367,15);
+insert into t (id,a) values (367,16);
+insert into t (id,a) values (367,17);
+insert into t (id,a) values (367,18);
+insert into t (id,a) values (367,19);
+insert into t (id,a) values (367,20);
+insert into t (id,a) values (367,21);
+insert into t (id,a) values (367,22);
+insert into t (id,a) values (367,23);
+insert into t (id,a) values (367,24);
+insert into t (id,a) values (367,25);
+insert into t (id,a) values (367,26);
+insert into t (id,a) values (367,27);
+insert into t (id,a) values (367,28);
+insert into t (id,a) values (367,29);
+insert into t (id,a) values (367,30);
+insert into t (id,a) values (367,31);
+insert into t (id,a) values (367,32);
+insert into t (id,a) values (367,33);
+insert into t (id,a) values (367,34);
+insert into t (id,a) values (367,35);
+insert into t (id,a) values (367,36);
+insert into t (id,a) values (367,37);
+insert into t (id,a) values (367,38);
+insert into t (id,a) values (367,39);
+insert into t (id,a) values (367,40);
+insert into t (id,a) values (367,41);
+insert into t (id,a) values (367,42);
+insert into t (id,a) values (367,43);
+insert into t (id,a) values (367,44);
+insert into t (id,a) values (367,45);
+insert into t (id,a) values (367,46);
+insert into t (id,a) values (367,47);
+insert into t (id,a) values (367,48);
+insert into t (id,a) values (367,49);
+insert into t (id,a) values (367,50);
+insert into t (id,a) values (367,51);
+insert into t (id,a) values (367,52);
+insert into t (id,a) values (367,53);
+insert into t (id,a) values (367,54);
+insert into t (id,a) values (367,55);
+insert into t (id,a) values (367,56);
+insert into t (id,a) values (367,57);
+insert into t (id,a) values (367,58);
+insert into t (id,a) values (367,59);
+insert into t (id,a) values (367,60);
+insert into t (id,a) values (367,61);
+insert into t (id,a) values (367,62);
+insert into t (id,a) values (367,63);
+insert into t (id,a) values (367,64);
+insert into t (id,a) values (367,65);
+insert into t (id,a) values (367,66);
+insert into t (id,a) values (367,67);
+insert into t (id,a) values (367,68);
+insert into t (id,a) values (367,69);
+insert into t (id,a) values (367,70);
+insert into t (id,a) values (367,71);
+insert into t (id,a) values (367,72);
+insert into t (id,a) values (367,73);
+insert into t (id,a) values (367,74);
+insert into t (id,a) values (367,75);
+insert into t (id,a) values (367,76);
+insert into t (id,a) values (367,77);
+insert into t (id,a) values (367,78);
+insert into t (id,a) values (367,79);
+insert into t (id,a) values (367,80);
+insert into t (id,a) values (367,81);
+insert into t (id,a) values (367,82);
+insert into t (id,a) values (367,83);
+insert into t (id,a) values (367,84);
+insert into t (id,a) values (367,85);
+insert into t (id,a) values (367,86);
+insert into t (id,a) values (367,87);
+insert into t (id,a) values (367,88);
+insert into t (id,a) values (367,89);
+insert into t (id,a) values (367,90);
+insert into t (id,a) values (367,91);
+insert into t (id,a) values (367,92);
+insert into t (id,a) values (367,93);
+insert into t (id,a) values (367,94);
+insert into t (id,a) values (367,95);
+insert into t (id,a) values (367,96);
+insert into t (id,a) values (367,97);
+insert into t (id,a) values (367,98);
+insert into t (id,a) values (367,99);
+insert into t (id,a) values (368,0);
+insert into t (id,a) values (368,1);
+insert into t (id,a) values (368,2);
+insert into t (id,a) values (368,3);
+insert into t (id,a) values (368,4);
+insert into t (id,a) values (368,5);
+insert into t (id,a) values (368,6);
+insert into t (id,a) values (368,7);
+insert into t (id,a) values (368,8);
+insert into t (id,a) values (368,9);
+insert into t (id,a) values (368,10);
+insert into t (id,a) values (368,11);
+insert into t (id,a) values (368,12);
+insert into t (id,a) values (368,13);
+insert into t (id,a) values (368,14);
+insert into t (id,a) values (368,15);
+insert into t (id,a) values (368,16);
+insert into t (id,a) values (368,17);
+insert into t (id,a) values (368,18);
+insert into t (id,a) values (368,19);
+insert into t (id,a) values (368,20);
+insert into t (id,a) values (368,21);
+insert into t (id,a) values (368,22);
+insert into t (id,a) values (368,23);
+insert into t (id,a) values (368,24);
+insert into t (id,a) values (368,25);
+insert into t (id,a) values (368,26);
+insert into t (id,a) values (368,27);
+insert into t (id,a) values (368,28);
+insert into t (id,a) values (368,29);
+insert into t (id,a) values (368,30);
+insert into t (id,a) values (368,31);
+insert into t (id,a) values (368,32);
+insert into t (id,a) values (368,33);
+insert into t (id,a) values (368,34);
+insert into t (id,a) values (368,35);
+insert into t (id,a) values (368,36);
+insert into t (id,a) values (368,37);
+insert into t (id,a) values (368,38);
+insert into t (id,a) values (368,39);
+insert into t (id,a) values (368,40);
+insert into t (id,a) values (368,41);
+insert into t (id,a) values (368,42);
+insert into t (id,a) values (368,43);
+insert into t (id,a) values (368,44);
+insert into t (id,a) values (368,45);
+insert into t (id,a) values (368,46);
+insert into t (id,a) values (368,47);
+insert into t (id,a) values (368,48);
+insert into t (id,a) values (368,49);
+insert into t (id,a) values (368,50);
+insert into t (id,a) values (368,51);
+insert into t (id,a) values (368,52);
+insert into t (id,a) values (368,53);
+insert into t (id,a) values (368,54);
+insert into t (id,a) values (368,55);
+insert into t (id,a) values (368,56);
+insert into t (id,a) values (368,57);
+insert into t (id,a) values (368,58);
+insert into t (id,a) values (368,59);
+insert into t (id,a) values (368,60);
+insert into t (id,a) values (368,61);
+insert into t (id,a) values (368,62);
+insert into t (id,a) values (368,63);
+insert into t (id,a) values (368,64);
+insert into t (id,a) values (368,65);
+insert into t (id,a) values (368,66);
+insert into t (id,a) values (368,67);
+insert into t (id,a) values (368,68);
+insert into t (id,a) values (368,69);
+insert into t (id,a) values (368,70);
+insert into t (id,a) values (368,71);
+insert into t (id,a) values (368,72);
+insert into t (id,a) values (368,73);
+insert into t (id,a) values (368,74);
+insert into t (id,a) values (368,75);
+insert into t (id,a) values (368,76);
+insert into t (id,a) values (368,77);
+insert into t (id,a) values (368,78);
+insert into t (id,a) values (368,79);
+insert into t (id,a) values (368,80);
+insert into t (id,a) values (368,81);
+insert into t (id,a) values (368,82);
+insert into t (id,a) values (368,83);
+insert into t (id,a) values (368,84);
+insert into t (id,a) values (368,85);
+insert into t (id,a) values (368,86);
+insert into t (id,a) values (368,87);
+insert into t (id,a) values (368,88);
+insert into t (id,a) values (368,89);
+insert into t (id,a) values (368,90);
+insert into t (id,a) values (368,91);
+insert into t (id,a) values (368,92);
+insert into t (id,a) values (368,93);
+insert into t (id,a) values (368,94);
+insert into t (id,a) values (368,95);
+insert into t (id,a) values (368,96);
+insert into t (id,a) values (368,97);
+insert into t (id,a) values (368,98);
+insert into t (id,a) values (368,99);
+insert into t (id,a) values (369,0);
+insert into t (id,a) values (369,1);
+insert into t (id,a) values (369,2);
+insert into t (id,a) values (369,3);
+insert into t (id,a) values (369,4);
+insert into t (id,a) values (369,5);
+insert into t (id,a) values (369,6);
+insert into t (id,a) values (369,7);
+insert into t (id,a) values (369,8);
+insert into t (id,a) values (369,9);
+insert into t (id,a) values (369,10);
+insert into t (id,a) values (369,11);
+insert into t (id,a) values (369,12);
+insert into t (id,a) values (369,13);
+insert into t (id,a) values (369,14);
+insert into t (id,a) values (369,15);
+insert into t (id,a) values (369,16);
+insert into t (id,a) values (369,17);
+insert into t (id,a) values (369,18);
+insert into t (id,a) values (369,19);
+insert into t (id,a) values (369,20);
+insert into t (id,a) values (369,21);
+insert into t (id,a) values (369,22);
+insert into t (id,a) values (369,23);
+insert into t (id,a) values (369,24);
+insert into t (id,a) values (369,25);
+insert into t (id,a) values (369,26);
+insert into t (id,a) values (369,27);
+insert into t (id,a) values (369,28);
+insert into t (id,a) values (369,29);
+insert into t (id,a) values (369,30);
+insert into t (id,a) values (369,31);
+insert into t (id,a) values (369,32);
+insert into t (id,a) values (369,33);
+insert into t (id,a) values (369,34);
+insert into t (id,a) values (369,35);
+insert into t (id,a) values (369,36);
+insert into t (id,a) values (369,37);
+insert into t (id,a) values (369,38);
+insert into t (id,a) values (369,39);
+insert into t (id,a) values (369,40);
+insert into t (id,a) values (369,41);
+insert into t (id,a) values (369,42);
+insert into t (id,a) values (369,43);
+insert into t (id,a) values (369,44);
+insert into t (id,a) values (369,45);
+insert into t (id,a) values (369,46);
+insert into t (id,a) values (369,47);
+insert into t (id,a) values (369,48);
+insert into t (id,a) values (369,49);
+insert into t (id,a) values (369,50);
+insert into t (id,a) values (369,51);
+insert into t (id,a) values (369,52);
+insert into t (id,a) values (369,53);
+insert into t (id,a) values (369,54);
+insert into t (id,a) values (369,55);
+insert into t (id,a) values (369,56);
+insert into t (id,a) values (369,57);
+insert into t (id,a) values (369,58);
+insert into t (id,a) values (369,59);
+insert into t (id,a) values (369,60);
+insert into t (id,a) values (369,61);
+insert into t (id,a) values (369,62);
+insert into t (id,a) values (369,63);
+insert into t (id,a) values (369,64);
+insert into t (id,a) values (369,65);
+insert into t (id,a) values (369,66);
+insert into t (id,a) values (369,67);
+insert into t (id,a) values (369,68);
+insert into t (id,a) values (369,69);
+insert into t (id,a) values (369,70);
+insert into t (id,a) values (369,71);
+insert into t (id,a) values (369,72);
+insert into t (id,a) values (369,73);
+insert into t (id,a) values (369,74);
+insert into t (id,a) values (369,75);
+insert into t (id,a) values (369,76);
+insert into t (id,a) values (369,77);
+insert into t (id,a) values (369,78);
+insert into t (id,a) values (369,79);
+insert into t (id,a) values (369,80);
+insert into t (id,a) values (369,81);
+insert into t (id,a) values (369,82);
+insert into t (id,a) values (369,83);
+insert into t (id,a) values (369,84);
+insert into t (id,a) values (369,85);
+insert into t (id,a) values (369,86);
+insert into t (id,a) values (369,87);
+insert into t (id,a) values (369,88);
+insert into t (id,a) values (369,89);
+insert into t (id,a) values (369,90);
+insert into t (id,a) values (369,91);
+insert into t (id,a) values (369,92);
+insert into t (id,a) values (369,93);
+insert into t (id,a) values (369,94);
+insert into t (id,a) values (369,95);
+insert into t (id,a) values (369,96);
+insert into t (id,a) values (369,97);
+insert into t (id,a) values (369,98);
+insert into t (id,a) values (369,99);
+insert into t (id,a) values (370,0);
+insert into t (id,a) values (370,1);
+insert into t (id,a) values (370,2);
+insert into t (id,a) values (370,3);
+insert into t (id,a) values (370,4);
+insert into t (id,a) values (370,5);
+insert into t (id,a) values (370,6);
+insert into t (id,a) values (370,7);
+insert into t (id,a) values (370,8);
+insert into t (id,a) values (370,9);
+insert into t (id,a) values (370,10);
+insert into t (id,a) values (370,11);
+insert into t (id,a) values (370,12);
+insert into t (id,a) values (370,13);
+insert into t (id,a) values (370,14);
+insert into t (id,a) values (370,15);
+insert into t (id,a) values (370,16);
+insert into t (id,a) values (370,17);
+insert into t (id,a) values (370,18);
+insert into t (id,a) values (370,19);
+insert into t (id,a) values (370,20);
+insert into t (id,a) values (370,21);
+insert into t (id,a) values (370,22);
+insert into t (id,a) values (370,23);
+insert into t (id,a) values (370,24);
+insert into t (id,a) values (370,25);
+insert into t (id,a) values (370,26);
+insert into t (id,a) values (370,27);
+insert into t (id,a) values (370,28);
+insert into t (id,a) values (370,29);
+insert into t (id,a) values (370,30);
+insert into t (id,a) values (370,31);
+insert into t (id,a) values (370,32);
+insert into t (id,a) values (370,33);
+insert into t (id,a) values (370,34);
+insert into t (id,a) values (370,35);
+insert into t (id,a) values (370,36);
+insert into t (id,a) values (370,37);
+insert into t (id,a) values (370,38);
+insert into t (id,a) values (370,39);
+insert into t (id,a) values (370,40);
+insert into t (id,a) values (370,41);
+insert into t (id,a) values (370,42);
+insert into t (id,a) values (370,43);
+insert into t (id,a) values (370,44);
+insert into t (id,a) values (370,45);
+insert into t (id,a) values (370,46);
+insert into t (id,a) values (370,47);
+insert into t (id,a) values (370,48);
+insert into t (id,a) values (370,49);
+insert into t (id,a) values (370,50);
+insert into t (id,a) values (370,51);
+insert into t (id,a) values (370,52);
+insert into t (id,a) values (370,53);
+insert into t (id,a) values (370,54);
+insert into t (id,a) values (370,55);
+insert into t (id,a) values (370,56);
+insert into t (id,a) values (370,57);
+insert into t (id,a) values (370,58);
+insert into t (id,a) values (370,59);
+insert into t (id,a) values (370,60);
+insert into t (id,a) values (370,61);
+insert into t (id,a) values (370,62);
+insert into t (id,a) values (370,63);
+insert into t (id,a) values (370,64);
+insert into t (id,a) values (370,65);
+insert into t (id,a) values (370,66);
+insert into t (id,a) values (370,67);
+insert into t (id,a) values (370,68);
+insert into t (id,a) values (370,69);
+insert into t (id,a) values (370,70);
+insert into t (id,a) values (370,71);
+insert into t (id,a) values (370,72);
+insert into t (id,a) values (370,73);
+insert into t (id,a) values (370,74);
+insert into t (id,a) values (370,75);
+insert into t (id,a) values (370,76);
+insert into t (id,a) values (370,77);
+insert into t (id,a) values (370,78);
+insert into t (id,a) values (370,79);
+insert into t (id,a) values (370,80);
+insert into t (id,a) values (370,81);
+insert into t (id,a) values (370,82);
+insert into t (id,a) values (370,83);
+insert into t (id,a) values (370,84);
+insert into t (id,a) values (370,85);
+insert into t (id,a) values (370,86);
+insert into t (id,a) values (370,87);
+insert into t (id,a) values (370,88);
+insert into t (id,a) values (370,89);
+insert into t (id,a) values (370,90);
+insert into t (id,a) values (370,91);
+insert into t (id,a) values (370,92);
+insert into t (id,a) values (370,93);
+insert into t (id,a) values (370,94);
+insert into t (id,a) values (370,95);
+insert into t (id,a) values (370,96);
+insert into t (id,a) values (370,97);
+insert into t (id,a) values (370,98);
+insert into t (id,a) values (370,99);
+insert into t (id,a) values (371,0);
+insert into t (id,a) values (371,1);
+insert into t (id,a) values (371,2);
+insert into t (id,a) values (371,3);
+insert into t (id,a) values (371,4);
+insert into t (id,a) values (371,5);
+insert into t (id,a) values (371,6);
+insert into t (id,a) values (371,7);
+insert into t (id,a) values (371,8);
+insert into t (id,a) values (371,9);
+insert into t (id,a) values (371,10);
+insert into t (id,a) values (371,11);
+insert into t (id,a) values (371,12);
+insert into t (id,a) values (371,13);
+insert into t (id,a) values (371,14);
+insert into t (id,a) values (371,15);
+insert into t (id,a) values (371,16);
+insert into t (id,a) values (371,17);
+insert into t (id,a) values (371,18);
+insert into t (id,a) values (371,19);
+insert into t (id,a) values (371,20);
+insert into t (id,a) values (371,21);
+insert into t (id,a) values (371,22);
+insert into t (id,a) values (371,23);
+insert into t (id,a) values (371,24);
+insert into t (id,a) values (371,25);
+insert into t (id,a) values (371,26);
+insert into t (id,a) values (371,27);
+insert into t (id,a) values (371,28);
+insert into t (id,a) values (371,29);
+insert into t (id,a) values (371,30);
+insert into t (id,a) values (371,31);
+insert into t (id,a) values (371,32);
+insert into t (id,a) values (371,33);
+insert into t (id,a) values (371,34);
+insert into t (id,a) values (371,35);
+insert into t (id,a) values (371,36);
+insert into t (id,a) values (371,37);
+insert into t (id,a) values (371,38);
+insert into t (id,a) values (371,39);
+insert into t (id,a) values (371,40);
+insert into t (id,a) values (371,41);
+insert into t (id,a) values (371,42);
+insert into t (id,a) values (371,43);
+insert into t (id,a) values (371,44);
+insert into t (id,a) values (371,45);
+insert into t (id,a) values (371,46);
+insert into t (id,a) values (371,47);
+insert into t (id,a) values (371,48);
+insert into t (id,a) values (371,49);
+insert into t (id,a) values (371,50);
+insert into t (id,a) values (371,51);
+insert into t (id,a) values (371,52);
+insert into t (id,a) values (371,53);
+insert into t (id,a) values (371,54);
+insert into t (id,a) values (371,55);
+insert into t (id,a) values (371,56);
+insert into t (id,a) values (371,57);
+insert into t (id,a) values (371,58);
+insert into t (id,a) values (371,59);
+insert into t (id,a) values (371,60);
+insert into t (id,a) values (371,61);
+insert into t (id,a) values (371,62);
+insert into t (id,a) values (371,63);
+insert into t (id,a) values (371,64);
+insert into t (id,a) values (371,65);
+insert into t (id,a) values (371,66);
+insert into t (id,a) values (371,67);
+insert into t (id,a) values (371,68);
+insert into t (id,a) values (371,69);
+insert into t (id,a) values (371,70);
+insert into t (id,a) values (371,71);
+insert into t (id,a) values (371,72);
+insert into t (id,a) values (371,73);
+insert into t (id,a) values (371,74);
+insert into t (id,a) values (371,75);
+insert into t (id,a) values (371,76);
+insert into t (id,a) values (371,77);
+insert into t (id,a) values (371,78);
+insert into t (id,a) values (371,79);
+insert into t (id,a) values (371,80);
+insert into t (id,a) values (371,81);
+insert into t (id,a) values (371,82);
+insert into t (id,a) values (371,83);
+insert into t (id,a) values (371,84);
+insert into t (id,a) values (371,85);
+insert into t (id,a) values (371,86);
+insert into t (id,a) values (371,87);
+insert into t (id,a) values (371,88);
+insert into t (id,a) values (371,89);
+insert into t (id,a) values (371,90);
+insert into t (id,a) values (371,91);
+insert into t (id,a) values (371,92);
+insert into t (id,a) values (371,93);
+insert into t (id,a) values (371,94);
+insert into t (id,a) values (371,95);
+insert into t (id,a) values (371,96);
+insert into t (id,a) values (371,97);
+insert into t (id,a) values (371,98);
+insert into t (id,a) values (371,99);
+insert into t (id,a) values (372,0);
+insert into t (id,a) values (372,1);
+insert into t (id,a) values (372,2);
+insert into t (id,a) values (372,3);
+insert into t (id,a) values (372,4);
+insert into t (id,a) values (372,5);
+insert into t (id,a) values (372,6);
+insert into t (id,a) values (372,7);
+insert into t (id,a) values (372,8);
+insert into t (id,a) values (372,9);
+insert into t (id,a) values (372,10);
+insert into t (id,a) values (372,11);
+insert into t (id,a) values (372,12);
+insert into t (id,a) values (372,13);
+insert into t (id,a) values (372,14);
+insert into t (id,a) values (372,15);
+insert into t (id,a) values (372,16);
+insert into t (id,a) values (372,17);
+insert into t (id,a) values (372,18);
+insert into t (id,a) values (372,19);
+insert into t (id,a) values (372,20);
+insert into t (id,a) values (372,21);
+insert into t (id,a) values (372,22);
+insert into t (id,a) values (372,23);
+insert into t (id,a) values (372,24);
+insert into t (id,a) values (372,25);
+insert into t (id,a) values (372,26);
+insert into t (id,a) values (372,27);
+insert into t (id,a) values (372,28);
+insert into t (id,a) values (372,29);
+insert into t (id,a) values (372,30);
+insert into t (id,a) values (372,31);
+insert into t (id,a) values (372,32);
+insert into t (id,a) values (372,33);
+insert into t (id,a) values (372,34);
+insert into t (id,a) values (372,35);
+insert into t (id,a) values (372,36);
+insert into t (id,a) values (372,37);
+insert into t (id,a) values (372,38);
+insert into t (id,a) values (372,39);
+insert into t (id,a) values (372,40);
+insert into t (id,a) values (372,41);
+insert into t (id,a) values (372,42);
+insert into t (id,a) values (372,43);
+insert into t (id,a) values (372,44);
+insert into t (id,a) values (372,45);
+insert into t (id,a) values (372,46);
+insert into t (id,a) values (372,47);
+insert into t (id,a) values (372,48);
+insert into t (id,a) values (372,49);
+insert into t (id,a) values (372,50);
+insert into t (id,a) values (372,51);
+insert into t (id,a) values (372,52);
+insert into t (id,a) values (372,53);
+insert into t (id,a) values (372,54);
+insert into t (id,a) values (372,55);
+insert into t (id,a) values (372,56);
+insert into t (id,a) values (372,57);
+insert into t (id,a) values (372,58);
+insert into t (id,a) values (372,59);
+insert into t (id,a) values (372,60);
+insert into t (id,a) values (372,61);
+insert into t (id,a) values (372,62);
+insert into t (id,a) values (372,63);
+insert into t (id,a) values (372,64);
+insert into t (id,a) values (372,65);
+insert into t (id,a) values (372,66);
+insert into t (id,a) values (372,67);
+insert into t (id,a) values (372,68);
+insert into t (id,a) values (372,69);
+insert into t (id,a) values (372,70);
+insert into t (id,a) values (372,71);
+insert into t (id,a) values (372,72);
+insert into t (id,a) values (372,73);
+insert into t (id,a) values (372,74);
+insert into t (id,a) values (372,75);
+insert into t (id,a) values (372,76);
+insert into t (id,a) values (372,77);
+insert into t (id,a) values (372,78);
+insert into t (id,a) values (372,79);
+insert into t (id,a) values (372,80);
+insert into t (id,a) values (372,81);
+insert into t (id,a) values (372,82);
+insert into t (id,a) values (372,83);
+insert into t (id,a) values (372,84);
+insert into t (id,a) values (372,85);
+insert into t (id,a) values (372,86);
+insert into t (id,a) values (372,87);
+insert into t (id,a) values (372,88);
+insert into t (id,a) values (372,89);
+insert into t (id,a) values (372,90);
+insert into t (id,a) values (372,91);
+insert into t (id,a) values (372,92);
+insert into t (id,a) values (372,93);
+insert into t (id,a) values (372,94);
+insert into t (id,a) values (372,95);
+insert into t (id,a) values (372,96);
+insert into t (id,a) values (372,97);
+insert into t (id,a) values (372,98);
+insert into t (id,a) values (372,99);
+insert into t (id,a) values (373,0);
+insert into t (id,a) values (373,1);
+insert into t (id,a) values (373,2);
+insert into t (id,a) values (373,3);
+insert into t (id,a) values (373,4);
+insert into t (id,a) values (373,5);
+insert into t (id,a) values (373,6);
+insert into t (id,a) values (373,7);
+insert into t (id,a) values (373,8);
+insert into t (id,a) values (373,9);
+insert into t (id,a) values (373,10);
+insert into t (id,a) values (373,11);
+insert into t (id,a) values (373,12);
+insert into t (id,a) values (373,13);
+insert into t (id,a) values (373,14);
+insert into t (id,a) values (373,15);
+insert into t (id,a) values (373,16);
+insert into t (id,a) values (373,17);
+insert into t (id,a) values (373,18);
+insert into t (id,a) values (373,19);
+insert into t (id,a) values (373,20);
+insert into t (id,a) values (373,21);
+insert into t (id,a) values (373,22);
+insert into t (id,a) values (373,23);
+insert into t (id,a) values (373,24);
+insert into t (id,a) values (373,25);
+insert into t (id,a) values (373,26);
+insert into t (id,a) values (373,27);
+insert into t (id,a) values (373,28);
+insert into t (id,a) values (373,29);
+insert into t (id,a) values (373,30);
+insert into t (id,a) values (373,31);
+insert into t (id,a) values (373,32);
+insert into t (id,a) values (373,33);
+insert into t (id,a) values (373,34);
+insert into t (id,a) values (373,35);
+insert into t (id,a) values (373,36);
+insert into t (id,a) values (373,37);
+insert into t (id,a) values (373,38);
+insert into t (id,a) values (373,39);
+insert into t (id,a) values (373,40);
+insert into t (id,a) values (373,41);
+insert into t (id,a) values (373,42);
+insert into t (id,a) values (373,43);
+insert into t (id,a) values (373,44);
+insert into t (id,a) values (373,45);
+insert into t (id,a) values (373,46);
+insert into t (id,a) values (373,47);
+insert into t (id,a) values (373,48);
+insert into t (id,a) values (373,49);
+insert into t (id,a) values (373,50);
+insert into t (id,a) values (373,51);
+insert into t (id,a) values (373,52);
+insert into t (id,a) values (373,53);
+insert into t (id,a) values (373,54);
+insert into t (id,a) values (373,55);
+insert into t (id,a) values (373,56);
+insert into t (id,a) values (373,57);
+insert into t (id,a) values (373,58);
+insert into t (id,a) values (373,59);
+insert into t (id,a) values (373,60);
+insert into t (id,a) values (373,61);
+insert into t (id,a) values (373,62);
+insert into t (id,a) values (373,63);
+insert into t (id,a) values (373,64);
+insert into t (id,a) values (373,65);
+insert into t (id,a) values (373,66);
+insert into t (id,a) values (373,67);
+insert into t (id,a) values (373,68);
+insert into t (id,a) values (373,69);
+insert into t (id,a) values (373,70);
+insert into t (id,a) values (373,71);
+insert into t (id,a) values (373,72);
+insert into t (id,a) values (373,73);
+insert into t (id,a) values (373,74);
+insert into t (id,a) values (373,75);
+insert into t (id,a) values (373,76);
+insert into t (id,a) values (373,77);
+insert into t (id,a) values (373,78);
+insert into t (id,a) values (373,79);
+insert into t (id,a) values (373,80);
+insert into t (id,a) values (373,81);
+insert into t (id,a) values (373,82);
+insert into t (id,a) values (373,83);
+insert into t (id,a) values (373,84);
+insert into t (id,a) values (373,85);
+insert into t (id,a) values (373,86);
+insert into t (id,a) values (373,87);
+insert into t (id,a) values (373,88);
+insert into t (id,a) values (373,89);
+insert into t (id,a) values (373,90);
+insert into t (id,a) values (373,91);
+insert into t (id,a) values (373,92);
+insert into t (id,a) values (373,93);
+insert into t (id,a) values (373,94);
+insert into t (id,a) values (373,95);
+insert into t (id,a) values (373,96);
+insert into t (id,a) values (373,97);
+insert into t (id,a) values (373,98);
+insert into t (id,a) values (373,99);
+insert into t (id,a) values (374,0);
+insert into t (id,a) values (374,1);
+insert into t (id,a) values (374,2);
+insert into t (id,a) values (374,3);
+insert into t (id,a) values (374,4);
+insert into t (id,a) values (374,5);
+insert into t (id,a) values (374,6);
+insert into t (id,a) values (374,7);
+insert into t (id,a) values (374,8);
+insert into t (id,a) values (374,9);
+insert into t (id,a) values (374,10);
+insert into t (id,a) values (374,11);
+insert into t (id,a) values (374,12);
+insert into t (id,a) values (374,13);
+insert into t (id,a) values (374,14);
+insert into t (id,a) values (374,15);
+insert into t (id,a) values (374,16);
+insert into t (id,a) values (374,17);
+insert into t (id,a) values (374,18);
+insert into t (id,a) values (374,19);
+insert into t (id,a) values (374,20);
+insert into t (id,a) values (374,21);
+insert into t (id,a) values (374,22);
+insert into t (id,a) values (374,23);
+insert into t (id,a) values (374,24);
+insert into t (id,a) values (374,25);
+insert into t (id,a) values (374,26);
+insert into t (id,a) values (374,27);
+insert into t (id,a) values (374,28);
+insert into t (id,a) values (374,29);
+insert into t (id,a) values (374,30);
+insert into t (id,a) values (374,31);
+insert into t (id,a) values (374,32);
+insert into t (id,a) values (374,33);
+insert into t (id,a) values (374,34);
+insert into t (id,a) values (374,35);
+insert into t (id,a) values (374,36);
+insert into t (id,a) values (374,37);
+insert into t (id,a) values (374,38);
+insert into t (id,a) values (374,39);
+insert into t (id,a) values (374,40);
+insert into t (id,a) values (374,41);
+insert into t (id,a) values (374,42);
+insert into t (id,a) values (374,43);
+insert into t (id,a) values (374,44);
+insert into t (id,a) values (374,45);
+insert into t (id,a) values (374,46);
+insert into t (id,a) values (374,47);
+insert into t (id,a) values (374,48);
+insert into t (id,a) values (374,49);
+insert into t (id,a) values (374,50);
+insert into t (id,a) values (374,51);
+insert into t (id,a) values (374,52);
+insert into t (id,a) values (374,53);
+insert into t (id,a) values (374,54);
+insert into t (id,a) values (374,55);
+insert into t (id,a) values (374,56);
+insert into t (id,a) values (374,57);
+insert into t (id,a) values (374,58);
+insert into t (id,a) values (374,59);
+insert into t (id,a) values (374,60);
+insert into t (id,a) values (374,61);
+insert into t (id,a) values (374,62);
+insert into t (id,a) values (374,63);
+insert into t (id,a) values (374,64);
+insert into t (id,a) values (374,65);
+insert into t (id,a) values (374,66);
+insert into t (id,a) values (374,67);
+insert into t (id,a) values (374,68);
+insert into t (id,a) values (374,69);
+insert into t (id,a) values (374,70);
+insert into t (id,a) values (374,71);
+insert into t (id,a) values (374,72);
+insert into t (id,a) values (374,73);
+insert into t (id,a) values (374,74);
+insert into t (id,a) values (374,75);
+insert into t (id,a) values (374,76);
+insert into t (id,a) values (374,77);
+insert into t (id,a) values (374,78);
+insert into t (id,a) values (374,79);
+insert into t (id,a) values (374,80);
+insert into t (id,a) values (374,81);
+insert into t (id,a) values (374,82);
+insert into t (id,a) values (374,83);
+insert into t (id,a) values (374,84);
+insert into t (id,a) values (374,85);
+insert into t (id,a) values (374,86);
+insert into t (id,a) values (374,87);
+insert into t (id,a) values (374,88);
+insert into t (id,a) values (374,89);
+insert into t (id,a) values (374,90);
+insert into t (id,a) values (374,91);
+insert into t (id,a) values (374,92);
+insert into t (id,a) values (374,93);
+insert into t (id,a) values (374,94);
+insert into t (id,a) values (374,95);
+insert into t (id,a) values (374,96);
+insert into t (id,a) values (374,97);
+insert into t (id,a) values (374,98);
+insert into t (id,a) values (374,99);
+insert into t (id,a) values (375,0);
+insert into t (id,a) values (375,1);
+insert into t (id,a) values (375,2);
+insert into t (id,a) values (375,3);
+insert into t (id,a) values (375,4);
+insert into t (id,a) values (375,5);
+insert into t (id,a) values (375,6);
+insert into t (id,a) values (375,7);
+insert into t (id,a) values (375,8);
+insert into t (id,a) values (375,9);
+insert into t (id,a) values (375,10);
+insert into t (id,a) values (375,11);
+insert into t (id,a) values (375,12);
+insert into t (id,a) values (375,13);
+insert into t (id,a) values (375,14);
+insert into t (id,a) values (375,15);
+insert into t (id,a) values (375,16);
+insert into t (id,a) values (375,17);
+insert into t (id,a) values (375,18);
+insert into t (id,a) values (375,19);
+insert into t (id,a) values (375,20);
+insert into t (id,a) values (375,21);
+insert into t (id,a) values (375,22);
+insert into t (id,a) values (375,23);
+insert into t (id,a) values (375,24);
+insert into t (id,a) values (375,25);
+insert into t (id,a) values (375,26);
+insert into t (id,a) values (375,27);
+insert into t (id,a) values (375,28);
+insert into t (id,a) values (375,29);
+insert into t (id,a) values (375,30);
+insert into t (id,a) values (375,31);
+insert into t (id,a) values (375,32);
+insert into t (id,a) values (375,33);
+insert into t (id,a) values (375,34);
+insert into t (id,a) values (375,35);
+insert into t (id,a) values (375,36);
+insert into t (id,a) values (375,37);
+insert into t (id,a) values (375,38);
+insert into t (id,a) values (375,39);
+insert into t (id,a) values (375,40);
+insert into t (id,a) values (375,41);
+insert into t (id,a) values (375,42);
+insert into t (id,a) values (375,43);
+insert into t (id,a) values (375,44);
+insert into t (id,a) values (375,45);
+insert into t (id,a) values (375,46);
+insert into t (id,a) values (375,47);
+insert into t (id,a) values (375,48);
+insert into t (id,a) values (375,49);
+insert into t (id,a) values (375,50);
+insert into t (id,a) values (375,51);
+insert into t (id,a) values (375,52);
+insert into t (id,a) values (375,53);
+insert into t (id,a) values (375,54);
+insert into t (id,a) values (375,55);
+insert into t (id,a) values (375,56);
+insert into t (id,a) values (375,57);
+insert into t (id,a) values (375,58);
+insert into t (id,a) values (375,59);
+insert into t (id,a) values (375,60);
+insert into t (id,a) values (375,61);
+insert into t (id,a) values (375,62);
+insert into t (id,a) values (375,63);
+insert into t (id,a) values (375,64);
+insert into t (id,a) values (375,65);
+insert into t (id,a) values (375,66);
+insert into t (id,a) values (375,67);
+insert into t (id,a) values (375,68);
+insert into t (id,a) values (375,69);
+insert into t (id,a) values (375,70);
+insert into t (id,a) values (375,71);
+insert into t (id,a) values (375,72);
+insert into t (id,a) values (375,73);
+insert into t (id,a) values (375,74);
+insert into t (id,a) values (375,75);
+insert into t (id,a) values (375,76);
+insert into t (id,a) values (375,77);
+insert into t (id,a) values (375,78);
+insert into t (id,a) values (375,79);
+insert into t (id,a) values (375,80);
+insert into t (id,a) values (375,81);
+insert into t (id,a) values (375,82);
+insert into t (id,a) values (375,83);
+insert into t (id,a) values (375,84);
+insert into t (id,a) values (375,85);
+insert into t (id,a) values (375,86);
+insert into t (id,a) values (375,87);
+insert into t (id,a) values (375,88);
+insert into t (id,a) values (375,89);
+insert into t (id,a) values (375,90);
+insert into t (id,a) values (375,91);
+insert into t (id,a) values (375,92);
+insert into t (id,a) values (375,93);
+insert into t (id,a) values (375,94);
+insert into t (id,a) values (375,95);
+insert into t (id,a) values (375,96);
+insert into t (id,a) values (375,97);
+insert into t (id,a) values (375,98);
+insert into t (id,a) values (375,99);
+insert into t (id,a) values (376,0);
+insert into t (id,a) values (376,1);
+insert into t (id,a) values (376,2);
+insert into t (id,a) values (376,3);
+insert into t (id,a) values (376,4);
+insert into t (id,a) values (376,5);
+insert into t (id,a) values (376,6);
+insert into t (id,a) values (376,7);
+insert into t (id,a) values (376,8);
+insert into t (id,a) values (376,9);
+insert into t (id,a) values (376,10);
+insert into t (id,a) values (376,11);
+insert into t (id,a) values (376,12);
+insert into t (id,a) values (376,13);
+insert into t (id,a) values (376,14);
+insert into t (id,a) values (376,15);
+insert into t (id,a) values (376,16);
+insert into t (id,a) values (376,17);
+insert into t (id,a) values (376,18);
+insert into t (id,a) values (376,19);
+insert into t (id,a) values (376,20);
+insert into t (id,a) values (376,21);
+insert into t (id,a) values (376,22);
+insert into t (id,a) values (376,23);
+insert into t (id,a) values (376,24);
+insert into t (id,a) values (376,25);
+insert into t (id,a) values (376,26);
+insert into t (id,a) values (376,27);
+insert into t (id,a) values (376,28);
+insert into t (id,a) values (376,29);
+insert into t (id,a) values (376,30);
+insert into t (id,a) values (376,31);
+insert into t (id,a) values (376,32);
+insert into t (id,a) values (376,33);
+insert into t (id,a) values (376,34);
+insert into t (id,a) values (376,35);
+insert into t (id,a) values (376,36);
+insert into t (id,a) values (376,37);
+insert into t (id,a) values (376,38);
+insert into t (id,a) values (376,39);
+insert into t (id,a) values (376,40);
+insert into t (id,a) values (376,41);
+insert into t (id,a) values (376,42);
+insert into t (id,a) values (376,43);
+insert into t (id,a) values (376,44);
+insert into t (id,a) values (376,45);
+insert into t (id,a) values (376,46);
+insert into t (id,a) values (376,47);
+insert into t (id,a) values (376,48);
+insert into t (id,a) values (376,49);
+insert into t (id,a) values (376,50);
+insert into t (id,a) values (376,51);
+insert into t (id,a) values (376,52);
+insert into t (id,a) values (376,53);
+insert into t (id,a) values (376,54);
+insert into t (id,a) values (376,55);
+insert into t (id,a) values (376,56);
+insert into t (id,a) values (376,57);
+insert into t (id,a) values (376,58);
+insert into t (id,a) values (376,59);
+insert into t (id,a) values (376,60);
+insert into t (id,a) values (376,61);
+insert into t (id,a) values (376,62);
+insert into t (id,a) values (376,63);
+insert into t (id,a) values (376,64);
+insert into t (id,a) values (376,65);
+insert into t (id,a) values (376,66);
+insert into t (id,a) values (376,67);
+insert into t (id,a) values (376,68);
+insert into t (id,a) values (376,69);
+insert into t (id,a) values (376,70);
+insert into t (id,a) values (376,71);
+insert into t (id,a) values (376,72);
+insert into t (id,a) values (376,73);
+insert into t (id,a) values (376,74);
+insert into t (id,a) values (376,75);
+insert into t (id,a) values (376,76);
+insert into t (id,a) values (376,77);
+insert into t (id,a) values (376,78);
+insert into t (id,a) values (376,79);
+insert into t (id,a) values (376,80);
+insert into t (id,a) values (376,81);
+insert into t (id,a) values (376,82);
+insert into t (id,a) values (376,83);
+insert into t (id,a) values (376,84);
+insert into t (id,a) values (376,85);
+insert into t (id,a) values (376,86);
+insert into t (id,a) values (376,87);
+insert into t (id,a) values (376,88);
+insert into t (id,a) values (376,89);
+insert into t (id,a) values (376,90);
+insert into t (id,a) values (376,91);
+insert into t (id,a) values (376,92);
+insert into t (id,a) values (376,93);
+insert into t (id,a) values (376,94);
+insert into t (id,a) values (376,95);
+insert into t (id,a) values (376,96);
+insert into t (id,a) values (376,97);
+insert into t (id,a) values (376,98);
+insert into t (id,a) values (376,99);
+insert into t (id,a) values (377,0);
+insert into t (id,a) values (377,1);
+insert into t (id,a) values (377,2);
+insert into t (id,a) values (377,3);
+insert into t (id,a) values (377,4);
+insert into t (id,a) values (377,5);
+insert into t (id,a) values (377,6);
+insert into t (id,a) values (377,7);
+insert into t (id,a) values (377,8);
+insert into t (id,a) values (377,9);
+insert into t (id,a) values (377,10);
+insert into t (id,a) values (377,11);
+insert into t (id,a) values (377,12);
+insert into t (id,a) values (377,13);
+insert into t (id,a) values (377,14);
+insert into t (id,a) values (377,15);
+insert into t (id,a) values (377,16);
+insert into t (id,a) values (377,17);
+insert into t (id,a) values (377,18);
+insert into t (id,a) values (377,19);
+insert into t (id,a) values (377,20);
+insert into t (id,a) values (377,21);
+insert into t (id,a) values (377,22);
+insert into t (id,a) values (377,23);
+insert into t (id,a) values (377,24);
+insert into t (id,a) values (377,25);
+insert into t (id,a) values (377,26);
+insert into t (id,a) values (377,27);
+insert into t (id,a) values (377,28);
+insert into t (id,a) values (377,29);
+insert into t (id,a) values (377,30);
+insert into t (id,a) values (377,31);
+insert into t (id,a) values (377,32);
+insert into t (id,a) values (377,33);
+insert into t (id,a) values (377,34);
+insert into t (id,a) values (377,35);
+insert into t (id,a) values (377,36);
+insert into t (id,a) values (377,37);
+insert into t (id,a) values (377,38);
+insert into t (id,a) values (377,39);
+insert into t (id,a) values (377,40);
+insert into t (id,a) values (377,41);
+insert into t (id,a) values (377,42);
+insert into t (id,a) values (377,43);
+insert into t (id,a) values (377,44);
+insert into t (id,a) values (377,45);
+insert into t (id,a) values (377,46);
+insert into t (id,a) values (377,47);
+insert into t (id,a) values (377,48);
+insert into t (id,a) values (377,49);
+insert into t (id,a) values (377,50);
+insert into t (id,a) values (377,51);
+insert into t (id,a) values (377,52);
+insert into t (id,a) values (377,53);
+insert into t (id,a) values (377,54);
+insert into t (id,a) values (377,55);
+insert into t (id,a) values (377,56);
+insert into t (id,a) values (377,57);
+insert into t (id,a) values (377,58);
+insert into t (id,a) values (377,59);
+insert into t (id,a) values (377,60);
+insert into t (id,a) values (377,61);
+insert into t (id,a) values (377,62);
+insert into t (id,a) values (377,63);
+insert into t (id,a) values (377,64);
+insert into t (id,a) values (377,65);
+insert into t (id,a) values (377,66);
+insert into t (id,a) values (377,67);
+insert into t (id,a) values (377,68);
+insert into t (id,a) values (377,69);
+insert into t (id,a) values (377,70);
+insert into t (id,a) values (377,71);
+insert into t (id,a) values (377,72);
+insert into t (id,a) values (377,73);
+insert into t (id,a) values (377,74);
+insert into t (id,a) values (377,75);
+insert into t (id,a) values (377,76);
+insert into t (id,a) values (377,77);
+insert into t (id,a) values (377,78);
+insert into t (id,a) values (377,79);
+insert into t (id,a) values (377,80);
+insert into t (id,a) values (377,81);
+insert into t (id,a) values (377,82);
+insert into t (id,a) values (377,83);
+insert into t (id,a) values (377,84);
+insert into t (id,a) values (377,85);
+insert into t (id,a) values (377,86);
+insert into t (id,a) values (377,87);
+insert into t (id,a) values (377,88);
+insert into t (id,a) values (377,89);
+insert into t (id,a) values (377,90);
+insert into t (id,a) values (377,91);
+insert into t (id,a) values (377,92);
+insert into t (id,a) values (377,93);
+insert into t (id,a) values (377,94);
+insert into t (id,a) values (377,95);
+insert into t (id,a) values (377,96);
+insert into t (id,a) values (377,97);
+insert into t (id,a) values (377,98);
+insert into t (id,a) values (377,99);
+insert into t (id,a) values (378,0);
+insert into t (id,a) values (378,1);
+insert into t (id,a) values (378,2);
+insert into t (id,a) values (378,3);
+insert into t (id,a) values (378,4);
+insert into t (id,a) values (378,5);
+insert into t (id,a) values (378,6);
+insert into t (id,a) values (378,7);
+insert into t (id,a) values (378,8);
+insert into t (id,a) values (378,9);
+insert into t (id,a) values (378,10);
+insert into t (id,a) values (378,11);
+insert into t (id,a) values (378,12);
+insert into t (id,a) values (378,13);
+insert into t (id,a) values (378,14);
+insert into t (id,a) values (378,15);
+insert into t (id,a) values (378,16);
+insert into t (id,a) values (378,17);
+insert into t (id,a) values (378,18);
+insert into t (id,a) values (378,19);
+insert into t (id,a) values (378,20);
+insert into t (id,a) values (378,21);
+insert into t (id,a) values (378,22);
+insert into t (id,a) values (378,23);
+insert into t (id,a) values (378,24);
+insert into t (id,a) values (378,25);
+insert into t (id,a) values (378,26);
+insert into t (id,a) values (378,27);
+insert into t (id,a) values (378,28);
+insert into t (id,a) values (378,29);
+insert into t (id,a) values (378,30);
+insert into t (id,a) values (378,31);
+insert into t (id,a) values (378,32);
+insert into t (id,a) values (378,33);
+insert into t (id,a) values (378,34);
+insert into t (id,a) values (378,35);
+insert into t (id,a) values (378,36);
+insert into t (id,a) values (378,37);
+insert into t (id,a) values (378,38);
+insert into t (id,a) values (378,39);
+insert into t (id,a) values (378,40);
+insert into t (id,a) values (378,41);
+insert into t (id,a) values (378,42);
+insert into t (id,a) values (378,43);
+insert into t (id,a) values (378,44);
+insert into t (id,a) values (378,45);
+insert into t (id,a) values (378,46);
+insert into t (id,a) values (378,47);
+insert into t (id,a) values (378,48);
+insert into t (id,a) values (378,49);
+insert into t (id,a) values (378,50);
+insert into t (id,a) values (378,51);
+insert into t (id,a) values (378,52);
+insert into t (id,a) values (378,53);
+insert into t (id,a) values (378,54);
+insert into t (id,a) values (378,55);
+insert into t (id,a) values (378,56);
+insert into t (id,a) values (378,57);
+insert into t (id,a) values (378,58);
+insert into t (id,a) values (378,59);
+insert into t (id,a) values (378,60);
+insert into t (id,a) values (378,61);
+insert into t (id,a) values (378,62);
+insert into t (id,a) values (378,63);
+insert into t (id,a) values (378,64);
+insert into t (id,a) values (378,65);
+insert into t (id,a) values (378,66);
+insert into t (id,a) values (378,67);
+insert into t (id,a) values (378,68);
+insert into t (id,a) values (378,69);
+insert into t (id,a) values (378,70);
+insert into t (id,a) values (378,71);
+insert into t (id,a) values (378,72);
+insert into t (id,a) values (378,73);
+insert into t (id,a) values (378,74);
+insert into t (id,a) values (378,75);
+insert into t (id,a) values (378,76);
+insert into t (id,a) values (378,77);
+insert into t (id,a) values (378,78);
+insert into t (id,a) values (378,79);
+insert into t (id,a) values (378,80);
+insert into t (id,a) values (378,81);
+insert into t (id,a) values (378,82);
+insert into t (id,a) values (378,83);
+insert into t (id,a) values (378,84);
+insert into t (id,a) values (378,85);
+insert into t (id,a) values (378,86);
+insert into t (id,a) values (378,87);
+insert into t (id,a) values (378,88);
+insert into t (id,a) values (378,89);
+insert into t (id,a) values (378,90);
+insert into t (id,a) values (378,91);
+insert into t (id,a) values (378,92);
+insert into t (id,a) values (378,93);
+insert into t (id,a) values (378,94);
+insert into t (id,a) values (378,95);
+insert into t (id,a) values (378,96);
+insert into t (id,a) values (378,97);
+insert into t (id,a) values (378,98);
+insert into t (id,a) values (378,99);
+insert into t (id,a) values (379,0);
+insert into t (id,a) values (379,1);
+insert into t (id,a) values (379,2);
+insert into t (id,a) values (379,3);
+insert into t (id,a) values (379,4);
+insert into t (id,a) values (379,5);
+insert into t (id,a) values (379,6);
+insert into t (id,a) values (379,7);
+insert into t (id,a) values (379,8);
+insert into t (id,a) values (379,9);
+insert into t (id,a) values (379,10);
+insert into t (id,a) values (379,11);
+insert into t (id,a) values (379,12);
+insert into t (id,a) values (379,13);
+insert into t (id,a) values (379,14);
+insert into t (id,a) values (379,15);
+insert into t (id,a) values (379,16);
+insert into t (id,a) values (379,17);
+insert into t (id,a) values (379,18);
+insert into t (id,a) values (379,19);
+insert into t (id,a) values (379,20);
+insert into t (id,a) values (379,21);
+insert into t (id,a) values (379,22);
+insert into t (id,a) values (379,23);
+insert into t (id,a) values (379,24);
+insert into t (id,a) values (379,25);
+insert into t (id,a) values (379,26);
+insert into t (id,a) values (379,27);
+insert into t (id,a) values (379,28);
+insert into t (id,a) values (379,29);
+insert into t (id,a) values (379,30);
+insert into t (id,a) values (379,31);
+insert into t (id,a) values (379,32);
+insert into t (id,a) values (379,33);
+insert into t (id,a) values (379,34);
+insert into t (id,a) values (379,35);
+insert into t (id,a) values (379,36);
+insert into t (id,a) values (379,37);
+insert into t (id,a) values (379,38);
+insert into t (id,a) values (379,39);
+insert into t (id,a) values (379,40);
+insert into t (id,a) values (379,41);
+insert into t (id,a) values (379,42);
+insert into t (id,a) values (379,43);
+insert into t (id,a) values (379,44);
+insert into t (id,a) values (379,45);
+insert into t (id,a) values (379,46);
+insert into t (id,a) values (379,47);
+insert into t (id,a) values (379,48);
+insert into t (id,a) values (379,49);
+insert into t (id,a) values (379,50);
+insert into t (id,a) values (379,51);
+insert into t (id,a) values (379,52);
+insert into t (id,a) values (379,53);
+insert into t (id,a) values (379,54);
+insert into t (id,a) values (379,55);
+insert into t (id,a) values (379,56);
+insert into t (id,a) values (379,57);
+insert into t (id,a) values (379,58);
+insert into t (id,a) values (379,59);
+insert into t (id,a) values (379,60);
+insert into t (id,a) values (379,61);
+insert into t (id,a) values (379,62);
+insert into t (id,a) values (379,63);
+insert into t (id,a) values (379,64);
+insert into t (id,a) values (379,65);
+insert into t (id,a) values (379,66);
+insert into t (id,a) values (379,67);
+insert into t (id,a) values (379,68);
+insert into t (id,a) values (379,69);
+insert into t (id,a) values (379,70);
+insert into t (id,a) values (379,71);
+insert into t (id,a) values (379,72);
+insert into t (id,a) values (379,73);
+insert into t (id,a) values (379,74);
+insert into t (id,a) values (379,75);
+insert into t (id,a) values (379,76);
+insert into t (id,a) values (379,77);
+insert into t (id,a) values (379,78);
+insert into t (id,a) values (379,79);
+insert into t (id,a) values (379,80);
+insert into t (id,a) values (379,81);
+insert into t (id,a) values (379,82);
+insert into t (id,a) values (379,83);
+insert into t (id,a) values (379,84);
+insert into t (id,a) values (379,85);
+insert into t (id,a) values (379,86);
+insert into t (id,a) values (379,87);
+insert into t (id,a) values (379,88);
+insert into t (id,a) values (379,89);
+insert into t (id,a) values (379,90);
+insert into t (id,a) values (379,91);
+insert into t (id,a) values (379,92);
+insert into t (id,a) values (379,93);
+insert into t (id,a) values (379,94);
+insert into t (id,a) values (379,95);
+insert into t (id,a) values (379,96);
+insert into t (id,a) values (379,97);
+insert into t (id,a) values (379,98);
+insert into t (id,a) values (379,99);
+insert into t (id,a) values (380,0);
+insert into t (id,a) values (380,1);
+insert into t (id,a) values (380,2);
+insert into t (id,a) values (380,3);
+insert into t (id,a) values (380,4);
+insert into t (id,a) values (380,5);
+insert into t (id,a) values (380,6);
+insert into t (id,a) values (380,7);
+insert into t (id,a) values (380,8);
+insert into t (id,a) values (380,9);
+insert into t (id,a) values (380,10);
+insert into t (id,a) values (380,11);
+insert into t (id,a) values (380,12);
+insert into t (id,a) values (380,13);
+insert into t (id,a) values (380,14);
+insert into t (id,a) values (380,15);
+insert into t (id,a) values (380,16);
+insert into t (id,a) values (380,17);
+insert into t (id,a) values (380,18);
+insert into t (id,a) values (380,19);
+insert into t (id,a) values (380,20);
+insert into t (id,a) values (380,21);
+insert into t (id,a) values (380,22);
+insert into t (id,a) values (380,23);
+insert into t (id,a) values (380,24);
+insert into t (id,a) values (380,25);
+insert into t (id,a) values (380,26);
+insert into t (id,a) values (380,27);
+insert into t (id,a) values (380,28);
+insert into t (id,a) values (380,29);
+insert into t (id,a) values (380,30);
+insert into t (id,a) values (380,31);
+insert into t (id,a) values (380,32);
+insert into t (id,a) values (380,33);
+insert into t (id,a) values (380,34);
+insert into t (id,a) values (380,35);
+insert into t (id,a) values (380,36);
+insert into t (id,a) values (380,37);
+insert into t (id,a) values (380,38);
+insert into t (id,a) values (380,39);
+insert into t (id,a) values (380,40);
+insert into t (id,a) values (380,41);
+insert into t (id,a) values (380,42);
+insert into t (id,a) values (380,43);
+insert into t (id,a) values (380,44);
+insert into t (id,a) values (380,45);
+insert into t (id,a) values (380,46);
+insert into t (id,a) values (380,47);
+insert into t (id,a) values (380,48);
+insert into t (id,a) values (380,49);
+insert into t (id,a) values (380,50);
+insert into t (id,a) values (380,51);
+insert into t (id,a) values (380,52);
+insert into t (id,a) values (380,53);
+insert into t (id,a) values (380,54);
+insert into t (id,a) values (380,55);
+insert into t (id,a) values (380,56);
+insert into t (id,a) values (380,57);
+insert into t (id,a) values (380,58);
+insert into t (id,a) values (380,59);
+insert into t (id,a) values (380,60);
+insert into t (id,a) values (380,61);
+insert into t (id,a) values (380,62);
+insert into t (id,a) values (380,63);
+insert into t (id,a) values (380,64);
+insert into t (id,a) values (380,65);
+insert into t (id,a) values (380,66);
+insert into t (id,a) values (380,67);
+insert into t (id,a) values (380,68);
+insert into t (id,a) values (380,69);
+insert into t (id,a) values (380,70);
+insert into t (id,a) values (380,71);
+insert into t (id,a) values (380,72);
+insert into t (id,a) values (380,73);
+insert into t (id,a) values (380,74);
+insert into t (id,a) values (380,75);
+insert into t (id,a) values (380,76);
+insert into t (id,a) values (380,77);
+insert into t (id,a) values (380,78);
+insert into t (id,a) values (380,79);
+insert into t (id,a) values (380,80);
+insert into t (id,a) values (380,81);
+insert into t (id,a) values (380,82);
+insert into t (id,a) values (380,83);
+insert into t (id,a) values (380,84);
+insert into t (id,a) values (380,85);
+insert into t (id,a) values (380,86);
+insert into t (id,a) values (380,87);
+insert into t (id,a) values (380,88);
+insert into t (id,a) values (380,89);
+insert into t (id,a) values (380,90);
+insert into t (id,a) values (380,91);
+insert into t (id,a) values (380,92);
+insert into t (id,a) values (380,93);
+insert into t (id,a) values (380,94);
+insert into t (id,a) values (380,95);
+insert into t (id,a) values (380,96);
+insert into t (id,a) values (380,97);
+insert into t (id,a) values (380,98);
+insert into t (id,a) values (380,99);
+insert into t (id,a) values (381,0);
+insert into t (id,a) values (381,1);
+insert into t (id,a) values (381,2);
+insert into t (id,a) values (381,3);
+insert into t (id,a) values (381,4);
+insert into t (id,a) values (381,5);
+insert into t (id,a) values (381,6);
+insert into t (id,a) values (381,7);
+insert into t (id,a) values (381,8);
+insert into t (id,a) values (381,9);
+insert into t (id,a) values (381,10);
+insert into t (id,a) values (381,11);
+insert into t (id,a) values (381,12);
+insert into t (id,a) values (381,13);
+insert into t (id,a) values (381,14);
+insert into t (id,a) values (381,15);
+insert into t (id,a) values (381,16);
+insert into t (id,a) values (381,17);
+insert into t (id,a) values (381,18);
+insert into t (id,a) values (381,19);
+insert into t (id,a) values (381,20);
+insert into t (id,a) values (381,21);
+insert into t (id,a) values (381,22);
+insert into t (id,a) values (381,23);
+insert into t (id,a) values (381,24);
+insert into t (id,a) values (381,25);
+insert into t (id,a) values (381,26);
+insert into t (id,a) values (381,27);
+insert into t (id,a) values (381,28);
+insert into t (id,a) values (381,29);
+insert into t (id,a) values (381,30);
+insert into t (id,a) values (381,31);
+insert into t (id,a) values (381,32);
+insert into t (id,a) values (381,33);
+insert into t (id,a) values (381,34);
+insert into t (id,a) values (381,35);
+insert into t (id,a) values (381,36);
+insert into t (id,a) values (381,37);
+insert into t (id,a) values (381,38);
+insert into t (id,a) values (381,39);
+insert into t (id,a) values (381,40);
+insert into t (id,a) values (381,41);
+insert into t (id,a) values (381,42);
+insert into t (id,a) values (381,43);
+insert into t (id,a) values (381,44);
+insert into t (id,a) values (381,45);
+insert into t (id,a) values (381,46);
+insert into t (id,a) values (381,47);
+insert into t (id,a) values (381,48);
+insert into t (id,a) values (381,49);
+insert into t (id,a) values (381,50);
+insert into t (id,a) values (381,51);
+insert into t (id,a) values (381,52);
+insert into t (id,a) values (381,53);
+insert into t (id,a) values (381,54);
+insert into t (id,a) values (381,55);
+insert into t (id,a) values (381,56);
+insert into t (id,a) values (381,57);
+insert into t (id,a) values (381,58);
+insert into t (id,a) values (381,59);
+insert into t (id,a) values (381,60);
+insert into t (id,a) values (381,61);
+insert into t (id,a) values (381,62);
+insert into t (id,a) values (381,63);
+insert into t (id,a) values (381,64);
+insert into t (id,a) values (381,65);
+insert into t (id,a) values (381,66);
+insert into t (id,a) values (381,67);
+insert into t (id,a) values (381,68);
+insert into t (id,a) values (381,69);
+insert into t (id,a) values (381,70);
+insert into t (id,a) values (381,71);
+insert into t (id,a) values (381,72);
+insert into t (id,a) values (381,73);
+insert into t (id,a) values (381,74);
+insert into t (id,a) values (381,75);
+insert into t (id,a) values (381,76);
+insert into t (id,a) values (381,77);
+insert into t (id,a) values (381,78);
+insert into t (id,a) values (381,79);
+insert into t (id,a) values (381,80);
+insert into t (id,a) values (381,81);
+insert into t (id,a) values (381,82);
+insert into t (id,a) values (381,83);
+insert into t (id,a) values (381,84);
+insert into t (id,a) values (381,85);
+insert into t (id,a) values (381,86);
+insert into t (id,a) values (381,87);
+insert into t (id,a) values (381,88);
+insert into t (id,a) values (381,89);
+insert into t (id,a) values (381,90);
+insert into t (id,a) values (381,91);
+insert into t (id,a) values (381,92);
+insert into t (id,a) values (381,93);
+insert into t (id,a) values (381,94);
+insert into t (id,a) values (381,95);
+insert into t (id,a) values (381,96);
+insert into t (id,a) values (381,97);
+insert into t (id,a) values (381,98);
+insert into t (id,a) values (381,99);
+insert into t (id,a) values (382,0);
+insert into t (id,a) values (382,1);
+insert into t (id,a) values (382,2);
+insert into t (id,a) values (382,3);
+insert into t (id,a) values (382,4);
+insert into t (id,a) values (382,5);
+insert into t (id,a) values (382,6);
+insert into t (id,a) values (382,7);
+insert into t (id,a) values (382,8);
+insert into t (id,a) values (382,9);
+insert into t (id,a) values (382,10);
+insert into t (id,a) values (382,11);
+insert into t (id,a) values (382,12);
+insert into t (id,a) values (382,13);
+insert into t (id,a) values (382,14);
+insert into t (id,a) values (382,15);
+insert into t (id,a) values (382,16);
+insert into t (id,a) values (382,17);
+insert into t (id,a) values (382,18);
+insert into t (id,a) values (382,19);
+insert into t (id,a) values (382,20);
+insert into t (id,a) values (382,21);
+insert into t (id,a) values (382,22);
+insert into t (id,a) values (382,23);
+insert into t (id,a) values (382,24);
+insert into t (id,a) values (382,25);
+insert into t (id,a) values (382,26);
+insert into t (id,a) values (382,27);
+insert into t (id,a) values (382,28);
+insert into t (id,a) values (382,29);
+insert into t (id,a) values (382,30);
+insert into t (id,a) values (382,31);
+insert into t (id,a) values (382,32);
+insert into t (id,a) values (382,33);
+insert into t (id,a) values (382,34);
+insert into t (id,a) values (382,35);
+insert into t (id,a) values (382,36);
+insert into t (id,a) values (382,37);
+insert into t (id,a) values (382,38);
+insert into t (id,a) values (382,39);
+insert into t (id,a) values (382,40);
+insert into t (id,a) values (382,41);
+insert into t (id,a) values (382,42);
+insert into t (id,a) values (382,43);
+insert into t (id,a) values (382,44);
+insert into t (id,a) values (382,45);
+insert into t (id,a) values (382,46);
+insert into t (id,a) values (382,47);
+insert into t (id,a) values (382,48);
+insert into t (id,a) values (382,49);
+insert into t (id,a) values (382,50);
+insert into t (id,a) values (382,51);
+insert into t (id,a) values (382,52);
+insert into t (id,a) values (382,53);
+insert into t (id,a) values (382,54);
+insert into t (id,a) values (382,55);
+insert into t (id,a) values (382,56);
+insert into t (id,a) values (382,57);
+insert into t (id,a) values (382,58);
+insert into t (id,a) values (382,59);
+insert into t (id,a) values (382,60);
+insert into t (id,a) values (382,61);
+insert into t (id,a) values (382,62);
+insert into t (id,a) values (382,63);
+insert into t (id,a) values (382,64);
+insert into t (id,a) values (382,65);
+insert into t (id,a) values (382,66);
+insert into t (id,a) values (382,67);
+insert into t (id,a) values (382,68);
+insert into t (id,a) values (382,69);
+insert into t (id,a) values (382,70);
+insert into t (id,a) values (382,71);
+insert into t (id,a) values (382,72);
+insert into t (id,a) values (382,73);
+insert into t (id,a) values (382,74);
+insert into t (id,a) values (382,75);
+insert into t (id,a) values (382,76);
+insert into t (id,a) values (382,77);
+insert into t (id,a) values (382,78);
+insert into t (id,a) values (382,79);
+insert into t (id,a) values (382,80);
+insert into t (id,a) values (382,81);
+insert into t (id,a) values (382,82);
+insert into t (id,a) values (382,83);
+insert into t (id,a) values (382,84);
+insert into t (id,a) values (382,85);
+insert into t (id,a) values (382,86);
+insert into t (id,a) values (382,87);
+insert into t (id,a) values (382,88);
+insert into t (id,a) values (382,89);
+insert into t (id,a) values (382,90);
+insert into t (id,a) values (382,91);
+insert into t (id,a) values (382,92);
+insert into t (id,a) values (382,93);
+insert into t (id,a) values (382,94);
+insert into t (id,a) values (382,95);
+insert into t (id,a) values (382,96);
+insert into t (id,a) values (382,97);
+insert into t (id,a) values (382,98);
+insert into t (id,a) values (382,99);
+insert into t (id,a) values (383,0);
+insert into t (id,a) values (383,1);
+insert into t (id,a) values (383,2);
+insert into t (id,a) values (383,3);
+insert into t (id,a) values (383,4);
+insert into t (id,a) values (383,5);
+insert into t (id,a) values (383,6);
+insert into t (id,a) values (383,7);
+insert into t (id,a) values (383,8);
+insert into t (id,a) values (383,9);
+insert into t (id,a) values (383,10);
+insert into t (id,a) values (383,11);
+insert into t (id,a) values (383,12);
+insert into t (id,a) values (383,13);
+insert into t (id,a) values (383,14);
+insert into t (id,a) values (383,15);
+insert into t (id,a) values (383,16);
+insert into t (id,a) values (383,17);
+insert into t (id,a) values (383,18);
+insert into t (id,a) values (383,19);
+insert into t (id,a) values (383,20);
+insert into t (id,a) values (383,21);
+insert into t (id,a) values (383,22);
+insert into t (id,a) values (383,23);
+insert into t (id,a) values (383,24);
+insert into t (id,a) values (383,25);
+insert into t (id,a) values (383,26);
+insert into t (id,a) values (383,27);
+insert into t (id,a) values (383,28);
+insert into t (id,a) values (383,29);
+insert into t (id,a) values (383,30);
+insert into t (id,a) values (383,31);
+insert into t (id,a) values (383,32);
+insert into t (id,a) values (383,33);
+insert into t (id,a) values (383,34);
+insert into t (id,a) values (383,35);
+insert into t (id,a) values (383,36);
+insert into t (id,a) values (383,37);
+insert into t (id,a) values (383,38);
+insert into t (id,a) values (383,39);
+insert into t (id,a) values (383,40);
+insert into t (id,a) values (383,41);
+insert into t (id,a) values (383,42);
+insert into t (id,a) values (383,43);
+insert into t (id,a) values (383,44);
+insert into t (id,a) values (383,45);
+insert into t (id,a) values (383,46);
+insert into t (id,a) values (383,47);
+insert into t (id,a) values (383,48);
+insert into t (id,a) values (383,49);
+insert into t (id,a) values (383,50);
+insert into t (id,a) values (383,51);
+insert into t (id,a) values (383,52);
+insert into t (id,a) values (383,53);
+insert into t (id,a) values (383,54);
+insert into t (id,a) values (383,55);
+insert into t (id,a) values (383,56);
+insert into t (id,a) values (383,57);
+insert into t (id,a) values (383,58);
+insert into t (id,a) values (383,59);
+insert into t (id,a) values (383,60);
+insert into t (id,a) values (383,61);
+insert into t (id,a) values (383,62);
+insert into t (id,a) values (383,63);
+insert into t (id,a) values (383,64);
+insert into t (id,a) values (383,65);
+insert into t (id,a) values (383,66);
+insert into t (id,a) values (383,67);
+insert into t (id,a) values (383,68);
+insert into t (id,a) values (383,69);
+insert into t (id,a) values (383,70);
+insert into t (id,a) values (383,71);
+insert into t (id,a) values (383,72);
+insert into t (id,a) values (383,73);
+insert into t (id,a) values (383,74);
+insert into t (id,a) values (383,75);
+insert into t (id,a) values (383,76);
+insert into t (id,a) values (383,77);
+insert into t (id,a) values (383,78);
+insert into t (id,a) values (383,79);
+insert into t (id,a) values (383,80);
+insert into t (id,a) values (383,81);
+insert into t (id,a) values (383,82);
+insert into t (id,a) values (383,83);
+insert into t (id,a) values (383,84);
+insert into t (id,a) values (383,85);
+insert into t (id,a) values (383,86);
+insert into t (id,a) values (383,87);
+insert into t (id,a) values (383,88);
+insert into t (id,a) values (383,89);
+insert into t (id,a) values (383,90);
+insert into t (id,a) values (383,91);
+insert into t (id,a) values (383,92);
+insert into t (id,a) values (383,93);
+insert into t (id,a) values (383,94);
+insert into t (id,a) values (383,95);
+insert into t (id,a) values (383,96);
+insert into t (id,a) values (383,97);
+insert into t (id,a) values (383,98);
+insert into t (id,a) values (383,99);
+insert into t (id,a) values (384,0);
+insert into t (id,a) values (384,1);
+insert into t (id,a) values (384,2);
+insert into t (id,a) values (384,3);
+insert into t (id,a) values (384,4);
+insert into t (id,a) values (384,5);
+insert into t (id,a) values (384,6);
+insert into t (id,a) values (384,7);
+insert into t (id,a) values (384,8);
+insert into t (id,a) values (384,9);
+insert into t (id,a) values (384,10);
+insert into t (id,a) values (384,11);
+insert into t (id,a) values (384,12);
+insert into t (id,a) values (384,13);
+insert into t (id,a) values (384,14);
+insert into t (id,a) values (384,15);
+insert into t (id,a) values (384,16);
+insert into t (id,a) values (384,17);
+insert into t (id,a) values (384,18);
+insert into t (id,a) values (384,19);
+insert into t (id,a) values (384,20);
+insert into t (id,a) values (384,21);
+insert into t (id,a) values (384,22);
+insert into t (id,a) values (384,23);
+insert into t (id,a) values (384,24);
+insert into t (id,a) values (384,25);
+insert into t (id,a) values (384,26);
+insert into t (id,a) values (384,27);
+insert into t (id,a) values (384,28);
+insert into t (id,a) values (384,29);
+insert into t (id,a) values (384,30);
+insert into t (id,a) values (384,31);
+insert into t (id,a) values (384,32);
+insert into t (id,a) values (384,33);
+insert into t (id,a) values (384,34);
+insert into t (id,a) values (384,35);
+insert into t (id,a) values (384,36);
+insert into t (id,a) values (384,37);
+insert into t (id,a) values (384,38);
+insert into t (id,a) values (384,39);
+insert into t (id,a) values (384,40);
+insert into t (id,a) values (384,41);
+insert into t (id,a) values (384,42);
+insert into t (id,a) values (384,43);
+insert into t (id,a) values (384,44);
+insert into t (id,a) values (384,45);
+insert into t (id,a) values (384,46);
+insert into t (id,a) values (384,47);
+insert into t (id,a) values (384,48);
+insert into t (id,a) values (384,49);
+insert into t (id,a) values (384,50);
+insert into t (id,a) values (384,51);
+insert into t (id,a) values (384,52);
+insert into t (id,a) values (384,53);
+insert into t (id,a) values (384,54);
+insert into t (id,a) values (384,55);
+insert into t (id,a) values (384,56);
+insert into t (id,a) values (384,57);
+insert into t (id,a) values (384,58);
+insert into t (id,a) values (384,59);
+insert into t (id,a) values (384,60);
+insert into t (id,a) values (384,61);
+insert into t (id,a) values (384,62);
+insert into t (id,a) values (384,63);
+insert into t (id,a) values (384,64);
+insert into t (id,a) values (384,65);
+insert into t (id,a) values (384,66);
+insert into t (id,a) values (384,67);
+insert into t (id,a) values (384,68);
+insert into t (id,a) values (384,69);
+insert into t (id,a) values (384,70);
+insert into t (id,a) values (384,71);
+insert into t (id,a) values (384,72);
+insert into t (id,a) values (384,73);
+insert into t (id,a) values (384,74);
+insert into t (id,a) values (384,75);
+insert into t (id,a) values (384,76);
+insert into t (id,a) values (384,77);
+insert into t (id,a) values (384,78);
+insert into t (id,a) values (384,79);
+insert into t (id,a) values (384,80);
+insert into t (id,a) values (384,81);
+insert into t (id,a) values (384,82);
+insert into t (id,a) values (384,83);
+insert into t (id,a) values (384,84);
+insert into t (id,a) values (384,85);
+insert into t (id,a) values (384,86);
+insert into t (id,a) values (384,87);
+insert into t (id,a) values (384,88);
+insert into t (id,a) values (384,89);
+insert into t (id,a) values (384,90);
+insert into t (id,a) values (384,91);
+insert into t (id,a) values (384,92);
+insert into t (id,a) values (384,93);
+insert into t (id,a) values (384,94);
+insert into t (id,a) values (384,95);
+insert into t (id,a) values (384,96);
+insert into t (id,a) values (384,97);
+insert into t (id,a) values (384,98);
+insert into t (id,a) values (384,99);
+insert into t (id,a) values (385,0);
+insert into t (id,a) values (385,1);
+insert into t (id,a) values (385,2);
+insert into t (id,a) values (385,3);
+insert into t (id,a) values (385,4);
+insert into t (id,a) values (385,5);
+insert into t (id,a) values (385,6);
+insert into t (id,a) values (385,7);
+insert into t (id,a) values (385,8);
+insert into t (id,a) values (385,9);
+insert into t (id,a) values (385,10);
+insert into t (id,a) values (385,11);
+insert into t (id,a) values (385,12);
+insert into t (id,a) values (385,13);
+insert into t (id,a) values (385,14);
+insert into t (id,a) values (385,15);
+insert into t (id,a) values (385,16);
+insert into t (id,a) values (385,17);
+insert into t (id,a) values (385,18);
+insert into t (id,a) values (385,19);
+insert into t (id,a) values (385,20);
+insert into t (id,a) values (385,21);
+insert into t (id,a) values (385,22);
+insert into t (id,a) values (385,23);
+insert into t (id,a) values (385,24);
+insert into t (id,a) values (385,25);
+insert into t (id,a) values (385,26);
+insert into t (id,a) values (385,27);
+insert into t (id,a) values (385,28);
+insert into t (id,a) values (385,29);
+insert into t (id,a) values (385,30);
+insert into t (id,a) values (385,31);
+insert into t (id,a) values (385,32);
+insert into t (id,a) values (385,33);
+insert into t (id,a) values (385,34);
+insert into t (id,a) values (385,35);
+insert into t (id,a) values (385,36);
+insert into t (id,a) values (385,37);
+insert into t (id,a) values (385,38);
+insert into t (id,a) values (385,39);
+insert into t (id,a) values (385,40);
+insert into t (id,a) values (385,41);
+insert into t (id,a) values (385,42);
+insert into t (id,a) values (385,43);
+insert into t (id,a) values (385,44);
+insert into t (id,a) values (385,45);
+insert into t (id,a) values (385,46);
+insert into t (id,a) values (385,47);
+insert into t (id,a) values (385,48);
+insert into t (id,a) values (385,49);
+insert into t (id,a) values (385,50);
+insert into t (id,a) values (385,51);
+insert into t (id,a) values (385,52);
+insert into t (id,a) values (385,53);
+insert into t (id,a) values (385,54);
+insert into t (id,a) values (385,55);
+insert into t (id,a) values (385,56);
+insert into t (id,a) values (385,57);
+insert into t (id,a) values (385,58);
+insert into t (id,a) values (385,59);
+insert into t (id,a) values (385,60);
+insert into t (id,a) values (385,61);
+insert into t (id,a) values (385,62);
+insert into t (id,a) values (385,63);
+insert into t (id,a) values (385,64);
+insert into t (id,a) values (385,65);
+insert into t (id,a) values (385,66);
+insert into t (id,a) values (385,67);
+insert into t (id,a) values (385,68);
+insert into t (id,a) values (385,69);
+insert into t (id,a) values (385,70);
+insert into t (id,a) values (385,71);
+insert into t (id,a) values (385,72);
+insert into t (id,a) values (385,73);
+insert into t (id,a) values (385,74);
+insert into t (id,a) values (385,75);
+insert into t (id,a) values (385,76);
+insert into t (id,a) values (385,77);
+insert into t (id,a) values (385,78);
+insert into t (id,a) values (385,79);
+insert into t (id,a) values (385,80);
+insert into t (id,a) values (385,81);
+insert into t (id,a) values (385,82);
+insert into t (id,a) values (385,83);
+insert into t (id,a) values (385,84);
+insert into t (id,a) values (385,85);
+insert into t (id,a) values (385,86);
+insert into t (id,a) values (385,87);
+insert into t (id,a) values (385,88);
+insert into t (id,a) values (385,89);
+insert into t (id,a) values (385,90);
+insert into t (id,a) values (385,91);
+insert into t (id,a) values (385,92);
+insert into t (id,a) values (385,93);
+insert into t (id,a) values (385,94);
+insert into t (id,a) values (385,95);
+insert into t (id,a) values (385,96);
+insert into t (id,a) values (385,97);
+insert into t (id,a) values (385,98);
+insert into t (id,a) values (385,99);
+insert into t (id,a) values (386,0);
+insert into t (id,a) values (386,1);
+insert into t (id,a) values (386,2);
+insert into t (id,a) values (386,3);
+insert into t (id,a) values (386,4);
+insert into t (id,a) values (386,5);
+insert into t (id,a) values (386,6);
+insert into t (id,a) values (386,7);
+insert into t (id,a) values (386,8);
+insert into t (id,a) values (386,9);
+insert into t (id,a) values (386,10);
+insert into t (id,a) values (386,11);
+insert into t (id,a) values (386,12);
+insert into t (id,a) values (386,13);
+insert into t (id,a) values (386,14);
+insert into t (id,a) values (386,15);
+insert into t (id,a) values (386,16);
+insert into t (id,a) values (386,17);
+insert into t (id,a) values (386,18);
+insert into t (id,a) values (386,19);
+insert into t (id,a) values (386,20);
+insert into t (id,a) values (386,21);
+insert into t (id,a) values (386,22);
+insert into t (id,a) values (386,23);
+insert into t (id,a) values (386,24);
+insert into t (id,a) values (386,25);
+insert into t (id,a) values (386,26);
+insert into t (id,a) values (386,27);
+insert into t (id,a) values (386,28);
+insert into t (id,a) values (386,29);
+insert into t (id,a) values (386,30);
+insert into t (id,a) values (386,31);
+insert into t (id,a) values (386,32);
+insert into t (id,a) values (386,33);
+insert into t (id,a) values (386,34);
+insert into t (id,a) values (386,35);
+insert into t (id,a) values (386,36);
+insert into t (id,a) values (386,37);
+insert into t (id,a) values (386,38);
+insert into t (id,a) values (386,39);
+insert into t (id,a) values (386,40);
+insert into t (id,a) values (386,41);
+insert into t (id,a) values (386,42);
+insert into t (id,a) values (386,43);
+insert into t (id,a) values (386,44);
+insert into t (id,a) values (386,45);
+insert into t (id,a) values (386,46);
+insert into t (id,a) values (386,47);
+insert into t (id,a) values (386,48);
+insert into t (id,a) values (386,49);
+insert into t (id,a) values (386,50);
+insert into t (id,a) values (386,51);
+insert into t (id,a) values (386,52);
+insert into t (id,a) values (386,53);
+insert into t (id,a) values (386,54);
+insert into t (id,a) values (386,55);
+insert into t (id,a) values (386,56);
+insert into t (id,a) values (386,57);
+insert into t (id,a) values (386,58);
+insert into t (id,a) values (386,59);
+insert into t (id,a) values (386,60);
+insert into t (id,a) values (386,61);
+insert into t (id,a) values (386,62);
+insert into t (id,a) values (386,63);
+insert into t (id,a) values (386,64);
+insert into t (id,a) values (386,65);
+insert into t (id,a) values (386,66);
+insert into t (id,a) values (386,67);
+insert into t (id,a) values (386,68);
+insert into t (id,a) values (386,69);
+insert into t (id,a) values (386,70);
+insert into t (id,a) values (386,71);
+insert into t (id,a) values (386,72);
+insert into t (id,a) values (386,73);
+insert into t (id,a) values (386,74);
+insert into t (id,a) values (386,75);
+insert into t (id,a) values (386,76);
+insert into t (id,a) values (386,77);
+insert into t (id,a) values (386,78);
+insert into t (id,a) values (386,79);
+insert into t (id,a) values (386,80);
+insert into t (id,a) values (386,81);
+insert into t (id,a) values (386,82);
+insert into t (id,a) values (386,83);
+insert into t (id,a) values (386,84);
+insert into t (id,a) values (386,85);
+insert into t (id,a) values (386,86);
+insert into t (id,a) values (386,87);
+insert into t (id,a) values (386,88);
+insert into t (id,a) values (386,89);
+insert into t (id,a) values (386,90);
+insert into t (id,a) values (386,91);
+insert into t (id,a) values (386,92);
+insert into t (id,a) values (386,93);
+insert into t (id,a) values (386,94);
+insert into t (id,a) values (386,95);
+insert into t (id,a) values (386,96);
+insert into t (id,a) values (386,97);
+insert into t (id,a) values (386,98);
+insert into t (id,a) values (386,99);
+insert into t (id,a) values (387,0);
+insert into t (id,a) values (387,1);
+insert into t (id,a) values (387,2);
+insert into t (id,a) values (387,3);
+insert into t (id,a) values (387,4);
+insert into t (id,a) values (387,5);
+insert into t (id,a) values (387,6);
+insert into t (id,a) values (387,7);
+insert into t (id,a) values (387,8);
+insert into t (id,a) values (387,9);
+insert into t (id,a) values (387,10);
+insert into t (id,a) values (387,11);
+insert into t (id,a) values (387,12);
+insert into t (id,a) values (387,13);
+insert into t (id,a) values (387,14);
+insert into t (id,a) values (387,15);
+insert into t (id,a) values (387,16);
+insert into t (id,a) values (387,17);
+insert into t (id,a) values (387,18);
+insert into t (id,a) values (387,19);
+insert into t (id,a) values (387,20);
+insert into t (id,a) values (387,21);
+insert into t (id,a) values (387,22);
+insert into t (id,a) values (387,23);
+insert into t (id,a) values (387,24);
+insert into t (id,a) values (387,25);
+insert into t (id,a) values (387,26);
+insert into t (id,a) values (387,27);
+insert into t (id,a) values (387,28);
+insert into t (id,a) values (387,29);
+insert into t (id,a) values (387,30);
+insert into t (id,a) values (387,31);
+insert into t (id,a) values (387,32);
+insert into t (id,a) values (387,33);
+insert into t (id,a) values (387,34);
+insert into t (id,a) values (387,35);
+insert into t (id,a) values (387,36);
+insert into t (id,a) values (387,37);
+insert into t (id,a) values (387,38);
+insert into t (id,a) values (387,39);
+insert into t (id,a) values (387,40);
+insert into t (id,a) values (387,41);
+insert into t (id,a) values (387,42);
+insert into t (id,a) values (387,43);
+insert into t (id,a) values (387,44);
+insert into t (id,a) values (387,45);
+insert into t (id,a) values (387,46);
+insert into t (id,a) values (387,47);
+insert into t (id,a) values (387,48);
+insert into t (id,a) values (387,49);
+insert into t (id,a) values (387,50);
+insert into t (id,a) values (387,51);
+insert into t (id,a) values (387,52);
+insert into t (id,a) values (387,53);
+insert into t (id,a) values (387,54);
+insert into t (id,a) values (387,55);
+insert into t (id,a) values (387,56);
+insert into t (id,a) values (387,57);
+insert into t (id,a) values (387,58);
+insert into t (id,a) values (387,59);
+insert into t (id,a) values (387,60);
+insert into t (id,a) values (387,61);
+insert into t (id,a) values (387,62);
+insert into t (id,a) values (387,63);
+insert into t (id,a) values (387,64);
+insert into t (id,a) values (387,65);
+insert into t (id,a) values (387,66);
+insert into t (id,a) values (387,67);
+insert into t (id,a) values (387,68);
+insert into t (id,a) values (387,69);
+insert into t (id,a) values (387,70);
+insert into t (id,a) values (387,71);
+insert into t (id,a) values (387,72);
+insert into t (id,a) values (387,73);
+insert into t (id,a) values (387,74);
+insert into t (id,a) values (387,75);
+insert into t (id,a) values (387,76);
+insert into t (id,a) values (387,77);
+insert into t (id,a) values (387,78);
+insert into t (id,a) values (387,79);
+insert into t (id,a) values (387,80);
+insert into t (id,a) values (387,81);
+insert into t (id,a) values (387,82);
+insert into t (id,a) values (387,83);
+insert into t (id,a) values (387,84);
+insert into t (id,a) values (387,85);
+insert into t (id,a) values (387,86);
+insert into t (id,a) values (387,87);
+insert into t (id,a) values (387,88);
+insert into t (id,a) values (387,89);
+insert into t (id,a) values (387,90);
+insert into t (id,a) values (387,91);
+insert into t (id,a) values (387,92);
+insert into t (id,a) values (387,93);
+insert into t (id,a) values (387,94);
+insert into t (id,a) values (387,95);
+insert into t (id,a) values (387,96);
+insert into t (id,a) values (387,97);
+insert into t (id,a) values (387,98);
+insert into t (id,a) values (387,99);
+insert into t (id,a) values (388,0);
+insert into t (id,a) values (388,1);
+insert into t (id,a) values (388,2);
+insert into t (id,a) values (388,3);
+insert into t (id,a) values (388,4);
+insert into t (id,a) values (388,5);
+insert into t (id,a) values (388,6);
+insert into t (id,a) values (388,7);
+insert into t (id,a) values (388,8);
+insert into t (id,a) values (388,9);
+insert into t (id,a) values (388,10);
+insert into t (id,a) values (388,11);
+insert into t (id,a) values (388,12);
+insert into t (id,a) values (388,13);
+insert into t (id,a) values (388,14);
+insert into t (id,a) values (388,15);
+insert into t (id,a) values (388,16);
+insert into t (id,a) values (388,17);
+insert into t (id,a) values (388,18);
+insert into t (id,a) values (388,19);
+insert into t (id,a) values (388,20);
+insert into t (id,a) values (388,21);
+insert into t (id,a) values (388,22);
+insert into t (id,a) values (388,23);
+insert into t (id,a) values (388,24);
+insert into t (id,a) values (388,25);
+insert into t (id,a) values (388,26);
+insert into t (id,a) values (388,27);
+insert into t (id,a) values (388,28);
+insert into t (id,a) values (388,29);
+insert into t (id,a) values (388,30);
+insert into t (id,a) values (388,31);
+insert into t (id,a) values (388,32);
+insert into t (id,a) values (388,33);
+insert into t (id,a) values (388,34);
+insert into t (id,a) values (388,35);
+insert into t (id,a) values (388,36);
+insert into t (id,a) values (388,37);
+insert into t (id,a) values (388,38);
+insert into t (id,a) values (388,39);
+insert into t (id,a) values (388,40);
+insert into t (id,a) values (388,41);
+insert into t (id,a) values (388,42);
+insert into t (id,a) values (388,43);
+insert into t (id,a) values (388,44);
+insert into t (id,a) values (388,45);
+insert into t (id,a) values (388,46);
+insert into t (id,a) values (388,47);
+insert into t (id,a) values (388,48);
+insert into t (id,a) values (388,49);
+insert into t (id,a) values (388,50);
+insert into t (id,a) values (388,51);
+insert into t (id,a) values (388,52);
+insert into t (id,a) values (388,53);
+insert into t (id,a) values (388,54);
+insert into t (id,a) values (388,55);
+insert into t (id,a) values (388,56);
+insert into t (id,a) values (388,57);
+insert into t (id,a) values (388,58);
+insert into t (id,a) values (388,59);
+insert into t (id,a) values (388,60);
+insert into t (id,a) values (388,61);
+insert into t (id,a) values (388,62);
+insert into t (id,a) values (388,63);
+insert into t (id,a) values (388,64);
+insert into t (id,a) values (388,65);
+insert into t (id,a) values (388,66);
+insert into t (id,a) values (388,67);
+insert into t (id,a) values (388,68);
+insert into t (id,a) values (388,69);
+insert into t (id,a) values (388,70);
+insert into t (id,a) values (388,71);
+insert into t (id,a) values (388,72);
+insert into t (id,a) values (388,73);
+insert into t (id,a) values (388,74);
+insert into t (id,a) values (388,75);
+insert into t (id,a) values (388,76);
+insert into t (id,a) values (388,77);
+insert into t (id,a) values (388,78);
+insert into t (id,a) values (388,79);
+insert into t (id,a) values (388,80);
+insert into t (id,a) values (388,81);
+insert into t (id,a) values (388,82);
+insert into t (id,a) values (388,83);
+insert into t (id,a) values (388,84);
+insert into t (id,a) values (388,85);
+insert into t (id,a) values (388,86);
+insert into t (id,a) values (388,87);
+insert into t (id,a) values (388,88);
+insert into t (id,a) values (388,89);
+insert into t (id,a) values (388,90);
+insert into t (id,a) values (388,91);
+insert into t (id,a) values (388,92);
+insert into t (id,a) values (388,93);
+insert into t (id,a) values (388,94);
+insert into t (id,a) values (388,95);
+insert into t (id,a) values (388,96);
+insert into t (id,a) values (388,97);
+insert into t (id,a) values (388,98);
+insert into t (id,a) values (388,99);
+insert into t (id,a) values (389,0);
+insert into t (id,a) values (389,1);
+insert into t (id,a) values (389,2);
+insert into t (id,a) values (389,3);
+insert into t (id,a) values (389,4);
+insert into t (id,a) values (389,5);
+insert into t (id,a) values (389,6);
+insert into t (id,a) values (389,7);
+insert into t (id,a) values (389,8);
+insert into t (id,a) values (389,9);
+insert into t (id,a) values (389,10);
+insert into t (id,a) values (389,11);
+insert into t (id,a) values (389,12);
+insert into t (id,a) values (389,13);
+insert into t (id,a) values (389,14);
+insert into t (id,a) values (389,15);
+insert into t (id,a) values (389,16);
+insert into t (id,a) values (389,17);
+insert into t (id,a) values (389,18);
+insert into t (id,a) values (389,19);
+insert into t (id,a) values (389,20);
+insert into t (id,a) values (389,21);
+insert into t (id,a) values (389,22);
+insert into t (id,a) values (389,23);
+insert into t (id,a) values (389,24);
+insert into t (id,a) values (389,25);
+insert into t (id,a) values (389,26);
+insert into t (id,a) values (389,27);
+insert into t (id,a) values (389,28);
+insert into t (id,a) values (389,29);
+insert into t (id,a) values (389,30);
+insert into t (id,a) values (389,31);
+insert into t (id,a) values (389,32);
+insert into t (id,a) values (389,33);
+insert into t (id,a) values (389,34);
+insert into t (id,a) values (389,35);
+insert into t (id,a) values (389,36);
+insert into t (id,a) values (389,37);
+insert into t (id,a) values (389,38);
+insert into t (id,a) values (389,39);
+insert into t (id,a) values (389,40);
+insert into t (id,a) values (389,41);
+insert into t (id,a) values (389,42);
+insert into t (id,a) values (389,43);
+insert into t (id,a) values (389,44);
+insert into t (id,a) values (389,45);
+insert into t (id,a) values (389,46);
+insert into t (id,a) values (389,47);
+insert into t (id,a) values (389,48);
+insert into t (id,a) values (389,49);
+insert into t (id,a) values (389,50);
+insert into t (id,a) values (389,51);
+insert into t (id,a) values (389,52);
+insert into t (id,a) values (389,53);
+insert into t (id,a) values (389,54);
+insert into t (id,a) values (389,55);
+insert into t (id,a) values (389,56);
+insert into t (id,a) values (389,57);
+insert into t (id,a) values (389,58);
+insert into t (id,a) values (389,59);
+insert into t (id,a) values (389,60);
+insert into t (id,a) values (389,61);
+insert into t (id,a) values (389,62);
+insert into t (id,a) values (389,63);
+insert into t (id,a) values (389,64);
+insert into t (id,a) values (389,65);
+insert into t (id,a) values (389,66);
+insert into t (id,a) values (389,67);
+insert into t (id,a) values (389,68);
+insert into t (id,a) values (389,69);
+insert into t (id,a) values (389,70);
+insert into t (id,a) values (389,71);
+insert into t (id,a) values (389,72);
+insert into t (id,a) values (389,73);
+insert into t (id,a) values (389,74);
+insert into t (id,a) values (389,75);
+insert into t (id,a) values (389,76);
+insert into t (id,a) values (389,77);
+insert into t (id,a) values (389,78);
+insert into t (id,a) values (389,79);
+insert into t (id,a) values (389,80);
+insert into t (id,a) values (389,81);
+insert into t (id,a) values (389,82);
+insert into t (id,a) values (389,83);
+insert into t (id,a) values (389,84);
+insert into t (id,a) values (389,85);
+insert into t (id,a) values (389,86);
+insert into t (id,a) values (389,87);
+insert into t (id,a) values (389,88);
+insert into t (id,a) values (389,89);
+insert into t (id,a) values (389,90);
+insert into t (id,a) values (389,91);
+insert into t (id,a) values (389,92);
+insert into t (id,a) values (389,93);
+insert into t (id,a) values (389,94);
+insert into t (id,a) values (389,95);
+insert into t (id,a) values (389,96);
+insert into t (id,a) values (389,97);
+insert into t (id,a) values (389,98);
+insert into t (id,a) values (389,99);
+insert into t (id,a) values (390,0);
+insert into t (id,a) values (390,1);
+insert into t (id,a) values (390,2);
+insert into t (id,a) values (390,3);
+insert into t (id,a) values (390,4);
+insert into t (id,a) values (390,5);
+insert into t (id,a) values (390,6);
+insert into t (id,a) values (390,7);
+insert into t (id,a) values (390,8);
+insert into t (id,a) values (390,9);
+insert into t (id,a) values (390,10);
+insert into t (id,a) values (390,11);
+insert into t (id,a) values (390,12);
+insert into t (id,a) values (390,13);
+insert into t (id,a) values (390,14);
+insert into t (id,a) values (390,15);
+insert into t (id,a) values (390,16);
+insert into t (id,a) values (390,17);
+insert into t (id,a) values (390,18);
+insert into t (id,a) values (390,19);
+insert into t (id,a) values (390,20);
+insert into t (id,a) values (390,21);
+insert into t (id,a) values (390,22);
+insert into t (id,a) values (390,23);
+insert into t (id,a) values (390,24);
+insert into t (id,a) values (390,25);
+insert into t (id,a) values (390,26);
+insert into t (id,a) values (390,27);
+insert into t (id,a) values (390,28);
+insert into t (id,a) values (390,29);
+insert into t (id,a) values (390,30);
+insert into t (id,a) values (390,31);
+insert into t (id,a) values (390,32);
+insert into t (id,a) values (390,33);
+insert into t (id,a) values (390,34);
+insert into t (id,a) values (390,35);
+insert into t (id,a) values (390,36);
+insert into t (id,a) values (390,37);
+insert into t (id,a) values (390,38);
+insert into t (id,a) values (390,39);
+insert into t (id,a) values (390,40);
+insert into t (id,a) values (390,41);
+insert into t (id,a) values (390,42);
+insert into t (id,a) values (390,43);
+insert into t (id,a) values (390,44);
+insert into t (id,a) values (390,45);
+insert into t (id,a) values (390,46);
+insert into t (id,a) values (390,47);
+insert into t (id,a) values (390,48);
+insert into t (id,a) values (390,49);
+insert into t (id,a) values (390,50);
+insert into t (id,a) values (390,51);
+insert into t (id,a) values (390,52);
+insert into t (id,a) values (390,53);
+insert into t (id,a) values (390,54);
+insert into t (id,a) values (390,55);
+insert into t (id,a) values (390,56);
+insert into t (id,a) values (390,57);
+insert into t (id,a) values (390,58);
+insert into t (id,a) values (390,59);
+insert into t (id,a) values (390,60);
+insert into t (id,a) values (390,61);
+insert into t (id,a) values (390,62);
+insert into t (id,a) values (390,63);
+insert into t (id,a) values (390,64);
+insert into t (id,a) values (390,65);
+insert into t (id,a) values (390,66);
+insert into t (id,a) values (390,67);
+insert into t (id,a) values (390,68);
+insert into t (id,a) values (390,69);
+insert into t (id,a) values (390,70);
+insert into t (id,a) values (390,71);
+insert into t (id,a) values (390,72);
+insert into t (id,a) values (390,73);
+insert into t (id,a) values (390,74);
+insert into t (id,a) values (390,75);
+insert into t (id,a) values (390,76);
+insert into t (id,a) values (390,77);
+insert into t (id,a) values (390,78);
+insert into t (id,a) values (390,79);
+insert into t (id,a) values (390,80);
+insert into t (id,a) values (390,81);
+insert into t (id,a) values (390,82);
+insert into t (id,a) values (390,83);
+insert into t (id,a) values (390,84);
+insert into t (id,a) values (390,85);
+insert into t (id,a) values (390,86);
+insert into t (id,a) values (390,87);
+insert into t (id,a) values (390,88);
+insert into t (id,a) values (390,89);
+insert into t (id,a) values (390,90);
+insert into t (id,a) values (390,91);
+insert into t (id,a) values (390,92);
+insert into t (id,a) values (390,93);
+insert into t (id,a) values (390,94);
+insert into t (id,a) values (390,95);
+insert into t (id,a) values (390,96);
+insert into t (id,a) values (390,97);
+insert into t (id,a) values (390,98);
+insert into t (id,a) values (390,99);
+insert into t (id,a) values (391,0);
+insert into t (id,a) values (391,1);
+insert into t (id,a) values (391,2);
+insert into t (id,a) values (391,3);
+insert into t (id,a) values (391,4);
+insert into t (id,a) values (391,5);
+insert into t (id,a) values (391,6);
+insert into t (id,a) values (391,7);
+insert into t (id,a) values (391,8);
+insert into t (id,a) values (391,9);
+insert into t (id,a) values (391,10);
+insert into t (id,a) values (391,11);
+insert into t (id,a) values (391,12);
+insert into t (id,a) values (391,13);
+insert into t (id,a) values (391,14);
+insert into t (id,a) values (391,15);
+insert into t (id,a) values (391,16);
+insert into t (id,a) values (391,17);
+insert into t (id,a) values (391,18);
+insert into t (id,a) values (391,19);
+insert into t (id,a) values (391,20);
+insert into t (id,a) values (391,21);
+insert into t (id,a) values (391,22);
+insert into t (id,a) values (391,23);
+insert into t (id,a) values (391,24);
+insert into t (id,a) values (391,25);
+insert into t (id,a) values (391,26);
+insert into t (id,a) values (391,27);
+insert into t (id,a) values (391,28);
+insert into t (id,a) values (391,29);
+insert into t (id,a) values (391,30);
+insert into t (id,a) values (391,31);
+insert into t (id,a) values (391,32);
+insert into t (id,a) values (391,33);
+insert into t (id,a) values (391,34);
+insert into t (id,a) values (391,35);
+insert into t (id,a) values (391,36);
+insert into t (id,a) values (391,37);
+insert into t (id,a) values (391,38);
+insert into t (id,a) values (391,39);
+insert into t (id,a) values (391,40);
+insert into t (id,a) values (391,41);
+insert into t (id,a) values (391,42);
+insert into t (id,a) values (391,43);
+insert into t (id,a) values (391,44);
+insert into t (id,a) values (391,45);
+insert into t (id,a) values (391,46);
+insert into t (id,a) values (391,47);
+insert into t (id,a) values (391,48);
+insert into t (id,a) values (391,49);
+insert into t (id,a) values (391,50);
+insert into t (id,a) values (391,51);
+insert into t (id,a) values (391,52);
+insert into t (id,a) values (391,53);
+insert into t (id,a) values (391,54);
+insert into t (id,a) values (391,55);
+insert into t (id,a) values (391,56);
+insert into t (id,a) values (391,57);
+insert into t (id,a) values (391,58);
+insert into t (id,a) values (391,59);
+insert into t (id,a) values (391,60);
+insert into t (id,a) values (391,61);
+insert into t (id,a) values (391,62);
+insert into t (id,a) values (391,63);
+insert into t (id,a) values (391,64);
+insert into t (id,a) values (391,65);
+insert into t (id,a) values (391,66);
+insert into t (id,a) values (391,67);
+insert into t (id,a) values (391,68);
+insert into t (id,a) values (391,69);
+insert into t (id,a) values (391,70);
+insert into t (id,a) values (391,71);
+insert into t (id,a) values (391,72);
+insert into t (id,a) values (391,73);
+insert into t (id,a) values (391,74);
+insert into t (id,a) values (391,75);
+insert into t (id,a) values (391,76);
+insert into t (id,a) values (391,77);
+insert into t (id,a) values (391,78);
+insert into t (id,a) values (391,79);
+insert into t (id,a) values (391,80);
+insert into t (id,a) values (391,81);
+insert into t (id,a) values (391,82);
+insert into t (id,a) values (391,83);
+insert into t (id,a) values (391,84);
+insert into t (id,a) values (391,85);
+insert into t (id,a) values (391,86);
+insert into t (id,a) values (391,87);
+insert into t (id,a) values (391,88);
+insert into t (id,a) values (391,89);
+insert into t (id,a) values (391,90);
+insert into t (id,a) values (391,91);
+insert into t (id,a) values (391,92);
+insert into t (id,a) values (391,93);
+insert into t (id,a) values (391,94);
+insert into t (id,a) values (391,95);
+insert into t (id,a) values (391,96);
+insert into t (id,a) values (391,97);
+insert into t (id,a) values (391,98);
+insert into t (id,a) values (391,99);
+insert into t (id,a) values (392,0);
+insert into t (id,a) values (392,1);
+insert into t (id,a) values (392,2);
+insert into t (id,a) values (392,3);
+insert into t (id,a) values (392,4);
+insert into t (id,a) values (392,5);
+insert into t (id,a) values (392,6);
+insert into t (id,a) values (392,7);
+insert into t (id,a) values (392,8);
+insert into t (id,a) values (392,9);
+insert into t (id,a) values (392,10);
+insert into t (id,a) values (392,11);
+insert into t (id,a) values (392,12);
+insert into t (id,a) values (392,13);
+insert into t (id,a) values (392,14);
+insert into t (id,a) values (392,15);
+insert into t (id,a) values (392,16);
+insert into t (id,a) values (392,17);
+insert into t (id,a) values (392,18);
+insert into t (id,a) values (392,19);
+insert into t (id,a) values (392,20);
+insert into t (id,a) values (392,21);
+insert into t (id,a) values (392,22);
+insert into t (id,a) values (392,23);
+insert into t (id,a) values (392,24);
+insert into t (id,a) values (392,25);
+insert into t (id,a) values (392,26);
+insert into t (id,a) values (392,27);
+insert into t (id,a) values (392,28);
+insert into t (id,a) values (392,29);
+insert into t (id,a) values (392,30);
+insert into t (id,a) values (392,31);
+insert into t (id,a) values (392,32);
+insert into t (id,a) values (392,33);
+insert into t (id,a) values (392,34);
+insert into t (id,a) values (392,35);
+insert into t (id,a) values (392,36);
+insert into t (id,a) values (392,37);
+insert into t (id,a) values (392,38);
+insert into t (id,a) values (392,39);
+insert into t (id,a) values (392,40);
+insert into t (id,a) values (392,41);
+insert into t (id,a) values (392,42);
+insert into t (id,a) values (392,43);
+insert into t (id,a) values (392,44);
+insert into t (id,a) values (392,45);
+insert into t (id,a) values (392,46);
+insert into t (id,a) values (392,47);
+insert into t (id,a) values (392,48);
+insert into t (id,a) values (392,49);
+insert into t (id,a) values (392,50);
+insert into t (id,a) values (392,51);
+insert into t (id,a) values (392,52);
+insert into t (id,a) values (392,53);
+insert into t (id,a) values (392,54);
+insert into t (id,a) values (392,55);
+insert into t (id,a) values (392,56);
+insert into t (id,a) values (392,57);
+insert into t (id,a) values (392,58);
+insert into t (id,a) values (392,59);
+insert into t (id,a) values (392,60);
+insert into t (id,a) values (392,61);
+insert into t (id,a) values (392,62);
+insert into t (id,a) values (392,63);
+insert into t (id,a) values (392,64);
+insert into t (id,a) values (392,65);
+insert into t (id,a) values (392,66);
+insert into t (id,a) values (392,67);
+insert into t (id,a) values (392,68);
+insert into t (id,a) values (392,69);
+insert into t (id,a) values (392,70);
+insert into t (id,a) values (392,71);
+insert into t (id,a) values (392,72);
+insert into t (id,a) values (392,73);
+insert into t (id,a) values (392,74);
+insert into t (id,a) values (392,75);
+insert into t (id,a) values (392,76);
+insert into t (id,a) values (392,77);
+insert into t (id,a) values (392,78);
+insert into t (id,a) values (392,79);
+insert into t (id,a) values (392,80);
+insert into t (id,a) values (392,81);
+insert into t (id,a) values (392,82);
+insert into t (id,a) values (392,83);
+insert into t (id,a) values (392,84);
+insert into t (id,a) values (392,85);
+insert into t (id,a) values (392,86);
+insert into t (id,a) values (392,87);
+insert into t (id,a) values (392,88);
+insert into t (id,a) values (392,89);
+insert into t (id,a) values (392,90);
+insert into t (id,a) values (392,91);
+insert into t (id,a) values (392,92);
+insert into t (id,a) values (392,93);
+insert into t (id,a) values (392,94);
+insert into t (id,a) values (392,95);
+insert into t (id,a) values (392,96);
+insert into t (id,a) values (392,97);
+insert into t (id,a) values (392,98);
+insert into t (id,a) values (392,99);
+insert into t (id,a) values (393,0);
+insert into t (id,a) values (393,1);
+insert into t (id,a) values (393,2);
+insert into t (id,a) values (393,3);
+insert into t (id,a) values (393,4);
+insert into t (id,a) values (393,5);
+insert into t (id,a) values (393,6);
+insert into t (id,a) values (393,7);
+insert into t (id,a) values (393,8);
+insert into t (id,a) values (393,9);
+insert into t (id,a) values (393,10);
+insert into t (id,a) values (393,11);
+insert into t (id,a) values (393,12);
+insert into t (id,a) values (393,13);
+insert into t (id,a) values (393,14);
+insert into t (id,a) values (393,15);
+insert into t (id,a) values (393,16);
+insert into t (id,a) values (393,17);
+insert into t (id,a) values (393,18);
+insert into t (id,a) values (393,19);
+insert into t (id,a) values (393,20);
+insert into t (id,a) values (393,21);
+insert into t (id,a) values (393,22);
+insert into t (id,a) values (393,23);
+insert into t (id,a) values (393,24);
+insert into t (id,a) values (393,25);
+insert into t (id,a) values (393,26);
+insert into t (id,a) values (393,27);
+insert into t (id,a) values (393,28);
+insert into t (id,a) values (393,29);
+insert into t (id,a) values (393,30);
+insert into t (id,a) values (393,31);
+insert into t (id,a) values (393,32);
+insert into t (id,a) values (393,33);
+insert into t (id,a) values (393,34);
+insert into t (id,a) values (393,35);
+insert into t (id,a) values (393,36);
+insert into t (id,a) values (393,37);
+insert into t (id,a) values (393,38);
+insert into t (id,a) values (393,39);
+insert into t (id,a) values (393,40);
+insert into t (id,a) values (393,41);
+insert into t (id,a) values (393,42);
+insert into t (id,a) values (393,43);
+insert into t (id,a) values (393,44);
+insert into t (id,a) values (393,45);
+insert into t (id,a) values (393,46);
+insert into t (id,a) values (393,47);
+insert into t (id,a) values (393,48);
+insert into t (id,a) values (393,49);
+insert into t (id,a) values (393,50);
+insert into t (id,a) values (393,51);
+insert into t (id,a) values (393,52);
+insert into t (id,a) values (393,53);
+insert into t (id,a) values (393,54);
+insert into t (id,a) values (393,55);
+insert into t (id,a) values (393,56);
+insert into t (id,a) values (393,57);
+insert into t (id,a) values (393,58);
+insert into t (id,a) values (393,59);
+insert into t (id,a) values (393,60);
+insert into t (id,a) values (393,61);
+insert into t (id,a) values (393,62);
+insert into t (id,a) values (393,63);
+insert into t (id,a) values (393,64);
+insert into t (id,a) values (393,65);
+insert into t (id,a) values (393,66);
+insert into t (id,a) values (393,67);
+insert into t (id,a) values (393,68);
+insert into t (id,a) values (393,69);
+insert into t (id,a) values (393,70);
+insert into t (id,a) values (393,71);
+insert into t (id,a) values (393,72);
+insert into t (id,a) values (393,73);
+insert into t (id,a) values (393,74);
+insert into t (id,a) values (393,75);
+insert into t (id,a) values (393,76);
+insert into t (id,a) values (393,77);
+insert into t (id,a) values (393,78);
+insert into t (id,a) values (393,79);
+insert into t (id,a) values (393,80);
+insert into t (id,a) values (393,81);
+insert into t (id,a) values (393,82);
+insert into t (id,a) values (393,83);
+insert into t (id,a) values (393,84);
+insert into t (id,a) values (393,85);
+insert into t (id,a) values (393,86);
+insert into t (id,a) values (393,87);
+insert into t (id,a) values (393,88);
+insert into t (id,a) values (393,89);
+insert into t (id,a) values (393,90);
+insert into t (id,a) values (393,91);
+insert into t (id,a) values (393,92);
+insert into t (id,a) values (393,93);
+insert into t (id,a) values (393,94);
+insert into t (id,a) values (393,95);
+insert into t (id,a) values (393,96);
+insert into t (id,a) values (393,97);
+insert into t (id,a) values (393,98);
+insert into t (id,a) values (393,99);
+insert into t (id,a) values (394,0);
+insert into t (id,a) values (394,1);
+insert into t (id,a) values (394,2);
+insert into t (id,a) values (394,3);
+insert into t (id,a) values (394,4);
+insert into t (id,a) values (394,5);
+insert into t (id,a) values (394,6);
+insert into t (id,a) values (394,7);
+insert into t (id,a) values (394,8);
+insert into t (id,a) values (394,9);
+insert into t (id,a) values (394,10);
+insert into t (id,a) values (394,11);
+insert into t (id,a) values (394,12);
+insert into t (id,a) values (394,13);
+insert into t (id,a) values (394,14);
+insert into t (id,a) values (394,15);
+insert into t (id,a) values (394,16);
+insert into t (id,a) values (394,17);
+insert into t (id,a) values (394,18);
+insert into t (id,a) values (394,19);
+insert into t (id,a) values (394,20);
+insert into t (id,a) values (394,21);
+insert into t (id,a) values (394,22);
+insert into t (id,a) values (394,23);
+insert into t (id,a) values (394,24);
+insert into t (id,a) values (394,25);
+insert into t (id,a) values (394,26);
+insert into t (id,a) values (394,27);
+insert into t (id,a) values (394,28);
+insert into t (id,a) values (394,29);
+insert into t (id,a) values (394,30);
+insert into t (id,a) values (394,31);
+insert into t (id,a) values (394,32);
+insert into t (id,a) values (394,33);
+insert into t (id,a) values (394,34);
+insert into t (id,a) values (394,35);
+insert into t (id,a) values (394,36);
+insert into t (id,a) values (394,37);
+insert into t (id,a) values (394,38);
+insert into t (id,a) values (394,39);
+insert into t (id,a) values (394,40);
+insert into t (id,a) values (394,41);
+insert into t (id,a) values (394,42);
+insert into t (id,a) values (394,43);
+insert into t (id,a) values (394,44);
+insert into t (id,a) values (394,45);
+insert into t (id,a) values (394,46);
+insert into t (id,a) values (394,47);
+insert into t (id,a) values (394,48);
+insert into t (id,a) values (394,49);
+insert into t (id,a) values (394,50);
+insert into t (id,a) values (394,51);
+insert into t (id,a) values (394,52);
+insert into t (id,a) values (394,53);
+insert into t (id,a) values (394,54);
+insert into t (id,a) values (394,55);
+insert into t (id,a) values (394,56);
+insert into t (id,a) values (394,57);
+insert into t (id,a) values (394,58);
+insert into t (id,a) values (394,59);
+insert into t (id,a) values (394,60);
+insert into t (id,a) values (394,61);
+insert into t (id,a) values (394,62);
+insert into t (id,a) values (394,63);
+insert into t (id,a) values (394,64);
+insert into t (id,a) values (394,65);
+insert into t (id,a) values (394,66);
+insert into t (id,a) values (394,67);
+insert into t (id,a) values (394,68);
+insert into t (id,a) values (394,69);
+insert into t (id,a) values (394,70);
+insert into t (id,a) values (394,71);
+insert into t (id,a) values (394,72);
+insert into t (id,a) values (394,73);
+insert into t (id,a) values (394,74);
+insert into t (id,a) values (394,75);
+insert into t (id,a) values (394,76);
+insert into t (id,a) values (394,77);
+insert into t (id,a) values (394,78);
+insert into t (id,a) values (394,79);
+insert into t (id,a) values (394,80);
+insert into t (id,a) values (394,81);
+insert into t (id,a) values (394,82);
+insert into t (id,a) values (394,83);
+insert into t (id,a) values (394,84);
+insert into t (id,a) values (394,85);
+insert into t (id,a) values (394,86);
+insert into t (id,a) values (394,87);
+insert into t (id,a) values (394,88);
+insert into t (id,a) values (394,89);
+insert into t (id,a) values (394,90);
+insert into t (id,a) values (394,91);
+insert into t (id,a) values (394,92);
+insert into t (id,a) values (394,93);
+insert into t (id,a) values (394,94);
+insert into t (id,a) values (394,95);
+insert into t (id,a) values (394,96);
+insert into t (id,a) values (394,97);
+insert into t (id,a) values (394,98);
+insert into t (id,a) values (394,99);
+insert into t (id,a) values (395,0);
+insert into t (id,a) values (395,1);
+insert into t (id,a) values (395,2);
+insert into t (id,a) values (395,3);
+insert into t (id,a) values (395,4);
+insert into t (id,a) values (395,5);
+insert into t (id,a) values (395,6);
+insert into t (id,a) values (395,7);
+insert into t (id,a) values (395,8);
+insert into t (id,a) values (395,9);
+insert into t (id,a) values (395,10);
+insert into t (id,a) values (395,11);
+insert into t (id,a) values (395,12);
+insert into t (id,a) values (395,13);
+insert into t (id,a) values (395,14);
+insert into t (id,a) values (395,15);
+insert into t (id,a) values (395,16);
+insert into t (id,a) values (395,17);
+insert into t (id,a) values (395,18);
+insert into t (id,a) values (395,19);
+insert into t (id,a) values (395,20);
+insert into t (id,a) values (395,21);
+insert into t (id,a) values (395,22);
+insert into t (id,a) values (395,23);
+insert into t (id,a) values (395,24);
+insert into t (id,a) values (395,25);
+insert into t (id,a) values (395,26);
+insert into t (id,a) values (395,27);
+insert into t (id,a) values (395,28);
+insert into t (id,a) values (395,29);
+insert into t (id,a) values (395,30);
+insert into t (id,a) values (395,31);
+insert into t (id,a) values (395,32);
+insert into t (id,a) values (395,33);
+insert into t (id,a) values (395,34);
+insert into t (id,a) values (395,35);
+insert into t (id,a) values (395,36);
+insert into t (id,a) values (395,37);
+insert into t (id,a) values (395,38);
+insert into t (id,a) values (395,39);
+insert into t (id,a) values (395,40);
+insert into t (id,a) values (395,41);
+insert into t (id,a) values (395,42);
+insert into t (id,a) values (395,43);
+insert into t (id,a) values (395,44);
+insert into t (id,a) values (395,45);
+insert into t (id,a) values (395,46);
+insert into t (id,a) values (395,47);
+insert into t (id,a) values (395,48);
+insert into t (id,a) values (395,49);
+insert into t (id,a) values (395,50);
+insert into t (id,a) values (395,51);
+insert into t (id,a) values (395,52);
+insert into t (id,a) values (395,53);
+insert into t (id,a) values (395,54);
+insert into t (id,a) values (395,55);
+insert into t (id,a) values (395,56);
+insert into t (id,a) values (395,57);
+insert into t (id,a) values (395,58);
+insert into t (id,a) values (395,59);
+insert into t (id,a) values (395,60);
+insert into t (id,a) values (395,61);
+insert into t (id,a) values (395,62);
+insert into t (id,a) values (395,63);
+insert into t (id,a) values (395,64);
+insert into t (id,a) values (395,65);
+insert into t (id,a) values (395,66);
+insert into t (id,a) values (395,67);
+insert into t (id,a) values (395,68);
+insert into t (id,a) values (395,69);
+insert into t (id,a) values (395,70);
+insert into t (id,a) values (395,71);
+insert into t (id,a) values (395,72);
+insert into t (id,a) values (395,73);
+insert into t (id,a) values (395,74);
+insert into t (id,a) values (395,75);
+insert into t (id,a) values (395,76);
+insert into t (id,a) values (395,77);
+insert into t (id,a) values (395,78);
+insert into t (id,a) values (395,79);
+insert into t (id,a) values (395,80);
+insert into t (id,a) values (395,81);
+insert into t (id,a) values (395,82);
+insert into t (id,a) values (395,83);
+insert into t (id,a) values (395,84);
+insert into t (id,a) values (395,85);
+insert into t (id,a) values (395,86);
+insert into t (id,a) values (395,87);
+insert into t (id,a) values (395,88);
+insert into t (id,a) values (395,89);
+insert into t (id,a) values (395,90);
+insert into t (id,a) values (395,91);
+insert into t (id,a) values (395,92);
+insert into t (id,a) values (395,93);
+insert into t (id,a) values (395,94);
+insert into t (id,a) values (395,95);
+insert into t (id,a) values (395,96);
+insert into t (id,a) values (395,97);
+insert into t (id,a) values (395,98);
+insert into t (id,a) values (395,99);
+insert into t (id,a) values (396,0);
+insert into t (id,a) values (396,1);
+insert into t (id,a) values (396,2);
+insert into t (id,a) values (396,3);
+insert into t (id,a) values (396,4);
+insert into t (id,a) values (396,5);
+insert into t (id,a) values (396,6);
+insert into t (id,a) values (396,7);
+insert into t (id,a) values (396,8);
+insert into t (id,a) values (396,9);
+insert into t (id,a) values (396,10);
+insert into t (id,a) values (396,11);
+insert into t (id,a) values (396,12);
+insert into t (id,a) values (396,13);
+insert into t (id,a) values (396,14);
+insert into t (id,a) values (396,15);
+insert into t (id,a) values (396,16);
+insert into t (id,a) values (396,17);
+insert into t (id,a) values (396,18);
+insert into t (id,a) values (396,19);
+insert into t (id,a) values (396,20);
+insert into t (id,a) values (396,21);
+insert into t (id,a) values (396,22);
+insert into t (id,a) values (396,23);
+insert into t (id,a) values (396,24);
+insert into t (id,a) values (396,25);
+insert into t (id,a) values (396,26);
+insert into t (id,a) values (396,27);
+insert into t (id,a) values (396,28);
+insert into t (id,a) values (396,29);
+insert into t (id,a) values (396,30);
+insert into t (id,a) values (396,31);
+insert into t (id,a) values (396,32);
+insert into t (id,a) values (396,33);
+insert into t (id,a) values (396,34);
+insert into t (id,a) values (396,35);
+insert into t (id,a) values (396,36);
+insert into t (id,a) values (396,37);
+insert into t (id,a) values (396,38);
+insert into t (id,a) values (396,39);
+insert into t (id,a) values (396,40);
+insert into t (id,a) values (396,41);
+insert into t (id,a) values (396,42);
+insert into t (id,a) values (396,43);
+insert into t (id,a) values (396,44);
+insert into t (id,a) values (396,45);
+insert into t (id,a) values (396,46);
+insert into t (id,a) values (396,47);
+insert into t (id,a) values (396,48);
+insert into t (id,a) values (396,49);
+insert into t (id,a) values (396,50);
+insert into t (id,a) values (396,51);
+insert into t (id,a) values (396,52);
+insert into t (id,a) values (396,53);
+insert into t (id,a) values (396,54);
+insert into t (id,a) values (396,55);
+insert into t (id,a) values (396,56);
+insert into t (id,a) values (396,57);
+insert into t (id,a) values (396,58);
+insert into t (id,a) values (396,59);
+insert into t (id,a) values (396,60);
+insert into t (id,a) values (396,61);
+insert into t (id,a) values (396,62);
+insert into t (id,a) values (396,63);
+insert into t (id,a) values (396,64);
+insert into t (id,a) values (396,65);
+insert into t (id,a) values (396,66);
+insert into t (id,a) values (396,67);
+insert into t (id,a) values (396,68);
+insert into t (id,a) values (396,69);
+insert into t (id,a) values (396,70);
+insert into t (id,a) values (396,71);
+insert into t (id,a) values (396,72);
+insert into t (id,a) values (396,73);
+insert into t (id,a) values (396,74);
+insert into t (id,a) values (396,75);
+insert into t (id,a) values (396,76);
+insert into t (id,a) values (396,77);
+insert into t (id,a) values (396,78);
+insert into t (id,a) values (396,79);
+insert into t (id,a) values (396,80);
+insert into t (id,a) values (396,81);
+insert into t (id,a) values (396,82);
+insert into t (id,a) values (396,83);
+insert into t (id,a) values (396,84);
+insert into t (id,a) values (396,85);
+insert into t (id,a) values (396,86);
+insert into t (id,a) values (396,87);
+insert into t (id,a) values (396,88);
+insert into t (id,a) values (396,89);
+insert into t (id,a) values (396,90);
+insert into t (id,a) values (396,91);
+insert into t (id,a) values (396,92);
+insert into t (id,a) values (396,93);
+insert into t (id,a) values (396,94);
+insert into t (id,a) values (396,95);
+insert into t (id,a) values (396,96);
+insert into t (id,a) values (396,97);
+insert into t (id,a) values (396,98);
+insert into t (id,a) values (396,99);
+insert into t (id,a) values (397,0);
+insert into t (id,a) values (397,1);
+insert into t (id,a) values (397,2);
+insert into t (id,a) values (397,3);
+insert into t (id,a) values (397,4);
+insert into t (id,a) values (397,5);
+insert into t (id,a) values (397,6);
+insert into t (id,a) values (397,7);
+insert into t (id,a) values (397,8);
+insert into t (id,a) values (397,9);
+insert into t (id,a) values (397,10);
+insert into t (id,a) values (397,11);
+insert into t (id,a) values (397,12);
+insert into t (id,a) values (397,13);
+insert into t (id,a) values (397,14);
+insert into t (id,a) values (397,15);
+insert into t (id,a) values (397,16);
+insert into t (id,a) values (397,17);
+insert into t (id,a) values (397,18);
+insert into t (id,a) values (397,19);
+insert into t (id,a) values (397,20);
+insert into t (id,a) values (397,21);
+insert into t (id,a) values (397,22);
+insert into t (id,a) values (397,23);
+insert into t (id,a) values (397,24);
+insert into t (id,a) values (397,25);
+insert into t (id,a) values (397,26);
+insert into t (id,a) values (397,27);
+insert into t (id,a) values (397,28);
+insert into t (id,a) values (397,29);
+insert into t (id,a) values (397,30);
+insert into t (id,a) values (397,31);
+insert into t (id,a) values (397,32);
+insert into t (id,a) values (397,33);
+insert into t (id,a) values (397,34);
+insert into t (id,a) values (397,35);
+insert into t (id,a) values (397,36);
+insert into t (id,a) values (397,37);
+insert into t (id,a) values (397,38);
+insert into t (id,a) values (397,39);
+insert into t (id,a) values (397,40);
+insert into t (id,a) values (397,41);
+insert into t (id,a) values (397,42);
+insert into t (id,a) values (397,43);
+insert into t (id,a) values (397,44);
+insert into t (id,a) values (397,45);
+insert into t (id,a) values (397,46);
+insert into t (id,a) values (397,47);
+insert into t (id,a) values (397,48);
+insert into t (id,a) values (397,49);
+insert into t (id,a) values (397,50);
+insert into t (id,a) values (397,51);
+insert into t (id,a) values (397,52);
+insert into t (id,a) values (397,53);
+insert into t (id,a) values (397,54);
+insert into t (id,a) values (397,55);
+insert into t (id,a) values (397,56);
+insert into t (id,a) values (397,57);
+insert into t (id,a) values (397,58);
+insert into t (id,a) values (397,59);
+insert into t (id,a) values (397,60);
+insert into t (id,a) values (397,61);
+insert into t (id,a) values (397,62);
+insert into t (id,a) values (397,63);
+insert into t (id,a) values (397,64);
+insert into t (id,a) values (397,65);
+insert into t (id,a) values (397,66);
+insert into t (id,a) values (397,67);
+insert into t (id,a) values (397,68);
+insert into t (id,a) values (397,69);
+insert into t (id,a) values (397,70);
+insert into t (id,a) values (397,71);
+insert into t (id,a) values (397,72);
+insert into t (id,a) values (397,73);
+insert into t (id,a) values (397,74);
+insert into t (id,a) values (397,75);
+insert into t (id,a) values (397,76);
+insert into t (id,a) values (397,77);
+insert into t (id,a) values (397,78);
+insert into t (id,a) values (397,79);
+insert into t (id,a) values (397,80);
+insert into t (id,a) values (397,81);
+insert into t (id,a) values (397,82);
+insert into t (id,a) values (397,83);
+insert into t (id,a) values (397,84);
+insert into t (id,a) values (397,85);
+insert into t (id,a) values (397,86);
+insert into t (id,a) values (397,87);
+insert into t (id,a) values (397,88);
+insert into t (id,a) values (397,89);
+insert into t (id,a) values (397,90);
+insert into t (id,a) values (397,91);
+insert into t (id,a) values (397,92);
+insert into t (id,a) values (397,93);
+insert into t (id,a) values (397,94);
+insert into t (id,a) values (397,95);
+insert into t (id,a) values (397,96);
+insert into t (id,a) values (397,97);
+insert into t (id,a) values (397,98);
+insert into t (id,a) values (397,99);
+insert into t (id,a) values (398,0);
+insert into t (id,a) values (398,1);
+insert into t (id,a) values (398,2);
+insert into t (id,a) values (398,3);
+insert into t (id,a) values (398,4);
+insert into t (id,a) values (398,5);
+insert into t (id,a) values (398,6);
+insert into t (id,a) values (398,7);
+insert into t (id,a) values (398,8);
+insert into t (id,a) values (398,9);
+insert into t (id,a) values (398,10);
+insert into t (id,a) values (398,11);
+insert into t (id,a) values (398,12);
+insert into t (id,a) values (398,13);
+insert into t (id,a) values (398,14);
+insert into t (id,a) values (398,15);
+insert into t (id,a) values (398,16);
+insert into t (id,a) values (398,17);
+insert into t (id,a) values (398,18);
+insert into t (id,a) values (398,19);
+insert into t (id,a) values (398,20);
+insert into t (id,a) values (398,21);
+insert into t (id,a) values (398,22);
+insert into t (id,a) values (398,23);
+insert into t (id,a) values (398,24);
+insert into t (id,a) values (398,25);
+insert into t (id,a) values (398,26);
+insert into t (id,a) values (398,27);
+insert into t (id,a) values (398,28);
+insert into t (id,a) values (398,29);
+insert into t (id,a) values (398,30);
+insert into t (id,a) values (398,31);
+insert into t (id,a) values (398,32);
+insert into t (id,a) values (398,33);
+insert into t (id,a) values (398,34);
+insert into t (id,a) values (398,35);
+insert into t (id,a) values (398,36);
+insert into t (id,a) values (398,37);
+insert into t (id,a) values (398,38);
+insert into t (id,a) values (398,39);
+insert into t (id,a) values (398,40);
+insert into t (id,a) values (398,41);
+insert into t (id,a) values (398,42);
+insert into t (id,a) values (398,43);
+insert into t (id,a) values (398,44);
+insert into t (id,a) values (398,45);
+insert into t (id,a) values (398,46);
+insert into t (id,a) values (398,47);
+insert into t (id,a) values (398,48);
+insert into t (id,a) values (398,49);
+insert into t (id,a) values (398,50);
+insert into t (id,a) values (398,51);
+insert into t (id,a) values (398,52);
+insert into t (id,a) values (398,53);
+insert into t (id,a) values (398,54);
+insert into t (id,a) values (398,55);
+insert into t (id,a) values (398,56);
+insert into t (id,a) values (398,57);
+insert into t (id,a) values (398,58);
+insert into t (id,a) values (398,59);
+insert into t (id,a) values (398,60);
+insert into t (id,a) values (398,61);
+insert into t (id,a) values (398,62);
+insert into t (id,a) values (398,63);
+insert into t (id,a) values (398,64);
+insert into t (id,a) values (398,65);
+insert into t (id,a) values (398,66);
+insert into t (id,a) values (398,67);
+insert into t (id,a) values (398,68);
+insert into t (id,a) values (398,69);
+insert into t (id,a) values (398,70);
+insert into t (id,a) values (398,71);
+insert into t (id,a) values (398,72);
+insert into t (id,a) values (398,73);
+insert into t (id,a) values (398,74);
+insert into t (id,a) values (398,75);
+insert into t (id,a) values (398,76);
+insert into t (id,a) values (398,77);
+insert into t (id,a) values (398,78);
+insert into t (id,a) values (398,79);
+insert into t (id,a) values (398,80);
+insert into t (id,a) values (398,81);
+insert into t (id,a) values (398,82);
+insert into t (id,a) values (398,83);
+insert into t (id,a) values (398,84);
+insert into t (id,a) values (398,85);
+insert into t (id,a) values (398,86);
+insert into t (id,a) values (398,87);
+insert into t (id,a) values (398,88);
+insert into t (id,a) values (398,89);
+insert into t (id,a) values (398,90);
+insert into t (id,a) values (398,91);
+insert into t (id,a) values (398,92);
+insert into t (id,a) values (398,93);
+insert into t (id,a) values (398,94);
+insert into t (id,a) values (398,95);
+insert into t (id,a) values (398,96);
+insert into t (id,a) values (398,97);
+insert into t (id,a) values (398,98);
+insert into t (id,a) values (398,99);
+insert into t (id,a) values (399,0);
+insert into t (id,a) values (399,1);
+insert into t (id,a) values (399,2);
+insert into t (id,a) values (399,3);
+insert into t (id,a) values (399,4);
+insert into t (id,a) values (399,5);
+insert into t (id,a) values (399,6);
+insert into t (id,a) values (399,7);
+insert into t (id,a) values (399,8);
+insert into t (id,a) values (399,9);
+insert into t (id,a) values (399,10);
+insert into t (id,a) values (399,11);
+insert into t (id,a) values (399,12);
+insert into t (id,a) values (399,13);
+insert into t (id,a) values (399,14);
+insert into t (id,a) values (399,15);
+insert into t (id,a) values (399,16);
+insert into t (id,a) values (399,17);
+insert into t (id,a) values (399,18);
+insert into t (id,a) values (399,19);
+insert into t (id,a) values (399,20);
+insert into t (id,a) values (399,21);
+insert into t (id,a) values (399,22);
+insert into t (id,a) values (399,23);
+insert into t (id,a) values (399,24);
+insert into t (id,a) values (399,25);
+insert into t (id,a) values (399,26);
+insert into t (id,a) values (399,27);
+insert into t (id,a) values (399,28);
+insert into t (id,a) values (399,29);
+insert into t (id,a) values (399,30);
+insert into t (id,a) values (399,31);
+insert into t (id,a) values (399,32);
+insert into t (id,a) values (399,33);
+insert into t (id,a) values (399,34);
+insert into t (id,a) values (399,35);
+insert into t (id,a) values (399,36);
+insert into t (id,a) values (399,37);
+insert into t (id,a) values (399,38);
+insert into t (id,a) values (399,39);
+insert into t (id,a) values (399,40);
+insert into t (id,a) values (399,41);
+insert into t (id,a) values (399,42);
+insert into t (id,a) values (399,43);
+insert into t (id,a) values (399,44);
+insert into t (id,a) values (399,45);
+insert into t (id,a) values (399,46);
+insert into t (id,a) values (399,47);
+insert into t (id,a) values (399,48);
+insert into t (id,a) values (399,49);
+insert into t (id,a) values (399,50);
+insert into t (id,a) values (399,51);
+insert into t (id,a) values (399,52);
+insert into t (id,a) values (399,53);
+insert into t (id,a) values (399,54);
+insert into t (id,a) values (399,55);
+insert into t (id,a) values (399,56);
+insert into t (id,a) values (399,57);
+insert into t (id,a) values (399,58);
+insert into t (id,a) values (399,59);
+insert into t (id,a) values (399,60);
+insert into t (id,a) values (399,61);
+insert into t (id,a) values (399,62);
+insert into t (id,a) values (399,63);
+insert into t (id,a) values (399,64);
+insert into t (id,a) values (399,65);
+insert into t (id,a) values (399,66);
+insert into t (id,a) values (399,67);
+insert into t (id,a) values (399,68);
+insert into t (id,a) values (399,69);
+insert into t (id,a) values (399,70);
+insert into t (id,a) values (399,71);
+insert into t (id,a) values (399,72);
+insert into t (id,a) values (399,73);
+insert into t (id,a) values (399,74);
+insert into t (id,a) values (399,75);
+insert into t (id,a) values (399,76);
+insert into t (id,a) values (399,77);
+insert into t (id,a) values (399,78);
+insert into t (id,a) values (399,79);
+insert into t (id,a) values (399,80);
+insert into t (id,a) values (399,81);
+insert into t (id,a) values (399,82);
+insert into t (id,a) values (399,83);
+insert into t (id,a) values (399,84);
+insert into t (id,a) values (399,85);
+insert into t (id,a) values (399,86);
+insert into t (id,a) values (399,87);
+insert into t (id,a) values (399,88);
+insert into t (id,a) values (399,89);
+insert into t (id,a) values (399,90);
+insert into t (id,a) values (399,91);
+insert into t (id,a) values (399,92);
+insert into t (id,a) values (399,93);
+insert into t (id,a) values (399,94);
+insert into t (id,a) values (399,95);
+insert into t (id,a) values (399,96);
+insert into t (id,a) values (399,97);
+insert into t (id,a) values (399,98);
+insert into t (id,a) values (399,99);
+insert into t (id,a) values (400,0);
+insert into t (id,a) values (400,1);
+insert into t (id,a) values (400,2);
+insert into t (id,a) values (400,3);
+insert into t (id,a) values (400,4);
+insert into t (id,a) values (400,5);
+insert into t (id,a) values (400,6);
+insert into t (id,a) values (400,7);
+insert into t (id,a) values (400,8);
+insert into t (id,a) values (400,9);
+insert into t (id,a) values (400,10);
+insert into t (id,a) values (400,11);
+insert into t (id,a) values (400,12);
+insert into t (id,a) values (400,13);
+insert into t (id,a) values (400,14);
+insert into t (id,a) values (400,15);
+insert into t (id,a) values (400,16);
+insert into t (id,a) values (400,17);
+insert into t (id,a) values (400,18);
+insert into t (id,a) values (400,19);
+insert into t (id,a) values (400,20);
+insert into t (id,a) values (400,21);
+insert into t (id,a) values (400,22);
+insert into t (id,a) values (400,23);
+insert into t (id,a) values (400,24);
+insert into t (id,a) values (400,25);
+insert into t (id,a) values (400,26);
+insert into t (id,a) values (400,27);
+insert into t (id,a) values (400,28);
+insert into t (id,a) values (400,29);
+insert into t (id,a) values (400,30);
+insert into t (id,a) values (400,31);
+insert into t (id,a) values (400,32);
+insert into t (id,a) values (400,33);
+insert into t (id,a) values (400,34);
+insert into t (id,a) values (400,35);
+insert into t (id,a) values (400,36);
+insert into t (id,a) values (400,37);
+insert into t (id,a) values (400,38);
+insert into t (id,a) values (400,39);
+insert into t (id,a) values (400,40);
+insert into t (id,a) values (400,41);
+insert into t (id,a) values (400,42);
+insert into t (id,a) values (400,43);
+insert into t (id,a) values (400,44);
+insert into t (id,a) values (400,45);
+insert into t (id,a) values (400,46);
+insert into t (id,a) values (400,47);
+insert into t (id,a) values (400,48);
+insert into t (id,a) values (400,49);
+insert into t (id,a) values (400,50);
+insert into t (id,a) values (400,51);
+insert into t (id,a) values (400,52);
+insert into t (id,a) values (400,53);
+insert into t (id,a) values (400,54);
+insert into t (id,a) values (400,55);
+insert into t (id,a) values (400,56);
+insert into t (id,a) values (400,57);
+insert into t (id,a) values (400,58);
+insert into t (id,a) values (400,59);
+insert into t (id,a) values (400,60);
+insert into t (id,a) values (400,61);
+insert into t (id,a) values (400,62);
+insert into t (id,a) values (400,63);
+insert into t (id,a) values (400,64);
+insert into t (id,a) values (400,65);
+insert into t (id,a) values (400,66);
+insert into t (id,a) values (400,67);
+insert into t (id,a) values (400,68);
+insert into t (id,a) values (400,69);
+insert into t (id,a) values (400,70);
+insert into t (id,a) values (400,71);
+insert into t (id,a) values (400,72);
+insert into t (id,a) values (400,73);
+insert into t (id,a) values (400,74);
+insert into t (id,a) values (400,75);
+insert into t (id,a) values (400,76);
+insert into t (id,a) values (400,77);
+insert into t (id,a) values (400,78);
+insert into t (id,a) values (400,79);
+insert into t (id,a) values (400,80);
+insert into t (id,a) values (400,81);
+insert into t (id,a) values (400,82);
+insert into t (id,a) values (400,83);
+insert into t (id,a) values (400,84);
+insert into t (id,a) values (400,85);
+insert into t (id,a) values (400,86);
+insert into t (id,a) values (400,87);
+insert into t (id,a) values (400,88);
+insert into t (id,a) values (400,89);
+insert into t (id,a) values (400,90);
+insert into t (id,a) values (400,91);
+insert into t (id,a) values (400,92);
+insert into t (id,a) values (400,93);
+insert into t (id,a) values (400,94);
+insert into t (id,a) values (400,95);
+insert into t (id,a) values (400,96);
+insert into t (id,a) values (400,97);
+insert into t (id,a) values (400,98);
+insert into t (id,a) values (400,99);
+insert into t (id,a) values (401,0);
+insert into t (id,a) values (401,1);
+insert into t (id,a) values (401,2);
+insert into t (id,a) values (401,3);
+insert into t (id,a) values (401,4);
+insert into t (id,a) values (401,5);
+insert into t (id,a) values (401,6);
+insert into t (id,a) values (401,7);
+insert into t (id,a) values (401,8);
+insert into t (id,a) values (401,9);
+insert into t (id,a) values (401,10);
+insert into t (id,a) values (401,11);
+insert into t (id,a) values (401,12);
+insert into t (id,a) values (401,13);
+insert into t (id,a) values (401,14);
+insert into t (id,a) values (401,15);
+insert into t (id,a) values (401,16);
+insert into t (id,a) values (401,17);
+insert into t (id,a) values (401,18);
+insert into t (id,a) values (401,19);
+insert into t (id,a) values (401,20);
+insert into t (id,a) values (401,21);
+insert into t (id,a) values (401,22);
+insert into t (id,a) values (401,23);
+insert into t (id,a) values (401,24);
+insert into t (id,a) values (401,25);
+insert into t (id,a) values (401,26);
+insert into t (id,a) values (401,27);
+insert into t (id,a) values (401,28);
+insert into t (id,a) values (401,29);
+insert into t (id,a) values (401,30);
+insert into t (id,a) values (401,31);
+insert into t (id,a) values (401,32);
+insert into t (id,a) values (401,33);
+insert into t (id,a) values (401,34);
+insert into t (id,a) values (401,35);
+insert into t (id,a) values (401,36);
+insert into t (id,a) values (401,37);
+insert into t (id,a) values (401,38);
+insert into t (id,a) values (401,39);
+insert into t (id,a) values (401,40);
+insert into t (id,a) values (401,41);
+insert into t (id,a) values (401,42);
+insert into t (id,a) values (401,43);
+insert into t (id,a) values (401,44);
+insert into t (id,a) values (401,45);
+insert into t (id,a) values (401,46);
+insert into t (id,a) values (401,47);
+insert into t (id,a) values (401,48);
+insert into t (id,a) values (401,49);
+insert into t (id,a) values (401,50);
+insert into t (id,a) values (401,51);
+insert into t (id,a) values (401,52);
+insert into t (id,a) values (401,53);
+insert into t (id,a) values (401,54);
+insert into t (id,a) values (401,55);
+insert into t (id,a) values (401,56);
+insert into t (id,a) values (401,57);
+insert into t (id,a) values (401,58);
+insert into t (id,a) values (401,59);
+insert into t (id,a) values (401,60);
+insert into t (id,a) values (401,61);
+insert into t (id,a) values (401,62);
+insert into t (id,a) values (401,63);
+insert into t (id,a) values (401,64);
+insert into t (id,a) values (401,65);
+insert into t (id,a) values (401,66);
+insert into t (id,a) values (401,67);
+insert into t (id,a) values (401,68);
+insert into t (id,a) values (401,69);
+insert into t (id,a) values (401,70);
+insert into t (id,a) values (401,71);
+insert into t (id,a) values (401,72);
+insert into t (id,a) values (401,73);
+insert into t (id,a) values (401,74);
+insert into t (id,a) values (401,75);
+insert into t (id,a) values (401,76);
+insert into t (id,a) values (401,77);
+insert into t (id,a) values (401,78);
+insert into t (id,a) values (401,79);
+insert into t (id,a) values (401,80);
+insert into t (id,a) values (401,81);
+insert into t (id,a) values (401,82);
+insert into t (id,a) values (401,83);
+insert into t (id,a) values (401,84);
+insert into t (id,a) values (401,85);
+insert into t (id,a) values (401,86);
+insert into t (id,a) values (401,87);
+insert into t (id,a) values (401,88);
+insert into t (id,a) values (401,89);
+insert into t (id,a) values (401,90);
+insert into t (id,a) values (401,91);
+insert into t (id,a) values (401,92);
+insert into t (id,a) values (401,93);
+insert into t (id,a) values (401,94);
+insert into t (id,a) values (401,95);
+insert into t (id,a) values (401,96);
+insert into t (id,a) values (401,97);
+insert into t (id,a) values (401,98);
+insert into t (id,a) values (401,99);
+insert into t (id,a) values (402,0);
+insert into t (id,a) values (402,1);
+insert into t (id,a) values (402,2);
+insert into t (id,a) values (402,3);
+insert into t (id,a) values (402,4);
+insert into t (id,a) values (402,5);
+insert into t (id,a) values (402,6);
+insert into t (id,a) values (402,7);
+insert into t (id,a) values (402,8);
+insert into t (id,a) values (402,9);
+insert into t (id,a) values (402,10);
+insert into t (id,a) values (402,11);
+insert into t (id,a) values (402,12);
+insert into t (id,a) values (402,13);
+insert into t (id,a) values (402,14);
+insert into t (id,a) values (402,15);
+insert into t (id,a) values (402,16);
+insert into t (id,a) values (402,17);
+insert into t (id,a) values (402,18);
+insert into t (id,a) values (402,19);
+insert into t (id,a) values (402,20);
+insert into t (id,a) values (402,21);
+insert into t (id,a) values (402,22);
+insert into t (id,a) values (402,23);
+insert into t (id,a) values (402,24);
+insert into t (id,a) values (402,25);
+insert into t (id,a) values (402,26);
+insert into t (id,a) values (402,27);
+insert into t (id,a) values (402,28);
+insert into t (id,a) values (402,29);
+insert into t (id,a) values (402,30);
+insert into t (id,a) values (402,31);
+insert into t (id,a) values (402,32);
+insert into t (id,a) values (402,33);
+insert into t (id,a) values (402,34);
+insert into t (id,a) values (402,35);
+insert into t (id,a) values (402,36);
+insert into t (id,a) values (402,37);
+insert into t (id,a) values (402,38);
+insert into t (id,a) values (402,39);
+insert into t (id,a) values (402,40);
+insert into t (id,a) values (402,41);
+insert into t (id,a) values (402,42);
+insert into t (id,a) values (402,43);
+insert into t (id,a) values (402,44);
+insert into t (id,a) values (402,45);
+insert into t (id,a) values (402,46);
+insert into t (id,a) values (402,47);
+insert into t (id,a) values (402,48);
+insert into t (id,a) values (402,49);
+insert into t (id,a) values (402,50);
+insert into t (id,a) values (402,51);
+insert into t (id,a) values (402,52);
+insert into t (id,a) values (402,53);
+insert into t (id,a) values (402,54);
+insert into t (id,a) values (402,55);
+insert into t (id,a) values (402,56);
+insert into t (id,a) values (402,57);
+insert into t (id,a) values (402,58);
+insert into t (id,a) values (402,59);
+insert into t (id,a) values (402,60);
+insert into t (id,a) values (402,61);
+insert into t (id,a) values (402,62);
+insert into t (id,a) values (402,63);
+insert into t (id,a) values (402,64);
+insert into t (id,a) values (402,65);
+insert into t (id,a) values (402,66);
+insert into t (id,a) values (402,67);
+insert into t (id,a) values (402,68);
+insert into t (id,a) values (402,69);
+insert into t (id,a) values (402,70);
+insert into t (id,a) values (402,71);
+insert into t (id,a) values (402,72);
+insert into t (id,a) values (402,73);
+insert into t (id,a) values (402,74);
+insert into t (id,a) values (402,75);
+insert into t (id,a) values (402,76);
+insert into t (id,a) values (402,77);
+insert into t (id,a) values (402,78);
+insert into t (id,a) values (402,79);
+insert into t (id,a) values (402,80);
+insert into t (id,a) values (402,81);
+insert into t (id,a) values (402,82);
+insert into t (id,a) values (402,83);
+insert into t (id,a) values (402,84);
+insert into t (id,a) values (402,85);
+insert into t (id,a) values (402,86);
+insert into t (id,a) values (402,87);
+insert into t (id,a) values (402,88);
+insert into t (id,a) values (402,89);
+insert into t (id,a) values (402,90);
+insert into t (id,a) values (402,91);
+insert into t (id,a) values (402,92);
+insert into t (id,a) values (402,93);
+insert into t (id,a) values (402,94);
+insert into t (id,a) values (402,95);
+insert into t (id,a) values (402,96);
+insert into t (id,a) values (402,97);
+insert into t (id,a) values (402,98);
+insert into t (id,a) values (402,99);
+insert into t (id,a) values (403,0);
+insert into t (id,a) values (403,1);
+insert into t (id,a) values (403,2);
+insert into t (id,a) values (403,3);
+insert into t (id,a) values (403,4);
+insert into t (id,a) values (403,5);
+insert into t (id,a) values (403,6);
+insert into t (id,a) values (403,7);
+insert into t (id,a) values (403,8);
+insert into t (id,a) values (403,9);
+insert into t (id,a) values (403,10);
+insert into t (id,a) values (403,11);
+insert into t (id,a) values (403,12);
+insert into t (id,a) values (403,13);
+insert into t (id,a) values (403,14);
+insert into t (id,a) values (403,15);
+insert into t (id,a) values (403,16);
+insert into t (id,a) values (403,17);
+insert into t (id,a) values (403,18);
+insert into t (id,a) values (403,19);
+insert into t (id,a) values (403,20);
+insert into t (id,a) values (403,21);
+insert into t (id,a) values (403,22);
+insert into t (id,a) values (403,23);
+insert into t (id,a) values (403,24);
+insert into t (id,a) values (403,25);
+insert into t (id,a) values (403,26);
+insert into t (id,a) values (403,27);
+insert into t (id,a) values (403,28);
+insert into t (id,a) values (403,29);
+insert into t (id,a) values (403,30);
+insert into t (id,a) values (403,31);
+insert into t (id,a) values (403,32);
+insert into t (id,a) values (403,33);
+insert into t (id,a) values (403,34);
+insert into t (id,a) values (403,35);
+insert into t (id,a) values (403,36);
+insert into t (id,a) values (403,37);
+insert into t (id,a) values (403,38);
+insert into t (id,a) values (403,39);
+insert into t (id,a) values (403,40);
+insert into t (id,a) values (403,41);
+insert into t (id,a) values (403,42);
+insert into t (id,a) values (403,43);
+insert into t (id,a) values (403,44);
+insert into t (id,a) values (403,45);
+insert into t (id,a) values (403,46);
+insert into t (id,a) values (403,47);
+insert into t (id,a) values (403,48);
+insert into t (id,a) values (403,49);
+insert into t (id,a) values (403,50);
+insert into t (id,a) values (403,51);
+insert into t (id,a) values (403,52);
+insert into t (id,a) values (403,53);
+insert into t (id,a) values (403,54);
+insert into t (id,a) values (403,55);
+insert into t (id,a) values (403,56);
+insert into t (id,a) values (403,57);
+insert into t (id,a) values (403,58);
+insert into t (id,a) values (403,59);
+insert into t (id,a) values (403,60);
+insert into t (id,a) values (403,61);
+insert into t (id,a) values (403,62);
+insert into t (id,a) values (403,63);
+insert into t (id,a) values (403,64);
+insert into t (id,a) values (403,65);
+insert into t (id,a) values (403,66);
+insert into t (id,a) values (403,67);
+insert into t (id,a) values (403,68);
+insert into t (id,a) values (403,69);
+insert into t (id,a) values (403,70);
+insert into t (id,a) values (403,71);
+insert into t (id,a) values (403,72);
+insert into t (id,a) values (403,73);
+insert into t (id,a) values (403,74);
+insert into t (id,a) values (403,75);
+insert into t (id,a) values (403,76);
+insert into t (id,a) values (403,77);
+insert into t (id,a) values (403,78);
+insert into t (id,a) values (403,79);
+insert into t (id,a) values (403,80);
+insert into t (id,a) values (403,81);
+insert into t (id,a) values (403,82);
+insert into t (id,a) values (403,83);
+insert into t (id,a) values (403,84);
+insert into t (id,a) values (403,85);
+insert into t (id,a) values (403,86);
+insert into t (id,a) values (403,87);
+insert into t (id,a) values (403,88);
+insert into t (id,a) values (403,89);
+insert into t (id,a) values (403,90);
+insert into t (id,a) values (403,91);
+insert into t (id,a) values (403,92);
+insert into t (id,a) values (403,93);
+insert into t (id,a) values (403,94);
+insert into t (id,a) values (403,95);
+insert into t (id,a) values (403,96);
+insert into t (id,a) values (403,97);
+insert into t (id,a) values (403,98);
+insert into t (id,a) values (403,99);
+insert into t (id,a) values (404,0);
+insert into t (id,a) values (404,1);
+insert into t (id,a) values (404,2);
+insert into t (id,a) values (404,3);
+insert into t (id,a) values (404,4);
+insert into t (id,a) values (404,5);
+insert into t (id,a) values (404,6);
+insert into t (id,a) values (404,7);
+insert into t (id,a) values (404,8);
+insert into t (id,a) values (404,9);
+insert into t (id,a) values (404,10);
+insert into t (id,a) values (404,11);
+insert into t (id,a) values (404,12);
+insert into t (id,a) values (404,13);
+insert into t (id,a) values (404,14);
+insert into t (id,a) values (404,15);
+insert into t (id,a) values (404,16);
+insert into t (id,a) values (404,17);
+insert into t (id,a) values (404,18);
+insert into t (id,a) values (404,19);
+insert into t (id,a) values (404,20);
+insert into t (id,a) values (404,21);
+insert into t (id,a) values (404,22);
+insert into t (id,a) values (404,23);
+insert into t (id,a) values (404,24);
+insert into t (id,a) values (404,25);
+insert into t (id,a) values (404,26);
+insert into t (id,a) values (404,27);
+insert into t (id,a) values (404,28);
+insert into t (id,a) values (404,29);
+insert into t (id,a) values (404,30);
+insert into t (id,a) values (404,31);
+insert into t (id,a) values (404,32);
+insert into t (id,a) values (404,33);
+insert into t (id,a) values (404,34);
+insert into t (id,a) values (404,35);
+insert into t (id,a) values (404,36);
+insert into t (id,a) values (404,37);
+insert into t (id,a) values (404,38);
+insert into t (id,a) values (404,39);
+insert into t (id,a) values (404,40);
+insert into t (id,a) values (404,41);
+insert into t (id,a) values (404,42);
+insert into t (id,a) values (404,43);
+insert into t (id,a) values (404,44);
+insert into t (id,a) values (404,45);
+insert into t (id,a) values (404,46);
+insert into t (id,a) values (404,47);
+insert into t (id,a) values (404,48);
+insert into t (id,a) values (404,49);
+insert into t (id,a) values (404,50);
+insert into t (id,a) values (404,51);
+insert into t (id,a) values (404,52);
+insert into t (id,a) values (404,53);
+insert into t (id,a) values (404,54);
+insert into t (id,a) values (404,55);
+insert into t (id,a) values (404,56);
+insert into t (id,a) values (404,57);
+insert into t (id,a) values (404,58);
+insert into t (id,a) values (404,59);
+insert into t (id,a) values (404,60);
+insert into t (id,a) values (404,61);
+insert into t (id,a) values (404,62);
+insert into t (id,a) values (404,63);
+insert into t (id,a) values (404,64);
+insert into t (id,a) values (404,65);
+insert into t (id,a) values (404,66);
+insert into t (id,a) values (404,67);
+insert into t (id,a) values (404,68);
+insert into t (id,a) values (404,69);
+insert into t (id,a) values (404,70);
+insert into t (id,a) values (404,71);
+insert into t (id,a) values (404,72);
+insert into t (id,a) values (404,73);
+insert into t (id,a) values (404,74);
+insert into t (id,a) values (404,75);
+insert into t (id,a) values (404,76);
+insert into t (id,a) values (404,77);
+insert into t (id,a) values (404,78);
+insert into t (id,a) values (404,79);
+insert into t (id,a) values (404,80);
+insert into t (id,a) values (404,81);
+insert into t (id,a) values (404,82);
+insert into t (id,a) values (404,83);
+insert into t (id,a) values (404,84);
+insert into t (id,a) values (404,85);
+insert into t (id,a) values (404,86);
+insert into t (id,a) values (404,87);
+insert into t (id,a) values (404,88);
+insert into t (id,a) values (404,89);
+insert into t (id,a) values (404,90);
+insert into t (id,a) values (404,91);
+insert into t (id,a) values (404,92);
+insert into t (id,a) values (404,93);
+insert into t (id,a) values (404,94);
+insert into t (id,a) values (404,95);
+insert into t (id,a) values (404,96);
+insert into t (id,a) values (404,97);
+insert into t (id,a) values (404,98);
+insert into t (id,a) values (404,99);
+insert into t (id,a) values (405,0);
+insert into t (id,a) values (405,1);
+insert into t (id,a) values (405,2);
+insert into t (id,a) values (405,3);
+insert into t (id,a) values (405,4);
+insert into t (id,a) values (405,5);
+insert into t (id,a) values (405,6);
+insert into t (id,a) values (405,7);
+insert into t (id,a) values (405,8);
+insert into t (id,a) values (405,9);
+insert into t (id,a) values (405,10);
+insert into t (id,a) values (405,11);
+insert into t (id,a) values (405,12);
+insert into t (id,a) values (405,13);
+insert into t (id,a) values (405,14);
+insert into t (id,a) values (405,15);
+insert into t (id,a) values (405,16);
+insert into t (id,a) values (405,17);
+insert into t (id,a) values (405,18);
+insert into t (id,a) values (405,19);
+insert into t (id,a) values (405,20);
+insert into t (id,a) values (405,21);
+insert into t (id,a) values (405,22);
+insert into t (id,a) values (405,23);
+insert into t (id,a) values (405,24);
+insert into t (id,a) values (405,25);
+insert into t (id,a) values (405,26);
+insert into t (id,a) values (405,27);
+insert into t (id,a) values (405,28);
+insert into t (id,a) values (405,29);
+insert into t (id,a) values (405,30);
+insert into t (id,a) values (405,31);
+insert into t (id,a) values (405,32);
+insert into t (id,a) values (405,33);
+insert into t (id,a) values (405,34);
+insert into t (id,a) values (405,35);
+insert into t (id,a) values (405,36);
+insert into t (id,a) values (405,37);
+insert into t (id,a) values (405,38);
+insert into t (id,a) values (405,39);
+insert into t (id,a) values (405,40);
+insert into t (id,a) values (405,41);
+insert into t (id,a) values (405,42);
+insert into t (id,a) values (405,43);
+insert into t (id,a) values (405,44);
+insert into t (id,a) values (405,45);
+insert into t (id,a) values (405,46);
+insert into t (id,a) values (405,47);
+insert into t (id,a) values (405,48);
+insert into t (id,a) values (405,49);
+insert into t (id,a) values (405,50);
+insert into t (id,a) values (405,51);
+insert into t (id,a) values (405,52);
+insert into t (id,a) values (405,53);
+insert into t (id,a) values (405,54);
+insert into t (id,a) values (405,55);
+insert into t (id,a) values (405,56);
+insert into t (id,a) values (405,57);
+insert into t (id,a) values (405,58);
+insert into t (id,a) values (405,59);
+insert into t (id,a) values (405,60);
+insert into t (id,a) values (405,61);
+insert into t (id,a) values (405,62);
+insert into t (id,a) values (405,63);
+insert into t (id,a) values (405,64);
+insert into t (id,a) values (405,65);
+insert into t (id,a) values (405,66);
+insert into t (id,a) values (405,67);
+insert into t (id,a) values (405,68);
+insert into t (id,a) values (405,69);
+insert into t (id,a) values (405,70);
+insert into t (id,a) values (405,71);
+insert into t (id,a) values (405,72);
+insert into t (id,a) values (405,73);
+insert into t (id,a) values (405,74);
+insert into t (id,a) values (405,75);
+insert into t (id,a) values (405,76);
+insert into t (id,a) values (405,77);
+insert into t (id,a) values (405,78);
+insert into t (id,a) values (405,79);
+insert into t (id,a) values (405,80);
+insert into t (id,a) values (405,81);
+insert into t (id,a) values (405,82);
+insert into t (id,a) values (405,83);
+insert into t (id,a) values (405,84);
+insert into t (id,a) values (405,85);
+insert into t (id,a) values (405,86);
+insert into t (id,a) values (405,87);
+insert into t (id,a) values (405,88);
+insert into t (id,a) values (405,89);
+insert into t (id,a) values (405,90);
+insert into t (id,a) values (405,91);
+insert into t (id,a) values (405,92);
+insert into t (id,a) values (405,93);
+insert into t (id,a) values (405,94);
+insert into t (id,a) values (405,95);
+insert into t (id,a) values (405,96);
+insert into t (id,a) values (405,97);
+insert into t (id,a) values (405,98);
+insert into t (id,a) values (405,99);
+insert into t (id,a) values (406,0);
+insert into t (id,a) values (406,1);
+insert into t (id,a) values (406,2);
+insert into t (id,a) values (406,3);
+insert into t (id,a) values (406,4);
+insert into t (id,a) values (406,5);
+insert into t (id,a) values (406,6);
+insert into t (id,a) values (406,7);
+insert into t (id,a) values (406,8);
+insert into t (id,a) values (406,9);
+insert into t (id,a) values (406,10);
+insert into t (id,a) values (406,11);
+insert into t (id,a) values (406,12);
+insert into t (id,a) values (406,13);
+insert into t (id,a) values (406,14);
+insert into t (id,a) values (406,15);
+insert into t (id,a) values (406,16);
+insert into t (id,a) values (406,17);
+insert into t (id,a) values (406,18);
+insert into t (id,a) values (406,19);
+insert into t (id,a) values (406,20);
+insert into t (id,a) values (406,21);
+insert into t (id,a) values (406,22);
+insert into t (id,a) values (406,23);
+insert into t (id,a) values (406,24);
+insert into t (id,a) values (406,25);
+insert into t (id,a) values (406,26);
+insert into t (id,a) values (406,27);
+insert into t (id,a) values (406,28);
+insert into t (id,a) values (406,29);
+insert into t (id,a) values (406,30);
+insert into t (id,a) values (406,31);
+insert into t (id,a) values (406,32);
+insert into t (id,a) values (406,33);
+insert into t (id,a) values (406,34);
+insert into t (id,a) values (406,35);
+insert into t (id,a) values (406,36);
+insert into t (id,a) values (406,37);
+insert into t (id,a) values (406,38);
+insert into t (id,a) values (406,39);
+insert into t (id,a) values (406,40);
+insert into t (id,a) values (406,41);
+insert into t (id,a) values (406,42);
+insert into t (id,a) values (406,43);
+insert into t (id,a) values (406,44);
+insert into t (id,a) values (406,45);
+insert into t (id,a) values (406,46);
+insert into t (id,a) values (406,47);
+insert into t (id,a) values (406,48);
+insert into t (id,a) values (406,49);
+insert into t (id,a) values (406,50);
+insert into t (id,a) values (406,51);
+insert into t (id,a) values (406,52);
+insert into t (id,a) values (406,53);
+insert into t (id,a) values (406,54);
+insert into t (id,a) values (406,55);
+insert into t (id,a) values (406,56);
+insert into t (id,a) values (406,57);
+insert into t (id,a) values (406,58);
+insert into t (id,a) values (406,59);
+insert into t (id,a) values (406,60);
+insert into t (id,a) values (406,61);
+insert into t (id,a) values (406,62);
+insert into t (id,a) values (406,63);
+insert into t (id,a) values (406,64);
+insert into t (id,a) values (406,65);
+insert into t (id,a) values (406,66);
+insert into t (id,a) values (406,67);
+insert into t (id,a) values (406,68);
+insert into t (id,a) values (406,69);
+insert into t (id,a) values (406,70);
+insert into t (id,a) values (406,71);
+insert into t (id,a) values (406,72);
+insert into t (id,a) values (406,73);
+insert into t (id,a) values (406,74);
+insert into t (id,a) values (406,75);
+insert into t (id,a) values (406,76);
+insert into t (id,a) values (406,77);
+insert into t (id,a) values (406,78);
+insert into t (id,a) values (406,79);
+insert into t (id,a) values (406,80);
+insert into t (id,a) values (406,81);
+insert into t (id,a) values (406,82);
+insert into t (id,a) values (406,83);
+insert into t (id,a) values (406,84);
+insert into t (id,a) values (406,85);
+insert into t (id,a) values (406,86);
+insert into t (id,a) values (406,87);
+insert into t (id,a) values (406,88);
+insert into t (id,a) values (406,89);
+insert into t (id,a) values (406,90);
+insert into t (id,a) values (406,91);
+insert into t (id,a) values (406,92);
+insert into t (id,a) values (406,93);
+insert into t (id,a) values (406,94);
+insert into t (id,a) values (406,95);
+insert into t (id,a) values (406,96);
+insert into t (id,a) values (406,97);
+insert into t (id,a) values (406,98);
+insert into t (id,a) values (406,99);
+insert into t (id,a) values (407,0);
+insert into t (id,a) values (407,1);
+insert into t (id,a) values (407,2);
+insert into t (id,a) values (407,3);
+insert into t (id,a) values (407,4);
+insert into t (id,a) values (407,5);
+insert into t (id,a) values (407,6);
+insert into t (id,a) values (407,7);
+insert into t (id,a) values (407,8);
+insert into t (id,a) values (407,9);
+insert into t (id,a) values (407,10);
+insert into t (id,a) values (407,11);
+insert into t (id,a) values (407,12);
+insert into t (id,a) values (407,13);
+insert into t (id,a) values (407,14);
+insert into t (id,a) values (407,15);
+insert into t (id,a) values (407,16);
+insert into t (id,a) values (407,17);
+insert into t (id,a) values (407,18);
+insert into t (id,a) values (407,19);
+insert into t (id,a) values (407,20);
+insert into t (id,a) values (407,21);
+insert into t (id,a) values (407,22);
+insert into t (id,a) values (407,23);
+insert into t (id,a) values (407,24);
+insert into t (id,a) values (407,25);
+insert into t (id,a) values (407,26);
+insert into t (id,a) values (407,27);
+insert into t (id,a) values (407,28);
+insert into t (id,a) values (407,29);
+insert into t (id,a) values (407,30);
+insert into t (id,a) values (407,31);
+insert into t (id,a) values (407,32);
+insert into t (id,a) values (407,33);
+insert into t (id,a) values (407,34);
+insert into t (id,a) values (407,35);
+insert into t (id,a) values (407,36);
+insert into t (id,a) values (407,37);
+insert into t (id,a) values (407,38);
+insert into t (id,a) values (407,39);
+insert into t (id,a) values (407,40);
+insert into t (id,a) values (407,41);
+insert into t (id,a) values (407,42);
+insert into t (id,a) values (407,43);
+insert into t (id,a) values (407,44);
+insert into t (id,a) values (407,45);
+insert into t (id,a) values (407,46);
+insert into t (id,a) values (407,47);
+insert into t (id,a) values (407,48);
+insert into t (id,a) values (407,49);
+insert into t (id,a) values (407,50);
+insert into t (id,a) values (407,51);
+insert into t (id,a) values (407,52);
+insert into t (id,a) values (407,53);
+insert into t (id,a) values (407,54);
+insert into t (id,a) values (407,55);
+insert into t (id,a) values (407,56);
+insert into t (id,a) values (407,57);
+insert into t (id,a) values (407,58);
+insert into t (id,a) values (407,59);
+insert into t (id,a) values (407,60);
+insert into t (id,a) values (407,61);
+insert into t (id,a) values (407,62);
+insert into t (id,a) values (407,63);
+insert into t (id,a) values (407,64);
+insert into t (id,a) values (407,65);
+insert into t (id,a) values (407,66);
+insert into t (id,a) values (407,67);
+insert into t (id,a) values (407,68);
+insert into t (id,a) values (407,69);
+insert into t (id,a) values (407,70);
+insert into t (id,a) values (407,71);
+insert into t (id,a) values (407,72);
+insert into t (id,a) values (407,73);
+insert into t (id,a) values (407,74);
+insert into t (id,a) values (407,75);
+insert into t (id,a) values (407,76);
+insert into t (id,a) values (407,77);
+insert into t (id,a) values (407,78);
+insert into t (id,a) values (407,79);
+insert into t (id,a) values (407,80);
+insert into t (id,a) values (407,81);
+insert into t (id,a) values (407,82);
+insert into t (id,a) values (407,83);
+insert into t (id,a) values (407,84);
+insert into t (id,a) values (407,85);
+insert into t (id,a) values (407,86);
+insert into t (id,a) values (407,87);
+insert into t (id,a) values (407,88);
+insert into t (id,a) values (407,89);
+insert into t (id,a) values (407,90);
+insert into t (id,a) values (407,91);
+insert into t (id,a) values (407,92);
+insert into t (id,a) values (407,93);
+insert into t (id,a) values (407,94);
+insert into t (id,a) values (407,95);
+insert into t (id,a) values (407,96);
+insert into t (id,a) values (407,97);
+insert into t (id,a) values (407,98);
+insert into t (id,a) values (407,99);
+insert into t (id,a) values (408,0);
+insert into t (id,a) values (408,1);
+insert into t (id,a) values (408,2);
+insert into t (id,a) values (408,3);
+insert into t (id,a) values (408,4);
+insert into t (id,a) values (408,5);
+insert into t (id,a) values (408,6);
+insert into t (id,a) values (408,7);
+insert into t (id,a) values (408,8);
+insert into t (id,a) values (408,9);
+insert into t (id,a) values (408,10);
+insert into t (id,a) values (408,11);
+insert into t (id,a) values (408,12);
+insert into t (id,a) values (408,13);
+insert into t (id,a) values (408,14);
+insert into t (id,a) values (408,15);
+insert into t (id,a) values (408,16);
+insert into t (id,a) values (408,17);
+insert into t (id,a) values (408,18);
+insert into t (id,a) values (408,19);
+insert into t (id,a) values (408,20);
+insert into t (id,a) values (408,21);
+insert into t (id,a) values (408,22);
+insert into t (id,a) values (408,23);
+insert into t (id,a) values (408,24);
+insert into t (id,a) values (408,25);
+insert into t (id,a) values (408,26);
+insert into t (id,a) values (408,27);
+insert into t (id,a) values (408,28);
+insert into t (id,a) values (408,29);
+insert into t (id,a) values (408,30);
+insert into t (id,a) values (408,31);
+insert into t (id,a) values (408,32);
+insert into t (id,a) values (408,33);
+insert into t (id,a) values (408,34);
+insert into t (id,a) values (408,35);
+insert into t (id,a) values (408,36);
+insert into t (id,a) values (408,37);
+insert into t (id,a) values (408,38);
+insert into t (id,a) values (408,39);
+insert into t (id,a) values (408,40);
+insert into t (id,a) values (408,41);
+insert into t (id,a) values (408,42);
+insert into t (id,a) values (408,43);
+insert into t (id,a) values (408,44);
+insert into t (id,a) values (408,45);
+insert into t (id,a) values (408,46);
+insert into t (id,a) values (408,47);
+insert into t (id,a) values (408,48);
+insert into t (id,a) values (408,49);
+insert into t (id,a) values (408,50);
+insert into t (id,a) values (408,51);
+insert into t (id,a) values (408,52);
+insert into t (id,a) values (408,53);
+insert into t (id,a) values (408,54);
+insert into t (id,a) values (408,55);
+insert into t (id,a) values (408,56);
+insert into t (id,a) values (408,57);
+insert into t (id,a) values (408,58);
+insert into t (id,a) values (408,59);
+insert into t (id,a) values (408,60);
+insert into t (id,a) values (408,61);
+insert into t (id,a) values (408,62);
+insert into t (id,a) values (408,63);
+insert into t (id,a) values (408,64);
+insert into t (id,a) values (408,65);
+insert into t (id,a) values (408,66);
+insert into t (id,a) values (408,67);
+insert into t (id,a) values (408,68);
+insert into t (id,a) values (408,69);
+insert into t (id,a) values (408,70);
+insert into t (id,a) values (408,71);
+insert into t (id,a) values (408,72);
+insert into t (id,a) values (408,73);
+insert into t (id,a) values (408,74);
+insert into t (id,a) values (408,75);
+insert into t (id,a) values (408,76);
+insert into t (id,a) values (408,77);
+insert into t (id,a) values (408,78);
+insert into t (id,a) values (408,79);
+insert into t (id,a) values (408,80);
+insert into t (id,a) values (408,81);
+insert into t (id,a) values (408,82);
+insert into t (id,a) values (408,83);
+insert into t (id,a) values (408,84);
+insert into t (id,a) values (408,85);
+insert into t (id,a) values (408,86);
+insert into t (id,a) values (408,87);
+insert into t (id,a) values (408,88);
+insert into t (id,a) values (408,89);
+insert into t (id,a) values (408,90);
+insert into t (id,a) values (408,91);
+insert into t (id,a) values (408,92);
+insert into t (id,a) values (408,93);
+insert into t (id,a) values (408,94);
+insert into t (id,a) values (408,95);
+insert into t (id,a) values (408,96);
+insert into t (id,a) values (408,97);
+insert into t (id,a) values (408,98);
+insert into t (id,a) values (408,99);
+insert into t (id,a) values (409,0);
+insert into t (id,a) values (409,1);
+insert into t (id,a) values (409,2);
+insert into t (id,a) values (409,3);
+insert into t (id,a) values (409,4);
+insert into t (id,a) values (409,5);
+insert into t (id,a) values (409,6);
+insert into t (id,a) values (409,7);
+insert into t (id,a) values (409,8);
+insert into t (id,a) values (409,9);
+insert into t (id,a) values (409,10);
+insert into t (id,a) values (409,11);
+insert into t (id,a) values (409,12);
+insert into t (id,a) values (409,13);
+insert into t (id,a) values (409,14);
+insert into t (id,a) values (409,15);
+insert into t (id,a) values (409,16);
+insert into t (id,a) values (409,17);
+insert into t (id,a) values (409,18);
+insert into t (id,a) values (409,19);
+insert into t (id,a) values (409,20);
+insert into t (id,a) values (409,21);
+insert into t (id,a) values (409,22);
+insert into t (id,a) values (409,23);
+insert into t (id,a) values (409,24);
+insert into t (id,a) values (409,25);
+insert into t (id,a) values (409,26);
+insert into t (id,a) values (409,27);
+insert into t (id,a) values (409,28);
+insert into t (id,a) values (409,29);
+insert into t (id,a) values (409,30);
+insert into t (id,a) values (409,31);
+insert into t (id,a) values (409,32);
+insert into t (id,a) values (409,33);
+insert into t (id,a) values (409,34);
+insert into t (id,a) values (409,35);
+insert into t (id,a) values (409,36);
+insert into t (id,a) values (409,37);
+insert into t (id,a) values (409,38);
+insert into t (id,a) values (409,39);
+insert into t (id,a) values (409,40);
+insert into t (id,a) values (409,41);
+insert into t (id,a) values (409,42);
+insert into t (id,a) values (409,43);
+insert into t (id,a) values (409,44);
+insert into t (id,a) values (409,45);
+insert into t (id,a) values (409,46);
+insert into t (id,a) values (409,47);
+insert into t (id,a) values (409,48);
+insert into t (id,a) values (409,49);
+insert into t (id,a) values (409,50);
+insert into t (id,a) values (409,51);
+insert into t (id,a) values (409,52);
+insert into t (id,a) values (409,53);
+insert into t (id,a) values (409,54);
+insert into t (id,a) values (409,55);
+insert into t (id,a) values (409,56);
+insert into t (id,a) values (409,57);
+insert into t (id,a) values (409,58);
+insert into t (id,a) values (409,59);
+insert into t (id,a) values (409,60);
+insert into t (id,a) values (409,61);
+insert into t (id,a) values (409,62);
+insert into t (id,a) values (409,63);
+insert into t (id,a) values (409,64);
+insert into t (id,a) values (409,65);
+insert into t (id,a) values (409,66);
+insert into t (id,a) values (409,67);
+insert into t (id,a) values (409,68);
+insert into t (id,a) values (409,69);
+insert into t (id,a) values (409,70);
+insert into t (id,a) values (409,71);
+insert into t (id,a) values (409,72);
+insert into t (id,a) values (409,73);
+insert into t (id,a) values (409,74);
+insert into t (id,a) values (409,75);
+insert into t (id,a) values (409,76);
+insert into t (id,a) values (409,77);
+insert into t (id,a) values (409,78);
+insert into t (id,a) values (409,79);
+insert into t (id,a) values (409,80);
+insert into t (id,a) values (409,81);
+insert into t (id,a) values (409,82);
+insert into t (id,a) values (409,83);
+insert into t (id,a) values (409,84);
+insert into t (id,a) values (409,85);
+insert into t (id,a) values (409,86);
+insert into t (id,a) values (409,87);
+insert into t (id,a) values (409,88);
+insert into t (id,a) values (409,89);
+insert into t (id,a) values (409,90);
+insert into t (id,a) values (409,91);
+insert into t (id,a) values (409,92);
+insert into t (id,a) values (409,93);
+insert into t (id,a) values (409,94);
+insert into t (id,a) values (409,95);
+insert into t (id,a) values (409,96);
+insert into t (id,a) values (409,97);
+insert into t (id,a) values (409,98);
+insert into t (id,a) values (409,99);
+insert into t (id,a) values (410,0);
+insert into t (id,a) values (410,1);
+insert into t (id,a) values (410,2);
+insert into t (id,a) values (410,3);
+insert into t (id,a) values (410,4);
+insert into t (id,a) values (410,5);
+insert into t (id,a) values (410,6);
+insert into t (id,a) values (410,7);
+insert into t (id,a) values (410,8);
+insert into t (id,a) values (410,9);
+insert into t (id,a) values (410,10);
+insert into t (id,a) values (410,11);
+insert into t (id,a) values (410,12);
+insert into t (id,a) values (410,13);
+insert into t (id,a) values (410,14);
+insert into t (id,a) values (410,15);
+insert into t (id,a) values (410,16);
+insert into t (id,a) values (410,17);
+insert into t (id,a) values (410,18);
+insert into t (id,a) values (410,19);
+insert into t (id,a) values (410,20);
+insert into t (id,a) values (410,21);
+insert into t (id,a) values (410,22);
+insert into t (id,a) values (410,23);
+insert into t (id,a) values (410,24);
+insert into t (id,a) values (410,25);
+insert into t (id,a) values (410,26);
+insert into t (id,a) values (410,27);
+insert into t (id,a) values (410,28);
+insert into t (id,a) values (410,29);
+insert into t (id,a) values (410,30);
+insert into t (id,a) values (410,31);
+insert into t (id,a) values (410,32);
+insert into t (id,a) values (410,33);
+insert into t (id,a) values (410,34);
+insert into t (id,a) values (410,35);
+insert into t (id,a) values (410,36);
+insert into t (id,a) values (410,37);
+insert into t (id,a) values (410,38);
+insert into t (id,a) values (410,39);
+insert into t (id,a) values (410,40);
+insert into t (id,a) values (410,41);
+insert into t (id,a) values (410,42);
+insert into t (id,a) values (410,43);
+insert into t (id,a) values (410,44);
+insert into t (id,a) values (410,45);
+insert into t (id,a) values (410,46);
+insert into t (id,a) values (410,47);
+insert into t (id,a) values (410,48);
+insert into t (id,a) values (410,49);
+insert into t (id,a) values (410,50);
+insert into t (id,a) values (410,51);
+insert into t (id,a) values (410,52);
+insert into t (id,a) values (410,53);
+insert into t (id,a) values (410,54);
+insert into t (id,a) values (410,55);
+insert into t (id,a) values (410,56);
+insert into t (id,a) values (410,57);
+insert into t (id,a) values (410,58);
+insert into t (id,a) values (410,59);
+insert into t (id,a) values (410,60);
+insert into t (id,a) values (410,61);
+insert into t (id,a) values (410,62);
+insert into t (id,a) values (410,63);
+insert into t (id,a) values (410,64);
+insert into t (id,a) values (410,65);
+insert into t (id,a) values (410,66);
+insert into t (id,a) values (410,67);
+insert into t (id,a) values (410,68);
+insert into t (id,a) values (410,69);
+insert into t (id,a) values (410,70);
+insert into t (id,a) values (410,71);
+insert into t (id,a) values (410,72);
+insert into t (id,a) values (410,73);
+insert into t (id,a) values (410,74);
+insert into t (id,a) values (410,75);
+insert into t (id,a) values (410,76);
+insert into t (id,a) values (410,77);
+insert into t (id,a) values (410,78);
+insert into t (id,a) values (410,79);
+insert into t (id,a) values (410,80);
+insert into t (id,a) values (410,81);
+insert into t (id,a) values (410,82);
+insert into t (id,a) values (410,83);
+insert into t (id,a) values (410,84);
+insert into t (id,a) values (410,85);
+insert into t (id,a) values (410,86);
+insert into t (id,a) values (410,87);
+insert into t (id,a) values (410,88);
+insert into t (id,a) values (410,89);
+insert into t (id,a) values (410,90);
+insert into t (id,a) values (410,91);
+insert into t (id,a) values (410,92);
+insert into t (id,a) values (410,93);
+insert into t (id,a) values (410,94);
+insert into t (id,a) values (410,95);
+insert into t (id,a) values (410,96);
+insert into t (id,a) values (410,97);
+insert into t (id,a) values (410,98);
+insert into t (id,a) values (410,99);
+insert into t (id,a) values (411,0);
+insert into t (id,a) values (411,1);
+insert into t (id,a) values (411,2);
+insert into t (id,a) values (411,3);
+insert into t (id,a) values (411,4);
+insert into t (id,a) values (411,5);
+insert into t (id,a) values (411,6);
+insert into t (id,a) values (411,7);
+insert into t (id,a) values (411,8);
+insert into t (id,a) values (411,9);
+insert into t (id,a) values (411,10);
+insert into t (id,a) values (411,11);
+insert into t (id,a) values (411,12);
+insert into t (id,a) values (411,13);
+insert into t (id,a) values (411,14);
+insert into t (id,a) values (411,15);
+insert into t (id,a) values (411,16);
+insert into t (id,a) values (411,17);
+insert into t (id,a) values (411,18);
+insert into t (id,a) values (411,19);
+insert into t (id,a) values (411,20);
+insert into t (id,a) values (411,21);
+insert into t (id,a) values (411,22);
+insert into t (id,a) values (411,23);
+insert into t (id,a) values (411,24);
+insert into t (id,a) values (411,25);
+insert into t (id,a) values (411,26);
+insert into t (id,a) values (411,27);
+insert into t (id,a) values (411,28);
+insert into t (id,a) values (411,29);
+insert into t (id,a) values (411,30);
+insert into t (id,a) values (411,31);
+insert into t (id,a) values (411,32);
+insert into t (id,a) values (411,33);
+insert into t (id,a) values (411,34);
+insert into t (id,a) values (411,35);
+insert into t (id,a) values (411,36);
+insert into t (id,a) values (411,37);
+insert into t (id,a) values (411,38);
+insert into t (id,a) values (411,39);
+insert into t (id,a) values (411,40);
+insert into t (id,a) values (411,41);
+insert into t (id,a) values (411,42);
+insert into t (id,a) values (411,43);
+insert into t (id,a) values (411,44);
+insert into t (id,a) values (411,45);
+insert into t (id,a) values (411,46);
+insert into t (id,a) values (411,47);
+insert into t (id,a) values (411,48);
+insert into t (id,a) values (411,49);
+insert into t (id,a) values (411,50);
+insert into t (id,a) values (411,51);
+insert into t (id,a) values (411,52);
+insert into t (id,a) values (411,53);
+insert into t (id,a) values (411,54);
+insert into t (id,a) values (411,55);
+insert into t (id,a) values (411,56);
+insert into t (id,a) values (411,57);
+insert into t (id,a) values (411,58);
+insert into t (id,a) values (411,59);
+insert into t (id,a) values (411,60);
+insert into t (id,a) values (411,61);
+insert into t (id,a) values (411,62);
+insert into t (id,a) values (411,63);
+insert into t (id,a) values (411,64);
+insert into t (id,a) values (411,65);
+insert into t (id,a) values (411,66);
+insert into t (id,a) values (411,67);
+insert into t (id,a) values (411,68);
+insert into t (id,a) values (411,69);
+insert into t (id,a) values (411,70);
+insert into t (id,a) values (411,71);
+insert into t (id,a) values (411,72);
+insert into t (id,a) values (411,73);
+insert into t (id,a) values (411,74);
+insert into t (id,a) values (411,75);
+insert into t (id,a) values (411,76);
+insert into t (id,a) values (411,77);
+insert into t (id,a) values (411,78);
+insert into t (id,a) values (411,79);
+insert into t (id,a) values (411,80);
+insert into t (id,a) values (411,81);
+insert into t (id,a) values (411,82);
+insert into t (id,a) values (411,83);
+insert into t (id,a) values (411,84);
+insert into t (id,a) values (411,85);
+insert into t (id,a) values (411,86);
+insert into t (id,a) values (411,87);
+insert into t (id,a) values (411,88);
+insert into t (id,a) values (411,89);
+insert into t (id,a) values (411,90);
+insert into t (id,a) values (411,91);
+insert into t (id,a) values (411,92);
+insert into t (id,a) values (411,93);
+insert into t (id,a) values (411,94);
+insert into t (id,a) values (411,95);
+insert into t (id,a) values (411,96);
+insert into t (id,a) values (411,97);
+insert into t (id,a) values (411,98);
+insert into t (id,a) values (411,99);
+insert into t (id,a) values (412,0);
+insert into t (id,a) values (412,1);
+insert into t (id,a) values (412,2);
+insert into t (id,a) values (412,3);
+insert into t (id,a) values (412,4);
+insert into t (id,a) values (412,5);
+insert into t (id,a) values (412,6);
+insert into t (id,a) values (412,7);
+insert into t (id,a) values (412,8);
+insert into t (id,a) values (412,9);
+insert into t (id,a) values (412,10);
+insert into t (id,a) values (412,11);
+insert into t (id,a) values (412,12);
+insert into t (id,a) values (412,13);
+insert into t (id,a) values (412,14);
+insert into t (id,a) values (412,15);
+insert into t (id,a) values (412,16);
+insert into t (id,a) values (412,17);
+insert into t (id,a) values (412,18);
+insert into t (id,a) values (412,19);
+insert into t (id,a) values (412,20);
+insert into t (id,a) values (412,21);
+insert into t (id,a) values (412,22);
+insert into t (id,a) values (412,23);
+insert into t (id,a) values (412,24);
+insert into t (id,a) values (412,25);
+insert into t (id,a) values (412,26);
+insert into t (id,a) values (412,27);
+insert into t (id,a) values (412,28);
+insert into t (id,a) values (412,29);
+insert into t (id,a) values (412,30);
+insert into t (id,a) values (412,31);
+insert into t (id,a) values (412,32);
+insert into t (id,a) values (412,33);
+insert into t (id,a) values (412,34);
+insert into t (id,a) values (412,35);
+insert into t (id,a) values (412,36);
+insert into t (id,a) values (412,37);
+insert into t (id,a) values (412,38);
+insert into t (id,a) values (412,39);
+insert into t (id,a) values (412,40);
+insert into t (id,a) values (412,41);
+insert into t (id,a) values (412,42);
+insert into t (id,a) values (412,43);
+insert into t (id,a) values (412,44);
+insert into t (id,a) values (412,45);
+insert into t (id,a) values (412,46);
+insert into t (id,a) values (412,47);
+insert into t (id,a) values (412,48);
+insert into t (id,a) values (412,49);
+insert into t (id,a) values (412,50);
+insert into t (id,a) values (412,51);
+insert into t (id,a) values (412,52);
+insert into t (id,a) values (412,53);
+insert into t (id,a) values (412,54);
+insert into t (id,a) values (412,55);
+insert into t (id,a) values (412,56);
+insert into t (id,a) values (412,57);
+insert into t (id,a) values (412,58);
+insert into t (id,a) values (412,59);
+insert into t (id,a) values (412,60);
+insert into t (id,a) values (412,61);
+insert into t (id,a) values (412,62);
+insert into t (id,a) values (412,63);
+insert into t (id,a) values (412,64);
+insert into t (id,a) values (412,65);
+insert into t (id,a) values (412,66);
+insert into t (id,a) values (412,67);
+insert into t (id,a) values (412,68);
+insert into t (id,a) values (412,69);
+insert into t (id,a) values (412,70);
+insert into t (id,a) values (412,71);
+insert into t (id,a) values (412,72);
+insert into t (id,a) values (412,73);
+insert into t (id,a) values (412,74);
+insert into t (id,a) values (412,75);
+insert into t (id,a) values (412,76);
+insert into t (id,a) values (412,77);
+insert into t (id,a) values (412,78);
+insert into t (id,a) values (412,79);
+insert into t (id,a) values (412,80);
+insert into t (id,a) values (412,81);
+insert into t (id,a) values (412,82);
+insert into t (id,a) values (412,83);
+insert into t (id,a) values (412,84);
+insert into t (id,a) values (412,85);
+insert into t (id,a) values (412,86);
+insert into t (id,a) values (412,87);
+insert into t (id,a) values (412,88);
+insert into t (id,a) values (412,89);
+insert into t (id,a) values (412,90);
+insert into t (id,a) values (412,91);
+insert into t (id,a) values (412,92);
+insert into t (id,a) values (412,93);
+insert into t (id,a) values (412,94);
+insert into t (id,a) values (412,95);
+insert into t (id,a) values (412,96);
+insert into t (id,a) values (412,97);
+insert into t (id,a) values (412,98);
+insert into t (id,a) values (412,99);
+insert into t (id,a) values (413,0);
+insert into t (id,a) values (413,1);
+insert into t (id,a) values (413,2);
+insert into t (id,a) values (413,3);
+insert into t (id,a) values (413,4);
+insert into t (id,a) values (413,5);
+insert into t (id,a) values (413,6);
+insert into t (id,a) values (413,7);
+insert into t (id,a) values (413,8);
+insert into t (id,a) values (413,9);
+insert into t (id,a) values (413,10);
+insert into t (id,a) values (413,11);
+insert into t (id,a) values (413,12);
+insert into t (id,a) values (413,13);
+insert into t (id,a) values (413,14);
+insert into t (id,a) values (413,15);
+insert into t (id,a) values (413,16);
+insert into t (id,a) values (413,17);
+insert into t (id,a) values (413,18);
+insert into t (id,a) values (413,19);
+insert into t (id,a) values (413,20);
+insert into t (id,a) values (413,21);
+insert into t (id,a) values (413,22);
+insert into t (id,a) values (413,23);
+insert into t (id,a) values (413,24);
+insert into t (id,a) values (413,25);
+insert into t (id,a) values (413,26);
+insert into t (id,a) values (413,27);
+insert into t (id,a) values (413,28);
+insert into t (id,a) values (413,29);
+insert into t (id,a) values (413,30);
+insert into t (id,a) values (413,31);
+insert into t (id,a) values (413,32);
+insert into t (id,a) values (413,33);
+insert into t (id,a) values (413,34);
+insert into t (id,a) values (413,35);
+insert into t (id,a) values (413,36);
+insert into t (id,a) values (413,37);
+insert into t (id,a) values (413,38);
+insert into t (id,a) values (413,39);
+insert into t (id,a) values (413,40);
+insert into t (id,a) values (413,41);
+insert into t (id,a) values (413,42);
+insert into t (id,a) values (413,43);
+insert into t (id,a) values (413,44);
+insert into t (id,a) values (413,45);
+insert into t (id,a) values (413,46);
+insert into t (id,a) values (413,47);
+insert into t (id,a) values (413,48);
+insert into t (id,a) values (413,49);
+insert into t (id,a) values (413,50);
+insert into t (id,a) values (413,51);
+insert into t (id,a) values (413,52);
+insert into t (id,a) values (413,53);
+insert into t (id,a) values (413,54);
+insert into t (id,a) values (413,55);
+insert into t (id,a) values (413,56);
+insert into t (id,a) values (413,57);
+insert into t (id,a) values (413,58);
+insert into t (id,a) values (413,59);
+insert into t (id,a) values (413,60);
+insert into t (id,a) values (413,61);
+insert into t (id,a) values (413,62);
+insert into t (id,a) values (413,63);
+insert into t (id,a) values (413,64);
+insert into t (id,a) values (413,65);
+insert into t (id,a) values (413,66);
+insert into t (id,a) values (413,67);
+insert into t (id,a) values (413,68);
+insert into t (id,a) values (413,69);
+insert into t (id,a) values (413,70);
+insert into t (id,a) values (413,71);
+insert into t (id,a) values (413,72);
+insert into t (id,a) values (413,73);
+insert into t (id,a) values (413,74);
+insert into t (id,a) values (413,75);
+insert into t (id,a) values (413,76);
+insert into t (id,a) values (413,77);
+insert into t (id,a) values (413,78);
+insert into t (id,a) values (413,79);
+insert into t (id,a) values (413,80);
+insert into t (id,a) values (413,81);
+insert into t (id,a) values (413,82);
+insert into t (id,a) values (413,83);
+insert into t (id,a) values (413,84);
+insert into t (id,a) values (413,85);
+insert into t (id,a) values (413,86);
+insert into t (id,a) values (413,87);
+insert into t (id,a) values (413,88);
+insert into t (id,a) values (413,89);
+insert into t (id,a) values (413,90);
+insert into t (id,a) values (413,91);
+insert into t (id,a) values (413,92);
+insert into t (id,a) values (413,93);
+insert into t (id,a) values (413,94);
+insert into t (id,a) values (413,95);
+insert into t (id,a) values (413,96);
+insert into t (id,a) values (413,97);
+insert into t (id,a) values (413,98);
+insert into t (id,a) values (413,99);
+insert into t (id,a) values (414,0);
+insert into t (id,a) values (414,1);
+insert into t (id,a) values (414,2);
+insert into t (id,a) values (414,3);
+insert into t (id,a) values (414,4);
+insert into t (id,a) values (414,5);
+insert into t (id,a) values (414,6);
+insert into t (id,a) values (414,7);
+insert into t (id,a) values (414,8);
+insert into t (id,a) values (414,9);
+insert into t (id,a) values (414,10);
+insert into t (id,a) values (414,11);
+insert into t (id,a) values (414,12);
+insert into t (id,a) values (414,13);
+insert into t (id,a) values (414,14);
+insert into t (id,a) values (414,15);
+insert into t (id,a) values (414,16);
+insert into t (id,a) values (414,17);
+insert into t (id,a) values (414,18);
+insert into t (id,a) values (414,19);
+insert into t (id,a) values (414,20);
+insert into t (id,a) values (414,21);
+insert into t (id,a) values (414,22);
+insert into t (id,a) values (414,23);
+insert into t (id,a) values (414,24);
+insert into t (id,a) values (414,25);
+insert into t (id,a) values (414,26);
+insert into t (id,a) values (414,27);
+insert into t (id,a) values (414,28);
+insert into t (id,a) values (414,29);
+insert into t (id,a) values (414,30);
+insert into t (id,a) values (414,31);
+insert into t (id,a) values (414,32);
+insert into t (id,a) values (414,33);
+insert into t (id,a) values (414,34);
+insert into t (id,a) values (414,35);
+insert into t (id,a) values (414,36);
+insert into t (id,a) values (414,37);
+insert into t (id,a) values (414,38);
+insert into t (id,a) values (414,39);
+insert into t (id,a) values (414,40);
+insert into t (id,a) values (414,41);
+insert into t (id,a) values (414,42);
+insert into t (id,a) values (414,43);
+insert into t (id,a) values (414,44);
+insert into t (id,a) values (414,45);
+insert into t (id,a) values (414,46);
+insert into t (id,a) values (414,47);
+insert into t (id,a) values (414,48);
+insert into t (id,a) values (414,49);
+insert into t (id,a) values (414,50);
+insert into t (id,a) values (414,51);
+insert into t (id,a) values (414,52);
+insert into t (id,a) values (414,53);
+insert into t (id,a) values (414,54);
+insert into t (id,a) values (414,55);
+insert into t (id,a) values (414,56);
+insert into t (id,a) values (414,57);
+insert into t (id,a) values (414,58);
+insert into t (id,a) values (414,59);
+insert into t (id,a) values (414,60);
+insert into t (id,a) values (414,61);
+insert into t (id,a) values (414,62);
+insert into t (id,a) values (414,63);
+insert into t (id,a) values (414,64);
+insert into t (id,a) values (414,65);
+insert into t (id,a) values (414,66);
+insert into t (id,a) values (414,67);
+insert into t (id,a) values (414,68);
+insert into t (id,a) values (414,69);
+insert into t (id,a) values (414,70);
+insert into t (id,a) values (414,71);
+insert into t (id,a) values (414,72);
+insert into t (id,a) values (414,73);
+insert into t (id,a) values (414,74);
+insert into t (id,a) values (414,75);
+insert into t (id,a) values (414,76);
+insert into t (id,a) values (414,77);
+insert into t (id,a) values (414,78);
+insert into t (id,a) values (414,79);
+insert into t (id,a) values (414,80);
+insert into t (id,a) values (414,81);
+insert into t (id,a) values (414,82);
+insert into t (id,a) values (414,83);
+insert into t (id,a) values (414,84);
+insert into t (id,a) values (414,85);
+insert into t (id,a) values (414,86);
+insert into t (id,a) values (414,87);
+insert into t (id,a) values (414,88);
+insert into t (id,a) values (414,89);
+insert into t (id,a) values (414,90);
+insert into t (id,a) values (414,91);
+insert into t (id,a) values (414,92);
+insert into t (id,a) values (414,93);
+insert into t (id,a) values (414,94);
+insert into t (id,a) values (414,95);
+insert into t (id,a) values (414,96);
+insert into t (id,a) values (414,97);
+insert into t (id,a) values (414,98);
+insert into t (id,a) values (414,99);
+insert into t (id,a) values (415,0);
+insert into t (id,a) values (415,1);
+insert into t (id,a) values (415,2);
+insert into t (id,a) values (415,3);
+insert into t (id,a) values (415,4);
+insert into t (id,a) values (415,5);
+insert into t (id,a) values (415,6);
+insert into t (id,a) values (415,7);
+insert into t (id,a) values (415,8);
+insert into t (id,a) values (415,9);
+insert into t (id,a) values (415,10);
+insert into t (id,a) values (415,11);
+insert into t (id,a) values (415,12);
+insert into t (id,a) values (415,13);
+insert into t (id,a) values (415,14);
+insert into t (id,a) values (415,15);
+insert into t (id,a) values (415,16);
+insert into t (id,a) values (415,17);
+insert into t (id,a) values (415,18);
+insert into t (id,a) values (415,19);
+insert into t (id,a) values (415,20);
+insert into t (id,a) values (415,21);
+insert into t (id,a) values (415,22);
+insert into t (id,a) values (415,23);
+insert into t (id,a) values (415,24);
+insert into t (id,a) values (415,25);
+insert into t (id,a) values (415,26);
+insert into t (id,a) values (415,27);
+insert into t (id,a) values (415,28);
+insert into t (id,a) values (415,29);
+insert into t (id,a) values (415,30);
+insert into t (id,a) values (415,31);
+insert into t (id,a) values (415,32);
+insert into t (id,a) values (415,33);
+insert into t (id,a) values (415,34);
+insert into t (id,a) values (415,35);
+insert into t (id,a) values (415,36);
+insert into t (id,a) values (415,37);
+insert into t (id,a) values (415,38);
+insert into t (id,a) values (415,39);
+insert into t (id,a) values (415,40);
+insert into t (id,a) values (415,41);
+insert into t (id,a) values (415,42);
+insert into t (id,a) values (415,43);
+insert into t (id,a) values (415,44);
+insert into t (id,a) values (415,45);
+insert into t (id,a) values (415,46);
+insert into t (id,a) values (415,47);
+insert into t (id,a) values (415,48);
+insert into t (id,a) values (415,49);
+insert into t (id,a) values (415,50);
+insert into t (id,a) values (415,51);
+insert into t (id,a) values (415,52);
+insert into t (id,a) values (415,53);
+insert into t (id,a) values (415,54);
+insert into t (id,a) values (415,55);
+insert into t (id,a) values (415,56);
+insert into t (id,a) values (415,57);
+insert into t (id,a) values (415,58);
+insert into t (id,a) values (415,59);
+insert into t (id,a) values (415,60);
+insert into t (id,a) values (415,61);
+insert into t (id,a) values (415,62);
+insert into t (id,a) values (415,63);
+insert into t (id,a) values (415,64);
+insert into t (id,a) values (415,65);
+insert into t (id,a) values (415,66);
+insert into t (id,a) values (415,67);
+insert into t (id,a) values (415,68);
+insert into t (id,a) values (415,69);
+insert into t (id,a) values (415,70);
+insert into t (id,a) values (415,71);
+insert into t (id,a) values (415,72);
+insert into t (id,a) values (415,73);
+insert into t (id,a) values (415,74);
+insert into t (id,a) values (415,75);
+insert into t (id,a) values (415,76);
+insert into t (id,a) values (415,77);
+insert into t (id,a) values (415,78);
+insert into t (id,a) values (415,79);
+insert into t (id,a) values (415,80);
+insert into t (id,a) values (415,81);
+insert into t (id,a) values (415,82);
+insert into t (id,a) values (415,83);
+insert into t (id,a) values (415,84);
+insert into t (id,a) values (415,85);
+insert into t (id,a) values (415,86);
+insert into t (id,a) values (415,87);
+insert into t (id,a) values (415,88);
+insert into t (id,a) values (415,89);
+insert into t (id,a) values (415,90);
+insert into t (id,a) values (415,91);
+insert into t (id,a) values (415,92);
+insert into t (id,a) values (415,93);
+insert into t (id,a) values (415,94);
+insert into t (id,a) values (415,95);
+insert into t (id,a) values (415,96);
+insert into t (id,a) values (415,97);
+insert into t (id,a) values (415,98);
+insert into t (id,a) values (415,99);
+insert into t (id,a) values (416,0);
+insert into t (id,a) values (416,1);
+insert into t (id,a) values (416,2);
+insert into t (id,a) values (416,3);
+insert into t (id,a) values (416,4);
+insert into t (id,a) values (416,5);
+insert into t (id,a) values (416,6);
+insert into t (id,a) values (416,7);
+insert into t (id,a) values (416,8);
+insert into t (id,a) values (416,9);
+insert into t (id,a) values (416,10);
+insert into t (id,a) values (416,11);
+insert into t (id,a) values (416,12);
+insert into t (id,a) values (416,13);
+insert into t (id,a) values (416,14);
+insert into t (id,a) values (416,15);
+insert into t (id,a) values (416,16);
+insert into t (id,a) values (416,17);
+insert into t (id,a) values (416,18);
+insert into t (id,a) values (416,19);
+insert into t (id,a) values (416,20);
+insert into t (id,a) values (416,21);
+insert into t (id,a) values (416,22);
+insert into t (id,a) values (416,23);
+insert into t (id,a) values (416,24);
+insert into t (id,a) values (416,25);
+insert into t (id,a) values (416,26);
+insert into t (id,a) values (416,27);
+insert into t (id,a) values (416,28);
+insert into t (id,a) values (416,29);
+insert into t (id,a) values (416,30);
+insert into t (id,a) values (416,31);
+insert into t (id,a) values (416,32);
+insert into t (id,a) values (416,33);
+insert into t (id,a) values (416,34);
+insert into t (id,a) values (416,35);
+insert into t (id,a) values (416,36);
+insert into t (id,a) values (416,37);
+insert into t (id,a) values (416,38);
+insert into t (id,a) values (416,39);
+insert into t (id,a) values (416,40);
+insert into t (id,a) values (416,41);
+insert into t (id,a) values (416,42);
+insert into t (id,a) values (416,43);
+insert into t (id,a) values (416,44);
+insert into t (id,a) values (416,45);
+insert into t (id,a) values (416,46);
+insert into t (id,a) values (416,47);
+insert into t (id,a) values (416,48);
+insert into t (id,a) values (416,49);
+insert into t (id,a) values (416,50);
+insert into t (id,a) values (416,51);
+insert into t (id,a) values (416,52);
+insert into t (id,a) values (416,53);
+insert into t (id,a) values (416,54);
+insert into t (id,a) values (416,55);
+insert into t (id,a) values (416,56);
+insert into t (id,a) values (416,57);
+insert into t (id,a) values (416,58);
+insert into t (id,a) values (416,59);
+insert into t (id,a) values (416,60);
+insert into t (id,a) values (416,61);
+insert into t (id,a) values (416,62);
+insert into t (id,a) values (416,63);
+insert into t (id,a) values (416,64);
+insert into t (id,a) values (416,65);
+insert into t (id,a) values (416,66);
+insert into t (id,a) values (416,67);
+insert into t (id,a) values (416,68);
+insert into t (id,a) values (416,69);
+insert into t (id,a) values (416,70);
+insert into t (id,a) values (416,71);
+insert into t (id,a) values (416,72);
+insert into t (id,a) values (416,73);
+insert into t (id,a) values (416,74);
+insert into t (id,a) values (416,75);
+insert into t (id,a) values (416,76);
+insert into t (id,a) values (416,77);
+insert into t (id,a) values (416,78);
+insert into t (id,a) values (416,79);
+insert into t (id,a) values (416,80);
+insert into t (id,a) values (416,81);
+insert into t (id,a) values (416,82);
+insert into t (id,a) values (416,83);
+insert into t (id,a) values (416,84);
+insert into t (id,a) values (416,85);
+insert into t (id,a) values (416,86);
+insert into t (id,a) values (416,87);
+insert into t (id,a) values (416,88);
+insert into t (id,a) values (416,89);
+insert into t (id,a) values (416,90);
+insert into t (id,a) values (416,91);
+insert into t (id,a) values (416,92);
+insert into t (id,a) values (416,93);
+insert into t (id,a) values (416,94);
+insert into t (id,a) values (416,95);
+insert into t (id,a) values (416,96);
+insert into t (id,a) values (416,97);
+insert into t (id,a) values (416,98);
+insert into t (id,a) values (416,99);
+insert into t (id,a) values (417,0);
+insert into t (id,a) values (417,1);
+insert into t (id,a) values (417,2);
+insert into t (id,a) values (417,3);
+insert into t (id,a) values (417,4);
+insert into t (id,a) values (417,5);
+insert into t (id,a) values (417,6);
+insert into t (id,a) values (417,7);
+insert into t (id,a) values (417,8);
+insert into t (id,a) values (417,9);
+insert into t (id,a) values (417,10);
+insert into t (id,a) values (417,11);
+insert into t (id,a) values (417,12);
+insert into t (id,a) values (417,13);
+insert into t (id,a) values (417,14);
+insert into t (id,a) values (417,15);
+insert into t (id,a) values (417,16);
+insert into t (id,a) values (417,17);
+insert into t (id,a) values (417,18);
+insert into t (id,a) values (417,19);
+insert into t (id,a) values (417,20);
+insert into t (id,a) values (417,21);
+insert into t (id,a) values (417,22);
+insert into t (id,a) values (417,23);
+insert into t (id,a) values (417,24);
+insert into t (id,a) values (417,25);
+insert into t (id,a) values (417,26);
+insert into t (id,a) values (417,27);
+insert into t (id,a) values (417,28);
+insert into t (id,a) values (417,29);
+insert into t (id,a) values (417,30);
+insert into t (id,a) values (417,31);
+insert into t (id,a) values (417,32);
+insert into t (id,a) values (417,33);
+insert into t (id,a) values (417,34);
+insert into t (id,a) values (417,35);
+insert into t (id,a) values (417,36);
+insert into t (id,a) values (417,37);
+insert into t (id,a) values (417,38);
+insert into t (id,a) values (417,39);
+insert into t (id,a) values (417,40);
+insert into t (id,a) values (417,41);
+insert into t (id,a) values (417,42);
+insert into t (id,a) values (417,43);
+insert into t (id,a) values (417,44);
+insert into t (id,a) values (417,45);
+insert into t (id,a) values (417,46);
+insert into t (id,a) values (417,47);
+insert into t (id,a) values (417,48);
+insert into t (id,a) values (417,49);
+insert into t (id,a) values (417,50);
+insert into t (id,a) values (417,51);
+insert into t (id,a) values (417,52);
+insert into t (id,a) values (417,53);
+insert into t (id,a) values (417,54);
+insert into t (id,a) values (417,55);
+insert into t (id,a) values (417,56);
+insert into t (id,a) values (417,57);
+insert into t (id,a) values (417,58);
+insert into t (id,a) values (417,59);
+insert into t (id,a) values (417,60);
+insert into t (id,a) values (417,61);
+insert into t (id,a) values (417,62);
+insert into t (id,a) values (417,63);
+insert into t (id,a) values (417,64);
+insert into t (id,a) values (417,65);
+insert into t (id,a) values (417,66);
+insert into t (id,a) values (417,67);
+insert into t (id,a) values (417,68);
+insert into t (id,a) values (417,69);
+insert into t (id,a) values (417,70);
+insert into t (id,a) values (417,71);
+insert into t (id,a) values (417,72);
+insert into t (id,a) values (417,73);
+insert into t (id,a) values (417,74);
+insert into t (id,a) values (417,75);
+insert into t (id,a) values (417,76);
+insert into t (id,a) values (417,77);
+insert into t (id,a) values (417,78);
+insert into t (id,a) values (417,79);
+insert into t (id,a) values (417,80);
+insert into t (id,a) values (417,81);
+insert into t (id,a) values (417,82);
+insert into t (id,a) values (417,83);
+insert into t (id,a) values (417,84);
+insert into t (id,a) values (417,85);
+insert into t (id,a) values (417,86);
+insert into t (id,a) values (417,87);
+insert into t (id,a) values (417,88);
+insert into t (id,a) values (417,89);
+insert into t (id,a) values (417,90);
+insert into t (id,a) values (417,91);
+insert into t (id,a) values (417,92);
+insert into t (id,a) values (417,93);
+insert into t (id,a) values (417,94);
+insert into t (id,a) values (417,95);
+insert into t (id,a) values (417,96);
+insert into t (id,a) values (417,97);
+insert into t (id,a) values (417,98);
+insert into t (id,a) values (417,99);
+insert into t (id,a) values (418,0);
+insert into t (id,a) values (418,1);
+insert into t (id,a) values (418,2);
+insert into t (id,a) values (418,3);
+insert into t (id,a) values (418,4);
+insert into t (id,a) values (418,5);
+insert into t (id,a) values (418,6);
+insert into t (id,a) values (418,7);
+insert into t (id,a) values (418,8);
+insert into t (id,a) values (418,9);
+insert into t (id,a) values (418,10);
+insert into t (id,a) values (418,11);
+insert into t (id,a) values (418,12);
+insert into t (id,a) values (418,13);
+insert into t (id,a) values (418,14);
+insert into t (id,a) values (418,15);
+insert into t (id,a) values (418,16);
+insert into t (id,a) values (418,17);
+insert into t (id,a) values (418,18);
+insert into t (id,a) values (418,19);
+insert into t (id,a) values (418,20);
+insert into t (id,a) values (418,21);
+insert into t (id,a) values (418,22);
+insert into t (id,a) values (418,23);
+insert into t (id,a) values (418,24);
+insert into t (id,a) values (418,25);
+insert into t (id,a) values (418,26);
+insert into t (id,a) values (418,27);
+insert into t (id,a) values (418,28);
+insert into t (id,a) values (418,29);
+insert into t (id,a) values (418,30);
+insert into t (id,a) values (418,31);
+insert into t (id,a) values (418,32);
+insert into t (id,a) values (418,33);
+insert into t (id,a) values (418,34);
+insert into t (id,a) values (418,35);
+insert into t (id,a) values (418,36);
+insert into t (id,a) values (418,37);
+insert into t (id,a) values (418,38);
+insert into t (id,a) values (418,39);
+insert into t (id,a) values (418,40);
+insert into t (id,a) values (418,41);
+insert into t (id,a) values (418,42);
+insert into t (id,a) values (418,43);
+insert into t (id,a) values (418,44);
+insert into t (id,a) values (418,45);
+insert into t (id,a) values (418,46);
+insert into t (id,a) values (418,47);
+insert into t (id,a) values (418,48);
+insert into t (id,a) values (418,49);
+insert into t (id,a) values (418,50);
+insert into t (id,a) values (418,51);
+insert into t (id,a) values (418,52);
+insert into t (id,a) values (418,53);
+insert into t (id,a) values (418,54);
+insert into t (id,a) values (418,55);
+insert into t (id,a) values (418,56);
+insert into t (id,a) values (418,57);
+insert into t (id,a) values (418,58);
+insert into t (id,a) values (418,59);
+insert into t (id,a) values (418,60);
+insert into t (id,a) values (418,61);
+insert into t (id,a) values (418,62);
+insert into t (id,a) values (418,63);
+insert into t (id,a) values (418,64);
+insert into t (id,a) values (418,65);
+insert into t (id,a) values (418,66);
+insert into t (id,a) values (418,67);
+insert into t (id,a) values (418,68);
+insert into t (id,a) values (418,69);
+insert into t (id,a) values (418,70);
+insert into t (id,a) values (418,71);
+insert into t (id,a) values (418,72);
+insert into t (id,a) values (418,73);
+insert into t (id,a) values (418,74);
+insert into t (id,a) values (418,75);
+insert into t (id,a) values (418,76);
+insert into t (id,a) values (418,77);
+insert into t (id,a) values (418,78);
+insert into t (id,a) values (418,79);
+insert into t (id,a) values (418,80);
+insert into t (id,a) values (418,81);
+insert into t (id,a) values (418,82);
+insert into t (id,a) values (418,83);
+insert into t (id,a) values (418,84);
+insert into t (id,a) values (418,85);
+insert into t (id,a) values (418,86);
+insert into t (id,a) values (418,87);
+insert into t (id,a) values (418,88);
+insert into t (id,a) values (418,89);
+insert into t (id,a) values (418,90);
+insert into t (id,a) values (418,91);
+insert into t (id,a) values (418,92);
+insert into t (id,a) values (418,93);
+insert into t (id,a) values (418,94);
+insert into t (id,a) values (418,95);
+insert into t (id,a) values (418,96);
+insert into t (id,a) values (418,97);
+insert into t (id,a) values (418,98);
+insert into t (id,a) values (418,99);
+insert into t (id,a) values (419,0);
+insert into t (id,a) values (419,1);
+insert into t (id,a) values (419,2);
+insert into t (id,a) values (419,3);
+insert into t (id,a) values (419,4);
+insert into t (id,a) values (419,5);
+insert into t (id,a) values (419,6);
+insert into t (id,a) values (419,7);
+insert into t (id,a) values (419,8);
+insert into t (id,a) values (419,9);
+insert into t (id,a) values (419,10);
+insert into t (id,a) values (419,11);
+insert into t (id,a) values (419,12);
+insert into t (id,a) values (419,13);
+insert into t (id,a) values (419,14);
+insert into t (id,a) values (419,15);
+insert into t (id,a) values (419,16);
+insert into t (id,a) values (419,17);
+insert into t (id,a) values (419,18);
+insert into t (id,a) values (419,19);
+insert into t (id,a) values (419,20);
+insert into t (id,a) values (419,21);
+insert into t (id,a) values (419,22);
+insert into t (id,a) values (419,23);
+insert into t (id,a) values (419,24);
+insert into t (id,a) values (419,25);
+insert into t (id,a) values (419,26);
+insert into t (id,a) values (419,27);
+insert into t (id,a) values (419,28);
+insert into t (id,a) values (419,29);
+insert into t (id,a) values (419,30);
+insert into t (id,a) values (419,31);
+insert into t (id,a) values (419,32);
+insert into t (id,a) values (419,33);
+insert into t (id,a) values (419,34);
+insert into t (id,a) values (419,35);
+insert into t (id,a) values (419,36);
+insert into t (id,a) values (419,37);
+insert into t (id,a) values (419,38);
+insert into t (id,a) values (419,39);
+insert into t (id,a) values (419,40);
+insert into t (id,a) values (419,41);
+insert into t (id,a) values (419,42);
+insert into t (id,a) values (419,43);
+insert into t (id,a) values (419,44);
+insert into t (id,a) values (419,45);
+insert into t (id,a) values (419,46);
+insert into t (id,a) values (419,47);
+insert into t (id,a) values (419,48);
+insert into t (id,a) values (419,49);
+insert into t (id,a) values (419,50);
+insert into t (id,a) values (419,51);
+insert into t (id,a) values (419,52);
+insert into t (id,a) values (419,53);
+insert into t (id,a) values (419,54);
+insert into t (id,a) values (419,55);
+insert into t (id,a) values (419,56);
+insert into t (id,a) values (419,57);
+insert into t (id,a) values (419,58);
+insert into t (id,a) values (419,59);
+insert into t (id,a) values (419,60);
+insert into t (id,a) values (419,61);
+insert into t (id,a) values (419,62);
+insert into t (id,a) values (419,63);
+insert into t (id,a) values (419,64);
+insert into t (id,a) values (419,65);
+insert into t (id,a) values (419,66);
+insert into t (id,a) values (419,67);
+insert into t (id,a) values (419,68);
+insert into t (id,a) values (419,69);
+insert into t (id,a) values (419,70);
+insert into t (id,a) values (419,71);
+insert into t (id,a) values (419,72);
+insert into t (id,a) values (419,73);
+insert into t (id,a) values (419,74);
+insert into t (id,a) values (419,75);
+insert into t (id,a) values (419,76);
+insert into t (id,a) values (419,77);
+insert into t (id,a) values (419,78);
+insert into t (id,a) values (419,79);
+insert into t (id,a) values (419,80);
+insert into t (id,a) values (419,81);
+insert into t (id,a) values (419,82);
+insert into t (id,a) values (419,83);
+insert into t (id,a) values (419,84);
+insert into t (id,a) values (419,85);
+insert into t (id,a) values (419,86);
+insert into t (id,a) values (419,87);
+insert into t (id,a) values (419,88);
+insert into t (id,a) values (419,89);
+insert into t (id,a) values (419,90);
+insert into t (id,a) values (419,91);
+insert into t (id,a) values (419,92);
+insert into t (id,a) values (419,93);
+insert into t (id,a) values (419,94);
+insert into t (id,a) values (419,95);
+insert into t (id,a) values (419,96);
+insert into t (id,a) values (419,97);
+insert into t (id,a) values (419,98);
+insert into t (id,a) values (419,99);
+insert into t (id,a) values (420,0);
+insert into t (id,a) values (420,1);
+insert into t (id,a) values (420,2);
+insert into t (id,a) values (420,3);
+insert into t (id,a) values (420,4);
+insert into t (id,a) values (420,5);
+insert into t (id,a) values (420,6);
+insert into t (id,a) values (420,7);
+insert into t (id,a) values (420,8);
+insert into t (id,a) values (420,9);
+insert into t (id,a) values (420,10);
+insert into t (id,a) values (420,11);
+insert into t (id,a) values (420,12);
+insert into t (id,a) values (420,13);
+insert into t (id,a) values (420,14);
+insert into t (id,a) values (420,15);
+insert into t (id,a) values (420,16);
+insert into t (id,a) values (420,17);
+insert into t (id,a) values (420,18);
+insert into t (id,a) values (420,19);
+insert into t (id,a) values (420,20);
+insert into t (id,a) values (420,21);
+insert into t (id,a) values (420,22);
+insert into t (id,a) values (420,23);
+insert into t (id,a) values (420,24);
+insert into t (id,a) values (420,25);
+insert into t (id,a) values (420,26);
+insert into t (id,a) values (420,27);
+insert into t (id,a) values (420,28);
+insert into t (id,a) values (420,29);
+insert into t (id,a) values (420,30);
+insert into t (id,a) values (420,31);
+insert into t (id,a) values (420,32);
+insert into t (id,a) values (420,33);
+insert into t (id,a) values (420,34);
+insert into t (id,a) values (420,35);
+insert into t (id,a) values (420,36);
+insert into t (id,a) values (420,37);
+insert into t (id,a) values (420,38);
+insert into t (id,a) values (420,39);
+insert into t (id,a) values (420,40);
+insert into t (id,a) values (420,41);
+insert into t (id,a) values (420,42);
+insert into t (id,a) values (420,43);
+insert into t (id,a) values (420,44);
+insert into t (id,a) values (420,45);
+insert into t (id,a) values (420,46);
+insert into t (id,a) values (420,47);
+insert into t (id,a) values (420,48);
+insert into t (id,a) values (420,49);
+insert into t (id,a) values (420,50);
+insert into t (id,a) values (420,51);
+insert into t (id,a) values (420,52);
+insert into t (id,a) values (420,53);
+insert into t (id,a) values (420,54);
+insert into t (id,a) values (420,55);
+insert into t (id,a) values (420,56);
+insert into t (id,a) values (420,57);
+insert into t (id,a) values (420,58);
+insert into t (id,a) values (420,59);
+insert into t (id,a) values (420,60);
+insert into t (id,a) values (420,61);
+insert into t (id,a) values (420,62);
+insert into t (id,a) values (420,63);
+insert into t (id,a) values (420,64);
+insert into t (id,a) values (420,65);
+insert into t (id,a) values (420,66);
+insert into t (id,a) values (420,67);
+insert into t (id,a) values (420,68);
+insert into t (id,a) values (420,69);
+insert into t (id,a) values (420,70);
+insert into t (id,a) values (420,71);
+insert into t (id,a) values (420,72);
+insert into t (id,a) values (420,73);
+insert into t (id,a) values (420,74);
+insert into t (id,a) values (420,75);
+insert into t (id,a) values (420,76);
+insert into t (id,a) values (420,77);
+insert into t (id,a) values (420,78);
+insert into t (id,a) values (420,79);
+insert into t (id,a) values (420,80);
+insert into t (id,a) values (420,81);
+insert into t (id,a) values (420,82);
+insert into t (id,a) values (420,83);
+insert into t (id,a) values (420,84);
+insert into t (id,a) values (420,85);
+insert into t (id,a) values (420,86);
+insert into t (id,a) values (420,87);
+insert into t (id,a) values (420,88);
+insert into t (id,a) values (420,89);
+insert into t (id,a) values (420,90);
+insert into t (id,a) values (420,91);
+insert into t (id,a) values (420,92);
+insert into t (id,a) values (420,93);
+insert into t (id,a) values (420,94);
+insert into t (id,a) values (420,95);
+insert into t (id,a) values (420,96);
+insert into t (id,a) values (420,97);
+insert into t (id,a) values (420,98);
+insert into t (id,a) values (420,99);
+insert into t (id,a) values (421,0);
+insert into t (id,a) values (421,1);
+insert into t (id,a) values (421,2);
+insert into t (id,a) values (421,3);
+insert into t (id,a) values (421,4);
+insert into t (id,a) values (421,5);
+insert into t (id,a) values (421,6);
+insert into t (id,a) values (421,7);
+insert into t (id,a) values (421,8);
+insert into t (id,a) values (421,9);
+insert into t (id,a) values (421,10);
+insert into t (id,a) values (421,11);
+insert into t (id,a) values (421,12);
+insert into t (id,a) values (421,13);
+insert into t (id,a) values (421,14);
+insert into t (id,a) values (421,15);
+insert into t (id,a) values (421,16);
+insert into t (id,a) values (421,17);
+insert into t (id,a) values (421,18);
+insert into t (id,a) values (421,19);
+insert into t (id,a) values (421,20);
+insert into t (id,a) values (421,21);
+insert into t (id,a) values (421,22);
+insert into t (id,a) values (421,23);
+insert into t (id,a) values (421,24);
+insert into t (id,a) values (421,25);
+insert into t (id,a) values (421,26);
+insert into t (id,a) values (421,27);
+insert into t (id,a) values (421,28);
+insert into t (id,a) values (421,29);
+insert into t (id,a) values (421,30);
+insert into t (id,a) values (421,31);
+insert into t (id,a) values (421,32);
+insert into t (id,a) values (421,33);
+insert into t (id,a) values (421,34);
+insert into t (id,a) values (421,35);
+insert into t (id,a) values (421,36);
+insert into t (id,a) values (421,37);
+insert into t (id,a) values (421,38);
+insert into t (id,a) values (421,39);
+insert into t (id,a) values (421,40);
+insert into t (id,a) values (421,41);
+insert into t (id,a) values (421,42);
+insert into t (id,a) values (421,43);
+insert into t (id,a) values (421,44);
+insert into t (id,a) values (421,45);
+insert into t (id,a) values (421,46);
+insert into t (id,a) values (421,47);
+insert into t (id,a) values (421,48);
+insert into t (id,a) values (421,49);
+insert into t (id,a) values (421,50);
+insert into t (id,a) values (421,51);
+insert into t (id,a) values (421,52);
+insert into t (id,a) values (421,53);
+insert into t (id,a) values (421,54);
+insert into t (id,a) values (421,55);
+insert into t (id,a) values (421,56);
+insert into t (id,a) values (421,57);
+insert into t (id,a) values (421,58);
+insert into t (id,a) values (421,59);
+insert into t (id,a) values (421,60);
+insert into t (id,a) values (421,61);
+insert into t (id,a) values (421,62);
+insert into t (id,a) values (421,63);
+insert into t (id,a) values (421,64);
+insert into t (id,a) values (421,65);
+insert into t (id,a) values (421,66);
+insert into t (id,a) values (421,67);
+insert into t (id,a) values (421,68);
+insert into t (id,a) values (421,69);
+insert into t (id,a) values (421,70);
+insert into t (id,a) values (421,71);
+insert into t (id,a) values (421,72);
+insert into t (id,a) values (421,73);
+insert into t (id,a) values (421,74);
+insert into t (id,a) values (421,75);
+insert into t (id,a) values (421,76);
+insert into t (id,a) values (421,77);
+insert into t (id,a) values (421,78);
+insert into t (id,a) values (421,79);
+insert into t (id,a) values (421,80);
+insert into t (id,a) values (421,81);
+insert into t (id,a) values (421,82);
+insert into t (id,a) values (421,83);
+insert into t (id,a) values (421,84);
+insert into t (id,a) values (421,85);
+insert into t (id,a) values (421,86);
+insert into t (id,a) values (421,87);
+insert into t (id,a) values (421,88);
+insert into t (id,a) values (421,89);
+insert into t (id,a) values (421,90);
+insert into t (id,a) values (421,91);
+insert into t (id,a) values (421,92);
+insert into t (id,a) values (421,93);
+insert into t (id,a) values (421,94);
+insert into t (id,a) values (421,95);
+insert into t (id,a) values (421,96);
+insert into t (id,a) values (421,97);
+insert into t (id,a) values (421,98);
+insert into t (id,a) values (421,99);
+insert into t (id,a) values (422,0);
+insert into t (id,a) values (422,1);
+insert into t (id,a) values (422,2);
+insert into t (id,a) values (422,3);
+insert into t (id,a) values (422,4);
+insert into t (id,a) values (422,5);
+insert into t (id,a) values (422,6);
+insert into t (id,a) values (422,7);
+insert into t (id,a) values (422,8);
+insert into t (id,a) values (422,9);
+insert into t (id,a) values (422,10);
+insert into t (id,a) values (422,11);
+insert into t (id,a) values (422,12);
+insert into t (id,a) values (422,13);
+insert into t (id,a) values (422,14);
+insert into t (id,a) values (422,15);
+insert into t (id,a) values (422,16);
+insert into t (id,a) values (422,17);
+insert into t (id,a) values (422,18);
+insert into t (id,a) values (422,19);
+insert into t (id,a) values (422,20);
+insert into t (id,a) values (422,21);
+insert into t (id,a) values (422,22);
+insert into t (id,a) values (422,23);
+insert into t (id,a) values (422,24);
+insert into t (id,a) values (422,25);
+insert into t (id,a) values (422,26);
+insert into t (id,a) values (422,27);
+insert into t (id,a) values (422,28);
+insert into t (id,a) values (422,29);
+insert into t (id,a) values (422,30);
+insert into t (id,a) values (422,31);
+insert into t (id,a) values (422,32);
+insert into t (id,a) values (422,33);
+insert into t (id,a) values (422,34);
+insert into t (id,a) values (422,35);
+insert into t (id,a) values (422,36);
+insert into t (id,a) values (422,37);
+insert into t (id,a) values (422,38);
+insert into t (id,a) values (422,39);
+insert into t (id,a) values (422,40);
+insert into t (id,a) values (422,41);
+insert into t (id,a) values (422,42);
+insert into t (id,a) values (422,43);
+insert into t (id,a) values (422,44);
+insert into t (id,a) values (422,45);
+insert into t (id,a) values (422,46);
+insert into t (id,a) values (422,47);
+insert into t (id,a) values (422,48);
+insert into t (id,a) values (422,49);
+insert into t (id,a) values (422,50);
+insert into t (id,a) values (422,51);
+insert into t (id,a) values (422,52);
+insert into t (id,a) values (422,53);
+insert into t (id,a) values (422,54);
+insert into t (id,a) values (422,55);
+insert into t (id,a) values (422,56);
+insert into t (id,a) values (422,57);
+insert into t (id,a) values (422,58);
+insert into t (id,a) values (422,59);
+insert into t (id,a) values (422,60);
+insert into t (id,a) values (422,61);
+insert into t (id,a) values (422,62);
+insert into t (id,a) values (422,63);
+insert into t (id,a) values (422,64);
+insert into t (id,a) values (422,65);
+insert into t (id,a) values (422,66);
+insert into t (id,a) values (422,67);
+insert into t (id,a) values (422,68);
+insert into t (id,a) values (422,69);
+insert into t (id,a) values (422,70);
+insert into t (id,a) values (422,71);
+insert into t (id,a) values (422,72);
+insert into t (id,a) values (422,73);
+insert into t (id,a) values (422,74);
+insert into t (id,a) values (422,75);
+insert into t (id,a) values (422,76);
+insert into t (id,a) values (422,77);
+insert into t (id,a) values (422,78);
+insert into t (id,a) values (422,79);
+insert into t (id,a) values (422,80);
+insert into t (id,a) values (422,81);
+insert into t (id,a) values (422,82);
+insert into t (id,a) values (422,83);
+insert into t (id,a) values (422,84);
+insert into t (id,a) values (422,85);
+insert into t (id,a) values (422,86);
+insert into t (id,a) values (422,87);
+insert into t (id,a) values (422,88);
+insert into t (id,a) values (422,89);
+insert into t (id,a) values (422,90);
+insert into t (id,a) values (422,91);
+insert into t (id,a) values (422,92);
+insert into t (id,a) values (422,93);
+insert into t (id,a) values (422,94);
+insert into t (id,a) values (422,95);
+insert into t (id,a) values (422,96);
+insert into t (id,a) values (422,97);
+insert into t (id,a) values (422,98);
+insert into t (id,a) values (422,99);
+insert into t (id,a) values (423,0);
+insert into t (id,a) values (423,1);
+insert into t (id,a) values (423,2);
+insert into t (id,a) values (423,3);
+insert into t (id,a) values (423,4);
+insert into t (id,a) values (423,5);
+insert into t (id,a) values (423,6);
+insert into t (id,a) values (423,7);
+insert into t (id,a) values (423,8);
+insert into t (id,a) values (423,9);
+insert into t (id,a) values (423,10);
+insert into t (id,a) values (423,11);
+insert into t (id,a) values (423,12);
+insert into t (id,a) values (423,13);
+insert into t (id,a) values (423,14);
+insert into t (id,a) values (423,15);
+insert into t (id,a) values (423,16);
+insert into t (id,a) values (423,17);
+insert into t (id,a) values (423,18);
+insert into t (id,a) values (423,19);
+insert into t (id,a) values (423,20);
+insert into t (id,a) values (423,21);
+insert into t (id,a) values (423,22);
+insert into t (id,a) values (423,23);
+insert into t (id,a) values (423,24);
+insert into t (id,a) values (423,25);
+insert into t (id,a) values (423,26);
+insert into t (id,a) values (423,27);
+insert into t (id,a) values (423,28);
+insert into t (id,a) values (423,29);
+insert into t (id,a) values (423,30);
+insert into t (id,a) values (423,31);
+insert into t (id,a) values (423,32);
+insert into t (id,a) values (423,33);
+insert into t (id,a) values (423,34);
+insert into t (id,a) values (423,35);
+insert into t (id,a) values (423,36);
+insert into t (id,a) values (423,37);
+insert into t (id,a) values (423,38);
+insert into t (id,a) values (423,39);
+insert into t (id,a) values (423,40);
+insert into t (id,a) values (423,41);
+insert into t (id,a) values (423,42);
+insert into t (id,a) values (423,43);
+insert into t (id,a) values (423,44);
+insert into t (id,a) values (423,45);
+insert into t (id,a) values (423,46);
+insert into t (id,a) values (423,47);
+insert into t (id,a) values (423,48);
+insert into t (id,a) values (423,49);
+insert into t (id,a) values (423,50);
+insert into t (id,a) values (423,51);
+insert into t (id,a) values (423,52);
+insert into t (id,a) values (423,53);
+insert into t (id,a) values (423,54);
+insert into t (id,a) values (423,55);
+insert into t (id,a) values (423,56);
+insert into t (id,a) values (423,57);
+insert into t (id,a) values (423,58);
+insert into t (id,a) values (423,59);
+insert into t (id,a) values (423,60);
+insert into t (id,a) values (423,61);
+insert into t (id,a) values (423,62);
+insert into t (id,a) values (423,63);
+insert into t (id,a) values (423,64);
+insert into t (id,a) values (423,65);
+insert into t (id,a) values (423,66);
+insert into t (id,a) values (423,67);
+insert into t (id,a) values (423,68);
+insert into t (id,a) values (423,69);
+insert into t (id,a) values (423,70);
+insert into t (id,a) values (423,71);
+insert into t (id,a) values (423,72);
+insert into t (id,a) values (423,73);
+insert into t (id,a) values (423,74);
+insert into t (id,a) values (423,75);
+insert into t (id,a) values (423,76);
+insert into t (id,a) values (423,77);
+insert into t (id,a) values (423,78);
+insert into t (id,a) values (423,79);
+insert into t (id,a) values (423,80);
+insert into t (id,a) values (423,81);
+insert into t (id,a) values (423,82);
+insert into t (id,a) values (423,83);
+insert into t (id,a) values (423,84);
+insert into t (id,a) values (423,85);
+insert into t (id,a) values (423,86);
+insert into t (id,a) values (423,87);
+insert into t (id,a) values (423,88);
+insert into t (id,a) values (423,89);
+insert into t (id,a) values (423,90);
+insert into t (id,a) values (423,91);
+insert into t (id,a) values (423,92);
+insert into t (id,a) values (423,93);
+insert into t (id,a) values (423,94);
+insert into t (id,a) values (423,95);
+insert into t (id,a) values (423,96);
+insert into t (id,a) values (423,97);
+insert into t (id,a) values (423,98);
+insert into t (id,a) values (423,99);
+insert into t (id,a) values (424,0);
+insert into t (id,a) values (424,1);
+insert into t (id,a) values (424,2);
+insert into t (id,a) values (424,3);
+insert into t (id,a) values (424,4);
+insert into t (id,a) values (424,5);
+insert into t (id,a) values (424,6);
+insert into t (id,a) values (424,7);
+insert into t (id,a) values (424,8);
+insert into t (id,a) values (424,9);
+insert into t (id,a) values (424,10);
+insert into t (id,a) values (424,11);
+insert into t (id,a) values (424,12);
+insert into t (id,a) values (424,13);
+insert into t (id,a) values (424,14);
+insert into t (id,a) values (424,15);
+insert into t (id,a) values (424,16);
+insert into t (id,a) values (424,17);
+insert into t (id,a) values (424,18);
+insert into t (id,a) values (424,19);
+insert into t (id,a) values (424,20);
+insert into t (id,a) values (424,21);
+insert into t (id,a) values (424,22);
+insert into t (id,a) values (424,23);
+insert into t (id,a) values (424,24);
+insert into t (id,a) values (424,25);
+insert into t (id,a) values (424,26);
+insert into t (id,a) values (424,27);
+insert into t (id,a) values (424,28);
+insert into t (id,a) values (424,29);
+insert into t (id,a) values (424,30);
+insert into t (id,a) values (424,31);
+insert into t (id,a) values (424,32);
+insert into t (id,a) values (424,33);
+insert into t (id,a) values (424,34);
+insert into t (id,a) values (424,35);
+insert into t (id,a) values (424,36);
+insert into t (id,a) values (424,37);
+insert into t (id,a) values (424,38);
+insert into t (id,a) values (424,39);
+insert into t (id,a) values (424,40);
+insert into t (id,a) values (424,41);
+insert into t (id,a) values (424,42);
+insert into t (id,a) values (424,43);
+insert into t (id,a) values (424,44);
+insert into t (id,a) values (424,45);
+insert into t (id,a) values (424,46);
+insert into t (id,a) values (424,47);
+insert into t (id,a) values (424,48);
+insert into t (id,a) values (424,49);
+insert into t (id,a) values (424,50);
+insert into t (id,a) values (424,51);
+insert into t (id,a) values (424,52);
+insert into t (id,a) values (424,53);
+insert into t (id,a) values (424,54);
+insert into t (id,a) values (424,55);
+insert into t (id,a) values (424,56);
+insert into t (id,a) values (424,57);
+insert into t (id,a) values (424,58);
+insert into t (id,a) values (424,59);
+insert into t (id,a) values (424,60);
+insert into t (id,a) values (424,61);
+insert into t (id,a) values (424,62);
+insert into t (id,a) values (424,63);
+insert into t (id,a) values (424,64);
+insert into t (id,a) values (424,65);
+insert into t (id,a) values (424,66);
+insert into t (id,a) values (424,67);
+insert into t (id,a) values (424,68);
+insert into t (id,a) values (424,69);
+insert into t (id,a) values (424,70);
+insert into t (id,a) values (424,71);
+insert into t (id,a) values (424,72);
+insert into t (id,a) values (424,73);
+insert into t (id,a) values (424,74);
+insert into t (id,a) values (424,75);
+insert into t (id,a) values (424,76);
+insert into t (id,a) values (424,77);
+insert into t (id,a) values (424,78);
+insert into t (id,a) values (424,79);
+insert into t (id,a) values (424,80);
+insert into t (id,a) values (424,81);
+insert into t (id,a) values (424,82);
+insert into t (id,a) values (424,83);
+insert into t (id,a) values (424,84);
+insert into t (id,a) values (424,85);
+insert into t (id,a) values (424,86);
+insert into t (id,a) values (424,87);
+insert into t (id,a) values (424,88);
+insert into t (id,a) values (424,89);
+insert into t (id,a) values (424,90);
+insert into t (id,a) values (424,91);
+insert into t (id,a) values (424,92);
+insert into t (id,a) values (424,93);
+insert into t (id,a) values (424,94);
+insert into t (id,a) values (424,95);
+insert into t (id,a) values (424,96);
+insert into t (id,a) values (424,97);
+insert into t (id,a) values (424,98);
+insert into t (id,a) values (424,99);
+insert into t (id,a) values (425,0);
+insert into t (id,a) values (425,1);
+insert into t (id,a) values (425,2);
+insert into t (id,a) values (425,3);
+insert into t (id,a) values (425,4);
+insert into t (id,a) values (425,5);
+insert into t (id,a) values (425,6);
+insert into t (id,a) values (425,7);
+insert into t (id,a) values (425,8);
+insert into t (id,a) values (425,9);
+insert into t (id,a) values (425,10);
+insert into t (id,a) values (425,11);
+insert into t (id,a) values (425,12);
+insert into t (id,a) values (425,13);
+insert into t (id,a) values (425,14);
+insert into t (id,a) values (425,15);
+insert into t (id,a) values (425,16);
+insert into t (id,a) values (425,17);
+insert into t (id,a) values (425,18);
+insert into t (id,a) values (425,19);
+insert into t (id,a) values (425,20);
+insert into t (id,a) values (425,21);
+insert into t (id,a) values (425,22);
+insert into t (id,a) values (425,23);
+insert into t (id,a) values (425,24);
+insert into t (id,a) values (425,25);
+insert into t (id,a) values (425,26);
+insert into t (id,a) values (425,27);
+insert into t (id,a) values (425,28);
+insert into t (id,a) values (425,29);
+insert into t (id,a) values (425,30);
+insert into t (id,a) values (425,31);
+insert into t (id,a) values (425,32);
+insert into t (id,a) values (425,33);
+insert into t (id,a) values (425,34);
+insert into t (id,a) values (425,35);
+insert into t (id,a) values (425,36);
+insert into t (id,a) values (425,37);
+insert into t (id,a) values (425,38);
+insert into t (id,a) values (425,39);
+insert into t (id,a) values (425,40);
+insert into t (id,a) values (425,41);
+insert into t (id,a) values (425,42);
+insert into t (id,a) values (425,43);
+insert into t (id,a) values (425,44);
+insert into t (id,a) values (425,45);
+insert into t (id,a) values (425,46);
+insert into t (id,a) values (425,47);
+insert into t (id,a) values (425,48);
+insert into t (id,a) values (425,49);
+insert into t (id,a) values (425,50);
+insert into t (id,a) values (425,51);
+insert into t (id,a) values (425,52);
+insert into t (id,a) values (425,53);
+insert into t (id,a) values (425,54);
+insert into t (id,a) values (425,55);
+insert into t (id,a) values (425,56);
+insert into t (id,a) values (425,57);
+insert into t (id,a) values (425,58);
+insert into t (id,a) values (425,59);
+insert into t (id,a) values (425,60);
+insert into t (id,a) values (425,61);
+insert into t (id,a) values (425,62);
+insert into t (id,a) values (425,63);
+insert into t (id,a) values (425,64);
+insert into t (id,a) values (425,65);
+insert into t (id,a) values (425,66);
+insert into t (id,a) values (425,67);
+insert into t (id,a) values (425,68);
+insert into t (id,a) values (425,69);
+insert into t (id,a) values (425,70);
+insert into t (id,a) values (425,71);
+insert into t (id,a) values (425,72);
+insert into t (id,a) values (425,73);
+insert into t (id,a) values (425,74);
+insert into t (id,a) values (425,75);
+insert into t (id,a) values (425,76);
+insert into t (id,a) values (425,77);
+insert into t (id,a) values (425,78);
+insert into t (id,a) values (425,79);
+insert into t (id,a) values (425,80);
+insert into t (id,a) values (425,81);
+insert into t (id,a) values (425,82);
+insert into t (id,a) values (425,83);
+insert into t (id,a) values (425,84);
+insert into t (id,a) values (425,85);
+insert into t (id,a) values (425,86);
+insert into t (id,a) values (425,87);
+insert into t (id,a) values (425,88);
+insert into t (id,a) values (425,89);
+insert into t (id,a) values (425,90);
+insert into t (id,a) values (425,91);
+insert into t (id,a) values (425,92);
+insert into t (id,a) values (425,93);
+insert into t (id,a) values (425,94);
+insert into t (id,a) values (425,95);
+insert into t (id,a) values (425,96);
+insert into t (id,a) values (425,97);
+insert into t (id,a) values (425,98);
+insert into t (id,a) values (425,99);
+insert into t (id,a) values (426,0);
+insert into t (id,a) values (426,1);
+insert into t (id,a) values (426,2);
+insert into t (id,a) values (426,3);
+insert into t (id,a) values (426,4);
+insert into t (id,a) values (426,5);
+insert into t (id,a) values (426,6);
+insert into t (id,a) values (426,7);
+insert into t (id,a) values (426,8);
+insert into t (id,a) values (426,9);
+insert into t (id,a) values (426,10);
+insert into t (id,a) values (426,11);
+insert into t (id,a) values (426,12);
+insert into t (id,a) values (426,13);
+insert into t (id,a) values (426,14);
+insert into t (id,a) values (426,15);
+insert into t (id,a) values (426,16);
+insert into t (id,a) values (426,17);
+insert into t (id,a) values (426,18);
+insert into t (id,a) values (426,19);
+insert into t (id,a) values (426,20);
+insert into t (id,a) values (426,21);
+insert into t (id,a) values (426,22);
+insert into t (id,a) values (426,23);
+insert into t (id,a) values (426,24);
+insert into t (id,a) values (426,25);
+insert into t (id,a) values (426,26);
+insert into t (id,a) values (426,27);
+insert into t (id,a) values (426,28);
+insert into t (id,a) values (426,29);
+insert into t (id,a) values (426,30);
+insert into t (id,a) values (426,31);
+insert into t (id,a) values (426,32);
+insert into t (id,a) values (426,33);
+insert into t (id,a) values (426,34);
+insert into t (id,a) values (426,35);
+insert into t (id,a) values (426,36);
+insert into t (id,a) values (426,37);
+insert into t (id,a) values (426,38);
+insert into t (id,a) values (426,39);
+insert into t (id,a) values (426,40);
+insert into t (id,a) values (426,41);
+insert into t (id,a) values (426,42);
+insert into t (id,a) values (426,43);
+insert into t (id,a) values (426,44);
+insert into t (id,a) values (426,45);
+insert into t (id,a) values (426,46);
+insert into t (id,a) values (426,47);
+insert into t (id,a) values (426,48);
+insert into t (id,a) values (426,49);
+insert into t (id,a) values (426,50);
+insert into t (id,a) values (426,51);
+insert into t (id,a) values (426,52);
+insert into t (id,a) values (426,53);
+insert into t (id,a) values (426,54);
+insert into t (id,a) values (426,55);
+insert into t (id,a) values (426,56);
+insert into t (id,a) values (426,57);
+insert into t (id,a) values (426,58);
+insert into t (id,a) values (426,59);
+insert into t (id,a) values (426,60);
+insert into t (id,a) values (426,61);
+insert into t (id,a) values (426,62);
+insert into t (id,a) values (426,63);
+insert into t (id,a) values (426,64);
+insert into t (id,a) values (426,65);
+insert into t (id,a) values (426,66);
+insert into t (id,a) values (426,67);
+insert into t (id,a) values (426,68);
+insert into t (id,a) values (426,69);
+insert into t (id,a) values (426,70);
+insert into t (id,a) values (426,71);
+insert into t (id,a) values (426,72);
+insert into t (id,a) values (426,73);
+insert into t (id,a) values (426,74);
+insert into t (id,a) values (426,75);
+insert into t (id,a) values (426,76);
+insert into t (id,a) values (426,77);
+insert into t (id,a) values (426,78);
+insert into t (id,a) values (426,79);
+insert into t (id,a) values (426,80);
+insert into t (id,a) values (426,81);
+insert into t (id,a) values (426,82);
+insert into t (id,a) values (426,83);
+insert into t (id,a) values (426,84);
+insert into t (id,a) values (426,85);
+insert into t (id,a) values (426,86);
+insert into t (id,a) values (426,87);
+insert into t (id,a) values (426,88);
+insert into t (id,a) values (426,89);
+insert into t (id,a) values (426,90);
+insert into t (id,a) values (426,91);
+insert into t (id,a) values (426,92);
+insert into t (id,a) values (426,93);
+insert into t (id,a) values (426,94);
+insert into t (id,a) values (426,95);
+insert into t (id,a) values (426,96);
+insert into t (id,a) values (426,97);
+insert into t (id,a) values (426,98);
+insert into t (id,a) values (426,99);
+insert into t (id,a) values (427,0);
+insert into t (id,a) values (427,1);
+insert into t (id,a) values (427,2);
+insert into t (id,a) values (427,3);
+insert into t (id,a) values (427,4);
+insert into t (id,a) values (427,5);
+insert into t (id,a) values (427,6);
+insert into t (id,a) values (427,7);
+insert into t (id,a) values (427,8);
+insert into t (id,a) values (427,9);
+insert into t (id,a) values (427,10);
+insert into t (id,a) values (427,11);
+insert into t (id,a) values (427,12);
+insert into t (id,a) values (427,13);
+insert into t (id,a) values (427,14);
+insert into t (id,a) values (427,15);
+insert into t (id,a) values (427,16);
+insert into t (id,a) values (427,17);
+insert into t (id,a) values (427,18);
+insert into t (id,a) values (427,19);
+insert into t (id,a) values (427,20);
+insert into t (id,a) values (427,21);
+insert into t (id,a) values (427,22);
+insert into t (id,a) values (427,23);
+insert into t (id,a) values (427,24);
+insert into t (id,a) values (427,25);
+insert into t (id,a) values (427,26);
+insert into t (id,a) values (427,27);
+insert into t (id,a) values (427,28);
+insert into t (id,a) values (427,29);
+insert into t (id,a) values (427,30);
+insert into t (id,a) values (427,31);
+insert into t (id,a) values (427,32);
+insert into t (id,a) values (427,33);
+insert into t (id,a) values (427,34);
+insert into t (id,a) values (427,35);
+insert into t (id,a) values (427,36);
+insert into t (id,a) values (427,37);
+insert into t (id,a) values (427,38);
+insert into t (id,a) values (427,39);
+insert into t (id,a) values (427,40);
+insert into t (id,a) values (427,41);
+insert into t (id,a) values (427,42);
+insert into t (id,a) values (427,43);
+insert into t (id,a) values (427,44);
+insert into t (id,a) values (427,45);
+insert into t (id,a) values (427,46);
+insert into t (id,a) values (427,47);
+insert into t (id,a) values (427,48);
+insert into t (id,a) values (427,49);
+insert into t (id,a) values (427,50);
+insert into t (id,a) values (427,51);
+insert into t (id,a) values (427,52);
+insert into t (id,a) values (427,53);
+insert into t (id,a) values (427,54);
+insert into t (id,a) values (427,55);
+insert into t (id,a) values (427,56);
+insert into t (id,a) values (427,57);
+insert into t (id,a) values (427,58);
+insert into t (id,a) values (427,59);
+insert into t (id,a) values (427,60);
+insert into t (id,a) values (427,61);
+insert into t (id,a) values (427,62);
+insert into t (id,a) values (427,63);
+insert into t (id,a) values (427,64);
+insert into t (id,a) values (427,65);
+insert into t (id,a) values (427,66);
+insert into t (id,a) values (427,67);
+insert into t (id,a) values (427,68);
+insert into t (id,a) values (427,69);
+insert into t (id,a) values (427,70);
+insert into t (id,a) values (427,71);
+insert into t (id,a) values (427,72);
+insert into t (id,a) values (427,73);
+insert into t (id,a) values (427,74);
+insert into t (id,a) values (427,75);
+insert into t (id,a) values (427,76);
+insert into t (id,a) values (427,77);
+insert into t (id,a) values (427,78);
+insert into t (id,a) values (427,79);
+insert into t (id,a) values (427,80);
+insert into t (id,a) values (427,81);
+insert into t (id,a) values (427,82);
+insert into t (id,a) values (427,83);
+insert into t (id,a) values (427,84);
+insert into t (id,a) values (427,85);
+insert into t (id,a) values (427,86);
+insert into t (id,a) values (427,87);
+insert into t (id,a) values (427,88);
+insert into t (id,a) values (427,89);
+insert into t (id,a) values (427,90);
+insert into t (id,a) values (427,91);
+insert into t (id,a) values (427,92);
+insert into t (id,a) values (427,93);
+insert into t (id,a) values (427,94);
+insert into t (id,a) values (427,95);
+insert into t (id,a) values (427,96);
+insert into t (id,a) values (427,97);
+insert into t (id,a) values (427,98);
+insert into t (id,a) values (427,99);
+insert into t (id,a) values (428,0);
+insert into t (id,a) values (428,1);
+insert into t (id,a) values (428,2);
+insert into t (id,a) values (428,3);
+insert into t (id,a) values (428,4);
+insert into t (id,a) values (428,5);
+insert into t (id,a) values (428,6);
+insert into t (id,a) values (428,7);
+insert into t (id,a) values (428,8);
+insert into t (id,a) values (428,9);
+insert into t (id,a) values (428,10);
+insert into t (id,a) values (428,11);
+insert into t (id,a) values (428,12);
+insert into t (id,a) values (428,13);
+insert into t (id,a) values (428,14);
+insert into t (id,a) values (428,15);
+insert into t (id,a) values (428,16);
+insert into t (id,a) values (428,17);
+insert into t (id,a) values (428,18);
+insert into t (id,a) values (428,19);
+insert into t (id,a) values (428,20);
+insert into t (id,a) values (428,21);
+insert into t (id,a) values (428,22);
+insert into t (id,a) values (428,23);
+insert into t (id,a) values (428,24);
+insert into t (id,a) values (428,25);
+insert into t (id,a) values (428,26);
+insert into t (id,a) values (428,27);
+insert into t (id,a) values (428,28);
+insert into t (id,a) values (428,29);
+insert into t (id,a) values (428,30);
+insert into t (id,a) values (428,31);
+insert into t (id,a) values (428,32);
+insert into t (id,a) values (428,33);
+insert into t (id,a) values (428,34);
+insert into t (id,a) values (428,35);
+insert into t (id,a) values (428,36);
+insert into t (id,a) values (428,37);
+insert into t (id,a) values (428,38);
+insert into t (id,a) values (428,39);
+insert into t (id,a) values (428,40);
+insert into t (id,a) values (428,41);
+insert into t (id,a) values (428,42);
+insert into t (id,a) values (428,43);
+insert into t (id,a) values (428,44);
+insert into t (id,a) values (428,45);
+insert into t (id,a) values (428,46);
+insert into t (id,a) values (428,47);
+insert into t (id,a) values (428,48);
+insert into t (id,a) values (428,49);
+insert into t (id,a) values (428,50);
+insert into t (id,a) values (428,51);
+insert into t (id,a) values (428,52);
+insert into t (id,a) values (428,53);
+insert into t (id,a) values (428,54);
+insert into t (id,a) values (428,55);
+insert into t (id,a) values (428,56);
+insert into t (id,a) values (428,57);
+insert into t (id,a) values (428,58);
+insert into t (id,a) values (428,59);
+insert into t (id,a) values (428,60);
+insert into t (id,a) values (428,61);
+insert into t (id,a) values (428,62);
+insert into t (id,a) values (428,63);
+insert into t (id,a) values (428,64);
+insert into t (id,a) values (428,65);
+insert into t (id,a) values (428,66);
+insert into t (id,a) values (428,67);
+insert into t (id,a) values (428,68);
+insert into t (id,a) values (428,69);
+insert into t (id,a) values (428,70);
+insert into t (id,a) values (428,71);
+insert into t (id,a) values (428,72);
+insert into t (id,a) values (428,73);
+insert into t (id,a) values (428,74);
+insert into t (id,a) values (428,75);
+insert into t (id,a) values (428,76);
+insert into t (id,a) values (428,77);
+insert into t (id,a) values (428,78);
+insert into t (id,a) values (428,79);
+insert into t (id,a) values (428,80);
+insert into t (id,a) values (428,81);
+insert into t (id,a) values (428,82);
+insert into t (id,a) values (428,83);
+insert into t (id,a) values (428,84);
+insert into t (id,a) values (428,85);
+insert into t (id,a) values (428,86);
+insert into t (id,a) values (428,87);
+insert into t (id,a) values (428,88);
+insert into t (id,a) values (428,89);
+insert into t (id,a) values (428,90);
+insert into t (id,a) values (428,91);
+insert into t (id,a) values (428,92);
+insert into t (id,a) values (428,93);
+insert into t (id,a) values (428,94);
+insert into t (id,a) values (428,95);
+insert into t (id,a) values (428,96);
+insert into t (id,a) values (428,97);
+insert into t (id,a) values (428,98);
+insert into t (id,a) values (428,99);
+insert into t (id,a) values (429,0);
+insert into t (id,a) values (429,1);
+insert into t (id,a) values (429,2);
+insert into t (id,a) values (429,3);
+insert into t (id,a) values (429,4);
+insert into t (id,a) values (429,5);
+insert into t (id,a) values (429,6);
+insert into t (id,a) values (429,7);
+insert into t (id,a) values (429,8);
+insert into t (id,a) values (429,9);
+insert into t (id,a) values (429,10);
+insert into t (id,a) values (429,11);
+insert into t (id,a) values (429,12);
+insert into t (id,a) values (429,13);
+insert into t (id,a) values (429,14);
+insert into t (id,a) values (429,15);
+insert into t (id,a) values (429,16);
+insert into t (id,a) values (429,17);
+insert into t (id,a) values (429,18);
+insert into t (id,a) values (429,19);
+insert into t (id,a) values (429,20);
+insert into t (id,a) values (429,21);
+insert into t (id,a) values (429,22);
+insert into t (id,a) values (429,23);
+insert into t (id,a) values (429,24);
+insert into t (id,a) values (429,25);
+insert into t (id,a) values (429,26);
+insert into t (id,a) values (429,27);
+insert into t (id,a) values (429,28);
+insert into t (id,a) values (429,29);
+insert into t (id,a) values (429,30);
+insert into t (id,a) values (429,31);
+insert into t (id,a) values (429,32);
+insert into t (id,a) values (429,33);
+insert into t (id,a) values (429,34);
+insert into t (id,a) values (429,35);
+insert into t (id,a) values (429,36);
+insert into t (id,a) values (429,37);
+insert into t (id,a) values (429,38);
+insert into t (id,a) values (429,39);
+insert into t (id,a) values (429,40);
+insert into t (id,a) values (429,41);
+insert into t (id,a) values (429,42);
+insert into t (id,a) values (429,43);
+insert into t (id,a) values (429,44);
+insert into t (id,a) values (429,45);
+insert into t (id,a) values (429,46);
+insert into t (id,a) values (429,47);
+insert into t (id,a) values (429,48);
+insert into t (id,a) values (429,49);
+insert into t (id,a) values (429,50);
+insert into t (id,a) values (429,51);
+insert into t (id,a) values (429,52);
+insert into t (id,a) values (429,53);
+insert into t (id,a) values (429,54);
+insert into t (id,a) values (429,55);
+insert into t (id,a) values (429,56);
+insert into t (id,a) values (429,57);
+insert into t (id,a) values (429,58);
+insert into t (id,a) values (429,59);
+insert into t (id,a) values (429,60);
+insert into t (id,a) values (429,61);
+insert into t (id,a) values (429,62);
+insert into t (id,a) values (429,63);
+insert into t (id,a) values (429,64);
+insert into t (id,a) values (429,65);
+insert into t (id,a) values (429,66);
+insert into t (id,a) values (429,67);
+insert into t (id,a) values (429,68);
+insert into t (id,a) values (429,69);
+insert into t (id,a) values (429,70);
+insert into t (id,a) values (429,71);
+insert into t (id,a) values (429,72);
+insert into t (id,a) values (429,73);
+insert into t (id,a) values (429,74);
+insert into t (id,a) values (429,75);
+insert into t (id,a) values (429,76);
+insert into t (id,a) values (429,77);
+insert into t (id,a) values (429,78);
+insert into t (id,a) values (429,79);
+insert into t (id,a) values (429,80);
+insert into t (id,a) values (429,81);
+insert into t (id,a) values (429,82);
+insert into t (id,a) values (429,83);
+insert into t (id,a) values (429,84);
+insert into t (id,a) values (429,85);
+insert into t (id,a) values (429,86);
+insert into t (id,a) values (429,87);
+insert into t (id,a) values (429,88);
+insert into t (id,a) values (429,89);
+insert into t (id,a) values (429,90);
+insert into t (id,a) values (429,91);
+insert into t (id,a) values (429,92);
+insert into t (id,a) values (429,93);
+insert into t (id,a) values (429,94);
+insert into t (id,a) values (429,95);
+insert into t (id,a) values (429,96);
+insert into t (id,a) values (429,97);
+insert into t (id,a) values (429,98);
+insert into t (id,a) values (429,99);
+insert into t (id,a) values (430,0);
+insert into t (id,a) values (430,1);
+insert into t (id,a) values (430,2);
+insert into t (id,a) values (430,3);
+insert into t (id,a) values (430,4);
+insert into t (id,a) values (430,5);
+insert into t (id,a) values (430,6);
+insert into t (id,a) values (430,7);
+insert into t (id,a) values (430,8);
+insert into t (id,a) values (430,9);
+insert into t (id,a) values (430,10);
+insert into t (id,a) values (430,11);
+insert into t (id,a) values (430,12);
+insert into t (id,a) values (430,13);
+insert into t (id,a) values (430,14);
+insert into t (id,a) values (430,15);
+insert into t (id,a) values (430,16);
+insert into t (id,a) values (430,17);
+insert into t (id,a) values (430,18);
+insert into t (id,a) values (430,19);
+insert into t (id,a) values (430,20);
+insert into t (id,a) values (430,21);
+insert into t (id,a) values (430,22);
+insert into t (id,a) values (430,23);
+insert into t (id,a) values (430,24);
+insert into t (id,a) values (430,25);
+insert into t (id,a) values (430,26);
+insert into t (id,a) values (430,27);
+insert into t (id,a) values (430,28);
+insert into t (id,a) values (430,29);
+insert into t (id,a) values (430,30);
+insert into t (id,a) values (430,31);
+insert into t (id,a) values (430,32);
+insert into t (id,a) values (430,33);
+insert into t (id,a) values (430,34);
+insert into t (id,a) values (430,35);
+insert into t (id,a) values (430,36);
+insert into t (id,a) values (430,37);
+insert into t (id,a) values (430,38);
+insert into t (id,a) values (430,39);
+insert into t (id,a) values (430,40);
+insert into t (id,a) values (430,41);
+insert into t (id,a) values (430,42);
+insert into t (id,a) values (430,43);
+insert into t (id,a) values (430,44);
+insert into t (id,a) values (430,45);
+insert into t (id,a) values (430,46);
+insert into t (id,a) values (430,47);
+insert into t (id,a) values (430,48);
+insert into t (id,a) values (430,49);
+insert into t (id,a) values (430,50);
+insert into t (id,a) values (430,51);
+insert into t (id,a) values (430,52);
+insert into t (id,a) values (430,53);
+insert into t (id,a) values (430,54);
+insert into t (id,a) values (430,55);
+insert into t (id,a) values (430,56);
+insert into t (id,a) values (430,57);
+insert into t (id,a) values (430,58);
+insert into t (id,a) values (430,59);
+insert into t (id,a) values (430,60);
+insert into t (id,a) values (430,61);
+insert into t (id,a) values (430,62);
+insert into t (id,a) values (430,63);
+insert into t (id,a) values (430,64);
+insert into t (id,a) values (430,65);
+insert into t (id,a) values (430,66);
+insert into t (id,a) values (430,67);
+insert into t (id,a) values (430,68);
+insert into t (id,a) values (430,69);
+insert into t (id,a) values (430,70);
+insert into t (id,a) values (430,71);
+insert into t (id,a) values (430,72);
+insert into t (id,a) values (430,73);
+insert into t (id,a) values (430,74);
+insert into t (id,a) values (430,75);
+insert into t (id,a) values (430,76);
+insert into t (id,a) values (430,77);
+insert into t (id,a) values (430,78);
+insert into t (id,a) values (430,79);
+insert into t (id,a) values (430,80);
+insert into t (id,a) values (430,81);
+insert into t (id,a) values (430,82);
+insert into t (id,a) values (430,83);
+insert into t (id,a) values (430,84);
+insert into t (id,a) values (430,85);
+insert into t (id,a) values (430,86);
+insert into t (id,a) values (430,87);
+insert into t (id,a) values (430,88);
+insert into t (id,a) values (430,89);
+insert into t (id,a) values (430,90);
+insert into t (id,a) values (430,91);
+insert into t (id,a) values (430,92);
+insert into t (id,a) values (430,93);
+insert into t (id,a) values (430,94);
+insert into t (id,a) values (430,95);
+insert into t (id,a) values (430,96);
+insert into t (id,a) values (430,97);
+insert into t (id,a) values (430,98);
+insert into t (id,a) values (430,99);
+insert into t (id,a) values (431,0);
+insert into t (id,a) values (431,1);
+insert into t (id,a) values (431,2);
+insert into t (id,a) values (431,3);
+insert into t (id,a) values (431,4);
+insert into t (id,a) values (431,5);
+insert into t (id,a) values (431,6);
+insert into t (id,a) values (431,7);
+insert into t (id,a) values (431,8);
+insert into t (id,a) values (431,9);
+insert into t (id,a) values (431,10);
+insert into t (id,a) values (431,11);
+insert into t (id,a) values (431,12);
+insert into t (id,a) values (431,13);
+insert into t (id,a) values (431,14);
+insert into t (id,a) values (431,15);
+insert into t (id,a) values (431,16);
+insert into t (id,a) values (431,17);
+insert into t (id,a) values (431,18);
+insert into t (id,a) values (431,19);
+insert into t (id,a) values (431,20);
+insert into t (id,a) values (431,21);
+insert into t (id,a) values (431,22);
+insert into t (id,a) values (431,23);
+insert into t (id,a) values (431,24);
+insert into t (id,a) values (431,25);
+insert into t (id,a) values (431,26);
+insert into t (id,a) values (431,27);
+insert into t (id,a) values (431,28);
+insert into t (id,a) values (431,29);
+insert into t (id,a) values (431,30);
+insert into t (id,a) values (431,31);
+insert into t (id,a) values (431,32);
+insert into t (id,a) values (431,33);
+insert into t (id,a) values (431,34);
+insert into t (id,a) values (431,35);
+insert into t (id,a) values (431,36);
+insert into t (id,a) values (431,37);
+insert into t (id,a) values (431,38);
+insert into t (id,a) values (431,39);
+insert into t (id,a) values (431,40);
+insert into t (id,a) values (431,41);
+insert into t (id,a) values (431,42);
+insert into t (id,a) values (431,43);
+insert into t (id,a) values (431,44);
+insert into t (id,a) values (431,45);
+insert into t (id,a) values (431,46);
+insert into t (id,a) values (431,47);
+insert into t (id,a) values (431,48);
+insert into t (id,a) values (431,49);
+insert into t (id,a) values (431,50);
+insert into t (id,a) values (431,51);
+insert into t (id,a) values (431,52);
+insert into t (id,a) values (431,53);
+insert into t (id,a) values (431,54);
+insert into t (id,a) values (431,55);
+insert into t (id,a) values (431,56);
+insert into t (id,a) values (431,57);
+insert into t (id,a) values (431,58);
+insert into t (id,a) values (431,59);
+insert into t (id,a) values (431,60);
+insert into t (id,a) values (431,61);
+insert into t (id,a) values (431,62);
+insert into t (id,a) values (431,63);
+insert into t (id,a) values (431,64);
+insert into t (id,a) values (431,65);
+insert into t (id,a) values (431,66);
+insert into t (id,a) values (431,67);
+insert into t (id,a) values (431,68);
+insert into t (id,a) values (431,69);
+insert into t (id,a) values (431,70);
+insert into t (id,a) values (431,71);
+insert into t (id,a) values (431,72);
+insert into t (id,a) values (431,73);
+insert into t (id,a) values (431,74);
+insert into t (id,a) values (431,75);
+insert into t (id,a) values (431,76);
+insert into t (id,a) values (431,77);
+insert into t (id,a) values (431,78);
+insert into t (id,a) values (431,79);
+insert into t (id,a) values (431,80);
+insert into t (id,a) values (431,81);
+insert into t (id,a) values (431,82);
+insert into t (id,a) values (431,83);
+insert into t (id,a) values (431,84);
+insert into t (id,a) values (431,85);
+insert into t (id,a) values (431,86);
+insert into t (id,a) values (431,87);
+insert into t (id,a) values (431,88);
+insert into t (id,a) values (431,89);
+insert into t (id,a) values (431,90);
+insert into t (id,a) values (431,91);
+insert into t (id,a) values (431,92);
+insert into t (id,a) values (431,93);
+insert into t (id,a) values (431,94);
+insert into t (id,a) values (431,95);
+insert into t (id,a) values (431,96);
+insert into t (id,a) values (431,97);
+insert into t (id,a) values (431,98);
+insert into t (id,a) values (431,99);
+insert into t (id,a) values (432,0);
+insert into t (id,a) values (432,1);
+insert into t (id,a) values (432,2);
+insert into t (id,a) values (432,3);
+insert into t (id,a) values (432,4);
+insert into t (id,a) values (432,5);
+insert into t (id,a) values (432,6);
+insert into t (id,a) values (432,7);
+insert into t (id,a) values (432,8);
+insert into t (id,a) values (432,9);
+insert into t (id,a) values (432,10);
+insert into t (id,a) values (432,11);
+insert into t (id,a) values (432,12);
+insert into t (id,a) values (432,13);
+insert into t (id,a) values (432,14);
+insert into t (id,a) values (432,15);
+insert into t (id,a) values (432,16);
+insert into t (id,a) values (432,17);
+insert into t (id,a) values (432,18);
+insert into t (id,a) values (432,19);
+insert into t (id,a) values (432,20);
+insert into t (id,a) values (432,21);
+insert into t (id,a) values (432,22);
+insert into t (id,a) values (432,23);
+insert into t (id,a) values (432,24);
+insert into t (id,a) values (432,25);
+insert into t (id,a) values (432,26);
+insert into t (id,a) values (432,27);
+insert into t (id,a) values (432,28);
+insert into t (id,a) values (432,29);
+insert into t (id,a) values (432,30);
+insert into t (id,a) values (432,31);
+insert into t (id,a) values (432,32);
+insert into t (id,a) values (432,33);
+insert into t (id,a) values (432,34);
+insert into t (id,a) values (432,35);
+insert into t (id,a) values (432,36);
+insert into t (id,a) values (432,37);
+insert into t (id,a) values (432,38);
+insert into t (id,a) values (432,39);
+insert into t (id,a) values (432,40);
+insert into t (id,a) values (432,41);
+insert into t (id,a) values (432,42);
+insert into t (id,a) values (432,43);
+insert into t (id,a) values (432,44);
+insert into t (id,a) values (432,45);
+insert into t (id,a) values (432,46);
+insert into t (id,a) values (432,47);
+insert into t (id,a) values (432,48);
+insert into t (id,a) values (432,49);
+insert into t (id,a) values (432,50);
+insert into t (id,a) values (432,51);
+insert into t (id,a) values (432,52);
+insert into t (id,a) values (432,53);
+insert into t (id,a) values (432,54);
+insert into t (id,a) values (432,55);
+insert into t (id,a) values (432,56);
+insert into t (id,a) values (432,57);
+insert into t (id,a) values (432,58);
+insert into t (id,a) values (432,59);
+insert into t (id,a) values (432,60);
+insert into t (id,a) values (432,61);
+insert into t (id,a) values (432,62);
+insert into t (id,a) values (432,63);
+insert into t (id,a) values (432,64);
+insert into t (id,a) values (432,65);
+insert into t (id,a) values (432,66);
+insert into t (id,a) values (432,67);
+insert into t (id,a) values (432,68);
+insert into t (id,a) values (432,69);
+insert into t (id,a) values (432,70);
+insert into t (id,a) values (432,71);
+insert into t (id,a) values (432,72);
+insert into t (id,a) values (432,73);
+insert into t (id,a) values (432,74);
+insert into t (id,a) values (432,75);
+insert into t (id,a) values (432,76);
+insert into t (id,a) values (432,77);
+insert into t (id,a) values (432,78);
+insert into t (id,a) values (432,79);
+insert into t (id,a) values (432,80);
+insert into t (id,a) values (432,81);
+insert into t (id,a) values (432,82);
+insert into t (id,a) values (432,83);
+insert into t (id,a) values (432,84);
+insert into t (id,a) values (432,85);
+insert into t (id,a) values (432,86);
+insert into t (id,a) values (432,87);
+insert into t (id,a) values (432,88);
+insert into t (id,a) values (432,89);
+insert into t (id,a) values (432,90);
+insert into t (id,a) values (432,91);
+insert into t (id,a) values (432,92);
+insert into t (id,a) values (432,93);
+insert into t (id,a) values (432,94);
+insert into t (id,a) values (432,95);
+insert into t (id,a) values (432,96);
+insert into t (id,a) values (432,97);
+insert into t (id,a) values (432,98);
+insert into t (id,a) values (432,99);
+insert into t (id,a) values (433,0);
+insert into t (id,a) values (433,1);
+insert into t (id,a) values (433,2);
+insert into t (id,a) values (433,3);
+insert into t (id,a) values (433,4);
+insert into t (id,a) values (433,5);
+insert into t (id,a) values (433,6);
+insert into t (id,a) values (433,7);
+insert into t (id,a) values (433,8);
+insert into t (id,a) values (433,9);
+insert into t (id,a) values (433,10);
+insert into t (id,a) values (433,11);
+insert into t (id,a) values (433,12);
+insert into t (id,a) values (433,13);
+insert into t (id,a) values (433,14);
+insert into t (id,a) values (433,15);
+insert into t (id,a) values (433,16);
+insert into t (id,a) values (433,17);
+insert into t (id,a) values (433,18);
+insert into t (id,a) values (433,19);
+insert into t (id,a) values (433,20);
+insert into t (id,a) values (433,21);
+insert into t (id,a) values (433,22);
+insert into t (id,a) values (433,23);
+insert into t (id,a) values (433,24);
+insert into t (id,a) values (433,25);
+insert into t (id,a) values (433,26);
+insert into t (id,a) values (433,27);
+insert into t (id,a) values (433,28);
+insert into t (id,a) values (433,29);
+insert into t (id,a) values (433,30);
+insert into t (id,a) values (433,31);
+insert into t (id,a) values (433,32);
+insert into t (id,a) values (433,33);
+insert into t (id,a) values (433,34);
+insert into t (id,a) values (433,35);
+insert into t (id,a) values (433,36);
+insert into t (id,a) values (433,37);
+insert into t (id,a) values (433,38);
+insert into t (id,a) values (433,39);
+insert into t (id,a) values (433,40);
+insert into t (id,a) values (433,41);
+insert into t (id,a) values (433,42);
+insert into t (id,a) values (433,43);
+insert into t (id,a) values (433,44);
+insert into t (id,a) values (433,45);
+insert into t (id,a) values (433,46);
+insert into t (id,a) values (433,47);
+insert into t (id,a) values (433,48);
+insert into t (id,a) values (433,49);
+insert into t (id,a) values (433,50);
+insert into t (id,a) values (433,51);
+insert into t (id,a) values (433,52);
+insert into t (id,a) values (433,53);
+insert into t (id,a) values (433,54);
+insert into t (id,a) values (433,55);
+insert into t (id,a) values (433,56);
+insert into t (id,a) values (433,57);
+insert into t (id,a) values (433,58);
+insert into t (id,a) values (433,59);
+insert into t (id,a) values (433,60);
+insert into t (id,a) values (433,61);
+insert into t (id,a) values (433,62);
+insert into t (id,a) values (433,63);
+insert into t (id,a) values (433,64);
+insert into t (id,a) values (433,65);
+insert into t (id,a) values (433,66);
+insert into t (id,a) values (433,67);
+insert into t (id,a) values (433,68);
+insert into t (id,a) values (433,69);
+insert into t (id,a) values (433,70);
+insert into t (id,a) values (433,71);
+insert into t (id,a) values (433,72);
+insert into t (id,a) values (433,73);
+insert into t (id,a) values (433,74);
+insert into t (id,a) values (433,75);
+insert into t (id,a) values (433,76);
+insert into t (id,a) values (433,77);
+insert into t (id,a) values (433,78);
+insert into t (id,a) values (433,79);
+insert into t (id,a) values (433,80);
+insert into t (id,a) values (433,81);
+insert into t (id,a) values (433,82);
+insert into t (id,a) values (433,83);
+insert into t (id,a) values (433,84);
+insert into t (id,a) values (433,85);
+insert into t (id,a) values (433,86);
+insert into t (id,a) values (433,87);
+insert into t (id,a) values (433,88);
+insert into t (id,a) values (433,89);
+insert into t (id,a) values (433,90);
+insert into t (id,a) values (433,91);
+insert into t (id,a) values (433,92);
+insert into t (id,a) values (433,93);
+insert into t (id,a) values (433,94);
+insert into t (id,a) values (433,95);
+insert into t (id,a) values (433,96);
+insert into t (id,a) values (433,97);
+insert into t (id,a) values (433,98);
+insert into t (id,a) values (433,99);
+insert into t (id,a) values (434,0);
+insert into t (id,a) values (434,1);
+insert into t (id,a) values (434,2);
+insert into t (id,a) values (434,3);
+insert into t (id,a) values (434,4);
+insert into t (id,a) values (434,5);
+insert into t (id,a) values (434,6);
+insert into t (id,a) values (434,7);
+insert into t (id,a) values (434,8);
+insert into t (id,a) values (434,9);
+insert into t (id,a) values (434,10);
+insert into t (id,a) values (434,11);
+insert into t (id,a) values (434,12);
+insert into t (id,a) values (434,13);
+insert into t (id,a) values (434,14);
+insert into t (id,a) values (434,15);
+insert into t (id,a) values (434,16);
+insert into t (id,a) values (434,17);
+insert into t (id,a) values (434,18);
+insert into t (id,a) values (434,19);
+insert into t (id,a) values (434,20);
+insert into t (id,a) values (434,21);
+insert into t (id,a) values (434,22);
+insert into t (id,a) values (434,23);
+insert into t (id,a) values (434,24);
+insert into t (id,a) values (434,25);
+insert into t (id,a) values (434,26);
+insert into t (id,a) values (434,27);
+insert into t (id,a) values (434,28);
+insert into t (id,a) values (434,29);
+insert into t (id,a) values (434,30);
+insert into t (id,a) values (434,31);
+insert into t (id,a) values (434,32);
+insert into t (id,a) values (434,33);
+insert into t (id,a) values (434,34);
+insert into t (id,a) values (434,35);
+insert into t (id,a) values (434,36);
+insert into t (id,a) values (434,37);
+insert into t (id,a) values (434,38);
+insert into t (id,a) values (434,39);
+insert into t (id,a) values (434,40);
+insert into t (id,a) values (434,41);
+insert into t (id,a) values (434,42);
+insert into t (id,a) values (434,43);
+insert into t (id,a) values (434,44);
+insert into t (id,a) values (434,45);
+insert into t (id,a) values (434,46);
+insert into t (id,a) values (434,47);
+insert into t (id,a) values (434,48);
+insert into t (id,a) values (434,49);
+insert into t (id,a) values (434,50);
+insert into t (id,a) values (434,51);
+insert into t (id,a) values (434,52);
+insert into t (id,a) values (434,53);
+insert into t (id,a) values (434,54);
+insert into t (id,a) values (434,55);
+insert into t (id,a) values (434,56);
+insert into t (id,a) values (434,57);
+insert into t (id,a) values (434,58);
+insert into t (id,a) values (434,59);
+insert into t (id,a) values (434,60);
+insert into t (id,a) values (434,61);
+insert into t (id,a) values (434,62);
+insert into t (id,a) values (434,63);
+insert into t (id,a) values (434,64);
+insert into t (id,a) values (434,65);
+insert into t (id,a) values (434,66);
+insert into t (id,a) values (434,67);
+insert into t (id,a) values (434,68);
+insert into t (id,a) values (434,69);
+insert into t (id,a) values (434,70);
+insert into t (id,a) values (434,71);
+insert into t (id,a) values (434,72);
+insert into t (id,a) values (434,73);
+insert into t (id,a) values (434,74);
+insert into t (id,a) values (434,75);
+insert into t (id,a) values (434,76);
+insert into t (id,a) values (434,77);
+insert into t (id,a) values (434,78);
+insert into t (id,a) values (434,79);
+insert into t (id,a) values (434,80);
+insert into t (id,a) values (434,81);
+insert into t (id,a) values (434,82);
+insert into t (id,a) values (434,83);
+insert into t (id,a) values (434,84);
+insert into t (id,a) values (434,85);
+insert into t (id,a) values (434,86);
+insert into t (id,a) values (434,87);
+insert into t (id,a) values (434,88);
+insert into t (id,a) values (434,89);
+insert into t (id,a) values (434,90);
+insert into t (id,a) values (434,91);
+insert into t (id,a) values (434,92);
+insert into t (id,a) values (434,93);
+insert into t (id,a) values (434,94);
+insert into t (id,a) values (434,95);
+insert into t (id,a) values (434,96);
+insert into t (id,a) values (434,97);
+insert into t (id,a) values (434,98);
+insert into t (id,a) values (434,99);
+insert into t (id,a) values (435,0);
+insert into t (id,a) values (435,1);
+insert into t (id,a) values (435,2);
+insert into t (id,a) values (435,3);
+insert into t (id,a) values (435,4);
+insert into t (id,a) values (435,5);
+insert into t (id,a) values (435,6);
+insert into t (id,a) values (435,7);
+insert into t (id,a) values (435,8);
+insert into t (id,a) values (435,9);
+insert into t (id,a) values (435,10);
+insert into t (id,a) values (435,11);
+insert into t (id,a) values (435,12);
+insert into t (id,a) values (435,13);
+insert into t (id,a) values (435,14);
+insert into t (id,a) values (435,15);
+insert into t (id,a) values (435,16);
+insert into t (id,a) values (435,17);
+insert into t (id,a) values (435,18);
+insert into t (id,a) values (435,19);
+insert into t (id,a) values (435,20);
+insert into t (id,a) values (435,21);
+insert into t (id,a) values (435,22);
+insert into t (id,a) values (435,23);
+insert into t (id,a) values (435,24);
+insert into t (id,a) values (435,25);
+insert into t (id,a) values (435,26);
+insert into t (id,a) values (435,27);
+insert into t (id,a) values (435,28);
+insert into t (id,a) values (435,29);
+insert into t (id,a) values (435,30);
+insert into t (id,a) values (435,31);
+insert into t (id,a) values (435,32);
+insert into t (id,a) values (435,33);
+insert into t (id,a) values (435,34);
+insert into t (id,a) values (435,35);
+insert into t (id,a) values (435,36);
+insert into t (id,a) values (435,37);
+insert into t (id,a) values (435,38);
+insert into t (id,a) values (435,39);
+insert into t (id,a) values (435,40);
+insert into t (id,a) values (435,41);
+insert into t (id,a) values (435,42);
+insert into t (id,a) values (435,43);
+insert into t (id,a) values (435,44);
+insert into t (id,a) values (435,45);
+insert into t (id,a) values (435,46);
+insert into t (id,a) values (435,47);
+insert into t (id,a) values (435,48);
+insert into t (id,a) values (435,49);
+insert into t (id,a) values (435,50);
+insert into t (id,a) values (435,51);
+insert into t (id,a) values (435,52);
+insert into t (id,a) values (435,53);
+insert into t (id,a) values (435,54);
+insert into t (id,a) values (435,55);
+insert into t (id,a) values (435,56);
+insert into t (id,a) values (435,57);
+insert into t (id,a) values (435,58);
+insert into t (id,a) values (435,59);
+insert into t (id,a) values (435,60);
+insert into t (id,a) values (435,61);
+insert into t (id,a) values (435,62);
+insert into t (id,a) values (435,63);
+insert into t (id,a) values (435,64);
+insert into t (id,a) values (435,65);
+insert into t (id,a) values (435,66);
+insert into t (id,a) values (435,67);
+insert into t (id,a) values (435,68);
+insert into t (id,a) values (435,69);
+insert into t (id,a) values (435,70);
+insert into t (id,a) values (435,71);
+insert into t (id,a) values (435,72);
+insert into t (id,a) values (435,73);
+insert into t (id,a) values (435,74);
+insert into t (id,a) values (435,75);
+insert into t (id,a) values (435,76);
+insert into t (id,a) values (435,77);
+insert into t (id,a) values (435,78);
+insert into t (id,a) values (435,79);
+insert into t (id,a) values (435,80);
+insert into t (id,a) values (435,81);
+insert into t (id,a) values (435,82);
+insert into t (id,a) values (435,83);
+insert into t (id,a) values (435,84);
+insert into t (id,a) values (435,85);
+insert into t (id,a) values (435,86);
+insert into t (id,a) values (435,87);
+insert into t (id,a) values (435,88);
+insert into t (id,a) values (435,89);
+insert into t (id,a) values (435,90);
+insert into t (id,a) values (435,91);
+insert into t (id,a) values (435,92);
+insert into t (id,a) values (435,93);
+insert into t (id,a) values (435,94);
+insert into t (id,a) values (435,95);
+insert into t (id,a) values (435,96);
+insert into t (id,a) values (435,97);
+insert into t (id,a) values (435,98);
+insert into t (id,a) values (435,99);
+insert into t (id,a) values (436,0);
+insert into t (id,a) values (436,1);
+insert into t (id,a) values (436,2);
+insert into t (id,a) values (436,3);
+insert into t (id,a) values (436,4);
+insert into t (id,a) values (436,5);
+insert into t (id,a) values (436,6);
+insert into t (id,a) values (436,7);
+insert into t (id,a) values (436,8);
+insert into t (id,a) values (436,9);
+insert into t (id,a) values (436,10);
+insert into t (id,a) values (436,11);
+insert into t (id,a) values (436,12);
+insert into t (id,a) values (436,13);
+insert into t (id,a) values (436,14);
+insert into t (id,a) values (436,15);
+insert into t (id,a) values (436,16);
+insert into t (id,a) values (436,17);
+insert into t (id,a) values (436,18);
+insert into t (id,a) values (436,19);
+insert into t (id,a) values (436,20);
+insert into t (id,a) values (436,21);
+insert into t (id,a) values (436,22);
+insert into t (id,a) values (436,23);
+insert into t (id,a) values (436,24);
+insert into t (id,a) values (436,25);
+insert into t (id,a) values (436,26);
+insert into t (id,a) values (436,27);
+insert into t (id,a) values (436,28);
+insert into t (id,a) values (436,29);
+insert into t (id,a) values (436,30);
+insert into t (id,a) values (436,31);
+insert into t (id,a) values (436,32);
+insert into t (id,a) values (436,33);
+insert into t (id,a) values (436,34);
+insert into t (id,a) values (436,35);
+insert into t (id,a) values (436,36);
+insert into t (id,a) values (436,37);
+insert into t (id,a) values (436,38);
+insert into t (id,a) values (436,39);
+insert into t (id,a) values (436,40);
+insert into t (id,a) values (436,41);
+insert into t (id,a) values (436,42);
+insert into t (id,a) values (436,43);
+insert into t (id,a) values (436,44);
+insert into t (id,a) values (436,45);
+insert into t (id,a) values (436,46);
+insert into t (id,a) values (436,47);
+insert into t (id,a) values (436,48);
+insert into t (id,a) values (436,49);
+insert into t (id,a) values (436,50);
+insert into t (id,a) values (436,51);
+insert into t (id,a) values (436,52);
+insert into t (id,a) values (436,53);
+insert into t (id,a) values (436,54);
+insert into t (id,a) values (436,55);
+insert into t (id,a) values (436,56);
+insert into t (id,a) values (436,57);
+insert into t (id,a) values (436,58);
+insert into t (id,a) values (436,59);
+insert into t (id,a) values (436,60);
+insert into t (id,a) values (436,61);
+insert into t (id,a) values (436,62);
+insert into t (id,a) values (436,63);
+insert into t (id,a) values (436,64);
+insert into t (id,a) values (436,65);
+insert into t (id,a) values (436,66);
+insert into t (id,a) values (436,67);
+insert into t (id,a) values (436,68);
+insert into t (id,a) values (436,69);
+insert into t (id,a) values (436,70);
+insert into t (id,a) values (436,71);
+insert into t (id,a) values (436,72);
+insert into t (id,a) values (436,73);
+insert into t (id,a) values (436,74);
+insert into t (id,a) values (436,75);
+insert into t (id,a) values (436,76);
+insert into t (id,a) values (436,77);
+insert into t (id,a) values (436,78);
+insert into t (id,a) values (436,79);
+insert into t (id,a) values (436,80);
+insert into t (id,a) values (436,81);
+insert into t (id,a) values (436,82);
+insert into t (id,a) values (436,83);
+insert into t (id,a) values (436,84);
+insert into t (id,a) values (436,85);
+insert into t (id,a) values (436,86);
+insert into t (id,a) values (436,87);
+insert into t (id,a) values (436,88);
+insert into t (id,a) values (436,89);
+insert into t (id,a) values (436,90);
+insert into t (id,a) values (436,91);
+insert into t (id,a) values (436,92);
+insert into t (id,a) values (436,93);
+insert into t (id,a) values (436,94);
+insert into t (id,a) values (436,95);
+insert into t (id,a) values (436,96);
+insert into t (id,a) values (436,97);
+insert into t (id,a) values (436,98);
+insert into t (id,a) values (436,99);
+insert into t (id,a) values (437,0);
+insert into t (id,a) values (437,1);
+insert into t (id,a) values (437,2);
+insert into t (id,a) values (437,3);
+insert into t (id,a) values (437,4);
+insert into t (id,a) values (437,5);
+insert into t (id,a) values (437,6);
+insert into t (id,a) values (437,7);
+insert into t (id,a) values (437,8);
+insert into t (id,a) values (437,9);
+insert into t (id,a) values (437,10);
+insert into t (id,a) values (437,11);
+insert into t (id,a) values (437,12);
+insert into t (id,a) values (437,13);
+insert into t (id,a) values (437,14);
+insert into t (id,a) values (437,15);
+insert into t (id,a) values (437,16);
+insert into t (id,a) values (437,17);
+insert into t (id,a) values (437,18);
+insert into t (id,a) values (437,19);
+insert into t (id,a) values (437,20);
+insert into t (id,a) values (437,21);
+insert into t (id,a) values (437,22);
+insert into t (id,a) values (437,23);
+insert into t (id,a) values (437,24);
+insert into t (id,a) values (437,25);
+insert into t (id,a) values (437,26);
+insert into t (id,a) values (437,27);
+insert into t (id,a) values (437,28);
+insert into t (id,a) values (437,29);
+insert into t (id,a) values (437,30);
+insert into t (id,a) values (437,31);
+insert into t (id,a) values (437,32);
+insert into t (id,a) values (437,33);
+insert into t (id,a) values (437,34);
+insert into t (id,a) values (437,35);
+insert into t (id,a) values (437,36);
+insert into t (id,a) values (437,37);
+insert into t (id,a) values (437,38);
+insert into t (id,a) values (437,39);
+insert into t (id,a) values (437,40);
+insert into t (id,a) values (437,41);
+insert into t (id,a) values (437,42);
+insert into t (id,a) values (437,43);
+insert into t (id,a) values (437,44);
+insert into t (id,a) values (437,45);
+insert into t (id,a) values (437,46);
+insert into t (id,a) values (437,47);
+insert into t (id,a) values (437,48);
+insert into t (id,a) values (437,49);
+insert into t (id,a) values (437,50);
+insert into t (id,a) values (437,51);
+insert into t (id,a) values (437,52);
+insert into t (id,a) values (437,53);
+insert into t (id,a) values (437,54);
+insert into t (id,a) values (437,55);
+insert into t (id,a) values (437,56);
+insert into t (id,a) values (437,57);
+insert into t (id,a) values (437,58);
+insert into t (id,a) values (437,59);
+insert into t (id,a) values (437,60);
+insert into t (id,a) values (437,61);
+insert into t (id,a) values (437,62);
+insert into t (id,a) values (437,63);
+insert into t (id,a) values (437,64);
+insert into t (id,a) values (437,65);
+insert into t (id,a) values (437,66);
+insert into t (id,a) values (437,67);
+insert into t (id,a) values (437,68);
+insert into t (id,a) values (437,69);
+insert into t (id,a) values (437,70);
+insert into t (id,a) values (437,71);
+insert into t (id,a) values (437,72);
+insert into t (id,a) values (437,73);
+insert into t (id,a) values (437,74);
+insert into t (id,a) values (437,75);
+insert into t (id,a) values (437,76);
+insert into t (id,a) values (437,77);
+insert into t (id,a) values (437,78);
+insert into t (id,a) values (437,79);
+insert into t (id,a) values (437,80);
+insert into t (id,a) values (437,81);
+insert into t (id,a) values (437,82);
+insert into t (id,a) values (437,83);
+insert into t (id,a) values (437,84);
+insert into t (id,a) values (437,85);
+insert into t (id,a) values (437,86);
+insert into t (id,a) values (437,87);
+insert into t (id,a) values (437,88);
+insert into t (id,a) values (437,89);
+insert into t (id,a) values (437,90);
+insert into t (id,a) values (437,91);
+insert into t (id,a) values (437,92);
+insert into t (id,a) values (437,93);
+insert into t (id,a) values (437,94);
+insert into t (id,a) values (437,95);
+insert into t (id,a) values (437,96);
+insert into t (id,a) values (437,97);
+insert into t (id,a) values (437,98);
+insert into t (id,a) values (437,99);
+insert into t (id,a) values (438,0);
+insert into t (id,a) values (438,1);
+insert into t (id,a) values (438,2);
+insert into t (id,a) values (438,3);
+insert into t (id,a) values (438,4);
+insert into t (id,a) values (438,5);
+insert into t (id,a) values (438,6);
+insert into t (id,a) values (438,7);
+insert into t (id,a) values (438,8);
+insert into t (id,a) values (438,9);
+insert into t (id,a) values (438,10);
+insert into t (id,a) values (438,11);
+insert into t (id,a) values (438,12);
+insert into t (id,a) values (438,13);
+insert into t (id,a) values (438,14);
+insert into t (id,a) values (438,15);
+insert into t (id,a) values (438,16);
+insert into t (id,a) values (438,17);
+insert into t (id,a) values (438,18);
+insert into t (id,a) values (438,19);
+insert into t (id,a) values (438,20);
+insert into t (id,a) values (438,21);
+insert into t (id,a) values (438,22);
+insert into t (id,a) values (438,23);
+insert into t (id,a) values (438,24);
+insert into t (id,a) values (438,25);
+insert into t (id,a) values (438,26);
+insert into t (id,a) values (438,27);
+insert into t (id,a) values (438,28);
+insert into t (id,a) values (438,29);
+insert into t (id,a) values (438,30);
+insert into t (id,a) values (438,31);
+insert into t (id,a) values (438,32);
+insert into t (id,a) values (438,33);
+insert into t (id,a) values (438,34);
+insert into t (id,a) values (438,35);
+insert into t (id,a) values (438,36);
+insert into t (id,a) values (438,37);
+insert into t (id,a) values (438,38);
+insert into t (id,a) values (438,39);
+insert into t (id,a) values (438,40);
+insert into t (id,a) values (438,41);
+insert into t (id,a) values (438,42);
+insert into t (id,a) values (438,43);
+insert into t (id,a) values (438,44);
+insert into t (id,a) values (438,45);
+insert into t (id,a) values (438,46);
+insert into t (id,a) values (438,47);
+insert into t (id,a) values (438,48);
+insert into t (id,a) values (438,49);
+insert into t (id,a) values (438,50);
+insert into t (id,a) values (438,51);
+insert into t (id,a) values (438,52);
+insert into t (id,a) values (438,53);
+insert into t (id,a) values (438,54);
+insert into t (id,a) values (438,55);
+insert into t (id,a) values (438,56);
+insert into t (id,a) values (438,57);
+insert into t (id,a) values (438,58);
+insert into t (id,a) values (438,59);
+insert into t (id,a) values (438,60);
+insert into t (id,a) values (438,61);
+insert into t (id,a) values (438,62);
+insert into t (id,a) values (438,63);
+insert into t (id,a) values (438,64);
+insert into t (id,a) values (438,65);
+insert into t (id,a) values (438,66);
+insert into t (id,a) values (438,67);
+insert into t (id,a) values (438,68);
+insert into t (id,a) values (438,69);
+insert into t (id,a) values (438,70);
+insert into t (id,a) values (438,71);
+insert into t (id,a) values (438,72);
+insert into t (id,a) values (438,73);
+insert into t (id,a) values (438,74);
+insert into t (id,a) values (438,75);
+insert into t (id,a) values (438,76);
+insert into t (id,a) values (438,77);
+insert into t (id,a) values (438,78);
+insert into t (id,a) values (438,79);
+insert into t (id,a) values (438,80);
+insert into t (id,a) values (438,81);
+insert into t (id,a) values (438,82);
+insert into t (id,a) values (438,83);
+insert into t (id,a) values (438,84);
+insert into t (id,a) values (438,85);
+insert into t (id,a) values (438,86);
+insert into t (id,a) values (438,87);
+insert into t (id,a) values (438,88);
+insert into t (id,a) values (438,89);
+insert into t (id,a) values (438,90);
+insert into t (id,a) values (438,91);
+insert into t (id,a) values (438,92);
+insert into t (id,a) values (438,93);
+insert into t (id,a) values (438,94);
+insert into t (id,a) values (438,95);
+insert into t (id,a) values (438,96);
+insert into t (id,a) values (438,97);
+insert into t (id,a) values (438,98);
+insert into t (id,a) values (438,99);
+insert into t (id,a) values (439,0);
+insert into t (id,a) values (439,1);
+insert into t (id,a) values (439,2);
+insert into t (id,a) values (439,3);
+insert into t (id,a) values (439,4);
+insert into t (id,a) values (439,5);
+insert into t (id,a) values (439,6);
+insert into t (id,a) values (439,7);
+insert into t (id,a) values (439,8);
+insert into t (id,a) values (439,9);
+insert into t (id,a) values (439,10);
+insert into t (id,a) values (439,11);
+insert into t (id,a) values (439,12);
+insert into t (id,a) values (439,13);
+insert into t (id,a) values (439,14);
+insert into t (id,a) values (439,15);
+insert into t (id,a) values (439,16);
+insert into t (id,a) values (439,17);
+insert into t (id,a) values (439,18);
+insert into t (id,a) values (439,19);
+insert into t (id,a) values (439,20);
+insert into t (id,a) values (439,21);
+insert into t (id,a) values (439,22);
+insert into t (id,a) values (439,23);
+insert into t (id,a) values (439,24);
+insert into t (id,a) values (439,25);
+insert into t (id,a) values (439,26);
+insert into t (id,a) values (439,27);
+insert into t (id,a) values (439,28);
+insert into t (id,a) values (439,29);
+insert into t (id,a) values (439,30);
+insert into t (id,a) values (439,31);
+insert into t (id,a) values (439,32);
+insert into t (id,a) values (439,33);
+insert into t (id,a) values (439,34);
+insert into t (id,a) values (439,35);
+insert into t (id,a) values (439,36);
+insert into t (id,a) values (439,37);
+insert into t (id,a) values (439,38);
+insert into t (id,a) values (439,39);
+insert into t (id,a) values (439,40);
+insert into t (id,a) values (439,41);
+insert into t (id,a) values (439,42);
+insert into t (id,a) values (439,43);
+insert into t (id,a) values (439,44);
+insert into t (id,a) values (439,45);
+insert into t (id,a) values (439,46);
+insert into t (id,a) values (439,47);
+insert into t (id,a) values (439,48);
+insert into t (id,a) values (439,49);
+insert into t (id,a) values (439,50);
+insert into t (id,a) values (439,51);
+insert into t (id,a) values (439,52);
+insert into t (id,a) values (439,53);
+insert into t (id,a) values (439,54);
+insert into t (id,a) values (439,55);
+insert into t (id,a) values (439,56);
+insert into t (id,a) values (439,57);
+insert into t (id,a) values (439,58);
+insert into t (id,a) values (439,59);
+insert into t (id,a) values (439,60);
+insert into t (id,a) values (439,61);
+insert into t (id,a) values (439,62);
+insert into t (id,a) values (439,63);
+insert into t (id,a) values (439,64);
+insert into t (id,a) values (439,65);
+insert into t (id,a) values (439,66);
+insert into t (id,a) values (439,67);
+insert into t (id,a) values (439,68);
+insert into t (id,a) values (439,69);
+insert into t (id,a) values (439,70);
+insert into t (id,a) values (439,71);
+insert into t (id,a) values (439,72);
+insert into t (id,a) values (439,73);
+insert into t (id,a) values (439,74);
+insert into t (id,a) values (439,75);
+insert into t (id,a) values (439,76);
+insert into t (id,a) values (439,77);
+insert into t (id,a) values (439,78);
+insert into t (id,a) values (439,79);
+insert into t (id,a) values (439,80);
+insert into t (id,a) values (439,81);
+insert into t (id,a) values (439,82);
+insert into t (id,a) values (439,83);
+insert into t (id,a) values (439,84);
+insert into t (id,a) values (439,85);
+insert into t (id,a) values (439,86);
+insert into t (id,a) values (439,87);
+insert into t (id,a) values (439,88);
+insert into t (id,a) values (439,89);
+insert into t (id,a) values (439,90);
+insert into t (id,a) values (439,91);
+insert into t (id,a) values (439,92);
+insert into t (id,a) values (439,93);
+insert into t (id,a) values (439,94);
+insert into t (id,a) values (439,95);
+insert into t (id,a) values (439,96);
+insert into t (id,a) values (439,97);
+insert into t (id,a) values (439,98);
+insert into t (id,a) values (439,99);
+insert into t (id,a) values (440,0);
+insert into t (id,a) values (440,1);
+insert into t (id,a) values (440,2);
+insert into t (id,a) values (440,3);
+insert into t (id,a) values (440,4);
+insert into t (id,a) values (440,5);
+insert into t (id,a) values (440,6);
+insert into t (id,a) values (440,7);
+insert into t (id,a) values (440,8);
+insert into t (id,a) values (440,9);
+insert into t (id,a) values (440,10);
+insert into t (id,a) values (440,11);
+insert into t (id,a) values (440,12);
+insert into t (id,a) values (440,13);
+insert into t (id,a) values (440,14);
+insert into t (id,a) values (440,15);
+insert into t (id,a) values (440,16);
+insert into t (id,a) values (440,17);
+insert into t (id,a) values (440,18);
+insert into t (id,a) values (440,19);
+insert into t (id,a) values (440,20);
+insert into t (id,a) values (440,21);
+insert into t (id,a) values (440,22);
+insert into t (id,a) values (440,23);
+insert into t (id,a) values (440,24);
+insert into t (id,a) values (440,25);
+insert into t (id,a) values (440,26);
+insert into t (id,a) values (440,27);
+insert into t (id,a) values (440,28);
+insert into t (id,a) values (440,29);
+insert into t (id,a) values (440,30);
+insert into t (id,a) values (440,31);
+insert into t (id,a) values (440,32);
+insert into t (id,a) values (440,33);
+insert into t (id,a) values (440,34);
+insert into t (id,a) values (440,35);
+insert into t (id,a) values (440,36);
+insert into t (id,a) values (440,37);
+insert into t (id,a) values (440,38);
+insert into t (id,a) values (440,39);
+insert into t (id,a) values (440,40);
+insert into t (id,a) values (440,41);
+insert into t (id,a) values (440,42);
+insert into t (id,a) values (440,43);
+insert into t (id,a) values (440,44);
+insert into t (id,a) values (440,45);
+insert into t (id,a) values (440,46);
+insert into t (id,a) values (440,47);
+insert into t (id,a) values (440,48);
+insert into t (id,a) values (440,49);
+insert into t (id,a) values (440,50);
+insert into t (id,a) values (440,51);
+insert into t (id,a) values (440,52);
+insert into t (id,a) values (440,53);
+insert into t (id,a) values (440,54);
+insert into t (id,a) values (440,55);
+insert into t (id,a) values (440,56);
+insert into t (id,a) values (440,57);
+insert into t (id,a) values (440,58);
+insert into t (id,a) values (440,59);
+insert into t (id,a) values (440,60);
+insert into t (id,a) values (440,61);
+insert into t (id,a) values (440,62);
+insert into t (id,a) values (440,63);
+insert into t (id,a) values (440,64);
+insert into t (id,a) values (440,65);
+insert into t (id,a) values (440,66);
+insert into t (id,a) values (440,67);
+insert into t (id,a) values (440,68);
+insert into t (id,a) values (440,69);
+insert into t (id,a) values (440,70);
+insert into t (id,a) values (440,71);
+insert into t (id,a) values (440,72);
+insert into t (id,a) values (440,73);
+insert into t (id,a) values (440,74);
+insert into t (id,a) values (440,75);
+insert into t (id,a) values (440,76);
+insert into t (id,a) values (440,77);
+insert into t (id,a) values (440,78);
+insert into t (id,a) values (440,79);
+insert into t (id,a) values (440,80);
+insert into t (id,a) values (440,81);
+insert into t (id,a) values (440,82);
+insert into t (id,a) values (440,83);
+insert into t (id,a) values (440,84);
+insert into t (id,a) values (440,85);
+insert into t (id,a) values (440,86);
+insert into t (id,a) values (440,87);
+insert into t (id,a) values (440,88);
+insert into t (id,a) values (440,89);
+insert into t (id,a) values (440,90);
+insert into t (id,a) values (440,91);
+insert into t (id,a) values (440,92);
+insert into t (id,a) values (440,93);
+insert into t (id,a) values (440,94);
+insert into t (id,a) values (440,95);
+insert into t (id,a) values (440,96);
+insert into t (id,a) values (440,97);
+insert into t (id,a) values (440,98);
+insert into t (id,a) values (440,99);
+insert into t (id,a) values (441,0);
+insert into t (id,a) values (441,1);
+insert into t (id,a) values (441,2);
+insert into t (id,a) values (441,3);
+insert into t (id,a) values (441,4);
+insert into t (id,a) values (441,5);
+insert into t (id,a) values (441,6);
+insert into t (id,a) values (441,7);
+insert into t (id,a) values (441,8);
+insert into t (id,a) values (441,9);
+insert into t (id,a) values (441,10);
+insert into t (id,a) values (441,11);
+insert into t (id,a) values (441,12);
+insert into t (id,a) values (441,13);
+insert into t (id,a) values (441,14);
+insert into t (id,a) values (441,15);
+insert into t (id,a) values (441,16);
+insert into t (id,a) values (441,17);
+insert into t (id,a) values (441,18);
+insert into t (id,a) values (441,19);
+insert into t (id,a) values (441,20);
+insert into t (id,a) values (441,21);
+insert into t (id,a) values (441,22);
+insert into t (id,a) values (441,23);
+insert into t (id,a) values (441,24);
+insert into t (id,a) values (441,25);
+insert into t (id,a) values (441,26);
+insert into t (id,a) values (441,27);
+insert into t (id,a) values (441,28);
+insert into t (id,a) values (441,29);
+insert into t (id,a) values (441,30);
+insert into t (id,a) values (441,31);
+insert into t (id,a) values (441,32);
+insert into t (id,a) values (441,33);
+insert into t (id,a) values (441,34);
+insert into t (id,a) values (441,35);
+insert into t (id,a) values (441,36);
+insert into t (id,a) values (441,37);
+insert into t (id,a) values (441,38);
+insert into t (id,a) values (441,39);
+insert into t (id,a) values (441,40);
+insert into t (id,a) values (441,41);
+insert into t (id,a) values (441,42);
+insert into t (id,a) values (441,43);
+insert into t (id,a) values (441,44);
+insert into t (id,a) values (441,45);
+insert into t (id,a) values (441,46);
+insert into t (id,a) values (441,47);
+insert into t (id,a) values (441,48);
+insert into t (id,a) values (441,49);
+insert into t (id,a) values (441,50);
+insert into t (id,a) values (441,51);
+insert into t (id,a) values (441,52);
+insert into t (id,a) values (441,53);
+insert into t (id,a) values (441,54);
+insert into t (id,a) values (441,55);
+insert into t (id,a) values (441,56);
+insert into t (id,a) values (441,57);
+insert into t (id,a) values (441,58);
+insert into t (id,a) values (441,59);
+insert into t (id,a) values (441,60);
+insert into t (id,a) values (441,61);
+insert into t (id,a) values (441,62);
+insert into t (id,a) values (441,63);
+insert into t (id,a) values (441,64);
+insert into t (id,a) values (441,65);
+insert into t (id,a) values (441,66);
+insert into t (id,a) values (441,67);
+insert into t (id,a) values (441,68);
+insert into t (id,a) values (441,69);
+insert into t (id,a) values (441,70);
+insert into t (id,a) values (441,71);
+insert into t (id,a) values (441,72);
+insert into t (id,a) values (441,73);
+insert into t (id,a) values (441,74);
+insert into t (id,a) values (441,75);
+insert into t (id,a) values (441,76);
+insert into t (id,a) values (441,77);
+insert into t (id,a) values (441,78);
+insert into t (id,a) values (441,79);
+insert into t (id,a) values (441,80);
+insert into t (id,a) values (441,81);
+insert into t (id,a) values (441,82);
+insert into t (id,a) values (441,83);
+insert into t (id,a) values (441,84);
+insert into t (id,a) values (441,85);
+insert into t (id,a) values (441,86);
+insert into t (id,a) values (441,87);
+insert into t (id,a) values (441,88);
+insert into t (id,a) values (441,89);
+insert into t (id,a) values (441,90);
+insert into t (id,a) values (441,91);
+insert into t (id,a) values (441,92);
+insert into t (id,a) values (441,93);
+insert into t (id,a) values (441,94);
+insert into t (id,a) values (441,95);
+insert into t (id,a) values (441,96);
+insert into t (id,a) values (441,97);
+insert into t (id,a) values (441,98);
+insert into t (id,a) values (441,99);
+insert into t (id,a) values (442,0);
+insert into t (id,a) values (442,1);
+insert into t (id,a) values (442,2);
+insert into t (id,a) values (442,3);
+insert into t (id,a) values (442,4);
+insert into t (id,a) values (442,5);
+insert into t (id,a) values (442,6);
+insert into t (id,a) values (442,7);
+insert into t (id,a) values (442,8);
+insert into t (id,a) values (442,9);
+insert into t (id,a) values (442,10);
+insert into t (id,a) values (442,11);
+insert into t (id,a) values (442,12);
+insert into t (id,a) values (442,13);
+insert into t (id,a) values (442,14);
+insert into t (id,a) values (442,15);
+insert into t (id,a) values (442,16);
+insert into t (id,a) values (442,17);
+insert into t (id,a) values (442,18);
+insert into t (id,a) values (442,19);
+insert into t (id,a) values (442,20);
+insert into t (id,a) values (442,21);
+insert into t (id,a) values (442,22);
+insert into t (id,a) values (442,23);
+insert into t (id,a) values (442,24);
+insert into t (id,a) values (442,25);
+insert into t (id,a) values (442,26);
+insert into t (id,a) values (442,27);
+insert into t (id,a) values (442,28);
+insert into t (id,a) values (442,29);
+insert into t (id,a) values (442,30);
+insert into t (id,a) values (442,31);
+insert into t (id,a) values (442,32);
+insert into t (id,a) values (442,33);
+insert into t (id,a) values (442,34);
+insert into t (id,a) values (442,35);
+insert into t (id,a) values (442,36);
+insert into t (id,a) values (442,37);
+insert into t (id,a) values (442,38);
+insert into t (id,a) values (442,39);
+insert into t (id,a) values (442,40);
+insert into t (id,a) values (442,41);
+insert into t (id,a) values (442,42);
+insert into t (id,a) values (442,43);
+insert into t (id,a) values (442,44);
+insert into t (id,a) values (442,45);
+insert into t (id,a) values (442,46);
+insert into t (id,a) values (442,47);
+insert into t (id,a) values (442,48);
+insert into t (id,a) values (442,49);
+insert into t (id,a) values (442,50);
+insert into t (id,a) values (442,51);
+insert into t (id,a) values (442,52);
+insert into t (id,a) values (442,53);
+insert into t (id,a) values (442,54);
+insert into t (id,a) values (442,55);
+insert into t (id,a) values (442,56);
+insert into t (id,a) values (442,57);
+insert into t (id,a) values (442,58);
+insert into t (id,a) values (442,59);
+insert into t (id,a) values (442,60);
+insert into t (id,a) values (442,61);
+insert into t (id,a) values (442,62);
+insert into t (id,a) values (442,63);
+insert into t (id,a) values (442,64);
+insert into t (id,a) values (442,65);
+insert into t (id,a) values (442,66);
+insert into t (id,a) values (442,67);
+insert into t (id,a) values (442,68);
+insert into t (id,a) values (442,69);
+insert into t (id,a) values (442,70);
+insert into t (id,a) values (442,71);
+insert into t (id,a) values (442,72);
+insert into t (id,a) values (442,73);
+insert into t (id,a) values (442,74);
+insert into t (id,a) values (442,75);
+insert into t (id,a) values (442,76);
+insert into t (id,a) values (442,77);
+insert into t (id,a) values (442,78);
+insert into t (id,a) values (442,79);
+insert into t (id,a) values (442,80);
+insert into t (id,a) values (442,81);
+insert into t (id,a) values (442,82);
+insert into t (id,a) values (442,83);
+insert into t (id,a) values (442,84);
+insert into t (id,a) values (442,85);
+insert into t (id,a) values (442,86);
+insert into t (id,a) values (442,87);
+insert into t (id,a) values (442,88);
+insert into t (id,a) values (442,89);
+insert into t (id,a) values (442,90);
+insert into t (id,a) values (442,91);
+insert into t (id,a) values (442,92);
+insert into t (id,a) values (442,93);
+insert into t (id,a) values (442,94);
+insert into t (id,a) values (442,95);
+insert into t (id,a) values (442,96);
+insert into t (id,a) values (442,97);
+insert into t (id,a) values (442,98);
+insert into t (id,a) values (442,99);
+insert into t (id,a) values (443,0);
+insert into t (id,a) values (443,1);
+insert into t (id,a) values (443,2);
+insert into t (id,a) values (443,3);
+insert into t (id,a) values (443,4);
+insert into t (id,a) values (443,5);
+insert into t (id,a) values (443,6);
+insert into t (id,a) values (443,7);
+insert into t (id,a) values (443,8);
+insert into t (id,a) values (443,9);
+insert into t (id,a) values (443,10);
+insert into t (id,a) values (443,11);
+insert into t (id,a) values (443,12);
+insert into t (id,a) values (443,13);
+insert into t (id,a) values (443,14);
+insert into t (id,a) values (443,15);
+insert into t (id,a) values (443,16);
+insert into t (id,a) values (443,17);
+insert into t (id,a) values (443,18);
+insert into t (id,a) values (443,19);
+insert into t (id,a) values (443,20);
+insert into t (id,a) values (443,21);
+insert into t (id,a) values (443,22);
+insert into t (id,a) values (443,23);
+insert into t (id,a) values (443,24);
+insert into t (id,a) values (443,25);
+insert into t (id,a) values (443,26);
+insert into t (id,a) values (443,27);
+insert into t (id,a) values (443,28);
+insert into t (id,a) values (443,29);
+insert into t (id,a) values (443,30);
+insert into t (id,a) values (443,31);
+insert into t (id,a) values (443,32);
+insert into t (id,a) values (443,33);
+insert into t (id,a) values (443,34);
+insert into t (id,a) values (443,35);
+insert into t (id,a) values (443,36);
+insert into t (id,a) values (443,37);
+insert into t (id,a) values (443,38);
+insert into t (id,a) values (443,39);
+insert into t (id,a) values (443,40);
+insert into t (id,a) values (443,41);
+insert into t (id,a) values (443,42);
+insert into t (id,a) values (443,43);
+insert into t (id,a) values (443,44);
+insert into t (id,a) values (443,45);
+insert into t (id,a) values (443,46);
+insert into t (id,a) values (443,47);
+insert into t (id,a) values (443,48);
+insert into t (id,a) values (443,49);
+insert into t (id,a) values (443,50);
+insert into t (id,a) values (443,51);
+insert into t (id,a) values (443,52);
+insert into t (id,a) values (443,53);
+insert into t (id,a) values (443,54);
+insert into t (id,a) values (443,55);
+insert into t (id,a) values (443,56);
+insert into t (id,a) values (443,57);
+insert into t (id,a) values (443,58);
+insert into t (id,a) values (443,59);
+insert into t (id,a) values (443,60);
+insert into t (id,a) values (443,61);
+insert into t (id,a) values (443,62);
+insert into t (id,a) values (443,63);
+insert into t (id,a) values (443,64);
+insert into t (id,a) values (443,65);
+insert into t (id,a) values (443,66);
+insert into t (id,a) values (443,67);
+insert into t (id,a) values (443,68);
+insert into t (id,a) values (443,69);
+insert into t (id,a) values (443,70);
+insert into t (id,a) values (443,71);
+insert into t (id,a) values (443,72);
+insert into t (id,a) values (443,73);
+insert into t (id,a) values (443,74);
+insert into t (id,a) values (443,75);
+insert into t (id,a) values (443,76);
+insert into t (id,a) values (443,77);
+insert into t (id,a) values (443,78);
+insert into t (id,a) values (443,79);
+insert into t (id,a) values (443,80);
+insert into t (id,a) values (443,81);
+insert into t (id,a) values (443,82);
+insert into t (id,a) values (443,83);
+insert into t (id,a) values (443,84);
+insert into t (id,a) values (443,85);
+insert into t (id,a) values (443,86);
+insert into t (id,a) values (443,87);
+insert into t (id,a) values (443,88);
+insert into t (id,a) values (443,89);
+insert into t (id,a) values (443,90);
+insert into t (id,a) values (443,91);
+insert into t (id,a) values (443,92);
+insert into t (id,a) values (443,93);
+insert into t (id,a) values (443,94);
+insert into t (id,a) values (443,95);
+insert into t (id,a) values (443,96);
+insert into t (id,a) values (443,97);
+insert into t (id,a) values (443,98);
+insert into t (id,a) values (443,99);
+insert into t (id,a) values (444,0);
+insert into t (id,a) values (444,1);
+insert into t (id,a) values (444,2);
+insert into t (id,a) values (444,3);
+insert into t (id,a) values (444,4);
+insert into t (id,a) values (444,5);
+insert into t (id,a) values (444,6);
+insert into t (id,a) values (444,7);
+insert into t (id,a) values (444,8);
+insert into t (id,a) values (444,9);
+insert into t (id,a) values (444,10);
+insert into t (id,a) values (444,11);
+insert into t (id,a) values (444,12);
+insert into t (id,a) values (444,13);
+insert into t (id,a) values (444,14);
+insert into t (id,a) values (444,15);
+insert into t (id,a) values (444,16);
+insert into t (id,a) values (444,17);
+insert into t (id,a) values (444,18);
+insert into t (id,a) values (444,19);
+insert into t (id,a) values (444,20);
+insert into t (id,a) values (444,21);
+insert into t (id,a) values (444,22);
+insert into t (id,a) values (444,23);
+insert into t (id,a) values (444,24);
+insert into t (id,a) values (444,25);
+insert into t (id,a) values (444,26);
+insert into t (id,a) values (444,27);
+insert into t (id,a) values (444,28);
+insert into t (id,a) values (444,29);
+insert into t (id,a) values (444,30);
+insert into t (id,a) values (444,31);
+insert into t (id,a) values (444,32);
+insert into t (id,a) values (444,33);
+insert into t (id,a) values (444,34);
+insert into t (id,a) values (444,35);
+insert into t (id,a) values (444,36);
+insert into t (id,a) values (444,37);
+insert into t (id,a) values (444,38);
+insert into t (id,a) values (444,39);
+insert into t (id,a) values (444,40);
+insert into t (id,a) values (444,41);
+insert into t (id,a) values (444,42);
+insert into t (id,a) values (444,43);
+insert into t (id,a) values (444,44);
+insert into t (id,a) values (444,45);
+insert into t (id,a) values (444,46);
+insert into t (id,a) values (444,47);
+insert into t (id,a) values (444,48);
+insert into t (id,a) values (444,49);
+insert into t (id,a) values (444,50);
+insert into t (id,a) values (444,51);
+insert into t (id,a) values (444,52);
+insert into t (id,a) values (444,53);
+insert into t (id,a) values (444,54);
+insert into t (id,a) values (444,55);
+insert into t (id,a) values (444,56);
+insert into t (id,a) values (444,57);
+insert into t (id,a) values (444,58);
+insert into t (id,a) values (444,59);
+insert into t (id,a) values (444,60);
+insert into t (id,a) values (444,61);
+insert into t (id,a) values (444,62);
+insert into t (id,a) values (444,63);
+insert into t (id,a) values (444,64);
+insert into t (id,a) values (444,65);
+insert into t (id,a) values (444,66);
+insert into t (id,a) values (444,67);
+insert into t (id,a) values (444,68);
+insert into t (id,a) values (444,69);
+insert into t (id,a) values (444,70);
+insert into t (id,a) values (444,71);
+insert into t (id,a) values (444,72);
+insert into t (id,a) values (444,73);
+insert into t (id,a) values (444,74);
+insert into t (id,a) values (444,75);
+insert into t (id,a) values (444,76);
+insert into t (id,a) values (444,77);
+insert into t (id,a) values (444,78);
+insert into t (id,a) values (444,79);
+insert into t (id,a) values (444,80);
+insert into t (id,a) values (444,81);
+insert into t (id,a) values (444,82);
+insert into t (id,a) values (444,83);
+insert into t (id,a) values (444,84);
+insert into t (id,a) values (444,85);
+insert into t (id,a) values (444,86);
+insert into t (id,a) values (444,87);
+insert into t (id,a) values (444,88);
+insert into t (id,a) values (444,89);
+insert into t (id,a) values (444,90);
+insert into t (id,a) values (444,91);
+insert into t (id,a) values (444,92);
+insert into t (id,a) values (444,93);
+insert into t (id,a) values (444,94);
+insert into t (id,a) values (444,95);
+insert into t (id,a) values (444,96);
+insert into t (id,a) values (444,97);
+insert into t (id,a) values (444,98);
+insert into t (id,a) values (444,99);
+insert into t (id,a) values (445,0);
+insert into t (id,a) values (445,1);
+insert into t (id,a) values (445,2);
+insert into t (id,a) values (445,3);
+insert into t (id,a) values (445,4);
+insert into t (id,a) values (445,5);
+insert into t (id,a) values (445,6);
+insert into t (id,a) values (445,7);
+insert into t (id,a) values (445,8);
+insert into t (id,a) values (445,9);
+insert into t (id,a) values (445,10);
+insert into t (id,a) values (445,11);
+insert into t (id,a) values (445,12);
+insert into t (id,a) values (445,13);
+insert into t (id,a) values (445,14);
+insert into t (id,a) values (445,15);
+insert into t (id,a) values (445,16);
+insert into t (id,a) values (445,17);
+insert into t (id,a) values (445,18);
+insert into t (id,a) values (445,19);
+insert into t (id,a) values (445,20);
+insert into t (id,a) values (445,21);
+insert into t (id,a) values (445,22);
+insert into t (id,a) values (445,23);
+insert into t (id,a) values (445,24);
+insert into t (id,a) values (445,25);
+insert into t (id,a) values (445,26);
+insert into t (id,a) values (445,27);
+insert into t (id,a) values (445,28);
+insert into t (id,a) values (445,29);
+insert into t (id,a) values (445,30);
+insert into t (id,a) values (445,31);
+insert into t (id,a) values (445,32);
+insert into t (id,a) values (445,33);
+insert into t (id,a) values (445,34);
+insert into t (id,a) values (445,35);
+insert into t (id,a) values (445,36);
+insert into t (id,a) values (445,37);
+insert into t (id,a) values (445,38);
+insert into t (id,a) values (445,39);
+insert into t (id,a) values (445,40);
+insert into t (id,a) values (445,41);
+insert into t (id,a) values (445,42);
+insert into t (id,a) values (445,43);
+insert into t (id,a) values (445,44);
+insert into t (id,a) values (445,45);
+insert into t (id,a) values (445,46);
+insert into t (id,a) values (445,47);
+insert into t (id,a) values (445,48);
+insert into t (id,a) values (445,49);
+insert into t (id,a) values (445,50);
+insert into t (id,a) values (445,51);
+insert into t (id,a) values (445,52);
+insert into t (id,a) values (445,53);
+insert into t (id,a) values (445,54);
+insert into t (id,a) values (445,55);
+insert into t (id,a) values (445,56);
+insert into t (id,a) values (445,57);
+insert into t (id,a) values (445,58);
+insert into t (id,a) values (445,59);
+insert into t (id,a) values (445,60);
+insert into t (id,a) values (445,61);
+insert into t (id,a) values (445,62);
+insert into t (id,a) values (445,63);
+insert into t (id,a) values (445,64);
+insert into t (id,a) values (445,65);
+insert into t (id,a) values (445,66);
+insert into t (id,a) values (445,67);
+insert into t (id,a) values (445,68);
+insert into t (id,a) values (445,69);
+insert into t (id,a) values (445,70);
+insert into t (id,a) values (445,71);
+insert into t (id,a) values (445,72);
+insert into t (id,a) values (445,73);
+insert into t (id,a) values (445,74);
+insert into t (id,a) values (445,75);
+insert into t (id,a) values (445,76);
+insert into t (id,a) values (445,77);
+insert into t (id,a) values (445,78);
+insert into t (id,a) values (445,79);
+insert into t (id,a) values (445,80);
+insert into t (id,a) values (445,81);
+insert into t (id,a) values (445,82);
+insert into t (id,a) values (445,83);
+insert into t (id,a) values (445,84);
+insert into t (id,a) values (445,85);
+insert into t (id,a) values (445,86);
+insert into t (id,a) values (445,87);
+insert into t (id,a) values (445,88);
+insert into t (id,a) values (445,89);
+insert into t (id,a) values (445,90);
+insert into t (id,a) values (445,91);
+insert into t (id,a) values (445,92);
+insert into t (id,a) values (445,93);
+insert into t (id,a) values (445,94);
+insert into t (id,a) values (445,95);
+insert into t (id,a) values (445,96);
+insert into t (id,a) values (445,97);
+insert into t (id,a) values (445,98);
+insert into t (id,a) values (445,99);
+insert into t (id,a) values (446,0);
+insert into t (id,a) values (446,1);
+insert into t (id,a) values (446,2);
+insert into t (id,a) values (446,3);
+insert into t (id,a) values (446,4);
+insert into t (id,a) values (446,5);
+insert into t (id,a) values (446,6);
+insert into t (id,a) values (446,7);
+insert into t (id,a) values (446,8);
+insert into t (id,a) values (446,9);
+insert into t (id,a) values (446,10);
+insert into t (id,a) values (446,11);
+insert into t (id,a) values (446,12);
+insert into t (id,a) values (446,13);
+insert into t (id,a) values (446,14);
+insert into t (id,a) values (446,15);
+insert into t (id,a) values (446,16);
+insert into t (id,a) values (446,17);
+insert into t (id,a) values (446,18);
+insert into t (id,a) values (446,19);
+insert into t (id,a) values (446,20);
+insert into t (id,a) values (446,21);
+insert into t (id,a) values (446,22);
+insert into t (id,a) values (446,23);
+insert into t (id,a) values (446,24);
+insert into t (id,a) values (446,25);
+insert into t (id,a) values (446,26);
+insert into t (id,a) values (446,27);
+insert into t (id,a) values (446,28);
+insert into t (id,a) values (446,29);
+insert into t (id,a) values (446,30);
+insert into t (id,a) values (446,31);
+insert into t (id,a) values (446,32);
+insert into t (id,a) values (446,33);
+insert into t (id,a) values (446,34);
+insert into t (id,a) values (446,35);
+insert into t (id,a) values (446,36);
+insert into t (id,a) values (446,37);
+insert into t (id,a) values (446,38);
+insert into t (id,a) values (446,39);
+insert into t (id,a) values (446,40);
+insert into t (id,a) values (446,41);
+insert into t (id,a) values (446,42);
+insert into t (id,a) values (446,43);
+insert into t (id,a) values (446,44);
+insert into t (id,a) values (446,45);
+insert into t (id,a) values (446,46);
+insert into t (id,a) values (446,47);
+insert into t (id,a) values (446,48);
+insert into t (id,a) values (446,49);
+insert into t (id,a) values (446,50);
+insert into t (id,a) values (446,51);
+insert into t (id,a) values (446,52);
+insert into t (id,a) values (446,53);
+insert into t (id,a) values (446,54);
+insert into t (id,a) values (446,55);
+insert into t (id,a) values (446,56);
+insert into t (id,a) values (446,57);
+insert into t (id,a) values (446,58);
+insert into t (id,a) values (446,59);
+insert into t (id,a) values (446,60);
+insert into t (id,a) values (446,61);
+insert into t (id,a) values (446,62);
+insert into t (id,a) values (446,63);
+insert into t (id,a) values (446,64);
+insert into t (id,a) values (446,65);
+insert into t (id,a) values (446,66);
+insert into t (id,a) values (446,67);
+insert into t (id,a) values (446,68);
+insert into t (id,a) values (446,69);
+insert into t (id,a) values (446,70);
+insert into t (id,a) values (446,71);
+insert into t (id,a) values (446,72);
+insert into t (id,a) values (446,73);
+insert into t (id,a) values (446,74);
+insert into t (id,a) values (446,75);
+insert into t (id,a) values (446,76);
+insert into t (id,a) values (446,77);
+insert into t (id,a) values (446,78);
+insert into t (id,a) values (446,79);
+insert into t (id,a) values (446,80);
+insert into t (id,a) values (446,81);
+insert into t (id,a) values (446,82);
+insert into t (id,a) values (446,83);
+insert into t (id,a) values (446,84);
+insert into t (id,a) values (446,85);
+insert into t (id,a) values (446,86);
+insert into t (id,a) values (446,87);
+insert into t (id,a) values (446,88);
+insert into t (id,a) values (446,89);
+insert into t (id,a) values (446,90);
+insert into t (id,a) values (446,91);
+insert into t (id,a) values (446,92);
+insert into t (id,a) values (446,93);
+insert into t (id,a) values (446,94);
+insert into t (id,a) values (446,95);
+insert into t (id,a) values (446,96);
+insert into t (id,a) values (446,97);
+insert into t (id,a) values (446,98);
+insert into t (id,a) values (446,99);
+insert into t (id,a) values (447,0);
+insert into t (id,a) values (447,1);
+insert into t (id,a) values (447,2);
+insert into t (id,a) values (447,3);
+insert into t (id,a) values (447,4);
+insert into t (id,a) values (447,5);
+insert into t (id,a) values (447,6);
+insert into t (id,a) values (447,7);
+insert into t (id,a) values (447,8);
+insert into t (id,a) values (447,9);
+insert into t (id,a) values (447,10);
+insert into t (id,a) values (447,11);
+insert into t (id,a) values (447,12);
+insert into t (id,a) values (447,13);
+insert into t (id,a) values (447,14);
+insert into t (id,a) values (447,15);
+insert into t (id,a) values (447,16);
+insert into t (id,a) values (447,17);
+insert into t (id,a) values (447,18);
+insert into t (id,a) values (447,19);
+insert into t (id,a) values (447,20);
+insert into t (id,a) values (447,21);
+insert into t (id,a) values (447,22);
+insert into t (id,a) values (447,23);
+insert into t (id,a) values (447,24);
+insert into t (id,a) values (447,25);
+insert into t (id,a) values (447,26);
+insert into t (id,a) values (447,27);
+insert into t (id,a) values (447,28);
+insert into t (id,a) values (447,29);
+insert into t (id,a) values (447,30);
+insert into t (id,a) values (447,31);
+insert into t (id,a) values (447,32);
+insert into t (id,a) values (447,33);
+insert into t (id,a) values (447,34);
+insert into t (id,a) values (447,35);
+insert into t (id,a) values (447,36);
+insert into t (id,a) values (447,37);
+insert into t (id,a) values (447,38);
+insert into t (id,a) values (447,39);
+insert into t (id,a) values (447,40);
+insert into t (id,a) values (447,41);
+insert into t (id,a) values (447,42);
+insert into t (id,a) values (447,43);
+insert into t (id,a) values (447,44);
+insert into t (id,a) values (447,45);
+insert into t (id,a) values (447,46);
+insert into t (id,a) values (447,47);
+insert into t (id,a) values (447,48);
+insert into t (id,a) values (447,49);
+insert into t (id,a) values (447,50);
+insert into t (id,a) values (447,51);
+insert into t (id,a) values (447,52);
+insert into t (id,a) values (447,53);
+insert into t (id,a) values (447,54);
+insert into t (id,a) values (447,55);
+insert into t (id,a) values (447,56);
+insert into t (id,a) values (447,57);
+insert into t (id,a) values (447,58);
+insert into t (id,a) values (447,59);
+insert into t (id,a) values (447,60);
+insert into t (id,a) values (447,61);
+insert into t (id,a) values (447,62);
+insert into t (id,a) values (447,63);
+insert into t (id,a) values (447,64);
+insert into t (id,a) values (447,65);
+insert into t (id,a) values (447,66);
+insert into t (id,a) values (447,67);
+insert into t (id,a) values (447,68);
+insert into t (id,a) values (447,69);
+insert into t (id,a) values (447,70);
+insert into t (id,a) values (447,71);
+insert into t (id,a) values (447,72);
+insert into t (id,a) values (447,73);
+insert into t (id,a) values (447,74);
+insert into t (id,a) values (447,75);
+insert into t (id,a) values (447,76);
+insert into t (id,a) values (447,77);
+insert into t (id,a) values (447,78);
+insert into t (id,a) values (447,79);
+insert into t (id,a) values (447,80);
+insert into t (id,a) values (447,81);
+insert into t (id,a) values (447,82);
+insert into t (id,a) values (447,83);
+insert into t (id,a) values (447,84);
+insert into t (id,a) values (447,85);
+insert into t (id,a) values (447,86);
+insert into t (id,a) values (447,87);
+insert into t (id,a) values (447,88);
+insert into t (id,a) values (447,89);
+insert into t (id,a) values (447,90);
+insert into t (id,a) values (447,91);
+insert into t (id,a) values (447,92);
+insert into t (id,a) values (447,93);
+insert into t (id,a) values (447,94);
+insert into t (id,a) values (447,95);
+insert into t (id,a) values (447,96);
+insert into t (id,a) values (447,97);
+insert into t (id,a) values (447,98);
+insert into t (id,a) values (447,99);
+insert into t (id,a) values (448,0);
+insert into t (id,a) values (448,1);
+insert into t (id,a) values (448,2);
+insert into t (id,a) values (448,3);
+insert into t (id,a) values (448,4);
+insert into t (id,a) values (448,5);
+insert into t (id,a) values (448,6);
+insert into t (id,a) values (448,7);
+insert into t (id,a) values (448,8);
+insert into t (id,a) values (448,9);
+insert into t (id,a) values (448,10);
+insert into t (id,a) values (448,11);
+insert into t (id,a) values (448,12);
+insert into t (id,a) values (448,13);
+insert into t (id,a) values (448,14);
+insert into t (id,a) values (448,15);
+insert into t (id,a) values (448,16);
+insert into t (id,a) values (448,17);
+insert into t (id,a) values (448,18);
+insert into t (id,a) values (448,19);
+insert into t (id,a) values (448,20);
+insert into t (id,a) values (448,21);
+insert into t (id,a) values (448,22);
+insert into t (id,a) values (448,23);
+insert into t (id,a) values (448,24);
+insert into t (id,a) values (448,25);
+insert into t (id,a) values (448,26);
+insert into t (id,a) values (448,27);
+insert into t (id,a) values (448,28);
+insert into t (id,a) values (448,29);
+insert into t (id,a) values (448,30);
+insert into t (id,a) values (448,31);
+insert into t (id,a) values (448,32);
+insert into t (id,a) values (448,33);
+insert into t (id,a) values (448,34);
+insert into t (id,a) values (448,35);
+insert into t (id,a) values (448,36);
+insert into t (id,a) values (448,37);
+insert into t (id,a) values (448,38);
+insert into t (id,a) values (448,39);
+insert into t (id,a) values (448,40);
+insert into t (id,a) values (448,41);
+insert into t (id,a) values (448,42);
+insert into t (id,a) values (448,43);
+insert into t (id,a) values (448,44);
+insert into t (id,a) values (448,45);
+insert into t (id,a) values (448,46);
+insert into t (id,a) values (448,47);
+insert into t (id,a) values (448,48);
+insert into t (id,a) values (448,49);
+insert into t (id,a) values (448,50);
+insert into t (id,a) values (448,51);
+insert into t (id,a) values (448,52);
+insert into t (id,a) values (448,53);
+insert into t (id,a) values (448,54);
+insert into t (id,a) values (448,55);
+insert into t (id,a) values (448,56);
+insert into t (id,a) values (448,57);
+insert into t (id,a) values (448,58);
+insert into t (id,a) values (448,59);
+insert into t (id,a) values (448,60);
+insert into t (id,a) values (448,61);
+insert into t (id,a) values (448,62);
+insert into t (id,a) values (448,63);
+insert into t (id,a) values (448,64);
+insert into t (id,a) values (448,65);
+insert into t (id,a) values (448,66);
+insert into t (id,a) values (448,67);
+insert into t (id,a) values (448,68);
+insert into t (id,a) values (448,69);
+insert into t (id,a) values (448,70);
+insert into t (id,a) values (448,71);
+insert into t (id,a) values (448,72);
+insert into t (id,a) values (448,73);
+insert into t (id,a) values (448,74);
+insert into t (id,a) values (448,75);
+insert into t (id,a) values (448,76);
+insert into t (id,a) values (448,77);
+insert into t (id,a) values (448,78);
+insert into t (id,a) values (448,79);
+insert into t (id,a) values (448,80);
+insert into t (id,a) values (448,81);
+insert into t (id,a) values (448,82);
+insert into t (id,a) values (448,83);
+insert into t (id,a) values (448,84);
+insert into t (id,a) values (448,85);
+insert into t (id,a) values (448,86);
+insert into t (id,a) values (448,87);
+insert into t (id,a) values (448,88);
+insert into t (id,a) values (448,89);
+insert into t (id,a) values (448,90);
+insert into t (id,a) values (448,91);
+insert into t (id,a) values (448,92);
+insert into t (id,a) values (448,93);
+insert into t (id,a) values (448,94);
+insert into t (id,a) values (448,95);
+insert into t (id,a) values (448,96);
+insert into t (id,a) values (448,97);
+insert into t (id,a) values (448,98);
+insert into t (id,a) values (448,99);
+insert into t (id,a) values (449,0);
+insert into t (id,a) values (449,1);
+insert into t (id,a) values (449,2);
+insert into t (id,a) values (449,3);
+insert into t (id,a) values (449,4);
+insert into t (id,a) values (449,5);
+insert into t (id,a) values (449,6);
+insert into t (id,a) values (449,7);
+insert into t (id,a) values (449,8);
+insert into t (id,a) values (449,9);
+insert into t (id,a) values (449,10);
+insert into t (id,a) values (449,11);
+insert into t (id,a) values (449,12);
+insert into t (id,a) values (449,13);
+insert into t (id,a) values (449,14);
+insert into t (id,a) values (449,15);
+insert into t (id,a) values (449,16);
+insert into t (id,a) values (449,17);
+insert into t (id,a) values (449,18);
+insert into t (id,a) values (449,19);
+insert into t (id,a) values (449,20);
+insert into t (id,a) values (449,21);
+insert into t (id,a) values (449,22);
+insert into t (id,a) values (449,23);
+insert into t (id,a) values (449,24);
+insert into t (id,a) values (449,25);
+insert into t (id,a) values (449,26);
+insert into t (id,a) values (449,27);
+insert into t (id,a) values (449,28);
+insert into t (id,a) values (449,29);
+insert into t (id,a) values (449,30);
+insert into t (id,a) values (449,31);
+insert into t (id,a) values (449,32);
+insert into t (id,a) values (449,33);
+insert into t (id,a) values (449,34);
+insert into t (id,a) values (449,35);
+insert into t (id,a) values (449,36);
+insert into t (id,a) values (449,37);
+insert into t (id,a) values (449,38);
+insert into t (id,a) values (449,39);
+insert into t (id,a) values (449,40);
+insert into t (id,a) values (449,41);
+insert into t (id,a) values (449,42);
+insert into t (id,a) values (449,43);
+insert into t (id,a) values (449,44);
+insert into t (id,a) values (449,45);
+insert into t (id,a) values (449,46);
+insert into t (id,a) values (449,47);
+insert into t (id,a) values (449,48);
+insert into t (id,a) values (449,49);
+insert into t (id,a) values (449,50);
+insert into t (id,a) values (449,51);
+insert into t (id,a) values (449,52);
+insert into t (id,a) values (449,53);
+insert into t (id,a) values (449,54);
+insert into t (id,a) values (449,55);
+insert into t (id,a) values (449,56);
+insert into t (id,a) values (449,57);
+insert into t (id,a) values (449,58);
+insert into t (id,a) values (449,59);
+insert into t (id,a) values (449,60);
+insert into t (id,a) values (449,61);
+insert into t (id,a) values (449,62);
+insert into t (id,a) values (449,63);
+insert into t (id,a) values (449,64);
+insert into t (id,a) values (449,65);
+insert into t (id,a) values (449,66);
+insert into t (id,a) values (449,67);
+insert into t (id,a) values (449,68);
+insert into t (id,a) values (449,69);
+insert into t (id,a) values (449,70);
+insert into t (id,a) values (449,71);
+insert into t (id,a) values (449,72);
+insert into t (id,a) values (449,73);
+insert into t (id,a) values (449,74);
+insert into t (id,a) values (449,75);
+insert into t (id,a) values (449,76);
+insert into t (id,a) values (449,77);
+insert into t (id,a) values (449,78);
+insert into t (id,a) values (449,79);
+insert into t (id,a) values (449,80);
+insert into t (id,a) values (449,81);
+insert into t (id,a) values (449,82);
+insert into t (id,a) values (449,83);
+insert into t (id,a) values (449,84);
+insert into t (id,a) values (449,85);
+insert into t (id,a) values (449,86);
+insert into t (id,a) values (449,87);
+insert into t (id,a) values (449,88);
+insert into t (id,a) values (449,89);
+insert into t (id,a) values (449,90);
+insert into t (id,a) values (449,91);
+insert into t (id,a) values (449,92);
+insert into t (id,a) values (449,93);
+insert into t (id,a) values (449,94);
+insert into t (id,a) values (449,95);
+insert into t (id,a) values (449,96);
+insert into t (id,a) values (449,97);
+insert into t (id,a) values (449,98);
+insert into t (id,a) values (449,99);
+insert into t (id,a) values (450,0);
+insert into t (id,a) values (450,1);
+insert into t (id,a) values (450,2);
+insert into t (id,a) values (450,3);
+insert into t (id,a) values (450,4);
+insert into t (id,a) values (450,5);
+insert into t (id,a) values (450,6);
+insert into t (id,a) values (450,7);
+insert into t (id,a) values (450,8);
+insert into t (id,a) values (450,9);
+insert into t (id,a) values (450,10);
+insert into t (id,a) values (450,11);
+insert into t (id,a) values (450,12);
+insert into t (id,a) values (450,13);
+insert into t (id,a) values (450,14);
+insert into t (id,a) values (450,15);
+insert into t (id,a) values (450,16);
+insert into t (id,a) values (450,17);
+insert into t (id,a) values (450,18);
+insert into t (id,a) values (450,19);
+insert into t (id,a) values (450,20);
+insert into t (id,a) values (450,21);
+insert into t (id,a) values (450,22);
+insert into t (id,a) values (450,23);
+insert into t (id,a) values (450,24);
+insert into t (id,a) values (450,25);
+insert into t (id,a) values (450,26);
+insert into t (id,a) values (450,27);
+insert into t (id,a) values (450,28);
+insert into t (id,a) values (450,29);
+insert into t (id,a) values (450,30);
+insert into t (id,a) values (450,31);
+insert into t (id,a) values (450,32);
+insert into t (id,a) values (450,33);
+insert into t (id,a) values (450,34);
+insert into t (id,a) values (450,35);
+insert into t (id,a) values (450,36);
+insert into t (id,a) values (450,37);
+insert into t (id,a) values (450,38);
+insert into t (id,a) values (450,39);
+insert into t (id,a) values (450,40);
+insert into t (id,a) values (450,41);
+insert into t (id,a) values (450,42);
+insert into t (id,a) values (450,43);
+insert into t (id,a) values (450,44);
+insert into t (id,a) values (450,45);
+insert into t (id,a) values (450,46);
+insert into t (id,a) values (450,47);
+insert into t (id,a) values (450,48);
+insert into t (id,a) values (450,49);
+insert into t (id,a) values (450,50);
+insert into t (id,a) values (450,51);
+insert into t (id,a) values (450,52);
+insert into t (id,a) values (450,53);
+insert into t (id,a) values (450,54);
+insert into t (id,a) values (450,55);
+insert into t (id,a) values (450,56);
+insert into t (id,a) values (450,57);
+insert into t (id,a) values (450,58);
+insert into t (id,a) values (450,59);
+insert into t (id,a) values (450,60);
+insert into t (id,a) values (450,61);
+insert into t (id,a) values (450,62);
+insert into t (id,a) values (450,63);
+insert into t (id,a) values (450,64);
+insert into t (id,a) values (450,65);
+insert into t (id,a) values (450,66);
+insert into t (id,a) values (450,67);
+insert into t (id,a) values (450,68);
+insert into t (id,a) values (450,69);
+insert into t (id,a) values (450,70);
+insert into t (id,a) values (450,71);
+insert into t (id,a) values (450,72);
+insert into t (id,a) values (450,73);
+insert into t (id,a) values (450,74);
+insert into t (id,a) values (450,75);
+insert into t (id,a) values (450,76);
+insert into t (id,a) values (450,77);
+insert into t (id,a) values (450,78);
+insert into t (id,a) values (450,79);
+insert into t (id,a) values (450,80);
+insert into t (id,a) values (450,81);
+insert into t (id,a) values (450,82);
+insert into t (id,a) values (450,83);
+insert into t (id,a) values (450,84);
+insert into t (id,a) values (450,85);
+insert into t (id,a) values (450,86);
+insert into t (id,a) values (450,87);
+insert into t (id,a) values (450,88);
+insert into t (id,a) values (450,89);
+insert into t (id,a) values (450,90);
+insert into t (id,a) values (450,91);
+insert into t (id,a) values (450,92);
+insert into t (id,a) values (450,93);
+insert into t (id,a) values (450,94);
+insert into t (id,a) values (450,95);
+insert into t (id,a) values (450,96);
+insert into t (id,a) values (450,97);
+insert into t (id,a) values (450,98);
+insert into t (id,a) values (450,99);
+insert into t (id,a) values (451,0);
+insert into t (id,a) values (451,1);
+insert into t (id,a) values (451,2);
+insert into t (id,a) values (451,3);
+insert into t (id,a) values (451,4);
+insert into t (id,a) values (451,5);
+insert into t (id,a) values (451,6);
+insert into t (id,a) values (451,7);
+insert into t (id,a) values (451,8);
+insert into t (id,a) values (451,9);
+insert into t (id,a) values (451,10);
+insert into t (id,a) values (451,11);
+insert into t (id,a) values (451,12);
+insert into t (id,a) values (451,13);
+insert into t (id,a) values (451,14);
+insert into t (id,a) values (451,15);
+insert into t (id,a) values (451,16);
+insert into t (id,a) values (451,17);
+insert into t (id,a) values (451,18);
+insert into t (id,a) values (451,19);
+insert into t (id,a) values (451,20);
+insert into t (id,a) values (451,21);
+insert into t (id,a) values (451,22);
+insert into t (id,a) values (451,23);
+insert into t (id,a) values (451,24);
+insert into t (id,a) values (451,25);
+insert into t (id,a) values (451,26);
+insert into t (id,a) values (451,27);
+insert into t (id,a) values (451,28);
+insert into t (id,a) values (451,29);
+insert into t (id,a) values (451,30);
+insert into t (id,a) values (451,31);
+insert into t (id,a) values (451,32);
+insert into t (id,a) values (451,33);
+insert into t (id,a) values (451,34);
+insert into t (id,a) values (451,35);
+insert into t (id,a) values (451,36);
+insert into t (id,a) values (451,37);
+insert into t (id,a) values (451,38);
+insert into t (id,a) values (451,39);
+insert into t (id,a) values (451,40);
+insert into t (id,a) values (451,41);
+insert into t (id,a) values (451,42);
+insert into t (id,a) values (451,43);
+insert into t (id,a) values (451,44);
+insert into t (id,a) values (451,45);
+insert into t (id,a) values (451,46);
+insert into t (id,a) values (451,47);
+insert into t (id,a) values (451,48);
+insert into t (id,a) values (451,49);
+insert into t (id,a) values (451,50);
+insert into t (id,a) values (451,51);
+insert into t (id,a) values (451,52);
+insert into t (id,a) values (451,53);
+insert into t (id,a) values (451,54);
+insert into t (id,a) values (451,55);
+insert into t (id,a) values (451,56);
+insert into t (id,a) values (451,57);
+insert into t (id,a) values (451,58);
+insert into t (id,a) values (451,59);
+insert into t (id,a) values (451,60);
+insert into t (id,a) values (451,61);
+insert into t (id,a) values (451,62);
+insert into t (id,a) values (451,63);
+insert into t (id,a) values (451,64);
+insert into t (id,a) values (451,65);
+insert into t (id,a) values (451,66);
+insert into t (id,a) values (451,67);
+insert into t (id,a) values (451,68);
+insert into t (id,a) values (451,69);
+insert into t (id,a) values (451,70);
+insert into t (id,a) values (451,71);
+insert into t (id,a) values (451,72);
+insert into t (id,a) values (451,73);
+insert into t (id,a) values (451,74);
+insert into t (id,a) values (451,75);
+insert into t (id,a) values (451,76);
+insert into t (id,a) values (451,77);
+insert into t (id,a) values (451,78);
+insert into t (id,a) values (451,79);
+insert into t (id,a) values (451,80);
+insert into t (id,a) values (451,81);
+insert into t (id,a) values (451,82);
+insert into t (id,a) values (451,83);
+insert into t (id,a) values (451,84);
+insert into t (id,a) values (451,85);
+insert into t (id,a) values (451,86);
+insert into t (id,a) values (451,87);
+insert into t (id,a) values (451,88);
+insert into t (id,a) values (451,89);
+insert into t (id,a) values (451,90);
+insert into t (id,a) values (451,91);
+insert into t (id,a) values (451,92);
+insert into t (id,a) values (451,93);
+insert into t (id,a) values (451,94);
+insert into t (id,a) values (451,95);
+insert into t (id,a) values (451,96);
+insert into t (id,a) values (451,97);
+insert into t (id,a) values (451,98);
+insert into t (id,a) values (451,99);
+insert into t (id,a) values (452,0);
+insert into t (id,a) values (452,1);
+insert into t (id,a) values (452,2);
+insert into t (id,a) values (452,3);
+insert into t (id,a) values (452,4);
+insert into t (id,a) values (452,5);
+insert into t (id,a) values (452,6);
+insert into t (id,a) values (452,7);
+insert into t (id,a) values (452,8);
+insert into t (id,a) values (452,9);
+insert into t (id,a) values (452,10);
+insert into t (id,a) values (452,11);
+insert into t (id,a) values (452,12);
+insert into t (id,a) values (452,13);
+insert into t (id,a) values (452,14);
+insert into t (id,a) values (452,15);
+insert into t (id,a) values (452,16);
+insert into t (id,a) values (452,17);
+insert into t (id,a) values (452,18);
+insert into t (id,a) values (452,19);
+insert into t (id,a) values (452,20);
+insert into t (id,a) values (452,21);
+insert into t (id,a) values (452,22);
+insert into t (id,a) values (452,23);
+insert into t (id,a) values (452,24);
+insert into t (id,a) values (452,25);
+insert into t (id,a) values (452,26);
+insert into t (id,a) values (452,27);
+insert into t (id,a) values (452,28);
+insert into t (id,a) values (452,29);
+insert into t (id,a) values (452,30);
+insert into t (id,a) values (452,31);
+insert into t (id,a) values (452,32);
+insert into t (id,a) values (452,33);
+insert into t (id,a) values (452,34);
+insert into t (id,a) values (452,35);
+insert into t (id,a) values (452,36);
+insert into t (id,a) values (452,37);
+insert into t (id,a) values (452,38);
+insert into t (id,a) values (452,39);
+insert into t (id,a) values (452,40);
+insert into t (id,a) values (452,41);
+insert into t (id,a) values (452,42);
+insert into t (id,a) values (452,43);
+insert into t (id,a) values (452,44);
+insert into t (id,a) values (452,45);
+insert into t (id,a) values (452,46);
+insert into t (id,a) values (452,47);
+insert into t (id,a) values (452,48);
+insert into t (id,a) values (452,49);
+insert into t (id,a) values (452,50);
+insert into t (id,a) values (452,51);
+insert into t (id,a) values (452,52);
+insert into t (id,a) values (452,53);
+insert into t (id,a) values (452,54);
+insert into t (id,a) values (452,55);
+insert into t (id,a) values (452,56);
+insert into t (id,a) values (452,57);
+insert into t (id,a) values (452,58);
+insert into t (id,a) values (452,59);
+insert into t (id,a) values (452,60);
+insert into t (id,a) values (452,61);
+insert into t (id,a) values (452,62);
+insert into t (id,a) values (452,63);
+insert into t (id,a) values (452,64);
+insert into t (id,a) values (452,65);
+insert into t (id,a) values (452,66);
+insert into t (id,a) values (452,67);
+insert into t (id,a) values (452,68);
+insert into t (id,a) values (452,69);
+insert into t (id,a) values (452,70);
+insert into t (id,a) values (452,71);
+insert into t (id,a) values (452,72);
+insert into t (id,a) values (452,73);
+insert into t (id,a) values (452,74);
+insert into t (id,a) values (452,75);
+insert into t (id,a) values (452,76);
+insert into t (id,a) values (452,77);
+insert into t (id,a) values (452,78);
+insert into t (id,a) values (452,79);
+insert into t (id,a) values (452,80);
+insert into t (id,a) values (452,81);
+insert into t (id,a) values (452,82);
+insert into t (id,a) values (452,83);
+insert into t (id,a) values (452,84);
+insert into t (id,a) values (452,85);
+insert into t (id,a) values (452,86);
+insert into t (id,a) values (452,87);
+insert into t (id,a) values (452,88);
+insert into t (id,a) values (452,89);
+insert into t (id,a) values (452,90);
+insert into t (id,a) values (452,91);
+insert into t (id,a) values (452,92);
+insert into t (id,a) values (452,93);
+insert into t (id,a) values (452,94);
+insert into t (id,a) values (452,95);
+insert into t (id,a) values (452,96);
+insert into t (id,a) values (452,97);
+insert into t (id,a) values (452,98);
+insert into t (id,a) values (452,99);
+insert into t (id,a) values (453,0);
+insert into t (id,a) values (453,1);
+insert into t (id,a) values (453,2);
+insert into t (id,a) values (453,3);
+insert into t (id,a) values (453,4);
+insert into t (id,a) values (453,5);
+insert into t (id,a) values (453,6);
+insert into t (id,a) values (453,7);
+insert into t (id,a) values (453,8);
+insert into t (id,a) values (453,9);
+insert into t (id,a) values (453,10);
+insert into t (id,a) values (453,11);
+insert into t (id,a) values (453,12);
+insert into t (id,a) values (453,13);
+insert into t (id,a) values (453,14);
+insert into t (id,a) values (453,15);
+insert into t (id,a) values (453,16);
+insert into t (id,a) values (453,17);
+insert into t (id,a) values (453,18);
+insert into t (id,a) values (453,19);
+insert into t (id,a) values (453,20);
+insert into t (id,a) values (453,21);
+insert into t (id,a) values (453,22);
+insert into t (id,a) values (453,23);
+insert into t (id,a) values (453,24);
+insert into t (id,a) values (453,25);
+insert into t (id,a) values (453,26);
+insert into t (id,a) values (453,27);
+insert into t (id,a) values (453,28);
+insert into t (id,a) values (453,29);
+insert into t (id,a) values (453,30);
+insert into t (id,a) values (453,31);
+insert into t (id,a) values (453,32);
+insert into t (id,a) values (453,33);
+insert into t (id,a) values (453,34);
+insert into t (id,a) values (453,35);
+insert into t (id,a) values (453,36);
+insert into t (id,a) values (453,37);
+insert into t (id,a) values (453,38);
+insert into t (id,a) values (453,39);
+insert into t (id,a) values (453,40);
+insert into t (id,a) values (453,41);
+insert into t (id,a) values (453,42);
+insert into t (id,a) values (453,43);
+insert into t (id,a) values (453,44);
+insert into t (id,a) values (453,45);
+insert into t (id,a) values (453,46);
+insert into t (id,a) values (453,47);
+insert into t (id,a) values (453,48);
+insert into t (id,a) values (453,49);
+insert into t (id,a) values (453,50);
+insert into t (id,a) values (453,51);
+insert into t (id,a) values (453,52);
+insert into t (id,a) values (453,53);
+insert into t (id,a) values (453,54);
+insert into t (id,a) values (453,55);
+insert into t (id,a) values (453,56);
+insert into t (id,a) values (453,57);
+insert into t (id,a) values (453,58);
+insert into t (id,a) values (453,59);
+insert into t (id,a) values (453,60);
+insert into t (id,a) values (453,61);
+insert into t (id,a) values (453,62);
+insert into t (id,a) values (453,63);
+insert into t (id,a) values (453,64);
+insert into t (id,a) values (453,65);
+insert into t (id,a) values (453,66);
+insert into t (id,a) values (453,67);
+insert into t (id,a) values (453,68);
+insert into t (id,a) values (453,69);
+insert into t (id,a) values (453,70);
+insert into t (id,a) values (453,71);
+insert into t (id,a) values (453,72);
+insert into t (id,a) values (453,73);
+insert into t (id,a) values (453,74);
+insert into t (id,a) values (453,75);
+insert into t (id,a) values (453,76);
+insert into t (id,a) values (453,77);
+insert into t (id,a) values (453,78);
+insert into t (id,a) values (453,79);
+insert into t (id,a) values (453,80);
+insert into t (id,a) values (453,81);
+insert into t (id,a) values (453,82);
+insert into t (id,a) values (453,83);
+insert into t (id,a) values (453,84);
+insert into t (id,a) values (453,85);
+insert into t (id,a) values (453,86);
+insert into t (id,a) values (453,87);
+insert into t (id,a) values (453,88);
+insert into t (id,a) values (453,89);
+insert into t (id,a) values (453,90);
+insert into t (id,a) values (453,91);
+insert into t (id,a) values (453,92);
+insert into t (id,a) values (453,93);
+insert into t (id,a) values (453,94);
+insert into t (id,a) values (453,95);
+insert into t (id,a) values (453,96);
+insert into t (id,a) values (453,97);
+insert into t (id,a) values (453,98);
+insert into t (id,a) values (453,99);
+insert into t (id,a) values (454,0);
+insert into t (id,a) values (454,1);
+insert into t (id,a) values (454,2);
+insert into t (id,a) values (454,3);
+insert into t (id,a) values (454,4);
+insert into t (id,a) values (454,5);
+insert into t (id,a) values (454,6);
+insert into t (id,a) values (454,7);
+insert into t (id,a) values (454,8);
+insert into t (id,a) values (454,9);
+insert into t (id,a) values (454,10);
+insert into t (id,a) values (454,11);
+insert into t (id,a) values (454,12);
+insert into t (id,a) values (454,13);
+insert into t (id,a) values (454,14);
+insert into t (id,a) values (454,15);
+insert into t (id,a) values (454,16);
+insert into t (id,a) values (454,17);
+insert into t (id,a) values (454,18);
+insert into t (id,a) values (454,19);
+insert into t (id,a) values (454,20);
+insert into t (id,a) values (454,21);
+insert into t (id,a) values (454,22);
+insert into t (id,a) values (454,23);
+insert into t (id,a) values (454,24);
+insert into t (id,a) values (454,25);
+insert into t (id,a) values (454,26);
+insert into t (id,a) values (454,27);
+insert into t (id,a) values (454,28);
+insert into t (id,a) values (454,29);
+insert into t (id,a) values (454,30);
+insert into t (id,a) values (454,31);
+insert into t (id,a) values (454,32);
+insert into t (id,a) values (454,33);
+insert into t (id,a) values (454,34);
+insert into t (id,a) values (454,35);
+insert into t (id,a) values (454,36);
+insert into t (id,a) values (454,37);
+insert into t (id,a) values (454,38);
+insert into t (id,a) values (454,39);
+insert into t (id,a) values (454,40);
+insert into t (id,a) values (454,41);
+insert into t (id,a) values (454,42);
+insert into t (id,a) values (454,43);
+insert into t (id,a) values (454,44);
+insert into t (id,a) values (454,45);
+insert into t (id,a) values (454,46);
+insert into t (id,a) values (454,47);
+insert into t (id,a) values (454,48);
+insert into t (id,a) values (454,49);
+insert into t (id,a) values (454,50);
+insert into t (id,a) values (454,51);
+insert into t (id,a) values (454,52);
+insert into t (id,a) values (454,53);
+insert into t (id,a) values (454,54);
+insert into t (id,a) values (454,55);
+insert into t (id,a) values (454,56);
+insert into t (id,a) values (454,57);
+insert into t (id,a) values (454,58);
+insert into t (id,a) values (454,59);
+insert into t (id,a) values (454,60);
+insert into t (id,a) values (454,61);
+insert into t (id,a) values (454,62);
+insert into t (id,a) values (454,63);
+insert into t (id,a) values (454,64);
+insert into t (id,a) values (454,65);
+insert into t (id,a) values (454,66);
+insert into t (id,a) values (454,67);
+insert into t (id,a) values (454,68);
+insert into t (id,a) values (454,69);
+insert into t (id,a) values (454,70);
+insert into t (id,a) values (454,71);
+insert into t (id,a) values (454,72);
+insert into t (id,a) values (454,73);
+insert into t (id,a) values (454,74);
+insert into t (id,a) values (454,75);
+insert into t (id,a) values (454,76);
+insert into t (id,a) values (454,77);
+insert into t (id,a) values (454,78);
+insert into t (id,a) values (454,79);
+insert into t (id,a) values (454,80);
+insert into t (id,a) values (454,81);
+insert into t (id,a) values (454,82);
+insert into t (id,a) values (454,83);
+insert into t (id,a) values (454,84);
+insert into t (id,a) values (454,85);
+insert into t (id,a) values (454,86);
+insert into t (id,a) values (454,87);
+insert into t (id,a) values (454,88);
+insert into t (id,a) values (454,89);
+insert into t (id,a) values (454,90);
+insert into t (id,a) values (454,91);
+insert into t (id,a) values (454,92);
+insert into t (id,a) values (454,93);
+insert into t (id,a) values (454,94);
+insert into t (id,a) values (454,95);
+insert into t (id,a) values (454,96);
+insert into t (id,a) values (454,97);
+insert into t (id,a) values (454,98);
+insert into t (id,a) values (454,99);
+insert into t (id,a) values (455,0);
+insert into t (id,a) values (455,1);
+insert into t (id,a) values (455,2);
+insert into t (id,a) values (455,3);
+insert into t (id,a) values (455,4);
+insert into t (id,a) values (455,5);
+insert into t (id,a) values (455,6);
+insert into t (id,a) values (455,7);
+insert into t (id,a) values (455,8);
+insert into t (id,a) values (455,9);
+insert into t (id,a) values (455,10);
+insert into t (id,a) values (455,11);
+insert into t (id,a) values (455,12);
+insert into t (id,a) values (455,13);
+insert into t (id,a) values (455,14);
+insert into t (id,a) values (455,15);
+insert into t (id,a) values (455,16);
+insert into t (id,a) values (455,17);
+insert into t (id,a) values (455,18);
+insert into t (id,a) values (455,19);
+insert into t (id,a) values (455,20);
+insert into t (id,a) values (455,21);
+insert into t (id,a) values (455,22);
+insert into t (id,a) values (455,23);
+insert into t (id,a) values (455,24);
+insert into t (id,a) values (455,25);
+insert into t (id,a) values (455,26);
+insert into t (id,a) values (455,27);
+insert into t (id,a) values (455,28);
+insert into t (id,a) values (455,29);
+insert into t (id,a) values (455,30);
+insert into t (id,a) values (455,31);
+insert into t (id,a) values (455,32);
+insert into t (id,a) values (455,33);
+insert into t (id,a) values (455,34);
+insert into t (id,a) values (455,35);
+insert into t (id,a) values (455,36);
+insert into t (id,a) values (455,37);
+insert into t (id,a) values (455,38);
+insert into t (id,a) values (455,39);
+insert into t (id,a) values (455,40);
+insert into t (id,a) values (455,41);
+insert into t (id,a) values (455,42);
+insert into t (id,a) values (455,43);
+insert into t (id,a) values (455,44);
+insert into t (id,a) values (455,45);
+insert into t (id,a) values (455,46);
+insert into t (id,a) values (455,47);
+insert into t (id,a) values (455,48);
+insert into t (id,a) values (455,49);
+insert into t (id,a) values (455,50);
+insert into t (id,a) values (455,51);
+insert into t (id,a) values (455,52);
+insert into t (id,a) values (455,53);
+insert into t (id,a) values (455,54);
+insert into t (id,a) values (455,55);
+insert into t (id,a) values (455,56);
+insert into t (id,a) values (455,57);
+insert into t (id,a) values (455,58);
+insert into t (id,a) values (455,59);
+insert into t (id,a) values (455,60);
+insert into t (id,a) values (455,61);
+insert into t (id,a) values (455,62);
+insert into t (id,a) values (455,63);
+insert into t (id,a) values (455,64);
+insert into t (id,a) values (455,65);
+insert into t (id,a) values (455,66);
+insert into t (id,a) values (455,67);
+insert into t (id,a) values (455,68);
+insert into t (id,a) values (455,69);
+insert into t (id,a) values (455,70);
+insert into t (id,a) values (455,71);
+insert into t (id,a) values (455,72);
+insert into t (id,a) values (455,73);
+insert into t (id,a) values (455,74);
+insert into t (id,a) values (455,75);
+insert into t (id,a) values (455,76);
+insert into t (id,a) values (455,77);
+insert into t (id,a) values (455,78);
+insert into t (id,a) values (455,79);
+insert into t (id,a) values (455,80);
+insert into t (id,a) values (455,81);
+insert into t (id,a) values (455,82);
+insert into t (id,a) values (455,83);
+insert into t (id,a) values (455,84);
+insert into t (id,a) values (455,85);
+insert into t (id,a) values (455,86);
+insert into t (id,a) values (455,87);
+insert into t (id,a) values (455,88);
+insert into t (id,a) values (455,89);
+insert into t (id,a) values (455,90);
+insert into t (id,a) values (455,91);
+insert into t (id,a) values (455,92);
+insert into t (id,a) values (455,93);
+insert into t (id,a) values (455,94);
+insert into t (id,a) values (455,95);
+insert into t (id,a) values (455,96);
+insert into t (id,a) values (455,97);
+insert into t (id,a) values (455,98);
+insert into t (id,a) values (455,99);
+insert into t (id,a) values (456,0);
+insert into t (id,a) values (456,1);
+insert into t (id,a) values (456,2);
+insert into t (id,a) values (456,3);
+insert into t (id,a) values (456,4);
+insert into t (id,a) values (456,5);
+insert into t (id,a) values (456,6);
+insert into t (id,a) values (456,7);
+insert into t (id,a) values (456,8);
+insert into t (id,a) values (456,9);
+insert into t (id,a) values (456,10);
+insert into t (id,a) values (456,11);
+insert into t (id,a) values (456,12);
+insert into t (id,a) values (456,13);
+insert into t (id,a) values (456,14);
+insert into t (id,a) values (456,15);
+insert into t (id,a) values (456,16);
+insert into t (id,a) values (456,17);
+insert into t (id,a) values (456,18);
+insert into t (id,a) values (456,19);
+insert into t (id,a) values (456,20);
+insert into t (id,a) values (456,21);
+insert into t (id,a) values (456,22);
+insert into t (id,a) values (456,23);
+insert into t (id,a) values (456,24);
+insert into t (id,a) values (456,25);
+insert into t (id,a) values (456,26);
+insert into t (id,a) values (456,27);
+insert into t (id,a) values (456,28);
+insert into t (id,a) values (456,29);
+insert into t (id,a) values (456,30);
+insert into t (id,a) values (456,31);
+insert into t (id,a) values (456,32);
+insert into t (id,a) values (456,33);
+insert into t (id,a) values (456,34);
+insert into t (id,a) values (456,35);
+insert into t (id,a) values (456,36);
+insert into t (id,a) values (456,37);
+insert into t (id,a) values (456,38);
+insert into t (id,a) values (456,39);
+insert into t (id,a) values (456,40);
+insert into t (id,a) values (456,41);
+insert into t (id,a) values (456,42);
+insert into t (id,a) values (456,43);
+insert into t (id,a) values (456,44);
+insert into t (id,a) values (456,45);
+insert into t (id,a) values (456,46);
+insert into t (id,a) values (456,47);
+insert into t (id,a) values (456,48);
+insert into t (id,a) values (456,49);
+insert into t (id,a) values (456,50);
+insert into t (id,a) values (456,51);
+insert into t (id,a) values (456,52);
+insert into t (id,a) values (456,53);
+insert into t (id,a) values (456,54);
+insert into t (id,a) values (456,55);
+insert into t (id,a) values (456,56);
+insert into t (id,a) values (456,57);
+insert into t (id,a) values (456,58);
+insert into t (id,a) values (456,59);
+insert into t (id,a) values (456,60);
+insert into t (id,a) values (456,61);
+insert into t (id,a) values (456,62);
+insert into t (id,a) values (456,63);
+insert into t (id,a) values (456,64);
+insert into t (id,a) values (456,65);
+insert into t (id,a) values (456,66);
+insert into t (id,a) values (456,67);
+insert into t (id,a) values (456,68);
+insert into t (id,a) values (456,69);
+insert into t (id,a) values (456,70);
+insert into t (id,a) values (456,71);
+insert into t (id,a) values (456,72);
+insert into t (id,a) values (456,73);
+insert into t (id,a) values (456,74);
+insert into t (id,a) values (456,75);
+insert into t (id,a) values (456,76);
+insert into t (id,a) values (456,77);
+insert into t (id,a) values (456,78);
+insert into t (id,a) values (456,79);
+insert into t (id,a) values (456,80);
+insert into t (id,a) values (456,81);
+insert into t (id,a) values (456,82);
+insert into t (id,a) values (456,83);
+insert into t (id,a) values (456,84);
+insert into t (id,a) values (456,85);
+insert into t (id,a) values (456,86);
+insert into t (id,a) values (456,87);
+insert into t (id,a) values (456,88);
+insert into t (id,a) values (456,89);
+insert into t (id,a) values (456,90);
+insert into t (id,a) values (456,91);
+insert into t (id,a) values (456,92);
+insert into t (id,a) values (456,93);
+insert into t (id,a) values (456,94);
+insert into t (id,a) values (456,95);
+insert into t (id,a) values (456,96);
+insert into t (id,a) values (456,97);
+insert into t (id,a) values (456,98);
+insert into t (id,a) values (456,99);
+insert into t (id,a) values (457,0);
+insert into t (id,a) values (457,1);
+insert into t (id,a) values (457,2);
+insert into t (id,a) values (457,3);
+insert into t (id,a) values (457,4);
+insert into t (id,a) values (457,5);
+insert into t (id,a) values (457,6);
+insert into t (id,a) values (457,7);
+insert into t (id,a) values (457,8);
+insert into t (id,a) values (457,9);
+insert into t (id,a) values (457,10);
+insert into t (id,a) values (457,11);
+insert into t (id,a) values (457,12);
+insert into t (id,a) values (457,13);
+insert into t (id,a) values (457,14);
+insert into t (id,a) values (457,15);
+insert into t (id,a) values (457,16);
+insert into t (id,a) values (457,17);
+insert into t (id,a) values (457,18);
+insert into t (id,a) values (457,19);
+insert into t (id,a) values (457,20);
+insert into t (id,a) values (457,21);
+insert into t (id,a) values (457,22);
+insert into t (id,a) values (457,23);
+insert into t (id,a) values (457,24);
+insert into t (id,a) values (457,25);
+insert into t (id,a) values (457,26);
+insert into t (id,a) values (457,27);
+insert into t (id,a) values (457,28);
+insert into t (id,a) values (457,29);
+insert into t (id,a) values (457,30);
+insert into t (id,a) values (457,31);
+insert into t (id,a) values (457,32);
+insert into t (id,a) values (457,33);
+insert into t (id,a) values (457,34);
+insert into t (id,a) values (457,35);
+insert into t (id,a) values (457,36);
+insert into t (id,a) values (457,37);
+insert into t (id,a) values (457,38);
+insert into t (id,a) values (457,39);
+insert into t (id,a) values (457,40);
+insert into t (id,a) values (457,41);
+insert into t (id,a) values (457,42);
+insert into t (id,a) values (457,43);
+insert into t (id,a) values (457,44);
+insert into t (id,a) values (457,45);
+insert into t (id,a) values (457,46);
+insert into t (id,a) values (457,47);
+insert into t (id,a) values (457,48);
+insert into t (id,a) values (457,49);
+insert into t (id,a) values (457,50);
+insert into t (id,a) values (457,51);
+insert into t (id,a) values (457,52);
+insert into t (id,a) values (457,53);
+insert into t (id,a) values (457,54);
+insert into t (id,a) values (457,55);
+insert into t (id,a) values (457,56);
+insert into t (id,a) values (457,57);
+insert into t (id,a) values (457,58);
+insert into t (id,a) values (457,59);
+insert into t (id,a) values (457,60);
+insert into t (id,a) values (457,61);
+insert into t (id,a) values (457,62);
+insert into t (id,a) values (457,63);
+insert into t (id,a) values (457,64);
+insert into t (id,a) values (457,65);
+insert into t (id,a) values (457,66);
+insert into t (id,a) values (457,67);
+insert into t (id,a) values (457,68);
+insert into t (id,a) values (457,69);
+insert into t (id,a) values (457,70);
+insert into t (id,a) values (457,71);
+insert into t (id,a) values (457,72);
+insert into t (id,a) values (457,73);
+insert into t (id,a) values (457,74);
+insert into t (id,a) values (457,75);
+insert into t (id,a) values (457,76);
+insert into t (id,a) values (457,77);
+insert into t (id,a) values (457,78);
+insert into t (id,a) values (457,79);
+insert into t (id,a) values (457,80);
+insert into t (id,a) values (457,81);
+insert into t (id,a) values (457,82);
+insert into t (id,a) values (457,83);
+insert into t (id,a) values (457,84);
+insert into t (id,a) values (457,85);
+insert into t (id,a) values (457,86);
+insert into t (id,a) values (457,87);
+insert into t (id,a) values (457,88);
+insert into t (id,a) values (457,89);
+insert into t (id,a) values (457,90);
+insert into t (id,a) values (457,91);
+insert into t (id,a) values (457,92);
+insert into t (id,a) values (457,93);
+insert into t (id,a) values (457,94);
+insert into t (id,a) values (457,95);
+insert into t (id,a) values (457,96);
+insert into t (id,a) values (457,97);
+insert into t (id,a) values (457,98);
+insert into t (id,a) values (457,99);
+insert into t (id,a) values (458,0);
+insert into t (id,a) values (458,1);
+insert into t (id,a) values (458,2);
+insert into t (id,a) values (458,3);
+insert into t (id,a) values (458,4);
+insert into t (id,a) values (458,5);
+insert into t (id,a) values (458,6);
+insert into t (id,a) values (458,7);
+insert into t (id,a) values (458,8);
+insert into t (id,a) values (458,9);
+insert into t (id,a) values (458,10);
+insert into t (id,a) values (458,11);
+insert into t (id,a) values (458,12);
+insert into t (id,a) values (458,13);
+insert into t (id,a) values (458,14);
+insert into t (id,a) values (458,15);
+insert into t (id,a) values (458,16);
+insert into t (id,a) values (458,17);
+insert into t (id,a) values (458,18);
+insert into t (id,a) values (458,19);
+insert into t (id,a) values (458,20);
+insert into t (id,a) values (458,21);
+insert into t (id,a) values (458,22);
+insert into t (id,a) values (458,23);
+insert into t (id,a) values (458,24);
+insert into t (id,a) values (458,25);
+insert into t (id,a) values (458,26);
+insert into t (id,a) values (458,27);
+insert into t (id,a) values (458,28);
+insert into t (id,a) values (458,29);
+insert into t (id,a) values (458,30);
+insert into t (id,a) values (458,31);
+insert into t (id,a) values (458,32);
+insert into t (id,a) values (458,33);
+insert into t (id,a) values (458,34);
+insert into t (id,a) values (458,35);
+insert into t (id,a) values (458,36);
+insert into t (id,a) values (458,37);
+insert into t (id,a) values (458,38);
+insert into t (id,a) values (458,39);
+insert into t (id,a) values (458,40);
+insert into t (id,a) values (458,41);
+insert into t (id,a) values (458,42);
+insert into t (id,a) values (458,43);
+insert into t (id,a) values (458,44);
+insert into t (id,a) values (458,45);
+insert into t (id,a) values (458,46);
+insert into t (id,a) values (458,47);
+insert into t (id,a) values (458,48);
+insert into t (id,a) values (458,49);
+insert into t (id,a) values (458,50);
+insert into t (id,a) values (458,51);
+insert into t (id,a) values (458,52);
+insert into t (id,a) values (458,53);
+insert into t (id,a) values (458,54);
+insert into t (id,a) values (458,55);
+insert into t (id,a) values (458,56);
+insert into t (id,a) values (458,57);
+insert into t (id,a) values (458,58);
+insert into t (id,a) values (458,59);
+insert into t (id,a) values (458,60);
+insert into t (id,a) values (458,61);
+insert into t (id,a) values (458,62);
+insert into t (id,a) values (458,63);
+insert into t (id,a) values (458,64);
+insert into t (id,a) values (458,65);
+insert into t (id,a) values (458,66);
+insert into t (id,a) values (458,67);
+insert into t (id,a) values (458,68);
+insert into t (id,a) values (458,69);
+insert into t (id,a) values (458,70);
+insert into t (id,a) values (458,71);
+insert into t (id,a) values (458,72);
+insert into t (id,a) values (458,73);
+insert into t (id,a) values (458,74);
+insert into t (id,a) values (458,75);
+insert into t (id,a) values (458,76);
+insert into t (id,a) values (458,77);
+insert into t (id,a) values (458,78);
+insert into t (id,a) values (458,79);
+insert into t (id,a) values (458,80);
+insert into t (id,a) values (458,81);
+insert into t (id,a) values (458,82);
+insert into t (id,a) values (458,83);
+insert into t (id,a) values (458,84);
+insert into t (id,a) values (458,85);
+insert into t (id,a) values (458,86);
+insert into t (id,a) values (458,87);
+insert into t (id,a) values (458,88);
+insert into t (id,a) values (458,89);
+insert into t (id,a) values (458,90);
+insert into t (id,a) values (458,91);
+insert into t (id,a) values (458,92);
+insert into t (id,a) values (458,93);
+insert into t (id,a) values (458,94);
+insert into t (id,a) values (458,95);
+insert into t (id,a) values (458,96);
+insert into t (id,a) values (458,97);
+insert into t (id,a) values (458,98);
+insert into t (id,a) values (458,99);
+insert into t (id,a) values (459,0);
+insert into t (id,a) values (459,1);
+insert into t (id,a) values (459,2);
+insert into t (id,a) values (459,3);
+insert into t (id,a) values (459,4);
+insert into t (id,a) values (459,5);
+insert into t (id,a) values (459,6);
+insert into t (id,a) values (459,7);
+insert into t (id,a) values (459,8);
+insert into t (id,a) values (459,9);
+insert into t (id,a) values (459,10);
+insert into t (id,a) values (459,11);
+insert into t (id,a) values (459,12);
+insert into t (id,a) values (459,13);
+insert into t (id,a) values (459,14);
+insert into t (id,a) values (459,15);
+insert into t (id,a) values (459,16);
+insert into t (id,a) values (459,17);
+insert into t (id,a) values (459,18);
+insert into t (id,a) values (459,19);
+insert into t (id,a) values (459,20);
+insert into t (id,a) values (459,21);
+insert into t (id,a) values (459,22);
+insert into t (id,a) values (459,23);
+insert into t (id,a) values (459,24);
+insert into t (id,a) values (459,25);
+insert into t (id,a) values (459,26);
+insert into t (id,a) values (459,27);
+insert into t (id,a) values (459,28);
+insert into t (id,a) values (459,29);
+insert into t (id,a) values (459,30);
+insert into t (id,a) values (459,31);
+insert into t (id,a) values (459,32);
+insert into t (id,a) values (459,33);
+insert into t (id,a) values (459,34);
+insert into t (id,a) values (459,35);
+insert into t (id,a) values (459,36);
+insert into t (id,a) values (459,37);
+insert into t (id,a) values (459,38);
+insert into t (id,a) values (459,39);
+insert into t (id,a) values (459,40);
+insert into t (id,a) values (459,41);
+insert into t (id,a) values (459,42);
+insert into t (id,a) values (459,43);
+insert into t (id,a) values (459,44);
+insert into t (id,a) values (459,45);
+insert into t (id,a) values (459,46);
+insert into t (id,a) values (459,47);
+insert into t (id,a) values (459,48);
+insert into t (id,a) values (459,49);
+insert into t (id,a) values (459,50);
+insert into t (id,a) values (459,51);
+insert into t (id,a) values (459,52);
+insert into t (id,a) values (459,53);
+insert into t (id,a) values (459,54);
+insert into t (id,a) values (459,55);
+insert into t (id,a) values (459,56);
+insert into t (id,a) values (459,57);
+insert into t (id,a) values (459,58);
+insert into t (id,a) values (459,59);
+insert into t (id,a) values (459,60);
+insert into t (id,a) values (459,61);
+insert into t (id,a) values (459,62);
+insert into t (id,a) values (459,63);
+insert into t (id,a) values (459,64);
+insert into t (id,a) values (459,65);
+insert into t (id,a) values (459,66);
+insert into t (id,a) values (459,67);
+insert into t (id,a) values (459,68);
+insert into t (id,a) values (459,69);
+insert into t (id,a) values (459,70);
+insert into t (id,a) values (459,71);
+insert into t (id,a) values (459,72);
+insert into t (id,a) values (459,73);
+insert into t (id,a) values (459,74);
+insert into t (id,a) values (459,75);
+insert into t (id,a) values (459,76);
+insert into t (id,a) values (459,77);
+insert into t (id,a) values (459,78);
+insert into t (id,a) values (459,79);
+insert into t (id,a) values (459,80);
+insert into t (id,a) values (459,81);
+insert into t (id,a) values (459,82);
+insert into t (id,a) values (459,83);
+insert into t (id,a) values (459,84);
+insert into t (id,a) values (459,85);
+insert into t (id,a) values (459,86);
+insert into t (id,a) values (459,87);
+insert into t (id,a) values (459,88);
+insert into t (id,a) values (459,89);
+insert into t (id,a) values (459,90);
+insert into t (id,a) values (459,91);
+insert into t (id,a) values (459,92);
+insert into t (id,a) values (459,93);
+insert into t (id,a) values (459,94);
+insert into t (id,a) values (459,95);
+insert into t (id,a) values (459,96);
+insert into t (id,a) values (459,97);
+insert into t (id,a) values (459,98);
+insert into t (id,a) values (459,99);
+insert into t (id,a) values (460,0);
+insert into t (id,a) values (460,1);
+insert into t (id,a) values (460,2);
+insert into t (id,a) values (460,3);
+insert into t (id,a) values (460,4);
+insert into t (id,a) values (460,5);
+insert into t (id,a) values (460,6);
+insert into t (id,a) values (460,7);
+insert into t (id,a) values (460,8);
+insert into t (id,a) values (460,9);
+insert into t (id,a) values (460,10);
+insert into t (id,a) values (460,11);
+insert into t (id,a) values (460,12);
+insert into t (id,a) values (460,13);
+insert into t (id,a) values (460,14);
+insert into t (id,a) values (460,15);
+insert into t (id,a) values (460,16);
+insert into t (id,a) values (460,17);
+insert into t (id,a) values (460,18);
+insert into t (id,a) values (460,19);
+insert into t (id,a) values (460,20);
+insert into t (id,a) values (460,21);
+insert into t (id,a) values (460,22);
+insert into t (id,a) values (460,23);
+insert into t (id,a) values (460,24);
+insert into t (id,a) values (460,25);
+insert into t (id,a) values (460,26);
+insert into t (id,a) values (460,27);
+insert into t (id,a) values (460,28);
+insert into t (id,a) values (460,29);
+insert into t (id,a) values (460,30);
+insert into t (id,a) values (460,31);
+insert into t (id,a) values (460,32);
+insert into t (id,a) values (460,33);
+insert into t (id,a) values (460,34);
+insert into t (id,a) values (460,35);
+insert into t (id,a) values (460,36);
+insert into t (id,a) values (460,37);
+insert into t (id,a) values (460,38);
+insert into t (id,a) values (460,39);
+insert into t (id,a) values (460,40);
+insert into t (id,a) values (460,41);
+insert into t (id,a) values (460,42);
+insert into t (id,a) values (460,43);
+insert into t (id,a) values (460,44);
+insert into t (id,a) values (460,45);
+insert into t (id,a) values (460,46);
+insert into t (id,a) values (460,47);
+insert into t (id,a) values (460,48);
+insert into t (id,a) values (460,49);
+insert into t (id,a) values (460,50);
+insert into t (id,a) values (460,51);
+insert into t (id,a) values (460,52);
+insert into t (id,a) values (460,53);
+insert into t (id,a) values (460,54);
+insert into t (id,a) values (460,55);
+insert into t (id,a) values (460,56);
+insert into t (id,a) values (460,57);
+insert into t (id,a) values (460,58);
+insert into t (id,a) values (460,59);
+insert into t (id,a) values (460,60);
+insert into t (id,a) values (460,61);
+insert into t (id,a) values (460,62);
+insert into t (id,a) values (460,63);
+insert into t (id,a) values (460,64);
+insert into t (id,a) values (460,65);
+insert into t (id,a) values (460,66);
+insert into t (id,a) values (460,67);
+insert into t (id,a) values (460,68);
+insert into t (id,a) values (460,69);
+insert into t (id,a) values (460,70);
+insert into t (id,a) values (460,71);
+insert into t (id,a) values (460,72);
+insert into t (id,a) values (460,73);
+insert into t (id,a) values (460,74);
+insert into t (id,a) values (460,75);
+insert into t (id,a) values (460,76);
+insert into t (id,a) values (460,77);
+insert into t (id,a) values (460,78);
+insert into t (id,a) values (460,79);
+insert into t (id,a) values (460,80);
+insert into t (id,a) values (460,81);
+insert into t (id,a) values (460,82);
+insert into t (id,a) values (460,83);
+insert into t (id,a) values (460,84);
+insert into t (id,a) values (460,85);
+insert into t (id,a) values (460,86);
+insert into t (id,a) values (460,87);
+insert into t (id,a) values (460,88);
+insert into t (id,a) values (460,89);
+insert into t (id,a) values (460,90);
+insert into t (id,a) values (460,91);
+insert into t (id,a) values (460,92);
+insert into t (id,a) values (460,93);
+insert into t (id,a) values (460,94);
+insert into t (id,a) values (460,95);
+insert into t (id,a) values (460,96);
+insert into t (id,a) values (460,97);
+insert into t (id,a) values (460,98);
+insert into t (id,a) values (460,99);
+insert into t (id,a) values (461,0);
+insert into t (id,a) values (461,1);
+insert into t (id,a) values (461,2);
+insert into t (id,a) values (461,3);
+insert into t (id,a) values (461,4);
+insert into t (id,a) values (461,5);
+insert into t (id,a) values (461,6);
+insert into t (id,a) values (461,7);
+insert into t (id,a) values (461,8);
+insert into t (id,a) values (461,9);
+insert into t (id,a) values (461,10);
+insert into t (id,a) values (461,11);
+insert into t (id,a) values (461,12);
+insert into t (id,a) values (461,13);
+insert into t (id,a) values (461,14);
+insert into t (id,a) values (461,15);
+insert into t (id,a) values (461,16);
+insert into t (id,a) values (461,17);
+insert into t (id,a) values (461,18);
+insert into t (id,a) values (461,19);
+insert into t (id,a) values (461,20);
+insert into t (id,a) values (461,21);
+insert into t (id,a) values (461,22);
+insert into t (id,a) values (461,23);
+insert into t (id,a) values (461,24);
+insert into t (id,a) values (461,25);
+insert into t (id,a) values (461,26);
+insert into t (id,a) values (461,27);
+insert into t (id,a) values (461,28);
+insert into t (id,a) values (461,29);
+insert into t (id,a) values (461,30);
+insert into t (id,a) values (461,31);
+insert into t (id,a) values (461,32);
+insert into t (id,a) values (461,33);
+insert into t (id,a) values (461,34);
+insert into t (id,a) values (461,35);
+insert into t (id,a) values (461,36);
+insert into t (id,a) values (461,37);
+insert into t (id,a) values (461,38);
+insert into t (id,a) values (461,39);
+insert into t (id,a) values (461,40);
+insert into t (id,a) values (461,41);
+insert into t (id,a) values (461,42);
+insert into t (id,a) values (461,43);
+insert into t (id,a) values (461,44);
+insert into t (id,a) values (461,45);
+insert into t (id,a) values (461,46);
+insert into t (id,a) values (461,47);
+insert into t (id,a) values (461,48);
+insert into t (id,a) values (461,49);
+insert into t (id,a) values (461,50);
+insert into t (id,a) values (461,51);
+insert into t (id,a) values (461,52);
+insert into t (id,a) values (461,53);
+insert into t (id,a) values (461,54);
+insert into t (id,a) values (461,55);
+insert into t (id,a) values (461,56);
+insert into t (id,a) values (461,57);
+insert into t (id,a) values (461,58);
+insert into t (id,a) values (461,59);
+insert into t (id,a) values (461,60);
+insert into t (id,a) values (461,61);
+insert into t (id,a) values (461,62);
+insert into t (id,a) values (461,63);
+insert into t (id,a) values (461,64);
+insert into t (id,a) values (461,65);
+insert into t (id,a) values (461,66);
+insert into t (id,a) values (461,67);
+insert into t (id,a) values (461,68);
+insert into t (id,a) values (461,69);
+insert into t (id,a) values (461,70);
+insert into t (id,a) values (461,71);
+insert into t (id,a) values (461,72);
+insert into t (id,a) values (461,73);
+insert into t (id,a) values (461,74);
+insert into t (id,a) values (461,75);
+insert into t (id,a) values (461,76);
+insert into t (id,a) values (461,77);
+insert into t (id,a) values (461,78);
+insert into t (id,a) values (461,79);
+insert into t (id,a) values (461,80);
+insert into t (id,a) values (461,81);
+insert into t (id,a) values (461,82);
+insert into t (id,a) values (461,83);
+insert into t (id,a) values (461,84);
+insert into t (id,a) values (461,85);
+insert into t (id,a) values (461,86);
+insert into t (id,a) values (461,87);
+insert into t (id,a) values (461,88);
+insert into t (id,a) values (461,89);
+insert into t (id,a) values (461,90);
+insert into t (id,a) values (461,91);
+insert into t (id,a) values (461,92);
+insert into t (id,a) values (461,93);
+insert into t (id,a) values (461,94);
+insert into t (id,a) values (461,95);
+insert into t (id,a) values (461,96);
+insert into t (id,a) values (461,97);
+insert into t (id,a) values (461,98);
+insert into t (id,a) values (461,99);
+insert into t (id,a) values (462,0);
+insert into t (id,a) values (462,1);
+insert into t (id,a) values (462,2);
+insert into t (id,a) values (462,3);
+insert into t (id,a) values (462,4);
+insert into t (id,a) values (462,5);
+insert into t (id,a) values (462,6);
+insert into t (id,a) values (462,7);
+insert into t (id,a) values (462,8);
+insert into t (id,a) values (462,9);
+insert into t (id,a) values (462,10);
+insert into t (id,a) values (462,11);
+insert into t (id,a) values (462,12);
+insert into t (id,a) values (462,13);
+insert into t (id,a) values (462,14);
+insert into t (id,a) values (462,15);
+insert into t (id,a) values (462,16);
+insert into t (id,a) values (462,17);
+insert into t (id,a) values (462,18);
+insert into t (id,a) values (462,19);
+insert into t (id,a) values (462,20);
+insert into t (id,a) values (462,21);
+insert into t (id,a) values (462,22);
+insert into t (id,a) values (462,23);
+insert into t (id,a) values (462,24);
+insert into t (id,a) values (462,25);
+insert into t (id,a) values (462,26);
+insert into t (id,a) values (462,27);
+insert into t (id,a) values (462,28);
+insert into t (id,a) values (462,29);
+insert into t (id,a) values (462,30);
+insert into t (id,a) values (462,31);
+insert into t (id,a) values (462,32);
+insert into t (id,a) values (462,33);
+insert into t (id,a) values (462,34);
+insert into t (id,a) values (462,35);
+insert into t (id,a) values (462,36);
+insert into t (id,a) values (462,37);
+insert into t (id,a) values (462,38);
+insert into t (id,a) values (462,39);
+insert into t (id,a) values (462,40);
+insert into t (id,a) values (462,41);
+insert into t (id,a) values (462,42);
+insert into t (id,a) values (462,43);
+insert into t (id,a) values (462,44);
+insert into t (id,a) values (462,45);
+insert into t (id,a) values (462,46);
+insert into t (id,a) values (462,47);
+insert into t (id,a) values (462,48);
+insert into t (id,a) values (462,49);
+insert into t (id,a) values (462,50);
+insert into t (id,a) values (462,51);
+insert into t (id,a) values (462,52);
+insert into t (id,a) values (462,53);
+insert into t (id,a) values (462,54);
+insert into t (id,a) values (462,55);
+insert into t (id,a) values (462,56);
+insert into t (id,a) values (462,57);
+insert into t (id,a) values (462,58);
+insert into t (id,a) values (462,59);
+insert into t (id,a) values (462,60);
+insert into t (id,a) values (462,61);
+insert into t (id,a) values (462,62);
+insert into t (id,a) values (462,63);
+insert into t (id,a) values (462,64);
+insert into t (id,a) values (462,65);
+insert into t (id,a) values (462,66);
+insert into t (id,a) values (462,67);
+insert into t (id,a) values (462,68);
+insert into t (id,a) values (462,69);
+insert into t (id,a) values (462,70);
+insert into t (id,a) values (462,71);
+insert into t (id,a) values (462,72);
+insert into t (id,a) values (462,73);
+insert into t (id,a) values (462,74);
+insert into t (id,a) values (462,75);
+insert into t (id,a) values (462,76);
+insert into t (id,a) values (462,77);
+insert into t (id,a) values (462,78);
+insert into t (id,a) values (462,79);
+insert into t (id,a) values (462,80);
+insert into t (id,a) values (462,81);
+insert into t (id,a) values (462,82);
+insert into t (id,a) values (462,83);
+insert into t (id,a) values (462,84);
+insert into t (id,a) values (462,85);
+insert into t (id,a) values (462,86);
+insert into t (id,a) values (462,87);
+insert into t (id,a) values (462,88);
+insert into t (id,a) values (462,89);
+insert into t (id,a) values (462,90);
+insert into t (id,a) values (462,91);
+insert into t (id,a) values (462,92);
+insert into t (id,a) values (462,93);
+insert into t (id,a) values (462,94);
+insert into t (id,a) values (462,95);
+insert into t (id,a) values (462,96);
+insert into t (id,a) values (462,97);
+insert into t (id,a) values (462,98);
+insert into t (id,a) values (462,99);
+insert into t (id,a) values (463,0);
+insert into t (id,a) values (463,1);
+insert into t (id,a) values (463,2);
+insert into t (id,a) values (463,3);
+insert into t (id,a) values (463,4);
+insert into t (id,a) values (463,5);
+insert into t (id,a) values (463,6);
+insert into t (id,a) values (463,7);
+insert into t (id,a) values (463,8);
+insert into t (id,a) values (463,9);
+insert into t (id,a) values (463,10);
+insert into t (id,a) values (463,11);
+insert into t (id,a) values (463,12);
+insert into t (id,a) values (463,13);
+insert into t (id,a) values (463,14);
+insert into t (id,a) values (463,15);
+insert into t (id,a) values (463,16);
+insert into t (id,a) values (463,17);
+insert into t (id,a) values (463,18);
+insert into t (id,a) values (463,19);
+insert into t (id,a) values (463,20);
+insert into t (id,a) values (463,21);
+insert into t (id,a) values (463,22);
+insert into t (id,a) values (463,23);
+insert into t (id,a) values (463,24);
+insert into t (id,a) values (463,25);
+insert into t (id,a) values (463,26);
+insert into t (id,a) values (463,27);
+insert into t (id,a) values (463,28);
+insert into t (id,a) values (463,29);
+insert into t (id,a) values (463,30);
+insert into t (id,a) values (463,31);
+insert into t (id,a) values (463,32);
+insert into t (id,a) values (463,33);
+insert into t (id,a) values (463,34);
+insert into t (id,a) values (463,35);
+insert into t (id,a) values (463,36);
+insert into t (id,a) values (463,37);
+insert into t (id,a) values (463,38);
+insert into t (id,a) values (463,39);
+insert into t (id,a) values (463,40);
+insert into t (id,a) values (463,41);
+insert into t (id,a) values (463,42);
+insert into t (id,a) values (463,43);
+insert into t (id,a) values (463,44);
+insert into t (id,a) values (463,45);
+insert into t (id,a) values (463,46);
+insert into t (id,a) values (463,47);
+insert into t (id,a) values (463,48);
+insert into t (id,a) values (463,49);
+insert into t (id,a) values (463,50);
+insert into t (id,a) values (463,51);
+insert into t (id,a) values (463,52);
+insert into t (id,a) values (463,53);
+insert into t (id,a) values (463,54);
+insert into t (id,a) values (463,55);
+insert into t (id,a) values (463,56);
+insert into t (id,a) values (463,57);
+insert into t (id,a) values (463,58);
+insert into t (id,a) values (463,59);
+insert into t (id,a) values (463,60);
+insert into t (id,a) values (463,61);
+insert into t (id,a) values (463,62);
+insert into t (id,a) values (463,63);
+insert into t (id,a) values (463,64);
+insert into t (id,a) values (463,65);
+insert into t (id,a) values (463,66);
+insert into t (id,a) values (463,67);
+insert into t (id,a) values (463,68);
+insert into t (id,a) values (463,69);
+insert into t (id,a) values (463,70);
+insert into t (id,a) values (463,71);
+insert into t (id,a) values (463,72);
+insert into t (id,a) values (463,73);
+insert into t (id,a) values (463,74);
+insert into t (id,a) values (463,75);
+insert into t (id,a) values (463,76);
+insert into t (id,a) values (463,77);
+insert into t (id,a) values (463,78);
+insert into t (id,a) values (463,79);
+insert into t (id,a) values (463,80);
+insert into t (id,a) values (463,81);
+insert into t (id,a) values (463,82);
+insert into t (id,a) values (463,83);
+insert into t (id,a) values (463,84);
+insert into t (id,a) values (463,85);
+insert into t (id,a) values (463,86);
+insert into t (id,a) values (463,87);
+insert into t (id,a) values (463,88);
+insert into t (id,a) values (463,89);
+insert into t (id,a) values (463,90);
+insert into t (id,a) values (463,91);
+insert into t (id,a) values (463,92);
+insert into t (id,a) values (463,93);
+insert into t (id,a) values (463,94);
+insert into t (id,a) values (463,95);
+insert into t (id,a) values (463,96);
+insert into t (id,a) values (463,97);
+insert into t (id,a) values (463,98);
+insert into t (id,a) values (463,99);
+insert into t (id,a) values (464,0);
+insert into t (id,a) values (464,1);
+insert into t (id,a) values (464,2);
+insert into t (id,a) values (464,3);
+insert into t (id,a) values (464,4);
+insert into t (id,a) values (464,5);
+insert into t (id,a) values (464,6);
+insert into t (id,a) values (464,7);
+insert into t (id,a) values (464,8);
+insert into t (id,a) values (464,9);
+insert into t (id,a) values (464,10);
+insert into t (id,a) values (464,11);
+insert into t (id,a) values (464,12);
+insert into t (id,a) values (464,13);
+insert into t (id,a) values (464,14);
+insert into t (id,a) values (464,15);
+insert into t (id,a) values (464,16);
+insert into t (id,a) values (464,17);
+insert into t (id,a) values (464,18);
+insert into t (id,a) values (464,19);
+insert into t (id,a) values (464,20);
+insert into t (id,a) values (464,21);
+insert into t (id,a) values (464,22);
+insert into t (id,a) values (464,23);
+insert into t (id,a) values (464,24);
+insert into t (id,a) values (464,25);
+insert into t (id,a) values (464,26);
+insert into t (id,a) values (464,27);
+insert into t (id,a) values (464,28);
+insert into t (id,a) values (464,29);
+insert into t (id,a) values (464,30);
+insert into t (id,a) values (464,31);
+insert into t (id,a) values (464,32);
+insert into t (id,a) values (464,33);
+insert into t (id,a) values (464,34);
+insert into t (id,a) values (464,35);
+insert into t (id,a) values (464,36);
+insert into t (id,a) values (464,37);
+insert into t (id,a) values (464,38);
+insert into t (id,a) values (464,39);
+insert into t (id,a) values (464,40);
+insert into t (id,a) values (464,41);
+insert into t (id,a) values (464,42);
+insert into t (id,a) values (464,43);
+insert into t (id,a) values (464,44);
+insert into t (id,a) values (464,45);
+insert into t (id,a) values (464,46);
+insert into t (id,a) values (464,47);
+insert into t (id,a) values (464,48);
+insert into t (id,a) values (464,49);
+insert into t (id,a) values (464,50);
+insert into t (id,a) values (464,51);
+insert into t (id,a) values (464,52);
+insert into t (id,a) values (464,53);
+insert into t (id,a) values (464,54);
+insert into t (id,a) values (464,55);
+insert into t (id,a) values (464,56);
+insert into t (id,a) values (464,57);
+insert into t (id,a) values (464,58);
+insert into t (id,a) values (464,59);
+insert into t (id,a) values (464,60);
+insert into t (id,a) values (464,61);
+insert into t (id,a) values (464,62);
+insert into t (id,a) values (464,63);
+insert into t (id,a) values (464,64);
+insert into t (id,a) values (464,65);
+insert into t (id,a) values (464,66);
+insert into t (id,a) values (464,67);
+insert into t (id,a) values (464,68);
+insert into t (id,a) values (464,69);
+insert into t (id,a) values (464,70);
+insert into t (id,a) values (464,71);
+insert into t (id,a) values (464,72);
+insert into t (id,a) values (464,73);
+insert into t (id,a) values (464,74);
+insert into t (id,a) values (464,75);
+insert into t (id,a) values (464,76);
+insert into t (id,a) values (464,77);
+insert into t (id,a) values (464,78);
+insert into t (id,a) values (464,79);
+insert into t (id,a) values (464,80);
+insert into t (id,a) values (464,81);
+insert into t (id,a) values (464,82);
+insert into t (id,a) values (464,83);
+insert into t (id,a) values (464,84);
+insert into t (id,a) values (464,85);
+insert into t (id,a) values (464,86);
+insert into t (id,a) values (464,87);
+insert into t (id,a) values (464,88);
+insert into t (id,a) values (464,89);
+insert into t (id,a) values (464,90);
+insert into t (id,a) values (464,91);
+insert into t (id,a) values (464,92);
+insert into t (id,a) values (464,93);
+insert into t (id,a) values (464,94);
+insert into t (id,a) values (464,95);
+insert into t (id,a) values (464,96);
+insert into t (id,a) values (464,97);
+insert into t (id,a) values (464,98);
+insert into t (id,a) values (464,99);
+insert into t (id,a) values (465,0);
+insert into t (id,a) values (465,1);
+insert into t (id,a) values (465,2);
+insert into t (id,a) values (465,3);
+insert into t (id,a) values (465,4);
+insert into t (id,a) values (465,5);
+insert into t (id,a) values (465,6);
+insert into t (id,a) values (465,7);
+insert into t (id,a) values (465,8);
+insert into t (id,a) values (465,9);
+insert into t (id,a) values (465,10);
+insert into t (id,a) values (465,11);
+insert into t (id,a) values (465,12);
+insert into t (id,a) values (465,13);
+insert into t (id,a) values (465,14);
+insert into t (id,a) values (465,15);
+insert into t (id,a) values (465,16);
+insert into t (id,a) values (465,17);
+insert into t (id,a) values (465,18);
+insert into t (id,a) values (465,19);
+insert into t (id,a) values (465,20);
+insert into t (id,a) values (465,21);
+insert into t (id,a) values (465,22);
+insert into t (id,a) values (465,23);
+insert into t (id,a) values (465,24);
+insert into t (id,a) values (465,25);
+insert into t (id,a) values (465,26);
+insert into t (id,a) values (465,27);
+insert into t (id,a) values (465,28);
+insert into t (id,a) values (465,29);
+insert into t (id,a) values (465,30);
+insert into t (id,a) values (465,31);
+insert into t (id,a) values (465,32);
+insert into t (id,a) values (465,33);
+insert into t (id,a) values (465,34);
+insert into t (id,a) values (465,35);
+insert into t (id,a) values (465,36);
+insert into t (id,a) values (465,37);
+insert into t (id,a) values (465,38);
+insert into t (id,a) values (465,39);
+insert into t (id,a) values (465,40);
+insert into t (id,a) values (465,41);
+insert into t (id,a) values (465,42);
+insert into t (id,a) values (465,43);
+insert into t (id,a) values (465,44);
+insert into t (id,a) values (465,45);
+insert into t (id,a) values (465,46);
+insert into t (id,a) values (465,47);
+insert into t (id,a) values (465,48);
+insert into t (id,a) values (465,49);
+insert into t (id,a) values (465,50);
+insert into t (id,a) values (465,51);
+insert into t (id,a) values (465,52);
+insert into t (id,a) values (465,53);
+insert into t (id,a) values (465,54);
+insert into t (id,a) values (465,55);
+insert into t (id,a) values (465,56);
+insert into t (id,a) values (465,57);
+insert into t (id,a) values (465,58);
+insert into t (id,a) values (465,59);
+insert into t (id,a) values (465,60);
+insert into t (id,a) values (465,61);
+insert into t (id,a) values (465,62);
+insert into t (id,a) values (465,63);
+insert into t (id,a) values (465,64);
+insert into t (id,a) values (465,65);
+insert into t (id,a) values (465,66);
+insert into t (id,a) values (465,67);
+insert into t (id,a) values (465,68);
+insert into t (id,a) values (465,69);
+insert into t (id,a) values (465,70);
+insert into t (id,a) values (465,71);
+insert into t (id,a) values (465,72);
+insert into t (id,a) values (465,73);
+insert into t (id,a) values (465,74);
+insert into t (id,a) values (465,75);
+insert into t (id,a) values (465,76);
+insert into t (id,a) values (465,77);
+insert into t (id,a) values (465,78);
+insert into t (id,a) values (465,79);
+insert into t (id,a) values (465,80);
+insert into t (id,a) values (465,81);
+insert into t (id,a) values (465,82);
+insert into t (id,a) values (465,83);
+insert into t (id,a) values (465,84);
+insert into t (id,a) values (465,85);
+insert into t (id,a) values (465,86);
+insert into t (id,a) values (465,87);
+insert into t (id,a) values (465,88);
+insert into t (id,a) values (465,89);
+insert into t (id,a) values (465,90);
+insert into t (id,a) values (465,91);
+insert into t (id,a) values (465,92);
+insert into t (id,a) values (465,93);
+insert into t (id,a) values (465,94);
+insert into t (id,a) values (465,95);
+insert into t (id,a) values (465,96);
+insert into t (id,a) values (465,97);
+insert into t (id,a) values (465,98);
+insert into t (id,a) values (465,99);
+insert into t (id,a) values (466,0);
+insert into t (id,a) values (466,1);
+insert into t (id,a) values (466,2);
+insert into t (id,a) values (466,3);
+insert into t (id,a) values (466,4);
+insert into t (id,a) values (466,5);
+insert into t (id,a) values (466,6);
+insert into t (id,a) values (466,7);
+insert into t (id,a) values (466,8);
+insert into t (id,a) values (466,9);
+insert into t (id,a) values (466,10);
+insert into t (id,a) values (466,11);
+insert into t (id,a) values (466,12);
+insert into t (id,a) values (466,13);
+insert into t (id,a) values (466,14);
+insert into t (id,a) values (466,15);
+insert into t (id,a) values (466,16);
+insert into t (id,a) values (466,17);
+insert into t (id,a) values (466,18);
+insert into t (id,a) values (466,19);
+insert into t (id,a) values (466,20);
+insert into t (id,a) values (466,21);
+insert into t (id,a) values (466,22);
+insert into t (id,a) values (466,23);
+insert into t (id,a) values (466,24);
+insert into t (id,a) values (466,25);
+insert into t (id,a) values (466,26);
+insert into t (id,a) values (466,27);
+insert into t (id,a) values (466,28);
+insert into t (id,a) values (466,29);
+insert into t (id,a) values (466,30);
+insert into t (id,a) values (466,31);
+insert into t (id,a) values (466,32);
+insert into t (id,a) values (466,33);
+insert into t (id,a) values (466,34);
+insert into t (id,a) values (466,35);
+insert into t (id,a) values (466,36);
+insert into t (id,a) values (466,37);
+insert into t (id,a) values (466,38);
+insert into t (id,a) values (466,39);
+insert into t (id,a) values (466,40);
+insert into t (id,a) values (466,41);
+insert into t (id,a) values (466,42);
+insert into t (id,a) values (466,43);
+insert into t (id,a) values (466,44);
+insert into t (id,a) values (466,45);
+insert into t (id,a) values (466,46);
+insert into t (id,a) values (466,47);
+insert into t (id,a) values (466,48);
+insert into t (id,a) values (466,49);
+insert into t (id,a) values (466,50);
+insert into t (id,a) values (466,51);
+insert into t (id,a) values (466,52);
+insert into t (id,a) values (466,53);
+insert into t (id,a) values (466,54);
+insert into t (id,a) values (466,55);
+insert into t (id,a) values (466,56);
+insert into t (id,a) values (466,57);
+insert into t (id,a) values (466,58);
+insert into t (id,a) values (466,59);
+insert into t (id,a) values (466,60);
+insert into t (id,a) values (466,61);
+insert into t (id,a) values (466,62);
+insert into t (id,a) values (466,63);
+insert into t (id,a) values (466,64);
+insert into t (id,a) values (466,65);
+insert into t (id,a) values (466,66);
+insert into t (id,a) values (466,67);
+insert into t (id,a) values (466,68);
+insert into t (id,a) values (466,69);
+insert into t (id,a) values (466,70);
+insert into t (id,a) values (466,71);
+insert into t (id,a) values (466,72);
+insert into t (id,a) values (466,73);
+insert into t (id,a) values (466,74);
+insert into t (id,a) values (466,75);
+insert into t (id,a) values (466,76);
+insert into t (id,a) values (466,77);
+insert into t (id,a) values (466,78);
+insert into t (id,a) values (466,79);
+insert into t (id,a) values (466,80);
+insert into t (id,a) values (466,81);
+insert into t (id,a) values (466,82);
+insert into t (id,a) values (466,83);
+insert into t (id,a) values (466,84);
+insert into t (id,a) values (466,85);
+insert into t (id,a) values (466,86);
+insert into t (id,a) values (466,87);
+insert into t (id,a) values (466,88);
+insert into t (id,a) values (466,89);
+insert into t (id,a) values (466,90);
+insert into t (id,a) values (466,91);
+insert into t (id,a) values (466,92);
+insert into t (id,a) values (466,93);
+insert into t (id,a) values (466,94);
+insert into t (id,a) values (466,95);
+insert into t (id,a) values (466,96);
+insert into t (id,a) values (466,97);
+insert into t (id,a) values (466,98);
+insert into t (id,a) values (466,99);
+insert into t (id,a) values (467,0);
+insert into t (id,a) values (467,1);
+insert into t (id,a) values (467,2);
+insert into t (id,a) values (467,3);
+insert into t (id,a) values (467,4);
+insert into t (id,a) values (467,5);
+insert into t (id,a) values (467,6);
+insert into t (id,a) values (467,7);
+insert into t (id,a) values (467,8);
+insert into t (id,a) values (467,9);
+insert into t (id,a) values (467,10);
+insert into t (id,a) values (467,11);
+insert into t (id,a) values (467,12);
+insert into t (id,a) values (467,13);
+insert into t (id,a) values (467,14);
+insert into t (id,a) values (467,15);
+insert into t (id,a) values (467,16);
+insert into t (id,a) values (467,17);
+insert into t (id,a) values (467,18);
+insert into t (id,a) values (467,19);
+insert into t (id,a) values (467,20);
+insert into t (id,a) values (467,21);
+insert into t (id,a) values (467,22);
+insert into t (id,a) values (467,23);
+insert into t (id,a) values (467,24);
+insert into t (id,a) values (467,25);
+insert into t (id,a) values (467,26);
+insert into t (id,a) values (467,27);
+insert into t (id,a) values (467,28);
+insert into t (id,a) values (467,29);
+insert into t (id,a) values (467,30);
+insert into t (id,a) values (467,31);
+insert into t (id,a) values (467,32);
+insert into t (id,a) values (467,33);
+insert into t (id,a) values (467,34);
+insert into t (id,a) values (467,35);
+insert into t (id,a) values (467,36);
+insert into t (id,a) values (467,37);
+insert into t (id,a) values (467,38);
+insert into t (id,a) values (467,39);
+insert into t (id,a) values (467,40);
+insert into t (id,a) values (467,41);
+insert into t (id,a) values (467,42);
+insert into t (id,a) values (467,43);
+insert into t (id,a) values (467,44);
+insert into t (id,a) values (467,45);
+insert into t (id,a) values (467,46);
+insert into t (id,a) values (467,47);
+insert into t (id,a) values (467,48);
+insert into t (id,a) values (467,49);
+insert into t (id,a) values (467,50);
+insert into t (id,a) values (467,51);
+insert into t (id,a) values (467,52);
+insert into t (id,a) values (467,53);
+insert into t (id,a) values (467,54);
+insert into t (id,a) values (467,55);
+insert into t (id,a) values (467,56);
+insert into t (id,a) values (467,57);
+insert into t (id,a) values (467,58);
+insert into t (id,a) values (467,59);
+insert into t (id,a) values (467,60);
+insert into t (id,a) values (467,61);
+insert into t (id,a) values (467,62);
+insert into t (id,a) values (467,63);
+insert into t (id,a) values (467,64);
+insert into t (id,a) values (467,65);
+insert into t (id,a) values (467,66);
+insert into t (id,a) values (467,67);
+insert into t (id,a) values (467,68);
+insert into t (id,a) values (467,69);
+insert into t (id,a) values (467,70);
+insert into t (id,a) values (467,71);
+insert into t (id,a) values (467,72);
+insert into t (id,a) values (467,73);
+insert into t (id,a) values (467,74);
+insert into t (id,a) values (467,75);
+insert into t (id,a) values (467,76);
+insert into t (id,a) values (467,77);
+insert into t (id,a) values (467,78);
+insert into t (id,a) values (467,79);
+insert into t (id,a) values (467,80);
+insert into t (id,a) values (467,81);
+insert into t (id,a) values (467,82);
+insert into t (id,a) values (467,83);
+insert into t (id,a) values (467,84);
+insert into t (id,a) values (467,85);
+insert into t (id,a) values (467,86);
+insert into t (id,a) values (467,87);
+insert into t (id,a) values (467,88);
+insert into t (id,a) values (467,89);
+insert into t (id,a) values (467,90);
+insert into t (id,a) values (467,91);
+insert into t (id,a) values (467,92);
+insert into t (id,a) values (467,93);
+insert into t (id,a) values (467,94);
+insert into t (id,a) values (467,95);
+insert into t (id,a) values (467,96);
+insert into t (id,a) values (467,97);
+insert into t (id,a) values (467,98);
+insert into t (id,a) values (467,99);
+insert into t (id,a) values (468,0);
+insert into t (id,a) values (468,1);
+insert into t (id,a) values (468,2);
+insert into t (id,a) values (468,3);
+insert into t (id,a) values (468,4);
+insert into t (id,a) values (468,5);
+insert into t (id,a) values (468,6);
+insert into t (id,a) values (468,7);
+insert into t (id,a) values (468,8);
+insert into t (id,a) values (468,9);
+insert into t (id,a) values (468,10);
+insert into t (id,a) values (468,11);
+insert into t (id,a) values (468,12);
+insert into t (id,a) values (468,13);
+insert into t (id,a) values (468,14);
+insert into t (id,a) values (468,15);
+insert into t (id,a) values (468,16);
+insert into t (id,a) values (468,17);
+insert into t (id,a) values (468,18);
+insert into t (id,a) values (468,19);
+insert into t (id,a) values (468,20);
+insert into t (id,a) values (468,21);
+insert into t (id,a) values (468,22);
+insert into t (id,a) values (468,23);
+insert into t (id,a) values (468,24);
+insert into t (id,a) values (468,25);
+insert into t (id,a) values (468,26);
+insert into t (id,a) values (468,27);
+insert into t (id,a) values (468,28);
+insert into t (id,a) values (468,29);
+insert into t (id,a) values (468,30);
+insert into t (id,a) values (468,31);
+insert into t (id,a) values (468,32);
+insert into t (id,a) values (468,33);
+insert into t (id,a) values (468,34);
+insert into t (id,a) values (468,35);
+insert into t (id,a) values (468,36);
+insert into t (id,a) values (468,37);
+insert into t (id,a) values (468,38);
+insert into t (id,a) values (468,39);
+insert into t (id,a) values (468,40);
+insert into t (id,a) values (468,41);
+insert into t (id,a) values (468,42);
+insert into t (id,a) values (468,43);
+insert into t (id,a) values (468,44);
+insert into t (id,a) values (468,45);
+insert into t (id,a) values (468,46);
+insert into t (id,a) values (468,47);
+insert into t (id,a) values (468,48);
+insert into t (id,a) values (468,49);
+insert into t (id,a) values (468,50);
+insert into t (id,a) values (468,51);
+insert into t (id,a) values (468,52);
+insert into t (id,a) values (468,53);
+insert into t (id,a) values (468,54);
+insert into t (id,a) values (468,55);
+insert into t (id,a) values (468,56);
+insert into t (id,a) values (468,57);
+insert into t (id,a) values (468,58);
+insert into t (id,a) values (468,59);
+insert into t (id,a) values (468,60);
+insert into t (id,a) values (468,61);
+insert into t (id,a) values (468,62);
+insert into t (id,a) values (468,63);
+insert into t (id,a) values (468,64);
+insert into t (id,a) values (468,65);
+insert into t (id,a) values (468,66);
+insert into t (id,a) values (468,67);
+insert into t (id,a) values (468,68);
+insert into t (id,a) values (468,69);
+insert into t (id,a) values (468,70);
+insert into t (id,a) values (468,71);
+insert into t (id,a) values (468,72);
+insert into t (id,a) values (468,73);
+insert into t (id,a) values (468,74);
+insert into t (id,a) values (468,75);
+insert into t (id,a) values (468,76);
+insert into t (id,a) values (468,77);
+insert into t (id,a) values (468,78);
+insert into t (id,a) values (468,79);
+insert into t (id,a) values (468,80);
+insert into t (id,a) values (468,81);
+insert into t (id,a) values (468,82);
+insert into t (id,a) values (468,83);
+insert into t (id,a) values (468,84);
+insert into t (id,a) values (468,85);
+insert into t (id,a) values (468,86);
+insert into t (id,a) values (468,87);
+insert into t (id,a) values (468,88);
+insert into t (id,a) values (468,89);
+insert into t (id,a) values (468,90);
+insert into t (id,a) values (468,91);
+insert into t (id,a) values (468,92);
+insert into t (id,a) values (468,93);
+insert into t (id,a) values (468,94);
+insert into t (id,a) values (468,95);
+insert into t (id,a) values (468,96);
+insert into t (id,a) values (468,97);
+insert into t (id,a) values (468,98);
+insert into t (id,a) values (468,99);
+insert into t (id,a) values (469,0);
+insert into t (id,a) values (469,1);
+insert into t (id,a) values (469,2);
+insert into t (id,a) values (469,3);
+insert into t (id,a) values (469,4);
+insert into t (id,a) values (469,5);
+insert into t (id,a) values (469,6);
+insert into t (id,a) values (469,7);
+insert into t (id,a) values (469,8);
+insert into t (id,a) values (469,9);
+insert into t (id,a) values (469,10);
+insert into t (id,a) values (469,11);
+insert into t (id,a) values (469,12);
+insert into t (id,a) values (469,13);
+insert into t (id,a) values (469,14);
+insert into t (id,a) values (469,15);
+insert into t (id,a) values (469,16);
+insert into t (id,a) values (469,17);
+insert into t (id,a) values (469,18);
+insert into t (id,a) values (469,19);
+insert into t (id,a) values (469,20);
+insert into t (id,a) values (469,21);
+insert into t (id,a) values (469,22);
+insert into t (id,a) values (469,23);
+insert into t (id,a) values (469,24);
+insert into t (id,a) values (469,25);
+insert into t (id,a) values (469,26);
+insert into t (id,a) values (469,27);
+insert into t (id,a) values (469,28);
+insert into t (id,a) values (469,29);
+insert into t (id,a) values (469,30);
+insert into t (id,a) values (469,31);
+insert into t (id,a) values (469,32);
+insert into t (id,a) values (469,33);
+insert into t (id,a) values (469,34);
+insert into t (id,a) values (469,35);
+insert into t (id,a) values (469,36);
+insert into t (id,a) values (469,37);
+insert into t (id,a) values (469,38);
+insert into t (id,a) values (469,39);
+insert into t (id,a) values (469,40);
+insert into t (id,a) values (469,41);
+insert into t (id,a) values (469,42);
+insert into t (id,a) values (469,43);
+insert into t (id,a) values (469,44);
+insert into t (id,a) values (469,45);
+insert into t (id,a) values (469,46);
+insert into t (id,a) values (469,47);
+insert into t (id,a) values (469,48);
+insert into t (id,a) values (469,49);
+insert into t (id,a) values (469,50);
+insert into t (id,a) values (469,51);
+insert into t (id,a) values (469,52);
+insert into t (id,a) values (469,53);
+insert into t (id,a) values (469,54);
+insert into t (id,a) values (469,55);
+insert into t (id,a) values (469,56);
+insert into t (id,a) values (469,57);
+insert into t (id,a) values (469,58);
+insert into t (id,a) values (469,59);
+insert into t (id,a) values (469,60);
+insert into t (id,a) values (469,61);
+insert into t (id,a) values (469,62);
+insert into t (id,a) values (469,63);
+insert into t (id,a) values (469,64);
+insert into t (id,a) values (469,65);
+insert into t (id,a) values (469,66);
+insert into t (id,a) values (469,67);
+insert into t (id,a) values (469,68);
+insert into t (id,a) values (469,69);
+insert into t (id,a) values (469,70);
+insert into t (id,a) values (469,71);
+insert into t (id,a) values (469,72);
+insert into t (id,a) values (469,73);
+insert into t (id,a) values (469,74);
+insert into t (id,a) values (469,75);
+insert into t (id,a) values (469,76);
+insert into t (id,a) values (469,77);
+insert into t (id,a) values (469,78);
+insert into t (id,a) values (469,79);
+insert into t (id,a) values (469,80);
+insert into t (id,a) values (469,81);
+insert into t (id,a) values (469,82);
+insert into t (id,a) values (469,83);
+insert into t (id,a) values (469,84);
+insert into t (id,a) values (469,85);
+insert into t (id,a) values (469,86);
+insert into t (id,a) values (469,87);
+insert into t (id,a) values (469,88);
+insert into t (id,a) values (469,89);
+insert into t (id,a) values (469,90);
+insert into t (id,a) values (469,91);
+insert into t (id,a) values (469,92);
+insert into t (id,a) values (469,93);
+insert into t (id,a) values (469,94);
+insert into t (id,a) values (469,95);
+insert into t (id,a) values (469,96);
+insert into t (id,a) values (469,97);
+insert into t (id,a) values (469,98);
+insert into t (id,a) values (469,99);
+insert into t (id,a) values (470,0);
+insert into t (id,a) values (470,1);
+insert into t (id,a) values (470,2);
+insert into t (id,a) values (470,3);
+insert into t (id,a) values (470,4);
+insert into t (id,a) values (470,5);
+insert into t (id,a) values (470,6);
+insert into t (id,a) values (470,7);
+insert into t (id,a) values (470,8);
+insert into t (id,a) values (470,9);
+insert into t (id,a) values (470,10);
+insert into t (id,a) values (470,11);
+insert into t (id,a) values (470,12);
+insert into t (id,a) values (470,13);
+insert into t (id,a) values (470,14);
+insert into t (id,a) values (470,15);
+insert into t (id,a) values (470,16);
+insert into t (id,a) values (470,17);
+insert into t (id,a) values (470,18);
+insert into t (id,a) values (470,19);
+insert into t (id,a) values (470,20);
+insert into t (id,a) values (470,21);
+insert into t (id,a) values (470,22);
+insert into t (id,a) values (470,23);
+insert into t (id,a) values (470,24);
+insert into t (id,a) values (470,25);
+insert into t (id,a) values (470,26);
+insert into t (id,a) values (470,27);
+insert into t (id,a) values (470,28);
+insert into t (id,a) values (470,29);
+insert into t (id,a) values (470,30);
+insert into t (id,a) values (470,31);
+insert into t (id,a) values (470,32);
+insert into t (id,a) values (470,33);
+insert into t (id,a) values (470,34);
+insert into t (id,a) values (470,35);
+insert into t (id,a) values (470,36);
+insert into t (id,a) values (470,37);
+insert into t (id,a) values (470,38);
+insert into t (id,a) values (470,39);
+insert into t (id,a) values (470,40);
+insert into t (id,a) values (470,41);
+insert into t (id,a) values (470,42);
+insert into t (id,a) values (470,43);
+insert into t (id,a) values (470,44);
+insert into t (id,a) values (470,45);
+insert into t (id,a) values (470,46);
+insert into t (id,a) values (470,47);
+insert into t (id,a) values (470,48);
+insert into t (id,a) values (470,49);
+insert into t (id,a) values (470,50);
+insert into t (id,a) values (470,51);
+insert into t (id,a) values (470,52);
+insert into t (id,a) values (470,53);
+insert into t (id,a) values (470,54);
+insert into t (id,a) values (470,55);
+insert into t (id,a) values (470,56);
+insert into t (id,a) values (470,57);
+insert into t (id,a) values (470,58);
+insert into t (id,a) values (470,59);
+insert into t (id,a) values (470,60);
+insert into t (id,a) values (470,61);
+insert into t (id,a) values (470,62);
+insert into t (id,a) values (470,63);
+insert into t (id,a) values (470,64);
+insert into t (id,a) values (470,65);
+insert into t (id,a) values (470,66);
+insert into t (id,a) values (470,67);
+insert into t (id,a) values (470,68);
+insert into t (id,a) values (470,69);
+insert into t (id,a) values (470,70);
+insert into t (id,a) values (470,71);
+insert into t (id,a) values (470,72);
+insert into t (id,a) values (470,73);
+insert into t (id,a) values (470,74);
+insert into t (id,a) values (470,75);
+insert into t (id,a) values (470,76);
+insert into t (id,a) values (470,77);
+insert into t (id,a) values (470,78);
+insert into t (id,a) values (470,79);
+insert into t (id,a) values (470,80);
+insert into t (id,a) values (470,81);
+insert into t (id,a) values (470,82);
+insert into t (id,a) values (470,83);
+insert into t (id,a) values (470,84);
+insert into t (id,a) values (470,85);
+insert into t (id,a) values (470,86);
+insert into t (id,a) values (470,87);
+insert into t (id,a) values (470,88);
+insert into t (id,a) values (470,89);
+insert into t (id,a) values (470,90);
+insert into t (id,a) values (470,91);
+insert into t (id,a) values (470,92);
+insert into t (id,a) values (470,93);
+insert into t (id,a) values (470,94);
+insert into t (id,a) values (470,95);
+insert into t (id,a) values (470,96);
+insert into t (id,a) values (470,97);
+insert into t (id,a) values (470,98);
+insert into t (id,a) values (470,99);
+insert into t (id,a) values (471,0);
+insert into t (id,a) values (471,1);
+insert into t (id,a) values (471,2);
+insert into t (id,a) values (471,3);
+insert into t (id,a) values (471,4);
+insert into t (id,a) values (471,5);
+insert into t (id,a) values (471,6);
+insert into t (id,a) values (471,7);
+insert into t (id,a) values (471,8);
+insert into t (id,a) values (471,9);
+insert into t (id,a) values (471,10);
+insert into t (id,a) values (471,11);
+insert into t (id,a) values (471,12);
+insert into t (id,a) values (471,13);
+insert into t (id,a) values (471,14);
+insert into t (id,a) values (471,15);
+insert into t (id,a) values (471,16);
+insert into t (id,a) values (471,17);
+insert into t (id,a) values (471,18);
+insert into t (id,a) values (471,19);
+insert into t (id,a) values (471,20);
+insert into t (id,a) values (471,21);
+insert into t (id,a) values (471,22);
+insert into t (id,a) values (471,23);
+insert into t (id,a) values (471,24);
+insert into t (id,a) values (471,25);
+insert into t (id,a) values (471,26);
+insert into t (id,a) values (471,27);
+insert into t (id,a) values (471,28);
+insert into t (id,a) values (471,29);
+insert into t (id,a) values (471,30);
+insert into t (id,a) values (471,31);
+insert into t (id,a) values (471,32);
+insert into t (id,a) values (471,33);
+insert into t (id,a) values (471,34);
+insert into t (id,a) values (471,35);
+insert into t (id,a) values (471,36);
+insert into t (id,a) values (471,37);
+insert into t (id,a) values (471,38);
+insert into t (id,a) values (471,39);
+insert into t (id,a) values (471,40);
+insert into t (id,a) values (471,41);
+insert into t (id,a) values (471,42);
+insert into t (id,a) values (471,43);
+insert into t (id,a) values (471,44);
+insert into t (id,a) values (471,45);
+insert into t (id,a) values (471,46);
+insert into t (id,a) values (471,47);
+insert into t (id,a) values (471,48);
+insert into t (id,a) values (471,49);
+insert into t (id,a) values (471,50);
+insert into t (id,a) values (471,51);
+insert into t (id,a) values (471,52);
+insert into t (id,a) values (471,53);
+insert into t (id,a) values (471,54);
+insert into t (id,a) values (471,55);
+insert into t (id,a) values (471,56);
+insert into t (id,a) values (471,57);
+insert into t (id,a) values (471,58);
+insert into t (id,a) values (471,59);
+insert into t (id,a) values (471,60);
+insert into t (id,a) values (471,61);
+insert into t (id,a) values (471,62);
+insert into t (id,a) values (471,63);
+insert into t (id,a) values (471,64);
+insert into t (id,a) values (471,65);
+insert into t (id,a) values (471,66);
+insert into t (id,a) values (471,67);
+insert into t (id,a) values (471,68);
+insert into t (id,a) values (471,69);
+insert into t (id,a) values (471,70);
+insert into t (id,a) values (471,71);
+insert into t (id,a) values (471,72);
+insert into t (id,a) values (471,73);
+insert into t (id,a) values (471,74);
+insert into t (id,a) values (471,75);
+insert into t (id,a) values (471,76);
+insert into t (id,a) values (471,77);
+insert into t (id,a) values (471,78);
+insert into t (id,a) values (471,79);
+insert into t (id,a) values (471,80);
+insert into t (id,a) values (471,81);
+insert into t (id,a) values (471,82);
+insert into t (id,a) values (471,83);
+insert into t (id,a) values (471,84);
+insert into t (id,a) values (471,85);
+insert into t (id,a) values (471,86);
+insert into t (id,a) values (471,87);
+insert into t (id,a) values (471,88);
+insert into t (id,a) values (471,89);
+insert into t (id,a) values (471,90);
+insert into t (id,a) values (471,91);
+insert into t (id,a) values (471,92);
+insert into t (id,a) values (471,93);
+insert into t (id,a) values (471,94);
+insert into t (id,a) values (471,95);
+insert into t (id,a) values (471,96);
+insert into t (id,a) values (471,97);
+insert into t (id,a) values (471,98);
+insert into t (id,a) values (471,99);
+insert into t (id,a) values (472,0);
+insert into t (id,a) values (472,1);
+insert into t (id,a) values (472,2);
+insert into t (id,a) values (472,3);
+insert into t (id,a) values (472,4);
+insert into t (id,a) values (472,5);
+insert into t (id,a) values (472,6);
+insert into t (id,a) values (472,7);
+insert into t (id,a) values (472,8);
+insert into t (id,a) values (472,9);
+insert into t (id,a) values (472,10);
+insert into t (id,a) values (472,11);
+insert into t (id,a) values (472,12);
+insert into t (id,a) values (472,13);
+insert into t (id,a) values (472,14);
+insert into t (id,a) values (472,15);
+insert into t (id,a) values (472,16);
+insert into t (id,a) values (472,17);
+insert into t (id,a) values (472,18);
+insert into t (id,a) values (472,19);
+insert into t (id,a) values (472,20);
+insert into t (id,a) values (472,21);
+insert into t (id,a) values (472,22);
+insert into t (id,a) values (472,23);
+insert into t (id,a) values (472,24);
+insert into t (id,a) values (472,25);
+insert into t (id,a) values (472,26);
+insert into t (id,a) values (472,27);
+insert into t (id,a) values (472,28);
+insert into t (id,a) values (472,29);
+insert into t (id,a) values (472,30);
+insert into t (id,a) values (472,31);
+insert into t (id,a) values (472,32);
+insert into t (id,a) values (472,33);
+insert into t (id,a) values (472,34);
+insert into t (id,a) values (472,35);
+insert into t (id,a) values (472,36);
+insert into t (id,a) values (472,37);
+insert into t (id,a) values (472,38);
+insert into t (id,a) values (472,39);
+insert into t (id,a) values (472,40);
+insert into t (id,a) values (472,41);
+insert into t (id,a) values (472,42);
+insert into t (id,a) values (472,43);
+insert into t (id,a) values (472,44);
+insert into t (id,a) values (472,45);
+insert into t (id,a) values (472,46);
+insert into t (id,a) values (472,47);
+insert into t (id,a) values (472,48);
+insert into t (id,a) values (472,49);
+insert into t (id,a) values (472,50);
+insert into t (id,a) values (472,51);
+insert into t (id,a) values (472,52);
+insert into t (id,a) values (472,53);
+insert into t (id,a) values (472,54);
+insert into t (id,a) values (472,55);
+insert into t (id,a) values (472,56);
+insert into t (id,a) values (472,57);
+insert into t (id,a) values (472,58);
+insert into t (id,a) values (472,59);
+insert into t (id,a) values (472,60);
+insert into t (id,a) values (472,61);
+insert into t (id,a) values (472,62);
+insert into t (id,a) values (472,63);
+insert into t (id,a) values (472,64);
+insert into t (id,a) values (472,65);
+insert into t (id,a) values (472,66);
+insert into t (id,a) values (472,67);
+insert into t (id,a) values (472,68);
+insert into t (id,a) values (472,69);
+insert into t (id,a) values (472,70);
+insert into t (id,a) values (472,71);
+insert into t (id,a) values (472,72);
+insert into t (id,a) values (472,73);
+insert into t (id,a) values (472,74);
+insert into t (id,a) values (472,75);
+insert into t (id,a) values (472,76);
+insert into t (id,a) values (472,77);
+insert into t (id,a) values (472,78);
+insert into t (id,a) values (472,79);
+insert into t (id,a) values (472,80);
+insert into t (id,a) values (472,81);
+insert into t (id,a) values (472,82);
+insert into t (id,a) values (472,83);
+insert into t (id,a) values (472,84);
+insert into t (id,a) values (472,85);
+insert into t (id,a) values (472,86);
+insert into t (id,a) values (472,87);
+insert into t (id,a) values (472,88);
+insert into t (id,a) values (472,89);
+insert into t (id,a) values (472,90);
+insert into t (id,a) values (472,91);
+insert into t (id,a) values (472,92);
+insert into t (id,a) values (472,93);
+insert into t (id,a) values (472,94);
+insert into t (id,a) values (472,95);
+insert into t (id,a) values (472,96);
+insert into t (id,a) values (472,97);
+insert into t (id,a) values (472,98);
+insert into t (id,a) values (472,99);
+insert into t (id,a) values (473,0);
+insert into t (id,a) values (473,1);
+insert into t (id,a) values (473,2);
+insert into t (id,a) values (473,3);
+insert into t (id,a) values (473,4);
+insert into t (id,a) values (473,5);
+insert into t (id,a) values (473,6);
+insert into t (id,a) values (473,7);
+insert into t (id,a) values (473,8);
+insert into t (id,a) values (473,9);
+insert into t (id,a) values (473,10);
+insert into t (id,a) values (473,11);
+insert into t (id,a) values (473,12);
+insert into t (id,a) values (473,13);
+insert into t (id,a) values (473,14);
+insert into t (id,a) values (473,15);
+insert into t (id,a) values (473,16);
+insert into t (id,a) values (473,17);
+insert into t (id,a) values (473,18);
+insert into t (id,a) values (473,19);
+insert into t (id,a) values (473,20);
+insert into t (id,a) values (473,21);
+insert into t (id,a) values (473,22);
+insert into t (id,a) values (473,23);
+insert into t (id,a) values (473,24);
+insert into t (id,a) values (473,25);
+insert into t (id,a) values (473,26);
+insert into t (id,a) values (473,27);
+insert into t (id,a) values (473,28);
+insert into t (id,a) values (473,29);
+insert into t (id,a) values (473,30);
+insert into t (id,a) values (473,31);
+insert into t (id,a) values (473,32);
+insert into t (id,a) values (473,33);
+insert into t (id,a) values (473,34);
+insert into t (id,a) values (473,35);
+insert into t (id,a) values (473,36);
+insert into t (id,a) values (473,37);
+insert into t (id,a) values (473,38);
+insert into t (id,a) values (473,39);
+insert into t (id,a) values (473,40);
+insert into t (id,a) values (473,41);
+insert into t (id,a) values (473,42);
+insert into t (id,a) values (473,43);
+insert into t (id,a) values (473,44);
+insert into t (id,a) values (473,45);
+insert into t (id,a) values (473,46);
+insert into t (id,a) values (473,47);
+insert into t (id,a) values (473,48);
+insert into t (id,a) values (473,49);
+insert into t (id,a) values (473,50);
+insert into t (id,a) values (473,51);
+insert into t (id,a) values (473,52);
+insert into t (id,a) values (473,53);
+insert into t (id,a) values (473,54);
+insert into t (id,a) values (473,55);
+insert into t (id,a) values (473,56);
+insert into t (id,a) values (473,57);
+insert into t (id,a) values (473,58);
+insert into t (id,a) values (473,59);
+insert into t (id,a) values (473,60);
+insert into t (id,a) values (473,61);
+insert into t (id,a) values (473,62);
+insert into t (id,a) values (473,63);
+insert into t (id,a) values (473,64);
+insert into t (id,a) values (473,65);
+insert into t (id,a) values (473,66);
+insert into t (id,a) values (473,67);
+insert into t (id,a) values (473,68);
+insert into t (id,a) values (473,69);
+insert into t (id,a) values (473,70);
+insert into t (id,a) values (473,71);
+insert into t (id,a) values (473,72);
+insert into t (id,a) values (473,73);
+insert into t (id,a) values (473,74);
+insert into t (id,a) values (473,75);
+insert into t (id,a) values (473,76);
+insert into t (id,a) values (473,77);
+insert into t (id,a) values (473,78);
+insert into t (id,a) values (473,79);
+insert into t (id,a) values (473,80);
+insert into t (id,a) values (473,81);
+insert into t (id,a) values (473,82);
+insert into t (id,a) values (473,83);
+insert into t (id,a) values (473,84);
+insert into t (id,a) values (473,85);
+insert into t (id,a) values (473,86);
+insert into t (id,a) values (473,87);
+insert into t (id,a) values (473,88);
+insert into t (id,a) values (473,89);
+insert into t (id,a) values (473,90);
+insert into t (id,a) values (473,91);
+insert into t (id,a) values (473,92);
+insert into t (id,a) values (473,93);
+insert into t (id,a) values (473,94);
+insert into t (id,a) values (473,95);
+insert into t (id,a) values (473,96);
+insert into t (id,a) values (473,97);
+insert into t (id,a) values (473,98);
+insert into t (id,a) values (473,99);
+insert into t (id,a) values (474,0);
+insert into t (id,a) values (474,1);
+insert into t (id,a) values (474,2);
+insert into t (id,a) values (474,3);
+insert into t (id,a) values (474,4);
+insert into t (id,a) values (474,5);
+insert into t (id,a) values (474,6);
+insert into t (id,a) values (474,7);
+insert into t (id,a) values (474,8);
+insert into t (id,a) values (474,9);
+insert into t (id,a) values (474,10);
+insert into t (id,a) values (474,11);
+insert into t (id,a) values (474,12);
+insert into t (id,a) values (474,13);
+insert into t (id,a) values (474,14);
+insert into t (id,a) values (474,15);
+insert into t (id,a) values (474,16);
+insert into t (id,a) values (474,17);
+insert into t (id,a) values (474,18);
+insert into t (id,a) values (474,19);
+insert into t (id,a) values (474,20);
+insert into t (id,a) values (474,21);
+insert into t (id,a) values (474,22);
+insert into t (id,a) values (474,23);
+insert into t (id,a) values (474,24);
+insert into t (id,a) values (474,25);
+insert into t (id,a) values (474,26);
+insert into t (id,a) values (474,27);
+insert into t (id,a) values (474,28);
+insert into t (id,a) values (474,29);
+insert into t (id,a) values (474,30);
+insert into t (id,a) values (474,31);
+insert into t (id,a) values (474,32);
+insert into t (id,a) values (474,33);
+insert into t (id,a) values (474,34);
+insert into t (id,a) values (474,35);
+insert into t (id,a) values (474,36);
+insert into t (id,a) values (474,37);
+insert into t (id,a) values (474,38);
+insert into t (id,a) values (474,39);
+insert into t (id,a) values (474,40);
+insert into t (id,a) values (474,41);
+insert into t (id,a) values (474,42);
+insert into t (id,a) values (474,43);
+insert into t (id,a) values (474,44);
+insert into t (id,a) values (474,45);
+insert into t (id,a) values (474,46);
+insert into t (id,a) values (474,47);
+insert into t (id,a) values (474,48);
+insert into t (id,a) values (474,49);
+insert into t (id,a) values (474,50);
+insert into t (id,a) values (474,51);
+insert into t (id,a) values (474,52);
+insert into t (id,a) values (474,53);
+insert into t (id,a) values (474,54);
+insert into t (id,a) values (474,55);
+insert into t (id,a) values (474,56);
+insert into t (id,a) values (474,57);
+insert into t (id,a) values (474,58);
+insert into t (id,a) values (474,59);
+insert into t (id,a) values (474,60);
+insert into t (id,a) values (474,61);
+insert into t (id,a) values (474,62);
+insert into t (id,a) values (474,63);
+insert into t (id,a) values (474,64);
+insert into t (id,a) values (474,65);
+insert into t (id,a) values (474,66);
+insert into t (id,a) values (474,67);
+insert into t (id,a) values (474,68);
+insert into t (id,a) values (474,69);
+insert into t (id,a) values (474,70);
+insert into t (id,a) values (474,71);
+insert into t (id,a) values (474,72);
+insert into t (id,a) values (474,73);
+insert into t (id,a) values (474,74);
+insert into t (id,a) values (474,75);
+insert into t (id,a) values (474,76);
+insert into t (id,a) values (474,77);
+insert into t (id,a) values (474,78);
+insert into t (id,a) values (474,79);
+insert into t (id,a) values (474,80);
+insert into t (id,a) values (474,81);
+insert into t (id,a) values (474,82);
+insert into t (id,a) values (474,83);
+insert into t (id,a) values (474,84);
+insert into t (id,a) values (474,85);
+insert into t (id,a) values (474,86);
+insert into t (id,a) values (474,87);
+insert into t (id,a) values (474,88);
+insert into t (id,a) values (474,89);
+insert into t (id,a) values (474,90);
+insert into t (id,a) values (474,91);
+insert into t (id,a) values (474,92);
+insert into t (id,a) values (474,93);
+insert into t (id,a) values (474,94);
+insert into t (id,a) values (474,95);
+insert into t (id,a) values (474,96);
+insert into t (id,a) values (474,97);
+insert into t (id,a) values (474,98);
+insert into t (id,a) values (474,99);
+insert into t (id,a) values (475,0);
+insert into t (id,a) values (475,1);
+insert into t (id,a) values (475,2);
+insert into t (id,a) values (475,3);
+insert into t (id,a) values (475,4);
+insert into t (id,a) values (475,5);
+insert into t (id,a) values (475,6);
+insert into t (id,a) values (475,7);
+insert into t (id,a) values (475,8);
+insert into t (id,a) values (475,9);
+insert into t (id,a) values (475,10);
+insert into t (id,a) values (475,11);
+insert into t (id,a) values (475,12);
+insert into t (id,a) values (475,13);
+insert into t (id,a) values (475,14);
+insert into t (id,a) values (475,15);
+insert into t (id,a) values (475,16);
+insert into t (id,a) values (475,17);
+insert into t (id,a) values (475,18);
+insert into t (id,a) values (475,19);
+insert into t (id,a) values (475,20);
+insert into t (id,a) values (475,21);
+insert into t (id,a) values (475,22);
+insert into t (id,a) values (475,23);
+insert into t (id,a) values (475,24);
+insert into t (id,a) values (475,25);
+insert into t (id,a) values (475,26);
+insert into t (id,a) values (475,27);
+insert into t (id,a) values (475,28);
+insert into t (id,a) values (475,29);
+insert into t (id,a) values (475,30);
+insert into t (id,a) values (475,31);
+insert into t (id,a) values (475,32);
+insert into t (id,a) values (475,33);
+insert into t (id,a) values (475,34);
+insert into t (id,a) values (475,35);
+insert into t (id,a) values (475,36);
+insert into t (id,a) values (475,37);
+insert into t (id,a) values (475,38);
+insert into t (id,a) values (475,39);
+insert into t (id,a) values (475,40);
+insert into t (id,a) values (475,41);
+insert into t (id,a) values (475,42);
+insert into t (id,a) values (475,43);
+insert into t (id,a) values (475,44);
+insert into t (id,a) values (475,45);
+insert into t (id,a) values (475,46);
+insert into t (id,a) values (475,47);
+insert into t (id,a) values (475,48);
+insert into t (id,a) values (475,49);
+insert into t (id,a) values (475,50);
+insert into t (id,a) values (475,51);
+insert into t (id,a) values (475,52);
+insert into t (id,a) values (475,53);
+insert into t (id,a) values (475,54);
+insert into t (id,a) values (475,55);
+insert into t (id,a) values (475,56);
+insert into t (id,a) values (475,57);
+insert into t (id,a) values (475,58);
+insert into t (id,a) values (475,59);
+insert into t (id,a) values (475,60);
+insert into t (id,a) values (475,61);
+insert into t (id,a) values (475,62);
+insert into t (id,a) values (475,63);
+insert into t (id,a) values (475,64);
+insert into t (id,a) values (475,65);
+insert into t (id,a) values (475,66);
+insert into t (id,a) values (475,67);
+insert into t (id,a) values (475,68);
+insert into t (id,a) values (475,69);
+insert into t (id,a) values (475,70);
+insert into t (id,a) values (475,71);
+insert into t (id,a) values (475,72);
+insert into t (id,a) values (475,73);
+insert into t (id,a) values (475,74);
+insert into t (id,a) values (475,75);
+insert into t (id,a) values (475,76);
+insert into t (id,a) values (475,77);
+insert into t (id,a) values (475,78);
+insert into t (id,a) values (475,79);
+insert into t (id,a) values (475,80);
+insert into t (id,a) values (475,81);
+insert into t (id,a) values (475,82);
+insert into t (id,a) values (475,83);
+insert into t (id,a) values (475,84);
+insert into t (id,a) values (475,85);
+insert into t (id,a) values (475,86);
+insert into t (id,a) values (475,87);
+insert into t (id,a) values (475,88);
+insert into t (id,a) values (475,89);
+insert into t (id,a) values (475,90);
+insert into t (id,a) values (475,91);
+insert into t (id,a) values (475,92);
+insert into t (id,a) values (475,93);
+insert into t (id,a) values (475,94);
+insert into t (id,a) values (475,95);
+insert into t (id,a) values (475,96);
+insert into t (id,a) values (475,97);
+insert into t (id,a) values (475,98);
+insert into t (id,a) values (475,99);
+insert into t (id,a) values (476,0);
+insert into t (id,a) values (476,1);
+insert into t (id,a) values (476,2);
+insert into t (id,a) values (476,3);
+insert into t (id,a) values (476,4);
+insert into t (id,a) values (476,5);
+insert into t (id,a) values (476,6);
+insert into t (id,a) values (476,7);
+insert into t (id,a) values (476,8);
+insert into t (id,a) values (476,9);
+insert into t (id,a) values (476,10);
+insert into t (id,a) values (476,11);
+insert into t (id,a) values (476,12);
+insert into t (id,a) values (476,13);
+insert into t (id,a) values (476,14);
+insert into t (id,a) values (476,15);
+insert into t (id,a) values (476,16);
+insert into t (id,a) values (476,17);
+insert into t (id,a) values (476,18);
+insert into t (id,a) values (476,19);
+insert into t (id,a) values (476,20);
+insert into t (id,a) values (476,21);
+insert into t (id,a) values (476,22);
+insert into t (id,a) values (476,23);
+insert into t (id,a) values (476,24);
+insert into t (id,a) values (476,25);
+insert into t (id,a) values (476,26);
+insert into t (id,a) values (476,27);
+insert into t (id,a) values (476,28);
+insert into t (id,a) values (476,29);
+insert into t (id,a) values (476,30);
+insert into t (id,a) values (476,31);
+insert into t (id,a) values (476,32);
+insert into t (id,a) values (476,33);
+insert into t (id,a) values (476,34);
+insert into t (id,a) values (476,35);
+insert into t (id,a) values (476,36);
+insert into t (id,a) values (476,37);
+insert into t (id,a) values (476,38);
+insert into t (id,a) values (476,39);
+insert into t (id,a) values (476,40);
+insert into t (id,a) values (476,41);
+insert into t (id,a) values (476,42);
+insert into t (id,a) values (476,43);
+insert into t (id,a) values (476,44);
+insert into t (id,a) values (476,45);
+insert into t (id,a) values (476,46);
+insert into t (id,a) values (476,47);
+insert into t (id,a) values (476,48);
+insert into t (id,a) values (476,49);
+insert into t (id,a) values (476,50);
+insert into t (id,a) values (476,51);
+insert into t (id,a) values (476,52);
+insert into t (id,a) values (476,53);
+insert into t (id,a) values (476,54);
+insert into t (id,a) values (476,55);
+insert into t (id,a) values (476,56);
+insert into t (id,a) values (476,57);
+insert into t (id,a) values (476,58);
+insert into t (id,a) values (476,59);
+insert into t (id,a) values (476,60);
+insert into t (id,a) values (476,61);
+insert into t (id,a) values (476,62);
+insert into t (id,a) values (476,63);
+insert into t (id,a) values (476,64);
+insert into t (id,a) values (476,65);
+insert into t (id,a) values (476,66);
+insert into t (id,a) values (476,67);
+insert into t (id,a) values (476,68);
+insert into t (id,a) values (476,69);
+insert into t (id,a) values (476,70);
+insert into t (id,a) values (476,71);
+insert into t (id,a) values (476,72);
+insert into t (id,a) values (476,73);
+insert into t (id,a) values (476,74);
+insert into t (id,a) values (476,75);
+insert into t (id,a) values (476,76);
+insert into t (id,a) values (476,77);
+insert into t (id,a) values (476,78);
+insert into t (id,a) values (476,79);
+insert into t (id,a) values (476,80);
+insert into t (id,a) values (476,81);
+insert into t (id,a) values (476,82);
+insert into t (id,a) values (476,83);
+insert into t (id,a) values (476,84);
+insert into t (id,a) values (476,85);
+insert into t (id,a) values (476,86);
+insert into t (id,a) values (476,87);
+insert into t (id,a) values (476,88);
+insert into t (id,a) values (476,89);
+insert into t (id,a) values (476,90);
+insert into t (id,a) values (476,91);
+insert into t (id,a) values (476,92);
+insert into t (id,a) values (476,93);
+insert into t (id,a) values (476,94);
+insert into t (id,a) values (476,95);
+insert into t (id,a) values (476,96);
+insert into t (id,a) values (476,97);
+insert into t (id,a) values (476,98);
+insert into t (id,a) values (476,99);
+insert into t (id,a) values (477,0);
+insert into t (id,a) values (477,1);
+insert into t (id,a) values (477,2);
+insert into t (id,a) values (477,3);
+insert into t (id,a) values (477,4);
+insert into t (id,a) values (477,5);
+insert into t (id,a) values (477,6);
+insert into t (id,a) values (477,7);
+insert into t (id,a) values (477,8);
+insert into t (id,a) values (477,9);
+insert into t (id,a) values (477,10);
+insert into t (id,a) values (477,11);
+insert into t (id,a) values (477,12);
+insert into t (id,a) values (477,13);
+insert into t (id,a) values (477,14);
+insert into t (id,a) values (477,15);
+insert into t (id,a) values (477,16);
+insert into t (id,a) values (477,17);
+insert into t (id,a) values (477,18);
+insert into t (id,a) values (477,19);
+insert into t (id,a) values (477,20);
+insert into t (id,a) values (477,21);
+insert into t (id,a) values (477,22);
+insert into t (id,a) values (477,23);
+insert into t (id,a) values (477,24);
+insert into t (id,a) values (477,25);
+insert into t (id,a) values (477,26);
+insert into t (id,a) values (477,27);
+insert into t (id,a) values (477,28);
+insert into t (id,a) values (477,29);
+insert into t (id,a) values (477,30);
+insert into t (id,a) values (477,31);
+insert into t (id,a) values (477,32);
+insert into t (id,a) values (477,33);
+insert into t (id,a) values (477,34);
+insert into t (id,a) values (477,35);
+insert into t (id,a) values (477,36);
+insert into t (id,a) values (477,37);
+insert into t (id,a) values (477,38);
+insert into t (id,a) values (477,39);
+insert into t (id,a) values (477,40);
+insert into t (id,a) values (477,41);
+insert into t (id,a) values (477,42);
+insert into t (id,a) values (477,43);
+insert into t (id,a) values (477,44);
+insert into t (id,a) values (477,45);
+insert into t (id,a) values (477,46);
+insert into t (id,a) values (477,47);
+insert into t (id,a) values (477,48);
+insert into t (id,a) values (477,49);
+insert into t (id,a) values (477,50);
+insert into t (id,a) values (477,51);
+insert into t (id,a) values (477,52);
+insert into t (id,a) values (477,53);
+insert into t (id,a) values (477,54);
+insert into t (id,a) values (477,55);
+insert into t (id,a) values (477,56);
+insert into t (id,a) values (477,57);
+insert into t (id,a) values (477,58);
+insert into t (id,a) values (477,59);
+insert into t (id,a) values (477,60);
+insert into t (id,a) values (477,61);
+insert into t (id,a) values (477,62);
+insert into t (id,a) values (477,63);
+insert into t (id,a) values (477,64);
+insert into t (id,a) values (477,65);
+insert into t (id,a) values (477,66);
+insert into t (id,a) values (477,67);
+insert into t (id,a) values (477,68);
+insert into t (id,a) values (477,69);
+insert into t (id,a) values (477,70);
+insert into t (id,a) values (477,71);
+insert into t (id,a) values (477,72);
+insert into t (id,a) values (477,73);
+insert into t (id,a) values (477,74);
+insert into t (id,a) values (477,75);
+insert into t (id,a) values (477,76);
+insert into t (id,a) values (477,77);
+insert into t (id,a) values (477,78);
+insert into t (id,a) values (477,79);
+insert into t (id,a) values (477,80);
+insert into t (id,a) values (477,81);
+insert into t (id,a) values (477,82);
+insert into t (id,a) values (477,83);
+insert into t (id,a) values (477,84);
+insert into t (id,a) values (477,85);
+insert into t (id,a) values (477,86);
+insert into t (id,a) values (477,87);
+insert into t (id,a) values (477,88);
+insert into t (id,a) values (477,89);
+insert into t (id,a) values (477,90);
+insert into t (id,a) values (477,91);
+insert into t (id,a) values (477,92);
+insert into t (id,a) values (477,93);
+insert into t (id,a) values (477,94);
+insert into t (id,a) values (477,95);
+insert into t (id,a) values (477,96);
+insert into t (id,a) values (477,97);
+insert into t (id,a) values (477,98);
+insert into t (id,a) values (477,99);
+insert into t (id,a) values (478,0);
+insert into t (id,a) values (478,1);
+insert into t (id,a) values (478,2);
+insert into t (id,a) values (478,3);
+insert into t (id,a) values (478,4);
+insert into t (id,a) values (478,5);
+insert into t (id,a) values (478,6);
+insert into t (id,a) values (478,7);
+insert into t (id,a) values (478,8);
+insert into t (id,a) values (478,9);
+insert into t (id,a) values (478,10);
+insert into t (id,a) values (478,11);
+insert into t (id,a) values (478,12);
+insert into t (id,a) values (478,13);
+insert into t (id,a) values (478,14);
+insert into t (id,a) values (478,15);
+insert into t (id,a) values (478,16);
+insert into t (id,a) values (478,17);
+insert into t (id,a) values (478,18);
+insert into t (id,a) values (478,19);
+insert into t (id,a) values (478,20);
+insert into t (id,a) values (478,21);
+insert into t (id,a) values (478,22);
+insert into t (id,a) values (478,23);
+insert into t (id,a) values (478,24);
+insert into t (id,a) values (478,25);
+insert into t (id,a) values (478,26);
+insert into t (id,a) values (478,27);
+insert into t (id,a) values (478,28);
+insert into t (id,a) values (478,29);
+insert into t (id,a) values (478,30);
+insert into t (id,a) values (478,31);
+insert into t (id,a) values (478,32);
+insert into t (id,a) values (478,33);
+insert into t (id,a) values (478,34);
+insert into t (id,a) values (478,35);
+insert into t (id,a) values (478,36);
+insert into t (id,a) values (478,37);
+insert into t (id,a) values (478,38);
+insert into t (id,a) values (478,39);
+insert into t (id,a) values (478,40);
+insert into t (id,a) values (478,41);
+insert into t (id,a) values (478,42);
+insert into t (id,a) values (478,43);
+insert into t (id,a) values (478,44);
+insert into t (id,a) values (478,45);
+insert into t (id,a) values (478,46);
+insert into t (id,a) values (478,47);
+insert into t (id,a) values (478,48);
+insert into t (id,a) values (478,49);
+insert into t (id,a) values (478,50);
+insert into t (id,a) values (478,51);
+insert into t (id,a) values (478,52);
+insert into t (id,a) values (478,53);
+insert into t (id,a) values (478,54);
+insert into t (id,a) values (478,55);
+insert into t (id,a) values (478,56);
+insert into t (id,a) values (478,57);
+insert into t (id,a) values (478,58);
+insert into t (id,a) values (478,59);
+insert into t (id,a) values (478,60);
+insert into t (id,a) values (478,61);
+insert into t (id,a) values (478,62);
+insert into t (id,a) values (478,63);
+insert into t (id,a) values (478,64);
+insert into t (id,a) values (478,65);
+insert into t (id,a) values (478,66);
+insert into t (id,a) values (478,67);
+insert into t (id,a) values (478,68);
+insert into t (id,a) values (478,69);
+insert into t (id,a) values (478,70);
+insert into t (id,a) values (478,71);
+insert into t (id,a) values (478,72);
+insert into t (id,a) values (478,73);
+insert into t (id,a) values (478,74);
+insert into t (id,a) values (478,75);
+insert into t (id,a) values (478,76);
+insert into t (id,a) values (478,77);
+insert into t (id,a) values (478,78);
+insert into t (id,a) values (478,79);
+insert into t (id,a) values (478,80);
+insert into t (id,a) values (478,81);
+insert into t (id,a) values (478,82);
+insert into t (id,a) values (478,83);
+insert into t (id,a) values (478,84);
+insert into t (id,a) values (478,85);
+insert into t (id,a) values (478,86);
+insert into t (id,a) values (478,87);
+insert into t (id,a) values (478,88);
+insert into t (id,a) values (478,89);
+insert into t (id,a) values (478,90);
+insert into t (id,a) values (478,91);
+insert into t (id,a) values (478,92);
+insert into t (id,a) values (478,93);
+insert into t (id,a) values (478,94);
+insert into t (id,a) values (478,95);
+insert into t (id,a) values (478,96);
+insert into t (id,a) values (478,97);
+insert into t (id,a) values (478,98);
+insert into t (id,a) values (478,99);
+insert into t (id,a) values (479,0);
+insert into t (id,a) values (479,1);
+insert into t (id,a) values (479,2);
+insert into t (id,a) values (479,3);
+insert into t (id,a) values (479,4);
+insert into t (id,a) values (479,5);
+insert into t (id,a) values (479,6);
+insert into t (id,a) values (479,7);
+insert into t (id,a) values (479,8);
+insert into t (id,a) values (479,9);
+insert into t (id,a) values (479,10);
+insert into t (id,a) values (479,11);
+insert into t (id,a) values (479,12);
+insert into t (id,a) values (479,13);
+insert into t (id,a) values (479,14);
+insert into t (id,a) values (479,15);
+insert into t (id,a) values (479,16);
+insert into t (id,a) values (479,17);
+insert into t (id,a) values (479,18);
+insert into t (id,a) values (479,19);
+insert into t (id,a) values (479,20);
+insert into t (id,a) values (479,21);
+insert into t (id,a) values (479,22);
+insert into t (id,a) values (479,23);
+insert into t (id,a) values (479,24);
+insert into t (id,a) values (479,25);
+insert into t (id,a) values (479,26);
+insert into t (id,a) values (479,27);
+insert into t (id,a) values (479,28);
+insert into t (id,a) values (479,29);
+insert into t (id,a) values (479,30);
+insert into t (id,a) values (479,31);
+insert into t (id,a) values (479,32);
+insert into t (id,a) values (479,33);
+insert into t (id,a) values (479,34);
+insert into t (id,a) values (479,35);
+insert into t (id,a) values (479,36);
+insert into t (id,a) values (479,37);
+insert into t (id,a) values (479,38);
+insert into t (id,a) values (479,39);
+insert into t (id,a) values (479,40);
+insert into t (id,a) values (479,41);
+insert into t (id,a) values (479,42);
+insert into t (id,a) values (479,43);
+insert into t (id,a) values (479,44);
+insert into t (id,a) values (479,45);
+insert into t (id,a) values (479,46);
+insert into t (id,a) values (479,47);
+insert into t (id,a) values (479,48);
+insert into t (id,a) values (479,49);
+insert into t (id,a) values (479,50);
+insert into t (id,a) values (479,51);
+insert into t (id,a) values (479,52);
+insert into t (id,a) values (479,53);
+insert into t (id,a) values (479,54);
+insert into t (id,a) values (479,55);
+insert into t (id,a) values (479,56);
+insert into t (id,a) values (479,57);
+insert into t (id,a) values (479,58);
+insert into t (id,a) values (479,59);
+insert into t (id,a) values (479,60);
+insert into t (id,a) values (479,61);
+insert into t (id,a) values (479,62);
+insert into t (id,a) values (479,63);
+insert into t (id,a) values (479,64);
+insert into t (id,a) values (479,65);
+insert into t (id,a) values (479,66);
+insert into t (id,a) values (479,67);
+insert into t (id,a) values (479,68);
+insert into t (id,a) values (479,69);
+insert into t (id,a) values (479,70);
+insert into t (id,a) values (479,71);
+insert into t (id,a) values (479,72);
+insert into t (id,a) values (479,73);
+insert into t (id,a) values (479,74);
+insert into t (id,a) values (479,75);
+insert into t (id,a) values (479,76);
+insert into t (id,a) values (479,77);
+insert into t (id,a) values (479,78);
+insert into t (id,a) values (479,79);
+insert into t (id,a) values (479,80);
+insert into t (id,a) values (479,81);
+insert into t (id,a) values (479,82);
+insert into t (id,a) values (479,83);
+insert into t (id,a) values (479,84);
+insert into t (id,a) values (479,85);
+insert into t (id,a) values (479,86);
+insert into t (id,a) values (479,87);
+insert into t (id,a) values (479,88);
+insert into t (id,a) values (479,89);
+insert into t (id,a) values (479,90);
+insert into t (id,a) values (479,91);
+insert into t (id,a) values (479,92);
+insert into t (id,a) values (479,93);
+insert into t (id,a) values (479,94);
+insert into t (id,a) values (479,95);
+insert into t (id,a) values (479,96);
+insert into t (id,a) values (479,97);
+insert into t (id,a) values (479,98);
+insert into t (id,a) values (479,99);
+insert into t (id,a) values (480,0);
+insert into t (id,a) values (480,1);
+insert into t (id,a) values (480,2);
+insert into t (id,a) values (480,3);
+insert into t (id,a) values (480,4);
+insert into t (id,a) values (480,5);
+insert into t (id,a) values (480,6);
+insert into t (id,a) values (480,7);
+insert into t (id,a) values (480,8);
+insert into t (id,a) values (480,9);
+insert into t (id,a) values (480,10);
+insert into t (id,a) values (480,11);
+insert into t (id,a) values (480,12);
+insert into t (id,a) values (480,13);
+insert into t (id,a) values (480,14);
+insert into t (id,a) values (480,15);
+insert into t (id,a) values (480,16);
+insert into t (id,a) values (480,17);
+insert into t (id,a) values (480,18);
+insert into t (id,a) values (480,19);
+insert into t (id,a) values (480,20);
+insert into t (id,a) values (480,21);
+insert into t (id,a) values (480,22);
+insert into t (id,a) values (480,23);
+insert into t (id,a) values (480,24);
+insert into t (id,a) values (480,25);
+insert into t (id,a) values (480,26);
+insert into t (id,a) values (480,27);
+insert into t (id,a) values (480,28);
+insert into t (id,a) values (480,29);
+insert into t (id,a) values (480,30);
+insert into t (id,a) values (480,31);
+insert into t (id,a) values (480,32);
+insert into t (id,a) values (480,33);
+insert into t (id,a) values (480,34);
+insert into t (id,a) values (480,35);
+insert into t (id,a) values (480,36);
+insert into t (id,a) values (480,37);
+insert into t (id,a) values (480,38);
+insert into t (id,a) values (480,39);
+insert into t (id,a) values (480,40);
+insert into t (id,a) values (480,41);
+insert into t (id,a) values (480,42);
+insert into t (id,a) values (480,43);
+insert into t (id,a) values (480,44);
+insert into t (id,a) values (480,45);
+insert into t (id,a) values (480,46);
+insert into t (id,a) values (480,47);
+insert into t (id,a) values (480,48);
+insert into t (id,a) values (480,49);
+insert into t (id,a) values (480,50);
+insert into t (id,a) values (480,51);
+insert into t (id,a) values (480,52);
+insert into t (id,a) values (480,53);
+insert into t (id,a) values (480,54);
+insert into t (id,a) values (480,55);
+insert into t (id,a) values (480,56);
+insert into t (id,a) values (480,57);
+insert into t (id,a) values (480,58);
+insert into t (id,a) values (480,59);
+insert into t (id,a) values (480,60);
+insert into t (id,a) values (480,61);
+insert into t (id,a) values (480,62);
+insert into t (id,a) values (480,63);
+insert into t (id,a) values (480,64);
+insert into t (id,a) values (480,65);
+insert into t (id,a) values (480,66);
+insert into t (id,a) values (480,67);
+insert into t (id,a) values (480,68);
+insert into t (id,a) values (480,69);
+insert into t (id,a) values (480,70);
+insert into t (id,a) values (480,71);
+insert into t (id,a) values (480,72);
+insert into t (id,a) values (480,73);
+insert into t (id,a) values (480,74);
+insert into t (id,a) values (480,75);
+insert into t (id,a) values (480,76);
+insert into t (id,a) values (480,77);
+insert into t (id,a) values (480,78);
+insert into t (id,a) values (480,79);
+insert into t (id,a) values (480,80);
+insert into t (id,a) values (480,81);
+insert into t (id,a) values (480,82);
+insert into t (id,a) values (480,83);
+insert into t (id,a) values (480,84);
+insert into t (id,a) values (480,85);
+insert into t (id,a) values (480,86);
+insert into t (id,a) values (480,87);
+insert into t (id,a) values (480,88);
+insert into t (id,a) values (480,89);
+insert into t (id,a) values (480,90);
+insert into t (id,a) values (480,91);
+insert into t (id,a) values (480,92);
+insert into t (id,a) values (480,93);
+insert into t (id,a) values (480,94);
+insert into t (id,a) values (480,95);
+insert into t (id,a) values (480,96);
+insert into t (id,a) values (480,97);
+insert into t (id,a) values (480,98);
+insert into t (id,a) values (480,99);
+insert into t (id,a) values (481,0);
+insert into t (id,a) values (481,1);
+insert into t (id,a) values (481,2);
+insert into t (id,a) values (481,3);
+insert into t (id,a) values (481,4);
+insert into t (id,a) values (481,5);
+insert into t (id,a) values (481,6);
+insert into t (id,a) values (481,7);
+insert into t (id,a) values (481,8);
+insert into t (id,a) values (481,9);
+insert into t (id,a) values (481,10);
+insert into t (id,a) values (481,11);
+insert into t (id,a) values (481,12);
+insert into t (id,a) values (481,13);
+insert into t (id,a) values (481,14);
+insert into t (id,a) values (481,15);
+insert into t (id,a) values (481,16);
+insert into t (id,a) values (481,17);
+insert into t (id,a) values (481,18);
+insert into t (id,a) values (481,19);
+insert into t (id,a) values (481,20);
+insert into t (id,a) values (481,21);
+insert into t (id,a) values (481,22);
+insert into t (id,a) values (481,23);
+insert into t (id,a) values (481,24);
+insert into t (id,a) values (481,25);
+insert into t (id,a) values (481,26);
+insert into t (id,a) values (481,27);
+insert into t (id,a) values (481,28);
+insert into t (id,a) values (481,29);
+insert into t (id,a) values (481,30);
+insert into t (id,a) values (481,31);
+insert into t (id,a) values (481,32);
+insert into t (id,a) values (481,33);
+insert into t (id,a) values (481,34);
+insert into t (id,a) values (481,35);
+insert into t (id,a) values (481,36);
+insert into t (id,a) values (481,37);
+insert into t (id,a) values (481,38);
+insert into t (id,a) values (481,39);
+insert into t (id,a) values (481,40);
+insert into t (id,a) values (481,41);
+insert into t (id,a) values (481,42);
+insert into t (id,a) values (481,43);
+insert into t (id,a) values (481,44);
+insert into t (id,a) values (481,45);
+insert into t (id,a) values (481,46);
+insert into t (id,a) values (481,47);
+insert into t (id,a) values (481,48);
+insert into t (id,a) values (481,49);
+insert into t (id,a) values (481,50);
+insert into t (id,a) values (481,51);
+insert into t (id,a) values (481,52);
+insert into t (id,a) values (481,53);
+insert into t (id,a) values (481,54);
+insert into t (id,a) values (481,55);
+insert into t (id,a) values (481,56);
+insert into t (id,a) values (481,57);
+insert into t (id,a) values (481,58);
+insert into t (id,a) values (481,59);
+insert into t (id,a) values (481,60);
+insert into t (id,a) values (481,61);
+insert into t (id,a) values (481,62);
+insert into t (id,a) values (481,63);
+insert into t (id,a) values (481,64);
+insert into t (id,a) values (481,65);
+insert into t (id,a) values (481,66);
+insert into t (id,a) values (481,67);
+insert into t (id,a) values (481,68);
+insert into t (id,a) values (481,69);
+insert into t (id,a) values (481,70);
+insert into t (id,a) values (481,71);
+insert into t (id,a) values (481,72);
+insert into t (id,a) values (481,73);
+insert into t (id,a) values (481,74);
+insert into t (id,a) values (481,75);
+insert into t (id,a) values (481,76);
+insert into t (id,a) values (481,77);
+insert into t (id,a) values (481,78);
+insert into t (id,a) values (481,79);
+insert into t (id,a) values (481,80);
+insert into t (id,a) values (481,81);
+insert into t (id,a) values (481,82);
+insert into t (id,a) values (481,83);
+insert into t (id,a) values (481,84);
+insert into t (id,a) values (481,85);
+insert into t (id,a) values (481,86);
+insert into t (id,a) values (481,87);
+insert into t (id,a) values (481,88);
+insert into t (id,a) values (481,89);
+insert into t (id,a) values (481,90);
+insert into t (id,a) values (481,91);
+insert into t (id,a) values (481,92);
+insert into t (id,a) values (481,93);
+insert into t (id,a) values (481,94);
+insert into t (id,a) values (481,95);
+insert into t (id,a) values (481,96);
+insert into t (id,a) values (481,97);
+insert into t (id,a) values (481,98);
+insert into t (id,a) values (481,99);
+insert into t (id,a) values (482,0);
+insert into t (id,a) values (482,1);
+insert into t (id,a) values (482,2);
+insert into t (id,a) values (482,3);
+insert into t (id,a) values (482,4);
+insert into t (id,a) values (482,5);
+insert into t (id,a) values (482,6);
+insert into t (id,a) values (482,7);
+insert into t (id,a) values (482,8);
+insert into t (id,a) values (482,9);
+insert into t (id,a) values (482,10);
+insert into t (id,a) values (482,11);
+insert into t (id,a) values (482,12);
+insert into t (id,a) values (482,13);
+insert into t (id,a) values (482,14);
+insert into t (id,a) values (482,15);
+insert into t (id,a) values (482,16);
+insert into t (id,a) values (482,17);
+insert into t (id,a) values (482,18);
+insert into t (id,a) values (482,19);
+insert into t (id,a) values (482,20);
+insert into t (id,a) values (482,21);
+insert into t (id,a) values (482,22);
+insert into t (id,a) values (482,23);
+insert into t (id,a) values (482,24);
+insert into t (id,a) values (482,25);
+insert into t (id,a) values (482,26);
+insert into t (id,a) values (482,27);
+insert into t (id,a) values (482,28);
+insert into t (id,a) values (482,29);
+insert into t (id,a) values (482,30);
+insert into t (id,a) values (482,31);
+insert into t (id,a) values (482,32);
+insert into t (id,a) values (482,33);
+insert into t (id,a) values (482,34);
+insert into t (id,a) values (482,35);
+insert into t (id,a) values (482,36);
+insert into t (id,a) values (482,37);
+insert into t (id,a) values (482,38);
+insert into t (id,a) values (482,39);
+insert into t (id,a) values (482,40);
+insert into t (id,a) values (482,41);
+insert into t (id,a) values (482,42);
+insert into t (id,a) values (482,43);
+insert into t (id,a) values (482,44);
+insert into t (id,a) values (482,45);
+insert into t (id,a) values (482,46);
+insert into t (id,a) values (482,47);
+insert into t (id,a) values (482,48);
+insert into t (id,a) values (482,49);
+insert into t (id,a) values (482,50);
+insert into t (id,a) values (482,51);
+insert into t (id,a) values (482,52);
+insert into t (id,a) values (482,53);
+insert into t (id,a) values (482,54);
+insert into t (id,a) values (482,55);
+insert into t (id,a) values (482,56);
+insert into t (id,a) values (482,57);
+insert into t (id,a) values (482,58);
+insert into t (id,a) values (482,59);
+insert into t (id,a) values (482,60);
+insert into t (id,a) values (482,61);
+insert into t (id,a) values (482,62);
+insert into t (id,a) values (482,63);
+insert into t (id,a) values (482,64);
+insert into t (id,a) values (482,65);
+insert into t (id,a) values (482,66);
+insert into t (id,a) values (482,67);
+insert into t (id,a) values (482,68);
+insert into t (id,a) values (482,69);
+insert into t (id,a) values (482,70);
+insert into t (id,a) values (482,71);
+insert into t (id,a) values (482,72);
+insert into t (id,a) values (482,73);
+insert into t (id,a) values (482,74);
+insert into t (id,a) values (482,75);
+insert into t (id,a) values (482,76);
+insert into t (id,a) values (482,77);
+insert into t (id,a) values (482,78);
+insert into t (id,a) values (482,79);
+insert into t (id,a) values (482,80);
+insert into t (id,a) values (482,81);
+insert into t (id,a) values (482,82);
+insert into t (id,a) values (482,83);
+insert into t (id,a) values (482,84);
+insert into t (id,a) values (482,85);
+insert into t (id,a) values (482,86);
+insert into t (id,a) values (482,87);
+insert into t (id,a) values (482,88);
+insert into t (id,a) values (482,89);
+insert into t (id,a) values (482,90);
+insert into t (id,a) values (482,91);
+insert into t (id,a) values (482,92);
+insert into t (id,a) values (482,93);
+insert into t (id,a) values (482,94);
+insert into t (id,a) values (482,95);
+insert into t (id,a) values (482,96);
+insert into t (id,a) values (482,97);
+insert into t (id,a) values (482,98);
+insert into t (id,a) values (482,99);
+insert into t (id,a) values (483,0);
+insert into t (id,a) values (483,1);
+insert into t (id,a) values (483,2);
+insert into t (id,a) values (483,3);
+insert into t (id,a) values (483,4);
+insert into t (id,a) values (483,5);
+insert into t (id,a) values (483,6);
+insert into t (id,a) values (483,7);
+insert into t (id,a) values (483,8);
+insert into t (id,a) values (483,9);
+insert into t (id,a) values (483,10);
+insert into t (id,a) values (483,11);
+insert into t (id,a) values (483,12);
+insert into t (id,a) values (483,13);
+insert into t (id,a) values (483,14);
+insert into t (id,a) values (483,15);
+insert into t (id,a) values (483,16);
+insert into t (id,a) values (483,17);
+insert into t (id,a) values (483,18);
+insert into t (id,a) values (483,19);
+insert into t (id,a) values (483,20);
+insert into t (id,a) values (483,21);
+insert into t (id,a) values (483,22);
+insert into t (id,a) values (483,23);
+insert into t (id,a) values (483,24);
+insert into t (id,a) values (483,25);
+insert into t (id,a) values (483,26);
+insert into t (id,a) values (483,27);
+insert into t (id,a) values (483,28);
+insert into t (id,a) values (483,29);
+insert into t (id,a) values (483,30);
+insert into t (id,a) values (483,31);
+insert into t (id,a) values (483,32);
+insert into t (id,a) values (483,33);
+insert into t (id,a) values (483,34);
+insert into t (id,a) values (483,35);
+insert into t (id,a) values (483,36);
+insert into t (id,a) values (483,37);
+insert into t (id,a) values (483,38);
+insert into t (id,a) values (483,39);
+insert into t (id,a) values (483,40);
+insert into t (id,a) values (483,41);
+insert into t (id,a) values (483,42);
+insert into t (id,a) values (483,43);
+insert into t (id,a) values (483,44);
+insert into t (id,a) values (483,45);
+insert into t (id,a) values (483,46);
+insert into t (id,a) values (483,47);
+insert into t (id,a) values (483,48);
+insert into t (id,a) values (483,49);
+insert into t (id,a) values (483,50);
+insert into t (id,a) values (483,51);
+insert into t (id,a) values (483,52);
+insert into t (id,a) values (483,53);
+insert into t (id,a) values (483,54);
+insert into t (id,a) values (483,55);
+insert into t (id,a) values (483,56);
+insert into t (id,a) values (483,57);
+insert into t (id,a) values (483,58);
+insert into t (id,a) values (483,59);
+insert into t (id,a) values (483,60);
+insert into t (id,a) values (483,61);
+insert into t (id,a) values (483,62);
+insert into t (id,a) values (483,63);
+insert into t (id,a) values (483,64);
+insert into t (id,a) values (483,65);
+insert into t (id,a) values (483,66);
+insert into t (id,a) values (483,67);
+insert into t (id,a) values (483,68);
+insert into t (id,a) values (483,69);
+insert into t (id,a) values (483,70);
+insert into t (id,a) values (483,71);
+insert into t (id,a) values (483,72);
+insert into t (id,a) values (483,73);
+insert into t (id,a) values (483,74);
+insert into t (id,a) values (483,75);
+insert into t (id,a) values (483,76);
+insert into t (id,a) values (483,77);
+insert into t (id,a) values (483,78);
+insert into t (id,a) values (483,79);
+insert into t (id,a) values (483,80);
+insert into t (id,a) values (483,81);
+insert into t (id,a) values (483,82);
+insert into t (id,a) values (483,83);
+insert into t (id,a) values (483,84);
+insert into t (id,a) values (483,85);
+insert into t (id,a) values (483,86);
+insert into t (id,a) values (483,87);
+insert into t (id,a) values (483,88);
+insert into t (id,a) values (483,89);
+insert into t (id,a) values (483,90);
+insert into t (id,a) values (483,91);
+insert into t (id,a) values (483,92);
+insert into t (id,a) values (483,93);
+insert into t (id,a) values (483,94);
+insert into t (id,a) values (483,95);
+insert into t (id,a) values (483,96);
+insert into t (id,a) values (483,97);
+insert into t (id,a) values (483,98);
+insert into t (id,a) values (483,99);
+insert into t (id,a) values (484,0);
+insert into t (id,a) values (484,1);
+insert into t (id,a) values (484,2);
+insert into t (id,a) values (484,3);
+insert into t (id,a) values (484,4);
+insert into t (id,a) values (484,5);
+insert into t (id,a) values (484,6);
+insert into t (id,a) values (484,7);
+insert into t (id,a) values (484,8);
+insert into t (id,a) values (484,9);
+insert into t (id,a) values (484,10);
+insert into t (id,a) values (484,11);
+insert into t (id,a) values (484,12);
+insert into t (id,a) values (484,13);
+insert into t (id,a) values (484,14);
+insert into t (id,a) values (484,15);
+insert into t (id,a) values (484,16);
+insert into t (id,a) values (484,17);
+insert into t (id,a) values (484,18);
+insert into t (id,a) values (484,19);
+insert into t (id,a) values (484,20);
+insert into t (id,a) values (484,21);
+insert into t (id,a) values (484,22);
+insert into t (id,a) values (484,23);
+insert into t (id,a) values (484,24);
+insert into t (id,a) values (484,25);
+insert into t (id,a) values (484,26);
+insert into t (id,a) values (484,27);
+insert into t (id,a) values (484,28);
+insert into t (id,a) values (484,29);
+insert into t (id,a) values (484,30);
+insert into t (id,a) values (484,31);
+insert into t (id,a) values (484,32);
+insert into t (id,a) values (484,33);
+insert into t (id,a) values (484,34);
+insert into t (id,a) values (484,35);
+insert into t (id,a) values (484,36);
+insert into t (id,a) values (484,37);
+insert into t (id,a) values (484,38);
+insert into t (id,a) values (484,39);
+insert into t (id,a) values (484,40);
+insert into t (id,a) values (484,41);
+insert into t (id,a) values (484,42);
+insert into t (id,a) values (484,43);
+insert into t (id,a) values (484,44);
+insert into t (id,a) values (484,45);
+insert into t (id,a) values (484,46);
+insert into t (id,a) values (484,47);
+insert into t (id,a) values (484,48);
+insert into t (id,a) values (484,49);
+insert into t (id,a) values (484,50);
+insert into t (id,a) values (484,51);
+insert into t (id,a) values (484,52);
+insert into t (id,a) values (484,53);
+insert into t (id,a) values (484,54);
+insert into t (id,a) values (484,55);
+insert into t (id,a) values (484,56);
+insert into t (id,a) values (484,57);
+insert into t (id,a) values (484,58);
+insert into t (id,a) values (484,59);
+insert into t (id,a) values (484,60);
+insert into t (id,a) values (484,61);
+insert into t (id,a) values (484,62);
+insert into t (id,a) values (484,63);
+insert into t (id,a) values (484,64);
+insert into t (id,a) values (484,65);
+insert into t (id,a) values (484,66);
+insert into t (id,a) values (484,67);
+insert into t (id,a) values (484,68);
+insert into t (id,a) values (484,69);
+insert into t (id,a) values (484,70);
+insert into t (id,a) values (484,71);
+insert into t (id,a) values (484,72);
+insert into t (id,a) values (484,73);
+insert into t (id,a) values (484,74);
+insert into t (id,a) values (484,75);
+insert into t (id,a) values (484,76);
+insert into t (id,a) values (484,77);
+insert into t (id,a) values (484,78);
+insert into t (id,a) values (484,79);
+insert into t (id,a) values (484,80);
+insert into t (id,a) values (484,81);
+insert into t (id,a) values (484,82);
+insert into t (id,a) values (484,83);
+insert into t (id,a) values (484,84);
+insert into t (id,a) values (484,85);
+insert into t (id,a) values (484,86);
+insert into t (id,a) values (484,87);
+insert into t (id,a) values (484,88);
+insert into t (id,a) values (484,89);
+insert into t (id,a) values (484,90);
+insert into t (id,a) values (484,91);
+insert into t (id,a) values (484,92);
+insert into t (id,a) values (484,93);
+insert into t (id,a) values (484,94);
+insert into t (id,a) values (484,95);
+insert into t (id,a) values (484,96);
+insert into t (id,a) values (484,97);
+insert into t (id,a) values (484,98);
+insert into t (id,a) values (484,99);
+insert into t (id,a) values (485,0);
+insert into t (id,a) values (485,1);
+insert into t (id,a) values (485,2);
+insert into t (id,a) values (485,3);
+insert into t (id,a) values (485,4);
+insert into t (id,a) values (485,5);
+insert into t (id,a) values (485,6);
+insert into t (id,a) values (485,7);
+insert into t (id,a) values (485,8);
+insert into t (id,a) values (485,9);
+insert into t (id,a) values (485,10);
+insert into t (id,a) values (485,11);
+insert into t (id,a) values (485,12);
+insert into t (id,a) values (485,13);
+insert into t (id,a) values (485,14);
+insert into t (id,a) values (485,15);
+insert into t (id,a) values (485,16);
+insert into t (id,a) values (485,17);
+insert into t (id,a) values (485,18);
+insert into t (id,a) values (485,19);
+insert into t (id,a) values (485,20);
+insert into t (id,a) values (485,21);
+insert into t (id,a) values (485,22);
+insert into t (id,a) values (485,23);
+insert into t (id,a) values (485,24);
+insert into t (id,a) values (485,25);
+insert into t (id,a) values (485,26);
+insert into t (id,a) values (485,27);
+insert into t (id,a) values (485,28);
+insert into t (id,a) values (485,29);
+insert into t (id,a) values (485,30);
+insert into t (id,a) values (485,31);
+insert into t (id,a) values (485,32);
+insert into t (id,a) values (485,33);
+insert into t (id,a) values (485,34);
+insert into t (id,a) values (485,35);
+insert into t (id,a) values (485,36);
+insert into t (id,a) values (485,37);
+insert into t (id,a) values (485,38);
+insert into t (id,a) values (485,39);
+insert into t (id,a) values (485,40);
+insert into t (id,a) values (485,41);
+insert into t (id,a) values (485,42);
+insert into t (id,a) values (485,43);
+insert into t (id,a) values (485,44);
+insert into t (id,a) values (485,45);
+insert into t (id,a) values (485,46);
+insert into t (id,a) values (485,47);
+insert into t (id,a) values (485,48);
+insert into t (id,a) values (485,49);
+insert into t (id,a) values (485,50);
+insert into t (id,a) values (485,51);
+insert into t (id,a) values (485,52);
+insert into t (id,a) values (485,53);
+insert into t (id,a) values (485,54);
+insert into t (id,a) values (485,55);
+insert into t (id,a) values (485,56);
+insert into t (id,a) values (485,57);
+insert into t (id,a) values (485,58);
+insert into t (id,a) values (485,59);
+insert into t (id,a) values (485,60);
+insert into t (id,a) values (485,61);
+insert into t (id,a) values (485,62);
+insert into t (id,a) values (485,63);
+insert into t (id,a) values (485,64);
+insert into t (id,a) values (485,65);
+insert into t (id,a) values (485,66);
+insert into t (id,a) values (485,67);
+insert into t (id,a) values (485,68);
+insert into t (id,a) values (485,69);
+insert into t (id,a) values (485,70);
+insert into t (id,a) values (485,71);
+insert into t (id,a) values (485,72);
+insert into t (id,a) values (485,73);
+insert into t (id,a) values (485,74);
+insert into t (id,a) values (485,75);
+insert into t (id,a) values (485,76);
+insert into t (id,a) values (485,77);
+insert into t (id,a) values (485,78);
+insert into t (id,a) values (485,79);
+insert into t (id,a) values (485,80);
+insert into t (id,a) values (485,81);
+insert into t (id,a) values (485,82);
+insert into t (id,a) values (485,83);
+insert into t (id,a) values (485,84);
+insert into t (id,a) values (485,85);
+insert into t (id,a) values (485,86);
+insert into t (id,a) values (485,87);
+insert into t (id,a) values (485,88);
+insert into t (id,a) values (485,89);
+insert into t (id,a) values (485,90);
+insert into t (id,a) values (485,91);
+insert into t (id,a) values (485,92);
+insert into t (id,a) values (485,93);
+insert into t (id,a) values (485,94);
+insert into t (id,a) values (485,95);
+insert into t (id,a) values (485,96);
+insert into t (id,a) values (485,97);
+insert into t (id,a) values (485,98);
+insert into t (id,a) values (485,99);
+insert into t (id,a) values (486,0);
+insert into t (id,a) values (486,1);
+insert into t (id,a) values (486,2);
+insert into t (id,a) values (486,3);
+insert into t (id,a) values (486,4);
+insert into t (id,a) values (486,5);
+insert into t (id,a) values (486,6);
+insert into t (id,a) values (486,7);
+insert into t (id,a) values (486,8);
+insert into t (id,a) values (486,9);
+insert into t (id,a) values (486,10);
+insert into t (id,a) values (486,11);
+insert into t (id,a) values (486,12);
+insert into t (id,a) values (486,13);
+insert into t (id,a) values (486,14);
+insert into t (id,a) values (486,15);
+insert into t (id,a) values (486,16);
+insert into t (id,a) values (486,17);
+insert into t (id,a) values (486,18);
+insert into t (id,a) values (486,19);
+insert into t (id,a) values (486,20);
+insert into t (id,a) values (486,21);
+insert into t (id,a) values (486,22);
+insert into t (id,a) values (486,23);
+insert into t (id,a) values (486,24);
+insert into t (id,a) values (486,25);
+insert into t (id,a) values (486,26);
+insert into t (id,a) values (486,27);
+insert into t (id,a) values (486,28);
+insert into t (id,a) values (486,29);
+insert into t (id,a) values (486,30);
+insert into t (id,a) values (486,31);
+insert into t (id,a) values (486,32);
+insert into t (id,a) values (486,33);
+insert into t (id,a) values (486,34);
+insert into t (id,a) values (486,35);
+insert into t (id,a) values (486,36);
+insert into t (id,a) values (486,37);
+insert into t (id,a) values (486,38);
+insert into t (id,a) values (486,39);
+insert into t (id,a) values (486,40);
+insert into t (id,a) values (486,41);
+insert into t (id,a) values (486,42);
+insert into t (id,a) values (486,43);
+insert into t (id,a) values (486,44);
+insert into t (id,a) values (486,45);
+insert into t (id,a) values (486,46);
+insert into t (id,a) values (486,47);
+insert into t (id,a) values (486,48);
+insert into t (id,a) values (486,49);
+insert into t (id,a) values (486,50);
+insert into t (id,a) values (486,51);
+insert into t (id,a) values (486,52);
+insert into t (id,a) values (486,53);
+insert into t (id,a) values (486,54);
+insert into t (id,a) values (486,55);
+insert into t (id,a) values (486,56);
+insert into t (id,a) values (486,57);
+insert into t (id,a) values (486,58);
+insert into t (id,a) values (486,59);
+insert into t (id,a) values (486,60);
+insert into t (id,a) values (486,61);
+insert into t (id,a) values (486,62);
+insert into t (id,a) values (486,63);
+insert into t (id,a) values (486,64);
+insert into t (id,a) values (486,65);
+insert into t (id,a) values (486,66);
+insert into t (id,a) values (486,67);
+insert into t (id,a) values (486,68);
+insert into t (id,a) values (486,69);
+insert into t (id,a) values (486,70);
+insert into t (id,a) values (486,71);
+insert into t (id,a) values (486,72);
+insert into t (id,a) values (486,73);
+insert into t (id,a) values (486,74);
+insert into t (id,a) values (486,75);
+insert into t (id,a) values (486,76);
+insert into t (id,a) values (486,77);
+insert into t (id,a) values (486,78);
+insert into t (id,a) values (486,79);
+insert into t (id,a) values (486,80);
+insert into t (id,a) values (486,81);
+insert into t (id,a) values (486,82);
+insert into t (id,a) values (486,83);
+insert into t (id,a) values (486,84);
+insert into t (id,a) values (486,85);
+insert into t (id,a) values (486,86);
+insert into t (id,a) values (486,87);
+insert into t (id,a) values (486,88);
+insert into t (id,a) values (486,89);
+insert into t (id,a) values (486,90);
+insert into t (id,a) values (486,91);
+insert into t (id,a) values (486,92);
+insert into t (id,a) values (486,93);
+insert into t (id,a) values (486,94);
+insert into t (id,a) values (486,95);
+insert into t (id,a) values (486,96);
+insert into t (id,a) values (486,97);
+insert into t (id,a) values (486,98);
+insert into t (id,a) values (486,99);
+insert into t (id,a) values (487,0);
+insert into t (id,a) values (487,1);
+insert into t (id,a) values (487,2);
+insert into t (id,a) values (487,3);
+insert into t (id,a) values (487,4);
+insert into t (id,a) values (487,5);
+insert into t (id,a) values (487,6);
+insert into t (id,a) values (487,7);
+insert into t (id,a) values (487,8);
+insert into t (id,a) values (487,9);
+insert into t (id,a) values (487,10);
+insert into t (id,a) values (487,11);
+insert into t (id,a) values (487,12);
+insert into t (id,a) values (487,13);
+insert into t (id,a) values (487,14);
+insert into t (id,a) values (487,15);
+insert into t (id,a) values (487,16);
+insert into t (id,a) values (487,17);
+insert into t (id,a) values (487,18);
+insert into t (id,a) values (487,19);
+insert into t (id,a) values (487,20);
+insert into t (id,a) values (487,21);
+insert into t (id,a) values (487,22);
+insert into t (id,a) values (487,23);
+insert into t (id,a) values (487,24);
+insert into t (id,a) values (487,25);
+insert into t (id,a) values (487,26);
+insert into t (id,a) values (487,27);
+insert into t (id,a) values (487,28);
+insert into t (id,a) values (487,29);
+insert into t (id,a) values (487,30);
+insert into t (id,a) values (487,31);
+insert into t (id,a) values (487,32);
+insert into t (id,a) values (487,33);
+insert into t (id,a) values (487,34);
+insert into t (id,a) values (487,35);
+insert into t (id,a) values (487,36);
+insert into t (id,a) values (487,37);
+insert into t (id,a) values (487,38);
+insert into t (id,a) values (487,39);
+insert into t (id,a) values (487,40);
+insert into t (id,a) values (487,41);
+insert into t (id,a) values (487,42);
+insert into t (id,a) values (487,43);
+insert into t (id,a) values (487,44);
+insert into t (id,a) values (487,45);
+insert into t (id,a) values (487,46);
+insert into t (id,a) values (487,47);
+insert into t (id,a) values (487,48);
+insert into t (id,a) values (487,49);
+insert into t (id,a) values (487,50);
+insert into t (id,a) values (487,51);
+insert into t (id,a) values (487,52);
+insert into t (id,a) values (487,53);
+insert into t (id,a) values (487,54);
+insert into t (id,a) values (487,55);
+insert into t (id,a) values (487,56);
+insert into t (id,a) values (487,57);
+insert into t (id,a) values (487,58);
+insert into t (id,a) values (487,59);
+insert into t (id,a) values (487,60);
+insert into t (id,a) values (487,61);
+insert into t (id,a) values (487,62);
+insert into t (id,a) values (487,63);
+insert into t (id,a) values (487,64);
+insert into t (id,a) values (487,65);
+insert into t (id,a) values (487,66);
+insert into t (id,a) values (487,67);
+insert into t (id,a) values (487,68);
+insert into t (id,a) values (487,69);
+insert into t (id,a) values (487,70);
+insert into t (id,a) values (487,71);
+insert into t (id,a) values (487,72);
+insert into t (id,a) values (487,73);
+insert into t (id,a) values (487,74);
+insert into t (id,a) values (487,75);
+insert into t (id,a) values (487,76);
+insert into t (id,a) values (487,77);
+insert into t (id,a) values (487,78);
+insert into t (id,a) values (487,79);
+insert into t (id,a) values (487,80);
+insert into t (id,a) values (487,81);
+insert into t (id,a) values (487,82);
+insert into t (id,a) values (487,83);
+insert into t (id,a) values (487,84);
+insert into t (id,a) values (487,85);
+insert into t (id,a) values (487,86);
+insert into t (id,a) values (487,87);
+insert into t (id,a) values (487,88);
+insert into t (id,a) values (487,89);
+insert into t (id,a) values (487,90);
+insert into t (id,a) values (487,91);
+insert into t (id,a) values (487,92);
+insert into t (id,a) values (487,93);
+insert into t (id,a) values (487,94);
+insert into t (id,a) values (487,95);
+insert into t (id,a) values (487,96);
+insert into t (id,a) values (487,97);
+insert into t (id,a) values (487,98);
+insert into t (id,a) values (487,99);
+insert into t (id,a) values (488,0);
+insert into t (id,a) values (488,1);
+insert into t (id,a) values (488,2);
+insert into t (id,a) values (488,3);
+insert into t (id,a) values (488,4);
+insert into t (id,a) values (488,5);
+insert into t (id,a) values (488,6);
+insert into t (id,a) values (488,7);
+insert into t (id,a) values (488,8);
+insert into t (id,a) values (488,9);
+insert into t (id,a) values (488,10);
+insert into t (id,a) values (488,11);
+insert into t (id,a) values (488,12);
+insert into t (id,a) values (488,13);
+insert into t (id,a) values (488,14);
+insert into t (id,a) values (488,15);
+insert into t (id,a) values (488,16);
+insert into t (id,a) values (488,17);
+insert into t (id,a) values (488,18);
+insert into t (id,a) values (488,19);
+insert into t (id,a) values (488,20);
+insert into t (id,a) values (488,21);
+insert into t (id,a) values (488,22);
+insert into t (id,a) values (488,23);
+insert into t (id,a) values (488,24);
+insert into t (id,a) values (488,25);
+insert into t (id,a) values (488,26);
+insert into t (id,a) values (488,27);
+insert into t (id,a) values (488,28);
+insert into t (id,a) values (488,29);
+insert into t (id,a) values (488,30);
+insert into t (id,a) values (488,31);
+insert into t (id,a) values (488,32);
+insert into t (id,a) values (488,33);
+insert into t (id,a) values (488,34);
+insert into t (id,a) values (488,35);
+insert into t (id,a) values (488,36);
+insert into t (id,a) values (488,37);
+insert into t (id,a) values (488,38);
+insert into t (id,a) values (488,39);
+insert into t (id,a) values (488,40);
+insert into t (id,a) values (488,41);
+insert into t (id,a) values (488,42);
+insert into t (id,a) values (488,43);
+insert into t (id,a) values (488,44);
+insert into t (id,a) values (488,45);
+insert into t (id,a) values (488,46);
+insert into t (id,a) values (488,47);
+insert into t (id,a) values (488,48);
+insert into t (id,a) values (488,49);
+insert into t (id,a) values (488,50);
+insert into t (id,a) values (488,51);
+insert into t (id,a) values (488,52);
+insert into t (id,a) values (488,53);
+insert into t (id,a) values (488,54);
+insert into t (id,a) values (488,55);
+insert into t (id,a) values (488,56);
+insert into t (id,a) values (488,57);
+insert into t (id,a) values (488,58);
+insert into t (id,a) values (488,59);
+insert into t (id,a) values (488,60);
+insert into t (id,a) values (488,61);
+insert into t (id,a) values (488,62);
+insert into t (id,a) values (488,63);
+insert into t (id,a) values (488,64);
+insert into t (id,a) values (488,65);
+insert into t (id,a) values (488,66);
+insert into t (id,a) values (488,67);
+insert into t (id,a) values (488,68);
+insert into t (id,a) values (488,69);
+insert into t (id,a) values (488,70);
+insert into t (id,a) values (488,71);
+insert into t (id,a) values (488,72);
+insert into t (id,a) values (488,73);
+insert into t (id,a) values (488,74);
+insert into t (id,a) values (488,75);
+insert into t (id,a) values (488,76);
+insert into t (id,a) values (488,77);
+insert into t (id,a) values (488,78);
+insert into t (id,a) values (488,79);
+insert into t (id,a) values (488,80);
+insert into t (id,a) values (488,81);
+insert into t (id,a) values (488,82);
+insert into t (id,a) values (488,83);
+insert into t (id,a) values (488,84);
+insert into t (id,a) values (488,85);
+insert into t (id,a) values (488,86);
+insert into t (id,a) values (488,87);
+insert into t (id,a) values (488,88);
+insert into t (id,a) values (488,89);
+insert into t (id,a) values (488,90);
+insert into t (id,a) values (488,91);
+insert into t (id,a) values (488,92);
+insert into t (id,a) values (488,93);
+insert into t (id,a) values (488,94);
+insert into t (id,a) values (488,95);
+insert into t (id,a) values (488,96);
+insert into t (id,a) values (488,97);
+insert into t (id,a) values (488,98);
+insert into t (id,a) values (488,99);
+insert into t (id,a) values (489,0);
+insert into t (id,a) values (489,1);
+insert into t (id,a) values (489,2);
+insert into t (id,a) values (489,3);
+insert into t (id,a) values (489,4);
+insert into t (id,a) values (489,5);
+insert into t (id,a) values (489,6);
+insert into t (id,a) values (489,7);
+insert into t (id,a) values (489,8);
+insert into t (id,a) values (489,9);
+insert into t (id,a) values (489,10);
+insert into t (id,a) values (489,11);
+insert into t (id,a) values (489,12);
+insert into t (id,a) values (489,13);
+insert into t (id,a) values (489,14);
+insert into t (id,a) values (489,15);
+insert into t (id,a) values (489,16);
+insert into t (id,a) values (489,17);
+insert into t (id,a) values (489,18);
+insert into t (id,a) values (489,19);
+insert into t (id,a) values (489,20);
+insert into t (id,a) values (489,21);
+insert into t (id,a) values (489,22);
+insert into t (id,a) values (489,23);
+insert into t (id,a) values (489,24);
+insert into t (id,a) values (489,25);
+insert into t (id,a) values (489,26);
+insert into t (id,a) values (489,27);
+insert into t (id,a) values (489,28);
+insert into t (id,a) values (489,29);
+insert into t (id,a) values (489,30);
+insert into t (id,a) values (489,31);
+insert into t (id,a) values (489,32);
+insert into t (id,a) values (489,33);
+insert into t (id,a) values (489,34);
+insert into t (id,a) values (489,35);
+insert into t (id,a) values (489,36);
+insert into t (id,a) values (489,37);
+insert into t (id,a) values (489,38);
+insert into t (id,a) values (489,39);
+insert into t (id,a) values (489,40);
+insert into t (id,a) values (489,41);
+insert into t (id,a) values (489,42);
+insert into t (id,a) values (489,43);
+insert into t (id,a) values (489,44);
+insert into t (id,a) values (489,45);
+insert into t (id,a) values (489,46);
+insert into t (id,a) values (489,47);
+insert into t (id,a) values (489,48);
+insert into t (id,a) values (489,49);
+insert into t (id,a) values (489,50);
+insert into t (id,a) values (489,51);
+insert into t (id,a) values (489,52);
+insert into t (id,a) values (489,53);
+insert into t (id,a) values (489,54);
+insert into t (id,a) values (489,55);
+insert into t (id,a) values (489,56);
+insert into t (id,a) values (489,57);
+insert into t (id,a) values (489,58);
+insert into t (id,a) values (489,59);
+insert into t (id,a) values (489,60);
+insert into t (id,a) values (489,61);
+insert into t (id,a) values (489,62);
+insert into t (id,a) values (489,63);
+insert into t (id,a) values (489,64);
+insert into t (id,a) values (489,65);
+insert into t (id,a) values (489,66);
+insert into t (id,a) values (489,67);
+insert into t (id,a) values (489,68);
+insert into t (id,a) values (489,69);
+insert into t (id,a) values (489,70);
+insert into t (id,a) values (489,71);
+insert into t (id,a) values (489,72);
+insert into t (id,a) values (489,73);
+insert into t (id,a) values (489,74);
+insert into t (id,a) values (489,75);
+insert into t (id,a) values (489,76);
+insert into t (id,a) values (489,77);
+insert into t (id,a) values (489,78);
+insert into t (id,a) values (489,79);
+insert into t (id,a) values (489,80);
+insert into t (id,a) values (489,81);
+insert into t (id,a) values (489,82);
+insert into t (id,a) values (489,83);
+insert into t (id,a) values (489,84);
+insert into t (id,a) values (489,85);
+insert into t (id,a) values (489,86);
+insert into t (id,a) values (489,87);
+insert into t (id,a) values (489,88);
+insert into t (id,a) values (489,89);
+insert into t (id,a) values (489,90);
+insert into t (id,a) values (489,91);
+insert into t (id,a) values (489,92);
+insert into t (id,a) values (489,93);
+insert into t (id,a) values (489,94);
+insert into t (id,a) values (489,95);
+insert into t (id,a) values (489,96);
+insert into t (id,a) values (489,97);
+insert into t (id,a) values (489,98);
+insert into t (id,a) values (489,99);
+insert into t (id,a) values (490,0);
+insert into t (id,a) values (490,1);
+insert into t (id,a) values (490,2);
+insert into t (id,a) values (490,3);
+insert into t (id,a) values (490,4);
+insert into t (id,a) values (490,5);
+insert into t (id,a) values (490,6);
+insert into t (id,a) values (490,7);
+insert into t (id,a) values (490,8);
+insert into t (id,a) values (490,9);
+insert into t (id,a) values (490,10);
+insert into t (id,a) values (490,11);
+insert into t (id,a) values (490,12);
+insert into t (id,a) values (490,13);
+insert into t (id,a) values (490,14);
+insert into t (id,a) values (490,15);
+insert into t (id,a) values (490,16);
+insert into t (id,a) values (490,17);
+insert into t (id,a) values (490,18);
+insert into t (id,a) values (490,19);
+insert into t (id,a) values (490,20);
+insert into t (id,a) values (490,21);
+insert into t (id,a) values (490,22);
+insert into t (id,a) values (490,23);
+insert into t (id,a) values (490,24);
+insert into t (id,a) values (490,25);
+insert into t (id,a) values (490,26);
+insert into t (id,a) values (490,27);
+insert into t (id,a) values (490,28);
+insert into t (id,a) values (490,29);
+insert into t (id,a) values (490,30);
+insert into t (id,a) values (490,31);
+insert into t (id,a) values (490,32);
+insert into t (id,a) values (490,33);
+insert into t (id,a) values (490,34);
+insert into t (id,a) values (490,35);
+insert into t (id,a) values (490,36);
+insert into t (id,a) values (490,37);
+insert into t (id,a) values (490,38);
+insert into t (id,a) values (490,39);
+insert into t (id,a) values (490,40);
+insert into t (id,a) values (490,41);
+insert into t (id,a) values (490,42);
+insert into t (id,a) values (490,43);
+insert into t (id,a) values (490,44);
+insert into t (id,a) values (490,45);
+insert into t (id,a) values (490,46);
+insert into t (id,a) values (490,47);
+insert into t (id,a) values (490,48);
+insert into t (id,a) values (490,49);
+insert into t (id,a) values (490,50);
+insert into t (id,a) values (490,51);
+insert into t (id,a) values (490,52);
+insert into t (id,a) values (490,53);
+insert into t (id,a) values (490,54);
+insert into t (id,a) values (490,55);
+insert into t (id,a) values (490,56);
+insert into t (id,a) values (490,57);
+insert into t (id,a) values (490,58);
+insert into t (id,a) values (490,59);
+insert into t (id,a) values (490,60);
+insert into t (id,a) values (490,61);
+insert into t (id,a) values (490,62);
+insert into t (id,a) values (490,63);
+insert into t (id,a) values (490,64);
+insert into t (id,a) values (490,65);
+insert into t (id,a) values (490,66);
+insert into t (id,a) values (490,67);
+insert into t (id,a) values (490,68);
+insert into t (id,a) values (490,69);
+insert into t (id,a) values (490,70);
+insert into t (id,a) values (490,71);
+insert into t (id,a) values (490,72);
+insert into t (id,a) values (490,73);
+insert into t (id,a) values (490,74);
+insert into t (id,a) values (490,75);
+insert into t (id,a) values (490,76);
+insert into t (id,a) values (490,77);
+insert into t (id,a) values (490,78);
+insert into t (id,a) values (490,79);
+insert into t (id,a) values (490,80);
+insert into t (id,a) values (490,81);
+insert into t (id,a) values (490,82);
+insert into t (id,a) values (490,83);
+insert into t (id,a) values (490,84);
+insert into t (id,a) values (490,85);
+insert into t (id,a) values (490,86);
+insert into t (id,a) values (490,87);
+insert into t (id,a) values (490,88);
+insert into t (id,a) values (490,89);
+insert into t (id,a) values (490,90);
+insert into t (id,a) values (490,91);
+insert into t (id,a) values (490,92);
+insert into t (id,a) values (490,93);
+insert into t (id,a) values (490,94);
+insert into t (id,a) values (490,95);
+insert into t (id,a) values (490,96);
+insert into t (id,a) values (490,97);
+insert into t (id,a) values (490,98);
+insert into t (id,a) values (490,99);
+insert into t (id,a) values (491,0);
+insert into t (id,a) values (491,1);
+insert into t (id,a) values (491,2);
+insert into t (id,a) values (491,3);
+insert into t (id,a) values (491,4);
+insert into t (id,a) values (491,5);
+insert into t (id,a) values (491,6);
+insert into t (id,a) values (491,7);
+insert into t (id,a) values (491,8);
+insert into t (id,a) values (491,9);
+insert into t (id,a) values (491,10);
+insert into t (id,a) values (491,11);
+insert into t (id,a) values (491,12);
+insert into t (id,a) values (491,13);
+insert into t (id,a) values (491,14);
+insert into t (id,a) values (491,15);
+insert into t (id,a) values (491,16);
+insert into t (id,a) values (491,17);
+insert into t (id,a) values (491,18);
+insert into t (id,a) values (491,19);
+insert into t (id,a) values (491,20);
+insert into t (id,a) values (491,21);
+insert into t (id,a) values (491,22);
+insert into t (id,a) values (491,23);
+insert into t (id,a) values (491,24);
+insert into t (id,a) values (491,25);
+insert into t (id,a) values (491,26);
+insert into t (id,a) values (491,27);
+insert into t (id,a) values (491,28);
+insert into t (id,a) values (491,29);
+insert into t (id,a) values (491,30);
+insert into t (id,a) values (491,31);
+insert into t (id,a) values (491,32);
+insert into t (id,a) values (491,33);
+insert into t (id,a) values (491,34);
+insert into t (id,a) values (491,35);
+insert into t (id,a) values (491,36);
+insert into t (id,a) values (491,37);
+insert into t (id,a) values (491,38);
+insert into t (id,a) values (491,39);
+insert into t (id,a) values (491,40);
+insert into t (id,a) values (491,41);
+insert into t (id,a) values (491,42);
+insert into t (id,a) values (491,43);
+insert into t (id,a) values (491,44);
+insert into t (id,a) values (491,45);
+insert into t (id,a) values (491,46);
+insert into t (id,a) values (491,47);
+insert into t (id,a) values (491,48);
+insert into t (id,a) values (491,49);
+insert into t (id,a) values (491,50);
+insert into t (id,a) values (491,51);
+insert into t (id,a) values (491,52);
+insert into t (id,a) values (491,53);
+insert into t (id,a) values (491,54);
+insert into t (id,a) values (491,55);
+insert into t (id,a) values (491,56);
+insert into t (id,a) values (491,57);
+insert into t (id,a) values (491,58);
+insert into t (id,a) values (491,59);
+insert into t (id,a) values (491,60);
+insert into t (id,a) values (491,61);
+insert into t (id,a) values (491,62);
+insert into t (id,a) values (491,63);
+insert into t (id,a) values (491,64);
+insert into t (id,a) values (491,65);
+insert into t (id,a) values (491,66);
+insert into t (id,a) values (491,67);
+insert into t (id,a) values (491,68);
+insert into t (id,a) values (491,69);
+insert into t (id,a) values (491,70);
+insert into t (id,a) values (491,71);
+insert into t (id,a) values (491,72);
+insert into t (id,a) values (491,73);
+insert into t (id,a) values (491,74);
+insert into t (id,a) values (491,75);
+insert into t (id,a) values (491,76);
+insert into t (id,a) values (491,77);
+insert into t (id,a) values (491,78);
+insert into t (id,a) values (491,79);
+insert into t (id,a) values (491,80);
+insert into t (id,a) values (491,81);
+insert into t (id,a) values (491,82);
+insert into t (id,a) values (491,83);
+insert into t (id,a) values (491,84);
+insert into t (id,a) values (491,85);
+insert into t (id,a) values (491,86);
+insert into t (id,a) values (491,87);
+insert into t (id,a) values (491,88);
+insert into t (id,a) values (491,89);
+insert into t (id,a) values (491,90);
+insert into t (id,a) values (491,91);
+insert into t (id,a) values (491,92);
+insert into t (id,a) values (491,93);
+insert into t (id,a) values (491,94);
+insert into t (id,a) values (491,95);
+insert into t (id,a) values (491,96);
+insert into t (id,a) values (491,97);
+insert into t (id,a) values (491,98);
+insert into t (id,a) values (491,99);
+insert into t (id,a) values (492,0);
+insert into t (id,a) values (492,1);
+insert into t (id,a) values (492,2);
+insert into t (id,a) values (492,3);
+insert into t (id,a) values (492,4);
+insert into t (id,a) values (492,5);
+insert into t (id,a) values (492,6);
+insert into t (id,a) values (492,7);
+insert into t (id,a) values (492,8);
+insert into t (id,a) values (492,9);
+insert into t (id,a) values (492,10);
+insert into t (id,a) values (492,11);
+insert into t (id,a) values (492,12);
+insert into t (id,a) values (492,13);
+insert into t (id,a) values (492,14);
+insert into t (id,a) values (492,15);
+insert into t (id,a) values (492,16);
+insert into t (id,a) values (492,17);
+insert into t (id,a) values (492,18);
+insert into t (id,a) values (492,19);
+insert into t (id,a) values (492,20);
+insert into t (id,a) values (492,21);
+insert into t (id,a) values (492,22);
+insert into t (id,a) values (492,23);
+insert into t (id,a) values (492,24);
+insert into t (id,a) values (492,25);
+insert into t (id,a) values (492,26);
+insert into t (id,a) values (492,27);
+insert into t (id,a) values (492,28);
+insert into t (id,a) values (492,29);
+insert into t (id,a) values (492,30);
+insert into t (id,a) values (492,31);
+insert into t (id,a) values (492,32);
+insert into t (id,a) values (492,33);
+insert into t (id,a) values (492,34);
+insert into t (id,a) values (492,35);
+insert into t (id,a) values (492,36);
+insert into t (id,a) values (492,37);
+insert into t (id,a) values (492,38);
+insert into t (id,a) values (492,39);
+insert into t (id,a) values (492,40);
+insert into t (id,a) values (492,41);
+insert into t (id,a) values (492,42);
+insert into t (id,a) values (492,43);
+insert into t (id,a) values (492,44);
+insert into t (id,a) values (492,45);
+insert into t (id,a) values (492,46);
+insert into t (id,a) values (492,47);
+insert into t (id,a) values (492,48);
+insert into t (id,a) values (492,49);
+insert into t (id,a) values (492,50);
+insert into t (id,a) values (492,51);
+insert into t (id,a) values (492,52);
+insert into t (id,a) values (492,53);
+insert into t (id,a) values (492,54);
+insert into t (id,a) values (492,55);
+insert into t (id,a) values (492,56);
+insert into t (id,a) values (492,57);
+insert into t (id,a) values (492,58);
+insert into t (id,a) values (492,59);
+insert into t (id,a) values (492,60);
+insert into t (id,a) values (492,61);
+insert into t (id,a) values (492,62);
+insert into t (id,a) values (492,63);
+insert into t (id,a) values (492,64);
+insert into t (id,a) values (492,65);
+insert into t (id,a) values (492,66);
+insert into t (id,a) values (492,67);
+insert into t (id,a) values (492,68);
+insert into t (id,a) values (492,69);
+insert into t (id,a) values (492,70);
+insert into t (id,a) values (492,71);
+insert into t (id,a) values (492,72);
+insert into t (id,a) values (492,73);
+insert into t (id,a) values (492,74);
+insert into t (id,a) values (492,75);
+insert into t (id,a) values (492,76);
+insert into t (id,a) values (492,77);
+insert into t (id,a) values (492,78);
+insert into t (id,a) values (492,79);
+insert into t (id,a) values (492,80);
+insert into t (id,a) values (492,81);
+insert into t (id,a) values (492,82);
+insert into t (id,a) values (492,83);
+insert into t (id,a) values (492,84);
+insert into t (id,a) values (492,85);
+insert into t (id,a) values (492,86);
+insert into t (id,a) values (492,87);
+insert into t (id,a) values (492,88);
+insert into t (id,a) values (492,89);
+insert into t (id,a) values (492,90);
+insert into t (id,a) values (492,91);
+insert into t (id,a) values (492,92);
+insert into t (id,a) values (492,93);
+insert into t (id,a) values (492,94);
+insert into t (id,a) values (492,95);
+insert into t (id,a) values (492,96);
+insert into t (id,a) values (492,97);
+insert into t (id,a) values (492,98);
+insert into t (id,a) values (492,99);
+insert into t (id,a) values (493,0);
+insert into t (id,a) values (493,1);
+insert into t (id,a) values (493,2);
+insert into t (id,a) values (493,3);
+insert into t (id,a) values (493,4);
+insert into t (id,a) values (493,5);
+insert into t (id,a) values (493,6);
+insert into t (id,a) values (493,7);
+insert into t (id,a) values (493,8);
+insert into t (id,a) values (493,9);
+insert into t (id,a) values (493,10);
+insert into t (id,a) values (493,11);
+insert into t (id,a) values (493,12);
+insert into t (id,a) values (493,13);
+insert into t (id,a) values (493,14);
+insert into t (id,a) values (493,15);
+insert into t (id,a) values (493,16);
+insert into t (id,a) values (493,17);
+insert into t (id,a) values (493,18);
+insert into t (id,a) values (493,19);
+insert into t (id,a) values (493,20);
+insert into t (id,a) values (493,21);
+insert into t (id,a) values (493,22);
+insert into t (id,a) values (493,23);
+insert into t (id,a) values (493,24);
+insert into t (id,a) values (493,25);
+insert into t (id,a) values (493,26);
+insert into t (id,a) values (493,27);
+insert into t (id,a) values (493,28);
+insert into t (id,a) values (493,29);
+insert into t (id,a) values (493,30);
+insert into t (id,a) values (493,31);
+insert into t (id,a) values (493,32);
+insert into t (id,a) values (493,33);
+insert into t (id,a) values (493,34);
+insert into t (id,a) values (493,35);
+insert into t (id,a) values (493,36);
+insert into t (id,a) values (493,37);
+insert into t (id,a) values (493,38);
+insert into t (id,a) values (493,39);
+insert into t (id,a) values (493,40);
+insert into t (id,a) values (493,41);
+insert into t (id,a) values (493,42);
+insert into t (id,a) values (493,43);
+insert into t (id,a) values (493,44);
+insert into t (id,a) values (493,45);
+insert into t (id,a) values (493,46);
+insert into t (id,a) values (493,47);
+insert into t (id,a) values (493,48);
+insert into t (id,a) values (493,49);
+insert into t (id,a) values (493,50);
+insert into t (id,a) values (493,51);
+insert into t (id,a) values (493,52);
+insert into t (id,a) values (493,53);
+insert into t (id,a) values (493,54);
+insert into t (id,a) values (493,55);
+insert into t (id,a) values (493,56);
+insert into t (id,a) values (493,57);
+insert into t (id,a) values (493,58);
+insert into t (id,a) values (493,59);
+insert into t (id,a) values (493,60);
+insert into t (id,a) values (493,61);
+insert into t (id,a) values (493,62);
+insert into t (id,a) values (493,63);
+insert into t (id,a) values (493,64);
+insert into t (id,a) values (493,65);
+insert into t (id,a) values (493,66);
+insert into t (id,a) values (493,67);
+insert into t (id,a) values (493,68);
+insert into t (id,a) values (493,69);
+insert into t (id,a) values (493,70);
+insert into t (id,a) values (493,71);
+insert into t (id,a) values (493,72);
+insert into t (id,a) values (493,73);
+insert into t (id,a) values (493,74);
+insert into t (id,a) values (493,75);
+insert into t (id,a) values (493,76);
+insert into t (id,a) values (493,77);
+insert into t (id,a) values (493,78);
+insert into t (id,a) values (493,79);
+insert into t (id,a) values (493,80);
+insert into t (id,a) values (493,81);
+insert into t (id,a) values (493,82);
+insert into t (id,a) values (493,83);
+insert into t (id,a) values (493,84);
+insert into t (id,a) values (493,85);
+insert into t (id,a) values (493,86);
+insert into t (id,a) values (493,87);
+insert into t (id,a) values (493,88);
+insert into t (id,a) values (493,89);
+insert into t (id,a) values (493,90);
+insert into t (id,a) values (493,91);
+insert into t (id,a) values (493,92);
+insert into t (id,a) values (493,93);
+insert into t (id,a) values (493,94);
+insert into t (id,a) values (493,95);
+insert into t (id,a) values (493,96);
+insert into t (id,a) values (493,97);
+insert into t (id,a) values (493,98);
+insert into t (id,a) values (493,99);
+insert into t (id,a) values (494,0);
+insert into t (id,a) values (494,1);
+insert into t (id,a) values (494,2);
+insert into t (id,a) values (494,3);
+insert into t (id,a) values (494,4);
+insert into t (id,a) values (494,5);
+insert into t (id,a) values (494,6);
+insert into t (id,a) values (494,7);
+insert into t (id,a) values (494,8);
+insert into t (id,a) values (494,9);
+insert into t (id,a) values (494,10);
+insert into t (id,a) values (494,11);
+insert into t (id,a) values (494,12);
+insert into t (id,a) values (494,13);
+insert into t (id,a) values (494,14);
+insert into t (id,a) values (494,15);
+insert into t (id,a) values (494,16);
+insert into t (id,a) values (494,17);
+insert into t (id,a) values (494,18);
+insert into t (id,a) values (494,19);
+insert into t (id,a) values (494,20);
+insert into t (id,a) values (494,21);
+insert into t (id,a) values (494,22);
+insert into t (id,a) values (494,23);
+insert into t (id,a) values (494,24);
+insert into t (id,a) values (494,25);
+insert into t (id,a) values (494,26);
+insert into t (id,a) values (494,27);
+insert into t (id,a) values (494,28);
+insert into t (id,a) values (494,29);
+insert into t (id,a) values (494,30);
+insert into t (id,a) values (494,31);
+insert into t (id,a) values (494,32);
+insert into t (id,a) values (494,33);
+insert into t (id,a) values (494,34);
+insert into t (id,a) values (494,35);
+insert into t (id,a) values (494,36);
+insert into t (id,a) values (494,37);
+insert into t (id,a) values (494,38);
+insert into t (id,a) values (494,39);
+insert into t (id,a) values (494,40);
+insert into t (id,a) values (494,41);
+insert into t (id,a) values (494,42);
+insert into t (id,a) values (494,43);
+insert into t (id,a) values (494,44);
+insert into t (id,a) values (494,45);
+insert into t (id,a) values (494,46);
+insert into t (id,a) values (494,47);
+insert into t (id,a) values (494,48);
+insert into t (id,a) values (494,49);
+insert into t (id,a) values (494,50);
+insert into t (id,a) values (494,51);
+insert into t (id,a) values (494,52);
+insert into t (id,a) values (494,53);
+insert into t (id,a) values (494,54);
+insert into t (id,a) values (494,55);
+insert into t (id,a) values (494,56);
+insert into t (id,a) values (494,57);
+insert into t (id,a) values (494,58);
+insert into t (id,a) values (494,59);
+insert into t (id,a) values (494,60);
+insert into t (id,a) values (494,61);
+insert into t (id,a) values (494,62);
+insert into t (id,a) values (494,63);
+insert into t (id,a) values (494,64);
+insert into t (id,a) values (494,65);
+insert into t (id,a) values (494,66);
+insert into t (id,a) values (494,67);
+insert into t (id,a) values (494,68);
+insert into t (id,a) values (494,69);
+insert into t (id,a) values (494,70);
+insert into t (id,a) values (494,71);
+insert into t (id,a) values (494,72);
+insert into t (id,a) values (494,73);
+insert into t (id,a) values (494,74);
+insert into t (id,a) values (494,75);
+insert into t (id,a) values (494,76);
+insert into t (id,a) values (494,77);
+insert into t (id,a) values (494,78);
+insert into t (id,a) values (494,79);
+insert into t (id,a) values (494,80);
+insert into t (id,a) values (494,81);
+insert into t (id,a) values (494,82);
+insert into t (id,a) values (494,83);
+insert into t (id,a) values (494,84);
+insert into t (id,a) values (494,85);
+insert into t (id,a) values (494,86);
+insert into t (id,a) values (494,87);
+insert into t (id,a) values (494,88);
+insert into t (id,a) values (494,89);
+insert into t (id,a) values (494,90);
+insert into t (id,a) values (494,91);
+insert into t (id,a) values (494,92);
+insert into t (id,a) values (494,93);
+insert into t (id,a) values (494,94);
+insert into t (id,a) values (494,95);
+insert into t (id,a) values (494,96);
+insert into t (id,a) values (494,97);
+insert into t (id,a) values (494,98);
+insert into t (id,a) values (494,99);
+insert into t (id,a) values (495,0);
+insert into t (id,a) values (495,1);
+insert into t (id,a) values (495,2);
+insert into t (id,a) values (495,3);
+insert into t (id,a) values (495,4);
+insert into t (id,a) values (495,5);
+insert into t (id,a) values (495,6);
+insert into t (id,a) values (495,7);
+insert into t (id,a) values (495,8);
+insert into t (id,a) values (495,9);
+insert into t (id,a) values (495,10);
+insert into t (id,a) values (495,11);
+insert into t (id,a) values (495,12);
+insert into t (id,a) values (495,13);
+insert into t (id,a) values (495,14);
+insert into t (id,a) values (495,15);
+insert into t (id,a) values (495,16);
+insert into t (id,a) values (495,17);
+insert into t (id,a) values (495,18);
+insert into t (id,a) values (495,19);
+insert into t (id,a) values (495,20);
+insert into t (id,a) values (495,21);
+insert into t (id,a) values (495,22);
+insert into t (id,a) values (495,23);
+insert into t (id,a) values (495,24);
+insert into t (id,a) values (495,25);
+insert into t (id,a) values (495,26);
+insert into t (id,a) values (495,27);
+insert into t (id,a) values (495,28);
+insert into t (id,a) values (495,29);
+insert into t (id,a) values (495,30);
+insert into t (id,a) values (495,31);
+insert into t (id,a) values (495,32);
+insert into t (id,a) values (495,33);
+insert into t (id,a) values (495,34);
+insert into t (id,a) values (495,35);
+insert into t (id,a) values (495,36);
+insert into t (id,a) values (495,37);
+insert into t (id,a) values (495,38);
+insert into t (id,a) values (495,39);
+insert into t (id,a) values (495,40);
+insert into t (id,a) values (495,41);
+insert into t (id,a) values (495,42);
+insert into t (id,a) values (495,43);
+insert into t (id,a) values (495,44);
+insert into t (id,a) values (495,45);
+insert into t (id,a) values (495,46);
+insert into t (id,a) values (495,47);
+insert into t (id,a) values (495,48);
+insert into t (id,a) values (495,49);
+insert into t (id,a) values (495,50);
+insert into t (id,a) values (495,51);
+insert into t (id,a) values (495,52);
+insert into t (id,a) values (495,53);
+insert into t (id,a) values (495,54);
+insert into t (id,a) values (495,55);
+insert into t (id,a) values (495,56);
+insert into t (id,a) values (495,57);
+insert into t (id,a) values (495,58);
+insert into t (id,a) values (495,59);
+insert into t (id,a) values (495,60);
+insert into t (id,a) values (495,61);
+insert into t (id,a) values (495,62);
+insert into t (id,a) values (495,63);
+insert into t (id,a) values (495,64);
+insert into t (id,a) values (495,65);
+insert into t (id,a) values (495,66);
+insert into t (id,a) values (495,67);
+insert into t (id,a) values (495,68);
+insert into t (id,a) values (495,69);
+insert into t (id,a) values (495,70);
+insert into t (id,a) values (495,71);
+insert into t (id,a) values (495,72);
+insert into t (id,a) values (495,73);
+insert into t (id,a) values (495,74);
+insert into t (id,a) values (495,75);
+insert into t (id,a) values (495,76);
+insert into t (id,a) values (495,77);
+insert into t (id,a) values (495,78);
+insert into t (id,a) values (495,79);
+insert into t (id,a) values (495,80);
+insert into t (id,a) values (495,81);
+insert into t (id,a) values (495,82);
+insert into t (id,a) values (495,83);
+insert into t (id,a) values (495,84);
+insert into t (id,a) values (495,85);
+insert into t (id,a) values (495,86);
+insert into t (id,a) values (495,87);
+insert into t (id,a) values (495,88);
+insert into t (id,a) values (495,89);
+insert into t (id,a) values (495,90);
+insert into t (id,a) values (495,91);
+insert into t (id,a) values (495,92);
+insert into t (id,a) values (495,93);
+insert into t (id,a) values (495,94);
+insert into t (id,a) values (495,95);
+insert into t (id,a) values (495,96);
+insert into t (id,a) values (495,97);
+insert into t (id,a) values (495,98);
+insert into t (id,a) values (495,99);
+insert into t (id,a) values (496,0);
+insert into t (id,a) values (496,1);
+insert into t (id,a) values (496,2);
+insert into t (id,a) values (496,3);
+insert into t (id,a) values (496,4);
+insert into t (id,a) values (496,5);
+insert into t (id,a) values (496,6);
+insert into t (id,a) values (496,7);
+insert into t (id,a) values (496,8);
+insert into t (id,a) values (496,9);
+insert into t (id,a) values (496,10);
+insert into t (id,a) values (496,11);
+insert into t (id,a) values (496,12);
+insert into t (id,a) values (496,13);
+insert into t (id,a) values (496,14);
+insert into t (id,a) values (496,15);
+insert into t (id,a) values (496,16);
+insert into t (id,a) values (496,17);
+insert into t (id,a) values (496,18);
+insert into t (id,a) values (496,19);
+insert into t (id,a) values (496,20);
+insert into t (id,a) values (496,21);
+insert into t (id,a) values (496,22);
+insert into t (id,a) values (496,23);
+insert into t (id,a) values (496,24);
+insert into t (id,a) values (496,25);
+insert into t (id,a) values (496,26);
+insert into t (id,a) values (496,27);
+insert into t (id,a) values (496,28);
+insert into t (id,a) values (496,29);
+insert into t (id,a) values (496,30);
+insert into t (id,a) values (496,31);
+insert into t (id,a) values (496,32);
+insert into t (id,a) values (496,33);
+insert into t (id,a) values (496,34);
+insert into t (id,a) values (496,35);
+insert into t (id,a) values (496,36);
+insert into t (id,a) values (496,37);
+insert into t (id,a) values (496,38);
+insert into t (id,a) values (496,39);
+insert into t (id,a) values (496,40);
+insert into t (id,a) values (496,41);
+insert into t (id,a) values (496,42);
+insert into t (id,a) values (496,43);
+insert into t (id,a) values (496,44);
+insert into t (id,a) values (496,45);
+insert into t (id,a) values (496,46);
+insert into t (id,a) values (496,47);
+insert into t (id,a) values (496,48);
+insert into t (id,a) values (496,49);
+insert into t (id,a) values (496,50);
+insert into t (id,a) values (496,51);
+insert into t (id,a) values (496,52);
+insert into t (id,a) values (496,53);
+insert into t (id,a) values (496,54);
+insert into t (id,a) values (496,55);
+insert into t (id,a) values (496,56);
+insert into t (id,a) values (496,57);
+insert into t (id,a) values (496,58);
+insert into t (id,a) values (496,59);
+insert into t (id,a) values (496,60);
+insert into t (id,a) values (496,61);
+insert into t (id,a) values (496,62);
+insert into t (id,a) values (496,63);
+insert into t (id,a) values (496,64);
+insert into t (id,a) values (496,65);
+insert into t (id,a) values (496,66);
+insert into t (id,a) values (496,67);
+insert into t (id,a) values (496,68);
+insert into t (id,a) values (496,69);
+insert into t (id,a) values (496,70);
+insert into t (id,a) values (496,71);
+insert into t (id,a) values (496,72);
+insert into t (id,a) values (496,73);
+insert into t (id,a) values (496,74);
+insert into t (id,a) values (496,75);
+insert into t (id,a) values (496,76);
+insert into t (id,a) values (496,77);
+insert into t (id,a) values (496,78);
+insert into t (id,a) values (496,79);
+insert into t (id,a) values (496,80);
+insert into t (id,a) values (496,81);
+insert into t (id,a) values (496,82);
+insert into t (id,a) values (496,83);
+insert into t (id,a) values (496,84);
+insert into t (id,a) values (496,85);
+insert into t (id,a) values (496,86);
+insert into t (id,a) values (496,87);
+insert into t (id,a) values (496,88);
+insert into t (id,a) values (496,89);
+insert into t (id,a) values (496,90);
+insert into t (id,a) values (496,91);
+insert into t (id,a) values (496,92);
+insert into t (id,a) values (496,93);
+insert into t (id,a) values (496,94);
+insert into t (id,a) values (496,95);
+insert into t (id,a) values (496,96);
+insert into t (id,a) values (496,97);
+insert into t (id,a) values (496,98);
+insert into t (id,a) values (496,99);
+insert into t (id,a) values (497,0);
+insert into t (id,a) values (497,1);
+insert into t (id,a) values (497,2);
+insert into t (id,a) values (497,3);
+insert into t (id,a) values (497,4);
+insert into t (id,a) values (497,5);
+insert into t (id,a) values (497,6);
+insert into t (id,a) values (497,7);
+insert into t (id,a) values (497,8);
+insert into t (id,a) values (497,9);
+insert into t (id,a) values (497,10);
+insert into t (id,a) values (497,11);
+insert into t (id,a) values (497,12);
+insert into t (id,a) values (497,13);
+insert into t (id,a) values (497,14);
+insert into t (id,a) values (497,15);
+insert into t (id,a) values (497,16);
+insert into t (id,a) values (497,17);
+insert into t (id,a) values (497,18);
+insert into t (id,a) values (497,19);
+insert into t (id,a) values (497,20);
+insert into t (id,a) values (497,21);
+insert into t (id,a) values (497,22);
+insert into t (id,a) values (497,23);
+insert into t (id,a) values (497,24);
+insert into t (id,a) values (497,25);
+insert into t (id,a) values (497,26);
+insert into t (id,a) values (497,27);
+insert into t (id,a) values (497,28);
+insert into t (id,a) values (497,29);
+insert into t (id,a) values (497,30);
+insert into t (id,a) values (497,31);
+insert into t (id,a) values (497,32);
+insert into t (id,a) values (497,33);
+insert into t (id,a) values (497,34);
+insert into t (id,a) values (497,35);
+insert into t (id,a) values (497,36);
+insert into t (id,a) values (497,37);
+insert into t (id,a) values (497,38);
+insert into t (id,a) values (497,39);
+insert into t (id,a) values (497,40);
+insert into t (id,a) values (497,41);
+insert into t (id,a) values (497,42);
+insert into t (id,a) values (497,43);
+insert into t (id,a) values (497,44);
+insert into t (id,a) values (497,45);
+insert into t (id,a) values (497,46);
+insert into t (id,a) values (497,47);
+insert into t (id,a) values (497,48);
+insert into t (id,a) values (497,49);
+insert into t (id,a) values (497,50);
+insert into t (id,a) values (497,51);
+insert into t (id,a) values (497,52);
+insert into t (id,a) values (497,53);
+insert into t (id,a) values (497,54);
+insert into t (id,a) values (497,55);
+insert into t (id,a) values (497,56);
+insert into t (id,a) values (497,57);
+insert into t (id,a) values (497,58);
+insert into t (id,a) values (497,59);
+insert into t (id,a) values (497,60);
+insert into t (id,a) values (497,61);
+insert into t (id,a) values (497,62);
+insert into t (id,a) values (497,63);
+insert into t (id,a) values (497,64);
+insert into t (id,a) values (497,65);
+insert into t (id,a) values (497,66);
+insert into t (id,a) values (497,67);
+insert into t (id,a) values (497,68);
+insert into t (id,a) values (497,69);
+insert into t (id,a) values (497,70);
+insert into t (id,a) values (497,71);
+insert into t (id,a) values (497,72);
+insert into t (id,a) values (497,73);
+insert into t (id,a) values (497,74);
+insert into t (id,a) values (497,75);
+insert into t (id,a) values (497,76);
+insert into t (id,a) values (497,77);
+insert into t (id,a) values (497,78);
+insert into t (id,a) values (497,79);
+insert into t (id,a) values (497,80);
+insert into t (id,a) values (497,81);
+insert into t (id,a) values (497,82);
+insert into t (id,a) values (497,83);
+insert into t (id,a) values (497,84);
+insert into t (id,a) values (497,85);
+insert into t (id,a) values (497,86);
+insert into t (id,a) values (497,87);
+insert into t (id,a) values (497,88);
+insert into t (id,a) values (497,89);
+insert into t (id,a) values (497,90);
+insert into t (id,a) values (497,91);
+insert into t (id,a) values (497,92);
+insert into t (id,a) values (497,93);
+insert into t (id,a) values (497,94);
+insert into t (id,a) values (497,95);
+insert into t (id,a) values (497,96);
+insert into t (id,a) values (497,97);
+insert into t (id,a) values (497,98);
+insert into t (id,a) values (497,99);
+insert into t (id,a) values (498,0);
+insert into t (id,a) values (498,1);
+insert into t (id,a) values (498,2);
+insert into t (id,a) values (498,3);
+insert into t (id,a) values (498,4);
+insert into t (id,a) values (498,5);
+insert into t (id,a) values (498,6);
+insert into t (id,a) values (498,7);
+insert into t (id,a) values (498,8);
+insert into t (id,a) values (498,9);
+insert into t (id,a) values (498,10);
+insert into t (id,a) values (498,11);
+insert into t (id,a) values (498,12);
+insert into t (id,a) values (498,13);
+insert into t (id,a) values (498,14);
+insert into t (id,a) values (498,15);
+insert into t (id,a) values (498,16);
+insert into t (id,a) values (498,17);
+insert into t (id,a) values (498,18);
+insert into t (id,a) values (498,19);
+insert into t (id,a) values (498,20);
+insert into t (id,a) values (498,21);
+insert into t (id,a) values (498,22);
+insert into t (id,a) values (498,23);
+insert into t (id,a) values (498,24);
+insert into t (id,a) values (498,25);
+insert into t (id,a) values (498,26);
+insert into t (id,a) values (498,27);
+insert into t (id,a) values (498,28);
+insert into t (id,a) values (498,29);
+insert into t (id,a) values (498,30);
+insert into t (id,a) values (498,31);
+insert into t (id,a) values (498,32);
+insert into t (id,a) values (498,33);
+insert into t (id,a) values (498,34);
+insert into t (id,a) values (498,35);
+insert into t (id,a) values (498,36);
+insert into t (id,a) values (498,37);
+insert into t (id,a) values (498,38);
+insert into t (id,a) values (498,39);
+insert into t (id,a) values (498,40);
+insert into t (id,a) values (498,41);
+insert into t (id,a) values (498,42);
+insert into t (id,a) values (498,43);
+insert into t (id,a) values (498,44);
+insert into t (id,a) values (498,45);
+insert into t (id,a) values (498,46);
+insert into t (id,a) values (498,47);
+insert into t (id,a) values (498,48);
+insert into t (id,a) values (498,49);
+insert into t (id,a) values (498,50);
+insert into t (id,a) values (498,51);
+insert into t (id,a) values (498,52);
+insert into t (id,a) values (498,53);
+insert into t (id,a) values (498,54);
+insert into t (id,a) values (498,55);
+insert into t (id,a) values (498,56);
+insert into t (id,a) values (498,57);
+insert into t (id,a) values (498,58);
+insert into t (id,a) values (498,59);
+insert into t (id,a) values (498,60);
+insert into t (id,a) values (498,61);
+insert into t (id,a) values (498,62);
+insert into t (id,a) values (498,63);
+insert into t (id,a) values (498,64);
+insert into t (id,a) values (498,65);
+insert into t (id,a) values (498,66);
+insert into t (id,a) values (498,67);
+insert into t (id,a) values (498,68);
+insert into t (id,a) values (498,69);
+insert into t (id,a) values (498,70);
+insert into t (id,a) values (498,71);
+insert into t (id,a) values (498,72);
+insert into t (id,a) values (498,73);
+insert into t (id,a) values (498,74);
+insert into t (id,a) values (498,75);
+insert into t (id,a) values (498,76);
+insert into t (id,a) values (498,77);
+insert into t (id,a) values (498,78);
+insert into t (id,a) values (498,79);
+insert into t (id,a) values (498,80);
+insert into t (id,a) values (498,81);
+insert into t (id,a) values (498,82);
+insert into t (id,a) values (498,83);
+insert into t (id,a) values (498,84);
+insert into t (id,a) values (498,85);
+insert into t (id,a) values (498,86);
+insert into t (id,a) values (498,87);
+insert into t (id,a) values (498,88);
+insert into t (id,a) values (498,89);
+insert into t (id,a) values (498,90);
+insert into t (id,a) values (498,91);
+insert into t (id,a) values (498,92);
+insert into t (id,a) values (498,93);
+insert into t (id,a) values (498,94);
+insert into t (id,a) values (498,95);
+insert into t (id,a) values (498,96);
+insert into t (id,a) values (498,97);
+insert into t (id,a) values (498,98);
+insert into t (id,a) values (498,99);
+insert into t (id,a) values (499,0);
+insert into t (id,a) values (499,1);
+insert into t (id,a) values (499,2);
+insert into t (id,a) values (499,3);
+insert into t (id,a) values (499,4);
+insert into t (id,a) values (499,5);
+insert into t (id,a) values (499,6);
+insert into t (id,a) values (499,7);
+insert into t (id,a) values (499,8);
+insert into t (id,a) values (499,9);
+insert into t (id,a) values (499,10);
+insert into t (id,a) values (499,11);
+insert into t (id,a) values (499,12);
+insert into t (id,a) values (499,13);
+insert into t (id,a) values (499,14);
+insert into t (id,a) values (499,15);
+insert into t (id,a) values (499,16);
+insert into t (id,a) values (499,17);
+insert into t (id,a) values (499,18);
+insert into t (id,a) values (499,19);
+insert into t (id,a) values (499,20);
+insert into t (id,a) values (499,21);
+insert into t (id,a) values (499,22);
+insert into t (id,a) values (499,23);
+insert into t (id,a) values (499,24);
+insert into t (id,a) values (499,25);
+insert into t (id,a) values (499,26);
+insert into t (id,a) values (499,27);
+insert into t (id,a) values (499,28);
+insert into t (id,a) values (499,29);
+insert into t (id,a) values (499,30);
+insert into t (id,a) values (499,31);
+insert into t (id,a) values (499,32);
+insert into t (id,a) values (499,33);
+insert into t (id,a) values (499,34);
+insert into t (id,a) values (499,35);
+insert into t (id,a) values (499,36);
+insert into t (id,a) values (499,37);
+insert into t (id,a) values (499,38);
+insert into t (id,a) values (499,39);
+insert into t (id,a) values (499,40);
+insert into t (id,a) values (499,41);
+insert into t (id,a) values (499,42);
+insert into t (id,a) values (499,43);
+insert into t (id,a) values (499,44);
+insert into t (id,a) values (499,45);
+insert into t (id,a) values (499,46);
+insert into t (id,a) values (499,47);
+insert into t (id,a) values (499,48);
+insert into t (id,a) values (499,49);
+insert into t (id,a) values (499,50);
+insert into t (id,a) values (499,51);
+insert into t (id,a) values (499,52);
+insert into t (id,a) values (499,53);
+insert into t (id,a) values (499,54);
+insert into t (id,a) values (499,55);
+insert into t (id,a) values (499,56);
+insert into t (id,a) values (499,57);
+insert into t (id,a) values (499,58);
+insert into t (id,a) values (499,59);
+insert into t (id,a) values (499,60);
+insert into t (id,a) values (499,61);
+insert into t (id,a) values (499,62);
+insert into t (id,a) values (499,63);
+insert into t (id,a) values (499,64);
+insert into t (id,a) values (499,65);
+insert into t (id,a) values (499,66);
+insert into t (id,a) values (499,67);
+insert into t (id,a) values (499,68);
+insert into t (id,a) values (499,69);
+insert into t (id,a) values (499,70);
+insert into t (id,a) values (499,71);
+insert into t (id,a) values (499,72);
+insert into t (id,a) values (499,73);
+insert into t (id,a) values (499,74);
+insert into t (id,a) values (499,75);
+insert into t (id,a) values (499,76);
+insert into t (id,a) values (499,77);
+insert into t (id,a) values (499,78);
+insert into t (id,a) values (499,79);
+insert into t (id,a) values (499,80);
+insert into t (id,a) values (499,81);
+insert into t (id,a) values (499,82);
+insert into t (id,a) values (499,83);
+insert into t (id,a) values (499,84);
+insert into t (id,a) values (499,85);
+insert into t (id,a) values (499,86);
+insert into t (id,a) values (499,87);
+insert into t (id,a) values (499,88);
+insert into t (id,a) values (499,89);
+insert into t (id,a) values (499,90);
+insert into t (id,a) values (499,91);
+insert into t (id,a) values (499,92);
+insert into t (id,a) values (499,93);
+insert into t (id,a) values (499,94);
+insert into t (id,a) values (499,95);
+insert into t (id,a) values (499,96);
+insert into t (id,a) values (499,97);
+insert into t (id,a) values (499,98);
+insert into t (id,a) values (499,99);
+insert into t (id,a) values (500,0);
+insert into t (id,a) values (500,1);
+insert into t (id,a) values (500,2);
+insert into t (id,a) values (500,3);
+insert into t (id,a) values (500,4);
+insert into t (id,a) values (500,5);
+insert into t (id,a) values (500,6);
+insert into t (id,a) values (500,7);
+insert into t (id,a) values (500,8);
+insert into t (id,a) values (500,9);
+insert into t (id,a) values (500,10);
+insert into t (id,a) values (500,11);
+insert into t (id,a) values (500,12);
+insert into t (id,a) values (500,13);
+insert into t (id,a) values (500,14);
+insert into t (id,a) values (500,15);
+insert into t (id,a) values (500,16);
+insert into t (id,a) values (500,17);
+insert into t (id,a) values (500,18);
+insert into t (id,a) values (500,19);
+insert into t (id,a) values (500,20);
+insert into t (id,a) values (500,21);
+insert into t (id,a) values (500,22);
+insert into t (id,a) values (500,23);
+insert into t (id,a) values (500,24);
+insert into t (id,a) values (500,25);
+insert into t (id,a) values (500,26);
+insert into t (id,a) values (500,27);
+insert into t (id,a) values (500,28);
+insert into t (id,a) values (500,29);
+insert into t (id,a) values (500,30);
+insert into t (id,a) values (500,31);
+insert into t (id,a) values (500,32);
+insert into t (id,a) values (500,33);
+insert into t (id,a) values (500,34);
+insert into t (id,a) values (500,35);
+insert into t (id,a) values (500,36);
+insert into t (id,a) values (500,37);
+insert into t (id,a) values (500,38);
+insert into t (id,a) values (500,39);
+insert into t (id,a) values (500,40);
+insert into t (id,a) values (500,41);
+insert into t (id,a) values (500,42);
+insert into t (id,a) values (500,43);
+insert into t (id,a) values (500,44);
+insert into t (id,a) values (500,45);
+insert into t (id,a) values (500,46);
+insert into t (id,a) values (500,47);
+insert into t (id,a) values (500,48);
+insert into t (id,a) values (500,49);
+insert into t (id,a) values (500,50);
+insert into t (id,a) values (500,51);
+insert into t (id,a) values (500,52);
+insert into t (id,a) values (500,53);
+insert into t (id,a) values (500,54);
+insert into t (id,a) values (500,55);
+insert into t (id,a) values (500,56);
+insert into t (id,a) values (500,57);
+insert into t (id,a) values (500,58);
+insert into t (id,a) values (500,59);
+insert into t (id,a) values (500,60);
+insert into t (id,a) values (500,61);
+insert into t (id,a) values (500,62);
+insert into t (id,a) values (500,63);
+insert into t (id,a) values (500,64);
+insert into t (id,a) values (500,65);
+insert into t (id,a) values (500,66);
+insert into t (id,a) values (500,67);
+insert into t (id,a) values (500,68);
+insert into t (id,a) values (500,69);
+insert into t (id,a) values (500,70);
+insert into t (id,a) values (500,71);
+insert into t (id,a) values (500,72);
+insert into t (id,a) values (500,73);
+insert into t (id,a) values (500,74);
+insert into t (id,a) values (500,75);
+insert into t (id,a) values (500,76);
+insert into t (id,a) values (500,77);
+insert into t (id,a) values (500,78);
+insert into t (id,a) values (500,79);
+insert into t (id,a) values (500,80);
+insert into t (id,a) values (500,81);
+insert into t (id,a) values (500,82);
+insert into t (id,a) values (500,83);
+insert into t (id,a) values (500,84);
+insert into t (id,a) values (500,85);
+insert into t (id,a) values (500,86);
+insert into t (id,a) values (500,87);
+insert into t (id,a) values (500,88);
+insert into t (id,a) values (500,89);
+insert into t (id,a) values (500,90);
+insert into t (id,a) values (500,91);
+insert into t (id,a) values (500,92);
+insert into t (id,a) values (500,93);
+insert into t (id,a) values (500,94);
+insert into t (id,a) values (500,95);
+insert into t (id,a) values (500,96);
+insert into t (id,a) values (500,97);
+insert into t (id,a) values (500,98);
+insert into t (id,a) values (500,99);
+insert into t (id,a) values (501,0);
+insert into t (id,a) values (501,1);
+insert into t (id,a) values (501,2);
+insert into t (id,a) values (501,3);
+insert into t (id,a) values (501,4);
+insert into t (id,a) values (501,5);
+insert into t (id,a) values (501,6);
+insert into t (id,a) values (501,7);
+insert into t (id,a) values (501,8);
+insert into t (id,a) values (501,9);
+insert into t (id,a) values (501,10);
+insert into t (id,a) values (501,11);
+insert into t (id,a) values (501,12);
+insert into t (id,a) values (501,13);
+insert into t (id,a) values (501,14);
+insert into t (id,a) values (501,15);
+insert into t (id,a) values (501,16);
+insert into t (id,a) values (501,17);
+insert into t (id,a) values (501,18);
+insert into t (id,a) values (501,19);
+insert into t (id,a) values (501,20);
+insert into t (id,a) values (501,21);
+insert into t (id,a) values (501,22);
+insert into t (id,a) values (501,23);
+insert into t (id,a) values (501,24);
+insert into t (id,a) values (501,25);
+insert into t (id,a) values (501,26);
+insert into t (id,a) values (501,27);
+insert into t (id,a) values (501,28);
+insert into t (id,a) values (501,29);
+insert into t (id,a) values (501,30);
+insert into t (id,a) values (501,31);
+insert into t (id,a) values (501,32);
+insert into t (id,a) values (501,33);
+insert into t (id,a) values (501,34);
+insert into t (id,a) values (501,35);
+insert into t (id,a) values (501,36);
+insert into t (id,a) values (501,37);
+insert into t (id,a) values (501,38);
+insert into t (id,a) values (501,39);
+insert into t (id,a) values (501,40);
+insert into t (id,a) values (501,41);
+insert into t (id,a) values (501,42);
+insert into t (id,a) values (501,43);
+insert into t (id,a) values (501,44);
+insert into t (id,a) values (501,45);
+insert into t (id,a) values (501,46);
+insert into t (id,a) values (501,47);
+insert into t (id,a) values (501,48);
+insert into t (id,a) values (501,49);
+insert into t (id,a) values (501,50);
+insert into t (id,a) values (501,51);
+insert into t (id,a) values (501,52);
+insert into t (id,a) values (501,53);
+insert into t (id,a) values (501,54);
+insert into t (id,a) values (501,55);
+insert into t (id,a) values (501,56);
+insert into t (id,a) values (501,57);
+insert into t (id,a) values (501,58);
+insert into t (id,a) values (501,59);
+insert into t (id,a) values (501,60);
+insert into t (id,a) values (501,61);
+insert into t (id,a) values (501,62);
+insert into t (id,a) values (501,63);
+insert into t (id,a) values (501,64);
+insert into t (id,a) values (501,65);
+insert into t (id,a) values (501,66);
+insert into t (id,a) values (501,67);
+insert into t (id,a) values (501,68);
+insert into t (id,a) values (501,69);
+insert into t (id,a) values (501,70);
+insert into t (id,a) values (501,71);
+insert into t (id,a) values (501,72);
+insert into t (id,a) values (501,73);
+insert into t (id,a) values (501,74);
+insert into t (id,a) values (501,75);
+insert into t (id,a) values (501,76);
+insert into t (id,a) values (501,77);
+insert into t (id,a) values (501,78);
+insert into t (id,a) values (501,79);
+insert into t (id,a) values (501,80);
+insert into t (id,a) values (501,81);
+insert into t (id,a) values (501,82);
+insert into t (id,a) values (501,83);
+insert into t (id,a) values (501,84);
+insert into t (id,a) values (501,85);
+insert into t (id,a) values (501,86);
+insert into t (id,a) values (501,87);
+insert into t (id,a) values (501,88);
+insert into t (id,a) values (501,89);
+insert into t (id,a) values (501,90);
+insert into t (id,a) values (501,91);
+insert into t (id,a) values (501,92);
+insert into t (id,a) values (501,93);
+insert into t (id,a) values (501,94);
+insert into t (id,a) values (501,95);
+insert into t (id,a) values (501,96);
+insert into t (id,a) values (501,97);
+insert into t (id,a) values (501,98);
+insert into t (id,a) values (501,99);
+insert into t (id,a) values (502,0);
+insert into t (id,a) values (502,1);
+insert into t (id,a) values (502,2);
+insert into t (id,a) values (502,3);
+insert into t (id,a) values (502,4);
+insert into t (id,a) values (502,5);
+insert into t (id,a) values (502,6);
+insert into t (id,a) values (502,7);
+insert into t (id,a) values (502,8);
+insert into t (id,a) values (502,9);
+insert into t (id,a) values (502,10);
+insert into t (id,a) values (502,11);
+insert into t (id,a) values (502,12);
+insert into t (id,a) values (502,13);
+insert into t (id,a) values (502,14);
+insert into t (id,a) values (502,15);
+insert into t (id,a) values (502,16);
+insert into t (id,a) values (502,17);
+insert into t (id,a) values (502,18);
+insert into t (id,a) values (502,19);
+insert into t (id,a) values (502,20);
+insert into t (id,a) values (502,21);
+insert into t (id,a) values (502,22);
+insert into t (id,a) values (502,23);
+insert into t (id,a) values (502,24);
+insert into t (id,a) values (502,25);
+insert into t (id,a) values (502,26);
+insert into t (id,a) values (502,27);
+insert into t (id,a) values (502,28);
+insert into t (id,a) values (502,29);
+insert into t (id,a) values (502,30);
+insert into t (id,a) values (502,31);
+insert into t (id,a) values (502,32);
+insert into t (id,a) values (502,33);
+insert into t (id,a) values (502,34);
+insert into t (id,a) values (502,35);
+insert into t (id,a) values (502,36);
+insert into t (id,a) values (502,37);
+insert into t (id,a) values (502,38);
+insert into t (id,a) values (502,39);
+insert into t (id,a) values (502,40);
+insert into t (id,a) values (502,41);
+insert into t (id,a) values (502,42);
+insert into t (id,a) values (502,43);
+insert into t (id,a) values (502,44);
+insert into t (id,a) values (502,45);
+insert into t (id,a) values (502,46);
+insert into t (id,a) values (502,47);
+insert into t (id,a) values (502,48);
+insert into t (id,a) values (502,49);
+insert into t (id,a) values (502,50);
+insert into t (id,a) values (502,51);
+insert into t (id,a) values (502,52);
+insert into t (id,a) values (502,53);
+insert into t (id,a) values (502,54);
+insert into t (id,a) values (502,55);
+insert into t (id,a) values (502,56);
+insert into t (id,a) values (502,57);
+insert into t (id,a) values (502,58);
+insert into t (id,a) values (502,59);
+insert into t (id,a) values (502,60);
+insert into t (id,a) values (502,61);
+insert into t (id,a) values (502,62);
+insert into t (id,a) values (502,63);
+insert into t (id,a) values (502,64);
+insert into t (id,a) values (502,65);
+insert into t (id,a) values (502,66);
+insert into t (id,a) values (502,67);
+insert into t (id,a) values (502,68);
+insert into t (id,a) values (502,69);
+insert into t (id,a) values (502,70);
+insert into t (id,a) values (502,71);
+insert into t (id,a) values (502,72);
+insert into t (id,a) values (502,73);
+insert into t (id,a) values (502,74);
+insert into t (id,a) values (502,75);
+insert into t (id,a) values (502,76);
+insert into t (id,a) values (502,77);
+insert into t (id,a) values (502,78);
+insert into t (id,a) values (502,79);
+insert into t (id,a) values (502,80);
+insert into t (id,a) values (502,81);
+insert into t (id,a) values (502,82);
+insert into t (id,a) values (502,83);
+insert into t (id,a) values (502,84);
+insert into t (id,a) values (502,85);
+insert into t (id,a) values (502,86);
+insert into t (id,a) values (502,87);
+insert into t (id,a) values (502,88);
+insert into t (id,a) values (502,89);
+insert into t (id,a) values (502,90);
+insert into t (id,a) values (502,91);
+insert into t (id,a) values (502,92);
+insert into t (id,a) values (502,93);
+insert into t (id,a) values (502,94);
+insert into t (id,a) values (502,95);
+insert into t (id,a) values (502,96);
+insert into t (id,a) values (502,97);
+insert into t (id,a) values (502,98);
+insert into t (id,a) values (502,99);
+insert into t (id,a) values (503,0);
+insert into t (id,a) values (503,1);
+insert into t (id,a) values (503,2);
+insert into t (id,a) values (503,3);
+insert into t (id,a) values (503,4);
+insert into t (id,a) values (503,5);
+insert into t (id,a) values (503,6);
+insert into t (id,a) values (503,7);
+insert into t (id,a) values (503,8);
+insert into t (id,a) values (503,9);
+insert into t (id,a) values (503,10);
+insert into t (id,a) values (503,11);
+insert into t (id,a) values (503,12);
+insert into t (id,a) values (503,13);
+insert into t (id,a) values (503,14);
+insert into t (id,a) values (503,15);
+insert into t (id,a) values (503,16);
+insert into t (id,a) values (503,17);
+insert into t (id,a) values (503,18);
+insert into t (id,a) values (503,19);
+insert into t (id,a) values (503,20);
+insert into t (id,a) values (503,21);
+insert into t (id,a) values (503,22);
+insert into t (id,a) values (503,23);
+insert into t (id,a) values (503,24);
+insert into t (id,a) values (503,25);
+insert into t (id,a) values (503,26);
+insert into t (id,a) values (503,27);
+insert into t (id,a) values (503,28);
+insert into t (id,a) values (503,29);
+insert into t (id,a) values (503,30);
+insert into t (id,a) values (503,31);
+insert into t (id,a) values (503,32);
+insert into t (id,a) values (503,33);
+insert into t (id,a) values (503,34);
+insert into t (id,a) values (503,35);
+insert into t (id,a) values (503,36);
+insert into t (id,a) values (503,37);
+insert into t (id,a) values (503,38);
+insert into t (id,a) values (503,39);
+insert into t (id,a) values (503,40);
+insert into t (id,a) values (503,41);
+insert into t (id,a) values (503,42);
+insert into t (id,a) values (503,43);
+insert into t (id,a) values (503,44);
+insert into t (id,a) values (503,45);
+insert into t (id,a) values (503,46);
+insert into t (id,a) values (503,47);
+insert into t (id,a) values (503,48);
+insert into t (id,a) values (503,49);
+insert into t (id,a) values (503,50);
+insert into t (id,a) values (503,51);
+insert into t (id,a) values (503,52);
+insert into t (id,a) values (503,53);
+insert into t (id,a) values (503,54);
+insert into t (id,a) values (503,55);
+insert into t (id,a) values (503,56);
+insert into t (id,a) values (503,57);
+insert into t (id,a) values (503,58);
+insert into t (id,a) values (503,59);
+insert into t (id,a) values (503,60);
+insert into t (id,a) values (503,61);
+insert into t (id,a) values (503,62);
+insert into t (id,a) values (503,63);
+insert into t (id,a) values (503,64);
+insert into t (id,a) values (503,65);
+insert into t (id,a) values (503,66);
+insert into t (id,a) values (503,67);
+insert into t (id,a) values (503,68);
+insert into t (id,a) values (503,69);
+insert into t (id,a) values (503,70);
+insert into t (id,a) values (503,71);
+insert into t (id,a) values (503,72);
+insert into t (id,a) values (503,73);
+insert into t (id,a) values (503,74);
+insert into t (id,a) values (503,75);
+insert into t (id,a) values (503,76);
+insert into t (id,a) values (503,77);
+insert into t (id,a) values (503,78);
+insert into t (id,a) values (503,79);
+insert into t (id,a) values (503,80);
+insert into t (id,a) values (503,81);
+insert into t (id,a) values (503,82);
+insert into t (id,a) values (503,83);
+insert into t (id,a) values (503,84);
+insert into t (id,a) values (503,85);
+insert into t (id,a) values (503,86);
+insert into t (id,a) values (503,87);
+insert into t (id,a) values (503,88);
+insert into t (id,a) values (503,89);
+insert into t (id,a) values (503,90);
+insert into t (id,a) values (503,91);
+insert into t (id,a) values (503,92);
+insert into t (id,a) values (503,93);
+insert into t (id,a) values (503,94);
+insert into t (id,a) values (503,95);
+insert into t (id,a) values (503,96);
+insert into t (id,a) values (503,97);
+insert into t (id,a) values (503,98);
+insert into t (id,a) values (503,99);
+insert into t (id,a) values (504,0);
+insert into t (id,a) values (504,1);
+insert into t (id,a) values (504,2);
+insert into t (id,a) values (504,3);
+insert into t (id,a) values (504,4);
+insert into t (id,a) values (504,5);
+insert into t (id,a) values (504,6);
+insert into t (id,a) values (504,7);
+insert into t (id,a) values (504,8);
+insert into t (id,a) values (504,9);
+insert into t (id,a) values (504,10);
+insert into t (id,a) values (504,11);
+insert into t (id,a) values (504,12);
+insert into t (id,a) values (504,13);
+insert into t (id,a) values (504,14);
+insert into t (id,a) values (504,15);
+insert into t (id,a) values (504,16);
+insert into t (id,a) values (504,17);
+insert into t (id,a) values (504,18);
+insert into t (id,a) values (504,19);
+insert into t (id,a) values (504,20);
+insert into t (id,a) values (504,21);
+insert into t (id,a) values (504,22);
+insert into t (id,a) values (504,23);
+insert into t (id,a) values (504,24);
+insert into t (id,a) values (504,25);
+insert into t (id,a) values (504,26);
+insert into t (id,a) values (504,27);
+insert into t (id,a) values (504,28);
+insert into t (id,a) values (504,29);
+insert into t (id,a) values (504,30);
+insert into t (id,a) values (504,31);
+insert into t (id,a) values (504,32);
+insert into t (id,a) values (504,33);
+insert into t (id,a) values (504,34);
+insert into t (id,a) values (504,35);
+insert into t (id,a) values (504,36);
+insert into t (id,a) values (504,37);
+insert into t (id,a) values (504,38);
+insert into t (id,a) values (504,39);
+insert into t (id,a) values (504,40);
+insert into t (id,a) values (504,41);
+insert into t (id,a) values (504,42);
+insert into t (id,a) values (504,43);
+insert into t (id,a) values (504,44);
+insert into t (id,a) values (504,45);
+insert into t (id,a) values (504,46);
+insert into t (id,a) values (504,47);
+insert into t (id,a) values (504,48);
+insert into t (id,a) values (504,49);
+insert into t (id,a) values (504,50);
+insert into t (id,a) values (504,51);
+insert into t (id,a) values (504,52);
+insert into t (id,a) values (504,53);
+insert into t (id,a) values (504,54);
+insert into t (id,a) values (504,55);
+insert into t (id,a) values (504,56);
+insert into t (id,a) values (504,57);
+insert into t (id,a) values (504,58);
+insert into t (id,a) values (504,59);
+insert into t (id,a) values (504,60);
+insert into t (id,a) values (504,61);
+insert into t (id,a) values (504,62);
+insert into t (id,a) values (504,63);
+insert into t (id,a) values (504,64);
+insert into t (id,a) values (504,65);
+insert into t (id,a) values (504,66);
+insert into t (id,a) values (504,67);
+insert into t (id,a) values (504,68);
+insert into t (id,a) values (504,69);
+insert into t (id,a) values (504,70);
+insert into t (id,a) values (504,71);
+insert into t (id,a) values (504,72);
+insert into t (id,a) values (504,73);
+insert into t (id,a) values (504,74);
+insert into t (id,a) values (504,75);
+insert into t (id,a) values (504,76);
+insert into t (id,a) values (504,77);
+insert into t (id,a) values (504,78);
+insert into t (id,a) values (504,79);
+insert into t (id,a) values (504,80);
+insert into t (id,a) values (504,81);
+insert into t (id,a) values (504,82);
+insert into t (id,a) values (504,83);
+insert into t (id,a) values (504,84);
+insert into t (id,a) values (504,85);
+insert into t (id,a) values (504,86);
+insert into t (id,a) values (504,87);
+insert into t (id,a) values (504,88);
+insert into t (id,a) values (504,89);
+insert into t (id,a) values (504,90);
+insert into t (id,a) values (504,91);
+insert into t (id,a) values (504,92);
+insert into t (id,a) values (504,93);
+insert into t (id,a) values (504,94);
+insert into t (id,a) values (504,95);
+insert into t (id,a) values (504,96);
+insert into t (id,a) values (504,97);
+insert into t (id,a) values (504,98);
+insert into t (id,a) values (504,99);
+insert into t (id,a) values (505,0);
+insert into t (id,a) values (505,1);
+insert into t (id,a) values (505,2);
+insert into t (id,a) values (505,3);
+insert into t (id,a) values (505,4);
+insert into t (id,a) values (505,5);
+insert into t (id,a) values (505,6);
+insert into t (id,a) values (505,7);
+insert into t (id,a) values (505,8);
+insert into t (id,a) values (505,9);
+insert into t (id,a) values (505,10);
+insert into t (id,a) values (505,11);
+insert into t (id,a) values (505,12);
+insert into t (id,a) values (505,13);
+insert into t (id,a) values (505,14);
+insert into t (id,a) values (505,15);
+insert into t (id,a) values (505,16);
+insert into t (id,a) values (505,17);
+insert into t (id,a) values (505,18);
+insert into t (id,a) values (505,19);
+insert into t (id,a) values (505,20);
+insert into t (id,a) values (505,21);
+insert into t (id,a) values (505,22);
+insert into t (id,a) values (505,23);
+insert into t (id,a) values (505,24);
+insert into t (id,a) values (505,25);
+insert into t (id,a) values (505,26);
+insert into t (id,a) values (505,27);
+insert into t (id,a) values (505,28);
+insert into t (id,a) values (505,29);
+insert into t (id,a) values (505,30);
+insert into t (id,a) values (505,31);
+insert into t (id,a) values (505,32);
+insert into t (id,a) values (505,33);
+insert into t (id,a) values (505,34);
+insert into t (id,a) values (505,35);
+insert into t (id,a) values (505,36);
+insert into t (id,a) values (505,37);
+insert into t (id,a) values (505,38);
+insert into t (id,a) values (505,39);
+insert into t (id,a) values (505,40);
+insert into t (id,a) values (505,41);
+insert into t (id,a) values (505,42);
+insert into t (id,a) values (505,43);
+insert into t (id,a) values (505,44);
+insert into t (id,a) values (505,45);
+insert into t (id,a) values (505,46);
+insert into t (id,a) values (505,47);
+insert into t (id,a) values (505,48);
+insert into t (id,a) values (505,49);
+insert into t (id,a) values (505,50);
+insert into t (id,a) values (505,51);
+insert into t (id,a) values (505,52);
+insert into t (id,a) values (505,53);
+insert into t (id,a) values (505,54);
+insert into t (id,a) values (505,55);
+insert into t (id,a) values (505,56);
+insert into t (id,a) values (505,57);
+insert into t (id,a) values (505,58);
+insert into t (id,a) values (505,59);
+insert into t (id,a) values (505,60);
+insert into t (id,a) values (505,61);
+insert into t (id,a) values (505,62);
+insert into t (id,a) values (505,63);
+insert into t (id,a) values (505,64);
+insert into t (id,a) values (505,65);
+insert into t (id,a) values (505,66);
+insert into t (id,a) values (505,67);
+insert into t (id,a) values (505,68);
+insert into t (id,a) values (505,69);
+insert into t (id,a) values (505,70);
+insert into t (id,a) values (505,71);
+insert into t (id,a) values (505,72);
+insert into t (id,a) values (505,73);
+insert into t (id,a) values (505,74);
+insert into t (id,a) values (505,75);
+insert into t (id,a) values (505,76);
+insert into t (id,a) values (505,77);
+insert into t (id,a) values (505,78);
+insert into t (id,a) values (505,79);
+insert into t (id,a) values (505,80);
+insert into t (id,a) values (505,81);
+insert into t (id,a) values (505,82);
+insert into t (id,a) values (505,83);
+insert into t (id,a) values (505,84);
+insert into t (id,a) values (505,85);
+insert into t (id,a) values (505,86);
+insert into t (id,a) values (505,87);
+insert into t (id,a) values (505,88);
+insert into t (id,a) values (505,89);
+insert into t (id,a) values (505,90);
+insert into t (id,a) values (505,91);
+insert into t (id,a) values (505,92);
+insert into t (id,a) values (505,93);
+insert into t (id,a) values (505,94);
+insert into t (id,a) values (505,95);
+insert into t (id,a) values (505,96);
+insert into t (id,a) values (505,97);
+insert into t (id,a) values (505,98);
+insert into t (id,a) values (505,99);
+insert into t (id,a) values (506,0);
+insert into t (id,a) values (506,1);
+insert into t (id,a) values (506,2);
+insert into t (id,a) values (506,3);
+insert into t (id,a) values (506,4);
+insert into t (id,a) values (506,5);
+insert into t (id,a) values (506,6);
+insert into t (id,a) values (506,7);
+insert into t (id,a) values (506,8);
+insert into t (id,a) values (506,9);
+insert into t (id,a) values (506,10);
+insert into t (id,a) values (506,11);
+insert into t (id,a) values (506,12);
+insert into t (id,a) values (506,13);
+insert into t (id,a) values (506,14);
+insert into t (id,a) values (506,15);
+insert into t (id,a) values (506,16);
+insert into t (id,a) values (506,17);
+insert into t (id,a) values (506,18);
+insert into t (id,a) values (506,19);
+insert into t (id,a) values (506,20);
+insert into t (id,a) values (506,21);
+insert into t (id,a) values (506,22);
+insert into t (id,a) values (506,23);
+insert into t (id,a) values (506,24);
+insert into t (id,a) values (506,25);
+insert into t (id,a) values (506,26);
+insert into t (id,a) values (506,27);
+insert into t (id,a) values (506,28);
+insert into t (id,a) values (506,29);
+insert into t (id,a) values (506,30);
+insert into t (id,a) values (506,31);
+insert into t (id,a) values (506,32);
+insert into t (id,a) values (506,33);
+insert into t (id,a) values (506,34);
+insert into t (id,a) values (506,35);
+insert into t (id,a) values (506,36);
+insert into t (id,a) values (506,37);
+insert into t (id,a) values (506,38);
+insert into t (id,a) values (506,39);
+insert into t (id,a) values (506,40);
+insert into t (id,a) values (506,41);
+insert into t (id,a) values (506,42);
+insert into t (id,a) values (506,43);
+insert into t (id,a) values (506,44);
+insert into t (id,a) values (506,45);
+insert into t (id,a) values (506,46);
+insert into t (id,a) values (506,47);
+insert into t (id,a) values (506,48);
+insert into t (id,a) values (506,49);
+insert into t (id,a) values (506,50);
+insert into t (id,a) values (506,51);
+insert into t (id,a) values (506,52);
+insert into t (id,a) values (506,53);
+insert into t (id,a) values (506,54);
+insert into t (id,a) values (506,55);
+insert into t (id,a) values (506,56);
+insert into t (id,a) values (506,57);
+insert into t (id,a) values (506,58);
+insert into t (id,a) values (506,59);
+insert into t (id,a) values (506,60);
+insert into t (id,a) values (506,61);
+insert into t (id,a) values (506,62);
+insert into t (id,a) values (506,63);
+insert into t (id,a) values (506,64);
+insert into t (id,a) values (506,65);
+insert into t (id,a) values (506,66);
+insert into t (id,a) values (506,67);
+insert into t (id,a) values (506,68);
+insert into t (id,a) values (506,69);
+insert into t (id,a) values (506,70);
+insert into t (id,a) values (506,71);
+insert into t (id,a) values (506,72);
+insert into t (id,a) values (506,73);
+insert into t (id,a) values (506,74);
+insert into t (id,a) values (506,75);
+insert into t (id,a) values (506,76);
+insert into t (id,a) values (506,77);
+insert into t (id,a) values (506,78);
+insert into t (id,a) values (506,79);
+insert into t (id,a) values (506,80);
+insert into t (id,a) values (506,81);
+insert into t (id,a) values (506,82);
+insert into t (id,a) values (506,83);
+insert into t (id,a) values (506,84);
+insert into t (id,a) values (506,85);
+insert into t (id,a) values (506,86);
+insert into t (id,a) values (506,87);
+insert into t (id,a) values (506,88);
+insert into t (id,a) values (506,89);
+insert into t (id,a) values (506,90);
+insert into t (id,a) values (506,91);
+insert into t (id,a) values (506,92);
+insert into t (id,a) values (506,93);
+insert into t (id,a) values (506,94);
+insert into t (id,a) values (506,95);
+insert into t (id,a) values (506,96);
+insert into t (id,a) values (506,97);
+insert into t (id,a) values (506,98);
+insert into t (id,a) values (506,99);
+insert into t (id,a) values (507,0);
+insert into t (id,a) values (507,1);
+insert into t (id,a) values (507,2);
+insert into t (id,a) values (507,3);
+insert into t (id,a) values (507,4);
+insert into t (id,a) values (507,5);
+insert into t (id,a) values (507,6);
+insert into t (id,a) values (507,7);
+insert into t (id,a) values (507,8);
+insert into t (id,a) values (507,9);
+insert into t (id,a) values (507,10);
+insert into t (id,a) values (507,11);
+insert into t (id,a) values (507,12);
+insert into t (id,a) values (507,13);
+insert into t (id,a) values (507,14);
+insert into t (id,a) values (507,15);
+insert into t (id,a) values (507,16);
+insert into t (id,a) values (507,17);
+insert into t (id,a) values (507,18);
+insert into t (id,a) values (507,19);
+insert into t (id,a) values (507,20);
+insert into t (id,a) values (507,21);
+insert into t (id,a) values (507,22);
+insert into t (id,a) values (507,23);
+insert into t (id,a) values (507,24);
+insert into t (id,a) values (507,25);
+insert into t (id,a) values (507,26);
+insert into t (id,a) values (507,27);
+insert into t (id,a) values (507,28);
+insert into t (id,a) values (507,29);
+insert into t (id,a) values (507,30);
+insert into t (id,a) values (507,31);
+insert into t (id,a) values (507,32);
+insert into t (id,a) values (507,33);
+insert into t (id,a) values (507,34);
+insert into t (id,a) values (507,35);
+insert into t (id,a) values (507,36);
+insert into t (id,a) values (507,37);
+insert into t (id,a) values (507,38);
+insert into t (id,a) values (507,39);
+insert into t (id,a) values (507,40);
+insert into t (id,a) values (507,41);
+insert into t (id,a) values (507,42);
+insert into t (id,a) values (507,43);
+insert into t (id,a) values (507,44);
+insert into t (id,a) values (507,45);
+insert into t (id,a) values (507,46);
+insert into t (id,a) values (507,47);
+insert into t (id,a) values (507,48);
+insert into t (id,a) values (507,49);
+insert into t (id,a) values (507,50);
+insert into t (id,a) values (507,51);
+insert into t (id,a) values (507,52);
+insert into t (id,a) values (507,53);
+insert into t (id,a) values (507,54);
+insert into t (id,a) values (507,55);
+insert into t (id,a) values (507,56);
+insert into t (id,a) values (507,57);
+insert into t (id,a) values (507,58);
+insert into t (id,a) values (507,59);
+insert into t (id,a) values (507,60);
+insert into t (id,a) values (507,61);
+insert into t (id,a) values (507,62);
+insert into t (id,a) values (507,63);
+insert into t (id,a) values (507,64);
+insert into t (id,a) values (507,65);
+insert into t (id,a) values (507,66);
+insert into t (id,a) values (507,67);
+insert into t (id,a) values (507,68);
+insert into t (id,a) values (507,69);
+insert into t (id,a) values (507,70);
+insert into t (id,a) values (507,71);
+insert into t (id,a) values (507,72);
+insert into t (id,a) values (507,73);
+insert into t (id,a) values (507,74);
+insert into t (id,a) values (507,75);
+insert into t (id,a) values (507,76);
+insert into t (id,a) values (507,77);
+insert into t (id,a) values (507,78);
+insert into t (id,a) values (507,79);
+insert into t (id,a) values (507,80);
+insert into t (id,a) values (507,81);
+insert into t (id,a) values (507,82);
+insert into t (id,a) values (507,83);
+insert into t (id,a) values (507,84);
+insert into t (id,a) values (507,85);
+insert into t (id,a) values (507,86);
+insert into t (id,a) values (507,87);
+insert into t (id,a) values (507,88);
+insert into t (id,a) values (507,89);
+insert into t (id,a) values (507,90);
+insert into t (id,a) values (507,91);
+insert into t (id,a) values (507,92);
+insert into t (id,a) values (507,93);
+insert into t (id,a) values (507,94);
+insert into t (id,a) values (507,95);
+insert into t (id,a) values (507,96);
+insert into t (id,a) values (507,97);
+insert into t (id,a) values (507,98);
+insert into t (id,a) values (507,99);
+insert into t (id,a) values (508,0);
+insert into t (id,a) values (508,1);
+insert into t (id,a) values (508,2);
+insert into t (id,a) values (508,3);
+insert into t (id,a) values (508,4);
+insert into t (id,a) values (508,5);
+insert into t (id,a) values (508,6);
+insert into t (id,a) values (508,7);
+insert into t (id,a) values (508,8);
+insert into t (id,a) values (508,9);
+insert into t (id,a) values (508,10);
+insert into t (id,a) values (508,11);
+insert into t (id,a) values (508,12);
+insert into t (id,a) values (508,13);
+insert into t (id,a) values (508,14);
+insert into t (id,a) values (508,15);
+insert into t (id,a) values (508,16);
+insert into t (id,a) values (508,17);
+insert into t (id,a) values (508,18);
+insert into t (id,a) values (508,19);
+insert into t (id,a) values (508,20);
+insert into t (id,a) values (508,21);
+insert into t (id,a) values (508,22);
+insert into t (id,a) values (508,23);
+insert into t (id,a) values (508,24);
+insert into t (id,a) values (508,25);
+insert into t (id,a) values (508,26);
+insert into t (id,a) values (508,27);
+insert into t (id,a) values (508,28);
+insert into t (id,a) values (508,29);
+insert into t (id,a) values (508,30);
+insert into t (id,a) values (508,31);
+insert into t (id,a) values (508,32);
+insert into t (id,a) values (508,33);
+insert into t (id,a) values (508,34);
+insert into t (id,a) values (508,35);
+insert into t (id,a) values (508,36);
+insert into t (id,a) values (508,37);
+insert into t (id,a) values (508,38);
+insert into t (id,a) values (508,39);
+insert into t (id,a) values (508,40);
+insert into t (id,a) values (508,41);
+insert into t (id,a) values (508,42);
+insert into t (id,a) values (508,43);
+insert into t (id,a) values (508,44);
+insert into t (id,a) values (508,45);
+insert into t (id,a) values (508,46);
+insert into t (id,a) values (508,47);
+insert into t (id,a) values (508,48);
+insert into t (id,a) values (508,49);
+insert into t (id,a) values (508,50);
+insert into t (id,a) values (508,51);
+insert into t (id,a) values (508,52);
+insert into t (id,a) values (508,53);
+insert into t (id,a) values (508,54);
+insert into t (id,a) values (508,55);
+insert into t (id,a) values (508,56);
+insert into t (id,a) values (508,57);
+insert into t (id,a) values (508,58);
+insert into t (id,a) values (508,59);
+insert into t (id,a) values (508,60);
+insert into t (id,a) values (508,61);
+insert into t (id,a) values (508,62);
+insert into t (id,a) values (508,63);
+insert into t (id,a) values (508,64);
+insert into t (id,a) values (508,65);
+insert into t (id,a) values (508,66);
+insert into t (id,a) values (508,67);
+insert into t (id,a) values (508,68);
+insert into t (id,a) values (508,69);
+insert into t (id,a) values (508,70);
+insert into t (id,a) values (508,71);
+insert into t (id,a) values (508,72);
+insert into t (id,a) values (508,73);
+insert into t (id,a) values (508,74);
+insert into t (id,a) values (508,75);
+insert into t (id,a) values (508,76);
+insert into t (id,a) values (508,77);
+insert into t (id,a) values (508,78);
+insert into t (id,a) values (508,79);
+insert into t (id,a) values (508,80);
+insert into t (id,a) values (508,81);
+insert into t (id,a) values (508,82);
+insert into t (id,a) values (508,83);
+insert into t (id,a) values (508,84);
+insert into t (id,a) values (508,85);
+insert into t (id,a) values (508,86);
+insert into t (id,a) values (508,87);
+insert into t (id,a) values (508,88);
+insert into t (id,a) values (508,89);
+insert into t (id,a) values (508,90);
+insert into t (id,a) values (508,91);
+insert into t (id,a) values (508,92);
+insert into t (id,a) values (508,93);
+insert into t (id,a) values (508,94);
+insert into t (id,a) values (508,95);
+insert into t (id,a) values (508,96);
+insert into t (id,a) values (508,97);
+insert into t (id,a) values (508,98);
+insert into t (id,a) values (508,99);
+insert into t (id,a) values (509,0);
+insert into t (id,a) values (509,1);
+insert into t (id,a) values (509,2);
+insert into t (id,a) values (509,3);
+insert into t (id,a) values (509,4);
+insert into t (id,a) values (509,5);
+insert into t (id,a) values (509,6);
+insert into t (id,a) values (509,7);
+insert into t (id,a) values (509,8);
+insert into t (id,a) values (509,9);
+insert into t (id,a) values (509,10);
+insert into t (id,a) values (509,11);
+insert into t (id,a) values (509,12);
+insert into t (id,a) values (509,13);
+insert into t (id,a) values (509,14);
+insert into t (id,a) values (509,15);
+insert into t (id,a) values (509,16);
+insert into t (id,a) values (509,17);
+insert into t (id,a) values (509,18);
+insert into t (id,a) values (509,19);
+insert into t (id,a) values (509,20);
+insert into t (id,a) values (509,21);
+insert into t (id,a) values (509,22);
+insert into t (id,a) values (509,23);
+insert into t (id,a) values (509,24);
+insert into t (id,a) values (509,25);
+insert into t (id,a) values (509,26);
+insert into t (id,a) values (509,27);
+insert into t (id,a) values (509,28);
+insert into t (id,a) values (509,29);
+insert into t (id,a) values (509,30);
+insert into t (id,a) values (509,31);
+insert into t (id,a) values (509,32);
+insert into t (id,a) values (509,33);
+insert into t (id,a) values (509,34);
+insert into t (id,a) values (509,35);
+insert into t (id,a) values (509,36);
+insert into t (id,a) values (509,37);
+insert into t (id,a) values (509,38);
+insert into t (id,a) values (509,39);
+insert into t (id,a) values (509,40);
+insert into t (id,a) values (509,41);
+insert into t (id,a) values (509,42);
+insert into t (id,a) values (509,43);
+insert into t (id,a) values (509,44);
+insert into t (id,a) values (509,45);
+insert into t (id,a) values (509,46);
+insert into t (id,a) values (509,47);
+insert into t (id,a) values (509,48);
+insert into t (id,a) values (509,49);
+insert into t (id,a) values (509,50);
+insert into t (id,a) values (509,51);
+insert into t (id,a) values (509,52);
+insert into t (id,a) values (509,53);
+insert into t (id,a) values (509,54);
+insert into t (id,a) values (509,55);
+insert into t (id,a) values (509,56);
+insert into t (id,a) values (509,57);
+insert into t (id,a) values (509,58);
+insert into t (id,a) values (509,59);
+insert into t (id,a) values (509,60);
+insert into t (id,a) values (509,61);
+insert into t (id,a) values (509,62);
+insert into t (id,a) values (509,63);
+insert into t (id,a) values (509,64);
+insert into t (id,a) values (509,65);
+insert into t (id,a) values (509,66);
+insert into t (id,a) values (509,67);
+insert into t (id,a) values (509,68);
+insert into t (id,a) values (509,69);
+insert into t (id,a) values (509,70);
+insert into t (id,a) values (509,71);
+insert into t (id,a) values (509,72);
+insert into t (id,a) values (509,73);
+insert into t (id,a) values (509,74);
+insert into t (id,a) values (509,75);
+insert into t (id,a) values (509,76);
+insert into t (id,a) values (509,77);
+insert into t (id,a) values (509,78);
+insert into t (id,a) values (509,79);
+insert into t (id,a) values (509,80);
+insert into t (id,a) values (509,81);
+insert into t (id,a) values (509,82);
+insert into t (id,a) values (509,83);
+insert into t (id,a) values (509,84);
+insert into t (id,a) values (509,85);
+insert into t (id,a) values (509,86);
+insert into t (id,a) values (509,87);
+insert into t (id,a) values (509,88);
+insert into t (id,a) values (509,89);
+insert into t (id,a) values (509,90);
+insert into t (id,a) values (509,91);
+insert into t (id,a) values (509,92);
+insert into t (id,a) values (509,93);
+insert into t (id,a) values (509,94);
+insert into t (id,a) values (509,95);
+insert into t (id,a) values (509,96);
+insert into t (id,a) values (509,97);
+insert into t (id,a) values (509,98);
+insert into t (id,a) values (509,99);
+insert into t (id,a) values (510,0);
+insert into t (id,a) values (510,1);
+insert into t (id,a) values (510,2);
+insert into t (id,a) values (510,3);
+insert into t (id,a) values (510,4);
+insert into t (id,a) values (510,5);
+insert into t (id,a) values (510,6);
+insert into t (id,a) values (510,7);
+insert into t (id,a) values (510,8);
+insert into t (id,a) values (510,9);
+insert into t (id,a) values (510,10);
+insert into t (id,a) values (510,11);
+insert into t (id,a) values (510,12);
+insert into t (id,a) values (510,13);
+insert into t (id,a) values (510,14);
+insert into t (id,a) values (510,15);
+insert into t (id,a) values (510,16);
+insert into t (id,a) values (510,17);
+insert into t (id,a) values (510,18);
+insert into t (id,a) values (510,19);
+insert into t (id,a) values (510,20);
+insert into t (id,a) values (510,21);
+insert into t (id,a) values (510,22);
+insert into t (id,a) values (510,23);
+insert into t (id,a) values (510,24);
+insert into t (id,a) values (510,25);
+insert into t (id,a) values (510,26);
+insert into t (id,a) values (510,27);
+insert into t (id,a) values (510,28);
+insert into t (id,a) values (510,29);
+insert into t (id,a) values (510,30);
+insert into t (id,a) values (510,31);
+insert into t (id,a) values (510,32);
+insert into t (id,a) values (510,33);
+insert into t (id,a) values (510,34);
+insert into t (id,a) values (510,35);
+insert into t (id,a) values (510,36);
+insert into t (id,a) values (510,37);
+insert into t (id,a) values (510,38);
+insert into t (id,a) values (510,39);
+insert into t (id,a) values (510,40);
+insert into t (id,a) values (510,41);
+insert into t (id,a) values (510,42);
+insert into t (id,a) values (510,43);
+insert into t (id,a) values (510,44);
+insert into t (id,a) values (510,45);
+insert into t (id,a) values (510,46);
+insert into t (id,a) values (510,47);
+insert into t (id,a) values (510,48);
+insert into t (id,a) values (510,49);
+insert into t (id,a) values (510,50);
+insert into t (id,a) values (510,51);
+insert into t (id,a) values (510,52);
+insert into t (id,a) values (510,53);
+insert into t (id,a) values (510,54);
+insert into t (id,a) values (510,55);
+insert into t (id,a) values (510,56);
+insert into t (id,a) values (510,57);
+insert into t (id,a) values (510,58);
+insert into t (id,a) values (510,59);
+insert into t (id,a) values (510,60);
+insert into t (id,a) values (510,61);
+insert into t (id,a) values (510,62);
+insert into t (id,a) values (510,63);
+insert into t (id,a) values (510,64);
+insert into t (id,a) values (510,65);
+insert into t (id,a) values (510,66);
+insert into t (id,a) values (510,67);
+insert into t (id,a) values (510,68);
+insert into t (id,a) values (510,69);
+insert into t (id,a) values (510,70);
+insert into t (id,a) values (510,71);
+insert into t (id,a) values (510,72);
+insert into t (id,a) values (510,73);
+insert into t (id,a) values (510,74);
+insert into t (id,a) values (510,75);
+insert into t (id,a) values (510,76);
+insert into t (id,a) values (510,77);
+insert into t (id,a) values (510,78);
+insert into t (id,a) values (510,79);
+insert into t (id,a) values (510,80);
+insert into t (id,a) values (510,81);
+insert into t (id,a) values (510,82);
+insert into t (id,a) values (510,83);
+insert into t (id,a) values (510,84);
+insert into t (id,a) values (510,85);
+insert into t (id,a) values (510,86);
+insert into t (id,a) values (510,87);
+insert into t (id,a) values (510,88);
+insert into t (id,a) values (510,89);
+insert into t (id,a) values (510,90);
+insert into t (id,a) values (510,91);
+insert into t (id,a) values (510,92);
+insert into t (id,a) values (510,93);
+insert into t (id,a) values (510,94);
+insert into t (id,a) values (510,95);
+insert into t (id,a) values (510,96);
+insert into t (id,a) values (510,97);
+insert into t (id,a) values (510,98);
+insert into t (id,a) values (510,99);
+insert into t (id,a) values (511,0);
+insert into t (id,a) values (511,1);
+insert into t (id,a) values (511,2);
+insert into t (id,a) values (511,3);
+insert into t (id,a) values (511,4);
+insert into t (id,a) values (511,5);
+insert into t (id,a) values (511,6);
+insert into t (id,a) values (511,7);
+insert into t (id,a) values (511,8);
+insert into t (id,a) values (511,9);
+insert into t (id,a) values (511,10);
+insert into t (id,a) values (511,11);
+insert into t (id,a) values (511,12);
+insert into t (id,a) values (511,13);
+insert into t (id,a) values (511,14);
+insert into t (id,a) values (511,15);
+insert into t (id,a) values (511,16);
+insert into t (id,a) values (511,17);
+insert into t (id,a) values (511,18);
+insert into t (id,a) values (511,19);
+insert into t (id,a) values (511,20);
+insert into t (id,a) values (511,21);
+insert into t (id,a) values (511,22);
+insert into t (id,a) values (511,23);
+insert into t (id,a) values (511,24);
+insert into t (id,a) values (511,25);
+insert into t (id,a) values (511,26);
+insert into t (id,a) values (511,27);
+insert into t (id,a) values (511,28);
+insert into t (id,a) values (511,29);
+insert into t (id,a) values (511,30);
+insert into t (id,a) values (511,31);
+insert into t (id,a) values (511,32);
+insert into t (id,a) values (511,33);
+insert into t (id,a) values (511,34);
+insert into t (id,a) values (511,35);
+insert into t (id,a) values (511,36);
+insert into t (id,a) values (511,37);
+insert into t (id,a) values (511,38);
+insert into t (id,a) values (511,39);
+insert into t (id,a) values (511,40);
+insert into t (id,a) values (511,41);
+insert into t (id,a) values (511,42);
+insert into t (id,a) values (511,43);
+insert into t (id,a) values (511,44);
+insert into t (id,a) values (511,45);
+insert into t (id,a) values (511,46);
+insert into t (id,a) values (511,47);
+insert into t (id,a) values (511,48);
+insert into t (id,a) values (511,49);
+insert into t (id,a) values (511,50);
+insert into t (id,a) values (511,51);
+insert into t (id,a) values (511,52);
+insert into t (id,a) values (511,53);
+insert into t (id,a) values (511,54);
+insert into t (id,a) values (511,55);
+insert into t (id,a) values (511,56);
+insert into t (id,a) values (511,57);
+insert into t (id,a) values (511,58);
+insert into t (id,a) values (511,59);
+insert into t (id,a) values (511,60);
+insert into t (id,a) values (511,61);
+insert into t (id,a) values (511,62);
+insert into t (id,a) values (511,63);
+insert into t (id,a) values (511,64);
+insert into t (id,a) values (511,65);
+insert into t (id,a) values (511,66);
+insert into t (id,a) values (511,67);
+insert into t (id,a) values (511,68);
+insert into t (id,a) values (511,69);
+insert into t (id,a) values (511,70);
+insert into t (id,a) values (511,71);
+insert into t (id,a) values (511,72);
+insert into t (id,a) values (511,73);
+insert into t (id,a) values (511,74);
+insert into t (id,a) values (511,75);
+insert into t (id,a) values (511,76);
+insert into t (id,a) values (511,77);
+insert into t (id,a) values (511,78);
+insert into t (id,a) values (511,79);
+insert into t (id,a) values (511,80);
+insert into t (id,a) values (511,81);
+insert into t (id,a) values (511,82);
+insert into t (id,a) values (511,83);
+insert into t (id,a) values (511,84);
+insert into t (id,a) values (511,85);
+insert into t (id,a) values (511,86);
+insert into t (id,a) values (511,87);
+insert into t (id,a) values (511,88);
+insert into t (id,a) values (511,89);
+insert into t (id,a) values (511,90);
+insert into t (id,a) values (511,91);
+insert into t (id,a) values (511,92);
+insert into t (id,a) values (511,93);
+insert into t (id,a) values (511,94);
+insert into t (id,a) values (511,95);
+insert into t (id,a) values (511,96);
+insert into t (id,a) values (511,97);
+insert into t (id,a) values (511,98);
+insert into t (id,a) values (511,99);
+insert into t (id,a) values (512,0);
+insert into t (id,a) values (512,1);
+insert into t (id,a) values (512,2);
+insert into t (id,a) values (512,3);
+insert into t (id,a) values (512,4);
+insert into t (id,a) values (512,5);
+insert into t (id,a) values (512,6);
+insert into t (id,a) values (512,7);
+insert into t (id,a) values (512,8);
+insert into t (id,a) values (512,9);
+insert into t (id,a) values (512,10);
+insert into t (id,a) values (512,11);
+insert into t (id,a) values (512,12);
+insert into t (id,a) values (512,13);
+insert into t (id,a) values (512,14);
+insert into t (id,a) values (512,15);
+insert into t (id,a) values (512,16);
+insert into t (id,a) values (512,17);
+insert into t (id,a) values (512,18);
+insert into t (id,a) values (512,19);
+insert into t (id,a) values (512,20);
+insert into t (id,a) values (512,21);
+insert into t (id,a) values (512,22);
+insert into t (id,a) values (512,23);
+insert into t (id,a) values (512,24);
+insert into t (id,a) values (512,25);
+insert into t (id,a) values (512,26);
+insert into t (id,a) values (512,27);
+insert into t (id,a) values (512,28);
+insert into t (id,a) values (512,29);
+insert into t (id,a) values (512,30);
+insert into t (id,a) values (512,31);
+insert into t (id,a) values (512,32);
+insert into t (id,a) values (512,33);
+insert into t (id,a) values (512,34);
+insert into t (id,a) values (512,35);
+insert into t (id,a) values (512,36);
+insert into t (id,a) values (512,37);
+insert into t (id,a) values (512,38);
+insert into t (id,a) values (512,39);
+insert into t (id,a) values (512,40);
+insert into t (id,a) values (512,41);
+insert into t (id,a) values (512,42);
+insert into t (id,a) values (512,43);
+insert into t (id,a) values (512,44);
+insert into t (id,a) values (512,45);
+insert into t (id,a) values (512,46);
+insert into t (id,a) values (512,47);
+insert into t (id,a) values (512,48);
+insert into t (id,a) values (512,49);
+insert into t (id,a) values (512,50);
+insert into t (id,a) values (512,51);
+insert into t (id,a) values (512,52);
+insert into t (id,a) values (512,53);
+insert into t (id,a) values (512,54);
+insert into t (id,a) values (512,55);
+insert into t (id,a) values (512,56);
+insert into t (id,a) values (512,57);
+insert into t (id,a) values (512,58);
+insert into t (id,a) values (512,59);
+insert into t (id,a) values (512,60);
+insert into t (id,a) values (512,61);
+insert into t (id,a) values (512,62);
+insert into t (id,a) values (512,63);
+insert into t (id,a) values (512,64);
+insert into t (id,a) values (512,65);
+insert into t (id,a) values (512,66);
+insert into t (id,a) values (512,67);
+insert into t (id,a) values (512,68);
+insert into t (id,a) values (512,69);
+insert into t (id,a) values (512,70);
+insert into t (id,a) values (512,71);
+insert into t (id,a) values (512,72);
+insert into t (id,a) values (512,73);
+insert into t (id,a) values (512,74);
+insert into t (id,a) values (512,75);
+insert into t (id,a) values (512,76);
+insert into t (id,a) values (512,77);
+insert into t (id,a) values (512,78);
+insert into t (id,a) values (512,79);
+insert into t (id,a) values (512,80);
+insert into t (id,a) values (512,81);
+insert into t (id,a) values (512,82);
+insert into t (id,a) values (512,83);
+insert into t (id,a) values (512,84);
+insert into t (id,a) values (512,85);
+insert into t (id,a) values (512,86);
+insert into t (id,a) values (512,87);
+insert into t (id,a) values (512,88);
+insert into t (id,a) values (512,89);
+insert into t (id,a) values (512,90);
+insert into t (id,a) values (512,91);
+insert into t (id,a) values (512,92);
+insert into t (id,a) values (512,93);
+insert into t (id,a) values (512,94);
+insert into t (id,a) values (512,95);
+insert into t (id,a) values (512,96);
+insert into t (id,a) values (512,97);
+insert into t (id,a) values (512,98);
+insert into t (id,a) values (512,99);
+insert into t (id,a) values (513,0);
+insert into t (id,a) values (513,1);
+insert into t (id,a) values (513,2);
+insert into t (id,a) values (513,3);
+insert into t (id,a) values (513,4);
+insert into t (id,a) values (513,5);
+insert into t (id,a) values (513,6);
+insert into t (id,a) values (513,7);
+insert into t (id,a) values (513,8);
+insert into t (id,a) values (513,9);
+insert into t (id,a) values (513,10);
+insert into t (id,a) values (513,11);
+insert into t (id,a) values (513,12);
+insert into t (id,a) values (513,13);
+insert into t (id,a) values (513,14);
+insert into t (id,a) values (513,15);
+insert into t (id,a) values (513,16);
+insert into t (id,a) values (513,17);
+insert into t (id,a) values (513,18);
+insert into t (id,a) values (513,19);
+insert into t (id,a) values (513,20);
+insert into t (id,a) values (513,21);
+insert into t (id,a) values (513,22);
+insert into t (id,a) values (513,23);
+insert into t (id,a) values (513,24);
+insert into t (id,a) values (513,25);
+insert into t (id,a) values (513,26);
+insert into t (id,a) values (513,27);
+insert into t (id,a) values (513,28);
+insert into t (id,a) values (513,29);
+insert into t (id,a) values (513,30);
+insert into t (id,a) values (513,31);
+insert into t (id,a) values (513,32);
+insert into t (id,a) values (513,33);
+insert into t (id,a) values (513,34);
+insert into t (id,a) values (513,35);
+insert into t (id,a) values (513,36);
+insert into t (id,a) values (513,37);
+insert into t (id,a) values (513,38);
+insert into t (id,a) values (513,39);
+insert into t (id,a) values (513,40);
+insert into t (id,a) values (513,41);
+insert into t (id,a) values (513,42);
+insert into t (id,a) values (513,43);
+insert into t (id,a) values (513,44);
+insert into t (id,a) values (513,45);
+insert into t (id,a) values (513,46);
+insert into t (id,a) values (513,47);
+insert into t (id,a) values (513,48);
+insert into t (id,a) values (513,49);
+insert into t (id,a) values (513,50);
+insert into t (id,a) values (513,51);
+insert into t (id,a) values (513,52);
+insert into t (id,a) values (513,53);
+insert into t (id,a) values (513,54);
+insert into t (id,a) values (513,55);
+insert into t (id,a) values (513,56);
+insert into t (id,a) values (513,57);
+insert into t (id,a) values (513,58);
+insert into t (id,a) values (513,59);
+insert into t (id,a) values (513,60);
+insert into t (id,a) values (513,61);
+insert into t (id,a) values (513,62);
+insert into t (id,a) values (513,63);
+insert into t (id,a) values (513,64);
+insert into t (id,a) values (513,65);
+insert into t (id,a) values (513,66);
+insert into t (id,a) values (513,67);
+insert into t (id,a) values (513,68);
+insert into t (id,a) values (513,69);
+insert into t (id,a) values (513,70);
+insert into t (id,a) values (513,71);
+insert into t (id,a) values (513,72);
+insert into t (id,a) values (513,73);
+insert into t (id,a) values (513,74);
+insert into t (id,a) values (513,75);
+insert into t (id,a) values (513,76);
+insert into t (id,a) values (513,77);
+insert into t (id,a) values (513,78);
+insert into t (id,a) values (513,79);
+insert into t (id,a) values (513,80);
+insert into t (id,a) values (513,81);
+insert into t (id,a) values (513,82);
+insert into t (id,a) values (513,83);
+insert into t (id,a) values (513,84);
+insert into t (id,a) values (513,85);
+insert into t (id,a) values (513,86);
+insert into t (id,a) values (513,87);
+insert into t (id,a) values (513,88);
+insert into t (id,a) values (513,89);
+insert into t (id,a) values (513,90);
+insert into t (id,a) values (513,91);
+insert into t (id,a) values (513,92);
+insert into t (id,a) values (513,93);
+insert into t (id,a) values (513,94);
+insert into t (id,a) values (513,95);
+insert into t (id,a) values (513,96);
+insert into t (id,a) values (513,97);
+insert into t (id,a) values (513,98);
+insert into t (id,a) values (513,99);
+insert into t (id,a) values (514,0);
+insert into t (id,a) values (514,1);
+insert into t (id,a) values (514,2);
+insert into t (id,a) values (514,3);
+insert into t (id,a) values (514,4);
+insert into t (id,a) values (514,5);
+insert into t (id,a) values (514,6);
+insert into t (id,a) values (514,7);
+insert into t (id,a) values (514,8);
+insert into t (id,a) values (514,9);
+insert into t (id,a) values (514,10);
+insert into t (id,a) values (514,11);
+insert into t (id,a) values (514,12);
+insert into t (id,a) values (514,13);
+insert into t (id,a) values (514,14);
+insert into t (id,a) values (514,15);
+insert into t (id,a) values (514,16);
+insert into t (id,a) values (514,17);
+insert into t (id,a) values (514,18);
+insert into t (id,a) values (514,19);
+insert into t (id,a) values (514,20);
+insert into t (id,a) values (514,21);
+insert into t (id,a) values (514,22);
+insert into t (id,a) values (514,23);
+insert into t (id,a) values (514,24);
+insert into t (id,a) values (514,25);
+insert into t (id,a) values (514,26);
+insert into t (id,a) values (514,27);
+insert into t (id,a) values (514,28);
+insert into t (id,a) values (514,29);
+insert into t (id,a) values (514,30);
+insert into t (id,a) values (514,31);
+insert into t (id,a) values (514,32);
+insert into t (id,a) values (514,33);
+insert into t (id,a) values (514,34);
+insert into t (id,a) values (514,35);
+insert into t (id,a) values (514,36);
+insert into t (id,a) values (514,37);
+insert into t (id,a) values (514,38);
+insert into t (id,a) values (514,39);
+insert into t (id,a) values (514,40);
+insert into t (id,a) values (514,41);
+insert into t (id,a) values (514,42);
+insert into t (id,a) values (514,43);
+insert into t (id,a) values (514,44);
+insert into t (id,a) values (514,45);
+insert into t (id,a) values (514,46);
+insert into t (id,a) values (514,47);
+insert into t (id,a) values (514,48);
+insert into t (id,a) values (514,49);
+insert into t (id,a) values (514,50);
+insert into t (id,a) values (514,51);
+insert into t (id,a) values (514,52);
+insert into t (id,a) values (514,53);
+insert into t (id,a) values (514,54);
+insert into t (id,a) values (514,55);
+insert into t (id,a) values (514,56);
+insert into t (id,a) values (514,57);
+insert into t (id,a) values (514,58);
+insert into t (id,a) values (514,59);
+insert into t (id,a) values (514,60);
+insert into t (id,a) values (514,61);
+insert into t (id,a) values (514,62);
+insert into t (id,a) values (514,63);
+insert into t (id,a) values (514,64);
+insert into t (id,a) values (514,65);
+insert into t (id,a) values (514,66);
+insert into t (id,a) values (514,67);
+insert into t (id,a) values (514,68);
+insert into t (id,a) values (514,69);
+insert into t (id,a) values (514,70);
+insert into t (id,a) values (514,71);
+insert into t (id,a) values (514,72);
+insert into t (id,a) values (514,73);
+insert into t (id,a) values (514,74);
+insert into t (id,a) values (514,75);
+insert into t (id,a) values (514,76);
+insert into t (id,a) values (514,77);
+insert into t (id,a) values (514,78);
+insert into t (id,a) values (514,79);
+insert into t (id,a) values (514,80);
+insert into t (id,a) values (514,81);
+insert into t (id,a) values (514,82);
+insert into t (id,a) values (514,83);
+insert into t (id,a) values (514,84);
+insert into t (id,a) values (514,85);
+insert into t (id,a) values (514,86);
+insert into t (id,a) values (514,87);
+insert into t (id,a) values (514,88);
+insert into t (id,a) values (514,89);
+insert into t (id,a) values (514,90);
+insert into t (id,a) values (514,91);
+insert into t (id,a) values (514,92);
+insert into t (id,a) values (514,93);
+insert into t (id,a) values (514,94);
+insert into t (id,a) values (514,95);
+insert into t (id,a) values (514,96);
+insert into t (id,a) values (514,97);
+insert into t (id,a) values (514,98);
+insert into t (id,a) values (514,99);
+insert into t (id,a) values (515,0);
+insert into t (id,a) values (515,1);
+insert into t (id,a) values (515,2);
+insert into t (id,a) values (515,3);
+insert into t (id,a) values (515,4);
+insert into t (id,a) values (515,5);
+insert into t (id,a) values (515,6);
+insert into t (id,a) values (515,7);
+insert into t (id,a) values (515,8);
+insert into t (id,a) values (515,9);
+insert into t (id,a) values (515,10);
+insert into t (id,a) values (515,11);
+insert into t (id,a) values (515,12);
+insert into t (id,a) values (515,13);
+insert into t (id,a) values (515,14);
+insert into t (id,a) values (515,15);
+insert into t (id,a) values (515,16);
+insert into t (id,a) values (515,17);
+insert into t (id,a) values (515,18);
+insert into t (id,a) values (515,19);
+insert into t (id,a) values (515,20);
+insert into t (id,a) values (515,21);
+insert into t (id,a) values (515,22);
+insert into t (id,a) values (515,23);
+insert into t (id,a) values (515,24);
+insert into t (id,a) values (515,25);
+insert into t (id,a) values (515,26);
+insert into t (id,a) values (515,27);
+insert into t (id,a) values (515,28);
+insert into t (id,a) values (515,29);
+insert into t (id,a) values (515,30);
+insert into t (id,a) values (515,31);
+insert into t (id,a) values (515,32);
+insert into t (id,a) values (515,33);
+insert into t (id,a) values (515,34);
+insert into t (id,a) values (515,35);
+insert into t (id,a) values (515,36);
+insert into t (id,a) values (515,37);
+insert into t (id,a) values (515,38);
+insert into t (id,a) values (515,39);
+insert into t (id,a) values (515,40);
+insert into t (id,a) values (515,41);
+insert into t (id,a) values (515,42);
+insert into t (id,a) values (515,43);
+insert into t (id,a) values (515,44);
+insert into t (id,a) values (515,45);
+insert into t (id,a) values (515,46);
+insert into t (id,a) values (515,47);
+insert into t (id,a) values (515,48);
+insert into t (id,a) values (515,49);
+insert into t (id,a) values (515,50);
+insert into t (id,a) values (515,51);
+insert into t (id,a) values (515,52);
+insert into t (id,a) values (515,53);
+insert into t (id,a) values (515,54);
+insert into t (id,a) values (515,55);
+insert into t (id,a) values (515,56);
+insert into t (id,a) values (515,57);
+insert into t (id,a) values (515,58);
+insert into t (id,a) values (515,59);
+insert into t (id,a) values (515,60);
+insert into t (id,a) values (515,61);
+insert into t (id,a) values (515,62);
+insert into t (id,a) values (515,63);
+insert into t (id,a) values (515,64);
+insert into t (id,a) values (515,65);
+insert into t (id,a) values (515,66);
+insert into t (id,a) values (515,67);
+insert into t (id,a) values (515,68);
+insert into t (id,a) values (515,69);
+insert into t (id,a) values (515,70);
+insert into t (id,a) values (515,71);
+insert into t (id,a) values (515,72);
+insert into t (id,a) values (515,73);
+insert into t (id,a) values (515,74);
+insert into t (id,a) values (515,75);
+insert into t (id,a) values (515,76);
+insert into t (id,a) values (515,77);
+insert into t (id,a) values (515,78);
+insert into t (id,a) values (515,79);
+insert into t (id,a) values (515,80);
+insert into t (id,a) values (515,81);
+insert into t (id,a) values (515,82);
+insert into t (id,a) values (515,83);
+insert into t (id,a) values (515,84);
+insert into t (id,a) values (515,85);
+insert into t (id,a) values (515,86);
+insert into t (id,a) values (515,87);
+insert into t (id,a) values (515,88);
+insert into t (id,a) values (515,89);
+insert into t (id,a) values (515,90);
+insert into t (id,a) values (515,91);
+insert into t (id,a) values (515,92);
+insert into t (id,a) values (515,93);
+insert into t (id,a) values (515,94);
+insert into t (id,a) values (515,95);
+insert into t (id,a) values (515,96);
+insert into t (id,a) values (515,97);
+insert into t (id,a) values (515,98);
+insert into t (id,a) values (515,99);
+insert into t (id,a) values (516,0);
+insert into t (id,a) values (516,1);
+insert into t (id,a) values (516,2);
+insert into t (id,a) values (516,3);
+insert into t (id,a) values (516,4);
+insert into t (id,a) values (516,5);
+insert into t (id,a) values (516,6);
+insert into t (id,a) values (516,7);
+insert into t (id,a) values (516,8);
+insert into t (id,a) values (516,9);
+insert into t (id,a) values (516,10);
+insert into t (id,a) values (516,11);
+insert into t (id,a) values (516,12);
+insert into t (id,a) values (516,13);
+insert into t (id,a) values (516,14);
+insert into t (id,a) values (516,15);
+insert into t (id,a) values (516,16);
+insert into t (id,a) values (516,17);
+insert into t (id,a) values (516,18);
+insert into t (id,a) values (516,19);
+insert into t (id,a) values (516,20);
+insert into t (id,a) values (516,21);
+insert into t (id,a) values (516,22);
+insert into t (id,a) values (516,23);
+insert into t (id,a) values (516,24);
+insert into t (id,a) values (516,25);
+insert into t (id,a) values (516,26);
+insert into t (id,a) values (516,27);
+insert into t (id,a) values (516,28);
+insert into t (id,a) values (516,29);
+insert into t (id,a) values (516,30);
+insert into t (id,a) values (516,31);
+insert into t (id,a) values (516,32);
+insert into t (id,a) values (516,33);
+insert into t (id,a) values (516,34);
+insert into t (id,a) values (516,35);
+insert into t (id,a) values (516,36);
+insert into t (id,a) values (516,37);
+insert into t (id,a) values (516,38);
+insert into t (id,a) values (516,39);
+insert into t (id,a) values (516,40);
+insert into t (id,a) values (516,41);
+insert into t (id,a) values (516,42);
+insert into t (id,a) values (516,43);
+insert into t (id,a) values (516,44);
+insert into t (id,a) values (516,45);
+insert into t (id,a) values (516,46);
+insert into t (id,a) values (516,47);
+insert into t (id,a) values (516,48);
+insert into t (id,a) values (516,49);
+insert into t (id,a) values (516,50);
+insert into t (id,a) values (516,51);
+insert into t (id,a) values (516,52);
+insert into t (id,a) values (516,53);
+insert into t (id,a) values (516,54);
+insert into t (id,a) values (516,55);
+insert into t (id,a) values (516,56);
+insert into t (id,a) values (516,57);
+insert into t (id,a) values (516,58);
+insert into t (id,a) values (516,59);
+insert into t (id,a) values (516,60);
+insert into t (id,a) values (516,61);
+insert into t (id,a) values (516,62);
+insert into t (id,a) values (516,63);
+insert into t (id,a) values (516,64);
+insert into t (id,a) values (516,65);
+insert into t (id,a) values (516,66);
+insert into t (id,a) values (516,67);
+insert into t (id,a) values (516,68);
+insert into t (id,a) values (516,69);
+insert into t (id,a) values (516,70);
+insert into t (id,a) values (516,71);
+insert into t (id,a) values (516,72);
+insert into t (id,a) values (516,73);
+insert into t (id,a) values (516,74);
+insert into t (id,a) values (516,75);
+insert into t (id,a) values (516,76);
+insert into t (id,a) values (516,77);
+insert into t (id,a) values (516,78);
+insert into t (id,a) values (516,79);
+insert into t (id,a) values (516,80);
+insert into t (id,a) values (516,81);
+insert into t (id,a) values (516,82);
+insert into t (id,a) values (516,83);
+insert into t (id,a) values (516,84);
+insert into t (id,a) values (516,85);
+insert into t (id,a) values (516,86);
+insert into t (id,a) values (516,87);
+insert into t (id,a) values (516,88);
+insert into t (id,a) values (516,89);
+insert into t (id,a) values (516,90);
+insert into t (id,a) values (516,91);
+insert into t (id,a) values (516,92);
+insert into t (id,a) values (516,93);
+insert into t (id,a) values (516,94);
+insert into t (id,a) values (516,95);
+insert into t (id,a) values (516,96);
+insert into t (id,a) values (516,97);
+insert into t (id,a) values (516,98);
+insert into t (id,a) values (516,99);
+insert into t (id,a) values (517,0);
+insert into t (id,a) values (517,1);
+insert into t (id,a) values (517,2);
+insert into t (id,a) values (517,3);
+insert into t (id,a) values (517,4);
+insert into t (id,a) values (517,5);
+insert into t (id,a) values (517,6);
+insert into t (id,a) values (517,7);
+insert into t (id,a) values (517,8);
+insert into t (id,a) values (517,9);
+insert into t (id,a) values (517,10);
+insert into t (id,a) values (517,11);
+insert into t (id,a) values (517,12);
+insert into t (id,a) values (517,13);
+insert into t (id,a) values (517,14);
+insert into t (id,a) values (517,15);
+insert into t (id,a) values (517,16);
+insert into t (id,a) values (517,17);
+insert into t (id,a) values (517,18);
+insert into t (id,a) values (517,19);
+insert into t (id,a) values (517,20);
+insert into t (id,a) values (517,21);
+insert into t (id,a) values (517,22);
+insert into t (id,a) values (517,23);
+insert into t (id,a) values (517,24);
+insert into t (id,a) values (517,25);
+insert into t (id,a) values (517,26);
+insert into t (id,a) values (517,27);
+insert into t (id,a) values (517,28);
+insert into t (id,a) values (517,29);
+insert into t (id,a) values (517,30);
+insert into t (id,a) values (517,31);
+insert into t (id,a) values (517,32);
+insert into t (id,a) values (517,33);
+insert into t (id,a) values (517,34);
+insert into t (id,a) values (517,35);
+insert into t (id,a) values (517,36);
+insert into t (id,a) values (517,37);
+insert into t (id,a) values (517,38);
+insert into t (id,a) values (517,39);
+insert into t (id,a) values (517,40);
+insert into t (id,a) values (517,41);
+insert into t (id,a) values (517,42);
+insert into t (id,a) values (517,43);
+insert into t (id,a) values (517,44);
+insert into t (id,a) values (517,45);
+insert into t (id,a) values (517,46);
+insert into t (id,a) values (517,47);
+insert into t (id,a) values (517,48);
+insert into t (id,a) values (517,49);
+insert into t (id,a) values (517,50);
+insert into t (id,a) values (517,51);
+insert into t (id,a) values (517,52);
+insert into t (id,a) values (517,53);
+insert into t (id,a) values (517,54);
+insert into t (id,a) values (517,55);
+insert into t (id,a) values (517,56);
+insert into t (id,a) values (517,57);
+insert into t (id,a) values (517,58);
+insert into t (id,a) values (517,59);
+insert into t (id,a) values (517,60);
+insert into t (id,a) values (517,61);
+insert into t (id,a) values (517,62);
+insert into t (id,a) values (517,63);
+insert into t (id,a) values (517,64);
+insert into t (id,a) values (517,65);
+insert into t (id,a) values (517,66);
+insert into t (id,a) values (517,67);
+insert into t (id,a) values (517,68);
+insert into t (id,a) values (517,69);
+insert into t (id,a) values (517,70);
+insert into t (id,a) values (517,71);
+insert into t (id,a) values (517,72);
+insert into t (id,a) values (517,73);
+insert into t (id,a) values (517,74);
+insert into t (id,a) values (517,75);
+insert into t (id,a) values (517,76);
+insert into t (id,a) values (517,77);
+insert into t (id,a) values (517,78);
+insert into t (id,a) values (517,79);
+insert into t (id,a) values (517,80);
+insert into t (id,a) values (517,81);
+insert into t (id,a) values (517,82);
+insert into t (id,a) values (517,83);
+insert into t (id,a) values (517,84);
+insert into t (id,a) values (517,85);
+insert into t (id,a) values (517,86);
+insert into t (id,a) values (517,87);
+insert into t (id,a) values (517,88);
+insert into t (id,a) values (517,89);
+insert into t (id,a) values (517,90);
+insert into t (id,a) values (517,91);
+insert into t (id,a) values (517,92);
+insert into t (id,a) values (517,93);
+insert into t (id,a) values (517,94);
+insert into t (id,a) values (517,95);
+insert into t (id,a) values (517,96);
+insert into t (id,a) values (517,97);
+insert into t (id,a) values (517,98);
+insert into t (id,a) values (517,99);
+insert into t (id,a) values (518,0);
+insert into t (id,a) values (518,1);
+insert into t (id,a) values (518,2);
+insert into t (id,a) values (518,3);
+insert into t (id,a) values (518,4);
+insert into t (id,a) values (518,5);
+insert into t (id,a) values (518,6);
+insert into t (id,a) values (518,7);
+insert into t (id,a) values (518,8);
+insert into t (id,a) values (518,9);
+insert into t (id,a) values (518,10);
+insert into t (id,a) values (518,11);
+insert into t (id,a) values (518,12);
+insert into t (id,a) values (518,13);
+insert into t (id,a) values (518,14);
+insert into t (id,a) values (518,15);
+insert into t (id,a) values (518,16);
+insert into t (id,a) values (518,17);
+insert into t (id,a) values (518,18);
+insert into t (id,a) values (518,19);
+insert into t (id,a) values (518,20);
+insert into t (id,a) values (518,21);
+insert into t (id,a) values (518,22);
+insert into t (id,a) values (518,23);
+insert into t (id,a) values (518,24);
+insert into t (id,a) values (518,25);
+insert into t (id,a) values (518,26);
+insert into t (id,a) values (518,27);
+insert into t (id,a) values (518,28);
+insert into t (id,a) values (518,29);
+insert into t (id,a) values (518,30);
+insert into t (id,a) values (518,31);
+insert into t (id,a) values (518,32);
+insert into t (id,a) values (518,33);
+insert into t (id,a) values (518,34);
+insert into t (id,a) values (518,35);
+insert into t (id,a) values (518,36);
+insert into t (id,a) values (518,37);
+insert into t (id,a) values (518,38);
+insert into t (id,a) values (518,39);
+insert into t (id,a) values (518,40);
+insert into t (id,a) values (518,41);
+insert into t (id,a) values (518,42);
+insert into t (id,a) values (518,43);
+insert into t (id,a) values (518,44);
+insert into t (id,a) values (518,45);
+insert into t (id,a) values (518,46);
+insert into t (id,a) values (518,47);
+insert into t (id,a) values (518,48);
+insert into t (id,a) values (518,49);
+insert into t (id,a) values (518,50);
+insert into t (id,a) values (518,51);
+insert into t (id,a) values (518,52);
+insert into t (id,a) values (518,53);
+insert into t (id,a) values (518,54);
+insert into t (id,a) values (518,55);
+insert into t (id,a) values (518,56);
+insert into t (id,a) values (518,57);
+insert into t (id,a) values (518,58);
+insert into t (id,a) values (518,59);
+insert into t (id,a) values (518,60);
+insert into t (id,a) values (518,61);
+insert into t (id,a) values (518,62);
+insert into t (id,a) values (518,63);
+insert into t (id,a) values (518,64);
+insert into t (id,a) values (518,65);
+insert into t (id,a) values (518,66);
+insert into t (id,a) values (518,67);
+insert into t (id,a) values (518,68);
+insert into t (id,a) values (518,69);
+insert into t (id,a) values (518,70);
+insert into t (id,a) values (518,71);
+insert into t (id,a) values (518,72);
+insert into t (id,a) values (518,73);
+insert into t (id,a) values (518,74);
+insert into t (id,a) values (518,75);
+insert into t (id,a) values (518,76);
+insert into t (id,a) values (518,77);
+insert into t (id,a) values (518,78);
+insert into t (id,a) values (518,79);
+insert into t (id,a) values (518,80);
+insert into t (id,a) values (518,81);
+insert into t (id,a) values (518,82);
+insert into t (id,a) values (518,83);
+insert into t (id,a) values (518,84);
+insert into t (id,a) values (518,85);
+insert into t (id,a) values (518,86);
+insert into t (id,a) values (518,87);
+insert into t (id,a) values (518,88);
+insert into t (id,a) values (518,89);
+insert into t (id,a) values (518,90);
+insert into t (id,a) values (518,91);
+insert into t (id,a) values (518,92);
+insert into t (id,a) values (518,93);
+insert into t (id,a) values (518,94);
+insert into t (id,a) values (518,95);
+insert into t (id,a) values (518,96);
+insert into t (id,a) values (518,97);
+insert into t (id,a) values (518,98);
+insert into t (id,a) values (518,99);
+insert into t (id,a) values (519,0);
+insert into t (id,a) values (519,1);
+insert into t (id,a) values (519,2);
+insert into t (id,a) values (519,3);
+insert into t (id,a) values (519,4);
+insert into t (id,a) values (519,5);
+insert into t (id,a) values (519,6);
+insert into t (id,a) values (519,7);
+insert into t (id,a) values (519,8);
+insert into t (id,a) values (519,9);
+insert into t (id,a) values (519,10);
+insert into t (id,a) values (519,11);
+insert into t (id,a) values (519,12);
+insert into t (id,a) values (519,13);
+insert into t (id,a) values (519,14);
+insert into t (id,a) values (519,15);
+insert into t (id,a) values (519,16);
+insert into t (id,a) values (519,17);
+insert into t (id,a) values (519,18);
+insert into t (id,a) values (519,19);
+insert into t (id,a) values (519,20);
+insert into t (id,a) values (519,21);
+insert into t (id,a) values (519,22);
+insert into t (id,a) values (519,23);
+insert into t (id,a) values (519,24);
+insert into t (id,a) values (519,25);
+insert into t (id,a) values (519,26);
+insert into t (id,a) values (519,27);
+insert into t (id,a) values (519,28);
+insert into t (id,a) values (519,29);
+insert into t (id,a) values (519,30);
+insert into t (id,a) values (519,31);
+insert into t (id,a) values (519,32);
+insert into t (id,a) values (519,33);
+insert into t (id,a) values (519,34);
+insert into t (id,a) values (519,35);
+insert into t (id,a) values (519,36);
+insert into t (id,a) values (519,37);
+insert into t (id,a) values (519,38);
+insert into t (id,a) values (519,39);
+insert into t (id,a) values (519,40);
+insert into t (id,a) values (519,41);
+insert into t (id,a) values (519,42);
+insert into t (id,a) values (519,43);
+insert into t (id,a) values (519,44);
+insert into t (id,a) values (519,45);
+insert into t (id,a) values (519,46);
+insert into t (id,a) values (519,47);
+insert into t (id,a) values (519,48);
+insert into t (id,a) values (519,49);
+insert into t (id,a) values (519,50);
+insert into t (id,a) values (519,51);
+insert into t (id,a) values (519,52);
+insert into t (id,a) values (519,53);
+insert into t (id,a) values (519,54);
+insert into t (id,a) values (519,55);
+insert into t (id,a) values (519,56);
+insert into t (id,a) values (519,57);
+insert into t (id,a) values (519,58);
+insert into t (id,a) values (519,59);
+insert into t (id,a) values (519,60);
+insert into t (id,a) values (519,61);
+insert into t (id,a) values (519,62);
+insert into t (id,a) values (519,63);
+insert into t (id,a) values (519,64);
+insert into t (id,a) values (519,65);
+insert into t (id,a) values (519,66);
+insert into t (id,a) values (519,67);
+insert into t (id,a) values (519,68);
+insert into t (id,a) values (519,69);
+insert into t (id,a) values (519,70);
+insert into t (id,a) values (519,71);
+insert into t (id,a) values (519,72);
+insert into t (id,a) values (519,73);
+insert into t (id,a) values (519,74);
+insert into t (id,a) values (519,75);
+insert into t (id,a) values (519,76);
+insert into t (id,a) values (519,77);
+insert into t (id,a) values (519,78);
+insert into t (id,a) values (519,79);
+insert into t (id,a) values (519,80);
+insert into t (id,a) values (519,81);
+insert into t (id,a) values (519,82);
+insert into t (id,a) values (519,83);
+insert into t (id,a) values (519,84);
+insert into t (id,a) values (519,85);
+insert into t (id,a) values (519,86);
+insert into t (id,a) values (519,87);
+insert into t (id,a) values (519,88);
+insert into t (id,a) values (519,89);
+insert into t (id,a) values (519,90);
+insert into t (id,a) values (519,91);
+insert into t (id,a) values (519,92);
+insert into t (id,a) values (519,93);
+insert into t (id,a) values (519,94);
+insert into t (id,a) values (519,95);
+insert into t (id,a) values (519,96);
+insert into t (id,a) values (519,97);
+insert into t (id,a) values (519,98);
+insert into t (id,a) values (519,99);
+insert into t (id,a) values (520,0);
+insert into t (id,a) values (520,1);
+insert into t (id,a) values (520,2);
+insert into t (id,a) values (520,3);
+insert into t (id,a) values (520,4);
+insert into t (id,a) values (520,5);
+insert into t (id,a) values (520,6);
+insert into t (id,a) values (520,7);
+insert into t (id,a) values (520,8);
+insert into t (id,a) values (520,9);
+insert into t (id,a) values (520,10);
+insert into t (id,a) values (520,11);
+insert into t (id,a) values (520,12);
+insert into t (id,a) values (520,13);
+insert into t (id,a) values (520,14);
+insert into t (id,a) values (520,15);
+insert into t (id,a) values (520,16);
+insert into t (id,a) values (520,17);
+insert into t (id,a) values (520,18);
+insert into t (id,a) values (520,19);
+insert into t (id,a) values (520,20);
+insert into t (id,a) values (520,21);
+insert into t (id,a) values (520,22);
+insert into t (id,a) values (520,23);
+insert into t (id,a) values (520,24);
+insert into t (id,a) values (520,25);
+insert into t (id,a) values (520,26);
+insert into t (id,a) values (520,27);
+insert into t (id,a) values (520,28);
+insert into t (id,a) values (520,29);
+insert into t (id,a) values (520,30);
+insert into t (id,a) values (520,31);
+insert into t (id,a) values (520,32);
+insert into t (id,a) values (520,33);
+insert into t (id,a) values (520,34);
+insert into t (id,a) values (520,35);
+insert into t (id,a) values (520,36);
+insert into t (id,a) values (520,37);
+insert into t (id,a) values (520,38);
+insert into t (id,a) values (520,39);
+insert into t (id,a) values (520,40);
+insert into t (id,a) values (520,41);
+insert into t (id,a) values (520,42);
+insert into t (id,a) values (520,43);
+insert into t (id,a) values (520,44);
+insert into t (id,a) values (520,45);
+insert into t (id,a) values (520,46);
+insert into t (id,a) values (520,47);
+insert into t (id,a) values (520,48);
+insert into t (id,a) values (520,49);
+insert into t (id,a) values (520,50);
+insert into t (id,a) values (520,51);
+insert into t (id,a) values (520,52);
+insert into t (id,a) values (520,53);
+insert into t (id,a) values (520,54);
+insert into t (id,a) values (520,55);
+insert into t (id,a) values (520,56);
+insert into t (id,a) values (520,57);
+insert into t (id,a) values (520,58);
+insert into t (id,a) values (520,59);
+insert into t (id,a) values (520,60);
+insert into t (id,a) values (520,61);
+insert into t (id,a) values (520,62);
+insert into t (id,a) values (520,63);
+insert into t (id,a) values (520,64);
+insert into t (id,a) values (520,65);
+insert into t (id,a) values (520,66);
+insert into t (id,a) values (520,67);
+insert into t (id,a) values (520,68);
+insert into t (id,a) values (520,69);
+insert into t (id,a) values (520,70);
+insert into t (id,a) values (520,71);
+insert into t (id,a) values (520,72);
+insert into t (id,a) values (520,73);
+insert into t (id,a) values (520,74);
+insert into t (id,a) values (520,75);
+insert into t (id,a) values (520,76);
+insert into t (id,a) values (520,77);
+insert into t (id,a) values (520,78);
+insert into t (id,a) values (520,79);
+insert into t (id,a) values (520,80);
+insert into t (id,a) values (520,81);
+insert into t (id,a) values (520,82);
+insert into t (id,a) values (520,83);
+insert into t (id,a) values (520,84);
+insert into t (id,a) values (520,85);
+insert into t (id,a) values (520,86);
+insert into t (id,a) values (520,87);
+insert into t (id,a) values (520,88);
+insert into t (id,a) values (520,89);
+insert into t (id,a) values (520,90);
+insert into t (id,a) values (520,91);
+insert into t (id,a) values (520,92);
+insert into t (id,a) values (520,93);
+insert into t (id,a) values (520,94);
+insert into t (id,a) values (520,95);
+insert into t (id,a) values (520,96);
+insert into t (id,a) values (520,97);
+insert into t (id,a) values (520,98);
+insert into t (id,a) values (520,99);
+insert into t (id,a) values (521,0);
+insert into t (id,a) values (521,1);
+insert into t (id,a) values (521,2);
+insert into t (id,a) values (521,3);
+insert into t (id,a) values (521,4);
+insert into t (id,a) values (521,5);
+insert into t (id,a) values (521,6);
+insert into t (id,a) values (521,7);
+insert into t (id,a) values (521,8);
+insert into t (id,a) values (521,9);
+insert into t (id,a) values (521,10);
+insert into t (id,a) values (521,11);
+insert into t (id,a) values (521,12);
+insert into t (id,a) values (521,13);
+insert into t (id,a) values (521,14);
+insert into t (id,a) values (521,15);
+insert into t (id,a) values (521,16);
+insert into t (id,a) values (521,17);
+insert into t (id,a) values (521,18);
+insert into t (id,a) values (521,19);
+insert into t (id,a) values (521,20);
+insert into t (id,a) values (521,21);
+insert into t (id,a) values (521,22);
+insert into t (id,a) values (521,23);
+insert into t (id,a) values (521,24);
+insert into t (id,a) values (521,25);
+insert into t (id,a) values (521,26);
+insert into t (id,a) values (521,27);
+insert into t (id,a) values (521,28);
+insert into t (id,a) values (521,29);
+insert into t (id,a) values (521,30);
+insert into t (id,a) values (521,31);
+insert into t (id,a) values (521,32);
+insert into t (id,a) values (521,33);
+insert into t (id,a) values (521,34);
+insert into t (id,a) values (521,35);
+insert into t (id,a) values (521,36);
+insert into t (id,a) values (521,37);
+insert into t (id,a) values (521,38);
+insert into t (id,a) values (521,39);
+insert into t (id,a) values (521,40);
+insert into t (id,a) values (521,41);
+insert into t (id,a) values (521,42);
+insert into t (id,a) values (521,43);
+insert into t (id,a) values (521,44);
+insert into t (id,a) values (521,45);
+insert into t (id,a) values (521,46);
+insert into t (id,a) values (521,47);
+insert into t (id,a) values (521,48);
+insert into t (id,a) values (521,49);
+insert into t (id,a) values (521,50);
+insert into t (id,a) values (521,51);
+insert into t (id,a) values (521,52);
+insert into t (id,a) values (521,53);
+insert into t (id,a) values (521,54);
+insert into t (id,a) values (521,55);
+insert into t (id,a) values (521,56);
+insert into t (id,a) values (521,57);
+insert into t (id,a) values (521,58);
+insert into t (id,a) values (521,59);
+insert into t (id,a) values (521,60);
+insert into t (id,a) values (521,61);
+insert into t (id,a) values (521,62);
+insert into t (id,a) values (521,63);
+insert into t (id,a) values (521,64);
+insert into t (id,a) values (521,65);
+insert into t (id,a) values (521,66);
+insert into t (id,a) values (521,67);
+insert into t (id,a) values (521,68);
+insert into t (id,a) values (521,69);
+insert into t (id,a) values (521,70);
+insert into t (id,a) values (521,71);
+insert into t (id,a) values (521,72);
+insert into t (id,a) values (521,73);
+insert into t (id,a) values (521,74);
+insert into t (id,a) values (521,75);
+insert into t (id,a) values (521,76);
+insert into t (id,a) values (521,77);
+insert into t (id,a) values (521,78);
+insert into t (id,a) values (521,79);
+insert into t (id,a) values (521,80);
+insert into t (id,a) values (521,81);
+insert into t (id,a) values (521,82);
+insert into t (id,a) values (521,83);
+insert into t (id,a) values (521,84);
+insert into t (id,a) values (521,85);
+insert into t (id,a) values (521,86);
+insert into t (id,a) values (521,87);
+insert into t (id,a) values (521,88);
+insert into t (id,a) values (521,89);
+insert into t (id,a) values (521,90);
+insert into t (id,a) values (521,91);
+insert into t (id,a) values (521,92);
+insert into t (id,a) values (521,93);
+insert into t (id,a) values (521,94);
+insert into t (id,a) values (521,95);
+insert into t (id,a) values (521,96);
+insert into t (id,a) values (521,97);
+insert into t (id,a) values (521,98);
+insert into t (id,a) values (521,99);
+insert into t (id,a) values (522,0);
+insert into t (id,a) values (522,1);
+insert into t (id,a) values (522,2);
+insert into t (id,a) values (522,3);
+insert into t (id,a) values (522,4);
+insert into t (id,a) values (522,5);
+insert into t (id,a) values (522,6);
+insert into t (id,a) values (522,7);
+insert into t (id,a) values (522,8);
+insert into t (id,a) values (522,9);
+insert into t (id,a) values (522,10);
+insert into t (id,a) values (522,11);
+insert into t (id,a) values (522,12);
+insert into t (id,a) values (522,13);
+insert into t (id,a) values (522,14);
+insert into t (id,a) values (522,15);
+insert into t (id,a) values (522,16);
+insert into t (id,a) values (522,17);
+insert into t (id,a) values (522,18);
+insert into t (id,a) values (522,19);
+insert into t (id,a) values (522,20);
+insert into t (id,a) values (522,21);
+insert into t (id,a) values (522,22);
+insert into t (id,a) values (522,23);
+insert into t (id,a) values (522,24);
+insert into t (id,a) values (522,25);
+insert into t (id,a) values (522,26);
+insert into t (id,a) values (522,27);
+insert into t (id,a) values (522,28);
+insert into t (id,a) values (522,29);
+insert into t (id,a) values (522,30);
+insert into t (id,a) values (522,31);
+insert into t (id,a) values (522,32);
+insert into t (id,a) values (522,33);
+insert into t (id,a) values (522,34);
+insert into t (id,a) values (522,35);
+insert into t (id,a) values (522,36);
+insert into t (id,a) values (522,37);
+insert into t (id,a) values (522,38);
+insert into t (id,a) values (522,39);
+insert into t (id,a) values (522,40);
+insert into t (id,a) values (522,41);
+insert into t (id,a) values (522,42);
+insert into t (id,a) values (522,43);
+insert into t (id,a) values (522,44);
+insert into t (id,a) values (522,45);
+insert into t (id,a) values (522,46);
+insert into t (id,a) values (522,47);
+insert into t (id,a) values (522,48);
+insert into t (id,a) values (522,49);
+insert into t (id,a) values (522,50);
+insert into t (id,a) values (522,51);
+insert into t (id,a) values (522,52);
+insert into t (id,a) values (522,53);
+insert into t (id,a) values (522,54);
+insert into t (id,a) values (522,55);
+insert into t (id,a) values (522,56);
+insert into t (id,a) values (522,57);
+insert into t (id,a) values (522,58);
+insert into t (id,a) values (522,59);
+insert into t (id,a) values (522,60);
+insert into t (id,a) values (522,61);
+insert into t (id,a) values (522,62);
+insert into t (id,a) values (522,63);
+insert into t (id,a) values (522,64);
+insert into t (id,a) values (522,65);
+insert into t (id,a) values (522,66);
+insert into t (id,a) values (522,67);
+insert into t (id,a) values (522,68);
+insert into t (id,a) values (522,69);
+insert into t (id,a) values (522,70);
+insert into t (id,a) values (522,71);
+insert into t (id,a) values (522,72);
+insert into t (id,a) values (522,73);
+insert into t (id,a) values (522,74);
+insert into t (id,a) values (522,75);
+insert into t (id,a) values (522,76);
+insert into t (id,a) values (522,77);
+insert into t (id,a) values (522,78);
+insert into t (id,a) values (522,79);
+insert into t (id,a) values (522,80);
+insert into t (id,a) values (522,81);
+insert into t (id,a) values (522,82);
+insert into t (id,a) values (522,83);
+insert into t (id,a) values (522,84);
+insert into t (id,a) values (522,85);
+insert into t (id,a) values (522,86);
+insert into t (id,a) values (522,87);
+insert into t (id,a) values (522,88);
+insert into t (id,a) values (522,89);
+insert into t (id,a) values (522,90);
+insert into t (id,a) values (522,91);
+insert into t (id,a) values (522,92);
+insert into t (id,a) values (522,93);
+insert into t (id,a) values (522,94);
+insert into t (id,a) values (522,95);
+insert into t (id,a) values (522,96);
+insert into t (id,a) values (522,97);
+insert into t (id,a) values (522,98);
+insert into t (id,a) values (522,99);
+insert into t (id,a) values (523,0);
+insert into t (id,a) values (523,1);
+insert into t (id,a) values (523,2);
+insert into t (id,a) values (523,3);
+insert into t (id,a) values (523,4);
+insert into t (id,a) values (523,5);
+insert into t (id,a) values (523,6);
+insert into t (id,a) values (523,7);
+insert into t (id,a) values (523,8);
+insert into t (id,a) values (523,9);
+insert into t (id,a) values (523,10);
+insert into t (id,a) values (523,11);
+insert into t (id,a) values (523,12);
+insert into t (id,a) values (523,13);
+insert into t (id,a) values (523,14);
+insert into t (id,a) values (523,15);
+insert into t (id,a) values (523,16);
+insert into t (id,a) values (523,17);
+insert into t (id,a) values (523,18);
+insert into t (id,a) values (523,19);
+insert into t (id,a) values (523,20);
+insert into t (id,a) values (523,21);
+insert into t (id,a) values (523,22);
+insert into t (id,a) values (523,23);
+insert into t (id,a) values (523,24);
+insert into t (id,a) values (523,25);
+insert into t (id,a) values (523,26);
+insert into t (id,a) values (523,27);
+insert into t (id,a) values (523,28);
+insert into t (id,a) values (523,29);
+insert into t (id,a) values (523,30);
+insert into t (id,a) values (523,31);
+insert into t (id,a) values (523,32);
+insert into t (id,a) values (523,33);
+insert into t (id,a) values (523,34);
+insert into t (id,a) values (523,35);
+insert into t (id,a) values (523,36);
+insert into t (id,a) values (523,37);
+insert into t (id,a) values (523,38);
+insert into t (id,a) values (523,39);
+insert into t (id,a) values (523,40);
+insert into t (id,a) values (523,41);
+insert into t (id,a) values (523,42);
+insert into t (id,a) values (523,43);
+insert into t (id,a) values (523,44);
+insert into t (id,a) values (523,45);
+insert into t (id,a) values (523,46);
+insert into t (id,a) values (523,47);
+insert into t (id,a) values (523,48);
+insert into t (id,a) values (523,49);
+insert into t (id,a) values (523,50);
+insert into t (id,a) values (523,51);
+insert into t (id,a) values (523,52);
+insert into t (id,a) values (523,53);
+insert into t (id,a) values (523,54);
+insert into t (id,a) values (523,55);
+insert into t (id,a) values (523,56);
+insert into t (id,a) values (523,57);
+insert into t (id,a) values (523,58);
+insert into t (id,a) values (523,59);
+insert into t (id,a) values (523,60);
+insert into t (id,a) values (523,61);
+insert into t (id,a) values (523,62);
+insert into t (id,a) values (523,63);
+insert into t (id,a) values (523,64);
+insert into t (id,a) values (523,65);
+insert into t (id,a) values (523,66);
+insert into t (id,a) values (523,67);
+insert into t (id,a) values (523,68);
+insert into t (id,a) values (523,69);
+insert into t (id,a) values (523,70);
+insert into t (id,a) values (523,71);
+insert into t (id,a) values (523,72);
+insert into t (id,a) values (523,73);
+insert into t (id,a) values (523,74);
+insert into t (id,a) values (523,75);
+insert into t (id,a) values (523,76);
+insert into t (id,a) values (523,77);
+insert into t (id,a) values (523,78);
+insert into t (id,a) values (523,79);
+insert into t (id,a) values (523,80);
+insert into t (id,a) values (523,81);
+insert into t (id,a) values (523,82);
+insert into t (id,a) values (523,83);
+insert into t (id,a) values (523,84);
+insert into t (id,a) values (523,85);
+insert into t (id,a) values (523,86);
+insert into t (id,a) values (523,87);
+insert into t (id,a) values (523,88);
+insert into t (id,a) values (523,89);
+insert into t (id,a) values (523,90);
+insert into t (id,a) values (523,91);
+insert into t (id,a) values (523,92);
+insert into t (id,a) values (523,93);
+insert into t (id,a) values (523,94);
+insert into t (id,a) values (523,95);
+insert into t (id,a) values (523,96);
+insert into t (id,a) values (523,97);
+insert into t (id,a) values (523,98);
+insert into t (id,a) values (523,99);
+insert into t (id,a) values (524,0);
+insert into t (id,a) values (524,1);
+insert into t (id,a) values (524,2);
+insert into t (id,a) values (524,3);
+insert into t (id,a) values (524,4);
+insert into t (id,a) values (524,5);
+insert into t (id,a) values (524,6);
+insert into t (id,a) values (524,7);
+insert into t (id,a) values (524,8);
+insert into t (id,a) values (524,9);
+insert into t (id,a) values (524,10);
+insert into t (id,a) values (524,11);
+insert into t (id,a) values (524,12);
+insert into t (id,a) values (524,13);
+insert into t (id,a) values (524,14);
+insert into t (id,a) values (524,15);
+insert into t (id,a) values (524,16);
+insert into t (id,a) values (524,17);
+insert into t (id,a) values (524,18);
+insert into t (id,a) values (524,19);
+insert into t (id,a) values (524,20);
+insert into t (id,a) values (524,21);
+insert into t (id,a) values (524,22);
+insert into t (id,a) values (524,23);
+insert into t (id,a) values (524,24);
+insert into t (id,a) values (524,25);
+insert into t (id,a) values (524,26);
+insert into t (id,a) values (524,27);
+insert into t (id,a) values (524,28);
+insert into t (id,a) values (524,29);
+insert into t (id,a) values (524,30);
+insert into t (id,a) values (524,31);
+insert into t (id,a) values (524,32);
+insert into t (id,a) values (524,33);
+insert into t (id,a) values (524,34);
+insert into t (id,a) values (524,35);
+insert into t (id,a) values (524,36);
+insert into t (id,a) values (524,37);
+insert into t (id,a) values (524,38);
+insert into t (id,a) values (524,39);
+insert into t (id,a) values (524,40);
+insert into t (id,a) values (524,41);
+insert into t (id,a) values (524,42);
+insert into t (id,a) values (524,43);
+insert into t (id,a) values (524,44);
+insert into t (id,a) values (524,45);
+insert into t (id,a) values (524,46);
+insert into t (id,a) values (524,47);
+insert into t (id,a) values (524,48);
+insert into t (id,a) values (524,49);
+insert into t (id,a) values (524,50);
+insert into t (id,a) values (524,51);
+insert into t (id,a) values (524,52);
+insert into t (id,a) values (524,53);
+insert into t (id,a) values (524,54);
+insert into t (id,a) values (524,55);
+insert into t (id,a) values (524,56);
+insert into t (id,a) values (524,57);
+insert into t (id,a) values (524,58);
+insert into t (id,a) values (524,59);
+insert into t (id,a) values (524,60);
+insert into t (id,a) values (524,61);
+insert into t (id,a) values (524,62);
+insert into t (id,a) values (524,63);
+insert into t (id,a) values (524,64);
+insert into t (id,a) values (524,65);
+insert into t (id,a) values (524,66);
+insert into t (id,a) values (524,67);
+insert into t (id,a) values (524,68);
+insert into t (id,a) values (524,69);
+insert into t (id,a) values (524,70);
+insert into t (id,a) values (524,71);
+insert into t (id,a) values (524,72);
+insert into t (id,a) values (524,73);
+insert into t (id,a) values (524,74);
+insert into t (id,a) values (524,75);
+insert into t (id,a) values (524,76);
+insert into t (id,a) values (524,77);
+insert into t (id,a) values (524,78);
+insert into t (id,a) values (524,79);
+insert into t (id,a) values (524,80);
+insert into t (id,a) values (524,81);
+insert into t (id,a) values (524,82);
+insert into t (id,a) values (524,83);
+insert into t (id,a) values (524,84);
+insert into t (id,a) values (524,85);
+insert into t (id,a) values (524,86);
+insert into t (id,a) values (524,87);
+insert into t (id,a) values (524,88);
+insert into t (id,a) values (524,89);
+insert into t (id,a) values (524,90);
+insert into t (id,a) values (524,91);
+insert into t (id,a) values (524,92);
+insert into t (id,a) values (524,93);
+insert into t (id,a) values (524,94);
+insert into t (id,a) values (524,95);
+insert into t (id,a) values (524,96);
+insert into t (id,a) values (524,97);
+insert into t (id,a) values (524,98);
+insert into t (id,a) values (524,99);
+insert into t (id,a) values (525,0);
+insert into t (id,a) values (525,1);
+insert into t (id,a) values (525,2);
+insert into t (id,a) values (525,3);
+insert into t (id,a) values (525,4);
+insert into t (id,a) values (525,5);
+insert into t (id,a) values (525,6);
+insert into t (id,a) values (525,7);
+insert into t (id,a) values (525,8);
+insert into t (id,a) values (525,9);
+insert into t (id,a) values (525,10);
+insert into t (id,a) values (525,11);
+insert into t (id,a) values (525,12);
+insert into t (id,a) values (525,13);
+insert into t (id,a) values (525,14);
+insert into t (id,a) values (525,15);
+insert into t (id,a) values (525,16);
+insert into t (id,a) values (525,17);
+insert into t (id,a) values (525,18);
+insert into t (id,a) values (525,19);
+insert into t (id,a) values (525,20);
+insert into t (id,a) values (525,21);
+insert into t (id,a) values (525,22);
+insert into t (id,a) values (525,23);
+insert into t (id,a) values (525,24);
+insert into t (id,a) values (525,25);
+insert into t (id,a) values (525,26);
+insert into t (id,a) values (525,27);
+insert into t (id,a) values (525,28);
+insert into t (id,a) values (525,29);
+insert into t (id,a) values (525,30);
+insert into t (id,a) values (525,31);
+insert into t (id,a) values (525,32);
+insert into t (id,a) values (525,33);
+insert into t (id,a) values (525,34);
+insert into t (id,a) values (525,35);
+insert into t (id,a) values (525,36);
+insert into t (id,a) values (525,37);
+insert into t (id,a) values (525,38);
+insert into t (id,a) values (525,39);
+insert into t (id,a) values (525,40);
+insert into t (id,a) values (525,41);
+insert into t (id,a) values (525,42);
+insert into t (id,a) values (525,43);
+insert into t (id,a) values (525,44);
+insert into t (id,a) values (525,45);
+insert into t (id,a) values (525,46);
+insert into t (id,a) values (525,47);
+insert into t (id,a) values (525,48);
+insert into t (id,a) values (525,49);
+insert into t (id,a) values (525,50);
+insert into t (id,a) values (525,51);
+insert into t (id,a) values (525,52);
+insert into t (id,a) values (525,53);
+insert into t (id,a) values (525,54);
+insert into t (id,a) values (525,55);
+insert into t (id,a) values (525,56);
+insert into t (id,a) values (525,57);
+insert into t (id,a) values (525,58);
+insert into t (id,a) values (525,59);
+insert into t (id,a) values (525,60);
+insert into t (id,a) values (525,61);
+insert into t (id,a) values (525,62);
+insert into t (id,a) values (525,63);
+insert into t (id,a) values (525,64);
+insert into t (id,a) values (525,65);
+insert into t (id,a) values (525,66);
+insert into t (id,a) values (525,67);
+insert into t (id,a) values (525,68);
+insert into t (id,a) values (525,69);
+insert into t (id,a) values (525,70);
+insert into t (id,a) values (525,71);
+insert into t (id,a) values (525,72);
+insert into t (id,a) values (525,73);
+insert into t (id,a) values (525,74);
+insert into t (id,a) values (525,75);
+insert into t (id,a) values (525,76);
+insert into t (id,a) values (525,77);
+insert into t (id,a) values (525,78);
+insert into t (id,a) values (525,79);
+insert into t (id,a) values (525,80);
+insert into t (id,a) values (525,81);
+insert into t (id,a) values (525,82);
+insert into t (id,a) values (525,83);
+insert into t (id,a) values (525,84);
+insert into t (id,a) values (525,85);
+insert into t (id,a) values (525,86);
+insert into t (id,a) values (525,87);
+insert into t (id,a) values (525,88);
+insert into t (id,a) values (525,89);
+insert into t (id,a) values (525,90);
+insert into t (id,a) values (525,91);
+insert into t (id,a) values (525,92);
+insert into t (id,a) values (525,93);
+insert into t (id,a) values (525,94);
+insert into t (id,a) values (525,95);
+insert into t (id,a) values (525,96);
+insert into t (id,a) values (525,97);
+insert into t (id,a) values (525,98);
+insert into t (id,a) values (525,99);
+insert into t (id,a) values (526,0);
+insert into t (id,a) values (526,1);
+insert into t (id,a) values (526,2);
+insert into t (id,a) values (526,3);
+insert into t (id,a) values (526,4);
+insert into t (id,a) values (526,5);
+insert into t (id,a) values (526,6);
+insert into t (id,a) values (526,7);
+insert into t (id,a) values (526,8);
+insert into t (id,a) values (526,9);
+insert into t (id,a) values (526,10);
+insert into t (id,a) values (526,11);
+insert into t (id,a) values (526,12);
+insert into t (id,a) values (526,13);
+insert into t (id,a) values (526,14);
+insert into t (id,a) values (526,15);
+insert into t (id,a) values (526,16);
+insert into t (id,a) values (526,17);
+insert into t (id,a) values (526,18);
+insert into t (id,a) values (526,19);
+insert into t (id,a) values (526,20);
+insert into t (id,a) values (526,21);
+insert into t (id,a) values (526,22);
+insert into t (id,a) values (526,23);
+insert into t (id,a) values (526,24);
+insert into t (id,a) values (526,25);
+insert into t (id,a) values (526,26);
+insert into t (id,a) values (526,27);
+insert into t (id,a) values (526,28);
+insert into t (id,a) values (526,29);
+insert into t (id,a) values (526,30);
+insert into t (id,a) values (526,31);
+insert into t (id,a) values (526,32);
+insert into t (id,a) values (526,33);
+insert into t (id,a) values (526,34);
+insert into t (id,a) values (526,35);
+insert into t (id,a) values (526,36);
+insert into t (id,a) values (526,37);
+insert into t (id,a) values (526,38);
+insert into t (id,a) values (526,39);
+insert into t (id,a) values (526,40);
+insert into t (id,a) values (526,41);
+insert into t (id,a) values (526,42);
+insert into t (id,a) values (526,43);
+insert into t (id,a) values (526,44);
+insert into t (id,a) values (526,45);
+insert into t (id,a) values (526,46);
+insert into t (id,a) values (526,47);
+insert into t (id,a) values (526,48);
+insert into t (id,a) values (526,49);
+insert into t (id,a) values (526,50);
+insert into t (id,a) values (526,51);
+insert into t (id,a) values (526,52);
+insert into t (id,a) values (526,53);
+insert into t (id,a) values (526,54);
+insert into t (id,a) values (526,55);
+insert into t (id,a) values (526,56);
+insert into t (id,a) values (526,57);
+insert into t (id,a) values (526,58);
+insert into t (id,a) values (526,59);
+insert into t (id,a) values (526,60);
+insert into t (id,a) values (526,61);
+insert into t (id,a) values (526,62);
+insert into t (id,a) values (526,63);
+insert into t (id,a) values (526,64);
+insert into t (id,a) values (526,65);
+insert into t (id,a) values (526,66);
+insert into t (id,a) values (526,67);
+insert into t (id,a) values (526,68);
+insert into t (id,a) values (526,69);
+insert into t (id,a) values (526,70);
+insert into t (id,a) values (526,71);
+insert into t (id,a) values (526,72);
+insert into t (id,a) values (526,73);
+insert into t (id,a) values (526,74);
+insert into t (id,a) values (526,75);
+insert into t (id,a) values (526,76);
+insert into t (id,a) values (526,77);
+insert into t (id,a) values (526,78);
+insert into t (id,a) values (526,79);
+insert into t (id,a) values (526,80);
+insert into t (id,a) values (526,81);
+insert into t (id,a) values (526,82);
+insert into t (id,a) values (526,83);
+insert into t (id,a) values (526,84);
+insert into t (id,a) values (526,85);
+insert into t (id,a) values (526,86);
+insert into t (id,a) values (526,87);
+insert into t (id,a) values (526,88);
+insert into t (id,a) values (526,89);
+insert into t (id,a) values (526,90);
+insert into t (id,a) values (526,91);
+insert into t (id,a) values (526,92);
+insert into t (id,a) values (526,93);
+insert into t (id,a) values (526,94);
+insert into t (id,a) values (526,95);
+insert into t (id,a) values (526,96);
+insert into t (id,a) values (526,97);
+insert into t (id,a) values (526,98);
+insert into t (id,a) values (526,99);
+insert into t (id,a) values (527,0);
+insert into t (id,a) values (527,1);
+insert into t (id,a) values (527,2);
+insert into t (id,a) values (527,3);
+insert into t (id,a) values (527,4);
+insert into t (id,a) values (527,5);
+insert into t (id,a) values (527,6);
+insert into t (id,a) values (527,7);
+insert into t (id,a) values (527,8);
+insert into t (id,a) values (527,9);
+insert into t (id,a) values (527,10);
+insert into t (id,a) values (527,11);
+insert into t (id,a) values (527,12);
+insert into t (id,a) values (527,13);
+insert into t (id,a) values (527,14);
+insert into t (id,a) values (527,15);
+insert into t (id,a) values (527,16);
+insert into t (id,a) values (527,17);
+insert into t (id,a) values (527,18);
+insert into t (id,a) values (527,19);
+insert into t (id,a) values (527,20);
+insert into t (id,a) values (527,21);
+insert into t (id,a) values (527,22);
+insert into t (id,a) values (527,23);
+insert into t (id,a) values (527,24);
+insert into t (id,a) values (527,25);
+insert into t (id,a) values (527,26);
+insert into t (id,a) values (527,27);
+insert into t (id,a) values (527,28);
+insert into t (id,a) values (527,29);
+insert into t (id,a) values (527,30);
+insert into t (id,a) values (527,31);
+insert into t (id,a) values (527,32);
+insert into t (id,a) values (527,33);
+insert into t (id,a) values (527,34);
+insert into t (id,a) values (527,35);
+insert into t (id,a) values (527,36);
+insert into t (id,a) values (527,37);
+insert into t (id,a) values (527,38);
+insert into t (id,a) values (527,39);
+insert into t (id,a) values (527,40);
+insert into t (id,a) values (527,41);
+insert into t (id,a) values (527,42);
+insert into t (id,a) values (527,43);
+insert into t (id,a) values (527,44);
+insert into t (id,a) values (527,45);
+insert into t (id,a) values (527,46);
+insert into t (id,a) values (527,47);
+insert into t (id,a) values (527,48);
+insert into t (id,a) values (527,49);
+insert into t (id,a) values (527,50);
+insert into t (id,a) values (527,51);
+insert into t (id,a) values (527,52);
+insert into t (id,a) values (527,53);
+insert into t (id,a) values (527,54);
+insert into t (id,a) values (527,55);
+insert into t (id,a) values (527,56);
+insert into t (id,a) values (527,57);
+insert into t (id,a) values (527,58);
+insert into t (id,a) values (527,59);
+insert into t (id,a) values (527,60);
+insert into t (id,a) values (527,61);
+insert into t (id,a) values (527,62);
+insert into t (id,a) values (527,63);
+insert into t (id,a) values (527,64);
+insert into t (id,a) values (527,65);
+insert into t (id,a) values (527,66);
+insert into t (id,a) values (527,67);
+insert into t (id,a) values (527,68);
+insert into t (id,a) values (527,69);
+insert into t (id,a) values (527,70);
+insert into t (id,a) values (527,71);
+insert into t (id,a) values (527,72);
+insert into t (id,a) values (527,73);
+insert into t (id,a) values (527,74);
+insert into t (id,a) values (527,75);
+insert into t (id,a) values (527,76);
+insert into t (id,a) values (527,77);
+insert into t (id,a) values (527,78);
+insert into t (id,a) values (527,79);
+insert into t (id,a) values (527,80);
+insert into t (id,a) values (527,81);
+insert into t (id,a) values (527,82);
+insert into t (id,a) values (527,83);
+insert into t (id,a) values (527,84);
+insert into t (id,a) values (527,85);
+insert into t (id,a) values (527,86);
+insert into t (id,a) values (527,87);
+insert into t (id,a) values (527,88);
+insert into t (id,a) values (527,89);
+insert into t (id,a) values (527,90);
+insert into t (id,a) values (527,91);
+insert into t (id,a) values (527,92);
+insert into t (id,a) values (527,93);
+insert into t (id,a) values (527,94);
+insert into t (id,a) values (527,95);
+insert into t (id,a) values (527,96);
+insert into t (id,a) values (527,97);
+insert into t (id,a) values (527,98);
+insert into t (id,a) values (527,99);
+insert into t (id,a) values (528,0);
+insert into t (id,a) values (528,1);
+insert into t (id,a) values (528,2);
+insert into t (id,a) values (528,3);
+insert into t (id,a) values (528,4);
+insert into t (id,a) values (528,5);
+insert into t (id,a) values (528,6);
+insert into t (id,a) values (528,7);
+insert into t (id,a) values (528,8);
+insert into t (id,a) values (528,9);
+insert into t (id,a) values (528,10);
+insert into t (id,a) values (528,11);
+insert into t (id,a) values (528,12);
+insert into t (id,a) values (528,13);
+insert into t (id,a) values (528,14);
+insert into t (id,a) values (528,15);
+insert into t (id,a) values (528,16);
+insert into t (id,a) values (528,17);
+insert into t (id,a) values (528,18);
+insert into t (id,a) values (528,19);
+insert into t (id,a) values (528,20);
+insert into t (id,a) values (528,21);
+insert into t (id,a) values (528,22);
+insert into t (id,a) values (528,23);
+insert into t (id,a) values (528,24);
+insert into t (id,a) values (528,25);
+insert into t (id,a) values (528,26);
+insert into t (id,a) values (528,27);
+insert into t (id,a) values (528,28);
+insert into t (id,a) values (528,29);
+insert into t (id,a) values (528,30);
+insert into t (id,a) values (528,31);
+insert into t (id,a) values (528,32);
+insert into t (id,a) values (528,33);
+insert into t (id,a) values (528,34);
+insert into t (id,a) values (528,35);
+insert into t (id,a) values (528,36);
+insert into t (id,a) values (528,37);
+insert into t (id,a) values (528,38);
+insert into t (id,a) values (528,39);
+insert into t (id,a) values (528,40);
+insert into t (id,a) values (528,41);
+insert into t (id,a) values (528,42);
+insert into t (id,a) values (528,43);
+insert into t (id,a) values (528,44);
+insert into t (id,a) values (528,45);
+insert into t (id,a) values (528,46);
+insert into t (id,a) values (528,47);
+insert into t (id,a) values (528,48);
+insert into t (id,a) values (528,49);
+insert into t (id,a) values (528,50);
+insert into t (id,a) values (528,51);
+insert into t (id,a) values (528,52);
+insert into t (id,a) values (528,53);
+insert into t (id,a) values (528,54);
+insert into t (id,a) values (528,55);
+insert into t (id,a) values (528,56);
+insert into t (id,a) values (528,57);
+insert into t (id,a) values (528,58);
+insert into t (id,a) values (528,59);
+insert into t (id,a) values (528,60);
+insert into t (id,a) values (528,61);
+insert into t (id,a) values (528,62);
+insert into t (id,a) values (528,63);
+insert into t (id,a) values (528,64);
+insert into t (id,a) values (528,65);
+insert into t (id,a) values (528,66);
+insert into t (id,a) values (528,67);
+insert into t (id,a) values (528,68);
+insert into t (id,a) values (528,69);
+insert into t (id,a) values (528,70);
+insert into t (id,a) values (528,71);
+insert into t (id,a) values (528,72);
+insert into t (id,a) values (528,73);
+insert into t (id,a) values (528,74);
+insert into t (id,a) values (528,75);
+insert into t (id,a) values (528,76);
+insert into t (id,a) values (528,77);
+insert into t (id,a) values (528,78);
+insert into t (id,a) values (528,79);
+insert into t (id,a) values (528,80);
+insert into t (id,a) values (528,81);
+insert into t (id,a) values (528,82);
+insert into t (id,a) values (528,83);
+insert into t (id,a) values (528,84);
+insert into t (id,a) values (528,85);
+insert into t (id,a) values (528,86);
+insert into t (id,a) values (528,87);
+insert into t (id,a) values (528,88);
+insert into t (id,a) values (528,89);
+insert into t (id,a) values (528,90);
+insert into t (id,a) values (528,91);
+insert into t (id,a) values (528,92);
+insert into t (id,a) values (528,93);
+insert into t (id,a) values (528,94);
+insert into t (id,a) values (528,95);
+insert into t (id,a) values (528,96);
+insert into t (id,a) values (528,97);
+insert into t (id,a) values (528,98);
+insert into t (id,a) values (528,99);
+insert into t (id,a) values (529,0);
+insert into t (id,a) values (529,1);
+insert into t (id,a) values (529,2);
+insert into t (id,a) values (529,3);
+insert into t (id,a) values (529,4);
+insert into t (id,a) values (529,5);
+insert into t (id,a) values (529,6);
+insert into t (id,a) values (529,7);
+insert into t (id,a) values (529,8);
+insert into t (id,a) values (529,9);
+insert into t (id,a) values (529,10);
+insert into t (id,a) values (529,11);
+insert into t (id,a) values (529,12);
+insert into t (id,a) values (529,13);
+insert into t (id,a) values (529,14);
+insert into t (id,a) values (529,15);
+insert into t (id,a) values (529,16);
+insert into t (id,a) values (529,17);
+insert into t (id,a) values (529,18);
+insert into t (id,a) values (529,19);
+insert into t (id,a) values (529,20);
+insert into t (id,a) values (529,21);
+insert into t (id,a) values (529,22);
+insert into t (id,a) values (529,23);
+insert into t (id,a) values (529,24);
+insert into t (id,a) values (529,25);
+insert into t (id,a) values (529,26);
+insert into t (id,a) values (529,27);
+insert into t (id,a) values (529,28);
+insert into t (id,a) values (529,29);
+insert into t (id,a) values (529,30);
+insert into t (id,a) values (529,31);
+insert into t (id,a) values (529,32);
+insert into t (id,a) values (529,33);
+insert into t (id,a) values (529,34);
+insert into t (id,a) values (529,35);
+insert into t (id,a) values (529,36);
+insert into t (id,a) values (529,37);
+insert into t (id,a) values (529,38);
+insert into t (id,a) values (529,39);
+insert into t (id,a) values (529,40);
+insert into t (id,a) values (529,41);
+insert into t (id,a) values (529,42);
+insert into t (id,a) values (529,43);
+insert into t (id,a) values (529,44);
+insert into t (id,a) values (529,45);
+insert into t (id,a) values (529,46);
+insert into t (id,a) values (529,47);
+insert into t (id,a) values (529,48);
+insert into t (id,a) values (529,49);
+insert into t (id,a) values (529,50);
+insert into t (id,a) values (529,51);
+insert into t (id,a) values (529,52);
+insert into t (id,a) values (529,53);
+insert into t (id,a) values (529,54);
+insert into t (id,a) values (529,55);
+insert into t (id,a) values (529,56);
+insert into t (id,a) values (529,57);
+insert into t (id,a) values (529,58);
+insert into t (id,a) values (529,59);
+insert into t (id,a) values (529,60);
+insert into t (id,a) values (529,61);
+insert into t (id,a) values (529,62);
+insert into t (id,a) values (529,63);
+insert into t (id,a) values (529,64);
+insert into t (id,a) values (529,65);
+insert into t (id,a) values (529,66);
+insert into t (id,a) values (529,67);
+insert into t (id,a) values (529,68);
+insert into t (id,a) values (529,69);
+insert into t (id,a) values (529,70);
+insert into t (id,a) values (529,71);
+insert into t (id,a) values (529,72);
+insert into t (id,a) values (529,73);
+insert into t (id,a) values (529,74);
+insert into t (id,a) values (529,75);
+insert into t (id,a) values (529,76);
+insert into t (id,a) values (529,77);
+insert into t (id,a) values (529,78);
+insert into t (id,a) values (529,79);
+insert into t (id,a) values (529,80);
+insert into t (id,a) values (529,81);
+insert into t (id,a) values (529,82);
+insert into t (id,a) values (529,83);
+insert into t (id,a) values (529,84);
+insert into t (id,a) values (529,85);
+insert into t (id,a) values (529,86);
+insert into t (id,a) values (529,87);
+insert into t (id,a) values (529,88);
+insert into t (id,a) values (529,89);
+insert into t (id,a) values (529,90);
+insert into t (id,a) values (529,91);
+insert into t (id,a) values (529,92);
+insert into t (id,a) values (529,93);
+insert into t (id,a) values (529,94);
+insert into t (id,a) values (529,95);
+insert into t (id,a) values (529,96);
+insert into t (id,a) values (529,97);
+insert into t (id,a) values (529,98);
+insert into t (id,a) values (529,99);
+insert into t (id,a) values (530,0);
+insert into t (id,a) values (530,1);
+insert into t (id,a) values (530,2);
+insert into t (id,a) values (530,3);
+insert into t (id,a) values (530,4);
+insert into t (id,a) values (530,5);
+insert into t (id,a) values (530,6);
+insert into t (id,a) values (530,7);
+insert into t (id,a) values (530,8);
+insert into t (id,a) values (530,9);
+insert into t (id,a) values (530,10);
+insert into t (id,a) values (530,11);
+insert into t (id,a) values (530,12);
+insert into t (id,a) values (530,13);
+insert into t (id,a) values (530,14);
+insert into t (id,a) values (530,15);
+insert into t (id,a) values (530,16);
+insert into t (id,a) values (530,17);
+insert into t (id,a) values (530,18);
+insert into t (id,a) values (530,19);
+insert into t (id,a) values (530,20);
+insert into t (id,a) values (530,21);
+insert into t (id,a) values (530,22);
+insert into t (id,a) values (530,23);
+insert into t (id,a) values (530,24);
+insert into t (id,a) values (530,25);
+insert into t (id,a) values (530,26);
+insert into t (id,a) values (530,27);
+insert into t (id,a) values (530,28);
+insert into t (id,a) values (530,29);
+insert into t (id,a) values (530,30);
+insert into t (id,a) values (530,31);
+insert into t (id,a) values (530,32);
+insert into t (id,a) values (530,33);
+insert into t (id,a) values (530,34);
+insert into t (id,a) values (530,35);
+insert into t (id,a) values (530,36);
+insert into t (id,a) values (530,37);
+insert into t (id,a) values (530,38);
+insert into t (id,a) values (530,39);
+insert into t (id,a) values (530,40);
+insert into t (id,a) values (530,41);
+insert into t (id,a) values (530,42);
+insert into t (id,a) values (530,43);
+insert into t (id,a) values (530,44);
+insert into t (id,a) values (530,45);
+insert into t (id,a) values (530,46);
+insert into t (id,a) values (530,47);
+insert into t (id,a) values (530,48);
+insert into t (id,a) values (530,49);
+insert into t (id,a) values (530,50);
+insert into t (id,a) values (530,51);
+insert into t (id,a) values (530,52);
+insert into t (id,a) values (530,53);
+insert into t (id,a) values (530,54);
+insert into t (id,a) values (530,55);
+insert into t (id,a) values (530,56);
+insert into t (id,a) values (530,57);
+insert into t (id,a) values (530,58);
+insert into t (id,a) values (530,59);
+insert into t (id,a) values (530,60);
+insert into t (id,a) values (530,61);
+insert into t (id,a) values (530,62);
+insert into t (id,a) values (530,63);
+insert into t (id,a) values (530,64);
+insert into t (id,a) values (530,65);
+insert into t (id,a) values (530,66);
+insert into t (id,a) values (530,67);
+insert into t (id,a) values (530,68);
+insert into t (id,a) values (530,69);
+insert into t (id,a) values (530,70);
+insert into t (id,a) values (530,71);
+insert into t (id,a) values (530,72);
+insert into t (id,a) values (530,73);
+insert into t (id,a) values (530,74);
+insert into t (id,a) values (530,75);
+insert into t (id,a) values (530,76);
+insert into t (id,a) values (530,77);
+insert into t (id,a) values (530,78);
+insert into t (id,a) values (530,79);
+insert into t (id,a) values (530,80);
+insert into t (id,a) values (530,81);
+insert into t (id,a) values (530,82);
+insert into t (id,a) values (530,83);
+insert into t (id,a) values (530,84);
+insert into t (id,a) values (530,85);
+insert into t (id,a) values (530,86);
+insert into t (id,a) values (530,87);
+insert into t (id,a) values (530,88);
+insert into t (id,a) values (530,89);
+insert into t (id,a) values (530,90);
+insert into t (id,a) values (530,91);
+insert into t (id,a) values (530,92);
+insert into t (id,a) values (530,93);
+insert into t (id,a) values (530,94);
+insert into t (id,a) values (530,95);
+insert into t (id,a) values (530,96);
+insert into t (id,a) values (530,97);
+insert into t (id,a) values (530,98);
+insert into t (id,a) values (530,99);
+insert into t (id,a) values (531,0);
+insert into t (id,a) values (531,1);
+insert into t (id,a) values (531,2);
+insert into t (id,a) values (531,3);
+insert into t (id,a) values (531,4);
+insert into t (id,a) values (531,5);
+insert into t (id,a) values (531,6);
+insert into t (id,a) values (531,7);
+insert into t (id,a) values (531,8);
+insert into t (id,a) values (531,9);
+insert into t (id,a) values (531,10);
+insert into t (id,a) values (531,11);
+insert into t (id,a) values (531,12);
+insert into t (id,a) values (531,13);
+insert into t (id,a) values (531,14);
+insert into t (id,a) values (531,15);
+insert into t (id,a) values (531,16);
+insert into t (id,a) values (531,17);
+insert into t (id,a) values (531,18);
+insert into t (id,a) values (531,19);
+insert into t (id,a) values (531,20);
+insert into t (id,a) values (531,21);
+insert into t (id,a) values (531,22);
+insert into t (id,a) values (531,23);
+insert into t (id,a) values (531,24);
+insert into t (id,a) values (531,25);
+insert into t (id,a) values (531,26);
+insert into t (id,a) values (531,27);
+insert into t (id,a) values (531,28);
+insert into t (id,a) values (531,29);
+insert into t (id,a) values (531,30);
+insert into t (id,a) values (531,31);
+insert into t (id,a) values (531,32);
+insert into t (id,a) values (531,33);
+insert into t (id,a) values (531,34);
+insert into t (id,a) values (531,35);
+insert into t (id,a) values (531,36);
+insert into t (id,a) values (531,37);
+insert into t (id,a) values (531,38);
+insert into t (id,a) values (531,39);
+insert into t (id,a) values (531,40);
+insert into t (id,a) values (531,41);
+insert into t (id,a) values (531,42);
+insert into t (id,a) values (531,43);
+insert into t (id,a) values (531,44);
+insert into t (id,a) values (531,45);
+insert into t (id,a) values (531,46);
+insert into t (id,a) values (531,47);
+insert into t (id,a) values (531,48);
+insert into t (id,a) values (531,49);
+insert into t (id,a) values (531,50);
+insert into t (id,a) values (531,51);
+insert into t (id,a) values (531,52);
+insert into t (id,a) values (531,53);
+insert into t (id,a) values (531,54);
+insert into t (id,a) values (531,55);
+insert into t (id,a) values (531,56);
+insert into t (id,a) values (531,57);
+insert into t (id,a) values (531,58);
+insert into t (id,a) values (531,59);
+insert into t (id,a) values (531,60);
+insert into t (id,a) values (531,61);
+insert into t (id,a) values (531,62);
+insert into t (id,a) values (531,63);
+insert into t (id,a) values (531,64);
+insert into t (id,a) values (531,65);
+insert into t (id,a) values (531,66);
+insert into t (id,a) values (531,67);
+insert into t (id,a) values (531,68);
+insert into t (id,a) values (531,69);
+insert into t (id,a) values (531,70);
+insert into t (id,a) values (531,71);
+insert into t (id,a) values (531,72);
+insert into t (id,a) values (531,73);
+insert into t (id,a) values (531,74);
+insert into t (id,a) values (531,75);
+insert into t (id,a) values (531,76);
+insert into t (id,a) values (531,77);
+insert into t (id,a) values (531,78);
+insert into t (id,a) values (531,79);
+insert into t (id,a) values (531,80);
+insert into t (id,a) values (531,81);
+insert into t (id,a) values (531,82);
+insert into t (id,a) values (531,83);
+insert into t (id,a) values (531,84);
+insert into t (id,a) values (531,85);
+insert into t (id,a) values (531,86);
+insert into t (id,a) values (531,87);
+insert into t (id,a) values (531,88);
+insert into t (id,a) values (531,89);
+insert into t (id,a) values (531,90);
+insert into t (id,a) values (531,91);
+insert into t (id,a) values (531,92);
+insert into t (id,a) values (531,93);
+insert into t (id,a) values (531,94);
+insert into t (id,a) values (531,95);
+insert into t (id,a) values (531,96);
+insert into t (id,a) values (531,97);
+insert into t (id,a) values (531,98);
+insert into t (id,a) values (531,99);
+insert into t (id,a) values (532,0);
+insert into t (id,a) values (532,1);
+insert into t (id,a) values (532,2);
+insert into t (id,a) values (532,3);
+insert into t (id,a) values (532,4);
+insert into t (id,a) values (532,5);
+insert into t (id,a) values (532,6);
+insert into t (id,a) values (532,7);
+insert into t (id,a) values (532,8);
+insert into t (id,a) values (532,9);
+insert into t (id,a) values (532,10);
+insert into t (id,a) values (532,11);
+insert into t (id,a) values (532,12);
+insert into t (id,a) values (532,13);
+insert into t (id,a) values (532,14);
+insert into t (id,a) values (532,15);
+insert into t (id,a) values (532,16);
+insert into t (id,a) values (532,17);
+insert into t (id,a) values (532,18);
+insert into t (id,a) values (532,19);
+insert into t (id,a) values (532,20);
+insert into t (id,a) values (532,21);
+insert into t (id,a) values (532,22);
+insert into t (id,a) values (532,23);
+insert into t (id,a) values (532,24);
+insert into t (id,a) values (532,25);
+insert into t (id,a) values (532,26);
+insert into t (id,a) values (532,27);
+insert into t (id,a) values (532,28);
+insert into t (id,a) values (532,29);
+insert into t (id,a) values (532,30);
+insert into t (id,a) values (532,31);
+insert into t (id,a) values (532,32);
+insert into t (id,a) values (532,33);
+insert into t (id,a) values (532,34);
+insert into t (id,a) values (532,35);
+insert into t (id,a) values (532,36);
+insert into t (id,a) values (532,37);
+insert into t (id,a) values (532,38);
+insert into t (id,a) values (532,39);
+insert into t (id,a) values (532,40);
+insert into t (id,a) values (532,41);
+insert into t (id,a) values (532,42);
+insert into t (id,a) values (532,43);
+insert into t (id,a) values (532,44);
+insert into t (id,a) values (532,45);
+insert into t (id,a) values (532,46);
+insert into t (id,a) values (532,47);
+insert into t (id,a) values (532,48);
+insert into t (id,a) values (532,49);
+insert into t (id,a) values (532,50);
+insert into t (id,a) values (532,51);
+insert into t (id,a) values (532,52);
+insert into t (id,a) values (532,53);
+insert into t (id,a) values (532,54);
+insert into t (id,a) values (532,55);
+insert into t (id,a) values (532,56);
+insert into t (id,a) values (532,57);
+insert into t (id,a) values (532,58);
+insert into t (id,a) values (532,59);
+insert into t (id,a) values (532,60);
+insert into t (id,a) values (532,61);
+insert into t (id,a) values (532,62);
+insert into t (id,a) values (532,63);
+insert into t (id,a) values (532,64);
+insert into t (id,a) values (532,65);
+insert into t (id,a) values (532,66);
+insert into t (id,a) values (532,67);
+insert into t (id,a) values (532,68);
+insert into t (id,a) values (532,69);
+insert into t (id,a) values (532,70);
+insert into t (id,a) values (532,71);
+insert into t (id,a) values (532,72);
+insert into t (id,a) values (532,73);
+insert into t (id,a) values (532,74);
+insert into t (id,a) values (532,75);
+insert into t (id,a) values (532,76);
+insert into t (id,a) values (532,77);
+insert into t (id,a) values (532,78);
+insert into t (id,a) values (532,79);
+insert into t (id,a) values (532,80);
+insert into t (id,a) values (532,81);
+insert into t (id,a) values (532,82);
+insert into t (id,a) values (532,83);
+insert into t (id,a) values (532,84);
+insert into t (id,a) values (532,85);
+insert into t (id,a) values (532,86);
+insert into t (id,a) values (532,87);
+insert into t (id,a) values (532,88);
+insert into t (id,a) values (532,89);
+insert into t (id,a) values (532,90);
+insert into t (id,a) values (532,91);
+insert into t (id,a) values (532,92);
+insert into t (id,a) values (532,93);
+insert into t (id,a) values (532,94);
+insert into t (id,a) values (532,95);
+insert into t (id,a) values (532,96);
+insert into t (id,a) values (532,97);
+insert into t (id,a) values (532,98);
+insert into t (id,a) values (532,99);
+insert into t (id,a) values (533,0);
+insert into t (id,a) values (533,1);
+insert into t (id,a) values (533,2);
+insert into t (id,a) values (533,3);
+insert into t (id,a) values (533,4);
+insert into t (id,a) values (533,5);
+insert into t (id,a) values (533,6);
+insert into t (id,a) values (533,7);
+insert into t (id,a) values (533,8);
+insert into t (id,a) values (533,9);
+insert into t (id,a) values (533,10);
+insert into t (id,a) values (533,11);
+insert into t (id,a) values (533,12);
+insert into t (id,a) values (533,13);
+insert into t (id,a) values (533,14);
+insert into t (id,a) values (533,15);
+insert into t (id,a) values (533,16);
+insert into t (id,a) values (533,17);
+insert into t (id,a) values (533,18);
+insert into t (id,a) values (533,19);
+insert into t (id,a) values (533,20);
+insert into t (id,a) values (533,21);
+insert into t (id,a) values (533,22);
+insert into t (id,a) values (533,23);
+insert into t (id,a) values (533,24);
+insert into t (id,a) values (533,25);
+insert into t (id,a) values (533,26);
+insert into t (id,a) values (533,27);
+insert into t (id,a) values (533,28);
+insert into t (id,a) values (533,29);
+insert into t (id,a) values (533,30);
+insert into t (id,a) values (533,31);
+insert into t (id,a) values (533,32);
+insert into t (id,a) values (533,33);
+insert into t (id,a) values (533,34);
+insert into t (id,a) values (533,35);
+insert into t (id,a) values (533,36);
+insert into t (id,a) values (533,37);
+insert into t (id,a) values (533,38);
+insert into t (id,a) values (533,39);
+insert into t (id,a) values (533,40);
+insert into t (id,a) values (533,41);
+insert into t (id,a) values (533,42);
+insert into t (id,a) values (533,43);
+insert into t (id,a) values (533,44);
+insert into t (id,a) values (533,45);
+insert into t (id,a) values (533,46);
+insert into t (id,a) values (533,47);
+insert into t (id,a) values (533,48);
+insert into t (id,a) values (533,49);
+insert into t (id,a) values (533,50);
+insert into t (id,a) values (533,51);
+insert into t (id,a) values (533,52);
+insert into t (id,a) values (533,53);
+insert into t (id,a) values (533,54);
+insert into t (id,a) values (533,55);
+insert into t (id,a) values (533,56);
+insert into t (id,a) values (533,57);
+insert into t (id,a) values (533,58);
+insert into t (id,a) values (533,59);
+insert into t (id,a) values (533,60);
+insert into t (id,a) values (533,61);
+insert into t (id,a) values (533,62);
+insert into t (id,a) values (533,63);
+insert into t (id,a) values (533,64);
+insert into t (id,a) values (533,65);
+insert into t (id,a) values (533,66);
+insert into t (id,a) values (533,67);
+insert into t (id,a) values (533,68);
+insert into t (id,a) values (533,69);
+insert into t (id,a) values (533,70);
+insert into t (id,a) values (533,71);
+insert into t (id,a) values (533,72);
+insert into t (id,a) values (533,73);
+insert into t (id,a) values (533,74);
+insert into t (id,a) values (533,75);
+insert into t (id,a) values (533,76);
+insert into t (id,a) values (533,77);
+insert into t (id,a) values (533,78);
+insert into t (id,a) values (533,79);
+insert into t (id,a) values (533,80);
+insert into t (id,a) values (533,81);
+insert into t (id,a) values (533,82);
+insert into t (id,a) values (533,83);
+insert into t (id,a) values (533,84);
+insert into t (id,a) values (533,85);
+insert into t (id,a) values (533,86);
+insert into t (id,a) values (533,87);
+insert into t (id,a) values (533,88);
+insert into t (id,a) values (533,89);
+insert into t (id,a) values (533,90);
+insert into t (id,a) values (533,91);
+insert into t (id,a) values (533,92);
+insert into t (id,a) values (533,93);
+insert into t (id,a) values (533,94);
+insert into t (id,a) values (533,95);
+insert into t (id,a) values (533,96);
+insert into t (id,a) values (533,97);
+insert into t (id,a) values (533,98);
+insert into t (id,a) values (533,99);
+insert into t (id,a) values (534,0);
+insert into t (id,a) values (534,1);
+insert into t (id,a) values (534,2);
+insert into t (id,a) values (534,3);
+insert into t (id,a) values (534,4);
+insert into t (id,a) values (534,5);
+insert into t (id,a) values (534,6);
+insert into t (id,a) values (534,7);
+insert into t (id,a) values (534,8);
+insert into t (id,a) values (534,9);
+insert into t (id,a) values (534,10);
+insert into t (id,a) values (534,11);
+insert into t (id,a) values (534,12);
+insert into t (id,a) values (534,13);
+insert into t (id,a) values (534,14);
+insert into t (id,a) values (534,15);
+insert into t (id,a) values (534,16);
+insert into t (id,a) values (534,17);
+insert into t (id,a) values (534,18);
+insert into t (id,a) values (534,19);
+insert into t (id,a) values (534,20);
+insert into t (id,a) values (534,21);
+insert into t (id,a) values (534,22);
+insert into t (id,a) values (534,23);
+insert into t (id,a) values (534,24);
+insert into t (id,a) values (534,25);
+insert into t (id,a) values (534,26);
+insert into t (id,a) values (534,27);
+insert into t (id,a) values (534,28);
+insert into t (id,a) values (534,29);
+insert into t (id,a) values (534,30);
+insert into t (id,a) values (534,31);
+insert into t (id,a) values (534,32);
+insert into t (id,a) values (534,33);
+insert into t (id,a) values (534,34);
+insert into t (id,a) values (534,35);
+insert into t (id,a) values (534,36);
+insert into t (id,a) values (534,37);
+insert into t (id,a) values (534,38);
+insert into t (id,a) values (534,39);
+insert into t (id,a) values (534,40);
+insert into t (id,a) values (534,41);
+insert into t (id,a) values (534,42);
+insert into t (id,a) values (534,43);
+insert into t (id,a) values (534,44);
+insert into t (id,a) values (534,45);
+insert into t (id,a) values (534,46);
+insert into t (id,a) values (534,47);
+insert into t (id,a) values (534,48);
+insert into t (id,a) values (534,49);
+insert into t (id,a) values (534,50);
+insert into t (id,a) values (534,51);
+insert into t (id,a) values (534,52);
+insert into t (id,a) values (534,53);
+insert into t (id,a) values (534,54);
+insert into t (id,a) values (534,55);
+insert into t (id,a) values (534,56);
+insert into t (id,a) values (534,57);
+insert into t (id,a) values (534,58);
+insert into t (id,a) values (534,59);
+insert into t (id,a) values (534,60);
+insert into t (id,a) values (534,61);
+insert into t (id,a) values (534,62);
+insert into t (id,a) values (534,63);
+insert into t (id,a) values (534,64);
+insert into t (id,a) values (534,65);
+insert into t (id,a) values (534,66);
+insert into t (id,a) values (534,67);
+insert into t (id,a) values (534,68);
+insert into t (id,a) values (534,69);
+insert into t (id,a) values (534,70);
+insert into t (id,a) values (534,71);
+insert into t (id,a) values (534,72);
+insert into t (id,a) values (534,73);
+insert into t (id,a) values (534,74);
+insert into t (id,a) values (534,75);
+insert into t (id,a) values (534,76);
+insert into t (id,a) values (534,77);
+insert into t (id,a) values (534,78);
+insert into t (id,a) values (534,79);
+insert into t (id,a) values (534,80);
+insert into t (id,a) values (534,81);
+insert into t (id,a) values (534,82);
+insert into t (id,a) values (534,83);
+insert into t (id,a) values (534,84);
+insert into t (id,a) values (534,85);
+insert into t (id,a) values (534,86);
+insert into t (id,a) values (534,87);
+insert into t (id,a) values (534,88);
+insert into t (id,a) values (534,89);
+insert into t (id,a) values (534,90);
+insert into t (id,a) values (534,91);
+insert into t (id,a) values (534,92);
+insert into t (id,a) values (534,93);
+insert into t (id,a) values (534,94);
+insert into t (id,a) values (534,95);
+insert into t (id,a) values (534,96);
+insert into t (id,a) values (534,97);
+insert into t (id,a) values (534,98);
+insert into t (id,a) values (534,99);
+insert into t (id,a) values (535,0);
+insert into t (id,a) values (535,1);
+insert into t (id,a) values (535,2);
+insert into t (id,a) values (535,3);
+insert into t (id,a) values (535,4);
+insert into t (id,a) values (535,5);
+insert into t (id,a) values (535,6);
+insert into t (id,a) values (535,7);
+insert into t (id,a) values (535,8);
+insert into t (id,a) values (535,9);
+insert into t (id,a) values (535,10);
+insert into t (id,a) values (535,11);
+insert into t (id,a) values (535,12);
+insert into t (id,a) values (535,13);
+insert into t (id,a) values (535,14);
+insert into t (id,a) values (535,15);
+insert into t (id,a) values (535,16);
+insert into t (id,a) values (535,17);
+insert into t (id,a) values (535,18);
+insert into t (id,a) values (535,19);
+insert into t (id,a) values (535,20);
+insert into t (id,a) values (535,21);
+insert into t (id,a) values (535,22);
+insert into t (id,a) values (535,23);
+insert into t (id,a) values (535,24);
+insert into t (id,a) values (535,25);
+insert into t (id,a) values (535,26);
+insert into t (id,a) values (535,27);
+insert into t (id,a) values (535,28);
+insert into t (id,a) values (535,29);
+insert into t (id,a) values (535,30);
+insert into t (id,a) values (535,31);
+insert into t (id,a) values (535,32);
+insert into t (id,a) values (535,33);
+insert into t (id,a) values (535,34);
+insert into t (id,a) values (535,35);
+insert into t (id,a) values (535,36);
+insert into t (id,a) values (535,37);
+insert into t (id,a) values (535,38);
+insert into t (id,a) values (535,39);
+insert into t (id,a) values (535,40);
+insert into t (id,a) values (535,41);
+insert into t (id,a) values (535,42);
+insert into t (id,a) values (535,43);
+insert into t (id,a) values (535,44);
+insert into t (id,a) values (535,45);
+insert into t (id,a) values (535,46);
+insert into t (id,a) values (535,47);
+insert into t (id,a) values (535,48);
+insert into t (id,a) values (535,49);
+insert into t (id,a) values (535,50);
+insert into t (id,a) values (535,51);
+insert into t (id,a) values (535,52);
+insert into t (id,a) values (535,53);
+insert into t (id,a) values (535,54);
+insert into t (id,a) values (535,55);
+insert into t (id,a) values (535,56);
+insert into t (id,a) values (535,57);
+insert into t (id,a) values (535,58);
+insert into t (id,a) values (535,59);
+insert into t (id,a) values (535,60);
+insert into t (id,a) values (535,61);
+insert into t (id,a) values (535,62);
+insert into t (id,a) values (535,63);
+insert into t (id,a) values (535,64);
+insert into t (id,a) values (535,65);
+insert into t (id,a) values (535,66);
+insert into t (id,a) values (535,67);
+insert into t (id,a) values (535,68);
+insert into t (id,a) values (535,69);
+insert into t (id,a) values (535,70);
+insert into t (id,a) values (535,71);
+insert into t (id,a) values (535,72);
+insert into t (id,a) values (535,73);
+insert into t (id,a) values (535,74);
+insert into t (id,a) values (535,75);
+insert into t (id,a) values (535,76);
+insert into t (id,a) values (535,77);
+insert into t (id,a) values (535,78);
+insert into t (id,a) values (535,79);
+insert into t (id,a) values (535,80);
+insert into t (id,a) values (535,81);
+insert into t (id,a) values (535,82);
+insert into t (id,a) values (535,83);
+insert into t (id,a) values (535,84);
+insert into t (id,a) values (535,85);
+insert into t (id,a) values (535,86);
+insert into t (id,a) values (535,87);
+insert into t (id,a) values (535,88);
+insert into t (id,a) values (535,89);
+insert into t (id,a) values (535,90);
+insert into t (id,a) values (535,91);
+insert into t (id,a) values (535,92);
+insert into t (id,a) values (535,93);
+insert into t (id,a) values (535,94);
+insert into t (id,a) values (535,95);
+insert into t (id,a) values (535,96);
+insert into t (id,a) values (535,97);
+insert into t (id,a) values (535,98);
+insert into t (id,a) values (535,99);
+insert into t (id,a) values (536,0);
+insert into t (id,a) values (536,1);
+insert into t (id,a) values (536,2);
+insert into t (id,a) values (536,3);
+insert into t (id,a) values (536,4);
+insert into t (id,a) values (536,5);
+insert into t (id,a) values (536,6);
+insert into t (id,a) values (536,7);
+insert into t (id,a) values (536,8);
+insert into t (id,a) values (536,9);
+insert into t (id,a) values (536,10);
+insert into t (id,a) values (536,11);
+insert into t (id,a) values (536,12);
+insert into t (id,a) values (536,13);
+insert into t (id,a) values (536,14);
+insert into t (id,a) values (536,15);
+insert into t (id,a) values (536,16);
+insert into t (id,a) values (536,17);
+insert into t (id,a) values (536,18);
+insert into t (id,a) values (536,19);
+insert into t (id,a) values (536,20);
+insert into t (id,a) values (536,21);
+insert into t (id,a) values (536,22);
+insert into t (id,a) values (536,23);
+insert into t (id,a) values (536,24);
+insert into t (id,a) values (536,25);
+insert into t (id,a) values (536,26);
+insert into t (id,a) values (536,27);
+insert into t (id,a) values (536,28);
+insert into t (id,a) values (536,29);
+insert into t (id,a) values (536,30);
+insert into t (id,a) values (536,31);
+insert into t (id,a) values (536,32);
+insert into t (id,a) values (536,33);
+insert into t (id,a) values (536,34);
+insert into t (id,a) values (536,35);
+insert into t (id,a) values (536,36);
+insert into t (id,a) values (536,37);
+insert into t (id,a) values (536,38);
+insert into t (id,a) values (536,39);
+insert into t (id,a) values (536,40);
+insert into t (id,a) values (536,41);
+insert into t (id,a) values (536,42);
+insert into t (id,a) values (536,43);
+insert into t (id,a) values (536,44);
+insert into t (id,a) values (536,45);
+insert into t (id,a) values (536,46);
+insert into t (id,a) values (536,47);
+insert into t (id,a) values (536,48);
+insert into t (id,a) values (536,49);
+insert into t (id,a) values (536,50);
+insert into t (id,a) values (536,51);
+insert into t (id,a) values (536,52);
+insert into t (id,a) values (536,53);
+insert into t (id,a) values (536,54);
+insert into t (id,a) values (536,55);
+insert into t (id,a) values (536,56);
+insert into t (id,a) values (536,57);
+insert into t (id,a) values (536,58);
+insert into t (id,a) values (536,59);
+insert into t (id,a) values (536,60);
+insert into t (id,a) values (536,61);
+insert into t (id,a) values (536,62);
+insert into t (id,a) values (536,63);
+insert into t (id,a) values (536,64);
+insert into t (id,a) values (536,65);
+insert into t (id,a) values (536,66);
+insert into t (id,a) values (536,67);
+insert into t (id,a) values (536,68);
+insert into t (id,a) values (536,69);
+insert into t (id,a) values (536,70);
+insert into t (id,a) values (536,71);
+insert into t (id,a) values (536,72);
+insert into t (id,a) values (536,73);
+insert into t (id,a) values (536,74);
+insert into t (id,a) values (536,75);
+insert into t (id,a) values (536,76);
+insert into t (id,a) values (536,77);
+insert into t (id,a) values (536,78);
+insert into t (id,a) values (536,79);
+insert into t (id,a) values (536,80);
+insert into t (id,a) values (536,81);
+insert into t (id,a) values (536,82);
+insert into t (id,a) values (536,83);
+insert into t (id,a) values (536,84);
+insert into t (id,a) values (536,85);
+insert into t (id,a) values (536,86);
+insert into t (id,a) values (536,87);
+insert into t (id,a) values (536,88);
+insert into t (id,a) values (536,89);
+insert into t (id,a) values (536,90);
+insert into t (id,a) values (536,91);
+insert into t (id,a) values (536,92);
+insert into t (id,a) values (536,93);
+insert into t (id,a) values (536,94);
+insert into t (id,a) values (536,95);
+insert into t (id,a) values (536,96);
+insert into t (id,a) values (536,97);
+insert into t (id,a) values (536,98);
+insert into t (id,a) values (536,99);
+insert into t (id,a) values (537,0);
+insert into t (id,a) values (537,1);
+insert into t (id,a) values (537,2);
+insert into t (id,a) values (537,3);
+insert into t (id,a) values (537,4);
+insert into t (id,a) values (537,5);
+insert into t (id,a) values (537,6);
+insert into t (id,a) values (537,7);
+insert into t (id,a) values (537,8);
+insert into t (id,a) values (537,9);
+insert into t (id,a) values (537,10);
+insert into t (id,a) values (537,11);
+insert into t (id,a) values (537,12);
+insert into t (id,a) values (537,13);
+insert into t (id,a) values (537,14);
+insert into t (id,a) values (537,15);
+insert into t (id,a) values (537,16);
+insert into t (id,a) values (537,17);
+insert into t (id,a) values (537,18);
+insert into t (id,a) values (537,19);
+insert into t (id,a) values (537,20);
+insert into t (id,a) values (537,21);
+insert into t (id,a) values (537,22);
+insert into t (id,a) values (537,23);
+insert into t (id,a) values (537,24);
+insert into t (id,a) values (537,25);
+insert into t (id,a) values (537,26);
+insert into t (id,a) values (537,27);
+insert into t (id,a) values (537,28);
+insert into t (id,a) values (537,29);
+insert into t (id,a) values (537,30);
+insert into t (id,a) values (537,31);
+insert into t (id,a) values (537,32);
+insert into t (id,a) values (537,33);
+insert into t (id,a) values (537,34);
+insert into t (id,a) values (537,35);
+insert into t (id,a) values (537,36);
+insert into t (id,a) values (537,37);
+insert into t (id,a) values (537,38);
+insert into t (id,a) values (537,39);
+insert into t (id,a) values (537,40);
+insert into t (id,a) values (537,41);
+insert into t (id,a) values (537,42);
+insert into t (id,a) values (537,43);
+insert into t (id,a) values (537,44);
+insert into t (id,a) values (537,45);
+insert into t (id,a) values (537,46);
+insert into t (id,a) values (537,47);
+insert into t (id,a) values (537,48);
+insert into t (id,a) values (537,49);
+insert into t (id,a) values (537,50);
+insert into t (id,a) values (537,51);
+insert into t (id,a) values (537,52);
+insert into t (id,a) values (537,53);
+insert into t (id,a) values (537,54);
+insert into t (id,a) values (537,55);
+insert into t (id,a) values (537,56);
+insert into t (id,a) values (537,57);
+insert into t (id,a) values (537,58);
+insert into t (id,a) values (537,59);
+insert into t (id,a) values (537,60);
+insert into t (id,a) values (537,61);
+insert into t (id,a) values (537,62);
+insert into t (id,a) values (537,63);
+insert into t (id,a) values (537,64);
+insert into t (id,a) values (537,65);
+insert into t (id,a) values (537,66);
+insert into t (id,a) values (537,67);
+insert into t (id,a) values (537,68);
+insert into t (id,a) values (537,69);
+insert into t (id,a) values (537,70);
+insert into t (id,a) values (537,71);
+insert into t (id,a) values (537,72);
+insert into t (id,a) values (537,73);
+insert into t (id,a) values (537,74);
+insert into t (id,a) values (537,75);
+insert into t (id,a) values (537,76);
+insert into t (id,a) values (537,77);
+insert into t (id,a) values (537,78);
+insert into t (id,a) values (537,79);
+insert into t (id,a) values (537,80);
+insert into t (id,a) values (537,81);
+insert into t (id,a) values (537,82);
+insert into t (id,a) values (537,83);
+insert into t (id,a) values (537,84);
+insert into t (id,a) values (537,85);
+insert into t (id,a) values (537,86);
+insert into t (id,a) values (537,87);
+insert into t (id,a) values (537,88);
+insert into t (id,a) values (537,89);
+insert into t (id,a) values (537,90);
+insert into t (id,a) values (537,91);
+insert into t (id,a) values (537,92);
+insert into t (id,a) values (537,93);
+insert into t (id,a) values (537,94);
+insert into t (id,a) values (537,95);
+insert into t (id,a) values (537,96);
+insert into t (id,a) values (537,97);
+insert into t (id,a) values (537,98);
+insert into t (id,a) values (537,99);
+insert into t (id,a) values (538,0);
+insert into t (id,a) values (538,1);
+insert into t (id,a) values (538,2);
+insert into t (id,a) values (538,3);
+insert into t (id,a) values (538,4);
+insert into t (id,a) values (538,5);
+insert into t (id,a) values (538,6);
+insert into t (id,a) values (538,7);
+insert into t (id,a) values (538,8);
+insert into t (id,a) values (538,9);
+insert into t (id,a) values (538,10);
+insert into t (id,a) values (538,11);
+insert into t (id,a) values (538,12);
+insert into t (id,a) values (538,13);
+insert into t (id,a) values (538,14);
+insert into t (id,a) values (538,15);
+insert into t (id,a) values (538,16);
+insert into t (id,a) values (538,17);
+insert into t (id,a) values (538,18);
+insert into t (id,a) values (538,19);
+insert into t (id,a) values (538,20);
+insert into t (id,a) values (538,21);
+insert into t (id,a) values (538,22);
+insert into t (id,a) values (538,23);
+insert into t (id,a) values (538,24);
+insert into t (id,a) values (538,25);
+insert into t (id,a) values (538,26);
+insert into t (id,a) values (538,27);
+insert into t (id,a) values (538,28);
+insert into t (id,a) values (538,29);
+insert into t (id,a) values (538,30);
+insert into t (id,a) values (538,31);
+insert into t (id,a) values (538,32);
+insert into t (id,a) values (538,33);
+insert into t (id,a) values (538,34);
+insert into t (id,a) values (538,35);
+insert into t (id,a) values (538,36);
+insert into t (id,a) values (538,37);
+insert into t (id,a) values (538,38);
+insert into t (id,a) values (538,39);
+insert into t (id,a) values (538,40);
+insert into t (id,a) values (538,41);
+insert into t (id,a) values (538,42);
+insert into t (id,a) values (538,43);
+insert into t (id,a) values (538,44);
+insert into t (id,a) values (538,45);
+insert into t (id,a) values (538,46);
+insert into t (id,a) values (538,47);
+insert into t (id,a) values (538,48);
+insert into t (id,a) values (538,49);
+insert into t (id,a) values (538,50);
+insert into t (id,a) values (538,51);
+insert into t (id,a) values (538,52);
+insert into t (id,a) values (538,53);
+insert into t (id,a) values (538,54);
+insert into t (id,a) values (538,55);
+insert into t (id,a) values (538,56);
+insert into t (id,a) values (538,57);
+insert into t (id,a) values (538,58);
+insert into t (id,a) values (538,59);
+insert into t (id,a) values (538,60);
+insert into t (id,a) values (538,61);
+insert into t (id,a) values (538,62);
+insert into t (id,a) values (538,63);
+insert into t (id,a) values (538,64);
+insert into t (id,a) values (538,65);
+insert into t (id,a) values (538,66);
+insert into t (id,a) values (538,67);
+insert into t (id,a) values (538,68);
+insert into t (id,a) values (538,69);
+insert into t (id,a) values (538,70);
+insert into t (id,a) values (538,71);
+insert into t (id,a) values (538,72);
+insert into t (id,a) values (538,73);
+insert into t (id,a) values (538,74);
+insert into t (id,a) values (538,75);
+insert into t (id,a) values (538,76);
+insert into t (id,a) values (538,77);
+insert into t (id,a) values (538,78);
+insert into t (id,a) values (538,79);
+insert into t (id,a) values (538,80);
+insert into t (id,a) values (538,81);
+insert into t (id,a) values (538,82);
+insert into t (id,a) values (538,83);
+insert into t (id,a) values (538,84);
+insert into t (id,a) values (538,85);
+insert into t (id,a) values (538,86);
+insert into t (id,a) values (538,87);
+insert into t (id,a) values (538,88);
+insert into t (id,a) values (538,89);
+insert into t (id,a) values (538,90);
+insert into t (id,a) values (538,91);
+insert into t (id,a) values (538,92);
+insert into t (id,a) values (538,93);
+insert into t (id,a) values (538,94);
+insert into t (id,a) values (538,95);
+insert into t (id,a) values (538,96);
+insert into t (id,a) values (538,97);
+insert into t (id,a) values (538,98);
+insert into t (id,a) values (538,99);
+insert into t (id,a) values (539,0);
+insert into t (id,a) values (539,1);
+insert into t (id,a) values (539,2);
+insert into t (id,a) values (539,3);
+insert into t (id,a) values (539,4);
+insert into t (id,a) values (539,5);
+insert into t (id,a) values (539,6);
+insert into t (id,a) values (539,7);
+insert into t (id,a) values (539,8);
+insert into t (id,a) values (539,9);
+insert into t (id,a) values (539,10);
+insert into t (id,a) values (539,11);
+insert into t (id,a) values (539,12);
+insert into t (id,a) values (539,13);
+insert into t (id,a) values (539,14);
+insert into t (id,a) values (539,15);
+insert into t (id,a) values (539,16);
+insert into t (id,a) values (539,17);
+insert into t (id,a) values (539,18);
+insert into t (id,a) values (539,19);
+insert into t (id,a) values (539,20);
+insert into t (id,a) values (539,21);
+insert into t (id,a) values (539,22);
+insert into t (id,a) values (539,23);
+insert into t (id,a) values (539,24);
+insert into t (id,a) values (539,25);
+insert into t (id,a) values (539,26);
+insert into t (id,a) values (539,27);
+insert into t (id,a) values (539,28);
+insert into t (id,a) values (539,29);
+insert into t (id,a) values (539,30);
+insert into t (id,a) values (539,31);
+insert into t (id,a) values (539,32);
+insert into t (id,a) values (539,33);
+insert into t (id,a) values (539,34);
+insert into t (id,a) values (539,35);
+insert into t (id,a) values (539,36);
+insert into t (id,a) values (539,37);
+insert into t (id,a) values (539,38);
+insert into t (id,a) values (539,39);
+insert into t (id,a) values (539,40);
+insert into t (id,a) values (539,41);
+insert into t (id,a) values (539,42);
+insert into t (id,a) values (539,43);
+insert into t (id,a) values (539,44);
+insert into t (id,a) values (539,45);
+insert into t (id,a) values (539,46);
+insert into t (id,a) values (539,47);
+insert into t (id,a) values (539,48);
+insert into t (id,a) values (539,49);
+insert into t (id,a) values (539,50);
+insert into t (id,a) values (539,51);
+insert into t (id,a) values (539,52);
+insert into t (id,a) values (539,53);
+insert into t (id,a) values (539,54);
+insert into t (id,a) values (539,55);
+insert into t (id,a) values (539,56);
+insert into t (id,a) values (539,57);
+insert into t (id,a) values (539,58);
+insert into t (id,a) values (539,59);
+insert into t (id,a) values (539,60);
+insert into t (id,a) values (539,61);
+insert into t (id,a) values (539,62);
+insert into t (id,a) values (539,63);
+insert into t (id,a) values (539,64);
+insert into t (id,a) values (539,65);
+insert into t (id,a) values (539,66);
+insert into t (id,a) values (539,67);
+insert into t (id,a) values (539,68);
+insert into t (id,a) values (539,69);
+insert into t (id,a) values (539,70);
+insert into t (id,a) values (539,71);
+insert into t (id,a) values (539,72);
+insert into t (id,a) values (539,73);
+insert into t (id,a) values (539,74);
+insert into t (id,a) values (539,75);
+insert into t (id,a) values (539,76);
+insert into t (id,a) values (539,77);
+insert into t (id,a) values (539,78);
+insert into t (id,a) values (539,79);
+insert into t (id,a) values (539,80);
+insert into t (id,a) values (539,81);
+insert into t (id,a) values (539,82);
+insert into t (id,a) values (539,83);
+insert into t (id,a) values (539,84);
+insert into t (id,a) values (539,85);
+insert into t (id,a) values (539,86);
+insert into t (id,a) values (539,87);
+insert into t (id,a) values (539,88);
+insert into t (id,a) values (539,89);
+insert into t (id,a) values (539,90);
+insert into t (id,a) values (539,91);
+insert into t (id,a) values (539,92);
+insert into t (id,a) values (539,93);
+insert into t (id,a) values (539,94);
+insert into t (id,a) values (539,95);
+insert into t (id,a) values (539,96);
+insert into t (id,a) values (539,97);
+insert into t (id,a) values (539,98);
+insert into t (id,a) values (539,99);
+insert into t (id,a) values (540,0);
+insert into t (id,a) values (540,1);
+insert into t (id,a) values (540,2);
+insert into t (id,a) values (540,3);
+insert into t (id,a) values (540,4);
+insert into t (id,a) values (540,5);
+insert into t (id,a) values (540,6);
+insert into t (id,a) values (540,7);
+insert into t (id,a) values (540,8);
+insert into t (id,a) values (540,9);
+insert into t (id,a) values (540,10);
+insert into t (id,a) values (540,11);
+insert into t (id,a) values (540,12);
+insert into t (id,a) values (540,13);
+insert into t (id,a) values (540,14);
+insert into t (id,a) values (540,15);
+insert into t (id,a) values (540,16);
+insert into t (id,a) values (540,17);
+insert into t (id,a) values (540,18);
+insert into t (id,a) values (540,19);
+insert into t (id,a) values (540,20);
+insert into t (id,a) values (540,21);
+insert into t (id,a) values (540,22);
+insert into t (id,a) values (540,23);
+insert into t (id,a) values (540,24);
+insert into t (id,a) values (540,25);
+insert into t (id,a) values (540,26);
+insert into t (id,a) values (540,27);
+insert into t (id,a) values (540,28);
+insert into t (id,a) values (540,29);
+insert into t (id,a) values (540,30);
+insert into t (id,a) values (540,31);
+insert into t (id,a) values (540,32);
+insert into t (id,a) values (540,33);
+insert into t (id,a) values (540,34);
+insert into t (id,a) values (540,35);
+insert into t (id,a) values (540,36);
+insert into t (id,a) values (540,37);
+insert into t (id,a) values (540,38);
+insert into t (id,a) values (540,39);
+insert into t (id,a) values (540,40);
+insert into t (id,a) values (540,41);
+insert into t (id,a) values (540,42);
+insert into t (id,a) values (540,43);
+insert into t (id,a) values (540,44);
+insert into t (id,a) values (540,45);
+insert into t (id,a) values (540,46);
+insert into t (id,a) values (540,47);
+insert into t (id,a) values (540,48);
+insert into t (id,a) values (540,49);
+insert into t (id,a) values (540,50);
+insert into t (id,a) values (540,51);
+insert into t (id,a) values (540,52);
+insert into t (id,a) values (540,53);
+insert into t (id,a) values (540,54);
+insert into t (id,a) values (540,55);
+insert into t (id,a) values (540,56);
+insert into t (id,a) values (540,57);
+insert into t (id,a) values (540,58);
+insert into t (id,a) values (540,59);
+insert into t (id,a) values (540,60);
+insert into t (id,a) values (540,61);
+insert into t (id,a) values (540,62);
+insert into t (id,a) values (540,63);
+insert into t (id,a) values (540,64);
+insert into t (id,a) values (540,65);
+insert into t (id,a) values (540,66);
+insert into t (id,a) values (540,67);
+insert into t (id,a) values (540,68);
+insert into t (id,a) values (540,69);
+insert into t (id,a) values (540,70);
+insert into t (id,a) values (540,71);
+insert into t (id,a) values (540,72);
+insert into t (id,a) values (540,73);
+insert into t (id,a) values (540,74);
+insert into t (id,a) values (540,75);
+insert into t (id,a) values (540,76);
+insert into t (id,a) values (540,77);
+insert into t (id,a) values (540,78);
+insert into t (id,a) values (540,79);
+insert into t (id,a) values (540,80);
+insert into t (id,a) values (540,81);
+insert into t (id,a) values (540,82);
+insert into t (id,a) values (540,83);
+insert into t (id,a) values (540,84);
+insert into t (id,a) values (540,85);
+insert into t (id,a) values (540,86);
+insert into t (id,a) values (540,87);
+insert into t (id,a) values (540,88);
+insert into t (id,a) values (540,89);
+insert into t (id,a) values (540,90);
+insert into t (id,a) values (540,91);
+insert into t (id,a) values (540,92);
+insert into t (id,a) values (540,93);
+insert into t (id,a) values (540,94);
+insert into t (id,a) values (540,95);
+insert into t (id,a) values (540,96);
+insert into t (id,a) values (540,97);
+insert into t (id,a) values (540,98);
+insert into t (id,a) values (540,99);
+insert into t (id,a) values (541,0);
+insert into t (id,a) values (541,1);
+insert into t (id,a) values (541,2);
+insert into t (id,a) values (541,3);
+insert into t (id,a) values (541,4);
+insert into t (id,a) values (541,5);
+insert into t (id,a) values (541,6);
+insert into t (id,a) values (541,7);
+insert into t (id,a) values (541,8);
+insert into t (id,a) values (541,9);
+insert into t (id,a) values (541,10);
+insert into t (id,a) values (541,11);
+insert into t (id,a) values (541,12);
+insert into t (id,a) values (541,13);
+insert into t (id,a) values (541,14);
+insert into t (id,a) values (541,15);
+insert into t (id,a) values (541,16);
+insert into t (id,a) values (541,17);
+insert into t (id,a) values (541,18);
+insert into t (id,a) values (541,19);
+insert into t (id,a) values (541,20);
+insert into t (id,a) values (541,21);
+insert into t (id,a) values (541,22);
+insert into t (id,a) values (541,23);
+insert into t (id,a) values (541,24);
+insert into t (id,a) values (541,25);
+insert into t (id,a) values (541,26);
+insert into t (id,a) values (541,27);
+insert into t (id,a) values (541,28);
+insert into t (id,a) values (541,29);
+insert into t (id,a) values (541,30);
+insert into t (id,a) values (541,31);
+insert into t (id,a) values (541,32);
+insert into t (id,a) values (541,33);
+insert into t (id,a) values (541,34);
+insert into t (id,a) values (541,35);
+insert into t (id,a) values (541,36);
+insert into t (id,a) values (541,37);
+insert into t (id,a) values (541,38);
+insert into t (id,a) values (541,39);
+insert into t (id,a) values (541,40);
+insert into t (id,a) values (541,41);
+insert into t (id,a) values (541,42);
+insert into t (id,a) values (541,43);
+insert into t (id,a) values (541,44);
+insert into t (id,a) values (541,45);
+insert into t (id,a) values (541,46);
+insert into t (id,a) values (541,47);
+insert into t (id,a) values (541,48);
+insert into t (id,a) values (541,49);
+insert into t (id,a) values (541,50);
+insert into t (id,a) values (541,51);
+insert into t (id,a) values (541,52);
+insert into t (id,a) values (541,53);
+insert into t (id,a) values (541,54);
+insert into t (id,a) values (541,55);
+insert into t (id,a) values (541,56);
+insert into t (id,a) values (541,57);
+insert into t (id,a) values (541,58);
+insert into t (id,a) values (541,59);
+insert into t (id,a) values (541,60);
+insert into t (id,a) values (541,61);
+insert into t (id,a) values (541,62);
+insert into t (id,a) values (541,63);
+insert into t (id,a) values (541,64);
+insert into t (id,a) values (541,65);
+insert into t (id,a) values (541,66);
+insert into t (id,a) values (541,67);
+insert into t (id,a) values (541,68);
+insert into t (id,a) values (541,69);
+insert into t (id,a) values (541,70);
+insert into t (id,a) values (541,71);
+insert into t (id,a) values (541,72);
+insert into t (id,a) values (541,73);
+insert into t (id,a) values (541,74);
+insert into t (id,a) values (541,75);
+insert into t (id,a) values (541,76);
+insert into t (id,a) values (541,77);
+insert into t (id,a) values (541,78);
+insert into t (id,a) values (541,79);
+insert into t (id,a) values (541,80);
+insert into t (id,a) values (541,81);
+insert into t (id,a) values (541,82);
+insert into t (id,a) values (541,83);
+insert into t (id,a) values (541,84);
+insert into t (id,a) values (541,85);
+insert into t (id,a) values (541,86);
+insert into t (id,a) values (541,87);
+insert into t (id,a) values (541,88);
+insert into t (id,a) values (541,89);
+insert into t (id,a) values (541,90);
+insert into t (id,a) values (541,91);
+insert into t (id,a) values (541,92);
+insert into t (id,a) values (541,93);
+insert into t (id,a) values (541,94);
+insert into t (id,a) values (541,95);
+insert into t (id,a) values (541,96);
+insert into t (id,a) values (541,97);
+insert into t (id,a) values (541,98);
+insert into t (id,a) values (541,99);
+insert into t (id,a) values (542,0);
+insert into t (id,a) values (542,1);
+insert into t (id,a) values (542,2);
+insert into t (id,a) values (542,3);
+insert into t (id,a) values (542,4);
+insert into t (id,a) values (542,5);
+insert into t (id,a) values (542,6);
+insert into t (id,a) values (542,7);
+insert into t (id,a) values (542,8);
+insert into t (id,a) values (542,9);
+insert into t (id,a) values (542,10);
+insert into t (id,a) values (542,11);
+insert into t (id,a) values (542,12);
+insert into t (id,a) values (542,13);
+insert into t (id,a) values (542,14);
+insert into t (id,a) values (542,15);
+insert into t (id,a) values (542,16);
+insert into t (id,a) values (542,17);
+insert into t (id,a) values (542,18);
+insert into t (id,a) values (542,19);
+insert into t (id,a) values (542,20);
+insert into t (id,a) values (542,21);
+insert into t (id,a) values (542,22);
+insert into t (id,a) values (542,23);
+insert into t (id,a) values (542,24);
+insert into t (id,a) values (542,25);
+insert into t (id,a) values (542,26);
+insert into t (id,a) values (542,27);
+insert into t (id,a) values (542,28);
+insert into t (id,a) values (542,29);
+insert into t (id,a) values (542,30);
+insert into t (id,a) values (542,31);
+insert into t (id,a) values (542,32);
+insert into t (id,a) values (542,33);
+insert into t (id,a) values (542,34);
+insert into t (id,a) values (542,35);
+insert into t (id,a) values (542,36);
+insert into t (id,a) values (542,37);
+insert into t (id,a) values (542,38);
+insert into t (id,a) values (542,39);
+insert into t (id,a) values (542,40);
+insert into t (id,a) values (542,41);
+insert into t (id,a) values (542,42);
+insert into t (id,a) values (542,43);
+insert into t (id,a) values (542,44);
+insert into t (id,a) values (542,45);
+insert into t (id,a) values (542,46);
+insert into t (id,a) values (542,47);
+insert into t (id,a) values (542,48);
+insert into t (id,a) values (542,49);
+insert into t (id,a) values (542,50);
+insert into t (id,a) values (542,51);
+insert into t (id,a) values (542,52);
+insert into t (id,a) values (542,53);
+insert into t (id,a) values (542,54);
+insert into t (id,a) values (542,55);
+insert into t (id,a) values (542,56);
+insert into t (id,a) values (542,57);
+insert into t (id,a) values (542,58);
+insert into t (id,a) values (542,59);
+insert into t (id,a) values (542,60);
+insert into t (id,a) values (542,61);
+insert into t (id,a) values (542,62);
+insert into t (id,a) values (542,63);
+insert into t (id,a) values (542,64);
+insert into t (id,a) values (542,65);
+insert into t (id,a) values (542,66);
+insert into t (id,a) values (542,67);
+insert into t (id,a) values (542,68);
+insert into t (id,a) values (542,69);
+insert into t (id,a) values (542,70);
+insert into t (id,a) values (542,71);
+insert into t (id,a) values (542,72);
+insert into t (id,a) values (542,73);
+insert into t (id,a) values (542,74);
+insert into t (id,a) values (542,75);
+insert into t (id,a) values (542,76);
+insert into t (id,a) values (542,77);
+insert into t (id,a) values (542,78);
+insert into t (id,a) values (542,79);
+insert into t (id,a) values (542,80);
+insert into t (id,a) values (542,81);
+insert into t (id,a) values (542,82);
+insert into t (id,a) values (542,83);
+insert into t (id,a) values (542,84);
+insert into t (id,a) values (542,85);
+insert into t (id,a) values (542,86);
+insert into t (id,a) values (542,87);
+insert into t (id,a) values (542,88);
+insert into t (id,a) values (542,89);
+insert into t (id,a) values (542,90);
+insert into t (id,a) values (542,91);
+insert into t (id,a) values (542,92);
+insert into t (id,a) values (542,93);
+insert into t (id,a) values (542,94);
+insert into t (id,a) values (542,95);
+insert into t (id,a) values (542,96);
+insert into t (id,a) values (542,97);
+insert into t (id,a) values (542,98);
+insert into t (id,a) values (542,99);
+insert into t (id,a) values (543,0);
+insert into t (id,a) values (543,1);
+insert into t (id,a) values (543,2);
+insert into t (id,a) values (543,3);
+insert into t (id,a) values (543,4);
+insert into t (id,a) values (543,5);
+insert into t (id,a) values (543,6);
+insert into t (id,a) values (543,7);
+insert into t (id,a) values (543,8);
+insert into t (id,a) values (543,9);
+insert into t (id,a) values (543,10);
+insert into t (id,a) values (543,11);
+insert into t (id,a) values (543,12);
+insert into t (id,a) values (543,13);
+insert into t (id,a) values (543,14);
+insert into t (id,a) values (543,15);
+insert into t (id,a) values (543,16);
+insert into t (id,a) values (543,17);
+insert into t (id,a) values (543,18);
+insert into t (id,a) values (543,19);
+insert into t (id,a) values (543,20);
+insert into t (id,a) values (543,21);
+insert into t (id,a) values (543,22);
+insert into t (id,a) values (543,23);
+insert into t (id,a) values (543,24);
+insert into t (id,a) values (543,25);
+insert into t (id,a) values (543,26);
+insert into t (id,a) values (543,27);
+insert into t (id,a) values (543,28);
+insert into t (id,a) values (543,29);
+insert into t (id,a) values (543,30);
+insert into t (id,a) values (543,31);
+insert into t (id,a) values (543,32);
+insert into t (id,a) values (543,33);
+insert into t (id,a) values (543,34);
+insert into t (id,a) values (543,35);
+insert into t (id,a) values (543,36);
+insert into t (id,a) values (543,37);
+insert into t (id,a) values (543,38);
+insert into t (id,a) values (543,39);
+insert into t (id,a) values (543,40);
+insert into t (id,a) values (543,41);
+insert into t (id,a) values (543,42);
+insert into t (id,a) values (543,43);
+insert into t (id,a) values (543,44);
+insert into t (id,a) values (543,45);
+insert into t (id,a) values (543,46);
+insert into t (id,a) values (543,47);
+insert into t (id,a) values (543,48);
+insert into t (id,a) values (543,49);
+insert into t (id,a) values (543,50);
+insert into t (id,a) values (543,51);
+insert into t (id,a) values (543,52);
+insert into t (id,a) values (543,53);
+insert into t (id,a) values (543,54);
+insert into t (id,a) values (543,55);
+insert into t (id,a) values (543,56);
+insert into t (id,a) values (543,57);
+insert into t (id,a) values (543,58);
+insert into t (id,a) values (543,59);
+insert into t (id,a) values (543,60);
+insert into t (id,a) values (543,61);
+insert into t (id,a) values (543,62);
+insert into t (id,a) values (543,63);
+insert into t (id,a) values (543,64);
+insert into t (id,a) values (543,65);
+insert into t (id,a) values (543,66);
+insert into t (id,a) values (543,67);
+insert into t (id,a) values (543,68);
+insert into t (id,a) values (543,69);
+insert into t (id,a) values (543,70);
+insert into t (id,a) values (543,71);
+insert into t (id,a) values (543,72);
+insert into t (id,a) values (543,73);
+insert into t (id,a) values (543,74);
+insert into t (id,a) values (543,75);
+insert into t (id,a) values (543,76);
+insert into t (id,a) values (543,77);
+insert into t (id,a) values (543,78);
+insert into t (id,a) values (543,79);
+insert into t (id,a) values (543,80);
+insert into t (id,a) values (543,81);
+insert into t (id,a) values (543,82);
+insert into t (id,a) values (543,83);
+insert into t (id,a) values (543,84);
+insert into t (id,a) values (543,85);
+insert into t (id,a) values (543,86);
+insert into t (id,a) values (543,87);
+insert into t (id,a) values (543,88);
+insert into t (id,a) values (543,89);
+insert into t (id,a) values (543,90);
+insert into t (id,a) values (543,91);
+insert into t (id,a) values (543,92);
+insert into t (id,a) values (543,93);
+insert into t (id,a) values (543,94);
+insert into t (id,a) values (543,95);
+insert into t (id,a) values (543,96);
+insert into t (id,a) values (543,97);
+insert into t (id,a) values (543,98);
+insert into t (id,a) values (543,99);
+insert into t (id,a) values (544,0);
+insert into t (id,a) values (544,1);
+insert into t (id,a) values (544,2);
+insert into t (id,a) values (544,3);
+insert into t (id,a) values (544,4);
+insert into t (id,a) values (544,5);
+insert into t (id,a) values (544,6);
+insert into t (id,a) values (544,7);
+insert into t (id,a) values (544,8);
+insert into t (id,a) values (544,9);
+insert into t (id,a) values (544,10);
+insert into t (id,a) values (544,11);
+insert into t (id,a) values (544,12);
+insert into t (id,a) values (544,13);
+insert into t (id,a) values (544,14);
+insert into t (id,a) values (544,15);
+insert into t (id,a) values (544,16);
+insert into t (id,a) values (544,17);
+insert into t (id,a) values (544,18);
+insert into t (id,a) values (544,19);
+insert into t (id,a) values (544,20);
+insert into t (id,a) values (544,21);
+insert into t (id,a) values (544,22);
+insert into t (id,a) values (544,23);
+insert into t (id,a) values (544,24);
+insert into t (id,a) values (544,25);
+insert into t (id,a) values (544,26);
+insert into t (id,a) values (544,27);
+insert into t (id,a) values (544,28);
+insert into t (id,a) values (544,29);
+insert into t (id,a) values (544,30);
+insert into t (id,a) values (544,31);
+insert into t (id,a) values (544,32);
+insert into t (id,a) values (544,33);
+insert into t (id,a) values (544,34);
+insert into t (id,a) values (544,35);
+insert into t (id,a) values (544,36);
+insert into t (id,a) values (544,37);
+insert into t (id,a) values (544,38);
+insert into t (id,a) values (544,39);
+insert into t (id,a) values (544,40);
+insert into t (id,a) values (544,41);
+insert into t (id,a) values (544,42);
+insert into t (id,a) values (544,43);
+insert into t (id,a) values (544,44);
+insert into t (id,a) values (544,45);
+insert into t (id,a) values (544,46);
+insert into t (id,a) values (544,47);
+insert into t (id,a) values (544,48);
+insert into t (id,a) values (544,49);
+insert into t (id,a) values (544,50);
+insert into t (id,a) values (544,51);
+insert into t (id,a) values (544,52);
+insert into t (id,a) values (544,53);
+insert into t (id,a) values (544,54);
+insert into t (id,a) values (544,55);
+insert into t (id,a) values (544,56);
+insert into t (id,a) values (544,57);
+insert into t (id,a) values (544,58);
+insert into t (id,a) values (544,59);
+insert into t (id,a) values (544,60);
+insert into t (id,a) values (544,61);
+insert into t (id,a) values (544,62);
+insert into t (id,a) values (544,63);
+insert into t (id,a) values (544,64);
+insert into t (id,a) values (544,65);
+insert into t (id,a) values (544,66);
+insert into t (id,a) values (544,67);
+insert into t (id,a) values (544,68);
+insert into t (id,a) values (544,69);
+insert into t (id,a) values (544,70);
+insert into t (id,a) values (544,71);
+insert into t (id,a) values (544,72);
+insert into t (id,a) values (544,73);
+insert into t (id,a) values (544,74);
+insert into t (id,a) values (544,75);
+insert into t (id,a) values (544,76);
+insert into t (id,a) values (544,77);
+insert into t (id,a) values (544,78);
+insert into t (id,a) values (544,79);
+insert into t (id,a) values (544,80);
+insert into t (id,a) values (544,81);
+insert into t (id,a) values (544,82);
+insert into t (id,a) values (544,83);
+insert into t (id,a) values (544,84);
+insert into t (id,a) values (544,85);
+insert into t (id,a) values (544,86);
+insert into t (id,a) values (544,87);
+insert into t (id,a) values (544,88);
+insert into t (id,a) values (544,89);
+insert into t (id,a) values (544,90);
+insert into t (id,a) values (544,91);
+insert into t (id,a) values (544,92);
+insert into t (id,a) values (544,93);
+insert into t (id,a) values (544,94);
+insert into t (id,a) values (544,95);
+insert into t (id,a) values (544,96);
+insert into t (id,a) values (544,97);
+insert into t (id,a) values (544,98);
+insert into t (id,a) values (544,99);
+insert into t (id,a) values (545,0);
+insert into t (id,a) values (545,1);
+insert into t (id,a) values (545,2);
+insert into t (id,a) values (545,3);
+insert into t (id,a) values (545,4);
+insert into t (id,a) values (545,5);
+insert into t (id,a) values (545,6);
+insert into t (id,a) values (545,7);
+insert into t (id,a) values (545,8);
+insert into t (id,a) values (545,9);
+insert into t (id,a) values (545,10);
+insert into t (id,a) values (545,11);
+insert into t (id,a) values (545,12);
+insert into t (id,a) values (545,13);
+insert into t (id,a) values (545,14);
+insert into t (id,a) values (545,15);
+insert into t (id,a) values (545,16);
+insert into t (id,a) values (545,17);
+insert into t (id,a) values (545,18);
+insert into t (id,a) values (545,19);
+insert into t (id,a) values (545,20);
+insert into t (id,a) values (545,21);
+insert into t (id,a) values (545,22);
+insert into t (id,a) values (545,23);
+insert into t (id,a) values (545,24);
+insert into t (id,a) values (545,25);
+insert into t (id,a) values (545,26);
+insert into t (id,a) values (545,27);
+insert into t (id,a) values (545,28);
+insert into t (id,a) values (545,29);
+insert into t (id,a) values (545,30);
+insert into t (id,a) values (545,31);
+insert into t (id,a) values (545,32);
+insert into t (id,a) values (545,33);
+insert into t (id,a) values (545,34);
+insert into t (id,a) values (545,35);
+insert into t (id,a) values (545,36);
+insert into t (id,a) values (545,37);
+insert into t (id,a) values (545,38);
+insert into t (id,a) values (545,39);
+insert into t (id,a) values (545,40);
+insert into t (id,a) values (545,41);
+insert into t (id,a) values (545,42);
+insert into t (id,a) values (545,43);
+insert into t (id,a) values (545,44);
+insert into t (id,a) values (545,45);
+insert into t (id,a) values (545,46);
+insert into t (id,a) values (545,47);
+insert into t (id,a) values (545,48);
+insert into t (id,a) values (545,49);
+insert into t (id,a) values (545,50);
+insert into t (id,a) values (545,51);
+insert into t (id,a) values (545,52);
+insert into t (id,a) values (545,53);
+insert into t (id,a) values (545,54);
+insert into t (id,a) values (545,55);
+insert into t (id,a) values (545,56);
+insert into t (id,a) values (545,57);
+insert into t (id,a) values (545,58);
+insert into t (id,a) values (545,59);
+insert into t (id,a) values (545,60);
+insert into t (id,a) values (545,61);
+insert into t (id,a) values (545,62);
+insert into t (id,a) values (545,63);
+insert into t (id,a) values (545,64);
+insert into t (id,a) values (545,65);
+insert into t (id,a) values (545,66);
+insert into t (id,a) values (545,67);
+insert into t (id,a) values (545,68);
+insert into t (id,a) values (545,69);
+insert into t (id,a) values (545,70);
+insert into t (id,a) values (545,71);
+insert into t (id,a) values (545,72);
+insert into t (id,a) values (545,73);
+insert into t (id,a) values (545,74);
+insert into t (id,a) values (545,75);
+insert into t (id,a) values (545,76);
+insert into t (id,a) values (545,77);
+insert into t (id,a) values (545,78);
+insert into t (id,a) values (545,79);
+insert into t (id,a) values (545,80);
+insert into t (id,a) values (545,81);
+insert into t (id,a) values (545,82);
+insert into t (id,a) values (545,83);
+insert into t (id,a) values (545,84);
+insert into t (id,a) values (545,85);
+insert into t (id,a) values (545,86);
+insert into t (id,a) values (545,87);
+insert into t (id,a) values (545,88);
+insert into t (id,a) values (545,89);
+insert into t (id,a) values (545,90);
+insert into t (id,a) values (545,91);
+insert into t (id,a) values (545,92);
+insert into t (id,a) values (545,93);
+insert into t (id,a) values (545,94);
+insert into t (id,a) values (545,95);
+insert into t (id,a) values (545,96);
+insert into t (id,a) values (545,97);
+insert into t (id,a) values (545,98);
+insert into t (id,a) values (545,99);
+insert into t (id,a) values (546,0);
+insert into t (id,a) values (546,1);
+insert into t (id,a) values (546,2);
+insert into t (id,a) values (546,3);
+insert into t (id,a) values (546,4);
+insert into t (id,a) values (546,5);
+insert into t (id,a) values (546,6);
+insert into t (id,a) values (546,7);
+insert into t (id,a) values (546,8);
+insert into t (id,a) values (546,9);
+insert into t (id,a) values (546,10);
+insert into t (id,a) values (546,11);
+insert into t (id,a) values (546,12);
+insert into t (id,a) values (546,13);
+insert into t (id,a) values (546,14);
+insert into t (id,a) values (546,15);
+insert into t (id,a) values (546,16);
+insert into t (id,a) values (546,17);
+insert into t (id,a) values (546,18);
+insert into t (id,a) values (546,19);
+insert into t (id,a) values (546,20);
+insert into t (id,a) values (546,21);
+insert into t (id,a) values (546,22);
+insert into t (id,a) values (546,23);
+insert into t (id,a) values (546,24);
+insert into t (id,a) values (546,25);
+insert into t (id,a) values (546,26);
+insert into t (id,a) values (546,27);
+insert into t (id,a) values (546,28);
+insert into t (id,a) values (546,29);
+insert into t (id,a) values (546,30);
+insert into t (id,a) values (546,31);
+insert into t (id,a) values (546,32);
+insert into t (id,a) values (546,33);
+insert into t (id,a) values (546,34);
+insert into t (id,a) values (546,35);
+insert into t (id,a) values (546,36);
+insert into t (id,a) values (546,37);
+insert into t (id,a) values (546,38);
+insert into t (id,a) values (546,39);
+insert into t (id,a) values (546,40);
+insert into t (id,a) values (546,41);
+insert into t (id,a) values (546,42);
+insert into t (id,a) values (546,43);
+insert into t (id,a) values (546,44);
+insert into t (id,a) values (546,45);
+insert into t (id,a) values (546,46);
+insert into t (id,a) values (546,47);
+insert into t (id,a) values (546,48);
+insert into t (id,a) values (546,49);
+insert into t (id,a) values (546,50);
+insert into t (id,a) values (546,51);
+insert into t (id,a) values (546,52);
+insert into t (id,a) values (546,53);
+insert into t (id,a) values (546,54);
+insert into t (id,a) values (546,55);
+insert into t (id,a) values (546,56);
+insert into t (id,a) values (546,57);
+insert into t (id,a) values (546,58);
+insert into t (id,a) values (546,59);
+insert into t (id,a) values (546,60);
+insert into t (id,a) values (546,61);
+insert into t (id,a) values (546,62);
+insert into t (id,a) values (546,63);
+insert into t (id,a) values (546,64);
+insert into t (id,a) values (546,65);
+insert into t (id,a) values (546,66);
+insert into t (id,a) values (546,67);
+insert into t (id,a) values (546,68);
+insert into t (id,a) values (546,69);
+insert into t (id,a) values (546,70);
+insert into t (id,a) values (546,71);
+insert into t (id,a) values (546,72);
+insert into t (id,a) values (546,73);
+insert into t (id,a) values (546,74);
+insert into t (id,a) values (546,75);
+insert into t (id,a) values (546,76);
+insert into t (id,a) values (546,77);
+insert into t (id,a) values (546,78);
+insert into t (id,a) values (546,79);
+insert into t (id,a) values (546,80);
+insert into t (id,a) values (546,81);
+insert into t (id,a) values (546,82);
+insert into t (id,a) values (546,83);
+insert into t (id,a) values (546,84);
+insert into t (id,a) values (546,85);
+insert into t (id,a) values (546,86);
+insert into t (id,a) values (546,87);
+insert into t (id,a) values (546,88);
+insert into t (id,a) values (546,89);
+insert into t (id,a) values (546,90);
+insert into t (id,a) values (546,91);
+insert into t (id,a) values (546,92);
+insert into t (id,a) values (546,93);
+insert into t (id,a) values (546,94);
+insert into t (id,a) values (546,95);
+insert into t (id,a) values (546,96);
+insert into t (id,a) values (546,97);
+insert into t (id,a) values (546,98);
+insert into t (id,a) values (546,99);
+insert into t (id,a) values (547,0);
+insert into t (id,a) values (547,1);
+insert into t (id,a) values (547,2);
+insert into t (id,a) values (547,3);
+insert into t (id,a) values (547,4);
+insert into t (id,a) values (547,5);
+insert into t (id,a) values (547,6);
+insert into t (id,a) values (547,7);
+insert into t (id,a) values (547,8);
+insert into t (id,a) values (547,9);
+insert into t (id,a) values (547,10);
+insert into t (id,a) values (547,11);
+insert into t (id,a) values (547,12);
+insert into t (id,a) values (547,13);
+insert into t (id,a) values (547,14);
+insert into t (id,a) values (547,15);
+insert into t (id,a) values (547,16);
+insert into t (id,a) values (547,17);
+insert into t (id,a) values (547,18);
+insert into t (id,a) values (547,19);
+insert into t (id,a) values (547,20);
+insert into t (id,a) values (547,21);
+insert into t (id,a) values (547,22);
+insert into t (id,a) values (547,23);
+insert into t (id,a) values (547,24);
+insert into t (id,a) values (547,25);
+insert into t (id,a) values (547,26);
+insert into t (id,a) values (547,27);
+insert into t (id,a) values (547,28);
+insert into t (id,a) values (547,29);
+insert into t (id,a) values (547,30);
+insert into t (id,a) values (547,31);
+insert into t (id,a) values (547,32);
+insert into t (id,a) values (547,33);
+insert into t (id,a) values (547,34);
+insert into t (id,a) values (547,35);
+insert into t (id,a) values (547,36);
+insert into t (id,a) values (547,37);
+insert into t (id,a) values (547,38);
+insert into t (id,a) values (547,39);
+insert into t (id,a) values (547,40);
+insert into t (id,a) values (547,41);
+insert into t (id,a) values (547,42);
+insert into t (id,a) values (547,43);
+insert into t (id,a) values (547,44);
+insert into t (id,a) values (547,45);
+insert into t (id,a) values (547,46);
+insert into t (id,a) values (547,47);
+insert into t (id,a) values (547,48);
+insert into t (id,a) values (547,49);
+insert into t (id,a) values (547,50);
+insert into t (id,a) values (547,51);
+insert into t (id,a) values (547,52);
+insert into t (id,a) values (547,53);
+insert into t (id,a) values (547,54);
+insert into t (id,a) values (547,55);
+insert into t (id,a) values (547,56);
+insert into t (id,a) values (547,57);
+insert into t (id,a) values (547,58);
+insert into t (id,a) values (547,59);
+insert into t (id,a) values (547,60);
+insert into t (id,a) values (547,61);
+insert into t (id,a) values (547,62);
+insert into t (id,a) values (547,63);
+insert into t (id,a) values (547,64);
+insert into t (id,a) values (547,65);
+insert into t (id,a) values (547,66);
+insert into t (id,a) values (547,67);
+insert into t (id,a) values (547,68);
+insert into t (id,a) values (547,69);
+insert into t (id,a) values (547,70);
+insert into t (id,a) values (547,71);
+insert into t (id,a) values (547,72);
+insert into t (id,a) values (547,73);
+insert into t (id,a) values (547,74);
+insert into t (id,a) values (547,75);
+insert into t (id,a) values (547,76);
+insert into t (id,a) values (547,77);
+insert into t (id,a) values (547,78);
+insert into t (id,a) values (547,79);
+insert into t (id,a) values (547,80);
+insert into t (id,a) values (547,81);
+insert into t (id,a) values (547,82);
+insert into t (id,a) values (547,83);
+insert into t (id,a) values (547,84);
+insert into t (id,a) values (547,85);
+insert into t (id,a) values (547,86);
+insert into t (id,a) values (547,87);
+insert into t (id,a) values (547,88);
+insert into t (id,a) values (547,89);
+insert into t (id,a) values (547,90);
+insert into t (id,a) values (547,91);
+insert into t (id,a) values (547,92);
+insert into t (id,a) values (547,93);
+insert into t (id,a) values (547,94);
+insert into t (id,a) values (547,95);
+insert into t (id,a) values (547,96);
+insert into t (id,a) values (547,97);
+insert into t (id,a) values (547,98);
+insert into t (id,a) values (547,99);
+insert into t (id,a) values (548,0);
+insert into t (id,a) values (548,1);
+insert into t (id,a) values (548,2);
+insert into t (id,a) values (548,3);
+insert into t (id,a) values (548,4);
+insert into t (id,a) values (548,5);
+insert into t (id,a) values (548,6);
+insert into t (id,a) values (548,7);
+insert into t (id,a) values (548,8);
+insert into t (id,a) values (548,9);
+insert into t (id,a) values (548,10);
+insert into t (id,a) values (548,11);
+insert into t (id,a) values (548,12);
+insert into t (id,a) values (548,13);
+insert into t (id,a) values (548,14);
+insert into t (id,a) values (548,15);
+insert into t (id,a) values (548,16);
+insert into t (id,a) values (548,17);
+insert into t (id,a) values (548,18);
+insert into t (id,a) values (548,19);
+insert into t (id,a) values (548,20);
+insert into t (id,a) values (548,21);
+insert into t (id,a) values (548,22);
+insert into t (id,a) values (548,23);
+insert into t (id,a) values (548,24);
+insert into t (id,a) values (548,25);
+insert into t (id,a) values (548,26);
+insert into t (id,a) values (548,27);
+insert into t (id,a) values (548,28);
+insert into t (id,a) values (548,29);
+insert into t (id,a) values (548,30);
+insert into t (id,a) values (548,31);
+insert into t (id,a) values (548,32);
+insert into t (id,a) values (548,33);
+insert into t (id,a) values (548,34);
+insert into t (id,a) values (548,35);
+insert into t (id,a) values (548,36);
+insert into t (id,a) values (548,37);
+insert into t (id,a) values (548,38);
+insert into t (id,a) values (548,39);
+insert into t (id,a) values (548,40);
+insert into t (id,a) values (548,41);
+insert into t (id,a) values (548,42);
+insert into t (id,a) values (548,43);
+insert into t (id,a) values (548,44);
+insert into t (id,a) values (548,45);
+insert into t (id,a) values (548,46);
+insert into t (id,a) values (548,47);
+insert into t (id,a) values (548,48);
+insert into t (id,a) values (548,49);
+insert into t (id,a) values (548,50);
+insert into t (id,a) values (548,51);
+insert into t (id,a) values (548,52);
+insert into t (id,a) values (548,53);
+insert into t (id,a) values (548,54);
+insert into t (id,a) values (548,55);
+insert into t (id,a) values (548,56);
+insert into t (id,a) values (548,57);
+insert into t (id,a) values (548,58);
+insert into t (id,a) values (548,59);
+insert into t (id,a) values (548,60);
+insert into t (id,a) values (548,61);
+insert into t (id,a) values (548,62);
+insert into t (id,a) values (548,63);
+insert into t (id,a) values (548,64);
+insert into t (id,a) values (548,65);
+insert into t (id,a) values (548,66);
+insert into t (id,a) values (548,67);
+insert into t (id,a) values (548,68);
+insert into t (id,a) values (548,69);
+insert into t (id,a) values (548,70);
+insert into t (id,a) values (548,71);
+insert into t (id,a) values (548,72);
+insert into t (id,a) values (548,73);
+insert into t (id,a) values (548,74);
+insert into t (id,a) values (548,75);
+insert into t (id,a) values (548,76);
+insert into t (id,a) values (548,77);
+insert into t (id,a) values (548,78);
+insert into t (id,a) values (548,79);
+insert into t (id,a) values (548,80);
+insert into t (id,a) values (548,81);
+insert into t (id,a) values (548,82);
+insert into t (id,a) values (548,83);
+insert into t (id,a) values (548,84);
+insert into t (id,a) values (548,85);
+insert into t (id,a) values (548,86);
+insert into t (id,a) values (548,87);
+insert into t (id,a) values (548,88);
+insert into t (id,a) values (548,89);
+insert into t (id,a) values (548,90);
+insert into t (id,a) values (548,91);
+insert into t (id,a) values (548,92);
+insert into t (id,a) values (548,93);
+insert into t (id,a) values (548,94);
+insert into t (id,a) values (548,95);
+insert into t (id,a) values (548,96);
+insert into t (id,a) values (548,97);
+insert into t (id,a) values (548,98);
+insert into t (id,a) values (548,99);
+insert into t (id,a) values (549,0);
+insert into t (id,a) values (549,1);
+insert into t (id,a) values (549,2);
+insert into t (id,a) values (549,3);
+insert into t (id,a) values (549,4);
+insert into t (id,a) values (549,5);
+insert into t (id,a) values (549,6);
+insert into t (id,a) values (549,7);
+insert into t (id,a) values (549,8);
+insert into t (id,a) values (549,9);
+insert into t (id,a) values (549,10);
+insert into t (id,a) values (549,11);
+insert into t (id,a) values (549,12);
+insert into t (id,a) values (549,13);
+insert into t (id,a) values (549,14);
+insert into t (id,a) values (549,15);
+insert into t (id,a) values (549,16);
+insert into t (id,a) values (549,17);
+insert into t (id,a) values (549,18);
+insert into t (id,a) values (549,19);
+insert into t (id,a) values (549,20);
+insert into t (id,a) values (549,21);
+insert into t (id,a) values (549,22);
+insert into t (id,a) values (549,23);
+insert into t (id,a) values (549,24);
+insert into t (id,a) values (549,25);
+insert into t (id,a) values (549,26);
+insert into t (id,a) values (549,27);
+insert into t (id,a) values (549,28);
+insert into t (id,a) values (549,29);
+insert into t (id,a) values (549,30);
+insert into t (id,a) values (549,31);
+insert into t (id,a) values (549,32);
+insert into t (id,a) values (549,33);
+insert into t (id,a) values (549,34);
+insert into t (id,a) values (549,35);
+insert into t (id,a) values (549,36);
+insert into t (id,a) values (549,37);
+insert into t (id,a) values (549,38);
+insert into t (id,a) values (549,39);
+insert into t (id,a) values (549,40);
+insert into t (id,a) values (549,41);
+insert into t (id,a) values (549,42);
+insert into t (id,a) values (549,43);
+insert into t (id,a) values (549,44);
+insert into t (id,a) values (549,45);
+insert into t (id,a) values (549,46);
+insert into t (id,a) values (549,47);
+insert into t (id,a) values (549,48);
+insert into t (id,a) values (549,49);
+insert into t (id,a) values (549,50);
+insert into t (id,a) values (549,51);
+insert into t (id,a) values (549,52);
+insert into t (id,a) values (549,53);
+insert into t (id,a) values (549,54);
+insert into t (id,a) values (549,55);
+insert into t (id,a) values (549,56);
+insert into t (id,a) values (549,57);
+insert into t (id,a) values (549,58);
+insert into t (id,a) values (549,59);
+insert into t (id,a) values (549,60);
+insert into t (id,a) values (549,61);
+insert into t (id,a) values (549,62);
+insert into t (id,a) values (549,63);
+insert into t (id,a) values (549,64);
+insert into t (id,a) values (549,65);
+insert into t (id,a) values (549,66);
+insert into t (id,a) values (549,67);
+insert into t (id,a) values (549,68);
+insert into t (id,a) values (549,69);
+insert into t (id,a) values (549,70);
+insert into t (id,a) values (549,71);
+insert into t (id,a) values (549,72);
+insert into t (id,a) values (549,73);
+insert into t (id,a) values (549,74);
+insert into t (id,a) values (549,75);
+insert into t (id,a) values (549,76);
+insert into t (id,a) values (549,77);
+insert into t (id,a) values (549,78);
+insert into t (id,a) values (549,79);
+insert into t (id,a) values (549,80);
+insert into t (id,a) values (549,81);
+insert into t (id,a) values (549,82);
+insert into t (id,a) values (549,83);
+insert into t (id,a) values (549,84);
+insert into t (id,a) values (549,85);
+insert into t (id,a) values (549,86);
+insert into t (id,a) values (549,87);
+insert into t (id,a) values (549,88);
+insert into t (id,a) values (549,89);
+insert into t (id,a) values (549,90);
+insert into t (id,a) values (549,91);
+insert into t (id,a) values (549,92);
+insert into t (id,a) values (549,93);
+insert into t (id,a) values (549,94);
+insert into t (id,a) values (549,95);
+insert into t (id,a) values (549,96);
+insert into t (id,a) values (549,97);
+insert into t (id,a) values (549,98);
+insert into t (id,a) values (549,99);
+insert into t (id,a) values (550,0);
+insert into t (id,a) values (550,1);
+insert into t (id,a) values (550,2);
+insert into t (id,a) values (550,3);
+insert into t (id,a) values (550,4);
+insert into t (id,a) values (550,5);
+insert into t (id,a) values (550,6);
+insert into t (id,a) values (550,7);
+insert into t (id,a) values (550,8);
+insert into t (id,a) values (550,9);
+insert into t (id,a) values (550,10);
+insert into t (id,a) values (550,11);
+insert into t (id,a) values (550,12);
+insert into t (id,a) values (550,13);
+insert into t (id,a) values (550,14);
+insert into t (id,a) values (550,15);
+insert into t (id,a) values (550,16);
+insert into t (id,a) values (550,17);
+insert into t (id,a) values (550,18);
+insert into t (id,a) values (550,19);
+insert into t (id,a) values (550,20);
+insert into t (id,a) values (550,21);
+insert into t (id,a) values (550,22);
+insert into t (id,a) values (550,23);
+insert into t (id,a) values (550,24);
+insert into t (id,a) values (550,25);
+insert into t (id,a) values (550,26);
+insert into t (id,a) values (550,27);
+insert into t (id,a) values (550,28);
+insert into t (id,a) values (550,29);
+insert into t (id,a) values (550,30);
+insert into t (id,a) values (550,31);
+insert into t (id,a) values (550,32);
+insert into t (id,a) values (550,33);
+insert into t (id,a) values (550,34);
+insert into t (id,a) values (550,35);
+insert into t (id,a) values (550,36);
+insert into t (id,a) values (550,37);
+insert into t (id,a) values (550,38);
+insert into t (id,a) values (550,39);
+insert into t (id,a) values (550,40);
+insert into t (id,a) values (550,41);
+insert into t (id,a) values (550,42);
+insert into t (id,a) values (550,43);
+insert into t (id,a) values (550,44);
+insert into t (id,a) values (550,45);
+insert into t (id,a) values (550,46);
+insert into t (id,a) values (550,47);
+insert into t (id,a) values (550,48);
+insert into t (id,a) values (550,49);
+insert into t (id,a) values (550,50);
+insert into t (id,a) values (550,51);
+insert into t (id,a) values (550,52);
+insert into t (id,a) values (550,53);
+insert into t (id,a) values (550,54);
+insert into t (id,a) values (550,55);
+insert into t (id,a) values (550,56);
+insert into t (id,a) values (550,57);
+insert into t (id,a) values (550,58);
+insert into t (id,a) values (550,59);
+insert into t (id,a) values (550,60);
+insert into t (id,a) values (550,61);
+insert into t (id,a) values (550,62);
+insert into t (id,a) values (550,63);
+insert into t (id,a) values (550,64);
+insert into t (id,a) values (550,65);
+insert into t (id,a) values (550,66);
+insert into t (id,a) values (550,67);
+insert into t (id,a) values (550,68);
+insert into t (id,a) values (550,69);
+insert into t (id,a) values (550,70);
+insert into t (id,a) values (550,71);
+insert into t (id,a) values (550,72);
+insert into t (id,a) values (550,73);
+insert into t (id,a) values (550,74);
+insert into t (id,a) values (550,75);
+insert into t (id,a) values (550,76);
+insert into t (id,a) values (550,77);
+insert into t (id,a) values (550,78);
+insert into t (id,a) values (550,79);
+insert into t (id,a) values (550,80);
+insert into t (id,a) values (550,81);
+insert into t (id,a) values (550,82);
+insert into t (id,a) values (550,83);
+insert into t (id,a) values (550,84);
+insert into t (id,a) values (550,85);
+insert into t (id,a) values (550,86);
+insert into t (id,a) values (550,87);
+insert into t (id,a) values (550,88);
+insert into t (id,a) values (550,89);
+insert into t (id,a) values (550,90);
+insert into t (id,a) values (550,91);
+insert into t (id,a) values (550,92);
+insert into t (id,a) values (550,93);
+insert into t (id,a) values (550,94);
+insert into t (id,a) values (550,95);
+insert into t (id,a) values (550,96);
+insert into t (id,a) values (550,97);
+insert into t (id,a) values (550,98);
+insert into t (id,a) values (550,99);
+insert into t (id,a) values (551,0);
+insert into t (id,a) values (551,1);
+insert into t (id,a) values (551,2);
+insert into t (id,a) values (551,3);
+insert into t (id,a) values (551,4);
+insert into t (id,a) values (551,5);
+insert into t (id,a) values (551,6);
+insert into t (id,a) values (551,7);
+insert into t (id,a) values (551,8);
+insert into t (id,a) values (551,9);
+insert into t (id,a) values (551,10);
+insert into t (id,a) values (551,11);
+insert into t (id,a) values (551,12);
+insert into t (id,a) values (551,13);
+insert into t (id,a) values (551,14);
+insert into t (id,a) values (551,15);
+insert into t (id,a) values (551,16);
+insert into t (id,a) values (551,17);
+insert into t (id,a) values (551,18);
+insert into t (id,a) values (551,19);
+insert into t (id,a) values (551,20);
+insert into t (id,a) values (551,21);
+insert into t (id,a) values (551,22);
+insert into t (id,a) values (551,23);
+insert into t (id,a) values (551,24);
+insert into t (id,a) values (551,25);
+insert into t (id,a) values (551,26);
+insert into t (id,a) values (551,27);
+insert into t (id,a) values (551,28);
+insert into t (id,a) values (551,29);
+insert into t (id,a) values (551,30);
+insert into t (id,a) values (551,31);
+insert into t (id,a) values (551,32);
+insert into t (id,a) values (551,33);
+insert into t (id,a) values (551,34);
+insert into t (id,a) values (551,35);
+insert into t (id,a) values (551,36);
+insert into t (id,a) values (551,37);
+insert into t (id,a) values (551,38);
+insert into t (id,a) values (551,39);
+insert into t (id,a) values (551,40);
+insert into t (id,a) values (551,41);
+insert into t (id,a) values (551,42);
+insert into t (id,a) values (551,43);
+insert into t (id,a) values (551,44);
+insert into t (id,a) values (551,45);
+insert into t (id,a) values (551,46);
+insert into t (id,a) values (551,47);
+insert into t (id,a) values (551,48);
+insert into t (id,a) values (551,49);
+insert into t (id,a) values (551,50);
+insert into t (id,a) values (551,51);
+insert into t (id,a) values (551,52);
+insert into t (id,a) values (551,53);
+insert into t (id,a) values (551,54);
+insert into t (id,a) values (551,55);
+insert into t (id,a) values (551,56);
+insert into t (id,a) values (551,57);
+insert into t (id,a) values (551,58);
+insert into t (id,a) values (551,59);
+insert into t (id,a) values (551,60);
+insert into t (id,a) values (551,61);
+insert into t (id,a) values (551,62);
+insert into t (id,a) values (551,63);
+insert into t (id,a) values (551,64);
+insert into t (id,a) values (551,65);
+insert into t (id,a) values (551,66);
+insert into t (id,a) values (551,67);
+insert into t (id,a) values (551,68);
+insert into t (id,a) values (551,69);
+insert into t (id,a) values (551,70);
+insert into t (id,a) values (551,71);
+insert into t (id,a) values (551,72);
+insert into t (id,a) values (551,73);
+insert into t (id,a) values (551,74);
+insert into t (id,a) values (551,75);
+insert into t (id,a) values (551,76);
+insert into t (id,a) values (551,77);
+insert into t (id,a) values (551,78);
+insert into t (id,a) values (551,79);
+insert into t (id,a) values (551,80);
+insert into t (id,a) values (551,81);
+insert into t (id,a) values (551,82);
+insert into t (id,a) values (551,83);
+insert into t (id,a) values (551,84);
+insert into t (id,a) values (551,85);
+insert into t (id,a) values (551,86);
+insert into t (id,a) values (551,87);
+insert into t (id,a) values (551,88);
+insert into t (id,a) values (551,89);
+insert into t (id,a) values (551,90);
+insert into t (id,a) values (551,91);
+insert into t (id,a) values (551,92);
+insert into t (id,a) values (551,93);
+insert into t (id,a) values (551,94);
+insert into t (id,a) values (551,95);
+insert into t (id,a) values (551,96);
+insert into t (id,a) values (551,97);
+insert into t (id,a) values (551,98);
+insert into t (id,a) values (551,99);
+insert into t (id,a) values (552,0);
+insert into t (id,a) values (552,1);
+insert into t (id,a) values (552,2);
+insert into t (id,a) values (552,3);
+insert into t (id,a) values (552,4);
+insert into t (id,a) values (552,5);
+insert into t (id,a) values (552,6);
+insert into t (id,a) values (552,7);
+insert into t (id,a) values (552,8);
+insert into t (id,a) values (552,9);
+insert into t (id,a) values (552,10);
+insert into t (id,a) values (552,11);
+insert into t (id,a) values (552,12);
+insert into t (id,a) values (552,13);
+insert into t (id,a) values (552,14);
+insert into t (id,a) values (552,15);
+insert into t (id,a) values (552,16);
+insert into t (id,a) values (552,17);
+insert into t (id,a) values (552,18);
+insert into t (id,a) values (552,19);
+insert into t (id,a) values (552,20);
+insert into t (id,a) values (552,21);
+insert into t (id,a) values (552,22);
+insert into t (id,a) values (552,23);
+insert into t (id,a) values (552,24);
+insert into t (id,a) values (552,25);
+insert into t (id,a) values (552,26);
+insert into t (id,a) values (552,27);
+insert into t (id,a) values (552,28);
+insert into t (id,a) values (552,29);
+insert into t (id,a) values (552,30);
+insert into t (id,a) values (552,31);
+insert into t (id,a) values (552,32);
+insert into t (id,a) values (552,33);
+insert into t (id,a) values (552,34);
+insert into t (id,a) values (552,35);
+insert into t (id,a) values (552,36);
+insert into t (id,a) values (552,37);
+insert into t (id,a) values (552,38);
+insert into t (id,a) values (552,39);
+insert into t (id,a) values (552,40);
+insert into t (id,a) values (552,41);
+insert into t (id,a) values (552,42);
+insert into t (id,a) values (552,43);
+insert into t (id,a) values (552,44);
+insert into t (id,a) values (552,45);
+insert into t (id,a) values (552,46);
+insert into t (id,a) values (552,47);
+insert into t (id,a) values (552,48);
+insert into t (id,a) values (552,49);
+insert into t (id,a) values (552,50);
+insert into t (id,a) values (552,51);
+insert into t (id,a) values (552,52);
+insert into t (id,a) values (552,53);
+insert into t (id,a) values (552,54);
+insert into t (id,a) values (552,55);
+insert into t (id,a) values (552,56);
+insert into t (id,a) values (552,57);
+insert into t (id,a) values (552,58);
+insert into t (id,a) values (552,59);
+insert into t (id,a) values (552,60);
+insert into t (id,a) values (552,61);
+insert into t (id,a) values (552,62);
+insert into t (id,a) values (552,63);
+insert into t (id,a) values (552,64);
+insert into t (id,a) values (552,65);
+insert into t (id,a) values (552,66);
+insert into t (id,a) values (552,67);
+insert into t (id,a) values (552,68);
+insert into t (id,a) values (552,69);
+insert into t (id,a) values (552,70);
+insert into t (id,a) values (552,71);
+insert into t (id,a) values (552,72);
+insert into t (id,a) values (552,73);
+insert into t (id,a) values (552,74);
+insert into t (id,a) values (552,75);
+insert into t (id,a) values (552,76);
+insert into t (id,a) values (552,77);
+insert into t (id,a) values (552,78);
+insert into t (id,a) values (552,79);
+insert into t (id,a) values (552,80);
+insert into t (id,a) values (552,81);
+insert into t (id,a) values (552,82);
+insert into t (id,a) values (552,83);
+insert into t (id,a) values (552,84);
+insert into t (id,a) values (552,85);
+insert into t (id,a) values (552,86);
+insert into t (id,a) values (552,87);
+insert into t (id,a) values (552,88);
+insert into t (id,a) values (552,89);
+insert into t (id,a) values (552,90);
+insert into t (id,a) values (552,91);
+insert into t (id,a) values (552,92);
+insert into t (id,a) values (552,93);
+insert into t (id,a) values (552,94);
+insert into t (id,a) values (552,95);
+insert into t (id,a) values (552,96);
+insert into t (id,a) values (552,97);
+insert into t (id,a) values (552,98);
+insert into t (id,a) values (552,99);
+insert into t (id,a) values (553,0);
+insert into t (id,a) values (553,1);
+insert into t (id,a) values (553,2);
+insert into t (id,a) values (553,3);
+insert into t (id,a) values (553,4);
+insert into t (id,a) values (553,5);
+insert into t (id,a) values (553,6);
+insert into t (id,a) values (553,7);
+insert into t (id,a) values (553,8);
+insert into t (id,a) values (553,9);
+insert into t (id,a) values (553,10);
+insert into t (id,a) values (553,11);
+insert into t (id,a) values (553,12);
+insert into t (id,a) values (553,13);
+insert into t (id,a) values (553,14);
+insert into t (id,a) values (553,15);
+insert into t (id,a) values (553,16);
+insert into t (id,a) values (553,17);
+insert into t (id,a) values (553,18);
+insert into t (id,a) values (553,19);
+insert into t (id,a) values (553,20);
+insert into t (id,a) values (553,21);
+insert into t (id,a) values (553,22);
+insert into t (id,a) values (553,23);
+insert into t (id,a) values (553,24);
+insert into t (id,a) values (553,25);
+insert into t (id,a) values (553,26);
+insert into t (id,a) values (553,27);
+insert into t (id,a) values (553,28);
+insert into t (id,a) values (553,29);
+insert into t (id,a) values (553,30);
+insert into t (id,a) values (553,31);
+insert into t (id,a) values (553,32);
+insert into t (id,a) values (553,33);
+insert into t (id,a) values (553,34);
+insert into t (id,a) values (553,35);
+insert into t (id,a) values (553,36);
+insert into t (id,a) values (553,37);
+insert into t (id,a) values (553,38);
+insert into t (id,a) values (553,39);
+insert into t (id,a) values (553,40);
+insert into t (id,a) values (553,41);
+insert into t (id,a) values (553,42);
+insert into t (id,a) values (553,43);
+insert into t (id,a) values (553,44);
+insert into t (id,a) values (553,45);
+insert into t (id,a) values (553,46);
+insert into t (id,a) values (553,47);
+insert into t (id,a) values (553,48);
+insert into t (id,a) values (553,49);
+insert into t (id,a) values (553,50);
+insert into t (id,a) values (553,51);
+insert into t (id,a) values (553,52);
+insert into t (id,a) values (553,53);
+insert into t (id,a) values (553,54);
+insert into t (id,a) values (553,55);
+insert into t (id,a) values (553,56);
+insert into t (id,a) values (553,57);
+insert into t (id,a) values (553,58);
+insert into t (id,a) values (553,59);
+insert into t (id,a) values (553,60);
+insert into t (id,a) values (553,61);
+insert into t (id,a) values (553,62);
+insert into t (id,a) values (553,63);
+insert into t (id,a) values (553,64);
+insert into t (id,a) values (553,65);
+insert into t (id,a) values (553,66);
+insert into t (id,a) values (553,67);
+insert into t (id,a) values (553,68);
+insert into t (id,a) values (553,69);
+insert into t (id,a) values (553,70);
+insert into t (id,a) values (553,71);
+insert into t (id,a) values (553,72);
+insert into t (id,a) values (553,73);
+insert into t (id,a) values (553,74);
+insert into t (id,a) values (553,75);
+insert into t (id,a) values (553,76);
+insert into t (id,a) values (553,77);
+insert into t (id,a) values (553,78);
+insert into t (id,a) values (553,79);
+insert into t (id,a) values (553,80);
+insert into t (id,a) values (553,81);
+insert into t (id,a) values (553,82);
+insert into t (id,a) values (553,83);
+insert into t (id,a) values (553,84);
+insert into t (id,a) values (553,85);
+insert into t (id,a) values (553,86);
+insert into t (id,a) values (553,87);
+insert into t (id,a) values (553,88);
+insert into t (id,a) values (553,89);
+insert into t (id,a) values (553,90);
+insert into t (id,a) values (553,91);
+insert into t (id,a) values (553,92);
+insert into t (id,a) values (553,93);
+insert into t (id,a) values (553,94);
+insert into t (id,a) values (553,95);
+insert into t (id,a) values (553,96);
+insert into t (id,a) values (553,97);
+insert into t (id,a) values (553,98);
+insert into t (id,a) values (553,99);
+insert into t (id,a) values (554,0);
+insert into t (id,a) values (554,1);
+insert into t (id,a) values (554,2);
+insert into t (id,a) values (554,3);
+insert into t (id,a) values (554,4);
+insert into t (id,a) values (554,5);
+insert into t (id,a) values (554,6);
+insert into t (id,a) values (554,7);
+insert into t (id,a) values (554,8);
+insert into t (id,a) values (554,9);
+insert into t (id,a) values (554,10);
+insert into t (id,a) values (554,11);
+insert into t (id,a) values (554,12);
+insert into t (id,a) values (554,13);
+insert into t (id,a) values (554,14);
+insert into t (id,a) values (554,15);
+insert into t (id,a) values (554,16);
+insert into t (id,a) values (554,17);
+insert into t (id,a) values (554,18);
+insert into t (id,a) values (554,19);
+insert into t (id,a) values (554,20);
+insert into t (id,a) values (554,21);
+insert into t (id,a) values (554,22);
+insert into t (id,a) values (554,23);
+insert into t (id,a) values (554,24);
+insert into t (id,a) values (554,25);
+insert into t (id,a) values (554,26);
+insert into t (id,a) values (554,27);
+insert into t (id,a) values (554,28);
+insert into t (id,a) values (554,29);
+insert into t (id,a) values (554,30);
+insert into t (id,a) values (554,31);
+insert into t (id,a) values (554,32);
+insert into t (id,a) values (554,33);
+insert into t (id,a) values (554,34);
+insert into t (id,a) values (554,35);
+insert into t (id,a) values (554,36);
+insert into t (id,a) values (554,37);
+insert into t (id,a) values (554,38);
+insert into t (id,a) values (554,39);
+insert into t (id,a) values (554,40);
+insert into t (id,a) values (554,41);
+insert into t (id,a) values (554,42);
+insert into t (id,a) values (554,43);
+insert into t (id,a) values (554,44);
+insert into t (id,a) values (554,45);
+insert into t (id,a) values (554,46);
+insert into t (id,a) values (554,47);
+insert into t (id,a) values (554,48);
+insert into t (id,a) values (554,49);
+insert into t (id,a) values (554,50);
+insert into t (id,a) values (554,51);
+insert into t (id,a) values (554,52);
+insert into t (id,a) values (554,53);
+insert into t (id,a) values (554,54);
+insert into t (id,a) values (554,55);
+insert into t (id,a) values (554,56);
+insert into t (id,a) values (554,57);
+insert into t (id,a) values (554,58);
+insert into t (id,a) values (554,59);
+insert into t (id,a) values (554,60);
+insert into t (id,a) values (554,61);
+insert into t (id,a) values (554,62);
+insert into t (id,a) values (554,63);
+insert into t (id,a) values (554,64);
+insert into t (id,a) values (554,65);
+insert into t (id,a) values (554,66);
+insert into t (id,a) values (554,67);
+insert into t (id,a) values (554,68);
+insert into t (id,a) values (554,69);
+insert into t (id,a) values (554,70);
+insert into t (id,a) values (554,71);
+insert into t (id,a) values (554,72);
+insert into t (id,a) values (554,73);
+insert into t (id,a) values (554,74);
+insert into t (id,a) values (554,75);
+insert into t (id,a) values (554,76);
+insert into t (id,a) values (554,77);
+insert into t (id,a) values (554,78);
+insert into t (id,a) values (554,79);
+insert into t (id,a) values (554,80);
+insert into t (id,a) values (554,81);
+insert into t (id,a) values (554,82);
+insert into t (id,a) values (554,83);
+insert into t (id,a) values (554,84);
+insert into t (id,a) values (554,85);
+insert into t (id,a) values (554,86);
+insert into t (id,a) values (554,87);
+insert into t (id,a) values (554,88);
+insert into t (id,a) values (554,89);
+insert into t (id,a) values (554,90);
+insert into t (id,a) values (554,91);
+insert into t (id,a) values (554,92);
+insert into t (id,a) values (554,93);
+insert into t (id,a) values (554,94);
+insert into t (id,a) values (554,95);
+insert into t (id,a) values (554,96);
+insert into t (id,a) values (554,97);
+insert into t (id,a) values (554,98);
+insert into t (id,a) values (554,99);
+insert into t (id,a) values (555,0);
+insert into t (id,a) values (555,1);
+insert into t (id,a) values (555,2);
+insert into t (id,a) values (555,3);
+insert into t (id,a) values (555,4);
+insert into t (id,a) values (555,5);
+insert into t (id,a) values (555,6);
+insert into t (id,a) values (555,7);
+insert into t (id,a) values (555,8);
+insert into t (id,a) values (555,9);
+insert into t (id,a) values (555,10);
+insert into t (id,a) values (555,11);
+insert into t (id,a) values (555,12);
+insert into t (id,a) values (555,13);
+insert into t (id,a) values (555,14);
+insert into t (id,a) values (555,15);
+insert into t (id,a) values (555,16);
+insert into t (id,a) values (555,17);
+insert into t (id,a) values (555,18);
+insert into t (id,a) values (555,19);
+insert into t (id,a) values (555,20);
+insert into t (id,a) values (555,21);
+insert into t (id,a) values (555,22);
+insert into t (id,a) values (555,23);
+insert into t (id,a) values (555,24);
+insert into t (id,a) values (555,25);
+insert into t (id,a) values (555,26);
+insert into t (id,a) values (555,27);
+insert into t (id,a) values (555,28);
+insert into t (id,a) values (555,29);
+insert into t (id,a) values (555,30);
+insert into t (id,a) values (555,31);
+insert into t (id,a) values (555,32);
+insert into t (id,a) values (555,33);
+insert into t (id,a) values (555,34);
+insert into t (id,a) values (555,35);
+insert into t (id,a) values (555,36);
+insert into t (id,a) values (555,37);
+insert into t (id,a) values (555,38);
+insert into t (id,a) values (555,39);
+insert into t (id,a) values (555,40);
+insert into t (id,a) values (555,41);
+insert into t (id,a) values (555,42);
+insert into t (id,a) values (555,43);
+insert into t (id,a) values (555,44);
+insert into t (id,a) values (555,45);
+insert into t (id,a) values (555,46);
+insert into t (id,a) values (555,47);
+insert into t (id,a) values (555,48);
+insert into t (id,a) values (555,49);
+insert into t (id,a) values (555,50);
+insert into t (id,a) values (555,51);
+insert into t (id,a) values (555,52);
+insert into t (id,a) values (555,53);
+insert into t (id,a) values (555,54);
+insert into t (id,a) values (555,55);
+insert into t (id,a) values (555,56);
+insert into t (id,a) values (555,57);
+insert into t (id,a) values (555,58);
+insert into t (id,a) values (555,59);
+insert into t (id,a) values (555,60);
+insert into t (id,a) values (555,61);
+insert into t (id,a) values (555,62);
+insert into t (id,a) values (555,63);
+insert into t (id,a) values (555,64);
+insert into t (id,a) values (555,65);
+insert into t (id,a) values (555,66);
+insert into t (id,a) values (555,67);
+insert into t (id,a) values (555,68);
+insert into t (id,a) values (555,69);
+insert into t (id,a) values (555,70);
+insert into t (id,a) values (555,71);
+insert into t (id,a) values (555,72);
+insert into t (id,a) values (555,73);
+insert into t (id,a) values (555,74);
+insert into t (id,a) values (555,75);
+insert into t (id,a) values (555,76);
+insert into t (id,a) values (555,77);
+insert into t (id,a) values (555,78);
+insert into t (id,a) values (555,79);
+insert into t (id,a) values (555,80);
+insert into t (id,a) values (555,81);
+insert into t (id,a) values (555,82);
+insert into t (id,a) values (555,83);
+insert into t (id,a) values (555,84);
+insert into t (id,a) values (555,85);
+insert into t (id,a) values (555,86);
+insert into t (id,a) values (555,87);
+insert into t (id,a) values (555,88);
+insert into t (id,a) values (555,89);
+insert into t (id,a) values (555,90);
+insert into t (id,a) values (555,91);
+insert into t (id,a) values (555,92);
+insert into t (id,a) values (555,93);
+insert into t (id,a) values (555,94);
+insert into t (id,a) values (555,95);
+insert into t (id,a) values (555,96);
+insert into t (id,a) values (555,97);
+insert into t (id,a) values (555,98);
+insert into t (id,a) values (555,99);
+insert into t (id,a) values (556,0);
+insert into t (id,a) values (556,1);
+insert into t (id,a) values (556,2);
+insert into t (id,a) values (556,3);
+insert into t (id,a) values (556,4);
+insert into t (id,a) values (556,5);
+insert into t (id,a) values (556,6);
+insert into t (id,a) values (556,7);
+insert into t (id,a) values (556,8);
+insert into t (id,a) values (556,9);
+insert into t (id,a) values (556,10);
+insert into t (id,a) values (556,11);
+insert into t (id,a) values (556,12);
+insert into t (id,a) values (556,13);
+insert into t (id,a) values (556,14);
+insert into t (id,a) values (556,15);
+insert into t (id,a) values (556,16);
+insert into t (id,a) values (556,17);
+insert into t (id,a) values (556,18);
+insert into t (id,a) values (556,19);
+insert into t (id,a) values (556,20);
+insert into t (id,a) values (556,21);
+insert into t (id,a) values (556,22);
+insert into t (id,a) values (556,23);
+insert into t (id,a) values (556,24);
+insert into t (id,a) values (556,25);
+insert into t (id,a) values (556,26);
+insert into t (id,a) values (556,27);
+insert into t (id,a) values (556,28);
+insert into t (id,a) values (556,29);
+insert into t (id,a) values (556,30);
+insert into t (id,a) values (556,31);
+insert into t (id,a) values (556,32);
+insert into t (id,a) values (556,33);
+insert into t (id,a) values (556,34);
+insert into t (id,a) values (556,35);
+insert into t (id,a) values (556,36);
+insert into t (id,a) values (556,37);
+insert into t (id,a) values (556,38);
+insert into t (id,a) values (556,39);
+insert into t (id,a) values (556,40);
+insert into t (id,a) values (556,41);
+insert into t (id,a) values (556,42);
+insert into t (id,a) values (556,43);
+insert into t (id,a) values (556,44);
+insert into t (id,a) values (556,45);
+insert into t (id,a) values (556,46);
+insert into t (id,a) values (556,47);
+insert into t (id,a) values (556,48);
+insert into t (id,a) values (556,49);
+insert into t (id,a) values (556,50);
+insert into t (id,a) values (556,51);
+insert into t (id,a) values (556,52);
+insert into t (id,a) values (556,53);
+insert into t (id,a) values (556,54);
+insert into t (id,a) values (556,55);
+insert into t (id,a) values (556,56);
+insert into t (id,a) values (556,57);
+insert into t (id,a) values (556,58);
+insert into t (id,a) values (556,59);
+insert into t (id,a) values (556,60);
+insert into t (id,a) values (556,61);
+insert into t (id,a) values (556,62);
+insert into t (id,a) values (556,63);
+insert into t (id,a) values (556,64);
+insert into t (id,a) values (556,65);
+insert into t (id,a) values (556,66);
+insert into t (id,a) values (556,67);
+insert into t (id,a) values (556,68);
+insert into t (id,a) values (556,69);
+insert into t (id,a) values (556,70);
+insert into t (id,a) values (556,71);
+insert into t (id,a) values (556,72);
+insert into t (id,a) values (556,73);
+insert into t (id,a) values (556,74);
+insert into t (id,a) values (556,75);
+insert into t (id,a) values (556,76);
+insert into t (id,a) values (556,77);
+insert into t (id,a) values (556,78);
+insert into t (id,a) values (556,79);
+insert into t (id,a) values (556,80);
+insert into t (id,a) values (556,81);
+insert into t (id,a) values (556,82);
+insert into t (id,a) values (556,83);
+insert into t (id,a) values (556,84);
+insert into t (id,a) values (556,85);
+insert into t (id,a) values (556,86);
+insert into t (id,a) values (556,87);
+insert into t (id,a) values (556,88);
+insert into t (id,a) values (556,89);
+insert into t (id,a) values (556,90);
+insert into t (id,a) values (556,91);
+insert into t (id,a) values (556,92);
+insert into t (id,a) values (556,93);
+insert into t (id,a) values (556,94);
+insert into t (id,a) values (556,95);
+insert into t (id,a) values (556,96);
+insert into t (id,a) values (556,97);
+insert into t (id,a) values (556,98);
+insert into t (id,a) values (556,99);
+insert into t (id,a) values (557,0);
+insert into t (id,a) values (557,1);
+insert into t (id,a) values (557,2);
+insert into t (id,a) values (557,3);
+insert into t (id,a) values (557,4);
+insert into t (id,a) values (557,5);
+insert into t (id,a) values (557,6);
+insert into t (id,a) values (557,7);
+insert into t (id,a) values (557,8);
+insert into t (id,a) values (557,9);
+insert into t (id,a) values (557,10);
+insert into t (id,a) values (557,11);
+insert into t (id,a) values (557,12);
+insert into t (id,a) values (557,13);
+insert into t (id,a) values (557,14);
+insert into t (id,a) values (557,15);
+insert into t (id,a) values (557,16);
+insert into t (id,a) values (557,17);
+insert into t (id,a) values (557,18);
+insert into t (id,a) values (557,19);
+insert into t (id,a) values (557,20);
+insert into t (id,a) values (557,21);
+insert into t (id,a) values (557,22);
+insert into t (id,a) values (557,23);
+insert into t (id,a) values (557,24);
+insert into t (id,a) values (557,25);
+insert into t (id,a) values (557,26);
+insert into t (id,a) values (557,27);
+insert into t (id,a) values (557,28);
+insert into t (id,a) values (557,29);
+insert into t (id,a) values (557,30);
+insert into t (id,a) values (557,31);
+insert into t (id,a) values (557,32);
+insert into t (id,a) values (557,33);
+insert into t (id,a) values (557,34);
+insert into t (id,a) values (557,35);
+insert into t (id,a) values (557,36);
+insert into t (id,a) values (557,37);
+insert into t (id,a) values (557,38);
+insert into t (id,a) values (557,39);
+insert into t (id,a) values (557,40);
+insert into t (id,a) values (557,41);
+insert into t (id,a) values (557,42);
+insert into t (id,a) values (557,43);
+insert into t (id,a) values (557,44);
+insert into t (id,a) values (557,45);
+insert into t (id,a) values (557,46);
+insert into t (id,a) values (557,47);
+insert into t (id,a) values (557,48);
+insert into t (id,a) values (557,49);
+insert into t (id,a) values (557,50);
+insert into t (id,a) values (557,51);
+insert into t (id,a) values (557,52);
+insert into t (id,a) values (557,53);
+insert into t (id,a) values (557,54);
+insert into t (id,a) values (557,55);
+insert into t (id,a) values (557,56);
+insert into t (id,a) values (557,57);
+insert into t (id,a) values (557,58);
+insert into t (id,a) values (557,59);
+insert into t (id,a) values (557,60);
+insert into t (id,a) values (557,61);
+insert into t (id,a) values (557,62);
+insert into t (id,a) values (557,63);
+insert into t (id,a) values (557,64);
+insert into t (id,a) values (557,65);
+insert into t (id,a) values (557,66);
+insert into t (id,a) values (557,67);
+insert into t (id,a) values (557,68);
+insert into t (id,a) values (557,69);
+insert into t (id,a) values (557,70);
+insert into t (id,a) values (557,71);
+insert into t (id,a) values (557,72);
+insert into t (id,a) values (557,73);
+insert into t (id,a) values (557,74);
+insert into t (id,a) values (557,75);
+insert into t (id,a) values (557,76);
+insert into t (id,a) values (557,77);
+insert into t (id,a) values (557,78);
+insert into t (id,a) values (557,79);
+insert into t (id,a) values (557,80);
+insert into t (id,a) values (557,81);
+insert into t (id,a) values (557,82);
+insert into t (id,a) values (557,83);
+insert into t (id,a) values (557,84);
+insert into t (id,a) values (557,85);
+insert into t (id,a) values (557,86);
+insert into t (id,a) values (557,87);
+insert into t (id,a) values (557,88);
+insert into t (id,a) values (557,89);
+insert into t (id,a) values (557,90);
+insert into t (id,a) values (557,91);
+insert into t (id,a) values (557,92);
+insert into t (id,a) values (557,93);
+insert into t (id,a) values (557,94);
+insert into t (id,a) values (557,95);
+insert into t (id,a) values (557,96);
+insert into t (id,a) values (557,97);
+insert into t (id,a) values (557,98);
+insert into t (id,a) values (557,99);
+insert into t (id,a) values (558,0);
+insert into t (id,a) values (558,1);
+insert into t (id,a) values (558,2);
+insert into t (id,a) values (558,3);
+insert into t (id,a) values (558,4);
+insert into t (id,a) values (558,5);
+insert into t (id,a) values (558,6);
+insert into t (id,a) values (558,7);
+insert into t (id,a) values (558,8);
+insert into t (id,a) values (558,9);
+insert into t (id,a) values (558,10);
+insert into t (id,a) values (558,11);
+insert into t (id,a) values (558,12);
+insert into t (id,a) values (558,13);
+insert into t (id,a) values (558,14);
+insert into t (id,a) values (558,15);
+insert into t (id,a) values (558,16);
+insert into t (id,a) values (558,17);
+insert into t (id,a) values (558,18);
+insert into t (id,a) values (558,19);
+insert into t (id,a) values (558,20);
+insert into t (id,a) values (558,21);
+insert into t (id,a) values (558,22);
+insert into t (id,a) values (558,23);
+insert into t (id,a) values (558,24);
+insert into t (id,a) values (558,25);
+insert into t (id,a) values (558,26);
+insert into t (id,a) values (558,27);
+insert into t (id,a) values (558,28);
+insert into t (id,a) values (558,29);
+insert into t (id,a) values (558,30);
+insert into t (id,a) values (558,31);
+insert into t (id,a) values (558,32);
+insert into t (id,a) values (558,33);
+insert into t (id,a) values (558,34);
+insert into t (id,a) values (558,35);
+insert into t (id,a) values (558,36);
+insert into t (id,a) values (558,37);
+insert into t (id,a) values (558,38);
+insert into t (id,a) values (558,39);
+insert into t (id,a) values (558,40);
+insert into t (id,a) values (558,41);
+insert into t (id,a) values (558,42);
+insert into t (id,a) values (558,43);
+insert into t (id,a) values (558,44);
+insert into t (id,a) values (558,45);
+insert into t (id,a) values (558,46);
+insert into t (id,a) values (558,47);
+insert into t (id,a) values (558,48);
+insert into t (id,a) values (558,49);
+insert into t (id,a) values (558,50);
+insert into t (id,a) values (558,51);
+insert into t (id,a) values (558,52);
+insert into t (id,a) values (558,53);
+insert into t (id,a) values (558,54);
+insert into t (id,a) values (558,55);
+insert into t (id,a) values (558,56);
+insert into t (id,a) values (558,57);
+insert into t (id,a) values (558,58);
+insert into t (id,a) values (558,59);
+insert into t (id,a) values (558,60);
+insert into t (id,a) values (558,61);
+insert into t (id,a) values (558,62);
+insert into t (id,a) values (558,63);
+insert into t (id,a) values (558,64);
+insert into t (id,a) values (558,65);
+insert into t (id,a) values (558,66);
+insert into t (id,a) values (558,67);
+insert into t (id,a) values (558,68);
+insert into t (id,a) values (558,69);
+insert into t (id,a) values (558,70);
+insert into t (id,a) values (558,71);
+insert into t (id,a) values (558,72);
+insert into t (id,a) values (558,73);
+insert into t (id,a) values (558,74);
+insert into t (id,a) values (558,75);
+insert into t (id,a) values (558,76);
+insert into t (id,a) values (558,77);
+insert into t (id,a) values (558,78);
+insert into t (id,a) values (558,79);
+insert into t (id,a) values (558,80);
+insert into t (id,a) values (558,81);
+insert into t (id,a) values (558,82);
+insert into t (id,a) values (558,83);
+insert into t (id,a) values (558,84);
+insert into t (id,a) values (558,85);
+insert into t (id,a) values (558,86);
+insert into t (id,a) values (558,87);
+insert into t (id,a) values (558,88);
+insert into t (id,a) values (558,89);
+insert into t (id,a) values (558,90);
+insert into t (id,a) values (558,91);
+insert into t (id,a) values (558,92);
+insert into t (id,a) values (558,93);
+insert into t (id,a) values (558,94);
+insert into t (id,a) values (558,95);
+insert into t (id,a) values (558,96);
+insert into t (id,a) values (558,97);
+insert into t (id,a) values (558,98);
+insert into t (id,a) values (558,99);
+insert into t (id,a) values (559,0);
+insert into t (id,a) values (559,1);
+insert into t (id,a) values (559,2);
+insert into t (id,a) values (559,3);
+insert into t (id,a) values (559,4);
+insert into t (id,a) values (559,5);
+insert into t (id,a) values (559,6);
+insert into t (id,a) values (559,7);
+insert into t (id,a) values (559,8);
+insert into t (id,a) values (559,9);
+insert into t (id,a) values (559,10);
+insert into t (id,a) values (559,11);
+insert into t (id,a) values (559,12);
+insert into t (id,a) values (559,13);
+insert into t (id,a) values (559,14);
+insert into t (id,a) values (559,15);
+insert into t (id,a) values (559,16);
+insert into t (id,a) values (559,17);
+insert into t (id,a) values (559,18);
+insert into t (id,a) values (559,19);
+insert into t (id,a) values (559,20);
+insert into t (id,a) values (559,21);
+insert into t (id,a) values (559,22);
+insert into t (id,a) values (559,23);
+insert into t (id,a) values (559,24);
+insert into t (id,a) values (559,25);
+insert into t (id,a) values (559,26);
+insert into t (id,a) values (559,27);
+insert into t (id,a) values (559,28);
+insert into t (id,a) values (559,29);
+insert into t (id,a) values (559,30);
+insert into t (id,a) values (559,31);
+insert into t (id,a) values (559,32);
+insert into t (id,a) values (559,33);
+insert into t (id,a) values (559,34);
+insert into t (id,a) values (559,35);
+insert into t (id,a) values (559,36);
+insert into t (id,a) values (559,37);
+insert into t (id,a) values (559,38);
+insert into t (id,a) values (559,39);
+insert into t (id,a) values (559,40);
+insert into t (id,a) values (559,41);
+insert into t (id,a) values (559,42);
+insert into t (id,a) values (559,43);
+insert into t (id,a) values (559,44);
+insert into t (id,a) values (559,45);
+insert into t (id,a) values (559,46);
+insert into t (id,a) values (559,47);
+insert into t (id,a) values (559,48);
+insert into t (id,a) values (559,49);
+insert into t (id,a) values (559,50);
+insert into t (id,a) values (559,51);
+insert into t (id,a) values (559,52);
+insert into t (id,a) values (559,53);
+insert into t (id,a) values (559,54);
+insert into t (id,a) values (559,55);
+insert into t (id,a) values (559,56);
+insert into t (id,a) values (559,57);
+insert into t (id,a) values (559,58);
+insert into t (id,a) values (559,59);
+insert into t (id,a) values (559,60);
+insert into t (id,a) values (559,61);
+insert into t (id,a) values (559,62);
+insert into t (id,a) values (559,63);
+insert into t (id,a) values (559,64);
+insert into t (id,a) values (559,65);
+insert into t (id,a) values (559,66);
+insert into t (id,a) values (559,67);
+insert into t (id,a) values (559,68);
+insert into t (id,a) values (559,69);
+insert into t (id,a) values (559,70);
+insert into t (id,a) values (559,71);
+insert into t (id,a) values (559,72);
+insert into t (id,a) values (559,73);
+insert into t (id,a) values (559,74);
+insert into t (id,a) values (559,75);
+insert into t (id,a) values (559,76);
+insert into t (id,a) values (559,77);
+insert into t (id,a) values (559,78);
+insert into t (id,a) values (559,79);
+insert into t (id,a) values (559,80);
+insert into t (id,a) values (559,81);
+insert into t (id,a) values (559,82);
+insert into t (id,a) values (559,83);
+insert into t (id,a) values (559,84);
+insert into t (id,a) values (559,85);
+insert into t (id,a) values (559,86);
+insert into t (id,a) values (559,87);
+insert into t (id,a) values (559,88);
+insert into t (id,a) values (559,89);
+insert into t (id,a) values (559,90);
+insert into t (id,a) values (559,91);
+insert into t (id,a) values (559,92);
+insert into t (id,a) values (559,93);
+insert into t (id,a) values (559,94);
+insert into t (id,a) values (559,95);
+insert into t (id,a) values (559,96);
+insert into t (id,a) values (559,97);
+insert into t (id,a) values (559,98);
+insert into t (id,a) values (559,99);
+insert into t (id,a) values (560,0);
+insert into t (id,a) values (560,1);
+insert into t (id,a) values (560,2);
+insert into t (id,a) values (560,3);
+insert into t (id,a) values (560,4);
+insert into t (id,a) values (560,5);
+insert into t (id,a) values (560,6);
+insert into t (id,a) values (560,7);
+insert into t (id,a) values (560,8);
+insert into t (id,a) values (560,9);
+insert into t (id,a) values (560,10);
+insert into t (id,a) values (560,11);
+insert into t (id,a) values (560,12);
+insert into t (id,a) values (560,13);
+insert into t (id,a) values (560,14);
+insert into t (id,a) values (560,15);
+insert into t (id,a) values (560,16);
+insert into t (id,a) values (560,17);
+insert into t (id,a) values (560,18);
+insert into t (id,a) values (560,19);
+insert into t (id,a) values (560,20);
+insert into t (id,a) values (560,21);
+insert into t (id,a) values (560,22);
+insert into t (id,a) values (560,23);
+insert into t (id,a) values (560,24);
+insert into t (id,a) values (560,25);
+insert into t (id,a) values (560,26);
+insert into t (id,a) values (560,27);
+insert into t (id,a) values (560,28);
+insert into t (id,a) values (560,29);
+insert into t (id,a) values (560,30);
+insert into t (id,a) values (560,31);
+insert into t (id,a) values (560,32);
+insert into t (id,a) values (560,33);
+insert into t (id,a) values (560,34);
+insert into t (id,a) values (560,35);
+insert into t (id,a) values (560,36);
+insert into t (id,a) values (560,37);
+insert into t (id,a) values (560,38);
+insert into t (id,a) values (560,39);
+insert into t (id,a) values (560,40);
+insert into t (id,a) values (560,41);
+insert into t (id,a) values (560,42);
+insert into t (id,a) values (560,43);
+insert into t (id,a) values (560,44);
+insert into t (id,a) values (560,45);
+insert into t (id,a) values (560,46);
+insert into t (id,a) values (560,47);
+insert into t (id,a) values (560,48);
+insert into t (id,a) values (560,49);
+insert into t (id,a) values (560,50);
+insert into t (id,a) values (560,51);
+insert into t (id,a) values (560,52);
+insert into t (id,a) values (560,53);
+insert into t (id,a) values (560,54);
+insert into t (id,a) values (560,55);
+insert into t (id,a) values (560,56);
+insert into t (id,a) values (560,57);
+insert into t (id,a) values (560,58);
+insert into t (id,a) values (560,59);
+insert into t (id,a) values (560,60);
+insert into t (id,a) values (560,61);
+insert into t (id,a) values (560,62);
+insert into t (id,a) values (560,63);
+insert into t (id,a) values (560,64);
+insert into t (id,a) values (560,65);
+insert into t (id,a) values (560,66);
+insert into t (id,a) values (560,67);
+insert into t (id,a) values (560,68);
+insert into t (id,a) values (560,69);
+insert into t (id,a) values (560,70);
+insert into t (id,a) values (560,71);
+insert into t (id,a) values (560,72);
+insert into t (id,a) values (560,73);
+insert into t (id,a) values (560,74);
+insert into t (id,a) values (560,75);
+insert into t (id,a) values (560,76);
+insert into t (id,a) values (560,77);
+insert into t (id,a) values (560,78);
+insert into t (id,a) values (560,79);
+insert into t (id,a) values (560,80);
+insert into t (id,a) values (560,81);
+insert into t (id,a) values (560,82);
+insert into t (id,a) values (560,83);
+insert into t (id,a) values (560,84);
+insert into t (id,a) values (560,85);
+insert into t (id,a) values (560,86);
+insert into t (id,a) values (560,87);
+insert into t (id,a) values (560,88);
+insert into t (id,a) values (560,89);
+insert into t (id,a) values (560,90);
+insert into t (id,a) values (560,91);
+insert into t (id,a) values (560,92);
+insert into t (id,a) values (560,93);
+insert into t (id,a) values (560,94);
+insert into t (id,a) values (560,95);
+insert into t (id,a) values (560,96);
+insert into t (id,a) values (560,97);
+insert into t (id,a) values (560,98);
+insert into t (id,a) values (560,99);
+insert into t (id,a) values (561,0);
+insert into t (id,a) values (561,1);
+insert into t (id,a) values (561,2);
+insert into t (id,a) values (561,3);
+insert into t (id,a) values (561,4);
+insert into t (id,a) values (561,5);
+insert into t (id,a) values (561,6);
+insert into t (id,a) values (561,7);
+insert into t (id,a) values (561,8);
+insert into t (id,a) values (561,9);
+insert into t (id,a) values (561,10);
+insert into t (id,a) values (561,11);
+insert into t (id,a) values (561,12);
+insert into t (id,a) values (561,13);
+insert into t (id,a) values (561,14);
+insert into t (id,a) values (561,15);
+insert into t (id,a) values (561,16);
+insert into t (id,a) values (561,17);
+insert into t (id,a) values (561,18);
+insert into t (id,a) values (561,19);
+insert into t (id,a) values (561,20);
+insert into t (id,a) values (561,21);
+insert into t (id,a) values (561,22);
+insert into t (id,a) values (561,23);
+insert into t (id,a) values (561,24);
+insert into t (id,a) values (561,25);
+insert into t (id,a) values (561,26);
+insert into t (id,a) values (561,27);
+insert into t (id,a) values (561,28);
+insert into t (id,a) values (561,29);
+insert into t (id,a) values (561,30);
+insert into t (id,a) values (561,31);
+insert into t (id,a) values (561,32);
+insert into t (id,a) values (561,33);
+insert into t (id,a) values (561,34);
+insert into t (id,a) values (561,35);
+insert into t (id,a) values (561,36);
+insert into t (id,a) values (561,37);
+insert into t (id,a) values (561,38);
+insert into t (id,a) values (561,39);
+insert into t (id,a) values (561,40);
+insert into t (id,a) values (561,41);
+insert into t (id,a) values (561,42);
+insert into t (id,a) values (561,43);
+insert into t (id,a) values (561,44);
+insert into t (id,a) values (561,45);
+insert into t (id,a) values (561,46);
+insert into t (id,a) values (561,47);
+insert into t (id,a) values (561,48);
+insert into t (id,a) values (561,49);
+insert into t (id,a) values (561,50);
+insert into t (id,a) values (561,51);
+insert into t (id,a) values (561,52);
+insert into t (id,a) values (561,53);
+insert into t (id,a) values (561,54);
+insert into t (id,a) values (561,55);
+insert into t (id,a) values (561,56);
+insert into t (id,a) values (561,57);
+insert into t (id,a) values (561,58);
+insert into t (id,a) values (561,59);
+insert into t (id,a) values (561,60);
+insert into t (id,a) values (561,61);
+insert into t (id,a) values (561,62);
+insert into t (id,a) values (561,63);
+insert into t (id,a) values (561,64);
+insert into t (id,a) values (561,65);
+insert into t (id,a) values (561,66);
+insert into t (id,a) values (561,67);
+insert into t (id,a) values (561,68);
+insert into t (id,a) values (561,69);
+insert into t (id,a) values (561,70);
+insert into t (id,a) values (561,71);
+insert into t (id,a) values (561,72);
+insert into t (id,a) values (561,73);
+insert into t (id,a) values (561,74);
+insert into t (id,a) values (561,75);
+insert into t (id,a) values (561,76);
+insert into t (id,a) values (561,77);
+insert into t (id,a) values (561,78);
+insert into t (id,a) values (561,79);
+insert into t (id,a) values (561,80);
+insert into t (id,a) values (561,81);
+insert into t (id,a) values (561,82);
+insert into t (id,a) values (561,83);
+insert into t (id,a) values (561,84);
+insert into t (id,a) values (561,85);
+insert into t (id,a) values (561,86);
+insert into t (id,a) values (561,87);
+insert into t (id,a) values (561,88);
+insert into t (id,a) values (561,89);
+insert into t (id,a) values (561,90);
+insert into t (id,a) values (561,91);
+insert into t (id,a) values (561,92);
+insert into t (id,a) values (561,93);
+insert into t (id,a) values (561,94);
+insert into t (id,a) values (561,95);
+insert into t (id,a) values (561,96);
+insert into t (id,a) values (561,97);
+insert into t (id,a) values (561,98);
+insert into t (id,a) values (561,99);
+insert into t (id,a) values (562,0);
+insert into t (id,a) values (562,1);
+insert into t (id,a) values (562,2);
+insert into t (id,a) values (562,3);
+insert into t (id,a) values (562,4);
+insert into t (id,a) values (562,5);
+insert into t (id,a) values (562,6);
+insert into t (id,a) values (562,7);
+insert into t (id,a) values (562,8);
+insert into t (id,a) values (562,9);
+insert into t (id,a) values (562,10);
+insert into t (id,a) values (562,11);
+insert into t (id,a) values (562,12);
+insert into t (id,a) values (562,13);
+insert into t (id,a) values (562,14);
+insert into t (id,a) values (562,15);
+insert into t (id,a) values (562,16);
+insert into t (id,a) values (562,17);
+insert into t (id,a) values (562,18);
+insert into t (id,a) values (562,19);
+insert into t (id,a) values (562,20);
+insert into t (id,a) values (562,21);
+insert into t (id,a) values (562,22);
+insert into t (id,a) values (562,23);
+insert into t (id,a) values (562,24);
+insert into t (id,a) values (562,25);
+insert into t (id,a) values (562,26);
+insert into t (id,a) values (562,27);
+insert into t (id,a) values (562,28);
+insert into t (id,a) values (562,29);
+insert into t (id,a) values (562,30);
+insert into t (id,a) values (562,31);
+insert into t (id,a) values (562,32);
+insert into t (id,a) values (562,33);
+insert into t (id,a) values (562,34);
+insert into t (id,a) values (562,35);
+insert into t (id,a) values (562,36);
+insert into t (id,a) values (562,37);
+insert into t (id,a) values (562,38);
+insert into t (id,a) values (562,39);
+insert into t (id,a) values (562,40);
+insert into t (id,a) values (562,41);
+insert into t (id,a) values (562,42);
+insert into t (id,a) values (562,43);
+insert into t (id,a) values (562,44);
+insert into t (id,a) values (562,45);
+insert into t (id,a) values (562,46);
+insert into t (id,a) values (562,47);
+insert into t (id,a) values (562,48);
+insert into t (id,a) values (562,49);
+insert into t (id,a) values (562,50);
+insert into t (id,a) values (562,51);
+insert into t (id,a) values (562,52);
+insert into t (id,a) values (562,53);
+insert into t (id,a) values (562,54);
+insert into t (id,a) values (562,55);
+insert into t (id,a) values (562,56);
+insert into t (id,a) values (562,57);
+insert into t (id,a) values (562,58);
+insert into t (id,a) values (562,59);
+insert into t (id,a) values (562,60);
+insert into t (id,a) values (562,61);
+insert into t (id,a) values (562,62);
+insert into t (id,a) values (562,63);
+insert into t (id,a) values (562,64);
+insert into t (id,a) values (562,65);
+insert into t (id,a) values (562,66);
+insert into t (id,a) values (562,67);
+insert into t (id,a) values (562,68);
+insert into t (id,a) values (562,69);
+insert into t (id,a) values (562,70);
+insert into t (id,a) values (562,71);
+insert into t (id,a) values (562,72);
+insert into t (id,a) values (562,73);
+insert into t (id,a) values (562,74);
+insert into t (id,a) values (562,75);
+insert into t (id,a) values (562,76);
+insert into t (id,a) values (562,77);
+insert into t (id,a) values (562,78);
+insert into t (id,a) values (562,79);
+insert into t (id,a) values (562,80);
+insert into t (id,a) values (562,81);
+insert into t (id,a) values (562,82);
+insert into t (id,a) values (562,83);
+insert into t (id,a) values (562,84);
+insert into t (id,a) values (562,85);
+insert into t (id,a) values (562,86);
+insert into t (id,a) values (562,87);
+insert into t (id,a) values (562,88);
+insert into t (id,a) values (562,89);
+insert into t (id,a) values (562,90);
+insert into t (id,a) values (562,91);
+insert into t (id,a) values (562,92);
+insert into t (id,a) values (562,93);
+insert into t (id,a) values (562,94);
+insert into t (id,a) values (562,95);
+insert into t (id,a) values (562,96);
+insert into t (id,a) values (562,97);
+insert into t (id,a) values (562,98);
+insert into t (id,a) values (562,99);
+insert into t (id,a) values (563,0);
+insert into t (id,a) values (563,1);
+insert into t (id,a) values (563,2);
+insert into t (id,a) values (563,3);
+insert into t (id,a) values (563,4);
+insert into t (id,a) values (563,5);
+insert into t (id,a) values (563,6);
+insert into t (id,a) values (563,7);
+insert into t (id,a) values (563,8);
+insert into t (id,a) values (563,9);
+insert into t (id,a) values (563,10);
+insert into t (id,a) values (563,11);
+insert into t (id,a) values (563,12);
+insert into t (id,a) values (563,13);
+insert into t (id,a) values (563,14);
+insert into t (id,a) values (563,15);
+insert into t (id,a) values (563,16);
+insert into t (id,a) values (563,17);
+insert into t (id,a) values (563,18);
+insert into t (id,a) values (563,19);
+insert into t (id,a) values (563,20);
+insert into t (id,a) values (563,21);
+insert into t (id,a) values (563,22);
+insert into t (id,a) values (563,23);
+insert into t (id,a) values (563,24);
+insert into t (id,a) values (563,25);
+insert into t (id,a) values (563,26);
+insert into t (id,a) values (563,27);
+insert into t (id,a) values (563,28);
+insert into t (id,a) values (563,29);
+insert into t (id,a) values (563,30);
+insert into t (id,a) values (563,31);
+insert into t (id,a) values (563,32);
+insert into t (id,a) values (563,33);
+insert into t (id,a) values (563,34);
+insert into t (id,a) values (563,35);
+insert into t (id,a) values (563,36);
+insert into t (id,a) values (563,37);
+insert into t (id,a) values (563,38);
+insert into t (id,a) values (563,39);
+insert into t (id,a) values (563,40);
+insert into t (id,a) values (563,41);
+insert into t (id,a) values (563,42);
+insert into t (id,a) values (563,43);
+insert into t (id,a) values (563,44);
+insert into t (id,a) values (563,45);
+insert into t (id,a) values (563,46);
+insert into t (id,a) values (563,47);
+insert into t (id,a) values (563,48);
+insert into t (id,a) values (563,49);
+insert into t (id,a) values (563,50);
+insert into t (id,a) values (563,51);
+insert into t (id,a) values (563,52);
+insert into t (id,a) values (563,53);
+insert into t (id,a) values (563,54);
+insert into t (id,a) values (563,55);
+insert into t (id,a) values (563,56);
+insert into t (id,a) values (563,57);
+insert into t (id,a) values (563,58);
+insert into t (id,a) values (563,59);
+insert into t (id,a) values (563,60);
+insert into t (id,a) values (563,61);
+insert into t (id,a) values (563,62);
+insert into t (id,a) values (563,63);
+insert into t (id,a) values (563,64);
+insert into t (id,a) values (563,65);
+insert into t (id,a) values (563,66);
+insert into t (id,a) values (563,67);
+insert into t (id,a) values (563,68);
+insert into t (id,a) values (563,69);
+insert into t (id,a) values (563,70);
+insert into t (id,a) values (563,71);
+insert into t (id,a) values (563,72);
+insert into t (id,a) values (563,73);
+insert into t (id,a) values (563,74);
+insert into t (id,a) values (563,75);
+insert into t (id,a) values (563,76);
+insert into t (id,a) values (563,77);
+insert into t (id,a) values (563,78);
+insert into t (id,a) values (563,79);
+insert into t (id,a) values (563,80);
+insert into t (id,a) values (563,81);
+insert into t (id,a) values (563,82);
+insert into t (id,a) values (563,83);
+insert into t (id,a) values (563,84);
+insert into t (id,a) values (563,85);
+insert into t (id,a) values (563,86);
+insert into t (id,a) values (563,87);
+insert into t (id,a) values (563,88);
+insert into t (id,a) values (563,89);
+insert into t (id,a) values (563,90);
+insert into t (id,a) values (563,91);
+insert into t (id,a) values (563,92);
+insert into t (id,a) values (563,93);
+insert into t (id,a) values (563,94);
+insert into t (id,a) values (563,95);
+insert into t (id,a) values (563,96);
+insert into t (id,a) values (563,97);
+insert into t (id,a) values (563,98);
+insert into t (id,a) values (563,99);
+insert into t (id,a) values (564,0);
+insert into t (id,a) values (564,1);
+insert into t (id,a) values (564,2);
+insert into t (id,a) values (564,3);
+insert into t (id,a) values (564,4);
+insert into t (id,a) values (564,5);
+insert into t (id,a) values (564,6);
+insert into t (id,a) values (564,7);
+insert into t (id,a) values (564,8);
+insert into t (id,a) values (564,9);
+insert into t (id,a) values (564,10);
+insert into t (id,a) values (564,11);
+insert into t (id,a) values (564,12);
+insert into t (id,a) values (564,13);
+insert into t (id,a) values (564,14);
+insert into t (id,a) values (564,15);
+insert into t (id,a) values (564,16);
+insert into t (id,a) values (564,17);
+insert into t (id,a) values (564,18);
+insert into t (id,a) values (564,19);
+insert into t (id,a) values (564,20);
+insert into t (id,a) values (564,21);
+insert into t (id,a) values (564,22);
+insert into t (id,a) values (564,23);
+insert into t (id,a) values (564,24);
+insert into t (id,a) values (564,25);
+insert into t (id,a) values (564,26);
+insert into t (id,a) values (564,27);
+insert into t (id,a) values (564,28);
+insert into t (id,a) values (564,29);
+insert into t (id,a) values (564,30);
+insert into t (id,a) values (564,31);
+insert into t (id,a) values (564,32);
+insert into t (id,a) values (564,33);
+insert into t (id,a) values (564,34);
+insert into t (id,a) values (564,35);
+insert into t (id,a) values (564,36);
+insert into t (id,a) values (564,37);
+insert into t (id,a) values (564,38);
+insert into t (id,a) values (564,39);
+insert into t (id,a) values (564,40);
+insert into t (id,a) values (564,41);
+insert into t (id,a) values (564,42);
+insert into t (id,a) values (564,43);
+insert into t (id,a) values (564,44);
+insert into t (id,a) values (564,45);
+insert into t (id,a) values (564,46);
+insert into t (id,a) values (564,47);
+insert into t (id,a) values (564,48);
+insert into t (id,a) values (564,49);
+insert into t (id,a) values (564,50);
+insert into t (id,a) values (564,51);
+insert into t (id,a) values (564,52);
+insert into t (id,a) values (564,53);
+insert into t (id,a) values (564,54);
+insert into t (id,a) values (564,55);
+insert into t (id,a) values (564,56);
+insert into t (id,a) values (564,57);
+insert into t (id,a) values (564,58);
+insert into t (id,a) values (564,59);
+insert into t (id,a) values (564,60);
+insert into t (id,a) values (564,61);
+insert into t (id,a) values (564,62);
+insert into t (id,a) values (564,63);
+insert into t (id,a) values (564,64);
+insert into t (id,a) values (564,65);
+insert into t (id,a) values (564,66);
+insert into t (id,a) values (564,67);
+insert into t (id,a) values (564,68);
+insert into t (id,a) values (564,69);
+insert into t (id,a) values (564,70);
+insert into t (id,a) values (564,71);
+insert into t (id,a) values (564,72);
+insert into t (id,a) values (564,73);
+insert into t (id,a) values (564,74);
+insert into t (id,a) values (564,75);
+insert into t (id,a) values (564,76);
+insert into t (id,a) values (564,77);
+insert into t (id,a) values (564,78);
+insert into t (id,a) values (564,79);
+insert into t (id,a) values (564,80);
+insert into t (id,a) values (564,81);
+insert into t (id,a) values (564,82);
+insert into t (id,a) values (564,83);
+insert into t (id,a) values (564,84);
+insert into t (id,a) values (564,85);
+insert into t (id,a) values (564,86);
+insert into t (id,a) values (564,87);
+insert into t (id,a) values (564,88);
+insert into t (id,a) values (564,89);
+insert into t (id,a) values (564,90);
+insert into t (id,a) values (564,91);
+insert into t (id,a) values (564,92);
+insert into t (id,a) values (564,93);
+insert into t (id,a) values (564,94);
+insert into t (id,a) values (564,95);
+insert into t (id,a) values (564,96);
+insert into t (id,a) values (564,97);
+insert into t (id,a) values (564,98);
+insert into t (id,a) values (564,99);
+insert into t (id,a) values (565,0);
+insert into t (id,a) values (565,1);
+insert into t (id,a) values (565,2);
+insert into t (id,a) values (565,3);
+insert into t (id,a) values (565,4);
+insert into t (id,a) values (565,5);
+insert into t (id,a) values (565,6);
+insert into t (id,a) values (565,7);
+insert into t (id,a) values (565,8);
+insert into t (id,a) values (565,9);
+insert into t (id,a) values (565,10);
+insert into t (id,a) values (565,11);
+insert into t (id,a) values (565,12);
+insert into t (id,a) values (565,13);
+insert into t (id,a) values (565,14);
+insert into t (id,a) values (565,15);
+insert into t (id,a) values (565,16);
+insert into t (id,a) values (565,17);
+insert into t (id,a) values (565,18);
+insert into t (id,a) values (565,19);
+insert into t (id,a) values (565,20);
+insert into t (id,a) values (565,21);
+insert into t (id,a) values (565,22);
+insert into t (id,a) values (565,23);
+insert into t (id,a) values (565,24);
+insert into t (id,a) values (565,25);
+insert into t (id,a) values (565,26);
+insert into t (id,a) values (565,27);
+insert into t (id,a) values (565,28);
+insert into t (id,a) values (565,29);
+insert into t (id,a) values (565,30);
+insert into t (id,a) values (565,31);
+insert into t (id,a) values (565,32);
+insert into t (id,a) values (565,33);
+insert into t (id,a) values (565,34);
+insert into t (id,a) values (565,35);
+insert into t (id,a) values (565,36);
+insert into t (id,a) values (565,37);
+insert into t (id,a) values (565,38);
+insert into t (id,a) values (565,39);
+insert into t (id,a) values (565,40);
+insert into t (id,a) values (565,41);
+insert into t (id,a) values (565,42);
+insert into t (id,a) values (565,43);
+insert into t (id,a) values (565,44);
+insert into t (id,a) values (565,45);
+insert into t (id,a) values (565,46);
+insert into t (id,a) values (565,47);
+insert into t (id,a) values (565,48);
+insert into t (id,a) values (565,49);
+insert into t (id,a) values (565,50);
+insert into t (id,a) values (565,51);
+insert into t (id,a) values (565,52);
+insert into t (id,a) values (565,53);
+insert into t (id,a) values (565,54);
+insert into t (id,a) values (565,55);
+insert into t (id,a) values (565,56);
+insert into t (id,a) values (565,57);
+insert into t (id,a) values (565,58);
+insert into t (id,a) values (565,59);
+insert into t (id,a) values (565,60);
+insert into t (id,a) values (565,61);
+insert into t (id,a) values (565,62);
+insert into t (id,a) values (565,63);
+insert into t (id,a) values (565,64);
+insert into t (id,a) values (565,65);
+insert into t (id,a) values (565,66);
+insert into t (id,a) values (565,67);
+insert into t (id,a) values (565,68);
+insert into t (id,a) values (565,69);
+insert into t (id,a) values (565,70);
+insert into t (id,a) values (565,71);
+insert into t (id,a) values (565,72);
+insert into t (id,a) values (565,73);
+insert into t (id,a) values (565,74);
+insert into t (id,a) values (565,75);
+insert into t (id,a) values (565,76);
+insert into t (id,a) values (565,77);
+insert into t (id,a) values (565,78);
+insert into t (id,a) values (565,79);
+insert into t (id,a) values (565,80);
+insert into t (id,a) values (565,81);
+insert into t (id,a) values (565,82);
+insert into t (id,a) values (565,83);
+insert into t (id,a) values (565,84);
+insert into t (id,a) values (565,85);
+insert into t (id,a) values (565,86);
+insert into t (id,a) values (565,87);
+insert into t (id,a) values (565,88);
+insert into t (id,a) values (565,89);
+insert into t (id,a) values (565,90);
+insert into t (id,a) values (565,91);
+insert into t (id,a) values (565,92);
+insert into t (id,a) values (565,93);
+insert into t (id,a) values (565,94);
+insert into t (id,a) values (565,95);
+insert into t (id,a) values (565,96);
+insert into t (id,a) values (565,97);
+insert into t (id,a) values (565,98);
+insert into t (id,a) values (565,99);
+insert into t (id,a) values (566,0);
+insert into t (id,a) values (566,1);
+insert into t (id,a) values (566,2);
+insert into t (id,a) values (566,3);
+insert into t (id,a) values (566,4);
+insert into t (id,a) values (566,5);
+insert into t (id,a) values (566,6);
+insert into t (id,a) values (566,7);
+insert into t (id,a) values (566,8);
+insert into t (id,a) values (566,9);
+insert into t (id,a) values (566,10);
+insert into t (id,a) values (566,11);
+insert into t (id,a) values (566,12);
+insert into t (id,a) values (566,13);
+insert into t (id,a) values (566,14);
+insert into t (id,a) values (566,15);
+insert into t (id,a) values (566,16);
+insert into t (id,a) values (566,17);
+insert into t (id,a) values (566,18);
+insert into t (id,a) values (566,19);
+insert into t (id,a) values (566,20);
+insert into t (id,a) values (566,21);
+insert into t (id,a) values (566,22);
+insert into t (id,a) values (566,23);
+insert into t (id,a) values (566,24);
+insert into t (id,a) values (566,25);
+insert into t (id,a) values (566,26);
+insert into t (id,a) values (566,27);
+insert into t (id,a) values (566,28);
+insert into t (id,a) values (566,29);
+insert into t (id,a) values (566,30);
+insert into t (id,a) values (566,31);
+insert into t (id,a) values (566,32);
+insert into t (id,a) values (566,33);
+insert into t (id,a) values (566,34);
+insert into t (id,a) values (566,35);
+insert into t (id,a) values (566,36);
+insert into t (id,a) values (566,37);
+insert into t (id,a) values (566,38);
+insert into t (id,a) values (566,39);
+insert into t (id,a) values (566,40);
+insert into t (id,a) values (566,41);
+insert into t (id,a) values (566,42);
+insert into t (id,a) values (566,43);
+insert into t (id,a) values (566,44);
+insert into t (id,a) values (566,45);
+insert into t (id,a) values (566,46);
+insert into t (id,a) values (566,47);
+insert into t (id,a) values (566,48);
+insert into t (id,a) values (566,49);
+insert into t (id,a) values (566,50);
+insert into t (id,a) values (566,51);
+insert into t (id,a) values (566,52);
+insert into t (id,a) values (566,53);
+insert into t (id,a) values (566,54);
+insert into t (id,a) values (566,55);
+insert into t (id,a) values (566,56);
+insert into t (id,a) values (566,57);
+insert into t (id,a) values (566,58);
+insert into t (id,a) values (566,59);
+insert into t (id,a) values (566,60);
+insert into t (id,a) values (566,61);
+insert into t (id,a) values (566,62);
+insert into t (id,a) values (566,63);
+insert into t (id,a) values (566,64);
+insert into t (id,a) values (566,65);
+insert into t (id,a) values (566,66);
+insert into t (id,a) values (566,67);
+insert into t (id,a) values (566,68);
+insert into t (id,a) values (566,69);
+insert into t (id,a) values (566,70);
+insert into t (id,a) values (566,71);
+insert into t (id,a) values (566,72);
+insert into t (id,a) values (566,73);
+insert into t (id,a) values (566,74);
+insert into t (id,a) values (566,75);
+insert into t (id,a) values (566,76);
+insert into t (id,a) values (566,77);
+insert into t (id,a) values (566,78);
+insert into t (id,a) values (566,79);
+insert into t (id,a) values (566,80);
+insert into t (id,a) values (566,81);
+insert into t (id,a) values (566,82);
+insert into t (id,a) values (566,83);
+insert into t (id,a) values (566,84);
+insert into t (id,a) values (566,85);
+insert into t (id,a) values (566,86);
+insert into t (id,a) values (566,87);
+insert into t (id,a) values (566,88);
+insert into t (id,a) values (566,89);
+insert into t (id,a) values (566,90);
+insert into t (id,a) values (566,91);
+insert into t (id,a) values (566,92);
+insert into t (id,a) values (566,93);
+insert into t (id,a) values (566,94);
+insert into t (id,a) values (566,95);
+insert into t (id,a) values (566,96);
+insert into t (id,a) values (566,97);
+insert into t (id,a) values (566,98);
+insert into t (id,a) values (566,99);
+insert into t (id,a) values (567,0);
+insert into t (id,a) values (567,1);
+insert into t (id,a) values (567,2);
+insert into t (id,a) values (567,3);
+insert into t (id,a) values (567,4);
+insert into t (id,a) values (567,5);
+insert into t (id,a) values (567,6);
+insert into t (id,a) values (567,7);
+insert into t (id,a) values (567,8);
+insert into t (id,a) values (567,9);
+insert into t (id,a) values (567,10);
+insert into t (id,a) values (567,11);
+insert into t (id,a) values (567,12);
+insert into t (id,a) values (567,13);
+insert into t (id,a) values (567,14);
+insert into t (id,a) values (567,15);
+insert into t (id,a) values (567,16);
+insert into t (id,a) values (567,17);
+insert into t (id,a) values (567,18);
+insert into t (id,a) values (567,19);
+insert into t (id,a) values (567,20);
+insert into t (id,a) values (567,21);
+insert into t (id,a) values (567,22);
+insert into t (id,a) values (567,23);
+insert into t (id,a) values (567,24);
+insert into t (id,a) values (567,25);
+insert into t (id,a) values (567,26);
+insert into t (id,a) values (567,27);
+insert into t (id,a) values (567,28);
+insert into t (id,a) values (567,29);
+insert into t (id,a) values (567,30);
+insert into t (id,a) values (567,31);
+insert into t (id,a) values (567,32);
+insert into t (id,a) values (567,33);
+insert into t (id,a) values (567,34);
+insert into t (id,a) values (567,35);
+insert into t (id,a) values (567,36);
+insert into t (id,a) values (567,37);
+insert into t (id,a) values (567,38);
+insert into t (id,a) values (567,39);
+insert into t (id,a) values (567,40);
+insert into t (id,a) values (567,41);
+insert into t (id,a) values (567,42);
+insert into t (id,a) values (567,43);
+insert into t (id,a) values (567,44);
+insert into t (id,a) values (567,45);
+insert into t (id,a) values (567,46);
+insert into t (id,a) values (567,47);
+insert into t (id,a) values (567,48);
+insert into t (id,a) values (567,49);
+insert into t (id,a) values (567,50);
+insert into t (id,a) values (567,51);
+insert into t (id,a) values (567,52);
+insert into t (id,a) values (567,53);
+insert into t (id,a) values (567,54);
+insert into t (id,a) values (567,55);
+insert into t (id,a) values (567,56);
+insert into t (id,a) values (567,57);
+insert into t (id,a) values (567,58);
+insert into t (id,a) values (567,59);
+insert into t (id,a) values (567,60);
+insert into t (id,a) values (567,61);
+insert into t (id,a) values (567,62);
+insert into t (id,a) values (567,63);
+insert into t (id,a) values (567,64);
+insert into t (id,a) values (567,65);
+insert into t (id,a) values (567,66);
+insert into t (id,a) values (567,67);
+insert into t (id,a) values (567,68);
+insert into t (id,a) values (567,69);
+insert into t (id,a) values (567,70);
+insert into t (id,a) values (567,71);
+insert into t (id,a) values (567,72);
+insert into t (id,a) values (567,73);
+insert into t (id,a) values (567,74);
+insert into t (id,a) values (567,75);
+insert into t (id,a) values (567,76);
+insert into t (id,a) values (567,77);
+insert into t (id,a) values (567,78);
+insert into t (id,a) values (567,79);
+insert into t (id,a) values (567,80);
+insert into t (id,a) values (567,81);
+insert into t (id,a) values (567,82);
+insert into t (id,a) values (567,83);
+insert into t (id,a) values (567,84);
+insert into t (id,a) values (567,85);
+insert into t (id,a) values (567,86);
+insert into t (id,a) values (567,87);
+insert into t (id,a) values (567,88);
+insert into t (id,a) values (567,89);
+insert into t (id,a) values (567,90);
+insert into t (id,a) values (567,91);
+insert into t (id,a) values (567,92);
+insert into t (id,a) values (567,93);
+insert into t (id,a) values (567,94);
+insert into t (id,a) values (567,95);
+insert into t (id,a) values (567,96);
+insert into t (id,a) values (567,97);
+insert into t (id,a) values (567,98);
+insert into t (id,a) values (567,99);
+insert into t (id,a) values (568,0);
+insert into t (id,a) values (568,1);
+insert into t (id,a) values (568,2);
+insert into t (id,a) values (568,3);
+insert into t (id,a) values (568,4);
+insert into t (id,a) values (568,5);
+insert into t (id,a) values (568,6);
+insert into t (id,a) values (568,7);
+insert into t (id,a) values (568,8);
+insert into t (id,a) values (568,9);
+insert into t (id,a) values (568,10);
+insert into t (id,a) values (568,11);
+insert into t (id,a) values (568,12);
+insert into t (id,a) values (568,13);
+insert into t (id,a) values (568,14);
+insert into t (id,a) values (568,15);
+insert into t (id,a) values (568,16);
+insert into t (id,a) values (568,17);
+insert into t (id,a) values (568,18);
+insert into t (id,a) values (568,19);
+insert into t (id,a) values (568,20);
+insert into t (id,a) values (568,21);
+insert into t (id,a) values (568,22);
+insert into t (id,a) values (568,23);
+insert into t (id,a) values (568,24);
+insert into t (id,a) values (568,25);
+insert into t (id,a) values (568,26);
+insert into t (id,a) values (568,27);
+insert into t (id,a) values (568,28);
+insert into t (id,a) values (568,29);
+insert into t (id,a) values (568,30);
+insert into t (id,a) values (568,31);
+insert into t (id,a) values (568,32);
+insert into t (id,a) values (568,33);
+insert into t (id,a) values (568,34);
+insert into t (id,a) values (568,35);
+insert into t (id,a) values (568,36);
+insert into t (id,a) values (568,37);
+insert into t (id,a) values (568,38);
+insert into t (id,a) values (568,39);
+insert into t (id,a) values (568,40);
+insert into t (id,a) values (568,41);
+insert into t (id,a) values (568,42);
+insert into t (id,a) values (568,43);
+insert into t (id,a) values (568,44);
+insert into t (id,a) values (568,45);
+insert into t (id,a) values (568,46);
+insert into t (id,a) values (568,47);
+insert into t (id,a) values (568,48);
+insert into t (id,a) values (568,49);
+insert into t (id,a) values (568,50);
+insert into t (id,a) values (568,51);
+insert into t (id,a) values (568,52);
+insert into t (id,a) values (568,53);
+insert into t (id,a) values (568,54);
+insert into t (id,a) values (568,55);
+insert into t (id,a) values (568,56);
+insert into t (id,a) values (568,57);
+insert into t (id,a) values (568,58);
+insert into t (id,a) values (568,59);
+insert into t (id,a) values (568,60);
+insert into t (id,a) values (568,61);
+insert into t (id,a) values (568,62);
+insert into t (id,a) values (568,63);
+insert into t (id,a) values (568,64);
+insert into t (id,a) values (568,65);
+insert into t (id,a) values (568,66);
+insert into t (id,a) values (568,67);
+insert into t (id,a) values (568,68);
+insert into t (id,a) values (568,69);
+insert into t (id,a) values (568,70);
+insert into t (id,a) values (568,71);
+insert into t (id,a) values (568,72);
+insert into t (id,a) values (568,73);
+insert into t (id,a) values (568,74);
+insert into t (id,a) values (568,75);
+insert into t (id,a) values (568,76);
+insert into t (id,a) values (568,77);
+insert into t (id,a) values (568,78);
+insert into t (id,a) values (568,79);
+insert into t (id,a) values (568,80);
+insert into t (id,a) values (568,81);
+insert into t (id,a) values (568,82);
+insert into t (id,a) values (568,83);
+insert into t (id,a) values (568,84);
+insert into t (id,a) values (568,85);
+insert into t (id,a) values (568,86);
+insert into t (id,a) values (568,87);
+insert into t (id,a) values (568,88);
+insert into t (id,a) values (568,89);
+insert into t (id,a) values (568,90);
+insert into t (id,a) values (568,91);
+insert into t (id,a) values (568,92);
+insert into t (id,a) values (568,93);
+insert into t (id,a) values (568,94);
+insert into t (id,a) values (568,95);
+insert into t (id,a) values (568,96);
+insert into t (id,a) values (568,97);
+insert into t (id,a) values (568,98);
+insert into t (id,a) values (568,99);
+insert into t (id,a) values (569,0);
+insert into t (id,a) values (569,1);
+insert into t (id,a) values (569,2);
+insert into t (id,a) values (569,3);
+insert into t (id,a) values (569,4);
+insert into t (id,a) values (569,5);
+insert into t (id,a) values (569,6);
+insert into t (id,a) values (569,7);
+insert into t (id,a) values (569,8);
+insert into t (id,a) values (569,9);
+insert into t (id,a) values (569,10);
+insert into t (id,a) values (569,11);
+insert into t (id,a) values (569,12);
+insert into t (id,a) values (569,13);
+insert into t (id,a) values (569,14);
+insert into t (id,a) values (569,15);
+insert into t (id,a) values (569,16);
+insert into t (id,a) values (569,17);
+insert into t (id,a) values (569,18);
+insert into t (id,a) values (569,19);
+insert into t (id,a) values (569,20);
+insert into t (id,a) values (569,21);
+insert into t (id,a) values (569,22);
+insert into t (id,a) values (569,23);
+insert into t (id,a) values (569,24);
+insert into t (id,a) values (569,25);
+insert into t (id,a) values (569,26);
+insert into t (id,a) values (569,27);
+insert into t (id,a) values (569,28);
+insert into t (id,a) values (569,29);
+insert into t (id,a) values (569,30);
+insert into t (id,a) values (569,31);
+insert into t (id,a) values (569,32);
+insert into t (id,a) values (569,33);
+insert into t (id,a) values (569,34);
+insert into t (id,a) values (569,35);
+insert into t (id,a) values (569,36);
+insert into t (id,a) values (569,37);
+insert into t (id,a) values (569,38);
+insert into t (id,a) values (569,39);
+insert into t (id,a) values (569,40);
+insert into t (id,a) values (569,41);
+insert into t (id,a) values (569,42);
+insert into t (id,a) values (569,43);
+insert into t (id,a) values (569,44);
+insert into t (id,a) values (569,45);
+insert into t (id,a) values (569,46);
+insert into t (id,a) values (569,47);
+insert into t (id,a) values (569,48);
+insert into t (id,a) values (569,49);
+insert into t (id,a) values (569,50);
+insert into t (id,a) values (569,51);
+insert into t (id,a) values (569,52);
+insert into t (id,a) values (569,53);
+insert into t (id,a) values (569,54);
+insert into t (id,a) values (569,55);
+insert into t (id,a) values (569,56);
+insert into t (id,a) values (569,57);
+insert into t (id,a) values (569,58);
+insert into t (id,a) values (569,59);
+insert into t (id,a) values (569,60);
+insert into t (id,a) values (569,61);
+insert into t (id,a) values (569,62);
+insert into t (id,a) values (569,63);
+insert into t (id,a) values (569,64);
+insert into t (id,a) values (569,65);
+insert into t (id,a) values (569,66);
+insert into t (id,a) values (569,67);
+insert into t (id,a) values (569,68);
+insert into t (id,a) values (569,69);
+insert into t (id,a) values (569,70);
+insert into t (id,a) values (569,71);
+insert into t (id,a) values (569,72);
+insert into t (id,a) values (569,73);
+insert into t (id,a) values (569,74);
+insert into t (id,a) values (569,75);
+insert into t (id,a) values (569,76);
+insert into t (id,a) values (569,77);
+insert into t (id,a) values (569,78);
+insert into t (id,a) values (569,79);
+insert into t (id,a) values (569,80);
+insert into t (id,a) values (569,81);
+insert into t (id,a) values (569,82);
+insert into t (id,a) values (569,83);
+insert into t (id,a) values (569,84);
+insert into t (id,a) values (569,85);
+insert into t (id,a) values (569,86);
+insert into t (id,a) values (569,87);
+insert into t (id,a) values (569,88);
+insert into t (id,a) values (569,89);
+insert into t (id,a) values (569,90);
+insert into t (id,a) values (569,91);
+insert into t (id,a) values (569,92);
+insert into t (id,a) values (569,93);
+insert into t (id,a) values (569,94);
+insert into t (id,a) values (569,95);
+insert into t (id,a) values (569,96);
+insert into t (id,a) values (569,97);
+insert into t (id,a) values (569,98);
+insert into t (id,a) values (569,99);
+insert into t (id,a) values (570,0);
+insert into t (id,a) values (570,1);
+insert into t (id,a) values (570,2);
+insert into t (id,a) values (570,3);
+insert into t (id,a) values (570,4);
+insert into t (id,a) values (570,5);
+insert into t (id,a) values (570,6);
+insert into t (id,a) values (570,7);
+insert into t (id,a) values (570,8);
+insert into t (id,a) values (570,9);
+insert into t (id,a) values (570,10);
+insert into t (id,a) values (570,11);
+insert into t (id,a) values (570,12);
+insert into t (id,a) values (570,13);
+insert into t (id,a) values (570,14);
+insert into t (id,a) values (570,15);
+insert into t (id,a) values (570,16);
+insert into t (id,a) values (570,17);
+insert into t (id,a) values (570,18);
+insert into t (id,a) values (570,19);
+insert into t (id,a) values (570,20);
+insert into t (id,a) values (570,21);
+insert into t (id,a) values (570,22);
+insert into t (id,a) values (570,23);
+insert into t (id,a) values (570,24);
+insert into t (id,a) values (570,25);
+insert into t (id,a) values (570,26);
+insert into t (id,a) values (570,27);
+insert into t (id,a) values (570,28);
+insert into t (id,a) values (570,29);
+insert into t (id,a) values (570,30);
+insert into t (id,a) values (570,31);
+insert into t (id,a) values (570,32);
+insert into t (id,a) values (570,33);
+insert into t (id,a) values (570,34);
+insert into t (id,a) values (570,35);
+insert into t (id,a) values (570,36);
+insert into t (id,a) values (570,37);
+insert into t (id,a) values (570,38);
+insert into t (id,a) values (570,39);
+insert into t (id,a) values (570,40);
+insert into t (id,a) values (570,41);
+insert into t (id,a) values (570,42);
+insert into t (id,a) values (570,43);
+insert into t (id,a) values (570,44);
+insert into t (id,a) values (570,45);
+insert into t (id,a) values (570,46);
+insert into t (id,a) values (570,47);
+insert into t (id,a) values (570,48);
+insert into t (id,a) values (570,49);
+insert into t (id,a) values (570,50);
+insert into t (id,a) values (570,51);
+insert into t (id,a) values (570,52);
+insert into t (id,a) values (570,53);
+insert into t (id,a) values (570,54);
+insert into t (id,a) values (570,55);
+insert into t (id,a) values (570,56);
+insert into t (id,a) values (570,57);
+insert into t (id,a) values (570,58);
+insert into t (id,a) values (570,59);
+insert into t (id,a) values (570,60);
+insert into t (id,a) values (570,61);
+insert into t (id,a) values (570,62);
+insert into t (id,a) values (570,63);
+insert into t (id,a) values (570,64);
+insert into t (id,a) values (570,65);
+insert into t (id,a) values (570,66);
+insert into t (id,a) values (570,67);
+insert into t (id,a) values (570,68);
+insert into t (id,a) values (570,69);
+insert into t (id,a) values (570,70);
+insert into t (id,a) values (570,71);
+insert into t (id,a) values (570,72);
+insert into t (id,a) values (570,73);
+insert into t (id,a) values (570,74);
+insert into t (id,a) values (570,75);
+insert into t (id,a) values (570,76);
+insert into t (id,a) values (570,77);
+insert into t (id,a) values (570,78);
+insert into t (id,a) values (570,79);
+insert into t (id,a) values (570,80);
+insert into t (id,a) values (570,81);
+insert into t (id,a) values (570,82);
+insert into t (id,a) values (570,83);
+insert into t (id,a) values (570,84);
+insert into t (id,a) values (570,85);
+insert into t (id,a) values (570,86);
+insert into t (id,a) values (570,87);
+insert into t (id,a) values (570,88);
+insert into t (id,a) values (570,89);
+insert into t (id,a) values (570,90);
+insert into t (id,a) values (570,91);
+insert into t (id,a) values (570,92);
+insert into t (id,a) values (570,93);
+insert into t (id,a) values (570,94);
+insert into t (id,a) values (570,95);
+insert into t (id,a) values (570,96);
+insert into t (id,a) values (570,97);
+insert into t (id,a) values (570,98);
+insert into t (id,a) values (570,99);
+insert into t (id,a) values (571,0);
+insert into t (id,a) values (571,1);
+insert into t (id,a) values (571,2);
+insert into t (id,a) values (571,3);
+insert into t (id,a) values (571,4);
+insert into t (id,a) values (571,5);
+insert into t (id,a) values (571,6);
+insert into t (id,a) values (571,7);
+insert into t (id,a) values (571,8);
+insert into t (id,a) values (571,9);
+insert into t (id,a) values (571,10);
+insert into t (id,a) values (571,11);
+insert into t (id,a) values (571,12);
+insert into t (id,a) values (571,13);
+insert into t (id,a) values (571,14);
+insert into t (id,a) values (571,15);
+insert into t (id,a) values (571,16);
+insert into t (id,a) values (571,17);
+insert into t (id,a) values (571,18);
+insert into t (id,a) values (571,19);
+insert into t (id,a) values (571,20);
+insert into t (id,a) values (571,21);
+insert into t (id,a) values (571,22);
+insert into t (id,a) values (571,23);
+insert into t (id,a) values (571,24);
+insert into t (id,a) values (571,25);
+insert into t (id,a) values (571,26);
+insert into t (id,a) values (571,27);
+insert into t (id,a) values (571,28);
+insert into t (id,a) values (571,29);
+insert into t (id,a) values (571,30);
+insert into t (id,a) values (571,31);
+insert into t (id,a) values (571,32);
+insert into t (id,a) values (571,33);
+insert into t (id,a) values (571,34);
+insert into t (id,a) values (571,35);
+insert into t (id,a) values (571,36);
+insert into t (id,a) values (571,37);
+insert into t (id,a) values (571,38);
+insert into t (id,a) values (571,39);
+insert into t (id,a) values (571,40);
+insert into t (id,a) values (571,41);
+insert into t (id,a) values (571,42);
+insert into t (id,a) values (571,43);
+insert into t (id,a) values (571,44);
+insert into t (id,a) values (571,45);
+insert into t (id,a) values (571,46);
+insert into t (id,a) values (571,47);
+insert into t (id,a) values (571,48);
+insert into t (id,a) values (571,49);
+insert into t (id,a) values (571,50);
+insert into t (id,a) values (571,51);
+insert into t (id,a) values (571,52);
+insert into t (id,a) values (571,53);
+insert into t (id,a) values (571,54);
+insert into t (id,a) values (571,55);
+insert into t (id,a) values (571,56);
+insert into t (id,a) values (571,57);
+insert into t (id,a) values (571,58);
+insert into t (id,a) values (571,59);
+insert into t (id,a) values (571,60);
+insert into t (id,a) values (571,61);
+insert into t (id,a) values (571,62);
+insert into t (id,a) values (571,63);
+insert into t (id,a) values (571,64);
+insert into t (id,a) values (571,65);
+insert into t (id,a) values (571,66);
+insert into t (id,a) values (571,67);
+insert into t (id,a) values (571,68);
+insert into t (id,a) values (571,69);
+insert into t (id,a) values (571,70);
+insert into t (id,a) values (571,71);
+insert into t (id,a) values (571,72);
+insert into t (id,a) values (571,73);
+insert into t (id,a) values (571,74);
+insert into t (id,a) values (571,75);
+insert into t (id,a) values (571,76);
+insert into t (id,a) values (571,77);
+insert into t (id,a) values (571,78);
+insert into t (id,a) values (571,79);
+insert into t (id,a) values (571,80);
+insert into t (id,a) values (571,81);
+insert into t (id,a) values (571,82);
+insert into t (id,a) values (571,83);
+insert into t (id,a) values (571,84);
+insert into t (id,a) values (571,85);
+insert into t (id,a) values (571,86);
+insert into t (id,a) values (571,87);
+insert into t (id,a) values (571,88);
+insert into t (id,a) values (571,89);
+insert into t (id,a) values (571,90);
+insert into t (id,a) values (571,91);
+insert into t (id,a) values (571,92);
+insert into t (id,a) values (571,93);
+insert into t (id,a) values (571,94);
+insert into t (id,a) values (571,95);
+insert into t (id,a) values (571,96);
+insert into t (id,a) values (571,97);
+insert into t (id,a) values (571,98);
+insert into t (id,a) values (571,99);
+insert into t (id,a) values (572,0);
+insert into t (id,a) values (572,1);
+insert into t (id,a) values (572,2);
+insert into t (id,a) values (572,3);
+insert into t (id,a) values (572,4);
+insert into t (id,a) values (572,5);
+insert into t (id,a) values (572,6);
+insert into t (id,a) values (572,7);
+insert into t (id,a) values (572,8);
+insert into t (id,a) values (572,9);
+insert into t (id,a) values (572,10);
+insert into t (id,a) values (572,11);
+insert into t (id,a) values (572,12);
+insert into t (id,a) values (572,13);
+insert into t (id,a) values (572,14);
+insert into t (id,a) values (572,15);
+insert into t (id,a) values (572,16);
+insert into t (id,a) values (572,17);
+insert into t (id,a) values (572,18);
+insert into t (id,a) values (572,19);
+insert into t (id,a) values (572,20);
+insert into t (id,a) values (572,21);
+insert into t (id,a) values (572,22);
+insert into t (id,a) values (572,23);
+insert into t (id,a) values (572,24);
+insert into t (id,a) values (572,25);
+insert into t (id,a) values (572,26);
+insert into t (id,a) values (572,27);
+insert into t (id,a) values (572,28);
+insert into t (id,a) values (572,29);
+insert into t (id,a) values (572,30);
+insert into t (id,a) values (572,31);
+insert into t (id,a) values (572,32);
+insert into t (id,a) values (572,33);
+insert into t (id,a) values (572,34);
+insert into t (id,a) values (572,35);
+insert into t (id,a) values (572,36);
+insert into t (id,a) values (572,37);
+insert into t (id,a) values (572,38);
+insert into t (id,a) values (572,39);
+insert into t (id,a) values (572,40);
+insert into t (id,a) values (572,41);
+insert into t (id,a) values (572,42);
+insert into t (id,a) values (572,43);
+insert into t (id,a) values (572,44);
+insert into t (id,a) values (572,45);
+insert into t (id,a) values (572,46);
+insert into t (id,a) values (572,47);
+insert into t (id,a) values (572,48);
+insert into t (id,a) values (572,49);
+insert into t (id,a) values (572,50);
+insert into t (id,a) values (572,51);
+insert into t (id,a) values (572,52);
+insert into t (id,a) values (572,53);
+insert into t (id,a) values (572,54);
+insert into t (id,a) values (572,55);
+insert into t (id,a) values (572,56);
+insert into t (id,a) values (572,57);
+insert into t (id,a) values (572,58);
+insert into t (id,a) values (572,59);
+insert into t (id,a) values (572,60);
+insert into t (id,a) values (572,61);
+insert into t (id,a) values (572,62);
+insert into t (id,a) values (572,63);
+insert into t (id,a) values (572,64);
+insert into t (id,a) values (572,65);
+insert into t (id,a) values (572,66);
+insert into t (id,a) values (572,67);
+insert into t (id,a) values (572,68);
+insert into t (id,a) values (572,69);
+insert into t (id,a) values (572,70);
+insert into t (id,a) values (572,71);
+insert into t (id,a) values (572,72);
+insert into t (id,a) values (572,73);
+insert into t (id,a) values (572,74);
+insert into t (id,a) values (572,75);
+insert into t (id,a) values (572,76);
+insert into t (id,a) values (572,77);
+insert into t (id,a) values (572,78);
+insert into t (id,a) values (572,79);
+insert into t (id,a) values (572,80);
+insert into t (id,a) values (572,81);
+insert into t (id,a) values (572,82);
+insert into t (id,a) values (572,83);
+insert into t (id,a) values (572,84);
+insert into t (id,a) values (572,85);
+insert into t (id,a) values (572,86);
+insert into t (id,a) values (572,87);
+insert into t (id,a) values (572,88);
+insert into t (id,a) values (572,89);
+insert into t (id,a) values (572,90);
+insert into t (id,a) values (572,91);
+insert into t (id,a) values (572,92);
+insert into t (id,a) values (572,93);
+insert into t (id,a) values (572,94);
+insert into t (id,a) values (572,95);
+insert into t (id,a) values (572,96);
+insert into t (id,a) values (572,97);
+insert into t (id,a) values (572,98);
+insert into t (id,a) values (572,99);
+insert into t (id,a) values (573,0);
+insert into t (id,a) values (573,1);
+insert into t (id,a) values (573,2);
+insert into t (id,a) values (573,3);
+insert into t (id,a) values (573,4);
+insert into t (id,a) values (573,5);
+insert into t (id,a) values (573,6);
+insert into t (id,a) values (573,7);
+insert into t (id,a) values (573,8);
+insert into t (id,a) values (573,9);
+insert into t (id,a) values (573,10);
+insert into t (id,a) values (573,11);
+insert into t (id,a) values (573,12);
+insert into t (id,a) values (573,13);
+insert into t (id,a) values (573,14);
+insert into t (id,a) values (573,15);
+insert into t (id,a) values (573,16);
+insert into t (id,a) values (573,17);
+insert into t (id,a) values (573,18);
+insert into t (id,a) values (573,19);
+insert into t (id,a) values (573,20);
+insert into t (id,a) values (573,21);
+insert into t (id,a) values (573,22);
+insert into t (id,a) values (573,23);
+insert into t (id,a) values (573,24);
+insert into t (id,a) values (573,25);
+insert into t (id,a) values (573,26);
+insert into t (id,a) values (573,27);
+insert into t (id,a) values (573,28);
+insert into t (id,a) values (573,29);
+insert into t (id,a) values (573,30);
+insert into t (id,a) values (573,31);
+insert into t (id,a) values (573,32);
+insert into t (id,a) values (573,33);
+insert into t (id,a) values (573,34);
+insert into t (id,a) values (573,35);
+insert into t (id,a) values (573,36);
+insert into t (id,a) values (573,37);
+insert into t (id,a) values (573,38);
+insert into t (id,a) values (573,39);
+insert into t (id,a) values (573,40);
+insert into t (id,a) values (573,41);
+insert into t (id,a) values (573,42);
+insert into t (id,a) values (573,43);
+insert into t (id,a) values (573,44);
+insert into t (id,a) values (573,45);
+insert into t (id,a) values (573,46);
+insert into t (id,a) values (573,47);
+insert into t (id,a) values (573,48);
+insert into t (id,a) values (573,49);
+insert into t (id,a) values (573,50);
+insert into t (id,a) values (573,51);
+insert into t (id,a) values (573,52);
+insert into t (id,a) values (573,53);
+insert into t (id,a) values (573,54);
+insert into t (id,a) values (573,55);
+insert into t (id,a) values (573,56);
+insert into t (id,a) values (573,57);
+insert into t (id,a) values (573,58);
+insert into t (id,a) values (573,59);
+insert into t (id,a) values (573,60);
+insert into t (id,a) values (573,61);
+insert into t (id,a) values (573,62);
+insert into t (id,a) values (573,63);
+insert into t (id,a) values (573,64);
+insert into t (id,a) values (573,65);
+insert into t (id,a) values (573,66);
+insert into t (id,a) values (573,67);
+insert into t (id,a) values (573,68);
+insert into t (id,a) values (573,69);
+insert into t (id,a) values (573,70);
+insert into t (id,a) values (573,71);
+insert into t (id,a) values (573,72);
+insert into t (id,a) values (573,73);
+insert into t (id,a) values (573,74);
+insert into t (id,a) values (573,75);
+insert into t (id,a) values (573,76);
+insert into t (id,a) values (573,77);
+insert into t (id,a) values (573,78);
+insert into t (id,a) values (573,79);
+insert into t (id,a) values (573,80);
+insert into t (id,a) values (573,81);
+insert into t (id,a) values (573,82);
+insert into t (id,a) values (573,83);
+insert into t (id,a) values (573,84);
+insert into t (id,a) values (573,85);
+insert into t (id,a) values (573,86);
+insert into t (id,a) values (573,87);
+insert into t (id,a) values (573,88);
+insert into t (id,a) values (573,89);
+insert into t (id,a) values (573,90);
+insert into t (id,a) values (573,91);
+insert into t (id,a) values (573,92);
+insert into t (id,a) values (573,93);
+insert into t (id,a) values (573,94);
+insert into t (id,a) values (573,95);
+insert into t (id,a) values (573,96);
+insert into t (id,a) values (573,97);
+insert into t (id,a) values (573,98);
+insert into t (id,a) values (573,99);
+insert into t (id,a) values (574,0);
+insert into t (id,a) values (574,1);
+insert into t (id,a) values (574,2);
+insert into t (id,a) values (574,3);
+insert into t (id,a) values (574,4);
+insert into t (id,a) values (574,5);
+insert into t (id,a) values (574,6);
+insert into t (id,a) values (574,7);
+insert into t (id,a) values (574,8);
+insert into t (id,a) values (574,9);
+insert into t (id,a) values (574,10);
+insert into t (id,a) values (574,11);
+insert into t (id,a) values (574,12);
+insert into t (id,a) values (574,13);
+insert into t (id,a) values (574,14);
+insert into t (id,a) values (574,15);
+insert into t (id,a) values (574,16);
+insert into t (id,a) values (574,17);
+insert into t (id,a) values (574,18);
+insert into t (id,a) values (574,19);
+insert into t (id,a) values (574,20);
+insert into t (id,a) values (574,21);
+insert into t (id,a) values (574,22);
+insert into t (id,a) values (574,23);
+insert into t (id,a) values (574,24);
+insert into t (id,a) values (574,25);
+insert into t (id,a) values (574,26);
+insert into t (id,a) values (574,27);
+insert into t (id,a) values (574,28);
+insert into t (id,a) values (574,29);
+insert into t (id,a) values (574,30);
+insert into t (id,a) values (574,31);
+insert into t (id,a) values (574,32);
+insert into t (id,a) values (574,33);
+insert into t (id,a) values (574,34);
+insert into t (id,a) values (574,35);
+insert into t (id,a) values (574,36);
+insert into t (id,a) values (574,37);
+insert into t (id,a) values (574,38);
+insert into t (id,a) values (574,39);
+insert into t (id,a) values (574,40);
+insert into t (id,a) values (574,41);
+insert into t (id,a) values (574,42);
+insert into t (id,a) values (574,43);
+insert into t (id,a) values (574,44);
+insert into t (id,a) values (574,45);
+insert into t (id,a) values (574,46);
+insert into t (id,a) values (574,47);
+insert into t (id,a) values (574,48);
+insert into t (id,a) values (574,49);
+insert into t (id,a) values (574,50);
+insert into t (id,a) values (574,51);
+insert into t (id,a) values (574,52);
+insert into t (id,a) values (574,53);
+insert into t (id,a) values (574,54);
+insert into t (id,a) values (574,55);
+insert into t (id,a) values (574,56);
+insert into t (id,a) values (574,57);
+insert into t (id,a) values (574,58);
+insert into t (id,a) values (574,59);
+insert into t (id,a) values (574,60);
+insert into t (id,a) values (574,61);
+insert into t (id,a) values (574,62);
+insert into t (id,a) values (574,63);
+insert into t (id,a) values (574,64);
+insert into t (id,a) values (574,65);
+insert into t (id,a) values (574,66);
+insert into t (id,a) values (574,67);
+insert into t (id,a) values (574,68);
+insert into t (id,a) values (574,69);
+insert into t (id,a) values (574,70);
+insert into t (id,a) values (574,71);
+insert into t (id,a) values (574,72);
+insert into t (id,a) values (574,73);
+insert into t (id,a) values (574,74);
+insert into t (id,a) values (574,75);
+insert into t (id,a) values (574,76);
+insert into t (id,a) values (574,77);
+insert into t (id,a) values (574,78);
+insert into t (id,a) values (574,79);
+insert into t (id,a) values (574,80);
+insert into t (id,a) values (574,81);
+insert into t (id,a) values (574,82);
+insert into t (id,a) values (574,83);
+insert into t (id,a) values (574,84);
+insert into t (id,a) values (574,85);
+insert into t (id,a) values (574,86);
+insert into t (id,a) values (574,87);
+insert into t (id,a) values (574,88);
+insert into t (id,a) values (574,89);
+insert into t (id,a) values (574,90);
+insert into t (id,a) values (574,91);
+insert into t (id,a) values (574,92);
+insert into t (id,a) values (574,93);
+insert into t (id,a) values (574,94);
+insert into t (id,a) values (574,95);
+insert into t (id,a) values (574,96);
+insert into t (id,a) values (574,97);
+insert into t (id,a) values (574,98);
+insert into t (id,a) values (574,99);
+insert into t (id,a) values (575,0);
+insert into t (id,a) values (575,1);
+insert into t (id,a) values (575,2);
+insert into t (id,a) values (575,3);
+insert into t (id,a) values (575,4);
+insert into t (id,a) values (575,5);
+insert into t (id,a) values (575,6);
+insert into t (id,a) values (575,7);
+insert into t (id,a) values (575,8);
+insert into t (id,a) values (575,9);
+insert into t (id,a) values (575,10);
+insert into t (id,a) values (575,11);
+insert into t (id,a) values (575,12);
+insert into t (id,a) values (575,13);
+insert into t (id,a) values (575,14);
+insert into t (id,a) values (575,15);
+insert into t (id,a) values (575,16);
+insert into t (id,a) values (575,17);
+insert into t (id,a) values (575,18);
+insert into t (id,a) values (575,19);
+insert into t (id,a) values (575,20);
+insert into t (id,a) values (575,21);
+insert into t (id,a) values (575,22);
+insert into t (id,a) values (575,23);
+insert into t (id,a) values (575,24);
+insert into t (id,a) values (575,25);
+insert into t (id,a) values (575,26);
+insert into t (id,a) values (575,27);
+insert into t (id,a) values (575,28);
+insert into t (id,a) values (575,29);
+insert into t (id,a) values (575,30);
+insert into t (id,a) values (575,31);
+insert into t (id,a) values (575,32);
+insert into t (id,a) values (575,33);
+insert into t (id,a) values (575,34);
+insert into t (id,a) values (575,35);
+insert into t (id,a) values (575,36);
+insert into t (id,a) values (575,37);
+insert into t (id,a) values (575,38);
+insert into t (id,a) values (575,39);
+insert into t (id,a) values (575,40);
+insert into t (id,a) values (575,41);
+insert into t (id,a) values (575,42);
+insert into t (id,a) values (575,43);
+insert into t (id,a) values (575,44);
+insert into t (id,a) values (575,45);
+insert into t (id,a) values (575,46);
+insert into t (id,a) values (575,47);
+insert into t (id,a) values (575,48);
+insert into t (id,a) values (575,49);
+insert into t (id,a) values (575,50);
+insert into t (id,a) values (575,51);
+insert into t (id,a) values (575,52);
+insert into t (id,a) values (575,53);
+insert into t (id,a) values (575,54);
+insert into t (id,a) values (575,55);
+insert into t (id,a) values (575,56);
+insert into t (id,a) values (575,57);
+insert into t (id,a) values (575,58);
+insert into t (id,a) values (575,59);
+insert into t (id,a) values (575,60);
+insert into t (id,a) values (575,61);
+insert into t (id,a) values (575,62);
+insert into t (id,a) values (575,63);
+insert into t (id,a) values (575,64);
+insert into t (id,a) values (575,65);
+insert into t (id,a) values (575,66);
+insert into t (id,a) values (575,67);
+insert into t (id,a) values (575,68);
+insert into t (id,a) values (575,69);
+insert into t (id,a) values (575,70);
+insert into t (id,a) values (575,71);
+insert into t (id,a) values (575,72);
+insert into t (id,a) values (575,73);
+insert into t (id,a) values (575,74);
+insert into t (id,a) values (575,75);
+insert into t (id,a) values (575,76);
+insert into t (id,a) values (575,77);
+insert into t (id,a) values (575,78);
+insert into t (id,a) values (575,79);
+insert into t (id,a) values (575,80);
+insert into t (id,a) values (575,81);
+insert into t (id,a) values (575,82);
+insert into t (id,a) values (575,83);
+insert into t (id,a) values (575,84);
+insert into t (id,a) values (575,85);
+insert into t (id,a) values (575,86);
+insert into t (id,a) values (575,87);
+insert into t (id,a) values (575,88);
+insert into t (id,a) values (575,89);
+insert into t (id,a) values (575,90);
+insert into t (id,a) values (575,91);
+insert into t (id,a) values (575,92);
+insert into t (id,a) values (575,93);
+insert into t (id,a) values (575,94);
+insert into t (id,a) values (575,95);
+insert into t (id,a) values (575,96);
+insert into t (id,a) values (575,97);
+insert into t (id,a) values (575,98);
+insert into t (id,a) values (575,99);
+insert into t (id,a) values (576,0);
+insert into t (id,a) values (576,1);
+insert into t (id,a) values (576,2);
+insert into t (id,a) values (576,3);
+insert into t (id,a) values (576,4);
+insert into t (id,a) values (576,5);
+insert into t (id,a) values (576,6);
+insert into t (id,a) values (576,7);
+insert into t (id,a) values (576,8);
+insert into t (id,a) values (576,9);
+insert into t (id,a) values (576,10);
+insert into t (id,a) values (576,11);
+insert into t (id,a) values (576,12);
+insert into t (id,a) values (576,13);
+insert into t (id,a) values (576,14);
+insert into t (id,a) values (576,15);
+insert into t (id,a) values (576,16);
+insert into t (id,a) values (576,17);
+insert into t (id,a) values (576,18);
+insert into t (id,a) values (576,19);
+insert into t (id,a) values (576,20);
+insert into t (id,a) values (576,21);
+insert into t (id,a) values (576,22);
+insert into t (id,a) values (576,23);
+insert into t (id,a) values (576,24);
+insert into t (id,a) values (576,25);
+insert into t (id,a) values (576,26);
+insert into t (id,a) values (576,27);
+insert into t (id,a) values (576,28);
+insert into t (id,a) values (576,29);
+insert into t (id,a) values (576,30);
+insert into t (id,a) values (576,31);
+insert into t (id,a) values (576,32);
+insert into t (id,a) values (576,33);
+insert into t (id,a) values (576,34);
+insert into t (id,a) values (576,35);
+insert into t (id,a) values (576,36);
+insert into t (id,a) values (576,37);
+insert into t (id,a) values (576,38);
+insert into t (id,a) values (576,39);
+insert into t (id,a) values (576,40);
+insert into t (id,a) values (576,41);
+insert into t (id,a) values (576,42);
+insert into t (id,a) values (576,43);
+insert into t (id,a) values (576,44);
+insert into t (id,a) values (576,45);
+insert into t (id,a) values (576,46);
+insert into t (id,a) values (576,47);
+insert into t (id,a) values (576,48);
+insert into t (id,a) values (576,49);
+insert into t (id,a) values (576,50);
+insert into t (id,a) values (576,51);
+insert into t (id,a) values (576,52);
+insert into t (id,a) values (576,53);
+insert into t (id,a) values (576,54);
+insert into t (id,a) values (576,55);
+insert into t (id,a) values (576,56);
+insert into t (id,a) values (576,57);
+insert into t (id,a) values (576,58);
+insert into t (id,a) values (576,59);
+insert into t (id,a) values (576,60);
+insert into t (id,a) values (576,61);
+insert into t (id,a) values (576,62);
+insert into t (id,a) values (576,63);
+insert into t (id,a) values (576,64);
+insert into t (id,a) values (576,65);
+insert into t (id,a) values (576,66);
+insert into t (id,a) values (576,67);
+insert into t (id,a) values (576,68);
+insert into t (id,a) values (576,69);
+insert into t (id,a) values (576,70);
+insert into t (id,a) values (576,71);
+insert into t (id,a) values (576,72);
+insert into t (id,a) values (576,73);
+insert into t (id,a) values (576,74);
+insert into t (id,a) values (576,75);
+insert into t (id,a) values (576,76);
+insert into t (id,a) values (576,77);
+insert into t (id,a) values (576,78);
+insert into t (id,a) values (576,79);
+insert into t (id,a) values (576,80);
+insert into t (id,a) values (576,81);
+insert into t (id,a) values (576,82);
+insert into t (id,a) values (576,83);
+insert into t (id,a) values (576,84);
+insert into t (id,a) values (576,85);
+insert into t (id,a) values (576,86);
+insert into t (id,a) values (576,87);
+insert into t (id,a) values (576,88);
+insert into t (id,a) values (576,89);
+insert into t (id,a) values (576,90);
+insert into t (id,a) values (576,91);
+insert into t (id,a) values (576,92);
+insert into t (id,a) values (576,93);
+insert into t (id,a) values (576,94);
+insert into t (id,a) values (576,95);
+insert into t (id,a) values (576,96);
+insert into t (id,a) values (576,97);
+insert into t (id,a) values (576,98);
+insert into t (id,a) values (576,99);
+insert into t (id,a) values (577,0);
+insert into t (id,a) values (577,1);
+insert into t (id,a) values (577,2);
+insert into t (id,a) values (577,3);
+insert into t (id,a) values (577,4);
+insert into t (id,a) values (577,5);
+insert into t (id,a) values (577,6);
+insert into t (id,a) values (577,7);
+insert into t (id,a) values (577,8);
+insert into t (id,a) values (577,9);
+insert into t (id,a) values (577,10);
+insert into t (id,a) values (577,11);
+insert into t (id,a) values (577,12);
+insert into t (id,a) values (577,13);
+insert into t (id,a) values (577,14);
+insert into t (id,a) values (577,15);
+insert into t (id,a) values (577,16);
+insert into t (id,a) values (577,17);
+insert into t (id,a) values (577,18);
+insert into t (id,a) values (577,19);
+insert into t (id,a) values (577,20);
+insert into t (id,a) values (577,21);
+insert into t (id,a) values (577,22);
+insert into t (id,a) values (577,23);
+insert into t (id,a) values (577,24);
+insert into t (id,a) values (577,25);
+insert into t (id,a) values (577,26);
+insert into t (id,a) values (577,27);
+insert into t (id,a) values (577,28);
+insert into t (id,a) values (577,29);
+insert into t (id,a) values (577,30);
+insert into t (id,a) values (577,31);
+insert into t (id,a) values (577,32);
+insert into t (id,a) values (577,33);
+insert into t (id,a) values (577,34);
+insert into t (id,a) values (577,35);
+insert into t (id,a) values (577,36);
+insert into t (id,a) values (577,37);
+insert into t (id,a) values (577,38);
+insert into t (id,a) values (577,39);
+insert into t (id,a) values (577,40);
+insert into t (id,a) values (577,41);
+insert into t (id,a) values (577,42);
+insert into t (id,a) values (577,43);
+insert into t (id,a) values (577,44);
+insert into t (id,a) values (577,45);
+insert into t (id,a) values (577,46);
+insert into t (id,a) values (577,47);
+insert into t (id,a) values (577,48);
+insert into t (id,a) values (577,49);
+insert into t (id,a) values (577,50);
+insert into t (id,a) values (577,51);
+insert into t (id,a) values (577,52);
+insert into t (id,a) values (577,53);
+insert into t (id,a) values (577,54);
+insert into t (id,a) values (577,55);
+insert into t (id,a) values (577,56);
+insert into t (id,a) values (577,57);
+insert into t (id,a) values (577,58);
+insert into t (id,a) values (577,59);
+insert into t (id,a) values (577,60);
+insert into t (id,a) values (577,61);
+insert into t (id,a) values (577,62);
+insert into t (id,a) values (577,63);
+insert into t (id,a) values (577,64);
+insert into t (id,a) values (577,65);
+insert into t (id,a) values (577,66);
+insert into t (id,a) values (577,67);
+insert into t (id,a) values (577,68);
+insert into t (id,a) values (577,69);
+insert into t (id,a) values (577,70);
+insert into t (id,a) values (577,71);
+insert into t (id,a) values (577,72);
+insert into t (id,a) values (577,73);
+insert into t (id,a) values (577,74);
+insert into t (id,a) values (577,75);
+insert into t (id,a) values (577,76);
+insert into t (id,a) values (577,77);
+insert into t (id,a) values (577,78);
+insert into t (id,a) values (577,79);
+insert into t (id,a) values (577,80);
+insert into t (id,a) values (577,81);
+insert into t (id,a) values (577,82);
+insert into t (id,a) values (577,83);
+insert into t (id,a) values (577,84);
+insert into t (id,a) values (577,85);
+insert into t (id,a) values (577,86);
+insert into t (id,a) values (577,87);
+insert into t (id,a) values (577,88);
+insert into t (id,a) values (577,89);
+insert into t (id,a) values (577,90);
+insert into t (id,a) values (577,91);
+insert into t (id,a) values (577,92);
+insert into t (id,a) values (577,93);
+insert into t (id,a) values (577,94);
+insert into t (id,a) values (577,95);
+insert into t (id,a) values (577,96);
+insert into t (id,a) values (577,97);
+insert into t (id,a) values (577,98);
+insert into t (id,a) values (577,99);
+insert into t (id,a) values (578,0);
+insert into t (id,a) values (578,1);
+insert into t (id,a) values (578,2);
+insert into t (id,a) values (578,3);
+insert into t (id,a) values (578,4);
+insert into t (id,a) values (578,5);
+insert into t (id,a) values (578,6);
+insert into t (id,a) values (578,7);
+insert into t (id,a) values (578,8);
+insert into t (id,a) values (578,9);
+insert into t (id,a) values (578,10);
+insert into t (id,a) values (578,11);
+insert into t (id,a) values (578,12);
+insert into t (id,a) values (578,13);
+insert into t (id,a) values (578,14);
+insert into t (id,a) values (578,15);
+insert into t (id,a) values (578,16);
+insert into t (id,a) values (578,17);
+insert into t (id,a) values (578,18);
+insert into t (id,a) values (578,19);
+insert into t (id,a) values (578,20);
+insert into t (id,a) values (578,21);
+insert into t (id,a) values (578,22);
+insert into t (id,a) values (578,23);
+insert into t (id,a) values (578,24);
+insert into t (id,a) values (578,25);
+insert into t (id,a) values (578,26);
+insert into t (id,a) values (578,27);
+insert into t (id,a) values (578,28);
+insert into t (id,a) values (578,29);
+insert into t (id,a) values (578,30);
+insert into t (id,a) values (578,31);
+insert into t (id,a) values (578,32);
+insert into t (id,a) values (578,33);
+insert into t (id,a) values (578,34);
+insert into t (id,a) values (578,35);
+insert into t (id,a) values (578,36);
+insert into t (id,a) values (578,37);
+insert into t (id,a) values (578,38);
+insert into t (id,a) values (578,39);
+insert into t (id,a) values (578,40);
+insert into t (id,a) values (578,41);
+insert into t (id,a) values (578,42);
+insert into t (id,a) values (578,43);
+insert into t (id,a) values (578,44);
+insert into t (id,a) values (578,45);
+insert into t (id,a) values (578,46);
+insert into t (id,a) values (578,47);
+insert into t (id,a) values (578,48);
+insert into t (id,a) values (578,49);
+insert into t (id,a) values (578,50);
+insert into t (id,a) values (578,51);
+insert into t (id,a) values (578,52);
+insert into t (id,a) values (578,53);
+insert into t (id,a) values (578,54);
+insert into t (id,a) values (578,55);
+insert into t (id,a) values (578,56);
+insert into t (id,a) values (578,57);
+insert into t (id,a) values (578,58);
+insert into t (id,a) values (578,59);
+insert into t (id,a) values (578,60);
+insert into t (id,a) values (578,61);
+insert into t (id,a) values (578,62);
+insert into t (id,a) values (578,63);
+insert into t (id,a) values (578,64);
+insert into t (id,a) values (578,65);
+insert into t (id,a) values (578,66);
+insert into t (id,a) values (578,67);
+insert into t (id,a) values (578,68);
+insert into t (id,a) values (578,69);
+insert into t (id,a) values (578,70);
+insert into t (id,a) values (578,71);
+insert into t (id,a) values (578,72);
+insert into t (id,a) values (578,73);
+insert into t (id,a) values (578,74);
+insert into t (id,a) values (578,75);
+insert into t (id,a) values (578,76);
+insert into t (id,a) values (578,77);
+insert into t (id,a) values (578,78);
+insert into t (id,a) values (578,79);
+insert into t (id,a) values (578,80);
+insert into t (id,a) values (578,81);
+insert into t (id,a) values (578,82);
+insert into t (id,a) values (578,83);
+insert into t (id,a) values (578,84);
+insert into t (id,a) values (578,85);
+insert into t (id,a) values (578,86);
+insert into t (id,a) values (578,87);
+insert into t (id,a) values (578,88);
+insert into t (id,a) values (578,89);
+insert into t (id,a) values (578,90);
+insert into t (id,a) values (578,91);
+insert into t (id,a) values (578,92);
+insert into t (id,a) values (578,93);
+insert into t (id,a) values (578,94);
+insert into t (id,a) values (578,95);
+insert into t (id,a) values (578,96);
+insert into t (id,a) values (578,97);
+insert into t (id,a) values (578,98);
+insert into t (id,a) values (578,99);
+insert into t (id,a) values (579,0);
+insert into t (id,a) values (579,1);
+insert into t (id,a) values (579,2);
+insert into t (id,a) values (579,3);
+insert into t (id,a) values (579,4);
+insert into t (id,a) values (579,5);
+insert into t (id,a) values (579,6);
+insert into t (id,a) values (579,7);
+insert into t (id,a) values (579,8);
+insert into t (id,a) values (579,9);
+insert into t (id,a) values (579,10);
+insert into t (id,a) values (579,11);
+insert into t (id,a) values (579,12);
+insert into t (id,a) values (579,13);
+insert into t (id,a) values (579,14);
+insert into t (id,a) values (579,15);
+insert into t (id,a) values (579,16);
+insert into t (id,a) values (579,17);
+insert into t (id,a) values (579,18);
+insert into t (id,a) values (579,19);
+insert into t (id,a) values (579,20);
+insert into t (id,a) values (579,21);
+insert into t (id,a) values (579,22);
+insert into t (id,a) values (579,23);
+insert into t (id,a) values (579,24);
+insert into t (id,a) values (579,25);
+insert into t (id,a) values (579,26);
+insert into t (id,a) values (579,27);
+insert into t (id,a) values (579,28);
+insert into t (id,a) values (579,29);
+insert into t (id,a) values (579,30);
+insert into t (id,a) values (579,31);
+insert into t (id,a) values (579,32);
+insert into t (id,a) values (579,33);
+insert into t (id,a) values (579,34);
+insert into t (id,a) values (579,35);
+insert into t (id,a) values (579,36);
+insert into t (id,a) values (579,37);
+insert into t (id,a) values (579,38);
+insert into t (id,a) values (579,39);
+insert into t (id,a) values (579,40);
+insert into t (id,a) values (579,41);
+insert into t (id,a) values (579,42);
+insert into t (id,a) values (579,43);
+insert into t (id,a) values (579,44);
+insert into t (id,a) values (579,45);
+insert into t (id,a) values (579,46);
+insert into t (id,a) values (579,47);
+insert into t (id,a) values (579,48);
+insert into t (id,a) values (579,49);
+insert into t (id,a) values (579,50);
+insert into t (id,a) values (579,51);
+insert into t (id,a) values (579,52);
+insert into t (id,a) values (579,53);
+insert into t (id,a) values (579,54);
+insert into t (id,a) values (579,55);
+insert into t (id,a) values (579,56);
+insert into t (id,a) values (579,57);
+insert into t (id,a) values (579,58);
+insert into t (id,a) values (579,59);
+insert into t (id,a) values (579,60);
+insert into t (id,a) values (579,61);
+insert into t (id,a) values (579,62);
+insert into t (id,a) values (579,63);
+insert into t (id,a) values (579,64);
+insert into t (id,a) values (579,65);
+insert into t (id,a) values (579,66);
+insert into t (id,a) values (579,67);
+insert into t (id,a) values (579,68);
+insert into t (id,a) values (579,69);
+insert into t (id,a) values (579,70);
+insert into t (id,a) values (579,71);
+insert into t (id,a) values (579,72);
+insert into t (id,a) values (579,73);
+insert into t (id,a) values (579,74);
+insert into t (id,a) values (579,75);
+insert into t (id,a) values (579,76);
+insert into t (id,a) values (579,77);
+insert into t (id,a) values (579,78);
+insert into t (id,a) values (579,79);
+insert into t (id,a) values (579,80);
+insert into t (id,a) values (579,81);
+insert into t (id,a) values (579,82);
+insert into t (id,a) values (579,83);
+insert into t (id,a) values (579,84);
+insert into t (id,a) values (579,85);
+insert into t (id,a) values (579,86);
+insert into t (id,a) values (579,87);
+insert into t (id,a) values (579,88);
+insert into t (id,a) values (579,89);
+insert into t (id,a) values (579,90);
+insert into t (id,a) values (579,91);
+insert into t (id,a) values (579,92);
+insert into t (id,a) values (579,93);
+insert into t (id,a) values (579,94);
+insert into t (id,a) values (579,95);
+insert into t (id,a) values (579,96);
+insert into t (id,a) values (579,97);
+insert into t (id,a) values (579,98);
+insert into t (id,a) values (579,99);
+insert into t (id,a) values (580,0);
+insert into t (id,a) values (580,1);
+insert into t (id,a) values (580,2);
+insert into t (id,a) values (580,3);
+insert into t (id,a) values (580,4);
+insert into t (id,a) values (580,5);
+insert into t (id,a) values (580,6);
+insert into t (id,a) values (580,7);
+insert into t (id,a) values (580,8);
+insert into t (id,a) values (580,9);
+insert into t (id,a) values (580,10);
+insert into t (id,a) values (580,11);
+insert into t (id,a) values (580,12);
+insert into t (id,a) values (580,13);
+insert into t (id,a) values (580,14);
+insert into t (id,a) values (580,15);
+insert into t (id,a) values (580,16);
+insert into t (id,a) values (580,17);
+insert into t (id,a) values (580,18);
+insert into t (id,a) values (580,19);
+insert into t (id,a) values (580,20);
+insert into t (id,a) values (580,21);
+insert into t (id,a) values (580,22);
+insert into t (id,a) values (580,23);
+insert into t (id,a) values (580,24);
+insert into t (id,a) values (580,25);
+insert into t (id,a) values (580,26);
+insert into t (id,a) values (580,27);
+insert into t (id,a) values (580,28);
+insert into t (id,a) values (580,29);
+insert into t (id,a) values (580,30);
+insert into t (id,a) values (580,31);
+insert into t (id,a) values (580,32);
+insert into t (id,a) values (580,33);
+insert into t (id,a) values (580,34);
+insert into t (id,a) values (580,35);
+insert into t (id,a) values (580,36);
+insert into t (id,a) values (580,37);
+insert into t (id,a) values (580,38);
+insert into t (id,a) values (580,39);
+insert into t (id,a) values (580,40);
+insert into t (id,a) values (580,41);
+insert into t (id,a) values (580,42);
+insert into t (id,a) values (580,43);
+insert into t (id,a) values (580,44);
+insert into t (id,a) values (580,45);
+insert into t (id,a) values (580,46);
+insert into t (id,a) values (580,47);
+insert into t (id,a) values (580,48);
+insert into t (id,a) values (580,49);
+insert into t (id,a) values (580,50);
+insert into t (id,a) values (580,51);
+insert into t (id,a) values (580,52);
+insert into t (id,a) values (580,53);
+insert into t (id,a) values (580,54);
+insert into t (id,a) values (580,55);
+insert into t (id,a) values (580,56);
+insert into t (id,a) values (580,57);
+insert into t (id,a) values (580,58);
+insert into t (id,a) values (580,59);
+insert into t (id,a) values (580,60);
+insert into t (id,a) values (580,61);
+insert into t (id,a) values (580,62);
+insert into t (id,a) values (580,63);
+insert into t (id,a) values (580,64);
+insert into t (id,a) values (580,65);
+insert into t (id,a) values (580,66);
+insert into t (id,a) values (580,67);
+insert into t (id,a) values (580,68);
+insert into t (id,a) values (580,69);
+insert into t (id,a) values (580,70);
+insert into t (id,a) values (580,71);
+insert into t (id,a) values (580,72);
+insert into t (id,a) values (580,73);
+insert into t (id,a) values (580,74);
+insert into t (id,a) values (580,75);
+insert into t (id,a) values (580,76);
+insert into t (id,a) values (580,77);
+insert into t (id,a) values (580,78);
+insert into t (id,a) values (580,79);
+insert into t (id,a) values (580,80);
+insert into t (id,a) values (580,81);
+insert into t (id,a) values (580,82);
+insert into t (id,a) values (580,83);
+insert into t (id,a) values (580,84);
+insert into t (id,a) values (580,85);
+insert into t (id,a) values (580,86);
+insert into t (id,a) values (580,87);
+insert into t (id,a) values (580,88);
+insert into t (id,a) values (580,89);
+insert into t (id,a) values (580,90);
+insert into t (id,a) values (580,91);
+insert into t (id,a) values (580,92);
+insert into t (id,a) values (580,93);
+insert into t (id,a) values (580,94);
+insert into t (id,a) values (580,95);
+insert into t (id,a) values (580,96);
+insert into t (id,a) values (580,97);
+insert into t (id,a) values (580,98);
+insert into t (id,a) values (580,99);
+insert into t (id,a) values (581,0);
+insert into t (id,a) values (581,1);
+insert into t (id,a) values (581,2);
+insert into t (id,a) values (581,3);
+insert into t (id,a) values (581,4);
+insert into t (id,a) values (581,5);
+insert into t (id,a) values (581,6);
+insert into t (id,a) values (581,7);
+insert into t (id,a) values (581,8);
+insert into t (id,a) values (581,9);
+insert into t (id,a) values (581,10);
+insert into t (id,a) values (581,11);
+insert into t (id,a) values (581,12);
+insert into t (id,a) values (581,13);
+insert into t (id,a) values (581,14);
+insert into t (id,a) values (581,15);
+insert into t (id,a) values (581,16);
+insert into t (id,a) values (581,17);
+insert into t (id,a) values (581,18);
+insert into t (id,a) values (581,19);
+insert into t (id,a) values (581,20);
+insert into t (id,a) values (581,21);
+insert into t (id,a) values (581,22);
+insert into t (id,a) values (581,23);
+insert into t (id,a) values (581,24);
+insert into t (id,a) values (581,25);
+insert into t (id,a) values (581,26);
+insert into t (id,a) values (581,27);
+insert into t (id,a) values (581,28);
+insert into t (id,a) values (581,29);
+insert into t (id,a) values (581,30);
+insert into t (id,a) values (581,31);
+insert into t (id,a) values (581,32);
+insert into t (id,a) values (581,33);
+insert into t (id,a) values (581,34);
+insert into t (id,a) values (581,35);
+insert into t (id,a) values (581,36);
+insert into t (id,a) values (581,37);
+insert into t (id,a) values (581,38);
+insert into t (id,a) values (581,39);
+insert into t (id,a) values (581,40);
+insert into t (id,a) values (581,41);
+insert into t (id,a) values (581,42);
+insert into t (id,a) values (581,43);
+insert into t (id,a) values (581,44);
+insert into t (id,a) values (581,45);
+insert into t (id,a) values (581,46);
+insert into t (id,a) values (581,47);
+insert into t (id,a) values (581,48);
+insert into t (id,a) values (581,49);
+insert into t (id,a) values (581,50);
+insert into t (id,a) values (581,51);
+insert into t (id,a) values (581,52);
+insert into t (id,a) values (581,53);
+insert into t (id,a) values (581,54);
+insert into t (id,a) values (581,55);
+insert into t (id,a) values (581,56);
+insert into t (id,a) values (581,57);
+insert into t (id,a) values (581,58);
+insert into t (id,a) values (581,59);
+insert into t (id,a) values (581,60);
+insert into t (id,a) values (581,61);
+insert into t (id,a) values (581,62);
+insert into t (id,a) values (581,63);
+insert into t (id,a) values (581,64);
+insert into t (id,a) values (581,65);
+insert into t (id,a) values (581,66);
+insert into t (id,a) values (581,67);
+insert into t (id,a) values (581,68);
+insert into t (id,a) values (581,69);
+insert into t (id,a) values (581,70);
+insert into t (id,a) values (581,71);
+insert into t (id,a) values (581,72);
+insert into t (id,a) values (581,73);
+insert into t (id,a) values (581,74);
+insert into t (id,a) values (581,75);
+insert into t (id,a) values (581,76);
+insert into t (id,a) values (581,77);
+insert into t (id,a) values (581,78);
+insert into t (id,a) values (581,79);
+insert into t (id,a) values (581,80);
+insert into t (id,a) values (581,81);
+insert into t (id,a) values (581,82);
+insert into t (id,a) values (581,83);
+insert into t (id,a) values (581,84);
+insert into t (id,a) values (581,85);
+insert into t (id,a) values (581,86);
+insert into t (id,a) values (581,87);
+insert into t (id,a) values (581,88);
+insert into t (id,a) values (581,89);
+insert into t (id,a) values (581,90);
+insert into t (id,a) values (581,91);
+insert into t (id,a) values (581,92);
+insert into t (id,a) values (581,93);
+insert into t (id,a) values (581,94);
+insert into t (id,a) values (581,95);
+insert into t (id,a) values (581,96);
+insert into t (id,a) values (581,97);
+insert into t (id,a) values (581,98);
+insert into t (id,a) values (581,99);
+insert into t (id,a) values (582,0);
+insert into t (id,a) values (582,1);
+insert into t (id,a) values (582,2);
+insert into t (id,a) values (582,3);
+insert into t (id,a) values (582,4);
+insert into t (id,a) values (582,5);
+insert into t (id,a) values (582,6);
+insert into t (id,a) values (582,7);
+insert into t (id,a) values (582,8);
+insert into t (id,a) values (582,9);
+insert into t (id,a) values (582,10);
+insert into t (id,a) values (582,11);
+insert into t (id,a) values (582,12);
+insert into t (id,a) values (582,13);
+insert into t (id,a) values (582,14);
+insert into t (id,a) values (582,15);
+insert into t (id,a) values (582,16);
+insert into t (id,a) values (582,17);
+insert into t (id,a) values (582,18);
+insert into t (id,a) values (582,19);
+insert into t (id,a) values (582,20);
+insert into t (id,a) values (582,21);
+insert into t (id,a) values (582,22);
+insert into t (id,a) values (582,23);
+insert into t (id,a) values (582,24);
+insert into t (id,a) values (582,25);
+insert into t (id,a) values (582,26);
+insert into t (id,a) values (582,27);
+insert into t (id,a) values (582,28);
+insert into t (id,a) values (582,29);
+insert into t (id,a) values (582,30);
+insert into t (id,a) values (582,31);
+insert into t (id,a) values (582,32);
+insert into t (id,a) values (582,33);
+insert into t (id,a) values (582,34);
+insert into t (id,a) values (582,35);
+insert into t (id,a) values (582,36);
+insert into t (id,a) values (582,37);
+insert into t (id,a) values (582,38);
+insert into t (id,a) values (582,39);
+insert into t (id,a) values (582,40);
+insert into t (id,a) values (582,41);
+insert into t (id,a) values (582,42);
+insert into t (id,a) values (582,43);
+insert into t (id,a) values (582,44);
+insert into t (id,a) values (582,45);
+insert into t (id,a) values (582,46);
+insert into t (id,a) values (582,47);
+insert into t (id,a) values (582,48);
+insert into t (id,a) values (582,49);
+insert into t (id,a) values (582,50);
+insert into t (id,a) values (582,51);
+insert into t (id,a) values (582,52);
+insert into t (id,a) values (582,53);
+insert into t (id,a) values (582,54);
+insert into t (id,a) values (582,55);
+insert into t (id,a) values (582,56);
+insert into t (id,a) values (582,57);
+insert into t (id,a) values (582,58);
+insert into t (id,a) values (582,59);
+insert into t (id,a) values (582,60);
+insert into t (id,a) values (582,61);
+insert into t (id,a) values (582,62);
+insert into t (id,a) values (582,63);
+insert into t (id,a) values (582,64);
+insert into t (id,a) values (582,65);
+insert into t (id,a) values (582,66);
+insert into t (id,a) values (582,67);
+insert into t (id,a) values (582,68);
+insert into t (id,a) values (582,69);
+insert into t (id,a) values (582,70);
+insert into t (id,a) values (582,71);
+insert into t (id,a) values (582,72);
+insert into t (id,a) values (582,73);
+insert into t (id,a) values (582,74);
+insert into t (id,a) values (582,75);
+insert into t (id,a) values (582,76);
+insert into t (id,a) values (582,77);
+insert into t (id,a) values (582,78);
+insert into t (id,a) values (582,79);
+insert into t (id,a) values (582,80);
+insert into t (id,a) values (582,81);
+insert into t (id,a) values (582,82);
+insert into t (id,a) values (582,83);
+insert into t (id,a) values (582,84);
+insert into t (id,a) values (582,85);
+insert into t (id,a) values (582,86);
+insert into t (id,a) values (582,87);
+insert into t (id,a) values (582,88);
+insert into t (id,a) values (582,89);
+insert into t (id,a) values (582,90);
+insert into t (id,a) values (582,91);
+insert into t (id,a) values (582,92);
+insert into t (id,a) values (582,93);
+insert into t (id,a) values (582,94);
+insert into t (id,a) values (582,95);
+insert into t (id,a) values (582,96);
+insert into t (id,a) values (582,97);
+insert into t (id,a) values (582,98);
+insert into t (id,a) values (582,99);
+insert into t (id,a) values (583,0);
+insert into t (id,a) values (583,1);
+insert into t (id,a) values (583,2);
+insert into t (id,a) values (583,3);
+insert into t (id,a) values (583,4);
+insert into t (id,a) values (583,5);
+insert into t (id,a) values (583,6);
+insert into t (id,a) values (583,7);
+insert into t (id,a) values (583,8);
+insert into t (id,a) values (583,9);
+insert into t (id,a) values (583,10);
+insert into t (id,a) values (583,11);
+insert into t (id,a) values (583,12);
+insert into t (id,a) values (583,13);
+insert into t (id,a) values (583,14);
+insert into t (id,a) values (583,15);
+insert into t (id,a) values (583,16);
+insert into t (id,a) values (583,17);
+insert into t (id,a) values (583,18);
+insert into t (id,a) values (583,19);
+insert into t (id,a) values (583,20);
+insert into t (id,a) values (583,21);
+insert into t (id,a) values (583,22);
+insert into t (id,a) values (583,23);
+insert into t (id,a) values (583,24);
+insert into t (id,a) values (583,25);
+insert into t (id,a) values (583,26);
+insert into t (id,a) values (583,27);
+insert into t (id,a) values (583,28);
+insert into t (id,a) values (583,29);
+insert into t (id,a) values (583,30);
+insert into t (id,a) values (583,31);
+insert into t (id,a) values (583,32);
+insert into t (id,a) values (583,33);
+insert into t (id,a) values (583,34);
+insert into t (id,a) values (583,35);
+insert into t (id,a) values (583,36);
+insert into t (id,a) values (583,37);
+insert into t (id,a) values (583,38);
+insert into t (id,a) values (583,39);
+insert into t (id,a) values (583,40);
+insert into t (id,a) values (583,41);
+insert into t (id,a) values (583,42);
+insert into t (id,a) values (583,43);
+insert into t (id,a) values (583,44);
+insert into t (id,a) values (583,45);
+insert into t (id,a) values (583,46);
+insert into t (id,a) values (583,47);
+insert into t (id,a) values (583,48);
+insert into t (id,a) values (583,49);
+insert into t (id,a) values (583,50);
+insert into t (id,a) values (583,51);
+insert into t (id,a) values (583,52);
+insert into t (id,a) values (583,53);
+insert into t (id,a) values (583,54);
+insert into t (id,a) values (583,55);
+insert into t (id,a) values (583,56);
+insert into t (id,a) values (583,57);
+insert into t (id,a) values (583,58);
+insert into t (id,a) values (583,59);
+insert into t (id,a) values (583,60);
+insert into t (id,a) values (583,61);
+insert into t (id,a) values (583,62);
+insert into t (id,a) values (583,63);
+insert into t (id,a) values (583,64);
+insert into t (id,a) values (583,65);
+insert into t (id,a) values (583,66);
+insert into t (id,a) values (583,67);
+insert into t (id,a) values (583,68);
+insert into t (id,a) values (583,69);
+insert into t (id,a) values (583,70);
+insert into t (id,a) values (583,71);
+insert into t (id,a) values (583,72);
+insert into t (id,a) values (583,73);
+insert into t (id,a) values (583,74);
+insert into t (id,a) values (583,75);
+insert into t (id,a) values (583,76);
+insert into t (id,a) values (583,77);
+insert into t (id,a) values (583,78);
+insert into t (id,a) values (583,79);
+insert into t (id,a) values (583,80);
+insert into t (id,a) values (583,81);
+insert into t (id,a) values (583,82);
+insert into t (id,a) values (583,83);
+insert into t (id,a) values (583,84);
+insert into t (id,a) values (583,85);
+insert into t (id,a) values (583,86);
+insert into t (id,a) values (583,87);
+insert into t (id,a) values (583,88);
+insert into t (id,a) values (583,89);
+insert into t (id,a) values (583,90);
+insert into t (id,a) values (583,91);
+insert into t (id,a) values (583,92);
+insert into t (id,a) values (583,93);
+insert into t (id,a) values (583,94);
+insert into t (id,a) values (583,95);
+insert into t (id,a) values (583,96);
+insert into t (id,a) values (583,97);
+insert into t (id,a) values (583,98);
+insert into t (id,a) values (583,99);
+insert into t (id,a) values (584,0);
+insert into t (id,a) values (584,1);
+insert into t (id,a) values (584,2);
+insert into t (id,a) values (584,3);
+insert into t (id,a) values (584,4);
+insert into t (id,a) values (584,5);
+insert into t (id,a) values (584,6);
+insert into t (id,a) values (584,7);
+insert into t (id,a) values (584,8);
+insert into t (id,a) values (584,9);
+insert into t (id,a) values (584,10);
+insert into t (id,a) values (584,11);
+insert into t (id,a) values (584,12);
+insert into t (id,a) values (584,13);
+insert into t (id,a) values (584,14);
+insert into t (id,a) values (584,15);
+insert into t (id,a) values (584,16);
+insert into t (id,a) values (584,17);
+insert into t (id,a) values (584,18);
+insert into t (id,a) values (584,19);
+insert into t (id,a) values (584,20);
+insert into t (id,a) values (584,21);
+insert into t (id,a) values (584,22);
+insert into t (id,a) values (584,23);
+insert into t (id,a) values (584,24);
+insert into t (id,a) values (584,25);
+insert into t (id,a) values (584,26);
+insert into t (id,a) values (584,27);
+insert into t (id,a) values (584,28);
+insert into t (id,a) values (584,29);
+insert into t (id,a) values (584,30);
+insert into t (id,a) values (584,31);
+insert into t (id,a) values (584,32);
+insert into t (id,a) values (584,33);
+insert into t (id,a) values (584,34);
+insert into t (id,a) values (584,35);
+insert into t (id,a) values (584,36);
+insert into t (id,a) values (584,37);
+insert into t (id,a) values (584,38);
+insert into t (id,a) values (584,39);
+insert into t (id,a) values (584,40);
+insert into t (id,a) values (584,41);
+insert into t (id,a) values (584,42);
+insert into t (id,a) values (584,43);
+insert into t (id,a) values (584,44);
+insert into t (id,a) values (584,45);
+insert into t (id,a) values (584,46);
+insert into t (id,a) values (584,47);
+insert into t (id,a) values (584,48);
+insert into t (id,a) values (584,49);
+insert into t (id,a) values (584,50);
+insert into t (id,a) values (584,51);
+insert into t (id,a) values (584,52);
+insert into t (id,a) values (584,53);
+insert into t (id,a) values (584,54);
+insert into t (id,a) values (584,55);
+insert into t (id,a) values (584,56);
+insert into t (id,a) values (584,57);
+insert into t (id,a) values (584,58);
+insert into t (id,a) values (584,59);
+insert into t (id,a) values (584,60);
+insert into t (id,a) values (584,61);
+insert into t (id,a) values (584,62);
+insert into t (id,a) values (584,63);
+insert into t (id,a) values (584,64);
+insert into t (id,a) values (584,65);
+insert into t (id,a) values (584,66);
+insert into t (id,a) values (584,67);
+insert into t (id,a) values (584,68);
+insert into t (id,a) values (584,69);
+insert into t (id,a) values (584,70);
+insert into t (id,a) values (584,71);
+insert into t (id,a) values (584,72);
+insert into t (id,a) values (584,73);
+insert into t (id,a) values (584,74);
+insert into t (id,a) values (584,75);
+insert into t (id,a) values (584,76);
+insert into t (id,a) values (584,77);
+insert into t (id,a) values (584,78);
+insert into t (id,a) values (584,79);
+insert into t (id,a) values (584,80);
+insert into t (id,a) values (584,81);
+insert into t (id,a) values (584,82);
+insert into t (id,a) values (584,83);
+insert into t (id,a) values (584,84);
+insert into t (id,a) values (584,85);
+insert into t (id,a) values (584,86);
+insert into t (id,a) values (584,87);
+insert into t (id,a) values (584,88);
+insert into t (id,a) values (584,89);
+insert into t (id,a) values (584,90);
+insert into t (id,a) values (584,91);
+insert into t (id,a) values (584,92);
+insert into t (id,a) values (584,93);
+insert into t (id,a) values (584,94);
+insert into t (id,a) values (584,95);
+insert into t (id,a) values (584,96);
+insert into t (id,a) values (584,97);
+insert into t (id,a) values (584,98);
+insert into t (id,a) values (584,99);
+insert into t (id,a) values (585,0);
+insert into t (id,a) values (585,1);
+insert into t (id,a) values (585,2);
+insert into t (id,a) values (585,3);
+insert into t (id,a) values (585,4);
+insert into t (id,a) values (585,5);
+insert into t (id,a) values (585,6);
+insert into t (id,a) values (585,7);
+insert into t (id,a) values (585,8);
+insert into t (id,a) values (585,9);
+insert into t (id,a) values (585,10);
+insert into t (id,a) values (585,11);
+insert into t (id,a) values (585,12);
+insert into t (id,a) values (585,13);
+insert into t (id,a) values (585,14);
+insert into t (id,a) values (585,15);
+insert into t (id,a) values (585,16);
+insert into t (id,a) values (585,17);
+insert into t (id,a) values (585,18);
+insert into t (id,a) values (585,19);
+insert into t (id,a) values (585,20);
+insert into t (id,a) values (585,21);
+insert into t (id,a) values (585,22);
+insert into t (id,a) values (585,23);
+insert into t (id,a) values (585,24);
+insert into t (id,a) values (585,25);
+insert into t (id,a) values (585,26);
+insert into t (id,a) values (585,27);
+insert into t (id,a) values (585,28);
+insert into t (id,a) values (585,29);
+insert into t (id,a) values (585,30);
+insert into t (id,a) values (585,31);
+insert into t (id,a) values (585,32);
+insert into t (id,a) values (585,33);
+insert into t (id,a) values (585,34);
+insert into t (id,a) values (585,35);
+insert into t (id,a) values (585,36);
+insert into t (id,a) values (585,37);
+insert into t (id,a) values (585,38);
+insert into t (id,a) values (585,39);
+insert into t (id,a) values (585,40);
+insert into t (id,a) values (585,41);
+insert into t (id,a) values (585,42);
+insert into t (id,a) values (585,43);
+insert into t (id,a) values (585,44);
+insert into t (id,a) values (585,45);
+insert into t (id,a) values (585,46);
+insert into t (id,a) values (585,47);
+insert into t (id,a) values (585,48);
+insert into t (id,a) values (585,49);
+insert into t (id,a) values (585,50);
+insert into t (id,a) values (585,51);
+insert into t (id,a) values (585,52);
+insert into t (id,a) values (585,53);
+insert into t (id,a) values (585,54);
+insert into t (id,a) values (585,55);
+insert into t (id,a) values (585,56);
+insert into t (id,a) values (585,57);
+insert into t (id,a) values (585,58);
+insert into t (id,a) values (585,59);
+insert into t (id,a) values (585,60);
+insert into t (id,a) values (585,61);
+insert into t (id,a) values (585,62);
+insert into t (id,a) values (585,63);
+insert into t (id,a) values (585,64);
+insert into t (id,a) values (585,65);
+insert into t (id,a) values (585,66);
+insert into t (id,a) values (585,67);
+insert into t (id,a) values (585,68);
+insert into t (id,a) values (585,69);
+insert into t (id,a) values (585,70);
+insert into t (id,a) values (585,71);
+insert into t (id,a) values (585,72);
+insert into t (id,a) values (585,73);
+insert into t (id,a) values (585,74);
+insert into t (id,a) values (585,75);
+insert into t (id,a) values (585,76);
+insert into t (id,a) values (585,77);
+insert into t (id,a) values (585,78);
+insert into t (id,a) values (585,79);
+insert into t (id,a) values (585,80);
+insert into t (id,a) values (585,81);
+insert into t (id,a) values (585,82);
+insert into t (id,a) values (585,83);
+insert into t (id,a) values (585,84);
+insert into t (id,a) values (585,85);
+insert into t (id,a) values (585,86);
+insert into t (id,a) values (585,87);
+insert into t (id,a) values (585,88);
+insert into t (id,a) values (585,89);
+insert into t (id,a) values (585,90);
+insert into t (id,a) values (585,91);
+insert into t (id,a) values (585,92);
+insert into t (id,a) values (585,93);
+insert into t (id,a) values (585,94);
+insert into t (id,a) values (585,95);
+insert into t (id,a) values (585,96);
+insert into t (id,a) values (585,97);
+insert into t (id,a) values (585,98);
+insert into t (id,a) values (585,99);
+insert into t (id,a) values (586,0);
+insert into t (id,a) values (586,1);
+insert into t (id,a) values (586,2);
+insert into t (id,a) values (586,3);
+insert into t (id,a) values (586,4);
+insert into t (id,a) values (586,5);
+insert into t (id,a) values (586,6);
+insert into t (id,a) values (586,7);
+insert into t (id,a) values (586,8);
+insert into t (id,a) values (586,9);
+insert into t (id,a) values (586,10);
+insert into t (id,a) values (586,11);
+insert into t (id,a) values (586,12);
+insert into t (id,a) values (586,13);
+insert into t (id,a) values (586,14);
+insert into t (id,a) values (586,15);
+insert into t (id,a) values (586,16);
+insert into t (id,a) values (586,17);
+insert into t (id,a) values (586,18);
+insert into t (id,a) values (586,19);
+insert into t (id,a) values (586,20);
+insert into t (id,a) values (586,21);
+insert into t (id,a) values (586,22);
+insert into t (id,a) values (586,23);
+insert into t (id,a) values (586,24);
+insert into t (id,a) values (586,25);
+insert into t (id,a) values (586,26);
+insert into t (id,a) values (586,27);
+insert into t (id,a) values (586,28);
+insert into t (id,a) values (586,29);
+insert into t (id,a) values (586,30);
+insert into t (id,a) values (586,31);
+insert into t (id,a) values (586,32);
+insert into t (id,a) values (586,33);
+insert into t (id,a) values (586,34);
+insert into t (id,a) values (586,35);
+insert into t (id,a) values (586,36);
+insert into t (id,a) values (586,37);
+insert into t (id,a) values (586,38);
+insert into t (id,a) values (586,39);
+insert into t (id,a) values (586,40);
+insert into t (id,a) values (586,41);
+insert into t (id,a) values (586,42);
+insert into t (id,a) values (586,43);
+insert into t (id,a) values (586,44);
+insert into t (id,a) values (586,45);
+insert into t (id,a) values (586,46);
+insert into t (id,a) values (586,47);
+insert into t (id,a) values (586,48);
+insert into t (id,a) values (586,49);
+insert into t (id,a) values (586,50);
+insert into t (id,a) values (586,51);
+insert into t (id,a) values (586,52);
+insert into t (id,a) values (586,53);
+insert into t (id,a) values (586,54);
+insert into t (id,a) values (586,55);
+insert into t (id,a) values (586,56);
+insert into t (id,a) values (586,57);
+insert into t (id,a) values (586,58);
+insert into t (id,a) values (586,59);
+insert into t (id,a) values (586,60);
+insert into t (id,a) values (586,61);
+insert into t (id,a) values (586,62);
+insert into t (id,a) values (586,63);
+insert into t (id,a) values (586,64);
+insert into t (id,a) values (586,65);
+insert into t (id,a) values (586,66);
+insert into t (id,a) values (586,67);
+insert into t (id,a) values (586,68);
+insert into t (id,a) values (586,69);
+insert into t (id,a) values (586,70);
+insert into t (id,a) values (586,71);
+insert into t (id,a) values (586,72);
+insert into t (id,a) values (586,73);
+insert into t (id,a) values (586,74);
+insert into t (id,a) values (586,75);
+insert into t (id,a) values (586,76);
+insert into t (id,a) values (586,77);
+insert into t (id,a) values (586,78);
+insert into t (id,a) values (586,79);
+insert into t (id,a) values (586,80);
+insert into t (id,a) values (586,81);
+insert into t (id,a) values (586,82);
+insert into t (id,a) values (586,83);
+insert into t (id,a) values (586,84);
+insert into t (id,a) values (586,85);
+insert into t (id,a) values (586,86);
+insert into t (id,a) values (586,87);
+insert into t (id,a) values (586,88);
+insert into t (id,a) values (586,89);
+insert into t (id,a) values (586,90);
+insert into t (id,a) values (586,91);
+insert into t (id,a) values (586,92);
+insert into t (id,a) values (586,93);
+insert into t (id,a) values (586,94);
+insert into t (id,a) values (586,95);
+insert into t (id,a) values (586,96);
+insert into t (id,a) values (586,97);
+insert into t (id,a) values (586,98);
+insert into t (id,a) values (586,99);
+insert into t (id,a) values (587,0);
+insert into t (id,a) values (587,1);
+insert into t (id,a) values (587,2);
+insert into t (id,a) values (587,3);
+insert into t (id,a) values (587,4);
+insert into t (id,a) values (587,5);
+insert into t (id,a) values (587,6);
+insert into t (id,a) values (587,7);
+insert into t (id,a) values (587,8);
+insert into t (id,a) values (587,9);
+insert into t (id,a) values (587,10);
+insert into t (id,a) values (587,11);
+insert into t (id,a) values (587,12);
+insert into t (id,a) values (587,13);
+insert into t (id,a) values (587,14);
+insert into t (id,a) values (587,15);
+insert into t (id,a) values (587,16);
+insert into t (id,a) values (587,17);
+insert into t (id,a) values (587,18);
+insert into t (id,a) values (587,19);
+insert into t (id,a) values (587,20);
+insert into t (id,a) values (587,21);
+insert into t (id,a) values (587,22);
+insert into t (id,a) values (587,23);
+insert into t (id,a) values (587,24);
+insert into t (id,a) values (587,25);
+insert into t (id,a) values (587,26);
+insert into t (id,a) values (587,27);
+insert into t (id,a) values (587,28);
+insert into t (id,a) values (587,29);
+insert into t (id,a) values (587,30);
+insert into t (id,a) values (587,31);
+insert into t (id,a) values (587,32);
+insert into t (id,a) values (587,33);
+insert into t (id,a) values (587,34);
+insert into t (id,a) values (587,35);
+insert into t (id,a) values (587,36);
+insert into t (id,a) values (587,37);
+insert into t (id,a) values (587,38);
+insert into t (id,a) values (587,39);
+insert into t (id,a) values (587,40);
+insert into t (id,a) values (587,41);
+insert into t (id,a) values (587,42);
+insert into t (id,a) values (587,43);
+insert into t (id,a) values (587,44);
+insert into t (id,a) values (587,45);
+insert into t (id,a) values (587,46);
+insert into t (id,a) values (587,47);
+insert into t (id,a) values (587,48);
+insert into t (id,a) values (587,49);
+insert into t (id,a) values (587,50);
+insert into t (id,a) values (587,51);
+insert into t (id,a) values (587,52);
+insert into t (id,a) values (587,53);
+insert into t (id,a) values (587,54);
+insert into t (id,a) values (587,55);
+insert into t (id,a) values (587,56);
+insert into t (id,a) values (587,57);
+insert into t (id,a) values (587,58);
+insert into t (id,a) values (587,59);
+insert into t (id,a) values (587,60);
+insert into t (id,a) values (587,61);
+insert into t (id,a) values (587,62);
+insert into t (id,a) values (587,63);
+insert into t (id,a) values (587,64);
+insert into t (id,a) values (587,65);
+insert into t (id,a) values (587,66);
+insert into t (id,a) values (587,67);
+insert into t (id,a) values (587,68);
+insert into t (id,a) values (587,69);
+insert into t (id,a) values (587,70);
+insert into t (id,a) values (587,71);
+insert into t (id,a) values (587,72);
+insert into t (id,a) values (587,73);
+insert into t (id,a) values (587,74);
+insert into t (id,a) values (587,75);
+insert into t (id,a) values (587,76);
+insert into t (id,a) values (587,77);
+insert into t (id,a) values (587,78);
+insert into t (id,a) values (587,79);
+insert into t (id,a) values (587,80);
+insert into t (id,a) values (587,81);
+insert into t (id,a) values (587,82);
+insert into t (id,a) values (587,83);
+insert into t (id,a) values (587,84);
+insert into t (id,a) values (587,85);
+insert into t (id,a) values (587,86);
+insert into t (id,a) values (587,87);
+insert into t (id,a) values (587,88);
+insert into t (id,a) values (587,89);
+insert into t (id,a) values (587,90);
+insert into t (id,a) values (587,91);
+insert into t (id,a) values (587,92);
+insert into t (id,a) values (587,93);
+insert into t (id,a) values (587,94);
+insert into t (id,a) values (587,95);
+insert into t (id,a) values (587,96);
+insert into t (id,a) values (587,97);
+insert into t (id,a) values (587,98);
+insert into t (id,a) values (587,99);
+insert into t (id,a) values (588,0);
+insert into t (id,a) values (588,1);
+insert into t (id,a) values (588,2);
+insert into t (id,a) values (588,3);
+insert into t (id,a) values (588,4);
+insert into t (id,a) values (588,5);
+insert into t (id,a) values (588,6);
+insert into t (id,a) values (588,7);
+insert into t (id,a) values (588,8);
+insert into t (id,a) values (588,9);
+insert into t (id,a) values (588,10);
+insert into t (id,a) values (588,11);
+insert into t (id,a) values (588,12);
+insert into t (id,a) values (588,13);
+insert into t (id,a) values (588,14);
+insert into t (id,a) values (588,15);
+insert into t (id,a) values (588,16);
+insert into t (id,a) values (588,17);
+insert into t (id,a) values (588,18);
+insert into t (id,a) values (588,19);
+insert into t (id,a) values (588,20);
+insert into t (id,a) values (588,21);
+insert into t (id,a) values (588,22);
+insert into t (id,a) values (588,23);
+insert into t (id,a) values (588,24);
+insert into t (id,a) values (588,25);
+insert into t (id,a) values (588,26);
+insert into t (id,a) values (588,27);
+insert into t (id,a) values (588,28);
+insert into t (id,a) values (588,29);
+insert into t (id,a) values (588,30);
+insert into t (id,a) values (588,31);
+insert into t (id,a) values (588,32);
+insert into t (id,a) values (588,33);
+insert into t (id,a) values (588,34);
+insert into t (id,a) values (588,35);
+insert into t (id,a) values (588,36);
+insert into t (id,a) values (588,37);
+insert into t (id,a) values (588,38);
+insert into t (id,a) values (588,39);
+insert into t (id,a) values (588,40);
+insert into t (id,a) values (588,41);
+insert into t (id,a) values (588,42);
+insert into t (id,a) values (588,43);
+insert into t (id,a) values (588,44);
+insert into t (id,a) values (588,45);
+insert into t (id,a) values (588,46);
+insert into t (id,a) values (588,47);
+insert into t (id,a) values (588,48);
+insert into t (id,a) values (588,49);
+insert into t (id,a) values (588,50);
+insert into t (id,a) values (588,51);
+insert into t (id,a) values (588,52);
+insert into t (id,a) values (588,53);
+insert into t (id,a) values (588,54);
+insert into t (id,a) values (588,55);
+insert into t (id,a) values (588,56);
+insert into t (id,a) values (588,57);
+insert into t (id,a) values (588,58);
+insert into t (id,a) values (588,59);
+insert into t (id,a) values (588,60);
+insert into t (id,a) values (588,61);
+insert into t (id,a) values (588,62);
+insert into t (id,a) values (588,63);
+insert into t (id,a) values (588,64);
+insert into t (id,a) values (588,65);
+insert into t (id,a) values (588,66);
+insert into t (id,a) values (588,67);
+insert into t (id,a) values (588,68);
+insert into t (id,a) values (588,69);
+insert into t (id,a) values (588,70);
+insert into t (id,a) values (588,71);
+insert into t (id,a) values (588,72);
+insert into t (id,a) values (588,73);
+insert into t (id,a) values (588,74);
+insert into t (id,a) values (588,75);
+insert into t (id,a) values (588,76);
+insert into t (id,a) values (588,77);
+insert into t (id,a) values (588,78);
+insert into t (id,a) values (588,79);
+insert into t (id,a) values (588,80);
+insert into t (id,a) values (588,81);
+insert into t (id,a) values (588,82);
+insert into t (id,a) values (588,83);
+insert into t (id,a) values (588,84);
+insert into t (id,a) values (588,85);
+insert into t (id,a) values (588,86);
+insert into t (id,a) values (588,87);
+insert into t (id,a) values (588,88);
+insert into t (id,a) values (588,89);
+insert into t (id,a) values (588,90);
+insert into t (id,a) values (588,91);
+insert into t (id,a) values (588,92);
+insert into t (id,a) values (588,93);
+insert into t (id,a) values (588,94);
+insert into t (id,a) values (588,95);
+insert into t (id,a) values (588,96);
+insert into t (id,a) values (588,97);
+insert into t (id,a) values (588,98);
+insert into t (id,a) values (588,99);
+insert into t (id,a) values (589,0);
+insert into t (id,a) values (589,1);
+insert into t (id,a) values (589,2);
+insert into t (id,a) values (589,3);
+insert into t (id,a) values (589,4);
+insert into t (id,a) values (589,5);
+insert into t (id,a) values (589,6);
+insert into t (id,a) values (589,7);
+insert into t (id,a) values (589,8);
+insert into t (id,a) values (589,9);
+insert into t (id,a) values (589,10);
+insert into t (id,a) values (589,11);
+insert into t (id,a) values (589,12);
+insert into t (id,a) values (589,13);
+insert into t (id,a) values (589,14);
+insert into t (id,a) values (589,15);
+insert into t (id,a) values (589,16);
+insert into t (id,a) values (589,17);
+insert into t (id,a) values (589,18);
+insert into t (id,a) values (589,19);
+insert into t (id,a) values (589,20);
+insert into t (id,a) values (589,21);
+insert into t (id,a) values (589,22);
+insert into t (id,a) values (589,23);
+insert into t (id,a) values (589,24);
+insert into t (id,a) values (589,25);
+insert into t (id,a) values (589,26);
+insert into t (id,a) values (589,27);
+insert into t (id,a) values (589,28);
+insert into t (id,a) values (589,29);
+insert into t (id,a) values (589,30);
+insert into t (id,a) values (589,31);
+insert into t (id,a) values (589,32);
+insert into t (id,a) values (589,33);
+insert into t (id,a) values (589,34);
+insert into t (id,a) values (589,35);
+insert into t (id,a) values (589,36);
+insert into t (id,a) values (589,37);
+insert into t (id,a) values (589,38);
+insert into t (id,a) values (589,39);
+insert into t (id,a) values (589,40);
+insert into t (id,a) values (589,41);
+insert into t (id,a) values (589,42);
+insert into t (id,a) values (589,43);
+insert into t (id,a) values (589,44);
+insert into t (id,a) values (589,45);
+insert into t (id,a) values (589,46);
+insert into t (id,a) values (589,47);
+insert into t (id,a) values (589,48);
+insert into t (id,a) values (589,49);
+insert into t (id,a) values (589,50);
+insert into t (id,a) values (589,51);
+insert into t (id,a) values (589,52);
+insert into t (id,a) values (589,53);
+insert into t (id,a) values (589,54);
+insert into t (id,a) values (589,55);
+insert into t (id,a) values (589,56);
+insert into t (id,a) values (589,57);
+insert into t (id,a) values (589,58);
+insert into t (id,a) values (589,59);
+insert into t (id,a) values (589,60);
+insert into t (id,a) values (589,61);
+insert into t (id,a) values (589,62);
+insert into t (id,a) values (589,63);
+insert into t (id,a) values (589,64);
+insert into t (id,a) values (589,65);
+insert into t (id,a) values (589,66);
+insert into t (id,a) values (589,67);
+insert into t (id,a) values (589,68);
+insert into t (id,a) values (589,69);
+insert into t (id,a) values (589,70);
+insert into t (id,a) values (589,71);
+insert into t (id,a) values (589,72);
+insert into t (id,a) values (589,73);
+insert into t (id,a) values (589,74);
+insert into t (id,a) values (589,75);
+insert into t (id,a) values (589,76);
+insert into t (id,a) values (589,77);
+insert into t (id,a) values (589,78);
+insert into t (id,a) values (589,79);
+insert into t (id,a) values (589,80);
+insert into t (id,a) values (589,81);
+insert into t (id,a) values (589,82);
+insert into t (id,a) values (589,83);
+insert into t (id,a) values (589,84);
+insert into t (id,a) values (589,85);
+insert into t (id,a) values (589,86);
+insert into t (id,a) values (589,87);
+insert into t (id,a) values (589,88);
+insert into t (id,a) values (589,89);
+insert into t (id,a) values (589,90);
+insert into t (id,a) values (589,91);
+insert into t (id,a) values (589,92);
+insert into t (id,a) values (589,93);
+insert into t (id,a) values (589,94);
+insert into t (id,a) values (589,95);
+insert into t (id,a) values (589,96);
+insert into t (id,a) values (589,97);
+insert into t (id,a) values (589,98);
+insert into t (id,a) values (589,99);
+insert into t (id,a) values (590,0);
+insert into t (id,a) values (590,1);
+insert into t (id,a) values (590,2);
+insert into t (id,a) values (590,3);
+insert into t (id,a) values (590,4);
+insert into t (id,a) values (590,5);
+insert into t (id,a) values (590,6);
+insert into t (id,a) values (590,7);
+insert into t (id,a) values (590,8);
+insert into t (id,a) values (590,9);
+insert into t (id,a) values (590,10);
+insert into t (id,a) values (590,11);
+insert into t (id,a) values (590,12);
+insert into t (id,a) values (590,13);
+insert into t (id,a) values (590,14);
+insert into t (id,a) values (590,15);
+insert into t (id,a) values (590,16);
+insert into t (id,a) values (590,17);
+insert into t (id,a) values (590,18);
+insert into t (id,a) values (590,19);
+insert into t (id,a) values (590,20);
+insert into t (id,a) values (590,21);
+insert into t (id,a) values (590,22);
+insert into t (id,a) values (590,23);
+insert into t (id,a) values (590,24);
+insert into t (id,a) values (590,25);
+insert into t (id,a) values (590,26);
+insert into t (id,a) values (590,27);
+insert into t (id,a) values (590,28);
+insert into t (id,a) values (590,29);
+insert into t (id,a) values (590,30);
+insert into t (id,a) values (590,31);
+insert into t (id,a) values (590,32);
+insert into t (id,a) values (590,33);
+insert into t (id,a) values (590,34);
+insert into t (id,a) values (590,35);
+insert into t (id,a) values (590,36);
+insert into t (id,a) values (590,37);
+insert into t (id,a) values (590,38);
+insert into t (id,a) values (590,39);
+insert into t (id,a) values (590,40);
+insert into t (id,a) values (590,41);
+insert into t (id,a) values (590,42);
+insert into t (id,a) values (590,43);
+insert into t (id,a) values (590,44);
+insert into t (id,a) values (590,45);
+insert into t (id,a) values (590,46);
+insert into t (id,a) values (590,47);
+insert into t (id,a) values (590,48);
+insert into t (id,a) values (590,49);
+insert into t (id,a) values (590,50);
+insert into t (id,a) values (590,51);
+insert into t (id,a) values (590,52);
+insert into t (id,a) values (590,53);
+insert into t (id,a) values (590,54);
+insert into t (id,a) values (590,55);
+insert into t (id,a) values (590,56);
+insert into t (id,a) values (590,57);
+insert into t (id,a) values (590,58);
+insert into t (id,a) values (590,59);
+insert into t (id,a) values (590,60);
+insert into t (id,a) values (590,61);
+insert into t (id,a) values (590,62);
+insert into t (id,a) values (590,63);
+insert into t (id,a) values (590,64);
+insert into t (id,a) values (590,65);
+insert into t (id,a) values (590,66);
+insert into t (id,a) values (590,67);
+insert into t (id,a) values (590,68);
+insert into t (id,a) values (590,69);
+insert into t (id,a) values (590,70);
+insert into t (id,a) values (590,71);
+insert into t (id,a) values (590,72);
+insert into t (id,a) values (590,73);
+insert into t (id,a) values (590,74);
+insert into t (id,a) values (590,75);
+insert into t (id,a) values (590,76);
+insert into t (id,a) values (590,77);
+insert into t (id,a) values (590,78);
+insert into t (id,a) values (590,79);
+insert into t (id,a) values (590,80);
+insert into t (id,a) values (590,81);
+insert into t (id,a) values (590,82);
+insert into t (id,a) values (590,83);
+insert into t (id,a) values (590,84);
+insert into t (id,a) values (590,85);
+insert into t (id,a) values (590,86);
+insert into t (id,a) values (590,87);
+insert into t (id,a) values (590,88);
+insert into t (id,a) values (590,89);
+insert into t (id,a) values (590,90);
+insert into t (id,a) values (590,91);
+insert into t (id,a) values (590,92);
+insert into t (id,a) values (590,93);
+insert into t (id,a) values (590,94);
+insert into t (id,a) values (590,95);
+insert into t (id,a) values (590,96);
+insert into t (id,a) values (590,97);
+insert into t (id,a) values (590,98);
+insert into t (id,a) values (590,99);
+insert into t (id,a) values (591,0);
+insert into t (id,a) values (591,1);
+insert into t (id,a) values (591,2);
+insert into t (id,a) values (591,3);
+insert into t (id,a) values (591,4);
+insert into t (id,a) values (591,5);
+insert into t (id,a) values (591,6);
+insert into t (id,a) values (591,7);
+insert into t (id,a) values (591,8);
+insert into t (id,a) values (591,9);
+insert into t (id,a) values (591,10);
+insert into t (id,a) values (591,11);
+insert into t (id,a) values (591,12);
+insert into t (id,a) values (591,13);
+insert into t (id,a) values (591,14);
+insert into t (id,a) values (591,15);
+insert into t (id,a) values (591,16);
+insert into t (id,a) values (591,17);
+insert into t (id,a) values (591,18);
+insert into t (id,a) values (591,19);
+insert into t (id,a) values (591,20);
+insert into t (id,a) values (591,21);
+insert into t (id,a) values (591,22);
+insert into t (id,a) values (591,23);
+insert into t (id,a) values (591,24);
+insert into t (id,a) values (591,25);
+insert into t (id,a) values (591,26);
+insert into t (id,a) values (591,27);
+insert into t (id,a) values (591,28);
+insert into t (id,a) values (591,29);
+insert into t (id,a) values (591,30);
+insert into t (id,a) values (591,31);
+insert into t (id,a) values (591,32);
+insert into t (id,a) values (591,33);
+insert into t (id,a) values (591,34);
+insert into t (id,a) values (591,35);
+insert into t (id,a) values (591,36);
+insert into t (id,a) values (591,37);
+insert into t (id,a) values (591,38);
+insert into t (id,a) values (591,39);
+insert into t (id,a) values (591,40);
+insert into t (id,a) values (591,41);
+insert into t (id,a) values (591,42);
+insert into t (id,a) values (591,43);
+insert into t (id,a) values (591,44);
+insert into t (id,a) values (591,45);
+insert into t (id,a) values (591,46);
+insert into t (id,a) values (591,47);
+insert into t (id,a) values (591,48);
+insert into t (id,a) values (591,49);
+insert into t (id,a) values (591,50);
+insert into t (id,a) values (591,51);
+insert into t (id,a) values (591,52);
+insert into t (id,a) values (591,53);
+insert into t (id,a) values (591,54);
+insert into t (id,a) values (591,55);
+insert into t (id,a) values (591,56);
+insert into t (id,a) values (591,57);
+insert into t (id,a) values (591,58);
+insert into t (id,a) values (591,59);
+insert into t (id,a) values (591,60);
+insert into t (id,a) values (591,61);
+insert into t (id,a) values (591,62);
+insert into t (id,a) values (591,63);
+insert into t (id,a) values (591,64);
+insert into t (id,a) values (591,65);
+insert into t (id,a) values (591,66);
+insert into t (id,a) values (591,67);
+insert into t (id,a) values (591,68);
+insert into t (id,a) values (591,69);
+insert into t (id,a) values (591,70);
+insert into t (id,a) values (591,71);
+insert into t (id,a) values (591,72);
+insert into t (id,a) values (591,73);
+insert into t (id,a) values (591,74);
+insert into t (id,a) values (591,75);
+insert into t (id,a) values (591,76);
+insert into t (id,a) values (591,77);
+insert into t (id,a) values (591,78);
+insert into t (id,a) values (591,79);
+insert into t (id,a) values (591,80);
+insert into t (id,a) values (591,81);
+insert into t (id,a) values (591,82);
+insert into t (id,a) values (591,83);
+insert into t (id,a) values (591,84);
+insert into t (id,a) values (591,85);
+insert into t (id,a) values (591,86);
+insert into t (id,a) values (591,87);
+insert into t (id,a) values (591,88);
+insert into t (id,a) values (591,89);
+insert into t (id,a) values (591,90);
+insert into t (id,a) values (591,91);
+insert into t (id,a) values (591,92);
+insert into t (id,a) values (591,93);
+insert into t (id,a) values (591,94);
+insert into t (id,a) values (591,95);
+insert into t (id,a) values (591,96);
+insert into t (id,a) values (591,97);
+insert into t (id,a) values (591,98);
+insert into t (id,a) values (591,99);
+insert into t (id,a) values (592,0);
+insert into t (id,a) values (592,1);
+insert into t (id,a) values (592,2);
+insert into t (id,a) values (592,3);
+insert into t (id,a) values (592,4);
+insert into t (id,a) values (592,5);
+insert into t (id,a) values (592,6);
+insert into t (id,a) values (592,7);
+insert into t (id,a) values (592,8);
+insert into t (id,a) values (592,9);
+insert into t (id,a) values (592,10);
+insert into t (id,a) values (592,11);
+insert into t (id,a) values (592,12);
+insert into t (id,a) values (592,13);
+insert into t (id,a) values (592,14);
+insert into t (id,a) values (592,15);
+insert into t (id,a) values (592,16);
+insert into t (id,a) values (592,17);
+insert into t (id,a) values (592,18);
+insert into t (id,a) values (592,19);
+insert into t (id,a) values (592,20);
+insert into t (id,a) values (592,21);
+insert into t (id,a) values (592,22);
+insert into t (id,a) values (592,23);
+insert into t (id,a) values (592,24);
+insert into t (id,a) values (592,25);
+insert into t (id,a) values (592,26);
+insert into t (id,a) values (592,27);
+insert into t (id,a) values (592,28);
+insert into t (id,a) values (592,29);
+insert into t (id,a) values (592,30);
+insert into t (id,a) values (592,31);
+insert into t (id,a) values (592,32);
+insert into t (id,a) values (592,33);
+insert into t (id,a) values (592,34);
+insert into t (id,a) values (592,35);
+insert into t (id,a) values (592,36);
+insert into t (id,a) values (592,37);
+insert into t (id,a) values (592,38);
+insert into t (id,a) values (592,39);
+insert into t (id,a) values (592,40);
+insert into t (id,a) values (592,41);
+insert into t (id,a) values (592,42);
+insert into t (id,a) values (592,43);
+insert into t (id,a) values (592,44);
+insert into t (id,a) values (592,45);
+insert into t (id,a) values (592,46);
+insert into t (id,a) values (592,47);
+insert into t (id,a) values (592,48);
+insert into t (id,a) values (592,49);
+insert into t (id,a) values (592,50);
+insert into t (id,a) values (592,51);
+insert into t (id,a) values (592,52);
+insert into t (id,a) values (592,53);
+insert into t (id,a) values (592,54);
+insert into t (id,a) values (592,55);
+insert into t (id,a) values (592,56);
+insert into t (id,a) values (592,57);
+insert into t (id,a) values (592,58);
+insert into t (id,a) values (592,59);
+insert into t (id,a) values (592,60);
+insert into t (id,a) values (592,61);
+insert into t (id,a) values (592,62);
+insert into t (id,a) values (592,63);
+insert into t (id,a) values (592,64);
+insert into t (id,a) values (592,65);
+insert into t (id,a) values (592,66);
+insert into t (id,a) values (592,67);
+insert into t (id,a) values (592,68);
+insert into t (id,a) values (592,69);
+insert into t (id,a) values (592,70);
+insert into t (id,a) values (592,71);
+insert into t (id,a) values (592,72);
+insert into t (id,a) values (592,73);
+insert into t (id,a) values (592,74);
+insert into t (id,a) values (592,75);
+insert into t (id,a) values (592,76);
+insert into t (id,a) values (592,77);
+insert into t (id,a) values (592,78);
+insert into t (id,a) values (592,79);
+insert into t (id,a) values (592,80);
+insert into t (id,a) values (592,81);
+insert into t (id,a) values (592,82);
+insert into t (id,a) values (592,83);
+insert into t (id,a) values (592,84);
+insert into t (id,a) values (592,85);
+insert into t (id,a) values (592,86);
+insert into t (id,a) values (592,87);
+insert into t (id,a) values (592,88);
+insert into t (id,a) values (592,89);
+insert into t (id,a) values (592,90);
+insert into t (id,a) values (592,91);
+insert into t (id,a) values (592,92);
+insert into t (id,a) values (592,93);
+insert into t (id,a) values (592,94);
+insert into t (id,a) values (592,95);
+insert into t (id,a) values (592,96);
+insert into t (id,a) values (592,97);
+insert into t (id,a) values (592,98);
+insert into t (id,a) values (592,99);
+insert into t (id,a) values (593,0);
+insert into t (id,a) values (593,1);
+insert into t (id,a) values (593,2);
+insert into t (id,a) values (593,3);
+insert into t (id,a) values (593,4);
+insert into t (id,a) values (593,5);
+insert into t (id,a) values (593,6);
+insert into t (id,a) values (593,7);
+insert into t (id,a) values (593,8);
+insert into t (id,a) values (593,9);
+insert into t (id,a) values (593,10);
+insert into t (id,a) values (593,11);
+insert into t (id,a) values (593,12);
+insert into t (id,a) values (593,13);
+insert into t (id,a) values (593,14);
+insert into t (id,a) values (593,15);
+insert into t (id,a) values (593,16);
+insert into t (id,a) values (593,17);
+insert into t (id,a) values (593,18);
+insert into t (id,a) values (593,19);
+insert into t (id,a) values (593,20);
+insert into t (id,a) values (593,21);
+insert into t (id,a) values (593,22);
+insert into t (id,a) values (593,23);
+insert into t (id,a) values (593,24);
+insert into t (id,a) values (593,25);
+insert into t (id,a) values (593,26);
+insert into t (id,a) values (593,27);
+insert into t (id,a) values (593,28);
+insert into t (id,a) values (593,29);
+insert into t (id,a) values (593,30);
+insert into t (id,a) values (593,31);
+insert into t (id,a) values (593,32);
+insert into t (id,a) values (593,33);
+insert into t (id,a) values (593,34);
+insert into t (id,a) values (593,35);
+insert into t (id,a) values (593,36);
+insert into t (id,a) values (593,37);
+insert into t (id,a) values (593,38);
+insert into t (id,a) values (593,39);
+insert into t (id,a) values (593,40);
+insert into t (id,a) values (593,41);
+insert into t (id,a) values (593,42);
+insert into t (id,a) values (593,43);
+insert into t (id,a) values (593,44);
+insert into t (id,a) values (593,45);
+insert into t (id,a) values (593,46);
+insert into t (id,a) values (593,47);
+insert into t (id,a) values (593,48);
+insert into t (id,a) values (593,49);
+insert into t (id,a) values (593,50);
+insert into t (id,a) values (593,51);
+insert into t (id,a) values (593,52);
+insert into t (id,a) values (593,53);
+insert into t (id,a) values (593,54);
+insert into t (id,a) values (593,55);
+insert into t (id,a) values (593,56);
+insert into t (id,a) values (593,57);
+insert into t (id,a) values (593,58);
+insert into t (id,a) values (593,59);
+insert into t (id,a) values (593,60);
+insert into t (id,a) values (593,61);
+insert into t (id,a) values (593,62);
+insert into t (id,a) values (593,63);
+insert into t (id,a) values (593,64);
+insert into t (id,a) values (593,65);
+insert into t (id,a) values (593,66);
+insert into t (id,a) values (593,67);
+insert into t (id,a) values (593,68);
+insert into t (id,a) values (593,69);
+insert into t (id,a) values (593,70);
+insert into t (id,a) values (593,71);
+insert into t (id,a) values (593,72);
+insert into t (id,a) values (593,73);
+insert into t (id,a) values (593,74);
+insert into t (id,a) values (593,75);
+insert into t (id,a) values (593,76);
+insert into t (id,a) values (593,77);
+insert into t (id,a) values (593,78);
+insert into t (id,a) values (593,79);
+insert into t (id,a) values (593,80);
+insert into t (id,a) values (593,81);
+insert into t (id,a) values (593,82);
+insert into t (id,a) values (593,83);
+insert into t (id,a) values (593,84);
+insert into t (id,a) values (593,85);
+insert into t (id,a) values (593,86);
+insert into t (id,a) values (593,87);
+insert into t (id,a) values (593,88);
+insert into t (id,a) values (593,89);
+insert into t (id,a) values (593,90);
+insert into t (id,a) values (593,91);
+insert into t (id,a) values (593,92);
+insert into t (id,a) values (593,93);
+insert into t (id,a) values (593,94);
+insert into t (id,a) values (593,95);
+insert into t (id,a) values (593,96);
+insert into t (id,a) values (593,97);
+insert into t (id,a) values (593,98);
+insert into t (id,a) values (593,99);
+insert into t (id,a) values (594,0);
+insert into t (id,a) values (594,1);
+insert into t (id,a) values (594,2);
+insert into t (id,a) values (594,3);
+insert into t (id,a) values (594,4);
+insert into t (id,a) values (594,5);
+insert into t (id,a) values (594,6);
+insert into t (id,a) values (594,7);
+insert into t (id,a) values (594,8);
+insert into t (id,a) values (594,9);
+insert into t (id,a) values (594,10);
+insert into t (id,a) values (594,11);
+insert into t (id,a) values (594,12);
+insert into t (id,a) values (594,13);
+insert into t (id,a) values (594,14);
+insert into t (id,a) values (594,15);
+insert into t (id,a) values (594,16);
+insert into t (id,a) values (594,17);
+insert into t (id,a) values (594,18);
+insert into t (id,a) values (594,19);
+insert into t (id,a) values (594,20);
+insert into t (id,a) values (594,21);
+insert into t (id,a) values (594,22);
+insert into t (id,a) values (594,23);
+insert into t (id,a) values (594,24);
+insert into t (id,a) values (594,25);
+insert into t (id,a) values (594,26);
+insert into t (id,a) values (594,27);
+insert into t (id,a) values (594,28);
+insert into t (id,a) values (594,29);
+insert into t (id,a) values (594,30);
+insert into t (id,a) values (594,31);
+insert into t (id,a) values (594,32);
+insert into t (id,a) values (594,33);
+insert into t (id,a) values (594,34);
+insert into t (id,a) values (594,35);
+insert into t (id,a) values (594,36);
+insert into t (id,a) values (594,37);
+insert into t (id,a) values (594,38);
+insert into t (id,a) values (594,39);
+insert into t (id,a) values (594,40);
+insert into t (id,a) values (594,41);
+insert into t (id,a) values (594,42);
+insert into t (id,a) values (594,43);
+insert into t (id,a) values (594,44);
+insert into t (id,a) values (594,45);
+insert into t (id,a) values (594,46);
+insert into t (id,a) values (594,47);
+insert into t (id,a) values (594,48);
+insert into t (id,a) values (594,49);
+insert into t (id,a) values (594,50);
+insert into t (id,a) values (594,51);
+insert into t (id,a) values (594,52);
+insert into t (id,a) values (594,53);
+insert into t (id,a) values (594,54);
+insert into t (id,a) values (594,55);
+insert into t (id,a) values (594,56);
+insert into t (id,a) values (594,57);
+insert into t (id,a) values (594,58);
+insert into t (id,a) values (594,59);
+insert into t (id,a) values (594,60);
+insert into t (id,a) values (594,61);
+insert into t (id,a) values (594,62);
+insert into t (id,a) values (594,63);
+insert into t (id,a) values (594,64);
+insert into t (id,a) values (594,65);
+insert into t (id,a) values (594,66);
+insert into t (id,a) values (594,67);
+insert into t (id,a) values (594,68);
+insert into t (id,a) values (594,69);
+insert into t (id,a) values (594,70);
+insert into t (id,a) values (594,71);
+insert into t (id,a) values (594,72);
+insert into t (id,a) values (594,73);
+insert into t (id,a) values (594,74);
+insert into t (id,a) values (594,75);
+insert into t (id,a) values (594,76);
+insert into t (id,a) values (594,77);
+insert into t (id,a) values (594,78);
+insert into t (id,a) values (594,79);
+insert into t (id,a) values (594,80);
+insert into t (id,a) values (594,81);
+insert into t (id,a) values (594,82);
+insert into t (id,a) values (594,83);
+insert into t (id,a) values (594,84);
+insert into t (id,a) values (594,85);
+insert into t (id,a) values (594,86);
+insert into t (id,a) values (594,87);
+insert into t (id,a) values (594,88);
+insert into t (id,a) values (594,89);
+insert into t (id,a) values (594,90);
+insert into t (id,a) values (594,91);
+insert into t (id,a) values (594,92);
+insert into t (id,a) values (594,93);
+insert into t (id,a) values (594,94);
+insert into t (id,a) values (594,95);
+insert into t (id,a) values (594,96);
+insert into t (id,a) values (594,97);
+insert into t (id,a) values (594,98);
+insert into t (id,a) values (594,99);
+insert into t (id,a) values (595,0);
+insert into t (id,a) values (595,1);
+insert into t (id,a) values (595,2);
+insert into t (id,a) values (595,3);
+insert into t (id,a) values (595,4);
+insert into t (id,a) values (595,5);
+insert into t (id,a) values (595,6);
+insert into t (id,a) values (595,7);
+insert into t (id,a) values (595,8);
+insert into t (id,a) values (595,9);
+insert into t (id,a) values (595,10);
+insert into t (id,a) values (595,11);
+insert into t (id,a) values (595,12);
+insert into t (id,a) values (595,13);
+insert into t (id,a) values (595,14);
+insert into t (id,a) values (595,15);
+insert into t (id,a) values (595,16);
+insert into t (id,a) values (595,17);
+insert into t (id,a) values (595,18);
+insert into t (id,a) values (595,19);
+insert into t (id,a) values (595,20);
+insert into t (id,a) values (595,21);
+insert into t (id,a) values (595,22);
+insert into t (id,a) values (595,23);
+insert into t (id,a) values (595,24);
+insert into t (id,a) values (595,25);
+insert into t (id,a) values (595,26);
+insert into t (id,a) values (595,27);
+insert into t (id,a) values (595,28);
+insert into t (id,a) values (595,29);
+insert into t (id,a) values (595,30);
+insert into t (id,a) values (595,31);
+insert into t (id,a) values (595,32);
+insert into t (id,a) values (595,33);
+insert into t (id,a) values (595,34);
+insert into t (id,a) values (595,35);
+insert into t (id,a) values (595,36);
+insert into t (id,a) values (595,37);
+insert into t (id,a) values (595,38);
+insert into t (id,a) values (595,39);
+insert into t (id,a) values (595,40);
+insert into t (id,a) values (595,41);
+insert into t (id,a) values (595,42);
+insert into t (id,a) values (595,43);
+insert into t (id,a) values (595,44);
+insert into t (id,a) values (595,45);
+insert into t (id,a) values (595,46);
+insert into t (id,a) values (595,47);
+insert into t (id,a) values (595,48);
+insert into t (id,a) values (595,49);
+insert into t (id,a) values (595,50);
+insert into t (id,a) values (595,51);
+insert into t (id,a) values (595,52);
+insert into t (id,a) values (595,53);
+insert into t (id,a) values (595,54);
+insert into t (id,a) values (595,55);
+insert into t (id,a) values (595,56);
+insert into t (id,a) values (595,57);
+insert into t (id,a) values (595,58);
+insert into t (id,a) values (595,59);
+insert into t (id,a) values (595,60);
+insert into t (id,a) values (595,61);
+insert into t (id,a) values (595,62);
+insert into t (id,a) values (595,63);
+insert into t (id,a) values (595,64);
+insert into t (id,a) values (595,65);
+insert into t (id,a) values (595,66);
+insert into t (id,a) values (595,67);
+insert into t (id,a) values (595,68);
+insert into t (id,a) values (595,69);
+insert into t (id,a) values (595,70);
+insert into t (id,a) values (595,71);
+insert into t (id,a) values (595,72);
+insert into t (id,a) values (595,73);
+insert into t (id,a) values (595,74);
+insert into t (id,a) values (595,75);
+insert into t (id,a) values (595,76);
+insert into t (id,a) values (595,77);
+insert into t (id,a) values (595,78);
+insert into t (id,a) values (595,79);
+insert into t (id,a) values (595,80);
+insert into t (id,a) values (595,81);
+insert into t (id,a) values (595,82);
+insert into t (id,a) values (595,83);
+insert into t (id,a) values (595,84);
+insert into t (id,a) values (595,85);
+insert into t (id,a) values (595,86);
+insert into t (id,a) values (595,87);
+insert into t (id,a) values (595,88);
+insert into t (id,a) values (595,89);
+insert into t (id,a) values (595,90);
+insert into t (id,a) values (595,91);
+insert into t (id,a) values (595,92);
+insert into t (id,a) values (595,93);
+insert into t (id,a) values (595,94);
+insert into t (id,a) values (595,95);
+insert into t (id,a) values (595,96);
+insert into t (id,a) values (595,97);
+insert into t (id,a) values (595,98);
+insert into t (id,a) values (595,99);
+insert into t (id,a) values (596,0);
+insert into t (id,a) values (596,1);
+insert into t (id,a) values (596,2);
+insert into t (id,a) values (596,3);
+insert into t (id,a) values (596,4);
+insert into t (id,a) values (596,5);
+insert into t (id,a) values (596,6);
+insert into t (id,a) values (596,7);
+insert into t (id,a) values (596,8);
+insert into t (id,a) values (596,9);
+insert into t (id,a) values (596,10);
+insert into t (id,a) values (596,11);
+insert into t (id,a) values (596,12);
+insert into t (id,a) values (596,13);
+insert into t (id,a) values (596,14);
+insert into t (id,a) values (596,15);
+insert into t (id,a) values (596,16);
+insert into t (id,a) values (596,17);
+insert into t (id,a) values (596,18);
+insert into t (id,a) values (596,19);
+insert into t (id,a) values (596,20);
+insert into t (id,a) values (596,21);
+insert into t (id,a) values (596,22);
+insert into t (id,a) values (596,23);
+insert into t (id,a) values (596,24);
+insert into t (id,a) values (596,25);
+insert into t (id,a) values (596,26);
+insert into t (id,a) values (596,27);
+insert into t (id,a) values (596,28);
+insert into t (id,a) values (596,29);
+insert into t (id,a) values (596,30);
+insert into t (id,a) values (596,31);
+insert into t (id,a) values (596,32);
+insert into t (id,a) values (596,33);
+insert into t (id,a) values (596,34);
+insert into t (id,a) values (596,35);
+insert into t (id,a) values (596,36);
+insert into t (id,a) values (596,37);
+insert into t (id,a) values (596,38);
+insert into t (id,a) values (596,39);
+insert into t (id,a) values (596,40);
+insert into t (id,a) values (596,41);
+insert into t (id,a) values (596,42);
+insert into t (id,a) values (596,43);
+insert into t (id,a) values (596,44);
+insert into t (id,a) values (596,45);
+insert into t (id,a) values (596,46);
+insert into t (id,a) values (596,47);
+insert into t (id,a) values (596,48);
+insert into t (id,a) values (596,49);
+insert into t (id,a) values (596,50);
+insert into t (id,a) values (596,51);
+insert into t (id,a) values (596,52);
+insert into t (id,a) values (596,53);
+insert into t (id,a) values (596,54);
+insert into t (id,a) values (596,55);
+insert into t (id,a) values (596,56);
+insert into t (id,a) values (596,57);
+insert into t (id,a) values (596,58);
+insert into t (id,a) values (596,59);
+insert into t (id,a) values (596,60);
+insert into t (id,a) values (596,61);
+insert into t (id,a) values (596,62);
+insert into t (id,a) values (596,63);
+insert into t (id,a) values (596,64);
+insert into t (id,a) values (596,65);
+insert into t (id,a) values (596,66);
+insert into t (id,a) values (596,67);
+insert into t (id,a) values (596,68);
+insert into t (id,a) values (596,69);
+insert into t (id,a) values (596,70);
+insert into t (id,a) values (596,71);
+insert into t (id,a) values (596,72);
+insert into t (id,a) values (596,73);
+insert into t (id,a) values (596,74);
+insert into t (id,a) values (596,75);
+insert into t (id,a) values (596,76);
+insert into t (id,a) values (596,77);
+insert into t (id,a) values (596,78);
+insert into t (id,a) values (596,79);
+insert into t (id,a) values (596,80);
+insert into t (id,a) values (596,81);
+insert into t (id,a) values (596,82);
+insert into t (id,a) values (596,83);
+insert into t (id,a) values (596,84);
+insert into t (id,a) values (596,85);
+insert into t (id,a) values (596,86);
+insert into t (id,a) values (596,87);
+insert into t (id,a) values (596,88);
+insert into t (id,a) values (596,89);
+insert into t (id,a) values (596,90);
+insert into t (id,a) values (596,91);
+insert into t (id,a) values (596,92);
+insert into t (id,a) values (596,93);
+insert into t (id,a) values (596,94);
+insert into t (id,a) values (596,95);
+insert into t (id,a) values (596,96);
+insert into t (id,a) values (596,97);
+insert into t (id,a) values (596,98);
+insert into t (id,a) values (596,99);
+insert into t (id,a) values (597,0);
+insert into t (id,a) values (597,1);
+insert into t (id,a) values (597,2);
+insert into t (id,a) values (597,3);
+insert into t (id,a) values (597,4);
+insert into t (id,a) values (597,5);
+insert into t (id,a) values (597,6);
+insert into t (id,a) values (597,7);
+insert into t (id,a) values (597,8);
+insert into t (id,a) values (597,9);
+insert into t (id,a) values (597,10);
+insert into t (id,a) values (597,11);
+insert into t (id,a) values (597,12);
+insert into t (id,a) values (597,13);
+insert into t (id,a) values (597,14);
+insert into t (id,a) values (597,15);
+insert into t (id,a) values (597,16);
+insert into t (id,a) values (597,17);
+insert into t (id,a) values (597,18);
+insert into t (id,a) values (597,19);
+insert into t (id,a) values (597,20);
+insert into t (id,a) values (597,21);
+insert into t (id,a) values (597,22);
+insert into t (id,a) values (597,23);
+insert into t (id,a) values (597,24);
+insert into t (id,a) values (597,25);
+insert into t (id,a) values (597,26);
+insert into t (id,a) values (597,27);
+insert into t (id,a) values (597,28);
+insert into t (id,a) values (597,29);
+insert into t (id,a) values (597,30);
+insert into t (id,a) values (597,31);
+insert into t (id,a) values (597,32);
+insert into t (id,a) values (597,33);
+insert into t (id,a) values (597,34);
+insert into t (id,a) values (597,35);
+insert into t (id,a) values (597,36);
+insert into t (id,a) values (597,37);
+insert into t (id,a) values (597,38);
+insert into t (id,a) values (597,39);
+insert into t (id,a) values (597,40);
+insert into t (id,a) values (597,41);
+insert into t (id,a) values (597,42);
+insert into t (id,a) values (597,43);
+insert into t (id,a) values (597,44);
+insert into t (id,a) values (597,45);
+insert into t (id,a) values (597,46);
+insert into t (id,a) values (597,47);
+insert into t (id,a) values (597,48);
+insert into t (id,a) values (597,49);
+insert into t (id,a) values (597,50);
+insert into t (id,a) values (597,51);
+insert into t (id,a) values (597,52);
+insert into t (id,a) values (597,53);
+insert into t (id,a) values (597,54);
+insert into t (id,a) values (597,55);
+insert into t (id,a) values (597,56);
+insert into t (id,a) values (597,57);
+insert into t (id,a) values (597,58);
+insert into t (id,a) values (597,59);
+insert into t (id,a) values (597,60);
+insert into t (id,a) values (597,61);
+insert into t (id,a) values (597,62);
+insert into t (id,a) values (597,63);
+insert into t (id,a) values (597,64);
+insert into t (id,a) values (597,65);
+insert into t (id,a) values (597,66);
+insert into t (id,a) values (597,67);
+insert into t (id,a) values (597,68);
+insert into t (id,a) values (597,69);
+insert into t (id,a) values (597,70);
+insert into t (id,a) values (597,71);
+insert into t (id,a) values (597,72);
+insert into t (id,a) values (597,73);
+insert into t (id,a) values (597,74);
+insert into t (id,a) values (597,75);
+insert into t (id,a) values (597,76);
+insert into t (id,a) values (597,77);
+insert into t (id,a) values (597,78);
+insert into t (id,a) values (597,79);
+insert into t (id,a) values (597,80);
+insert into t (id,a) values (597,81);
+insert into t (id,a) values (597,82);
+insert into t (id,a) values (597,83);
+insert into t (id,a) values (597,84);
+insert into t (id,a) values (597,85);
+insert into t (id,a) values (597,86);
+insert into t (id,a) values (597,87);
+insert into t (id,a) values (597,88);
+insert into t (id,a) values (597,89);
+insert into t (id,a) values (597,90);
+insert into t (id,a) values (597,91);
+insert into t (id,a) values (597,92);
+insert into t (id,a) values (597,93);
+insert into t (id,a) values (597,94);
+insert into t (id,a) values (597,95);
+insert into t (id,a) values (597,96);
+insert into t (id,a) values (597,97);
+insert into t (id,a) values (597,98);
+insert into t (id,a) values (597,99);
+insert into t (id,a) values (598,0);
+insert into t (id,a) values (598,1);
+insert into t (id,a) values (598,2);
+insert into t (id,a) values (598,3);
+insert into t (id,a) values (598,4);
+insert into t (id,a) values (598,5);
+insert into t (id,a) values (598,6);
+insert into t (id,a) values (598,7);
+insert into t (id,a) values (598,8);
+insert into t (id,a) values (598,9);
+insert into t (id,a) values (598,10);
+insert into t (id,a) values (598,11);
+insert into t (id,a) values (598,12);
+insert into t (id,a) values (598,13);
+insert into t (id,a) values (598,14);
+insert into t (id,a) values (598,15);
+insert into t (id,a) values (598,16);
+insert into t (id,a) values (598,17);
+insert into t (id,a) values (598,18);
+insert into t (id,a) values (598,19);
+insert into t (id,a) values (598,20);
+insert into t (id,a) values (598,21);
+insert into t (id,a) values (598,22);
+insert into t (id,a) values (598,23);
+insert into t (id,a) values (598,24);
+insert into t (id,a) values (598,25);
+insert into t (id,a) values (598,26);
+insert into t (id,a) values (598,27);
+insert into t (id,a) values (598,28);
+insert into t (id,a) values (598,29);
+insert into t (id,a) values (598,30);
+insert into t (id,a) values (598,31);
+insert into t (id,a) values (598,32);
+insert into t (id,a) values (598,33);
+insert into t (id,a) values (598,34);
+insert into t (id,a) values (598,35);
+insert into t (id,a) values (598,36);
+insert into t (id,a) values (598,37);
+insert into t (id,a) values (598,38);
+insert into t (id,a) values (598,39);
+insert into t (id,a) values (598,40);
+insert into t (id,a) values (598,41);
+insert into t (id,a) values (598,42);
+insert into t (id,a) values (598,43);
+insert into t (id,a) values (598,44);
+insert into t (id,a) values (598,45);
+insert into t (id,a) values (598,46);
+insert into t (id,a) values (598,47);
+insert into t (id,a) values (598,48);
+insert into t (id,a) values (598,49);
+insert into t (id,a) values (598,50);
+insert into t (id,a) values (598,51);
+insert into t (id,a) values (598,52);
+insert into t (id,a) values (598,53);
+insert into t (id,a) values (598,54);
+insert into t (id,a) values (598,55);
+insert into t (id,a) values (598,56);
+insert into t (id,a) values (598,57);
+insert into t (id,a) values (598,58);
+insert into t (id,a) values (598,59);
+insert into t (id,a) values (598,60);
+insert into t (id,a) values (598,61);
+insert into t (id,a) values (598,62);
+insert into t (id,a) values (598,63);
+insert into t (id,a) values (598,64);
+insert into t (id,a) values (598,65);
+insert into t (id,a) values (598,66);
+insert into t (id,a) values (598,67);
+insert into t (id,a) values (598,68);
+insert into t (id,a) values (598,69);
+insert into t (id,a) values (598,70);
+insert into t (id,a) values (598,71);
+insert into t (id,a) values (598,72);
+insert into t (id,a) values (598,73);
+insert into t (id,a) values (598,74);
+insert into t (id,a) values (598,75);
+insert into t (id,a) values (598,76);
+insert into t (id,a) values (598,77);
+insert into t (id,a) values (598,78);
+insert into t (id,a) values (598,79);
+insert into t (id,a) values (598,80);
+insert into t (id,a) values (598,81);
+insert into t (id,a) values (598,82);
+insert into t (id,a) values (598,83);
+insert into t (id,a) values (598,84);
+insert into t (id,a) values (598,85);
+insert into t (id,a) values (598,86);
+insert into t (id,a) values (598,87);
+insert into t (id,a) values (598,88);
+insert into t (id,a) values (598,89);
+insert into t (id,a) values (598,90);
+insert into t (id,a) values (598,91);
+insert into t (id,a) values (598,92);
+insert into t (id,a) values (598,93);
+insert into t (id,a) values (598,94);
+insert into t (id,a) values (598,95);
+insert into t (id,a) values (598,96);
+insert into t (id,a) values (598,97);
+insert into t (id,a) values (598,98);
+insert into t (id,a) values (598,99);
+insert into t (id,a) values (599,0);
+insert into t (id,a) values (599,1);
+insert into t (id,a) values (599,2);
+insert into t (id,a) values (599,3);
+insert into t (id,a) values (599,4);
+insert into t (id,a) values (599,5);
+insert into t (id,a) values (599,6);
+insert into t (id,a) values (599,7);
+insert into t (id,a) values (599,8);
+insert into t (id,a) values (599,9);
+insert into t (id,a) values (599,10);
+insert into t (id,a) values (599,11);
+insert into t (id,a) values (599,12);
+insert into t (id,a) values (599,13);
+insert into t (id,a) values (599,14);
+insert into t (id,a) values (599,15);
+insert into t (id,a) values (599,16);
+insert into t (id,a) values (599,17);
+insert into t (id,a) values (599,18);
+insert into t (id,a) values (599,19);
+insert into t (id,a) values (599,20);
+insert into t (id,a) values (599,21);
+insert into t (id,a) values (599,22);
+insert into t (id,a) values (599,23);
+insert into t (id,a) values (599,24);
+insert into t (id,a) values (599,25);
+insert into t (id,a) values (599,26);
+insert into t (id,a) values (599,27);
+insert into t (id,a) values (599,28);
+insert into t (id,a) values (599,29);
+insert into t (id,a) values (599,30);
+insert into t (id,a) values (599,31);
+insert into t (id,a) values (599,32);
+insert into t (id,a) values (599,33);
+insert into t (id,a) values (599,34);
+insert into t (id,a) values (599,35);
+insert into t (id,a) values (599,36);
+insert into t (id,a) values (599,37);
+insert into t (id,a) values (599,38);
+insert into t (id,a) values (599,39);
+insert into t (id,a) values (599,40);
+insert into t (id,a) values (599,41);
+insert into t (id,a) values (599,42);
+insert into t (id,a) values (599,43);
+insert into t (id,a) values (599,44);
+insert into t (id,a) values (599,45);
+insert into t (id,a) values (599,46);
+insert into t (id,a) values (599,47);
+insert into t (id,a) values (599,48);
+insert into t (id,a) values (599,49);
+insert into t (id,a) values (599,50);
+insert into t (id,a) values (599,51);
+insert into t (id,a) values (599,52);
+insert into t (id,a) values (599,53);
+insert into t (id,a) values (599,54);
+insert into t (id,a) values (599,55);
+insert into t (id,a) values (599,56);
+insert into t (id,a) values (599,57);
+insert into t (id,a) values (599,58);
+insert into t (id,a) values (599,59);
+insert into t (id,a) values (599,60);
+insert into t (id,a) values (599,61);
+insert into t (id,a) values (599,62);
+insert into t (id,a) values (599,63);
+insert into t (id,a) values (599,64);
+insert into t (id,a) values (599,65);
+insert into t (id,a) values (599,66);
+insert into t (id,a) values (599,67);
+insert into t (id,a) values (599,68);
+insert into t (id,a) values (599,69);
+insert into t (id,a) values (599,70);
+insert into t (id,a) values (599,71);
+insert into t (id,a) values (599,72);
+insert into t (id,a) values (599,73);
+insert into t (id,a) values (599,74);
+insert into t (id,a) values (599,75);
+insert into t (id,a) values (599,76);
+insert into t (id,a) values (599,77);
+insert into t (id,a) values (599,78);
+insert into t (id,a) values (599,79);
+insert into t (id,a) values (599,80);
+insert into t (id,a) values (599,81);
+insert into t (id,a) values (599,82);
+insert into t (id,a) values (599,83);
+insert into t (id,a) values (599,84);
+insert into t (id,a) values (599,85);
+insert into t (id,a) values (599,86);
+insert into t (id,a) values (599,87);
+insert into t (id,a) values (599,88);
+insert into t (id,a) values (599,89);
+insert into t (id,a) values (599,90);
+insert into t (id,a) values (599,91);
+insert into t (id,a) values (599,92);
+insert into t (id,a) values (599,93);
+insert into t (id,a) values (599,94);
+insert into t (id,a) values (599,95);
+insert into t (id,a) values (599,96);
+insert into t (id,a) values (599,97);
+insert into t (id,a) values (599,98);
+insert into t (id,a) values (599,99);
+insert into t (id,a) values (600,0);
+insert into t (id,a) values (600,1);
+insert into t (id,a) values (600,2);
+insert into t (id,a) values (600,3);
+insert into t (id,a) values (600,4);
+insert into t (id,a) values (600,5);
+insert into t (id,a) values (600,6);
+insert into t (id,a) values (600,7);
+insert into t (id,a) values (600,8);
+insert into t (id,a) values (600,9);
+insert into t (id,a) values (600,10);
+insert into t (id,a) values (600,11);
+insert into t (id,a) values (600,12);
+insert into t (id,a) values (600,13);
+insert into t (id,a) values (600,14);
+insert into t (id,a) values (600,15);
+insert into t (id,a) values (600,16);
+insert into t (id,a) values (600,17);
+insert into t (id,a) values (600,18);
+insert into t (id,a) values (600,19);
+insert into t (id,a) values (600,20);
+insert into t (id,a) values (600,21);
+insert into t (id,a) values (600,22);
+insert into t (id,a) values (600,23);
+insert into t (id,a) values (600,24);
+insert into t (id,a) values (600,25);
+insert into t (id,a) values (600,26);
+insert into t (id,a) values (600,27);
+insert into t (id,a) values (600,28);
+insert into t (id,a) values (600,29);
+insert into t (id,a) values (600,30);
+insert into t (id,a) values (600,31);
+insert into t (id,a) values (600,32);
+insert into t (id,a) values (600,33);
+insert into t (id,a) values (600,34);
+insert into t (id,a) values (600,35);
+insert into t (id,a) values (600,36);
+insert into t (id,a) values (600,37);
+insert into t (id,a) values (600,38);
+insert into t (id,a) values (600,39);
+insert into t (id,a) values (600,40);
+insert into t (id,a) values (600,41);
+insert into t (id,a) values (600,42);
+insert into t (id,a) values (600,43);
+insert into t (id,a) values (600,44);
+insert into t (id,a) values (600,45);
+insert into t (id,a) values (600,46);
+insert into t (id,a) values (600,47);
+insert into t (id,a) values (600,48);
+insert into t (id,a) values (600,49);
+insert into t (id,a) values (600,50);
+insert into t (id,a) values (600,51);
+insert into t (id,a) values (600,52);
+insert into t (id,a) values (600,53);
+insert into t (id,a) values (600,54);
+insert into t (id,a) values (600,55);
+insert into t (id,a) values (600,56);
+insert into t (id,a) values (600,57);
+insert into t (id,a) values (600,58);
+insert into t (id,a) values (600,59);
+insert into t (id,a) values (600,60);
+insert into t (id,a) values (600,61);
+insert into t (id,a) values (600,62);
+insert into t (id,a) values (600,63);
+insert into t (id,a) values (600,64);
+insert into t (id,a) values (600,65);
+insert into t (id,a) values (600,66);
+insert into t (id,a) values (600,67);
+insert into t (id,a) values (600,68);
+insert into t (id,a) values (600,69);
+insert into t (id,a) values (600,70);
+insert into t (id,a) values (600,71);
+insert into t (id,a) values (600,72);
+insert into t (id,a) values (600,73);
+insert into t (id,a) values (600,74);
+insert into t (id,a) values (600,75);
+insert into t (id,a) values (600,76);
+insert into t (id,a) values (600,77);
+insert into t (id,a) values (600,78);
+insert into t (id,a) values (600,79);
+insert into t (id,a) values (600,80);
+insert into t (id,a) values (600,81);
+insert into t (id,a) values (600,82);
+insert into t (id,a) values (600,83);
+insert into t (id,a) values (600,84);
+insert into t (id,a) values (600,85);
+insert into t (id,a) values (600,86);
+insert into t (id,a) values (600,87);
+insert into t (id,a) values (600,88);
+insert into t (id,a) values (600,89);
+insert into t (id,a) values (600,90);
+insert into t (id,a) values (600,91);
+insert into t (id,a) values (600,92);
+insert into t (id,a) values (600,93);
+insert into t (id,a) values (600,94);
+insert into t (id,a) values (600,95);
+insert into t (id,a) values (600,96);
+insert into t (id,a) values (600,97);
+insert into t (id,a) values (600,98);
+insert into t (id,a) values (600,99);
+insert into t (id,a) values (601,0);
+insert into t (id,a) values (601,1);
+insert into t (id,a) values (601,2);
+insert into t (id,a) values (601,3);
+insert into t (id,a) values (601,4);
+insert into t (id,a) values (601,5);
+insert into t (id,a) values (601,6);
+insert into t (id,a) values (601,7);
+insert into t (id,a) values (601,8);
+insert into t (id,a) values (601,9);
+insert into t (id,a) values (601,10);
+insert into t (id,a) values (601,11);
+insert into t (id,a) values (601,12);
+insert into t (id,a) values (601,13);
+insert into t (id,a) values (601,14);
+insert into t (id,a) values (601,15);
+insert into t (id,a) values (601,16);
+insert into t (id,a) values (601,17);
+insert into t (id,a) values (601,18);
+insert into t (id,a) values (601,19);
+insert into t (id,a) values (601,20);
+insert into t (id,a) values (601,21);
+insert into t (id,a) values (601,22);
+insert into t (id,a) values (601,23);
+insert into t (id,a) values (601,24);
+insert into t (id,a) values (601,25);
+insert into t (id,a) values (601,26);
+insert into t (id,a) values (601,27);
+insert into t (id,a) values (601,28);
+insert into t (id,a) values (601,29);
+insert into t (id,a) values (601,30);
+insert into t (id,a) values (601,31);
+insert into t (id,a) values (601,32);
+insert into t (id,a) values (601,33);
+insert into t (id,a) values (601,34);
+insert into t (id,a) values (601,35);
+insert into t (id,a) values (601,36);
+insert into t (id,a) values (601,37);
+insert into t (id,a) values (601,38);
+insert into t (id,a) values (601,39);
+insert into t (id,a) values (601,40);
+insert into t (id,a) values (601,41);
+insert into t (id,a) values (601,42);
+insert into t (id,a) values (601,43);
+insert into t (id,a) values (601,44);
+insert into t (id,a) values (601,45);
+insert into t (id,a) values (601,46);
+insert into t (id,a) values (601,47);
+insert into t (id,a) values (601,48);
+insert into t (id,a) values (601,49);
+insert into t (id,a) values (601,50);
+insert into t (id,a) values (601,51);
+insert into t (id,a) values (601,52);
+insert into t (id,a) values (601,53);
+insert into t (id,a) values (601,54);
+insert into t (id,a) values (601,55);
+insert into t (id,a) values (601,56);
+insert into t (id,a) values (601,57);
+insert into t (id,a) values (601,58);
+insert into t (id,a) values (601,59);
+insert into t (id,a) values (601,60);
+insert into t (id,a) values (601,61);
+insert into t (id,a) values (601,62);
+insert into t (id,a) values (601,63);
+insert into t (id,a) values (601,64);
+insert into t (id,a) values (601,65);
+insert into t (id,a) values (601,66);
+insert into t (id,a) values (601,67);
+insert into t (id,a) values (601,68);
+insert into t (id,a) values (601,69);
+insert into t (id,a) values (601,70);
+insert into t (id,a) values (601,71);
+insert into t (id,a) values (601,72);
+insert into t (id,a) values (601,73);
+insert into t (id,a) values (601,74);
+insert into t (id,a) values (601,75);
+insert into t (id,a) values (601,76);
+insert into t (id,a) values (601,77);
+insert into t (id,a) values (601,78);
+insert into t (id,a) values (601,79);
+insert into t (id,a) values (601,80);
+insert into t (id,a) values (601,81);
+insert into t (id,a) values (601,82);
+insert into t (id,a) values (601,83);
+insert into t (id,a) values (601,84);
+insert into t (id,a) values (601,85);
+insert into t (id,a) values (601,86);
+insert into t (id,a) values (601,87);
+insert into t (id,a) values (601,88);
+insert into t (id,a) values (601,89);
+insert into t (id,a) values (601,90);
+insert into t (id,a) values (601,91);
+insert into t (id,a) values (601,92);
+insert into t (id,a) values (601,93);
+insert into t (id,a) values (601,94);
+insert into t (id,a) values (601,95);
+insert into t (id,a) values (601,96);
+insert into t (id,a) values (601,97);
+insert into t (id,a) values (601,98);
+insert into t (id,a) values (601,99);
+insert into t (id,a) values (602,0);
+insert into t (id,a) values (602,1);
+insert into t (id,a) values (602,2);
+insert into t (id,a) values (602,3);
+insert into t (id,a) values (602,4);
+insert into t (id,a) values (602,5);
+insert into t (id,a) values (602,6);
+insert into t (id,a) values (602,7);
+insert into t (id,a) values (602,8);
+insert into t (id,a) values (602,9);
+insert into t (id,a) values (602,10);
+insert into t (id,a) values (602,11);
+insert into t (id,a) values (602,12);
+insert into t (id,a) values (602,13);
+insert into t (id,a) values (602,14);
+insert into t (id,a) values (602,15);
+insert into t (id,a) values (602,16);
+insert into t (id,a) values (602,17);
+insert into t (id,a) values (602,18);
+insert into t (id,a) values (602,19);
+insert into t (id,a) values (602,20);
+insert into t (id,a) values (602,21);
+insert into t (id,a) values (602,22);
+insert into t (id,a) values (602,23);
+insert into t (id,a) values (602,24);
+insert into t (id,a) values (602,25);
+insert into t (id,a) values (602,26);
+insert into t (id,a) values (602,27);
+insert into t (id,a) values (602,28);
+insert into t (id,a) values (602,29);
+insert into t (id,a) values (602,30);
+insert into t (id,a) values (602,31);
+insert into t (id,a) values (602,32);
+insert into t (id,a) values (602,33);
+insert into t (id,a) values (602,34);
+insert into t (id,a) values (602,35);
+insert into t (id,a) values (602,36);
+insert into t (id,a) values (602,37);
+insert into t (id,a) values (602,38);
+insert into t (id,a) values (602,39);
+insert into t (id,a) values (602,40);
+insert into t (id,a) values (602,41);
+insert into t (id,a) values (602,42);
+insert into t (id,a) values (602,43);
+insert into t (id,a) values (602,44);
+insert into t (id,a) values (602,45);
+insert into t (id,a) values (602,46);
+insert into t (id,a) values (602,47);
+insert into t (id,a) values (602,48);
+insert into t (id,a) values (602,49);
+insert into t (id,a) values (602,50);
+insert into t (id,a) values (602,51);
+insert into t (id,a) values (602,52);
+insert into t (id,a) values (602,53);
+insert into t (id,a) values (602,54);
+insert into t (id,a) values (602,55);
+insert into t (id,a) values (602,56);
+insert into t (id,a) values (602,57);
+insert into t (id,a) values (602,58);
+insert into t (id,a) values (602,59);
+insert into t (id,a) values (602,60);
+insert into t (id,a) values (602,61);
+insert into t (id,a) values (602,62);
+insert into t (id,a) values (602,63);
+insert into t (id,a) values (602,64);
+insert into t (id,a) values (602,65);
+insert into t (id,a) values (602,66);
+insert into t (id,a) values (602,67);
+insert into t (id,a) values (602,68);
+insert into t (id,a) values (602,69);
+insert into t (id,a) values (602,70);
+insert into t (id,a) values (602,71);
+insert into t (id,a) values (602,72);
+insert into t (id,a) values (602,73);
+insert into t (id,a) values (602,74);
+insert into t (id,a) values (602,75);
+insert into t (id,a) values (602,76);
+insert into t (id,a) values (602,77);
+insert into t (id,a) values (602,78);
+insert into t (id,a) values (602,79);
+insert into t (id,a) values (602,80);
+insert into t (id,a) values (602,81);
+insert into t (id,a) values (602,82);
+insert into t (id,a) values (602,83);
+insert into t (id,a) values (602,84);
+insert into t (id,a) values (602,85);
+insert into t (id,a) values (602,86);
+insert into t (id,a) values (602,87);
+insert into t (id,a) values (602,88);
+insert into t (id,a) values (602,89);
+insert into t (id,a) values (602,90);
+insert into t (id,a) values (602,91);
+insert into t (id,a) values (602,92);
+insert into t (id,a) values (602,93);
+insert into t (id,a) values (602,94);
+insert into t (id,a) values (602,95);
+insert into t (id,a) values (602,96);
+insert into t (id,a) values (602,97);
+insert into t (id,a) values (602,98);
+insert into t (id,a) values (602,99);
+insert into t (id,a) values (603,0);
+insert into t (id,a) values (603,1);
+insert into t (id,a) values (603,2);
+insert into t (id,a) values (603,3);
+insert into t (id,a) values (603,4);
+insert into t (id,a) values (603,5);
+insert into t (id,a) values (603,6);
+insert into t (id,a) values (603,7);
+insert into t (id,a) values (603,8);
+insert into t (id,a) values (603,9);
+insert into t (id,a) values (603,10);
+insert into t (id,a) values (603,11);
+insert into t (id,a) values (603,12);
+insert into t (id,a) values (603,13);
+insert into t (id,a) values (603,14);
+insert into t (id,a) values (603,15);
+insert into t (id,a) values (603,16);
+insert into t (id,a) values (603,17);
+insert into t (id,a) values (603,18);
+insert into t (id,a) values (603,19);
+insert into t (id,a) values (603,20);
+insert into t (id,a) values (603,21);
+insert into t (id,a) values (603,22);
+insert into t (id,a) values (603,23);
+insert into t (id,a) values (603,24);
+insert into t (id,a) values (603,25);
+insert into t (id,a) values (603,26);
+insert into t (id,a) values (603,27);
+insert into t (id,a) values (603,28);
+insert into t (id,a) values (603,29);
+insert into t (id,a) values (603,30);
+insert into t (id,a) values (603,31);
+insert into t (id,a) values (603,32);
+insert into t (id,a) values (603,33);
+insert into t (id,a) values (603,34);
+insert into t (id,a) values (603,35);
+insert into t (id,a) values (603,36);
+insert into t (id,a) values (603,37);
+insert into t (id,a) values (603,38);
+insert into t (id,a) values (603,39);
+insert into t (id,a) values (603,40);
+insert into t (id,a) values (603,41);
+insert into t (id,a) values (603,42);
+insert into t (id,a) values (603,43);
+insert into t (id,a) values (603,44);
+insert into t (id,a) values (603,45);
+insert into t (id,a) values (603,46);
+insert into t (id,a) values (603,47);
+insert into t (id,a) values (603,48);
+insert into t (id,a) values (603,49);
+insert into t (id,a) values (603,50);
+insert into t (id,a) values (603,51);
+insert into t (id,a) values (603,52);
+insert into t (id,a) values (603,53);
+insert into t (id,a) values (603,54);
+insert into t (id,a) values (603,55);
+insert into t (id,a) values (603,56);
+insert into t (id,a) values (603,57);
+insert into t (id,a) values (603,58);
+insert into t (id,a) values (603,59);
+insert into t (id,a) values (603,60);
+insert into t (id,a) values (603,61);
+insert into t (id,a) values (603,62);
+insert into t (id,a) values (603,63);
+insert into t (id,a) values (603,64);
+insert into t (id,a) values (603,65);
+insert into t (id,a) values (603,66);
+insert into t (id,a) values (603,67);
+insert into t (id,a) values (603,68);
+insert into t (id,a) values (603,69);
+insert into t (id,a) values (603,70);
+insert into t (id,a) values (603,71);
+insert into t (id,a) values (603,72);
+insert into t (id,a) values (603,73);
+insert into t (id,a) values (603,74);
+insert into t (id,a) values (603,75);
+insert into t (id,a) values (603,76);
+insert into t (id,a) values (603,77);
+insert into t (id,a) values (603,78);
+insert into t (id,a) values (603,79);
+insert into t (id,a) values (603,80);
+insert into t (id,a) values (603,81);
+insert into t (id,a) values (603,82);
+insert into t (id,a) values (603,83);
+insert into t (id,a) values (603,84);
+insert into t (id,a) values (603,85);
+insert into t (id,a) values (603,86);
+insert into t (id,a) values (603,87);
+insert into t (id,a) values (603,88);
+insert into t (id,a) values (603,89);
+insert into t (id,a) values (603,90);
+insert into t (id,a) values (603,91);
+insert into t (id,a) values (603,92);
+insert into t (id,a) values (603,93);
+insert into t (id,a) values (603,94);
+insert into t (id,a) values (603,95);
+insert into t (id,a) values (603,96);
+insert into t (id,a) values (603,97);
+insert into t (id,a) values (603,98);
+insert into t (id,a) values (603,99);
+insert into t (id,a) values (604,0);
+insert into t (id,a) values (604,1);
+insert into t (id,a) values (604,2);
+insert into t (id,a) values (604,3);
+insert into t (id,a) values (604,4);
+insert into t (id,a) values (604,5);
+insert into t (id,a) values (604,6);
+insert into t (id,a) values (604,7);
+insert into t (id,a) values (604,8);
+insert into t (id,a) values (604,9);
+insert into t (id,a) values (604,10);
+insert into t (id,a) values (604,11);
+insert into t (id,a) values (604,12);
+insert into t (id,a) values (604,13);
+insert into t (id,a) values (604,14);
+insert into t (id,a) values (604,15);
+insert into t (id,a) values (604,16);
+insert into t (id,a) values (604,17);
+insert into t (id,a) values (604,18);
+insert into t (id,a) values (604,19);
+insert into t (id,a) values (604,20);
+insert into t (id,a) values (604,21);
+insert into t (id,a) values (604,22);
+insert into t (id,a) values (604,23);
+insert into t (id,a) values (604,24);
+insert into t (id,a) values (604,25);
+insert into t (id,a) values (604,26);
+insert into t (id,a) values (604,27);
+insert into t (id,a) values (604,28);
+insert into t (id,a) values (604,29);
+insert into t (id,a) values (604,30);
+insert into t (id,a) values (604,31);
+insert into t (id,a) values (604,32);
+insert into t (id,a) values (604,33);
+insert into t (id,a) values (604,34);
+insert into t (id,a) values (604,35);
+insert into t (id,a) values (604,36);
+insert into t (id,a) values (604,37);
+insert into t (id,a) values (604,38);
+insert into t (id,a) values (604,39);
+insert into t (id,a) values (604,40);
+insert into t (id,a) values (604,41);
+insert into t (id,a) values (604,42);
+insert into t (id,a) values (604,43);
+insert into t (id,a) values (604,44);
+insert into t (id,a) values (604,45);
+insert into t (id,a) values (604,46);
+insert into t (id,a) values (604,47);
+insert into t (id,a) values (604,48);
+insert into t (id,a) values (604,49);
+insert into t (id,a) values (604,50);
+insert into t (id,a) values (604,51);
+insert into t (id,a) values (604,52);
+insert into t (id,a) values (604,53);
+insert into t (id,a) values (604,54);
+insert into t (id,a) values (604,55);
+insert into t (id,a) values (604,56);
+insert into t (id,a) values (604,57);
+insert into t (id,a) values (604,58);
+insert into t (id,a) values (604,59);
+insert into t (id,a) values (604,60);
+insert into t (id,a) values (604,61);
+insert into t (id,a) values (604,62);
+insert into t (id,a) values (604,63);
+insert into t (id,a) values (604,64);
+insert into t (id,a) values (604,65);
+insert into t (id,a) values (604,66);
+insert into t (id,a) values (604,67);
+insert into t (id,a) values (604,68);
+insert into t (id,a) values (604,69);
+insert into t (id,a) values (604,70);
+insert into t (id,a) values (604,71);
+insert into t (id,a) values (604,72);
+insert into t (id,a) values (604,73);
+insert into t (id,a) values (604,74);
+insert into t (id,a) values (604,75);
+insert into t (id,a) values (604,76);
+insert into t (id,a) values (604,77);
+insert into t (id,a) values (604,78);
+insert into t (id,a) values (604,79);
+insert into t (id,a) values (604,80);
+insert into t (id,a) values (604,81);
+insert into t (id,a) values (604,82);
+insert into t (id,a) values (604,83);
+insert into t (id,a) values (604,84);
+insert into t (id,a) values (604,85);
+insert into t (id,a) values (604,86);
+insert into t (id,a) values (604,87);
+insert into t (id,a) values (604,88);
+insert into t (id,a) values (604,89);
+insert into t (id,a) values (604,90);
+insert into t (id,a) values (604,91);
+insert into t (id,a) values (604,92);
+insert into t (id,a) values (604,93);
+insert into t (id,a) values (604,94);
+insert into t (id,a) values (604,95);
+insert into t (id,a) values (604,96);
+insert into t (id,a) values (604,97);
+insert into t (id,a) values (604,98);
+insert into t (id,a) values (604,99);
+insert into t (id,a) values (605,0);
+insert into t (id,a) values (605,1);
+insert into t (id,a) values (605,2);
+insert into t (id,a) values (605,3);
+insert into t (id,a) values (605,4);
+insert into t (id,a) values (605,5);
+insert into t (id,a) values (605,6);
+insert into t (id,a) values (605,7);
+insert into t (id,a) values (605,8);
+insert into t (id,a) values (605,9);
+insert into t (id,a) values (605,10);
+insert into t (id,a) values (605,11);
+insert into t (id,a) values (605,12);
+insert into t (id,a) values (605,13);
+insert into t (id,a) values (605,14);
+insert into t (id,a) values (605,15);
+insert into t (id,a) values (605,16);
+insert into t (id,a) values (605,17);
+insert into t (id,a) values (605,18);
+insert into t (id,a) values (605,19);
+insert into t (id,a) values (605,20);
+insert into t (id,a) values (605,21);
+insert into t (id,a) values (605,22);
+insert into t (id,a) values (605,23);
+insert into t (id,a) values (605,24);
+insert into t (id,a) values (605,25);
+insert into t (id,a) values (605,26);
+insert into t (id,a) values (605,27);
+insert into t (id,a) values (605,28);
+insert into t (id,a) values (605,29);
+insert into t (id,a) values (605,30);
+insert into t (id,a) values (605,31);
+insert into t (id,a) values (605,32);
+insert into t (id,a) values (605,33);
+insert into t (id,a) values (605,34);
+insert into t (id,a) values (605,35);
+insert into t (id,a) values (605,36);
+insert into t (id,a) values (605,37);
+insert into t (id,a) values (605,38);
+insert into t (id,a) values (605,39);
+insert into t (id,a) values (605,40);
+insert into t (id,a) values (605,41);
+insert into t (id,a) values (605,42);
+insert into t (id,a) values (605,43);
+insert into t (id,a) values (605,44);
+insert into t (id,a) values (605,45);
+insert into t (id,a) values (605,46);
+insert into t (id,a) values (605,47);
+insert into t (id,a) values (605,48);
+insert into t (id,a) values (605,49);
+insert into t (id,a) values (605,50);
+insert into t (id,a) values (605,51);
+insert into t (id,a) values (605,52);
+insert into t (id,a) values (605,53);
+insert into t (id,a) values (605,54);
+insert into t (id,a) values (605,55);
+insert into t (id,a) values (605,56);
+insert into t (id,a) values (605,57);
+insert into t (id,a) values (605,58);
+insert into t (id,a) values (605,59);
+insert into t (id,a) values (605,60);
+insert into t (id,a) values (605,61);
+insert into t (id,a) values (605,62);
+insert into t (id,a) values (605,63);
+insert into t (id,a) values (605,64);
+insert into t (id,a) values (605,65);
+insert into t (id,a) values (605,66);
+insert into t (id,a) values (605,67);
+insert into t (id,a) values (605,68);
+insert into t (id,a) values (605,69);
+insert into t (id,a) values (605,70);
+insert into t (id,a) values (605,71);
+insert into t (id,a) values (605,72);
+insert into t (id,a) values (605,73);
+insert into t (id,a) values (605,74);
+insert into t (id,a) values (605,75);
+insert into t (id,a) values (605,76);
+insert into t (id,a) values (605,77);
+insert into t (id,a) values (605,78);
+insert into t (id,a) values (605,79);
+insert into t (id,a) values (605,80);
+insert into t (id,a) values (605,81);
+insert into t (id,a) values (605,82);
+insert into t (id,a) values (605,83);
+insert into t (id,a) values (605,84);
+insert into t (id,a) values (605,85);
+insert into t (id,a) values (605,86);
+insert into t (id,a) values (605,87);
+insert into t (id,a) values (605,88);
+insert into t (id,a) values (605,89);
+insert into t (id,a) values (605,90);
+insert into t (id,a) values (605,91);
+insert into t (id,a) values (605,92);
+insert into t (id,a) values (605,93);
+insert into t (id,a) values (605,94);
+insert into t (id,a) values (605,95);
+insert into t (id,a) values (605,96);
+insert into t (id,a) values (605,97);
+insert into t (id,a) values (605,98);
+insert into t (id,a) values (605,99);
+insert into t (id,a) values (606,0);
+insert into t (id,a) values (606,1);
+insert into t (id,a) values (606,2);
+insert into t (id,a) values (606,3);
+insert into t (id,a) values (606,4);
+insert into t (id,a) values (606,5);
+insert into t (id,a) values (606,6);
+insert into t (id,a) values (606,7);
+insert into t (id,a) values (606,8);
+insert into t (id,a) values (606,9);
+insert into t (id,a) values (606,10);
+insert into t (id,a) values (606,11);
+insert into t (id,a) values (606,12);
+insert into t (id,a) values (606,13);
+insert into t (id,a) values (606,14);
+insert into t (id,a) values (606,15);
+insert into t (id,a) values (606,16);
+insert into t (id,a) values (606,17);
+insert into t (id,a) values (606,18);
+insert into t (id,a) values (606,19);
+insert into t (id,a) values (606,20);
+insert into t (id,a) values (606,21);
+insert into t (id,a) values (606,22);
+insert into t (id,a) values (606,23);
+insert into t (id,a) values (606,24);
+insert into t (id,a) values (606,25);
+insert into t (id,a) values (606,26);
+insert into t (id,a) values (606,27);
+insert into t (id,a) values (606,28);
+insert into t (id,a) values (606,29);
+insert into t (id,a) values (606,30);
+insert into t (id,a) values (606,31);
+insert into t (id,a) values (606,32);
+insert into t (id,a) values (606,33);
+insert into t (id,a) values (606,34);
+insert into t (id,a) values (606,35);
+insert into t (id,a) values (606,36);
+insert into t (id,a) values (606,37);
+insert into t (id,a) values (606,38);
+insert into t (id,a) values (606,39);
+insert into t (id,a) values (606,40);
+insert into t (id,a) values (606,41);
+insert into t (id,a) values (606,42);
+insert into t (id,a) values (606,43);
+insert into t (id,a) values (606,44);
+insert into t (id,a) values (606,45);
+insert into t (id,a) values (606,46);
+insert into t (id,a) values (606,47);
+insert into t (id,a) values (606,48);
+insert into t (id,a) values (606,49);
+insert into t (id,a) values (606,50);
+insert into t (id,a) values (606,51);
+insert into t (id,a) values (606,52);
+insert into t (id,a) values (606,53);
+insert into t (id,a) values (606,54);
+insert into t (id,a) values (606,55);
+insert into t (id,a) values (606,56);
+insert into t (id,a) values (606,57);
+insert into t (id,a) values (606,58);
+insert into t (id,a) values (606,59);
+insert into t (id,a) values (606,60);
+insert into t (id,a) values (606,61);
+insert into t (id,a) values (606,62);
+insert into t (id,a) values (606,63);
+insert into t (id,a) values (606,64);
+insert into t (id,a) values (606,65);
+insert into t (id,a) values (606,66);
+insert into t (id,a) values (606,67);
+insert into t (id,a) values (606,68);
+insert into t (id,a) values (606,69);
+insert into t (id,a) values (606,70);
+insert into t (id,a) values (606,71);
+insert into t (id,a) values (606,72);
+insert into t (id,a) values (606,73);
+insert into t (id,a) values (606,74);
+insert into t (id,a) values (606,75);
+insert into t (id,a) values (606,76);
+insert into t (id,a) values (606,77);
+insert into t (id,a) values (606,78);
+insert into t (id,a) values (606,79);
+insert into t (id,a) values (606,80);
+insert into t (id,a) values (606,81);
+insert into t (id,a) values (606,82);
+insert into t (id,a) values (606,83);
+insert into t (id,a) values (606,84);
+insert into t (id,a) values (606,85);
+insert into t (id,a) values (606,86);
+insert into t (id,a) values (606,87);
+insert into t (id,a) values (606,88);
+insert into t (id,a) values (606,89);
+insert into t (id,a) values (606,90);
+insert into t (id,a) values (606,91);
+insert into t (id,a) values (606,92);
+insert into t (id,a) values (606,93);
+insert into t (id,a) values (606,94);
+insert into t (id,a) values (606,95);
+insert into t (id,a) values (606,96);
+insert into t (id,a) values (606,97);
+insert into t (id,a) values (606,98);
+insert into t (id,a) values (606,99);
+insert into t (id,a) values (607,0);
+insert into t (id,a) values (607,1);
+insert into t (id,a) values (607,2);
+insert into t (id,a) values (607,3);
+insert into t (id,a) values (607,4);
+insert into t (id,a) values (607,5);
+insert into t (id,a) values (607,6);
+insert into t (id,a) values (607,7);
+insert into t (id,a) values (607,8);
+insert into t (id,a) values (607,9);
+insert into t (id,a) values (607,10);
+insert into t (id,a) values (607,11);
+insert into t (id,a) values (607,12);
+insert into t (id,a) values (607,13);
+insert into t (id,a) values (607,14);
+insert into t (id,a) values (607,15);
+insert into t (id,a) values (607,16);
+insert into t (id,a) values (607,17);
+insert into t (id,a) values (607,18);
+insert into t (id,a) values (607,19);
+insert into t (id,a) values (607,20);
+insert into t (id,a) values (607,21);
+insert into t (id,a) values (607,22);
+insert into t (id,a) values (607,23);
+insert into t (id,a) values (607,24);
+insert into t (id,a) values (607,25);
+insert into t (id,a) values (607,26);
+insert into t (id,a) values (607,27);
+insert into t (id,a) values (607,28);
+insert into t (id,a) values (607,29);
+insert into t (id,a) values (607,30);
+insert into t (id,a) values (607,31);
+insert into t (id,a) values (607,32);
+insert into t (id,a) values (607,33);
+insert into t (id,a) values (607,34);
+insert into t (id,a) values (607,35);
+insert into t (id,a) values (607,36);
+insert into t (id,a) values (607,37);
+insert into t (id,a) values (607,38);
+insert into t (id,a) values (607,39);
+insert into t (id,a) values (607,40);
+insert into t (id,a) values (607,41);
+insert into t (id,a) values (607,42);
+insert into t (id,a) values (607,43);
+insert into t (id,a) values (607,44);
+insert into t (id,a) values (607,45);
+insert into t (id,a) values (607,46);
+insert into t (id,a) values (607,47);
+insert into t (id,a) values (607,48);
+insert into t (id,a) values (607,49);
+insert into t (id,a) values (607,50);
+insert into t (id,a) values (607,51);
+insert into t (id,a) values (607,52);
+insert into t (id,a) values (607,53);
+insert into t (id,a) values (607,54);
+insert into t (id,a) values (607,55);
+insert into t (id,a) values (607,56);
+insert into t (id,a) values (607,57);
+insert into t (id,a) values (607,58);
+insert into t (id,a) values (607,59);
+insert into t (id,a) values (607,60);
+insert into t (id,a) values (607,61);
+insert into t (id,a) values (607,62);
+insert into t (id,a) values (607,63);
+insert into t (id,a) values (607,64);
+insert into t (id,a) values (607,65);
+insert into t (id,a) values (607,66);
+insert into t (id,a) values (607,67);
+insert into t (id,a) values (607,68);
+insert into t (id,a) values (607,69);
+insert into t (id,a) values (607,70);
+insert into t (id,a) values (607,71);
+insert into t (id,a) values (607,72);
+insert into t (id,a) values (607,73);
+insert into t (id,a) values (607,74);
+insert into t (id,a) values (607,75);
+insert into t (id,a) values (607,76);
+insert into t (id,a) values (607,77);
+insert into t (id,a) values (607,78);
+insert into t (id,a) values (607,79);
+insert into t (id,a) values (607,80);
+insert into t (id,a) values (607,81);
+insert into t (id,a) values (607,82);
+insert into t (id,a) values (607,83);
+insert into t (id,a) values (607,84);
+insert into t (id,a) values (607,85);
+insert into t (id,a) values (607,86);
+insert into t (id,a) values (607,87);
+insert into t (id,a) values (607,88);
+insert into t (id,a) values (607,89);
+insert into t (id,a) values (607,90);
+insert into t (id,a) values (607,91);
+insert into t (id,a) values (607,92);
+insert into t (id,a) values (607,93);
+insert into t (id,a) values (607,94);
+insert into t (id,a) values (607,95);
+insert into t (id,a) values (607,96);
+insert into t (id,a) values (607,97);
+insert into t (id,a) values (607,98);
+insert into t (id,a) values (607,99);
+insert into t (id,a) values (608,0);
+insert into t (id,a) values (608,1);
+insert into t (id,a) values (608,2);
+insert into t (id,a) values (608,3);
+insert into t (id,a) values (608,4);
+insert into t (id,a) values (608,5);
+insert into t (id,a) values (608,6);
+insert into t (id,a) values (608,7);
+insert into t (id,a) values (608,8);
+insert into t (id,a) values (608,9);
+insert into t (id,a) values (608,10);
+insert into t (id,a) values (608,11);
+insert into t (id,a) values (608,12);
+insert into t (id,a) values (608,13);
+insert into t (id,a) values (608,14);
+insert into t (id,a) values (608,15);
+insert into t (id,a) values (608,16);
+insert into t (id,a) values (608,17);
+insert into t (id,a) values (608,18);
+insert into t (id,a) values (608,19);
+insert into t (id,a) values (608,20);
+insert into t (id,a) values (608,21);
+insert into t (id,a) values (608,22);
+insert into t (id,a) values (608,23);
+insert into t (id,a) values (608,24);
+insert into t (id,a) values (608,25);
+insert into t (id,a) values (608,26);
+insert into t (id,a) values (608,27);
+insert into t (id,a) values (608,28);
+insert into t (id,a) values (608,29);
+insert into t (id,a) values (608,30);
+insert into t (id,a) values (608,31);
+insert into t (id,a) values (608,32);
+insert into t (id,a) values (608,33);
+insert into t (id,a) values (608,34);
+insert into t (id,a) values (608,35);
+insert into t (id,a) values (608,36);
+insert into t (id,a) values (608,37);
+insert into t (id,a) values (608,38);
+insert into t (id,a) values (608,39);
+insert into t (id,a) values (608,40);
+insert into t (id,a) values (608,41);
+insert into t (id,a) values (608,42);
+insert into t (id,a) values (608,43);
+insert into t (id,a) values (608,44);
+insert into t (id,a) values (608,45);
+insert into t (id,a) values (608,46);
+insert into t (id,a) values (608,47);
+insert into t (id,a) values (608,48);
+insert into t (id,a) values (608,49);
+insert into t (id,a) values (608,50);
+insert into t (id,a) values (608,51);
+insert into t (id,a) values (608,52);
+insert into t (id,a) values (608,53);
+insert into t (id,a) values (608,54);
+insert into t (id,a) values (608,55);
+insert into t (id,a) values (608,56);
+insert into t (id,a) values (608,57);
+insert into t (id,a) values (608,58);
+insert into t (id,a) values (608,59);
+insert into t (id,a) values (608,60);
+insert into t (id,a) values (608,61);
+insert into t (id,a) values (608,62);
+insert into t (id,a) values (608,63);
+insert into t (id,a) values (608,64);
+insert into t (id,a) values (608,65);
+insert into t (id,a) values (608,66);
+insert into t (id,a) values (608,67);
+insert into t (id,a) values (608,68);
+insert into t (id,a) values (608,69);
+insert into t (id,a) values (608,70);
+insert into t (id,a) values (608,71);
+insert into t (id,a) values (608,72);
+insert into t (id,a) values (608,73);
+insert into t (id,a) values (608,74);
+insert into t (id,a) values (608,75);
+insert into t (id,a) values (608,76);
+insert into t (id,a) values (608,77);
+insert into t (id,a) values (608,78);
+insert into t (id,a) values (608,79);
+insert into t (id,a) values (608,80);
+insert into t (id,a) values (608,81);
+insert into t (id,a) values (608,82);
+insert into t (id,a) values (608,83);
+insert into t (id,a) values (608,84);
+insert into t (id,a) values (608,85);
+insert into t (id,a) values (608,86);
+insert into t (id,a) values (608,87);
+insert into t (id,a) values (608,88);
+insert into t (id,a) values (608,89);
+insert into t (id,a) values (608,90);
+insert into t (id,a) values (608,91);
+insert into t (id,a) values (608,92);
+insert into t (id,a) values (608,93);
+insert into t (id,a) values (608,94);
+insert into t (id,a) values (608,95);
+insert into t (id,a) values (608,96);
+insert into t (id,a) values (608,97);
+insert into t (id,a) values (608,98);
+insert into t (id,a) values (608,99);
+insert into t (id,a) values (609,0);
+insert into t (id,a) values (609,1);
+insert into t (id,a) values (609,2);
+insert into t (id,a) values (609,3);
+insert into t (id,a) values (609,4);
+insert into t (id,a) values (609,5);
+insert into t (id,a) values (609,6);
+insert into t (id,a) values (609,7);
+insert into t (id,a) values (609,8);
+insert into t (id,a) values (609,9);
+insert into t (id,a) values (609,10);
+insert into t (id,a) values (609,11);
+insert into t (id,a) values (609,12);
+insert into t (id,a) values (609,13);
+insert into t (id,a) values (609,14);
+insert into t (id,a) values (609,15);
+insert into t (id,a) values (609,16);
+insert into t (id,a) values (609,17);
+insert into t (id,a) values (609,18);
+insert into t (id,a) values (609,19);
+insert into t (id,a) values (609,20);
+insert into t (id,a) values (609,21);
+insert into t (id,a) values (609,22);
+insert into t (id,a) values (609,23);
+insert into t (id,a) values (609,24);
+insert into t (id,a) values (609,25);
+insert into t (id,a) values (609,26);
+insert into t (id,a) values (609,27);
+insert into t (id,a) values (609,28);
+insert into t (id,a) values (609,29);
+insert into t (id,a) values (609,30);
+insert into t (id,a) values (609,31);
+insert into t (id,a) values (609,32);
+insert into t (id,a) values (609,33);
+insert into t (id,a) values (609,34);
+insert into t (id,a) values (609,35);
+insert into t (id,a) values (609,36);
+insert into t (id,a) values (609,37);
+insert into t (id,a) values (609,38);
+insert into t (id,a) values (609,39);
+insert into t (id,a) values (609,40);
+insert into t (id,a) values (609,41);
+insert into t (id,a) values (609,42);
+insert into t (id,a) values (609,43);
+insert into t (id,a) values (609,44);
+insert into t (id,a) values (609,45);
+insert into t (id,a) values (609,46);
+insert into t (id,a) values (609,47);
+insert into t (id,a) values (609,48);
+insert into t (id,a) values (609,49);
+insert into t (id,a) values (609,50);
+insert into t (id,a) values (609,51);
+insert into t (id,a) values (609,52);
+insert into t (id,a) values (609,53);
+insert into t (id,a) values (609,54);
+insert into t (id,a) values (609,55);
+insert into t (id,a) values (609,56);
+insert into t (id,a) values (609,57);
+insert into t (id,a) values (609,58);
+insert into t (id,a) values (609,59);
+insert into t (id,a) values (609,60);
+insert into t (id,a) values (609,61);
+insert into t (id,a) values (609,62);
+insert into t (id,a) values (609,63);
+insert into t (id,a) values (609,64);
+insert into t (id,a) values (609,65);
+insert into t (id,a) values (609,66);
+insert into t (id,a) values (609,67);
+insert into t (id,a) values (609,68);
+insert into t (id,a) values (609,69);
+insert into t (id,a) values (609,70);
+insert into t (id,a) values (609,71);
+insert into t (id,a) values (609,72);
+insert into t (id,a) values (609,73);
+insert into t (id,a) values (609,74);
+insert into t (id,a) values (609,75);
+insert into t (id,a) values (609,76);
+insert into t (id,a) values (609,77);
+insert into t (id,a) values (609,78);
+insert into t (id,a) values (609,79);
+insert into t (id,a) values (609,80);
+insert into t (id,a) values (609,81);
+insert into t (id,a) values (609,82);
+insert into t (id,a) values (609,83);
+insert into t (id,a) values (609,84);
+insert into t (id,a) values (609,85);
+insert into t (id,a) values (609,86);
+insert into t (id,a) values (609,87);
+insert into t (id,a) values (609,88);
+insert into t (id,a) values (609,89);
+insert into t (id,a) values (609,90);
+insert into t (id,a) values (609,91);
+insert into t (id,a) values (609,92);
+insert into t (id,a) values (609,93);
+insert into t (id,a) values (609,94);
+insert into t (id,a) values (609,95);
+insert into t (id,a) values (609,96);
+insert into t (id,a) values (609,97);
+insert into t (id,a) values (609,98);
+insert into t (id,a) values (609,99);
+insert into t (id,a) values (610,0);
+insert into t (id,a) values (610,1);
+insert into t (id,a) values (610,2);
+insert into t (id,a) values (610,3);
+insert into t (id,a) values (610,4);
+insert into t (id,a) values (610,5);
+insert into t (id,a) values (610,6);
+insert into t (id,a) values (610,7);
+insert into t (id,a) values (610,8);
+insert into t (id,a) values (610,9);
+insert into t (id,a) values (610,10);
+insert into t (id,a) values (610,11);
+insert into t (id,a) values (610,12);
+insert into t (id,a) values (610,13);
+insert into t (id,a) values (610,14);
+insert into t (id,a) values (610,15);
+insert into t (id,a) values (610,16);
+insert into t (id,a) values (610,17);
+insert into t (id,a) values (610,18);
+insert into t (id,a) values (610,19);
+insert into t (id,a) values (610,20);
+insert into t (id,a) values (610,21);
+insert into t (id,a) values (610,22);
+insert into t (id,a) values (610,23);
+insert into t (id,a) values (610,24);
+insert into t (id,a) values (610,25);
+insert into t (id,a) values (610,26);
+insert into t (id,a) values (610,27);
+insert into t (id,a) values (610,28);
+insert into t (id,a) values (610,29);
+insert into t (id,a) values (610,30);
+insert into t (id,a) values (610,31);
+insert into t (id,a) values (610,32);
+insert into t (id,a) values (610,33);
+insert into t (id,a) values (610,34);
+insert into t (id,a) values (610,35);
+insert into t (id,a) values (610,36);
+insert into t (id,a) values (610,37);
+insert into t (id,a) values (610,38);
+insert into t (id,a) values (610,39);
+insert into t (id,a) values (610,40);
+insert into t (id,a) values (610,41);
+insert into t (id,a) values (610,42);
+insert into t (id,a) values (610,43);
+insert into t (id,a) values (610,44);
+insert into t (id,a) values (610,45);
+insert into t (id,a) values (610,46);
+insert into t (id,a) values (610,47);
+insert into t (id,a) values (610,48);
+insert into t (id,a) values (610,49);
+insert into t (id,a) values (610,50);
+insert into t (id,a) values (610,51);
+insert into t (id,a) values (610,52);
+insert into t (id,a) values (610,53);
+insert into t (id,a) values (610,54);
+insert into t (id,a) values (610,55);
+insert into t (id,a) values (610,56);
+insert into t (id,a) values (610,57);
+insert into t (id,a) values (610,58);
+insert into t (id,a) values (610,59);
+insert into t (id,a) values (610,60);
+insert into t (id,a) values (610,61);
+insert into t (id,a) values (610,62);
+insert into t (id,a) values (610,63);
+insert into t (id,a) values (610,64);
+insert into t (id,a) values (610,65);
+insert into t (id,a) values (610,66);
+insert into t (id,a) values (610,67);
+insert into t (id,a) values (610,68);
+insert into t (id,a) values (610,69);
+insert into t (id,a) values (610,70);
+insert into t (id,a) values (610,71);
+insert into t (id,a) values (610,72);
+insert into t (id,a) values (610,73);
+insert into t (id,a) values (610,74);
+insert into t (id,a) values (610,75);
+insert into t (id,a) values (610,76);
+insert into t (id,a) values (610,77);
+insert into t (id,a) values (610,78);
+insert into t (id,a) values (610,79);
+insert into t (id,a) values (610,80);
+insert into t (id,a) values (610,81);
+insert into t (id,a) values (610,82);
+insert into t (id,a) values (610,83);
+insert into t (id,a) values (610,84);
+insert into t (id,a) values (610,85);
+insert into t (id,a) values (610,86);
+insert into t (id,a) values (610,87);
+insert into t (id,a) values (610,88);
+insert into t (id,a) values (610,89);
+insert into t (id,a) values (610,90);
+insert into t (id,a) values (610,91);
+insert into t (id,a) values (610,92);
+insert into t (id,a) values (610,93);
+insert into t (id,a) values (610,94);
+insert into t (id,a) values (610,95);
+insert into t (id,a) values (610,96);
+insert into t (id,a) values (610,97);
+insert into t (id,a) values (610,98);
+insert into t (id,a) values (610,99);
+insert into t (id,a) values (611,0);
+insert into t (id,a) values (611,1);
+insert into t (id,a) values (611,2);
+insert into t (id,a) values (611,3);
+insert into t (id,a) values (611,4);
+insert into t (id,a) values (611,5);
+insert into t (id,a) values (611,6);
+insert into t (id,a) values (611,7);
+insert into t (id,a) values (611,8);
+insert into t (id,a) values (611,9);
+insert into t (id,a) values (611,10);
+insert into t (id,a) values (611,11);
+insert into t (id,a) values (611,12);
+insert into t (id,a) values (611,13);
+insert into t (id,a) values (611,14);
+insert into t (id,a) values (611,15);
+insert into t (id,a) values (611,16);
+insert into t (id,a) values (611,17);
+insert into t (id,a) values (611,18);
+insert into t (id,a) values (611,19);
+insert into t (id,a) values (611,20);
+insert into t (id,a) values (611,21);
+insert into t (id,a) values (611,22);
+insert into t (id,a) values (611,23);
+insert into t (id,a) values (611,24);
+insert into t (id,a) values (611,25);
+insert into t (id,a) values (611,26);
+insert into t (id,a) values (611,27);
+insert into t (id,a) values (611,28);
+insert into t (id,a) values (611,29);
+insert into t (id,a) values (611,30);
+insert into t (id,a) values (611,31);
+insert into t (id,a) values (611,32);
+insert into t (id,a) values (611,33);
+insert into t (id,a) values (611,34);
+insert into t (id,a) values (611,35);
+insert into t (id,a) values (611,36);
+insert into t (id,a) values (611,37);
+insert into t (id,a) values (611,38);
+insert into t (id,a) values (611,39);
+insert into t (id,a) values (611,40);
+insert into t (id,a) values (611,41);
+insert into t (id,a) values (611,42);
+insert into t (id,a) values (611,43);
+insert into t (id,a) values (611,44);
+insert into t (id,a) values (611,45);
+insert into t (id,a) values (611,46);
+insert into t (id,a) values (611,47);
+insert into t (id,a) values (611,48);
+insert into t (id,a) values (611,49);
+insert into t (id,a) values (611,50);
+insert into t (id,a) values (611,51);
+insert into t (id,a) values (611,52);
+insert into t (id,a) values (611,53);
+insert into t (id,a) values (611,54);
+insert into t (id,a) values (611,55);
+insert into t (id,a) values (611,56);
+insert into t (id,a) values (611,57);
+insert into t (id,a) values (611,58);
+insert into t (id,a) values (611,59);
+insert into t (id,a) values (611,60);
+insert into t (id,a) values (611,61);
+insert into t (id,a) values (611,62);
+insert into t (id,a) values (611,63);
+insert into t (id,a) values (611,64);
+insert into t (id,a) values (611,65);
+insert into t (id,a) values (611,66);
+insert into t (id,a) values (611,67);
+insert into t (id,a) values (611,68);
+insert into t (id,a) values (611,69);
+insert into t (id,a) values (611,70);
+insert into t (id,a) values (611,71);
+insert into t (id,a) values (611,72);
+insert into t (id,a) values (611,73);
+insert into t (id,a) values (611,74);
+insert into t (id,a) values (611,75);
+insert into t (id,a) values (611,76);
+insert into t (id,a) values (611,77);
+insert into t (id,a) values (611,78);
+insert into t (id,a) values (611,79);
+insert into t (id,a) values (611,80);
+insert into t (id,a) values (611,81);
+insert into t (id,a) values (611,82);
+insert into t (id,a) values (611,83);
+insert into t (id,a) values (611,84);
+insert into t (id,a) values (611,85);
+insert into t (id,a) values (611,86);
+insert into t (id,a) values (611,87);
+insert into t (id,a) values (611,88);
+insert into t (id,a) values (611,89);
+insert into t (id,a) values (611,90);
+insert into t (id,a) values (611,91);
+insert into t (id,a) values (611,92);
+insert into t (id,a) values (611,93);
+insert into t (id,a) values (611,94);
+insert into t (id,a) values (611,95);
+insert into t (id,a) values (611,96);
+insert into t (id,a) values (611,97);
+insert into t (id,a) values (611,98);
+insert into t (id,a) values (611,99);
+insert into t (id,a) values (612,0);
+insert into t (id,a) values (612,1);
+insert into t (id,a) values (612,2);
+insert into t (id,a) values (612,3);
+insert into t (id,a) values (612,4);
+insert into t (id,a) values (612,5);
+insert into t (id,a) values (612,6);
+insert into t (id,a) values (612,7);
+insert into t (id,a) values (612,8);
+insert into t (id,a) values (612,9);
+insert into t (id,a) values (612,10);
+insert into t (id,a) values (612,11);
+insert into t (id,a) values (612,12);
+insert into t (id,a) values (612,13);
+insert into t (id,a) values (612,14);
+insert into t (id,a) values (612,15);
+insert into t (id,a) values (612,16);
+insert into t (id,a) values (612,17);
+insert into t (id,a) values (612,18);
+insert into t (id,a) values (612,19);
+insert into t (id,a) values (612,20);
+insert into t (id,a) values (612,21);
+insert into t (id,a) values (612,22);
+insert into t (id,a) values (612,23);
+insert into t (id,a) values (612,24);
+insert into t (id,a) values (612,25);
+insert into t (id,a) values (612,26);
+insert into t (id,a) values (612,27);
+insert into t (id,a) values (612,28);
+insert into t (id,a) values (612,29);
+insert into t (id,a) values (612,30);
+insert into t (id,a) values (612,31);
+insert into t (id,a) values (612,32);
+insert into t (id,a) values (612,33);
+insert into t (id,a) values (612,34);
+insert into t (id,a) values (612,35);
+insert into t (id,a) values (612,36);
+insert into t (id,a) values (612,37);
+insert into t (id,a) values (612,38);
+insert into t (id,a) values (612,39);
+insert into t (id,a) values (612,40);
+insert into t (id,a) values (612,41);
+insert into t (id,a) values (612,42);
+insert into t (id,a) values (612,43);
+insert into t (id,a) values (612,44);
+insert into t (id,a) values (612,45);
+insert into t (id,a) values (612,46);
+insert into t (id,a) values (612,47);
+insert into t (id,a) values (612,48);
+insert into t (id,a) values (612,49);
+insert into t (id,a) values (612,50);
+insert into t (id,a) values (612,51);
+insert into t (id,a) values (612,52);
+insert into t (id,a) values (612,53);
+insert into t (id,a) values (612,54);
+insert into t (id,a) values (612,55);
+insert into t (id,a) values (612,56);
+insert into t (id,a) values (612,57);
+insert into t (id,a) values (612,58);
+insert into t (id,a) values (612,59);
+insert into t (id,a) values (612,60);
+insert into t (id,a) values (612,61);
+insert into t (id,a) values (612,62);
+insert into t (id,a) values (612,63);
+insert into t (id,a) values (612,64);
+insert into t (id,a) values (612,65);
+insert into t (id,a) values (612,66);
+insert into t (id,a) values (612,67);
+insert into t (id,a) values (612,68);
+insert into t (id,a) values (612,69);
+insert into t (id,a) values (612,70);
+insert into t (id,a) values (612,71);
+insert into t (id,a) values (612,72);
+insert into t (id,a) values (612,73);
+insert into t (id,a) values (612,74);
+insert into t (id,a) values (612,75);
+insert into t (id,a) values (612,76);
+insert into t (id,a) values (612,77);
+insert into t (id,a) values (612,78);
+insert into t (id,a) values (612,79);
+insert into t (id,a) values (612,80);
+insert into t (id,a) values (612,81);
+insert into t (id,a) values (612,82);
+insert into t (id,a) values (612,83);
+insert into t (id,a) values (612,84);
+insert into t (id,a) values (612,85);
+insert into t (id,a) values (612,86);
+insert into t (id,a) values (612,87);
+insert into t (id,a) values (612,88);
+insert into t (id,a) values (612,89);
+insert into t (id,a) values (612,90);
+insert into t (id,a) values (612,91);
+insert into t (id,a) values (612,92);
+insert into t (id,a) values (612,93);
+insert into t (id,a) values (612,94);
+insert into t (id,a) values (612,95);
+insert into t (id,a) values (612,96);
+insert into t (id,a) values (612,97);
+insert into t (id,a) values (612,98);
+insert into t (id,a) values (612,99);
+insert into t (id,a) values (613,0);
+insert into t (id,a) values (613,1);
+insert into t (id,a) values (613,2);
+insert into t (id,a) values (613,3);
+insert into t (id,a) values (613,4);
+insert into t (id,a) values (613,5);
+insert into t (id,a) values (613,6);
+insert into t (id,a) values (613,7);
+insert into t (id,a) values (613,8);
+insert into t (id,a) values (613,9);
+insert into t (id,a) values (613,10);
+insert into t (id,a) values (613,11);
+insert into t (id,a) values (613,12);
+insert into t (id,a) values (613,13);
+insert into t (id,a) values (613,14);
+insert into t (id,a) values (613,15);
+insert into t (id,a) values (613,16);
+insert into t (id,a) values (613,17);
+insert into t (id,a) values (613,18);
+insert into t (id,a) values (613,19);
+insert into t (id,a) values (613,20);
+insert into t (id,a) values (613,21);
+insert into t (id,a) values (613,22);
+insert into t (id,a) values (613,23);
+insert into t (id,a) values (613,24);
+insert into t (id,a) values (613,25);
+insert into t (id,a) values (613,26);
+insert into t (id,a) values (613,27);
+insert into t (id,a) values (613,28);
+insert into t (id,a) values (613,29);
+insert into t (id,a) values (613,30);
+insert into t (id,a) values (613,31);
+insert into t (id,a) values (613,32);
+insert into t (id,a) values (613,33);
+insert into t (id,a) values (613,34);
+insert into t (id,a) values (613,35);
+insert into t (id,a) values (613,36);
+insert into t (id,a) values (613,37);
+insert into t (id,a) values (613,38);
+insert into t (id,a) values (613,39);
+insert into t (id,a) values (613,40);
+insert into t (id,a) values (613,41);
+insert into t (id,a) values (613,42);
+insert into t (id,a) values (613,43);
+insert into t (id,a) values (613,44);
+insert into t (id,a) values (613,45);
+insert into t (id,a) values (613,46);
+insert into t (id,a) values (613,47);
+insert into t (id,a) values (613,48);
+insert into t (id,a) values (613,49);
+insert into t (id,a) values (613,50);
+insert into t (id,a) values (613,51);
+insert into t (id,a) values (613,52);
+insert into t (id,a) values (613,53);
+insert into t (id,a) values (613,54);
+insert into t (id,a) values (613,55);
+insert into t (id,a) values (613,56);
+insert into t (id,a) values (613,57);
+insert into t (id,a) values (613,58);
+insert into t (id,a) values (613,59);
+insert into t (id,a) values (613,60);
+insert into t (id,a) values (613,61);
+insert into t (id,a) values (613,62);
+insert into t (id,a) values (613,63);
+insert into t (id,a) values (613,64);
+insert into t (id,a) values (613,65);
+insert into t (id,a) values (613,66);
+insert into t (id,a) values (613,67);
+insert into t (id,a) values (613,68);
+insert into t (id,a) values (613,69);
+insert into t (id,a) values (613,70);
+insert into t (id,a) values (613,71);
+insert into t (id,a) values (613,72);
+insert into t (id,a) values (613,73);
+insert into t (id,a) values (613,74);
+insert into t (id,a) values (613,75);
+insert into t (id,a) values (613,76);
+insert into t (id,a) values (613,77);
+insert into t (id,a) values (613,78);
+insert into t (id,a) values (613,79);
+insert into t (id,a) values (613,80);
+insert into t (id,a) values (613,81);
+insert into t (id,a) values (613,82);
+insert into t (id,a) values (613,83);
+insert into t (id,a) values (613,84);
+insert into t (id,a) values (613,85);
+insert into t (id,a) values (613,86);
+insert into t (id,a) values (613,87);
+insert into t (id,a) values (613,88);
+insert into t (id,a) values (613,89);
+insert into t (id,a) values (613,90);
+insert into t (id,a) values (613,91);
+insert into t (id,a) values (613,92);
+insert into t (id,a) values (613,93);
+insert into t (id,a) values (613,94);
+insert into t (id,a) values (613,95);
+insert into t (id,a) values (613,96);
+insert into t (id,a) values (613,97);
+insert into t (id,a) values (613,98);
+insert into t (id,a) values (613,99);
+insert into t (id,a) values (614,0);
+insert into t (id,a) values (614,1);
+insert into t (id,a) values (614,2);
+insert into t (id,a) values (614,3);
+insert into t (id,a) values (614,4);
+insert into t (id,a) values (614,5);
+insert into t (id,a) values (614,6);
+insert into t (id,a) values (614,7);
+insert into t (id,a) values (614,8);
+insert into t (id,a) values (614,9);
+insert into t (id,a) values (614,10);
+insert into t (id,a) values (614,11);
+insert into t (id,a) values (614,12);
+insert into t (id,a) values (614,13);
+insert into t (id,a) values (614,14);
+insert into t (id,a) values (614,15);
+insert into t (id,a) values (614,16);
+insert into t (id,a) values (614,17);
+insert into t (id,a) values (614,18);
+insert into t (id,a) values (614,19);
+insert into t (id,a) values (614,20);
+insert into t (id,a) values (614,21);
+insert into t (id,a) values (614,22);
+insert into t (id,a) values (614,23);
+insert into t (id,a) values (614,24);
+insert into t (id,a) values (614,25);
+insert into t (id,a) values (614,26);
+insert into t (id,a) values (614,27);
+insert into t (id,a) values (614,28);
+insert into t (id,a) values (614,29);
+insert into t (id,a) values (614,30);
+insert into t (id,a) values (614,31);
+insert into t (id,a) values (614,32);
+insert into t (id,a) values (614,33);
+insert into t (id,a) values (614,34);
+insert into t (id,a) values (614,35);
+insert into t (id,a) values (614,36);
+insert into t (id,a) values (614,37);
+insert into t (id,a) values (614,38);
+insert into t (id,a) values (614,39);
+insert into t (id,a) values (614,40);
+insert into t (id,a) values (614,41);
+insert into t (id,a) values (614,42);
+insert into t (id,a) values (614,43);
+insert into t (id,a) values (614,44);
+insert into t (id,a) values (614,45);
+insert into t (id,a) values (614,46);
+insert into t (id,a) values (614,47);
+insert into t (id,a) values (614,48);
+insert into t (id,a) values (614,49);
+insert into t (id,a) values (614,50);
+insert into t (id,a) values (614,51);
+insert into t (id,a) values (614,52);
+insert into t (id,a) values (614,53);
+insert into t (id,a) values (614,54);
+insert into t (id,a) values (614,55);
+insert into t (id,a) values (614,56);
+insert into t (id,a) values (614,57);
+insert into t (id,a) values (614,58);
+insert into t (id,a) values (614,59);
+insert into t (id,a) values (614,60);
+insert into t (id,a) values (614,61);
+insert into t (id,a) values (614,62);
+insert into t (id,a) values (614,63);
+insert into t (id,a) values (614,64);
+insert into t (id,a) values (614,65);
+insert into t (id,a) values (614,66);
+insert into t (id,a) values (614,67);
+insert into t (id,a) values (614,68);
+insert into t (id,a) values (614,69);
+insert into t (id,a) values (614,70);
+insert into t (id,a) values (614,71);
+insert into t (id,a) values (614,72);
+insert into t (id,a) values (614,73);
+insert into t (id,a) values (614,74);
+insert into t (id,a) values (614,75);
+insert into t (id,a) values (614,76);
+insert into t (id,a) values (614,77);
+insert into t (id,a) values (614,78);
+insert into t (id,a) values (614,79);
+insert into t (id,a) values (614,80);
+insert into t (id,a) values (614,81);
+insert into t (id,a) values (614,82);
+insert into t (id,a) values (614,83);
+insert into t (id,a) values (614,84);
+insert into t (id,a) values (614,85);
+insert into t (id,a) values (614,86);
+insert into t (id,a) values (614,87);
+insert into t (id,a) values (614,88);
+insert into t (id,a) values (614,89);
+insert into t (id,a) values (614,90);
+insert into t (id,a) values (614,91);
+insert into t (id,a) values (614,92);
+insert into t (id,a) values (614,93);
+insert into t (id,a) values (614,94);
+insert into t (id,a) values (614,95);
+insert into t (id,a) values (614,96);
+insert into t (id,a) values (614,97);
+insert into t (id,a) values (614,98);
+insert into t (id,a) values (614,99);
+insert into t (id,a) values (615,0);
+insert into t (id,a) values (615,1);
+insert into t (id,a) values (615,2);
+insert into t (id,a) values (615,3);
+insert into t (id,a) values (615,4);
+insert into t (id,a) values (615,5);
+insert into t (id,a) values (615,6);
+insert into t (id,a) values (615,7);
+insert into t (id,a) values (615,8);
+insert into t (id,a) values (615,9);
+insert into t (id,a) values (615,10);
+insert into t (id,a) values (615,11);
+insert into t (id,a) values (615,12);
+insert into t (id,a) values (615,13);
+insert into t (id,a) values (615,14);
+insert into t (id,a) values (615,15);
+insert into t (id,a) values (615,16);
+insert into t (id,a) values (615,17);
+insert into t (id,a) values (615,18);
+insert into t (id,a) values (615,19);
+insert into t (id,a) values (615,20);
+insert into t (id,a) values (615,21);
+insert into t (id,a) values (615,22);
+insert into t (id,a) values (615,23);
+insert into t (id,a) values (615,24);
+insert into t (id,a) values (615,25);
+insert into t (id,a) values (615,26);
+insert into t (id,a) values (615,27);
+insert into t (id,a) values (615,28);
+insert into t (id,a) values (615,29);
+insert into t (id,a) values (615,30);
+insert into t (id,a) values (615,31);
+insert into t (id,a) values (615,32);
+insert into t (id,a) values (615,33);
+insert into t (id,a) values (615,34);
+insert into t (id,a) values (615,35);
+insert into t (id,a) values (615,36);
+insert into t (id,a) values (615,37);
+insert into t (id,a) values (615,38);
+insert into t (id,a) values (615,39);
+insert into t (id,a) values (615,40);
+insert into t (id,a) values (615,41);
+insert into t (id,a) values (615,42);
+insert into t (id,a) values (615,43);
+insert into t (id,a) values (615,44);
+insert into t (id,a) values (615,45);
+insert into t (id,a) values (615,46);
+insert into t (id,a) values (615,47);
+insert into t (id,a) values (615,48);
+insert into t (id,a) values (615,49);
+insert into t (id,a) values (615,50);
+insert into t (id,a) values (615,51);
+insert into t (id,a) values (615,52);
+insert into t (id,a) values (615,53);
+insert into t (id,a) values (615,54);
+insert into t (id,a) values (615,55);
+insert into t (id,a) values (615,56);
+insert into t (id,a) values (615,57);
+insert into t (id,a) values (615,58);
+insert into t (id,a) values (615,59);
+insert into t (id,a) values (615,60);
+insert into t (id,a) values (615,61);
+insert into t (id,a) values (615,62);
+insert into t (id,a) values (615,63);
+insert into t (id,a) values (615,64);
+insert into t (id,a) values (615,65);
+insert into t (id,a) values (615,66);
+insert into t (id,a) values (615,67);
+insert into t (id,a) values (615,68);
+insert into t (id,a) values (615,69);
+insert into t (id,a) values (615,70);
+insert into t (id,a) values (615,71);
+insert into t (id,a) values (615,72);
+insert into t (id,a) values (615,73);
+insert into t (id,a) values (615,74);
+insert into t (id,a) values (615,75);
+insert into t (id,a) values (615,76);
+insert into t (id,a) values (615,77);
+insert into t (id,a) values (615,78);
+insert into t (id,a) values (615,79);
+insert into t (id,a) values (615,80);
+insert into t (id,a) values (615,81);
+insert into t (id,a) values (615,82);
+insert into t (id,a) values (615,83);
+insert into t (id,a) values (615,84);
+insert into t (id,a) values (615,85);
+insert into t (id,a) values (615,86);
+insert into t (id,a) values (615,87);
+insert into t (id,a) values (615,88);
+insert into t (id,a) values (615,89);
+insert into t (id,a) values (615,90);
+insert into t (id,a) values (615,91);
+insert into t (id,a) values (615,92);
+insert into t (id,a) values (615,93);
+insert into t (id,a) values (615,94);
+insert into t (id,a) values (615,95);
+insert into t (id,a) values (615,96);
+insert into t (id,a) values (615,97);
+insert into t (id,a) values (615,98);
+insert into t (id,a) values (615,99);
+insert into t (id,a) values (616,0);
+insert into t (id,a) values (616,1);
+insert into t (id,a) values (616,2);
+insert into t (id,a) values (616,3);
+insert into t (id,a) values (616,4);
+insert into t (id,a) values (616,5);
+insert into t (id,a) values (616,6);
+insert into t (id,a) values (616,7);
+insert into t (id,a) values (616,8);
+insert into t (id,a) values (616,9);
+insert into t (id,a) values (616,10);
+insert into t (id,a) values (616,11);
+insert into t (id,a) values (616,12);
+insert into t (id,a) values (616,13);
+insert into t (id,a) values (616,14);
+insert into t (id,a) values (616,15);
+insert into t (id,a) values (616,16);
+insert into t (id,a) values (616,17);
+insert into t (id,a) values (616,18);
+insert into t (id,a) values (616,19);
+insert into t (id,a) values (616,20);
+insert into t (id,a) values (616,21);
+insert into t (id,a) values (616,22);
+insert into t (id,a) values (616,23);
+insert into t (id,a) values (616,24);
+insert into t (id,a) values (616,25);
+insert into t (id,a) values (616,26);
+insert into t (id,a) values (616,27);
+insert into t (id,a) values (616,28);
+insert into t (id,a) values (616,29);
+insert into t (id,a) values (616,30);
+insert into t (id,a) values (616,31);
+insert into t (id,a) values (616,32);
+insert into t (id,a) values (616,33);
+insert into t (id,a) values (616,34);
+insert into t (id,a) values (616,35);
+insert into t (id,a) values (616,36);
+insert into t (id,a) values (616,37);
+insert into t (id,a) values (616,38);
+insert into t (id,a) values (616,39);
+insert into t (id,a) values (616,40);
+insert into t (id,a) values (616,41);
+insert into t (id,a) values (616,42);
+insert into t (id,a) values (616,43);
+insert into t (id,a) values (616,44);
+insert into t (id,a) values (616,45);
+insert into t (id,a) values (616,46);
+insert into t (id,a) values (616,47);
+insert into t (id,a) values (616,48);
+insert into t (id,a) values (616,49);
+insert into t (id,a) values (616,50);
+insert into t (id,a) values (616,51);
+insert into t (id,a) values (616,52);
+insert into t (id,a) values (616,53);
+insert into t (id,a) values (616,54);
+insert into t (id,a) values (616,55);
+insert into t (id,a) values (616,56);
+insert into t (id,a) values (616,57);
+insert into t (id,a) values (616,58);
+insert into t (id,a) values (616,59);
+insert into t (id,a) values (616,60);
+insert into t (id,a) values (616,61);
+insert into t (id,a) values (616,62);
+insert into t (id,a) values (616,63);
+insert into t (id,a) values (616,64);
+insert into t (id,a) values (616,65);
+insert into t (id,a) values (616,66);
+insert into t (id,a) values (616,67);
+insert into t (id,a) values (616,68);
+insert into t (id,a) values (616,69);
+insert into t (id,a) values (616,70);
+insert into t (id,a) values (616,71);
+insert into t (id,a) values (616,72);
+insert into t (id,a) values (616,73);
+insert into t (id,a) values (616,74);
+insert into t (id,a) values (616,75);
+insert into t (id,a) values (616,76);
+insert into t (id,a) values (616,77);
+insert into t (id,a) values (616,78);
+insert into t (id,a) values (616,79);
+insert into t (id,a) values (616,80);
+insert into t (id,a) values (616,81);
+insert into t (id,a) values (616,82);
+insert into t (id,a) values (616,83);
+insert into t (id,a) values (616,84);
+insert into t (id,a) values (616,85);
+insert into t (id,a) values (616,86);
+insert into t (id,a) values (616,87);
+insert into t (id,a) values (616,88);
+insert into t (id,a) values (616,89);
+insert into t (id,a) values (616,90);
+insert into t (id,a) values (616,91);
+insert into t (id,a) values (616,92);
+insert into t (id,a) values (616,93);
+insert into t (id,a) values (616,94);
+insert into t (id,a) values (616,95);
+insert into t (id,a) values (616,96);
+insert into t (id,a) values (616,97);
+insert into t (id,a) values (616,98);
+insert into t (id,a) values (616,99);
+insert into t (id,a) values (617,0);
+insert into t (id,a) values (617,1);
+insert into t (id,a) values (617,2);
+insert into t (id,a) values (617,3);
+insert into t (id,a) values (617,4);
+insert into t (id,a) values (617,5);
+insert into t (id,a) values (617,6);
+insert into t (id,a) values (617,7);
+insert into t (id,a) values (617,8);
+insert into t (id,a) values (617,9);
+insert into t (id,a) values (617,10);
+insert into t (id,a) values (617,11);
+insert into t (id,a) values (617,12);
+insert into t (id,a) values (617,13);
+insert into t (id,a) values (617,14);
+insert into t (id,a) values (617,15);
+insert into t (id,a) values (617,16);
+insert into t (id,a) values (617,17);
+insert into t (id,a) values (617,18);
+insert into t (id,a) values (617,19);
+insert into t (id,a) values (617,20);
+insert into t (id,a) values (617,21);
+insert into t (id,a) values (617,22);
+insert into t (id,a) values (617,23);
+insert into t (id,a) values (617,24);
+insert into t (id,a) values (617,25);
+insert into t (id,a) values (617,26);
+insert into t (id,a) values (617,27);
+insert into t (id,a) values (617,28);
+insert into t (id,a) values (617,29);
+insert into t (id,a) values (617,30);
+insert into t (id,a) values (617,31);
+insert into t (id,a) values (617,32);
+insert into t (id,a) values (617,33);
+insert into t (id,a) values (617,34);
+insert into t (id,a) values (617,35);
+insert into t (id,a) values (617,36);
+insert into t (id,a) values (617,37);
+insert into t (id,a) values (617,38);
+insert into t (id,a) values (617,39);
+insert into t (id,a) values (617,40);
+insert into t (id,a) values (617,41);
+insert into t (id,a) values (617,42);
+insert into t (id,a) values (617,43);
+insert into t (id,a) values (617,44);
+insert into t (id,a) values (617,45);
+insert into t (id,a) values (617,46);
+insert into t (id,a) values (617,47);
+insert into t (id,a) values (617,48);
+insert into t (id,a) values (617,49);
+insert into t (id,a) values (617,50);
+insert into t (id,a) values (617,51);
+insert into t (id,a) values (617,52);
+insert into t (id,a) values (617,53);
+insert into t (id,a) values (617,54);
+insert into t (id,a) values (617,55);
+insert into t (id,a) values (617,56);
+insert into t (id,a) values (617,57);
+insert into t (id,a) values (617,58);
+insert into t (id,a) values (617,59);
+insert into t (id,a) values (617,60);
+insert into t (id,a) values (617,61);
+insert into t (id,a) values (617,62);
+insert into t (id,a) values (617,63);
+insert into t (id,a) values (617,64);
+insert into t (id,a) values (617,65);
+insert into t (id,a) values (617,66);
+insert into t (id,a) values (617,67);
+insert into t (id,a) values (617,68);
+insert into t (id,a) values (617,69);
+insert into t (id,a) values (617,70);
+insert into t (id,a) values (617,71);
+insert into t (id,a) values (617,72);
+insert into t (id,a) values (617,73);
+insert into t (id,a) values (617,74);
+insert into t (id,a) values (617,75);
+insert into t (id,a) values (617,76);
+insert into t (id,a) values (617,77);
+insert into t (id,a) values (617,78);
+insert into t (id,a) values (617,79);
+insert into t (id,a) values (617,80);
+insert into t (id,a) values (617,81);
+insert into t (id,a) values (617,82);
+insert into t (id,a) values (617,83);
+insert into t (id,a) values (617,84);
+insert into t (id,a) values (617,85);
+insert into t (id,a) values (617,86);
+insert into t (id,a) values (617,87);
+insert into t (id,a) values (617,88);
+insert into t (id,a) values (617,89);
+insert into t (id,a) values (617,90);
+insert into t (id,a) values (617,91);
+insert into t (id,a) values (617,92);
+insert into t (id,a) values (617,93);
+insert into t (id,a) values (617,94);
+insert into t (id,a) values (617,95);
+insert into t (id,a) values (617,96);
+insert into t (id,a) values (617,97);
+insert into t (id,a) values (617,98);
+insert into t (id,a) values (617,99);
+insert into t (id,a) values (618,0);
+insert into t (id,a) values (618,1);
+insert into t (id,a) values (618,2);
+insert into t (id,a) values (618,3);
+insert into t (id,a) values (618,4);
+insert into t (id,a) values (618,5);
+insert into t (id,a) values (618,6);
+insert into t (id,a) values (618,7);
+insert into t (id,a) values (618,8);
+insert into t (id,a) values (618,9);
+insert into t (id,a) values (618,10);
+insert into t (id,a) values (618,11);
+insert into t (id,a) values (618,12);
+insert into t (id,a) values (618,13);
+insert into t (id,a) values (618,14);
+insert into t (id,a) values (618,15);
+insert into t (id,a) values (618,16);
+insert into t (id,a) values (618,17);
+insert into t (id,a) values (618,18);
+insert into t (id,a) values (618,19);
+insert into t (id,a) values (618,20);
+insert into t (id,a) values (618,21);
+insert into t (id,a) values (618,22);
+insert into t (id,a) values (618,23);
+insert into t (id,a) values (618,24);
+insert into t (id,a) values (618,25);
+insert into t (id,a) values (618,26);
+insert into t (id,a) values (618,27);
+insert into t (id,a) values (618,28);
+insert into t (id,a) values (618,29);
+insert into t (id,a) values (618,30);
+insert into t (id,a) values (618,31);
+insert into t (id,a) values (618,32);
+insert into t (id,a) values (618,33);
+insert into t (id,a) values (618,34);
+insert into t (id,a) values (618,35);
+insert into t (id,a) values (618,36);
+insert into t (id,a) values (618,37);
+insert into t (id,a) values (618,38);
+insert into t (id,a) values (618,39);
+insert into t (id,a) values (618,40);
+insert into t (id,a) values (618,41);
+insert into t (id,a) values (618,42);
+insert into t (id,a) values (618,43);
+insert into t (id,a) values (618,44);
+insert into t (id,a) values (618,45);
+insert into t (id,a) values (618,46);
+insert into t (id,a) values (618,47);
+insert into t (id,a) values (618,48);
+insert into t (id,a) values (618,49);
+insert into t (id,a) values (618,50);
+insert into t (id,a) values (618,51);
+insert into t (id,a) values (618,52);
+insert into t (id,a) values (618,53);
+insert into t (id,a) values (618,54);
+insert into t (id,a) values (618,55);
+insert into t (id,a) values (618,56);
+insert into t (id,a) values (618,57);
+insert into t (id,a) values (618,58);
+insert into t (id,a) values (618,59);
+insert into t (id,a) values (618,60);
+insert into t (id,a) values (618,61);
+insert into t (id,a) values (618,62);
+insert into t (id,a) values (618,63);
+insert into t (id,a) values (618,64);
+insert into t (id,a) values (618,65);
+insert into t (id,a) values (618,66);
+insert into t (id,a) values (618,67);
+insert into t (id,a) values (618,68);
+insert into t (id,a) values (618,69);
+insert into t (id,a) values (618,70);
+insert into t (id,a) values (618,71);
+insert into t (id,a) values (618,72);
+insert into t (id,a) values (618,73);
+insert into t (id,a) values (618,74);
+insert into t (id,a) values (618,75);
+insert into t (id,a) values (618,76);
+insert into t (id,a) values (618,77);
+insert into t (id,a) values (618,78);
+insert into t (id,a) values (618,79);
+insert into t (id,a) values (618,80);
+insert into t (id,a) values (618,81);
+insert into t (id,a) values (618,82);
+insert into t (id,a) values (618,83);
+insert into t (id,a) values (618,84);
+insert into t (id,a) values (618,85);
+insert into t (id,a) values (618,86);
+insert into t (id,a) values (618,87);
+insert into t (id,a) values (618,88);
+insert into t (id,a) values (618,89);
+insert into t (id,a) values (618,90);
+insert into t (id,a) values (618,91);
+insert into t (id,a) values (618,92);
+insert into t (id,a) values (618,93);
+insert into t (id,a) values (618,94);
+insert into t (id,a) values (618,95);
+insert into t (id,a) values (618,96);
+insert into t (id,a) values (618,97);
+insert into t (id,a) values (618,98);
+insert into t (id,a) values (618,99);
+insert into t (id,a) values (619,0);
+insert into t (id,a) values (619,1);
+insert into t (id,a) values (619,2);
+insert into t (id,a) values (619,3);
+insert into t (id,a) values (619,4);
+insert into t (id,a) values (619,5);
+insert into t (id,a) values (619,6);
+insert into t (id,a) values (619,7);
+insert into t (id,a) values (619,8);
+insert into t (id,a) values (619,9);
+insert into t (id,a) values (619,10);
+insert into t (id,a) values (619,11);
+insert into t (id,a) values (619,12);
+insert into t (id,a) values (619,13);
+insert into t (id,a) values (619,14);
+insert into t (id,a) values (619,15);
+insert into t (id,a) values (619,16);
+insert into t (id,a) values (619,17);
+insert into t (id,a) values (619,18);
+insert into t (id,a) values (619,19);
+insert into t (id,a) values (619,20);
+insert into t (id,a) values (619,21);
+insert into t (id,a) values (619,22);
+insert into t (id,a) values (619,23);
+insert into t (id,a) values (619,24);
+insert into t (id,a) values (619,25);
+insert into t (id,a) values (619,26);
+insert into t (id,a) values (619,27);
+insert into t (id,a) values (619,28);
+insert into t (id,a) values (619,29);
+insert into t (id,a) values (619,30);
+insert into t (id,a) values (619,31);
+insert into t (id,a) values (619,32);
+insert into t (id,a) values (619,33);
+insert into t (id,a) values (619,34);
+insert into t (id,a) values (619,35);
+insert into t (id,a) values (619,36);
+insert into t (id,a) values (619,37);
+insert into t (id,a) values (619,38);
+insert into t (id,a) values (619,39);
+insert into t (id,a) values (619,40);
+insert into t (id,a) values (619,41);
+insert into t (id,a) values (619,42);
+insert into t (id,a) values (619,43);
+insert into t (id,a) values (619,44);
+insert into t (id,a) values (619,45);
+insert into t (id,a) values (619,46);
+insert into t (id,a) values (619,47);
+insert into t (id,a) values (619,48);
+insert into t (id,a) values (619,49);
+insert into t (id,a) values (619,50);
+insert into t (id,a) values (619,51);
+insert into t (id,a) values (619,52);
+insert into t (id,a) values (619,53);
+insert into t (id,a) values (619,54);
+insert into t (id,a) values (619,55);
+insert into t (id,a) values (619,56);
+insert into t (id,a) values (619,57);
+insert into t (id,a) values (619,58);
+insert into t (id,a) values (619,59);
+insert into t (id,a) values (619,60);
+insert into t (id,a) values (619,61);
+insert into t (id,a) values (619,62);
+insert into t (id,a) values (619,63);
+insert into t (id,a) values (619,64);
+insert into t (id,a) values (619,65);
+insert into t (id,a) values (619,66);
+insert into t (id,a) values (619,67);
+insert into t (id,a) values (619,68);
+insert into t (id,a) values (619,69);
+insert into t (id,a) values (619,70);
+insert into t (id,a) values (619,71);
+insert into t (id,a) values (619,72);
+insert into t (id,a) values (619,73);
+insert into t (id,a) values (619,74);
+insert into t (id,a) values (619,75);
+insert into t (id,a) values (619,76);
+insert into t (id,a) values (619,77);
+insert into t (id,a) values (619,78);
+insert into t (id,a) values (619,79);
+insert into t (id,a) values (619,80);
+insert into t (id,a) values (619,81);
+insert into t (id,a) values (619,82);
+insert into t (id,a) values (619,83);
+insert into t (id,a) values (619,84);
+insert into t (id,a) values (619,85);
+insert into t (id,a) values (619,86);
+insert into t (id,a) values (619,87);
+insert into t (id,a) values (619,88);
+insert into t (id,a) values (619,89);
+insert into t (id,a) values (619,90);
+insert into t (id,a) values (619,91);
+insert into t (id,a) values (619,92);
+insert into t (id,a) values (619,93);
+insert into t (id,a) values (619,94);
+insert into t (id,a) values (619,95);
+insert into t (id,a) values (619,96);
+insert into t (id,a) values (619,97);
+insert into t (id,a) values (619,98);
+insert into t (id,a) values (619,99);
+insert into t (id,a) values (620,0);
+insert into t (id,a) values (620,1);
+insert into t (id,a) values (620,2);
+insert into t (id,a) values (620,3);
+insert into t (id,a) values (620,4);
+insert into t (id,a) values (620,5);
+insert into t (id,a) values (620,6);
+insert into t (id,a) values (620,7);
+insert into t (id,a) values (620,8);
+insert into t (id,a) values (620,9);
+insert into t (id,a) values (620,10);
+insert into t (id,a) values (620,11);
+insert into t (id,a) values (620,12);
+insert into t (id,a) values (620,13);
+insert into t (id,a) values (620,14);
+insert into t (id,a) values (620,15);
+insert into t (id,a) values (620,16);
+insert into t (id,a) values (620,17);
+insert into t (id,a) values (620,18);
+insert into t (id,a) values (620,19);
+insert into t (id,a) values (620,20);
+insert into t (id,a) values (620,21);
+insert into t (id,a) values (620,22);
+insert into t (id,a) values (620,23);
+insert into t (id,a) values (620,24);
+insert into t (id,a) values (620,25);
+insert into t (id,a) values (620,26);
+insert into t (id,a) values (620,27);
+insert into t (id,a) values (620,28);
+insert into t (id,a) values (620,29);
+insert into t (id,a) values (620,30);
+insert into t (id,a) values (620,31);
+insert into t (id,a) values (620,32);
+insert into t (id,a) values (620,33);
+insert into t (id,a) values (620,34);
+insert into t (id,a) values (620,35);
+insert into t (id,a) values (620,36);
+insert into t (id,a) values (620,37);
+insert into t (id,a) values (620,38);
+insert into t (id,a) values (620,39);
+insert into t (id,a) values (620,40);
+insert into t (id,a) values (620,41);
+insert into t (id,a) values (620,42);
+insert into t (id,a) values (620,43);
+insert into t (id,a) values (620,44);
+insert into t (id,a) values (620,45);
+insert into t (id,a) values (620,46);
+insert into t (id,a) values (620,47);
+insert into t (id,a) values (620,48);
+insert into t (id,a) values (620,49);
+insert into t (id,a) values (620,50);
+insert into t (id,a) values (620,51);
+insert into t (id,a) values (620,52);
+insert into t (id,a) values (620,53);
+insert into t (id,a) values (620,54);
+insert into t (id,a) values (620,55);
+insert into t (id,a) values (620,56);
+insert into t (id,a) values (620,57);
+insert into t (id,a) values (620,58);
+insert into t (id,a) values (620,59);
+insert into t (id,a) values (620,60);
+insert into t (id,a) values (620,61);
+insert into t (id,a) values (620,62);
+insert into t (id,a) values (620,63);
+insert into t (id,a) values (620,64);
+insert into t (id,a) values (620,65);
+insert into t (id,a) values (620,66);
+insert into t (id,a) values (620,67);
+insert into t (id,a) values (620,68);
+insert into t (id,a) values (620,69);
+insert into t (id,a) values (620,70);
+insert into t (id,a) values (620,71);
+insert into t (id,a) values (620,72);
+insert into t (id,a) values (620,73);
+insert into t (id,a) values (620,74);
+insert into t (id,a) values (620,75);
+insert into t (id,a) values (620,76);
+insert into t (id,a) values (620,77);
+insert into t (id,a) values (620,78);
+insert into t (id,a) values (620,79);
+insert into t (id,a) values (620,80);
+insert into t (id,a) values (620,81);
+insert into t (id,a) values (620,82);
+insert into t (id,a) values (620,83);
+insert into t (id,a) values (620,84);
+insert into t (id,a) values (620,85);
+insert into t (id,a) values (620,86);
+insert into t (id,a) values (620,87);
+insert into t (id,a) values (620,88);
+insert into t (id,a) values (620,89);
+insert into t (id,a) values (620,90);
+insert into t (id,a) values (620,91);
+insert into t (id,a) values (620,92);
+insert into t (id,a) values (620,93);
+insert into t (id,a) values (620,94);
+insert into t (id,a) values (620,95);
+insert into t (id,a) values (620,96);
+insert into t (id,a) values (620,97);
+insert into t (id,a) values (620,98);
+insert into t (id,a) values (620,99);
+insert into t (id,a) values (621,0);
+insert into t (id,a) values (621,1);
+insert into t (id,a) values (621,2);
+insert into t (id,a) values (621,3);
+insert into t (id,a) values (621,4);
+insert into t (id,a) values (621,5);
+insert into t (id,a) values (621,6);
+insert into t (id,a) values (621,7);
+insert into t (id,a) values (621,8);
+insert into t (id,a) values (621,9);
+insert into t (id,a) values (621,10);
+insert into t (id,a) values (621,11);
+insert into t (id,a) values (621,12);
+insert into t (id,a) values (621,13);
+insert into t (id,a) values (621,14);
+insert into t (id,a) values (621,15);
+insert into t (id,a) values (621,16);
+insert into t (id,a) values (621,17);
+insert into t (id,a) values (621,18);
+insert into t (id,a) values (621,19);
+insert into t (id,a) values (621,20);
+insert into t (id,a) values (621,21);
+insert into t (id,a) values (621,22);
+insert into t (id,a) values (621,23);
+insert into t (id,a) values (621,24);
+insert into t (id,a) values (621,25);
+insert into t (id,a) values (621,26);
+insert into t (id,a) values (621,27);
+insert into t (id,a) values (621,28);
+insert into t (id,a) values (621,29);
+insert into t (id,a) values (621,30);
+insert into t (id,a) values (621,31);
+insert into t (id,a) values (621,32);
+insert into t (id,a) values (621,33);
+insert into t (id,a) values (621,34);
+insert into t (id,a) values (621,35);
+insert into t (id,a) values (621,36);
+insert into t (id,a) values (621,37);
+insert into t (id,a) values (621,38);
+insert into t (id,a) values (621,39);
+insert into t (id,a) values (621,40);
+insert into t (id,a) values (621,41);
+insert into t (id,a) values (621,42);
+insert into t (id,a) values (621,43);
+insert into t (id,a) values (621,44);
+insert into t (id,a) values (621,45);
+insert into t (id,a) values (621,46);
+insert into t (id,a) values (621,47);
+insert into t (id,a) values (621,48);
+insert into t (id,a) values (621,49);
+insert into t (id,a) values (621,50);
+insert into t (id,a) values (621,51);
+insert into t (id,a) values (621,52);
+insert into t (id,a) values (621,53);
+insert into t (id,a) values (621,54);
+insert into t (id,a) values (621,55);
+insert into t (id,a) values (621,56);
+insert into t (id,a) values (621,57);
+insert into t (id,a) values (621,58);
+insert into t (id,a) values (621,59);
+insert into t (id,a) values (621,60);
+insert into t (id,a) values (621,61);
+insert into t (id,a) values (621,62);
+insert into t (id,a) values (621,63);
+insert into t (id,a) values (621,64);
+insert into t (id,a) values (621,65);
+insert into t (id,a) values (621,66);
+insert into t (id,a) values (621,67);
+insert into t (id,a) values (621,68);
+insert into t (id,a) values (621,69);
+insert into t (id,a) values (621,70);
+insert into t (id,a) values (621,71);
+insert into t (id,a) values (621,72);
+insert into t (id,a) values (621,73);
+insert into t (id,a) values (621,74);
+insert into t (id,a) values (621,75);
+insert into t (id,a) values (621,76);
+insert into t (id,a) values (621,77);
+insert into t (id,a) values (621,78);
+insert into t (id,a) values (621,79);
+insert into t (id,a) values (621,80);
+insert into t (id,a) values (621,81);
+insert into t (id,a) values (621,82);
+insert into t (id,a) values (621,83);
+insert into t (id,a) values (621,84);
+insert into t (id,a) values (621,85);
+insert into t (id,a) values (621,86);
+insert into t (id,a) values (621,87);
+insert into t (id,a) values (621,88);
+insert into t (id,a) values (621,89);
+insert into t (id,a) values (621,90);
+insert into t (id,a) values (621,91);
+insert into t (id,a) values (621,92);
+insert into t (id,a) values (621,93);
+insert into t (id,a) values (621,94);
+insert into t (id,a) values (621,95);
+insert into t (id,a) values (621,96);
+insert into t (id,a) values (621,97);
+insert into t (id,a) values (621,98);
+insert into t (id,a) values (621,99);
+insert into t (id,a) values (622,0);
+insert into t (id,a) values (622,1);
+insert into t (id,a) values (622,2);
+insert into t (id,a) values (622,3);
+insert into t (id,a) values (622,4);
+insert into t (id,a) values (622,5);
+insert into t (id,a) values (622,6);
+insert into t (id,a) values (622,7);
+insert into t (id,a) values (622,8);
+insert into t (id,a) values (622,9);
+insert into t (id,a) values (622,10);
+insert into t (id,a) values (622,11);
+insert into t (id,a) values (622,12);
+insert into t (id,a) values (622,13);
+insert into t (id,a) values (622,14);
+insert into t (id,a) values (622,15);
+insert into t (id,a) values (622,16);
+insert into t (id,a) values (622,17);
+insert into t (id,a) values (622,18);
+insert into t (id,a) values (622,19);
+insert into t (id,a) values (622,20);
+insert into t (id,a) values (622,21);
+insert into t (id,a) values (622,22);
+insert into t (id,a) values (622,23);
+insert into t (id,a) values (622,24);
+insert into t (id,a) values (622,25);
+insert into t (id,a) values (622,26);
+insert into t (id,a) values (622,27);
+insert into t (id,a) values (622,28);
+insert into t (id,a) values (622,29);
+insert into t (id,a) values (622,30);
+insert into t (id,a) values (622,31);
+insert into t (id,a) values (622,32);
+insert into t (id,a) values (622,33);
+insert into t (id,a) values (622,34);
+insert into t (id,a) values (622,35);
+insert into t (id,a) values (622,36);
+insert into t (id,a) values (622,37);
+insert into t (id,a) values (622,38);
+insert into t (id,a) values (622,39);
+insert into t (id,a) values (622,40);
+insert into t (id,a) values (622,41);
+insert into t (id,a) values (622,42);
+insert into t (id,a) values (622,43);
+insert into t (id,a) values (622,44);
+insert into t (id,a) values (622,45);
+insert into t (id,a) values (622,46);
+insert into t (id,a) values (622,47);
+insert into t (id,a) values (622,48);
+insert into t (id,a) values (622,49);
+insert into t (id,a) values (622,50);
+insert into t (id,a) values (622,51);
+insert into t (id,a) values (622,52);
+insert into t (id,a) values (622,53);
+insert into t (id,a) values (622,54);
+insert into t (id,a) values (622,55);
+insert into t (id,a) values (622,56);
+insert into t (id,a) values (622,57);
+insert into t (id,a) values (622,58);
+insert into t (id,a) values (622,59);
+insert into t (id,a) values (622,60);
+insert into t (id,a) values (622,61);
+insert into t (id,a) values (622,62);
+insert into t (id,a) values (622,63);
+insert into t (id,a) values (622,64);
+insert into t (id,a) values (622,65);
+insert into t (id,a) values (622,66);
+insert into t (id,a) values (622,67);
+insert into t (id,a) values (622,68);
+insert into t (id,a) values (622,69);
+insert into t (id,a) values (622,70);
+insert into t (id,a) values (622,71);
+insert into t (id,a) values (622,72);
+insert into t (id,a) values (622,73);
+insert into t (id,a) values (622,74);
+insert into t (id,a) values (622,75);
+insert into t (id,a) values (622,76);
+insert into t (id,a) values (622,77);
+insert into t (id,a) values (622,78);
+insert into t (id,a) values (622,79);
+insert into t (id,a) values (622,80);
+insert into t (id,a) values (622,81);
+insert into t (id,a) values (622,82);
+insert into t (id,a) values (622,83);
+insert into t (id,a) values (622,84);
+insert into t (id,a) values (622,85);
+insert into t (id,a) values (622,86);
+insert into t (id,a) values (622,87);
+insert into t (id,a) values (622,88);
+insert into t (id,a) values (622,89);
+insert into t (id,a) values (622,90);
+insert into t (id,a) values (622,91);
+insert into t (id,a) values (622,92);
+insert into t (id,a) values (622,93);
+insert into t (id,a) values (622,94);
+insert into t (id,a) values (622,95);
+insert into t (id,a) values (622,96);
+insert into t (id,a) values (622,97);
+insert into t (id,a) values (622,98);
+insert into t (id,a) values (622,99);
+insert into t (id,a) values (623,0);
+insert into t (id,a) values (623,1);
+insert into t (id,a) values (623,2);
+insert into t (id,a) values (623,3);
+insert into t (id,a) values (623,4);
+insert into t (id,a) values (623,5);
+insert into t (id,a) values (623,6);
+insert into t (id,a) values (623,7);
+insert into t (id,a) values (623,8);
+insert into t (id,a) values (623,9);
+insert into t (id,a) values (623,10);
+insert into t (id,a) values (623,11);
+insert into t (id,a) values (623,12);
+insert into t (id,a) values (623,13);
+insert into t (id,a) values (623,14);
+insert into t (id,a) values (623,15);
+insert into t (id,a) values (623,16);
+insert into t (id,a) values (623,17);
+insert into t (id,a) values (623,18);
+insert into t (id,a) values (623,19);
+insert into t (id,a) values (623,20);
+insert into t (id,a) values (623,21);
+insert into t (id,a) values (623,22);
+insert into t (id,a) values (623,23);
+insert into t (id,a) values (623,24);
+insert into t (id,a) values (623,25);
+insert into t (id,a) values (623,26);
+insert into t (id,a) values (623,27);
+insert into t (id,a) values (623,28);
+insert into t (id,a) values (623,29);
+insert into t (id,a) values (623,30);
+insert into t (id,a) values (623,31);
+insert into t (id,a) values (623,32);
+insert into t (id,a) values (623,33);
+insert into t (id,a) values (623,34);
+insert into t (id,a) values (623,35);
+insert into t (id,a) values (623,36);
+insert into t (id,a) values (623,37);
+insert into t (id,a) values (623,38);
+insert into t (id,a) values (623,39);
+insert into t (id,a) values (623,40);
+insert into t (id,a) values (623,41);
+insert into t (id,a) values (623,42);
+insert into t (id,a) values (623,43);
+insert into t (id,a) values (623,44);
+insert into t (id,a) values (623,45);
+insert into t (id,a) values (623,46);
+insert into t (id,a) values (623,47);
+insert into t (id,a) values (623,48);
+insert into t (id,a) values (623,49);
+insert into t (id,a) values (623,50);
+insert into t (id,a) values (623,51);
+insert into t (id,a) values (623,52);
+insert into t (id,a) values (623,53);
+insert into t (id,a) values (623,54);
+insert into t (id,a) values (623,55);
+insert into t (id,a) values (623,56);
+insert into t (id,a) values (623,57);
+insert into t (id,a) values (623,58);
+insert into t (id,a) values (623,59);
+insert into t (id,a) values (623,60);
+insert into t (id,a) values (623,61);
+insert into t (id,a) values (623,62);
+insert into t (id,a) values (623,63);
+insert into t (id,a) values (623,64);
+insert into t (id,a) values (623,65);
+insert into t (id,a) values (623,66);
+insert into t (id,a) values (623,67);
+insert into t (id,a) values (623,68);
+insert into t (id,a) values (623,69);
+insert into t (id,a) values (623,70);
+insert into t (id,a) values (623,71);
+insert into t (id,a) values (623,72);
+insert into t (id,a) values (623,73);
+insert into t (id,a) values (623,74);
+insert into t (id,a) values (623,75);
+insert into t (id,a) values (623,76);
+insert into t (id,a) values (623,77);
+insert into t (id,a) values (623,78);
+insert into t (id,a) values (623,79);
+insert into t (id,a) values (623,80);
+insert into t (id,a) values (623,81);
+insert into t (id,a) values (623,82);
+insert into t (id,a) values (623,83);
+insert into t (id,a) values (623,84);
+insert into t (id,a) values (623,85);
+insert into t (id,a) values (623,86);
+insert into t (id,a) values (623,87);
+insert into t (id,a) values (623,88);
+insert into t (id,a) values (623,89);
+insert into t (id,a) values (623,90);
+insert into t (id,a) values (623,91);
+insert into t (id,a) values (623,92);
+insert into t (id,a) values (623,93);
+insert into t (id,a) values (623,94);
+insert into t (id,a) values (623,95);
+insert into t (id,a) values (623,96);
+insert into t (id,a) values (623,97);
+insert into t (id,a) values (623,98);
+insert into t (id,a) values (623,99);
+insert into t (id,a) values (624,0);
+insert into t (id,a) values (624,1);
+insert into t (id,a) values (624,2);
+insert into t (id,a) values (624,3);
+insert into t (id,a) values (624,4);
+insert into t (id,a) values (624,5);
+insert into t (id,a) values (624,6);
+insert into t (id,a) values (624,7);
+insert into t (id,a) values (624,8);
+insert into t (id,a) values (624,9);
+insert into t (id,a) values (624,10);
+insert into t (id,a) values (624,11);
+insert into t (id,a) values (624,12);
+insert into t (id,a) values (624,13);
+insert into t (id,a) values (624,14);
+insert into t (id,a) values (624,15);
+insert into t (id,a) values (624,16);
+insert into t (id,a) values (624,17);
+insert into t (id,a) values (624,18);
+insert into t (id,a) values (624,19);
+insert into t (id,a) values (624,20);
+insert into t (id,a) values (624,21);
+insert into t (id,a) values (624,22);
+insert into t (id,a) values (624,23);
+insert into t (id,a) values (624,24);
+insert into t (id,a) values (624,25);
+insert into t (id,a) values (624,26);
+insert into t (id,a) values (624,27);
+insert into t (id,a) values (624,28);
+insert into t (id,a) values (624,29);
+insert into t (id,a) values (624,30);
+insert into t (id,a) values (624,31);
+insert into t (id,a) values (624,32);
+insert into t (id,a) values (624,33);
+insert into t (id,a) values (624,34);
+insert into t (id,a) values (624,35);
+insert into t (id,a) values (624,36);
+insert into t (id,a) values (624,37);
+insert into t (id,a) values (624,38);
+insert into t (id,a) values (624,39);
+insert into t (id,a) values (624,40);
+insert into t (id,a) values (624,41);
+insert into t (id,a) values (624,42);
+insert into t (id,a) values (624,43);
+insert into t (id,a) values (624,44);
+insert into t (id,a) values (624,45);
+insert into t (id,a) values (624,46);
+insert into t (id,a) values (624,47);
+insert into t (id,a) values (624,48);
+insert into t (id,a) values (624,49);
+insert into t (id,a) values (624,50);
+insert into t (id,a) values (624,51);
+insert into t (id,a) values (624,52);
+insert into t (id,a) values (624,53);
+insert into t (id,a) values (624,54);
+insert into t (id,a) values (624,55);
+insert into t (id,a) values (624,56);
+insert into t (id,a) values (624,57);
+insert into t (id,a) values (624,58);
+insert into t (id,a) values (624,59);
+insert into t (id,a) values (624,60);
+insert into t (id,a) values (624,61);
+insert into t (id,a) values (624,62);
+insert into t (id,a) values (624,63);
+insert into t (id,a) values (624,64);
+insert into t (id,a) values (624,65);
+insert into t (id,a) values (624,66);
+insert into t (id,a) values (624,67);
+insert into t (id,a) values (624,68);
+insert into t (id,a) values (624,69);
+insert into t (id,a) values (624,70);
+insert into t (id,a) values (624,71);
+insert into t (id,a) values (624,72);
+insert into t (id,a) values (624,73);
+insert into t (id,a) values (624,74);
+insert into t (id,a) values (624,75);
+insert into t (id,a) values (624,76);
+insert into t (id,a) values (624,77);
+insert into t (id,a) values (624,78);
+insert into t (id,a) values (624,79);
+insert into t (id,a) values (624,80);
+insert into t (id,a) values (624,81);
+insert into t (id,a) values (624,82);
+insert into t (id,a) values (624,83);
+insert into t (id,a) values (624,84);
+insert into t (id,a) values (624,85);
+insert into t (id,a) values (624,86);
+insert into t (id,a) values (624,87);
+insert into t (id,a) values (624,88);
+insert into t (id,a) values (624,89);
+insert into t (id,a) values (624,90);
+insert into t (id,a) values (624,91);
+insert into t (id,a) values (624,92);
+insert into t (id,a) values (624,93);
+insert into t (id,a) values (624,94);
+insert into t (id,a) values (624,95);
+insert into t (id,a) values (624,96);
+insert into t (id,a) values (624,97);
+insert into t (id,a) values (624,98);
+insert into t (id,a) values (624,99);
+insert into t (id,a) values (625,0);
+insert into t (id,a) values (625,1);
+insert into t (id,a) values (625,2);
+insert into t (id,a) values (625,3);
+insert into t (id,a) values (625,4);
+insert into t (id,a) values (625,5);
+insert into t (id,a) values (625,6);
+insert into t (id,a) values (625,7);
+insert into t (id,a) values (625,8);
+insert into t (id,a) values (625,9);
+insert into t (id,a) values (625,10);
+insert into t (id,a) values (625,11);
+insert into t (id,a) values (625,12);
+insert into t (id,a) values (625,13);
+insert into t (id,a) values (625,14);
+insert into t (id,a) values (625,15);
+insert into t (id,a) values (625,16);
+insert into t (id,a) values (625,17);
+insert into t (id,a) values (625,18);
+insert into t (id,a) values (625,19);
+insert into t (id,a) values (625,20);
+insert into t (id,a) values (625,21);
+insert into t (id,a) values (625,22);
+insert into t (id,a) values (625,23);
+insert into t (id,a) values (625,24);
+insert into t (id,a) values (625,25);
+insert into t (id,a) values (625,26);
+insert into t (id,a) values (625,27);
+insert into t (id,a) values (625,28);
+insert into t (id,a) values (625,29);
+insert into t (id,a) values (625,30);
+insert into t (id,a) values (625,31);
+insert into t (id,a) values (625,32);
+insert into t (id,a) values (625,33);
+insert into t (id,a) values (625,34);
+insert into t (id,a) values (625,35);
+insert into t (id,a) values (625,36);
+insert into t (id,a) values (625,37);
+insert into t (id,a) values (625,38);
+insert into t (id,a) values (625,39);
+insert into t (id,a) values (625,40);
+insert into t (id,a) values (625,41);
+insert into t (id,a) values (625,42);
+insert into t (id,a) values (625,43);
+insert into t (id,a) values (625,44);
+insert into t (id,a) values (625,45);
+insert into t (id,a) values (625,46);
+insert into t (id,a) values (625,47);
+insert into t (id,a) values (625,48);
+insert into t (id,a) values (625,49);
+insert into t (id,a) values (625,50);
+insert into t (id,a) values (625,51);
+insert into t (id,a) values (625,52);
+insert into t (id,a) values (625,53);
+insert into t (id,a) values (625,54);
+insert into t (id,a) values (625,55);
+insert into t (id,a) values (625,56);
+insert into t (id,a) values (625,57);
+insert into t (id,a) values (625,58);
+insert into t (id,a) values (625,59);
+insert into t (id,a) values (625,60);
+insert into t (id,a) values (625,61);
+insert into t (id,a) values (625,62);
+insert into t (id,a) values (625,63);
+insert into t (id,a) values (625,64);
+insert into t (id,a) values (625,65);
+insert into t (id,a) values (625,66);
+insert into t (id,a) values (625,67);
+insert into t (id,a) values (625,68);
+insert into t (id,a) values (625,69);
+insert into t (id,a) values (625,70);
+insert into t (id,a) values (625,71);
+insert into t (id,a) values (625,72);
+insert into t (id,a) values (625,73);
+insert into t (id,a) values (625,74);
+insert into t (id,a) values (625,75);
+insert into t (id,a) values (625,76);
+insert into t (id,a) values (625,77);
+insert into t (id,a) values (625,78);
+insert into t (id,a) values (625,79);
+insert into t (id,a) values (625,80);
+insert into t (id,a) values (625,81);
+insert into t (id,a) values (625,82);
+insert into t (id,a) values (625,83);
+insert into t (id,a) values (625,84);
+insert into t (id,a) values (625,85);
+insert into t (id,a) values (625,86);
+insert into t (id,a) values (625,87);
+insert into t (id,a) values (625,88);
+insert into t (id,a) values (625,89);
+insert into t (id,a) values (625,90);
+insert into t (id,a) values (625,91);
+insert into t (id,a) values (625,92);
+insert into t (id,a) values (625,93);
+insert into t (id,a) values (625,94);
+insert into t (id,a) values (625,95);
+insert into t (id,a) values (625,96);
+insert into t (id,a) values (625,97);
+insert into t (id,a) values (625,98);
+insert into t (id,a) values (625,99);
+insert into t (id,a) values (626,0);
+insert into t (id,a) values (626,1);
+insert into t (id,a) values (626,2);
+insert into t (id,a) values (626,3);
+insert into t (id,a) values (626,4);
+insert into t (id,a) values (626,5);
+insert into t (id,a) values (626,6);
+insert into t (id,a) values (626,7);
+insert into t (id,a) values (626,8);
+insert into t (id,a) values (626,9);
+insert into t (id,a) values (626,10);
+insert into t (id,a) values (626,11);
+insert into t (id,a) values (626,12);
+insert into t (id,a) values (626,13);
+insert into t (id,a) values (626,14);
+insert into t (id,a) values (626,15);
+insert into t (id,a) values (626,16);
+insert into t (id,a) values (626,17);
+insert into t (id,a) values (626,18);
+insert into t (id,a) values (626,19);
+insert into t (id,a) values (626,20);
+insert into t (id,a) values (626,21);
+insert into t (id,a) values (626,22);
+insert into t (id,a) values (626,23);
+insert into t (id,a) values (626,24);
+insert into t (id,a) values (626,25);
+insert into t (id,a) values (626,26);
+insert into t (id,a) values (626,27);
+insert into t (id,a) values (626,28);
+insert into t (id,a) values (626,29);
+insert into t (id,a) values (626,30);
+insert into t (id,a) values (626,31);
+insert into t (id,a) values (626,32);
+insert into t (id,a) values (626,33);
+insert into t (id,a) values (626,34);
+insert into t (id,a) values (626,35);
+insert into t (id,a) values (626,36);
+insert into t (id,a) values (626,37);
+insert into t (id,a) values (626,38);
+insert into t (id,a) values (626,39);
+insert into t (id,a) values (626,40);
+insert into t (id,a) values (626,41);
+insert into t (id,a) values (626,42);
+insert into t (id,a) values (626,43);
+insert into t (id,a) values (626,44);
+insert into t (id,a) values (626,45);
+insert into t (id,a) values (626,46);
+insert into t (id,a) values (626,47);
+insert into t (id,a) values (626,48);
+insert into t (id,a) values (626,49);
+insert into t (id,a) values (626,50);
+insert into t (id,a) values (626,51);
+insert into t (id,a) values (626,52);
+insert into t (id,a) values (626,53);
+insert into t (id,a) values (626,54);
+insert into t (id,a) values (626,55);
+insert into t (id,a) values (626,56);
+insert into t (id,a) values (626,57);
+insert into t (id,a) values (626,58);
+insert into t (id,a) values (626,59);
+insert into t (id,a) values (626,60);
+insert into t (id,a) values (626,61);
+insert into t (id,a) values (626,62);
+insert into t (id,a) values (626,63);
+insert into t (id,a) values (626,64);
+insert into t (id,a) values (626,65);
+insert into t (id,a) values (626,66);
+insert into t (id,a) values (626,67);
+insert into t (id,a) values (626,68);
+insert into t (id,a) values (626,69);
+insert into t (id,a) values (626,70);
+insert into t (id,a) values (626,71);
+insert into t (id,a) values (626,72);
+insert into t (id,a) values (626,73);
+insert into t (id,a) values (626,74);
+insert into t (id,a) values (626,75);
+insert into t (id,a) values (626,76);
+insert into t (id,a) values (626,77);
+insert into t (id,a) values (626,78);
+insert into t (id,a) values (626,79);
+insert into t (id,a) values (626,80);
+insert into t (id,a) values (626,81);
+insert into t (id,a) values (626,82);
+insert into t (id,a) values (626,83);
+insert into t (id,a) values (626,84);
+insert into t (id,a) values (626,85);
+insert into t (id,a) values (626,86);
+insert into t (id,a) values (626,87);
+insert into t (id,a) values (626,88);
+insert into t (id,a) values (626,89);
+insert into t (id,a) values (626,90);
+insert into t (id,a) values (626,91);
+insert into t (id,a) values (626,92);
+insert into t (id,a) values (626,93);
+insert into t (id,a) values (626,94);
+insert into t (id,a) values (626,95);
+insert into t (id,a) values (626,96);
+insert into t (id,a) values (626,97);
+insert into t (id,a) values (626,98);
+insert into t (id,a) values (626,99);
+insert into t (id,a) values (627,0);
+insert into t (id,a) values (627,1);
+insert into t (id,a) values (627,2);
+insert into t (id,a) values (627,3);
+insert into t (id,a) values (627,4);
+insert into t (id,a) values (627,5);
+insert into t (id,a) values (627,6);
+insert into t (id,a) values (627,7);
+insert into t (id,a) values (627,8);
+insert into t (id,a) values (627,9);
+insert into t (id,a) values (627,10);
+insert into t (id,a) values (627,11);
+insert into t (id,a) values (627,12);
+insert into t (id,a) values (627,13);
+insert into t (id,a) values (627,14);
+insert into t (id,a) values (627,15);
+insert into t (id,a) values (627,16);
+insert into t (id,a) values (627,17);
+insert into t (id,a) values (627,18);
+insert into t (id,a) values (627,19);
+insert into t (id,a) values (627,20);
+insert into t (id,a) values (627,21);
+insert into t (id,a) values (627,22);
+insert into t (id,a) values (627,23);
+insert into t (id,a) values (627,24);
+insert into t (id,a) values (627,25);
+insert into t (id,a) values (627,26);
+insert into t (id,a) values (627,27);
+insert into t (id,a) values (627,28);
+insert into t (id,a) values (627,29);
+insert into t (id,a) values (627,30);
+insert into t (id,a) values (627,31);
+insert into t (id,a) values (627,32);
+insert into t (id,a) values (627,33);
+insert into t (id,a) values (627,34);
+insert into t (id,a) values (627,35);
+insert into t (id,a) values (627,36);
+insert into t (id,a) values (627,37);
+insert into t (id,a) values (627,38);
+insert into t (id,a) values (627,39);
+insert into t (id,a) values (627,40);
+insert into t (id,a) values (627,41);
+insert into t (id,a) values (627,42);
+insert into t (id,a) values (627,43);
+insert into t (id,a) values (627,44);
+insert into t (id,a) values (627,45);
+insert into t (id,a) values (627,46);
+insert into t (id,a) values (627,47);
+insert into t (id,a) values (627,48);
+insert into t (id,a) values (627,49);
+insert into t (id,a) values (627,50);
+insert into t (id,a) values (627,51);
+insert into t (id,a) values (627,52);
+insert into t (id,a) values (627,53);
+insert into t (id,a) values (627,54);
+insert into t (id,a) values (627,55);
+insert into t (id,a) values (627,56);
+insert into t (id,a) values (627,57);
+insert into t (id,a) values (627,58);
+insert into t (id,a) values (627,59);
+insert into t (id,a) values (627,60);
+insert into t (id,a) values (627,61);
+insert into t (id,a) values (627,62);
+insert into t (id,a) values (627,63);
+insert into t (id,a) values (627,64);
+insert into t (id,a) values (627,65);
+insert into t (id,a) values (627,66);
+insert into t (id,a) values (627,67);
+insert into t (id,a) values (627,68);
+insert into t (id,a) values (627,69);
+insert into t (id,a) values (627,70);
+insert into t (id,a) values (627,71);
+insert into t (id,a) values (627,72);
+insert into t (id,a) values (627,73);
+insert into t (id,a) values (627,74);
+insert into t (id,a) values (627,75);
+insert into t (id,a) values (627,76);
+insert into t (id,a) values (627,77);
+insert into t (id,a) values (627,78);
+insert into t (id,a) values (627,79);
+insert into t (id,a) values (627,80);
+insert into t (id,a) values (627,81);
+insert into t (id,a) values (627,82);
+insert into t (id,a) values (627,83);
+insert into t (id,a) values (627,84);
+insert into t (id,a) values (627,85);
+insert into t (id,a) values (627,86);
+insert into t (id,a) values (627,87);
+insert into t (id,a) values (627,88);
+insert into t (id,a) values (627,89);
+insert into t (id,a) values (627,90);
+insert into t (id,a) values (627,91);
+insert into t (id,a) values (627,92);
+insert into t (id,a) values (627,93);
+insert into t (id,a) values (627,94);
+insert into t (id,a) values (627,95);
+insert into t (id,a) values (627,96);
+insert into t (id,a) values (627,97);
+insert into t (id,a) values (627,98);
+insert into t (id,a) values (627,99);
+insert into t (id,a) values (628,0);
+insert into t (id,a) values (628,1);
+insert into t (id,a) values (628,2);
+insert into t (id,a) values (628,3);
+insert into t (id,a) values (628,4);
+insert into t (id,a) values (628,5);
+insert into t (id,a) values (628,6);
+insert into t (id,a) values (628,7);
+insert into t (id,a) values (628,8);
+insert into t (id,a) values (628,9);
+insert into t (id,a) values (628,10);
+insert into t (id,a) values (628,11);
+insert into t (id,a) values (628,12);
+insert into t (id,a) values (628,13);
+insert into t (id,a) values (628,14);
+insert into t (id,a) values (628,15);
+insert into t (id,a) values (628,16);
+insert into t (id,a) values (628,17);
+insert into t (id,a) values (628,18);
+insert into t (id,a) values (628,19);
+insert into t (id,a) values (628,20);
+insert into t (id,a) values (628,21);
+insert into t (id,a) values (628,22);
+insert into t (id,a) values (628,23);
+insert into t (id,a) values (628,24);
+insert into t (id,a) values (628,25);
+insert into t (id,a) values (628,26);
+insert into t (id,a) values (628,27);
+insert into t (id,a) values (628,28);
+insert into t (id,a) values (628,29);
+insert into t (id,a) values (628,30);
+insert into t (id,a) values (628,31);
+insert into t (id,a) values (628,32);
+insert into t (id,a) values (628,33);
+insert into t (id,a) values (628,34);
+insert into t (id,a) values (628,35);
+insert into t (id,a) values (628,36);
+insert into t (id,a) values (628,37);
+insert into t (id,a) values (628,38);
+insert into t (id,a) values (628,39);
+insert into t (id,a) values (628,40);
+insert into t (id,a) values (628,41);
+insert into t (id,a) values (628,42);
+insert into t (id,a) values (628,43);
+insert into t (id,a) values (628,44);
+insert into t (id,a) values (628,45);
+insert into t (id,a) values (628,46);
+insert into t (id,a) values (628,47);
+insert into t (id,a) values (628,48);
+insert into t (id,a) values (628,49);
+insert into t (id,a) values (628,50);
+insert into t (id,a) values (628,51);
+insert into t (id,a) values (628,52);
+insert into t (id,a) values (628,53);
+insert into t (id,a) values (628,54);
+insert into t (id,a) values (628,55);
+insert into t (id,a) values (628,56);
+insert into t (id,a) values (628,57);
+insert into t (id,a) values (628,58);
+insert into t (id,a) values (628,59);
+insert into t (id,a) values (628,60);
+insert into t (id,a) values (628,61);
+insert into t (id,a) values (628,62);
+insert into t (id,a) values (628,63);
+insert into t (id,a) values (628,64);
+insert into t (id,a) values (628,65);
+insert into t (id,a) values (628,66);
+insert into t (id,a) values (628,67);
+insert into t (id,a) values (628,68);
+insert into t (id,a) values (628,69);
+insert into t (id,a) values (628,70);
+insert into t (id,a) values (628,71);
+insert into t (id,a) values (628,72);
+insert into t (id,a) values (628,73);
+insert into t (id,a) values (628,74);
+insert into t (id,a) values (628,75);
+insert into t (id,a) values (628,76);
+insert into t (id,a) values (628,77);
+insert into t (id,a) values (628,78);
+insert into t (id,a) values (628,79);
+insert into t (id,a) values (628,80);
+insert into t (id,a) values (628,81);
+insert into t (id,a) values (628,82);
+insert into t (id,a) values (628,83);
+insert into t (id,a) values (628,84);
+insert into t (id,a) values (628,85);
+insert into t (id,a) values (628,86);
+insert into t (id,a) values (628,87);
+insert into t (id,a) values (628,88);
+insert into t (id,a) values (628,89);
+insert into t (id,a) values (628,90);
+insert into t (id,a) values (628,91);
+insert into t (id,a) values (628,92);
+insert into t (id,a) values (628,93);
+insert into t (id,a) values (628,94);
+insert into t (id,a) values (628,95);
+insert into t (id,a) values (628,96);
+insert into t (id,a) values (628,97);
+insert into t (id,a) values (628,98);
+insert into t (id,a) values (628,99);
+insert into t (id,a) values (629,0);
+insert into t (id,a) values (629,1);
+insert into t (id,a) values (629,2);
+insert into t (id,a) values (629,3);
+insert into t (id,a) values (629,4);
+insert into t (id,a) values (629,5);
+insert into t (id,a) values (629,6);
+insert into t (id,a) values (629,7);
+insert into t (id,a) values (629,8);
+insert into t (id,a) values (629,9);
+insert into t (id,a) values (629,10);
+insert into t (id,a) values (629,11);
+insert into t (id,a) values (629,12);
+insert into t (id,a) values (629,13);
+insert into t (id,a) values (629,14);
+insert into t (id,a) values (629,15);
+insert into t (id,a) values (629,16);
+insert into t (id,a) values (629,17);
+insert into t (id,a) values (629,18);
+insert into t (id,a) values (629,19);
+insert into t (id,a) values (629,20);
+insert into t (id,a) values (629,21);
+insert into t (id,a) values (629,22);
+insert into t (id,a) values (629,23);
+insert into t (id,a) values (629,24);
+insert into t (id,a) values (629,25);
+insert into t (id,a) values (629,26);
+insert into t (id,a) values (629,27);
+insert into t (id,a) values (629,28);
+insert into t (id,a) values (629,29);
+insert into t (id,a) values (629,30);
+insert into t (id,a) values (629,31);
+insert into t (id,a) values (629,32);
+insert into t (id,a) values (629,33);
+insert into t (id,a) values (629,34);
+insert into t (id,a) values (629,35);
+insert into t (id,a) values (629,36);
+insert into t (id,a) values (629,37);
+insert into t (id,a) values (629,38);
+insert into t (id,a) values (629,39);
+insert into t (id,a) values (629,40);
+insert into t (id,a) values (629,41);
+insert into t (id,a) values (629,42);
+insert into t (id,a) values (629,43);
+insert into t (id,a) values (629,44);
+insert into t (id,a) values (629,45);
+insert into t (id,a) values (629,46);
+insert into t (id,a) values (629,47);
+insert into t (id,a) values (629,48);
+insert into t (id,a) values (629,49);
+insert into t (id,a) values (629,50);
+insert into t (id,a) values (629,51);
+insert into t (id,a) values (629,52);
+insert into t (id,a) values (629,53);
+insert into t (id,a) values (629,54);
+insert into t (id,a) values (629,55);
+insert into t (id,a) values (629,56);
+insert into t (id,a) values (629,57);
+insert into t (id,a) values (629,58);
+insert into t (id,a) values (629,59);
+insert into t (id,a) values (629,60);
+insert into t (id,a) values (629,61);
+insert into t (id,a) values (629,62);
+insert into t (id,a) values (629,63);
+insert into t (id,a) values (629,64);
+insert into t (id,a) values (629,65);
+insert into t (id,a) values (629,66);
+insert into t (id,a) values (629,67);
+insert into t (id,a) values (629,68);
+insert into t (id,a) values (629,69);
+insert into t (id,a) values (629,70);
+insert into t (id,a) values (629,71);
+insert into t (id,a) values (629,72);
+insert into t (id,a) values (629,73);
+insert into t (id,a) values (629,74);
+insert into t (id,a) values (629,75);
+insert into t (id,a) values (629,76);
+insert into t (id,a) values (629,77);
+insert into t (id,a) values (629,78);
+insert into t (id,a) values (629,79);
+insert into t (id,a) values (629,80);
+insert into t (id,a) values (629,81);
+insert into t (id,a) values (629,82);
+insert into t (id,a) values (629,83);
+insert into t (id,a) values (629,84);
+insert into t (id,a) values (629,85);
+insert into t (id,a) values (629,86);
+insert into t (id,a) values (629,87);
+insert into t (id,a) values (629,88);
+insert into t (id,a) values (629,89);
+insert into t (id,a) values (629,90);
+insert into t (id,a) values (629,91);
+insert into t (id,a) values (629,92);
+insert into t (id,a) values (629,93);
+insert into t (id,a) values (629,94);
+insert into t (id,a) values (629,95);
+insert into t (id,a) values (629,96);
+insert into t (id,a) values (629,97);
+insert into t (id,a) values (629,98);
+insert into t (id,a) values (629,99);
+insert into t (id,a) values (630,0);
+insert into t (id,a) values (630,1);
+insert into t (id,a) values (630,2);
+insert into t (id,a) values (630,3);
+insert into t (id,a) values (630,4);
+insert into t (id,a) values (630,5);
+insert into t (id,a) values (630,6);
+insert into t (id,a) values (630,7);
+insert into t (id,a) values (630,8);
+insert into t (id,a) values (630,9);
+insert into t (id,a) values (630,10);
+insert into t (id,a) values (630,11);
+insert into t (id,a) values (630,12);
+insert into t (id,a) values (630,13);
+insert into t (id,a) values (630,14);
+insert into t (id,a) values (630,15);
+insert into t (id,a) values (630,16);
+insert into t (id,a) values (630,17);
+insert into t (id,a) values (630,18);
+insert into t (id,a) values (630,19);
+insert into t (id,a) values (630,20);
+insert into t (id,a) values (630,21);
+insert into t (id,a) values (630,22);
+insert into t (id,a) values (630,23);
+insert into t (id,a) values (630,24);
+insert into t (id,a) values (630,25);
+insert into t (id,a) values (630,26);
+insert into t (id,a) values (630,27);
+insert into t (id,a) values (630,28);
+insert into t (id,a) values (630,29);
+insert into t (id,a) values (630,30);
+insert into t (id,a) values (630,31);
+insert into t (id,a) values (630,32);
+insert into t (id,a) values (630,33);
+insert into t (id,a) values (630,34);
+insert into t (id,a) values (630,35);
+insert into t (id,a) values (630,36);
+insert into t (id,a) values (630,37);
+insert into t (id,a) values (630,38);
+insert into t (id,a) values (630,39);
+insert into t (id,a) values (630,40);
+insert into t (id,a) values (630,41);
+insert into t (id,a) values (630,42);
+insert into t (id,a) values (630,43);
+insert into t (id,a) values (630,44);
+insert into t (id,a) values (630,45);
+insert into t (id,a) values (630,46);
+insert into t (id,a) values (630,47);
+insert into t (id,a) values (630,48);
+insert into t (id,a) values (630,49);
+insert into t (id,a) values (630,50);
+insert into t (id,a) values (630,51);
+insert into t (id,a) values (630,52);
+insert into t (id,a) values (630,53);
+insert into t (id,a) values (630,54);
+insert into t (id,a) values (630,55);
+insert into t (id,a) values (630,56);
+insert into t (id,a) values (630,57);
+insert into t (id,a) values (630,58);
+insert into t (id,a) values (630,59);
+insert into t (id,a) values (630,60);
+insert into t (id,a) values (630,61);
+insert into t (id,a) values (630,62);
+insert into t (id,a) values (630,63);
+insert into t (id,a) values (630,64);
+insert into t (id,a) values (630,65);
+insert into t (id,a) values (630,66);
+insert into t (id,a) values (630,67);
+insert into t (id,a) values (630,68);
+insert into t (id,a) values (630,69);
+insert into t (id,a) values (630,70);
+insert into t (id,a) values (630,71);
+insert into t (id,a) values (630,72);
+insert into t (id,a) values (630,73);
+insert into t (id,a) values (630,74);
+insert into t (id,a) values (630,75);
+insert into t (id,a) values (630,76);
+insert into t (id,a) values (630,77);
+insert into t (id,a) values (630,78);
+insert into t (id,a) values (630,79);
+insert into t (id,a) values (630,80);
+insert into t (id,a) values (630,81);
+insert into t (id,a) values (630,82);
+insert into t (id,a) values (630,83);
+insert into t (id,a) values (630,84);
+insert into t (id,a) values (630,85);
+insert into t (id,a) values (630,86);
+insert into t (id,a) values (630,87);
+insert into t (id,a) values (630,88);
+insert into t (id,a) values (630,89);
+insert into t (id,a) values (630,90);
+insert into t (id,a) values (630,91);
+insert into t (id,a) values (630,92);
+insert into t (id,a) values (630,93);
+insert into t (id,a) values (630,94);
+insert into t (id,a) values (630,95);
+insert into t (id,a) values (630,96);
+insert into t (id,a) values (630,97);
+insert into t (id,a) values (630,98);
+insert into t (id,a) values (630,99);
+insert into t (id,a) values (631,0);
+insert into t (id,a) values (631,1);
+insert into t (id,a) values (631,2);
+insert into t (id,a) values (631,3);
+insert into t (id,a) values (631,4);
+insert into t (id,a) values (631,5);
+insert into t (id,a) values (631,6);
+insert into t (id,a) values (631,7);
+insert into t (id,a) values (631,8);
+insert into t (id,a) values (631,9);
+insert into t (id,a) values (631,10);
+insert into t (id,a) values (631,11);
+insert into t (id,a) values (631,12);
+insert into t (id,a) values (631,13);
+insert into t (id,a) values (631,14);
+insert into t (id,a) values (631,15);
+insert into t (id,a) values (631,16);
+insert into t (id,a) values (631,17);
+insert into t (id,a) values (631,18);
+insert into t (id,a) values (631,19);
+insert into t (id,a) values (631,20);
+insert into t (id,a) values (631,21);
+insert into t (id,a) values (631,22);
+insert into t (id,a) values (631,23);
+insert into t (id,a) values (631,24);
+insert into t (id,a) values (631,25);
+insert into t (id,a) values (631,26);
+insert into t (id,a) values (631,27);
+insert into t (id,a) values (631,28);
+insert into t (id,a) values (631,29);
+insert into t (id,a) values (631,30);
+insert into t (id,a) values (631,31);
+insert into t (id,a) values (631,32);
+insert into t (id,a) values (631,33);
+insert into t (id,a) values (631,34);
+insert into t (id,a) values (631,35);
+insert into t (id,a) values (631,36);
+insert into t (id,a) values (631,37);
+insert into t (id,a) values (631,38);
+insert into t (id,a) values (631,39);
+insert into t (id,a) values (631,40);
+insert into t (id,a) values (631,41);
+insert into t (id,a) values (631,42);
+insert into t (id,a) values (631,43);
+insert into t (id,a) values (631,44);
+insert into t (id,a) values (631,45);
+insert into t (id,a) values (631,46);
+insert into t (id,a) values (631,47);
+insert into t (id,a) values (631,48);
+insert into t (id,a) values (631,49);
+insert into t (id,a) values (631,50);
+insert into t (id,a) values (631,51);
+insert into t (id,a) values (631,52);
+insert into t (id,a) values (631,53);
+insert into t (id,a) values (631,54);
+insert into t (id,a) values (631,55);
+insert into t (id,a) values (631,56);
+insert into t (id,a) values (631,57);
+insert into t (id,a) values (631,58);
+insert into t (id,a) values (631,59);
+insert into t (id,a) values (631,60);
+insert into t (id,a) values (631,61);
+insert into t (id,a) values (631,62);
+insert into t (id,a) values (631,63);
+insert into t (id,a) values (631,64);
+insert into t (id,a) values (631,65);
+insert into t (id,a) values (631,66);
+insert into t (id,a) values (631,67);
+insert into t (id,a) values (631,68);
+insert into t (id,a) values (631,69);
+insert into t (id,a) values (631,70);
+insert into t (id,a) values (631,71);
+insert into t (id,a) values (631,72);
+insert into t (id,a) values (631,73);
+insert into t (id,a) values (631,74);
+insert into t (id,a) values (631,75);
+insert into t (id,a) values (631,76);
+insert into t (id,a) values (631,77);
+insert into t (id,a) values (631,78);
+insert into t (id,a) values (631,79);
+insert into t (id,a) values (631,80);
+insert into t (id,a) values (631,81);
+insert into t (id,a) values (631,82);
+insert into t (id,a) values (631,83);
+insert into t (id,a) values (631,84);
+insert into t (id,a) values (631,85);
+insert into t (id,a) values (631,86);
+insert into t (id,a) values (631,87);
+insert into t (id,a) values (631,88);
+insert into t (id,a) values (631,89);
+insert into t (id,a) values (631,90);
+insert into t (id,a) values (631,91);
+insert into t (id,a) values (631,92);
+insert into t (id,a) values (631,93);
+insert into t (id,a) values (631,94);
+insert into t (id,a) values (631,95);
+insert into t (id,a) values (631,96);
+insert into t (id,a) values (631,97);
+insert into t (id,a) values (631,98);
+insert into t (id,a) values (631,99);
+insert into t (id,a) values (632,0);
+insert into t (id,a) values (632,1);
+insert into t (id,a) values (632,2);
+insert into t (id,a) values (632,3);
+insert into t (id,a) values (632,4);
+insert into t (id,a) values (632,5);
+insert into t (id,a) values (632,6);
+insert into t (id,a) values (632,7);
+insert into t (id,a) values (632,8);
+insert into t (id,a) values (632,9);
+insert into t (id,a) values (632,10);
+insert into t (id,a) values (632,11);
+insert into t (id,a) values (632,12);
+insert into t (id,a) values (632,13);
+insert into t (id,a) values (632,14);
+insert into t (id,a) values (632,15);
+insert into t (id,a) values (632,16);
+insert into t (id,a) values (632,17);
+insert into t (id,a) values (632,18);
+insert into t (id,a) values (632,19);
+insert into t (id,a) values (632,20);
+insert into t (id,a) values (632,21);
+insert into t (id,a) values (632,22);
+insert into t (id,a) values (632,23);
+insert into t (id,a) values (632,24);
+insert into t (id,a) values (632,25);
+insert into t (id,a) values (632,26);
+insert into t (id,a) values (632,27);
+insert into t (id,a) values (632,28);
+insert into t (id,a) values (632,29);
+insert into t (id,a) values (632,30);
+insert into t (id,a) values (632,31);
+insert into t (id,a) values (632,32);
+insert into t (id,a) values (632,33);
+insert into t (id,a) values (632,34);
+insert into t (id,a) values (632,35);
+insert into t (id,a) values (632,36);
+insert into t (id,a) values (632,37);
+insert into t (id,a) values (632,38);
+insert into t (id,a) values (632,39);
+insert into t (id,a) values (632,40);
+insert into t (id,a) values (632,41);
+insert into t (id,a) values (632,42);
+insert into t (id,a) values (632,43);
+insert into t (id,a) values (632,44);
+insert into t (id,a) values (632,45);
+insert into t (id,a) values (632,46);
+insert into t (id,a) values (632,47);
+insert into t (id,a) values (632,48);
+insert into t (id,a) values (632,49);
+insert into t (id,a) values (632,50);
+insert into t (id,a) values (632,51);
+insert into t (id,a) values (632,52);
+insert into t (id,a) values (632,53);
+insert into t (id,a) values (632,54);
+insert into t (id,a) values (632,55);
+insert into t (id,a) values (632,56);
+insert into t (id,a) values (632,57);
+insert into t (id,a) values (632,58);
+insert into t (id,a) values (632,59);
+insert into t (id,a) values (632,60);
+insert into t (id,a) values (632,61);
+insert into t (id,a) values (632,62);
+insert into t (id,a) values (632,63);
+insert into t (id,a) values (632,64);
+insert into t (id,a) values (632,65);
+insert into t (id,a) values (632,66);
+insert into t (id,a) values (632,67);
+insert into t (id,a) values (632,68);
+insert into t (id,a) values (632,69);
+insert into t (id,a) values (632,70);
+insert into t (id,a) values (632,71);
+insert into t (id,a) values (632,72);
+insert into t (id,a) values (632,73);
+insert into t (id,a) values (632,74);
+insert into t (id,a) values (632,75);
+insert into t (id,a) values (632,76);
+insert into t (id,a) values (632,77);
+insert into t (id,a) values (632,78);
+insert into t (id,a) values (632,79);
+insert into t (id,a) values (632,80);
+insert into t (id,a) values (632,81);
+insert into t (id,a) values (632,82);
+insert into t (id,a) values (632,83);
+insert into t (id,a) values (632,84);
+insert into t (id,a) values (632,85);
+insert into t (id,a) values (632,86);
+insert into t (id,a) values (632,87);
+insert into t (id,a) values (632,88);
+insert into t (id,a) values (632,89);
+insert into t (id,a) values (632,90);
+insert into t (id,a) values (632,91);
+insert into t (id,a) values (632,92);
+insert into t (id,a) values (632,93);
+insert into t (id,a) values (632,94);
+insert into t (id,a) values (632,95);
+insert into t (id,a) values (632,96);
+insert into t (id,a) values (632,97);
+insert into t (id,a) values (632,98);
+insert into t (id,a) values (632,99);
+insert into t (id,a) values (633,0);
+insert into t (id,a) values (633,1);
+insert into t (id,a) values (633,2);
+insert into t (id,a) values (633,3);
+insert into t (id,a) values (633,4);
+insert into t (id,a) values (633,5);
+insert into t (id,a) values (633,6);
+insert into t (id,a) values (633,7);
+insert into t (id,a) values (633,8);
+insert into t (id,a) values (633,9);
+insert into t (id,a) values (633,10);
+insert into t (id,a) values (633,11);
+insert into t (id,a) values (633,12);
+insert into t (id,a) values (633,13);
+insert into t (id,a) values (633,14);
+insert into t (id,a) values (633,15);
+insert into t (id,a) values (633,16);
+insert into t (id,a) values (633,17);
+insert into t (id,a) values (633,18);
+insert into t (id,a) values (633,19);
+insert into t (id,a) values (633,20);
+insert into t (id,a) values (633,21);
+insert into t (id,a) values (633,22);
+insert into t (id,a) values (633,23);
+insert into t (id,a) values (633,24);
+insert into t (id,a) values (633,25);
+insert into t (id,a) values (633,26);
+insert into t (id,a) values (633,27);
+insert into t (id,a) values (633,28);
+insert into t (id,a) values (633,29);
+insert into t (id,a) values (633,30);
+insert into t (id,a) values (633,31);
+insert into t (id,a) values (633,32);
+insert into t (id,a) values (633,33);
+insert into t (id,a) values (633,34);
+insert into t (id,a) values (633,35);
+insert into t (id,a) values (633,36);
+insert into t (id,a) values (633,37);
+insert into t (id,a) values (633,38);
+insert into t (id,a) values (633,39);
+insert into t (id,a) values (633,40);
+insert into t (id,a) values (633,41);
+insert into t (id,a) values (633,42);
+insert into t (id,a) values (633,43);
+insert into t (id,a) values (633,44);
+insert into t (id,a) values (633,45);
+insert into t (id,a) values (633,46);
+insert into t (id,a) values (633,47);
+insert into t (id,a) values (633,48);
+insert into t (id,a) values (633,49);
+insert into t (id,a) values (633,50);
+insert into t (id,a) values (633,51);
+insert into t (id,a) values (633,52);
+insert into t (id,a) values (633,53);
+insert into t (id,a) values (633,54);
+insert into t (id,a) values (633,55);
+insert into t (id,a) values (633,56);
+insert into t (id,a) values (633,57);
+insert into t (id,a) values (633,58);
+insert into t (id,a) values (633,59);
+insert into t (id,a) values (633,60);
+insert into t (id,a) values (633,61);
+insert into t (id,a) values (633,62);
+insert into t (id,a) values (633,63);
+insert into t (id,a) values (633,64);
+insert into t (id,a) values (633,65);
+insert into t (id,a) values (633,66);
+insert into t (id,a) values (633,67);
+insert into t (id,a) values (633,68);
+insert into t (id,a) values (633,69);
+insert into t (id,a) values (633,70);
+insert into t (id,a) values (633,71);
+insert into t (id,a) values (633,72);
+insert into t (id,a) values (633,73);
+insert into t (id,a) values (633,74);
+insert into t (id,a) values (633,75);
+insert into t (id,a) values (633,76);
+insert into t (id,a) values (633,77);
+insert into t (id,a) values (633,78);
+insert into t (id,a) values (633,79);
+insert into t (id,a) values (633,80);
+insert into t (id,a) values (633,81);
+insert into t (id,a) values (633,82);
+insert into t (id,a) values (633,83);
+insert into t (id,a) values (633,84);
+insert into t (id,a) values (633,85);
+insert into t (id,a) values (633,86);
+insert into t (id,a) values (633,87);
+insert into t (id,a) values (633,88);
+insert into t (id,a) values (633,89);
+insert into t (id,a) values (633,90);
+insert into t (id,a) values (633,91);
+insert into t (id,a) values (633,92);
+insert into t (id,a) values (633,93);
+insert into t (id,a) values (633,94);
+insert into t (id,a) values (633,95);
+insert into t (id,a) values (633,96);
+insert into t (id,a) values (633,97);
+insert into t (id,a) values (633,98);
+insert into t (id,a) values (633,99);
+insert into t (id,a) values (634,0);
+insert into t (id,a) values (634,1);
+insert into t (id,a) values (634,2);
+insert into t (id,a) values (634,3);
+insert into t (id,a) values (634,4);
+insert into t (id,a) values (634,5);
+insert into t (id,a) values (634,6);
+insert into t (id,a) values (634,7);
+insert into t (id,a) values (634,8);
+insert into t (id,a) values (634,9);
+insert into t (id,a) values (634,10);
+insert into t (id,a) values (634,11);
+insert into t (id,a) values (634,12);
+insert into t (id,a) values (634,13);
+insert into t (id,a) values (634,14);
+insert into t (id,a) values (634,15);
+insert into t (id,a) values (634,16);
+insert into t (id,a) values (634,17);
+insert into t (id,a) values (634,18);
+insert into t (id,a) values (634,19);
+insert into t (id,a) values (634,20);
+insert into t (id,a) values (634,21);
+insert into t (id,a) values (634,22);
+insert into t (id,a) values (634,23);
+insert into t (id,a) values (634,24);
+insert into t (id,a) values (634,25);
+insert into t (id,a) values (634,26);
+insert into t (id,a) values (634,27);
+insert into t (id,a) values (634,28);
+insert into t (id,a) values (634,29);
+insert into t (id,a) values (634,30);
+insert into t (id,a) values (634,31);
+insert into t (id,a) values (634,32);
+insert into t (id,a) values (634,33);
+insert into t (id,a) values (634,34);
+insert into t (id,a) values (634,35);
+insert into t (id,a) values (634,36);
+insert into t (id,a) values (634,37);
+insert into t (id,a) values (634,38);
+insert into t (id,a) values (634,39);
+insert into t (id,a) values (634,40);
+insert into t (id,a) values (634,41);
+insert into t (id,a) values (634,42);
+insert into t (id,a) values (634,43);
+insert into t (id,a) values (634,44);
+insert into t (id,a) values (634,45);
+insert into t (id,a) values (634,46);
+insert into t (id,a) values (634,47);
+insert into t (id,a) values (634,48);
+insert into t (id,a) values (634,49);
+insert into t (id,a) values (634,50);
+insert into t (id,a) values (634,51);
+insert into t (id,a) values (634,52);
+insert into t (id,a) values (634,53);
+insert into t (id,a) values (634,54);
+insert into t (id,a) values (634,55);
+insert into t (id,a) values (634,56);
+insert into t (id,a) values (634,57);
+insert into t (id,a) values (634,58);
+insert into t (id,a) values (634,59);
+insert into t (id,a) values (634,60);
+insert into t (id,a) values (634,61);
+insert into t (id,a) values (634,62);
+insert into t (id,a) values (634,63);
+insert into t (id,a) values (634,64);
+insert into t (id,a) values (634,65);
+insert into t (id,a) values (634,66);
+insert into t (id,a) values (634,67);
+insert into t (id,a) values (634,68);
+insert into t (id,a) values (634,69);
+insert into t (id,a) values (634,70);
+insert into t (id,a) values (634,71);
+insert into t (id,a) values (634,72);
+insert into t (id,a) values (634,73);
+insert into t (id,a) values (634,74);
+insert into t (id,a) values (634,75);
+insert into t (id,a) values (634,76);
+insert into t (id,a) values (634,77);
+insert into t (id,a) values (634,78);
+insert into t (id,a) values (634,79);
+insert into t (id,a) values (634,80);
+insert into t (id,a) values (634,81);
+insert into t (id,a) values (634,82);
+insert into t (id,a) values (634,83);
+insert into t (id,a) values (634,84);
+insert into t (id,a) values (634,85);
+insert into t (id,a) values (634,86);
+insert into t (id,a) values (634,87);
+insert into t (id,a) values (634,88);
+insert into t (id,a) values (634,89);
+insert into t (id,a) values (634,90);
+insert into t (id,a) values (634,91);
+insert into t (id,a) values (634,92);
+insert into t (id,a) values (634,93);
+insert into t (id,a) values (634,94);
+insert into t (id,a) values (634,95);
+insert into t (id,a) values (634,96);
+insert into t (id,a) values (634,97);
+insert into t (id,a) values (634,98);
+insert into t (id,a) values (634,99);
+insert into t (id,a) values (635,0);
+insert into t (id,a) values (635,1);
+insert into t (id,a) values (635,2);
+insert into t (id,a) values (635,3);
+insert into t (id,a) values (635,4);
+insert into t (id,a) values (635,5);
+insert into t (id,a) values (635,6);
+insert into t (id,a) values (635,7);
+insert into t (id,a) values (635,8);
+insert into t (id,a) values (635,9);
+insert into t (id,a) values (635,10);
+insert into t (id,a) values (635,11);
+insert into t (id,a) values (635,12);
+insert into t (id,a) values (635,13);
+insert into t (id,a) values (635,14);
+insert into t (id,a) values (635,15);
+insert into t (id,a) values (635,16);
+insert into t (id,a) values (635,17);
+insert into t (id,a) values (635,18);
+insert into t (id,a) values (635,19);
+insert into t (id,a) values (635,20);
+insert into t (id,a) values (635,21);
+insert into t (id,a) values (635,22);
+insert into t (id,a) values (635,23);
+insert into t (id,a) values (635,24);
+insert into t (id,a) values (635,25);
+insert into t (id,a) values (635,26);
+insert into t (id,a) values (635,27);
+insert into t (id,a) values (635,28);
+insert into t (id,a) values (635,29);
+insert into t (id,a) values (635,30);
+insert into t (id,a) values (635,31);
+insert into t (id,a) values (635,32);
+insert into t (id,a) values (635,33);
+insert into t (id,a) values (635,34);
+insert into t (id,a) values (635,35);
+insert into t (id,a) values (635,36);
+insert into t (id,a) values (635,37);
+insert into t (id,a) values (635,38);
+insert into t (id,a) values (635,39);
+insert into t (id,a) values (635,40);
+insert into t (id,a) values (635,41);
+insert into t (id,a) values (635,42);
+insert into t (id,a) values (635,43);
+insert into t (id,a) values (635,44);
+insert into t (id,a) values (635,45);
+insert into t (id,a) values (635,46);
+insert into t (id,a) values (635,47);
+insert into t (id,a) values (635,48);
+insert into t (id,a) values (635,49);
+insert into t (id,a) values (635,50);
+insert into t (id,a) values (635,51);
+insert into t (id,a) values (635,52);
+insert into t (id,a) values (635,53);
+insert into t (id,a) values (635,54);
+insert into t (id,a) values (635,55);
+insert into t (id,a) values (635,56);
+insert into t (id,a) values (635,57);
+insert into t (id,a) values (635,58);
+insert into t (id,a) values (635,59);
+insert into t (id,a) values (635,60);
+insert into t (id,a) values (635,61);
+insert into t (id,a) values (635,62);
+insert into t (id,a) values (635,63);
+insert into t (id,a) values (635,64);
+insert into t (id,a) values (635,65);
+insert into t (id,a) values (635,66);
+insert into t (id,a) values (635,67);
+insert into t (id,a) values (635,68);
+insert into t (id,a) values (635,69);
+insert into t (id,a) values (635,70);
+insert into t (id,a) values (635,71);
+insert into t (id,a) values (635,72);
+insert into t (id,a) values (635,73);
+insert into t (id,a) values (635,74);
+insert into t (id,a) values (635,75);
+insert into t (id,a) values (635,76);
+insert into t (id,a) values (635,77);
+insert into t (id,a) values (635,78);
+insert into t (id,a) values (635,79);
+insert into t (id,a) values (635,80);
+insert into t (id,a) values (635,81);
+insert into t (id,a) values (635,82);
+insert into t (id,a) values (635,83);
+insert into t (id,a) values (635,84);
+insert into t (id,a) values (635,85);
+insert into t (id,a) values (635,86);
+insert into t (id,a) values (635,87);
+insert into t (id,a) values (635,88);
+insert into t (id,a) values (635,89);
+insert into t (id,a) values (635,90);
+insert into t (id,a) values (635,91);
+insert into t (id,a) values (635,92);
+insert into t (id,a) values (635,93);
+insert into t (id,a) values (635,94);
+insert into t (id,a) values (635,95);
+insert into t (id,a) values (635,96);
+insert into t (id,a) values (635,97);
+insert into t (id,a) values (635,98);
+insert into t (id,a) values (635,99);
+insert into t (id,a) values (636,0);
+insert into t (id,a) values (636,1);
+insert into t (id,a) values (636,2);
+insert into t (id,a) values (636,3);
+insert into t (id,a) values (636,4);
+insert into t (id,a) values (636,5);
+insert into t (id,a) values (636,6);
+insert into t (id,a) values (636,7);
+insert into t (id,a) values (636,8);
+insert into t (id,a) values (636,9);
+insert into t (id,a) values (636,10);
+insert into t (id,a) values (636,11);
+insert into t (id,a) values (636,12);
+insert into t (id,a) values (636,13);
+insert into t (id,a) values (636,14);
+insert into t (id,a) values (636,15);
+insert into t (id,a) values (636,16);
+insert into t (id,a) values (636,17);
+insert into t (id,a) values (636,18);
+insert into t (id,a) values (636,19);
+insert into t (id,a) values (636,20);
+insert into t (id,a) values (636,21);
+insert into t (id,a) values (636,22);
+insert into t (id,a) values (636,23);
+insert into t (id,a) values (636,24);
+insert into t (id,a) values (636,25);
+insert into t (id,a) values (636,26);
+insert into t (id,a) values (636,27);
+insert into t (id,a) values (636,28);
+insert into t (id,a) values (636,29);
+insert into t (id,a) values (636,30);
+insert into t (id,a) values (636,31);
+insert into t (id,a) values (636,32);
+insert into t (id,a) values (636,33);
+insert into t (id,a) values (636,34);
+insert into t (id,a) values (636,35);
+insert into t (id,a) values (636,36);
+insert into t (id,a) values (636,37);
+insert into t (id,a) values (636,38);
+insert into t (id,a) values (636,39);
+insert into t (id,a) values (636,40);
+insert into t (id,a) values (636,41);
+insert into t (id,a) values (636,42);
+insert into t (id,a) values (636,43);
+insert into t (id,a) values (636,44);
+insert into t (id,a) values (636,45);
+insert into t (id,a) values (636,46);
+insert into t (id,a) values (636,47);
+insert into t (id,a) values (636,48);
+insert into t (id,a) values (636,49);
+insert into t (id,a) values (636,50);
+insert into t (id,a) values (636,51);
+insert into t (id,a) values (636,52);
+insert into t (id,a) values (636,53);
+insert into t (id,a) values (636,54);
+insert into t (id,a) values (636,55);
+insert into t (id,a) values (636,56);
+insert into t (id,a) values (636,57);
+insert into t (id,a) values (636,58);
+insert into t (id,a) values (636,59);
+insert into t (id,a) values (636,60);
+insert into t (id,a) values (636,61);
+insert into t (id,a) values (636,62);
+insert into t (id,a) values (636,63);
+insert into t (id,a) values (636,64);
+insert into t (id,a) values (636,65);
+insert into t (id,a) values (636,66);
+insert into t (id,a) values (636,67);
+insert into t (id,a) values (636,68);
+insert into t (id,a) values (636,69);
+insert into t (id,a) values (636,70);
+insert into t (id,a) values (636,71);
+insert into t (id,a) values (636,72);
+insert into t (id,a) values (636,73);
+insert into t (id,a) values (636,74);
+insert into t (id,a) values (636,75);
+insert into t (id,a) values (636,76);
+insert into t (id,a) values (636,77);
+insert into t (id,a) values (636,78);
+insert into t (id,a) values (636,79);
+insert into t (id,a) values (636,80);
+insert into t (id,a) values (636,81);
+insert into t (id,a) values (636,82);
+insert into t (id,a) values (636,83);
+insert into t (id,a) values (636,84);
+insert into t (id,a) values (636,85);
+insert into t (id,a) values (636,86);
+insert into t (id,a) values (636,87);
+insert into t (id,a) values (636,88);
+insert into t (id,a) values (636,89);
+insert into t (id,a) values (636,90);
+insert into t (id,a) values (636,91);
+insert into t (id,a) values (636,92);
+insert into t (id,a) values (636,93);
+insert into t (id,a) values (636,94);
+insert into t (id,a) values (636,95);
+insert into t (id,a) values (636,96);
+insert into t (id,a) values (636,97);
+insert into t (id,a) values (636,98);
+insert into t (id,a) values (636,99);
+insert into t (id,a) values (637,0);
+insert into t (id,a) values (637,1);
+insert into t (id,a) values (637,2);
+insert into t (id,a) values (637,3);
+insert into t (id,a) values (637,4);
+insert into t (id,a) values (637,5);
+insert into t (id,a) values (637,6);
+insert into t (id,a) values (637,7);
+insert into t (id,a) values (637,8);
+insert into t (id,a) values (637,9);
+insert into t (id,a) values (637,10);
+insert into t (id,a) values (637,11);
+insert into t (id,a) values (637,12);
+insert into t (id,a) values (637,13);
+insert into t (id,a) values (637,14);
+insert into t (id,a) values (637,15);
+insert into t (id,a) values (637,16);
+insert into t (id,a) values (637,17);
+insert into t (id,a) values (637,18);
+insert into t (id,a) values (637,19);
+insert into t (id,a) values (637,20);
+insert into t (id,a) values (637,21);
+insert into t (id,a) values (637,22);
+insert into t (id,a) values (637,23);
+insert into t (id,a) values (637,24);
+insert into t (id,a) values (637,25);
+insert into t (id,a) values (637,26);
+insert into t (id,a) values (637,27);
+insert into t (id,a) values (637,28);
+insert into t (id,a) values (637,29);
+insert into t (id,a) values (637,30);
+insert into t (id,a) values (637,31);
+insert into t (id,a) values (637,32);
+insert into t (id,a) values (637,33);
+insert into t (id,a) values (637,34);
+insert into t (id,a) values (637,35);
+insert into t (id,a) values (637,36);
+insert into t (id,a) values (637,37);
+insert into t (id,a) values (637,38);
+insert into t (id,a) values (637,39);
+insert into t (id,a) values (637,40);
+insert into t (id,a) values (637,41);
+insert into t (id,a) values (637,42);
+insert into t (id,a) values (637,43);
+insert into t (id,a) values (637,44);
+insert into t (id,a) values (637,45);
+insert into t (id,a) values (637,46);
+insert into t (id,a) values (637,47);
+insert into t (id,a) values (637,48);
+insert into t (id,a) values (637,49);
+insert into t (id,a) values (637,50);
+insert into t (id,a) values (637,51);
+insert into t (id,a) values (637,52);
+insert into t (id,a) values (637,53);
+insert into t (id,a) values (637,54);
+insert into t (id,a) values (637,55);
+insert into t (id,a) values (637,56);
+insert into t (id,a) values (637,57);
+insert into t (id,a) values (637,58);
+insert into t (id,a) values (637,59);
+insert into t (id,a) values (637,60);
+insert into t (id,a) values (637,61);
+insert into t (id,a) values (637,62);
+insert into t (id,a) values (637,63);
+insert into t (id,a) values (637,64);
+insert into t (id,a) values (637,65);
+insert into t (id,a) values (637,66);
+insert into t (id,a) values (637,67);
+insert into t (id,a) values (637,68);
+insert into t (id,a) values (637,69);
+insert into t (id,a) values (637,70);
+insert into t (id,a) values (637,71);
+insert into t (id,a) values (637,72);
+insert into t (id,a) values (637,73);
+insert into t (id,a) values (637,74);
+insert into t (id,a) values (637,75);
+insert into t (id,a) values (637,76);
+insert into t (id,a) values (637,77);
+insert into t (id,a) values (637,78);
+insert into t (id,a) values (637,79);
+insert into t (id,a) values (637,80);
+insert into t (id,a) values (637,81);
+insert into t (id,a) values (637,82);
+insert into t (id,a) values (637,83);
+insert into t (id,a) values (637,84);
+insert into t (id,a) values (637,85);
+insert into t (id,a) values (637,86);
+insert into t (id,a) values (637,87);
+insert into t (id,a) values (637,88);
+insert into t (id,a) values (637,89);
+insert into t (id,a) values (637,90);
+insert into t (id,a) values (637,91);
+insert into t (id,a) values (637,92);
+insert into t (id,a) values (637,93);
+insert into t (id,a) values (637,94);
+insert into t (id,a) values (637,95);
+insert into t (id,a) values (637,96);
+insert into t (id,a) values (637,97);
+insert into t (id,a) values (637,98);
+insert into t (id,a) values (637,99);
+insert into t (id,a) values (638,0);
+insert into t (id,a) values (638,1);
+insert into t (id,a) values (638,2);
+insert into t (id,a) values (638,3);
+insert into t (id,a) values (638,4);
+insert into t (id,a) values (638,5);
+insert into t (id,a) values (638,6);
+insert into t (id,a) values (638,7);
+insert into t (id,a) values (638,8);
+insert into t (id,a) values (638,9);
+insert into t (id,a) values (638,10);
+insert into t (id,a) values (638,11);
+insert into t (id,a) values (638,12);
+insert into t (id,a) values (638,13);
+insert into t (id,a) values (638,14);
+insert into t (id,a) values (638,15);
+insert into t (id,a) values (638,16);
+insert into t (id,a) values (638,17);
+insert into t (id,a) values (638,18);
+insert into t (id,a) values (638,19);
+insert into t (id,a) values (638,20);
+insert into t (id,a) values (638,21);
+insert into t (id,a) values (638,22);
+insert into t (id,a) values (638,23);
+insert into t (id,a) values (638,24);
+insert into t (id,a) values (638,25);
+insert into t (id,a) values (638,26);
+insert into t (id,a) values (638,27);
+insert into t (id,a) values (638,28);
+insert into t (id,a) values (638,29);
+insert into t (id,a) values (638,30);
+insert into t (id,a) values (638,31);
+insert into t (id,a) values (638,32);
+insert into t (id,a) values (638,33);
+insert into t (id,a) values (638,34);
+insert into t (id,a) values (638,35);
+insert into t (id,a) values (638,36);
+insert into t (id,a) values (638,37);
+insert into t (id,a) values (638,38);
+insert into t (id,a) values (638,39);
+insert into t (id,a) values (638,40);
+insert into t (id,a) values (638,41);
+insert into t (id,a) values (638,42);
+insert into t (id,a) values (638,43);
+insert into t (id,a) values (638,44);
+insert into t (id,a) values (638,45);
+insert into t (id,a) values (638,46);
+insert into t (id,a) values (638,47);
+insert into t (id,a) values (638,48);
+insert into t (id,a) values (638,49);
+insert into t (id,a) values (638,50);
+insert into t (id,a) values (638,51);
+insert into t (id,a) values (638,52);
+insert into t (id,a) values (638,53);
+insert into t (id,a) values (638,54);
+insert into t (id,a) values (638,55);
+insert into t (id,a) values (638,56);
+insert into t (id,a) values (638,57);
+insert into t (id,a) values (638,58);
+insert into t (id,a) values (638,59);
+insert into t (id,a) values (638,60);
+insert into t (id,a) values (638,61);
+insert into t (id,a) values (638,62);
+insert into t (id,a) values (638,63);
+insert into t (id,a) values (638,64);
+insert into t (id,a) values (638,65);
+insert into t (id,a) values (638,66);
+insert into t (id,a) values (638,67);
+insert into t (id,a) values (638,68);
+insert into t (id,a) values (638,69);
+insert into t (id,a) values (638,70);
+insert into t (id,a) values (638,71);
+insert into t (id,a) values (638,72);
+insert into t (id,a) values (638,73);
+insert into t (id,a) values (638,74);
+insert into t (id,a) values (638,75);
+insert into t (id,a) values (638,76);
+insert into t (id,a) values (638,77);
+insert into t (id,a) values (638,78);
+insert into t (id,a) values (638,79);
+insert into t (id,a) values (638,80);
+insert into t (id,a) values (638,81);
+insert into t (id,a) values (638,82);
+insert into t (id,a) values (638,83);
+insert into t (id,a) values (638,84);
+insert into t (id,a) values (638,85);
+insert into t (id,a) values (638,86);
+insert into t (id,a) values (638,87);
+insert into t (id,a) values (638,88);
+insert into t (id,a) values (638,89);
+insert into t (id,a) values (638,90);
+insert into t (id,a) values (638,91);
+insert into t (id,a) values (638,92);
+insert into t (id,a) values (638,93);
+insert into t (id,a) values (638,94);
+insert into t (id,a) values (638,95);
+insert into t (id,a) values (638,96);
+insert into t (id,a) values (638,97);
+insert into t (id,a) values (638,98);
+insert into t (id,a) values (638,99);
+insert into t (id,a) values (639,0);
+insert into t (id,a) values (639,1);
+insert into t (id,a) values (639,2);
+insert into t (id,a) values (639,3);
+insert into t (id,a) values (639,4);
+insert into t (id,a) values (639,5);
+insert into t (id,a) values (639,6);
+insert into t (id,a) values (639,7);
+insert into t (id,a) values (639,8);
+insert into t (id,a) values (639,9);
+insert into t (id,a) values (639,10);
+insert into t (id,a) values (639,11);
+insert into t (id,a) values (639,12);
+insert into t (id,a) values (639,13);
+insert into t (id,a) values (639,14);
+insert into t (id,a) values (639,15);
+insert into t (id,a) values (639,16);
+insert into t (id,a) values (639,17);
+insert into t (id,a) values (639,18);
+insert into t (id,a) values (639,19);
+insert into t (id,a) values (639,20);
+insert into t (id,a) values (639,21);
+insert into t (id,a) values (639,22);
+insert into t (id,a) values (639,23);
+insert into t (id,a) values (639,24);
+insert into t (id,a) values (639,25);
+insert into t (id,a) values (639,26);
+insert into t (id,a) values (639,27);
+insert into t (id,a) values (639,28);
+insert into t (id,a) values (639,29);
+insert into t (id,a) values (639,30);
+insert into t (id,a) values (639,31);
+insert into t (id,a) values (639,32);
+insert into t (id,a) values (639,33);
+insert into t (id,a) values (639,34);
+insert into t (id,a) values (639,35);
+insert into t (id,a) values (639,36);
+insert into t (id,a) values (639,37);
+insert into t (id,a) values (639,38);
+insert into t (id,a) values (639,39);
+insert into t (id,a) values (639,40);
+insert into t (id,a) values (639,41);
+insert into t (id,a) values (639,42);
+insert into t (id,a) values (639,43);
+insert into t (id,a) values (639,44);
+insert into t (id,a) values (639,45);
+insert into t (id,a) values (639,46);
+insert into t (id,a) values (639,47);
+insert into t (id,a) values (639,48);
+insert into t (id,a) values (639,49);
+insert into t (id,a) values (639,50);
+insert into t (id,a) values (639,51);
+insert into t (id,a) values (639,52);
+insert into t (id,a) values (639,53);
+insert into t (id,a) values (639,54);
+insert into t (id,a) values (639,55);
+insert into t (id,a) values (639,56);
+insert into t (id,a) values (639,57);
+insert into t (id,a) values (639,58);
+insert into t (id,a) values (639,59);
+insert into t (id,a) values (639,60);
+insert into t (id,a) values (639,61);
+insert into t (id,a) values (639,62);
+insert into t (id,a) values (639,63);
+insert into t (id,a) values (639,64);
+insert into t (id,a) values (639,65);
+insert into t (id,a) values (639,66);
+insert into t (id,a) values (639,67);
+insert into t (id,a) values (639,68);
+insert into t (id,a) values (639,69);
+insert into t (id,a) values (639,70);
+insert into t (id,a) values (639,71);
+insert into t (id,a) values (639,72);
+insert into t (id,a) values (639,73);
+insert into t (id,a) values (639,74);
+insert into t (id,a) values (639,75);
+insert into t (id,a) values (639,76);
+insert into t (id,a) values (639,77);
+insert into t (id,a) values (639,78);
+insert into t (id,a) values (639,79);
+insert into t (id,a) values (639,80);
+insert into t (id,a) values (639,81);
+insert into t (id,a) values (639,82);
+insert into t (id,a) values (639,83);
+insert into t (id,a) values (639,84);
+insert into t (id,a) values (639,85);
+insert into t (id,a) values (639,86);
+insert into t (id,a) values (639,87);
+insert into t (id,a) values (639,88);
+insert into t (id,a) values (639,89);
+insert into t (id,a) values (639,90);
+insert into t (id,a) values (639,91);
+insert into t (id,a) values (639,92);
+insert into t (id,a) values (639,93);
+insert into t (id,a) values (639,94);
+insert into t (id,a) values (639,95);
+insert into t (id,a) values (639,96);
+insert into t (id,a) values (639,97);
+insert into t (id,a) values (639,98);
+insert into t (id,a) values (639,99);
+insert into t (id,a) values (640,0);
+insert into t (id,a) values (640,1);
+insert into t (id,a) values (640,2);
+insert into t (id,a) values (640,3);
+insert into t (id,a) values (640,4);
+insert into t (id,a) values (640,5);
+insert into t (id,a) values (640,6);
+insert into t (id,a) values (640,7);
+insert into t (id,a) values (640,8);
+insert into t (id,a) values (640,9);
+insert into t (id,a) values (640,10);
+insert into t (id,a) values (640,11);
+insert into t (id,a) values (640,12);
+insert into t (id,a) values (640,13);
+insert into t (id,a) values (640,14);
+insert into t (id,a) values (640,15);
+insert into t (id,a) values (640,16);
+insert into t (id,a) values (640,17);
+insert into t (id,a) values (640,18);
+insert into t (id,a) values (640,19);
+insert into t (id,a) values (640,20);
+insert into t (id,a) values (640,21);
+insert into t (id,a) values (640,22);
+insert into t (id,a) values (640,23);
+insert into t (id,a) values (640,24);
+insert into t (id,a) values (640,25);
+insert into t (id,a) values (640,26);
+insert into t (id,a) values (640,27);
+insert into t (id,a) values (640,28);
+insert into t (id,a) values (640,29);
+insert into t (id,a) values (640,30);
+insert into t (id,a) values (640,31);
+insert into t (id,a) values (640,32);
+insert into t (id,a) values (640,33);
+insert into t (id,a) values (640,34);
+insert into t (id,a) values (640,35);
+insert into t (id,a) values (640,36);
+insert into t (id,a) values (640,37);
+insert into t (id,a) values (640,38);
+insert into t (id,a) values (640,39);
+insert into t (id,a) values (640,40);
+insert into t (id,a) values (640,41);
+insert into t (id,a) values (640,42);
+insert into t (id,a) values (640,43);
+insert into t (id,a) values (640,44);
+insert into t (id,a) values (640,45);
+insert into t (id,a) values (640,46);
+insert into t (id,a) values (640,47);
+insert into t (id,a) values (640,48);
+insert into t (id,a) values (640,49);
+insert into t (id,a) values (640,50);
+insert into t (id,a) values (640,51);
+insert into t (id,a) values (640,52);
+insert into t (id,a) values (640,53);
+insert into t (id,a) values (640,54);
+insert into t (id,a) values (640,55);
+insert into t (id,a) values (640,56);
+insert into t (id,a) values (640,57);
+insert into t (id,a) values (640,58);
+insert into t (id,a) values (640,59);
+insert into t (id,a) values (640,60);
+insert into t (id,a) values (640,61);
+insert into t (id,a) values (640,62);
+insert into t (id,a) values (640,63);
+insert into t (id,a) values (640,64);
+insert into t (id,a) values (640,65);
+insert into t (id,a) values (640,66);
+insert into t (id,a) values (640,67);
+insert into t (id,a) values (640,68);
+insert into t (id,a) values (640,69);
+insert into t (id,a) values (640,70);
+insert into t (id,a) values (640,71);
+insert into t (id,a) values (640,72);
+insert into t (id,a) values (640,73);
+insert into t (id,a) values (640,74);
+insert into t (id,a) values (640,75);
+insert into t (id,a) values (640,76);
+insert into t (id,a) values (640,77);
+insert into t (id,a) values (640,78);
+insert into t (id,a) values (640,79);
+insert into t (id,a) values (640,80);
+insert into t (id,a) values (640,81);
+insert into t (id,a) values (640,82);
+insert into t (id,a) values (640,83);
+insert into t (id,a) values (640,84);
+insert into t (id,a) values (640,85);
+insert into t (id,a) values (640,86);
+insert into t (id,a) values (640,87);
+insert into t (id,a) values (640,88);
+insert into t (id,a) values (640,89);
+insert into t (id,a) values (640,90);
+insert into t (id,a) values (640,91);
+insert into t (id,a) values (640,92);
+insert into t (id,a) values (640,93);
+insert into t (id,a) values (640,94);
+insert into t (id,a) values (640,95);
+insert into t (id,a) values (640,96);
+insert into t (id,a) values (640,97);
+insert into t (id,a) values (640,98);
+insert into t (id,a) values (640,99);
+insert into t (id,a) values (641,0);
+insert into t (id,a) values (641,1);
+insert into t (id,a) values (641,2);
+insert into t (id,a) values (641,3);
+insert into t (id,a) values (641,4);
+insert into t (id,a) values (641,5);
+insert into t (id,a) values (641,6);
+insert into t (id,a) values (641,7);
+insert into t (id,a) values (641,8);
+insert into t (id,a) values (641,9);
+insert into t (id,a) values (641,10);
+insert into t (id,a) values (641,11);
+insert into t (id,a) values (641,12);
+insert into t (id,a) values (641,13);
+insert into t (id,a) values (641,14);
+insert into t (id,a) values (641,15);
+insert into t (id,a) values (641,16);
+insert into t (id,a) values (641,17);
+insert into t (id,a) values (641,18);
+insert into t (id,a) values (641,19);
+insert into t (id,a) values (641,20);
+insert into t (id,a) values (641,21);
+insert into t (id,a) values (641,22);
+insert into t (id,a) values (641,23);
+insert into t (id,a) values (641,24);
+insert into t (id,a) values (641,25);
+insert into t (id,a) values (641,26);
+insert into t (id,a) values (641,27);
+insert into t (id,a) values (641,28);
+insert into t (id,a) values (641,29);
+insert into t (id,a) values (641,30);
+insert into t (id,a) values (641,31);
+insert into t (id,a) values (641,32);
+insert into t (id,a) values (641,33);
+insert into t (id,a) values (641,34);
+insert into t (id,a) values (641,35);
+insert into t (id,a) values (641,36);
+insert into t (id,a) values (641,37);
+insert into t (id,a) values (641,38);
+insert into t (id,a) values (641,39);
+insert into t (id,a) values (641,40);
+insert into t (id,a) values (641,41);
+insert into t (id,a) values (641,42);
+insert into t (id,a) values (641,43);
+insert into t (id,a) values (641,44);
+insert into t (id,a) values (641,45);
+insert into t (id,a) values (641,46);
+insert into t (id,a) values (641,47);
+insert into t (id,a) values (641,48);
+insert into t (id,a) values (641,49);
+insert into t (id,a) values (641,50);
+insert into t (id,a) values (641,51);
+insert into t (id,a) values (641,52);
+insert into t (id,a) values (641,53);
+insert into t (id,a) values (641,54);
+insert into t (id,a) values (641,55);
+insert into t (id,a) values (641,56);
+insert into t (id,a) values (641,57);
+insert into t (id,a) values (641,58);
+insert into t (id,a) values (641,59);
+insert into t (id,a) values (641,60);
+insert into t (id,a) values (641,61);
+insert into t (id,a) values (641,62);
+insert into t (id,a) values (641,63);
+insert into t (id,a) values (641,64);
+insert into t (id,a) values (641,65);
+insert into t (id,a) values (641,66);
+insert into t (id,a) values (641,67);
+insert into t (id,a) values (641,68);
+insert into t (id,a) values (641,69);
+insert into t (id,a) values (641,70);
+insert into t (id,a) values (641,71);
+insert into t (id,a) values (641,72);
+insert into t (id,a) values (641,73);
+insert into t (id,a) values (641,74);
+insert into t (id,a) values (641,75);
+insert into t (id,a) values (641,76);
+insert into t (id,a) values (641,77);
+insert into t (id,a) values (641,78);
+insert into t (id,a) values (641,79);
+insert into t (id,a) values (641,80);
+insert into t (id,a) values (641,81);
+insert into t (id,a) values (641,82);
+insert into t (id,a) values (641,83);
+insert into t (id,a) values (641,84);
+insert into t (id,a) values (641,85);
+insert into t (id,a) values (641,86);
+insert into t (id,a) values (641,87);
+insert into t (id,a) values (641,88);
+insert into t (id,a) values (641,89);
+insert into t (id,a) values (641,90);
+insert into t (id,a) values (641,91);
+insert into t (id,a) values (641,92);
+insert into t (id,a) values (641,93);
+insert into t (id,a) values (641,94);
+insert into t (id,a) values (641,95);
+insert into t (id,a) values (641,96);
+insert into t (id,a) values (641,97);
+insert into t (id,a) values (641,98);
+insert into t (id,a) values (641,99);
+insert into t (id,a) values (642,0);
+insert into t (id,a) values (642,1);
+insert into t (id,a) values (642,2);
+insert into t (id,a) values (642,3);
+insert into t (id,a) values (642,4);
+insert into t (id,a) values (642,5);
+insert into t (id,a) values (642,6);
+insert into t (id,a) values (642,7);
+insert into t (id,a) values (642,8);
+insert into t (id,a) values (642,9);
+insert into t (id,a) values (642,10);
+insert into t (id,a) values (642,11);
+insert into t (id,a) values (642,12);
+insert into t (id,a) values (642,13);
+insert into t (id,a) values (642,14);
+insert into t (id,a) values (642,15);
+insert into t (id,a) values (642,16);
+insert into t (id,a) values (642,17);
+insert into t (id,a) values (642,18);
+insert into t (id,a) values (642,19);
+insert into t (id,a) values (642,20);
+insert into t (id,a) values (642,21);
+insert into t (id,a) values (642,22);
+insert into t (id,a) values (642,23);
+insert into t (id,a) values (642,24);
+insert into t (id,a) values (642,25);
+insert into t (id,a) values (642,26);
+insert into t (id,a) values (642,27);
+insert into t (id,a) values (642,28);
+insert into t (id,a) values (642,29);
+insert into t (id,a) values (642,30);
+insert into t (id,a) values (642,31);
+insert into t (id,a) values (642,32);
+insert into t (id,a) values (642,33);
+insert into t (id,a) values (642,34);
+insert into t (id,a) values (642,35);
+insert into t (id,a) values (642,36);
+insert into t (id,a) values (642,37);
+insert into t (id,a) values (642,38);
+insert into t (id,a) values (642,39);
+insert into t (id,a) values (642,40);
+insert into t (id,a) values (642,41);
+insert into t (id,a) values (642,42);
+insert into t (id,a) values (642,43);
+insert into t (id,a) values (642,44);
+insert into t (id,a) values (642,45);
+insert into t (id,a) values (642,46);
+insert into t (id,a) values (642,47);
+insert into t (id,a) values (642,48);
+insert into t (id,a) values (642,49);
+insert into t (id,a) values (642,50);
+insert into t (id,a) values (642,51);
+insert into t (id,a) values (642,52);
+insert into t (id,a) values (642,53);
+insert into t (id,a) values (642,54);
+insert into t (id,a) values (642,55);
+insert into t (id,a) values (642,56);
+insert into t (id,a) values (642,57);
+insert into t (id,a) values (642,58);
+insert into t (id,a) values (642,59);
+insert into t (id,a) values (642,60);
+insert into t (id,a) values (642,61);
+insert into t (id,a) values (642,62);
+insert into t (id,a) values (642,63);
+insert into t (id,a) values (642,64);
+insert into t (id,a) values (642,65);
+insert into t (id,a) values (642,66);
+insert into t (id,a) values (642,67);
+insert into t (id,a) values (642,68);
+insert into t (id,a) values (642,69);
+insert into t (id,a) values (642,70);
+insert into t (id,a) values (642,71);
+insert into t (id,a) values (642,72);
+insert into t (id,a) values (642,73);
+insert into t (id,a) values (642,74);
+insert into t (id,a) values (642,75);
+insert into t (id,a) values (642,76);
+insert into t (id,a) values (642,77);
+insert into t (id,a) values (642,78);
+insert into t (id,a) values (642,79);
+insert into t (id,a) values (642,80);
+insert into t (id,a) values (642,81);
+insert into t (id,a) values (642,82);
+insert into t (id,a) values (642,83);
+insert into t (id,a) values (642,84);
+insert into t (id,a) values (642,85);
+insert into t (id,a) values (642,86);
+insert into t (id,a) values (642,87);
+insert into t (id,a) values (642,88);
+insert into t (id,a) values (642,89);
+insert into t (id,a) values (642,90);
+insert into t (id,a) values (642,91);
+insert into t (id,a) values (642,92);
+insert into t (id,a) values (642,93);
+insert into t (id,a) values (642,94);
+insert into t (id,a) values (642,95);
+insert into t (id,a) values (642,96);
+insert into t (id,a) values (642,97);
+insert into t (id,a) values (642,98);
+insert into t (id,a) values (642,99);
+insert into t (id,a) values (643,0);
+insert into t (id,a) values (643,1);
+insert into t (id,a) values (643,2);
+insert into t (id,a) values (643,3);
+insert into t (id,a) values (643,4);
+insert into t (id,a) values (643,5);
+insert into t (id,a) values (643,6);
+insert into t (id,a) values (643,7);
+insert into t (id,a) values (643,8);
+insert into t (id,a) values (643,9);
+insert into t (id,a) values (643,10);
+insert into t (id,a) values (643,11);
+insert into t (id,a) values (643,12);
+insert into t (id,a) values (643,13);
+insert into t (id,a) values (643,14);
+insert into t (id,a) values (643,15);
+insert into t (id,a) values (643,16);
+insert into t (id,a) values (643,17);
+insert into t (id,a) values (643,18);
+insert into t (id,a) values (643,19);
+insert into t (id,a) values (643,20);
+insert into t (id,a) values (643,21);
+insert into t (id,a) values (643,22);
+insert into t (id,a) values (643,23);
+insert into t (id,a) values (643,24);
+insert into t (id,a) values (643,25);
+insert into t (id,a) values (643,26);
+insert into t (id,a) values (643,27);
+insert into t (id,a) values (643,28);
+insert into t (id,a) values (643,29);
+insert into t (id,a) values (643,30);
+insert into t (id,a) values (643,31);
+insert into t (id,a) values (643,32);
+insert into t (id,a) values (643,33);
+insert into t (id,a) values (643,34);
+insert into t (id,a) values (643,35);
+insert into t (id,a) values (643,36);
+insert into t (id,a) values (643,37);
+insert into t (id,a) values (643,38);
+insert into t (id,a) values (643,39);
+insert into t (id,a) values (643,40);
+insert into t (id,a) values (643,41);
+insert into t (id,a) values (643,42);
+insert into t (id,a) values (643,43);
+insert into t (id,a) values (643,44);
+insert into t (id,a) values (643,45);
+insert into t (id,a) values (643,46);
+insert into t (id,a) values (643,47);
+insert into t (id,a) values (643,48);
+insert into t (id,a) values (643,49);
+insert into t (id,a) values (643,50);
+insert into t (id,a) values (643,51);
+insert into t (id,a) values (643,52);
+insert into t (id,a) values (643,53);
+insert into t (id,a) values (643,54);
+insert into t (id,a) values (643,55);
+insert into t (id,a) values (643,56);
+insert into t (id,a) values (643,57);
+insert into t (id,a) values (643,58);
+insert into t (id,a) values (643,59);
+insert into t (id,a) values (643,60);
+insert into t (id,a) values (643,61);
+insert into t (id,a) values (643,62);
+insert into t (id,a) values (643,63);
+insert into t (id,a) values (643,64);
+insert into t (id,a) values (643,65);
+insert into t (id,a) values (643,66);
+insert into t (id,a) values (643,67);
+insert into t (id,a) values (643,68);
+insert into t (id,a) values (643,69);
+insert into t (id,a) values (643,70);
+insert into t (id,a) values (643,71);
+insert into t (id,a) values (643,72);
+insert into t (id,a) values (643,73);
+insert into t (id,a) values (643,74);
+insert into t (id,a) values (643,75);
+insert into t (id,a) values (643,76);
+insert into t (id,a) values (643,77);
+insert into t (id,a) values (643,78);
+insert into t (id,a) values (643,79);
+insert into t (id,a) values (643,80);
+insert into t (id,a) values (643,81);
+insert into t (id,a) values (643,82);
+insert into t (id,a) values (643,83);
+insert into t (id,a) values (643,84);
+insert into t (id,a) values (643,85);
+insert into t (id,a) values (643,86);
+insert into t (id,a) values (643,87);
+insert into t (id,a) values (643,88);
+insert into t (id,a) values (643,89);
+insert into t (id,a) values (643,90);
+insert into t (id,a) values (643,91);
+insert into t (id,a) values (643,92);
+insert into t (id,a) values (643,93);
+insert into t (id,a) values (643,94);
+insert into t (id,a) values (643,95);
+insert into t (id,a) values (643,96);
+insert into t (id,a) values (643,97);
+insert into t (id,a) values (643,98);
+insert into t (id,a) values (643,99);
+insert into t (id,a) values (644,0);
+insert into t (id,a) values (644,1);
+insert into t (id,a) values (644,2);
+insert into t (id,a) values (644,3);
+insert into t (id,a) values (644,4);
+insert into t (id,a) values (644,5);
+insert into t (id,a) values (644,6);
+insert into t (id,a) values (644,7);
+insert into t (id,a) values (644,8);
+insert into t (id,a) values (644,9);
+insert into t (id,a) values (644,10);
+insert into t (id,a) values (644,11);
+insert into t (id,a) values (644,12);
+insert into t (id,a) values (644,13);
+insert into t (id,a) values (644,14);
+insert into t (id,a) values (644,15);
+insert into t (id,a) values (644,16);
+insert into t (id,a) values (644,17);
+insert into t (id,a) values (644,18);
+insert into t (id,a) values (644,19);
+insert into t (id,a) values (644,20);
+insert into t (id,a) values (644,21);
+insert into t (id,a) values (644,22);
+insert into t (id,a) values (644,23);
+insert into t (id,a) values (644,24);
+insert into t (id,a) values (644,25);
+insert into t (id,a) values (644,26);
+insert into t (id,a) values (644,27);
+insert into t (id,a) values (644,28);
+insert into t (id,a) values (644,29);
+insert into t (id,a) values (644,30);
+insert into t (id,a) values (644,31);
+insert into t (id,a) values (644,32);
+insert into t (id,a) values (644,33);
+insert into t (id,a) values (644,34);
+insert into t (id,a) values (644,35);
+insert into t (id,a) values (644,36);
+insert into t (id,a) values (644,37);
+insert into t (id,a) values (644,38);
+insert into t (id,a) values (644,39);
+insert into t (id,a) values (644,40);
+insert into t (id,a) values (644,41);
+insert into t (id,a) values (644,42);
+insert into t (id,a) values (644,43);
+insert into t (id,a) values (644,44);
+insert into t (id,a) values (644,45);
+insert into t (id,a) values (644,46);
+insert into t (id,a) values (644,47);
+insert into t (id,a) values (644,48);
+insert into t (id,a) values (644,49);
+insert into t (id,a) values (644,50);
+insert into t (id,a) values (644,51);
+insert into t (id,a) values (644,52);
+insert into t (id,a) values (644,53);
+insert into t (id,a) values (644,54);
+insert into t (id,a) values (644,55);
+insert into t (id,a) values (644,56);
+insert into t (id,a) values (644,57);
+insert into t (id,a) values (644,58);
+insert into t (id,a) values (644,59);
+insert into t (id,a) values (644,60);
+insert into t (id,a) values (644,61);
+insert into t (id,a) values (644,62);
+insert into t (id,a) values (644,63);
+insert into t (id,a) values (644,64);
+insert into t (id,a) values (644,65);
+insert into t (id,a) values (644,66);
+insert into t (id,a) values (644,67);
+insert into t (id,a) values (644,68);
+insert into t (id,a) values (644,69);
+insert into t (id,a) values (644,70);
+insert into t (id,a) values (644,71);
+insert into t (id,a) values (644,72);
+insert into t (id,a) values (644,73);
+insert into t (id,a) values (644,74);
+insert into t (id,a) values (644,75);
+insert into t (id,a) values (644,76);
+insert into t (id,a) values (644,77);
+insert into t (id,a) values (644,78);
+insert into t (id,a) values (644,79);
+insert into t (id,a) values (644,80);
+insert into t (id,a) values (644,81);
+insert into t (id,a) values (644,82);
+insert into t (id,a) values (644,83);
+insert into t (id,a) values (644,84);
+insert into t (id,a) values (644,85);
+insert into t (id,a) values (644,86);
+insert into t (id,a) values (644,87);
+insert into t (id,a) values (644,88);
+insert into t (id,a) values (644,89);
+insert into t (id,a) values (644,90);
+insert into t (id,a) values (644,91);
+insert into t (id,a) values (644,92);
+insert into t (id,a) values (644,93);
+insert into t (id,a) values (644,94);
+insert into t (id,a) values (644,95);
+insert into t (id,a) values (644,96);
+insert into t (id,a) values (644,97);
+insert into t (id,a) values (644,98);
+insert into t (id,a) values (644,99);
+insert into t (id,a) values (645,0);
+insert into t (id,a) values (645,1);
+insert into t (id,a) values (645,2);
+insert into t (id,a) values (645,3);
+insert into t (id,a) values (645,4);
+insert into t (id,a) values (645,5);
+insert into t (id,a) values (645,6);
+insert into t (id,a) values (645,7);
+insert into t (id,a) values (645,8);
+insert into t (id,a) values (645,9);
+insert into t (id,a) values (645,10);
+insert into t (id,a) values (645,11);
+insert into t (id,a) values (645,12);
+insert into t (id,a) values (645,13);
+insert into t (id,a) values (645,14);
+insert into t (id,a) values (645,15);
+insert into t (id,a) values (645,16);
+insert into t (id,a) values (645,17);
+insert into t (id,a) values (645,18);
+insert into t (id,a) values (645,19);
+insert into t (id,a) values (645,20);
+insert into t (id,a) values (645,21);
+insert into t (id,a) values (645,22);
+insert into t (id,a) values (645,23);
+insert into t (id,a) values (645,24);
+insert into t (id,a) values (645,25);
+insert into t (id,a) values (645,26);
+insert into t (id,a) values (645,27);
+insert into t (id,a) values (645,28);
+insert into t (id,a) values (645,29);
+insert into t (id,a) values (645,30);
+insert into t (id,a) values (645,31);
+insert into t (id,a) values (645,32);
+insert into t (id,a) values (645,33);
+insert into t (id,a) values (645,34);
+insert into t (id,a) values (645,35);
+insert into t (id,a) values (645,36);
+insert into t (id,a) values (645,37);
+insert into t (id,a) values (645,38);
+insert into t (id,a) values (645,39);
+insert into t (id,a) values (645,40);
+insert into t (id,a) values (645,41);
+insert into t (id,a) values (645,42);
+insert into t (id,a) values (645,43);
+insert into t (id,a) values (645,44);
+insert into t (id,a) values (645,45);
+insert into t (id,a) values (645,46);
+insert into t (id,a) values (645,47);
+insert into t (id,a) values (645,48);
+insert into t (id,a) values (645,49);
+insert into t (id,a) values (645,50);
+insert into t (id,a) values (645,51);
+insert into t (id,a) values (645,52);
+insert into t (id,a) values (645,53);
+insert into t (id,a) values (645,54);
+insert into t (id,a) values (645,55);
+insert into t (id,a) values (645,56);
+insert into t (id,a) values (645,57);
+insert into t (id,a) values (645,58);
+insert into t (id,a) values (645,59);
+insert into t (id,a) values (645,60);
+insert into t (id,a) values (645,61);
+insert into t (id,a) values (645,62);
+insert into t (id,a) values (645,63);
+insert into t (id,a) values (645,64);
+insert into t (id,a) values (645,65);
+insert into t (id,a) values (645,66);
+insert into t (id,a) values (645,67);
+insert into t (id,a) values (645,68);
+insert into t (id,a) values (645,69);
+insert into t (id,a) values (645,70);
+insert into t (id,a) values (645,71);
+insert into t (id,a) values (645,72);
+insert into t (id,a) values (645,73);
+insert into t (id,a) values (645,74);
+insert into t (id,a) values (645,75);
+insert into t (id,a) values (645,76);
+insert into t (id,a) values (645,77);
+insert into t (id,a) values (645,78);
+insert into t (id,a) values (645,79);
+insert into t (id,a) values (645,80);
+insert into t (id,a) values (645,81);
+insert into t (id,a) values (645,82);
+insert into t (id,a) values (645,83);
+insert into t (id,a) values (645,84);
+insert into t (id,a) values (645,85);
+insert into t (id,a) values (645,86);
+insert into t (id,a) values (645,87);
+insert into t (id,a) values (645,88);
+insert into t (id,a) values (645,89);
+insert into t (id,a) values (645,90);
+insert into t (id,a) values (645,91);
+insert into t (id,a) values (645,92);
+insert into t (id,a) values (645,93);
+insert into t (id,a) values (645,94);
+insert into t (id,a) values (645,95);
+insert into t (id,a) values (645,96);
+insert into t (id,a) values (645,97);
+insert into t (id,a) values (645,98);
+insert into t (id,a) values (645,99);
+insert into t (id,a) values (646,0);
+insert into t (id,a) values (646,1);
+insert into t (id,a) values (646,2);
+insert into t (id,a) values (646,3);
+insert into t (id,a) values (646,4);
+insert into t (id,a) values (646,5);
+insert into t (id,a) values (646,6);
+insert into t (id,a) values (646,7);
+insert into t (id,a) values (646,8);
+insert into t (id,a) values (646,9);
+insert into t (id,a) values (646,10);
+insert into t (id,a) values (646,11);
+insert into t (id,a) values (646,12);
+insert into t (id,a) values (646,13);
+insert into t (id,a) values (646,14);
+insert into t (id,a) values (646,15);
+insert into t (id,a) values (646,16);
+insert into t (id,a) values (646,17);
+insert into t (id,a) values (646,18);
+insert into t (id,a) values (646,19);
+insert into t (id,a) values (646,20);
+insert into t (id,a) values (646,21);
+insert into t (id,a) values (646,22);
+insert into t (id,a) values (646,23);
+insert into t (id,a) values (646,24);
+insert into t (id,a) values (646,25);
+insert into t (id,a) values (646,26);
+insert into t (id,a) values (646,27);
+insert into t (id,a) values (646,28);
+insert into t (id,a) values (646,29);
+insert into t (id,a) values (646,30);
+insert into t (id,a) values (646,31);
+insert into t (id,a) values (646,32);
+insert into t (id,a) values (646,33);
+insert into t (id,a) values (646,34);
+insert into t (id,a) values (646,35);
+insert into t (id,a) values (646,36);
+insert into t (id,a) values (646,37);
+insert into t (id,a) values (646,38);
+insert into t (id,a) values (646,39);
+insert into t (id,a) values (646,40);
+insert into t (id,a) values (646,41);
+insert into t (id,a) values (646,42);
+insert into t (id,a) values (646,43);
+insert into t (id,a) values (646,44);
+insert into t (id,a) values (646,45);
+insert into t (id,a) values (646,46);
+insert into t (id,a) values (646,47);
+insert into t (id,a) values (646,48);
+insert into t (id,a) values (646,49);
+insert into t (id,a) values (646,50);
+insert into t (id,a) values (646,51);
+insert into t (id,a) values (646,52);
+insert into t (id,a) values (646,53);
+insert into t (id,a) values (646,54);
+insert into t (id,a) values (646,55);
+insert into t (id,a) values (646,56);
+insert into t (id,a) values (646,57);
+insert into t (id,a) values (646,58);
+insert into t (id,a) values (646,59);
+insert into t (id,a) values (646,60);
+insert into t (id,a) values (646,61);
+insert into t (id,a) values (646,62);
+insert into t (id,a) values (646,63);
+insert into t (id,a) values (646,64);
+insert into t (id,a) values (646,65);
+insert into t (id,a) values (646,66);
+insert into t (id,a) values (646,67);
+insert into t (id,a) values (646,68);
+insert into t (id,a) values (646,69);
+insert into t (id,a) values (646,70);
+insert into t (id,a) values (646,71);
+insert into t (id,a) values (646,72);
+insert into t (id,a) values (646,73);
+insert into t (id,a) values (646,74);
+insert into t (id,a) values (646,75);
+insert into t (id,a) values (646,76);
+insert into t (id,a) values (646,77);
+insert into t (id,a) values (646,78);
+insert into t (id,a) values (646,79);
+insert into t (id,a) values (646,80);
+insert into t (id,a) values (646,81);
+insert into t (id,a) values (646,82);
+insert into t (id,a) values (646,83);
+insert into t (id,a) values (646,84);
+insert into t (id,a) values (646,85);
+insert into t (id,a) values (646,86);
+insert into t (id,a) values (646,87);
+insert into t (id,a) values (646,88);
+insert into t (id,a) values (646,89);
+insert into t (id,a) values (646,90);
+insert into t (id,a) values (646,91);
+insert into t (id,a) values (646,92);
+insert into t (id,a) values (646,93);
+insert into t (id,a) values (646,94);
+insert into t (id,a) values (646,95);
+insert into t (id,a) values (646,96);
+insert into t (id,a) values (646,97);
+insert into t (id,a) values (646,98);
+insert into t (id,a) values (646,99);
+insert into t (id,a) values (647,0);
+insert into t (id,a) values (647,1);
+insert into t (id,a) values (647,2);
+insert into t (id,a) values (647,3);
+insert into t (id,a) values (647,4);
+insert into t (id,a) values (647,5);
+insert into t (id,a) values (647,6);
+insert into t (id,a) values (647,7);
+insert into t (id,a) values (647,8);
+insert into t (id,a) values (647,9);
+insert into t (id,a) values (647,10);
+insert into t (id,a) values (647,11);
+insert into t (id,a) values (647,12);
+insert into t (id,a) values (647,13);
+insert into t (id,a) values (647,14);
+insert into t (id,a) values (647,15);
+insert into t (id,a) values (647,16);
+insert into t (id,a) values (647,17);
+insert into t (id,a) values (647,18);
+insert into t (id,a) values (647,19);
+insert into t (id,a) values (647,20);
+insert into t (id,a) values (647,21);
+insert into t (id,a) values (647,22);
+insert into t (id,a) values (647,23);
+insert into t (id,a) values (647,24);
+insert into t (id,a) values (647,25);
+insert into t (id,a) values (647,26);
+insert into t (id,a) values (647,27);
+insert into t (id,a) values (647,28);
+insert into t (id,a) values (647,29);
+insert into t (id,a) values (647,30);
+insert into t (id,a) values (647,31);
+insert into t (id,a) values (647,32);
+insert into t (id,a) values (647,33);
+insert into t (id,a) values (647,34);
+insert into t (id,a) values (647,35);
+insert into t (id,a) values (647,36);
+insert into t (id,a) values (647,37);
+insert into t (id,a) values (647,38);
+insert into t (id,a) values (647,39);
+insert into t (id,a) values (647,40);
+insert into t (id,a) values (647,41);
+insert into t (id,a) values (647,42);
+insert into t (id,a) values (647,43);
+insert into t (id,a) values (647,44);
+insert into t (id,a) values (647,45);
+insert into t (id,a) values (647,46);
+insert into t (id,a) values (647,47);
+insert into t (id,a) values (647,48);
+insert into t (id,a) values (647,49);
+insert into t (id,a) values (647,50);
+insert into t (id,a) values (647,51);
+insert into t (id,a) values (647,52);
+insert into t (id,a) values (647,53);
+insert into t (id,a) values (647,54);
+insert into t (id,a) values (647,55);
+insert into t (id,a) values (647,56);
+insert into t (id,a) values (647,57);
+insert into t (id,a) values (647,58);
+insert into t (id,a) values (647,59);
+insert into t (id,a) values (647,60);
+insert into t (id,a) values (647,61);
+insert into t (id,a) values (647,62);
+insert into t (id,a) values (647,63);
+insert into t (id,a) values (647,64);
+insert into t (id,a) values (647,65);
+insert into t (id,a) values (647,66);
+insert into t (id,a) values (647,67);
+insert into t (id,a) values (647,68);
+insert into t (id,a) values (647,69);
+insert into t (id,a) values (647,70);
+insert into t (id,a) values (647,71);
+insert into t (id,a) values (647,72);
+insert into t (id,a) values (647,73);
+insert into t (id,a) values (647,74);
+insert into t (id,a) values (647,75);
+insert into t (id,a) values (647,76);
+insert into t (id,a) values (647,77);
+insert into t (id,a) values (647,78);
+insert into t (id,a) values (647,79);
+insert into t (id,a) values (647,80);
+insert into t (id,a) values (647,81);
+insert into t (id,a) values (647,82);
+insert into t (id,a) values (647,83);
+insert into t (id,a) values (647,84);
+insert into t (id,a) values (647,85);
+insert into t (id,a) values (647,86);
+insert into t (id,a) values (647,87);
+insert into t (id,a) values (647,88);
+insert into t (id,a) values (647,89);
+insert into t (id,a) values (647,90);
+insert into t (id,a) values (647,91);
+insert into t (id,a) values (647,92);
+insert into t (id,a) values (647,93);
+insert into t (id,a) values (647,94);
+insert into t (id,a) values (647,95);
+insert into t (id,a) values (647,96);
+insert into t (id,a) values (647,97);
+insert into t (id,a) values (647,98);
+insert into t (id,a) values (647,99);
+insert into t (id,a) values (648,0);
+insert into t (id,a) values (648,1);
+insert into t (id,a) values (648,2);
+insert into t (id,a) values (648,3);
+insert into t (id,a) values (648,4);
+insert into t (id,a) values (648,5);
+insert into t (id,a) values (648,6);
+insert into t (id,a) values (648,7);
+insert into t (id,a) values (648,8);
+insert into t (id,a) values (648,9);
+insert into t (id,a) values (648,10);
+insert into t (id,a) values (648,11);
+insert into t (id,a) values (648,12);
+insert into t (id,a) values (648,13);
+insert into t (id,a) values (648,14);
+insert into t (id,a) values (648,15);
+insert into t (id,a) values (648,16);
+insert into t (id,a) values (648,17);
+insert into t (id,a) values (648,18);
+insert into t (id,a) values (648,19);
+insert into t (id,a) values (648,20);
+insert into t (id,a) values (648,21);
+insert into t (id,a) values (648,22);
+insert into t (id,a) values (648,23);
+insert into t (id,a) values (648,24);
+insert into t (id,a) values (648,25);
+insert into t (id,a) values (648,26);
+insert into t (id,a) values (648,27);
+insert into t (id,a) values (648,28);
+insert into t (id,a) values (648,29);
+insert into t (id,a) values (648,30);
+insert into t (id,a) values (648,31);
+insert into t (id,a) values (648,32);
+insert into t (id,a) values (648,33);
+insert into t (id,a) values (648,34);
+insert into t (id,a) values (648,35);
+insert into t (id,a) values (648,36);
+insert into t (id,a) values (648,37);
+insert into t (id,a) values (648,38);
+insert into t (id,a) values (648,39);
+insert into t (id,a) values (648,40);
+insert into t (id,a) values (648,41);
+insert into t (id,a) values (648,42);
+insert into t (id,a) values (648,43);
+insert into t (id,a) values (648,44);
+insert into t (id,a) values (648,45);
+insert into t (id,a) values (648,46);
+insert into t (id,a) values (648,47);
+insert into t (id,a) values (648,48);
+insert into t (id,a) values (648,49);
+insert into t (id,a) values (648,50);
+insert into t (id,a) values (648,51);
+insert into t (id,a) values (648,52);
+insert into t (id,a) values (648,53);
+insert into t (id,a) values (648,54);
+insert into t (id,a) values (648,55);
+insert into t (id,a) values (648,56);
+insert into t (id,a) values (648,57);
+insert into t (id,a) values (648,58);
+insert into t (id,a) values (648,59);
+insert into t (id,a) values (648,60);
+insert into t (id,a) values (648,61);
+insert into t (id,a) values (648,62);
+insert into t (id,a) values (648,63);
+insert into t (id,a) values (648,64);
+insert into t (id,a) values (648,65);
+insert into t (id,a) values (648,66);
+insert into t (id,a) values (648,67);
+insert into t (id,a) values (648,68);
+insert into t (id,a) values (648,69);
+insert into t (id,a) values (648,70);
+insert into t (id,a) values (648,71);
+insert into t (id,a) values (648,72);
+insert into t (id,a) values (648,73);
+insert into t (id,a) values (648,74);
+insert into t (id,a) values (648,75);
+insert into t (id,a) values (648,76);
+insert into t (id,a) values (648,77);
+insert into t (id,a) values (648,78);
+insert into t (id,a) values (648,79);
+insert into t (id,a) values (648,80);
+insert into t (id,a) values (648,81);
+insert into t (id,a) values (648,82);
+insert into t (id,a) values (648,83);
+insert into t (id,a) values (648,84);
+insert into t (id,a) values (648,85);
+insert into t (id,a) values (648,86);
+insert into t (id,a) values (648,87);
+insert into t (id,a) values (648,88);
+insert into t (id,a) values (648,89);
+insert into t (id,a) values (648,90);
+insert into t (id,a) values (648,91);
+insert into t (id,a) values (648,92);
+insert into t (id,a) values (648,93);
+insert into t (id,a) values (648,94);
+insert into t (id,a) values (648,95);
+insert into t (id,a) values (648,96);
+insert into t (id,a) values (648,97);
+insert into t (id,a) values (648,98);
+insert into t (id,a) values (648,99);
+insert into t (id,a) values (649,0);
+insert into t (id,a) values (649,1);
+insert into t (id,a) values (649,2);
+insert into t (id,a) values (649,3);
+insert into t (id,a) values (649,4);
+insert into t (id,a) values (649,5);
+insert into t (id,a) values (649,6);
+insert into t (id,a) values (649,7);
+insert into t (id,a) values (649,8);
+insert into t (id,a) values (649,9);
+insert into t (id,a) values (649,10);
+insert into t (id,a) values (649,11);
+insert into t (id,a) values (649,12);
+insert into t (id,a) values (649,13);
+insert into t (id,a) values (649,14);
+insert into t (id,a) values (649,15);
+insert into t (id,a) values (649,16);
+insert into t (id,a) values (649,17);
+insert into t (id,a) values (649,18);
+insert into t (id,a) values (649,19);
+insert into t (id,a) values (649,20);
+insert into t (id,a) values (649,21);
+insert into t (id,a) values (649,22);
+insert into t (id,a) values (649,23);
+insert into t (id,a) values (649,24);
+insert into t (id,a) values (649,25);
+insert into t (id,a) values (649,26);
+insert into t (id,a) values (649,27);
+insert into t (id,a) values (649,28);
+insert into t (id,a) values (649,29);
+insert into t (id,a) values (649,30);
+insert into t (id,a) values (649,31);
+insert into t (id,a) values (649,32);
+insert into t (id,a) values (649,33);
+insert into t (id,a) values (649,34);
+insert into t (id,a) values (649,35);
+insert into t (id,a) values (649,36);
+insert into t (id,a) values (649,37);
+insert into t (id,a) values (649,38);
+insert into t (id,a) values (649,39);
+insert into t (id,a) values (649,40);
+insert into t (id,a) values (649,41);
+insert into t (id,a) values (649,42);
+insert into t (id,a) values (649,43);
+insert into t (id,a) values (649,44);
+insert into t (id,a) values (649,45);
+insert into t (id,a) values (649,46);
+insert into t (id,a) values (649,47);
+insert into t (id,a) values (649,48);
+insert into t (id,a) values (649,49);
+insert into t (id,a) values (649,50);
+insert into t (id,a) values (649,51);
+insert into t (id,a) values (649,52);
+insert into t (id,a) values (649,53);
+insert into t (id,a) values (649,54);
+insert into t (id,a) values (649,55);
+insert into t (id,a) values (649,56);
+insert into t (id,a) values (649,57);
+insert into t (id,a) values (649,58);
+insert into t (id,a) values (649,59);
+insert into t (id,a) values (649,60);
+insert into t (id,a) values (649,61);
+insert into t (id,a) values (649,62);
+insert into t (id,a) values (649,63);
+insert into t (id,a) values (649,64);
+insert into t (id,a) values (649,65);
+insert into t (id,a) values (649,66);
+insert into t (id,a) values (649,67);
+insert into t (id,a) values (649,68);
+insert into t (id,a) values (649,69);
+insert into t (id,a) values (649,70);
+insert into t (id,a) values (649,71);
+insert into t (id,a) values (649,72);
+insert into t (id,a) values (649,73);
+insert into t (id,a) values (649,74);
+insert into t (id,a) values (649,75);
+insert into t (id,a) values (649,76);
+insert into t (id,a) values (649,77);
+insert into t (id,a) values (649,78);
+insert into t (id,a) values (649,79);
+insert into t (id,a) values (649,80);
+insert into t (id,a) values (649,81);
+insert into t (id,a) values (649,82);
+insert into t (id,a) values (649,83);
+insert into t (id,a) values (649,84);
+insert into t (id,a) values (649,85);
+insert into t (id,a) values (649,86);
+insert into t (id,a) values (649,87);
+insert into t (id,a) values (649,88);
+insert into t (id,a) values (649,89);
+insert into t (id,a) values (649,90);
+insert into t (id,a) values (649,91);
+insert into t (id,a) values (649,92);
+insert into t (id,a) values (649,93);
+insert into t (id,a) values (649,94);
+insert into t (id,a) values (649,95);
+insert into t (id,a) values (649,96);
+insert into t (id,a) values (649,97);
+insert into t (id,a) values (649,98);
+insert into t (id,a) values (649,99);
+insert into t (id,a) values (650,0);
+insert into t (id,a) values (650,1);
+insert into t (id,a) values (650,2);
+insert into t (id,a) values (650,3);
+insert into t (id,a) values (650,4);
+insert into t (id,a) values (650,5);
+insert into t (id,a) values (650,6);
+insert into t (id,a) values (650,7);
+insert into t (id,a) values (650,8);
+insert into t (id,a) values (650,9);
+insert into t (id,a) values (650,10);
+insert into t (id,a) values (650,11);
+insert into t (id,a) values (650,12);
+insert into t (id,a) values (650,13);
+insert into t (id,a) values (650,14);
+insert into t (id,a) values (650,15);
+insert into t (id,a) values (650,16);
+insert into t (id,a) values (650,17);
+insert into t (id,a) values (650,18);
+insert into t (id,a) values (650,19);
+insert into t (id,a) values (650,20);
+insert into t (id,a) values (650,21);
+insert into t (id,a) values (650,22);
+insert into t (id,a) values (650,23);
+insert into t (id,a) values (650,24);
+insert into t (id,a) values (650,25);
+insert into t (id,a) values (650,26);
+insert into t (id,a) values (650,27);
+insert into t (id,a) values (650,28);
+insert into t (id,a) values (650,29);
+insert into t (id,a) values (650,30);
+insert into t (id,a) values (650,31);
+insert into t (id,a) values (650,32);
+insert into t (id,a) values (650,33);
+insert into t (id,a) values (650,34);
+insert into t (id,a) values (650,35);
+insert into t (id,a) values (650,36);
+insert into t (id,a) values (650,37);
+insert into t (id,a) values (650,38);
+insert into t (id,a) values (650,39);
+insert into t (id,a) values (650,40);
+insert into t (id,a) values (650,41);
+insert into t (id,a) values (650,42);
+insert into t (id,a) values (650,43);
+insert into t (id,a) values (650,44);
+insert into t (id,a) values (650,45);
+insert into t (id,a) values (650,46);
+insert into t (id,a) values (650,47);
+insert into t (id,a) values (650,48);
+insert into t (id,a) values (650,49);
+insert into t (id,a) values (650,50);
+insert into t (id,a) values (650,51);
+insert into t (id,a) values (650,52);
+insert into t (id,a) values (650,53);
+insert into t (id,a) values (650,54);
+insert into t (id,a) values (650,55);
+insert into t (id,a) values (650,56);
+insert into t (id,a) values (650,57);
+insert into t (id,a) values (650,58);
+insert into t (id,a) values (650,59);
+insert into t (id,a) values (650,60);
+insert into t (id,a) values (650,61);
+insert into t (id,a) values (650,62);
+insert into t (id,a) values (650,63);
+insert into t (id,a) values (650,64);
+insert into t (id,a) values (650,65);
+insert into t (id,a) values (650,66);
+insert into t (id,a) values (650,67);
+insert into t (id,a) values (650,68);
+insert into t (id,a) values (650,69);
+insert into t (id,a) values (650,70);
+insert into t (id,a) values (650,71);
+insert into t (id,a) values (650,72);
+insert into t (id,a) values (650,73);
+insert into t (id,a) values (650,74);
+insert into t (id,a) values (650,75);
+insert into t (id,a) values (650,76);
+insert into t (id,a) values (650,77);
+insert into t (id,a) values (650,78);
+insert into t (id,a) values (650,79);
+insert into t (id,a) values (650,80);
+insert into t (id,a) values (650,81);
+insert into t (id,a) values (650,82);
+insert into t (id,a) values (650,83);
+insert into t (id,a) values (650,84);
+insert into t (id,a) values (650,85);
+insert into t (id,a) values (650,86);
+insert into t (id,a) values (650,87);
+insert into t (id,a) values (650,88);
+insert into t (id,a) values (650,89);
+insert into t (id,a) values (650,90);
+insert into t (id,a) values (650,91);
+insert into t (id,a) values (650,92);
+insert into t (id,a) values (650,93);
+insert into t (id,a) values (650,94);
+insert into t (id,a) values (650,95);
+insert into t (id,a) values (650,96);
+insert into t (id,a) values (650,97);
+insert into t (id,a) values (650,98);
+insert into t (id,a) values (650,99);
+insert into t (id,a) values (651,0);
+insert into t (id,a) values (651,1);
+insert into t (id,a) values (651,2);
+insert into t (id,a) values (651,3);
+insert into t (id,a) values (651,4);
+insert into t (id,a) values (651,5);
+insert into t (id,a) values (651,6);
+insert into t (id,a) values (651,7);
+insert into t (id,a) values (651,8);
+insert into t (id,a) values (651,9);
+insert into t (id,a) values (651,10);
+insert into t (id,a) values (651,11);
+insert into t (id,a) values (651,12);
+insert into t (id,a) values (651,13);
+insert into t (id,a) values (651,14);
+insert into t (id,a) values (651,15);
+insert into t (id,a) values (651,16);
+insert into t (id,a) values (651,17);
+insert into t (id,a) values (651,18);
+insert into t (id,a) values (651,19);
+insert into t (id,a) values (651,20);
+insert into t (id,a) values (651,21);
+insert into t (id,a) values (651,22);
+insert into t (id,a) values (651,23);
+insert into t (id,a) values (651,24);
+insert into t (id,a) values (651,25);
+insert into t (id,a) values (651,26);
+insert into t (id,a) values (651,27);
+insert into t (id,a) values (651,28);
+insert into t (id,a) values (651,29);
+insert into t (id,a) values (651,30);
+insert into t (id,a) values (651,31);
+insert into t (id,a) values (651,32);
+insert into t (id,a) values (651,33);
+insert into t (id,a) values (651,34);
+insert into t (id,a) values (651,35);
+insert into t (id,a) values (651,36);
+insert into t (id,a) values (651,37);
+insert into t (id,a) values (651,38);
+insert into t (id,a) values (651,39);
+insert into t (id,a) values (651,40);
+insert into t (id,a) values (651,41);
+insert into t (id,a) values (651,42);
+insert into t (id,a) values (651,43);
+insert into t (id,a) values (651,44);
+insert into t (id,a) values (651,45);
+insert into t (id,a) values (651,46);
+insert into t (id,a) values (651,47);
+insert into t (id,a) values (651,48);
+insert into t (id,a) values (651,49);
+insert into t (id,a) values (651,50);
+insert into t (id,a) values (651,51);
+insert into t (id,a) values (651,52);
+insert into t (id,a) values (651,53);
+insert into t (id,a) values (651,54);
+insert into t (id,a) values (651,55);
+insert into t (id,a) values (651,56);
+insert into t (id,a) values (651,57);
+insert into t (id,a) values (651,58);
+insert into t (id,a) values (651,59);
+insert into t (id,a) values (651,60);
+insert into t (id,a) values (651,61);
+insert into t (id,a) values (651,62);
+insert into t (id,a) values (651,63);
+insert into t (id,a) values (651,64);
+insert into t (id,a) values (651,65);
+insert into t (id,a) values (651,66);
+insert into t (id,a) values (651,67);
+insert into t (id,a) values (651,68);
+insert into t (id,a) values (651,69);
+insert into t (id,a) values (651,70);
+insert into t (id,a) values (651,71);
+insert into t (id,a) values (651,72);
+insert into t (id,a) values (651,73);
+insert into t (id,a) values (651,74);
+insert into t (id,a) values (651,75);
+insert into t (id,a) values (651,76);
+insert into t (id,a) values (651,77);
+insert into t (id,a) values (651,78);
+insert into t (id,a) values (651,79);
+insert into t (id,a) values (651,80);
+insert into t (id,a) values (651,81);
+insert into t (id,a) values (651,82);
+insert into t (id,a) values (651,83);
+insert into t (id,a) values (651,84);
+insert into t (id,a) values (651,85);
+insert into t (id,a) values (651,86);
+insert into t (id,a) values (651,87);
+insert into t (id,a) values (651,88);
+insert into t (id,a) values (651,89);
+insert into t (id,a) values (651,90);
+insert into t (id,a) values (651,91);
+insert into t (id,a) values (651,92);
+insert into t (id,a) values (651,93);
+insert into t (id,a) values (651,94);
+insert into t (id,a) values (651,95);
+insert into t (id,a) values (651,96);
+insert into t (id,a) values (651,97);
+insert into t (id,a) values (651,98);
+insert into t (id,a) values (651,99);
+insert into t (id,a) values (652,0);
+insert into t (id,a) values (652,1);
+insert into t (id,a) values (652,2);
+insert into t (id,a) values (652,3);
+insert into t (id,a) values (652,4);
+insert into t (id,a) values (652,5);
+insert into t (id,a) values (652,6);
+insert into t (id,a) values (652,7);
+insert into t (id,a) values (652,8);
+insert into t (id,a) values (652,9);
+insert into t (id,a) values (652,10);
+insert into t (id,a) values (652,11);
+insert into t (id,a) values (652,12);
+insert into t (id,a) values (652,13);
+insert into t (id,a) values (652,14);
+insert into t (id,a) values (652,15);
+insert into t (id,a) values (652,16);
+insert into t (id,a) values (652,17);
+insert into t (id,a) values (652,18);
+insert into t (id,a) values (652,19);
+insert into t (id,a) values (652,20);
+insert into t (id,a) values (652,21);
+insert into t (id,a) values (652,22);
+insert into t (id,a) values (652,23);
+insert into t (id,a) values (652,24);
+insert into t (id,a) values (652,25);
+insert into t (id,a) values (652,26);
+insert into t (id,a) values (652,27);
+insert into t (id,a) values (652,28);
+insert into t (id,a) values (652,29);
+insert into t (id,a) values (652,30);
+insert into t (id,a) values (652,31);
+insert into t (id,a) values (652,32);
+insert into t (id,a) values (652,33);
+insert into t (id,a) values (652,34);
+insert into t (id,a) values (652,35);
+insert into t (id,a) values (652,36);
+insert into t (id,a) values (652,37);
+insert into t (id,a) values (652,38);
+insert into t (id,a) values (652,39);
+insert into t (id,a) values (652,40);
+insert into t (id,a) values (652,41);
+insert into t (id,a) values (652,42);
+insert into t (id,a) values (652,43);
+insert into t (id,a) values (652,44);
+insert into t (id,a) values (652,45);
+insert into t (id,a) values (652,46);
+insert into t (id,a) values (652,47);
+insert into t (id,a) values (652,48);
+insert into t (id,a) values (652,49);
+insert into t (id,a) values (652,50);
+insert into t (id,a) values (652,51);
+insert into t (id,a) values (652,52);
+insert into t (id,a) values (652,53);
+insert into t (id,a) values (652,54);
+insert into t (id,a) values (652,55);
+insert into t (id,a) values (652,56);
+insert into t (id,a) values (652,57);
+insert into t (id,a) values (652,58);
+insert into t (id,a) values (652,59);
+insert into t (id,a) values (652,60);
+insert into t (id,a) values (652,61);
+insert into t (id,a) values (652,62);
+insert into t (id,a) values (652,63);
+insert into t (id,a) values (652,64);
+insert into t (id,a) values (652,65);
+insert into t (id,a) values (652,66);
+insert into t (id,a) values (652,67);
+insert into t (id,a) values (652,68);
+insert into t (id,a) values (652,69);
+insert into t (id,a) values (652,70);
+insert into t (id,a) values (652,71);
+insert into t (id,a) values (652,72);
+insert into t (id,a) values (652,73);
+insert into t (id,a) values (652,74);
+insert into t (id,a) values (652,75);
+insert into t (id,a) values (652,76);
+insert into t (id,a) values (652,77);
+insert into t (id,a) values (652,78);
+insert into t (id,a) values (652,79);
+insert into t (id,a) values (652,80);
+insert into t (id,a) values (652,81);
+insert into t (id,a) values (652,82);
+insert into t (id,a) values (652,83);
+insert into t (id,a) values (652,84);
+insert into t (id,a) values (652,85);
+insert into t (id,a) values (652,86);
+insert into t (id,a) values (652,87);
+insert into t (id,a) values (652,88);
+insert into t (id,a) values (652,89);
+insert into t (id,a) values (652,90);
+insert into t (id,a) values (652,91);
+insert into t (id,a) values (652,92);
+insert into t (id,a) values (652,93);
+insert into t (id,a) values (652,94);
+insert into t (id,a) values (652,95);
+insert into t (id,a) values (652,96);
+insert into t (id,a) values (652,97);
+insert into t (id,a) values (652,98);
+insert into t (id,a) values (652,99);
+insert into t (id,a) values (653,0);
+insert into t (id,a) values (653,1);
+insert into t (id,a) values (653,2);
+insert into t (id,a) values (653,3);
+insert into t (id,a) values (653,4);
+insert into t (id,a) values (653,5);
+insert into t (id,a) values (653,6);
+insert into t (id,a) values (653,7);
+insert into t (id,a) values (653,8);
+insert into t (id,a) values (653,9);
+insert into t (id,a) values (653,10);
+insert into t (id,a) values (653,11);
+insert into t (id,a) values (653,12);
+insert into t (id,a) values (653,13);
+insert into t (id,a) values (653,14);
+insert into t (id,a) values (653,15);
+insert into t (id,a) values (653,16);
+insert into t (id,a) values (653,17);
+insert into t (id,a) values (653,18);
+insert into t (id,a) values (653,19);
+insert into t (id,a) values (653,20);
+insert into t (id,a) values (653,21);
+insert into t (id,a) values (653,22);
+insert into t (id,a) values (653,23);
+insert into t (id,a) values (653,24);
+insert into t (id,a) values (653,25);
+insert into t (id,a) values (653,26);
+insert into t (id,a) values (653,27);
+insert into t (id,a) values (653,28);
+insert into t (id,a) values (653,29);
+insert into t (id,a) values (653,30);
+insert into t (id,a) values (653,31);
+insert into t (id,a) values (653,32);
+insert into t (id,a) values (653,33);
+insert into t (id,a) values (653,34);
+insert into t (id,a) values (653,35);
+insert into t (id,a) values (653,36);
+insert into t (id,a) values (653,37);
+insert into t (id,a) values (653,38);
+insert into t (id,a) values (653,39);
+insert into t (id,a) values (653,40);
+insert into t (id,a) values (653,41);
+insert into t (id,a) values (653,42);
+insert into t (id,a) values (653,43);
+insert into t (id,a) values (653,44);
+insert into t (id,a) values (653,45);
+insert into t (id,a) values (653,46);
+insert into t (id,a) values (653,47);
+insert into t (id,a) values (653,48);
+insert into t (id,a) values (653,49);
+insert into t (id,a) values (653,50);
+insert into t (id,a) values (653,51);
+insert into t (id,a) values (653,52);
+insert into t (id,a) values (653,53);
+insert into t (id,a) values (653,54);
+insert into t (id,a) values (653,55);
+insert into t (id,a) values (653,56);
+insert into t (id,a) values (653,57);
+insert into t (id,a) values (653,58);
+insert into t (id,a) values (653,59);
+insert into t (id,a) values (653,60);
+insert into t (id,a) values (653,61);
+insert into t (id,a) values (653,62);
+insert into t (id,a) values (653,63);
+insert into t (id,a) values (653,64);
+insert into t (id,a) values (653,65);
+insert into t (id,a) values (653,66);
+insert into t (id,a) values (653,67);
+insert into t (id,a) values (653,68);
+insert into t (id,a) values (653,69);
+insert into t (id,a) values (653,70);
+insert into t (id,a) values (653,71);
+insert into t (id,a) values (653,72);
+insert into t (id,a) values (653,73);
+insert into t (id,a) values (653,74);
+insert into t (id,a) values (653,75);
+insert into t (id,a) values (653,76);
+insert into t (id,a) values (653,77);
+insert into t (id,a) values (653,78);
+insert into t (id,a) values (653,79);
+insert into t (id,a) values (653,80);
+insert into t (id,a) values (653,81);
+insert into t (id,a) values (653,82);
+insert into t (id,a) values (653,83);
+insert into t (id,a) values (653,84);
+insert into t (id,a) values (653,85);
+insert into t (id,a) values (653,86);
+insert into t (id,a) values (653,87);
+insert into t (id,a) values (653,88);
+insert into t (id,a) values (653,89);
+insert into t (id,a) values (653,90);
+insert into t (id,a) values (653,91);
+insert into t (id,a) values (653,92);
+insert into t (id,a) values (653,93);
+insert into t (id,a) values (653,94);
+insert into t (id,a) values (653,95);
+insert into t (id,a) values (653,96);
+insert into t (id,a) values (653,97);
+insert into t (id,a) values (653,98);
+insert into t (id,a) values (653,99);
+insert into t (id,a) values (654,0);
+insert into t (id,a) values (654,1);
+insert into t (id,a) values (654,2);
+insert into t (id,a) values (654,3);
+insert into t (id,a) values (654,4);
+insert into t (id,a) values (654,5);
+insert into t (id,a) values (654,6);
+insert into t (id,a) values (654,7);
+insert into t (id,a) values (654,8);
+insert into t (id,a) values (654,9);
+insert into t (id,a) values (654,10);
+insert into t (id,a) values (654,11);
+insert into t (id,a) values (654,12);
+insert into t (id,a) values (654,13);
+insert into t (id,a) values (654,14);
+insert into t (id,a) values (654,15);
+insert into t (id,a) values (654,16);
+insert into t (id,a) values (654,17);
+insert into t (id,a) values (654,18);
+insert into t (id,a) values (654,19);
+insert into t (id,a) values (654,20);
+insert into t (id,a) values (654,21);
+insert into t (id,a) values (654,22);
+insert into t (id,a) values (654,23);
+insert into t (id,a) values (654,24);
+insert into t (id,a) values (654,25);
+insert into t (id,a) values (654,26);
+insert into t (id,a) values (654,27);
+insert into t (id,a) values (654,28);
+insert into t (id,a) values (654,29);
+insert into t (id,a) values (654,30);
+insert into t (id,a) values (654,31);
+insert into t (id,a) values (654,32);
+insert into t (id,a) values (654,33);
+insert into t (id,a) values (654,34);
+insert into t (id,a) values (654,35);
+insert into t (id,a) values (654,36);
+insert into t (id,a) values (654,37);
+insert into t (id,a) values (654,38);
+insert into t (id,a) values (654,39);
+insert into t (id,a) values (654,40);
+insert into t (id,a) values (654,41);
+insert into t (id,a) values (654,42);
+insert into t (id,a) values (654,43);
+insert into t (id,a) values (654,44);
+insert into t (id,a) values (654,45);
+insert into t (id,a) values (654,46);
+insert into t (id,a) values (654,47);
+insert into t (id,a) values (654,48);
+insert into t (id,a) values (654,49);
+insert into t (id,a) values (654,50);
+insert into t (id,a) values (654,51);
+insert into t (id,a) values (654,52);
+insert into t (id,a) values (654,53);
+insert into t (id,a) values (654,54);
+insert into t (id,a) values (654,55);
+insert into t (id,a) values (654,56);
+insert into t (id,a) values (654,57);
+insert into t (id,a) values (654,58);
+insert into t (id,a) values (654,59);
+insert into t (id,a) values (654,60);
+insert into t (id,a) values (654,61);
+insert into t (id,a) values (654,62);
+insert into t (id,a) values (654,63);
+insert into t (id,a) values (654,64);
+insert into t (id,a) values (654,65);
+insert into t (id,a) values (654,66);
+insert into t (id,a) values (654,67);
+insert into t (id,a) values (654,68);
+insert into t (id,a) values (654,69);
+insert into t (id,a) values (654,70);
+insert into t (id,a) values (654,71);
+insert into t (id,a) values (654,72);
+insert into t (id,a) values (654,73);
+insert into t (id,a) values (654,74);
+insert into t (id,a) values (654,75);
+insert into t (id,a) values (654,76);
+insert into t (id,a) values (654,77);
+insert into t (id,a) values (654,78);
+insert into t (id,a) values (654,79);
+insert into t (id,a) values (654,80);
+insert into t (id,a) values (654,81);
+insert into t (id,a) values (654,82);
+insert into t (id,a) values (654,83);
+insert into t (id,a) values (654,84);
+insert into t (id,a) values (654,85);
+insert into t (id,a) values (654,86);
+insert into t (id,a) values (654,87);
+insert into t (id,a) values (654,88);
+insert into t (id,a) values (654,89);
+insert into t (id,a) values (654,90);
+insert into t (id,a) values (654,91);
+insert into t (id,a) values (654,92);
+insert into t (id,a) values (654,93);
+insert into t (id,a) values (654,94);
+insert into t (id,a) values (654,95);
+insert into t (id,a) values (654,96);
+insert into t (id,a) values (654,97);
+insert into t (id,a) values (654,98);
+insert into t (id,a) values (654,99);
+insert into t (id,a) values (655,0);
+insert into t (id,a) values (655,1);
+insert into t (id,a) values (655,2);
+insert into t (id,a) values (655,3);
+insert into t (id,a) values (655,4);
+insert into t (id,a) values (655,5);
+insert into t (id,a) values (655,6);
+insert into t (id,a) values (655,7);
+insert into t (id,a) values (655,8);
+insert into t (id,a) values (655,9);
+insert into t (id,a) values (655,10);
+insert into t (id,a) values (655,11);
+insert into t (id,a) values (655,12);
+insert into t (id,a) values (655,13);
+insert into t (id,a) values (655,14);
+insert into t (id,a) values (655,15);
+insert into t (id,a) values (655,16);
+insert into t (id,a) values (655,17);
+insert into t (id,a) values (655,18);
+insert into t (id,a) values (655,19);
+insert into t (id,a) values (655,20);
+insert into t (id,a) values (655,21);
+insert into t (id,a) values (655,22);
+insert into t (id,a) values (655,23);
+insert into t (id,a) values (655,24);
+insert into t (id,a) values (655,25);
+insert into t (id,a) values (655,26);
+insert into t (id,a) values (655,27);
+insert into t (id,a) values (655,28);
+insert into t (id,a) values (655,29);
+insert into t (id,a) values (655,30);
+insert into t (id,a) values (655,31);
+insert into t (id,a) values (655,32);
+insert into t (id,a) values (655,33);
+insert into t (id,a) values (655,34);
+insert into t (id,a) values (655,35);
+insert into t (id,a) values (655,36);
+insert into t (id,a) values (655,37);
+insert into t (id,a) values (655,38);
+insert into t (id,a) values (655,39);
+insert into t (id,a) values (655,40);
+insert into t (id,a) values (655,41);
+insert into t (id,a) values (655,42);
+insert into t (id,a) values (655,43);
+insert into t (id,a) values (655,44);
+insert into t (id,a) values (655,45);
+insert into t (id,a) values (655,46);
+insert into t (id,a) values (655,47);
+insert into t (id,a) values (655,48);
+insert into t (id,a) values (655,49);
+insert into t (id,a) values (655,50);
+insert into t (id,a) values (655,51);
+insert into t (id,a) values (655,52);
+insert into t (id,a) values (655,53);
+insert into t (id,a) values (655,54);
+insert into t (id,a) values (655,55);
+insert into t (id,a) values (655,56);
+insert into t (id,a) values (655,57);
+insert into t (id,a) values (655,58);
+insert into t (id,a) values (655,59);
+insert into t (id,a) values (655,60);
+insert into t (id,a) values (655,61);
+insert into t (id,a) values (655,62);
+insert into t (id,a) values (655,63);
+insert into t (id,a) values (655,64);
+insert into t (id,a) values (655,65);
+insert into t (id,a) values (655,66);
+insert into t (id,a) values (655,67);
+insert into t (id,a) values (655,68);
+insert into t (id,a) values (655,69);
+insert into t (id,a) values (655,70);
+insert into t (id,a) values (655,71);
+insert into t (id,a) values (655,72);
+insert into t (id,a) values (655,73);
+insert into t (id,a) values (655,74);
+insert into t (id,a) values (655,75);
+insert into t (id,a) values (655,76);
+insert into t (id,a) values (655,77);
+insert into t (id,a) values (655,78);
+insert into t (id,a) values (655,79);
+insert into t (id,a) values (655,80);
+insert into t (id,a) values (655,81);
+insert into t (id,a) values (655,82);
+insert into t (id,a) values (655,83);
+insert into t (id,a) values (655,84);
+insert into t (id,a) values (655,85);
+insert into t (id,a) values (655,86);
+insert into t (id,a) values (655,87);
+insert into t (id,a) values (655,88);
+insert into t (id,a) values (655,89);
+insert into t (id,a) values (655,90);
+insert into t (id,a) values (655,91);
+insert into t (id,a) values (655,92);
+insert into t (id,a) values (655,93);
+insert into t (id,a) values (655,94);
+insert into t (id,a) values (655,95);
+insert into t (id,a) values (655,96);
+insert into t (id,a) values (655,97);
+insert into t (id,a) values (655,98);
+insert into t (id,a) values (655,99);
+insert into t (id,a) values (656,0);
+insert into t (id,a) values (656,1);
+insert into t (id,a) values (656,2);
+insert into t (id,a) values (656,3);
+insert into t (id,a) values (656,4);
+insert into t (id,a) values (656,5);
+insert into t (id,a) values (656,6);
+insert into t (id,a) values (656,7);
+insert into t (id,a) values (656,8);
+insert into t (id,a) values (656,9);
+insert into t (id,a) values (656,10);
+insert into t (id,a) values (656,11);
+insert into t (id,a) values (656,12);
+insert into t (id,a) values (656,13);
+insert into t (id,a) values (656,14);
+insert into t (id,a) values (656,15);
+insert into t (id,a) values (656,16);
+insert into t (id,a) values (656,17);
+insert into t (id,a) values (656,18);
+insert into t (id,a) values (656,19);
+insert into t (id,a) values (656,20);
+insert into t (id,a) values (656,21);
+insert into t (id,a) values (656,22);
+insert into t (id,a) values (656,23);
+insert into t (id,a) values (656,24);
+insert into t (id,a) values (656,25);
+insert into t (id,a) values (656,26);
+insert into t (id,a) values (656,27);
+insert into t (id,a) values (656,28);
+insert into t (id,a) values (656,29);
+insert into t (id,a) values (656,30);
+insert into t (id,a) values (656,31);
+insert into t (id,a) values (656,32);
+insert into t (id,a) values (656,33);
+insert into t (id,a) values (656,34);
+insert into t (id,a) values (656,35);
+insert into t (id,a) values (656,36);
+insert into t (id,a) values (656,37);
+insert into t (id,a) values (656,38);
+insert into t (id,a) values (656,39);
+insert into t (id,a) values (656,40);
+insert into t (id,a) values (656,41);
+insert into t (id,a) values (656,42);
+insert into t (id,a) values (656,43);
+insert into t (id,a) values (656,44);
+insert into t (id,a) values (656,45);
+insert into t (id,a) values (656,46);
+insert into t (id,a) values (656,47);
+insert into t (id,a) values (656,48);
+insert into t (id,a) values (656,49);
+insert into t (id,a) values (656,50);
+insert into t (id,a) values (656,51);
+insert into t (id,a) values (656,52);
+insert into t (id,a) values (656,53);
+insert into t (id,a) values (656,54);
+insert into t (id,a) values (656,55);
+insert into t (id,a) values (656,56);
+insert into t (id,a) values (656,57);
+insert into t (id,a) values (656,58);
+insert into t (id,a) values (656,59);
+insert into t (id,a) values (656,60);
+insert into t (id,a) values (656,61);
+insert into t (id,a) values (656,62);
+insert into t (id,a) values (656,63);
+insert into t (id,a) values (656,64);
+insert into t (id,a) values (656,65);
+insert into t (id,a) values (656,66);
+insert into t (id,a) values (656,67);
+insert into t (id,a) values (656,68);
+insert into t (id,a) values (656,69);
+insert into t (id,a) values (656,70);
+insert into t (id,a) values (656,71);
+insert into t (id,a) values (656,72);
+insert into t (id,a) values (656,73);
+insert into t (id,a) values (656,74);
+insert into t (id,a) values (656,75);
+insert into t (id,a) values (656,76);
+insert into t (id,a) values (656,77);
+insert into t (id,a) values (656,78);
+insert into t (id,a) values (656,79);
+insert into t (id,a) values (656,80);
+insert into t (id,a) values (656,81);
+insert into t (id,a) values (656,82);
+insert into t (id,a) values (656,83);
+insert into t (id,a) values (656,84);
+insert into t (id,a) values (656,85);
+insert into t (id,a) values (656,86);
+insert into t (id,a) values (656,87);
+insert into t (id,a) values (656,88);
+insert into t (id,a) values (656,89);
+insert into t (id,a) values (656,90);
+insert into t (id,a) values (656,91);
+insert into t (id,a) values (656,92);
+insert into t (id,a) values (656,93);
+insert into t (id,a) values (656,94);
+insert into t (id,a) values (656,95);
+insert into t (id,a) values (656,96);
+insert into t (id,a) values (656,97);
+insert into t (id,a) values (656,98);
+insert into t (id,a) values (656,99);
+insert into t (id,a) values (657,0);
+insert into t (id,a) values (657,1);
+insert into t (id,a) values (657,2);
+insert into t (id,a) values (657,3);
+insert into t (id,a) values (657,4);
+insert into t (id,a) values (657,5);
+insert into t (id,a) values (657,6);
+insert into t (id,a) values (657,7);
+insert into t (id,a) values (657,8);
+insert into t (id,a) values (657,9);
+insert into t (id,a) values (657,10);
+insert into t (id,a) values (657,11);
+insert into t (id,a) values (657,12);
+insert into t (id,a) values (657,13);
+insert into t (id,a) values (657,14);
+insert into t (id,a) values (657,15);
+insert into t (id,a) values (657,16);
+insert into t (id,a) values (657,17);
+insert into t (id,a) values (657,18);
+insert into t (id,a) values (657,19);
+insert into t (id,a) values (657,20);
+insert into t (id,a) values (657,21);
+insert into t (id,a) values (657,22);
+insert into t (id,a) values (657,23);
+insert into t (id,a) values (657,24);
+insert into t (id,a) values (657,25);
+insert into t (id,a) values (657,26);
+insert into t (id,a) values (657,27);
+insert into t (id,a) values (657,28);
+insert into t (id,a) values (657,29);
+insert into t (id,a) values (657,30);
+insert into t (id,a) values (657,31);
+insert into t (id,a) values (657,32);
+insert into t (id,a) values (657,33);
+insert into t (id,a) values (657,34);
+insert into t (id,a) values (657,35);
+insert into t (id,a) values (657,36);
+insert into t (id,a) values (657,37);
+insert into t (id,a) values (657,38);
+insert into t (id,a) values (657,39);
+insert into t (id,a) values (657,40);
+insert into t (id,a) values (657,41);
+insert into t (id,a) values (657,42);
+insert into t (id,a) values (657,43);
+insert into t (id,a) values (657,44);
+insert into t (id,a) values (657,45);
+insert into t (id,a) values (657,46);
+insert into t (id,a) values (657,47);
+insert into t (id,a) values (657,48);
+insert into t (id,a) values (657,49);
+insert into t (id,a) values (657,50);
+insert into t (id,a) values (657,51);
+insert into t (id,a) values (657,52);
+insert into t (id,a) values (657,53);
+insert into t (id,a) values (657,54);
+insert into t (id,a) values (657,55);
+insert into t (id,a) values (657,56);
+insert into t (id,a) values (657,57);
+insert into t (id,a) values (657,58);
+insert into t (id,a) values (657,59);
+insert into t (id,a) values (657,60);
+insert into t (id,a) values (657,61);
+insert into t (id,a) values (657,62);
+insert into t (id,a) values (657,63);
+insert into t (id,a) values (657,64);
+insert into t (id,a) values (657,65);
+insert into t (id,a) values (657,66);
+insert into t (id,a) values (657,67);
+insert into t (id,a) values (657,68);
+insert into t (id,a) values (657,69);
+insert into t (id,a) values (657,70);
+insert into t (id,a) values (657,71);
+insert into t (id,a) values (657,72);
+insert into t (id,a) values (657,73);
+insert into t (id,a) values (657,74);
+insert into t (id,a) values (657,75);
+insert into t (id,a) values (657,76);
+insert into t (id,a) values (657,77);
+insert into t (id,a) values (657,78);
+insert into t (id,a) values (657,79);
+insert into t (id,a) values (657,80);
+insert into t (id,a) values (657,81);
+insert into t (id,a) values (657,82);
+insert into t (id,a) values (657,83);
+insert into t (id,a) values (657,84);
+insert into t (id,a) values (657,85);
+insert into t (id,a) values (657,86);
+insert into t (id,a) values (657,87);
+insert into t (id,a) values (657,88);
+insert into t (id,a) values (657,89);
+insert into t (id,a) values (657,90);
+insert into t (id,a) values (657,91);
+insert into t (id,a) values (657,92);
+insert into t (id,a) values (657,93);
+insert into t (id,a) values (657,94);
+insert into t (id,a) values (657,95);
+insert into t (id,a) values (657,96);
+insert into t (id,a) values (657,97);
+insert into t (id,a) values (657,98);
+insert into t (id,a) values (657,99);
+insert into t (id,a) values (658,0);
+insert into t (id,a) values (658,1);
+insert into t (id,a) values (658,2);
+insert into t (id,a) values (658,3);
+insert into t (id,a) values (658,4);
+insert into t (id,a) values (658,5);
+insert into t (id,a) values (658,6);
+insert into t (id,a) values (658,7);
+insert into t (id,a) values (658,8);
+insert into t (id,a) values (658,9);
+insert into t (id,a) values (658,10);
+insert into t (id,a) values (658,11);
+insert into t (id,a) values (658,12);
+insert into t (id,a) values (658,13);
+insert into t (id,a) values (658,14);
+insert into t (id,a) values (658,15);
+insert into t (id,a) values (658,16);
+insert into t (id,a) values (658,17);
+insert into t (id,a) values (658,18);
+insert into t (id,a) values (658,19);
+insert into t (id,a) values (658,20);
+insert into t (id,a) values (658,21);
+insert into t (id,a) values (658,22);
+insert into t (id,a) values (658,23);
+insert into t (id,a) values (658,24);
+insert into t (id,a) values (658,25);
+insert into t (id,a) values (658,26);
+insert into t (id,a) values (658,27);
+insert into t (id,a) values (658,28);
+insert into t (id,a) values (658,29);
+insert into t (id,a) values (658,30);
+insert into t (id,a) values (658,31);
+insert into t (id,a) values (658,32);
+insert into t (id,a) values (658,33);
+insert into t (id,a) values (658,34);
+insert into t (id,a) values (658,35);
+insert into t (id,a) values (658,36);
+insert into t (id,a) values (658,37);
+insert into t (id,a) values (658,38);
+insert into t (id,a) values (658,39);
+insert into t (id,a) values (658,40);
+insert into t (id,a) values (658,41);
+insert into t (id,a) values (658,42);
+insert into t (id,a) values (658,43);
+insert into t (id,a) values (658,44);
+insert into t (id,a) values (658,45);
+insert into t (id,a) values (658,46);
+insert into t (id,a) values (658,47);
+insert into t (id,a) values (658,48);
+insert into t (id,a) values (658,49);
+insert into t (id,a) values (658,50);
+insert into t (id,a) values (658,51);
+insert into t (id,a) values (658,52);
+insert into t (id,a) values (658,53);
+insert into t (id,a) values (658,54);
+insert into t (id,a) values (658,55);
+insert into t (id,a) values (658,56);
+insert into t (id,a) values (658,57);
+insert into t (id,a) values (658,58);
+insert into t (id,a) values (658,59);
+insert into t (id,a) values (658,60);
+insert into t (id,a) values (658,61);
+insert into t (id,a) values (658,62);
+insert into t (id,a) values (658,63);
+insert into t (id,a) values (658,64);
+insert into t (id,a) values (658,65);
+insert into t (id,a) values (658,66);
+insert into t (id,a) values (658,67);
+insert into t (id,a) values (658,68);
+insert into t (id,a) values (658,69);
+insert into t (id,a) values (658,70);
+insert into t (id,a) values (658,71);
+insert into t (id,a) values (658,72);
+insert into t (id,a) values (658,73);
+insert into t (id,a) values (658,74);
+insert into t (id,a) values (658,75);
+insert into t (id,a) values (658,76);
+insert into t (id,a) values (658,77);
+insert into t (id,a) values (658,78);
+insert into t (id,a) values (658,79);
+insert into t (id,a) values (658,80);
+insert into t (id,a) values (658,81);
+insert into t (id,a) values (658,82);
+insert into t (id,a) values (658,83);
+insert into t (id,a) values (658,84);
+insert into t (id,a) values (658,85);
+insert into t (id,a) values (658,86);
+insert into t (id,a) values (658,87);
+insert into t (id,a) values (658,88);
+insert into t (id,a) values (658,89);
+insert into t (id,a) values (658,90);
+insert into t (id,a) values (658,91);
+insert into t (id,a) values (658,92);
+insert into t (id,a) values (658,93);
+insert into t (id,a) values (658,94);
+insert into t (id,a) values (658,95);
+insert into t (id,a) values (658,96);
+insert into t (id,a) values (658,97);
+insert into t (id,a) values (658,98);
+insert into t (id,a) values (658,99);
+insert into t (id,a) values (659,0);
+insert into t (id,a) values (659,1);
+insert into t (id,a) values (659,2);
+insert into t (id,a) values (659,3);
+insert into t (id,a) values (659,4);
+insert into t (id,a) values (659,5);
+insert into t (id,a) values (659,6);
+insert into t (id,a) values (659,7);
+insert into t (id,a) values (659,8);
+insert into t (id,a) values (659,9);
+insert into t (id,a) values (659,10);
+insert into t (id,a) values (659,11);
+insert into t (id,a) values (659,12);
+insert into t (id,a) values (659,13);
+insert into t (id,a) values (659,14);
+insert into t (id,a) values (659,15);
+insert into t (id,a) values (659,16);
+insert into t (id,a) values (659,17);
+insert into t (id,a) values (659,18);
+insert into t (id,a) values (659,19);
+insert into t (id,a) values (659,20);
+insert into t (id,a) values (659,21);
+insert into t (id,a) values (659,22);
+insert into t (id,a) values (659,23);
+insert into t (id,a) values (659,24);
+insert into t (id,a) values (659,25);
+insert into t (id,a) values (659,26);
+insert into t (id,a) values (659,27);
+insert into t (id,a) values (659,28);
+insert into t (id,a) values (659,29);
+insert into t (id,a) values (659,30);
+insert into t (id,a) values (659,31);
+insert into t (id,a) values (659,32);
+insert into t (id,a) values (659,33);
+insert into t (id,a) values (659,34);
+insert into t (id,a) values (659,35);
+insert into t (id,a) values (659,36);
+insert into t (id,a) values (659,37);
+insert into t (id,a) values (659,38);
+insert into t (id,a) values (659,39);
+insert into t (id,a) values (659,40);
+insert into t (id,a) values (659,41);
+insert into t (id,a) values (659,42);
+insert into t (id,a) values (659,43);
+insert into t (id,a) values (659,44);
+insert into t (id,a) values (659,45);
+insert into t (id,a) values (659,46);
+insert into t (id,a) values (659,47);
+insert into t (id,a) values (659,48);
+insert into t (id,a) values (659,49);
+insert into t (id,a) values (659,50);
+insert into t (id,a) values (659,51);
+insert into t (id,a) values (659,52);
+insert into t (id,a) values (659,53);
+insert into t (id,a) values (659,54);
+insert into t (id,a) values (659,55);
+insert into t (id,a) values (659,56);
+insert into t (id,a) values (659,57);
+insert into t (id,a) values (659,58);
+insert into t (id,a) values (659,59);
+insert into t (id,a) values (659,60);
+insert into t (id,a) values (659,61);
+insert into t (id,a) values (659,62);
+insert into t (id,a) values (659,63);
+insert into t (id,a) values (659,64);
+insert into t (id,a) values (659,65);
+insert into t (id,a) values (659,66);
+insert into t (id,a) values (659,67);
+insert into t (id,a) values (659,68);
+insert into t (id,a) values (659,69);
+insert into t (id,a) values (659,70);
+insert into t (id,a) values (659,71);
+insert into t (id,a) values (659,72);
+insert into t (id,a) values (659,73);
+insert into t (id,a) values (659,74);
+insert into t (id,a) values (659,75);
+insert into t (id,a) values (659,76);
+insert into t (id,a) values (659,77);
+insert into t (id,a) values (659,78);
+insert into t (id,a) values (659,79);
+insert into t (id,a) values (659,80);
+insert into t (id,a) values (659,81);
+insert into t (id,a) values (659,82);
+insert into t (id,a) values (659,83);
+insert into t (id,a) values (659,84);
+insert into t (id,a) values (659,85);
+insert into t (id,a) values (659,86);
+insert into t (id,a) values (659,87);
+insert into t (id,a) values (659,88);
+insert into t (id,a) values (659,89);
+insert into t (id,a) values (659,90);
+insert into t (id,a) values (659,91);
+insert into t (id,a) values (659,92);
+insert into t (id,a) values (659,93);
+insert into t (id,a) values (659,94);
+insert into t (id,a) values (659,95);
+insert into t (id,a) values (659,96);
+insert into t (id,a) values (659,97);
+insert into t (id,a) values (659,98);
+insert into t (id,a) values (659,99);
+insert into t (id,a) values (660,0);
+insert into t (id,a) values (660,1);
+insert into t (id,a) values (660,2);
+insert into t (id,a) values (660,3);
+insert into t (id,a) values (660,4);
+insert into t (id,a) values (660,5);
+insert into t (id,a) values (660,6);
+insert into t (id,a) values (660,7);
+insert into t (id,a) values (660,8);
+insert into t (id,a) values (660,9);
+insert into t (id,a) values (660,10);
+insert into t (id,a) values (660,11);
+insert into t (id,a) values (660,12);
+insert into t (id,a) values (660,13);
+insert into t (id,a) values (660,14);
+insert into t (id,a) values (660,15);
+insert into t (id,a) values (660,16);
+insert into t (id,a) values (660,17);
+insert into t (id,a) values (660,18);
+insert into t (id,a) values (660,19);
+insert into t (id,a) values (660,20);
+insert into t (id,a) values (660,21);
+insert into t (id,a) values (660,22);
+insert into t (id,a) values (660,23);
+insert into t (id,a) values (660,24);
+insert into t (id,a) values (660,25);
+insert into t (id,a) values (660,26);
+insert into t (id,a) values (660,27);
+insert into t (id,a) values (660,28);
+insert into t (id,a) values (660,29);
+insert into t (id,a) values (660,30);
+insert into t (id,a) values (660,31);
+insert into t (id,a) values (660,32);
+insert into t (id,a) values (660,33);
+insert into t (id,a) values (660,34);
+insert into t (id,a) values (660,35);
+insert into t (id,a) values (660,36);
+insert into t (id,a) values (660,37);
+insert into t (id,a) values (660,38);
+insert into t (id,a) values (660,39);
+insert into t (id,a) values (660,40);
+insert into t (id,a) values (660,41);
+insert into t (id,a) values (660,42);
+insert into t (id,a) values (660,43);
+insert into t (id,a) values (660,44);
+insert into t (id,a) values (660,45);
+insert into t (id,a) values (660,46);
+insert into t (id,a) values (660,47);
+insert into t (id,a) values (660,48);
+insert into t (id,a) values (660,49);
+insert into t (id,a) values (660,50);
+insert into t (id,a) values (660,51);
+insert into t (id,a) values (660,52);
+insert into t (id,a) values (660,53);
+insert into t (id,a) values (660,54);
+insert into t (id,a) values (660,55);
+insert into t (id,a) values (660,56);
+insert into t (id,a) values (660,57);
+insert into t (id,a) values (660,58);
+insert into t (id,a) values (660,59);
+insert into t (id,a) values (660,60);
+insert into t (id,a) values (660,61);
+insert into t (id,a) values (660,62);
+insert into t (id,a) values (660,63);
+insert into t (id,a) values (660,64);
+insert into t (id,a) values (660,65);
+insert into t (id,a) values (660,66);
+insert into t (id,a) values (660,67);
+insert into t (id,a) values (660,68);
+insert into t (id,a) values (660,69);
+insert into t (id,a) values (660,70);
+insert into t (id,a) values (660,71);
+insert into t (id,a) values (660,72);
+insert into t (id,a) values (660,73);
+insert into t (id,a) values (660,74);
+insert into t (id,a) values (660,75);
+insert into t (id,a) values (660,76);
+insert into t (id,a) values (660,77);
+insert into t (id,a) values (660,78);
+insert into t (id,a) values (660,79);
+insert into t (id,a) values (660,80);
+insert into t (id,a) values (660,81);
+insert into t (id,a) values (660,82);
+insert into t (id,a) values (660,83);
+insert into t (id,a) values (660,84);
+insert into t (id,a) values (660,85);
+insert into t (id,a) values (660,86);
+insert into t (id,a) values (660,87);
+insert into t (id,a) values (660,88);
+insert into t (id,a) values (660,89);
+insert into t (id,a) values (660,90);
+insert into t (id,a) values (660,91);
+insert into t (id,a) values (660,92);
+insert into t (id,a) values (660,93);
+insert into t (id,a) values (660,94);
+insert into t (id,a) values (660,95);
+insert into t (id,a) values (660,96);
+insert into t (id,a) values (660,97);
+insert into t (id,a) values (660,98);
+insert into t (id,a) values (660,99);
+insert into t (id,a) values (661,0);
+insert into t (id,a) values (661,1);
+insert into t (id,a) values (661,2);
+insert into t (id,a) values (661,3);
+insert into t (id,a) values (661,4);
+insert into t (id,a) values (661,5);
+insert into t (id,a) values (661,6);
+insert into t (id,a) values (661,7);
+insert into t (id,a) values (661,8);
+insert into t (id,a) values (661,9);
+insert into t (id,a) values (661,10);
+insert into t (id,a) values (661,11);
+insert into t (id,a) values (661,12);
+insert into t (id,a) values (661,13);
+insert into t (id,a) values (661,14);
+insert into t (id,a) values (661,15);
+insert into t (id,a) values (661,16);
+insert into t (id,a) values (661,17);
+insert into t (id,a) values (661,18);
+insert into t (id,a) values (661,19);
+insert into t (id,a) values (661,20);
+insert into t (id,a) values (661,21);
+insert into t (id,a) values (661,22);
+insert into t (id,a) values (661,23);
+insert into t (id,a) values (661,24);
+insert into t (id,a) values (661,25);
+insert into t (id,a) values (661,26);
+insert into t (id,a) values (661,27);
+insert into t (id,a) values (661,28);
+insert into t (id,a) values (661,29);
+insert into t (id,a) values (661,30);
+insert into t (id,a) values (661,31);
+insert into t (id,a) values (661,32);
+insert into t (id,a) values (661,33);
+insert into t (id,a) values (661,34);
+insert into t (id,a) values (661,35);
+insert into t (id,a) values (661,36);
+insert into t (id,a) values (661,37);
+insert into t (id,a) values (661,38);
+insert into t (id,a) values (661,39);
+insert into t (id,a) values (661,40);
+insert into t (id,a) values (661,41);
+insert into t (id,a) values (661,42);
+insert into t (id,a) values (661,43);
+insert into t (id,a) values (661,44);
+insert into t (id,a) values (661,45);
+insert into t (id,a) values (661,46);
+insert into t (id,a) values (661,47);
+insert into t (id,a) values (661,48);
+insert into t (id,a) values (661,49);
+insert into t (id,a) values (661,50);
+insert into t (id,a) values (661,51);
+insert into t (id,a) values (661,52);
+insert into t (id,a) values (661,53);
+insert into t (id,a) values (661,54);
+insert into t (id,a) values (661,55);
+insert into t (id,a) values (661,56);
+insert into t (id,a) values (661,57);
+insert into t (id,a) values (661,58);
+insert into t (id,a) values (661,59);
+insert into t (id,a) values (661,60);
+insert into t (id,a) values (661,61);
+insert into t (id,a) values (661,62);
+insert into t (id,a) values (661,63);
+insert into t (id,a) values (661,64);
+insert into t (id,a) values (661,65);
+insert into t (id,a) values (661,66);
+insert into t (id,a) values (661,67);
+insert into t (id,a) values (661,68);
+insert into t (id,a) values (661,69);
+insert into t (id,a) values (661,70);
+insert into t (id,a) values (661,71);
+insert into t (id,a) values (661,72);
+insert into t (id,a) values (661,73);
+insert into t (id,a) values (661,74);
+insert into t (id,a) values (661,75);
+insert into t (id,a) values (661,76);
+insert into t (id,a) values (661,77);
+insert into t (id,a) values (661,78);
+insert into t (id,a) values (661,79);
+insert into t (id,a) values (661,80);
+insert into t (id,a) values (661,81);
+insert into t (id,a) values (661,82);
+insert into t (id,a) values (661,83);
+insert into t (id,a) values (661,84);
+insert into t (id,a) values (661,85);
+insert into t (id,a) values (661,86);
+insert into t (id,a) values (661,87);
+insert into t (id,a) values (661,88);
+insert into t (id,a) values (661,89);
+insert into t (id,a) values (661,90);
+insert into t (id,a) values (661,91);
+insert into t (id,a) values (661,92);
+insert into t (id,a) values (661,93);
+insert into t (id,a) values (661,94);
+insert into t (id,a) values (661,95);
+insert into t (id,a) values (661,96);
+insert into t (id,a) values (661,97);
+insert into t (id,a) values (661,98);
+insert into t (id,a) values (661,99);
+insert into t (id,a) values (662,0);
+insert into t (id,a) values (662,1);
+insert into t (id,a) values (662,2);
+insert into t (id,a) values (662,3);
+insert into t (id,a) values (662,4);
+insert into t (id,a) values (662,5);
+insert into t (id,a) values (662,6);
+insert into t (id,a) values (662,7);
+insert into t (id,a) values (662,8);
+insert into t (id,a) values (662,9);
+insert into t (id,a) values (662,10);
+insert into t (id,a) values (662,11);
+insert into t (id,a) values (662,12);
+insert into t (id,a) values (662,13);
+insert into t (id,a) values (662,14);
+insert into t (id,a) values (662,15);
+insert into t (id,a) values (662,16);
+insert into t (id,a) values (662,17);
+insert into t (id,a) values (662,18);
+insert into t (id,a) values (662,19);
+insert into t (id,a) values (662,20);
+insert into t (id,a) values (662,21);
+insert into t (id,a) values (662,22);
+insert into t (id,a) values (662,23);
+insert into t (id,a) values (662,24);
+insert into t (id,a) values (662,25);
+insert into t (id,a) values (662,26);
+insert into t (id,a) values (662,27);
+insert into t (id,a) values (662,28);
+insert into t (id,a) values (662,29);
+insert into t (id,a) values (662,30);
+insert into t (id,a) values (662,31);
+insert into t (id,a) values (662,32);
+insert into t (id,a) values (662,33);
+insert into t (id,a) values (662,34);
+insert into t (id,a) values (662,35);
+insert into t (id,a) values (662,36);
+insert into t (id,a) values (662,37);
+insert into t (id,a) values (662,38);
+insert into t (id,a) values (662,39);
+insert into t (id,a) values (662,40);
+insert into t (id,a) values (662,41);
+insert into t (id,a) values (662,42);
+insert into t (id,a) values (662,43);
+insert into t (id,a) values (662,44);
+insert into t (id,a) values (662,45);
+insert into t (id,a) values (662,46);
+insert into t (id,a) values (662,47);
+insert into t (id,a) values (662,48);
+insert into t (id,a) values (662,49);
+insert into t (id,a) values (662,50);
+insert into t (id,a) values (662,51);
+insert into t (id,a) values (662,52);
+insert into t (id,a) values (662,53);
+insert into t (id,a) values (662,54);
+insert into t (id,a) values (662,55);
+insert into t (id,a) values (662,56);
+insert into t (id,a) values (662,57);
+insert into t (id,a) values (662,58);
+insert into t (id,a) values (662,59);
+insert into t (id,a) values (662,60);
+insert into t (id,a) values (662,61);
+insert into t (id,a) values (662,62);
+insert into t (id,a) values (662,63);
+insert into t (id,a) values (662,64);
+insert into t (id,a) values (662,65);
+insert into t (id,a) values (662,66);
+insert into t (id,a) values (662,67);
+insert into t (id,a) values (662,68);
+insert into t (id,a) values (662,69);
+insert into t (id,a) values (662,70);
+insert into t (id,a) values (662,71);
+insert into t (id,a) values (662,72);
+insert into t (id,a) values (662,73);
+insert into t (id,a) values (662,74);
+insert into t (id,a) values (662,75);
+insert into t (id,a) values (662,76);
+insert into t (id,a) values (662,77);
+insert into t (id,a) values (662,78);
+insert into t (id,a) values (662,79);
+insert into t (id,a) values (662,80);
+insert into t (id,a) values (662,81);
+insert into t (id,a) values (662,82);
+insert into t (id,a) values (662,83);
+insert into t (id,a) values (662,84);
+insert into t (id,a) values (662,85);
+insert into t (id,a) values (662,86);
+insert into t (id,a) values (662,87);
+insert into t (id,a) values (662,88);
+insert into t (id,a) values (662,89);
+insert into t (id,a) values (662,90);
+insert into t (id,a) values (662,91);
+insert into t (id,a) values (662,92);
+insert into t (id,a) values (662,93);
+insert into t (id,a) values (662,94);
+insert into t (id,a) values (662,95);
+insert into t (id,a) values (662,96);
+insert into t (id,a) values (662,97);
+insert into t (id,a) values (662,98);
+insert into t (id,a) values (662,99);
+insert into t (id,a) values (663,0);
+insert into t (id,a) values (663,1);
+insert into t (id,a) values (663,2);
+insert into t (id,a) values (663,3);
+insert into t (id,a) values (663,4);
+insert into t (id,a) values (663,5);
+insert into t (id,a) values (663,6);
+insert into t (id,a) values (663,7);
+insert into t (id,a) values (663,8);
+insert into t (id,a) values (663,9);
+insert into t (id,a) values (663,10);
+insert into t (id,a) values (663,11);
+insert into t (id,a) values (663,12);
+insert into t (id,a) values (663,13);
+insert into t (id,a) values (663,14);
+insert into t (id,a) values (663,15);
+insert into t (id,a) values (663,16);
+insert into t (id,a) values (663,17);
+insert into t (id,a) values (663,18);
+insert into t (id,a) values (663,19);
+insert into t (id,a) values (663,20);
+insert into t (id,a) values (663,21);
+insert into t (id,a) values (663,22);
+insert into t (id,a) values (663,23);
+insert into t (id,a) values (663,24);
+insert into t (id,a) values (663,25);
+insert into t (id,a) values (663,26);
+insert into t (id,a) values (663,27);
+insert into t (id,a) values (663,28);
+insert into t (id,a) values (663,29);
+insert into t (id,a) values (663,30);
+insert into t (id,a) values (663,31);
+insert into t (id,a) values (663,32);
+insert into t (id,a) values (663,33);
+insert into t (id,a) values (663,34);
+insert into t (id,a) values (663,35);
+insert into t (id,a) values (663,36);
+insert into t (id,a) values (663,37);
+insert into t (id,a) values (663,38);
+insert into t (id,a) values (663,39);
+insert into t (id,a) values (663,40);
+insert into t (id,a) values (663,41);
+insert into t (id,a) values (663,42);
+insert into t (id,a) values (663,43);
+insert into t (id,a) values (663,44);
+insert into t (id,a) values (663,45);
+insert into t (id,a) values (663,46);
+insert into t (id,a) values (663,47);
+insert into t (id,a) values (663,48);
+insert into t (id,a) values (663,49);
+insert into t (id,a) values (663,50);
+insert into t (id,a) values (663,51);
+insert into t (id,a) values (663,52);
+insert into t (id,a) values (663,53);
+insert into t (id,a) values (663,54);
+insert into t (id,a) values (663,55);
+insert into t (id,a) values (663,56);
+insert into t (id,a) values (663,57);
+insert into t (id,a) values (663,58);
+insert into t (id,a) values (663,59);
+insert into t (id,a) values (663,60);
+insert into t (id,a) values (663,61);
+insert into t (id,a) values (663,62);
+insert into t (id,a) values (663,63);
+insert into t (id,a) values (663,64);
+insert into t (id,a) values (663,65);
+insert into t (id,a) values (663,66);
+insert into t (id,a) values (663,67);
+insert into t (id,a) values (663,68);
+insert into t (id,a) values (663,69);
+insert into t (id,a) values (663,70);
+insert into t (id,a) values (663,71);
+insert into t (id,a) values (663,72);
+insert into t (id,a) values (663,73);
+insert into t (id,a) values (663,74);
+insert into t (id,a) values (663,75);
+insert into t (id,a) values (663,76);
+insert into t (id,a) values (663,77);
+insert into t (id,a) values (663,78);
+insert into t (id,a) values (663,79);
+insert into t (id,a) values (663,80);
+insert into t (id,a) values (663,81);
+insert into t (id,a) values (663,82);
+insert into t (id,a) values (663,83);
+insert into t (id,a) values (663,84);
+insert into t (id,a) values (663,85);
+insert into t (id,a) values (663,86);
+insert into t (id,a) values (663,87);
+insert into t (id,a) values (663,88);
+insert into t (id,a) values (663,89);
+insert into t (id,a) values (663,90);
+insert into t (id,a) values (663,91);
+insert into t (id,a) values (663,92);
+insert into t (id,a) values (663,93);
+insert into t (id,a) values (663,94);
+insert into t (id,a) values (663,95);
+insert into t (id,a) values (663,96);
+insert into t (id,a) values (663,97);
+insert into t (id,a) values (663,98);
+insert into t (id,a) values (663,99);
+insert into t (id,a) values (664,0);
+insert into t (id,a) values (664,1);
+insert into t (id,a) values (664,2);
+insert into t (id,a) values (664,3);
+insert into t (id,a) values (664,4);
+insert into t (id,a) values (664,5);
+insert into t (id,a) values (664,6);
+insert into t (id,a) values (664,7);
+insert into t (id,a) values (664,8);
+insert into t (id,a) values (664,9);
+insert into t (id,a) values (664,10);
+insert into t (id,a) values (664,11);
+insert into t (id,a) values (664,12);
+insert into t (id,a) values (664,13);
+insert into t (id,a) values (664,14);
+insert into t (id,a) values (664,15);
+insert into t (id,a) values (664,16);
+insert into t (id,a) values (664,17);
+insert into t (id,a) values (664,18);
+insert into t (id,a) values (664,19);
+insert into t (id,a) values (664,20);
+insert into t (id,a) values (664,21);
+insert into t (id,a) values (664,22);
+insert into t (id,a) values (664,23);
+insert into t (id,a) values (664,24);
+insert into t (id,a) values (664,25);
+insert into t (id,a) values (664,26);
+insert into t (id,a) values (664,27);
+insert into t (id,a) values (664,28);
+insert into t (id,a) values (664,29);
+insert into t (id,a) values (664,30);
+insert into t (id,a) values (664,31);
+insert into t (id,a) values (664,32);
+insert into t (id,a) values (664,33);
+insert into t (id,a) values (664,34);
+insert into t (id,a) values (664,35);
+insert into t (id,a) values (664,36);
+insert into t (id,a) values (664,37);
+insert into t (id,a) values (664,38);
+insert into t (id,a) values (664,39);
+insert into t (id,a) values (664,40);
+insert into t (id,a) values (664,41);
+insert into t (id,a) values (664,42);
+insert into t (id,a) values (664,43);
+insert into t (id,a) values (664,44);
+insert into t (id,a) values (664,45);
+insert into t (id,a) values (664,46);
+insert into t (id,a) values (664,47);
+insert into t (id,a) values (664,48);
+insert into t (id,a) values (664,49);
+insert into t (id,a) values (664,50);
+insert into t (id,a) values (664,51);
+insert into t (id,a) values (664,52);
+insert into t (id,a) values (664,53);
+insert into t (id,a) values (664,54);
+insert into t (id,a) values (664,55);
+insert into t (id,a) values (664,56);
+insert into t (id,a) values (664,57);
+insert into t (id,a) values (664,58);
+insert into t (id,a) values (664,59);
+insert into t (id,a) values (664,60);
+insert into t (id,a) values (664,61);
+insert into t (id,a) values (664,62);
+insert into t (id,a) values (664,63);
+insert into t (id,a) values (664,64);
+insert into t (id,a) values (664,65);
+insert into t (id,a) values (664,66);
+insert into t (id,a) values (664,67);
+insert into t (id,a) values (664,68);
+insert into t (id,a) values (664,69);
+insert into t (id,a) values (664,70);
+insert into t (id,a) values (664,71);
+insert into t (id,a) values (664,72);
+insert into t (id,a) values (664,73);
+insert into t (id,a) values (664,74);
+insert into t (id,a) values (664,75);
+insert into t (id,a) values (664,76);
+insert into t (id,a) values (664,77);
+insert into t (id,a) values (664,78);
+insert into t (id,a) values (664,79);
+insert into t (id,a) values (664,80);
+insert into t (id,a) values (664,81);
+insert into t (id,a) values (664,82);
+insert into t (id,a) values (664,83);
+insert into t (id,a) values (664,84);
+insert into t (id,a) values (664,85);
+insert into t (id,a) values (664,86);
+insert into t (id,a) values (664,87);
+insert into t (id,a) values (664,88);
+insert into t (id,a) values (664,89);
+insert into t (id,a) values (664,90);
+insert into t (id,a) values (664,91);
+insert into t (id,a) values (664,92);
+insert into t (id,a) values (664,93);
+insert into t (id,a) values (664,94);
+insert into t (id,a) values (664,95);
+insert into t (id,a) values (664,96);
+insert into t (id,a) values (664,97);
+insert into t (id,a) values (664,98);
+insert into t (id,a) values (664,99);
+insert into t (id,a) values (665,0);
+insert into t (id,a) values (665,1);
+insert into t (id,a) values (665,2);
+insert into t (id,a) values (665,3);
+insert into t (id,a) values (665,4);
+insert into t (id,a) values (665,5);
+insert into t (id,a) values (665,6);
+insert into t (id,a) values (665,7);
+insert into t (id,a) values (665,8);
+insert into t (id,a) values (665,9);
+insert into t (id,a) values (665,10);
+insert into t (id,a) values (665,11);
+insert into t (id,a) values (665,12);
+insert into t (id,a) values (665,13);
+insert into t (id,a) values (665,14);
+insert into t (id,a) values (665,15);
+insert into t (id,a) values (665,16);
+insert into t (id,a) values (665,17);
+insert into t (id,a) values (665,18);
+insert into t (id,a) values (665,19);
+insert into t (id,a) values (665,20);
+insert into t (id,a) values (665,21);
+insert into t (id,a) values (665,22);
+insert into t (id,a) values (665,23);
+insert into t (id,a) values (665,24);
+insert into t (id,a) values (665,25);
+insert into t (id,a) values (665,26);
+insert into t (id,a) values (665,27);
+insert into t (id,a) values (665,28);
+insert into t (id,a) values (665,29);
+insert into t (id,a) values (665,30);
+insert into t (id,a) values (665,31);
+insert into t (id,a) values (665,32);
+insert into t (id,a) values (665,33);
+insert into t (id,a) values (665,34);
+insert into t (id,a) values (665,35);
+insert into t (id,a) values (665,36);
+insert into t (id,a) values (665,37);
+insert into t (id,a) values (665,38);
+insert into t (id,a) values (665,39);
+insert into t (id,a) values (665,40);
+insert into t (id,a) values (665,41);
+insert into t (id,a) values (665,42);
+insert into t (id,a) values (665,43);
+insert into t (id,a) values (665,44);
+insert into t (id,a) values (665,45);
+insert into t (id,a) values (665,46);
+insert into t (id,a) values (665,47);
+insert into t (id,a) values (665,48);
+insert into t (id,a) values (665,49);
+insert into t (id,a) values (665,50);
+insert into t (id,a) values (665,51);
+insert into t (id,a) values (665,52);
+insert into t (id,a) values (665,53);
+insert into t (id,a) values (665,54);
+insert into t (id,a) values (665,55);
+insert into t (id,a) values (665,56);
+insert into t (id,a) values (665,57);
+insert into t (id,a) values (665,58);
+insert into t (id,a) values (665,59);
+insert into t (id,a) values (665,60);
+insert into t (id,a) values (665,61);
+insert into t (id,a) values (665,62);
+insert into t (id,a) values (665,63);
+insert into t (id,a) values (665,64);
+insert into t (id,a) values (665,65);
+insert into t (id,a) values (665,66);
+insert into t (id,a) values (665,67);
+insert into t (id,a) values (665,68);
+insert into t (id,a) values (665,69);
+insert into t (id,a) values (665,70);
+insert into t (id,a) values (665,71);
+insert into t (id,a) values (665,72);
+insert into t (id,a) values (665,73);
+insert into t (id,a) values (665,74);
+insert into t (id,a) values (665,75);
+insert into t (id,a) values (665,76);
+insert into t (id,a) values (665,77);
+insert into t (id,a) values (665,78);
+insert into t (id,a) values (665,79);
+insert into t (id,a) values (665,80);
+insert into t (id,a) values (665,81);
+insert into t (id,a) values (665,82);
+insert into t (id,a) values (665,83);
+insert into t (id,a) values (665,84);
+insert into t (id,a) values (665,85);
+insert into t (id,a) values (665,86);
+insert into t (id,a) values (665,87);
+insert into t (id,a) values (665,88);
+insert into t (id,a) values (665,89);
+insert into t (id,a) values (665,90);
+insert into t (id,a) values (665,91);
+insert into t (id,a) values (665,92);
+insert into t (id,a) values (665,93);
+insert into t (id,a) values (665,94);
+insert into t (id,a) values (665,95);
+insert into t (id,a) values (665,96);
+insert into t (id,a) values (665,97);
+insert into t (id,a) values (665,98);
+insert into t (id,a) values (665,99);
+insert into t (id,a) values (666,0);
+insert into t (id,a) values (666,1);
+insert into t (id,a) values (666,2);
+insert into t (id,a) values (666,3);
+insert into t (id,a) values (666,4);
+insert into t (id,a) values (666,5);
+insert into t (id,a) values (666,6);
+insert into t (id,a) values (666,7);
+insert into t (id,a) values (666,8);
+insert into t (id,a) values (666,9);
+insert into t (id,a) values (666,10);
+insert into t (id,a) values (666,11);
+insert into t (id,a) values (666,12);
+insert into t (id,a) values (666,13);
+insert into t (id,a) values (666,14);
+insert into t (id,a) values (666,15);
+insert into t (id,a) values (666,16);
+insert into t (id,a) values (666,17);
+insert into t (id,a) values (666,18);
+insert into t (id,a) values (666,19);
+insert into t (id,a) values (666,20);
+insert into t (id,a) values (666,21);
+insert into t (id,a) values (666,22);
+insert into t (id,a) values (666,23);
+insert into t (id,a) values (666,24);
+insert into t (id,a) values (666,25);
+insert into t (id,a) values (666,26);
+insert into t (id,a) values (666,27);
+insert into t (id,a) values (666,28);
+insert into t (id,a) values (666,29);
+insert into t (id,a) values (666,30);
+insert into t (id,a) values (666,31);
+insert into t (id,a) values (666,32);
+insert into t (id,a) values (666,33);
+insert into t (id,a) values (666,34);
+insert into t (id,a) values (666,35);
+insert into t (id,a) values (666,36);
+insert into t (id,a) values (666,37);
+insert into t (id,a) values (666,38);
+insert into t (id,a) values (666,39);
+insert into t (id,a) values (666,40);
+insert into t (id,a) values (666,41);
+insert into t (id,a) values (666,42);
+insert into t (id,a) values (666,43);
+insert into t (id,a) values (666,44);
+insert into t (id,a) values (666,45);
+insert into t (id,a) values (666,46);
+insert into t (id,a) values (666,47);
+insert into t (id,a) values (666,48);
+insert into t (id,a) values (666,49);
+insert into t (id,a) values (666,50);
+insert into t (id,a) values (666,51);
+insert into t (id,a) values (666,52);
+insert into t (id,a) values (666,53);
+insert into t (id,a) values (666,54);
+insert into t (id,a) values (666,55);
+insert into t (id,a) values (666,56);
+insert into t (id,a) values (666,57);
+insert into t (id,a) values (666,58);
+insert into t (id,a) values (666,59);
+insert into t (id,a) values (666,60);
+insert into t (id,a) values (666,61);
+insert into t (id,a) values (666,62);
+insert into t (id,a) values (666,63);
+insert into t (id,a) values (666,64);
+insert into t (id,a) values (666,65);
+insert into t (id,a) values (666,66);
+insert into t (id,a) values (666,67);
+insert into t (id,a) values (666,68);
+insert into t (id,a) values (666,69);
+insert into t (id,a) values (666,70);
+insert into t (id,a) values (666,71);
+insert into t (id,a) values (666,72);
+insert into t (id,a) values (666,73);
+insert into t (id,a) values (666,74);
+insert into t (id,a) values (666,75);
+insert into t (id,a) values (666,76);
+insert into t (id,a) values (666,77);
+insert into t (id,a) values (666,78);
+insert into t (id,a) values (666,79);
+insert into t (id,a) values (666,80);
+insert into t (id,a) values (666,81);
+insert into t (id,a) values (666,82);
+insert into t (id,a) values (666,83);
+insert into t (id,a) values (666,84);
+insert into t (id,a) values (666,85);
+insert into t (id,a) values (666,86);
+insert into t (id,a) values (666,87);
+insert into t (id,a) values (666,88);
+insert into t (id,a) values (666,89);
+insert into t (id,a) values (666,90);
+insert into t (id,a) values (666,91);
+insert into t (id,a) values (666,92);
+insert into t (id,a) values (666,93);
+insert into t (id,a) values (666,94);
+insert into t (id,a) values (666,95);
+insert into t (id,a) values (666,96);
+insert into t (id,a) values (666,97);
+insert into t (id,a) values (666,98);
+insert into t (id,a) values (666,99);
+insert into t (id,a) values (667,0);
+insert into t (id,a) values (667,1);
+insert into t (id,a) values (667,2);
+insert into t (id,a) values (667,3);
+insert into t (id,a) values (667,4);
+insert into t (id,a) values (667,5);
+insert into t (id,a) values (667,6);
+insert into t (id,a) values (667,7);
+insert into t (id,a) values (667,8);
+insert into t (id,a) values (667,9);
+insert into t (id,a) values (667,10);
+insert into t (id,a) values (667,11);
+insert into t (id,a) values (667,12);
+insert into t (id,a) values (667,13);
+insert into t (id,a) values (667,14);
+insert into t (id,a) values (667,15);
+insert into t (id,a) values (667,16);
+insert into t (id,a) values (667,17);
+insert into t (id,a) values (667,18);
+insert into t (id,a) values (667,19);
+insert into t (id,a) values (667,20);
+insert into t (id,a) values (667,21);
+insert into t (id,a) values (667,22);
+insert into t (id,a) values (667,23);
+insert into t (id,a) values (667,24);
+insert into t (id,a) values (667,25);
+insert into t (id,a) values (667,26);
+insert into t (id,a) values (667,27);
+insert into t (id,a) values (667,28);
+insert into t (id,a) values (667,29);
+insert into t (id,a) values (667,30);
+insert into t (id,a) values (667,31);
+insert into t (id,a) values (667,32);
+insert into t (id,a) values (667,33);
+insert into t (id,a) values (667,34);
+insert into t (id,a) values (667,35);
+insert into t (id,a) values (667,36);
+insert into t (id,a) values (667,37);
+insert into t (id,a) values (667,38);
+insert into t (id,a) values (667,39);
+insert into t (id,a) values (667,40);
+insert into t (id,a) values (667,41);
+insert into t (id,a) values (667,42);
+insert into t (id,a) values (667,43);
+insert into t (id,a) values (667,44);
+insert into t (id,a) values (667,45);
+insert into t (id,a) values (667,46);
+insert into t (id,a) values (667,47);
+insert into t (id,a) values (667,48);
+insert into t (id,a) values (667,49);
+insert into t (id,a) values (667,50);
+insert into t (id,a) values (667,51);
+insert into t (id,a) values (667,52);
+insert into t (id,a) values (667,53);
+insert into t (id,a) values (667,54);
+insert into t (id,a) values (667,55);
+insert into t (id,a) values (667,56);
+insert into t (id,a) values (667,57);
+insert into t (id,a) values (667,58);
+insert into t (id,a) values (667,59);
+insert into t (id,a) values (667,60);
+insert into t (id,a) values (667,61);
+insert into t (id,a) values (667,62);
+insert into t (id,a) values (667,63);
+insert into t (id,a) values (667,64);
+insert into t (id,a) values (667,65);
+insert into t (id,a) values (667,66);
+insert into t (id,a) values (667,67);
+insert into t (id,a) values (667,68);
+insert into t (id,a) values (667,69);
+insert into t (id,a) values (667,70);
+insert into t (id,a) values (667,71);
+insert into t (id,a) values (667,72);
+insert into t (id,a) values (667,73);
+insert into t (id,a) values (667,74);
+insert into t (id,a) values (667,75);
+insert into t (id,a) values (667,76);
+insert into t (id,a) values (667,77);
+insert into t (id,a) values (667,78);
+insert into t (id,a) values (667,79);
+insert into t (id,a) values (667,80);
+insert into t (id,a) values (667,81);
+insert into t (id,a) values (667,82);
+insert into t (id,a) values (667,83);
+insert into t (id,a) values (667,84);
+insert into t (id,a) values (667,85);
+insert into t (id,a) values (667,86);
+insert into t (id,a) values (667,87);
+insert into t (id,a) values (667,88);
+insert into t (id,a) values (667,89);
+insert into t (id,a) values (667,90);
+insert into t (id,a) values (667,91);
+insert into t (id,a) values (667,92);
+insert into t (id,a) values (667,93);
+insert into t (id,a) values (667,94);
+insert into t (id,a) values (667,95);
+insert into t (id,a) values (667,96);
+insert into t (id,a) values (667,97);
+insert into t (id,a) values (667,98);
+insert into t (id,a) values (667,99);
+insert into t (id,a) values (668,0);
+insert into t (id,a) values (668,1);
+insert into t (id,a) values (668,2);
+insert into t (id,a) values (668,3);
+insert into t (id,a) values (668,4);
+insert into t (id,a) values (668,5);
+insert into t (id,a) values (668,6);
+insert into t (id,a) values (668,7);
+insert into t (id,a) values (668,8);
+insert into t (id,a) values (668,9);
+insert into t (id,a) values (668,10);
+insert into t (id,a) values (668,11);
+insert into t (id,a) values (668,12);
+insert into t (id,a) values (668,13);
+insert into t (id,a) values (668,14);
+insert into t (id,a) values (668,15);
+insert into t (id,a) values (668,16);
+insert into t (id,a) values (668,17);
+insert into t (id,a) values (668,18);
+insert into t (id,a) values (668,19);
+insert into t (id,a) values (668,20);
+insert into t (id,a) values (668,21);
+insert into t (id,a) values (668,22);
+insert into t (id,a) values (668,23);
+insert into t (id,a) values (668,24);
+insert into t (id,a) values (668,25);
+insert into t (id,a) values (668,26);
+insert into t (id,a) values (668,27);
+insert into t (id,a) values (668,28);
+insert into t (id,a) values (668,29);
+insert into t (id,a) values (668,30);
+insert into t (id,a) values (668,31);
+insert into t (id,a) values (668,32);
+insert into t (id,a) values (668,33);
+insert into t (id,a) values (668,34);
+insert into t (id,a) values (668,35);
+insert into t (id,a) values (668,36);
+insert into t (id,a) values (668,37);
+insert into t (id,a) values (668,38);
+insert into t (id,a) values (668,39);
+insert into t (id,a) values (668,40);
+insert into t (id,a) values (668,41);
+insert into t (id,a) values (668,42);
+insert into t (id,a) values (668,43);
+insert into t (id,a) values (668,44);
+insert into t (id,a) values (668,45);
+insert into t (id,a) values (668,46);
+insert into t (id,a) values (668,47);
+insert into t (id,a) values (668,48);
+insert into t (id,a) values (668,49);
+insert into t (id,a) values (668,50);
+insert into t (id,a) values (668,51);
+insert into t (id,a) values (668,52);
+insert into t (id,a) values (668,53);
+insert into t (id,a) values (668,54);
+insert into t (id,a) values (668,55);
+insert into t (id,a) values (668,56);
+insert into t (id,a) values (668,57);
+insert into t (id,a) values (668,58);
+insert into t (id,a) values (668,59);
+insert into t (id,a) values (668,60);
+insert into t (id,a) values (668,61);
+insert into t (id,a) values (668,62);
+insert into t (id,a) values (668,63);
+insert into t (id,a) values (668,64);
+insert into t (id,a) values (668,65);
+insert into t (id,a) values (668,66);
+insert into t (id,a) values (668,67);
+insert into t (id,a) values (668,68);
+insert into t (id,a) values (668,69);
+insert into t (id,a) values (668,70);
+insert into t (id,a) values (668,71);
+insert into t (id,a) values (668,72);
+insert into t (id,a) values (668,73);
+insert into t (id,a) values (668,74);
+insert into t (id,a) values (668,75);
+insert into t (id,a) values (668,76);
+insert into t (id,a) values (668,77);
+insert into t (id,a) values (668,78);
+insert into t (id,a) values (668,79);
+insert into t (id,a) values (668,80);
+insert into t (id,a) values (668,81);
+insert into t (id,a) values (668,82);
+insert into t (id,a) values (668,83);
+insert into t (id,a) values (668,84);
+insert into t (id,a) values (668,85);
+insert into t (id,a) values (668,86);
+insert into t (id,a) values (668,87);
+insert into t (id,a) values (668,88);
+insert into t (id,a) values (668,89);
+insert into t (id,a) values (668,90);
+insert into t (id,a) values (668,91);
+insert into t (id,a) values (668,92);
+insert into t (id,a) values (668,93);
+insert into t (id,a) values (668,94);
+insert into t (id,a) values (668,95);
+insert into t (id,a) values (668,96);
+insert into t (id,a) values (668,97);
+insert into t (id,a) values (668,98);
+insert into t (id,a) values (668,99);
+insert into t (id,a) values (669,0);
+insert into t (id,a) values (669,1);
+insert into t (id,a) values (669,2);
+insert into t (id,a) values (669,3);
+insert into t (id,a) values (669,4);
+insert into t (id,a) values (669,5);
+insert into t (id,a) values (669,6);
+insert into t (id,a) values (669,7);
+insert into t (id,a) values (669,8);
+insert into t (id,a) values (669,9);
+insert into t (id,a) values (669,10);
+insert into t (id,a) values (669,11);
+insert into t (id,a) values (669,12);
+insert into t (id,a) values (669,13);
+insert into t (id,a) values (669,14);
+insert into t (id,a) values (669,15);
+insert into t (id,a) values (669,16);
+insert into t (id,a) values (669,17);
+insert into t (id,a) values (669,18);
+insert into t (id,a) values (669,19);
+insert into t (id,a) values (669,20);
+insert into t (id,a) values (669,21);
+insert into t (id,a) values (669,22);
+insert into t (id,a) values (669,23);
+insert into t (id,a) values (669,24);
+insert into t (id,a) values (669,25);
+insert into t (id,a) values (669,26);
+insert into t (id,a) values (669,27);
+insert into t (id,a) values (669,28);
+insert into t (id,a) values (669,29);
+insert into t (id,a) values (669,30);
+insert into t (id,a) values (669,31);
+insert into t (id,a) values (669,32);
+insert into t (id,a) values (669,33);
+insert into t (id,a) values (669,34);
+insert into t (id,a) values (669,35);
+insert into t (id,a) values (669,36);
+insert into t (id,a) values (669,37);
+insert into t (id,a) values (669,38);
+insert into t (id,a) values (669,39);
+insert into t (id,a) values (669,40);
+insert into t (id,a) values (669,41);
+insert into t (id,a) values (669,42);
+insert into t (id,a) values (669,43);
+insert into t (id,a) values (669,44);
+insert into t (id,a) values (669,45);
+insert into t (id,a) values (669,46);
+insert into t (id,a) values (669,47);
+insert into t (id,a) values (669,48);
+insert into t (id,a) values (669,49);
+insert into t (id,a) values (669,50);
+insert into t (id,a) values (669,51);
+insert into t (id,a) values (669,52);
+insert into t (id,a) values (669,53);
+insert into t (id,a) values (669,54);
+insert into t (id,a) values (669,55);
+insert into t (id,a) values (669,56);
+insert into t (id,a) values (669,57);
+insert into t (id,a) values (669,58);
+insert into t (id,a) values (669,59);
+insert into t (id,a) values (669,60);
+insert into t (id,a) values (669,61);
+insert into t (id,a) values (669,62);
+insert into t (id,a) values (669,63);
+insert into t (id,a) values (669,64);
+insert into t (id,a) values (669,65);
+insert into t (id,a) values (669,66);
+insert into t (id,a) values (669,67);
+insert into t (id,a) values (669,68);
+insert into t (id,a) values (669,69);
+insert into t (id,a) values (669,70);
+insert into t (id,a) values (669,71);
+insert into t (id,a) values (669,72);
+insert into t (id,a) values (669,73);
+insert into t (id,a) values (669,74);
+insert into t (id,a) values (669,75);
+insert into t (id,a) values (669,76);
+insert into t (id,a) values (669,77);
+insert into t (id,a) values (669,78);
+insert into t (id,a) values (669,79);
+insert into t (id,a) values (669,80);
+insert into t (id,a) values (669,81);
+insert into t (id,a) values (669,82);
+insert into t (id,a) values (669,83);
+insert into t (id,a) values (669,84);
+insert into t (id,a) values (669,85);
+insert into t (id,a) values (669,86);
+insert into t (id,a) values (669,87);
+insert into t (id,a) values (669,88);
+insert into t (id,a) values (669,89);
+insert into t (id,a) values (669,90);
+insert into t (id,a) values (669,91);
+insert into t (id,a) values (669,92);
+insert into t (id,a) values (669,93);
+insert into t (id,a) values (669,94);
+insert into t (id,a) values (669,95);
+insert into t (id,a) values (669,96);
+insert into t (id,a) values (669,97);
+insert into t (id,a) values (669,98);
+insert into t (id,a) values (669,99);
+insert into t (id,a) values (670,0);
+insert into t (id,a) values (670,1);
+insert into t (id,a) values (670,2);
+insert into t (id,a) values (670,3);
+insert into t (id,a) values (670,4);
+insert into t (id,a) values (670,5);
+insert into t (id,a) values (670,6);
+insert into t (id,a) values (670,7);
+insert into t (id,a) values (670,8);
+insert into t (id,a) values (670,9);
+insert into t (id,a) values (670,10);
+insert into t (id,a) values (670,11);
+insert into t (id,a) values (670,12);
+insert into t (id,a) values (670,13);
+insert into t (id,a) values (670,14);
+insert into t (id,a) values (670,15);
+insert into t (id,a) values (670,16);
+insert into t (id,a) values (670,17);
+insert into t (id,a) values (670,18);
+insert into t (id,a) values (670,19);
+insert into t (id,a) values (670,20);
+insert into t (id,a) values (670,21);
+insert into t (id,a) values (670,22);
+insert into t (id,a) values (670,23);
+insert into t (id,a) values (670,24);
+insert into t (id,a) values (670,25);
+insert into t (id,a) values (670,26);
+insert into t (id,a) values (670,27);
+insert into t (id,a) values (670,28);
+insert into t (id,a) values (670,29);
+insert into t (id,a) values (670,30);
+insert into t (id,a) values (670,31);
+insert into t (id,a) values (670,32);
+insert into t (id,a) values (670,33);
+insert into t (id,a) values (670,34);
+insert into t (id,a) values (670,35);
+insert into t (id,a) values (670,36);
+insert into t (id,a) values (670,37);
+insert into t (id,a) values (670,38);
+insert into t (id,a) values (670,39);
+insert into t (id,a) values (670,40);
+insert into t (id,a) values (670,41);
+insert into t (id,a) values (670,42);
+insert into t (id,a) values (670,43);
+insert into t (id,a) values (670,44);
+insert into t (id,a) values (670,45);
+insert into t (id,a) values (670,46);
+insert into t (id,a) values (670,47);
+insert into t (id,a) values (670,48);
+insert into t (id,a) values (670,49);
+insert into t (id,a) values (670,50);
+insert into t (id,a) values (670,51);
+insert into t (id,a) values (670,52);
+insert into t (id,a) values (670,53);
+insert into t (id,a) values (670,54);
+insert into t (id,a) values (670,55);
+insert into t (id,a) values (670,56);
+insert into t (id,a) values (670,57);
+insert into t (id,a) values (670,58);
+insert into t (id,a) values (670,59);
+insert into t (id,a) values (670,60);
+insert into t (id,a) values (670,61);
+insert into t (id,a) values (670,62);
+insert into t (id,a) values (670,63);
+insert into t (id,a) values (670,64);
+insert into t (id,a) values (670,65);
+insert into t (id,a) values (670,66);
+insert into t (id,a) values (670,67);
+insert into t (id,a) values (670,68);
+insert into t (id,a) values (670,69);
+insert into t (id,a) values (670,70);
+insert into t (id,a) values (670,71);
+insert into t (id,a) values (670,72);
+insert into t (id,a) values (670,73);
+insert into t (id,a) values (670,74);
+insert into t (id,a) values (670,75);
+insert into t (id,a) values (670,76);
+insert into t (id,a) values (670,77);
+insert into t (id,a) values (670,78);
+insert into t (id,a) values (670,79);
+insert into t (id,a) values (670,80);
+insert into t (id,a) values (670,81);
+insert into t (id,a) values (670,82);
+insert into t (id,a) values (670,83);
+insert into t (id,a) values (670,84);
+insert into t (id,a) values (670,85);
+insert into t (id,a) values (670,86);
+insert into t (id,a) values (670,87);
+insert into t (id,a) values (670,88);
+insert into t (id,a) values (670,89);
+insert into t (id,a) values (670,90);
+insert into t (id,a) values (670,91);
+insert into t (id,a) values (670,92);
+insert into t (id,a) values (670,93);
+insert into t (id,a) values (670,94);
+insert into t (id,a) values (670,95);
+insert into t (id,a) values (670,96);
+insert into t (id,a) values (670,97);
+insert into t (id,a) values (670,98);
+insert into t (id,a) values (670,99);
+insert into t (id,a) values (671,0);
+insert into t (id,a) values (671,1);
+insert into t (id,a) values (671,2);
+insert into t (id,a) values (671,3);
+insert into t (id,a) values (671,4);
+insert into t (id,a) values (671,5);
+insert into t (id,a) values (671,6);
+insert into t (id,a) values (671,7);
+insert into t (id,a) values (671,8);
+insert into t (id,a) values (671,9);
+insert into t (id,a) values (671,10);
+insert into t (id,a) values (671,11);
+insert into t (id,a) values (671,12);
+insert into t (id,a) values (671,13);
+insert into t (id,a) values (671,14);
+insert into t (id,a) values (671,15);
+insert into t (id,a) values (671,16);
+insert into t (id,a) values (671,17);
+insert into t (id,a) values (671,18);
+insert into t (id,a) values (671,19);
+insert into t (id,a) values (671,20);
+insert into t (id,a) values (671,21);
+insert into t (id,a) values (671,22);
+insert into t (id,a) values (671,23);
+insert into t (id,a) values (671,24);
+insert into t (id,a) values (671,25);
+insert into t (id,a) values (671,26);
+insert into t (id,a) values (671,27);
+insert into t (id,a) values (671,28);
+insert into t (id,a) values (671,29);
+insert into t (id,a) values (671,30);
+insert into t (id,a) values (671,31);
+insert into t (id,a) values (671,32);
+insert into t (id,a) values (671,33);
+insert into t (id,a) values (671,34);
+insert into t (id,a) values (671,35);
+insert into t (id,a) values (671,36);
+insert into t (id,a) values (671,37);
+insert into t (id,a) values (671,38);
+insert into t (id,a) values (671,39);
+insert into t (id,a) values (671,40);
+insert into t (id,a) values (671,41);
+insert into t (id,a) values (671,42);
+insert into t (id,a) values (671,43);
+insert into t (id,a) values (671,44);
+insert into t (id,a) values (671,45);
+insert into t (id,a) values (671,46);
+insert into t (id,a) values (671,47);
+insert into t (id,a) values (671,48);
+insert into t (id,a) values (671,49);
+insert into t (id,a) values (671,50);
+insert into t (id,a) values (671,51);
+insert into t (id,a) values (671,52);
+insert into t (id,a) values (671,53);
+insert into t (id,a) values (671,54);
+insert into t (id,a) values (671,55);
+insert into t (id,a) values (671,56);
+insert into t (id,a) values (671,57);
+insert into t (id,a) values (671,58);
+insert into t (id,a) values (671,59);
+insert into t (id,a) values (671,60);
+insert into t (id,a) values (671,61);
+insert into t (id,a) values (671,62);
+insert into t (id,a) values (671,63);
+insert into t (id,a) values (671,64);
+insert into t (id,a) values (671,65);
+insert into t (id,a) values (671,66);
+insert into t (id,a) values (671,67);
+insert into t (id,a) values (671,68);
+insert into t (id,a) values (671,69);
+insert into t (id,a) values (671,70);
+insert into t (id,a) values (671,71);
+insert into t (id,a) values (671,72);
+insert into t (id,a) values (671,73);
+insert into t (id,a) values (671,74);
+insert into t (id,a) values (671,75);
+insert into t (id,a) values (671,76);
+insert into t (id,a) values (671,77);
+insert into t (id,a) values (671,78);
+insert into t (id,a) values (671,79);
+insert into t (id,a) values (671,80);
+insert into t (id,a) values (671,81);
+insert into t (id,a) values (671,82);
+insert into t (id,a) values (671,83);
+insert into t (id,a) values (671,84);
+insert into t (id,a) values (671,85);
+insert into t (id,a) values (671,86);
+insert into t (id,a) values (671,87);
+insert into t (id,a) values (671,88);
+insert into t (id,a) values (671,89);
+insert into t (id,a) values (671,90);
+insert into t (id,a) values (671,91);
+insert into t (id,a) values (671,92);
+insert into t (id,a) values (671,93);
+insert into t (id,a) values (671,94);
+insert into t (id,a) values (671,95);
+insert into t (id,a) values (671,96);
+insert into t (id,a) values (671,97);
+insert into t (id,a) values (671,98);
+insert into t (id,a) values (671,99);
+insert into t (id,a) values (672,0);
+insert into t (id,a) values (672,1);
+insert into t (id,a) values (672,2);
+insert into t (id,a) values (672,3);
+insert into t (id,a) values (672,4);
+insert into t (id,a) values (672,5);
+insert into t (id,a) values (672,6);
+insert into t (id,a) values (672,7);
+insert into t (id,a) values (672,8);
+insert into t (id,a) values (672,9);
+insert into t (id,a) values (672,10);
+insert into t (id,a) values (672,11);
+insert into t (id,a) values (672,12);
+insert into t (id,a) values (672,13);
+insert into t (id,a) values (672,14);
+insert into t (id,a) values (672,15);
+insert into t (id,a) values (672,16);
+insert into t (id,a) values (672,17);
+insert into t (id,a) values (672,18);
+insert into t (id,a) values (672,19);
+insert into t (id,a) values (672,20);
+insert into t (id,a) values (672,21);
+insert into t (id,a) values (672,22);
+insert into t (id,a) values (672,23);
+insert into t (id,a) values (672,24);
+insert into t (id,a) values (672,25);
+insert into t (id,a) values (672,26);
+insert into t (id,a) values (672,27);
+insert into t (id,a) values (672,28);
+insert into t (id,a) values (672,29);
+insert into t (id,a) values (672,30);
+insert into t (id,a) values (672,31);
+insert into t (id,a) values (672,32);
+insert into t (id,a) values (672,33);
+insert into t (id,a) values (672,34);
+insert into t (id,a) values (672,35);
+insert into t (id,a) values (672,36);
+insert into t (id,a) values (672,37);
+insert into t (id,a) values (672,38);
+insert into t (id,a) values (672,39);
+insert into t (id,a) values (672,40);
+insert into t (id,a) values (672,41);
+insert into t (id,a) values (672,42);
+insert into t (id,a) values (672,43);
+insert into t (id,a) values (672,44);
+insert into t (id,a) values (672,45);
+insert into t (id,a) values (672,46);
+insert into t (id,a) values (672,47);
+insert into t (id,a) values (672,48);
+insert into t (id,a) values (672,49);
+insert into t (id,a) values (672,50);
+insert into t (id,a) values (672,51);
+insert into t (id,a) values (672,52);
+insert into t (id,a) values (672,53);
+insert into t (id,a) values (672,54);
+insert into t (id,a) values (672,55);
+insert into t (id,a) values (672,56);
+insert into t (id,a) values (672,57);
+insert into t (id,a) values (672,58);
+insert into t (id,a) values (672,59);
+insert into t (id,a) values (672,60);
+insert into t (id,a) values (672,61);
+insert into t (id,a) values (672,62);
+insert into t (id,a) values (672,63);
+insert into t (id,a) values (672,64);
+insert into t (id,a) values (672,65);
+insert into t (id,a) values (672,66);
+insert into t (id,a) values (672,67);
+insert into t (id,a) values (672,68);
+insert into t (id,a) values (672,69);
+insert into t (id,a) values (672,70);
+insert into t (id,a) values (672,71);
+insert into t (id,a) values (672,72);
+insert into t (id,a) values (672,73);
+insert into t (id,a) values (672,74);
+insert into t (id,a) values (672,75);
+insert into t (id,a) values (672,76);
+insert into t (id,a) values (672,77);
+insert into t (id,a) values (672,78);
+insert into t (id,a) values (672,79);
+insert into t (id,a) values (672,80);
+insert into t (id,a) values (672,81);
+insert into t (id,a) values (672,82);
+insert into t (id,a) values (672,83);
+insert into t (id,a) values (672,84);
+insert into t (id,a) values (672,85);
+insert into t (id,a) values (672,86);
+insert into t (id,a) values (672,87);
+insert into t (id,a) values (672,88);
+insert into t (id,a) values (672,89);
+insert into t (id,a) values (672,90);
+insert into t (id,a) values (672,91);
+insert into t (id,a) values (672,92);
+insert into t (id,a) values (672,93);
+insert into t (id,a) values (672,94);
+insert into t (id,a) values (672,95);
+insert into t (id,a) values (672,96);
+insert into t (id,a) values (672,97);
+insert into t (id,a) values (672,98);
+insert into t (id,a) values (672,99);
+insert into t (id,a) values (673,0);
+insert into t (id,a) values (673,1);
+insert into t (id,a) values (673,2);
+insert into t (id,a) values (673,3);
+insert into t (id,a) values (673,4);
+insert into t (id,a) values (673,5);
+insert into t (id,a) values (673,6);
+insert into t (id,a) values (673,7);
+insert into t (id,a) values (673,8);
+insert into t (id,a) values (673,9);
+insert into t (id,a) values (673,10);
+insert into t (id,a) values (673,11);
+insert into t (id,a) values (673,12);
+insert into t (id,a) values (673,13);
+insert into t (id,a) values (673,14);
+insert into t (id,a) values (673,15);
+insert into t (id,a) values (673,16);
+insert into t (id,a) values (673,17);
+insert into t (id,a) values (673,18);
+insert into t (id,a) values (673,19);
+insert into t (id,a) values (673,20);
+insert into t (id,a) values (673,21);
+insert into t (id,a) values (673,22);
+insert into t (id,a) values (673,23);
+insert into t (id,a) values (673,24);
+insert into t (id,a) values (673,25);
+insert into t (id,a) values (673,26);
+insert into t (id,a) values (673,27);
+insert into t (id,a) values (673,28);
+insert into t (id,a) values (673,29);
+insert into t (id,a) values (673,30);
+insert into t (id,a) values (673,31);
+insert into t (id,a) values (673,32);
+insert into t (id,a) values (673,33);
+insert into t (id,a) values (673,34);
+insert into t (id,a) values (673,35);
+insert into t (id,a) values (673,36);
+insert into t (id,a) values (673,37);
+insert into t (id,a) values (673,38);
+insert into t (id,a) values (673,39);
+insert into t (id,a) values (673,40);
+insert into t (id,a) values (673,41);
+insert into t (id,a) values (673,42);
+insert into t (id,a) values (673,43);
+insert into t (id,a) values (673,44);
+insert into t (id,a) values (673,45);
+insert into t (id,a) values (673,46);
+insert into t (id,a) values (673,47);
+insert into t (id,a) values (673,48);
+insert into t (id,a) values (673,49);
+insert into t (id,a) values (673,50);
+insert into t (id,a) values (673,51);
+insert into t (id,a) values (673,52);
+insert into t (id,a) values (673,53);
+insert into t (id,a) values (673,54);
+insert into t (id,a) values (673,55);
+insert into t (id,a) values (673,56);
+insert into t (id,a) values (673,57);
+insert into t (id,a) values (673,58);
+insert into t (id,a) values (673,59);
+insert into t (id,a) values (673,60);
+insert into t (id,a) values (673,61);
+insert into t (id,a) values (673,62);
+insert into t (id,a) values (673,63);
+insert into t (id,a) values (673,64);
+insert into t (id,a) values (673,65);
+insert into t (id,a) values (673,66);
+insert into t (id,a) values (673,67);
+insert into t (id,a) values (673,68);
+insert into t (id,a) values (673,69);
+insert into t (id,a) values (673,70);
+insert into t (id,a) values (673,71);
+insert into t (id,a) values (673,72);
+insert into t (id,a) values (673,73);
+insert into t (id,a) values (673,74);
+insert into t (id,a) values (673,75);
+insert into t (id,a) values (673,76);
+insert into t (id,a) values (673,77);
+insert into t (id,a) values (673,78);
+insert into t (id,a) values (673,79);
+insert into t (id,a) values (673,80);
+insert into t (id,a) values (673,81);
+insert into t (id,a) values (673,82);
+insert into t (id,a) values (673,83);
+insert into t (id,a) values (673,84);
+insert into t (id,a) values (673,85);
+insert into t (id,a) values (673,86);
+insert into t (id,a) values (673,87);
+insert into t (id,a) values (673,88);
+insert into t (id,a) values (673,89);
+insert into t (id,a) values (673,90);
+insert into t (id,a) values (673,91);
+insert into t (id,a) values (673,92);
+insert into t (id,a) values (673,93);
+insert into t (id,a) values (673,94);
+insert into t (id,a) values (673,95);
+insert into t (id,a) values (673,96);
+insert into t (id,a) values (673,97);
+insert into t (id,a) values (673,98);
+insert into t (id,a) values (673,99);
+insert into t (id,a) values (674,0);
+insert into t (id,a) values (674,1);
+insert into t (id,a) values (674,2);
+insert into t (id,a) values (674,3);
+insert into t (id,a) values (674,4);
+insert into t (id,a) values (674,5);
+insert into t (id,a) values (674,6);
+insert into t (id,a) values (674,7);
+insert into t (id,a) values (674,8);
+insert into t (id,a) values (674,9);
+insert into t (id,a) values (674,10);
+insert into t (id,a) values (674,11);
+insert into t (id,a) values (674,12);
+insert into t (id,a) values (674,13);
+insert into t (id,a) values (674,14);
+insert into t (id,a) values (674,15);
+insert into t (id,a) values (674,16);
+insert into t (id,a) values (674,17);
+insert into t (id,a) values (674,18);
+insert into t (id,a) values (674,19);
+insert into t (id,a) values (674,20);
+insert into t (id,a) values (674,21);
+insert into t (id,a) values (674,22);
+insert into t (id,a) values (674,23);
+insert into t (id,a) values (674,24);
+insert into t (id,a) values (674,25);
+insert into t (id,a) values (674,26);
+insert into t (id,a) values (674,27);
+insert into t (id,a) values (674,28);
+insert into t (id,a) values (674,29);
+insert into t (id,a) values (674,30);
+insert into t (id,a) values (674,31);
+insert into t (id,a) values (674,32);
+insert into t (id,a) values (674,33);
+insert into t (id,a) values (674,34);
+insert into t (id,a) values (674,35);
+insert into t (id,a) values (674,36);
+insert into t (id,a) values (674,37);
+insert into t (id,a) values (674,38);
+insert into t (id,a) values (674,39);
+insert into t (id,a) values (674,40);
+insert into t (id,a) values (674,41);
+insert into t (id,a) values (674,42);
+insert into t (id,a) values (674,43);
+insert into t (id,a) values (674,44);
+insert into t (id,a) values (674,45);
+insert into t (id,a) values (674,46);
+insert into t (id,a) values (674,47);
+insert into t (id,a) values (674,48);
+insert into t (id,a) values (674,49);
+insert into t (id,a) values (674,50);
+insert into t (id,a) values (674,51);
+insert into t (id,a) values (674,52);
+insert into t (id,a) values (674,53);
+insert into t (id,a) values (674,54);
+insert into t (id,a) values (674,55);
+insert into t (id,a) values (674,56);
+insert into t (id,a) values (674,57);
+insert into t (id,a) values (674,58);
+insert into t (id,a) values (674,59);
+insert into t (id,a) values (674,60);
+insert into t (id,a) values (674,61);
+insert into t (id,a) values (674,62);
+insert into t (id,a) values (674,63);
+insert into t (id,a) values (674,64);
+insert into t (id,a) values (674,65);
+insert into t (id,a) values (674,66);
+insert into t (id,a) values (674,67);
+insert into t (id,a) values (674,68);
+insert into t (id,a) values (674,69);
+insert into t (id,a) values (674,70);
+insert into t (id,a) values (674,71);
+insert into t (id,a) values (674,72);
+insert into t (id,a) values (674,73);
+insert into t (id,a) values (674,74);
+insert into t (id,a) values (674,75);
+insert into t (id,a) values (674,76);
+insert into t (id,a) values (674,77);
+insert into t (id,a) values (674,78);
+insert into t (id,a) values (674,79);
+insert into t (id,a) values (674,80);
+insert into t (id,a) values (674,81);
+insert into t (id,a) values (674,82);
+insert into t (id,a) values (674,83);
+insert into t (id,a) values (674,84);
+insert into t (id,a) values (674,85);
+insert into t (id,a) values (674,86);
+insert into t (id,a) values (674,87);
+insert into t (id,a) values (674,88);
+insert into t (id,a) values (674,89);
+insert into t (id,a) values (674,90);
+insert into t (id,a) values (674,91);
+insert into t (id,a) values (674,92);
+insert into t (id,a) values (674,93);
+insert into t (id,a) values (674,94);
+insert into t (id,a) values (674,95);
+insert into t (id,a) values (674,96);
+insert into t (id,a) values (674,97);
+insert into t (id,a) values (674,98);
+insert into t (id,a) values (674,99);
+insert into t (id,a) values (675,0);
+insert into t (id,a) values (675,1);
+insert into t (id,a) values (675,2);
+insert into t (id,a) values (675,3);
+insert into t (id,a) values (675,4);
+insert into t (id,a) values (675,5);
+insert into t (id,a) values (675,6);
+insert into t (id,a) values (675,7);
+insert into t (id,a) values (675,8);
+insert into t (id,a) values (675,9);
+insert into t (id,a) values (675,10);
+insert into t (id,a) values (675,11);
+insert into t (id,a) values (675,12);
+insert into t (id,a) values (675,13);
+insert into t (id,a) values (675,14);
+insert into t (id,a) values (675,15);
+insert into t (id,a) values (675,16);
+insert into t (id,a) values (675,17);
+insert into t (id,a) values (675,18);
+insert into t (id,a) values (675,19);
+insert into t (id,a) values (675,20);
+insert into t (id,a) values (675,21);
+insert into t (id,a) values (675,22);
+insert into t (id,a) values (675,23);
+insert into t (id,a) values (675,24);
+insert into t (id,a) values (675,25);
+insert into t (id,a) values (675,26);
+insert into t (id,a) values (675,27);
+insert into t (id,a) values (675,28);
+insert into t (id,a) values (675,29);
+insert into t (id,a) values (675,30);
+insert into t (id,a) values (675,31);
+insert into t (id,a) values (675,32);
+insert into t (id,a) values (675,33);
+insert into t (id,a) values (675,34);
+insert into t (id,a) values (675,35);
+insert into t (id,a) values (675,36);
+insert into t (id,a) values (675,37);
+insert into t (id,a) values (675,38);
+insert into t (id,a) values (675,39);
+insert into t (id,a) values (675,40);
+insert into t (id,a) values (675,41);
+insert into t (id,a) values (675,42);
+insert into t (id,a) values (675,43);
+insert into t (id,a) values (675,44);
+insert into t (id,a) values (675,45);
+insert into t (id,a) values (675,46);
+insert into t (id,a) values (675,47);
+insert into t (id,a) values (675,48);
+insert into t (id,a) values (675,49);
+insert into t (id,a) values (675,50);
+insert into t (id,a) values (675,51);
+insert into t (id,a) values (675,52);
+insert into t (id,a) values (675,53);
+insert into t (id,a) values (675,54);
+insert into t (id,a) values (675,55);
+insert into t (id,a) values (675,56);
+insert into t (id,a) values (675,57);
+insert into t (id,a) values (675,58);
+insert into t (id,a) values (675,59);
+insert into t (id,a) values (675,60);
+insert into t (id,a) values (675,61);
+insert into t (id,a) values (675,62);
+insert into t (id,a) values (675,63);
+insert into t (id,a) values (675,64);
+insert into t (id,a) values (675,65);
+insert into t (id,a) values (675,66);
+insert into t (id,a) values (675,67);
+insert into t (id,a) values (675,68);
+insert into t (id,a) values (675,69);
+insert into t (id,a) values (675,70);
+insert into t (id,a) values (675,71);
+insert into t (id,a) values (675,72);
+insert into t (id,a) values (675,73);
+insert into t (id,a) values (675,74);
+insert into t (id,a) values (675,75);
+insert into t (id,a) values (675,76);
+insert into t (id,a) values (675,77);
+insert into t (id,a) values (675,78);
+insert into t (id,a) values (675,79);
+insert into t (id,a) values (675,80);
+insert into t (id,a) values (675,81);
+insert into t (id,a) values (675,82);
+insert into t (id,a) values (675,83);
+insert into t (id,a) values (675,84);
+insert into t (id,a) values (675,85);
+insert into t (id,a) values (675,86);
+insert into t (id,a) values (675,87);
+insert into t (id,a) values (675,88);
+insert into t (id,a) values (675,89);
+insert into t (id,a) values (675,90);
+insert into t (id,a) values (675,91);
+insert into t (id,a) values (675,92);
+insert into t (id,a) values (675,93);
+insert into t (id,a) values (675,94);
+insert into t (id,a) values (675,95);
+insert into t (id,a) values (675,96);
+insert into t (id,a) values (675,97);
+insert into t (id,a) values (675,98);
+insert into t (id,a) values (675,99);
+insert into t (id,a) values (676,0);
+insert into t (id,a) values (676,1);
+insert into t (id,a) values (676,2);
+insert into t (id,a) values (676,3);
+insert into t (id,a) values (676,4);
+insert into t (id,a) values (676,5);
+insert into t (id,a) values (676,6);
+insert into t (id,a) values (676,7);
+insert into t (id,a) values (676,8);
+insert into t (id,a) values (676,9);
+insert into t (id,a) values (676,10);
+insert into t (id,a) values (676,11);
+insert into t (id,a) values (676,12);
+insert into t (id,a) values (676,13);
+insert into t (id,a) values (676,14);
+insert into t (id,a) values (676,15);
+insert into t (id,a) values (676,16);
+insert into t (id,a) values (676,17);
+insert into t (id,a) values (676,18);
+insert into t (id,a) values (676,19);
+insert into t (id,a) values (676,20);
+insert into t (id,a) values (676,21);
+insert into t (id,a) values (676,22);
+insert into t (id,a) values (676,23);
+insert into t (id,a) values (676,24);
+insert into t (id,a) values (676,25);
+insert into t (id,a) values (676,26);
+insert into t (id,a) values (676,27);
+insert into t (id,a) values (676,28);
+insert into t (id,a) values (676,29);
+insert into t (id,a) values (676,30);
+insert into t (id,a) values (676,31);
+insert into t (id,a) values (676,32);
+insert into t (id,a) values (676,33);
+insert into t (id,a) values (676,34);
+insert into t (id,a) values (676,35);
+insert into t (id,a) values (676,36);
+insert into t (id,a) values (676,37);
+insert into t (id,a) values (676,38);
+insert into t (id,a) values (676,39);
+insert into t (id,a) values (676,40);
+insert into t (id,a) values (676,41);
+insert into t (id,a) values (676,42);
+insert into t (id,a) values (676,43);
+insert into t (id,a) values (676,44);
+insert into t (id,a) values (676,45);
+insert into t (id,a) values (676,46);
+insert into t (id,a) values (676,47);
+insert into t (id,a) values (676,48);
+insert into t (id,a) values (676,49);
+insert into t (id,a) values (676,50);
+insert into t (id,a) values (676,51);
+insert into t (id,a) values (676,52);
+insert into t (id,a) values (676,53);
+insert into t (id,a) values (676,54);
+insert into t (id,a) values (676,55);
+insert into t (id,a) values (676,56);
+insert into t (id,a) values (676,57);
+insert into t (id,a) values (676,58);
+insert into t (id,a) values (676,59);
+insert into t (id,a) values (676,60);
+insert into t (id,a) values (676,61);
+insert into t (id,a) values (676,62);
+insert into t (id,a) values (676,63);
+insert into t (id,a) values (676,64);
+insert into t (id,a) values (676,65);
+insert into t (id,a) values (676,66);
+insert into t (id,a) values (676,67);
+insert into t (id,a) values (676,68);
+insert into t (id,a) values (676,69);
+insert into t (id,a) values (676,70);
+insert into t (id,a) values (676,71);
+insert into t (id,a) values (676,72);
+insert into t (id,a) values (676,73);
+insert into t (id,a) values (676,74);
+insert into t (id,a) values (676,75);
+insert into t (id,a) values (676,76);
+insert into t (id,a) values (676,77);
+insert into t (id,a) values (676,78);
+insert into t (id,a) values (676,79);
+insert into t (id,a) values (676,80);
+insert into t (id,a) values (676,81);
+insert into t (id,a) values (676,82);
+insert into t (id,a) values (676,83);
+insert into t (id,a) values (676,84);
+insert into t (id,a) values (676,85);
+insert into t (id,a) values (676,86);
+insert into t (id,a) values (676,87);
+insert into t (id,a) values (676,88);
+insert into t (id,a) values (676,89);
+insert into t (id,a) values (676,90);
+insert into t (id,a) values (676,91);
+insert into t (id,a) values (676,92);
+insert into t (id,a) values (676,93);
+insert into t (id,a) values (676,94);
+insert into t (id,a) values (676,95);
+insert into t (id,a) values (676,96);
+insert into t (id,a) values (676,97);
+insert into t (id,a) values (676,98);
+insert into t (id,a) values (676,99);
+insert into t (id,a) values (677,0);
+insert into t (id,a) values (677,1);
+insert into t (id,a) values (677,2);
+insert into t (id,a) values (677,3);
+insert into t (id,a) values (677,4);
+insert into t (id,a) values (677,5);
+insert into t (id,a) values (677,6);
+insert into t (id,a) values (677,7);
+insert into t (id,a) values (677,8);
+insert into t (id,a) values (677,9);
+insert into t (id,a) values (677,10);
+insert into t (id,a) values (677,11);
+insert into t (id,a) values (677,12);
+insert into t (id,a) values (677,13);
+insert into t (id,a) values (677,14);
+insert into t (id,a) values (677,15);
+insert into t (id,a) values (677,16);
+insert into t (id,a) values (677,17);
+insert into t (id,a) values (677,18);
+insert into t (id,a) values (677,19);
+insert into t (id,a) values (677,20);
+insert into t (id,a) values (677,21);
+insert into t (id,a) values (677,22);
+insert into t (id,a) values (677,23);
+insert into t (id,a) values (677,24);
+insert into t (id,a) values (677,25);
+insert into t (id,a) values (677,26);
+insert into t (id,a) values (677,27);
+insert into t (id,a) values (677,28);
+insert into t (id,a) values (677,29);
+insert into t (id,a) values (677,30);
+insert into t (id,a) values (677,31);
+insert into t (id,a) values (677,32);
+insert into t (id,a) values (677,33);
+insert into t (id,a) values (677,34);
+insert into t (id,a) values (677,35);
+insert into t (id,a) values (677,36);
+insert into t (id,a) values (677,37);
+insert into t (id,a) values (677,38);
+insert into t (id,a) values (677,39);
+insert into t (id,a) values (677,40);
+insert into t (id,a) values (677,41);
+insert into t (id,a) values (677,42);
+insert into t (id,a) values (677,43);
+insert into t (id,a) values (677,44);
+insert into t (id,a) values (677,45);
+insert into t (id,a) values (677,46);
+insert into t (id,a) values (677,47);
+insert into t (id,a) values (677,48);
+insert into t (id,a) values (677,49);
+insert into t (id,a) values (677,50);
+insert into t (id,a) values (677,51);
+insert into t (id,a) values (677,52);
+insert into t (id,a) values (677,53);
+insert into t (id,a) values (677,54);
+insert into t (id,a) values (677,55);
+insert into t (id,a) values (677,56);
+insert into t (id,a) values (677,57);
+insert into t (id,a) values (677,58);
+insert into t (id,a) values (677,59);
+insert into t (id,a) values (677,60);
+insert into t (id,a) values (677,61);
+insert into t (id,a) values (677,62);
+insert into t (id,a) values (677,63);
+insert into t (id,a) values (677,64);
+insert into t (id,a) values (677,65);
+insert into t (id,a) values (677,66);
+insert into t (id,a) values (677,67);
+insert into t (id,a) values (677,68);
+insert into t (id,a) values (677,69);
+insert into t (id,a) values (677,70);
+insert into t (id,a) values (677,71);
+insert into t (id,a) values (677,72);
+insert into t (id,a) values (677,73);
+insert into t (id,a) values (677,74);
+insert into t (id,a) values (677,75);
+insert into t (id,a) values (677,76);
+insert into t (id,a) values (677,77);
+insert into t (id,a) values (677,78);
+insert into t (id,a) values (677,79);
+insert into t (id,a) values (677,80);
+insert into t (id,a) values (677,81);
+insert into t (id,a) values (677,82);
+insert into t (id,a) values (677,83);
+insert into t (id,a) values (677,84);
+insert into t (id,a) values (677,85);
+insert into t (id,a) values (677,86);
+insert into t (id,a) values (677,87);
+insert into t (id,a) values (677,88);
+insert into t (id,a) values (677,89);
+insert into t (id,a) values (677,90);
+insert into t (id,a) values (677,91);
+insert into t (id,a) values (677,92);
+insert into t (id,a) values (677,93);
+insert into t (id,a) values (677,94);
+insert into t (id,a) values (677,95);
+insert into t (id,a) values (677,96);
+insert into t (id,a) values (677,97);
+insert into t (id,a) values (677,98);
+insert into t (id,a) values (677,99);
+insert into t (id,a) values (678,0);
+insert into t (id,a) values (678,1);
+insert into t (id,a) values (678,2);
+insert into t (id,a) values (678,3);
+insert into t (id,a) values (678,4);
+insert into t (id,a) values (678,5);
+insert into t (id,a) values (678,6);
+insert into t (id,a) values (678,7);
+insert into t (id,a) values (678,8);
+insert into t (id,a) values (678,9);
+insert into t (id,a) values (678,10);
+insert into t (id,a) values (678,11);
+insert into t (id,a) values (678,12);
+insert into t (id,a) values (678,13);
+insert into t (id,a) values (678,14);
+insert into t (id,a) values (678,15);
+insert into t (id,a) values (678,16);
+insert into t (id,a) values (678,17);
+insert into t (id,a) values (678,18);
+insert into t (id,a) values (678,19);
+insert into t (id,a) values (678,20);
+insert into t (id,a) values (678,21);
+insert into t (id,a) values (678,22);
+insert into t (id,a) values (678,23);
+insert into t (id,a) values (678,24);
+insert into t (id,a) values (678,25);
+insert into t (id,a) values (678,26);
+insert into t (id,a) values (678,27);
+insert into t (id,a) values (678,28);
+insert into t (id,a) values (678,29);
+insert into t (id,a) values (678,30);
+insert into t (id,a) values (678,31);
+insert into t (id,a) values (678,32);
+insert into t (id,a) values (678,33);
+insert into t (id,a) values (678,34);
+insert into t (id,a) values (678,35);
+insert into t (id,a) values (678,36);
+insert into t (id,a) values (678,37);
+insert into t (id,a) values (678,38);
+insert into t (id,a) values (678,39);
+insert into t (id,a) values (678,40);
+insert into t (id,a) values (678,41);
+insert into t (id,a) values (678,42);
+insert into t (id,a) values (678,43);
+insert into t (id,a) values (678,44);
+insert into t (id,a) values (678,45);
+insert into t (id,a) values (678,46);
+insert into t (id,a) values (678,47);
+insert into t (id,a) values (678,48);
+insert into t (id,a) values (678,49);
+insert into t (id,a) values (678,50);
+insert into t (id,a) values (678,51);
+insert into t (id,a) values (678,52);
+insert into t (id,a) values (678,53);
+insert into t (id,a) values (678,54);
+insert into t (id,a) values (678,55);
+insert into t (id,a) values (678,56);
+insert into t (id,a) values (678,57);
+insert into t (id,a) values (678,58);
+insert into t (id,a) values (678,59);
+insert into t (id,a) values (678,60);
+insert into t (id,a) values (678,61);
+insert into t (id,a) values (678,62);
+insert into t (id,a) values (678,63);
+insert into t (id,a) values (678,64);
+insert into t (id,a) values (678,65);
+insert into t (id,a) values (678,66);
+insert into t (id,a) values (678,67);
+insert into t (id,a) values (678,68);
+insert into t (id,a) values (678,69);
+insert into t (id,a) values (678,70);
+insert into t (id,a) values (678,71);
+insert into t (id,a) values (678,72);
+insert into t (id,a) values (678,73);
+insert into t (id,a) values (678,74);
+insert into t (id,a) values (678,75);
+insert into t (id,a) values (678,76);
+insert into t (id,a) values (678,77);
+insert into t (id,a) values (678,78);
+insert into t (id,a) values (678,79);
+insert into t (id,a) values (678,80);
+insert into t (id,a) values (678,81);
+insert into t (id,a) values (678,82);
+insert into t (id,a) values (678,83);
+insert into t (id,a) values (678,84);
+insert into t (id,a) values (678,85);
+insert into t (id,a) values (678,86);
+insert into t (id,a) values (678,87);
+insert into t (id,a) values (678,88);
+insert into t (id,a) values (678,89);
+insert into t (id,a) values (678,90);
+insert into t (id,a) values (678,91);
+insert into t (id,a) values (678,92);
+insert into t (id,a) values (678,93);
+insert into t (id,a) values (678,94);
+insert into t (id,a) values (678,95);
+insert into t (id,a) values (678,96);
+insert into t (id,a) values (678,97);
+insert into t (id,a) values (678,98);
+insert into t (id,a) values (678,99);
+insert into t (id,a) values (679,0);
+insert into t (id,a) values (679,1);
+insert into t (id,a) values (679,2);
+insert into t (id,a) values (679,3);
+insert into t (id,a) values (679,4);
+insert into t (id,a) values (679,5);
+insert into t (id,a) values (679,6);
+insert into t (id,a) values (679,7);
+insert into t (id,a) values (679,8);
+insert into t (id,a) values (679,9);
+insert into t (id,a) values (679,10);
+insert into t (id,a) values (679,11);
+insert into t (id,a) values (679,12);
+insert into t (id,a) values (679,13);
+insert into t (id,a) values (679,14);
+insert into t (id,a) values (679,15);
+insert into t (id,a) values (679,16);
+insert into t (id,a) values (679,17);
+insert into t (id,a) values (679,18);
+insert into t (id,a) values (679,19);
+insert into t (id,a) values (679,20);
+insert into t (id,a) values (679,21);
+insert into t (id,a) values (679,22);
+insert into t (id,a) values (679,23);
+insert into t (id,a) values (679,24);
+insert into t (id,a) values (679,25);
+insert into t (id,a) values (679,26);
+insert into t (id,a) values (679,27);
+insert into t (id,a) values (679,28);
+insert into t (id,a) values (679,29);
+insert into t (id,a) values (679,30);
+insert into t (id,a) values (679,31);
+insert into t (id,a) values (679,32);
+insert into t (id,a) values (679,33);
+insert into t (id,a) values (679,34);
+insert into t (id,a) values (679,35);
+insert into t (id,a) values (679,36);
+insert into t (id,a) values (679,37);
+insert into t (id,a) values (679,38);
+insert into t (id,a) values (679,39);
+insert into t (id,a) values (679,40);
+insert into t (id,a) values (679,41);
+insert into t (id,a) values (679,42);
+insert into t (id,a) values (679,43);
+insert into t (id,a) values (679,44);
+insert into t (id,a) values (679,45);
+insert into t (id,a) values (679,46);
+insert into t (id,a) values (679,47);
+insert into t (id,a) values (679,48);
+insert into t (id,a) values (679,49);
+insert into t (id,a) values (679,50);
+insert into t (id,a) values (679,51);
+insert into t (id,a) values (679,52);
+insert into t (id,a) values (679,53);
+insert into t (id,a) values (679,54);
+insert into t (id,a) values (679,55);
+insert into t (id,a) values (679,56);
+insert into t (id,a) values (679,57);
+insert into t (id,a) values (679,58);
+insert into t (id,a) values (679,59);
+insert into t (id,a) values (679,60);
+insert into t (id,a) values (679,61);
+insert into t (id,a) values (679,62);
+insert into t (id,a) values (679,63);
+insert into t (id,a) values (679,64);
+insert into t (id,a) values (679,65);
+insert into t (id,a) values (679,66);
+insert into t (id,a) values (679,67);
+insert into t (id,a) values (679,68);
+insert into t (id,a) values (679,69);
+insert into t (id,a) values (679,70);
+insert into t (id,a) values (679,71);
+insert into t (id,a) values (679,72);
+insert into t (id,a) values (679,73);
+insert into t (id,a) values (679,74);
+insert into t (id,a) values (679,75);
+insert into t (id,a) values (679,76);
+insert into t (id,a) values (679,77);
+insert into t (id,a) values (679,78);
+insert into t (id,a) values (679,79);
+insert into t (id,a) values (679,80);
+insert into t (id,a) values (679,81);
+insert into t (id,a) values (679,82);
+insert into t (id,a) values (679,83);
+insert into t (id,a) values (679,84);
+insert into t (id,a) values (679,85);
+insert into t (id,a) values (679,86);
+insert into t (id,a) values (679,87);
+insert into t (id,a) values (679,88);
+insert into t (id,a) values (679,89);
+insert into t (id,a) values (679,90);
+insert into t (id,a) values (679,91);
+insert into t (id,a) values (679,92);
+insert into t (id,a) values (679,93);
+insert into t (id,a) values (679,94);
+insert into t (id,a) values (679,95);
+insert into t (id,a) values (679,96);
+insert into t (id,a) values (679,97);
+insert into t (id,a) values (679,98);
+insert into t (id,a) values (679,99);
+insert into t (id,a) values (680,0);
+insert into t (id,a) values (680,1);
+insert into t (id,a) values (680,2);
+insert into t (id,a) values (680,3);
+insert into t (id,a) values (680,4);
+insert into t (id,a) values (680,5);
+insert into t (id,a) values (680,6);
+insert into t (id,a) values (680,7);
+insert into t (id,a) values (680,8);
+insert into t (id,a) values (680,9);
+insert into t (id,a) values (680,10);
+insert into t (id,a) values (680,11);
+insert into t (id,a) values (680,12);
+insert into t (id,a) values (680,13);
+insert into t (id,a) values (680,14);
+insert into t (id,a) values (680,15);
+insert into t (id,a) values (680,16);
+insert into t (id,a) values (680,17);
+insert into t (id,a) values (680,18);
+insert into t (id,a) values (680,19);
+insert into t (id,a) values (680,20);
+insert into t (id,a) values (680,21);
+insert into t (id,a) values (680,22);
+insert into t (id,a) values (680,23);
+insert into t (id,a) values (680,24);
+insert into t (id,a) values (680,25);
+insert into t (id,a) values (680,26);
+insert into t (id,a) values (680,27);
+insert into t (id,a) values (680,28);
+insert into t (id,a) values (680,29);
+insert into t (id,a) values (680,30);
+insert into t (id,a) values (680,31);
+insert into t (id,a) values (680,32);
+insert into t (id,a) values (680,33);
+insert into t (id,a) values (680,34);
+insert into t (id,a) values (680,35);
+insert into t (id,a) values (680,36);
+insert into t (id,a) values (680,37);
+insert into t (id,a) values (680,38);
+insert into t (id,a) values (680,39);
+insert into t (id,a) values (680,40);
+insert into t (id,a) values (680,41);
+insert into t (id,a) values (680,42);
+insert into t (id,a) values (680,43);
+insert into t (id,a) values (680,44);
+insert into t (id,a) values (680,45);
+insert into t (id,a) values (680,46);
+insert into t (id,a) values (680,47);
+insert into t (id,a) values (680,48);
+insert into t (id,a) values (680,49);
+insert into t (id,a) values (680,50);
+insert into t (id,a) values (680,51);
+insert into t (id,a) values (680,52);
+insert into t (id,a) values (680,53);
+insert into t (id,a) values (680,54);
+insert into t (id,a) values (680,55);
+insert into t (id,a) values (680,56);
+insert into t (id,a) values (680,57);
+insert into t (id,a) values (680,58);
+insert into t (id,a) values (680,59);
+insert into t (id,a) values (680,60);
+insert into t (id,a) values (680,61);
+insert into t (id,a) values (680,62);
+insert into t (id,a) values (680,63);
+insert into t (id,a) values (680,64);
+insert into t (id,a) values (680,65);
+insert into t (id,a) values (680,66);
+insert into t (id,a) values (680,67);
+insert into t (id,a) values (680,68);
+insert into t (id,a) values (680,69);
+insert into t (id,a) values (680,70);
+insert into t (id,a) values (680,71);
+insert into t (id,a) values (680,72);
+insert into t (id,a) values (680,73);
+insert into t (id,a) values (680,74);
+insert into t (id,a) values (680,75);
+insert into t (id,a) values (680,76);
+insert into t (id,a) values (680,77);
+insert into t (id,a) values (680,78);
+insert into t (id,a) values (680,79);
+insert into t (id,a) values (680,80);
+insert into t (id,a) values (680,81);
+insert into t (id,a) values (680,82);
+insert into t (id,a) values (680,83);
+insert into t (id,a) values (680,84);
+insert into t (id,a) values (680,85);
+insert into t (id,a) values (680,86);
+insert into t (id,a) values (680,87);
+insert into t (id,a) values (680,88);
+insert into t (id,a) values (680,89);
+insert into t (id,a) values (680,90);
+insert into t (id,a) values (680,91);
+insert into t (id,a) values (680,92);
+insert into t (id,a) values (680,93);
+insert into t (id,a) values (680,94);
+insert into t (id,a) values (680,95);
+insert into t (id,a) values (680,96);
+insert into t (id,a) values (680,97);
+insert into t (id,a) values (680,98);
+insert into t (id,a) values (680,99);
+insert into t (id,a) values (681,0);
+insert into t (id,a) values (681,1);
+insert into t (id,a) values (681,2);
+insert into t (id,a) values (681,3);
+insert into t (id,a) values (681,4);
+insert into t (id,a) values (681,5);
+insert into t (id,a) values (681,6);
+insert into t (id,a) values (681,7);
+insert into t (id,a) values (681,8);
+insert into t (id,a) values (681,9);
+insert into t (id,a) values (681,10);
+insert into t (id,a) values (681,11);
+insert into t (id,a) values (681,12);
+insert into t (id,a) values (681,13);
+insert into t (id,a) values (681,14);
+insert into t (id,a) values (681,15);
+insert into t (id,a) values (681,16);
+insert into t (id,a) values (681,17);
+insert into t (id,a) values (681,18);
+insert into t (id,a) values (681,19);
+insert into t (id,a) values (681,20);
+insert into t (id,a) values (681,21);
+insert into t (id,a) values (681,22);
+insert into t (id,a) values (681,23);
+insert into t (id,a) values (681,24);
+insert into t (id,a) values (681,25);
+insert into t (id,a) values (681,26);
+insert into t (id,a) values (681,27);
+insert into t (id,a) values (681,28);
+insert into t (id,a) values (681,29);
+insert into t (id,a) values (681,30);
+insert into t (id,a) values (681,31);
+insert into t (id,a) values (681,32);
+insert into t (id,a) values (681,33);
+insert into t (id,a) values (681,34);
+insert into t (id,a) values (681,35);
+insert into t (id,a) values (681,36);
+insert into t (id,a) values (681,37);
+insert into t (id,a) values (681,38);
+insert into t (id,a) values (681,39);
+insert into t (id,a) values (681,40);
+insert into t (id,a) values (681,41);
+insert into t (id,a) values (681,42);
+insert into t (id,a) values (681,43);
+insert into t (id,a) values (681,44);
+insert into t (id,a) values (681,45);
+insert into t (id,a) values (681,46);
+insert into t (id,a) values (681,47);
+insert into t (id,a) values (681,48);
+insert into t (id,a) values (681,49);
+insert into t (id,a) values (681,50);
+insert into t (id,a) values (681,51);
+insert into t (id,a) values (681,52);
+insert into t (id,a) values (681,53);
+insert into t (id,a) values (681,54);
+insert into t (id,a) values (681,55);
+insert into t (id,a) values (681,56);
+insert into t (id,a) values (681,57);
+insert into t (id,a) values (681,58);
+insert into t (id,a) values (681,59);
+insert into t (id,a) values (681,60);
+insert into t (id,a) values (681,61);
+insert into t (id,a) values (681,62);
+insert into t (id,a) values (681,63);
+insert into t (id,a) values (681,64);
+insert into t (id,a) values (681,65);
+insert into t (id,a) values (681,66);
+insert into t (id,a) values (681,67);
+insert into t (id,a) values (681,68);
+insert into t (id,a) values (681,69);
+insert into t (id,a) values (681,70);
+insert into t (id,a) values (681,71);
+insert into t (id,a) values (681,72);
+insert into t (id,a) values (681,73);
+insert into t (id,a) values (681,74);
+insert into t (id,a) values (681,75);
+insert into t (id,a) values (681,76);
+insert into t (id,a) values (681,77);
+insert into t (id,a) values (681,78);
+insert into t (id,a) values (681,79);
+insert into t (id,a) values (681,80);
+insert into t (id,a) values (681,81);
+insert into t (id,a) values (681,82);
+insert into t (id,a) values (681,83);
+insert into t (id,a) values (681,84);
+insert into t (id,a) values (681,85);
+insert into t (id,a) values (681,86);
+insert into t (id,a) values (681,87);
+insert into t (id,a) values (681,88);
+insert into t (id,a) values (681,89);
+insert into t (id,a) values (681,90);
+insert into t (id,a) values (681,91);
+insert into t (id,a) values (681,92);
+insert into t (id,a) values (681,93);
+insert into t (id,a) values (681,94);
+insert into t (id,a) values (681,95);
+insert into t (id,a) values (681,96);
+insert into t (id,a) values (681,97);
+insert into t (id,a) values (681,98);
+insert into t (id,a) values (681,99);
+insert into t (id,a) values (682,0);
+insert into t (id,a) values (682,1);
+insert into t (id,a) values (682,2);
+insert into t (id,a) values (682,3);
+insert into t (id,a) values (682,4);
+insert into t (id,a) values (682,5);
+insert into t (id,a) values (682,6);
+insert into t (id,a) values (682,7);
+insert into t (id,a) values (682,8);
+insert into t (id,a) values (682,9);
+insert into t (id,a) values (682,10);
+insert into t (id,a) values (682,11);
+insert into t (id,a) values (682,12);
+insert into t (id,a) values (682,13);
+insert into t (id,a) values (682,14);
+insert into t (id,a) values (682,15);
+insert into t (id,a) values (682,16);
+insert into t (id,a) values (682,17);
+insert into t (id,a) values (682,18);
+insert into t (id,a) values (682,19);
+insert into t (id,a) values (682,20);
+insert into t (id,a) values (682,21);
+insert into t (id,a) values (682,22);
+insert into t (id,a) values (682,23);
+insert into t (id,a) values (682,24);
+insert into t (id,a) values (682,25);
+insert into t (id,a) values (682,26);
+insert into t (id,a) values (682,27);
+insert into t (id,a) values (682,28);
+insert into t (id,a) values (682,29);
+insert into t (id,a) values (682,30);
+insert into t (id,a) values (682,31);
+insert into t (id,a) values (682,32);
+insert into t (id,a) values (682,33);
+insert into t (id,a) values (682,34);
+insert into t (id,a) values (682,35);
+insert into t (id,a) values (682,36);
+insert into t (id,a) values (682,37);
+insert into t (id,a) values (682,38);
+insert into t (id,a) values (682,39);
+insert into t (id,a) values (682,40);
+insert into t (id,a) values (682,41);
+insert into t (id,a) values (682,42);
+insert into t (id,a) values (682,43);
+insert into t (id,a) values (682,44);
+insert into t (id,a) values (682,45);
+insert into t (id,a) values (682,46);
+insert into t (id,a) values (682,47);
+insert into t (id,a) values (682,48);
+insert into t (id,a) values (682,49);
+insert into t (id,a) values (682,50);
+insert into t (id,a) values (682,51);
+insert into t (id,a) values (682,52);
+insert into t (id,a) values (682,53);
+insert into t (id,a) values (682,54);
+insert into t (id,a) values (682,55);
+insert into t (id,a) values (682,56);
+insert into t (id,a) values (682,57);
+insert into t (id,a) values (682,58);
+insert into t (id,a) values (682,59);
+insert into t (id,a) values (682,60);
+insert into t (id,a) values (682,61);
+insert into t (id,a) values (682,62);
+insert into t (id,a) values (682,63);
+insert into t (id,a) values (682,64);
+insert into t (id,a) values (682,65);
+insert into t (id,a) values (682,66);
+insert into t (id,a) values (682,67);
+insert into t (id,a) values (682,68);
+insert into t (id,a) values (682,69);
+insert into t (id,a) values (682,70);
+insert into t (id,a) values (682,71);
+insert into t (id,a) values (682,72);
+insert into t (id,a) values (682,73);
+insert into t (id,a) values (682,74);
+insert into t (id,a) values (682,75);
+insert into t (id,a) values (682,76);
+insert into t (id,a) values (682,77);
+insert into t (id,a) values (682,78);
+insert into t (id,a) values (682,79);
+insert into t (id,a) values (682,80);
+insert into t (id,a) values (682,81);
+insert into t (id,a) values (682,82);
+insert into t (id,a) values (682,83);
+insert into t (id,a) values (682,84);
+insert into t (id,a) values (682,85);
+insert into t (id,a) values (682,86);
+insert into t (id,a) values (682,87);
+insert into t (id,a) values (682,88);
+insert into t (id,a) values (682,89);
+insert into t (id,a) values (682,90);
+insert into t (id,a) values (682,91);
+insert into t (id,a) values (682,92);
+insert into t (id,a) values (682,93);
+insert into t (id,a) values (682,94);
+insert into t (id,a) values (682,95);
+insert into t (id,a) values (682,96);
+insert into t (id,a) values (682,97);
+insert into t (id,a) values (682,98);
+insert into t (id,a) values (682,99);
+insert into t (id,a) values (683,0);
+insert into t (id,a) values (683,1);
+insert into t (id,a) values (683,2);
+insert into t (id,a) values (683,3);
+insert into t (id,a) values (683,4);
+insert into t (id,a) values (683,5);
+insert into t (id,a) values (683,6);
+insert into t (id,a) values (683,7);
+insert into t (id,a) values (683,8);
+insert into t (id,a) values (683,9);
+insert into t (id,a) values (683,10);
+insert into t (id,a) values (683,11);
+insert into t (id,a) values (683,12);
+insert into t (id,a) values (683,13);
+insert into t (id,a) values (683,14);
+insert into t (id,a) values (683,15);
+insert into t (id,a) values (683,16);
+insert into t (id,a) values (683,17);
+insert into t (id,a) values (683,18);
+insert into t (id,a) values (683,19);
+insert into t (id,a) values (683,20);
+insert into t (id,a) values (683,21);
+insert into t (id,a) values (683,22);
+insert into t (id,a) values (683,23);
+insert into t (id,a) values (683,24);
+insert into t (id,a) values (683,25);
+insert into t (id,a) values (683,26);
+insert into t (id,a) values (683,27);
+insert into t (id,a) values (683,28);
+insert into t (id,a) values (683,29);
+insert into t (id,a) values (683,30);
+insert into t (id,a) values (683,31);
+insert into t (id,a) values (683,32);
+insert into t (id,a) values (683,33);
+insert into t (id,a) values (683,34);
+insert into t (id,a) values (683,35);
+insert into t (id,a) values (683,36);
+insert into t (id,a) values (683,37);
+insert into t (id,a) values (683,38);
+insert into t (id,a) values (683,39);
+insert into t (id,a) values (683,40);
+insert into t (id,a) values (683,41);
+insert into t (id,a) values (683,42);
+insert into t (id,a) values (683,43);
+insert into t (id,a) values (683,44);
+insert into t (id,a) values (683,45);
+insert into t (id,a) values (683,46);
+insert into t (id,a) values (683,47);
+insert into t (id,a) values (683,48);
+insert into t (id,a) values (683,49);
+insert into t (id,a) values (683,50);
+insert into t (id,a) values (683,51);
+insert into t (id,a) values (683,52);
+insert into t (id,a) values (683,53);
+insert into t (id,a) values (683,54);
+insert into t (id,a) values (683,55);
+insert into t (id,a) values (683,56);
+insert into t (id,a) values (683,57);
+insert into t (id,a) values (683,58);
+insert into t (id,a) values (683,59);
+insert into t (id,a) values (683,60);
+insert into t (id,a) values (683,61);
+insert into t (id,a) values (683,62);
+insert into t (id,a) values (683,63);
+insert into t (id,a) values (683,64);
+insert into t (id,a) values (683,65);
+insert into t (id,a) values (683,66);
+insert into t (id,a) values (683,67);
+insert into t (id,a) values (683,68);
+insert into t (id,a) values (683,69);
+insert into t (id,a) values (683,70);
+insert into t (id,a) values (683,71);
+insert into t (id,a) values (683,72);
+insert into t (id,a) values (683,73);
+insert into t (id,a) values (683,74);
+insert into t (id,a) values (683,75);
+insert into t (id,a) values (683,76);
+insert into t (id,a) values (683,77);
+insert into t (id,a) values (683,78);
+insert into t (id,a) values (683,79);
+insert into t (id,a) values (683,80);
+insert into t (id,a) values (683,81);
+insert into t (id,a) values (683,82);
+insert into t (id,a) values (683,83);
+insert into t (id,a) values (683,84);
+insert into t (id,a) values (683,85);
+insert into t (id,a) values (683,86);
+insert into t (id,a) values (683,87);
+insert into t (id,a) values (683,88);
+insert into t (id,a) values (683,89);
+insert into t (id,a) values (683,90);
+insert into t (id,a) values (683,91);
+insert into t (id,a) values (683,92);
+insert into t (id,a) values (683,93);
+insert into t (id,a) values (683,94);
+insert into t (id,a) values (683,95);
+insert into t (id,a) values (683,96);
+insert into t (id,a) values (683,97);
+insert into t (id,a) values (683,98);
+insert into t (id,a) values (683,99);
+insert into t (id,a) values (684,0);
+insert into t (id,a) values (684,1);
+insert into t (id,a) values (684,2);
+insert into t (id,a) values (684,3);
+insert into t (id,a) values (684,4);
+insert into t (id,a) values (684,5);
+insert into t (id,a) values (684,6);
+insert into t (id,a) values (684,7);
+insert into t (id,a) values (684,8);
+insert into t (id,a) values (684,9);
+insert into t (id,a) values (684,10);
+insert into t (id,a) values (684,11);
+insert into t (id,a) values (684,12);
+insert into t (id,a) values (684,13);
+insert into t (id,a) values (684,14);
+insert into t (id,a) values (684,15);
+insert into t (id,a) values (684,16);
+insert into t (id,a) values (684,17);
+insert into t (id,a) values (684,18);
+insert into t (id,a) values (684,19);
+insert into t (id,a) values (684,20);
+insert into t (id,a) values (684,21);
+insert into t (id,a) values (684,22);
+insert into t (id,a) values (684,23);
+insert into t (id,a) values (684,24);
+insert into t (id,a) values (684,25);
+insert into t (id,a) values (684,26);
+insert into t (id,a) values (684,27);
+insert into t (id,a) values (684,28);
+insert into t (id,a) values (684,29);
+insert into t (id,a) values (684,30);
+insert into t (id,a) values (684,31);
+insert into t (id,a) values (684,32);
+insert into t (id,a) values (684,33);
+insert into t (id,a) values (684,34);
+insert into t (id,a) values (684,35);
+insert into t (id,a) values (684,36);
+insert into t (id,a) values (684,37);
+insert into t (id,a) values (684,38);
+insert into t (id,a) values (684,39);
+insert into t (id,a) values (684,40);
+insert into t (id,a) values (684,41);
+insert into t (id,a) values (684,42);
+insert into t (id,a) values (684,43);
+insert into t (id,a) values (684,44);
+insert into t (id,a) values (684,45);
+insert into t (id,a) values (684,46);
+insert into t (id,a) values (684,47);
+insert into t (id,a) values (684,48);
+insert into t (id,a) values (684,49);
+insert into t (id,a) values (684,50);
+insert into t (id,a) values (684,51);
+insert into t (id,a) values (684,52);
+insert into t (id,a) values (684,53);
+insert into t (id,a) values (684,54);
+insert into t (id,a) values (684,55);
+insert into t (id,a) values (684,56);
+insert into t (id,a) values (684,57);
+insert into t (id,a) values (684,58);
+insert into t (id,a) values (684,59);
+insert into t (id,a) values (684,60);
+insert into t (id,a) values (684,61);
+insert into t (id,a) values (684,62);
+insert into t (id,a) values (684,63);
+insert into t (id,a) values (684,64);
+insert into t (id,a) values (684,65);
+insert into t (id,a) values (684,66);
+insert into t (id,a) values (684,67);
+insert into t (id,a) values (684,68);
+insert into t (id,a) values (684,69);
+insert into t (id,a) values (684,70);
+insert into t (id,a) values (684,71);
+insert into t (id,a) values (684,72);
+insert into t (id,a) values (684,73);
+insert into t (id,a) values (684,74);
+insert into t (id,a) values (684,75);
+insert into t (id,a) values (684,76);
+insert into t (id,a) values (684,77);
+insert into t (id,a) values (684,78);
+insert into t (id,a) values (684,79);
+insert into t (id,a) values (684,80);
+insert into t (id,a) values (684,81);
+insert into t (id,a) values (684,82);
+insert into t (id,a) values (684,83);
+insert into t (id,a) values (684,84);
+insert into t (id,a) values (684,85);
+insert into t (id,a) values (684,86);
+insert into t (id,a) values (684,87);
+insert into t (id,a) values (684,88);
+insert into t (id,a) values (684,89);
+insert into t (id,a) values (684,90);
+insert into t (id,a) values (684,91);
+insert into t (id,a) values (684,92);
+insert into t (id,a) values (684,93);
+insert into t (id,a) values (684,94);
+insert into t (id,a) values (684,95);
+insert into t (id,a) values (684,96);
+insert into t (id,a) values (684,97);
+insert into t (id,a) values (684,98);
+insert into t (id,a) values (684,99);
+insert into t (id,a) values (685,0);
+insert into t (id,a) values (685,1);
+insert into t (id,a) values (685,2);
+insert into t (id,a) values (685,3);
+insert into t (id,a) values (685,4);
+insert into t (id,a) values (685,5);
+insert into t (id,a) values (685,6);
+insert into t (id,a) values (685,7);
+insert into t (id,a) values (685,8);
+insert into t (id,a) values (685,9);
+insert into t (id,a) values (685,10);
+insert into t (id,a) values (685,11);
+insert into t (id,a) values (685,12);
+insert into t (id,a) values (685,13);
+insert into t (id,a) values (685,14);
+insert into t (id,a) values (685,15);
+insert into t (id,a) values (685,16);
+insert into t (id,a) values (685,17);
+insert into t (id,a) values (685,18);
+insert into t (id,a) values (685,19);
+insert into t (id,a) values (685,20);
+insert into t (id,a) values (685,21);
+insert into t (id,a) values (685,22);
+insert into t (id,a) values (685,23);
+insert into t (id,a) values (685,24);
+insert into t (id,a) values (685,25);
+insert into t (id,a) values (685,26);
+insert into t (id,a) values (685,27);
+insert into t (id,a) values (685,28);
+insert into t (id,a) values (685,29);
+insert into t (id,a) values (685,30);
+insert into t (id,a) values (685,31);
+insert into t (id,a) values (685,32);
+insert into t (id,a) values (685,33);
+insert into t (id,a) values (685,34);
+insert into t (id,a) values (685,35);
+insert into t (id,a) values (685,36);
+insert into t (id,a) values (685,37);
+insert into t (id,a) values (685,38);
+insert into t (id,a) values (685,39);
+insert into t (id,a) values (685,40);
+insert into t (id,a) values (685,41);
+insert into t (id,a) values (685,42);
+insert into t (id,a) values (685,43);
+insert into t (id,a) values (685,44);
+insert into t (id,a) values (685,45);
+insert into t (id,a) values (685,46);
+insert into t (id,a) values (685,47);
+insert into t (id,a) values (685,48);
+insert into t (id,a) values (685,49);
+insert into t (id,a) values (685,50);
+insert into t (id,a) values (685,51);
+insert into t (id,a) values (685,52);
+insert into t (id,a) values (685,53);
+insert into t (id,a) values (685,54);
+insert into t (id,a) values (685,55);
+insert into t (id,a) values (685,56);
+insert into t (id,a) values (685,57);
+insert into t (id,a) values (685,58);
+insert into t (id,a) values (685,59);
+insert into t (id,a) values (685,60);
+insert into t (id,a) values (685,61);
+insert into t (id,a) values (685,62);
+insert into t (id,a) values (685,63);
+insert into t (id,a) values (685,64);
+insert into t (id,a) values (685,65);
+insert into t (id,a) values (685,66);
+insert into t (id,a) values (685,67);
+insert into t (id,a) values (685,68);
+insert into t (id,a) values (685,69);
+insert into t (id,a) values (685,70);
+insert into t (id,a) values (685,71);
+insert into t (id,a) values (685,72);
+insert into t (id,a) values (685,73);
+insert into t (id,a) values (685,74);
+insert into t (id,a) values (685,75);
+insert into t (id,a) values (685,76);
+insert into t (id,a) values (685,77);
+insert into t (id,a) values (685,78);
+insert into t (id,a) values (685,79);
+insert into t (id,a) values (685,80);
+insert into t (id,a) values (685,81);
+insert into t (id,a) values (685,82);
+insert into t (id,a) values (685,83);
+insert into t (id,a) values (685,84);
+insert into t (id,a) values (685,85);
+insert into t (id,a) values (685,86);
+insert into t (id,a) values (685,87);
+insert into t (id,a) values (685,88);
+insert into t (id,a) values (685,89);
+insert into t (id,a) values (685,90);
+insert into t (id,a) values (685,91);
+insert into t (id,a) values (685,92);
+insert into t (id,a) values (685,93);
+insert into t (id,a) values (685,94);
+insert into t (id,a) values (685,95);
+insert into t (id,a) values (685,96);
+insert into t (id,a) values (685,97);
+insert into t (id,a) values (685,98);
+insert into t (id,a) values (685,99);
+insert into t (id,a) values (686,0);
+insert into t (id,a) values (686,1);
+insert into t (id,a) values (686,2);
+insert into t (id,a) values (686,3);
+insert into t (id,a) values (686,4);
+insert into t (id,a) values (686,5);
+insert into t (id,a) values (686,6);
+insert into t (id,a) values (686,7);
+insert into t (id,a) values (686,8);
+insert into t (id,a) values (686,9);
+insert into t (id,a) values (686,10);
+insert into t (id,a) values (686,11);
+insert into t (id,a) values (686,12);
+insert into t (id,a) values (686,13);
+insert into t (id,a) values (686,14);
+insert into t (id,a) values (686,15);
+insert into t (id,a) values (686,16);
+insert into t (id,a) values (686,17);
+insert into t (id,a) values (686,18);
+insert into t (id,a) values (686,19);
+insert into t (id,a) values (686,20);
+insert into t (id,a) values (686,21);
+insert into t (id,a) values (686,22);
+insert into t (id,a) values (686,23);
+insert into t (id,a) values (686,24);
+insert into t (id,a) values (686,25);
+insert into t (id,a) values (686,26);
+insert into t (id,a) values (686,27);
+insert into t (id,a) values (686,28);
+insert into t (id,a) values (686,29);
+insert into t (id,a) values (686,30);
+insert into t (id,a) values (686,31);
+insert into t (id,a) values (686,32);
+insert into t (id,a) values (686,33);
+insert into t (id,a) values (686,34);
+insert into t (id,a) values (686,35);
+insert into t (id,a) values (686,36);
+insert into t (id,a) values (686,37);
+insert into t (id,a) values (686,38);
+insert into t (id,a) values (686,39);
+insert into t (id,a) values (686,40);
+insert into t (id,a) values (686,41);
+insert into t (id,a) values (686,42);
+insert into t (id,a) values (686,43);
+insert into t (id,a) values (686,44);
+insert into t (id,a) values (686,45);
+insert into t (id,a) values (686,46);
+insert into t (id,a) values (686,47);
+insert into t (id,a) values (686,48);
+insert into t (id,a) values (686,49);
+insert into t (id,a) values (686,50);
+insert into t (id,a) values (686,51);
+insert into t (id,a) values (686,52);
+insert into t (id,a) values (686,53);
+insert into t (id,a) values (686,54);
+insert into t (id,a) values (686,55);
+insert into t (id,a) values (686,56);
+insert into t (id,a) values (686,57);
+insert into t (id,a) values (686,58);
+insert into t (id,a) values (686,59);
+insert into t (id,a) values (686,60);
+insert into t (id,a) values (686,61);
+insert into t (id,a) values (686,62);
+insert into t (id,a) values (686,63);
+insert into t (id,a) values (686,64);
+insert into t (id,a) values (686,65);
+insert into t (id,a) values (686,66);
+insert into t (id,a) values (686,67);
+insert into t (id,a) values (686,68);
+insert into t (id,a) values (686,69);
+insert into t (id,a) values (686,70);
+insert into t (id,a) values (686,71);
+insert into t (id,a) values (686,72);
+insert into t (id,a) values (686,73);
+insert into t (id,a) values (686,74);
+insert into t (id,a) values (686,75);
+insert into t (id,a) values (686,76);
+insert into t (id,a) values (686,77);
+insert into t (id,a) values (686,78);
+insert into t (id,a) values (686,79);
+insert into t (id,a) values (686,80);
+insert into t (id,a) values (686,81);
+insert into t (id,a) values (686,82);
+insert into t (id,a) values (686,83);
+insert into t (id,a) values (686,84);
+insert into t (id,a) values (686,85);
+insert into t (id,a) values (686,86);
+insert into t (id,a) values (686,87);
+insert into t (id,a) values (686,88);
+insert into t (id,a) values (686,89);
+insert into t (id,a) values (686,90);
+insert into t (id,a) values (686,91);
+insert into t (id,a) values (686,92);
+insert into t (id,a) values (686,93);
+insert into t (id,a) values (686,94);
+insert into t (id,a) values (686,95);
+insert into t (id,a) values (686,96);
+insert into t (id,a) values (686,97);
+insert into t (id,a) values (686,98);
+insert into t (id,a) values (686,99);
+insert into t (id,a) values (687,0);
+insert into t (id,a) values (687,1);
+insert into t (id,a) values (687,2);
+insert into t (id,a) values (687,3);
+insert into t (id,a) values (687,4);
+insert into t (id,a) values (687,5);
+insert into t (id,a) values (687,6);
+insert into t (id,a) values (687,7);
+insert into t (id,a) values (687,8);
+insert into t (id,a) values (687,9);
+insert into t (id,a) values (687,10);
+insert into t (id,a) values (687,11);
+insert into t (id,a) values (687,12);
+insert into t (id,a) values (687,13);
+insert into t (id,a) values (687,14);
+insert into t (id,a) values (687,15);
+insert into t (id,a) values (687,16);
+insert into t (id,a) values (687,17);
+insert into t (id,a) values (687,18);
+insert into t (id,a) values (687,19);
+insert into t (id,a) values (687,20);
+insert into t (id,a) values (687,21);
+insert into t (id,a) values (687,22);
+insert into t (id,a) values (687,23);
+insert into t (id,a) values (687,24);
+insert into t (id,a) values (687,25);
+insert into t (id,a) values (687,26);
+insert into t (id,a) values (687,27);
+insert into t (id,a) values (687,28);
+insert into t (id,a) values (687,29);
+insert into t (id,a) values (687,30);
+insert into t (id,a) values (687,31);
+insert into t (id,a) values (687,32);
+insert into t (id,a) values (687,33);
+insert into t (id,a) values (687,34);
+insert into t (id,a) values (687,35);
+insert into t (id,a) values (687,36);
+insert into t (id,a) values (687,37);
+insert into t (id,a) values (687,38);
+insert into t (id,a) values (687,39);
+insert into t (id,a) values (687,40);
+insert into t (id,a) values (687,41);
+insert into t (id,a) values (687,42);
+insert into t (id,a) values (687,43);
+insert into t (id,a) values (687,44);
+insert into t (id,a) values (687,45);
+insert into t (id,a) values (687,46);
+insert into t (id,a) values (687,47);
+insert into t (id,a) values (687,48);
+insert into t (id,a) values (687,49);
+insert into t (id,a) values (687,50);
+insert into t (id,a) values (687,51);
+insert into t (id,a) values (687,52);
+insert into t (id,a) values (687,53);
+insert into t (id,a) values (687,54);
+insert into t (id,a) values (687,55);
+insert into t (id,a) values (687,56);
+insert into t (id,a) values (687,57);
+insert into t (id,a) values (687,58);
+insert into t (id,a) values (687,59);
+insert into t (id,a) values (687,60);
+insert into t (id,a) values (687,61);
+insert into t (id,a) values (687,62);
+insert into t (id,a) values (687,63);
+insert into t (id,a) values (687,64);
+insert into t (id,a) values (687,65);
+insert into t (id,a) values (687,66);
+insert into t (id,a) values (687,67);
+insert into t (id,a) values (687,68);
+insert into t (id,a) values (687,69);
+insert into t (id,a) values (687,70);
+insert into t (id,a) values (687,71);
+insert into t (id,a) values (687,72);
+insert into t (id,a) values (687,73);
+insert into t (id,a) values (687,74);
+insert into t (id,a) values (687,75);
+insert into t (id,a) values (687,76);
+insert into t (id,a) values (687,77);
+insert into t (id,a) values (687,78);
+insert into t (id,a) values (687,79);
+insert into t (id,a) values (687,80);
+insert into t (id,a) values (687,81);
+insert into t (id,a) values (687,82);
+insert into t (id,a) values (687,83);
+insert into t (id,a) values (687,84);
+insert into t (id,a) values (687,85);
+insert into t (id,a) values (687,86);
+insert into t (id,a) values (687,87);
+insert into t (id,a) values (687,88);
+insert into t (id,a) values (687,89);
+insert into t (id,a) values (687,90);
+insert into t (id,a) values (687,91);
+insert into t (id,a) values (687,92);
+insert into t (id,a) values (687,93);
+insert into t (id,a) values (687,94);
+insert into t (id,a) values (687,95);
+insert into t (id,a) values (687,96);
+insert into t (id,a) values (687,97);
+insert into t (id,a) values (687,98);
+insert into t (id,a) values (687,99);
+insert into t (id,a) values (688,0);
+insert into t (id,a) values (688,1);
+insert into t (id,a) values (688,2);
+insert into t (id,a) values (688,3);
+insert into t (id,a) values (688,4);
+insert into t (id,a) values (688,5);
+insert into t (id,a) values (688,6);
+insert into t (id,a) values (688,7);
+insert into t (id,a) values (688,8);
+insert into t (id,a) values (688,9);
+insert into t (id,a) values (688,10);
+insert into t (id,a) values (688,11);
+insert into t (id,a) values (688,12);
+insert into t (id,a) values (688,13);
+insert into t (id,a) values (688,14);
+insert into t (id,a) values (688,15);
+insert into t (id,a) values (688,16);
+insert into t (id,a) values (688,17);
+insert into t (id,a) values (688,18);
+insert into t (id,a) values (688,19);
+insert into t (id,a) values (688,20);
+insert into t (id,a) values (688,21);
+insert into t (id,a) values (688,22);
+insert into t (id,a) values (688,23);
+insert into t (id,a) values (688,24);
+insert into t (id,a) values (688,25);
+insert into t (id,a) values (688,26);
+insert into t (id,a) values (688,27);
+insert into t (id,a) values (688,28);
+insert into t (id,a) values (688,29);
+insert into t (id,a) values (688,30);
+insert into t (id,a) values (688,31);
+insert into t (id,a) values (688,32);
+insert into t (id,a) values (688,33);
+insert into t (id,a) values (688,34);
+insert into t (id,a) values (688,35);
+insert into t (id,a) values (688,36);
+insert into t (id,a) values (688,37);
+insert into t (id,a) values (688,38);
+insert into t (id,a) values (688,39);
+insert into t (id,a) values (688,40);
+insert into t (id,a) values (688,41);
+insert into t (id,a) values (688,42);
+insert into t (id,a) values (688,43);
+insert into t (id,a) values (688,44);
+insert into t (id,a) values (688,45);
+insert into t (id,a) values (688,46);
+insert into t (id,a) values (688,47);
+insert into t (id,a) values (688,48);
+insert into t (id,a) values (688,49);
+insert into t (id,a) values (688,50);
+insert into t (id,a) values (688,51);
+insert into t (id,a) values (688,52);
+insert into t (id,a) values (688,53);
+insert into t (id,a) values (688,54);
+insert into t (id,a) values (688,55);
+insert into t (id,a) values (688,56);
+insert into t (id,a) values (688,57);
+insert into t (id,a) values (688,58);
+insert into t (id,a) values (688,59);
+insert into t (id,a) values (688,60);
+insert into t (id,a) values (688,61);
+insert into t (id,a) values (688,62);
+insert into t (id,a) values (688,63);
+insert into t (id,a) values (688,64);
+insert into t (id,a) values (688,65);
+insert into t (id,a) values (688,66);
+insert into t (id,a) values (688,67);
+insert into t (id,a) values (688,68);
+insert into t (id,a) values (688,69);
+insert into t (id,a) values (688,70);
+insert into t (id,a) values (688,71);
+insert into t (id,a) values (688,72);
+insert into t (id,a) values (688,73);
+insert into t (id,a) values (688,74);
+insert into t (id,a) values (688,75);
+insert into t (id,a) values (688,76);
+insert into t (id,a) values (688,77);
+insert into t (id,a) values (688,78);
+insert into t (id,a) values (688,79);
+insert into t (id,a) values (688,80);
+insert into t (id,a) values (688,81);
+insert into t (id,a) values (688,82);
+insert into t (id,a) values (688,83);
+insert into t (id,a) values (688,84);
+insert into t (id,a) values (688,85);
+insert into t (id,a) values (688,86);
+insert into t (id,a) values (688,87);
+insert into t (id,a) values (688,88);
+insert into t (id,a) values (688,89);
+insert into t (id,a) values (688,90);
+insert into t (id,a) values (688,91);
+insert into t (id,a) values (688,92);
+insert into t (id,a) values (688,93);
+insert into t (id,a) values (688,94);
+insert into t (id,a) values (688,95);
+insert into t (id,a) values (688,96);
+insert into t (id,a) values (688,97);
+insert into t (id,a) values (688,98);
+insert into t (id,a) values (688,99);
+insert into t (id,a) values (689,0);
+insert into t (id,a) values (689,1);
+insert into t (id,a) values (689,2);
+insert into t (id,a) values (689,3);
+insert into t (id,a) values (689,4);
+insert into t (id,a) values (689,5);
+insert into t (id,a) values (689,6);
+insert into t (id,a) values (689,7);
+insert into t (id,a) values (689,8);
+insert into t (id,a) values (689,9);
+insert into t (id,a) values (689,10);
+insert into t (id,a) values (689,11);
+insert into t (id,a) values (689,12);
+insert into t (id,a) values (689,13);
+insert into t (id,a) values (689,14);
+insert into t (id,a) values (689,15);
+insert into t (id,a) values (689,16);
+insert into t (id,a) values (689,17);
+insert into t (id,a) values (689,18);
+insert into t (id,a) values (689,19);
+insert into t (id,a) values (689,20);
+insert into t (id,a) values (689,21);
+insert into t (id,a) values (689,22);
+insert into t (id,a) values (689,23);
+insert into t (id,a) values (689,24);
+insert into t (id,a) values (689,25);
+insert into t (id,a) values (689,26);
+insert into t (id,a) values (689,27);
+insert into t (id,a) values (689,28);
+insert into t (id,a) values (689,29);
+insert into t (id,a) values (689,30);
+insert into t (id,a) values (689,31);
+insert into t (id,a) values (689,32);
+insert into t (id,a) values (689,33);
+insert into t (id,a) values (689,34);
+insert into t (id,a) values (689,35);
+insert into t (id,a) values (689,36);
+insert into t (id,a) values (689,37);
+insert into t (id,a) values (689,38);
+insert into t (id,a) values (689,39);
+insert into t (id,a) values (689,40);
+insert into t (id,a) values (689,41);
+insert into t (id,a) values (689,42);
+insert into t (id,a) values (689,43);
+insert into t (id,a) values (689,44);
+insert into t (id,a) values (689,45);
+insert into t (id,a) values (689,46);
+insert into t (id,a) values (689,47);
+insert into t (id,a) values (689,48);
+insert into t (id,a) values (689,49);
+insert into t (id,a) values (689,50);
+insert into t (id,a) values (689,51);
+insert into t (id,a) values (689,52);
+insert into t (id,a) values (689,53);
+insert into t (id,a) values (689,54);
+insert into t (id,a) values (689,55);
+insert into t (id,a) values (689,56);
+insert into t (id,a) values (689,57);
+insert into t (id,a) values (689,58);
+insert into t (id,a) values (689,59);
+insert into t (id,a) values (689,60);
+insert into t (id,a) values (689,61);
+insert into t (id,a) values (689,62);
+insert into t (id,a) values (689,63);
+insert into t (id,a) values (689,64);
+insert into t (id,a) values (689,65);
+insert into t (id,a) values (689,66);
+insert into t (id,a) values (689,67);
+insert into t (id,a) values (689,68);
+insert into t (id,a) values (689,69);
+insert into t (id,a) values (689,70);
+insert into t (id,a) values (689,71);
+insert into t (id,a) values (689,72);
+insert into t (id,a) values (689,73);
+insert into t (id,a) values (689,74);
+insert into t (id,a) values (689,75);
+insert into t (id,a) values (689,76);
+insert into t (id,a) values (689,77);
+insert into t (id,a) values (689,78);
+insert into t (id,a) values (689,79);
+insert into t (id,a) values (689,80);
+insert into t (id,a) values (689,81);
+insert into t (id,a) values (689,82);
+insert into t (id,a) values (689,83);
+insert into t (id,a) values (689,84);
+insert into t (id,a) values (689,85);
+insert into t (id,a) values (689,86);
+insert into t (id,a) values (689,87);
+insert into t (id,a) values (689,88);
+insert into t (id,a) values (689,89);
+insert into t (id,a) values (689,90);
+insert into t (id,a) values (689,91);
+insert into t (id,a) values (689,92);
+insert into t (id,a) values (689,93);
+insert into t (id,a) values (689,94);
+insert into t (id,a) values (689,95);
+insert into t (id,a) values (689,96);
+insert into t (id,a) values (689,97);
+insert into t (id,a) values (689,98);
+insert into t (id,a) values (689,99);
+insert into t (id,a) values (690,0);
+insert into t (id,a) values (690,1);
+insert into t (id,a) values (690,2);
+insert into t (id,a) values (690,3);
+insert into t (id,a) values (690,4);
+insert into t (id,a) values (690,5);
+insert into t (id,a) values (690,6);
+insert into t (id,a) values (690,7);
+insert into t (id,a) values (690,8);
+insert into t (id,a) values (690,9);
+insert into t (id,a) values (690,10);
+insert into t (id,a) values (690,11);
+insert into t (id,a) values (690,12);
+insert into t (id,a) values (690,13);
+insert into t (id,a) values (690,14);
+insert into t (id,a) values (690,15);
+insert into t (id,a) values (690,16);
+insert into t (id,a) values (690,17);
+insert into t (id,a) values (690,18);
+insert into t (id,a) values (690,19);
+insert into t (id,a) values (690,20);
+insert into t (id,a) values (690,21);
+insert into t (id,a) values (690,22);
+insert into t (id,a) values (690,23);
+insert into t (id,a) values (690,24);
+insert into t (id,a) values (690,25);
+insert into t (id,a) values (690,26);
+insert into t (id,a) values (690,27);
+insert into t (id,a) values (690,28);
+insert into t (id,a) values (690,29);
+insert into t (id,a) values (690,30);
+insert into t (id,a) values (690,31);
+insert into t (id,a) values (690,32);
+insert into t (id,a) values (690,33);
+insert into t (id,a) values (690,34);
+insert into t (id,a) values (690,35);
+insert into t (id,a) values (690,36);
+insert into t (id,a) values (690,37);
+insert into t (id,a) values (690,38);
+insert into t (id,a) values (690,39);
+insert into t (id,a) values (690,40);
+insert into t (id,a) values (690,41);
+insert into t (id,a) values (690,42);
+insert into t (id,a) values (690,43);
+insert into t (id,a) values (690,44);
+insert into t (id,a) values (690,45);
+insert into t (id,a) values (690,46);
+insert into t (id,a) values (690,47);
+insert into t (id,a) values (690,48);
+insert into t (id,a) values (690,49);
+insert into t (id,a) values (690,50);
+insert into t (id,a) values (690,51);
+insert into t (id,a) values (690,52);
+insert into t (id,a) values (690,53);
+insert into t (id,a) values (690,54);
+insert into t (id,a) values (690,55);
+insert into t (id,a) values (690,56);
+insert into t (id,a) values (690,57);
+insert into t (id,a) values (690,58);
+insert into t (id,a) values (690,59);
+insert into t (id,a) values (690,60);
+insert into t (id,a) values (690,61);
+insert into t (id,a) values (690,62);
+insert into t (id,a) values (690,63);
+insert into t (id,a) values (690,64);
+insert into t (id,a) values (690,65);
+insert into t (id,a) values (690,66);
+insert into t (id,a) values (690,67);
+insert into t (id,a) values (690,68);
+insert into t (id,a) values (690,69);
+insert into t (id,a) values (690,70);
+insert into t (id,a) values (690,71);
+insert into t (id,a) values (690,72);
+insert into t (id,a) values (690,73);
+insert into t (id,a) values (690,74);
+insert into t (id,a) values (690,75);
+insert into t (id,a) values (690,76);
+insert into t (id,a) values (690,77);
+insert into t (id,a) values (690,78);
+insert into t (id,a) values (690,79);
+insert into t (id,a) values (690,80);
+insert into t (id,a) values (690,81);
+insert into t (id,a) values (690,82);
+insert into t (id,a) values (690,83);
+insert into t (id,a) values (690,84);
+insert into t (id,a) values (690,85);
+insert into t (id,a) values (690,86);
+insert into t (id,a) values (690,87);
+insert into t (id,a) values (690,88);
+insert into t (id,a) values (690,89);
+insert into t (id,a) values (690,90);
+insert into t (id,a) values (690,91);
+insert into t (id,a) values (690,92);
+insert into t (id,a) values (690,93);
+insert into t (id,a) values (690,94);
+insert into t (id,a) values (690,95);
+insert into t (id,a) values (690,96);
+insert into t (id,a) values (690,97);
+insert into t (id,a) values (690,98);
+insert into t (id,a) values (690,99);
+insert into t (id,a) values (691,0);
+insert into t (id,a) values (691,1);
+insert into t (id,a) values (691,2);
+insert into t (id,a) values (691,3);
+insert into t (id,a) values (691,4);
+insert into t (id,a) values (691,5);
+insert into t (id,a) values (691,6);
+insert into t (id,a) values (691,7);
+insert into t (id,a) values (691,8);
+insert into t (id,a) values (691,9);
+insert into t (id,a) values (691,10);
+insert into t (id,a) values (691,11);
+insert into t (id,a) values (691,12);
+insert into t (id,a) values (691,13);
+insert into t (id,a) values (691,14);
+insert into t (id,a) values (691,15);
+insert into t (id,a) values (691,16);
+insert into t (id,a) values (691,17);
+insert into t (id,a) values (691,18);
+insert into t (id,a) values (691,19);
+insert into t (id,a) values (691,20);
+insert into t (id,a) values (691,21);
+insert into t (id,a) values (691,22);
+insert into t (id,a) values (691,23);
+insert into t (id,a) values (691,24);
+insert into t (id,a) values (691,25);
+insert into t (id,a) values (691,26);
+insert into t (id,a) values (691,27);
+insert into t (id,a) values (691,28);
+insert into t (id,a) values (691,29);
+insert into t (id,a) values (691,30);
+insert into t (id,a) values (691,31);
+insert into t (id,a) values (691,32);
+insert into t (id,a) values (691,33);
+insert into t (id,a) values (691,34);
+insert into t (id,a) values (691,35);
+insert into t (id,a) values (691,36);
+insert into t (id,a) values (691,37);
+insert into t (id,a) values (691,38);
+insert into t (id,a) values (691,39);
+insert into t (id,a) values (691,40);
+insert into t (id,a) values (691,41);
+insert into t (id,a) values (691,42);
+insert into t (id,a) values (691,43);
+insert into t (id,a) values (691,44);
+insert into t (id,a) values (691,45);
+insert into t (id,a) values (691,46);
+insert into t (id,a) values (691,47);
+insert into t (id,a) values (691,48);
+insert into t (id,a) values (691,49);
+insert into t (id,a) values (691,50);
+insert into t (id,a) values (691,51);
+insert into t (id,a) values (691,52);
+insert into t (id,a) values (691,53);
+insert into t (id,a) values (691,54);
+insert into t (id,a) values (691,55);
+insert into t (id,a) values (691,56);
+insert into t (id,a) values (691,57);
+insert into t (id,a) values (691,58);
+insert into t (id,a) values (691,59);
+insert into t (id,a) values (691,60);
+insert into t (id,a) values (691,61);
+insert into t (id,a) values (691,62);
+insert into t (id,a) values (691,63);
+insert into t (id,a) values (691,64);
+insert into t (id,a) values (691,65);
+insert into t (id,a) values (691,66);
+insert into t (id,a) values (691,67);
+insert into t (id,a) values (691,68);
+insert into t (id,a) values (691,69);
+insert into t (id,a) values (691,70);
+insert into t (id,a) values (691,71);
+insert into t (id,a) values (691,72);
+insert into t (id,a) values (691,73);
+insert into t (id,a) values (691,74);
+insert into t (id,a) values (691,75);
+insert into t (id,a) values (691,76);
+insert into t (id,a) values (691,77);
+insert into t (id,a) values (691,78);
+insert into t (id,a) values (691,79);
+insert into t (id,a) values (691,80);
+insert into t (id,a) values (691,81);
+insert into t (id,a) values (691,82);
+insert into t (id,a) values (691,83);
+insert into t (id,a) values (691,84);
+insert into t (id,a) values (691,85);
+insert into t (id,a) values (691,86);
+insert into t (id,a) values (691,87);
+insert into t (id,a) values (691,88);
+insert into t (id,a) values (691,89);
+insert into t (id,a) values (691,90);
+insert into t (id,a) values (691,91);
+insert into t (id,a) values (691,92);
+insert into t (id,a) values (691,93);
+insert into t (id,a) values (691,94);
+insert into t (id,a) values (691,95);
+insert into t (id,a) values (691,96);
+insert into t (id,a) values (691,97);
+insert into t (id,a) values (691,98);
+insert into t (id,a) values (691,99);
+insert into t (id,a) values (692,0);
+insert into t (id,a) values (692,1);
+insert into t (id,a) values (692,2);
+insert into t (id,a) values (692,3);
+insert into t (id,a) values (692,4);
+insert into t (id,a) values (692,5);
+insert into t (id,a) values (692,6);
+insert into t (id,a) values (692,7);
+insert into t (id,a) values (692,8);
+insert into t (id,a) values (692,9);
+insert into t (id,a) values (692,10);
+insert into t (id,a) values (692,11);
+insert into t (id,a) values (692,12);
+insert into t (id,a) values (692,13);
+insert into t (id,a) values (692,14);
+insert into t (id,a) values (692,15);
+insert into t (id,a) values (692,16);
+insert into t (id,a) values (692,17);
+insert into t (id,a) values (692,18);
+insert into t (id,a) values (692,19);
+insert into t (id,a) values (692,20);
+insert into t (id,a) values (692,21);
+insert into t (id,a) values (692,22);
+insert into t (id,a) values (692,23);
+insert into t (id,a) values (692,24);
+insert into t (id,a) values (692,25);
+insert into t (id,a) values (692,26);
+insert into t (id,a) values (692,27);
+insert into t (id,a) values (692,28);
+insert into t (id,a) values (692,29);
+insert into t (id,a) values (692,30);
+insert into t (id,a) values (692,31);
+insert into t (id,a) values (692,32);
+insert into t (id,a) values (692,33);
+insert into t (id,a) values (692,34);
+insert into t (id,a) values (692,35);
+insert into t (id,a) values (692,36);
+insert into t (id,a) values (692,37);
+insert into t (id,a) values (692,38);
+insert into t (id,a) values (692,39);
+insert into t (id,a) values (692,40);
+insert into t (id,a) values (692,41);
+insert into t (id,a) values (692,42);
+insert into t (id,a) values (692,43);
+insert into t (id,a) values (692,44);
+insert into t (id,a) values (692,45);
+insert into t (id,a) values (692,46);
+insert into t (id,a) values (692,47);
+insert into t (id,a) values (692,48);
+insert into t (id,a) values (692,49);
+insert into t (id,a) values (692,50);
+insert into t (id,a) values (692,51);
+insert into t (id,a) values (692,52);
+insert into t (id,a) values (692,53);
+insert into t (id,a) values (692,54);
+insert into t (id,a) values (692,55);
+insert into t (id,a) values (692,56);
+insert into t (id,a) values (692,57);
+insert into t (id,a) values (692,58);
+insert into t (id,a) values (692,59);
+insert into t (id,a) values (692,60);
+insert into t (id,a) values (692,61);
+insert into t (id,a) values (692,62);
+insert into t (id,a) values (692,63);
+insert into t (id,a) values (692,64);
+insert into t (id,a) values (692,65);
+insert into t (id,a) values (692,66);
+insert into t (id,a) values (692,67);
+insert into t (id,a) values (692,68);
+insert into t (id,a) values (692,69);
+insert into t (id,a) values (692,70);
+insert into t (id,a) values (692,71);
+insert into t (id,a) values (692,72);
+insert into t (id,a) values (692,73);
+insert into t (id,a) values (692,74);
+insert into t (id,a) values (692,75);
+insert into t (id,a) values (692,76);
+insert into t (id,a) values (692,77);
+insert into t (id,a) values (692,78);
+insert into t (id,a) values (692,79);
+insert into t (id,a) values (692,80);
+insert into t (id,a) values (692,81);
+insert into t (id,a) values (692,82);
+insert into t (id,a) values (692,83);
+insert into t (id,a) values (692,84);
+insert into t (id,a) values (692,85);
+insert into t (id,a) values (692,86);
+insert into t (id,a) values (692,87);
+insert into t (id,a) values (692,88);
+insert into t (id,a) values (692,89);
+insert into t (id,a) values (692,90);
+insert into t (id,a) values (692,91);
+insert into t (id,a) values (692,92);
+insert into t (id,a) values (692,93);
+insert into t (id,a) values (692,94);
+insert into t (id,a) values (692,95);
+insert into t (id,a) values (692,96);
+insert into t (id,a) values (692,97);
+insert into t (id,a) values (692,98);
+insert into t (id,a) values (692,99);
+insert into t (id,a) values (693,0);
+insert into t (id,a) values (693,1);
+insert into t (id,a) values (693,2);
+insert into t (id,a) values (693,3);
+insert into t (id,a) values (693,4);
+insert into t (id,a) values (693,5);
+insert into t (id,a) values (693,6);
+insert into t (id,a) values (693,7);
+insert into t (id,a) values (693,8);
+insert into t (id,a) values (693,9);
+insert into t (id,a) values (693,10);
+insert into t (id,a) values (693,11);
+insert into t (id,a) values (693,12);
+insert into t (id,a) values (693,13);
+insert into t (id,a) values (693,14);
+insert into t (id,a) values (693,15);
+insert into t (id,a) values (693,16);
+insert into t (id,a) values (693,17);
+insert into t (id,a) values (693,18);
+insert into t (id,a) values (693,19);
+insert into t (id,a) values (693,20);
+insert into t (id,a) values (693,21);
+insert into t (id,a) values (693,22);
+insert into t (id,a) values (693,23);
+insert into t (id,a) values (693,24);
+insert into t (id,a) values (693,25);
+insert into t (id,a) values (693,26);
+insert into t (id,a) values (693,27);
+insert into t (id,a) values (693,28);
+insert into t (id,a) values (693,29);
+insert into t (id,a) values (693,30);
+insert into t (id,a) values (693,31);
+insert into t (id,a) values (693,32);
+insert into t (id,a) values (693,33);
+insert into t (id,a) values (693,34);
+insert into t (id,a) values (693,35);
+insert into t (id,a) values (693,36);
+insert into t (id,a) values (693,37);
+insert into t (id,a) values (693,38);
+insert into t (id,a) values (693,39);
+insert into t (id,a) values (693,40);
+insert into t (id,a) values (693,41);
+insert into t (id,a) values (693,42);
+insert into t (id,a) values (693,43);
+insert into t (id,a) values (693,44);
+insert into t (id,a) values (693,45);
+insert into t (id,a) values (693,46);
+insert into t (id,a) values (693,47);
+insert into t (id,a) values (693,48);
+insert into t (id,a) values (693,49);
+insert into t (id,a) values (693,50);
+insert into t (id,a) values (693,51);
+insert into t (id,a) values (693,52);
+insert into t (id,a) values (693,53);
+insert into t (id,a) values (693,54);
+insert into t (id,a) values (693,55);
+insert into t (id,a) values (693,56);
+insert into t (id,a) values (693,57);
+insert into t (id,a) values (693,58);
+insert into t (id,a) values (693,59);
+insert into t (id,a) values (693,60);
+insert into t (id,a) values (693,61);
+insert into t (id,a) values (693,62);
+insert into t (id,a) values (693,63);
+insert into t (id,a) values (693,64);
+insert into t (id,a) values (693,65);
+insert into t (id,a) values (693,66);
+insert into t (id,a) values (693,67);
+insert into t (id,a) values (693,68);
+insert into t (id,a) values (693,69);
+insert into t (id,a) values (693,70);
+insert into t (id,a) values (693,71);
+insert into t (id,a) values (693,72);
+insert into t (id,a) values (693,73);
+insert into t (id,a) values (693,74);
+insert into t (id,a) values (693,75);
+insert into t (id,a) values (693,76);
+insert into t (id,a) values (693,77);
+insert into t (id,a) values (693,78);
+insert into t (id,a) values (693,79);
+insert into t (id,a) values (693,80);
+insert into t (id,a) values (693,81);
+insert into t (id,a) values (693,82);
+insert into t (id,a) values (693,83);
+insert into t (id,a) values (693,84);
+insert into t (id,a) values (693,85);
+insert into t (id,a) values (693,86);
+insert into t (id,a) values (693,87);
+insert into t (id,a) values (693,88);
+insert into t (id,a) values (693,89);
+insert into t (id,a) values (693,90);
+insert into t (id,a) values (693,91);
+insert into t (id,a) values (693,92);
+insert into t (id,a) values (693,93);
+insert into t (id,a) values (693,94);
+insert into t (id,a) values (693,95);
+insert into t (id,a) values (693,96);
+insert into t (id,a) values (693,97);
+insert into t (id,a) values (693,98);
+insert into t (id,a) values (693,99);
+insert into t (id,a) values (694,0);
+insert into t (id,a) values (694,1);
+insert into t (id,a) values (694,2);
+insert into t (id,a) values (694,3);
+insert into t (id,a) values (694,4);
+insert into t (id,a) values (694,5);
+insert into t (id,a) values (694,6);
+insert into t (id,a) values (694,7);
+insert into t (id,a) values (694,8);
+insert into t (id,a) values (694,9);
+insert into t (id,a) values (694,10);
+insert into t (id,a) values (694,11);
+insert into t (id,a) values (694,12);
+insert into t (id,a) values (694,13);
+insert into t (id,a) values (694,14);
+insert into t (id,a) values (694,15);
+insert into t (id,a) values (694,16);
+insert into t (id,a) values (694,17);
+insert into t (id,a) values (694,18);
+insert into t (id,a) values (694,19);
+insert into t (id,a) values (694,20);
+insert into t (id,a) values (694,21);
+insert into t (id,a) values (694,22);
+insert into t (id,a) values (694,23);
+insert into t (id,a) values (694,24);
+insert into t (id,a) values (694,25);
+insert into t (id,a) values (694,26);
+insert into t (id,a) values (694,27);
+insert into t (id,a) values (694,28);
+insert into t (id,a) values (694,29);
+insert into t (id,a) values (694,30);
+insert into t (id,a) values (694,31);
+insert into t (id,a) values (694,32);
+insert into t (id,a) values (694,33);
+insert into t (id,a) values (694,34);
+insert into t (id,a) values (694,35);
+insert into t (id,a) values (694,36);
+insert into t (id,a) values (694,37);
+insert into t (id,a) values (694,38);
+insert into t (id,a) values (694,39);
+insert into t (id,a) values (694,40);
+insert into t (id,a) values (694,41);
+insert into t (id,a) values (694,42);
+insert into t (id,a) values (694,43);
+insert into t (id,a) values (694,44);
+insert into t (id,a) values (694,45);
+insert into t (id,a) values (694,46);
+insert into t (id,a) values (694,47);
+insert into t (id,a) values (694,48);
+insert into t (id,a) values (694,49);
+insert into t (id,a) values (694,50);
+insert into t (id,a) values (694,51);
+insert into t (id,a) values (694,52);
+insert into t (id,a) values (694,53);
+insert into t (id,a) values (694,54);
+insert into t (id,a) values (694,55);
+insert into t (id,a) values (694,56);
+insert into t (id,a) values (694,57);
+insert into t (id,a) values (694,58);
+insert into t (id,a) values (694,59);
+insert into t (id,a) values (694,60);
+insert into t (id,a) values (694,61);
+insert into t (id,a) values (694,62);
+insert into t (id,a) values (694,63);
+insert into t (id,a) values (694,64);
+insert into t (id,a) values (694,65);
+insert into t (id,a) values (694,66);
+insert into t (id,a) values (694,67);
+insert into t (id,a) values (694,68);
+insert into t (id,a) values (694,69);
+insert into t (id,a) values (694,70);
+insert into t (id,a) values (694,71);
+insert into t (id,a) values (694,72);
+insert into t (id,a) values (694,73);
+insert into t (id,a) values (694,74);
+insert into t (id,a) values (694,75);
+insert into t (id,a) values (694,76);
+insert into t (id,a) values (694,77);
+insert into t (id,a) values (694,78);
+insert into t (id,a) values (694,79);
+insert into t (id,a) values (694,80);
+insert into t (id,a) values (694,81);
+insert into t (id,a) values (694,82);
+insert into t (id,a) values (694,83);
+insert into t (id,a) values (694,84);
+insert into t (id,a) values (694,85);
+insert into t (id,a) values (694,86);
+insert into t (id,a) values (694,87);
+insert into t (id,a) values (694,88);
+insert into t (id,a) values (694,89);
+insert into t (id,a) values (694,90);
+insert into t (id,a) values (694,91);
+insert into t (id,a) values (694,92);
+insert into t (id,a) values (694,93);
+insert into t (id,a) values (694,94);
+insert into t (id,a) values (694,95);
+insert into t (id,a) values (694,96);
+insert into t (id,a) values (694,97);
+insert into t (id,a) values (694,98);
+insert into t (id,a) values (694,99);
+insert into t (id,a) values (695,0);
+insert into t (id,a) values (695,1);
+insert into t (id,a) values (695,2);
+insert into t (id,a) values (695,3);
+insert into t (id,a) values (695,4);
+insert into t (id,a) values (695,5);
+insert into t (id,a) values (695,6);
+insert into t (id,a) values (695,7);
+insert into t (id,a) values (695,8);
+insert into t (id,a) values (695,9);
+insert into t (id,a) values (695,10);
+insert into t (id,a) values (695,11);
+insert into t (id,a) values (695,12);
+insert into t (id,a) values (695,13);
+insert into t (id,a) values (695,14);
+insert into t (id,a) values (695,15);
+insert into t (id,a) values (695,16);
+insert into t (id,a) values (695,17);
+insert into t (id,a) values (695,18);
+insert into t (id,a) values (695,19);
+insert into t (id,a) values (695,20);
+insert into t (id,a) values (695,21);
+insert into t (id,a) values (695,22);
+insert into t (id,a) values (695,23);
+insert into t (id,a) values (695,24);
+insert into t (id,a) values (695,25);
+insert into t (id,a) values (695,26);
+insert into t (id,a) values (695,27);
+insert into t (id,a) values (695,28);
+insert into t (id,a) values (695,29);
+insert into t (id,a) values (695,30);
+insert into t (id,a) values (695,31);
+insert into t (id,a) values (695,32);
+insert into t (id,a) values (695,33);
+insert into t (id,a) values (695,34);
+insert into t (id,a) values (695,35);
+insert into t (id,a) values (695,36);
+insert into t (id,a) values (695,37);
+insert into t (id,a) values (695,38);
+insert into t (id,a) values (695,39);
+insert into t (id,a) values (695,40);
+insert into t (id,a) values (695,41);
+insert into t (id,a) values (695,42);
+insert into t (id,a) values (695,43);
+insert into t (id,a) values (695,44);
+insert into t (id,a) values (695,45);
+insert into t (id,a) values (695,46);
+insert into t (id,a) values (695,47);
+insert into t (id,a) values (695,48);
+insert into t (id,a) values (695,49);
+insert into t (id,a) values (695,50);
+insert into t (id,a) values (695,51);
+insert into t (id,a) values (695,52);
+insert into t (id,a) values (695,53);
+insert into t (id,a) values (695,54);
+insert into t (id,a) values (695,55);
+insert into t (id,a) values (695,56);
+insert into t (id,a) values (695,57);
+insert into t (id,a) values (695,58);
+insert into t (id,a) values (695,59);
+insert into t (id,a) values (695,60);
+insert into t (id,a) values (695,61);
+insert into t (id,a) values (695,62);
+insert into t (id,a) values (695,63);
+insert into t (id,a) values (695,64);
+insert into t (id,a) values (695,65);
+insert into t (id,a) values (695,66);
+insert into t (id,a) values (695,67);
+insert into t (id,a) values (695,68);
+insert into t (id,a) values (695,69);
+insert into t (id,a) values (695,70);
+insert into t (id,a) values (695,71);
+insert into t (id,a) values (695,72);
+insert into t (id,a) values (695,73);
+insert into t (id,a) values (695,74);
+insert into t (id,a) values (695,75);
+insert into t (id,a) values (695,76);
+insert into t (id,a) values (695,77);
+insert into t (id,a) values (695,78);
+insert into t (id,a) values (695,79);
+insert into t (id,a) values (695,80);
+insert into t (id,a) values (695,81);
+insert into t (id,a) values (695,82);
+insert into t (id,a) values (695,83);
+insert into t (id,a) values (695,84);
+insert into t (id,a) values (695,85);
+insert into t (id,a) values (695,86);
+insert into t (id,a) values (695,87);
+insert into t (id,a) values (695,88);
+insert into t (id,a) values (695,89);
+insert into t (id,a) values (695,90);
+insert into t (id,a) values (695,91);
+insert into t (id,a) values (695,92);
+insert into t (id,a) values (695,93);
+insert into t (id,a) values (695,94);
+insert into t (id,a) values (695,95);
+insert into t (id,a) values (695,96);
+insert into t (id,a) values (695,97);
+insert into t (id,a) values (695,98);
+insert into t (id,a) values (695,99);
+insert into t (id,a) values (696,0);
+insert into t (id,a) values (696,1);
+insert into t (id,a) values (696,2);
+insert into t (id,a) values (696,3);
+insert into t (id,a) values (696,4);
+insert into t (id,a) values (696,5);
+insert into t (id,a) values (696,6);
+insert into t (id,a) values (696,7);
+insert into t (id,a) values (696,8);
+insert into t (id,a) values (696,9);
+insert into t (id,a) values (696,10);
+insert into t (id,a) values (696,11);
+insert into t (id,a) values (696,12);
+insert into t (id,a) values (696,13);
+insert into t (id,a) values (696,14);
+insert into t (id,a) values (696,15);
+insert into t (id,a) values (696,16);
+insert into t (id,a) values (696,17);
+insert into t (id,a) values (696,18);
+insert into t (id,a) values (696,19);
+insert into t (id,a) values (696,20);
+insert into t (id,a) values (696,21);
+insert into t (id,a) values (696,22);
+insert into t (id,a) values (696,23);
+insert into t (id,a) values (696,24);
+insert into t (id,a) values (696,25);
+insert into t (id,a) values (696,26);
+insert into t (id,a) values (696,27);
+insert into t (id,a) values (696,28);
+insert into t (id,a) values (696,29);
+insert into t (id,a) values (696,30);
+insert into t (id,a) values (696,31);
+insert into t (id,a) values (696,32);
+insert into t (id,a) values (696,33);
+insert into t (id,a) values (696,34);
+insert into t (id,a) values (696,35);
+insert into t (id,a) values (696,36);
+insert into t (id,a) values (696,37);
+insert into t (id,a) values (696,38);
+insert into t (id,a) values (696,39);
+insert into t (id,a) values (696,40);
+insert into t (id,a) values (696,41);
+insert into t (id,a) values (696,42);
+insert into t (id,a) values (696,43);
+insert into t (id,a) values (696,44);
+insert into t (id,a) values (696,45);
+insert into t (id,a) values (696,46);
+insert into t (id,a) values (696,47);
+insert into t (id,a) values (696,48);
+insert into t (id,a) values (696,49);
+insert into t (id,a) values (696,50);
+insert into t (id,a) values (696,51);
+insert into t (id,a) values (696,52);
+insert into t (id,a) values (696,53);
+insert into t (id,a) values (696,54);
+insert into t (id,a) values (696,55);
+insert into t (id,a) values (696,56);
+insert into t (id,a) values (696,57);
+insert into t (id,a) values (696,58);
+insert into t (id,a) values (696,59);
+insert into t (id,a) values (696,60);
+insert into t (id,a) values (696,61);
+insert into t (id,a) values (696,62);
+insert into t (id,a) values (696,63);
+insert into t (id,a) values (696,64);
+insert into t (id,a) values (696,65);
+insert into t (id,a) values (696,66);
+insert into t (id,a) values (696,67);
+insert into t (id,a) values (696,68);
+insert into t (id,a) values (696,69);
+insert into t (id,a) values (696,70);
+insert into t (id,a) values (696,71);
+insert into t (id,a) values (696,72);
+insert into t (id,a) values (696,73);
+insert into t (id,a) values (696,74);
+insert into t (id,a) values (696,75);
+insert into t (id,a) values (696,76);
+insert into t (id,a) values (696,77);
+insert into t (id,a) values (696,78);
+insert into t (id,a) values (696,79);
+insert into t (id,a) values (696,80);
+insert into t (id,a) values (696,81);
+insert into t (id,a) values (696,82);
+insert into t (id,a) values (696,83);
+insert into t (id,a) values (696,84);
+insert into t (id,a) values (696,85);
+insert into t (id,a) values (696,86);
+insert into t (id,a) values (696,87);
+insert into t (id,a) values (696,88);
+insert into t (id,a) values (696,89);
+insert into t (id,a) values (696,90);
+insert into t (id,a) values (696,91);
+insert into t (id,a) values (696,92);
+insert into t (id,a) values (696,93);
+insert into t (id,a) values (696,94);
+insert into t (id,a) values (696,95);
+insert into t (id,a) values (696,96);
+insert into t (id,a) values (696,97);
+insert into t (id,a) values (696,98);
+insert into t (id,a) values (696,99);
+insert into t (id,a) values (697,0);
+insert into t (id,a) values (697,1);
+insert into t (id,a) values (697,2);
+insert into t (id,a) values (697,3);
+insert into t (id,a) values (697,4);
+insert into t (id,a) values (697,5);
+insert into t (id,a) values (697,6);
+insert into t (id,a) values (697,7);
+insert into t (id,a) values (697,8);
+insert into t (id,a) values (697,9);
+insert into t (id,a) values (697,10);
+insert into t (id,a) values (697,11);
+insert into t (id,a) values (697,12);
+insert into t (id,a) values (697,13);
+insert into t (id,a) values (697,14);
+insert into t (id,a) values (697,15);
+insert into t (id,a) values (697,16);
+insert into t (id,a) values (697,17);
+insert into t (id,a) values (697,18);
+insert into t (id,a) values (697,19);
+insert into t (id,a) values (697,20);
+insert into t (id,a) values (697,21);
+insert into t (id,a) values (697,22);
+insert into t (id,a) values (697,23);
+insert into t (id,a) values (697,24);
+insert into t (id,a) values (697,25);
+insert into t (id,a) values (697,26);
+insert into t (id,a) values (697,27);
+insert into t (id,a) values (697,28);
+insert into t (id,a) values (697,29);
+insert into t (id,a) values (697,30);
+insert into t (id,a) values (697,31);
+insert into t (id,a) values (697,32);
+insert into t (id,a) values (697,33);
+insert into t (id,a) values (697,34);
+insert into t (id,a) values (697,35);
+insert into t (id,a) values (697,36);
+insert into t (id,a) values (697,37);
+insert into t (id,a) values (697,38);
+insert into t (id,a) values (697,39);
+insert into t (id,a) values (697,40);
+insert into t (id,a) values (697,41);
+insert into t (id,a) values (697,42);
+insert into t (id,a) values (697,43);
+insert into t (id,a) values (697,44);
+insert into t (id,a) values (697,45);
+insert into t (id,a) values (697,46);
+insert into t (id,a) values (697,47);
+insert into t (id,a) values (697,48);
+insert into t (id,a) values (697,49);
+insert into t (id,a) values (697,50);
+insert into t (id,a) values (697,51);
+insert into t (id,a) values (697,52);
+insert into t (id,a) values (697,53);
+insert into t (id,a) values (697,54);
+insert into t (id,a) values (697,55);
+insert into t (id,a) values (697,56);
+insert into t (id,a) values (697,57);
+insert into t (id,a) values (697,58);
+insert into t (id,a) values (697,59);
+insert into t (id,a) values (697,60);
+insert into t (id,a) values (697,61);
+insert into t (id,a) values (697,62);
+insert into t (id,a) values (697,63);
+insert into t (id,a) values (697,64);
+insert into t (id,a) values (697,65);
+insert into t (id,a) values (697,66);
+insert into t (id,a) values (697,67);
+insert into t (id,a) values (697,68);
+insert into t (id,a) values (697,69);
+insert into t (id,a) values (697,70);
+insert into t (id,a) values (697,71);
+insert into t (id,a) values (697,72);
+insert into t (id,a) values (697,73);
+insert into t (id,a) values (697,74);
+insert into t (id,a) values (697,75);
+insert into t (id,a) values (697,76);
+insert into t (id,a) values (697,77);
+insert into t (id,a) values (697,78);
+insert into t (id,a) values (697,79);
+insert into t (id,a) values (697,80);
+insert into t (id,a) values (697,81);
+insert into t (id,a) values (697,82);
+insert into t (id,a) values (697,83);
+insert into t (id,a) values (697,84);
+insert into t (id,a) values (697,85);
+insert into t (id,a) values (697,86);
+insert into t (id,a) values (697,87);
+insert into t (id,a) values (697,88);
+insert into t (id,a) values (697,89);
+insert into t (id,a) values (697,90);
+insert into t (id,a) values (697,91);
+insert into t (id,a) values (697,92);
+insert into t (id,a) values (697,93);
+insert into t (id,a) values (697,94);
+insert into t (id,a) values (697,95);
+insert into t (id,a) values (697,96);
+insert into t (id,a) values (697,97);
+insert into t (id,a) values (697,98);
+insert into t (id,a) values (697,99);
+insert into t (id,a) values (698,0);
+insert into t (id,a) values (698,1);
+insert into t (id,a) values (698,2);
+insert into t (id,a) values (698,3);
+insert into t (id,a) values (698,4);
+insert into t (id,a) values (698,5);
+insert into t (id,a) values (698,6);
+insert into t (id,a) values (698,7);
+insert into t (id,a) values (698,8);
+insert into t (id,a) values (698,9);
+insert into t (id,a) values (698,10);
+insert into t (id,a) values (698,11);
+insert into t (id,a) values (698,12);
+insert into t (id,a) values (698,13);
+insert into t (id,a) values (698,14);
+insert into t (id,a) values (698,15);
+insert into t (id,a) values (698,16);
+insert into t (id,a) values (698,17);
+insert into t (id,a) values (698,18);
+insert into t (id,a) values (698,19);
+insert into t (id,a) values (698,20);
+insert into t (id,a) values (698,21);
+insert into t (id,a) values (698,22);
+insert into t (id,a) values (698,23);
+insert into t (id,a) values (698,24);
+insert into t (id,a) values (698,25);
+insert into t (id,a) values (698,26);
+insert into t (id,a) values (698,27);
+insert into t (id,a) values (698,28);
+insert into t (id,a) values (698,29);
+insert into t (id,a) values (698,30);
+insert into t (id,a) values (698,31);
+insert into t (id,a) values (698,32);
+insert into t (id,a) values (698,33);
+insert into t (id,a) values (698,34);
+insert into t (id,a) values (698,35);
+insert into t (id,a) values (698,36);
+insert into t (id,a) values (698,37);
+insert into t (id,a) values (698,38);
+insert into t (id,a) values (698,39);
+insert into t (id,a) values (698,40);
+insert into t (id,a) values (698,41);
+insert into t (id,a) values (698,42);
+insert into t (id,a) values (698,43);
+insert into t (id,a) values (698,44);
+insert into t (id,a) values (698,45);
+insert into t (id,a) values (698,46);
+insert into t (id,a) values (698,47);
+insert into t (id,a) values (698,48);
+insert into t (id,a) values (698,49);
+insert into t (id,a) values (698,50);
+insert into t (id,a) values (698,51);
+insert into t (id,a) values (698,52);
+insert into t (id,a) values (698,53);
+insert into t (id,a) values (698,54);
+insert into t (id,a) values (698,55);
+insert into t (id,a) values (698,56);
+insert into t (id,a) values (698,57);
+insert into t (id,a) values (698,58);
+insert into t (id,a) values (698,59);
+insert into t (id,a) values (698,60);
+insert into t (id,a) values (698,61);
+insert into t (id,a) values (698,62);
+insert into t (id,a) values (698,63);
+insert into t (id,a) values (698,64);
+insert into t (id,a) values (698,65);
+insert into t (id,a) values (698,66);
+insert into t (id,a) values (698,67);
+insert into t (id,a) values (698,68);
+insert into t (id,a) values (698,69);
+insert into t (id,a) values (698,70);
+insert into t (id,a) values (698,71);
+insert into t (id,a) values (698,72);
+insert into t (id,a) values (698,73);
+insert into t (id,a) values (698,74);
+insert into t (id,a) values (698,75);
+insert into t (id,a) values (698,76);
+insert into t (id,a) values (698,77);
+insert into t (id,a) values (698,78);
+insert into t (id,a) values (698,79);
+insert into t (id,a) values (698,80);
+insert into t (id,a) values (698,81);
+insert into t (id,a) values (698,82);
+insert into t (id,a) values (698,83);
+insert into t (id,a) values (698,84);
+insert into t (id,a) values (698,85);
+insert into t (id,a) values (698,86);
+insert into t (id,a) values (698,87);
+insert into t (id,a) values (698,88);
+insert into t (id,a) values (698,89);
+insert into t (id,a) values (698,90);
+insert into t (id,a) values (698,91);
+insert into t (id,a) values (698,92);
+insert into t (id,a) values (698,93);
+insert into t (id,a) values (698,94);
+insert into t (id,a) values (698,95);
+insert into t (id,a) values (698,96);
+insert into t (id,a) values (698,97);
+insert into t (id,a) values (698,98);
+insert into t (id,a) values (698,99);
+insert into t (id,a) values (699,0);
+insert into t (id,a) values (699,1);
+insert into t (id,a) values (699,2);
+insert into t (id,a) values (699,3);
+insert into t (id,a) values (699,4);
+insert into t (id,a) values (699,5);
+insert into t (id,a) values (699,6);
+insert into t (id,a) values (699,7);
+insert into t (id,a) values (699,8);
+insert into t (id,a) values (699,9);
+insert into t (id,a) values (699,10);
+insert into t (id,a) values (699,11);
+insert into t (id,a) values (699,12);
+insert into t (id,a) values (699,13);
+insert into t (id,a) values (699,14);
+insert into t (id,a) values (699,15);
+insert into t (id,a) values (699,16);
+insert into t (id,a) values (699,17);
+insert into t (id,a) values (699,18);
+insert into t (id,a) values (699,19);
+insert into t (id,a) values (699,20);
+insert into t (id,a) values (699,21);
+insert into t (id,a) values (699,22);
+insert into t (id,a) values (699,23);
+insert into t (id,a) values (699,24);
+insert into t (id,a) values (699,25);
+insert into t (id,a) values (699,26);
+insert into t (id,a) values (699,27);
+insert into t (id,a) values (699,28);
+insert into t (id,a) values (699,29);
+insert into t (id,a) values (699,30);
+insert into t (id,a) values (699,31);
+insert into t (id,a) values (699,32);
+insert into t (id,a) values (699,33);
+insert into t (id,a) values (699,34);
+insert into t (id,a) values (699,35);
+insert into t (id,a) values (699,36);
+insert into t (id,a) values (699,37);
+insert into t (id,a) values (699,38);
+insert into t (id,a) values (699,39);
+insert into t (id,a) values (699,40);
+insert into t (id,a) values (699,41);
+insert into t (id,a) values (699,42);
+insert into t (id,a) values (699,43);
+insert into t (id,a) values (699,44);
+insert into t (id,a) values (699,45);
+insert into t (id,a) values (699,46);
+insert into t (id,a) values (699,47);
+insert into t (id,a) values (699,48);
+insert into t (id,a) values (699,49);
+insert into t (id,a) values (699,50);
+insert into t (id,a) values (699,51);
+insert into t (id,a) values (699,52);
+insert into t (id,a) values (699,53);
+insert into t (id,a) values (699,54);
+insert into t (id,a) values (699,55);
+insert into t (id,a) values (699,56);
+insert into t (id,a) values (699,57);
+insert into t (id,a) values (699,58);
+insert into t (id,a) values (699,59);
+insert into t (id,a) values (699,60);
+insert into t (id,a) values (699,61);
+insert into t (id,a) values (699,62);
+insert into t (id,a) values (699,63);
+insert into t (id,a) values (699,64);
+insert into t (id,a) values (699,65);
+insert into t (id,a) values (699,66);
+insert into t (id,a) values (699,67);
+insert into t (id,a) values (699,68);
+insert into t (id,a) values (699,69);
+insert into t (id,a) values (699,70);
+insert into t (id,a) values (699,71);
+insert into t (id,a) values (699,72);
+insert into t (id,a) values (699,73);
+insert into t (id,a) values (699,74);
+insert into t (id,a) values (699,75);
+insert into t (id,a) values (699,76);
+insert into t (id,a) values (699,77);
+insert into t (id,a) values (699,78);
+insert into t (id,a) values (699,79);
+insert into t (id,a) values (699,80);
+insert into t (id,a) values (699,81);
+insert into t (id,a) values (699,82);
+insert into t (id,a) values (699,83);
+insert into t (id,a) values (699,84);
+insert into t (id,a) values (699,85);
+insert into t (id,a) values (699,86);
+insert into t (id,a) values (699,87);
+insert into t (id,a) values (699,88);
+insert into t (id,a) values (699,89);
+insert into t (id,a) values (699,90);
+insert into t (id,a) values (699,91);
+insert into t (id,a) values (699,92);
+insert into t (id,a) values (699,93);
+insert into t (id,a) values (699,94);
+insert into t (id,a) values (699,95);
+insert into t (id,a) values (699,96);
+insert into t (id,a) values (699,97);
+insert into t (id,a) values (699,98);
+insert into t (id,a) values (699,99);
+insert into t (id,a) values (700,0);
+insert into t (id,a) values (700,1);
+insert into t (id,a) values (700,2);
+insert into t (id,a) values (700,3);
+insert into t (id,a) values (700,4);
+insert into t (id,a) values (700,5);
+insert into t (id,a) values (700,6);
+insert into t (id,a) values (700,7);
+insert into t (id,a) values (700,8);
+insert into t (id,a) values (700,9);
+insert into t (id,a) values (700,10);
+insert into t (id,a) values (700,11);
+insert into t (id,a) values (700,12);
+insert into t (id,a) values (700,13);
+insert into t (id,a) values (700,14);
+insert into t (id,a) values (700,15);
+insert into t (id,a) values (700,16);
+insert into t (id,a) values (700,17);
+insert into t (id,a) values (700,18);
+insert into t (id,a) values (700,19);
+insert into t (id,a) values (700,20);
+insert into t (id,a) values (700,21);
+insert into t (id,a) values (700,22);
+insert into t (id,a) values (700,23);
+insert into t (id,a) values (700,24);
+insert into t (id,a) values (700,25);
+insert into t (id,a) values (700,26);
+insert into t (id,a) values (700,27);
+insert into t (id,a) values (700,28);
+insert into t (id,a) values (700,29);
+insert into t (id,a) values (700,30);
+insert into t (id,a) values (700,31);
+insert into t (id,a) values (700,32);
+insert into t (id,a) values (700,33);
+insert into t (id,a) values (700,34);
+insert into t (id,a) values (700,35);
+insert into t (id,a) values (700,36);
+insert into t (id,a) values (700,37);
+insert into t (id,a) values (700,38);
+insert into t (id,a) values (700,39);
+insert into t (id,a) values (700,40);
+insert into t (id,a) values (700,41);
+insert into t (id,a) values (700,42);
+insert into t (id,a) values (700,43);
+insert into t (id,a) values (700,44);
+insert into t (id,a) values (700,45);
+insert into t (id,a) values (700,46);
+insert into t (id,a) values (700,47);
+insert into t (id,a) values (700,48);
+insert into t (id,a) values (700,49);
+insert into t (id,a) values (700,50);
+insert into t (id,a) values (700,51);
+insert into t (id,a) values (700,52);
+insert into t (id,a) values (700,53);
+insert into t (id,a) values (700,54);
+insert into t (id,a) values (700,55);
+insert into t (id,a) values (700,56);
+insert into t (id,a) values (700,57);
+insert into t (id,a) values (700,58);
+insert into t (id,a) values (700,59);
+insert into t (id,a) values (700,60);
+insert into t (id,a) values (700,61);
+insert into t (id,a) values (700,62);
+insert into t (id,a) values (700,63);
+insert into t (id,a) values (700,64);
+insert into t (id,a) values (700,65);
+insert into t (id,a) values (700,66);
+insert into t (id,a) values (700,67);
+insert into t (id,a) values (700,68);
+insert into t (id,a) values (700,69);
+insert into t (id,a) values (700,70);
+insert into t (id,a) values (700,71);
+insert into t (id,a) values (700,72);
+insert into t (id,a) values (700,73);
+insert into t (id,a) values (700,74);
+insert into t (id,a) values (700,75);
+insert into t (id,a) values (700,76);
+insert into t (id,a) values (700,77);
+insert into t (id,a) values (700,78);
+insert into t (id,a) values (700,79);
+insert into t (id,a) values (700,80);
+insert into t (id,a) values (700,81);
+insert into t (id,a) values (700,82);
+insert into t (id,a) values (700,83);
+insert into t (id,a) values (700,84);
+insert into t (id,a) values (700,85);
+insert into t (id,a) values (700,86);
+insert into t (id,a) values (700,87);
+insert into t (id,a) values (700,88);
+insert into t (id,a) values (700,89);
+insert into t (id,a) values (700,90);
+insert into t (id,a) values (700,91);
+insert into t (id,a) values (700,92);
+insert into t (id,a) values (700,93);
+insert into t (id,a) values (700,94);
+insert into t (id,a) values (700,95);
+insert into t (id,a) values (700,96);
+insert into t (id,a) values (700,97);
+insert into t (id,a) values (700,98);
+insert into t (id,a) values (700,99);
+insert into t (id,a) values (701,0);
+insert into t (id,a) values (701,1);
+insert into t (id,a) values (701,2);
+insert into t (id,a) values (701,3);
+insert into t (id,a) values (701,4);
+insert into t (id,a) values (701,5);
+insert into t (id,a) values (701,6);
+insert into t (id,a) values (701,7);
+insert into t (id,a) values (701,8);
+insert into t (id,a) values (701,9);
+insert into t (id,a) values (701,10);
+insert into t (id,a) values (701,11);
+insert into t (id,a) values (701,12);
+insert into t (id,a) values (701,13);
+insert into t (id,a) values (701,14);
+insert into t (id,a) values (701,15);
+insert into t (id,a) values (701,16);
+insert into t (id,a) values (701,17);
+insert into t (id,a) values (701,18);
+insert into t (id,a) values (701,19);
+insert into t (id,a) values (701,20);
+insert into t (id,a) values (701,21);
+insert into t (id,a) values (701,22);
+insert into t (id,a) values (701,23);
+insert into t (id,a) values (701,24);
+insert into t (id,a) values (701,25);
+insert into t (id,a) values (701,26);
+insert into t (id,a) values (701,27);
+insert into t (id,a) values (701,28);
+insert into t (id,a) values (701,29);
+insert into t (id,a) values (701,30);
+insert into t (id,a) values (701,31);
+insert into t (id,a) values (701,32);
+insert into t (id,a) values (701,33);
+insert into t (id,a) values (701,34);
+insert into t (id,a) values (701,35);
+insert into t (id,a) values (701,36);
+insert into t (id,a) values (701,37);
+insert into t (id,a) values (701,38);
+insert into t (id,a) values (701,39);
+insert into t (id,a) values (701,40);
+insert into t (id,a) values (701,41);
+insert into t (id,a) values (701,42);
+insert into t (id,a) values (701,43);
+insert into t (id,a) values (701,44);
+insert into t (id,a) values (701,45);
+insert into t (id,a) values (701,46);
+insert into t (id,a) values (701,47);
+insert into t (id,a) values (701,48);
+insert into t (id,a) values (701,49);
+insert into t (id,a) values (701,50);
+insert into t (id,a) values (701,51);
+insert into t (id,a) values (701,52);
+insert into t (id,a) values (701,53);
+insert into t (id,a) values (701,54);
+insert into t (id,a) values (701,55);
+insert into t (id,a) values (701,56);
+insert into t (id,a) values (701,57);
+insert into t (id,a) values (701,58);
+insert into t (id,a) values (701,59);
+insert into t (id,a) values (701,60);
+insert into t (id,a) values (701,61);
+insert into t (id,a) values (701,62);
+insert into t (id,a) values (701,63);
+insert into t (id,a) values (701,64);
+insert into t (id,a) values (701,65);
+insert into t (id,a) values (701,66);
+insert into t (id,a) values (701,67);
+insert into t (id,a) values (701,68);
+insert into t (id,a) values (701,69);
+insert into t (id,a) values (701,70);
+insert into t (id,a) values (701,71);
+insert into t (id,a) values (701,72);
+insert into t (id,a) values (701,73);
+insert into t (id,a) values (701,74);
+insert into t (id,a) values (701,75);
+insert into t (id,a) values (701,76);
+insert into t (id,a) values (701,77);
+insert into t (id,a) values (701,78);
+insert into t (id,a) values (701,79);
+insert into t (id,a) values (701,80);
+insert into t (id,a) values (701,81);
+insert into t (id,a) values (701,82);
+insert into t (id,a) values (701,83);
+insert into t (id,a) values (701,84);
+insert into t (id,a) values (701,85);
+insert into t (id,a) values (701,86);
+insert into t (id,a) values (701,87);
+insert into t (id,a) values (701,88);
+insert into t (id,a) values (701,89);
+insert into t (id,a) values (701,90);
+insert into t (id,a) values (701,91);
+insert into t (id,a) values (701,92);
+insert into t (id,a) values (701,93);
+insert into t (id,a) values (701,94);
+insert into t (id,a) values (701,95);
+insert into t (id,a) values (701,96);
+insert into t (id,a) values (701,97);
+insert into t (id,a) values (701,98);
+insert into t (id,a) values (701,99);
+insert into t (id,a) values (702,0);
+insert into t (id,a) values (702,1);
+insert into t (id,a) values (702,2);
+insert into t (id,a) values (702,3);
+insert into t (id,a) values (702,4);
+insert into t (id,a) values (702,5);
+insert into t (id,a) values (702,6);
+insert into t (id,a) values (702,7);
+insert into t (id,a) values (702,8);
+insert into t (id,a) values (702,9);
+insert into t (id,a) values (702,10);
+insert into t (id,a) values (702,11);
+insert into t (id,a) values (702,12);
+insert into t (id,a) values (702,13);
+insert into t (id,a) values (702,14);
+insert into t (id,a) values (702,15);
+insert into t (id,a) values (702,16);
+insert into t (id,a) values (702,17);
+insert into t (id,a) values (702,18);
+insert into t (id,a) values (702,19);
+insert into t (id,a) values (702,20);
+insert into t (id,a) values (702,21);
+insert into t (id,a) values (702,22);
+insert into t (id,a) values (702,23);
+insert into t (id,a) values (702,24);
+insert into t (id,a) values (702,25);
+insert into t (id,a) values (702,26);
+insert into t (id,a) values (702,27);
+insert into t (id,a) values (702,28);
+insert into t (id,a) values (702,29);
+insert into t (id,a) values (702,30);
+insert into t (id,a) values (702,31);
+insert into t (id,a) values (702,32);
+insert into t (id,a) values (702,33);
+insert into t (id,a) values (702,34);
+insert into t (id,a) values (702,35);
+insert into t (id,a) values (702,36);
+insert into t (id,a) values (702,37);
+insert into t (id,a) values (702,38);
+insert into t (id,a) values (702,39);
+insert into t (id,a) values (702,40);
+insert into t (id,a) values (702,41);
+insert into t (id,a) values (702,42);
+insert into t (id,a) values (702,43);
+insert into t (id,a) values (702,44);
+insert into t (id,a) values (702,45);
+insert into t (id,a) values (702,46);
+insert into t (id,a) values (702,47);
+insert into t (id,a) values (702,48);
+insert into t (id,a) values (702,49);
+insert into t (id,a) values (702,50);
+insert into t (id,a) values (702,51);
+insert into t (id,a) values (702,52);
+insert into t (id,a) values (702,53);
+insert into t (id,a) values (702,54);
+insert into t (id,a) values (702,55);
+insert into t (id,a) values (702,56);
+insert into t (id,a) values (702,57);
+insert into t (id,a) values (702,58);
+insert into t (id,a) values (702,59);
+insert into t (id,a) values (702,60);
+insert into t (id,a) values (702,61);
+insert into t (id,a) values (702,62);
+insert into t (id,a) values (702,63);
+insert into t (id,a) values (702,64);
+insert into t (id,a) values (702,65);
+insert into t (id,a) values (702,66);
+insert into t (id,a) values (702,67);
+insert into t (id,a) values (702,68);
+insert into t (id,a) values (702,69);
+insert into t (id,a) values (702,70);
+insert into t (id,a) values (702,71);
+insert into t (id,a) values (702,72);
+insert into t (id,a) values (702,73);
+insert into t (id,a) values (702,74);
+insert into t (id,a) values (702,75);
+insert into t (id,a) values (702,76);
+insert into t (id,a) values (702,77);
+insert into t (id,a) values (702,78);
+insert into t (id,a) values (702,79);
+insert into t (id,a) values (702,80);
+insert into t (id,a) values (702,81);
+insert into t (id,a) values (702,82);
+insert into t (id,a) values (702,83);
+insert into t (id,a) values (702,84);
+insert into t (id,a) values (702,85);
+insert into t (id,a) values (702,86);
+insert into t (id,a) values (702,87);
+insert into t (id,a) values (702,88);
+insert into t (id,a) values (702,89);
+insert into t (id,a) values (702,90);
+insert into t (id,a) values (702,91);
+insert into t (id,a) values (702,92);
+insert into t (id,a) values (702,93);
+insert into t (id,a) values (702,94);
+insert into t (id,a) values (702,95);
+insert into t (id,a) values (702,96);
+insert into t (id,a) values (702,97);
+insert into t (id,a) values (702,98);
+insert into t (id,a) values (702,99);
+insert into t (id,a) values (703,0);
+insert into t (id,a) values (703,1);
+insert into t (id,a) values (703,2);
+insert into t (id,a) values (703,3);
+insert into t (id,a) values (703,4);
+insert into t (id,a) values (703,5);
+insert into t (id,a) values (703,6);
+insert into t (id,a) values (703,7);
+insert into t (id,a) values (703,8);
+insert into t (id,a) values (703,9);
+insert into t (id,a) values (703,10);
+insert into t (id,a) values (703,11);
+insert into t (id,a) values (703,12);
+insert into t (id,a) values (703,13);
+insert into t (id,a) values (703,14);
+insert into t (id,a) values (703,15);
+insert into t (id,a) values (703,16);
+insert into t (id,a) values (703,17);
+insert into t (id,a) values (703,18);
+insert into t (id,a) values (703,19);
+insert into t (id,a) values (703,20);
+insert into t (id,a) values (703,21);
+insert into t (id,a) values (703,22);
+insert into t (id,a) values (703,23);
+insert into t (id,a) values (703,24);
+insert into t (id,a) values (703,25);
+insert into t (id,a) values (703,26);
+insert into t (id,a) values (703,27);
+insert into t (id,a) values (703,28);
+insert into t (id,a) values (703,29);
+insert into t (id,a) values (703,30);
+insert into t (id,a) values (703,31);
+insert into t (id,a) values (703,32);
+insert into t (id,a) values (703,33);
+insert into t (id,a) values (703,34);
+insert into t (id,a) values (703,35);
+insert into t (id,a) values (703,36);
+insert into t (id,a) values (703,37);
+insert into t (id,a) values (703,38);
+insert into t (id,a) values (703,39);
+insert into t (id,a) values (703,40);
+insert into t (id,a) values (703,41);
+insert into t (id,a) values (703,42);
+insert into t (id,a) values (703,43);
+insert into t (id,a) values (703,44);
+insert into t (id,a) values (703,45);
+insert into t (id,a) values (703,46);
+insert into t (id,a) values (703,47);
+insert into t (id,a) values (703,48);
+insert into t (id,a) values (703,49);
+insert into t (id,a) values (703,50);
+insert into t (id,a) values (703,51);
+insert into t (id,a) values (703,52);
+insert into t (id,a) values (703,53);
+insert into t (id,a) values (703,54);
+insert into t (id,a) values (703,55);
+insert into t (id,a) values (703,56);
+insert into t (id,a) values (703,57);
+insert into t (id,a) values (703,58);
+insert into t (id,a) values (703,59);
+insert into t (id,a) values (703,60);
+insert into t (id,a) values (703,61);
+insert into t (id,a) values (703,62);
+insert into t (id,a) values (703,63);
+insert into t (id,a) values (703,64);
+insert into t (id,a) values (703,65);
+insert into t (id,a) values (703,66);
+insert into t (id,a) values (703,67);
+insert into t (id,a) values (703,68);
+insert into t (id,a) values (703,69);
+insert into t (id,a) values (703,70);
+insert into t (id,a) values (703,71);
+insert into t (id,a) values (703,72);
+insert into t (id,a) values (703,73);
+insert into t (id,a) values (703,74);
+insert into t (id,a) values (703,75);
+insert into t (id,a) values (703,76);
+insert into t (id,a) values (703,77);
+insert into t (id,a) values (703,78);
+insert into t (id,a) values (703,79);
+insert into t (id,a) values (703,80);
+insert into t (id,a) values (703,81);
+insert into t (id,a) values (703,82);
+insert into t (id,a) values (703,83);
+insert into t (id,a) values (703,84);
+insert into t (id,a) values (703,85);
+insert into t (id,a) values (703,86);
+insert into t (id,a) values (703,87);
+insert into t (id,a) values (703,88);
+insert into t (id,a) values (703,89);
+insert into t (id,a) values (703,90);
+insert into t (id,a) values (703,91);
+insert into t (id,a) values (703,92);
+insert into t (id,a) values (703,93);
+insert into t (id,a) values (703,94);
+insert into t (id,a) values (703,95);
+insert into t (id,a) values (703,96);
+insert into t (id,a) values (703,97);
+insert into t (id,a) values (703,98);
+insert into t (id,a) values (703,99);
+insert into t (id,a) values (704,0);
+insert into t (id,a) values (704,1);
+insert into t (id,a) values (704,2);
+insert into t (id,a) values (704,3);
+insert into t (id,a) values (704,4);
+insert into t (id,a) values (704,5);
+insert into t (id,a) values (704,6);
+insert into t (id,a) values (704,7);
+insert into t (id,a) values (704,8);
+insert into t (id,a) values (704,9);
+insert into t (id,a) values (704,10);
+insert into t (id,a) values (704,11);
+insert into t (id,a) values (704,12);
+insert into t (id,a) values (704,13);
+insert into t (id,a) values (704,14);
+insert into t (id,a) values (704,15);
+insert into t (id,a) values (704,16);
+insert into t (id,a) values (704,17);
+insert into t (id,a) values (704,18);
+insert into t (id,a) values (704,19);
+insert into t (id,a) values (704,20);
+insert into t (id,a) values (704,21);
+insert into t (id,a) values (704,22);
+insert into t (id,a) values (704,23);
+insert into t (id,a) values (704,24);
+insert into t (id,a) values (704,25);
+insert into t (id,a) values (704,26);
+insert into t (id,a) values (704,27);
+insert into t (id,a) values (704,28);
+insert into t (id,a) values (704,29);
+insert into t (id,a) values (704,30);
+insert into t (id,a) values (704,31);
+insert into t (id,a) values (704,32);
+insert into t (id,a) values (704,33);
+insert into t (id,a) values (704,34);
+insert into t (id,a) values (704,35);
+insert into t (id,a) values (704,36);
+insert into t (id,a) values (704,37);
+insert into t (id,a) values (704,38);
+insert into t (id,a) values (704,39);
+insert into t (id,a) values (704,40);
+insert into t (id,a) values (704,41);
+insert into t (id,a) values (704,42);
+insert into t (id,a) values (704,43);
+insert into t (id,a) values (704,44);
+insert into t (id,a) values (704,45);
+insert into t (id,a) values (704,46);
+insert into t (id,a) values (704,47);
+insert into t (id,a) values (704,48);
+insert into t (id,a) values (704,49);
+insert into t (id,a) values (704,50);
+insert into t (id,a) values (704,51);
+insert into t (id,a) values (704,52);
+insert into t (id,a) values (704,53);
+insert into t (id,a) values (704,54);
+insert into t (id,a) values (704,55);
+insert into t (id,a) values (704,56);
+insert into t (id,a) values (704,57);
+insert into t (id,a) values (704,58);
+insert into t (id,a) values (704,59);
+insert into t (id,a) values (704,60);
+insert into t (id,a) values (704,61);
+insert into t (id,a) values (704,62);
+insert into t (id,a) values (704,63);
+insert into t (id,a) values (704,64);
+insert into t (id,a) values (704,65);
+insert into t (id,a) values (704,66);
+insert into t (id,a) values (704,67);
+insert into t (id,a) values (704,68);
+insert into t (id,a) values (704,69);
+insert into t (id,a) values (704,70);
+insert into t (id,a) values (704,71);
+insert into t (id,a) values (704,72);
+insert into t (id,a) values (704,73);
+insert into t (id,a) values (704,74);
+insert into t (id,a) values (704,75);
+insert into t (id,a) values (704,76);
+insert into t (id,a) values (704,77);
+insert into t (id,a) values (704,78);
+insert into t (id,a) values (704,79);
+insert into t (id,a) values (704,80);
+insert into t (id,a) values (704,81);
+insert into t (id,a) values (704,82);
+insert into t (id,a) values (704,83);
+insert into t (id,a) values (704,84);
+insert into t (id,a) values (704,85);
+insert into t (id,a) values (704,86);
+insert into t (id,a) values (704,87);
+insert into t (id,a) values (704,88);
+insert into t (id,a) values (704,89);
+insert into t (id,a) values (704,90);
+insert into t (id,a) values (704,91);
+insert into t (id,a) values (704,92);
+insert into t (id,a) values (704,93);
+insert into t (id,a) values (704,94);
+insert into t (id,a) values (704,95);
+insert into t (id,a) values (704,96);
+insert into t (id,a) values (704,97);
+insert into t (id,a) values (704,98);
+insert into t (id,a) values (704,99);
+insert into t (id,a) values (705,0);
+insert into t (id,a) values (705,1);
+insert into t (id,a) values (705,2);
+insert into t (id,a) values (705,3);
+insert into t (id,a) values (705,4);
+insert into t (id,a) values (705,5);
+insert into t (id,a) values (705,6);
+insert into t (id,a) values (705,7);
+insert into t (id,a) values (705,8);
+insert into t (id,a) values (705,9);
+insert into t (id,a) values (705,10);
+insert into t (id,a) values (705,11);
+insert into t (id,a) values (705,12);
+insert into t (id,a) values (705,13);
+insert into t (id,a) values (705,14);
+insert into t (id,a) values (705,15);
+insert into t (id,a) values (705,16);
+insert into t (id,a) values (705,17);
+insert into t (id,a) values (705,18);
+insert into t (id,a) values (705,19);
+insert into t (id,a) values (705,20);
+insert into t (id,a) values (705,21);
+insert into t (id,a) values (705,22);
+insert into t (id,a) values (705,23);
+insert into t (id,a) values (705,24);
+insert into t (id,a) values (705,25);
+insert into t (id,a) values (705,26);
+insert into t (id,a) values (705,27);
+insert into t (id,a) values (705,28);
+insert into t (id,a) values (705,29);
+insert into t (id,a) values (705,30);
+insert into t (id,a) values (705,31);
+insert into t (id,a) values (705,32);
+insert into t (id,a) values (705,33);
+insert into t (id,a) values (705,34);
+insert into t (id,a) values (705,35);
+insert into t (id,a) values (705,36);
+insert into t (id,a) values (705,37);
+insert into t (id,a) values (705,38);
+insert into t (id,a) values (705,39);
+insert into t (id,a) values (705,40);
+insert into t (id,a) values (705,41);
+insert into t (id,a) values (705,42);
+insert into t (id,a) values (705,43);
+insert into t (id,a) values (705,44);
+insert into t (id,a) values (705,45);
+insert into t (id,a) values (705,46);
+insert into t (id,a) values (705,47);
+insert into t (id,a) values (705,48);
+insert into t (id,a) values (705,49);
+insert into t (id,a) values (705,50);
+insert into t (id,a) values (705,51);
+insert into t (id,a) values (705,52);
+insert into t (id,a) values (705,53);
+insert into t (id,a) values (705,54);
+insert into t (id,a) values (705,55);
+insert into t (id,a) values (705,56);
+insert into t (id,a) values (705,57);
+insert into t (id,a) values (705,58);
+insert into t (id,a) values (705,59);
+insert into t (id,a) values (705,60);
+insert into t (id,a) values (705,61);
+insert into t (id,a) values (705,62);
+insert into t (id,a) values (705,63);
+insert into t (id,a) values (705,64);
+insert into t (id,a) values (705,65);
+insert into t (id,a) values (705,66);
+insert into t (id,a) values (705,67);
+insert into t (id,a) values (705,68);
+insert into t (id,a) values (705,69);
+insert into t (id,a) values (705,70);
+insert into t (id,a) values (705,71);
+insert into t (id,a) values (705,72);
+insert into t (id,a) values (705,73);
+insert into t (id,a) values (705,74);
+insert into t (id,a) values (705,75);
+insert into t (id,a) values (705,76);
+insert into t (id,a) values (705,77);
+insert into t (id,a) values (705,78);
+insert into t (id,a) values (705,79);
+insert into t (id,a) values (705,80);
+insert into t (id,a) values (705,81);
+insert into t (id,a) values (705,82);
+insert into t (id,a) values (705,83);
+insert into t (id,a) values (705,84);
+insert into t (id,a) values (705,85);
+insert into t (id,a) values (705,86);
+insert into t (id,a) values (705,87);
+insert into t (id,a) values (705,88);
+insert into t (id,a) values (705,89);
+insert into t (id,a) values (705,90);
+insert into t (id,a) values (705,91);
+insert into t (id,a) values (705,92);
+insert into t (id,a) values (705,93);
+insert into t (id,a) values (705,94);
+insert into t (id,a) values (705,95);
+insert into t (id,a) values (705,96);
+insert into t (id,a) values (705,97);
+insert into t (id,a) values (705,98);
+insert into t (id,a) values (705,99);
+insert into t (id,a) values (706,0);
+insert into t (id,a) values (706,1);
+insert into t (id,a) values (706,2);
+insert into t (id,a) values (706,3);
+insert into t (id,a) values (706,4);
+insert into t (id,a) values (706,5);
+insert into t (id,a) values (706,6);
+insert into t (id,a) values (706,7);
+insert into t (id,a) values (706,8);
+insert into t (id,a) values (706,9);
+insert into t (id,a) values (706,10);
+insert into t (id,a) values (706,11);
+insert into t (id,a) values (706,12);
+insert into t (id,a) values (706,13);
+insert into t (id,a) values (706,14);
+insert into t (id,a) values (706,15);
+insert into t (id,a) values (706,16);
+insert into t (id,a) values (706,17);
+insert into t (id,a) values (706,18);
+insert into t (id,a) values (706,19);
+insert into t (id,a) values (706,20);
+insert into t (id,a) values (706,21);
+insert into t (id,a) values (706,22);
+insert into t (id,a) values (706,23);
+insert into t (id,a) values (706,24);
+insert into t (id,a) values (706,25);
+insert into t (id,a) values (706,26);
+insert into t (id,a) values (706,27);
+insert into t (id,a) values (706,28);
+insert into t (id,a) values (706,29);
+insert into t (id,a) values (706,30);
+insert into t (id,a) values (706,31);
+insert into t (id,a) values (706,32);
+insert into t (id,a) values (706,33);
+insert into t (id,a) values (706,34);
+insert into t (id,a) values (706,35);
+insert into t (id,a) values (706,36);
+insert into t (id,a) values (706,37);
+insert into t (id,a) values (706,38);
+insert into t (id,a) values (706,39);
+insert into t (id,a) values (706,40);
+insert into t (id,a) values (706,41);
+insert into t (id,a) values (706,42);
+insert into t (id,a) values (706,43);
+insert into t (id,a) values (706,44);
+insert into t (id,a) values (706,45);
+insert into t (id,a) values (706,46);
+insert into t (id,a) values (706,47);
+insert into t (id,a) values (706,48);
+insert into t (id,a) values (706,49);
+insert into t (id,a) values (706,50);
+insert into t (id,a) values (706,51);
+insert into t (id,a) values (706,52);
+insert into t (id,a) values (706,53);
+insert into t (id,a) values (706,54);
+insert into t (id,a) values (706,55);
+insert into t (id,a) values (706,56);
+insert into t (id,a) values (706,57);
+insert into t (id,a) values (706,58);
+insert into t (id,a) values (706,59);
+insert into t (id,a) values (706,60);
+insert into t (id,a) values (706,61);
+insert into t (id,a) values (706,62);
+insert into t (id,a) values (706,63);
+insert into t (id,a) values (706,64);
+insert into t (id,a) values (706,65);
+insert into t (id,a) values (706,66);
+insert into t (id,a) values (706,67);
+insert into t (id,a) values (706,68);
+insert into t (id,a) values (706,69);
+insert into t (id,a) values (706,70);
+insert into t (id,a) values (706,71);
+insert into t (id,a) values (706,72);
+insert into t (id,a) values (706,73);
+insert into t (id,a) values (706,74);
+insert into t (id,a) values (706,75);
+insert into t (id,a) values (706,76);
+insert into t (id,a) values (706,77);
+insert into t (id,a) values (706,78);
+insert into t (id,a) values (706,79);
+insert into t (id,a) values (706,80);
+insert into t (id,a) values (706,81);
+insert into t (id,a) values (706,82);
+insert into t (id,a) values (706,83);
+insert into t (id,a) values (706,84);
+insert into t (id,a) values (706,85);
+insert into t (id,a) values (706,86);
+insert into t (id,a) values (706,87);
+insert into t (id,a) values (706,88);
+insert into t (id,a) values (706,89);
+insert into t (id,a) values (706,90);
+insert into t (id,a) values (706,91);
+insert into t (id,a) values (706,92);
+insert into t (id,a) values (706,93);
+insert into t (id,a) values (706,94);
+insert into t (id,a) values (706,95);
+insert into t (id,a) values (706,96);
+insert into t (id,a) values (706,97);
+insert into t (id,a) values (706,98);
+insert into t (id,a) values (706,99);
+insert into t (id,a) values (707,0);
+insert into t (id,a) values (707,1);
+insert into t (id,a) values (707,2);
+insert into t (id,a) values (707,3);
+insert into t (id,a) values (707,4);
+insert into t (id,a) values (707,5);
+insert into t (id,a) values (707,6);
+insert into t (id,a) values (707,7);
+insert into t (id,a) values (707,8);
+insert into t (id,a) values (707,9);
+insert into t (id,a) values (707,10);
+insert into t (id,a) values (707,11);
+insert into t (id,a) values (707,12);
+insert into t (id,a) values (707,13);
+insert into t (id,a) values (707,14);
+insert into t (id,a) values (707,15);
+insert into t (id,a) values (707,16);
+insert into t (id,a) values (707,17);
+insert into t (id,a) values (707,18);
+insert into t (id,a) values (707,19);
+insert into t (id,a) values (707,20);
+insert into t (id,a) values (707,21);
+insert into t (id,a) values (707,22);
+insert into t (id,a) values (707,23);
+insert into t (id,a) values (707,24);
+insert into t (id,a) values (707,25);
+insert into t (id,a) values (707,26);
+insert into t (id,a) values (707,27);
+insert into t (id,a) values (707,28);
+insert into t (id,a) values (707,29);
+insert into t (id,a) values (707,30);
+insert into t (id,a) values (707,31);
+insert into t (id,a) values (707,32);
+insert into t (id,a) values (707,33);
+insert into t (id,a) values (707,34);
+insert into t (id,a) values (707,35);
+insert into t (id,a) values (707,36);
+insert into t (id,a) values (707,37);
+insert into t (id,a) values (707,38);
+insert into t (id,a) values (707,39);
+insert into t (id,a) values (707,40);
+insert into t (id,a) values (707,41);
+insert into t (id,a) values (707,42);
+insert into t (id,a) values (707,43);
+insert into t (id,a) values (707,44);
+insert into t (id,a) values (707,45);
+insert into t (id,a) values (707,46);
+insert into t (id,a) values (707,47);
+insert into t (id,a) values (707,48);
+insert into t (id,a) values (707,49);
+insert into t (id,a) values (707,50);
+insert into t (id,a) values (707,51);
+insert into t (id,a) values (707,52);
+insert into t (id,a) values (707,53);
+insert into t (id,a) values (707,54);
+insert into t (id,a) values (707,55);
+insert into t (id,a) values (707,56);
+insert into t (id,a) values (707,57);
+insert into t (id,a) values (707,58);
+insert into t (id,a) values (707,59);
+insert into t (id,a) values (707,60);
+insert into t (id,a) values (707,61);
+insert into t (id,a) values (707,62);
+insert into t (id,a) values (707,63);
+insert into t (id,a) values (707,64);
+insert into t (id,a) values (707,65);
+insert into t (id,a) values (707,66);
+insert into t (id,a) values (707,67);
+insert into t (id,a) values (707,68);
+insert into t (id,a) values (707,69);
+insert into t (id,a) values (707,70);
+insert into t (id,a) values (707,71);
+insert into t (id,a) values (707,72);
+insert into t (id,a) values (707,73);
+insert into t (id,a) values (707,74);
+insert into t (id,a) values (707,75);
+insert into t (id,a) values (707,76);
+insert into t (id,a) values (707,77);
+insert into t (id,a) values (707,78);
+insert into t (id,a) values (707,79);
+insert into t (id,a) values (707,80);
+insert into t (id,a) values (707,81);
+insert into t (id,a) values (707,82);
+insert into t (id,a) values (707,83);
+insert into t (id,a) values (707,84);
+insert into t (id,a) values (707,85);
+insert into t (id,a) values (707,86);
+insert into t (id,a) values (707,87);
+insert into t (id,a) values (707,88);
+insert into t (id,a) values (707,89);
+insert into t (id,a) values (707,90);
+insert into t (id,a) values (707,91);
+insert into t (id,a) values (707,92);
+insert into t (id,a) values (707,93);
+insert into t (id,a) values (707,94);
+insert into t (id,a) values (707,95);
+insert into t (id,a) values (707,96);
+insert into t (id,a) values (707,97);
+insert into t (id,a) values (707,98);
+insert into t (id,a) values (707,99);
+insert into t (id,a) values (708,0);
+insert into t (id,a) values (708,1);
+insert into t (id,a) values (708,2);
+insert into t (id,a) values (708,3);
+insert into t (id,a) values (708,4);
+insert into t (id,a) values (708,5);
+insert into t (id,a) values (708,6);
+insert into t (id,a) values (708,7);
+insert into t (id,a) values (708,8);
+insert into t (id,a) values (708,9);
+insert into t (id,a) values (708,10);
+insert into t (id,a) values (708,11);
+insert into t (id,a) values (708,12);
+insert into t (id,a) values (708,13);
+insert into t (id,a) values (708,14);
+insert into t (id,a) values (708,15);
+insert into t (id,a) values (708,16);
+insert into t (id,a) values (708,17);
+insert into t (id,a) values (708,18);
+insert into t (id,a) values (708,19);
+insert into t (id,a) values (708,20);
+insert into t (id,a) values (708,21);
+insert into t (id,a) values (708,22);
+insert into t (id,a) values (708,23);
+insert into t (id,a) values (708,24);
+insert into t (id,a) values (708,25);
+insert into t (id,a) values (708,26);
+insert into t (id,a) values (708,27);
+insert into t (id,a) values (708,28);
+insert into t (id,a) values (708,29);
+insert into t (id,a) values (708,30);
+insert into t (id,a) values (708,31);
+insert into t (id,a) values (708,32);
+insert into t (id,a) values (708,33);
+insert into t (id,a) values (708,34);
+insert into t (id,a) values (708,35);
+insert into t (id,a) values (708,36);
+insert into t (id,a) values (708,37);
+insert into t (id,a) values (708,38);
+insert into t (id,a) values (708,39);
+insert into t (id,a) values (708,40);
+insert into t (id,a) values (708,41);
+insert into t (id,a) values (708,42);
+insert into t (id,a) values (708,43);
+insert into t (id,a) values (708,44);
+insert into t (id,a) values (708,45);
+insert into t (id,a) values (708,46);
+insert into t (id,a) values (708,47);
+insert into t (id,a) values (708,48);
+insert into t (id,a) values (708,49);
+insert into t (id,a) values (708,50);
+insert into t (id,a) values (708,51);
+insert into t (id,a) values (708,52);
+insert into t (id,a) values (708,53);
+insert into t (id,a) values (708,54);
+insert into t (id,a) values (708,55);
+insert into t (id,a) values (708,56);
+insert into t (id,a) values (708,57);
+insert into t (id,a) values (708,58);
+insert into t (id,a) values (708,59);
+insert into t (id,a) values (708,60);
+insert into t (id,a) values (708,61);
+insert into t (id,a) values (708,62);
+insert into t (id,a) values (708,63);
+insert into t (id,a) values (708,64);
+insert into t (id,a) values (708,65);
+insert into t (id,a) values (708,66);
+insert into t (id,a) values (708,67);
+insert into t (id,a) values (708,68);
+insert into t (id,a) values (708,69);
+insert into t (id,a) values (708,70);
+insert into t (id,a) values (708,71);
+insert into t (id,a) values (708,72);
+insert into t (id,a) values (708,73);
+insert into t (id,a) values (708,74);
+insert into t (id,a) values (708,75);
+insert into t (id,a) values (708,76);
+insert into t (id,a) values (708,77);
+insert into t (id,a) values (708,78);
+insert into t (id,a) values (708,79);
+insert into t (id,a) values (708,80);
+insert into t (id,a) values (708,81);
+insert into t (id,a) values (708,82);
+insert into t (id,a) values (708,83);
+insert into t (id,a) values (708,84);
+insert into t (id,a) values (708,85);
+insert into t (id,a) values (708,86);
+insert into t (id,a) values (708,87);
+insert into t (id,a) values (708,88);
+insert into t (id,a) values (708,89);
+insert into t (id,a) values (708,90);
+insert into t (id,a) values (708,91);
+insert into t (id,a) values (708,92);
+insert into t (id,a) values (708,93);
+insert into t (id,a) values (708,94);
+insert into t (id,a) values (708,95);
+insert into t (id,a) values (708,96);
+insert into t (id,a) values (708,97);
+insert into t (id,a) values (708,98);
+insert into t (id,a) values (708,99);
+insert into t (id,a) values (709,0);
+insert into t (id,a) values (709,1);
+insert into t (id,a) values (709,2);
+insert into t (id,a) values (709,3);
+insert into t (id,a) values (709,4);
+insert into t (id,a) values (709,5);
+insert into t (id,a) values (709,6);
+insert into t (id,a) values (709,7);
+insert into t (id,a) values (709,8);
+insert into t (id,a) values (709,9);
+insert into t (id,a) values (709,10);
+insert into t (id,a) values (709,11);
+insert into t (id,a) values (709,12);
+insert into t (id,a) values (709,13);
+insert into t (id,a) values (709,14);
+insert into t (id,a) values (709,15);
+insert into t (id,a) values (709,16);
+insert into t (id,a) values (709,17);
+insert into t (id,a) values (709,18);
+insert into t (id,a) values (709,19);
+insert into t (id,a) values (709,20);
+insert into t (id,a) values (709,21);
+insert into t (id,a) values (709,22);
+insert into t (id,a) values (709,23);
+insert into t (id,a) values (709,24);
+insert into t (id,a) values (709,25);
+insert into t (id,a) values (709,26);
+insert into t (id,a) values (709,27);
+insert into t (id,a) values (709,28);
+insert into t (id,a) values (709,29);
+insert into t (id,a) values (709,30);
+insert into t (id,a) values (709,31);
+insert into t (id,a) values (709,32);
+insert into t (id,a) values (709,33);
+insert into t (id,a) values (709,34);
+insert into t (id,a) values (709,35);
+insert into t (id,a) values (709,36);
+insert into t (id,a) values (709,37);
+insert into t (id,a) values (709,38);
+insert into t (id,a) values (709,39);
+insert into t (id,a) values (709,40);
+insert into t (id,a) values (709,41);
+insert into t (id,a) values (709,42);
+insert into t (id,a) values (709,43);
+insert into t (id,a) values (709,44);
+insert into t (id,a) values (709,45);
+insert into t (id,a) values (709,46);
+insert into t (id,a) values (709,47);
+insert into t (id,a) values (709,48);
+insert into t (id,a) values (709,49);
+insert into t (id,a) values (709,50);
+insert into t (id,a) values (709,51);
+insert into t (id,a) values (709,52);
+insert into t (id,a) values (709,53);
+insert into t (id,a) values (709,54);
+insert into t (id,a) values (709,55);
+insert into t (id,a) values (709,56);
+insert into t (id,a) values (709,57);
+insert into t (id,a) values (709,58);
+insert into t (id,a) values (709,59);
+insert into t (id,a) values (709,60);
+insert into t (id,a) values (709,61);
+insert into t (id,a) values (709,62);
+insert into t (id,a) values (709,63);
+insert into t (id,a) values (709,64);
+insert into t (id,a) values (709,65);
+insert into t (id,a) values (709,66);
+insert into t (id,a) values (709,67);
+insert into t (id,a) values (709,68);
+insert into t (id,a) values (709,69);
+insert into t (id,a) values (709,70);
+insert into t (id,a) values (709,71);
+insert into t (id,a) values (709,72);
+insert into t (id,a) values (709,73);
+insert into t (id,a) values (709,74);
+insert into t (id,a) values (709,75);
+insert into t (id,a) values (709,76);
+insert into t (id,a) values (709,77);
+insert into t (id,a) values (709,78);
+insert into t (id,a) values (709,79);
+insert into t (id,a) values (709,80);
+insert into t (id,a) values (709,81);
+insert into t (id,a) values (709,82);
+insert into t (id,a) values (709,83);
+insert into t (id,a) values (709,84);
+insert into t (id,a) values (709,85);
+insert into t (id,a) values (709,86);
+insert into t (id,a) values (709,87);
+insert into t (id,a) values (709,88);
+insert into t (id,a) values (709,89);
+insert into t (id,a) values (709,90);
+insert into t (id,a) values (709,91);
+insert into t (id,a) values (709,92);
+insert into t (id,a) values (709,93);
+insert into t (id,a) values (709,94);
+insert into t (id,a) values (709,95);
+insert into t (id,a) values (709,96);
+insert into t (id,a) values (709,97);
+insert into t (id,a) values (709,98);
+insert into t (id,a) values (709,99);
+insert into t (id,a) values (710,0);
+insert into t (id,a) values (710,1);
+insert into t (id,a) values (710,2);
+insert into t (id,a) values (710,3);
+insert into t (id,a) values (710,4);
+insert into t (id,a) values (710,5);
+insert into t (id,a) values (710,6);
+insert into t (id,a) values (710,7);
+insert into t (id,a) values (710,8);
+insert into t (id,a) values (710,9);
+insert into t (id,a) values (710,10);
+insert into t (id,a) values (710,11);
+insert into t (id,a) values (710,12);
+insert into t (id,a) values (710,13);
+insert into t (id,a) values (710,14);
+insert into t (id,a) values (710,15);
+insert into t (id,a) values (710,16);
+insert into t (id,a) values (710,17);
+insert into t (id,a) values (710,18);
+insert into t (id,a) values (710,19);
+insert into t (id,a) values (710,20);
+insert into t (id,a) values (710,21);
+insert into t (id,a) values (710,22);
+insert into t (id,a) values (710,23);
+insert into t (id,a) values (710,24);
+insert into t (id,a) values (710,25);
+insert into t (id,a) values (710,26);
+insert into t (id,a) values (710,27);
+insert into t (id,a) values (710,28);
+insert into t (id,a) values (710,29);
+insert into t (id,a) values (710,30);
+insert into t (id,a) values (710,31);
+insert into t (id,a) values (710,32);
+insert into t (id,a) values (710,33);
+insert into t (id,a) values (710,34);
+insert into t (id,a) values (710,35);
+insert into t (id,a) values (710,36);
+insert into t (id,a) values (710,37);
+insert into t (id,a) values (710,38);
+insert into t (id,a) values (710,39);
+insert into t (id,a) values (710,40);
+insert into t (id,a) values (710,41);
+insert into t (id,a) values (710,42);
+insert into t (id,a) values (710,43);
+insert into t (id,a) values (710,44);
+insert into t (id,a) values (710,45);
+insert into t (id,a) values (710,46);
+insert into t (id,a) values (710,47);
+insert into t (id,a) values (710,48);
+insert into t (id,a) values (710,49);
+insert into t (id,a) values (710,50);
+insert into t (id,a) values (710,51);
+insert into t (id,a) values (710,52);
+insert into t (id,a) values (710,53);
+insert into t (id,a) values (710,54);
+insert into t (id,a) values (710,55);
+insert into t (id,a) values (710,56);
+insert into t (id,a) values (710,57);
+insert into t (id,a) values (710,58);
+insert into t (id,a) values (710,59);
+insert into t (id,a) values (710,60);
+insert into t (id,a) values (710,61);
+insert into t (id,a) values (710,62);
+insert into t (id,a) values (710,63);
+insert into t (id,a) values (710,64);
+insert into t (id,a) values (710,65);
+insert into t (id,a) values (710,66);
+insert into t (id,a) values (710,67);
+insert into t (id,a) values (710,68);
+insert into t (id,a) values (710,69);
+insert into t (id,a) values (710,70);
+insert into t (id,a) values (710,71);
+insert into t (id,a) values (710,72);
+insert into t (id,a) values (710,73);
+insert into t (id,a) values (710,74);
+insert into t (id,a) values (710,75);
+insert into t (id,a) values (710,76);
+insert into t (id,a) values (710,77);
+insert into t (id,a) values (710,78);
+insert into t (id,a) values (710,79);
+insert into t (id,a) values (710,80);
+insert into t (id,a) values (710,81);
+insert into t (id,a) values (710,82);
+insert into t (id,a) values (710,83);
+insert into t (id,a) values (710,84);
+insert into t (id,a) values (710,85);
+insert into t (id,a) values (710,86);
+insert into t (id,a) values (710,87);
+insert into t (id,a) values (710,88);
+insert into t (id,a) values (710,89);
+insert into t (id,a) values (710,90);
+insert into t (id,a) values (710,91);
+insert into t (id,a) values (710,92);
+insert into t (id,a) values (710,93);
+insert into t (id,a) values (710,94);
+insert into t (id,a) values (710,95);
+insert into t (id,a) values (710,96);
+insert into t (id,a) values (710,97);
+insert into t (id,a) values (710,98);
+insert into t (id,a) values (710,99);
+insert into t (id,a) values (711,0);
+insert into t (id,a) values (711,1);
+insert into t (id,a) values (711,2);
+insert into t (id,a) values (711,3);
+insert into t (id,a) values (711,4);
+insert into t (id,a) values (711,5);
+insert into t (id,a) values (711,6);
+insert into t (id,a) values (711,7);
+insert into t (id,a) values (711,8);
+insert into t (id,a) values (711,9);
+insert into t (id,a) values (711,10);
+insert into t (id,a) values (711,11);
+insert into t (id,a) values (711,12);
+insert into t (id,a) values (711,13);
+insert into t (id,a) values (711,14);
+insert into t (id,a) values (711,15);
+insert into t (id,a) values (711,16);
+insert into t (id,a) values (711,17);
+insert into t (id,a) values (711,18);
+insert into t (id,a) values (711,19);
+insert into t (id,a) values (711,20);
+insert into t (id,a) values (711,21);
+insert into t (id,a) values (711,22);
+insert into t (id,a) values (711,23);
+insert into t (id,a) values (711,24);
+insert into t (id,a) values (711,25);
+insert into t (id,a) values (711,26);
+insert into t (id,a) values (711,27);
+insert into t (id,a) values (711,28);
+insert into t (id,a) values (711,29);
+insert into t (id,a) values (711,30);
+insert into t (id,a) values (711,31);
+insert into t (id,a) values (711,32);
+insert into t (id,a) values (711,33);
+insert into t (id,a) values (711,34);
+insert into t (id,a) values (711,35);
+insert into t (id,a) values (711,36);
+insert into t (id,a) values (711,37);
+insert into t (id,a) values (711,38);
+insert into t (id,a) values (711,39);
+insert into t (id,a) values (711,40);
+insert into t (id,a) values (711,41);
+insert into t (id,a) values (711,42);
+insert into t (id,a) values (711,43);
+insert into t (id,a) values (711,44);
+insert into t (id,a) values (711,45);
+insert into t (id,a) values (711,46);
+insert into t (id,a) values (711,47);
+insert into t (id,a) values (711,48);
+insert into t (id,a) values (711,49);
+insert into t (id,a) values (711,50);
+insert into t (id,a) values (711,51);
+insert into t (id,a) values (711,52);
+insert into t (id,a) values (711,53);
+insert into t (id,a) values (711,54);
+insert into t (id,a) values (711,55);
+insert into t (id,a) values (711,56);
+insert into t (id,a) values (711,57);
+insert into t (id,a) values (711,58);
+insert into t (id,a) values (711,59);
+insert into t (id,a) values (711,60);
+insert into t (id,a) values (711,61);
+insert into t (id,a) values (711,62);
+insert into t (id,a) values (711,63);
+insert into t (id,a) values (711,64);
+insert into t (id,a) values (711,65);
+insert into t (id,a) values (711,66);
+insert into t (id,a) values (711,67);
+insert into t (id,a) values (711,68);
+insert into t (id,a) values (711,69);
+insert into t (id,a) values (711,70);
+insert into t (id,a) values (711,71);
+insert into t (id,a) values (711,72);
+insert into t (id,a) values (711,73);
+insert into t (id,a) values (711,74);
+insert into t (id,a) values (711,75);
+insert into t (id,a) values (711,76);
+insert into t (id,a) values (711,77);
+insert into t (id,a) values (711,78);
+insert into t (id,a) values (711,79);
+insert into t (id,a) values (711,80);
+insert into t (id,a) values (711,81);
+insert into t (id,a) values (711,82);
+insert into t (id,a) values (711,83);
+insert into t (id,a) values (711,84);
+insert into t (id,a) values (711,85);
+insert into t (id,a) values (711,86);
+insert into t (id,a) values (711,87);
+insert into t (id,a) values (711,88);
+insert into t (id,a) values (711,89);
+insert into t (id,a) values (711,90);
+insert into t (id,a) values (711,91);
+insert into t (id,a) values (711,92);
+insert into t (id,a) values (711,93);
+insert into t (id,a) values (711,94);
+insert into t (id,a) values (711,95);
+insert into t (id,a) values (711,96);
+insert into t (id,a) values (711,97);
+insert into t (id,a) values (711,98);
+insert into t (id,a) values (711,99);
+insert into t (id,a) values (712,0);
+insert into t (id,a) values (712,1);
+insert into t (id,a) values (712,2);
+insert into t (id,a) values (712,3);
+insert into t (id,a) values (712,4);
+insert into t (id,a) values (712,5);
+insert into t (id,a) values (712,6);
+insert into t (id,a) values (712,7);
+insert into t (id,a) values (712,8);
+insert into t (id,a) values (712,9);
+insert into t (id,a) values (712,10);
+insert into t (id,a) values (712,11);
+insert into t (id,a) values (712,12);
+insert into t (id,a) values (712,13);
+insert into t (id,a) values (712,14);
+insert into t (id,a) values (712,15);
+insert into t (id,a) values (712,16);
+insert into t (id,a) values (712,17);
+insert into t (id,a) values (712,18);
+insert into t (id,a) values (712,19);
+insert into t (id,a) values (712,20);
+insert into t (id,a) values (712,21);
+insert into t (id,a) values (712,22);
+insert into t (id,a) values (712,23);
+insert into t (id,a) values (712,24);
+insert into t (id,a) values (712,25);
+insert into t (id,a) values (712,26);
+insert into t (id,a) values (712,27);
+insert into t (id,a) values (712,28);
+insert into t (id,a) values (712,29);
+insert into t (id,a) values (712,30);
+insert into t (id,a) values (712,31);
+insert into t (id,a) values (712,32);
+insert into t (id,a) values (712,33);
+insert into t (id,a) values (712,34);
+insert into t (id,a) values (712,35);
+insert into t (id,a) values (712,36);
+insert into t (id,a) values (712,37);
+insert into t (id,a) values (712,38);
+insert into t (id,a) values (712,39);
+insert into t (id,a) values (712,40);
+insert into t (id,a) values (712,41);
+insert into t (id,a) values (712,42);
+insert into t (id,a) values (712,43);
+insert into t (id,a) values (712,44);
+insert into t (id,a) values (712,45);
+insert into t (id,a) values (712,46);
+insert into t (id,a) values (712,47);
+insert into t (id,a) values (712,48);
+insert into t (id,a) values (712,49);
+insert into t (id,a) values (712,50);
+insert into t (id,a) values (712,51);
+insert into t (id,a) values (712,52);
+insert into t (id,a) values (712,53);
+insert into t (id,a) values (712,54);
+insert into t (id,a) values (712,55);
+insert into t (id,a) values (712,56);
+insert into t (id,a) values (712,57);
+insert into t (id,a) values (712,58);
+insert into t (id,a) values (712,59);
+insert into t (id,a) values (712,60);
+insert into t (id,a) values (712,61);
+insert into t (id,a) values (712,62);
+insert into t (id,a) values (712,63);
+insert into t (id,a) values (712,64);
+insert into t (id,a) values (712,65);
+insert into t (id,a) values (712,66);
+insert into t (id,a) values (712,67);
+insert into t (id,a) values (712,68);
+insert into t (id,a) values (712,69);
+insert into t (id,a) values (712,70);
+insert into t (id,a) values (712,71);
+insert into t (id,a) values (712,72);
+insert into t (id,a) values (712,73);
+insert into t (id,a) values (712,74);
+insert into t (id,a) values (712,75);
+insert into t (id,a) values (712,76);
+insert into t (id,a) values (712,77);
+insert into t (id,a) values (712,78);
+insert into t (id,a) values (712,79);
+insert into t (id,a) values (712,80);
+insert into t (id,a) values (712,81);
+insert into t (id,a) values (712,82);
+insert into t (id,a) values (712,83);
+insert into t (id,a) values (712,84);
+insert into t (id,a) values (712,85);
+insert into t (id,a) values (712,86);
+insert into t (id,a) values (712,87);
+insert into t (id,a) values (712,88);
+insert into t (id,a) values (712,89);
+insert into t (id,a) values (712,90);
+insert into t (id,a) values (712,91);
+insert into t (id,a) values (712,92);
+insert into t (id,a) values (712,93);
+insert into t (id,a) values (712,94);
+insert into t (id,a) values (712,95);
+insert into t (id,a) values (712,96);
+insert into t (id,a) values (712,97);
+insert into t (id,a) values (712,98);
+insert into t (id,a) values (712,99);
+insert into t (id,a) values (713,0);
+insert into t (id,a) values (713,1);
+insert into t (id,a) values (713,2);
+insert into t (id,a) values (713,3);
+insert into t (id,a) values (713,4);
+insert into t (id,a) values (713,5);
+insert into t (id,a) values (713,6);
+insert into t (id,a) values (713,7);
+insert into t (id,a) values (713,8);
+insert into t (id,a) values (713,9);
+insert into t (id,a) values (713,10);
+insert into t (id,a) values (713,11);
+insert into t (id,a) values (713,12);
+insert into t (id,a) values (713,13);
+insert into t (id,a) values (713,14);
+insert into t (id,a) values (713,15);
+insert into t (id,a) values (713,16);
+insert into t (id,a) values (713,17);
+insert into t (id,a) values (713,18);
+insert into t (id,a) values (713,19);
+insert into t (id,a) values (713,20);
+insert into t (id,a) values (713,21);
+insert into t (id,a) values (713,22);
+insert into t (id,a) values (713,23);
+insert into t (id,a) values (713,24);
+insert into t (id,a) values (713,25);
+insert into t (id,a) values (713,26);
+insert into t (id,a) values (713,27);
+insert into t (id,a) values (713,28);
+insert into t (id,a) values (713,29);
+insert into t (id,a) values (713,30);
+insert into t (id,a) values (713,31);
+insert into t (id,a) values (713,32);
+insert into t (id,a) values (713,33);
+insert into t (id,a) values (713,34);
+insert into t (id,a) values (713,35);
+insert into t (id,a) values (713,36);
+insert into t (id,a) values (713,37);
+insert into t (id,a) values (713,38);
+insert into t (id,a) values (713,39);
+insert into t (id,a) values (713,40);
+insert into t (id,a) values (713,41);
+insert into t (id,a) values (713,42);
+insert into t (id,a) values (713,43);
+insert into t (id,a) values (713,44);
+insert into t (id,a) values (713,45);
+insert into t (id,a) values (713,46);
+insert into t (id,a) values (713,47);
+insert into t (id,a) values (713,48);
+insert into t (id,a) values (713,49);
+insert into t (id,a) values (713,50);
+insert into t (id,a) values (713,51);
+insert into t (id,a) values (713,52);
+insert into t (id,a) values (713,53);
+insert into t (id,a) values (713,54);
+insert into t (id,a) values (713,55);
+insert into t (id,a) values (713,56);
+insert into t (id,a) values (713,57);
+insert into t (id,a) values (713,58);
+insert into t (id,a) values (713,59);
+insert into t (id,a) values (713,60);
+insert into t (id,a) values (713,61);
+insert into t (id,a) values (713,62);
+insert into t (id,a) values (713,63);
+insert into t (id,a) values (713,64);
+insert into t (id,a) values (713,65);
+insert into t (id,a) values (713,66);
+insert into t (id,a) values (713,67);
+insert into t (id,a) values (713,68);
+insert into t (id,a) values (713,69);
+insert into t (id,a) values (713,70);
+insert into t (id,a) values (713,71);
+insert into t (id,a) values (713,72);
+insert into t (id,a) values (713,73);
+insert into t (id,a) values (713,74);
+insert into t (id,a) values (713,75);
+insert into t (id,a) values (713,76);
+insert into t (id,a) values (713,77);
+insert into t (id,a) values (713,78);
+insert into t (id,a) values (713,79);
+insert into t (id,a) values (713,80);
+insert into t (id,a) values (713,81);
+insert into t (id,a) values (713,82);
+insert into t (id,a) values (713,83);
+insert into t (id,a) values (713,84);
+insert into t (id,a) values (713,85);
+insert into t (id,a) values (713,86);
+insert into t (id,a) values (713,87);
+insert into t (id,a) values (713,88);
+insert into t (id,a) values (713,89);
+insert into t (id,a) values (713,90);
+insert into t (id,a) values (713,91);
+insert into t (id,a) values (713,92);
+insert into t (id,a) values (713,93);
+insert into t (id,a) values (713,94);
+insert into t (id,a) values (713,95);
+insert into t (id,a) values (713,96);
+insert into t (id,a) values (713,97);
+insert into t (id,a) values (713,98);
+insert into t (id,a) values (713,99);
+insert into t (id,a) values (714,0);
+insert into t (id,a) values (714,1);
+insert into t (id,a) values (714,2);
+insert into t (id,a) values (714,3);
+insert into t (id,a) values (714,4);
+insert into t (id,a) values (714,5);
+insert into t (id,a) values (714,6);
+insert into t (id,a) values (714,7);
+insert into t (id,a) values (714,8);
+insert into t (id,a) values (714,9);
+insert into t (id,a) values (714,10);
+insert into t (id,a) values (714,11);
+insert into t (id,a) values (714,12);
+insert into t (id,a) values (714,13);
+insert into t (id,a) values (714,14);
+insert into t (id,a) values (714,15);
+insert into t (id,a) values (714,16);
+insert into t (id,a) values (714,17);
+insert into t (id,a) values (714,18);
+insert into t (id,a) values (714,19);
+insert into t (id,a) values (714,20);
+insert into t (id,a) values (714,21);
+insert into t (id,a) values (714,22);
+insert into t (id,a) values (714,23);
+insert into t (id,a) values (714,24);
+insert into t (id,a) values (714,25);
+insert into t (id,a) values (714,26);
+insert into t (id,a) values (714,27);
+insert into t (id,a) values (714,28);
+insert into t (id,a) values (714,29);
+insert into t (id,a) values (714,30);
+insert into t (id,a) values (714,31);
+insert into t (id,a) values (714,32);
+insert into t (id,a) values (714,33);
+insert into t (id,a) values (714,34);
+insert into t (id,a) values (714,35);
+insert into t (id,a) values (714,36);
+insert into t (id,a) values (714,37);
+insert into t (id,a) values (714,38);
+insert into t (id,a) values (714,39);
+insert into t (id,a) values (714,40);
+insert into t (id,a) values (714,41);
+insert into t (id,a) values (714,42);
+insert into t (id,a) values (714,43);
+insert into t (id,a) values (714,44);
+insert into t (id,a) values (714,45);
+insert into t (id,a) values (714,46);
+insert into t (id,a) values (714,47);
+insert into t (id,a) values (714,48);
+insert into t (id,a) values (714,49);
+insert into t (id,a) values (714,50);
+insert into t (id,a) values (714,51);
+insert into t (id,a) values (714,52);
+insert into t (id,a) values (714,53);
+insert into t (id,a) values (714,54);
+insert into t (id,a) values (714,55);
+insert into t (id,a) values (714,56);
+insert into t (id,a) values (714,57);
+insert into t (id,a) values (714,58);
+insert into t (id,a) values (714,59);
+insert into t (id,a) values (714,60);
+insert into t (id,a) values (714,61);
+insert into t (id,a) values (714,62);
+insert into t (id,a) values (714,63);
+insert into t (id,a) values (714,64);
+insert into t (id,a) values (714,65);
+insert into t (id,a) values (714,66);
+insert into t (id,a) values (714,67);
+insert into t (id,a) values (714,68);
+insert into t (id,a) values (714,69);
+insert into t (id,a) values (714,70);
+insert into t (id,a) values (714,71);
+insert into t (id,a) values (714,72);
+insert into t (id,a) values (714,73);
+insert into t (id,a) values (714,74);
+insert into t (id,a) values (714,75);
+insert into t (id,a) values (714,76);
+insert into t (id,a) values (714,77);
+insert into t (id,a) values (714,78);
+insert into t (id,a) values (714,79);
+insert into t (id,a) values (714,80);
+insert into t (id,a) values (714,81);
+insert into t (id,a) values (714,82);
+insert into t (id,a) values (714,83);
+insert into t (id,a) values (714,84);
+insert into t (id,a) values (714,85);
+insert into t (id,a) values (714,86);
+insert into t (id,a) values (714,87);
+insert into t (id,a) values (714,88);
+insert into t (id,a) values (714,89);
+insert into t (id,a) values (714,90);
+insert into t (id,a) values (714,91);
+insert into t (id,a) values (714,92);
+insert into t (id,a) values (714,93);
+insert into t (id,a) values (714,94);
+insert into t (id,a) values (714,95);
+insert into t (id,a) values (714,96);
+insert into t (id,a) values (714,97);
+insert into t (id,a) values (714,98);
+insert into t (id,a) values (714,99);
+insert into t (id,a) values (715,0);
+insert into t (id,a) values (715,1);
+insert into t (id,a) values (715,2);
+insert into t (id,a) values (715,3);
+insert into t (id,a) values (715,4);
+insert into t (id,a) values (715,5);
+insert into t (id,a) values (715,6);
+insert into t (id,a) values (715,7);
+insert into t (id,a) values (715,8);
+insert into t (id,a) values (715,9);
+insert into t (id,a) values (715,10);
+insert into t (id,a) values (715,11);
+insert into t (id,a) values (715,12);
+insert into t (id,a) values (715,13);
+insert into t (id,a) values (715,14);
+insert into t (id,a) values (715,15);
+insert into t (id,a) values (715,16);
+insert into t (id,a) values (715,17);
+insert into t (id,a) values (715,18);
+insert into t (id,a) values (715,19);
+insert into t (id,a) values (715,20);
+insert into t (id,a) values (715,21);
+insert into t (id,a) values (715,22);
+insert into t (id,a) values (715,23);
+insert into t (id,a) values (715,24);
+insert into t (id,a) values (715,25);
+insert into t (id,a) values (715,26);
+insert into t (id,a) values (715,27);
+insert into t (id,a) values (715,28);
+insert into t (id,a) values (715,29);
+insert into t (id,a) values (715,30);
+insert into t (id,a) values (715,31);
+insert into t (id,a) values (715,32);
+insert into t (id,a) values (715,33);
+insert into t (id,a) values (715,34);
+insert into t (id,a) values (715,35);
+insert into t (id,a) values (715,36);
+insert into t (id,a) values (715,37);
+insert into t (id,a) values (715,38);
+insert into t (id,a) values (715,39);
+insert into t (id,a) values (715,40);
+insert into t (id,a) values (715,41);
+insert into t (id,a) values (715,42);
+insert into t (id,a) values (715,43);
+insert into t (id,a) values (715,44);
+insert into t (id,a) values (715,45);
+insert into t (id,a) values (715,46);
+insert into t (id,a) values (715,47);
+insert into t (id,a) values (715,48);
+insert into t (id,a) values (715,49);
+insert into t (id,a) values (715,50);
+insert into t (id,a) values (715,51);
+insert into t (id,a) values (715,52);
+insert into t (id,a) values (715,53);
+insert into t (id,a) values (715,54);
+insert into t (id,a) values (715,55);
+insert into t (id,a) values (715,56);
+insert into t (id,a) values (715,57);
+insert into t (id,a) values (715,58);
+insert into t (id,a) values (715,59);
+insert into t (id,a) values (715,60);
+insert into t (id,a) values (715,61);
+insert into t (id,a) values (715,62);
+insert into t (id,a) values (715,63);
+insert into t (id,a) values (715,64);
+insert into t (id,a) values (715,65);
+insert into t (id,a) values (715,66);
+insert into t (id,a) values (715,67);
+insert into t (id,a) values (715,68);
+insert into t (id,a) values (715,69);
+insert into t (id,a) values (715,70);
+insert into t (id,a) values (715,71);
+insert into t (id,a) values (715,72);
+insert into t (id,a) values (715,73);
+insert into t (id,a) values (715,74);
+insert into t (id,a) values (715,75);
+insert into t (id,a) values (715,76);
+insert into t (id,a) values (715,77);
+insert into t (id,a) values (715,78);
+insert into t (id,a) values (715,79);
+insert into t (id,a) values (715,80);
+insert into t (id,a) values (715,81);
+insert into t (id,a) values (715,82);
+insert into t (id,a) values (715,83);
+insert into t (id,a) values (715,84);
+insert into t (id,a) values (715,85);
+insert into t (id,a) values (715,86);
+insert into t (id,a) values (715,87);
+insert into t (id,a) values (715,88);
+insert into t (id,a) values (715,89);
+insert into t (id,a) values (715,90);
+insert into t (id,a) values (715,91);
+insert into t (id,a) values (715,92);
+insert into t (id,a) values (715,93);
+insert into t (id,a) values (715,94);
+insert into t (id,a) values (715,95);
+insert into t (id,a) values (715,96);
+insert into t (id,a) values (715,97);
+insert into t (id,a) values (715,98);
+insert into t (id,a) values (715,99);
+insert into t (id,a) values (716,0);
+insert into t (id,a) values (716,1);
+insert into t (id,a) values (716,2);
+insert into t (id,a) values (716,3);
+insert into t (id,a) values (716,4);
+insert into t (id,a) values (716,5);
+insert into t (id,a) values (716,6);
+insert into t (id,a) values (716,7);
+insert into t (id,a) values (716,8);
+insert into t (id,a) values (716,9);
+insert into t (id,a) values (716,10);
+insert into t (id,a) values (716,11);
+insert into t (id,a) values (716,12);
+insert into t (id,a) values (716,13);
+insert into t (id,a) values (716,14);
+insert into t (id,a) values (716,15);
+insert into t (id,a) values (716,16);
+insert into t (id,a) values (716,17);
+insert into t (id,a) values (716,18);
+insert into t (id,a) values (716,19);
+insert into t (id,a) values (716,20);
+insert into t (id,a) values (716,21);
+insert into t (id,a) values (716,22);
+insert into t (id,a) values (716,23);
+insert into t (id,a) values (716,24);
+insert into t (id,a) values (716,25);
+insert into t (id,a) values (716,26);
+insert into t (id,a) values (716,27);
+insert into t (id,a) values (716,28);
+insert into t (id,a) values (716,29);
+insert into t (id,a) values (716,30);
+insert into t (id,a) values (716,31);
+insert into t (id,a) values (716,32);
+insert into t (id,a) values (716,33);
+insert into t (id,a) values (716,34);
+insert into t (id,a) values (716,35);
+insert into t (id,a) values (716,36);
+insert into t (id,a) values (716,37);
+insert into t (id,a) values (716,38);
+insert into t (id,a) values (716,39);
+insert into t (id,a) values (716,40);
+insert into t (id,a) values (716,41);
+insert into t (id,a) values (716,42);
+insert into t (id,a) values (716,43);
+insert into t (id,a) values (716,44);
+insert into t (id,a) values (716,45);
+insert into t (id,a) values (716,46);
+insert into t (id,a) values (716,47);
+insert into t (id,a) values (716,48);
+insert into t (id,a) values (716,49);
+insert into t (id,a) values (716,50);
+insert into t (id,a) values (716,51);
+insert into t (id,a) values (716,52);
+insert into t (id,a) values (716,53);
+insert into t (id,a) values (716,54);
+insert into t (id,a) values (716,55);
+insert into t (id,a) values (716,56);
+insert into t (id,a) values (716,57);
+insert into t (id,a) values (716,58);
+insert into t (id,a) values (716,59);
+insert into t (id,a) values (716,60);
+insert into t (id,a) values (716,61);
+insert into t (id,a) values (716,62);
+insert into t (id,a) values (716,63);
+insert into t (id,a) values (716,64);
+insert into t (id,a) values (716,65);
+insert into t (id,a) values (716,66);
+insert into t (id,a) values (716,67);
+insert into t (id,a) values (716,68);
+insert into t (id,a) values (716,69);
+insert into t (id,a) values (716,70);
+insert into t (id,a) values (716,71);
+insert into t (id,a) values (716,72);
+insert into t (id,a) values (716,73);
+insert into t (id,a) values (716,74);
+insert into t (id,a) values (716,75);
+insert into t (id,a) values (716,76);
+insert into t (id,a) values (716,77);
+insert into t (id,a) values (716,78);
+insert into t (id,a) values (716,79);
+insert into t (id,a) values (716,80);
+insert into t (id,a) values (716,81);
+insert into t (id,a) values (716,82);
+insert into t (id,a) values (716,83);
+insert into t (id,a) values (716,84);
+insert into t (id,a) values (716,85);
+insert into t (id,a) values (716,86);
+insert into t (id,a) values (716,87);
+insert into t (id,a) values (716,88);
+insert into t (id,a) values (716,89);
+insert into t (id,a) values (716,90);
+insert into t (id,a) values (716,91);
+insert into t (id,a) values (716,92);
+insert into t (id,a) values (716,93);
+insert into t (id,a) values (716,94);
+insert into t (id,a) values (716,95);
+insert into t (id,a) values (716,96);
+insert into t (id,a) values (716,97);
+insert into t (id,a) values (716,98);
+insert into t (id,a) values (716,99);
+insert into t (id,a) values (717,0);
+insert into t (id,a) values (717,1);
+insert into t (id,a) values (717,2);
+insert into t (id,a) values (717,3);
+insert into t (id,a) values (717,4);
+insert into t (id,a) values (717,5);
+insert into t (id,a) values (717,6);
+insert into t (id,a) values (717,7);
+insert into t (id,a) values (717,8);
+insert into t (id,a) values (717,9);
+insert into t (id,a) values (717,10);
+insert into t (id,a) values (717,11);
+insert into t (id,a) values (717,12);
+insert into t (id,a) values (717,13);
+insert into t (id,a) values (717,14);
+insert into t (id,a) values (717,15);
+insert into t (id,a) values (717,16);
+insert into t (id,a) values (717,17);
+insert into t (id,a) values (717,18);
+insert into t (id,a) values (717,19);
+insert into t (id,a) values (717,20);
+insert into t (id,a) values (717,21);
+insert into t (id,a) values (717,22);
+insert into t (id,a) values (717,23);
+insert into t (id,a) values (717,24);
+insert into t (id,a) values (717,25);
+insert into t (id,a) values (717,26);
+insert into t (id,a) values (717,27);
+insert into t (id,a) values (717,28);
+insert into t (id,a) values (717,29);
+insert into t (id,a) values (717,30);
+insert into t (id,a) values (717,31);
+insert into t (id,a) values (717,32);
+insert into t (id,a) values (717,33);
+insert into t (id,a) values (717,34);
+insert into t (id,a) values (717,35);
+insert into t (id,a) values (717,36);
+insert into t (id,a) values (717,37);
+insert into t (id,a) values (717,38);
+insert into t (id,a) values (717,39);
+insert into t (id,a) values (717,40);
+insert into t (id,a) values (717,41);
+insert into t (id,a) values (717,42);
+insert into t (id,a) values (717,43);
+insert into t (id,a) values (717,44);
+insert into t (id,a) values (717,45);
+insert into t (id,a) values (717,46);
+insert into t (id,a) values (717,47);
+insert into t (id,a) values (717,48);
+insert into t (id,a) values (717,49);
+insert into t (id,a) values (717,50);
+insert into t (id,a) values (717,51);
+insert into t (id,a) values (717,52);
+insert into t (id,a) values (717,53);
+insert into t (id,a) values (717,54);
+insert into t (id,a) values (717,55);
+insert into t (id,a) values (717,56);
+insert into t (id,a) values (717,57);
+insert into t (id,a) values (717,58);
+insert into t (id,a) values (717,59);
+insert into t (id,a) values (717,60);
+insert into t (id,a) values (717,61);
+insert into t (id,a) values (717,62);
+insert into t (id,a) values (717,63);
+insert into t (id,a) values (717,64);
+insert into t (id,a) values (717,65);
+insert into t (id,a) values (717,66);
+insert into t (id,a) values (717,67);
+insert into t (id,a) values (717,68);
+insert into t (id,a) values (717,69);
+insert into t (id,a) values (717,70);
+insert into t (id,a) values (717,71);
+insert into t (id,a) values (717,72);
+insert into t (id,a) values (717,73);
+insert into t (id,a) values (717,74);
+insert into t (id,a) values (717,75);
+insert into t (id,a) values (717,76);
+insert into t (id,a) values (717,77);
+insert into t (id,a) values (717,78);
+insert into t (id,a) values (717,79);
+insert into t (id,a) values (717,80);
+insert into t (id,a) values (717,81);
+insert into t (id,a) values (717,82);
+insert into t (id,a) values (717,83);
+insert into t (id,a) values (717,84);
+insert into t (id,a) values (717,85);
+insert into t (id,a) values (717,86);
+insert into t (id,a) values (717,87);
+insert into t (id,a) values (717,88);
+insert into t (id,a) values (717,89);
+insert into t (id,a) values (717,90);
+insert into t (id,a) values (717,91);
+insert into t (id,a) values (717,92);
+insert into t (id,a) values (717,93);
+insert into t (id,a) values (717,94);
+insert into t (id,a) values (717,95);
+insert into t (id,a) values (717,96);
+insert into t (id,a) values (717,97);
+insert into t (id,a) values (717,98);
+insert into t (id,a) values (717,99);
+insert into t (id,a) values (718,0);
+insert into t (id,a) values (718,1);
+insert into t (id,a) values (718,2);
+insert into t (id,a) values (718,3);
+insert into t (id,a) values (718,4);
+insert into t (id,a) values (718,5);
+insert into t (id,a) values (718,6);
+insert into t (id,a) values (718,7);
+insert into t (id,a) values (718,8);
+insert into t (id,a) values (718,9);
+insert into t (id,a) values (718,10);
+insert into t (id,a) values (718,11);
+insert into t (id,a) values (718,12);
+insert into t (id,a) values (718,13);
+insert into t (id,a) values (718,14);
+insert into t (id,a) values (718,15);
+insert into t (id,a) values (718,16);
+insert into t (id,a) values (718,17);
+insert into t (id,a) values (718,18);
+insert into t (id,a) values (718,19);
+insert into t (id,a) values (718,20);
+insert into t (id,a) values (718,21);
+insert into t (id,a) values (718,22);
+insert into t (id,a) values (718,23);
+insert into t (id,a) values (718,24);
+insert into t (id,a) values (718,25);
+insert into t (id,a) values (718,26);
+insert into t (id,a) values (718,27);
+insert into t (id,a) values (718,28);
+insert into t (id,a) values (718,29);
+insert into t (id,a) values (718,30);
+insert into t (id,a) values (718,31);
+insert into t (id,a) values (718,32);
+insert into t (id,a) values (718,33);
+insert into t (id,a) values (718,34);
+insert into t (id,a) values (718,35);
+insert into t (id,a) values (718,36);
+insert into t (id,a) values (718,37);
+insert into t (id,a) values (718,38);
+insert into t (id,a) values (718,39);
+insert into t (id,a) values (718,40);
+insert into t (id,a) values (718,41);
+insert into t (id,a) values (718,42);
+insert into t (id,a) values (718,43);
+insert into t (id,a) values (718,44);
+insert into t (id,a) values (718,45);
+insert into t (id,a) values (718,46);
+insert into t (id,a) values (718,47);
+insert into t (id,a) values (718,48);
+insert into t (id,a) values (718,49);
+insert into t (id,a) values (718,50);
+insert into t (id,a) values (718,51);
+insert into t (id,a) values (718,52);
+insert into t (id,a) values (718,53);
+insert into t (id,a) values (718,54);
+insert into t (id,a) values (718,55);
+insert into t (id,a) values (718,56);
+insert into t (id,a) values (718,57);
+insert into t (id,a) values (718,58);
+insert into t (id,a) values (718,59);
+insert into t (id,a) values (718,60);
+insert into t (id,a) values (718,61);
+insert into t (id,a) values (718,62);
+insert into t (id,a) values (718,63);
+insert into t (id,a) values (718,64);
+insert into t (id,a) values (718,65);
+insert into t (id,a) values (718,66);
+insert into t (id,a) values (718,67);
+insert into t (id,a) values (718,68);
+insert into t (id,a) values (718,69);
+insert into t (id,a) values (718,70);
+insert into t (id,a) values (718,71);
+insert into t (id,a) values (718,72);
+insert into t (id,a) values (718,73);
+insert into t (id,a) values (718,74);
+insert into t (id,a) values (718,75);
+insert into t (id,a) values (718,76);
+insert into t (id,a) values (718,77);
+insert into t (id,a) values (718,78);
+insert into t (id,a) values (718,79);
+insert into t (id,a) values (718,80);
+insert into t (id,a) values (718,81);
+insert into t (id,a) values (718,82);
+insert into t (id,a) values (718,83);
+insert into t (id,a) values (718,84);
+insert into t (id,a) values (718,85);
+insert into t (id,a) values (718,86);
+insert into t (id,a) values (718,87);
+insert into t (id,a) values (718,88);
+insert into t (id,a) values (718,89);
+insert into t (id,a) values (718,90);
+insert into t (id,a) values (718,91);
+insert into t (id,a) values (718,92);
+insert into t (id,a) values (718,93);
+insert into t (id,a) values (718,94);
+insert into t (id,a) values (718,95);
+insert into t (id,a) values (718,96);
+insert into t (id,a) values (718,97);
+insert into t (id,a) values (718,98);
+insert into t (id,a) values (718,99);
+insert into t (id,a) values (719,0);
+insert into t (id,a) values (719,1);
+insert into t (id,a) values (719,2);
+insert into t (id,a) values (719,3);
+insert into t (id,a) values (719,4);
+insert into t (id,a) values (719,5);
+insert into t (id,a) values (719,6);
+insert into t (id,a) values (719,7);
+insert into t (id,a) values (719,8);
+insert into t (id,a) values (719,9);
+insert into t (id,a) values (719,10);
+insert into t (id,a) values (719,11);
+insert into t (id,a) values (719,12);
+insert into t (id,a) values (719,13);
+insert into t (id,a) values (719,14);
+insert into t (id,a) values (719,15);
+insert into t (id,a) values (719,16);
+insert into t (id,a) values (719,17);
+insert into t (id,a) values (719,18);
+insert into t (id,a) values (719,19);
+insert into t (id,a) values (719,20);
+insert into t (id,a) values (719,21);
+insert into t (id,a) values (719,22);
+insert into t (id,a) values (719,23);
+insert into t (id,a) values (719,24);
+insert into t (id,a) values (719,25);
+insert into t (id,a) values (719,26);
+insert into t (id,a) values (719,27);
+insert into t (id,a) values (719,28);
+insert into t (id,a) values (719,29);
+insert into t (id,a) values (719,30);
+insert into t (id,a) values (719,31);
+insert into t (id,a) values (719,32);
+insert into t (id,a) values (719,33);
+insert into t (id,a) values (719,34);
+insert into t (id,a) values (719,35);
+insert into t (id,a) values (719,36);
+insert into t (id,a) values (719,37);
+insert into t (id,a) values (719,38);
+insert into t (id,a) values (719,39);
+insert into t (id,a) values (719,40);
+insert into t (id,a) values (719,41);
+insert into t (id,a) values (719,42);
+insert into t (id,a) values (719,43);
+insert into t (id,a) values (719,44);
+insert into t (id,a) values (719,45);
+insert into t (id,a) values (719,46);
+insert into t (id,a) values (719,47);
+insert into t (id,a) values (719,48);
+insert into t (id,a) values (719,49);
+insert into t (id,a) values (719,50);
+insert into t (id,a) values (719,51);
+insert into t (id,a) values (719,52);
+insert into t (id,a) values (719,53);
+insert into t (id,a) values (719,54);
+insert into t (id,a) values (719,55);
+insert into t (id,a) values (719,56);
+insert into t (id,a) values (719,57);
+insert into t (id,a) values (719,58);
+insert into t (id,a) values (719,59);
+insert into t (id,a) values (719,60);
+insert into t (id,a) values (719,61);
+insert into t (id,a) values (719,62);
+insert into t (id,a) values (719,63);
+insert into t (id,a) values (719,64);
+insert into t (id,a) values (719,65);
+insert into t (id,a) values (719,66);
+insert into t (id,a) values (719,67);
+insert into t (id,a) values (719,68);
+insert into t (id,a) values (719,69);
+insert into t (id,a) values (719,70);
+insert into t (id,a) values (719,71);
+insert into t (id,a) values (719,72);
+insert into t (id,a) values (719,73);
+insert into t (id,a) values (719,74);
+insert into t (id,a) values (719,75);
+insert into t (id,a) values (719,76);
+insert into t (id,a) values (719,77);
+insert into t (id,a) values (719,78);
+insert into t (id,a) values (719,79);
+insert into t (id,a) values (719,80);
+insert into t (id,a) values (719,81);
+insert into t (id,a) values (719,82);
+insert into t (id,a) values (719,83);
+insert into t (id,a) values (719,84);
+insert into t (id,a) values (719,85);
+insert into t (id,a) values (719,86);
+insert into t (id,a) values (719,87);
+insert into t (id,a) values (719,88);
+insert into t (id,a) values (719,89);
+insert into t (id,a) values (719,90);
+insert into t (id,a) values (719,91);
+insert into t (id,a) values (719,92);
+insert into t (id,a) values (719,93);
+insert into t (id,a) values (719,94);
+insert into t (id,a) values (719,95);
+insert into t (id,a) values (719,96);
+insert into t (id,a) values (719,97);
+insert into t (id,a) values (719,98);
+insert into t (id,a) values (719,99);
+insert into t (id,a) values (720,0);
+insert into t (id,a) values (720,1);
+insert into t (id,a) values (720,2);
+insert into t (id,a) values (720,3);
+insert into t (id,a) values (720,4);
+insert into t (id,a) values (720,5);
+insert into t (id,a) values (720,6);
+insert into t (id,a) values (720,7);
+insert into t (id,a) values (720,8);
+insert into t (id,a) values (720,9);
+insert into t (id,a) values (720,10);
+insert into t (id,a) values (720,11);
+insert into t (id,a) values (720,12);
+insert into t (id,a) values (720,13);
+insert into t (id,a) values (720,14);
+insert into t (id,a) values (720,15);
+insert into t (id,a) values (720,16);
+insert into t (id,a) values (720,17);
+insert into t (id,a) values (720,18);
+insert into t (id,a) values (720,19);
+insert into t (id,a) values (720,20);
+insert into t (id,a) values (720,21);
+insert into t (id,a) values (720,22);
+insert into t (id,a) values (720,23);
+insert into t (id,a) values (720,24);
+insert into t (id,a) values (720,25);
+insert into t (id,a) values (720,26);
+insert into t (id,a) values (720,27);
+insert into t (id,a) values (720,28);
+insert into t (id,a) values (720,29);
+insert into t (id,a) values (720,30);
+insert into t (id,a) values (720,31);
+insert into t (id,a) values (720,32);
+insert into t (id,a) values (720,33);
+insert into t (id,a) values (720,34);
+insert into t (id,a) values (720,35);
+insert into t (id,a) values (720,36);
+insert into t (id,a) values (720,37);
+insert into t (id,a) values (720,38);
+insert into t (id,a) values (720,39);
+insert into t (id,a) values (720,40);
+insert into t (id,a) values (720,41);
+insert into t (id,a) values (720,42);
+insert into t (id,a) values (720,43);
+insert into t (id,a) values (720,44);
+insert into t (id,a) values (720,45);
+insert into t (id,a) values (720,46);
+insert into t (id,a) values (720,47);
+insert into t (id,a) values (720,48);
+insert into t (id,a) values (720,49);
+insert into t (id,a) values (720,50);
+insert into t (id,a) values (720,51);
+insert into t (id,a) values (720,52);
+insert into t (id,a) values (720,53);
+insert into t (id,a) values (720,54);
+insert into t (id,a) values (720,55);
+insert into t (id,a) values (720,56);
+insert into t (id,a) values (720,57);
+insert into t (id,a) values (720,58);
+insert into t (id,a) values (720,59);
+insert into t (id,a) values (720,60);
+insert into t (id,a) values (720,61);
+insert into t (id,a) values (720,62);
+insert into t (id,a) values (720,63);
+insert into t (id,a) values (720,64);
+insert into t (id,a) values (720,65);
+insert into t (id,a) values (720,66);
+insert into t (id,a) values (720,67);
+insert into t (id,a) values (720,68);
+insert into t (id,a) values (720,69);
+insert into t (id,a) values (720,70);
+insert into t (id,a) values (720,71);
+insert into t (id,a) values (720,72);
+insert into t (id,a) values (720,73);
+insert into t (id,a) values (720,74);
+insert into t (id,a) values (720,75);
+insert into t (id,a) values (720,76);
+insert into t (id,a) values (720,77);
+insert into t (id,a) values (720,78);
+insert into t (id,a) values (720,79);
+insert into t (id,a) values (720,80);
+insert into t (id,a) values (720,81);
+insert into t (id,a) values (720,82);
+insert into t (id,a) values (720,83);
+insert into t (id,a) values (720,84);
+insert into t (id,a) values (720,85);
+insert into t (id,a) values (720,86);
+insert into t (id,a) values (720,87);
+insert into t (id,a) values (720,88);
+insert into t (id,a) values (720,89);
+insert into t (id,a) values (720,90);
+insert into t (id,a) values (720,91);
+insert into t (id,a) values (720,92);
+insert into t (id,a) values (720,93);
+insert into t (id,a) values (720,94);
+insert into t (id,a) values (720,95);
+insert into t (id,a) values (720,96);
+insert into t (id,a) values (720,97);
+insert into t (id,a) values (720,98);
+insert into t (id,a) values (720,99);
+insert into t (id,a) values (721,0);
+insert into t (id,a) values (721,1);
+insert into t (id,a) values (721,2);
+insert into t (id,a) values (721,3);
+insert into t (id,a) values (721,4);
+insert into t (id,a) values (721,5);
+insert into t (id,a) values (721,6);
+insert into t (id,a) values (721,7);
+insert into t (id,a) values (721,8);
+insert into t (id,a) values (721,9);
+insert into t (id,a) values (721,10);
+insert into t (id,a) values (721,11);
+insert into t (id,a) values (721,12);
+insert into t (id,a) values (721,13);
+insert into t (id,a) values (721,14);
+insert into t (id,a) values (721,15);
+insert into t (id,a) values (721,16);
+insert into t (id,a) values (721,17);
+insert into t (id,a) values (721,18);
+insert into t (id,a) values (721,19);
+insert into t (id,a) values (721,20);
+insert into t (id,a) values (721,21);
+insert into t (id,a) values (721,22);
+insert into t (id,a) values (721,23);
+insert into t (id,a) values (721,24);
+insert into t (id,a) values (721,25);
+insert into t (id,a) values (721,26);
+insert into t (id,a) values (721,27);
+insert into t (id,a) values (721,28);
+insert into t (id,a) values (721,29);
+insert into t (id,a) values (721,30);
+insert into t (id,a) values (721,31);
+insert into t (id,a) values (721,32);
+insert into t (id,a) values (721,33);
+insert into t (id,a) values (721,34);
+insert into t (id,a) values (721,35);
+insert into t (id,a) values (721,36);
+insert into t (id,a) values (721,37);
+insert into t (id,a) values (721,38);
+insert into t (id,a) values (721,39);
+insert into t (id,a) values (721,40);
+insert into t (id,a) values (721,41);
+insert into t (id,a) values (721,42);
+insert into t (id,a) values (721,43);
+insert into t (id,a) values (721,44);
+insert into t (id,a) values (721,45);
+insert into t (id,a) values (721,46);
+insert into t (id,a) values (721,47);
+insert into t (id,a) values (721,48);
+insert into t (id,a) values (721,49);
+insert into t (id,a) values (721,50);
+insert into t (id,a) values (721,51);
+insert into t (id,a) values (721,52);
+insert into t (id,a) values (721,53);
+insert into t (id,a) values (721,54);
+insert into t (id,a) values (721,55);
+insert into t (id,a) values (721,56);
+insert into t (id,a) values (721,57);
+insert into t (id,a) values (721,58);
+insert into t (id,a) values (721,59);
+insert into t (id,a) values (721,60);
+insert into t (id,a) values (721,61);
+insert into t (id,a) values (721,62);
+insert into t (id,a) values (721,63);
+insert into t (id,a) values (721,64);
+insert into t (id,a) values (721,65);
+insert into t (id,a) values (721,66);
+insert into t (id,a) values (721,67);
+insert into t (id,a) values (721,68);
+insert into t (id,a) values (721,69);
+insert into t (id,a) values (721,70);
+insert into t (id,a) values (721,71);
+insert into t (id,a) values (721,72);
+insert into t (id,a) values (721,73);
+insert into t (id,a) values (721,74);
+insert into t (id,a) values (721,75);
+insert into t (id,a) values (721,76);
+insert into t (id,a) values (721,77);
+insert into t (id,a) values (721,78);
+insert into t (id,a) values (721,79);
+insert into t (id,a) values (721,80);
+insert into t (id,a) values (721,81);
+insert into t (id,a) values (721,82);
+insert into t (id,a) values (721,83);
+insert into t (id,a) values (721,84);
+insert into t (id,a) values (721,85);
+insert into t (id,a) values (721,86);
+insert into t (id,a) values (721,87);
+insert into t (id,a) values (721,88);
+insert into t (id,a) values (721,89);
+insert into t (id,a) values (721,90);
+insert into t (id,a) values (721,91);
+insert into t (id,a) values (721,92);
+insert into t (id,a) values (721,93);
+insert into t (id,a) values (721,94);
+insert into t (id,a) values (721,95);
+insert into t (id,a) values (721,96);
+insert into t (id,a) values (721,97);
+insert into t (id,a) values (721,98);
+insert into t (id,a) values (721,99);
+insert into t (id,a) values (722,0);
+insert into t (id,a) values (722,1);
+insert into t (id,a) values (722,2);
+insert into t (id,a) values (722,3);
+insert into t (id,a) values (722,4);
+insert into t (id,a) values (722,5);
+insert into t (id,a) values (722,6);
+insert into t (id,a) values (722,7);
+insert into t (id,a) values (722,8);
+insert into t (id,a) values (722,9);
+insert into t (id,a) values (722,10);
+insert into t (id,a) values (722,11);
+insert into t (id,a) values (722,12);
+insert into t (id,a) values (722,13);
+insert into t (id,a) values (722,14);
+insert into t (id,a) values (722,15);
+insert into t (id,a) values (722,16);
+insert into t (id,a) values (722,17);
+insert into t (id,a) values (722,18);
+insert into t (id,a) values (722,19);
+insert into t (id,a) values (722,20);
+insert into t (id,a) values (722,21);
+insert into t (id,a) values (722,22);
+insert into t (id,a) values (722,23);
+insert into t (id,a) values (722,24);
+insert into t (id,a) values (722,25);
+insert into t (id,a) values (722,26);
+insert into t (id,a) values (722,27);
+insert into t (id,a) values (722,28);
+insert into t (id,a) values (722,29);
+insert into t (id,a) values (722,30);
+insert into t (id,a) values (722,31);
+insert into t (id,a) values (722,32);
+insert into t (id,a) values (722,33);
+insert into t (id,a) values (722,34);
+insert into t (id,a) values (722,35);
+insert into t (id,a) values (722,36);
+insert into t (id,a) values (722,37);
+insert into t (id,a) values (722,38);
+insert into t (id,a) values (722,39);
+insert into t (id,a) values (722,40);
+insert into t (id,a) values (722,41);
+insert into t (id,a) values (722,42);
+insert into t (id,a) values (722,43);
+insert into t (id,a) values (722,44);
+insert into t (id,a) values (722,45);
+insert into t (id,a) values (722,46);
+insert into t (id,a) values (722,47);
+insert into t (id,a) values (722,48);
+insert into t (id,a) values (722,49);
+insert into t (id,a) values (722,50);
+insert into t (id,a) values (722,51);
+insert into t (id,a) values (722,52);
+insert into t (id,a) values (722,53);
+insert into t (id,a) values (722,54);
+insert into t (id,a) values (722,55);
+insert into t (id,a) values (722,56);
+insert into t (id,a) values (722,57);
+insert into t (id,a) values (722,58);
+insert into t (id,a) values (722,59);
+insert into t (id,a) values (722,60);
+insert into t (id,a) values (722,61);
+insert into t (id,a) values (722,62);
+insert into t (id,a) values (722,63);
+insert into t (id,a) values (722,64);
+insert into t (id,a) values (722,65);
+insert into t (id,a) values (722,66);
+insert into t (id,a) values (722,67);
+insert into t (id,a) values (722,68);
+insert into t (id,a) values (722,69);
+insert into t (id,a) values (722,70);
+insert into t (id,a) values (722,71);
+insert into t (id,a) values (722,72);
+insert into t (id,a) values (722,73);
+insert into t (id,a) values (722,74);
+insert into t (id,a) values (722,75);
+insert into t (id,a) values (722,76);
+insert into t (id,a) values (722,77);
+insert into t (id,a) values (722,78);
+insert into t (id,a) values (722,79);
+insert into t (id,a) values (722,80);
+insert into t (id,a) values (722,81);
+insert into t (id,a) values (722,82);
+insert into t (id,a) values (722,83);
+insert into t (id,a) values (722,84);
+insert into t (id,a) values (722,85);
+insert into t (id,a) values (722,86);
+insert into t (id,a) values (722,87);
+insert into t (id,a) values (722,88);
+insert into t (id,a) values (722,89);
+insert into t (id,a) values (722,90);
+insert into t (id,a) values (722,91);
+insert into t (id,a) values (722,92);
+insert into t (id,a) values (722,93);
+insert into t (id,a) values (722,94);
+insert into t (id,a) values (722,95);
+insert into t (id,a) values (722,96);
+insert into t (id,a) values (722,97);
+insert into t (id,a) values (722,98);
+insert into t (id,a) values (722,99);
+insert into t (id,a) values (723,0);
+insert into t (id,a) values (723,1);
+insert into t (id,a) values (723,2);
+insert into t (id,a) values (723,3);
+insert into t (id,a) values (723,4);
+insert into t (id,a) values (723,5);
+insert into t (id,a) values (723,6);
+insert into t (id,a) values (723,7);
+insert into t (id,a) values (723,8);
+insert into t (id,a) values (723,9);
+insert into t (id,a) values (723,10);
+insert into t (id,a) values (723,11);
+insert into t (id,a) values (723,12);
+insert into t (id,a) values (723,13);
+insert into t (id,a) values (723,14);
+insert into t (id,a) values (723,15);
+insert into t (id,a) values (723,16);
+insert into t (id,a) values (723,17);
+insert into t (id,a) values (723,18);
+insert into t (id,a) values (723,19);
+insert into t (id,a) values (723,20);
+insert into t (id,a) values (723,21);
+insert into t (id,a) values (723,22);
+insert into t (id,a) values (723,23);
+insert into t (id,a) values (723,24);
+insert into t (id,a) values (723,25);
+insert into t (id,a) values (723,26);
+insert into t (id,a) values (723,27);
+insert into t (id,a) values (723,28);
+insert into t (id,a) values (723,29);
+insert into t (id,a) values (723,30);
+insert into t (id,a) values (723,31);
+insert into t (id,a) values (723,32);
+insert into t (id,a) values (723,33);
+insert into t (id,a) values (723,34);
+insert into t (id,a) values (723,35);
+insert into t (id,a) values (723,36);
+insert into t (id,a) values (723,37);
+insert into t (id,a) values (723,38);
+insert into t (id,a) values (723,39);
+insert into t (id,a) values (723,40);
+insert into t (id,a) values (723,41);
+insert into t (id,a) values (723,42);
+insert into t (id,a) values (723,43);
+insert into t (id,a) values (723,44);
+insert into t (id,a) values (723,45);
+insert into t (id,a) values (723,46);
+insert into t (id,a) values (723,47);
+insert into t (id,a) values (723,48);
+insert into t (id,a) values (723,49);
+insert into t (id,a) values (723,50);
+insert into t (id,a) values (723,51);
+insert into t (id,a) values (723,52);
+insert into t (id,a) values (723,53);
+insert into t (id,a) values (723,54);
+insert into t (id,a) values (723,55);
+insert into t (id,a) values (723,56);
+insert into t (id,a) values (723,57);
+insert into t (id,a) values (723,58);
+insert into t (id,a) values (723,59);
+insert into t (id,a) values (723,60);
+insert into t (id,a) values (723,61);
+insert into t (id,a) values (723,62);
+insert into t (id,a) values (723,63);
+insert into t (id,a) values (723,64);
+insert into t (id,a) values (723,65);
+insert into t (id,a) values (723,66);
+insert into t (id,a) values (723,67);
+insert into t (id,a) values (723,68);
+insert into t (id,a) values (723,69);
+insert into t (id,a) values (723,70);
+insert into t (id,a) values (723,71);
+insert into t (id,a) values (723,72);
+insert into t (id,a) values (723,73);
+insert into t (id,a) values (723,74);
+insert into t (id,a) values (723,75);
+insert into t (id,a) values (723,76);
+insert into t (id,a) values (723,77);
+insert into t (id,a) values (723,78);
+insert into t (id,a) values (723,79);
+insert into t (id,a) values (723,80);
+insert into t (id,a) values (723,81);
+insert into t (id,a) values (723,82);
+insert into t (id,a) values (723,83);
+insert into t (id,a) values (723,84);
+insert into t (id,a) values (723,85);
+insert into t (id,a) values (723,86);
+insert into t (id,a) values (723,87);
+insert into t (id,a) values (723,88);
+insert into t (id,a) values (723,89);
+insert into t (id,a) values (723,90);
+insert into t (id,a) values (723,91);
+insert into t (id,a) values (723,92);
+insert into t (id,a) values (723,93);
+insert into t (id,a) values (723,94);
+insert into t (id,a) values (723,95);
+insert into t (id,a) values (723,96);
+insert into t (id,a) values (723,97);
+insert into t (id,a) values (723,98);
+insert into t (id,a) values (723,99);
+insert into t (id,a) values (724,0);
+insert into t (id,a) values (724,1);
+insert into t (id,a) values (724,2);
+insert into t (id,a) values (724,3);
+insert into t (id,a) values (724,4);
+insert into t (id,a) values (724,5);
+insert into t (id,a) values (724,6);
+insert into t (id,a) values (724,7);
+insert into t (id,a) values (724,8);
+insert into t (id,a) values (724,9);
+insert into t (id,a) values (724,10);
+insert into t (id,a) values (724,11);
+insert into t (id,a) values (724,12);
+insert into t (id,a) values (724,13);
+insert into t (id,a) values (724,14);
+insert into t (id,a) values (724,15);
+insert into t (id,a) values (724,16);
+insert into t (id,a) values (724,17);
+insert into t (id,a) values (724,18);
+insert into t (id,a) values (724,19);
+insert into t (id,a) values (724,20);
+insert into t (id,a) values (724,21);
+insert into t (id,a) values (724,22);
+insert into t (id,a) values (724,23);
+insert into t (id,a) values (724,24);
+insert into t (id,a) values (724,25);
+insert into t (id,a) values (724,26);
+insert into t (id,a) values (724,27);
+insert into t (id,a) values (724,28);
+insert into t (id,a) values (724,29);
+insert into t (id,a) values (724,30);
+insert into t (id,a) values (724,31);
+insert into t (id,a) values (724,32);
+insert into t (id,a) values (724,33);
+insert into t (id,a) values (724,34);
+insert into t (id,a) values (724,35);
+insert into t (id,a) values (724,36);
+insert into t (id,a) values (724,37);
+insert into t (id,a) values (724,38);
+insert into t (id,a) values (724,39);
+insert into t (id,a) values (724,40);
+insert into t (id,a) values (724,41);
+insert into t (id,a) values (724,42);
+insert into t (id,a) values (724,43);
+insert into t (id,a) values (724,44);
+insert into t (id,a) values (724,45);
+insert into t (id,a) values (724,46);
+insert into t (id,a) values (724,47);
+insert into t (id,a) values (724,48);
+insert into t (id,a) values (724,49);
+insert into t (id,a) values (724,50);
+insert into t (id,a) values (724,51);
+insert into t (id,a) values (724,52);
+insert into t (id,a) values (724,53);
+insert into t (id,a) values (724,54);
+insert into t (id,a) values (724,55);
+insert into t (id,a) values (724,56);
+insert into t (id,a) values (724,57);
+insert into t (id,a) values (724,58);
+insert into t (id,a) values (724,59);
+insert into t (id,a) values (724,60);
+insert into t (id,a) values (724,61);
+insert into t (id,a) values (724,62);
+insert into t (id,a) values (724,63);
+insert into t (id,a) values (724,64);
+insert into t (id,a) values (724,65);
+insert into t (id,a) values (724,66);
+insert into t (id,a) values (724,67);
+insert into t (id,a) values (724,68);
+insert into t (id,a) values (724,69);
+insert into t (id,a) values (724,70);
+insert into t (id,a) values (724,71);
+insert into t (id,a) values (724,72);
+insert into t (id,a) values (724,73);
+insert into t (id,a) values (724,74);
+insert into t (id,a) values (724,75);
+insert into t (id,a) values (724,76);
+insert into t (id,a) values (724,77);
+insert into t (id,a) values (724,78);
+insert into t (id,a) values (724,79);
+insert into t (id,a) values (724,80);
+insert into t (id,a) values (724,81);
+insert into t (id,a) values (724,82);
+insert into t (id,a) values (724,83);
+insert into t (id,a) values (724,84);
+insert into t (id,a) values (724,85);
+insert into t (id,a) values (724,86);
+insert into t (id,a) values (724,87);
+insert into t (id,a) values (724,88);
+insert into t (id,a) values (724,89);
+insert into t (id,a) values (724,90);
+insert into t (id,a) values (724,91);
+insert into t (id,a) values (724,92);
+insert into t (id,a) values (724,93);
+insert into t (id,a) values (724,94);
+insert into t (id,a) values (724,95);
+insert into t (id,a) values (724,96);
+insert into t (id,a) values (724,97);
+insert into t (id,a) values (724,98);
+insert into t (id,a) values (724,99);
+insert into t (id,a) values (725,0);
+insert into t (id,a) values (725,1);
+insert into t (id,a) values (725,2);
+insert into t (id,a) values (725,3);
+insert into t (id,a) values (725,4);
+insert into t (id,a) values (725,5);
+insert into t (id,a) values (725,6);
+insert into t (id,a) values (725,7);
+insert into t (id,a) values (725,8);
+insert into t (id,a) values (725,9);
+insert into t (id,a) values (725,10);
+insert into t (id,a) values (725,11);
+insert into t (id,a) values (725,12);
+insert into t (id,a) values (725,13);
+insert into t (id,a) values (725,14);
+insert into t (id,a) values (725,15);
+insert into t (id,a) values (725,16);
+insert into t (id,a) values (725,17);
+insert into t (id,a) values (725,18);
+insert into t (id,a) values (725,19);
+insert into t (id,a) values (725,20);
+insert into t (id,a) values (725,21);
+insert into t (id,a) values (725,22);
+insert into t (id,a) values (725,23);
+insert into t (id,a) values (725,24);
+insert into t (id,a) values (725,25);
+insert into t (id,a) values (725,26);
+insert into t (id,a) values (725,27);
+insert into t (id,a) values (725,28);
+insert into t (id,a) values (725,29);
+insert into t (id,a) values (725,30);
+insert into t (id,a) values (725,31);
+insert into t (id,a) values (725,32);
+insert into t (id,a) values (725,33);
+insert into t (id,a) values (725,34);
+insert into t (id,a) values (725,35);
+insert into t (id,a) values (725,36);
+insert into t (id,a) values (725,37);
+insert into t (id,a) values (725,38);
+insert into t (id,a) values (725,39);
+insert into t (id,a) values (725,40);
+insert into t (id,a) values (725,41);
+insert into t (id,a) values (725,42);
+insert into t (id,a) values (725,43);
+insert into t (id,a) values (725,44);
+insert into t (id,a) values (725,45);
+insert into t (id,a) values (725,46);
+insert into t (id,a) values (725,47);
+insert into t (id,a) values (725,48);
+insert into t (id,a) values (725,49);
+insert into t (id,a) values (725,50);
+insert into t (id,a) values (725,51);
+insert into t (id,a) values (725,52);
+insert into t (id,a) values (725,53);
+insert into t (id,a) values (725,54);
+insert into t (id,a) values (725,55);
+insert into t (id,a) values (725,56);
+insert into t (id,a) values (725,57);
+insert into t (id,a) values (725,58);
+insert into t (id,a) values (725,59);
+insert into t (id,a) values (725,60);
+insert into t (id,a) values (725,61);
+insert into t (id,a) values (725,62);
+insert into t (id,a) values (725,63);
+insert into t (id,a) values (725,64);
+insert into t (id,a) values (725,65);
+insert into t (id,a) values (725,66);
+insert into t (id,a) values (725,67);
+insert into t (id,a) values (725,68);
+insert into t (id,a) values (725,69);
+insert into t (id,a) values (725,70);
+insert into t (id,a) values (725,71);
+insert into t (id,a) values (725,72);
+insert into t (id,a) values (725,73);
+insert into t (id,a) values (725,74);
+insert into t (id,a) values (725,75);
+insert into t (id,a) values (725,76);
+insert into t (id,a) values (725,77);
+insert into t (id,a) values (725,78);
+insert into t (id,a) values (725,79);
+insert into t (id,a) values (725,80);
+insert into t (id,a) values (725,81);
+insert into t (id,a) values (725,82);
+insert into t (id,a) values (725,83);
+insert into t (id,a) values (725,84);
+insert into t (id,a) values (725,85);
+insert into t (id,a) values (725,86);
+insert into t (id,a) values (725,87);
+insert into t (id,a) values (725,88);
+insert into t (id,a) values (725,89);
+insert into t (id,a) values (725,90);
+insert into t (id,a) values (725,91);
+insert into t (id,a) values (725,92);
+insert into t (id,a) values (725,93);
+insert into t (id,a) values (725,94);
+insert into t (id,a) values (725,95);
+insert into t (id,a) values (725,96);
+insert into t (id,a) values (725,97);
+insert into t (id,a) values (725,98);
+insert into t (id,a) values (725,99);
+insert into t (id,a) values (726,0);
+insert into t (id,a) values (726,1);
+insert into t (id,a) values (726,2);
+insert into t (id,a) values (726,3);
+insert into t (id,a) values (726,4);
+insert into t (id,a) values (726,5);
+insert into t (id,a) values (726,6);
+insert into t (id,a) values (726,7);
+insert into t (id,a) values (726,8);
+insert into t (id,a) values (726,9);
+insert into t (id,a) values (726,10);
+insert into t (id,a) values (726,11);
+insert into t (id,a) values (726,12);
+insert into t (id,a) values (726,13);
+insert into t (id,a) values (726,14);
+insert into t (id,a) values (726,15);
+insert into t (id,a) values (726,16);
+insert into t (id,a) values (726,17);
+insert into t (id,a) values (726,18);
+insert into t (id,a) values (726,19);
+insert into t (id,a) values (726,20);
+insert into t (id,a) values (726,21);
+insert into t (id,a) values (726,22);
+insert into t (id,a) values (726,23);
+insert into t (id,a) values (726,24);
+insert into t (id,a) values (726,25);
+insert into t (id,a) values (726,26);
+insert into t (id,a) values (726,27);
+insert into t (id,a) values (726,28);
+insert into t (id,a) values (726,29);
+insert into t (id,a) values (726,30);
+insert into t (id,a) values (726,31);
+insert into t (id,a) values (726,32);
+insert into t (id,a) values (726,33);
+insert into t (id,a) values (726,34);
+insert into t (id,a) values (726,35);
+insert into t (id,a) values (726,36);
+insert into t (id,a) values (726,37);
+insert into t (id,a) values (726,38);
+insert into t (id,a) values (726,39);
+insert into t (id,a) values (726,40);
+insert into t (id,a) values (726,41);
+insert into t (id,a) values (726,42);
+insert into t (id,a) values (726,43);
+insert into t (id,a) values (726,44);
+insert into t (id,a) values (726,45);
+insert into t (id,a) values (726,46);
+insert into t (id,a) values (726,47);
+insert into t (id,a) values (726,48);
+insert into t (id,a) values (726,49);
+insert into t (id,a) values (726,50);
+insert into t (id,a) values (726,51);
+insert into t (id,a) values (726,52);
+insert into t (id,a) values (726,53);
+insert into t (id,a) values (726,54);
+insert into t (id,a) values (726,55);
+insert into t (id,a) values (726,56);
+insert into t (id,a) values (726,57);
+insert into t (id,a) values (726,58);
+insert into t (id,a) values (726,59);
+insert into t (id,a) values (726,60);
+insert into t (id,a) values (726,61);
+insert into t (id,a) values (726,62);
+insert into t (id,a) values (726,63);
+insert into t (id,a) values (726,64);
+insert into t (id,a) values (726,65);
+insert into t (id,a) values (726,66);
+insert into t (id,a) values (726,67);
+insert into t (id,a) values (726,68);
+insert into t (id,a) values (726,69);
+insert into t (id,a) values (726,70);
+insert into t (id,a) values (726,71);
+insert into t (id,a) values (726,72);
+insert into t (id,a) values (726,73);
+insert into t (id,a) values (726,74);
+insert into t (id,a) values (726,75);
+insert into t (id,a) values (726,76);
+insert into t (id,a) values (726,77);
+insert into t (id,a) values (726,78);
+insert into t (id,a) values (726,79);
+insert into t (id,a) values (726,80);
+insert into t (id,a) values (726,81);
+insert into t (id,a) values (726,82);
+insert into t (id,a) values (726,83);
+insert into t (id,a) values (726,84);
+insert into t (id,a) values (726,85);
+insert into t (id,a) values (726,86);
+insert into t (id,a) values (726,87);
+insert into t (id,a) values (726,88);
+insert into t (id,a) values (726,89);
+insert into t (id,a) values (726,90);
+insert into t (id,a) values (726,91);
+insert into t (id,a) values (726,92);
+insert into t (id,a) values (726,93);
+insert into t (id,a) values (726,94);
+insert into t (id,a) values (726,95);
+insert into t (id,a) values (726,96);
+insert into t (id,a) values (726,97);
+insert into t (id,a) values (726,98);
+insert into t (id,a) values (726,99);
+insert into t (id,a) values (727,0);
+insert into t (id,a) values (727,1);
+insert into t (id,a) values (727,2);
+insert into t (id,a) values (727,3);
+insert into t (id,a) values (727,4);
+insert into t (id,a) values (727,5);
+insert into t (id,a) values (727,6);
+insert into t (id,a) values (727,7);
+insert into t (id,a) values (727,8);
+insert into t (id,a) values (727,9);
+insert into t (id,a) values (727,10);
+insert into t (id,a) values (727,11);
+insert into t (id,a) values (727,12);
+insert into t (id,a) values (727,13);
+insert into t (id,a) values (727,14);
+insert into t (id,a) values (727,15);
+insert into t (id,a) values (727,16);
+insert into t (id,a) values (727,17);
+insert into t (id,a) values (727,18);
+insert into t (id,a) values (727,19);
+insert into t (id,a) values (727,20);
+insert into t (id,a) values (727,21);
+insert into t (id,a) values (727,22);
+insert into t (id,a) values (727,23);
+insert into t (id,a) values (727,24);
+insert into t (id,a) values (727,25);
+insert into t (id,a) values (727,26);
+insert into t (id,a) values (727,27);
+insert into t (id,a) values (727,28);
+insert into t (id,a) values (727,29);
+insert into t (id,a) values (727,30);
+insert into t (id,a) values (727,31);
+insert into t (id,a) values (727,32);
+insert into t (id,a) values (727,33);
+insert into t (id,a) values (727,34);
+insert into t (id,a) values (727,35);
+insert into t (id,a) values (727,36);
+insert into t (id,a) values (727,37);
+insert into t (id,a) values (727,38);
+insert into t (id,a) values (727,39);
+insert into t (id,a) values (727,40);
+insert into t (id,a) values (727,41);
+insert into t (id,a) values (727,42);
+insert into t (id,a) values (727,43);
+insert into t (id,a) values (727,44);
+insert into t (id,a) values (727,45);
+insert into t (id,a) values (727,46);
+insert into t (id,a) values (727,47);
+insert into t (id,a) values (727,48);
+insert into t (id,a) values (727,49);
+insert into t (id,a) values (727,50);
+insert into t (id,a) values (727,51);
+insert into t (id,a) values (727,52);
+insert into t (id,a) values (727,53);
+insert into t (id,a) values (727,54);
+insert into t (id,a) values (727,55);
+insert into t (id,a) values (727,56);
+insert into t (id,a) values (727,57);
+insert into t (id,a) values (727,58);
+insert into t (id,a) values (727,59);
+insert into t (id,a) values (727,60);
+insert into t (id,a) values (727,61);
+insert into t (id,a) values (727,62);
+insert into t (id,a) values (727,63);
+insert into t (id,a) values (727,64);
+insert into t (id,a) values (727,65);
+insert into t (id,a) values (727,66);
+insert into t (id,a) values (727,67);
+insert into t (id,a) values (727,68);
+insert into t (id,a) values (727,69);
+insert into t (id,a) values (727,70);
+insert into t (id,a) values (727,71);
+insert into t (id,a) values (727,72);
+insert into t (id,a) values (727,73);
+insert into t (id,a) values (727,74);
+insert into t (id,a) values (727,75);
+insert into t (id,a) values (727,76);
+insert into t (id,a) values (727,77);
+insert into t (id,a) values (727,78);
+insert into t (id,a) values (727,79);
+insert into t (id,a) values (727,80);
+insert into t (id,a) values (727,81);
+insert into t (id,a) values (727,82);
+insert into t (id,a) values (727,83);
+insert into t (id,a) values (727,84);
+insert into t (id,a) values (727,85);
+insert into t (id,a) values (727,86);
+insert into t (id,a) values (727,87);
+insert into t (id,a) values (727,88);
+insert into t (id,a) values (727,89);
+insert into t (id,a) values (727,90);
+insert into t (id,a) values (727,91);
+insert into t (id,a) values (727,92);
+insert into t (id,a) values (727,93);
+insert into t (id,a) values (727,94);
+insert into t (id,a) values (727,95);
+insert into t (id,a) values (727,96);
+insert into t (id,a) values (727,97);
+insert into t (id,a) values (727,98);
+insert into t (id,a) values (727,99);
+insert into t (id,a) values (728,0);
+insert into t (id,a) values (728,1);
+insert into t (id,a) values (728,2);
+insert into t (id,a) values (728,3);
+insert into t (id,a) values (728,4);
+insert into t (id,a) values (728,5);
+insert into t (id,a) values (728,6);
+insert into t (id,a) values (728,7);
+insert into t (id,a) values (728,8);
+insert into t (id,a) values (728,9);
+insert into t (id,a) values (728,10);
+insert into t (id,a) values (728,11);
+insert into t (id,a) values (728,12);
+insert into t (id,a) values (728,13);
+insert into t (id,a) values (728,14);
+insert into t (id,a) values (728,15);
+insert into t (id,a) values (728,16);
+insert into t (id,a) values (728,17);
+insert into t (id,a) values (728,18);
+insert into t (id,a) values (728,19);
+insert into t (id,a) values (728,20);
+insert into t (id,a) values (728,21);
+insert into t (id,a) values (728,22);
+insert into t (id,a) values (728,23);
+insert into t (id,a) values (728,24);
+insert into t (id,a) values (728,25);
+insert into t (id,a) values (728,26);
+insert into t (id,a) values (728,27);
+insert into t (id,a) values (728,28);
+insert into t (id,a) values (728,29);
+insert into t (id,a) values (728,30);
+insert into t (id,a) values (728,31);
+insert into t (id,a) values (728,32);
+insert into t (id,a) values (728,33);
+insert into t (id,a) values (728,34);
+insert into t (id,a) values (728,35);
+insert into t (id,a) values (728,36);
+insert into t (id,a) values (728,37);
+insert into t (id,a) values (728,38);
+insert into t (id,a) values (728,39);
+insert into t (id,a) values (728,40);
+insert into t (id,a) values (728,41);
+insert into t (id,a) values (728,42);
+insert into t (id,a) values (728,43);
+insert into t (id,a) values (728,44);
+insert into t (id,a) values (728,45);
+insert into t (id,a) values (728,46);
+insert into t (id,a) values (728,47);
+insert into t (id,a) values (728,48);
+insert into t (id,a) values (728,49);
+insert into t (id,a) values (728,50);
+insert into t (id,a) values (728,51);
+insert into t (id,a) values (728,52);
+insert into t (id,a) values (728,53);
+insert into t (id,a) values (728,54);
+insert into t (id,a) values (728,55);
+insert into t (id,a) values (728,56);
+insert into t (id,a) values (728,57);
+insert into t (id,a) values (728,58);
+insert into t (id,a) values (728,59);
+insert into t (id,a) values (728,60);
+insert into t (id,a) values (728,61);
+insert into t (id,a) values (728,62);
+insert into t (id,a) values (728,63);
+insert into t (id,a) values (728,64);
+insert into t (id,a) values (728,65);
+insert into t (id,a) values (728,66);
+insert into t (id,a) values (728,67);
+insert into t (id,a) values (728,68);
+insert into t (id,a) values (728,69);
+insert into t (id,a) values (728,70);
+insert into t (id,a) values (728,71);
+insert into t (id,a) values (728,72);
+insert into t (id,a) values (728,73);
+insert into t (id,a) values (728,74);
+insert into t (id,a) values (728,75);
+insert into t (id,a) values (728,76);
+insert into t (id,a) values (728,77);
+insert into t (id,a) values (728,78);
+insert into t (id,a) values (728,79);
+insert into t (id,a) values (728,80);
+insert into t (id,a) values (728,81);
+insert into t (id,a) values (728,82);
+insert into t (id,a) values (728,83);
+insert into t (id,a) values (728,84);
+insert into t (id,a) values (728,85);
+insert into t (id,a) values (728,86);
+insert into t (id,a) values (728,87);
+insert into t (id,a) values (728,88);
+insert into t (id,a) values (728,89);
+insert into t (id,a) values (728,90);
+insert into t (id,a) values (728,91);
+insert into t (id,a) values (728,92);
+insert into t (id,a) values (728,93);
+insert into t (id,a) values (728,94);
+insert into t (id,a) values (728,95);
+insert into t (id,a) values (728,96);
+insert into t (id,a) values (728,97);
+insert into t (id,a) values (728,98);
+insert into t (id,a) values (728,99);
+insert into t (id,a) values (729,0);
+insert into t (id,a) values (729,1);
+insert into t (id,a) values (729,2);
+insert into t (id,a) values (729,3);
+insert into t (id,a) values (729,4);
+insert into t (id,a) values (729,5);
+insert into t (id,a) values (729,6);
+insert into t (id,a) values (729,7);
+insert into t (id,a) values (729,8);
+insert into t (id,a) values (729,9);
+insert into t (id,a) values (729,10);
+insert into t (id,a) values (729,11);
+insert into t (id,a) values (729,12);
+insert into t (id,a) values (729,13);
+insert into t (id,a) values (729,14);
+insert into t (id,a) values (729,15);
+insert into t (id,a) values (729,16);
+insert into t (id,a) values (729,17);
+insert into t (id,a) values (729,18);
+insert into t (id,a) values (729,19);
+insert into t (id,a) values (729,20);
+insert into t (id,a) values (729,21);
+insert into t (id,a) values (729,22);
+insert into t (id,a) values (729,23);
+insert into t (id,a) values (729,24);
+insert into t (id,a) values (729,25);
+insert into t (id,a) values (729,26);
+insert into t (id,a) values (729,27);
+insert into t (id,a) values (729,28);
+insert into t (id,a) values (729,29);
+insert into t (id,a) values (729,30);
+insert into t (id,a) values (729,31);
+insert into t (id,a) values (729,32);
+insert into t (id,a) values (729,33);
+insert into t (id,a) values (729,34);
+insert into t (id,a) values (729,35);
+insert into t (id,a) values (729,36);
+insert into t (id,a) values (729,37);
+insert into t (id,a) values (729,38);
+insert into t (id,a) values (729,39);
+insert into t (id,a) values (729,40);
+insert into t (id,a) values (729,41);
+insert into t (id,a) values (729,42);
+insert into t (id,a) values (729,43);
+insert into t (id,a) values (729,44);
+insert into t (id,a) values (729,45);
+insert into t (id,a) values (729,46);
+insert into t (id,a) values (729,47);
+insert into t (id,a) values (729,48);
+insert into t (id,a) values (729,49);
+insert into t (id,a) values (729,50);
+insert into t (id,a) values (729,51);
+insert into t (id,a) values (729,52);
+insert into t (id,a) values (729,53);
+insert into t (id,a) values (729,54);
+insert into t (id,a) values (729,55);
+insert into t (id,a) values (729,56);
+insert into t (id,a) values (729,57);
+insert into t (id,a) values (729,58);
+insert into t (id,a) values (729,59);
+insert into t (id,a) values (729,60);
+insert into t (id,a) values (729,61);
+insert into t (id,a) values (729,62);
+insert into t (id,a) values (729,63);
+insert into t (id,a) values (729,64);
+insert into t (id,a) values (729,65);
+insert into t (id,a) values (729,66);
+insert into t (id,a) values (729,67);
+insert into t (id,a) values (729,68);
+insert into t (id,a) values (729,69);
+insert into t (id,a) values (729,70);
+insert into t (id,a) values (729,71);
+insert into t (id,a) values (729,72);
+insert into t (id,a) values (729,73);
+insert into t (id,a) values (729,74);
+insert into t (id,a) values (729,75);
+insert into t (id,a) values (729,76);
+insert into t (id,a) values (729,77);
+insert into t (id,a) values (729,78);
+insert into t (id,a) values (729,79);
+insert into t (id,a) values (729,80);
+insert into t (id,a) values (729,81);
+insert into t (id,a) values (729,82);
+insert into t (id,a) values (729,83);
+insert into t (id,a) values (729,84);
+insert into t (id,a) values (729,85);
+insert into t (id,a) values (729,86);
+insert into t (id,a) values (729,87);
+insert into t (id,a) values (729,88);
+insert into t (id,a) values (729,89);
+insert into t (id,a) values (729,90);
+insert into t (id,a) values (729,91);
+insert into t (id,a) values (729,92);
+insert into t (id,a) values (729,93);
+insert into t (id,a) values (729,94);
+insert into t (id,a) values (729,95);
+insert into t (id,a) values (729,96);
+insert into t (id,a) values (729,97);
+insert into t (id,a) values (729,98);
+insert into t (id,a) values (729,99);
+insert into t (id,a) values (730,0);
+insert into t (id,a) values (730,1);
+insert into t (id,a) values (730,2);
+insert into t (id,a) values (730,3);
+insert into t (id,a) values (730,4);
+insert into t (id,a) values (730,5);
+insert into t (id,a) values (730,6);
+insert into t (id,a) values (730,7);
+insert into t (id,a) values (730,8);
+insert into t (id,a) values (730,9);
+insert into t (id,a) values (730,10);
+insert into t (id,a) values (730,11);
+insert into t (id,a) values (730,12);
+insert into t (id,a) values (730,13);
+insert into t (id,a) values (730,14);
+insert into t (id,a) values (730,15);
+insert into t (id,a) values (730,16);
+insert into t (id,a) values (730,17);
+insert into t (id,a) values (730,18);
+insert into t (id,a) values (730,19);
+insert into t (id,a) values (730,20);
+insert into t (id,a) values (730,21);
+insert into t (id,a) values (730,22);
+insert into t (id,a) values (730,23);
+insert into t (id,a) values (730,24);
+insert into t (id,a) values (730,25);
+insert into t (id,a) values (730,26);
+insert into t (id,a) values (730,27);
+insert into t (id,a) values (730,28);
+insert into t (id,a) values (730,29);
+insert into t (id,a) values (730,30);
+insert into t (id,a) values (730,31);
+insert into t (id,a) values (730,32);
+insert into t (id,a) values (730,33);
+insert into t (id,a) values (730,34);
+insert into t (id,a) values (730,35);
+insert into t (id,a) values (730,36);
+insert into t (id,a) values (730,37);
+insert into t (id,a) values (730,38);
+insert into t (id,a) values (730,39);
+insert into t (id,a) values (730,40);
+insert into t (id,a) values (730,41);
+insert into t (id,a) values (730,42);
+insert into t (id,a) values (730,43);
+insert into t (id,a) values (730,44);
+insert into t (id,a) values (730,45);
+insert into t (id,a) values (730,46);
+insert into t (id,a) values (730,47);
+insert into t (id,a) values (730,48);
+insert into t (id,a) values (730,49);
+insert into t (id,a) values (730,50);
+insert into t (id,a) values (730,51);
+insert into t (id,a) values (730,52);
+insert into t (id,a) values (730,53);
+insert into t (id,a) values (730,54);
+insert into t (id,a) values (730,55);
+insert into t (id,a) values (730,56);
+insert into t (id,a) values (730,57);
+insert into t (id,a) values (730,58);
+insert into t (id,a) values (730,59);
+insert into t (id,a) values (730,60);
+insert into t (id,a) values (730,61);
+insert into t (id,a) values (730,62);
+insert into t (id,a) values (730,63);
+insert into t (id,a) values (730,64);
+insert into t (id,a) values (730,65);
+insert into t (id,a) values (730,66);
+insert into t (id,a) values (730,67);
+insert into t (id,a) values (730,68);
+insert into t (id,a) values (730,69);
+insert into t (id,a) values (730,70);
+insert into t (id,a) values (730,71);
+insert into t (id,a) values (730,72);
+insert into t (id,a) values (730,73);
+insert into t (id,a) values (730,74);
+insert into t (id,a) values (730,75);
+insert into t (id,a) values (730,76);
+insert into t (id,a) values (730,77);
+insert into t (id,a) values (730,78);
+insert into t (id,a) values (730,79);
+insert into t (id,a) values (730,80);
+insert into t (id,a) values (730,81);
+insert into t (id,a) values (730,82);
+insert into t (id,a) values (730,83);
+insert into t (id,a) values (730,84);
+insert into t (id,a) values (730,85);
+insert into t (id,a) values (730,86);
+insert into t (id,a) values (730,87);
+insert into t (id,a) values (730,88);
+insert into t (id,a) values (730,89);
+insert into t (id,a) values (730,90);
+insert into t (id,a) values (730,91);
+insert into t (id,a) values (730,92);
+insert into t (id,a) values (730,93);
+insert into t (id,a) values (730,94);
+insert into t (id,a) values (730,95);
+insert into t (id,a) values (730,96);
+insert into t (id,a) values (730,97);
+insert into t (id,a) values (730,98);
+insert into t (id,a) values (730,99);
+insert into t (id,a) values (731,0);
+insert into t (id,a) values (731,1);
+insert into t (id,a) values (731,2);
+insert into t (id,a) values (731,3);
+insert into t (id,a) values (731,4);
+insert into t (id,a) values (731,5);
+insert into t (id,a) values (731,6);
+insert into t (id,a) values (731,7);
+insert into t (id,a) values (731,8);
+insert into t (id,a) values (731,9);
+insert into t (id,a) values (731,10);
+insert into t (id,a) values (731,11);
+insert into t (id,a) values (731,12);
+insert into t (id,a) values (731,13);
+insert into t (id,a) values (731,14);
+insert into t (id,a) values (731,15);
+insert into t (id,a) values (731,16);
+insert into t (id,a) values (731,17);
+insert into t (id,a) values (731,18);
+insert into t (id,a) values (731,19);
+insert into t (id,a) values (731,20);
+insert into t (id,a) values (731,21);
+insert into t (id,a) values (731,22);
+insert into t (id,a) values (731,23);
+insert into t (id,a) values (731,24);
+insert into t (id,a) values (731,25);
+insert into t (id,a) values (731,26);
+insert into t (id,a) values (731,27);
+insert into t (id,a) values (731,28);
+insert into t (id,a) values (731,29);
+insert into t (id,a) values (731,30);
+insert into t (id,a) values (731,31);
+insert into t (id,a) values (731,32);
+insert into t (id,a) values (731,33);
+insert into t (id,a) values (731,34);
+insert into t (id,a) values (731,35);
+insert into t (id,a) values (731,36);
+insert into t (id,a) values (731,37);
+insert into t (id,a) values (731,38);
+insert into t (id,a) values (731,39);
+insert into t (id,a) values (731,40);
+insert into t (id,a) values (731,41);
+insert into t (id,a) values (731,42);
+insert into t (id,a) values (731,43);
+insert into t (id,a) values (731,44);
+insert into t (id,a) values (731,45);
+insert into t (id,a) values (731,46);
+insert into t (id,a) values (731,47);
+insert into t (id,a) values (731,48);
+insert into t (id,a) values (731,49);
+insert into t (id,a) values (731,50);
+insert into t (id,a) values (731,51);
+insert into t (id,a) values (731,52);
+insert into t (id,a) values (731,53);
+insert into t (id,a) values (731,54);
+insert into t (id,a) values (731,55);
+insert into t (id,a) values (731,56);
+insert into t (id,a) values (731,57);
+insert into t (id,a) values (731,58);
+insert into t (id,a) values (731,59);
+insert into t (id,a) values (731,60);
+insert into t (id,a) values (731,61);
+insert into t (id,a) values (731,62);
+insert into t (id,a) values (731,63);
+insert into t (id,a) values (731,64);
+insert into t (id,a) values (731,65);
+insert into t (id,a) values (731,66);
+insert into t (id,a) values (731,67);
+insert into t (id,a) values (731,68);
+insert into t (id,a) values (731,69);
+insert into t (id,a) values (731,70);
+insert into t (id,a) values (731,71);
+insert into t (id,a) values (731,72);
+insert into t (id,a) values (731,73);
+insert into t (id,a) values (731,74);
+insert into t (id,a) values (731,75);
+insert into t (id,a) values (731,76);
+insert into t (id,a) values (731,77);
+insert into t (id,a) values (731,78);
+insert into t (id,a) values (731,79);
+insert into t (id,a) values (731,80);
+insert into t (id,a) values (731,81);
+insert into t (id,a) values (731,82);
+insert into t (id,a) values (731,83);
+insert into t (id,a) values (731,84);
+insert into t (id,a) values (731,85);
+insert into t (id,a) values (731,86);
+insert into t (id,a) values (731,87);
+insert into t (id,a) values (731,88);
+insert into t (id,a) values (731,89);
+insert into t (id,a) values (731,90);
+insert into t (id,a) values (731,91);
+insert into t (id,a) values (731,92);
+insert into t (id,a) values (731,93);
+insert into t (id,a) values (731,94);
+insert into t (id,a) values (731,95);
+insert into t (id,a) values (731,96);
+insert into t (id,a) values (731,97);
+insert into t (id,a) values (731,98);
+insert into t (id,a) values (731,99);
+insert into t (id,a) values (732,0);
+insert into t (id,a) values (732,1);
+insert into t (id,a) values (732,2);
+insert into t (id,a) values (732,3);
+insert into t (id,a) values (732,4);
+insert into t (id,a) values (732,5);
+insert into t (id,a) values (732,6);
+insert into t (id,a) values (732,7);
+insert into t (id,a) values (732,8);
+insert into t (id,a) values (732,9);
+insert into t (id,a) values (732,10);
+insert into t (id,a) values (732,11);
+insert into t (id,a) values (732,12);
+insert into t (id,a) values (732,13);
+insert into t (id,a) values (732,14);
+insert into t (id,a) values (732,15);
+insert into t (id,a) values (732,16);
+insert into t (id,a) values (732,17);
+insert into t (id,a) values (732,18);
+insert into t (id,a) values (732,19);
+insert into t (id,a) values (732,20);
+insert into t (id,a) values (732,21);
+insert into t (id,a) values (732,22);
+insert into t (id,a) values (732,23);
+insert into t (id,a) values (732,24);
+insert into t (id,a) values (732,25);
+insert into t (id,a) values (732,26);
+insert into t (id,a) values (732,27);
+insert into t (id,a) values (732,28);
+insert into t (id,a) values (732,29);
+insert into t (id,a) values (732,30);
+insert into t (id,a) values (732,31);
+insert into t (id,a) values (732,32);
+insert into t (id,a) values (732,33);
+insert into t (id,a) values (732,34);
+insert into t (id,a) values (732,35);
+insert into t (id,a) values (732,36);
+insert into t (id,a) values (732,37);
+insert into t (id,a) values (732,38);
+insert into t (id,a) values (732,39);
+insert into t (id,a) values (732,40);
+insert into t (id,a) values (732,41);
+insert into t (id,a) values (732,42);
+insert into t (id,a) values (732,43);
+insert into t (id,a) values (732,44);
+insert into t (id,a) values (732,45);
+insert into t (id,a) values (732,46);
+insert into t (id,a) values (732,47);
+insert into t (id,a) values (732,48);
+insert into t (id,a) values (732,49);
+insert into t (id,a) values (732,50);
+insert into t (id,a) values (732,51);
+insert into t (id,a) values (732,52);
+insert into t (id,a) values (732,53);
+insert into t (id,a) values (732,54);
+insert into t (id,a) values (732,55);
+insert into t (id,a) values (732,56);
+insert into t (id,a) values (732,57);
+insert into t (id,a) values (732,58);
+insert into t (id,a) values (732,59);
+insert into t (id,a) values (732,60);
+insert into t (id,a) values (732,61);
+insert into t (id,a) values (732,62);
+insert into t (id,a) values (732,63);
+insert into t (id,a) values (732,64);
+insert into t (id,a) values (732,65);
+insert into t (id,a) values (732,66);
+insert into t (id,a) values (732,67);
+insert into t (id,a) values (732,68);
+insert into t (id,a) values (732,69);
+insert into t (id,a) values (732,70);
+insert into t (id,a) values (732,71);
+insert into t (id,a) values (732,72);
+insert into t (id,a) values (732,73);
+insert into t (id,a) values (732,74);
+insert into t (id,a) values (732,75);
+insert into t (id,a) values (732,76);
+insert into t (id,a) values (732,77);
+insert into t (id,a) values (732,78);
+insert into t (id,a) values (732,79);
+insert into t (id,a) values (732,80);
+insert into t (id,a) values (732,81);
+insert into t (id,a) values (732,82);
+insert into t (id,a) values (732,83);
+insert into t (id,a) values (732,84);
+insert into t (id,a) values (732,85);
+insert into t (id,a) values (732,86);
+insert into t (id,a) values (732,87);
+insert into t (id,a) values (732,88);
+insert into t (id,a) values (732,89);
+insert into t (id,a) values (732,90);
+insert into t (id,a) values (732,91);
+insert into t (id,a) values (732,92);
+insert into t (id,a) values (732,93);
+insert into t (id,a) values (732,94);
+insert into t (id,a) values (732,95);
+insert into t (id,a) values (732,96);
+insert into t (id,a) values (732,97);
+insert into t (id,a) values (732,98);
+insert into t (id,a) values (732,99);
+insert into t (id,a) values (733,0);
+insert into t (id,a) values (733,1);
+insert into t (id,a) values (733,2);
+insert into t (id,a) values (733,3);
+insert into t (id,a) values (733,4);
+insert into t (id,a) values (733,5);
+insert into t (id,a) values (733,6);
+insert into t (id,a) values (733,7);
+insert into t (id,a) values (733,8);
+insert into t (id,a) values (733,9);
+insert into t (id,a) values (733,10);
+insert into t (id,a) values (733,11);
+insert into t (id,a) values (733,12);
+insert into t (id,a) values (733,13);
+insert into t (id,a) values (733,14);
+insert into t (id,a) values (733,15);
+insert into t (id,a) values (733,16);
+insert into t (id,a) values (733,17);
+insert into t (id,a) values (733,18);
+insert into t (id,a) values (733,19);
+insert into t (id,a) values (733,20);
+insert into t (id,a) values (733,21);
+insert into t (id,a) values (733,22);
+insert into t (id,a) values (733,23);
+insert into t (id,a) values (733,24);
+insert into t (id,a) values (733,25);
+insert into t (id,a) values (733,26);
+insert into t (id,a) values (733,27);
+insert into t (id,a) values (733,28);
+insert into t (id,a) values (733,29);
+insert into t (id,a) values (733,30);
+insert into t (id,a) values (733,31);
+insert into t (id,a) values (733,32);
+insert into t (id,a) values (733,33);
+insert into t (id,a) values (733,34);
+insert into t (id,a) values (733,35);
+insert into t (id,a) values (733,36);
+insert into t (id,a) values (733,37);
+insert into t (id,a) values (733,38);
+insert into t (id,a) values (733,39);
+insert into t (id,a) values (733,40);
+insert into t (id,a) values (733,41);
+insert into t (id,a) values (733,42);
+insert into t (id,a) values (733,43);
+insert into t (id,a) values (733,44);
+insert into t (id,a) values (733,45);
+insert into t (id,a) values (733,46);
+insert into t (id,a) values (733,47);
+insert into t (id,a) values (733,48);
+insert into t (id,a) values (733,49);
+insert into t (id,a) values (733,50);
+insert into t (id,a) values (733,51);
+insert into t (id,a) values (733,52);
+insert into t (id,a) values (733,53);
+insert into t (id,a) values (733,54);
+insert into t (id,a) values (733,55);
+insert into t (id,a) values (733,56);
+insert into t (id,a) values (733,57);
+insert into t (id,a) values (733,58);
+insert into t (id,a) values (733,59);
+insert into t (id,a) values (733,60);
+insert into t (id,a) values (733,61);
+insert into t (id,a) values (733,62);
+insert into t (id,a) values (733,63);
+insert into t (id,a) values (733,64);
+insert into t (id,a) values (733,65);
+insert into t (id,a) values (733,66);
+insert into t (id,a) values (733,67);
+insert into t (id,a) values (733,68);
+insert into t (id,a) values (733,69);
+insert into t (id,a) values (733,70);
+insert into t (id,a) values (733,71);
+insert into t (id,a) values (733,72);
+insert into t (id,a) values (733,73);
+insert into t (id,a) values (733,74);
+insert into t (id,a) values (733,75);
+insert into t (id,a) values (733,76);
+insert into t (id,a) values (733,77);
+insert into t (id,a) values (733,78);
+insert into t (id,a) values (733,79);
+insert into t (id,a) values (733,80);
+insert into t (id,a) values (733,81);
+insert into t (id,a) values (733,82);
+insert into t (id,a) values (733,83);
+insert into t (id,a) values (733,84);
+insert into t (id,a) values (733,85);
+insert into t (id,a) values (733,86);
+insert into t (id,a) values (733,87);
+insert into t (id,a) values (733,88);
+insert into t (id,a) values (733,89);
+insert into t (id,a) values (733,90);
+insert into t (id,a) values (733,91);
+insert into t (id,a) values (733,92);
+insert into t (id,a) values (733,93);
+insert into t (id,a) values (733,94);
+insert into t (id,a) values (733,95);
+insert into t (id,a) values (733,96);
+insert into t (id,a) values (733,97);
+insert into t (id,a) values (733,98);
+insert into t (id,a) values (733,99);
+insert into t (id,a) values (734,0);
+insert into t (id,a) values (734,1);
+insert into t (id,a) values (734,2);
+insert into t (id,a) values (734,3);
+insert into t (id,a) values (734,4);
+insert into t (id,a) values (734,5);
+insert into t (id,a) values (734,6);
+insert into t (id,a) values (734,7);
+insert into t (id,a) values (734,8);
+insert into t (id,a) values (734,9);
+insert into t (id,a) values (734,10);
+insert into t (id,a) values (734,11);
+insert into t (id,a) values (734,12);
+insert into t (id,a) values (734,13);
+insert into t (id,a) values (734,14);
+insert into t (id,a) values (734,15);
+insert into t (id,a) values (734,16);
+insert into t (id,a) values (734,17);
+insert into t (id,a) values (734,18);
+insert into t (id,a) values (734,19);
+insert into t (id,a) values (734,20);
+insert into t (id,a) values (734,21);
+insert into t (id,a) values (734,22);
+insert into t (id,a) values (734,23);
+insert into t (id,a) values (734,24);
+insert into t (id,a) values (734,25);
+insert into t (id,a) values (734,26);
+insert into t (id,a) values (734,27);
+insert into t (id,a) values (734,28);
+insert into t (id,a) values (734,29);
+insert into t (id,a) values (734,30);
+insert into t (id,a) values (734,31);
+insert into t (id,a) values (734,32);
+insert into t (id,a) values (734,33);
+insert into t (id,a) values (734,34);
+insert into t (id,a) values (734,35);
+insert into t (id,a) values (734,36);
+insert into t (id,a) values (734,37);
+insert into t (id,a) values (734,38);
+insert into t (id,a) values (734,39);
+insert into t (id,a) values (734,40);
+insert into t (id,a) values (734,41);
+insert into t (id,a) values (734,42);
+insert into t (id,a) values (734,43);
+insert into t (id,a) values (734,44);
+insert into t (id,a) values (734,45);
+insert into t (id,a) values (734,46);
+insert into t (id,a) values (734,47);
+insert into t (id,a) values (734,48);
+insert into t (id,a) values (734,49);
+insert into t (id,a) values (734,50);
+insert into t (id,a) values (734,51);
+insert into t (id,a) values (734,52);
+insert into t (id,a) values (734,53);
+insert into t (id,a) values (734,54);
+insert into t (id,a) values (734,55);
+insert into t (id,a) values (734,56);
+insert into t (id,a) values (734,57);
+insert into t (id,a) values (734,58);
+insert into t (id,a) values (734,59);
+insert into t (id,a) values (734,60);
+insert into t (id,a) values (734,61);
+insert into t (id,a) values (734,62);
+insert into t (id,a) values (734,63);
+insert into t (id,a) values (734,64);
+insert into t (id,a) values (734,65);
+insert into t (id,a) values (734,66);
+insert into t (id,a) values (734,67);
+insert into t (id,a) values (734,68);
+insert into t (id,a) values (734,69);
+insert into t (id,a) values (734,70);
+insert into t (id,a) values (734,71);
+insert into t (id,a) values (734,72);
+insert into t (id,a) values (734,73);
+insert into t (id,a) values (734,74);
+insert into t (id,a) values (734,75);
+insert into t (id,a) values (734,76);
+insert into t (id,a) values (734,77);
+insert into t (id,a) values (734,78);
+insert into t (id,a) values (734,79);
+insert into t (id,a) values (734,80);
+insert into t (id,a) values (734,81);
+insert into t (id,a) values (734,82);
+insert into t (id,a) values (734,83);
+insert into t (id,a) values (734,84);
+insert into t (id,a) values (734,85);
+insert into t (id,a) values (734,86);
+insert into t (id,a) values (734,87);
+insert into t (id,a) values (734,88);
+insert into t (id,a) values (734,89);
+insert into t (id,a) values (734,90);
+insert into t (id,a) values (734,91);
+insert into t (id,a) values (734,92);
+insert into t (id,a) values (734,93);
+insert into t (id,a) values (734,94);
+insert into t (id,a) values (734,95);
+insert into t (id,a) values (734,96);
+insert into t (id,a) values (734,97);
+insert into t (id,a) values (734,98);
+insert into t (id,a) values (734,99);
+insert into t (id,a) values (735,0);
+insert into t (id,a) values (735,1);
+insert into t (id,a) values (735,2);
+insert into t (id,a) values (735,3);
+insert into t (id,a) values (735,4);
+insert into t (id,a) values (735,5);
+insert into t (id,a) values (735,6);
+insert into t (id,a) values (735,7);
+insert into t (id,a) values (735,8);
+insert into t (id,a) values (735,9);
+insert into t (id,a) values (735,10);
+insert into t (id,a) values (735,11);
+insert into t (id,a) values (735,12);
+insert into t (id,a) values (735,13);
+insert into t (id,a) values (735,14);
+insert into t (id,a) values (735,15);
+insert into t (id,a) values (735,16);
+insert into t (id,a) values (735,17);
+insert into t (id,a) values (735,18);
+insert into t (id,a) values (735,19);
+insert into t (id,a) values (735,20);
+insert into t (id,a) values (735,21);
+insert into t (id,a) values (735,22);
+insert into t (id,a) values (735,23);
+insert into t (id,a) values (735,24);
+insert into t (id,a) values (735,25);
+insert into t (id,a) values (735,26);
+insert into t (id,a) values (735,27);
+insert into t (id,a) values (735,28);
+insert into t (id,a) values (735,29);
+insert into t (id,a) values (735,30);
+insert into t (id,a) values (735,31);
+insert into t (id,a) values (735,32);
+insert into t (id,a) values (735,33);
+insert into t (id,a) values (735,34);
+insert into t (id,a) values (735,35);
+insert into t (id,a) values (735,36);
+insert into t (id,a) values (735,37);
+insert into t (id,a) values (735,38);
+insert into t (id,a) values (735,39);
+insert into t (id,a) values (735,40);
+insert into t (id,a) values (735,41);
+insert into t (id,a) values (735,42);
+insert into t (id,a) values (735,43);
+insert into t (id,a) values (735,44);
+insert into t (id,a) values (735,45);
+insert into t (id,a) values (735,46);
+insert into t (id,a) values (735,47);
+insert into t (id,a) values (735,48);
+insert into t (id,a) values (735,49);
+insert into t (id,a) values (735,50);
+insert into t (id,a) values (735,51);
+insert into t (id,a) values (735,52);
+insert into t (id,a) values (735,53);
+insert into t (id,a) values (735,54);
+insert into t (id,a) values (735,55);
+insert into t (id,a) values (735,56);
+insert into t (id,a) values (735,57);
+insert into t (id,a) values (735,58);
+insert into t (id,a) values (735,59);
+insert into t (id,a) values (735,60);
+insert into t (id,a) values (735,61);
+insert into t (id,a) values (735,62);
+insert into t (id,a) values (735,63);
+insert into t (id,a) values (735,64);
+insert into t (id,a) values (735,65);
+insert into t (id,a) values (735,66);
+insert into t (id,a) values (735,67);
+insert into t (id,a) values (735,68);
+insert into t (id,a) values (735,69);
+insert into t (id,a) values (735,70);
+insert into t (id,a) values (735,71);
+insert into t (id,a) values (735,72);
+insert into t (id,a) values (735,73);
+insert into t (id,a) values (735,74);
+insert into t (id,a) values (735,75);
+insert into t (id,a) values (735,76);
+insert into t (id,a) values (735,77);
+insert into t (id,a) values (735,78);
+insert into t (id,a) values (735,79);
+insert into t (id,a) values (735,80);
+insert into t (id,a) values (735,81);
+insert into t (id,a) values (735,82);
+insert into t (id,a) values (735,83);
+insert into t (id,a) values (735,84);
+insert into t (id,a) values (735,85);
+insert into t (id,a) values (735,86);
+insert into t (id,a) values (735,87);
+insert into t (id,a) values (735,88);
+insert into t (id,a) values (735,89);
+insert into t (id,a) values (735,90);
+insert into t (id,a) values (735,91);
+insert into t (id,a) values (735,92);
+insert into t (id,a) values (735,93);
+insert into t (id,a) values (735,94);
+insert into t (id,a) values (735,95);
+insert into t (id,a) values (735,96);
+insert into t (id,a) values (735,97);
+insert into t (id,a) values (735,98);
+insert into t (id,a) values (735,99);
+insert into t (id,a) values (736,0);
+insert into t (id,a) values (736,1);
+insert into t (id,a) values (736,2);
+insert into t (id,a) values (736,3);
+insert into t (id,a) values (736,4);
+insert into t (id,a) values (736,5);
+insert into t (id,a) values (736,6);
+insert into t (id,a) values (736,7);
+insert into t (id,a) values (736,8);
+insert into t (id,a) values (736,9);
+insert into t (id,a) values (736,10);
+insert into t (id,a) values (736,11);
+insert into t (id,a) values (736,12);
+insert into t (id,a) values (736,13);
+insert into t (id,a) values (736,14);
+insert into t (id,a) values (736,15);
+insert into t (id,a) values (736,16);
+insert into t (id,a) values (736,17);
+insert into t (id,a) values (736,18);
+insert into t (id,a) values (736,19);
+insert into t (id,a) values (736,20);
+insert into t (id,a) values (736,21);
+insert into t (id,a) values (736,22);
+insert into t (id,a) values (736,23);
+insert into t (id,a) values (736,24);
+insert into t (id,a) values (736,25);
+insert into t (id,a) values (736,26);
+insert into t (id,a) values (736,27);
+insert into t (id,a) values (736,28);
+insert into t (id,a) values (736,29);
+insert into t (id,a) values (736,30);
+insert into t (id,a) values (736,31);
+insert into t (id,a) values (736,32);
+insert into t (id,a) values (736,33);
+insert into t (id,a) values (736,34);
+insert into t (id,a) values (736,35);
+insert into t (id,a) values (736,36);
+insert into t (id,a) values (736,37);
+insert into t (id,a) values (736,38);
+insert into t (id,a) values (736,39);
+insert into t (id,a) values (736,40);
+insert into t (id,a) values (736,41);
+insert into t (id,a) values (736,42);
+insert into t (id,a) values (736,43);
+insert into t (id,a) values (736,44);
+insert into t (id,a) values (736,45);
+insert into t (id,a) values (736,46);
+insert into t (id,a) values (736,47);
+insert into t (id,a) values (736,48);
+insert into t (id,a) values (736,49);
+insert into t (id,a) values (736,50);
+insert into t (id,a) values (736,51);
+insert into t (id,a) values (736,52);
+insert into t (id,a) values (736,53);
+insert into t (id,a) values (736,54);
+insert into t (id,a) values (736,55);
+insert into t (id,a) values (736,56);
+insert into t (id,a) values (736,57);
+insert into t (id,a) values (736,58);
+insert into t (id,a) values (736,59);
+insert into t (id,a) values (736,60);
+insert into t (id,a) values (736,61);
+insert into t (id,a) values (736,62);
+insert into t (id,a) values (736,63);
+insert into t (id,a) values (736,64);
+insert into t (id,a) values (736,65);
+insert into t (id,a) values (736,66);
+insert into t (id,a) values (736,67);
+insert into t (id,a) values (736,68);
+insert into t (id,a) values (736,69);
+insert into t (id,a) values (736,70);
+insert into t (id,a) values (736,71);
+insert into t (id,a) values (736,72);
+insert into t (id,a) values (736,73);
+insert into t (id,a) values (736,74);
+insert into t (id,a) values (736,75);
+insert into t (id,a) values (736,76);
+insert into t (id,a) values (736,77);
+insert into t (id,a) values (736,78);
+insert into t (id,a) values (736,79);
+insert into t (id,a) values (736,80);
+insert into t (id,a) values (736,81);
+insert into t (id,a) values (736,82);
+insert into t (id,a) values (736,83);
+insert into t (id,a) values (736,84);
+insert into t (id,a) values (736,85);
+insert into t (id,a) values (736,86);
+insert into t (id,a) values (736,87);
+insert into t (id,a) values (736,88);
+insert into t (id,a) values (736,89);
+insert into t (id,a) values (736,90);
+insert into t (id,a) values (736,91);
+insert into t (id,a) values (736,92);
+insert into t (id,a) values (736,93);
+insert into t (id,a) values (736,94);
+insert into t (id,a) values (736,95);
+insert into t (id,a) values (736,96);
+insert into t (id,a) values (736,97);
+insert into t (id,a) values (736,98);
+insert into t (id,a) values (736,99);
+insert into t (id,a) values (737,0);
+insert into t (id,a) values (737,1);
+insert into t (id,a) values (737,2);
+insert into t (id,a) values (737,3);
+insert into t (id,a) values (737,4);
+insert into t (id,a) values (737,5);
+insert into t (id,a) values (737,6);
+insert into t (id,a) values (737,7);
+insert into t (id,a) values (737,8);
+insert into t (id,a) values (737,9);
+insert into t (id,a) values (737,10);
+insert into t (id,a) values (737,11);
+insert into t (id,a) values (737,12);
+insert into t (id,a) values (737,13);
+insert into t (id,a) values (737,14);
+insert into t (id,a) values (737,15);
+insert into t (id,a) values (737,16);
+insert into t (id,a) values (737,17);
+insert into t (id,a) values (737,18);
+insert into t (id,a) values (737,19);
+insert into t (id,a) values (737,20);
+insert into t (id,a) values (737,21);
+insert into t (id,a) values (737,22);
+insert into t (id,a) values (737,23);
+insert into t (id,a) values (737,24);
+insert into t (id,a) values (737,25);
+insert into t (id,a) values (737,26);
+insert into t (id,a) values (737,27);
+insert into t (id,a) values (737,28);
+insert into t (id,a) values (737,29);
+insert into t (id,a) values (737,30);
+insert into t (id,a) values (737,31);
+insert into t (id,a) values (737,32);
+insert into t (id,a) values (737,33);
+insert into t (id,a) values (737,34);
+insert into t (id,a) values (737,35);
+insert into t (id,a) values (737,36);
+insert into t (id,a) values (737,37);
+insert into t (id,a) values (737,38);
+insert into t (id,a) values (737,39);
+insert into t (id,a) values (737,40);
+insert into t (id,a) values (737,41);
+insert into t (id,a) values (737,42);
+insert into t (id,a) values (737,43);
+insert into t (id,a) values (737,44);
+insert into t (id,a) values (737,45);
+insert into t (id,a) values (737,46);
+insert into t (id,a) values (737,47);
+insert into t (id,a) values (737,48);
+insert into t (id,a) values (737,49);
+insert into t (id,a) values (737,50);
+insert into t (id,a) values (737,51);
+insert into t (id,a) values (737,52);
+insert into t (id,a) values (737,53);
+insert into t (id,a) values (737,54);
+insert into t (id,a) values (737,55);
+insert into t (id,a) values (737,56);
+insert into t (id,a) values (737,57);
+insert into t (id,a) values (737,58);
+insert into t (id,a) values (737,59);
+insert into t (id,a) values (737,60);
+insert into t (id,a) values (737,61);
+insert into t (id,a) values (737,62);
+insert into t (id,a) values (737,63);
+insert into t (id,a) values (737,64);
+insert into t (id,a) values (737,65);
+insert into t (id,a) values (737,66);
+insert into t (id,a) values (737,67);
+insert into t (id,a) values (737,68);
+insert into t (id,a) values (737,69);
+insert into t (id,a) values (737,70);
+insert into t (id,a) values (737,71);
+insert into t (id,a) values (737,72);
+insert into t (id,a) values (737,73);
+insert into t (id,a) values (737,74);
+insert into t (id,a) values (737,75);
+insert into t (id,a) values (737,76);
+insert into t (id,a) values (737,77);
+insert into t (id,a) values (737,78);
+insert into t (id,a) values (737,79);
+insert into t (id,a) values (737,80);
+insert into t (id,a) values (737,81);
+insert into t (id,a) values (737,82);
+insert into t (id,a) values (737,83);
+insert into t (id,a) values (737,84);
+insert into t (id,a) values (737,85);
+insert into t (id,a) values (737,86);
+insert into t (id,a) values (737,87);
+insert into t (id,a) values (737,88);
+insert into t (id,a) values (737,89);
+insert into t (id,a) values (737,90);
+insert into t (id,a) values (737,91);
+insert into t (id,a) values (737,92);
+insert into t (id,a) values (737,93);
+insert into t (id,a) values (737,94);
+insert into t (id,a) values (737,95);
+insert into t (id,a) values (737,96);
+insert into t (id,a) values (737,97);
+insert into t (id,a) values (737,98);
+insert into t (id,a) values (737,99);
+insert into t (id,a) values (738,0);
+insert into t (id,a) values (738,1);
+insert into t (id,a) values (738,2);
+insert into t (id,a) values (738,3);
+insert into t (id,a) values (738,4);
+insert into t (id,a) values (738,5);
+insert into t (id,a) values (738,6);
+insert into t (id,a) values (738,7);
+insert into t (id,a) values (738,8);
+insert into t (id,a) values (738,9);
+insert into t (id,a) values (738,10);
+insert into t (id,a) values (738,11);
+insert into t (id,a) values (738,12);
+insert into t (id,a) values (738,13);
+insert into t (id,a) values (738,14);
+insert into t (id,a) values (738,15);
+insert into t (id,a) values (738,16);
+insert into t (id,a) values (738,17);
+insert into t (id,a) values (738,18);
+insert into t (id,a) values (738,19);
+insert into t (id,a) values (738,20);
+insert into t (id,a) values (738,21);
+insert into t (id,a) values (738,22);
+insert into t (id,a) values (738,23);
+insert into t (id,a) values (738,24);
+insert into t (id,a) values (738,25);
+insert into t (id,a) values (738,26);
+insert into t (id,a) values (738,27);
+insert into t (id,a) values (738,28);
+insert into t (id,a) values (738,29);
+insert into t (id,a) values (738,30);
+insert into t (id,a) values (738,31);
+insert into t (id,a) values (738,32);
+insert into t (id,a) values (738,33);
+insert into t (id,a) values (738,34);
+insert into t (id,a) values (738,35);
+insert into t (id,a) values (738,36);
+insert into t (id,a) values (738,37);
+insert into t (id,a) values (738,38);
+insert into t (id,a) values (738,39);
+insert into t (id,a) values (738,40);
+insert into t (id,a) values (738,41);
+insert into t (id,a) values (738,42);
+insert into t (id,a) values (738,43);
+insert into t (id,a) values (738,44);
+insert into t (id,a) values (738,45);
+insert into t (id,a) values (738,46);
+insert into t (id,a) values (738,47);
+insert into t (id,a) values (738,48);
+insert into t (id,a) values (738,49);
+insert into t (id,a) values (738,50);
+insert into t (id,a) values (738,51);
+insert into t (id,a) values (738,52);
+insert into t (id,a) values (738,53);
+insert into t (id,a) values (738,54);
+insert into t (id,a) values (738,55);
+insert into t (id,a) values (738,56);
+insert into t (id,a) values (738,57);
+insert into t (id,a) values (738,58);
+insert into t (id,a) values (738,59);
+insert into t (id,a) values (738,60);
+insert into t (id,a) values (738,61);
+insert into t (id,a) values (738,62);
+insert into t (id,a) values (738,63);
+insert into t (id,a) values (738,64);
+insert into t (id,a) values (738,65);
+insert into t (id,a) values (738,66);
+insert into t (id,a) values (738,67);
+insert into t (id,a) values (738,68);
+insert into t (id,a) values (738,69);
+insert into t (id,a) values (738,70);
+insert into t (id,a) values (738,71);
+insert into t (id,a) values (738,72);
+insert into t (id,a) values (738,73);
+insert into t (id,a) values (738,74);
+insert into t (id,a) values (738,75);
+insert into t (id,a) values (738,76);
+insert into t (id,a) values (738,77);
+insert into t (id,a) values (738,78);
+insert into t (id,a) values (738,79);
+insert into t (id,a) values (738,80);
+insert into t (id,a) values (738,81);
+insert into t (id,a) values (738,82);
+insert into t (id,a) values (738,83);
+insert into t (id,a) values (738,84);
+insert into t (id,a) values (738,85);
+insert into t (id,a) values (738,86);
+insert into t (id,a) values (738,87);
+insert into t (id,a) values (738,88);
+insert into t (id,a) values (738,89);
+insert into t (id,a) values (738,90);
+insert into t (id,a) values (738,91);
+insert into t (id,a) values (738,92);
+insert into t (id,a) values (738,93);
+insert into t (id,a) values (738,94);
+insert into t (id,a) values (738,95);
+insert into t (id,a) values (738,96);
+insert into t (id,a) values (738,97);
+insert into t (id,a) values (738,98);
+insert into t (id,a) values (738,99);
+insert into t (id,a) values (739,0);
+insert into t (id,a) values (739,1);
+insert into t (id,a) values (739,2);
+insert into t (id,a) values (739,3);
+insert into t (id,a) values (739,4);
+insert into t (id,a) values (739,5);
+insert into t (id,a) values (739,6);
+insert into t (id,a) values (739,7);
+insert into t (id,a) values (739,8);
+insert into t (id,a) values (739,9);
+insert into t (id,a) values (739,10);
+insert into t (id,a) values (739,11);
+insert into t (id,a) values (739,12);
+insert into t (id,a) values (739,13);
+insert into t (id,a) values (739,14);
+insert into t (id,a) values (739,15);
+insert into t (id,a) values (739,16);
+insert into t (id,a) values (739,17);
+insert into t (id,a) values (739,18);
+insert into t (id,a) values (739,19);
+insert into t (id,a) values (739,20);
+insert into t (id,a) values (739,21);
+insert into t (id,a) values (739,22);
+insert into t (id,a) values (739,23);
+insert into t (id,a) values (739,24);
+insert into t (id,a) values (739,25);
+insert into t (id,a) values (739,26);
+insert into t (id,a) values (739,27);
+insert into t (id,a) values (739,28);
+insert into t (id,a) values (739,29);
+insert into t (id,a) values (739,30);
+insert into t (id,a) values (739,31);
+insert into t (id,a) values (739,32);
+insert into t (id,a) values (739,33);
+insert into t (id,a) values (739,34);
+insert into t (id,a) values (739,35);
+insert into t (id,a) values (739,36);
+insert into t (id,a) values (739,37);
+insert into t (id,a) values (739,38);
+insert into t (id,a) values (739,39);
+insert into t (id,a) values (739,40);
+insert into t (id,a) values (739,41);
+insert into t (id,a) values (739,42);
+insert into t (id,a) values (739,43);
+insert into t (id,a) values (739,44);
+insert into t (id,a) values (739,45);
+insert into t (id,a) values (739,46);
+insert into t (id,a) values (739,47);
+insert into t (id,a) values (739,48);
+insert into t (id,a) values (739,49);
+insert into t (id,a) values (739,50);
+insert into t (id,a) values (739,51);
+insert into t (id,a) values (739,52);
+insert into t (id,a) values (739,53);
+insert into t (id,a) values (739,54);
+insert into t (id,a) values (739,55);
+insert into t (id,a) values (739,56);
+insert into t (id,a) values (739,57);
+insert into t (id,a) values (739,58);
+insert into t (id,a) values (739,59);
+insert into t (id,a) values (739,60);
+insert into t (id,a) values (739,61);
+insert into t (id,a) values (739,62);
+insert into t (id,a) values (739,63);
+insert into t (id,a) values (739,64);
+insert into t (id,a) values (739,65);
+insert into t (id,a) values (739,66);
+insert into t (id,a) values (739,67);
+insert into t (id,a) values (739,68);
+insert into t (id,a) values (739,69);
+insert into t (id,a) values (739,70);
+insert into t (id,a) values (739,71);
+insert into t (id,a) values (739,72);
+insert into t (id,a) values (739,73);
+insert into t (id,a) values (739,74);
+insert into t (id,a) values (739,75);
+insert into t (id,a) values (739,76);
+insert into t (id,a) values (739,77);
+insert into t (id,a) values (739,78);
+insert into t (id,a) values (739,79);
+insert into t (id,a) values (739,80);
+insert into t (id,a) values (739,81);
+insert into t (id,a) values (739,82);
+insert into t (id,a) values (739,83);
+insert into t (id,a) values (739,84);
+insert into t (id,a) values (739,85);
+insert into t (id,a) values (739,86);
+insert into t (id,a) values (739,87);
+insert into t (id,a) values (739,88);
+insert into t (id,a) values (739,89);
+insert into t (id,a) values (739,90);
+insert into t (id,a) values (739,91);
+insert into t (id,a) values (739,92);
+insert into t (id,a) values (739,93);
+insert into t (id,a) values (739,94);
+insert into t (id,a) values (739,95);
+insert into t (id,a) values (739,96);
+insert into t (id,a) values (739,97);
+insert into t (id,a) values (739,98);
+insert into t (id,a) values (739,99);
+insert into t (id,a) values (740,0);
+insert into t (id,a) values (740,1);
+insert into t (id,a) values (740,2);
+insert into t (id,a) values (740,3);
+insert into t (id,a) values (740,4);
+insert into t (id,a) values (740,5);
+insert into t (id,a) values (740,6);
+insert into t (id,a) values (740,7);
+insert into t (id,a) values (740,8);
+insert into t (id,a) values (740,9);
+insert into t (id,a) values (740,10);
+insert into t (id,a) values (740,11);
+insert into t (id,a) values (740,12);
+insert into t (id,a) values (740,13);
+insert into t (id,a) values (740,14);
+insert into t (id,a) values (740,15);
+insert into t (id,a) values (740,16);
+insert into t (id,a) values (740,17);
+insert into t (id,a) values (740,18);
+insert into t (id,a) values (740,19);
+insert into t (id,a) values (740,20);
+insert into t (id,a) values (740,21);
+insert into t (id,a) values (740,22);
+insert into t (id,a) values (740,23);
+insert into t (id,a) values (740,24);
+insert into t (id,a) values (740,25);
+insert into t (id,a) values (740,26);
+insert into t (id,a) values (740,27);
+insert into t (id,a) values (740,28);
+insert into t (id,a) values (740,29);
+insert into t (id,a) values (740,30);
+insert into t (id,a) values (740,31);
+insert into t (id,a) values (740,32);
+insert into t (id,a) values (740,33);
+insert into t (id,a) values (740,34);
+insert into t (id,a) values (740,35);
+insert into t (id,a) values (740,36);
+insert into t (id,a) values (740,37);
+insert into t (id,a) values (740,38);
+insert into t (id,a) values (740,39);
+insert into t (id,a) values (740,40);
+insert into t (id,a) values (740,41);
+insert into t (id,a) values (740,42);
+insert into t (id,a) values (740,43);
+insert into t (id,a) values (740,44);
+insert into t (id,a) values (740,45);
+insert into t (id,a) values (740,46);
+insert into t (id,a) values (740,47);
+insert into t (id,a) values (740,48);
+insert into t (id,a) values (740,49);
+insert into t (id,a) values (740,50);
+insert into t (id,a) values (740,51);
+insert into t (id,a) values (740,52);
+insert into t (id,a) values (740,53);
+insert into t (id,a) values (740,54);
+insert into t (id,a) values (740,55);
+insert into t (id,a) values (740,56);
+insert into t (id,a) values (740,57);
+insert into t (id,a) values (740,58);
+insert into t (id,a) values (740,59);
+insert into t (id,a) values (740,60);
+insert into t (id,a) values (740,61);
+insert into t (id,a) values (740,62);
+insert into t (id,a) values (740,63);
+insert into t (id,a) values (740,64);
+insert into t (id,a) values (740,65);
+insert into t (id,a) values (740,66);
+insert into t (id,a) values (740,67);
+insert into t (id,a) values (740,68);
+insert into t (id,a) values (740,69);
+insert into t (id,a) values (740,70);
+insert into t (id,a) values (740,71);
+insert into t (id,a) values (740,72);
+insert into t (id,a) values (740,73);
+insert into t (id,a) values (740,74);
+insert into t (id,a) values (740,75);
+insert into t (id,a) values (740,76);
+insert into t (id,a) values (740,77);
+insert into t (id,a) values (740,78);
+insert into t (id,a) values (740,79);
+insert into t (id,a) values (740,80);
+insert into t (id,a) values (740,81);
+insert into t (id,a) values (740,82);
+insert into t (id,a) values (740,83);
+insert into t (id,a) values (740,84);
+insert into t (id,a) values (740,85);
+insert into t (id,a) values (740,86);
+insert into t (id,a) values (740,87);
+insert into t (id,a) values (740,88);
+insert into t (id,a) values (740,89);
+insert into t (id,a) values (740,90);
+insert into t (id,a) values (740,91);
+insert into t (id,a) values (740,92);
+insert into t (id,a) values (740,93);
+insert into t (id,a) values (740,94);
+insert into t (id,a) values (740,95);
+insert into t (id,a) values (740,96);
+insert into t (id,a) values (740,97);
+insert into t (id,a) values (740,98);
+insert into t (id,a) values (740,99);
+insert into t (id,a) values (741,0);
+insert into t (id,a) values (741,1);
+insert into t (id,a) values (741,2);
+insert into t (id,a) values (741,3);
+insert into t (id,a) values (741,4);
+insert into t (id,a) values (741,5);
+insert into t (id,a) values (741,6);
+insert into t (id,a) values (741,7);
+insert into t (id,a) values (741,8);
+insert into t (id,a) values (741,9);
+insert into t (id,a) values (741,10);
+insert into t (id,a) values (741,11);
+insert into t (id,a) values (741,12);
+insert into t (id,a) values (741,13);
+insert into t (id,a) values (741,14);
+insert into t (id,a) values (741,15);
+insert into t (id,a) values (741,16);
+insert into t (id,a) values (741,17);
+insert into t (id,a) values (741,18);
+insert into t (id,a) values (741,19);
+insert into t (id,a) values (741,20);
+insert into t (id,a) values (741,21);
+insert into t (id,a) values (741,22);
+insert into t (id,a) values (741,23);
+insert into t (id,a) values (741,24);
+insert into t (id,a) values (741,25);
+insert into t (id,a) values (741,26);
+insert into t (id,a) values (741,27);
+insert into t (id,a) values (741,28);
+insert into t (id,a) values (741,29);
+insert into t (id,a) values (741,30);
+insert into t (id,a) values (741,31);
+insert into t (id,a) values (741,32);
+insert into t (id,a) values (741,33);
+insert into t (id,a) values (741,34);
+insert into t (id,a) values (741,35);
+insert into t (id,a) values (741,36);
+insert into t (id,a) values (741,37);
+insert into t (id,a) values (741,38);
+insert into t (id,a) values (741,39);
+insert into t (id,a) values (741,40);
+insert into t (id,a) values (741,41);
+insert into t (id,a) values (741,42);
+insert into t (id,a) values (741,43);
+insert into t (id,a) values (741,44);
+insert into t (id,a) values (741,45);
+insert into t (id,a) values (741,46);
+insert into t (id,a) values (741,47);
+insert into t (id,a) values (741,48);
+insert into t (id,a) values (741,49);
+insert into t (id,a) values (741,50);
+insert into t (id,a) values (741,51);
+insert into t (id,a) values (741,52);
+insert into t (id,a) values (741,53);
+insert into t (id,a) values (741,54);
+insert into t (id,a) values (741,55);
+insert into t (id,a) values (741,56);
+insert into t (id,a) values (741,57);
+insert into t (id,a) values (741,58);
+insert into t (id,a) values (741,59);
+insert into t (id,a) values (741,60);
+insert into t (id,a) values (741,61);
+insert into t (id,a) values (741,62);
+insert into t (id,a) values (741,63);
+insert into t (id,a) values (741,64);
+insert into t (id,a) values (741,65);
+insert into t (id,a) values (741,66);
+insert into t (id,a) values (741,67);
+insert into t (id,a) values (741,68);
+insert into t (id,a) values (741,69);
+insert into t (id,a) values (741,70);
+insert into t (id,a) values (741,71);
+insert into t (id,a) values (741,72);
+insert into t (id,a) values (741,73);
+insert into t (id,a) values (741,74);
+insert into t (id,a) values (741,75);
+insert into t (id,a) values (741,76);
+insert into t (id,a) values (741,77);
+insert into t (id,a) values (741,78);
+insert into t (id,a) values (741,79);
+insert into t (id,a) values (741,80);
+insert into t (id,a) values (741,81);
+insert into t (id,a) values (741,82);
+insert into t (id,a) values (741,83);
+insert into t (id,a) values (741,84);
+insert into t (id,a) values (741,85);
+insert into t (id,a) values (741,86);
+insert into t (id,a) values (741,87);
+insert into t (id,a) values (741,88);
+insert into t (id,a) values (741,89);
+insert into t (id,a) values (741,90);
+insert into t (id,a) values (741,91);
+insert into t (id,a) values (741,92);
+insert into t (id,a) values (741,93);
+insert into t (id,a) values (741,94);
+insert into t (id,a) values (741,95);
+insert into t (id,a) values (741,96);
+insert into t (id,a) values (741,97);
+insert into t (id,a) values (741,98);
+insert into t (id,a) values (741,99);
+insert into t (id,a) values (742,0);
+insert into t (id,a) values (742,1);
+insert into t (id,a) values (742,2);
+insert into t (id,a) values (742,3);
+insert into t (id,a) values (742,4);
+insert into t (id,a) values (742,5);
+insert into t (id,a) values (742,6);
+insert into t (id,a) values (742,7);
+insert into t (id,a) values (742,8);
+insert into t (id,a) values (742,9);
+insert into t (id,a) values (742,10);
+insert into t (id,a) values (742,11);
+insert into t (id,a) values (742,12);
+insert into t (id,a) values (742,13);
+insert into t (id,a) values (742,14);
+insert into t (id,a) values (742,15);
+insert into t (id,a) values (742,16);
+insert into t (id,a) values (742,17);
+insert into t (id,a) values (742,18);
+insert into t (id,a) values (742,19);
+insert into t (id,a) values (742,20);
+insert into t (id,a) values (742,21);
+insert into t (id,a) values (742,22);
+insert into t (id,a) values (742,23);
+insert into t (id,a) values (742,24);
+insert into t (id,a) values (742,25);
+insert into t (id,a) values (742,26);
+insert into t (id,a) values (742,27);
+insert into t (id,a) values (742,28);
+insert into t (id,a) values (742,29);
+insert into t (id,a) values (742,30);
+insert into t (id,a) values (742,31);
+insert into t (id,a) values (742,32);
+insert into t (id,a) values (742,33);
+insert into t (id,a) values (742,34);
+insert into t (id,a) values (742,35);
+insert into t (id,a) values (742,36);
+insert into t (id,a) values (742,37);
+insert into t (id,a) values (742,38);
+insert into t (id,a) values (742,39);
+insert into t (id,a) values (742,40);
+insert into t (id,a) values (742,41);
+insert into t (id,a) values (742,42);
+insert into t (id,a) values (742,43);
+insert into t (id,a) values (742,44);
+insert into t (id,a) values (742,45);
+insert into t (id,a) values (742,46);
+insert into t (id,a) values (742,47);
+insert into t (id,a) values (742,48);
+insert into t (id,a) values (742,49);
+insert into t (id,a) values (742,50);
+insert into t (id,a) values (742,51);
+insert into t (id,a) values (742,52);
+insert into t (id,a) values (742,53);
+insert into t (id,a) values (742,54);
+insert into t (id,a) values (742,55);
+insert into t (id,a) values (742,56);
+insert into t (id,a) values (742,57);
+insert into t (id,a) values (742,58);
+insert into t (id,a) values (742,59);
+insert into t (id,a) values (742,60);
+insert into t (id,a) values (742,61);
+insert into t (id,a) values (742,62);
+insert into t (id,a) values (742,63);
+insert into t (id,a) values (742,64);
+insert into t (id,a) values (742,65);
+insert into t (id,a) values (742,66);
+insert into t (id,a) values (742,67);
+insert into t (id,a) values (742,68);
+insert into t (id,a) values (742,69);
+insert into t (id,a) values (742,70);
+insert into t (id,a) values (742,71);
+insert into t (id,a) values (742,72);
+insert into t (id,a) values (742,73);
+insert into t (id,a) values (742,74);
+insert into t (id,a) values (742,75);
+insert into t (id,a) values (742,76);
+insert into t (id,a) values (742,77);
+insert into t (id,a) values (742,78);
+insert into t (id,a) values (742,79);
+insert into t (id,a) values (742,80);
+insert into t (id,a) values (742,81);
+insert into t (id,a) values (742,82);
+insert into t (id,a) values (742,83);
+insert into t (id,a) values (742,84);
+insert into t (id,a) values (742,85);
+insert into t (id,a) values (742,86);
+insert into t (id,a) values (742,87);
+insert into t (id,a) values (742,88);
+insert into t (id,a) values (742,89);
+insert into t (id,a) values (742,90);
+insert into t (id,a) values (742,91);
+insert into t (id,a) values (742,92);
+insert into t (id,a) values (742,93);
+insert into t (id,a) values (742,94);
+insert into t (id,a) values (742,95);
+insert into t (id,a) values (742,96);
+insert into t (id,a) values (742,97);
+insert into t (id,a) values (742,98);
+insert into t (id,a) values (742,99);
+insert into t (id,a) values (743,0);
+insert into t (id,a) values (743,1);
+insert into t (id,a) values (743,2);
+insert into t (id,a) values (743,3);
+insert into t (id,a) values (743,4);
+insert into t (id,a) values (743,5);
+insert into t (id,a) values (743,6);
+insert into t (id,a) values (743,7);
+insert into t (id,a) values (743,8);
+insert into t (id,a) values (743,9);
+insert into t (id,a) values (743,10);
+insert into t (id,a) values (743,11);
+insert into t (id,a) values (743,12);
+insert into t (id,a) values (743,13);
+insert into t (id,a) values (743,14);
+insert into t (id,a) values (743,15);
+insert into t (id,a) values (743,16);
+insert into t (id,a) values (743,17);
+insert into t (id,a) values (743,18);
+insert into t (id,a) values (743,19);
+insert into t (id,a) values (743,20);
+insert into t (id,a) values (743,21);
+insert into t (id,a) values (743,22);
+insert into t (id,a) values (743,23);
+insert into t (id,a) values (743,24);
+insert into t (id,a) values (743,25);
+insert into t (id,a) values (743,26);
+insert into t (id,a) values (743,27);
+insert into t (id,a) values (743,28);
+insert into t (id,a) values (743,29);
+insert into t (id,a) values (743,30);
+insert into t (id,a) values (743,31);
+insert into t (id,a) values (743,32);
+insert into t (id,a) values (743,33);
+insert into t (id,a) values (743,34);
+insert into t (id,a) values (743,35);
+insert into t (id,a) values (743,36);
+insert into t (id,a) values (743,37);
+insert into t (id,a) values (743,38);
+insert into t (id,a) values (743,39);
+insert into t (id,a) values (743,40);
+insert into t (id,a) values (743,41);
+insert into t (id,a) values (743,42);
+insert into t (id,a) values (743,43);
+insert into t (id,a) values (743,44);
+insert into t (id,a) values (743,45);
+insert into t (id,a) values (743,46);
+insert into t (id,a) values (743,47);
+insert into t (id,a) values (743,48);
+insert into t (id,a) values (743,49);
+insert into t (id,a) values (743,50);
+insert into t (id,a) values (743,51);
+insert into t (id,a) values (743,52);
+insert into t (id,a) values (743,53);
+insert into t (id,a) values (743,54);
+insert into t (id,a) values (743,55);
+insert into t (id,a) values (743,56);
+insert into t (id,a) values (743,57);
+insert into t (id,a) values (743,58);
+insert into t (id,a) values (743,59);
+insert into t (id,a) values (743,60);
+insert into t (id,a) values (743,61);
+insert into t (id,a) values (743,62);
+insert into t (id,a) values (743,63);
+insert into t (id,a) values (743,64);
+insert into t (id,a) values (743,65);
+insert into t (id,a) values (743,66);
+insert into t (id,a) values (743,67);
+insert into t (id,a) values (743,68);
+insert into t (id,a) values (743,69);
+insert into t (id,a) values (743,70);
+insert into t (id,a) values (743,71);
+insert into t (id,a) values (743,72);
+insert into t (id,a) values (743,73);
+insert into t (id,a) values (743,74);
+insert into t (id,a) values (743,75);
+insert into t (id,a) values (743,76);
+insert into t (id,a) values (743,77);
+insert into t (id,a) values (743,78);
+insert into t (id,a) values (743,79);
+insert into t (id,a) values (743,80);
+insert into t (id,a) values (743,81);
+insert into t (id,a) values (743,82);
+insert into t (id,a) values (743,83);
+insert into t (id,a) values (743,84);
+insert into t (id,a) values (743,85);
+insert into t (id,a) values (743,86);
+insert into t (id,a) values (743,87);
+insert into t (id,a) values (743,88);
+insert into t (id,a) values (743,89);
+insert into t (id,a) values (743,90);
+insert into t (id,a) values (743,91);
+insert into t (id,a) values (743,92);
+insert into t (id,a) values (743,93);
+insert into t (id,a) values (743,94);
+insert into t (id,a) values (743,95);
+insert into t (id,a) values (743,96);
+insert into t (id,a) values (743,97);
+insert into t (id,a) values (743,98);
+insert into t (id,a) values (743,99);
+insert into t (id,a) values (744,0);
+insert into t (id,a) values (744,1);
+insert into t (id,a) values (744,2);
+insert into t (id,a) values (744,3);
+insert into t (id,a) values (744,4);
+insert into t (id,a) values (744,5);
+insert into t (id,a) values (744,6);
+insert into t (id,a) values (744,7);
+insert into t (id,a) values (744,8);
+insert into t (id,a) values (744,9);
+insert into t (id,a) values (744,10);
+insert into t (id,a) values (744,11);
+insert into t (id,a) values (744,12);
+insert into t (id,a) values (744,13);
+insert into t (id,a) values (744,14);
+insert into t (id,a) values (744,15);
+insert into t (id,a) values (744,16);
+insert into t (id,a) values (744,17);
+insert into t (id,a) values (744,18);
+insert into t (id,a) values (744,19);
+insert into t (id,a) values (744,20);
+insert into t (id,a) values (744,21);
+insert into t (id,a) values (744,22);
+insert into t (id,a) values (744,23);
+insert into t (id,a) values (744,24);
+insert into t (id,a) values (744,25);
+insert into t (id,a) values (744,26);
+insert into t (id,a) values (744,27);
+insert into t (id,a) values (744,28);
+insert into t (id,a) values (744,29);
+insert into t (id,a) values (744,30);
+insert into t (id,a) values (744,31);
+insert into t (id,a) values (744,32);
+insert into t (id,a) values (744,33);
+insert into t (id,a) values (744,34);
+insert into t (id,a) values (744,35);
+insert into t (id,a) values (744,36);
+insert into t (id,a) values (744,37);
+insert into t (id,a) values (744,38);
+insert into t (id,a) values (744,39);
+insert into t (id,a) values (744,40);
+insert into t (id,a) values (744,41);
+insert into t (id,a) values (744,42);
+insert into t (id,a) values (744,43);
+insert into t (id,a) values (744,44);
+insert into t (id,a) values (744,45);
+insert into t (id,a) values (744,46);
+insert into t (id,a) values (744,47);
+insert into t (id,a) values (744,48);
+insert into t (id,a) values (744,49);
+insert into t (id,a) values (744,50);
+insert into t (id,a) values (744,51);
+insert into t (id,a) values (744,52);
+insert into t (id,a) values (744,53);
+insert into t (id,a) values (744,54);
+insert into t (id,a) values (744,55);
+insert into t (id,a) values (744,56);
+insert into t (id,a) values (744,57);
+insert into t (id,a) values (744,58);
+insert into t (id,a) values (744,59);
+insert into t (id,a) values (744,60);
+insert into t (id,a) values (744,61);
+insert into t (id,a) values (744,62);
+insert into t (id,a) values (744,63);
+insert into t (id,a) values (744,64);
+insert into t (id,a) values (744,65);
+insert into t (id,a) values (744,66);
+insert into t (id,a) values (744,67);
+insert into t (id,a) values (744,68);
+insert into t (id,a) values (744,69);
+insert into t (id,a) values (744,70);
+insert into t (id,a) values (744,71);
+insert into t (id,a) values (744,72);
+insert into t (id,a) values (744,73);
+insert into t (id,a) values (744,74);
+insert into t (id,a) values (744,75);
+insert into t (id,a) values (744,76);
+insert into t (id,a) values (744,77);
+insert into t (id,a) values (744,78);
+insert into t (id,a) values (744,79);
+insert into t (id,a) values (744,80);
+insert into t (id,a) values (744,81);
+insert into t (id,a) values (744,82);
+insert into t (id,a) values (744,83);
+insert into t (id,a) values (744,84);
+insert into t (id,a) values (744,85);
+insert into t (id,a) values (744,86);
+insert into t (id,a) values (744,87);
+insert into t (id,a) values (744,88);
+insert into t (id,a) values (744,89);
+insert into t (id,a) values (744,90);
+insert into t (id,a) values (744,91);
+insert into t (id,a) values (744,92);
+insert into t (id,a) values (744,93);
+insert into t (id,a) values (744,94);
+insert into t (id,a) values (744,95);
+insert into t (id,a) values (744,96);
+insert into t (id,a) values (744,97);
+insert into t (id,a) values (744,98);
+insert into t (id,a) values (744,99);
+insert into t (id,a) values (745,0);
+insert into t (id,a) values (745,1);
+insert into t (id,a) values (745,2);
+insert into t (id,a) values (745,3);
+insert into t (id,a) values (745,4);
+insert into t (id,a) values (745,5);
+insert into t (id,a) values (745,6);
+insert into t (id,a) values (745,7);
+insert into t (id,a) values (745,8);
+insert into t (id,a) values (745,9);
+insert into t (id,a) values (745,10);
+insert into t (id,a) values (745,11);
+insert into t (id,a) values (745,12);
+insert into t (id,a) values (745,13);
+insert into t (id,a) values (745,14);
+insert into t (id,a) values (745,15);
+insert into t (id,a) values (745,16);
+insert into t (id,a) values (745,17);
+insert into t (id,a) values (745,18);
+insert into t (id,a) values (745,19);
+insert into t (id,a) values (745,20);
+insert into t (id,a) values (745,21);
+insert into t (id,a) values (745,22);
+insert into t (id,a) values (745,23);
+insert into t (id,a) values (745,24);
+insert into t (id,a) values (745,25);
+insert into t (id,a) values (745,26);
+insert into t (id,a) values (745,27);
+insert into t (id,a) values (745,28);
+insert into t (id,a) values (745,29);
+insert into t (id,a) values (745,30);
+insert into t (id,a) values (745,31);
+insert into t (id,a) values (745,32);
+insert into t (id,a) values (745,33);
+insert into t (id,a) values (745,34);
+insert into t (id,a) values (745,35);
+insert into t (id,a) values (745,36);
+insert into t (id,a) values (745,37);
+insert into t (id,a) values (745,38);
+insert into t (id,a) values (745,39);
+insert into t (id,a) values (745,40);
+insert into t (id,a) values (745,41);
+insert into t (id,a) values (745,42);
+insert into t (id,a) values (745,43);
+insert into t (id,a) values (745,44);
+insert into t (id,a) values (745,45);
+insert into t (id,a) values (745,46);
+insert into t (id,a) values (745,47);
+insert into t (id,a) values (745,48);
+insert into t (id,a) values (745,49);
+insert into t (id,a) values (745,50);
+insert into t (id,a) values (745,51);
+insert into t (id,a) values (745,52);
+insert into t (id,a) values (745,53);
+insert into t (id,a) values (745,54);
+insert into t (id,a) values (745,55);
+insert into t (id,a) values (745,56);
+insert into t (id,a) values (745,57);
+insert into t (id,a) values (745,58);
+insert into t (id,a) values (745,59);
+insert into t (id,a) values (745,60);
+insert into t (id,a) values (745,61);
+insert into t (id,a) values (745,62);
+insert into t (id,a) values (745,63);
+insert into t (id,a) values (745,64);
+insert into t (id,a) values (745,65);
+insert into t (id,a) values (745,66);
+insert into t (id,a) values (745,67);
+insert into t (id,a) values (745,68);
+insert into t (id,a) values (745,69);
+insert into t (id,a) values (745,70);
+insert into t (id,a) values (745,71);
+insert into t (id,a) values (745,72);
+insert into t (id,a) values (745,73);
+insert into t (id,a) values (745,74);
+insert into t (id,a) values (745,75);
+insert into t (id,a) values (745,76);
+insert into t (id,a) values (745,77);
+insert into t (id,a) values (745,78);
+insert into t (id,a) values (745,79);
+insert into t (id,a) values (745,80);
+insert into t (id,a) values (745,81);
+insert into t (id,a) values (745,82);
+insert into t (id,a) values (745,83);
+insert into t (id,a) values (745,84);
+insert into t (id,a) values (745,85);
+insert into t (id,a) values (745,86);
+insert into t (id,a) values (745,87);
+insert into t (id,a) values (745,88);
+insert into t (id,a) values (745,89);
+insert into t (id,a) values (745,90);
+insert into t (id,a) values (745,91);
+insert into t (id,a) values (745,92);
+insert into t (id,a) values (745,93);
+insert into t (id,a) values (745,94);
+insert into t (id,a) values (745,95);
+insert into t (id,a) values (745,96);
+insert into t (id,a) values (745,97);
+insert into t (id,a) values (745,98);
+insert into t (id,a) values (745,99);
+insert into t (id,a) values (746,0);
+insert into t (id,a) values (746,1);
+insert into t (id,a) values (746,2);
+insert into t (id,a) values (746,3);
+insert into t (id,a) values (746,4);
+insert into t (id,a) values (746,5);
+insert into t (id,a) values (746,6);
+insert into t (id,a) values (746,7);
+insert into t (id,a) values (746,8);
+insert into t (id,a) values (746,9);
+insert into t (id,a) values (746,10);
+insert into t (id,a) values (746,11);
+insert into t (id,a) values (746,12);
+insert into t (id,a) values (746,13);
+insert into t (id,a) values (746,14);
+insert into t (id,a) values (746,15);
+insert into t (id,a) values (746,16);
+insert into t (id,a) values (746,17);
+insert into t (id,a) values (746,18);
+insert into t (id,a) values (746,19);
+insert into t (id,a) values (746,20);
+insert into t (id,a) values (746,21);
+insert into t (id,a) values (746,22);
+insert into t (id,a) values (746,23);
+insert into t (id,a) values (746,24);
+insert into t (id,a) values (746,25);
+insert into t (id,a) values (746,26);
+insert into t (id,a) values (746,27);
+insert into t (id,a) values (746,28);
+insert into t (id,a) values (746,29);
+insert into t (id,a) values (746,30);
+insert into t (id,a) values (746,31);
+insert into t (id,a) values (746,32);
+insert into t (id,a) values (746,33);
+insert into t (id,a) values (746,34);
+insert into t (id,a) values (746,35);
+insert into t (id,a) values (746,36);
+insert into t (id,a) values (746,37);
+insert into t (id,a) values (746,38);
+insert into t (id,a) values (746,39);
+insert into t (id,a) values (746,40);
+insert into t (id,a) values (746,41);
+insert into t (id,a) values (746,42);
+insert into t (id,a) values (746,43);
+insert into t (id,a) values (746,44);
+insert into t (id,a) values (746,45);
+insert into t (id,a) values (746,46);
+insert into t (id,a) values (746,47);
+insert into t (id,a) values (746,48);
+insert into t (id,a) values (746,49);
+insert into t (id,a) values (746,50);
+insert into t (id,a) values (746,51);
+insert into t (id,a) values (746,52);
+insert into t (id,a) values (746,53);
+insert into t (id,a) values (746,54);
+insert into t (id,a) values (746,55);
+insert into t (id,a) values (746,56);
+insert into t (id,a) values (746,57);
+insert into t (id,a) values (746,58);
+insert into t (id,a) values (746,59);
+insert into t (id,a) values (746,60);
+insert into t (id,a) values (746,61);
+insert into t (id,a) values (746,62);
+insert into t (id,a) values (746,63);
+insert into t (id,a) values (746,64);
+insert into t (id,a) values (746,65);
+insert into t (id,a) values (746,66);
+insert into t (id,a) values (746,67);
+insert into t (id,a) values (746,68);
+insert into t (id,a) values (746,69);
+insert into t (id,a) values (746,70);
+insert into t (id,a) values (746,71);
+insert into t (id,a) values (746,72);
+insert into t (id,a) values (746,73);
+insert into t (id,a) values (746,74);
+insert into t (id,a) values (746,75);
+insert into t (id,a) values (746,76);
+insert into t (id,a) values (746,77);
+insert into t (id,a) values (746,78);
+insert into t (id,a) values (746,79);
+insert into t (id,a) values (746,80);
+insert into t (id,a) values (746,81);
+insert into t (id,a) values (746,82);
+insert into t (id,a) values (746,83);
+insert into t (id,a) values (746,84);
+insert into t (id,a) values (746,85);
+insert into t (id,a) values (746,86);
+insert into t (id,a) values (746,87);
+insert into t (id,a) values (746,88);
+insert into t (id,a) values (746,89);
+insert into t (id,a) values (746,90);
+insert into t (id,a) values (746,91);
+insert into t (id,a) values (746,92);
+insert into t (id,a) values (746,93);
+insert into t (id,a) values (746,94);
+insert into t (id,a) values (746,95);
+insert into t (id,a) values (746,96);
+insert into t (id,a) values (746,97);
+insert into t (id,a) values (746,98);
+insert into t (id,a) values (746,99);
+insert into t (id,a) values (747,0);
+insert into t (id,a) values (747,1);
+insert into t (id,a) values (747,2);
+insert into t (id,a) values (747,3);
+insert into t (id,a) values (747,4);
+insert into t (id,a) values (747,5);
+insert into t (id,a) values (747,6);
+insert into t (id,a) values (747,7);
+insert into t (id,a) values (747,8);
+insert into t (id,a) values (747,9);
+insert into t (id,a) values (747,10);
+insert into t (id,a) values (747,11);
+insert into t (id,a) values (747,12);
+insert into t (id,a) values (747,13);
+insert into t (id,a) values (747,14);
+insert into t (id,a) values (747,15);
+insert into t (id,a) values (747,16);
+insert into t (id,a) values (747,17);
+insert into t (id,a) values (747,18);
+insert into t (id,a) values (747,19);
+insert into t (id,a) values (747,20);
+insert into t (id,a) values (747,21);
+insert into t (id,a) values (747,22);
+insert into t (id,a) values (747,23);
+insert into t (id,a) values (747,24);
+insert into t (id,a) values (747,25);
+insert into t (id,a) values (747,26);
+insert into t (id,a) values (747,27);
+insert into t (id,a) values (747,28);
+insert into t (id,a) values (747,29);
+insert into t (id,a) values (747,30);
+insert into t (id,a) values (747,31);
+insert into t (id,a) values (747,32);
+insert into t (id,a) values (747,33);
+insert into t (id,a) values (747,34);
+insert into t (id,a) values (747,35);
+insert into t (id,a) values (747,36);
+insert into t (id,a) values (747,37);
+insert into t (id,a) values (747,38);
+insert into t (id,a) values (747,39);
+insert into t (id,a) values (747,40);
+insert into t (id,a) values (747,41);
+insert into t (id,a) values (747,42);
+insert into t (id,a) values (747,43);
+insert into t (id,a) values (747,44);
+insert into t (id,a) values (747,45);
+insert into t (id,a) values (747,46);
+insert into t (id,a) values (747,47);
+insert into t (id,a) values (747,48);
+insert into t (id,a) values (747,49);
+insert into t (id,a) values (747,50);
+insert into t (id,a) values (747,51);
+insert into t (id,a) values (747,52);
+insert into t (id,a) values (747,53);
+insert into t (id,a) values (747,54);
+insert into t (id,a) values (747,55);
+insert into t (id,a) values (747,56);
+insert into t (id,a) values (747,57);
+insert into t (id,a) values (747,58);
+insert into t (id,a) values (747,59);
+insert into t (id,a) values (747,60);
+insert into t (id,a) values (747,61);
+insert into t (id,a) values (747,62);
+insert into t (id,a) values (747,63);
+insert into t (id,a) values (747,64);
+insert into t (id,a) values (747,65);
+insert into t (id,a) values (747,66);
+insert into t (id,a) values (747,67);
+insert into t (id,a) values (747,68);
+insert into t (id,a) values (747,69);
+insert into t (id,a) values (747,70);
+insert into t (id,a) values (747,71);
+insert into t (id,a) values (747,72);
+insert into t (id,a) values (747,73);
+insert into t (id,a) values (747,74);
+insert into t (id,a) values (747,75);
+insert into t (id,a) values (747,76);
+insert into t (id,a) values (747,77);
+insert into t (id,a) values (747,78);
+insert into t (id,a) values (747,79);
+insert into t (id,a) values (747,80);
+insert into t (id,a) values (747,81);
+insert into t (id,a) values (747,82);
+insert into t (id,a) values (747,83);
+insert into t (id,a) values (747,84);
+insert into t (id,a) values (747,85);
+insert into t (id,a) values (747,86);
+insert into t (id,a) values (747,87);
+insert into t (id,a) values (747,88);
+insert into t (id,a) values (747,89);
+insert into t (id,a) values (747,90);
+insert into t (id,a) values (747,91);
+insert into t (id,a) values (747,92);
+insert into t (id,a) values (747,93);
+insert into t (id,a) values (747,94);
+insert into t (id,a) values (747,95);
+insert into t (id,a) values (747,96);
+insert into t (id,a) values (747,97);
+insert into t (id,a) values (747,98);
+insert into t (id,a) values (747,99);
+insert into t (id,a) values (748,0);
+insert into t (id,a) values (748,1);
+insert into t (id,a) values (748,2);
+insert into t (id,a) values (748,3);
+insert into t (id,a) values (748,4);
+insert into t (id,a) values (748,5);
+insert into t (id,a) values (748,6);
+insert into t (id,a) values (748,7);
+insert into t (id,a) values (748,8);
+insert into t (id,a) values (748,9);
+insert into t (id,a) values (748,10);
+insert into t (id,a) values (748,11);
+insert into t (id,a) values (748,12);
+insert into t (id,a) values (748,13);
+insert into t (id,a) values (748,14);
+insert into t (id,a) values (748,15);
+insert into t (id,a) values (748,16);
+insert into t (id,a) values (748,17);
+insert into t (id,a) values (748,18);
+insert into t (id,a) values (748,19);
+insert into t (id,a) values (748,20);
+insert into t (id,a) values (748,21);
+insert into t (id,a) values (748,22);
+insert into t (id,a) values (748,23);
+insert into t (id,a) values (748,24);
+insert into t (id,a) values (748,25);
+insert into t (id,a) values (748,26);
+insert into t (id,a) values (748,27);
+insert into t (id,a) values (748,28);
+insert into t (id,a) values (748,29);
+insert into t (id,a) values (748,30);
+insert into t (id,a) values (748,31);
+insert into t (id,a) values (748,32);
+insert into t (id,a) values (748,33);
+insert into t (id,a) values (748,34);
+insert into t (id,a) values (748,35);
+insert into t (id,a) values (748,36);
+insert into t (id,a) values (748,37);
+insert into t (id,a) values (748,38);
+insert into t (id,a) values (748,39);
+insert into t (id,a) values (748,40);
+insert into t (id,a) values (748,41);
+insert into t (id,a) values (748,42);
+insert into t (id,a) values (748,43);
+insert into t (id,a) values (748,44);
+insert into t (id,a) values (748,45);
+insert into t (id,a) values (748,46);
+insert into t (id,a) values (748,47);
+insert into t (id,a) values (748,48);
+insert into t (id,a) values (748,49);
+insert into t (id,a) values (748,50);
+insert into t (id,a) values (748,51);
+insert into t (id,a) values (748,52);
+insert into t (id,a) values (748,53);
+insert into t (id,a) values (748,54);
+insert into t (id,a) values (748,55);
+insert into t (id,a) values (748,56);
+insert into t (id,a) values (748,57);
+insert into t (id,a) values (748,58);
+insert into t (id,a) values (748,59);
+insert into t (id,a) values (748,60);
+insert into t (id,a) values (748,61);
+insert into t (id,a) values (748,62);
+insert into t (id,a) values (748,63);
+insert into t (id,a) values (748,64);
+insert into t (id,a) values (748,65);
+insert into t (id,a) values (748,66);
+insert into t (id,a) values (748,67);
+insert into t (id,a) values (748,68);
+insert into t (id,a) values (748,69);
+insert into t (id,a) values (748,70);
+insert into t (id,a) values (748,71);
+insert into t (id,a) values (748,72);
+insert into t (id,a) values (748,73);
+insert into t (id,a) values (748,74);
+insert into t (id,a) values (748,75);
+insert into t (id,a) values (748,76);
+insert into t (id,a) values (748,77);
+insert into t (id,a) values (748,78);
+insert into t (id,a) values (748,79);
+insert into t (id,a) values (748,80);
+insert into t (id,a) values (748,81);
+insert into t (id,a) values (748,82);
+insert into t (id,a) values (748,83);
+insert into t (id,a) values (748,84);
+insert into t (id,a) values (748,85);
+insert into t (id,a) values (748,86);
+insert into t (id,a) values (748,87);
+insert into t (id,a) values (748,88);
+insert into t (id,a) values (748,89);
+insert into t (id,a) values (748,90);
+insert into t (id,a) values (748,91);
+insert into t (id,a) values (748,92);
+insert into t (id,a) values (748,93);
+insert into t (id,a) values (748,94);
+insert into t (id,a) values (748,95);
+insert into t (id,a) values (748,96);
+insert into t (id,a) values (748,97);
+insert into t (id,a) values (748,98);
+insert into t (id,a) values (748,99);
+insert into t (id,a) values (749,0);
+insert into t (id,a) values (749,1);
+insert into t (id,a) values (749,2);
+insert into t (id,a) values (749,3);
+insert into t (id,a) values (749,4);
+insert into t (id,a) values (749,5);
+insert into t (id,a) values (749,6);
+insert into t (id,a) values (749,7);
+insert into t (id,a) values (749,8);
+insert into t (id,a) values (749,9);
+insert into t (id,a) values (749,10);
+insert into t (id,a) values (749,11);
+insert into t (id,a) values (749,12);
+insert into t (id,a) values (749,13);
+insert into t (id,a) values (749,14);
+insert into t (id,a) values (749,15);
+insert into t (id,a) values (749,16);
+insert into t (id,a) values (749,17);
+insert into t (id,a) values (749,18);
+insert into t (id,a) values (749,19);
+insert into t (id,a) values (749,20);
+insert into t (id,a) values (749,21);
+insert into t (id,a) values (749,22);
+insert into t (id,a) values (749,23);
+insert into t (id,a) values (749,24);
+insert into t (id,a) values (749,25);
+insert into t (id,a) values (749,26);
+insert into t (id,a) values (749,27);
+insert into t (id,a) values (749,28);
+insert into t (id,a) values (749,29);
+insert into t (id,a) values (749,30);
+insert into t (id,a) values (749,31);
+insert into t (id,a) values (749,32);
+insert into t (id,a) values (749,33);
+insert into t (id,a) values (749,34);
+insert into t (id,a) values (749,35);
+insert into t (id,a) values (749,36);
+insert into t (id,a) values (749,37);
+insert into t (id,a) values (749,38);
+insert into t (id,a) values (749,39);
+insert into t (id,a) values (749,40);
+insert into t (id,a) values (749,41);
+insert into t (id,a) values (749,42);
+insert into t (id,a) values (749,43);
+insert into t (id,a) values (749,44);
+insert into t (id,a) values (749,45);
+insert into t (id,a) values (749,46);
+insert into t (id,a) values (749,47);
+insert into t (id,a) values (749,48);
+insert into t (id,a) values (749,49);
+insert into t (id,a) values (749,50);
+insert into t (id,a) values (749,51);
+insert into t (id,a) values (749,52);
+insert into t (id,a) values (749,53);
+insert into t (id,a) values (749,54);
+insert into t (id,a) values (749,55);
+insert into t (id,a) values (749,56);
+insert into t (id,a) values (749,57);
+insert into t (id,a) values (749,58);
+insert into t (id,a) values (749,59);
+insert into t (id,a) values (749,60);
+insert into t (id,a) values (749,61);
+insert into t (id,a) values (749,62);
+insert into t (id,a) values (749,63);
+insert into t (id,a) values (749,64);
+insert into t (id,a) values (749,65);
+insert into t (id,a) values (749,66);
+insert into t (id,a) values (749,67);
+insert into t (id,a) values (749,68);
+insert into t (id,a) values (749,69);
+insert into t (id,a) values (749,70);
+insert into t (id,a) values (749,71);
+insert into t (id,a) values (749,72);
+insert into t (id,a) values (749,73);
+insert into t (id,a) values (749,74);
+insert into t (id,a) values (749,75);
+insert into t (id,a) values (749,76);
+insert into t (id,a) values (749,77);
+insert into t (id,a) values (749,78);
+insert into t (id,a) values (749,79);
+insert into t (id,a) values (749,80);
+insert into t (id,a) values (749,81);
+insert into t (id,a) values (749,82);
+insert into t (id,a) values (749,83);
+insert into t (id,a) values (749,84);
+insert into t (id,a) values (749,85);
+insert into t (id,a) values (749,86);
+insert into t (id,a) values (749,87);
+insert into t (id,a) values (749,88);
+insert into t (id,a) values (749,89);
+insert into t (id,a) values (749,90);
+insert into t (id,a) values (749,91);
+insert into t (id,a) values (749,92);
+insert into t (id,a) values (749,93);
+insert into t (id,a) values (749,94);
+insert into t (id,a) values (749,95);
+insert into t (id,a) values (749,96);
+insert into t (id,a) values (749,97);
+insert into t (id,a) values (749,98);
+insert into t (id,a) values (749,99);
+insert into t (id,a) values (750,0);
+insert into t (id,a) values (750,1);
+insert into t (id,a) values (750,2);
+insert into t (id,a) values (750,3);
+insert into t (id,a) values (750,4);
+insert into t (id,a) values (750,5);
+insert into t (id,a) values (750,6);
+insert into t (id,a) values (750,7);
+insert into t (id,a) values (750,8);
+insert into t (id,a) values (750,9);
+insert into t (id,a) values (750,10);
+insert into t (id,a) values (750,11);
+insert into t (id,a) values (750,12);
+insert into t (id,a) values (750,13);
+insert into t (id,a) values (750,14);
+insert into t (id,a) values (750,15);
+insert into t (id,a) values (750,16);
+insert into t (id,a) values (750,17);
+insert into t (id,a) values (750,18);
+insert into t (id,a) values (750,19);
+insert into t (id,a) values (750,20);
+insert into t (id,a) values (750,21);
+insert into t (id,a) values (750,22);
+insert into t (id,a) values (750,23);
+insert into t (id,a) values (750,24);
+insert into t (id,a) values (750,25);
+insert into t (id,a) values (750,26);
+insert into t (id,a) values (750,27);
+insert into t (id,a) values (750,28);
+insert into t (id,a) values (750,29);
+insert into t (id,a) values (750,30);
+insert into t (id,a) values (750,31);
+insert into t (id,a) values (750,32);
+insert into t (id,a) values (750,33);
+insert into t (id,a) values (750,34);
+insert into t (id,a) values (750,35);
+insert into t (id,a) values (750,36);
+insert into t (id,a) values (750,37);
+insert into t (id,a) values (750,38);
+insert into t (id,a) values (750,39);
+insert into t (id,a) values (750,40);
+insert into t (id,a) values (750,41);
+insert into t (id,a) values (750,42);
+insert into t (id,a) values (750,43);
+insert into t (id,a) values (750,44);
+insert into t (id,a) values (750,45);
+insert into t (id,a) values (750,46);
+insert into t (id,a) values (750,47);
+insert into t (id,a) values (750,48);
+insert into t (id,a) values (750,49);
+insert into t (id,a) values (750,50);
+insert into t (id,a) values (750,51);
+insert into t (id,a) values (750,52);
+insert into t (id,a) values (750,53);
+insert into t (id,a) values (750,54);
+insert into t (id,a) values (750,55);
+insert into t (id,a) values (750,56);
+insert into t (id,a) values (750,57);
+insert into t (id,a) values (750,58);
+insert into t (id,a) values (750,59);
+insert into t (id,a) values (750,60);
+insert into t (id,a) values (750,61);
+insert into t (id,a) values (750,62);
+insert into t (id,a) values (750,63);
+insert into t (id,a) values (750,64);
+insert into t (id,a) values (750,65);
+insert into t (id,a) values (750,66);
+insert into t (id,a) values (750,67);
+insert into t (id,a) values (750,68);
+insert into t (id,a) values (750,69);
+insert into t (id,a) values (750,70);
+insert into t (id,a) values (750,71);
+insert into t (id,a) values (750,72);
+insert into t (id,a) values (750,73);
+insert into t (id,a) values (750,74);
+insert into t (id,a) values (750,75);
+insert into t (id,a) values (750,76);
+insert into t (id,a) values (750,77);
+insert into t (id,a) values (750,78);
+insert into t (id,a) values (750,79);
+insert into t (id,a) values (750,80);
+insert into t (id,a) values (750,81);
+insert into t (id,a) values (750,82);
+insert into t (id,a) values (750,83);
+insert into t (id,a) values (750,84);
+insert into t (id,a) values (750,85);
+insert into t (id,a) values (750,86);
+insert into t (id,a) values (750,87);
+insert into t (id,a) values (750,88);
+insert into t (id,a) values (750,89);
+insert into t (id,a) values (750,90);
+insert into t (id,a) values (750,91);
+insert into t (id,a) values (750,92);
+insert into t (id,a) values (750,93);
+insert into t (id,a) values (750,94);
+insert into t (id,a) values (750,95);
+insert into t (id,a) values (750,96);
+insert into t (id,a) values (750,97);
+insert into t (id,a) values (750,98);
+insert into t (id,a) values (750,99);
+insert into t (id,a) values (751,0);
+insert into t (id,a) values (751,1);
+insert into t (id,a) values (751,2);
+insert into t (id,a) values (751,3);
+insert into t (id,a) values (751,4);
+insert into t (id,a) values (751,5);
+insert into t (id,a) values (751,6);
+insert into t (id,a) values (751,7);
+insert into t (id,a) values (751,8);
+insert into t (id,a) values (751,9);
+insert into t (id,a) values (751,10);
+insert into t (id,a) values (751,11);
+insert into t (id,a) values (751,12);
+insert into t (id,a) values (751,13);
+insert into t (id,a) values (751,14);
+insert into t (id,a) values (751,15);
+insert into t (id,a) values (751,16);
+insert into t (id,a) values (751,17);
+insert into t (id,a) values (751,18);
+insert into t (id,a) values (751,19);
+insert into t (id,a) values (751,20);
+insert into t (id,a) values (751,21);
+insert into t (id,a) values (751,22);
+insert into t (id,a) values (751,23);
+insert into t (id,a) values (751,24);
+insert into t (id,a) values (751,25);
+insert into t (id,a) values (751,26);
+insert into t (id,a) values (751,27);
+insert into t (id,a) values (751,28);
+insert into t (id,a) values (751,29);
+insert into t (id,a) values (751,30);
+insert into t (id,a) values (751,31);
+insert into t (id,a) values (751,32);
+insert into t (id,a) values (751,33);
+insert into t (id,a) values (751,34);
+insert into t (id,a) values (751,35);
+insert into t (id,a) values (751,36);
+insert into t (id,a) values (751,37);
+insert into t (id,a) values (751,38);
+insert into t (id,a) values (751,39);
+insert into t (id,a) values (751,40);
+insert into t (id,a) values (751,41);
+insert into t (id,a) values (751,42);
+insert into t (id,a) values (751,43);
+insert into t (id,a) values (751,44);
+insert into t (id,a) values (751,45);
+insert into t (id,a) values (751,46);
+insert into t (id,a) values (751,47);
+insert into t (id,a) values (751,48);
+insert into t (id,a) values (751,49);
+insert into t (id,a) values (751,50);
+insert into t (id,a) values (751,51);
+insert into t (id,a) values (751,52);
+insert into t (id,a) values (751,53);
+insert into t (id,a) values (751,54);
+insert into t (id,a) values (751,55);
+insert into t (id,a) values (751,56);
+insert into t (id,a) values (751,57);
+insert into t (id,a) values (751,58);
+insert into t (id,a) values (751,59);
+insert into t (id,a) values (751,60);
+insert into t (id,a) values (751,61);
+insert into t (id,a) values (751,62);
+insert into t (id,a) values (751,63);
+insert into t (id,a) values (751,64);
+insert into t (id,a) values (751,65);
+insert into t (id,a) values (751,66);
+insert into t (id,a) values (751,67);
+insert into t (id,a) values (751,68);
+insert into t (id,a) values (751,69);
+insert into t (id,a) values (751,70);
+insert into t (id,a) values (751,71);
+insert into t (id,a) values (751,72);
+insert into t (id,a) values (751,73);
+insert into t (id,a) values (751,74);
+insert into t (id,a) values (751,75);
+insert into t (id,a) values (751,76);
+insert into t (id,a) values (751,77);
+insert into t (id,a) values (751,78);
+insert into t (id,a) values (751,79);
+insert into t (id,a) values (751,80);
+insert into t (id,a) values (751,81);
+insert into t (id,a) values (751,82);
+insert into t (id,a) values (751,83);
+insert into t (id,a) values (751,84);
+insert into t (id,a) values (751,85);
+insert into t (id,a) values (751,86);
+insert into t (id,a) values (751,87);
+insert into t (id,a) values (751,88);
+insert into t (id,a) values (751,89);
+insert into t (id,a) values (751,90);
+insert into t (id,a) values (751,91);
+insert into t (id,a) values (751,92);
+insert into t (id,a) values (751,93);
+insert into t (id,a) values (751,94);
+insert into t (id,a) values (751,95);
+insert into t (id,a) values (751,96);
+insert into t (id,a) values (751,97);
+insert into t (id,a) values (751,98);
+insert into t (id,a) values (751,99);
+insert into t (id,a) values (752,0);
+insert into t (id,a) values (752,1);
+insert into t (id,a) values (752,2);
+insert into t (id,a) values (752,3);
+insert into t (id,a) values (752,4);
+insert into t (id,a) values (752,5);
+insert into t (id,a) values (752,6);
+insert into t (id,a) values (752,7);
+insert into t (id,a) values (752,8);
+insert into t (id,a) values (752,9);
+insert into t (id,a) values (752,10);
+insert into t (id,a) values (752,11);
+insert into t (id,a) values (752,12);
+insert into t (id,a) values (752,13);
+insert into t (id,a) values (752,14);
+insert into t (id,a) values (752,15);
+insert into t (id,a) values (752,16);
+insert into t (id,a) values (752,17);
+insert into t (id,a) values (752,18);
+insert into t (id,a) values (752,19);
+insert into t (id,a) values (752,20);
+insert into t (id,a) values (752,21);
+insert into t (id,a) values (752,22);
+insert into t (id,a) values (752,23);
+insert into t (id,a) values (752,24);
+insert into t (id,a) values (752,25);
+insert into t (id,a) values (752,26);
+insert into t (id,a) values (752,27);
+insert into t (id,a) values (752,28);
+insert into t (id,a) values (752,29);
+insert into t (id,a) values (752,30);
+insert into t (id,a) values (752,31);
+insert into t (id,a) values (752,32);
+insert into t (id,a) values (752,33);
+insert into t (id,a) values (752,34);
+insert into t (id,a) values (752,35);
+insert into t (id,a) values (752,36);
+insert into t (id,a) values (752,37);
+insert into t (id,a) values (752,38);
+insert into t (id,a) values (752,39);
+insert into t (id,a) values (752,40);
+insert into t (id,a) values (752,41);
+insert into t (id,a) values (752,42);
+insert into t (id,a) values (752,43);
+insert into t (id,a) values (752,44);
+insert into t (id,a) values (752,45);
+insert into t (id,a) values (752,46);
+insert into t (id,a) values (752,47);
+insert into t (id,a) values (752,48);
+insert into t (id,a) values (752,49);
+insert into t (id,a) values (752,50);
+insert into t (id,a) values (752,51);
+insert into t (id,a) values (752,52);
+insert into t (id,a) values (752,53);
+insert into t (id,a) values (752,54);
+insert into t (id,a) values (752,55);
+insert into t (id,a) values (752,56);
+insert into t (id,a) values (752,57);
+insert into t (id,a) values (752,58);
+insert into t (id,a) values (752,59);
+insert into t (id,a) values (752,60);
+insert into t (id,a) values (752,61);
+insert into t (id,a) values (752,62);
+insert into t (id,a) values (752,63);
+insert into t (id,a) values (752,64);
+insert into t (id,a) values (752,65);
+insert into t (id,a) values (752,66);
+insert into t (id,a) values (752,67);
+insert into t (id,a) values (752,68);
+insert into t (id,a) values (752,69);
+insert into t (id,a) values (752,70);
+insert into t (id,a) values (752,71);
+insert into t (id,a) values (752,72);
+insert into t (id,a) values (752,73);
+insert into t (id,a) values (752,74);
+insert into t (id,a) values (752,75);
+insert into t (id,a) values (752,76);
+insert into t (id,a) values (752,77);
+insert into t (id,a) values (752,78);
+insert into t (id,a) values (752,79);
+insert into t (id,a) values (752,80);
+insert into t (id,a) values (752,81);
+insert into t (id,a) values (752,82);
+insert into t (id,a) values (752,83);
+insert into t (id,a) values (752,84);
+insert into t (id,a) values (752,85);
+insert into t (id,a) values (752,86);
+insert into t (id,a) values (752,87);
+insert into t (id,a) values (752,88);
+insert into t (id,a) values (752,89);
+insert into t (id,a) values (752,90);
+insert into t (id,a) values (752,91);
+insert into t (id,a) values (752,92);
+insert into t (id,a) values (752,93);
+insert into t (id,a) values (752,94);
+insert into t (id,a) values (752,95);
+insert into t (id,a) values (752,96);
+insert into t (id,a) values (752,97);
+insert into t (id,a) values (752,98);
+insert into t (id,a) values (752,99);
+insert into t (id,a) values (753,0);
+insert into t (id,a) values (753,1);
+insert into t (id,a) values (753,2);
+insert into t (id,a) values (753,3);
+insert into t (id,a) values (753,4);
+insert into t (id,a) values (753,5);
+insert into t (id,a) values (753,6);
+insert into t (id,a) values (753,7);
+insert into t (id,a) values (753,8);
+insert into t (id,a) values (753,9);
+insert into t (id,a) values (753,10);
+insert into t (id,a) values (753,11);
+insert into t (id,a) values (753,12);
+insert into t (id,a) values (753,13);
+insert into t (id,a) values (753,14);
+insert into t (id,a) values (753,15);
+insert into t (id,a) values (753,16);
+insert into t (id,a) values (753,17);
+insert into t (id,a) values (753,18);
+insert into t (id,a) values (753,19);
+insert into t (id,a) values (753,20);
+insert into t (id,a) values (753,21);
+insert into t (id,a) values (753,22);
+insert into t (id,a) values (753,23);
+insert into t (id,a) values (753,24);
+insert into t (id,a) values (753,25);
+insert into t (id,a) values (753,26);
+insert into t (id,a) values (753,27);
+insert into t (id,a) values (753,28);
+insert into t (id,a) values (753,29);
+insert into t (id,a) values (753,30);
+insert into t (id,a) values (753,31);
+insert into t (id,a) values (753,32);
+insert into t (id,a) values (753,33);
+insert into t (id,a) values (753,34);
+insert into t (id,a) values (753,35);
+insert into t (id,a) values (753,36);
+insert into t (id,a) values (753,37);
+insert into t (id,a) values (753,38);
+insert into t (id,a) values (753,39);
+insert into t (id,a) values (753,40);
+insert into t (id,a) values (753,41);
+insert into t (id,a) values (753,42);
+insert into t (id,a) values (753,43);
+insert into t (id,a) values (753,44);
+insert into t (id,a) values (753,45);
+insert into t (id,a) values (753,46);
+insert into t (id,a) values (753,47);
+insert into t (id,a) values (753,48);
+insert into t (id,a) values (753,49);
+insert into t (id,a) values (753,50);
+insert into t (id,a) values (753,51);
+insert into t (id,a) values (753,52);
+insert into t (id,a) values (753,53);
+insert into t (id,a) values (753,54);
+insert into t (id,a) values (753,55);
+insert into t (id,a) values (753,56);
+insert into t (id,a) values (753,57);
+insert into t (id,a) values (753,58);
+insert into t (id,a) values (753,59);
+insert into t (id,a) values (753,60);
+insert into t (id,a) values (753,61);
+insert into t (id,a) values (753,62);
+insert into t (id,a) values (753,63);
+insert into t (id,a) values (753,64);
+insert into t (id,a) values (753,65);
+insert into t (id,a) values (753,66);
+insert into t (id,a) values (753,67);
+insert into t (id,a) values (753,68);
+insert into t (id,a) values (753,69);
+insert into t (id,a) values (753,70);
+insert into t (id,a) values (753,71);
+insert into t (id,a) values (753,72);
+insert into t (id,a) values (753,73);
+insert into t (id,a) values (753,74);
+insert into t (id,a) values (753,75);
+insert into t (id,a) values (753,76);
+insert into t (id,a) values (753,77);
+insert into t (id,a) values (753,78);
+insert into t (id,a) values (753,79);
+insert into t (id,a) values (753,80);
+insert into t (id,a) values (753,81);
+insert into t (id,a) values (753,82);
+insert into t (id,a) values (753,83);
+insert into t (id,a) values (753,84);
+insert into t (id,a) values (753,85);
+insert into t (id,a) values (753,86);
+insert into t (id,a) values (753,87);
+insert into t (id,a) values (753,88);
+insert into t (id,a) values (753,89);
+insert into t (id,a) values (753,90);
+insert into t (id,a) values (753,91);
+insert into t (id,a) values (753,92);
+insert into t (id,a) values (753,93);
+insert into t (id,a) values (753,94);
+insert into t (id,a) values (753,95);
+insert into t (id,a) values (753,96);
+insert into t (id,a) values (753,97);
+insert into t (id,a) values (753,98);
+insert into t (id,a) values (753,99);
+insert into t (id,a) values (754,0);
+insert into t (id,a) values (754,1);
+insert into t (id,a) values (754,2);
+insert into t (id,a) values (754,3);
+insert into t (id,a) values (754,4);
+insert into t (id,a) values (754,5);
+insert into t (id,a) values (754,6);
+insert into t (id,a) values (754,7);
+insert into t (id,a) values (754,8);
+insert into t (id,a) values (754,9);
+insert into t (id,a) values (754,10);
+insert into t (id,a) values (754,11);
+insert into t (id,a) values (754,12);
+insert into t (id,a) values (754,13);
+insert into t (id,a) values (754,14);
+insert into t (id,a) values (754,15);
+insert into t (id,a) values (754,16);
+insert into t (id,a) values (754,17);
+insert into t (id,a) values (754,18);
+insert into t (id,a) values (754,19);
+insert into t (id,a) values (754,20);
+insert into t (id,a) values (754,21);
+insert into t (id,a) values (754,22);
+insert into t (id,a) values (754,23);
+insert into t (id,a) values (754,24);
+insert into t (id,a) values (754,25);
+insert into t (id,a) values (754,26);
+insert into t (id,a) values (754,27);
+insert into t (id,a) values (754,28);
+insert into t (id,a) values (754,29);
+insert into t (id,a) values (754,30);
+insert into t (id,a) values (754,31);
+insert into t (id,a) values (754,32);
+insert into t (id,a) values (754,33);
+insert into t (id,a) values (754,34);
+insert into t (id,a) values (754,35);
+insert into t (id,a) values (754,36);
+insert into t (id,a) values (754,37);
+insert into t (id,a) values (754,38);
+insert into t (id,a) values (754,39);
+insert into t (id,a) values (754,40);
+insert into t (id,a) values (754,41);
+insert into t (id,a) values (754,42);
+insert into t (id,a) values (754,43);
+insert into t (id,a) values (754,44);
+insert into t (id,a) values (754,45);
+insert into t (id,a) values (754,46);
+insert into t (id,a) values (754,47);
+insert into t (id,a) values (754,48);
+insert into t (id,a) values (754,49);
+insert into t (id,a) values (754,50);
+insert into t (id,a) values (754,51);
+insert into t (id,a) values (754,52);
+insert into t (id,a) values (754,53);
+insert into t (id,a) values (754,54);
+insert into t (id,a) values (754,55);
+insert into t (id,a) values (754,56);
+insert into t (id,a) values (754,57);
+insert into t (id,a) values (754,58);
+insert into t (id,a) values (754,59);
+insert into t (id,a) values (754,60);
+insert into t (id,a) values (754,61);
+insert into t (id,a) values (754,62);
+insert into t (id,a) values (754,63);
+insert into t (id,a) values (754,64);
+insert into t (id,a) values (754,65);
+insert into t (id,a) values (754,66);
+insert into t (id,a) values (754,67);
+insert into t (id,a) values (754,68);
+insert into t (id,a) values (754,69);
+insert into t (id,a) values (754,70);
+insert into t (id,a) values (754,71);
+insert into t (id,a) values (754,72);
+insert into t (id,a) values (754,73);
+insert into t (id,a) values (754,74);
+insert into t (id,a) values (754,75);
+insert into t (id,a) values (754,76);
+insert into t (id,a) values (754,77);
+insert into t (id,a) values (754,78);
+insert into t (id,a) values (754,79);
+insert into t (id,a) values (754,80);
+insert into t (id,a) values (754,81);
+insert into t (id,a) values (754,82);
+insert into t (id,a) values (754,83);
+insert into t (id,a) values (754,84);
+insert into t (id,a) values (754,85);
+insert into t (id,a) values (754,86);
+insert into t (id,a) values (754,87);
+insert into t (id,a) values (754,88);
+insert into t (id,a) values (754,89);
+insert into t (id,a) values (754,90);
+insert into t (id,a) values (754,91);
+insert into t (id,a) values (754,92);
+insert into t (id,a) values (754,93);
+insert into t (id,a) values (754,94);
+insert into t (id,a) values (754,95);
+insert into t (id,a) values (754,96);
+insert into t (id,a) values (754,97);
+insert into t (id,a) values (754,98);
+insert into t (id,a) values (754,99);
+insert into t (id,a) values (755,0);
+insert into t (id,a) values (755,1);
+insert into t (id,a) values (755,2);
+insert into t (id,a) values (755,3);
+insert into t (id,a) values (755,4);
+insert into t (id,a) values (755,5);
+insert into t (id,a) values (755,6);
+insert into t (id,a) values (755,7);
+insert into t (id,a) values (755,8);
+insert into t (id,a) values (755,9);
+insert into t (id,a) values (755,10);
+insert into t (id,a) values (755,11);
+insert into t (id,a) values (755,12);
+insert into t (id,a) values (755,13);
+insert into t (id,a) values (755,14);
+insert into t (id,a) values (755,15);
+insert into t (id,a) values (755,16);
+insert into t (id,a) values (755,17);
+insert into t (id,a) values (755,18);
+insert into t (id,a) values (755,19);
+insert into t (id,a) values (755,20);
+insert into t (id,a) values (755,21);
+insert into t (id,a) values (755,22);
+insert into t (id,a) values (755,23);
+insert into t (id,a) values (755,24);
+insert into t (id,a) values (755,25);
+insert into t (id,a) values (755,26);
+insert into t (id,a) values (755,27);
+insert into t (id,a) values (755,28);
+insert into t (id,a) values (755,29);
+insert into t (id,a) values (755,30);
+insert into t (id,a) values (755,31);
+insert into t (id,a) values (755,32);
+insert into t (id,a) values (755,33);
+insert into t (id,a) values (755,34);
+insert into t (id,a) values (755,35);
+insert into t (id,a) values (755,36);
+insert into t (id,a) values (755,37);
+insert into t (id,a) values (755,38);
+insert into t (id,a) values (755,39);
+insert into t (id,a) values (755,40);
+insert into t (id,a) values (755,41);
+insert into t (id,a) values (755,42);
+insert into t (id,a) values (755,43);
+insert into t (id,a) values (755,44);
+insert into t (id,a) values (755,45);
+insert into t (id,a) values (755,46);
+insert into t (id,a) values (755,47);
+insert into t (id,a) values (755,48);
+insert into t (id,a) values (755,49);
+insert into t (id,a) values (755,50);
+insert into t (id,a) values (755,51);
+insert into t (id,a) values (755,52);
+insert into t (id,a) values (755,53);
+insert into t (id,a) values (755,54);
+insert into t (id,a) values (755,55);
+insert into t (id,a) values (755,56);
+insert into t (id,a) values (755,57);
+insert into t (id,a) values (755,58);
+insert into t (id,a) values (755,59);
+insert into t (id,a) values (755,60);
+insert into t (id,a) values (755,61);
+insert into t (id,a) values (755,62);
+insert into t (id,a) values (755,63);
+insert into t (id,a) values (755,64);
+insert into t (id,a) values (755,65);
+insert into t (id,a) values (755,66);
+insert into t (id,a) values (755,67);
+insert into t (id,a) values (755,68);
+insert into t (id,a) values (755,69);
+insert into t (id,a) values (755,70);
+insert into t (id,a) values (755,71);
+insert into t (id,a) values (755,72);
+insert into t (id,a) values (755,73);
+insert into t (id,a) values (755,74);
+insert into t (id,a) values (755,75);
+insert into t (id,a) values (755,76);
+insert into t (id,a) values (755,77);
+insert into t (id,a) values (755,78);
+insert into t (id,a) values (755,79);
+insert into t (id,a) values (755,80);
+insert into t (id,a) values (755,81);
+insert into t (id,a) values (755,82);
+insert into t (id,a) values (755,83);
+insert into t (id,a) values (755,84);
+insert into t (id,a) values (755,85);
+insert into t (id,a) values (755,86);
+insert into t (id,a) values (755,87);
+insert into t (id,a) values (755,88);
+insert into t (id,a) values (755,89);
+insert into t (id,a) values (755,90);
+insert into t (id,a) values (755,91);
+insert into t (id,a) values (755,92);
+insert into t (id,a) values (755,93);
+insert into t (id,a) values (755,94);
+insert into t (id,a) values (755,95);
+insert into t (id,a) values (755,96);
+insert into t (id,a) values (755,97);
+insert into t (id,a) values (755,98);
+insert into t (id,a) values (755,99);
+insert into t (id,a) values (756,0);
+insert into t (id,a) values (756,1);
+insert into t (id,a) values (756,2);
+insert into t (id,a) values (756,3);
+insert into t (id,a) values (756,4);
+insert into t (id,a) values (756,5);
+insert into t (id,a) values (756,6);
+insert into t (id,a) values (756,7);
+insert into t (id,a) values (756,8);
+insert into t (id,a) values (756,9);
+insert into t (id,a) values (756,10);
+insert into t (id,a) values (756,11);
+insert into t (id,a) values (756,12);
+insert into t (id,a) values (756,13);
+insert into t (id,a) values (756,14);
+insert into t (id,a) values (756,15);
+insert into t (id,a) values (756,16);
+insert into t (id,a) values (756,17);
+insert into t (id,a) values (756,18);
+insert into t (id,a) values (756,19);
+insert into t (id,a) values (756,20);
+insert into t (id,a) values (756,21);
+insert into t (id,a) values (756,22);
+insert into t (id,a) values (756,23);
+insert into t (id,a) values (756,24);
+insert into t (id,a) values (756,25);
+insert into t (id,a) values (756,26);
+insert into t (id,a) values (756,27);
+insert into t (id,a) values (756,28);
+insert into t (id,a) values (756,29);
+insert into t (id,a) values (756,30);
+insert into t (id,a) values (756,31);
+insert into t (id,a) values (756,32);
+insert into t (id,a) values (756,33);
+insert into t (id,a) values (756,34);
+insert into t (id,a) values (756,35);
+insert into t (id,a) values (756,36);
+insert into t (id,a) values (756,37);
+insert into t (id,a) values (756,38);
+insert into t (id,a) values (756,39);
+insert into t (id,a) values (756,40);
+insert into t (id,a) values (756,41);
+insert into t (id,a) values (756,42);
+insert into t (id,a) values (756,43);
+insert into t (id,a) values (756,44);
+insert into t (id,a) values (756,45);
+insert into t (id,a) values (756,46);
+insert into t (id,a) values (756,47);
+insert into t (id,a) values (756,48);
+insert into t (id,a) values (756,49);
+insert into t (id,a) values (756,50);
+insert into t (id,a) values (756,51);
+insert into t (id,a) values (756,52);
+insert into t (id,a) values (756,53);
+insert into t (id,a) values (756,54);
+insert into t (id,a) values (756,55);
+insert into t (id,a) values (756,56);
+insert into t (id,a) values (756,57);
+insert into t (id,a) values (756,58);
+insert into t (id,a) values (756,59);
+insert into t (id,a) values (756,60);
+insert into t (id,a) values (756,61);
+insert into t (id,a) values (756,62);
+insert into t (id,a) values (756,63);
+insert into t (id,a) values (756,64);
+insert into t (id,a) values (756,65);
+insert into t (id,a) values (756,66);
+insert into t (id,a) values (756,67);
+insert into t (id,a) values (756,68);
+insert into t (id,a) values (756,69);
+insert into t (id,a) values (756,70);
+insert into t (id,a) values (756,71);
+insert into t (id,a) values (756,72);
+insert into t (id,a) values (756,73);
+insert into t (id,a) values (756,74);
+insert into t (id,a) values (756,75);
+insert into t (id,a) values (756,76);
+insert into t (id,a) values (756,77);
+insert into t (id,a) values (756,78);
+insert into t (id,a) values (756,79);
+insert into t (id,a) values (756,80);
+insert into t (id,a) values (756,81);
+insert into t (id,a) values (756,82);
+insert into t (id,a) values (756,83);
+insert into t (id,a) values (756,84);
+insert into t (id,a) values (756,85);
+insert into t (id,a) values (756,86);
+insert into t (id,a) values (756,87);
+insert into t (id,a) values (756,88);
+insert into t (id,a) values (756,89);
+insert into t (id,a) values (756,90);
+insert into t (id,a) values (756,91);
+insert into t (id,a) values (756,92);
+insert into t (id,a) values (756,93);
+insert into t (id,a) values (756,94);
+insert into t (id,a) values (756,95);
+insert into t (id,a) values (756,96);
+insert into t (id,a) values (756,97);
+insert into t (id,a) values (756,98);
+insert into t (id,a) values (756,99);
+insert into t (id,a) values (757,0);
+insert into t (id,a) values (757,1);
+insert into t (id,a) values (757,2);
+insert into t (id,a) values (757,3);
+insert into t (id,a) values (757,4);
+insert into t (id,a) values (757,5);
+insert into t (id,a) values (757,6);
+insert into t (id,a) values (757,7);
+insert into t (id,a) values (757,8);
+insert into t (id,a) values (757,9);
+insert into t (id,a) values (757,10);
+insert into t (id,a) values (757,11);
+insert into t (id,a) values (757,12);
+insert into t (id,a) values (757,13);
+insert into t (id,a) values (757,14);
+insert into t (id,a) values (757,15);
+insert into t (id,a) values (757,16);
+insert into t (id,a) values (757,17);
+insert into t (id,a) values (757,18);
+insert into t (id,a) values (757,19);
+insert into t (id,a) values (757,20);
+insert into t (id,a) values (757,21);
+insert into t (id,a) values (757,22);
+insert into t (id,a) values (757,23);
+insert into t (id,a) values (757,24);
+insert into t (id,a) values (757,25);
+insert into t (id,a) values (757,26);
+insert into t (id,a) values (757,27);
+insert into t (id,a) values (757,28);
+insert into t (id,a) values (757,29);
+insert into t (id,a) values (757,30);
+insert into t (id,a) values (757,31);
+insert into t (id,a) values (757,32);
+insert into t (id,a) values (757,33);
+insert into t (id,a) values (757,34);
+insert into t (id,a) values (757,35);
+insert into t (id,a) values (757,36);
+insert into t (id,a) values (757,37);
+insert into t (id,a) values (757,38);
+insert into t (id,a) values (757,39);
+insert into t (id,a) values (757,40);
+insert into t (id,a) values (757,41);
+insert into t (id,a) values (757,42);
+insert into t (id,a) values (757,43);
+insert into t (id,a) values (757,44);
+insert into t (id,a) values (757,45);
+insert into t (id,a) values (757,46);
+insert into t (id,a) values (757,47);
+insert into t (id,a) values (757,48);
+insert into t (id,a) values (757,49);
+insert into t (id,a) values (757,50);
+insert into t (id,a) values (757,51);
+insert into t (id,a) values (757,52);
+insert into t (id,a) values (757,53);
+insert into t (id,a) values (757,54);
+insert into t (id,a) values (757,55);
+insert into t (id,a) values (757,56);
+insert into t (id,a) values (757,57);
+insert into t (id,a) values (757,58);
+insert into t (id,a) values (757,59);
+insert into t (id,a) values (757,60);
+insert into t (id,a) values (757,61);
+insert into t (id,a) values (757,62);
+insert into t (id,a) values (757,63);
+insert into t (id,a) values (757,64);
+insert into t (id,a) values (757,65);
+insert into t (id,a) values (757,66);
+insert into t (id,a) values (757,67);
+insert into t (id,a) values (757,68);
+insert into t (id,a) values (757,69);
+insert into t (id,a) values (757,70);
+insert into t (id,a) values (757,71);
+insert into t (id,a) values (757,72);
+insert into t (id,a) values (757,73);
+insert into t (id,a) values (757,74);
+insert into t (id,a) values (757,75);
+insert into t (id,a) values (757,76);
+insert into t (id,a) values (757,77);
+insert into t (id,a) values (757,78);
+insert into t (id,a) values (757,79);
+insert into t (id,a) values (757,80);
+insert into t (id,a) values (757,81);
+insert into t (id,a) values (757,82);
+insert into t (id,a) values (757,83);
+insert into t (id,a) values (757,84);
+insert into t (id,a) values (757,85);
+insert into t (id,a) values (757,86);
+insert into t (id,a) values (757,87);
+insert into t (id,a) values (757,88);
+insert into t (id,a) values (757,89);
+insert into t (id,a) values (757,90);
+insert into t (id,a) values (757,91);
+insert into t (id,a) values (757,92);
+insert into t (id,a) values (757,93);
+insert into t (id,a) values (757,94);
+insert into t (id,a) values (757,95);
+insert into t (id,a) values (757,96);
+insert into t (id,a) values (757,97);
+insert into t (id,a) values (757,98);
+insert into t (id,a) values (757,99);
+insert into t (id,a) values (758,0);
+insert into t (id,a) values (758,1);
+insert into t (id,a) values (758,2);
+insert into t (id,a) values (758,3);
+insert into t (id,a) values (758,4);
+insert into t (id,a) values (758,5);
+insert into t (id,a) values (758,6);
+insert into t (id,a) values (758,7);
+insert into t (id,a) values (758,8);
+insert into t (id,a) values (758,9);
+insert into t (id,a) values (758,10);
+insert into t (id,a) values (758,11);
+insert into t (id,a) values (758,12);
+insert into t (id,a) values (758,13);
+insert into t (id,a) values (758,14);
+insert into t (id,a) values (758,15);
+insert into t (id,a) values (758,16);
+insert into t (id,a) values (758,17);
+insert into t (id,a) values (758,18);
+insert into t (id,a) values (758,19);
+insert into t (id,a) values (758,20);
+insert into t (id,a) values (758,21);
+insert into t (id,a) values (758,22);
+insert into t (id,a) values (758,23);
+insert into t (id,a) values (758,24);
+insert into t (id,a) values (758,25);
+insert into t (id,a) values (758,26);
+insert into t (id,a) values (758,27);
+insert into t (id,a) values (758,28);
+insert into t (id,a) values (758,29);
+insert into t (id,a) values (758,30);
+insert into t (id,a) values (758,31);
+insert into t (id,a) values (758,32);
+insert into t (id,a) values (758,33);
+insert into t (id,a) values (758,34);
+insert into t (id,a) values (758,35);
+insert into t (id,a) values (758,36);
+insert into t (id,a) values (758,37);
+insert into t (id,a) values (758,38);
+insert into t (id,a) values (758,39);
+insert into t (id,a) values (758,40);
+insert into t (id,a) values (758,41);
+insert into t (id,a) values (758,42);
+insert into t (id,a) values (758,43);
+insert into t (id,a) values (758,44);
+insert into t (id,a) values (758,45);
+insert into t (id,a) values (758,46);
+insert into t (id,a) values (758,47);
+insert into t (id,a) values (758,48);
+insert into t (id,a) values (758,49);
+insert into t (id,a) values (758,50);
+insert into t (id,a) values (758,51);
+insert into t (id,a) values (758,52);
+insert into t (id,a) values (758,53);
+insert into t (id,a) values (758,54);
+insert into t (id,a) values (758,55);
+insert into t (id,a) values (758,56);
+insert into t (id,a) values (758,57);
+insert into t (id,a) values (758,58);
+insert into t (id,a) values (758,59);
+insert into t (id,a) values (758,60);
+insert into t (id,a) values (758,61);
+insert into t (id,a) values (758,62);
+insert into t (id,a) values (758,63);
+insert into t (id,a) values (758,64);
+insert into t (id,a) values (758,65);
+insert into t (id,a) values (758,66);
+insert into t (id,a) values (758,67);
+insert into t (id,a) values (758,68);
+insert into t (id,a) values (758,69);
+insert into t (id,a) values (758,70);
+insert into t (id,a) values (758,71);
+insert into t (id,a) values (758,72);
+insert into t (id,a) values (758,73);
+insert into t (id,a) values (758,74);
+insert into t (id,a) values (758,75);
+insert into t (id,a) values (758,76);
+insert into t (id,a) values (758,77);
+insert into t (id,a) values (758,78);
+insert into t (id,a) values (758,79);
+insert into t (id,a) values (758,80);
+insert into t (id,a) values (758,81);
+insert into t (id,a) values (758,82);
+insert into t (id,a) values (758,83);
+insert into t (id,a) values (758,84);
+insert into t (id,a) values (758,85);
+insert into t (id,a) values (758,86);
+insert into t (id,a) values (758,87);
+insert into t (id,a) values (758,88);
+insert into t (id,a) values (758,89);
+insert into t (id,a) values (758,90);
+insert into t (id,a) values (758,91);
+insert into t (id,a) values (758,92);
+insert into t (id,a) values (758,93);
+insert into t (id,a) values (758,94);
+insert into t (id,a) values (758,95);
+insert into t (id,a) values (758,96);
+insert into t (id,a) values (758,97);
+insert into t (id,a) values (758,98);
+insert into t (id,a) values (758,99);
+insert into t (id,a) values (759,0);
+insert into t (id,a) values (759,1);
+insert into t (id,a) values (759,2);
+insert into t (id,a) values (759,3);
+insert into t (id,a) values (759,4);
+insert into t (id,a) values (759,5);
+insert into t (id,a) values (759,6);
+insert into t (id,a) values (759,7);
+insert into t (id,a) values (759,8);
+insert into t (id,a) values (759,9);
+insert into t (id,a) values (759,10);
+insert into t (id,a) values (759,11);
+insert into t (id,a) values (759,12);
+insert into t (id,a) values (759,13);
+insert into t (id,a) values (759,14);
+insert into t (id,a) values (759,15);
+insert into t (id,a) values (759,16);
+insert into t (id,a) values (759,17);
+insert into t (id,a) values (759,18);
+insert into t (id,a) values (759,19);
+insert into t (id,a) values (759,20);
+insert into t (id,a) values (759,21);
+insert into t (id,a) values (759,22);
+insert into t (id,a) values (759,23);
+insert into t (id,a) values (759,24);
+insert into t (id,a) values (759,25);
+insert into t (id,a) values (759,26);
+insert into t (id,a) values (759,27);
+insert into t (id,a) values (759,28);
+insert into t (id,a) values (759,29);
+insert into t (id,a) values (759,30);
+insert into t (id,a) values (759,31);
+insert into t (id,a) values (759,32);
+insert into t (id,a) values (759,33);
+insert into t (id,a) values (759,34);
+insert into t (id,a) values (759,35);
+insert into t (id,a) values (759,36);
+insert into t (id,a) values (759,37);
+insert into t (id,a) values (759,38);
+insert into t (id,a) values (759,39);
+insert into t (id,a) values (759,40);
+insert into t (id,a) values (759,41);
+insert into t (id,a) values (759,42);
+insert into t (id,a) values (759,43);
+insert into t (id,a) values (759,44);
+insert into t (id,a) values (759,45);
+insert into t (id,a) values (759,46);
+insert into t (id,a) values (759,47);
+insert into t (id,a) values (759,48);
+insert into t (id,a) values (759,49);
+insert into t (id,a) values (759,50);
+insert into t (id,a) values (759,51);
+insert into t (id,a) values (759,52);
+insert into t (id,a) values (759,53);
+insert into t (id,a) values (759,54);
+insert into t (id,a) values (759,55);
+insert into t (id,a) values (759,56);
+insert into t (id,a) values (759,57);
+insert into t (id,a) values (759,58);
+insert into t (id,a) values (759,59);
+insert into t (id,a) values (759,60);
+insert into t (id,a) values (759,61);
+insert into t (id,a) values (759,62);
+insert into t (id,a) values (759,63);
+insert into t (id,a) values (759,64);
+insert into t (id,a) values (759,65);
+insert into t (id,a) values (759,66);
+insert into t (id,a) values (759,67);
+insert into t (id,a) values (759,68);
+insert into t (id,a) values (759,69);
+insert into t (id,a) values (759,70);
+insert into t (id,a) values (759,71);
+insert into t (id,a) values (759,72);
+insert into t (id,a) values (759,73);
+insert into t (id,a) values (759,74);
+insert into t (id,a) values (759,75);
+insert into t (id,a) values (759,76);
+insert into t (id,a) values (759,77);
+insert into t (id,a) values (759,78);
+insert into t (id,a) values (759,79);
+insert into t (id,a) values (759,80);
+insert into t (id,a) values (759,81);
+insert into t (id,a) values (759,82);
+insert into t (id,a) values (759,83);
+insert into t (id,a) values (759,84);
+insert into t (id,a) values (759,85);
+insert into t (id,a) values (759,86);
+insert into t (id,a) values (759,87);
+insert into t (id,a) values (759,88);
+insert into t (id,a) values (759,89);
+insert into t (id,a) values (759,90);
+insert into t (id,a) values (759,91);
+insert into t (id,a) values (759,92);
+insert into t (id,a) values (759,93);
+insert into t (id,a) values (759,94);
+insert into t (id,a) values (759,95);
+insert into t (id,a) values (759,96);
+insert into t (id,a) values (759,97);
+insert into t (id,a) values (759,98);
+insert into t (id,a) values (759,99);
+insert into t (id,a) values (760,0);
+insert into t (id,a) values (760,1);
+insert into t (id,a) values (760,2);
+insert into t (id,a) values (760,3);
+insert into t (id,a) values (760,4);
+insert into t (id,a) values (760,5);
+insert into t (id,a) values (760,6);
+insert into t (id,a) values (760,7);
+insert into t (id,a) values (760,8);
+insert into t (id,a) values (760,9);
+insert into t (id,a) values (760,10);
+insert into t (id,a) values (760,11);
+insert into t (id,a) values (760,12);
+insert into t (id,a) values (760,13);
+insert into t (id,a) values (760,14);
+insert into t (id,a) values (760,15);
+insert into t (id,a) values (760,16);
+insert into t (id,a) values (760,17);
+insert into t (id,a) values (760,18);
+insert into t (id,a) values (760,19);
+insert into t (id,a) values (760,20);
+insert into t (id,a) values (760,21);
+insert into t (id,a) values (760,22);
+insert into t (id,a) values (760,23);
+insert into t (id,a) values (760,24);
+insert into t (id,a) values (760,25);
+insert into t (id,a) values (760,26);
+insert into t (id,a) values (760,27);
+insert into t (id,a) values (760,28);
+insert into t (id,a) values (760,29);
+insert into t (id,a) values (760,30);
+insert into t (id,a) values (760,31);
+insert into t (id,a) values (760,32);
+insert into t (id,a) values (760,33);
+insert into t (id,a) values (760,34);
+insert into t (id,a) values (760,35);
+insert into t (id,a) values (760,36);
+insert into t (id,a) values (760,37);
+insert into t (id,a) values (760,38);
+insert into t (id,a) values (760,39);
+insert into t (id,a) values (760,40);
+insert into t (id,a) values (760,41);
+insert into t (id,a) values (760,42);
+insert into t (id,a) values (760,43);
+insert into t (id,a) values (760,44);
+insert into t (id,a) values (760,45);
+insert into t (id,a) values (760,46);
+insert into t (id,a) values (760,47);
+insert into t (id,a) values (760,48);
+insert into t (id,a) values (760,49);
+insert into t (id,a) values (760,50);
+insert into t (id,a) values (760,51);
+insert into t (id,a) values (760,52);
+insert into t (id,a) values (760,53);
+insert into t (id,a) values (760,54);
+insert into t (id,a) values (760,55);
+insert into t (id,a) values (760,56);
+insert into t (id,a) values (760,57);
+insert into t (id,a) values (760,58);
+insert into t (id,a) values (760,59);
+insert into t (id,a) values (760,60);
+insert into t (id,a) values (760,61);
+insert into t (id,a) values (760,62);
+insert into t (id,a) values (760,63);
+insert into t (id,a) values (760,64);
+insert into t (id,a) values (760,65);
+insert into t (id,a) values (760,66);
+insert into t (id,a) values (760,67);
+insert into t (id,a) values (760,68);
+insert into t (id,a) values (760,69);
+insert into t (id,a) values (760,70);
+insert into t (id,a) values (760,71);
+insert into t (id,a) values (760,72);
+insert into t (id,a) values (760,73);
+insert into t (id,a) values (760,74);
+insert into t (id,a) values (760,75);
+insert into t (id,a) values (760,76);
+insert into t (id,a) values (760,77);
+insert into t (id,a) values (760,78);
+insert into t (id,a) values (760,79);
+insert into t (id,a) values (760,80);
+insert into t (id,a) values (760,81);
+insert into t (id,a) values (760,82);
+insert into t (id,a) values (760,83);
+insert into t (id,a) values (760,84);
+insert into t (id,a) values (760,85);
+insert into t (id,a) values (760,86);
+insert into t (id,a) values (760,87);
+insert into t (id,a) values (760,88);
+insert into t (id,a) values (760,89);
+insert into t (id,a) values (760,90);
+insert into t (id,a) values (760,91);
+insert into t (id,a) values (760,92);
+insert into t (id,a) values (760,93);
+insert into t (id,a) values (760,94);
+insert into t (id,a) values (760,95);
+insert into t (id,a) values (760,96);
+insert into t (id,a) values (760,97);
+insert into t (id,a) values (760,98);
+insert into t (id,a) values (760,99);
+insert into t (id,a) values (761,0);
+insert into t (id,a) values (761,1);
+insert into t (id,a) values (761,2);
+insert into t (id,a) values (761,3);
+insert into t (id,a) values (761,4);
+insert into t (id,a) values (761,5);
+insert into t (id,a) values (761,6);
+insert into t (id,a) values (761,7);
+insert into t (id,a) values (761,8);
+insert into t (id,a) values (761,9);
+insert into t (id,a) values (761,10);
+insert into t (id,a) values (761,11);
+insert into t (id,a) values (761,12);
+insert into t (id,a) values (761,13);
+insert into t (id,a) values (761,14);
+insert into t (id,a) values (761,15);
+insert into t (id,a) values (761,16);
+insert into t (id,a) values (761,17);
+insert into t (id,a) values (761,18);
+insert into t (id,a) values (761,19);
+insert into t (id,a) values (761,20);
+insert into t (id,a) values (761,21);
+insert into t (id,a) values (761,22);
+insert into t (id,a) values (761,23);
+insert into t (id,a) values (761,24);
+insert into t (id,a) values (761,25);
+insert into t (id,a) values (761,26);
+insert into t (id,a) values (761,27);
+insert into t (id,a) values (761,28);
+insert into t (id,a) values (761,29);
+insert into t (id,a) values (761,30);
+insert into t (id,a) values (761,31);
+insert into t (id,a) values (761,32);
+insert into t (id,a) values (761,33);
+insert into t (id,a) values (761,34);
+insert into t (id,a) values (761,35);
+insert into t (id,a) values (761,36);
+insert into t (id,a) values (761,37);
+insert into t (id,a) values (761,38);
+insert into t (id,a) values (761,39);
+insert into t (id,a) values (761,40);
+insert into t (id,a) values (761,41);
+insert into t (id,a) values (761,42);
+insert into t (id,a) values (761,43);
+insert into t (id,a) values (761,44);
+insert into t (id,a) values (761,45);
+insert into t (id,a) values (761,46);
+insert into t (id,a) values (761,47);
+insert into t (id,a) values (761,48);
+insert into t (id,a) values (761,49);
+insert into t (id,a) values (761,50);
+insert into t (id,a) values (761,51);
+insert into t (id,a) values (761,52);
+insert into t (id,a) values (761,53);
+insert into t (id,a) values (761,54);
+insert into t (id,a) values (761,55);
+insert into t (id,a) values (761,56);
+insert into t (id,a) values (761,57);
+insert into t (id,a) values (761,58);
+insert into t (id,a) values (761,59);
+insert into t (id,a) values (761,60);
+insert into t (id,a) values (761,61);
+insert into t (id,a) values (761,62);
+insert into t (id,a) values (761,63);
+insert into t (id,a) values (761,64);
+insert into t (id,a) values (761,65);
+insert into t (id,a) values (761,66);
+insert into t (id,a) values (761,67);
+insert into t (id,a) values (761,68);
+insert into t (id,a) values (761,69);
+insert into t (id,a) values (761,70);
+insert into t (id,a) values (761,71);
+insert into t (id,a) values (761,72);
+insert into t (id,a) values (761,73);
+insert into t (id,a) values (761,74);
+insert into t (id,a) values (761,75);
+insert into t (id,a) values (761,76);
+insert into t (id,a) values (761,77);
+insert into t (id,a) values (761,78);
+insert into t (id,a) values (761,79);
+insert into t (id,a) values (761,80);
+insert into t (id,a) values (761,81);
+insert into t (id,a) values (761,82);
+insert into t (id,a) values (761,83);
+insert into t (id,a) values (761,84);
+insert into t (id,a) values (761,85);
+insert into t (id,a) values (761,86);
+insert into t (id,a) values (761,87);
+insert into t (id,a) values (761,88);
+insert into t (id,a) values (761,89);
+insert into t (id,a) values (761,90);
+insert into t (id,a) values (761,91);
+insert into t (id,a) values (761,92);
+insert into t (id,a) values (761,93);
+insert into t (id,a) values (761,94);
+insert into t (id,a) values (761,95);
+insert into t (id,a) values (761,96);
+insert into t (id,a) values (761,97);
+insert into t (id,a) values (761,98);
+insert into t (id,a) values (761,99);
+insert into t (id,a) values (762,0);
+insert into t (id,a) values (762,1);
+insert into t (id,a) values (762,2);
+insert into t (id,a) values (762,3);
+insert into t (id,a) values (762,4);
+insert into t (id,a) values (762,5);
+insert into t (id,a) values (762,6);
+insert into t (id,a) values (762,7);
+insert into t (id,a) values (762,8);
+insert into t (id,a) values (762,9);
+insert into t (id,a) values (762,10);
+insert into t (id,a) values (762,11);
+insert into t (id,a) values (762,12);
+insert into t (id,a) values (762,13);
+insert into t (id,a) values (762,14);
+insert into t (id,a) values (762,15);
+insert into t (id,a) values (762,16);
+insert into t (id,a) values (762,17);
+insert into t (id,a) values (762,18);
+insert into t (id,a) values (762,19);
+insert into t (id,a) values (762,20);
+insert into t (id,a) values (762,21);
+insert into t (id,a) values (762,22);
+insert into t (id,a) values (762,23);
+insert into t (id,a) values (762,24);
+insert into t (id,a) values (762,25);
+insert into t (id,a) values (762,26);
+insert into t (id,a) values (762,27);
+insert into t (id,a) values (762,28);
+insert into t (id,a) values (762,29);
+insert into t (id,a) values (762,30);
+insert into t (id,a) values (762,31);
+insert into t (id,a) values (762,32);
+insert into t (id,a) values (762,33);
+insert into t (id,a) values (762,34);
+insert into t (id,a) values (762,35);
+insert into t (id,a) values (762,36);
+insert into t (id,a) values (762,37);
+insert into t (id,a) values (762,38);
+insert into t (id,a) values (762,39);
+insert into t (id,a) values (762,40);
+insert into t (id,a) values (762,41);
+insert into t (id,a) values (762,42);
+insert into t (id,a) values (762,43);
+insert into t (id,a) values (762,44);
+insert into t (id,a) values (762,45);
+insert into t (id,a) values (762,46);
+insert into t (id,a) values (762,47);
+insert into t (id,a) values (762,48);
+insert into t (id,a) values (762,49);
+insert into t (id,a) values (762,50);
+insert into t (id,a) values (762,51);
+insert into t (id,a) values (762,52);
+insert into t (id,a) values (762,53);
+insert into t (id,a) values (762,54);
+insert into t (id,a) values (762,55);
+insert into t (id,a) values (762,56);
+insert into t (id,a) values (762,57);
+insert into t (id,a) values (762,58);
+insert into t (id,a) values (762,59);
+insert into t (id,a) values (762,60);
+insert into t (id,a) values (762,61);
+insert into t (id,a) values (762,62);
+insert into t (id,a) values (762,63);
+insert into t (id,a) values (762,64);
+insert into t (id,a) values (762,65);
+insert into t (id,a) values (762,66);
+insert into t (id,a) values (762,67);
+insert into t (id,a) values (762,68);
+insert into t (id,a) values (762,69);
+insert into t (id,a) values (762,70);
+insert into t (id,a) values (762,71);
+insert into t (id,a) values (762,72);
+insert into t (id,a) values (762,73);
+insert into t (id,a) values (762,74);
+insert into t (id,a) values (762,75);
+insert into t (id,a) values (762,76);
+insert into t (id,a) values (762,77);
+insert into t (id,a) values (762,78);
+insert into t (id,a) values (762,79);
+insert into t (id,a) values (762,80);
+insert into t (id,a) values (762,81);
+insert into t (id,a) values (762,82);
+insert into t (id,a) values (762,83);
+insert into t (id,a) values (762,84);
+insert into t (id,a) values (762,85);
+insert into t (id,a) values (762,86);
+insert into t (id,a) values (762,87);
+insert into t (id,a) values (762,88);
+insert into t (id,a) values (762,89);
+insert into t (id,a) values (762,90);
+insert into t (id,a) values (762,91);
+insert into t (id,a) values (762,92);
+insert into t (id,a) values (762,93);
+insert into t (id,a) values (762,94);
+insert into t (id,a) values (762,95);
+insert into t (id,a) values (762,96);
+insert into t (id,a) values (762,97);
+insert into t (id,a) values (762,98);
+insert into t (id,a) values (762,99);
+insert into t (id,a) values (763,0);
+insert into t (id,a) values (763,1);
+insert into t (id,a) values (763,2);
+insert into t (id,a) values (763,3);
+insert into t (id,a) values (763,4);
+insert into t (id,a) values (763,5);
+insert into t (id,a) values (763,6);
+insert into t (id,a) values (763,7);
+insert into t (id,a) values (763,8);
+insert into t (id,a) values (763,9);
+insert into t (id,a) values (763,10);
+insert into t (id,a) values (763,11);
+insert into t (id,a) values (763,12);
+insert into t (id,a) values (763,13);
+insert into t (id,a) values (763,14);
+insert into t (id,a) values (763,15);
+insert into t (id,a) values (763,16);
+insert into t (id,a) values (763,17);
+insert into t (id,a) values (763,18);
+insert into t (id,a) values (763,19);
+insert into t (id,a) values (763,20);
+insert into t (id,a) values (763,21);
+insert into t (id,a) values (763,22);
+insert into t (id,a) values (763,23);
+insert into t (id,a) values (763,24);
+insert into t (id,a) values (763,25);
+insert into t (id,a) values (763,26);
+insert into t (id,a) values (763,27);
+insert into t (id,a) values (763,28);
+insert into t (id,a) values (763,29);
+insert into t (id,a) values (763,30);
+insert into t (id,a) values (763,31);
+insert into t (id,a) values (763,32);
+insert into t (id,a) values (763,33);
+insert into t (id,a) values (763,34);
+insert into t (id,a) values (763,35);
+insert into t (id,a) values (763,36);
+insert into t (id,a) values (763,37);
+insert into t (id,a) values (763,38);
+insert into t (id,a) values (763,39);
+insert into t (id,a) values (763,40);
+insert into t (id,a) values (763,41);
+insert into t (id,a) values (763,42);
+insert into t (id,a) values (763,43);
+insert into t (id,a) values (763,44);
+insert into t (id,a) values (763,45);
+insert into t (id,a) values (763,46);
+insert into t (id,a) values (763,47);
+insert into t (id,a) values (763,48);
+insert into t (id,a) values (763,49);
+insert into t (id,a) values (763,50);
+insert into t (id,a) values (763,51);
+insert into t (id,a) values (763,52);
+insert into t (id,a) values (763,53);
+insert into t (id,a) values (763,54);
+insert into t (id,a) values (763,55);
+insert into t (id,a) values (763,56);
+insert into t (id,a) values (763,57);
+insert into t (id,a) values (763,58);
+insert into t (id,a) values (763,59);
+insert into t (id,a) values (763,60);
+insert into t (id,a) values (763,61);
+insert into t (id,a) values (763,62);
+insert into t (id,a) values (763,63);
+insert into t (id,a) values (763,64);
+insert into t (id,a) values (763,65);
+insert into t (id,a) values (763,66);
+insert into t (id,a) values (763,67);
+insert into t (id,a) values (763,68);
+insert into t (id,a) values (763,69);
+insert into t (id,a) values (763,70);
+insert into t (id,a) values (763,71);
+insert into t (id,a) values (763,72);
+insert into t (id,a) values (763,73);
+insert into t (id,a) values (763,74);
+insert into t (id,a) values (763,75);
+insert into t (id,a) values (763,76);
+insert into t (id,a) values (763,77);
+insert into t (id,a) values (763,78);
+insert into t (id,a) values (763,79);
+insert into t (id,a) values (763,80);
+insert into t (id,a) values (763,81);
+insert into t (id,a) values (763,82);
+insert into t (id,a) values (763,83);
+insert into t (id,a) values (763,84);
+insert into t (id,a) values (763,85);
+insert into t (id,a) values (763,86);
+insert into t (id,a) values (763,87);
+insert into t (id,a) values (763,88);
+insert into t (id,a) values (763,89);
+insert into t (id,a) values (763,90);
+insert into t (id,a) values (763,91);
+insert into t (id,a) values (763,92);
+insert into t (id,a) values (763,93);
+insert into t (id,a) values (763,94);
+insert into t (id,a) values (763,95);
+insert into t (id,a) values (763,96);
+insert into t (id,a) values (763,97);
+insert into t (id,a) values (763,98);
+insert into t (id,a) values (763,99);
+insert into t (id,a) values (764,0);
+insert into t (id,a) values (764,1);
+insert into t (id,a) values (764,2);
+insert into t (id,a) values (764,3);
+insert into t (id,a) values (764,4);
+insert into t (id,a) values (764,5);
+insert into t (id,a) values (764,6);
+insert into t (id,a) values (764,7);
+insert into t (id,a) values (764,8);
+insert into t (id,a) values (764,9);
+insert into t (id,a) values (764,10);
+insert into t (id,a) values (764,11);
+insert into t (id,a) values (764,12);
+insert into t (id,a) values (764,13);
+insert into t (id,a) values (764,14);
+insert into t (id,a) values (764,15);
+insert into t (id,a) values (764,16);
+insert into t (id,a) values (764,17);
+insert into t (id,a) values (764,18);
+insert into t (id,a) values (764,19);
+insert into t (id,a) values (764,20);
+insert into t (id,a) values (764,21);
+insert into t (id,a) values (764,22);
+insert into t (id,a) values (764,23);
+insert into t (id,a) values (764,24);
+insert into t (id,a) values (764,25);
+insert into t (id,a) values (764,26);
+insert into t (id,a) values (764,27);
+insert into t (id,a) values (764,28);
+insert into t (id,a) values (764,29);
+insert into t (id,a) values (764,30);
+insert into t (id,a) values (764,31);
+insert into t (id,a) values (764,32);
+insert into t (id,a) values (764,33);
+insert into t (id,a) values (764,34);
+insert into t (id,a) values (764,35);
+insert into t (id,a) values (764,36);
+insert into t (id,a) values (764,37);
+insert into t (id,a) values (764,38);
+insert into t (id,a) values (764,39);
+insert into t (id,a) values (764,40);
+insert into t (id,a) values (764,41);
+insert into t (id,a) values (764,42);
+insert into t (id,a) values (764,43);
+insert into t (id,a) values (764,44);
+insert into t (id,a) values (764,45);
+insert into t (id,a) values (764,46);
+insert into t (id,a) values (764,47);
+insert into t (id,a) values (764,48);
+insert into t (id,a) values (764,49);
+insert into t (id,a) values (764,50);
+insert into t (id,a) values (764,51);
+insert into t (id,a) values (764,52);
+insert into t (id,a) values (764,53);
+insert into t (id,a) values (764,54);
+insert into t (id,a) values (764,55);
+insert into t (id,a) values (764,56);
+insert into t (id,a) values (764,57);
+insert into t (id,a) values (764,58);
+insert into t (id,a) values (764,59);
+insert into t (id,a) values (764,60);
+insert into t (id,a) values (764,61);
+insert into t (id,a) values (764,62);
+insert into t (id,a) values (764,63);
+insert into t (id,a) values (764,64);
+insert into t (id,a) values (764,65);
+insert into t (id,a) values (764,66);
+insert into t (id,a) values (764,67);
+insert into t (id,a) values (764,68);
+insert into t (id,a) values (764,69);
+insert into t (id,a) values (764,70);
+insert into t (id,a) values (764,71);
+insert into t (id,a) values (764,72);
+insert into t (id,a) values (764,73);
+insert into t (id,a) values (764,74);
+insert into t (id,a) values (764,75);
+insert into t (id,a) values (764,76);
+insert into t (id,a) values (764,77);
+insert into t (id,a) values (764,78);
+insert into t (id,a) values (764,79);
+insert into t (id,a) values (764,80);
+insert into t (id,a) values (764,81);
+insert into t (id,a) values (764,82);
+insert into t (id,a) values (764,83);
+insert into t (id,a) values (764,84);
+insert into t (id,a) values (764,85);
+insert into t (id,a) values (764,86);
+insert into t (id,a) values (764,87);
+insert into t (id,a) values (764,88);
+insert into t (id,a) values (764,89);
+insert into t (id,a) values (764,90);
+insert into t (id,a) values (764,91);
+insert into t (id,a) values (764,92);
+insert into t (id,a) values (764,93);
+insert into t (id,a) values (764,94);
+insert into t (id,a) values (764,95);
+insert into t (id,a) values (764,96);
+insert into t (id,a) values (764,97);
+insert into t (id,a) values (764,98);
+insert into t (id,a) values (764,99);
+insert into t (id,a) values (765,0);
+insert into t (id,a) values (765,1);
+insert into t (id,a) values (765,2);
+insert into t (id,a) values (765,3);
+insert into t (id,a) values (765,4);
+insert into t (id,a) values (765,5);
+insert into t (id,a) values (765,6);
+insert into t (id,a) values (765,7);
+insert into t (id,a) values (765,8);
+insert into t (id,a) values (765,9);
+insert into t (id,a) values (765,10);
+insert into t (id,a) values (765,11);
+insert into t (id,a) values (765,12);
+insert into t (id,a) values (765,13);
+insert into t (id,a) values (765,14);
+insert into t (id,a) values (765,15);
+insert into t (id,a) values (765,16);
+insert into t (id,a) values (765,17);
+insert into t (id,a) values (765,18);
+insert into t (id,a) values (765,19);
+insert into t (id,a) values (765,20);
+insert into t (id,a) values (765,21);
+insert into t (id,a) values (765,22);
+insert into t (id,a) values (765,23);
+insert into t (id,a) values (765,24);
+insert into t (id,a) values (765,25);
+insert into t (id,a) values (765,26);
+insert into t (id,a) values (765,27);
+insert into t (id,a) values (765,28);
+insert into t (id,a) values (765,29);
+insert into t (id,a) values (765,30);
+insert into t (id,a) values (765,31);
+insert into t (id,a) values (765,32);
+insert into t (id,a) values (765,33);
+insert into t (id,a) values (765,34);
+insert into t (id,a) values (765,35);
+insert into t (id,a) values (765,36);
+insert into t (id,a) values (765,37);
+insert into t (id,a) values (765,38);
+insert into t (id,a) values (765,39);
+insert into t (id,a) values (765,40);
+insert into t (id,a) values (765,41);
+insert into t (id,a) values (765,42);
+insert into t (id,a) values (765,43);
+insert into t (id,a) values (765,44);
+insert into t (id,a) values (765,45);
+insert into t (id,a) values (765,46);
+insert into t (id,a) values (765,47);
+insert into t (id,a) values (765,48);
+insert into t (id,a) values (765,49);
+insert into t (id,a) values (765,50);
+insert into t (id,a) values (765,51);
+insert into t (id,a) values (765,52);
+insert into t (id,a) values (765,53);
+insert into t (id,a) values (765,54);
+insert into t (id,a) values (765,55);
+insert into t (id,a) values (765,56);
+insert into t (id,a) values (765,57);
+insert into t (id,a) values (765,58);
+insert into t (id,a) values (765,59);
+insert into t (id,a) values (765,60);
+insert into t (id,a) values (765,61);
+insert into t (id,a) values (765,62);
+insert into t (id,a) values (765,63);
+insert into t (id,a) values (765,64);
+insert into t (id,a) values (765,65);
+insert into t (id,a) values (765,66);
+insert into t (id,a) values (765,67);
+insert into t (id,a) values (765,68);
+insert into t (id,a) values (765,69);
+insert into t (id,a) values (765,70);
+insert into t (id,a) values (765,71);
+insert into t (id,a) values (765,72);
+insert into t (id,a) values (765,73);
+insert into t (id,a) values (765,74);
+insert into t (id,a) values (765,75);
+insert into t (id,a) values (765,76);
+insert into t (id,a) values (765,77);
+insert into t (id,a) values (765,78);
+insert into t (id,a) values (765,79);
+insert into t (id,a) values (765,80);
+insert into t (id,a) values (765,81);
+insert into t (id,a) values (765,82);
+insert into t (id,a) values (765,83);
+insert into t (id,a) values (765,84);
+insert into t (id,a) values (765,85);
+insert into t (id,a) values (765,86);
+insert into t (id,a) values (765,87);
+insert into t (id,a) values (765,88);
+insert into t (id,a) values (765,89);
+insert into t (id,a) values (765,90);
+insert into t (id,a) values (765,91);
+insert into t (id,a) values (765,92);
+insert into t (id,a) values (765,93);
+insert into t (id,a) values (765,94);
+insert into t (id,a) values (765,95);
+insert into t (id,a) values (765,96);
+insert into t (id,a) values (765,97);
+insert into t (id,a) values (765,98);
+insert into t (id,a) values (765,99);
+insert into t (id,a) values (766,0);
+insert into t (id,a) values (766,1);
+insert into t (id,a) values (766,2);
+insert into t (id,a) values (766,3);
+insert into t (id,a) values (766,4);
+insert into t (id,a) values (766,5);
+insert into t (id,a) values (766,6);
+insert into t (id,a) values (766,7);
+insert into t (id,a) values (766,8);
+insert into t (id,a) values (766,9);
+insert into t (id,a) values (766,10);
+insert into t (id,a) values (766,11);
+insert into t (id,a) values (766,12);
+insert into t (id,a) values (766,13);
+insert into t (id,a) values (766,14);
+insert into t (id,a) values (766,15);
+insert into t (id,a) values (766,16);
+insert into t (id,a) values (766,17);
+insert into t (id,a) values (766,18);
+insert into t (id,a) values (766,19);
+insert into t (id,a) values (766,20);
+insert into t (id,a) values (766,21);
+insert into t (id,a) values (766,22);
+insert into t (id,a) values (766,23);
+insert into t (id,a) values (766,24);
+insert into t (id,a) values (766,25);
+insert into t (id,a) values (766,26);
+insert into t (id,a) values (766,27);
+insert into t (id,a) values (766,28);
+insert into t (id,a) values (766,29);
+insert into t (id,a) values (766,30);
+insert into t (id,a) values (766,31);
+insert into t (id,a) values (766,32);
+insert into t (id,a) values (766,33);
+insert into t (id,a) values (766,34);
+insert into t (id,a) values (766,35);
+insert into t (id,a) values (766,36);
+insert into t (id,a) values (766,37);
+insert into t (id,a) values (766,38);
+insert into t (id,a) values (766,39);
+insert into t (id,a) values (766,40);
+insert into t (id,a) values (766,41);
+insert into t (id,a) values (766,42);
+insert into t (id,a) values (766,43);
+insert into t (id,a) values (766,44);
+insert into t (id,a) values (766,45);
+insert into t (id,a) values (766,46);
+insert into t (id,a) values (766,47);
+insert into t (id,a) values (766,48);
+insert into t (id,a) values (766,49);
+insert into t (id,a) values (766,50);
+insert into t (id,a) values (766,51);
+insert into t (id,a) values (766,52);
+insert into t (id,a) values (766,53);
+insert into t (id,a) values (766,54);
+insert into t (id,a) values (766,55);
+insert into t (id,a) values (766,56);
+insert into t (id,a) values (766,57);
+insert into t (id,a) values (766,58);
+insert into t (id,a) values (766,59);
+insert into t (id,a) values (766,60);
+insert into t (id,a) values (766,61);
+insert into t (id,a) values (766,62);
+insert into t (id,a) values (766,63);
+insert into t (id,a) values (766,64);
+insert into t (id,a) values (766,65);
+insert into t (id,a) values (766,66);
+insert into t (id,a) values (766,67);
+insert into t (id,a) values (766,68);
+insert into t (id,a) values (766,69);
+insert into t (id,a) values (766,70);
+insert into t (id,a) values (766,71);
+insert into t (id,a) values (766,72);
+insert into t (id,a) values (766,73);
+insert into t (id,a) values (766,74);
+insert into t (id,a) values (766,75);
+insert into t (id,a) values (766,76);
+insert into t (id,a) values (766,77);
+insert into t (id,a) values (766,78);
+insert into t (id,a) values (766,79);
+insert into t (id,a) values (766,80);
+insert into t (id,a) values (766,81);
+insert into t (id,a) values (766,82);
+insert into t (id,a) values (766,83);
+insert into t (id,a) values (766,84);
+insert into t (id,a) values (766,85);
+insert into t (id,a) values (766,86);
+insert into t (id,a) values (766,87);
+insert into t (id,a) values (766,88);
+insert into t (id,a) values (766,89);
+insert into t (id,a) values (766,90);
+insert into t (id,a) values (766,91);
+insert into t (id,a) values (766,92);
+insert into t (id,a) values (766,93);
+insert into t (id,a) values (766,94);
+insert into t (id,a) values (766,95);
+insert into t (id,a) values (766,96);
+insert into t (id,a) values (766,97);
+insert into t (id,a) values (766,98);
+insert into t (id,a) values (766,99);
+insert into t (id,a) values (767,0);
+insert into t (id,a) values (767,1);
+insert into t (id,a) values (767,2);
+insert into t (id,a) values (767,3);
+insert into t (id,a) values (767,4);
+insert into t (id,a) values (767,5);
+insert into t (id,a) values (767,6);
+insert into t (id,a) values (767,7);
+insert into t (id,a) values (767,8);
+insert into t (id,a) values (767,9);
+insert into t (id,a) values (767,10);
+insert into t (id,a) values (767,11);
+insert into t (id,a) values (767,12);
+insert into t (id,a) values (767,13);
+insert into t (id,a) values (767,14);
+insert into t (id,a) values (767,15);
+insert into t (id,a) values (767,16);
+insert into t (id,a) values (767,17);
+insert into t (id,a) values (767,18);
+insert into t (id,a) values (767,19);
+insert into t (id,a) values (767,20);
+insert into t (id,a) values (767,21);
+insert into t (id,a) values (767,22);
+insert into t (id,a) values (767,23);
+insert into t (id,a) values (767,24);
+insert into t (id,a) values (767,25);
+insert into t (id,a) values (767,26);
+insert into t (id,a) values (767,27);
+insert into t (id,a) values (767,28);
+insert into t (id,a) values (767,29);
+insert into t (id,a) values (767,30);
+insert into t (id,a) values (767,31);
+insert into t (id,a) values (767,32);
+insert into t (id,a) values (767,33);
+insert into t (id,a) values (767,34);
+insert into t (id,a) values (767,35);
+insert into t (id,a) values (767,36);
+insert into t (id,a) values (767,37);
+insert into t (id,a) values (767,38);
+insert into t (id,a) values (767,39);
+insert into t (id,a) values (767,40);
+insert into t (id,a) values (767,41);
+insert into t (id,a) values (767,42);
+insert into t (id,a) values (767,43);
+insert into t (id,a) values (767,44);
+insert into t (id,a) values (767,45);
+insert into t (id,a) values (767,46);
+insert into t (id,a) values (767,47);
+insert into t (id,a) values (767,48);
+insert into t (id,a) values (767,49);
+insert into t (id,a) values (767,50);
+insert into t (id,a) values (767,51);
+insert into t (id,a) values (767,52);
+insert into t (id,a) values (767,53);
+insert into t (id,a) values (767,54);
+insert into t (id,a) values (767,55);
+insert into t (id,a) values (767,56);
+insert into t (id,a) values (767,57);
+insert into t (id,a) values (767,58);
+insert into t (id,a) values (767,59);
+insert into t (id,a) values (767,60);
+insert into t (id,a) values (767,61);
+insert into t (id,a) values (767,62);
+insert into t (id,a) values (767,63);
+insert into t (id,a) values (767,64);
+insert into t (id,a) values (767,65);
+insert into t (id,a) values (767,66);
+insert into t (id,a) values (767,67);
+insert into t (id,a) values (767,68);
+insert into t (id,a) values (767,69);
+insert into t (id,a) values (767,70);
+insert into t (id,a) values (767,71);
+insert into t (id,a) values (767,72);
+insert into t (id,a) values (767,73);
+insert into t (id,a) values (767,74);
+insert into t (id,a) values (767,75);
+insert into t (id,a) values (767,76);
+insert into t (id,a) values (767,77);
+insert into t (id,a) values (767,78);
+insert into t (id,a) values (767,79);
+insert into t (id,a) values (767,80);
+insert into t (id,a) values (767,81);
+insert into t (id,a) values (767,82);
+insert into t (id,a) values (767,83);
+insert into t (id,a) values (767,84);
+insert into t (id,a) values (767,85);
+insert into t (id,a) values (767,86);
+insert into t (id,a) values (767,87);
+insert into t (id,a) values (767,88);
+insert into t (id,a) values (767,89);
+insert into t (id,a) values (767,90);
+insert into t (id,a) values (767,91);
+insert into t (id,a) values (767,92);
+insert into t (id,a) values (767,93);
+insert into t (id,a) values (767,94);
+insert into t (id,a) values (767,95);
+insert into t (id,a) values (767,96);
+insert into t (id,a) values (767,97);
+insert into t (id,a) values (767,98);
+insert into t (id,a) values (767,99);
+insert into t (id,a) values (768,0);
+insert into t (id,a) values (768,1);
+insert into t (id,a) values (768,2);
+insert into t (id,a) values (768,3);
+insert into t (id,a) values (768,4);
+insert into t (id,a) values (768,5);
+insert into t (id,a) values (768,6);
+insert into t (id,a) values (768,7);
+insert into t (id,a) values (768,8);
+insert into t (id,a) values (768,9);
+insert into t (id,a) values (768,10);
+insert into t (id,a) values (768,11);
+insert into t (id,a) values (768,12);
+insert into t (id,a) values (768,13);
+insert into t (id,a) values (768,14);
+insert into t (id,a) values (768,15);
+insert into t (id,a) values (768,16);
+insert into t (id,a) values (768,17);
+insert into t (id,a) values (768,18);
+insert into t (id,a) values (768,19);
+insert into t (id,a) values (768,20);
+insert into t (id,a) values (768,21);
+insert into t (id,a) values (768,22);
+insert into t (id,a) values (768,23);
+insert into t (id,a) values (768,24);
+insert into t (id,a) values (768,25);
+insert into t (id,a) values (768,26);
+insert into t (id,a) values (768,27);
+insert into t (id,a) values (768,28);
+insert into t (id,a) values (768,29);
+insert into t (id,a) values (768,30);
+insert into t (id,a) values (768,31);
+insert into t (id,a) values (768,32);
+insert into t (id,a) values (768,33);
+insert into t (id,a) values (768,34);
+insert into t (id,a) values (768,35);
+insert into t (id,a) values (768,36);
+insert into t (id,a) values (768,37);
+insert into t (id,a) values (768,38);
+insert into t (id,a) values (768,39);
+insert into t (id,a) values (768,40);
+insert into t (id,a) values (768,41);
+insert into t (id,a) values (768,42);
+insert into t (id,a) values (768,43);
+insert into t (id,a) values (768,44);
+insert into t (id,a) values (768,45);
+insert into t (id,a) values (768,46);
+insert into t (id,a) values (768,47);
+insert into t (id,a) values (768,48);
+insert into t (id,a) values (768,49);
+insert into t (id,a) values (768,50);
+insert into t (id,a) values (768,51);
+insert into t (id,a) values (768,52);
+insert into t (id,a) values (768,53);
+insert into t (id,a) values (768,54);
+insert into t (id,a) values (768,55);
+insert into t (id,a) values (768,56);
+insert into t (id,a) values (768,57);
+insert into t (id,a) values (768,58);
+insert into t (id,a) values (768,59);
+insert into t (id,a) values (768,60);
+insert into t (id,a) values (768,61);
+insert into t (id,a) values (768,62);
+insert into t (id,a) values (768,63);
+insert into t (id,a) values (768,64);
+insert into t (id,a) values (768,65);
+insert into t (id,a) values (768,66);
+insert into t (id,a) values (768,67);
+insert into t (id,a) values (768,68);
+insert into t (id,a) values (768,69);
+insert into t (id,a) values (768,70);
+insert into t (id,a) values (768,71);
+insert into t (id,a) values (768,72);
+insert into t (id,a) values (768,73);
+insert into t (id,a) values (768,74);
+insert into t (id,a) values (768,75);
+insert into t (id,a) values (768,76);
+insert into t (id,a) values (768,77);
+insert into t (id,a) values (768,78);
+insert into t (id,a) values (768,79);
+insert into t (id,a) values (768,80);
+insert into t (id,a) values (768,81);
+insert into t (id,a) values (768,82);
+insert into t (id,a) values (768,83);
+insert into t (id,a) values (768,84);
+insert into t (id,a) values (768,85);
+insert into t (id,a) values (768,86);
+insert into t (id,a) values (768,87);
+insert into t (id,a) values (768,88);
+insert into t (id,a) values (768,89);
+insert into t (id,a) values (768,90);
+insert into t (id,a) values (768,91);
+insert into t (id,a) values (768,92);
+insert into t (id,a) values (768,93);
+insert into t (id,a) values (768,94);
+insert into t (id,a) values (768,95);
+insert into t (id,a) values (768,96);
+insert into t (id,a) values (768,97);
+insert into t (id,a) values (768,98);
+insert into t (id,a) values (768,99);
+insert into t (id,a) values (769,0);
+insert into t (id,a) values (769,1);
+insert into t (id,a) values (769,2);
+insert into t (id,a) values (769,3);
+insert into t (id,a) values (769,4);
+insert into t (id,a) values (769,5);
+insert into t (id,a) values (769,6);
+insert into t (id,a) values (769,7);
+insert into t (id,a) values (769,8);
+insert into t (id,a) values (769,9);
+insert into t (id,a) values (769,10);
+insert into t (id,a) values (769,11);
+insert into t (id,a) values (769,12);
+insert into t (id,a) values (769,13);
+insert into t (id,a) values (769,14);
+insert into t (id,a) values (769,15);
+insert into t (id,a) values (769,16);
+insert into t (id,a) values (769,17);
+insert into t (id,a) values (769,18);
+insert into t (id,a) values (769,19);
+insert into t (id,a) values (769,20);
+insert into t (id,a) values (769,21);
+insert into t (id,a) values (769,22);
+insert into t (id,a) values (769,23);
+insert into t (id,a) values (769,24);
+insert into t (id,a) values (769,25);
+insert into t (id,a) values (769,26);
+insert into t (id,a) values (769,27);
+insert into t (id,a) values (769,28);
+insert into t (id,a) values (769,29);
+insert into t (id,a) values (769,30);
+insert into t (id,a) values (769,31);
+insert into t (id,a) values (769,32);
+insert into t (id,a) values (769,33);
+insert into t (id,a) values (769,34);
+insert into t (id,a) values (769,35);
+insert into t (id,a) values (769,36);
+insert into t (id,a) values (769,37);
+insert into t (id,a) values (769,38);
+insert into t (id,a) values (769,39);
+insert into t (id,a) values (769,40);
+insert into t (id,a) values (769,41);
+insert into t (id,a) values (769,42);
+insert into t (id,a) values (769,43);
+insert into t (id,a) values (769,44);
+insert into t (id,a) values (769,45);
+insert into t (id,a) values (769,46);
+insert into t (id,a) values (769,47);
+insert into t (id,a) values (769,48);
+insert into t (id,a) values (769,49);
+insert into t (id,a) values (769,50);
+insert into t (id,a) values (769,51);
+insert into t (id,a) values (769,52);
+insert into t (id,a) values (769,53);
+insert into t (id,a) values (769,54);
+insert into t (id,a) values (769,55);
+insert into t (id,a) values (769,56);
+insert into t (id,a) values (769,57);
+insert into t (id,a) values (769,58);
+insert into t (id,a) values (769,59);
+insert into t (id,a) values (769,60);
+insert into t (id,a) values (769,61);
+insert into t (id,a) values (769,62);
+insert into t (id,a) values (769,63);
+insert into t (id,a) values (769,64);
+insert into t (id,a) values (769,65);
+insert into t (id,a) values (769,66);
+insert into t (id,a) values (769,67);
+insert into t (id,a) values (769,68);
+insert into t (id,a) values (769,69);
+insert into t (id,a) values (769,70);
+insert into t (id,a) values (769,71);
+insert into t (id,a) values (769,72);
+insert into t (id,a) values (769,73);
+insert into t (id,a) values (769,74);
+insert into t (id,a) values (769,75);
+insert into t (id,a) values (769,76);
+insert into t (id,a) values (769,77);
+insert into t (id,a) values (769,78);
+insert into t (id,a) values (769,79);
+insert into t (id,a) values (769,80);
+insert into t (id,a) values (769,81);
+insert into t (id,a) values (769,82);
+insert into t (id,a) values (769,83);
+insert into t (id,a) values (769,84);
+insert into t (id,a) values (769,85);
+insert into t (id,a) values (769,86);
+insert into t (id,a) values (769,87);
+insert into t (id,a) values (769,88);
+insert into t (id,a) values (769,89);
+insert into t (id,a) values (769,90);
+insert into t (id,a) values (769,91);
+insert into t (id,a) values (769,92);
+insert into t (id,a) values (769,93);
+insert into t (id,a) values (769,94);
+insert into t (id,a) values (769,95);
+insert into t (id,a) values (769,96);
+insert into t (id,a) values (769,97);
+insert into t (id,a) values (769,98);
+insert into t (id,a) values (769,99);
+insert into t (id,a) values (770,0);
+insert into t (id,a) values (770,1);
+insert into t (id,a) values (770,2);
+insert into t (id,a) values (770,3);
+insert into t (id,a) values (770,4);
+insert into t (id,a) values (770,5);
+insert into t (id,a) values (770,6);
+insert into t (id,a) values (770,7);
+insert into t (id,a) values (770,8);
+insert into t (id,a) values (770,9);
+insert into t (id,a) values (770,10);
+insert into t (id,a) values (770,11);
+insert into t (id,a) values (770,12);
+insert into t (id,a) values (770,13);
+insert into t (id,a) values (770,14);
+insert into t (id,a) values (770,15);
+insert into t (id,a) values (770,16);
+insert into t (id,a) values (770,17);
+insert into t (id,a) values (770,18);
+insert into t (id,a) values (770,19);
+insert into t (id,a) values (770,20);
+insert into t (id,a) values (770,21);
+insert into t (id,a) values (770,22);
+insert into t (id,a) values (770,23);
+insert into t (id,a) values (770,24);
+insert into t (id,a) values (770,25);
+insert into t (id,a) values (770,26);
+insert into t (id,a) values (770,27);
+insert into t (id,a) values (770,28);
+insert into t (id,a) values (770,29);
+insert into t (id,a) values (770,30);
+insert into t (id,a) values (770,31);
+insert into t (id,a) values (770,32);
+insert into t (id,a) values (770,33);
+insert into t (id,a) values (770,34);
+insert into t (id,a) values (770,35);
+insert into t (id,a) values (770,36);
+insert into t (id,a) values (770,37);
+insert into t (id,a) values (770,38);
+insert into t (id,a) values (770,39);
+insert into t (id,a) values (770,40);
+insert into t (id,a) values (770,41);
+insert into t (id,a) values (770,42);
+insert into t (id,a) values (770,43);
+insert into t (id,a) values (770,44);
+insert into t (id,a) values (770,45);
+insert into t (id,a) values (770,46);
+insert into t (id,a) values (770,47);
+insert into t (id,a) values (770,48);
+insert into t (id,a) values (770,49);
+insert into t (id,a) values (770,50);
+insert into t (id,a) values (770,51);
+insert into t (id,a) values (770,52);
+insert into t (id,a) values (770,53);
+insert into t (id,a) values (770,54);
+insert into t (id,a) values (770,55);
+insert into t (id,a) values (770,56);
+insert into t (id,a) values (770,57);
+insert into t (id,a) values (770,58);
+insert into t (id,a) values (770,59);
+insert into t (id,a) values (770,60);
+insert into t (id,a) values (770,61);
+insert into t (id,a) values (770,62);
+insert into t (id,a) values (770,63);
+insert into t (id,a) values (770,64);
+insert into t (id,a) values (770,65);
+insert into t (id,a) values (770,66);
+insert into t (id,a) values (770,67);
+insert into t (id,a) values (770,68);
+insert into t (id,a) values (770,69);
+insert into t (id,a) values (770,70);
+insert into t (id,a) values (770,71);
+insert into t (id,a) values (770,72);
+insert into t (id,a) values (770,73);
+insert into t (id,a) values (770,74);
+insert into t (id,a) values (770,75);
+insert into t (id,a) values (770,76);
+insert into t (id,a) values (770,77);
+insert into t (id,a) values (770,78);
+insert into t (id,a) values (770,79);
+insert into t (id,a) values (770,80);
+insert into t (id,a) values (770,81);
+insert into t (id,a) values (770,82);
+insert into t (id,a) values (770,83);
+insert into t (id,a) values (770,84);
+insert into t (id,a) values (770,85);
+insert into t (id,a) values (770,86);
+insert into t (id,a) values (770,87);
+insert into t (id,a) values (770,88);
+insert into t (id,a) values (770,89);
+insert into t (id,a) values (770,90);
+insert into t (id,a) values (770,91);
+insert into t (id,a) values (770,92);
+insert into t (id,a) values (770,93);
+insert into t (id,a) values (770,94);
+insert into t (id,a) values (770,95);
+insert into t (id,a) values (770,96);
+insert into t (id,a) values (770,97);
+insert into t (id,a) values (770,98);
+insert into t (id,a) values (770,99);
+insert into t (id,a) values (771,0);
+insert into t (id,a) values (771,1);
+insert into t (id,a) values (771,2);
+insert into t (id,a) values (771,3);
+insert into t (id,a) values (771,4);
+insert into t (id,a) values (771,5);
+insert into t (id,a) values (771,6);
+insert into t (id,a) values (771,7);
+insert into t (id,a) values (771,8);
+insert into t (id,a) values (771,9);
+insert into t (id,a) values (771,10);
+insert into t (id,a) values (771,11);
+insert into t (id,a) values (771,12);
+insert into t (id,a) values (771,13);
+insert into t (id,a) values (771,14);
+insert into t (id,a) values (771,15);
+insert into t (id,a) values (771,16);
+insert into t (id,a) values (771,17);
+insert into t (id,a) values (771,18);
+insert into t (id,a) values (771,19);
+insert into t (id,a) values (771,20);
+insert into t (id,a) values (771,21);
+insert into t (id,a) values (771,22);
+insert into t (id,a) values (771,23);
+insert into t (id,a) values (771,24);
+insert into t (id,a) values (771,25);
+insert into t (id,a) values (771,26);
+insert into t (id,a) values (771,27);
+insert into t (id,a) values (771,28);
+insert into t (id,a) values (771,29);
+insert into t (id,a) values (771,30);
+insert into t (id,a) values (771,31);
+insert into t (id,a) values (771,32);
+insert into t (id,a) values (771,33);
+insert into t (id,a) values (771,34);
+insert into t (id,a) values (771,35);
+insert into t (id,a) values (771,36);
+insert into t (id,a) values (771,37);
+insert into t (id,a) values (771,38);
+insert into t (id,a) values (771,39);
+insert into t (id,a) values (771,40);
+insert into t (id,a) values (771,41);
+insert into t (id,a) values (771,42);
+insert into t (id,a) values (771,43);
+insert into t (id,a) values (771,44);
+insert into t (id,a) values (771,45);
+insert into t (id,a) values (771,46);
+insert into t (id,a) values (771,47);
+insert into t (id,a) values (771,48);
+insert into t (id,a) values (771,49);
+insert into t (id,a) values (771,50);
+insert into t (id,a) values (771,51);
+insert into t (id,a) values (771,52);
+insert into t (id,a) values (771,53);
+insert into t (id,a) values (771,54);
+insert into t (id,a) values (771,55);
+insert into t (id,a) values (771,56);
+insert into t (id,a) values (771,57);
+insert into t (id,a) values (771,58);
+insert into t (id,a) values (771,59);
+insert into t (id,a) values (771,60);
+insert into t (id,a) values (771,61);
+insert into t (id,a) values (771,62);
+insert into t (id,a) values (771,63);
+insert into t (id,a) values (771,64);
+insert into t (id,a) values (771,65);
+insert into t (id,a) values (771,66);
+insert into t (id,a) values (771,67);
+insert into t (id,a) values (771,68);
+insert into t (id,a) values (771,69);
+insert into t (id,a) values (771,70);
+insert into t (id,a) values (771,71);
+insert into t (id,a) values (771,72);
+insert into t (id,a) values (771,73);
+insert into t (id,a) values (771,74);
+insert into t (id,a) values (771,75);
+insert into t (id,a) values (771,76);
+insert into t (id,a) values (771,77);
+insert into t (id,a) values (771,78);
+insert into t (id,a) values (771,79);
+insert into t (id,a) values (771,80);
+insert into t (id,a) values (771,81);
+insert into t (id,a) values (771,82);
+insert into t (id,a) values (771,83);
+insert into t (id,a) values (771,84);
+insert into t (id,a) values (771,85);
+insert into t (id,a) values (771,86);
+insert into t (id,a) values (771,87);
+insert into t (id,a) values (771,88);
+insert into t (id,a) values (771,89);
+insert into t (id,a) values (771,90);
+insert into t (id,a) values (771,91);
+insert into t (id,a) values (771,92);
+insert into t (id,a) values (771,93);
+insert into t (id,a) values (771,94);
+insert into t (id,a) values (771,95);
+insert into t (id,a) values (771,96);
+insert into t (id,a) values (771,97);
+insert into t (id,a) values (771,98);
+insert into t (id,a) values (771,99);
+insert into t (id,a) values (772,0);
+insert into t (id,a) values (772,1);
+insert into t (id,a) values (772,2);
+insert into t (id,a) values (772,3);
+insert into t (id,a) values (772,4);
+insert into t (id,a) values (772,5);
+insert into t (id,a) values (772,6);
+insert into t (id,a) values (772,7);
+insert into t (id,a) values (772,8);
+insert into t (id,a) values (772,9);
+insert into t (id,a) values (772,10);
+insert into t (id,a) values (772,11);
+insert into t (id,a) values (772,12);
+insert into t (id,a) values (772,13);
+insert into t (id,a) values (772,14);
+insert into t (id,a) values (772,15);
+insert into t (id,a) values (772,16);
+insert into t (id,a) values (772,17);
+insert into t (id,a) values (772,18);
+insert into t (id,a) values (772,19);
+insert into t (id,a) values (772,20);
+insert into t (id,a) values (772,21);
+insert into t (id,a) values (772,22);
+insert into t (id,a) values (772,23);
+insert into t (id,a) values (772,24);
+insert into t (id,a) values (772,25);
+insert into t (id,a) values (772,26);
+insert into t (id,a) values (772,27);
+insert into t (id,a) values (772,28);
+insert into t (id,a) values (772,29);
+insert into t (id,a) values (772,30);
+insert into t (id,a) values (772,31);
+insert into t (id,a) values (772,32);
+insert into t (id,a) values (772,33);
+insert into t (id,a) values (772,34);
+insert into t (id,a) values (772,35);
+insert into t (id,a) values (772,36);
+insert into t (id,a) values (772,37);
+insert into t (id,a) values (772,38);
+insert into t (id,a) values (772,39);
+insert into t (id,a) values (772,40);
+insert into t (id,a) values (772,41);
+insert into t (id,a) values (772,42);
+insert into t (id,a) values (772,43);
+insert into t (id,a) values (772,44);
+insert into t (id,a) values (772,45);
+insert into t (id,a) values (772,46);
+insert into t (id,a) values (772,47);
+insert into t (id,a) values (772,48);
+insert into t (id,a) values (772,49);
+insert into t (id,a) values (772,50);
+insert into t (id,a) values (772,51);
+insert into t (id,a) values (772,52);
+insert into t (id,a) values (772,53);
+insert into t (id,a) values (772,54);
+insert into t (id,a) values (772,55);
+insert into t (id,a) values (772,56);
+insert into t (id,a) values (772,57);
+insert into t (id,a) values (772,58);
+insert into t (id,a) values (772,59);
+insert into t (id,a) values (772,60);
+insert into t (id,a) values (772,61);
+insert into t (id,a) values (772,62);
+insert into t (id,a) values (772,63);
+insert into t (id,a) values (772,64);
+insert into t (id,a) values (772,65);
+insert into t (id,a) values (772,66);
+insert into t (id,a) values (772,67);
+insert into t (id,a) values (772,68);
+insert into t (id,a) values (772,69);
+insert into t (id,a) values (772,70);
+insert into t (id,a) values (772,71);
+insert into t (id,a) values (772,72);
+insert into t (id,a) values (772,73);
+insert into t (id,a) values (772,74);
+insert into t (id,a) values (772,75);
+insert into t (id,a) values (772,76);
+insert into t (id,a) values (772,77);
+insert into t (id,a) values (772,78);
+insert into t (id,a) values (772,79);
+insert into t (id,a) values (772,80);
+insert into t (id,a) values (772,81);
+insert into t (id,a) values (772,82);
+insert into t (id,a) values (772,83);
+insert into t (id,a) values (772,84);
+insert into t (id,a) values (772,85);
+insert into t (id,a) values (772,86);
+insert into t (id,a) values (772,87);
+insert into t (id,a) values (772,88);
+insert into t (id,a) values (772,89);
+insert into t (id,a) values (772,90);
+insert into t (id,a) values (772,91);
+insert into t (id,a) values (772,92);
+insert into t (id,a) values (772,93);
+insert into t (id,a) values (772,94);
+insert into t (id,a) values (772,95);
+insert into t (id,a) values (772,96);
+insert into t (id,a) values (772,97);
+insert into t (id,a) values (772,98);
+insert into t (id,a) values (772,99);
+insert into t (id,a) values (773,0);
+insert into t (id,a) values (773,1);
+insert into t (id,a) values (773,2);
+insert into t (id,a) values (773,3);
+insert into t (id,a) values (773,4);
+insert into t (id,a) values (773,5);
+insert into t (id,a) values (773,6);
+insert into t (id,a) values (773,7);
+insert into t (id,a) values (773,8);
+insert into t (id,a) values (773,9);
+insert into t (id,a) values (773,10);
+insert into t (id,a) values (773,11);
+insert into t (id,a) values (773,12);
+insert into t (id,a) values (773,13);
+insert into t (id,a) values (773,14);
+insert into t (id,a) values (773,15);
+insert into t (id,a) values (773,16);
+insert into t (id,a) values (773,17);
+insert into t (id,a) values (773,18);
+insert into t (id,a) values (773,19);
+insert into t (id,a) values (773,20);
+insert into t (id,a) values (773,21);
+insert into t (id,a) values (773,22);
+insert into t (id,a) values (773,23);
+insert into t (id,a) values (773,24);
+insert into t (id,a) values (773,25);
+insert into t (id,a) values (773,26);
+insert into t (id,a) values (773,27);
+insert into t (id,a) values (773,28);
+insert into t (id,a) values (773,29);
+insert into t (id,a) values (773,30);
+insert into t (id,a) values (773,31);
+insert into t (id,a) values (773,32);
+insert into t (id,a) values (773,33);
+insert into t (id,a) values (773,34);
+insert into t (id,a) values (773,35);
+insert into t (id,a) values (773,36);
+insert into t (id,a) values (773,37);
+insert into t (id,a) values (773,38);
+insert into t (id,a) values (773,39);
+insert into t (id,a) values (773,40);
+insert into t (id,a) values (773,41);
+insert into t (id,a) values (773,42);
+insert into t (id,a) values (773,43);
+insert into t (id,a) values (773,44);
+insert into t (id,a) values (773,45);
+insert into t (id,a) values (773,46);
+insert into t (id,a) values (773,47);
+insert into t (id,a) values (773,48);
+insert into t (id,a) values (773,49);
+insert into t (id,a) values (773,50);
+insert into t (id,a) values (773,51);
+insert into t (id,a) values (773,52);
+insert into t (id,a) values (773,53);
+insert into t (id,a) values (773,54);
+insert into t (id,a) values (773,55);
+insert into t (id,a) values (773,56);
+insert into t (id,a) values (773,57);
+insert into t (id,a) values (773,58);
+insert into t (id,a) values (773,59);
+insert into t (id,a) values (773,60);
+insert into t (id,a) values (773,61);
+insert into t (id,a) values (773,62);
+insert into t (id,a) values (773,63);
+insert into t (id,a) values (773,64);
+insert into t (id,a) values (773,65);
+insert into t (id,a) values (773,66);
+insert into t (id,a) values (773,67);
+insert into t (id,a) values (773,68);
+insert into t (id,a) values (773,69);
+insert into t (id,a) values (773,70);
+insert into t (id,a) values (773,71);
+insert into t (id,a) values (773,72);
+insert into t (id,a) values (773,73);
+insert into t (id,a) values (773,74);
+insert into t (id,a) values (773,75);
+insert into t (id,a) values (773,76);
+insert into t (id,a) values (773,77);
+insert into t (id,a) values (773,78);
+insert into t (id,a) values (773,79);
+insert into t (id,a) values (773,80);
+insert into t (id,a) values (773,81);
+insert into t (id,a) values (773,82);
+insert into t (id,a) values (773,83);
+insert into t (id,a) values (773,84);
+insert into t (id,a) values (773,85);
+insert into t (id,a) values (773,86);
+insert into t (id,a) values (773,87);
+insert into t (id,a) values (773,88);
+insert into t (id,a) values (773,89);
+insert into t (id,a) values (773,90);
+insert into t (id,a) values (773,91);
+insert into t (id,a) values (773,92);
+insert into t (id,a) values (773,93);
+insert into t (id,a) values (773,94);
+insert into t (id,a) values (773,95);
+insert into t (id,a) values (773,96);
+insert into t (id,a) values (773,97);
+insert into t (id,a) values (773,98);
+insert into t (id,a) values (773,99);
+insert into t (id,a) values (774,0);
+insert into t (id,a) values (774,1);
+insert into t (id,a) values (774,2);
+insert into t (id,a) values (774,3);
+insert into t (id,a) values (774,4);
+insert into t (id,a) values (774,5);
+insert into t (id,a) values (774,6);
+insert into t (id,a) values (774,7);
+insert into t (id,a) values (774,8);
+insert into t (id,a) values (774,9);
+insert into t (id,a) values (774,10);
+insert into t (id,a) values (774,11);
+insert into t (id,a) values (774,12);
+insert into t (id,a) values (774,13);
+insert into t (id,a) values (774,14);
+insert into t (id,a) values (774,15);
+insert into t (id,a) values (774,16);
+insert into t (id,a) values (774,17);
+insert into t (id,a) values (774,18);
+insert into t (id,a) values (774,19);
+insert into t (id,a) values (774,20);
+insert into t (id,a) values (774,21);
+insert into t (id,a) values (774,22);
+insert into t (id,a) values (774,23);
+insert into t (id,a) values (774,24);
+insert into t (id,a) values (774,25);
+insert into t (id,a) values (774,26);
+insert into t (id,a) values (774,27);
+insert into t (id,a) values (774,28);
+insert into t (id,a) values (774,29);
+insert into t (id,a) values (774,30);
+insert into t (id,a) values (774,31);
+insert into t (id,a) values (774,32);
+insert into t (id,a) values (774,33);
+insert into t (id,a) values (774,34);
+insert into t (id,a) values (774,35);
+insert into t (id,a) values (774,36);
+insert into t (id,a) values (774,37);
+insert into t (id,a) values (774,38);
+insert into t (id,a) values (774,39);
+insert into t (id,a) values (774,40);
+insert into t (id,a) values (774,41);
+insert into t (id,a) values (774,42);
+insert into t (id,a) values (774,43);
+insert into t (id,a) values (774,44);
+insert into t (id,a) values (774,45);
+insert into t (id,a) values (774,46);
+insert into t (id,a) values (774,47);
+insert into t (id,a) values (774,48);
+insert into t (id,a) values (774,49);
+insert into t (id,a) values (774,50);
+insert into t (id,a) values (774,51);
+insert into t (id,a) values (774,52);
+insert into t (id,a) values (774,53);
+insert into t (id,a) values (774,54);
+insert into t (id,a) values (774,55);
+insert into t (id,a) values (774,56);
+insert into t (id,a) values (774,57);
+insert into t (id,a) values (774,58);
+insert into t (id,a) values (774,59);
+insert into t (id,a) values (774,60);
+insert into t (id,a) values (774,61);
+insert into t (id,a) values (774,62);
+insert into t (id,a) values (774,63);
+insert into t (id,a) values (774,64);
+insert into t (id,a) values (774,65);
+insert into t (id,a) values (774,66);
+insert into t (id,a) values (774,67);
+insert into t (id,a) values (774,68);
+insert into t (id,a) values (774,69);
+insert into t (id,a) values (774,70);
+insert into t (id,a) values (774,71);
+insert into t (id,a) values (774,72);
+insert into t (id,a) values (774,73);
+insert into t (id,a) values (774,74);
+insert into t (id,a) values (774,75);
+insert into t (id,a) values (774,76);
+insert into t (id,a) values (774,77);
+insert into t (id,a) values (774,78);
+insert into t (id,a) values (774,79);
+insert into t (id,a) values (774,80);
+insert into t (id,a) values (774,81);
+insert into t (id,a) values (774,82);
+insert into t (id,a) values (774,83);
+insert into t (id,a) values (774,84);
+insert into t (id,a) values (774,85);
+insert into t (id,a) values (774,86);
+insert into t (id,a) values (774,87);
+insert into t (id,a) values (774,88);
+insert into t (id,a) values (774,89);
+insert into t (id,a) values (774,90);
+insert into t (id,a) values (774,91);
+insert into t (id,a) values (774,92);
+insert into t (id,a) values (774,93);
+insert into t (id,a) values (774,94);
+insert into t (id,a) values (774,95);
+insert into t (id,a) values (774,96);
+insert into t (id,a) values (774,97);
+insert into t (id,a) values (774,98);
+insert into t (id,a) values (774,99);
+insert into t (id,a) values (775,0);
+insert into t (id,a) values (775,1);
+insert into t (id,a) values (775,2);
+insert into t (id,a) values (775,3);
+insert into t (id,a) values (775,4);
+insert into t (id,a) values (775,5);
+insert into t (id,a) values (775,6);
+insert into t (id,a) values (775,7);
+insert into t (id,a) values (775,8);
+insert into t (id,a) values (775,9);
+insert into t (id,a) values (775,10);
+insert into t (id,a) values (775,11);
+insert into t (id,a) values (775,12);
+insert into t (id,a) values (775,13);
+insert into t (id,a) values (775,14);
+insert into t (id,a) values (775,15);
+insert into t (id,a) values (775,16);
+insert into t (id,a) values (775,17);
+insert into t (id,a) values (775,18);
+insert into t (id,a) values (775,19);
+insert into t (id,a) values (775,20);
+insert into t (id,a) values (775,21);
+insert into t (id,a) values (775,22);
+insert into t (id,a) values (775,23);
+insert into t (id,a) values (775,24);
+insert into t (id,a) values (775,25);
+insert into t (id,a) values (775,26);
+insert into t (id,a) values (775,27);
+insert into t (id,a) values (775,28);
+insert into t (id,a) values (775,29);
+insert into t (id,a) values (775,30);
+insert into t (id,a) values (775,31);
+insert into t (id,a) values (775,32);
+insert into t (id,a) values (775,33);
+insert into t (id,a) values (775,34);
+insert into t (id,a) values (775,35);
+insert into t (id,a) values (775,36);
+insert into t (id,a) values (775,37);
+insert into t (id,a) values (775,38);
+insert into t (id,a) values (775,39);
+insert into t (id,a) values (775,40);
+insert into t (id,a) values (775,41);
+insert into t (id,a) values (775,42);
+insert into t (id,a) values (775,43);
+insert into t (id,a) values (775,44);
+insert into t (id,a) values (775,45);
+insert into t (id,a) values (775,46);
+insert into t (id,a) values (775,47);
+insert into t (id,a) values (775,48);
+insert into t (id,a) values (775,49);
+insert into t (id,a) values (775,50);
+insert into t (id,a) values (775,51);
+insert into t (id,a) values (775,52);
+insert into t (id,a) values (775,53);
+insert into t (id,a) values (775,54);
+insert into t (id,a) values (775,55);
+insert into t (id,a) values (775,56);
+insert into t (id,a) values (775,57);
+insert into t (id,a) values (775,58);
+insert into t (id,a) values (775,59);
+insert into t (id,a) values (775,60);
+insert into t (id,a) values (775,61);
+insert into t (id,a) values (775,62);
+insert into t (id,a) values (775,63);
+insert into t (id,a) values (775,64);
+insert into t (id,a) values (775,65);
+insert into t (id,a) values (775,66);
+insert into t (id,a) values (775,67);
+insert into t (id,a) values (775,68);
+insert into t (id,a) values (775,69);
+insert into t (id,a) values (775,70);
+insert into t (id,a) values (775,71);
+insert into t (id,a) values (775,72);
+insert into t (id,a) values (775,73);
+insert into t (id,a) values (775,74);
+insert into t (id,a) values (775,75);
+insert into t (id,a) values (775,76);
+insert into t (id,a) values (775,77);
+insert into t (id,a) values (775,78);
+insert into t (id,a) values (775,79);
+insert into t (id,a) values (775,80);
+insert into t (id,a) values (775,81);
+insert into t (id,a) values (775,82);
+insert into t (id,a) values (775,83);
+insert into t (id,a) values (775,84);
+insert into t (id,a) values (775,85);
+insert into t (id,a) values (775,86);
+insert into t (id,a) values (775,87);
+insert into t (id,a) values (775,88);
+insert into t (id,a) values (775,89);
+insert into t (id,a) values (775,90);
+insert into t (id,a) values (775,91);
+insert into t (id,a) values (775,92);
+insert into t (id,a) values (775,93);
+insert into t (id,a) values (775,94);
+insert into t (id,a) values (775,95);
+insert into t (id,a) values (775,96);
+insert into t (id,a) values (775,97);
+insert into t (id,a) values (775,98);
+insert into t (id,a) values (775,99);
+insert into t (id,a) values (776,0);
+insert into t (id,a) values (776,1);
+insert into t (id,a) values (776,2);
+insert into t (id,a) values (776,3);
+insert into t (id,a) values (776,4);
+insert into t (id,a) values (776,5);
+insert into t (id,a) values (776,6);
+insert into t (id,a) values (776,7);
+insert into t (id,a) values (776,8);
+insert into t (id,a) values (776,9);
+insert into t (id,a) values (776,10);
+insert into t (id,a) values (776,11);
+insert into t (id,a) values (776,12);
+insert into t (id,a) values (776,13);
+insert into t (id,a) values (776,14);
+insert into t (id,a) values (776,15);
+insert into t (id,a) values (776,16);
+insert into t (id,a) values (776,17);
+insert into t (id,a) values (776,18);
+insert into t (id,a) values (776,19);
+insert into t (id,a) values (776,20);
+insert into t (id,a) values (776,21);
+insert into t (id,a) values (776,22);
+insert into t (id,a) values (776,23);
+insert into t (id,a) values (776,24);
+insert into t (id,a) values (776,25);
+insert into t (id,a) values (776,26);
+insert into t (id,a) values (776,27);
+insert into t (id,a) values (776,28);
+insert into t (id,a) values (776,29);
+insert into t (id,a) values (776,30);
+insert into t (id,a) values (776,31);
+insert into t (id,a) values (776,32);
+insert into t (id,a) values (776,33);
+insert into t (id,a) values (776,34);
+insert into t (id,a) values (776,35);
+insert into t (id,a) values (776,36);
+insert into t (id,a) values (776,37);
+insert into t (id,a) values (776,38);
+insert into t (id,a) values (776,39);
+insert into t (id,a) values (776,40);
+insert into t (id,a) values (776,41);
+insert into t (id,a) values (776,42);
+insert into t (id,a) values (776,43);
+insert into t (id,a) values (776,44);
+insert into t (id,a) values (776,45);
+insert into t (id,a) values (776,46);
+insert into t (id,a) values (776,47);
+insert into t (id,a) values (776,48);
+insert into t (id,a) values (776,49);
+insert into t (id,a) values (776,50);
+insert into t (id,a) values (776,51);
+insert into t (id,a) values (776,52);
+insert into t (id,a) values (776,53);
+insert into t (id,a) values (776,54);
+insert into t (id,a) values (776,55);
+insert into t (id,a) values (776,56);
+insert into t (id,a) values (776,57);
+insert into t (id,a) values (776,58);
+insert into t (id,a) values (776,59);
+insert into t (id,a) values (776,60);
+insert into t (id,a) values (776,61);
+insert into t (id,a) values (776,62);
+insert into t (id,a) values (776,63);
+insert into t (id,a) values (776,64);
+insert into t (id,a) values (776,65);
+insert into t (id,a) values (776,66);
+insert into t (id,a) values (776,67);
+insert into t (id,a) values (776,68);
+insert into t (id,a) values (776,69);
+insert into t (id,a) values (776,70);
+insert into t (id,a) values (776,71);
+insert into t (id,a) values (776,72);
+insert into t (id,a) values (776,73);
+insert into t (id,a) values (776,74);
+insert into t (id,a) values (776,75);
+insert into t (id,a) values (776,76);
+insert into t (id,a) values (776,77);
+insert into t (id,a) values (776,78);
+insert into t (id,a) values (776,79);
+insert into t (id,a) values (776,80);
+insert into t (id,a) values (776,81);
+insert into t (id,a) values (776,82);
+insert into t (id,a) values (776,83);
+insert into t (id,a) values (776,84);
+insert into t (id,a) values (776,85);
+insert into t (id,a) values (776,86);
+insert into t (id,a) values (776,87);
+insert into t (id,a) values (776,88);
+insert into t (id,a) values (776,89);
+insert into t (id,a) values (776,90);
+insert into t (id,a) values (776,91);
+insert into t (id,a) values (776,92);
+insert into t (id,a) values (776,93);
+insert into t (id,a) values (776,94);
+insert into t (id,a) values (776,95);
+insert into t (id,a) values (776,96);
+insert into t (id,a) values (776,97);
+insert into t (id,a) values (776,98);
+insert into t (id,a) values (776,99);
+insert into t (id,a) values (777,0);
+insert into t (id,a) values (777,1);
+insert into t (id,a) values (777,2);
+insert into t (id,a) values (777,3);
+insert into t (id,a) values (777,4);
+insert into t (id,a) values (777,5);
+insert into t (id,a) values (777,6);
+insert into t (id,a) values (777,7);
+insert into t (id,a) values (777,8);
+insert into t (id,a) values (777,9);
+insert into t (id,a) values (777,10);
+insert into t (id,a) values (777,11);
+insert into t (id,a) values (777,12);
+insert into t (id,a) values (777,13);
+insert into t (id,a) values (777,14);
+insert into t (id,a) values (777,15);
+insert into t (id,a) values (777,16);
+insert into t (id,a) values (777,17);
+insert into t (id,a) values (777,18);
+insert into t (id,a) values (777,19);
+insert into t (id,a) values (777,20);
+insert into t (id,a) values (777,21);
+insert into t (id,a) values (777,22);
+insert into t (id,a) values (777,23);
+insert into t (id,a) values (777,24);
+insert into t (id,a) values (777,25);
+insert into t (id,a) values (777,26);
+insert into t (id,a) values (777,27);
+insert into t (id,a) values (777,28);
+insert into t (id,a) values (777,29);
+insert into t (id,a) values (777,30);
+insert into t (id,a) values (777,31);
+insert into t (id,a) values (777,32);
+insert into t (id,a) values (777,33);
+insert into t (id,a) values (777,34);
+insert into t (id,a) values (777,35);
+insert into t (id,a) values (777,36);
+insert into t (id,a) values (777,37);
+insert into t (id,a) values (777,38);
+insert into t (id,a) values (777,39);
+insert into t (id,a) values (777,40);
+insert into t (id,a) values (777,41);
+insert into t (id,a) values (777,42);
+insert into t (id,a) values (777,43);
+insert into t (id,a) values (777,44);
+insert into t (id,a) values (777,45);
+insert into t (id,a) values (777,46);
+insert into t (id,a) values (777,47);
+insert into t (id,a) values (777,48);
+insert into t (id,a) values (777,49);
+insert into t (id,a) values (777,50);
+insert into t (id,a) values (777,51);
+insert into t (id,a) values (777,52);
+insert into t (id,a) values (777,53);
+insert into t (id,a) values (777,54);
+insert into t (id,a) values (777,55);
+insert into t (id,a) values (777,56);
+insert into t (id,a) values (777,57);
+insert into t (id,a) values (777,58);
+insert into t (id,a) values (777,59);
+insert into t (id,a) values (777,60);
+insert into t (id,a) values (777,61);
+insert into t (id,a) values (777,62);
+insert into t (id,a) values (777,63);
+insert into t (id,a) values (777,64);
+insert into t (id,a) values (777,65);
+insert into t (id,a) values (777,66);
+insert into t (id,a) values (777,67);
+insert into t (id,a) values (777,68);
+insert into t (id,a) values (777,69);
+insert into t (id,a) values (777,70);
+insert into t (id,a) values (777,71);
+insert into t (id,a) values (777,72);
+insert into t (id,a) values (777,73);
+insert into t (id,a) values (777,74);
+insert into t (id,a) values (777,75);
+insert into t (id,a) values (777,76);
+insert into t (id,a) values (777,77);
+insert into t (id,a) values (777,78);
+insert into t (id,a) values (777,79);
+insert into t (id,a) values (777,80);
+insert into t (id,a) values (777,81);
+insert into t (id,a) values (777,82);
+insert into t (id,a) values (777,83);
+insert into t (id,a) values (777,84);
+insert into t (id,a) values (777,85);
+insert into t (id,a) values (777,86);
+insert into t (id,a) values (777,87);
+insert into t (id,a) values (777,88);
+insert into t (id,a) values (777,89);
+insert into t (id,a) values (777,90);
+insert into t (id,a) values (777,91);
+insert into t (id,a) values (777,92);
+insert into t (id,a) values (777,93);
+insert into t (id,a) values (777,94);
+insert into t (id,a) values (777,95);
+insert into t (id,a) values (777,96);
+insert into t (id,a) values (777,97);
+insert into t (id,a) values (777,98);
+insert into t (id,a) values (777,99);
+insert into t (id,a) values (778,0);
+insert into t (id,a) values (778,1);
+insert into t (id,a) values (778,2);
+insert into t (id,a) values (778,3);
+insert into t (id,a) values (778,4);
+insert into t (id,a) values (778,5);
+insert into t (id,a) values (778,6);
+insert into t (id,a) values (778,7);
+insert into t (id,a) values (778,8);
+insert into t (id,a) values (778,9);
+insert into t (id,a) values (778,10);
+insert into t (id,a) values (778,11);
+insert into t (id,a) values (778,12);
+insert into t (id,a) values (778,13);
+insert into t (id,a) values (778,14);
+insert into t (id,a) values (778,15);
+insert into t (id,a) values (778,16);
+insert into t (id,a) values (778,17);
+insert into t (id,a) values (778,18);
+insert into t (id,a) values (778,19);
+insert into t (id,a) values (778,20);
+insert into t (id,a) values (778,21);
+insert into t (id,a) values (778,22);
+insert into t (id,a) values (778,23);
+insert into t (id,a) values (778,24);
+insert into t (id,a) values (778,25);
+insert into t (id,a) values (778,26);
+insert into t (id,a) values (778,27);
+insert into t (id,a) values (778,28);
+insert into t (id,a) values (778,29);
+insert into t (id,a) values (778,30);
+insert into t (id,a) values (778,31);
+insert into t (id,a) values (778,32);
+insert into t (id,a) values (778,33);
+insert into t (id,a) values (778,34);
+insert into t (id,a) values (778,35);
+insert into t (id,a) values (778,36);
+insert into t (id,a) values (778,37);
+insert into t (id,a) values (778,38);
+insert into t (id,a) values (778,39);
+insert into t (id,a) values (778,40);
+insert into t (id,a) values (778,41);
+insert into t (id,a) values (778,42);
+insert into t (id,a) values (778,43);
+insert into t (id,a) values (778,44);
+insert into t (id,a) values (778,45);
+insert into t (id,a) values (778,46);
+insert into t (id,a) values (778,47);
+insert into t (id,a) values (778,48);
+insert into t (id,a) values (778,49);
+insert into t (id,a) values (778,50);
+insert into t (id,a) values (778,51);
+insert into t (id,a) values (778,52);
+insert into t (id,a) values (778,53);
+insert into t (id,a) values (778,54);
+insert into t (id,a) values (778,55);
+insert into t (id,a) values (778,56);
+insert into t (id,a) values (778,57);
+insert into t (id,a) values (778,58);
+insert into t (id,a) values (778,59);
+insert into t (id,a) values (778,60);
+insert into t (id,a) values (778,61);
+insert into t (id,a) values (778,62);
+insert into t (id,a) values (778,63);
+insert into t (id,a) values (778,64);
+insert into t (id,a) values (778,65);
+insert into t (id,a) values (778,66);
+insert into t (id,a) values (778,67);
+insert into t (id,a) values (778,68);
+insert into t (id,a) values (778,69);
+insert into t (id,a) values (778,70);
+insert into t (id,a) values (778,71);
+insert into t (id,a) values (778,72);
+insert into t (id,a) values (778,73);
+insert into t (id,a) values (778,74);
+insert into t (id,a) values (778,75);
+insert into t (id,a) values (778,76);
+insert into t (id,a) values (778,77);
+insert into t (id,a) values (778,78);
+insert into t (id,a) values (778,79);
+insert into t (id,a) values (778,80);
+insert into t (id,a) values (778,81);
+insert into t (id,a) values (778,82);
+insert into t (id,a) values (778,83);
+insert into t (id,a) values (778,84);
+insert into t (id,a) values (778,85);
+insert into t (id,a) values (778,86);
+insert into t (id,a) values (778,87);
+insert into t (id,a) values (778,88);
+insert into t (id,a) values (778,89);
+insert into t (id,a) values (778,90);
+insert into t (id,a) values (778,91);
+insert into t (id,a) values (778,92);
+insert into t (id,a) values (778,93);
+insert into t (id,a) values (778,94);
+insert into t (id,a) values (778,95);
+insert into t (id,a) values (778,96);
+insert into t (id,a) values (778,97);
+insert into t (id,a) values (778,98);
+insert into t (id,a) values (778,99);
+insert into t (id,a) values (779,0);
+insert into t (id,a) values (779,1);
+insert into t (id,a) values (779,2);
+insert into t (id,a) values (779,3);
+insert into t (id,a) values (779,4);
+insert into t (id,a) values (779,5);
+insert into t (id,a) values (779,6);
+insert into t (id,a) values (779,7);
+insert into t (id,a) values (779,8);
+insert into t (id,a) values (779,9);
+insert into t (id,a) values (779,10);
+insert into t (id,a) values (779,11);
+insert into t (id,a) values (779,12);
+insert into t (id,a) values (779,13);
+insert into t (id,a) values (779,14);
+insert into t (id,a) values (779,15);
+insert into t (id,a) values (779,16);
+insert into t (id,a) values (779,17);
+insert into t (id,a) values (779,18);
+insert into t (id,a) values (779,19);
+insert into t (id,a) values (779,20);
+insert into t (id,a) values (779,21);
+insert into t (id,a) values (779,22);
+insert into t (id,a) values (779,23);
+insert into t (id,a) values (779,24);
+insert into t (id,a) values (779,25);
+insert into t (id,a) values (779,26);
+insert into t (id,a) values (779,27);
+insert into t (id,a) values (779,28);
+insert into t (id,a) values (779,29);
+insert into t (id,a) values (779,30);
+insert into t (id,a) values (779,31);
+insert into t (id,a) values (779,32);
+insert into t (id,a) values (779,33);
+insert into t (id,a) values (779,34);
+insert into t (id,a) values (779,35);
+insert into t (id,a) values (779,36);
+insert into t (id,a) values (779,37);
+insert into t (id,a) values (779,38);
+insert into t (id,a) values (779,39);
+insert into t (id,a) values (779,40);
+insert into t (id,a) values (779,41);
+insert into t (id,a) values (779,42);
+insert into t (id,a) values (779,43);
+insert into t (id,a) values (779,44);
+insert into t (id,a) values (779,45);
+insert into t (id,a) values (779,46);
+insert into t (id,a) values (779,47);
+insert into t (id,a) values (779,48);
+insert into t (id,a) values (779,49);
+insert into t (id,a) values (779,50);
+insert into t (id,a) values (779,51);
+insert into t (id,a) values (779,52);
+insert into t (id,a) values (779,53);
+insert into t (id,a) values (779,54);
+insert into t (id,a) values (779,55);
+insert into t (id,a) values (779,56);
+insert into t (id,a) values (779,57);
+insert into t (id,a) values (779,58);
+insert into t (id,a) values (779,59);
+insert into t (id,a) values (779,60);
+insert into t (id,a) values (779,61);
+insert into t (id,a) values (779,62);
+insert into t (id,a) values (779,63);
+insert into t (id,a) values (779,64);
+insert into t (id,a) values (779,65);
+insert into t (id,a) values (779,66);
+insert into t (id,a) values (779,67);
+insert into t (id,a) values (779,68);
+insert into t (id,a) values (779,69);
+insert into t (id,a) values (779,70);
+insert into t (id,a) values (779,71);
+insert into t (id,a) values (779,72);
+insert into t (id,a) values (779,73);
+insert into t (id,a) values (779,74);
+insert into t (id,a) values (779,75);
+insert into t (id,a) values (779,76);
+insert into t (id,a) values (779,77);
+insert into t (id,a) values (779,78);
+insert into t (id,a) values (779,79);
+insert into t (id,a) values (779,80);
+insert into t (id,a) values (779,81);
+insert into t (id,a) values (779,82);
+insert into t (id,a) values (779,83);
+insert into t (id,a) values (779,84);
+insert into t (id,a) values (779,85);
+insert into t (id,a) values (779,86);
+insert into t (id,a) values (779,87);
+insert into t (id,a) values (779,88);
+insert into t (id,a) values (779,89);
+insert into t (id,a) values (779,90);
+insert into t (id,a) values (779,91);
+insert into t (id,a) values (779,92);
+insert into t (id,a) values (779,93);
+insert into t (id,a) values (779,94);
+insert into t (id,a) values (779,95);
+insert into t (id,a) values (779,96);
+insert into t (id,a) values (779,97);
+insert into t (id,a) values (779,98);
+insert into t (id,a) values (779,99);
+insert into t (id,a) values (780,0);
+insert into t (id,a) values (780,1);
+insert into t (id,a) values (780,2);
+insert into t (id,a) values (780,3);
+insert into t (id,a) values (780,4);
+insert into t (id,a) values (780,5);
+insert into t (id,a) values (780,6);
+insert into t (id,a) values (780,7);
+insert into t (id,a) values (780,8);
+insert into t (id,a) values (780,9);
+insert into t (id,a) values (780,10);
+insert into t (id,a) values (780,11);
+insert into t (id,a) values (780,12);
+insert into t (id,a) values (780,13);
+insert into t (id,a) values (780,14);
+insert into t (id,a) values (780,15);
+insert into t (id,a) values (780,16);
+insert into t (id,a) values (780,17);
+insert into t (id,a) values (780,18);
+insert into t (id,a) values (780,19);
+insert into t (id,a) values (780,20);
+insert into t (id,a) values (780,21);
+insert into t (id,a) values (780,22);
+insert into t (id,a) values (780,23);
+insert into t (id,a) values (780,24);
+insert into t (id,a) values (780,25);
+insert into t (id,a) values (780,26);
+insert into t (id,a) values (780,27);
+insert into t (id,a) values (780,28);
+insert into t (id,a) values (780,29);
+insert into t (id,a) values (780,30);
+insert into t (id,a) values (780,31);
+insert into t (id,a) values (780,32);
+insert into t (id,a) values (780,33);
+insert into t (id,a) values (780,34);
+insert into t (id,a) values (780,35);
+insert into t (id,a) values (780,36);
+insert into t (id,a) values (780,37);
+insert into t (id,a) values (780,38);
+insert into t (id,a) values (780,39);
+insert into t (id,a) values (780,40);
+insert into t (id,a) values (780,41);
+insert into t (id,a) values (780,42);
+insert into t (id,a) values (780,43);
+insert into t (id,a) values (780,44);
+insert into t (id,a) values (780,45);
+insert into t (id,a) values (780,46);
+insert into t (id,a) values (780,47);
+insert into t (id,a) values (780,48);
+insert into t (id,a) values (780,49);
+insert into t (id,a) values (780,50);
+insert into t (id,a) values (780,51);
+insert into t (id,a) values (780,52);
+insert into t (id,a) values (780,53);
+insert into t (id,a) values (780,54);
+insert into t (id,a) values (780,55);
+insert into t (id,a) values (780,56);
+insert into t (id,a) values (780,57);
+insert into t (id,a) values (780,58);
+insert into t (id,a) values (780,59);
+insert into t (id,a) values (780,60);
+insert into t (id,a) values (780,61);
+insert into t (id,a) values (780,62);
+insert into t (id,a) values (780,63);
+insert into t (id,a) values (780,64);
+insert into t (id,a) values (780,65);
+insert into t (id,a) values (780,66);
+insert into t (id,a) values (780,67);
+insert into t (id,a) values (780,68);
+insert into t (id,a) values (780,69);
+insert into t (id,a) values (780,70);
+insert into t (id,a) values (780,71);
+insert into t (id,a) values (780,72);
+insert into t (id,a) values (780,73);
+insert into t (id,a) values (780,74);
+insert into t (id,a) values (780,75);
+insert into t (id,a) values (780,76);
+insert into t (id,a) values (780,77);
+insert into t (id,a) values (780,78);
+insert into t (id,a) values (780,79);
+insert into t (id,a) values (780,80);
+insert into t (id,a) values (780,81);
+insert into t (id,a) values (780,82);
+insert into t (id,a) values (780,83);
+insert into t (id,a) values (780,84);
+insert into t (id,a) values (780,85);
+insert into t (id,a) values (780,86);
+insert into t (id,a) values (780,87);
+insert into t (id,a) values (780,88);
+insert into t (id,a) values (780,89);
+insert into t (id,a) values (780,90);
+insert into t (id,a) values (780,91);
+insert into t (id,a) values (780,92);
+insert into t (id,a) values (780,93);
+insert into t (id,a) values (780,94);
+insert into t (id,a) values (780,95);
+insert into t (id,a) values (780,96);
+insert into t (id,a) values (780,97);
+insert into t (id,a) values (780,98);
+insert into t (id,a) values (780,99);
+insert into t (id,a) values (781,0);
+insert into t (id,a) values (781,1);
+insert into t (id,a) values (781,2);
+insert into t (id,a) values (781,3);
+insert into t (id,a) values (781,4);
+insert into t (id,a) values (781,5);
+insert into t (id,a) values (781,6);
+insert into t (id,a) values (781,7);
+insert into t (id,a) values (781,8);
+insert into t (id,a) values (781,9);
+insert into t (id,a) values (781,10);
+insert into t (id,a) values (781,11);
+insert into t (id,a) values (781,12);
+insert into t (id,a) values (781,13);
+insert into t (id,a) values (781,14);
+insert into t (id,a) values (781,15);
+insert into t (id,a) values (781,16);
+insert into t (id,a) values (781,17);
+insert into t (id,a) values (781,18);
+insert into t (id,a) values (781,19);
+insert into t (id,a) values (781,20);
+insert into t (id,a) values (781,21);
+insert into t (id,a) values (781,22);
+insert into t (id,a) values (781,23);
+insert into t (id,a) values (781,24);
+insert into t (id,a) values (781,25);
+insert into t (id,a) values (781,26);
+insert into t (id,a) values (781,27);
+insert into t (id,a) values (781,28);
+insert into t (id,a) values (781,29);
+insert into t (id,a) values (781,30);
+insert into t (id,a) values (781,31);
+insert into t (id,a) values (781,32);
+insert into t (id,a) values (781,33);
+insert into t (id,a) values (781,34);
+insert into t (id,a) values (781,35);
+insert into t (id,a) values (781,36);
+insert into t (id,a) values (781,37);
+insert into t (id,a) values (781,38);
+insert into t (id,a) values (781,39);
+insert into t (id,a) values (781,40);
+insert into t (id,a) values (781,41);
+insert into t (id,a) values (781,42);
+insert into t (id,a) values (781,43);
+insert into t (id,a) values (781,44);
+insert into t (id,a) values (781,45);
+insert into t (id,a) values (781,46);
+insert into t (id,a) values (781,47);
+insert into t (id,a) values (781,48);
+insert into t (id,a) values (781,49);
+insert into t (id,a) values (781,50);
+insert into t (id,a) values (781,51);
+insert into t (id,a) values (781,52);
+insert into t (id,a) values (781,53);
+insert into t (id,a) values (781,54);
+insert into t (id,a) values (781,55);
+insert into t (id,a) values (781,56);
+insert into t (id,a) values (781,57);
+insert into t (id,a) values (781,58);
+insert into t (id,a) values (781,59);
+insert into t (id,a) values (781,60);
+insert into t (id,a) values (781,61);
+insert into t (id,a) values (781,62);
+insert into t (id,a) values (781,63);
+insert into t (id,a) values (781,64);
+insert into t (id,a) values (781,65);
+insert into t (id,a) values (781,66);
+insert into t (id,a) values (781,67);
+insert into t (id,a) values (781,68);
+insert into t (id,a) values (781,69);
+insert into t (id,a) values (781,70);
+insert into t (id,a) values (781,71);
+insert into t (id,a) values (781,72);
+insert into t (id,a) values (781,73);
+insert into t (id,a) values (781,74);
+insert into t (id,a) values (781,75);
+insert into t (id,a) values (781,76);
+insert into t (id,a) values (781,77);
+insert into t (id,a) values (781,78);
+insert into t (id,a) values (781,79);
+insert into t (id,a) values (781,80);
+insert into t (id,a) values (781,81);
+insert into t (id,a) values (781,82);
+insert into t (id,a) values (781,83);
+insert into t (id,a) values (781,84);
+insert into t (id,a) values (781,85);
+insert into t (id,a) values (781,86);
+insert into t (id,a) values (781,87);
+insert into t (id,a) values (781,88);
+insert into t (id,a) values (781,89);
+insert into t (id,a) values (781,90);
+insert into t (id,a) values (781,91);
+insert into t (id,a) values (781,92);
+insert into t (id,a) values (781,93);
+insert into t (id,a) values (781,94);
+insert into t (id,a) values (781,95);
+insert into t (id,a) values (781,96);
+insert into t (id,a) values (781,97);
+insert into t (id,a) values (781,98);
+insert into t (id,a) values (781,99);
+insert into t (id,a) values (782,0);
+insert into t (id,a) values (782,1);
+insert into t (id,a) values (782,2);
+insert into t (id,a) values (782,3);
+insert into t (id,a) values (782,4);
+insert into t (id,a) values (782,5);
+insert into t (id,a) values (782,6);
+insert into t (id,a) values (782,7);
+insert into t (id,a) values (782,8);
+insert into t (id,a) values (782,9);
+insert into t (id,a) values (782,10);
+insert into t (id,a) values (782,11);
+insert into t (id,a) values (782,12);
+insert into t (id,a) values (782,13);
+insert into t (id,a) values (782,14);
+insert into t (id,a) values (782,15);
+insert into t (id,a) values (782,16);
+insert into t (id,a) values (782,17);
+insert into t (id,a) values (782,18);
+insert into t (id,a) values (782,19);
+insert into t (id,a) values (782,20);
+insert into t (id,a) values (782,21);
+insert into t (id,a) values (782,22);
+insert into t (id,a) values (782,23);
+insert into t (id,a) values (782,24);
+insert into t (id,a) values (782,25);
+insert into t (id,a) values (782,26);
+insert into t (id,a) values (782,27);
+insert into t (id,a) values (782,28);
+insert into t (id,a) values (782,29);
+insert into t (id,a) values (782,30);
+insert into t (id,a) values (782,31);
+insert into t (id,a) values (782,32);
+insert into t (id,a) values (782,33);
+insert into t (id,a) values (782,34);
+insert into t (id,a) values (782,35);
+insert into t (id,a) values (782,36);
+insert into t (id,a) values (782,37);
+insert into t (id,a) values (782,38);
+insert into t (id,a) values (782,39);
+insert into t (id,a) values (782,40);
+insert into t (id,a) values (782,41);
+insert into t (id,a) values (782,42);
+insert into t (id,a) values (782,43);
+insert into t (id,a) values (782,44);
+insert into t (id,a) values (782,45);
+insert into t (id,a) values (782,46);
+insert into t (id,a) values (782,47);
+insert into t (id,a) values (782,48);
+insert into t (id,a) values (782,49);
+insert into t (id,a) values (782,50);
+insert into t (id,a) values (782,51);
+insert into t (id,a) values (782,52);
+insert into t (id,a) values (782,53);
+insert into t (id,a) values (782,54);
+insert into t (id,a) values (782,55);
+insert into t (id,a) values (782,56);
+insert into t (id,a) values (782,57);
+insert into t (id,a) values (782,58);
+insert into t (id,a) values (782,59);
+insert into t (id,a) values (782,60);
+insert into t (id,a) values (782,61);
+insert into t (id,a) values (782,62);
+insert into t (id,a) values (782,63);
+insert into t (id,a) values (782,64);
+insert into t (id,a) values (782,65);
+insert into t (id,a) values (782,66);
+insert into t (id,a) values (782,67);
+insert into t (id,a) values (782,68);
+insert into t (id,a) values (782,69);
+insert into t (id,a) values (782,70);
+insert into t (id,a) values (782,71);
+insert into t (id,a) values (782,72);
+insert into t (id,a) values (782,73);
+insert into t (id,a) values (782,74);
+insert into t (id,a) values (782,75);
+insert into t (id,a) values (782,76);
+insert into t (id,a) values (782,77);
+insert into t (id,a) values (782,78);
+insert into t (id,a) values (782,79);
+insert into t (id,a) values (782,80);
+insert into t (id,a) values (782,81);
+insert into t (id,a) values (782,82);
+insert into t (id,a) values (782,83);
+insert into t (id,a) values (782,84);
+insert into t (id,a) values (782,85);
+insert into t (id,a) values (782,86);
+insert into t (id,a) values (782,87);
+insert into t (id,a) values (782,88);
+insert into t (id,a) values (782,89);
+insert into t (id,a) values (782,90);
+insert into t (id,a) values (782,91);
+insert into t (id,a) values (782,92);
+insert into t (id,a) values (782,93);
+insert into t (id,a) values (782,94);
+insert into t (id,a) values (782,95);
+insert into t (id,a) values (782,96);
+insert into t (id,a) values (782,97);
+insert into t (id,a) values (782,98);
+insert into t (id,a) values (782,99);
+insert into t (id,a) values (783,0);
+insert into t (id,a) values (783,1);
+insert into t (id,a) values (783,2);
+insert into t (id,a) values (783,3);
+insert into t (id,a) values (783,4);
+insert into t (id,a) values (783,5);
+insert into t (id,a) values (783,6);
+insert into t (id,a) values (783,7);
+insert into t (id,a) values (783,8);
+insert into t (id,a) values (783,9);
+insert into t (id,a) values (783,10);
+insert into t (id,a) values (783,11);
+insert into t (id,a) values (783,12);
+insert into t (id,a) values (783,13);
+insert into t (id,a) values (783,14);
+insert into t (id,a) values (783,15);
+insert into t (id,a) values (783,16);
+insert into t (id,a) values (783,17);
+insert into t (id,a) values (783,18);
+insert into t (id,a) values (783,19);
+insert into t (id,a) values (783,20);
+insert into t (id,a) values (783,21);
+insert into t (id,a) values (783,22);
+insert into t (id,a) values (783,23);
+insert into t (id,a) values (783,24);
+insert into t (id,a) values (783,25);
+insert into t (id,a) values (783,26);
+insert into t (id,a) values (783,27);
+insert into t (id,a) values (783,28);
+insert into t (id,a) values (783,29);
+insert into t (id,a) values (783,30);
+insert into t (id,a) values (783,31);
+insert into t (id,a) values (783,32);
+insert into t (id,a) values (783,33);
+insert into t (id,a) values (783,34);
+insert into t (id,a) values (783,35);
+insert into t (id,a) values (783,36);
+insert into t (id,a) values (783,37);
+insert into t (id,a) values (783,38);
+insert into t (id,a) values (783,39);
+insert into t (id,a) values (783,40);
+insert into t (id,a) values (783,41);
+insert into t (id,a) values (783,42);
+insert into t (id,a) values (783,43);
+insert into t (id,a) values (783,44);
+insert into t (id,a) values (783,45);
+insert into t (id,a) values (783,46);
+insert into t (id,a) values (783,47);
+insert into t (id,a) values (783,48);
+insert into t (id,a) values (783,49);
+insert into t (id,a) values (783,50);
+insert into t (id,a) values (783,51);
+insert into t (id,a) values (783,52);
+insert into t (id,a) values (783,53);
+insert into t (id,a) values (783,54);
+insert into t (id,a) values (783,55);
+insert into t (id,a) values (783,56);
+insert into t (id,a) values (783,57);
+insert into t (id,a) values (783,58);
+insert into t (id,a) values (783,59);
+insert into t (id,a) values (783,60);
+insert into t (id,a) values (783,61);
+insert into t (id,a) values (783,62);
+insert into t (id,a) values (783,63);
+insert into t (id,a) values (783,64);
+insert into t (id,a) values (783,65);
+insert into t (id,a) values (783,66);
+insert into t (id,a) values (783,67);
+insert into t (id,a) values (783,68);
+insert into t (id,a) values (783,69);
+insert into t (id,a) values (783,70);
+insert into t (id,a) values (783,71);
+insert into t (id,a) values (783,72);
+insert into t (id,a) values (783,73);
+insert into t (id,a) values (783,74);
+insert into t (id,a) values (783,75);
+insert into t (id,a) values (783,76);
+insert into t (id,a) values (783,77);
+insert into t (id,a) values (783,78);
+insert into t (id,a) values (783,79);
+insert into t (id,a) values (783,80);
+insert into t (id,a) values (783,81);
+insert into t (id,a) values (783,82);
+insert into t (id,a) values (783,83);
+insert into t (id,a) values (783,84);
+insert into t (id,a) values (783,85);
+insert into t (id,a) values (783,86);
+insert into t (id,a) values (783,87);
+insert into t (id,a) values (783,88);
+insert into t (id,a) values (783,89);
+insert into t (id,a) values (783,90);
+insert into t (id,a) values (783,91);
+insert into t (id,a) values (783,92);
+insert into t (id,a) values (783,93);
+insert into t (id,a) values (783,94);
+insert into t (id,a) values (783,95);
+insert into t (id,a) values (783,96);
+insert into t (id,a) values (783,97);
+insert into t (id,a) values (783,98);
+insert into t (id,a) values (783,99);
+insert into t (id,a) values (784,0);
+insert into t (id,a) values (784,1);
+insert into t (id,a) values (784,2);
+insert into t (id,a) values (784,3);
+insert into t (id,a) values (784,4);
+insert into t (id,a) values (784,5);
+insert into t (id,a) values (784,6);
+insert into t (id,a) values (784,7);
+insert into t (id,a) values (784,8);
+insert into t (id,a) values (784,9);
+insert into t (id,a) values (784,10);
+insert into t (id,a) values (784,11);
+insert into t (id,a) values (784,12);
+insert into t (id,a) values (784,13);
+insert into t (id,a) values (784,14);
+insert into t (id,a) values (784,15);
+insert into t (id,a) values (784,16);
+insert into t (id,a) values (784,17);
+insert into t (id,a) values (784,18);
+insert into t (id,a) values (784,19);
+insert into t (id,a) values (784,20);
+insert into t (id,a) values (784,21);
+insert into t (id,a) values (784,22);
+insert into t (id,a) values (784,23);
+insert into t (id,a) values (784,24);
+insert into t (id,a) values (784,25);
+insert into t (id,a) values (784,26);
+insert into t (id,a) values (784,27);
+insert into t (id,a) values (784,28);
+insert into t (id,a) values (784,29);
+insert into t (id,a) values (784,30);
+insert into t (id,a) values (784,31);
+insert into t (id,a) values (784,32);
+insert into t (id,a) values (784,33);
+insert into t (id,a) values (784,34);
+insert into t (id,a) values (784,35);
+insert into t (id,a) values (784,36);
+insert into t (id,a) values (784,37);
+insert into t (id,a) values (784,38);
+insert into t (id,a) values (784,39);
+insert into t (id,a) values (784,40);
+insert into t (id,a) values (784,41);
+insert into t (id,a) values (784,42);
+insert into t (id,a) values (784,43);
+insert into t (id,a) values (784,44);
+insert into t (id,a) values (784,45);
+insert into t (id,a) values (784,46);
+insert into t (id,a) values (784,47);
+insert into t (id,a) values (784,48);
+insert into t (id,a) values (784,49);
+insert into t (id,a) values (784,50);
+insert into t (id,a) values (784,51);
+insert into t (id,a) values (784,52);
+insert into t (id,a) values (784,53);
+insert into t (id,a) values (784,54);
+insert into t (id,a) values (784,55);
+insert into t (id,a) values (784,56);
+insert into t (id,a) values (784,57);
+insert into t (id,a) values (784,58);
+insert into t (id,a) values (784,59);
+insert into t (id,a) values (784,60);
+insert into t (id,a) values (784,61);
+insert into t (id,a) values (784,62);
+insert into t (id,a) values (784,63);
+insert into t (id,a) values (784,64);
+insert into t (id,a) values (784,65);
+insert into t (id,a) values (784,66);
+insert into t (id,a) values (784,67);
+insert into t (id,a) values (784,68);
+insert into t (id,a) values (784,69);
+insert into t (id,a) values (784,70);
+insert into t (id,a) values (784,71);
+insert into t (id,a) values (784,72);
+insert into t (id,a) values (784,73);
+insert into t (id,a) values (784,74);
+insert into t (id,a) values (784,75);
+insert into t (id,a) values (784,76);
+insert into t (id,a) values (784,77);
+insert into t (id,a) values (784,78);
+insert into t (id,a) values (784,79);
+insert into t (id,a) values (784,80);
+insert into t (id,a) values (784,81);
+insert into t (id,a) values (784,82);
+insert into t (id,a) values (784,83);
+insert into t (id,a) values (784,84);
+insert into t (id,a) values (784,85);
+insert into t (id,a) values (784,86);
+insert into t (id,a) values (784,87);
+insert into t (id,a) values (784,88);
+insert into t (id,a) values (784,89);
+insert into t (id,a) values (784,90);
+insert into t (id,a) values (784,91);
+insert into t (id,a) values (784,92);
+insert into t (id,a) values (784,93);
+insert into t (id,a) values (784,94);
+insert into t (id,a) values (784,95);
+insert into t (id,a) values (784,96);
+insert into t (id,a) values (784,97);
+insert into t (id,a) values (784,98);
+insert into t (id,a) values (784,99);
+insert into t (id,a) values (785,0);
+insert into t (id,a) values (785,1);
+insert into t (id,a) values (785,2);
+insert into t (id,a) values (785,3);
+insert into t (id,a) values (785,4);
+insert into t (id,a) values (785,5);
+insert into t (id,a) values (785,6);
+insert into t (id,a) values (785,7);
+insert into t (id,a) values (785,8);
+insert into t (id,a) values (785,9);
+insert into t (id,a) values (785,10);
+insert into t (id,a) values (785,11);
+insert into t (id,a) values (785,12);
+insert into t (id,a) values (785,13);
+insert into t (id,a) values (785,14);
+insert into t (id,a) values (785,15);
+insert into t (id,a) values (785,16);
+insert into t (id,a) values (785,17);
+insert into t (id,a) values (785,18);
+insert into t (id,a) values (785,19);
+insert into t (id,a) values (785,20);
+insert into t (id,a) values (785,21);
+insert into t (id,a) values (785,22);
+insert into t (id,a) values (785,23);
+insert into t (id,a) values (785,24);
+insert into t (id,a) values (785,25);
+insert into t (id,a) values (785,26);
+insert into t (id,a) values (785,27);
+insert into t (id,a) values (785,28);
+insert into t (id,a) values (785,29);
+insert into t (id,a) values (785,30);
+insert into t (id,a) values (785,31);
+insert into t (id,a) values (785,32);
+insert into t (id,a) values (785,33);
+insert into t (id,a) values (785,34);
+insert into t (id,a) values (785,35);
+insert into t (id,a) values (785,36);
+insert into t (id,a) values (785,37);
+insert into t (id,a) values (785,38);
+insert into t (id,a) values (785,39);
+insert into t (id,a) values (785,40);
+insert into t (id,a) values (785,41);
+insert into t (id,a) values (785,42);
+insert into t (id,a) values (785,43);
+insert into t (id,a) values (785,44);
+insert into t (id,a) values (785,45);
+insert into t (id,a) values (785,46);
+insert into t (id,a) values (785,47);
+insert into t (id,a) values (785,48);
+insert into t (id,a) values (785,49);
+insert into t (id,a) values (785,50);
+insert into t (id,a) values (785,51);
+insert into t (id,a) values (785,52);
+insert into t (id,a) values (785,53);
+insert into t (id,a) values (785,54);
+insert into t (id,a) values (785,55);
+insert into t (id,a) values (785,56);
+insert into t (id,a) values (785,57);
+insert into t (id,a) values (785,58);
+insert into t (id,a) values (785,59);
+insert into t (id,a) values (785,60);
+insert into t (id,a) values (785,61);
+insert into t (id,a) values (785,62);
+insert into t (id,a) values (785,63);
+insert into t (id,a) values (785,64);
+insert into t (id,a) values (785,65);
+insert into t (id,a) values (785,66);
+insert into t (id,a) values (785,67);
+insert into t (id,a) values (785,68);
+insert into t (id,a) values (785,69);
+insert into t (id,a) values (785,70);
+insert into t (id,a) values (785,71);
+insert into t (id,a) values (785,72);
+insert into t (id,a) values (785,73);
+insert into t (id,a) values (785,74);
+insert into t (id,a) values (785,75);
+insert into t (id,a) values (785,76);
+insert into t (id,a) values (785,77);
+insert into t (id,a) values (785,78);
+insert into t (id,a) values (785,79);
+insert into t (id,a) values (785,80);
+insert into t (id,a) values (785,81);
+insert into t (id,a) values (785,82);
+insert into t (id,a) values (785,83);
+insert into t (id,a) values (785,84);
+insert into t (id,a) values (785,85);
+insert into t (id,a) values (785,86);
+insert into t (id,a) values (785,87);
+insert into t (id,a) values (785,88);
+insert into t (id,a) values (785,89);
+insert into t (id,a) values (785,90);
+insert into t (id,a) values (785,91);
+insert into t (id,a) values (785,92);
+insert into t (id,a) values (785,93);
+insert into t (id,a) values (785,94);
+insert into t (id,a) values (785,95);
+insert into t (id,a) values (785,96);
+insert into t (id,a) values (785,97);
+insert into t (id,a) values (785,98);
+insert into t (id,a) values (785,99);
+insert into t (id,a) values (786,0);
+insert into t (id,a) values (786,1);
+insert into t (id,a) values (786,2);
+insert into t (id,a) values (786,3);
+insert into t (id,a) values (786,4);
+insert into t (id,a) values (786,5);
+insert into t (id,a) values (786,6);
+insert into t (id,a) values (786,7);
+insert into t (id,a) values (786,8);
+insert into t (id,a) values (786,9);
+insert into t (id,a) values (786,10);
+insert into t (id,a) values (786,11);
+insert into t (id,a) values (786,12);
+insert into t (id,a) values (786,13);
+insert into t (id,a) values (786,14);
+insert into t (id,a) values (786,15);
+insert into t (id,a) values (786,16);
+insert into t (id,a) values (786,17);
+insert into t (id,a) values (786,18);
+insert into t (id,a) values (786,19);
+insert into t (id,a) values (786,20);
+insert into t (id,a) values (786,21);
+insert into t (id,a) values (786,22);
+insert into t (id,a) values (786,23);
+insert into t (id,a) values (786,24);
+insert into t (id,a) values (786,25);
+insert into t (id,a) values (786,26);
+insert into t (id,a) values (786,27);
+insert into t (id,a) values (786,28);
+insert into t (id,a) values (786,29);
+insert into t (id,a) values (786,30);
+insert into t (id,a) values (786,31);
+insert into t (id,a) values (786,32);
+insert into t (id,a) values (786,33);
+insert into t (id,a) values (786,34);
+insert into t (id,a) values (786,35);
+insert into t (id,a) values (786,36);
+insert into t (id,a) values (786,37);
+insert into t (id,a) values (786,38);
+insert into t (id,a) values (786,39);
+insert into t (id,a) values (786,40);
+insert into t (id,a) values (786,41);
+insert into t (id,a) values (786,42);
+insert into t (id,a) values (786,43);
+insert into t (id,a) values (786,44);
+insert into t (id,a) values (786,45);
+insert into t (id,a) values (786,46);
+insert into t (id,a) values (786,47);
+insert into t (id,a) values (786,48);
+insert into t (id,a) values (786,49);
+insert into t (id,a) values (786,50);
+insert into t (id,a) values (786,51);
+insert into t (id,a) values (786,52);
+insert into t (id,a) values (786,53);
+insert into t (id,a) values (786,54);
+insert into t (id,a) values (786,55);
+insert into t (id,a) values (786,56);
+insert into t (id,a) values (786,57);
+insert into t (id,a) values (786,58);
+insert into t (id,a) values (786,59);
+insert into t (id,a) values (786,60);
+insert into t (id,a) values (786,61);
+insert into t (id,a) values (786,62);
+insert into t (id,a) values (786,63);
+insert into t (id,a) values (786,64);
+insert into t (id,a) values (786,65);
+insert into t (id,a) values (786,66);
+insert into t (id,a) values (786,67);
+insert into t (id,a) values (786,68);
+insert into t (id,a) values (786,69);
+insert into t (id,a) values (786,70);
+insert into t (id,a) values (786,71);
+insert into t (id,a) values (786,72);
+insert into t (id,a) values (786,73);
+insert into t (id,a) values (786,74);
+insert into t (id,a) values (786,75);
+insert into t (id,a) values (786,76);
+insert into t (id,a) values (786,77);
+insert into t (id,a) values (786,78);
+insert into t (id,a) values (786,79);
+insert into t (id,a) values (786,80);
+insert into t (id,a) values (786,81);
+insert into t (id,a) values (786,82);
+insert into t (id,a) values (786,83);
+insert into t (id,a) values (786,84);
+insert into t (id,a) values (786,85);
+insert into t (id,a) values (786,86);
+insert into t (id,a) values (786,87);
+insert into t (id,a) values (786,88);
+insert into t (id,a) values (786,89);
+insert into t (id,a) values (786,90);
+insert into t (id,a) values (786,91);
+insert into t (id,a) values (786,92);
+insert into t (id,a) values (786,93);
+insert into t (id,a) values (786,94);
+insert into t (id,a) values (786,95);
+insert into t (id,a) values (786,96);
+insert into t (id,a) values (786,97);
+insert into t (id,a) values (786,98);
+insert into t (id,a) values (786,99);
+insert into t (id,a) values (787,0);
+insert into t (id,a) values (787,1);
+insert into t (id,a) values (787,2);
+insert into t (id,a) values (787,3);
+insert into t (id,a) values (787,4);
+insert into t (id,a) values (787,5);
+insert into t (id,a) values (787,6);
+insert into t (id,a) values (787,7);
+insert into t (id,a) values (787,8);
+insert into t (id,a) values (787,9);
+insert into t (id,a) values (787,10);
+insert into t (id,a) values (787,11);
+insert into t (id,a) values (787,12);
+insert into t (id,a) values (787,13);
+insert into t (id,a) values (787,14);
+insert into t (id,a) values (787,15);
+insert into t (id,a) values (787,16);
+insert into t (id,a) values (787,17);
+insert into t (id,a) values (787,18);
+insert into t (id,a) values (787,19);
+insert into t (id,a) values (787,20);
+insert into t (id,a) values (787,21);
+insert into t (id,a) values (787,22);
+insert into t (id,a) values (787,23);
+insert into t (id,a) values (787,24);
+insert into t (id,a) values (787,25);
+insert into t (id,a) values (787,26);
+insert into t (id,a) values (787,27);
+insert into t (id,a) values (787,28);
+insert into t (id,a) values (787,29);
+insert into t (id,a) values (787,30);
+insert into t (id,a) values (787,31);
+insert into t (id,a) values (787,32);
+insert into t (id,a) values (787,33);
+insert into t (id,a) values (787,34);
+insert into t (id,a) values (787,35);
+insert into t (id,a) values (787,36);
+insert into t (id,a) values (787,37);
+insert into t (id,a) values (787,38);
+insert into t (id,a) values (787,39);
+insert into t (id,a) values (787,40);
+insert into t (id,a) values (787,41);
+insert into t (id,a) values (787,42);
+insert into t (id,a) values (787,43);
+insert into t (id,a) values (787,44);
+insert into t (id,a) values (787,45);
+insert into t (id,a) values (787,46);
+insert into t (id,a) values (787,47);
+insert into t (id,a) values (787,48);
+insert into t (id,a) values (787,49);
+insert into t (id,a) values (787,50);
+insert into t (id,a) values (787,51);
+insert into t (id,a) values (787,52);
+insert into t (id,a) values (787,53);
+insert into t (id,a) values (787,54);
+insert into t (id,a) values (787,55);
+insert into t (id,a) values (787,56);
+insert into t (id,a) values (787,57);
+insert into t (id,a) values (787,58);
+insert into t (id,a) values (787,59);
+insert into t (id,a) values (787,60);
+insert into t (id,a) values (787,61);
+insert into t (id,a) values (787,62);
+insert into t (id,a) values (787,63);
+insert into t (id,a) values (787,64);
+insert into t (id,a) values (787,65);
+insert into t (id,a) values (787,66);
+insert into t (id,a) values (787,67);
+insert into t (id,a) values (787,68);
+insert into t (id,a) values (787,69);
+insert into t (id,a) values (787,70);
+insert into t (id,a) values (787,71);
+insert into t (id,a) values (787,72);
+insert into t (id,a) values (787,73);
+insert into t (id,a) values (787,74);
+insert into t (id,a) values (787,75);
+insert into t (id,a) values (787,76);
+insert into t (id,a) values (787,77);
+insert into t (id,a) values (787,78);
+insert into t (id,a) values (787,79);
+insert into t (id,a) values (787,80);
+insert into t (id,a) values (787,81);
+insert into t (id,a) values (787,82);
+insert into t (id,a) values (787,83);
+insert into t (id,a) values (787,84);
+insert into t (id,a) values (787,85);
+insert into t (id,a) values (787,86);
+insert into t (id,a) values (787,87);
+insert into t (id,a) values (787,88);
+insert into t (id,a) values (787,89);
+insert into t (id,a) values (787,90);
+insert into t (id,a) values (787,91);
+insert into t (id,a) values (787,92);
+insert into t (id,a) values (787,93);
+insert into t (id,a) values (787,94);
+insert into t (id,a) values (787,95);
+insert into t (id,a) values (787,96);
+insert into t (id,a) values (787,97);
+insert into t (id,a) values (787,98);
+insert into t (id,a) values (787,99);
+insert into t (id,a) values (788,0);
+insert into t (id,a) values (788,1);
+insert into t (id,a) values (788,2);
+insert into t (id,a) values (788,3);
+insert into t (id,a) values (788,4);
+insert into t (id,a) values (788,5);
+insert into t (id,a) values (788,6);
+insert into t (id,a) values (788,7);
+insert into t (id,a) values (788,8);
+insert into t (id,a) values (788,9);
+insert into t (id,a) values (788,10);
+insert into t (id,a) values (788,11);
+insert into t (id,a) values (788,12);
+insert into t (id,a) values (788,13);
+insert into t (id,a) values (788,14);
+insert into t (id,a) values (788,15);
+insert into t (id,a) values (788,16);
+insert into t (id,a) values (788,17);
+insert into t (id,a) values (788,18);
+insert into t (id,a) values (788,19);
+insert into t (id,a) values (788,20);
+insert into t (id,a) values (788,21);
+insert into t (id,a) values (788,22);
+insert into t (id,a) values (788,23);
+insert into t (id,a) values (788,24);
+insert into t (id,a) values (788,25);
+insert into t (id,a) values (788,26);
+insert into t (id,a) values (788,27);
+insert into t (id,a) values (788,28);
+insert into t (id,a) values (788,29);
+insert into t (id,a) values (788,30);
+insert into t (id,a) values (788,31);
+insert into t (id,a) values (788,32);
+insert into t (id,a) values (788,33);
+insert into t (id,a) values (788,34);
+insert into t (id,a) values (788,35);
+insert into t (id,a) values (788,36);
+insert into t (id,a) values (788,37);
+insert into t (id,a) values (788,38);
+insert into t (id,a) values (788,39);
+insert into t (id,a) values (788,40);
+insert into t (id,a) values (788,41);
+insert into t (id,a) values (788,42);
+insert into t (id,a) values (788,43);
+insert into t (id,a) values (788,44);
+insert into t (id,a) values (788,45);
+insert into t (id,a) values (788,46);
+insert into t (id,a) values (788,47);
+insert into t (id,a) values (788,48);
+insert into t (id,a) values (788,49);
+insert into t (id,a) values (788,50);
+insert into t (id,a) values (788,51);
+insert into t (id,a) values (788,52);
+insert into t (id,a) values (788,53);
+insert into t (id,a) values (788,54);
+insert into t (id,a) values (788,55);
+insert into t (id,a) values (788,56);
+insert into t (id,a) values (788,57);
+insert into t (id,a) values (788,58);
+insert into t (id,a) values (788,59);
+insert into t (id,a) values (788,60);
+insert into t (id,a) values (788,61);
+insert into t (id,a) values (788,62);
+insert into t (id,a) values (788,63);
+insert into t (id,a) values (788,64);
+insert into t (id,a) values (788,65);
+insert into t (id,a) values (788,66);
+insert into t (id,a) values (788,67);
+insert into t (id,a) values (788,68);
+insert into t (id,a) values (788,69);
+insert into t (id,a) values (788,70);
+insert into t (id,a) values (788,71);
+insert into t (id,a) values (788,72);
+insert into t (id,a) values (788,73);
+insert into t (id,a) values (788,74);
+insert into t (id,a) values (788,75);
+insert into t (id,a) values (788,76);
+insert into t (id,a) values (788,77);
+insert into t (id,a) values (788,78);
+insert into t (id,a) values (788,79);
+insert into t (id,a) values (788,80);
+insert into t (id,a) values (788,81);
+insert into t (id,a) values (788,82);
+insert into t (id,a) values (788,83);
+insert into t (id,a) values (788,84);
+insert into t (id,a) values (788,85);
+insert into t (id,a) values (788,86);
+insert into t (id,a) values (788,87);
+insert into t (id,a) values (788,88);
+insert into t (id,a) values (788,89);
+insert into t (id,a) values (788,90);
+insert into t (id,a) values (788,91);
+insert into t (id,a) values (788,92);
+insert into t (id,a) values (788,93);
+insert into t (id,a) values (788,94);
+insert into t (id,a) values (788,95);
+insert into t (id,a) values (788,96);
+insert into t (id,a) values (788,97);
+insert into t (id,a) values (788,98);
+insert into t (id,a) values (788,99);
+insert into t (id,a) values (789,0);
+insert into t (id,a) values (789,1);
+insert into t (id,a) values (789,2);
+insert into t (id,a) values (789,3);
+insert into t (id,a) values (789,4);
+insert into t (id,a) values (789,5);
+insert into t (id,a) values (789,6);
+insert into t (id,a) values (789,7);
+insert into t (id,a) values (789,8);
+insert into t (id,a) values (789,9);
+insert into t (id,a) values (789,10);
+insert into t (id,a) values (789,11);
+insert into t (id,a) values (789,12);
+insert into t (id,a) values (789,13);
+insert into t (id,a) values (789,14);
+insert into t (id,a) values (789,15);
+insert into t (id,a) values (789,16);
+insert into t (id,a) values (789,17);
+insert into t (id,a) values (789,18);
+insert into t (id,a) values (789,19);
+insert into t (id,a) values (789,20);
+insert into t (id,a) values (789,21);
+insert into t (id,a) values (789,22);
+insert into t (id,a) values (789,23);
+insert into t (id,a) values (789,24);
+insert into t (id,a) values (789,25);
+insert into t (id,a) values (789,26);
+insert into t (id,a) values (789,27);
+insert into t (id,a) values (789,28);
+insert into t (id,a) values (789,29);
+insert into t (id,a) values (789,30);
+insert into t (id,a) values (789,31);
+insert into t (id,a) values (789,32);
+insert into t (id,a) values (789,33);
+insert into t (id,a) values (789,34);
+insert into t (id,a) values (789,35);
+insert into t (id,a) values (789,36);
+insert into t (id,a) values (789,37);
+insert into t (id,a) values (789,38);
+insert into t (id,a) values (789,39);
+insert into t (id,a) values (789,40);
+insert into t (id,a) values (789,41);
+insert into t (id,a) values (789,42);
+insert into t (id,a) values (789,43);
+insert into t (id,a) values (789,44);
+insert into t (id,a) values (789,45);
+insert into t (id,a) values (789,46);
+insert into t (id,a) values (789,47);
+insert into t (id,a) values (789,48);
+insert into t (id,a) values (789,49);
+insert into t (id,a) values (789,50);
+insert into t (id,a) values (789,51);
+insert into t (id,a) values (789,52);
+insert into t (id,a) values (789,53);
+insert into t (id,a) values (789,54);
+insert into t (id,a) values (789,55);
+insert into t (id,a) values (789,56);
+insert into t (id,a) values (789,57);
+insert into t (id,a) values (789,58);
+insert into t (id,a) values (789,59);
+insert into t (id,a) values (789,60);
+insert into t (id,a) values (789,61);
+insert into t (id,a) values (789,62);
+insert into t (id,a) values (789,63);
+insert into t (id,a) values (789,64);
+insert into t (id,a) values (789,65);
+insert into t (id,a) values (789,66);
+insert into t (id,a) values (789,67);
+insert into t (id,a) values (789,68);
+insert into t (id,a) values (789,69);
+insert into t (id,a) values (789,70);
+insert into t (id,a) values (789,71);
+insert into t (id,a) values (789,72);
+insert into t (id,a) values (789,73);
+insert into t (id,a) values (789,74);
+insert into t (id,a) values (789,75);
+insert into t (id,a) values (789,76);
+insert into t (id,a) values (789,77);
+insert into t (id,a) values (789,78);
+insert into t (id,a) values (789,79);
+insert into t (id,a) values (789,80);
+insert into t (id,a) values (789,81);
+insert into t (id,a) values (789,82);
+insert into t (id,a) values (789,83);
+insert into t (id,a) values (789,84);
+insert into t (id,a) values (789,85);
+insert into t (id,a) values (789,86);
+insert into t (id,a) values (789,87);
+insert into t (id,a) values (789,88);
+insert into t (id,a) values (789,89);
+insert into t (id,a) values (789,90);
+insert into t (id,a) values (789,91);
+insert into t (id,a) values (789,92);
+insert into t (id,a) values (789,93);
+insert into t (id,a) values (789,94);
+insert into t (id,a) values (789,95);
+insert into t (id,a) values (789,96);
+insert into t (id,a) values (789,97);
+insert into t (id,a) values (789,98);
+insert into t (id,a) values (789,99);
+insert into t (id,a) values (790,0);
+insert into t (id,a) values (790,1);
+insert into t (id,a) values (790,2);
+insert into t (id,a) values (790,3);
+insert into t (id,a) values (790,4);
+insert into t (id,a) values (790,5);
+insert into t (id,a) values (790,6);
+insert into t (id,a) values (790,7);
+insert into t (id,a) values (790,8);
+insert into t (id,a) values (790,9);
+insert into t (id,a) values (790,10);
+insert into t (id,a) values (790,11);
+insert into t (id,a) values (790,12);
+insert into t (id,a) values (790,13);
+insert into t (id,a) values (790,14);
+insert into t (id,a) values (790,15);
+insert into t (id,a) values (790,16);
+insert into t (id,a) values (790,17);
+insert into t (id,a) values (790,18);
+insert into t (id,a) values (790,19);
+insert into t (id,a) values (790,20);
+insert into t (id,a) values (790,21);
+insert into t (id,a) values (790,22);
+insert into t (id,a) values (790,23);
+insert into t (id,a) values (790,24);
+insert into t (id,a) values (790,25);
+insert into t (id,a) values (790,26);
+insert into t (id,a) values (790,27);
+insert into t (id,a) values (790,28);
+insert into t (id,a) values (790,29);
+insert into t (id,a) values (790,30);
+insert into t (id,a) values (790,31);
+insert into t (id,a) values (790,32);
+insert into t (id,a) values (790,33);
+insert into t (id,a) values (790,34);
+insert into t (id,a) values (790,35);
+insert into t (id,a) values (790,36);
+insert into t (id,a) values (790,37);
+insert into t (id,a) values (790,38);
+insert into t (id,a) values (790,39);
+insert into t (id,a) values (790,40);
+insert into t (id,a) values (790,41);
+insert into t (id,a) values (790,42);
+insert into t (id,a) values (790,43);
+insert into t (id,a) values (790,44);
+insert into t (id,a) values (790,45);
+insert into t (id,a) values (790,46);
+insert into t (id,a) values (790,47);
+insert into t (id,a) values (790,48);
+insert into t (id,a) values (790,49);
+insert into t (id,a) values (790,50);
+insert into t (id,a) values (790,51);
+insert into t (id,a) values (790,52);
+insert into t (id,a) values (790,53);
+insert into t (id,a) values (790,54);
+insert into t (id,a) values (790,55);
+insert into t (id,a) values (790,56);
+insert into t (id,a) values (790,57);
+insert into t (id,a) values (790,58);
+insert into t (id,a) values (790,59);
+insert into t (id,a) values (790,60);
+insert into t (id,a) values (790,61);
+insert into t (id,a) values (790,62);
+insert into t (id,a) values (790,63);
+insert into t (id,a) values (790,64);
+insert into t (id,a) values (790,65);
+insert into t (id,a) values (790,66);
+insert into t (id,a) values (790,67);
+insert into t (id,a) values (790,68);
+insert into t (id,a) values (790,69);
+insert into t (id,a) values (790,70);
+insert into t (id,a) values (790,71);
+insert into t (id,a) values (790,72);
+insert into t (id,a) values (790,73);
+insert into t (id,a) values (790,74);
+insert into t (id,a) values (790,75);
+insert into t (id,a) values (790,76);
+insert into t (id,a) values (790,77);
+insert into t (id,a) values (790,78);
+insert into t (id,a) values (790,79);
+insert into t (id,a) values (790,80);
+insert into t (id,a) values (790,81);
+insert into t (id,a) values (790,82);
+insert into t (id,a) values (790,83);
+insert into t (id,a) values (790,84);
+insert into t (id,a) values (790,85);
+insert into t (id,a) values (790,86);
+insert into t (id,a) values (790,87);
+insert into t (id,a) values (790,88);
+insert into t (id,a) values (790,89);
+insert into t (id,a) values (790,90);
+insert into t (id,a) values (790,91);
+insert into t (id,a) values (790,92);
+insert into t (id,a) values (790,93);
+insert into t (id,a) values (790,94);
+insert into t (id,a) values (790,95);
+insert into t (id,a) values (790,96);
+insert into t (id,a) values (790,97);
+insert into t (id,a) values (790,98);
+insert into t (id,a) values (790,99);
+insert into t (id,a) values (791,0);
+insert into t (id,a) values (791,1);
+insert into t (id,a) values (791,2);
+insert into t (id,a) values (791,3);
+insert into t (id,a) values (791,4);
+insert into t (id,a) values (791,5);
+insert into t (id,a) values (791,6);
+insert into t (id,a) values (791,7);
+insert into t (id,a) values (791,8);
+insert into t (id,a) values (791,9);
+insert into t (id,a) values (791,10);
+insert into t (id,a) values (791,11);
+insert into t (id,a) values (791,12);
+insert into t (id,a) values (791,13);
+insert into t (id,a) values (791,14);
+insert into t (id,a) values (791,15);
+insert into t (id,a) values (791,16);
+insert into t (id,a) values (791,17);
+insert into t (id,a) values (791,18);
+insert into t (id,a) values (791,19);
+insert into t (id,a) values (791,20);
+insert into t (id,a) values (791,21);
+insert into t (id,a) values (791,22);
+insert into t (id,a) values (791,23);
+insert into t (id,a) values (791,24);
+insert into t (id,a) values (791,25);
+insert into t (id,a) values (791,26);
+insert into t (id,a) values (791,27);
+insert into t (id,a) values (791,28);
+insert into t (id,a) values (791,29);
+insert into t (id,a) values (791,30);
+insert into t (id,a) values (791,31);
+insert into t (id,a) values (791,32);
+insert into t (id,a) values (791,33);
+insert into t (id,a) values (791,34);
+insert into t (id,a) values (791,35);
+insert into t (id,a) values (791,36);
+insert into t (id,a) values (791,37);
+insert into t (id,a) values (791,38);
+insert into t (id,a) values (791,39);
+insert into t (id,a) values (791,40);
+insert into t (id,a) values (791,41);
+insert into t (id,a) values (791,42);
+insert into t (id,a) values (791,43);
+insert into t (id,a) values (791,44);
+insert into t (id,a) values (791,45);
+insert into t (id,a) values (791,46);
+insert into t (id,a) values (791,47);
+insert into t (id,a) values (791,48);
+insert into t (id,a) values (791,49);
+insert into t (id,a) values (791,50);
+insert into t (id,a) values (791,51);
+insert into t (id,a) values (791,52);
+insert into t (id,a) values (791,53);
+insert into t (id,a) values (791,54);
+insert into t (id,a) values (791,55);
+insert into t (id,a) values (791,56);
+insert into t (id,a) values (791,57);
+insert into t (id,a) values (791,58);
+insert into t (id,a) values (791,59);
+insert into t (id,a) values (791,60);
+insert into t (id,a) values (791,61);
+insert into t (id,a) values (791,62);
+insert into t (id,a) values (791,63);
+insert into t (id,a) values (791,64);
+insert into t (id,a) values (791,65);
+insert into t (id,a) values (791,66);
+insert into t (id,a) values (791,67);
+insert into t (id,a) values (791,68);
+insert into t (id,a) values (791,69);
+insert into t (id,a) values (791,70);
+insert into t (id,a) values (791,71);
+insert into t (id,a) values (791,72);
+insert into t (id,a) values (791,73);
+insert into t (id,a) values (791,74);
+insert into t (id,a) values (791,75);
+insert into t (id,a) values (791,76);
+insert into t (id,a) values (791,77);
+insert into t (id,a) values (791,78);
+insert into t (id,a) values (791,79);
+insert into t (id,a) values (791,80);
+insert into t (id,a) values (791,81);
+insert into t (id,a) values (791,82);
+insert into t (id,a) values (791,83);
+insert into t (id,a) values (791,84);
+insert into t (id,a) values (791,85);
+insert into t (id,a) values (791,86);
+insert into t (id,a) values (791,87);
+insert into t (id,a) values (791,88);
+insert into t (id,a) values (791,89);
+insert into t (id,a) values (791,90);
+insert into t (id,a) values (791,91);
+insert into t (id,a) values (791,92);
+insert into t (id,a) values (791,93);
+insert into t (id,a) values (791,94);
+insert into t (id,a) values (791,95);
+insert into t (id,a) values (791,96);
+insert into t (id,a) values (791,97);
+insert into t (id,a) values (791,98);
+insert into t (id,a) values (791,99);
+insert into t (id,a) values (792,0);
+insert into t (id,a) values (792,1);
+insert into t (id,a) values (792,2);
+insert into t (id,a) values (792,3);
+insert into t (id,a) values (792,4);
+insert into t (id,a) values (792,5);
+insert into t (id,a) values (792,6);
+insert into t (id,a) values (792,7);
+insert into t (id,a) values (792,8);
+insert into t (id,a) values (792,9);
+insert into t (id,a) values (792,10);
+insert into t (id,a) values (792,11);
+insert into t (id,a) values (792,12);
+insert into t (id,a) values (792,13);
+insert into t (id,a) values (792,14);
+insert into t (id,a) values (792,15);
+insert into t (id,a) values (792,16);
+insert into t (id,a) values (792,17);
+insert into t (id,a) values (792,18);
+insert into t (id,a) values (792,19);
+insert into t (id,a) values (792,20);
+insert into t (id,a) values (792,21);
+insert into t (id,a) values (792,22);
+insert into t (id,a) values (792,23);
+insert into t (id,a) values (792,24);
+insert into t (id,a) values (792,25);
+insert into t (id,a) values (792,26);
+insert into t (id,a) values (792,27);
+insert into t (id,a) values (792,28);
+insert into t (id,a) values (792,29);
+insert into t (id,a) values (792,30);
+insert into t (id,a) values (792,31);
+insert into t (id,a) values (792,32);
+insert into t (id,a) values (792,33);
+insert into t (id,a) values (792,34);
+insert into t (id,a) values (792,35);
+insert into t (id,a) values (792,36);
+insert into t (id,a) values (792,37);
+insert into t (id,a) values (792,38);
+insert into t (id,a) values (792,39);
+insert into t (id,a) values (792,40);
+insert into t (id,a) values (792,41);
+insert into t (id,a) values (792,42);
+insert into t (id,a) values (792,43);
+insert into t (id,a) values (792,44);
+insert into t (id,a) values (792,45);
+insert into t (id,a) values (792,46);
+insert into t (id,a) values (792,47);
+insert into t (id,a) values (792,48);
+insert into t (id,a) values (792,49);
+insert into t (id,a) values (792,50);
+insert into t (id,a) values (792,51);
+insert into t (id,a) values (792,52);
+insert into t (id,a) values (792,53);
+insert into t (id,a) values (792,54);
+insert into t (id,a) values (792,55);
+insert into t (id,a) values (792,56);
+insert into t (id,a) values (792,57);
+insert into t (id,a) values (792,58);
+insert into t (id,a) values (792,59);
+insert into t (id,a) values (792,60);
+insert into t (id,a) values (792,61);
+insert into t (id,a) values (792,62);
+insert into t (id,a) values (792,63);
+insert into t (id,a) values (792,64);
+insert into t (id,a) values (792,65);
+insert into t (id,a) values (792,66);
+insert into t (id,a) values (792,67);
+insert into t (id,a) values (792,68);
+insert into t (id,a) values (792,69);
+insert into t (id,a) values (792,70);
+insert into t (id,a) values (792,71);
+insert into t (id,a) values (792,72);
+insert into t (id,a) values (792,73);
+insert into t (id,a) values (792,74);
+insert into t (id,a) values (792,75);
+insert into t (id,a) values (792,76);
+insert into t (id,a) values (792,77);
+insert into t (id,a) values (792,78);
+insert into t (id,a) values (792,79);
+insert into t (id,a) values (792,80);
+insert into t (id,a) values (792,81);
+insert into t (id,a) values (792,82);
+insert into t (id,a) values (792,83);
+insert into t (id,a) values (792,84);
+insert into t (id,a) values (792,85);
+insert into t (id,a) values (792,86);
+insert into t (id,a) values (792,87);
+insert into t (id,a) values (792,88);
+insert into t (id,a) values (792,89);
+insert into t (id,a) values (792,90);
+insert into t (id,a) values (792,91);
+insert into t (id,a) values (792,92);
+insert into t (id,a) values (792,93);
+insert into t (id,a) values (792,94);
+insert into t (id,a) values (792,95);
+insert into t (id,a) values (792,96);
+insert into t (id,a) values (792,97);
+insert into t (id,a) values (792,98);
+insert into t (id,a) values (792,99);
+insert into t (id,a) values (793,0);
+insert into t (id,a) values (793,1);
+insert into t (id,a) values (793,2);
+insert into t (id,a) values (793,3);
+insert into t (id,a) values (793,4);
+insert into t (id,a) values (793,5);
+insert into t (id,a) values (793,6);
+insert into t (id,a) values (793,7);
+insert into t (id,a) values (793,8);
+insert into t (id,a) values (793,9);
+insert into t (id,a) values (793,10);
+insert into t (id,a) values (793,11);
+insert into t (id,a) values (793,12);
+insert into t (id,a) values (793,13);
+insert into t (id,a) values (793,14);
+insert into t (id,a) values (793,15);
+insert into t (id,a) values (793,16);
+insert into t (id,a) values (793,17);
+insert into t (id,a) values (793,18);
+insert into t (id,a) values (793,19);
+insert into t (id,a) values (793,20);
+insert into t (id,a) values (793,21);
+insert into t (id,a) values (793,22);
+insert into t (id,a) values (793,23);
+insert into t (id,a) values (793,24);
+insert into t (id,a) values (793,25);
+insert into t (id,a) values (793,26);
+insert into t (id,a) values (793,27);
+insert into t (id,a) values (793,28);
+insert into t (id,a) values (793,29);
+insert into t (id,a) values (793,30);
+insert into t (id,a) values (793,31);
+insert into t (id,a) values (793,32);
+insert into t (id,a) values (793,33);
+insert into t (id,a) values (793,34);
+insert into t (id,a) values (793,35);
+insert into t (id,a) values (793,36);
+insert into t (id,a) values (793,37);
+insert into t (id,a) values (793,38);
+insert into t (id,a) values (793,39);
+insert into t (id,a) values (793,40);
+insert into t (id,a) values (793,41);
+insert into t (id,a) values (793,42);
+insert into t (id,a) values (793,43);
+insert into t (id,a) values (793,44);
+insert into t (id,a) values (793,45);
+insert into t (id,a) values (793,46);
+insert into t (id,a) values (793,47);
+insert into t (id,a) values (793,48);
+insert into t (id,a) values (793,49);
+insert into t (id,a) values (793,50);
+insert into t (id,a) values (793,51);
+insert into t (id,a) values (793,52);
+insert into t (id,a) values (793,53);
+insert into t (id,a) values (793,54);
+insert into t (id,a) values (793,55);
+insert into t (id,a) values (793,56);
+insert into t (id,a) values (793,57);
+insert into t (id,a) values (793,58);
+insert into t (id,a) values (793,59);
+insert into t (id,a) values (793,60);
+insert into t (id,a) values (793,61);
+insert into t (id,a) values (793,62);
+insert into t (id,a) values (793,63);
+insert into t (id,a) values (793,64);
+insert into t (id,a) values (793,65);
+insert into t (id,a) values (793,66);
+insert into t (id,a) values (793,67);
+insert into t (id,a) values (793,68);
+insert into t (id,a) values (793,69);
+insert into t (id,a) values (793,70);
+insert into t (id,a) values (793,71);
+insert into t (id,a) values (793,72);
+insert into t (id,a) values (793,73);
+insert into t (id,a) values (793,74);
+insert into t (id,a) values (793,75);
+insert into t (id,a) values (793,76);
+insert into t (id,a) values (793,77);
+insert into t (id,a) values (793,78);
+insert into t (id,a) values (793,79);
+insert into t (id,a) values (793,80);
+insert into t (id,a) values (793,81);
+insert into t (id,a) values (793,82);
+insert into t (id,a) values (793,83);
+insert into t (id,a) values (793,84);
+insert into t (id,a) values (793,85);
+insert into t (id,a) values (793,86);
+insert into t (id,a) values (793,87);
+insert into t (id,a) values (793,88);
+insert into t (id,a) values (793,89);
+insert into t (id,a) values (793,90);
+insert into t (id,a) values (793,91);
+insert into t (id,a) values (793,92);
+insert into t (id,a) values (793,93);
+insert into t (id,a) values (793,94);
+insert into t (id,a) values (793,95);
+insert into t (id,a) values (793,96);
+insert into t (id,a) values (793,97);
+insert into t (id,a) values (793,98);
+insert into t (id,a) values (793,99);
+insert into t (id,a) values (794,0);
+insert into t (id,a) values (794,1);
+insert into t (id,a) values (794,2);
+insert into t (id,a) values (794,3);
+insert into t (id,a) values (794,4);
+insert into t (id,a) values (794,5);
+insert into t (id,a) values (794,6);
+insert into t (id,a) values (794,7);
+insert into t (id,a) values (794,8);
+insert into t (id,a) values (794,9);
+insert into t (id,a) values (794,10);
+insert into t (id,a) values (794,11);
+insert into t (id,a) values (794,12);
+insert into t (id,a) values (794,13);
+insert into t (id,a) values (794,14);
+insert into t (id,a) values (794,15);
+insert into t (id,a) values (794,16);
+insert into t (id,a) values (794,17);
+insert into t (id,a) values (794,18);
+insert into t (id,a) values (794,19);
+insert into t (id,a) values (794,20);
+insert into t (id,a) values (794,21);
+insert into t (id,a) values (794,22);
+insert into t (id,a) values (794,23);
+insert into t (id,a) values (794,24);
+insert into t (id,a) values (794,25);
+insert into t (id,a) values (794,26);
+insert into t (id,a) values (794,27);
+insert into t (id,a) values (794,28);
+insert into t (id,a) values (794,29);
+insert into t (id,a) values (794,30);
+insert into t (id,a) values (794,31);
+insert into t (id,a) values (794,32);
+insert into t (id,a) values (794,33);
+insert into t (id,a) values (794,34);
+insert into t (id,a) values (794,35);
+insert into t (id,a) values (794,36);
+insert into t (id,a) values (794,37);
+insert into t (id,a) values (794,38);
+insert into t (id,a) values (794,39);
+insert into t (id,a) values (794,40);
+insert into t (id,a) values (794,41);
+insert into t (id,a) values (794,42);
+insert into t (id,a) values (794,43);
+insert into t (id,a) values (794,44);
+insert into t (id,a) values (794,45);
+insert into t (id,a) values (794,46);
+insert into t (id,a) values (794,47);
+insert into t (id,a) values (794,48);
+insert into t (id,a) values (794,49);
+insert into t (id,a) values (794,50);
+insert into t (id,a) values (794,51);
+insert into t (id,a) values (794,52);
+insert into t (id,a) values (794,53);
+insert into t (id,a) values (794,54);
+insert into t (id,a) values (794,55);
+insert into t (id,a) values (794,56);
+insert into t (id,a) values (794,57);
+insert into t (id,a) values (794,58);
+insert into t (id,a) values (794,59);
+insert into t (id,a) values (794,60);
+insert into t (id,a) values (794,61);
+insert into t (id,a) values (794,62);
+insert into t (id,a) values (794,63);
+insert into t (id,a) values (794,64);
+insert into t (id,a) values (794,65);
+insert into t (id,a) values (794,66);
+insert into t (id,a) values (794,67);
+insert into t (id,a) values (794,68);
+insert into t (id,a) values (794,69);
+insert into t (id,a) values (794,70);
+insert into t (id,a) values (794,71);
+insert into t (id,a) values (794,72);
+insert into t (id,a) values (794,73);
+insert into t (id,a) values (794,74);
+insert into t (id,a) values (794,75);
+insert into t (id,a) values (794,76);
+insert into t (id,a) values (794,77);
+insert into t (id,a) values (794,78);
+insert into t (id,a) values (794,79);
+insert into t (id,a) values (794,80);
+insert into t (id,a) values (794,81);
+insert into t (id,a) values (794,82);
+insert into t (id,a) values (794,83);
+insert into t (id,a) values (794,84);
+insert into t (id,a) values (794,85);
+insert into t (id,a) values (794,86);
+insert into t (id,a) values (794,87);
+insert into t (id,a) values (794,88);
+insert into t (id,a) values (794,89);
+insert into t (id,a) values (794,90);
+insert into t (id,a) values (794,91);
+insert into t (id,a) values (794,92);
+insert into t (id,a) values (794,93);
+insert into t (id,a) values (794,94);
+insert into t (id,a) values (794,95);
+insert into t (id,a) values (794,96);
+insert into t (id,a) values (794,97);
+insert into t (id,a) values (794,98);
+insert into t (id,a) values (794,99);
+insert into t (id,a) values (795,0);
+insert into t (id,a) values (795,1);
+insert into t (id,a) values (795,2);
+insert into t (id,a) values (795,3);
+insert into t (id,a) values (795,4);
+insert into t (id,a) values (795,5);
+insert into t (id,a) values (795,6);
+insert into t (id,a) values (795,7);
+insert into t (id,a) values (795,8);
+insert into t (id,a) values (795,9);
+insert into t (id,a) values (795,10);
+insert into t (id,a) values (795,11);
+insert into t (id,a) values (795,12);
+insert into t (id,a) values (795,13);
+insert into t (id,a) values (795,14);
+insert into t (id,a) values (795,15);
+insert into t (id,a) values (795,16);
+insert into t (id,a) values (795,17);
+insert into t (id,a) values (795,18);
+insert into t (id,a) values (795,19);
+insert into t (id,a) values (795,20);
+insert into t (id,a) values (795,21);
+insert into t (id,a) values (795,22);
+insert into t (id,a) values (795,23);
+insert into t (id,a) values (795,24);
+insert into t (id,a) values (795,25);
+insert into t (id,a) values (795,26);
+insert into t (id,a) values (795,27);
+insert into t (id,a) values (795,28);
+insert into t (id,a) values (795,29);
+insert into t (id,a) values (795,30);
+insert into t (id,a) values (795,31);
+insert into t (id,a) values (795,32);
+insert into t (id,a) values (795,33);
+insert into t (id,a) values (795,34);
+insert into t (id,a) values (795,35);
+insert into t (id,a) values (795,36);
+insert into t (id,a) values (795,37);
+insert into t (id,a) values (795,38);
+insert into t (id,a) values (795,39);
+insert into t (id,a) values (795,40);
+insert into t (id,a) values (795,41);
+insert into t (id,a) values (795,42);
+insert into t (id,a) values (795,43);
+insert into t (id,a) values (795,44);
+insert into t (id,a) values (795,45);
+insert into t (id,a) values (795,46);
+insert into t (id,a) values (795,47);
+insert into t (id,a) values (795,48);
+insert into t (id,a) values (795,49);
+insert into t (id,a) values (795,50);
+insert into t (id,a) values (795,51);
+insert into t (id,a) values (795,52);
+insert into t (id,a) values (795,53);
+insert into t (id,a) values (795,54);
+insert into t (id,a) values (795,55);
+insert into t (id,a) values (795,56);
+insert into t (id,a) values (795,57);
+insert into t (id,a) values (795,58);
+insert into t (id,a) values (795,59);
+insert into t (id,a) values (795,60);
+insert into t (id,a) values (795,61);
+insert into t (id,a) values (795,62);
+insert into t (id,a) values (795,63);
+insert into t (id,a) values (795,64);
+insert into t (id,a) values (795,65);
+insert into t (id,a) values (795,66);
+insert into t (id,a) values (795,67);
+insert into t (id,a) values (795,68);
+insert into t (id,a) values (795,69);
+insert into t (id,a) values (795,70);
+insert into t (id,a) values (795,71);
+insert into t (id,a) values (795,72);
+insert into t (id,a) values (795,73);
+insert into t (id,a) values (795,74);
+insert into t (id,a) values (795,75);
+insert into t (id,a) values (795,76);
+insert into t (id,a) values (795,77);
+insert into t (id,a) values (795,78);
+insert into t (id,a) values (795,79);
+insert into t (id,a) values (795,80);
+insert into t (id,a) values (795,81);
+insert into t (id,a) values (795,82);
+insert into t (id,a) values (795,83);
+insert into t (id,a) values (795,84);
+insert into t (id,a) values (795,85);
+insert into t (id,a) values (795,86);
+insert into t (id,a) values (795,87);
+insert into t (id,a) values (795,88);
+insert into t (id,a) values (795,89);
+insert into t (id,a) values (795,90);
+insert into t (id,a) values (795,91);
+insert into t (id,a) values (795,92);
+insert into t (id,a) values (795,93);
+insert into t (id,a) values (795,94);
+insert into t (id,a) values (795,95);
+insert into t (id,a) values (795,96);
+insert into t (id,a) values (795,97);
+insert into t (id,a) values (795,98);
+insert into t (id,a) values (795,99);
+insert into t (id,a) values (796,0);
+insert into t (id,a) values (796,1);
+insert into t (id,a) values (796,2);
+insert into t (id,a) values (796,3);
+insert into t (id,a) values (796,4);
+insert into t (id,a) values (796,5);
+insert into t (id,a) values (796,6);
+insert into t (id,a) values (796,7);
+insert into t (id,a) values (796,8);
+insert into t (id,a) values (796,9);
+insert into t (id,a) values (796,10);
+insert into t (id,a) values (796,11);
+insert into t (id,a) values (796,12);
+insert into t (id,a) values (796,13);
+insert into t (id,a) values (796,14);
+insert into t (id,a) values (796,15);
+insert into t (id,a) values (796,16);
+insert into t (id,a) values (796,17);
+insert into t (id,a) values (796,18);
+insert into t (id,a) values (796,19);
+insert into t (id,a) values (796,20);
+insert into t (id,a) values (796,21);
+insert into t (id,a) values (796,22);
+insert into t (id,a) values (796,23);
+insert into t (id,a) values (796,24);
+insert into t (id,a) values (796,25);
+insert into t (id,a) values (796,26);
+insert into t (id,a) values (796,27);
+insert into t (id,a) values (796,28);
+insert into t (id,a) values (796,29);
+insert into t (id,a) values (796,30);
+insert into t (id,a) values (796,31);
+insert into t (id,a) values (796,32);
+insert into t (id,a) values (796,33);
+insert into t (id,a) values (796,34);
+insert into t (id,a) values (796,35);
+insert into t (id,a) values (796,36);
+insert into t (id,a) values (796,37);
+insert into t (id,a) values (796,38);
+insert into t (id,a) values (796,39);
+insert into t (id,a) values (796,40);
+insert into t (id,a) values (796,41);
+insert into t (id,a) values (796,42);
+insert into t (id,a) values (796,43);
+insert into t (id,a) values (796,44);
+insert into t (id,a) values (796,45);
+insert into t (id,a) values (796,46);
+insert into t (id,a) values (796,47);
+insert into t (id,a) values (796,48);
+insert into t (id,a) values (796,49);
+insert into t (id,a) values (796,50);
+insert into t (id,a) values (796,51);
+insert into t (id,a) values (796,52);
+insert into t (id,a) values (796,53);
+insert into t (id,a) values (796,54);
+insert into t (id,a) values (796,55);
+insert into t (id,a) values (796,56);
+insert into t (id,a) values (796,57);
+insert into t (id,a) values (796,58);
+insert into t (id,a) values (796,59);
+insert into t (id,a) values (796,60);
+insert into t (id,a) values (796,61);
+insert into t (id,a) values (796,62);
+insert into t (id,a) values (796,63);
+insert into t (id,a) values (796,64);
+insert into t (id,a) values (796,65);
+insert into t (id,a) values (796,66);
+insert into t (id,a) values (796,67);
+insert into t (id,a) values (796,68);
+insert into t (id,a) values (796,69);
+insert into t (id,a) values (796,70);
+insert into t (id,a) values (796,71);
+insert into t (id,a) values (796,72);
+insert into t (id,a) values (796,73);
+insert into t (id,a) values (796,74);
+insert into t (id,a) values (796,75);
+insert into t (id,a) values (796,76);
+insert into t (id,a) values (796,77);
+insert into t (id,a) values (796,78);
+insert into t (id,a) values (796,79);
+insert into t (id,a) values (796,80);
+insert into t (id,a) values (796,81);
+insert into t (id,a) values (796,82);
+insert into t (id,a) values (796,83);
+insert into t (id,a) values (796,84);
+insert into t (id,a) values (796,85);
+insert into t (id,a) values (796,86);
+insert into t (id,a) values (796,87);
+insert into t (id,a) values (796,88);
+insert into t (id,a) values (796,89);
+insert into t (id,a) values (796,90);
+insert into t (id,a) values (796,91);
+insert into t (id,a) values (796,92);
+insert into t (id,a) values (796,93);
+insert into t (id,a) values (796,94);
+insert into t (id,a) values (796,95);
+insert into t (id,a) values (796,96);
+insert into t (id,a) values (796,97);
+insert into t (id,a) values (796,98);
+insert into t (id,a) values (796,99);
+insert into t (id,a) values (797,0);
+insert into t (id,a) values (797,1);
+insert into t (id,a) values (797,2);
+insert into t (id,a) values (797,3);
+insert into t (id,a) values (797,4);
+insert into t (id,a) values (797,5);
+insert into t (id,a) values (797,6);
+insert into t (id,a) values (797,7);
+insert into t (id,a) values (797,8);
+insert into t (id,a) values (797,9);
+insert into t (id,a) values (797,10);
+insert into t (id,a) values (797,11);
+insert into t (id,a) values (797,12);
+insert into t (id,a) values (797,13);
+insert into t (id,a) values (797,14);
+insert into t (id,a) values (797,15);
+insert into t (id,a) values (797,16);
+insert into t (id,a) values (797,17);
+insert into t (id,a) values (797,18);
+insert into t (id,a) values (797,19);
+insert into t (id,a) values (797,20);
+insert into t (id,a) values (797,21);
+insert into t (id,a) values (797,22);
+insert into t (id,a) values (797,23);
+insert into t (id,a) values (797,24);
+insert into t (id,a) values (797,25);
+insert into t (id,a) values (797,26);
+insert into t (id,a) values (797,27);
+insert into t (id,a) values (797,28);
+insert into t (id,a) values (797,29);
+insert into t (id,a) values (797,30);
+insert into t (id,a) values (797,31);
+insert into t (id,a) values (797,32);
+insert into t (id,a) values (797,33);
+insert into t (id,a) values (797,34);
+insert into t (id,a) values (797,35);
+insert into t (id,a) values (797,36);
+insert into t (id,a) values (797,37);
+insert into t (id,a) values (797,38);
+insert into t (id,a) values (797,39);
+insert into t (id,a) values (797,40);
+insert into t (id,a) values (797,41);
+insert into t (id,a) values (797,42);
+insert into t (id,a) values (797,43);
+insert into t (id,a) values (797,44);
+insert into t (id,a) values (797,45);
+insert into t (id,a) values (797,46);
+insert into t (id,a) values (797,47);
+insert into t (id,a) values (797,48);
+insert into t (id,a) values (797,49);
+insert into t (id,a) values (797,50);
+insert into t (id,a) values (797,51);
+insert into t (id,a) values (797,52);
+insert into t (id,a) values (797,53);
+insert into t (id,a) values (797,54);
+insert into t (id,a) values (797,55);
+insert into t (id,a) values (797,56);
+insert into t (id,a) values (797,57);
+insert into t (id,a) values (797,58);
+insert into t (id,a) values (797,59);
+insert into t (id,a) values (797,60);
+insert into t (id,a) values (797,61);
+insert into t (id,a) values (797,62);
+insert into t (id,a) values (797,63);
+insert into t (id,a) values (797,64);
+insert into t (id,a) values (797,65);
+insert into t (id,a) values (797,66);
+insert into t (id,a) values (797,67);
+insert into t (id,a) values (797,68);
+insert into t (id,a) values (797,69);
+insert into t (id,a) values (797,70);
+insert into t (id,a) values (797,71);
+insert into t (id,a) values (797,72);
+insert into t (id,a) values (797,73);
+insert into t (id,a) values (797,74);
+insert into t (id,a) values (797,75);
+insert into t (id,a) values (797,76);
+insert into t (id,a) values (797,77);
+insert into t (id,a) values (797,78);
+insert into t (id,a) values (797,79);
+insert into t (id,a) values (797,80);
+insert into t (id,a) values (797,81);
+insert into t (id,a) values (797,82);
+insert into t (id,a) values (797,83);
+insert into t (id,a) values (797,84);
+insert into t (id,a) values (797,85);
+insert into t (id,a) values (797,86);
+insert into t (id,a) values (797,87);
+insert into t (id,a) values (797,88);
+insert into t (id,a) values (797,89);
+insert into t (id,a) values (797,90);
+insert into t (id,a) values (797,91);
+insert into t (id,a) values (797,92);
+insert into t (id,a) values (797,93);
+insert into t (id,a) values (797,94);
+insert into t (id,a) values (797,95);
+insert into t (id,a) values (797,96);
+insert into t (id,a) values (797,97);
+insert into t (id,a) values (797,98);
+insert into t (id,a) values (797,99);
+insert into t (id,a) values (798,0);
+insert into t (id,a) values (798,1);
+insert into t (id,a) values (798,2);
+insert into t (id,a) values (798,3);
+insert into t (id,a) values (798,4);
+insert into t (id,a) values (798,5);
+insert into t (id,a) values (798,6);
+insert into t (id,a) values (798,7);
+insert into t (id,a) values (798,8);
+insert into t (id,a) values (798,9);
+insert into t (id,a) values (798,10);
+insert into t (id,a) values (798,11);
+insert into t (id,a) values (798,12);
+insert into t (id,a) values (798,13);
+insert into t (id,a) values (798,14);
+insert into t (id,a) values (798,15);
+insert into t (id,a) values (798,16);
+insert into t (id,a) values (798,17);
+insert into t (id,a) values (798,18);
+insert into t (id,a) values (798,19);
+insert into t (id,a) values (798,20);
+insert into t (id,a) values (798,21);
+insert into t (id,a) values (798,22);
+insert into t (id,a) values (798,23);
+insert into t (id,a) values (798,24);
+insert into t (id,a) values (798,25);
+insert into t (id,a) values (798,26);
+insert into t (id,a) values (798,27);
+insert into t (id,a) values (798,28);
+insert into t (id,a) values (798,29);
+insert into t (id,a) values (798,30);
+insert into t (id,a) values (798,31);
+insert into t (id,a) values (798,32);
+insert into t (id,a) values (798,33);
+insert into t (id,a) values (798,34);
+insert into t (id,a) values (798,35);
+insert into t (id,a) values (798,36);
+insert into t (id,a) values (798,37);
+insert into t (id,a) values (798,38);
+insert into t (id,a) values (798,39);
+insert into t (id,a) values (798,40);
+insert into t (id,a) values (798,41);
+insert into t (id,a) values (798,42);
+insert into t (id,a) values (798,43);
+insert into t (id,a) values (798,44);
+insert into t (id,a) values (798,45);
+insert into t (id,a) values (798,46);
+insert into t (id,a) values (798,47);
+insert into t (id,a) values (798,48);
+insert into t (id,a) values (798,49);
+insert into t (id,a) values (798,50);
+insert into t (id,a) values (798,51);
+insert into t (id,a) values (798,52);
+insert into t (id,a) values (798,53);
+insert into t (id,a) values (798,54);
+insert into t (id,a) values (798,55);
+insert into t (id,a) values (798,56);
+insert into t (id,a) values (798,57);
+insert into t (id,a) values (798,58);
+insert into t (id,a) values (798,59);
+insert into t (id,a) values (798,60);
+insert into t (id,a) values (798,61);
+insert into t (id,a) values (798,62);
+insert into t (id,a) values (798,63);
+insert into t (id,a) values (798,64);
+insert into t (id,a) values (798,65);
+insert into t (id,a) values (798,66);
+insert into t (id,a) values (798,67);
+insert into t (id,a) values (798,68);
+insert into t (id,a) values (798,69);
+insert into t (id,a) values (798,70);
+insert into t (id,a) values (798,71);
+insert into t (id,a) values (798,72);
+insert into t (id,a) values (798,73);
+insert into t (id,a) values (798,74);
+insert into t (id,a) values (798,75);
+insert into t (id,a) values (798,76);
+insert into t (id,a) values (798,77);
+insert into t (id,a) values (798,78);
+insert into t (id,a) values (798,79);
+insert into t (id,a) values (798,80);
+insert into t (id,a) values (798,81);
+insert into t (id,a) values (798,82);
+insert into t (id,a) values (798,83);
+insert into t (id,a) values (798,84);
+insert into t (id,a) values (798,85);
+insert into t (id,a) values (798,86);
+insert into t (id,a) values (798,87);
+insert into t (id,a) values (798,88);
+insert into t (id,a) values (798,89);
+insert into t (id,a) values (798,90);
+insert into t (id,a) values (798,91);
+insert into t (id,a) values (798,92);
+insert into t (id,a) values (798,93);
+insert into t (id,a) values (798,94);
+insert into t (id,a) values (798,95);
+insert into t (id,a) values (798,96);
+insert into t (id,a) values (798,97);
+insert into t (id,a) values (798,98);
+insert into t (id,a) values (798,99);
+insert into t (id,a) values (799,0);
+insert into t (id,a) values (799,1);
+insert into t (id,a) values (799,2);
+insert into t (id,a) values (799,3);
+insert into t (id,a) values (799,4);
+insert into t (id,a) values (799,5);
+insert into t (id,a) values (799,6);
+insert into t (id,a) values (799,7);
+insert into t (id,a) values (799,8);
+insert into t (id,a) values (799,9);
+insert into t (id,a) values (799,10);
+insert into t (id,a) values (799,11);
+insert into t (id,a) values (799,12);
+insert into t (id,a) values (799,13);
+insert into t (id,a) values (799,14);
+insert into t (id,a) values (799,15);
+insert into t (id,a) values (799,16);
+insert into t (id,a) values (799,17);
+insert into t (id,a) values (799,18);
+insert into t (id,a) values (799,19);
+insert into t (id,a) values (799,20);
+insert into t (id,a) values (799,21);
+insert into t (id,a) values (799,22);
+insert into t (id,a) values (799,23);
+insert into t (id,a) values (799,24);
+insert into t (id,a) values (799,25);
+insert into t (id,a) values (799,26);
+insert into t (id,a) values (799,27);
+insert into t (id,a) values (799,28);
+insert into t (id,a) values (799,29);
+insert into t (id,a) values (799,30);
+insert into t (id,a) values (799,31);
+insert into t (id,a) values (799,32);
+insert into t (id,a) values (799,33);
+insert into t (id,a) values (799,34);
+insert into t (id,a) values (799,35);
+insert into t (id,a) values (799,36);
+insert into t (id,a) values (799,37);
+insert into t (id,a) values (799,38);
+insert into t (id,a) values (799,39);
+insert into t (id,a) values (799,40);
+insert into t (id,a) values (799,41);
+insert into t (id,a) values (799,42);
+insert into t (id,a) values (799,43);
+insert into t (id,a) values (799,44);
+insert into t (id,a) values (799,45);
+insert into t (id,a) values (799,46);
+insert into t (id,a) values (799,47);
+insert into t (id,a) values (799,48);
+insert into t (id,a) values (799,49);
+insert into t (id,a) values (799,50);
+insert into t (id,a) values (799,51);
+insert into t (id,a) values (799,52);
+insert into t (id,a) values (799,53);
+insert into t (id,a) values (799,54);
+insert into t (id,a) values (799,55);
+insert into t (id,a) values (799,56);
+insert into t (id,a) values (799,57);
+insert into t (id,a) values (799,58);
+insert into t (id,a) values (799,59);
+insert into t (id,a) values (799,60);
+insert into t (id,a) values (799,61);
+insert into t (id,a) values (799,62);
+insert into t (id,a) values (799,63);
+insert into t (id,a) values (799,64);
+insert into t (id,a) values (799,65);
+insert into t (id,a) values (799,66);
+insert into t (id,a) values (799,67);
+insert into t (id,a) values (799,68);
+insert into t (id,a) values (799,69);
+insert into t (id,a) values (799,70);
+insert into t (id,a) values (799,71);
+insert into t (id,a) values (799,72);
+insert into t (id,a) values (799,73);
+insert into t (id,a) values (799,74);
+insert into t (id,a) values (799,75);
+insert into t (id,a) values (799,76);
+insert into t (id,a) values (799,77);
+insert into t (id,a) values (799,78);
+insert into t (id,a) values (799,79);
+insert into t (id,a) values (799,80);
+insert into t (id,a) values (799,81);
+insert into t (id,a) values (799,82);
+insert into t (id,a) values (799,83);
+insert into t (id,a) values (799,84);
+insert into t (id,a) values (799,85);
+insert into t (id,a) values (799,86);
+insert into t (id,a) values (799,87);
+insert into t (id,a) values (799,88);
+insert into t (id,a) values (799,89);
+insert into t (id,a) values (799,90);
+insert into t (id,a) values (799,91);
+insert into t (id,a) values (799,92);
+insert into t (id,a) values (799,93);
+insert into t (id,a) values (799,94);
+insert into t (id,a) values (799,95);
+insert into t (id,a) values (799,96);
+insert into t (id,a) values (799,97);
+insert into t (id,a) values (799,98);
+insert into t (id,a) values (799,99);
+insert into t (id,a) values (800,0);
+insert into t (id,a) values (800,1);
+insert into t (id,a) values (800,2);
+insert into t (id,a) values (800,3);
+insert into t (id,a) values (800,4);
+insert into t (id,a) values (800,5);
+insert into t (id,a) values (800,6);
+insert into t (id,a) values (800,7);
+insert into t (id,a) values (800,8);
+insert into t (id,a) values (800,9);
+insert into t (id,a) values (800,10);
+insert into t (id,a) values (800,11);
+insert into t (id,a) values (800,12);
+insert into t (id,a) values (800,13);
+insert into t (id,a) values (800,14);
+insert into t (id,a) values (800,15);
+insert into t (id,a) values (800,16);
+insert into t (id,a) values (800,17);
+insert into t (id,a) values (800,18);
+insert into t (id,a) values (800,19);
+insert into t (id,a) values (800,20);
+insert into t (id,a) values (800,21);
+insert into t (id,a) values (800,22);
+insert into t (id,a) values (800,23);
+insert into t (id,a) values (800,24);
+insert into t (id,a) values (800,25);
+insert into t (id,a) values (800,26);
+insert into t (id,a) values (800,27);
+insert into t (id,a) values (800,28);
+insert into t (id,a) values (800,29);
+insert into t (id,a) values (800,30);
+insert into t (id,a) values (800,31);
+insert into t (id,a) values (800,32);
+insert into t (id,a) values (800,33);
+insert into t (id,a) values (800,34);
+insert into t (id,a) values (800,35);
+insert into t (id,a) values (800,36);
+insert into t (id,a) values (800,37);
+insert into t (id,a) values (800,38);
+insert into t (id,a) values (800,39);
+insert into t (id,a) values (800,40);
+insert into t (id,a) values (800,41);
+insert into t (id,a) values (800,42);
+insert into t (id,a) values (800,43);
+insert into t (id,a) values (800,44);
+insert into t (id,a) values (800,45);
+insert into t (id,a) values (800,46);
+insert into t (id,a) values (800,47);
+insert into t (id,a) values (800,48);
+insert into t (id,a) values (800,49);
+insert into t (id,a) values (800,50);
+insert into t (id,a) values (800,51);
+insert into t (id,a) values (800,52);
+insert into t (id,a) values (800,53);
+insert into t (id,a) values (800,54);
+insert into t (id,a) values (800,55);
+insert into t (id,a) values (800,56);
+insert into t (id,a) values (800,57);
+insert into t (id,a) values (800,58);
+insert into t (id,a) values (800,59);
+insert into t (id,a) values (800,60);
+insert into t (id,a) values (800,61);
+insert into t (id,a) values (800,62);
+insert into t (id,a) values (800,63);
+insert into t (id,a) values (800,64);
+insert into t (id,a) values (800,65);
+insert into t (id,a) values (800,66);
+insert into t (id,a) values (800,67);
+insert into t (id,a) values (800,68);
+insert into t (id,a) values (800,69);
+insert into t (id,a) values (800,70);
+insert into t (id,a) values (800,71);
+insert into t (id,a) values (800,72);
+insert into t (id,a) values (800,73);
+insert into t (id,a) values (800,74);
+insert into t (id,a) values (800,75);
+insert into t (id,a) values (800,76);
+insert into t (id,a) values (800,77);
+insert into t (id,a) values (800,78);
+insert into t (id,a) values (800,79);
+insert into t (id,a) values (800,80);
+insert into t (id,a) values (800,81);
+insert into t (id,a) values (800,82);
+insert into t (id,a) values (800,83);
+insert into t (id,a) values (800,84);
+insert into t (id,a) values (800,85);
+insert into t (id,a) values (800,86);
+insert into t (id,a) values (800,87);
+insert into t (id,a) values (800,88);
+insert into t (id,a) values (800,89);
+insert into t (id,a) values (800,90);
+insert into t (id,a) values (800,91);
+insert into t (id,a) values (800,92);
+insert into t (id,a) values (800,93);
+insert into t (id,a) values (800,94);
+insert into t (id,a) values (800,95);
+insert into t (id,a) values (800,96);
+insert into t (id,a) values (800,97);
+insert into t (id,a) values (800,98);
+insert into t (id,a) values (800,99);
+insert into t (id,a) values (801,0);
+insert into t (id,a) values (801,1);
+insert into t (id,a) values (801,2);
+insert into t (id,a) values (801,3);
+insert into t (id,a) values (801,4);
+insert into t (id,a) values (801,5);
+insert into t (id,a) values (801,6);
+insert into t (id,a) values (801,7);
+insert into t (id,a) values (801,8);
+insert into t (id,a) values (801,9);
+insert into t (id,a) values (801,10);
+insert into t (id,a) values (801,11);
+insert into t (id,a) values (801,12);
+insert into t (id,a) values (801,13);
+insert into t (id,a) values (801,14);
+insert into t (id,a) values (801,15);
+insert into t (id,a) values (801,16);
+insert into t (id,a) values (801,17);
+insert into t (id,a) values (801,18);
+insert into t (id,a) values (801,19);
+insert into t (id,a) values (801,20);
+insert into t (id,a) values (801,21);
+insert into t (id,a) values (801,22);
+insert into t (id,a) values (801,23);
+insert into t (id,a) values (801,24);
+insert into t (id,a) values (801,25);
+insert into t (id,a) values (801,26);
+insert into t (id,a) values (801,27);
+insert into t (id,a) values (801,28);
+insert into t (id,a) values (801,29);
+insert into t (id,a) values (801,30);
+insert into t (id,a) values (801,31);
+insert into t (id,a) values (801,32);
+insert into t (id,a) values (801,33);
+insert into t (id,a) values (801,34);
+insert into t (id,a) values (801,35);
+insert into t (id,a) values (801,36);
+insert into t (id,a) values (801,37);
+insert into t (id,a) values (801,38);
+insert into t (id,a) values (801,39);
+insert into t (id,a) values (801,40);
+insert into t (id,a) values (801,41);
+insert into t (id,a) values (801,42);
+insert into t (id,a) values (801,43);
+insert into t (id,a) values (801,44);
+insert into t (id,a) values (801,45);
+insert into t (id,a) values (801,46);
+insert into t (id,a) values (801,47);
+insert into t (id,a) values (801,48);
+insert into t (id,a) values (801,49);
+insert into t (id,a) values (801,50);
+insert into t (id,a) values (801,51);
+insert into t (id,a) values (801,52);
+insert into t (id,a) values (801,53);
+insert into t (id,a) values (801,54);
+insert into t (id,a) values (801,55);
+insert into t (id,a) values (801,56);
+insert into t (id,a) values (801,57);
+insert into t (id,a) values (801,58);
+insert into t (id,a) values (801,59);
+insert into t (id,a) values (801,60);
+insert into t (id,a) values (801,61);
+insert into t (id,a) values (801,62);
+insert into t (id,a) values (801,63);
+insert into t (id,a) values (801,64);
+insert into t (id,a) values (801,65);
+insert into t (id,a) values (801,66);
+insert into t (id,a) values (801,67);
+insert into t (id,a) values (801,68);
+insert into t (id,a) values (801,69);
+insert into t (id,a) values (801,70);
+insert into t (id,a) values (801,71);
+insert into t (id,a) values (801,72);
+insert into t (id,a) values (801,73);
+insert into t (id,a) values (801,74);
+insert into t (id,a) values (801,75);
+insert into t (id,a) values (801,76);
+insert into t (id,a) values (801,77);
+insert into t (id,a) values (801,78);
+insert into t (id,a) values (801,79);
+insert into t (id,a) values (801,80);
+insert into t (id,a) values (801,81);
+insert into t (id,a) values (801,82);
+insert into t (id,a) values (801,83);
+insert into t (id,a) values (801,84);
+insert into t (id,a) values (801,85);
+insert into t (id,a) values (801,86);
+insert into t (id,a) values (801,87);
+insert into t (id,a) values (801,88);
+insert into t (id,a) values (801,89);
+insert into t (id,a) values (801,90);
+insert into t (id,a) values (801,91);
+insert into t (id,a) values (801,92);
+insert into t (id,a) values (801,93);
+insert into t (id,a) values (801,94);
+insert into t (id,a) values (801,95);
+insert into t (id,a) values (801,96);
+insert into t (id,a) values (801,97);
+insert into t (id,a) values (801,98);
+insert into t (id,a) values (801,99);
+insert into t (id,a) values (802,0);
+insert into t (id,a) values (802,1);
+insert into t (id,a) values (802,2);
+insert into t (id,a) values (802,3);
+insert into t (id,a) values (802,4);
+insert into t (id,a) values (802,5);
+insert into t (id,a) values (802,6);
+insert into t (id,a) values (802,7);
+insert into t (id,a) values (802,8);
+insert into t (id,a) values (802,9);
+insert into t (id,a) values (802,10);
+insert into t (id,a) values (802,11);
+insert into t (id,a) values (802,12);
+insert into t (id,a) values (802,13);
+insert into t (id,a) values (802,14);
+insert into t (id,a) values (802,15);
+insert into t (id,a) values (802,16);
+insert into t (id,a) values (802,17);
+insert into t (id,a) values (802,18);
+insert into t (id,a) values (802,19);
+insert into t (id,a) values (802,20);
+insert into t (id,a) values (802,21);
+insert into t (id,a) values (802,22);
+insert into t (id,a) values (802,23);
+insert into t (id,a) values (802,24);
+insert into t (id,a) values (802,25);
+insert into t (id,a) values (802,26);
+insert into t (id,a) values (802,27);
+insert into t (id,a) values (802,28);
+insert into t (id,a) values (802,29);
+insert into t (id,a) values (802,30);
+insert into t (id,a) values (802,31);
+insert into t (id,a) values (802,32);
+insert into t (id,a) values (802,33);
+insert into t (id,a) values (802,34);
+insert into t (id,a) values (802,35);
+insert into t (id,a) values (802,36);
+insert into t (id,a) values (802,37);
+insert into t (id,a) values (802,38);
+insert into t (id,a) values (802,39);
+insert into t (id,a) values (802,40);
+insert into t (id,a) values (802,41);
+insert into t (id,a) values (802,42);
+insert into t (id,a) values (802,43);
+insert into t (id,a) values (802,44);
+insert into t (id,a) values (802,45);
+insert into t (id,a) values (802,46);
+insert into t (id,a) values (802,47);
+insert into t (id,a) values (802,48);
+insert into t (id,a) values (802,49);
+insert into t (id,a) values (802,50);
+insert into t (id,a) values (802,51);
+insert into t (id,a) values (802,52);
+insert into t (id,a) values (802,53);
+insert into t (id,a) values (802,54);
+insert into t (id,a) values (802,55);
+insert into t (id,a) values (802,56);
+insert into t (id,a) values (802,57);
+insert into t (id,a) values (802,58);
+insert into t (id,a) values (802,59);
+insert into t (id,a) values (802,60);
+insert into t (id,a) values (802,61);
+insert into t (id,a) values (802,62);
+insert into t (id,a) values (802,63);
+insert into t (id,a) values (802,64);
+insert into t (id,a) values (802,65);
+insert into t (id,a) values (802,66);
+insert into t (id,a) values (802,67);
+insert into t (id,a) values (802,68);
+insert into t (id,a) values (802,69);
+insert into t (id,a) values (802,70);
+insert into t (id,a) values (802,71);
+insert into t (id,a) values (802,72);
+insert into t (id,a) values (802,73);
+insert into t (id,a) values (802,74);
+insert into t (id,a) values (802,75);
+insert into t (id,a) values (802,76);
+insert into t (id,a) values (802,77);
+insert into t (id,a) values (802,78);
+insert into t (id,a) values (802,79);
+insert into t (id,a) values (802,80);
+insert into t (id,a) values (802,81);
+insert into t (id,a) values (802,82);
+insert into t (id,a) values (802,83);
+insert into t (id,a) values (802,84);
+insert into t (id,a) values (802,85);
+insert into t (id,a) values (802,86);
+insert into t (id,a) values (802,87);
+insert into t (id,a) values (802,88);
+insert into t (id,a) values (802,89);
+insert into t (id,a) values (802,90);
+insert into t (id,a) values (802,91);
+insert into t (id,a) values (802,92);
+insert into t (id,a) values (802,93);
+insert into t (id,a) values (802,94);
+insert into t (id,a) values (802,95);
+insert into t (id,a) values (802,96);
+insert into t (id,a) values (802,97);
+insert into t (id,a) values (802,98);
+insert into t (id,a) values (802,99);
+insert into t (id,a) values (803,0);
+insert into t (id,a) values (803,1);
+insert into t (id,a) values (803,2);
+insert into t (id,a) values (803,3);
+insert into t (id,a) values (803,4);
+insert into t (id,a) values (803,5);
+insert into t (id,a) values (803,6);
+insert into t (id,a) values (803,7);
+insert into t (id,a) values (803,8);
+insert into t (id,a) values (803,9);
+insert into t (id,a) values (803,10);
+insert into t (id,a) values (803,11);
+insert into t (id,a) values (803,12);
+insert into t (id,a) values (803,13);
+insert into t (id,a) values (803,14);
+insert into t (id,a) values (803,15);
+insert into t (id,a) values (803,16);
+insert into t (id,a) values (803,17);
+insert into t (id,a) values (803,18);
+insert into t (id,a) values (803,19);
+insert into t (id,a) values (803,20);
+insert into t (id,a) values (803,21);
+insert into t (id,a) values (803,22);
+insert into t (id,a) values (803,23);
+insert into t (id,a) values (803,24);
+insert into t (id,a) values (803,25);
+insert into t (id,a) values (803,26);
+insert into t (id,a) values (803,27);
+insert into t (id,a) values (803,28);
+insert into t (id,a) values (803,29);
+insert into t (id,a) values (803,30);
+insert into t (id,a) values (803,31);
+insert into t (id,a) values (803,32);
+insert into t (id,a) values (803,33);
+insert into t (id,a) values (803,34);
+insert into t (id,a) values (803,35);
+insert into t (id,a) values (803,36);
+insert into t (id,a) values (803,37);
+insert into t (id,a) values (803,38);
+insert into t (id,a) values (803,39);
+insert into t (id,a) values (803,40);
+insert into t (id,a) values (803,41);
+insert into t (id,a) values (803,42);
+insert into t (id,a) values (803,43);
+insert into t (id,a) values (803,44);
+insert into t (id,a) values (803,45);
+insert into t (id,a) values (803,46);
+insert into t (id,a) values (803,47);
+insert into t (id,a) values (803,48);
+insert into t (id,a) values (803,49);
+insert into t (id,a) values (803,50);
+insert into t (id,a) values (803,51);
+insert into t (id,a) values (803,52);
+insert into t (id,a) values (803,53);
+insert into t (id,a) values (803,54);
+insert into t (id,a) values (803,55);
+insert into t (id,a) values (803,56);
+insert into t (id,a) values (803,57);
+insert into t (id,a) values (803,58);
+insert into t (id,a) values (803,59);
+insert into t (id,a) values (803,60);
+insert into t (id,a) values (803,61);
+insert into t (id,a) values (803,62);
+insert into t (id,a) values (803,63);
+insert into t (id,a) values (803,64);
+insert into t (id,a) values (803,65);
+insert into t (id,a) values (803,66);
+insert into t (id,a) values (803,67);
+insert into t (id,a) values (803,68);
+insert into t (id,a) values (803,69);
+insert into t (id,a) values (803,70);
+insert into t (id,a) values (803,71);
+insert into t (id,a) values (803,72);
+insert into t (id,a) values (803,73);
+insert into t (id,a) values (803,74);
+insert into t (id,a) values (803,75);
+insert into t (id,a) values (803,76);
+insert into t (id,a) values (803,77);
+insert into t (id,a) values (803,78);
+insert into t (id,a) values (803,79);
+insert into t (id,a) values (803,80);
+insert into t (id,a) values (803,81);
+insert into t (id,a) values (803,82);
+insert into t (id,a) values (803,83);
+insert into t (id,a) values (803,84);
+insert into t (id,a) values (803,85);
+insert into t (id,a) values (803,86);
+insert into t (id,a) values (803,87);
+insert into t (id,a) values (803,88);
+insert into t (id,a) values (803,89);
+insert into t (id,a) values (803,90);
+insert into t (id,a) values (803,91);
+insert into t (id,a) values (803,92);
+insert into t (id,a) values (803,93);
+insert into t (id,a) values (803,94);
+insert into t (id,a) values (803,95);
+insert into t (id,a) values (803,96);
+insert into t (id,a) values (803,97);
+insert into t (id,a) values (803,98);
+insert into t (id,a) values (803,99);
+insert into t (id,a) values (804,0);
+insert into t (id,a) values (804,1);
+insert into t (id,a) values (804,2);
+insert into t (id,a) values (804,3);
+insert into t (id,a) values (804,4);
+insert into t (id,a) values (804,5);
+insert into t (id,a) values (804,6);
+insert into t (id,a) values (804,7);
+insert into t (id,a) values (804,8);
+insert into t (id,a) values (804,9);
+insert into t (id,a) values (804,10);
+insert into t (id,a) values (804,11);
+insert into t (id,a) values (804,12);
+insert into t (id,a) values (804,13);
+insert into t (id,a) values (804,14);
+insert into t (id,a) values (804,15);
+insert into t (id,a) values (804,16);
+insert into t (id,a) values (804,17);
+insert into t (id,a) values (804,18);
+insert into t (id,a) values (804,19);
+insert into t (id,a) values (804,20);
+insert into t (id,a) values (804,21);
+insert into t (id,a) values (804,22);
+insert into t (id,a) values (804,23);
+insert into t (id,a) values (804,24);
+insert into t (id,a) values (804,25);
+insert into t (id,a) values (804,26);
+insert into t (id,a) values (804,27);
+insert into t (id,a) values (804,28);
+insert into t (id,a) values (804,29);
+insert into t (id,a) values (804,30);
+insert into t (id,a) values (804,31);
+insert into t (id,a) values (804,32);
+insert into t (id,a) values (804,33);
+insert into t (id,a) values (804,34);
+insert into t (id,a) values (804,35);
+insert into t (id,a) values (804,36);
+insert into t (id,a) values (804,37);
+insert into t (id,a) values (804,38);
+insert into t (id,a) values (804,39);
+insert into t (id,a) values (804,40);
+insert into t (id,a) values (804,41);
+insert into t (id,a) values (804,42);
+insert into t (id,a) values (804,43);
+insert into t (id,a) values (804,44);
+insert into t (id,a) values (804,45);
+insert into t (id,a) values (804,46);
+insert into t (id,a) values (804,47);
+insert into t (id,a) values (804,48);
+insert into t (id,a) values (804,49);
+insert into t (id,a) values (804,50);
+insert into t (id,a) values (804,51);
+insert into t (id,a) values (804,52);
+insert into t (id,a) values (804,53);
+insert into t (id,a) values (804,54);
+insert into t (id,a) values (804,55);
+insert into t (id,a) values (804,56);
+insert into t (id,a) values (804,57);
+insert into t (id,a) values (804,58);
+insert into t (id,a) values (804,59);
+insert into t (id,a) values (804,60);
+insert into t (id,a) values (804,61);
+insert into t (id,a) values (804,62);
+insert into t (id,a) values (804,63);
+insert into t (id,a) values (804,64);
+insert into t (id,a) values (804,65);
+insert into t (id,a) values (804,66);
+insert into t (id,a) values (804,67);
+insert into t (id,a) values (804,68);
+insert into t (id,a) values (804,69);
+insert into t (id,a) values (804,70);
+insert into t (id,a) values (804,71);
+insert into t (id,a) values (804,72);
+insert into t (id,a) values (804,73);
+insert into t (id,a) values (804,74);
+insert into t (id,a) values (804,75);
+insert into t (id,a) values (804,76);
+insert into t (id,a) values (804,77);
+insert into t (id,a) values (804,78);
+insert into t (id,a) values (804,79);
+insert into t (id,a) values (804,80);
+insert into t (id,a) values (804,81);
+insert into t (id,a) values (804,82);
+insert into t (id,a) values (804,83);
+insert into t (id,a) values (804,84);
+insert into t (id,a) values (804,85);
+insert into t (id,a) values (804,86);
+insert into t (id,a) values (804,87);
+insert into t (id,a) values (804,88);
+insert into t (id,a) values (804,89);
+insert into t (id,a) values (804,90);
+insert into t (id,a) values (804,91);
+insert into t (id,a) values (804,92);
+insert into t (id,a) values (804,93);
+insert into t (id,a) values (804,94);
+insert into t (id,a) values (804,95);
+insert into t (id,a) values (804,96);
+insert into t (id,a) values (804,97);
+insert into t (id,a) values (804,98);
+insert into t (id,a) values (804,99);
+insert into t (id,a) values (805,0);
+insert into t (id,a) values (805,1);
+insert into t (id,a) values (805,2);
+insert into t (id,a) values (805,3);
+insert into t (id,a) values (805,4);
+insert into t (id,a) values (805,5);
+insert into t (id,a) values (805,6);
+insert into t (id,a) values (805,7);
+insert into t (id,a) values (805,8);
+insert into t (id,a) values (805,9);
+insert into t (id,a) values (805,10);
+insert into t (id,a) values (805,11);
+insert into t (id,a) values (805,12);
+insert into t (id,a) values (805,13);
+insert into t (id,a) values (805,14);
+insert into t (id,a) values (805,15);
+insert into t (id,a) values (805,16);
+insert into t (id,a) values (805,17);
+insert into t (id,a) values (805,18);
+insert into t (id,a) values (805,19);
+insert into t (id,a) values (805,20);
+insert into t (id,a) values (805,21);
+insert into t (id,a) values (805,22);
+insert into t (id,a) values (805,23);
+insert into t (id,a) values (805,24);
+insert into t (id,a) values (805,25);
+insert into t (id,a) values (805,26);
+insert into t (id,a) values (805,27);
+insert into t (id,a) values (805,28);
+insert into t (id,a) values (805,29);
+insert into t (id,a) values (805,30);
+insert into t (id,a) values (805,31);
+insert into t (id,a) values (805,32);
+insert into t (id,a) values (805,33);
+insert into t (id,a) values (805,34);
+insert into t (id,a) values (805,35);
+insert into t (id,a) values (805,36);
+insert into t (id,a) values (805,37);
+insert into t (id,a) values (805,38);
+insert into t (id,a) values (805,39);
+insert into t (id,a) values (805,40);
+insert into t (id,a) values (805,41);
+insert into t (id,a) values (805,42);
+insert into t (id,a) values (805,43);
+insert into t (id,a) values (805,44);
+insert into t (id,a) values (805,45);
+insert into t (id,a) values (805,46);
+insert into t (id,a) values (805,47);
+insert into t (id,a) values (805,48);
+insert into t (id,a) values (805,49);
+insert into t (id,a) values (805,50);
+insert into t (id,a) values (805,51);
+insert into t (id,a) values (805,52);
+insert into t (id,a) values (805,53);
+insert into t (id,a) values (805,54);
+insert into t (id,a) values (805,55);
+insert into t (id,a) values (805,56);
+insert into t (id,a) values (805,57);
+insert into t (id,a) values (805,58);
+insert into t (id,a) values (805,59);
+insert into t (id,a) values (805,60);
+insert into t (id,a) values (805,61);
+insert into t (id,a) values (805,62);
+insert into t (id,a) values (805,63);
+insert into t (id,a) values (805,64);
+insert into t (id,a) values (805,65);
+insert into t (id,a) values (805,66);
+insert into t (id,a) values (805,67);
+insert into t (id,a) values (805,68);
+insert into t (id,a) values (805,69);
+insert into t (id,a) values (805,70);
+insert into t (id,a) values (805,71);
+insert into t (id,a) values (805,72);
+insert into t (id,a) values (805,73);
+insert into t (id,a) values (805,74);
+insert into t (id,a) values (805,75);
+insert into t (id,a) values (805,76);
+insert into t (id,a) values (805,77);
+insert into t (id,a) values (805,78);
+insert into t (id,a) values (805,79);
+insert into t (id,a) values (805,80);
+insert into t (id,a) values (805,81);
+insert into t (id,a) values (805,82);
+insert into t (id,a) values (805,83);
+insert into t (id,a) values (805,84);
+insert into t (id,a) values (805,85);
+insert into t (id,a) values (805,86);
+insert into t (id,a) values (805,87);
+insert into t (id,a) values (805,88);
+insert into t (id,a) values (805,89);
+insert into t (id,a) values (805,90);
+insert into t (id,a) values (805,91);
+insert into t (id,a) values (805,92);
+insert into t (id,a) values (805,93);
+insert into t (id,a) values (805,94);
+insert into t (id,a) values (805,95);
+insert into t (id,a) values (805,96);
+insert into t (id,a) values (805,97);
+insert into t (id,a) values (805,98);
+insert into t (id,a) values (805,99);
+insert into t (id,a) values (806,0);
+insert into t (id,a) values (806,1);
+insert into t (id,a) values (806,2);
+insert into t (id,a) values (806,3);
+insert into t (id,a) values (806,4);
+insert into t (id,a) values (806,5);
+insert into t (id,a) values (806,6);
+insert into t (id,a) values (806,7);
+insert into t (id,a) values (806,8);
+insert into t (id,a) values (806,9);
+insert into t (id,a) values (806,10);
+insert into t (id,a) values (806,11);
+insert into t (id,a) values (806,12);
+insert into t (id,a) values (806,13);
+insert into t (id,a) values (806,14);
+insert into t (id,a) values (806,15);
+insert into t (id,a) values (806,16);
+insert into t (id,a) values (806,17);
+insert into t (id,a) values (806,18);
+insert into t (id,a) values (806,19);
+insert into t (id,a) values (806,20);
+insert into t (id,a) values (806,21);
+insert into t (id,a) values (806,22);
+insert into t (id,a) values (806,23);
+insert into t (id,a) values (806,24);
+insert into t (id,a) values (806,25);
+insert into t (id,a) values (806,26);
+insert into t (id,a) values (806,27);
+insert into t (id,a) values (806,28);
+insert into t (id,a) values (806,29);
+insert into t (id,a) values (806,30);
+insert into t (id,a) values (806,31);
+insert into t (id,a) values (806,32);
+insert into t (id,a) values (806,33);
+insert into t (id,a) values (806,34);
+insert into t (id,a) values (806,35);
+insert into t (id,a) values (806,36);
+insert into t (id,a) values (806,37);
+insert into t (id,a) values (806,38);
+insert into t (id,a) values (806,39);
+insert into t (id,a) values (806,40);
+insert into t (id,a) values (806,41);
+insert into t (id,a) values (806,42);
+insert into t (id,a) values (806,43);
+insert into t (id,a) values (806,44);
+insert into t (id,a) values (806,45);
+insert into t (id,a) values (806,46);
+insert into t (id,a) values (806,47);
+insert into t (id,a) values (806,48);
+insert into t (id,a) values (806,49);
+insert into t (id,a) values (806,50);
+insert into t (id,a) values (806,51);
+insert into t (id,a) values (806,52);
+insert into t (id,a) values (806,53);
+insert into t (id,a) values (806,54);
+insert into t (id,a) values (806,55);
+insert into t (id,a) values (806,56);
+insert into t (id,a) values (806,57);
+insert into t (id,a) values (806,58);
+insert into t (id,a) values (806,59);
+insert into t (id,a) values (806,60);
+insert into t (id,a) values (806,61);
+insert into t (id,a) values (806,62);
+insert into t (id,a) values (806,63);
+insert into t (id,a) values (806,64);
+insert into t (id,a) values (806,65);
+insert into t (id,a) values (806,66);
+insert into t (id,a) values (806,67);
+insert into t (id,a) values (806,68);
+insert into t (id,a) values (806,69);
+insert into t (id,a) values (806,70);
+insert into t (id,a) values (806,71);
+insert into t (id,a) values (806,72);
+insert into t (id,a) values (806,73);
+insert into t (id,a) values (806,74);
+insert into t (id,a) values (806,75);
+insert into t (id,a) values (806,76);
+insert into t (id,a) values (806,77);
+insert into t (id,a) values (806,78);
+insert into t (id,a) values (806,79);
+insert into t (id,a) values (806,80);
+insert into t (id,a) values (806,81);
+insert into t (id,a) values (806,82);
+insert into t (id,a) values (806,83);
+insert into t (id,a) values (806,84);
+insert into t (id,a) values (806,85);
+insert into t (id,a) values (806,86);
+insert into t (id,a) values (806,87);
+insert into t (id,a) values (806,88);
+insert into t (id,a) values (806,89);
+insert into t (id,a) values (806,90);
+insert into t (id,a) values (806,91);
+insert into t (id,a) values (806,92);
+insert into t (id,a) values (806,93);
+insert into t (id,a) values (806,94);
+insert into t (id,a) values (806,95);
+insert into t (id,a) values (806,96);
+insert into t (id,a) values (806,97);
+insert into t (id,a) values (806,98);
+insert into t (id,a) values (806,99);
+insert into t (id,a) values (807,0);
+insert into t (id,a) values (807,1);
+insert into t (id,a) values (807,2);
+insert into t (id,a) values (807,3);
+insert into t (id,a) values (807,4);
+insert into t (id,a) values (807,5);
+insert into t (id,a) values (807,6);
+insert into t (id,a) values (807,7);
+insert into t (id,a) values (807,8);
+insert into t (id,a) values (807,9);
+insert into t (id,a) values (807,10);
+insert into t (id,a) values (807,11);
+insert into t (id,a) values (807,12);
+insert into t (id,a) values (807,13);
+insert into t (id,a) values (807,14);
+insert into t (id,a) values (807,15);
+insert into t (id,a) values (807,16);
+insert into t (id,a) values (807,17);
+insert into t (id,a) values (807,18);
+insert into t (id,a) values (807,19);
+insert into t (id,a) values (807,20);
+insert into t (id,a) values (807,21);
+insert into t (id,a) values (807,22);
+insert into t (id,a) values (807,23);
+insert into t (id,a) values (807,24);
+insert into t (id,a) values (807,25);
+insert into t (id,a) values (807,26);
+insert into t (id,a) values (807,27);
+insert into t (id,a) values (807,28);
+insert into t (id,a) values (807,29);
+insert into t (id,a) values (807,30);
+insert into t (id,a) values (807,31);
+insert into t (id,a) values (807,32);
+insert into t (id,a) values (807,33);
+insert into t (id,a) values (807,34);
+insert into t (id,a) values (807,35);
+insert into t (id,a) values (807,36);
+insert into t (id,a) values (807,37);
+insert into t (id,a) values (807,38);
+insert into t (id,a) values (807,39);
+insert into t (id,a) values (807,40);
+insert into t (id,a) values (807,41);
+insert into t (id,a) values (807,42);
+insert into t (id,a) values (807,43);
+insert into t (id,a) values (807,44);
+insert into t (id,a) values (807,45);
+insert into t (id,a) values (807,46);
+insert into t (id,a) values (807,47);
+insert into t (id,a) values (807,48);
+insert into t (id,a) values (807,49);
+insert into t (id,a) values (807,50);
+insert into t (id,a) values (807,51);
+insert into t (id,a) values (807,52);
+insert into t (id,a) values (807,53);
+insert into t (id,a) values (807,54);
+insert into t (id,a) values (807,55);
+insert into t (id,a) values (807,56);
+insert into t (id,a) values (807,57);
+insert into t (id,a) values (807,58);
+insert into t (id,a) values (807,59);
+insert into t (id,a) values (807,60);
+insert into t (id,a) values (807,61);
+insert into t (id,a) values (807,62);
+insert into t (id,a) values (807,63);
+insert into t (id,a) values (807,64);
+insert into t (id,a) values (807,65);
+insert into t (id,a) values (807,66);
+insert into t (id,a) values (807,67);
+insert into t (id,a) values (807,68);
+insert into t (id,a) values (807,69);
+insert into t (id,a) values (807,70);
+insert into t (id,a) values (807,71);
+insert into t (id,a) values (807,72);
+insert into t (id,a) values (807,73);
+insert into t (id,a) values (807,74);
+insert into t (id,a) values (807,75);
+insert into t (id,a) values (807,76);
+insert into t (id,a) values (807,77);
+insert into t (id,a) values (807,78);
+insert into t (id,a) values (807,79);
+insert into t (id,a) values (807,80);
+insert into t (id,a) values (807,81);
+insert into t (id,a) values (807,82);
+insert into t (id,a) values (807,83);
+insert into t (id,a) values (807,84);
+insert into t (id,a) values (807,85);
+insert into t (id,a) values (807,86);
+insert into t (id,a) values (807,87);
+insert into t (id,a) values (807,88);
+insert into t (id,a) values (807,89);
+insert into t (id,a) values (807,90);
+insert into t (id,a) values (807,91);
+insert into t (id,a) values (807,92);
+insert into t (id,a) values (807,93);
+insert into t (id,a) values (807,94);
+insert into t (id,a) values (807,95);
+insert into t (id,a) values (807,96);
+insert into t (id,a) values (807,97);
+insert into t (id,a) values (807,98);
+insert into t (id,a) values (807,99);
+insert into t (id,a) values (808,0);
+insert into t (id,a) values (808,1);
+insert into t (id,a) values (808,2);
+insert into t (id,a) values (808,3);
+insert into t (id,a) values (808,4);
+insert into t (id,a) values (808,5);
+insert into t (id,a) values (808,6);
+insert into t (id,a) values (808,7);
+insert into t (id,a) values (808,8);
+insert into t (id,a) values (808,9);
+insert into t (id,a) values (808,10);
+insert into t (id,a) values (808,11);
+insert into t (id,a) values (808,12);
+insert into t (id,a) values (808,13);
+insert into t (id,a) values (808,14);
+insert into t (id,a) values (808,15);
+insert into t (id,a) values (808,16);
+insert into t (id,a) values (808,17);
+insert into t (id,a) values (808,18);
+insert into t (id,a) values (808,19);
+insert into t (id,a) values (808,20);
+insert into t (id,a) values (808,21);
+insert into t (id,a) values (808,22);
+insert into t (id,a) values (808,23);
+insert into t (id,a) values (808,24);
+insert into t (id,a) values (808,25);
+insert into t (id,a) values (808,26);
+insert into t (id,a) values (808,27);
+insert into t (id,a) values (808,28);
+insert into t (id,a) values (808,29);
+insert into t (id,a) values (808,30);
+insert into t (id,a) values (808,31);
+insert into t (id,a) values (808,32);
+insert into t (id,a) values (808,33);
+insert into t (id,a) values (808,34);
+insert into t (id,a) values (808,35);
+insert into t (id,a) values (808,36);
+insert into t (id,a) values (808,37);
+insert into t (id,a) values (808,38);
+insert into t (id,a) values (808,39);
+insert into t (id,a) values (808,40);
+insert into t (id,a) values (808,41);
+insert into t (id,a) values (808,42);
+insert into t (id,a) values (808,43);
+insert into t (id,a) values (808,44);
+insert into t (id,a) values (808,45);
+insert into t (id,a) values (808,46);
+insert into t (id,a) values (808,47);
+insert into t (id,a) values (808,48);
+insert into t (id,a) values (808,49);
+insert into t (id,a) values (808,50);
+insert into t (id,a) values (808,51);
+insert into t (id,a) values (808,52);
+insert into t (id,a) values (808,53);
+insert into t (id,a) values (808,54);
+insert into t (id,a) values (808,55);
+insert into t (id,a) values (808,56);
+insert into t (id,a) values (808,57);
+insert into t (id,a) values (808,58);
+insert into t (id,a) values (808,59);
+insert into t (id,a) values (808,60);
+insert into t (id,a) values (808,61);
+insert into t (id,a) values (808,62);
+insert into t (id,a) values (808,63);
+insert into t (id,a) values (808,64);
+insert into t (id,a) values (808,65);
+insert into t (id,a) values (808,66);
+insert into t (id,a) values (808,67);
+insert into t (id,a) values (808,68);
+insert into t (id,a) values (808,69);
+insert into t (id,a) values (808,70);
+insert into t (id,a) values (808,71);
+insert into t (id,a) values (808,72);
+insert into t (id,a) values (808,73);
+insert into t (id,a) values (808,74);
+insert into t (id,a) values (808,75);
+insert into t (id,a) values (808,76);
+insert into t (id,a) values (808,77);
+insert into t (id,a) values (808,78);
+insert into t (id,a) values (808,79);
+insert into t (id,a) values (808,80);
+insert into t (id,a) values (808,81);
+insert into t (id,a) values (808,82);
+insert into t (id,a) values (808,83);
+insert into t (id,a) values (808,84);
+insert into t (id,a) values (808,85);
+insert into t (id,a) values (808,86);
+insert into t (id,a) values (808,87);
+insert into t (id,a) values (808,88);
+insert into t (id,a) values (808,89);
+insert into t (id,a) values (808,90);
+insert into t (id,a) values (808,91);
+insert into t (id,a) values (808,92);
+insert into t (id,a) values (808,93);
+insert into t (id,a) values (808,94);
+insert into t (id,a) values (808,95);
+insert into t (id,a) values (808,96);
+insert into t (id,a) values (808,97);
+insert into t (id,a) values (808,98);
+insert into t (id,a) values (808,99);
+insert into t (id,a) values (809,0);
+insert into t (id,a) values (809,1);
+insert into t (id,a) values (809,2);
+insert into t (id,a) values (809,3);
+insert into t (id,a) values (809,4);
+insert into t (id,a) values (809,5);
+insert into t (id,a) values (809,6);
+insert into t (id,a) values (809,7);
+insert into t (id,a) values (809,8);
+insert into t (id,a) values (809,9);
+insert into t (id,a) values (809,10);
+insert into t (id,a) values (809,11);
+insert into t (id,a) values (809,12);
+insert into t (id,a) values (809,13);
+insert into t (id,a) values (809,14);
+insert into t (id,a) values (809,15);
+insert into t (id,a) values (809,16);
+insert into t (id,a) values (809,17);
+insert into t (id,a) values (809,18);
+insert into t (id,a) values (809,19);
+insert into t (id,a) values (809,20);
+insert into t (id,a) values (809,21);
+insert into t (id,a) values (809,22);
+insert into t (id,a) values (809,23);
+insert into t (id,a) values (809,24);
+insert into t (id,a) values (809,25);
+insert into t (id,a) values (809,26);
+insert into t (id,a) values (809,27);
+insert into t (id,a) values (809,28);
+insert into t (id,a) values (809,29);
+insert into t (id,a) values (809,30);
+insert into t (id,a) values (809,31);
+insert into t (id,a) values (809,32);
+insert into t (id,a) values (809,33);
+insert into t (id,a) values (809,34);
+insert into t (id,a) values (809,35);
+insert into t (id,a) values (809,36);
+insert into t (id,a) values (809,37);
+insert into t (id,a) values (809,38);
+insert into t (id,a) values (809,39);
+insert into t (id,a) values (809,40);
+insert into t (id,a) values (809,41);
+insert into t (id,a) values (809,42);
+insert into t (id,a) values (809,43);
+insert into t (id,a) values (809,44);
+insert into t (id,a) values (809,45);
+insert into t (id,a) values (809,46);
+insert into t (id,a) values (809,47);
+insert into t (id,a) values (809,48);
+insert into t (id,a) values (809,49);
+insert into t (id,a) values (809,50);
+insert into t (id,a) values (809,51);
+insert into t (id,a) values (809,52);
+insert into t (id,a) values (809,53);
+insert into t (id,a) values (809,54);
+insert into t (id,a) values (809,55);
+insert into t (id,a) values (809,56);
+insert into t (id,a) values (809,57);
+insert into t (id,a) values (809,58);
+insert into t (id,a) values (809,59);
+insert into t (id,a) values (809,60);
+insert into t (id,a) values (809,61);
+insert into t (id,a) values (809,62);
+insert into t (id,a) values (809,63);
+insert into t (id,a) values (809,64);
+insert into t (id,a) values (809,65);
+insert into t (id,a) values (809,66);
+insert into t (id,a) values (809,67);
+insert into t (id,a) values (809,68);
+insert into t (id,a) values (809,69);
+insert into t (id,a) values (809,70);
+insert into t (id,a) values (809,71);
+insert into t (id,a) values (809,72);
+insert into t (id,a) values (809,73);
+insert into t (id,a) values (809,74);
+insert into t (id,a) values (809,75);
+insert into t (id,a) values (809,76);
+insert into t (id,a) values (809,77);
+insert into t (id,a) values (809,78);
+insert into t (id,a) values (809,79);
+insert into t (id,a) values (809,80);
+insert into t (id,a) values (809,81);
+insert into t (id,a) values (809,82);
+insert into t (id,a) values (809,83);
+insert into t (id,a) values (809,84);
+insert into t (id,a) values (809,85);
+insert into t (id,a) values (809,86);
+insert into t (id,a) values (809,87);
+insert into t (id,a) values (809,88);
+insert into t (id,a) values (809,89);
+insert into t (id,a) values (809,90);
+insert into t (id,a) values (809,91);
+insert into t (id,a) values (809,92);
+insert into t (id,a) values (809,93);
+insert into t (id,a) values (809,94);
+insert into t (id,a) values (809,95);
+insert into t (id,a) values (809,96);
+insert into t (id,a) values (809,97);
+insert into t (id,a) values (809,98);
+insert into t (id,a) values (809,99);
+insert into t (id,a) values (810,0);
+insert into t (id,a) values (810,1);
+insert into t (id,a) values (810,2);
+insert into t (id,a) values (810,3);
+insert into t (id,a) values (810,4);
+insert into t (id,a) values (810,5);
+insert into t (id,a) values (810,6);
+insert into t (id,a) values (810,7);
+insert into t (id,a) values (810,8);
+insert into t (id,a) values (810,9);
+insert into t (id,a) values (810,10);
+insert into t (id,a) values (810,11);
+insert into t (id,a) values (810,12);
+insert into t (id,a) values (810,13);
+insert into t (id,a) values (810,14);
+insert into t (id,a) values (810,15);
+insert into t (id,a) values (810,16);
+insert into t (id,a) values (810,17);
+insert into t (id,a) values (810,18);
+insert into t (id,a) values (810,19);
+insert into t (id,a) values (810,20);
+insert into t (id,a) values (810,21);
+insert into t (id,a) values (810,22);
+insert into t (id,a) values (810,23);
+insert into t (id,a) values (810,24);
+insert into t (id,a) values (810,25);
+insert into t (id,a) values (810,26);
+insert into t (id,a) values (810,27);
+insert into t (id,a) values (810,28);
+insert into t (id,a) values (810,29);
+insert into t (id,a) values (810,30);
+insert into t (id,a) values (810,31);
+insert into t (id,a) values (810,32);
+insert into t (id,a) values (810,33);
+insert into t (id,a) values (810,34);
+insert into t (id,a) values (810,35);
+insert into t (id,a) values (810,36);
+insert into t (id,a) values (810,37);
+insert into t (id,a) values (810,38);
+insert into t (id,a) values (810,39);
+insert into t (id,a) values (810,40);
+insert into t (id,a) values (810,41);
+insert into t (id,a) values (810,42);
+insert into t (id,a) values (810,43);
+insert into t (id,a) values (810,44);
+insert into t (id,a) values (810,45);
+insert into t (id,a) values (810,46);
+insert into t (id,a) values (810,47);
+insert into t (id,a) values (810,48);
+insert into t (id,a) values (810,49);
+insert into t (id,a) values (810,50);
+insert into t (id,a) values (810,51);
+insert into t (id,a) values (810,52);
+insert into t (id,a) values (810,53);
+insert into t (id,a) values (810,54);
+insert into t (id,a) values (810,55);
+insert into t (id,a) values (810,56);
+insert into t (id,a) values (810,57);
+insert into t (id,a) values (810,58);
+insert into t (id,a) values (810,59);
+insert into t (id,a) values (810,60);
+insert into t (id,a) values (810,61);
+insert into t (id,a) values (810,62);
+insert into t (id,a) values (810,63);
+insert into t (id,a) values (810,64);
+insert into t (id,a) values (810,65);
+insert into t (id,a) values (810,66);
+insert into t (id,a) values (810,67);
+insert into t (id,a) values (810,68);
+insert into t (id,a) values (810,69);
+insert into t (id,a) values (810,70);
+insert into t (id,a) values (810,71);
+insert into t (id,a) values (810,72);
+insert into t (id,a) values (810,73);
+insert into t (id,a) values (810,74);
+insert into t (id,a) values (810,75);
+insert into t (id,a) values (810,76);
+insert into t (id,a) values (810,77);
+insert into t (id,a) values (810,78);
+insert into t (id,a) values (810,79);
+insert into t (id,a) values (810,80);
+insert into t (id,a) values (810,81);
+insert into t (id,a) values (810,82);
+insert into t (id,a) values (810,83);
+insert into t (id,a) values (810,84);
+insert into t (id,a) values (810,85);
+insert into t (id,a) values (810,86);
+insert into t (id,a) values (810,87);
+insert into t (id,a) values (810,88);
+insert into t (id,a) values (810,89);
+insert into t (id,a) values (810,90);
+insert into t (id,a) values (810,91);
+insert into t (id,a) values (810,92);
+insert into t (id,a) values (810,93);
+insert into t (id,a) values (810,94);
+insert into t (id,a) values (810,95);
+insert into t (id,a) values (810,96);
+insert into t (id,a) values (810,97);
+insert into t (id,a) values (810,98);
+insert into t (id,a) values (810,99);
+insert into t (id,a) values (811,0);
+insert into t (id,a) values (811,1);
+insert into t (id,a) values (811,2);
+insert into t (id,a) values (811,3);
+insert into t (id,a) values (811,4);
+insert into t (id,a) values (811,5);
+insert into t (id,a) values (811,6);
+insert into t (id,a) values (811,7);
+insert into t (id,a) values (811,8);
+insert into t (id,a) values (811,9);
+insert into t (id,a) values (811,10);
+insert into t (id,a) values (811,11);
+insert into t (id,a) values (811,12);
+insert into t (id,a) values (811,13);
+insert into t (id,a) values (811,14);
+insert into t (id,a) values (811,15);
+insert into t (id,a) values (811,16);
+insert into t (id,a) values (811,17);
+insert into t (id,a) values (811,18);
+insert into t (id,a) values (811,19);
+insert into t (id,a) values (811,20);
+insert into t (id,a) values (811,21);
+insert into t (id,a) values (811,22);
+insert into t (id,a) values (811,23);
+insert into t (id,a) values (811,24);
+insert into t (id,a) values (811,25);
+insert into t (id,a) values (811,26);
+insert into t (id,a) values (811,27);
+insert into t (id,a) values (811,28);
+insert into t (id,a) values (811,29);
+insert into t (id,a) values (811,30);
+insert into t (id,a) values (811,31);
+insert into t (id,a) values (811,32);
+insert into t (id,a) values (811,33);
+insert into t (id,a) values (811,34);
+insert into t (id,a) values (811,35);
+insert into t (id,a) values (811,36);
+insert into t (id,a) values (811,37);
+insert into t (id,a) values (811,38);
+insert into t (id,a) values (811,39);
+insert into t (id,a) values (811,40);
+insert into t (id,a) values (811,41);
+insert into t (id,a) values (811,42);
+insert into t (id,a) values (811,43);
+insert into t (id,a) values (811,44);
+insert into t (id,a) values (811,45);
+insert into t (id,a) values (811,46);
+insert into t (id,a) values (811,47);
+insert into t (id,a) values (811,48);
+insert into t (id,a) values (811,49);
+insert into t (id,a) values (811,50);
+insert into t (id,a) values (811,51);
+insert into t (id,a) values (811,52);
+insert into t (id,a) values (811,53);
+insert into t (id,a) values (811,54);
+insert into t (id,a) values (811,55);
+insert into t (id,a) values (811,56);
+insert into t (id,a) values (811,57);
+insert into t (id,a) values (811,58);
+insert into t (id,a) values (811,59);
+insert into t (id,a) values (811,60);
+insert into t (id,a) values (811,61);
+insert into t (id,a) values (811,62);
+insert into t (id,a) values (811,63);
+insert into t (id,a) values (811,64);
+insert into t (id,a) values (811,65);
+insert into t (id,a) values (811,66);
+insert into t (id,a) values (811,67);
+insert into t (id,a) values (811,68);
+insert into t (id,a) values (811,69);
+insert into t (id,a) values (811,70);
+insert into t (id,a) values (811,71);
+insert into t (id,a) values (811,72);
+insert into t (id,a) values (811,73);
+insert into t (id,a) values (811,74);
+insert into t (id,a) values (811,75);
+insert into t (id,a) values (811,76);
+insert into t (id,a) values (811,77);
+insert into t (id,a) values (811,78);
+insert into t (id,a) values (811,79);
+insert into t (id,a) values (811,80);
+insert into t (id,a) values (811,81);
+insert into t (id,a) values (811,82);
+insert into t (id,a) values (811,83);
+insert into t (id,a) values (811,84);
+insert into t (id,a) values (811,85);
+insert into t (id,a) values (811,86);
+insert into t (id,a) values (811,87);
+insert into t (id,a) values (811,88);
+insert into t (id,a) values (811,89);
+insert into t (id,a) values (811,90);
+insert into t (id,a) values (811,91);
+insert into t (id,a) values (811,92);
+insert into t (id,a) values (811,93);
+insert into t (id,a) values (811,94);
+insert into t (id,a) values (811,95);
+insert into t (id,a) values (811,96);
+insert into t (id,a) values (811,97);
+insert into t (id,a) values (811,98);
+insert into t (id,a) values (811,99);
+insert into t (id,a) values (812,0);
+insert into t (id,a) values (812,1);
+insert into t (id,a) values (812,2);
+insert into t (id,a) values (812,3);
+insert into t (id,a) values (812,4);
+insert into t (id,a) values (812,5);
+insert into t (id,a) values (812,6);
+insert into t (id,a) values (812,7);
+insert into t (id,a) values (812,8);
+insert into t (id,a) values (812,9);
+insert into t (id,a) values (812,10);
+insert into t (id,a) values (812,11);
+insert into t (id,a) values (812,12);
+insert into t (id,a) values (812,13);
+insert into t (id,a) values (812,14);
+insert into t (id,a) values (812,15);
+insert into t (id,a) values (812,16);
+insert into t (id,a) values (812,17);
+insert into t (id,a) values (812,18);
+insert into t (id,a) values (812,19);
+insert into t (id,a) values (812,20);
+insert into t (id,a) values (812,21);
+insert into t (id,a) values (812,22);
+insert into t (id,a) values (812,23);
+insert into t (id,a) values (812,24);
+insert into t (id,a) values (812,25);
+insert into t (id,a) values (812,26);
+insert into t (id,a) values (812,27);
+insert into t (id,a) values (812,28);
+insert into t (id,a) values (812,29);
+insert into t (id,a) values (812,30);
+insert into t (id,a) values (812,31);
+insert into t (id,a) values (812,32);
+insert into t (id,a) values (812,33);
+insert into t (id,a) values (812,34);
+insert into t (id,a) values (812,35);
+insert into t (id,a) values (812,36);
+insert into t (id,a) values (812,37);
+insert into t (id,a) values (812,38);
+insert into t (id,a) values (812,39);
+insert into t (id,a) values (812,40);
+insert into t (id,a) values (812,41);
+insert into t (id,a) values (812,42);
+insert into t (id,a) values (812,43);
+insert into t (id,a) values (812,44);
+insert into t (id,a) values (812,45);
+insert into t (id,a) values (812,46);
+insert into t (id,a) values (812,47);
+insert into t (id,a) values (812,48);
+insert into t (id,a) values (812,49);
+insert into t (id,a) values (812,50);
+insert into t (id,a) values (812,51);
+insert into t (id,a) values (812,52);
+insert into t (id,a) values (812,53);
+insert into t (id,a) values (812,54);
+insert into t (id,a) values (812,55);
+insert into t (id,a) values (812,56);
+insert into t (id,a) values (812,57);
+insert into t (id,a) values (812,58);
+insert into t (id,a) values (812,59);
+insert into t (id,a) values (812,60);
+insert into t (id,a) values (812,61);
+insert into t (id,a) values (812,62);
+insert into t (id,a) values (812,63);
+insert into t (id,a) values (812,64);
+insert into t (id,a) values (812,65);
+insert into t (id,a) values (812,66);
+insert into t (id,a) values (812,67);
+insert into t (id,a) values (812,68);
+insert into t (id,a) values (812,69);
+insert into t (id,a) values (812,70);
+insert into t (id,a) values (812,71);
+insert into t (id,a) values (812,72);
+insert into t (id,a) values (812,73);
+insert into t (id,a) values (812,74);
+insert into t (id,a) values (812,75);
+insert into t (id,a) values (812,76);
+insert into t (id,a) values (812,77);
+insert into t (id,a) values (812,78);
+insert into t (id,a) values (812,79);
+insert into t (id,a) values (812,80);
+insert into t (id,a) values (812,81);
+insert into t (id,a) values (812,82);
+insert into t (id,a) values (812,83);
+insert into t (id,a) values (812,84);
+insert into t (id,a) values (812,85);
+insert into t (id,a) values (812,86);
+insert into t (id,a) values (812,87);
+insert into t (id,a) values (812,88);
+insert into t (id,a) values (812,89);
+insert into t (id,a) values (812,90);
+insert into t (id,a) values (812,91);
+insert into t (id,a) values (812,92);
+insert into t (id,a) values (812,93);
+insert into t (id,a) values (812,94);
+insert into t (id,a) values (812,95);
+insert into t (id,a) values (812,96);
+insert into t (id,a) values (812,97);
+insert into t (id,a) values (812,98);
+insert into t (id,a) values (812,99);
+insert into t (id,a) values (813,0);
+insert into t (id,a) values (813,1);
+insert into t (id,a) values (813,2);
+insert into t (id,a) values (813,3);
+insert into t (id,a) values (813,4);
+insert into t (id,a) values (813,5);
+insert into t (id,a) values (813,6);
+insert into t (id,a) values (813,7);
+insert into t (id,a) values (813,8);
+insert into t (id,a) values (813,9);
+insert into t (id,a) values (813,10);
+insert into t (id,a) values (813,11);
+insert into t (id,a) values (813,12);
+insert into t (id,a) values (813,13);
+insert into t (id,a) values (813,14);
+insert into t (id,a) values (813,15);
+insert into t (id,a) values (813,16);
+insert into t (id,a) values (813,17);
+insert into t (id,a) values (813,18);
+insert into t (id,a) values (813,19);
+insert into t (id,a) values (813,20);
+insert into t (id,a) values (813,21);
+insert into t (id,a) values (813,22);
+insert into t (id,a) values (813,23);
+insert into t (id,a) values (813,24);
+insert into t (id,a) values (813,25);
+insert into t (id,a) values (813,26);
+insert into t (id,a) values (813,27);
+insert into t (id,a) values (813,28);
+insert into t (id,a) values (813,29);
+insert into t (id,a) values (813,30);
+insert into t (id,a) values (813,31);
+insert into t (id,a) values (813,32);
+insert into t (id,a) values (813,33);
+insert into t (id,a) values (813,34);
+insert into t (id,a) values (813,35);
+insert into t (id,a) values (813,36);
+insert into t (id,a) values (813,37);
+insert into t (id,a) values (813,38);
+insert into t (id,a) values (813,39);
+insert into t (id,a) values (813,40);
+insert into t (id,a) values (813,41);
+insert into t (id,a) values (813,42);
+insert into t (id,a) values (813,43);
+insert into t (id,a) values (813,44);
+insert into t (id,a) values (813,45);
+insert into t (id,a) values (813,46);
+insert into t (id,a) values (813,47);
+insert into t (id,a) values (813,48);
+insert into t (id,a) values (813,49);
+insert into t (id,a) values (813,50);
+insert into t (id,a) values (813,51);
+insert into t (id,a) values (813,52);
+insert into t (id,a) values (813,53);
+insert into t (id,a) values (813,54);
+insert into t (id,a) values (813,55);
+insert into t (id,a) values (813,56);
+insert into t (id,a) values (813,57);
+insert into t (id,a) values (813,58);
+insert into t (id,a) values (813,59);
+insert into t (id,a) values (813,60);
+insert into t (id,a) values (813,61);
+insert into t (id,a) values (813,62);
+insert into t (id,a) values (813,63);
+insert into t (id,a) values (813,64);
+insert into t (id,a) values (813,65);
+insert into t (id,a) values (813,66);
+insert into t (id,a) values (813,67);
+insert into t (id,a) values (813,68);
+insert into t (id,a) values (813,69);
+insert into t (id,a) values (813,70);
+insert into t (id,a) values (813,71);
+insert into t (id,a) values (813,72);
+insert into t (id,a) values (813,73);
+insert into t (id,a) values (813,74);
+insert into t (id,a) values (813,75);
+insert into t (id,a) values (813,76);
+insert into t (id,a) values (813,77);
+insert into t (id,a) values (813,78);
+insert into t (id,a) values (813,79);
+insert into t (id,a) values (813,80);
+insert into t (id,a) values (813,81);
+insert into t (id,a) values (813,82);
+insert into t (id,a) values (813,83);
+insert into t (id,a) values (813,84);
+insert into t (id,a) values (813,85);
+insert into t (id,a) values (813,86);
+insert into t (id,a) values (813,87);
+insert into t (id,a) values (813,88);
+insert into t (id,a) values (813,89);
+insert into t (id,a) values (813,90);
+insert into t (id,a) values (813,91);
+insert into t (id,a) values (813,92);
+insert into t (id,a) values (813,93);
+insert into t (id,a) values (813,94);
+insert into t (id,a) values (813,95);
+insert into t (id,a) values (813,96);
+insert into t (id,a) values (813,97);
+insert into t (id,a) values (813,98);
+insert into t (id,a) values (813,99);
+insert into t (id,a) values (814,0);
+insert into t (id,a) values (814,1);
+insert into t (id,a) values (814,2);
+insert into t (id,a) values (814,3);
+insert into t (id,a) values (814,4);
+insert into t (id,a) values (814,5);
+insert into t (id,a) values (814,6);
+insert into t (id,a) values (814,7);
+insert into t (id,a) values (814,8);
+insert into t (id,a) values (814,9);
+insert into t (id,a) values (814,10);
+insert into t (id,a) values (814,11);
+insert into t (id,a) values (814,12);
+insert into t (id,a) values (814,13);
+insert into t (id,a) values (814,14);
+insert into t (id,a) values (814,15);
+insert into t (id,a) values (814,16);
+insert into t (id,a) values (814,17);
+insert into t (id,a) values (814,18);
+insert into t (id,a) values (814,19);
+insert into t (id,a) values (814,20);
+insert into t (id,a) values (814,21);
+insert into t (id,a) values (814,22);
+insert into t (id,a) values (814,23);
+insert into t (id,a) values (814,24);
+insert into t (id,a) values (814,25);
+insert into t (id,a) values (814,26);
+insert into t (id,a) values (814,27);
+insert into t (id,a) values (814,28);
+insert into t (id,a) values (814,29);
+insert into t (id,a) values (814,30);
+insert into t (id,a) values (814,31);
+insert into t (id,a) values (814,32);
+insert into t (id,a) values (814,33);
+insert into t (id,a) values (814,34);
+insert into t (id,a) values (814,35);
+insert into t (id,a) values (814,36);
+insert into t (id,a) values (814,37);
+insert into t (id,a) values (814,38);
+insert into t (id,a) values (814,39);
+insert into t (id,a) values (814,40);
+insert into t (id,a) values (814,41);
+insert into t (id,a) values (814,42);
+insert into t (id,a) values (814,43);
+insert into t (id,a) values (814,44);
+insert into t (id,a) values (814,45);
+insert into t (id,a) values (814,46);
+insert into t (id,a) values (814,47);
+insert into t (id,a) values (814,48);
+insert into t (id,a) values (814,49);
+insert into t (id,a) values (814,50);
+insert into t (id,a) values (814,51);
+insert into t (id,a) values (814,52);
+insert into t (id,a) values (814,53);
+insert into t (id,a) values (814,54);
+insert into t (id,a) values (814,55);
+insert into t (id,a) values (814,56);
+insert into t (id,a) values (814,57);
+insert into t (id,a) values (814,58);
+insert into t (id,a) values (814,59);
+insert into t (id,a) values (814,60);
+insert into t (id,a) values (814,61);
+insert into t (id,a) values (814,62);
+insert into t (id,a) values (814,63);
+insert into t (id,a) values (814,64);
+insert into t (id,a) values (814,65);
+insert into t (id,a) values (814,66);
+insert into t (id,a) values (814,67);
+insert into t (id,a) values (814,68);
+insert into t (id,a) values (814,69);
+insert into t (id,a) values (814,70);
+insert into t (id,a) values (814,71);
+insert into t (id,a) values (814,72);
+insert into t (id,a) values (814,73);
+insert into t (id,a) values (814,74);
+insert into t (id,a) values (814,75);
+insert into t (id,a) values (814,76);
+insert into t (id,a) values (814,77);
+insert into t (id,a) values (814,78);
+insert into t (id,a) values (814,79);
+insert into t (id,a) values (814,80);
+insert into t (id,a) values (814,81);
+insert into t (id,a) values (814,82);
+insert into t (id,a) values (814,83);
+insert into t (id,a) values (814,84);
+insert into t (id,a) values (814,85);
+insert into t (id,a) values (814,86);
+insert into t (id,a) values (814,87);
+insert into t (id,a) values (814,88);
+insert into t (id,a) values (814,89);
+insert into t (id,a) values (814,90);
+insert into t (id,a) values (814,91);
+insert into t (id,a) values (814,92);
+insert into t (id,a) values (814,93);
+insert into t (id,a) values (814,94);
+insert into t (id,a) values (814,95);
+insert into t (id,a) values (814,96);
+insert into t (id,a) values (814,97);
+insert into t (id,a) values (814,98);
+insert into t (id,a) values (814,99);
+insert into t (id,a) values (815,0);
+insert into t (id,a) values (815,1);
+insert into t (id,a) values (815,2);
+insert into t (id,a) values (815,3);
+insert into t (id,a) values (815,4);
+insert into t (id,a) values (815,5);
+insert into t (id,a) values (815,6);
+insert into t (id,a) values (815,7);
+insert into t (id,a) values (815,8);
+insert into t (id,a) values (815,9);
+insert into t (id,a) values (815,10);
+insert into t (id,a) values (815,11);
+insert into t (id,a) values (815,12);
+insert into t (id,a) values (815,13);
+insert into t (id,a) values (815,14);
+insert into t (id,a) values (815,15);
+insert into t (id,a) values (815,16);
+insert into t (id,a) values (815,17);
+insert into t (id,a) values (815,18);
+insert into t (id,a) values (815,19);
+insert into t (id,a) values (815,20);
+insert into t (id,a) values (815,21);
+insert into t (id,a) values (815,22);
+insert into t (id,a) values (815,23);
+insert into t (id,a) values (815,24);
+insert into t (id,a) values (815,25);
+insert into t (id,a) values (815,26);
+insert into t (id,a) values (815,27);
+insert into t (id,a) values (815,28);
+insert into t (id,a) values (815,29);
+insert into t (id,a) values (815,30);
+insert into t (id,a) values (815,31);
+insert into t (id,a) values (815,32);
+insert into t (id,a) values (815,33);
+insert into t (id,a) values (815,34);
+insert into t (id,a) values (815,35);
+insert into t (id,a) values (815,36);
+insert into t (id,a) values (815,37);
+insert into t (id,a) values (815,38);
+insert into t (id,a) values (815,39);
+insert into t (id,a) values (815,40);
+insert into t (id,a) values (815,41);
+insert into t (id,a) values (815,42);
+insert into t (id,a) values (815,43);
+insert into t (id,a) values (815,44);
+insert into t (id,a) values (815,45);
+insert into t (id,a) values (815,46);
+insert into t (id,a) values (815,47);
+insert into t (id,a) values (815,48);
+insert into t (id,a) values (815,49);
+insert into t (id,a) values (815,50);
+insert into t (id,a) values (815,51);
+insert into t (id,a) values (815,52);
+insert into t (id,a) values (815,53);
+insert into t (id,a) values (815,54);
+insert into t (id,a) values (815,55);
+insert into t (id,a) values (815,56);
+insert into t (id,a) values (815,57);
+insert into t (id,a) values (815,58);
+insert into t (id,a) values (815,59);
+insert into t (id,a) values (815,60);
+insert into t (id,a) values (815,61);
+insert into t (id,a) values (815,62);
+insert into t (id,a) values (815,63);
+insert into t (id,a) values (815,64);
+insert into t (id,a) values (815,65);
+insert into t (id,a) values (815,66);
+insert into t (id,a) values (815,67);
+insert into t (id,a) values (815,68);
+insert into t (id,a) values (815,69);
+insert into t (id,a) values (815,70);
+insert into t (id,a) values (815,71);
+insert into t (id,a) values (815,72);
+insert into t (id,a) values (815,73);
+insert into t (id,a) values (815,74);
+insert into t (id,a) values (815,75);
+insert into t (id,a) values (815,76);
+insert into t (id,a) values (815,77);
+insert into t (id,a) values (815,78);
+insert into t (id,a) values (815,79);
+insert into t (id,a) values (815,80);
+insert into t (id,a) values (815,81);
+insert into t (id,a) values (815,82);
+insert into t (id,a) values (815,83);
+insert into t (id,a) values (815,84);
+insert into t (id,a) values (815,85);
+insert into t (id,a) values (815,86);
+insert into t (id,a) values (815,87);
+insert into t (id,a) values (815,88);
+insert into t (id,a) values (815,89);
+insert into t (id,a) values (815,90);
+insert into t (id,a) values (815,91);
+insert into t (id,a) values (815,92);
+insert into t (id,a) values (815,93);
+insert into t (id,a) values (815,94);
+insert into t (id,a) values (815,95);
+insert into t (id,a) values (815,96);
+insert into t (id,a) values (815,97);
+insert into t (id,a) values (815,98);
+insert into t (id,a) values (815,99);
+insert into t (id,a) values (816,0);
+insert into t (id,a) values (816,1);
+insert into t (id,a) values (816,2);
+insert into t (id,a) values (816,3);
+insert into t (id,a) values (816,4);
+insert into t (id,a) values (816,5);
+insert into t (id,a) values (816,6);
+insert into t (id,a) values (816,7);
+insert into t (id,a) values (816,8);
+insert into t (id,a) values (816,9);
+insert into t (id,a) values (816,10);
+insert into t (id,a) values (816,11);
+insert into t (id,a) values (816,12);
+insert into t (id,a) values (816,13);
+insert into t (id,a) values (816,14);
+insert into t (id,a) values (816,15);
+insert into t (id,a) values (816,16);
+insert into t (id,a) values (816,17);
+insert into t (id,a) values (816,18);
+insert into t (id,a) values (816,19);
+insert into t (id,a) values (816,20);
+insert into t (id,a) values (816,21);
+insert into t (id,a) values (816,22);
+insert into t (id,a) values (816,23);
+insert into t (id,a) values (816,24);
+insert into t (id,a) values (816,25);
+insert into t (id,a) values (816,26);
+insert into t (id,a) values (816,27);
+insert into t (id,a) values (816,28);
+insert into t (id,a) values (816,29);
+insert into t (id,a) values (816,30);
+insert into t (id,a) values (816,31);
+insert into t (id,a) values (816,32);
+insert into t (id,a) values (816,33);
+insert into t (id,a) values (816,34);
+insert into t (id,a) values (816,35);
+insert into t (id,a) values (816,36);
+insert into t (id,a) values (816,37);
+insert into t (id,a) values (816,38);
+insert into t (id,a) values (816,39);
+insert into t (id,a) values (816,40);
+insert into t (id,a) values (816,41);
+insert into t (id,a) values (816,42);
+insert into t (id,a) values (816,43);
+insert into t (id,a) values (816,44);
+insert into t (id,a) values (816,45);
+insert into t (id,a) values (816,46);
+insert into t (id,a) values (816,47);
+insert into t (id,a) values (816,48);
+insert into t (id,a) values (816,49);
+insert into t (id,a) values (816,50);
+insert into t (id,a) values (816,51);
+insert into t (id,a) values (816,52);
+insert into t (id,a) values (816,53);
+insert into t (id,a) values (816,54);
+insert into t (id,a) values (816,55);
+insert into t (id,a) values (816,56);
+insert into t (id,a) values (816,57);
+insert into t (id,a) values (816,58);
+insert into t (id,a) values (816,59);
+insert into t (id,a) values (816,60);
+insert into t (id,a) values (816,61);
+insert into t (id,a) values (816,62);
+insert into t (id,a) values (816,63);
+insert into t (id,a) values (816,64);
+insert into t (id,a) values (816,65);
+insert into t (id,a) values (816,66);
+insert into t (id,a) values (816,67);
+insert into t (id,a) values (816,68);
+insert into t (id,a) values (816,69);
+insert into t (id,a) values (816,70);
+insert into t (id,a) values (816,71);
+insert into t (id,a) values (816,72);
+insert into t (id,a) values (816,73);
+insert into t (id,a) values (816,74);
+insert into t (id,a) values (816,75);
+insert into t (id,a) values (816,76);
+insert into t (id,a) values (816,77);
+insert into t (id,a) values (816,78);
+insert into t (id,a) values (816,79);
+insert into t (id,a) values (816,80);
+insert into t (id,a) values (816,81);
+insert into t (id,a) values (816,82);
+insert into t (id,a) values (816,83);
+insert into t (id,a) values (816,84);
+insert into t (id,a) values (816,85);
+insert into t (id,a) values (816,86);
+insert into t (id,a) values (816,87);
+insert into t (id,a) values (816,88);
+insert into t (id,a) values (816,89);
+insert into t (id,a) values (816,90);
+insert into t (id,a) values (816,91);
+insert into t (id,a) values (816,92);
+insert into t (id,a) values (816,93);
+insert into t (id,a) values (816,94);
+insert into t (id,a) values (816,95);
+insert into t (id,a) values (816,96);
+insert into t (id,a) values (816,97);
+insert into t (id,a) values (816,98);
+insert into t (id,a) values (816,99);
+insert into t (id,a) values (817,0);
+insert into t (id,a) values (817,1);
+insert into t (id,a) values (817,2);
+insert into t (id,a) values (817,3);
+insert into t (id,a) values (817,4);
+insert into t (id,a) values (817,5);
+insert into t (id,a) values (817,6);
+insert into t (id,a) values (817,7);
+insert into t (id,a) values (817,8);
+insert into t (id,a) values (817,9);
+insert into t (id,a) values (817,10);
+insert into t (id,a) values (817,11);
+insert into t (id,a) values (817,12);
+insert into t (id,a) values (817,13);
+insert into t (id,a) values (817,14);
+insert into t (id,a) values (817,15);
+insert into t (id,a) values (817,16);
+insert into t (id,a) values (817,17);
+insert into t (id,a) values (817,18);
+insert into t (id,a) values (817,19);
+insert into t (id,a) values (817,20);
+insert into t (id,a) values (817,21);
+insert into t (id,a) values (817,22);
+insert into t (id,a) values (817,23);
+insert into t (id,a) values (817,24);
+insert into t (id,a) values (817,25);
+insert into t (id,a) values (817,26);
+insert into t (id,a) values (817,27);
+insert into t (id,a) values (817,28);
+insert into t (id,a) values (817,29);
+insert into t (id,a) values (817,30);
+insert into t (id,a) values (817,31);
+insert into t (id,a) values (817,32);
+insert into t (id,a) values (817,33);
+insert into t (id,a) values (817,34);
+insert into t (id,a) values (817,35);
+insert into t (id,a) values (817,36);
+insert into t (id,a) values (817,37);
+insert into t (id,a) values (817,38);
+insert into t (id,a) values (817,39);
+insert into t (id,a) values (817,40);
+insert into t (id,a) values (817,41);
+insert into t (id,a) values (817,42);
+insert into t (id,a) values (817,43);
+insert into t (id,a) values (817,44);
+insert into t (id,a) values (817,45);
+insert into t (id,a) values (817,46);
+insert into t (id,a) values (817,47);
+insert into t (id,a) values (817,48);
+insert into t (id,a) values (817,49);
+insert into t (id,a) values (817,50);
+insert into t (id,a) values (817,51);
+insert into t (id,a) values (817,52);
+insert into t (id,a) values (817,53);
+insert into t (id,a) values (817,54);
+insert into t (id,a) values (817,55);
+insert into t (id,a) values (817,56);
+insert into t (id,a) values (817,57);
+insert into t (id,a) values (817,58);
+insert into t (id,a) values (817,59);
+insert into t (id,a) values (817,60);
+insert into t (id,a) values (817,61);
+insert into t (id,a) values (817,62);
+insert into t (id,a) values (817,63);
+insert into t (id,a) values (817,64);
+insert into t (id,a) values (817,65);
+insert into t (id,a) values (817,66);
+insert into t (id,a) values (817,67);
+insert into t (id,a) values (817,68);
+insert into t (id,a) values (817,69);
+insert into t (id,a) values (817,70);
+insert into t (id,a) values (817,71);
+insert into t (id,a) values (817,72);
+insert into t (id,a) values (817,73);
+insert into t (id,a) values (817,74);
+insert into t (id,a) values (817,75);
+insert into t (id,a) values (817,76);
+insert into t (id,a) values (817,77);
+insert into t (id,a) values (817,78);
+insert into t (id,a) values (817,79);
+insert into t (id,a) values (817,80);
+insert into t (id,a) values (817,81);
+insert into t (id,a) values (817,82);
+insert into t (id,a) values (817,83);
+insert into t (id,a) values (817,84);
+insert into t (id,a) values (817,85);
+insert into t (id,a) values (817,86);
+insert into t (id,a) values (817,87);
+insert into t (id,a) values (817,88);
+insert into t (id,a) values (817,89);
+insert into t (id,a) values (817,90);
+insert into t (id,a) values (817,91);
+insert into t (id,a) values (817,92);
+insert into t (id,a) values (817,93);
+insert into t (id,a) values (817,94);
+insert into t (id,a) values (817,95);
+insert into t (id,a) values (817,96);
+insert into t (id,a) values (817,97);
+insert into t (id,a) values (817,98);
+insert into t (id,a) values (817,99);
+insert into t (id,a) values (818,0);
+insert into t (id,a) values (818,1);
+insert into t (id,a) values (818,2);
+insert into t (id,a) values (818,3);
+insert into t (id,a) values (818,4);
+insert into t (id,a) values (818,5);
+insert into t (id,a) values (818,6);
+insert into t (id,a) values (818,7);
+insert into t (id,a) values (818,8);
+insert into t (id,a) values (818,9);
+insert into t (id,a) values (818,10);
+insert into t (id,a) values (818,11);
+insert into t (id,a) values (818,12);
+insert into t (id,a) values (818,13);
+insert into t (id,a) values (818,14);
+insert into t (id,a) values (818,15);
+insert into t (id,a) values (818,16);
+insert into t (id,a) values (818,17);
+insert into t (id,a) values (818,18);
+insert into t (id,a) values (818,19);
+insert into t (id,a) values (818,20);
+insert into t (id,a) values (818,21);
+insert into t (id,a) values (818,22);
+insert into t (id,a) values (818,23);
+insert into t (id,a) values (818,24);
+insert into t (id,a) values (818,25);
+insert into t (id,a) values (818,26);
+insert into t (id,a) values (818,27);
+insert into t (id,a) values (818,28);
+insert into t (id,a) values (818,29);
+insert into t (id,a) values (818,30);
+insert into t (id,a) values (818,31);
+insert into t (id,a) values (818,32);
+insert into t (id,a) values (818,33);
+insert into t (id,a) values (818,34);
+insert into t (id,a) values (818,35);
+insert into t (id,a) values (818,36);
+insert into t (id,a) values (818,37);
+insert into t (id,a) values (818,38);
+insert into t (id,a) values (818,39);
+insert into t (id,a) values (818,40);
+insert into t (id,a) values (818,41);
+insert into t (id,a) values (818,42);
+insert into t (id,a) values (818,43);
+insert into t (id,a) values (818,44);
+insert into t (id,a) values (818,45);
+insert into t (id,a) values (818,46);
+insert into t (id,a) values (818,47);
+insert into t (id,a) values (818,48);
+insert into t (id,a) values (818,49);
+insert into t (id,a) values (818,50);
+insert into t (id,a) values (818,51);
+insert into t (id,a) values (818,52);
+insert into t (id,a) values (818,53);
+insert into t (id,a) values (818,54);
+insert into t (id,a) values (818,55);
+insert into t (id,a) values (818,56);
+insert into t (id,a) values (818,57);
+insert into t (id,a) values (818,58);
+insert into t (id,a) values (818,59);
+insert into t (id,a) values (818,60);
+insert into t (id,a) values (818,61);
+insert into t (id,a) values (818,62);
+insert into t (id,a) values (818,63);
+insert into t (id,a) values (818,64);
+insert into t (id,a) values (818,65);
+insert into t (id,a) values (818,66);
+insert into t (id,a) values (818,67);
+insert into t (id,a) values (818,68);
+insert into t (id,a) values (818,69);
+insert into t (id,a) values (818,70);
+insert into t (id,a) values (818,71);
+insert into t (id,a) values (818,72);
+insert into t (id,a) values (818,73);
+insert into t (id,a) values (818,74);
+insert into t (id,a) values (818,75);
+insert into t (id,a) values (818,76);
+insert into t (id,a) values (818,77);
+insert into t (id,a) values (818,78);
+insert into t (id,a) values (818,79);
+insert into t (id,a) values (818,80);
+insert into t (id,a) values (818,81);
+insert into t (id,a) values (818,82);
+insert into t (id,a) values (818,83);
+insert into t (id,a) values (818,84);
+insert into t (id,a) values (818,85);
+insert into t (id,a) values (818,86);
+insert into t (id,a) values (818,87);
+insert into t (id,a) values (818,88);
+insert into t (id,a) values (818,89);
+insert into t (id,a) values (818,90);
+insert into t (id,a) values (818,91);
+insert into t (id,a) values (818,92);
+insert into t (id,a) values (818,93);
+insert into t (id,a) values (818,94);
+insert into t (id,a) values (818,95);
+insert into t (id,a) values (818,96);
+insert into t (id,a) values (818,97);
+insert into t (id,a) values (818,98);
+insert into t (id,a) values (818,99);
+insert into t (id,a) values (819,0);
+insert into t (id,a) values (819,1);
+insert into t (id,a) values (819,2);
+insert into t (id,a) values (819,3);
+insert into t (id,a) values (819,4);
+insert into t (id,a) values (819,5);
+insert into t (id,a) values (819,6);
+insert into t (id,a) values (819,7);
+insert into t (id,a) values (819,8);
+insert into t (id,a) values (819,9);
+insert into t (id,a) values (819,10);
+insert into t (id,a) values (819,11);
+insert into t (id,a) values (819,12);
+insert into t (id,a) values (819,13);
+insert into t (id,a) values (819,14);
+insert into t (id,a) values (819,15);
+insert into t (id,a) values (819,16);
+insert into t (id,a) values (819,17);
+insert into t (id,a) values (819,18);
+insert into t (id,a) values (819,19);
+insert into t (id,a) values (819,20);
+insert into t (id,a) values (819,21);
+insert into t (id,a) values (819,22);
+insert into t (id,a) values (819,23);
+insert into t (id,a) values (819,24);
+insert into t (id,a) values (819,25);
+insert into t (id,a) values (819,26);
+insert into t (id,a) values (819,27);
+insert into t (id,a) values (819,28);
+insert into t (id,a) values (819,29);
+insert into t (id,a) values (819,30);
+insert into t (id,a) values (819,31);
+insert into t (id,a) values (819,32);
+insert into t (id,a) values (819,33);
+insert into t (id,a) values (819,34);
+insert into t (id,a) values (819,35);
+insert into t (id,a) values (819,36);
+insert into t (id,a) values (819,37);
+insert into t (id,a) values (819,38);
+insert into t (id,a) values (819,39);
+insert into t (id,a) values (819,40);
+insert into t (id,a) values (819,41);
+insert into t (id,a) values (819,42);
+insert into t (id,a) values (819,43);
+insert into t (id,a) values (819,44);
+insert into t (id,a) values (819,45);
+insert into t (id,a) values (819,46);
+insert into t (id,a) values (819,47);
+insert into t (id,a) values (819,48);
+insert into t (id,a) values (819,49);
+insert into t (id,a) values (819,50);
+insert into t (id,a) values (819,51);
+insert into t (id,a) values (819,52);
+insert into t (id,a) values (819,53);
+insert into t (id,a) values (819,54);
+insert into t (id,a) values (819,55);
+insert into t (id,a) values (819,56);
+insert into t (id,a) values (819,57);
+insert into t (id,a) values (819,58);
+insert into t (id,a) values (819,59);
+insert into t (id,a) values (819,60);
+insert into t (id,a) values (819,61);
+insert into t (id,a) values (819,62);
+insert into t (id,a) values (819,63);
+insert into t (id,a) values (819,64);
+insert into t (id,a) values (819,65);
+insert into t (id,a) values (819,66);
+insert into t (id,a) values (819,67);
+insert into t (id,a) values (819,68);
+insert into t (id,a) values (819,69);
+insert into t (id,a) values (819,70);
+insert into t (id,a) values (819,71);
+insert into t (id,a) values (819,72);
+insert into t (id,a) values (819,73);
+insert into t (id,a) values (819,74);
+insert into t (id,a) values (819,75);
+insert into t (id,a) values (819,76);
+insert into t (id,a) values (819,77);
+insert into t (id,a) values (819,78);
+insert into t (id,a) values (819,79);
+insert into t (id,a) values (819,80);
+insert into t (id,a) values (819,81);
+insert into t (id,a) values (819,82);
+insert into t (id,a) values (819,83);
+insert into t (id,a) values (819,84);
+insert into t (id,a) values (819,85);
+insert into t (id,a) values (819,86);
+insert into t (id,a) values (819,87);
+insert into t (id,a) values (819,88);
+insert into t (id,a) values (819,89);
+insert into t (id,a) values (819,90);
+insert into t (id,a) values (819,91);
+insert into t (id,a) values (819,92);
+insert into t (id,a) values (819,93);
+insert into t (id,a) values (819,94);
+insert into t (id,a) values (819,95);
+insert into t (id,a) values (819,96);
+insert into t (id,a) values (819,97);
+insert into t (id,a) values (819,98);
+insert into t (id,a) values (819,99);
+insert into t (id,a) values (820,0);
+insert into t (id,a) values (820,1);
+insert into t (id,a) values (820,2);
+insert into t (id,a) values (820,3);
+insert into t (id,a) values (820,4);
+insert into t (id,a) values (820,5);
+insert into t (id,a) values (820,6);
+insert into t (id,a) values (820,7);
+insert into t (id,a) values (820,8);
+insert into t (id,a) values (820,9);
+insert into t (id,a) values (820,10);
+insert into t (id,a) values (820,11);
+insert into t (id,a) values (820,12);
+insert into t (id,a) values (820,13);
+insert into t (id,a) values (820,14);
+insert into t (id,a) values (820,15);
+insert into t (id,a) values (820,16);
+insert into t (id,a) values (820,17);
+insert into t (id,a) values (820,18);
+insert into t (id,a) values (820,19);
+insert into t (id,a) values (820,20);
+insert into t (id,a) values (820,21);
+insert into t (id,a) values (820,22);
+insert into t (id,a) values (820,23);
+insert into t (id,a) values (820,24);
+insert into t (id,a) values (820,25);
+insert into t (id,a) values (820,26);
+insert into t (id,a) values (820,27);
+insert into t (id,a) values (820,28);
+insert into t (id,a) values (820,29);
+insert into t (id,a) values (820,30);
+insert into t (id,a) values (820,31);
+insert into t (id,a) values (820,32);
+insert into t (id,a) values (820,33);
+insert into t (id,a) values (820,34);
+insert into t (id,a) values (820,35);
+insert into t (id,a) values (820,36);
+insert into t (id,a) values (820,37);
+insert into t (id,a) values (820,38);
+insert into t (id,a) values (820,39);
+insert into t (id,a) values (820,40);
+insert into t (id,a) values (820,41);
+insert into t (id,a) values (820,42);
+insert into t (id,a) values (820,43);
+insert into t (id,a) values (820,44);
+insert into t (id,a) values (820,45);
+insert into t (id,a) values (820,46);
+insert into t (id,a) values (820,47);
+insert into t (id,a) values (820,48);
+insert into t (id,a) values (820,49);
+insert into t (id,a) values (820,50);
+insert into t (id,a) values (820,51);
+insert into t (id,a) values (820,52);
+insert into t (id,a) values (820,53);
+insert into t (id,a) values (820,54);
+insert into t (id,a) values (820,55);
+insert into t (id,a) values (820,56);
+insert into t (id,a) values (820,57);
+insert into t (id,a) values (820,58);
+insert into t (id,a) values (820,59);
+insert into t (id,a) values (820,60);
+insert into t (id,a) values (820,61);
+insert into t (id,a) values (820,62);
+insert into t (id,a) values (820,63);
+insert into t (id,a) values (820,64);
+insert into t (id,a) values (820,65);
+insert into t (id,a) values (820,66);
+insert into t (id,a) values (820,67);
+insert into t (id,a) values (820,68);
+insert into t (id,a) values (820,69);
+insert into t (id,a) values (820,70);
+insert into t (id,a) values (820,71);
+insert into t (id,a) values (820,72);
+insert into t (id,a) values (820,73);
+insert into t (id,a) values (820,74);
+insert into t (id,a) values (820,75);
+insert into t (id,a) values (820,76);
+insert into t (id,a) values (820,77);
+insert into t (id,a) values (820,78);
+insert into t (id,a) values (820,79);
+insert into t (id,a) values (820,80);
+insert into t (id,a) values (820,81);
+insert into t (id,a) values (820,82);
+insert into t (id,a) values (820,83);
+insert into t (id,a) values (820,84);
+insert into t (id,a) values (820,85);
+insert into t (id,a) values (820,86);
+insert into t (id,a) values (820,87);
+insert into t (id,a) values (820,88);
+insert into t (id,a) values (820,89);
+insert into t (id,a) values (820,90);
+insert into t (id,a) values (820,91);
+insert into t (id,a) values (820,92);
+insert into t (id,a) values (820,93);
+insert into t (id,a) values (820,94);
+insert into t (id,a) values (820,95);
+insert into t (id,a) values (820,96);
+insert into t (id,a) values (820,97);
+insert into t (id,a) values (820,98);
+insert into t (id,a) values (820,99);
+insert into t (id,a) values (821,0);
+insert into t (id,a) values (821,1);
+insert into t (id,a) values (821,2);
+insert into t (id,a) values (821,3);
+insert into t (id,a) values (821,4);
+insert into t (id,a) values (821,5);
+insert into t (id,a) values (821,6);
+insert into t (id,a) values (821,7);
+insert into t (id,a) values (821,8);
+insert into t (id,a) values (821,9);
+insert into t (id,a) values (821,10);
+insert into t (id,a) values (821,11);
+insert into t (id,a) values (821,12);
+insert into t (id,a) values (821,13);
+insert into t (id,a) values (821,14);
+insert into t (id,a) values (821,15);
+insert into t (id,a) values (821,16);
+insert into t (id,a) values (821,17);
+insert into t (id,a) values (821,18);
+insert into t (id,a) values (821,19);
+insert into t (id,a) values (821,20);
+insert into t (id,a) values (821,21);
+insert into t (id,a) values (821,22);
+insert into t (id,a) values (821,23);
+insert into t (id,a) values (821,24);
+insert into t (id,a) values (821,25);
+insert into t (id,a) values (821,26);
+insert into t (id,a) values (821,27);
+insert into t (id,a) values (821,28);
+insert into t (id,a) values (821,29);
+insert into t (id,a) values (821,30);
+insert into t (id,a) values (821,31);
+insert into t (id,a) values (821,32);
+insert into t (id,a) values (821,33);
+insert into t (id,a) values (821,34);
+insert into t (id,a) values (821,35);
+insert into t (id,a) values (821,36);
+insert into t (id,a) values (821,37);
+insert into t (id,a) values (821,38);
+insert into t (id,a) values (821,39);
+insert into t (id,a) values (821,40);
+insert into t (id,a) values (821,41);
+insert into t (id,a) values (821,42);
+insert into t (id,a) values (821,43);
+insert into t (id,a) values (821,44);
+insert into t (id,a) values (821,45);
+insert into t (id,a) values (821,46);
+insert into t (id,a) values (821,47);
+insert into t (id,a) values (821,48);
+insert into t (id,a) values (821,49);
+insert into t (id,a) values (821,50);
+insert into t (id,a) values (821,51);
+insert into t (id,a) values (821,52);
+insert into t (id,a) values (821,53);
+insert into t (id,a) values (821,54);
+insert into t (id,a) values (821,55);
+insert into t (id,a) values (821,56);
+insert into t (id,a) values (821,57);
+insert into t (id,a) values (821,58);
+insert into t (id,a) values (821,59);
+insert into t (id,a) values (821,60);
+insert into t (id,a) values (821,61);
+insert into t (id,a) values (821,62);
+insert into t (id,a) values (821,63);
+insert into t (id,a) values (821,64);
+insert into t (id,a) values (821,65);
+insert into t (id,a) values (821,66);
+insert into t (id,a) values (821,67);
+insert into t (id,a) values (821,68);
+insert into t (id,a) values (821,69);
+insert into t (id,a) values (821,70);
+insert into t (id,a) values (821,71);
+insert into t (id,a) values (821,72);
+insert into t (id,a) values (821,73);
+insert into t (id,a) values (821,74);
+insert into t (id,a) values (821,75);
+insert into t (id,a) values (821,76);
+insert into t (id,a) values (821,77);
+insert into t (id,a) values (821,78);
+insert into t (id,a) values (821,79);
+insert into t (id,a) values (821,80);
+insert into t (id,a) values (821,81);
+insert into t (id,a) values (821,82);
+insert into t (id,a) values (821,83);
+insert into t (id,a) values (821,84);
+insert into t (id,a) values (821,85);
+insert into t (id,a) values (821,86);
+insert into t (id,a) values (821,87);
+insert into t (id,a) values (821,88);
+insert into t (id,a) values (821,89);
+insert into t (id,a) values (821,90);
+insert into t (id,a) values (821,91);
+insert into t (id,a) values (821,92);
+insert into t (id,a) values (821,93);
+insert into t (id,a) values (821,94);
+insert into t (id,a) values (821,95);
+insert into t (id,a) values (821,96);
+insert into t (id,a) values (821,97);
+insert into t (id,a) values (821,98);
+insert into t (id,a) values (821,99);
+insert into t (id,a) values (822,0);
+insert into t (id,a) values (822,1);
+insert into t (id,a) values (822,2);
+insert into t (id,a) values (822,3);
+insert into t (id,a) values (822,4);
+insert into t (id,a) values (822,5);
+insert into t (id,a) values (822,6);
+insert into t (id,a) values (822,7);
+insert into t (id,a) values (822,8);
+insert into t (id,a) values (822,9);
+insert into t (id,a) values (822,10);
+insert into t (id,a) values (822,11);
+insert into t (id,a) values (822,12);
+insert into t (id,a) values (822,13);
+insert into t (id,a) values (822,14);
+insert into t (id,a) values (822,15);
+insert into t (id,a) values (822,16);
+insert into t (id,a) values (822,17);
+insert into t (id,a) values (822,18);
+insert into t (id,a) values (822,19);
+insert into t (id,a) values (822,20);
+insert into t (id,a) values (822,21);
+insert into t (id,a) values (822,22);
+insert into t (id,a) values (822,23);
+insert into t (id,a) values (822,24);
+insert into t (id,a) values (822,25);
+insert into t (id,a) values (822,26);
+insert into t (id,a) values (822,27);
+insert into t (id,a) values (822,28);
+insert into t (id,a) values (822,29);
+insert into t (id,a) values (822,30);
+insert into t (id,a) values (822,31);
+insert into t (id,a) values (822,32);
+insert into t (id,a) values (822,33);
+insert into t (id,a) values (822,34);
+insert into t (id,a) values (822,35);
+insert into t (id,a) values (822,36);
+insert into t (id,a) values (822,37);
+insert into t (id,a) values (822,38);
+insert into t (id,a) values (822,39);
+insert into t (id,a) values (822,40);
+insert into t (id,a) values (822,41);
+insert into t (id,a) values (822,42);
+insert into t (id,a) values (822,43);
+insert into t (id,a) values (822,44);
+insert into t (id,a) values (822,45);
+insert into t (id,a) values (822,46);
+insert into t (id,a) values (822,47);
+insert into t (id,a) values (822,48);
+insert into t (id,a) values (822,49);
+insert into t (id,a) values (822,50);
+insert into t (id,a) values (822,51);
+insert into t (id,a) values (822,52);
+insert into t (id,a) values (822,53);
+insert into t (id,a) values (822,54);
+insert into t (id,a) values (822,55);
+insert into t (id,a) values (822,56);
+insert into t (id,a) values (822,57);
+insert into t (id,a) values (822,58);
+insert into t (id,a) values (822,59);
+insert into t (id,a) values (822,60);
+insert into t (id,a) values (822,61);
+insert into t (id,a) values (822,62);
+insert into t (id,a) values (822,63);
+insert into t (id,a) values (822,64);
+insert into t (id,a) values (822,65);
+insert into t (id,a) values (822,66);
+insert into t (id,a) values (822,67);
+insert into t (id,a) values (822,68);
+insert into t (id,a) values (822,69);
+insert into t (id,a) values (822,70);
+insert into t (id,a) values (822,71);
+insert into t (id,a) values (822,72);
+insert into t (id,a) values (822,73);
+insert into t (id,a) values (822,74);
+insert into t (id,a) values (822,75);
+insert into t (id,a) values (822,76);
+insert into t (id,a) values (822,77);
+insert into t (id,a) values (822,78);
+insert into t (id,a) values (822,79);
+insert into t (id,a) values (822,80);
+insert into t (id,a) values (822,81);
+insert into t (id,a) values (822,82);
+insert into t (id,a) values (822,83);
+insert into t (id,a) values (822,84);
+insert into t (id,a) values (822,85);
+insert into t (id,a) values (822,86);
+insert into t (id,a) values (822,87);
+insert into t (id,a) values (822,88);
+insert into t (id,a) values (822,89);
+insert into t (id,a) values (822,90);
+insert into t (id,a) values (822,91);
+insert into t (id,a) values (822,92);
+insert into t (id,a) values (822,93);
+insert into t (id,a) values (822,94);
+insert into t (id,a) values (822,95);
+insert into t (id,a) values (822,96);
+insert into t (id,a) values (822,97);
+insert into t (id,a) values (822,98);
+insert into t (id,a) values (822,99);
+insert into t (id,a) values (823,0);
+insert into t (id,a) values (823,1);
+insert into t (id,a) values (823,2);
+insert into t (id,a) values (823,3);
+insert into t (id,a) values (823,4);
+insert into t (id,a) values (823,5);
+insert into t (id,a) values (823,6);
+insert into t (id,a) values (823,7);
+insert into t (id,a) values (823,8);
+insert into t (id,a) values (823,9);
+insert into t (id,a) values (823,10);
+insert into t (id,a) values (823,11);
+insert into t (id,a) values (823,12);
+insert into t (id,a) values (823,13);
+insert into t (id,a) values (823,14);
+insert into t (id,a) values (823,15);
+insert into t (id,a) values (823,16);
+insert into t (id,a) values (823,17);
+insert into t (id,a) values (823,18);
+insert into t (id,a) values (823,19);
+insert into t (id,a) values (823,20);
+insert into t (id,a) values (823,21);
+insert into t (id,a) values (823,22);
+insert into t (id,a) values (823,23);
+insert into t (id,a) values (823,24);
+insert into t (id,a) values (823,25);
+insert into t (id,a) values (823,26);
+insert into t (id,a) values (823,27);
+insert into t (id,a) values (823,28);
+insert into t (id,a) values (823,29);
+insert into t (id,a) values (823,30);
+insert into t (id,a) values (823,31);
+insert into t (id,a) values (823,32);
+insert into t (id,a) values (823,33);
+insert into t (id,a) values (823,34);
+insert into t (id,a) values (823,35);
+insert into t (id,a) values (823,36);
+insert into t (id,a) values (823,37);
+insert into t (id,a) values (823,38);
+insert into t (id,a) values (823,39);
+insert into t (id,a) values (823,40);
+insert into t (id,a) values (823,41);
+insert into t (id,a) values (823,42);
+insert into t (id,a) values (823,43);
+insert into t (id,a) values (823,44);
+insert into t (id,a) values (823,45);
+insert into t (id,a) values (823,46);
+insert into t (id,a) values (823,47);
+insert into t (id,a) values (823,48);
+insert into t (id,a) values (823,49);
+insert into t (id,a) values (823,50);
+insert into t (id,a) values (823,51);
+insert into t (id,a) values (823,52);
+insert into t (id,a) values (823,53);
+insert into t (id,a) values (823,54);
+insert into t (id,a) values (823,55);
+insert into t (id,a) values (823,56);
+insert into t (id,a) values (823,57);
+insert into t (id,a) values (823,58);
+insert into t (id,a) values (823,59);
+insert into t (id,a) values (823,60);
+insert into t (id,a) values (823,61);
+insert into t (id,a) values (823,62);
+insert into t (id,a) values (823,63);
+insert into t (id,a) values (823,64);
+insert into t (id,a) values (823,65);
+insert into t (id,a) values (823,66);
+insert into t (id,a) values (823,67);
+insert into t (id,a) values (823,68);
+insert into t (id,a) values (823,69);
+insert into t (id,a) values (823,70);
+insert into t (id,a) values (823,71);
+insert into t (id,a) values (823,72);
+insert into t (id,a) values (823,73);
+insert into t (id,a) values (823,74);
+insert into t (id,a) values (823,75);
+insert into t (id,a) values (823,76);
+insert into t (id,a) values (823,77);
+insert into t (id,a) values (823,78);
+insert into t (id,a) values (823,79);
+insert into t (id,a) values (823,80);
+insert into t (id,a) values (823,81);
+insert into t (id,a) values (823,82);
+insert into t (id,a) values (823,83);
+insert into t (id,a) values (823,84);
+insert into t (id,a) values (823,85);
+insert into t (id,a) values (823,86);
+insert into t (id,a) values (823,87);
+insert into t (id,a) values (823,88);
+insert into t (id,a) values (823,89);
+insert into t (id,a) values (823,90);
+insert into t (id,a) values (823,91);
+insert into t (id,a) values (823,92);
+insert into t (id,a) values (823,93);
+insert into t (id,a) values (823,94);
+insert into t (id,a) values (823,95);
+insert into t (id,a) values (823,96);
+insert into t (id,a) values (823,97);
+insert into t (id,a) values (823,98);
+insert into t (id,a) values (823,99);
+insert into t (id,a) values (824,0);
+insert into t (id,a) values (824,1);
+insert into t (id,a) values (824,2);
+insert into t (id,a) values (824,3);
+insert into t (id,a) values (824,4);
+insert into t (id,a) values (824,5);
+insert into t (id,a) values (824,6);
+insert into t (id,a) values (824,7);
+insert into t (id,a) values (824,8);
+insert into t (id,a) values (824,9);
+insert into t (id,a) values (824,10);
+insert into t (id,a) values (824,11);
+insert into t (id,a) values (824,12);
+insert into t (id,a) values (824,13);
+insert into t (id,a) values (824,14);
+insert into t (id,a) values (824,15);
+insert into t (id,a) values (824,16);
+insert into t (id,a) values (824,17);
+insert into t (id,a) values (824,18);
+insert into t (id,a) values (824,19);
+insert into t (id,a) values (824,20);
+insert into t (id,a) values (824,21);
+insert into t (id,a) values (824,22);
+insert into t (id,a) values (824,23);
+insert into t (id,a) values (824,24);
+insert into t (id,a) values (824,25);
+insert into t (id,a) values (824,26);
+insert into t (id,a) values (824,27);
+insert into t (id,a) values (824,28);
+insert into t (id,a) values (824,29);
+insert into t (id,a) values (824,30);
+insert into t (id,a) values (824,31);
+insert into t (id,a) values (824,32);
+insert into t (id,a) values (824,33);
+insert into t (id,a) values (824,34);
+insert into t (id,a) values (824,35);
+insert into t (id,a) values (824,36);
+insert into t (id,a) values (824,37);
+insert into t (id,a) values (824,38);
+insert into t (id,a) values (824,39);
+insert into t (id,a) values (824,40);
+insert into t (id,a) values (824,41);
+insert into t (id,a) values (824,42);
+insert into t (id,a) values (824,43);
+insert into t (id,a) values (824,44);
+insert into t (id,a) values (824,45);
+insert into t (id,a) values (824,46);
+insert into t (id,a) values (824,47);
+insert into t (id,a) values (824,48);
+insert into t (id,a) values (824,49);
+insert into t (id,a) values (824,50);
+insert into t (id,a) values (824,51);
+insert into t (id,a) values (824,52);
+insert into t (id,a) values (824,53);
+insert into t (id,a) values (824,54);
+insert into t (id,a) values (824,55);
+insert into t (id,a) values (824,56);
+insert into t (id,a) values (824,57);
+insert into t (id,a) values (824,58);
+insert into t (id,a) values (824,59);
+insert into t (id,a) values (824,60);
+insert into t (id,a) values (824,61);
+insert into t (id,a) values (824,62);
+insert into t (id,a) values (824,63);
+insert into t (id,a) values (824,64);
+insert into t (id,a) values (824,65);
+insert into t (id,a) values (824,66);
+insert into t (id,a) values (824,67);
+insert into t (id,a) values (824,68);
+insert into t (id,a) values (824,69);
+insert into t (id,a) values (824,70);
+insert into t (id,a) values (824,71);
+insert into t (id,a) values (824,72);
+insert into t (id,a) values (824,73);
+insert into t (id,a) values (824,74);
+insert into t (id,a) values (824,75);
+insert into t (id,a) values (824,76);
+insert into t (id,a) values (824,77);
+insert into t (id,a) values (824,78);
+insert into t (id,a) values (824,79);
+insert into t (id,a) values (824,80);
+insert into t (id,a) values (824,81);
+insert into t (id,a) values (824,82);
+insert into t (id,a) values (824,83);
+insert into t (id,a) values (824,84);
+insert into t (id,a) values (824,85);
+insert into t (id,a) values (824,86);
+insert into t (id,a) values (824,87);
+insert into t (id,a) values (824,88);
+insert into t (id,a) values (824,89);
+insert into t (id,a) values (824,90);
+insert into t (id,a) values (824,91);
+insert into t (id,a) values (824,92);
+insert into t (id,a) values (824,93);
+insert into t (id,a) values (824,94);
+insert into t (id,a) values (824,95);
+insert into t (id,a) values (824,96);
+insert into t (id,a) values (824,97);
+insert into t (id,a) values (824,98);
+insert into t (id,a) values (824,99);
+insert into t (id,a) values (825,0);
+insert into t (id,a) values (825,1);
+insert into t (id,a) values (825,2);
+insert into t (id,a) values (825,3);
+insert into t (id,a) values (825,4);
+insert into t (id,a) values (825,5);
+insert into t (id,a) values (825,6);
+insert into t (id,a) values (825,7);
+insert into t (id,a) values (825,8);
+insert into t (id,a) values (825,9);
+insert into t (id,a) values (825,10);
+insert into t (id,a) values (825,11);
+insert into t (id,a) values (825,12);
+insert into t (id,a) values (825,13);
+insert into t (id,a) values (825,14);
+insert into t (id,a) values (825,15);
+insert into t (id,a) values (825,16);
+insert into t (id,a) values (825,17);
+insert into t (id,a) values (825,18);
+insert into t (id,a) values (825,19);
+insert into t (id,a) values (825,20);
+insert into t (id,a) values (825,21);
+insert into t (id,a) values (825,22);
+insert into t (id,a) values (825,23);
+insert into t (id,a) values (825,24);
+insert into t (id,a) values (825,25);
+insert into t (id,a) values (825,26);
+insert into t (id,a) values (825,27);
+insert into t (id,a) values (825,28);
+insert into t (id,a) values (825,29);
+insert into t (id,a) values (825,30);
+insert into t (id,a) values (825,31);
+insert into t (id,a) values (825,32);
+insert into t (id,a) values (825,33);
+insert into t (id,a) values (825,34);
+insert into t (id,a) values (825,35);
+insert into t (id,a) values (825,36);
+insert into t (id,a) values (825,37);
+insert into t (id,a) values (825,38);
+insert into t (id,a) values (825,39);
+insert into t (id,a) values (825,40);
+insert into t (id,a) values (825,41);
+insert into t (id,a) values (825,42);
+insert into t (id,a) values (825,43);
+insert into t (id,a) values (825,44);
+insert into t (id,a) values (825,45);
+insert into t (id,a) values (825,46);
+insert into t (id,a) values (825,47);
+insert into t (id,a) values (825,48);
+insert into t (id,a) values (825,49);
+insert into t (id,a) values (825,50);
+insert into t (id,a) values (825,51);
+insert into t (id,a) values (825,52);
+insert into t (id,a) values (825,53);
+insert into t (id,a) values (825,54);
+insert into t (id,a) values (825,55);
+insert into t (id,a) values (825,56);
+insert into t (id,a) values (825,57);
+insert into t (id,a) values (825,58);
+insert into t (id,a) values (825,59);
+insert into t (id,a) values (825,60);
+insert into t (id,a) values (825,61);
+insert into t (id,a) values (825,62);
+insert into t (id,a) values (825,63);
+insert into t (id,a) values (825,64);
+insert into t (id,a) values (825,65);
+insert into t (id,a) values (825,66);
+insert into t (id,a) values (825,67);
+insert into t (id,a) values (825,68);
+insert into t (id,a) values (825,69);
+insert into t (id,a) values (825,70);
+insert into t (id,a) values (825,71);
+insert into t (id,a) values (825,72);
+insert into t (id,a) values (825,73);
+insert into t (id,a) values (825,74);
+insert into t (id,a) values (825,75);
+insert into t (id,a) values (825,76);
+insert into t (id,a) values (825,77);
+insert into t (id,a) values (825,78);
+insert into t (id,a) values (825,79);
+insert into t (id,a) values (825,80);
+insert into t (id,a) values (825,81);
+insert into t (id,a) values (825,82);
+insert into t (id,a) values (825,83);
+insert into t (id,a) values (825,84);
+insert into t (id,a) values (825,85);
+insert into t (id,a) values (825,86);
+insert into t (id,a) values (825,87);
+insert into t (id,a) values (825,88);
+insert into t (id,a) values (825,89);
+insert into t (id,a) values (825,90);
+insert into t (id,a) values (825,91);
+insert into t (id,a) values (825,92);
+insert into t (id,a) values (825,93);
+insert into t (id,a) values (825,94);
+insert into t (id,a) values (825,95);
+insert into t (id,a) values (825,96);
+insert into t (id,a) values (825,97);
+insert into t (id,a) values (825,98);
+insert into t (id,a) values (825,99);
+insert into t (id,a) values (826,0);
+insert into t (id,a) values (826,1);
+insert into t (id,a) values (826,2);
+insert into t (id,a) values (826,3);
+insert into t (id,a) values (826,4);
+insert into t (id,a) values (826,5);
+insert into t (id,a) values (826,6);
+insert into t (id,a) values (826,7);
+insert into t (id,a) values (826,8);
+insert into t (id,a) values (826,9);
+insert into t (id,a) values (826,10);
+insert into t (id,a) values (826,11);
+insert into t (id,a) values (826,12);
+insert into t (id,a) values (826,13);
+insert into t (id,a) values (826,14);
+insert into t (id,a) values (826,15);
+insert into t (id,a) values (826,16);
+insert into t (id,a) values (826,17);
+insert into t (id,a) values (826,18);
+insert into t (id,a) values (826,19);
+insert into t (id,a) values (826,20);
+insert into t (id,a) values (826,21);
+insert into t (id,a) values (826,22);
+insert into t (id,a) values (826,23);
+insert into t (id,a) values (826,24);
+insert into t (id,a) values (826,25);
+insert into t (id,a) values (826,26);
+insert into t (id,a) values (826,27);
+insert into t (id,a) values (826,28);
+insert into t (id,a) values (826,29);
+insert into t (id,a) values (826,30);
+insert into t (id,a) values (826,31);
+insert into t (id,a) values (826,32);
+insert into t (id,a) values (826,33);
+insert into t (id,a) values (826,34);
+insert into t (id,a) values (826,35);
+insert into t (id,a) values (826,36);
+insert into t (id,a) values (826,37);
+insert into t (id,a) values (826,38);
+insert into t (id,a) values (826,39);
+insert into t (id,a) values (826,40);
+insert into t (id,a) values (826,41);
+insert into t (id,a) values (826,42);
+insert into t (id,a) values (826,43);
+insert into t (id,a) values (826,44);
+insert into t (id,a) values (826,45);
+insert into t (id,a) values (826,46);
+insert into t (id,a) values (826,47);
+insert into t (id,a) values (826,48);
+insert into t (id,a) values (826,49);
+insert into t (id,a) values (826,50);
+insert into t (id,a) values (826,51);
+insert into t (id,a) values (826,52);
+insert into t (id,a) values (826,53);
+insert into t (id,a) values (826,54);
+insert into t (id,a) values (826,55);
+insert into t (id,a) values (826,56);
+insert into t (id,a) values (826,57);
+insert into t (id,a) values (826,58);
+insert into t (id,a) values (826,59);
+insert into t (id,a) values (826,60);
+insert into t (id,a) values (826,61);
+insert into t (id,a) values (826,62);
+insert into t (id,a) values (826,63);
+insert into t (id,a) values (826,64);
+insert into t (id,a) values (826,65);
+insert into t (id,a) values (826,66);
+insert into t (id,a) values (826,67);
+insert into t (id,a) values (826,68);
+insert into t (id,a) values (826,69);
+insert into t (id,a) values (826,70);
+insert into t (id,a) values (826,71);
+insert into t (id,a) values (826,72);
+insert into t (id,a) values (826,73);
+insert into t (id,a) values (826,74);
+insert into t (id,a) values (826,75);
+insert into t (id,a) values (826,76);
+insert into t (id,a) values (826,77);
+insert into t (id,a) values (826,78);
+insert into t (id,a) values (826,79);
+insert into t (id,a) values (826,80);
+insert into t (id,a) values (826,81);
+insert into t (id,a) values (826,82);
+insert into t (id,a) values (826,83);
+insert into t (id,a) values (826,84);
+insert into t (id,a) values (826,85);
+insert into t (id,a) values (826,86);
+insert into t (id,a) values (826,87);
+insert into t (id,a) values (826,88);
+insert into t (id,a) values (826,89);
+insert into t (id,a) values (826,90);
+insert into t (id,a) values (826,91);
+insert into t (id,a) values (826,92);
+insert into t (id,a) values (826,93);
+insert into t (id,a) values (826,94);
+insert into t (id,a) values (826,95);
+insert into t (id,a) values (826,96);
+insert into t (id,a) values (826,97);
+insert into t (id,a) values (826,98);
+insert into t (id,a) values (826,99);
+insert into t (id,a) values (827,0);
+insert into t (id,a) values (827,1);
+insert into t (id,a) values (827,2);
+insert into t (id,a) values (827,3);
+insert into t (id,a) values (827,4);
+insert into t (id,a) values (827,5);
+insert into t (id,a) values (827,6);
+insert into t (id,a) values (827,7);
+insert into t (id,a) values (827,8);
+insert into t (id,a) values (827,9);
+insert into t (id,a) values (827,10);
+insert into t (id,a) values (827,11);
+insert into t (id,a) values (827,12);
+insert into t (id,a) values (827,13);
+insert into t (id,a) values (827,14);
+insert into t (id,a) values (827,15);
+insert into t (id,a) values (827,16);
+insert into t (id,a) values (827,17);
+insert into t (id,a) values (827,18);
+insert into t (id,a) values (827,19);
+insert into t (id,a) values (827,20);
+insert into t (id,a) values (827,21);
+insert into t (id,a) values (827,22);
+insert into t (id,a) values (827,23);
+insert into t (id,a) values (827,24);
+insert into t (id,a) values (827,25);
+insert into t (id,a) values (827,26);
+insert into t (id,a) values (827,27);
+insert into t (id,a) values (827,28);
+insert into t (id,a) values (827,29);
+insert into t (id,a) values (827,30);
+insert into t (id,a) values (827,31);
+insert into t (id,a) values (827,32);
+insert into t (id,a) values (827,33);
+insert into t (id,a) values (827,34);
+insert into t (id,a) values (827,35);
+insert into t (id,a) values (827,36);
+insert into t (id,a) values (827,37);
+insert into t (id,a) values (827,38);
+insert into t (id,a) values (827,39);
+insert into t (id,a) values (827,40);
+insert into t (id,a) values (827,41);
+insert into t (id,a) values (827,42);
+insert into t (id,a) values (827,43);
+insert into t (id,a) values (827,44);
+insert into t (id,a) values (827,45);
+insert into t (id,a) values (827,46);
+insert into t (id,a) values (827,47);
+insert into t (id,a) values (827,48);
+insert into t (id,a) values (827,49);
+insert into t (id,a) values (827,50);
+insert into t (id,a) values (827,51);
+insert into t (id,a) values (827,52);
+insert into t (id,a) values (827,53);
+insert into t (id,a) values (827,54);
+insert into t (id,a) values (827,55);
+insert into t (id,a) values (827,56);
+insert into t (id,a) values (827,57);
+insert into t (id,a) values (827,58);
+insert into t (id,a) values (827,59);
+insert into t (id,a) values (827,60);
+insert into t (id,a) values (827,61);
+insert into t (id,a) values (827,62);
+insert into t (id,a) values (827,63);
+insert into t (id,a) values (827,64);
+insert into t (id,a) values (827,65);
+insert into t (id,a) values (827,66);
+insert into t (id,a) values (827,67);
+insert into t (id,a) values (827,68);
+insert into t (id,a) values (827,69);
+insert into t (id,a) values (827,70);
+insert into t (id,a) values (827,71);
+insert into t (id,a) values (827,72);
+insert into t (id,a) values (827,73);
+insert into t (id,a) values (827,74);
+insert into t (id,a) values (827,75);
+insert into t (id,a) values (827,76);
+insert into t (id,a) values (827,77);
+insert into t (id,a) values (827,78);
+insert into t (id,a) values (827,79);
+insert into t (id,a) values (827,80);
+insert into t (id,a) values (827,81);
+insert into t (id,a) values (827,82);
+insert into t (id,a) values (827,83);
+insert into t (id,a) values (827,84);
+insert into t (id,a) values (827,85);
+insert into t (id,a) values (827,86);
+insert into t (id,a) values (827,87);
+insert into t (id,a) values (827,88);
+insert into t (id,a) values (827,89);
+insert into t (id,a) values (827,90);
+insert into t (id,a) values (827,91);
+insert into t (id,a) values (827,92);
+insert into t (id,a) values (827,93);
+insert into t (id,a) values (827,94);
+insert into t (id,a) values (827,95);
+insert into t (id,a) values (827,96);
+insert into t (id,a) values (827,97);
+insert into t (id,a) values (827,98);
+insert into t (id,a) values (827,99);
+insert into t (id,a) values (828,0);
+insert into t (id,a) values (828,1);
+insert into t (id,a) values (828,2);
+insert into t (id,a) values (828,3);
+insert into t (id,a) values (828,4);
+insert into t (id,a) values (828,5);
+insert into t (id,a) values (828,6);
+insert into t (id,a) values (828,7);
+insert into t (id,a) values (828,8);
+insert into t (id,a) values (828,9);
+insert into t (id,a) values (828,10);
+insert into t (id,a) values (828,11);
+insert into t (id,a) values (828,12);
+insert into t (id,a) values (828,13);
+insert into t (id,a) values (828,14);
+insert into t (id,a) values (828,15);
+insert into t (id,a) values (828,16);
+insert into t (id,a) values (828,17);
+insert into t (id,a) values (828,18);
+insert into t (id,a) values (828,19);
+insert into t (id,a) values (828,20);
+insert into t (id,a) values (828,21);
+insert into t (id,a) values (828,22);
+insert into t (id,a) values (828,23);
+insert into t (id,a) values (828,24);
+insert into t (id,a) values (828,25);
+insert into t (id,a) values (828,26);
+insert into t (id,a) values (828,27);
+insert into t (id,a) values (828,28);
+insert into t (id,a) values (828,29);
+insert into t (id,a) values (828,30);
+insert into t (id,a) values (828,31);
+insert into t (id,a) values (828,32);
+insert into t (id,a) values (828,33);
+insert into t (id,a) values (828,34);
+insert into t (id,a) values (828,35);
+insert into t (id,a) values (828,36);
+insert into t (id,a) values (828,37);
+insert into t (id,a) values (828,38);
+insert into t (id,a) values (828,39);
+insert into t (id,a) values (828,40);
+insert into t (id,a) values (828,41);
+insert into t (id,a) values (828,42);
+insert into t (id,a) values (828,43);
+insert into t (id,a) values (828,44);
+insert into t (id,a) values (828,45);
+insert into t (id,a) values (828,46);
+insert into t (id,a) values (828,47);
+insert into t (id,a) values (828,48);
+insert into t (id,a) values (828,49);
+insert into t (id,a) values (828,50);
+insert into t (id,a) values (828,51);
+insert into t (id,a) values (828,52);
+insert into t (id,a) values (828,53);
+insert into t (id,a) values (828,54);
+insert into t (id,a) values (828,55);
+insert into t (id,a) values (828,56);
+insert into t (id,a) values (828,57);
+insert into t (id,a) values (828,58);
+insert into t (id,a) values (828,59);
+insert into t (id,a) values (828,60);
+insert into t (id,a) values (828,61);
+insert into t (id,a) values (828,62);
+insert into t (id,a) values (828,63);
+insert into t (id,a) values (828,64);
+insert into t (id,a) values (828,65);
+insert into t (id,a) values (828,66);
+insert into t (id,a) values (828,67);
+insert into t (id,a) values (828,68);
+insert into t (id,a) values (828,69);
+insert into t (id,a) values (828,70);
+insert into t (id,a) values (828,71);
+insert into t (id,a) values (828,72);
+insert into t (id,a) values (828,73);
+insert into t (id,a) values (828,74);
+insert into t (id,a) values (828,75);
+insert into t (id,a) values (828,76);
+insert into t (id,a) values (828,77);
+insert into t (id,a) values (828,78);
+insert into t (id,a) values (828,79);
+insert into t (id,a) values (828,80);
+insert into t (id,a) values (828,81);
+insert into t (id,a) values (828,82);
+insert into t (id,a) values (828,83);
+insert into t (id,a) values (828,84);
+insert into t (id,a) values (828,85);
+insert into t (id,a) values (828,86);
+insert into t (id,a) values (828,87);
+insert into t (id,a) values (828,88);
+insert into t (id,a) values (828,89);
+insert into t (id,a) values (828,90);
+insert into t (id,a) values (828,91);
+insert into t (id,a) values (828,92);
+insert into t (id,a) values (828,93);
+insert into t (id,a) values (828,94);
+insert into t (id,a) values (828,95);
+insert into t (id,a) values (828,96);
+insert into t (id,a) values (828,97);
+insert into t (id,a) values (828,98);
+insert into t (id,a) values (828,99);
+insert into t (id,a) values (829,0);
+insert into t (id,a) values (829,1);
+insert into t (id,a) values (829,2);
+insert into t (id,a) values (829,3);
+insert into t (id,a) values (829,4);
+insert into t (id,a) values (829,5);
+insert into t (id,a) values (829,6);
+insert into t (id,a) values (829,7);
+insert into t (id,a) values (829,8);
+insert into t (id,a) values (829,9);
+insert into t (id,a) values (829,10);
+insert into t (id,a) values (829,11);
+insert into t (id,a) values (829,12);
+insert into t (id,a) values (829,13);
+insert into t (id,a) values (829,14);
+insert into t (id,a) values (829,15);
+insert into t (id,a) values (829,16);
+insert into t (id,a) values (829,17);
+insert into t (id,a) values (829,18);
+insert into t (id,a) values (829,19);
+insert into t (id,a) values (829,20);
+insert into t (id,a) values (829,21);
+insert into t (id,a) values (829,22);
+insert into t (id,a) values (829,23);
+insert into t (id,a) values (829,24);
+insert into t (id,a) values (829,25);
+insert into t (id,a) values (829,26);
+insert into t (id,a) values (829,27);
+insert into t (id,a) values (829,28);
+insert into t (id,a) values (829,29);
+insert into t (id,a) values (829,30);
+insert into t (id,a) values (829,31);
+insert into t (id,a) values (829,32);
+insert into t (id,a) values (829,33);
+insert into t (id,a) values (829,34);
+insert into t (id,a) values (829,35);
+insert into t (id,a) values (829,36);
+insert into t (id,a) values (829,37);
+insert into t (id,a) values (829,38);
+insert into t (id,a) values (829,39);
+insert into t (id,a) values (829,40);
+insert into t (id,a) values (829,41);
+insert into t (id,a) values (829,42);
+insert into t (id,a) values (829,43);
+insert into t (id,a) values (829,44);
+insert into t (id,a) values (829,45);
+insert into t (id,a) values (829,46);
+insert into t (id,a) values (829,47);
+insert into t (id,a) values (829,48);
+insert into t (id,a) values (829,49);
+insert into t (id,a) values (829,50);
+insert into t (id,a) values (829,51);
+insert into t (id,a) values (829,52);
+insert into t (id,a) values (829,53);
+insert into t (id,a) values (829,54);
+insert into t (id,a) values (829,55);
+insert into t (id,a) values (829,56);
+insert into t (id,a) values (829,57);
+insert into t (id,a) values (829,58);
+insert into t (id,a) values (829,59);
+insert into t (id,a) values (829,60);
+insert into t (id,a) values (829,61);
+insert into t (id,a) values (829,62);
+insert into t (id,a) values (829,63);
+insert into t (id,a) values (829,64);
+insert into t (id,a) values (829,65);
+insert into t (id,a) values (829,66);
+insert into t (id,a) values (829,67);
+insert into t (id,a) values (829,68);
+insert into t (id,a) values (829,69);
+insert into t (id,a) values (829,70);
+insert into t (id,a) values (829,71);
+insert into t (id,a) values (829,72);
+insert into t (id,a) values (829,73);
+insert into t (id,a) values (829,74);
+insert into t (id,a) values (829,75);
+insert into t (id,a) values (829,76);
+insert into t (id,a) values (829,77);
+insert into t (id,a) values (829,78);
+insert into t (id,a) values (829,79);
+insert into t (id,a) values (829,80);
+insert into t (id,a) values (829,81);
+insert into t (id,a) values (829,82);
+insert into t (id,a) values (829,83);
+insert into t (id,a) values (829,84);
+insert into t (id,a) values (829,85);
+insert into t (id,a) values (829,86);
+insert into t (id,a) values (829,87);
+insert into t (id,a) values (829,88);
+insert into t (id,a) values (829,89);
+insert into t (id,a) values (829,90);
+insert into t (id,a) values (829,91);
+insert into t (id,a) values (829,92);
+insert into t (id,a) values (829,93);
+insert into t (id,a) values (829,94);
+insert into t (id,a) values (829,95);
+insert into t (id,a) values (829,96);
+insert into t (id,a) values (829,97);
+insert into t (id,a) values (829,98);
+insert into t (id,a) values (829,99);
+insert into t (id,a) values (830,0);
+insert into t (id,a) values (830,1);
+insert into t (id,a) values (830,2);
+insert into t (id,a) values (830,3);
+insert into t (id,a) values (830,4);
+insert into t (id,a) values (830,5);
+insert into t (id,a) values (830,6);
+insert into t (id,a) values (830,7);
+insert into t (id,a) values (830,8);
+insert into t (id,a) values (830,9);
+insert into t (id,a) values (830,10);
+insert into t (id,a) values (830,11);
+insert into t (id,a) values (830,12);
+insert into t (id,a) values (830,13);
+insert into t (id,a) values (830,14);
+insert into t (id,a) values (830,15);
+insert into t (id,a) values (830,16);
+insert into t (id,a) values (830,17);
+insert into t (id,a) values (830,18);
+insert into t (id,a) values (830,19);
+insert into t (id,a) values (830,20);
+insert into t (id,a) values (830,21);
+insert into t (id,a) values (830,22);
+insert into t (id,a) values (830,23);
+insert into t (id,a) values (830,24);
+insert into t (id,a) values (830,25);
+insert into t (id,a) values (830,26);
+insert into t (id,a) values (830,27);
+insert into t (id,a) values (830,28);
+insert into t (id,a) values (830,29);
+insert into t (id,a) values (830,30);
+insert into t (id,a) values (830,31);
+insert into t (id,a) values (830,32);
+insert into t (id,a) values (830,33);
+insert into t (id,a) values (830,34);
+insert into t (id,a) values (830,35);
+insert into t (id,a) values (830,36);
+insert into t (id,a) values (830,37);
+insert into t (id,a) values (830,38);
+insert into t (id,a) values (830,39);
+insert into t (id,a) values (830,40);
+insert into t (id,a) values (830,41);
+insert into t (id,a) values (830,42);
+insert into t (id,a) values (830,43);
+insert into t (id,a) values (830,44);
+insert into t (id,a) values (830,45);
+insert into t (id,a) values (830,46);
+insert into t (id,a) values (830,47);
+insert into t (id,a) values (830,48);
+insert into t (id,a) values (830,49);
+insert into t (id,a) values (830,50);
+insert into t (id,a) values (830,51);
+insert into t (id,a) values (830,52);
+insert into t (id,a) values (830,53);
+insert into t (id,a) values (830,54);
+insert into t (id,a) values (830,55);
+insert into t (id,a) values (830,56);
+insert into t (id,a) values (830,57);
+insert into t (id,a) values (830,58);
+insert into t (id,a) values (830,59);
+insert into t (id,a) values (830,60);
+insert into t (id,a) values (830,61);
+insert into t (id,a) values (830,62);
+insert into t (id,a) values (830,63);
+insert into t (id,a) values (830,64);
+insert into t (id,a) values (830,65);
+insert into t (id,a) values (830,66);
+insert into t (id,a) values (830,67);
+insert into t (id,a) values (830,68);
+insert into t (id,a) values (830,69);
+insert into t (id,a) values (830,70);
+insert into t (id,a) values (830,71);
+insert into t (id,a) values (830,72);
+insert into t (id,a) values (830,73);
+insert into t (id,a) values (830,74);
+insert into t (id,a) values (830,75);
+insert into t (id,a) values (830,76);
+insert into t (id,a) values (830,77);
+insert into t (id,a) values (830,78);
+insert into t (id,a) values (830,79);
+insert into t (id,a) values (830,80);
+insert into t (id,a) values (830,81);
+insert into t (id,a) values (830,82);
+insert into t (id,a) values (830,83);
+insert into t (id,a) values (830,84);
+insert into t (id,a) values (830,85);
+insert into t (id,a) values (830,86);
+insert into t (id,a) values (830,87);
+insert into t (id,a) values (830,88);
+insert into t (id,a) values (830,89);
+insert into t (id,a) values (830,90);
+insert into t (id,a) values (830,91);
+insert into t (id,a) values (830,92);
+insert into t (id,a) values (830,93);
+insert into t (id,a) values (830,94);
+insert into t (id,a) values (830,95);
+insert into t (id,a) values (830,96);
+insert into t (id,a) values (830,97);
+insert into t (id,a) values (830,98);
+insert into t (id,a) values (830,99);
+insert into t (id,a) values (831,0);
+insert into t (id,a) values (831,1);
+insert into t (id,a) values (831,2);
+insert into t (id,a) values (831,3);
+insert into t (id,a) values (831,4);
+insert into t (id,a) values (831,5);
+insert into t (id,a) values (831,6);
+insert into t (id,a) values (831,7);
+insert into t (id,a) values (831,8);
+insert into t (id,a) values (831,9);
+insert into t (id,a) values (831,10);
+insert into t (id,a) values (831,11);
+insert into t (id,a) values (831,12);
+insert into t (id,a) values (831,13);
+insert into t (id,a) values (831,14);
+insert into t (id,a) values (831,15);
+insert into t (id,a) values (831,16);
+insert into t (id,a) values (831,17);
+insert into t (id,a) values (831,18);
+insert into t (id,a) values (831,19);
+insert into t (id,a) values (831,20);
+insert into t (id,a) values (831,21);
+insert into t (id,a) values (831,22);
+insert into t (id,a) values (831,23);
+insert into t (id,a) values (831,24);
+insert into t (id,a) values (831,25);
+insert into t (id,a) values (831,26);
+insert into t (id,a) values (831,27);
+insert into t (id,a) values (831,28);
+insert into t (id,a) values (831,29);
+insert into t (id,a) values (831,30);
+insert into t (id,a) values (831,31);
+insert into t (id,a) values (831,32);
+insert into t (id,a) values (831,33);
+insert into t (id,a) values (831,34);
+insert into t (id,a) values (831,35);
+insert into t (id,a) values (831,36);
+insert into t (id,a) values (831,37);
+insert into t (id,a) values (831,38);
+insert into t (id,a) values (831,39);
+insert into t (id,a) values (831,40);
+insert into t (id,a) values (831,41);
+insert into t (id,a) values (831,42);
+insert into t (id,a) values (831,43);
+insert into t (id,a) values (831,44);
+insert into t (id,a) values (831,45);
+insert into t (id,a) values (831,46);
+insert into t (id,a) values (831,47);
+insert into t (id,a) values (831,48);
+insert into t (id,a) values (831,49);
+insert into t (id,a) values (831,50);
+insert into t (id,a) values (831,51);
+insert into t (id,a) values (831,52);
+insert into t (id,a) values (831,53);
+insert into t (id,a) values (831,54);
+insert into t (id,a) values (831,55);
+insert into t (id,a) values (831,56);
+insert into t (id,a) values (831,57);
+insert into t (id,a) values (831,58);
+insert into t (id,a) values (831,59);
+insert into t (id,a) values (831,60);
+insert into t (id,a) values (831,61);
+insert into t (id,a) values (831,62);
+insert into t (id,a) values (831,63);
+insert into t (id,a) values (831,64);
+insert into t (id,a) values (831,65);
+insert into t (id,a) values (831,66);
+insert into t (id,a) values (831,67);
+insert into t (id,a) values (831,68);
+insert into t (id,a) values (831,69);
+insert into t (id,a) values (831,70);
+insert into t (id,a) values (831,71);
+insert into t (id,a) values (831,72);
+insert into t (id,a) values (831,73);
+insert into t (id,a) values (831,74);
+insert into t (id,a) values (831,75);
+insert into t (id,a) values (831,76);
+insert into t (id,a) values (831,77);
+insert into t (id,a) values (831,78);
+insert into t (id,a) values (831,79);
+insert into t (id,a) values (831,80);
+insert into t (id,a) values (831,81);
+insert into t (id,a) values (831,82);
+insert into t (id,a) values (831,83);
+insert into t (id,a) values (831,84);
+insert into t (id,a) values (831,85);
+insert into t (id,a) values (831,86);
+insert into t (id,a) values (831,87);
+insert into t (id,a) values (831,88);
+insert into t (id,a) values (831,89);
+insert into t (id,a) values (831,90);
+insert into t (id,a) values (831,91);
+insert into t (id,a) values (831,92);
+insert into t (id,a) values (831,93);
+insert into t (id,a) values (831,94);
+insert into t (id,a) values (831,95);
+insert into t (id,a) values (831,96);
+insert into t (id,a) values (831,97);
+insert into t (id,a) values (831,98);
+insert into t (id,a) values (831,99);
+insert into t (id,a) values (832,0);
+insert into t (id,a) values (832,1);
+insert into t (id,a) values (832,2);
+insert into t (id,a) values (832,3);
+insert into t (id,a) values (832,4);
+insert into t (id,a) values (832,5);
+insert into t (id,a) values (832,6);
+insert into t (id,a) values (832,7);
+insert into t (id,a) values (832,8);
+insert into t (id,a) values (832,9);
+insert into t (id,a) values (832,10);
+insert into t (id,a) values (832,11);
+insert into t (id,a) values (832,12);
+insert into t (id,a) values (832,13);
+insert into t (id,a) values (832,14);
+insert into t (id,a) values (832,15);
+insert into t (id,a) values (832,16);
+insert into t (id,a) values (832,17);
+insert into t (id,a) values (832,18);
+insert into t (id,a) values (832,19);
+insert into t (id,a) values (832,20);
+insert into t (id,a) values (832,21);
+insert into t (id,a) values (832,22);
+insert into t (id,a) values (832,23);
+insert into t (id,a) values (832,24);
+insert into t (id,a) values (832,25);
+insert into t (id,a) values (832,26);
+insert into t (id,a) values (832,27);
+insert into t (id,a) values (832,28);
+insert into t (id,a) values (832,29);
+insert into t (id,a) values (832,30);
+insert into t (id,a) values (832,31);
+insert into t (id,a) values (832,32);
+insert into t (id,a) values (832,33);
+insert into t (id,a) values (832,34);
+insert into t (id,a) values (832,35);
+insert into t (id,a) values (832,36);
+insert into t (id,a) values (832,37);
+insert into t (id,a) values (832,38);
+insert into t (id,a) values (832,39);
+insert into t (id,a) values (832,40);
+insert into t (id,a) values (832,41);
+insert into t (id,a) values (832,42);
+insert into t (id,a) values (832,43);
+insert into t (id,a) values (832,44);
+insert into t (id,a) values (832,45);
+insert into t (id,a) values (832,46);
+insert into t (id,a) values (832,47);
+insert into t (id,a) values (832,48);
+insert into t (id,a) values (832,49);
+insert into t (id,a) values (832,50);
+insert into t (id,a) values (832,51);
+insert into t (id,a) values (832,52);
+insert into t (id,a) values (832,53);
+insert into t (id,a) values (832,54);
+insert into t (id,a) values (832,55);
+insert into t (id,a) values (832,56);
+insert into t (id,a) values (832,57);
+insert into t (id,a) values (832,58);
+insert into t (id,a) values (832,59);
+insert into t (id,a) values (832,60);
+insert into t (id,a) values (832,61);
+insert into t (id,a) values (832,62);
+insert into t (id,a) values (832,63);
+insert into t (id,a) values (832,64);
+insert into t (id,a) values (832,65);
+insert into t (id,a) values (832,66);
+insert into t (id,a) values (832,67);
+insert into t (id,a) values (832,68);
+insert into t (id,a) values (832,69);
+insert into t (id,a) values (832,70);
+insert into t (id,a) values (832,71);
+insert into t (id,a) values (832,72);
+insert into t (id,a) values (832,73);
+insert into t (id,a) values (832,74);
+insert into t (id,a) values (832,75);
+insert into t (id,a) values (832,76);
+insert into t (id,a) values (832,77);
+insert into t (id,a) values (832,78);
+insert into t (id,a) values (832,79);
+insert into t (id,a) values (832,80);
+insert into t (id,a) values (832,81);
+insert into t (id,a) values (832,82);
+insert into t (id,a) values (832,83);
+insert into t (id,a) values (832,84);
+insert into t (id,a) values (832,85);
+insert into t (id,a) values (832,86);
+insert into t (id,a) values (832,87);
+insert into t (id,a) values (832,88);
+insert into t (id,a) values (832,89);
+insert into t (id,a) values (832,90);
+insert into t (id,a) values (832,91);
+insert into t (id,a) values (832,92);
+insert into t (id,a) values (832,93);
+insert into t (id,a) values (832,94);
+insert into t (id,a) values (832,95);
+insert into t (id,a) values (832,96);
+insert into t (id,a) values (832,97);
+insert into t (id,a) values (832,98);
+insert into t (id,a) values (832,99);
+insert into t (id,a) values (833,0);
+insert into t (id,a) values (833,1);
+insert into t (id,a) values (833,2);
+insert into t (id,a) values (833,3);
+insert into t (id,a) values (833,4);
+insert into t (id,a) values (833,5);
+insert into t (id,a) values (833,6);
+insert into t (id,a) values (833,7);
+insert into t (id,a) values (833,8);
+insert into t (id,a) values (833,9);
+insert into t (id,a) values (833,10);
+insert into t (id,a) values (833,11);
+insert into t (id,a) values (833,12);
+insert into t (id,a) values (833,13);
+insert into t (id,a) values (833,14);
+insert into t (id,a) values (833,15);
+insert into t (id,a) values (833,16);
+insert into t (id,a) values (833,17);
+insert into t (id,a) values (833,18);
+insert into t (id,a) values (833,19);
+insert into t (id,a) values (833,20);
+insert into t (id,a) values (833,21);
+insert into t (id,a) values (833,22);
+insert into t (id,a) values (833,23);
+insert into t (id,a) values (833,24);
+insert into t (id,a) values (833,25);
+insert into t (id,a) values (833,26);
+insert into t (id,a) values (833,27);
+insert into t (id,a) values (833,28);
+insert into t (id,a) values (833,29);
+insert into t (id,a) values (833,30);
+insert into t (id,a) values (833,31);
+insert into t (id,a) values (833,32);
+insert into t (id,a) values (833,33);
+insert into t (id,a) values (833,34);
+insert into t (id,a) values (833,35);
+insert into t (id,a) values (833,36);
+insert into t (id,a) values (833,37);
+insert into t (id,a) values (833,38);
+insert into t (id,a) values (833,39);
+insert into t (id,a) values (833,40);
+insert into t (id,a) values (833,41);
+insert into t (id,a) values (833,42);
+insert into t (id,a) values (833,43);
+insert into t (id,a) values (833,44);
+insert into t (id,a) values (833,45);
+insert into t (id,a) values (833,46);
+insert into t (id,a) values (833,47);
+insert into t (id,a) values (833,48);
+insert into t (id,a) values (833,49);
+insert into t (id,a) values (833,50);
+insert into t (id,a) values (833,51);
+insert into t (id,a) values (833,52);
+insert into t (id,a) values (833,53);
+insert into t (id,a) values (833,54);
+insert into t (id,a) values (833,55);
+insert into t (id,a) values (833,56);
+insert into t (id,a) values (833,57);
+insert into t (id,a) values (833,58);
+insert into t (id,a) values (833,59);
+insert into t (id,a) values (833,60);
+insert into t (id,a) values (833,61);
+insert into t (id,a) values (833,62);
+insert into t (id,a) values (833,63);
+insert into t (id,a) values (833,64);
+insert into t (id,a) values (833,65);
+insert into t (id,a) values (833,66);
+insert into t (id,a) values (833,67);
+insert into t (id,a) values (833,68);
+insert into t (id,a) values (833,69);
+insert into t (id,a) values (833,70);
+insert into t (id,a) values (833,71);
+insert into t (id,a) values (833,72);
+insert into t (id,a) values (833,73);
+insert into t (id,a) values (833,74);
+insert into t (id,a) values (833,75);
+insert into t (id,a) values (833,76);
+insert into t (id,a) values (833,77);
+insert into t (id,a) values (833,78);
+insert into t (id,a) values (833,79);
+insert into t (id,a) values (833,80);
+insert into t (id,a) values (833,81);
+insert into t (id,a) values (833,82);
+insert into t (id,a) values (833,83);
+insert into t (id,a) values (833,84);
+insert into t (id,a) values (833,85);
+insert into t (id,a) values (833,86);
+insert into t (id,a) values (833,87);
+insert into t (id,a) values (833,88);
+insert into t (id,a) values (833,89);
+insert into t (id,a) values (833,90);
+insert into t (id,a) values (833,91);
+insert into t (id,a) values (833,92);
+insert into t (id,a) values (833,93);
+insert into t (id,a) values (833,94);
+insert into t (id,a) values (833,95);
+insert into t (id,a) values (833,96);
+insert into t (id,a) values (833,97);
+insert into t (id,a) values (833,98);
+insert into t (id,a) values (833,99);
+insert into t (id,a) values (834,0);
+insert into t (id,a) values (834,1);
+insert into t (id,a) values (834,2);
+insert into t (id,a) values (834,3);
+insert into t (id,a) values (834,4);
+insert into t (id,a) values (834,5);
+insert into t (id,a) values (834,6);
+insert into t (id,a) values (834,7);
+insert into t (id,a) values (834,8);
+insert into t (id,a) values (834,9);
+insert into t (id,a) values (834,10);
+insert into t (id,a) values (834,11);
+insert into t (id,a) values (834,12);
+insert into t (id,a) values (834,13);
+insert into t (id,a) values (834,14);
+insert into t (id,a) values (834,15);
+insert into t (id,a) values (834,16);
+insert into t (id,a) values (834,17);
+insert into t (id,a) values (834,18);
+insert into t (id,a) values (834,19);
+insert into t (id,a) values (834,20);
+insert into t (id,a) values (834,21);
+insert into t (id,a) values (834,22);
+insert into t (id,a) values (834,23);
+insert into t (id,a) values (834,24);
+insert into t (id,a) values (834,25);
+insert into t (id,a) values (834,26);
+insert into t (id,a) values (834,27);
+insert into t (id,a) values (834,28);
+insert into t (id,a) values (834,29);
+insert into t (id,a) values (834,30);
+insert into t (id,a) values (834,31);
+insert into t (id,a) values (834,32);
+insert into t (id,a) values (834,33);
+insert into t (id,a) values (834,34);
+insert into t (id,a) values (834,35);
+insert into t (id,a) values (834,36);
+insert into t (id,a) values (834,37);
+insert into t (id,a) values (834,38);
+insert into t (id,a) values (834,39);
+insert into t (id,a) values (834,40);
+insert into t (id,a) values (834,41);
+insert into t (id,a) values (834,42);
+insert into t (id,a) values (834,43);
+insert into t (id,a) values (834,44);
+insert into t (id,a) values (834,45);
+insert into t (id,a) values (834,46);
+insert into t (id,a) values (834,47);
+insert into t (id,a) values (834,48);
+insert into t (id,a) values (834,49);
+insert into t (id,a) values (834,50);
+insert into t (id,a) values (834,51);
+insert into t (id,a) values (834,52);
+insert into t (id,a) values (834,53);
+insert into t (id,a) values (834,54);
+insert into t (id,a) values (834,55);
+insert into t (id,a) values (834,56);
+insert into t (id,a) values (834,57);
+insert into t (id,a) values (834,58);
+insert into t (id,a) values (834,59);
+insert into t (id,a) values (834,60);
+insert into t (id,a) values (834,61);
+insert into t (id,a) values (834,62);
+insert into t (id,a) values (834,63);
+insert into t (id,a) values (834,64);
+insert into t (id,a) values (834,65);
+insert into t (id,a) values (834,66);
+insert into t (id,a) values (834,67);
+insert into t (id,a) values (834,68);
+insert into t (id,a) values (834,69);
+insert into t (id,a) values (834,70);
+insert into t (id,a) values (834,71);
+insert into t (id,a) values (834,72);
+insert into t (id,a) values (834,73);
+insert into t (id,a) values (834,74);
+insert into t (id,a) values (834,75);
+insert into t (id,a) values (834,76);
+insert into t (id,a) values (834,77);
+insert into t (id,a) values (834,78);
+insert into t (id,a) values (834,79);
+insert into t (id,a) values (834,80);
+insert into t (id,a) values (834,81);
+insert into t (id,a) values (834,82);
+insert into t (id,a) values (834,83);
+insert into t (id,a) values (834,84);
+insert into t (id,a) values (834,85);
+insert into t (id,a) values (834,86);
+insert into t (id,a) values (834,87);
+insert into t (id,a) values (834,88);
+insert into t (id,a) values (834,89);
+insert into t (id,a) values (834,90);
+insert into t (id,a) values (834,91);
+insert into t (id,a) values (834,92);
+insert into t (id,a) values (834,93);
+insert into t (id,a) values (834,94);
+insert into t (id,a) values (834,95);
+insert into t (id,a) values (834,96);
+insert into t (id,a) values (834,97);
+insert into t (id,a) values (834,98);
+insert into t (id,a) values (834,99);
+insert into t (id,a) values (835,0);
+insert into t (id,a) values (835,1);
+insert into t (id,a) values (835,2);
+insert into t (id,a) values (835,3);
+insert into t (id,a) values (835,4);
+insert into t (id,a) values (835,5);
+insert into t (id,a) values (835,6);
+insert into t (id,a) values (835,7);
+insert into t (id,a) values (835,8);
+insert into t (id,a) values (835,9);
+insert into t (id,a) values (835,10);
+insert into t (id,a) values (835,11);
+insert into t (id,a) values (835,12);
+insert into t (id,a) values (835,13);
+insert into t (id,a) values (835,14);
+insert into t (id,a) values (835,15);
+insert into t (id,a) values (835,16);
+insert into t (id,a) values (835,17);
+insert into t (id,a) values (835,18);
+insert into t (id,a) values (835,19);
+insert into t (id,a) values (835,20);
+insert into t (id,a) values (835,21);
+insert into t (id,a) values (835,22);
+insert into t (id,a) values (835,23);
+insert into t (id,a) values (835,24);
+insert into t (id,a) values (835,25);
+insert into t (id,a) values (835,26);
+insert into t (id,a) values (835,27);
+insert into t (id,a) values (835,28);
+insert into t (id,a) values (835,29);
+insert into t (id,a) values (835,30);
+insert into t (id,a) values (835,31);
+insert into t (id,a) values (835,32);
+insert into t (id,a) values (835,33);
+insert into t (id,a) values (835,34);
+insert into t (id,a) values (835,35);
+insert into t (id,a) values (835,36);
+insert into t (id,a) values (835,37);
+insert into t (id,a) values (835,38);
+insert into t (id,a) values (835,39);
+insert into t (id,a) values (835,40);
+insert into t (id,a) values (835,41);
+insert into t (id,a) values (835,42);
+insert into t (id,a) values (835,43);
+insert into t (id,a) values (835,44);
+insert into t (id,a) values (835,45);
+insert into t (id,a) values (835,46);
+insert into t (id,a) values (835,47);
+insert into t (id,a) values (835,48);
+insert into t (id,a) values (835,49);
+insert into t (id,a) values (835,50);
+insert into t (id,a) values (835,51);
+insert into t (id,a) values (835,52);
+insert into t (id,a) values (835,53);
+insert into t (id,a) values (835,54);
+insert into t (id,a) values (835,55);
+insert into t (id,a) values (835,56);
+insert into t (id,a) values (835,57);
+insert into t (id,a) values (835,58);
+insert into t (id,a) values (835,59);
+insert into t (id,a) values (835,60);
+insert into t (id,a) values (835,61);
+insert into t (id,a) values (835,62);
+insert into t (id,a) values (835,63);
+insert into t (id,a) values (835,64);
+insert into t (id,a) values (835,65);
+insert into t (id,a) values (835,66);
+insert into t (id,a) values (835,67);
+insert into t (id,a) values (835,68);
+insert into t (id,a) values (835,69);
+insert into t (id,a) values (835,70);
+insert into t (id,a) values (835,71);
+insert into t (id,a) values (835,72);
+insert into t (id,a) values (835,73);
+insert into t (id,a) values (835,74);
+insert into t (id,a) values (835,75);
+insert into t (id,a) values (835,76);
+insert into t (id,a) values (835,77);
+insert into t (id,a) values (835,78);
+insert into t (id,a) values (835,79);
+insert into t (id,a) values (835,80);
+insert into t (id,a) values (835,81);
+insert into t (id,a) values (835,82);
+insert into t (id,a) values (835,83);
+insert into t (id,a) values (835,84);
+insert into t (id,a) values (835,85);
+insert into t (id,a) values (835,86);
+insert into t (id,a) values (835,87);
+insert into t (id,a) values (835,88);
+insert into t (id,a) values (835,89);
+insert into t (id,a) values (835,90);
+insert into t (id,a) values (835,91);
+insert into t (id,a) values (835,92);
+insert into t (id,a) values (835,93);
+insert into t (id,a) values (835,94);
+insert into t (id,a) values (835,95);
+insert into t (id,a) values (835,96);
+insert into t (id,a) values (835,97);
+insert into t (id,a) values (835,98);
+insert into t (id,a) values (835,99);
+insert into t (id,a) values (836,0);
+insert into t (id,a) values (836,1);
+insert into t (id,a) values (836,2);
+insert into t (id,a) values (836,3);
+insert into t (id,a) values (836,4);
+insert into t (id,a) values (836,5);
+insert into t (id,a) values (836,6);
+insert into t (id,a) values (836,7);
+insert into t (id,a) values (836,8);
+insert into t (id,a) values (836,9);
+insert into t (id,a) values (836,10);
+insert into t (id,a) values (836,11);
+insert into t (id,a) values (836,12);
+insert into t (id,a) values (836,13);
+insert into t (id,a) values (836,14);
+insert into t (id,a) values (836,15);
+insert into t (id,a) values (836,16);
+insert into t (id,a) values (836,17);
+insert into t (id,a) values (836,18);
+insert into t (id,a) values (836,19);
+insert into t (id,a) values (836,20);
+insert into t (id,a) values (836,21);
+insert into t (id,a) values (836,22);
+insert into t (id,a) values (836,23);
+insert into t (id,a) values (836,24);
+insert into t (id,a) values (836,25);
+insert into t (id,a) values (836,26);
+insert into t (id,a) values (836,27);
+insert into t (id,a) values (836,28);
+insert into t (id,a) values (836,29);
+insert into t (id,a) values (836,30);
+insert into t (id,a) values (836,31);
+insert into t (id,a) values (836,32);
+insert into t (id,a) values (836,33);
+insert into t (id,a) values (836,34);
+insert into t (id,a) values (836,35);
+insert into t (id,a) values (836,36);
+insert into t (id,a) values (836,37);
+insert into t (id,a) values (836,38);
+insert into t (id,a) values (836,39);
+insert into t (id,a) values (836,40);
+insert into t (id,a) values (836,41);
+insert into t (id,a) values (836,42);
+insert into t (id,a) values (836,43);
+insert into t (id,a) values (836,44);
+insert into t (id,a) values (836,45);
+insert into t (id,a) values (836,46);
+insert into t (id,a) values (836,47);
+insert into t (id,a) values (836,48);
+insert into t (id,a) values (836,49);
+insert into t (id,a) values (836,50);
+insert into t (id,a) values (836,51);
+insert into t (id,a) values (836,52);
+insert into t (id,a) values (836,53);
+insert into t (id,a) values (836,54);
+insert into t (id,a) values (836,55);
+insert into t (id,a) values (836,56);
+insert into t (id,a) values (836,57);
+insert into t (id,a) values (836,58);
+insert into t (id,a) values (836,59);
+insert into t (id,a) values (836,60);
+insert into t (id,a) values (836,61);
+insert into t (id,a) values (836,62);
+insert into t (id,a) values (836,63);
+insert into t (id,a) values (836,64);
+insert into t (id,a) values (836,65);
+insert into t (id,a) values (836,66);
+insert into t (id,a) values (836,67);
+insert into t (id,a) values (836,68);
+insert into t (id,a) values (836,69);
+insert into t (id,a) values (836,70);
+insert into t (id,a) values (836,71);
+insert into t (id,a) values (836,72);
+insert into t (id,a) values (836,73);
+insert into t (id,a) values (836,74);
+insert into t (id,a) values (836,75);
+insert into t (id,a) values (836,76);
+insert into t (id,a) values (836,77);
+insert into t (id,a) values (836,78);
+insert into t (id,a) values (836,79);
+insert into t (id,a) values (836,80);
+insert into t (id,a) values (836,81);
+insert into t (id,a) values (836,82);
+insert into t (id,a) values (836,83);
+insert into t (id,a) values (836,84);
+insert into t (id,a) values (836,85);
+insert into t (id,a) values (836,86);
+insert into t (id,a) values (836,87);
+insert into t (id,a) values (836,88);
+insert into t (id,a) values (836,89);
+insert into t (id,a) values (836,90);
+insert into t (id,a) values (836,91);
+insert into t (id,a) values (836,92);
+insert into t (id,a) values (836,93);
+insert into t (id,a) values (836,94);
+insert into t (id,a) values (836,95);
+insert into t (id,a) values (836,96);
+insert into t (id,a) values (836,97);
+insert into t (id,a) values (836,98);
+insert into t (id,a) values (836,99);
+insert into t (id,a) values (837,0);
+insert into t (id,a) values (837,1);
+insert into t (id,a) values (837,2);
+insert into t (id,a) values (837,3);
+insert into t (id,a) values (837,4);
+insert into t (id,a) values (837,5);
+insert into t (id,a) values (837,6);
+insert into t (id,a) values (837,7);
+insert into t (id,a) values (837,8);
+insert into t (id,a) values (837,9);
+insert into t (id,a) values (837,10);
+insert into t (id,a) values (837,11);
+insert into t (id,a) values (837,12);
+insert into t (id,a) values (837,13);
+insert into t (id,a) values (837,14);
+insert into t (id,a) values (837,15);
+insert into t (id,a) values (837,16);
+insert into t (id,a) values (837,17);
+insert into t (id,a) values (837,18);
+insert into t (id,a) values (837,19);
+insert into t (id,a) values (837,20);
+insert into t (id,a) values (837,21);
+insert into t (id,a) values (837,22);
+insert into t (id,a) values (837,23);
+insert into t (id,a) values (837,24);
+insert into t (id,a) values (837,25);
+insert into t (id,a) values (837,26);
+insert into t (id,a) values (837,27);
+insert into t (id,a) values (837,28);
+insert into t (id,a) values (837,29);
+insert into t (id,a) values (837,30);
+insert into t (id,a) values (837,31);
+insert into t (id,a) values (837,32);
+insert into t (id,a) values (837,33);
+insert into t (id,a) values (837,34);
+insert into t (id,a) values (837,35);
+insert into t (id,a) values (837,36);
+insert into t (id,a) values (837,37);
+insert into t (id,a) values (837,38);
+insert into t (id,a) values (837,39);
+insert into t (id,a) values (837,40);
+insert into t (id,a) values (837,41);
+insert into t (id,a) values (837,42);
+insert into t (id,a) values (837,43);
+insert into t (id,a) values (837,44);
+insert into t (id,a) values (837,45);
+insert into t (id,a) values (837,46);
+insert into t (id,a) values (837,47);
+insert into t (id,a) values (837,48);
+insert into t (id,a) values (837,49);
+insert into t (id,a) values (837,50);
+insert into t (id,a) values (837,51);
+insert into t (id,a) values (837,52);
+insert into t (id,a) values (837,53);
+insert into t (id,a) values (837,54);
+insert into t (id,a) values (837,55);
+insert into t (id,a) values (837,56);
+insert into t (id,a) values (837,57);
+insert into t (id,a) values (837,58);
+insert into t (id,a) values (837,59);
+insert into t (id,a) values (837,60);
+insert into t (id,a) values (837,61);
+insert into t (id,a) values (837,62);
+insert into t (id,a) values (837,63);
+insert into t (id,a) values (837,64);
+insert into t (id,a) values (837,65);
+insert into t (id,a) values (837,66);
+insert into t (id,a) values (837,67);
+insert into t (id,a) values (837,68);
+insert into t (id,a) values (837,69);
+insert into t (id,a) values (837,70);
+insert into t (id,a) values (837,71);
+insert into t (id,a) values (837,72);
+insert into t (id,a) values (837,73);
+insert into t (id,a) values (837,74);
+insert into t (id,a) values (837,75);
+insert into t (id,a) values (837,76);
+insert into t (id,a) values (837,77);
+insert into t (id,a) values (837,78);
+insert into t (id,a) values (837,79);
+insert into t (id,a) values (837,80);
+insert into t (id,a) values (837,81);
+insert into t (id,a) values (837,82);
+insert into t (id,a) values (837,83);
+insert into t (id,a) values (837,84);
+insert into t (id,a) values (837,85);
+insert into t (id,a) values (837,86);
+insert into t (id,a) values (837,87);
+insert into t (id,a) values (837,88);
+insert into t (id,a) values (837,89);
+insert into t (id,a) values (837,90);
+insert into t (id,a) values (837,91);
+insert into t (id,a) values (837,92);
+insert into t (id,a) values (837,93);
+insert into t (id,a) values (837,94);
+insert into t (id,a) values (837,95);
+insert into t (id,a) values (837,96);
+insert into t (id,a) values (837,97);
+insert into t (id,a) values (837,98);
+insert into t (id,a) values (837,99);
+insert into t (id,a) values (838,0);
+insert into t (id,a) values (838,1);
+insert into t (id,a) values (838,2);
+insert into t (id,a) values (838,3);
+insert into t (id,a) values (838,4);
+insert into t (id,a) values (838,5);
+insert into t (id,a) values (838,6);
+insert into t (id,a) values (838,7);
+insert into t (id,a) values (838,8);
+insert into t (id,a) values (838,9);
+insert into t (id,a) values (838,10);
+insert into t (id,a) values (838,11);
+insert into t (id,a) values (838,12);
+insert into t (id,a) values (838,13);
+insert into t (id,a) values (838,14);
+insert into t (id,a) values (838,15);
+insert into t (id,a) values (838,16);
+insert into t (id,a) values (838,17);
+insert into t (id,a) values (838,18);
+insert into t (id,a) values (838,19);
+insert into t (id,a) values (838,20);
+insert into t (id,a) values (838,21);
+insert into t (id,a) values (838,22);
+insert into t (id,a) values (838,23);
+insert into t (id,a) values (838,24);
+insert into t (id,a) values (838,25);
+insert into t (id,a) values (838,26);
+insert into t (id,a) values (838,27);
+insert into t (id,a) values (838,28);
+insert into t (id,a) values (838,29);
+insert into t (id,a) values (838,30);
+insert into t (id,a) values (838,31);
+insert into t (id,a) values (838,32);
+insert into t (id,a) values (838,33);
+insert into t (id,a) values (838,34);
+insert into t (id,a) values (838,35);
+insert into t (id,a) values (838,36);
+insert into t (id,a) values (838,37);
+insert into t (id,a) values (838,38);
+insert into t (id,a) values (838,39);
+insert into t (id,a) values (838,40);
+insert into t (id,a) values (838,41);
+insert into t (id,a) values (838,42);
+insert into t (id,a) values (838,43);
+insert into t (id,a) values (838,44);
+insert into t (id,a) values (838,45);
+insert into t (id,a) values (838,46);
+insert into t (id,a) values (838,47);
+insert into t (id,a) values (838,48);
+insert into t (id,a) values (838,49);
+insert into t (id,a) values (838,50);
+insert into t (id,a) values (838,51);
+insert into t (id,a) values (838,52);
+insert into t (id,a) values (838,53);
+insert into t (id,a) values (838,54);
+insert into t (id,a) values (838,55);
+insert into t (id,a) values (838,56);
+insert into t (id,a) values (838,57);
+insert into t (id,a) values (838,58);
+insert into t (id,a) values (838,59);
+insert into t (id,a) values (838,60);
+insert into t (id,a) values (838,61);
+insert into t (id,a) values (838,62);
+insert into t (id,a) values (838,63);
+insert into t (id,a) values (838,64);
+insert into t (id,a) values (838,65);
+insert into t (id,a) values (838,66);
+insert into t (id,a) values (838,67);
+insert into t (id,a) values (838,68);
+insert into t (id,a) values (838,69);
+insert into t (id,a) values (838,70);
+insert into t (id,a) values (838,71);
+insert into t (id,a) values (838,72);
+insert into t (id,a) values (838,73);
+insert into t (id,a) values (838,74);
+insert into t (id,a) values (838,75);
+insert into t (id,a) values (838,76);
+insert into t (id,a) values (838,77);
+insert into t (id,a) values (838,78);
+insert into t (id,a) values (838,79);
+insert into t (id,a) values (838,80);
+insert into t (id,a) values (838,81);
+insert into t (id,a) values (838,82);
+insert into t (id,a) values (838,83);
+insert into t (id,a) values (838,84);
+insert into t (id,a) values (838,85);
+insert into t (id,a) values (838,86);
+insert into t (id,a) values (838,87);
+insert into t (id,a) values (838,88);
+insert into t (id,a) values (838,89);
+insert into t (id,a) values (838,90);
+insert into t (id,a) values (838,91);
+insert into t (id,a) values (838,92);
+insert into t (id,a) values (838,93);
+insert into t (id,a) values (838,94);
+insert into t (id,a) values (838,95);
+insert into t (id,a) values (838,96);
+insert into t (id,a) values (838,97);
+insert into t (id,a) values (838,98);
+insert into t (id,a) values (838,99);
+insert into t (id,a) values (839,0);
+insert into t (id,a) values (839,1);
+insert into t (id,a) values (839,2);
+insert into t (id,a) values (839,3);
+insert into t (id,a) values (839,4);
+insert into t (id,a) values (839,5);
+insert into t (id,a) values (839,6);
+insert into t (id,a) values (839,7);
+insert into t (id,a) values (839,8);
+insert into t (id,a) values (839,9);
+insert into t (id,a) values (839,10);
+insert into t (id,a) values (839,11);
+insert into t (id,a) values (839,12);
+insert into t (id,a) values (839,13);
+insert into t (id,a) values (839,14);
+insert into t (id,a) values (839,15);
+insert into t (id,a) values (839,16);
+insert into t (id,a) values (839,17);
+insert into t (id,a) values (839,18);
+insert into t (id,a) values (839,19);
+insert into t (id,a) values (839,20);
+insert into t (id,a) values (839,21);
+insert into t (id,a) values (839,22);
+insert into t (id,a) values (839,23);
+insert into t (id,a) values (839,24);
+insert into t (id,a) values (839,25);
+insert into t (id,a) values (839,26);
+insert into t (id,a) values (839,27);
+insert into t (id,a) values (839,28);
+insert into t (id,a) values (839,29);
+insert into t (id,a) values (839,30);
+insert into t (id,a) values (839,31);
+insert into t (id,a) values (839,32);
+insert into t (id,a) values (839,33);
+insert into t (id,a) values (839,34);
+insert into t (id,a) values (839,35);
+insert into t (id,a) values (839,36);
+insert into t (id,a) values (839,37);
+insert into t (id,a) values (839,38);
+insert into t (id,a) values (839,39);
+insert into t (id,a) values (839,40);
+insert into t (id,a) values (839,41);
+insert into t (id,a) values (839,42);
+insert into t (id,a) values (839,43);
+insert into t (id,a) values (839,44);
+insert into t (id,a) values (839,45);
+insert into t (id,a) values (839,46);
+insert into t (id,a) values (839,47);
+insert into t (id,a) values (839,48);
+insert into t (id,a) values (839,49);
+insert into t (id,a) values (839,50);
+insert into t (id,a) values (839,51);
+insert into t (id,a) values (839,52);
+insert into t (id,a) values (839,53);
+insert into t (id,a) values (839,54);
+insert into t (id,a) values (839,55);
+insert into t (id,a) values (839,56);
+insert into t (id,a) values (839,57);
+insert into t (id,a) values (839,58);
+insert into t (id,a) values (839,59);
+insert into t (id,a) values (839,60);
+insert into t (id,a) values (839,61);
+insert into t (id,a) values (839,62);
+insert into t (id,a) values (839,63);
+insert into t (id,a) values (839,64);
+insert into t (id,a) values (839,65);
+insert into t (id,a) values (839,66);
+insert into t (id,a) values (839,67);
+insert into t (id,a) values (839,68);
+insert into t (id,a) values (839,69);
+insert into t (id,a) values (839,70);
+insert into t (id,a) values (839,71);
+insert into t (id,a) values (839,72);
+insert into t (id,a) values (839,73);
+insert into t (id,a) values (839,74);
+insert into t (id,a) values (839,75);
+insert into t (id,a) values (839,76);
+insert into t (id,a) values (839,77);
+insert into t (id,a) values (839,78);
+insert into t (id,a) values (839,79);
+insert into t (id,a) values (839,80);
+insert into t (id,a) values (839,81);
+insert into t (id,a) values (839,82);
+insert into t (id,a) values (839,83);
+insert into t (id,a) values (839,84);
+insert into t (id,a) values (839,85);
+insert into t (id,a) values (839,86);
+insert into t (id,a) values (839,87);
+insert into t (id,a) values (839,88);
+insert into t (id,a) values (839,89);
+insert into t (id,a) values (839,90);
+insert into t (id,a) values (839,91);
+insert into t (id,a) values (839,92);
+insert into t (id,a) values (839,93);
+insert into t (id,a) values (839,94);
+insert into t (id,a) values (839,95);
+insert into t (id,a) values (839,96);
+insert into t (id,a) values (839,97);
+insert into t (id,a) values (839,98);
+insert into t (id,a) values (839,99);
+insert into t (id,a) values (840,0);
+insert into t (id,a) values (840,1);
+insert into t (id,a) values (840,2);
+insert into t (id,a) values (840,3);
+insert into t (id,a) values (840,4);
+insert into t (id,a) values (840,5);
+insert into t (id,a) values (840,6);
+insert into t (id,a) values (840,7);
+insert into t (id,a) values (840,8);
+insert into t (id,a) values (840,9);
+insert into t (id,a) values (840,10);
+insert into t (id,a) values (840,11);
+insert into t (id,a) values (840,12);
+insert into t (id,a) values (840,13);
+insert into t (id,a) values (840,14);
+insert into t (id,a) values (840,15);
+insert into t (id,a) values (840,16);
+insert into t (id,a) values (840,17);
+insert into t (id,a) values (840,18);
+insert into t (id,a) values (840,19);
+insert into t (id,a) values (840,20);
+insert into t (id,a) values (840,21);
+insert into t (id,a) values (840,22);
+insert into t (id,a) values (840,23);
+insert into t (id,a) values (840,24);
+insert into t (id,a) values (840,25);
+insert into t (id,a) values (840,26);
+insert into t (id,a) values (840,27);
+insert into t (id,a) values (840,28);
+insert into t (id,a) values (840,29);
+insert into t (id,a) values (840,30);
+insert into t (id,a) values (840,31);
+insert into t (id,a) values (840,32);
+insert into t (id,a) values (840,33);
+insert into t (id,a) values (840,34);
+insert into t (id,a) values (840,35);
+insert into t (id,a) values (840,36);
+insert into t (id,a) values (840,37);
+insert into t (id,a) values (840,38);
+insert into t (id,a) values (840,39);
+insert into t (id,a) values (840,40);
+insert into t (id,a) values (840,41);
+insert into t (id,a) values (840,42);
+insert into t (id,a) values (840,43);
+insert into t (id,a) values (840,44);
+insert into t (id,a) values (840,45);
+insert into t (id,a) values (840,46);
+insert into t (id,a) values (840,47);
+insert into t (id,a) values (840,48);
+insert into t (id,a) values (840,49);
+insert into t (id,a) values (840,50);
+insert into t (id,a) values (840,51);
+insert into t (id,a) values (840,52);
+insert into t (id,a) values (840,53);
+insert into t (id,a) values (840,54);
+insert into t (id,a) values (840,55);
+insert into t (id,a) values (840,56);
+insert into t (id,a) values (840,57);
+insert into t (id,a) values (840,58);
+insert into t (id,a) values (840,59);
+insert into t (id,a) values (840,60);
+insert into t (id,a) values (840,61);
+insert into t (id,a) values (840,62);
+insert into t (id,a) values (840,63);
+insert into t (id,a) values (840,64);
+insert into t (id,a) values (840,65);
+insert into t (id,a) values (840,66);
+insert into t (id,a) values (840,67);
+insert into t (id,a) values (840,68);
+insert into t (id,a) values (840,69);
+insert into t (id,a) values (840,70);
+insert into t (id,a) values (840,71);
+insert into t (id,a) values (840,72);
+insert into t (id,a) values (840,73);
+insert into t (id,a) values (840,74);
+insert into t (id,a) values (840,75);
+insert into t (id,a) values (840,76);
+insert into t (id,a) values (840,77);
+insert into t (id,a) values (840,78);
+insert into t (id,a) values (840,79);
+insert into t (id,a) values (840,80);
+insert into t (id,a) values (840,81);
+insert into t (id,a) values (840,82);
+insert into t (id,a) values (840,83);
+insert into t (id,a) values (840,84);
+insert into t (id,a) values (840,85);
+insert into t (id,a) values (840,86);
+insert into t (id,a) values (840,87);
+insert into t (id,a) values (840,88);
+insert into t (id,a) values (840,89);
+insert into t (id,a) values (840,90);
+insert into t (id,a) values (840,91);
+insert into t (id,a) values (840,92);
+insert into t (id,a) values (840,93);
+insert into t (id,a) values (840,94);
+insert into t (id,a) values (840,95);
+insert into t (id,a) values (840,96);
+insert into t (id,a) values (840,97);
+insert into t (id,a) values (840,98);
+insert into t (id,a) values (840,99);
+insert into t (id,a) values (841,0);
+insert into t (id,a) values (841,1);
+insert into t (id,a) values (841,2);
+insert into t (id,a) values (841,3);
+insert into t (id,a) values (841,4);
+insert into t (id,a) values (841,5);
+insert into t (id,a) values (841,6);
+insert into t (id,a) values (841,7);
+insert into t (id,a) values (841,8);
+insert into t (id,a) values (841,9);
+insert into t (id,a) values (841,10);
+insert into t (id,a) values (841,11);
+insert into t (id,a) values (841,12);
+insert into t (id,a) values (841,13);
+insert into t (id,a) values (841,14);
+insert into t (id,a) values (841,15);
+insert into t (id,a) values (841,16);
+insert into t (id,a) values (841,17);
+insert into t (id,a) values (841,18);
+insert into t (id,a) values (841,19);
+insert into t (id,a) values (841,20);
+insert into t (id,a) values (841,21);
+insert into t (id,a) values (841,22);
+insert into t (id,a) values (841,23);
+insert into t (id,a) values (841,24);
+insert into t (id,a) values (841,25);
+insert into t (id,a) values (841,26);
+insert into t (id,a) values (841,27);
+insert into t (id,a) values (841,28);
+insert into t (id,a) values (841,29);
+insert into t (id,a) values (841,30);
+insert into t (id,a) values (841,31);
+insert into t (id,a) values (841,32);
+insert into t (id,a) values (841,33);
+insert into t (id,a) values (841,34);
+insert into t (id,a) values (841,35);
+insert into t (id,a) values (841,36);
+insert into t (id,a) values (841,37);
+insert into t (id,a) values (841,38);
+insert into t (id,a) values (841,39);
+insert into t (id,a) values (841,40);
+insert into t (id,a) values (841,41);
+insert into t (id,a) values (841,42);
+insert into t (id,a) values (841,43);
+insert into t (id,a) values (841,44);
+insert into t (id,a) values (841,45);
+insert into t (id,a) values (841,46);
+insert into t (id,a) values (841,47);
+insert into t (id,a) values (841,48);
+insert into t (id,a) values (841,49);
+insert into t (id,a) values (841,50);
+insert into t (id,a) values (841,51);
+insert into t (id,a) values (841,52);
+insert into t (id,a) values (841,53);
+insert into t (id,a) values (841,54);
+insert into t (id,a) values (841,55);
+insert into t (id,a) values (841,56);
+insert into t (id,a) values (841,57);
+insert into t (id,a) values (841,58);
+insert into t (id,a) values (841,59);
+insert into t (id,a) values (841,60);
+insert into t (id,a) values (841,61);
+insert into t (id,a) values (841,62);
+insert into t (id,a) values (841,63);
+insert into t (id,a) values (841,64);
+insert into t (id,a) values (841,65);
+insert into t (id,a) values (841,66);
+insert into t (id,a) values (841,67);
+insert into t (id,a) values (841,68);
+insert into t (id,a) values (841,69);
+insert into t (id,a) values (841,70);
+insert into t (id,a) values (841,71);
+insert into t (id,a) values (841,72);
+insert into t (id,a) values (841,73);
+insert into t (id,a) values (841,74);
+insert into t (id,a) values (841,75);
+insert into t (id,a) values (841,76);
+insert into t (id,a) values (841,77);
+insert into t (id,a) values (841,78);
+insert into t (id,a) values (841,79);
+insert into t (id,a) values (841,80);
+insert into t (id,a) values (841,81);
+insert into t (id,a) values (841,82);
+insert into t (id,a) values (841,83);
+insert into t (id,a) values (841,84);
+insert into t (id,a) values (841,85);
+insert into t (id,a) values (841,86);
+insert into t (id,a) values (841,87);
+insert into t (id,a) values (841,88);
+insert into t (id,a) values (841,89);
+insert into t (id,a) values (841,90);
+insert into t (id,a) values (841,91);
+insert into t (id,a) values (841,92);
+insert into t (id,a) values (841,93);
+insert into t (id,a) values (841,94);
+insert into t (id,a) values (841,95);
+insert into t (id,a) values (841,96);
+insert into t (id,a) values (841,97);
+insert into t (id,a) values (841,98);
+insert into t (id,a) values (841,99);
+insert into t (id,a) values (842,0);
+insert into t (id,a) values (842,1);
+insert into t (id,a) values (842,2);
+insert into t (id,a) values (842,3);
+insert into t (id,a) values (842,4);
+insert into t (id,a) values (842,5);
+insert into t (id,a) values (842,6);
+insert into t (id,a) values (842,7);
+insert into t (id,a) values (842,8);
+insert into t (id,a) values (842,9);
+insert into t (id,a) values (842,10);
+insert into t (id,a) values (842,11);
+insert into t (id,a) values (842,12);
+insert into t (id,a) values (842,13);
+insert into t (id,a) values (842,14);
+insert into t (id,a) values (842,15);
+insert into t (id,a) values (842,16);
+insert into t (id,a) values (842,17);
+insert into t (id,a) values (842,18);
+insert into t (id,a) values (842,19);
+insert into t (id,a) values (842,20);
+insert into t (id,a) values (842,21);
+insert into t (id,a) values (842,22);
+insert into t (id,a) values (842,23);
+insert into t (id,a) values (842,24);
+insert into t (id,a) values (842,25);
+insert into t (id,a) values (842,26);
+insert into t (id,a) values (842,27);
+insert into t (id,a) values (842,28);
+insert into t (id,a) values (842,29);
+insert into t (id,a) values (842,30);
+insert into t (id,a) values (842,31);
+insert into t (id,a) values (842,32);
+insert into t (id,a) values (842,33);
+insert into t (id,a) values (842,34);
+insert into t (id,a) values (842,35);
+insert into t (id,a) values (842,36);
+insert into t (id,a) values (842,37);
+insert into t (id,a) values (842,38);
+insert into t (id,a) values (842,39);
+insert into t (id,a) values (842,40);
+insert into t (id,a) values (842,41);
+insert into t (id,a) values (842,42);
+insert into t (id,a) values (842,43);
+insert into t (id,a) values (842,44);
+insert into t (id,a) values (842,45);
+insert into t (id,a) values (842,46);
+insert into t (id,a) values (842,47);
+insert into t (id,a) values (842,48);
+insert into t (id,a) values (842,49);
+insert into t (id,a) values (842,50);
+insert into t (id,a) values (842,51);
+insert into t (id,a) values (842,52);
+insert into t (id,a) values (842,53);
+insert into t (id,a) values (842,54);
+insert into t (id,a) values (842,55);
+insert into t (id,a) values (842,56);
+insert into t (id,a) values (842,57);
+insert into t (id,a) values (842,58);
+insert into t (id,a) values (842,59);
+insert into t (id,a) values (842,60);
+insert into t (id,a) values (842,61);
+insert into t (id,a) values (842,62);
+insert into t (id,a) values (842,63);
+insert into t (id,a) values (842,64);
+insert into t (id,a) values (842,65);
+insert into t (id,a) values (842,66);
+insert into t (id,a) values (842,67);
+insert into t (id,a) values (842,68);
+insert into t (id,a) values (842,69);
+insert into t (id,a) values (842,70);
+insert into t (id,a) values (842,71);
+insert into t (id,a) values (842,72);
+insert into t (id,a) values (842,73);
+insert into t (id,a) values (842,74);
+insert into t (id,a) values (842,75);
+insert into t (id,a) values (842,76);
+insert into t (id,a) values (842,77);
+insert into t (id,a) values (842,78);
+insert into t (id,a) values (842,79);
+insert into t (id,a) values (842,80);
+insert into t (id,a) values (842,81);
+insert into t (id,a) values (842,82);
+insert into t (id,a) values (842,83);
+insert into t (id,a) values (842,84);
+insert into t (id,a) values (842,85);
+insert into t (id,a) values (842,86);
+insert into t (id,a) values (842,87);
+insert into t (id,a) values (842,88);
+insert into t (id,a) values (842,89);
+insert into t (id,a) values (842,90);
+insert into t (id,a) values (842,91);
+insert into t (id,a) values (842,92);
+insert into t (id,a) values (842,93);
+insert into t (id,a) values (842,94);
+insert into t (id,a) values (842,95);
+insert into t (id,a) values (842,96);
+insert into t (id,a) values (842,97);
+insert into t (id,a) values (842,98);
+insert into t (id,a) values (842,99);
+insert into t (id,a) values (843,0);
+insert into t (id,a) values (843,1);
+insert into t (id,a) values (843,2);
+insert into t (id,a) values (843,3);
+insert into t (id,a) values (843,4);
+insert into t (id,a) values (843,5);
+insert into t (id,a) values (843,6);
+insert into t (id,a) values (843,7);
+insert into t (id,a) values (843,8);
+insert into t (id,a) values (843,9);
+insert into t (id,a) values (843,10);
+insert into t (id,a) values (843,11);
+insert into t (id,a) values (843,12);
+insert into t (id,a) values (843,13);
+insert into t (id,a) values (843,14);
+insert into t (id,a) values (843,15);
+insert into t (id,a) values (843,16);
+insert into t (id,a) values (843,17);
+insert into t (id,a) values (843,18);
+insert into t (id,a) values (843,19);
+insert into t (id,a) values (843,20);
+insert into t (id,a) values (843,21);
+insert into t (id,a) values (843,22);
+insert into t (id,a) values (843,23);
+insert into t (id,a) values (843,24);
+insert into t (id,a) values (843,25);
+insert into t (id,a) values (843,26);
+insert into t (id,a) values (843,27);
+insert into t (id,a) values (843,28);
+insert into t (id,a) values (843,29);
+insert into t (id,a) values (843,30);
+insert into t (id,a) values (843,31);
+insert into t (id,a) values (843,32);
+insert into t (id,a) values (843,33);
+insert into t (id,a) values (843,34);
+insert into t (id,a) values (843,35);
+insert into t (id,a) values (843,36);
+insert into t (id,a) values (843,37);
+insert into t (id,a) values (843,38);
+insert into t (id,a) values (843,39);
+insert into t (id,a) values (843,40);
+insert into t (id,a) values (843,41);
+insert into t (id,a) values (843,42);
+insert into t (id,a) values (843,43);
+insert into t (id,a) values (843,44);
+insert into t (id,a) values (843,45);
+insert into t (id,a) values (843,46);
+insert into t (id,a) values (843,47);
+insert into t (id,a) values (843,48);
+insert into t (id,a) values (843,49);
+insert into t (id,a) values (843,50);
+insert into t (id,a) values (843,51);
+insert into t (id,a) values (843,52);
+insert into t (id,a) values (843,53);
+insert into t (id,a) values (843,54);
+insert into t (id,a) values (843,55);
+insert into t (id,a) values (843,56);
+insert into t (id,a) values (843,57);
+insert into t (id,a) values (843,58);
+insert into t (id,a) values (843,59);
+insert into t (id,a) values (843,60);
+insert into t (id,a) values (843,61);
+insert into t (id,a) values (843,62);
+insert into t (id,a) values (843,63);
+insert into t (id,a) values (843,64);
+insert into t (id,a) values (843,65);
+insert into t (id,a) values (843,66);
+insert into t (id,a) values (843,67);
+insert into t (id,a) values (843,68);
+insert into t (id,a) values (843,69);
+insert into t (id,a) values (843,70);
+insert into t (id,a) values (843,71);
+insert into t (id,a) values (843,72);
+insert into t (id,a) values (843,73);
+insert into t (id,a) values (843,74);
+insert into t (id,a) values (843,75);
+insert into t (id,a) values (843,76);
+insert into t (id,a) values (843,77);
+insert into t (id,a) values (843,78);
+insert into t (id,a) values (843,79);
+insert into t (id,a) values (843,80);
+insert into t (id,a) values (843,81);
+insert into t (id,a) values (843,82);
+insert into t (id,a) values (843,83);
+insert into t (id,a) values (843,84);
+insert into t (id,a) values (843,85);
+insert into t (id,a) values (843,86);
+insert into t (id,a) values (843,87);
+insert into t (id,a) values (843,88);
+insert into t (id,a) values (843,89);
+insert into t (id,a) values (843,90);
+insert into t (id,a) values (843,91);
+insert into t (id,a) values (843,92);
+insert into t (id,a) values (843,93);
+insert into t (id,a) values (843,94);
+insert into t (id,a) values (843,95);
+insert into t (id,a) values (843,96);
+insert into t (id,a) values (843,97);
+insert into t (id,a) values (843,98);
+insert into t (id,a) values (843,99);
+insert into t (id,a) values (844,0);
+insert into t (id,a) values (844,1);
+insert into t (id,a) values (844,2);
+insert into t (id,a) values (844,3);
+insert into t (id,a) values (844,4);
+insert into t (id,a) values (844,5);
+insert into t (id,a) values (844,6);
+insert into t (id,a) values (844,7);
+insert into t (id,a) values (844,8);
+insert into t (id,a) values (844,9);
+insert into t (id,a) values (844,10);
+insert into t (id,a) values (844,11);
+insert into t (id,a) values (844,12);
+insert into t (id,a) values (844,13);
+insert into t (id,a) values (844,14);
+insert into t (id,a) values (844,15);
+insert into t (id,a) values (844,16);
+insert into t (id,a) values (844,17);
+insert into t (id,a) values (844,18);
+insert into t (id,a) values (844,19);
+insert into t (id,a) values (844,20);
+insert into t (id,a) values (844,21);
+insert into t (id,a) values (844,22);
+insert into t (id,a) values (844,23);
+insert into t (id,a) values (844,24);
+insert into t (id,a) values (844,25);
+insert into t (id,a) values (844,26);
+insert into t (id,a) values (844,27);
+insert into t (id,a) values (844,28);
+insert into t (id,a) values (844,29);
+insert into t (id,a) values (844,30);
+insert into t (id,a) values (844,31);
+insert into t (id,a) values (844,32);
+insert into t (id,a) values (844,33);
+insert into t (id,a) values (844,34);
+insert into t (id,a) values (844,35);
+insert into t (id,a) values (844,36);
+insert into t (id,a) values (844,37);
+insert into t (id,a) values (844,38);
+insert into t (id,a) values (844,39);
+insert into t (id,a) values (844,40);
+insert into t (id,a) values (844,41);
+insert into t (id,a) values (844,42);
+insert into t (id,a) values (844,43);
+insert into t (id,a) values (844,44);
+insert into t (id,a) values (844,45);
+insert into t (id,a) values (844,46);
+insert into t (id,a) values (844,47);
+insert into t (id,a) values (844,48);
+insert into t (id,a) values (844,49);
+insert into t (id,a) values (844,50);
+insert into t (id,a) values (844,51);
+insert into t (id,a) values (844,52);
+insert into t (id,a) values (844,53);
+insert into t (id,a) values (844,54);
+insert into t (id,a) values (844,55);
+insert into t (id,a) values (844,56);
+insert into t (id,a) values (844,57);
+insert into t (id,a) values (844,58);
+insert into t (id,a) values (844,59);
+insert into t (id,a) values (844,60);
+insert into t (id,a) values (844,61);
+insert into t (id,a) values (844,62);
+insert into t (id,a) values (844,63);
+insert into t (id,a) values (844,64);
+insert into t (id,a) values (844,65);
+insert into t (id,a) values (844,66);
+insert into t (id,a) values (844,67);
+insert into t (id,a) values (844,68);
+insert into t (id,a) values (844,69);
+insert into t (id,a) values (844,70);
+insert into t (id,a) values (844,71);
+insert into t (id,a) values (844,72);
+insert into t (id,a) values (844,73);
+insert into t (id,a) values (844,74);
+insert into t (id,a) values (844,75);
+insert into t (id,a) values (844,76);
+insert into t (id,a) values (844,77);
+insert into t (id,a) values (844,78);
+insert into t (id,a) values (844,79);
+insert into t (id,a) values (844,80);
+insert into t (id,a) values (844,81);
+insert into t (id,a) values (844,82);
+insert into t (id,a) values (844,83);
+insert into t (id,a) values (844,84);
+insert into t (id,a) values (844,85);
+insert into t (id,a) values (844,86);
+insert into t (id,a) values (844,87);
+insert into t (id,a) values (844,88);
+insert into t (id,a) values (844,89);
+insert into t (id,a) values (844,90);
+insert into t (id,a) values (844,91);
+insert into t (id,a) values (844,92);
+insert into t (id,a) values (844,93);
+insert into t (id,a) values (844,94);
+insert into t (id,a) values (844,95);
+insert into t (id,a) values (844,96);
+insert into t (id,a) values (844,97);
+insert into t (id,a) values (844,98);
+insert into t (id,a) values (844,99);
+insert into t (id,a) values (845,0);
+insert into t (id,a) values (845,1);
+insert into t (id,a) values (845,2);
+insert into t (id,a) values (845,3);
+insert into t (id,a) values (845,4);
+insert into t (id,a) values (845,5);
+insert into t (id,a) values (845,6);
+insert into t (id,a) values (845,7);
+insert into t (id,a) values (845,8);
+insert into t (id,a) values (845,9);
+insert into t (id,a) values (845,10);
+insert into t (id,a) values (845,11);
+insert into t (id,a) values (845,12);
+insert into t (id,a) values (845,13);
+insert into t (id,a) values (845,14);
+insert into t (id,a) values (845,15);
+insert into t (id,a) values (845,16);
+insert into t (id,a) values (845,17);
+insert into t (id,a) values (845,18);
+insert into t (id,a) values (845,19);
+insert into t (id,a) values (845,20);
+insert into t (id,a) values (845,21);
+insert into t (id,a) values (845,22);
+insert into t (id,a) values (845,23);
+insert into t (id,a) values (845,24);
+insert into t (id,a) values (845,25);
+insert into t (id,a) values (845,26);
+insert into t (id,a) values (845,27);
+insert into t (id,a) values (845,28);
+insert into t (id,a) values (845,29);
+insert into t (id,a) values (845,30);
+insert into t (id,a) values (845,31);
+insert into t (id,a) values (845,32);
+insert into t (id,a) values (845,33);
+insert into t (id,a) values (845,34);
+insert into t (id,a) values (845,35);
+insert into t (id,a) values (845,36);
+insert into t (id,a) values (845,37);
+insert into t (id,a) values (845,38);
+insert into t (id,a) values (845,39);
+insert into t (id,a) values (845,40);
+insert into t (id,a) values (845,41);
+insert into t (id,a) values (845,42);
+insert into t (id,a) values (845,43);
+insert into t (id,a) values (845,44);
+insert into t (id,a) values (845,45);
+insert into t (id,a) values (845,46);
+insert into t (id,a) values (845,47);
+insert into t (id,a) values (845,48);
+insert into t (id,a) values (845,49);
+insert into t (id,a) values (845,50);
+insert into t (id,a) values (845,51);
+insert into t (id,a) values (845,52);
+insert into t (id,a) values (845,53);
+insert into t (id,a) values (845,54);
+insert into t (id,a) values (845,55);
+insert into t (id,a) values (845,56);
+insert into t (id,a) values (845,57);
+insert into t (id,a) values (845,58);
+insert into t (id,a) values (845,59);
+insert into t (id,a) values (845,60);
+insert into t (id,a) values (845,61);
+insert into t (id,a) values (845,62);
+insert into t (id,a) values (845,63);
+insert into t (id,a) values (845,64);
+insert into t (id,a) values (845,65);
+insert into t (id,a) values (845,66);
+insert into t (id,a) values (845,67);
+insert into t (id,a) values (845,68);
+insert into t (id,a) values (845,69);
+insert into t (id,a) values (845,70);
+insert into t (id,a) values (845,71);
+insert into t (id,a) values (845,72);
+insert into t (id,a) values (845,73);
+insert into t (id,a) values (845,74);
+insert into t (id,a) values (845,75);
+insert into t (id,a) values (845,76);
+insert into t (id,a) values (845,77);
+insert into t (id,a) values (845,78);
+insert into t (id,a) values (845,79);
+insert into t (id,a) values (845,80);
+insert into t (id,a) values (845,81);
+insert into t (id,a) values (845,82);
+insert into t (id,a) values (845,83);
+insert into t (id,a) values (845,84);
+insert into t (id,a) values (845,85);
+insert into t (id,a) values (845,86);
+insert into t (id,a) values (845,87);
+insert into t (id,a) values (845,88);
+insert into t (id,a) values (845,89);
+insert into t (id,a) values (845,90);
+insert into t (id,a) values (845,91);
+insert into t (id,a) values (845,92);
+insert into t (id,a) values (845,93);
+insert into t (id,a) values (845,94);
+insert into t (id,a) values (845,95);
+insert into t (id,a) values (845,96);
+insert into t (id,a) values (845,97);
+insert into t (id,a) values (845,98);
+insert into t (id,a) values (845,99);
+insert into t (id,a) values (846,0);
+insert into t (id,a) values (846,1);
+insert into t (id,a) values (846,2);
+insert into t (id,a) values (846,3);
+insert into t (id,a) values (846,4);
+insert into t (id,a) values (846,5);
+insert into t (id,a) values (846,6);
+insert into t (id,a) values (846,7);
+insert into t (id,a) values (846,8);
+insert into t (id,a) values (846,9);
+insert into t (id,a) values (846,10);
+insert into t (id,a) values (846,11);
+insert into t (id,a) values (846,12);
+insert into t (id,a) values (846,13);
+insert into t (id,a) values (846,14);
+insert into t (id,a) values (846,15);
+insert into t (id,a) values (846,16);
+insert into t (id,a) values (846,17);
+insert into t (id,a) values (846,18);
+insert into t (id,a) values (846,19);
+insert into t (id,a) values (846,20);
+insert into t (id,a) values (846,21);
+insert into t (id,a) values (846,22);
+insert into t (id,a) values (846,23);
+insert into t (id,a) values (846,24);
+insert into t (id,a) values (846,25);
+insert into t (id,a) values (846,26);
+insert into t (id,a) values (846,27);
+insert into t (id,a) values (846,28);
+insert into t (id,a) values (846,29);
+insert into t (id,a) values (846,30);
+insert into t (id,a) values (846,31);
+insert into t (id,a) values (846,32);
+insert into t (id,a) values (846,33);
+insert into t (id,a) values (846,34);
+insert into t (id,a) values (846,35);
+insert into t (id,a) values (846,36);
+insert into t (id,a) values (846,37);
+insert into t (id,a) values (846,38);
+insert into t (id,a) values (846,39);
+insert into t (id,a) values (846,40);
+insert into t (id,a) values (846,41);
+insert into t (id,a) values (846,42);
+insert into t (id,a) values (846,43);
+insert into t (id,a) values (846,44);
+insert into t (id,a) values (846,45);
+insert into t (id,a) values (846,46);
+insert into t (id,a) values (846,47);
+insert into t (id,a) values (846,48);
+insert into t (id,a) values (846,49);
+insert into t (id,a) values (846,50);
+insert into t (id,a) values (846,51);
+insert into t (id,a) values (846,52);
+insert into t (id,a) values (846,53);
+insert into t (id,a) values (846,54);
+insert into t (id,a) values (846,55);
+insert into t (id,a) values (846,56);
+insert into t (id,a) values (846,57);
+insert into t (id,a) values (846,58);
+insert into t (id,a) values (846,59);
+insert into t (id,a) values (846,60);
+insert into t (id,a) values (846,61);
+insert into t (id,a) values (846,62);
+insert into t (id,a) values (846,63);
+insert into t (id,a) values (846,64);
+insert into t (id,a) values (846,65);
+insert into t (id,a) values (846,66);
+insert into t (id,a) values (846,67);
+insert into t (id,a) values (846,68);
+insert into t (id,a) values (846,69);
+insert into t (id,a) values (846,70);
+insert into t (id,a) values (846,71);
+insert into t (id,a) values (846,72);
+insert into t (id,a) values (846,73);
+insert into t (id,a) values (846,74);
+insert into t (id,a) values (846,75);
+insert into t (id,a) values (846,76);
+insert into t (id,a) values (846,77);
+insert into t (id,a) values (846,78);
+insert into t (id,a) values (846,79);
+insert into t (id,a) values (846,80);
+insert into t (id,a) values (846,81);
+insert into t (id,a) values (846,82);
+insert into t (id,a) values (846,83);
+insert into t (id,a) values (846,84);
+insert into t (id,a) values (846,85);
+insert into t (id,a) values (846,86);
+insert into t (id,a) values (846,87);
+insert into t (id,a) values (846,88);
+insert into t (id,a) values (846,89);
+insert into t (id,a) values (846,90);
+insert into t (id,a) values (846,91);
+insert into t (id,a) values (846,92);
+insert into t (id,a) values (846,93);
+insert into t (id,a) values (846,94);
+insert into t (id,a) values (846,95);
+insert into t (id,a) values (846,96);
+insert into t (id,a) values (846,97);
+insert into t (id,a) values (846,98);
+insert into t (id,a) values (846,99);
+insert into t (id,a) values (847,0);
+insert into t (id,a) values (847,1);
+insert into t (id,a) values (847,2);
+insert into t (id,a) values (847,3);
+insert into t (id,a) values (847,4);
+insert into t (id,a) values (847,5);
+insert into t (id,a) values (847,6);
+insert into t (id,a) values (847,7);
+insert into t (id,a) values (847,8);
+insert into t (id,a) values (847,9);
+insert into t (id,a) values (847,10);
+insert into t (id,a) values (847,11);
+insert into t (id,a) values (847,12);
+insert into t (id,a) values (847,13);
+insert into t (id,a) values (847,14);
+insert into t (id,a) values (847,15);
+insert into t (id,a) values (847,16);
+insert into t (id,a) values (847,17);
+insert into t (id,a) values (847,18);
+insert into t (id,a) values (847,19);
+insert into t (id,a) values (847,20);
+insert into t (id,a) values (847,21);
+insert into t (id,a) values (847,22);
+insert into t (id,a) values (847,23);
+insert into t (id,a) values (847,24);
+insert into t (id,a) values (847,25);
+insert into t (id,a) values (847,26);
+insert into t (id,a) values (847,27);
+insert into t (id,a) values (847,28);
+insert into t (id,a) values (847,29);
+insert into t (id,a) values (847,30);
+insert into t (id,a) values (847,31);
+insert into t (id,a) values (847,32);
+insert into t (id,a) values (847,33);
+insert into t (id,a) values (847,34);
+insert into t (id,a) values (847,35);
+insert into t (id,a) values (847,36);
+insert into t (id,a) values (847,37);
+insert into t (id,a) values (847,38);
+insert into t (id,a) values (847,39);
+insert into t (id,a) values (847,40);
+insert into t (id,a) values (847,41);
+insert into t (id,a) values (847,42);
+insert into t (id,a) values (847,43);
+insert into t (id,a) values (847,44);
+insert into t (id,a) values (847,45);
+insert into t (id,a) values (847,46);
+insert into t (id,a) values (847,47);
+insert into t (id,a) values (847,48);
+insert into t (id,a) values (847,49);
+insert into t (id,a) values (847,50);
+insert into t (id,a) values (847,51);
+insert into t (id,a) values (847,52);
+insert into t (id,a) values (847,53);
+insert into t (id,a) values (847,54);
+insert into t (id,a) values (847,55);
+insert into t (id,a) values (847,56);
+insert into t (id,a) values (847,57);
+insert into t (id,a) values (847,58);
+insert into t (id,a) values (847,59);
+insert into t (id,a) values (847,60);
+insert into t (id,a) values (847,61);
+insert into t (id,a) values (847,62);
+insert into t (id,a) values (847,63);
+insert into t (id,a) values (847,64);
+insert into t (id,a) values (847,65);
+insert into t (id,a) values (847,66);
+insert into t (id,a) values (847,67);
+insert into t (id,a) values (847,68);
+insert into t (id,a) values (847,69);
+insert into t (id,a) values (847,70);
+insert into t (id,a) values (847,71);
+insert into t (id,a) values (847,72);
+insert into t (id,a) values (847,73);
+insert into t (id,a) values (847,74);
+insert into t (id,a) values (847,75);
+insert into t (id,a) values (847,76);
+insert into t (id,a) values (847,77);
+insert into t (id,a) values (847,78);
+insert into t (id,a) values (847,79);
+insert into t (id,a) values (847,80);
+insert into t (id,a) values (847,81);
+insert into t (id,a) values (847,82);
+insert into t (id,a) values (847,83);
+insert into t (id,a) values (847,84);
+insert into t (id,a) values (847,85);
+insert into t (id,a) values (847,86);
+insert into t (id,a) values (847,87);
+insert into t (id,a) values (847,88);
+insert into t (id,a) values (847,89);
+insert into t (id,a) values (847,90);
+insert into t (id,a) values (847,91);
+insert into t (id,a) values (847,92);
+insert into t (id,a) values (847,93);
+insert into t (id,a) values (847,94);
+insert into t (id,a) values (847,95);
+insert into t (id,a) values (847,96);
+insert into t (id,a) values (847,97);
+insert into t (id,a) values (847,98);
+insert into t (id,a) values (847,99);
+insert into t (id,a) values (848,0);
+insert into t (id,a) values (848,1);
+insert into t (id,a) values (848,2);
+insert into t (id,a) values (848,3);
+insert into t (id,a) values (848,4);
+insert into t (id,a) values (848,5);
+insert into t (id,a) values (848,6);
+insert into t (id,a) values (848,7);
+insert into t (id,a) values (848,8);
+insert into t (id,a) values (848,9);
+insert into t (id,a) values (848,10);
+insert into t (id,a) values (848,11);
+insert into t (id,a) values (848,12);
+insert into t (id,a) values (848,13);
+insert into t (id,a) values (848,14);
+insert into t (id,a) values (848,15);
+insert into t (id,a) values (848,16);
+insert into t (id,a) values (848,17);
+insert into t (id,a) values (848,18);
+insert into t (id,a) values (848,19);
+insert into t (id,a) values (848,20);
+insert into t (id,a) values (848,21);
+insert into t (id,a) values (848,22);
+insert into t (id,a) values (848,23);
+insert into t (id,a) values (848,24);
+insert into t (id,a) values (848,25);
+insert into t (id,a) values (848,26);
+insert into t (id,a) values (848,27);
+insert into t (id,a) values (848,28);
+insert into t (id,a) values (848,29);
+insert into t (id,a) values (848,30);
+insert into t (id,a) values (848,31);
+insert into t (id,a) values (848,32);
+insert into t (id,a) values (848,33);
+insert into t (id,a) values (848,34);
+insert into t (id,a) values (848,35);
+insert into t (id,a) values (848,36);
+insert into t (id,a) values (848,37);
+insert into t (id,a) values (848,38);
+insert into t (id,a) values (848,39);
+insert into t (id,a) values (848,40);
+insert into t (id,a) values (848,41);
+insert into t (id,a) values (848,42);
+insert into t (id,a) values (848,43);
+insert into t (id,a) values (848,44);
+insert into t (id,a) values (848,45);
+insert into t (id,a) values (848,46);
+insert into t (id,a) values (848,47);
+insert into t (id,a) values (848,48);
+insert into t (id,a) values (848,49);
+insert into t (id,a) values (848,50);
+insert into t (id,a) values (848,51);
+insert into t (id,a) values (848,52);
+insert into t (id,a) values (848,53);
+insert into t (id,a) values (848,54);
+insert into t (id,a) values (848,55);
+insert into t (id,a) values (848,56);
+insert into t (id,a) values (848,57);
+insert into t (id,a) values (848,58);
+insert into t (id,a) values (848,59);
+insert into t (id,a) values (848,60);
+insert into t (id,a) values (848,61);
+insert into t (id,a) values (848,62);
+insert into t (id,a) values (848,63);
+insert into t (id,a) values (848,64);
+insert into t (id,a) values (848,65);
+insert into t (id,a) values (848,66);
+insert into t (id,a) values (848,67);
+insert into t (id,a) values (848,68);
+insert into t (id,a) values (848,69);
+insert into t (id,a) values (848,70);
+insert into t (id,a) values (848,71);
+insert into t (id,a) values (848,72);
+insert into t (id,a) values (848,73);
+insert into t (id,a) values (848,74);
+insert into t (id,a) values (848,75);
+insert into t (id,a) values (848,76);
+insert into t (id,a) values (848,77);
+insert into t (id,a) values (848,78);
+insert into t (id,a) values (848,79);
+insert into t (id,a) values (848,80);
+insert into t (id,a) values (848,81);
+insert into t (id,a) values (848,82);
+insert into t (id,a) values (848,83);
+insert into t (id,a) values (848,84);
+insert into t (id,a) values (848,85);
+insert into t (id,a) values (848,86);
+insert into t (id,a) values (848,87);
+insert into t (id,a) values (848,88);
+insert into t (id,a) values (848,89);
+insert into t (id,a) values (848,90);
+insert into t (id,a) values (848,91);
+insert into t (id,a) values (848,92);
+insert into t (id,a) values (848,93);
+insert into t (id,a) values (848,94);
+insert into t (id,a) values (848,95);
+insert into t (id,a) values (848,96);
+insert into t (id,a) values (848,97);
+insert into t (id,a) values (848,98);
+insert into t (id,a) values (848,99);
+insert into t (id,a) values (849,0);
+insert into t (id,a) values (849,1);
+insert into t (id,a) values (849,2);
+insert into t (id,a) values (849,3);
+insert into t (id,a) values (849,4);
+insert into t (id,a) values (849,5);
+insert into t (id,a) values (849,6);
+insert into t (id,a) values (849,7);
+insert into t (id,a) values (849,8);
+insert into t (id,a) values (849,9);
+insert into t (id,a) values (849,10);
+insert into t (id,a) values (849,11);
+insert into t (id,a) values (849,12);
+insert into t (id,a) values (849,13);
+insert into t (id,a) values (849,14);
+insert into t (id,a) values (849,15);
+insert into t (id,a) values (849,16);
+insert into t (id,a) values (849,17);
+insert into t (id,a) values (849,18);
+insert into t (id,a) values (849,19);
+insert into t (id,a) values (849,20);
+insert into t (id,a) values (849,21);
+insert into t (id,a) values (849,22);
+insert into t (id,a) values (849,23);
+insert into t (id,a) values (849,24);
+insert into t (id,a) values (849,25);
+insert into t (id,a) values (849,26);
+insert into t (id,a) values (849,27);
+insert into t (id,a) values (849,28);
+insert into t (id,a) values (849,29);
+insert into t (id,a) values (849,30);
+insert into t (id,a) values (849,31);
+insert into t (id,a) values (849,32);
+insert into t (id,a) values (849,33);
+insert into t (id,a) values (849,34);
+insert into t (id,a) values (849,35);
+insert into t (id,a) values (849,36);
+insert into t (id,a) values (849,37);
+insert into t (id,a) values (849,38);
+insert into t (id,a) values (849,39);
+insert into t (id,a) values (849,40);
+insert into t (id,a) values (849,41);
+insert into t (id,a) values (849,42);
+insert into t (id,a) values (849,43);
+insert into t (id,a) values (849,44);
+insert into t (id,a) values (849,45);
+insert into t (id,a) values (849,46);
+insert into t (id,a) values (849,47);
+insert into t (id,a) values (849,48);
+insert into t (id,a) values (849,49);
+insert into t (id,a) values (849,50);
+insert into t (id,a) values (849,51);
+insert into t (id,a) values (849,52);
+insert into t (id,a) values (849,53);
+insert into t (id,a) values (849,54);
+insert into t (id,a) values (849,55);
+insert into t (id,a) values (849,56);
+insert into t (id,a) values (849,57);
+insert into t (id,a) values (849,58);
+insert into t (id,a) values (849,59);
+insert into t (id,a) values (849,60);
+insert into t (id,a) values (849,61);
+insert into t (id,a) values (849,62);
+insert into t (id,a) values (849,63);
+insert into t (id,a) values (849,64);
+insert into t (id,a) values (849,65);
+insert into t (id,a) values (849,66);
+insert into t (id,a) values (849,67);
+insert into t (id,a) values (849,68);
+insert into t (id,a) values (849,69);
+insert into t (id,a) values (849,70);
+insert into t (id,a) values (849,71);
+insert into t (id,a) values (849,72);
+insert into t (id,a) values (849,73);
+insert into t (id,a) values (849,74);
+insert into t (id,a) values (849,75);
+insert into t (id,a) values (849,76);
+insert into t (id,a) values (849,77);
+insert into t (id,a) values (849,78);
+insert into t (id,a) values (849,79);
+insert into t (id,a) values (849,80);
+insert into t (id,a) values (849,81);
+insert into t (id,a) values (849,82);
+insert into t (id,a) values (849,83);
+insert into t (id,a) values (849,84);
+insert into t (id,a) values (849,85);
+insert into t (id,a) values (849,86);
+insert into t (id,a) values (849,87);
+insert into t (id,a) values (849,88);
+insert into t (id,a) values (849,89);
+insert into t (id,a) values (849,90);
+insert into t (id,a) values (849,91);
+insert into t (id,a) values (849,92);
+insert into t (id,a) values (849,93);
+insert into t (id,a) values (849,94);
+insert into t (id,a) values (849,95);
+insert into t (id,a) values (849,96);
+insert into t (id,a) values (849,97);
+insert into t (id,a) values (849,98);
+insert into t (id,a) values (849,99);
+insert into t (id,a) values (850,0);
+insert into t (id,a) values (850,1);
+insert into t (id,a) values (850,2);
+insert into t (id,a) values (850,3);
+insert into t (id,a) values (850,4);
+insert into t (id,a) values (850,5);
+insert into t (id,a) values (850,6);
+insert into t (id,a) values (850,7);
+insert into t (id,a) values (850,8);
+insert into t (id,a) values (850,9);
+insert into t (id,a) values (850,10);
+insert into t (id,a) values (850,11);
+insert into t (id,a) values (850,12);
+insert into t (id,a) values (850,13);
+insert into t (id,a) values (850,14);
+insert into t (id,a) values (850,15);
+insert into t (id,a) values (850,16);
+insert into t (id,a) values (850,17);
+insert into t (id,a) values (850,18);
+insert into t (id,a) values (850,19);
+insert into t (id,a) values (850,20);
+insert into t (id,a) values (850,21);
+insert into t (id,a) values (850,22);
+insert into t (id,a) values (850,23);
+insert into t (id,a) values (850,24);
+insert into t (id,a) values (850,25);
+insert into t (id,a) values (850,26);
+insert into t (id,a) values (850,27);
+insert into t (id,a) values (850,28);
+insert into t (id,a) values (850,29);
+insert into t (id,a) values (850,30);
+insert into t (id,a) values (850,31);
+insert into t (id,a) values (850,32);
+insert into t (id,a) values (850,33);
+insert into t (id,a) values (850,34);
+insert into t (id,a) values (850,35);
+insert into t (id,a) values (850,36);
+insert into t (id,a) values (850,37);
+insert into t (id,a) values (850,38);
+insert into t (id,a) values (850,39);
+insert into t (id,a) values (850,40);
+insert into t (id,a) values (850,41);
+insert into t (id,a) values (850,42);
+insert into t (id,a) values (850,43);
+insert into t (id,a) values (850,44);
+insert into t (id,a) values (850,45);
+insert into t (id,a) values (850,46);
+insert into t (id,a) values (850,47);
+insert into t (id,a) values (850,48);
+insert into t (id,a) values (850,49);
+insert into t (id,a) values (850,50);
+insert into t (id,a) values (850,51);
+insert into t (id,a) values (850,52);
+insert into t (id,a) values (850,53);
+insert into t (id,a) values (850,54);
+insert into t (id,a) values (850,55);
+insert into t (id,a) values (850,56);
+insert into t (id,a) values (850,57);
+insert into t (id,a) values (850,58);
+insert into t (id,a) values (850,59);
+insert into t (id,a) values (850,60);
+insert into t (id,a) values (850,61);
+insert into t (id,a) values (850,62);
+insert into t (id,a) values (850,63);
+insert into t (id,a) values (850,64);
+insert into t (id,a) values (850,65);
+insert into t (id,a) values (850,66);
+insert into t (id,a) values (850,67);
+insert into t (id,a) values (850,68);
+insert into t (id,a) values (850,69);
+insert into t (id,a) values (850,70);
+insert into t (id,a) values (850,71);
+insert into t (id,a) values (850,72);
+insert into t (id,a) values (850,73);
+insert into t (id,a) values (850,74);
+insert into t (id,a) values (850,75);
+insert into t (id,a) values (850,76);
+insert into t (id,a) values (850,77);
+insert into t (id,a) values (850,78);
+insert into t (id,a) values (850,79);
+insert into t (id,a) values (850,80);
+insert into t (id,a) values (850,81);
+insert into t (id,a) values (850,82);
+insert into t (id,a) values (850,83);
+insert into t (id,a) values (850,84);
+insert into t (id,a) values (850,85);
+insert into t (id,a) values (850,86);
+insert into t (id,a) values (850,87);
+insert into t (id,a) values (850,88);
+insert into t (id,a) values (850,89);
+insert into t (id,a) values (850,90);
+insert into t (id,a) values (850,91);
+insert into t (id,a) values (850,92);
+insert into t (id,a) values (850,93);
+insert into t (id,a) values (850,94);
+insert into t (id,a) values (850,95);
+insert into t (id,a) values (850,96);
+insert into t (id,a) values (850,97);
+insert into t (id,a) values (850,98);
+insert into t (id,a) values (850,99);
+insert into t (id,a) values (851,0);
+insert into t (id,a) values (851,1);
+insert into t (id,a) values (851,2);
+insert into t (id,a) values (851,3);
+insert into t (id,a) values (851,4);
+insert into t (id,a) values (851,5);
+insert into t (id,a) values (851,6);
+insert into t (id,a) values (851,7);
+insert into t (id,a) values (851,8);
+insert into t (id,a) values (851,9);
+insert into t (id,a) values (851,10);
+insert into t (id,a) values (851,11);
+insert into t (id,a) values (851,12);
+insert into t (id,a) values (851,13);
+insert into t (id,a) values (851,14);
+insert into t (id,a) values (851,15);
+insert into t (id,a) values (851,16);
+insert into t (id,a) values (851,17);
+insert into t (id,a) values (851,18);
+insert into t (id,a) values (851,19);
+insert into t (id,a) values (851,20);
+insert into t (id,a) values (851,21);
+insert into t (id,a) values (851,22);
+insert into t (id,a) values (851,23);
+insert into t (id,a) values (851,24);
+insert into t (id,a) values (851,25);
+insert into t (id,a) values (851,26);
+insert into t (id,a) values (851,27);
+insert into t (id,a) values (851,28);
+insert into t (id,a) values (851,29);
+insert into t (id,a) values (851,30);
+insert into t (id,a) values (851,31);
+insert into t (id,a) values (851,32);
+insert into t (id,a) values (851,33);
+insert into t (id,a) values (851,34);
+insert into t (id,a) values (851,35);
+insert into t (id,a) values (851,36);
+insert into t (id,a) values (851,37);
+insert into t (id,a) values (851,38);
+insert into t (id,a) values (851,39);
+insert into t (id,a) values (851,40);
+insert into t (id,a) values (851,41);
+insert into t (id,a) values (851,42);
+insert into t (id,a) values (851,43);
+insert into t (id,a) values (851,44);
+insert into t (id,a) values (851,45);
+insert into t (id,a) values (851,46);
+insert into t (id,a) values (851,47);
+insert into t (id,a) values (851,48);
+insert into t (id,a) values (851,49);
+insert into t (id,a) values (851,50);
+insert into t (id,a) values (851,51);
+insert into t (id,a) values (851,52);
+insert into t (id,a) values (851,53);
+insert into t (id,a) values (851,54);
+insert into t (id,a) values (851,55);
+insert into t (id,a) values (851,56);
+insert into t (id,a) values (851,57);
+insert into t (id,a) values (851,58);
+insert into t (id,a) values (851,59);
+insert into t (id,a) values (851,60);
+insert into t (id,a) values (851,61);
+insert into t (id,a) values (851,62);
+insert into t (id,a) values (851,63);
+insert into t (id,a) values (851,64);
+insert into t (id,a) values (851,65);
+insert into t (id,a) values (851,66);
+insert into t (id,a) values (851,67);
+insert into t (id,a) values (851,68);
+insert into t (id,a) values (851,69);
+insert into t (id,a) values (851,70);
+insert into t (id,a) values (851,71);
+insert into t (id,a) values (851,72);
+insert into t (id,a) values (851,73);
+insert into t (id,a) values (851,74);
+insert into t (id,a) values (851,75);
+insert into t (id,a) values (851,76);
+insert into t (id,a) values (851,77);
+insert into t (id,a) values (851,78);
+insert into t (id,a) values (851,79);
+insert into t (id,a) values (851,80);
+insert into t (id,a) values (851,81);
+insert into t (id,a) values (851,82);
+insert into t (id,a) values (851,83);
+insert into t (id,a) values (851,84);
+insert into t (id,a) values (851,85);
+insert into t (id,a) values (851,86);
+insert into t (id,a) values (851,87);
+insert into t (id,a) values (851,88);
+insert into t (id,a) values (851,89);
+insert into t (id,a) values (851,90);
+insert into t (id,a) values (851,91);
+insert into t (id,a) values (851,92);
+insert into t (id,a) values (851,93);
+insert into t (id,a) values (851,94);
+insert into t (id,a) values (851,95);
+insert into t (id,a) values (851,96);
+insert into t (id,a) values (851,97);
+insert into t (id,a) values (851,98);
+insert into t (id,a) values (851,99);
+insert into t (id,a) values (852,0);
+insert into t (id,a) values (852,1);
+insert into t (id,a) values (852,2);
+insert into t (id,a) values (852,3);
+insert into t (id,a) values (852,4);
+insert into t (id,a) values (852,5);
+insert into t (id,a) values (852,6);
+insert into t (id,a) values (852,7);
+insert into t (id,a) values (852,8);
+insert into t (id,a) values (852,9);
+insert into t (id,a) values (852,10);
+insert into t (id,a) values (852,11);
+insert into t (id,a) values (852,12);
+insert into t (id,a) values (852,13);
+insert into t (id,a) values (852,14);
+insert into t (id,a) values (852,15);
+insert into t (id,a) values (852,16);
+insert into t (id,a) values (852,17);
+insert into t (id,a) values (852,18);
+insert into t (id,a) values (852,19);
+insert into t (id,a) values (852,20);
+insert into t (id,a) values (852,21);
+insert into t (id,a) values (852,22);
+insert into t (id,a) values (852,23);
+insert into t (id,a) values (852,24);
+insert into t (id,a) values (852,25);
+insert into t (id,a) values (852,26);
+insert into t (id,a) values (852,27);
+insert into t (id,a) values (852,28);
+insert into t (id,a) values (852,29);
+insert into t (id,a) values (852,30);
+insert into t (id,a) values (852,31);
+insert into t (id,a) values (852,32);
+insert into t (id,a) values (852,33);
+insert into t (id,a) values (852,34);
+insert into t (id,a) values (852,35);
+insert into t (id,a) values (852,36);
+insert into t (id,a) values (852,37);
+insert into t (id,a) values (852,38);
+insert into t (id,a) values (852,39);
+insert into t (id,a) values (852,40);
+insert into t (id,a) values (852,41);
+insert into t (id,a) values (852,42);
+insert into t (id,a) values (852,43);
+insert into t (id,a) values (852,44);
+insert into t (id,a) values (852,45);
+insert into t (id,a) values (852,46);
+insert into t (id,a) values (852,47);
+insert into t (id,a) values (852,48);
+insert into t (id,a) values (852,49);
+insert into t (id,a) values (852,50);
+insert into t (id,a) values (852,51);
+insert into t (id,a) values (852,52);
+insert into t (id,a) values (852,53);
+insert into t (id,a) values (852,54);
+insert into t (id,a) values (852,55);
+insert into t (id,a) values (852,56);
+insert into t (id,a) values (852,57);
+insert into t (id,a) values (852,58);
+insert into t (id,a) values (852,59);
+insert into t (id,a) values (852,60);
+insert into t (id,a) values (852,61);
+insert into t (id,a) values (852,62);
+insert into t (id,a) values (852,63);
+insert into t (id,a) values (852,64);
+insert into t (id,a) values (852,65);
+insert into t (id,a) values (852,66);
+insert into t (id,a) values (852,67);
+insert into t (id,a) values (852,68);
+insert into t (id,a) values (852,69);
+insert into t (id,a) values (852,70);
+insert into t (id,a) values (852,71);
+insert into t (id,a) values (852,72);
+insert into t (id,a) values (852,73);
+insert into t (id,a) values (852,74);
+insert into t (id,a) values (852,75);
+insert into t (id,a) values (852,76);
+insert into t (id,a) values (852,77);
+insert into t (id,a) values (852,78);
+insert into t (id,a) values (852,79);
+insert into t (id,a) values (852,80);
+insert into t (id,a) values (852,81);
+insert into t (id,a) values (852,82);
+insert into t (id,a) values (852,83);
+insert into t (id,a) values (852,84);
+insert into t (id,a) values (852,85);
+insert into t (id,a) values (852,86);
+insert into t (id,a) values (852,87);
+insert into t (id,a) values (852,88);
+insert into t (id,a) values (852,89);
+insert into t (id,a) values (852,90);
+insert into t (id,a) values (852,91);
+insert into t (id,a) values (852,92);
+insert into t (id,a) values (852,93);
+insert into t (id,a) values (852,94);
+insert into t (id,a) values (852,95);
+insert into t (id,a) values (852,96);
+insert into t (id,a) values (852,97);
+insert into t (id,a) values (852,98);
+insert into t (id,a) values (852,99);
+insert into t (id,a) values (853,0);
+insert into t (id,a) values (853,1);
+insert into t (id,a) values (853,2);
+insert into t (id,a) values (853,3);
+insert into t (id,a) values (853,4);
+insert into t (id,a) values (853,5);
+insert into t (id,a) values (853,6);
+insert into t (id,a) values (853,7);
+insert into t (id,a) values (853,8);
+insert into t (id,a) values (853,9);
+insert into t (id,a) values (853,10);
+insert into t (id,a) values (853,11);
+insert into t (id,a) values (853,12);
+insert into t (id,a) values (853,13);
+insert into t (id,a) values (853,14);
+insert into t (id,a) values (853,15);
+insert into t (id,a) values (853,16);
+insert into t (id,a) values (853,17);
+insert into t (id,a) values (853,18);
+insert into t (id,a) values (853,19);
+insert into t (id,a) values (853,20);
+insert into t (id,a) values (853,21);
+insert into t (id,a) values (853,22);
+insert into t (id,a) values (853,23);
+insert into t (id,a) values (853,24);
+insert into t (id,a) values (853,25);
+insert into t (id,a) values (853,26);
+insert into t (id,a) values (853,27);
+insert into t (id,a) values (853,28);
+insert into t (id,a) values (853,29);
+insert into t (id,a) values (853,30);
+insert into t (id,a) values (853,31);
+insert into t (id,a) values (853,32);
+insert into t (id,a) values (853,33);
+insert into t (id,a) values (853,34);
+insert into t (id,a) values (853,35);
+insert into t (id,a) values (853,36);
+insert into t (id,a) values (853,37);
+insert into t (id,a) values (853,38);
+insert into t (id,a) values (853,39);
+insert into t (id,a) values (853,40);
+insert into t (id,a) values (853,41);
+insert into t (id,a) values (853,42);
+insert into t (id,a) values (853,43);
+insert into t (id,a) values (853,44);
+insert into t (id,a) values (853,45);
+insert into t (id,a) values (853,46);
+insert into t (id,a) values (853,47);
+insert into t (id,a) values (853,48);
+insert into t (id,a) values (853,49);
+insert into t (id,a) values (853,50);
+insert into t (id,a) values (853,51);
+insert into t (id,a) values (853,52);
+insert into t (id,a) values (853,53);
+insert into t (id,a) values (853,54);
+insert into t (id,a) values (853,55);
+insert into t (id,a) values (853,56);
+insert into t (id,a) values (853,57);
+insert into t (id,a) values (853,58);
+insert into t (id,a) values (853,59);
+insert into t (id,a) values (853,60);
+insert into t (id,a) values (853,61);
+insert into t (id,a) values (853,62);
+insert into t (id,a) values (853,63);
+insert into t (id,a) values (853,64);
+insert into t (id,a) values (853,65);
+insert into t (id,a) values (853,66);
+insert into t (id,a) values (853,67);
+insert into t (id,a) values (853,68);
+insert into t (id,a) values (853,69);
+insert into t (id,a) values (853,70);
+insert into t (id,a) values (853,71);
+insert into t (id,a) values (853,72);
+insert into t (id,a) values (853,73);
+insert into t (id,a) values (853,74);
+insert into t (id,a) values (853,75);
+insert into t (id,a) values (853,76);
+insert into t (id,a) values (853,77);
+insert into t (id,a) values (853,78);
+insert into t (id,a) values (853,79);
+insert into t (id,a) values (853,80);
+insert into t (id,a) values (853,81);
+insert into t (id,a) values (853,82);
+insert into t (id,a) values (853,83);
+insert into t (id,a) values (853,84);
+insert into t (id,a) values (853,85);
+insert into t (id,a) values (853,86);
+insert into t (id,a) values (853,87);
+insert into t (id,a) values (853,88);
+insert into t (id,a) values (853,89);
+insert into t (id,a) values (853,90);
+insert into t (id,a) values (853,91);
+insert into t (id,a) values (853,92);
+insert into t (id,a) values (853,93);
+insert into t (id,a) values (853,94);
+insert into t (id,a) values (853,95);
+insert into t (id,a) values (853,96);
+insert into t (id,a) values (853,97);
+insert into t (id,a) values (853,98);
+insert into t (id,a) values (853,99);
+insert into t (id,a) values (854,0);
+insert into t (id,a) values (854,1);
+insert into t (id,a) values (854,2);
+insert into t (id,a) values (854,3);
+insert into t (id,a) values (854,4);
+insert into t (id,a) values (854,5);
+insert into t (id,a) values (854,6);
+insert into t (id,a) values (854,7);
+insert into t (id,a) values (854,8);
+insert into t (id,a) values (854,9);
+insert into t (id,a) values (854,10);
+insert into t (id,a) values (854,11);
+insert into t (id,a) values (854,12);
+insert into t (id,a) values (854,13);
+insert into t (id,a) values (854,14);
+insert into t (id,a) values (854,15);
+insert into t (id,a) values (854,16);
+insert into t (id,a) values (854,17);
+insert into t (id,a) values (854,18);
+insert into t (id,a) values (854,19);
+insert into t (id,a) values (854,20);
+insert into t (id,a) values (854,21);
+insert into t (id,a) values (854,22);
+insert into t (id,a) values (854,23);
+insert into t (id,a) values (854,24);
+insert into t (id,a) values (854,25);
+insert into t (id,a) values (854,26);
+insert into t (id,a) values (854,27);
+insert into t (id,a) values (854,28);
+insert into t (id,a) values (854,29);
+insert into t (id,a) values (854,30);
+insert into t (id,a) values (854,31);
+insert into t (id,a) values (854,32);
+insert into t (id,a) values (854,33);
+insert into t (id,a) values (854,34);
+insert into t (id,a) values (854,35);
+insert into t (id,a) values (854,36);
+insert into t (id,a) values (854,37);
+insert into t (id,a) values (854,38);
+insert into t (id,a) values (854,39);
+insert into t (id,a) values (854,40);
+insert into t (id,a) values (854,41);
+insert into t (id,a) values (854,42);
+insert into t (id,a) values (854,43);
+insert into t (id,a) values (854,44);
+insert into t (id,a) values (854,45);
+insert into t (id,a) values (854,46);
+insert into t (id,a) values (854,47);
+insert into t (id,a) values (854,48);
+insert into t (id,a) values (854,49);
+insert into t (id,a) values (854,50);
+insert into t (id,a) values (854,51);
+insert into t (id,a) values (854,52);
+insert into t (id,a) values (854,53);
+insert into t (id,a) values (854,54);
+insert into t (id,a) values (854,55);
+insert into t (id,a) values (854,56);
+insert into t (id,a) values (854,57);
+insert into t (id,a) values (854,58);
+insert into t (id,a) values (854,59);
+insert into t (id,a) values (854,60);
+insert into t (id,a) values (854,61);
+insert into t (id,a) values (854,62);
+insert into t (id,a) values (854,63);
+insert into t (id,a) values (854,64);
+insert into t (id,a) values (854,65);
+insert into t (id,a) values (854,66);
+insert into t (id,a) values (854,67);
+insert into t (id,a) values (854,68);
+insert into t (id,a) values (854,69);
+insert into t (id,a) values (854,70);
+insert into t (id,a) values (854,71);
+insert into t (id,a) values (854,72);
+insert into t (id,a) values (854,73);
+insert into t (id,a) values (854,74);
+insert into t (id,a) values (854,75);
+insert into t (id,a) values (854,76);
+insert into t (id,a) values (854,77);
+insert into t (id,a) values (854,78);
+insert into t (id,a) values (854,79);
+insert into t (id,a) values (854,80);
+insert into t (id,a) values (854,81);
+insert into t (id,a) values (854,82);
+insert into t (id,a) values (854,83);
+insert into t (id,a) values (854,84);
+insert into t (id,a) values (854,85);
+insert into t (id,a) values (854,86);
+insert into t (id,a) values (854,87);
+insert into t (id,a) values (854,88);
+insert into t (id,a) values (854,89);
+insert into t (id,a) values (854,90);
+insert into t (id,a) values (854,91);
+insert into t (id,a) values (854,92);
+insert into t (id,a) values (854,93);
+insert into t (id,a) values (854,94);
+insert into t (id,a) values (854,95);
+insert into t (id,a) values (854,96);
+insert into t (id,a) values (854,97);
+insert into t (id,a) values (854,98);
+insert into t (id,a) values (854,99);
+insert into t (id,a) values (855,0);
+insert into t (id,a) values (855,1);
+insert into t (id,a) values (855,2);
+insert into t (id,a) values (855,3);
+insert into t (id,a) values (855,4);
+insert into t (id,a) values (855,5);
+insert into t (id,a) values (855,6);
+insert into t (id,a) values (855,7);
+insert into t (id,a) values (855,8);
+insert into t (id,a) values (855,9);
+insert into t (id,a) values (855,10);
+insert into t (id,a) values (855,11);
+insert into t (id,a) values (855,12);
+insert into t (id,a) values (855,13);
+insert into t (id,a) values (855,14);
+insert into t (id,a) values (855,15);
+insert into t (id,a) values (855,16);
+insert into t (id,a) values (855,17);
+insert into t (id,a) values (855,18);
+insert into t (id,a) values (855,19);
+insert into t (id,a) values (855,20);
+insert into t (id,a) values (855,21);
+insert into t (id,a) values (855,22);
+insert into t (id,a) values (855,23);
+insert into t (id,a) values (855,24);
+insert into t (id,a) values (855,25);
+insert into t (id,a) values (855,26);
+insert into t (id,a) values (855,27);
+insert into t (id,a) values (855,28);
+insert into t (id,a) values (855,29);
+insert into t (id,a) values (855,30);
+insert into t (id,a) values (855,31);
+insert into t (id,a) values (855,32);
+insert into t (id,a) values (855,33);
+insert into t (id,a) values (855,34);
+insert into t (id,a) values (855,35);
+insert into t (id,a) values (855,36);
+insert into t (id,a) values (855,37);
+insert into t (id,a) values (855,38);
+insert into t (id,a) values (855,39);
+insert into t (id,a) values (855,40);
+insert into t (id,a) values (855,41);
+insert into t (id,a) values (855,42);
+insert into t (id,a) values (855,43);
+insert into t (id,a) values (855,44);
+insert into t (id,a) values (855,45);
+insert into t (id,a) values (855,46);
+insert into t (id,a) values (855,47);
+insert into t (id,a) values (855,48);
+insert into t (id,a) values (855,49);
+insert into t (id,a) values (855,50);
+insert into t (id,a) values (855,51);
+insert into t (id,a) values (855,52);
+insert into t (id,a) values (855,53);
+insert into t (id,a) values (855,54);
+insert into t (id,a) values (855,55);
+insert into t (id,a) values (855,56);
+insert into t (id,a) values (855,57);
+insert into t (id,a) values (855,58);
+insert into t (id,a) values (855,59);
+insert into t (id,a) values (855,60);
+insert into t (id,a) values (855,61);
+insert into t (id,a) values (855,62);
+insert into t (id,a) values (855,63);
+insert into t (id,a) values (855,64);
+insert into t (id,a) values (855,65);
+insert into t (id,a) values (855,66);
+insert into t (id,a) values (855,67);
+insert into t (id,a) values (855,68);
+insert into t (id,a) values (855,69);
+insert into t (id,a) values (855,70);
+insert into t (id,a) values (855,71);
+insert into t (id,a) values (855,72);
+insert into t (id,a) values (855,73);
+insert into t (id,a) values (855,74);
+insert into t (id,a) values (855,75);
+insert into t (id,a) values (855,76);
+insert into t (id,a) values (855,77);
+insert into t (id,a) values (855,78);
+insert into t (id,a) values (855,79);
+insert into t (id,a) values (855,80);
+insert into t (id,a) values (855,81);
+insert into t (id,a) values (855,82);
+insert into t (id,a) values (855,83);
+insert into t (id,a) values (855,84);
+insert into t (id,a) values (855,85);
+insert into t (id,a) values (855,86);
+insert into t (id,a) values (855,87);
+insert into t (id,a) values (855,88);
+insert into t (id,a) values (855,89);
+insert into t (id,a) values (855,90);
+insert into t (id,a) values (855,91);
+insert into t (id,a) values (855,92);
+insert into t (id,a) values (855,93);
+insert into t (id,a) values (855,94);
+insert into t (id,a) values (855,95);
+insert into t (id,a) values (855,96);
+insert into t (id,a) values (855,97);
+insert into t (id,a) values (855,98);
+insert into t (id,a) values (855,99);
+insert into t (id,a) values (856,0);
+insert into t (id,a) values (856,1);
+insert into t (id,a) values (856,2);
+insert into t (id,a) values (856,3);
+insert into t (id,a) values (856,4);
+insert into t (id,a) values (856,5);
+insert into t (id,a) values (856,6);
+insert into t (id,a) values (856,7);
+insert into t (id,a) values (856,8);
+insert into t (id,a) values (856,9);
+insert into t (id,a) values (856,10);
+insert into t (id,a) values (856,11);
+insert into t (id,a) values (856,12);
+insert into t (id,a) values (856,13);
+insert into t (id,a) values (856,14);
+insert into t (id,a) values (856,15);
+insert into t (id,a) values (856,16);
+insert into t (id,a) values (856,17);
+insert into t (id,a) values (856,18);
+insert into t (id,a) values (856,19);
+insert into t (id,a) values (856,20);
+insert into t (id,a) values (856,21);
+insert into t (id,a) values (856,22);
+insert into t (id,a) values (856,23);
+insert into t (id,a) values (856,24);
+insert into t (id,a) values (856,25);
+insert into t (id,a) values (856,26);
+insert into t (id,a) values (856,27);
+insert into t (id,a) values (856,28);
+insert into t (id,a) values (856,29);
+insert into t (id,a) values (856,30);
+insert into t (id,a) values (856,31);
+insert into t (id,a) values (856,32);
+insert into t (id,a) values (856,33);
+insert into t (id,a) values (856,34);
+insert into t (id,a) values (856,35);
+insert into t (id,a) values (856,36);
+insert into t (id,a) values (856,37);
+insert into t (id,a) values (856,38);
+insert into t (id,a) values (856,39);
+insert into t (id,a) values (856,40);
+insert into t (id,a) values (856,41);
+insert into t (id,a) values (856,42);
+insert into t (id,a) values (856,43);
+insert into t (id,a) values (856,44);
+insert into t (id,a) values (856,45);
+insert into t (id,a) values (856,46);
+insert into t (id,a) values (856,47);
+insert into t (id,a) values (856,48);
+insert into t (id,a) values (856,49);
+insert into t (id,a) values (856,50);
+insert into t (id,a) values (856,51);
+insert into t (id,a) values (856,52);
+insert into t (id,a) values (856,53);
+insert into t (id,a) values (856,54);
+insert into t (id,a) values (856,55);
+insert into t (id,a) values (856,56);
+insert into t (id,a) values (856,57);
+insert into t (id,a) values (856,58);
+insert into t (id,a) values (856,59);
+insert into t (id,a) values (856,60);
+insert into t (id,a) values (856,61);
+insert into t (id,a) values (856,62);
+insert into t (id,a) values (856,63);
+insert into t (id,a) values (856,64);
+insert into t (id,a) values (856,65);
+insert into t (id,a) values (856,66);
+insert into t (id,a) values (856,67);
+insert into t (id,a) values (856,68);
+insert into t (id,a) values (856,69);
+insert into t (id,a) values (856,70);
+insert into t (id,a) values (856,71);
+insert into t (id,a) values (856,72);
+insert into t (id,a) values (856,73);
+insert into t (id,a) values (856,74);
+insert into t (id,a) values (856,75);
+insert into t (id,a) values (856,76);
+insert into t (id,a) values (856,77);
+insert into t (id,a) values (856,78);
+insert into t (id,a) values (856,79);
+insert into t (id,a) values (856,80);
+insert into t (id,a) values (856,81);
+insert into t (id,a) values (856,82);
+insert into t (id,a) values (856,83);
+insert into t (id,a) values (856,84);
+insert into t (id,a) values (856,85);
+insert into t (id,a) values (856,86);
+insert into t (id,a) values (856,87);
+insert into t (id,a) values (856,88);
+insert into t (id,a) values (856,89);
+insert into t (id,a) values (856,90);
+insert into t (id,a) values (856,91);
+insert into t (id,a) values (856,92);
+insert into t (id,a) values (856,93);
+insert into t (id,a) values (856,94);
+insert into t (id,a) values (856,95);
+insert into t (id,a) values (856,96);
+insert into t (id,a) values (856,97);
+insert into t (id,a) values (856,98);
+insert into t (id,a) values (856,99);
+insert into t (id,a) values (857,0);
+insert into t (id,a) values (857,1);
+insert into t (id,a) values (857,2);
+insert into t (id,a) values (857,3);
+insert into t (id,a) values (857,4);
+insert into t (id,a) values (857,5);
+insert into t (id,a) values (857,6);
+insert into t (id,a) values (857,7);
+insert into t (id,a) values (857,8);
+insert into t (id,a) values (857,9);
+insert into t (id,a) values (857,10);
+insert into t (id,a) values (857,11);
+insert into t (id,a) values (857,12);
+insert into t (id,a) values (857,13);
+insert into t (id,a) values (857,14);
+insert into t (id,a) values (857,15);
+insert into t (id,a) values (857,16);
+insert into t (id,a) values (857,17);
+insert into t (id,a) values (857,18);
+insert into t (id,a) values (857,19);
+insert into t (id,a) values (857,20);
+insert into t (id,a) values (857,21);
+insert into t (id,a) values (857,22);
+insert into t (id,a) values (857,23);
+insert into t (id,a) values (857,24);
+insert into t (id,a) values (857,25);
+insert into t (id,a) values (857,26);
+insert into t (id,a) values (857,27);
+insert into t (id,a) values (857,28);
+insert into t (id,a) values (857,29);
+insert into t (id,a) values (857,30);
+insert into t (id,a) values (857,31);
+insert into t (id,a) values (857,32);
+insert into t (id,a) values (857,33);
+insert into t (id,a) values (857,34);
+insert into t (id,a) values (857,35);
+insert into t (id,a) values (857,36);
+insert into t (id,a) values (857,37);
+insert into t (id,a) values (857,38);
+insert into t (id,a) values (857,39);
+insert into t (id,a) values (857,40);
+insert into t (id,a) values (857,41);
+insert into t (id,a) values (857,42);
+insert into t (id,a) values (857,43);
+insert into t (id,a) values (857,44);
+insert into t (id,a) values (857,45);
+insert into t (id,a) values (857,46);
+insert into t (id,a) values (857,47);
+insert into t (id,a) values (857,48);
+insert into t (id,a) values (857,49);
+insert into t (id,a) values (857,50);
+insert into t (id,a) values (857,51);
+insert into t (id,a) values (857,52);
+insert into t (id,a) values (857,53);
+insert into t (id,a) values (857,54);
+insert into t (id,a) values (857,55);
+insert into t (id,a) values (857,56);
+insert into t (id,a) values (857,57);
+insert into t (id,a) values (857,58);
+insert into t (id,a) values (857,59);
+insert into t (id,a) values (857,60);
+insert into t (id,a) values (857,61);
+insert into t (id,a) values (857,62);
+insert into t (id,a) values (857,63);
+insert into t (id,a) values (857,64);
+insert into t (id,a) values (857,65);
+insert into t (id,a) values (857,66);
+insert into t (id,a) values (857,67);
+insert into t (id,a) values (857,68);
+insert into t (id,a) values (857,69);
+insert into t (id,a) values (857,70);
+insert into t (id,a) values (857,71);
+insert into t (id,a) values (857,72);
+insert into t (id,a) values (857,73);
+insert into t (id,a) values (857,74);
+insert into t (id,a) values (857,75);
+insert into t (id,a) values (857,76);
+insert into t (id,a) values (857,77);
+insert into t (id,a) values (857,78);
+insert into t (id,a) values (857,79);
+insert into t (id,a) values (857,80);
+insert into t (id,a) values (857,81);
+insert into t (id,a) values (857,82);
+insert into t (id,a) values (857,83);
+insert into t (id,a) values (857,84);
+insert into t (id,a) values (857,85);
+insert into t (id,a) values (857,86);
+insert into t (id,a) values (857,87);
+insert into t (id,a) values (857,88);
+insert into t (id,a) values (857,89);
+insert into t (id,a) values (857,90);
+insert into t (id,a) values (857,91);
+insert into t (id,a) values (857,92);
+insert into t (id,a) values (857,93);
+insert into t (id,a) values (857,94);
+insert into t (id,a) values (857,95);
+insert into t (id,a) values (857,96);
+insert into t (id,a) values (857,97);
+insert into t (id,a) values (857,98);
+insert into t (id,a) values (857,99);
+insert into t (id,a) values (858,0);
+insert into t (id,a) values (858,1);
+insert into t (id,a) values (858,2);
+insert into t (id,a) values (858,3);
+insert into t (id,a) values (858,4);
+insert into t (id,a) values (858,5);
+insert into t (id,a) values (858,6);
+insert into t (id,a) values (858,7);
+insert into t (id,a) values (858,8);
+insert into t (id,a) values (858,9);
+insert into t (id,a) values (858,10);
+insert into t (id,a) values (858,11);
+insert into t (id,a) values (858,12);
+insert into t (id,a) values (858,13);
+insert into t (id,a) values (858,14);
+insert into t (id,a) values (858,15);
+insert into t (id,a) values (858,16);
+insert into t (id,a) values (858,17);
+insert into t (id,a) values (858,18);
+insert into t (id,a) values (858,19);
+insert into t (id,a) values (858,20);
+insert into t (id,a) values (858,21);
+insert into t (id,a) values (858,22);
+insert into t (id,a) values (858,23);
+insert into t (id,a) values (858,24);
+insert into t (id,a) values (858,25);
+insert into t (id,a) values (858,26);
+insert into t (id,a) values (858,27);
+insert into t (id,a) values (858,28);
+insert into t (id,a) values (858,29);
+insert into t (id,a) values (858,30);
+insert into t (id,a) values (858,31);
+insert into t (id,a) values (858,32);
+insert into t (id,a) values (858,33);
+insert into t (id,a) values (858,34);
+insert into t (id,a) values (858,35);
+insert into t (id,a) values (858,36);
+insert into t (id,a) values (858,37);
+insert into t (id,a) values (858,38);
+insert into t (id,a) values (858,39);
+insert into t (id,a) values (858,40);
+insert into t (id,a) values (858,41);
+insert into t (id,a) values (858,42);
+insert into t (id,a) values (858,43);
+insert into t (id,a) values (858,44);
+insert into t (id,a) values (858,45);
+insert into t (id,a) values (858,46);
+insert into t (id,a) values (858,47);
+insert into t (id,a) values (858,48);
+insert into t (id,a) values (858,49);
+insert into t (id,a) values (858,50);
+insert into t (id,a) values (858,51);
+insert into t (id,a) values (858,52);
+insert into t (id,a) values (858,53);
+insert into t (id,a) values (858,54);
+insert into t (id,a) values (858,55);
+insert into t (id,a) values (858,56);
+insert into t (id,a) values (858,57);
+insert into t (id,a) values (858,58);
+insert into t (id,a) values (858,59);
+insert into t (id,a) values (858,60);
+insert into t (id,a) values (858,61);
+insert into t (id,a) values (858,62);
+insert into t (id,a) values (858,63);
+insert into t (id,a) values (858,64);
+insert into t (id,a) values (858,65);
+insert into t (id,a) values (858,66);
+insert into t (id,a) values (858,67);
+insert into t (id,a) values (858,68);
+insert into t (id,a) values (858,69);
+insert into t (id,a) values (858,70);
+insert into t (id,a) values (858,71);
+insert into t (id,a) values (858,72);
+insert into t (id,a) values (858,73);
+insert into t (id,a) values (858,74);
+insert into t (id,a) values (858,75);
+insert into t (id,a) values (858,76);
+insert into t (id,a) values (858,77);
+insert into t (id,a) values (858,78);
+insert into t (id,a) values (858,79);
+insert into t (id,a) values (858,80);
+insert into t (id,a) values (858,81);
+insert into t (id,a) values (858,82);
+insert into t (id,a) values (858,83);
+insert into t (id,a) values (858,84);
+insert into t (id,a) values (858,85);
+insert into t (id,a) values (858,86);
+insert into t (id,a) values (858,87);
+insert into t (id,a) values (858,88);
+insert into t (id,a) values (858,89);
+insert into t (id,a) values (858,90);
+insert into t (id,a) values (858,91);
+insert into t (id,a) values (858,92);
+insert into t (id,a) values (858,93);
+insert into t (id,a) values (858,94);
+insert into t (id,a) values (858,95);
+insert into t (id,a) values (858,96);
+insert into t (id,a) values (858,97);
+insert into t (id,a) values (858,98);
+insert into t (id,a) values (858,99);
+insert into t (id,a) values (859,0);
+insert into t (id,a) values (859,1);
+insert into t (id,a) values (859,2);
+insert into t (id,a) values (859,3);
+insert into t (id,a) values (859,4);
+insert into t (id,a) values (859,5);
+insert into t (id,a) values (859,6);
+insert into t (id,a) values (859,7);
+insert into t (id,a) values (859,8);
+insert into t (id,a) values (859,9);
+insert into t (id,a) values (859,10);
+insert into t (id,a) values (859,11);
+insert into t (id,a) values (859,12);
+insert into t (id,a) values (859,13);
+insert into t (id,a) values (859,14);
+insert into t (id,a) values (859,15);
+insert into t (id,a) values (859,16);
+insert into t (id,a) values (859,17);
+insert into t (id,a) values (859,18);
+insert into t (id,a) values (859,19);
+insert into t (id,a) values (859,20);
+insert into t (id,a) values (859,21);
+insert into t (id,a) values (859,22);
+insert into t (id,a) values (859,23);
+insert into t (id,a) values (859,24);
+insert into t (id,a) values (859,25);
+insert into t (id,a) values (859,26);
+insert into t (id,a) values (859,27);
+insert into t (id,a) values (859,28);
+insert into t (id,a) values (859,29);
+insert into t (id,a) values (859,30);
+insert into t (id,a) values (859,31);
+insert into t (id,a) values (859,32);
+insert into t (id,a) values (859,33);
+insert into t (id,a) values (859,34);
+insert into t (id,a) values (859,35);
+insert into t (id,a) values (859,36);
+insert into t (id,a) values (859,37);
+insert into t (id,a) values (859,38);
+insert into t (id,a) values (859,39);
+insert into t (id,a) values (859,40);
+insert into t (id,a) values (859,41);
+insert into t (id,a) values (859,42);
+insert into t (id,a) values (859,43);
+insert into t (id,a) values (859,44);
+insert into t (id,a) values (859,45);
+insert into t (id,a) values (859,46);
+insert into t (id,a) values (859,47);
+insert into t (id,a) values (859,48);
+insert into t (id,a) values (859,49);
+insert into t (id,a) values (859,50);
+insert into t (id,a) values (859,51);
+insert into t (id,a) values (859,52);
+insert into t (id,a) values (859,53);
+insert into t (id,a) values (859,54);
+insert into t (id,a) values (859,55);
+insert into t (id,a) values (859,56);
+insert into t (id,a) values (859,57);
+insert into t (id,a) values (859,58);
+insert into t (id,a) values (859,59);
+insert into t (id,a) values (859,60);
+insert into t (id,a) values (859,61);
+insert into t (id,a) values (859,62);
+insert into t (id,a) values (859,63);
+insert into t (id,a) values (859,64);
+insert into t (id,a) values (859,65);
+insert into t (id,a) values (859,66);
+insert into t (id,a) values (859,67);
+insert into t (id,a) values (859,68);
+insert into t (id,a) values (859,69);
+insert into t (id,a) values (859,70);
+insert into t (id,a) values (859,71);
+insert into t (id,a) values (859,72);
+insert into t (id,a) values (859,73);
+insert into t (id,a) values (859,74);
+insert into t (id,a) values (859,75);
+insert into t (id,a) values (859,76);
+insert into t (id,a) values (859,77);
+insert into t (id,a) values (859,78);
+insert into t (id,a) values (859,79);
+insert into t (id,a) values (859,80);
+insert into t (id,a) values (859,81);
+insert into t (id,a) values (859,82);
+insert into t (id,a) values (859,83);
+insert into t (id,a) values (859,84);
+insert into t (id,a) values (859,85);
+insert into t (id,a) values (859,86);
+insert into t (id,a) values (859,87);
+insert into t (id,a) values (859,88);
+insert into t (id,a) values (859,89);
+insert into t (id,a) values (859,90);
+insert into t (id,a) values (859,91);
+insert into t (id,a) values (859,92);
+insert into t (id,a) values (859,93);
+insert into t (id,a) values (859,94);
+insert into t (id,a) values (859,95);
+insert into t (id,a) values (859,96);
+insert into t (id,a) values (859,97);
+insert into t (id,a) values (859,98);
+insert into t (id,a) values (859,99);
+insert into t (id,a) values (860,0);
+insert into t (id,a) values (860,1);
+insert into t (id,a) values (860,2);
+insert into t (id,a) values (860,3);
+insert into t (id,a) values (860,4);
+insert into t (id,a) values (860,5);
+insert into t (id,a) values (860,6);
+insert into t (id,a) values (860,7);
+insert into t (id,a) values (860,8);
+insert into t (id,a) values (860,9);
+insert into t (id,a) values (860,10);
+insert into t (id,a) values (860,11);
+insert into t (id,a) values (860,12);
+insert into t (id,a) values (860,13);
+insert into t (id,a) values (860,14);
+insert into t (id,a) values (860,15);
+insert into t (id,a) values (860,16);
+insert into t (id,a) values (860,17);
+insert into t (id,a) values (860,18);
+insert into t (id,a) values (860,19);
+insert into t (id,a) values (860,20);
+insert into t (id,a) values (860,21);
+insert into t (id,a) values (860,22);
+insert into t (id,a) values (860,23);
+insert into t (id,a) values (860,24);
+insert into t (id,a) values (860,25);
+insert into t (id,a) values (860,26);
+insert into t (id,a) values (860,27);
+insert into t (id,a) values (860,28);
+insert into t (id,a) values (860,29);
+insert into t (id,a) values (860,30);
+insert into t (id,a) values (860,31);
+insert into t (id,a) values (860,32);
+insert into t (id,a) values (860,33);
+insert into t (id,a) values (860,34);
+insert into t (id,a) values (860,35);
+insert into t (id,a) values (860,36);
+insert into t (id,a) values (860,37);
+insert into t (id,a) values (860,38);
+insert into t (id,a) values (860,39);
+insert into t (id,a) values (860,40);
+insert into t (id,a) values (860,41);
+insert into t (id,a) values (860,42);
+insert into t (id,a) values (860,43);
+insert into t (id,a) values (860,44);
+insert into t (id,a) values (860,45);
+insert into t (id,a) values (860,46);
+insert into t (id,a) values (860,47);
+insert into t (id,a) values (860,48);
+insert into t (id,a) values (860,49);
+insert into t (id,a) values (860,50);
+insert into t (id,a) values (860,51);
+insert into t (id,a) values (860,52);
+insert into t (id,a) values (860,53);
+insert into t (id,a) values (860,54);
+insert into t (id,a) values (860,55);
+insert into t (id,a) values (860,56);
+insert into t (id,a) values (860,57);
+insert into t (id,a) values (860,58);
+insert into t (id,a) values (860,59);
+insert into t (id,a) values (860,60);
+insert into t (id,a) values (860,61);
+insert into t (id,a) values (860,62);
+insert into t (id,a) values (860,63);
+insert into t (id,a) values (860,64);
+insert into t (id,a) values (860,65);
+insert into t (id,a) values (860,66);
+insert into t (id,a) values (860,67);
+insert into t (id,a) values (860,68);
+insert into t (id,a) values (860,69);
+insert into t (id,a) values (860,70);
+insert into t (id,a) values (860,71);
+insert into t (id,a) values (860,72);
+insert into t (id,a) values (860,73);
+insert into t (id,a) values (860,74);
+insert into t (id,a) values (860,75);
+insert into t (id,a) values (860,76);
+insert into t (id,a) values (860,77);
+insert into t (id,a) values (860,78);
+insert into t (id,a) values (860,79);
+insert into t (id,a) values (860,80);
+insert into t (id,a) values (860,81);
+insert into t (id,a) values (860,82);
+insert into t (id,a) values (860,83);
+insert into t (id,a) values (860,84);
+insert into t (id,a) values (860,85);
+insert into t (id,a) values (860,86);
+insert into t (id,a) values (860,87);
+insert into t (id,a) values (860,88);
+insert into t (id,a) values (860,89);
+insert into t (id,a) values (860,90);
+insert into t (id,a) values (860,91);
+insert into t (id,a) values (860,92);
+insert into t (id,a) values (860,93);
+insert into t (id,a) values (860,94);
+insert into t (id,a) values (860,95);
+insert into t (id,a) values (860,96);
+insert into t (id,a) values (860,97);
+insert into t (id,a) values (860,98);
+insert into t (id,a) values (860,99);
+insert into t (id,a) values (861,0);
+insert into t (id,a) values (861,1);
+insert into t (id,a) values (861,2);
+insert into t (id,a) values (861,3);
+insert into t (id,a) values (861,4);
+insert into t (id,a) values (861,5);
+insert into t (id,a) values (861,6);
+insert into t (id,a) values (861,7);
+insert into t (id,a) values (861,8);
+insert into t (id,a) values (861,9);
+insert into t (id,a) values (861,10);
+insert into t (id,a) values (861,11);
+insert into t (id,a) values (861,12);
+insert into t (id,a) values (861,13);
+insert into t (id,a) values (861,14);
+insert into t (id,a) values (861,15);
+insert into t (id,a) values (861,16);
+insert into t (id,a) values (861,17);
+insert into t (id,a) values (861,18);
+insert into t (id,a) values (861,19);
+insert into t (id,a) values (861,20);
+insert into t (id,a) values (861,21);
+insert into t (id,a) values (861,22);
+insert into t (id,a) values (861,23);
+insert into t (id,a) values (861,24);
+insert into t (id,a) values (861,25);
+insert into t (id,a) values (861,26);
+insert into t (id,a) values (861,27);
+insert into t (id,a) values (861,28);
+insert into t (id,a) values (861,29);
+insert into t (id,a) values (861,30);
+insert into t (id,a) values (861,31);
+insert into t (id,a) values (861,32);
+insert into t (id,a) values (861,33);
+insert into t (id,a) values (861,34);
+insert into t (id,a) values (861,35);
+insert into t (id,a) values (861,36);
+insert into t (id,a) values (861,37);
+insert into t (id,a) values (861,38);
+insert into t (id,a) values (861,39);
+insert into t (id,a) values (861,40);
+insert into t (id,a) values (861,41);
+insert into t (id,a) values (861,42);
+insert into t (id,a) values (861,43);
+insert into t (id,a) values (861,44);
+insert into t (id,a) values (861,45);
+insert into t (id,a) values (861,46);
+insert into t (id,a) values (861,47);
+insert into t (id,a) values (861,48);
+insert into t (id,a) values (861,49);
+insert into t (id,a) values (861,50);
+insert into t (id,a) values (861,51);
+insert into t (id,a) values (861,52);
+insert into t (id,a) values (861,53);
+insert into t (id,a) values (861,54);
+insert into t (id,a) values (861,55);
+insert into t (id,a) values (861,56);
+insert into t (id,a) values (861,57);
+insert into t (id,a) values (861,58);
+insert into t (id,a) values (861,59);
+insert into t (id,a) values (861,60);
+insert into t (id,a) values (861,61);
+insert into t (id,a) values (861,62);
+insert into t (id,a) values (861,63);
+insert into t (id,a) values (861,64);
+insert into t (id,a) values (861,65);
+insert into t (id,a) values (861,66);
+insert into t (id,a) values (861,67);
+insert into t (id,a) values (861,68);
+insert into t (id,a) values (861,69);
+insert into t (id,a) values (861,70);
+insert into t (id,a) values (861,71);
+insert into t (id,a) values (861,72);
+insert into t (id,a) values (861,73);
+insert into t (id,a) values (861,74);
+insert into t (id,a) values (861,75);
+insert into t (id,a) values (861,76);
+insert into t (id,a) values (861,77);
+insert into t (id,a) values (861,78);
+insert into t (id,a) values (861,79);
+insert into t (id,a) values (861,80);
+insert into t (id,a) values (861,81);
+insert into t (id,a) values (861,82);
+insert into t (id,a) values (861,83);
+insert into t (id,a) values (861,84);
+insert into t (id,a) values (861,85);
+insert into t (id,a) values (861,86);
+insert into t (id,a) values (861,87);
+insert into t (id,a) values (861,88);
+insert into t (id,a) values (861,89);
+insert into t (id,a) values (861,90);
+insert into t (id,a) values (861,91);
+insert into t (id,a) values (861,92);
+insert into t (id,a) values (861,93);
+insert into t (id,a) values (861,94);
+insert into t (id,a) values (861,95);
+insert into t (id,a) values (861,96);
+insert into t (id,a) values (861,97);
+insert into t (id,a) values (861,98);
+insert into t (id,a) values (861,99);
+insert into t (id,a) values (862,0);
+insert into t (id,a) values (862,1);
+insert into t (id,a) values (862,2);
+insert into t (id,a) values (862,3);
+insert into t (id,a) values (862,4);
+insert into t (id,a) values (862,5);
+insert into t (id,a) values (862,6);
+insert into t (id,a) values (862,7);
+insert into t (id,a) values (862,8);
+insert into t (id,a) values (862,9);
+insert into t (id,a) values (862,10);
+insert into t (id,a) values (862,11);
+insert into t (id,a) values (862,12);
+insert into t (id,a) values (862,13);
+insert into t (id,a) values (862,14);
+insert into t (id,a) values (862,15);
+insert into t (id,a) values (862,16);
+insert into t (id,a) values (862,17);
+insert into t (id,a) values (862,18);
+insert into t (id,a) values (862,19);
+insert into t (id,a) values (862,20);
+insert into t (id,a) values (862,21);
+insert into t (id,a) values (862,22);
+insert into t (id,a) values (862,23);
+insert into t (id,a) values (862,24);
+insert into t (id,a) values (862,25);
+insert into t (id,a) values (862,26);
+insert into t (id,a) values (862,27);
+insert into t (id,a) values (862,28);
+insert into t (id,a) values (862,29);
+insert into t (id,a) values (862,30);
+insert into t (id,a) values (862,31);
+insert into t (id,a) values (862,32);
+insert into t (id,a) values (862,33);
+insert into t (id,a) values (862,34);
+insert into t (id,a) values (862,35);
+insert into t (id,a) values (862,36);
+insert into t (id,a) values (862,37);
+insert into t (id,a) values (862,38);
+insert into t (id,a) values (862,39);
+insert into t (id,a) values (862,40);
+insert into t (id,a) values (862,41);
+insert into t (id,a) values (862,42);
+insert into t (id,a) values (862,43);
+insert into t (id,a) values (862,44);
+insert into t (id,a) values (862,45);
+insert into t (id,a) values (862,46);
+insert into t (id,a) values (862,47);
+insert into t (id,a) values (862,48);
+insert into t (id,a) values (862,49);
+insert into t (id,a) values (862,50);
+insert into t (id,a) values (862,51);
+insert into t (id,a) values (862,52);
+insert into t (id,a) values (862,53);
+insert into t (id,a) values (862,54);
+insert into t (id,a) values (862,55);
+insert into t (id,a) values (862,56);
+insert into t (id,a) values (862,57);
+insert into t (id,a) values (862,58);
+insert into t (id,a) values (862,59);
+insert into t (id,a) values (862,60);
+insert into t (id,a) values (862,61);
+insert into t (id,a) values (862,62);
+insert into t (id,a) values (862,63);
+insert into t (id,a) values (862,64);
+insert into t (id,a) values (862,65);
+insert into t (id,a) values (862,66);
+insert into t (id,a) values (862,67);
+insert into t (id,a) values (862,68);
+insert into t (id,a) values (862,69);
+insert into t (id,a) values (862,70);
+insert into t (id,a) values (862,71);
+insert into t (id,a) values (862,72);
+insert into t (id,a) values (862,73);
+insert into t (id,a) values (862,74);
+insert into t (id,a) values (862,75);
+insert into t (id,a) values (862,76);
+insert into t (id,a) values (862,77);
+insert into t (id,a) values (862,78);
+insert into t (id,a) values (862,79);
+insert into t (id,a) values (862,80);
+insert into t (id,a) values (862,81);
+insert into t (id,a) values (862,82);
+insert into t (id,a) values (862,83);
+insert into t (id,a) values (862,84);
+insert into t (id,a) values (862,85);
+insert into t (id,a) values (862,86);
+insert into t (id,a) values (862,87);
+insert into t (id,a) values (862,88);
+insert into t (id,a) values (862,89);
+insert into t (id,a) values (862,90);
+insert into t (id,a) values (862,91);
+insert into t (id,a) values (862,92);
+insert into t (id,a) values (862,93);
+insert into t (id,a) values (862,94);
+insert into t (id,a) values (862,95);
+insert into t (id,a) values (862,96);
+insert into t (id,a) values (862,97);
+insert into t (id,a) values (862,98);
+insert into t (id,a) values (862,99);
+insert into t (id,a) values (863,0);
+insert into t (id,a) values (863,1);
+insert into t (id,a) values (863,2);
+insert into t (id,a) values (863,3);
+insert into t (id,a) values (863,4);
+insert into t (id,a) values (863,5);
+insert into t (id,a) values (863,6);
+insert into t (id,a) values (863,7);
+insert into t (id,a) values (863,8);
+insert into t (id,a) values (863,9);
+insert into t (id,a) values (863,10);
+insert into t (id,a) values (863,11);
+insert into t (id,a) values (863,12);
+insert into t (id,a) values (863,13);
+insert into t (id,a) values (863,14);
+insert into t (id,a) values (863,15);
+insert into t (id,a) values (863,16);
+insert into t (id,a) values (863,17);
+insert into t (id,a) values (863,18);
+insert into t (id,a) values (863,19);
+insert into t (id,a) values (863,20);
+insert into t (id,a) values (863,21);
+insert into t (id,a) values (863,22);
+insert into t (id,a) values (863,23);
+insert into t (id,a) values (863,24);
+insert into t (id,a) values (863,25);
+insert into t (id,a) values (863,26);
+insert into t (id,a) values (863,27);
+insert into t (id,a) values (863,28);
+insert into t (id,a) values (863,29);
+insert into t (id,a) values (863,30);
+insert into t (id,a) values (863,31);
+insert into t (id,a) values (863,32);
+insert into t (id,a) values (863,33);
+insert into t (id,a) values (863,34);
+insert into t (id,a) values (863,35);
+insert into t (id,a) values (863,36);
+insert into t (id,a) values (863,37);
+insert into t (id,a) values (863,38);
+insert into t (id,a) values (863,39);
+insert into t (id,a) values (863,40);
+insert into t (id,a) values (863,41);
+insert into t (id,a) values (863,42);
+insert into t (id,a) values (863,43);
+insert into t (id,a) values (863,44);
+insert into t (id,a) values (863,45);
+insert into t (id,a) values (863,46);
+insert into t (id,a) values (863,47);
+insert into t (id,a) values (863,48);
+insert into t (id,a) values (863,49);
+insert into t (id,a) values (863,50);
+insert into t (id,a) values (863,51);
+insert into t (id,a) values (863,52);
+insert into t (id,a) values (863,53);
+insert into t (id,a) values (863,54);
+insert into t (id,a) values (863,55);
+insert into t (id,a) values (863,56);
+insert into t (id,a) values (863,57);
+insert into t (id,a) values (863,58);
+insert into t (id,a) values (863,59);
+insert into t (id,a) values (863,60);
+insert into t (id,a) values (863,61);
+insert into t (id,a) values (863,62);
+insert into t (id,a) values (863,63);
+insert into t (id,a) values (863,64);
+insert into t (id,a) values (863,65);
+insert into t (id,a) values (863,66);
+insert into t (id,a) values (863,67);
+insert into t (id,a) values (863,68);
+insert into t (id,a) values (863,69);
+insert into t (id,a) values (863,70);
+insert into t (id,a) values (863,71);
+insert into t (id,a) values (863,72);
+insert into t (id,a) values (863,73);
+insert into t (id,a) values (863,74);
+insert into t (id,a) values (863,75);
+insert into t (id,a) values (863,76);
+insert into t (id,a) values (863,77);
+insert into t (id,a) values (863,78);
+insert into t (id,a) values (863,79);
+insert into t (id,a) values (863,80);
+insert into t (id,a) values (863,81);
+insert into t (id,a) values (863,82);
+insert into t (id,a) values (863,83);
+insert into t (id,a) values (863,84);
+insert into t (id,a) values (863,85);
+insert into t (id,a) values (863,86);
+insert into t (id,a) values (863,87);
+insert into t (id,a) values (863,88);
+insert into t (id,a) values (863,89);
+insert into t (id,a) values (863,90);
+insert into t (id,a) values (863,91);
+insert into t (id,a) values (863,92);
+insert into t (id,a) values (863,93);
+insert into t (id,a) values (863,94);
+insert into t (id,a) values (863,95);
+insert into t (id,a) values (863,96);
+insert into t (id,a) values (863,97);
+insert into t (id,a) values (863,98);
+insert into t (id,a) values (863,99);
+insert into t (id,a) values (864,0);
+insert into t (id,a) values (864,1);
+insert into t (id,a) values (864,2);
+insert into t (id,a) values (864,3);
+insert into t (id,a) values (864,4);
+insert into t (id,a) values (864,5);
+insert into t (id,a) values (864,6);
+insert into t (id,a) values (864,7);
+insert into t (id,a) values (864,8);
+insert into t (id,a) values (864,9);
+insert into t (id,a) values (864,10);
+insert into t (id,a) values (864,11);
+insert into t (id,a) values (864,12);
+insert into t (id,a) values (864,13);
+insert into t (id,a) values (864,14);
+insert into t (id,a) values (864,15);
+insert into t (id,a) values (864,16);
+insert into t (id,a) values (864,17);
+insert into t (id,a) values (864,18);
+insert into t (id,a) values (864,19);
+insert into t (id,a) values (864,20);
+insert into t (id,a) values (864,21);
+insert into t (id,a) values (864,22);
+insert into t (id,a) values (864,23);
+insert into t (id,a) values (864,24);
+insert into t (id,a) values (864,25);
+insert into t (id,a) values (864,26);
+insert into t (id,a) values (864,27);
+insert into t (id,a) values (864,28);
+insert into t (id,a) values (864,29);
+insert into t (id,a) values (864,30);
+insert into t (id,a) values (864,31);
+insert into t (id,a) values (864,32);
+insert into t (id,a) values (864,33);
+insert into t (id,a) values (864,34);
+insert into t (id,a) values (864,35);
+insert into t (id,a) values (864,36);
+insert into t (id,a) values (864,37);
+insert into t (id,a) values (864,38);
+insert into t (id,a) values (864,39);
+insert into t (id,a) values (864,40);
+insert into t (id,a) values (864,41);
+insert into t (id,a) values (864,42);
+insert into t (id,a) values (864,43);
+insert into t (id,a) values (864,44);
+insert into t (id,a) values (864,45);
+insert into t (id,a) values (864,46);
+insert into t (id,a) values (864,47);
+insert into t (id,a) values (864,48);
+insert into t (id,a) values (864,49);
+insert into t (id,a) values (864,50);
+insert into t (id,a) values (864,51);
+insert into t (id,a) values (864,52);
+insert into t (id,a) values (864,53);
+insert into t (id,a) values (864,54);
+insert into t (id,a) values (864,55);
+insert into t (id,a) values (864,56);
+insert into t (id,a) values (864,57);
+insert into t (id,a) values (864,58);
+insert into t (id,a) values (864,59);
+insert into t (id,a) values (864,60);
+insert into t (id,a) values (864,61);
+insert into t (id,a) values (864,62);
+insert into t (id,a) values (864,63);
+insert into t (id,a) values (864,64);
+insert into t (id,a) values (864,65);
+insert into t (id,a) values (864,66);
+insert into t (id,a) values (864,67);
+insert into t (id,a) values (864,68);
+insert into t (id,a) values (864,69);
+insert into t (id,a) values (864,70);
+insert into t (id,a) values (864,71);
+insert into t (id,a) values (864,72);
+insert into t (id,a) values (864,73);
+insert into t (id,a) values (864,74);
+insert into t (id,a) values (864,75);
+insert into t (id,a) values (864,76);
+insert into t (id,a) values (864,77);
+insert into t (id,a) values (864,78);
+insert into t (id,a) values (864,79);
+insert into t (id,a) values (864,80);
+insert into t (id,a) values (864,81);
+insert into t (id,a) values (864,82);
+insert into t (id,a) values (864,83);
+insert into t (id,a) values (864,84);
+insert into t (id,a) values (864,85);
+insert into t (id,a) values (864,86);
+insert into t (id,a) values (864,87);
+insert into t (id,a) values (864,88);
+insert into t (id,a) values (864,89);
+insert into t (id,a) values (864,90);
+insert into t (id,a) values (864,91);
+insert into t (id,a) values (864,92);
+insert into t (id,a) values (864,93);
+insert into t (id,a) values (864,94);
+insert into t (id,a) values (864,95);
+insert into t (id,a) values (864,96);
+insert into t (id,a) values (864,97);
+insert into t (id,a) values (864,98);
+insert into t (id,a) values (864,99);
+insert into t (id,a) values (865,0);
+insert into t (id,a) values (865,1);
+insert into t (id,a) values (865,2);
+insert into t (id,a) values (865,3);
+insert into t (id,a) values (865,4);
+insert into t (id,a) values (865,5);
+insert into t (id,a) values (865,6);
+insert into t (id,a) values (865,7);
+insert into t (id,a) values (865,8);
+insert into t (id,a) values (865,9);
+insert into t (id,a) values (865,10);
+insert into t (id,a) values (865,11);
+insert into t (id,a) values (865,12);
+insert into t (id,a) values (865,13);
+insert into t (id,a) values (865,14);
+insert into t (id,a) values (865,15);
+insert into t (id,a) values (865,16);
+insert into t (id,a) values (865,17);
+insert into t (id,a) values (865,18);
+insert into t (id,a) values (865,19);
+insert into t (id,a) values (865,20);
+insert into t (id,a) values (865,21);
+insert into t (id,a) values (865,22);
+insert into t (id,a) values (865,23);
+insert into t (id,a) values (865,24);
+insert into t (id,a) values (865,25);
+insert into t (id,a) values (865,26);
+insert into t (id,a) values (865,27);
+insert into t (id,a) values (865,28);
+insert into t (id,a) values (865,29);
+insert into t (id,a) values (865,30);
+insert into t (id,a) values (865,31);
+insert into t (id,a) values (865,32);
+insert into t (id,a) values (865,33);
+insert into t (id,a) values (865,34);
+insert into t (id,a) values (865,35);
+insert into t (id,a) values (865,36);
+insert into t (id,a) values (865,37);
+insert into t (id,a) values (865,38);
+insert into t (id,a) values (865,39);
+insert into t (id,a) values (865,40);
+insert into t (id,a) values (865,41);
+insert into t (id,a) values (865,42);
+insert into t (id,a) values (865,43);
+insert into t (id,a) values (865,44);
+insert into t (id,a) values (865,45);
+insert into t (id,a) values (865,46);
+insert into t (id,a) values (865,47);
+insert into t (id,a) values (865,48);
+insert into t (id,a) values (865,49);
+insert into t (id,a) values (865,50);
+insert into t (id,a) values (865,51);
+insert into t (id,a) values (865,52);
+insert into t (id,a) values (865,53);
+insert into t (id,a) values (865,54);
+insert into t (id,a) values (865,55);
+insert into t (id,a) values (865,56);
+insert into t (id,a) values (865,57);
+insert into t (id,a) values (865,58);
+insert into t (id,a) values (865,59);
+insert into t (id,a) values (865,60);
+insert into t (id,a) values (865,61);
+insert into t (id,a) values (865,62);
+insert into t (id,a) values (865,63);
+insert into t (id,a) values (865,64);
+insert into t (id,a) values (865,65);
+insert into t (id,a) values (865,66);
+insert into t (id,a) values (865,67);
+insert into t (id,a) values (865,68);
+insert into t (id,a) values (865,69);
+insert into t (id,a) values (865,70);
+insert into t (id,a) values (865,71);
+insert into t (id,a) values (865,72);
+insert into t (id,a) values (865,73);
+insert into t (id,a) values (865,74);
+insert into t (id,a) values (865,75);
+insert into t (id,a) values (865,76);
+insert into t (id,a) values (865,77);
+insert into t (id,a) values (865,78);
+insert into t (id,a) values (865,79);
+insert into t (id,a) values (865,80);
+insert into t (id,a) values (865,81);
+insert into t (id,a) values (865,82);
+insert into t (id,a) values (865,83);
+insert into t (id,a) values (865,84);
+insert into t (id,a) values (865,85);
+insert into t (id,a) values (865,86);
+insert into t (id,a) values (865,87);
+insert into t (id,a) values (865,88);
+insert into t (id,a) values (865,89);
+insert into t (id,a) values (865,90);
+insert into t (id,a) values (865,91);
+insert into t (id,a) values (865,92);
+insert into t (id,a) values (865,93);
+insert into t (id,a) values (865,94);
+insert into t (id,a) values (865,95);
+insert into t (id,a) values (865,96);
+insert into t (id,a) values (865,97);
+insert into t (id,a) values (865,98);
+insert into t (id,a) values (865,99);
+insert into t (id,a) values (866,0);
+insert into t (id,a) values (866,1);
+insert into t (id,a) values (866,2);
+insert into t (id,a) values (866,3);
+insert into t (id,a) values (866,4);
+insert into t (id,a) values (866,5);
+insert into t (id,a) values (866,6);
+insert into t (id,a) values (866,7);
+insert into t (id,a) values (866,8);
+insert into t (id,a) values (866,9);
+insert into t (id,a) values (866,10);
+insert into t (id,a) values (866,11);
+insert into t (id,a) values (866,12);
+insert into t (id,a) values (866,13);
+insert into t (id,a) values (866,14);
+insert into t (id,a) values (866,15);
+insert into t (id,a) values (866,16);
+insert into t (id,a) values (866,17);
+insert into t (id,a) values (866,18);
+insert into t (id,a) values (866,19);
+insert into t (id,a) values (866,20);
+insert into t (id,a) values (866,21);
+insert into t (id,a) values (866,22);
+insert into t (id,a) values (866,23);
+insert into t (id,a) values (866,24);
+insert into t (id,a) values (866,25);
+insert into t (id,a) values (866,26);
+insert into t (id,a) values (866,27);
+insert into t (id,a) values (866,28);
+insert into t (id,a) values (866,29);
+insert into t (id,a) values (866,30);
+insert into t (id,a) values (866,31);
+insert into t (id,a) values (866,32);
+insert into t (id,a) values (866,33);
+insert into t (id,a) values (866,34);
+insert into t (id,a) values (866,35);
+insert into t (id,a) values (866,36);
+insert into t (id,a) values (866,37);
+insert into t (id,a) values (866,38);
+insert into t (id,a) values (866,39);
+insert into t (id,a) values (866,40);
+insert into t (id,a) values (866,41);
+insert into t (id,a) values (866,42);
+insert into t (id,a) values (866,43);
+insert into t (id,a) values (866,44);
+insert into t (id,a) values (866,45);
+insert into t (id,a) values (866,46);
+insert into t (id,a) values (866,47);
+insert into t (id,a) values (866,48);
+insert into t (id,a) values (866,49);
+insert into t (id,a) values (866,50);
+insert into t (id,a) values (866,51);
+insert into t (id,a) values (866,52);
+insert into t (id,a) values (866,53);
+insert into t (id,a) values (866,54);
+insert into t (id,a) values (866,55);
+insert into t (id,a) values (866,56);
+insert into t (id,a) values (866,57);
+insert into t (id,a) values (866,58);
+insert into t (id,a) values (866,59);
+insert into t (id,a) values (866,60);
+insert into t (id,a) values (866,61);
+insert into t (id,a) values (866,62);
+insert into t (id,a) values (866,63);
+insert into t (id,a) values (866,64);
+insert into t (id,a) values (866,65);
+insert into t (id,a) values (866,66);
+insert into t (id,a) values (866,67);
+insert into t (id,a) values (866,68);
+insert into t (id,a) values (866,69);
+insert into t (id,a) values (866,70);
+insert into t (id,a) values (866,71);
+insert into t (id,a) values (866,72);
+insert into t (id,a) values (866,73);
+insert into t (id,a) values (866,74);
+insert into t (id,a) values (866,75);
+insert into t (id,a) values (866,76);
+insert into t (id,a) values (866,77);
+insert into t (id,a) values (866,78);
+insert into t (id,a) values (866,79);
+insert into t (id,a) values (866,80);
+insert into t (id,a) values (866,81);
+insert into t (id,a) values (866,82);
+insert into t (id,a) values (866,83);
+insert into t (id,a) values (866,84);
+insert into t (id,a) values (866,85);
+insert into t (id,a) values (866,86);
+insert into t (id,a) values (866,87);
+insert into t (id,a) values (866,88);
+insert into t (id,a) values (866,89);
+insert into t (id,a) values (866,90);
+insert into t (id,a) values (866,91);
+insert into t (id,a) values (866,92);
+insert into t (id,a) values (866,93);
+insert into t (id,a) values (866,94);
+insert into t (id,a) values (866,95);
+insert into t (id,a) values (866,96);
+insert into t (id,a) values (866,97);
+insert into t (id,a) values (866,98);
+insert into t (id,a) values (866,99);
+insert into t (id,a) values (867,0);
+insert into t (id,a) values (867,1);
+insert into t (id,a) values (867,2);
+insert into t (id,a) values (867,3);
+insert into t (id,a) values (867,4);
+insert into t (id,a) values (867,5);
+insert into t (id,a) values (867,6);
+insert into t (id,a) values (867,7);
+insert into t (id,a) values (867,8);
+insert into t (id,a) values (867,9);
+insert into t (id,a) values (867,10);
+insert into t (id,a) values (867,11);
+insert into t (id,a) values (867,12);
+insert into t (id,a) values (867,13);
+insert into t (id,a) values (867,14);
+insert into t (id,a) values (867,15);
+insert into t (id,a) values (867,16);
+insert into t (id,a) values (867,17);
+insert into t (id,a) values (867,18);
+insert into t (id,a) values (867,19);
+insert into t (id,a) values (867,20);
+insert into t (id,a) values (867,21);
+insert into t (id,a) values (867,22);
+insert into t (id,a) values (867,23);
+insert into t (id,a) values (867,24);
+insert into t (id,a) values (867,25);
+insert into t (id,a) values (867,26);
+insert into t (id,a) values (867,27);
+insert into t (id,a) values (867,28);
+insert into t (id,a) values (867,29);
+insert into t (id,a) values (867,30);
+insert into t (id,a) values (867,31);
+insert into t (id,a) values (867,32);
+insert into t (id,a) values (867,33);
+insert into t (id,a) values (867,34);
+insert into t (id,a) values (867,35);
+insert into t (id,a) values (867,36);
+insert into t (id,a) values (867,37);
+insert into t (id,a) values (867,38);
+insert into t (id,a) values (867,39);
+insert into t (id,a) values (867,40);
+insert into t (id,a) values (867,41);
+insert into t (id,a) values (867,42);
+insert into t (id,a) values (867,43);
+insert into t (id,a) values (867,44);
+insert into t (id,a) values (867,45);
+insert into t (id,a) values (867,46);
+insert into t (id,a) values (867,47);
+insert into t (id,a) values (867,48);
+insert into t (id,a) values (867,49);
+insert into t (id,a) values (867,50);
+insert into t (id,a) values (867,51);
+insert into t (id,a) values (867,52);
+insert into t (id,a) values (867,53);
+insert into t (id,a) values (867,54);
+insert into t (id,a) values (867,55);
+insert into t (id,a) values (867,56);
+insert into t (id,a) values (867,57);
+insert into t (id,a) values (867,58);
+insert into t (id,a) values (867,59);
+insert into t (id,a) values (867,60);
+insert into t (id,a) values (867,61);
+insert into t (id,a) values (867,62);
+insert into t (id,a) values (867,63);
+insert into t (id,a) values (867,64);
+insert into t (id,a) values (867,65);
+insert into t (id,a) values (867,66);
+insert into t (id,a) values (867,67);
+insert into t (id,a) values (867,68);
+insert into t (id,a) values (867,69);
+insert into t (id,a) values (867,70);
+insert into t (id,a) values (867,71);
+insert into t (id,a) values (867,72);
+insert into t (id,a) values (867,73);
+insert into t (id,a) values (867,74);
+insert into t (id,a) values (867,75);
+insert into t (id,a) values (867,76);
+insert into t (id,a) values (867,77);
+insert into t (id,a) values (867,78);
+insert into t (id,a) values (867,79);
+insert into t (id,a) values (867,80);
+insert into t (id,a) values (867,81);
+insert into t (id,a) values (867,82);
+insert into t (id,a) values (867,83);
+insert into t (id,a) values (867,84);
+insert into t (id,a) values (867,85);
+insert into t (id,a) values (867,86);
+insert into t (id,a) values (867,87);
+insert into t (id,a) values (867,88);
+insert into t (id,a) values (867,89);
+insert into t (id,a) values (867,90);
+insert into t (id,a) values (867,91);
+insert into t (id,a) values (867,92);
+insert into t (id,a) values (867,93);
+insert into t (id,a) values (867,94);
+insert into t (id,a) values (867,95);
+insert into t (id,a) values (867,96);
+insert into t (id,a) values (867,97);
+insert into t (id,a) values (867,98);
+insert into t (id,a) values (867,99);
+insert into t (id,a) values (868,0);
+insert into t (id,a) values (868,1);
+insert into t (id,a) values (868,2);
+insert into t (id,a) values (868,3);
+insert into t (id,a) values (868,4);
+insert into t (id,a) values (868,5);
+insert into t (id,a) values (868,6);
+insert into t (id,a) values (868,7);
+insert into t (id,a) values (868,8);
+insert into t (id,a) values (868,9);
+insert into t (id,a) values (868,10);
+insert into t (id,a) values (868,11);
+insert into t (id,a) values (868,12);
+insert into t (id,a) values (868,13);
+insert into t (id,a) values (868,14);
+insert into t (id,a) values (868,15);
+insert into t (id,a) values (868,16);
+insert into t (id,a) values (868,17);
+insert into t (id,a) values (868,18);
+insert into t (id,a) values (868,19);
+insert into t (id,a) values (868,20);
+insert into t (id,a) values (868,21);
+insert into t (id,a) values (868,22);
+insert into t (id,a) values (868,23);
+insert into t (id,a) values (868,24);
+insert into t (id,a) values (868,25);
+insert into t (id,a) values (868,26);
+insert into t (id,a) values (868,27);
+insert into t (id,a) values (868,28);
+insert into t (id,a) values (868,29);
+insert into t (id,a) values (868,30);
+insert into t (id,a) values (868,31);
+insert into t (id,a) values (868,32);
+insert into t (id,a) values (868,33);
+insert into t (id,a) values (868,34);
+insert into t (id,a) values (868,35);
+insert into t (id,a) values (868,36);
+insert into t (id,a) values (868,37);
+insert into t (id,a) values (868,38);
+insert into t (id,a) values (868,39);
+insert into t (id,a) values (868,40);
+insert into t (id,a) values (868,41);
+insert into t (id,a) values (868,42);
+insert into t (id,a) values (868,43);
+insert into t (id,a) values (868,44);
+insert into t (id,a) values (868,45);
+insert into t (id,a) values (868,46);
+insert into t (id,a) values (868,47);
+insert into t (id,a) values (868,48);
+insert into t (id,a) values (868,49);
+insert into t (id,a) values (868,50);
+insert into t (id,a) values (868,51);
+insert into t (id,a) values (868,52);
+insert into t (id,a) values (868,53);
+insert into t (id,a) values (868,54);
+insert into t (id,a) values (868,55);
+insert into t (id,a) values (868,56);
+insert into t (id,a) values (868,57);
+insert into t (id,a) values (868,58);
+insert into t (id,a) values (868,59);
+insert into t (id,a) values (868,60);
+insert into t (id,a) values (868,61);
+insert into t (id,a) values (868,62);
+insert into t (id,a) values (868,63);
+insert into t (id,a) values (868,64);
+insert into t (id,a) values (868,65);
+insert into t (id,a) values (868,66);
+insert into t (id,a) values (868,67);
+insert into t (id,a) values (868,68);
+insert into t (id,a) values (868,69);
+insert into t (id,a) values (868,70);
+insert into t (id,a) values (868,71);
+insert into t (id,a) values (868,72);
+insert into t (id,a) values (868,73);
+insert into t (id,a) values (868,74);
+insert into t (id,a) values (868,75);
+insert into t (id,a) values (868,76);
+insert into t (id,a) values (868,77);
+insert into t (id,a) values (868,78);
+insert into t (id,a) values (868,79);
+insert into t (id,a) values (868,80);
+insert into t (id,a) values (868,81);
+insert into t (id,a) values (868,82);
+insert into t (id,a) values (868,83);
+insert into t (id,a) values (868,84);
+insert into t (id,a) values (868,85);
+insert into t (id,a) values (868,86);
+insert into t (id,a) values (868,87);
+insert into t (id,a) values (868,88);
+insert into t (id,a) values (868,89);
+insert into t (id,a) values (868,90);
+insert into t (id,a) values (868,91);
+insert into t (id,a) values (868,92);
+insert into t (id,a) values (868,93);
+insert into t (id,a) values (868,94);
+insert into t (id,a) values (868,95);
+insert into t (id,a) values (868,96);
+insert into t (id,a) values (868,97);
+insert into t (id,a) values (868,98);
+insert into t (id,a) values (868,99);
+insert into t (id,a) values (869,0);
+insert into t (id,a) values (869,1);
+insert into t (id,a) values (869,2);
+insert into t (id,a) values (869,3);
+insert into t (id,a) values (869,4);
+insert into t (id,a) values (869,5);
+insert into t (id,a) values (869,6);
+insert into t (id,a) values (869,7);
+insert into t (id,a) values (869,8);
+insert into t (id,a) values (869,9);
+insert into t (id,a) values (869,10);
+insert into t (id,a) values (869,11);
+insert into t (id,a) values (869,12);
+insert into t (id,a) values (869,13);
+insert into t (id,a) values (869,14);
+insert into t (id,a) values (869,15);
+insert into t (id,a) values (869,16);
+insert into t (id,a) values (869,17);
+insert into t (id,a) values (869,18);
+insert into t (id,a) values (869,19);
+insert into t (id,a) values (869,20);
+insert into t (id,a) values (869,21);
+insert into t (id,a) values (869,22);
+insert into t (id,a) values (869,23);
+insert into t (id,a) values (869,24);
+insert into t (id,a) values (869,25);
+insert into t (id,a) values (869,26);
+insert into t (id,a) values (869,27);
+insert into t (id,a) values (869,28);
+insert into t (id,a) values (869,29);
+insert into t (id,a) values (869,30);
+insert into t (id,a) values (869,31);
+insert into t (id,a) values (869,32);
+insert into t (id,a) values (869,33);
+insert into t (id,a) values (869,34);
+insert into t (id,a) values (869,35);
+insert into t (id,a) values (869,36);
+insert into t (id,a) values (869,37);
+insert into t (id,a) values (869,38);
+insert into t (id,a) values (869,39);
+insert into t (id,a) values (869,40);
+insert into t (id,a) values (869,41);
+insert into t (id,a) values (869,42);
+insert into t (id,a) values (869,43);
+insert into t (id,a) values (869,44);
+insert into t (id,a) values (869,45);
+insert into t (id,a) values (869,46);
+insert into t (id,a) values (869,47);
+insert into t (id,a) values (869,48);
+insert into t (id,a) values (869,49);
+insert into t (id,a) values (869,50);
+insert into t (id,a) values (869,51);
+insert into t (id,a) values (869,52);
+insert into t (id,a) values (869,53);
+insert into t (id,a) values (869,54);
+insert into t (id,a) values (869,55);
+insert into t (id,a) values (869,56);
+insert into t (id,a) values (869,57);
+insert into t (id,a) values (869,58);
+insert into t (id,a) values (869,59);
+insert into t (id,a) values (869,60);
+insert into t (id,a) values (869,61);
+insert into t (id,a) values (869,62);
+insert into t (id,a) values (869,63);
+insert into t (id,a) values (869,64);
+insert into t (id,a) values (869,65);
+insert into t (id,a) values (869,66);
+insert into t (id,a) values (869,67);
+insert into t (id,a) values (869,68);
+insert into t (id,a) values (869,69);
+insert into t (id,a) values (869,70);
+insert into t (id,a) values (869,71);
+insert into t (id,a) values (869,72);
+insert into t (id,a) values (869,73);
+insert into t (id,a) values (869,74);
+insert into t (id,a) values (869,75);
+insert into t (id,a) values (869,76);
+insert into t (id,a) values (869,77);
+insert into t (id,a) values (869,78);
+insert into t (id,a) values (869,79);
+insert into t (id,a) values (869,80);
+insert into t (id,a) values (869,81);
+insert into t (id,a) values (869,82);
+insert into t (id,a) values (869,83);
+insert into t (id,a) values (869,84);
+insert into t (id,a) values (869,85);
+insert into t (id,a) values (869,86);
+insert into t (id,a) values (869,87);
+insert into t (id,a) values (869,88);
+insert into t (id,a) values (869,89);
+insert into t (id,a) values (869,90);
+insert into t (id,a) values (869,91);
+insert into t (id,a) values (869,92);
+insert into t (id,a) values (869,93);
+insert into t (id,a) values (869,94);
+insert into t (id,a) values (869,95);
+insert into t (id,a) values (869,96);
+insert into t (id,a) values (869,97);
+insert into t (id,a) values (869,98);
+insert into t (id,a) values (869,99);
+insert into t (id,a) values (870,0);
+insert into t (id,a) values (870,1);
+insert into t (id,a) values (870,2);
+insert into t (id,a) values (870,3);
+insert into t (id,a) values (870,4);
+insert into t (id,a) values (870,5);
+insert into t (id,a) values (870,6);
+insert into t (id,a) values (870,7);
+insert into t (id,a) values (870,8);
+insert into t (id,a) values (870,9);
+insert into t (id,a) values (870,10);
+insert into t (id,a) values (870,11);
+insert into t (id,a) values (870,12);
+insert into t (id,a) values (870,13);
+insert into t (id,a) values (870,14);
+insert into t (id,a) values (870,15);
+insert into t (id,a) values (870,16);
+insert into t (id,a) values (870,17);
+insert into t (id,a) values (870,18);
+insert into t (id,a) values (870,19);
+insert into t (id,a) values (870,20);
+insert into t (id,a) values (870,21);
+insert into t (id,a) values (870,22);
+insert into t (id,a) values (870,23);
+insert into t (id,a) values (870,24);
+insert into t (id,a) values (870,25);
+insert into t (id,a) values (870,26);
+insert into t (id,a) values (870,27);
+insert into t (id,a) values (870,28);
+insert into t (id,a) values (870,29);
+insert into t (id,a) values (870,30);
+insert into t (id,a) values (870,31);
+insert into t (id,a) values (870,32);
+insert into t (id,a) values (870,33);
+insert into t (id,a) values (870,34);
+insert into t (id,a) values (870,35);
+insert into t (id,a) values (870,36);
+insert into t (id,a) values (870,37);
+insert into t (id,a) values (870,38);
+insert into t (id,a) values (870,39);
+insert into t (id,a) values (870,40);
+insert into t (id,a) values (870,41);
+insert into t (id,a) values (870,42);
+insert into t (id,a) values (870,43);
+insert into t (id,a) values (870,44);
+insert into t (id,a) values (870,45);
+insert into t (id,a) values (870,46);
+insert into t (id,a) values (870,47);
+insert into t (id,a) values (870,48);
+insert into t (id,a) values (870,49);
+insert into t (id,a) values (870,50);
+insert into t (id,a) values (870,51);
+insert into t (id,a) values (870,52);
+insert into t (id,a) values (870,53);
+insert into t (id,a) values (870,54);
+insert into t (id,a) values (870,55);
+insert into t (id,a) values (870,56);
+insert into t (id,a) values (870,57);
+insert into t (id,a) values (870,58);
+insert into t (id,a) values (870,59);
+insert into t (id,a) values (870,60);
+insert into t (id,a) values (870,61);
+insert into t (id,a) values (870,62);
+insert into t (id,a) values (870,63);
+insert into t (id,a) values (870,64);
+insert into t (id,a) values (870,65);
+insert into t (id,a) values (870,66);
+insert into t (id,a) values (870,67);
+insert into t (id,a) values (870,68);
+insert into t (id,a) values (870,69);
+insert into t (id,a) values (870,70);
+insert into t (id,a) values (870,71);
+insert into t (id,a) values (870,72);
+insert into t (id,a) values (870,73);
+insert into t (id,a) values (870,74);
+insert into t (id,a) values (870,75);
+insert into t (id,a) values (870,76);
+insert into t (id,a) values (870,77);
+insert into t (id,a) values (870,78);
+insert into t (id,a) values (870,79);
+insert into t (id,a) values (870,80);
+insert into t (id,a) values (870,81);
+insert into t (id,a) values (870,82);
+insert into t (id,a) values (870,83);
+insert into t (id,a) values (870,84);
+insert into t (id,a) values (870,85);
+insert into t (id,a) values (870,86);
+insert into t (id,a) values (870,87);
+insert into t (id,a) values (870,88);
+insert into t (id,a) values (870,89);
+insert into t (id,a) values (870,90);
+insert into t (id,a) values (870,91);
+insert into t (id,a) values (870,92);
+insert into t (id,a) values (870,93);
+insert into t (id,a) values (870,94);
+insert into t (id,a) values (870,95);
+insert into t (id,a) values (870,96);
+insert into t (id,a) values (870,97);
+insert into t (id,a) values (870,98);
+insert into t (id,a) values (870,99);
+insert into t (id,a) values (871,0);
+insert into t (id,a) values (871,1);
+insert into t (id,a) values (871,2);
+insert into t (id,a) values (871,3);
+insert into t (id,a) values (871,4);
+insert into t (id,a) values (871,5);
+insert into t (id,a) values (871,6);
+insert into t (id,a) values (871,7);
+insert into t (id,a) values (871,8);
+insert into t (id,a) values (871,9);
+insert into t (id,a) values (871,10);
+insert into t (id,a) values (871,11);
+insert into t (id,a) values (871,12);
+insert into t (id,a) values (871,13);
+insert into t (id,a) values (871,14);
+insert into t (id,a) values (871,15);
+insert into t (id,a) values (871,16);
+insert into t (id,a) values (871,17);
+insert into t (id,a) values (871,18);
+insert into t (id,a) values (871,19);
+insert into t (id,a) values (871,20);
+insert into t (id,a) values (871,21);
+insert into t (id,a) values (871,22);
+insert into t (id,a) values (871,23);
+insert into t (id,a) values (871,24);
+insert into t (id,a) values (871,25);
+insert into t (id,a) values (871,26);
+insert into t (id,a) values (871,27);
+insert into t (id,a) values (871,28);
+insert into t (id,a) values (871,29);
+insert into t (id,a) values (871,30);
+insert into t (id,a) values (871,31);
+insert into t (id,a) values (871,32);
+insert into t (id,a) values (871,33);
+insert into t (id,a) values (871,34);
+insert into t (id,a) values (871,35);
+insert into t (id,a) values (871,36);
+insert into t (id,a) values (871,37);
+insert into t (id,a) values (871,38);
+insert into t (id,a) values (871,39);
+insert into t (id,a) values (871,40);
+insert into t (id,a) values (871,41);
+insert into t (id,a) values (871,42);
+insert into t (id,a) values (871,43);
+insert into t (id,a) values (871,44);
+insert into t (id,a) values (871,45);
+insert into t (id,a) values (871,46);
+insert into t (id,a) values (871,47);
+insert into t (id,a) values (871,48);
+insert into t (id,a) values (871,49);
+insert into t (id,a) values (871,50);
+insert into t (id,a) values (871,51);
+insert into t (id,a) values (871,52);
+insert into t (id,a) values (871,53);
+insert into t (id,a) values (871,54);
+insert into t (id,a) values (871,55);
+insert into t (id,a) values (871,56);
+insert into t (id,a) values (871,57);
+insert into t (id,a) values (871,58);
+insert into t (id,a) values (871,59);
+insert into t (id,a) values (871,60);
+insert into t (id,a) values (871,61);
+insert into t (id,a) values (871,62);
+insert into t (id,a) values (871,63);
+insert into t (id,a) values (871,64);
+insert into t (id,a) values (871,65);
+insert into t (id,a) values (871,66);
+insert into t (id,a) values (871,67);
+insert into t (id,a) values (871,68);
+insert into t (id,a) values (871,69);
+insert into t (id,a) values (871,70);
+insert into t (id,a) values (871,71);
+insert into t (id,a) values (871,72);
+insert into t (id,a) values (871,73);
+insert into t (id,a) values (871,74);
+insert into t (id,a) values (871,75);
+insert into t (id,a) values (871,76);
+insert into t (id,a) values (871,77);
+insert into t (id,a) values (871,78);
+insert into t (id,a) values (871,79);
+insert into t (id,a) values (871,80);
+insert into t (id,a) values (871,81);
+insert into t (id,a) values (871,82);
+insert into t (id,a) values (871,83);
+insert into t (id,a) values (871,84);
+insert into t (id,a) values (871,85);
+insert into t (id,a) values (871,86);
+insert into t (id,a) values (871,87);
+insert into t (id,a) values (871,88);
+insert into t (id,a) values (871,89);
+insert into t (id,a) values (871,90);
+insert into t (id,a) values (871,91);
+insert into t (id,a) values (871,92);
+insert into t (id,a) values (871,93);
+insert into t (id,a) values (871,94);
+insert into t (id,a) values (871,95);
+insert into t (id,a) values (871,96);
+insert into t (id,a) values (871,97);
+insert into t (id,a) values (871,98);
+insert into t (id,a) values (871,99);
+insert into t (id,a) values (872,0);
+insert into t (id,a) values (872,1);
+insert into t (id,a) values (872,2);
+insert into t (id,a) values (872,3);
+insert into t (id,a) values (872,4);
+insert into t (id,a) values (872,5);
+insert into t (id,a) values (872,6);
+insert into t (id,a) values (872,7);
+insert into t (id,a) values (872,8);
+insert into t (id,a) values (872,9);
+insert into t (id,a) values (872,10);
+insert into t (id,a) values (872,11);
+insert into t (id,a) values (872,12);
+insert into t (id,a) values (872,13);
+insert into t (id,a) values (872,14);
+insert into t (id,a) values (872,15);
+insert into t (id,a) values (872,16);
+insert into t (id,a) values (872,17);
+insert into t (id,a) values (872,18);
+insert into t (id,a) values (872,19);
+insert into t (id,a) values (872,20);
+insert into t (id,a) values (872,21);
+insert into t (id,a) values (872,22);
+insert into t (id,a) values (872,23);
+insert into t (id,a) values (872,24);
+insert into t (id,a) values (872,25);
+insert into t (id,a) values (872,26);
+insert into t (id,a) values (872,27);
+insert into t (id,a) values (872,28);
+insert into t (id,a) values (872,29);
+insert into t (id,a) values (872,30);
+insert into t (id,a) values (872,31);
+insert into t (id,a) values (872,32);
+insert into t (id,a) values (872,33);
+insert into t (id,a) values (872,34);
+insert into t (id,a) values (872,35);
+insert into t (id,a) values (872,36);
+insert into t (id,a) values (872,37);
+insert into t (id,a) values (872,38);
+insert into t (id,a) values (872,39);
+insert into t (id,a) values (872,40);
+insert into t (id,a) values (872,41);
+insert into t (id,a) values (872,42);
+insert into t (id,a) values (872,43);
+insert into t (id,a) values (872,44);
+insert into t (id,a) values (872,45);
+insert into t (id,a) values (872,46);
+insert into t (id,a) values (872,47);
+insert into t (id,a) values (872,48);
+insert into t (id,a) values (872,49);
+insert into t (id,a) values (872,50);
+insert into t (id,a) values (872,51);
+insert into t (id,a) values (872,52);
+insert into t (id,a) values (872,53);
+insert into t (id,a) values (872,54);
+insert into t (id,a) values (872,55);
+insert into t (id,a) values (872,56);
+insert into t (id,a) values (872,57);
+insert into t (id,a) values (872,58);
+insert into t (id,a) values (872,59);
+insert into t (id,a) values (872,60);
+insert into t (id,a) values (872,61);
+insert into t (id,a) values (872,62);
+insert into t (id,a) values (872,63);
+insert into t (id,a) values (872,64);
+insert into t (id,a) values (872,65);
+insert into t (id,a) values (872,66);
+insert into t (id,a) values (872,67);
+insert into t (id,a) values (872,68);
+insert into t (id,a) values (872,69);
+insert into t (id,a) values (872,70);
+insert into t (id,a) values (872,71);
+insert into t (id,a) values (872,72);
+insert into t (id,a) values (872,73);
+insert into t (id,a) values (872,74);
+insert into t (id,a) values (872,75);
+insert into t (id,a) values (872,76);
+insert into t (id,a) values (872,77);
+insert into t (id,a) values (872,78);
+insert into t (id,a) values (872,79);
+insert into t (id,a) values (872,80);
+insert into t (id,a) values (872,81);
+insert into t (id,a) values (872,82);
+insert into t (id,a) values (872,83);
+insert into t (id,a) values (872,84);
+insert into t (id,a) values (872,85);
+insert into t (id,a) values (872,86);
+insert into t (id,a) values (872,87);
+insert into t (id,a) values (872,88);
+insert into t (id,a) values (872,89);
+insert into t (id,a) values (872,90);
+insert into t (id,a) values (872,91);
+insert into t (id,a) values (872,92);
+insert into t (id,a) values (872,93);
+insert into t (id,a) values (872,94);
+insert into t (id,a) values (872,95);
+insert into t (id,a) values (872,96);
+insert into t (id,a) values (872,97);
+insert into t (id,a) values (872,98);
+insert into t (id,a) values (872,99);
+insert into t (id,a) values (873,0);
+insert into t (id,a) values (873,1);
+insert into t (id,a) values (873,2);
+insert into t (id,a) values (873,3);
+insert into t (id,a) values (873,4);
+insert into t (id,a) values (873,5);
+insert into t (id,a) values (873,6);
+insert into t (id,a) values (873,7);
+insert into t (id,a) values (873,8);
+insert into t (id,a) values (873,9);
+insert into t (id,a) values (873,10);
+insert into t (id,a) values (873,11);
+insert into t (id,a) values (873,12);
+insert into t (id,a) values (873,13);
+insert into t (id,a) values (873,14);
+insert into t (id,a) values (873,15);
+insert into t (id,a) values (873,16);
+insert into t (id,a) values (873,17);
+insert into t (id,a) values (873,18);
+insert into t (id,a) values (873,19);
+insert into t (id,a) values (873,20);
+insert into t (id,a) values (873,21);
+insert into t (id,a) values (873,22);
+insert into t (id,a) values (873,23);
+insert into t (id,a) values (873,24);
+insert into t (id,a) values (873,25);
+insert into t (id,a) values (873,26);
+insert into t (id,a) values (873,27);
+insert into t (id,a) values (873,28);
+insert into t (id,a) values (873,29);
+insert into t (id,a) values (873,30);
+insert into t (id,a) values (873,31);
+insert into t (id,a) values (873,32);
+insert into t (id,a) values (873,33);
+insert into t (id,a) values (873,34);
+insert into t (id,a) values (873,35);
+insert into t (id,a) values (873,36);
+insert into t (id,a) values (873,37);
+insert into t (id,a) values (873,38);
+insert into t (id,a) values (873,39);
+insert into t (id,a) values (873,40);
+insert into t (id,a) values (873,41);
+insert into t (id,a) values (873,42);
+insert into t (id,a) values (873,43);
+insert into t (id,a) values (873,44);
+insert into t (id,a) values (873,45);
+insert into t (id,a) values (873,46);
+insert into t (id,a) values (873,47);
+insert into t (id,a) values (873,48);
+insert into t (id,a) values (873,49);
+insert into t (id,a) values (873,50);
+insert into t (id,a) values (873,51);
+insert into t (id,a) values (873,52);
+insert into t (id,a) values (873,53);
+insert into t (id,a) values (873,54);
+insert into t (id,a) values (873,55);
+insert into t (id,a) values (873,56);
+insert into t (id,a) values (873,57);
+insert into t (id,a) values (873,58);
+insert into t (id,a) values (873,59);
+insert into t (id,a) values (873,60);
+insert into t (id,a) values (873,61);
+insert into t (id,a) values (873,62);
+insert into t (id,a) values (873,63);
+insert into t (id,a) values (873,64);
+insert into t (id,a) values (873,65);
+insert into t (id,a) values (873,66);
+insert into t (id,a) values (873,67);
+insert into t (id,a) values (873,68);
+insert into t (id,a) values (873,69);
+insert into t (id,a) values (873,70);
+insert into t (id,a) values (873,71);
+insert into t (id,a) values (873,72);
+insert into t (id,a) values (873,73);
+insert into t (id,a) values (873,74);
+insert into t (id,a) values (873,75);
+insert into t (id,a) values (873,76);
+insert into t (id,a) values (873,77);
+insert into t (id,a) values (873,78);
+insert into t (id,a) values (873,79);
+insert into t (id,a) values (873,80);
+insert into t (id,a) values (873,81);
+insert into t (id,a) values (873,82);
+insert into t (id,a) values (873,83);
+insert into t (id,a) values (873,84);
+insert into t (id,a) values (873,85);
+insert into t (id,a) values (873,86);
+insert into t (id,a) values (873,87);
+insert into t (id,a) values (873,88);
+insert into t (id,a) values (873,89);
+insert into t (id,a) values (873,90);
+insert into t (id,a) values (873,91);
+insert into t (id,a) values (873,92);
+insert into t (id,a) values (873,93);
+insert into t (id,a) values (873,94);
+insert into t (id,a) values (873,95);
+insert into t (id,a) values (873,96);
+insert into t (id,a) values (873,97);
+insert into t (id,a) values (873,98);
+insert into t (id,a) values (873,99);
+insert into t (id,a) values (874,0);
+insert into t (id,a) values (874,1);
+insert into t (id,a) values (874,2);
+insert into t (id,a) values (874,3);
+insert into t (id,a) values (874,4);
+insert into t (id,a) values (874,5);
+insert into t (id,a) values (874,6);
+insert into t (id,a) values (874,7);
+insert into t (id,a) values (874,8);
+insert into t (id,a) values (874,9);
+insert into t (id,a) values (874,10);
+insert into t (id,a) values (874,11);
+insert into t (id,a) values (874,12);
+insert into t (id,a) values (874,13);
+insert into t (id,a) values (874,14);
+insert into t (id,a) values (874,15);
+insert into t (id,a) values (874,16);
+insert into t (id,a) values (874,17);
+insert into t (id,a) values (874,18);
+insert into t (id,a) values (874,19);
+insert into t (id,a) values (874,20);
+insert into t (id,a) values (874,21);
+insert into t (id,a) values (874,22);
+insert into t (id,a) values (874,23);
+insert into t (id,a) values (874,24);
+insert into t (id,a) values (874,25);
+insert into t (id,a) values (874,26);
+insert into t (id,a) values (874,27);
+insert into t (id,a) values (874,28);
+insert into t (id,a) values (874,29);
+insert into t (id,a) values (874,30);
+insert into t (id,a) values (874,31);
+insert into t (id,a) values (874,32);
+insert into t (id,a) values (874,33);
+insert into t (id,a) values (874,34);
+insert into t (id,a) values (874,35);
+insert into t (id,a) values (874,36);
+insert into t (id,a) values (874,37);
+insert into t (id,a) values (874,38);
+insert into t (id,a) values (874,39);
+insert into t (id,a) values (874,40);
+insert into t (id,a) values (874,41);
+insert into t (id,a) values (874,42);
+insert into t (id,a) values (874,43);
+insert into t (id,a) values (874,44);
+insert into t (id,a) values (874,45);
+insert into t (id,a) values (874,46);
+insert into t (id,a) values (874,47);
+insert into t (id,a) values (874,48);
+insert into t (id,a) values (874,49);
+insert into t (id,a) values (874,50);
+insert into t (id,a) values (874,51);
+insert into t (id,a) values (874,52);
+insert into t (id,a) values (874,53);
+insert into t (id,a) values (874,54);
+insert into t (id,a) values (874,55);
+insert into t (id,a) values (874,56);
+insert into t (id,a) values (874,57);
+insert into t (id,a) values (874,58);
+insert into t (id,a) values (874,59);
+insert into t (id,a) values (874,60);
+insert into t (id,a) values (874,61);
+insert into t (id,a) values (874,62);
+insert into t (id,a) values (874,63);
+insert into t (id,a) values (874,64);
+insert into t (id,a) values (874,65);
+insert into t (id,a) values (874,66);
+insert into t (id,a) values (874,67);
+insert into t (id,a) values (874,68);
+insert into t (id,a) values (874,69);
+insert into t (id,a) values (874,70);
+insert into t (id,a) values (874,71);
+insert into t (id,a) values (874,72);
+insert into t (id,a) values (874,73);
+insert into t (id,a) values (874,74);
+insert into t (id,a) values (874,75);
+insert into t (id,a) values (874,76);
+insert into t (id,a) values (874,77);
+insert into t (id,a) values (874,78);
+insert into t (id,a) values (874,79);
+insert into t (id,a) values (874,80);
+insert into t (id,a) values (874,81);
+insert into t (id,a) values (874,82);
+insert into t (id,a) values (874,83);
+insert into t (id,a) values (874,84);
+insert into t (id,a) values (874,85);
+insert into t (id,a) values (874,86);
+insert into t (id,a) values (874,87);
+insert into t (id,a) values (874,88);
+insert into t (id,a) values (874,89);
+insert into t (id,a) values (874,90);
+insert into t (id,a) values (874,91);
+insert into t (id,a) values (874,92);
+insert into t (id,a) values (874,93);
+insert into t (id,a) values (874,94);
+insert into t (id,a) values (874,95);
+insert into t (id,a) values (874,96);
+insert into t (id,a) values (874,97);
+insert into t (id,a) values (874,98);
+insert into t (id,a) values (874,99);
+insert into t (id,a) values (875,0);
+insert into t (id,a) values (875,1);
+insert into t (id,a) values (875,2);
+insert into t (id,a) values (875,3);
+insert into t (id,a) values (875,4);
+insert into t (id,a) values (875,5);
+insert into t (id,a) values (875,6);
+insert into t (id,a) values (875,7);
+insert into t (id,a) values (875,8);
+insert into t (id,a) values (875,9);
+insert into t (id,a) values (875,10);
+insert into t (id,a) values (875,11);
+insert into t (id,a) values (875,12);
+insert into t (id,a) values (875,13);
+insert into t (id,a) values (875,14);
+insert into t (id,a) values (875,15);
+insert into t (id,a) values (875,16);
+insert into t (id,a) values (875,17);
+insert into t (id,a) values (875,18);
+insert into t (id,a) values (875,19);
+insert into t (id,a) values (875,20);
+insert into t (id,a) values (875,21);
+insert into t (id,a) values (875,22);
+insert into t (id,a) values (875,23);
+insert into t (id,a) values (875,24);
+insert into t (id,a) values (875,25);
+insert into t (id,a) values (875,26);
+insert into t (id,a) values (875,27);
+insert into t (id,a) values (875,28);
+insert into t (id,a) values (875,29);
+insert into t (id,a) values (875,30);
+insert into t (id,a) values (875,31);
+insert into t (id,a) values (875,32);
+insert into t (id,a) values (875,33);
+insert into t (id,a) values (875,34);
+insert into t (id,a) values (875,35);
+insert into t (id,a) values (875,36);
+insert into t (id,a) values (875,37);
+insert into t (id,a) values (875,38);
+insert into t (id,a) values (875,39);
+insert into t (id,a) values (875,40);
+insert into t (id,a) values (875,41);
+insert into t (id,a) values (875,42);
+insert into t (id,a) values (875,43);
+insert into t (id,a) values (875,44);
+insert into t (id,a) values (875,45);
+insert into t (id,a) values (875,46);
+insert into t (id,a) values (875,47);
+insert into t (id,a) values (875,48);
+insert into t (id,a) values (875,49);
+insert into t (id,a) values (875,50);
+insert into t (id,a) values (875,51);
+insert into t (id,a) values (875,52);
+insert into t (id,a) values (875,53);
+insert into t (id,a) values (875,54);
+insert into t (id,a) values (875,55);
+insert into t (id,a) values (875,56);
+insert into t (id,a) values (875,57);
+insert into t (id,a) values (875,58);
+insert into t (id,a) values (875,59);
+insert into t (id,a) values (875,60);
+insert into t (id,a) values (875,61);
+insert into t (id,a) values (875,62);
+insert into t (id,a) values (875,63);
+insert into t (id,a) values (875,64);
+insert into t (id,a) values (875,65);
+insert into t (id,a) values (875,66);
+insert into t (id,a) values (875,67);
+insert into t (id,a) values (875,68);
+insert into t (id,a) values (875,69);
+insert into t (id,a) values (875,70);
+insert into t (id,a) values (875,71);
+insert into t (id,a) values (875,72);
+insert into t (id,a) values (875,73);
+insert into t (id,a) values (875,74);
+insert into t (id,a) values (875,75);
+insert into t (id,a) values (875,76);
+insert into t (id,a) values (875,77);
+insert into t (id,a) values (875,78);
+insert into t (id,a) values (875,79);
+insert into t (id,a) values (875,80);
+insert into t (id,a) values (875,81);
+insert into t (id,a) values (875,82);
+insert into t (id,a) values (875,83);
+insert into t (id,a) values (875,84);
+insert into t (id,a) values (875,85);
+insert into t (id,a) values (875,86);
+insert into t (id,a) values (875,87);
+insert into t (id,a) values (875,88);
+insert into t (id,a) values (875,89);
+insert into t (id,a) values (875,90);
+insert into t (id,a) values (875,91);
+insert into t (id,a) values (875,92);
+insert into t (id,a) values (875,93);
+insert into t (id,a) values (875,94);
+insert into t (id,a) values (875,95);
+insert into t (id,a) values (875,96);
+insert into t (id,a) values (875,97);
+insert into t (id,a) values (875,98);
+insert into t (id,a) values (875,99);
+insert into t (id,a) values (876,0);
+insert into t (id,a) values (876,1);
+insert into t (id,a) values (876,2);
+insert into t (id,a) values (876,3);
+insert into t (id,a) values (876,4);
+insert into t (id,a) values (876,5);
+insert into t (id,a) values (876,6);
+insert into t (id,a) values (876,7);
+insert into t (id,a) values (876,8);
+insert into t (id,a) values (876,9);
+insert into t (id,a) values (876,10);
+insert into t (id,a) values (876,11);
+insert into t (id,a) values (876,12);
+insert into t (id,a) values (876,13);
+insert into t (id,a) values (876,14);
+insert into t (id,a) values (876,15);
+insert into t (id,a) values (876,16);
+insert into t (id,a) values (876,17);
+insert into t (id,a) values (876,18);
+insert into t (id,a) values (876,19);
+insert into t (id,a) values (876,20);
+insert into t (id,a) values (876,21);
+insert into t (id,a) values (876,22);
+insert into t (id,a) values (876,23);
+insert into t (id,a) values (876,24);
+insert into t (id,a) values (876,25);
+insert into t (id,a) values (876,26);
+insert into t (id,a) values (876,27);
+insert into t (id,a) values (876,28);
+insert into t (id,a) values (876,29);
+insert into t (id,a) values (876,30);
+insert into t (id,a) values (876,31);
+insert into t (id,a) values (876,32);
+insert into t (id,a) values (876,33);
+insert into t (id,a) values (876,34);
+insert into t (id,a) values (876,35);
+insert into t (id,a) values (876,36);
+insert into t (id,a) values (876,37);
+insert into t (id,a) values (876,38);
+insert into t (id,a) values (876,39);
+insert into t (id,a) values (876,40);
+insert into t (id,a) values (876,41);
+insert into t (id,a) values (876,42);
+insert into t (id,a) values (876,43);
+insert into t (id,a) values (876,44);
+insert into t (id,a) values (876,45);
+insert into t (id,a) values (876,46);
+insert into t (id,a) values (876,47);
+insert into t (id,a) values (876,48);
+insert into t (id,a) values (876,49);
+insert into t (id,a) values (876,50);
+insert into t (id,a) values (876,51);
+insert into t (id,a) values (876,52);
+insert into t (id,a) values (876,53);
+insert into t (id,a) values (876,54);
+insert into t (id,a) values (876,55);
+insert into t (id,a) values (876,56);
+insert into t (id,a) values (876,57);
+insert into t (id,a) values (876,58);
+insert into t (id,a) values (876,59);
+insert into t (id,a) values (876,60);
+insert into t (id,a) values (876,61);
+insert into t (id,a) values (876,62);
+insert into t (id,a) values (876,63);
+insert into t (id,a) values (876,64);
+insert into t (id,a) values (876,65);
+insert into t (id,a) values (876,66);
+insert into t (id,a) values (876,67);
+insert into t (id,a) values (876,68);
+insert into t (id,a) values (876,69);
+insert into t (id,a) values (876,70);
+insert into t (id,a) values (876,71);
+insert into t (id,a) values (876,72);
+insert into t (id,a) values (876,73);
+insert into t (id,a) values (876,74);
+insert into t (id,a) values (876,75);
+insert into t (id,a) values (876,76);
+insert into t (id,a) values (876,77);
+insert into t (id,a) values (876,78);
+insert into t (id,a) values (876,79);
+insert into t (id,a) values (876,80);
+insert into t (id,a) values (876,81);
+insert into t (id,a) values (876,82);
+insert into t (id,a) values (876,83);
+insert into t (id,a) values (876,84);
+insert into t (id,a) values (876,85);
+insert into t (id,a) values (876,86);
+insert into t (id,a) values (876,87);
+insert into t (id,a) values (876,88);
+insert into t (id,a) values (876,89);
+insert into t (id,a) values (876,90);
+insert into t (id,a) values (876,91);
+insert into t (id,a) values (876,92);
+insert into t (id,a) values (876,93);
+insert into t (id,a) values (876,94);
+insert into t (id,a) values (876,95);
+insert into t (id,a) values (876,96);
+insert into t (id,a) values (876,97);
+insert into t (id,a) values (876,98);
+insert into t (id,a) values (876,99);
+insert into t (id,a) values (877,0);
+insert into t (id,a) values (877,1);
+insert into t (id,a) values (877,2);
+insert into t (id,a) values (877,3);
+insert into t (id,a) values (877,4);
+insert into t (id,a) values (877,5);
+insert into t (id,a) values (877,6);
+insert into t (id,a) values (877,7);
+insert into t (id,a) values (877,8);
+insert into t (id,a) values (877,9);
+insert into t (id,a) values (877,10);
+insert into t (id,a) values (877,11);
+insert into t (id,a) values (877,12);
+insert into t (id,a) values (877,13);
+insert into t (id,a) values (877,14);
+insert into t (id,a) values (877,15);
+insert into t (id,a) values (877,16);
+insert into t (id,a) values (877,17);
+insert into t (id,a) values (877,18);
+insert into t (id,a) values (877,19);
+insert into t (id,a) values (877,20);
+insert into t (id,a) values (877,21);
+insert into t (id,a) values (877,22);
+insert into t (id,a) values (877,23);
+insert into t (id,a) values (877,24);
+insert into t (id,a) values (877,25);
+insert into t (id,a) values (877,26);
+insert into t (id,a) values (877,27);
+insert into t (id,a) values (877,28);
+insert into t (id,a) values (877,29);
+insert into t (id,a) values (877,30);
+insert into t (id,a) values (877,31);
+insert into t (id,a) values (877,32);
+insert into t (id,a) values (877,33);
+insert into t (id,a) values (877,34);
+insert into t (id,a) values (877,35);
+insert into t (id,a) values (877,36);
+insert into t (id,a) values (877,37);
+insert into t (id,a) values (877,38);
+insert into t (id,a) values (877,39);
+insert into t (id,a) values (877,40);
+insert into t (id,a) values (877,41);
+insert into t (id,a) values (877,42);
+insert into t (id,a) values (877,43);
+insert into t (id,a) values (877,44);
+insert into t (id,a) values (877,45);
+insert into t (id,a) values (877,46);
+insert into t (id,a) values (877,47);
+insert into t (id,a) values (877,48);
+insert into t (id,a) values (877,49);
+insert into t (id,a) values (877,50);
+insert into t (id,a) values (877,51);
+insert into t (id,a) values (877,52);
+insert into t (id,a) values (877,53);
+insert into t (id,a) values (877,54);
+insert into t (id,a) values (877,55);
+insert into t (id,a) values (877,56);
+insert into t (id,a) values (877,57);
+insert into t (id,a) values (877,58);
+insert into t (id,a) values (877,59);
+insert into t (id,a) values (877,60);
+insert into t (id,a) values (877,61);
+insert into t (id,a) values (877,62);
+insert into t (id,a) values (877,63);
+insert into t (id,a) values (877,64);
+insert into t (id,a) values (877,65);
+insert into t (id,a) values (877,66);
+insert into t (id,a) values (877,67);
+insert into t (id,a) values (877,68);
+insert into t (id,a) values (877,69);
+insert into t (id,a) values (877,70);
+insert into t (id,a) values (877,71);
+insert into t (id,a) values (877,72);
+insert into t (id,a) values (877,73);
+insert into t (id,a) values (877,74);
+insert into t (id,a) values (877,75);
+insert into t (id,a) values (877,76);
+insert into t (id,a) values (877,77);
+insert into t (id,a) values (877,78);
+insert into t (id,a) values (877,79);
+insert into t (id,a) values (877,80);
+insert into t (id,a) values (877,81);
+insert into t (id,a) values (877,82);
+insert into t (id,a) values (877,83);
+insert into t (id,a) values (877,84);
+insert into t (id,a) values (877,85);
+insert into t (id,a) values (877,86);
+insert into t (id,a) values (877,87);
+insert into t (id,a) values (877,88);
+insert into t (id,a) values (877,89);
+insert into t (id,a) values (877,90);
+insert into t (id,a) values (877,91);
+insert into t (id,a) values (877,92);
+insert into t (id,a) values (877,93);
+insert into t (id,a) values (877,94);
+insert into t (id,a) values (877,95);
+insert into t (id,a) values (877,96);
+insert into t (id,a) values (877,97);
+insert into t (id,a) values (877,98);
+insert into t (id,a) values (877,99);
+insert into t (id,a) values (878,0);
+insert into t (id,a) values (878,1);
+insert into t (id,a) values (878,2);
+insert into t (id,a) values (878,3);
+insert into t (id,a) values (878,4);
+insert into t (id,a) values (878,5);
+insert into t (id,a) values (878,6);
+insert into t (id,a) values (878,7);
+insert into t (id,a) values (878,8);
+insert into t (id,a) values (878,9);
+insert into t (id,a) values (878,10);
+insert into t (id,a) values (878,11);
+insert into t (id,a) values (878,12);
+insert into t (id,a) values (878,13);
+insert into t (id,a) values (878,14);
+insert into t (id,a) values (878,15);
+insert into t (id,a) values (878,16);
+insert into t (id,a) values (878,17);
+insert into t (id,a) values (878,18);
+insert into t (id,a) values (878,19);
+insert into t (id,a) values (878,20);
+insert into t (id,a) values (878,21);
+insert into t (id,a) values (878,22);
+insert into t (id,a) values (878,23);
+insert into t (id,a) values (878,24);
+insert into t (id,a) values (878,25);
+insert into t (id,a) values (878,26);
+insert into t (id,a) values (878,27);
+insert into t (id,a) values (878,28);
+insert into t (id,a) values (878,29);
+insert into t (id,a) values (878,30);
+insert into t (id,a) values (878,31);
+insert into t (id,a) values (878,32);
+insert into t (id,a) values (878,33);
+insert into t (id,a) values (878,34);
+insert into t (id,a) values (878,35);
+insert into t (id,a) values (878,36);
+insert into t (id,a) values (878,37);
+insert into t (id,a) values (878,38);
+insert into t (id,a) values (878,39);
+insert into t (id,a) values (878,40);
+insert into t (id,a) values (878,41);
+insert into t (id,a) values (878,42);
+insert into t (id,a) values (878,43);
+insert into t (id,a) values (878,44);
+insert into t (id,a) values (878,45);
+insert into t (id,a) values (878,46);
+insert into t (id,a) values (878,47);
+insert into t (id,a) values (878,48);
+insert into t (id,a) values (878,49);
+insert into t (id,a) values (878,50);
+insert into t (id,a) values (878,51);
+insert into t (id,a) values (878,52);
+insert into t (id,a) values (878,53);
+insert into t (id,a) values (878,54);
+insert into t (id,a) values (878,55);
+insert into t (id,a) values (878,56);
+insert into t (id,a) values (878,57);
+insert into t (id,a) values (878,58);
+insert into t (id,a) values (878,59);
+insert into t (id,a) values (878,60);
+insert into t (id,a) values (878,61);
+insert into t (id,a) values (878,62);
+insert into t (id,a) values (878,63);
+insert into t (id,a) values (878,64);
+insert into t (id,a) values (878,65);
+insert into t (id,a) values (878,66);
+insert into t (id,a) values (878,67);
+insert into t (id,a) values (878,68);
+insert into t (id,a) values (878,69);
+insert into t (id,a) values (878,70);
+insert into t (id,a) values (878,71);
+insert into t (id,a) values (878,72);
+insert into t (id,a) values (878,73);
+insert into t (id,a) values (878,74);
+insert into t (id,a) values (878,75);
+insert into t (id,a) values (878,76);
+insert into t (id,a) values (878,77);
+insert into t (id,a) values (878,78);
+insert into t (id,a) values (878,79);
+insert into t (id,a) values (878,80);
+insert into t (id,a) values (878,81);
+insert into t (id,a) values (878,82);
+insert into t (id,a) values (878,83);
+insert into t (id,a) values (878,84);
+insert into t (id,a) values (878,85);
+insert into t (id,a) values (878,86);
+insert into t (id,a) values (878,87);
+insert into t (id,a) values (878,88);
+insert into t (id,a) values (878,89);
+insert into t (id,a) values (878,90);
+insert into t (id,a) values (878,91);
+insert into t (id,a) values (878,92);
+insert into t (id,a) values (878,93);
+insert into t (id,a) values (878,94);
+insert into t (id,a) values (878,95);
+insert into t (id,a) values (878,96);
+insert into t (id,a) values (878,97);
+insert into t (id,a) values (878,98);
+insert into t (id,a) values (878,99);
+insert into t (id,a) values (879,0);
+insert into t (id,a) values (879,1);
+insert into t (id,a) values (879,2);
+insert into t (id,a) values (879,3);
+insert into t (id,a) values (879,4);
+insert into t (id,a) values (879,5);
+insert into t (id,a) values (879,6);
+insert into t (id,a) values (879,7);
+insert into t (id,a) values (879,8);
+insert into t (id,a) values (879,9);
+insert into t (id,a) values (879,10);
+insert into t (id,a) values (879,11);
+insert into t (id,a) values (879,12);
+insert into t (id,a) values (879,13);
+insert into t (id,a) values (879,14);
+insert into t (id,a) values (879,15);
+insert into t (id,a) values (879,16);
+insert into t (id,a) values (879,17);
+insert into t (id,a) values (879,18);
+insert into t (id,a) values (879,19);
+insert into t (id,a) values (879,20);
+insert into t (id,a) values (879,21);
+insert into t (id,a) values (879,22);
+insert into t (id,a) values (879,23);
+insert into t (id,a) values (879,24);
+insert into t (id,a) values (879,25);
+insert into t (id,a) values (879,26);
+insert into t (id,a) values (879,27);
+insert into t (id,a) values (879,28);
+insert into t (id,a) values (879,29);
+insert into t (id,a) values (879,30);
+insert into t (id,a) values (879,31);
+insert into t (id,a) values (879,32);
+insert into t (id,a) values (879,33);
+insert into t (id,a) values (879,34);
+insert into t (id,a) values (879,35);
+insert into t (id,a) values (879,36);
+insert into t (id,a) values (879,37);
+insert into t (id,a) values (879,38);
+insert into t (id,a) values (879,39);
+insert into t (id,a) values (879,40);
+insert into t (id,a) values (879,41);
+insert into t (id,a) values (879,42);
+insert into t (id,a) values (879,43);
+insert into t (id,a) values (879,44);
+insert into t (id,a) values (879,45);
+insert into t (id,a) values (879,46);
+insert into t (id,a) values (879,47);
+insert into t (id,a) values (879,48);
+insert into t (id,a) values (879,49);
+insert into t (id,a) values (879,50);
+insert into t (id,a) values (879,51);
+insert into t (id,a) values (879,52);
+insert into t (id,a) values (879,53);
+insert into t (id,a) values (879,54);
+insert into t (id,a) values (879,55);
+insert into t (id,a) values (879,56);
+insert into t (id,a) values (879,57);
+insert into t (id,a) values (879,58);
+insert into t (id,a) values (879,59);
+insert into t (id,a) values (879,60);
+insert into t (id,a) values (879,61);
+insert into t (id,a) values (879,62);
+insert into t (id,a) values (879,63);
+insert into t (id,a) values (879,64);
+insert into t (id,a) values (879,65);
+insert into t (id,a) values (879,66);
+insert into t (id,a) values (879,67);
+insert into t (id,a) values (879,68);
+insert into t (id,a) values (879,69);
+insert into t (id,a) values (879,70);
+insert into t (id,a) values (879,71);
+insert into t (id,a) values (879,72);
+insert into t (id,a) values (879,73);
+insert into t (id,a) values (879,74);
+insert into t (id,a) values (879,75);
+insert into t (id,a) values (879,76);
+insert into t (id,a) values (879,77);
+insert into t (id,a) values (879,78);
+insert into t (id,a) values (879,79);
+insert into t (id,a) values (879,80);
+insert into t (id,a) values (879,81);
+insert into t (id,a) values (879,82);
+insert into t (id,a) values (879,83);
+insert into t (id,a) values (879,84);
+insert into t (id,a) values (879,85);
+insert into t (id,a) values (879,86);
+insert into t (id,a) values (879,87);
+insert into t (id,a) values (879,88);
+insert into t (id,a) values (879,89);
+insert into t (id,a) values (879,90);
+insert into t (id,a) values (879,91);
+insert into t (id,a) values (879,92);
+insert into t (id,a) values (879,93);
+insert into t (id,a) values (879,94);
+insert into t (id,a) values (879,95);
+insert into t (id,a) values (879,96);
+insert into t (id,a) values (879,97);
+insert into t (id,a) values (879,98);
+insert into t (id,a) values (879,99);
+insert into t (id,a) values (880,0);
+insert into t (id,a) values (880,1);
+insert into t (id,a) values (880,2);
+insert into t (id,a) values (880,3);
+insert into t (id,a) values (880,4);
+insert into t (id,a) values (880,5);
+insert into t (id,a) values (880,6);
+insert into t (id,a) values (880,7);
+insert into t (id,a) values (880,8);
+insert into t (id,a) values (880,9);
+insert into t (id,a) values (880,10);
+insert into t (id,a) values (880,11);
+insert into t (id,a) values (880,12);
+insert into t (id,a) values (880,13);
+insert into t (id,a) values (880,14);
+insert into t (id,a) values (880,15);
+insert into t (id,a) values (880,16);
+insert into t (id,a) values (880,17);
+insert into t (id,a) values (880,18);
+insert into t (id,a) values (880,19);
+insert into t (id,a) values (880,20);
+insert into t (id,a) values (880,21);
+insert into t (id,a) values (880,22);
+insert into t (id,a) values (880,23);
+insert into t (id,a) values (880,24);
+insert into t (id,a) values (880,25);
+insert into t (id,a) values (880,26);
+insert into t (id,a) values (880,27);
+insert into t (id,a) values (880,28);
+insert into t (id,a) values (880,29);
+insert into t (id,a) values (880,30);
+insert into t (id,a) values (880,31);
+insert into t (id,a) values (880,32);
+insert into t (id,a) values (880,33);
+insert into t (id,a) values (880,34);
+insert into t (id,a) values (880,35);
+insert into t (id,a) values (880,36);
+insert into t (id,a) values (880,37);
+insert into t (id,a) values (880,38);
+insert into t (id,a) values (880,39);
+insert into t (id,a) values (880,40);
+insert into t (id,a) values (880,41);
+insert into t (id,a) values (880,42);
+insert into t (id,a) values (880,43);
+insert into t (id,a) values (880,44);
+insert into t (id,a) values (880,45);
+insert into t (id,a) values (880,46);
+insert into t (id,a) values (880,47);
+insert into t (id,a) values (880,48);
+insert into t (id,a) values (880,49);
+insert into t (id,a) values (880,50);
+insert into t (id,a) values (880,51);
+insert into t (id,a) values (880,52);
+insert into t (id,a) values (880,53);
+insert into t (id,a) values (880,54);
+insert into t (id,a) values (880,55);
+insert into t (id,a) values (880,56);
+insert into t (id,a) values (880,57);
+insert into t (id,a) values (880,58);
+insert into t (id,a) values (880,59);
+insert into t (id,a) values (880,60);
+insert into t (id,a) values (880,61);
+insert into t (id,a) values (880,62);
+insert into t (id,a) values (880,63);
+insert into t (id,a) values (880,64);
+insert into t (id,a) values (880,65);
+insert into t (id,a) values (880,66);
+insert into t (id,a) values (880,67);
+insert into t (id,a) values (880,68);
+insert into t (id,a) values (880,69);
+insert into t (id,a) values (880,70);
+insert into t (id,a) values (880,71);
+insert into t (id,a) values (880,72);
+insert into t (id,a) values (880,73);
+insert into t (id,a) values (880,74);
+insert into t (id,a) values (880,75);
+insert into t (id,a) values (880,76);
+insert into t (id,a) values (880,77);
+insert into t (id,a) values (880,78);
+insert into t (id,a) values (880,79);
+insert into t (id,a) values (880,80);
+insert into t (id,a) values (880,81);
+insert into t (id,a) values (880,82);
+insert into t (id,a) values (880,83);
+insert into t (id,a) values (880,84);
+insert into t (id,a) values (880,85);
+insert into t (id,a) values (880,86);
+insert into t (id,a) values (880,87);
+insert into t (id,a) values (880,88);
+insert into t (id,a) values (880,89);
+insert into t (id,a) values (880,90);
+insert into t (id,a) values (880,91);
+insert into t (id,a) values (880,92);
+insert into t (id,a) values (880,93);
+insert into t (id,a) values (880,94);
+insert into t (id,a) values (880,95);
+insert into t (id,a) values (880,96);
+insert into t (id,a) values (880,97);
+insert into t (id,a) values (880,98);
+insert into t (id,a) values (880,99);
+insert into t (id,a) values (881,0);
+insert into t (id,a) values (881,1);
+insert into t (id,a) values (881,2);
+insert into t (id,a) values (881,3);
+insert into t (id,a) values (881,4);
+insert into t (id,a) values (881,5);
+insert into t (id,a) values (881,6);
+insert into t (id,a) values (881,7);
+insert into t (id,a) values (881,8);
+insert into t (id,a) values (881,9);
+insert into t (id,a) values (881,10);
+insert into t (id,a) values (881,11);
+insert into t (id,a) values (881,12);
+insert into t (id,a) values (881,13);
+insert into t (id,a) values (881,14);
+insert into t (id,a) values (881,15);
+insert into t (id,a) values (881,16);
+insert into t (id,a) values (881,17);
+insert into t (id,a) values (881,18);
+insert into t (id,a) values (881,19);
+insert into t (id,a) values (881,20);
+insert into t (id,a) values (881,21);
+insert into t (id,a) values (881,22);
+insert into t (id,a) values (881,23);
+insert into t (id,a) values (881,24);
+insert into t (id,a) values (881,25);
+insert into t (id,a) values (881,26);
+insert into t (id,a) values (881,27);
+insert into t (id,a) values (881,28);
+insert into t (id,a) values (881,29);
+insert into t (id,a) values (881,30);
+insert into t (id,a) values (881,31);
+insert into t (id,a) values (881,32);
+insert into t (id,a) values (881,33);
+insert into t (id,a) values (881,34);
+insert into t (id,a) values (881,35);
+insert into t (id,a) values (881,36);
+insert into t (id,a) values (881,37);
+insert into t (id,a) values (881,38);
+insert into t (id,a) values (881,39);
+insert into t (id,a) values (881,40);
+insert into t (id,a) values (881,41);
+insert into t (id,a) values (881,42);
+insert into t (id,a) values (881,43);
+insert into t (id,a) values (881,44);
+insert into t (id,a) values (881,45);
+insert into t (id,a) values (881,46);
+insert into t (id,a) values (881,47);
+insert into t (id,a) values (881,48);
+insert into t (id,a) values (881,49);
+insert into t (id,a) values (881,50);
+insert into t (id,a) values (881,51);
+insert into t (id,a) values (881,52);
+insert into t (id,a) values (881,53);
+insert into t (id,a) values (881,54);
+insert into t (id,a) values (881,55);
+insert into t (id,a) values (881,56);
+insert into t (id,a) values (881,57);
+insert into t (id,a) values (881,58);
+insert into t (id,a) values (881,59);
+insert into t (id,a) values (881,60);
+insert into t (id,a) values (881,61);
+insert into t (id,a) values (881,62);
+insert into t (id,a) values (881,63);
+insert into t (id,a) values (881,64);
+insert into t (id,a) values (881,65);
+insert into t (id,a) values (881,66);
+insert into t (id,a) values (881,67);
+insert into t (id,a) values (881,68);
+insert into t (id,a) values (881,69);
+insert into t (id,a) values (881,70);
+insert into t (id,a) values (881,71);
+insert into t (id,a) values (881,72);
+insert into t (id,a) values (881,73);
+insert into t (id,a) values (881,74);
+insert into t (id,a) values (881,75);
+insert into t (id,a) values (881,76);
+insert into t (id,a) values (881,77);
+insert into t (id,a) values (881,78);
+insert into t (id,a) values (881,79);
+insert into t (id,a) values (881,80);
+insert into t (id,a) values (881,81);
+insert into t (id,a) values (881,82);
+insert into t (id,a) values (881,83);
+insert into t (id,a) values (881,84);
+insert into t (id,a) values (881,85);
+insert into t (id,a) values (881,86);
+insert into t (id,a) values (881,87);
+insert into t (id,a) values (881,88);
+insert into t (id,a) values (881,89);
+insert into t (id,a) values (881,90);
+insert into t (id,a) values (881,91);
+insert into t (id,a) values (881,92);
+insert into t (id,a) values (881,93);
+insert into t (id,a) values (881,94);
+insert into t (id,a) values (881,95);
+insert into t (id,a) values (881,96);
+insert into t (id,a) values (881,97);
+insert into t (id,a) values (881,98);
+insert into t (id,a) values (881,99);
+insert into t (id,a) values (882,0);
+insert into t (id,a) values (882,1);
+insert into t (id,a) values (882,2);
+insert into t (id,a) values (882,3);
+insert into t (id,a) values (882,4);
+insert into t (id,a) values (882,5);
+insert into t (id,a) values (882,6);
+insert into t (id,a) values (882,7);
+insert into t (id,a) values (882,8);
+insert into t (id,a) values (882,9);
+insert into t (id,a) values (882,10);
+insert into t (id,a) values (882,11);
+insert into t (id,a) values (882,12);
+insert into t (id,a) values (882,13);
+insert into t (id,a) values (882,14);
+insert into t (id,a) values (882,15);
+insert into t (id,a) values (882,16);
+insert into t (id,a) values (882,17);
+insert into t (id,a) values (882,18);
+insert into t (id,a) values (882,19);
+insert into t (id,a) values (882,20);
+insert into t (id,a) values (882,21);
+insert into t (id,a) values (882,22);
+insert into t (id,a) values (882,23);
+insert into t (id,a) values (882,24);
+insert into t (id,a) values (882,25);
+insert into t (id,a) values (882,26);
+insert into t (id,a) values (882,27);
+insert into t (id,a) values (882,28);
+insert into t (id,a) values (882,29);
+insert into t (id,a) values (882,30);
+insert into t (id,a) values (882,31);
+insert into t (id,a) values (882,32);
+insert into t (id,a) values (882,33);
+insert into t (id,a) values (882,34);
+insert into t (id,a) values (882,35);
+insert into t (id,a) values (882,36);
+insert into t (id,a) values (882,37);
+insert into t (id,a) values (882,38);
+insert into t (id,a) values (882,39);
+insert into t (id,a) values (882,40);
+insert into t (id,a) values (882,41);
+insert into t (id,a) values (882,42);
+insert into t (id,a) values (882,43);
+insert into t (id,a) values (882,44);
+insert into t (id,a) values (882,45);
+insert into t (id,a) values (882,46);
+insert into t (id,a) values (882,47);
+insert into t (id,a) values (882,48);
+insert into t (id,a) values (882,49);
+insert into t (id,a) values (882,50);
+insert into t (id,a) values (882,51);
+insert into t (id,a) values (882,52);
+insert into t (id,a) values (882,53);
+insert into t (id,a) values (882,54);
+insert into t (id,a) values (882,55);
+insert into t (id,a) values (882,56);
+insert into t (id,a) values (882,57);
+insert into t (id,a) values (882,58);
+insert into t (id,a) values (882,59);
+insert into t (id,a) values (882,60);
+insert into t (id,a) values (882,61);
+insert into t (id,a) values (882,62);
+insert into t (id,a) values (882,63);
+insert into t (id,a) values (882,64);
+insert into t (id,a) values (882,65);
+insert into t (id,a) values (882,66);
+insert into t (id,a) values (882,67);
+insert into t (id,a) values (882,68);
+insert into t (id,a) values (882,69);
+insert into t (id,a) values (882,70);
+insert into t (id,a) values (882,71);
+insert into t (id,a) values (882,72);
+insert into t (id,a) values (882,73);
+insert into t (id,a) values (882,74);
+insert into t (id,a) values (882,75);
+insert into t (id,a) values (882,76);
+insert into t (id,a) values (882,77);
+insert into t (id,a) values (882,78);
+insert into t (id,a) values (882,79);
+insert into t (id,a) values (882,80);
+insert into t (id,a) values (882,81);
+insert into t (id,a) values (882,82);
+insert into t (id,a) values (882,83);
+insert into t (id,a) values (882,84);
+insert into t (id,a) values (882,85);
+insert into t (id,a) values (882,86);
+insert into t (id,a) values (882,87);
+insert into t (id,a) values (882,88);
+insert into t (id,a) values (882,89);
+insert into t (id,a) values (882,90);
+insert into t (id,a) values (882,91);
+insert into t (id,a) values (882,92);
+insert into t (id,a) values (882,93);
+insert into t (id,a) values (882,94);
+insert into t (id,a) values (882,95);
+insert into t (id,a) values (882,96);
+insert into t (id,a) values (882,97);
+insert into t (id,a) values (882,98);
+insert into t (id,a) values (882,99);
+insert into t (id,a) values (883,0);
+insert into t (id,a) values (883,1);
+insert into t (id,a) values (883,2);
+insert into t (id,a) values (883,3);
+insert into t (id,a) values (883,4);
+insert into t (id,a) values (883,5);
+insert into t (id,a) values (883,6);
+insert into t (id,a) values (883,7);
+insert into t (id,a) values (883,8);
+insert into t (id,a) values (883,9);
+insert into t (id,a) values (883,10);
+insert into t (id,a) values (883,11);
+insert into t (id,a) values (883,12);
+insert into t (id,a) values (883,13);
+insert into t (id,a) values (883,14);
+insert into t (id,a) values (883,15);
+insert into t (id,a) values (883,16);
+insert into t (id,a) values (883,17);
+insert into t (id,a) values (883,18);
+insert into t (id,a) values (883,19);
+insert into t (id,a) values (883,20);
+insert into t (id,a) values (883,21);
+insert into t (id,a) values (883,22);
+insert into t (id,a) values (883,23);
+insert into t (id,a) values (883,24);
+insert into t (id,a) values (883,25);
+insert into t (id,a) values (883,26);
+insert into t (id,a) values (883,27);
+insert into t (id,a) values (883,28);
+insert into t (id,a) values (883,29);
+insert into t (id,a) values (883,30);
+insert into t (id,a) values (883,31);
+insert into t (id,a) values (883,32);
+insert into t (id,a) values (883,33);
+insert into t (id,a) values (883,34);
+insert into t (id,a) values (883,35);
+insert into t (id,a) values (883,36);
+insert into t (id,a) values (883,37);
+insert into t (id,a) values (883,38);
+insert into t (id,a) values (883,39);
+insert into t (id,a) values (883,40);
+insert into t (id,a) values (883,41);
+insert into t (id,a) values (883,42);
+insert into t (id,a) values (883,43);
+insert into t (id,a) values (883,44);
+insert into t (id,a) values (883,45);
+insert into t (id,a) values (883,46);
+insert into t (id,a) values (883,47);
+insert into t (id,a) values (883,48);
+insert into t (id,a) values (883,49);
+insert into t (id,a) values (883,50);
+insert into t (id,a) values (883,51);
+insert into t (id,a) values (883,52);
+insert into t (id,a) values (883,53);
+insert into t (id,a) values (883,54);
+insert into t (id,a) values (883,55);
+insert into t (id,a) values (883,56);
+insert into t (id,a) values (883,57);
+insert into t (id,a) values (883,58);
+insert into t (id,a) values (883,59);
+insert into t (id,a) values (883,60);
+insert into t (id,a) values (883,61);
+insert into t (id,a) values (883,62);
+insert into t (id,a) values (883,63);
+insert into t (id,a) values (883,64);
+insert into t (id,a) values (883,65);
+insert into t (id,a) values (883,66);
+insert into t (id,a) values (883,67);
+insert into t (id,a) values (883,68);
+insert into t (id,a) values (883,69);
+insert into t (id,a) values (883,70);
+insert into t (id,a) values (883,71);
+insert into t (id,a) values (883,72);
+insert into t (id,a) values (883,73);
+insert into t (id,a) values (883,74);
+insert into t (id,a) values (883,75);
+insert into t (id,a) values (883,76);
+insert into t (id,a) values (883,77);
+insert into t (id,a) values (883,78);
+insert into t (id,a) values (883,79);
+insert into t (id,a) values (883,80);
+insert into t (id,a) values (883,81);
+insert into t (id,a) values (883,82);
+insert into t (id,a) values (883,83);
+insert into t (id,a) values (883,84);
+insert into t (id,a) values (883,85);
+insert into t (id,a) values (883,86);
+insert into t (id,a) values (883,87);
+insert into t (id,a) values (883,88);
+insert into t (id,a) values (883,89);
+insert into t (id,a) values (883,90);
+insert into t (id,a) values (883,91);
+insert into t (id,a) values (883,92);
+insert into t (id,a) values (883,93);
+insert into t (id,a) values (883,94);
+insert into t (id,a) values (883,95);
+insert into t (id,a) values (883,96);
+insert into t (id,a) values (883,97);
+insert into t (id,a) values (883,98);
+insert into t (id,a) values (883,99);
+insert into t (id,a) values (884,0);
+insert into t (id,a) values (884,1);
+insert into t (id,a) values (884,2);
+insert into t (id,a) values (884,3);
+insert into t (id,a) values (884,4);
+insert into t (id,a) values (884,5);
+insert into t (id,a) values (884,6);
+insert into t (id,a) values (884,7);
+insert into t (id,a) values (884,8);
+insert into t (id,a) values (884,9);
+insert into t (id,a) values (884,10);
+insert into t (id,a) values (884,11);
+insert into t (id,a) values (884,12);
+insert into t (id,a) values (884,13);
+insert into t (id,a) values (884,14);
+insert into t (id,a) values (884,15);
+insert into t (id,a) values (884,16);
+insert into t (id,a) values (884,17);
+insert into t (id,a) values (884,18);
+insert into t (id,a) values (884,19);
+insert into t (id,a) values (884,20);
+insert into t (id,a) values (884,21);
+insert into t (id,a) values (884,22);
+insert into t (id,a) values (884,23);
+insert into t (id,a) values (884,24);
+insert into t (id,a) values (884,25);
+insert into t (id,a) values (884,26);
+insert into t (id,a) values (884,27);
+insert into t (id,a) values (884,28);
+insert into t (id,a) values (884,29);
+insert into t (id,a) values (884,30);
+insert into t (id,a) values (884,31);
+insert into t (id,a) values (884,32);
+insert into t (id,a) values (884,33);
+insert into t (id,a) values (884,34);
+insert into t (id,a) values (884,35);
+insert into t (id,a) values (884,36);
+insert into t (id,a) values (884,37);
+insert into t (id,a) values (884,38);
+insert into t (id,a) values (884,39);
+insert into t (id,a) values (884,40);
+insert into t (id,a) values (884,41);
+insert into t (id,a) values (884,42);
+insert into t (id,a) values (884,43);
+insert into t (id,a) values (884,44);
+insert into t (id,a) values (884,45);
+insert into t (id,a) values (884,46);
+insert into t (id,a) values (884,47);
+insert into t (id,a) values (884,48);
+insert into t (id,a) values (884,49);
+insert into t (id,a) values (884,50);
+insert into t (id,a) values (884,51);
+insert into t (id,a) values (884,52);
+insert into t (id,a) values (884,53);
+insert into t (id,a) values (884,54);
+insert into t (id,a) values (884,55);
+insert into t (id,a) values (884,56);
+insert into t (id,a) values (884,57);
+insert into t (id,a) values (884,58);
+insert into t (id,a) values (884,59);
+insert into t (id,a) values (884,60);
+insert into t (id,a) values (884,61);
+insert into t (id,a) values (884,62);
+insert into t (id,a) values (884,63);
+insert into t (id,a) values (884,64);
+insert into t (id,a) values (884,65);
+insert into t (id,a) values (884,66);
+insert into t (id,a) values (884,67);
+insert into t (id,a) values (884,68);
+insert into t (id,a) values (884,69);
+insert into t (id,a) values (884,70);
+insert into t (id,a) values (884,71);
+insert into t (id,a) values (884,72);
+insert into t (id,a) values (884,73);
+insert into t (id,a) values (884,74);
+insert into t (id,a) values (884,75);
+insert into t (id,a) values (884,76);
+insert into t (id,a) values (884,77);
+insert into t (id,a) values (884,78);
+insert into t (id,a) values (884,79);
+insert into t (id,a) values (884,80);
+insert into t (id,a) values (884,81);
+insert into t (id,a) values (884,82);
+insert into t (id,a) values (884,83);
+insert into t (id,a) values (884,84);
+insert into t (id,a) values (884,85);
+insert into t (id,a) values (884,86);
+insert into t (id,a) values (884,87);
+insert into t (id,a) values (884,88);
+insert into t (id,a) values (884,89);
+insert into t (id,a) values (884,90);
+insert into t (id,a) values (884,91);
+insert into t (id,a) values (884,92);
+insert into t (id,a) values (884,93);
+insert into t (id,a) values (884,94);
+insert into t (id,a) values (884,95);
+insert into t (id,a) values (884,96);
+insert into t (id,a) values (884,97);
+insert into t (id,a) values (884,98);
+insert into t (id,a) values (884,99);
+insert into t (id,a) values (885,0);
+insert into t (id,a) values (885,1);
+insert into t (id,a) values (885,2);
+insert into t (id,a) values (885,3);
+insert into t (id,a) values (885,4);
+insert into t (id,a) values (885,5);
+insert into t (id,a) values (885,6);
+insert into t (id,a) values (885,7);
+insert into t (id,a) values (885,8);
+insert into t (id,a) values (885,9);
+insert into t (id,a) values (885,10);
+insert into t (id,a) values (885,11);
+insert into t (id,a) values (885,12);
+insert into t (id,a) values (885,13);
+insert into t (id,a) values (885,14);
+insert into t (id,a) values (885,15);
+insert into t (id,a) values (885,16);
+insert into t (id,a) values (885,17);
+insert into t (id,a) values (885,18);
+insert into t (id,a) values (885,19);
+insert into t (id,a) values (885,20);
+insert into t (id,a) values (885,21);
+insert into t (id,a) values (885,22);
+insert into t (id,a) values (885,23);
+insert into t (id,a) values (885,24);
+insert into t (id,a) values (885,25);
+insert into t (id,a) values (885,26);
+insert into t (id,a) values (885,27);
+insert into t (id,a) values (885,28);
+insert into t (id,a) values (885,29);
+insert into t (id,a) values (885,30);
+insert into t (id,a) values (885,31);
+insert into t (id,a) values (885,32);
+insert into t (id,a) values (885,33);
+insert into t (id,a) values (885,34);
+insert into t (id,a) values (885,35);
+insert into t (id,a) values (885,36);
+insert into t (id,a) values (885,37);
+insert into t (id,a) values (885,38);
+insert into t (id,a) values (885,39);
+insert into t (id,a) values (885,40);
+insert into t (id,a) values (885,41);
+insert into t (id,a) values (885,42);
+insert into t (id,a) values (885,43);
+insert into t (id,a) values (885,44);
+insert into t (id,a) values (885,45);
+insert into t (id,a) values (885,46);
+insert into t (id,a) values (885,47);
+insert into t (id,a) values (885,48);
+insert into t (id,a) values (885,49);
+insert into t (id,a) values (885,50);
+insert into t (id,a) values (885,51);
+insert into t (id,a) values (885,52);
+insert into t (id,a) values (885,53);
+insert into t (id,a) values (885,54);
+insert into t (id,a) values (885,55);
+insert into t (id,a) values (885,56);
+insert into t (id,a) values (885,57);
+insert into t (id,a) values (885,58);
+insert into t (id,a) values (885,59);
+insert into t (id,a) values (885,60);
+insert into t (id,a) values (885,61);
+insert into t (id,a) values (885,62);
+insert into t (id,a) values (885,63);
+insert into t (id,a) values (885,64);
+insert into t (id,a) values (885,65);
+insert into t (id,a) values (885,66);
+insert into t (id,a) values (885,67);
+insert into t (id,a) values (885,68);
+insert into t (id,a) values (885,69);
+insert into t (id,a) values (885,70);
+insert into t (id,a) values (885,71);
+insert into t (id,a) values (885,72);
+insert into t (id,a) values (885,73);
+insert into t (id,a) values (885,74);
+insert into t (id,a) values (885,75);
+insert into t (id,a) values (885,76);
+insert into t (id,a) values (885,77);
+insert into t (id,a) values (885,78);
+insert into t (id,a) values (885,79);
+insert into t (id,a) values (885,80);
+insert into t (id,a) values (885,81);
+insert into t (id,a) values (885,82);
+insert into t (id,a) values (885,83);
+insert into t (id,a) values (885,84);
+insert into t (id,a) values (885,85);
+insert into t (id,a) values (885,86);
+insert into t (id,a) values (885,87);
+insert into t (id,a) values (885,88);
+insert into t (id,a) values (885,89);
+insert into t (id,a) values (885,90);
+insert into t (id,a) values (885,91);
+insert into t (id,a) values (885,92);
+insert into t (id,a) values (885,93);
+insert into t (id,a) values (885,94);
+insert into t (id,a) values (885,95);
+insert into t (id,a) values (885,96);
+insert into t (id,a) values (885,97);
+insert into t (id,a) values (885,98);
+insert into t (id,a) values (885,99);
+insert into t (id,a) values (886,0);
+insert into t (id,a) values (886,1);
+insert into t (id,a) values (886,2);
+insert into t (id,a) values (886,3);
+insert into t (id,a) values (886,4);
+insert into t (id,a) values (886,5);
+insert into t (id,a) values (886,6);
+insert into t (id,a) values (886,7);
+insert into t (id,a) values (886,8);
+insert into t (id,a) values (886,9);
+insert into t (id,a) values (886,10);
+insert into t (id,a) values (886,11);
+insert into t (id,a) values (886,12);
+insert into t (id,a) values (886,13);
+insert into t (id,a) values (886,14);
+insert into t (id,a) values (886,15);
+insert into t (id,a) values (886,16);
+insert into t (id,a) values (886,17);
+insert into t (id,a) values (886,18);
+insert into t (id,a) values (886,19);
+insert into t (id,a) values (886,20);
+insert into t (id,a) values (886,21);
+insert into t (id,a) values (886,22);
+insert into t (id,a) values (886,23);
+insert into t (id,a) values (886,24);
+insert into t (id,a) values (886,25);
+insert into t (id,a) values (886,26);
+insert into t (id,a) values (886,27);
+insert into t (id,a) values (886,28);
+insert into t (id,a) values (886,29);
+insert into t (id,a) values (886,30);
+insert into t (id,a) values (886,31);
+insert into t (id,a) values (886,32);
+insert into t (id,a) values (886,33);
+insert into t (id,a) values (886,34);
+insert into t (id,a) values (886,35);
+insert into t (id,a) values (886,36);
+insert into t (id,a) values (886,37);
+insert into t (id,a) values (886,38);
+insert into t (id,a) values (886,39);
+insert into t (id,a) values (886,40);
+insert into t (id,a) values (886,41);
+insert into t (id,a) values (886,42);
+insert into t (id,a) values (886,43);
+insert into t (id,a) values (886,44);
+insert into t (id,a) values (886,45);
+insert into t (id,a) values (886,46);
+insert into t (id,a) values (886,47);
+insert into t (id,a) values (886,48);
+insert into t (id,a) values (886,49);
+insert into t (id,a) values (886,50);
+insert into t (id,a) values (886,51);
+insert into t (id,a) values (886,52);
+insert into t (id,a) values (886,53);
+insert into t (id,a) values (886,54);
+insert into t (id,a) values (886,55);
+insert into t (id,a) values (886,56);
+insert into t (id,a) values (886,57);
+insert into t (id,a) values (886,58);
+insert into t (id,a) values (886,59);
+insert into t (id,a) values (886,60);
+insert into t (id,a) values (886,61);
+insert into t (id,a) values (886,62);
+insert into t (id,a) values (886,63);
+insert into t (id,a) values (886,64);
+insert into t (id,a) values (886,65);
+insert into t (id,a) values (886,66);
+insert into t (id,a) values (886,67);
+insert into t (id,a) values (886,68);
+insert into t (id,a) values (886,69);
+insert into t (id,a) values (886,70);
+insert into t (id,a) values (886,71);
+insert into t (id,a) values (886,72);
+insert into t (id,a) values (886,73);
+insert into t (id,a) values (886,74);
+insert into t (id,a) values (886,75);
+insert into t (id,a) values (886,76);
+insert into t (id,a) values (886,77);
+insert into t (id,a) values (886,78);
+insert into t (id,a) values (886,79);
+insert into t (id,a) values (886,80);
+insert into t (id,a) values (886,81);
+insert into t (id,a) values (886,82);
+insert into t (id,a) values (886,83);
+insert into t (id,a) values (886,84);
+insert into t (id,a) values (886,85);
+insert into t (id,a) values (886,86);
+insert into t (id,a) values (886,87);
+insert into t (id,a) values (886,88);
+insert into t (id,a) values (886,89);
+insert into t (id,a) values (886,90);
+insert into t (id,a) values (886,91);
+insert into t (id,a) values (886,92);
+insert into t (id,a) values (886,93);
+insert into t (id,a) values (886,94);
+insert into t (id,a) values (886,95);
+insert into t (id,a) values (886,96);
+insert into t (id,a) values (886,97);
+insert into t (id,a) values (886,98);
+insert into t (id,a) values (886,99);
+insert into t (id,a) values (887,0);
+insert into t (id,a) values (887,1);
+insert into t (id,a) values (887,2);
+insert into t (id,a) values (887,3);
+insert into t (id,a) values (887,4);
+insert into t (id,a) values (887,5);
+insert into t (id,a) values (887,6);
+insert into t (id,a) values (887,7);
+insert into t (id,a) values (887,8);
+insert into t (id,a) values (887,9);
+insert into t (id,a) values (887,10);
+insert into t (id,a) values (887,11);
+insert into t (id,a) values (887,12);
+insert into t (id,a) values (887,13);
+insert into t (id,a) values (887,14);
+insert into t (id,a) values (887,15);
+insert into t (id,a) values (887,16);
+insert into t (id,a) values (887,17);
+insert into t (id,a) values (887,18);
+insert into t (id,a) values (887,19);
+insert into t (id,a) values (887,20);
+insert into t (id,a) values (887,21);
+insert into t (id,a) values (887,22);
+insert into t (id,a) values (887,23);
+insert into t (id,a) values (887,24);
+insert into t (id,a) values (887,25);
+insert into t (id,a) values (887,26);
+insert into t (id,a) values (887,27);
+insert into t (id,a) values (887,28);
+insert into t (id,a) values (887,29);
+insert into t (id,a) values (887,30);
+insert into t (id,a) values (887,31);
+insert into t (id,a) values (887,32);
+insert into t (id,a) values (887,33);
+insert into t (id,a) values (887,34);
+insert into t (id,a) values (887,35);
+insert into t (id,a) values (887,36);
+insert into t (id,a) values (887,37);
+insert into t (id,a) values (887,38);
+insert into t (id,a) values (887,39);
+insert into t (id,a) values (887,40);
+insert into t (id,a) values (887,41);
+insert into t (id,a) values (887,42);
+insert into t (id,a) values (887,43);
+insert into t (id,a) values (887,44);
+insert into t (id,a) values (887,45);
+insert into t (id,a) values (887,46);
+insert into t (id,a) values (887,47);
+insert into t (id,a) values (887,48);
+insert into t (id,a) values (887,49);
+insert into t (id,a) values (887,50);
+insert into t (id,a) values (887,51);
+insert into t (id,a) values (887,52);
+insert into t (id,a) values (887,53);
+insert into t (id,a) values (887,54);
+insert into t (id,a) values (887,55);
+insert into t (id,a) values (887,56);
+insert into t (id,a) values (887,57);
+insert into t (id,a) values (887,58);
+insert into t (id,a) values (887,59);
+insert into t (id,a) values (887,60);
+insert into t (id,a) values (887,61);
+insert into t (id,a) values (887,62);
+insert into t (id,a) values (887,63);
+insert into t (id,a) values (887,64);
+insert into t (id,a) values (887,65);
+insert into t (id,a) values (887,66);
+insert into t (id,a) values (887,67);
+insert into t (id,a) values (887,68);
+insert into t (id,a) values (887,69);
+insert into t (id,a) values (887,70);
+insert into t (id,a) values (887,71);
+insert into t (id,a) values (887,72);
+insert into t (id,a) values (887,73);
+insert into t (id,a) values (887,74);
+insert into t (id,a) values (887,75);
+insert into t (id,a) values (887,76);
+insert into t (id,a) values (887,77);
+insert into t (id,a) values (887,78);
+insert into t (id,a) values (887,79);
+insert into t (id,a) values (887,80);
+insert into t (id,a) values (887,81);
+insert into t (id,a) values (887,82);
+insert into t (id,a) values (887,83);
+insert into t (id,a) values (887,84);
+insert into t (id,a) values (887,85);
+insert into t (id,a) values (887,86);
+insert into t (id,a) values (887,87);
+insert into t (id,a) values (887,88);
+insert into t (id,a) values (887,89);
+insert into t (id,a) values (887,90);
+insert into t (id,a) values (887,91);
+insert into t (id,a) values (887,92);
+insert into t (id,a) values (887,93);
+insert into t (id,a) values (887,94);
+insert into t (id,a) values (887,95);
+insert into t (id,a) values (887,96);
+insert into t (id,a) values (887,97);
+insert into t (id,a) values (887,98);
+insert into t (id,a) values (887,99);
+insert into t (id,a) values (888,0);
+insert into t (id,a) values (888,1);
+insert into t (id,a) values (888,2);
+insert into t (id,a) values (888,3);
+insert into t (id,a) values (888,4);
+insert into t (id,a) values (888,5);
+insert into t (id,a) values (888,6);
+insert into t (id,a) values (888,7);
+insert into t (id,a) values (888,8);
+insert into t (id,a) values (888,9);
+insert into t (id,a) values (888,10);
+insert into t (id,a) values (888,11);
+insert into t (id,a) values (888,12);
+insert into t (id,a) values (888,13);
+insert into t (id,a) values (888,14);
+insert into t (id,a) values (888,15);
+insert into t (id,a) values (888,16);
+insert into t (id,a) values (888,17);
+insert into t (id,a) values (888,18);
+insert into t (id,a) values (888,19);
+insert into t (id,a) values (888,20);
+insert into t (id,a) values (888,21);
+insert into t (id,a) values (888,22);
+insert into t (id,a) values (888,23);
+insert into t (id,a) values (888,24);
+insert into t (id,a) values (888,25);
+insert into t (id,a) values (888,26);
+insert into t (id,a) values (888,27);
+insert into t (id,a) values (888,28);
+insert into t (id,a) values (888,29);
+insert into t (id,a) values (888,30);
+insert into t (id,a) values (888,31);
+insert into t (id,a) values (888,32);
+insert into t (id,a) values (888,33);
+insert into t (id,a) values (888,34);
+insert into t (id,a) values (888,35);
+insert into t (id,a) values (888,36);
+insert into t (id,a) values (888,37);
+insert into t (id,a) values (888,38);
+insert into t (id,a) values (888,39);
+insert into t (id,a) values (888,40);
+insert into t (id,a) values (888,41);
+insert into t (id,a) values (888,42);
+insert into t (id,a) values (888,43);
+insert into t (id,a) values (888,44);
+insert into t (id,a) values (888,45);
+insert into t (id,a) values (888,46);
+insert into t (id,a) values (888,47);
+insert into t (id,a) values (888,48);
+insert into t (id,a) values (888,49);
+insert into t (id,a) values (888,50);
+insert into t (id,a) values (888,51);
+insert into t (id,a) values (888,52);
+insert into t (id,a) values (888,53);
+insert into t (id,a) values (888,54);
+insert into t (id,a) values (888,55);
+insert into t (id,a) values (888,56);
+insert into t (id,a) values (888,57);
+insert into t (id,a) values (888,58);
+insert into t (id,a) values (888,59);
+insert into t (id,a) values (888,60);
+insert into t (id,a) values (888,61);
+insert into t (id,a) values (888,62);
+insert into t (id,a) values (888,63);
+insert into t (id,a) values (888,64);
+insert into t (id,a) values (888,65);
+insert into t (id,a) values (888,66);
+insert into t (id,a) values (888,67);
+insert into t (id,a) values (888,68);
+insert into t (id,a) values (888,69);
+insert into t (id,a) values (888,70);
+insert into t (id,a) values (888,71);
+insert into t (id,a) values (888,72);
+insert into t (id,a) values (888,73);
+insert into t (id,a) values (888,74);
+insert into t (id,a) values (888,75);
+insert into t (id,a) values (888,76);
+insert into t (id,a) values (888,77);
+insert into t (id,a) values (888,78);
+insert into t (id,a) values (888,79);
+insert into t (id,a) values (888,80);
+insert into t (id,a) values (888,81);
+insert into t (id,a) values (888,82);
+insert into t (id,a) values (888,83);
+insert into t (id,a) values (888,84);
+insert into t (id,a) values (888,85);
+insert into t (id,a) values (888,86);
+insert into t (id,a) values (888,87);
+insert into t (id,a) values (888,88);
+insert into t (id,a) values (888,89);
+insert into t (id,a) values (888,90);
+insert into t (id,a) values (888,91);
+insert into t (id,a) values (888,92);
+insert into t (id,a) values (888,93);
+insert into t (id,a) values (888,94);
+insert into t (id,a) values (888,95);
+insert into t (id,a) values (888,96);
+insert into t (id,a) values (888,97);
+insert into t (id,a) values (888,98);
+insert into t (id,a) values (888,99);
+insert into t (id,a) values (889,0);
+insert into t (id,a) values (889,1);
+insert into t (id,a) values (889,2);
+insert into t (id,a) values (889,3);
+insert into t (id,a) values (889,4);
+insert into t (id,a) values (889,5);
+insert into t (id,a) values (889,6);
+insert into t (id,a) values (889,7);
+insert into t (id,a) values (889,8);
+insert into t (id,a) values (889,9);
+insert into t (id,a) values (889,10);
+insert into t (id,a) values (889,11);
+insert into t (id,a) values (889,12);
+insert into t (id,a) values (889,13);
+insert into t (id,a) values (889,14);
+insert into t (id,a) values (889,15);
+insert into t (id,a) values (889,16);
+insert into t (id,a) values (889,17);
+insert into t (id,a) values (889,18);
+insert into t (id,a) values (889,19);
+insert into t (id,a) values (889,20);
+insert into t (id,a) values (889,21);
+insert into t (id,a) values (889,22);
+insert into t (id,a) values (889,23);
+insert into t (id,a) values (889,24);
+insert into t (id,a) values (889,25);
+insert into t (id,a) values (889,26);
+insert into t (id,a) values (889,27);
+insert into t (id,a) values (889,28);
+insert into t (id,a) values (889,29);
+insert into t (id,a) values (889,30);
+insert into t (id,a) values (889,31);
+insert into t (id,a) values (889,32);
+insert into t (id,a) values (889,33);
+insert into t (id,a) values (889,34);
+insert into t (id,a) values (889,35);
+insert into t (id,a) values (889,36);
+insert into t (id,a) values (889,37);
+insert into t (id,a) values (889,38);
+insert into t (id,a) values (889,39);
+insert into t (id,a) values (889,40);
+insert into t (id,a) values (889,41);
+insert into t (id,a) values (889,42);
+insert into t (id,a) values (889,43);
+insert into t (id,a) values (889,44);
+insert into t (id,a) values (889,45);
+insert into t (id,a) values (889,46);
+insert into t (id,a) values (889,47);
+insert into t (id,a) values (889,48);
+insert into t (id,a) values (889,49);
+insert into t (id,a) values (889,50);
+insert into t (id,a) values (889,51);
+insert into t (id,a) values (889,52);
+insert into t (id,a) values (889,53);
+insert into t (id,a) values (889,54);
+insert into t (id,a) values (889,55);
+insert into t (id,a) values (889,56);
+insert into t (id,a) values (889,57);
+insert into t (id,a) values (889,58);
+insert into t (id,a) values (889,59);
+insert into t (id,a) values (889,60);
+insert into t (id,a) values (889,61);
+insert into t (id,a) values (889,62);
+insert into t (id,a) values (889,63);
+insert into t (id,a) values (889,64);
+insert into t (id,a) values (889,65);
+insert into t (id,a) values (889,66);
+insert into t (id,a) values (889,67);
+insert into t (id,a) values (889,68);
+insert into t (id,a) values (889,69);
+insert into t (id,a) values (889,70);
+insert into t (id,a) values (889,71);
+insert into t (id,a) values (889,72);
+insert into t (id,a) values (889,73);
+insert into t (id,a) values (889,74);
+insert into t (id,a) values (889,75);
+insert into t (id,a) values (889,76);
+insert into t (id,a) values (889,77);
+insert into t (id,a) values (889,78);
+insert into t (id,a) values (889,79);
+insert into t (id,a) values (889,80);
+insert into t (id,a) values (889,81);
+insert into t (id,a) values (889,82);
+insert into t (id,a) values (889,83);
+insert into t (id,a) values (889,84);
+insert into t (id,a) values (889,85);
+insert into t (id,a) values (889,86);
+insert into t (id,a) values (889,87);
+insert into t (id,a) values (889,88);
+insert into t (id,a) values (889,89);
+insert into t (id,a) values (889,90);
+insert into t (id,a) values (889,91);
+insert into t (id,a) values (889,92);
+insert into t (id,a) values (889,93);
+insert into t (id,a) values (889,94);
+insert into t (id,a) values (889,95);
+insert into t (id,a) values (889,96);
+insert into t (id,a) values (889,97);
+insert into t (id,a) values (889,98);
+insert into t (id,a) values (889,99);
+insert into t (id,a) values (890,0);
+insert into t (id,a) values (890,1);
+insert into t (id,a) values (890,2);
+insert into t (id,a) values (890,3);
+insert into t (id,a) values (890,4);
+insert into t (id,a) values (890,5);
+insert into t (id,a) values (890,6);
+insert into t (id,a) values (890,7);
+insert into t (id,a) values (890,8);
+insert into t (id,a) values (890,9);
+insert into t (id,a) values (890,10);
+insert into t (id,a) values (890,11);
+insert into t (id,a) values (890,12);
+insert into t (id,a) values (890,13);
+insert into t (id,a) values (890,14);
+insert into t (id,a) values (890,15);
+insert into t (id,a) values (890,16);
+insert into t (id,a) values (890,17);
+insert into t (id,a) values (890,18);
+insert into t (id,a) values (890,19);
+insert into t (id,a) values (890,20);
+insert into t (id,a) values (890,21);
+insert into t (id,a) values (890,22);
+insert into t (id,a) values (890,23);
+insert into t (id,a) values (890,24);
+insert into t (id,a) values (890,25);
+insert into t (id,a) values (890,26);
+insert into t (id,a) values (890,27);
+insert into t (id,a) values (890,28);
+insert into t (id,a) values (890,29);
+insert into t (id,a) values (890,30);
+insert into t (id,a) values (890,31);
+insert into t (id,a) values (890,32);
+insert into t (id,a) values (890,33);
+insert into t (id,a) values (890,34);
+insert into t (id,a) values (890,35);
+insert into t (id,a) values (890,36);
+insert into t (id,a) values (890,37);
+insert into t (id,a) values (890,38);
+insert into t (id,a) values (890,39);
+insert into t (id,a) values (890,40);
+insert into t (id,a) values (890,41);
+insert into t (id,a) values (890,42);
+insert into t (id,a) values (890,43);
+insert into t (id,a) values (890,44);
+insert into t (id,a) values (890,45);
+insert into t (id,a) values (890,46);
+insert into t (id,a) values (890,47);
+insert into t (id,a) values (890,48);
+insert into t (id,a) values (890,49);
+insert into t (id,a) values (890,50);
+insert into t (id,a) values (890,51);
+insert into t (id,a) values (890,52);
+insert into t (id,a) values (890,53);
+insert into t (id,a) values (890,54);
+insert into t (id,a) values (890,55);
+insert into t (id,a) values (890,56);
+insert into t (id,a) values (890,57);
+insert into t (id,a) values (890,58);
+insert into t (id,a) values (890,59);
+insert into t (id,a) values (890,60);
+insert into t (id,a) values (890,61);
+insert into t (id,a) values (890,62);
+insert into t (id,a) values (890,63);
+insert into t (id,a) values (890,64);
+insert into t (id,a) values (890,65);
+insert into t (id,a) values (890,66);
+insert into t (id,a) values (890,67);
+insert into t (id,a) values (890,68);
+insert into t (id,a) values (890,69);
+insert into t (id,a) values (890,70);
+insert into t (id,a) values (890,71);
+insert into t (id,a) values (890,72);
+insert into t (id,a) values (890,73);
+insert into t (id,a) values (890,74);
+insert into t (id,a) values (890,75);
+insert into t (id,a) values (890,76);
+insert into t (id,a) values (890,77);
+insert into t (id,a) values (890,78);
+insert into t (id,a) values (890,79);
+insert into t (id,a) values (890,80);
+insert into t (id,a) values (890,81);
+insert into t (id,a) values (890,82);
+insert into t (id,a) values (890,83);
+insert into t (id,a) values (890,84);
+insert into t (id,a) values (890,85);
+insert into t (id,a) values (890,86);
+insert into t (id,a) values (890,87);
+insert into t (id,a) values (890,88);
+insert into t (id,a) values (890,89);
+insert into t (id,a) values (890,90);
+insert into t (id,a) values (890,91);
+insert into t (id,a) values (890,92);
+insert into t (id,a) values (890,93);
+insert into t (id,a) values (890,94);
+insert into t (id,a) values (890,95);
+insert into t (id,a) values (890,96);
+insert into t (id,a) values (890,97);
+insert into t (id,a) values (890,98);
+insert into t (id,a) values (890,99);
+insert into t (id,a) values (891,0);
+insert into t (id,a) values (891,1);
+insert into t (id,a) values (891,2);
+insert into t (id,a) values (891,3);
+insert into t (id,a) values (891,4);
+insert into t (id,a) values (891,5);
+insert into t (id,a) values (891,6);
+insert into t (id,a) values (891,7);
+insert into t (id,a) values (891,8);
+insert into t (id,a) values (891,9);
+insert into t (id,a) values (891,10);
+insert into t (id,a) values (891,11);
+insert into t (id,a) values (891,12);
+insert into t (id,a) values (891,13);
+insert into t (id,a) values (891,14);
+insert into t (id,a) values (891,15);
+insert into t (id,a) values (891,16);
+insert into t (id,a) values (891,17);
+insert into t (id,a) values (891,18);
+insert into t (id,a) values (891,19);
+insert into t (id,a) values (891,20);
+insert into t (id,a) values (891,21);
+insert into t (id,a) values (891,22);
+insert into t (id,a) values (891,23);
+insert into t (id,a) values (891,24);
+insert into t (id,a) values (891,25);
+insert into t (id,a) values (891,26);
+insert into t (id,a) values (891,27);
+insert into t (id,a) values (891,28);
+insert into t (id,a) values (891,29);
+insert into t (id,a) values (891,30);
+insert into t (id,a) values (891,31);
+insert into t (id,a) values (891,32);
+insert into t (id,a) values (891,33);
+insert into t (id,a) values (891,34);
+insert into t (id,a) values (891,35);
+insert into t (id,a) values (891,36);
+insert into t (id,a) values (891,37);
+insert into t (id,a) values (891,38);
+insert into t (id,a) values (891,39);
+insert into t (id,a) values (891,40);
+insert into t (id,a) values (891,41);
+insert into t (id,a) values (891,42);
+insert into t (id,a) values (891,43);
+insert into t (id,a) values (891,44);
+insert into t (id,a) values (891,45);
+insert into t (id,a) values (891,46);
+insert into t (id,a) values (891,47);
+insert into t (id,a) values (891,48);
+insert into t (id,a) values (891,49);
+insert into t (id,a) values (891,50);
+insert into t (id,a) values (891,51);
+insert into t (id,a) values (891,52);
+insert into t (id,a) values (891,53);
+insert into t (id,a) values (891,54);
+insert into t (id,a) values (891,55);
+insert into t (id,a) values (891,56);
+insert into t (id,a) values (891,57);
+insert into t (id,a) values (891,58);
+insert into t (id,a) values (891,59);
+insert into t (id,a) values (891,60);
+insert into t (id,a) values (891,61);
+insert into t (id,a) values (891,62);
+insert into t (id,a) values (891,63);
+insert into t (id,a) values (891,64);
+insert into t (id,a) values (891,65);
+insert into t (id,a) values (891,66);
+insert into t (id,a) values (891,67);
+insert into t (id,a) values (891,68);
+insert into t (id,a) values (891,69);
+insert into t (id,a) values (891,70);
+insert into t (id,a) values (891,71);
+insert into t (id,a) values (891,72);
+insert into t (id,a) values (891,73);
+insert into t (id,a) values (891,74);
+insert into t (id,a) values (891,75);
+insert into t (id,a) values (891,76);
+insert into t (id,a) values (891,77);
+insert into t (id,a) values (891,78);
+insert into t (id,a) values (891,79);
+insert into t (id,a) values (891,80);
+insert into t (id,a) values (891,81);
+insert into t (id,a) values (891,82);
+insert into t (id,a) values (891,83);
+insert into t (id,a) values (891,84);
+insert into t (id,a) values (891,85);
+insert into t (id,a) values (891,86);
+insert into t (id,a) values (891,87);
+insert into t (id,a) values (891,88);
+insert into t (id,a) values (891,89);
+insert into t (id,a) values (891,90);
+insert into t (id,a) values (891,91);
+insert into t (id,a) values (891,92);
+insert into t (id,a) values (891,93);
+insert into t (id,a) values (891,94);
+insert into t (id,a) values (891,95);
+insert into t (id,a) values (891,96);
+insert into t (id,a) values (891,97);
+insert into t (id,a) values (891,98);
+insert into t (id,a) values (891,99);
+insert into t (id,a) values (892,0);
+insert into t (id,a) values (892,1);
+insert into t (id,a) values (892,2);
+insert into t (id,a) values (892,3);
+insert into t (id,a) values (892,4);
+insert into t (id,a) values (892,5);
+insert into t (id,a) values (892,6);
+insert into t (id,a) values (892,7);
+insert into t (id,a) values (892,8);
+insert into t (id,a) values (892,9);
+insert into t (id,a) values (892,10);
+insert into t (id,a) values (892,11);
+insert into t (id,a) values (892,12);
+insert into t (id,a) values (892,13);
+insert into t (id,a) values (892,14);
+insert into t (id,a) values (892,15);
+insert into t (id,a) values (892,16);
+insert into t (id,a) values (892,17);
+insert into t (id,a) values (892,18);
+insert into t (id,a) values (892,19);
+insert into t (id,a) values (892,20);
+insert into t (id,a) values (892,21);
+insert into t (id,a) values (892,22);
+insert into t (id,a) values (892,23);
+insert into t (id,a) values (892,24);
+insert into t (id,a) values (892,25);
+insert into t (id,a) values (892,26);
+insert into t (id,a) values (892,27);
+insert into t (id,a) values (892,28);
+insert into t (id,a) values (892,29);
+insert into t (id,a) values (892,30);
+insert into t (id,a) values (892,31);
+insert into t (id,a) values (892,32);
+insert into t (id,a) values (892,33);
+insert into t (id,a) values (892,34);
+insert into t (id,a) values (892,35);
+insert into t (id,a) values (892,36);
+insert into t (id,a) values (892,37);
+insert into t (id,a) values (892,38);
+insert into t (id,a) values (892,39);
+insert into t (id,a) values (892,40);
+insert into t (id,a) values (892,41);
+insert into t (id,a) values (892,42);
+insert into t (id,a) values (892,43);
+insert into t (id,a) values (892,44);
+insert into t (id,a) values (892,45);
+insert into t (id,a) values (892,46);
+insert into t (id,a) values (892,47);
+insert into t (id,a) values (892,48);
+insert into t (id,a) values (892,49);
+insert into t (id,a) values (892,50);
+insert into t (id,a) values (892,51);
+insert into t (id,a) values (892,52);
+insert into t (id,a) values (892,53);
+insert into t (id,a) values (892,54);
+insert into t (id,a) values (892,55);
+insert into t (id,a) values (892,56);
+insert into t (id,a) values (892,57);
+insert into t (id,a) values (892,58);
+insert into t (id,a) values (892,59);
+insert into t (id,a) values (892,60);
+insert into t (id,a) values (892,61);
+insert into t (id,a) values (892,62);
+insert into t (id,a) values (892,63);
+insert into t (id,a) values (892,64);
+insert into t (id,a) values (892,65);
+insert into t (id,a) values (892,66);
+insert into t (id,a) values (892,67);
+insert into t (id,a) values (892,68);
+insert into t (id,a) values (892,69);
+insert into t (id,a) values (892,70);
+insert into t (id,a) values (892,71);
+insert into t (id,a) values (892,72);
+insert into t (id,a) values (892,73);
+insert into t (id,a) values (892,74);
+insert into t (id,a) values (892,75);
+insert into t (id,a) values (892,76);
+insert into t (id,a) values (892,77);
+insert into t (id,a) values (892,78);
+insert into t (id,a) values (892,79);
+insert into t (id,a) values (892,80);
+insert into t (id,a) values (892,81);
+insert into t (id,a) values (892,82);
+insert into t (id,a) values (892,83);
+insert into t (id,a) values (892,84);
+insert into t (id,a) values (892,85);
+insert into t (id,a) values (892,86);
+insert into t (id,a) values (892,87);
+insert into t (id,a) values (892,88);
+insert into t (id,a) values (892,89);
+insert into t (id,a) values (892,90);
+insert into t (id,a) values (892,91);
+insert into t (id,a) values (892,92);
+insert into t (id,a) values (892,93);
+insert into t (id,a) values (892,94);
+insert into t (id,a) values (892,95);
+insert into t (id,a) values (892,96);
+insert into t (id,a) values (892,97);
+insert into t (id,a) values (892,98);
+insert into t (id,a) values (892,99);
+insert into t (id,a) values (893,0);
+insert into t (id,a) values (893,1);
+insert into t (id,a) values (893,2);
+insert into t (id,a) values (893,3);
+insert into t (id,a) values (893,4);
+insert into t (id,a) values (893,5);
+insert into t (id,a) values (893,6);
+insert into t (id,a) values (893,7);
+insert into t (id,a) values (893,8);
+insert into t (id,a) values (893,9);
+insert into t (id,a) values (893,10);
+insert into t (id,a) values (893,11);
+insert into t (id,a) values (893,12);
+insert into t (id,a) values (893,13);
+insert into t (id,a) values (893,14);
+insert into t (id,a) values (893,15);
+insert into t (id,a) values (893,16);
+insert into t (id,a) values (893,17);
+insert into t (id,a) values (893,18);
+insert into t (id,a) values (893,19);
+insert into t (id,a) values (893,20);
+insert into t (id,a) values (893,21);
+insert into t (id,a) values (893,22);
+insert into t (id,a) values (893,23);
+insert into t (id,a) values (893,24);
+insert into t (id,a) values (893,25);
+insert into t (id,a) values (893,26);
+insert into t (id,a) values (893,27);
+insert into t (id,a) values (893,28);
+insert into t (id,a) values (893,29);
+insert into t (id,a) values (893,30);
+insert into t (id,a) values (893,31);
+insert into t (id,a) values (893,32);
+insert into t (id,a) values (893,33);
+insert into t (id,a) values (893,34);
+insert into t (id,a) values (893,35);
+insert into t (id,a) values (893,36);
+insert into t (id,a) values (893,37);
+insert into t (id,a) values (893,38);
+insert into t (id,a) values (893,39);
+insert into t (id,a) values (893,40);
+insert into t (id,a) values (893,41);
+insert into t (id,a) values (893,42);
+insert into t (id,a) values (893,43);
+insert into t (id,a) values (893,44);
+insert into t (id,a) values (893,45);
+insert into t (id,a) values (893,46);
+insert into t (id,a) values (893,47);
+insert into t (id,a) values (893,48);
+insert into t (id,a) values (893,49);
+insert into t (id,a) values (893,50);
+insert into t (id,a) values (893,51);
+insert into t (id,a) values (893,52);
+insert into t (id,a) values (893,53);
+insert into t (id,a) values (893,54);
+insert into t (id,a) values (893,55);
+insert into t (id,a) values (893,56);
+insert into t (id,a) values (893,57);
+insert into t (id,a) values (893,58);
+insert into t (id,a) values (893,59);
+insert into t (id,a) values (893,60);
+insert into t (id,a) values (893,61);
+insert into t (id,a) values (893,62);
+insert into t (id,a) values (893,63);
+insert into t (id,a) values (893,64);
+insert into t (id,a) values (893,65);
+insert into t (id,a) values (893,66);
+insert into t (id,a) values (893,67);
+insert into t (id,a) values (893,68);
+insert into t (id,a) values (893,69);
+insert into t (id,a) values (893,70);
+insert into t (id,a) values (893,71);
+insert into t (id,a) values (893,72);
+insert into t (id,a) values (893,73);
+insert into t (id,a) values (893,74);
+insert into t (id,a) values (893,75);
+insert into t (id,a) values (893,76);
+insert into t (id,a) values (893,77);
+insert into t (id,a) values (893,78);
+insert into t (id,a) values (893,79);
+insert into t (id,a) values (893,80);
+insert into t (id,a) values (893,81);
+insert into t (id,a) values (893,82);
+insert into t (id,a) values (893,83);
+insert into t (id,a) values (893,84);
+insert into t (id,a) values (893,85);
+insert into t (id,a) values (893,86);
+insert into t (id,a) values (893,87);
+insert into t (id,a) values (893,88);
+insert into t (id,a) values (893,89);
+insert into t (id,a) values (893,90);
+insert into t (id,a) values (893,91);
+insert into t (id,a) values (893,92);
+insert into t (id,a) values (893,93);
+insert into t (id,a) values (893,94);
+insert into t (id,a) values (893,95);
+insert into t (id,a) values (893,96);
+insert into t (id,a) values (893,97);
+insert into t (id,a) values (893,98);
+insert into t (id,a) values (893,99);
+insert into t (id,a) values (894,0);
+insert into t (id,a) values (894,1);
+insert into t (id,a) values (894,2);
+insert into t (id,a) values (894,3);
+insert into t (id,a) values (894,4);
+insert into t (id,a) values (894,5);
+insert into t (id,a) values (894,6);
+insert into t (id,a) values (894,7);
+insert into t (id,a) values (894,8);
+insert into t (id,a) values (894,9);
+insert into t (id,a) values (894,10);
+insert into t (id,a) values (894,11);
+insert into t (id,a) values (894,12);
+insert into t (id,a) values (894,13);
+insert into t (id,a) values (894,14);
+insert into t (id,a) values (894,15);
+insert into t (id,a) values (894,16);
+insert into t (id,a) values (894,17);
+insert into t (id,a) values (894,18);
+insert into t (id,a) values (894,19);
+insert into t (id,a) values (894,20);
+insert into t (id,a) values (894,21);
+insert into t (id,a) values (894,22);
+insert into t (id,a) values (894,23);
+insert into t (id,a) values (894,24);
+insert into t (id,a) values (894,25);
+insert into t (id,a) values (894,26);
+insert into t (id,a) values (894,27);
+insert into t (id,a) values (894,28);
+insert into t (id,a) values (894,29);
+insert into t (id,a) values (894,30);
+insert into t (id,a) values (894,31);
+insert into t (id,a) values (894,32);
+insert into t (id,a) values (894,33);
+insert into t (id,a) values (894,34);
+insert into t (id,a) values (894,35);
+insert into t (id,a) values (894,36);
+insert into t (id,a) values (894,37);
+insert into t (id,a) values (894,38);
+insert into t (id,a) values (894,39);
+insert into t (id,a) values (894,40);
+insert into t (id,a) values (894,41);
+insert into t (id,a) values (894,42);
+insert into t (id,a) values (894,43);
+insert into t (id,a) values (894,44);
+insert into t (id,a) values (894,45);
+insert into t (id,a) values (894,46);
+insert into t (id,a) values (894,47);
+insert into t (id,a) values (894,48);
+insert into t (id,a) values (894,49);
+insert into t (id,a) values (894,50);
+insert into t (id,a) values (894,51);
+insert into t (id,a) values (894,52);
+insert into t (id,a) values (894,53);
+insert into t (id,a) values (894,54);
+insert into t (id,a) values (894,55);
+insert into t (id,a) values (894,56);
+insert into t (id,a) values (894,57);
+insert into t (id,a) values (894,58);
+insert into t (id,a) values (894,59);
+insert into t (id,a) values (894,60);
+insert into t (id,a) values (894,61);
+insert into t (id,a) values (894,62);
+insert into t (id,a) values (894,63);
+insert into t (id,a) values (894,64);
+insert into t (id,a) values (894,65);
+insert into t (id,a) values (894,66);
+insert into t (id,a) values (894,67);
+insert into t (id,a) values (894,68);
+insert into t (id,a) values (894,69);
+insert into t (id,a) values (894,70);
+insert into t (id,a) values (894,71);
+insert into t (id,a) values (894,72);
+insert into t (id,a) values (894,73);
+insert into t (id,a) values (894,74);
+insert into t (id,a) values (894,75);
+insert into t (id,a) values (894,76);
+insert into t (id,a) values (894,77);
+insert into t (id,a) values (894,78);
+insert into t (id,a) values (894,79);
+insert into t (id,a) values (894,80);
+insert into t (id,a) values (894,81);
+insert into t (id,a) values (894,82);
+insert into t (id,a) values (894,83);
+insert into t (id,a) values (894,84);
+insert into t (id,a) values (894,85);
+insert into t (id,a) values (894,86);
+insert into t (id,a) values (894,87);
+insert into t (id,a) values (894,88);
+insert into t (id,a) values (894,89);
+insert into t (id,a) values (894,90);
+insert into t (id,a) values (894,91);
+insert into t (id,a) values (894,92);
+insert into t (id,a) values (894,93);
+insert into t (id,a) values (894,94);
+insert into t (id,a) values (894,95);
+insert into t (id,a) values (894,96);
+insert into t (id,a) values (894,97);
+insert into t (id,a) values (894,98);
+insert into t (id,a) values (894,99);
+insert into t (id,a) values (895,0);
+insert into t (id,a) values (895,1);
+insert into t (id,a) values (895,2);
+insert into t (id,a) values (895,3);
+insert into t (id,a) values (895,4);
+insert into t (id,a) values (895,5);
+insert into t (id,a) values (895,6);
+insert into t (id,a) values (895,7);
+insert into t (id,a) values (895,8);
+insert into t (id,a) values (895,9);
+insert into t (id,a) values (895,10);
+insert into t (id,a) values (895,11);
+insert into t (id,a) values (895,12);
+insert into t (id,a) values (895,13);
+insert into t (id,a) values (895,14);
+insert into t (id,a) values (895,15);
+insert into t (id,a) values (895,16);
+insert into t (id,a) values (895,17);
+insert into t (id,a) values (895,18);
+insert into t (id,a) values (895,19);
+insert into t (id,a) values (895,20);
+insert into t (id,a) values (895,21);
+insert into t (id,a) values (895,22);
+insert into t (id,a) values (895,23);
+insert into t (id,a) values (895,24);
+insert into t (id,a) values (895,25);
+insert into t (id,a) values (895,26);
+insert into t (id,a) values (895,27);
+insert into t (id,a) values (895,28);
+insert into t (id,a) values (895,29);
+insert into t (id,a) values (895,30);
+insert into t (id,a) values (895,31);
+insert into t (id,a) values (895,32);
+insert into t (id,a) values (895,33);
+insert into t (id,a) values (895,34);
+insert into t (id,a) values (895,35);
+insert into t (id,a) values (895,36);
+insert into t (id,a) values (895,37);
+insert into t (id,a) values (895,38);
+insert into t (id,a) values (895,39);
+insert into t (id,a) values (895,40);
+insert into t (id,a) values (895,41);
+insert into t (id,a) values (895,42);
+insert into t (id,a) values (895,43);
+insert into t (id,a) values (895,44);
+insert into t (id,a) values (895,45);
+insert into t (id,a) values (895,46);
+insert into t (id,a) values (895,47);
+insert into t (id,a) values (895,48);
+insert into t (id,a) values (895,49);
+insert into t (id,a) values (895,50);
+insert into t (id,a) values (895,51);
+insert into t (id,a) values (895,52);
+insert into t (id,a) values (895,53);
+insert into t (id,a) values (895,54);
+insert into t (id,a) values (895,55);
+insert into t (id,a) values (895,56);
+insert into t (id,a) values (895,57);
+insert into t (id,a) values (895,58);
+insert into t (id,a) values (895,59);
+insert into t (id,a) values (895,60);
+insert into t (id,a) values (895,61);
+insert into t (id,a) values (895,62);
+insert into t (id,a) values (895,63);
+insert into t (id,a) values (895,64);
+insert into t (id,a) values (895,65);
+insert into t (id,a) values (895,66);
+insert into t (id,a) values (895,67);
+insert into t (id,a) values (895,68);
+insert into t (id,a) values (895,69);
+insert into t (id,a) values (895,70);
+insert into t (id,a) values (895,71);
+insert into t (id,a) values (895,72);
+insert into t (id,a) values (895,73);
+insert into t (id,a) values (895,74);
+insert into t (id,a) values (895,75);
+insert into t (id,a) values (895,76);
+insert into t (id,a) values (895,77);
+insert into t (id,a) values (895,78);
+insert into t (id,a) values (895,79);
+insert into t (id,a) values (895,80);
+insert into t (id,a) values (895,81);
+insert into t (id,a) values (895,82);
+insert into t (id,a) values (895,83);
+insert into t (id,a) values (895,84);
+insert into t (id,a) values (895,85);
+insert into t (id,a) values (895,86);
+insert into t (id,a) values (895,87);
+insert into t (id,a) values (895,88);
+insert into t (id,a) values (895,89);
+insert into t (id,a) values (895,90);
+insert into t (id,a) values (895,91);
+insert into t (id,a) values (895,92);
+insert into t (id,a) values (895,93);
+insert into t (id,a) values (895,94);
+insert into t (id,a) values (895,95);
+insert into t (id,a) values (895,96);
+insert into t (id,a) values (895,97);
+insert into t (id,a) values (895,98);
+insert into t (id,a) values (895,99);
+insert into t (id,a) values (896,0);
+insert into t (id,a) values (896,1);
+insert into t (id,a) values (896,2);
+insert into t (id,a) values (896,3);
+insert into t (id,a) values (896,4);
+insert into t (id,a) values (896,5);
+insert into t (id,a) values (896,6);
+insert into t (id,a) values (896,7);
+insert into t (id,a) values (896,8);
+insert into t (id,a) values (896,9);
+insert into t (id,a) values (896,10);
+insert into t (id,a) values (896,11);
+insert into t (id,a) values (896,12);
+insert into t (id,a) values (896,13);
+insert into t (id,a) values (896,14);
+insert into t (id,a) values (896,15);
+insert into t (id,a) values (896,16);
+insert into t (id,a) values (896,17);
+insert into t (id,a) values (896,18);
+insert into t (id,a) values (896,19);
+insert into t (id,a) values (896,20);
+insert into t (id,a) values (896,21);
+insert into t (id,a) values (896,22);
+insert into t (id,a) values (896,23);
+insert into t (id,a) values (896,24);
+insert into t (id,a) values (896,25);
+insert into t (id,a) values (896,26);
+insert into t (id,a) values (896,27);
+insert into t (id,a) values (896,28);
+insert into t (id,a) values (896,29);
+insert into t (id,a) values (896,30);
+insert into t (id,a) values (896,31);
+insert into t (id,a) values (896,32);
+insert into t (id,a) values (896,33);
+insert into t (id,a) values (896,34);
+insert into t (id,a) values (896,35);
+insert into t (id,a) values (896,36);
+insert into t (id,a) values (896,37);
+insert into t (id,a) values (896,38);
+insert into t (id,a) values (896,39);
+insert into t (id,a) values (896,40);
+insert into t (id,a) values (896,41);
+insert into t (id,a) values (896,42);
+insert into t (id,a) values (896,43);
+insert into t (id,a) values (896,44);
+insert into t (id,a) values (896,45);
+insert into t (id,a) values (896,46);
+insert into t (id,a) values (896,47);
+insert into t (id,a) values (896,48);
+insert into t (id,a) values (896,49);
+insert into t (id,a) values (896,50);
+insert into t (id,a) values (896,51);
+insert into t (id,a) values (896,52);
+insert into t (id,a) values (896,53);
+insert into t (id,a) values (896,54);
+insert into t (id,a) values (896,55);
+insert into t (id,a) values (896,56);
+insert into t (id,a) values (896,57);
+insert into t (id,a) values (896,58);
+insert into t (id,a) values (896,59);
+insert into t (id,a) values (896,60);
+insert into t (id,a) values (896,61);
+insert into t (id,a) values (896,62);
+insert into t (id,a) values (896,63);
+insert into t (id,a) values (896,64);
+insert into t (id,a) values (896,65);
+insert into t (id,a) values (896,66);
+insert into t (id,a) values (896,67);
+insert into t (id,a) values (896,68);
+insert into t (id,a) values (896,69);
+insert into t (id,a) values (896,70);
+insert into t (id,a) values (896,71);
+insert into t (id,a) values (896,72);
+insert into t (id,a) values (896,73);
+insert into t (id,a) values (896,74);
+insert into t (id,a) values (896,75);
+insert into t (id,a) values (896,76);
+insert into t (id,a) values (896,77);
+insert into t (id,a) values (896,78);
+insert into t (id,a) values (896,79);
+insert into t (id,a) values (896,80);
+insert into t (id,a) values (896,81);
+insert into t (id,a) values (896,82);
+insert into t (id,a) values (896,83);
+insert into t (id,a) values (896,84);
+insert into t (id,a) values (896,85);
+insert into t (id,a) values (896,86);
+insert into t (id,a) values (896,87);
+insert into t (id,a) values (896,88);
+insert into t (id,a) values (896,89);
+insert into t (id,a) values (896,90);
+insert into t (id,a) values (896,91);
+insert into t (id,a) values (896,92);
+insert into t (id,a) values (896,93);
+insert into t (id,a) values (896,94);
+insert into t (id,a) values (896,95);
+insert into t (id,a) values (896,96);
+insert into t (id,a) values (896,97);
+insert into t (id,a) values (896,98);
+insert into t (id,a) values (896,99);
+insert into t (id,a) values (897,0);
+insert into t (id,a) values (897,1);
+insert into t (id,a) values (897,2);
+insert into t (id,a) values (897,3);
+insert into t (id,a) values (897,4);
+insert into t (id,a) values (897,5);
+insert into t (id,a) values (897,6);
+insert into t (id,a) values (897,7);
+insert into t (id,a) values (897,8);
+insert into t (id,a) values (897,9);
+insert into t (id,a) values (897,10);
+insert into t (id,a) values (897,11);
+insert into t (id,a) values (897,12);
+insert into t (id,a) values (897,13);
+insert into t (id,a) values (897,14);
+insert into t (id,a) values (897,15);
+insert into t (id,a) values (897,16);
+insert into t (id,a) values (897,17);
+insert into t (id,a) values (897,18);
+insert into t (id,a) values (897,19);
+insert into t (id,a) values (897,20);
+insert into t (id,a) values (897,21);
+insert into t (id,a) values (897,22);
+insert into t (id,a) values (897,23);
+insert into t (id,a) values (897,24);
+insert into t (id,a) values (897,25);
+insert into t (id,a) values (897,26);
+insert into t (id,a) values (897,27);
+insert into t (id,a) values (897,28);
+insert into t (id,a) values (897,29);
+insert into t (id,a) values (897,30);
+insert into t (id,a) values (897,31);
+insert into t (id,a) values (897,32);
+insert into t (id,a) values (897,33);
+insert into t (id,a) values (897,34);
+insert into t (id,a) values (897,35);
+insert into t (id,a) values (897,36);
+insert into t (id,a) values (897,37);
+insert into t (id,a) values (897,38);
+insert into t (id,a) values (897,39);
+insert into t (id,a) values (897,40);
+insert into t (id,a) values (897,41);
+insert into t (id,a) values (897,42);
+insert into t (id,a) values (897,43);
+insert into t (id,a) values (897,44);
+insert into t (id,a) values (897,45);
+insert into t (id,a) values (897,46);
+insert into t (id,a) values (897,47);
+insert into t (id,a) values (897,48);
+insert into t (id,a) values (897,49);
+insert into t (id,a) values (897,50);
+insert into t (id,a) values (897,51);
+insert into t (id,a) values (897,52);
+insert into t (id,a) values (897,53);
+insert into t (id,a) values (897,54);
+insert into t (id,a) values (897,55);
+insert into t (id,a) values (897,56);
+insert into t (id,a) values (897,57);
+insert into t (id,a) values (897,58);
+insert into t (id,a) values (897,59);
+insert into t (id,a) values (897,60);
+insert into t (id,a) values (897,61);
+insert into t (id,a) values (897,62);
+insert into t (id,a) values (897,63);
+insert into t (id,a) values (897,64);
+insert into t (id,a) values (897,65);
+insert into t (id,a) values (897,66);
+insert into t (id,a) values (897,67);
+insert into t (id,a) values (897,68);
+insert into t (id,a) values (897,69);
+insert into t (id,a) values (897,70);
+insert into t (id,a) values (897,71);
+insert into t (id,a) values (897,72);
+insert into t (id,a) values (897,73);
+insert into t (id,a) values (897,74);
+insert into t (id,a) values (897,75);
+insert into t (id,a) values (897,76);
+insert into t (id,a) values (897,77);
+insert into t (id,a) values (897,78);
+insert into t (id,a) values (897,79);
+insert into t (id,a) values (897,80);
+insert into t (id,a) values (897,81);
+insert into t (id,a) values (897,82);
+insert into t (id,a) values (897,83);
+insert into t (id,a) values (897,84);
+insert into t (id,a) values (897,85);
+insert into t (id,a) values (897,86);
+insert into t (id,a) values (897,87);
+insert into t (id,a) values (897,88);
+insert into t (id,a) values (897,89);
+insert into t (id,a) values (897,90);
+insert into t (id,a) values (897,91);
+insert into t (id,a) values (897,92);
+insert into t (id,a) values (897,93);
+insert into t (id,a) values (897,94);
+insert into t (id,a) values (897,95);
+insert into t (id,a) values (897,96);
+insert into t (id,a) values (897,97);
+insert into t (id,a) values (897,98);
+insert into t (id,a) values (897,99);
+insert into t (id,a) values (898,0);
+insert into t (id,a) values (898,1);
+insert into t (id,a) values (898,2);
+insert into t (id,a) values (898,3);
+insert into t (id,a) values (898,4);
+insert into t (id,a) values (898,5);
+insert into t (id,a) values (898,6);
+insert into t (id,a) values (898,7);
+insert into t (id,a) values (898,8);
+insert into t (id,a) values (898,9);
+insert into t (id,a) values (898,10);
+insert into t (id,a) values (898,11);
+insert into t (id,a) values (898,12);
+insert into t (id,a) values (898,13);
+insert into t (id,a) values (898,14);
+insert into t (id,a) values (898,15);
+insert into t (id,a) values (898,16);
+insert into t (id,a) values (898,17);
+insert into t (id,a) values (898,18);
+insert into t (id,a) values (898,19);
+insert into t (id,a) values (898,20);
+insert into t (id,a) values (898,21);
+insert into t (id,a) values (898,22);
+insert into t (id,a) values (898,23);
+insert into t (id,a) values (898,24);
+insert into t (id,a) values (898,25);
+insert into t (id,a) values (898,26);
+insert into t (id,a) values (898,27);
+insert into t (id,a) values (898,28);
+insert into t (id,a) values (898,29);
+insert into t (id,a) values (898,30);
+insert into t (id,a) values (898,31);
+insert into t (id,a) values (898,32);
+insert into t (id,a) values (898,33);
+insert into t (id,a) values (898,34);
+insert into t (id,a) values (898,35);
+insert into t (id,a) values (898,36);
+insert into t (id,a) values (898,37);
+insert into t (id,a) values (898,38);
+insert into t (id,a) values (898,39);
+insert into t (id,a) values (898,40);
+insert into t (id,a) values (898,41);
+insert into t (id,a) values (898,42);
+insert into t (id,a) values (898,43);
+insert into t (id,a) values (898,44);
+insert into t (id,a) values (898,45);
+insert into t (id,a) values (898,46);
+insert into t (id,a) values (898,47);
+insert into t (id,a) values (898,48);
+insert into t (id,a) values (898,49);
+insert into t (id,a) values (898,50);
+insert into t (id,a) values (898,51);
+insert into t (id,a) values (898,52);
+insert into t (id,a) values (898,53);
+insert into t (id,a) values (898,54);
+insert into t (id,a) values (898,55);
+insert into t (id,a) values (898,56);
+insert into t (id,a) values (898,57);
+insert into t (id,a) values (898,58);
+insert into t (id,a) values (898,59);
+insert into t (id,a) values (898,60);
+insert into t (id,a) values (898,61);
+insert into t (id,a) values (898,62);
+insert into t (id,a) values (898,63);
+insert into t (id,a) values (898,64);
+insert into t (id,a) values (898,65);
+insert into t (id,a) values (898,66);
+insert into t (id,a) values (898,67);
+insert into t (id,a) values (898,68);
+insert into t (id,a) values (898,69);
+insert into t (id,a) values (898,70);
+insert into t (id,a) values (898,71);
+insert into t (id,a) values (898,72);
+insert into t (id,a) values (898,73);
+insert into t (id,a) values (898,74);
+insert into t (id,a) values (898,75);
+insert into t (id,a) values (898,76);
+insert into t (id,a) values (898,77);
+insert into t (id,a) values (898,78);
+insert into t (id,a) values (898,79);
+insert into t (id,a) values (898,80);
+insert into t (id,a) values (898,81);
+insert into t (id,a) values (898,82);
+insert into t (id,a) values (898,83);
+insert into t (id,a) values (898,84);
+insert into t (id,a) values (898,85);
+insert into t (id,a) values (898,86);
+insert into t (id,a) values (898,87);
+insert into t (id,a) values (898,88);
+insert into t (id,a) values (898,89);
+insert into t (id,a) values (898,90);
+insert into t (id,a) values (898,91);
+insert into t (id,a) values (898,92);
+insert into t (id,a) values (898,93);
+insert into t (id,a) values (898,94);
+insert into t (id,a) values (898,95);
+insert into t (id,a) values (898,96);
+insert into t (id,a) values (898,97);
+insert into t (id,a) values (898,98);
+insert into t (id,a) values (898,99);
+insert into t (id,a) values (899,0);
+insert into t (id,a) values (899,1);
+insert into t (id,a) values (899,2);
+insert into t (id,a) values (899,3);
+insert into t (id,a) values (899,4);
+insert into t (id,a) values (899,5);
+insert into t (id,a) values (899,6);
+insert into t (id,a) values (899,7);
+insert into t (id,a) values (899,8);
+insert into t (id,a) values (899,9);
+insert into t (id,a) values (899,10);
+insert into t (id,a) values (899,11);
+insert into t (id,a) values (899,12);
+insert into t (id,a) values (899,13);
+insert into t (id,a) values (899,14);
+insert into t (id,a) values (899,15);
+insert into t (id,a) values (899,16);
+insert into t (id,a) values (899,17);
+insert into t (id,a) values (899,18);
+insert into t (id,a) values (899,19);
+insert into t (id,a) values (899,20);
+insert into t (id,a) values (899,21);
+insert into t (id,a) values (899,22);
+insert into t (id,a) values (899,23);
+insert into t (id,a) values (899,24);
+insert into t (id,a) values (899,25);
+insert into t (id,a) values (899,26);
+insert into t (id,a) values (899,27);
+insert into t (id,a) values (899,28);
+insert into t (id,a) values (899,29);
+insert into t (id,a) values (899,30);
+insert into t (id,a) values (899,31);
+insert into t (id,a) values (899,32);
+insert into t (id,a) values (899,33);
+insert into t (id,a) values (899,34);
+insert into t (id,a) values (899,35);
+insert into t (id,a) values (899,36);
+insert into t (id,a) values (899,37);
+insert into t (id,a) values (899,38);
+insert into t (id,a) values (899,39);
+insert into t (id,a) values (899,40);
+insert into t (id,a) values (899,41);
+insert into t (id,a) values (899,42);
+insert into t (id,a) values (899,43);
+insert into t (id,a) values (899,44);
+insert into t (id,a) values (899,45);
+insert into t (id,a) values (899,46);
+insert into t (id,a) values (899,47);
+insert into t (id,a) values (899,48);
+insert into t (id,a) values (899,49);
+insert into t (id,a) values (899,50);
+insert into t (id,a) values (899,51);
+insert into t (id,a) values (899,52);
+insert into t (id,a) values (899,53);
+insert into t (id,a) values (899,54);
+insert into t (id,a) values (899,55);
+insert into t (id,a) values (899,56);
+insert into t (id,a) values (899,57);
+insert into t (id,a) values (899,58);
+insert into t (id,a) values (899,59);
+insert into t (id,a) values (899,60);
+insert into t (id,a) values (899,61);
+insert into t (id,a) values (899,62);
+insert into t (id,a) values (899,63);
+insert into t (id,a) values (899,64);
+insert into t (id,a) values (899,65);
+insert into t (id,a) values (899,66);
+insert into t (id,a) values (899,67);
+insert into t (id,a) values (899,68);
+insert into t (id,a) values (899,69);
+insert into t (id,a) values (899,70);
+insert into t (id,a) values (899,71);
+insert into t (id,a) values (899,72);
+insert into t (id,a) values (899,73);
+insert into t (id,a) values (899,74);
+insert into t (id,a) values (899,75);
+insert into t (id,a) values (899,76);
+insert into t (id,a) values (899,77);
+insert into t (id,a) values (899,78);
+insert into t (id,a) values (899,79);
+insert into t (id,a) values (899,80);
+insert into t (id,a) values (899,81);
+insert into t (id,a) values (899,82);
+insert into t (id,a) values (899,83);
+insert into t (id,a) values (899,84);
+insert into t (id,a) values (899,85);
+insert into t (id,a) values (899,86);
+insert into t (id,a) values (899,87);
+insert into t (id,a) values (899,88);
+insert into t (id,a) values (899,89);
+insert into t (id,a) values (899,90);
+insert into t (id,a) values (899,91);
+insert into t (id,a) values (899,92);
+insert into t (id,a) values (899,93);
+insert into t (id,a) values (899,94);
+insert into t (id,a) values (899,95);
+insert into t (id,a) values (899,96);
+insert into t (id,a) values (899,97);
+insert into t (id,a) values (899,98);
+insert into t (id,a) values (899,99);
+insert into t (id,a) values (900,0);
+insert into t (id,a) values (900,1);
+insert into t (id,a) values (900,2);
+insert into t (id,a) values (900,3);
+insert into t (id,a) values (900,4);
+insert into t (id,a) values (900,5);
+insert into t (id,a) values (900,6);
+insert into t (id,a) values (900,7);
+insert into t (id,a) values (900,8);
+insert into t (id,a) values (900,9);
+insert into t (id,a) values (900,10);
+insert into t (id,a) values (900,11);
+insert into t (id,a) values (900,12);
+insert into t (id,a) values (900,13);
+insert into t (id,a) values (900,14);
+insert into t (id,a) values (900,15);
+insert into t (id,a) values (900,16);
+insert into t (id,a) values (900,17);
+insert into t (id,a) values (900,18);
+insert into t (id,a) values (900,19);
+insert into t (id,a) values (900,20);
+insert into t (id,a) values (900,21);
+insert into t (id,a) values (900,22);
+insert into t (id,a) values (900,23);
+insert into t (id,a) values (900,24);
+insert into t (id,a) values (900,25);
+insert into t (id,a) values (900,26);
+insert into t (id,a) values (900,27);
+insert into t (id,a) values (900,28);
+insert into t (id,a) values (900,29);
+insert into t (id,a) values (900,30);
+insert into t (id,a) values (900,31);
+insert into t (id,a) values (900,32);
+insert into t (id,a) values (900,33);
+insert into t (id,a) values (900,34);
+insert into t (id,a) values (900,35);
+insert into t (id,a) values (900,36);
+insert into t (id,a) values (900,37);
+insert into t (id,a) values (900,38);
+insert into t (id,a) values (900,39);
+insert into t (id,a) values (900,40);
+insert into t (id,a) values (900,41);
+insert into t (id,a) values (900,42);
+insert into t (id,a) values (900,43);
+insert into t (id,a) values (900,44);
+insert into t (id,a) values (900,45);
+insert into t (id,a) values (900,46);
+insert into t (id,a) values (900,47);
+insert into t (id,a) values (900,48);
+insert into t (id,a) values (900,49);
+insert into t (id,a) values (900,50);
+insert into t (id,a) values (900,51);
+insert into t (id,a) values (900,52);
+insert into t (id,a) values (900,53);
+insert into t (id,a) values (900,54);
+insert into t (id,a) values (900,55);
+insert into t (id,a) values (900,56);
+insert into t (id,a) values (900,57);
+insert into t (id,a) values (900,58);
+insert into t (id,a) values (900,59);
+insert into t (id,a) values (900,60);
+insert into t (id,a) values (900,61);
+insert into t (id,a) values (900,62);
+insert into t (id,a) values (900,63);
+insert into t (id,a) values (900,64);
+insert into t (id,a) values (900,65);
+insert into t (id,a) values (900,66);
+insert into t (id,a) values (900,67);
+insert into t (id,a) values (900,68);
+insert into t (id,a) values (900,69);
+insert into t (id,a) values (900,70);
+insert into t (id,a) values (900,71);
+insert into t (id,a) values (900,72);
+insert into t (id,a) values (900,73);
+insert into t (id,a) values (900,74);
+insert into t (id,a) values (900,75);
+insert into t (id,a) values (900,76);
+insert into t (id,a) values (900,77);
+insert into t (id,a) values (900,78);
+insert into t (id,a) values (900,79);
+insert into t (id,a) values (900,80);
+insert into t (id,a) values (900,81);
+insert into t (id,a) values (900,82);
+insert into t (id,a) values (900,83);
+insert into t (id,a) values (900,84);
+insert into t (id,a) values (900,85);
+insert into t (id,a) values (900,86);
+insert into t (id,a) values (900,87);
+insert into t (id,a) values (900,88);
+insert into t (id,a) values (900,89);
+insert into t (id,a) values (900,90);
+insert into t (id,a) values (900,91);
+insert into t (id,a) values (900,92);
+insert into t (id,a) values (900,93);
+insert into t (id,a) values (900,94);
+insert into t (id,a) values (900,95);
+insert into t (id,a) values (900,96);
+insert into t (id,a) values (900,97);
+insert into t (id,a) values (900,98);
+insert into t (id,a) values (900,99);
+insert into t (id,a) values (901,0);
+insert into t (id,a) values (901,1);
+insert into t (id,a) values (901,2);
+insert into t (id,a) values (901,3);
+insert into t (id,a) values (901,4);
+insert into t (id,a) values (901,5);
+insert into t (id,a) values (901,6);
+insert into t (id,a) values (901,7);
+insert into t (id,a) values (901,8);
+insert into t (id,a) values (901,9);
+insert into t (id,a) values (901,10);
+insert into t (id,a) values (901,11);
+insert into t (id,a) values (901,12);
+insert into t (id,a) values (901,13);
+insert into t (id,a) values (901,14);
+insert into t (id,a) values (901,15);
+insert into t (id,a) values (901,16);
+insert into t (id,a) values (901,17);
+insert into t (id,a) values (901,18);
+insert into t (id,a) values (901,19);
+insert into t (id,a) values (901,20);
+insert into t (id,a) values (901,21);
+insert into t (id,a) values (901,22);
+insert into t (id,a) values (901,23);
+insert into t (id,a) values (901,24);
+insert into t (id,a) values (901,25);
+insert into t (id,a) values (901,26);
+insert into t (id,a) values (901,27);
+insert into t (id,a) values (901,28);
+insert into t (id,a) values (901,29);
+insert into t (id,a) values (901,30);
+insert into t (id,a) values (901,31);
+insert into t (id,a) values (901,32);
+insert into t (id,a) values (901,33);
+insert into t (id,a) values (901,34);
+insert into t (id,a) values (901,35);
+insert into t (id,a) values (901,36);
+insert into t (id,a) values (901,37);
+insert into t (id,a) values (901,38);
+insert into t (id,a) values (901,39);
+insert into t (id,a) values (901,40);
+insert into t (id,a) values (901,41);
+insert into t (id,a) values (901,42);
+insert into t (id,a) values (901,43);
+insert into t (id,a) values (901,44);
+insert into t (id,a) values (901,45);
+insert into t (id,a) values (901,46);
+insert into t (id,a) values (901,47);
+insert into t (id,a) values (901,48);
+insert into t (id,a) values (901,49);
+insert into t (id,a) values (901,50);
+insert into t (id,a) values (901,51);
+insert into t (id,a) values (901,52);
+insert into t (id,a) values (901,53);
+insert into t (id,a) values (901,54);
+insert into t (id,a) values (901,55);
+insert into t (id,a) values (901,56);
+insert into t (id,a) values (901,57);
+insert into t (id,a) values (901,58);
+insert into t (id,a) values (901,59);
+insert into t (id,a) values (901,60);
+insert into t (id,a) values (901,61);
+insert into t (id,a) values (901,62);
+insert into t (id,a) values (901,63);
+insert into t (id,a) values (901,64);
+insert into t (id,a) values (901,65);
+insert into t (id,a) values (901,66);
+insert into t (id,a) values (901,67);
+insert into t (id,a) values (901,68);
+insert into t (id,a) values (901,69);
+insert into t (id,a) values (901,70);
+insert into t (id,a) values (901,71);
+insert into t (id,a) values (901,72);
+insert into t (id,a) values (901,73);
+insert into t (id,a) values (901,74);
+insert into t (id,a) values (901,75);
+insert into t (id,a) values (901,76);
+insert into t (id,a) values (901,77);
+insert into t (id,a) values (901,78);
+insert into t (id,a) values (901,79);
+insert into t (id,a) values (901,80);
+insert into t (id,a) values (901,81);
+insert into t (id,a) values (901,82);
+insert into t (id,a) values (901,83);
+insert into t (id,a) values (901,84);
+insert into t (id,a) values (901,85);
+insert into t (id,a) values (901,86);
+insert into t (id,a) values (901,87);
+insert into t (id,a) values (901,88);
+insert into t (id,a) values (901,89);
+insert into t (id,a) values (901,90);
+insert into t (id,a) values (901,91);
+insert into t (id,a) values (901,92);
+insert into t (id,a) values (901,93);
+insert into t (id,a) values (901,94);
+insert into t (id,a) values (901,95);
+insert into t (id,a) values (901,96);
+insert into t (id,a) values (901,97);
+insert into t (id,a) values (901,98);
+insert into t (id,a) values (901,99);
+insert into t (id,a) values (902,0);
+insert into t (id,a) values (902,1);
+insert into t (id,a) values (902,2);
+insert into t (id,a) values (902,3);
+insert into t (id,a) values (902,4);
+insert into t (id,a) values (902,5);
+insert into t (id,a) values (902,6);
+insert into t (id,a) values (902,7);
+insert into t (id,a) values (902,8);
+insert into t (id,a) values (902,9);
+insert into t (id,a) values (902,10);
+insert into t (id,a) values (902,11);
+insert into t (id,a) values (902,12);
+insert into t (id,a) values (902,13);
+insert into t (id,a) values (902,14);
+insert into t (id,a) values (902,15);
+insert into t (id,a) values (902,16);
+insert into t (id,a) values (902,17);
+insert into t (id,a) values (902,18);
+insert into t (id,a) values (902,19);
+insert into t (id,a) values (902,20);
+insert into t (id,a) values (902,21);
+insert into t (id,a) values (902,22);
+insert into t (id,a) values (902,23);
+insert into t (id,a) values (902,24);
+insert into t (id,a) values (902,25);
+insert into t (id,a) values (902,26);
+insert into t (id,a) values (902,27);
+insert into t (id,a) values (902,28);
+insert into t (id,a) values (902,29);
+insert into t (id,a) values (902,30);
+insert into t (id,a) values (902,31);
+insert into t (id,a) values (902,32);
+insert into t (id,a) values (902,33);
+insert into t (id,a) values (902,34);
+insert into t (id,a) values (902,35);
+insert into t (id,a) values (902,36);
+insert into t (id,a) values (902,37);
+insert into t (id,a) values (902,38);
+insert into t (id,a) values (902,39);
+insert into t (id,a) values (902,40);
+insert into t (id,a) values (902,41);
+insert into t (id,a) values (902,42);
+insert into t (id,a) values (902,43);
+insert into t (id,a) values (902,44);
+insert into t (id,a) values (902,45);
+insert into t (id,a) values (902,46);
+insert into t (id,a) values (902,47);
+insert into t (id,a) values (902,48);
+insert into t (id,a) values (902,49);
+insert into t (id,a) values (902,50);
+insert into t (id,a) values (902,51);
+insert into t (id,a) values (902,52);
+insert into t (id,a) values (902,53);
+insert into t (id,a) values (902,54);
+insert into t (id,a) values (902,55);
+insert into t (id,a) values (902,56);
+insert into t (id,a) values (902,57);
+insert into t (id,a) values (902,58);
+insert into t (id,a) values (902,59);
+insert into t (id,a) values (902,60);
+insert into t (id,a) values (902,61);
+insert into t (id,a) values (902,62);
+insert into t (id,a) values (902,63);
+insert into t (id,a) values (902,64);
+insert into t (id,a) values (902,65);
+insert into t (id,a) values (902,66);
+insert into t (id,a) values (902,67);
+insert into t (id,a) values (902,68);
+insert into t (id,a) values (902,69);
+insert into t (id,a) values (902,70);
+insert into t (id,a) values (902,71);
+insert into t (id,a) values (902,72);
+insert into t (id,a) values (902,73);
+insert into t (id,a) values (902,74);
+insert into t (id,a) values (902,75);
+insert into t (id,a) values (902,76);
+insert into t (id,a) values (902,77);
+insert into t (id,a) values (902,78);
+insert into t (id,a) values (902,79);
+insert into t (id,a) values (902,80);
+insert into t (id,a) values (902,81);
+insert into t (id,a) values (902,82);
+insert into t (id,a) values (902,83);
+insert into t (id,a) values (902,84);
+insert into t (id,a) values (902,85);
+insert into t (id,a) values (902,86);
+insert into t (id,a) values (902,87);
+insert into t (id,a) values (902,88);
+insert into t (id,a) values (902,89);
+insert into t (id,a) values (902,90);
+insert into t (id,a) values (902,91);
+insert into t (id,a) values (902,92);
+insert into t (id,a) values (902,93);
+insert into t (id,a) values (902,94);
+insert into t (id,a) values (902,95);
+insert into t (id,a) values (902,96);
+insert into t (id,a) values (902,97);
+insert into t (id,a) values (902,98);
+insert into t (id,a) values (902,99);
+insert into t (id,a) values (903,0);
+insert into t (id,a) values (903,1);
+insert into t (id,a) values (903,2);
+insert into t (id,a) values (903,3);
+insert into t (id,a) values (903,4);
+insert into t (id,a) values (903,5);
+insert into t (id,a) values (903,6);
+insert into t (id,a) values (903,7);
+insert into t (id,a) values (903,8);
+insert into t (id,a) values (903,9);
+insert into t (id,a) values (903,10);
+insert into t (id,a) values (903,11);
+insert into t (id,a) values (903,12);
+insert into t (id,a) values (903,13);
+insert into t (id,a) values (903,14);
+insert into t (id,a) values (903,15);
+insert into t (id,a) values (903,16);
+insert into t (id,a) values (903,17);
+insert into t (id,a) values (903,18);
+insert into t (id,a) values (903,19);
+insert into t (id,a) values (903,20);
+insert into t (id,a) values (903,21);
+insert into t (id,a) values (903,22);
+insert into t (id,a) values (903,23);
+insert into t (id,a) values (903,24);
+insert into t (id,a) values (903,25);
+insert into t (id,a) values (903,26);
+insert into t (id,a) values (903,27);
+insert into t (id,a) values (903,28);
+insert into t (id,a) values (903,29);
+insert into t (id,a) values (903,30);
+insert into t (id,a) values (903,31);
+insert into t (id,a) values (903,32);
+insert into t (id,a) values (903,33);
+insert into t (id,a) values (903,34);
+insert into t (id,a) values (903,35);
+insert into t (id,a) values (903,36);
+insert into t (id,a) values (903,37);
+insert into t (id,a) values (903,38);
+insert into t (id,a) values (903,39);
+insert into t (id,a) values (903,40);
+insert into t (id,a) values (903,41);
+insert into t (id,a) values (903,42);
+insert into t (id,a) values (903,43);
+insert into t (id,a) values (903,44);
+insert into t (id,a) values (903,45);
+insert into t (id,a) values (903,46);
+insert into t (id,a) values (903,47);
+insert into t (id,a) values (903,48);
+insert into t (id,a) values (903,49);
+insert into t (id,a) values (903,50);
+insert into t (id,a) values (903,51);
+insert into t (id,a) values (903,52);
+insert into t (id,a) values (903,53);
+insert into t (id,a) values (903,54);
+insert into t (id,a) values (903,55);
+insert into t (id,a) values (903,56);
+insert into t (id,a) values (903,57);
+insert into t (id,a) values (903,58);
+insert into t (id,a) values (903,59);
+insert into t (id,a) values (903,60);
+insert into t (id,a) values (903,61);
+insert into t (id,a) values (903,62);
+insert into t (id,a) values (903,63);
+insert into t (id,a) values (903,64);
+insert into t (id,a) values (903,65);
+insert into t (id,a) values (903,66);
+insert into t (id,a) values (903,67);
+insert into t (id,a) values (903,68);
+insert into t (id,a) values (903,69);
+insert into t (id,a) values (903,70);
+insert into t (id,a) values (903,71);
+insert into t (id,a) values (903,72);
+insert into t (id,a) values (903,73);
+insert into t (id,a) values (903,74);
+insert into t (id,a) values (903,75);
+insert into t (id,a) values (903,76);
+insert into t (id,a) values (903,77);
+insert into t (id,a) values (903,78);
+insert into t (id,a) values (903,79);
+insert into t (id,a) values (903,80);
+insert into t (id,a) values (903,81);
+insert into t (id,a) values (903,82);
+insert into t (id,a) values (903,83);
+insert into t (id,a) values (903,84);
+insert into t (id,a) values (903,85);
+insert into t (id,a) values (903,86);
+insert into t (id,a) values (903,87);
+insert into t (id,a) values (903,88);
+insert into t (id,a) values (903,89);
+insert into t (id,a) values (903,90);
+insert into t (id,a) values (903,91);
+insert into t (id,a) values (903,92);
+insert into t (id,a) values (903,93);
+insert into t (id,a) values (903,94);
+insert into t (id,a) values (903,95);
+insert into t (id,a) values (903,96);
+insert into t (id,a) values (903,97);
+insert into t (id,a) values (903,98);
+insert into t (id,a) values (903,99);
+insert into t (id,a) values (904,0);
+insert into t (id,a) values (904,1);
+insert into t (id,a) values (904,2);
+insert into t (id,a) values (904,3);
+insert into t (id,a) values (904,4);
+insert into t (id,a) values (904,5);
+insert into t (id,a) values (904,6);
+insert into t (id,a) values (904,7);
+insert into t (id,a) values (904,8);
+insert into t (id,a) values (904,9);
+insert into t (id,a) values (904,10);
+insert into t (id,a) values (904,11);
+insert into t (id,a) values (904,12);
+insert into t (id,a) values (904,13);
+insert into t (id,a) values (904,14);
+insert into t (id,a) values (904,15);
+insert into t (id,a) values (904,16);
+insert into t (id,a) values (904,17);
+insert into t (id,a) values (904,18);
+insert into t (id,a) values (904,19);
+insert into t (id,a) values (904,20);
+insert into t (id,a) values (904,21);
+insert into t (id,a) values (904,22);
+insert into t (id,a) values (904,23);
+insert into t (id,a) values (904,24);
+insert into t (id,a) values (904,25);
+insert into t (id,a) values (904,26);
+insert into t (id,a) values (904,27);
+insert into t (id,a) values (904,28);
+insert into t (id,a) values (904,29);
+insert into t (id,a) values (904,30);
+insert into t (id,a) values (904,31);
+insert into t (id,a) values (904,32);
+insert into t (id,a) values (904,33);
+insert into t (id,a) values (904,34);
+insert into t (id,a) values (904,35);
+insert into t (id,a) values (904,36);
+insert into t (id,a) values (904,37);
+insert into t (id,a) values (904,38);
+insert into t (id,a) values (904,39);
+insert into t (id,a) values (904,40);
+insert into t (id,a) values (904,41);
+insert into t (id,a) values (904,42);
+insert into t (id,a) values (904,43);
+insert into t (id,a) values (904,44);
+insert into t (id,a) values (904,45);
+insert into t (id,a) values (904,46);
+insert into t (id,a) values (904,47);
+insert into t (id,a) values (904,48);
+insert into t (id,a) values (904,49);
+insert into t (id,a) values (904,50);
+insert into t (id,a) values (904,51);
+insert into t (id,a) values (904,52);
+insert into t (id,a) values (904,53);
+insert into t (id,a) values (904,54);
+insert into t (id,a) values (904,55);
+insert into t (id,a) values (904,56);
+insert into t (id,a) values (904,57);
+insert into t (id,a) values (904,58);
+insert into t (id,a) values (904,59);
+insert into t (id,a) values (904,60);
+insert into t (id,a) values (904,61);
+insert into t (id,a) values (904,62);
+insert into t (id,a) values (904,63);
+insert into t (id,a) values (904,64);
+insert into t (id,a) values (904,65);
+insert into t (id,a) values (904,66);
+insert into t (id,a) values (904,67);
+insert into t (id,a) values (904,68);
+insert into t (id,a) values (904,69);
+insert into t (id,a) values (904,70);
+insert into t (id,a) values (904,71);
+insert into t (id,a) values (904,72);
+insert into t (id,a) values (904,73);
+insert into t (id,a) values (904,74);
+insert into t (id,a) values (904,75);
+insert into t (id,a) values (904,76);
+insert into t (id,a) values (904,77);
+insert into t (id,a) values (904,78);
+insert into t (id,a) values (904,79);
+insert into t (id,a) values (904,80);
+insert into t (id,a) values (904,81);
+insert into t (id,a) values (904,82);
+insert into t (id,a) values (904,83);
+insert into t (id,a) values (904,84);
+insert into t (id,a) values (904,85);
+insert into t (id,a) values (904,86);
+insert into t (id,a) values (904,87);
+insert into t (id,a) values (904,88);
+insert into t (id,a) values (904,89);
+insert into t (id,a) values (904,90);
+insert into t (id,a) values (904,91);
+insert into t (id,a) values (904,92);
+insert into t (id,a) values (904,93);
+insert into t (id,a) values (904,94);
+insert into t (id,a) values (904,95);
+insert into t (id,a) values (904,96);
+insert into t (id,a) values (904,97);
+insert into t (id,a) values (904,98);
+insert into t (id,a) values (904,99);
+insert into t (id,a) values (905,0);
+insert into t (id,a) values (905,1);
+insert into t (id,a) values (905,2);
+insert into t (id,a) values (905,3);
+insert into t (id,a) values (905,4);
+insert into t (id,a) values (905,5);
+insert into t (id,a) values (905,6);
+insert into t (id,a) values (905,7);
+insert into t (id,a) values (905,8);
+insert into t (id,a) values (905,9);
+insert into t (id,a) values (905,10);
+insert into t (id,a) values (905,11);
+insert into t (id,a) values (905,12);
+insert into t (id,a) values (905,13);
+insert into t (id,a) values (905,14);
+insert into t (id,a) values (905,15);
+insert into t (id,a) values (905,16);
+insert into t (id,a) values (905,17);
+insert into t (id,a) values (905,18);
+insert into t (id,a) values (905,19);
+insert into t (id,a) values (905,20);
+insert into t (id,a) values (905,21);
+insert into t (id,a) values (905,22);
+insert into t (id,a) values (905,23);
+insert into t (id,a) values (905,24);
+insert into t (id,a) values (905,25);
+insert into t (id,a) values (905,26);
+insert into t (id,a) values (905,27);
+insert into t (id,a) values (905,28);
+insert into t (id,a) values (905,29);
+insert into t (id,a) values (905,30);
+insert into t (id,a) values (905,31);
+insert into t (id,a) values (905,32);
+insert into t (id,a) values (905,33);
+insert into t (id,a) values (905,34);
+insert into t (id,a) values (905,35);
+insert into t (id,a) values (905,36);
+insert into t (id,a) values (905,37);
+insert into t (id,a) values (905,38);
+insert into t (id,a) values (905,39);
+insert into t (id,a) values (905,40);
+insert into t (id,a) values (905,41);
+insert into t (id,a) values (905,42);
+insert into t (id,a) values (905,43);
+insert into t (id,a) values (905,44);
+insert into t (id,a) values (905,45);
+insert into t (id,a) values (905,46);
+insert into t (id,a) values (905,47);
+insert into t (id,a) values (905,48);
+insert into t (id,a) values (905,49);
+insert into t (id,a) values (905,50);
+insert into t (id,a) values (905,51);
+insert into t (id,a) values (905,52);
+insert into t (id,a) values (905,53);
+insert into t (id,a) values (905,54);
+insert into t (id,a) values (905,55);
+insert into t (id,a) values (905,56);
+insert into t (id,a) values (905,57);
+insert into t (id,a) values (905,58);
+insert into t (id,a) values (905,59);
+insert into t (id,a) values (905,60);
+insert into t (id,a) values (905,61);
+insert into t (id,a) values (905,62);
+insert into t (id,a) values (905,63);
+insert into t (id,a) values (905,64);
+insert into t (id,a) values (905,65);
+insert into t (id,a) values (905,66);
+insert into t (id,a) values (905,67);
+insert into t (id,a) values (905,68);
+insert into t (id,a) values (905,69);
+insert into t (id,a) values (905,70);
+insert into t (id,a) values (905,71);
+insert into t (id,a) values (905,72);
+insert into t (id,a) values (905,73);
+insert into t (id,a) values (905,74);
+insert into t (id,a) values (905,75);
+insert into t (id,a) values (905,76);
+insert into t (id,a) values (905,77);
+insert into t (id,a) values (905,78);
+insert into t (id,a) values (905,79);
+insert into t (id,a) values (905,80);
+insert into t (id,a) values (905,81);
+insert into t (id,a) values (905,82);
+insert into t (id,a) values (905,83);
+insert into t (id,a) values (905,84);
+insert into t (id,a) values (905,85);
+insert into t (id,a) values (905,86);
+insert into t (id,a) values (905,87);
+insert into t (id,a) values (905,88);
+insert into t (id,a) values (905,89);
+insert into t (id,a) values (905,90);
+insert into t (id,a) values (905,91);
+insert into t (id,a) values (905,92);
+insert into t (id,a) values (905,93);
+insert into t (id,a) values (905,94);
+insert into t (id,a) values (905,95);
+insert into t (id,a) values (905,96);
+insert into t (id,a) values (905,97);
+insert into t (id,a) values (905,98);
+insert into t (id,a) values (905,99);
+insert into t (id,a) values (906,0);
+insert into t (id,a) values (906,1);
+insert into t (id,a) values (906,2);
+insert into t (id,a) values (906,3);
+insert into t (id,a) values (906,4);
+insert into t (id,a) values (906,5);
+insert into t (id,a) values (906,6);
+insert into t (id,a) values (906,7);
+insert into t (id,a) values (906,8);
+insert into t (id,a) values (906,9);
+insert into t (id,a) values (906,10);
+insert into t (id,a) values (906,11);
+insert into t (id,a) values (906,12);
+insert into t (id,a) values (906,13);
+insert into t (id,a) values (906,14);
+insert into t (id,a) values (906,15);
+insert into t (id,a) values (906,16);
+insert into t (id,a) values (906,17);
+insert into t (id,a) values (906,18);
+insert into t (id,a) values (906,19);
+insert into t (id,a) values (906,20);
+insert into t (id,a) values (906,21);
+insert into t (id,a) values (906,22);
+insert into t (id,a) values (906,23);
+insert into t (id,a) values (906,24);
+insert into t (id,a) values (906,25);
+insert into t (id,a) values (906,26);
+insert into t (id,a) values (906,27);
+insert into t (id,a) values (906,28);
+insert into t (id,a) values (906,29);
+insert into t (id,a) values (906,30);
+insert into t (id,a) values (906,31);
+insert into t (id,a) values (906,32);
+insert into t (id,a) values (906,33);
+insert into t (id,a) values (906,34);
+insert into t (id,a) values (906,35);
+insert into t (id,a) values (906,36);
+insert into t (id,a) values (906,37);
+insert into t (id,a) values (906,38);
+insert into t (id,a) values (906,39);
+insert into t (id,a) values (906,40);
+insert into t (id,a) values (906,41);
+insert into t (id,a) values (906,42);
+insert into t (id,a) values (906,43);
+insert into t (id,a) values (906,44);
+insert into t (id,a) values (906,45);
+insert into t (id,a) values (906,46);
+insert into t (id,a) values (906,47);
+insert into t (id,a) values (906,48);
+insert into t (id,a) values (906,49);
+insert into t (id,a) values (906,50);
+insert into t (id,a) values (906,51);
+insert into t (id,a) values (906,52);
+insert into t (id,a) values (906,53);
+insert into t (id,a) values (906,54);
+insert into t (id,a) values (906,55);
+insert into t (id,a) values (906,56);
+insert into t (id,a) values (906,57);
+insert into t (id,a) values (906,58);
+insert into t (id,a) values (906,59);
+insert into t (id,a) values (906,60);
+insert into t (id,a) values (906,61);
+insert into t (id,a) values (906,62);
+insert into t (id,a) values (906,63);
+insert into t (id,a) values (906,64);
+insert into t (id,a) values (906,65);
+insert into t (id,a) values (906,66);
+insert into t (id,a) values (906,67);
+insert into t (id,a) values (906,68);
+insert into t (id,a) values (906,69);
+insert into t (id,a) values (906,70);
+insert into t (id,a) values (906,71);
+insert into t (id,a) values (906,72);
+insert into t (id,a) values (906,73);
+insert into t (id,a) values (906,74);
+insert into t (id,a) values (906,75);
+insert into t (id,a) values (906,76);
+insert into t (id,a) values (906,77);
+insert into t (id,a) values (906,78);
+insert into t (id,a) values (906,79);
+insert into t (id,a) values (906,80);
+insert into t (id,a) values (906,81);
+insert into t (id,a) values (906,82);
+insert into t (id,a) values (906,83);
+insert into t (id,a) values (906,84);
+insert into t (id,a) values (906,85);
+insert into t (id,a) values (906,86);
+insert into t (id,a) values (906,87);
+insert into t (id,a) values (906,88);
+insert into t (id,a) values (906,89);
+insert into t (id,a) values (906,90);
+insert into t (id,a) values (906,91);
+insert into t (id,a) values (906,92);
+insert into t (id,a) values (906,93);
+insert into t (id,a) values (906,94);
+insert into t (id,a) values (906,95);
+insert into t (id,a) values (906,96);
+insert into t (id,a) values (906,97);
+insert into t (id,a) values (906,98);
+insert into t (id,a) values (906,99);
+insert into t (id,a) values (907,0);
+insert into t (id,a) values (907,1);
+insert into t (id,a) values (907,2);
+insert into t (id,a) values (907,3);
+insert into t (id,a) values (907,4);
+insert into t (id,a) values (907,5);
+insert into t (id,a) values (907,6);
+insert into t (id,a) values (907,7);
+insert into t (id,a) values (907,8);
+insert into t (id,a) values (907,9);
+insert into t (id,a) values (907,10);
+insert into t (id,a) values (907,11);
+insert into t (id,a) values (907,12);
+insert into t (id,a) values (907,13);
+insert into t (id,a) values (907,14);
+insert into t (id,a) values (907,15);
+insert into t (id,a) values (907,16);
+insert into t (id,a) values (907,17);
+insert into t (id,a) values (907,18);
+insert into t (id,a) values (907,19);
+insert into t (id,a) values (907,20);
+insert into t (id,a) values (907,21);
+insert into t (id,a) values (907,22);
+insert into t (id,a) values (907,23);
+insert into t (id,a) values (907,24);
+insert into t (id,a) values (907,25);
+insert into t (id,a) values (907,26);
+insert into t (id,a) values (907,27);
+insert into t (id,a) values (907,28);
+insert into t (id,a) values (907,29);
+insert into t (id,a) values (907,30);
+insert into t (id,a) values (907,31);
+insert into t (id,a) values (907,32);
+insert into t (id,a) values (907,33);
+insert into t (id,a) values (907,34);
+insert into t (id,a) values (907,35);
+insert into t (id,a) values (907,36);
+insert into t (id,a) values (907,37);
+insert into t (id,a) values (907,38);
+insert into t (id,a) values (907,39);
+insert into t (id,a) values (907,40);
+insert into t (id,a) values (907,41);
+insert into t (id,a) values (907,42);
+insert into t (id,a) values (907,43);
+insert into t (id,a) values (907,44);
+insert into t (id,a) values (907,45);
+insert into t (id,a) values (907,46);
+insert into t (id,a) values (907,47);
+insert into t (id,a) values (907,48);
+insert into t (id,a) values (907,49);
+insert into t (id,a) values (907,50);
+insert into t (id,a) values (907,51);
+insert into t (id,a) values (907,52);
+insert into t (id,a) values (907,53);
+insert into t (id,a) values (907,54);
+insert into t (id,a) values (907,55);
+insert into t (id,a) values (907,56);
+insert into t (id,a) values (907,57);
+insert into t (id,a) values (907,58);
+insert into t (id,a) values (907,59);
+insert into t (id,a) values (907,60);
+insert into t (id,a) values (907,61);
+insert into t (id,a) values (907,62);
+insert into t (id,a) values (907,63);
+insert into t (id,a) values (907,64);
+insert into t (id,a) values (907,65);
+insert into t (id,a) values (907,66);
+insert into t (id,a) values (907,67);
+insert into t (id,a) values (907,68);
+insert into t (id,a) values (907,69);
+insert into t (id,a) values (907,70);
+insert into t (id,a) values (907,71);
+insert into t (id,a) values (907,72);
+insert into t (id,a) values (907,73);
+insert into t (id,a) values (907,74);
+insert into t (id,a) values (907,75);
+insert into t (id,a) values (907,76);
+insert into t (id,a) values (907,77);
+insert into t (id,a) values (907,78);
+insert into t (id,a) values (907,79);
+insert into t (id,a) values (907,80);
+insert into t (id,a) values (907,81);
+insert into t (id,a) values (907,82);
+insert into t (id,a) values (907,83);
+insert into t (id,a) values (907,84);
+insert into t (id,a) values (907,85);
+insert into t (id,a) values (907,86);
+insert into t (id,a) values (907,87);
+insert into t (id,a) values (907,88);
+insert into t (id,a) values (907,89);
+insert into t (id,a) values (907,90);
+insert into t (id,a) values (907,91);
+insert into t (id,a) values (907,92);
+insert into t (id,a) values (907,93);
+insert into t (id,a) values (907,94);
+insert into t (id,a) values (907,95);
+insert into t (id,a) values (907,96);
+insert into t (id,a) values (907,97);
+insert into t (id,a) values (907,98);
+insert into t (id,a) values (907,99);
+insert into t (id,a) values (908,0);
+insert into t (id,a) values (908,1);
+insert into t (id,a) values (908,2);
+insert into t (id,a) values (908,3);
+insert into t (id,a) values (908,4);
+insert into t (id,a) values (908,5);
+insert into t (id,a) values (908,6);
+insert into t (id,a) values (908,7);
+insert into t (id,a) values (908,8);
+insert into t (id,a) values (908,9);
+insert into t (id,a) values (908,10);
+insert into t (id,a) values (908,11);
+insert into t (id,a) values (908,12);
+insert into t (id,a) values (908,13);
+insert into t (id,a) values (908,14);
+insert into t (id,a) values (908,15);
+insert into t (id,a) values (908,16);
+insert into t (id,a) values (908,17);
+insert into t (id,a) values (908,18);
+insert into t (id,a) values (908,19);
+insert into t (id,a) values (908,20);
+insert into t (id,a) values (908,21);
+insert into t (id,a) values (908,22);
+insert into t (id,a) values (908,23);
+insert into t (id,a) values (908,24);
+insert into t (id,a) values (908,25);
+insert into t (id,a) values (908,26);
+insert into t (id,a) values (908,27);
+insert into t (id,a) values (908,28);
+insert into t (id,a) values (908,29);
+insert into t (id,a) values (908,30);
+insert into t (id,a) values (908,31);
+insert into t (id,a) values (908,32);
+insert into t (id,a) values (908,33);
+insert into t (id,a) values (908,34);
+insert into t (id,a) values (908,35);
+insert into t (id,a) values (908,36);
+insert into t (id,a) values (908,37);
+insert into t (id,a) values (908,38);
+insert into t (id,a) values (908,39);
+insert into t (id,a) values (908,40);
+insert into t (id,a) values (908,41);
+insert into t (id,a) values (908,42);
+insert into t (id,a) values (908,43);
+insert into t (id,a) values (908,44);
+insert into t (id,a) values (908,45);
+insert into t (id,a) values (908,46);
+insert into t (id,a) values (908,47);
+insert into t (id,a) values (908,48);
+insert into t (id,a) values (908,49);
+insert into t (id,a) values (908,50);
+insert into t (id,a) values (908,51);
+insert into t (id,a) values (908,52);
+insert into t (id,a) values (908,53);
+insert into t (id,a) values (908,54);
+insert into t (id,a) values (908,55);
+insert into t (id,a) values (908,56);
+insert into t (id,a) values (908,57);
+insert into t (id,a) values (908,58);
+insert into t (id,a) values (908,59);
+insert into t (id,a) values (908,60);
+insert into t (id,a) values (908,61);
+insert into t (id,a) values (908,62);
+insert into t (id,a) values (908,63);
+insert into t (id,a) values (908,64);
+insert into t (id,a) values (908,65);
+insert into t (id,a) values (908,66);
+insert into t (id,a) values (908,67);
+insert into t (id,a) values (908,68);
+insert into t (id,a) values (908,69);
+insert into t (id,a) values (908,70);
+insert into t (id,a) values (908,71);
+insert into t (id,a) values (908,72);
+insert into t (id,a) values (908,73);
+insert into t (id,a) values (908,74);
+insert into t (id,a) values (908,75);
+insert into t (id,a) values (908,76);
+insert into t (id,a) values (908,77);
+insert into t (id,a) values (908,78);
+insert into t (id,a) values (908,79);
+insert into t (id,a) values (908,80);
+insert into t (id,a) values (908,81);
+insert into t (id,a) values (908,82);
+insert into t (id,a) values (908,83);
+insert into t (id,a) values (908,84);
+insert into t (id,a) values (908,85);
+insert into t (id,a) values (908,86);
+insert into t (id,a) values (908,87);
+insert into t (id,a) values (908,88);
+insert into t (id,a) values (908,89);
+insert into t (id,a) values (908,90);
+insert into t (id,a) values (908,91);
+insert into t (id,a) values (908,92);
+insert into t (id,a) values (908,93);
+insert into t (id,a) values (908,94);
+insert into t (id,a) values (908,95);
+insert into t (id,a) values (908,96);
+insert into t (id,a) values (908,97);
+insert into t (id,a) values (908,98);
+insert into t (id,a) values (908,99);
+insert into t (id,a) values (909,0);
+insert into t (id,a) values (909,1);
+insert into t (id,a) values (909,2);
+insert into t (id,a) values (909,3);
+insert into t (id,a) values (909,4);
+insert into t (id,a) values (909,5);
+insert into t (id,a) values (909,6);
+insert into t (id,a) values (909,7);
+insert into t (id,a) values (909,8);
+insert into t (id,a) values (909,9);
+insert into t (id,a) values (909,10);
+insert into t (id,a) values (909,11);
+insert into t (id,a) values (909,12);
+insert into t (id,a) values (909,13);
+insert into t (id,a) values (909,14);
+insert into t (id,a) values (909,15);
+insert into t (id,a) values (909,16);
+insert into t (id,a) values (909,17);
+insert into t (id,a) values (909,18);
+insert into t (id,a) values (909,19);
+insert into t (id,a) values (909,20);
+insert into t (id,a) values (909,21);
+insert into t (id,a) values (909,22);
+insert into t (id,a) values (909,23);
+insert into t (id,a) values (909,24);
+insert into t (id,a) values (909,25);
+insert into t (id,a) values (909,26);
+insert into t (id,a) values (909,27);
+insert into t (id,a) values (909,28);
+insert into t (id,a) values (909,29);
+insert into t (id,a) values (909,30);
+insert into t (id,a) values (909,31);
+insert into t (id,a) values (909,32);
+insert into t (id,a) values (909,33);
+insert into t (id,a) values (909,34);
+insert into t (id,a) values (909,35);
+insert into t (id,a) values (909,36);
+insert into t (id,a) values (909,37);
+insert into t (id,a) values (909,38);
+insert into t (id,a) values (909,39);
+insert into t (id,a) values (909,40);
+insert into t (id,a) values (909,41);
+insert into t (id,a) values (909,42);
+insert into t (id,a) values (909,43);
+insert into t (id,a) values (909,44);
+insert into t (id,a) values (909,45);
+insert into t (id,a) values (909,46);
+insert into t (id,a) values (909,47);
+insert into t (id,a) values (909,48);
+insert into t (id,a) values (909,49);
+insert into t (id,a) values (909,50);
+insert into t (id,a) values (909,51);
+insert into t (id,a) values (909,52);
+insert into t (id,a) values (909,53);
+insert into t (id,a) values (909,54);
+insert into t (id,a) values (909,55);
+insert into t (id,a) values (909,56);
+insert into t (id,a) values (909,57);
+insert into t (id,a) values (909,58);
+insert into t (id,a) values (909,59);
+insert into t (id,a) values (909,60);
+insert into t (id,a) values (909,61);
+insert into t (id,a) values (909,62);
+insert into t (id,a) values (909,63);
+insert into t (id,a) values (909,64);
+insert into t (id,a) values (909,65);
+insert into t (id,a) values (909,66);
+insert into t (id,a) values (909,67);
+insert into t (id,a) values (909,68);
+insert into t (id,a) values (909,69);
+insert into t (id,a) values (909,70);
+insert into t (id,a) values (909,71);
+insert into t (id,a) values (909,72);
+insert into t (id,a) values (909,73);
+insert into t (id,a) values (909,74);
+insert into t (id,a) values (909,75);
+insert into t (id,a) values (909,76);
+insert into t (id,a) values (909,77);
+insert into t (id,a) values (909,78);
+insert into t (id,a) values (909,79);
+insert into t (id,a) values (909,80);
+insert into t (id,a) values (909,81);
+insert into t (id,a) values (909,82);
+insert into t (id,a) values (909,83);
+insert into t (id,a) values (909,84);
+insert into t (id,a) values (909,85);
+insert into t (id,a) values (909,86);
+insert into t (id,a) values (909,87);
+insert into t (id,a) values (909,88);
+insert into t (id,a) values (909,89);
+insert into t (id,a) values (909,90);
+insert into t (id,a) values (909,91);
+insert into t (id,a) values (909,92);
+insert into t (id,a) values (909,93);
+insert into t (id,a) values (909,94);
+insert into t (id,a) values (909,95);
+insert into t (id,a) values (909,96);
+insert into t (id,a) values (909,97);
+insert into t (id,a) values (909,98);
+insert into t (id,a) values (909,99);
+insert into t (id,a) values (910,0);
+insert into t (id,a) values (910,1);
+insert into t (id,a) values (910,2);
+insert into t (id,a) values (910,3);
+insert into t (id,a) values (910,4);
+insert into t (id,a) values (910,5);
+insert into t (id,a) values (910,6);
+insert into t (id,a) values (910,7);
+insert into t (id,a) values (910,8);
+insert into t (id,a) values (910,9);
+insert into t (id,a) values (910,10);
+insert into t (id,a) values (910,11);
+insert into t (id,a) values (910,12);
+insert into t (id,a) values (910,13);
+insert into t (id,a) values (910,14);
+insert into t (id,a) values (910,15);
+insert into t (id,a) values (910,16);
+insert into t (id,a) values (910,17);
+insert into t (id,a) values (910,18);
+insert into t (id,a) values (910,19);
+insert into t (id,a) values (910,20);
+insert into t (id,a) values (910,21);
+insert into t (id,a) values (910,22);
+insert into t (id,a) values (910,23);
+insert into t (id,a) values (910,24);
+insert into t (id,a) values (910,25);
+insert into t (id,a) values (910,26);
+insert into t (id,a) values (910,27);
+insert into t (id,a) values (910,28);
+insert into t (id,a) values (910,29);
+insert into t (id,a) values (910,30);
+insert into t (id,a) values (910,31);
+insert into t (id,a) values (910,32);
+insert into t (id,a) values (910,33);
+insert into t (id,a) values (910,34);
+insert into t (id,a) values (910,35);
+insert into t (id,a) values (910,36);
+insert into t (id,a) values (910,37);
+insert into t (id,a) values (910,38);
+insert into t (id,a) values (910,39);
+insert into t (id,a) values (910,40);
+insert into t (id,a) values (910,41);
+insert into t (id,a) values (910,42);
+insert into t (id,a) values (910,43);
+insert into t (id,a) values (910,44);
+insert into t (id,a) values (910,45);
+insert into t (id,a) values (910,46);
+insert into t (id,a) values (910,47);
+insert into t (id,a) values (910,48);
+insert into t (id,a) values (910,49);
+insert into t (id,a) values (910,50);
+insert into t (id,a) values (910,51);
+insert into t (id,a) values (910,52);
+insert into t (id,a) values (910,53);
+insert into t (id,a) values (910,54);
+insert into t (id,a) values (910,55);
+insert into t (id,a) values (910,56);
+insert into t (id,a) values (910,57);
+insert into t (id,a) values (910,58);
+insert into t (id,a) values (910,59);
+insert into t (id,a) values (910,60);
+insert into t (id,a) values (910,61);
+insert into t (id,a) values (910,62);
+insert into t (id,a) values (910,63);
+insert into t (id,a) values (910,64);
+insert into t (id,a) values (910,65);
+insert into t (id,a) values (910,66);
+insert into t (id,a) values (910,67);
+insert into t (id,a) values (910,68);
+insert into t (id,a) values (910,69);
+insert into t (id,a) values (910,70);
+insert into t (id,a) values (910,71);
+insert into t (id,a) values (910,72);
+insert into t (id,a) values (910,73);
+insert into t (id,a) values (910,74);
+insert into t (id,a) values (910,75);
+insert into t (id,a) values (910,76);
+insert into t (id,a) values (910,77);
+insert into t (id,a) values (910,78);
+insert into t (id,a) values (910,79);
+insert into t (id,a) values (910,80);
+insert into t (id,a) values (910,81);
+insert into t (id,a) values (910,82);
+insert into t (id,a) values (910,83);
+insert into t (id,a) values (910,84);
+insert into t (id,a) values (910,85);
+insert into t (id,a) values (910,86);
+insert into t (id,a) values (910,87);
+insert into t (id,a) values (910,88);
+insert into t (id,a) values (910,89);
+insert into t (id,a) values (910,90);
+insert into t (id,a) values (910,91);
+insert into t (id,a) values (910,92);
+insert into t (id,a) values (910,93);
+insert into t (id,a) values (910,94);
+insert into t (id,a) values (910,95);
+insert into t (id,a) values (910,96);
+insert into t (id,a) values (910,97);
+insert into t (id,a) values (910,98);
+insert into t (id,a) values (910,99);
+insert into t (id,a) values (911,0);
+insert into t (id,a) values (911,1);
+insert into t (id,a) values (911,2);
+insert into t (id,a) values (911,3);
+insert into t (id,a) values (911,4);
+insert into t (id,a) values (911,5);
+insert into t (id,a) values (911,6);
+insert into t (id,a) values (911,7);
+insert into t (id,a) values (911,8);
+insert into t (id,a) values (911,9);
+insert into t (id,a) values (911,10);
+insert into t (id,a) values (911,11);
+insert into t (id,a) values (911,12);
+insert into t (id,a) values (911,13);
+insert into t (id,a) values (911,14);
+insert into t (id,a) values (911,15);
+insert into t (id,a) values (911,16);
+insert into t (id,a) values (911,17);
+insert into t (id,a) values (911,18);
+insert into t (id,a) values (911,19);
+insert into t (id,a) values (911,20);
+insert into t (id,a) values (911,21);
+insert into t (id,a) values (911,22);
+insert into t (id,a) values (911,23);
+insert into t (id,a) values (911,24);
+insert into t (id,a) values (911,25);
+insert into t (id,a) values (911,26);
+insert into t (id,a) values (911,27);
+insert into t (id,a) values (911,28);
+insert into t (id,a) values (911,29);
+insert into t (id,a) values (911,30);
+insert into t (id,a) values (911,31);
+insert into t (id,a) values (911,32);
+insert into t (id,a) values (911,33);
+insert into t (id,a) values (911,34);
+insert into t (id,a) values (911,35);
+insert into t (id,a) values (911,36);
+insert into t (id,a) values (911,37);
+insert into t (id,a) values (911,38);
+insert into t (id,a) values (911,39);
+insert into t (id,a) values (911,40);
+insert into t (id,a) values (911,41);
+insert into t (id,a) values (911,42);
+insert into t (id,a) values (911,43);
+insert into t (id,a) values (911,44);
+insert into t (id,a) values (911,45);
+insert into t (id,a) values (911,46);
+insert into t (id,a) values (911,47);
+insert into t (id,a) values (911,48);
+insert into t (id,a) values (911,49);
+insert into t (id,a) values (911,50);
+insert into t (id,a) values (911,51);
+insert into t (id,a) values (911,52);
+insert into t (id,a) values (911,53);
+insert into t (id,a) values (911,54);
+insert into t (id,a) values (911,55);
+insert into t (id,a) values (911,56);
+insert into t (id,a) values (911,57);
+insert into t (id,a) values (911,58);
+insert into t (id,a) values (911,59);
+insert into t (id,a) values (911,60);
+insert into t (id,a) values (911,61);
+insert into t (id,a) values (911,62);
+insert into t (id,a) values (911,63);
+insert into t (id,a) values (911,64);
+insert into t (id,a) values (911,65);
+insert into t (id,a) values (911,66);
+insert into t (id,a) values (911,67);
+insert into t (id,a) values (911,68);
+insert into t (id,a) values (911,69);
+insert into t (id,a) values (911,70);
+insert into t (id,a) values (911,71);
+insert into t (id,a) values (911,72);
+insert into t (id,a) values (911,73);
+insert into t (id,a) values (911,74);
+insert into t (id,a) values (911,75);
+insert into t (id,a) values (911,76);
+insert into t (id,a) values (911,77);
+insert into t (id,a) values (911,78);
+insert into t (id,a) values (911,79);
+insert into t (id,a) values (911,80);
+insert into t (id,a) values (911,81);
+insert into t (id,a) values (911,82);
+insert into t (id,a) values (911,83);
+insert into t (id,a) values (911,84);
+insert into t (id,a) values (911,85);
+insert into t (id,a) values (911,86);
+insert into t (id,a) values (911,87);
+insert into t (id,a) values (911,88);
+insert into t (id,a) values (911,89);
+insert into t (id,a) values (911,90);
+insert into t (id,a) values (911,91);
+insert into t (id,a) values (911,92);
+insert into t (id,a) values (911,93);
+insert into t (id,a) values (911,94);
+insert into t (id,a) values (911,95);
+insert into t (id,a) values (911,96);
+insert into t (id,a) values (911,97);
+insert into t (id,a) values (911,98);
+insert into t (id,a) values (911,99);
+insert into t (id,a) values (912,0);
+insert into t (id,a) values (912,1);
+insert into t (id,a) values (912,2);
+insert into t (id,a) values (912,3);
+insert into t (id,a) values (912,4);
+insert into t (id,a) values (912,5);
+insert into t (id,a) values (912,6);
+insert into t (id,a) values (912,7);
+insert into t (id,a) values (912,8);
+insert into t (id,a) values (912,9);
+insert into t (id,a) values (912,10);
+insert into t (id,a) values (912,11);
+insert into t (id,a) values (912,12);
+insert into t (id,a) values (912,13);
+insert into t (id,a) values (912,14);
+insert into t (id,a) values (912,15);
+insert into t (id,a) values (912,16);
+insert into t (id,a) values (912,17);
+insert into t (id,a) values (912,18);
+insert into t (id,a) values (912,19);
+insert into t (id,a) values (912,20);
+insert into t (id,a) values (912,21);
+insert into t (id,a) values (912,22);
+insert into t (id,a) values (912,23);
+insert into t (id,a) values (912,24);
+insert into t (id,a) values (912,25);
+insert into t (id,a) values (912,26);
+insert into t (id,a) values (912,27);
+insert into t (id,a) values (912,28);
+insert into t (id,a) values (912,29);
+insert into t (id,a) values (912,30);
+insert into t (id,a) values (912,31);
+insert into t (id,a) values (912,32);
+insert into t (id,a) values (912,33);
+insert into t (id,a) values (912,34);
+insert into t (id,a) values (912,35);
+insert into t (id,a) values (912,36);
+insert into t (id,a) values (912,37);
+insert into t (id,a) values (912,38);
+insert into t (id,a) values (912,39);
+insert into t (id,a) values (912,40);
+insert into t (id,a) values (912,41);
+insert into t (id,a) values (912,42);
+insert into t (id,a) values (912,43);
+insert into t (id,a) values (912,44);
+insert into t (id,a) values (912,45);
+insert into t (id,a) values (912,46);
+insert into t (id,a) values (912,47);
+insert into t (id,a) values (912,48);
+insert into t (id,a) values (912,49);
+insert into t (id,a) values (912,50);
+insert into t (id,a) values (912,51);
+insert into t (id,a) values (912,52);
+insert into t (id,a) values (912,53);
+insert into t (id,a) values (912,54);
+insert into t (id,a) values (912,55);
+insert into t (id,a) values (912,56);
+insert into t (id,a) values (912,57);
+insert into t (id,a) values (912,58);
+insert into t (id,a) values (912,59);
+insert into t (id,a) values (912,60);
+insert into t (id,a) values (912,61);
+insert into t (id,a) values (912,62);
+insert into t (id,a) values (912,63);
+insert into t (id,a) values (912,64);
+insert into t (id,a) values (912,65);
+insert into t (id,a) values (912,66);
+insert into t (id,a) values (912,67);
+insert into t (id,a) values (912,68);
+insert into t (id,a) values (912,69);
+insert into t (id,a) values (912,70);
+insert into t (id,a) values (912,71);
+insert into t (id,a) values (912,72);
+insert into t (id,a) values (912,73);
+insert into t (id,a) values (912,74);
+insert into t (id,a) values (912,75);
+insert into t (id,a) values (912,76);
+insert into t (id,a) values (912,77);
+insert into t (id,a) values (912,78);
+insert into t (id,a) values (912,79);
+insert into t (id,a) values (912,80);
+insert into t (id,a) values (912,81);
+insert into t (id,a) values (912,82);
+insert into t (id,a) values (912,83);
+insert into t (id,a) values (912,84);
+insert into t (id,a) values (912,85);
+insert into t (id,a) values (912,86);
+insert into t (id,a) values (912,87);
+insert into t (id,a) values (912,88);
+insert into t (id,a) values (912,89);
+insert into t (id,a) values (912,90);
+insert into t (id,a) values (912,91);
+insert into t (id,a) values (912,92);
+insert into t (id,a) values (912,93);
+insert into t (id,a) values (912,94);
+insert into t (id,a) values (912,95);
+insert into t (id,a) values (912,96);
+insert into t (id,a) values (912,97);
+insert into t (id,a) values (912,98);
+insert into t (id,a) values (912,99);
+insert into t (id,a) values (913,0);
+insert into t (id,a) values (913,1);
+insert into t (id,a) values (913,2);
+insert into t (id,a) values (913,3);
+insert into t (id,a) values (913,4);
+insert into t (id,a) values (913,5);
+insert into t (id,a) values (913,6);
+insert into t (id,a) values (913,7);
+insert into t (id,a) values (913,8);
+insert into t (id,a) values (913,9);
+insert into t (id,a) values (913,10);
+insert into t (id,a) values (913,11);
+insert into t (id,a) values (913,12);
+insert into t (id,a) values (913,13);
+insert into t (id,a) values (913,14);
+insert into t (id,a) values (913,15);
+insert into t (id,a) values (913,16);
+insert into t (id,a) values (913,17);
+insert into t (id,a) values (913,18);
+insert into t (id,a) values (913,19);
+insert into t (id,a) values (913,20);
+insert into t (id,a) values (913,21);
+insert into t (id,a) values (913,22);
+insert into t (id,a) values (913,23);
+insert into t (id,a) values (913,24);
+insert into t (id,a) values (913,25);
+insert into t (id,a) values (913,26);
+insert into t (id,a) values (913,27);
+insert into t (id,a) values (913,28);
+insert into t (id,a) values (913,29);
+insert into t (id,a) values (913,30);
+insert into t (id,a) values (913,31);
+insert into t (id,a) values (913,32);
+insert into t (id,a) values (913,33);
+insert into t (id,a) values (913,34);
+insert into t (id,a) values (913,35);
+insert into t (id,a) values (913,36);
+insert into t (id,a) values (913,37);
+insert into t (id,a) values (913,38);
+insert into t (id,a) values (913,39);
+insert into t (id,a) values (913,40);
+insert into t (id,a) values (913,41);
+insert into t (id,a) values (913,42);
+insert into t (id,a) values (913,43);
+insert into t (id,a) values (913,44);
+insert into t (id,a) values (913,45);
+insert into t (id,a) values (913,46);
+insert into t (id,a) values (913,47);
+insert into t (id,a) values (913,48);
+insert into t (id,a) values (913,49);
+insert into t (id,a) values (913,50);
+insert into t (id,a) values (913,51);
+insert into t (id,a) values (913,52);
+insert into t (id,a) values (913,53);
+insert into t (id,a) values (913,54);
+insert into t (id,a) values (913,55);
+insert into t (id,a) values (913,56);
+insert into t (id,a) values (913,57);
+insert into t (id,a) values (913,58);
+insert into t (id,a) values (913,59);
+insert into t (id,a) values (913,60);
+insert into t (id,a) values (913,61);
+insert into t (id,a) values (913,62);
+insert into t (id,a) values (913,63);
+insert into t (id,a) values (913,64);
+insert into t (id,a) values (913,65);
+insert into t (id,a) values (913,66);
+insert into t (id,a) values (913,67);
+insert into t (id,a) values (913,68);
+insert into t (id,a) values (913,69);
+insert into t (id,a) values (913,70);
+insert into t (id,a) values (913,71);
+insert into t (id,a) values (913,72);
+insert into t (id,a) values (913,73);
+insert into t (id,a) values (913,74);
+insert into t (id,a) values (913,75);
+insert into t (id,a) values (913,76);
+insert into t (id,a) values (913,77);
+insert into t (id,a) values (913,78);
+insert into t (id,a) values (913,79);
+insert into t (id,a) values (913,80);
+insert into t (id,a) values (913,81);
+insert into t (id,a) values (913,82);
+insert into t (id,a) values (913,83);
+insert into t (id,a) values (913,84);
+insert into t (id,a) values (913,85);
+insert into t (id,a) values (913,86);
+insert into t (id,a) values (913,87);
+insert into t (id,a) values (913,88);
+insert into t (id,a) values (913,89);
+insert into t (id,a) values (913,90);
+insert into t (id,a) values (913,91);
+insert into t (id,a) values (913,92);
+insert into t (id,a) values (913,93);
+insert into t (id,a) values (913,94);
+insert into t (id,a) values (913,95);
+insert into t (id,a) values (913,96);
+insert into t (id,a) values (913,97);
+insert into t (id,a) values (913,98);
+insert into t (id,a) values (913,99);
+insert into t (id,a) values (914,0);
+insert into t (id,a) values (914,1);
+insert into t (id,a) values (914,2);
+insert into t (id,a) values (914,3);
+insert into t (id,a) values (914,4);
+insert into t (id,a) values (914,5);
+insert into t (id,a) values (914,6);
+insert into t (id,a) values (914,7);
+insert into t (id,a) values (914,8);
+insert into t (id,a) values (914,9);
+insert into t (id,a) values (914,10);
+insert into t (id,a) values (914,11);
+insert into t (id,a) values (914,12);
+insert into t (id,a) values (914,13);
+insert into t (id,a) values (914,14);
+insert into t (id,a) values (914,15);
+insert into t (id,a) values (914,16);
+insert into t (id,a) values (914,17);
+insert into t (id,a) values (914,18);
+insert into t (id,a) values (914,19);
+insert into t (id,a) values (914,20);
+insert into t (id,a) values (914,21);
+insert into t (id,a) values (914,22);
+insert into t (id,a) values (914,23);
+insert into t (id,a) values (914,24);
+insert into t (id,a) values (914,25);
+insert into t (id,a) values (914,26);
+insert into t (id,a) values (914,27);
+insert into t (id,a) values (914,28);
+insert into t (id,a) values (914,29);
+insert into t (id,a) values (914,30);
+insert into t (id,a) values (914,31);
+insert into t (id,a) values (914,32);
+insert into t (id,a) values (914,33);
+insert into t (id,a) values (914,34);
+insert into t (id,a) values (914,35);
+insert into t (id,a) values (914,36);
+insert into t (id,a) values (914,37);
+insert into t (id,a) values (914,38);
+insert into t (id,a) values (914,39);
+insert into t (id,a) values (914,40);
+insert into t (id,a) values (914,41);
+insert into t (id,a) values (914,42);
+insert into t (id,a) values (914,43);
+insert into t (id,a) values (914,44);
+insert into t (id,a) values (914,45);
+insert into t (id,a) values (914,46);
+insert into t (id,a) values (914,47);
+insert into t (id,a) values (914,48);
+insert into t (id,a) values (914,49);
+insert into t (id,a) values (914,50);
+insert into t (id,a) values (914,51);
+insert into t (id,a) values (914,52);
+insert into t (id,a) values (914,53);
+insert into t (id,a) values (914,54);
+insert into t (id,a) values (914,55);
+insert into t (id,a) values (914,56);
+insert into t (id,a) values (914,57);
+insert into t (id,a) values (914,58);
+insert into t (id,a) values (914,59);
+insert into t (id,a) values (914,60);
+insert into t (id,a) values (914,61);
+insert into t (id,a) values (914,62);
+insert into t (id,a) values (914,63);
+insert into t (id,a) values (914,64);
+insert into t (id,a) values (914,65);
+insert into t (id,a) values (914,66);
+insert into t (id,a) values (914,67);
+insert into t (id,a) values (914,68);
+insert into t (id,a) values (914,69);
+insert into t (id,a) values (914,70);
+insert into t (id,a) values (914,71);
+insert into t (id,a) values (914,72);
+insert into t (id,a) values (914,73);
+insert into t (id,a) values (914,74);
+insert into t (id,a) values (914,75);
+insert into t (id,a) values (914,76);
+insert into t (id,a) values (914,77);
+insert into t (id,a) values (914,78);
+insert into t (id,a) values (914,79);
+insert into t (id,a) values (914,80);
+insert into t (id,a) values (914,81);
+insert into t (id,a) values (914,82);
+insert into t (id,a) values (914,83);
+insert into t (id,a) values (914,84);
+insert into t (id,a) values (914,85);
+insert into t (id,a) values (914,86);
+insert into t (id,a) values (914,87);
+insert into t (id,a) values (914,88);
+insert into t (id,a) values (914,89);
+insert into t (id,a) values (914,90);
+insert into t (id,a) values (914,91);
+insert into t (id,a) values (914,92);
+insert into t (id,a) values (914,93);
+insert into t (id,a) values (914,94);
+insert into t (id,a) values (914,95);
+insert into t (id,a) values (914,96);
+insert into t (id,a) values (914,97);
+insert into t (id,a) values (914,98);
+insert into t (id,a) values (914,99);
+insert into t (id,a) values (915,0);
+insert into t (id,a) values (915,1);
+insert into t (id,a) values (915,2);
+insert into t (id,a) values (915,3);
+insert into t (id,a) values (915,4);
+insert into t (id,a) values (915,5);
+insert into t (id,a) values (915,6);
+insert into t (id,a) values (915,7);
+insert into t (id,a) values (915,8);
+insert into t (id,a) values (915,9);
+insert into t (id,a) values (915,10);
+insert into t (id,a) values (915,11);
+insert into t (id,a) values (915,12);
+insert into t (id,a) values (915,13);
+insert into t (id,a) values (915,14);
+insert into t (id,a) values (915,15);
+insert into t (id,a) values (915,16);
+insert into t (id,a) values (915,17);
+insert into t (id,a) values (915,18);
+insert into t (id,a) values (915,19);
+insert into t (id,a) values (915,20);
+insert into t (id,a) values (915,21);
+insert into t (id,a) values (915,22);
+insert into t (id,a) values (915,23);
+insert into t (id,a) values (915,24);
+insert into t (id,a) values (915,25);
+insert into t (id,a) values (915,26);
+insert into t (id,a) values (915,27);
+insert into t (id,a) values (915,28);
+insert into t (id,a) values (915,29);
+insert into t (id,a) values (915,30);
+insert into t (id,a) values (915,31);
+insert into t (id,a) values (915,32);
+insert into t (id,a) values (915,33);
+insert into t (id,a) values (915,34);
+insert into t (id,a) values (915,35);
+insert into t (id,a) values (915,36);
+insert into t (id,a) values (915,37);
+insert into t (id,a) values (915,38);
+insert into t (id,a) values (915,39);
+insert into t (id,a) values (915,40);
+insert into t (id,a) values (915,41);
+insert into t (id,a) values (915,42);
+insert into t (id,a) values (915,43);
+insert into t (id,a) values (915,44);
+insert into t (id,a) values (915,45);
+insert into t (id,a) values (915,46);
+insert into t (id,a) values (915,47);
+insert into t (id,a) values (915,48);
+insert into t (id,a) values (915,49);
+insert into t (id,a) values (915,50);
+insert into t (id,a) values (915,51);
+insert into t (id,a) values (915,52);
+insert into t (id,a) values (915,53);
+insert into t (id,a) values (915,54);
+insert into t (id,a) values (915,55);
+insert into t (id,a) values (915,56);
+insert into t (id,a) values (915,57);
+insert into t (id,a) values (915,58);
+insert into t (id,a) values (915,59);
+insert into t (id,a) values (915,60);
+insert into t (id,a) values (915,61);
+insert into t (id,a) values (915,62);
+insert into t (id,a) values (915,63);
+insert into t (id,a) values (915,64);
+insert into t (id,a) values (915,65);
+insert into t (id,a) values (915,66);
+insert into t (id,a) values (915,67);
+insert into t (id,a) values (915,68);
+insert into t (id,a) values (915,69);
+insert into t (id,a) values (915,70);
+insert into t (id,a) values (915,71);
+insert into t (id,a) values (915,72);
+insert into t (id,a) values (915,73);
+insert into t (id,a) values (915,74);
+insert into t (id,a) values (915,75);
+insert into t (id,a) values (915,76);
+insert into t (id,a) values (915,77);
+insert into t (id,a) values (915,78);
+insert into t (id,a) values (915,79);
+insert into t (id,a) values (915,80);
+insert into t (id,a) values (915,81);
+insert into t (id,a) values (915,82);
+insert into t (id,a) values (915,83);
+insert into t (id,a) values (915,84);
+insert into t (id,a) values (915,85);
+insert into t (id,a) values (915,86);
+insert into t (id,a) values (915,87);
+insert into t (id,a) values (915,88);
+insert into t (id,a) values (915,89);
+insert into t (id,a) values (915,90);
+insert into t (id,a) values (915,91);
+insert into t (id,a) values (915,92);
+insert into t (id,a) values (915,93);
+insert into t (id,a) values (915,94);
+insert into t (id,a) values (915,95);
+insert into t (id,a) values (915,96);
+insert into t (id,a) values (915,97);
+insert into t (id,a) values (915,98);
+insert into t (id,a) values (915,99);
+insert into t (id,a) values (916,0);
+insert into t (id,a) values (916,1);
+insert into t (id,a) values (916,2);
+insert into t (id,a) values (916,3);
+insert into t (id,a) values (916,4);
+insert into t (id,a) values (916,5);
+insert into t (id,a) values (916,6);
+insert into t (id,a) values (916,7);
+insert into t (id,a) values (916,8);
+insert into t (id,a) values (916,9);
+insert into t (id,a) values (916,10);
+insert into t (id,a) values (916,11);
+insert into t (id,a) values (916,12);
+insert into t (id,a) values (916,13);
+insert into t (id,a) values (916,14);
+insert into t (id,a) values (916,15);
+insert into t (id,a) values (916,16);
+insert into t (id,a) values (916,17);
+insert into t (id,a) values (916,18);
+insert into t (id,a) values (916,19);
+insert into t (id,a) values (916,20);
+insert into t (id,a) values (916,21);
+insert into t (id,a) values (916,22);
+insert into t (id,a) values (916,23);
+insert into t (id,a) values (916,24);
+insert into t (id,a) values (916,25);
+insert into t (id,a) values (916,26);
+insert into t (id,a) values (916,27);
+insert into t (id,a) values (916,28);
+insert into t (id,a) values (916,29);
+insert into t (id,a) values (916,30);
+insert into t (id,a) values (916,31);
+insert into t (id,a) values (916,32);
+insert into t (id,a) values (916,33);
+insert into t (id,a) values (916,34);
+insert into t (id,a) values (916,35);
+insert into t (id,a) values (916,36);
+insert into t (id,a) values (916,37);
+insert into t (id,a) values (916,38);
+insert into t (id,a) values (916,39);
+insert into t (id,a) values (916,40);
+insert into t (id,a) values (916,41);
+insert into t (id,a) values (916,42);
+insert into t (id,a) values (916,43);
+insert into t (id,a) values (916,44);
+insert into t (id,a) values (916,45);
+insert into t (id,a) values (916,46);
+insert into t (id,a) values (916,47);
+insert into t (id,a) values (916,48);
+insert into t (id,a) values (916,49);
+insert into t (id,a) values (916,50);
+insert into t (id,a) values (916,51);
+insert into t (id,a) values (916,52);
+insert into t (id,a) values (916,53);
+insert into t (id,a) values (916,54);
+insert into t (id,a) values (916,55);
+insert into t (id,a) values (916,56);
+insert into t (id,a) values (916,57);
+insert into t (id,a) values (916,58);
+insert into t (id,a) values (916,59);
+insert into t (id,a) values (916,60);
+insert into t (id,a) values (916,61);
+insert into t (id,a) values (916,62);
+insert into t (id,a) values (916,63);
+insert into t (id,a) values (916,64);
+insert into t (id,a) values (916,65);
+insert into t (id,a) values (916,66);
+insert into t (id,a) values (916,67);
+insert into t (id,a) values (916,68);
+insert into t (id,a) values (916,69);
+insert into t (id,a) values (916,70);
+insert into t (id,a) values (916,71);
+insert into t (id,a) values (916,72);
+insert into t (id,a) values (916,73);
+insert into t (id,a) values (916,74);
+insert into t (id,a) values (916,75);
+insert into t (id,a) values (916,76);
+insert into t (id,a) values (916,77);
+insert into t (id,a) values (916,78);
+insert into t (id,a) values (916,79);
+insert into t (id,a) values (916,80);
+insert into t (id,a) values (916,81);
+insert into t (id,a) values (916,82);
+insert into t (id,a) values (916,83);
+insert into t (id,a) values (916,84);
+insert into t (id,a) values (916,85);
+insert into t (id,a) values (916,86);
+insert into t (id,a) values (916,87);
+insert into t (id,a) values (916,88);
+insert into t (id,a) values (916,89);
+insert into t (id,a) values (916,90);
+insert into t (id,a) values (916,91);
+insert into t (id,a) values (916,92);
+insert into t (id,a) values (916,93);
+insert into t (id,a) values (916,94);
+insert into t (id,a) values (916,95);
+insert into t (id,a) values (916,96);
+insert into t (id,a) values (916,97);
+insert into t (id,a) values (916,98);
+insert into t (id,a) values (916,99);
+insert into t (id,a) values (917,0);
+insert into t (id,a) values (917,1);
+insert into t (id,a) values (917,2);
+insert into t (id,a) values (917,3);
+insert into t (id,a) values (917,4);
+insert into t (id,a) values (917,5);
+insert into t (id,a) values (917,6);
+insert into t (id,a) values (917,7);
+insert into t (id,a) values (917,8);
+insert into t (id,a) values (917,9);
+insert into t (id,a) values (917,10);
+insert into t (id,a) values (917,11);
+insert into t (id,a) values (917,12);
+insert into t (id,a) values (917,13);
+insert into t (id,a) values (917,14);
+insert into t (id,a) values (917,15);
+insert into t (id,a) values (917,16);
+insert into t (id,a) values (917,17);
+insert into t (id,a) values (917,18);
+insert into t (id,a) values (917,19);
+insert into t (id,a) values (917,20);
+insert into t (id,a) values (917,21);
+insert into t (id,a) values (917,22);
+insert into t (id,a) values (917,23);
+insert into t (id,a) values (917,24);
+insert into t (id,a) values (917,25);
+insert into t (id,a) values (917,26);
+insert into t (id,a) values (917,27);
+insert into t (id,a) values (917,28);
+insert into t (id,a) values (917,29);
+insert into t (id,a) values (917,30);
+insert into t (id,a) values (917,31);
+insert into t (id,a) values (917,32);
+insert into t (id,a) values (917,33);
+insert into t (id,a) values (917,34);
+insert into t (id,a) values (917,35);
+insert into t (id,a) values (917,36);
+insert into t (id,a) values (917,37);
+insert into t (id,a) values (917,38);
+insert into t (id,a) values (917,39);
+insert into t (id,a) values (917,40);
+insert into t (id,a) values (917,41);
+insert into t (id,a) values (917,42);
+insert into t (id,a) values (917,43);
+insert into t (id,a) values (917,44);
+insert into t (id,a) values (917,45);
+insert into t (id,a) values (917,46);
+insert into t (id,a) values (917,47);
+insert into t (id,a) values (917,48);
+insert into t (id,a) values (917,49);
+insert into t (id,a) values (917,50);
+insert into t (id,a) values (917,51);
+insert into t (id,a) values (917,52);
+insert into t (id,a) values (917,53);
+insert into t (id,a) values (917,54);
+insert into t (id,a) values (917,55);
+insert into t (id,a) values (917,56);
+insert into t (id,a) values (917,57);
+insert into t (id,a) values (917,58);
+insert into t (id,a) values (917,59);
+insert into t (id,a) values (917,60);
+insert into t (id,a) values (917,61);
+insert into t (id,a) values (917,62);
+insert into t (id,a) values (917,63);
+insert into t (id,a) values (917,64);
+insert into t (id,a) values (917,65);
+insert into t (id,a) values (917,66);
+insert into t (id,a) values (917,67);
+insert into t (id,a) values (917,68);
+insert into t (id,a) values (917,69);
+insert into t (id,a) values (917,70);
+insert into t (id,a) values (917,71);
+insert into t (id,a) values (917,72);
+insert into t (id,a) values (917,73);
+insert into t (id,a) values (917,74);
+insert into t (id,a) values (917,75);
+insert into t (id,a) values (917,76);
+insert into t (id,a) values (917,77);
+insert into t (id,a) values (917,78);
+insert into t (id,a) values (917,79);
+insert into t (id,a) values (917,80);
+insert into t (id,a) values (917,81);
+insert into t (id,a) values (917,82);
+insert into t (id,a) values (917,83);
+insert into t (id,a) values (917,84);
+insert into t (id,a) values (917,85);
+insert into t (id,a) values (917,86);
+insert into t (id,a) values (917,87);
+insert into t (id,a) values (917,88);
+insert into t (id,a) values (917,89);
+insert into t (id,a) values (917,90);
+insert into t (id,a) values (917,91);
+insert into t (id,a) values (917,92);
+insert into t (id,a) values (917,93);
+insert into t (id,a) values (917,94);
+insert into t (id,a) values (917,95);
+insert into t (id,a) values (917,96);
+insert into t (id,a) values (917,97);
+insert into t (id,a) values (917,98);
+insert into t (id,a) values (917,99);
+insert into t (id,a) values (918,0);
+insert into t (id,a) values (918,1);
+insert into t (id,a) values (918,2);
+insert into t (id,a) values (918,3);
+insert into t (id,a) values (918,4);
+insert into t (id,a) values (918,5);
+insert into t (id,a) values (918,6);
+insert into t (id,a) values (918,7);
+insert into t (id,a) values (918,8);
+insert into t (id,a) values (918,9);
+insert into t (id,a) values (918,10);
+insert into t (id,a) values (918,11);
+insert into t (id,a) values (918,12);
+insert into t (id,a) values (918,13);
+insert into t (id,a) values (918,14);
+insert into t (id,a) values (918,15);
+insert into t (id,a) values (918,16);
+insert into t (id,a) values (918,17);
+insert into t (id,a) values (918,18);
+insert into t (id,a) values (918,19);
+insert into t (id,a) values (918,20);
+insert into t (id,a) values (918,21);
+insert into t (id,a) values (918,22);
+insert into t (id,a) values (918,23);
+insert into t (id,a) values (918,24);
+insert into t (id,a) values (918,25);
+insert into t (id,a) values (918,26);
+insert into t (id,a) values (918,27);
+insert into t (id,a) values (918,28);
+insert into t (id,a) values (918,29);
+insert into t (id,a) values (918,30);
+insert into t (id,a) values (918,31);
+insert into t (id,a) values (918,32);
+insert into t (id,a) values (918,33);
+insert into t (id,a) values (918,34);
+insert into t (id,a) values (918,35);
+insert into t (id,a) values (918,36);
+insert into t (id,a) values (918,37);
+insert into t (id,a) values (918,38);
+insert into t (id,a) values (918,39);
+insert into t (id,a) values (918,40);
+insert into t (id,a) values (918,41);
+insert into t (id,a) values (918,42);
+insert into t (id,a) values (918,43);
+insert into t (id,a) values (918,44);
+insert into t (id,a) values (918,45);
+insert into t (id,a) values (918,46);
+insert into t (id,a) values (918,47);
+insert into t (id,a) values (918,48);
+insert into t (id,a) values (918,49);
+insert into t (id,a) values (918,50);
+insert into t (id,a) values (918,51);
+insert into t (id,a) values (918,52);
+insert into t (id,a) values (918,53);
+insert into t (id,a) values (918,54);
+insert into t (id,a) values (918,55);
+insert into t (id,a) values (918,56);
+insert into t (id,a) values (918,57);
+insert into t (id,a) values (918,58);
+insert into t (id,a) values (918,59);
+insert into t (id,a) values (918,60);
+insert into t (id,a) values (918,61);
+insert into t (id,a) values (918,62);
+insert into t (id,a) values (918,63);
+insert into t (id,a) values (918,64);
+insert into t (id,a) values (918,65);
+insert into t (id,a) values (918,66);
+insert into t (id,a) values (918,67);
+insert into t (id,a) values (918,68);
+insert into t (id,a) values (918,69);
+insert into t (id,a) values (918,70);
+insert into t (id,a) values (918,71);
+insert into t (id,a) values (918,72);
+insert into t (id,a) values (918,73);
+insert into t (id,a) values (918,74);
+insert into t (id,a) values (918,75);
+insert into t (id,a) values (918,76);
+insert into t (id,a) values (918,77);
+insert into t (id,a) values (918,78);
+insert into t (id,a) values (918,79);
+insert into t (id,a) values (918,80);
+insert into t (id,a) values (918,81);
+insert into t (id,a) values (918,82);
+insert into t (id,a) values (918,83);
+insert into t (id,a) values (918,84);
+insert into t (id,a) values (918,85);
+insert into t (id,a) values (918,86);
+insert into t (id,a) values (918,87);
+insert into t (id,a) values (918,88);
+insert into t (id,a) values (918,89);
+insert into t (id,a) values (918,90);
+insert into t (id,a) values (918,91);
+insert into t (id,a) values (918,92);
+insert into t (id,a) values (918,93);
+insert into t (id,a) values (918,94);
+insert into t (id,a) values (918,95);
+insert into t (id,a) values (918,96);
+insert into t (id,a) values (918,97);
+insert into t (id,a) values (918,98);
+insert into t (id,a) values (918,99);
+insert into t (id,a) values (919,0);
+insert into t (id,a) values (919,1);
+insert into t (id,a) values (919,2);
+insert into t (id,a) values (919,3);
+insert into t (id,a) values (919,4);
+insert into t (id,a) values (919,5);
+insert into t (id,a) values (919,6);
+insert into t (id,a) values (919,7);
+insert into t (id,a) values (919,8);
+insert into t (id,a) values (919,9);
+insert into t (id,a) values (919,10);
+insert into t (id,a) values (919,11);
+insert into t (id,a) values (919,12);
+insert into t (id,a) values (919,13);
+insert into t (id,a) values (919,14);
+insert into t (id,a) values (919,15);
+insert into t (id,a) values (919,16);
+insert into t (id,a) values (919,17);
+insert into t (id,a) values (919,18);
+insert into t (id,a) values (919,19);
+insert into t (id,a) values (919,20);
+insert into t (id,a) values (919,21);
+insert into t (id,a) values (919,22);
+insert into t (id,a) values (919,23);
+insert into t (id,a) values (919,24);
+insert into t (id,a) values (919,25);
+insert into t (id,a) values (919,26);
+insert into t (id,a) values (919,27);
+insert into t (id,a) values (919,28);
+insert into t (id,a) values (919,29);
+insert into t (id,a) values (919,30);
+insert into t (id,a) values (919,31);
+insert into t (id,a) values (919,32);
+insert into t (id,a) values (919,33);
+insert into t (id,a) values (919,34);
+insert into t (id,a) values (919,35);
+insert into t (id,a) values (919,36);
+insert into t (id,a) values (919,37);
+insert into t (id,a) values (919,38);
+insert into t (id,a) values (919,39);
+insert into t (id,a) values (919,40);
+insert into t (id,a) values (919,41);
+insert into t (id,a) values (919,42);
+insert into t (id,a) values (919,43);
+insert into t (id,a) values (919,44);
+insert into t (id,a) values (919,45);
+insert into t (id,a) values (919,46);
+insert into t (id,a) values (919,47);
+insert into t (id,a) values (919,48);
+insert into t (id,a) values (919,49);
+insert into t (id,a) values (919,50);
+insert into t (id,a) values (919,51);
+insert into t (id,a) values (919,52);
+insert into t (id,a) values (919,53);
+insert into t (id,a) values (919,54);
+insert into t (id,a) values (919,55);
+insert into t (id,a) values (919,56);
+insert into t (id,a) values (919,57);
+insert into t (id,a) values (919,58);
+insert into t (id,a) values (919,59);
+insert into t (id,a) values (919,60);
+insert into t (id,a) values (919,61);
+insert into t (id,a) values (919,62);
+insert into t (id,a) values (919,63);
+insert into t (id,a) values (919,64);
+insert into t (id,a) values (919,65);
+insert into t (id,a) values (919,66);
+insert into t (id,a) values (919,67);
+insert into t (id,a) values (919,68);
+insert into t (id,a) values (919,69);
+insert into t (id,a) values (919,70);
+insert into t (id,a) values (919,71);
+insert into t (id,a) values (919,72);
+insert into t (id,a) values (919,73);
+insert into t (id,a) values (919,74);
+insert into t (id,a) values (919,75);
+insert into t (id,a) values (919,76);
+insert into t (id,a) values (919,77);
+insert into t (id,a) values (919,78);
+insert into t (id,a) values (919,79);
+insert into t (id,a) values (919,80);
+insert into t (id,a) values (919,81);
+insert into t (id,a) values (919,82);
+insert into t (id,a) values (919,83);
+insert into t (id,a) values (919,84);
+insert into t (id,a) values (919,85);
+insert into t (id,a) values (919,86);
+insert into t (id,a) values (919,87);
+insert into t (id,a) values (919,88);
+insert into t (id,a) values (919,89);
+insert into t (id,a) values (919,90);
+insert into t (id,a) values (919,91);
+insert into t (id,a) values (919,92);
+insert into t (id,a) values (919,93);
+insert into t (id,a) values (919,94);
+insert into t (id,a) values (919,95);
+insert into t (id,a) values (919,96);
+insert into t (id,a) values (919,97);
+insert into t (id,a) values (919,98);
+insert into t (id,a) values (919,99);
+insert into t (id,a) values (920,0);
+insert into t (id,a) values (920,1);
+insert into t (id,a) values (920,2);
+insert into t (id,a) values (920,3);
+insert into t (id,a) values (920,4);
+insert into t (id,a) values (920,5);
+insert into t (id,a) values (920,6);
+insert into t (id,a) values (920,7);
+insert into t (id,a) values (920,8);
+insert into t (id,a) values (920,9);
+insert into t (id,a) values (920,10);
+insert into t (id,a) values (920,11);
+insert into t (id,a) values (920,12);
+insert into t (id,a) values (920,13);
+insert into t (id,a) values (920,14);
+insert into t (id,a) values (920,15);
+insert into t (id,a) values (920,16);
+insert into t (id,a) values (920,17);
+insert into t (id,a) values (920,18);
+insert into t (id,a) values (920,19);
+insert into t (id,a) values (920,20);
+insert into t (id,a) values (920,21);
+insert into t (id,a) values (920,22);
+insert into t (id,a) values (920,23);
+insert into t (id,a) values (920,24);
+insert into t (id,a) values (920,25);
+insert into t (id,a) values (920,26);
+insert into t (id,a) values (920,27);
+insert into t (id,a) values (920,28);
+insert into t (id,a) values (920,29);
+insert into t (id,a) values (920,30);
+insert into t (id,a) values (920,31);
+insert into t (id,a) values (920,32);
+insert into t (id,a) values (920,33);
+insert into t (id,a) values (920,34);
+insert into t (id,a) values (920,35);
+insert into t (id,a) values (920,36);
+insert into t (id,a) values (920,37);
+insert into t (id,a) values (920,38);
+insert into t (id,a) values (920,39);
+insert into t (id,a) values (920,40);
+insert into t (id,a) values (920,41);
+insert into t (id,a) values (920,42);
+insert into t (id,a) values (920,43);
+insert into t (id,a) values (920,44);
+insert into t (id,a) values (920,45);
+insert into t (id,a) values (920,46);
+insert into t (id,a) values (920,47);
+insert into t (id,a) values (920,48);
+insert into t (id,a) values (920,49);
+insert into t (id,a) values (920,50);
+insert into t (id,a) values (920,51);
+insert into t (id,a) values (920,52);
+insert into t (id,a) values (920,53);
+insert into t (id,a) values (920,54);
+insert into t (id,a) values (920,55);
+insert into t (id,a) values (920,56);
+insert into t (id,a) values (920,57);
+insert into t (id,a) values (920,58);
+insert into t (id,a) values (920,59);
+insert into t (id,a) values (920,60);
+insert into t (id,a) values (920,61);
+insert into t (id,a) values (920,62);
+insert into t (id,a) values (920,63);
+insert into t (id,a) values (920,64);
+insert into t (id,a) values (920,65);
+insert into t (id,a) values (920,66);
+insert into t (id,a) values (920,67);
+insert into t (id,a) values (920,68);
+insert into t (id,a) values (920,69);
+insert into t (id,a) values (920,70);
+insert into t (id,a) values (920,71);
+insert into t (id,a) values (920,72);
+insert into t (id,a) values (920,73);
+insert into t (id,a) values (920,74);
+insert into t (id,a) values (920,75);
+insert into t (id,a) values (920,76);
+insert into t (id,a) values (920,77);
+insert into t (id,a) values (920,78);
+insert into t (id,a) values (920,79);
+insert into t (id,a) values (920,80);
+insert into t (id,a) values (920,81);
+insert into t (id,a) values (920,82);
+insert into t (id,a) values (920,83);
+insert into t (id,a) values (920,84);
+insert into t (id,a) values (920,85);
+insert into t (id,a) values (920,86);
+insert into t (id,a) values (920,87);
+insert into t (id,a) values (920,88);
+insert into t (id,a) values (920,89);
+insert into t (id,a) values (920,90);
+insert into t (id,a) values (920,91);
+insert into t (id,a) values (920,92);
+insert into t (id,a) values (920,93);
+insert into t (id,a) values (920,94);
+insert into t (id,a) values (920,95);
+insert into t (id,a) values (920,96);
+insert into t (id,a) values (920,97);
+insert into t (id,a) values (920,98);
+insert into t (id,a) values (920,99);
+insert into t (id,a) values (921,0);
+insert into t (id,a) values (921,1);
+insert into t (id,a) values (921,2);
+insert into t (id,a) values (921,3);
+insert into t (id,a) values (921,4);
+insert into t (id,a) values (921,5);
+insert into t (id,a) values (921,6);
+insert into t (id,a) values (921,7);
+insert into t (id,a) values (921,8);
+insert into t (id,a) values (921,9);
+insert into t (id,a) values (921,10);
+insert into t (id,a) values (921,11);
+insert into t (id,a) values (921,12);
+insert into t (id,a) values (921,13);
+insert into t (id,a) values (921,14);
+insert into t (id,a) values (921,15);
+insert into t (id,a) values (921,16);
+insert into t (id,a) values (921,17);
+insert into t (id,a) values (921,18);
+insert into t (id,a) values (921,19);
+insert into t (id,a) values (921,20);
+insert into t (id,a) values (921,21);
+insert into t (id,a) values (921,22);
+insert into t (id,a) values (921,23);
+insert into t (id,a) values (921,24);
+insert into t (id,a) values (921,25);
+insert into t (id,a) values (921,26);
+insert into t (id,a) values (921,27);
+insert into t (id,a) values (921,28);
+insert into t (id,a) values (921,29);
+insert into t (id,a) values (921,30);
+insert into t (id,a) values (921,31);
+insert into t (id,a) values (921,32);
+insert into t (id,a) values (921,33);
+insert into t (id,a) values (921,34);
+insert into t (id,a) values (921,35);
+insert into t (id,a) values (921,36);
+insert into t (id,a) values (921,37);
+insert into t (id,a) values (921,38);
+insert into t (id,a) values (921,39);
+insert into t (id,a) values (921,40);
+insert into t (id,a) values (921,41);
+insert into t (id,a) values (921,42);
+insert into t (id,a) values (921,43);
+insert into t (id,a) values (921,44);
+insert into t (id,a) values (921,45);
+insert into t (id,a) values (921,46);
+insert into t (id,a) values (921,47);
+insert into t (id,a) values (921,48);
+insert into t (id,a) values (921,49);
+insert into t (id,a) values (921,50);
+insert into t (id,a) values (921,51);
+insert into t (id,a) values (921,52);
+insert into t (id,a) values (921,53);
+insert into t (id,a) values (921,54);
+insert into t (id,a) values (921,55);
+insert into t (id,a) values (921,56);
+insert into t (id,a) values (921,57);
+insert into t (id,a) values (921,58);
+insert into t (id,a) values (921,59);
+insert into t (id,a) values (921,60);
+insert into t (id,a) values (921,61);
+insert into t (id,a) values (921,62);
+insert into t (id,a) values (921,63);
+insert into t (id,a) values (921,64);
+insert into t (id,a) values (921,65);
+insert into t (id,a) values (921,66);
+insert into t (id,a) values (921,67);
+insert into t (id,a) values (921,68);
+insert into t (id,a) values (921,69);
+insert into t (id,a) values (921,70);
+insert into t (id,a) values (921,71);
+insert into t (id,a) values (921,72);
+insert into t (id,a) values (921,73);
+insert into t (id,a) values (921,74);
+insert into t (id,a) values (921,75);
+insert into t (id,a) values (921,76);
+insert into t (id,a) values (921,77);
+insert into t (id,a) values (921,78);
+insert into t (id,a) values (921,79);
+insert into t (id,a) values (921,80);
+insert into t (id,a) values (921,81);
+insert into t (id,a) values (921,82);
+insert into t (id,a) values (921,83);
+insert into t (id,a) values (921,84);
+insert into t (id,a) values (921,85);
+insert into t (id,a) values (921,86);
+insert into t (id,a) values (921,87);
+insert into t (id,a) values (921,88);
+insert into t (id,a) values (921,89);
+insert into t (id,a) values (921,90);
+insert into t (id,a) values (921,91);
+insert into t (id,a) values (921,92);
+insert into t (id,a) values (921,93);
+insert into t (id,a) values (921,94);
+insert into t (id,a) values (921,95);
+insert into t (id,a) values (921,96);
+insert into t (id,a) values (921,97);
+insert into t (id,a) values (921,98);
+insert into t (id,a) values (921,99);
+insert into t (id,a) values (922,0);
+insert into t (id,a) values (922,1);
+insert into t (id,a) values (922,2);
+insert into t (id,a) values (922,3);
+insert into t (id,a) values (922,4);
+insert into t (id,a) values (922,5);
+insert into t (id,a) values (922,6);
+insert into t (id,a) values (922,7);
+insert into t (id,a) values (922,8);
+insert into t (id,a) values (922,9);
+insert into t (id,a) values (922,10);
+insert into t (id,a) values (922,11);
+insert into t (id,a) values (922,12);
+insert into t (id,a) values (922,13);
+insert into t (id,a) values (922,14);
+insert into t (id,a) values (922,15);
+insert into t (id,a) values (922,16);
+insert into t (id,a) values (922,17);
+insert into t (id,a) values (922,18);
+insert into t (id,a) values (922,19);
+insert into t (id,a) values (922,20);
+insert into t (id,a) values (922,21);
+insert into t (id,a) values (922,22);
+insert into t (id,a) values (922,23);
+insert into t (id,a) values (922,24);
+insert into t (id,a) values (922,25);
+insert into t (id,a) values (922,26);
+insert into t (id,a) values (922,27);
+insert into t (id,a) values (922,28);
+insert into t (id,a) values (922,29);
+insert into t (id,a) values (922,30);
+insert into t (id,a) values (922,31);
+insert into t (id,a) values (922,32);
+insert into t (id,a) values (922,33);
+insert into t (id,a) values (922,34);
+insert into t (id,a) values (922,35);
+insert into t (id,a) values (922,36);
+insert into t (id,a) values (922,37);
+insert into t (id,a) values (922,38);
+insert into t (id,a) values (922,39);
+insert into t (id,a) values (922,40);
+insert into t (id,a) values (922,41);
+insert into t (id,a) values (922,42);
+insert into t (id,a) values (922,43);
+insert into t (id,a) values (922,44);
+insert into t (id,a) values (922,45);
+insert into t (id,a) values (922,46);
+insert into t (id,a) values (922,47);
+insert into t (id,a) values (922,48);
+insert into t (id,a) values (922,49);
+insert into t (id,a) values (922,50);
+insert into t (id,a) values (922,51);
+insert into t (id,a) values (922,52);
+insert into t (id,a) values (922,53);
+insert into t (id,a) values (922,54);
+insert into t (id,a) values (922,55);
+insert into t (id,a) values (922,56);
+insert into t (id,a) values (922,57);
+insert into t (id,a) values (922,58);
+insert into t (id,a) values (922,59);
+insert into t (id,a) values (922,60);
+insert into t (id,a) values (922,61);
+insert into t (id,a) values (922,62);
+insert into t (id,a) values (922,63);
+insert into t (id,a) values (922,64);
+insert into t (id,a) values (922,65);
+insert into t (id,a) values (922,66);
+insert into t (id,a) values (922,67);
+insert into t (id,a) values (922,68);
+insert into t (id,a) values (922,69);
+insert into t (id,a) values (922,70);
+insert into t (id,a) values (922,71);
+insert into t (id,a) values (922,72);
+insert into t (id,a) values (922,73);
+insert into t (id,a) values (922,74);
+insert into t (id,a) values (922,75);
+insert into t (id,a) values (922,76);
+insert into t (id,a) values (922,77);
+insert into t (id,a) values (922,78);
+insert into t (id,a) values (922,79);
+insert into t (id,a) values (922,80);
+insert into t (id,a) values (922,81);
+insert into t (id,a) values (922,82);
+insert into t (id,a) values (922,83);
+insert into t (id,a) values (922,84);
+insert into t (id,a) values (922,85);
+insert into t (id,a) values (922,86);
+insert into t (id,a) values (922,87);
+insert into t (id,a) values (922,88);
+insert into t (id,a) values (922,89);
+insert into t (id,a) values (922,90);
+insert into t (id,a) values (922,91);
+insert into t (id,a) values (922,92);
+insert into t (id,a) values (922,93);
+insert into t (id,a) values (922,94);
+insert into t (id,a) values (922,95);
+insert into t (id,a) values (922,96);
+insert into t (id,a) values (922,97);
+insert into t (id,a) values (922,98);
+insert into t (id,a) values (922,99);
+insert into t (id,a) values (923,0);
+insert into t (id,a) values (923,1);
+insert into t (id,a) values (923,2);
+insert into t (id,a) values (923,3);
+insert into t (id,a) values (923,4);
+insert into t (id,a) values (923,5);
+insert into t (id,a) values (923,6);
+insert into t (id,a) values (923,7);
+insert into t (id,a) values (923,8);
+insert into t (id,a) values (923,9);
+insert into t (id,a) values (923,10);
+insert into t (id,a) values (923,11);
+insert into t (id,a) values (923,12);
+insert into t (id,a) values (923,13);
+insert into t (id,a) values (923,14);
+insert into t (id,a) values (923,15);
+insert into t (id,a) values (923,16);
+insert into t (id,a) values (923,17);
+insert into t (id,a) values (923,18);
+insert into t (id,a) values (923,19);
+insert into t (id,a) values (923,20);
+insert into t (id,a) values (923,21);
+insert into t (id,a) values (923,22);
+insert into t (id,a) values (923,23);
+insert into t (id,a) values (923,24);
+insert into t (id,a) values (923,25);
+insert into t (id,a) values (923,26);
+insert into t (id,a) values (923,27);
+insert into t (id,a) values (923,28);
+insert into t (id,a) values (923,29);
+insert into t (id,a) values (923,30);
+insert into t (id,a) values (923,31);
+insert into t (id,a) values (923,32);
+insert into t (id,a) values (923,33);
+insert into t (id,a) values (923,34);
+insert into t (id,a) values (923,35);
+insert into t (id,a) values (923,36);
+insert into t (id,a) values (923,37);
+insert into t (id,a) values (923,38);
+insert into t (id,a) values (923,39);
+insert into t (id,a) values (923,40);
+insert into t (id,a) values (923,41);
+insert into t (id,a) values (923,42);
+insert into t (id,a) values (923,43);
+insert into t (id,a) values (923,44);
+insert into t (id,a) values (923,45);
+insert into t (id,a) values (923,46);
+insert into t (id,a) values (923,47);
+insert into t (id,a) values (923,48);
+insert into t (id,a) values (923,49);
+insert into t (id,a) values (923,50);
+insert into t (id,a) values (923,51);
+insert into t (id,a) values (923,52);
+insert into t (id,a) values (923,53);
+insert into t (id,a) values (923,54);
+insert into t (id,a) values (923,55);
+insert into t (id,a) values (923,56);
+insert into t (id,a) values (923,57);
+insert into t (id,a) values (923,58);
+insert into t (id,a) values (923,59);
+insert into t (id,a) values (923,60);
+insert into t (id,a) values (923,61);
+insert into t (id,a) values (923,62);
+insert into t (id,a) values (923,63);
+insert into t (id,a) values (923,64);
+insert into t (id,a) values (923,65);
+insert into t (id,a) values (923,66);
+insert into t (id,a) values (923,67);
+insert into t (id,a) values (923,68);
+insert into t (id,a) values (923,69);
+insert into t (id,a) values (923,70);
+insert into t (id,a) values (923,71);
+insert into t (id,a) values (923,72);
+insert into t (id,a) values (923,73);
+insert into t (id,a) values (923,74);
+insert into t (id,a) values (923,75);
+insert into t (id,a) values (923,76);
+insert into t (id,a) values (923,77);
+insert into t (id,a) values (923,78);
+insert into t (id,a) values (923,79);
+insert into t (id,a) values (923,80);
+insert into t (id,a) values (923,81);
+insert into t (id,a) values (923,82);
+insert into t (id,a) values (923,83);
+insert into t (id,a) values (923,84);
+insert into t (id,a) values (923,85);
+insert into t (id,a) values (923,86);
+insert into t (id,a) values (923,87);
+insert into t (id,a) values (923,88);
+insert into t (id,a) values (923,89);
+insert into t (id,a) values (923,90);
+insert into t (id,a) values (923,91);
+insert into t (id,a) values (923,92);
+insert into t (id,a) values (923,93);
+insert into t (id,a) values (923,94);
+insert into t (id,a) values (923,95);
+insert into t (id,a) values (923,96);
+insert into t (id,a) values (923,97);
+insert into t (id,a) values (923,98);
+insert into t (id,a) values (923,99);
+insert into t (id,a) values (924,0);
+insert into t (id,a) values (924,1);
+insert into t (id,a) values (924,2);
+insert into t (id,a) values (924,3);
+insert into t (id,a) values (924,4);
+insert into t (id,a) values (924,5);
+insert into t (id,a) values (924,6);
+insert into t (id,a) values (924,7);
+insert into t (id,a) values (924,8);
+insert into t (id,a) values (924,9);
+insert into t (id,a) values (924,10);
+insert into t (id,a) values (924,11);
+insert into t (id,a) values (924,12);
+insert into t (id,a) values (924,13);
+insert into t (id,a) values (924,14);
+insert into t (id,a) values (924,15);
+insert into t (id,a) values (924,16);
+insert into t (id,a) values (924,17);
+insert into t (id,a) values (924,18);
+insert into t (id,a) values (924,19);
+insert into t (id,a) values (924,20);
+insert into t (id,a) values (924,21);
+insert into t (id,a) values (924,22);
+insert into t (id,a) values (924,23);
+insert into t (id,a) values (924,24);
+insert into t (id,a) values (924,25);
+insert into t (id,a) values (924,26);
+insert into t (id,a) values (924,27);
+insert into t (id,a) values (924,28);
+insert into t (id,a) values (924,29);
+insert into t (id,a) values (924,30);
+insert into t (id,a) values (924,31);
+insert into t (id,a) values (924,32);
+insert into t (id,a) values (924,33);
+insert into t (id,a) values (924,34);
+insert into t (id,a) values (924,35);
+insert into t (id,a) values (924,36);
+insert into t (id,a) values (924,37);
+insert into t (id,a) values (924,38);
+insert into t (id,a) values (924,39);
+insert into t (id,a) values (924,40);
+insert into t (id,a) values (924,41);
+insert into t (id,a) values (924,42);
+insert into t (id,a) values (924,43);
+insert into t (id,a) values (924,44);
+insert into t (id,a) values (924,45);
+insert into t (id,a) values (924,46);
+insert into t (id,a) values (924,47);
+insert into t (id,a) values (924,48);
+insert into t (id,a) values (924,49);
+insert into t (id,a) values (924,50);
+insert into t (id,a) values (924,51);
+insert into t (id,a) values (924,52);
+insert into t (id,a) values (924,53);
+insert into t (id,a) values (924,54);
+insert into t (id,a) values (924,55);
+insert into t (id,a) values (924,56);
+insert into t (id,a) values (924,57);
+insert into t (id,a) values (924,58);
+insert into t (id,a) values (924,59);
+insert into t (id,a) values (924,60);
+insert into t (id,a) values (924,61);
+insert into t (id,a) values (924,62);
+insert into t (id,a) values (924,63);
+insert into t (id,a) values (924,64);
+insert into t (id,a) values (924,65);
+insert into t (id,a) values (924,66);
+insert into t (id,a) values (924,67);
+insert into t (id,a) values (924,68);
+insert into t (id,a) values (924,69);
+insert into t (id,a) values (924,70);
+insert into t (id,a) values (924,71);
+insert into t (id,a) values (924,72);
+insert into t (id,a) values (924,73);
+insert into t (id,a) values (924,74);
+insert into t (id,a) values (924,75);
+insert into t (id,a) values (924,76);
+insert into t (id,a) values (924,77);
+insert into t (id,a) values (924,78);
+insert into t (id,a) values (924,79);
+insert into t (id,a) values (924,80);
+insert into t (id,a) values (924,81);
+insert into t (id,a) values (924,82);
+insert into t (id,a) values (924,83);
+insert into t (id,a) values (924,84);
+insert into t (id,a) values (924,85);
+insert into t (id,a) values (924,86);
+insert into t (id,a) values (924,87);
+insert into t (id,a) values (924,88);
+insert into t (id,a) values (924,89);
+insert into t (id,a) values (924,90);
+insert into t (id,a) values (924,91);
+insert into t (id,a) values (924,92);
+insert into t (id,a) values (924,93);
+insert into t (id,a) values (924,94);
+insert into t (id,a) values (924,95);
+insert into t (id,a) values (924,96);
+insert into t (id,a) values (924,97);
+insert into t (id,a) values (924,98);
+insert into t (id,a) values (924,99);
+insert into t (id,a) values (925,0);
+insert into t (id,a) values (925,1);
+insert into t (id,a) values (925,2);
+insert into t (id,a) values (925,3);
+insert into t (id,a) values (925,4);
+insert into t (id,a) values (925,5);
+insert into t (id,a) values (925,6);
+insert into t (id,a) values (925,7);
+insert into t (id,a) values (925,8);
+insert into t (id,a) values (925,9);
+insert into t (id,a) values (925,10);
+insert into t (id,a) values (925,11);
+insert into t (id,a) values (925,12);
+insert into t (id,a) values (925,13);
+insert into t (id,a) values (925,14);
+insert into t (id,a) values (925,15);
+insert into t (id,a) values (925,16);
+insert into t (id,a) values (925,17);
+insert into t (id,a) values (925,18);
+insert into t (id,a) values (925,19);
+insert into t (id,a) values (925,20);
+insert into t (id,a) values (925,21);
+insert into t (id,a) values (925,22);
+insert into t (id,a) values (925,23);
+insert into t (id,a) values (925,24);
+insert into t (id,a) values (925,25);
+insert into t (id,a) values (925,26);
+insert into t (id,a) values (925,27);
+insert into t (id,a) values (925,28);
+insert into t (id,a) values (925,29);
+insert into t (id,a) values (925,30);
+insert into t (id,a) values (925,31);
+insert into t (id,a) values (925,32);
+insert into t (id,a) values (925,33);
+insert into t (id,a) values (925,34);
+insert into t (id,a) values (925,35);
+insert into t (id,a) values (925,36);
+insert into t (id,a) values (925,37);
+insert into t (id,a) values (925,38);
+insert into t (id,a) values (925,39);
+insert into t (id,a) values (925,40);
+insert into t (id,a) values (925,41);
+insert into t (id,a) values (925,42);
+insert into t (id,a) values (925,43);
+insert into t (id,a) values (925,44);
+insert into t (id,a) values (925,45);
+insert into t (id,a) values (925,46);
+insert into t (id,a) values (925,47);
+insert into t (id,a) values (925,48);
+insert into t (id,a) values (925,49);
+insert into t (id,a) values (925,50);
+insert into t (id,a) values (925,51);
+insert into t (id,a) values (925,52);
+insert into t (id,a) values (925,53);
+insert into t (id,a) values (925,54);
+insert into t (id,a) values (925,55);
+insert into t (id,a) values (925,56);
+insert into t (id,a) values (925,57);
+insert into t (id,a) values (925,58);
+insert into t (id,a) values (925,59);
+insert into t (id,a) values (925,60);
+insert into t (id,a) values (925,61);
+insert into t (id,a) values (925,62);
+insert into t (id,a) values (925,63);
+insert into t (id,a) values (925,64);
+insert into t (id,a) values (925,65);
+insert into t (id,a) values (925,66);
+insert into t (id,a) values (925,67);
+insert into t (id,a) values (925,68);
+insert into t (id,a) values (925,69);
+insert into t (id,a) values (925,70);
+insert into t (id,a) values (925,71);
+insert into t (id,a) values (925,72);
+insert into t (id,a) values (925,73);
+insert into t (id,a) values (925,74);
+insert into t (id,a) values (925,75);
+insert into t (id,a) values (925,76);
+insert into t (id,a) values (925,77);
+insert into t (id,a) values (925,78);
+insert into t (id,a) values (925,79);
+insert into t (id,a) values (925,80);
+insert into t (id,a) values (925,81);
+insert into t (id,a) values (925,82);
+insert into t (id,a) values (925,83);
+insert into t (id,a) values (925,84);
+insert into t (id,a) values (925,85);
+insert into t (id,a) values (925,86);
+insert into t (id,a) values (925,87);
+insert into t (id,a) values (925,88);
+insert into t (id,a) values (925,89);
+insert into t (id,a) values (925,90);
+insert into t (id,a) values (925,91);
+insert into t (id,a) values (925,92);
+insert into t (id,a) values (925,93);
+insert into t (id,a) values (925,94);
+insert into t (id,a) values (925,95);
+insert into t (id,a) values (925,96);
+insert into t (id,a) values (925,97);
+insert into t (id,a) values (925,98);
+insert into t (id,a) values (925,99);
+insert into t (id,a) values (926,0);
+insert into t (id,a) values (926,1);
+insert into t (id,a) values (926,2);
+insert into t (id,a) values (926,3);
+insert into t (id,a) values (926,4);
+insert into t (id,a) values (926,5);
+insert into t (id,a) values (926,6);
+insert into t (id,a) values (926,7);
+insert into t (id,a) values (926,8);
+insert into t (id,a) values (926,9);
+insert into t (id,a) values (926,10);
+insert into t (id,a) values (926,11);
+insert into t (id,a) values (926,12);
+insert into t (id,a) values (926,13);
+insert into t (id,a) values (926,14);
+insert into t (id,a) values (926,15);
+insert into t (id,a) values (926,16);
+insert into t (id,a) values (926,17);
+insert into t (id,a) values (926,18);
+insert into t (id,a) values (926,19);
+insert into t (id,a) values (926,20);
+insert into t (id,a) values (926,21);
+insert into t (id,a) values (926,22);
+insert into t (id,a) values (926,23);
+insert into t (id,a) values (926,24);
+insert into t (id,a) values (926,25);
+insert into t (id,a) values (926,26);
+insert into t (id,a) values (926,27);
+insert into t (id,a) values (926,28);
+insert into t (id,a) values (926,29);
+insert into t (id,a) values (926,30);
+insert into t (id,a) values (926,31);
+insert into t (id,a) values (926,32);
+insert into t (id,a) values (926,33);
+insert into t (id,a) values (926,34);
+insert into t (id,a) values (926,35);
+insert into t (id,a) values (926,36);
+insert into t (id,a) values (926,37);
+insert into t (id,a) values (926,38);
+insert into t (id,a) values (926,39);
+insert into t (id,a) values (926,40);
+insert into t (id,a) values (926,41);
+insert into t (id,a) values (926,42);
+insert into t (id,a) values (926,43);
+insert into t (id,a) values (926,44);
+insert into t (id,a) values (926,45);
+insert into t (id,a) values (926,46);
+insert into t (id,a) values (926,47);
+insert into t (id,a) values (926,48);
+insert into t (id,a) values (926,49);
+insert into t (id,a) values (926,50);
+insert into t (id,a) values (926,51);
+insert into t (id,a) values (926,52);
+insert into t (id,a) values (926,53);
+insert into t (id,a) values (926,54);
+insert into t (id,a) values (926,55);
+insert into t (id,a) values (926,56);
+insert into t (id,a) values (926,57);
+insert into t (id,a) values (926,58);
+insert into t (id,a) values (926,59);
+insert into t (id,a) values (926,60);
+insert into t (id,a) values (926,61);
+insert into t (id,a) values (926,62);
+insert into t (id,a) values (926,63);
+insert into t (id,a) values (926,64);
+insert into t (id,a) values (926,65);
+insert into t (id,a) values (926,66);
+insert into t (id,a) values (926,67);
+insert into t (id,a) values (926,68);
+insert into t (id,a) values (926,69);
+insert into t (id,a) values (926,70);
+insert into t (id,a) values (926,71);
+insert into t (id,a) values (926,72);
+insert into t (id,a) values (926,73);
+insert into t (id,a) values (926,74);
+insert into t (id,a) values (926,75);
+insert into t (id,a) values (926,76);
+insert into t (id,a) values (926,77);
+insert into t (id,a) values (926,78);
+insert into t (id,a) values (926,79);
+insert into t (id,a) values (926,80);
+insert into t (id,a) values (926,81);
+insert into t (id,a) values (926,82);
+insert into t (id,a) values (926,83);
+insert into t (id,a) values (926,84);
+insert into t (id,a) values (926,85);
+insert into t (id,a) values (926,86);
+insert into t (id,a) values (926,87);
+insert into t (id,a) values (926,88);
+insert into t (id,a) values (926,89);
+insert into t (id,a) values (926,90);
+insert into t (id,a) values (926,91);
+insert into t (id,a) values (926,92);
+insert into t (id,a) values (926,93);
+insert into t (id,a) values (926,94);
+insert into t (id,a) values (926,95);
+insert into t (id,a) values (926,96);
+insert into t (id,a) values (926,97);
+insert into t (id,a) values (926,98);
+insert into t (id,a) values (926,99);
+insert into t (id,a) values (927,0);
+insert into t (id,a) values (927,1);
+insert into t (id,a) values (927,2);
+insert into t (id,a) values (927,3);
+insert into t (id,a) values (927,4);
+insert into t (id,a) values (927,5);
+insert into t (id,a) values (927,6);
+insert into t (id,a) values (927,7);
+insert into t (id,a) values (927,8);
+insert into t (id,a) values (927,9);
+insert into t (id,a) values (927,10);
+insert into t (id,a) values (927,11);
+insert into t (id,a) values (927,12);
+insert into t (id,a) values (927,13);
+insert into t (id,a) values (927,14);
+insert into t (id,a) values (927,15);
+insert into t (id,a) values (927,16);
+insert into t (id,a) values (927,17);
+insert into t (id,a) values (927,18);
+insert into t (id,a) values (927,19);
+insert into t (id,a) values (927,20);
+insert into t (id,a) values (927,21);
+insert into t (id,a) values (927,22);
+insert into t (id,a) values (927,23);
+insert into t (id,a) values (927,24);
+insert into t (id,a) values (927,25);
+insert into t (id,a) values (927,26);
+insert into t (id,a) values (927,27);
+insert into t (id,a) values (927,28);
+insert into t (id,a) values (927,29);
+insert into t (id,a) values (927,30);
+insert into t (id,a) values (927,31);
+insert into t (id,a) values (927,32);
+insert into t (id,a) values (927,33);
+insert into t (id,a) values (927,34);
+insert into t (id,a) values (927,35);
+insert into t (id,a) values (927,36);
+insert into t (id,a) values (927,37);
+insert into t (id,a) values (927,38);
+insert into t (id,a) values (927,39);
+insert into t (id,a) values (927,40);
+insert into t (id,a) values (927,41);
+insert into t (id,a) values (927,42);
+insert into t (id,a) values (927,43);
+insert into t (id,a) values (927,44);
+insert into t (id,a) values (927,45);
+insert into t (id,a) values (927,46);
+insert into t (id,a) values (927,47);
+insert into t (id,a) values (927,48);
+insert into t (id,a) values (927,49);
+insert into t (id,a) values (927,50);
+insert into t (id,a) values (927,51);
+insert into t (id,a) values (927,52);
+insert into t (id,a) values (927,53);
+insert into t (id,a) values (927,54);
+insert into t (id,a) values (927,55);
+insert into t (id,a) values (927,56);
+insert into t (id,a) values (927,57);
+insert into t (id,a) values (927,58);
+insert into t (id,a) values (927,59);
+insert into t (id,a) values (927,60);
+insert into t (id,a) values (927,61);
+insert into t (id,a) values (927,62);
+insert into t (id,a) values (927,63);
+insert into t (id,a) values (927,64);
+insert into t (id,a) values (927,65);
+insert into t (id,a) values (927,66);
+insert into t (id,a) values (927,67);
+insert into t (id,a) values (927,68);
+insert into t (id,a) values (927,69);
+insert into t (id,a) values (927,70);
+insert into t (id,a) values (927,71);
+insert into t (id,a) values (927,72);
+insert into t (id,a) values (927,73);
+insert into t (id,a) values (927,74);
+insert into t (id,a) values (927,75);
+insert into t (id,a) values (927,76);
+insert into t (id,a) values (927,77);
+insert into t (id,a) values (927,78);
+insert into t (id,a) values (927,79);
+insert into t (id,a) values (927,80);
+insert into t (id,a) values (927,81);
+insert into t (id,a) values (927,82);
+insert into t (id,a) values (927,83);
+insert into t (id,a) values (927,84);
+insert into t (id,a) values (927,85);
+insert into t (id,a) values (927,86);
+insert into t (id,a) values (927,87);
+insert into t (id,a) values (927,88);
+insert into t (id,a) values (927,89);
+insert into t (id,a) values (927,90);
+insert into t (id,a) values (927,91);
+insert into t (id,a) values (927,92);
+insert into t (id,a) values (927,93);
+insert into t (id,a) values (927,94);
+insert into t (id,a) values (927,95);
+insert into t (id,a) values (927,96);
+insert into t (id,a) values (927,97);
+insert into t (id,a) values (927,98);
+insert into t (id,a) values (927,99);
+insert into t (id,a) values (928,0);
+insert into t (id,a) values (928,1);
+insert into t (id,a) values (928,2);
+insert into t (id,a) values (928,3);
+insert into t (id,a) values (928,4);
+insert into t (id,a) values (928,5);
+insert into t (id,a) values (928,6);
+insert into t (id,a) values (928,7);
+insert into t (id,a) values (928,8);
+insert into t (id,a) values (928,9);
+insert into t (id,a) values (928,10);
+insert into t (id,a) values (928,11);
+insert into t (id,a) values (928,12);
+insert into t (id,a) values (928,13);
+insert into t (id,a) values (928,14);
+insert into t (id,a) values (928,15);
+insert into t (id,a) values (928,16);
+insert into t (id,a) values (928,17);
+insert into t (id,a) values (928,18);
+insert into t (id,a) values (928,19);
+insert into t (id,a) values (928,20);
+insert into t (id,a) values (928,21);
+insert into t (id,a) values (928,22);
+insert into t (id,a) values (928,23);
+insert into t (id,a) values (928,24);
+insert into t (id,a) values (928,25);
+insert into t (id,a) values (928,26);
+insert into t (id,a) values (928,27);
+insert into t (id,a) values (928,28);
+insert into t (id,a) values (928,29);
+insert into t (id,a) values (928,30);
+insert into t (id,a) values (928,31);
+insert into t (id,a) values (928,32);
+insert into t (id,a) values (928,33);
+insert into t (id,a) values (928,34);
+insert into t (id,a) values (928,35);
+insert into t (id,a) values (928,36);
+insert into t (id,a) values (928,37);
+insert into t (id,a) values (928,38);
+insert into t (id,a) values (928,39);
+insert into t (id,a) values (928,40);
+insert into t (id,a) values (928,41);
+insert into t (id,a) values (928,42);
+insert into t (id,a) values (928,43);
+insert into t (id,a) values (928,44);
+insert into t (id,a) values (928,45);
+insert into t (id,a) values (928,46);
+insert into t (id,a) values (928,47);
+insert into t (id,a) values (928,48);
+insert into t (id,a) values (928,49);
+insert into t (id,a) values (928,50);
+insert into t (id,a) values (928,51);
+insert into t (id,a) values (928,52);
+insert into t (id,a) values (928,53);
+insert into t (id,a) values (928,54);
+insert into t (id,a) values (928,55);
+insert into t (id,a) values (928,56);
+insert into t (id,a) values (928,57);
+insert into t (id,a) values (928,58);
+insert into t (id,a) values (928,59);
+insert into t (id,a) values (928,60);
+insert into t (id,a) values (928,61);
+insert into t (id,a) values (928,62);
+insert into t (id,a) values (928,63);
+insert into t (id,a) values (928,64);
+insert into t (id,a) values (928,65);
+insert into t (id,a) values (928,66);
+insert into t (id,a) values (928,67);
+insert into t (id,a) values (928,68);
+insert into t (id,a) values (928,69);
+insert into t (id,a) values (928,70);
+insert into t (id,a) values (928,71);
+insert into t (id,a) values (928,72);
+insert into t (id,a) values (928,73);
+insert into t (id,a) values (928,74);
+insert into t (id,a) values (928,75);
+insert into t (id,a) values (928,76);
+insert into t (id,a) values (928,77);
+insert into t (id,a) values (928,78);
+insert into t (id,a) values (928,79);
+insert into t (id,a) values (928,80);
+insert into t (id,a) values (928,81);
+insert into t (id,a) values (928,82);
+insert into t (id,a) values (928,83);
+insert into t (id,a) values (928,84);
+insert into t (id,a) values (928,85);
+insert into t (id,a) values (928,86);
+insert into t (id,a) values (928,87);
+insert into t (id,a) values (928,88);
+insert into t (id,a) values (928,89);
+insert into t (id,a) values (928,90);
+insert into t (id,a) values (928,91);
+insert into t (id,a) values (928,92);
+insert into t (id,a) values (928,93);
+insert into t (id,a) values (928,94);
+insert into t (id,a) values (928,95);
+insert into t (id,a) values (928,96);
+insert into t (id,a) values (928,97);
+insert into t (id,a) values (928,98);
+insert into t (id,a) values (928,99);
+insert into t (id,a) values (929,0);
+insert into t (id,a) values (929,1);
+insert into t (id,a) values (929,2);
+insert into t (id,a) values (929,3);
+insert into t (id,a) values (929,4);
+insert into t (id,a) values (929,5);
+insert into t (id,a) values (929,6);
+insert into t (id,a) values (929,7);
+insert into t (id,a) values (929,8);
+insert into t (id,a) values (929,9);
+insert into t (id,a) values (929,10);
+insert into t (id,a) values (929,11);
+insert into t (id,a) values (929,12);
+insert into t (id,a) values (929,13);
+insert into t (id,a) values (929,14);
+insert into t (id,a) values (929,15);
+insert into t (id,a) values (929,16);
+insert into t (id,a) values (929,17);
+insert into t (id,a) values (929,18);
+insert into t (id,a) values (929,19);
+insert into t (id,a) values (929,20);
+insert into t (id,a) values (929,21);
+insert into t (id,a) values (929,22);
+insert into t (id,a) values (929,23);
+insert into t (id,a) values (929,24);
+insert into t (id,a) values (929,25);
+insert into t (id,a) values (929,26);
+insert into t (id,a) values (929,27);
+insert into t (id,a) values (929,28);
+insert into t (id,a) values (929,29);
+insert into t (id,a) values (929,30);
+insert into t (id,a) values (929,31);
+insert into t (id,a) values (929,32);
+insert into t (id,a) values (929,33);
+insert into t (id,a) values (929,34);
+insert into t (id,a) values (929,35);
+insert into t (id,a) values (929,36);
+insert into t (id,a) values (929,37);
+insert into t (id,a) values (929,38);
+insert into t (id,a) values (929,39);
+insert into t (id,a) values (929,40);
+insert into t (id,a) values (929,41);
+insert into t (id,a) values (929,42);
+insert into t (id,a) values (929,43);
+insert into t (id,a) values (929,44);
+insert into t (id,a) values (929,45);
+insert into t (id,a) values (929,46);
+insert into t (id,a) values (929,47);
+insert into t (id,a) values (929,48);
+insert into t (id,a) values (929,49);
+insert into t (id,a) values (929,50);
+insert into t (id,a) values (929,51);
+insert into t (id,a) values (929,52);
+insert into t (id,a) values (929,53);
+insert into t (id,a) values (929,54);
+insert into t (id,a) values (929,55);
+insert into t (id,a) values (929,56);
+insert into t (id,a) values (929,57);
+insert into t (id,a) values (929,58);
+insert into t (id,a) values (929,59);
+insert into t (id,a) values (929,60);
+insert into t (id,a) values (929,61);
+insert into t (id,a) values (929,62);
+insert into t (id,a) values (929,63);
+insert into t (id,a) values (929,64);
+insert into t (id,a) values (929,65);
+insert into t (id,a) values (929,66);
+insert into t (id,a) values (929,67);
+insert into t (id,a) values (929,68);
+insert into t (id,a) values (929,69);
+insert into t (id,a) values (929,70);
+insert into t (id,a) values (929,71);
+insert into t (id,a) values (929,72);
+insert into t (id,a) values (929,73);
+insert into t (id,a) values (929,74);
+insert into t (id,a) values (929,75);
+insert into t (id,a) values (929,76);
+insert into t (id,a) values (929,77);
+insert into t (id,a) values (929,78);
+insert into t (id,a) values (929,79);
+insert into t (id,a) values (929,80);
+insert into t (id,a) values (929,81);
+insert into t (id,a) values (929,82);
+insert into t (id,a) values (929,83);
+insert into t (id,a) values (929,84);
+insert into t (id,a) values (929,85);
+insert into t (id,a) values (929,86);
+insert into t (id,a) values (929,87);
+insert into t (id,a) values (929,88);
+insert into t (id,a) values (929,89);
+insert into t (id,a) values (929,90);
+insert into t (id,a) values (929,91);
+insert into t (id,a) values (929,92);
+insert into t (id,a) values (929,93);
+insert into t (id,a) values (929,94);
+insert into t (id,a) values (929,95);
+insert into t (id,a) values (929,96);
+insert into t (id,a) values (929,97);
+insert into t (id,a) values (929,98);
+insert into t (id,a) values (929,99);
+insert into t (id,a) values (930,0);
+insert into t (id,a) values (930,1);
+insert into t (id,a) values (930,2);
+insert into t (id,a) values (930,3);
+insert into t (id,a) values (930,4);
+insert into t (id,a) values (930,5);
+insert into t (id,a) values (930,6);
+insert into t (id,a) values (930,7);
+insert into t (id,a) values (930,8);
+insert into t (id,a) values (930,9);
+insert into t (id,a) values (930,10);
+insert into t (id,a) values (930,11);
+insert into t (id,a) values (930,12);
+insert into t (id,a) values (930,13);
+insert into t (id,a) values (930,14);
+insert into t (id,a) values (930,15);
+insert into t (id,a) values (930,16);
+insert into t (id,a) values (930,17);
+insert into t (id,a) values (930,18);
+insert into t (id,a) values (930,19);
+insert into t (id,a) values (930,20);
+insert into t (id,a) values (930,21);
+insert into t (id,a) values (930,22);
+insert into t (id,a) values (930,23);
+insert into t (id,a) values (930,24);
+insert into t (id,a) values (930,25);
+insert into t (id,a) values (930,26);
+insert into t (id,a) values (930,27);
+insert into t (id,a) values (930,28);
+insert into t (id,a) values (930,29);
+insert into t (id,a) values (930,30);
+insert into t (id,a) values (930,31);
+insert into t (id,a) values (930,32);
+insert into t (id,a) values (930,33);
+insert into t (id,a) values (930,34);
+insert into t (id,a) values (930,35);
+insert into t (id,a) values (930,36);
+insert into t (id,a) values (930,37);
+insert into t (id,a) values (930,38);
+insert into t (id,a) values (930,39);
+insert into t (id,a) values (930,40);
+insert into t (id,a) values (930,41);
+insert into t (id,a) values (930,42);
+insert into t (id,a) values (930,43);
+insert into t (id,a) values (930,44);
+insert into t (id,a) values (930,45);
+insert into t (id,a) values (930,46);
+insert into t (id,a) values (930,47);
+insert into t (id,a) values (930,48);
+insert into t (id,a) values (930,49);
+insert into t (id,a) values (930,50);
+insert into t (id,a) values (930,51);
+insert into t (id,a) values (930,52);
+insert into t (id,a) values (930,53);
+insert into t (id,a) values (930,54);
+insert into t (id,a) values (930,55);
+insert into t (id,a) values (930,56);
+insert into t (id,a) values (930,57);
+insert into t (id,a) values (930,58);
+insert into t (id,a) values (930,59);
+insert into t (id,a) values (930,60);
+insert into t (id,a) values (930,61);
+insert into t (id,a) values (930,62);
+insert into t (id,a) values (930,63);
+insert into t (id,a) values (930,64);
+insert into t (id,a) values (930,65);
+insert into t (id,a) values (930,66);
+insert into t (id,a) values (930,67);
+insert into t (id,a) values (930,68);
+insert into t (id,a) values (930,69);
+insert into t (id,a) values (930,70);
+insert into t (id,a) values (930,71);
+insert into t (id,a) values (930,72);
+insert into t (id,a) values (930,73);
+insert into t (id,a) values (930,74);
+insert into t (id,a) values (930,75);
+insert into t (id,a) values (930,76);
+insert into t (id,a) values (930,77);
+insert into t (id,a) values (930,78);
+insert into t (id,a) values (930,79);
+insert into t (id,a) values (930,80);
+insert into t (id,a) values (930,81);
+insert into t (id,a) values (930,82);
+insert into t (id,a) values (930,83);
+insert into t (id,a) values (930,84);
+insert into t (id,a) values (930,85);
+insert into t (id,a) values (930,86);
+insert into t (id,a) values (930,87);
+insert into t (id,a) values (930,88);
+insert into t (id,a) values (930,89);
+insert into t (id,a) values (930,90);
+insert into t (id,a) values (930,91);
+insert into t (id,a) values (930,92);
+insert into t (id,a) values (930,93);
+insert into t (id,a) values (930,94);
+insert into t (id,a) values (930,95);
+insert into t (id,a) values (930,96);
+insert into t (id,a) values (930,97);
+insert into t (id,a) values (930,98);
+insert into t (id,a) values (930,99);
+insert into t (id,a) values (931,0);
+insert into t (id,a) values (931,1);
+insert into t (id,a) values (931,2);
+insert into t (id,a) values (931,3);
+insert into t (id,a) values (931,4);
+insert into t (id,a) values (931,5);
+insert into t (id,a) values (931,6);
+insert into t (id,a) values (931,7);
+insert into t (id,a) values (931,8);
+insert into t (id,a) values (931,9);
+insert into t (id,a) values (931,10);
+insert into t (id,a) values (931,11);
+insert into t (id,a) values (931,12);
+insert into t (id,a) values (931,13);
+insert into t (id,a) values (931,14);
+insert into t (id,a) values (931,15);
+insert into t (id,a) values (931,16);
+insert into t (id,a) values (931,17);
+insert into t (id,a) values (931,18);
+insert into t (id,a) values (931,19);
+insert into t (id,a) values (931,20);
+insert into t (id,a) values (931,21);
+insert into t (id,a) values (931,22);
+insert into t (id,a) values (931,23);
+insert into t (id,a) values (931,24);
+insert into t (id,a) values (931,25);
+insert into t (id,a) values (931,26);
+insert into t (id,a) values (931,27);
+insert into t (id,a) values (931,28);
+insert into t (id,a) values (931,29);
+insert into t (id,a) values (931,30);
+insert into t (id,a) values (931,31);
+insert into t (id,a) values (931,32);
+insert into t (id,a) values (931,33);
+insert into t (id,a) values (931,34);
+insert into t (id,a) values (931,35);
+insert into t (id,a) values (931,36);
+insert into t (id,a) values (931,37);
+insert into t (id,a) values (931,38);
+insert into t (id,a) values (931,39);
+insert into t (id,a) values (931,40);
+insert into t (id,a) values (931,41);
+insert into t (id,a) values (931,42);
+insert into t (id,a) values (931,43);
+insert into t (id,a) values (931,44);
+insert into t (id,a) values (931,45);
+insert into t (id,a) values (931,46);
+insert into t (id,a) values (931,47);
+insert into t (id,a) values (931,48);
+insert into t (id,a) values (931,49);
+insert into t (id,a) values (931,50);
+insert into t (id,a) values (931,51);
+insert into t (id,a) values (931,52);
+insert into t (id,a) values (931,53);
+insert into t (id,a) values (931,54);
+insert into t (id,a) values (931,55);
+insert into t (id,a) values (931,56);
+insert into t (id,a) values (931,57);
+insert into t (id,a) values (931,58);
+insert into t (id,a) values (931,59);
+insert into t (id,a) values (931,60);
+insert into t (id,a) values (931,61);
+insert into t (id,a) values (931,62);
+insert into t (id,a) values (931,63);
+insert into t (id,a) values (931,64);
+insert into t (id,a) values (931,65);
+insert into t (id,a) values (931,66);
+insert into t (id,a) values (931,67);
+insert into t (id,a) values (931,68);
+insert into t (id,a) values (931,69);
+insert into t (id,a) values (931,70);
+insert into t (id,a) values (931,71);
+insert into t (id,a) values (931,72);
+insert into t (id,a) values (931,73);
+insert into t (id,a) values (931,74);
+insert into t (id,a) values (931,75);
+insert into t (id,a) values (931,76);
+insert into t (id,a) values (931,77);
+insert into t (id,a) values (931,78);
+insert into t (id,a) values (931,79);
+insert into t (id,a) values (931,80);
+insert into t (id,a) values (931,81);
+insert into t (id,a) values (931,82);
+insert into t (id,a) values (931,83);
+insert into t (id,a) values (931,84);
+insert into t (id,a) values (931,85);
+insert into t (id,a) values (931,86);
+insert into t (id,a) values (931,87);
+insert into t (id,a) values (931,88);
+insert into t (id,a) values (931,89);
+insert into t (id,a) values (931,90);
+insert into t (id,a) values (931,91);
+insert into t (id,a) values (931,92);
+insert into t (id,a) values (931,93);
+insert into t (id,a) values (931,94);
+insert into t (id,a) values (931,95);
+insert into t (id,a) values (931,96);
+insert into t (id,a) values (931,97);
+insert into t (id,a) values (931,98);
+insert into t (id,a) values (931,99);
+insert into t (id,a) values (932,0);
+insert into t (id,a) values (932,1);
+insert into t (id,a) values (932,2);
+insert into t (id,a) values (932,3);
+insert into t (id,a) values (932,4);
+insert into t (id,a) values (932,5);
+insert into t (id,a) values (932,6);
+insert into t (id,a) values (932,7);
+insert into t (id,a) values (932,8);
+insert into t (id,a) values (932,9);
+insert into t (id,a) values (932,10);
+insert into t (id,a) values (932,11);
+insert into t (id,a) values (932,12);
+insert into t (id,a) values (932,13);
+insert into t (id,a) values (932,14);
+insert into t (id,a) values (932,15);
+insert into t (id,a) values (932,16);
+insert into t (id,a) values (932,17);
+insert into t (id,a) values (932,18);
+insert into t (id,a) values (932,19);
+insert into t (id,a) values (932,20);
+insert into t (id,a) values (932,21);
+insert into t (id,a) values (932,22);
+insert into t (id,a) values (932,23);
+insert into t (id,a) values (932,24);
+insert into t (id,a) values (932,25);
+insert into t (id,a) values (932,26);
+insert into t (id,a) values (932,27);
+insert into t (id,a) values (932,28);
+insert into t (id,a) values (932,29);
+insert into t (id,a) values (932,30);
+insert into t (id,a) values (932,31);
+insert into t (id,a) values (932,32);
+insert into t (id,a) values (932,33);
+insert into t (id,a) values (932,34);
+insert into t (id,a) values (932,35);
+insert into t (id,a) values (932,36);
+insert into t (id,a) values (932,37);
+insert into t (id,a) values (932,38);
+insert into t (id,a) values (932,39);
+insert into t (id,a) values (932,40);
+insert into t (id,a) values (932,41);
+insert into t (id,a) values (932,42);
+insert into t (id,a) values (932,43);
+insert into t (id,a) values (932,44);
+insert into t (id,a) values (932,45);
+insert into t (id,a) values (932,46);
+insert into t (id,a) values (932,47);
+insert into t (id,a) values (932,48);
+insert into t (id,a) values (932,49);
+insert into t (id,a) values (932,50);
+insert into t (id,a) values (932,51);
+insert into t (id,a) values (932,52);
+insert into t (id,a) values (932,53);
+insert into t (id,a) values (932,54);
+insert into t (id,a) values (932,55);
+insert into t (id,a) values (932,56);
+insert into t (id,a) values (932,57);
+insert into t (id,a) values (932,58);
+insert into t (id,a) values (932,59);
+insert into t (id,a) values (932,60);
+insert into t (id,a) values (932,61);
+insert into t (id,a) values (932,62);
+insert into t (id,a) values (932,63);
+insert into t (id,a) values (932,64);
+insert into t (id,a) values (932,65);
+insert into t (id,a) values (932,66);
+insert into t (id,a) values (932,67);
+insert into t (id,a) values (932,68);
+insert into t (id,a) values (932,69);
+insert into t (id,a) values (932,70);
+insert into t (id,a) values (932,71);
+insert into t (id,a) values (932,72);
+insert into t (id,a) values (932,73);
+insert into t (id,a) values (932,74);
+insert into t (id,a) values (932,75);
+insert into t (id,a) values (932,76);
+insert into t (id,a) values (932,77);
+insert into t (id,a) values (932,78);
+insert into t (id,a) values (932,79);
+insert into t (id,a) values (932,80);
+insert into t (id,a) values (932,81);
+insert into t (id,a) values (932,82);
+insert into t (id,a) values (932,83);
+insert into t (id,a) values (932,84);
+insert into t (id,a) values (932,85);
+insert into t (id,a) values (932,86);
+insert into t (id,a) values (932,87);
+insert into t (id,a) values (932,88);
+insert into t (id,a) values (932,89);
+insert into t (id,a) values (932,90);
+insert into t (id,a) values (932,91);
+insert into t (id,a) values (932,92);
+insert into t (id,a) values (932,93);
+insert into t (id,a) values (932,94);
+insert into t (id,a) values (932,95);
+insert into t (id,a) values (932,96);
+insert into t (id,a) values (932,97);
+insert into t (id,a) values (932,98);
+insert into t (id,a) values (932,99);
+insert into t (id,a) values (933,0);
+insert into t (id,a) values (933,1);
+insert into t (id,a) values (933,2);
+insert into t (id,a) values (933,3);
+insert into t (id,a) values (933,4);
+insert into t (id,a) values (933,5);
+insert into t (id,a) values (933,6);
+insert into t (id,a) values (933,7);
+insert into t (id,a) values (933,8);
+insert into t (id,a) values (933,9);
+insert into t (id,a) values (933,10);
+insert into t (id,a) values (933,11);
+insert into t (id,a) values (933,12);
+insert into t (id,a) values (933,13);
+insert into t (id,a) values (933,14);
+insert into t (id,a) values (933,15);
+insert into t (id,a) values (933,16);
+insert into t (id,a) values (933,17);
+insert into t (id,a) values (933,18);
+insert into t (id,a) values (933,19);
+insert into t (id,a) values (933,20);
+insert into t (id,a) values (933,21);
+insert into t (id,a) values (933,22);
+insert into t (id,a) values (933,23);
+insert into t (id,a) values (933,24);
+insert into t (id,a) values (933,25);
+insert into t (id,a) values (933,26);
+insert into t (id,a) values (933,27);
+insert into t (id,a) values (933,28);
+insert into t (id,a) values (933,29);
+insert into t (id,a) values (933,30);
+insert into t (id,a) values (933,31);
+insert into t (id,a) values (933,32);
+insert into t (id,a) values (933,33);
+insert into t (id,a) values (933,34);
+insert into t (id,a) values (933,35);
+insert into t (id,a) values (933,36);
+insert into t (id,a) values (933,37);
+insert into t (id,a) values (933,38);
+insert into t (id,a) values (933,39);
+insert into t (id,a) values (933,40);
+insert into t (id,a) values (933,41);
+insert into t (id,a) values (933,42);
+insert into t (id,a) values (933,43);
+insert into t (id,a) values (933,44);
+insert into t (id,a) values (933,45);
+insert into t (id,a) values (933,46);
+insert into t (id,a) values (933,47);
+insert into t (id,a) values (933,48);
+insert into t (id,a) values (933,49);
+insert into t (id,a) values (933,50);
+insert into t (id,a) values (933,51);
+insert into t (id,a) values (933,52);
+insert into t (id,a) values (933,53);
+insert into t (id,a) values (933,54);
+insert into t (id,a) values (933,55);
+insert into t (id,a) values (933,56);
+insert into t (id,a) values (933,57);
+insert into t (id,a) values (933,58);
+insert into t (id,a) values (933,59);
+insert into t (id,a) values (933,60);
+insert into t (id,a) values (933,61);
+insert into t (id,a) values (933,62);
+insert into t (id,a) values (933,63);
+insert into t (id,a) values (933,64);
+insert into t (id,a) values (933,65);
+insert into t (id,a) values (933,66);
+insert into t (id,a) values (933,67);
+insert into t (id,a) values (933,68);
+insert into t (id,a) values (933,69);
+insert into t (id,a) values (933,70);
+insert into t (id,a) values (933,71);
+insert into t (id,a) values (933,72);
+insert into t (id,a) values (933,73);
+insert into t (id,a) values (933,74);
+insert into t (id,a) values (933,75);
+insert into t (id,a) values (933,76);
+insert into t (id,a) values (933,77);
+insert into t (id,a) values (933,78);
+insert into t (id,a) values (933,79);
+insert into t (id,a) values (933,80);
+insert into t (id,a) values (933,81);
+insert into t (id,a) values (933,82);
+insert into t (id,a) values (933,83);
+insert into t (id,a) values (933,84);
+insert into t (id,a) values (933,85);
+insert into t (id,a) values (933,86);
+insert into t (id,a) values (933,87);
+insert into t (id,a) values (933,88);
+insert into t (id,a) values (933,89);
+insert into t (id,a) values (933,90);
+insert into t (id,a) values (933,91);
+insert into t (id,a) values (933,92);
+insert into t (id,a) values (933,93);
+insert into t (id,a) values (933,94);
+insert into t (id,a) values (933,95);
+insert into t (id,a) values (933,96);
+insert into t (id,a) values (933,97);
+insert into t (id,a) values (933,98);
+insert into t (id,a) values (933,99);
+insert into t (id,a) values (934,0);
+insert into t (id,a) values (934,1);
+insert into t (id,a) values (934,2);
+insert into t (id,a) values (934,3);
+insert into t (id,a) values (934,4);
+insert into t (id,a) values (934,5);
+insert into t (id,a) values (934,6);
+insert into t (id,a) values (934,7);
+insert into t (id,a) values (934,8);
+insert into t (id,a) values (934,9);
+insert into t (id,a) values (934,10);
+insert into t (id,a) values (934,11);
+insert into t (id,a) values (934,12);
+insert into t (id,a) values (934,13);
+insert into t (id,a) values (934,14);
+insert into t (id,a) values (934,15);
+insert into t (id,a) values (934,16);
+insert into t (id,a) values (934,17);
+insert into t (id,a) values (934,18);
+insert into t (id,a) values (934,19);
+insert into t (id,a) values (934,20);
+insert into t (id,a) values (934,21);
+insert into t (id,a) values (934,22);
+insert into t (id,a) values (934,23);
+insert into t (id,a) values (934,24);
+insert into t (id,a) values (934,25);
+insert into t (id,a) values (934,26);
+insert into t (id,a) values (934,27);
+insert into t (id,a) values (934,28);
+insert into t (id,a) values (934,29);
+insert into t (id,a) values (934,30);
+insert into t (id,a) values (934,31);
+insert into t (id,a) values (934,32);
+insert into t (id,a) values (934,33);
+insert into t (id,a) values (934,34);
+insert into t (id,a) values (934,35);
+insert into t (id,a) values (934,36);
+insert into t (id,a) values (934,37);
+insert into t (id,a) values (934,38);
+insert into t (id,a) values (934,39);
+insert into t (id,a) values (934,40);
+insert into t (id,a) values (934,41);
+insert into t (id,a) values (934,42);
+insert into t (id,a) values (934,43);
+insert into t (id,a) values (934,44);
+insert into t (id,a) values (934,45);
+insert into t (id,a) values (934,46);
+insert into t (id,a) values (934,47);
+insert into t (id,a) values (934,48);
+insert into t (id,a) values (934,49);
+insert into t (id,a) values (934,50);
+insert into t (id,a) values (934,51);
+insert into t (id,a) values (934,52);
+insert into t (id,a) values (934,53);
+insert into t (id,a) values (934,54);
+insert into t (id,a) values (934,55);
+insert into t (id,a) values (934,56);
+insert into t (id,a) values (934,57);
+insert into t (id,a) values (934,58);
+insert into t (id,a) values (934,59);
+insert into t (id,a) values (934,60);
+insert into t (id,a) values (934,61);
+insert into t (id,a) values (934,62);
+insert into t (id,a) values (934,63);
+insert into t (id,a) values (934,64);
+insert into t (id,a) values (934,65);
+insert into t (id,a) values (934,66);
+insert into t (id,a) values (934,67);
+insert into t (id,a) values (934,68);
+insert into t (id,a) values (934,69);
+insert into t (id,a) values (934,70);
+insert into t (id,a) values (934,71);
+insert into t (id,a) values (934,72);
+insert into t (id,a) values (934,73);
+insert into t (id,a) values (934,74);
+insert into t (id,a) values (934,75);
+insert into t (id,a) values (934,76);
+insert into t (id,a) values (934,77);
+insert into t (id,a) values (934,78);
+insert into t (id,a) values (934,79);
+insert into t (id,a) values (934,80);
+insert into t (id,a) values (934,81);
+insert into t (id,a) values (934,82);
+insert into t (id,a) values (934,83);
+insert into t (id,a) values (934,84);
+insert into t (id,a) values (934,85);
+insert into t (id,a) values (934,86);
+insert into t (id,a) values (934,87);
+insert into t (id,a) values (934,88);
+insert into t (id,a) values (934,89);
+insert into t (id,a) values (934,90);
+insert into t (id,a) values (934,91);
+insert into t (id,a) values (934,92);
+insert into t (id,a) values (934,93);
+insert into t (id,a) values (934,94);
+insert into t (id,a) values (934,95);
+insert into t (id,a) values (934,96);
+insert into t (id,a) values (934,97);
+insert into t (id,a) values (934,98);
+insert into t (id,a) values (934,99);
+insert into t (id,a) values (935,0);
+insert into t (id,a) values (935,1);
+insert into t (id,a) values (935,2);
+insert into t (id,a) values (935,3);
+insert into t (id,a) values (935,4);
+insert into t (id,a) values (935,5);
+insert into t (id,a) values (935,6);
+insert into t (id,a) values (935,7);
+insert into t (id,a) values (935,8);
+insert into t (id,a) values (935,9);
+insert into t (id,a) values (935,10);
+insert into t (id,a) values (935,11);
+insert into t (id,a) values (935,12);
+insert into t (id,a) values (935,13);
+insert into t (id,a) values (935,14);
+insert into t (id,a) values (935,15);
+insert into t (id,a) values (935,16);
+insert into t (id,a) values (935,17);
+insert into t (id,a) values (935,18);
+insert into t (id,a) values (935,19);
+insert into t (id,a) values (935,20);
+insert into t (id,a) values (935,21);
+insert into t (id,a) values (935,22);
+insert into t (id,a) values (935,23);
+insert into t (id,a) values (935,24);
+insert into t (id,a) values (935,25);
+insert into t (id,a) values (935,26);
+insert into t (id,a) values (935,27);
+insert into t (id,a) values (935,28);
+insert into t (id,a) values (935,29);
+insert into t (id,a) values (935,30);
+insert into t (id,a) values (935,31);
+insert into t (id,a) values (935,32);
+insert into t (id,a) values (935,33);
+insert into t (id,a) values (935,34);
+insert into t (id,a) values (935,35);
+insert into t (id,a) values (935,36);
+insert into t (id,a) values (935,37);
+insert into t (id,a) values (935,38);
+insert into t (id,a) values (935,39);
+insert into t (id,a) values (935,40);
+insert into t (id,a) values (935,41);
+insert into t (id,a) values (935,42);
+insert into t (id,a) values (935,43);
+insert into t (id,a) values (935,44);
+insert into t (id,a) values (935,45);
+insert into t (id,a) values (935,46);
+insert into t (id,a) values (935,47);
+insert into t (id,a) values (935,48);
+insert into t (id,a) values (935,49);
+insert into t (id,a) values (935,50);
+insert into t (id,a) values (935,51);
+insert into t (id,a) values (935,52);
+insert into t (id,a) values (935,53);
+insert into t (id,a) values (935,54);
+insert into t (id,a) values (935,55);
+insert into t (id,a) values (935,56);
+insert into t (id,a) values (935,57);
+insert into t (id,a) values (935,58);
+insert into t (id,a) values (935,59);
+insert into t (id,a) values (935,60);
+insert into t (id,a) values (935,61);
+insert into t (id,a) values (935,62);
+insert into t (id,a) values (935,63);
+insert into t (id,a) values (935,64);
+insert into t (id,a) values (935,65);
+insert into t (id,a) values (935,66);
+insert into t (id,a) values (935,67);
+insert into t (id,a) values (935,68);
+insert into t (id,a) values (935,69);
+insert into t (id,a) values (935,70);
+insert into t (id,a) values (935,71);
+insert into t (id,a) values (935,72);
+insert into t (id,a) values (935,73);
+insert into t (id,a) values (935,74);
+insert into t (id,a) values (935,75);
+insert into t (id,a) values (935,76);
+insert into t (id,a) values (935,77);
+insert into t (id,a) values (935,78);
+insert into t (id,a) values (935,79);
+insert into t (id,a) values (935,80);
+insert into t (id,a) values (935,81);
+insert into t (id,a) values (935,82);
+insert into t (id,a) values (935,83);
+insert into t (id,a) values (935,84);
+insert into t (id,a) values (935,85);
+insert into t (id,a) values (935,86);
+insert into t (id,a) values (935,87);
+insert into t (id,a) values (935,88);
+insert into t (id,a) values (935,89);
+insert into t (id,a) values (935,90);
+insert into t (id,a) values (935,91);
+insert into t (id,a) values (935,92);
+insert into t (id,a) values (935,93);
+insert into t (id,a) values (935,94);
+insert into t (id,a) values (935,95);
+insert into t (id,a) values (935,96);
+insert into t (id,a) values (935,97);
+insert into t (id,a) values (935,98);
+insert into t (id,a) values (935,99);
+insert into t (id,a) values (936,0);
+insert into t (id,a) values (936,1);
+insert into t (id,a) values (936,2);
+insert into t (id,a) values (936,3);
+insert into t (id,a) values (936,4);
+insert into t (id,a) values (936,5);
+insert into t (id,a) values (936,6);
+insert into t (id,a) values (936,7);
+insert into t (id,a) values (936,8);
+insert into t (id,a) values (936,9);
+insert into t (id,a) values (936,10);
+insert into t (id,a) values (936,11);
+insert into t (id,a) values (936,12);
+insert into t (id,a) values (936,13);
+insert into t (id,a) values (936,14);
+insert into t (id,a) values (936,15);
+insert into t (id,a) values (936,16);
+insert into t (id,a) values (936,17);
+insert into t (id,a) values (936,18);
+insert into t (id,a) values (936,19);
+insert into t (id,a) values (936,20);
+insert into t (id,a) values (936,21);
+insert into t (id,a) values (936,22);
+insert into t (id,a) values (936,23);
+insert into t (id,a) values (936,24);
+insert into t (id,a) values (936,25);
+insert into t (id,a) values (936,26);
+insert into t (id,a) values (936,27);
+insert into t (id,a) values (936,28);
+insert into t (id,a) values (936,29);
+insert into t (id,a) values (936,30);
+insert into t (id,a) values (936,31);
+insert into t (id,a) values (936,32);
+insert into t (id,a) values (936,33);
+insert into t (id,a) values (936,34);
+insert into t (id,a) values (936,35);
+insert into t (id,a) values (936,36);
+insert into t (id,a) values (936,37);
+insert into t (id,a) values (936,38);
+insert into t (id,a) values (936,39);
+insert into t (id,a) values (936,40);
+insert into t (id,a) values (936,41);
+insert into t (id,a) values (936,42);
+insert into t (id,a) values (936,43);
+insert into t (id,a) values (936,44);
+insert into t (id,a) values (936,45);
+insert into t (id,a) values (936,46);
+insert into t (id,a) values (936,47);
+insert into t (id,a) values (936,48);
+insert into t (id,a) values (936,49);
+insert into t (id,a) values (936,50);
+insert into t (id,a) values (936,51);
+insert into t (id,a) values (936,52);
+insert into t (id,a) values (936,53);
+insert into t (id,a) values (936,54);
+insert into t (id,a) values (936,55);
+insert into t (id,a) values (936,56);
+insert into t (id,a) values (936,57);
+insert into t (id,a) values (936,58);
+insert into t (id,a) values (936,59);
+insert into t (id,a) values (936,60);
+insert into t (id,a) values (936,61);
+insert into t (id,a) values (936,62);
+insert into t (id,a) values (936,63);
+insert into t (id,a) values (936,64);
+insert into t (id,a) values (936,65);
+insert into t (id,a) values (936,66);
+insert into t (id,a) values (936,67);
+insert into t (id,a) values (936,68);
+insert into t (id,a) values (936,69);
+insert into t (id,a) values (936,70);
+insert into t (id,a) values (936,71);
+insert into t (id,a) values (936,72);
+insert into t (id,a) values (936,73);
+insert into t (id,a) values (936,74);
+insert into t (id,a) values (936,75);
+insert into t (id,a) values (936,76);
+insert into t (id,a) values (936,77);
+insert into t (id,a) values (936,78);
+insert into t (id,a) values (936,79);
+insert into t (id,a) values (936,80);
+insert into t (id,a) values (936,81);
+insert into t (id,a) values (936,82);
+insert into t (id,a) values (936,83);
+insert into t (id,a) values (936,84);
+insert into t (id,a) values (936,85);
+insert into t (id,a) values (936,86);
+insert into t (id,a) values (936,87);
+insert into t (id,a) values (936,88);
+insert into t (id,a) values (936,89);
+insert into t (id,a) values (936,90);
+insert into t (id,a) values (936,91);
+insert into t (id,a) values (936,92);
+insert into t (id,a) values (936,93);
+insert into t (id,a) values (936,94);
+insert into t (id,a) values (936,95);
+insert into t (id,a) values (936,96);
+insert into t (id,a) values (936,97);
+insert into t (id,a) values (936,98);
+insert into t (id,a) values (936,99);
+insert into t (id,a) values (937,0);
+insert into t (id,a) values (937,1);
+insert into t (id,a) values (937,2);
+insert into t (id,a) values (937,3);
+insert into t (id,a) values (937,4);
+insert into t (id,a) values (937,5);
+insert into t (id,a) values (937,6);
+insert into t (id,a) values (937,7);
+insert into t (id,a) values (937,8);
+insert into t (id,a) values (937,9);
+insert into t (id,a) values (937,10);
+insert into t (id,a) values (937,11);
+insert into t (id,a) values (937,12);
+insert into t (id,a) values (937,13);
+insert into t (id,a) values (937,14);
+insert into t (id,a) values (937,15);
+insert into t (id,a) values (937,16);
+insert into t (id,a) values (937,17);
+insert into t (id,a) values (937,18);
+insert into t (id,a) values (937,19);
+insert into t (id,a) values (937,20);
+insert into t (id,a) values (937,21);
+insert into t (id,a) values (937,22);
+insert into t (id,a) values (937,23);
+insert into t (id,a) values (937,24);
+insert into t (id,a) values (937,25);
+insert into t (id,a) values (937,26);
+insert into t (id,a) values (937,27);
+insert into t (id,a) values (937,28);
+insert into t (id,a) values (937,29);
+insert into t (id,a) values (937,30);
+insert into t (id,a) values (937,31);
+insert into t (id,a) values (937,32);
+insert into t (id,a) values (937,33);
+insert into t (id,a) values (937,34);
+insert into t (id,a) values (937,35);
+insert into t (id,a) values (937,36);
+insert into t (id,a) values (937,37);
+insert into t (id,a) values (937,38);
+insert into t (id,a) values (937,39);
+insert into t (id,a) values (937,40);
+insert into t (id,a) values (937,41);
+insert into t (id,a) values (937,42);
+insert into t (id,a) values (937,43);
+insert into t (id,a) values (937,44);
+insert into t (id,a) values (937,45);
+insert into t (id,a) values (937,46);
+insert into t (id,a) values (937,47);
+insert into t (id,a) values (937,48);
+insert into t (id,a) values (937,49);
+insert into t (id,a) values (937,50);
+insert into t (id,a) values (937,51);
+insert into t (id,a) values (937,52);
+insert into t (id,a) values (937,53);
+insert into t (id,a) values (937,54);
+insert into t (id,a) values (937,55);
+insert into t (id,a) values (937,56);
+insert into t (id,a) values (937,57);
+insert into t (id,a) values (937,58);
+insert into t (id,a) values (937,59);
+insert into t (id,a) values (937,60);
+insert into t (id,a) values (937,61);
+insert into t (id,a) values (937,62);
+insert into t (id,a) values (937,63);
+insert into t (id,a) values (937,64);
+insert into t (id,a) values (937,65);
+insert into t (id,a) values (937,66);
+insert into t (id,a) values (937,67);
+insert into t (id,a) values (937,68);
+insert into t (id,a) values (937,69);
+insert into t (id,a) values (937,70);
+insert into t (id,a) values (937,71);
+insert into t (id,a) values (937,72);
+insert into t (id,a) values (937,73);
+insert into t (id,a) values (937,74);
+insert into t (id,a) values (937,75);
+insert into t (id,a) values (937,76);
+insert into t (id,a) values (937,77);
+insert into t (id,a) values (937,78);
+insert into t (id,a) values (937,79);
+insert into t (id,a) values (937,80);
+insert into t (id,a) values (937,81);
+insert into t (id,a) values (937,82);
+insert into t (id,a) values (937,83);
+insert into t (id,a) values (937,84);
+insert into t (id,a) values (937,85);
+insert into t (id,a) values (937,86);
+insert into t (id,a) values (937,87);
+insert into t (id,a) values (937,88);
+insert into t (id,a) values (937,89);
+insert into t (id,a) values (937,90);
+insert into t (id,a) values (937,91);
+insert into t (id,a) values (937,92);
+insert into t (id,a) values (937,93);
+insert into t (id,a) values (937,94);
+insert into t (id,a) values (937,95);
+insert into t (id,a) values (937,96);
+insert into t (id,a) values (937,97);
+insert into t (id,a) values (937,98);
+insert into t (id,a) values (937,99);
+insert into t (id,a) values (938,0);
+insert into t (id,a) values (938,1);
+insert into t (id,a) values (938,2);
+insert into t (id,a) values (938,3);
+insert into t (id,a) values (938,4);
+insert into t (id,a) values (938,5);
+insert into t (id,a) values (938,6);
+insert into t (id,a) values (938,7);
+insert into t (id,a) values (938,8);
+insert into t (id,a) values (938,9);
+insert into t (id,a) values (938,10);
+insert into t (id,a) values (938,11);
+insert into t (id,a) values (938,12);
+insert into t (id,a) values (938,13);
+insert into t (id,a) values (938,14);
+insert into t (id,a) values (938,15);
+insert into t (id,a) values (938,16);
+insert into t (id,a) values (938,17);
+insert into t (id,a) values (938,18);
+insert into t (id,a) values (938,19);
+insert into t (id,a) values (938,20);
+insert into t (id,a) values (938,21);
+insert into t (id,a) values (938,22);
+insert into t (id,a) values (938,23);
+insert into t (id,a) values (938,24);
+insert into t (id,a) values (938,25);
+insert into t (id,a) values (938,26);
+insert into t (id,a) values (938,27);
+insert into t (id,a) values (938,28);
+insert into t (id,a) values (938,29);
+insert into t (id,a) values (938,30);
+insert into t (id,a) values (938,31);
+insert into t (id,a) values (938,32);
+insert into t (id,a) values (938,33);
+insert into t (id,a) values (938,34);
+insert into t (id,a) values (938,35);
+insert into t (id,a) values (938,36);
+insert into t (id,a) values (938,37);
+insert into t (id,a) values (938,38);
+insert into t (id,a) values (938,39);
+insert into t (id,a) values (938,40);
+insert into t (id,a) values (938,41);
+insert into t (id,a) values (938,42);
+insert into t (id,a) values (938,43);
+insert into t (id,a) values (938,44);
+insert into t (id,a) values (938,45);
+insert into t (id,a) values (938,46);
+insert into t (id,a) values (938,47);
+insert into t (id,a) values (938,48);
+insert into t (id,a) values (938,49);
+insert into t (id,a) values (938,50);
+insert into t (id,a) values (938,51);
+insert into t (id,a) values (938,52);
+insert into t (id,a) values (938,53);
+insert into t (id,a) values (938,54);
+insert into t (id,a) values (938,55);
+insert into t (id,a) values (938,56);
+insert into t (id,a) values (938,57);
+insert into t (id,a) values (938,58);
+insert into t (id,a) values (938,59);
+insert into t (id,a) values (938,60);
+insert into t (id,a) values (938,61);
+insert into t (id,a) values (938,62);
+insert into t (id,a) values (938,63);
+insert into t (id,a) values (938,64);
+insert into t (id,a) values (938,65);
+insert into t (id,a) values (938,66);
+insert into t (id,a) values (938,67);
+insert into t (id,a) values (938,68);
+insert into t (id,a) values (938,69);
+insert into t (id,a) values (938,70);
+insert into t (id,a) values (938,71);
+insert into t (id,a) values (938,72);
+insert into t (id,a) values (938,73);
+insert into t (id,a) values (938,74);
+insert into t (id,a) values (938,75);
+insert into t (id,a) values (938,76);
+insert into t (id,a) values (938,77);
+insert into t (id,a) values (938,78);
+insert into t (id,a) values (938,79);
+insert into t (id,a) values (938,80);
+insert into t (id,a) values (938,81);
+insert into t (id,a) values (938,82);
+insert into t (id,a) values (938,83);
+insert into t (id,a) values (938,84);
+insert into t (id,a) values (938,85);
+insert into t (id,a) values (938,86);
+insert into t (id,a) values (938,87);
+insert into t (id,a) values (938,88);
+insert into t (id,a) values (938,89);
+insert into t (id,a) values (938,90);
+insert into t (id,a) values (938,91);
+insert into t (id,a) values (938,92);
+insert into t (id,a) values (938,93);
+insert into t (id,a) values (938,94);
+insert into t (id,a) values (938,95);
+insert into t (id,a) values (938,96);
+insert into t (id,a) values (938,97);
+insert into t (id,a) values (938,98);
+insert into t (id,a) values (938,99);
+insert into t (id,a) values (939,0);
+insert into t (id,a) values (939,1);
+insert into t (id,a) values (939,2);
+insert into t (id,a) values (939,3);
+insert into t (id,a) values (939,4);
+insert into t (id,a) values (939,5);
+insert into t (id,a) values (939,6);
+insert into t (id,a) values (939,7);
+insert into t (id,a) values (939,8);
+insert into t (id,a) values (939,9);
+insert into t (id,a) values (939,10);
+insert into t (id,a) values (939,11);
+insert into t (id,a) values (939,12);
+insert into t (id,a) values (939,13);
+insert into t (id,a) values (939,14);
+insert into t (id,a) values (939,15);
+insert into t (id,a) values (939,16);
+insert into t (id,a) values (939,17);
+insert into t (id,a) values (939,18);
+insert into t (id,a) values (939,19);
+insert into t (id,a) values (939,20);
+insert into t (id,a) values (939,21);
+insert into t (id,a) values (939,22);
+insert into t (id,a) values (939,23);
+insert into t (id,a) values (939,24);
+insert into t (id,a) values (939,25);
+insert into t (id,a) values (939,26);
+insert into t (id,a) values (939,27);
+insert into t (id,a) values (939,28);
+insert into t (id,a) values (939,29);
+insert into t (id,a) values (939,30);
+insert into t (id,a) values (939,31);
+insert into t (id,a) values (939,32);
+insert into t (id,a) values (939,33);
+insert into t (id,a) values (939,34);
+insert into t (id,a) values (939,35);
+insert into t (id,a) values (939,36);
+insert into t (id,a) values (939,37);
+insert into t (id,a) values (939,38);
+insert into t (id,a) values (939,39);
+insert into t (id,a) values (939,40);
+insert into t (id,a) values (939,41);
+insert into t (id,a) values (939,42);
+insert into t (id,a) values (939,43);
+insert into t (id,a) values (939,44);
+insert into t (id,a) values (939,45);
+insert into t (id,a) values (939,46);
+insert into t (id,a) values (939,47);
+insert into t (id,a) values (939,48);
+insert into t (id,a) values (939,49);
+insert into t (id,a) values (939,50);
+insert into t (id,a) values (939,51);
+insert into t (id,a) values (939,52);
+insert into t (id,a) values (939,53);
+insert into t (id,a) values (939,54);
+insert into t (id,a) values (939,55);
+insert into t (id,a) values (939,56);
+insert into t (id,a) values (939,57);
+insert into t (id,a) values (939,58);
+insert into t (id,a) values (939,59);
+insert into t (id,a) values (939,60);
+insert into t (id,a) values (939,61);
+insert into t (id,a) values (939,62);
+insert into t (id,a) values (939,63);
+insert into t (id,a) values (939,64);
+insert into t (id,a) values (939,65);
+insert into t (id,a) values (939,66);
+insert into t (id,a) values (939,67);
+insert into t (id,a) values (939,68);
+insert into t (id,a) values (939,69);
+insert into t (id,a) values (939,70);
+insert into t (id,a) values (939,71);
+insert into t (id,a) values (939,72);
+insert into t (id,a) values (939,73);
+insert into t (id,a) values (939,74);
+insert into t (id,a) values (939,75);
+insert into t (id,a) values (939,76);
+insert into t (id,a) values (939,77);
+insert into t (id,a) values (939,78);
+insert into t (id,a) values (939,79);
+insert into t (id,a) values (939,80);
+insert into t (id,a) values (939,81);
+insert into t (id,a) values (939,82);
+insert into t (id,a) values (939,83);
+insert into t (id,a) values (939,84);
+insert into t (id,a) values (939,85);
+insert into t (id,a) values (939,86);
+insert into t (id,a) values (939,87);
+insert into t (id,a) values (939,88);
+insert into t (id,a) values (939,89);
+insert into t (id,a) values (939,90);
+insert into t (id,a) values (939,91);
+insert into t (id,a) values (939,92);
+insert into t (id,a) values (939,93);
+insert into t (id,a) values (939,94);
+insert into t (id,a) values (939,95);
+insert into t (id,a) values (939,96);
+insert into t (id,a) values (939,97);
+insert into t (id,a) values (939,98);
+insert into t (id,a) values (939,99);
+insert into t (id,a) values (940,0);
+insert into t (id,a) values (940,1);
+insert into t (id,a) values (940,2);
+insert into t (id,a) values (940,3);
+insert into t (id,a) values (940,4);
+insert into t (id,a) values (940,5);
+insert into t (id,a) values (940,6);
+insert into t (id,a) values (940,7);
+insert into t (id,a) values (940,8);
+insert into t (id,a) values (940,9);
+insert into t (id,a) values (940,10);
+insert into t (id,a) values (940,11);
+insert into t (id,a) values (940,12);
+insert into t (id,a) values (940,13);
+insert into t (id,a) values (940,14);
+insert into t (id,a) values (940,15);
+insert into t (id,a) values (940,16);
+insert into t (id,a) values (940,17);
+insert into t (id,a) values (940,18);
+insert into t (id,a) values (940,19);
+insert into t (id,a) values (940,20);
+insert into t (id,a) values (940,21);
+insert into t (id,a) values (940,22);
+insert into t (id,a) values (940,23);
+insert into t (id,a) values (940,24);
+insert into t (id,a) values (940,25);
+insert into t (id,a) values (940,26);
+insert into t (id,a) values (940,27);
+insert into t (id,a) values (940,28);
+insert into t (id,a) values (940,29);
+insert into t (id,a) values (940,30);
+insert into t (id,a) values (940,31);
+insert into t (id,a) values (940,32);
+insert into t (id,a) values (940,33);
+insert into t (id,a) values (940,34);
+insert into t (id,a) values (940,35);
+insert into t (id,a) values (940,36);
+insert into t (id,a) values (940,37);
+insert into t (id,a) values (940,38);
+insert into t (id,a) values (940,39);
+insert into t (id,a) values (940,40);
+insert into t (id,a) values (940,41);
+insert into t (id,a) values (940,42);
+insert into t (id,a) values (940,43);
+insert into t (id,a) values (940,44);
+insert into t (id,a) values (940,45);
+insert into t (id,a) values (940,46);
+insert into t (id,a) values (940,47);
+insert into t (id,a) values (940,48);
+insert into t (id,a) values (940,49);
+insert into t (id,a) values (940,50);
+insert into t (id,a) values (940,51);
+insert into t (id,a) values (940,52);
+insert into t (id,a) values (940,53);
+insert into t (id,a) values (940,54);
+insert into t (id,a) values (940,55);
+insert into t (id,a) values (940,56);
+insert into t (id,a) values (940,57);
+insert into t (id,a) values (940,58);
+insert into t (id,a) values (940,59);
+insert into t (id,a) values (940,60);
+insert into t (id,a) values (940,61);
+insert into t (id,a) values (940,62);
+insert into t (id,a) values (940,63);
+insert into t (id,a) values (940,64);
+insert into t (id,a) values (940,65);
+insert into t (id,a) values (940,66);
+insert into t (id,a) values (940,67);
+insert into t (id,a) values (940,68);
+insert into t (id,a) values (940,69);
+insert into t (id,a) values (940,70);
+insert into t (id,a) values (940,71);
+insert into t (id,a) values (940,72);
+insert into t (id,a) values (940,73);
+insert into t (id,a) values (940,74);
+insert into t (id,a) values (940,75);
+insert into t (id,a) values (940,76);
+insert into t (id,a) values (940,77);
+insert into t (id,a) values (940,78);
+insert into t (id,a) values (940,79);
+insert into t (id,a) values (940,80);
+insert into t (id,a) values (940,81);
+insert into t (id,a) values (940,82);
+insert into t (id,a) values (940,83);
+insert into t (id,a) values (940,84);
+insert into t (id,a) values (940,85);
+insert into t (id,a) values (940,86);
+insert into t (id,a) values (940,87);
+insert into t (id,a) values (940,88);
+insert into t (id,a) values (940,89);
+insert into t (id,a) values (940,90);
+insert into t (id,a) values (940,91);
+insert into t (id,a) values (940,92);
+insert into t (id,a) values (940,93);
+insert into t (id,a) values (940,94);
+insert into t (id,a) values (940,95);
+insert into t (id,a) values (940,96);
+insert into t (id,a) values (940,97);
+insert into t (id,a) values (940,98);
+insert into t (id,a) values (940,99);
+insert into t (id,a) values (941,0);
+insert into t (id,a) values (941,1);
+insert into t (id,a) values (941,2);
+insert into t (id,a) values (941,3);
+insert into t (id,a) values (941,4);
+insert into t (id,a) values (941,5);
+insert into t (id,a) values (941,6);
+insert into t (id,a) values (941,7);
+insert into t (id,a) values (941,8);
+insert into t (id,a) values (941,9);
+insert into t (id,a) values (941,10);
+insert into t (id,a) values (941,11);
+insert into t (id,a) values (941,12);
+insert into t (id,a) values (941,13);
+insert into t (id,a) values (941,14);
+insert into t (id,a) values (941,15);
+insert into t (id,a) values (941,16);
+insert into t (id,a) values (941,17);
+insert into t (id,a) values (941,18);
+insert into t (id,a) values (941,19);
+insert into t (id,a) values (941,20);
+insert into t (id,a) values (941,21);
+insert into t (id,a) values (941,22);
+insert into t (id,a) values (941,23);
+insert into t (id,a) values (941,24);
+insert into t (id,a) values (941,25);
+insert into t (id,a) values (941,26);
+insert into t (id,a) values (941,27);
+insert into t (id,a) values (941,28);
+insert into t (id,a) values (941,29);
+insert into t (id,a) values (941,30);
+insert into t (id,a) values (941,31);
+insert into t (id,a) values (941,32);
+insert into t (id,a) values (941,33);
+insert into t (id,a) values (941,34);
+insert into t (id,a) values (941,35);
+insert into t (id,a) values (941,36);
+insert into t (id,a) values (941,37);
+insert into t (id,a) values (941,38);
+insert into t (id,a) values (941,39);
+insert into t (id,a) values (941,40);
+insert into t (id,a) values (941,41);
+insert into t (id,a) values (941,42);
+insert into t (id,a) values (941,43);
+insert into t (id,a) values (941,44);
+insert into t (id,a) values (941,45);
+insert into t (id,a) values (941,46);
+insert into t (id,a) values (941,47);
+insert into t (id,a) values (941,48);
+insert into t (id,a) values (941,49);
+insert into t (id,a) values (941,50);
+insert into t (id,a) values (941,51);
+insert into t (id,a) values (941,52);
+insert into t (id,a) values (941,53);
+insert into t (id,a) values (941,54);
+insert into t (id,a) values (941,55);
+insert into t (id,a) values (941,56);
+insert into t (id,a) values (941,57);
+insert into t (id,a) values (941,58);
+insert into t (id,a) values (941,59);
+insert into t (id,a) values (941,60);
+insert into t (id,a) values (941,61);
+insert into t (id,a) values (941,62);
+insert into t (id,a) values (941,63);
+insert into t (id,a) values (941,64);
+insert into t (id,a) values (941,65);
+insert into t (id,a) values (941,66);
+insert into t (id,a) values (941,67);
+insert into t (id,a) values (941,68);
+insert into t (id,a) values (941,69);
+insert into t (id,a) values (941,70);
+insert into t (id,a) values (941,71);
+insert into t (id,a) values (941,72);
+insert into t (id,a) values (941,73);
+insert into t (id,a) values (941,74);
+insert into t (id,a) values (941,75);
+insert into t (id,a) values (941,76);
+insert into t (id,a) values (941,77);
+insert into t (id,a) values (941,78);
+insert into t (id,a) values (941,79);
+insert into t (id,a) values (941,80);
+insert into t (id,a) values (941,81);
+insert into t (id,a) values (941,82);
+insert into t (id,a) values (941,83);
+insert into t (id,a) values (941,84);
+insert into t (id,a) values (941,85);
+insert into t (id,a) values (941,86);
+insert into t (id,a) values (941,87);
+insert into t (id,a) values (941,88);
+insert into t (id,a) values (941,89);
+insert into t (id,a) values (941,90);
+insert into t (id,a) values (941,91);
+insert into t (id,a) values (941,92);
+insert into t (id,a) values (941,93);
+insert into t (id,a) values (941,94);
+insert into t (id,a) values (941,95);
+insert into t (id,a) values (941,96);
+insert into t (id,a) values (941,97);
+insert into t (id,a) values (941,98);
+insert into t (id,a) values (941,99);
+insert into t (id,a) values (942,0);
+insert into t (id,a) values (942,1);
+insert into t (id,a) values (942,2);
+insert into t (id,a) values (942,3);
+insert into t (id,a) values (942,4);
+insert into t (id,a) values (942,5);
+insert into t (id,a) values (942,6);
+insert into t (id,a) values (942,7);
+insert into t (id,a) values (942,8);
+insert into t (id,a) values (942,9);
+insert into t (id,a) values (942,10);
+insert into t (id,a) values (942,11);
+insert into t (id,a) values (942,12);
+insert into t (id,a) values (942,13);
+insert into t (id,a) values (942,14);
+insert into t (id,a) values (942,15);
+insert into t (id,a) values (942,16);
+insert into t (id,a) values (942,17);
+insert into t (id,a) values (942,18);
+insert into t (id,a) values (942,19);
+insert into t (id,a) values (942,20);
+insert into t (id,a) values (942,21);
+insert into t (id,a) values (942,22);
+insert into t (id,a) values (942,23);
+insert into t (id,a) values (942,24);
+insert into t (id,a) values (942,25);
+insert into t (id,a) values (942,26);
+insert into t (id,a) values (942,27);
+insert into t (id,a) values (942,28);
+insert into t (id,a) values (942,29);
+insert into t (id,a) values (942,30);
+insert into t (id,a) values (942,31);
+insert into t (id,a) values (942,32);
+insert into t (id,a) values (942,33);
+insert into t (id,a) values (942,34);
+insert into t (id,a) values (942,35);
+insert into t (id,a) values (942,36);
+insert into t (id,a) values (942,37);
+insert into t (id,a) values (942,38);
+insert into t (id,a) values (942,39);
+insert into t (id,a) values (942,40);
+insert into t (id,a) values (942,41);
+insert into t (id,a) values (942,42);
+insert into t (id,a) values (942,43);
+insert into t (id,a) values (942,44);
+insert into t (id,a) values (942,45);
+insert into t (id,a) values (942,46);
+insert into t (id,a) values (942,47);
+insert into t (id,a) values (942,48);
+insert into t (id,a) values (942,49);
+insert into t (id,a) values (942,50);
+insert into t (id,a) values (942,51);
+insert into t (id,a) values (942,52);
+insert into t (id,a) values (942,53);
+insert into t (id,a) values (942,54);
+insert into t (id,a) values (942,55);
+insert into t (id,a) values (942,56);
+insert into t (id,a) values (942,57);
+insert into t (id,a) values (942,58);
+insert into t (id,a) values (942,59);
+insert into t (id,a) values (942,60);
+insert into t (id,a) values (942,61);
+insert into t (id,a) values (942,62);
+insert into t (id,a) values (942,63);
+insert into t (id,a) values (942,64);
+insert into t (id,a) values (942,65);
+insert into t (id,a) values (942,66);
+insert into t (id,a) values (942,67);
+insert into t (id,a) values (942,68);
+insert into t (id,a) values (942,69);
+insert into t (id,a) values (942,70);
+insert into t (id,a) values (942,71);
+insert into t (id,a) values (942,72);
+insert into t (id,a) values (942,73);
+insert into t (id,a) values (942,74);
+insert into t (id,a) values (942,75);
+insert into t (id,a) values (942,76);
+insert into t (id,a) values (942,77);
+insert into t (id,a) values (942,78);
+insert into t (id,a) values (942,79);
+insert into t (id,a) values (942,80);
+insert into t (id,a) values (942,81);
+insert into t (id,a) values (942,82);
+insert into t (id,a) values (942,83);
+insert into t (id,a) values (942,84);
+insert into t (id,a) values (942,85);
+insert into t (id,a) values (942,86);
+insert into t (id,a) values (942,87);
+insert into t (id,a) values (942,88);
+insert into t (id,a) values (942,89);
+insert into t (id,a) values (942,90);
+insert into t (id,a) values (942,91);
+insert into t (id,a) values (942,92);
+insert into t (id,a) values (942,93);
+insert into t (id,a) values (942,94);
+insert into t (id,a) values (942,95);
+insert into t (id,a) values (942,96);
+insert into t (id,a) values (942,97);
+insert into t (id,a) values (942,98);
+insert into t (id,a) values (942,99);
+insert into t (id,a) values (943,0);
+insert into t (id,a) values (943,1);
+insert into t (id,a) values (943,2);
+insert into t (id,a) values (943,3);
+insert into t (id,a) values (943,4);
+insert into t (id,a) values (943,5);
+insert into t (id,a) values (943,6);
+insert into t (id,a) values (943,7);
+insert into t (id,a) values (943,8);
+insert into t (id,a) values (943,9);
+insert into t (id,a) values (943,10);
+insert into t (id,a) values (943,11);
+insert into t (id,a) values (943,12);
+insert into t (id,a) values (943,13);
+insert into t (id,a) values (943,14);
+insert into t (id,a) values (943,15);
+insert into t (id,a) values (943,16);
+insert into t (id,a) values (943,17);
+insert into t (id,a) values (943,18);
+insert into t (id,a) values (943,19);
+insert into t (id,a) values (943,20);
+insert into t (id,a) values (943,21);
+insert into t (id,a) values (943,22);
+insert into t (id,a) values (943,23);
+insert into t (id,a) values (943,24);
+insert into t (id,a) values (943,25);
+insert into t (id,a) values (943,26);
+insert into t (id,a) values (943,27);
+insert into t (id,a) values (943,28);
+insert into t (id,a) values (943,29);
+insert into t (id,a) values (943,30);
+insert into t (id,a) values (943,31);
+insert into t (id,a) values (943,32);
+insert into t (id,a) values (943,33);
+insert into t (id,a) values (943,34);
+insert into t (id,a) values (943,35);
+insert into t (id,a) values (943,36);
+insert into t (id,a) values (943,37);
+insert into t (id,a) values (943,38);
+insert into t (id,a) values (943,39);
+insert into t (id,a) values (943,40);
+insert into t (id,a) values (943,41);
+insert into t (id,a) values (943,42);
+insert into t (id,a) values (943,43);
+insert into t (id,a) values (943,44);
+insert into t (id,a) values (943,45);
+insert into t (id,a) values (943,46);
+insert into t (id,a) values (943,47);
+insert into t (id,a) values (943,48);
+insert into t (id,a) values (943,49);
+insert into t (id,a) values (943,50);
+insert into t (id,a) values (943,51);
+insert into t (id,a) values (943,52);
+insert into t (id,a) values (943,53);
+insert into t (id,a) values (943,54);
+insert into t (id,a) values (943,55);
+insert into t (id,a) values (943,56);
+insert into t (id,a) values (943,57);
+insert into t (id,a) values (943,58);
+insert into t (id,a) values (943,59);
+insert into t (id,a) values (943,60);
+insert into t (id,a) values (943,61);
+insert into t (id,a) values (943,62);
+insert into t (id,a) values (943,63);
+insert into t (id,a) values (943,64);
+insert into t (id,a) values (943,65);
+insert into t (id,a) values (943,66);
+insert into t (id,a) values (943,67);
+insert into t (id,a) values (943,68);
+insert into t (id,a) values (943,69);
+insert into t (id,a) values (943,70);
+insert into t (id,a) values (943,71);
+insert into t (id,a) values (943,72);
+insert into t (id,a) values (943,73);
+insert into t (id,a) values (943,74);
+insert into t (id,a) values (943,75);
+insert into t (id,a) values (943,76);
+insert into t (id,a) values (943,77);
+insert into t (id,a) values (943,78);
+insert into t (id,a) values (943,79);
+insert into t (id,a) values (943,80);
+insert into t (id,a) values (943,81);
+insert into t (id,a) values (943,82);
+insert into t (id,a) values (943,83);
+insert into t (id,a) values (943,84);
+insert into t (id,a) values (943,85);
+insert into t (id,a) values (943,86);
+insert into t (id,a) values (943,87);
+insert into t (id,a) values (943,88);
+insert into t (id,a) values (943,89);
+insert into t (id,a) values (943,90);
+insert into t (id,a) values (943,91);
+insert into t (id,a) values (943,92);
+insert into t (id,a) values (943,93);
+insert into t (id,a) values (943,94);
+insert into t (id,a) values (943,95);
+insert into t (id,a) values (943,96);
+insert into t (id,a) values (943,97);
+insert into t (id,a) values (943,98);
+insert into t (id,a) values (943,99);
+insert into t (id,a) values (944,0);
+insert into t (id,a) values (944,1);
+insert into t (id,a) values (944,2);
+insert into t (id,a) values (944,3);
+insert into t (id,a) values (944,4);
+insert into t (id,a) values (944,5);
+insert into t (id,a) values (944,6);
+insert into t (id,a) values (944,7);
+insert into t (id,a) values (944,8);
+insert into t (id,a) values (944,9);
+insert into t (id,a) values (944,10);
+insert into t (id,a) values (944,11);
+insert into t (id,a) values (944,12);
+insert into t (id,a) values (944,13);
+insert into t (id,a) values (944,14);
+insert into t (id,a) values (944,15);
+insert into t (id,a) values (944,16);
+insert into t (id,a) values (944,17);
+insert into t (id,a) values (944,18);
+insert into t (id,a) values (944,19);
+insert into t (id,a) values (944,20);
+insert into t (id,a) values (944,21);
+insert into t (id,a) values (944,22);
+insert into t (id,a) values (944,23);
+insert into t (id,a) values (944,24);
+insert into t (id,a) values (944,25);
+insert into t (id,a) values (944,26);
+insert into t (id,a) values (944,27);
+insert into t (id,a) values (944,28);
+insert into t (id,a) values (944,29);
+insert into t (id,a) values (944,30);
+insert into t (id,a) values (944,31);
+insert into t (id,a) values (944,32);
+insert into t (id,a) values (944,33);
+insert into t (id,a) values (944,34);
+insert into t (id,a) values (944,35);
+insert into t (id,a) values (944,36);
+insert into t (id,a) values (944,37);
+insert into t (id,a) values (944,38);
+insert into t (id,a) values (944,39);
+insert into t (id,a) values (944,40);
+insert into t (id,a) values (944,41);
+insert into t (id,a) values (944,42);
+insert into t (id,a) values (944,43);
+insert into t (id,a) values (944,44);
+insert into t (id,a) values (944,45);
+insert into t (id,a) values (944,46);
+insert into t (id,a) values (944,47);
+insert into t (id,a) values (944,48);
+insert into t (id,a) values (944,49);
+insert into t (id,a) values (944,50);
+insert into t (id,a) values (944,51);
+insert into t (id,a) values (944,52);
+insert into t (id,a) values (944,53);
+insert into t (id,a) values (944,54);
+insert into t (id,a) values (944,55);
+insert into t (id,a) values (944,56);
+insert into t (id,a) values (944,57);
+insert into t (id,a) values (944,58);
+insert into t (id,a) values (944,59);
+insert into t (id,a) values (944,60);
+insert into t (id,a) values (944,61);
+insert into t (id,a) values (944,62);
+insert into t (id,a) values (944,63);
+insert into t (id,a) values (944,64);
+insert into t (id,a) values (944,65);
+insert into t (id,a) values (944,66);
+insert into t (id,a) values (944,67);
+insert into t (id,a) values (944,68);
+insert into t (id,a) values (944,69);
+insert into t (id,a) values (944,70);
+insert into t (id,a) values (944,71);
+insert into t (id,a) values (944,72);
+insert into t (id,a) values (944,73);
+insert into t (id,a) values (944,74);
+insert into t (id,a) values (944,75);
+insert into t (id,a) values (944,76);
+insert into t (id,a) values (944,77);
+insert into t (id,a) values (944,78);
+insert into t (id,a) values (944,79);
+insert into t (id,a) values (944,80);
+insert into t (id,a) values (944,81);
+insert into t (id,a) values (944,82);
+insert into t (id,a) values (944,83);
+insert into t (id,a) values (944,84);
+insert into t (id,a) values (944,85);
+insert into t (id,a) values (944,86);
+insert into t (id,a) values (944,87);
+insert into t (id,a) values (944,88);
+insert into t (id,a) values (944,89);
+insert into t (id,a) values (944,90);
+insert into t (id,a) values (944,91);
+insert into t (id,a) values (944,92);
+insert into t (id,a) values (944,93);
+insert into t (id,a) values (944,94);
+insert into t (id,a) values (944,95);
+insert into t (id,a) values (944,96);
+insert into t (id,a) values (944,97);
+insert into t (id,a) values (944,98);
+insert into t (id,a) values (944,99);
+insert into t (id,a) values (945,0);
+insert into t (id,a) values (945,1);
+insert into t (id,a) values (945,2);
+insert into t (id,a) values (945,3);
+insert into t (id,a) values (945,4);
+insert into t (id,a) values (945,5);
+insert into t (id,a) values (945,6);
+insert into t (id,a) values (945,7);
+insert into t (id,a) values (945,8);
+insert into t (id,a) values (945,9);
+insert into t (id,a) values (945,10);
+insert into t (id,a) values (945,11);
+insert into t (id,a) values (945,12);
+insert into t (id,a) values (945,13);
+insert into t (id,a) values (945,14);
+insert into t (id,a) values (945,15);
+insert into t (id,a) values (945,16);
+insert into t (id,a) values (945,17);
+insert into t (id,a) values (945,18);
+insert into t (id,a) values (945,19);
+insert into t (id,a) values (945,20);
+insert into t (id,a) values (945,21);
+insert into t (id,a) values (945,22);
+insert into t (id,a) values (945,23);
+insert into t (id,a) values (945,24);
+insert into t (id,a) values (945,25);
+insert into t (id,a) values (945,26);
+insert into t (id,a) values (945,27);
+insert into t (id,a) values (945,28);
+insert into t (id,a) values (945,29);
+insert into t (id,a) values (945,30);
+insert into t (id,a) values (945,31);
+insert into t (id,a) values (945,32);
+insert into t (id,a) values (945,33);
+insert into t (id,a) values (945,34);
+insert into t (id,a) values (945,35);
+insert into t (id,a) values (945,36);
+insert into t (id,a) values (945,37);
+insert into t (id,a) values (945,38);
+insert into t (id,a) values (945,39);
+insert into t (id,a) values (945,40);
+insert into t (id,a) values (945,41);
+insert into t (id,a) values (945,42);
+insert into t (id,a) values (945,43);
+insert into t (id,a) values (945,44);
+insert into t (id,a) values (945,45);
+insert into t (id,a) values (945,46);
+insert into t (id,a) values (945,47);
+insert into t (id,a) values (945,48);
+insert into t (id,a) values (945,49);
+insert into t (id,a) values (945,50);
+insert into t (id,a) values (945,51);
+insert into t (id,a) values (945,52);
+insert into t (id,a) values (945,53);
+insert into t (id,a) values (945,54);
+insert into t (id,a) values (945,55);
+insert into t (id,a) values (945,56);
+insert into t (id,a) values (945,57);
+insert into t (id,a) values (945,58);
+insert into t (id,a) values (945,59);
+insert into t (id,a) values (945,60);
+insert into t (id,a) values (945,61);
+insert into t (id,a) values (945,62);
+insert into t (id,a) values (945,63);
+insert into t (id,a) values (945,64);
+insert into t (id,a) values (945,65);
+insert into t (id,a) values (945,66);
+insert into t (id,a) values (945,67);
+insert into t (id,a) values (945,68);
+insert into t (id,a) values (945,69);
+insert into t (id,a) values (945,70);
+insert into t (id,a) values (945,71);
+insert into t (id,a) values (945,72);
+insert into t (id,a) values (945,73);
+insert into t (id,a) values (945,74);
+insert into t (id,a) values (945,75);
+insert into t (id,a) values (945,76);
+insert into t (id,a) values (945,77);
+insert into t (id,a) values (945,78);
+insert into t (id,a) values (945,79);
+insert into t (id,a) values (945,80);
+insert into t (id,a) values (945,81);
+insert into t (id,a) values (945,82);
+insert into t (id,a) values (945,83);
+insert into t (id,a) values (945,84);
+insert into t (id,a) values (945,85);
+insert into t (id,a) values (945,86);
+insert into t (id,a) values (945,87);
+insert into t (id,a) values (945,88);
+insert into t (id,a) values (945,89);
+insert into t (id,a) values (945,90);
+insert into t (id,a) values (945,91);
+insert into t (id,a) values (945,92);
+insert into t (id,a) values (945,93);
+insert into t (id,a) values (945,94);
+insert into t (id,a) values (945,95);
+insert into t (id,a) values (945,96);
+insert into t (id,a) values (945,97);
+insert into t (id,a) values (945,98);
+insert into t (id,a) values (945,99);
+insert into t (id,a) values (946,0);
+insert into t (id,a) values (946,1);
+insert into t (id,a) values (946,2);
+insert into t (id,a) values (946,3);
+insert into t (id,a) values (946,4);
+insert into t (id,a) values (946,5);
+insert into t (id,a) values (946,6);
+insert into t (id,a) values (946,7);
+insert into t (id,a) values (946,8);
+insert into t (id,a) values (946,9);
+insert into t (id,a) values (946,10);
+insert into t (id,a) values (946,11);
+insert into t (id,a) values (946,12);
+insert into t (id,a) values (946,13);
+insert into t (id,a) values (946,14);
+insert into t (id,a) values (946,15);
+insert into t (id,a) values (946,16);
+insert into t (id,a) values (946,17);
+insert into t (id,a) values (946,18);
+insert into t (id,a) values (946,19);
+insert into t (id,a) values (946,20);
+insert into t (id,a) values (946,21);
+insert into t (id,a) values (946,22);
+insert into t (id,a) values (946,23);
+insert into t (id,a) values (946,24);
+insert into t (id,a) values (946,25);
+insert into t (id,a) values (946,26);
+insert into t (id,a) values (946,27);
+insert into t (id,a) values (946,28);
+insert into t (id,a) values (946,29);
+insert into t (id,a) values (946,30);
+insert into t (id,a) values (946,31);
+insert into t (id,a) values (946,32);
+insert into t (id,a) values (946,33);
+insert into t (id,a) values (946,34);
+insert into t (id,a) values (946,35);
+insert into t (id,a) values (946,36);
+insert into t (id,a) values (946,37);
+insert into t (id,a) values (946,38);
+insert into t (id,a) values (946,39);
+insert into t (id,a) values (946,40);
+insert into t (id,a) values (946,41);
+insert into t (id,a) values (946,42);
+insert into t (id,a) values (946,43);
+insert into t (id,a) values (946,44);
+insert into t (id,a) values (946,45);
+insert into t (id,a) values (946,46);
+insert into t (id,a) values (946,47);
+insert into t (id,a) values (946,48);
+insert into t (id,a) values (946,49);
+insert into t (id,a) values (946,50);
+insert into t (id,a) values (946,51);
+insert into t (id,a) values (946,52);
+insert into t (id,a) values (946,53);
+insert into t (id,a) values (946,54);
+insert into t (id,a) values (946,55);
+insert into t (id,a) values (946,56);
+insert into t (id,a) values (946,57);
+insert into t (id,a) values (946,58);
+insert into t (id,a) values (946,59);
+insert into t (id,a) values (946,60);
+insert into t (id,a) values (946,61);
+insert into t (id,a) values (946,62);
+insert into t (id,a) values (946,63);
+insert into t (id,a) values (946,64);
+insert into t (id,a) values (946,65);
+insert into t (id,a) values (946,66);
+insert into t (id,a) values (946,67);
+insert into t (id,a) values (946,68);
+insert into t (id,a) values (946,69);
+insert into t (id,a) values (946,70);
+insert into t (id,a) values (946,71);
+insert into t (id,a) values (946,72);
+insert into t (id,a) values (946,73);
+insert into t (id,a) values (946,74);
+insert into t (id,a) values (946,75);
+insert into t (id,a) values (946,76);
+insert into t (id,a) values (946,77);
+insert into t (id,a) values (946,78);
+insert into t (id,a) values (946,79);
+insert into t (id,a) values (946,80);
+insert into t (id,a) values (946,81);
+insert into t (id,a) values (946,82);
+insert into t (id,a) values (946,83);
+insert into t (id,a) values (946,84);
+insert into t (id,a) values (946,85);
+insert into t (id,a) values (946,86);
+insert into t (id,a) values (946,87);
+insert into t (id,a) values (946,88);
+insert into t (id,a) values (946,89);
+insert into t (id,a) values (946,90);
+insert into t (id,a) values (946,91);
+insert into t (id,a) values (946,92);
+insert into t (id,a) values (946,93);
+insert into t (id,a) values (946,94);
+insert into t (id,a) values (946,95);
+insert into t (id,a) values (946,96);
+insert into t (id,a) values (946,97);
+insert into t (id,a) values (946,98);
+insert into t (id,a) values (946,99);
+insert into t (id,a) values (947,0);
+insert into t (id,a) values (947,1);
+insert into t (id,a) values (947,2);
+insert into t (id,a) values (947,3);
+insert into t (id,a) values (947,4);
+insert into t (id,a) values (947,5);
+insert into t (id,a) values (947,6);
+insert into t (id,a) values (947,7);
+insert into t (id,a) values (947,8);
+insert into t (id,a) values (947,9);
+insert into t (id,a) values (947,10);
+insert into t (id,a) values (947,11);
+insert into t (id,a) values (947,12);
+insert into t (id,a) values (947,13);
+insert into t (id,a) values (947,14);
+insert into t (id,a) values (947,15);
+insert into t (id,a) values (947,16);
+insert into t (id,a) values (947,17);
+insert into t (id,a) values (947,18);
+insert into t (id,a) values (947,19);
+insert into t (id,a) values (947,20);
+insert into t (id,a) values (947,21);
+insert into t (id,a) values (947,22);
+insert into t (id,a) values (947,23);
+insert into t (id,a) values (947,24);
+insert into t (id,a) values (947,25);
+insert into t (id,a) values (947,26);
+insert into t (id,a) values (947,27);
+insert into t (id,a) values (947,28);
+insert into t (id,a) values (947,29);
+insert into t (id,a) values (947,30);
+insert into t (id,a) values (947,31);
+insert into t (id,a) values (947,32);
+insert into t (id,a) values (947,33);
+insert into t (id,a) values (947,34);
+insert into t (id,a) values (947,35);
+insert into t (id,a) values (947,36);
+insert into t (id,a) values (947,37);
+insert into t (id,a) values (947,38);
+insert into t (id,a) values (947,39);
+insert into t (id,a) values (947,40);
+insert into t (id,a) values (947,41);
+insert into t (id,a) values (947,42);
+insert into t (id,a) values (947,43);
+insert into t (id,a) values (947,44);
+insert into t (id,a) values (947,45);
+insert into t (id,a) values (947,46);
+insert into t (id,a) values (947,47);
+insert into t (id,a) values (947,48);
+insert into t (id,a) values (947,49);
+insert into t (id,a) values (947,50);
+insert into t (id,a) values (947,51);
+insert into t (id,a) values (947,52);
+insert into t (id,a) values (947,53);
+insert into t (id,a) values (947,54);
+insert into t (id,a) values (947,55);
+insert into t (id,a) values (947,56);
+insert into t (id,a) values (947,57);
+insert into t (id,a) values (947,58);
+insert into t (id,a) values (947,59);
+insert into t (id,a) values (947,60);
+insert into t (id,a) values (947,61);
+insert into t (id,a) values (947,62);
+insert into t (id,a) values (947,63);
+insert into t (id,a) values (947,64);
+insert into t (id,a) values (947,65);
+insert into t (id,a) values (947,66);
+insert into t (id,a) values (947,67);
+insert into t (id,a) values (947,68);
+insert into t (id,a) values (947,69);
+insert into t (id,a) values (947,70);
+insert into t (id,a) values (947,71);
+insert into t (id,a) values (947,72);
+insert into t (id,a) values (947,73);
+insert into t (id,a) values (947,74);
+insert into t (id,a) values (947,75);
+insert into t (id,a) values (947,76);
+insert into t (id,a) values (947,77);
+insert into t (id,a) values (947,78);
+insert into t (id,a) values (947,79);
+insert into t (id,a) values (947,80);
+insert into t (id,a) values (947,81);
+insert into t (id,a) values (947,82);
+insert into t (id,a) values (947,83);
+insert into t (id,a) values (947,84);
+insert into t (id,a) values (947,85);
+insert into t (id,a) values (947,86);
+insert into t (id,a) values (947,87);
+insert into t (id,a) values (947,88);
+insert into t (id,a) values (947,89);
+insert into t (id,a) values (947,90);
+insert into t (id,a) values (947,91);
+insert into t (id,a) values (947,92);
+insert into t (id,a) values (947,93);
+insert into t (id,a) values (947,94);
+insert into t (id,a) values (947,95);
+insert into t (id,a) values (947,96);
+insert into t (id,a) values (947,97);
+insert into t (id,a) values (947,98);
+insert into t (id,a) values (947,99);
+insert into t (id,a) values (948,0);
+insert into t (id,a) values (948,1);
+insert into t (id,a) values (948,2);
+insert into t (id,a) values (948,3);
+insert into t (id,a) values (948,4);
+insert into t (id,a) values (948,5);
+insert into t (id,a) values (948,6);
+insert into t (id,a) values (948,7);
+insert into t (id,a) values (948,8);
+insert into t (id,a) values (948,9);
+insert into t (id,a) values (948,10);
+insert into t (id,a) values (948,11);
+insert into t (id,a) values (948,12);
+insert into t (id,a) values (948,13);
+insert into t (id,a) values (948,14);
+insert into t (id,a) values (948,15);
+insert into t (id,a) values (948,16);
+insert into t (id,a) values (948,17);
+insert into t (id,a) values (948,18);
+insert into t (id,a) values (948,19);
+insert into t (id,a) values (948,20);
+insert into t (id,a) values (948,21);
+insert into t (id,a) values (948,22);
+insert into t (id,a) values (948,23);
+insert into t (id,a) values (948,24);
+insert into t (id,a) values (948,25);
+insert into t (id,a) values (948,26);
+insert into t (id,a) values (948,27);
+insert into t (id,a) values (948,28);
+insert into t (id,a) values (948,29);
+insert into t (id,a) values (948,30);
+insert into t (id,a) values (948,31);
+insert into t (id,a) values (948,32);
+insert into t (id,a) values (948,33);
+insert into t (id,a) values (948,34);
+insert into t (id,a) values (948,35);
+insert into t (id,a) values (948,36);
+insert into t (id,a) values (948,37);
+insert into t (id,a) values (948,38);
+insert into t (id,a) values (948,39);
+insert into t (id,a) values (948,40);
+insert into t (id,a) values (948,41);
+insert into t (id,a) values (948,42);
+insert into t (id,a) values (948,43);
+insert into t (id,a) values (948,44);
+insert into t (id,a) values (948,45);
+insert into t (id,a) values (948,46);
+insert into t (id,a) values (948,47);
+insert into t (id,a) values (948,48);
+insert into t (id,a) values (948,49);
+insert into t (id,a) values (948,50);
+insert into t (id,a) values (948,51);
+insert into t (id,a) values (948,52);
+insert into t (id,a) values (948,53);
+insert into t (id,a) values (948,54);
+insert into t (id,a) values (948,55);
+insert into t (id,a) values (948,56);
+insert into t (id,a) values (948,57);
+insert into t (id,a) values (948,58);
+insert into t (id,a) values (948,59);
+insert into t (id,a) values (948,60);
+insert into t (id,a) values (948,61);
+insert into t (id,a) values (948,62);
+insert into t (id,a) values (948,63);
+insert into t (id,a) values (948,64);
+insert into t (id,a) values (948,65);
+insert into t (id,a) values (948,66);
+insert into t (id,a) values (948,67);
+insert into t (id,a) values (948,68);
+insert into t (id,a) values (948,69);
+insert into t (id,a) values (948,70);
+insert into t (id,a) values (948,71);
+insert into t (id,a) values (948,72);
+insert into t (id,a) values (948,73);
+insert into t (id,a) values (948,74);
+insert into t (id,a) values (948,75);
+insert into t (id,a) values (948,76);
+insert into t (id,a) values (948,77);
+insert into t (id,a) values (948,78);
+insert into t (id,a) values (948,79);
+insert into t (id,a) values (948,80);
+insert into t (id,a) values (948,81);
+insert into t (id,a) values (948,82);
+insert into t (id,a) values (948,83);
+insert into t (id,a) values (948,84);
+insert into t (id,a) values (948,85);
+insert into t (id,a) values (948,86);
+insert into t (id,a) values (948,87);
+insert into t (id,a) values (948,88);
+insert into t (id,a) values (948,89);
+insert into t (id,a) values (948,90);
+insert into t (id,a) values (948,91);
+insert into t (id,a) values (948,92);
+insert into t (id,a) values (948,93);
+insert into t (id,a) values (948,94);
+insert into t (id,a) values (948,95);
+insert into t (id,a) values (948,96);
+insert into t (id,a) values (948,97);
+insert into t (id,a) values (948,98);
+insert into t (id,a) values (948,99);
+insert into t (id,a) values (949,0);
+insert into t (id,a) values (949,1);
+insert into t (id,a) values (949,2);
+insert into t (id,a) values (949,3);
+insert into t (id,a) values (949,4);
+insert into t (id,a) values (949,5);
+insert into t (id,a) values (949,6);
+insert into t (id,a) values (949,7);
+insert into t (id,a) values (949,8);
+insert into t (id,a) values (949,9);
+insert into t (id,a) values (949,10);
+insert into t (id,a) values (949,11);
+insert into t (id,a) values (949,12);
+insert into t (id,a) values (949,13);
+insert into t (id,a) values (949,14);
+insert into t (id,a) values (949,15);
+insert into t (id,a) values (949,16);
+insert into t (id,a) values (949,17);
+insert into t (id,a) values (949,18);
+insert into t (id,a) values (949,19);
+insert into t (id,a) values (949,20);
+insert into t (id,a) values (949,21);
+insert into t (id,a) values (949,22);
+insert into t (id,a) values (949,23);
+insert into t (id,a) values (949,24);
+insert into t (id,a) values (949,25);
+insert into t (id,a) values (949,26);
+insert into t (id,a) values (949,27);
+insert into t (id,a) values (949,28);
+insert into t (id,a) values (949,29);
+insert into t (id,a) values (949,30);
+insert into t (id,a) values (949,31);
+insert into t (id,a) values (949,32);
+insert into t (id,a) values (949,33);
+insert into t (id,a) values (949,34);
+insert into t (id,a) values (949,35);
+insert into t (id,a) values (949,36);
+insert into t (id,a) values (949,37);
+insert into t (id,a) values (949,38);
+insert into t (id,a) values (949,39);
+insert into t (id,a) values (949,40);
+insert into t (id,a) values (949,41);
+insert into t (id,a) values (949,42);
+insert into t (id,a) values (949,43);
+insert into t (id,a) values (949,44);
+insert into t (id,a) values (949,45);
+insert into t (id,a) values (949,46);
+insert into t (id,a) values (949,47);
+insert into t (id,a) values (949,48);
+insert into t (id,a) values (949,49);
+insert into t (id,a) values (949,50);
+insert into t (id,a) values (949,51);
+insert into t (id,a) values (949,52);
+insert into t (id,a) values (949,53);
+insert into t (id,a) values (949,54);
+insert into t (id,a) values (949,55);
+insert into t (id,a) values (949,56);
+insert into t (id,a) values (949,57);
+insert into t (id,a) values (949,58);
+insert into t (id,a) values (949,59);
+insert into t (id,a) values (949,60);
+insert into t (id,a) values (949,61);
+insert into t (id,a) values (949,62);
+insert into t (id,a) values (949,63);
+insert into t (id,a) values (949,64);
+insert into t (id,a) values (949,65);
+insert into t (id,a) values (949,66);
+insert into t (id,a) values (949,67);
+insert into t (id,a) values (949,68);
+insert into t (id,a) values (949,69);
+insert into t (id,a) values (949,70);
+insert into t (id,a) values (949,71);
+insert into t (id,a) values (949,72);
+insert into t (id,a) values (949,73);
+insert into t (id,a) values (949,74);
+insert into t (id,a) values (949,75);
+insert into t (id,a) values (949,76);
+insert into t (id,a) values (949,77);
+insert into t (id,a) values (949,78);
+insert into t (id,a) values (949,79);
+insert into t (id,a) values (949,80);
+insert into t (id,a) values (949,81);
+insert into t (id,a) values (949,82);
+insert into t (id,a) values (949,83);
+insert into t (id,a) values (949,84);
+insert into t (id,a) values (949,85);
+insert into t (id,a) values (949,86);
+insert into t (id,a) values (949,87);
+insert into t (id,a) values (949,88);
+insert into t (id,a) values (949,89);
+insert into t (id,a) values (949,90);
+insert into t (id,a) values (949,91);
+insert into t (id,a) values (949,92);
+insert into t (id,a) values (949,93);
+insert into t (id,a) values (949,94);
+insert into t (id,a) values (949,95);
+insert into t (id,a) values (949,96);
+insert into t (id,a) values (949,97);
+insert into t (id,a) values (949,98);
+insert into t (id,a) values (949,99);
+insert into t (id,a) values (950,0);
+insert into t (id,a) values (950,1);
+insert into t (id,a) values (950,2);
+insert into t (id,a) values (950,3);
+insert into t (id,a) values (950,4);
+insert into t (id,a) values (950,5);
+insert into t (id,a) values (950,6);
+insert into t (id,a) values (950,7);
+insert into t (id,a) values (950,8);
+insert into t (id,a) values (950,9);
+insert into t (id,a) values (950,10);
+insert into t (id,a) values (950,11);
+insert into t (id,a) values (950,12);
+insert into t (id,a) values (950,13);
+insert into t (id,a) values (950,14);
+insert into t (id,a) values (950,15);
+insert into t (id,a) values (950,16);
+insert into t (id,a) values (950,17);
+insert into t (id,a) values (950,18);
+insert into t (id,a) values (950,19);
+insert into t (id,a) values (950,20);
+insert into t (id,a) values (950,21);
+insert into t (id,a) values (950,22);
+insert into t (id,a) values (950,23);
+insert into t (id,a) values (950,24);
+insert into t (id,a) values (950,25);
+insert into t (id,a) values (950,26);
+insert into t (id,a) values (950,27);
+insert into t (id,a) values (950,28);
+insert into t (id,a) values (950,29);
+insert into t (id,a) values (950,30);
+insert into t (id,a) values (950,31);
+insert into t (id,a) values (950,32);
+insert into t (id,a) values (950,33);
+insert into t (id,a) values (950,34);
+insert into t (id,a) values (950,35);
+insert into t (id,a) values (950,36);
+insert into t (id,a) values (950,37);
+insert into t (id,a) values (950,38);
+insert into t (id,a) values (950,39);
+insert into t (id,a) values (950,40);
+insert into t (id,a) values (950,41);
+insert into t (id,a) values (950,42);
+insert into t (id,a) values (950,43);
+insert into t (id,a) values (950,44);
+insert into t (id,a) values (950,45);
+insert into t (id,a) values (950,46);
+insert into t (id,a) values (950,47);
+insert into t (id,a) values (950,48);
+insert into t (id,a) values (950,49);
+insert into t (id,a) values (950,50);
+insert into t (id,a) values (950,51);
+insert into t (id,a) values (950,52);
+insert into t (id,a) values (950,53);
+insert into t (id,a) values (950,54);
+insert into t (id,a) values (950,55);
+insert into t (id,a) values (950,56);
+insert into t (id,a) values (950,57);
+insert into t (id,a) values (950,58);
+insert into t (id,a) values (950,59);
+insert into t (id,a) values (950,60);
+insert into t (id,a) values (950,61);
+insert into t (id,a) values (950,62);
+insert into t (id,a) values (950,63);
+insert into t (id,a) values (950,64);
+insert into t (id,a) values (950,65);
+insert into t (id,a) values (950,66);
+insert into t (id,a) values (950,67);
+insert into t (id,a) values (950,68);
+insert into t (id,a) values (950,69);
+insert into t (id,a) values (950,70);
+insert into t (id,a) values (950,71);
+insert into t (id,a) values (950,72);
+insert into t (id,a) values (950,73);
+insert into t (id,a) values (950,74);
+insert into t (id,a) values (950,75);
+insert into t (id,a) values (950,76);
+insert into t (id,a) values (950,77);
+insert into t (id,a) values (950,78);
+insert into t (id,a) values (950,79);
+insert into t (id,a) values (950,80);
+insert into t (id,a) values (950,81);
+insert into t (id,a) values (950,82);
+insert into t (id,a) values (950,83);
+insert into t (id,a) values (950,84);
+insert into t (id,a) values (950,85);
+insert into t (id,a) values (950,86);
+insert into t (id,a) values (950,87);
+insert into t (id,a) values (950,88);
+insert into t (id,a) values (950,89);
+insert into t (id,a) values (950,90);
+insert into t (id,a) values (950,91);
+insert into t (id,a) values (950,92);
+insert into t (id,a) values (950,93);
+insert into t (id,a) values (950,94);
+insert into t (id,a) values (950,95);
+insert into t (id,a) values (950,96);
+insert into t (id,a) values (950,97);
+insert into t (id,a) values (950,98);
+insert into t (id,a) values (950,99);
+insert into t (id,a) values (951,0);
+insert into t (id,a) values (951,1);
+insert into t (id,a) values (951,2);
+insert into t (id,a) values (951,3);
+insert into t (id,a) values (951,4);
+insert into t (id,a) values (951,5);
+insert into t (id,a) values (951,6);
+insert into t (id,a) values (951,7);
+insert into t (id,a) values (951,8);
+insert into t (id,a) values (951,9);
+insert into t (id,a) values (951,10);
+insert into t (id,a) values (951,11);
+insert into t (id,a) values (951,12);
+insert into t (id,a) values (951,13);
+insert into t (id,a) values (951,14);
+insert into t (id,a) values (951,15);
+insert into t (id,a) values (951,16);
+insert into t (id,a) values (951,17);
+insert into t (id,a) values (951,18);
+insert into t (id,a) values (951,19);
+insert into t (id,a) values (951,20);
+insert into t (id,a) values (951,21);
+insert into t (id,a) values (951,22);
+insert into t (id,a) values (951,23);
+insert into t (id,a) values (951,24);
+insert into t (id,a) values (951,25);
+insert into t (id,a) values (951,26);
+insert into t (id,a) values (951,27);
+insert into t (id,a) values (951,28);
+insert into t (id,a) values (951,29);
+insert into t (id,a) values (951,30);
+insert into t (id,a) values (951,31);
+insert into t (id,a) values (951,32);
+insert into t (id,a) values (951,33);
+insert into t (id,a) values (951,34);
+insert into t (id,a) values (951,35);
+insert into t (id,a) values (951,36);
+insert into t (id,a) values (951,37);
+insert into t (id,a) values (951,38);
+insert into t (id,a) values (951,39);
+insert into t (id,a) values (951,40);
+insert into t (id,a) values (951,41);
+insert into t (id,a) values (951,42);
+insert into t (id,a) values (951,43);
+insert into t (id,a) values (951,44);
+insert into t (id,a) values (951,45);
+insert into t (id,a) values (951,46);
+insert into t (id,a) values (951,47);
+insert into t (id,a) values (951,48);
+insert into t (id,a) values (951,49);
+insert into t (id,a) values (951,50);
+insert into t (id,a) values (951,51);
+insert into t (id,a) values (951,52);
+insert into t (id,a) values (951,53);
+insert into t (id,a) values (951,54);
+insert into t (id,a) values (951,55);
+insert into t (id,a) values (951,56);
+insert into t (id,a) values (951,57);
+insert into t (id,a) values (951,58);
+insert into t (id,a) values (951,59);
+insert into t (id,a) values (951,60);
+insert into t (id,a) values (951,61);
+insert into t (id,a) values (951,62);
+insert into t (id,a) values (951,63);
+insert into t (id,a) values (951,64);
+insert into t (id,a) values (951,65);
+insert into t (id,a) values (951,66);
+insert into t (id,a) values (951,67);
+insert into t (id,a) values (951,68);
+insert into t (id,a) values (951,69);
+insert into t (id,a) values (951,70);
+insert into t (id,a) values (951,71);
+insert into t (id,a) values (951,72);
+insert into t (id,a) values (951,73);
+insert into t (id,a) values (951,74);
+insert into t (id,a) values (951,75);
+insert into t (id,a) values (951,76);
+insert into t (id,a) values (951,77);
+insert into t (id,a) values (951,78);
+insert into t (id,a) values (951,79);
+insert into t (id,a) values (951,80);
+insert into t (id,a) values (951,81);
+insert into t (id,a) values (951,82);
+insert into t (id,a) values (951,83);
+insert into t (id,a) values (951,84);
+insert into t (id,a) values (951,85);
+insert into t (id,a) values (951,86);
+insert into t (id,a) values (951,87);
+insert into t (id,a) values (951,88);
+insert into t (id,a) values (951,89);
+insert into t (id,a) values (951,90);
+insert into t (id,a) values (951,91);
+insert into t (id,a) values (951,92);
+insert into t (id,a) values (951,93);
+insert into t (id,a) values (951,94);
+insert into t (id,a) values (951,95);
+insert into t (id,a) values (951,96);
+insert into t (id,a) values (951,97);
+insert into t (id,a) values (951,98);
+insert into t (id,a) values (951,99);
+insert into t (id,a) values (952,0);
+insert into t (id,a) values (952,1);
+insert into t (id,a) values (952,2);
+insert into t (id,a) values (952,3);
+insert into t (id,a) values (952,4);
+insert into t (id,a) values (952,5);
+insert into t (id,a) values (952,6);
+insert into t (id,a) values (952,7);
+insert into t (id,a) values (952,8);
+insert into t (id,a) values (952,9);
+insert into t (id,a) values (952,10);
+insert into t (id,a) values (952,11);
+insert into t (id,a) values (952,12);
+insert into t (id,a) values (952,13);
+insert into t (id,a) values (952,14);
+insert into t (id,a) values (952,15);
+insert into t (id,a) values (952,16);
+insert into t (id,a) values (952,17);
+insert into t (id,a) values (952,18);
+insert into t (id,a) values (952,19);
+insert into t (id,a) values (952,20);
+insert into t (id,a) values (952,21);
+insert into t (id,a) values (952,22);
+insert into t (id,a) values (952,23);
+insert into t (id,a) values (952,24);
+insert into t (id,a) values (952,25);
+insert into t (id,a) values (952,26);
+insert into t (id,a) values (952,27);
+insert into t (id,a) values (952,28);
+insert into t (id,a) values (952,29);
+insert into t (id,a) values (952,30);
+insert into t (id,a) values (952,31);
+insert into t (id,a) values (952,32);
+insert into t (id,a) values (952,33);
+insert into t (id,a) values (952,34);
+insert into t (id,a) values (952,35);
+insert into t (id,a) values (952,36);
+insert into t (id,a) values (952,37);
+insert into t (id,a) values (952,38);
+insert into t (id,a) values (952,39);
+insert into t (id,a) values (952,40);
+insert into t (id,a) values (952,41);
+insert into t (id,a) values (952,42);
+insert into t (id,a) values (952,43);
+insert into t (id,a) values (952,44);
+insert into t (id,a) values (952,45);
+insert into t (id,a) values (952,46);
+insert into t (id,a) values (952,47);
+insert into t (id,a) values (952,48);
+insert into t (id,a) values (952,49);
+insert into t (id,a) values (952,50);
+insert into t (id,a) values (952,51);
+insert into t (id,a) values (952,52);
+insert into t (id,a) values (952,53);
+insert into t (id,a) values (952,54);
+insert into t (id,a) values (952,55);
+insert into t (id,a) values (952,56);
+insert into t (id,a) values (952,57);
+insert into t (id,a) values (952,58);
+insert into t (id,a) values (952,59);
+insert into t (id,a) values (952,60);
+insert into t (id,a) values (952,61);
+insert into t (id,a) values (952,62);
+insert into t (id,a) values (952,63);
+insert into t (id,a) values (952,64);
+insert into t (id,a) values (952,65);
+insert into t (id,a) values (952,66);
+insert into t (id,a) values (952,67);
+insert into t (id,a) values (952,68);
+insert into t (id,a) values (952,69);
+insert into t (id,a) values (952,70);
+insert into t (id,a) values (952,71);
+insert into t (id,a) values (952,72);
+insert into t (id,a) values (952,73);
+insert into t (id,a) values (952,74);
+insert into t (id,a) values (952,75);
+insert into t (id,a) values (952,76);
+insert into t (id,a) values (952,77);
+insert into t (id,a) values (952,78);
+insert into t (id,a) values (952,79);
+insert into t (id,a) values (952,80);
+insert into t (id,a) values (952,81);
+insert into t (id,a) values (952,82);
+insert into t (id,a) values (952,83);
+insert into t (id,a) values (952,84);
+insert into t (id,a) values (952,85);
+insert into t (id,a) values (952,86);
+insert into t (id,a) values (952,87);
+insert into t (id,a) values (952,88);
+insert into t (id,a) values (952,89);
+insert into t (id,a) values (952,90);
+insert into t (id,a) values (952,91);
+insert into t (id,a) values (952,92);
+insert into t (id,a) values (952,93);
+insert into t (id,a) values (952,94);
+insert into t (id,a) values (952,95);
+insert into t (id,a) values (952,96);
+insert into t (id,a) values (952,97);
+insert into t (id,a) values (952,98);
+insert into t (id,a) values (952,99);
+insert into t (id,a) values (953,0);
+insert into t (id,a) values (953,1);
+insert into t (id,a) values (953,2);
+insert into t (id,a) values (953,3);
+insert into t (id,a) values (953,4);
+insert into t (id,a) values (953,5);
+insert into t (id,a) values (953,6);
+insert into t (id,a) values (953,7);
+insert into t (id,a) values (953,8);
+insert into t (id,a) values (953,9);
+insert into t (id,a) values (953,10);
+insert into t (id,a) values (953,11);
+insert into t (id,a) values (953,12);
+insert into t (id,a) values (953,13);
+insert into t (id,a) values (953,14);
+insert into t (id,a) values (953,15);
+insert into t (id,a) values (953,16);
+insert into t (id,a) values (953,17);
+insert into t (id,a) values (953,18);
+insert into t (id,a) values (953,19);
+insert into t (id,a) values (953,20);
+insert into t (id,a) values (953,21);
+insert into t (id,a) values (953,22);
+insert into t (id,a) values (953,23);
+insert into t (id,a) values (953,24);
+insert into t (id,a) values (953,25);
+insert into t (id,a) values (953,26);
+insert into t (id,a) values (953,27);
+insert into t (id,a) values (953,28);
+insert into t (id,a) values (953,29);
+insert into t (id,a) values (953,30);
+insert into t (id,a) values (953,31);
+insert into t (id,a) values (953,32);
+insert into t (id,a) values (953,33);
+insert into t (id,a) values (953,34);
+insert into t (id,a) values (953,35);
+insert into t (id,a) values (953,36);
+insert into t (id,a) values (953,37);
+insert into t (id,a) values (953,38);
+insert into t (id,a) values (953,39);
+insert into t (id,a) values (953,40);
+insert into t (id,a) values (953,41);
+insert into t (id,a) values (953,42);
+insert into t (id,a) values (953,43);
+insert into t (id,a) values (953,44);
+insert into t (id,a) values (953,45);
+insert into t (id,a) values (953,46);
+insert into t (id,a) values (953,47);
+insert into t (id,a) values (953,48);
+insert into t (id,a) values (953,49);
+insert into t (id,a) values (953,50);
+insert into t (id,a) values (953,51);
+insert into t (id,a) values (953,52);
+insert into t (id,a) values (953,53);
+insert into t (id,a) values (953,54);
+insert into t (id,a) values (953,55);
+insert into t (id,a) values (953,56);
+insert into t (id,a) values (953,57);
+insert into t (id,a) values (953,58);
+insert into t (id,a) values (953,59);
+insert into t (id,a) values (953,60);
+insert into t (id,a) values (953,61);
+insert into t (id,a) values (953,62);
+insert into t (id,a) values (953,63);
+insert into t (id,a) values (953,64);
+insert into t (id,a) values (953,65);
+insert into t (id,a) values (953,66);
+insert into t (id,a) values (953,67);
+insert into t (id,a) values (953,68);
+insert into t (id,a) values (953,69);
+insert into t (id,a) values (953,70);
+insert into t (id,a) values (953,71);
+insert into t (id,a) values (953,72);
+insert into t (id,a) values (953,73);
+insert into t (id,a) values (953,74);
+insert into t (id,a) values (953,75);
+insert into t (id,a) values (953,76);
+insert into t (id,a) values (953,77);
+insert into t (id,a) values (953,78);
+insert into t (id,a) values (953,79);
+insert into t (id,a) values (953,80);
+insert into t (id,a) values (953,81);
+insert into t (id,a) values (953,82);
+insert into t (id,a) values (953,83);
+insert into t (id,a) values (953,84);
+insert into t (id,a) values (953,85);
+insert into t (id,a) values (953,86);
+insert into t (id,a) values (953,87);
+insert into t (id,a) values (953,88);
+insert into t (id,a) values (953,89);
+insert into t (id,a) values (953,90);
+insert into t (id,a) values (953,91);
+insert into t (id,a) values (953,92);
+insert into t (id,a) values (953,93);
+insert into t (id,a) values (953,94);
+insert into t (id,a) values (953,95);
+insert into t (id,a) values (953,96);
+insert into t (id,a) values (953,97);
+insert into t (id,a) values (953,98);
+insert into t (id,a) values (953,99);
+insert into t (id,a) values (954,0);
+insert into t (id,a) values (954,1);
+insert into t (id,a) values (954,2);
+insert into t (id,a) values (954,3);
+insert into t (id,a) values (954,4);
+insert into t (id,a) values (954,5);
+insert into t (id,a) values (954,6);
+insert into t (id,a) values (954,7);
+insert into t (id,a) values (954,8);
+insert into t (id,a) values (954,9);
+insert into t (id,a) values (954,10);
+insert into t (id,a) values (954,11);
+insert into t (id,a) values (954,12);
+insert into t (id,a) values (954,13);
+insert into t (id,a) values (954,14);
+insert into t (id,a) values (954,15);
+insert into t (id,a) values (954,16);
+insert into t (id,a) values (954,17);
+insert into t (id,a) values (954,18);
+insert into t (id,a) values (954,19);
+insert into t (id,a) values (954,20);
+insert into t (id,a) values (954,21);
+insert into t (id,a) values (954,22);
+insert into t (id,a) values (954,23);
+insert into t (id,a) values (954,24);
+insert into t (id,a) values (954,25);
+insert into t (id,a) values (954,26);
+insert into t (id,a) values (954,27);
+insert into t (id,a) values (954,28);
+insert into t (id,a) values (954,29);
+insert into t (id,a) values (954,30);
+insert into t (id,a) values (954,31);
+insert into t (id,a) values (954,32);
+insert into t (id,a) values (954,33);
+insert into t (id,a) values (954,34);
+insert into t (id,a) values (954,35);
+insert into t (id,a) values (954,36);
+insert into t (id,a) values (954,37);
+insert into t (id,a) values (954,38);
+insert into t (id,a) values (954,39);
+insert into t (id,a) values (954,40);
+insert into t (id,a) values (954,41);
+insert into t (id,a) values (954,42);
+insert into t (id,a) values (954,43);
+insert into t (id,a) values (954,44);
+insert into t (id,a) values (954,45);
+insert into t (id,a) values (954,46);
+insert into t (id,a) values (954,47);
+insert into t (id,a) values (954,48);
+insert into t (id,a) values (954,49);
+insert into t (id,a) values (954,50);
+insert into t (id,a) values (954,51);
+insert into t (id,a) values (954,52);
+insert into t (id,a) values (954,53);
+insert into t (id,a) values (954,54);
+insert into t (id,a) values (954,55);
+insert into t (id,a) values (954,56);
+insert into t (id,a) values (954,57);
+insert into t (id,a) values (954,58);
+insert into t (id,a) values (954,59);
+insert into t (id,a) values (954,60);
+insert into t (id,a) values (954,61);
+insert into t (id,a) values (954,62);
+insert into t (id,a) values (954,63);
+insert into t (id,a) values (954,64);
+insert into t (id,a) values (954,65);
+insert into t (id,a) values (954,66);
+insert into t (id,a) values (954,67);
+insert into t (id,a) values (954,68);
+insert into t (id,a) values (954,69);
+insert into t (id,a) values (954,70);
+insert into t (id,a) values (954,71);
+insert into t (id,a) values (954,72);
+insert into t (id,a) values (954,73);
+insert into t (id,a) values (954,74);
+insert into t (id,a) values (954,75);
+insert into t (id,a) values (954,76);
+insert into t (id,a) values (954,77);
+insert into t (id,a) values (954,78);
+insert into t (id,a) values (954,79);
+insert into t (id,a) values (954,80);
+insert into t (id,a) values (954,81);
+insert into t (id,a) values (954,82);
+insert into t (id,a) values (954,83);
+insert into t (id,a) values (954,84);
+insert into t (id,a) values (954,85);
+insert into t (id,a) values (954,86);
+insert into t (id,a) values (954,87);
+insert into t (id,a) values (954,88);
+insert into t (id,a) values (954,89);
+insert into t (id,a) values (954,90);
+insert into t (id,a) values (954,91);
+insert into t (id,a) values (954,92);
+insert into t (id,a) values (954,93);
+insert into t (id,a) values (954,94);
+insert into t (id,a) values (954,95);
+insert into t (id,a) values (954,96);
+insert into t (id,a) values (954,97);
+insert into t (id,a) values (954,98);
+insert into t (id,a) values (954,99);
+insert into t (id,a) values (955,0);
+insert into t (id,a) values (955,1);
+insert into t (id,a) values (955,2);
+insert into t (id,a) values (955,3);
+insert into t (id,a) values (955,4);
+insert into t (id,a) values (955,5);
+insert into t (id,a) values (955,6);
+insert into t (id,a) values (955,7);
+insert into t (id,a) values (955,8);
+insert into t (id,a) values (955,9);
+insert into t (id,a) values (955,10);
+insert into t (id,a) values (955,11);
+insert into t (id,a) values (955,12);
+insert into t (id,a) values (955,13);
+insert into t (id,a) values (955,14);
+insert into t (id,a) values (955,15);
+insert into t (id,a) values (955,16);
+insert into t (id,a) values (955,17);
+insert into t (id,a) values (955,18);
+insert into t (id,a) values (955,19);
+insert into t (id,a) values (955,20);
+insert into t (id,a) values (955,21);
+insert into t (id,a) values (955,22);
+insert into t (id,a) values (955,23);
+insert into t (id,a) values (955,24);
+insert into t (id,a) values (955,25);
+insert into t (id,a) values (955,26);
+insert into t (id,a) values (955,27);
+insert into t (id,a) values (955,28);
+insert into t (id,a) values (955,29);
+insert into t (id,a) values (955,30);
+insert into t (id,a) values (955,31);
+insert into t (id,a) values (955,32);
+insert into t (id,a) values (955,33);
+insert into t (id,a) values (955,34);
+insert into t (id,a) values (955,35);
+insert into t (id,a) values (955,36);
+insert into t (id,a) values (955,37);
+insert into t (id,a) values (955,38);
+insert into t (id,a) values (955,39);
+insert into t (id,a) values (955,40);
+insert into t (id,a) values (955,41);
+insert into t (id,a) values (955,42);
+insert into t (id,a) values (955,43);
+insert into t (id,a) values (955,44);
+insert into t (id,a) values (955,45);
+insert into t (id,a) values (955,46);
+insert into t (id,a) values (955,47);
+insert into t (id,a) values (955,48);
+insert into t (id,a) values (955,49);
+insert into t (id,a) values (955,50);
+insert into t (id,a) values (955,51);
+insert into t (id,a) values (955,52);
+insert into t (id,a) values (955,53);
+insert into t (id,a) values (955,54);
+insert into t (id,a) values (955,55);
+insert into t (id,a) values (955,56);
+insert into t (id,a) values (955,57);
+insert into t (id,a) values (955,58);
+insert into t (id,a) values (955,59);
+insert into t (id,a) values (955,60);
+insert into t (id,a) values (955,61);
+insert into t (id,a) values (955,62);
+insert into t (id,a) values (955,63);
+insert into t (id,a) values (955,64);
+insert into t (id,a) values (955,65);
+insert into t (id,a) values (955,66);
+insert into t (id,a) values (955,67);
+insert into t (id,a) values (955,68);
+insert into t (id,a) values (955,69);
+insert into t (id,a) values (955,70);
+insert into t (id,a) values (955,71);
+insert into t (id,a) values (955,72);
+insert into t (id,a) values (955,73);
+insert into t (id,a) values (955,74);
+insert into t (id,a) values (955,75);
+insert into t (id,a) values (955,76);
+insert into t (id,a) values (955,77);
+insert into t (id,a) values (955,78);
+insert into t (id,a) values (955,79);
+insert into t (id,a) values (955,80);
+insert into t (id,a) values (955,81);
+insert into t (id,a) values (955,82);
+insert into t (id,a) values (955,83);
+insert into t (id,a) values (955,84);
+insert into t (id,a) values (955,85);
+insert into t (id,a) values (955,86);
+insert into t (id,a) values (955,87);
+insert into t (id,a) values (955,88);
+insert into t (id,a) values (955,89);
+insert into t (id,a) values (955,90);
+insert into t (id,a) values (955,91);
+insert into t (id,a) values (955,92);
+insert into t (id,a) values (955,93);
+insert into t (id,a) values (955,94);
+insert into t (id,a) values (955,95);
+insert into t (id,a) values (955,96);
+insert into t (id,a) values (955,97);
+insert into t (id,a) values (955,98);
+insert into t (id,a) values (955,99);
+insert into t (id,a) values (956,0);
+insert into t (id,a) values (956,1);
+insert into t (id,a) values (956,2);
+insert into t (id,a) values (956,3);
+insert into t (id,a) values (956,4);
+insert into t (id,a) values (956,5);
+insert into t (id,a) values (956,6);
+insert into t (id,a) values (956,7);
+insert into t (id,a) values (956,8);
+insert into t (id,a) values (956,9);
+insert into t (id,a) values (956,10);
+insert into t (id,a) values (956,11);
+insert into t (id,a) values (956,12);
+insert into t (id,a) values (956,13);
+insert into t (id,a) values (956,14);
+insert into t (id,a) values (956,15);
+insert into t (id,a) values (956,16);
+insert into t (id,a) values (956,17);
+insert into t (id,a) values (956,18);
+insert into t (id,a) values (956,19);
+insert into t (id,a) values (956,20);
+insert into t (id,a) values (956,21);
+insert into t (id,a) values (956,22);
+insert into t (id,a) values (956,23);
+insert into t (id,a) values (956,24);
+insert into t (id,a) values (956,25);
+insert into t (id,a) values (956,26);
+insert into t (id,a) values (956,27);
+insert into t (id,a) values (956,28);
+insert into t (id,a) values (956,29);
+insert into t (id,a) values (956,30);
+insert into t (id,a) values (956,31);
+insert into t (id,a) values (956,32);
+insert into t (id,a) values (956,33);
+insert into t (id,a) values (956,34);
+insert into t (id,a) values (956,35);
+insert into t (id,a) values (956,36);
+insert into t (id,a) values (956,37);
+insert into t (id,a) values (956,38);
+insert into t (id,a) values (956,39);
+insert into t (id,a) values (956,40);
+insert into t (id,a) values (956,41);
+insert into t (id,a) values (956,42);
+insert into t (id,a) values (956,43);
+insert into t (id,a) values (956,44);
+insert into t (id,a) values (956,45);
+insert into t (id,a) values (956,46);
+insert into t (id,a) values (956,47);
+insert into t (id,a) values (956,48);
+insert into t (id,a) values (956,49);
+insert into t (id,a) values (956,50);
+insert into t (id,a) values (956,51);
+insert into t (id,a) values (956,52);
+insert into t (id,a) values (956,53);
+insert into t (id,a) values (956,54);
+insert into t (id,a) values (956,55);
+insert into t (id,a) values (956,56);
+insert into t (id,a) values (956,57);
+insert into t (id,a) values (956,58);
+insert into t (id,a) values (956,59);
+insert into t (id,a) values (956,60);
+insert into t (id,a) values (956,61);
+insert into t (id,a) values (956,62);
+insert into t (id,a) values (956,63);
+insert into t (id,a) values (956,64);
+insert into t (id,a) values (956,65);
+insert into t (id,a) values (956,66);
+insert into t (id,a) values (956,67);
+insert into t (id,a) values (956,68);
+insert into t (id,a) values (956,69);
+insert into t (id,a) values (956,70);
+insert into t (id,a) values (956,71);
+insert into t (id,a) values (956,72);
+insert into t (id,a) values (956,73);
+insert into t (id,a) values (956,74);
+insert into t (id,a) values (956,75);
+insert into t (id,a) values (956,76);
+insert into t (id,a) values (956,77);
+insert into t (id,a) values (956,78);
+insert into t (id,a) values (956,79);
+insert into t (id,a) values (956,80);
+insert into t (id,a) values (956,81);
+insert into t (id,a) values (956,82);
+insert into t (id,a) values (956,83);
+insert into t (id,a) values (956,84);
+insert into t (id,a) values (956,85);
+insert into t (id,a) values (956,86);
+insert into t (id,a) values (956,87);
+insert into t (id,a) values (956,88);
+insert into t (id,a) values (956,89);
+insert into t (id,a) values (956,90);
+insert into t (id,a) values (956,91);
+insert into t (id,a) values (956,92);
+insert into t (id,a) values (956,93);
+insert into t (id,a) values (956,94);
+insert into t (id,a) values (956,95);
+insert into t (id,a) values (956,96);
+insert into t (id,a) values (956,97);
+insert into t (id,a) values (956,98);
+insert into t (id,a) values (956,99);
+insert into t (id,a) values (957,0);
+insert into t (id,a) values (957,1);
+insert into t (id,a) values (957,2);
+insert into t (id,a) values (957,3);
+insert into t (id,a) values (957,4);
+insert into t (id,a) values (957,5);
+insert into t (id,a) values (957,6);
+insert into t (id,a) values (957,7);
+insert into t (id,a) values (957,8);
+insert into t (id,a) values (957,9);
+insert into t (id,a) values (957,10);
+insert into t (id,a) values (957,11);
+insert into t (id,a) values (957,12);
+insert into t (id,a) values (957,13);
+insert into t (id,a) values (957,14);
+insert into t (id,a) values (957,15);
+insert into t (id,a) values (957,16);
+insert into t (id,a) values (957,17);
+insert into t (id,a) values (957,18);
+insert into t (id,a) values (957,19);
+insert into t (id,a) values (957,20);
+insert into t (id,a) values (957,21);
+insert into t (id,a) values (957,22);
+insert into t (id,a) values (957,23);
+insert into t (id,a) values (957,24);
+insert into t (id,a) values (957,25);
+insert into t (id,a) values (957,26);
+insert into t (id,a) values (957,27);
+insert into t (id,a) values (957,28);
+insert into t (id,a) values (957,29);
+insert into t (id,a) values (957,30);
+insert into t (id,a) values (957,31);
+insert into t (id,a) values (957,32);
+insert into t (id,a) values (957,33);
+insert into t (id,a) values (957,34);
+insert into t (id,a) values (957,35);
+insert into t (id,a) values (957,36);
+insert into t (id,a) values (957,37);
+insert into t (id,a) values (957,38);
+insert into t (id,a) values (957,39);
+insert into t (id,a) values (957,40);
+insert into t (id,a) values (957,41);
+insert into t (id,a) values (957,42);
+insert into t (id,a) values (957,43);
+insert into t (id,a) values (957,44);
+insert into t (id,a) values (957,45);
+insert into t (id,a) values (957,46);
+insert into t (id,a) values (957,47);
+insert into t (id,a) values (957,48);
+insert into t (id,a) values (957,49);
+insert into t (id,a) values (957,50);
+insert into t (id,a) values (957,51);
+insert into t (id,a) values (957,52);
+insert into t (id,a) values (957,53);
+insert into t (id,a) values (957,54);
+insert into t (id,a) values (957,55);
+insert into t (id,a) values (957,56);
+insert into t (id,a) values (957,57);
+insert into t (id,a) values (957,58);
+insert into t (id,a) values (957,59);
+insert into t (id,a) values (957,60);
+insert into t (id,a) values (957,61);
+insert into t (id,a) values (957,62);
+insert into t (id,a) values (957,63);
+insert into t (id,a) values (957,64);
+insert into t (id,a) values (957,65);
+insert into t (id,a) values (957,66);
+insert into t (id,a) values (957,67);
+insert into t (id,a) values (957,68);
+insert into t (id,a) values (957,69);
+insert into t (id,a) values (957,70);
+insert into t (id,a) values (957,71);
+insert into t (id,a) values (957,72);
+insert into t (id,a) values (957,73);
+insert into t (id,a) values (957,74);
+insert into t (id,a) values (957,75);
+insert into t (id,a) values (957,76);
+insert into t (id,a) values (957,77);
+insert into t (id,a) values (957,78);
+insert into t (id,a) values (957,79);
+insert into t (id,a) values (957,80);
+insert into t (id,a) values (957,81);
+insert into t (id,a) values (957,82);
+insert into t (id,a) values (957,83);
+insert into t (id,a) values (957,84);
+insert into t (id,a) values (957,85);
+insert into t (id,a) values (957,86);
+insert into t (id,a) values (957,87);
+insert into t (id,a) values (957,88);
+insert into t (id,a) values (957,89);
+insert into t (id,a) values (957,90);
+insert into t (id,a) values (957,91);
+insert into t (id,a) values (957,92);
+insert into t (id,a) values (957,93);
+insert into t (id,a) values (957,94);
+insert into t (id,a) values (957,95);
+insert into t (id,a) values (957,96);
+insert into t (id,a) values (957,97);
+insert into t (id,a) values (957,98);
+insert into t (id,a) values (957,99);
+insert into t (id,a) values (958,0);
+insert into t (id,a) values (958,1);
+insert into t (id,a) values (958,2);
+insert into t (id,a) values (958,3);
+insert into t (id,a) values (958,4);
+insert into t (id,a) values (958,5);
+insert into t (id,a) values (958,6);
+insert into t (id,a) values (958,7);
+insert into t (id,a) values (958,8);
+insert into t (id,a) values (958,9);
+insert into t (id,a) values (958,10);
+insert into t (id,a) values (958,11);
+insert into t (id,a) values (958,12);
+insert into t (id,a) values (958,13);
+insert into t (id,a) values (958,14);
+insert into t (id,a) values (958,15);
+insert into t (id,a) values (958,16);
+insert into t (id,a) values (958,17);
+insert into t (id,a) values (958,18);
+insert into t (id,a) values (958,19);
+insert into t (id,a) values (958,20);
+insert into t (id,a) values (958,21);
+insert into t (id,a) values (958,22);
+insert into t (id,a) values (958,23);
+insert into t (id,a) values (958,24);
+insert into t (id,a) values (958,25);
+insert into t (id,a) values (958,26);
+insert into t (id,a) values (958,27);
+insert into t (id,a) values (958,28);
+insert into t (id,a) values (958,29);
+insert into t (id,a) values (958,30);
+insert into t (id,a) values (958,31);
+insert into t (id,a) values (958,32);
+insert into t (id,a) values (958,33);
+insert into t (id,a) values (958,34);
+insert into t (id,a) values (958,35);
+insert into t (id,a) values (958,36);
+insert into t (id,a) values (958,37);
+insert into t (id,a) values (958,38);
+insert into t (id,a) values (958,39);
+insert into t (id,a) values (958,40);
+insert into t (id,a) values (958,41);
+insert into t (id,a) values (958,42);
+insert into t (id,a) values (958,43);
+insert into t (id,a) values (958,44);
+insert into t (id,a) values (958,45);
+insert into t (id,a) values (958,46);
+insert into t (id,a) values (958,47);
+insert into t (id,a) values (958,48);
+insert into t (id,a) values (958,49);
+insert into t (id,a) values (958,50);
+insert into t (id,a) values (958,51);
+insert into t (id,a) values (958,52);
+insert into t (id,a) values (958,53);
+insert into t (id,a) values (958,54);
+insert into t (id,a) values (958,55);
+insert into t (id,a) values (958,56);
+insert into t (id,a) values (958,57);
+insert into t (id,a) values (958,58);
+insert into t (id,a) values (958,59);
+insert into t (id,a) values (958,60);
+insert into t (id,a) values (958,61);
+insert into t (id,a) values (958,62);
+insert into t (id,a) values (958,63);
+insert into t (id,a) values (958,64);
+insert into t (id,a) values (958,65);
+insert into t (id,a) values (958,66);
+insert into t (id,a) values (958,67);
+insert into t (id,a) values (958,68);
+insert into t (id,a) values (958,69);
+insert into t (id,a) values (958,70);
+insert into t (id,a) values (958,71);
+insert into t (id,a) values (958,72);
+insert into t (id,a) values (958,73);
+insert into t (id,a) values (958,74);
+insert into t (id,a) values (958,75);
+insert into t (id,a) values (958,76);
+insert into t (id,a) values (958,77);
+insert into t (id,a) values (958,78);
+insert into t (id,a) values (958,79);
+insert into t (id,a) values (958,80);
+insert into t (id,a) values (958,81);
+insert into t (id,a) values (958,82);
+insert into t (id,a) values (958,83);
+insert into t (id,a) values (958,84);
+insert into t (id,a) values (958,85);
+insert into t (id,a) values (958,86);
+insert into t (id,a) values (958,87);
+insert into t (id,a) values (958,88);
+insert into t (id,a) values (958,89);
+insert into t (id,a) values (958,90);
+insert into t (id,a) values (958,91);
+insert into t (id,a) values (958,92);
+insert into t (id,a) values (958,93);
+insert into t (id,a) values (958,94);
+insert into t (id,a) values (958,95);
+insert into t (id,a) values (958,96);
+insert into t (id,a) values (958,97);
+insert into t (id,a) values (958,98);
+insert into t (id,a) values (958,99);
+insert into t (id,a) values (959,0);
+insert into t (id,a) values (959,1);
+insert into t (id,a) values (959,2);
+insert into t (id,a) values (959,3);
+insert into t (id,a) values (959,4);
+insert into t (id,a) values (959,5);
+insert into t (id,a) values (959,6);
+insert into t (id,a) values (959,7);
+insert into t (id,a) values (959,8);
+insert into t (id,a) values (959,9);
+insert into t (id,a) values (959,10);
+insert into t (id,a) values (959,11);
+insert into t (id,a) values (959,12);
+insert into t (id,a) values (959,13);
+insert into t (id,a) values (959,14);
+insert into t (id,a) values (959,15);
+insert into t (id,a) values (959,16);
+insert into t (id,a) values (959,17);
+insert into t (id,a) values (959,18);
+insert into t (id,a) values (959,19);
+insert into t (id,a) values (959,20);
+insert into t (id,a) values (959,21);
+insert into t (id,a) values (959,22);
+insert into t (id,a) values (959,23);
+insert into t (id,a) values (959,24);
+insert into t (id,a) values (959,25);
+insert into t (id,a) values (959,26);
+insert into t (id,a) values (959,27);
+insert into t (id,a) values (959,28);
+insert into t (id,a) values (959,29);
+insert into t (id,a) values (959,30);
+insert into t (id,a) values (959,31);
+insert into t (id,a) values (959,32);
+insert into t (id,a) values (959,33);
+insert into t (id,a) values (959,34);
+insert into t (id,a) values (959,35);
+insert into t (id,a) values (959,36);
+insert into t (id,a) values (959,37);
+insert into t (id,a) values (959,38);
+insert into t (id,a) values (959,39);
+insert into t (id,a) values (959,40);
+insert into t (id,a) values (959,41);
+insert into t (id,a) values (959,42);
+insert into t (id,a) values (959,43);
+insert into t (id,a) values (959,44);
+insert into t (id,a) values (959,45);
+insert into t (id,a) values (959,46);
+insert into t (id,a) values (959,47);
+insert into t (id,a) values (959,48);
+insert into t (id,a) values (959,49);
+insert into t (id,a) values (959,50);
+insert into t (id,a) values (959,51);
+insert into t (id,a) values (959,52);
+insert into t (id,a) values (959,53);
+insert into t (id,a) values (959,54);
+insert into t (id,a) values (959,55);
+insert into t (id,a) values (959,56);
+insert into t (id,a) values (959,57);
+insert into t (id,a) values (959,58);
+insert into t (id,a) values (959,59);
+insert into t (id,a) values (959,60);
+insert into t (id,a) values (959,61);
+insert into t (id,a) values (959,62);
+insert into t (id,a) values (959,63);
+insert into t (id,a) values (959,64);
+insert into t (id,a) values (959,65);
+insert into t (id,a) values (959,66);
+insert into t (id,a) values (959,67);
+insert into t (id,a) values (959,68);
+insert into t (id,a) values (959,69);
+insert into t (id,a) values (959,70);
+insert into t (id,a) values (959,71);
+insert into t (id,a) values (959,72);
+insert into t (id,a) values (959,73);
+insert into t (id,a) values (959,74);
+insert into t (id,a) values (959,75);
+insert into t (id,a) values (959,76);
+insert into t (id,a) values (959,77);
+insert into t (id,a) values (959,78);
+insert into t (id,a) values (959,79);
+insert into t (id,a) values (959,80);
+insert into t (id,a) values (959,81);
+insert into t (id,a) values (959,82);
+insert into t (id,a) values (959,83);
+insert into t (id,a) values (959,84);
+insert into t (id,a) values (959,85);
+insert into t (id,a) values (959,86);
+insert into t (id,a) values (959,87);
+insert into t (id,a) values (959,88);
+insert into t (id,a) values (959,89);
+insert into t (id,a) values (959,90);
+insert into t (id,a) values (959,91);
+insert into t (id,a) values (959,92);
+insert into t (id,a) values (959,93);
+insert into t (id,a) values (959,94);
+insert into t (id,a) values (959,95);
+insert into t (id,a) values (959,96);
+insert into t (id,a) values (959,97);
+insert into t (id,a) values (959,98);
+insert into t (id,a) values (959,99);
+insert into t (id,a) values (960,0);
+insert into t (id,a) values (960,1);
+insert into t (id,a) values (960,2);
+insert into t (id,a) values (960,3);
+insert into t (id,a) values (960,4);
+insert into t (id,a) values (960,5);
+insert into t (id,a) values (960,6);
+insert into t (id,a) values (960,7);
+insert into t (id,a) values (960,8);
+insert into t (id,a) values (960,9);
+insert into t (id,a) values (960,10);
+insert into t (id,a) values (960,11);
+insert into t (id,a) values (960,12);
+insert into t (id,a) values (960,13);
+insert into t (id,a) values (960,14);
+insert into t (id,a) values (960,15);
+insert into t (id,a) values (960,16);
+insert into t (id,a) values (960,17);
+insert into t (id,a) values (960,18);
+insert into t (id,a) values (960,19);
+insert into t (id,a) values (960,20);
+insert into t (id,a) values (960,21);
+insert into t (id,a) values (960,22);
+insert into t (id,a) values (960,23);
+insert into t (id,a) values (960,24);
+insert into t (id,a) values (960,25);
+insert into t (id,a) values (960,26);
+insert into t (id,a) values (960,27);
+insert into t (id,a) values (960,28);
+insert into t (id,a) values (960,29);
+insert into t (id,a) values (960,30);
+insert into t (id,a) values (960,31);
+insert into t (id,a) values (960,32);
+insert into t (id,a) values (960,33);
+insert into t (id,a) values (960,34);
+insert into t (id,a) values (960,35);
+insert into t (id,a) values (960,36);
+insert into t (id,a) values (960,37);
+insert into t (id,a) values (960,38);
+insert into t (id,a) values (960,39);
+insert into t (id,a) values (960,40);
+insert into t (id,a) values (960,41);
+insert into t (id,a) values (960,42);
+insert into t (id,a) values (960,43);
+insert into t (id,a) values (960,44);
+insert into t (id,a) values (960,45);
+insert into t (id,a) values (960,46);
+insert into t (id,a) values (960,47);
+insert into t (id,a) values (960,48);
+insert into t (id,a) values (960,49);
+insert into t (id,a) values (960,50);
+insert into t (id,a) values (960,51);
+insert into t (id,a) values (960,52);
+insert into t (id,a) values (960,53);
+insert into t (id,a) values (960,54);
+insert into t (id,a) values (960,55);
+insert into t (id,a) values (960,56);
+insert into t (id,a) values (960,57);
+insert into t (id,a) values (960,58);
+insert into t (id,a) values (960,59);
+insert into t (id,a) values (960,60);
+insert into t (id,a) values (960,61);
+insert into t (id,a) values (960,62);
+insert into t (id,a) values (960,63);
+insert into t (id,a) values (960,64);
+insert into t (id,a) values (960,65);
+insert into t (id,a) values (960,66);
+insert into t (id,a) values (960,67);
+insert into t (id,a) values (960,68);
+insert into t (id,a) values (960,69);
+insert into t (id,a) values (960,70);
+insert into t (id,a) values (960,71);
+insert into t (id,a) values (960,72);
+insert into t (id,a) values (960,73);
+insert into t (id,a) values (960,74);
+insert into t (id,a) values (960,75);
+insert into t (id,a) values (960,76);
+insert into t (id,a) values (960,77);
+insert into t (id,a) values (960,78);
+insert into t (id,a) values (960,79);
+insert into t (id,a) values (960,80);
+insert into t (id,a) values (960,81);
+insert into t (id,a) values (960,82);
+insert into t (id,a) values (960,83);
+insert into t (id,a) values (960,84);
+insert into t (id,a) values (960,85);
+insert into t (id,a) values (960,86);
+insert into t (id,a) values (960,87);
+insert into t (id,a) values (960,88);
+insert into t (id,a) values (960,89);
+insert into t (id,a) values (960,90);
+insert into t (id,a) values (960,91);
+insert into t (id,a) values (960,92);
+insert into t (id,a) values (960,93);
+insert into t (id,a) values (960,94);
+insert into t (id,a) values (960,95);
+insert into t (id,a) values (960,96);
+insert into t (id,a) values (960,97);
+insert into t (id,a) values (960,98);
+insert into t (id,a) values (960,99);
+insert into t (id,a) values (961,0);
+insert into t (id,a) values (961,1);
+insert into t (id,a) values (961,2);
+insert into t (id,a) values (961,3);
+insert into t (id,a) values (961,4);
+insert into t (id,a) values (961,5);
+insert into t (id,a) values (961,6);
+insert into t (id,a) values (961,7);
+insert into t (id,a) values (961,8);
+insert into t (id,a) values (961,9);
+insert into t (id,a) values (961,10);
+insert into t (id,a) values (961,11);
+insert into t (id,a) values (961,12);
+insert into t (id,a) values (961,13);
+insert into t (id,a) values (961,14);
+insert into t (id,a) values (961,15);
+insert into t (id,a) values (961,16);
+insert into t (id,a) values (961,17);
+insert into t (id,a) values (961,18);
+insert into t (id,a) values (961,19);
+insert into t (id,a) values (961,20);
+insert into t (id,a) values (961,21);
+insert into t (id,a) values (961,22);
+insert into t (id,a) values (961,23);
+insert into t (id,a) values (961,24);
+insert into t (id,a) values (961,25);
+insert into t (id,a) values (961,26);
+insert into t (id,a) values (961,27);
+insert into t (id,a) values (961,28);
+insert into t (id,a) values (961,29);
+insert into t (id,a) values (961,30);
+insert into t (id,a) values (961,31);
+insert into t (id,a) values (961,32);
+insert into t (id,a) values (961,33);
+insert into t (id,a) values (961,34);
+insert into t (id,a) values (961,35);
+insert into t (id,a) values (961,36);
+insert into t (id,a) values (961,37);
+insert into t (id,a) values (961,38);
+insert into t (id,a) values (961,39);
+insert into t (id,a) values (961,40);
+insert into t (id,a) values (961,41);
+insert into t (id,a) values (961,42);
+insert into t (id,a) values (961,43);
+insert into t (id,a) values (961,44);
+insert into t (id,a) values (961,45);
+insert into t (id,a) values (961,46);
+insert into t (id,a) values (961,47);
+insert into t (id,a) values (961,48);
+insert into t (id,a) values (961,49);
+insert into t (id,a) values (961,50);
+insert into t (id,a) values (961,51);
+insert into t (id,a) values (961,52);
+insert into t (id,a) values (961,53);
+insert into t (id,a) values (961,54);
+insert into t (id,a) values (961,55);
+insert into t (id,a) values (961,56);
+insert into t (id,a) values (961,57);
+insert into t (id,a) values (961,58);
+insert into t (id,a) values (961,59);
+insert into t (id,a) values (961,60);
+insert into t (id,a) values (961,61);
+insert into t (id,a) values (961,62);
+insert into t (id,a) values (961,63);
+insert into t (id,a) values (961,64);
+insert into t (id,a) values (961,65);
+insert into t (id,a) values (961,66);
+insert into t (id,a) values (961,67);
+insert into t (id,a) values (961,68);
+insert into t (id,a) values (961,69);
+insert into t (id,a) values (961,70);
+insert into t (id,a) values (961,71);
+insert into t (id,a) values (961,72);
+insert into t (id,a) values (961,73);
+insert into t (id,a) values (961,74);
+insert into t (id,a) values (961,75);
+insert into t (id,a) values (961,76);
+insert into t (id,a) values (961,77);
+insert into t (id,a) values (961,78);
+insert into t (id,a) values (961,79);
+insert into t (id,a) values (961,80);
+insert into t (id,a) values (961,81);
+insert into t (id,a) values (961,82);
+insert into t (id,a) values (961,83);
+insert into t (id,a) values (961,84);
+insert into t (id,a) values (961,85);
+insert into t (id,a) values (961,86);
+insert into t (id,a) values (961,87);
+insert into t (id,a) values (961,88);
+insert into t (id,a) values (961,89);
+insert into t (id,a) values (961,90);
+insert into t (id,a) values (961,91);
+insert into t (id,a) values (961,92);
+insert into t (id,a) values (961,93);
+insert into t (id,a) values (961,94);
+insert into t (id,a) values (961,95);
+insert into t (id,a) values (961,96);
+insert into t (id,a) values (961,97);
+insert into t (id,a) values (961,98);
+insert into t (id,a) values (961,99);
+insert into t (id,a) values (962,0);
+insert into t (id,a) values (962,1);
+insert into t (id,a) values (962,2);
+insert into t (id,a) values (962,3);
+insert into t (id,a) values (962,4);
+insert into t (id,a) values (962,5);
+insert into t (id,a) values (962,6);
+insert into t (id,a) values (962,7);
+insert into t (id,a) values (962,8);
+insert into t (id,a) values (962,9);
+insert into t (id,a) values (962,10);
+insert into t (id,a) values (962,11);
+insert into t (id,a) values (962,12);
+insert into t (id,a) values (962,13);
+insert into t (id,a) values (962,14);
+insert into t (id,a) values (962,15);
+insert into t (id,a) values (962,16);
+insert into t (id,a) values (962,17);
+insert into t (id,a) values (962,18);
+insert into t (id,a) values (962,19);
+insert into t (id,a) values (962,20);
+insert into t (id,a) values (962,21);
+insert into t (id,a) values (962,22);
+insert into t (id,a) values (962,23);
+insert into t (id,a) values (962,24);
+insert into t (id,a) values (962,25);
+insert into t (id,a) values (962,26);
+insert into t (id,a) values (962,27);
+insert into t (id,a) values (962,28);
+insert into t (id,a) values (962,29);
+insert into t (id,a) values (962,30);
+insert into t (id,a) values (962,31);
+insert into t (id,a) values (962,32);
+insert into t (id,a) values (962,33);
+insert into t (id,a) values (962,34);
+insert into t (id,a) values (962,35);
+insert into t (id,a) values (962,36);
+insert into t (id,a) values (962,37);
+insert into t (id,a) values (962,38);
+insert into t (id,a) values (962,39);
+insert into t (id,a) values (962,40);
+insert into t (id,a) values (962,41);
+insert into t (id,a) values (962,42);
+insert into t (id,a) values (962,43);
+insert into t (id,a) values (962,44);
+insert into t (id,a) values (962,45);
+insert into t (id,a) values (962,46);
+insert into t (id,a) values (962,47);
+insert into t (id,a) values (962,48);
+insert into t (id,a) values (962,49);
+insert into t (id,a) values (962,50);
+insert into t (id,a) values (962,51);
+insert into t (id,a) values (962,52);
+insert into t (id,a) values (962,53);
+insert into t (id,a) values (962,54);
+insert into t (id,a) values (962,55);
+insert into t (id,a) values (962,56);
+insert into t (id,a) values (962,57);
+insert into t (id,a) values (962,58);
+insert into t (id,a) values (962,59);
+insert into t (id,a) values (962,60);
+insert into t (id,a) values (962,61);
+insert into t (id,a) values (962,62);
+insert into t (id,a) values (962,63);
+insert into t (id,a) values (962,64);
+insert into t (id,a) values (962,65);
+insert into t (id,a) values (962,66);
+insert into t (id,a) values (962,67);
+insert into t (id,a) values (962,68);
+insert into t (id,a) values (962,69);
+insert into t (id,a) values (962,70);
+insert into t (id,a) values (962,71);
+insert into t (id,a) values (962,72);
+insert into t (id,a) values (962,73);
+insert into t (id,a) values (962,74);
+insert into t (id,a) values (962,75);
+insert into t (id,a) values (962,76);
+insert into t (id,a) values (962,77);
+insert into t (id,a) values (962,78);
+insert into t (id,a) values (962,79);
+insert into t (id,a) values (962,80);
+insert into t (id,a) values (962,81);
+insert into t (id,a) values (962,82);
+insert into t (id,a) values (962,83);
+insert into t (id,a) values (962,84);
+insert into t (id,a) values (962,85);
+insert into t (id,a) values (962,86);
+insert into t (id,a) values (962,87);
+insert into t (id,a) values (962,88);
+insert into t (id,a) values (962,89);
+insert into t (id,a) values (962,90);
+insert into t (id,a) values (962,91);
+insert into t (id,a) values (962,92);
+insert into t (id,a) values (962,93);
+insert into t (id,a) values (962,94);
+insert into t (id,a) values (962,95);
+insert into t (id,a) values (962,96);
+insert into t (id,a) values (962,97);
+insert into t (id,a) values (962,98);
+insert into t (id,a) values (962,99);
+insert into t (id,a) values (963,0);
+insert into t (id,a) values (963,1);
+insert into t (id,a) values (963,2);
+insert into t (id,a) values (963,3);
+insert into t (id,a) values (963,4);
+insert into t (id,a) values (963,5);
+insert into t (id,a) values (963,6);
+insert into t (id,a) values (963,7);
+insert into t (id,a) values (963,8);
+insert into t (id,a) values (963,9);
+insert into t (id,a) values (963,10);
+insert into t (id,a) values (963,11);
+insert into t (id,a) values (963,12);
+insert into t (id,a) values (963,13);
+insert into t (id,a) values (963,14);
+insert into t (id,a) values (963,15);
+insert into t (id,a) values (963,16);
+insert into t (id,a) values (963,17);
+insert into t (id,a) values (963,18);
+insert into t (id,a) values (963,19);
+insert into t (id,a) values (963,20);
+insert into t (id,a) values (963,21);
+insert into t (id,a) values (963,22);
+insert into t (id,a) values (963,23);
+insert into t (id,a) values (963,24);
+insert into t (id,a) values (963,25);
+insert into t (id,a) values (963,26);
+insert into t (id,a) values (963,27);
+insert into t (id,a) values (963,28);
+insert into t (id,a) values (963,29);
+insert into t (id,a) values (963,30);
+insert into t (id,a) values (963,31);
+insert into t (id,a) values (963,32);
+insert into t (id,a) values (963,33);
+insert into t (id,a) values (963,34);
+insert into t (id,a) values (963,35);
+insert into t (id,a) values (963,36);
+insert into t (id,a) values (963,37);
+insert into t (id,a) values (963,38);
+insert into t (id,a) values (963,39);
+insert into t (id,a) values (963,40);
+insert into t (id,a) values (963,41);
+insert into t (id,a) values (963,42);
+insert into t (id,a) values (963,43);
+insert into t (id,a) values (963,44);
+insert into t (id,a) values (963,45);
+insert into t (id,a) values (963,46);
+insert into t (id,a) values (963,47);
+insert into t (id,a) values (963,48);
+insert into t (id,a) values (963,49);
+insert into t (id,a) values (963,50);
+insert into t (id,a) values (963,51);
+insert into t (id,a) values (963,52);
+insert into t (id,a) values (963,53);
+insert into t (id,a) values (963,54);
+insert into t (id,a) values (963,55);
+insert into t (id,a) values (963,56);
+insert into t (id,a) values (963,57);
+insert into t (id,a) values (963,58);
+insert into t (id,a) values (963,59);
+insert into t (id,a) values (963,60);
+insert into t (id,a) values (963,61);
+insert into t (id,a) values (963,62);
+insert into t (id,a) values (963,63);
+insert into t (id,a) values (963,64);
+insert into t (id,a) values (963,65);
+insert into t (id,a) values (963,66);
+insert into t (id,a) values (963,67);
+insert into t (id,a) values (963,68);
+insert into t (id,a) values (963,69);
+insert into t (id,a) values (963,70);
+insert into t (id,a) values (963,71);
+insert into t (id,a) values (963,72);
+insert into t (id,a) values (963,73);
+insert into t (id,a) values (963,74);
+insert into t (id,a) values (963,75);
+insert into t (id,a) values (963,76);
+insert into t (id,a) values (963,77);
+insert into t (id,a) values (963,78);
+insert into t (id,a) values (963,79);
+insert into t (id,a) values (963,80);
+insert into t (id,a) values (963,81);
+insert into t (id,a) values (963,82);
+insert into t (id,a) values (963,83);
+insert into t (id,a) values (963,84);
+insert into t (id,a) values (963,85);
+insert into t (id,a) values (963,86);
+insert into t (id,a) values (963,87);
+insert into t (id,a) values (963,88);
+insert into t (id,a) values (963,89);
+insert into t (id,a) values (963,90);
+insert into t (id,a) values (963,91);
+insert into t (id,a) values (963,92);
+insert into t (id,a) values (963,93);
+insert into t (id,a) values (963,94);
+insert into t (id,a) values (963,95);
+insert into t (id,a) values (963,96);
+insert into t (id,a) values (963,97);
+insert into t (id,a) values (963,98);
+insert into t (id,a) values (963,99);
+insert into t (id,a) values (964,0);
+insert into t (id,a) values (964,1);
+insert into t (id,a) values (964,2);
+insert into t (id,a) values (964,3);
+insert into t (id,a) values (964,4);
+insert into t (id,a) values (964,5);
+insert into t (id,a) values (964,6);
+insert into t (id,a) values (964,7);
+insert into t (id,a) values (964,8);
+insert into t (id,a) values (964,9);
+insert into t (id,a) values (964,10);
+insert into t (id,a) values (964,11);
+insert into t (id,a) values (964,12);
+insert into t (id,a) values (964,13);
+insert into t (id,a) values (964,14);
+insert into t (id,a) values (964,15);
+insert into t (id,a) values (964,16);
+insert into t (id,a) values (964,17);
+insert into t (id,a) values (964,18);
+insert into t (id,a) values (964,19);
+insert into t (id,a) values (964,20);
+insert into t (id,a) values (964,21);
+insert into t (id,a) values (964,22);
+insert into t (id,a) values (964,23);
+insert into t (id,a) values (964,24);
+insert into t (id,a) values (964,25);
+insert into t (id,a) values (964,26);
+insert into t (id,a) values (964,27);
+insert into t (id,a) values (964,28);
+insert into t (id,a) values (964,29);
+insert into t (id,a) values (964,30);
+insert into t (id,a) values (964,31);
+insert into t (id,a) values (964,32);
+insert into t (id,a) values (964,33);
+insert into t (id,a) values (964,34);
+insert into t (id,a) values (964,35);
+insert into t (id,a) values (964,36);
+insert into t (id,a) values (964,37);
+insert into t (id,a) values (964,38);
+insert into t (id,a) values (964,39);
+insert into t (id,a) values (964,40);
+insert into t (id,a) values (964,41);
+insert into t (id,a) values (964,42);
+insert into t (id,a) values (964,43);
+insert into t (id,a) values (964,44);
+insert into t (id,a) values (964,45);
+insert into t (id,a) values (964,46);
+insert into t (id,a) values (964,47);
+insert into t (id,a) values (964,48);
+insert into t (id,a) values (964,49);
+insert into t (id,a) values (964,50);
+insert into t (id,a) values (964,51);
+insert into t (id,a) values (964,52);
+insert into t (id,a) values (964,53);
+insert into t (id,a) values (964,54);
+insert into t (id,a) values (964,55);
+insert into t (id,a) values (964,56);
+insert into t (id,a) values (964,57);
+insert into t (id,a) values (964,58);
+insert into t (id,a) values (964,59);
+insert into t (id,a) values (964,60);
+insert into t (id,a) values (964,61);
+insert into t (id,a) values (964,62);
+insert into t (id,a) values (964,63);
+insert into t (id,a) values (964,64);
+insert into t (id,a) values (964,65);
+insert into t (id,a) values (964,66);
+insert into t (id,a) values (964,67);
+insert into t (id,a) values (964,68);
+insert into t (id,a) values (964,69);
+insert into t (id,a) values (964,70);
+insert into t (id,a) values (964,71);
+insert into t (id,a) values (964,72);
+insert into t (id,a) values (964,73);
+insert into t (id,a) values (964,74);
+insert into t (id,a) values (964,75);
+insert into t (id,a) values (964,76);
+insert into t (id,a) values (964,77);
+insert into t (id,a) values (964,78);
+insert into t (id,a) values (964,79);
+insert into t (id,a) values (964,80);
+insert into t (id,a) values (964,81);
+insert into t (id,a) values (964,82);
+insert into t (id,a) values (964,83);
+insert into t (id,a) values (964,84);
+insert into t (id,a) values (964,85);
+insert into t (id,a) values (964,86);
+insert into t (id,a) values (964,87);
+insert into t (id,a) values (964,88);
+insert into t (id,a) values (964,89);
+insert into t (id,a) values (964,90);
+insert into t (id,a) values (964,91);
+insert into t (id,a) values (964,92);
+insert into t (id,a) values (964,93);
+insert into t (id,a) values (964,94);
+insert into t (id,a) values (964,95);
+insert into t (id,a) values (964,96);
+insert into t (id,a) values (964,97);
+insert into t (id,a) values (964,98);
+insert into t (id,a) values (964,99);
+insert into t (id,a) values (965,0);
+insert into t (id,a) values (965,1);
+insert into t (id,a) values (965,2);
+insert into t (id,a) values (965,3);
+insert into t (id,a) values (965,4);
+insert into t (id,a) values (965,5);
+insert into t (id,a) values (965,6);
+insert into t (id,a) values (965,7);
+insert into t (id,a) values (965,8);
+insert into t (id,a) values (965,9);
+insert into t (id,a) values (965,10);
+insert into t (id,a) values (965,11);
+insert into t (id,a) values (965,12);
+insert into t (id,a) values (965,13);
+insert into t (id,a) values (965,14);
+insert into t (id,a) values (965,15);
+insert into t (id,a) values (965,16);
+insert into t (id,a) values (965,17);
+insert into t (id,a) values (965,18);
+insert into t (id,a) values (965,19);
+insert into t (id,a) values (965,20);
+insert into t (id,a) values (965,21);
+insert into t (id,a) values (965,22);
+insert into t (id,a) values (965,23);
+insert into t (id,a) values (965,24);
+insert into t (id,a) values (965,25);
+insert into t (id,a) values (965,26);
+insert into t (id,a) values (965,27);
+insert into t (id,a) values (965,28);
+insert into t (id,a) values (965,29);
+insert into t (id,a) values (965,30);
+insert into t (id,a) values (965,31);
+insert into t (id,a) values (965,32);
+insert into t (id,a) values (965,33);
+insert into t (id,a) values (965,34);
+insert into t (id,a) values (965,35);
+insert into t (id,a) values (965,36);
+insert into t (id,a) values (965,37);
+insert into t (id,a) values (965,38);
+insert into t (id,a) values (965,39);
+insert into t (id,a) values (965,40);
+insert into t (id,a) values (965,41);
+insert into t (id,a) values (965,42);
+insert into t (id,a) values (965,43);
+insert into t (id,a) values (965,44);
+insert into t (id,a) values (965,45);
+insert into t (id,a) values (965,46);
+insert into t (id,a) values (965,47);
+insert into t (id,a) values (965,48);
+insert into t (id,a) values (965,49);
+insert into t (id,a) values (965,50);
+insert into t (id,a) values (965,51);
+insert into t (id,a) values (965,52);
+insert into t (id,a) values (965,53);
+insert into t (id,a) values (965,54);
+insert into t (id,a) values (965,55);
+insert into t (id,a) values (965,56);
+insert into t (id,a) values (965,57);
+insert into t (id,a) values (965,58);
+insert into t (id,a) values (965,59);
+insert into t (id,a) values (965,60);
+insert into t (id,a) values (965,61);
+insert into t (id,a) values (965,62);
+insert into t (id,a) values (965,63);
+insert into t (id,a) values (965,64);
+insert into t (id,a) values (965,65);
+insert into t (id,a) values (965,66);
+insert into t (id,a) values (965,67);
+insert into t (id,a) values (965,68);
+insert into t (id,a) values (965,69);
+insert into t (id,a) values (965,70);
+insert into t (id,a) values (965,71);
+insert into t (id,a) values (965,72);
+insert into t (id,a) values (965,73);
+insert into t (id,a) values (965,74);
+insert into t (id,a) values (965,75);
+insert into t (id,a) values (965,76);
+insert into t (id,a) values (965,77);
+insert into t (id,a) values (965,78);
+insert into t (id,a) values (965,79);
+insert into t (id,a) values (965,80);
+insert into t (id,a) values (965,81);
+insert into t (id,a) values (965,82);
+insert into t (id,a) values (965,83);
+insert into t (id,a) values (965,84);
+insert into t (id,a) values (965,85);
+insert into t (id,a) values (965,86);
+insert into t (id,a) values (965,87);
+insert into t (id,a) values (965,88);
+insert into t (id,a) values (965,89);
+insert into t (id,a) values (965,90);
+insert into t (id,a) values (965,91);
+insert into t (id,a) values (965,92);
+insert into t (id,a) values (965,93);
+insert into t (id,a) values (965,94);
+insert into t (id,a) values (965,95);
+insert into t (id,a) values (965,96);
+insert into t (id,a) values (965,97);
+insert into t (id,a) values (965,98);
+insert into t (id,a) values (965,99);
+insert into t (id,a) values (966,0);
+insert into t (id,a) values (966,1);
+insert into t (id,a) values (966,2);
+insert into t (id,a) values (966,3);
+insert into t (id,a) values (966,4);
+insert into t (id,a) values (966,5);
+insert into t (id,a) values (966,6);
+insert into t (id,a) values (966,7);
+insert into t (id,a) values (966,8);
+insert into t (id,a) values (966,9);
+insert into t (id,a) values (966,10);
+insert into t (id,a) values (966,11);
+insert into t (id,a) values (966,12);
+insert into t (id,a) values (966,13);
+insert into t (id,a) values (966,14);
+insert into t (id,a) values (966,15);
+insert into t (id,a) values (966,16);
+insert into t (id,a) values (966,17);
+insert into t (id,a) values (966,18);
+insert into t (id,a) values (966,19);
+insert into t (id,a) values (966,20);
+insert into t (id,a) values (966,21);
+insert into t (id,a) values (966,22);
+insert into t (id,a) values (966,23);
+insert into t (id,a) values (966,24);
+insert into t (id,a) values (966,25);
+insert into t (id,a) values (966,26);
+insert into t (id,a) values (966,27);
+insert into t (id,a) values (966,28);
+insert into t (id,a) values (966,29);
+insert into t (id,a) values (966,30);
+insert into t (id,a) values (966,31);
+insert into t (id,a) values (966,32);
+insert into t (id,a) values (966,33);
+insert into t (id,a) values (966,34);
+insert into t (id,a) values (966,35);
+insert into t (id,a) values (966,36);
+insert into t (id,a) values (966,37);
+insert into t (id,a) values (966,38);
+insert into t (id,a) values (966,39);
+insert into t (id,a) values (966,40);
+insert into t (id,a) values (966,41);
+insert into t (id,a) values (966,42);
+insert into t (id,a) values (966,43);
+insert into t (id,a) values (966,44);
+insert into t (id,a) values (966,45);
+insert into t (id,a) values (966,46);
+insert into t (id,a) values (966,47);
+insert into t (id,a) values (966,48);
+insert into t (id,a) values (966,49);
+insert into t (id,a) values (966,50);
+insert into t (id,a) values (966,51);
+insert into t (id,a) values (966,52);
+insert into t (id,a) values (966,53);
+insert into t (id,a) values (966,54);
+insert into t (id,a) values (966,55);
+insert into t (id,a) values (966,56);
+insert into t (id,a) values (966,57);
+insert into t (id,a) values (966,58);
+insert into t (id,a) values (966,59);
+insert into t (id,a) values (966,60);
+insert into t (id,a) values (966,61);
+insert into t (id,a) values (966,62);
+insert into t (id,a) values (966,63);
+insert into t (id,a) values (966,64);
+insert into t (id,a) values (966,65);
+insert into t (id,a) values (966,66);
+insert into t (id,a) values (966,67);
+insert into t (id,a) values (966,68);
+insert into t (id,a) values (966,69);
+insert into t (id,a) values (966,70);
+insert into t (id,a) values (966,71);
+insert into t (id,a) values (966,72);
+insert into t (id,a) values (966,73);
+insert into t (id,a) values (966,74);
+insert into t (id,a) values (966,75);
+insert into t (id,a) values (966,76);
+insert into t (id,a) values (966,77);
+insert into t (id,a) values (966,78);
+insert into t (id,a) values (966,79);
+insert into t (id,a) values (966,80);
+insert into t (id,a) values (966,81);
+insert into t (id,a) values (966,82);
+insert into t (id,a) values (966,83);
+insert into t (id,a) values (966,84);
+insert into t (id,a) values (966,85);
+insert into t (id,a) values (966,86);
+insert into t (id,a) values (966,87);
+insert into t (id,a) values (966,88);
+insert into t (id,a) values (966,89);
+insert into t (id,a) values (966,90);
+insert into t (id,a) values (966,91);
+insert into t (id,a) values (966,92);
+insert into t (id,a) values (966,93);
+insert into t (id,a) values (966,94);
+insert into t (id,a) values (966,95);
+insert into t (id,a) values (966,96);
+insert into t (id,a) values (966,97);
+insert into t (id,a) values (966,98);
+insert into t (id,a) values (966,99);
+insert into t (id,a) values (967,0);
+insert into t (id,a) values (967,1);
+insert into t (id,a) values (967,2);
+insert into t (id,a) values (967,3);
+insert into t (id,a) values (967,4);
+insert into t (id,a) values (967,5);
+insert into t (id,a) values (967,6);
+insert into t (id,a) values (967,7);
+insert into t (id,a) values (967,8);
+insert into t (id,a) values (967,9);
+insert into t (id,a) values (967,10);
+insert into t (id,a) values (967,11);
+insert into t (id,a) values (967,12);
+insert into t (id,a) values (967,13);
+insert into t (id,a) values (967,14);
+insert into t (id,a) values (967,15);
+insert into t (id,a) values (967,16);
+insert into t (id,a) values (967,17);
+insert into t (id,a) values (967,18);
+insert into t (id,a) values (967,19);
+insert into t (id,a) values (967,20);
+insert into t (id,a) values (967,21);
+insert into t (id,a) values (967,22);
+insert into t (id,a) values (967,23);
+insert into t (id,a) values (967,24);
+insert into t (id,a) values (967,25);
+insert into t (id,a) values (967,26);
+insert into t (id,a) values (967,27);
+insert into t (id,a) values (967,28);
+insert into t (id,a) values (967,29);
+insert into t (id,a) values (967,30);
+insert into t (id,a) values (967,31);
+insert into t (id,a) values (967,32);
+insert into t (id,a) values (967,33);
+insert into t (id,a) values (967,34);
+insert into t (id,a) values (967,35);
+insert into t (id,a) values (967,36);
+insert into t (id,a) values (967,37);
+insert into t (id,a) values (967,38);
+insert into t (id,a) values (967,39);
+insert into t (id,a) values (967,40);
+insert into t (id,a) values (967,41);
+insert into t (id,a) values (967,42);
+insert into t (id,a) values (967,43);
+insert into t (id,a) values (967,44);
+insert into t (id,a) values (967,45);
+insert into t (id,a) values (967,46);
+insert into t (id,a) values (967,47);
+insert into t (id,a) values (967,48);
+insert into t (id,a) values (967,49);
+insert into t (id,a) values (967,50);
+insert into t (id,a) values (967,51);
+insert into t (id,a) values (967,52);
+insert into t (id,a) values (967,53);
+insert into t (id,a) values (967,54);
+insert into t (id,a) values (967,55);
+insert into t (id,a) values (967,56);
+insert into t (id,a) values (967,57);
+insert into t (id,a) values (967,58);
+insert into t (id,a) values (967,59);
+insert into t (id,a) values (967,60);
+insert into t (id,a) values (967,61);
+insert into t (id,a) values (967,62);
+insert into t (id,a) values (967,63);
+insert into t (id,a) values (967,64);
+insert into t (id,a) values (967,65);
+insert into t (id,a) values (967,66);
+insert into t (id,a) values (967,67);
+insert into t (id,a) values (967,68);
+insert into t (id,a) values (967,69);
+insert into t (id,a) values (967,70);
+insert into t (id,a) values (967,71);
+insert into t (id,a) values (967,72);
+insert into t (id,a) values (967,73);
+insert into t (id,a) values (967,74);
+insert into t (id,a) values (967,75);
+insert into t (id,a) values (967,76);
+insert into t (id,a) values (967,77);
+insert into t (id,a) values (967,78);
+insert into t (id,a) values (967,79);
+insert into t (id,a) values (967,80);
+insert into t (id,a) values (967,81);
+insert into t (id,a) values (967,82);
+insert into t (id,a) values (967,83);
+insert into t (id,a) values (967,84);
+insert into t (id,a) values (967,85);
+insert into t (id,a) values (967,86);
+insert into t (id,a) values (967,87);
+insert into t (id,a) values (967,88);
+insert into t (id,a) values (967,89);
+insert into t (id,a) values (967,90);
+insert into t (id,a) values (967,91);
+insert into t (id,a) values (967,92);
+insert into t (id,a) values (967,93);
+insert into t (id,a) values (967,94);
+insert into t (id,a) values (967,95);
+insert into t (id,a) values (967,96);
+insert into t (id,a) values (967,97);
+insert into t (id,a) values (967,98);
+insert into t (id,a) values (967,99);
+insert into t (id,a) values (968,0);
+insert into t (id,a) values (968,1);
+insert into t (id,a) values (968,2);
+insert into t (id,a) values (968,3);
+insert into t (id,a) values (968,4);
+insert into t (id,a) values (968,5);
+insert into t (id,a) values (968,6);
+insert into t (id,a) values (968,7);
+insert into t (id,a) values (968,8);
+insert into t (id,a) values (968,9);
+insert into t (id,a) values (968,10);
+insert into t (id,a) values (968,11);
+insert into t (id,a) values (968,12);
+insert into t (id,a) values (968,13);
+insert into t (id,a) values (968,14);
+insert into t (id,a) values (968,15);
+insert into t (id,a) values (968,16);
+insert into t (id,a) values (968,17);
+insert into t (id,a) values (968,18);
+insert into t (id,a) values (968,19);
+insert into t (id,a) values (968,20);
+insert into t (id,a) values (968,21);
+insert into t (id,a) values (968,22);
+insert into t (id,a) values (968,23);
+insert into t (id,a) values (968,24);
+insert into t (id,a) values (968,25);
+insert into t (id,a) values (968,26);
+insert into t (id,a) values (968,27);
+insert into t (id,a) values (968,28);
+insert into t (id,a) values (968,29);
+insert into t (id,a) values (968,30);
+insert into t (id,a) values (968,31);
+insert into t (id,a) values (968,32);
+insert into t (id,a) values (968,33);
+insert into t (id,a) values (968,34);
+insert into t (id,a) values (968,35);
+insert into t (id,a) values (968,36);
+insert into t (id,a) values (968,37);
+insert into t (id,a) values (968,38);
+insert into t (id,a) values (968,39);
+insert into t (id,a) values (968,40);
+insert into t (id,a) values (968,41);
+insert into t (id,a) values (968,42);
+insert into t (id,a) values (968,43);
+insert into t (id,a) values (968,44);
+insert into t (id,a) values (968,45);
+insert into t (id,a) values (968,46);
+insert into t (id,a) values (968,47);
+insert into t (id,a) values (968,48);
+insert into t (id,a) values (968,49);
+insert into t (id,a) values (968,50);
+insert into t (id,a) values (968,51);
+insert into t (id,a) values (968,52);
+insert into t (id,a) values (968,53);
+insert into t (id,a) values (968,54);
+insert into t (id,a) values (968,55);
+insert into t (id,a) values (968,56);
+insert into t (id,a) values (968,57);
+insert into t (id,a) values (968,58);
+insert into t (id,a) values (968,59);
+insert into t (id,a) values (968,60);
+insert into t (id,a) values (968,61);
+insert into t (id,a) values (968,62);
+insert into t (id,a) values (968,63);
+insert into t (id,a) values (968,64);
+insert into t (id,a) values (968,65);
+insert into t (id,a) values (968,66);
+insert into t (id,a) values (968,67);
+insert into t (id,a) values (968,68);
+insert into t (id,a) values (968,69);
+insert into t (id,a) values (968,70);
+insert into t (id,a) values (968,71);
+insert into t (id,a) values (968,72);
+insert into t (id,a) values (968,73);
+insert into t (id,a) values (968,74);
+insert into t (id,a) values (968,75);
+insert into t (id,a) values (968,76);
+insert into t (id,a) values (968,77);
+insert into t (id,a) values (968,78);
+insert into t (id,a) values (968,79);
+insert into t (id,a) values (968,80);
+insert into t (id,a) values (968,81);
+insert into t (id,a) values (968,82);
+insert into t (id,a) values (968,83);
+insert into t (id,a) values (968,84);
+insert into t (id,a) values (968,85);
+insert into t (id,a) values (968,86);
+insert into t (id,a) values (968,87);
+insert into t (id,a) values (968,88);
+insert into t (id,a) values (968,89);
+insert into t (id,a) values (968,90);
+insert into t (id,a) values (968,91);
+insert into t (id,a) values (968,92);
+insert into t (id,a) values (968,93);
+insert into t (id,a) values (968,94);
+insert into t (id,a) values (968,95);
+insert into t (id,a) values (968,96);
+insert into t (id,a) values (968,97);
+insert into t (id,a) values (968,98);
+insert into t (id,a) values (968,99);
+insert into t (id,a) values (969,0);
+insert into t (id,a) values (969,1);
+insert into t (id,a) values (969,2);
+insert into t (id,a) values (969,3);
+insert into t (id,a) values (969,4);
+insert into t (id,a) values (969,5);
+insert into t (id,a) values (969,6);
+insert into t (id,a) values (969,7);
+insert into t (id,a) values (969,8);
+insert into t (id,a) values (969,9);
+insert into t (id,a) values (969,10);
+insert into t (id,a) values (969,11);
+insert into t (id,a) values (969,12);
+insert into t (id,a) values (969,13);
+insert into t (id,a) values (969,14);
+insert into t (id,a) values (969,15);
+insert into t (id,a) values (969,16);
+insert into t (id,a) values (969,17);
+insert into t (id,a) values (969,18);
+insert into t (id,a) values (969,19);
+insert into t (id,a) values (969,20);
+insert into t (id,a) values (969,21);
+insert into t (id,a) values (969,22);
+insert into t (id,a) values (969,23);
+insert into t (id,a) values (969,24);
+insert into t (id,a) values (969,25);
+insert into t (id,a) values (969,26);
+insert into t (id,a) values (969,27);
+insert into t (id,a) values (969,28);
+insert into t (id,a) values (969,29);
+insert into t (id,a) values (969,30);
+insert into t (id,a) values (969,31);
+insert into t (id,a) values (969,32);
+insert into t (id,a) values (969,33);
+insert into t (id,a) values (969,34);
+insert into t (id,a) values (969,35);
+insert into t (id,a) values (969,36);
+insert into t (id,a) values (969,37);
+insert into t (id,a) values (969,38);
+insert into t (id,a) values (969,39);
+insert into t (id,a) values (969,40);
+insert into t (id,a) values (969,41);
+insert into t (id,a) values (969,42);
+insert into t (id,a) values (969,43);
+insert into t (id,a) values (969,44);
+insert into t (id,a) values (969,45);
+insert into t (id,a) values (969,46);
+insert into t (id,a) values (969,47);
+insert into t (id,a) values (969,48);
+insert into t (id,a) values (969,49);
+insert into t (id,a) values (969,50);
+insert into t (id,a) values (969,51);
+insert into t (id,a) values (969,52);
+insert into t (id,a) values (969,53);
+insert into t (id,a) values (969,54);
+insert into t (id,a) values (969,55);
+insert into t (id,a) values (969,56);
+insert into t (id,a) values (969,57);
+insert into t (id,a) values (969,58);
+insert into t (id,a) values (969,59);
+insert into t (id,a) values (969,60);
+insert into t (id,a) values (969,61);
+insert into t (id,a) values (969,62);
+insert into t (id,a) values (969,63);
+insert into t (id,a) values (969,64);
+insert into t (id,a) values (969,65);
+insert into t (id,a) values (969,66);
+insert into t (id,a) values (969,67);
+insert into t (id,a) values (969,68);
+insert into t (id,a) values (969,69);
+insert into t (id,a) values (969,70);
+insert into t (id,a) values (969,71);
+insert into t (id,a) values (969,72);
+insert into t (id,a) values (969,73);
+insert into t (id,a) values (969,74);
+insert into t (id,a) values (969,75);
+insert into t (id,a) values (969,76);
+insert into t (id,a) values (969,77);
+insert into t (id,a) values (969,78);
+insert into t (id,a) values (969,79);
+insert into t (id,a) values (969,80);
+insert into t (id,a) values (969,81);
+insert into t (id,a) values (969,82);
+insert into t (id,a) values (969,83);
+insert into t (id,a) values (969,84);
+insert into t (id,a) values (969,85);
+insert into t (id,a) values (969,86);
+insert into t (id,a) values (969,87);
+insert into t (id,a) values (969,88);
+insert into t (id,a) values (969,89);
+insert into t (id,a) values (969,90);
+insert into t (id,a) values (969,91);
+insert into t (id,a) values (969,92);
+insert into t (id,a) values (969,93);
+insert into t (id,a) values (969,94);
+insert into t (id,a) values (969,95);
+insert into t (id,a) values (969,96);
+insert into t (id,a) values (969,97);
+insert into t (id,a) values (969,98);
+insert into t (id,a) values (969,99);
+insert into t (id,a) values (970,0);
+insert into t (id,a) values (970,1);
+insert into t (id,a) values (970,2);
+insert into t (id,a) values (970,3);
+insert into t (id,a) values (970,4);
+insert into t (id,a) values (970,5);
+insert into t (id,a) values (970,6);
+insert into t (id,a) values (970,7);
+insert into t (id,a) values (970,8);
+insert into t (id,a) values (970,9);
+insert into t (id,a) values (970,10);
+insert into t (id,a) values (970,11);
+insert into t (id,a) values (970,12);
+insert into t (id,a) values (970,13);
+insert into t (id,a) values (970,14);
+insert into t (id,a) values (970,15);
+insert into t (id,a) values (970,16);
+insert into t (id,a) values (970,17);
+insert into t (id,a) values (970,18);
+insert into t (id,a) values (970,19);
+insert into t (id,a) values (970,20);
+insert into t (id,a) values (970,21);
+insert into t (id,a) values (970,22);
+insert into t (id,a) values (970,23);
+insert into t (id,a) values (970,24);
+insert into t (id,a) values (970,25);
+insert into t (id,a) values (970,26);
+insert into t (id,a) values (970,27);
+insert into t (id,a) values (970,28);
+insert into t (id,a) values (970,29);
+insert into t (id,a) values (970,30);
+insert into t (id,a) values (970,31);
+insert into t (id,a) values (970,32);
+insert into t (id,a) values (970,33);
+insert into t (id,a) values (970,34);
+insert into t (id,a) values (970,35);
+insert into t (id,a) values (970,36);
+insert into t (id,a) values (970,37);
+insert into t (id,a) values (970,38);
+insert into t (id,a) values (970,39);
+insert into t (id,a) values (970,40);
+insert into t (id,a) values (970,41);
+insert into t (id,a) values (970,42);
+insert into t (id,a) values (970,43);
+insert into t (id,a) values (970,44);
+insert into t (id,a) values (970,45);
+insert into t (id,a) values (970,46);
+insert into t (id,a) values (970,47);
+insert into t (id,a) values (970,48);
+insert into t (id,a) values (970,49);
+insert into t (id,a) values (970,50);
+insert into t (id,a) values (970,51);
+insert into t (id,a) values (970,52);
+insert into t (id,a) values (970,53);
+insert into t (id,a) values (970,54);
+insert into t (id,a) values (970,55);
+insert into t (id,a) values (970,56);
+insert into t (id,a) values (970,57);
+insert into t (id,a) values (970,58);
+insert into t (id,a) values (970,59);
+insert into t (id,a) values (970,60);
+insert into t (id,a) values (970,61);
+insert into t (id,a) values (970,62);
+insert into t (id,a) values (970,63);
+insert into t (id,a) values (970,64);
+insert into t (id,a) values (970,65);
+insert into t (id,a) values (970,66);
+insert into t (id,a) values (970,67);
+insert into t (id,a) values (970,68);
+insert into t (id,a) values (970,69);
+insert into t (id,a) values (970,70);
+insert into t (id,a) values (970,71);
+insert into t (id,a) values (970,72);
+insert into t (id,a) values (970,73);
+insert into t (id,a) values (970,74);
+insert into t (id,a) values (970,75);
+insert into t (id,a) values (970,76);
+insert into t (id,a) values (970,77);
+insert into t (id,a) values (970,78);
+insert into t (id,a) values (970,79);
+insert into t (id,a) values (970,80);
+insert into t (id,a) values (970,81);
+insert into t (id,a) values (970,82);
+insert into t (id,a) values (970,83);
+insert into t (id,a) values (970,84);
+insert into t (id,a) values (970,85);
+insert into t (id,a) values (970,86);
+insert into t (id,a) values (970,87);
+insert into t (id,a) values (970,88);
+insert into t (id,a) values (970,89);
+insert into t (id,a) values (970,90);
+insert into t (id,a) values (970,91);
+insert into t (id,a) values (970,92);
+insert into t (id,a) values (970,93);
+insert into t (id,a) values (970,94);
+insert into t (id,a) values (970,95);
+insert into t (id,a) values (970,96);
+insert into t (id,a) values (970,97);
+insert into t (id,a) values (970,98);
+insert into t (id,a) values (970,99);
+insert into t (id,a) values (971,0);
+insert into t (id,a) values (971,1);
+insert into t (id,a) values (971,2);
+insert into t (id,a) values (971,3);
+insert into t (id,a) values (971,4);
+insert into t (id,a) values (971,5);
+insert into t (id,a) values (971,6);
+insert into t (id,a) values (971,7);
+insert into t (id,a) values (971,8);
+insert into t (id,a) values (971,9);
+insert into t (id,a) values (971,10);
+insert into t (id,a) values (971,11);
+insert into t (id,a) values (971,12);
+insert into t (id,a) values (971,13);
+insert into t (id,a) values (971,14);
+insert into t (id,a) values (971,15);
+insert into t (id,a) values (971,16);
+insert into t (id,a) values (971,17);
+insert into t (id,a) values (971,18);
+insert into t (id,a) values (971,19);
+insert into t (id,a) values (971,20);
+insert into t (id,a) values (971,21);
+insert into t (id,a) values (971,22);
+insert into t (id,a) values (971,23);
+insert into t (id,a) values (971,24);
+insert into t (id,a) values (971,25);
+insert into t (id,a) values (971,26);
+insert into t (id,a) values (971,27);
+insert into t (id,a) values (971,28);
+insert into t (id,a) values (971,29);
+insert into t (id,a) values (971,30);
+insert into t (id,a) values (971,31);
+insert into t (id,a) values (971,32);
+insert into t (id,a) values (971,33);
+insert into t (id,a) values (971,34);
+insert into t (id,a) values (971,35);
+insert into t (id,a) values (971,36);
+insert into t (id,a) values (971,37);
+insert into t (id,a) values (971,38);
+insert into t (id,a) values (971,39);
+insert into t (id,a) values (971,40);
+insert into t (id,a) values (971,41);
+insert into t (id,a) values (971,42);
+insert into t (id,a) values (971,43);
+insert into t (id,a) values (971,44);
+insert into t (id,a) values (971,45);
+insert into t (id,a) values (971,46);
+insert into t (id,a) values (971,47);
+insert into t (id,a) values (971,48);
+insert into t (id,a) values (971,49);
+insert into t (id,a) values (971,50);
+insert into t (id,a) values (971,51);
+insert into t (id,a) values (971,52);
+insert into t (id,a) values (971,53);
+insert into t (id,a) values (971,54);
+insert into t (id,a) values (971,55);
+insert into t (id,a) values (971,56);
+insert into t (id,a) values (971,57);
+insert into t (id,a) values (971,58);
+insert into t (id,a) values (971,59);
+insert into t (id,a) values (971,60);
+insert into t (id,a) values (971,61);
+insert into t (id,a) values (971,62);
+insert into t (id,a) values (971,63);
+insert into t (id,a) values (971,64);
+insert into t (id,a) values (971,65);
+insert into t (id,a) values (971,66);
+insert into t (id,a) values (971,67);
+insert into t (id,a) values (971,68);
+insert into t (id,a) values (971,69);
+insert into t (id,a) values (971,70);
+insert into t (id,a) values (971,71);
+insert into t (id,a) values (971,72);
+insert into t (id,a) values (971,73);
+insert into t (id,a) values (971,74);
+insert into t (id,a) values (971,75);
+insert into t (id,a) values (971,76);
+insert into t (id,a) values (971,77);
+insert into t (id,a) values (971,78);
+insert into t (id,a) values (971,79);
+insert into t (id,a) values (971,80);
+insert into t (id,a) values (971,81);
+insert into t (id,a) values (971,82);
+insert into t (id,a) values (971,83);
+insert into t (id,a) values (971,84);
+insert into t (id,a) values (971,85);
+insert into t (id,a) values (971,86);
+insert into t (id,a) values (971,87);
+insert into t (id,a) values (971,88);
+insert into t (id,a) values (971,89);
+insert into t (id,a) values (971,90);
+insert into t (id,a) values (971,91);
+insert into t (id,a) values (971,92);
+insert into t (id,a) values (971,93);
+insert into t (id,a) values (971,94);
+insert into t (id,a) values (971,95);
+insert into t (id,a) values (971,96);
+insert into t (id,a) values (971,97);
+insert into t (id,a) values (971,98);
+insert into t (id,a) values (971,99);
+insert into t (id,a) values (972,0);
+insert into t (id,a) values (972,1);
+insert into t (id,a) values (972,2);
+insert into t (id,a) values (972,3);
+insert into t (id,a) values (972,4);
+insert into t (id,a) values (972,5);
+insert into t (id,a) values (972,6);
+insert into t (id,a) values (972,7);
+insert into t (id,a) values (972,8);
+insert into t (id,a) values (972,9);
+insert into t (id,a) values (972,10);
+insert into t (id,a) values (972,11);
+insert into t (id,a) values (972,12);
+insert into t (id,a) values (972,13);
+insert into t (id,a) values (972,14);
+insert into t (id,a) values (972,15);
+insert into t (id,a) values (972,16);
+insert into t (id,a) values (972,17);
+insert into t (id,a) values (972,18);
+insert into t (id,a) values (972,19);
+insert into t (id,a) values (972,20);
+insert into t (id,a) values (972,21);
+insert into t (id,a) values (972,22);
+insert into t (id,a) values (972,23);
+insert into t (id,a) values (972,24);
+insert into t (id,a) values (972,25);
+insert into t (id,a) values (972,26);
+insert into t (id,a) values (972,27);
+insert into t (id,a) values (972,28);
+insert into t (id,a) values (972,29);
+insert into t (id,a) values (972,30);
+insert into t (id,a) values (972,31);
+insert into t (id,a) values (972,32);
+insert into t (id,a) values (972,33);
+insert into t (id,a) values (972,34);
+insert into t (id,a) values (972,35);
+insert into t (id,a) values (972,36);
+insert into t (id,a) values (972,37);
+insert into t (id,a) values (972,38);
+insert into t (id,a) values (972,39);
+insert into t (id,a) values (972,40);
+insert into t (id,a) values (972,41);
+insert into t (id,a) values (972,42);
+insert into t (id,a) values (972,43);
+insert into t (id,a) values (972,44);
+insert into t (id,a) values (972,45);
+insert into t (id,a) values (972,46);
+insert into t (id,a) values (972,47);
+insert into t (id,a) values (972,48);
+insert into t (id,a) values (972,49);
+insert into t (id,a) values (972,50);
+insert into t (id,a) values (972,51);
+insert into t (id,a) values (972,52);
+insert into t (id,a) values (972,53);
+insert into t (id,a) values (972,54);
+insert into t (id,a) values (972,55);
+insert into t (id,a) values (972,56);
+insert into t (id,a) values (972,57);
+insert into t (id,a) values (972,58);
+insert into t (id,a) values (972,59);
+insert into t (id,a) values (972,60);
+insert into t (id,a) values (972,61);
+insert into t (id,a) values (972,62);
+insert into t (id,a) values (972,63);
+insert into t (id,a) values (972,64);
+insert into t (id,a) values (972,65);
+insert into t (id,a) values (972,66);
+insert into t (id,a) values (972,67);
+insert into t (id,a) values (972,68);
+insert into t (id,a) values (972,69);
+insert into t (id,a) values (972,70);
+insert into t (id,a) values (972,71);
+insert into t (id,a) values (972,72);
+insert into t (id,a) values (972,73);
+insert into t (id,a) values (972,74);
+insert into t (id,a) values (972,75);
+insert into t (id,a) values (972,76);
+insert into t (id,a) values (972,77);
+insert into t (id,a) values (972,78);
+insert into t (id,a) values (972,79);
+insert into t (id,a) values (972,80);
+insert into t (id,a) values (972,81);
+insert into t (id,a) values (972,82);
+insert into t (id,a) values (972,83);
+insert into t (id,a) values (972,84);
+insert into t (id,a) values (972,85);
+insert into t (id,a) values (972,86);
+insert into t (id,a) values (972,87);
+insert into t (id,a) values (972,88);
+insert into t (id,a) values (972,89);
+insert into t (id,a) values (972,90);
+insert into t (id,a) values (972,91);
+insert into t (id,a) values (972,92);
+insert into t (id,a) values (972,93);
+insert into t (id,a) values (972,94);
+insert into t (id,a) values (972,95);
+insert into t (id,a) values (972,96);
+insert into t (id,a) values (972,97);
+insert into t (id,a) values (972,98);
+insert into t (id,a) values (972,99);
+insert into t (id,a) values (973,0);
+insert into t (id,a) values (973,1);
+insert into t (id,a) values (973,2);
+insert into t (id,a) values (973,3);
+insert into t (id,a) values (973,4);
+insert into t (id,a) values (973,5);
+insert into t (id,a) values (973,6);
+insert into t (id,a) values (973,7);
+insert into t (id,a) values (973,8);
+insert into t (id,a) values (973,9);
+insert into t (id,a) values (973,10);
+insert into t (id,a) values (973,11);
+insert into t (id,a) values (973,12);
+insert into t (id,a) values (973,13);
+insert into t (id,a) values (973,14);
+insert into t (id,a) values (973,15);
+insert into t (id,a) values (973,16);
+insert into t (id,a) values (973,17);
+insert into t (id,a) values (973,18);
+insert into t (id,a) values (973,19);
+insert into t (id,a) values (973,20);
+insert into t (id,a) values (973,21);
+insert into t (id,a) values (973,22);
+insert into t (id,a) values (973,23);
+insert into t (id,a) values (973,24);
+insert into t (id,a) values (973,25);
+insert into t (id,a) values (973,26);
+insert into t (id,a) values (973,27);
+insert into t (id,a) values (973,28);
+insert into t (id,a) values (973,29);
+insert into t (id,a) values (973,30);
+insert into t (id,a) values (973,31);
+insert into t (id,a) values (973,32);
+insert into t (id,a) values (973,33);
+insert into t (id,a) values (973,34);
+insert into t (id,a) values (973,35);
+insert into t (id,a) values (973,36);
+insert into t (id,a) values (973,37);
+insert into t (id,a) values (973,38);
+insert into t (id,a) values (973,39);
+insert into t (id,a) values (973,40);
+insert into t (id,a) values (973,41);
+insert into t (id,a) values (973,42);
+insert into t (id,a) values (973,43);
+insert into t (id,a) values (973,44);
+insert into t (id,a) values (973,45);
+insert into t (id,a) values (973,46);
+insert into t (id,a) values (973,47);
+insert into t (id,a) values (973,48);
+insert into t (id,a) values (973,49);
+insert into t (id,a) values (973,50);
+insert into t (id,a) values (973,51);
+insert into t (id,a) values (973,52);
+insert into t (id,a) values (973,53);
+insert into t (id,a) values (973,54);
+insert into t (id,a) values (973,55);
+insert into t (id,a) values (973,56);
+insert into t (id,a) values (973,57);
+insert into t (id,a) values (973,58);
+insert into t (id,a) values (973,59);
+insert into t (id,a) values (973,60);
+insert into t (id,a) values (973,61);
+insert into t (id,a) values (973,62);
+insert into t (id,a) values (973,63);
+insert into t (id,a) values (973,64);
+insert into t (id,a) values (973,65);
+insert into t (id,a) values (973,66);
+insert into t (id,a) values (973,67);
+insert into t (id,a) values (973,68);
+insert into t (id,a) values (973,69);
+insert into t (id,a) values (973,70);
+insert into t (id,a) values (973,71);
+insert into t (id,a) values (973,72);
+insert into t (id,a) values (973,73);
+insert into t (id,a) values (973,74);
+insert into t (id,a) values (973,75);
+insert into t (id,a) values (973,76);
+insert into t (id,a) values (973,77);
+insert into t (id,a) values (973,78);
+insert into t (id,a) values (973,79);
+insert into t (id,a) values (973,80);
+insert into t (id,a) values (973,81);
+insert into t (id,a) values (973,82);
+insert into t (id,a) values (973,83);
+insert into t (id,a) values (973,84);
+insert into t (id,a) values (973,85);
+insert into t (id,a) values (973,86);
+insert into t (id,a) values (973,87);
+insert into t (id,a) values (973,88);
+insert into t (id,a) values (973,89);
+insert into t (id,a) values (973,90);
+insert into t (id,a) values (973,91);
+insert into t (id,a) values (973,92);
+insert into t (id,a) values (973,93);
+insert into t (id,a) values (973,94);
+insert into t (id,a) values (973,95);
+insert into t (id,a) values (973,96);
+insert into t (id,a) values (973,97);
+insert into t (id,a) values (973,98);
+insert into t (id,a) values (973,99);
+insert into t (id,a) values (974,0);
+insert into t (id,a) values (974,1);
+insert into t (id,a) values (974,2);
+insert into t (id,a) values (974,3);
+insert into t (id,a) values (974,4);
+insert into t (id,a) values (974,5);
+insert into t (id,a) values (974,6);
+insert into t (id,a) values (974,7);
+insert into t (id,a) values (974,8);
+insert into t (id,a) values (974,9);
+insert into t (id,a) values (974,10);
+insert into t (id,a) values (974,11);
+insert into t (id,a) values (974,12);
+insert into t (id,a) values (974,13);
+insert into t (id,a) values (974,14);
+insert into t (id,a) values (974,15);
+insert into t (id,a) values (974,16);
+insert into t (id,a) values (974,17);
+insert into t (id,a) values (974,18);
+insert into t (id,a) values (974,19);
+insert into t (id,a) values (974,20);
+insert into t (id,a) values (974,21);
+insert into t (id,a) values (974,22);
+insert into t (id,a) values (974,23);
+insert into t (id,a) values (974,24);
+insert into t (id,a) values (974,25);
+insert into t (id,a) values (974,26);
+insert into t (id,a) values (974,27);
+insert into t (id,a) values (974,28);
+insert into t (id,a) values (974,29);
+insert into t (id,a) values (974,30);
+insert into t (id,a) values (974,31);
+insert into t (id,a) values (974,32);
+insert into t (id,a) values (974,33);
+insert into t (id,a) values (974,34);
+insert into t (id,a) values (974,35);
+insert into t (id,a) values (974,36);
+insert into t (id,a) values (974,37);
+insert into t (id,a) values (974,38);
+insert into t (id,a) values (974,39);
+insert into t (id,a) values (974,40);
+insert into t (id,a) values (974,41);
+insert into t (id,a) values (974,42);
+insert into t (id,a) values (974,43);
+insert into t (id,a) values (974,44);
+insert into t (id,a) values (974,45);
+insert into t (id,a) values (974,46);
+insert into t (id,a) values (974,47);
+insert into t (id,a) values (974,48);
+insert into t (id,a) values (974,49);
+insert into t (id,a) values (974,50);
+insert into t (id,a) values (974,51);
+insert into t (id,a) values (974,52);
+insert into t (id,a) values (974,53);
+insert into t (id,a) values (974,54);
+insert into t (id,a) values (974,55);
+insert into t (id,a) values (974,56);
+insert into t (id,a) values (974,57);
+insert into t (id,a) values (974,58);
+insert into t (id,a) values (974,59);
+insert into t (id,a) values (974,60);
+insert into t (id,a) values (974,61);
+insert into t (id,a) values (974,62);
+insert into t (id,a) values (974,63);
+insert into t (id,a) values (974,64);
+insert into t (id,a) values (974,65);
+insert into t (id,a) values (974,66);
+insert into t (id,a) values (974,67);
+insert into t (id,a) values (974,68);
+insert into t (id,a) values (974,69);
+insert into t (id,a) values (974,70);
+insert into t (id,a) values (974,71);
+insert into t (id,a) values (974,72);
+insert into t (id,a) values (974,73);
+insert into t (id,a) values (974,74);
+insert into t (id,a) values (974,75);
+insert into t (id,a) values (974,76);
+insert into t (id,a) values (974,77);
+insert into t (id,a) values (974,78);
+insert into t (id,a) values (974,79);
+insert into t (id,a) values (974,80);
+insert into t (id,a) values (974,81);
+insert into t (id,a) values (974,82);
+insert into t (id,a) values (974,83);
+insert into t (id,a) values (974,84);
+insert into t (id,a) values (974,85);
+insert into t (id,a) values (974,86);
+insert into t (id,a) values (974,87);
+insert into t (id,a) values (974,88);
+insert into t (id,a) values (974,89);
+insert into t (id,a) values (974,90);
+insert into t (id,a) values (974,91);
+insert into t (id,a) values (974,92);
+insert into t (id,a) values (974,93);
+insert into t (id,a) values (974,94);
+insert into t (id,a) values (974,95);
+insert into t (id,a) values (974,96);
+insert into t (id,a) values (974,97);
+insert into t (id,a) values (974,98);
+insert into t (id,a) values (974,99);
+insert into t (id,a) values (975,0);
+insert into t (id,a) values (975,1);
+insert into t (id,a) values (975,2);
+insert into t (id,a) values (975,3);
+insert into t (id,a) values (975,4);
+insert into t (id,a) values (975,5);
+insert into t (id,a) values (975,6);
+insert into t (id,a) values (975,7);
+insert into t (id,a) values (975,8);
+insert into t (id,a) values (975,9);
+insert into t (id,a) values (975,10);
+insert into t (id,a) values (975,11);
+insert into t (id,a) values (975,12);
+insert into t (id,a) values (975,13);
+insert into t (id,a) values (975,14);
+insert into t (id,a) values (975,15);
+insert into t (id,a) values (975,16);
+insert into t (id,a) values (975,17);
+insert into t (id,a) values (975,18);
+insert into t (id,a) values (975,19);
+insert into t (id,a) values (975,20);
+insert into t (id,a) values (975,21);
+insert into t (id,a) values (975,22);
+insert into t (id,a) values (975,23);
+insert into t (id,a) values (975,24);
+insert into t (id,a) values (975,25);
+insert into t (id,a) values (975,26);
+insert into t (id,a) values (975,27);
+insert into t (id,a) values (975,28);
+insert into t (id,a) values (975,29);
+insert into t (id,a) values (975,30);
+insert into t (id,a) values (975,31);
+insert into t (id,a) values (975,32);
+insert into t (id,a) values (975,33);
+insert into t (id,a) values (975,34);
+insert into t (id,a) values (975,35);
+insert into t (id,a) values (975,36);
+insert into t (id,a) values (975,37);
+insert into t (id,a) values (975,38);
+insert into t (id,a) values (975,39);
+insert into t (id,a) values (975,40);
+insert into t (id,a) values (975,41);
+insert into t (id,a) values (975,42);
+insert into t (id,a) values (975,43);
+insert into t (id,a) values (975,44);
+insert into t (id,a) values (975,45);
+insert into t (id,a) values (975,46);
+insert into t (id,a) values (975,47);
+insert into t (id,a) values (975,48);
+insert into t (id,a) values (975,49);
+insert into t (id,a) values (975,50);
+insert into t (id,a) values (975,51);
+insert into t (id,a) values (975,52);
+insert into t (id,a) values (975,53);
+insert into t (id,a) values (975,54);
+insert into t (id,a) values (975,55);
+insert into t (id,a) values (975,56);
+insert into t (id,a) values (975,57);
+insert into t (id,a) values (975,58);
+insert into t (id,a) values (975,59);
+insert into t (id,a) values (975,60);
+insert into t (id,a) values (975,61);
+insert into t (id,a) values (975,62);
+insert into t (id,a) values (975,63);
+insert into t (id,a) values (975,64);
+insert into t (id,a) values (975,65);
+insert into t (id,a) values (975,66);
+insert into t (id,a) values (975,67);
+insert into t (id,a) values (975,68);
+insert into t (id,a) values (975,69);
+insert into t (id,a) values (975,70);
+insert into t (id,a) values (975,71);
+insert into t (id,a) values (975,72);
+insert into t (id,a) values (975,73);
+insert into t (id,a) values (975,74);
+insert into t (id,a) values (975,75);
+insert into t (id,a) values (975,76);
+insert into t (id,a) values (975,77);
+insert into t (id,a) values (975,78);
+insert into t (id,a) values (975,79);
+insert into t (id,a) values (975,80);
+insert into t (id,a) values (975,81);
+insert into t (id,a) values (975,82);
+insert into t (id,a) values (975,83);
+insert into t (id,a) values (975,84);
+insert into t (id,a) values (975,85);
+insert into t (id,a) values (975,86);
+insert into t (id,a) values (975,87);
+insert into t (id,a) values (975,88);
+insert into t (id,a) values (975,89);
+insert into t (id,a) values (975,90);
+insert into t (id,a) values (975,91);
+insert into t (id,a) values (975,92);
+insert into t (id,a) values (975,93);
+insert into t (id,a) values (975,94);
+insert into t (id,a) values (975,95);
+insert into t (id,a) values (975,96);
+insert into t (id,a) values (975,97);
+insert into t (id,a) values (975,98);
+insert into t (id,a) values (975,99);
+insert into t (id,a) values (976,0);
+insert into t (id,a) values (976,1);
+insert into t (id,a) values (976,2);
+insert into t (id,a) values (976,3);
+insert into t (id,a) values (976,4);
+insert into t (id,a) values (976,5);
+insert into t (id,a) values (976,6);
+insert into t (id,a) values (976,7);
+insert into t (id,a) values (976,8);
+insert into t (id,a) values (976,9);
+insert into t (id,a) values (976,10);
+insert into t (id,a) values (976,11);
+insert into t (id,a) values (976,12);
+insert into t (id,a) values (976,13);
+insert into t (id,a) values (976,14);
+insert into t (id,a) values (976,15);
+insert into t (id,a) values (976,16);
+insert into t (id,a) values (976,17);
+insert into t (id,a) values (976,18);
+insert into t (id,a) values (976,19);
+insert into t (id,a) values (976,20);
+insert into t (id,a) values (976,21);
+insert into t (id,a) values (976,22);
+insert into t (id,a) values (976,23);
+insert into t (id,a) values (976,24);
+insert into t (id,a) values (976,25);
+insert into t (id,a) values (976,26);
+insert into t (id,a) values (976,27);
+insert into t (id,a) values (976,28);
+insert into t (id,a) values (976,29);
+insert into t (id,a) values (976,30);
+insert into t (id,a) values (976,31);
+insert into t (id,a) values (976,32);
+insert into t (id,a) values (976,33);
+insert into t (id,a) values (976,34);
+insert into t (id,a) values (976,35);
+insert into t (id,a) values (976,36);
+insert into t (id,a) values (976,37);
+insert into t (id,a) values (976,38);
+insert into t (id,a) values (976,39);
+insert into t (id,a) values (976,40);
+insert into t (id,a) values (976,41);
+insert into t (id,a) values (976,42);
+insert into t (id,a) values (976,43);
+insert into t (id,a) values (976,44);
+insert into t (id,a) values (976,45);
+insert into t (id,a) values (976,46);
+insert into t (id,a) values (976,47);
+insert into t (id,a) values (976,48);
+insert into t (id,a) values (976,49);
+insert into t (id,a) values (976,50);
+insert into t (id,a) values (976,51);
+insert into t (id,a) values (976,52);
+insert into t (id,a) values (976,53);
+insert into t (id,a) values (976,54);
+insert into t (id,a) values (976,55);
+insert into t (id,a) values (976,56);
+insert into t (id,a) values (976,57);
+insert into t (id,a) values (976,58);
+insert into t (id,a) values (976,59);
+insert into t (id,a) values (976,60);
+insert into t (id,a) values (976,61);
+insert into t (id,a) values (976,62);
+insert into t (id,a) values (976,63);
+insert into t (id,a) values (976,64);
+insert into t (id,a) values (976,65);
+insert into t (id,a) values (976,66);
+insert into t (id,a) values (976,67);
+insert into t (id,a) values (976,68);
+insert into t (id,a) values (976,69);
+insert into t (id,a) values (976,70);
+insert into t (id,a) values (976,71);
+insert into t (id,a) values (976,72);
+insert into t (id,a) values (976,73);
+insert into t (id,a) values (976,74);
+insert into t (id,a) values (976,75);
+insert into t (id,a) values (976,76);
+insert into t (id,a) values (976,77);
+insert into t (id,a) values (976,78);
+insert into t (id,a) values (976,79);
+insert into t (id,a) values (976,80);
+insert into t (id,a) values (976,81);
+insert into t (id,a) values (976,82);
+insert into t (id,a) values (976,83);
+insert into t (id,a) values (976,84);
+insert into t (id,a) values (976,85);
+insert into t (id,a) values (976,86);
+insert into t (id,a) values (976,87);
+insert into t (id,a) values (976,88);
+insert into t (id,a) values (976,89);
+insert into t (id,a) values (976,90);
+insert into t (id,a) values (976,91);
+insert into t (id,a) values (976,92);
+insert into t (id,a) values (976,93);
+insert into t (id,a) values (976,94);
+insert into t (id,a) values (976,95);
+insert into t (id,a) values (976,96);
+insert into t (id,a) values (976,97);
+insert into t (id,a) values (976,98);
+insert into t (id,a) values (976,99);
+insert into t (id,a) values (977,0);
+insert into t (id,a) values (977,1);
+insert into t (id,a) values (977,2);
+insert into t (id,a) values (977,3);
+insert into t (id,a) values (977,4);
+insert into t (id,a) values (977,5);
+insert into t (id,a) values (977,6);
+insert into t (id,a) values (977,7);
+insert into t (id,a) values (977,8);
+insert into t (id,a) values (977,9);
+insert into t (id,a) values (977,10);
+insert into t (id,a) values (977,11);
+insert into t (id,a) values (977,12);
+insert into t (id,a) values (977,13);
+insert into t (id,a) values (977,14);
+insert into t (id,a) values (977,15);
+insert into t (id,a) values (977,16);
+insert into t (id,a) values (977,17);
+insert into t (id,a) values (977,18);
+insert into t (id,a) values (977,19);
+insert into t (id,a) values (977,20);
+insert into t (id,a) values (977,21);
+insert into t (id,a) values (977,22);
+insert into t (id,a) values (977,23);
+insert into t (id,a) values (977,24);
+insert into t (id,a) values (977,25);
+insert into t (id,a) values (977,26);
+insert into t (id,a) values (977,27);
+insert into t (id,a) values (977,28);
+insert into t (id,a) values (977,29);
+insert into t (id,a) values (977,30);
+insert into t (id,a) values (977,31);
+insert into t (id,a) values (977,32);
+insert into t (id,a) values (977,33);
+insert into t (id,a) values (977,34);
+insert into t (id,a) values (977,35);
+insert into t (id,a) values (977,36);
+insert into t (id,a) values (977,37);
+insert into t (id,a) values (977,38);
+insert into t (id,a) values (977,39);
+insert into t (id,a) values (977,40);
+insert into t (id,a) values (977,41);
+insert into t (id,a) values (977,42);
+insert into t (id,a) values (977,43);
+insert into t (id,a) values (977,44);
+insert into t (id,a) values (977,45);
+insert into t (id,a) values (977,46);
+insert into t (id,a) values (977,47);
+insert into t (id,a) values (977,48);
+insert into t (id,a) values (977,49);
+insert into t (id,a) values (977,50);
+insert into t (id,a) values (977,51);
+insert into t (id,a) values (977,52);
+insert into t (id,a) values (977,53);
+insert into t (id,a) values (977,54);
+insert into t (id,a) values (977,55);
+insert into t (id,a) values (977,56);
+insert into t (id,a) values (977,57);
+insert into t (id,a) values (977,58);
+insert into t (id,a) values (977,59);
+insert into t (id,a) values (977,60);
+insert into t (id,a) values (977,61);
+insert into t (id,a) values (977,62);
+insert into t (id,a) values (977,63);
+insert into t (id,a) values (977,64);
+insert into t (id,a) values (977,65);
+insert into t (id,a) values (977,66);
+insert into t (id,a) values (977,67);
+insert into t (id,a) values (977,68);
+insert into t (id,a) values (977,69);
+insert into t (id,a) values (977,70);
+insert into t (id,a) values (977,71);
+insert into t (id,a) values (977,72);
+insert into t (id,a) values (977,73);
+insert into t (id,a) values (977,74);
+insert into t (id,a) values (977,75);
+insert into t (id,a) values (977,76);
+insert into t (id,a) values (977,77);
+insert into t (id,a) values (977,78);
+insert into t (id,a) values (977,79);
+insert into t (id,a) values (977,80);
+insert into t (id,a) values (977,81);
+insert into t (id,a) values (977,82);
+insert into t (id,a) values (977,83);
+insert into t (id,a) values (977,84);
+insert into t (id,a) values (977,85);
+insert into t (id,a) values (977,86);
+insert into t (id,a) values (977,87);
+insert into t (id,a) values (977,88);
+insert into t (id,a) values (977,89);
+insert into t (id,a) values (977,90);
+insert into t (id,a) values (977,91);
+insert into t (id,a) values (977,92);
+insert into t (id,a) values (977,93);
+insert into t (id,a) values (977,94);
+insert into t (id,a) values (977,95);
+insert into t (id,a) values (977,96);
+insert into t (id,a) values (977,97);
+insert into t (id,a) values (977,98);
+insert into t (id,a) values (977,99);
+insert into t (id,a) values (978,0);
+insert into t (id,a) values (978,1);
+insert into t (id,a) values (978,2);
+insert into t (id,a) values (978,3);
+insert into t (id,a) values (978,4);
+insert into t (id,a) values (978,5);
+insert into t (id,a) values (978,6);
+insert into t (id,a) values (978,7);
+insert into t (id,a) values (978,8);
+insert into t (id,a) values (978,9);
+insert into t (id,a) values (978,10);
+insert into t (id,a) values (978,11);
+insert into t (id,a) values (978,12);
+insert into t (id,a) values (978,13);
+insert into t (id,a) values (978,14);
+insert into t (id,a) values (978,15);
+insert into t (id,a) values (978,16);
+insert into t (id,a) values (978,17);
+insert into t (id,a) values (978,18);
+insert into t (id,a) values (978,19);
+insert into t (id,a) values (978,20);
+insert into t (id,a) values (978,21);
+insert into t (id,a) values (978,22);
+insert into t (id,a) values (978,23);
+insert into t (id,a) values (978,24);
+insert into t (id,a) values (978,25);
+insert into t (id,a) values (978,26);
+insert into t (id,a) values (978,27);
+insert into t (id,a) values (978,28);
+insert into t (id,a) values (978,29);
+insert into t (id,a) values (978,30);
+insert into t (id,a) values (978,31);
+insert into t (id,a) values (978,32);
+insert into t (id,a) values (978,33);
+insert into t (id,a) values (978,34);
+insert into t (id,a) values (978,35);
+insert into t (id,a) values (978,36);
+insert into t (id,a) values (978,37);
+insert into t (id,a) values (978,38);
+insert into t (id,a) values (978,39);
+insert into t (id,a) values (978,40);
+insert into t (id,a) values (978,41);
+insert into t (id,a) values (978,42);
+insert into t (id,a) values (978,43);
+insert into t (id,a) values (978,44);
+insert into t (id,a) values (978,45);
+insert into t (id,a) values (978,46);
+insert into t (id,a) values (978,47);
+insert into t (id,a) values (978,48);
+insert into t (id,a) values (978,49);
+insert into t (id,a) values (978,50);
+insert into t (id,a) values (978,51);
+insert into t (id,a) values (978,52);
+insert into t (id,a) values (978,53);
+insert into t (id,a) values (978,54);
+insert into t (id,a) values (978,55);
+insert into t (id,a) values (978,56);
+insert into t (id,a) values (978,57);
+insert into t (id,a) values (978,58);
+insert into t (id,a) values (978,59);
+insert into t (id,a) values (978,60);
+insert into t (id,a) values (978,61);
+insert into t (id,a) values (978,62);
+insert into t (id,a) values (978,63);
+insert into t (id,a) values (978,64);
+insert into t (id,a) values (978,65);
+insert into t (id,a) values (978,66);
+insert into t (id,a) values (978,67);
+insert into t (id,a) values (978,68);
+insert into t (id,a) values (978,69);
+insert into t (id,a) values (978,70);
+insert into t (id,a) values (978,71);
+insert into t (id,a) values (978,72);
+insert into t (id,a) values (978,73);
+insert into t (id,a) values (978,74);
+insert into t (id,a) values (978,75);
+insert into t (id,a) values (978,76);
+insert into t (id,a) values (978,77);
+insert into t (id,a) values (978,78);
+insert into t (id,a) values (978,79);
+insert into t (id,a) values (978,80);
+insert into t (id,a) values (978,81);
+insert into t (id,a) values (978,82);
+insert into t (id,a) values (978,83);
+insert into t (id,a) values (978,84);
+insert into t (id,a) values (978,85);
+insert into t (id,a) values (978,86);
+insert into t (id,a) values (978,87);
+insert into t (id,a) values (978,88);
+insert into t (id,a) values (978,89);
+insert into t (id,a) values (978,90);
+insert into t (id,a) values (978,91);
+insert into t (id,a) values (978,92);
+insert into t (id,a) values (978,93);
+insert into t (id,a) values (978,94);
+insert into t (id,a) values (978,95);
+insert into t (id,a) values (978,96);
+insert into t (id,a) values (978,97);
+insert into t (id,a) values (978,98);
+insert into t (id,a) values (978,99);
+insert into t (id,a) values (979,0);
+insert into t (id,a) values (979,1);
+insert into t (id,a) values (979,2);
+insert into t (id,a) values (979,3);
+insert into t (id,a) values (979,4);
+insert into t (id,a) values (979,5);
+insert into t (id,a) values (979,6);
+insert into t (id,a) values (979,7);
+insert into t (id,a) values (979,8);
+insert into t (id,a) values (979,9);
+insert into t (id,a) values (979,10);
+insert into t (id,a) values (979,11);
+insert into t (id,a) values (979,12);
+insert into t (id,a) values (979,13);
+insert into t (id,a) values (979,14);
+insert into t (id,a) values (979,15);
+insert into t (id,a) values (979,16);
+insert into t (id,a) values (979,17);
+insert into t (id,a) values (979,18);
+insert into t (id,a) values (979,19);
+insert into t (id,a) values (979,20);
+insert into t (id,a) values (979,21);
+insert into t (id,a) values (979,22);
+insert into t (id,a) values (979,23);
+insert into t (id,a) values (979,24);
+insert into t (id,a) values (979,25);
+insert into t (id,a) values (979,26);
+insert into t (id,a) values (979,27);
+insert into t (id,a) values (979,28);
+insert into t (id,a) values (979,29);
+insert into t (id,a) values (979,30);
+insert into t (id,a) values (979,31);
+insert into t (id,a) values (979,32);
+insert into t (id,a) values (979,33);
+insert into t (id,a) values (979,34);
+insert into t (id,a) values (979,35);
+insert into t (id,a) values (979,36);
+insert into t (id,a) values (979,37);
+insert into t (id,a) values (979,38);
+insert into t (id,a) values (979,39);
+insert into t (id,a) values (979,40);
+insert into t (id,a) values (979,41);
+insert into t (id,a) values (979,42);
+insert into t (id,a) values (979,43);
+insert into t (id,a) values (979,44);
+insert into t (id,a) values (979,45);
+insert into t (id,a) values (979,46);
+insert into t (id,a) values (979,47);
+insert into t (id,a) values (979,48);
+insert into t (id,a) values (979,49);
+insert into t (id,a) values (979,50);
+insert into t (id,a) values (979,51);
+insert into t (id,a) values (979,52);
+insert into t (id,a) values (979,53);
+insert into t (id,a) values (979,54);
+insert into t (id,a) values (979,55);
+insert into t (id,a) values (979,56);
+insert into t (id,a) values (979,57);
+insert into t (id,a) values (979,58);
+insert into t (id,a) values (979,59);
+insert into t (id,a) values (979,60);
+insert into t (id,a) values (979,61);
+insert into t (id,a) values (979,62);
+insert into t (id,a) values (979,63);
+insert into t (id,a) values (979,64);
+insert into t (id,a) values (979,65);
+insert into t (id,a) values (979,66);
+insert into t (id,a) values (979,67);
+insert into t (id,a) values (979,68);
+insert into t (id,a) values (979,69);
+insert into t (id,a) values (979,70);
+insert into t (id,a) values (979,71);
+insert into t (id,a) values (979,72);
+insert into t (id,a) values (979,73);
+insert into t (id,a) values (979,74);
+insert into t (id,a) values (979,75);
+insert into t (id,a) values (979,76);
+insert into t (id,a) values (979,77);
+insert into t (id,a) values (979,78);
+insert into t (id,a) values (979,79);
+insert into t (id,a) values (979,80);
+insert into t (id,a) values (979,81);
+insert into t (id,a) values (979,82);
+insert into t (id,a) values (979,83);
+insert into t (id,a) values (979,84);
+insert into t (id,a) values (979,85);
+insert into t (id,a) values (979,86);
+insert into t (id,a) values (979,87);
+insert into t (id,a) values (979,88);
+insert into t (id,a) values (979,89);
+insert into t (id,a) values (979,90);
+insert into t (id,a) values (979,91);
+insert into t (id,a) values (979,92);
+insert into t (id,a) values (979,93);
+insert into t (id,a) values (979,94);
+insert into t (id,a) values (979,95);
+insert into t (id,a) values (979,96);
+insert into t (id,a) values (979,97);
+insert into t (id,a) values (979,98);
+insert into t (id,a) values (979,99);
+insert into t (id,a) values (980,0);
+insert into t (id,a) values (980,1);
+insert into t (id,a) values (980,2);
+insert into t (id,a) values (980,3);
+insert into t (id,a) values (980,4);
+insert into t (id,a) values (980,5);
+insert into t (id,a) values (980,6);
+insert into t (id,a) values (980,7);
+insert into t (id,a) values (980,8);
+insert into t (id,a) values (980,9);
+insert into t (id,a) values (980,10);
+insert into t (id,a) values (980,11);
+insert into t (id,a) values (980,12);
+insert into t (id,a) values (980,13);
+insert into t (id,a) values (980,14);
+insert into t (id,a) values (980,15);
+insert into t (id,a) values (980,16);
+insert into t (id,a) values (980,17);
+insert into t (id,a) values (980,18);
+insert into t (id,a) values (980,19);
+insert into t (id,a) values (980,20);
+insert into t (id,a) values (980,21);
+insert into t (id,a) values (980,22);
+insert into t (id,a) values (980,23);
+insert into t (id,a) values (980,24);
+insert into t (id,a) values (980,25);
+insert into t (id,a) values (980,26);
+insert into t (id,a) values (980,27);
+insert into t (id,a) values (980,28);
+insert into t (id,a) values (980,29);
+insert into t (id,a) values (980,30);
+insert into t (id,a) values (980,31);
+insert into t (id,a) values (980,32);
+insert into t (id,a) values (980,33);
+insert into t (id,a) values (980,34);
+insert into t (id,a) values (980,35);
+insert into t (id,a) values (980,36);
+insert into t (id,a) values (980,37);
+insert into t (id,a) values (980,38);
+insert into t (id,a) values (980,39);
+insert into t (id,a) values (980,40);
+insert into t (id,a) values (980,41);
+insert into t (id,a) values (980,42);
+insert into t (id,a) values (980,43);
+insert into t (id,a) values (980,44);
+insert into t (id,a) values (980,45);
+insert into t (id,a) values (980,46);
+insert into t (id,a) values (980,47);
+insert into t (id,a) values (980,48);
+insert into t (id,a) values (980,49);
+insert into t (id,a) values (980,50);
+insert into t (id,a) values (980,51);
+insert into t (id,a) values (980,52);
+insert into t (id,a) values (980,53);
+insert into t (id,a) values (980,54);
+insert into t (id,a) values (980,55);
+insert into t (id,a) values (980,56);
+insert into t (id,a) values (980,57);
+insert into t (id,a) values (980,58);
+insert into t (id,a) values (980,59);
+insert into t (id,a) values (980,60);
+insert into t (id,a) values (980,61);
+insert into t (id,a) values (980,62);
+insert into t (id,a) values (980,63);
+insert into t (id,a) values (980,64);
+insert into t (id,a) values (980,65);
+insert into t (id,a) values (980,66);
+insert into t (id,a) values (980,67);
+insert into t (id,a) values (980,68);
+insert into t (id,a) values (980,69);
+insert into t (id,a) values (980,70);
+insert into t (id,a) values (980,71);
+insert into t (id,a) values (980,72);
+insert into t (id,a) values (980,73);
+insert into t (id,a) values (980,74);
+insert into t (id,a) values (980,75);
+insert into t (id,a) values (980,76);
+insert into t (id,a) values (980,77);
+insert into t (id,a) values (980,78);
+insert into t (id,a) values (980,79);
+insert into t (id,a) values (980,80);
+insert into t (id,a) values (980,81);
+insert into t (id,a) values (980,82);
+insert into t (id,a) values (980,83);
+insert into t (id,a) values (980,84);
+insert into t (id,a) values (980,85);
+insert into t (id,a) values (980,86);
+insert into t (id,a) values (980,87);
+insert into t (id,a) values (980,88);
+insert into t (id,a) values (980,89);
+insert into t (id,a) values (980,90);
+insert into t (id,a) values (980,91);
+insert into t (id,a) values (980,92);
+insert into t (id,a) values (980,93);
+insert into t (id,a) values (980,94);
+insert into t (id,a) values (980,95);
+insert into t (id,a) values (980,96);
+insert into t (id,a) values (980,97);
+insert into t (id,a) values (980,98);
+insert into t (id,a) values (980,99);
+insert into t (id,a) values (981,0);
+insert into t (id,a) values (981,1);
+insert into t (id,a) values (981,2);
+insert into t (id,a) values (981,3);
+insert into t (id,a) values (981,4);
+insert into t (id,a) values (981,5);
+insert into t (id,a) values (981,6);
+insert into t (id,a) values (981,7);
+insert into t (id,a) values (981,8);
+insert into t (id,a) values (981,9);
+insert into t (id,a) values (981,10);
+insert into t (id,a) values (981,11);
+insert into t (id,a) values (981,12);
+insert into t (id,a) values (981,13);
+insert into t (id,a) values (981,14);
+insert into t (id,a) values (981,15);
+insert into t (id,a) values (981,16);
+insert into t (id,a) values (981,17);
+insert into t (id,a) values (981,18);
+insert into t (id,a) values (981,19);
+insert into t (id,a) values (981,20);
+insert into t (id,a) values (981,21);
+insert into t (id,a) values (981,22);
+insert into t (id,a) values (981,23);
+insert into t (id,a) values (981,24);
+insert into t (id,a) values (981,25);
+insert into t (id,a) values (981,26);
+insert into t (id,a) values (981,27);
+insert into t (id,a) values (981,28);
+insert into t (id,a) values (981,29);
+insert into t (id,a) values (981,30);
+insert into t (id,a) values (981,31);
+insert into t (id,a) values (981,32);
+insert into t (id,a) values (981,33);
+insert into t (id,a) values (981,34);
+insert into t (id,a) values (981,35);
+insert into t (id,a) values (981,36);
+insert into t (id,a) values (981,37);
+insert into t (id,a) values (981,38);
+insert into t (id,a) values (981,39);
+insert into t (id,a) values (981,40);
+insert into t (id,a) values (981,41);
+insert into t (id,a) values (981,42);
+insert into t (id,a) values (981,43);
+insert into t (id,a) values (981,44);
+insert into t (id,a) values (981,45);
+insert into t (id,a) values (981,46);
+insert into t (id,a) values (981,47);
+insert into t (id,a) values (981,48);
+insert into t (id,a) values (981,49);
+insert into t (id,a) values (981,50);
+insert into t (id,a) values (981,51);
+insert into t (id,a) values (981,52);
+insert into t (id,a) values (981,53);
+insert into t (id,a) values (981,54);
+insert into t (id,a) values (981,55);
+insert into t (id,a) values (981,56);
+insert into t (id,a) values (981,57);
+insert into t (id,a) values (981,58);
+insert into t (id,a) values (981,59);
+insert into t (id,a) values (981,60);
+insert into t (id,a) values (981,61);
+insert into t (id,a) values (981,62);
+insert into t (id,a) values (981,63);
+insert into t (id,a) values (981,64);
+insert into t (id,a) values (981,65);
+insert into t (id,a) values (981,66);
+insert into t (id,a) values (981,67);
+insert into t (id,a) values (981,68);
+insert into t (id,a) values (981,69);
+insert into t (id,a) values (981,70);
+insert into t (id,a) values (981,71);
+insert into t (id,a) values (981,72);
+insert into t (id,a) values (981,73);
+insert into t (id,a) values (981,74);
+insert into t (id,a) values (981,75);
+insert into t (id,a) values (981,76);
+insert into t (id,a) values (981,77);
+insert into t (id,a) values (981,78);
+insert into t (id,a) values (981,79);
+insert into t (id,a) values (981,80);
+insert into t (id,a) values (981,81);
+insert into t (id,a) values (981,82);
+insert into t (id,a) values (981,83);
+insert into t (id,a) values (981,84);
+insert into t (id,a) values (981,85);
+insert into t (id,a) values (981,86);
+insert into t (id,a) values (981,87);
+insert into t (id,a) values (981,88);
+insert into t (id,a) values (981,89);
+insert into t (id,a) values (981,90);
+insert into t (id,a) values (981,91);
+insert into t (id,a) values (981,92);
+insert into t (id,a) values (981,93);
+insert into t (id,a) values (981,94);
+insert into t (id,a) values (981,95);
+insert into t (id,a) values (981,96);
+insert into t (id,a) values (981,97);
+insert into t (id,a) values (981,98);
+insert into t (id,a) values (981,99);
+insert into t (id,a) values (982,0);
+insert into t (id,a) values (982,1);
+insert into t (id,a) values (982,2);
+insert into t (id,a) values (982,3);
+insert into t (id,a) values (982,4);
+insert into t (id,a) values (982,5);
+insert into t (id,a) values (982,6);
+insert into t (id,a) values (982,7);
+insert into t (id,a) values (982,8);
+insert into t (id,a) values (982,9);
+insert into t (id,a) values (982,10);
+insert into t (id,a) values (982,11);
+insert into t (id,a) values (982,12);
+insert into t (id,a) values (982,13);
+insert into t (id,a) values (982,14);
+insert into t (id,a) values (982,15);
+insert into t (id,a) values (982,16);
+insert into t (id,a) values (982,17);
+insert into t (id,a) values (982,18);
+insert into t (id,a) values (982,19);
+insert into t (id,a) values (982,20);
+insert into t (id,a) values (982,21);
+insert into t (id,a) values (982,22);
+insert into t (id,a) values (982,23);
+insert into t (id,a) values (982,24);
+insert into t (id,a) values (982,25);
+insert into t (id,a) values (982,26);
+insert into t (id,a) values (982,27);
+insert into t (id,a) values (982,28);
+insert into t (id,a) values (982,29);
+insert into t (id,a) values (982,30);
+insert into t (id,a) values (982,31);
+insert into t (id,a) values (982,32);
+insert into t (id,a) values (982,33);
+insert into t (id,a) values (982,34);
+insert into t (id,a) values (982,35);
+insert into t (id,a) values (982,36);
+insert into t (id,a) values (982,37);
+insert into t (id,a) values (982,38);
+insert into t (id,a) values (982,39);
+insert into t (id,a) values (982,40);
+insert into t (id,a) values (982,41);
+insert into t (id,a) values (982,42);
+insert into t (id,a) values (982,43);
+insert into t (id,a) values (982,44);
+insert into t (id,a) values (982,45);
+insert into t (id,a) values (982,46);
+insert into t (id,a) values (982,47);
+insert into t (id,a) values (982,48);
+insert into t (id,a) values (982,49);
+insert into t (id,a) values (982,50);
+insert into t (id,a) values (982,51);
+insert into t (id,a) values (982,52);
+insert into t (id,a) values (982,53);
+insert into t (id,a) values (982,54);
+insert into t (id,a) values (982,55);
+insert into t (id,a) values (982,56);
+insert into t (id,a) values (982,57);
+insert into t (id,a) values (982,58);
+insert into t (id,a) values (982,59);
+insert into t (id,a) values (982,60);
+insert into t (id,a) values (982,61);
+insert into t (id,a) values (982,62);
+insert into t (id,a) values (982,63);
+insert into t (id,a) values (982,64);
+insert into t (id,a) values (982,65);
+insert into t (id,a) values (982,66);
+insert into t (id,a) values (982,67);
+insert into t (id,a) values (982,68);
+insert into t (id,a) values (982,69);
+insert into t (id,a) values (982,70);
+insert into t (id,a) values (982,71);
+insert into t (id,a) values (982,72);
+insert into t (id,a) values (982,73);
+insert into t (id,a) values (982,74);
+insert into t (id,a) values (982,75);
+insert into t (id,a) values (982,76);
+insert into t (id,a) values (982,77);
+insert into t (id,a) values (982,78);
+insert into t (id,a) values (982,79);
+insert into t (id,a) values (982,80);
+insert into t (id,a) values (982,81);
+insert into t (id,a) values (982,82);
+insert into t (id,a) values (982,83);
+insert into t (id,a) values (982,84);
+insert into t (id,a) values (982,85);
+insert into t (id,a) values (982,86);
+insert into t (id,a) values (982,87);
+insert into t (id,a) values (982,88);
+insert into t (id,a) values (982,89);
+insert into t (id,a) values (982,90);
+insert into t (id,a) values (982,91);
+insert into t (id,a) values (982,92);
+insert into t (id,a) values (982,93);
+insert into t (id,a) values (982,94);
+insert into t (id,a) values (982,95);
+insert into t (id,a) values (982,96);
+insert into t (id,a) values (982,97);
+insert into t (id,a) values (982,98);
+insert into t (id,a) values (982,99);
+insert into t (id,a) values (983,0);
+insert into t (id,a) values (983,1);
+insert into t (id,a) values (983,2);
+insert into t (id,a) values (983,3);
+insert into t (id,a) values (983,4);
+insert into t (id,a) values (983,5);
+insert into t (id,a) values (983,6);
+insert into t (id,a) values (983,7);
+insert into t (id,a) values (983,8);
+insert into t (id,a) values (983,9);
+insert into t (id,a) values (983,10);
+insert into t (id,a) values (983,11);
+insert into t (id,a) values (983,12);
+insert into t (id,a) values (983,13);
+insert into t (id,a) values (983,14);
+insert into t (id,a) values (983,15);
+insert into t (id,a) values (983,16);
+insert into t (id,a) values (983,17);
+insert into t (id,a) values (983,18);
+insert into t (id,a) values (983,19);
+insert into t (id,a) values (983,20);
+insert into t (id,a) values (983,21);
+insert into t (id,a) values (983,22);
+insert into t (id,a) values (983,23);
+insert into t (id,a) values (983,24);
+insert into t (id,a) values (983,25);
+insert into t (id,a) values (983,26);
+insert into t (id,a) values (983,27);
+insert into t (id,a) values (983,28);
+insert into t (id,a) values (983,29);
+insert into t (id,a) values (983,30);
+insert into t (id,a) values (983,31);
+insert into t (id,a) values (983,32);
+insert into t (id,a) values (983,33);
+insert into t (id,a) values (983,34);
+insert into t (id,a) values (983,35);
+insert into t (id,a) values (983,36);
+insert into t (id,a) values (983,37);
+insert into t (id,a) values (983,38);
+insert into t (id,a) values (983,39);
+insert into t (id,a) values (983,40);
+insert into t (id,a) values (983,41);
+insert into t (id,a) values (983,42);
+insert into t (id,a) values (983,43);
+insert into t (id,a) values (983,44);
+insert into t (id,a) values (983,45);
+insert into t (id,a) values (983,46);
+insert into t (id,a) values (983,47);
+insert into t (id,a) values (983,48);
+insert into t (id,a) values (983,49);
+insert into t (id,a) values (983,50);
+insert into t (id,a) values (983,51);
+insert into t (id,a) values (983,52);
+insert into t (id,a) values (983,53);
+insert into t (id,a) values (983,54);
+insert into t (id,a) values (983,55);
+insert into t (id,a) values (983,56);
+insert into t (id,a) values (983,57);
+insert into t (id,a) values (983,58);
+insert into t (id,a) values (983,59);
+insert into t (id,a) values (983,60);
+insert into t (id,a) values (983,61);
+insert into t (id,a) values (983,62);
+insert into t (id,a) values (983,63);
+insert into t (id,a) values (983,64);
+insert into t (id,a) values (983,65);
+insert into t (id,a) values (983,66);
+insert into t (id,a) values (983,67);
+insert into t (id,a) values (983,68);
+insert into t (id,a) values (983,69);
+insert into t (id,a) values (983,70);
+insert into t (id,a) values (983,71);
+insert into t (id,a) values (983,72);
+insert into t (id,a) values (983,73);
+insert into t (id,a) values (983,74);
+insert into t (id,a) values (983,75);
+insert into t (id,a) values (983,76);
+insert into t (id,a) values (983,77);
+insert into t (id,a) values (983,78);
+insert into t (id,a) values (983,79);
+insert into t (id,a) values (983,80);
+insert into t (id,a) values (983,81);
+insert into t (id,a) values (983,82);
+insert into t (id,a) values (983,83);
+insert into t (id,a) values (983,84);
+insert into t (id,a) values (983,85);
+insert into t (id,a) values (983,86);
+insert into t (id,a) values (983,87);
+insert into t (id,a) values (983,88);
+insert into t (id,a) values (983,89);
+insert into t (id,a) values (983,90);
+insert into t (id,a) values (983,91);
+insert into t (id,a) values (983,92);
+insert into t (id,a) values (983,93);
+insert into t (id,a) values (983,94);
+insert into t (id,a) values (983,95);
+insert into t (id,a) values (983,96);
+insert into t (id,a) values (983,97);
+insert into t (id,a) values (983,98);
+insert into t (id,a) values (983,99);
+insert into t (id,a) values (984,0);
+insert into t (id,a) values (984,1);
+insert into t (id,a) values (984,2);
+insert into t (id,a) values (984,3);
+insert into t (id,a) values (984,4);
+insert into t (id,a) values (984,5);
+insert into t (id,a) values (984,6);
+insert into t (id,a) values (984,7);
+insert into t (id,a) values (984,8);
+insert into t (id,a) values (984,9);
+insert into t (id,a) values (984,10);
+insert into t (id,a) values (984,11);
+insert into t (id,a) values (984,12);
+insert into t (id,a) values (984,13);
+insert into t (id,a) values (984,14);
+insert into t (id,a) values (984,15);
+insert into t (id,a) values (984,16);
+insert into t (id,a) values (984,17);
+insert into t (id,a) values (984,18);
+insert into t (id,a) values (984,19);
+insert into t (id,a) values (984,20);
+insert into t (id,a) values (984,21);
+insert into t (id,a) values (984,22);
+insert into t (id,a) values (984,23);
+insert into t (id,a) values (984,24);
+insert into t (id,a) values (984,25);
+insert into t (id,a) values (984,26);
+insert into t (id,a) values (984,27);
+insert into t (id,a) values (984,28);
+insert into t (id,a) values (984,29);
+insert into t (id,a) values (984,30);
+insert into t (id,a) values (984,31);
+insert into t (id,a) values (984,32);
+insert into t (id,a) values (984,33);
+insert into t (id,a) values (984,34);
+insert into t (id,a) values (984,35);
+insert into t (id,a) values (984,36);
+insert into t (id,a) values (984,37);
+insert into t (id,a) values (984,38);
+insert into t (id,a) values (984,39);
+insert into t (id,a) values (984,40);
+insert into t (id,a) values (984,41);
+insert into t (id,a) values (984,42);
+insert into t (id,a) values (984,43);
+insert into t (id,a) values (984,44);
+insert into t (id,a) values (984,45);
+insert into t (id,a) values (984,46);
+insert into t (id,a) values (984,47);
+insert into t (id,a) values (984,48);
+insert into t (id,a) values (984,49);
+insert into t (id,a) values (984,50);
+insert into t (id,a) values (984,51);
+insert into t (id,a) values (984,52);
+insert into t (id,a) values (984,53);
+insert into t (id,a) values (984,54);
+insert into t (id,a) values (984,55);
+insert into t (id,a) values (984,56);
+insert into t (id,a) values (984,57);
+insert into t (id,a) values (984,58);
+insert into t (id,a) values (984,59);
+insert into t (id,a) values (984,60);
+insert into t (id,a) values (984,61);
+insert into t (id,a) values (984,62);
+insert into t (id,a) values (984,63);
+insert into t (id,a) values (984,64);
+insert into t (id,a) values (984,65);
+insert into t (id,a) values (984,66);
+insert into t (id,a) values (984,67);
+insert into t (id,a) values (984,68);
+insert into t (id,a) values (984,69);
+insert into t (id,a) values (984,70);
+insert into t (id,a) values (984,71);
+insert into t (id,a) values (984,72);
+insert into t (id,a) values (984,73);
+insert into t (id,a) values (984,74);
+insert into t (id,a) values (984,75);
+insert into t (id,a) values (984,76);
+insert into t (id,a) values (984,77);
+insert into t (id,a) values (984,78);
+insert into t (id,a) values (984,79);
+insert into t (id,a) values (984,80);
+insert into t (id,a) values (984,81);
+insert into t (id,a) values (984,82);
+insert into t (id,a) values (984,83);
+insert into t (id,a) values (984,84);
+insert into t (id,a) values (984,85);
+insert into t (id,a) values (984,86);
+insert into t (id,a) values (984,87);
+insert into t (id,a) values (984,88);
+insert into t (id,a) values (984,89);
+insert into t (id,a) values (984,90);
+insert into t (id,a) values (984,91);
+insert into t (id,a) values (984,92);
+insert into t (id,a) values (984,93);
+insert into t (id,a) values (984,94);
+insert into t (id,a) values (984,95);
+insert into t (id,a) values (984,96);
+insert into t (id,a) values (984,97);
+insert into t (id,a) values (984,98);
+insert into t (id,a) values (984,99);
+insert into t (id,a) values (985,0);
+insert into t (id,a) values (985,1);
+insert into t (id,a) values (985,2);
+insert into t (id,a) values (985,3);
+insert into t (id,a) values (985,4);
+insert into t (id,a) values (985,5);
+insert into t (id,a) values (985,6);
+insert into t (id,a) values (985,7);
+insert into t (id,a) values (985,8);
+insert into t (id,a) values (985,9);
+insert into t (id,a) values (985,10);
+insert into t (id,a) values (985,11);
+insert into t (id,a) values (985,12);
+insert into t (id,a) values (985,13);
+insert into t (id,a) values (985,14);
+insert into t (id,a) values (985,15);
+insert into t (id,a) values (985,16);
+insert into t (id,a) values (985,17);
+insert into t (id,a) values (985,18);
+insert into t (id,a) values (985,19);
+insert into t (id,a) values (985,20);
+insert into t (id,a) values (985,21);
+insert into t (id,a) values (985,22);
+insert into t (id,a) values (985,23);
+insert into t (id,a) values (985,24);
+insert into t (id,a) values (985,25);
+insert into t (id,a) values (985,26);
+insert into t (id,a) values (985,27);
+insert into t (id,a) values (985,28);
+insert into t (id,a) values (985,29);
+insert into t (id,a) values (985,30);
+insert into t (id,a) values (985,31);
+insert into t (id,a) values (985,32);
+insert into t (id,a) values (985,33);
+insert into t (id,a) values (985,34);
+insert into t (id,a) values (985,35);
+insert into t (id,a) values (985,36);
+insert into t (id,a) values (985,37);
+insert into t (id,a) values (985,38);
+insert into t (id,a) values (985,39);
+insert into t (id,a) values (985,40);
+insert into t (id,a) values (985,41);
+insert into t (id,a) values (985,42);
+insert into t (id,a) values (985,43);
+insert into t (id,a) values (985,44);
+insert into t (id,a) values (985,45);
+insert into t (id,a) values (985,46);
+insert into t (id,a) values (985,47);
+insert into t (id,a) values (985,48);
+insert into t (id,a) values (985,49);
+insert into t (id,a) values (985,50);
+insert into t (id,a) values (985,51);
+insert into t (id,a) values (985,52);
+insert into t (id,a) values (985,53);
+insert into t (id,a) values (985,54);
+insert into t (id,a) values (985,55);
+insert into t (id,a) values (985,56);
+insert into t (id,a) values (985,57);
+insert into t (id,a) values (985,58);
+insert into t (id,a) values (985,59);
+insert into t (id,a) values (985,60);
+insert into t (id,a) values (985,61);
+insert into t (id,a) values (985,62);
+insert into t (id,a) values (985,63);
+insert into t (id,a) values (985,64);
+insert into t (id,a) values (985,65);
+insert into t (id,a) values (985,66);
+insert into t (id,a) values (985,67);
+insert into t (id,a) values (985,68);
+insert into t (id,a) values (985,69);
+insert into t (id,a) values (985,70);
+insert into t (id,a) values (985,71);
+insert into t (id,a) values (985,72);
+insert into t (id,a) values (985,73);
+insert into t (id,a) values (985,74);
+insert into t (id,a) values (985,75);
+insert into t (id,a) values (985,76);
+insert into t (id,a) values (985,77);
+insert into t (id,a) values (985,78);
+insert into t (id,a) values (985,79);
+insert into t (id,a) values (985,80);
+insert into t (id,a) values (985,81);
+insert into t (id,a) values (985,82);
+insert into t (id,a) values (985,83);
+insert into t (id,a) values (985,84);
+insert into t (id,a) values (985,85);
+insert into t (id,a) values (985,86);
+insert into t (id,a) values (985,87);
+insert into t (id,a) values (985,88);
+insert into t (id,a) values (985,89);
+insert into t (id,a) values (985,90);
+insert into t (id,a) values (985,91);
+insert into t (id,a) values (985,92);
+insert into t (id,a) values (985,93);
+insert into t (id,a) values (985,94);
+insert into t (id,a) values (985,95);
+insert into t (id,a) values (985,96);
+insert into t (id,a) values (985,97);
+insert into t (id,a) values (985,98);
+insert into t (id,a) values (985,99);
+insert into t (id,a) values (986,0);
+insert into t (id,a) values (986,1);
+insert into t (id,a) values (986,2);
+insert into t (id,a) values (986,3);
+insert into t (id,a) values (986,4);
+insert into t (id,a) values (986,5);
+insert into t (id,a) values (986,6);
+insert into t (id,a) values (986,7);
+insert into t (id,a) values (986,8);
+insert into t (id,a) values (986,9);
+insert into t (id,a) values (986,10);
+insert into t (id,a) values (986,11);
+insert into t (id,a) values (986,12);
+insert into t (id,a) values (986,13);
+insert into t (id,a) values (986,14);
+insert into t (id,a) values (986,15);
+insert into t (id,a) values (986,16);
+insert into t (id,a) values (986,17);
+insert into t (id,a) values (986,18);
+insert into t (id,a) values (986,19);
+insert into t (id,a) values (986,20);
+insert into t (id,a) values (986,21);
+insert into t (id,a) values (986,22);
+insert into t (id,a) values (986,23);
+insert into t (id,a) values (986,24);
+insert into t (id,a) values (986,25);
+insert into t (id,a) values (986,26);
+insert into t (id,a) values (986,27);
+insert into t (id,a) values (986,28);
+insert into t (id,a) values (986,29);
+insert into t (id,a) values (986,30);
+insert into t (id,a) values (986,31);
+insert into t (id,a) values (986,32);
+insert into t (id,a) values (986,33);
+insert into t (id,a) values (986,34);
+insert into t (id,a) values (986,35);
+insert into t (id,a) values (986,36);
+insert into t (id,a) values (986,37);
+insert into t (id,a) values (986,38);
+insert into t (id,a) values (986,39);
+insert into t (id,a) values (986,40);
+insert into t (id,a) values (986,41);
+insert into t (id,a) values (986,42);
+insert into t (id,a) values (986,43);
+insert into t (id,a) values (986,44);
+insert into t (id,a) values (986,45);
+insert into t (id,a) values (986,46);
+insert into t (id,a) values (986,47);
+insert into t (id,a) values (986,48);
+insert into t (id,a) values (986,49);
+insert into t (id,a) values (986,50);
+insert into t (id,a) values (986,51);
+insert into t (id,a) values (986,52);
+insert into t (id,a) values (986,53);
+insert into t (id,a) values (986,54);
+insert into t (id,a) values (986,55);
+insert into t (id,a) values (986,56);
+insert into t (id,a) values (986,57);
+insert into t (id,a) values (986,58);
+insert into t (id,a) values (986,59);
+insert into t (id,a) values (986,60);
+insert into t (id,a) values (986,61);
+insert into t (id,a) values (986,62);
+insert into t (id,a) values (986,63);
+insert into t (id,a) values (986,64);
+insert into t (id,a) values (986,65);
+insert into t (id,a) values (986,66);
+insert into t (id,a) values (986,67);
+insert into t (id,a) values (986,68);
+insert into t (id,a) values (986,69);
+insert into t (id,a) values (986,70);
+insert into t (id,a) values (986,71);
+insert into t (id,a) values (986,72);
+insert into t (id,a) values (986,73);
+insert into t (id,a) values (986,74);
+insert into t (id,a) values (986,75);
+insert into t (id,a) values (986,76);
+insert into t (id,a) values (986,77);
+insert into t (id,a) values (986,78);
+insert into t (id,a) values (986,79);
+insert into t (id,a) values (986,80);
+insert into t (id,a) values (986,81);
+insert into t (id,a) values (986,82);
+insert into t (id,a) values (986,83);
+insert into t (id,a) values (986,84);
+insert into t (id,a) values (986,85);
+insert into t (id,a) values (986,86);
+insert into t (id,a) values (986,87);
+insert into t (id,a) values (986,88);
+insert into t (id,a) values (986,89);
+insert into t (id,a) values (986,90);
+insert into t (id,a) values (986,91);
+insert into t (id,a) values (986,92);
+insert into t (id,a) values (986,93);
+insert into t (id,a) values (986,94);
+insert into t (id,a) values (986,95);
+insert into t (id,a) values (986,96);
+insert into t (id,a) values (986,97);
+insert into t (id,a) values (986,98);
+insert into t (id,a) values (986,99);
+insert into t (id,a) values (987,0);
+insert into t (id,a) values (987,1);
+insert into t (id,a) values (987,2);
+insert into t (id,a) values (987,3);
+insert into t (id,a) values (987,4);
+insert into t (id,a) values (987,5);
+insert into t (id,a) values (987,6);
+insert into t (id,a) values (987,7);
+insert into t (id,a) values (987,8);
+insert into t (id,a) values (987,9);
+insert into t (id,a) values (987,10);
+insert into t (id,a) values (987,11);
+insert into t (id,a) values (987,12);
+insert into t (id,a) values (987,13);
+insert into t (id,a) values (987,14);
+insert into t (id,a) values (987,15);
+insert into t (id,a) values (987,16);
+insert into t (id,a) values (987,17);
+insert into t (id,a) values (987,18);
+insert into t (id,a) values (987,19);
+insert into t (id,a) values (987,20);
+insert into t (id,a) values (987,21);
+insert into t (id,a) values (987,22);
+insert into t (id,a) values (987,23);
+insert into t (id,a) values (987,24);
+insert into t (id,a) values (987,25);
+insert into t (id,a) values (987,26);
+insert into t (id,a) values (987,27);
+insert into t (id,a) values (987,28);
+insert into t (id,a) values (987,29);
+insert into t (id,a) values (987,30);
+insert into t (id,a) values (987,31);
+insert into t (id,a) values (987,32);
+insert into t (id,a) values (987,33);
+insert into t (id,a) values (987,34);
+insert into t (id,a) values (987,35);
+insert into t (id,a) values (987,36);
+insert into t (id,a) values (987,37);
+insert into t (id,a) values (987,38);
+insert into t (id,a) values (987,39);
+insert into t (id,a) values (987,40);
+insert into t (id,a) values (987,41);
+insert into t (id,a) values (987,42);
+insert into t (id,a) values (987,43);
+insert into t (id,a) values (987,44);
+insert into t (id,a) values (987,45);
+insert into t (id,a) values (987,46);
+insert into t (id,a) values (987,47);
+insert into t (id,a) values (987,48);
+insert into t (id,a) values (987,49);
+insert into t (id,a) values (987,50);
+insert into t (id,a) values (987,51);
+insert into t (id,a) values (987,52);
+insert into t (id,a) values (987,53);
+insert into t (id,a) values (987,54);
+insert into t (id,a) values (987,55);
+insert into t (id,a) values (987,56);
+insert into t (id,a) values (987,57);
+insert into t (id,a) values (987,58);
+insert into t (id,a) values (987,59);
+insert into t (id,a) values (987,60);
+insert into t (id,a) values (987,61);
+insert into t (id,a) values (987,62);
+insert into t (id,a) values (987,63);
+insert into t (id,a) values (987,64);
+insert into t (id,a) values (987,65);
+insert into t (id,a) values (987,66);
+insert into t (id,a) values (987,67);
+insert into t (id,a) values (987,68);
+insert into t (id,a) values (987,69);
+insert into t (id,a) values (987,70);
+insert into t (id,a) values (987,71);
+insert into t (id,a) values (987,72);
+insert into t (id,a) values (987,73);
+insert into t (id,a) values (987,74);
+insert into t (id,a) values (987,75);
+insert into t (id,a) values (987,76);
+insert into t (id,a) values (987,77);
+insert into t (id,a) values (987,78);
+insert into t (id,a) values (987,79);
+insert into t (id,a) values (987,80);
+insert into t (id,a) values (987,81);
+insert into t (id,a) values (987,82);
+insert into t (id,a) values (987,83);
+insert into t (id,a) values (987,84);
+insert into t (id,a) values (987,85);
+insert into t (id,a) values (987,86);
+insert into t (id,a) values (987,87);
+insert into t (id,a) values (987,88);
+insert into t (id,a) values (987,89);
+insert into t (id,a) values (987,90);
+insert into t (id,a) values (987,91);
+insert into t (id,a) values (987,92);
+insert into t (id,a) values (987,93);
+insert into t (id,a) values (987,94);
+insert into t (id,a) values (987,95);
+insert into t (id,a) values (987,96);
+insert into t (id,a) values (987,97);
+insert into t (id,a) values (987,98);
+insert into t (id,a) values (987,99);
+insert into t (id,a) values (988,0);
+insert into t (id,a) values (988,1);
+insert into t (id,a) values (988,2);
+insert into t (id,a) values (988,3);
+insert into t (id,a) values (988,4);
+insert into t (id,a) values (988,5);
+insert into t (id,a) values (988,6);
+insert into t (id,a) values (988,7);
+insert into t (id,a) values (988,8);
+insert into t (id,a) values (988,9);
+insert into t (id,a) values (988,10);
+insert into t (id,a) values (988,11);
+insert into t (id,a) values (988,12);
+insert into t (id,a) values (988,13);
+insert into t (id,a) values (988,14);
+insert into t (id,a) values (988,15);
+insert into t (id,a) values (988,16);
+insert into t (id,a) values (988,17);
+insert into t (id,a) values (988,18);
+insert into t (id,a) values (988,19);
+insert into t (id,a) values (988,20);
+insert into t (id,a) values (988,21);
+insert into t (id,a) values (988,22);
+insert into t (id,a) values (988,23);
+insert into t (id,a) values (988,24);
+insert into t (id,a) values (988,25);
+insert into t (id,a) values (988,26);
+insert into t (id,a) values (988,27);
+insert into t (id,a) values (988,28);
+insert into t (id,a) values (988,29);
+insert into t (id,a) values (988,30);
+insert into t (id,a) values (988,31);
+insert into t (id,a) values (988,32);
+insert into t (id,a) values (988,33);
+insert into t (id,a) values (988,34);
+insert into t (id,a) values (988,35);
+insert into t (id,a) values (988,36);
+insert into t (id,a) values (988,37);
+insert into t (id,a) values (988,38);
+insert into t (id,a) values (988,39);
+insert into t (id,a) values (988,40);
+insert into t (id,a) values (988,41);
+insert into t (id,a) values (988,42);
+insert into t (id,a) values (988,43);
+insert into t (id,a) values (988,44);
+insert into t (id,a) values (988,45);
+insert into t (id,a) values (988,46);
+insert into t (id,a) values (988,47);
+insert into t (id,a) values (988,48);
+insert into t (id,a) values (988,49);
+insert into t (id,a) values (988,50);
+insert into t (id,a) values (988,51);
+insert into t (id,a) values (988,52);
+insert into t (id,a) values (988,53);
+insert into t (id,a) values (988,54);
+insert into t (id,a) values (988,55);
+insert into t (id,a) values (988,56);
+insert into t (id,a) values (988,57);
+insert into t (id,a) values (988,58);
+insert into t (id,a) values (988,59);
+insert into t (id,a) values (988,60);
+insert into t (id,a) values (988,61);
+insert into t (id,a) values (988,62);
+insert into t (id,a) values (988,63);
+insert into t (id,a) values (988,64);
+insert into t (id,a) values (988,65);
+insert into t (id,a) values (988,66);
+insert into t (id,a) values (988,67);
+insert into t (id,a) values (988,68);
+insert into t (id,a) values (988,69);
+insert into t (id,a) values (988,70);
+insert into t (id,a) values (988,71);
+insert into t (id,a) values (988,72);
+insert into t (id,a) values (988,73);
+insert into t (id,a) values (988,74);
+insert into t (id,a) values (988,75);
+insert into t (id,a) values (988,76);
+insert into t (id,a) values (988,77);
+insert into t (id,a) values (988,78);
+insert into t (id,a) values (988,79);
+insert into t (id,a) values (988,80);
+insert into t (id,a) values (988,81);
+insert into t (id,a) values (988,82);
+insert into t (id,a) values (988,83);
+insert into t (id,a) values (988,84);
+insert into t (id,a) values (988,85);
+insert into t (id,a) values (988,86);
+insert into t (id,a) values (988,87);
+insert into t (id,a) values (988,88);
+insert into t (id,a) values (988,89);
+insert into t (id,a) values (988,90);
+insert into t (id,a) values (988,91);
+insert into t (id,a) values (988,92);
+insert into t (id,a) values (988,93);
+insert into t (id,a) values (988,94);
+insert into t (id,a) values (988,95);
+insert into t (id,a) values (988,96);
+insert into t (id,a) values (988,97);
+insert into t (id,a) values (988,98);
+insert into t (id,a) values (988,99);
+insert into t (id,a) values (989,0);
+insert into t (id,a) values (989,1);
+insert into t (id,a) values (989,2);
+insert into t (id,a) values (989,3);
+insert into t (id,a) values (989,4);
+insert into t (id,a) values (989,5);
+insert into t (id,a) values (989,6);
+insert into t (id,a) values (989,7);
+insert into t (id,a) values (989,8);
+insert into t (id,a) values (989,9);
+insert into t (id,a) values (989,10);
+insert into t (id,a) values (989,11);
+insert into t (id,a) values (989,12);
+insert into t (id,a) values (989,13);
+insert into t (id,a) values (989,14);
+insert into t (id,a) values (989,15);
+insert into t (id,a) values (989,16);
+insert into t (id,a) values (989,17);
+insert into t (id,a) values (989,18);
+insert into t (id,a) values (989,19);
+insert into t (id,a) values (989,20);
+insert into t (id,a) values (989,21);
+insert into t (id,a) values (989,22);
+insert into t (id,a) values (989,23);
+insert into t (id,a) values (989,24);
+insert into t (id,a) values (989,25);
+insert into t (id,a) values (989,26);
+insert into t (id,a) values (989,27);
+insert into t (id,a) values (989,28);
+insert into t (id,a) values (989,29);
+insert into t (id,a) values (989,30);
+insert into t (id,a) values (989,31);
+insert into t (id,a) values (989,32);
+insert into t (id,a) values (989,33);
+insert into t (id,a) values (989,34);
+insert into t (id,a) values (989,35);
+insert into t (id,a) values (989,36);
+insert into t (id,a) values (989,37);
+insert into t (id,a) values (989,38);
+insert into t (id,a) values (989,39);
+insert into t (id,a) values (989,40);
+insert into t (id,a) values (989,41);
+insert into t (id,a) values (989,42);
+insert into t (id,a) values (989,43);
+insert into t (id,a) values (989,44);
+insert into t (id,a) values (989,45);
+insert into t (id,a) values (989,46);
+insert into t (id,a) values (989,47);
+insert into t (id,a) values (989,48);
+insert into t (id,a) values (989,49);
+insert into t (id,a) values (989,50);
+insert into t (id,a) values (989,51);
+insert into t (id,a) values (989,52);
+insert into t (id,a) values (989,53);
+insert into t (id,a) values (989,54);
+insert into t (id,a) values (989,55);
+insert into t (id,a) values (989,56);
+insert into t (id,a) values (989,57);
+insert into t (id,a) values (989,58);
+insert into t (id,a) values (989,59);
+insert into t (id,a) values (989,60);
+insert into t (id,a) values (989,61);
+insert into t (id,a) values (989,62);
+insert into t (id,a) values (989,63);
+insert into t (id,a) values (989,64);
+insert into t (id,a) values (989,65);
+insert into t (id,a) values (989,66);
+insert into t (id,a) values (989,67);
+insert into t (id,a) values (989,68);
+insert into t (id,a) values (989,69);
+insert into t (id,a) values (989,70);
+insert into t (id,a) values (989,71);
+insert into t (id,a) values (989,72);
+insert into t (id,a) values (989,73);
+insert into t (id,a) values (989,74);
+insert into t (id,a) values (989,75);
+insert into t (id,a) values (989,76);
+insert into t (id,a) values (989,77);
+insert into t (id,a) values (989,78);
+insert into t (id,a) values (989,79);
+insert into t (id,a) values (989,80);
+insert into t (id,a) values (989,81);
+insert into t (id,a) values (989,82);
+insert into t (id,a) values (989,83);
+insert into t (id,a) values (989,84);
+insert into t (id,a) values (989,85);
+insert into t (id,a) values (989,86);
+insert into t (id,a) values (989,87);
+insert into t (id,a) values (989,88);
+insert into t (id,a) values (989,89);
+insert into t (id,a) values (989,90);
+insert into t (id,a) values (989,91);
+insert into t (id,a) values (989,92);
+insert into t (id,a) values (989,93);
+insert into t (id,a) values (989,94);
+insert into t (id,a) values (989,95);
+insert into t (id,a) values (989,96);
+insert into t (id,a) values (989,97);
+insert into t (id,a) values (989,98);
+insert into t (id,a) values (989,99);
+insert into t (id,a) values (990,0);
+insert into t (id,a) values (990,1);
+insert into t (id,a) values (990,2);
+insert into t (id,a) values (990,3);
+insert into t (id,a) values (990,4);
+insert into t (id,a) values (990,5);
+insert into t (id,a) values (990,6);
+insert into t (id,a) values (990,7);
+insert into t (id,a) values (990,8);
+insert into t (id,a) values (990,9);
+insert into t (id,a) values (990,10);
+insert into t (id,a) values (990,11);
+insert into t (id,a) values (990,12);
+insert into t (id,a) values (990,13);
+insert into t (id,a) values (990,14);
+insert into t (id,a) values (990,15);
+insert into t (id,a) values (990,16);
+insert into t (id,a) values (990,17);
+insert into t (id,a) values (990,18);
+insert into t (id,a) values (990,19);
+insert into t (id,a) values (990,20);
+insert into t (id,a) values (990,21);
+insert into t (id,a) values (990,22);
+insert into t (id,a) values (990,23);
+insert into t (id,a) values (990,24);
+insert into t (id,a) values (990,25);
+insert into t (id,a) values (990,26);
+insert into t (id,a) values (990,27);
+insert into t (id,a) values (990,28);
+insert into t (id,a) values (990,29);
+insert into t (id,a) values (990,30);
+insert into t (id,a) values (990,31);
+insert into t (id,a) values (990,32);
+insert into t (id,a) values (990,33);
+insert into t (id,a) values (990,34);
+insert into t (id,a) values (990,35);
+insert into t (id,a) values (990,36);
+insert into t (id,a) values (990,37);
+insert into t (id,a) values (990,38);
+insert into t (id,a) values (990,39);
+insert into t (id,a) values (990,40);
+insert into t (id,a) values (990,41);
+insert into t (id,a) values (990,42);
+insert into t (id,a) values (990,43);
+insert into t (id,a) values (990,44);
+insert into t (id,a) values (990,45);
+insert into t (id,a) values (990,46);
+insert into t (id,a) values (990,47);
+insert into t (id,a) values (990,48);
+insert into t (id,a) values (990,49);
+insert into t (id,a) values (990,50);
+insert into t (id,a) values (990,51);
+insert into t (id,a) values (990,52);
+insert into t (id,a) values (990,53);
+insert into t (id,a) values (990,54);
+insert into t (id,a) values (990,55);
+insert into t (id,a) values (990,56);
+insert into t (id,a) values (990,57);
+insert into t (id,a) values (990,58);
+insert into t (id,a) values (990,59);
+insert into t (id,a) values (990,60);
+insert into t (id,a) values (990,61);
+insert into t (id,a) values (990,62);
+insert into t (id,a) values (990,63);
+insert into t (id,a) values (990,64);
+insert into t (id,a) values (990,65);
+insert into t (id,a) values (990,66);
+insert into t (id,a) values (990,67);
+insert into t (id,a) values (990,68);
+insert into t (id,a) values (990,69);
+insert into t (id,a) values (990,70);
+insert into t (id,a) values (990,71);
+insert into t (id,a) values (990,72);
+insert into t (id,a) values (990,73);
+insert into t (id,a) values (990,74);
+insert into t (id,a) values (990,75);
+insert into t (id,a) values (990,76);
+insert into t (id,a) values (990,77);
+insert into t (id,a) values (990,78);
+insert into t (id,a) values (990,79);
+insert into t (id,a) values (990,80);
+insert into t (id,a) values (990,81);
+insert into t (id,a) values (990,82);
+insert into t (id,a) values (990,83);
+insert into t (id,a) values (990,84);
+insert into t (id,a) values (990,85);
+insert into t (id,a) values (990,86);
+insert into t (id,a) values (990,87);
+insert into t (id,a) values (990,88);
+insert into t (id,a) values (990,89);
+insert into t (id,a) values (990,90);
+insert into t (id,a) values (990,91);
+insert into t (id,a) values (990,92);
+insert into t (id,a) values (990,93);
+insert into t (id,a) values (990,94);
+insert into t (id,a) values (990,95);
+insert into t (id,a) values (990,96);
+insert into t (id,a) values (990,97);
+insert into t (id,a) values (990,98);
+insert into t (id,a) values (990,99);
+insert into t (id,a) values (991,0);
+insert into t (id,a) values (991,1);
+insert into t (id,a) values (991,2);
+insert into t (id,a) values (991,3);
+insert into t (id,a) values (991,4);
+insert into t (id,a) values (991,5);
+insert into t (id,a) values (991,6);
+insert into t (id,a) values (991,7);
+insert into t (id,a) values (991,8);
+insert into t (id,a) values (991,9);
+insert into t (id,a) values (991,10);
+insert into t (id,a) values (991,11);
+insert into t (id,a) values (991,12);
+insert into t (id,a) values (991,13);
+insert into t (id,a) values (991,14);
+insert into t (id,a) values (991,15);
+insert into t (id,a) values (991,16);
+insert into t (id,a) values (991,17);
+insert into t (id,a) values (991,18);
+insert into t (id,a) values (991,19);
+insert into t (id,a) values (991,20);
+insert into t (id,a) values (991,21);
+insert into t (id,a) values (991,22);
+insert into t (id,a) values (991,23);
+insert into t (id,a) values (991,24);
+insert into t (id,a) values (991,25);
+insert into t (id,a) values (991,26);
+insert into t (id,a) values (991,27);
+insert into t (id,a) values (991,28);
+insert into t (id,a) values (991,29);
+insert into t (id,a) values (991,30);
+insert into t (id,a) values (991,31);
+insert into t (id,a) values (991,32);
+insert into t (id,a) values (991,33);
+insert into t (id,a) values (991,34);
+insert into t (id,a) values (991,35);
+insert into t (id,a) values (991,36);
+insert into t (id,a) values (991,37);
+insert into t (id,a) values (991,38);
+insert into t (id,a) values (991,39);
+insert into t (id,a) values (991,40);
+insert into t (id,a) values (991,41);
+insert into t (id,a) values (991,42);
+insert into t (id,a) values (991,43);
+insert into t (id,a) values (991,44);
+insert into t (id,a) values (991,45);
+insert into t (id,a) values (991,46);
+insert into t (id,a) values (991,47);
+insert into t (id,a) values (991,48);
+insert into t (id,a) values (991,49);
+insert into t (id,a) values (991,50);
+insert into t (id,a) values (991,51);
+insert into t (id,a) values (991,52);
+insert into t (id,a) values (991,53);
+insert into t (id,a) values (991,54);
+insert into t (id,a) values (991,55);
+insert into t (id,a) values (991,56);
+insert into t (id,a) values (991,57);
+insert into t (id,a) values (991,58);
+insert into t (id,a) values (991,59);
+insert into t (id,a) values (991,60);
+insert into t (id,a) values (991,61);
+insert into t (id,a) values (991,62);
+insert into t (id,a) values (991,63);
+insert into t (id,a) values (991,64);
+insert into t (id,a) values (991,65);
+insert into t (id,a) values (991,66);
+insert into t (id,a) values (991,67);
+insert into t (id,a) values (991,68);
+insert into t (id,a) values (991,69);
+insert into t (id,a) values (991,70);
+insert into t (id,a) values (991,71);
+insert into t (id,a) values (991,72);
+insert into t (id,a) values (991,73);
+insert into t (id,a) values (991,74);
+insert into t (id,a) values (991,75);
+insert into t (id,a) values (991,76);
+insert into t (id,a) values (991,77);
+insert into t (id,a) values (991,78);
+insert into t (id,a) values (991,79);
+insert into t (id,a) values (991,80);
+insert into t (id,a) values (991,81);
+insert into t (id,a) values (991,82);
+insert into t (id,a) values (991,83);
+insert into t (id,a) values (991,84);
+insert into t (id,a) values (991,85);
+insert into t (id,a) values (991,86);
+insert into t (id,a) values (991,87);
+insert into t (id,a) values (991,88);
+insert into t (id,a) values (991,89);
+insert into t (id,a) values (991,90);
+insert into t (id,a) values (991,91);
+insert into t (id,a) values (991,92);
+insert into t (id,a) values (991,93);
+insert into t (id,a) values (991,94);
+insert into t (id,a) values (991,95);
+insert into t (id,a) values (991,96);
+insert into t (id,a) values (991,97);
+insert into t (id,a) values (991,98);
+insert into t (id,a) values (991,99);
+insert into t (id,a) values (992,0);
+insert into t (id,a) values (992,1);
+insert into t (id,a) values (992,2);
+insert into t (id,a) values (992,3);
+insert into t (id,a) values (992,4);
+insert into t (id,a) values (992,5);
+insert into t (id,a) values (992,6);
+insert into t (id,a) values (992,7);
+insert into t (id,a) values (992,8);
+insert into t (id,a) values (992,9);
+insert into t (id,a) values (992,10);
+insert into t (id,a) values (992,11);
+insert into t (id,a) values (992,12);
+insert into t (id,a) values (992,13);
+insert into t (id,a) values (992,14);
+insert into t (id,a) values (992,15);
+insert into t (id,a) values (992,16);
+insert into t (id,a) values (992,17);
+insert into t (id,a) values (992,18);
+insert into t (id,a) values (992,19);
+insert into t (id,a) values (992,20);
+insert into t (id,a) values (992,21);
+insert into t (id,a) values (992,22);
+insert into t (id,a) values (992,23);
+insert into t (id,a) values (992,24);
+insert into t (id,a) values (992,25);
+insert into t (id,a) values (992,26);
+insert into t (id,a) values (992,27);
+insert into t (id,a) values (992,28);
+insert into t (id,a) values (992,29);
+insert into t (id,a) values (992,30);
+insert into t (id,a) values (992,31);
+insert into t (id,a) values (992,32);
+insert into t (id,a) values (992,33);
+insert into t (id,a) values (992,34);
+insert into t (id,a) values (992,35);
+insert into t (id,a) values (992,36);
+insert into t (id,a) values (992,37);
+insert into t (id,a) values (992,38);
+insert into t (id,a) values (992,39);
+insert into t (id,a) values (992,40);
+insert into t (id,a) values (992,41);
+insert into t (id,a) values (992,42);
+insert into t (id,a) values (992,43);
+insert into t (id,a) values (992,44);
+insert into t (id,a) values (992,45);
+insert into t (id,a) values (992,46);
+insert into t (id,a) values (992,47);
+insert into t (id,a) values (992,48);
+insert into t (id,a) values (992,49);
+insert into t (id,a) values (992,50);
+insert into t (id,a) values (992,51);
+insert into t (id,a) values (992,52);
+insert into t (id,a) values (992,53);
+insert into t (id,a) values (992,54);
+insert into t (id,a) values (992,55);
+insert into t (id,a) values (992,56);
+insert into t (id,a) values (992,57);
+insert into t (id,a) values (992,58);
+insert into t (id,a) values (992,59);
+insert into t (id,a) values (992,60);
+insert into t (id,a) values (992,61);
+insert into t (id,a) values (992,62);
+insert into t (id,a) values (992,63);
+insert into t (id,a) values (992,64);
+insert into t (id,a) values (992,65);
+insert into t (id,a) values (992,66);
+insert into t (id,a) values (992,67);
+insert into t (id,a) values (992,68);
+insert into t (id,a) values (992,69);
+insert into t (id,a) values (992,70);
+insert into t (id,a) values (992,71);
+insert into t (id,a) values (992,72);
+insert into t (id,a) values (992,73);
+insert into t (id,a) values (992,74);
+insert into t (id,a) values (992,75);
+insert into t (id,a) values (992,76);
+insert into t (id,a) values (992,77);
+insert into t (id,a) values (992,78);
+insert into t (id,a) values (992,79);
+insert into t (id,a) values (992,80);
+insert into t (id,a) values (992,81);
+insert into t (id,a) values (992,82);
+insert into t (id,a) values (992,83);
+insert into t (id,a) values (992,84);
+insert into t (id,a) values (992,85);
+insert into t (id,a) values (992,86);
+insert into t (id,a) values (992,87);
+insert into t (id,a) values (992,88);
+insert into t (id,a) values (992,89);
+insert into t (id,a) values (992,90);
+insert into t (id,a) values (992,91);
+insert into t (id,a) values (992,92);
+insert into t (id,a) values (992,93);
+insert into t (id,a) values (992,94);
+insert into t (id,a) values (992,95);
+insert into t (id,a) values (992,96);
+insert into t (id,a) values (992,97);
+insert into t (id,a) values (992,98);
+insert into t (id,a) values (992,99);
+insert into t (id,a) values (993,0);
+insert into t (id,a) values (993,1);
+insert into t (id,a) values (993,2);
+insert into t (id,a) values (993,3);
+insert into t (id,a) values (993,4);
+insert into t (id,a) values (993,5);
+insert into t (id,a) values (993,6);
+insert into t (id,a) values (993,7);
+insert into t (id,a) values (993,8);
+insert into t (id,a) values (993,9);
+insert into t (id,a) values (993,10);
+insert into t (id,a) values (993,11);
+insert into t (id,a) values (993,12);
+insert into t (id,a) values (993,13);
+insert into t (id,a) values (993,14);
+insert into t (id,a) values (993,15);
+insert into t (id,a) values (993,16);
+insert into t (id,a) values (993,17);
+insert into t (id,a) values (993,18);
+insert into t (id,a) values (993,19);
+insert into t (id,a) values (993,20);
+insert into t (id,a) values (993,21);
+insert into t (id,a) values (993,22);
+insert into t (id,a) values (993,23);
+insert into t (id,a) values (993,24);
+insert into t (id,a) values (993,25);
+insert into t (id,a) values (993,26);
+insert into t (id,a) values (993,27);
+insert into t (id,a) values (993,28);
+insert into t (id,a) values (993,29);
+insert into t (id,a) values (993,30);
+insert into t (id,a) values (993,31);
+insert into t (id,a) values (993,32);
+insert into t (id,a) values (993,33);
+insert into t (id,a) values (993,34);
+insert into t (id,a) values (993,35);
+insert into t (id,a) values (993,36);
+insert into t (id,a) values (993,37);
+insert into t (id,a) values (993,38);
+insert into t (id,a) values (993,39);
+insert into t (id,a) values (993,40);
+insert into t (id,a) values (993,41);
+insert into t (id,a) values (993,42);
+insert into t (id,a) values (993,43);
+insert into t (id,a) values (993,44);
+insert into t (id,a) values (993,45);
+insert into t (id,a) values (993,46);
+insert into t (id,a) values (993,47);
+insert into t (id,a) values (993,48);
+insert into t (id,a) values (993,49);
+insert into t (id,a) values (993,50);
+insert into t (id,a) values (993,51);
+insert into t (id,a) values (993,52);
+insert into t (id,a) values (993,53);
+insert into t (id,a) values (993,54);
+insert into t (id,a) values (993,55);
+insert into t (id,a) values (993,56);
+insert into t (id,a) values (993,57);
+insert into t (id,a) values (993,58);
+insert into t (id,a) values (993,59);
+insert into t (id,a) values (993,60);
+insert into t (id,a) values (993,61);
+insert into t (id,a) values (993,62);
+insert into t (id,a) values (993,63);
+insert into t (id,a) values (993,64);
+insert into t (id,a) values (993,65);
+insert into t (id,a) values (993,66);
+insert into t (id,a) values (993,67);
+insert into t (id,a) values (993,68);
+insert into t (id,a) values (993,69);
+insert into t (id,a) values (993,70);
+insert into t (id,a) values (993,71);
+insert into t (id,a) values (993,72);
+insert into t (id,a) values (993,73);
+insert into t (id,a) values (993,74);
+insert into t (id,a) values (993,75);
+insert into t (id,a) values (993,76);
+insert into t (id,a) values (993,77);
+insert into t (id,a) values (993,78);
+insert into t (id,a) values (993,79);
+insert into t (id,a) values (993,80);
+insert into t (id,a) values (993,81);
+insert into t (id,a) values (993,82);
+insert into t (id,a) values (993,83);
+insert into t (id,a) values (993,84);
+insert into t (id,a) values (993,85);
+insert into t (id,a) values (993,86);
+insert into t (id,a) values (993,87);
+insert into t (id,a) values (993,88);
+insert into t (id,a) values (993,89);
+insert into t (id,a) values (993,90);
+insert into t (id,a) values (993,91);
+insert into t (id,a) values (993,92);
+insert into t (id,a) values (993,93);
+insert into t (id,a) values (993,94);
+insert into t (id,a) values (993,95);
+insert into t (id,a) values (993,96);
+insert into t (id,a) values (993,97);
+insert into t (id,a) values (993,98);
+insert into t (id,a) values (993,99);
+insert into t (id,a) values (994,0);
+insert into t (id,a) values (994,1);
+insert into t (id,a) values (994,2);
+insert into t (id,a) values (994,3);
+insert into t (id,a) values (994,4);
+insert into t (id,a) values (994,5);
+insert into t (id,a) values (994,6);
+insert into t (id,a) values (994,7);
+insert into t (id,a) values (994,8);
+insert into t (id,a) values (994,9);
+insert into t (id,a) values (994,10);
+insert into t (id,a) values (994,11);
+insert into t (id,a) values (994,12);
+insert into t (id,a) values (994,13);
+insert into t (id,a) values (994,14);
+insert into t (id,a) values (994,15);
+insert into t (id,a) values (994,16);
+insert into t (id,a) values (994,17);
+insert into t (id,a) values (994,18);
+insert into t (id,a) values (994,19);
+insert into t (id,a) values (994,20);
+insert into t (id,a) values (994,21);
+insert into t (id,a) values (994,22);
+insert into t (id,a) values (994,23);
+insert into t (id,a) values (994,24);
+insert into t (id,a) values (994,25);
+insert into t (id,a) values (994,26);
+insert into t (id,a) values (994,27);
+insert into t (id,a) values (994,28);
+insert into t (id,a) values (994,29);
+insert into t (id,a) values (994,30);
+insert into t (id,a) values (994,31);
+insert into t (id,a) values (994,32);
+insert into t (id,a) values (994,33);
+insert into t (id,a) values (994,34);
+insert into t (id,a) values (994,35);
+insert into t (id,a) values (994,36);
+insert into t (id,a) values (994,37);
+insert into t (id,a) values (994,38);
+insert into t (id,a) values (994,39);
+insert into t (id,a) values (994,40);
+insert into t (id,a) values (994,41);
+insert into t (id,a) values (994,42);
+insert into t (id,a) values (994,43);
+insert into t (id,a) values (994,44);
+insert into t (id,a) values (994,45);
+insert into t (id,a) values (994,46);
+insert into t (id,a) values (994,47);
+insert into t (id,a) values (994,48);
+insert into t (id,a) values (994,49);
+insert into t (id,a) values (994,50);
+insert into t (id,a) values (994,51);
+insert into t (id,a) values (994,52);
+insert into t (id,a) values (994,53);
+insert into t (id,a) values (994,54);
+insert into t (id,a) values (994,55);
+insert into t (id,a) values (994,56);
+insert into t (id,a) values (994,57);
+insert into t (id,a) values (994,58);
+insert into t (id,a) values (994,59);
+insert into t (id,a) values (994,60);
+insert into t (id,a) values (994,61);
+insert into t (id,a) values (994,62);
+insert into t (id,a) values (994,63);
+insert into t (id,a) values (994,64);
+insert into t (id,a) values (994,65);
+insert into t (id,a) values (994,66);
+insert into t (id,a) values (994,67);
+insert into t (id,a) values (994,68);
+insert into t (id,a) values (994,69);
+insert into t (id,a) values (994,70);
+insert into t (id,a) values (994,71);
+insert into t (id,a) values (994,72);
+insert into t (id,a) values (994,73);
+insert into t (id,a) values (994,74);
+insert into t (id,a) values (994,75);
+insert into t (id,a) values (994,76);
+insert into t (id,a) values (994,77);
+insert into t (id,a) values (994,78);
+insert into t (id,a) values (994,79);
+insert into t (id,a) values (994,80);
+insert into t (id,a) values (994,81);
+insert into t (id,a) values (994,82);
+insert into t (id,a) values (994,83);
+insert into t (id,a) values (994,84);
+insert into t (id,a) values (994,85);
+insert into t (id,a) values (994,86);
+insert into t (id,a) values (994,87);
+insert into t (id,a) values (994,88);
+insert into t (id,a) values (994,89);
+insert into t (id,a) values (994,90);
+insert into t (id,a) values (994,91);
+insert into t (id,a) values (994,92);
+insert into t (id,a) values (994,93);
+insert into t (id,a) values (994,94);
+insert into t (id,a) values (994,95);
+insert into t (id,a) values (994,96);
+insert into t (id,a) values (994,97);
+insert into t (id,a) values (994,98);
+insert into t (id,a) values (994,99);
+insert into t (id,a) values (995,0);
+insert into t (id,a) values (995,1);
+insert into t (id,a) values (995,2);
+insert into t (id,a) values (995,3);
+insert into t (id,a) values (995,4);
+insert into t (id,a) values (995,5);
+insert into t (id,a) values (995,6);
+insert into t (id,a) values (995,7);
+insert into t (id,a) values (995,8);
+insert into t (id,a) values (995,9);
+insert into t (id,a) values (995,10);
+insert into t (id,a) values (995,11);
+insert into t (id,a) values (995,12);
+insert into t (id,a) values (995,13);
+insert into t (id,a) values (995,14);
+insert into t (id,a) values (995,15);
+insert into t (id,a) values (995,16);
+insert into t (id,a) values (995,17);
+insert into t (id,a) values (995,18);
+insert into t (id,a) values (995,19);
+insert into t (id,a) values (995,20);
+insert into t (id,a) values (995,21);
+insert into t (id,a) values (995,22);
+insert into t (id,a) values (995,23);
+insert into t (id,a) values (995,24);
+insert into t (id,a) values (995,25);
+insert into t (id,a) values (995,26);
+insert into t (id,a) values (995,27);
+insert into t (id,a) values (995,28);
+insert into t (id,a) values (995,29);
+insert into t (id,a) values (995,30);
+insert into t (id,a) values (995,31);
+insert into t (id,a) values (995,32);
+insert into t (id,a) values (995,33);
+insert into t (id,a) values (995,34);
+insert into t (id,a) values (995,35);
+insert into t (id,a) values (995,36);
+insert into t (id,a) values (995,37);
+insert into t (id,a) values (995,38);
+insert into t (id,a) values (995,39);
+insert into t (id,a) values (995,40);
+insert into t (id,a) values (995,41);
+insert into t (id,a) values (995,42);
+insert into t (id,a) values (995,43);
+insert into t (id,a) values (995,44);
+insert into t (id,a) values (995,45);
+insert into t (id,a) values (995,46);
+insert into t (id,a) values (995,47);
+insert into t (id,a) values (995,48);
+insert into t (id,a) values (995,49);
+insert into t (id,a) values (995,50);
+insert into t (id,a) values (995,51);
+insert into t (id,a) values (995,52);
+insert into t (id,a) values (995,53);
+insert into t (id,a) values (995,54);
+insert into t (id,a) values (995,55);
+insert into t (id,a) values (995,56);
+insert into t (id,a) values (995,57);
+insert into t (id,a) values (995,58);
+insert into t (id,a) values (995,59);
+insert into t (id,a) values (995,60);
+insert into t (id,a) values (995,61);
+insert into t (id,a) values (995,62);
+insert into t (id,a) values (995,63);
+insert into t (id,a) values (995,64);
+insert into t (id,a) values (995,65);
+insert into t (id,a) values (995,66);
+insert into t (id,a) values (995,67);
+insert into t (id,a) values (995,68);
+insert into t (id,a) values (995,69);
+insert into t (id,a) values (995,70);
+insert into t (id,a) values (995,71);
+insert into t (id,a) values (995,72);
+insert into t (id,a) values (995,73);
+insert into t (id,a) values (995,74);
+insert into t (id,a) values (995,75);
+insert into t (id,a) values (995,76);
+insert into t (id,a) values (995,77);
+insert into t (id,a) values (995,78);
+insert into t (id,a) values (995,79);
+insert into t (id,a) values (995,80);
+insert into t (id,a) values (995,81);
+insert into t (id,a) values (995,82);
+insert into t (id,a) values (995,83);
+insert into t (id,a) values (995,84);
+insert into t (id,a) values (995,85);
+insert into t (id,a) values (995,86);
+insert into t (id,a) values (995,87);
+insert into t (id,a) values (995,88);
+insert into t (id,a) values (995,89);
+insert into t (id,a) values (995,90);
+insert into t (id,a) values (995,91);
+insert into t (id,a) values (995,92);
+insert into t (id,a) values (995,93);
+insert into t (id,a) values (995,94);
+insert into t (id,a) values (995,95);
+insert into t (id,a) values (995,96);
+insert into t (id,a) values (995,97);
+insert into t (id,a) values (995,98);
+insert into t (id,a) values (995,99);
+insert into t (id,a) values (996,0);
+insert into t (id,a) values (996,1);
+insert into t (id,a) values (996,2);
+insert into t (id,a) values (996,3);
+insert into t (id,a) values (996,4);
+insert into t (id,a) values (996,5);
+insert into t (id,a) values (996,6);
+insert into t (id,a) values (996,7);
+insert into t (id,a) values (996,8);
+insert into t (id,a) values (996,9);
+insert into t (id,a) values (996,10);
+insert into t (id,a) values (996,11);
+insert into t (id,a) values (996,12);
+insert into t (id,a) values (996,13);
+insert into t (id,a) values (996,14);
+insert into t (id,a) values (996,15);
+insert into t (id,a) values (996,16);
+insert into t (id,a) values (996,17);
+insert into t (id,a) values (996,18);
+insert into t (id,a) values (996,19);
+insert into t (id,a) values (996,20);
+insert into t (id,a) values (996,21);
+insert into t (id,a) values (996,22);
+insert into t (id,a) values (996,23);
+insert into t (id,a) values (996,24);
+insert into t (id,a) values (996,25);
+insert into t (id,a) values (996,26);
+insert into t (id,a) values (996,27);
+insert into t (id,a) values (996,28);
+insert into t (id,a) values (996,29);
+insert into t (id,a) values (996,30);
+insert into t (id,a) values (996,31);
+insert into t (id,a) values (996,32);
+insert into t (id,a) values (996,33);
+insert into t (id,a) values (996,34);
+insert into t (id,a) values (996,35);
+insert into t (id,a) values (996,36);
+insert into t (id,a) values (996,37);
+insert into t (id,a) values (996,38);
+insert into t (id,a) values (996,39);
+insert into t (id,a) values (996,40);
+insert into t (id,a) values (996,41);
+insert into t (id,a) values (996,42);
+insert into t (id,a) values (996,43);
+insert into t (id,a) values (996,44);
+insert into t (id,a) values (996,45);
+insert into t (id,a) values (996,46);
+insert into t (id,a) values (996,47);
+insert into t (id,a) values (996,48);
+insert into t (id,a) values (996,49);
+insert into t (id,a) values (996,50);
+insert into t (id,a) values (996,51);
+insert into t (id,a) values (996,52);
+insert into t (id,a) values (996,53);
+insert into t (id,a) values (996,54);
+insert into t (id,a) values (996,55);
+insert into t (id,a) values (996,56);
+insert into t (id,a) values (996,57);
+insert into t (id,a) values (996,58);
+insert into t (id,a) values (996,59);
+insert into t (id,a) values (996,60);
+insert into t (id,a) values (996,61);
+insert into t (id,a) values (996,62);
+insert into t (id,a) values (996,63);
+insert into t (id,a) values (996,64);
+insert into t (id,a) values (996,65);
+insert into t (id,a) values (996,66);
+insert into t (id,a) values (996,67);
+insert into t (id,a) values (996,68);
+insert into t (id,a) values (996,69);
+insert into t (id,a) values (996,70);
+insert into t (id,a) values (996,71);
+insert into t (id,a) values (996,72);
+insert into t (id,a) values (996,73);
+insert into t (id,a) values (996,74);
+insert into t (id,a) values (996,75);
+insert into t (id,a) values (996,76);
+insert into t (id,a) values (996,77);
+insert into t (id,a) values (996,78);
+insert into t (id,a) values (996,79);
+insert into t (id,a) values (996,80);
+insert into t (id,a) values (996,81);
+insert into t (id,a) values (996,82);
+insert into t (id,a) values (996,83);
+insert into t (id,a) values (996,84);
+insert into t (id,a) values (996,85);
+insert into t (id,a) values (996,86);
+insert into t (id,a) values (996,87);
+insert into t (id,a) values (996,88);
+insert into t (id,a) values (996,89);
+insert into t (id,a) values (996,90);
+insert into t (id,a) values (996,91);
+insert into t (id,a) values (996,92);
+insert into t (id,a) values (996,93);
+insert into t (id,a) values (996,94);
+insert into t (id,a) values (996,95);
+insert into t (id,a) values (996,96);
+insert into t (id,a) values (996,97);
+insert into t (id,a) values (996,98);
+insert into t (id,a) values (996,99);
+insert into t (id,a) values (997,0);
+insert into t (id,a) values (997,1);
+insert into t (id,a) values (997,2);
+insert into t (id,a) values (997,3);
+insert into t (id,a) values (997,4);
+insert into t (id,a) values (997,5);
+insert into t (id,a) values (997,6);
+insert into t (id,a) values (997,7);
+insert into t (id,a) values (997,8);
+insert into t (id,a) values (997,9);
+insert into t (id,a) values (997,10);
+insert into t (id,a) values (997,11);
+insert into t (id,a) values (997,12);
+insert into t (id,a) values (997,13);
+insert into t (id,a) values (997,14);
+insert into t (id,a) values (997,15);
+insert into t (id,a) values (997,16);
+insert into t (id,a) values (997,17);
+insert into t (id,a) values (997,18);
+insert into t (id,a) values (997,19);
+insert into t (id,a) values (997,20);
+insert into t (id,a) values (997,21);
+insert into t (id,a) values (997,22);
+insert into t (id,a) values (997,23);
+insert into t (id,a) values (997,24);
+insert into t (id,a) values (997,25);
+insert into t (id,a) values (997,26);
+insert into t (id,a) values (997,27);
+insert into t (id,a) values (997,28);
+insert into t (id,a) values (997,29);
+insert into t (id,a) values (997,30);
+insert into t (id,a) values (997,31);
+insert into t (id,a) values (997,32);
+insert into t (id,a) values (997,33);
+insert into t (id,a) values (997,34);
+insert into t (id,a) values (997,35);
+insert into t (id,a) values (997,36);
+insert into t (id,a) values (997,37);
+insert into t (id,a) values (997,38);
+insert into t (id,a) values (997,39);
+insert into t (id,a) values (997,40);
+insert into t (id,a) values (997,41);
+insert into t (id,a) values (997,42);
+insert into t (id,a) values (997,43);
+insert into t (id,a) values (997,44);
+insert into t (id,a) values (997,45);
+insert into t (id,a) values (997,46);
+insert into t (id,a) values (997,47);
+insert into t (id,a) values (997,48);
+insert into t (id,a) values (997,49);
+insert into t (id,a) values (997,50);
+insert into t (id,a) values (997,51);
+insert into t (id,a) values (997,52);
+insert into t (id,a) values (997,53);
+insert into t (id,a) values (997,54);
+insert into t (id,a) values (997,55);
+insert into t (id,a) values (997,56);
+insert into t (id,a) values (997,57);
+insert into t (id,a) values (997,58);
+insert into t (id,a) values (997,59);
+insert into t (id,a) values (997,60);
+insert into t (id,a) values (997,61);
+insert into t (id,a) values (997,62);
+insert into t (id,a) values (997,63);
+insert into t (id,a) values (997,64);
+insert into t (id,a) values (997,65);
+insert into t (id,a) values (997,66);
+insert into t (id,a) values (997,67);
+insert into t (id,a) values (997,68);
+insert into t (id,a) values (997,69);
+insert into t (id,a) values (997,70);
+insert into t (id,a) values (997,71);
+insert into t (id,a) values (997,72);
+insert into t (id,a) values (997,73);
+insert into t (id,a) values (997,74);
+insert into t (id,a) values (997,75);
+insert into t (id,a) values (997,76);
+insert into t (id,a) values (997,77);
+insert into t (id,a) values (997,78);
+insert into t (id,a) values (997,79);
+insert into t (id,a) values (997,80);
+insert into t (id,a) values (997,81);
+insert into t (id,a) values (997,82);
+insert into t (id,a) values (997,83);
+insert into t (id,a) values (997,84);
+insert into t (id,a) values (997,85);
+insert into t (id,a) values (997,86);
+insert into t (id,a) values (997,87);
+insert into t (id,a) values (997,88);
+insert into t (id,a) values (997,89);
+insert into t (id,a) values (997,90);
+insert into t (id,a) values (997,91);
+insert into t (id,a) values (997,92);
+insert into t (id,a) values (997,93);
+insert into t (id,a) values (997,94);
+insert into t (id,a) values (997,95);
+insert into t (id,a) values (997,96);
+insert into t (id,a) values (997,97);
+insert into t (id,a) values (997,98);
+insert into t (id,a) values (997,99);
+insert into t (id,a) values (998,0);
+insert into t (id,a) values (998,1);
+insert into t (id,a) values (998,2);
+insert into t (id,a) values (998,3);
+insert into t (id,a) values (998,4);
+insert into t (id,a) values (998,5);
+insert into t (id,a) values (998,6);
+insert into t (id,a) values (998,7);
+insert into t (id,a) values (998,8);
+insert into t (id,a) values (998,9);
+insert into t (id,a) values (998,10);
+insert into t (id,a) values (998,11);
+insert into t (id,a) values (998,12);
+insert into t (id,a) values (998,13);
+insert into t (id,a) values (998,14);
+insert into t (id,a) values (998,15);
+insert into t (id,a) values (998,16);
+insert into t (id,a) values (998,17);
+insert into t (id,a) values (998,18);
+insert into t (id,a) values (998,19);
+insert into t (id,a) values (998,20);
+insert into t (id,a) values (998,21);
+insert into t (id,a) values (998,22);
+insert into t (id,a) values (998,23);
+insert into t (id,a) values (998,24);
+insert into t (id,a) values (998,25);
+insert into t (id,a) values (998,26);
+insert into t (id,a) values (998,27);
+insert into t (id,a) values (998,28);
+insert into t (id,a) values (998,29);
+insert into t (id,a) values (998,30);
+insert into t (id,a) values (998,31);
+insert into t (id,a) values (998,32);
+insert into t (id,a) values (998,33);
+insert into t (id,a) values (998,34);
+insert into t (id,a) values (998,35);
+insert into t (id,a) values (998,36);
+insert into t (id,a) values (998,37);
+insert into t (id,a) values (998,38);
+insert into t (id,a) values (998,39);
+insert into t (id,a) values (998,40);
+insert into t (id,a) values (998,41);
+insert into t (id,a) values (998,42);
+insert into t (id,a) values (998,43);
+insert into t (id,a) values (998,44);
+insert into t (id,a) values (998,45);
+insert into t (id,a) values (998,46);
+insert into t (id,a) values (998,47);
+insert into t (id,a) values (998,48);
+insert into t (id,a) values (998,49);
+insert into t (id,a) values (998,50);
+insert into t (id,a) values (998,51);
+insert into t (id,a) values (998,52);
+insert into t (id,a) values (998,53);
+insert into t (id,a) values (998,54);
+insert into t (id,a) values (998,55);
+insert into t (id,a) values (998,56);
+insert into t (id,a) values (998,57);
+insert into t (id,a) values (998,58);
+insert into t (id,a) values (998,59);
+insert into t (id,a) values (998,60);
+insert into t (id,a) values (998,61);
+insert into t (id,a) values (998,62);
+insert into t (id,a) values (998,63);
+insert into t (id,a) values (998,64);
+insert into t (id,a) values (998,65);
+insert into t (id,a) values (998,66);
+insert into t (id,a) values (998,67);
+insert into t (id,a) values (998,68);
+insert into t (id,a) values (998,69);
+insert into t (id,a) values (998,70);
+insert into t (id,a) values (998,71);
+insert into t (id,a) values (998,72);
+insert into t (id,a) values (998,73);
+insert into t (id,a) values (998,74);
+insert into t (id,a) values (998,75);
+insert into t (id,a) values (998,76);
+insert into t (id,a) values (998,77);
+insert into t (id,a) values (998,78);
+insert into t (id,a) values (998,79);
+insert into t (id,a) values (998,80);
+insert into t (id,a) values (998,81);
+insert into t (id,a) values (998,82);
+insert into t (id,a) values (998,83);
+insert into t (id,a) values (998,84);
+insert into t (id,a) values (998,85);
+insert into t (id,a) values (998,86);
+insert into t (id,a) values (998,87);
+insert into t (id,a) values (998,88);
+insert into t (id,a) values (998,89);
+insert into t (id,a) values (998,90);
+insert into t (id,a) values (998,91);
+insert into t (id,a) values (998,92);
+insert into t (id,a) values (998,93);
+insert into t (id,a) values (998,94);
+insert into t (id,a) values (998,95);
+insert into t (id,a) values (998,96);
+insert into t (id,a) values (998,97);
+insert into t (id,a) values (998,98);
+insert into t (id,a) values (998,99);
+insert into t (id,a) values (999,0);
+insert into t (id,a) values (999,1);
+insert into t (id,a) values (999,2);
+insert into t (id,a) values (999,3);
+insert into t (id,a) values (999,4);
+insert into t (id,a) values (999,5);
+insert into t (id,a) values (999,6);
+insert into t (id,a) values (999,7);
+insert into t (id,a) values (999,8);
+insert into t (id,a) values (999,9);
+insert into t (id,a) values (999,10);
+insert into t (id,a) values (999,11);
+insert into t (id,a) values (999,12);
+insert into t (id,a) values (999,13);
+insert into t (id,a) values (999,14);
+insert into t (id,a) values (999,15);
+insert into t (id,a) values (999,16);
+insert into t (id,a) values (999,17);
+insert into t (id,a) values (999,18);
+insert into t (id,a) values (999,19);
+insert into t (id,a) values (999,20);
+insert into t (id,a) values (999,21);
+insert into t (id,a) values (999,22);
+insert into t (id,a) values (999,23);
+insert into t (id,a) values (999,24);
+insert into t (id,a) values (999,25);
+insert into t (id,a) values (999,26);
+insert into t (id,a) values (999,27);
+insert into t (id,a) values (999,28);
+insert into t (id,a) values (999,29);
+insert into t (id,a) values (999,30);
+insert into t (id,a) values (999,31);
+insert into t (id,a) values (999,32);
+insert into t (id,a) values (999,33);
+insert into t (id,a) values (999,34);
+insert into t (id,a) values (999,35);
+insert into t (id,a) values (999,36);
+insert into t (id,a) values (999,37);
+insert into t (id,a) values (999,38);
+insert into t (id,a) values (999,39);
+insert into t (id,a) values (999,40);
+insert into t (id,a) values (999,41);
+insert into t (id,a) values (999,42);
+insert into t (id,a) values (999,43);
+insert into t (id,a) values (999,44);
+insert into t (id,a) values (999,45);
+insert into t (id,a) values (999,46);
+insert into t (id,a) values (999,47);
+insert into t (id,a) values (999,48);
+insert into t (id,a) values (999,49);
+insert into t (id,a) values (999,50);
+insert into t (id,a) values (999,51);
+insert into t (id,a) values (999,52);
+insert into t (id,a) values (999,53);
+insert into t (id,a) values (999,54);
+insert into t (id,a) values (999,55);
+insert into t (id,a) values (999,56);
+insert into t (id,a) values (999,57);
+insert into t (id,a) values (999,58);
+insert into t (id,a) values (999,59);
+insert into t (id,a) values (999,60);
+insert into t (id,a) values (999,61);
+insert into t (id,a) values (999,62);
+insert into t (id,a) values (999,63);
+insert into t (id,a) values (999,64);
+insert into t (id,a) values (999,65);
+insert into t (id,a) values (999,66);
+insert into t (id,a) values (999,67);
+insert into t (id,a) values (999,68);
+insert into t (id,a) values (999,69);
+insert into t (id,a) values (999,70);
+insert into t (id,a) values (999,71);
+insert into t (id,a) values (999,72);
+insert into t (id,a) values (999,73);
+insert into t (id,a) values (999,74);
+insert into t (id,a) values (999,75);
+insert into t (id,a) values (999,76);
+insert into t (id,a) values (999,77);
+insert into t (id,a) values (999,78);
+insert into t (id,a) values (999,79);
+insert into t (id,a) values (999,80);
+insert into t (id,a) values (999,81);
+insert into t (id,a) values (999,82);
+insert into t (id,a) values (999,83);
+insert into t (id,a) values (999,84);
+insert into t (id,a) values (999,85);
+insert into t (id,a) values (999,86);
+insert into t (id,a) values (999,87);
+insert into t (id,a) values (999,88);
+insert into t (id,a) values (999,89);
+insert into t (id,a) values (999,90);
+insert into t (id,a) values (999,91);
+insert into t (id,a) values (999,92);
+insert into t (id,a) values (999,93);
+insert into t (id,a) values (999,94);
+insert into t (id,a) values (999,95);
+insert into t (id,a) values (999,96);
+insert into t (id,a) values (999,97);
+insert into t (id,a) values (999,98);
+insert into t (id,a) values (999,99);
+delete from t where id=404;
+insert into t values (404,0,0,0) on duplicate key update b=b+1;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db743.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db743.result
new file mode 100644
index 00000000000..2b2fc2892d7
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db743.result
@@ -0,0 +1,13 @@
+drop table if exists t1,t2;
+CREATE TABLE t1(`a` INT) ENGINE=TokuDB;
+CREATE TABLE t2(`a` INT) ENGINE=InnoDB;
+begin;
+insert into t1 values (0);
+insert into t2 values (0);
+commit;
+begin;
+insert into t1 values (1);
+insert into t2 values (1);
+commit;
+include/diff_tables.inc [test.t1, test.t2]
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash.result
new file mode 100644
index 00000000000..c1ca24b0551
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash.result
@@ -0,0 +1,21 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 2 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+insert into t values (1,1),(3,1),(5,1);
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 6 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+analyze table t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 6 NULL NULL BTREE
+t 1 x 1 x A 2 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1.result
new file mode 100644
index 00000000000..c82c922a87a
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1.result
@@ -0,0 +1,20 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 2 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+insert into t values (1,1),(3,1),(5,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 4 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+analyze table t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 4 NULL NULL BTREE
+t 1 x 1 x A 1 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1_pick.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1_pick.result
new file mode 100644
index 00000000000..576d1adee6c
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_1_pick.result
@@ -0,0 +1,21 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 2 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+insert into t values (1,1),(3,2),(5,3);
+insert into t values (2,1),(4,1),(6,1),(8,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 7 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+analyze table t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 7 NULL NULL BTREE
+t 1 x 1 x A 1 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2.result
new file mode 100644
index 00000000000..8937ddabbe3
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2.result
@@ -0,0 +1,20 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 2 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 4 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+analyze table t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 4 NULL NULL BTREE
+t 1 x 1 x A 1 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2_pick.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2_pick.result
new file mode 100644
index 00000000000..89b51a5a6b0
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db756_card_part_hash_2_pick.result
@@ -0,0 +1,21 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 2 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+insert into t values (1,1),(3,2),(5,3),(7,4);
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 7 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+analyze table t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 7 NULL NULL BTREE
+t 1 x 1 x A 7 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db757_part_alter_analyze.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db757_part_alter_analyze.result
new file mode 100644
index 00000000000..d80e3e4eac8
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db757_part_alter_analyze.result
@@ -0,0 +1,50 @@
+set default_storage_engine='tokudb';
+drop table if exists t;
+create table t (id int, x int, y int, primary key (id), key (x), key (y))
+partition by range(id)
+( partition p0 values less than (10), partition p1 values less than maxvalue);
+insert into t values (1,1,1),(2,1,2),(3,1,3),(4,1,4);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 5 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+t 1 y 1 y A NULL NULL NULL YES BTREE
+alter table t analyze partition p0;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 5 NULL NULL BTREE
+t 1 x 1 x A 1 NULL NULL YES BTREE
+t 1 y 1 y A 5 NULL NULL YES BTREE
+alter table t analyze partition p1;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 5 NULL NULL BTREE
+t 1 x 1 x A 1 NULL NULL YES BTREE
+t 1 y 1 y A 5 NULL NULL YES BTREE
+insert into t values (100,1,1),(200,2,1),(300,3,1),(400,4,1),(500,5,1);
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 9 NULL NULL BTREE
+t 1 x 1 x A 2 NULL NULL YES BTREE
+t 1 y 1 y A 9 NULL NULL YES BTREE
+alter table t analyze partition p0;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 9 NULL NULL BTREE
+t 1 x 1 x A NULL NULL NULL YES BTREE
+t 1 y 1 y A NULL NULL NULL YES BTREE
+alter table t analyze partition p1;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+show indexes from t;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
+t 0 PRIMARY 1 id A 9 NULL NULL BTREE
+t 1 x 1 x A 9 NULL NULL YES BTREE
+t 1 y 1 y A 1 NULL NULL YES BTREE
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/tokudb718.result b/storage/tokudb/mysql-test/tokudb_bugs/r/tokudb718.result
index 022a4d56d75..e63f73caf20 100644
--- a/storage/tokudb/mysql-test/tokudb_bugs/r/tokudb718.result
+++ b/storage/tokudb/mysql-test/tokudb_bugs/r/tokudb718.result
@@ -4,6 +4,6 @@ create table t (id int primary key);
begin;
insert into t values (1),(2);
select * from information_schema.tokudb_fractal_tree_info;
-ERROR HY000: Unknown error -30994
+ERROR HY000: Got error -30994 "Internal error < 0 (Not system error)" from storage engine TokuDB
commit;
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/5585.test b/storage/tokudb/mysql-test/tokudb_bugs/t/5585.test
index f194a0d9125..1e385e32b31 100644
--- a/storage/tokudb/mysql-test/tokudb_bugs/t/5585.test
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/5585.test
@@ -1,5 +1,6 @@
--source include/have_innodb.inc
--source include/have_tokudb.inc
+--source include/big_test.inc
--disable_warnings
drop table if exists t1, t2;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db397_delete_trigger.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_delete_trigger.test
new file mode 100644
index 00000000000..00751ed2346
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_delete_trigger.test
@@ -0,0 +1,50 @@
+# check for any locking weirdness on DELETE triggers
+source include/have_tokudb.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t1;
+drop table if exists t1_audit;
+enable_warnings;
+
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+
+create table t1_audit (
+col1 int not null,
+action varchar(10) not null,
+ts timestamp not null default now());
+
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+set local tokudb_prelock_empty=0;
+
+create trigger t1_trigger before delete on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'BEFORE DELETE');
+insert into t1 (col1,col2) values (1,1);
+start transaction;
+delete from t1 where col1 = 1;
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# note the locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+create trigger t1_trigger after delete on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'AFTER DELETE');
+insert into t1 (col1,col2) values (2,2);
+start transaction;
+delete from t1 where col1 = 2;
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# note the locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+drop table t1;
+drop table t1_audit; \ No newline at end of file
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db397_insert_trigger.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_insert_trigger.test
new file mode 100644
index 00000000000..f32496e524d
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_insert_trigger.test
@@ -0,0 +1,48 @@
+# check for any locking weirdness on INSERT triggers
+source include/have_tokudb.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t1;
+drop table if exists t1_audit;
+enable_warnings;
+
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+
+create table t1_audit (
+col1 int not null,
+action varchar(32) not null,
+ts timestamp not null default now());
+
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+set local tokudb_prelock_empty=0;
+
+create trigger t1_trigger before insert on t1
+for each row
+insert into t1_audit (col1, action) values (new.col1, 'BEFORE INSERT');
+start transaction;
+insert into t1 (col1, col2) values (1,1);
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# note the locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+create trigger t1_trigger after insert on t1
+for each row
+insert into t1_audit (col1, action) values (new.col1, 'AFTER INSERT');
+start transaction;
+insert into t1 (col1, col2) values (2,2);
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# note the locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+drop table t1;
+drop table t1_audit; \ No newline at end of file
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db397_update_trigger.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_update_trigger.test
new file mode 100644
index 00000000000..f1407e6488a
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db397_update_trigger.test
@@ -0,0 +1,52 @@
+# check for any locking weirdness on UPDATE triggers
+source include/have_tokudb.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t1, t1_audit;
+enable_warnings;
+
+create table t1 (
+col1 int not null,
+col2 int not null,
+primary key (col1));
+
+create table t1_audit (
+col1 int not null,
+action varchar(32) not null,
+ts timestamp not null default now());
+
+insert into t1 (col1,col2) values (0,0);
+insert into t1_audit (col1,action) values (0,'DUMMY');
+
+set local tokudb_prelock_empty=0;
+
+# test before update trigger
+create trigger t1_trigger before update on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'BEFORE UPDATE');
+insert into t1 (col1,col2) values (1,1);
+start transaction;
+update t1 set col2=1000 where col1 = 1;
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# check locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+# test after update trigger
+create trigger t1_trigger after update on t1
+for each row
+insert into t1_audit (col1, action) values (old.col1, 'AFTER UPDATE');
+insert into t1 (col1,col2) values (2,2);
+start transaction;
+update t1 set col2=1001 where col1 = 2;
+select col1,col2 from t1;
+select col1,action from t1_audit;
+select locks_dname,locks_key_left,locks_key_right from information_schema.tokudb_locks;
+# check locks on t1 and t1_audit
+commit;
+drop trigger t1_trigger;
+
+# cleanup
+drop table t1, t1_audit;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db739_insert.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_insert.test
new file mode 100644
index 00000000000..ad7c8d614a3
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_insert.test
@@ -0,0 +1,28 @@
+source include/have_tokudb.inc;
+set default_storage_engine=tokudb;
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (
+ id bigint not null,
+ a bigint not null default 0,
+ b bigint not null default 0,
+ c bigint not null default 0,
+ primary key(id, a)
+);
+
+set tokudb_commit_sync=0;
+let $id=0;
+while ($id < 1000) {
+ let $a=0;
+ while ($a < 100) {
+ eval insert into t (id,a) values ($id,$a);
+ inc $a;
+ }
+ inc $id;
+}
+
+delete from t where id=404;
+insert into t values (404,0,0,0);
+
+drop table t; \ No newline at end of file
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db739_replace.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_replace.test
new file mode 100644
index 00000000000..4872527e425
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_replace.test
@@ -0,0 +1,29 @@
+source include/have_tokudb.inc;
+set default_storage_engine=tokudb;
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (
+ id bigint not null,
+ a bigint not null default 0,
+ b bigint not null default 0,
+ c bigint not null default 0,
+ primary key(id, a)
+);
+
+set tokudb_commit_sync=0;
+let $id=0;
+while ($id < 1000) {
+ let $a=0;
+ while ($a < 100) {
+ eval insert into t (id,a) values ($id,$a);
+ inc $a;
+ }
+ inc $id;
+}
+
+delete from t where id=404;
+set tokudb_pk_insert_mode=2;
+replace into t values (404,0,0,0);
+
+drop table t; \ No newline at end of file
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db739_upsert.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_upsert.test
new file mode 100644
index 00000000000..7fcd1731a0b
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db739_upsert.test
@@ -0,0 +1,28 @@
+source include/have_tokudb.inc;
+set default_storage_engine=tokudb;
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (
+ id bigint not null,
+ a bigint not null default 0,
+ b bigint not null default 0,
+ c bigint not null default 0,
+ primary key(id, a)
+);
+
+set tokudb_commit_sync=0;
+let $id=0;
+while ($id < 1000) {
+ let $a=0;
+ while ($a < 100) {
+ eval insert into t (id,a) values ($id,$a);
+ inc $a;
+ }
+ inc $id;
+}
+
+delete from t where id=404;
+insert into t values (404,0,0,0) on duplicate key update b=b+1;
+
+drop table t; \ No newline at end of file
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db743.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db743.test
new file mode 100644
index 00000000000..5e2bc3e157c
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db743.test
@@ -0,0 +1,23 @@
+source include/have_tokudb.inc;
+source include/have_innodb.inc;
+
+disable_warnings;
+drop table if exists t1,t2;
+enable_warnings;
+
+CREATE TABLE t1(`a` INT) ENGINE=TokuDB;
+CREATE TABLE t2(`a` INT) ENGINE=InnoDB;
+
+let $n=0;
+while ($n < 2) {
+ begin;
+ eval insert into t1 values ($n);
+ eval insert into t2 values ($n);
+ commit;
+ inc $n;
+}
+
+let $diff_tables= test.t1, test.t2;
+source include/diff_tables.inc;
+
+drop table t1,t2;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash.test
new file mode 100644
index 00000000000..97dda1cb1b8
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash.test
@@ -0,0 +1,15 @@
+# DB-756 verify that cardinality is picked from SOME partition
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+insert into t values (1,1),(3,1),(5,1);
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+analyze table t;
+show indexes from t;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1.test
new file mode 100644
index 00000000000..3ef66a4b1e6
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1.test
@@ -0,0 +1,14 @@
+# DB-756 verify that cardinality is picked from the partition where the rows are mapped. in this case, the last partition.
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+insert into t values (1,1),(3,1),(5,1);
+show indexes from t;
+analyze table t;
+show indexes from t;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1_pick.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1_pick.test
new file mode 100644
index 00000000000..b8044641109
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_1_pick.test
@@ -0,0 +1,15 @@
+# DB-756 verify that cardinality is chosen from the first partition
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+insert into t values (1,1),(3,2),(5,3);
+insert into t values (2,1),(4,1),(6,1),(8,1);
+show indexes from t;
+analyze table t;
+show indexes from t;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2.test
new file mode 100644
index 00000000000..ca10218cb05
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2.test
@@ -0,0 +1,14 @@
+# DB-756 verify that cardinality is picked from the partition where the rows are mapped. in this case, the first partition.
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+analyze table t;
+show indexes from t;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2_pick.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2_pick.test
new file mode 100644
index 00000000000..2cc55ec864d
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db756_card_part_hash_2_pick.test
@@ -0,0 +1,15 @@
+# DB-756 verify that cardinality is chosen from the last partition
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+create table t (id int, x int, primary key (id), key (x)) partition by hash(id) partitions 2;
+show indexes from t;
+insert into t values (1,1),(3,2),(5,3),(7,4);
+insert into t values (2,1),(4,1),(6,1);
+show indexes from t;
+analyze table t;
+show indexes from t;
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db757_part_alter_analyze.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db757_part_alter_analyze.test
new file mode 100644
index 00000000000..fc1599591be
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db757_part_alter_analyze.test
@@ -0,0 +1,26 @@
+source include/have_tokudb.inc;
+source include/have_partition.inc;
+set default_storage_engine='tokudb';
+disable_warnings;
+drop table if exists t;
+enable_warnings;
+
+create table t (id int, x int, y int, primary key (id), key (x), key (y))
+partition by range(id)
+( partition p0 values less than (10), partition p1 values less than maxvalue);
+
+insert into t values (1,1,1),(2,1,2),(3,1,3),(4,1,4);
+show indexes from t;
+alter table t analyze partition p0;
+show indexes from t;
+alter table t analyze partition p1;
+show indexes from t;
+
+insert into t values (100,1,1),(200,2,1),(300,3,1),(400,4,1),(500,5,1);
+show indexes from t;
+alter table t analyze partition p0;
+show indexes from t;
+alter table t analyze partition p1;
+show indexes from t;
+
+drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/tokudb718.test b/storage/tokudb/mysql-test/tokudb_bugs/t/tokudb718.test
index 877087776b2..415bb7a2332 100644
--- a/storage/tokudb/mysql-test/tokudb_bugs/t/tokudb718.test
+++ b/storage/tokudb/mysql-test/tokudb_bugs/t/tokudb718.test
@@ -7,7 +7,7 @@ enable_warnings;
create table t (id int primary key);
begin;
insert into t values (1),(2);
---error 34542
+--error 1030
select * from information_schema.tokudb_fractal_tree_info;
commit;
drop table t;
diff --git a/storage/tokudb/mysql-test/tokudb_mariadb/r/229cols.result b/storage/tokudb/mysql-test/tokudb_mariadb/r/229cols.result
index 7875f3ff7a7..540839485cb 100644
--- a/storage/tokudb/mysql-test/tokudb_mariadb/r/229cols.result
+++ b/storage/tokudb/mysql-test/tokudb_mariadb/r/229cols.result
@@ -227,7 +227,7 @@ col225 varchar(40),
col226 varchar(40),
col227 varchar(40),
col228 varchar(40),
-col229 varchar(40)
+col229 varchar(40)
) engine=TokuDB;
show create table t1;
Table Create Table
@@ -462,4 +462,706 @@ t1 CREATE TABLE `t1` (
`col228` varchar(40) DEFAULT NULL,
`col229` varchar(40) DEFAULT NULL
) ENGINE=TokuDB DEFAULT CHARSET=latin1 `compression`='tokudb_zlib'
+alter table t1 add i230 integer;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `col1` varchar(40) DEFAULT NULL,
+ `col2` varchar(40) DEFAULT NULL,
+ `col3` varchar(40) DEFAULT NULL,
+ `col4` varchar(40) DEFAULT NULL,
+ `col5` varchar(40) DEFAULT NULL,
+ `col6` varchar(40) DEFAULT NULL,
+ `col7` varchar(40) DEFAULT NULL,
+ `col8` varchar(40) DEFAULT NULL,
+ `col9` varchar(40) DEFAULT NULL,
+ `col10` varchar(40) DEFAULT NULL,
+ `col11` varchar(40) DEFAULT NULL,
+ `col12` varchar(40) DEFAULT NULL,
+ `col13` varchar(40) DEFAULT NULL,
+ `col14` varchar(40) DEFAULT NULL,
+ `col15` varchar(40) DEFAULT NULL,
+ `col16` varchar(40) DEFAULT NULL,
+ `col17` varchar(40) DEFAULT NULL,
+ `col18` varchar(40) DEFAULT NULL,
+ `col19` varchar(40) DEFAULT NULL,
+ `col20` varchar(40) DEFAULT NULL,
+ `col21` varchar(40) DEFAULT NULL,
+ `col22` varchar(40) DEFAULT NULL,
+ `col23` varchar(40) DEFAULT NULL,
+ `col24` varchar(40) DEFAULT NULL,
+ `col25` varchar(40) DEFAULT NULL,
+ `col26` varchar(40) DEFAULT NULL,
+ `col27` varchar(40) DEFAULT NULL,
+ `col28` varchar(40) DEFAULT NULL,
+ `col29` varchar(40) DEFAULT NULL,
+ `col30` varchar(40) DEFAULT NULL,
+ `col31` varchar(40) DEFAULT NULL,
+ `col32` varchar(40) DEFAULT NULL,
+ `col33` varchar(40) DEFAULT NULL,
+ `col34` varchar(40) DEFAULT NULL,
+ `col35` varchar(40) DEFAULT NULL,
+ `col36` varchar(40) DEFAULT NULL,
+ `col37` varchar(40) DEFAULT NULL,
+ `col38` varchar(40) DEFAULT NULL,
+ `col39` varchar(40) DEFAULT NULL,
+ `col40` varchar(40) DEFAULT NULL,
+ `col41` varchar(40) DEFAULT NULL,
+ `col42` varchar(40) DEFAULT NULL,
+ `col43` varchar(40) DEFAULT NULL,
+ `col44` varchar(40) DEFAULT NULL,
+ `col45` varchar(40) DEFAULT NULL,
+ `col46` varchar(40) DEFAULT NULL,
+ `col47` varchar(40) DEFAULT NULL,
+ `col48` varchar(40) DEFAULT NULL,
+ `col49` varchar(40) DEFAULT NULL,
+ `col50` varchar(40) DEFAULT NULL,
+ `col51` varchar(40) DEFAULT NULL,
+ `col52` varchar(40) DEFAULT NULL,
+ `col53` varchar(40) DEFAULT NULL,
+ `col54` varchar(40) DEFAULT NULL,
+ `col55` varchar(40) DEFAULT NULL,
+ `col56` varchar(40) DEFAULT NULL,
+ `col57` varchar(40) DEFAULT NULL,
+ `col58` varchar(40) DEFAULT NULL,
+ `col59` varchar(40) DEFAULT NULL,
+ `col60` varchar(40) DEFAULT NULL,
+ `col61` varchar(40) DEFAULT NULL,
+ `col62` varchar(40) DEFAULT NULL,
+ `col63` varchar(40) DEFAULT NULL,
+ `col64` varchar(40) DEFAULT NULL,
+ `col65` varchar(40) DEFAULT NULL,
+ `col66` varchar(40) DEFAULT NULL,
+ `col67` varchar(40) DEFAULT NULL,
+ `col68` varchar(40) DEFAULT NULL,
+ `col69` varchar(40) DEFAULT NULL,
+ `col70` varchar(40) DEFAULT NULL,
+ `col71` varchar(40) DEFAULT NULL,
+ `col72` varchar(40) DEFAULT NULL,
+ `col73` varchar(40) DEFAULT NULL,
+ `col74` varchar(40) DEFAULT NULL,
+ `col75` varchar(40) DEFAULT NULL,
+ `col76` varchar(40) DEFAULT NULL,
+ `col77` varchar(40) DEFAULT NULL,
+ `col78` varchar(40) DEFAULT NULL,
+ `col79` varchar(40) DEFAULT NULL,
+ `col80` varchar(40) DEFAULT NULL,
+ `col81` varchar(40) DEFAULT NULL,
+ `col82` varchar(40) DEFAULT NULL,
+ `col83` varchar(40) DEFAULT NULL,
+ `col84` varchar(40) DEFAULT NULL,
+ `col85` varchar(40) DEFAULT NULL,
+ `col86` varchar(40) DEFAULT NULL,
+ `col87` varchar(40) DEFAULT NULL,
+ `col88` varchar(40) DEFAULT NULL,
+ `col89` varchar(40) DEFAULT NULL,
+ `col90` varchar(40) DEFAULT NULL,
+ `col91` varchar(40) DEFAULT NULL,
+ `col92` varchar(40) DEFAULT NULL,
+ `col93` varchar(40) DEFAULT NULL,
+ `col94` varchar(40) DEFAULT NULL,
+ `col95` varchar(40) DEFAULT NULL,
+ `col96` varchar(40) DEFAULT NULL,
+ `col97` varchar(40) DEFAULT NULL,
+ `col98` varchar(40) DEFAULT NULL,
+ `col99` varchar(40) DEFAULT NULL,
+ `col100` varchar(40) DEFAULT NULL,
+ `col101` varchar(40) DEFAULT NULL,
+ `col102` varchar(40) DEFAULT NULL,
+ `col103` varchar(40) DEFAULT NULL,
+ `col104` varchar(40) DEFAULT NULL,
+ `col105` varchar(40) DEFAULT NULL,
+ `col106` varchar(40) DEFAULT NULL,
+ `col107` varchar(40) DEFAULT NULL,
+ `col108` varchar(40) DEFAULT NULL,
+ `col109` varchar(40) DEFAULT NULL,
+ `col110` varchar(40) DEFAULT NULL,
+ `col111` varchar(40) DEFAULT NULL,
+ `col112` varchar(40) DEFAULT NULL,
+ `col113` varchar(40) DEFAULT NULL,
+ `col114` varchar(40) DEFAULT NULL,
+ `col115` varchar(40) DEFAULT NULL,
+ `col116` varchar(40) DEFAULT NULL,
+ `col117` varchar(40) DEFAULT NULL,
+ `col118` varchar(40) DEFAULT NULL,
+ `col119` varchar(40) DEFAULT NULL,
+ `col120` varchar(40) DEFAULT NULL,
+ `col121` varchar(40) DEFAULT NULL,
+ `col122` varchar(40) DEFAULT NULL,
+ `col123` varchar(40) DEFAULT NULL,
+ `col124` varchar(40) DEFAULT NULL,
+ `col125` varchar(40) DEFAULT NULL,
+ `col126` varchar(40) DEFAULT NULL,
+ `col127` varchar(40) DEFAULT NULL,
+ `col128` varchar(40) DEFAULT NULL,
+ `col129` varchar(40) DEFAULT NULL,
+ `col130` varchar(40) DEFAULT NULL,
+ `col131` varchar(40) DEFAULT NULL,
+ `col132` varchar(40) DEFAULT NULL,
+ `col133` varchar(40) DEFAULT NULL,
+ `col134` varchar(40) DEFAULT NULL,
+ `col135` varchar(40) DEFAULT NULL,
+ `col136` varchar(40) DEFAULT NULL,
+ `col137` varchar(40) DEFAULT NULL,
+ `col138` varchar(40) DEFAULT NULL,
+ `col139` varchar(40) DEFAULT NULL,
+ `col140` varchar(40) DEFAULT NULL,
+ `col141` varchar(40) DEFAULT NULL,
+ `col142` varchar(40) DEFAULT NULL,
+ `col143` varchar(40) DEFAULT NULL,
+ `col144` varchar(40) DEFAULT NULL,
+ `col145` varchar(40) DEFAULT NULL,
+ `col146` varchar(40) DEFAULT NULL,
+ `col147` varchar(40) DEFAULT NULL,
+ `col148` varchar(40) DEFAULT NULL,
+ `col149` varchar(40) DEFAULT NULL,
+ `col150` varchar(40) DEFAULT NULL,
+ `col151` varchar(40) DEFAULT NULL,
+ `col152` varchar(40) DEFAULT NULL,
+ `col153` varchar(40) DEFAULT NULL,
+ `col154` varchar(40) DEFAULT NULL,
+ `col155` varchar(40) DEFAULT NULL,
+ `col156` varchar(40) DEFAULT NULL,
+ `col157` varchar(40) DEFAULT NULL,
+ `col158` varchar(40) DEFAULT NULL,
+ `col159` varchar(40) DEFAULT NULL,
+ `col160` varchar(40) DEFAULT NULL,
+ `col161` varchar(40) DEFAULT NULL,
+ `col162` varchar(40) DEFAULT NULL,
+ `col163` varchar(40) DEFAULT NULL,
+ `col164` varchar(40) DEFAULT NULL,
+ `col165` varchar(40) DEFAULT NULL,
+ `col166` varchar(40) DEFAULT NULL,
+ `col167` varchar(40) DEFAULT NULL,
+ `col168` varchar(40) DEFAULT NULL,
+ `col169` varchar(40) DEFAULT NULL,
+ `col170` varchar(40) DEFAULT NULL,
+ `col171` varchar(40) DEFAULT NULL,
+ `col172` varchar(40) DEFAULT NULL,
+ `col173` varchar(40) DEFAULT NULL,
+ `col174` varchar(40) DEFAULT NULL,
+ `col175` varchar(40) DEFAULT NULL,
+ `col176` varchar(40) DEFAULT NULL,
+ `col177` varchar(40) DEFAULT NULL,
+ `col178` varchar(40) DEFAULT NULL,
+ `col179` varchar(40) DEFAULT NULL,
+ `col180` varchar(40) DEFAULT NULL,
+ `col181` varchar(40) DEFAULT NULL,
+ `col182` varchar(40) DEFAULT NULL,
+ `col183` varchar(40) DEFAULT NULL,
+ `col184` varchar(40) DEFAULT NULL,
+ `col185` varchar(40) DEFAULT NULL,
+ `col186` varchar(40) DEFAULT NULL,
+ `col187` varchar(40) DEFAULT NULL,
+ `col188` varchar(40) DEFAULT NULL,
+ `col189` varchar(40) DEFAULT NULL,
+ `col190` varchar(40) DEFAULT NULL,
+ `col191` varchar(40) DEFAULT NULL,
+ `col192` varchar(40) DEFAULT NULL,
+ `col193` varchar(40) DEFAULT NULL,
+ `col194` varchar(40) DEFAULT NULL,
+ `col195` varchar(40) DEFAULT NULL,
+ `col196` varchar(40) DEFAULT NULL,
+ `col197` varchar(40) DEFAULT NULL,
+ `col198` varchar(40) DEFAULT NULL,
+ `col199` varchar(40) DEFAULT NULL,
+ `col200` varchar(40) DEFAULT NULL,
+ `col201` varchar(40) DEFAULT NULL,
+ `col202` varchar(40) DEFAULT NULL,
+ `col203` varchar(40) DEFAULT NULL,
+ `col204` varchar(40) DEFAULT NULL,
+ `col205` varchar(40) DEFAULT NULL,
+ `col206` varchar(40) DEFAULT NULL,
+ `col207` varchar(40) DEFAULT NULL,
+ `col208` varchar(40) DEFAULT NULL,
+ `col209` varchar(40) DEFAULT NULL,
+ `col210` varchar(40) DEFAULT NULL,
+ `col211` varchar(40) DEFAULT NULL,
+ `col212` varchar(40) DEFAULT NULL,
+ `col213` varchar(40) DEFAULT NULL,
+ `col214` varchar(40) DEFAULT NULL,
+ `col215` varchar(40) DEFAULT NULL,
+ `col216` varchar(40) DEFAULT NULL,
+ `col217` varchar(40) DEFAULT NULL,
+ `col218` varchar(40) DEFAULT NULL,
+ `col219` varchar(40) DEFAULT NULL,
+ `col220` varchar(40) DEFAULT NULL,
+ `col221` varchar(40) DEFAULT NULL,
+ `col222` varchar(40) DEFAULT NULL,
+ `col223` varchar(40) DEFAULT NULL,
+ `col224` varchar(40) DEFAULT NULL,
+ `col225` varchar(40) DEFAULT NULL,
+ `col226` varchar(40) DEFAULT NULL,
+ `col227` varchar(40) DEFAULT NULL,
+ `col228` varchar(40) DEFAULT NULL,
+ `col229` varchar(40) DEFAULT NULL,
+ `i230` int(11) DEFAULT NULL
+) ENGINE=TokuDB DEFAULT CHARSET=latin1 `compression`='tokudb_zlib'
+drop table t1;
+create table t1(
+col1 varchar(40),
+col2 varchar(40),
+col3 varchar(40),
+col4 varchar(40),
+col5 varchar(40),
+col6 varchar(40),
+col7 varchar(40),
+col8 varchar(40),
+col9 varchar(40),
+col10 varchar(40),
+col11 varchar(40),
+col12 varchar(40),
+col13 varchar(40),
+col14 varchar(40),
+col15 varchar(40),
+col16 varchar(40),
+col17 varchar(40),
+col18 varchar(40),
+col19 varchar(40),
+col20 varchar(40),
+col21 varchar(40),
+col22 varchar(40),
+col23 varchar(40),
+col24 varchar(40),
+col25 varchar(40),
+col26 varchar(40),
+col27 varchar(40),
+col28 varchar(40),
+col29 varchar(40),
+col30 varchar(40),
+col31 varchar(40),
+col32 varchar(40),
+col33 varchar(40),
+col34 varchar(40),
+col35 varchar(40),
+col36 varchar(40),
+col37 varchar(40),
+col38 varchar(40),
+col39 varchar(40),
+col40 varchar(40),
+col41 varchar(40),
+col42 varchar(40),
+col43 varchar(40),
+col44 varchar(40),
+col45 varchar(40),
+col46 varchar(40),
+col47 varchar(40),
+col48 varchar(40),
+col49 varchar(40),
+col50 varchar(40),
+col51 varchar(40),
+col52 varchar(40),
+col53 varchar(40),
+col54 varchar(40),
+col55 varchar(40),
+col56 varchar(40),
+col57 varchar(40),
+col58 varchar(40),
+col59 varchar(40),
+col60 varchar(40),
+col61 varchar(40),
+col62 varchar(40),
+col63 varchar(40),
+col64 varchar(40),
+col65 varchar(40),
+col66 varchar(40),
+col67 varchar(40),
+col68 varchar(40),
+col69 varchar(40),
+col70 varchar(40),
+col71 varchar(40),
+col72 varchar(40),
+col73 varchar(40),
+col74 varchar(40),
+col75 varchar(40),
+col76 varchar(40),
+col77 varchar(40),
+col78 varchar(40),
+col79 varchar(40),
+col80 varchar(40),
+col81 varchar(40),
+col82 varchar(40),
+col83 varchar(40),
+col84 varchar(40),
+col85 varchar(40),
+col86 varchar(40),
+col87 varchar(40),
+col88 varchar(40),
+col89 varchar(40),
+col90 varchar(40),
+col91 varchar(40),
+col92 varchar(40),
+col93 varchar(40),
+col94 varchar(40),
+col95 varchar(40),
+col96 varchar(40),
+col97 varchar(40),
+col98 varchar(40),
+col99 varchar(40),
+col100 varchar(40),
+col101 varchar(40),
+col102 varchar(40),
+col103 varchar(40),
+col104 varchar(40),
+col105 varchar(40),
+col106 varchar(40),
+col107 varchar(40),
+col108 varchar(40),
+col109 varchar(40),
+col110 varchar(40),
+col111 varchar(40),
+col112 varchar(40),
+col113 varchar(40),
+col114 varchar(40),
+col115 varchar(40),
+col116 varchar(40),
+col117 varchar(40),
+col118 varchar(40),
+col119 varchar(40),
+col120 varchar(40),
+col121 varchar(40),
+col122 varchar(40),
+col123 varchar(40),
+col124 varchar(40),
+col125 varchar(40),
+col126 varchar(40),
+col127 varchar(40),
+col128 varchar(40),
+col129 varchar(40),
+col130 varchar(40),
+col131 varchar(40),
+col132 varchar(40),
+col133 varchar(40),
+col134 varchar(40),
+col135 varchar(40),
+col136 varchar(40),
+col137 varchar(40),
+col138 varchar(40),
+col139 varchar(40),
+col140 varchar(40),
+col141 varchar(40),
+col142 varchar(40),
+col143 varchar(40),
+col144 varchar(40),
+col145 varchar(40),
+col146 varchar(40),
+col147 varchar(40),
+col148 varchar(40),
+col149 varchar(40),
+col150 varchar(40),
+col151 varchar(40),
+col152 varchar(40),
+col153 varchar(40),
+col154 varchar(40),
+col155 varchar(40),
+col156 varchar(40),
+col157 varchar(40),
+col158 varchar(40),
+col159 varchar(40),
+col160 varchar(40),
+col161 varchar(40),
+col162 varchar(40),
+col163 varchar(40),
+col164 varchar(40),
+col165 varchar(40),
+col166 varchar(40),
+col167 varchar(40),
+col168 varchar(40),
+col169 varchar(40),
+col170 varchar(40),
+col171 varchar(40),
+col172 varchar(40),
+col173 varchar(40),
+col174 varchar(40),
+col175 varchar(40),
+col176 varchar(40),
+col177 varchar(40),
+col178 varchar(40),
+col179 varchar(40),
+col180 varchar(40),
+col181 varchar(40),
+col182 varchar(40),
+col183 varchar(40),
+col184 varchar(40),
+col185 varchar(40),
+col186 varchar(40),
+col187 varchar(40),
+col188 varchar(40),
+col189 varchar(40),
+col190 varchar(40),
+col191 varchar(40),
+col192 varchar(40),
+col193 varchar(40),
+col194 varchar(40),
+col195 varchar(40),
+col196 varchar(40),
+col197 varchar(40),
+col198 varchar(40),
+col199 varchar(40),
+col200 varchar(40),
+col201 varchar(40),
+col202 varchar(40),
+col203 varchar(40),
+col204 varchar(40),
+col205 varchar(40),
+col206 varchar(40),
+col207 varchar(40),
+col208 varchar(40),
+col209 varchar(40),
+col210 varchar(40),
+col211 varchar(40),
+col212 varchar(40),
+col213 varchar(40),
+col214 varchar(40),
+col215 varchar(40),
+col216 varchar(40),
+col217 varchar(40),
+col218 varchar(40),
+col219 varchar(40),
+col220 varchar(40),
+col221 varchar(40),
+col222 varchar(40),
+col223 varchar(40),
+col224 varchar(40),
+col225 varchar(40),
+col226 varchar(40),
+col227 varchar(40),
+col228 varchar(40),
+col229 varchar(40),
+col230 varchar(40)
+) engine=TokuDB;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `col1` varchar(40) DEFAULT NULL,
+ `col2` varchar(40) DEFAULT NULL,
+ `col3` varchar(40) DEFAULT NULL,
+ `col4` varchar(40) DEFAULT NULL,
+ `col5` varchar(40) DEFAULT NULL,
+ `col6` varchar(40) DEFAULT NULL,
+ `col7` varchar(40) DEFAULT NULL,
+ `col8` varchar(40) DEFAULT NULL,
+ `col9` varchar(40) DEFAULT NULL,
+ `col10` varchar(40) DEFAULT NULL,
+ `col11` varchar(40) DEFAULT NULL,
+ `col12` varchar(40) DEFAULT NULL,
+ `col13` varchar(40) DEFAULT NULL,
+ `col14` varchar(40) DEFAULT NULL,
+ `col15` varchar(40) DEFAULT NULL,
+ `col16` varchar(40) DEFAULT NULL,
+ `col17` varchar(40) DEFAULT NULL,
+ `col18` varchar(40) DEFAULT NULL,
+ `col19` varchar(40) DEFAULT NULL,
+ `col20` varchar(40) DEFAULT NULL,
+ `col21` varchar(40) DEFAULT NULL,
+ `col22` varchar(40) DEFAULT NULL,
+ `col23` varchar(40) DEFAULT NULL,
+ `col24` varchar(40) DEFAULT NULL,
+ `col25` varchar(40) DEFAULT NULL,
+ `col26` varchar(40) DEFAULT NULL,
+ `col27` varchar(40) DEFAULT NULL,
+ `col28` varchar(40) DEFAULT NULL,
+ `col29` varchar(40) DEFAULT NULL,
+ `col30` varchar(40) DEFAULT NULL,
+ `col31` varchar(40) DEFAULT NULL,
+ `col32` varchar(40) DEFAULT NULL,
+ `col33` varchar(40) DEFAULT NULL,
+ `col34` varchar(40) DEFAULT NULL,
+ `col35` varchar(40) DEFAULT NULL,
+ `col36` varchar(40) DEFAULT NULL,
+ `col37` varchar(40) DEFAULT NULL,
+ `col38` varchar(40) DEFAULT NULL,
+ `col39` varchar(40) DEFAULT NULL,
+ `col40` varchar(40) DEFAULT NULL,
+ `col41` varchar(40) DEFAULT NULL,
+ `col42` varchar(40) DEFAULT NULL,
+ `col43` varchar(40) DEFAULT NULL,
+ `col44` varchar(40) DEFAULT NULL,
+ `col45` varchar(40) DEFAULT NULL,
+ `col46` varchar(40) DEFAULT NULL,
+ `col47` varchar(40) DEFAULT NULL,
+ `col48` varchar(40) DEFAULT NULL,
+ `col49` varchar(40) DEFAULT NULL,
+ `col50` varchar(40) DEFAULT NULL,
+ `col51` varchar(40) DEFAULT NULL,
+ `col52` varchar(40) DEFAULT NULL,
+ `col53` varchar(40) DEFAULT NULL,
+ `col54` varchar(40) DEFAULT NULL,
+ `col55` varchar(40) DEFAULT NULL,
+ `col56` varchar(40) DEFAULT NULL,
+ `col57` varchar(40) DEFAULT NULL,
+ `col58` varchar(40) DEFAULT NULL,
+ `col59` varchar(40) DEFAULT NULL,
+ `col60` varchar(40) DEFAULT NULL,
+ `col61` varchar(40) DEFAULT NULL,
+ `col62` varchar(40) DEFAULT NULL,
+ `col63` varchar(40) DEFAULT NULL,
+ `col64` varchar(40) DEFAULT NULL,
+ `col65` varchar(40) DEFAULT NULL,
+ `col66` varchar(40) DEFAULT NULL,
+ `col67` varchar(40) DEFAULT NULL,
+ `col68` varchar(40) DEFAULT NULL,
+ `col69` varchar(40) DEFAULT NULL,
+ `col70` varchar(40) DEFAULT NULL,
+ `col71` varchar(40) DEFAULT NULL,
+ `col72` varchar(40) DEFAULT NULL,
+ `col73` varchar(40) DEFAULT NULL,
+ `col74` varchar(40) DEFAULT NULL,
+ `col75` varchar(40) DEFAULT NULL,
+ `col76` varchar(40) DEFAULT NULL,
+ `col77` varchar(40) DEFAULT NULL,
+ `col78` varchar(40) DEFAULT NULL,
+ `col79` varchar(40) DEFAULT NULL,
+ `col80` varchar(40) DEFAULT NULL,
+ `col81` varchar(40) DEFAULT NULL,
+ `col82` varchar(40) DEFAULT NULL,
+ `col83` varchar(40) DEFAULT NULL,
+ `col84` varchar(40) DEFAULT NULL,
+ `col85` varchar(40) DEFAULT NULL,
+ `col86` varchar(40) DEFAULT NULL,
+ `col87` varchar(40) DEFAULT NULL,
+ `col88` varchar(40) DEFAULT NULL,
+ `col89` varchar(40) DEFAULT NULL,
+ `col90` varchar(40) DEFAULT NULL,
+ `col91` varchar(40) DEFAULT NULL,
+ `col92` varchar(40) DEFAULT NULL,
+ `col93` varchar(40) DEFAULT NULL,
+ `col94` varchar(40) DEFAULT NULL,
+ `col95` varchar(40) DEFAULT NULL,
+ `col96` varchar(40) DEFAULT NULL,
+ `col97` varchar(40) DEFAULT NULL,
+ `col98` varchar(40) DEFAULT NULL,
+ `col99` varchar(40) DEFAULT NULL,
+ `col100` varchar(40) DEFAULT NULL,
+ `col101` varchar(40) DEFAULT NULL,
+ `col102` varchar(40) DEFAULT NULL,
+ `col103` varchar(40) DEFAULT NULL,
+ `col104` varchar(40) DEFAULT NULL,
+ `col105` varchar(40) DEFAULT NULL,
+ `col106` varchar(40) DEFAULT NULL,
+ `col107` varchar(40) DEFAULT NULL,
+ `col108` varchar(40) DEFAULT NULL,
+ `col109` varchar(40) DEFAULT NULL,
+ `col110` varchar(40) DEFAULT NULL,
+ `col111` varchar(40) DEFAULT NULL,
+ `col112` varchar(40) DEFAULT NULL,
+ `col113` varchar(40) DEFAULT NULL,
+ `col114` varchar(40) DEFAULT NULL,
+ `col115` varchar(40) DEFAULT NULL,
+ `col116` varchar(40) DEFAULT NULL,
+ `col117` varchar(40) DEFAULT NULL,
+ `col118` varchar(40) DEFAULT NULL,
+ `col119` varchar(40) DEFAULT NULL,
+ `col120` varchar(40) DEFAULT NULL,
+ `col121` varchar(40) DEFAULT NULL,
+ `col122` varchar(40) DEFAULT NULL,
+ `col123` varchar(40) DEFAULT NULL,
+ `col124` varchar(40) DEFAULT NULL,
+ `col125` varchar(40) DEFAULT NULL,
+ `col126` varchar(40) DEFAULT NULL,
+ `col127` varchar(40) DEFAULT NULL,
+ `col128` varchar(40) DEFAULT NULL,
+ `col129` varchar(40) DEFAULT NULL,
+ `col130` varchar(40) DEFAULT NULL,
+ `col131` varchar(40) DEFAULT NULL,
+ `col132` varchar(40) DEFAULT NULL,
+ `col133` varchar(40) DEFAULT NULL,
+ `col134` varchar(40) DEFAULT NULL,
+ `col135` varchar(40) DEFAULT NULL,
+ `col136` varchar(40) DEFAULT NULL,
+ `col137` varchar(40) DEFAULT NULL,
+ `col138` varchar(40) DEFAULT NULL,
+ `col139` varchar(40) DEFAULT NULL,
+ `col140` varchar(40) DEFAULT NULL,
+ `col141` varchar(40) DEFAULT NULL,
+ `col142` varchar(40) DEFAULT NULL,
+ `col143` varchar(40) DEFAULT NULL,
+ `col144` varchar(40) DEFAULT NULL,
+ `col145` varchar(40) DEFAULT NULL,
+ `col146` varchar(40) DEFAULT NULL,
+ `col147` varchar(40) DEFAULT NULL,
+ `col148` varchar(40) DEFAULT NULL,
+ `col149` varchar(40) DEFAULT NULL,
+ `col150` varchar(40) DEFAULT NULL,
+ `col151` varchar(40) DEFAULT NULL,
+ `col152` varchar(40) DEFAULT NULL,
+ `col153` varchar(40) DEFAULT NULL,
+ `col154` varchar(40) DEFAULT NULL,
+ `col155` varchar(40) DEFAULT NULL,
+ `col156` varchar(40) DEFAULT NULL,
+ `col157` varchar(40) DEFAULT NULL,
+ `col158` varchar(40) DEFAULT NULL,
+ `col159` varchar(40) DEFAULT NULL,
+ `col160` varchar(40) DEFAULT NULL,
+ `col161` varchar(40) DEFAULT NULL,
+ `col162` varchar(40) DEFAULT NULL,
+ `col163` varchar(40) DEFAULT NULL,
+ `col164` varchar(40) DEFAULT NULL,
+ `col165` varchar(40) DEFAULT NULL,
+ `col166` varchar(40) DEFAULT NULL,
+ `col167` varchar(40) DEFAULT NULL,
+ `col168` varchar(40) DEFAULT NULL,
+ `col169` varchar(40) DEFAULT NULL,
+ `col170` varchar(40) DEFAULT NULL,
+ `col171` varchar(40) DEFAULT NULL,
+ `col172` varchar(40) DEFAULT NULL,
+ `col173` varchar(40) DEFAULT NULL,
+ `col174` varchar(40) DEFAULT NULL,
+ `col175` varchar(40) DEFAULT NULL,
+ `col176` varchar(40) DEFAULT NULL,
+ `col177` varchar(40) DEFAULT NULL,
+ `col178` varchar(40) DEFAULT NULL,
+ `col179` varchar(40) DEFAULT NULL,
+ `col180` varchar(40) DEFAULT NULL,
+ `col181` varchar(40) DEFAULT NULL,
+ `col182` varchar(40) DEFAULT NULL,
+ `col183` varchar(40) DEFAULT NULL,
+ `col184` varchar(40) DEFAULT NULL,
+ `col185` varchar(40) DEFAULT NULL,
+ `col186` varchar(40) DEFAULT NULL,
+ `col187` varchar(40) DEFAULT NULL,
+ `col188` varchar(40) DEFAULT NULL,
+ `col189` varchar(40) DEFAULT NULL,
+ `col190` varchar(40) DEFAULT NULL,
+ `col191` varchar(40) DEFAULT NULL,
+ `col192` varchar(40) DEFAULT NULL,
+ `col193` varchar(40) DEFAULT NULL,
+ `col194` varchar(40) DEFAULT NULL,
+ `col195` varchar(40) DEFAULT NULL,
+ `col196` varchar(40) DEFAULT NULL,
+ `col197` varchar(40) DEFAULT NULL,
+ `col198` varchar(40) DEFAULT NULL,
+ `col199` varchar(40) DEFAULT NULL,
+ `col200` varchar(40) DEFAULT NULL,
+ `col201` varchar(40) DEFAULT NULL,
+ `col202` varchar(40) DEFAULT NULL,
+ `col203` varchar(40) DEFAULT NULL,
+ `col204` varchar(40) DEFAULT NULL,
+ `col205` varchar(40) DEFAULT NULL,
+ `col206` varchar(40) DEFAULT NULL,
+ `col207` varchar(40) DEFAULT NULL,
+ `col208` varchar(40) DEFAULT NULL,
+ `col209` varchar(40) DEFAULT NULL,
+ `col210` varchar(40) DEFAULT NULL,
+ `col211` varchar(40) DEFAULT NULL,
+ `col212` varchar(40) DEFAULT NULL,
+ `col213` varchar(40) DEFAULT NULL,
+ `col214` varchar(40) DEFAULT NULL,
+ `col215` varchar(40) DEFAULT NULL,
+ `col216` varchar(40) DEFAULT NULL,
+ `col217` varchar(40) DEFAULT NULL,
+ `col218` varchar(40) DEFAULT NULL,
+ `col219` varchar(40) DEFAULT NULL,
+ `col220` varchar(40) DEFAULT NULL,
+ `col221` varchar(40) DEFAULT NULL,
+ `col222` varchar(40) DEFAULT NULL,
+ `col223` varchar(40) DEFAULT NULL,
+ `col224` varchar(40) DEFAULT NULL,
+ `col225` varchar(40) DEFAULT NULL,
+ `col226` varchar(40) DEFAULT NULL,
+ `col227` varchar(40) DEFAULT NULL,
+ `col228` varchar(40) DEFAULT NULL,
+ `col229` varchar(40) DEFAULT NULL,
+ `col230` varchar(40) DEFAULT NULL
+) ENGINE=TokuDB DEFAULT CHARSET=latin1 `compression`='tokudb_zlib'
drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb_mariadb/r/mdev6519.result b/storage/tokudb/mysql-test/tokudb_mariadb/r/mdev6519.result
new file mode 100644
index 00000000000..b916c133a60
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_mariadb/r/mdev6519.result
@@ -0,0 +1,28 @@
+drop table if exists t1;
+SET @tmp_ust= @@use_stat_tables;
+SET @tmp_oucs= @@optimizer_use_condition_selectivity;
+SET use_stat_tables = PREFERABLY;
+SET optimizer_use_condition_selectivity = 2;
+CREATE TABLE t1 (
+code CHAR(2),
+name VARCHAR(32),
+population INT,
+house_seats TINYINT,
+PRIMARY KEY(code),
+KEY (house_seats)
+) ENGINE=TokuDB;
+INSERT INTO t1 VALUES ('AL','Alabama',4833722,7),('AK','Alaska',735132,1);
+ANALYZE TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+ALTER TABLE t1 ADD KEY (name(4),house_seats);
+SELECT * FROM t1 WHERE
+population BETWEEN 1000000 AND 2000000
+AND name LIKE 'New %'
+AND house_seats IN (1, 2, 3)
+AND code IN ('NJ', 'NM');
+code name population house_seats
+drop table t1;
+SET use_stat_tables = @tmp_ust;
+SET optimizer_use_condition_selectivity = @tmp_oucs;
diff --git a/storage/tokudb/mysql-test/tokudb_mariadb/t/229cols.test b/storage/tokudb/mysql-test/tokudb_mariadb/t/229cols.test
index 5ea0025c19c..623d7f6335a 100644
--- a/storage/tokudb/mysql-test/tokudb_mariadb/t/229cols.test
+++ b/storage/tokudb/mysql-test/tokudb_mariadb/t/229cols.test
@@ -1,3 +1,7 @@
+#
+# MDEV-6106 Cannot create a table with 229 or greater columns in TokuDB
+# MDEV-7003 test-alter-table crashes debug build due to double free of plugin
+#
create table t1(
col1 varchar(40),
col2 varchar(40),
@@ -227,8 +231,244 @@ create table t1(
col226 varchar(40),
col227 varchar(40),
col228 varchar(40),
- col229 varchar(40)
+ col229 varchar(40)
) engine=TokuDB;
show create table t1;
+alter table t1 add i230 integer;
+show create table t1;
drop table t1;
+create table t1(
+ col1 varchar(40),
+ col2 varchar(40),
+ col3 varchar(40),
+ col4 varchar(40),
+ col5 varchar(40),
+ col6 varchar(40),
+ col7 varchar(40),
+ col8 varchar(40),
+ col9 varchar(40),
+ col10 varchar(40),
+ col11 varchar(40),
+ col12 varchar(40),
+ col13 varchar(40),
+ col14 varchar(40),
+ col15 varchar(40),
+ col16 varchar(40),
+ col17 varchar(40),
+ col18 varchar(40),
+ col19 varchar(40),
+ col20 varchar(40),
+ col21 varchar(40),
+ col22 varchar(40),
+ col23 varchar(40),
+ col24 varchar(40),
+ col25 varchar(40),
+ col26 varchar(40),
+ col27 varchar(40),
+ col28 varchar(40),
+ col29 varchar(40),
+ col30 varchar(40),
+ col31 varchar(40),
+ col32 varchar(40),
+ col33 varchar(40),
+ col34 varchar(40),
+ col35 varchar(40),
+ col36 varchar(40),
+ col37 varchar(40),
+ col38 varchar(40),
+ col39 varchar(40),
+ col40 varchar(40),
+ col41 varchar(40),
+ col42 varchar(40),
+ col43 varchar(40),
+ col44 varchar(40),
+ col45 varchar(40),
+ col46 varchar(40),
+ col47 varchar(40),
+ col48 varchar(40),
+ col49 varchar(40),
+ col50 varchar(40),
+ col51 varchar(40),
+ col52 varchar(40),
+ col53 varchar(40),
+ col54 varchar(40),
+ col55 varchar(40),
+ col56 varchar(40),
+ col57 varchar(40),
+ col58 varchar(40),
+ col59 varchar(40),
+ col60 varchar(40),
+ col61 varchar(40),
+ col62 varchar(40),
+ col63 varchar(40),
+ col64 varchar(40),
+ col65 varchar(40),
+ col66 varchar(40),
+ col67 varchar(40),
+ col68 varchar(40),
+ col69 varchar(40),
+ col70 varchar(40),
+ col71 varchar(40),
+ col72 varchar(40),
+ col73 varchar(40),
+ col74 varchar(40),
+ col75 varchar(40),
+ col76 varchar(40),
+ col77 varchar(40),
+ col78 varchar(40),
+ col79 varchar(40),
+ col80 varchar(40),
+ col81 varchar(40),
+ col82 varchar(40),
+ col83 varchar(40),
+ col84 varchar(40),
+ col85 varchar(40),
+ col86 varchar(40),
+ col87 varchar(40),
+ col88 varchar(40),
+ col89 varchar(40),
+ col90 varchar(40),
+ col91 varchar(40),
+ col92 varchar(40),
+ col93 varchar(40),
+ col94 varchar(40),
+ col95 varchar(40),
+ col96 varchar(40),
+ col97 varchar(40),
+ col98 varchar(40),
+ col99 varchar(40),
+ col100 varchar(40),
+ col101 varchar(40),
+ col102 varchar(40),
+ col103 varchar(40),
+ col104 varchar(40),
+ col105 varchar(40),
+ col106 varchar(40),
+ col107 varchar(40),
+ col108 varchar(40),
+ col109 varchar(40),
+ col110 varchar(40),
+ col111 varchar(40),
+ col112 varchar(40),
+ col113 varchar(40),
+ col114 varchar(40),
+ col115 varchar(40),
+ col116 varchar(40),
+ col117 varchar(40),
+ col118 varchar(40),
+ col119 varchar(40),
+ col120 varchar(40),
+ col121 varchar(40),
+ col122 varchar(40),
+ col123 varchar(40),
+ col124 varchar(40),
+ col125 varchar(40),
+ col126 varchar(40),
+ col127 varchar(40),
+ col128 varchar(40),
+ col129 varchar(40),
+ col130 varchar(40),
+ col131 varchar(40),
+ col132 varchar(40),
+ col133 varchar(40),
+ col134 varchar(40),
+ col135 varchar(40),
+ col136 varchar(40),
+ col137 varchar(40),
+ col138 varchar(40),
+ col139 varchar(40),
+ col140 varchar(40),
+ col141 varchar(40),
+ col142 varchar(40),
+ col143 varchar(40),
+ col144 varchar(40),
+ col145 varchar(40),
+ col146 varchar(40),
+ col147 varchar(40),
+ col148 varchar(40),
+ col149 varchar(40),
+ col150 varchar(40),
+ col151 varchar(40),
+ col152 varchar(40),
+ col153 varchar(40),
+ col154 varchar(40),
+ col155 varchar(40),
+ col156 varchar(40),
+ col157 varchar(40),
+ col158 varchar(40),
+ col159 varchar(40),
+ col160 varchar(40),
+ col161 varchar(40),
+ col162 varchar(40),
+ col163 varchar(40),
+ col164 varchar(40),
+ col165 varchar(40),
+ col166 varchar(40),
+ col167 varchar(40),
+ col168 varchar(40),
+ col169 varchar(40),
+ col170 varchar(40),
+ col171 varchar(40),
+ col172 varchar(40),
+ col173 varchar(40),
+ col174 varchar(40),
+ col175 varchar(40),
+ col176 varchar(40),
+ col177 varchar(40),
+ col178 varchar(40),
+ col179 varchar(40),
+ col180 varchar(40),
+ col181 varchar(40),
+ col182 varchar(40),
+ col183 varchar(40),
+ col184 varchar(40),
+ col185 varchar(40),
+ col186 varchar(40),
+ col187 varchar(40),
+ col188 varchar(40),
+ col189 varchar(40),
+ col190 varchar(40),
+ col191 varchar(40),
+ col192 varchar(40),
+ col193 varchar(40),
+ col194 varchar(40),
+ col195 varchar(40),
+ col196 varchar(40),
+ col197 varchar(40),
+ col198 varchar(40),
+ col199 varchar(40),
+ col200 varchar(40),
+ col201 varchar(40),
+ col202 varchar(40),
+ col203 varchar(40),
+ col204 varchar(40),
+ col205 varchar(40),
+ col206 varchar(40),
+ col207 varchar(40),
+ col208 varchar(40),
+ col209 varchar(40),
+ col210 varchar(40),
+ col211 varchar(40),
+ col212 varchar(40),
+ col213 varchar(40),
+ col214 varchar(40),
+ col215 varchar(40),
+ col216 varchar(40),
+ col217 varchar(40),
+ col218 varchar(40),
+ col219 varchar(40),
+ col220 varchar(40),
+ col221 varchar(40),
+ col222 varchar(40),
+ col223 varchar(40),
+ col224 varchar(40),
+ col225 varchar(40),
+ col226 varchar(40),
+ col227 varchar(40),
+ col228 varchar(40),
+ col229 varchar(40),
+ col230 varchar(40)
+) engine=TokuDB;
+show create table t1;
+drop table t1;
diff --git a/storage/tokudb/mysql-test/tokudb_mariadb/t/mdev6519.test b/storage/tokudb/mysql-test/tokudb_mariadb/t/mdev6519.test
new file mode 100644
index 00000000000..715aca18025
--- /dev/null
+++ b/storage/tokudb/mysql-test/tokudb_mariadb/t/mdev6519.test
@@ -0,0 +1,33 @@
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+SET @tmp_ust= @@use_stat_tables;
+SET @tmp_oucs= @@optimizer_use_condition_selectivity;
+
+SET use_stat_tables = PREFERABLY;
+SET optimizer_use_condition_selectivity = 2;
+
+CREATE TABLE t1 (
+ code CHAR(2),
+ name VARCHAR(32),
+ population INT,
+ house_seats TINYINT,
+ PRIMARY KEY(code),
+ KEY (house_seats)
+) ENGINE=TokuDB;
+
+INSERT INTO t1 VALUES ('AL','Alabama',4833722,7),('AK','Alaska',735132,1);
+ANALYZE TABLE t1;
+ALTER TABLE t1 ADD KEY (name(4),house_seats);
+
+SELECT * FROM t1 WHERE
+population BETWEEN 1000000 AND 2000000
+AND name LIKE 'New %'
+AND house_seats IN (1, 2, 3)
+AND code IN ('NJ', 'NM');
+
+drop table t1;
+SET use_stat_tables = @tmp_ust;
+SET optimizer_use_condition_selectivity = @tmp_oucs;
+
diff --git a/storage/tokudb/scripts/make.mysql.bash b/storage/tokudb/scripts/make.mysql.bash
index 1bf258c5c3b..5654c1c7926 100755
--- a/storage/tokudb/scripts/make.mysql.bash
+++ b/storage/tokudb/scripts/make.mysql.bash
@@ -155,6 +155,8 @@ function generate_cmake_cmd () {
-D BUILD_CONFIG=mysql_release \
-D CMAKE_BUILD_TYPE=$cmake_build_type \
-D CMAKE_TOKUDB_REVISION=$ft_revision \
+ -D TOKUDB_VERSION=tokudb-${tokudb_version} \
+ -D WITH_JEMALLOC=bundled \
-D BUILD_TESTING=OFF \
-D USE_GTAGS=OFF \
-D USE_CTAGS=OFF \
@@ -212,8 +214,6 @@ if [ $build_tgz != 0 ] ; then
mkdir -p build.$cmake_build_type
pushd build.$cmake_build_type
- export TOKUDB_VERSION=$tokudb_version
-
# actually build
cmd=$(generate_cmake_cmd)
if [ $? != 0 ] ; then exit 1; fi
diff --git a/storage/tokudb/tests/Makefile b/storage/tokudb/tests/Makefile
index a565c213fff..47e2027e7b1 100644
--- a/storage/tokudb/tests/Makefile
+++ b/storage/tokudb/tests/Makefile
@@ -3,6 +3,10 @@ TARGETS = $(patsubst %.cc,%,$(SRCS))
CHECKS = $(patsubst %,%.check,$(TARGETS))
CPPFLAGS = -I.. -D__STDC_FORMAT_MACROS
CXXFLAGS = -g -Wall -Wextra -Wno-missing-field-initializers -Wshadow
+ifdef USE_OPENMP
+CPPFLAGS += -DUSE_OPENMP
+CXXFLAGS += -fopenmp
+endif
FRACTALTREE_BASE_DIR = ../ft-index
FRACTALTREE_INSTALL_DIR = $(FRACTALTREE_BASE_DIR)/install.debug
@@ -10,6 +14,8 @@ VALGRIND = valgrind -q --leak-check=full --show-reachable=yes --suppressions=$(F
ifeq ($(GCOV),1)
CXXFLAGS += -fprofile-arcs -ftest-coverage
+else
+CXXFLAGS += -O3
endif
all: $(TARGETS)
@@ -17,18 +23,29 @@ all: $(TARGETS)
clean:
rm -rf $(TARGETS) *.gcov *.gcno *.gcda *.testdir *.dSYM
-check: $(CHECKS)
+%.check: %
+ LD_LIBRARY_PATH=$(FRACTALTREE_INSTALL_DIR)/lib $(VALGRIND) ./$<
+
+card.check: $(patsubst %.cc,%.check,$(wildcard card*.cc))
true
-%.check: %
- LD_LIBRARY_PATH=$(FRACTALTREE_INSTALL_DIR)/lib $(VALGRIND) ./$<
+ifndef USE_OPENMP
+# unravel vlq_test_uint64 8 times
+vlq_test_uint64_%.check:
+ LD_LIBRARY_PATH=$(FRACTALTREE_INSTALL_DIR)/lib $(VALGRIND) ./vlq_test_uint64 $(patsubst vlq_test_uint64_%.check,%,$@) 8
+vlq_test_uint64.check: $(foreach i,0 1 2 3 4 5 6 7,vlq_test_uint64_$(i).check)
+ true
+endif
-card.check: card_test.check card_1.check card_inf.check card_inf_1.check card_random_1.check card_etime.check
+vlq.check: $(patsubst %.cc,%.check,$(wildcard vlq*.cc))
true
max_test.check: max_test
$(VALGRIND) ./$< 1 2
+check: $(CHECKS)
+ true
+
%: %.cc
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -g -o $@ $<
diff --git a/storage/tokudb/tests/card_test.cc b/storage/tokudb/tests/card_test.cc
index fbf80bf7804..0bd78d78cc7 100644
--- a/storage/tokudb/tests/card_test.cc
+++ b/storage/tokudb/tests/card_test.cc
@@ -222,6 +222,19 @@ static void test_10(DB_ENV *env) {
error = txn->commit(txn, 0);
assert(error == 0);
+
+ // test delete card
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ error = tokudb::delete_card_from_status(status_db, txn);
+ assert(error == 0);
+
+ error = tokudb::get_card_from_status(status_db, txn, 0, NULL);
+ assert(error == DB_NOTFOUND);
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
error = tokudb::close_status(&status_db);
assert(error == 0);
diff --git a/storage/tokudb/tests/card_test_alter.cc b/storage/tokudb/tests/card_test_alter.cc
new file mode 100644
index 00000000000..2a3e9396b3f
--- /dev/null
+++ b/storage/tokudb/tests/card_test_alter.cc
@@ -0,0 +1,686 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuDB, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2007-2013 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+// test tokudb cardinality in status dictionary
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <memory.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <db.h>
+typedef unsigned long long ulonglong;
+#include <tokudb_status.h>
+#include <tokudb_buffer.h>
+
+#include "fake_mysql.h"
+
+#if __APPLE__
+typedef unsigned long ulong;
+#endif
+#include <tokudb_card.h>
+
+static void test_no_keys(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_no_keys", txn);
+ assert(error == 0);
+
+ const uint keys = 0;
+ const uint key_parts = 0;
+ TABLE_SHARE s = { MAX_KEY, keys, key_parts, NULL };
+
+ error = tokudb::alter_card(status_db, txn, &s, &s);
+ assert(error == 0);
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_keys(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_keys", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 3;
+ const uint ta_key_parts = 1;
+ const int ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 1000, 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_a" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &ta);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[ta_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, ta_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < ta_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == ta_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_drop_0(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_drop_0", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 3;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 1000, 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_a" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[2], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 2;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 2000, 3000,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_b" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_drop_1(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_drop_1", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 3;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 1000, 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_a" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[2], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 2;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 1000, 3000,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_a" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_drop_2(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_drop_2", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 3;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 1000, 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_a" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[2], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 2;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 1000, 2000,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_a" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_b" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_drop_1_multiple_parts(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_drop_1_multiple_parts", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 3;
+ const uint ta_key_parts = 1+2+3;
+ const uint ta_rec_per_keys = ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 1000, 2000, 2001, 3000, 3001, 3002,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, 1, &ta_rec_per_key[0], (char *) "key_a" },
+ { 0, 2, &ta_rec_per_key[0+1], (char *) "key_b" },
+ { 0, 3, &ta_rec_per_key[0+1+2], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 2;
+ const uint tb_key_parts = 1+3;
+ const int tb_rec_per_keys = tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 1000, 3000, 3001, 3002,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, 1, &tb_rec_per_key[0], (char *) "key_a" },
+ { 0, 3, &tb_rec_per_key[0+1], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_add_0(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_add_0", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 2;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 3;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 0 /*not computed*/, 2000, 3000,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_a" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_b" },
+ { 0, tb_key_parts, &tb_rec_per_key[2], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_add_1(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_add_1", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 2;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 3;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 2000, 0 /*not computed*/, 3000,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_b" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_a" },
+ { 0, tb_key_parts, &tb_rec_per_key[2], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_add_2(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_add_2", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 2;
+ const uint ta_key_parts = 1;
+ const uint ta_rec_per_keys = ta_keys * ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 2000, 3000,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, ta_key_parts, &ta_rec_per_key[0], (char *) "key_b" },
+ { 0, ta_key_parts, &ta_rec_per_key[1], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 3;
+ const uint tb_key_parts = 1;
+ const int tb_rec_per_keys = tb_keys * tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 2000, 3000, 0 /*not computed*/,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, tb_key_parts, &tb_rec_per_key[0], (char *) "key_b" },
+ { 0, tb_key_parts, &tb_rec_per_key[1], (char *) "key_c" },
+ { 0, tb_key_parts, &tb_rec_per_key[2], (char *) "key_a" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+static void test_add_0_multiple_parts(DB_ENV *env) {
+ int error;
+
+ DB_TXN *txn = NULL;
+ error = env->txn_begin(env, NULL, &txn, 0);
+ assert(error == 0);
+
+ DB *status_db = NULL;
+ error = tokudb::create_status(env, &status_db, "status_add_0_multiple_parts", txn);
+ assert(error == 0);
+
+ // define tables
+ const uint ta_keys = 2;
+ const uint ta_key_parts = 3+4;
+ const uint ta_rec_per_keys = ta_key_parts;
+ uint64_t ta_rec_per_key[ta_rec_per_keys] = {
+ 2000, 2001, 2002, 3000, 3001, 3002, 3003,
+ };
+ KEY_INFO ta_key_info[ta_rec_per_keys] = {
+ { 0, 3, &ta_rec_per_key[0], (char *) "key_b" },
+ { 0, 4, &ta_rec_per_key[3], (char *) "key_c" },
+ };
+ TABLE_SHARE ta = { MAX_KEY, ta_keys, ta_key_parts, ta_key_info };
+
+ const uint tb_keys = 3;
+ const uint tb_key_parts = 2+3+4;
+ const int tb_rec_per_keys = tb_key_parts;
+ uint64_t tb_rec_per_key[tb_rec_per_keys] = {
+ 0, 0 /*not computed*/, 2000, 2001, 2002, 3000, 3001, 3002, 3003,
+ };
+ KEY_INFO tb_key_info[tb_rec_per_keys] = {
+ { 0, 2, &tb_rec_per_key[0], (char *) "key_a" },
+ { 0, 3, &tb_rec_per_key[0+2], (char *) "key_b" },
+ { 0, 4, &tb_rec_per_key[0+2+3], (char *) "key_c" },
+ };
+ TABLE_SHARE tb = { MAX_KEY, tb_keys, tb_key_parts, tb_key_info };
+
+ // set initial cardinality
+ error = tokudb::set_card_in_status(status_db, txn, ta_rec_per_keys, ta_rec_per_key);
+ assert(error == 0);
+
+ error = tokudb::alter_card(status_db, txn, &ta, &tb);
+ assert(error == 0);
+
+ // verify
+ uint64_t current_rec_per_key[tb_rec_per_keys];
+ error = tokudb::get_card_from_status(status_db, txn, tb_rec_per_keys, current_rec_per_key);
+ assert(error == 0);
+ for (uint i = 0; i < tb_rec_per_keys; i++) {
+ assert(current_rec_per_key[i] == tb_rec_per_key[i]);
+ }
+
+ error = txn->commit(txn, 0);
+ assert(error == 0);
+
+ error = tokudb::close_status(&status_db);
+ assert(error == 0);
+}
+
+int main() {
+ int error;
+
+ error = system("rm -rf " __FILE__ ".testdir");
+ assert(error == 0);
+
+ error = mkdir(__FILE__ ".testdir", S_IRWXU+S_IRWXG+S_IRWXO);
+ assert(error == 0);
+
+ DB_ENV *env = NULL;
+ error = db_env_create(&env, 0);
+ assert(error == 0);
+
+ error = env->open(env, __FILE__ ".testdir", DB_INIT_MPOOL + DB_INIT_LOG + DB_INIT_LOCK + DB_INIT_TXN + DB_PRIVATE + DB_CREATE, S_IRWXU+S_IRWXG+S_IRWXO);
+ assert(error == 0);
+
+ test_no_keys(env);
+ test_keys(env);
+ test_drop_0(env);
+ test_drop_1(env);
+ test_drop_2(env);
+ test_drop_1_multiple_parts(env);
+ test_add_0(env);
+ test_add_1(env);
+ test_add_2(env);
+ test_add_0_multiple_parts(env);
+
+ error = env->close(env, 0);
+ assert(error == 0);
+
+ return 0;
+}
diff --git a/storage/tokudb/tests/card_test_key_info.cc b/storage/tokudb/tests/card_test_key_info.cc
new file mode 100644
index 00000000000..68f61942397
--- /dev/null
+++ b/storage/tokudb/tests/card_test_key_info.cc
@@ -0,0 +1,211 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuDB, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2007-2013 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+// test tokudb cardinality in status dictionary
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <memory.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <db.h>
+typedef unsigned long long ulonglong;
+#include <tokudb_status.h>
+#include <tokudb_buffer.h>
+
+#include "fake_mysql.h"
+
+#if __APPLE__
+typedef unsigned long ulong;
+#endif
+#include <tokudb_card.h>
+
+static void test_no_keys() {
+ TABLE_SHARE s = { 0, 0, 0, NULL };
+ TABLE t = { &s, NULL };
+ assert(tokudb::compute_total_key_parts(&s) == 0);
+ tokudb::set_card_in_key_info(&t, 0, NULL);
+}
+
+static void test_simple_pk() {
+ const uint keys = 1;
+ const uint key_parts = 1;
+ uint64_t pk_rec_per_key[keys] = { 0 };
+ KEY_INFO pk = { 0, key_parts, pk_rec_per_key, (char *) "PRIMARY" };
+ TABLE_SHARE s = { 0, keys, key_parts, &pk };
+ TABLE t = { &s, &pk };
+ assert(tokudb::compute_total_key_parts(&s) == key_parts);
+ uint64_t computed_rec_per_key[keys] = { 2 };
+ tokudb::set_card_in_key_info(&t, keys, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 1);
+}
+
+static void test_pk_2() {
+ const uint keys = 1;
+ const uint key_parts = 2;
+ uint64_t pk_rec_per_key[keys * key_parts] = { 0 };
+ KEY_INFO pk = { 0, key_parts, pk_rec_per_key, (char *) "PRIMARY" };
+ TABLE_SHARE s = { 0, keys, key_parts, &pk };
+ TABLE t = { &s, &pk };
+ assert(tokudb::compute_total_key_parts(&s) == key_parts);
+ uint64_t computed_rec_per_key[keys * key_parts] = { 2, 3 };
+ tokudb::set_card_in_key_info(&t, keys * key_parts, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 2);
+ assert(t.key_info[0].rec_per_key[1] == 1);
+}
+
+static void test_simple_sk() {
+ const uint keys = 1;
+ const uint key_parts = 1;
+ uint64_t sk_rec_per_key[keys] = { 0 };
+ KEY_INFO sk = { 0, keys, sk_rec_per_key, (char *) "KEY" };
+ TABLE_SHARE s = { MAX_KEY, keys, key_parts, &sk };
+ TABLE t = { &s, &sk };
+ assert(tokudb::compute_total_key_parts(&s) == 1);
+ uint64_t computed_rec_per_key[keys] = { 2 };
+ tokudb::set_card_in_key_info(&t, keys, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 2);
+}
+
+static void test_simple_unique_sk() {
+ const uint keys = 1;
+ uint64_t sk_rec_per_key[keys] = { 0 };
+ KEY_INFO sk = { HA_NOSAME, keys, sk_rec_per_key, (char *) "KEY" };
+ TABLE_SHARE s = { MAX_KEY, keys, keys, &sk };
+ TABLE t = { &s, &sk };
+ assert(tokudb::compute_total_key_parts(&s) == 1);
+ uint64_t computed_rec_per_key[keys] = { 2 };
+ tokudb::set_card_in_key_info(&t, keys, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 1);
+}
+
+static void test_simple_pk_sk() {
+ const uint keys = 2;
+ uint64_t rec_per_key[keys] = { 0 };
+ KEY_INFO key_info[keys] = {
+ { 0, 1, &rec_per_key[0], (char *) "PRIMARY" },
+ { 0, 1, &rec_per_key[1], (char *) "KEY" },
+ };
+ TABLE_SHARE s = { 0, keys, keys, key_info };
+ TABLE t = { &s, key_info };
+ assert(tokudb::compute_total_key_parts(&s) == 2);
+ uint64_t computed_rec_per_key[keys] = { 100, 200 };
+ tokudb::set_card_in_key_info(&t, keys, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 1);
+ assert(t.key_info[1].rec_per_key[0] == 200);
+}
+
+static void test_simple_sk_pk() {
+ const uint keys = 2;
+ uint64_t rec_per_key[keys] = { 0 };
+ KEY_INFO key_info[keys] = {
+ { 0, 1, &rec_per_key[0], (char *) "KEY" },
+ { 0, 1, &rec_per_key[1], (char *) "PRIMARY" },
+ };
+ TABLE_SHARE s = { 1, keys, keys, key_info };
+ TABLE t = { &s, key_info };
+ assert(tokudb::compute_total_key_parts(&s) == 2);
+ uint64_t computed_rec_per_key[keys] = { 100, 200 };
+ tokudb::set_card_in_key_info(&t, keys, computed_rec_per_key);
+ assert(t.key_info[0].rec_per_key[0] == 100);
+ assert(t.key_info[1].rec_per_key[0] == 1);
+}
+
+int main() {
+ test_no_keys();
+ test_simple_pk();
+ test_pk_2();
+ test_simple_sk();
+ test_simple_unique_sk();
+ test_simple_pk_sk();
+ test_simple_sk_pk();
+ return 0;
+}
diff --git a/storage/tokudb/tests/fake_mysql.h b/storage/tokudb/tests/fake_mysql.h
index 46aa41099ff..82be0f01de0 100644
--- a/storage/tokudb/tests/fake_mysql.h
+++ b/storage/tokudb/tests/fake_mysql.h
@@ -110,5 +110,6 @@ public:
};
uint get_key_parts(KEY_INFO *key_info) {
assert(key_info);
- return 0;
+ return key_info->key_parts;
}
+#define MAX_KEY (1U << 30)
diff --git a/storage/tokudb/tests/tokudb_math_test.cc b/storage/tokudb/tests/math_test_int.cc
index 0c4be8c1242..1121c9f4a9d 100644
--- a/storage/tokudb/tests/tokudb_math_test.cc
+++ b/storage/tokudb/tests/math_test_int.cc
@@ -96,113 +96,6 @@ PATENT RIGHTS GRANT:
#include <tokudb_math.h>
using namespace tokudb;
-static void test_uint_range(uint length_bits) {
- assert(uint_low_endpoint(length_bits) == 0);
- if (length_bits == 64)
- assert(uint_high_endpoint(length_bits) == ~0ULL);
- else
- assert(uint_high_endpoint(length_bits) == (1ULL<<length_bits)-1);
-}
-
-static void test_uint8() {
- printf("%s\n", __FUNCTION__);
- test_uint_range(8);
- bool over;
- uint8_t n;
- uint64_t m;
- for (uint64_t x = 0; x <= (1ULL<<8)-1; x++) {
- for (uint64_t y = 0; y <= (1ULL<<8)-1; y++) {
- n = uint_add(x, y, 8, &over);
- m = x + y;
- if (m > (1ULL<<8)-1)
- assert(over);
- else
- assert(!over && n == (m % 256));
- n = uint_sub(x, y, 8, &over);
- m = x - y;
- if (m > x)
- assert(over);
- else
- assert(!over && n == (m % 256));
- }
- }
-}
-
-static void test_uint16() {
- printf("%s\n", __FUNCTION__);
- test_uint_range(16);
- bool over;
- uint16_t n;
- uint64_t m;
- for (uint64_t x = 0; x <= (1ULL<<16)-1; x++) {
- for (uint64_t y = 0; y <= (1ULL<<16)-1; y++) {
- n = uint_add(x, y, 16, &over);
- m = x + y;
- if (m > (1ULL<<16)-1)
- assert(over);
- else
- assert(!over && n == (m % (1ULL<<16)));
- n = uint_sub(x, y, 16, &over);
- m = x - y;
- if (m > x)
- assert(over);
- else
- assert(!over && n == (m % (1ULL<<16)));
- }
- }
-}
-
-static void test_uint24() {
- printf("%s\n", __FUNCTION__);
- test_uint_range(24);
- bool over;
- uint64_t s;
-
- s = uint_add((1ULL<<24)-1, (1ULL<<24)-1, 24, &over); assert(over);
- s = uint_add((1ULL<<24)-1, 1, 24, &over); assert(over);
- s = uint_add((1ULL<<24)-1, 0, 24, &over); assert(!over && s == (1ULL<<24)-1);
- s = uint_add(0, 1, 24, &over); assert(!over && s == 1);
- s = uint_add(0, 0, 24, &over); assert(!over && s == 0);
- s = uint_sub(0, 0, 24, &over); assert(!over && s == 0);
- s = uint_sub(0, 1, 24, &over); assert(over);
- s = uint_sub(0, (1ULL<<24)-1, 24, &over); assert(over);
- s = uint_sub((1ULL<<24)-1, (1ULL<<24)-1, 24, &over); assert(!over && s == 0);
-}
-
-static void test_uint32() {
- printf("%s\n", __FUNCTION__);
- test_uint_range(32);
- bool over;
- uint64_t s;
-
- s = uint_add((1ULL<<32)-1, (1ULL<<32)-1, 32, &over); assert(over);
- s = uint_add((1ULL<<32)-1, 1, 32, &over); assert(over);
- s = uint_add((1ULL<<32)-1, 0, 32, &over); assert(!over && s == (1ULL<<32)-1);
- s = uint_add(0, 1, 32, &over); assert(!over && s == 1);
- s = uint_add(0, 0, 32, &over); assert(!over && s == 0);
- s = uint_sub(0, 0, 32, &over); assert(!over && s == 0);
- s = uint_sub(0, 1, 32, &over); assert(over);
- s = uint_sub(0, (1ULL<<32)-1, 32, &over); assert(over);
- s = uint_sub((1ULL<<32)-1, (1ULL<<32)-1, 32, &over); assert(!over && s == 0);
-}
-
-static void test_uint64() {
- printf("%s\n", __FUNCTION__);
- test_uint_range(64);
- bool over;
- uint64_t s;
-
- s = uint_add(~0ULL, ~0ULL, 64, &over); assert(over);
- s = uint_add(~0ULL, 1, 64, &over); assert(over);
- s = uint_add(~0ULL, 0, 64, &over); assert(!over && s == ~0ULL);
- s = uint_add(0, 1, 64, &over); assert(!over && s == 1);
- s = uint_add(0, 0, 64, &over); assert(!over && s == 0);
- s = uint_sub(0, 0, 64, &over); assert(!over && s == 0);
- s = uint_sub(0, 1, 64, &over); assert(over);
- s = uint_sub(0, ~0ULL, 64, &over); assert(over);
- s = uint_sub(~0ULL, ~0ULL, 64, &over); assert(!over && s == 0);
-}
-
static int64_t sign_extend(uint length_bits, int64_t n) {
return n | ~((1ULL<<(length_bits-1))-1);
}
@@ -359,18 +252,12 @@ static void test_int_sign() {
}
int main() {
- if (1) test_int_sign();
- if (1) test_int8();
- if (1) test_int16();
- if (1) test_int24();
- if (1) test_int32();
- if (1) test_int64();
-
- if (1) test_uint8();
- if (1) test_uint16();
- if (1) test_uint24();
- if (1) test_uint32();
- if (1) test_uint64();
+ test_int_sign();
+ test_int8();
+ test_int16();
+ test_int24();
+ test_int32();
+ test_int64();
return 0;
}
diff --git a/storage/tokudb/tests/math_test_uint.cc b/storage/tokudb/tests/math_test_uint.cc
new file mode 100644
index 00000000000..b44dc83c146
--- /dev/null
+++ b/storage/tokudb/tests/math_test_uint.cc
@@ -0,0 +1,214 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuDB, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2007-2013 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <tokudb_math.h>
+using namespace tokudb;
+
+static void test_uint_range(uint length_bits) {
+ assert(uint_low_endpoint(length_bits) == 0);
+ if (length_bits == 64)
+ assert(uint_high_endpoint(length_bits) == ~0ULL);
+ else
+ assert(uint_high_endpoint(length_bits) == (1ULL<<length_bits)-1);
+}
+
+static void test_uint8() {
+ printf("%s\n", __FUNCTION__);
+ test_uint_range(8);
+ bool over;
+ uint8_t n;
+ uint64_t m;
+ for (uint64_t x = 0; x <= (1ULL<<8)-1; x++) {
+ for (uint64_t y = 0; y <= (1ULL<<8)-1; y++) {
+ n = uint_add(x, y, 8, &over);
+ m = x + y;
+ if (m > (1ULL<<8)-1)
+ assert(over);
+ else
+ assert(!over && n == (m % 256));
+ n = uint_sub(x, y, 8, &over);
+ m = x - y;
+ if (m > x)
+ assert(over);
+ else
+ assert(!over && n == (m % 256));
+ }
+ }
+}
+
+static void test_uint16() {
+ printf("%s\n", __FUNCTION__);
+ test_uint_range(16);
+ bool over;
+ uint16_t n;
+ uint64_t m;
+ for (uint64_t x = 0; x <= (1ULL<<16)-1; x++) {
+ for (uint64_t y = 0; y <= (1ULL<<16)-1; y++) {
+ n = uint_add(x, y, 16, &over);
+ m = x + y;
+ if (m > (1ULL<<16)-1)
+ assert(over);
+ else
+ assert(!over && n == (m % (1ULL<<16)));
+ n = uint_sub(x, y, 16, &over);
+ m = x - y;
+ if (m > x)
+ assert(over);
+ else
+ assert(!over && n == (m % (1ULL<<16)));
+ }
+ }
+}
+
+static void test_uint24() {
+ printf("%s\n", __FUNCTION__);
+ test_uint_range(24);
+ bool over;
+ uint64_t s;
+
+ s = uint_add((1ULL<<24)-1, (1ULL<<24)-1, 24, &over); assert(over);
+ s = uint_add((1ULL<<24)-1, 1, 24, &over); assert(over);
+ s = uint_add((1ULL<<24)-1, 0, 24, &over); assert(!over && s == (1ULL<<24)-1);
+ s = uint_add(0, 1, 24, &over); assert(!over && s == 1);
+ s = uint_add(0, 0, 24, &over); assert(!over && s == 0);
+ s = uint_sub(0, 0, 24, &over); assert(!over && s == 0);
+ s = uint_sub(0, 1, 24, &over); assert(over);
+ s = uint_sub(0, (1ULL<<24)-1, 24, &over); assert(over);
+ s = uint_sub((1ULL<<24)-1, (1ULL<<24)-1, 24, &over); assert(!over && s == 0);
+}
+
+static void test_uint32() {
+ printf("%s\n", __FUNCTION__);
+ test_uint_range(32);
+ bool over;
+ uint64_t s;
+
+ s = uint_add((1ULL<<32)-1, (1ULL<<32)-1, 32, &over); assert(over);
+ s = uint_add((1ULL<<32)-1, 1, 32, &over); assert(over);
+ s = uint_add((1ULL<<32)-1, 0, 32, &over); assert(!over && s == (1ULL<<32)-1);
+ s = uint_add(0, 1, 32, &over); assert(!over && s == 1);
+ s = uint_add(0, 0, 32, &over); assert(!over && s == 0);
+ s = uint_sub(0, 0, 32, &over); assert(!over && s == 0);
+ s = uint_sub(0, 1, 32, &over); assert(over);
+ s = uint_sub(0, (1ULL<<32)-1, 32, &over); assert(over);
+ s = uint_sub((1ULL<<32)-1, (1ULL<<32)-1, 32, &over); assert(!over && s == 0);
+}
+
+static void test_uint64() {
+ printf("%s\n", __FUNCTION__);
+ test_uint_range(64);
+ bool over;
+ uint64_t s;
+
+ s = uint_add(~0ULL, ~0ULL, 64, &over); assert(over);
+ s = uint_add(~0ULL, 1, 64, &over); assert(over);
+ s = uint_add(~0ULL, 0, 64, &over); assert(!over && s == ~0ULL);
+ s = uint_add(0, 1, 64, &over); assert(!over && s == 1);
+ s = uint_add(0, 0, 64, &over); assert(!over && s == 0);
+ s = uint_sub(0, 0, 64, &over); assert(!over && s == 0);
+ s = uint_sub(0, 1, 64, &over); assert(over);
+ s = uint_sub(0, ~0ULL, 64, &over); assert(over);
+ s = uint_sub(~0ULL, ~0ULL, 64, &over); assert(!over && s == 0);
+}
+
+int main() {
+ test_uint8();
+ test_uint16();
+ test_uint24();
+ test_uint32();
+ test_uint64();
+ return 0;
+}
+
diff --git a/storage/tokudb/tests/vlq_test.cc b/storage/tokudb/tests/vlq_test.cc
index 7e47d85684e..7cd17dda15f 100644
--- a/storage/tokudb/tests/vlq_test.cc
+++ b/storage/tokudb/tests/vlq_test.cc
@@ -120,98 +120,6 @@ static void test_vlq_uint32_error(void) {
assert(in_s == 2 && n == 128);
}
-static void test_vlq_uint32(void) {
- uint32_t n;
- unsigned char b[5];
- size_t out_s, in_s;
-
- printf("%u\n", 0);
- for (uint32_t v = 0; v < (1<<7); v++) {
- out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
- assert(out_s == 1);
- in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
- assert(in_s == 1 && n == v);
- }
-
- printf("%u\n", 1<<7);
- for (uint32_t v = (1<<7); v < (1<<14); v++) {
- out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
- assert(out_s == 2);
- in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
- assert(in_s == 2 && n == v);
- }
-
- printf("%u\n", 1<<14);
- for (uint32_t v = (1<<14); v < (1<<21); v++) {
- out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
- assert(out_s == 3);
- in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
- assert(in_s == 3 && n == v);
- }
-
- printf("%u\n", 1<<21);
- for (uint32_t v = (1<<21); v < (1<<28); v++) {
- out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
- assert(out_s == 4);
- in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
- assert(in_s == 4 && n == v);
- }
-
- printf("%u\n", 1<<28);
- for (uint32_t v = (1<<28); v != 0; v++) {
- out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
- assert(out_s == 5);
- in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
- assert(in_s == 5 && n == v);
- }
-}
-
-static void test_vlq_uint64(void) {
- uint64_t n;
- unsigned char b[10];
- size_t out_s, in_s;
-
- printf("%u\n", 0);
- for (uint64_t v = 0; v < (1<<7); v++) {
- out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
- assert(out_s == 1);
- in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
- assert(in_s == 1 && n == v);
- }
-
- printf("%u\n", 1<<7);
- for (uint64_t v = (1<<7); v < (1<<14); v++) {
- out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
- assert(out_s == 2);
- in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
- assert(in_s == 2 && n == v);
- }
-
- printf("%u\n", 1<<14);
- for (uint64_t v = (1<<14); v < (1<<21); v++) {
- out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
- assert(out_s == 3);
- in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
- assert(in_s == 3 && n == v);
- }
-
- printf("%u\n", 1<<21);
- for (uint64_t v = (1<<21); v < (1<<28); v++) {
- out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
- assert(out_s == 4);
- in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
- assert(in_s == 4 && n == v);
- }
-
- printf("%u\n", 1<<28);
- for (uint64_t v = (1<<28); v < (1ULL<<35); v++) {
- out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
- assert(out_s == 5);
- in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
- assert(in_s == 5 && n == v);
- }
-}
-
static void test_80000000(void) {
uint64_t n;
unsigned char b[10];
@@ -235,10 +143,8 @@ static void test_100000000(void) {
}
int main(void) {
- if (1) test_vlq_uint32_error();
- if (1) test_80000000();
- if (1) test_100000000();
- if (1) test_vlq_uint32();
- if (1) test_vlq_uint64();
+ test_vlq_uint32_error();
+ test_80000000();
+ test_100000000();
return 0;
}
diff --git a/storage/tokudb/tests/vlq_test_uint32.cc b/storage/tokudb/tests/vlq_test_uint32.cc
new file mode 100644
index 00000000000..494d3155389
--- /dev/null
+++ b/storage/tokudb/tests/vlq_test_uint32.cc
@@ -0,0 +1,159 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuDB, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2007-2013 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <tokudb_vlq.h>
+
+namespace tokudb {
+ template size_t vlq_encode_ui(uint32_t n, void *p, size_t s);
+ template size_t vlq_decode_ui(uint32_t *np, void *p, size_t s);
+ template size_t vlq_encode_ui(uint64_t n, void *p, size_t s);
+ template size_t vlq_decode_ui(uint64_t *np, void *p, size_t s);
+};
+
+static void test_vlq_uint32(void) {
+ printf("%u\n", 0);
+ for (uint32_t v = 0; v < (1<<7); v++) {
+ unsigned char b[5];
+ size_t out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
+ assert(out_s == 1);
+ uint32_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
+ assert(in_s == 1 && n == v);
+ }
+
+ printf("%u\n", 1<<7);
+ for (uint32_t v = (1<<7); v < (1<<14); v++) {
+ unsigned char b[5];
+ size_t out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
+ assert(out_s == 2);
+ uint32_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
+ assert(in_s == 2 && n == v);
+ }
+
+ printf("%u\n", 1<<14);
+ for (uint32_t v = (1<<14); v < (1<<21); v++) {
+ unsigned char b[5];
+ size_t out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
+ assert(out_s == 3);
+ uint32_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
+ assert(in_s == 3 && n == v);
+ }
+
+ printf("%u\n", 1<<21);
+ for (uint32_t v = (1<<21); v < (1<<28); v++) {
+ unsigned char b[5];
+ size_t out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
+ assert(out_s == 4);
+ uint32_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
+ assert(in_s == 4 && n == v);
+ }
+
+ printf("%u\n", 1<<28);
+ for (uint32_t v = (1<<28); v != 0; v++) {
+ unsigned char b[5];
+ size_t out_s = tokudb::vlq_encode_ui<uint32_t>(v, b, sizeof b);
+ assert(out_s == 5);
+ uint32_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint32_t>(&n, b, out_s);
+ assert(in_s == 5 && n == v);
+ }
+}
+
+int main(void) {
+ test_vlq_uint32();
+ return 0;
+}
diff --git a/storage/tokudb/tests/vlq_test_uint64.cc b/storage/tokudb/tests/vlq_test_uint64.cc
new file mode 100644
index 00000000000..79b83a9427a
--- /dev/null
+++ b/storage/tokudb/tests/vlq_test_uint64.cc
@@ -0,0 +1,170 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4:
+#ident "$Id$"
+/*
+COPYING CONDITIONS NOTICE:
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of version 2 of the GNU General Public License as
+ published by the Free Software Foundation, and provided that the
+ following conditions are met:
+
+ * Redistributions of source code must retain this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below).
+
+ * Redistributions in binary form must reproduce this COPYING
+ CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the
+ DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the
+ PATENT MARKING NOTICE (below), and the PATENT RIGHTS
+ GRANT (below) in the documentation and/or other materials
+ provided with the distribution.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+
+COPYRIGHT NOTICE:
+
+ TokuDB, Tokutek Fractal Tree Indexing Library.
+ Copyright (C) 2007-2013 Tokutek, Inc.
+
+DISCLAIMER:
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+UNIVERSITY PATENT NOTICE:
+
+ The technology is licensed by the Massachusetts Institute of
+ Technology, Rutgers State University of New Jersey, and the Research
+ Foundation of State University of New York at Stony Brook under
+ United States of America Serial No. 11/760379 and to the patents
+ and/or patent applications resulting from it.
+
+PATENT MARKING NOTICE:
+
+ This software is covered by US Patent No. 8,185,551.
+ This software is covered by US Patent No. 8,489,638.
+
+PATENT RIGHTS GRANT:
+
+ "THIS IMPLEMENTATION" means the copyrightable works distributed by
+ Tokutek as part of the Fractal Tree project.
+
+ "PATENT CLAIMS" means the claims of patents that are owned or
+ licensable by Tokutek, both currently or in the future; and that in
+ the absence of this license would be infringed by THIS
+ IMPLEMENTATION or by using or running THIS IMPLEMENTATION.
+
+ "PATENT CHALLENGE" shall mean a challenge to the validity,
+ patentability, enforceability and/or non-infringement of any of the
+ PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS.
+
+ Tokutek hereby grants to you, for the term and geographical scope of
+ the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free,
+ irrevocable (except as stated in this section) patent license to
+ make, have made, use, offer to sell, sell, import, transfer, and
+ otherwise run, modify, and propagate the contents of THIS
+ IMPLEMENTATION, where such license applies only to the PATENT
+ CLAIMS. This grant does not include claims that would be infringed
+ only as a consequence of further modifications of THIS
+ IMPLEMENTATION. If you or your agent or licensee institute or order
+ or agree to the institution of patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
+ THIS IMPLEMENTATION constitutes direct or contributory patent
+ infringement, or inducement of patent infringement, then any rights
+ granted to you under this License shall terminate as of the date
+ such litigation is filed. If you or your agent or exclusive
+ licensee institute or order or agree to the institution of a PATENT
+ CHALLENGE, then Tokutek may terminate any rights granted to you
+ under this License.
+*/
+
+#ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved."
+#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it."
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <tokudb_vlq.h>
+
+namespace tokudb {
+ template size_t vlq_encode_ui(uint32_t n, void *p, size_t s);
+ template size_t vlq_decode_ui(uint32_t *np, void *p, size_t s);
+ template size_t vlq_encode_ui(uint64_t n, void *p, size_t s);
+ template size_t vlq_decode_ui(uint64_t *np, void *p, size_t s);
+};
+
+// test a slice of the number space where the slice is described by
+// a start number and a stride through the space.
+static void test_vlq_uint64(uint64_t start, uint64_t stride) {
+ printf("%u\n", 0);
+ for (uint64_t v = 0 + start; v < (1<<7); v += stride) {
+ unsigned char b[10];
+ size_t out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
+ assert(out_s == 1);
+ uint64_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
+ assert(in_s == 1 && n == v);
+ }
+
+ printf("%u\n", 1<<7);
+ for (uint64_t v = (1<<7) + start; v < (1<<14); v += stride) {
+ unsigned char b[10];
+ size_t out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
+ assert(out_s == 2);
+ uint64_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
+ assert(in_s == 2 && n == v);
+ }
+
+ printf("%u\n", 1<<14);
+ for (uint64_t v = (1<<14) + start; v < (1<<21); v += stride) {
+ unsigned char b[10];
+ size_t out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
+ assert(out_s == 3);
+ uint64_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
+ assert(in_s == 3 && n == v);
+ }
+
+ printf("%u\n", 1<<21);
+ for (uint64_t v = (1<<21) + start; v < (1<<28); v += stride) {
+ unsigned char b[10];
+ size_t out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
+ assert(out_s == 4);
+ uint64_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
+ assert(in_s == 4 && n == v);
+ }
+
+ printf("%u\n", 1<<28);
+#if USE_OPENMP
+#pragma omp parallel num_threads(4)
+#pragma omp for
+#endif
+ for (uint64_t v = (1<<28) + start; v < (1ULL<<35); v += stride) {
+ unsigned char b[10];
+ size_t out_s = tokudb::vlq_encode_ui<uint64_t>(v, b, sizeof b);
+ assert(out_s == 5);
+ uint64_t n;
+ size_t in_s = tokudb::vlq_decode_ui<uint64_t>(&n, b, out_s);
+ assert(in_s == 5 && n == v);
+ }
+}
+
+int main(int argc, char *argv[]) {
+ uint64_t start = 0, stride = 1;
+ if (argc == 3) {
+ start = atoll(argv[1]);
+ stride = atoll(argv[2]);
+ }
+ test_vlq_uint64(start, stride);
+ return 0;
+}
diff --git a/storage/tokudb/tokudb_card.h b/storage/tokudb/tokudb_card.h
index 4c9d7b3d353..797c705bbaf 100644
--- a/storage/tokudb/tokudb_card.h
+++ b/storage/tokudb/tokudb_card.h
@@ -174,9 +174,14 @@ namespace tokudb {
return false;
}
+ static void copy_card(uint64_t *dest, uint64_t *src, size_t n) {
+ for (size_t i = 0; i < n; i++)
+ dest[i] = src[i];
+ }
+
// Altered table cardinality = select cardinality data from current table cardinality for keys that exist
// in the altered table and the current table.
- int set_card_from_status(DB *status_db, DB_TXN *txn, TABLE_SHARE *table_share, TABLE_SHARE *altered_table_share) {
+ int alter_card(DB *status_db, DB_TXN *txn, TABLE_SHARE *table_share, TABLE_SHARE *altered_table_share) {
int error;
// read existing cardinality data from status
uint table_total_key_parts = tokudb::compute_total_key_parts(table_share);
@@ -201,7 +206,7 @@ namespace tokudb {
uint ith_key_parts = get_key_parts(&altered_table_share->key_info[i]);
uint orig_key_index;
if (find_index_of_key(altered_table_share->key_info[i].name, table_share, &orig_key_index)) {
- memcpy(&altered_rec_per_key[next_key_parts], &rec_per_key[orig_key_offset[orig_key_index]], ith_key_parts);
+ copy_card(&altered_rec_per_key[next_key_parts], &rec_per_key[orig_key_offset[orig_key_index]], ith_key_parts);
}
next_key_parts += ith_key_parts;
}
@@ -217,7 +222,7 @@ namespace tokudb {
// For each key part, put records per key part in *rec_per_key_part[key_part_index].
// Returns 0 if success, otherwise an error number.
// TODO statistical dives into the FT
- int analyze_card(DB *db, DB_TXN *txn, bool is_unique __attribute__((unused)), uint64_t num_key_parts, uint64_t *rec_per_key_part,
+ int analyze_card(DB *db, DB_TXN *txn, bool is_unique, uint64_t num_key_parts, uint64_t *rec_per_key_part,
int (*key_compare)(DB *, const DBT *, const DBT *, uint),
int (*analyze_progress)(void *extra, uint64_t rows), void *progress_extra) {
int error = 0;
diff --git a/storage/xtradb/api/api0api.cc b/storage/xtradb/api/api0api.cc
index a060cbc7270..3859fb84b81 100644
--- a/storage/xtradb/api/api0api.cc
+++ b/storage/xtradb/api/api0api.cc
@@ -205,9 +205,9 @@ struct ib_tuple_t {
};
/** The following counter is used to convey information to InnoDB
-about server activity: in selects it is not sensible to call
-srv_active_wake_master_thread after each fetch or search, we only do
-it every INNOBASE_WAKE_INTERVAL'th step. */
+about server activity: in case of normal DML ops it is not
+sensible to call srv_active_wake_master_thread after each
+operation, we only do it every INNOBASE_WAKE_INTERVAL'th step. */
#define INNOBASE_WAKE_INTERVAL 32
@@ -427,7 +427,7 @@ ib_read_tuple(
data = btr_rec_copy_externally_stored_field(
copy, offsets, zip_size, i, &len,
- tuple->heap);
+ tuple->heap, NULL);
ut_a(len != UNIV_SQL_NULL);
}
@@ -707,8 +707,6 @@ ib_trx_rollback(
/* It should always succeed */
ut_a(err == DB_SUCCESS);
- ib_wake_master_thread();
-
return(err);
}
@@ -1531,7 +1529,11 @@ ib_execute_insert_query_graph(
dict_table_n_rows_inc(table);
- srv_stats.n_rows_inserted.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_inserted.inc();
+ } else {
+ srv_stats.n_rows_inserted.inc();
+ }
}
trx->op_info = "";
@@ -1654,7 +1656,7 @@ ib_cursor_insert_row(
src_tuple->index->table, q_proc->grph.ins, node->ins);
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
@@ -1885,9 +1887,17 @@ ib_execute_update_query_graph(
dict_table_n_rows_dec(table);
- srv_stats.n_rows_deleted.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.inc();
+ } else {
+ srv_stats.n_rows_deleted.inc();
+ }
} else {
- srv_stats.n_rows_updated.inc();
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.inc();
+ } else {
+ srv_stats.n_rows_updated.inc();
+ }
}
} else if (err == DB_RECORD_NOT_FOUND) {
@@ -1940,7 +1950,7 @@ ib_cursor_update_row(
err = ib_execute_update_query_graph(cursor, pcur);
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
@@ -2082,7 +2092,7 @@ ib_cursor_delete_row(
err = DB_RECORD_NOT_FOUND;
}
- srv_active_wake_master_thread();
+ ib_wake_master_thread();
return(err);
}
diff --git a/storage/xtradb/api/api0misc.cc b/storage/xtradb/api/api0misc.cc
index b2370105938..a980d32c33f 100644
--- a/storage/xtradb/api/api0misc.cc
+++ b/storage/xtradb/api/api0misc.cc
@@ -24,6 +24,7 @@ InnoDB Native API
3/20/2011 Jimmy Yang extracted from Embedded InnoDB
*******************************************************/
+#include <my_config.h>
#include <errno.h>
#ifdef HAVE_UNISTD_H
diff --git a/storage/xtradb/btr/btr0btr.cc b/storage/xtradb/btr/btr0btr.cc
index 926c3be0fb5..a5ed71a55d4 100644
--- a/storage/xtradb/btr/btr0btr.cc
+++ b/storage/xtradb/btr/btr0btr.cc
@@ -2862,6 +2862,134 @@ btr_page_tuple_smaller(
return(cmp_dtuple_rec(tuple, first_rec, *offsets) < 0);
}
+/** Insert the tuple into the right sibling page, if the cursor is at the end
+of a page.
+@param[in] flags undo logging and locking flags
+@param[in,out] cursor cursor at which to insert; when the function succeeds,
+ the cursor is positioned before the insert point.
+@param[out] offsets offsets on inserted record
+@param[in,out] heap memory heap for allocating offsets
+@param[in] tuple tuple to insert
+@param[in] n_ext number of externally stored columns
+@param[in,out] mtr mini-transaction
+@return inserted record (first record on the right sibling page);
+ the cursor will be positioned on the page infimum
+@retval NULL if the operation was not performed */
+static
+rec_t*
+btr_insert_into_right_sibling(
+ ulint flags,
+ btr_cur_t* cursor,
+ ulint** offsets,
+ mem_heap_t* heap,
+ const dtuple_t* tuple,
+ ulint n_ext,
+ mtr_t* mtr)
+{
+ buf_block_t* block = btr_cur_get_block(cursor);
+ page_t* page = buf_block_get_frame(block);
+ ulint next_page_no = btr_page_get_next(page, mtr);
+
+ ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(cursor->index),
+ MTR_MEMO_X_LOCK));
+ ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
+ ut_ad(heap);
+
+ if (next_page_no == FIL_NULL || !page_rec_is_supremum(
+ page_rec_get_next(btr_cur_get_rec(cursor)))) {
+
+ return(NULL);
+ }
+
+ page_cur_t next_page_cursor;
+ buf_block_t* next_block;
+ page_t* next_page;
+ btr_cur_t next_father_cursor;
+ rec_t* rec = NULL;
+ ulint zip_size = buf_block_get_zip_size(block);
+ ulint max_size;
+
+ next_block = btr_block_get(
+ buf_block_get_space(block), zip_size,
+ next_page_no, RW_X_LATCH, cursor->index, mtr);
+ next_page = buf_block_get_frame(next_block);
+
+ bool is_leaf = page_is_leaf(next_page);
+
+ btr_page_get_father(
+ cursor->index, next_block, mtr, &next_father_cursor);
+
+ page_cur_search(
+ next_block, cursor->index, tuple, PAGE_CUR_LE,
+ &next_page_cursor);
+
+ max_size = page_get_max_insert_size_after_reorganize(next_page, 1);
+
+ /* Extends gap lock for the next page */
+ lock_update_split_left(next_block, block);
+
+ rec = page_cur_tuple_insert(
+ &next_page_cursor, tuple, cursor->index, offsets, &heap,
+ n_ext, mtr);
+
+ if (rec == NULL) {
+ if (zip_size && is_leaf
+ && !dict_index_is_clust(cursor->index)) {
+ /* Reset the IBUF_BITMAP_FREE bits, because
+ page_cur_tuple_insert() will have attempted page
+ reorganize before failing. */
+ ibuf_reset_free_bits(next_block);
+ }
+ return(NULL);
+ }
+
+ ibool compressed;
+ dberr_t err;
+ ulint level = btr_page_get_level(next_page, mtr);
+
+ /* adjust cursor position */
+ *btr_cur_get_page_cur(cursor) = next_page_cursor;
+
+ ut_ad(btr_cur_get_rec(cursor) == page_get_infimum_rec(next_page));
+ ut_ad(page_rec_get_next(page_get_infimum_rec(next_page)) == rec);
+
+ /* We have to change the parent node pointer */
+
+ compressed = btr_cur_pessimistic_delete(
+ &err, TRUE, &next_father_cursor,
+ BTR_CREATE_FLAG, RB_NONE, mtr);
+
+ ut_a(err == DB_SUCCESS);
+
+ if (!compressed) {
+ btr_cur_compress_if_useful(&next_father_cursor, FALSE, mtr);
+ }
+
+ dtuple_t* node_ptr = dict_index_build_node_ptr(
+ cursor->index, rec, buf_block_get_page_no(next_block),
+ heap, level);
+
+ btr_insert_on_non_leaf_level(
+ flags, cursor->index, level + 1, node_ptr, mtr);
+
+ ut_ad(rec_offs_validate(rec, cursor->index, *offsets));
+
+ if (is_leaf && !dict_index_is_clust(cursor->index)) {
+ /* Update the free bits of the B-tree page in the
+ insert buffer bitmap. */
+
+ if (zip_size) {
+ ibuf_update_free_bits_zip(next_block, mtr);
+ } else {
+ ibuf_update_free_bits_if_full(
+ next_block, max_size,
+ rec_offs_size(*offsets) + PAGE_DIR_SLOT_SIZE);
+ }
+ }
+
+ return(rec);
+}
+
/*************************************************************//**
Splits an index page to halves and inserts the tuple. It is assumed
that mtr holds an x-latch to the index tree. NOTE: the tree x-latch is
@@ -2932,6 +3060,14 @@ func_start:
ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
ut_ad(!page_is_empty(page));
+ /* try to insert to the next page if possible before split */
+ rec = btr_insert_into_right_sibling(
+ flags, cursor, offsets, *heap, tuple, n_ext, mtr);
+
+ if (rec != NULL) {
+ return(rec);
+ }
+
page_no = buf_block_get_page_no(block);
/* 1. Decide the split record; split_rec == NULL means that the
diff --git a/storage/xtradb/btr/btr0cur.cc b/storage/xtradb/btr/btr0cur.cc
index 5d8b5c04d68..b13b196605e 100644
--- a/storage/xtradb/btr/btr0cur.cc
+++ b/storage/xtradb/btr/btr0cur.cc
@@ -1347,7 +1347,7 @@ btr_cur_optimistic_insert(
rec_t* dummy;
ibool leaf;
ibool reorg;
- ibool inherit;
+ ibool inherit = TRUE;
ulint zip_size;
ulint rec_size;
dberr_t err;
@@ -1638,7 +1638,7 @@ btr_cur_pessimistic_insert(
ulint zip_size = dict_table_zip_size(index->table);
big_rec_t* big_rec_vec = NULL;
dberr_t err;
- ibool dummy_inh;
+ ibool inherit = FALSE;
ibool success;
ulint n_reserved = 0;
@@ -1660,7 +1660,7 @@ btr_cur_pessimistic_insert(
/* Check locks and write to undo log, if specified */
err = btr_cur_ins_lock_and_undo(flags, cursor, entry,
- thr, mtr, &dummy_inh);
+ thr, mtr, &inherit);
if (err != DB_SUCCESS) {
@@ -1733,10 +1733,31 @@ btr_cur_pessimistic_insert(
ut_ad(page_rec_get_next(btr_cur_get_rec(cursor)) == *rec);
+ if (!(flags & BTR_NO_LOCKING_FLAG)) {
+ /* The cursor might be moved to the other page,
+ and the max trx id field should be updated after
+ the cursor was fixed. */
+ if (!dict_index_is_clust(index)) {
+ page_update_max_trx_id(
+ btr_cur_get_block(cursor),
+ btr_cur_get_page_zip(cursor),
+ thr_get_trx(thr)->id, mtr);
+ }
+ if (!page_rec_is_infimum(btr_cur_get_rec(cursor))
+ || btr_page_get_prev(
+ buf_block_get_frame(
+ btr_cur_get_block(cursor)), mtr)
+ == FIL_NULL) {
+ /* split and inserted need to call
+ lock_update_insert() always. */
+ inherit = TRUE;
+ }
+ }
+
#ifdef BTR_CUR_ADAPT
btr_search_update_hash_on_insert(cursor);
#endif
- if (!(flags & BTR_NO_LOCKING_FLAG)) {
+ if (inherit && !(flags & BTR_NO_LOCKING_FLAG)) {
lock_update_insert(btr_cur_get_block(cursor), *rec);
}
@@ -3801,7 +3822,8 @@ btr_estimate_n_rows_in_range(
const dtuple_t* tuple1, /*!< in: range start, may also be empty tuple */
ulint mode1, /*!< in: search mode for range start */
const dtuple_t* tuple2, /*!< in: range end, may also be empty tuple */
- ulint mode2) /*!< in: search mode for range end */
+ ulint mode2, /*!< in: search mode for range end */
+ trx_t* trx) /*!< in: trx */
{
btr_path_t path1[BTR_PATH_ARRAY_N_SLOTS];
btr_path_t path2[BTR_PATH_ARRAY_N_SLOTS];
@@ -3819,7 +3841,7 @@ btr_estimate_n_rows_in_range(
table_n_rows = dict_table_get_n_rows(index->table);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
cursor.path_arr = path1;
@@ -3837,7 +3859,7 @@ btr_estimate_n_rows_in_range(
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
cursor.path_arr = path2;
@@ -4013,7 +4035,7 @@ btr_estimate_number_of_different_key_vals(
ib_uint64_t* n_diff;
ib_uint64_t* n_not_null;
ibool stats_null_not_equal;
- ullint n_sample_pages; /* number of pages to sample */
+ ullint n_sample_pages=1; /* number of pages to sample */
ulint not_empty_flag = 0;
ulint total_external_size = 0;
ulint i;
@@ -4060,18 +4082,63 @@ btr_estimate_number_of_different_key_vals(
ut_error;
}
- /* It makes no sense to test more pages than are contained
- in the index, thus we lower the number if it is too high */
- if (srv_stats_transient_sample_pages > index->stat_index_size) {
- if (index->stat_index_size > 0) {
- n_sample_pages = index->stat_index_size;
+ if (srv_stats_sample_traditional) {
+ /* It makes no sense to test more pages than are contained
+ in the index, thus we lower the number if it is too high */
+ if (srv_stats_transient_sample_pages > index->stat_index_size) {
+ if (index->stat_index_size > 0) {
+ n_sample_pages = index->stat_index_size;
+ }
} else {
- n_sample_pages = 1;
+ n_sample_pages = srv_stats_transient_sample_pages;
}
} else {
- n_sample_pages = srv_stats_transient_sample_pages;
+ /* New logaritmic number of pages that are estimated.
+ Number of pages estimated should be between 1 and
+ index->stat_index_size.
+
+ If we have only 0 or 1 index pages then we can only take 1
+ sample. We have already initialized n_sample_pages to 1.
+
+ So taking index size as I and sample as S and log(I)*S as L
+
+ requirement 1) we want the out limit of the expression to not exceed I;
+ requirement 2) we want the ideal pages to be at least S;
+ so the current expression is min(I, max( min(S,I), L)
+
+ looking for simplifications:
+
+ case 1: assume S < I
+ min(I, max( min(S,I), L) -> min(I , max( S, L))
+
+ but since L=LOG2(I)*S and log2(I) >=1 L>S always so max(S,L) = L.
+
+ so we have: min(I , L)
+
+ case 2: assume I < S
+ min(I, max( min(S,I), L) -> min(I, max( I, L))
+
+ case 2a: L > I
+ min(I, max( I, L)) -> min(I, L) -> I
+
+ case 2b: when L < I
+ min(I, max( I, L)) -> min(I, I ) -> I
+
+ so taking all case2 paths is I, our expression is:
+ n_pages = S < I? min(I,L) : I
+ */
+ if (index->stat_index_size > 1) {
+ n_sample_pages = (srv_stats_transient_sample_pages < index->stat_index_size) ?
+ ut_min(index->stat_index_size,
+ log2(index->stat_index_size)*srv_stats_transient_sample_pages)
+ : index->stat_index_size;
+
+ }
}
+ /* Sanity check */
+ ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size < 1 ? 1 : index->stat_index_size));
+
/* We sample some pages in the index to get an estimate */
for (i = 0; i < n_sample_pages; i++) {
@@ -5430,7 +5497,8 @@ btr_copy_blob_prefix(
ulint len, /*!< in: length of buf, in bytes */
ulint space_id,/*!< in: space id of the BLOB pages */
ulint page_no,/*!< in: page number of the first BLOB page */
- ulint offset) /*!< in: offset on the first BLOB page */
+ ulint offset, /*!< in: offset on the first BLOB page */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint copied_len = 0;
@@ -5442,7 +5510,7 @@ btr_copy_blob_prefix(
ulint part_len;
ulint copy_len;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
block = buf_page_get(space_id, 0, page_no, RW_S_LATCH, &mtr);
buf_block_dbg_add_level(block, SYNC_EXTERN_STORAGE);
@@ -5645,7 +5713,8 @@ btr_copy_externally_stored_field_prefix_low(
zero for uncompressed BLOBs */
ulint space_id,/*!< in: space id of the first BLOB page */
ulint page_no,/*!< in: page number of the first BLOB page */
- ulint offset) /*!< in: offset on the first BLOB page */
+ ulint offset, /*!< in: offset on the first BLOB page */
+ trx_t* trx) /*!< in: transaction handle */
{
if (UNIV_UNLIKELY(len == 0)) {
return(0);
@@ -5656,7 +5725,7 @@ btr_copy_externally_stored_field_prefix_low(
space_id, page_no, offset));
} else {
return(btr_copy_blob_prefix(buf, len, space_id,
- page_no, offset));
+ page_no, offset, trx));
}
}
@@ -5677,7 +5746,8 @@ btr_copy_externally_stored_field_prefix(
field containing also the reference to
the external part; must be protected by
a lock or a page latch */
- ulint local_len)/*!< in: length of data, in bytes */
+ ulint local_len,/*!< in: length of data, in bytes */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint space_id;
ulint page_no;
@@ -5716,7 +5786,7 @@ btr_copy_externally_stored_field_prefix(
len - local_len,
zip_size,
space_id, page_no,
- offset));
+ offset, trx));
}
/*******************************************************************//**
@@ -5735,7 +5805,8 @@ btr_copy_externally_stored_field(
ulint zip_size,/*!< in: nonzero=compressed BLOB page size,
zero for uncompressed BLOBs */
ulint local_len,/*!< in: length of data */
- mem_heap_t* heap) /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint space_id;
ulint page_no;
@@ -5766,7 +5837,8 @@ btr_copy_externally_stored_field(
extern_len,
zip_size,
space_id,
- page_no, offset);
+ page_no, offset,
+ trx);
return(buf);
}
@@ -5785,7 +5857,8 @@ btr_rec_copy_externally_stored_field(
zero for uncompressed BLOBs */
ulint no, /*!< in: field number */
ulint* len, /*!< out: length of the field */
- mem_heap_t* heap) /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx) /*!< in: transaction handle */
{
ulint local_len;
const byte* data;
@@ -5816,6 +5889,7 @@ btr_rec_copy_externally_stored_field(
}
return(btr_copy_externally_stored_field(len, data,
- zip_size, local_len, heap));
+ zip_size, local_len, heap,
+ trx));
}
#endif /* !UNIV_HOTBACKUP */
diff --git a/storage/xtradb/btr/btr0pcur.cc b/storage/xtradb/btr/btr0pcur.cc
index 28a60de6ba2..dd6ef484fc3 100644
--- a/storage/xtradb/btr/btr0pcur.cc
+++ b/storage/xtradb/btr/btr0pcur.cc
@@ -501,7 +501,7 @@ btr_pcur_move_backward_from_page(
mtr_commit(mtr);
- mtr_start(mtr);
+ mtr_start_trx(mtr, mtr->trx);
btr_pcur_restore_position(latch_mode2, cursor, mtr);
diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc
index b27178fa8c8..b6c7126978c 100644
--- a/storage/xtradb/buf/buf0buf.cc
+++ b/storage/xtradb/buf/buf0buf.cc
@@ -4411,6 +4411,7 @@ corrupt:
" because of"
" a corrupt database page.\n",
stderr);
+
ut_error;
}
}
@@ -5209,22 +5210,22 @@ Returns the ratio in percents of modified pages in the buffer pool /
database pages in the buffer pool.
@return modified page percentage ratio */
UNIV_INTERN
-ulint
+double
buf_get_modified_ratio_pct(void)
/*============================*/
{
- ulint ratio;
+ double percentage = 0.0;
ulint lru_len = 0;
ulint free_len = 0;
ulint flush_list_len = 0;
buf_get_total_list_len(&lru_len, &free_len, &flush_list_len);
- ratio = (100 * flush_list_len) / (1 + lru_len + free_len);
+ percentage = (100.0 * flush_list_len) / (1.0 + lru_len + free_len);
/* 1 + is there to avoid division by zero */
- return(ratio);
+ return(percentage);
}
/*******************************************************************//**
@@ -5440,6 +5441,8 @@ buf_print_io_instance(
"Database pages %lu\n"
"Old database pages %lu\n"
"Modified db pages %lu\n"
+ "Percent of dirty pages(LRU & free pages): %.3f\n"
+ "Max dirty pages percent: %.3f\n"
"Pending reads %lu\n"
"Pending writes: LRU %lu, flush list %lu, single page %lu\n",
pool_info->pool_size,
@@ -5448,6 +5451,9 @@ buf_print_io_instance(
pool_info->lru_len,
pool_info->old_lru_len,
pool_info->flush_list_len,
+ (((double) pool_info->flush_list_len) /
+ (pool_info->lru_len + pool_info->free_list_len + 1.0)) * 100.0,
+ srv_max_buf_pool_modified_pct,
pool_info->n_pend_reads,
pool_info->n_pending_flush_lru,
pool_info->n_pending_flush_list,
diff --git a/storage/xtradb/buf/buf0flu.cc b/storage/xtradb/buf/buf0flu.cc
index d8aa032dde5..dfd7022e71d 100644
--- a/storage/xtradb/buf/buf0flu.cc
+++ b/storage/xtradb/buf/buf0flu.cc
@@ -2523,7 +2523,14 @@ page_cleaner_flush_pages_if_needed(void)
ulint pct_total = 0;
int age_factor = 0;
- cur_lsn = log_get_lsn();
+ cur_lsn = log_get_lsn_nowait();
+
+ /* log_get_lsn_nowait tries to get log_sys->mutex with
+ mutex_enter_nowait, if this does not succeed function
+ returns 0, do not use that value to update stats. */
+ if (cur_lsn == 0) {
+ return(0);
+ }
if (prev_lsn == 0) {
/* First time around. */
@@ -2751,6 +2758,7 @@ DECLARE_THREAD(buf_flush_page_cleaner_thread)(
next_loop_time = ut_time_ms() + page_cleaner_sleep_time;
server_active = srv_check_activity(last_activity);
+
if (server_active
|| ut_time_ms() - last_activity_time < 1000) {
diff --git a/storage/xtradb/buf/buf0lru.cc b/storage/xtradb/buf/buf0lru.cc
index 3b0319e4e79..e9b6d8f3fb5 100644
--- a/storage/xtradb/buf/buf0lru.cc
+++ b/storage/xtradb/buf/buf0lru.cc
@@ -1282,7 +1282,7 @@ buf_LRU_check_size_of_non_data_objects(
buf_lru_switched_on_innodb_mon = TRUE;
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
}
} else if (buf_lru_switched_on_innodb_mon) {
@@ -1497,7 +1497,7 @@ loop:
mon_value_was = srv_print_innodb_monitor;
started_monitor = TRUE;
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
}
/* If we have scanned the whole LRU and still are unable to
diff --git a/storage/xtradb/dict/dict0dict.cc b/storage/xtradb/dict/dict0dict.cc
index 1292c888e58..a6b8d50c53f 100644
--- a/storage/xtradb/dict/dict0dict.cc
+++ b/storage/xtradb/dict/dict0dict.cc
@@ -1708,6 +1708,10 @@ dict_table_rename_in_cache(
foreign = *it;
+ if (foreign->referenced_table) {
+ foreign->referenced_table->referenced_set.erase(foreign);
+ }
+
if (ut_strlen(foreign->foreign_table_name)
< ut_strlen(table->name)) {
/* Allocate a longer name buffer;
@@ -1859,6 +1863,10 @@ dict_table_rename_in_cache(
table->foreign_set.erase(it);
fk_set.insert(foreign);
+
+ if (foreign->referenced_table) {
+ foreign->referenced_table->referenced_set.insert(foreign);
+ }
}
ut_a(table->foreign_set.empty());
@@ -3278,6 +3286,9 @@ dict_foreign_find(
{
ut_ad(mutex_own(&(dict_sys->mutex)));
+ ut_ad(dict_foreign_set_validate(table->foreign_set));
+ ut_ad(dict_foreign_set_validate(table->referenced_set));
+
dict_foreign_set::iterator it = table->foreign_set.find(foreign);
if (it != table->foreign_set.end()) {
@@ -5634,6 +5645,11 @@ dict_find_table_by_space(
ut_ad(space_id > 0);
+ if (dict_sys == NULL) {
+ /* This could happen when it's in redo processing. */
+ return(NULL);
+ }
+
table = UT_LIST_GET_FIRST(dict_sys->table_LRU);
num_item = UT_LIST_GET_LEN(dict_sys->table_LRU);
diff --git a/storage/xtradb/dict/dict0load.cc b/storage/xtradb/dict/dict0load.cc
index 013a5fb7b37..874614bfb5c 100644
--- a/storage/xtradb/dict/dict0load.cc
+++ b/storage/xtradb/dict/dict0load.cc
@@ -2539,6 +2539,8 @@ func_exit:
}
}
+ ut_ad(err != DB_SUCCESS || dict_foreign_set_validate(*table));
+
return(table);
}
diff --git a/storage/xtradb/dict/dict0mem.cc b/storage/xtradb/dict/dict0mem.cc
index 5e0ffab4bf7..997e630dd15 100644
--- a/storage/xtradb/dict/dict0mem.cc
+++ b/storage/xtradb/dict/dict0mem.cc
@@ -35,6 +35,7 @@ Created 1/8/1996 Heikki Tuuri
#include "mach0data.h"
#include "dict0dict.h"
#include "fts0priv.h"
+#include "ut0crc32.h"
#ifndef UNIV_HOTBACKUP
# include "ha_prototypes.h" /* innobase_casedn_str(),
innobase_get_lower_case_table_names */
@@ -44,6 +45,7 @@ Created 1/8/1996 Heikki Tuuri
#ifdef UNIV_BLOB_DEBUG
# include "ut0rbt.h"
#endif /* UNIV_BLOB_DEBUG */
+#include <iostream>
#define DICT_HEAP_SIZE 100 /*!< initial memory heap size when
creating a table or index object */
@@ -53,6 +55,18 @@ Created 1/8/1996 Heikki Tuuri
UNIV_INTERN mysql_pfs_key_t autoinc_mutex_key;
#endif /* UNIV_PFS_MUTEX */
+/** System databases */
+static const char* innobase_system_databases[] = {
+ "mysql/",
+ "information_schema/",
+ "performance_schema/",
+ NullS
+};
+
+/** An interger randomly initialized at startup used to make a temporary
+table name as unique as possible. */
+static ib_uint32_t dict_temp_file_num;
+
/**********************************************************************//**
Creates a table memory object.
@return own: table object */
@@ -88,6 +102,7 @@ dict_mem_table_create(
table->flags2 = (unsigned int) flags2;
table->name = static_cast<char*>(ut_malloc(strlen(name) + 1));
memcpy(table->name, name, strlen(name) + 1);
+ table->is_system_db = dict_mem_table_is_system(table->name);
table->space = (unsigned int) space;
table->n_cols = (unsigned int) (n_cols + DATA_N_SYS_COLS);
@@ -144,6 +159,36 @@ dict_mem_table_create(
}
/****************************************************************//**
+Determines if a table belongs to a system database
+@return */
+UNIV_INTERN
+bool
+dict_mem_table_is_system(
+/*================*/
+ char *name) /*!< in: table name */
+{
+ ut_ad(name);
+
+ /* table has the following format: database/table
+ and some system table are of the form SYS_* */
+ if (strchr(name, '/')) {
+ int table_len = strlen(name);
+ const char *system_db;
+ int i = 0;
+ while ((system_db = innobase_system_databases[i++])
+ && (system_db != NullS)) {
+ int len = strlen(system_db);
+ if (table_len > len && !strncmp(name, system_db, len)) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/****************************************************************//**
Free a table memory object. */
UNIV_INTERN
void
@@ -630,26 +675,120 @@ dict_mem_index_free(
mem_heap_free(index->heap);
}
-/*******************************************************************//**
-Create a temporary tablename.
-@return temporary tablename suitable for InnoDB use */
+/** Create a temporary tablename like "#sql-ibtid-inc where
+ tid = the Table ID
+ inc = a randomly initialized number that is incremented for each file
+The table ID is a 64 bit integer, can use up to 20 digits, and is
+initialized at bootstrap. The second number is 32 bits, can use up to 10
+digits, and is initialized at startup to a randomly distributed number.
+It is hoped that the combination of these two numbers will provide a
+reasonably unique temporary file name.
+@param[in] heap A memory heap
+@param[in] dbtab Table name in the form database/table name
+@param[in] id Table id
+@return A unique temporary tablename suitable for InnoDB use */
UNIV_INTERN
char*
dict_mem_create_temporary_tablename(
-/*================================*/
- mem_heap_t* heap, /*!< in: memory heap */
- const char* dbtab, /*!< in: database/table name */
- table_id_t id) /*!< in: InnoDB table id */
+ mem_heap_t* heap,
+ const char* dbtab,
+ table_id_t id)
{
- const char* dbend = strchr(dbtab, '/');
+ size_t size;
+ char* name;
+ const char* dbend = strchr(dbtab, '/');
ut_ad(dbend);
- size_t dblen = dbend - dbtab + 1;
- size_t size = tmp_file_prefix_length + 4 + 9 + 9 + dblen;
+ size_t dblen = dbend - dbtab + 1;
- char* name = static_cast<char*>(mem_heap_alloc(heap, size));
+#ifdef HAVE_ATOMIC_BUILTINS
+ /* Increment a randomly initialized number for each temp file. */
+ os_atomic_increment_uint32(&dict_temp_file_num, 1);
+#else /* HAVE_ATOMIC_BUILTINS */
+ dict_temp_file_num++;
+#endif /* HAVE_ATOMIC_BUILTINS */
+
+ size = tmp_file_prefix_length + 3 + 20 + 1 + 10 + dblen;
+ name = static_cast<char*>(mem_heap_alloc(heap, size));
memcpy(name, dbtab, dblen);
ut_snprintf(name + dblen, size - dblen,
- tmp_file_prefix "-ib" UINT64PF, id);
+ TEMP_FILE_PREFIX_INNODB UINT64PF "-" UINT32PF,
+ id, dict_temp_file_num);
+
return(name);
}
+/** Initialize dict memory variables */
+
+void
+dict_mem_init(void)
+{
+ /* Initialize a randomly distributed temporary file number */
+ ib_uint32_t now = static_cast<ib_uint32_t>(ut_time());
+
+ const byte* buf = reinterpret_cast<const byte*>(&now);
+ ut_ad(ut_crc32 != NULL);
+
+ dict_temp_file_num = ut_crc32(buf, sizeof(now));
+
+ DBUG_PRINT("dict_mem_init",
+ ("Starting Temporary file number is " UINT32PF,
+ dict_temp_file_num));
+}
+
+/** Validate the search order in the foreign key set.
+@param[in] fk_set the foreign key set to be validated
+@return true if search order is fine in the set, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_foreign_set& fk_set)
+{
+ dict_foreign_not_exists not_exists(fk_set);
+
+ dict_foreign_set::iterator it = std::find_if(
+ fk_set.begin(), fk_set.end(), not_exists);
+
+ if (it == fk_set.end()) {
+ return(true);
+ }
+
+ dict_foreign_t* foreign = *it;
+ std::cerr << "Foreign key lookup failed: " << *foreign;
+ std::cerr << fk_set;
+ ut_ad(0);
+ return(false);
+}
+
+/** Validate the search order in the foreign key sets of the table
+(foreign_set and referenced_set).
+@param[in] table table whose foreign key sets are to be validated
+@return true if foreign key sets are fine, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_table_t& table)
+{
+ return(dict_foreign_set_validate(table.foreign_set)
+ && dict_foreign_set_validate(table.referenced_set));
+}
+
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_t& foreign)
+{
+ out << "[dict_foreign_t: id='" << foreign.id << "'";
+
+ if (foreign.foreign_table_name != NULL) {
+ out << ",for: '" << foreign.foreign_table_name << "'";
+ }
+
+ out << "]";
+ return(out);
+}
+
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_set& fk_set)
+{
+ out << "[dict_foreign_set:";
+ std::for_each(fk_set.begin(), fk_set.end(), dict_foreign_print(out));
+ out << "]" << std::endl;
+ return(out);
+}
+
diff --git a/storage/xtradb/fil/fil0fil.cc b/storage/xtradb/fil/fil0fil.cc
index d6ed09ed46a..0f3d5c1a0cc 100644
--- a/storage/xtradb/fil/fil0fil.cc
+++ b/storage/xtradb/fil/fil0fil.cc
@@ -149,182 +149,9 @@ UNIV_INTERN mysql_pfs_key_t fil_system_mutex_key;
UNIV_INTERN mysql_pfs_key_t fil_space_latch_key;
#endif /* UNIV_PFS_RWLOCK */
-/** File node of a tablespace or the log data space */
-struct fil_node_t {
- fil_space_t* space; /*!< backpointer to the space where this node
- belongs */
- char* name; /*!< path to the file */
- ibool open; /*!< TRUE if file open */
- os_file_t handle; /*!< OS handle to the file, if file open */
- os_event_t sync_event;/*!< Condition event to group and
- serialize calls to fsync */
- ibool is_raw_disk;/*!< TRUE if the 'file' is actually a raw
- device or a raw disk partition */
- ulint size; /*!< size of the file in database pages, 0 if
- not known yet; the possible last incomplete
- megabyte may be ignored if space == 0 */
- ulint n_pending;
- /*!< count of pending i/o's on this file;
- closing of the file is not allowed if
- this is > 0 */
- ulint n_pending_flushes;
- /*!< count of pending flushes on this file;
- closing of the file is not allowed if
- this is > 0 */
- ibool being_extended;
- /*!< TRUE if the node is currently
- being extended. */
- ib_int64_t modification_counter;/*!< when we write to the file we
- increment this by one */
- ib_int64_t flush_counter;/*!< up to what
- modification_counter value we have
- flushed the modifications to disk */
- ulint file_block_size;/*!< file system block size */
- UT_LIST_NODE_T(fil_node_t) chain;
- /*!< link field for the file chain */
- UT_LIST_NODE_T(fil_node_t) LRU;
- /*!< link field for the LRU list */
- ulint magic_n;/*!< FIL_NODE_MAGIC_N */
-};
-
-/** Value of fil_node_t::magic_n */
-#define FIL_NODE_MAGIC_N 89389
-
-/** Tablespace or log data space: let us call them by a common name space */
-struct fil_space_t {
- char* name; /*!< space name = the path to the first file in
- it */
- ulint id; /*!< space id */
- ib_int64_t tablespace_version;
- /*!< in DISCARD/IMPORT this timestamp
- is used to check if we should ignore
- an insert buffer merge request for a
- page because it actually was for the
- previous incarnation of the space */
- ibool mark; /*!< this is set to TRUE at database startup if
- the space corresponds to a table in the InnoDB
- data dictionary; so we can print a warning of
- orphaned tablespaces */
- ibool stop_ios;/*!< TRUE if we want to rename the
- .ibd file of tablespace and want to
- stop temporarily posting of new i/o
- requests on the file */
- ibool stop_new_ops;
- /*!< we set this TRUE when we start
- deleting a single-table tablespace.
- When this is set following new ops
- are not allowed:
- * read IO request
- * ibuf merge
- * file flush
- Note that we can still possibly have
- new write operations because we don't
- check this flag when doing flush
- batches. */
- ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
- FIL_ARCH_LOG */
- UT_LIST_BASE_NODE_T(fil_node_t) chain;
- /*!< base node for the file chain */
- ulint size; /*!< space size in pages; 0 if a single-table
- tablespace whose size we do not know yet;
- last incomplete megabytes in data files may be
- ignored if space == 0 */
- ulint flags; /*!< tablespace flags; see
- fsp_flags_is_valid(),
- fsp_flags_get_zip_size() */
- ulint n_reserved_extents;
- /*!< number of reserved free extents for
- ongoing operations like B-tree page split */
- ulint n_pending_flushes; /*!< this is positive when flushing
- the tablespace to disk; dropping of the
- tablespace is forbidden if this is positive */
- ulint n_pending_ops;/*!< this is positive when we
- have pending operations against this
- tablespace. The pending operations can
- be ibuf merges or lock validation code
- trying to read a block.
- Dropping of the tablespace is forbidden
- if this is positive */
- hash_node_t hash; /*!< hash chain node */
- hash_node_t name_hash;/*!< hash chain the name_hash table */
-#ifndef UNIV_HOTBACKUP
- prio_rw_lock_t latch; /*!< latch protecting the file space storage
- allocation */
-#endif /* !UNIV_HOTBACKUP */
- UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
- /*!< list of spaces with at least one unflushed
- file we have written to */
- bool is_in_unflushed_spaces;
- /*!< true if this space is currently in
- unflushed_spaces */
- ibool is_corrupt;
- UT_LIST_NODE_T(fil_space_t) space_list;
- /*!< list of all spaces */
- ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
-};
-
-/** Value of fil_space_t::magic_n */
-#define FIL_SPACE_MAGIC_N 89472
-
-/** The tablespace memory cache; also the totality of logs (the log
-data space) is stored here; below we talk about tablespaces, but also
-the ib_logfiles form a 'space' and it is handled here */
-struct fil_system_t {
-#ifndef UNIV_HOTBACKUP
- ib_mutex_t mutex; /*!< The mutex protecting the cache */
-#endif /* !UNIV_HOTBACKUP */
- hash_table_t* spaces; /*!< The hash table of spaces in the
- system; they are hashed on the space
- id */
- hash_table_t* name_hash; /*!< hash table based on the space
- name */
- UT_LIST_BASE_NODE_T(fil_node_t) LRU;
- /*!< base node for the LRU list of the
- most recently used open files with no
- pending i/o's; if we start an i/o on
- the file, we first remove it from this
- list, and return it to the start of
- the list when the i/o ends;
- log files and the system tablespace are
- not put to this list: they are opened
- after the startup, and kept open until
- shutdown */
- UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces;
- /*!< base node for the list of those
- tablespaces whose files contain
- unflushed writes; those spaces have
- at least one file node where
- modification_counter > flush_counter */
- ulint n_open; /*!< number of files currently open */
- ulint max_n_open; /*!< n_open is not allowed to exceed
- this */
- ib_int64_t modification_counter;/*!< when we write to a file we
- increment this by one */
- ulint max_assigned_id;/*!< maximum space id in the existing
- tables, or assigned during the time
- mysqld has been up; at an InnoDB
- startup we scan the data dictionary
- and set here the maximum of the
- space id's of the tables there */
- ib_int64_t tablespace_version;
- /*!< a counter which is incremented for
- every space object memory creation;
- every space mem object gets a
- 'timestamp' from this; in DISCARD/
- IMPORT this is used to check if we
- should ignore an insert buffer merge
- request */
- UT_LIST_BASE_NODE_T(fil_space_t) space_list;
- /*!< list of all file spaces */
- ibool space_id_reuse_warned;
- /* !< TRUE if fil_space_create()
- has issued a warning about
- potential space_id reuse */
-};
-
/** The tablespace memory cache. This variable is NULL before the module is
initialized. */
-static fil_system_t* fil_system = NULL;
+fil_system_t* fil_system = NULL;
/** Determine if (i) is a user tablespace id or not. */
# define fil_is_user_tablespace_id(i) ((i) > srv_undo_tablespaces_open)
diff --git a/storage/xtradb/fts/fts0fts.cc b/storage/xtradb/fts/fts0fts.cc
index 8884e944dfd..d57f1e09b54 100644
--- a/storage/xtradb/fts/fts0fts.cc
+++ b/storage/xtradb/fts/fts0fts.cc
@@ -3393,7 +3393,8 @@ fts_fetch_doc_from_rec(
dict_table_zip_size(table),
clust_pos, &doc->text.f_len,
static_cast<mem_heap_t*>(
- doc->self_heap->arg));
+ doc->self_heap->arg),
+ NULL);
} else {
doc->text.f_str = (byte*) rec_get_nth_field(
clust_rec, offsets, clust_pos,
@@ -7077,7 +7078,8 @@ fts_init_recover_doc(
&doc.text.f_len,
static_cast<byte*>(dfield_get_data(dfield)),
zip_size, len,
- static_cast<mem_heap_t*>(doc.self_heap->arg));
+ static_cast<mem_heap_t*>(doc.self_heap->arg),
+ NULL);
} else {
doc.text.f_str = static_cast<byte*>(
dfield_get_data(dfield));
diff --git a/storage/xtradb/fts/fts0que.cc b/storage/xtradb/fts/fts0que.cc
index beeb31abb9e..1ca5f80b182 100644
--- a/storage/xtradb/fts/fts0que.cc
+++ b/storage/xtradb/fts/fts0que.cc
@@ -1918,7 +1918,8 @@ fts_query_fetch_document(
if (dfield_is_ext(dfield)) {
data = btr_copy_externally_stored_field(
&cur_len, data, phrase->zip_size,
- dfield_get_len(dfield), phrase->heap);
+ dfield_get_len(dfield), phrase->heap,
+ NULL);
} else {
cur_len = dfield_get_len(dfield);
}
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index e74db1e8010..f31b543406c 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -331,9 +331,9 @@ static TYPELIB innodb_empty_free_list_algorithm_typelib = {
};
/* The following counter is used to convey information to InnoDB
-about server activity: in selects it is not sensible to call
-srv_active_wake_master_thread after each fetch or search, we only do
-it every INNOBASE_WAKE_INTERVAL'th step. */
+about server activity: in case of normal DML ops it is not
+sensible to call srv_active_wake_master_thread after each
+operation, we only do it every INNOBASE_WAKE_INTERVAL'th step. */
#define INNOBASE_WAKE_INTERVAL 32
static ulong innobase_active_counter = 0;
@@ -939,6 +939,14 @@ static SHOW_VAR innodb_status_variables[]= {
(char*) &export_vars.innodb_rows_read, SHOW_LONG},
{"rows_updated",
(char*) &export_vars.innodb_rows_updated, SHOW_LONG},
+ {"system_rows_deleted",
+ (char*) &export_vars.innodb_system_rows_deleted, SHOW_LONG},
+ {"system_rows_inserted",
+ (char*) &export_vars.innodb_system_rows_inserted, SHOW_LONG},
+ {"system_rows_read",
+ (char*) &export_vars.innodb_system_rows_read, SHOW_LONG},
+ {"system_rows_updated",
+ (char*) &export_vars.innodb_system_rows_updated, SHOW_LONG},
{"s_lock_os_waits",
(char*) &export_vars.innodb_s_lock_os_waits, SHOW_LONGLONG},
{"s_lock_spin_rounds",
@@ -1317,6 +1325,7 @@ innobase_start_trx_and_assign_read_view(
THD* thd); /* in: MySQL thread handle of the
user for whom the transaction should
be committed */
+#ifdef NOT_USED
/*****************************************************************//**
Creates an InnoDB transaction struct for the thd if it does not yet have one.
Starts a new InnoDB transaction if a transaction is not yet started. And
@@ -1333,6 +1342,7 @@ innobase_start_trx_and_clone_read_view(
THD* from_thd); /* in: MySQL thread handle of the
user session from which the consistent
read should be cloned */
+#endif
/****************************************************************//**
Flushes InnoDB logs to disk and makes a checkpoint. Really, a commit flushes
the logs, and the name of this function should be innobase_checkpoint.
@@ -3061,11 +3071,25 @@ innobase_invalidate_query_cache(
above the InnoDB trx_sys_t->lock. The caller of this function must
not have latches of a lower rank. */
- /* Argument TRUE below means we are using transactions */
#ifdef HAVE_QUERY_CACHE
+ char qcache_key_name[2 * (NAME_LEN + 1)];
+ size_t tabname_len;
+ size_t dbname_len;
+
+ /* Construct the key("db-name\0table$name\0") for the query cache using
+ the path name("db@002dname\0table@0024name\0") of the table in its
+ canonical form. */
+ dbname_len = filename_to_tablename(full_name, qcache_key_name,
+ sizeof(qcache_key_name));
+ tabname_len = filename_to_tablename(full_name + strlen(full_name) + 1,
+ qcache_key_name + dbname_len + 1,
+ sizeof(qcache_key_name)
+ - dbname_len - 1);
+
+ /* Argument TRUE below means we are using transactions */
mysql_query_cache_invalidate4(trx->mysql_thd,
- full_name,
- (uint32) full_name_len,
+ qcache_key_name,
+ (dbname_len + tabname_len + 2),
TRUE);
#endif
}
@@ -3737,7 +3761,7 @@ innobase_change_buffering_inited_ok:
" cannot be set higher than"
" innodb_max_dirty_pages_pct.\n"
"InnoDB: Setting"
- " innodb_max_dirty_pages_pct_lwm to %lu\n",
+ " innodb_max_dirty_pages_pct_lwm to %lf\n",
srv_max_buf_pool_modified_pct);
srv_max_dirty_pages_pct_lwm = srv_max_buf_pool_modified_pct;
@@ -4369,6 +4393,7 @@ innobase_commit_ordered(
DBUG_VOID_RETURN;
}
+#ifdef NOT_USED
/*****************************************************************//**
Creates an InnoDB transaction struct for the thd if it does not yet have one.
Starts a new InnoDB transaction if a transaction is not yet started. And
@@ -4464,6 +4489,7 @@ innobase_start_trx_and_clone_read_view(
DBUG_RETURN(0);
}
+#endif
/*****************************************************************//**
Commits a transaction in an InnoDB database or marks an SQL statement
@@ -4561,10 +4587,6 @@ innobase_commit(
innobase_srv_conc_force_exit_innodb(trx);
- /* Tell the InnoDB server that there might be work for utility
- threads: */
- srv_active_wake_master_thread();
-
DBUG_RETURN(0);
}
@@ -9352,7 +9374,8 @@ ha_innobase::index_read(
row_sel_convert_mysql_key_to_innobase(
prebuilt->search_tuple,
- srch_key_val1, sizeof(srch_key_val1),
+ prebuilt->srch_key_val1,
+ prebuilt->srch_key_val_len,
index,
(byte*) key_ptr,
(ulint) key_len,
@@ -9403,7 +9426,13 @@ ha_innobase::index_read(
case DB_SUCCESS:
error = 0;
table->status = 0;
- srv_stats.n_rows_read.add((size_t) prebuilt->trx->id, 1);
+ if (prebuilt->table->is_system_db) {
+ srv_stats.n_system_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ } else {
+ srv_stats.n_rows_read.add(
+ (size_t) prebuilt->trx->id, 1);
+ }
#ifdef EXTENDED_FOR_USERSTAT
rows_read++;
if (active_index < MAX_KEY)
@@ -12522,11 +12551,6 @@ ha_innobase::delete_table(
log_buffer_flush_to_disk();
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
@@ -12681,11 +12705,6 @@ innobase_drop_database(
log_buffer_flush_to_disk();
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
}
@@ -12840,11 +12859,6 @@ ha_innobase::rename_table(
DEBUG_SYNC(thd, "after_innobase_rename_table");
- /* Tell the InnoDB server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
innobase_commit_low(trx);
trx_free_for_mysql(trx);
@@ -12960,7 +12974,8 @@ ha_innobase::records_in_range(
row_sel_convert_mysql_key_to_innobase(
range_start,
- srch_key_val1, sizeof(srch_key_val1),
+ prebuilt->srch_key_val1,
+ prebuilt->srch_key_val_len,
index,
(byte*) (min_key ? min_key->key :
(const uchar*) 0),
@@ -12972,7 +12987,8 @@ ha_innobase::records_in_range(
row_sel_convert_mysql_key_to_innobase(
range_end,
- srch_key_val2, sizeof(srch_key_val2),
+ prebuilt->srch_key_val2,
+ prebuilt->srch_key_val_len,
index,
(byte*) (max_key ? max_key->key :
(const uchar*) 0),
@@ -12991,7 +13007,7 @@ ha_innobase::records_in_range(
n_rows = btr_estimate_n_rows_in_range(index, range_start,
mode1, range_end,
- mode2);
+ mode2, prebuilt->trx);
} else {
n_rows = HA_POS_ERROR;
@@ -16252,11 +16268,6 @@ innobase_xa_prepare(
trx_mark_sql_stat_end(trx);
}
- /* Tell the InnoDB server that there might be work for utility
- threads: */
-
- srv_active_wake_master_thread();
-
if (thd_sql_command(thd) != SQLCOM_XA_PREPARE
&& (prepare_trx
|| !thd_test_options(
@@ -16475,14 +16486,17 @@ innodb_io_capacity_max_update(
{
ulong in_val = *static_cast<const ulong*>(save);
if (in_val < srv_io_capacity) {
- in_val = srv_io_capacity;
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "innodb_io_capacity_max cannot be"
- " set lower than innodb_io_capacity.");
+ "Setting innodb_io_capacity_max %lu"
+ " lower than innodb_io_capacity %lu.",
+ in_val, srv_io_capacity);
+
+ srv_io_capacity = in_val;
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "Setting innodb_io_capacity_max to %lu",
+ "Setting innodb_io_capacity to %lu",
srv_io_capacity);
}
@@ -16506,14 +16520,18 @@ innodb_io_capacity_update(
{
ulong in_val = *static_cast<const ulong*>(save);
if (in_val > srv_max_io_capacity) {
- in_val = srv_max_io_capacity;
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "innodb_io_capacity cannot be set"
- " higher than innodb_io_capacity_max.");
+ "Setting innodb_io_capacity to %lu"
+ " higher than innodb_io_capacity_max %lu",
+ in_val, srv_max_io_capacity);
+
+ srv_max_io_capacity = in_val * 2;
+
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
- "Setting innodb_io_capacity to %lu",
+ "Setting innodb_max_io_capacity to %lu",
srv_max_io_capacity);
}
@@ -16574,7 +16592,7 @@ innodb_max_dirty_pages_pct_update(
const void* save) /*!< in: immediate result
from check function */
{
- ulong in_val = *static_cast<const ulong*>(save);
+ double in_val = *static_cast<const double*>(save);
if (in_val < srv_max_dirty_pages_pct_lwm) {
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
@@ -16584,7 +16602,7 @@ innodb_max_dirty_pages_pct_update(
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Lowering"
- " innodb_max_dirty_page_pct_lwm to %lu",
+ " innodb_max_dirty_page_pct_lwm to %lf",
in_val);
srv_max_dirty_pages_pct_lwm = in_val;
@@ -16608,7 +16626,7 @@ innodb_max_dirty_pages_pct_lwm_update(
const void* save) /*!< in: immediate result
from check function */
{
- ulong in_val = *static_cast<const ulong*>(save);
+ double in_val = *static_cast<const double*>(save);
if (in_val > srv_max_buf_pool_modified_pct) {
in_val = srv_max_buf_pool_modified_pct;
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
@@ -16619,7 +16637,7 @@ innodb_max_dirty_pages_pct_lwm_update(
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Setting innodb_max_dirty_page_pct_lwm"
- " to %lu",
+ " to %lf",
in_val);
}
@@ -17967,19 +17985,24 @@ innodb_sched_priority_cleaner_update(
{
ulint priority = *static_cast<const ulint *>(save);
ulint actual_priority;
+ ulint nice = 0;
/* Set the priority for the LRU manager thread */
ut_ad(buf_lru_manager_is_active);
+ nice = os_thread_get_priority(srv_lru_manager_tid);
actual_priority = os_thread_set_priority(srv_lru_manager_tid,
priority);
+
if (UNIV_UNLIKELY(actual_priority != priority)) {
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
- ER_WRONG_ARGUMENTS,
- "Failed to set the LRU manager thread "
- "priority to %lu, "
- "the current priority is %lu", priority,
- actual_priority);
+ if (actual_priority+nice != priority) {
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_WRONG_ARGUMENTS,
+ "Failed to set the LRU manager thread "
+ "priority to %lu, "
+ "the nice is %lu and used priority is %lu", priority,
+ nice, actual_priority);
+ }
} else {
srv_sched_priority_cleaner = priority;
@@ -17992,15 +18015,17 @@ innodb_sched_priority_cleaner_update(
}
ut_ad(buf_page_cleaner_is_active);
+ nice = os_thread_get_priority(srv_cleaner_tid);
actual_priority = os_thread_set_priority(srv_cleaner_tid, priority);
if (UNIV_UNLIKELY(actual_priority != priority)) {
-
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
- ER_WRONG_ARGUMENTS,
- "Failed to set the page cleaner thread "
- "priority to %lu, "
- "the current priority is %lu", priority,
- actual_priority);
+ if (actual_priority+nice != priority) {
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_WRONG_ARGUMENTS,
+ "Failed to set the page cleaner thread "
+ "priority to %lu, "
+ "the nice is %lu and used priority is %lu", priority,
+ nice, actual_priority);
+ }
}
}
@@ -18029,20 +18054,21 @@ innodb_sched_priority_purge_update(
ut_ad(purge_sys->state == PURGE_STATE_RUN);
for (ulint i = 0; i < srv_n_purge_threads; i++) {
-
+ ulint nice = os_thread_get_priority(srv_purge_tids[i]);
ulint actual_priority
= os_thread_set_priority(srv_purge_tids[i], priority);
if (UNIV_UNLIKELY(actual_priority != priority)) {
-
- push_warning_printf(thd,
+ if (actual_priority+nice != priority) {
+ push_warning_printf(thd,
Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Failed to set the purge "
"thread priority to %lu, the "
- "current priority is %lu, "
+ "nice is %lu the current priority is %lu, "
"aborting priority update",
- priority, actual_priority);
- return;
+ priority, nice, actual_priority);
+ return;
+ }
}
}
@@ -18067,21 +18093,23 @@ innodb_sched_priority_io_update(
ulint priority = *static_cast<const ulint *>(save);
for (ulint i = 0; i < srv_n_file_io_threads; i++) {
-
+ ulint nice = os_thread_get_priority(srv_io_tids[i]);
ulint actual_priority = os_thread_set_priority(srv_io_tids[i],
priority);
if (UNIV_UNLIKELY(actual_priority != priority)) {
- push_warning_printf(thd,
+ if (actual_priority+nice != priority) {
+ push_warning_printf(thd,
Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Failed to set the I/O "
"thread priority to %lu, the "
- "current priority is %lu, "
+ "nice is %lu the current priority is %lu, "
"aborting priority update",
- priority, actual_priority);
- return;
+ priority, nice, actual_priority);
+ return;
+ }
}
}
@@ -18105,20 +18133,23 @@ innodb_sched_priority_master_update(
{
ulint priority = *static_cast<const lint *>(save);
ulint actual_priority;
+ ulint nice;
if (srv_read_only_mode) {
return;
}
+ nice = os_thread_get_priority(srv_master_tid);
actual_priority = os_thread_set_priority(srv_master_tid, priority);
if (UNIV_UNLIKELY(actual_priority != priority)) {
-
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ if (actual_priority+nice != priority) {
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"Failed to set the master thread "
"priority to %lu, "
- "the current priority is %lu", priority,
- actual_priority);
+ "the nice is %lu and the current priority is %lu", priority,
+ nice, actual_priority);
+ }
} else {
srv_sched_priority_master = priority;
@@ -18602,9 +18633,8 @@ innodb_status_output_update(
const void* save __attribute__((unused)))
{
*static_cast<my_bool*>(var_ptr) = *static_cast<const my_bool*>(save);
- /* The lock timeout monitor thread also takes care of this
- output. */
- os_event_set(lock_sys->timeout_event);
+ /* Wakeup server monitor thread. */
+ os_event_set(srv_monitor_event);
}
static SHOW_VAR innodb_status_variables_export[]= {
@@ -19188,22 +19218,22 @@ static MYSQL_SYSVAR_ULONG(log_arch_expire_sec,
"Expiration time for archived innodb transaction logs.",
NULL, innodb_log_archive_expire_update, 0, 0, ~0UL, 0);
-static MYSQL_SYSVAR_ULONG(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
+static MYSQL_SYSVAR_DOUBLE(max_dirty_pages_pct, srv_max_buf_pool_modified_pct,
PLUGIN_VAR_RQCMDARG,
"Percentage of dirty pages allowed in bufferpool.",
- NULL, innodb_max_dirty_pages_pct_update, 75, 0, 99, 0);
+ NULL, innodb_max_dirty_pages_pct_update, 75.0, 0.001, 99.999, 0);
-static MYSQL_SYSVAR_ULONG(max_dirty_pages_pct_lwm,
+static MYSQL_SYSVAR_DOUBLE(max_dirty_pages_pct_lwm,
srv_max_dirty_pages_pct_lwm,
PLUGIN_VAR_RQCMDARG,
"Percentage of dirty pages at which flushing kicks in.",
- NULL, innodb_max_dirty_pages_pct_lwm_update, 0, 0, 99, 0);
+ NULL, innodb_max_dirty_pages_pct_lwm_update, 0.001, 0.000, 99.999, 0);
-static MYSQL_SYSVAR_ULONG(adaptive_flushing_lwm,
+static MYSQL_SYSVAR_DOUBLE(adaptive_flushing_lwm,
srv_adaptive_flushing_lwm,
PLUGIN_VAR_RQCMDARG,
"Percentage of log capacity below which no adaptive flushing happens.",
- NULL, NULL, 10, 0, 70, 0);
+ NULL, NULL, 10.0, 0.0, 70.0, 0);
static MYSQL_SYSVAR_BOOL(adaptive_flushing, srv_adaptive_flushing,
PLUGIN_VAR_NOCMDARG,
@@ -19278,6 +19308,16 @@ static MYSQL_SYSVAR_ULONGLONG(stats_persistent_sample_pages,
"statistics (by ANALYZE, default 20)",
NULL, NULL, 20, 1, ~0ULL, 0);
+static MYSQL_SYSVAR_ULONGLONG(stats_modified_counter, srv_stats_modified_counter,
+ PLUGIN_VAR_RQCMDARG,
+ "The number of rows modified before we calculate new statistics (default 0 = current limits)",
+ NULL, NULL, 0, 0, ~0ULL, 0);
+
+static MYSQL_SYSVAR_BOOL(stats_traditional, srv_stats_sample_traditional,
+ PLUGIN_VAR_RQCMDARG,
+ "Enable traditional statistic calculation based on number of configured pages (default true)",
+ NULL, NULL, TRUE);
+
static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
PLUGIN_VAR_OPCMDARG,
"Enable InnoDB adaptive hash index (enabled by default). "
@@ -20250,6 +20290,8 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(stats_persistent),
MYSQL_SYSVAR(stats_persistent_sample_pages),
MYSQL_SYSVAR(stats_auto_recalc),
+ MYSQL_SYSVAR(stats_modified_counter),
+ MYSQL_SYSVAR(stats_traditional),
MYSQL_SYSVAR(adaptive_hash_index),
MYSQL_SYSVAR(adaptive_hash_index_partitions),
MYSQL_SYSVAR(stats_method),
diff --git a/storage/xtradb/handler/ha_innodb.h b/storage/xtradb/handler/ha_innodb.h
index 2d70c67d3bf..e649fc09b1d 100644
--- a/storage/xtradb/handler/ha_innodb.h
+++ b/storage/xtradb/handler/ha_innodb.h
@@ -88,13 +88,6 @@ class ha_innobase: public handler
uchar* upd_buf; /*!< buffer used in updates */
ulint upd_buf_size; /*!< the size of upd_buf in bytes */
- uchar srch_key_val1[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
- uchar srch_key_val2[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
- /*!< buffers used in converting
- search key values from MySQL format
- to InnoDB format. For each column
- 2 bytes are used to store length,
- hence MAX_REF_PARTS*2. */
Table_flags int_table_flags;
uint primary_key;
ulong start_of_scan; /*!< this is set to 1 when we are
diff --git a/storage/xtradb/handler/handler0alter.cc b/storage/xtradb/handler/handler0alter.cc
index 85c77f4d8a2..abea5c45058 100644
--- a/storage/xtradb/handler/handler0alter.cc
+++ b/storage/xtradb/handler/handler0alter.cc
@@ -22,6 +22,7 @@ this program; if not, write to the Free Software Foundation, Inc.,
Smart ALTER TABLE
*******************************************************/
+#include <my_global.h>
#include <unireg.h>
#include <mysqld_error.h>
#include <log.h>
@@ -2260,7 +2261,7 @@ innobase_check_foreigns_low(
/* Check if any FOREIGN KEY constraints are defined on this
column. */
- for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
+ for (dict_foreign_set::const_iterator it = user_table->foreign_set.begin();
it != user_table->foreign_set.end();
++it) {
@@ -2297,7 +2298,7 @@ innobase_check_foreigns_low(
/* Check if any FOREIGN KEY constraints in other tables are
referring to the column that is being dropped. */
- for (dict_foreign_set::iterator it
+ for (dict_foreign_set::const_iterator it
= user_table->referenced_set.begin();
it != user_table->referenced_set.end();
++it) {
@@ -2483,7 +2484,7 @@ innobase_build_col_map(
innobase_build_col_map_add(
heap, dtuple_get_nth_field(add_cols, i),
- altered_table->s->field[sql_idx],
+ altered_table->field[sql_idx],
dict_table_is_comp(new_table));
found_col:
i++;
@@ -2689,7 +2690,7 @@ prepare_inplace_alter_table_dict(
if (UNIV_UNLIKELY(ctx->trx->fake_changes)) {
trx_rollback_to_savepoint(ctx->trx, NULL);
trx_free_for_mysql(ctx->trx);
- DBUG_RETURN(HA_ERR_WRONG_COMMAND);
+ DBUG_RETURN(true);
}
trx_start_for_ddl(ctx->trx, TRX_DICT_OP_INDEX);
@@ -3278,9 +3279,6 @@ err_exit:
delete ctx;
ha_alter_info->handler_ctx = NULL;
- /* There might be work for utility threads.*/
- srv_active_wake_master_thread();
-
DBUG_RETURN(true);
}
@@ -3409,7 +3407,7 @@ ha_innobase::prepare_inplace_alter_table(
DBUG_ASSERT(!srv_read_only_mode);
if (UNIV_UNLIKELY(prebuilt->trx->fake_changes)) {
- DBUG_RETURN(HA_ERR_WRONG_COMMAND);
+ DBUG_RETURN(true);
}
/* Init online ddl status variables */
@@ -4331,7 +4329,6 @@ func_exit:
}
trx_commit_for_mysql(prebuilt->trx);
- srv_active_wake_master_thread();
MONITOR_ATOMIC_DEC(MONITOR_PENDING_ALTER_TABLE);
DBUG_RETURN(fail);
}
@@ -4505,7 +4502,7 @@ err_exit:
rename_foreign:
trx->op_info = "renaming column in SYS_FOREIGN_COLS";
- for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
+ for (dict_foreign_set::const_iterator it = user_table->foreign_set.begin();
it != user_table->foreign_set.end();
++it) {
@@ -4540,7 +4537,7 @@ rename_foreign:
}
}
- for (dict_foreign_set::iterator it
+ for (dict_foreign_set::const_iterator it
= user_table->referenced_set.begin();
it != user_table->referenced_set.end();
++it) {
@@ -4844,14 +4841,17 @@ innobase_update_foreign_try(
/** Update the foreign key constraint definitions in the data dictionary cache
after the changes to data dictionary tables were committed.
@param ctx In-place ALTER TABLE context
+@param user_thd MySQL connection
@return InnoDB error code (should always be DB_SUCCESS) */
static __attribute__((nonnull, warn_unused_result))
dberr_t
innobase_update_foreign_cache(
/*==========================*/
- ha_innobase_inplace_ctx* ctx)
+ ha_innobase_inplace_ctx* ctx,
+ THD* user_thd)
{
dict_table_t* user_table;
+ dberr_t err = DB_SUCCESS;
DBUG_ENTER("innobase_update_foreign_cache");
@@ -4886,9 +4886,34 @@ innobase_update_foreign_cache(
/* Load the old or added foreign keys from the data dictionary
and prevent the table from being evicted from the data
dictionary cache (work around the lack of WL#6049). */
- DBUG_RETURN(dict_load_foreigns(user_table->name,
- ctx->col_names, false, true,
- DICT_ERR_IGNORE_NONE));
+ err = dict_load_foreigns(user_table->name,
+ ctx->col_names, false, true,
+ DICT_ERR_IGNORE_NONE);
+
+ if (err == DB_CANNOT_ADD_CONSTRAINT) {
+ /* It is possible there are existing foreign key are
+ loaded with "foreign_key checks" off,
+ so let's retry the loading with charset_check is off */
+ err = dict_load_foreigns(user_table->name,
+ ctx->col_names, false, false,
+ DICT_ERR_IGNORE_NONE);
+
+ /* The load with "charset_check" off is successful, warn
+ the user that the foreign key has loaded with mis-matched
+ charset */
+ if (err == DB_SUCCESS) {
+ push_warning_printf(
+ user_thd,
+ Sql_condition::WARN_LEVEL_WARN,
+ ER_ALTER_INFO,
+ "Foreign key constraints for table '%s'"
+ " are loaded with charset check off",
+ user_table->name);
+
+ }
+ }
+
+ DBUG_RETURN(err);
}
/** Commit the changes made during prepare_inplace_alter_table()
@@ -5766,12 +5791,12 @@ ha_innobase::commit_inplace_alter_table(
/* Rename the tablespace files. */
commit_cache_rebuild(ctx);
- error = innobase_update_foreign_cache(ctx);
+ error = innobase_update_foreign_cache(ctx, user_thd);
if (error != DB_SUCCESS) {
goto foreign_fail;
}
} else {
- error = innobase_update_foreign_cache(ctx);
+ error = innobase_update_foreign_cache(ctx, user_thd);
if (error != DB_SUCCESS) {
foreign_fail:
diff --git a/storage/xtradb/handler/i_s.cc b/storage/xtradb/handler/i_s.cc
index 20e30897ace..589117d0858 100644
--- a/storage/xtradb/handler/i_s.cc
+++ b/storage/xtradb/handler/i_s.cc
@@ -22,6 +22,7 @@ InnoDB INFORMATION SCHEMA tables interface to MySQL.
Created July 18, 2007 Vasil Dimov
*******************************************************/
+#include <my_global.h>
#ifndef MYSQL_SERVER
#define MYSQL_SERVER /* For Item_* classes */
#include <item.h>
diff --git a/storage/xtradb/include/btr0cur.h b/storage/xtradb/include/btr0cur.h
index 4ed66e76fe0..f4b91b08fc5 100644
--- a/storage/xtradb/include/btr0cur.h
+++ b/storage/xtradb/include/btr0cur.h
@@ -567,7 +567,8 @@ btr_estimate_n_rows_in_range(
const dtuple_t* tuple1, /*!< in: range start, may also be empty tuple */
ulint mode1, /*!< in: search mode for range start */
const dtuple_t* tuple2, /*!< in: range end, may also be empty tuple */
- ulint mode2); /*!< in: search mode for range end */
+ ulint mode2, /*!< in: search mode for range end */
+ trx_t* trx); /*!< in: trx */
/*******************************************************************//**
Estimates the number of different key values in a given index, for
each n-column prefix of the index where 1 <= n <= dict_index_get_n_unique(index).
@@ -703,7 +704,8 @@ btr_copy_externally_stored_field_prefix(
field containing also the reference to
the external part; must be protected by
a lock or a page latch */
- ulint local_len);/*!< in: length of data, in bytes */
+ ulint local_len,/*!< in: length of data, in bytes */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Copies an externally stored field of a record to mem heap. The
clustered index record must be protected by a lock or a page latch.
@@ -720,7 +722,8 @@ btr_copy_externally_stored_field(
ulint zip_size,/*!< in: nonzero=compressed BLOB page size,
zero for uncompressed BLOBs */
ulint local_len,/*!< in: length of data */
- mem_heap_t* heap); /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Copies an externally stored field of a record to mem heap.
@return the field copied to heap, or NULL if the field is incomplete */
@@ -735,7 +738,8 @@ btr_rec_copy_externally_stored_field(
zero for uncompressed BLOBs */
ulint no, /*!< in: field number */
ulint* len, /*!< out: length of the field */
- mem_heap_t* heap); /*!< in: mem heap */
+ mem_heap_t* heap, /*!< in: mem heap */
+ trx_t* trx); /*!< in: transaction handle */
/*******************************************************************//**
Flags the data tuple fields that are marked as extern storage in the
update vector. We use this function to remember which fields we must
diff --git a/storage/xtradb/include/buf0buf.h b/storage/xtradb/include/buf0buf.h
index 84db9cfcf2b..c8f5242d011 100644
--- a/storage/xtradb/include/buf0buf.h
+++ b/storage/xtradb/include/buf0buf.h
@@ -793,7 +793,7 @@ Returns the ratio in percents of modified pages in the buffer pool /
database pages in the buffer pool.
@return modified page percentage ratio */
UNIV_INTERN
-ulint
+double
buf_get_modified_ratio_pct(void);
/*============================*/
/**********************************************************************//**
diff --git a/storage/xtradb/include/dict0mem.h b/storage/xtradb/include/dict0mem.h
index 5bea2334131..a5c58aaab8c 100644
--- a/storage/xtradb/include/dict0mem.h
+++ b/storage/xtradb/include/dict0mem.h
@@ -53,6 +53,7 @@ Created 1/8/1996 Heikki Tuuri
#include "os0once.h"
#include <set>
#include <algorithm>
+#include <iterator>
/* Forward declaration. */
struct ib_rbt_t;
@@ -316,6 +317,14 @@ dict_mem_table_create(
bool nonshared);/*!< in: whether the table object is a dummy
one that does not need the initialization of
locking-related fields. */
+/**********************************************************************//**
+Determines if a table belongs to a system database
+@return true if table belong to a system database */
+UNIV_INTERN
+bool
+dict_mem_table_is_system(
+/*==================*/
+ char *name); /*!< in: table name */
/****************************************************************//**
Free a table memory object. */
UNIV_INTERN
@@ -444,16 +453,29 @@ dict_mem_referenced_table_name_lookup_set(
dict_foreign_t* foreign, /*!< in/out: foreign struct */
ibool do_alloc); /*!< in: is an alloc needed */
-/*******************************************************************//**
-Create a temporary tablename.
-@return temporary tablename suitable for InnoDB use */
-UNIV_INTERN __attribute__((nonnull, warn_unused_result))
+/** Create a temporary tablename like "#sql-ibtid-inc where
+ tid = the Table ID
+ inc = a randomly initialized number that is incremented for each file
+The table ID is a 64 bit integer, can use up to 20 digits, and is
+initialized at bootstrap. The second number is 32 bits, can use up to 10
+digits, and is initialized at startup to a randomly distributed number.
+It is hoped that the combination of these two numbers will provide a
+reasonably unique temporary file name.
+@param[in] heap A memory heap
+@param[in] dbtab Table name in the form database/table name
+@param[in] id Table id
+@return A unique temporary tablename suitable for InnoDB use */
+UNIV_INTERN
char*
dict_mem_create_temporary_tablename(
-/*================================*/
- mem_heap_t* heap, /*!< in: memory heap */
- const char* dbtab, /*!< in: database/table name */
- table_id_t id); /*!< in: InnoDB table id */
+ mem_heap_t* heap,
+ const char* dbtab,
+ table_id_t id);
+
+/** Initialize dict memory variables */
+
+void
+dict_mem_init(void);
/** Data structure for a column in a table */
struct dict_col_t{
@@ -798,6 +820,22 @@ struct dict_foreign_t{
dict_index_t* referenced_index;/*!< referenced index */
};
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_t& foreign);
+
+struct dict_foreign_print {
+
+ dict_foreign_print(std::ostream& out)
+ : m_out(out)
+ {}
+
+ void operator()(const dict_foreign_t* foreign) {
+ m_out << *foreign;
+ }
+private:
+ std::ostream& m_out;
+};
+
/** Compare two dict_foreign_t objects using their ids. Used in the ordering
of dict_table_t::foreign_set and dict_table_t::referenced_set. It returns
true if the first argument is considered to go before the second in the
@@ -867,6 +905,40 @@ struct dict_foreign_matches_id {
typedef std::set<dict_foreign_t*, dict_foreign_compare> dict_foreign_set;
+std::ostream&
+operator<< (std::ostream& out, const dict_foreign_set& fk_set);
+
+/** Function object to check if a foreign key object is there
+in the given foreign key set or not. It returns true if the
+foreign key is not found, false otherwise */
+struct dict_foreign_not_exists {
+ dict_foreign_not_exists(const dict_foreign_set& obj_)
+ : m_foreigns(obj_)
+ {}
+
+ /* Return true if the given foreign key is not found */
+ bool operator()(dict_foreign_t* const & foreign) const {
+ return(m_foreigns.find(foreign) == m_foreigns.end());
+ }
+private:
+ const dict_foreign_set& m_foreigns;
+};
+
+/** Validate the search order in the foreign key set.
+@param[in] fk_set the foreign key set to be validated
+@return true if search order is fine in the set, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_foreign_set& fk_set);
+
+/** Validate the search order in the foreign key sets of the table
+(foreign_set and referenced_set).
+@param[in] table table whose foreign key sets are to be validated
+@return true if foreign key sets are fine, false otherwise. */
+bool
+dict_foreign_set_validate(
+ const dict_table_t& table);
+
/*********************************************************************//**
Frees a foreign key struct. */
inline
@@ -968,6 +1040,10 @@ struct dict_table_t{
the string contains n_cols, it will be
allocated from a temporary heap. The final
string will be allocated from table->heap. */
+ bool is_system_db;
+ /*!< True if the table belongs to a system
+ database (mysql, information_schema or
+ performance_schema) */
#ifndef UNIV_HOTBACKUP
hash_node_t name_hash; /*!< hash chain node */
hash_node_t id_hash; /*!< hash chain node */
diff --git a/storage/xtradb/include/dict0types.h b/storage/xtradb/include/dict0types.h
index d9cc5cd607f..909fdf9cf3d 100644
--- a/storage/xtradb/include/dict0types.h
+++ b/storage/xtradb/include/dict0types.h
@@ -79,6 +79,7 @@ enum ib_quiesce_t {
/** Prefix for tmp tables, adopted from sql/table.h */
#define tmp_file_prefix "#sql"
#define tmp_file_prefix_length 4
+#define TEMP_FILE_PREFIX_INNODB "#sql-ib"
#define TEMP_TABLE_PREFIX "#sql"
#define TEMP_TABLE_PATH_PREFIX "/" TEMP_TABLE_PREFIX
diff --git a/storage/xtradb/include/fil0fil.h b/storage/xtradb/include/fil0fil.h
index c2d113bdc1f..3a8a1ae4013 100644
--- a/storage/xtradb/include/fil0fil.h
+++ b/storage/xtradb/include/fil0fil.h
@@ -34,6 +34,7 @@ Created 10/25/1995 Heikki Tuuri
#include "dict0types.h"
#include "ut0byte.h"
#include "os0file.h"
+#include "hash0hash.h"
#ifndef UNIV_HOTBACKUP
#include "sync0rw.h"
#include "ibuf0types.h"
@@ -216,6 +217,185 @@ struct fsp_open_info {
ulint flags; /*!< Tablespace flags */
};
+struct fil_space_t;
+
+/** File node of a tablespace or the log data space */
+struct fil_node_t {
+ fil_space_t* space; /*!< backpointer to the space where this node
+ belongs */
+ char* name; /*!< path to the file */
+ ibool open; /*!< TRUE if file open */
+ os_file_t handle; /*!< OS handle to the file, if file open */
+ os_event_t sync_event;/*!< Condition event to group and
+ serialize calls to fsync */
+ ibool is_raw_disk;/*!< TRUE if the 'file' is actually a raw
+ device or a raw disk partition */
+ ulint size; /*!< size of the file in database pages, 0 if
+ not known yet; the possible last incomplete
+ megabyte may be ignored if space == 0 */
+ ulint n_pending;
+ /*!< count of pending i/o's on this file;
+ closing of the file is not allowed if
+ this is > 0 */
+ ulint n_pending_flushes;
+ /*!< count of pending flushes on this file;
+ closing of the file is not allowed if
+ this is > 0 */
+ ibool being_extended;
+ /*!< TRUE if the node is currently
+ being extended. */
+ ib_int64_t modification_counter;/*!< when we write to the file we
+ increment this by one */
+ ib_int64_t flush_counter;/*!< up to what
+ modification_counter value we have
+ flushed the modifications to disk */
+ ulint file_block_size;/*!< file system block size */
+ UT_LIST_NODE_T(fil_node_t) chain;
+ /*!< link field for the file chain */
+ UT_LIST_NODE_T(fil_node_t) LRU;
+ /*!< link field for the LRU list */
+ ulint magic_n;/*!< FIL_NODE_MAGIC_N */
+};
+
+/** Value of fil_node_t::magic_n */
+#define FIL_NODE_MAGIC_N 89389
+
+/** Tablespace or log data space: let us call them by a common name space */
+struct fil_space_t {
+ char* name; /*!< space name = the path to the first file in
+ it */
+ ulint id; /*!< space id */
+ ib_int64_t tablespace_version;
+ /*!< in DISCARD/IMPORT this timestamp
+ is used to check if we should ignore
+ an insert buffer merge request for a
+ page because it actually was for the
+ previous incarnation of the space */
+ ibool mark; /*!< this is set to TRUE at database startup if
+ the space corresponds to a table in the InnoDB
+ data dictionary; so we can print a warning of
+ orphaned tablespaces */
+ ibool stop_ios;/*!< TRUE if we want to rename the
+ .ibd file of tablespace and want to
+ stop temporarily posting of new i/o
+ requests on the file */
+ ibool stop_new_ops;
+ /*!< we set this TRUE when we start
+ deleting a single-table tablespace.
+ When this is set following new ops
+ are not allowed:
+ * read IO request
+ * ibuf merge
+ * file flush
+ Note that we can still possibly have
+ new write operations because we don't
+ check this flag when doing flush
+ batches. */
+ ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
+ FIL_ARCH_LOG */
+ UT_LIST_BASE_NODE_T(fil_node_t) chain;
+ /*!< base node for the file chain */
+ ulint size; /*!< space size in pages; 0 if a single-table
+ tablespace whose size we do not know yet;
+ last incomplete megabytes in data files may be
+ ignored if space == 0 */
+ ulint flags; /*!< tablespace flags; see
+ fsp_flags_is_valid(),
+ fsp_flags_get_zip_size() */
+ ulint n_reserved_extents;
+ /*!< number of reserved free extents for
+ ongoing operations like B-tree page split */
+ ulint n_pending_flushes; /*!< this is positive when flushing
+ the tablespace to disk; dropping of the
+ tablespace is forbidden if this is positive */
+ ulint n_pending_ops;/*!< this is positive when we
+ have pending operations against this
+ tablespace. The pending operations can
+ be ibuf merges or lock validation code
+ trying to read a block.
+ Dropping of the tablespace is forbidden
+ if this is positive */
+ hash_node_t hash; /*!< hash chain node */
+ hash_node_t name_hash;/*!< hash chain the name_hash table */
+#ifndef UNIV_HOTBACKUP
+ prio_rw_lock_t latch; /*!< latch protecting the file space storage
+ allocation */
+#endif /* !UNIV_HOTBACKUP */
+ UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
+ /*!< list of spaces with at least one unflushed
+ file we have written to */
+ bool is_in_unflushed_spaces;
+ /*!< true if this space is currently in
+ unflushed_spaces */
+ ibool is_corrupt;
+ UT_LIST_NODE_T(fil_space_t) space_list;
+ /*!< list of all spaces */
+ ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
+};
+
+/** Value of fil_space_t::magic_n */
+#define FIL_SPACE_MAGIC_N 89472
+
+/** The tablespace memory cache; also the totality of logs (the log
+data space) is stored here; below we talk about tablespaces, but also
+the ib_logfiles form a 'space' and it is handled here */
+struct fil_system_t {
+#ifndef UNIV_HOTBACKUP
+ ib_mutex_t mutex; /*!< The mutex protecting the cache */
+#endif /* !UNIV_HOTBACKUP */
+ hash_table_t* spaces; /*!< The hash table of spaces in the
+ system; they are hashed on the space
+ id */
+ hash_table_t* name_hash; /*!< hash table based on the space
+ name */
+ UT_LIST_BASE_NODE_T(fil_node_t) LRU;
+ /*!< base node for the LRU list of the
+ most recently used open files with no
+ pending i/o's; if we start an i/o on
+ the file, we first remove it from this
+ list, and return it to the start of
+ the list when the i/o ends;
+ log files and the system tablespace are
+ not put to this list: they are opened
+ after the startup, and kept open until
+ shutdown */
+ UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces;
+ /*!< base node for the list of those
+ tablespaces whose files contain
+ unflushed writes; those spaces have
+ at least one file node where
+ modification_counter > flush_counter */
+ ulint n_open; /*!< number of files currently open */
+ ulint max_n_open; /*!< n_open is not allowed to exceed
+ this */
+ ib_int64_t modification_counter;/*!< when we write to a file we
+ increment this by one */
+ ulint max_assigned_id;/*!< maximum space id in the existing
+ tables, or assigned during the time
+ mysqld has been up; at an InnoDB
+ startup we scan the data dictionary
+ and set here the maximum of the
+ space id's of the tables there */
+ ib_int64_t tablespace_version;
+ /*!< a counter which is incremented for
+ every space object memory creation;
+ every space mem object gets a
+ 'timestamp' from this; in DISCARD/
+ IMPORT this is used to check if we
+ should ignore an insert buffer merge
+ request */
+ UT_LIST_BASE_NODE_T(fil_space_t) space_list;
+ /*!< list of all file spaces */
+ ibool space_id_reuse_warned;
+ /* !< TRUE if fil_space_create()
+ has issued a warning about
+ potential space_id reuse */
+};
+
+/** The tablespace memory cache. This variable is NULL before the module is
+initialized. */
+extern fil_system_t* fil_system;
+
#ifndef UNIV_HOTBACKUP
/*******************************************************************//**
Returns the version number of a tablespace, -1 if not found.
diff --git a/storage/xtradb/include/log0log.ic b/storage/xtradb/include/log0log.ic
index 853027daa7e..ff5a83be249 100644
--- a/storage/xtradb/include/log0log.ic
+++ b/storage/xtradb/include/log0log.ic
@@ -494,14 +494,14 @@ lsn_t
log_get_lsn_nowait(void)
/*=============*/
{
- lsn_t lsn;
+ lsn_t lsn=0;
- if (mutex_enter_nowait(&(log_sys->mutex)))
- return 0;
+ if (!mutex_enter_nowait(&(log_sys->mutex))) {
- lsn = log_sys->lsn;
+ lsn = log_sys->lsn;
- mutex_exit(&(log_sys->mutex));
+ mutex_exit(&(log_sys->mutex));
+ }
return(lsn);
}
diff --git a/storage/xtradb/include/mtr0mtr.h b/storage/xtradb/include/mtr0mtr.h
index 0730e870b3f..827039953be 100644
--- a/storage/xtradb/include/mtr0mtr.h
+++ b/storage/xtradb/include/mtr0mtr.h
@@ -35,6 +35,7 @@ Created 11/26/1995 Heikki Tuuri
#include "ut0byte.h"
#include "mtr0types.h"
#include "page0types.h"
+#include "trx0types.h"
/* Logging modes for a mini-transaction */
#define MTR_LOG_ALL 21 /* default mode: log all operations
@@ -204,10 +205,22 @@ functions). The page number parameter was originally written as 0. @{ */
Starts a mini-transaction. */
UNIV_INLINE
void
+mtr_start_trx(
+/*======*/
+ mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx) /*!< in: transaction */
+ __attribute__((nonnull (1)));
+/***************************************************************//**
+Starts a mini-transaction. */
+UNIV_INLINE
+void
mtr_start(
/*======*/
mtr_t* mtr) /*!< out: mini-transaction */
- __attribute__((nonnull));
+{
+ mtr_start_trx(mtr, NULL);
+}
+ __attribute__((nonnull))
/***************************************************************//**
Commits a mini-transaction. */
UNIV_INTERN
@@ -403,6 +416,7 @@ struct mtr_t{
#ifdef UNIV_DEBUG
ulint magic_n;
#endif /* UNIV_DEBUG */
+ trx_t* trx; /*!< transaction */
};
#ifdef UNIV_DEBUG
diff --git a/storage/xtradb/include/mtr0mtr.ic b/storage/xtradb/include/mtr0mtr.ic
index cc021038001..aade8c3d82a 100644
--- a/storage/xtradb/include/mtr0mtr.ic
+++ b/storage/xtradb/include/mtr0mtr.ic
@@ -43,9 +43,10 @@ mtr_block_dirtied(
Starts a mini-transaction. */
UNIV_INLINE
void
-mtr_start(
+mtr_start_trx(
/*======*/
- mtr_t* mtr) /*!< out: mini-transaction */
+ mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx) /*!< in: transaction */
{
UNIV_MEM_INVALID(mtr, sizeof *mtr);
@@ -58,6 +59,7 @@ mtr_start(
mtr->made_dirty = FALSE;
mtr->n_log_recs = 0;
mtr->n_freed_pages = 0;
+ mtr->trx = trx;
ut_d(mtr->state = MTR_ACTIVE);
ut_d(mtr->magic_n = MTR_MAGIC_N);
diff --git a/storage/xtradb/include/os0file.h b/storage/xtradb/include/os0file.h
index 518c1605e96..89a1d8c0fe4 100644
--- a/storage/xtradb/include/os0file.h
+++ b/storage/xtradb/include/os0file.h
@@ -145,6 +145,7 @@ enum os_file_create_t {
/* @} */
/** Error codes from os_file_get_last_error @{ */
+#define OS_FILE_NAME_TOO_LONG 36
#define OS_FILE_NOT_FOUND 71
#define OS_FILE_DISK_FULL 72
#define OS_FILE_ALREADY_EXISTS 73
diff --git a/storage/xtradb/include/os0sync.h b/storage/xtradb/include/os0sync.h
index 066fd34d668..f968de7c6dd 100644
--- a/storage/xtradb/include/os0sync.h
+++ b/storage/xtradb/include/os0sync.h
@@ -322,12 +322,29 @@ pfs_os_fast_mutex_unlock(
#endif /* UNIV_PFS_MUTEX */
/**********************************************************//**
+Acquires ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required.
+@return 0 if success, != 0 if was reserved by another thread */
+UNIV_INLINE
+ulint
+os_fast_mutex_trylock_full_barrier(
+/*==================*/
+ os_fast_mutex_t* fast_mutex); /*!< in: mutex to acquire */
+/**********************************************************//**
Releases ownership of a fast mutex. */
UNIV_INTERN
void
os_fast_mutex_unlock_func(
/*======================*/
fast_mutex_t* fast_mutex); /*!< in: mutex to release */
+/**********************************************************//**
+Releases ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required. */
+UNIV_INTERN
+void
+os_fast_mutex_unlock_full_barrier(
+/*=================*/
+ os_fast_mutex_t* fast_mutex); /*!< in: mutex to release */
/*********************************************************//**
Initializes an operating system fast mutex semaphore. */
UNIV_INTERN
@@ -432,14 +449,31 @@ amount to decrement. */
/**********************************************************//**
Returns the old value of *ptr, atomically sets *ptr to new_val */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
- __sync_lock_test_and_set(ptr, (byte) new_val)
-
# define os_atomic_test_and_set_ulint(ptr, new_val) \
__sync_lock_test_and_set(ptr, new_val)
-# define os_atomic_lock_release_byte(ptr) \
- __sync_lock_release(ptr)
+#ifdef __powerpc__
+/*
+ os_atomic_test_and_set_byte_release() should imply a release barrier before
+ setting, and a full barrier after. But __sync_lock_test_and_set() is only
+ documented as an aquire barrier. So on PowerPC we need to add the full
+ barrier explicitly. */
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ do { __sync_lock_release(ptr); \
+ __sync_synchronize(); } while (0)
+#else
+/*
+ On x86, __sync_lock_test_and_set() happens to be full barrier, due to
+ LOCK prefix.
+*/
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ __sync_lock_test_and_set(ptr, (byte) new_val)
+#endif
+/*
+ os_atomic_test_and_set_byte_acquire() is a full memory barrier on x86. But
+ in general, just an aquire barrier should be sufficient. */
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ __sync_lock_test_and_set(ptr, (byte) new_val)
#elif defined(HAVE_IB_SOLARIS_ATOMICS)
@@ -517,14 +551,14 @@ amount to decrement. */
/**********************************************************//**
Returns the old value of *ptr, atomically sets *ptr to new_val */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
- atomic_swap_uchar(ptr, new_val)
-
# define os_atomic_test_and_set_ulint(ptr, new_val) \
atomic_swap_ulong(ptr, new_val)
-# define os_atomic_lock_release_byte(ptr) \
- (void) atomic_swap_uchar(ptr, 0)
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ atomic_swap_uchar(ptr, new_val)
+
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
+ atomic_swap_uchar(ptr, new_val)
#elif defined(HAVE_WINDOWS_ATOMICS)
@@ -644,7 +678,9 @@ Returns the old value of *ptr, atomically sets *ptr to new_val.
InterlockedExchange() operates on LONG, and the LONG will be
clobbered */
-# define os_atomic_test_and_set_byte(ptr, new_val) \
+# define os_atomic_test_and_set_byte_acquire(ptr, new_val) \
+ ((byte) InterlockedExchange(ptr, new_val))
+# define os_atomic_test_and_set_byte_release(ptr, new_val) \
((byte) InterlockedExchange(ptr, new_val))
# define os_atomic_test_and_set_ulong(ptr, new_val) \
@@ -713,11 +749,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# define HAVE_MEMORY_BARRIER
# define os_rmb __atomic_thread_fence(__ATOMIC_ACQUIRE)
# define os_wmb __atomic_thread_fence(__ATOMIC_RELEASE)
-#ifdef __powerpc__
-# define os_isync __asm __volatile ("isync":::"memory")
-#else
-#define os_isync do { } while(0)
-#endif
+# define os_mb __atomic_thread_fence(__ATOMIC_SEQ_CST)
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"GCC builtin __atomic_thread_fence() is used for memory barrier"
@@ -726,7 +758,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# define HAVE_MEMORY_BARRIER
# define os_rmb __sync_synchronize()
# define os_wmb __sync_synchronize()
-# define os_isync __sync_synchronize()
+# define os_mb __sync_synchronize()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"GCC builtin __sync_synchronize() is used for memory barrier"
@@ -735,7 +767,7 @@ architecture. Disable memory barrier for Intel architecture for now. */
# include <mbarrier.h>
# define os_rmb __machine_r_barrier()
# define os_wmb __machine_w_barrier()
-# define os_isync os_rmb; os_wmb
+# define os_mb __machine_rw_barrier()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"Solaris memory ordering functions are used for memory barrier"
@@ -744,17 +776,14 @@ architecture. Disable memory barrier for Intel architecture for now. */
# include <intrin.h>
# define os_rmb _mm_lfence()
# define os_wmb _mm_sfence()
-# define os_isync os_rmb; os_wmb
+# define os_mb _mm_mfence()
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"_mm_lfence() and _mm_sfence() are used for memory barrier"
-# define os_atomic_lock_release_byte(ptr) \
- (void) InterlockedExchange(ptr, 0)
-
#else
# define os_rmb do { } while(0)
# define os_wmb do { } while(0)
-# define os_isync do { } while(0)
+# define os_mb do { } while(0)
# define IB_MEMORY_BARRIER_STARTUP_MSG \
"Memory barrier is not used"
#endif
diff --git a/storage/xtradb/include/os0sync.ic b/storage/xtradb/include/os0sync.ic
index 9a7e520ece6..5f4b0d24089 100644
--- a/storage/xtradb/include/os0sync.ic
+++ b/storage/xtradb/include/os0sync.ic
@@ -232,3 +232,34 @@ win_cmp_and_xchg_dword(
#endif /* HAVE_WINDOWS_ATOMICS */
+/**********************************************************//**
+Acquires ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required.
+@return 0 if success, != 0 if was reserved by another thread */
+UNIV_INLINE
+ulint
+os_fast_mutex_trylock_full_barrier(
+/*==================*/
+ os_fast_mutex_t* fast_mutex) /*!< in: mutex to acquire */
+{
+#ifdef __WIN__
+ if (TryEnterCriticalSection(&fast_mutex->mutex)) {
+
+ return(0);
+ } else {
+
+ return(1);
+ }
+#else
+ /* NOTE that the MySQL my_pthread.h redefines pthread_mutex_trylock
+ so that it returns 0 on success. In the operating system
+ libraries, HP-UX-10.20 follows the old Posix 1003.4a Draft 4 and
+ returns 1 on success (but MySQL remaps that to 0), while Linux,
+ FreeBSD, Solaris, AIX, Tru64 Unix, HP-UX-11.0 return 0 on success. */
+
+#ifdef __powerpc__
+ os_mb;
+#endif
+ return((ulint) pthread_mutex_trylock(&fast_mutex->mutex));
+#endif
+}
diff --git a/storage/xtradb/include/os0thread.h b/storage/xtradb/include/os0thread.h
index d84eff99519..dcf809eec0d 100644
--- a/storage/xtradb/include/os0thread.h
+++ b/storage/xtradb/include/os0thread.h
@@ -182,6 +182,17 @@ os_thread_set_priority(
ulint relative_priority); /*!< in: system-specific
priority value */
+/*****************************************************************//**
+Get priority for a given thread on Linux. Currently a
+no-op on other systems.
+
+@return An actual thread priority */
+UNIV_INTERN
+ulint
+os_thread_get_priority(
+/*===================*/
+ os_tid_t thread_id); /*!< in: thread id */
+
#ifndef UNIV_NONINL
#include "os0thread.ic"
#endif
diff --git a/storage/xtradb/include/row0mysql.h b/storage/xtradb/include/row0mysql.h
index 597d0043134..ab61459cae7 100644
--- a/storage/xtradb/include/row0mysql.h
+++ b/storage/xtradb/include/row0mysql.h
@@ -880,6 +880,14 @@ struct row_prebuilt_t {
unsigned innodb_api:1; /*!< whether this is a InnoDB API
query */
const rec_t* innodb_api_rec; /*!< InnoDB API search result */
+ byte* srch_key_val1; /*!< buffer used in converting
+ search key values from MySQL format
+ to InnoDB format.*/
+ byte* srch_key_val2; /*!< buffer used in converting
+ search key values from MySQL format
+ to InnoDB format.*/
+ uint srch_key_val_len; /*!< Size of search key */
+
};
/** Callback for row_mysql_sys_index_iterate() */
diff --git a/storage/xtradb/include/srv0mon.h b/storage/xtradb/include/srv0mon.h
index c1e2f66b898..f13bd34cf5d 100644
--- a/storage/xtradb/include/srv0mon.h
+++ b/storage/xtradb/include/srv0mon.h
@@ -392,6 +392,10 @@ enum monitor_id_t {
MONITOR_OLVD_ROW_INSERTED,
MONITOR_OLVD_ROW_DELETED,
MONITOR_OLVD_ROW_UPDTATED,
+ MONITOR_OLVD_SYSTEM_ROW_READ,
+ MONITOR_OLVD_SYSTEM_ROW_INSERTED,
+ MONITOR_OLVD_SYSTEM_ROW_DELETED,
+ MONITOR_OLVD_SYSTEM_ROW_UPDATED,
/* Data DDL related counters */
MONITOR_MODULE_DDL_STATS,
diff --git a/storage/xtradb/include/srv0srv.h b/storage/xtradb/include/srv0srv.h
index 4a18c0711f3..d5594230484 100644
--- a/storage/xtradb/include/srv0srv.h
+++ b/storage/xtradb/include/srv0srv.h
@@ -158,14 +158,29 @@ struct srv_stats_t {
/** Number of rows inserted */
ulint_ctr_64_t n_rows_inserted;
+ /** Number of system rows read. */
+ ulint_ctr_64_t n_system_rows_read;
+
+ /** Number of system rows updated */
+ ulint_ctr_64_t n_system_rows_updated;
+
+ /** Number of system rows deleted */
+ ulint_ctr_64_t n_system_rows_deleted;
+
+ /** Number of system rows inserted */
+ ulint_ctr_64_t n_system_rows_inserted;
+
/** Number of times secondary index lookup triggered cluster lookup */
ulint_ctr_64_t n_sec_rec_cluster_reads;
/** Number of times prefix optimization avoided triggering cluster lookup */
ulint_ctr_64_t n_sec_rec_cluster_reads_avoided;
+ /** Number of lock deadlocks */
ulint_ctr_1_t lock_deadlock_count;
+ /** Number of lock waits that have been up to max time (i.e.) lock
+ wait timeout */
ulint_ctr_1_t n_lock_max_wait_time;
};
@@ -466,10 +481,10 @@ extern ulint srv_win_file_flush_method;
extern ulint srv_max_n_open_files;
-extern ulong srv_max_dirty_pages_pct;
-extern ulong srv_max_dirty_pages_pct_lwm;
+extern double srv_max_dirty_pages_pct;
+extern double srv_max_dirty_pages_pct_lwm;
-extern ulong srv_adaptive_flushing_lwm;
+extern double srv_adaptive_flushing_lwm;
extern ulong srv_flushing_avg_loops;
extern ulong srv_force_recovery;
@@ -490,6 +505,8 @@ extern unsigned long long srv_stats_transient_sample_pages;
extern my_bool srv_stats_persistent;
extern unsigned long long srv_stats_persistent_sample_pages;
extern my_bool srv_stats_auto_recalc;
+extern unsigned long long srv_stats_modified_counter;
+extern my_bool srv_stats_sample_traditional;
extern ibool srv_use_doublewrite_buf;
extern ulong srv_doublewrite_batch_size;
@@ -497,7 +514,7 @@ extern ulong srv_checksum_algorithm;
extern ulong srv_log_arch_expire_sec;
-extern ulong srv_max_buf_pool_modified_pct;
+extern double srv_max_buf_pool_modified_pct;
extern ulong srv_max_purge_lag;
extern ulong srv_max_purge_lag_delay;
@@ -1132,6 +1149,10 @@ struct export_var_t{
ulint innodb_rows_inserted; /*!< srv_n_rows_inserted */
ulint innodb_rows_updated; /*!< srv_n_rows_updated */
ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */
+ ulint innodb_system_rows_read; /*!< srv_n_system_rows_read */
+ ulint innodb_system_rows_inserted; /*!< srv_n_system_rows_inserted */
+ ulint innodb_system_rows_updated; /*!< srv_n_system_rows_updated */
+ ulint innodb_system_rows_deleted; /*!< srv_n_system_rows_deleted*/
ulint innodb_num_open_files; /*!< fil_n_file_opened */
ulint innodb_truncated_status_writes; /*!< srv_truncated_status_writes */
ulint innodb_available_undo_logs; /*!< srv_available_undo_logs */
diff --git a/storage/xtradb/include/sync0arr.h b/storage/xtradb/include/sync0arr.h
index 15dbdcb540d..46e192d05f1 100644
--- a/storage/xtradb/include/sync0arr.h
+++ b/storage/xtradb/include/sync0arr.h
@@ -148,6 +148,12 @@ sync_array_t*
sync_array_get(void);
/*================*/
+/**********************************************************************//**
+Prints info of the wait array without using any mutexes/semaphores. */
+UNIV_INTERN
+void
+sync_array_print_xtradb(void);
+
#ifndef UNIV_NONINL
#include "sync0arr.ic"
#endif
diff --git a/storage/xtradb/include/sync0sync.h b/storage/xtradb/include/sync0sync.h
index 5ba385ce75f..72cfbf61dd8 100644
--- a/storage/xtradb/include/sync0sync.h
+++ b/storage/xtradb/include/sync0sync.h
@@ -50,8 +50,6 @@ extern "C" my_bool timed_mutexes;
#ifdef _WIN32
typedef LONG lock_word_t; /*!< On Windows, InterlockedExchange operates
on LONG variable */
-#elif defined(HAVE_ATOMIC_BUILTINS) && !defined(HAVE_ATOMIC_BUILTINS_BYTE)
-typedef ulint lock_word_t;
#else
typedef byte lock_word_t;
#endif
diff --git a/storage/xtradb/include/sync0sync.ic b/storage/xtradb/include/sync0sync.ic
index 0c4a8ace887..8176ae55fd8 100644
--- a/storage/xtradb/include/sync0sync.ic
+++ b/storage/xtradb/include/sync0sync.ic
@@ -83,15 +83,11 @@ ib_mutex_test_and_set(
ib_mutex_t* mutex) /*!< in: mutex */
{
#if defined(HAVE_ATOMIC_BUILTINS)
-# if defined(HAVE_ATOMIC_BUILTINS_BYTE)
- return(os_atomic_test_and_set_byte(&mutex->lock_word, 1));
-# else
- return(os_atomic_test_and_set_ulint(&mutex->lock_word, 1));
-# endif
+ return(os_atomic_test_and_set_byte_acquire(&mutex->lock_word, 1));
#else
ibool ret;
- ret = os_fast_mutex_trylock(&(mutex->os_fast_mutex));
+ ret = os_fast_mutex_trylock_full_barrier(&(mutex->os_fast_mutex));
if (ret == 0) {
/* We check that os_fast_mutex_trylock does not leak
@@ -99,7 +95,6 @@ ib_mutex_test_and_set(
ut_a(mutex->lock_word == 0);
mutex->lock_word = 1;
- os_wmb;
}
return((byte) ret);
@@ -116,11 +111,14 @@ mutex_reset_lock_word(
ib_mutex_t* mutex) /*!< in: mutex */
{
#if defined(HAVE_ATOMIC_BUILTINS)
- os_atomic_lock_release_byte(&mutex->lock_word);
+ /* In theory __sync_lock_release should be used to release the lock.
+ Unfortunately, it does not work properly alone. The workaround is
+ that more conservative __sync_lock_test_and_set is used instead. */
+ os_atomic_test_and_set_byte_release(&mutex->lock_word, 0);
#else
mutex->lock_word = 0;
- os_fast_mutex_unlock(&(mutex->os_fast_mutex));
+ os_fast_mutex_unlock_full_barrier(&(mutex->os_fast_mutex));
#endif
}
@@ -152,7 +150,6 @@ mutex_get_waiters(
ptr = &(mutex->waiters);
- os_rmb;
return(*ptr); /* Here we assume that the read of a single
word from memory is atomic */
}
@@ -187,7 +184,6 @@ mutex_exit_func(
to wake up possible hanging threads if
they are missed in mutex_signal_object. */
- os_isync;
if (mutex_get_waiters(mutex) != 0) {
mutex_signal_object(mutex);
diff --git a/storage/xtradb/include/trx0undo.h b/storage/xtradb/include/trx0undo.h
index 61b0dabb1e6..660551961a6 100644
--- a/storage/xtradb/include/trx0undo.h
+++ b/storage/xtradb/include/trx0undo.h
@@ -243,22 +243,13 @@ Truncates an undo log from the end. This function is used during a rollback
to free space from an undo log. */
UNIV_INTERN
void
-trx_undo_truncate_end_func(
+trx_undo_truncate_end(
/*=======================*/
-#ifdef UNIV_DEBUG
- const trx_t* trx, /*!< in: transaction whose undo log it is */
-#endif /* UNIV_DEBUG */
+ trx_t* trx, /*!< in: transaction whose undo log it is */
trx_undo_t* undo, /*!< in/out: undo log */
undo_no_t limit) /*!< in: all undo records with undo number
>= this value should be truncated */
__attribute__((nonnull));
-#ifdef UNIV_DEBUG
-# define trx_undo_truncate_end(trx,undo,limit) \
- trx_undo_truncate_end_func(trx,undo,limit)
-#else /* UNIV_DEBUG */
-# define trx_undo_truncate_end(trx,undo,limit) \
- trx_undo_truncate_end_func(undo,limit)
-#endif /* UNIV_DEBUG */
/***********************************************************************//**
Truncates an undo log from the start. This function is used during a purge
diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i
index 8353b1dcf8a..45a48fe856e 100644
--- a/storage/xtradb/include/univ.i
+++ b/storage/xtradb/include/univ.i
@@ -45,10 +45,10 @@ Created 1/20/1994 Heikki Tuuri
#define INNODB_VERSION_MAJOR 5
#define INNODB_VERSION_MINOR 6
-#define INNODB_VERSION_BUGFIX 20
+#define INNODB_VERSION_BUGFIX 21
#ifndef PERCONA_INNODB_VERSION
-#define PERCONA_INNODB_VERSION 68.0
+#define PERCONA_INNODB_VERSION 70.0
#endif
/* Enable UNIV_LOG_ARCHIVE in XtraDB */
diff --git a/storage/xtradb/include/ut0counter.h b/storage/xtradb/include/ut0counter.h
index fe0f36dfff2..63a133a175d 100644
--- a/storage/xtradb/include/ut0counter.h
+++ b/storage/xtradb/include/ut0counter.h
@@ -32,7 +32,11 @@ Created 2012/04/12 by Sunny Bains
#include "os0thread.h"
/** CPU cache line size */
+#ifdef __powerpc__
+#define CACHE_LINE_SIZE 128
+#else
#define CACHE_LINE_SIZE 64
+#endif
/** Default number of slots to use in ib_counter_t */
#define IB_N_SLOTS 64
diff --git a/storage/xtradb/lock/lock0lock.cc b/storage/xtradb/lock/lock0lock.cc
index 0df0d790925..2ae35d1149b 100644
--- a/storage/xtradb/lock/lock0lock.cc
+++ b/storage/xtradb/lock/lock0lock.cc
@@ -6556,6 +6556,7 @@ lock_rec_insert_check_and_lock(
lock_t* lock;
dberr_t err;
ulint next_rec_heap_no;
+ ibool inherit_in = *inherit;
#ifdef WITH_WSREP
lock_t* c_lock=NULL;
#endif
@@ -6596,7 +6597,7 @@ lock_rec_insert_check_and_lock(
lock_mutex_exit();
- if (!dict_index_is_clust(index)) {
+ if (inherit_in && !dict_index_is_clust(index)) {
/* Update the page max trx id field */
page_update_max_trx_id(block,
buf_block_get_page_zip(block),
@@ -6657,7 +6658,7 @@ lock_rec_insert_check_and_lock(
err = DB_SUCCESS;
/* fall through */
case DB_SUCCESS:
- if (dict_index_is_clust(index)) {
+ if (!inherit_in || dict_index_is_clust(index)) {
break;
}
/* Update the page max trx id field */
diff --git a/storage/xtradb/lock/lock0wait.cc b/storage/xtradb/lock/lock0wait.cc
index 77aa0261a0f..2482c88d3b7 100644
--- a/storage/xtradb/lock/lock0wait.cc
+++ b/storage/xtradb/lock/lock0wait.cc
@@ -283,10 +283,6 @@ lock_wait_suspend_thread(
}
}
- /* Wake the lock timeout monitor thread, if it is suspended */
-
- os_event_set(lock_sys->timeout_event);
-
lock_wait_mutex_exit();
trx_mutex_exit(trx);
diff --git a/storage/xtradb/log/log0online.cc b/storage/xtradb/log/log0online.cc
index dbd8f46caaa..60ae4a50626 100644
--- a/storage/xtradb/log/log0online.cc
+++ b/storage/xtradb/log/log0online.cc
@@ -1800,7 +1800,7 @@ log_online_purge_changed_page_bitmaps(
return TRUE;
}
- if (srv_track_changed_pages && lsn >= log_bmp_sys->end_lsn) {
+ if (srv_track_changed_pages && lsn > log_bmp_sys->end_lsn) {
/* If we have to delete the current output file, close it
first. */
os_file_close(log_bmp_sys->out.file);
diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc
index 5fc1ab57c46..0a7c8817b18 100644
--- a/storage/xtradb/os/os0file.cc
+++ b/storage/xtradb/os/os0file.cc
@@ -685,6 +685,8 @@ os_file_get_last_error_low(
return(OS_FILE_OPERATION_ABORTED);
} else if (err == ERROR_ACCESS_DENIED) {
return(OS_FILE_ACCESS_VIOLATION);
+ } else if (err == ERROR_BUFFER_OVERFLOW) {
+ return(OS_FILE_NAME_TOO_LONG);
} else {
return(OS_FILE_ERROR_MAX + err);
}
@@ -760,6 +762,8 @@ os_file_get_last_error_low(
return(OS_FILE_NOT_FOUND);
case EEXIST:
return(OS_FILE_ALREADY_EXISTS);
+ case ENAMETOOLONG:
+ return(OS_FILE_NAME_TOO_LONG);
case EXDEV:
case ENOTDIR:
case EISDIR:
@@ -3486,7 +3490,7 @@ os_file_status(
struct _stat64 statinfo;
ret = _stat64(path, &statinfo);
- if (ret && (errno == ENOENT || errno == ENOTDIR)) {
+ if (ret && (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG)) {
/* file does not exist */
*exists = FALSE;
return(TRUE);
@@ -3514,7 +3518,7 @@ os_file_status(
struct stat statinfo;
ret = stat(path, &statinfo);
- if (ret && (errno == ENOENT || errno == ENOTDIR)) {
+ if (ret && (errno == ENOENT || errno == ENOTDIR || errno == ENAMETOOLONG)) {
/* file does not exist */
*exists = FALSE;
return(TRUE);
diff --git a/storage/xtradb/os/os0sync.cc b/storage/xtradb/os/os0sync.cc
index 779152a3a56..451ba5285e3 100644
--- a/storage/xtradb/os/os0sync.cc
+++ b/storage/xtradb/os/os0sync.cc
@@ -890,6 +890,25 @@ os_fast_mutex_unlock_func(
}
/**********************************************************//**
+Releases ownership of a fast mutex. Implies a full memory barrier even on
+platforms such as PowerPC where this is not normally required. */
+UNIV_INTERN
+void
+os_fast_mutex_unlock_full_barrier(
+/*=================*/
+ os_fast_mutex_t* fast_mutex) /*!< in: mutex to release */
+{
+#ifdef __WIN__
+ LeaveCriticalSection(&fast_mutex->mutex);
+#else
+ pthread_mutex_unlock(&fast_mutex->mutex);
+#ifdef __powerpc__
+ os_mb;
+#endif
+#endif
+}
+
+/**********************************************************//**
Frees a mutex object. */
UNIV_INTERN
void
diff --git a/storage/xtradb/os/os0thread.cc b/storage/xtradb/os/os0thread.cc
index 13099e243cd..848c0ca4212 100644
--- a/storage/xtradb/os/os0thread.cc
+++ b/storage/xtradb/os/os0thread.cc
@@ -312,3 +312,21 @@ os_thread_set_priority(
return(relative_priority);
#endif
}
+
+/*****************************************************************//**
+Get priority for a given thread on Linux. Currently a
+no-op on other systems.
+
+@return An actual thread priority */
+UNIV_INTERN
+ulint
+os_thread_get_priority(
+/*===================*/
+ os_tid_t thread_id) /*!< in: thread id */
+{
+#ifdef UNIV_LINUX
+ return (getpriority(PRIO_PROCESS, thread_id));
+#else
+ return (0);
+#endif
+}
diff --git a/storage/xtradb/row/row0ext.cc b/storage/xtradb/row/row0ext.cc
index 32b78391d6a..ad852577ad2 100644
--- a/storage/xtradb/row/row0ext.cc
+++ b/storage/xtradb/row/row0ext.cc
@@ -78,7 +78,8 @@ row_ext_cache_fill(
crashed during the execution of
btr_free_externally_stored_field(). */
ext->len[i] = btr_copy_externally_stored_field_prefix(
- buf, ext->max_len, zip_size, field, f_len);
+ buf, ext->max_len, zip_size, field, f_len,
+ NULL);
}
}
}
diff --git a/storage/xtradb/row/row0ftsort.cc b/storage/xtradb/row/row0ftsort.cc
index 0ef59addf5c..04d3e51911c 100644
--- a/storage/xtradb/row/row0ftsort.cc
+++ b/storage/xtradb/row/row0ftsort.cc
@@ -663,7 +663,8 @@ loop:
doc.text.f_str =
btr_copy_externally_stored_field(
&doc.text.f_len, data,
- zip_size, data_len, blob_heap);
+ zip_size, data_len, blob_heap,
+ NULL);
} else {
doc.text.f_str = data;
doc.text.f_len = data_len;
diff --git a/storage/xtradb/row/row0ins.cc b/storage/xtradb/row/row0ins.cc
index c0396a96cfc..fb719266a16 100644
--- a/storage/xtradb/row/row0ins.cc
+++ b/storage/xtradb/row/row0ins.cc
@@ -1314,7 +1314,7 @@ row_ins_foreign_check_on_constraint(
row_mysql_freeze_data_dictionary(thr_get_trx(thr));
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
/* Restore pcur position */
@@ -1342,7 +1342,7 @@ nonstandard_exit_func:
btr_pcur_store_position(pcur, mtr);
mtr_commit(mtr);
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
btr_pcur_restore_position(BTR_SEARCH_LEAF, pcur, mtr);
@@ -1550,7 +1550,7 @@ run_again:
}
}
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Store old value on n_fields_cmp */
@@ -1985,7 +1985,7 @@ row_ins_scan_sec_index_for_duplicate(
do {
const rec_t* rec = btr_pcur_get_rec(&pcur);
const buf_block_t* block = btr_pcur_get_block(&pcur);
- ulint lock_type;
+ const ulint lock_type = LOCK_ORDINARY;
if (page_rec_is_infimum(rec)) {
@@ -1995,16 +1995,6 @@ row_ins_scan_sec_index_for_duplicate(
offsets = rec_get_offsets(rec, index, offsets,
ULINT_UNDEFINED, &offsets_heap);
- /* If the transaction isolation level is no stronger than
- READ COMMITTED, then avoid gap locks. */
- if (!page_rec_is_supremum(rec)
- && thr_get_trx(thr)->isolation_level
- <= TRX_ISO_READ_COMMITTED) {
- lock_type = LOCK_REC_NOT_GAP;
- } else {
- lock_type = LOCK_ORDINARY;
- }
-
if (flags & BTR_NO_LOCKING_FLAG) {
/* Set no locks when applying log
in online table rebuild. */
@@ -2370,7 +2360,7 @@ row_ins_clust_index_entry_low(
|| n_uniq == dict_index_get_n_unique(index));
ut_ad(!n_uniq || n_uniq == dict_index_get_n_unique(index));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (mode == BTR_MODIFY_LEAF && dict_index_is_online_ddl(index)) {
if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
@@ -2598,9 +2588,10 @@ Starts a mini-transaction and checks if the index will be dropped.
@return true if the index is to be dropped */
static __attribute__((nonnull, warn_unused_result))
bool
-row_ins_sec_mtr_start_and_check_if_aborted(
+row_ins_sec_mtr_start_trx_and_check_if_aborted(
/*=======================================*/
mtr_t* mtr, /*!< out: mini-transaction */
+ trx_t* trx, /*!< in: transaction handle */
dict_index_t* index, /*!< in/out: secondary index */
bool check, /*!< in: whether to check */
ulint search_mode)
@@ -2608,7 +2599,7 @@ row_ins_sec_mtr_start_and_check_if_aborted(
{
ut_ad(!dict_index_is_clust(index));
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
if (!check) {
return(false);
@@ -2666,13 +2657,14 @@ row_ins_sec_index_entry_low(
ulint n_unique;
mtr_t mtr;
ulint* offsets = NULL;
+ trx_t* trx = thr_get_trx(thr);
ut_ad(!dict_index_is_clust(index));
ut_ad(mode == BTR_MODIFY_LEAF || mode == BTR_MODIFY_TREE);
cursor.thr = thr;
ut_ad(thr_get_trx(thr)->id);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Ensure that we acquire index->lock when inserting into an
index with index->online_status == ONLINE_INDEX_COMPLETE, but
@@ -2733,8 +2725,8 @@ row_ins_sec_index_entry_low(
DEBUG_SYNC_C("row_ins_sec_index_unique");
- if (row_ins_sec_mtr_start_and_check_if_aborted(
- &mtr, index, check, search_mode)) {
+ if (row_ins_sec_mtr_start_trx_and_check_if_aborted(
+ &mtr, trx, index, check, search_mode)) {
goto func_exit;
}
@@ -2768,8 +2760,8 @@ row_ins_sec_index_entry_low(
return(err);
}
- if (row_ins_sec_mtr_start_and_check_if_aborted(
- &mtr, index, check, search_mode)) {
+ if (row_ins_sec_mtr_start_trx_and_check_if_aborted(
+ &mtr, trx, index, check, search_mode)) {
goto func_exit;
}
diff --git a/storage/xtradb/row/row0log.cc b/storage/xtradb/row/row0log.cc
index cdbba0ef854..5a086ccebb4 100644
--- a/storage/xtradb/row/row0log.cc
+++ b/storage/xtradb/row/row0log.cc
@@ -989,7 +989,7 @@ row_log_table_get_pk_col(
mem_heap_alloc(heap, field_len));
len = btr_copy_externally_stored_field_prefix(
- blob_field, field_len, zip_size, field, len);
+ blob_field, field_len, zip_size, field, len, NULL);
if (len >= max_len + 1) {
return(DB_TOO_BIG_INDEX_COL);
}
@@ -1380,7 +1380,7 @@ row_log_table_apply_convert_mrec(
data = btr_rec_copy_externally_stored_field(
mrec, offsets,
dict_table_zip_size(index->table),
- i, &len, heap);
+ i, &len, heap, NULL);
ut_a(data);
dfield_set_data(dfield, data, len);
blob_done:
diff --git a/storage/xtradb/row/row0merge.cc b/storage/xtradb/row/row0merge.cc
index 27c5a18aabf..12daaba0034 100644
--- a/storage/xtradb/row/row0merge.cc
+++ b/storage/xtradb/row/row0merge.cc
@@ -2326,7 +2326,7 @@ row_merge_copy_blobs(
BLOB pointers are read (row_merge_read_clustered_index())
and dereferenced (below). */
data = btr_rec_copy_externally_stored_field(
- mrec, offsets, zip_size, i, &len, heap);
+ mrec, offsets, zip_size, i, &len, heap, NULL);
/* Because we have locked the table, any records
written by incomplete transactions must have been
rolled back already. There must not be any incomplete
diff --git a/storage/xtradb/row/row0mysql.cc b/storage/xtradb/row/row0mysql.cc
index 8f270cfbfd0..713d184b400 100644
--- a/storage/xtradb/row/row0mysql.cc
+++ b/storage/xtradb/row/row0mysql.cc
@@ -31,6 +31,8 @@ Created 9/17/2000 Heikki Tuuri
#endif
#include "ha_prototypes.h"
+
+#include <sql_const.h>
#include "row0ins.h"
#include "row0merge.h"
#include "row0sel.h"
@@ -62,7 +64,6 @@ Created 9/17/2000 Heikki Tuuri
#include "row0import.h"
#include "m_string.h"
#include "my_sys.h"
-#include "ha_prototypes.h"
#include <algorithm>
/** Provide optional 4.x backwards compatibility for 5.0 and above */
@@ -711,8 +712,10 @@ row_create_prebuilt(
row_prebuilt_t* prebuilt;
mem_heap_t* heap;
dict_index_t* clust_index;
+ dict_index_t* temp_index;
dtuple_t* ref;
ulint ref_len;
+ uint srch_key_len = 0;
ulint search_tuple_n_fields;
search_tuple_n_fields = 2 * dict_table_get_n_cols(table);
@@ -724,6 +727,14 @@ row_create_prebuilt(
ref_len = dict_index_get_n_unique(clust_index);
+
+ /* Maximum size of the buffer needed for conversion of INTs from
+ little endian format to big endian format in an index. An index
+ can have maximum 16 columns (MAX_REF_PARTS) in it. Therfore
+ Max size for PK: 16 * 8 bytes (BIGINT's size) = 128 bytes
+ Max size Secondary index: 16 * 8 bytes + PK = 256 bytes. */
+#define MAX_SRCH_KEY_VAL_BUFFER 2* (8 * MAX_REF_PARTS)
+
#define PREBUILT_HEAP_INITIAL_SIZE \
( \
sizeof(*prebuilt) \
@@ -752,10 +763,38 @@ row_create_prebuilt(
+ sizeof(que_thr_t) \
)
+ /* Calculate size of key buffer used to store search key in
+ InnoDB format. MySQL stores INTs in little endian format and
+ InnoDB stores INTs in big endian format with the sign bit
+ flipped. All other field types are stored/compared the same
+ in MySQL and InnoDB, so we must create a buffer containing
+ the INT key parts in InnoDB format.We need two such buffers
+ since both start and end keys are used in records_in_range(). */
+
+ for (temp_index = dict_table_get_first_index(table); temp_index;
+ temp_index = dict_table_get_next_index(temp_index)) {
+ DBUG_EXECUTE_IF("innodb_srch_key_buffer_max_value",
+ ut_a(temp_index->n_user_defined_cols
+ == MAX_REF_PARTS););
+ uint temp_len = 0;
+ for (uint i = 0; i < temp_index->n_uniq; i++) {
+ if (temp_index->fields[i].col->mtype == DATA_INT) {
+ temp_len +=
+ temp_index->fields[i].fixed_len;
+ }
+ }
+ srch_key_len = max(srch_key_len,temp_len);
+ }
+
+ ut_a(srch_key_len <= MAX_SRCH_KEY_VAL_BUFFER);
+
+ DBUG_EXECUTE_IF("innodb_srch_key_buffer_max_value",
+ ut_a(srch_key_len == MAX_SRCH_KEY_VAL_BUFFER););
+
/* We allocate enough space for the objects that are likely to
be created later in order to minimize the number of malloc()
calls */
- heap = mem_heap_create(PREBUILT_HEAP_INITIAL_SIZE);
+ heap = mem_heap_create(PREBUILT_HEAP_INITIAL_SIZE + 2 * srch_key_len);
prebuilt = static_cast<row_prebuilt_t*>(
mem_heap_zalloc(heap, sizeof(*prebuilt)));
@@ -768,6 +807,18 @@ row_create_prebuilt(
prebuilt->sql_stat_start = TRUE;
prebuilt->heap = heap;
+ prebuilt->srch_key_val_len = srch_key_len;
+ if (prebuilt->srch_key_val_len) {
+ prebuilt->srch_key_val1 = static_cast<byte*>(
+ mem_heap_alloc(prebuilt->heap,
+ 2 * prebuilt->srch_key_val_len));
+ prebuilt->srch_key_val2 = prebuilt->srch_key_val1 +
+ prebuilt->srch_key_val_len;
+ } else {
+ prebuilt->srch_key_val1 = NULL;
+ prebuilt->srch_key_val2 = NULL;
+ }
+
btr_pcur_reset(&prebuilt->pcur);
btr_pcur_reset(&prebuilt->clust_pcur);
@@ -1055,8 +1106,11 @@ row_update_statistics_if_needed(
since the last time a statistics batch was run.
We calculate statistics at most every 16th round, since we may have
a counter table which is very small and updated very often. */
+ ib_uint64_t threshold= 16 + n_rows / 16; /* 6.25% */
+ if (srv_stats_modified_counter)
+ threshold= ut_min(srv_stats_modified_counter, threshold);
- if (counter > 16 + n_rows / 16 /* 6.25% */) {
+ if (counter > threshold) {
ut_ad(!mutex_own(&dict_sys->mutex));
/* this will reset table->stat_modified_counter to 0 */
@@ -1396,7 +1450,11 @@ error_exit:
if (UNIV_LIKELY(!(trx->fake_changes))) {
- srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_inserted.add((size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_inserted.add((size_t)trx->id, 1);
+ }
/* Not protected by dict_table_stats_lock() for performance
reasons, we would rather get garbage in stat_n_rows (which is
@@ -1794,9 +1852,19 @@ run_again:
with a latch. */
dict_table_n_rows_dec(prebuilt->table);
- srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ }
} else {
- srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ }
}
/* We update table statistics only if it is a DELETE or UPDATE
@@ -1860,7 +1928,7 @@ row_unlock_for_mysql(
trx_id_t rec_trx_id;
mtr_t mtr;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Restore the cursor position and find the record */
@@ -2025,9 +2093,19 @@ run_again:
with a latch. */
dict_table_n_rows_dec(table);
- srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_deleted.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_deleted.add((size_t)trx->id, 1);
+ }
} else {
- srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ if (table->is_system_db) {
+ srv_stats.n_system_rows_updated.add(
+ (size_t)trx->id, 1);
+ } else {
+ srv_stats.n_rows_updated.add((size_t)trx->id, 1);
+ }
}
row_update_statistics_if_needed(table);
@@ -2215,23 +2293,23 @@ err_exit:
/* The lock timeout monitor thread also takes care
of InnoDB monitor prints */
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_lock_monitor)) {
srv_print_innodb_monitor = TRUE;
srv_print_innodb_lock_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_tablespace_monitor)) {
srv_print_innodb_tablespace_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
} else if (STR_EQ(table_name, table_name_len,
S_innodb_table_monitor)) {
srv_print_innodb_table_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
#ifdef UNIV_MEM_DEBUG
} else if (STR_EQ(table_name, table_name_len,
S_innodb_mem_validate)) {
@@ -2854,7 +2932,7 @@ row_discard_tablespace_foreign_key_checks(
/* Check if the table is referenced by foreign key constraints from
some other table (not the table itself) */
- dict_foreign_set::iterator it
+ dict_foreign_set::const_iterator it
= std::find_if(table->referenced_set.begin(),
table->referenced_set.end(),
dict_foreign_different_tables());
@@ -3427,7 +3505,7 @@ row_truncate_table_for_mysql(
index = dict_table_get_next_index(index);
} while (index);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
fsp_header_init(space,
FIL_IBD_FILE_INITIAL_SIZE, &mtr);
mtr_commit(&mtr);
@@ -3456,7 +3534,7 @@ row_truncate_table_for_mysql(
sys_index = dict_table_get_first_index(dict_sys->sys_indexes);
dict_index_copy_types(tuple, sys_index, 1);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
btr_pcur_open_on_user_rec(sys_index, tuple, PAGE_CUR_GE,
BTR_MODIFY_LEAF, &pcur, &mtr);
for (;;) {
@@ -3503,7 +3581,7 @@ row_truncate_table_for_mysql(
a page in this mini-transaction, and the rest of
this loop could latch another index page. */
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
btr_pcur_restore_position(BTR_MODIFY_LEAF,
&pcur, &mtr);
}
diff --git a/storage/xtradb/row/row0purge.cc b/storage/xtradb/row/row0purge.cc
index 1b836c26c25..8212a7b43e0 100644
--- a/storage/xtradb/row/row0purge.cc
+++ b/storage/xtradb/row/row0purge.cc
@@ -337,9 +337,24 @@ row_purge_remove_sec_if_poss_tree(
if (row_purge_poss_sec(node, index, entry)) {
/* Remove the index record, which should have been
marked for deletion. */
- ut_ad(REC_INFO_DELETED_FLAG
- & rec_get_info_bits(btr_cur_get_rec(btr_cur),
- dict_table_is_comp(index->table)));
+ if (!rec_get_deleted_flag(btr_cur_get_rec(btr_cur),
+ dict_table_is_comp(index->table))) {
+ fputs("InnoDB: tried to purge sec index entry not"
+ " marked for deletion in\n"
+ "InnoDB: ", stderr);
+ dict_index_name_print(stderr, NULL, index);
+ fputs("\n"
+ "InnoDB: tuple ", stderr);
+ dtuple_print(stderr, entry);
+ fputs("\n"
+ "InnoDB: record ", stderr);
+ rec_print(stderr, btr_cur_get_rec(btr_cur), index);
+ putc('\n', stderr);
+
+ ut_ad(0);
+
+ goto func_exit;
+ }
btr_cur_pessimistic_delete(&err, FALSE, btr_cur, 0,
RB_NONE, &mtr);
@@ -428,10 +443,29 @@ row_purge_remove_sec_if_poss_leaf(
btr_cur_t* btr_cur = btr_pcur_get_btr_cur(&pcur);
/* Only delete-marked records should be purged. */
- ut_ad(REC_INFO_DELETED_FLAG
- & rec_get_info_bits(
- btr_cur_get_rec(btr_cur),
- dict_table_is_comp(index->table)));
+ if (!rec_get_deleted_flag(
+ btr_cur_get_rec(btr_cur),
+ dict_table_is_comp(index->table))) {
+
+ fputs("InnoDB: tried to purge sec index"
+ " entry not marked for deletion in\n"
+ "InnoDB: ", stderr);
+ dict_index_name_print(stderr, NULL, index);
+ fputs("\n"
+ "InnoDB: tuple ", stderr);
+ dtuple_print(stderr, entry);
+ fputs("\n"
+ "InnoDB: record ", stderr);
+ rec_print(stderr, btr_cur_get_rec(btr_cur),
+ index);
+ putc('\n', stderr);
+
+ ut_ad(0);
+
+ btr_pcur_close(&pcur);
+
+ goto func_exit_no_pcur;
+ }
if (!btr_cur_optimistic_delete(btr_cur, 0, &mtr)) {
diff --git a/storage/xtradb/row/row0sel.cc b/storage/xtradb/row/row0sel.cc
index 5b85086e4a9..b1d64c16c60 100644
--- a/storage/xtradb/row/row0sel.cc
+++ b/storage/xtradb/row/row0sel.cc
@@ -134,7 +134,8 @@ row_sel_sec_rec_is_for_blob(
len = btr_copy_externally_stored_field_prefix(buf, prefix_len,
zip_size,
- clust_field, clust_len);
+ clust_field, clust_len,
+ NULL);
if (UNIV_UNLIKELY(len == 0)) {
/* The BLOB was being deleted as the server crashed.
@@ -453,7 +454,7 @@ row_sel_fetch_columns(
data = btr_rec_copy_externally_stored_field(
rec, offsets,
dict_table_zip_size(index->table),
- field_no, &len, heap);
+ field_no, &len, heap, NULL);
/* data == NULL means that the
externally stored field was not
@@ -1401,7 +1402,7 @@ table_loop:
/* Open a cursor to index, or restore an open cursor position */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (consistent_read && plan->unique_search && !plan->pcur_is_open
&& !plan->must_get_clust
@@ -1442,7 +1443,7 @@ table_loop:
plan_reset_cursor(plan);
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
}
if (search_latch_locked) {
@@ -2454,13 +2455,12 @@ row_sel_convert_mysql_key_to_innobase(
/* Storing may use at most data_len bytes of buf */
if (UNIV_LIKELY(!is_null)) {
- ut_a(buf + data_len <= original_buf + buf_len);
- row_mysql_store_col_in_innobase_format(
- dfield, buf,
- FALSE, /* MySQL key value format col */
- key_ptr + data_offset, data_len,
- dict_table_is_comp(index->table));
- buf += data_len;
+ buf = row_mysql_store_col_in_innobase_format(
+ dfield, buf,
+ FALSE, /* MySQL key value format col */
+ key_ptr + data_offset, data_len,
+ dict_table_is_comp(index->table));
+ ut_a(buf <= original_buf + buf_len);
}
key_ptr += data_field_len;
@@ -2504,9 +2504,6 @@ row_sel_convert_mysql_key_to_innobase(
dfield++;
}
- DBUG_EXECUTE_IF("innodb_srch_key_buffer_full",
- ut_a(buf == (original_buf + buf_len)););
-
ut_a(buf <= original_buf + buf_len);
/* We set the length of tuple to n_fields: we assume that the memory
@@ -2816,7 +2813,7 @@ row_sel_store_mysql_field_func(
data = btr_rec_copy_externally_stored_field(
rec, offsets,
dict_table_zip_size(prebuilt->table),
- field_no, &len, heap);
+ field_no, &len, heap, NULL);
if (UNIV_UNLIKELY(!data)) {
/* The externally stored field was not written
@@ -3891,7 +3888,7 @@ row_search_for_mysql(
}
}
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/*-------------------------------------------------------------*/
/* PHASE 2: Try fast adaptive hash index search if possible */
@@ -5088,7 +5085,7 @@ next_rec:
mtr_commit(&mtr);
mtr_has_extra_clust_latch = FALSE;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
if (sel_restore_position_for_mysql(&same_user_rec,
BTR_SEARCH_LEAF,
pcur, moves_up, &mtr)) {
@@ -5153,7 +5150,7 @@ lock_table_wait:
/* It was a lock wait, and it ended */
thr->lock_state = QUE_THR_LOCK_NOLOCK;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* Table lock waited, go try to obtain table lock
again */
diff --git a/storage/xtradb/row/row0umod.cc b/storage/xtradb/row/row0umod.cc
index 29252c7834a..6a23e1a6c12 100644
--- a/storage/xtradb/row/row0umod.cc
+++ b/storage/xtradb/row/row0umod.cc
@@ -267,7 +267,7 @@ row_undo_mod_clust(
pcur = &node->pcur;
index = btr_cur_get_index(btr_pcur_get_btr_cur(pcur));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
online = dict_index_is_online_ddl(index);
if (online) {
@@ -296,7 +296,7 @@ row_undo_mod_clust(
/* We may have to modify tree structure: do a pessimistic
descent down the index tree */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
err = row_undo_mod_clust_low(
node, &offsets, &offsets_heap,
@@ -341,7 +341,7 @@ row_undo_mod_clust(
if (err == DB_SUCCESS && node->rec_type == TRX_UNDO_UPD_DEL_REC) {
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
/* It is not necessary to call row_log_table,
because the record is delete-marked and would thus
@@ -354,7 +354,7 @@ row_undo_mod_clust(
/* We may have to modify tree structure: do a
pessimistic descent down the index tree */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
err = row_undo_mod_remove_clust_low(node, thr, &mtr,
BTR_MODIFY_TREE);
@@ -401,7 +401,7 @@ row_undo_mod_del_mark_or_remove_sec_low(
enum row_search_result search_result;
log_free_check();
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
@@ -457,7 +457,7 @@ row_undo_mod_del_mark_or_remove_sec_low(
which cannot be purged yet, requires its existence. If some requires,
we should delete mark the record. */
- mtr_start(&mtr_vers);
+ mtr_start_trx(&mtr_vers, thr_get_trx(thr));
success = btr_pcur_restore_position(BTR_SEARCH_LEAF, &(node->pcur),
&mtr_vers);
@@ -573,7 +573,7 @@ row_undo_mod_del_unmark_sec_and_undo_update(
ut_ad(trx->id);
log_free_check();
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
diff --git a/storage/xtradb/row/row0upd.cc b/storage/xtradb/row/row0upd.cc
index ad6f10542cf..0b04f564bbf 100644
--- a/storage/xtradb/row/row0upd.cc
+++ b/storage/xtradb/row/row0upd.cc
@@ -261,7 +261,7 @@ row_upd_check_references_constraints(
DEBUG_SYNC_C("foreign_constraint_check_for_update");
- mtr_start(mtr);
+ mtr_start_trx(mtr, trx);
if (trx->dict_operation_lock_mode == 0) {
got_s_lock = TRUE;
@@ -1155,7 +1155,7 @@ row_upd_ext_fetch(
byte* buf = static_cast<byte*>(mem_heap_alloc(heap, *len));
*len = btr_copy_externally_stored_field_prefix(
- buf, *len, zip_size, data, local_len);
+ buf, *len, zip_size, data, local_len, NULL);
/* We should never update records containing a half-deleted BLOB. */
ut_a(*len);
@@ -1859,7 +1859,7 @@ row_upd_sec_index_entry(
}
#endif /* UNIV_DEBUG */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
if (*index->name == TEMP_INDEX_PREFIX) {
/* The index->online_status may change if the
@@ -2400,7 +2400,7 @@ row_upd_clust_rec(
/* We may have to modify the tree structure: do a pessimistic descent
down the index tree */
- mtr_start(mtr);
+ mtr_start_trx(mtr, thr_get_trx(thr));
/* NOTE: this transaction has an s-lock or x-lock on the record and
therefore other transactions cannot modify the record when we have no
@@ -2615,7 +2615,7 @@ row_upd_clust_step(
/* We have to restore the cursor to its position */
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
/* If the restoration does not succeed, then the same
transaction has deleted the record on which the cursor was,
@@ -2671,7 +2671,7 @@ row_upd_clust_step(
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, thr_get_trx(thr));
success = btr_pcur_restore_position(BTR_MODIFY_LEAF, pcur,
&mtr);
diff --git a/storage/xtradb/srv/srv0mon.cc b/storage/xtradb/srv/srv0mon.cc
index 919f592e1ec..02dfcb75cad 100644
--- a/storage/xtradb/srv/srv0mon.cc
+++ b/storage/xtradb/srv/srv0mon.cc
@@ -1271,6 +1271,26 @@ static monitor_info_t innodb_counter_info[] =
MONITOR_EXISTING | MONITOR_DEFAULT_ON),
MONITOR_DEFAULT_START, MONITOR_OLVD_ROW_UPDTATED},
+ {"dml_system_reads", "dml", "Number of system rows read",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_READ},
+
+ {"dml_system_inserts", "dml", "Number of system rows inserted",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_INSERTED},
+
+ {"dml_system_deletes", "dml", "Number of system rows deleted",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_DELETED},
+
+ {"dml_system_updates", "dml", "Number of system rows updated",
+ static_cast<monitor_type_t>(
+ MONITOR_EXISTING | MONITOR_DEFAULT_ON),
+ MONITOR_DEFAULT_START, MONITOR_OLVD_SYSTEM_ROW_UPDATED},
+
/* ========== Counters for DDL operations ========== */
{"module_ddl", "ddl", "Statistics for DDLs",
MONITOR_MODULE,
@@ -1809,6 +1829,26 @@ srv_mon_process_existing_counter(
value = srv_stats.n_rows_updated;
break;
+ /* innodb_system_rows_read */
+ case MONITOR_OLVD_SYSTEM_ROW_READ:
+ value = srv_stats.n_system_rows_read;
+ break;
+
+ /* innodb_system_rows_inserted */
+ case MONITOR_OLVD_SYSTEM_ROW_INSERTED:
+ value = srv_stats.n_system_rows_inserted;
+ break;
+
+ /* innodb_system_rows_deleted */
+ case MONITOR_OLVD_SYSTEM_ROW_DELETED:
+ value = srv_stats.n_system_rows_deleted;
+ break;
+
+ /* innodb_system_rows_updated */
+ case MONITOR_OLVD_SYSTEM_ROW_UPDATED:
+ value = srv_stats.n_system_rows_updated;
+ break;
+
/* innodb_row_lock_current_waits */
case MONITOR_OVLD_ROW_LOCK_CURRENT_WAIT:
value = srv_stats.n_lock_wait_current_count;
diff --git a/storage/xtradb/srv/srv0srv.cc b/storage/xtradb/srv/srv0srv.cc
index 6af5f0d782c..7244ffdc696 100644
--- a/storage/xtradb/srv/srv0srv.cc
+++ b/storage/xtradb/srv/srv0srv.cc
@@ -391,12 +391,12 @@ in the buffer pool to all database pages in the buffer pool smaller than
the following number. But it is not guaranteed that the value stays below
that during a time of heavy update/insert activity. */
-UNIV_INTERN ulong srv_max_buf_pool_modified_pct = 75;
-UNIV_INTERN ulong srv_max_dirty_pages_pct_lwm = 50;
+UNIV_INTERN double srv_max_buf_pool_modified_pct = 75.0;
+UNIV_INTERN double srv_max_dirty_pages_pct_lwm = 50.0;
/* This is the percentage of log capacity at which adaptive flushing,
if enabled, will kick in. */
-UNIV_INTERN ulong srv_adaptive_flushing_lwm = 10;
+UNIV_INTERN double srv_adaptive_flushing_lwm = 10.0;
/* Number of iterations over which adaptive flushing is averaged. */
UNIV_INTERN ulong srv_flushing_avg_loops = 30;
@@ -505,6 +505,14 @@ UNIV_INTERN my_bool srv_stats_persistent = TRUE;
UNIV_INTERN unsigned long long srv_stats_persistent_sample_pages = 20;
UNIV_INTERN my_bool srv_stats_auto_recalc = TRUE;
+/* The number of rows modified before we calculate new statistics (default 0
+= current limits) */
+UNIV_INTERN unsigned long long srv_stats_modified_counter = 0;
+
+/* Enable traditional statistic calculation based on number of configured
+pages default true. */
+UNIV_INTERN my_bool srv_stats_sample_traditional = TRUE;
+
UNIV_INTERN ibool srv_use_doublewrite_buf = TRUE;
/** doublewrite buffer is 1MB is size i.e.: it can hold 128 16K pages.
@@ -542,6 +550,10 @@ static ulint srv_n_rows_inserted_old = 0;
static ulint srv_n_rows_updated_old = 0;
static ulint srv_n_rows_deleted_old = 0;
static ulint srv_n_rows_read_old = 0;
+static ulint srv_n_system_rows_inserted_old = 0;
+static ulint srv_n_system_rows_updated_old = 0;
+static ulint srv_n_system_rows_deleted_old = 0;
+static ulint srv_n_system_rows_read_old = 0;
UNIV_INTERN ulint srv_truncated_status_writes = 0;
UNIV_INTERN ulint srv_available_undo_logs = 0;
@@ -558,7 +570,11 @@ UNIV_INTERN ib_uint64_t srv_index_page_decompressed = 0;
/* Ensure status variables are on separate cache lines */
+#ifdef __powerpc__
+#define CACHE_LINE_SIZE 128
+#else
#define CACHE_LINE_SIZE 64
+#endif
#define CACHE_ALIGNED __attribute__ ((aligned (CACHE_LINE_SIZE)))
UNIV_INTERN byte
@@ -1206,6 +1222,8 @@ srv_init(void)
trx_i_s_cache_init(trx_i_s_cache);
ut_crc32_init();
+
+ dict_mem_init();
}
/*********************************************************************//**
@@ -1323,6 +1341,11 @@ srv_refresh_innodb_monitor_stats(void)
srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
srv_n_rows_read_old = srv_stats.n_rows_read;
+ srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
+ srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
+ srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
+ srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
+
mutex_exit(&srv_innodb_monitor_mutex);
}
@@ -1628,11 +1651,33 @@ srv_printf_innodb_monitor(
/ time_elapsed,
((ulint) srv_stats.n_rows_read - srv_n_rows_read_old)
/ time_elapsed);
-
+ fprintf(file,
+ "Number of system rows inserted " ULINTPF
+ ", updated " ULINTPF ", deleted " ULINTPF
+ ", read " ULINTPF "\n",
+ (ulint) srv_stats.n_system_rows_inserted,
+ (ulint) srv_stats.n_system_rows_updated,
+ (ulint) srv_stats.n_system_rows_deleted,
+ (ulint) srv_stats.n_system_rows_read);
+ fprintf(file,
+ "%.2f inserts/s, %.2f updates/s,"
+ " %.2f deletes/s, %.2f reads/s\n",
+ ((ulint) srv_stats.n_system_rows_inserted
+ - srv_n_system_rows_inserted_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_updated
+ - srv_n_system_rows_updated_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_deleted
+ - srv_n_system_rows_deleted_old) / time_elapsed,
+ ((ulint) srv_stats.n_system_rows_read
+ - srv_n_system_rows_read_old) / time_elapsed);
srv_n_rows_inserted_old = srv_stats.n_rows_inserted;
srv_n_rows_updated_old = srv_stats.n_rows_updated;
srv_n_rows_deleted_old = srv_stats.n_rows_deleted;
srv_n_rows_read_old = srv_stats.n_rows_read;
+ srv_n_system_rows_inserted_old = srv_stats.n_system_rows_inserted;
+ srv_n_system_rows_updated_old = srv_stats.n_system_rows_updated;
+ srv_n_system_rows_deleted_old = srv_stats.n_system_rows_deleted;
+ srv_n_system_rows_read_old = srv_stats.n_system_rows_read;
/* Only if lock_print_info_summary proceeds correctly,
before we call the lock_print_info_all_transactions
@@ -1906,6 +1951,17 @@ srv_export_innodb_status(void)
export_vars.innodb_rows_deleted = srv_stats.n_rows_deleted;
+ export_vars.innodb_system_rows_read = srv_stats.n_system_rows_read;
+
+ export_vars.innodb_system_rows_inserted =
+ srv_stats.n_system_rows_inserted;
+
+ export_vars.innodb_system_rows_updated =
+ srv_stats.n_system_rows_updated;
+
+ export_vars.innodb_system_rows_deleted =
+ srv_stats.n_system_rows_deleted;
+
export_vars.innodb_num_open_files = fil_n_file_opened;
export_vars.innodb_truncated_status_writes =
diff --git a/storage/xtradb/sync/sync0arr.cc b/storage/xtradb/sync/sync0arr.cc
index 7ad9fe8d40b..1701c705c5b 100644
--- a/storage/xtradb/sync/sync0arr.cc
+++ b/storage/xtradb/sync/sync0arr.cc
@@ -2,7 +2,7 @@
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc.
-Copyright (c) 2013, 2014, SkySQL Ab. All Rights Reserved.
+Copyright (c) 2013, 2014, MariaDB Corporation. All Rights Reserved.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
@@ -1166,7 +1166,7 @@ sync_array_print_long_waits(
(ulong) os_file_n_pending_pwrites);
srv_print_innodb_monitor = TRUE;
- os_event_set(lock_sys->timeout_event);
+ os_event_set(srv_monitor_event);
os_thread_sleep(30000000);
@@ -1311,3 +1311,66 @@ sync_array_get(void)
return(sync_wait_array[i % sync_array_size]);
}
+
+/**********************************************************************//**
+Prints info of the wait array without using any mutexes/semaphores. */
+UNIV_INTERN
+void
+sync_array_print_xtradb(void)
+/*=========================*/
+{
+ ulint i;
+ sync_array_t* arr = sync_array_get();
+
+ fputs("InnoDB: Semaphore wait debug output started for XtraDB:\n", stderr);
+
+ for (i = 0; i < arr->n_cells; i++) {
+ void* wait_object;
+ sync_cell_t* cell;
+ os_thread_id_t reserver=(os_thread_id_t)ULINT_UNDEFINED;
+ ulint loop=0;
+
+ cell = sync_array_get_nth_cell(arr, i);
+
+ wait_object = cell->wait_object;
+
+ if (wait_object == NULL || !cell->waiting) {
+
+ continue;
+ }
+
+ fputs("InnoDB: Warning: semaphore wait:\n",
+ stderr);
+ sync_array_cell_print(stderr, cell, &reserver);
+
+ /* Try to output cell information for writer recursive way */
+ while (reserver != (os_thread_id_t)ULINT_UNDEFINED) {
+ sync_cell_t* reserver_wait;
+
+ reserver_wait = sync_array_find_thread(arr, reserver);
+
+ if (reserver_wait &&
+ reserver_wait->wait_object != NULL &&
+ reserver_wait->waiting) {
+ fputs("InnoDB: Warning: Writer thread is waiting this semaphore:\n",
+ stderr);
+ sync_array_cell_print(stderr, reserver_wait, &reserver);
+
+ if (reserver_wait->thread == reserver) {
+ reserver = (os_thread_id_t)ULINT_UNDEFINED;
+ }
+ } else {
+ reserver = (os_thread_id_t)ULINT_UNDEFINED;
+ }
+
+ /* This is protection against loop */
+ if (loop > 100) {
+ fputs("InnoDB: Warning: Too many waiting threads.\n", stderr);
+ break;
+ }
+ }
+ }
+
+ fputs("InnoDB: Semaphore wait debug output ended:\n", stderr);
+}
+
diff --git a/storage/xtradb/sync/sync0sync.cc b/storage/xtradb/sync/sync0sync.cc
index 46343a71d28..5732e1075cf 100644
--- a/storage/xtradb/sync/sync0sync.cc
+++ b/storage/xtradb/sync/sync0sync.cc
@@ -536,8 +536,6 @@ mutex_set_waiters(
ptr = &(mutex->waiters);
- os_wmb;
-
*ptr = n; /* Here we assume that the write of a single
word in memory is atomic */
}
@@ -651,6 +649,11 @@ spin_loop:
mutex_set_waiters(mutex, 1);
}
+ /* Make sure waiters store won't pass over mutex_test_and_set */
+#ifdef __powerpc__
+ os_mb;
+#endif
+
/* Try to reserve still a few times */
for (i = 0; i < 4; i++) {
if (ib_mutex_test_and_set(mutex) == 0) {
diff --git a/storage/xtradb/trx/trx0i_s.cc b/storage/xtradb/trx/trx0i_s.cc
index 794ee432ca4..3230ac8308c 100644
--- a/storage/xtradb/trx/trx0i_s.cc
+++ b/storage/xtradb/trx/trx0i_s.cc
@@ -1653,7 +1653,7 @@ trx_i_s_create_lock_id(
} else {
/* table lock */
res_len = ut_snprintf(lock_id, lock_id_size,
- TRX_ID_FMT":" UINT64PF,
+ TRX_ID_FMT ":" UINT64PF,
row->lock_trx_id,
row->lock_table_id);
}
diff --git a/storage/xtradb/trx/trx0rec.cc b/storage/xtradb/trx/trx0rec.cc
index 4d3458ff8bb..fa3fe0904b8 100644
--- a/storage/xtradb/trx/trx0rec.cc
+++ b/storage/xtradb/trx/trx0rec.cc
@@ -466,7 +466,7 @@ trx_undo_page_fetch_ext(
{
/* Fetch the BLOB. */
ulint ext_len = btr_copy_externally_stored_field_prefix(
- ext_buf, prefix_len, zip_size, field, *len);
+ ext_buf, prefix_len, zip_size, field, *len, NULL);
/* BLOBs should always be nonempty. */
ut_a(ext_len);
/* Append the BLOB pointer to the prefix. */
@@ -1248,7 +1248,7 @@ trx_undo_report_row_operation(
rseg = trx->rseg;
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&trx->undo_mutex);
/* If the undo log is not assigned yet, assign one */
@@ -1337,7 +1337,7 @@ trx_undo_report_row_operation(
latches, such as SYNC_FSP and SYNC_FSP_PAGE. */
mtr_commit(&mtr);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&rseg->mutex);
trx_undo_free_last_page(trx, undo, &mtr);
@@ -1374,7 +1374,7 @@ trx_undo_report_row_operation(
/* We have to extend the undo log by one page */
ut_ad(++loop_count < 2);
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
/* When we add a page to an undo log, this is analogous to
a pessimistic insert in a B-tree, and we must reserve the
diff --git a/storage/xtradb/trx/trx0roll.cc b/storage/xtradb/trx/trx0roll.cc
index b349614badf..498cbd2712d 100644
--- a/storage/xtradb/trx/trx0roll.cc
+++ b/storage/xtradb/trx/trx0roll.cc
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -131,6 +131,9 @@ trx_rollback_to_savepoint_low(
mem_heap_free(heap);
+ /* There might be work for utility threads.*/
+ srv_active_wake_master_thread();
+
MONITOR_DEC(MONITOR_TRX_ACTIVE);
}
@@ -148,20 +151,10 @@ trx_rollback_to_savepoint(
{
ut_ad(!trx_mutex_own(trx));
- /* Tell Innobase server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
trx_start_if_not_started_xa(trx);
trx_rollback_to_savepoint_low(trx, savept);
- /* Tell Innobase server that there might be work for
- utility threads: */
-
- srv_active_wake_master_thread();
-
return(trx->error_state);
}
@@ -174,8 +167,6 @@ trx_rollback_for_mysql_low(
/*=======================*/
trx_t* trx) /*!< in/out: transaction */
{
- srv_active_wake_master_thread();
-
trx->op_info = "rollback";
/* If we are doing the XA recovery of prepared transactions,
@@ -189,8 +180,6 @@ trx_rollback_for_mysql_low(
ut_a(trx->error_state == DB_SUCCESS);
- srv_active_wake_master_thread();
-
return(trx->error_state);
}
diff --git a/storage/xtradb/trx/trx0trx.cc b/storage/xtradb/trx/trx0trx.cc
index 12f680bd7e2..17986c293e9 100644
--- a/storage/xtradb/trx/trx0trx.cc
+++ b/storage/xtradb/trx/trx0trx.cc
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -1523,6 +1523,12 @@ trx_commit_in_memory(
}
trx->commit_lsn = lsn;
+
+ /* Tell server some activity has happened, since the trx
+ does changes something. Background utility threads like
+ master thread, purge thread or page_cleaner thread might
+ have some work to do. */
+ srv_active_wake_master_thread();
}
/* undo_no is non-zero if we're doing the final commit. */
diff --git a/storage/xtradb/trx/trx0undo.cc b/storage/xtradb/trx/trx0undo.cc
index 290271c6cab..edb85a89c17 100644
--- a/storage/xtradb/trx/trx0undo.cc
+++ b/storage/xtradb/trx/trx0undo.cc
@@ -1067,11 +1067,9 @@ Truncates an undo log from the end. This function is used during a rollback
to free space from an undo log. */
UNIV_INTERN
void
-trx_undo_truncate_end_func(
+trx_undo_truncate_end(
/*=======================*/
-#ifdef UNIV_DEBUG
- const trx_t* trx, /*!< in: transaction whose undo log it is */
-#endif /* UNIV_DEBUG */
+ trx_t* trx, /*!< in: transaction whose undo log it is */
trx_undo_t* undo, /*!< in: undo log */
undo_no_t limit) /*!< in: all undo records with undo number
>= this value should be truncated */
@@ -1086,7 +1084,7 @@ trx_undo_truncate_end_func(
ut_ad(mutex_own(&(trx->rseg->mutex)));
for (;;) {
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
trunc_here = NULL;
@@ -1773,7 +1771,7 @@ trx_undo_assign_undo(
ut_ad(mutex_own(&(trx->undo_mutex)));
- mtr_start(&mtr);
+ mtr_start_trx(&mtr, trx);
mutex_enter(&rseg->mutex);
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index 3ca4ba2b430..2e699db0bd3 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -395,7 +395,7 @@ int my_wildcmp_bin_impl(CHARSET_INFO *cs,
if (tmp <= 0)
return(tmp);
}
- } while (str != str_end && wildstr[0] != w_many);
+ } while (str != str_end);
return(-1);
}
}
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index 1ef772e1d5e..02a9a91ca6a 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
Copyright (c) 2009, 2014, SkySQL Ab.
This program is free software; you can redistribute it and/or modify
@@ -354,7 +354,7 @@ int my_wildcmp_mb_impl(CHARSET_INFO *cs,
if (tmp <= 0)
return (tmp);
}
- } while (str != str_end && wildstr[0] != w_many);
+ } while (str != str_end);
return(-1);
}
}
@@ -1134,7 +1134,7 @@ static int my_wildcmp_mb_bin_impl(CHARSET_INFO *cs,
}
if (*wildstr == w_many)
{ /* Found w_many */
- uchar cmp;
+ int cmp;
const char* mb = wildstr;
int mb_len=0;
@@ -1192,7 +1192,7 @@ static int my_wildcmp_mb_bin_impl(CHARSET_INFO *cs,
if (tmp <= 0)
return (tmp);
}
- } while (str != str_end && wildstr[0] != w_many);
+ } while (str != str_end);
return(-1);
}
}
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index 0785ba35700..7f13cef4474 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -936,9 +936,14 @@ int my_wildcmp_8bit_impl(CHARSET_INFO *cs,
cmp=likeconv(cs,cmp);
do
{
+ /*
+ Find the next character in the subject string equal to 'cmp', then
+ check recursively my_wildcmp_8bit_impl() for the pattern remainder.
+ */
while (str != str_end && (uchar) likeconv(cs,*str) != cmp)
str++;
- if (str++ == str_end) return(-1);
+ if (str++ == str_end)
+ return(-1); /* 'cmp' was not found in the subject string */
{
int tmp=my_wildcmp_8bit_impl(cs,str,str_end,
wildstr,wildend,escape,w_one,
@@ -946,7 +951,13 @@ int my_wildcmp_8bit_impl(CHARSET_INFO *cs,
if (tmp <= 0)
return(tmp);
}
- } while (str != str_end && wildstr[0] != w_many);
+ /*
+ The recursion call did not match. But it returned 1, which means
+ the pattern remainder has some non-special characters.
+ Continue, there is a chance that we'll find another 'cmp'
+ at a different position in the subject string.
+ */
+ } while (str != str_end);
return(-1);
}
}
diff --git a/strings/decimal.c b/strings/decimal.c
index 1b6ffbb110b..979f1b179f9 100644
--- a/strings/decimal.c
+++ b/strings/decimal.c
@@ -1,5 +1,5 @@
-/* Copyright (c) 2004, 2013, Oracle and/or its affiliates.
- Copyright (c) 2009, 2013, Monty Program Ab
+/* Copyright (c) 2004, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, Monty Program Ab.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -127,7 +127,6 @@ typedef longlong dec2;
#define DIG_BASE 1000000000
#define DIG_MAX (DIG_BASE-1)
#define DIG_BASE2 ((dec2)DIG_BASE * (dec2)DIG_BASE)
-#define ROUND_UP(X) (((X)+DIG_PER_DEC1-1)/DIG_PER_DEC1)
static const dec1 powers10[DIG_PER_DEC1+1]={
1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
static const int dig2bytes[DIG_PER_DEC1+1]={0, 1, 1, 2, 2, 3, 3, 4, 4, 4};
@@ -136,6 +135,11 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={
999900000, 999990000, 999999000,
999999900, 999999990 };
+static inline int ROUND_UP(int x)
+{
+ return (x + (x > 0 ? DIG_PER_DEC1 - 1 : 0)) / DIG_PER_DEC1;
+}
+
#ifdef HAVE_valgrind
#define sanity(d) DBUG_ASSERT((d)->len > 0)
#else
@@ -2329,7 +2333,7 @@ static int do_div_mod(const decimal_t *from1, const decimal_t *from2,
error=E_DEC_TRUNCATED;
goto done;
}
- stop1=start1+frac0;
+ stop1= start1 + frac0 + intg0;
frac0+=intg0;
to->intg=0;
while (intg0++ < 0)
diff --git a/tests/async_queries.c b/tests/async_queries.c
index b9393ca76ab..75229eec4b4 100644
--- a/tests/async_queries.c
+++ b/tests/async_queries.c
@@ -21,16 +21,16 @@
API, and compare to running same queries with the normal blocking API.
*/
-#include <sys/time.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
#include <my_global.h>
#include <my_sys.h>
#include <mysql.h>
#include <my_getopt.h>
+#include <sys/time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
#include <event.h>
diff --git a/unittest/sql/my_apc-t.cc b/unittest/sql/my_apc-t.cc
index 05d6722ada4..80bbc6b6e56 100644
--- a/unittest/sql/my_apc-t.cc
+++ b/unittest/sql/my_apc-t.cc
@@ -17,11 +17,12 @@
/*
This file does standalone APC system tests.
*/
-#include <stdio.h>
#include <my_global.h>
#include <my_pthread.h>
#include <my_sys.h>
+#include <stdio.h>
+
#include <tap.h>
/*
diff --git a/vio/viossl.c b/vio/viossl.c
index a4f0a1bd213..0bc2c263336 100644
--- a/vio/viossl.c
+++ b/vio/viossl.c
@@ -26,41 +26,20 @@
#ifdef HAVE_OPENSSL
-#ifndef DBUG_OFF
-
-static void
-report_errors(SSL* ssl)
-{
- unsigned long l;
- const char *file;
- const char *data;
- int line, flags;
- char buf[512];
-
- DBUG_ENTER("report_errors");
-
- while ((l= ERR_get_error_line_data(&file,&line,&data,&flags)))
- {
- DBUG_PRINT("error", ("OpenSSL: %s:%s:%d:%s\n", ERR_error_string(l,buf),
- file,line,(flags&ERR_TXT_STRING)?data:"")) ;
- }
-
- if (ssl)
- {
-#ifndef DBUG_OFF
- int error= SSL_get_error(ssl, l);
- DBUG_PRINT("error", ("error: %s (%d)",
- ERR_error_string(error, buf), error));
-#endif
- }
-
- DBUG_PRINT("info", ("socket_errno: %d", socket_errno));
- DBUG_VOID_RETURN;
-}
-
+#ifdef HAVE_YASSL
+/*
+ yassl seem to be different here, SSL_get_error() value can be
+ directly passed to ERR_error_string(), and these errors don't go
+ into ERR_get_error() stack.
+ in openssl, apparently, SSL_get_error() values live in a different
+ namespace, one needs to use ERR_get_error() as an argument
+ for ERR_error_string().
+*/
+#define SSL_errno(X,Y) SSL_get_error(X,Y)
+#else
+#define SSL_errno(X,Y) ERR_get_error()
#endif
-
/**
Obtain the equivalent system error status for the last SSL I/O operation.
@@ -143,9 +122,6 @@ static my_bool ssl_should_retry(Vio *vio, int ret, enum enum_vio_io_event *event
*event= VIO_IO_EVENT_WRITE;
break;
default:
-#ifndef DBUG_OFF
- report_errors(ssl);
-#endif
should_retry= FALSE;
ssl_set_sys_error(ssl_error);
break;
@@ -181,10 +157,6 @@ size_t vio_ssl_read(Vio *vio, uchar *buf, size_t size)
}
}
-#ifndef DBUG_OFF
- if (ret < 0)
- report_errors((SSL*) vio->ssl_arg);
-#endif
DBUG_PRINT("exit", ("%d", (int) ret));
DBUG_RETURN(ret < 0 ? -1 : ret);
@@ -219,10 +191,6 @@ size_t vio_ssl_write(Vio *vio, const uchar *buf, size_t size)
}
}
-#ifndef DBUG_OFF
- if (ret < 0)
- report_errors((SSL*) vio->ssl_arg);
-#endif
DBUG_RETURN(ret < 0 ? -1 : ret);
}
@@ -390,7 +358,7 @@ static int ssl_do(struct st_VioSSLFd *ptr, Vio *vio, long timeout,
if ((r= ssl_handshake_loop(vio, ssl, func)) < 1)
{
DBUG_PRINT("error", ("SSL_connect/accept failure"));
- *errptr= SSL_get_error(ssl, r);
+ *errptr= SSL_errno(ssl, r);
SSL_free(ssl);
vio_blocking(vio, was_blocking, &unused);
DBUG_RETURN(1);
diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c
index ef3dfb1f5b0..ee944c68f92 100644
--- a/vio/viosslfactories.c
+++ b/vio/viosslfactories.c
@@ -51,27 +51,6 @@ static DH *get_dh512(void)
}
-static void
-report_errors()
-{
- unsigned long l;
- const char* file;
- const char* data;
- int line,flags;
-
- DBUG_ENTER("report_errors");
-
- while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
- {
-#ifndef DBUG_OFF /* Avoid warning */
- char buf[200];
- DBUG_PRINT("error", ("OpenSSL: %s:%s:%d:%s\n", ERR_error_string(l,buf),
- file,line,(flags & ERR_TXT_STRING) ? data : "")) ;
-#endif
- }
- DBUG_VOID_RETURN;
-}
-
static const char*
ssl_error_string[] =
{
@@ -193,16 +172,17 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
DBUG_RETURN(0);
if (!(ssl_fd->ssl_context= SSL_CTX_new(is_client_method ?
- TLSv1_client_method() :
- TLSv1_server_method())))
+ SSLv23_client_method() :
+ SSLv23_server_method())))
{
*error= SSL_INITERR_MEMFAIL;
DBUG_PRINT("error", ("%s", sslGetErrString(*error)));
- report_errors();
my_free(ssl_fd);
DBUG_RETURN(0);
}
+ SSL_CTX_set_options(ssl_fd->ssl_context, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
+
/*
Set the ciphers that can be used
NOTE: SSL_CTX_set_cipher_list will return 0 if
@@ -213,7 +193,6 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
{
*error= SSL_INITERR_CIPHERS;
DBUG_PRINT("error", ("%s", sslGetErrString(*error)));
- report_errors();
SSL_CTX_free(ssl_fd->ssl_context);
my_free(ssl_fd);
DBUG_RETURN(0);
@@ -230,7 +209,6 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
*error= SSL_INITERR_BAD_PATHS;
DBUG_PRINT("error", ("SSL_CTX_load_verify_locations failed : %s",
sslGetErrString(*error)));
- report_errors();
SSL_CTX_free(ssl_fd->ssl_context);
my_free(ssl_fd);
DBUG_RETURN(0);
@@ -241,7 +219,6 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
{
*error= SSL_INITERR_BAD_PATHS;
DBUG_PRINT("error", ("%s", sslGetErrString(*error)));
- report_errors();
SSL_CTX_free(ssl_fd->ssl_context);
my_free(ssl_fd);
DBUG_RETURN(0);
@@ -264,7 +241,6 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
DBUG_PRINT("warning", ("X509_STORE_load_locations for CRL failed"));
*error= SSL_INITERR_BAD_PATHS;
DBUG_PRINT("error", ("%s", sslGetErrString(*error)));
- report_errors();
SSL_CTX_free(ssl_fd->ssl_context);
my_free(ssl_fd);
DBUG_RETURN(0);
@@ -275,7 +251,6 @@ new_VioSSLFd(const char *key_file, const char *cert_file,
if (vio_set_cert_stuff(ssl_fd->ssl_context, cert_file, key_file, error))
{
DBUG_PRINT("error", ("vio_set_cert_stuff failed"));
- report_errors();
SSL_CTX_free(ssl_fd->ssl_context);
my_free(ssl_fd);
DBUG_RETURN(0);